From 9d38164c9dd58601e25e026d7bb38911a10c592e Mon Sep 17 00:00:00 2001 From: mamingshuai Date: Wed, 2 Jun 2021 00:05:19 +0800 Subject: [PATCH] update OpenHarmony 2.0 Canary --- .gitattributes | 0 .gitignore | 14 + BUILD.gn | 134 + LICENSE | 177 + OAT.xml | 91 + README.en.md | 36 - README.md | 115 +- README_zh.md | 102 + ace_config.gni | 26 + adapter/common/cpp/BUILD.gn | 179 + adapter/common/cpp/ace_res_config.cpp | 720 + adapter/common/cpp/ace_res_config.h | 66 + adapter/common/cpp/ace_res_data_struct.h | 42 + adapter/common/cpp/ace_res_key_parser.cpp | 276 + adapter/common/cpp/ace_res_key_parser.h | 57 + adapter/common/cpp/ace_trace.cpp | 39 + adapter/common/cpp/file_asset_provider.cpp | 120 + adapter/common/cpp/file_asset_provider.h | 54 + adapter/common/cpp/flutter_asset_manager.h | 95 + adapter/common/cpp/flutter_task_executor.cpp | 155 + adapter/common/cpp/flutter_task_executor.h | 55 + adapter/common/cpp/flutter_window.cpp | 69 + adapter/common/cpp/flutter_window.h | 48 + adapter/common/cpp/localization.cpp | 44 + .../multimodal/fake_multimodal_subscriber.h | 42 + adapter/common/cpp/thread_util.cpp | 31 + adapter/ohos/cpp/BUILD.gn | 63 + adapter/ohos/cpp/ace_ability.cpp | 285 + adapter/ohos/cpp/ace_ability.h | 61 + adapter/ohos/cpp/ace_application_info.cpp | 190 + adapter/ohos/cpp/ace_application_info.h | 68 + adapter/ohos/cpp/ace_container.cpp | 589 + adapter/ohos/cpp/ace_container.h | 158 + adapter/ohos/cpp/flutter_ace_view.cpp | 476 + adapter/ohos/cpp/flutter_ace_view.h | 197 + adapter/ohos/cpp/platform_event_callback.h | 36 + adapter/ohos/osal/BUILD.gn | 59 + adapter/ohos/osal/ace_trace.cpp | 117 + adapter/ohos/osal/event_report.cpp | 239 + adapter/ohos/osal/fake_asset_manager.h | 50 + adapter/ohos/osal/fake_task_executor.h | 67 + adapter/ohos/osal/log_wrapper.cpp | 64 + adapter/ohos/osal/system_properties.cpp | 149 + adapter/preview/entrance/BUILD.gn | 70 + adapter/preview/entrance/ace_ability.cpp | 294 + adapter/preview/entrance/ace_ability.h | 73 + .../preview/entrance/ace_application_info.cpp | 160 + .../preview/entrance/ace_application_info.h | 44 + adapter/preview/entrance/ace_container.cpp | 385 + adapter/preview/entrance/ace_container.h | 136 + .../entrance/ace_resource_register.cpp | 35 + .../preview/entrance/ace_resource_register.h | 34 + adapter/preview/entrance/ace_run_args.h | 92 + adapter/preview/entrance/flutter_ace_view.cpp | 186 + adapter/preview/entrance/flutter_ace_view.h | 182 + .../entrance/flutter_task_executor.cpp | 104 + .../preview/entrance/flutter_task_executor.h | 51 + adapter/preview/entrance/flutter_window.cpp | 69 + adapter/preview/entrance/flutter_window.h | 48 + adapter/preview/entrance/samples/BUILD.gn | 110 + .../entrance/samples/ace_card_test.cpp | 88 + .../entrance/samples/ace_phone_test.cpp | 82 + .../entrance/samples/ace_tablet_test.cpp | 82 + .../preview/entrance/samples/ace_tv_test.cpp | 81 + .../entrance/samples/ace_watch_test.cpp | 81 + adapter/preview/osal/BUILD.gn | 57 + adapter/preview/osal/ace_trace.cpp | 33 + adapter/preview/osal/download_manager.cpp | 125 + adapter/preview/osal/event_report.cpp | 54 + adapter/preview/osal/log_wrapper.cpp | 96 + adapter/preview/osal/system_properties.cpp | 138 + figures/JS-UI框架架构.png | Bin 0 -> 35564 bytes figures/framework-architecture.png | Bin 0 -> 125451 bytes frameworks/base/BUILD.gn | 114 + frameworks/base/geometry/arc.h | 147 + frameworks/base/geometry/axis.h | 35 + frameworks/base/geometry/dimension.h | 196 + frameworks/base/geometry/dimension_offset.h | 77 + frameworks/base/geometry/matrix4.cpp | 308 + frameworks/base/geometry/matrix4.h | 76 + frameworks/base/geometry/offset.h | 150 + frameworks/base/geometry/point.h | 91 + frameworks/base/geometry/rect.h | 389 + frameworks/base/geometry/rrect.h | 167 + frameworks/base/geometry/size.h | 192 + frameworks/base/i18n/BUILD.gn | 65 + frameworks/base/i18n/localization.cpp | 906 + frameworks/base/i18n/localization.h | 252 + frameworks/base/json/json_util.cpp | 377 + frameworks/base/json/json_util.h | 102 + frameworks/base/log/ace_trace.cpp | 46 + frameworks/base/log/ace_trace.h | 55 + frameworks/base/log/dump_log.cpp | 76 + frameworks/base/log/dump_log.h | 95 + frameworks/base/log/event_report.h | 177 + frameworks/base/log/log.h | 21 + frameworks/base/log/log_wrapper.h | 122 + frameworks/base/memory/ace_type.h | 133 + frameworks/base/memory/memory_monitor.cpp | 120 + frameworks/base/memory/memory_monitor.h | 83 + frameworks/base/memory/memory_monitor_def.h | 66 + frameworks/base/memory/ref_counter.h | 168 + frameworks/base/memory/referenced.h | 466 + frameworks/base/memory/type_info_base.h | 167 + frameworks/base/network/download_manager.cpp | 125 + frameworks/base/network/download_manager.h | 35 + frameworks/base/resource/BUILD.gn | 159 + frameworks/base/resource/asset_manager.h | 43 + frameworks/base/resource/binary/close.svg | 13 + frameworks/base/resource/binary/correct.svg | 12 + .../base/resource/binary/down_arrow.svg | 10 + .../base/resource/binary/exit_full_screen.svg | 1 + .../base/resource/binary/full_screen.svg | 1 + .../base/resource/binary/hide_password.svg | 15 + .../base/resource/binary/i18n/entry.json | 2324 + .../base/resource/binary/i18n/errorcode.json | 322 + frameworks/base/resource/binary/ic_back.svg | 17 + frameworks/base/resource/binary/ic_more.svg | 13 + .../base/resource/binary/ic_more_dark.svg | 13 + .../resource/binary/ic_more_transparent.svg | 13 + .../base/resource/binary/indexer_arrow.png | Bin 0 -> 761 bytes .../base/resource/binary/indexletter_bar.json | 2016 + .../base/resource/binary/left_arrow.svg | 13 + frameworks/base/resource/binary/mac/close.o | Bin 0 -> 1914 bytes frameworks/base/resource/binary/mac/correct.o | Bin 0 -> 1184 bytes .../base/resource/binary/mac/down_arrow.o | Bin 0 -> 1232 bytes frameworks/base/resource/binary/mac/entry.o | Bin 0 -> 57756 bytes .../base/resource/binary/mac/errorcode.o | Bin 0 -> 16184 bytes .../resource/binary/mac/exit_full_screen.o | Bin 0 -> 866 bytes .../base/resource/binary/mac/full_screen.o | Bin 0 -> 844 bytes .../base/resource/binary/mac/hide_password.o | Bin 0 -> 3962 bytes frameworks/base/resource/binary/mac/ic_back.o | Bin 0 -> 1960 bytes frameworks/base/resource/binary/mac/ic_more.o | Bin 0 -> 1584 bytes .../base/resource/binary/mac/ic_more_dark.o | Bin 0 -> 1606 bytes .../resource/binary/mac/ic_more_transparent.o | Bin 0 -> 1604 bytes .../base/resource/binary/mac/indexer_arrow.o | Bin 0 -> 1218 bytes .../resource/binary/mac/indexletter_bar.o | Bin 0 -> 35610 bytes .../base/resource/binary/mac/left_arrow.o | Bin 0 -> 1032 bytes .../resource/binary/mac/navigation_bar_back.o | Bin 0 -> 796 bytes .../resource/binary/mac/navigation_bar_more.o | Bin 0 -> 684 bytes frameworks/base/resource/binary/mac/pause.o | Bin 0 -> 874 bytes .../base/resource/binary/mac/piece_delete.o | Bin 0 -> 1302 bytes frameworks/base/resource/binary/mac/play.o | Bin 0 -> 806 bytes .../resource/binary/mac/rate_star_big_off.o | Bin 0 -> 2006 bytes .../resource/binary/mac/rate_star_big_on.o | Bin 0 -> 1986 bytes .../resource/binary/mac/rate_star_small_off.o | Bin 0 -> 2012 bytes .../resource/binary/mac/rate_star_small_on.o | Bin 0 -> 1992 bytes .../base/resource/binary/mac/right_arrow.o | Bin 0 -> 1052 bytes frameworks/base/resource/binary/mac/search.o | Bin 0 -> 1836 bytes .../binary/mac/select_arrow_disabled.o | Bin 0 -> 858 bytes .../resource/binary/mac/select_arrow_normal.o | Bin 0 -> 772 bytes .../resource/binary/mac/semi_modal_bar_down.o | Bin 0 -> 748 bytes .../binary/mac/semi_modal_bar_middle.o | Bin 0 -> 738 bytes frameworks/base/resource/binary/mac/share.o | Bin 0 -> 2242 bytes .../base/resource/binary/mac/show_password.o | Bin 0 -> 2402 bytes .../resource/binary/mac/stepper_back_arrow.o | Bin 0 -> 1536 bytes .../resource/binary/mac/stepper_next_arrow.o | Bin 0 -> 1728 bytes .../base/resource/binary/mac/translate_c2e.o | Bin 0 -> 6154 bytes .../binary/mac/tv_rate_star_big_off.o | Bin 0 -> 2166 bytes .../resource/binary/mac/tv_rate_star_big_on.o | Bin 0 -> 2148 bytes .../binary/mac/tv_rate_star_small_off.o | Bin 0 -> 2092 bytes .../binary/mac/tv_rate_star_small_on.o | Bin 0 -> 2074 bytes .../base/resource/binary/mac/up_arrow.o | Bin 0 -> 1202 bytes .../resource/binary/mac/watch_down_arrow.o | Bin 0 -> 2154 bytes .../base/resource/binary/mac/watch_up_arrow.o | Bin 0 -> 2036 bytes frameworks/base/resource/binary/mac/wrong.o | Bin 0 -> 1274 bytes .../resource/binary/navigation_bar_back.png | Bin 0 -> 322 bytes .../resource/binary/navigation_bar_more.png | Bin 0 -> 213 bytes frameworks/base/resource/binary/pause.svg | 1 + .../base/resource/binary/piece_delete.svg | 11 + frameworks/base/resource/binary/play.svg | 1 + .../resource/binary/rate_star_big_half.png | Bin 0 -> 4545 bytes .../resource/binary/rate_star_big_off.png | Bin 0 -> 4112 bytes .../resource/binary/rate_star_big_off.svg | 10 + .../base/resource/binary/rate_star_big_on.png | Bin 0 -> 4563 bytes .../base/resource/binary/rate_star_big_on.svg | 9 + .../resource/binary/rate_star_small_half.png | Bin 0 -> 3270 bytes .../resource/binary/rate_star_small_off.png | Bin 0 -> 3120 bytes .../resource/binary/rate_star_small_off.svg | 10 + .../resource/binary/rate_star_small_on.png | Bin 0 -> 3240 bytes .../resource/binary/rate_star_small_on.svg | 10 + .../base/resource/binary/right_arrow.svg | 13 + frameworks/base/resource/binary/search.svg | 13 + .../resource/binary/select_arrow_disabled.png | Bin 0 -> 384 bytes .../resource/binary/select_arrow_normal.png | Bin 0 -> 302 bytes .../resource/binary/semi_modal_bar_down.svg | 1 + .../resource/binary/semi_modal_bar_middle.svg | 1 + frameworks/base/resource/binary/share.svg | 13 + .../base/resource/binary/show_password.svg | 15 + .../resource/binary/stepper_back_arrow.svg | 16 + .../resource/binary/stepper_next_arrow.svg | 13 + .../base/resource/binary/translate_c2e.svg | 13 + .../resource/binary/tv_rate_star_big_half.png | Bin 0 -> 2292 bytes .../resource/binary/tv_rate_star_big_off.png | Bin 0 -> 1806 bytes .../resource/binary/tv_rate_star_big_off.svg | 15 + .../resource/binary/tv_rate_star_big_on.png | Bin 0 -> 2215 bytes .../resource/binary/tv_rate_star_big_on.svg | 15 + .../binary/tv_rate_star_small_half.png | Bin 0 -> 529 bytes .../binary/tv_rate_star_small_off.png | Bin 0 -> 392 bytes .../binary/tv_rate_star_small_off.svg | 11 + .../resource/binary/tv_rate_star_small_on.png | Bin 0 -> 488 bytes .../resource/binary/tv_rate_star_small_on.svg | 11 + frameworks/base/resource/binary/up_arrow.svg | 10 + .../base/resource/binary/watch_down_arrow.svg | 16 + .../base/resource/binary/watch_up_arrow.svg | 16 + frameworks/base/resource/binary/wrong.svg | 11 + .../base/resource/internal_resource.cpp | 429 + frameworks/base/resource/internal_resource.h | 87 + .../base/resource/shared_image_manager.cpp | 130 + .../base/resource/shared_image_manager.h | 93 + frameworks/base/test/BUILD.gn | 19 + .../base/test/unittest/json_util/BUILD.gn | 56 + .../unittest/json_util/json_util_test.cpp | 420 + .../test/unittest/mock_system_properties.cpp | 25 + .../base/test/unittest/task_executor/BUILD.gn | 49 + .../task_executor/task_executor_test.cpp | 265 + .../base/thread/background_task_executor.cpp | 164 + .../base/thread/background_task_executor.h | 55 + frameworks/base/thread/cancelable_callback.h | 170 + frameworks/base/thread/task_executor.h | 319 + frameworks/base/thread/thread_util.h | 27 + frameworks/base/utils/base_id.cpp | 29 + frameworks/base/utils/base_id.h | 43 + frameworks/base/utils/date_util.cpp | 82 + frameworks/base/utils/date_util.h | 41 + frameworks/base/utils/device_config.h | 43 + frameworks/base/utils/device_type.h | 32 + frameworks/base/utils/event_callback.h | 82 + frameworks/base/utils/label_target.h | 61 + frameworks/base/utils/linear_map.h | 62 + frameworks/base/utils/listener.h | 76 + frameworks/base/utils/macros.h | 47 + frameworks/base/utils/noncopyable.h | 44 + frameworks/base/utils/singleton.h | 48 + frameworks/base/utils/string_utils.cpp | 24 + frameworks/base/utils/string_utils.h | 289 + frameworks/base/utils/system_properties.h | 231 + frameworks/base/utils/time_util.cpp | 103 + frameworks/base/utils/time_util.h | 54 + frameworks/base/utils/type_definition.h | 27 + frameworks/base/utils/utils.h | 98 + frameworks/base/utils/value_change_notifier.h | 109 + frameworks/base/watch_dog/watch_dog.cpp | 160 + frameworks/base/watch_dog/watch_dog.h | 73 + frameworks/bridge/BUILD.gn | 581 + .../bridge/card_frontend/card_frontend.cpp | 309 + .../bridge/card_frontend/card_frontend.h | 222 + .../card_frontend/card_frontend_delegate.cpp | 97 + .../card_frontend/card_frontend_delegate.h | 53 + .../bridge/card_frontend/js_card_parser.cpp | 1694 + .../bridge/card_frontend/js_card_parser.h | 170 + .../bridge/card_frontend/media_queryer.cpp | 361 + .../bridge/card_frontend/media_queryer.h | 57 + .../bridge/codec/byte_buffer_operator.cpp | 80 + .../bridge/codec/byte_buffer_operator.h | 170 + frameworks/bridge/codec/codec_data.h | 234 + frameworks/bridge/codec/function_call.h | 77 + frameworks/bridge/codec/function_codec.h | 43 + .../codec/standard_codec_buffer_operator.cpp | 169 + .../codec/standard_codec_buffer_operator.h | 61 + .../bridge/codec/standard_function_codec.cpp | 66 + .../bridge/codec/standard_function_codec.h | 39 + .../accessibility_node_manager.cpp | 336 + .../accessibility_node_manager.h | 111 + .../fake_accessibility_manager.cpp | 37 + .../fake_accessibility_node_manager.cpp | 98 + .../js_accessibility_manager.cpp | 690 + .../accessibility/js_accessibility_manager.h | 53 + frameworks/bridge/common/dom/dom_badge.cpp | 158 + frameworks/bridge/common/dom/dom_badge.h | 66 + frameworks/bridge/common/dom/dom_button.cpp | 745 + frameworks/bridge/common/dom/dom_button.h | 115 + frameworks/bridge/common/dom/dom_calendar.cpp | 193 + frameworks/bridge/common/dom/dom_calendar.h | 52 + frameworks/bridge/common/dom/dom_camera.cpp | 181 + frameworks/bridge/common/dom/dom_camera.h | 53 + frameworks/bridge/common/dom/dom_canvas.cpp | 47 + frameworks/bridge/common/dom/dom_canvas.h | 45 + frameworks/bridge/common/dom/dom_chart.cpp | 499 + frameworks/bridge/common/dom/dom_chart.h | 208 + frameworks/bridge/common/dom/dom_clock.cpp | 110 + frameworks/bridge/common/dom/dom_clock.h | 85 + frameworks/bridge/common/dom/dom_dialog.cpp | 172 + frameworks/bridge/common/dom/dom_dialog.h | 63 + frameworks/bridge/common/dom/dom_div.cpp | 522 + frameworks/bridge/common/dom/dom_div.h | 116 + frameworks/bridge/common/dom/dom_divider.cpp | 92 + frameworks/bridge/common/dom/dom_divider.h | 51 + frameworks/bridge/common/dom/dom_document.cpp | 444 + frameworks/bridge/common/dom/dom_document.h | 111 + .../bridge/common/dom/dom_grid_column.cpp | 126 + .../bridge/common/dom/dom_grid_column.h | 50 + .../bridge/common/dom/dom_grid_container.cpp | 188 + .../bridge/common/dom/dom_grid_container.h | 48 + frameworks/bridge/common/dom/dom_grid_row.cpp | 92 + frameworks/bridge/common/dom/dom_grid_row.h | 47 + frameworks/bridge/common/dom/dom_image.cpp | 121 + frameworks/bridge/common/dom/dom_image.h | 62 + .../bridge/common/dom/dom_image_animator.cpp | 199 + .../bridge/common/dom/dom_image_animator.h | 66 + frameworks/bridge/common/dom/dom_input.cpp | 393 + frameworks/bridge/common/dom/dom_input.h | 94 + frameworks/bridge/common/dom/dom_label.cpp | 87 + frameworks/bridge/common/dom/dom_label.h | 76 + frameworks/bridge/common/dom/dom_list.cpp | 942 + frameworks/bridge/common/dom/dom_list.h | 205 + .../bridge/common/dom/dom_list_item.cpp | 432 + frameworks/bridge/common/dom/dom_list_item.h | 128 + .../bridge/common/dom/dom_list_item_group.cpp | 224 + .../bridge/common/dom/dom_list_item_group.h | 65 + frameworks/bridge/common/dom/dom_marquee.cpp | 130 + frameworks/bridge/common/dom/dom_marquee.h | 54 + frameworks/bridge/common/dom/dom_menu.cpp | 229 + frameworks/bridge/common/dom/dom_menu.h | 59 + .../bridge/common/dom/dom_navigation_bar.cpp | 200 + .../bridge/common/dom/dom_navigation_bar.h | 58 + .../bridge/common/dom/dom_navigation_menu.cpp | 99 + .../bridge/common/dom/dom_navigation_menu.h | 56 + frameworks/bridge/common/dom/dom_node.cpp | 2895 + frameworks/bridge/common/dom/dom_node.h | 844 + frameworks/bridge/common/dom/dom_option.cpp | 168 + frameworks/bridge/common/dom/dom_option.h | 63 + frameworks/bridge/common/dom/dom_panel.cpp | 166 + frameworks/bridge/common/dom/dom_panel.h | 66 + .../bridge/common/dom/dom_picker_base.cpp | 791 + .../bridge/common/dom/dom_picker_base.h | 104 + .../bridge/common/dom/dom_picker_dialog.cpp | 22 + .../bridge/common/dom/dom_picker_dialog.h | 33 + .../bridge/common/dom/dom_picker_view.cpp | 22 + .../bridge/common/dom/dom_picker_view.h | 33 + frameworks/bridge/common/dom/dom_piece.cpp | 112 + frameworks/bridge/common/dom/dom_piece.h | 53 + frameworks/bridge/common/dom/dom_popup.cpp | 234 + frameworks/bridge/common/dom/dom_popup.h | 67 + frameworks/bridge/common/dom/dom_progress.cpp | 326 + frameworks/bridge/common/dom/dom_progress.h | 85 + frameworks/bridge/common/dom/dom_proxy.cpp | 70 + frameworks/bridge/common/dom/dom_proxy.h | 54 + frameworks/bridge/common/dom/dom_qrcode.cpp | 93 + frameworks/bridge/common/dom/dom_qrcode.h | 52 + frameworks/bridge/common/dom/dom_rating.cpp | 181 + frameworks/bridge/common/dom/dom_rating.h | 60 + .../bridge/common/dom/dom_reflect_map.h | 94 + frameworks/bridge/common/dom/dom_refresh.cpp | 148 + frameworks/bridge/common/dom/dom_refresh.h | 61 + frameworks/bridge/common/dom/dom_search.cpp | 330 + frameworks/bridge/common/dom/dom_search.h | 67 + frameworks/bridge/common/dom/dom_select.cpp | 212 + frameworks/bridge/common/dom/dom_select.h | 83 + frameworks/bridge/common/dom/dom_slider.cpp | 189 + frameworks/bridge/common/dom/dom_slider.h | 79 + frameworks/bridge/common/dom/dom_span.cpp | 166 + frameworks/bridge/common/dom/dom_span.h | 103 + frameworks/bridge/common/dom/dom_stack.cpp | 131 + frameworks/bridge/common/dom/dom_stack.h | 78 + frameworks/bridge/common/dom/dom_stepper.cpp | 201 + frameworks/bridge/common/dom/dom_stepper.h | 60 + .../bridge/common/dom/dom_stepper_item.cpp | 209 + .../bridge/common/dom/dom_stepper_item.h | 86 + frameworks/bridge/common/dom/dom_svg.cpp | 105 + frameworks/bridge/common/dom/dom_svg.h | 50 + .../bridge/common/dom/dom_svg_animate.cpp | 196 + .../bridge/common/dom/dom_svg_animate.h | 68 + .../common/dom/dom_svg_animate_motion.cpp | 56 + .../common/dom/dom_svg_animate_motion.h | 51 + .../common/dom/dom_svg_animate_transform.cpp | 44 + .../common/dom/dom_svg_animate_transform.h | 45 + frameworks/bridge/common/dom/dom_svg_base.cpp | 148 + frameworks/bridge/common/dom/dom_svg_base.h | 62 + .../bridge/common/dom/dom_svg_circle.cpp | 70 + frameworks/bridge/common/dom/dom_svg_circle.h | 47 + .../bridge/common/dom/dom_svg_ellipse.cpp | 75 + .../bridge/common/dom/dom_svg_ellipse.h | 48 + frameworks/bridge/common/dom/dom_svg_line.cpp | 75 + frameworks/bridge/common/dom/dom_svg_line.h | 48 + frameworks/bridge/common/dom/dom_svg_path.cpp | 60 + frameworks/bridge/common/dom/dom_svg_path.h | 45 + .../bridge/common/dom/dom_svg_polygon.cpp | 60 + .../bridge/common/dom/dom_svg_polygon.h | 45 + .../bridge/common/dom/dom_svg_polyline.cpp | 60 + .../bridge/common/dom/dom_svg_polyline.h | 45 + frameworks/bridge/common/dom/dom_svg_rect.cpp | 85 + frameworks/bridge/common/dom/dom_svg_rect.h | 50 + frameworks/bridge/common/dom/dom_svg_text.cpp | 117 + frameworks/bridge/common/dom/dom_svg_text.h | 61 + .../bridge/common/dom/dom_svg_text_path.cpp | 91 + .../bridge/common/dom/dom_svg_text_path.h | 50 + .../bridge/common/dom/dom_svg_tspan.cpp | 41 + frameworks/bridge/common/dom/dom_svg_tspan.h | 37 + frameworks/bridge/common/dom/dom_swiper.cpp | 232 + frameworks/bridge/common/dom/dom_swiper.h | 61 + frameworks/bridge/common/dom/dom_switch.cpp | 179 + frameworks/bridge/common/dom/dom_switch.h | 56 + frameworks/bridge/common/dom/dom_tab_bar.cpp | 169 + frameworks/bridge/common/dom/dom_tab_bar.h | 70 + .../bridge/common/dom/dom_tab_content.cpp | 121 + .../bridge/common/dom/dom_tab_content.h | 57 + frameworks/bridge/common/dom/dom_tabs.cpp | 89 + frameworks/bridge/common/dom/dom_tabs.h | 105 + frameworks/bridge/common/dom/dom_text.cpp | 240 + frameworks/bridge/common/dom/dom_text.h | 71 + frameworks/bridge/common/dom/dom_textarea.cpp | 354 + frameworks/bridge/common/dom/dom_textarea.h | 74 + frameworks/bridge/common/dom/dom_toggle.cpp | 205 + frameworks/bridge/common/dom/dom_toggle.h | 69 + frameworks/bridge/common/dom/dom_tool_bar.cpp | 114 + frameworks/bridge/common/dom/dom_tool_bar.h | 62 + .../bridge/common/dom/dom_tool_bar_item.cpp | 260 + .../bridge/common/dom/dom_tool_bar_item.h | 89 + frameworks/bridge/common/dom/dom_type.cpp | 1041 + frameworks/bridge/common/dom/dom_type.h | 1048 + frameworks/bridge/common/dom/dom_video.cpp | 267 + frameworks/bridge/common/dom/dom_video.h | 70 + frameworks/bridge/common/dom/dom_web.cpp | 79 + frameworks/bridge/common/dom/dom_web.h | 51 + .../common/dom/input/dom_button_util.cpp | 262 + .../bridge/common/dom/input/dom_button_util.h | 55 + .../common/dom/input/dom_checkbox_util.cpp | 101 + .../common/dom/input/dom_checkbox_util.h | 47 + .../common/dom/input/dom_radio_util.cpp | 194 + .../bridge/common/dom/input/dom_radio_util.h | 56 + .../common/dom/input/dom_textfield_util.cpp | 427 + .../common/dom/input/dom_textfield_util.h | 67 + .../common/inspector/inspect_button.cpp | 49 + .../bridge/common/inspector/inspect_button.h | 32 + .../common/inspector/inspect_canvas.cpp | 30 + .../bridge/common/inspector/inspect_canvas.h | 32 + .../bridge/common/inspector/inspect_chart.cpp | 54 + .../bridge/common/inspector/inspect_chart.h | 32 + .../common/inspector/inspect_dialog.cpp | 38 + .../bridge/common/inspector/inspect_dialog.h | 32 + .../bridge/common/inspector/inspect_div.cpp | 41 + .../bridge/common/inspector/inspect_div.h | 32 + .../common/inspector/inspect_divider.cpp | 51 + .../bridge/common/inspector/inspect_divider.h | 32 + .../bridge/common/inspector/inspect_image.cpp | 35 + .../bridge/common/inspector/inspect_image.h | 32 + .../inspector/inspect_image_animator.cpp | 36 + .../common/inspector/inspect_image_animator.h | 32 + .../bridge/common/inspector/inspect_input.cpp | 49 + .../bridge/common/inspector/inspect_input.h | 32 + .../bridge/common/inspector/inspect_label.cpp | 51 + .../bridge/common/inspector/inspect_label.h | 32 + .../bridge/common/inspector/inspect_list.cpp | 54 + .../bridge/common/inspector/inspect_list.h | 32 + .../common/inspector/inspect_list_item.cpp | 37 + .../common/inspector/inspect_list_item.h | 32 + .../inspector/inspect_list_item_group.cpp | 35 + .../inspector/inspect_list_item_group.h | 32 + .../common/inspector/inspect_marquee.cpp | 47 + .../bridge/common/inspector/inspect_marquee.h | 32 + .../bridge/common/inspector/inspect_menu.cpp | 39 + .../bridge/common/inspector/inspect_menu.h | 32 + .../bridge/common/inspector/inspect_node.cpp | 92 + .../bridge/common/inspector/inspect_node.h | 49 + .../common/inspector/inspect_option.cpp | 40 + .../bridge/common/inspector/inspect_option.h | 32 + .../common/inspector/inspect_picker.cpp | 50 + .../bridge/common/inspector/inspect_picker.h | 32 + .../common/inspector/inspect_picker_view.cpp | 50 + .../common/inspector/inspect_picker_view.h | 32 + .../bridge/common/inspector/inspect_popup.cpp | 39 + .../bridge/common/inspector/inspect_popup.h | 32 + .../common/inspector/inspect_progress.cpp | 47 + .../common/inspector/inspect_progress.h | 32 + .../common/inspector/inspect_rating.cpp | 45 + .../bridge/common/inspector/inspect_rating.h | 32 + .../common/inspector/inspect_refresh.cpp | 54 + .../bridge/common/inspector/inspect_refresh.h | 32 + .../common/inspector/inspect_search.cpp | 35 + .../bridge/common/inspector/inspect_search.h | 32 + .../common/inspector/inspect_select.cpp | 33 + .../bridge/common/inspector/inspect_select.h | 32 + .../common/inspector/inspect_slider.cpp | 52 + .../bridge/common/inspector/inspect_slider.h | 32 + .../bridge/common/inspector/inspect_span.cpp | 39 + .../bridge/common/inspector/inspect_span.h | 32 + .../bridge/common/inspector/inspect_stack.cpp | 31 + .../bridge/common/inspector/inspect_stack.h | 32 + .../common/inspector/inspect_swiper.cpp | 48 + .../bridge/common/inspector/inspect_swiper.h | 32 + .../common/inspector/inspect_switch.cpp | 43 + .../bridge/common/inspector/inspect_switch.h | 32 + .../common/inspector/inspect_tab_bar.cpp | 39 + .../bridge/common/inspector/inspect_tab_bar.h | 32 + .../common/inspector/inspect_tab_content.cpp | 33 + .../common/inspector/inspect_tab_content.h | 32 + .../bridge/common/inspector/inspect_tabs.cpp | 34 + .../bridge/common/inspector/inspect_tabs.h | 32 + .../bridge/common/inspector/inspect_text.cpp | 50 + .../bridge/common/inspector/inspect_text.h | 32 + .../common/inspector/inspect_textarea.cpp | 46 + .../common/inspector/inspect_textarea.h | 32 + .../bridge/common/inspector/inspect_video.cpp | 36 + .../bridge/common/inspector/inspect_video.h | 32 + .../common/inspector/inspector_client.cpp | 53 + .../common/inspector/inspector_client.h | 49 + .../common/inspector/js_inspector_manager.cpp | 593 + .../common/inspector/js_inspector_manager.h | 56 + .../common/manifest/manifest_appinfo.cpp | 70 + .../bridge/common/manifest/manifest_appinfo.h | 59 + .../common/manifest/manifest_parser.cpp | 91 + .../bridge/common/manifest/manifest_parser.h | 55 + .../common/manifest/manifest_router.cpp | 82 + .../bridge/common/manifest/manifest_router.h | 47 + .../common/manifest/manifest_widget.cpp | 61 + .../bridge/common/manifest/manifest_widget.h | 69 + .../common/manifest/manifest_window.cpp | 63 + .../bridge/common/manifest/manifest_window.h | 46 + .../common/media_query/media_query_info.cpp | 73 + .../common/media_query/media_query_info.h | 88 + frameworks/bridge/common/utils/class_utils.h | 34 + .../bridge/common/utils/function_traits.h | 64 + frameworks/bridge/common/utils/page_id_pool.h | 57 + frameworks/bridge/common/utils/source_map.cpp | 249 + frameworks/bridge/common/utils/source_map.h | 68 + frameworks/bridge/common/utils/utils.cpp | 301 + frameworks/bridge/common/utils/utils.h | 376 + .../declarative_frontend.cpp | 666 + .../declarative_frontend.h | 201 + .../declarative_frontend/engine/bindings.h | 29 + .../declarative_frontend/engine/bindings.inl | 108 + .../engine/bindings_defines.h | 71 + .../engine/bindings_implementation.cpp | 18 + .../engine/bindings_implementation.h | 340 + .../engine/bindings_implementation.inl | 124 + .../engine/declarative_engine_loader.cpp | 62 + .../engine/declarative_engine_loader.h | 34 + .../engine/js_object_template.h | 50 + .../engine/js_object_template.inl | 47 + .../engine/js_view_listeners.cpp | 54 + .../engine/js_view_listeners.h | 65 + .../engine/jsproxyClass.js | 518 + .../quickjs/functions/qjs_click_function.cpp | 61 + .../quickjs/functions/qjs_click_function.h | 42 + .../functions/qjs_foreach_function.cpp | 272 + .../quickjs/functions/qjs_foreach_function.h | 81 + .../engine/quickjs/functions/qjs_function.cpp | 79 + .../engine/quickjs/functions/qjs_function.h | 106 + .../quickjs/functions/qjs_touch_function.cpp | 73 + .../quickjs/functions/qjs_touch_function.h | 47 + .../quickjs/functions/qjs_view_function.cpp | 195 + .../quickjs/functions/qjs_view_function.h | 52 + .../engine/quickjs/qjs_bindings.cpp | 26 + .../engine/quickjs/qjs_bindings.h | 211 + .../engine/quickjs/qjs_bindings.inl | 322 + .../engine/quickjs/qjs_declarative_engine.cpp | 165 + .../engine/quickjs/qjs_declarative_engine.h | 81 + .../qjs_declarative_engine_instance.cpp | 405 + .../quickjs/qjs_declarative_engine_instance.h | 156 + .../qjs_function_list_entries_container.cpp | 28 + .../qjs_function_list_entries_container.h | 49 + .../engine/quickjs/qjs_helpers.cpp | 76 + .../engine/quickjs/qjs_helpers.h | 35 + .../engine/quickjs/qjs_object_template.cpp | 39 + .../engine/quickjs/qjs_object_template.h | 61 + .../engine/quickjs/qjs_object_template.inl | 55 + .../engine/quickjs/qjs_value_conversions.h | 99 + .../engine/quickjs/qjs_view_register.cpp | 253 + .../frontend_delegate_declarative.cpp | 1340 + .../frontend_delegate_declarative.h | 266 + .../jsview/js_animation.cpp | 169 + .../jsview/js_animation.h | 102 + .../declarative_frontend/jsview/js_button.cpp | 265 + .../declarative_frontend/jsview/js_button.h | 104 + .../declarative_frontend/jsview/js_column.cpp | 111 + .../declarative_frontend/jsview/js_column.h | 59 + .../jsview/js_container_base.cpp | 290 + .../jsview/js_container_base.h | 88 + .../jsview/js_customview_base.cpp | 135 + .../jsview/js_customview_base.h | 136 + .../jsview/js_divider.cpp | 126 + .../declarative_frontend/jsview/js_divider.h | 59 + .../declarative_frontend/jsview/js_flex.h | 126 + .../declarative_frontend/jsview/js_flex.inl | 242 + .../jsview/js_foreach.cpp | 285 + .../declarative_frontend/jsview/js_foreach.h | 107 + .../declarative_frontend/jsview/js_grid.cpp | 179 + .../declarative_frontend/jsview/js_grid.h | 74 + .../jsview/js_grid_item.cpp | 164 + .../jsview/js_grid_item.h | 74 + .../declarative_frontend/jsview/js_image.cpp | 255 + .../declarative_frontend/jsview/js_image.h | 93 + .../jsview/js_interactable_view.cpp | 181 + .../jsview/js_interactable_view.h | 77 + .../declarative_frontend/jsview/js_list.cpp | 550 + .../declarative_frontend/jsview/js_list.h | 130 + .../jsview/js_list_item.cpp | 140 + .../jsview/js_list_item.h | 59 + .../jsview/js_navigator.cpp | 126 + .../jsview/js_navigator.h | 82 + .../jsview/js_pan_handler.cpp | 229 + .../jsview/js_pan_handler.h | 86 + .../declarative_frontend/jsview/js_row.cpp | 108 + .../declarative_frontend/jsview/js_row.h | 60 + .../jsview/js_sliding_panel.cpp | 338 + .../jsview/js_sliding_panel.h | 88 + .../declarative_frontend/jsview/js_stack.cpp | 224 + .../declarative_frontend/jsview/js_stack.h | 68 + .../declarative_frontend/jsview/js_swiper.cpp | 441 + .../declarative_frontend/jsview/js_swiper.h | 92 + .../declarative_frontend/jsview/js_text.cpp | 288 + .../declarative_frontend/jsview/js_text.h | 77 + .../jsview/js_touch_handler.cpp | 177 + .../jsview/js_touch_handler.h | 87 + .../declarative_frontend/jsview/js_view.cpp | 306 + .../declarative_frontend/jsview/js_view.h | 92 + .../jsview/js_view_abstract.cpp | 1741 + .../jsview/js_view_abstract.h | 342 + .../jsview/js_view_abstract.inl | 46 + .../jsview/js_view_register.h | 46 + .../engine/common/base_animation_bridge.cpp | 500 + .../engine/common/base_animation_bridge.h | 60 + .../engine/common/base_canvas_bridge.h | 27 + .../engine/common/group_js_bridge.h | 44 + .../js_frontend/engine/common/js_api_perf.cpp | 77 + .../js_frontend/engine/common/js_api_perf.h | 53 + .../engine/common/js_constants.cpp | 105 + .../js_frontend/engine/common/js_constants.h | 108 + .../engine/common/js_engine copy.h | 151 + .../js_frontend/engine/common/js_engine.h | 140 + .../engine/common/js_engine_loader.cpp | 97 + .../engine/common/js_engine_loader.h | 37 + .../engine/common/qjs_group_js_bridge.cpp | 573 + .../engine/common/runtime_constants.h | 103 + .../engine/quickjs/animation_bridge.cpp | 598 + .../engine/quickjs/animation_bridge.h | 109 + .../engine/quickjs/badge_bridge.cpp | 76 + .../js_frontend/engine/quickjs/badge_bridge.h | 41 + .../engine/quickjs/canvas_bridge.cpp | 1882 + .../engine/quickjs/canvas_bridge.h | 180 + .../engine/quickjs/chart_bridge.cpp | 601 + .../js_frontend/engine/quickjs/chart_bridge.h | 61 + .../engine/quickjs/clock_bridge.cpp | 105 + .../js_frontend/engine/quickjs/clock_bridge.h | 41 + .../engine/quickjs/component_api_bridge.cpp | 91 + .../engine/quickjs/component_api_bridge.h | 35 + .../engine/quickjs/image_animator_bridge.cpp | 49 + .../engine/quickjs/image_animator_bridge.h | 33 + .../js_frontend/engine/quickjs/intl/intl.h | 8768 + .../engine/quickjs/intl/intl_locales.h | 282364 +++++++++++++++ .../engine/quickjs/intl/intl_support.cpp | 326 + .../engine/quickjs/intl/intl_support.h | 30 + .../engine/quickjs/list_bridge.cpp | 52 + .../js_frontend/engine/quickjs/list_bridge.h | 34 + .../js_frontend/engine/quickjs/qjs_engine.cpp | 2689 + .../js_frontend/engine/quickjs/qjs_engine.h | 222 + .../engine/quickjs/qjs_engine_loader.cpp | 49 + .../engine/quickjs/qjs_engine_loader.h | 34 + .../engine/quickjs/qjs_group_js_bridge.cpp | 568 + .../engine/quickjs/qjs_group_js_bridge.h | 118 + .../js_frontend/engine/quickjs/qjs_utils.cpp | 556 + .../js_frontend/engine/quickjs/qjs_utils.h | 181 + .../engine/quickjs/stepper_bridge.cpp | 59 + .../engine/quickjs/stepper_bridge.h | 33 + .../bridge/js_frontend/frontend_delegate.h | 150 + .../js_frontend/frontend_delegate_impl.cpp | 1411 + .../js_frontend/frontend_delegate_impl.h | 335 + frameworks/bridge/js_frontend/js_ace_page.cpp | 191 + frameworks/bridge/js_frontend/js_ace_page.h | 279 + frameworks/bridge/js_frontend/js_command.cpp | 542 + frameworks/bridge/js_frontend/js_command.h | 335 + frameworks/bridge/js_frontend/js_frontend.cpp | 592 + frameworks/bridge/js_frontend/js_frontend.h | 203 + frameworks/bridge/test/BUILD.gn | 66 + .../cardfrontend/card_test_factory.cpp | 62 + .../unittest/cardfrontend/card_test_factory.h | 51 + .../unittest/cardfrontend/dombutton/BUILD.gn | 56 + .../dombutton/dom_button_test.cpp | 187 + .../cardfrontend/domchart/dom_chart_test.cpp | 284 + .../unittest/cardfrontend/domclock/BUILD.gn | 57 + .../cardfrontend/domclock/dom_clock_test.cpp | 322 + .../unittest/cardfrontend/domdiv/BUILD.gn | 56 + .../cardfrontend/domdiv/dom_div_test.cpp | 233 + .../unittest/cardfrontend/domimage/BUILD.gn | 56 + .../cardfrontend/domimage/dom_image_test.cpp | 187 + .../cardfrontend/domprogress/BUILD.gn | 56 + .../domprogress/dom_progress_test.cpp | 187 + .../unittest/cardfrontend/domstack/BUILD.gn | 56 + .../cardfrontend/domstack/dom_stack_test.cpp | 234 + .../unittest/cardfrontend/domtext/BUILD.gn | 56 + .../cardfrontend/domtext/dom_text_test.cpp | 234 + .../unittest/cardfrontend/frontend/BUILD.gn | 56 + .../frontend/card_frontend_test.cpp | 1055 + .../unittest/cardfrontend/mediaquery/BUILD.gn | 50 + .../mediaquery/media_query_test.cpp | 83 + .../unittest/jsfrontend/animation/BUILD.gn | 53 + .../animation/dom_animation_test.cpp | 865 + .../test/unittest/jsfrontend/codec/BUILD.gn | 60 + .../codec/group_message_codec_test.cpp | 498 + .../test/unittest/jsfrontend/dom_mock.h | 126 + .../unittest/jsfrontend/dom_node_factory.cpp | 300 + .../unittest/jsfrontend/dom_node_factory.h | 49 + .../unittest/jsfrontend/dom_test_constants.h | 764 + .../unittest/jsfrontend/dombutton/BUILD.gn | 57 + .../jsfrontend/dombutton/dom_button_test.cpp | 310 + .../test/unittest/jsfrontend/domdiv/BUILD.gn | 57 + .../jsfrontend/domdiv/dom_div_test.cpp | 196 + .../unittest/jsfrontend/domdivider/BUILD.gn | 57 + .../domdivider/dom_divider_test.cpp | 127 + .../unittest/jsfrontend/domimage/BUILD.gn | 57 + .../jsfrontend/domimage/dom_image_test.cpp | 304 + .../jsfrontend/domimageanimator/BUILD.gn | 56 + .../dom_image_animator_test.cpp | 148 + .../unittest/jsfrontend/dominput/BUILD.gn | 57 + .../jsfrontend/dominput/dom_input_test.cpp | 583 + .../unittest/jsfrontend/domlabel/BUILD.gn | 57 + .../jsfrontend/domlabel/dom_label_test.cpp | 186 + .../test/unittest/jsfrontend/domlist/BUILD.gn | 57 + .../jsfrontend/domlist/dom_list_test.cpp | 509 + .../test/unittest/jsfrontend/domnode/BUILD.gn | 57 + .../jsfrontend/domnode/dom_node_test.cpp | 1298 + .../unittest/jsfrontend/dompiece/BUILD.gn | 57 + .../jsfrontend/dompiece/dom_piece_test.cpp | 126 + .../unittest/jsfrontend/dompopup/BUILD.gn | 57 + .../jsfrontend/dompopup/dom_popup_test.cpp | 143 + .../unittest/jsfrontend/domrating/BUILD.gn | 57 + .../jsfrontend/domrating/dom_rating_test.cpp | 165 + .../unittest/jsfrontend/domrefresh/BUILD.gn | 57 + .../domrefresh/dom_refresh_test.cpp | 367 + .../unittest/jsfrontend/domsearch/BUILD.gn | 55 + .../jsfrontend/domsearch/dom_search_test.cpp | 308 + .../test/unittest/jsfrontend/domspan/BUILD.gn | 57 + .../jsfrontend/domspan/dom_span_test.cpp | 185 + .../test/unittest/jsfrontend/domsvg/BUILD.gn | 57 + .../jsfrontend/domsvg/dom_svg_test.cpp | 608 + .../unittest/jsfrontend/domsvgtext/BUILD.gn | 57 + .../domsvgtext/dom_svg_text_test.cpp | 361 + .../test/unittest/jsfrontend/domtab/BUILD.gn | 57 + .../jsfrontend/domtab/dom_tab_test.cpp | 369 + .../test/unittest/jsfrontend/domtext/BUILD.gn | 57 + .../jsfrontend/domtext/dom_text_test.cpp | 289 + .../unittest/jsfrontend/domtextarea/BUILD.gn | 57 + .../domtextarea/dom_textarea_test.cpp | 169 + .../test/unittest/jsfrontend/event/BUILD.gn | 57 + .../jsfrontend/event/common_event_test.cpp | 255 + .../unittest/jsfrontend/manifest/BUILD.gn | 53 + .../manifest/manifest_window_test.cpp | 285 + .../test/unittest/jsfrontend/marquee/BUILD.gn | 56 + .../jsfrontend/marquee/dom_marquee_test.cpp | 172 + .../unittest/jsfrontend/progress/BUILD.gn | 56 + .../jsfrontend/progress/dom_progress_test.cpp | 394 + .../test/unittest/jsfrontend/slider/BUILD.gn | 56 + .../jsfrontend/slider/dom_slider_test.cpp | 670 + .../test/unittest/jsfrontend/swiper/BUILD.gn | 56 + .../jsfrontend/swiper/dom_swiper_test.cpp | 334 + .../test/unittest/jsfrontend/switch/BUILD.gn | 54 + .../jsfrontend/switch/dom_switch_test.cpp | 308 + .../test/unittest/jsfrontend/utils/BUILD.gn | 51 + .../jsfrontend/utils/js_utils_test.cpp | 127 + .../test/unittest/jsfrontend/video/BUILD.gn | 56 + .../jsfrontend/video/dom_video_test.cpp | 225 + frameworks/core/BUILD.gn | 246 + frameworks/core/accessibility/BUILD.gn | 58 + .../accessibility/accessibility_manager.h | 63 + .../core/accessibility/accessibility_node.cpp | 425 + .../core/accessibility/accessibility_node.h | 766 + .../accessibility/accessibility_utils.cpp | 58 + .../core/accessibility/accessibility_utils.h | 148 + frameworks/core/animation/animation.h | 91 + frameworks/core/animation/animation_pub.h | 67 + frameworks/core/animation/animator.cpp | 725 + frameworks/core/animation/animator.h | 187 + .../core/animation/anticipate_curve.cpp | 29 + frameworks/core/animation/anticipate_curve.h | 38 + .../animation/bilateral_spring_adapter.cpp | 112 + .../core/animation/bilateral_spring_adapter.h | 45 + .../core/animation/bilateral_spring_node.cpp | 151 + .../core/animation/bilateral_spring_node.h | 54 + .../animation/card_transition_controller.cpp | 362 + .../animation/card_transition_controller.h | 66 + frameworks/core/animation/cubic_curve.cpp | 50 + frameworks/core/animation/cubic_curve.h | 49 + frameworks/core/animation/curve.h | 161 + frameworks/core/animation/curve_animation.h | 123 + frameworks/core/animation/curves.cpp | 39 + frameworks/core/animation/curves.h | 51 + frameworks/core/animation/evaluator.h | 109 + frameworks/core/animation/flush_event.h | 36 + frameworks/core/animation/friction_motion.cpp | 130 + frameworks/core/animation/friction_motion.h | 64 + frameworks/core/animation/interpolator.h | 69 + frameworks/core/animation/keyframe.h | 78 + .../core/animation/keyframe_animation.h | 162 + frameworks/core/animation/motion.h | 45 + .../core/animation/page_transition_listener.h | 91 + frameworks/core/animation/param_transfer.h | 81 + frameworks/core/animation/picture_animation.h | 158 + .../core/animation/property_animatable.h | 201 + frameworks/core/animation/schedule_task.h | 32 + frameworks/core/animation/scheduler.cpp | 83 + frameworks/core/animation/scheduler.h | 74 + frameworks/core/animation/scroll_motion.cpp | 86 + frameworks/core/animation/scroll_motion.h | 82 + .../shared_transition_controller.cpp | 243 + .../animation/shared_transition_controller.h | 59 + .../animation/shared_transition_effect.cpp | 434 + .../core/animation/shared_transition_effect.h | 123 + .../core/animation/simple_spring_adapter.cpp | 82 + .../core/animation/simple_spring_adapter.h | 71 + .../core/animation/simple_spring_chain.cpp | 153 + .../core/animation/simple_spring_chain.h | 280 + .../core/animation/simple_spring_node.cpp | 169 + .../core/animation/simple_spring_node.h | 84 + frameworks/core/animation/spring_adapter.h | 92 + .../core/animation/spring_animation.cpp | 89 + frameworks/core/animation/spring_animation.h | 70 + frameworks/core/animation/spring_model.cpp | 181 + frameworks/core/animation/spring_model.h | 157 + frameworks/core/animation/spring_motion.cpp | 111 + frameworks/core/animation/spring_motion.h | 82 + frameworks/core/animation/spring_node.h | 156 + .../core/animation/spring_node_listenable.h | 63 + frameworks/core/animation/status_listener.h | 315 + frameworks/core/animation/svg_animate.cpp | 534 + frameworks/core/animation/svg_animate.h | 525 + frameworks/core/animation/test/BUILD.gn | 23 + .../test/unittest/framework/BUILD.gn | 207 + .../framework/animation_framework_test.cpp | 3602 + .../test/unittest/mock/animation_mock.cpp | 246 + .../test/unittest/mock/animation_mock.h | 86 + .../test/unittest/mock/animation_test_utils.h | 180 + .../test/unittest/mock/spring_chain_item.h | 63 + .../test/unittest/spring_chain/BUILD.gn | 211 + .../spring_chain/spring_chain_test.cpp | 229 + .../test/unittest/svg_animate/BUILD.gn | 209 + .../unittest/svg_animate/svg_animate_test.cpp | 540 + frameworks/core/animation/time_event.h | 37 + .../core/common/ace_application_info.cpp | 45 + frameworks/core/common/ace_application_info.h | 125 + frameworks/core/common/ace_engine.cpp | 146 + frameworks/core/common/ace_engine.h | 73 + frameworks/core/common/ace_page.h | 51 + frameworks/core/common/ace_view.h | 109 + frameworks/core/common/clipboard/clipboard.h | 41 + .../common/clipboard/clipboard_interface.h | 34 + .../core/common/clipboard/clipboard_proxy.cpp | 37 + .../core/common/clipboard/clipboard_proxy.h | 37 + frameworks/core/common/container.h | 81 + frameworks/core/common/draw_delegate.h | 62 + frameworks/core/common/event_manager.cpp | 153 + frameworks/core/common/event_manager.h | 63 + .../core/common/focus_animation_manager.cpp | 268 + .../core/common/focus_animation_manager.h | 68 + frameworks/core/common/font_loader.cpp | 50 + frameworks/core/common/font_loader.h | 50 + frameworks/core/common/font_manager.cpp | 136 + frameworks/core/common/font_manager.h | 67 + frameworks/core/common/frontend.h | 166 + frameworks/core/common/ime/constant.h | 37 + .../core/common/ime/text_edit_controller.h | 62 + .../core/common/ime/text_editing_value.cpp | 263 + .../core/common/ime/text_editing_value.h | 74 + frameworks/core/common/ime/text_input.h | 37 + .../core/common/ime/text_input_action.cpp | 28 + .../core/common/ime/text_input_action.h | 44 + .../core/common/ime/text_input_client.h | 40 + .../common/ime/text_input_configuration.cpp | 54 + .../common/ime/text_input_configuration.h | 45 + .../core/common/ime/text_input_connection.cpp | 22 + .../core/common/ime/text_input_connection.h | 71 + .../core/common/ime/text_input_formatter.cpp | 72 + .../core/common/ime/text_input_formatter.h | 96 + .../core/common/ime/text_input_proxy.cpp | 38 + frameworks/core/common/ime/text_input_proxy.h | 52 + .../core/common/ime/text_input_type.cpp | 28 + frameworks/core/common/ime/text_input_type.h | 42 + frameworks/core/common/ime/text_range.h | 30 + frameworks/core/common/ime/text_selection.h | 83 + .../core/common/js_message_dispatcher.h | 38 + frameworks/core/common/manager_interface.h | 35 + frameworks/core/common/message_bridge.h | 32 + frameworks/core/common/message_dispatcher.h | 38 + frameworks/core/common/page_scroller.cpp | 60 + frameworks/core/common/page_scroller.h | 43 + frameworks/core/common/platform_bridge.cpp | 77 + frameworks/core/common/platform_bridge.h | 56 + .../core/common/platform_res_register.h | 63 + frameworks/core/common/platform_window.h | 54 + frameworks/core/common/text_field_manager.cpp | 60 + frameworks/core/common/text_field_manager.h | 44 + frameworks/core/common/vibrator/vibrator.h | 39 + .../core/common/vibrator/vibrator_interface.h | 34 + .../core/common/vibrator/vibrator_proxy.cpp | 37 + .../core/common/vibrator/vibrator_proxy.h | 38 + frameworks/core/common/watch_dog.cpp | 272 + frameworks/core/common/watch_dog.h | 48 + frameworks/core/common/window.cpp | 51 + frameworks/core/common/window.h | 54 + frameworks/core/components/align/BUILD.gn | 21 + .../core/components/align/align_component.cpp | 32 + .../core/components/align/align_component.h | 50 + .../core/components/align/render_align.cpp | 62 + .../core/components/align/render_align.h | 40 + frameworks/core/components/arc/BUILD.gn | 23 + .../core/components/arc/arc_component.cpp | 33 + .../core/components/arc/arc_component.h | 182 + .../core/components/arc/arc_element.cpp | 30 + frameworks/core/components/arc/arc_element.h | 34 + .../components/arc/flutter_render_arc.cpp | 71 + .../core/components/arc/flutter_render_arc.h | 36 + frameworks/core/components/arc/render_arc.cpp | 188 + frameworks/core/components/arc/render_arc.h | 83 + frameworks/core/components/badge/BUILD.gn | 22 + .../core/components/badge/badge_component.cpp | 35 + .../core/components/badge/badge_component.h | 173 + .../core/components/badge/badge_element.h | 35 + .../core/components/badge/badge_theme.h | 109 + .../components/badge/flutter_render_badge.cpp | 148 + .../components/badge/flutter_render_badge.h | 52 + .../core/components/badge/render_badge.cpp | 176 + .../core/components/badge/render_badge.h | 77 + frameworks/core/components/box/BUILD.gn | 23 + .../components/box/box_base_component.cpp | 33 + .../core/components/box/box_base_component.h | 244 + .../core/components/box/box_base_element.cpp | 34 + .../core/components/box/box_base_element.h | 29 + .../core/components/box/box_component.cpp | 33 + .../core/components/box/box_component.h | 117 + .../core/components/box/box_element.cpp | 34 + frameworks/core/components/box/box_element.h | 39 + .../components/box/flutter_render_box.cpp | 302 + .../core/components/box/flutter_render_box.h | 109 + .../box/flutter_render_box_base.cpp | 37 + .../components/box/flutter_render_box_base.h | 37 + frameworks/core/components/box/render_box.cpp | 438 + frameworks/core/components/box/render_box.h | 129 + .../core/components/box/render_box_base.cpp | 863 + .../core/components/box/render_box_base.h | 186 + frameworks/core/components/bubble/BUILD.gn | 23 + .../components/bubble/bubble_component.cpp | 34 + .../core/components/bubble/bubble_component.h | 75 + .../core/components/bubble/bubble_element.cpp | 58 + .../core/components/bubble/bubble_element.h | 50 + .../bubble/flutter_render_bubble.cpp | 330 + .../components/bubble/flutter_render_bubble.h | 55 + .../core/components/bubble/render_bubble.cpp | 389 + .../core/components/bubble/render_bubble.h | 94 + frameworks/core/components/button/BUILD.gn | 23 + .../components/button/button_component.cpp | 85 + .../core/components/button/button_component.h | 304 + .../core/components/button/button_element.cpp | 128 + .../core/components/button/button_element.h | 49 + .../core/components/button/button_theme.h | 351 + .../button/flutter_render_button.cpp | 397 + .../components/button/flutter_render_button.h | 63 + .../core/components/button/render_button.cpp | 714 + .../core/components/button/render_button.h | 181 + frameworks/core/components/calendar/BUILD.gn | 35 + .../calendar/calendar_component.cpp | 424 + .../components/calendar/calendar_component.h | 405 + .../calendar/calendar_data_adapter.cpp | 329 + .../calendar/calendar_data_adapter.h | 416 + .../components/calendar/calendar_element.cpp | 250 + .../components/calendar/calendar_element.h | 82 + .../core/components/calendar/calendar_theme.h | 235 + .../calendar/flutter_render_calendar.cpp | 600 + .../calendar/flutter_render_calendar.h | 110 + .../components/calendar/focusable_grid.cpp | 109 + .../core/components/calendar/focusable_grid.h | 51 + .../components/calendar/render_calendar.cpp | 307 + .../components/calendar/render_calendar.h | 95 + frameworks/core/components/camera/BUILD.gn | 56 + frameworks/core/components/camera/camera.cpp | 670 + frameworks/core/components/camera/camera.h | 186 + .../components/camera/camera_component.cpp | 34 + .../core/components/camera/camera_component.h | 163 + .../core/components/camera/camera_element.cpp | 418 + .../core/components/camera/camera_element.h | 78 + .../core/components/camera/camera_theme.h | 69 + frameworks/core/components/chart/BUILD.gn | 22 + .../core/components/chart/chart_component.cpp | 27 + .../core/components/chart/chart_component.h | 571 + .../core/components/chart/chart_element.h | 33 + .../components/chart/flutter_render_chart.cpp | 623 + .../components/chart/flutter_render_chart.h | 114 + .../core/components/chart/render_chart.cpp | 84 + .../core/components/chart/render_chart.h | 46 + frameworks/core/components/checkable/BUILD.gn | 28 + .../checkable/checkable_component.cpp | 92 + .../checkable/checkable_component.h | 470 + .../checkable/checkable_element.cpp | 70 + .../components/checkable/checkable_element.h | 46 + .../components/checkable/checkable_theme.h | 344 + .../checkable/flutter_render_checkbox.cpp | 259 + .../checkable/flutter_render_checkbox.h | 54 + .../checkable/flutter_render_radio.cpp | 94 + .../checkable/flutter_render_radio.h | 41 + .../checkable/flutter_render_switch.cpp | 242 + .../checkable/flutter_render_switch.h | 61 + .../checkable/radio_group_component.h | 59 + .../components/checkable/render_checkable.cpp | 229 + .../components/checkable/render_checkable.h | 137 + .../components/checkable/render_checkbox.cpp | 146 + .../components/checkable/render_checkbox.h | 52 + .../components/checkable/render_radio.cpp | 237 + .../core/components/checkable/render_radio.h | 64 + .../components/checkable/render_switch.cpp | 492 + .../core/components/checkable/render_switch.h | 104 + frameworks/core/components/clip/BUILD.gn | 22 + .../core/components/clip/clip_component.cpp | 33 + .../core/components/clip/clip_component.h | 153 + .../core/components/clip/clip_element.h | 33 + .../components/clip/flutter_render_clip.cpp | 57 + .../components/clip/flutter_render_clip.h | 44 + .../core/components/clip/render_clip.cpp | 219 + frameworks/core/components/clip/render_clip.h | 108 + frameworks/core/components/clock/BUILD.gn | 21 + .../core/components/clock/clock_component.h | 240 + .../core/components/clock/clock_element.h | 32 + .../core/components/clock/clock_theme.h | 68 + .../components/clock/flutter_render_clock.cpp | 175 + .../components/clock/flutter_render_clock.h | 79 + .../core/components/clock/render_clock.cpp | 282 + .../core/components/clock/render_clock.h | 159 + .../core/components/column_split/BUILD.gn | 23 + .../column_split/column_split_component.cpp | 33 + .../column_split/column_split_component.h | 38 + .../column_split/column_split_element.cpp | 32 + .../column_split/column_split_element.h | 33 + .../flutter_render_column_split.cpp | 63 + .../flutter_render_column_split.h | 40 + .../column_split/render_column_split.cpp | 140 + .../column_split/render_column_split.h | 54 + frameworks/core/components/common/BUILD.gn | 45 + .../core/components/common/layout/constants.h | 356 + .../common/layout/grid_column_info.cpp | 123 + .../common/layout/grid_column_info.h | 126 + .../common/layout/grid_container_info.cpp | 109 + .../common/layout/grid_container_info.h | 130 + .../common/layout/grid_layout_info.h | 51 + .../common/layout/grid_system_manager.cpp | 158 + .../common/layout/grid_system_manager.h | 97 + .../components/common/layout/layout_param.h | 155 + .../components/common/layout/position_param.h | 34 + .../painter/flutter_checkable_painter.cpp | 53 + .../painter/flutter_checkable_painter.h | 41 + .../painter/flutter_decoration_painter.cpp | 1082 + .../painter/flutter_decoration_painter.h | 180 + .../painter/flutter_scroll_bar_painter.cpp | 103 + .../painter/flutter_scroll_bar_painter.h | 44 + .../painter/flutter_scroll_fade_painter.cpp | 111 + .../painter/flutter_scroll_fade_painter.h | 44 + .../common/painter/flutter_svg_painter.cpp | 342 + .../common/painter/flutter_svg_painter.h | 78 + .../painter/flutter_universal_painter.cpp | 76 + .../painter/flutter_universal_painter.h | 42 + .../common/properties/alignment.cpp | 52 + .../components/common/properties/alignment.h | 81 + .../components/common/properties/border.cpp | 77 + .../components/common/properties/border.h | 165 + .../common/properties/border_edge.cpp | 29 + .../common/properties/border_edge.h | 84 + .../components/common/properties/color.cpp | 293 + .../core/components/common/properties/color.h | 146 + .../common/properties/color_factory.cpp | 83 + .../common/properties/color_factory.h | 41 + .../common/properties/decoration.cpp | 432 + .../components/common/properties/decoration.h | 783 + .../components/common/properties/edge.cpp | 102 + .../core/components/common/properties/edge.h | 209 + .../properties/page_transition_option.cpp | 619 + .../properties/page_transition_option.h | 123 + .../common/properties/paint_state.h | 348 + .../components/common/properties/placement.h | 35 + .../common/properties/progress_data.h | 105 + .../components/common/properties/radius.h | 87 + .../common/properties/scroll_bar.cpp | 216 + .../components/common/properties/scroll_bar.h | 323 + .../components/common/properties/shadow.h | 184 + .../common/properties/shadow_config.cpp | 27 + .../common/properties/shadow_config.h | 41 + .../common/properties/svg_paint_state.h | 391 + .../common/properties/swiper_indicator.h | 262 + .../common/properties/test/BUILD.gn | 24 + .../test/unittest/alignment/BUILD.gn | 54 + .../unittest/alignment/alignment_test.cpp | 299 + .../properties/test/unittest/color/BUILD.gn | 55 + .../test/unittest/color/color_test.cpp | 114 + .../common/properties/text_style.cpp | 54 + .../components/common/properties/text_style.h | 378 + .../common/properties/tween_option.h | 355 + .../common/rotation/rotation_controller.h | 61 + .../common/rotation/rotation_node.h | 38 + frameworks/core/components/components.gni | 103 + .../core/components/custom_dialog/BUILD.gn | 21 + .../custom_dialog/custom_dialog_component.cpp | 27 + .../custom_dialog/custom_dialog_component.h | 146 + .../custom_dialog/custom_dialog_element.cpp | 117 + .../custom_dialog/custom_dialog_element.h | 46 + .../core/components/custom_paint/BUILD.gn | 22 + .../custom_paint/custom_paint_component.cpp | 438 + .../custom_paint/custom_paint_component.h | 180 + .../custom_paint/custom_paint_element.h | 55 + .../flutter_render_custom_paint.cpp | 1263 + .../flutter_render_custom_paint.h | 116 + .../custom_paint/render_custom_paint.cpp | 69 + .../custom_paint/render_custom_paint.h | 292 + .../core/components/data_panel/BUILD.gn | 22 + .../data_panel/data_panel_component.cpp | 101 + .../data_panel/data_panel_component.h | 352 + .../data_panel/data_panel_element.h | 58 + .../components/data_panel/data_panel_theme.h | 169 + .../data_panel/flutter_render_data_panel.cpp | 537 + .../data_panel/flutter_render_data_panel.h | 72 + .../data_panel/render_data_panel.cpp | 245 + .../components/data_panel/render_data_panel.h | 200 + frameworks/core/components/dialog/BUILD.gn | 23 + .../components/dialog/dialog_component.cpp | 700 + .../core/components/dialog/dialog_component.h | 337 + .../core/components/dialog/dialog_element.cpp | 62 + .../core/components/dialog/dialog_element.h | 39 + .../core/components/dialog/dialog_theme.h | 381 + .../dialog/flutter_render_dialog.cpp | 26 + .../components/dialog/flutter_render_dialog.h | 36 + .../core/components/dialog/render_dialog.cpp | 35 + .../core/components/dialog/render_dialog.h | 34 + .../core/components/dialog_modal/BUILD.gn | 22 + .../dialog_modal/dialog_modal_component.cpp | 78 + .../dialog_modal/dialog_modal_component.h | 41 + .../dialog_modal/dialog_modal_element.cpp | 246 + .../dialog_modal/dialog_modal_element.h | 54 + .../dialog_modal/render_dialog_modal.cpp | 260 + .../dialog_modal/render_dialog_modal.h | 71 + .../core/components/dialog_tween/BUILD.gn | 22 + .../dialog_tween/dialog_tween_component.cpp | 33 + .../dialog_tween/dialog_tween_component.h | 202 + .../dialog_tween/dialog_tween_element.cpp | 85 + .../dialog_tween/dialog_tween_element.h | 40 + .../dialog_tween/render_dialog_tween.cpp | 376 + .../dialog_tween/render_dialog_tween.h | 81 + frameworks/core/components/display/BUILD.gn | 23 + .../components/display/display_component.cpp | 27 + .../components/display/display_component.h | 94 + .../components/display/display_element.cpp | 33 + .../core/components/display/display_element.h | 35 + .../display/flutter_render_display.cpp | 56 + .../display/flutter_render_display.h | 41 + .../components/display/render_display.cpp | 82 + .../core/components/display/render_display.h | 78 + frameworks/core/components/divider/BUILD.gn | 22 + .../components/divider/divider_component.cpp | 27 + .../components/divider/divider_component.h | 85 + .../core/components/divider/divider_element.h | 29 + .../core/components/divider/divider_theme.h | 65 + .../divider/flutter_render_divider.cpp | 74 + .../divider/flutter_render_divider.h | 32 + .../components/divider/render_divider.cpp | 65 + .../core/components/divider/render_divider.h | 43 + frameworks/core/components/drag_bar/BUILD.gn | 23 + .../drag_bar/drag_bar_component.cpp | 33 + .../components/drag_bar/drag_bar_component.h | 59 + .../components/drag_bar/drag_bar_element.cpp | 49 + .../components/drag_bar/drag_bar_element.h | 37 + .../drag_bar/flutter_render_drag_bar.cpp | 97 + .../drag_bar/flutter_render_drag_bar.h | 49 + .../components/drag_bar/render_drag_bar.cpp | 439 + .../components/drag_bar/render_drag_bar.h | 122 + .../core/components/drop_filter/BUILD.gn | 22 + .../drop_filter/drop_filter_component.cpp | 36 + .../drop_filter/drop_filter_component.h | 80 + .../drop_filter/drop_filter_element.h | 29 + .../flutter_render_drop_filter.cpp | 50 + .../drop_filter/flutter_render_drop_filter.h | 45 + .../drop_filter/render_drop_filter.cpp | 81 + .../drop_filter/render_drop_filter.h | 45 + frameworks/core/components/flex/BUILD.gn | 22 + .../core/components/flex/flex_component.h | 180 + .../core/components/flex/flex_element.cpp | 77 + .../core/components/flex/flex_element.h | 57 + .../components/flex/flex_item_component.h | 173 + .../core/components/flex/flex_item_element.h | 39 + .../core/components/flex/render_flex.cpp | 966 + frameworks/core/components/flex/render_flex.h | 195 + .../core/components/flex/render_flex_item.cpp | 78 + .../core/components/flex/render_flex_item.h | 119 + .../core/components/focus_animation/BUILD.gn | 22 + .../flutter_render_focus_animation.cpp | 248 + .../flutter_render_focus_animation.h | 46 + .../focus_animation_component.cpp | 27 + .../focus_animation_component.h | 53 + .../focus_animation/focus_animation_element.h | 42 + .../focus_animation/focus_animation_theme.h | 69 + .../render_focus_animation.cpp | 172 + .../focus_animation/render_focus_animation.h | 80 + .../components/focus_collaboration/BUILD.gn | 21 + .../focus_collaboration_component.h | 48 + .../focus_collaboration_element.cpp | 37 + .../focus_collaboration_element.h | 38 + .../render_focus_collaboration.cpp | 41 + .../render_focus_collaboration.h | 35 + frameworks/core/components/focusable/BUILD.gn | 18 + .../focusable/focusable_component.h | 187 + .../focusable/focusable_element.cpp | 157 + .../components/focusable/focusable_element.h | 62 + frameworks/core/components/font/BUILD.gn | 23 + .../components/font/constants_converter.cpp | 243 + .../components/font/constants_converter.h | 68 + .../font/flutter_font_collection.cpp | 155 + .../components/font/flutter_font_collection.h | 59 + .../components/font/flutter_font_loader.cpp | 134 + .../components/font/flutter_font_loader.h | 41 + .../components/font/flutter_font_manager.cpp | 35 + .../components/font/flutter_font_manager.h | 35 + .../components/foreach/foreach_component.h | 38 + .../core/components/gesture_listener/BUILD.gn | 18 + .../gesture_listener_component.h | 200 + .../gesture_listener_element.h | 29 + .../render_gesture_listener.cpp | 151 + .../render_gesture_listener.h | 59 + frameworks/core/components/grid/BUILD.gn | 26 + .../components/grid/flutter_render_grid.cpp | 44 + .../components/grid/flutter_render_grid.h | 40 + .../core/components/grid/grid_component.cpp | 140 + .../core/components/grid/grid_component.h | 161 + .../core/components/grid/grid_controller.cpp | 92 + .../core/components/grid/grid_controller.h | 65 + .../core/components/grid/grid_element.cpp | 208 + .../core/components/grid/grid_element.h | 46 + .../components/grid/grid_item_component.cpp | 42 + .../components/grid/grid_item_component.h | 52 + .../core/components/grid/grid_item_element.h | 36 + .../core/components/grid/render_grid.cpp | 1042 + frameworks/core/components/grid/render_grid.h | 223 + .../core/components/grid/render_grid_item.cpp | 64 + .../core/components/grid/render_grid_item.h | 44 + .../core/components/grid_layout/BUILD.gn | 26 + .../flutter_render_grid_layout.cpp | 45 + .../grid_layout/flutter_render_grid_layout.h | 40 + .../grid_layout/grid_layout_component.cpp | 121 + .../grid_layout/grid_layout_component.h | 122 + .../grid_layout/grid_layout_element.cpp | 95 + .../grid_layout/grid_layout_element.h | 37 + .../grid_layout_item_component.cpp | 67 + .../grid_layout/grid_layout_item_component.h | 82 + .../grid_layout/grid_layout_item_element.cpp | 41 + .../grid_layout/grid_layout_item_element.h | 41 + .../grid_layout/render_grid_layout.cpp | 731 + .../grid_layout/render_grid_layout.h | 115 + .../grid_layout/render_grid_layout_item.cpp | 104 + .../grid_layout/render_grid_layout_item.h | 75 + frameworks/core/components/image/BUILD.gn | 24 + .../components/image/flutter_render_image.cpp | 662 + .../components/image/flutter_render_image.h | 141 + .../image/image_animator_component.cpp | 127 + .../image/image_animator_component.h | 76 + .../image/image_animator_element.cpp | 294 + .../components/image/image_animator_element.h | 71 + .../core/components/image/image_component.cpp | 35 + .../core/components/image/image_component.h | 190 + .../core/components/image/image_element.h | 39 + .../core/components/image/image_event.h | 55 + .../core/components/image/render_image.cpp | 636 + .../core/components/image/render_image.h | 245 + frameworks/core/components/indexer/BUILD.gn | 28 + .../components/indexer/indexer_component.cpp | 592 + .../components/indexer/indexer_component.h | 300 + .../components/indexer/indexer_element.cpp | 88 + .../core/components/indexer/indexer_element.h | 40 + .../indexer/indexer_item_component.cpp | 283 + .../indexer/indexer_item_component.h | 192 + .../indexer/indexer_list_component.cpp | 87 + .../indexer/indexer_list_component.h | 110 + .../indexer/indexer_list_element.cpp | 25 + .../components/indexer/indexer_list_element.h | 32 + .../components/indexer/render_indexer.cpp | 584 + .../core/components/indexer/render_indexer.h | 158 + .../indexer/render_indexer_circle.cpp | 1058 + .../indexer/render_indexer_circle.h | 160 + .../indexer/render_indexer_item.cpp | 289 + .../components/indexer/render_indexer_item.h | 157 + .../indexer/render_indexer_list.cpp | 50 + .../components/indexer/render_indexer_list.h | 35 + frameworks/core/components/list/BUILD.gn | 41 + .../components/list/flutter_render_list.cpp | 99 + .../components/list/flutter_render_list.h | 47 + .../list/flutter_render_list_item.cpp | 442 + .../list/flutter_render_list_item.h | 73 + .../list/flutter_render_list_item_group.cpp | 25 + .../list/flutter_render_list_item_group.h | 33 + .../components/list/grid_layout_manager.cpp | 502 + .../components/list/grid_layout_manager.h | 86 + .../components/list/interactive_effect.cpp | 217 + .../core/components/list/interactive_effect.h | 138 + .../core/components/list/layout_manager.cpp | 84 + .../core/components/list/layout_manager.h | 317 + .../core/components/list/list_component.cpp | 197 + .../core/components/list/list_component.h | 492 + .../core/components/list/list_element.cpp | 982 + .../core/components/list/list_element.h | 122 + .../components/list/list_item_component.cpp | 57 + .../components/list/list_item_component.h | 431 + .../components/list/list_item_element.cpp | 179 + .../core/components/list/list_item_element.h | 112 + .../list/list_item_group_component.cpp | 36 + .../list/list_item_group_component.h | 124 + .../list/list_item_group_element.cpp | 353 + .../components/list/list_item_group_element.h | 53 + .../core/components/list/list_item_theme.h | 153 + .../components/list/list_layout_manager.cpp | 791 + .../components/list/list_layout_manager.h | 101 + frameworks/core/components/list/list_theme.h | 85 + .../list/list_watch_layout_manager.cpp | 218 + .../list/list_watch_layout_manager.h | 53 + .../core/components/list/render_list.cpp | 763 + frameworks/core/components/list/render_list.h | 558 + .../core/components/list/render_list_item.cpp | 619 + .../core/components/list/render_list_item.h | 401 + .../list/render_list_item_group.cpp | 686 + .../components/list/render_list_item_group.h | 141 + .../components/list/tv_interactive_effect.cpp | 50 + .../components/list/tv_interactive_effect.h | 63 + .../list/watch_interactive_effect.cpp | 66 + .../list/watch_interactive_effect.h | 52 + frameworks/core/components/marquee/BUILD.gn | 21 + .../marquee/flutter_render_marquee.cpp | 62 + .../marquee/flutter_render_marquee.h | 48 + .../components/marquee/marquee_component.h | 177 + .../core/components/marquee/marquee_theme.h | 78 + .../components/marquee/render_marquee.cpp | 271 + .../core/components/marquee/render_marquee.h | 66 + frameworks/core/components/menu/BUILD.gn | 21 + .../core/components/menu/menu_component.cpp | 133 + .../core/components/menu/menu_component.h | 124 + .../core/components/menu/menu_element.cpp | 144 + .../core/components/menu/menu_element.h | 45 + .../core/components/mouse_listener/BUILD.gn | 18 + .../mouse_listener/mouse_listener_component.h | 61 + .../mouse_listener/mouse_listener_element.h | 29 + .../mouse_listener/render_mouse_listener.cpp | 44 + .../mouse_listener/render_mouse_listener.h | 52 + .../core/components/multimodal/BUILD.gn | 21 + .../multimodal/flutter_render_multimodal.cpp | 113 + .../multimodal/flutter_render_multimodal.h | 39 + .../multimodal/multimodal_component.h | 74 + .../multimodal/multimodal_element.h | 29 + .../multimodal/render_multimodal.cpp | 175 + .../components/multimodal/render_multimodal.h | 61 + .../core/components/navigation_bar/BUILD.gn | 28 + .../navigation_bar_component.cpp | 570 + .../navigation_bar/navigation_bar_component.h | 425 + .../navigation_bar/navigation_bar_element.cpp | 129 + .../navigation_bar/navigation_bar_element.h | 70 + .../navigation_bar/navigation_bar_theme.h | 225 + .../navigation_container_component.h | 50 + .../navigation_container_element.h | 35 + .../render_collapsing_navigation_bar.cpp | 318 + .../render_collapsing_navigation_bar.h | 114 + .../render_navigation_container.cpp | 69 + .../render_navigation_container.h | 50 + frameworks/core/components/navigator/BUILD.gn | 22 + .../navigator/navigator_component.cpp | 33 + .../navigator/navigator_component.h | 81 + .../navigator/navigator_element.cpp | 33 + .../components/navigator/navigator_element.h | 36 + .../components/navigator/render_navigator.cpp | 89 + .../components/navigator/render_navigator.h | 54 + frameworks/core/components/option/BUILD.gn | 23 + .../option/flutter_render_option.cpp | 111 + .../components/option/flutter_render_option.h | 38 + .../components/option/option_component.cpp | 142 + .../core/components/option/option_component.h | 379 + .../core/components/option/option_element.cpp | 99 + .../core/components/option/option_element.h | 40 + .../core/components/option/render_option.cpp | 742 + .../core/components/option/render_option.h | 138 + frameworks/core/components/overlay/BUILD.gn | 21 + .../components/overlay/overlay_component.cpp | 27 + .../components/overlay/overlay_component.h | 37 + .../components/overlay/overlay_element.cpp | 27 + .../core/components/overlay/overlay_element.h | 32 + frameworks/core/components/padding/BUILD.gn | 21 + .../components/padding/padding_component.cpp | 33 + .../components/padding/padding_component.h | 74 + .../core/components/padding/padding_element.h | 42 + .../components/padding/render_padding.cpp | 66 + .../core/components/padding/render_padding.h | 41 + frameworks/core/components/page/BUILD.gn | 21 + .../core/components/page/page_component.cpp | 47 + .../core/components/page/page_component.h | 45 + .../core/components/page/page_element.cpp | 90 + .../core/components/page/page_element.h | 88 + .../core/components/page_transition/BUILD.gn | 18 + .../page_transition_component.h | 130 + .../page_transition_element.cpp | 431 + .../page_transition/page_transition_element.h | 71 + frameworks/core/components/panel/BUILD.gn | 23 + .../core/components/panel/panel_component.cpp | 27 + .../core/components/panel/panel_component.h | 226 + .../core/components/panel/panel_element.cpp | 79 + .../core/components/panel/panel_element.h | 44 + .../components/panel/render_sliding_panel.cpp | 513 + .../components/panel/render_sliding_panel.h | 139 + .../panel/sliding_panel_component.cpp | 126 + .../panel/sliding_panel_component.h | 121 + .../components/panel/sliding_panel_element.h | 30 + frameworks/core/components/picker/BUILD.gn | 40 + .../picker/flutter_render_picker_base.cpp | 152 + .../picker/flutter_render_picker_base.h | 44 + .../picker/flutter_render_picker_column.cpp | 33 + .../picker/flutter_render_picker_column.h | 39 + .../components/picker/picker_animation.cpp | 48 + .../core/components/picker/picker_animation.h | 79 + .../picker/picker_animation_controller.cpp | 485 + .../picker/picker_animation_controller.h | 170 + .../picker/picker_base_component.cpp | 664 + .../components/picker/picker_base_component.h | 523 + .../components/picker/picker_base_element.cpp | 61 + .../components/picker/picker_base_element.h | 35 + .../picker/picker_column_component.cpp | 95 + .../picker/picker_column_component.h | 254 + .../picker/picker_column_element.cpp | 110 + .../components/picker/picker_column_element.h | 38 + .../picker/picker_date_component.cpp | 874 + .../components/picker/picker_date_component.h | 244 + .../picker/picker_datetime_component.cpp | 234 + .../picker/picker_datetime_component.h | 90 + .../picker/picker_multitext_component.cpp | 225 + .../picker/picker_multitext_component.h | 102 + .../picker/picker_option_component.cpp | 77 + .../picker/picker_option_component.h | 136 + .../picker/picker_option_element.cpp | 38 + .../components/picker/picker_option_element.h | 32 + .../picker/picker_text_component.cpp | 106 + .../components/picker/picker_text_component.h | 101 + .../core/components/picker/picker_theme.h | 489 + .../picker/picker_time_component.cpp | 330 + .../components/picker/picker_time_component.h | 109 + .../picker/picker_value_component.h | 78 + .../picker/picker_value_element.cpp | 81 + .../components/picker/picker_value_element.h | 72 + .../components/picker/render_picker_base.cpp | 702 + .../components/picker/render_picker_base.h | 139 + .../picker/render_picker_column.cpp | 637 + .../components/picker/render_picker_column.h | 171 + .../picker/render_picker_option.cpp | 517 + .../components/picker/render_picker_option.h | 122 + .../components/picker/render_picker_value.cpp | 139 + .../components/picker/render_picker_value.h | 84 + .../picker/toss_animation_controller.cpp | 126 + .../picker/toss_animation_controller.h | 62 + frameworks/core/components/piece/BUILD.gn | 23 + .../components/piece/flutter_render_piece.cpp | 84 + .../components/piece/flutter_render_piece.h | 36 + .../core/components/piece/piece_component.cpp | 73 + .../core/components/piece/piece_component.h | 140 + .../core/components/piece/piece_element.cpp | 48 + .../core/components/piece/piece_element.h | 34 + .../core/components/piece/piece_theme.h | 131 + .../core/components/piece/render_piece.cpp | 116 + .../core/components/piece/render_piece.h | 53 + frameworks/core/components/popup/BUILD.gn | 21 + .../core/components/popup/popup_component.cpp | 27 + .../core/components/popup/popup_component.h | 242 + .../core/components/popup/popup_element.cpp | 96 + .../core/components/popup/popup_element.h | 43 + .../core/components/popup/popup_theme.h | 111 + .../core/components/positioned/BUILD.gn | 18 + .../positioned/positioned_component.h | 177 + .../positioned/positioned_element.h | 64 + .../positioned/render_positioned.cpp | 66 + .../components/positioned/render_positioned.h | 101 + frameworks/core/components/progress/BUILD.gn | 25 + .../flutter_render_loading_progress.cpp | 162 + .../flutter_render_loading_progress.h | 61 + .../progress/flutter_render_progress.cpp | 85 + .../progress/flutter_render_progress.h | 43 + .../progress/loading_progress_component.cpp | 33 + .../progress/loading_progress_component.h | 116 + .../progress/loading_progress_element.h | 29 + .../progress/progress_component.cpp | 80 + .../components/progress/progress_component.h | 122 + .../components/progress/progress_element.h | 46 + .../core/components/progress/progress_theme.h | 239 + .../progress/render_loading_progress.cpp | 435 + .../progress/render_loading_progress.h | 122 + .../components/progress/render_progress.cpp | 92 + .../components/progress/render_progress.h | 69 + frameworks/core/components/proxy/BUILD.gn | 22 + .../proxy/flutter_render_item_proxy.cpp | 45 + .../proxy/flutter_render_item_proxy.h | 50 + .../components/proxy/render_item_proxy.cpp | 28 + .../core/components/proxy/render_item_proxy.h | 35 + .../core/components/proxy/render_proxy.cpp | 42 + .../core/components/proxy/render_proxy.h | 39 + frameworks/core/components/qrcode/BUILD.gn | 54 + .../core/components/qrcode/applypatch.sh | 31 + .../qrcode/flutter_render_qrcode.cpp | 96 + .../components/qrcode/flutter_render_qrcode.h | 53 + .../components/qrcode/qrcode_component.cpp | 35 + .../core/components/qrcode/qrcode_component.h | 128 + .../core/components/qrcode/qrcode_element.h | 31 + .../components/qrcode/qrcode_patch2.patch | 1008 + .../core/components/qrcode/qrcode_theme.h | 91 + .../core/components/qrcode/render_qrcode.cpp | 67 + .../core/components/qrcode/render_qrcode.h | 56 + frameworks/core/components/rating/BUILD.gn | 24 + .../rating/flutter_render_rating.cpp | 160 + .../components/rating/flutter_render_rating.h | 41 + .../components/rating/rating_component.cpp | 52 + .../core/components/rating/rating_component.h | 307 + .../core/components/rating/rating_element.h | 70 + .../core/components/rating/rating_theme.h | 214 + .../core/components/rating/render_rating.cpp | 616 + .../core/components/rating/render_rating.h | 204 + frameworks/core/components/refresh/BUILD.gn | 23 + .../refresh/flutter_render_refresh.cpp | 58 + .../refresh/flutter_render_refresh.h | 37 + .../components/refresh/refresh_component.cpp | 33 + .../components/refresh/refresh_component.h | 267 + .../components/refresh/refresh_controller.h | 54 + .../components/refresh/refresh_element.cpp | 33 + .../core/components/refresh/refresh_element.h | 35 + .../core/components/refresh/refresh_theme.h | 133 + .../components/refresh/render_refresh.cpp | 553 + .../core/components/refresh/render_refresh.h | 171 + frameworks/core/components/root/BUILD.gn | 23 + .../components/root/flutter_render_root.cpp | 74 + .../components/root/flutter_render_root.h | 55 + .../core/components/root/render_root.cpp | 122 + frameworks/core/components/root/render_root.h | 93 + .../core/components/root/root_component.cpp | 53 + .../core/components/root/root_component.h | 51 + .../core/components/root/root_element.cpp | 86 + .../core/components/root/root_element.h | 42 + frameworks/core/components/scroll/BUILD.gn | 32 + .../flutter_render_multi_child_scroll.cpp | 74 + .../flutter_render_multi_child_scroll.h | 32 + .../flutter_render_single_child_scroll.cpp | 80 + .../flutter_render_single_child_scroll.h | 43 + .../scroll/render_multi_child_scroll.cpp | 888 + .../scroll/render_multi_child_scroll.h | 122 + .../core/components/scroll/render_scroll.cpp | 894 + .../core/components/scroll/render_scroll.h | 260 + .../scroll/render_single_child_scroll.cpp | 297 + .../scroll/render_single_child_scroll.h | 49 + .../scroll/scroll_bar_controller.cpp | 265 + .../components/scroll/scroll_bar_controller.h | 167 + .../core/components/scroll/scroll_bar_theme.h | 129 + .../components/scroll/scroll_component.cpp | 75 + .../core/components/scroll/scroll_component.h | 143 + .../components/scroll/scroll_edge_effect.h | 130 + .../core/components/scroll/scroll_element.cpp | 35 + .../core/components/scroll/scroll_element.h | 35 + .../scroll/scroll_fade_controller.cpp | 197 + .../scroll/scroll_fade_controller.h | 77 + .../components/scroll/scroll_fade_effect.cpp | 149 + .../components/scroll/scroll_fade_effect.h | 56 + .../components/scroll/scroll_fade_painter.h | 85 + .../scroll/scroll_position_controller.cpp | 159 + .../scroll/scroll_position_controller.h | 279 + .../scroll/scroll_spring_effect.cpp | 55 + .../components/scroll/scroll_spring_effect.h | 38 + .../core/components/scroll/scrollable.cpp | 445 + .../core/components/scroll/scrollable.h | 264 + frameworks/core/components/search/BUILD.gn | 23 + .../search/flutter_render_search.cpp | 180 + .../components/search/flutter_render_search.h | 41 + .../core/components/search/render_search.cpp | 509 + .../core/components/search/render_search.h | 104 + .../components/search/search_component.cpp | 33 + .../core/components/search/search_component.h | 165 + .../core/components/search/search_element.cpp | 61 + .../core/components/search/search_element.h | 39 + .../core/components/search/search_theme.h | 181 + frameworks/core/components/select/BUILD.gn | 22 + .../core/components/select/render_select.cpp | 63 + .../core/components/select/render_select.h | 70 + .../components/select/select_component.cpp | 190 + .../core/components/select/select_component.h | 354 + .../core/components/select/select_element.cpp | 449 + .../core/components/select/select_element.h | 64 + .../core/components/select/select_theme.h | 545 + .../core/components/select_popup/BUILD.gn | 23 + .../flutter_render_select_popup.cpp | 156 + .../flutter_render_select_popup.h | 43 + .../select_popup/render_select_popup.cpp | 479 + .../select_popup/render_select_popup.h | 121 + .../select_popup/select_popup_component.cpp | 389 + .../select_popup/select_popup_component.h | 296 + .../select_popup/select_popup_element.cpp | 89 + .../select_popup/select_popup_element.h | 39 + .../core/components/semi_modal/BUILD.gn | 22 + .../semi_modal/render_semi_modal.cpp | 782 + .../components/semi_modal/render_semi_modal.h | 118 + .../semi_modal/semi_modal_component.cpp | 87 + .../semi_modal/semi_modal_component.h | 61 + .../semi_modal/semi_modal_element.cpp | 176 + .../semi_modal/semi_modal_element.h | 50 + frameworks/core/components/shadow/BUILD.gn | 21 + .../shadow/flutter_render_shadow.cpp | 85 + .../components/shadow/flutter_render_shadow.h | 37 + .../core/components/shadow/render_shadow.cpp | 60 + .../core/components/shadow/render_shadow.h | 52 + .../core/components/shadow/shadow_component.h | 42 + .../core/components/shadow/shadow_element.h | 29 + .../components/shared_transition/BUILD.gn | 21 + .../shared_transition_component.cpp | 118 + .../shared_transition_component.h | 65 + .../shared_transition_element.cpp | 332 + .../shared_transition_element.h | 109 + frameworks/core/components/slider/BUILD.gn | 25 + .../components/slider/block_component.cpp | 27 + .../core/components/slider/block_component.h | 110 + .../slider/flutter_render_circle_block.cpp | 119 + .../slider/flutter_render_circle_block.h | 41 + .../slider/flutter_render_slider.cpp | 330 + .../components/slider/flutter_render_slider.h | 72 + .../core/components/slider/render_block.cpp | 49 + .../core/components/slider/render_block.h | 103 + .../core/components/slider/render_slider.cpp | 642 + .../core/components/slider/render_slider.h | 248 + .../components/slider/slider_component.cpp | 73 + .../core/components/slider/slider_component.h | 201 + .../core/components/slider/slider_element.h | 63 + .../core/components/slider/slider_theme.h | 192 + frameworks/core/components/stack/BUILD.gn | 22 + .../components/stack/flutter_render_stack.cpp | 45 + .../components/stack/flutter_render_stack.h | 40 + .../core/components/stack/render_stack.cpp | 204 + .../core/components/stack/render_stack.h | 76 + .../core/components/stack/stack_component.h | 126 + .../core/components/stack/stack_element.cpp | 425 + .../core/components/stack/stack_element.h | 88 + frameworks/core/components/stage/BUILD.gn | 21 + .../core/components/stage/render_stage.cpp | 264 + .../core/components/stage/render_stage.h | 59 + .../core/components/stage/stage_component.h | 52 + .../core/components/stage/stage_element.cpp | 703 + .../core/components/stage/stage_element.h | 92 + frameworks/core/components/stepper/BUILD.gn | 28 + .../stepper/flutter_render_stepper.cpp | 49 + .../stepper/flutter_render_stepper.h | 46 + .../stepper/flutter_render_stepper_item.cpp | 42 + .../stepper/flutter_render_stepper_item.h | 38 + .../components/stepper/render_stepper.cpp | 903 + .../core/components/stepper/render_stepper.h | 218 + .../stepper/render_stepper_item.cpp | 66 + .../components/stepper/render_stepper_item.h | 45 + .../stepper/stepper_animation_controller.cpp | 254 + .../stepper/stepper_animation_controller.h | 112 + .../components/stepper/stepper_component.cpp | 116 + .../components/stepper/stepper_component.h | 354 + .../components/stepper/stepper_element.cpp | 252 + .../core/components/stepper/stepper_element.h | 53 + .../stepper/stepper_item_component.cpp | 51 + .../stepper/stepper_item_component.h | 114 + .../stepper/stepper_item_element.cpp | 45 + .../components/stepper/stepper_item_element.h | 41 + .../core/components/stepper/stepper_theme.h | 228 + frameworks/core/components/svg/BUILD.gn | 52 + .../components/svg/flutter_render_svg.cpp | 53 + .../core/components/svg/flutter_render_svg.h | 44 + .../svg/flutter_render_svg_circle.cpp | 89 + .../svg/flutter_render_svg_circle.h | 53 + .../svg/flutter_render_svg_ellipse.cpp | 89 + .../svg/flutter_render_svg_ellipse.h | 53 + .../svg/flutter_render_svg_line.cpp | 90 + .../components/svg/flutter_render_svg_line.h | 53 + .../svg/flutter_render_svg_path.cpp | 113 + .../components/svg/flutter_render_svg_path.h | 53 + .../svg/flutter_render_svg_polygon.cpp | 162 + .../svg/flutter_render_svg_polygon.h | 56 + .../svg/flutter_render_svg_polyline.cpp | 160 + .../svg/flutter_render_svg_polyline.h | 56 + .../svg/flutter_render_svg_rect.cpp | 92 + .../components/svg/flutter_render_svg_rect.h | 55 + .../svg/flutter_render_svg_text.cpp | 109 + .../components/svg/flutter_render_svg_text.h | 57 + .../svg/flutter_render_svg_text_path.cpp | 115 + .../svg/flutter_render_svg_text_path.h | 52 + .../svg/flutter_render_svg_tspan.cpp | 140 + .../components/svg/flutter_render_svg_tspan.h | 49 + frameworks/core/components/svg/render_svg.cpp | 198 + frameworks/core/components/svg/render_svg.h | 82 + .../core/components/svg/render_svg_base.cpp | 399 + .../core/components/svg/render_svg_base.h | 117 + .../core/components/svg/render_svg_circle.cpp | 115 + .../core/components/svg/render_svg_circle.h | 61 + .../components/svg/render_svg_ellipse.cpp | 121 + .../core/components/svg/render_svg_ellipse.h | 67 + .../core/components/svg/render_svg_line.cpp | 122 + .../core/components/svg/render_svg_line.h | 67 + .../core/components/svg/render_svg_path.cpp | 84 + .../core/components/svg/render_svg_path.h | 57 + .../components/svg/render_svg_polygon.cpp | 85 + .../core/components/svg/render_svg_polygon.h | 60 + .../components/svg/render_svg_polyline.cpp | 85 + .../core/components/svg/render_svg_polyline.h | 55 + .../core/components/svg/render_svg_rect.cpp | 123 + .../core/components/svg/render_svg_rect.h | 79 + .../core/components/svg/render_svg_text.cpp | 140 + .../core/components/svg/render_svg_text.h | 101 + .../components/svg/render_svg_text_path.cpp | 115 + .../components/svg/render_svg_text_path.h | 85 + .../components/svg/svg_animate_component.h | 50 + .../components/svg/svg_circle_component.cpp | 33 + .../components/svg/svg_circle_component.h | 74 + .../core/components/svg/svg_circle_element.h | 30 + .../core/components/svg/svg_component.cpp | 33 + .../core/components/svg/svg_component.h | 96 + frameworks/core/components/svg/svg_element.h | 30 + .../components/svg/svg_ellipse_component.cpp | 33 + .../components/svg/svg_ellipse_component.h | 85 + .../core/components/svg/svg_ellipse_element.h | 30 + .../components/svg/svg_line_component.cpp | 33 + .../core/components/svg/svg_line_component.h | 85 + .../core/components/svg/svg_line_element.h | 30 + .../components/svg/svg_path_component.cpp | 33 + .../core/components/svg/svg_path_component.h | 52 + .../core/components/svg/svg_path_element.h | 30 + .../components/svg/svg_polygon_component.cpp | 33 + .../components/svg/svg_polygon_component.h | 52 + .../core/components/svg/svg_polygon_element.h | 30 + .../components/svg/svg_polyline_component.cpp | 33 + .../components/svg/svg_polyline_component.h | 52 + .../components/svg/svg_polyline_element.h | 30 + .../components/svg/svg_rect_component.cpp | 33 + .../core/components/svg/svg_rect_component.h | 107 + .../core/components/svg/svg_rect_element.h | 30 + frameworks/core/components/svg/svg_sharp.h | 76 + .../components/svg/svg_text_component.cpp | 33 + .../core/components/svg/svg_text_component.h | 151 + .../core/components/svg/svg_text_element.h | 30 + .../svg/svg_text_path_component.cpp | 33 + .../components/svg/svg_text_path_component.h | 96 + .../components/svg/svg_text_path_element.h | 30 + .../components/svg/svg_tspan_component.cpp | 33 + .../core/components/svg/svg_tspan_component.h | 38 + .../core/components/svg/svg_tspan_element.h | 30 + frameworks/core/components/swiper/BUILD.gn | 22 + .../swiper/flutter_render_swiper.cpp | 463 + .../components/swiper/flutter_render_swiper.h | 69 + .../core/components/swiper/render_swiper.cpp | 2357 + .../core/components/swiper/render_swiper.h | 421 + .../core/components/swiper/swiper_component.h | 369 + .../core/components/swiper/swiper_element.cpp | 271 + .../core/components/swiper/swiper_element.h | 54 + .../swiper/swiper_indicator_theme.h | 200 + frameworks/core/components/tab_bar/BUILD.gn | 33 + .../tab_bar/flutter_render_tab_bar.cpp | 45 + .../tab_bar/flutter_render_tab_bar.h | 37 + .../tab_bar/flutter_render_tab_bar_item.cpp | 71 + .../tab_bar/flutter_render_tab_bar_item.h | 37 + .../tab_bar/flutter_render_tab_content.cpp | 44 + .../tab_bar/flutter_render_tab_content.h | 37 + .../components/tab_bar/render_tab_bar.cpp | 631 + .../core/components/tab_bar/render_tab_bar.h | 126 + .../tab_bar/render_tab_bar_item.cpp | 176 + .../components/tab_bar/render_tab_bar_item.h | 77 + .../components/tab_bar/render_tab_content.cpp | 441 + .../components/tab_bar/render_tab_content.h | 153 + .../components/tab_bar/tab_bar_component.cpp | 144 + .../components/tab_bar/tab_bar_component.h | 206 + .../components/tab_bar/tab_bar_element.cpp | 168 + .../core/components/tab_bar/tab_bar_element.h | 55 + .../tab_bar/tab_bar_indicator_component.cpp | 59 + .../tab_bar/tab_bar_indicator_component.h | 78 + .../tab_bar/tab_bar_item_component.cpp | 96 + .../tab_bar/tab_bar_item_component.h | 43 + .../components/tab_bar/tab_bar_item_element.h | 62 + .../tab_bar/tab_bar_size_animation.cpp | 111 + .../tab_bar/tab_bar_size_animation.h | 66 + .../tab_bar/tab_content_component.cpp | 40 + .../tab_bar/tab_content_component.h | 112 + .../tab_bar/tab_content_element.cpp | 224 + .../components/tab_bar/tab_content_element.h | 66 + .../components/tab_bar/tab_controller.cpp | 111 + .../core/components/tab_bar/tab_controller.h | 56 + .../core/components/tab_bar/tab_theme.h | 173 + frameworks/core/components/test/BUILD.gn | 107 + .../components/test/json/align_creator.cpp | 61 + .../core/components/test/json/align_creator.h | 36 + .../test/json/background_image_creator.cpp | 86 + .../test/json/background_image_creator.h | 36 + .../test/json/base/component_factory.h | 39 + .../components/test/json/border_creator.cpp | 91 + .../components/test/json/border_creator.h | 35 + .../test/json/border_edge_creator.cpp | 68 + .../test/json/border_edge_creator.h | 36 + .../core/components/test/json/box_creator.cpp | 85 + .../core/components/test/json/box_creator.h | 33 + .../components/test/json/button_creator.cpp | 86 + .../components/test/json/button_creator.h | 32 + .../test/json/checkable_creator.cpp | 108 + .../components/test/json/checkable_creator.h | 30 + .../components/test/json/clip_creator.cpp | 47 + .../core/components/test/json/clip_creator.h | 37 + .../components/test/json/color_creator.cpp | 59 + .../core/components/test/json/color_creator.h | 35 + .../test/json/component_factory.cpp | 233 + .../components/test/json/component_factory.h | 37 + .../components/test/json/compose_creator.cpp | 48 + .../components/test/json/compose_creator.h | 33 + .../test/json/decoration_creator.cpp | 77 + .../components/test/json/decoration_creator.h | 32 + .../components/test/json/dialog_creator.cpp | 83 + .../components/test/json/dialog_creator.h | 32 + .../components/test/json/display_creator.cpp | 63 + .../components/test/json/display_creator.h | 37 + .../components/test/json/divider_creator.cpp | 38 + .../components/test/json/divider_creator.h | 32 + .../components/test/json/edge_creator.cpp | 56 + .../core/components/test/json/edge_creator.h | 32 + .../components/test/json/flex_creator.cpp | 94 + .../core/components/test/json/flex_creator.h | 38 + .../test/json/flex_item_creator.cpp | 50 + .../components/test/json/flex_item_creator.h | 33 + .../test/json/focusable_creator.cpp | 68 + .../components/test/json/focusable_creator.h | 32 + .../test/json/gesture_listener_creator.cpp | 49 + .../test/json/gesture_listener_creator.h | 32 + .../components/test/json/gradient_creator.cpp | 106 + .../components/test/json/gradient_creator.h | 35 + .../components/test/json/grid_creator.cpp | 76 + .../core/components/test/json/grid_creator.h | 33 + .../test/json/grid_item_creator.cpp | 39 + .../components/test/json/grid_item_creator.h | 33 + .../test/json/grid_layout_creator.cpp | 56 + .../test/json/grid_layout_creator.h | 33 + .../test/json/grid_layout_item_creator.cpp | 52 + .../test/json/grid_layout_item_creator.h | 33 + .../components/test/json/image_creator.cpp | 90 + .../core/components/test/json/image_creator.h | 37 + .../components/test/json/json_ace_page.cpp | 48 + .../core/components/test/json/json_ace_page.h | 39 + .../components/test/json/json_frontend.cpp | 205 + .../core/components/test/json/json_frontend.h | 158 + .../components/test/json/list_creator.cpp | 126 + .../core/components/test/json/list_creator.h | 37 + .../test/json/list_item_creator.cpp | 48 + .../components/test/json/list_item_creator.h | 33 + .../test/json/loading_progress_creator.cpp | 36 + .../test/json/loading_progress_creator.h | 32 + .../components/test/json/marquee_creator.cpp | 81 + .../components/test/json/marquee_creator.h | 34 + .../components/test/json/offset_creator.cpp | 38 + .../components/test/json/offset_creator.h | 35 + .../components/test/json/padding_creator.cpp | 46 + .../components/test/json/padding_creator.h | 33 + .../components/test/json/popup_creator.cpp | 80 + .../core/components/test/json/popup_creator.h | 32 + .../test/json/positioned_creator.cpp | 53 + .../components/test/json/positioned_creator.h | 32 + .../components/test/json/progress_creator.cpp | 106 + .../components/test/json/progress_creator.h | 36 + .../components/test/json/radius_creator.cpp | 48 + .../components/test/json/radius_creator.h | 32 + .../components/test/json/rating_creator.cpp | 71 + .../components/test/json/rating_creator.h | 34 + .../components/test/json/scroll_creator.cpp | 72 + .../components/test/json/scroll_creator.h | 33 + .../components/test/json/select_creator.cpp | 312 + .../components/test/json/select_creator.h | 50 + .../components/test/json/shadow_creator.cpp | 52 + .../components/test/json/shadow_creator.h | 35 + .../components/test/json/slider_creator.cpp | 106 + .../components/test/json/slider_creator.h | 35 + .../components/test/json/stack_creator.cpp | 65 + .../core/components/test/json/stack_creator.h | 33 + .../components/test/json/swiper_creator.cpp | 126 + .../components/test/json/swiper_creator.h | 30 + .../components/test/json/tab_bar_creator.cpp | 175 + .../components/test/json/tab_bar_creator.h | 38 + .../test/json/tab_content_creator.cpp | 57 + .../test/json/tab_content_creator.h | 33 + .../components/test/json/text_creator.cpp | 70 + .../core/components/test/json/text_creator.h | 34 + .../test/json/text_field_creator.cpp | 89 + .../components/test/json/text_field_creator.h | 34 + .../test/json/text_span_creator.cpp | 42 + .../components/test/json/text_span_creator.h | 31 + .../test/json/text_style_creator.cpp | 101 + .../components/test/json/text_style_creator.h | 32 + .../components/test/json/texture_creator.cpp | 77 + .../components/test/json/texture_creator.h | 37 + .../test/json/touch_listener_creator.cpp | 35 + .../test/json/touch_listener_creator.h | 30 + .../test/json/transform_creator.cpp | 93 + .../components/test/json/transform_creator.h | 35 + .../components/test/json/tween_creator.cpp | 49 + .../core/components/test/json/tween_creator.h | 32 + .../test/json/tween_option_creator.cpp | 121 + .../test/json/tween_option_creator.h | 31 + .../components/test/json/video_creator.cpp | 124 + .../core/components/test/json/video_creator.h | 38 + .../components/test/json/wrap_creator.cpp | 77 + .../core/components/test/json/wrap_creator.h | 32 + .../core/components/test/unittest/BUILD.gn | 75 + .../components/test/unittest/align/BUILD.gn | 57 + .../unittest/align/align_creator_test.cpp | 204 + .../components/test/unittest/border/BUILD.gn | 61 + .../unittest/border/border_creator_test.cpp | 366 + .../border/border_edge_creator_test.cpp | 118 + .../unittest/border/radius_creator_test.cpp | 138 + .../components/test/unittest/box/BUILD.gn | 186 + .../test/unittest/box/box_creator_test.cpp | 167 + .../test/unittest/box/box_test_utils.cpp | 43 + .../test/unittest/box/box_test_utils.h | 110 + .../test/unittest/box/color_creator_test.cpp | 192 + .../box/mouse_hover_animation_test.cpp | 550 + .../test/unittest/box/mouse_hover_test.cpp | 217 + .../unittest/box/render_box_percent_test.cpp | 783 + .../test/unittest/box/render_box_test.cpp | 2622 + .../components/test/unittest/button/BUILD.gn | 57 + .../unittest/button/button_creator_test.cpp | 145 + .../components/test/unittest/camera/BUILD.gn | 49 + .../unittest/camera/camera_component_test.cpp | 145 + .../test/unittest/checkable/BUILD.gn | 250 + .../checkable/checkable_creator_test.cpp | 369 + .../checkable/render_checkable_test.cpp | 780 + .../test/unittest/click_effect/BUILD.gn | 51 + .../click_effect/click_spring_effect_test.cpp | 158 + .../test/unittest/decoration/BUILD.gn | 59 + .../decoration/decoration_creator_test.cpp | 348 + .../components/test/unittest/dialog/BUILD.gn | 145 + .../unittest/dialog/dialog_component_test.cpp | 519 + .../unittest/dialog/dialog_creator_test.cpp | 546 + .../unittest/dialog/dialog_test_utils.cpp | 36 + .../test/unittest/dialog/dialog_test_utils.h | 89 + .../unittest/dialog/popup_creator_test.cpp | 163 + .../unittest/dialog/render_bubble_test.cpp | 493 + .../unittest/dialog/render_dialog_test.cpp | 85 + .../components/test/unittest/display/BUILD.gn | 102 + .../unittest/display/display_creator_test.cpp | 500 + .../unittest/display/display_test_utils.cpp | 91 + .../unittest/display/display_test_utils.h | 83 + .../unittest/display/render_display_test.cpp | 376 + .../components/test/unittest/divider/BUILD.gn | 60 + .../unittest/divider/divider_creator_test.cpp | 124 + .../test/unittest/drag_bar/BUILD.gn | 52 + .../unittest/drag_bar/drag_bar_test_utils.h | 86 + .../drag_bar/render_drag_bar_test.cpp | 132 + .../components/test/unittest/flex/BUILD.gn | 106 + .../test/unittest/flex/flex_creator_test.cpp | 522 + .../unittest/flex/flex_item_creator_test.cpp | 320 + .../test/unittest/flex/flex_test_utils.cpp | 149 + .../test/unittest/flex/flex_test_utils.h | 84 + .../test/unittest/flex/render_column_test.cpp | 764 + .../unittest/flex/render_flex_item_test.cpp | 2744 + .../flex/render_magic_layout_test.cpp | 555 + .../test/unittest/flex/render_row_test.cpp | 712 + .../test/unittest/gestures/BUILD.gn | 52 + .../gestures/gesture_component_test.cpp | 439 + .../components/test/unittest/grid/BUILD.gn | 91 + .../test/unittest/grid/grid_creator_test.cpp | 324 + .../test/unittest/grid/grid_test_utils.cpp | 110 + .../test/unittest/grid/grid_test_utils.h | 89 + .../test/unittest/grid/render_grid_test.cpp | 2973 + .../test/unittest/grid_layout/BUILD.gn | 53 + .../grid_layout/grid_layout_test_utils.cpp | 61 + .../grid_layout/grid_layout_test_utils.h | 53 + .../grid_layout/render_grid_layout_test.cpp | 1283 + .../components/test/unittest/image/BUILD.gn | 201 + .../unittest/image/image_creator_test.cpp | 186 + .../test/unittest/image/image_test_utils.cpp | 149 + .../test/unittest/image/image_test_utils.h | 119 + .../test/unittest/image/render_image_test.cpp | 267 + .../image/render_imagefit_none_test.cpp | 614 + .../image/render_imagefit_others_test.cpp | 470 + .../test/unittest/image_animator/BUILD.gn | 217 + .../image_animator/image_animator_test.cpp | 686 + .../components/test/unittest/indexer/BUILD.gn | 53 + .../unittest/indexer/indexer_test_utils.cpp | 49 + .../unittest/indexer/indexer_test_utils.h | 222 + .../unittest/indexer/render_indexer_test.cpp | 1925 + .../components/test/unittest/list/BUILD.gn | 129 + .../test/unittest/list/list_creator_test.cpp | 190 + .../test/unittest/list/list_element_test.cpp | 1419 + .../test/unittest/list/list_test_utils.cpp | 82 + .../test/unittest/list/list_test_utils.h | 277 + .../test/unittest/list/render_list_test.cpp | 3032 + .../components/test/unittest/marquee/BUILD.gn | 234 + .../unittest/marquee/marquee_creator_test.cpp | 192 + .../unittest/marquee/render_marquee_test.cpp | 562 + .../components/test/unittest/menu/BUILD.gn | 56 + .../unittest/menu/menu_component_test.cpp | 169 + .../test/unittest/mock/ace_trace_mock.cpp | 29 + .../test/unittest/mock/event_report_mock.cpp | 57 + .../mock/mock_flutter_font_manager.cpp | 25 + .../test/unittest/mock/mock_render_common.cpp | 51 + .../test/unittest/mock/mock_render_common.h | 45 + .../test/unittest/mock/mock_render_depend.h | 293 + .../mock/mock_render_node_factory.cpp | 44 + .../test/unittest/mock/overlay_mock.cpp | 44 + .../test/unittest/mock/overlay_mock.h | 31 + .../test/unittest/mock/render_mock.cpp | 127 + .../test/unittest/mock/render_mock.h | 111 + .../test/unittest/mock/semi_modal_mock.cpp | 32 + .../test/unittest/mock/transform_mock.cpp | 242 + .../test/unittest/mock/transform_mock.h | 59 + .../test/unittest/mock/transition_mock.cpp | 42 + .../test/unittest/mock/transition_mock.h | 41 + .../test/unittest/mock/tween_mock.cpp | 42 + .../test/unittest/mock/tween_mock.h | 40 + .../test/unittest/mock/window_mock.h | 135 + .../components/test/unittest/padding/BUILD.gn | 88 + .../unittest/padding/edge_creator_test.cpp | 148 + .../unittest/padding/padding_creator_test.cpp | 266 + .../unittest/padding/render_padding_test.cpp | 109 + .../components/test/unittest/picker/BUILD.gn | 63 + .../unittest/picker/render_picker_test.cpp | 369 + .../components/test/unittest/piece/BUILD.gn | 60 + .../unittest/piece/piece_component_test.cpp | 207 + .../test/unittest/progress/BUILD.gn | 93 + .../progress/progress_creator_test.cpp | 490 + .../unittest/progress/progress_test_utils.h | 112 + .../progress/render_progress_test.cpp | 254 + .../components/test/unittest/rating/BUILD.gn | 232 + .../unittest/rating/rating_creator_test.cpp | 169 + .../unittest/rating/render_rating_test.cpp | 592 + .../components/test/unittest/refresh/BUILD.gn | 52 + .../unittest/refresh/render_refresh_test.cpp | 537 + .../test/unittest/rotation/BUILD.gn | 48 + .../test/unittest/rotation/rotation_test.cpp | 188 + .../components/test/unittest/scroll/BUILD.gn | 87 + .../unittest/scroll/render_scroll_test.cpp | 1061 + .../unittest/scroll/scroll_creator_test.cpp | 163 + .../unittest/scroll/scroll_test_utils.cpp | 57 + .../test/unittest/scroll/scroll_test_utils.h | 45 + .../components/test/unittest/select/BUILD.gn | 56 + .../unittest/select/select_creator_test.cpp | 815 + .../test/unittest/semimodal/BUILD.gn | 229 + .../semimodal/render_semi_modal_test.cpp | 292 + .../components/test/unittest/shadow/BUILD.gn | 57 + .../unittest/shadow/shadow_creator_test.cpp | 225 + .../components/test/unittest/slider/BUILD.gn | 91 + .../unittest/slider/render_slider_test.cpp | 235 + .../unittest/slider/slider_creator_test.cpp | 636 + .../components/test/unittest/stack/BUILD.gn | 107 + .../stack/positioned_creator_test.cpp | 326 + .../unittest/stack/render_positioned_test.cpp | 271 + .../test/unittest/stack/render_stack_test.cpp | 495 + .../unittest/stack/stack_creator_test.cpp | 330 + .../test/unittest/stack/stack_test_utils.cpp | 40 + .../test/unittest/stack/stack_test_utils.h | 38 + .../components/test/unittest/stage/BUILD.gn | 63 + .../unittest/stage/stage_element_test.cpp | 238 + .../components/test/unittest/svg/BUILD.gn | 66 + .../test/unittest/svg/render_svg_test.cpp | 304 + .../components/test/unittest/swiper/BUILD.gn | 237 + .../unittest/swiper/render_swiper_test.cpp | 1166 + .../unittest/swiper/swiper_creator_test.cpp | 190 + .../components/test/unittest/tabbar/BUILD.gn | 355 + .../unittest/tabbar/render_tab_bar_test.cpp | 274 + .../tabbar/render_tabcontent_test.cpp | 884 + .../unittest/tabbar/tab_bar_element_test.cpp | 445 + .../tabbar/tab_content_element_test.cpp | 390 + .../test/unittest/tabbar/tab_test_utils.h | 83 + .../unittest/tabbar/tabbar_creator_test.cpp | 667 + .../unittest/tabbar/tabbar_test_utils.cpp | 53 + .../test/unittest/tabbar/tabbar_test_utils.h | 79 + .../tabbar/tabbarindicator_creator_test.cpp | 204 + .../tabbar/tabcontent_creator_test.cpp | 454 + .../components/test/unittest/text/BUILD.gn | 64 + .../test/unittest/text/text_creator_test.cpp | 160 + .../unittest/text/textspan_creator_test.cpp | 269 + .../unittest/text/textstyle_creator_test.cpp | 275 + .../test/unittest/text_field/BUILD.gn | 108 + .../dsl_text_field_creator_test.cpp | 191 + .../dsl_text_field_style_creator_test.cpp | 206 + .../text_field/render_text_field_test.cpp | 413 + .../test/unittest/text_select/BUILD.gn | 65 + .../text_select/render_text_select_test.cpp | 520 + .../components/test/unittest/theme/BUILD.gn | 159 + .../unittest/theme/theme_constants_test.cpp | 617 + .../unittest/theme/theme_manager_test.cpp | 125 + .../test/unittest/theme/theme_mock.cpp | 177 + .../test/unittest/theme/theme_mock.h | 46 + .../test/unittest/transform/BUILD.gn | 88 + .../transform/render_transform_test.cpp | 682 + .../transform/transform_creator_test.cpp | 268 + .../test/unittest/transition/BUILD.gn | 308 + .../shared_transition_element_test.cpp | 615 + .../transition/transition_element_test.cpp | 1435 + .../transition/transition_test_utils.cpp | 40 + .../components/test/unittest/tween/BUILD.gn | 216 + .../unittest/tween/tween_element_test.cpp | 1595 + .../components/test/unittest/video/BUILD.gn | 82 + .../unittest/video/render_texture_test.cpp | 900 + .../unittest/video/texture_test_utils.cpp | 44 + .../test/unittest/video/texture_test_utils.h | 39 + .../unittest/video/video_creator_test.cpp | 221 + .../test/unittest/view_update/BUILD.gn | 59 + .../unittest/view_update/view_update_test.cpp | 767 + .../components/test/unittest/wrap/BUILD.gn | 68 + .../test/unittest/wrap/render_wrap_test.cpp | 1023 + .../test/unittest/wrap/wrap_test_utils.cpp | 49 + .../test/unittest/wrap/wrap_test_utils.h | 57 + frameworks/core/components/text/BUILD.gn | 22 + .../components/text/flutter_render_text.cpp | 419 + .../components/text/flutter_render_text.h | 64 + .../core/components/text/render_text.cpp | 186 + frameworks/core/components/text/render_text.h | 100 + .../core/components/text/text_component.cpp | 35 + .../core/components/text/text_component.h | 90 + .../core/components/text/text_element.h | 39 + frameworks/core/components/text/text_theme.h | 79 + .../core/components/text_field/BUILD.gn | 24 + .../text_field/flutter_render_text_field.cpp | 1318 + .../text_field/flutter_render_text_field.h | 142 + .../text_field/render_text_field.cpp | 1668 + .../components/text_field/render_text_field.h | 482 + .../text_field/text_field_component.cpp | 651 + .../text_field/text_field_component.h | 322 + .../text_field/text_field_controller.cpp | 53 + .../text_field/text_field_controller.h | 43 + .../text_field/text_field_element.cpp | 226 + .../text_field/text_field_element.h | 52 + .../components/text_field/textfield_theme.h | 365 + .../core/components/text_overlay/BUILD.gn | 23 + .../flutter_render_text_overlay.cpp | 402 + .../flutter_render_text_overlay.h | 54 + .../text_overlay/render_text_overlay.cpp | 900 + .../text_overlay/render_text_overlay.h | 205 + .../text_overlay/text_overlay_component.cpp | 692 + .../text_overlay/text_overlay_component.h | 209 + .../text_overlay/text_overlay_element.cpp | 242 + .../text_overlay/text_overlay_element.h | 55 + .../text_overlay/text_overlay_theme.h | 210 + frameworks/core/components/text_span/BUILD.gn | 22 + .../text_span/flutter_render_text_span.cpp | 53 + .../text_span/flutter_render_text_span.h | 39 + .../components/text_span/render_text_span.cpp | 85 + .../components/text_span/render_text_span.h | 52 + .../text_span/text_span_component.cpp | 37 + .../text_span/text_span_component.h | 80 + .../components/text_span/text_span_element.h | 29 + frameworks/core/components/theme/BUILD.gn | 72 + .../core/components/theme/app_theme.cpp | 43 + frameworks/core/components/theme/app_theme.h | 59 + frameworks/core/components/theme/card_theme.h | 77 + .../components/theme/resource_adapter.cpp | 371 + .../core/components/theme/resource_adapter.h | 47 + .../theme/resource_adapter_preview.cpp | 598 + .../theme/resource_adapter_preview.h | 70 + frameworks/core/components/theme/theme.csv | 941 + frameworks/core/components/theme/theme.h | 35 + .../components/theme/theme_attributes.cpp | 187 + .../core/components/theme/theme_attributes.h | 188 + .../core/components/theme/theme_constants.cpp | 366 + .../core/components/theme/theme_constants.h | 156 + .../core/components/theme/theme_manager.cpp | 152 + .../core/components/theme/theme_manager.h | 105 + .../core/components/theme/theme_style.h | 189 + .../core/components/theme/theme_utils.cpp | 115 + .../core/components/theme/theme_utils.h | 47 + .../theme/tools/build_theme_code.py | 253 + frameworks/core/components/tip/BUILD.gn | 23 + .../components/tip/flutter_render_tip.cpp | 133 + .../core/components/tip/flutter_render_tip.h | 46 + frameworks/core/components/tip/render_tip.cpp | 85 + frameworks/core/components/tip/render_tip.h | 59 + .../core/components/tip/tip_component.cpp | 33 + .../core/components/tip/tip_component.h | 53 + .../core/components/tip/tip_element.cpp | 31 + frameworks/core/components/tip/tip_element.h | 32 + frameworks/core/components/toast/BUILD.gn | 18 + .../core/components/toast/toast_component.cpp | 206 + .../core/components/toast/toast_component.h | 51 + .../core/components/toast/toast_theme.h | 160 + frameworks/core/components/toggle/BUILD.gn | 23 + .../toggle/flutter_render_toggle.cpp | 115 + .../components/toggle/flutter_render_toggle.h | 48 + .../core/components/toggle/render_toggle.cpp | 262 + .../core/components/toggle/render_toggle.h | 85 + .../components/toggle/toggle_component.cpp | 33 + .../core/components/toggle/toggle_component.h | 127 + .../core/components/toggle/toggle_element.cpp | 49 + .../core/components/toggle/toggle_element.h | 41 + .../core/components/toggle/toggle_theme.h | 132 + frameworks/core/components/tool_bar/BUILD.gn | 26 + .../tool_bar/flutter_render_tool_bar.cpp | 42 + .../tool_bar/flutter_render_tool_bar.h | 37 + .../tool_bar/flutter_render_tool_bar_item.cpp | 96 + .../tool_bar/flutter_render_tool_bar_item.h | 43 + .../components/tool_bar/render_tool_bar.cpp | 108 + .../components/tool_bar/render_tool_bar.h | 56 + .../tool_bar/render_tool_bar_item.cpp | 267 + .../tool_bar/render_tool_bar_item.h | 125 + .../tool_bar/tool_bar_component.cpp | 34 + .../components/tool_bar/tool_bar_component.h | 39 + .../components/tool_bar/tool_bar_element.h | 36 + .../tool_bar/tool_bar_item_component.cpp | 34 + .../tool_bar/tool_bar_item_component.h | 132 + .../tool_bar/tool_bar_item_element.cpp | 168 + .../tool_bar/tool_bar_item_element.h | 50 + .../core/components/tool_bar/tool_bar_theme.h | 176 + .../core/components/touch_listener/BUILD.gn | 18 + .../touch_listener/render_touch_listener.cpp | 113 + .../touch_listener/render_touch_listener.h | 92 + .../touch_listener/touch_listener_component.h | 130 + .../touch_listener/touch_listener_element.h | 29 + frameworks/core/components/track/BUILD.gn | 26 + .../track/flutter_render_arc_track.cpp | 165 + .../track/flutter_render_arc_track.h | 35 + .../track/flutter_render_circular_track.cpp | 112 + .../track/flutter_render_circular_track.h | 33 + .../track/flutter_render_linear_track.cpp | 237 + .../track/flutter_render_linear_track.h | 44 + .../track/flutter_render_moon_track.cpp | 68 + .../track/flutter_render_moon_track.h | 35 + .../track/flutter_render_scale_ring_track.cpp | 94 + .../track/flutter_render_scale_ring_track.h | 35 + .../core/components/track/render_track.cpp | 216 + .../core/components/track/render_track.h | 235 + .../core/components/track/track_component.cpp | 47 + .../core/components/track/track_component.h | 389 + frameworks/core/components/transform/BUILD.gn | 24 + .../transform/click_spring_effect.cpp | 98 + .../transform/click_spring_effect.h | 78 + .../transform/flutter_render_transform.cpp | 159 + .../transform/flutter_render_transform.h | 57 + .../components/transform/render_transform.cpp | 422 + .../components/transform/render_transform.h | 164 + .../transform/transform_component.cpp | 115 + .../transform/transform_component.h | 124 + .../transform/transform_element.cpp | 68 + .../components/transform/transform_element.h | 43 + .../core/components/transition/BUILD.gn | 21 + .../transition/transition_component.cpp | 65 + .../transition/transition_component.h | 55 + .../transition/transition_element.cpp | 154 + .../transition/transition_element.h | 64 + frameworks/core/components/triangle/BUILD.gn | 22 + .../triangle/flutter_render_triangle.cpp | 57 + .../triangle/flutter_render_triangle.h | 35 + .../components/triangle/render_triangle.cpp | 152 + .../components/triangle/render_triangle.h | 141 + .../triangle/triangle_component.cpp | 33 + .../components/triangle/triangle_component.h | 79 + .../components/triangle/triangle_element.cpp | 25 + .../components/triangle/triangle_element.h | 29 + frameworks/core/components/tween/BUILD.gn | 21 + .../core/components/tween/tween_component.cpp | 100 + .../core/components/tween/tween_component.h | 206 + .../core/components/tween/tween_element.cpp | 1091 + .../core/components/tween/tween_element.h | 106 + frameworks/core/components/video/BUILD.gn | 27 + .../video/flutter_render_texture.cpp | 144 + .../components/video/flutter_render_texture.h | 56 + .../core/components/video/render_texture.cpp | 155 + .../core/components/video/render_texture.h | 89 + .../core/components/video/resource/player.cpp | 485 + .../core/components/video/resource/player.h | 148 + .../components/video/resource/resource.cpp | 168 + .../core/components/video/resource/resource.h | 83 + .../components/video/resource/texture.cpp | 110 + .../core/components/video/resource/texture.h | 49 + .../components/video/texture_component.cpp | 33 + .../core/components/video/texture_component.h | 102 + .../core/components/video/texture_element.h | 30 + .../core/components/video/video_component.cpp | 34 + .../core/components/video/video_component.h | 337 + .../core/components/video/video_element.cpp | 1193 + .../core/components/video/video_element.h | 163 + .../core/components/video/video_theme.h | 122 + .../core/components/watch_slider/BUILD.gn | 22 + .../flutter_render_watch_slider.cpp | 80 + .../flutter_render_watch_slider.h | 36 + .../watch_slider/render_watch_slider.cpp | 331 + .../watch_slider/render_watch_slider.h | 86 + .../watch_slider/watch_slider_component.cpp | 33 + .../watch_slider/watch_slider_component.h | 183 + .../watch_slider/watch_slider_element.h | 30 + frameworks/core/components/web/BUILD.gn | 25 + .../components/web/flutter_render_web.cpp | 57 + .../core/components/web/flutter_render_web.h | 37 + frameworks/core/components/web/render_web.cpp | 71 + frameworks/core/components/web/render_web.h | 55 + .../components/web/resource/web_delegate.cpp | 381 + .../components/web/resource/web_delegate.h | 89 + .../components/web/resource/web_resource.cpp | 179 + .../components/web/resource/web_resource.h | 84 + .../core/components/web/web_component.cpp | 72 + .../core/components/web/web_component.h | 162 + .../core/components/web/web_element.cpp | 38 + frameworks/core/components/web/web_element.h | 35 + frameworks/core/components/wrap/BUILD.gn | 21 + .../core/components/wrap/render_wrap.cpp | 481 + frameworks/core/components/wrap/render_wrap.h | 123 + .../core/components/wrap/wrap_component.h | 137 + .../core/components/wrap/wrap_element.cpp | 45 + .../core/components/wrap/wrap_element.h | 47 + frameworks/core/event/ace_event_handler.h | 195 + frameworks/core/event/ace_event_helper.h | 87 + frameworks/core/event/ace_events.h | 95 + .../core/event/back_end_event_manager.cpp | 39 + .../core/event/back_end_event_manager.h | 112 + frameworks/core/event/event_manager.cpp | 128 + frameworks/core/event/event_manager.h | 61 + frameworks/core/event/event_trigger.h | 77 + frameworks/core/event/key_event.cpp | 71 + frameworks/core/event/key_event.h | 80 + .../core/event/key_event_recognizer.cpp | 64 + frameworks/core/event/key_event_recognizer.h | 39 + frameworks/core/event/mouse_event.h | 158 + .../core/event/mouse_raw_recognizer.cpp | 46 + frameworks/core/event/mouse_raw_recognizer.h | 84 + .../event/multimodal/ace_multimodal_define.h | 66 + .../event/multimodal/ace_multimodal_event.h | 63 + .../event/multimodal/multimodal_manager.cpp | 143 + .../event/multimodal/multimodal_manager.h | 58 + .../event/multimodal/multimodal_properties.h | 39 + .../event/multimodal/multimodal_scene.cpp | 159 + .../core/event/multimodal/multimodal_scene.h | 71 + .../event/multimodal/multimodal_subscriber.h | 42 + .../core/event/multimodal/voice_event.h | 85 + frameworks/core/event/rotation_event.h | 27 + frameworks/core/event/test/BUILD.gn | 21 + frameworks/core/event/test/unittest/BUILD.gn | 69 + .../core/event/test/unittest/event_test.cpp | 511 + .../event/test/unittest/multimodal_test.cpp | 119 + .../core/focus/focus_animation_manager.cpp | 246 + .../core/focus/focus_animation_manager.h | 66 + frameworks/core/focus/focus_node.cpp | 554 + frameworks/core/focus/focus_node.h | 248 + frameworks/core/focus/test/BUILD.gn | 19 + .../core/focus/test/unittest/focus/BUILD.gn | 74 + .../focus/test/unittest/focus/focus_test.cpp | 539 + frameworks/core/font/constants_converter.cpp | 243 + frameworks/core/font/constants_converter.h | 68 + .../core/font/flutter_font_collection.cpp | 101 + .../core/font/flutter_font_collection.h | 56 + frameworks/core/font/flutter_font_loader.cpp | 128 + frameworks/core/font/flutter_font_loader.h | 41 + frameworks/core/font/font_loader.cpp | 45 + frameworks/core/font/font_loader.h | 48 + frameworks/core/font/font_manager.cpp | 91 + frameworks/core/font/font_manager.h | 54 + frameworks/core/gestures/click_recognizer.cpp | 91 + frameworks/core/gestures/click_recognizer.h | 61 + frameworks/core/gestures/drag_recognizer.cpp | 217 + frameworks/core/gestures/drag_recognizer.h | 199 + .../core/gestures/gesture_recognizer.cpp | 44 + frameworks/core/gestures/gesture_recognizer.h | 65 + frameworks/core/gestures/gesture_referee.cpp | 138 + frameworks/core/gestures/gesture_referee.h | 80 + .../core/gestures/long_press_recognizer.cpp | 121 + .../core/gestures/long_press_recognizer.h | 65 + frameworks/core/gestures/press_recognizer.cpp | 122 + frameworks/core/gestures/press_recognizer.h | 72 + frameworks/core/gestures/raw_recognizer.cpp | 138 + frameworks/core/gestures/raw_recognizer.h | 141 + frameworks/core/gestures/swipe_recognizer.cpp | 101 + frameworks/core/gestures/swipe_recognizer.h | 69 + frameworks/core/gestures/test/BUILD.gn | 21 + .../core/gestures/test/unittest/BUILD.gn | 45 + .../gestures/test/unittest/gestures_test.cpp | 1127 + frameworks/core/gestures/touch_event.h | 241 + frameworks/core/gestures/velocity.h | 96 + frameworks/core/gestures/velocity_tracker.cpp | 45 + frameworks/core/gestures/velocity_tracker.h | 122 + .../core/image/animated_image_player.cpp | 122 + frameworks/core/image/animated_image_player.h | 95 + frameworks/core/image/flutter_image_cache.cpp | 32 + frameworks/core/image/flutter_image_cache.h | 40 + frameworks/core/image/image_cache.cpp | 152 + frameworks/core/image/image_cache.h | 181 + frameworks/core/image/image_provider.cpp | 739 + frameworks/core/image/image_provider.h | 208 + frameworks/core/image/render_image_provider.h | 38 + frameworks/core/image/test/BUILD.gn | 20 + frameworks/core/image/test/unittest/BUILD.gn | 171 + .../image/test/unittest/image_cache_test.cpp | 215 + .../image/test/unittest/image_cache_test.h | 45 + .../test/unittest/image_provider_test.cpp | 284 + .../test/unittest/image_provider_test_utils.h | 84 + .../core/mock/mock_ace_application_info.cpp | 74 + frameworks/core/mock/mock_resource_register.h | 46 + .../core/mock/mock_system_properties.cpp | 31 + frameworks/core/mock/mock_watch_dog.cpp | 30 + frameworks/core/pipeline/BUILD.gn | 104 + frameworks/core/pipeline/LICENSE | 43 + frameworks/core/pipeline/base/component.cpp | 36 + frameworks/core/pipeline/base/component.h | 131 + .../core/pipeline/base/component_group.h | 140 + .../pipeline/base/component_group_element.cpp | 523 + .../pipeline/base/component_group_element.h | 64 + .../core/pipeline/base/composed_component.cpp | 50 + .../core/pipeline/base/composed_component.h | 110 + .../core/pipeline/base/composed_element.cpp | 176 + .../core/pipeline/base/composed_element.h | 96 + frameworks/core/pipeline/base/constants.cpp | 602 + frameworks/core/pipeline/base/constants.h | 605 + frameworks/core/pipeline/base/element.cpp | 427 + frameworks/core/pipeline/base/element.h | 228 + .../base/factories/flutter_node_factory.h | 60 + .../base/factories/flutter_render_factory.h | 92 + .../pipeline/base/factories/render_factory.h | 48 + .../base/factories/render_node_factory.cpp | 56 + .../base/factories/render_node_factory.h | 78 + .../pipeline/base/flutter_render_context.cpp | 122 + .../pipeline/base/flutter_render_context.h | 68 + frameworks/core/pipeline/base/measurable.h | 65 + .../core/pipeline/base/overlay_show_option.h | 45 + .../pipeline/base/position_layout_utils.h | 54 + .../core/pipeline/base/related_node.cpp | 89 + frameworks/core/pipeline/base/related_node.h | 55 + .../core/pipeline/base/render_component.h | 245 + .../core/pipeline/base/render_context.h | 50 + .../core/pipeline/base/render_element.cpp | 207 + .../core/pipeline/base/render_element.h | 71 + frameworks/core/pipeline/base/render_layer.h | 25 + frameworks/core/pipeline/base/render_node.cpp | 861 + frameworks/core/pipeline/base/render_node.h | 923 + .../core/pipeline/base/scoped_canvas_state.h | 89 + frameworks/core/pipeline/base/single_child.h | 59 + .../core/pipeline/base/sole_child_component.h | 67 + .../core/pipeline/base/sole_child_element.cpp | 38 + .../core/pipeline/base/sole_child_element.h | 38 + .../pipeline/layers/ace_scene_builder.cpp | 116 + .../core/pipeline/layers/ace_scene_builder.h | 51 + .../core/pipeline/layers/clip_layer.cpp | 88 + frameworks/core/pipeline/layers/clip_layer.h | 60 + .../core/pipeline/layers/container_layer.cpp | 36 + .../core/pipeline/layers/container_layer.h | 34 + .../core/pipeline/layers/dropfilter_layer.cpp | 41 + .../core/pipeline/layers/dropfilter_layer.h | 43 + .../pipeline/layers/flutter_scene_builder.cpp | 96 + .../pipeline/layers/flutter_scene_builder.h | 51 + .../core/pipeline/layers/gradient_layer.cpp | 70 + .../core/pipeline/layers/gradient_layer.h | 81 + frameworks/core/pipeline/layers/layer.cpp | 43 + frameworks/core/pipeline/layers/layer.h | 71 + .../core/pipeline/layers/offset_layer.cpp | 34 + .../core/pipeline/layers/offset_layer.h | 48 + .../core/pipeline/layers/opacity_layer.cpp | 44 + .../core/pipeline/layers/opacity_layer.h | 43 + .../core/pipeline/layers/picture_layer.cpp | 54 + .../core/pipeline/layers/picture_layer.h | 61 + .../core/pipeline/layers/scene_builder.h | 49 + .../core/pipeline/layers/texture_layer.cpp | 45 + .../core/pipeline/layers/texture_layer.h | 47 + .../core/pipeline/layers/transform_layer.cpp | 48 + .../core/pipeline/layers/transform_layer.h | 46 + frameworks/core/pipeline/pipeline_context.cpp | 1962 + frameworks/core/pipeline/pipeline_context.h | 787 + frameworks/core/pipeline/test/BUILD.gn | 21 + .../pipeline/test/unittest/context/BUILD.gn | 198 + .../context/pipeline_context_test.cpp | 428 + .../test/unittest/unittest_config.gni | 71 + frameworks/core/theme/theme_manager.cpp | 44 + frameworks/core/theme/theme_manager.h | 51 + interfaces/kits/js/declaration/BUILD.gn | 27 + .../js/declaration/api/@internal/console.d.ts | 54 + .../api/@internal/featureability.d.ts | 256 + .../js/declaration/api/@internal/global.d.ts | 102 + .../js/declaration/api/@internal/index.d.ts | 19 + .../declaration/api/@internal/viewmodel.d.ts | 1430 + .../kits/js/declaration/api/@system.app.d.ts | 113 + .../js/declaration/api/@system.battery.d.ts | 65 + .../declaration/api/@system.brightness.d.ts | 212 + .../js/declaration/api/@system.cipher.d.ts | 178 + .../api/@system.configuration.d.ts | 50 + .../js/declaration/api/@system.device.d.ts | 110 + .../js/declaration/api/@system.fetch.d.ts | 104 + .../kits/js/declaration/api/@system.file.d.ts | 651 + .../declaration/api/@system.geolocation.d.ts | 186 + .../declaration/api/@system.mediaquery.d.ts | 73 + .../js/declaration/api/@system.network.d.ts | 91 + .../declaration/api/@system.notification.d.ts | 73 + .../js/declaration/api/@system.package.d.ts | 63 + .../js/declaration/api/@system.prompt.d.ts | 120 + .../js/declaration/api/@system.request.d.ts | 264 + .../js/declaration/api/@system.router.d.ts | 120 + .../js/declaration/api/@system.sensor.d.ts | 410 + .../js/declaration/api/@system.shortcut.d.ts | 148 + .../js/declaration/api/@system.storage.d.ts | 173 + .../js/declaration/api/@system.vibrator.d.ts | 56 + ohos.build | 25 + .../imagecache/images/1008157312073340586 | 1 + .../imagecache/images/13610839755484614436 | 1 + .../imagecache/images/5841967474238710136 | 1 + .../imagecache/images/748621363886323660 | 1 + .../imagecache/images/8819493328252140263 | 1 + .../imageprovider/images/broken.bmp | 1 + .../imageprovider/images/broken.gif | 1 + .../imageprovider/images/broken.jpg | 1 + .../imageprovider/images/broken.png | 1 + .../imageprovider/images/broken.webp | 1 + .../imageprovider/images/unbroken.bmp | Bin 0 -> 3686454 bytes .../imageprovider/images/unbroken.gif | Bin 0 -> 453628 bytes .../imageprovider/images/unbroken.jpg | Bin 0 -> 233322 bytes .../imageprovider/images/unbroken.png | Bin 0 -> 2323257 bytes .../imageprovider/images/unbroken.webp | Bin 0 -> 96408 bytes .../graphicalbasicability/ohos_test.xml | 26 + .../resource/jscard/carddomclock/correct.json | 70 + test/resource/jscard/carddomclock/error.json | 70 + test/resource/jscard/ohos_test.xml | 21 + 2490 files changed, 677252 insertions(+), 61 deletions(-) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 BUILD.gn create mode 100644 LICENSE create mode 100644 OAT.xml delete mode 100644 README.en.md create mode 100644 README_zh.md create mode 100644 ace_config.gni create mode 100644 adapter/common/cpp/BUILD.gn create mode 100644 adapter/common/cpp/ace_res_config.cpp create mode 100644 adapter/common/cpp/ace_res_config.h create mode 100644 adapter/common/cpp/ace_res_data_struct.h create mode 100644 adapter/common/cpp/ace_res_key_parser.cpp create mode 100644 adapter/common/cpp/ace_res_key_parser.h create mode 100644 adapter/common/cpp/ace_trace.cpp create mode 100644 adapter/common/cpp/file_asset_provider.cpp create mode 100644 adapter/common/cpp/file_asset_provider.h create mode 100644 adapter/common/cpp/flutter_asset_manager.h create mode 100644 adapter/common/cpp/flutter_task_executor.cpp create mode 100644 adapter/common/cpp/flutter_task_executor.h create mode 100644 adapter/common/cpp/flutter_window.cpp create mode 100644 adapter/common/cpp/flutter_window.h create mode 100644 adapter/common/cpp/localization.cpp create mode 100644 adapter/common/cpp/multimodal/fake_multimodal_subscriber.h create mode 100644 adapter/common/cpp/thread_util.cpp create mode 100644 adapter/ohos/cpp/BUILD.gn create mode 100644 adapter/ohos/cpp/ace_ability.cpp create mode 100644 adapter/ohos/cpp/ace_ability.h create mode 100755 adapter/ohos/cpp/ace_application_info.cpp create mode 100755 adapter/ohos/cpp/ace_application_info.h create mode 100644 adapter/ohos/cpp/ace_container.cpp create mode 100644 adapter/ohos/cpp/ace_container.h create mode 100644 adapter/ohos/cpp/flutter_ace_view.cpp create mode 100644 adapter/ohos/cpp/flutter_ace_view.h create mode 100644 adapter/ohos/cpp/platform_event_callback.h create mode 100644 adapter/ohos/osal/BUILD.gn create mode 100644 adapter/ohos/osal/ace_trace.cpp create mode 100644 adapter/ohos/osal/event_report.cpp create mode 100644 adapter/ohos/osal/fake_asset_manager.h create mode 100644 adapter/ohos/osal/fake_task_executor.h create mode 100644 adapter/ohos/osal/log_wrapper.cpp create mode 100644 adapter/ohos/osal/system_properties.cpp create mode 100644 adapter/preview/entrance/BUILD.gn create mode 100644 adapter/preview/entrance/ace_ability.cpp create mode 100644 adapter/preview/entrance/ace_ability.h create mode 100644 adapter/preview/entrance/ace_application_info.cpp create mode 100644 adapter/preview/entrance/ace_application_info.h create mode 100644 adapter/preview/entrance/ace_container.cpp create mode 100644 adapter/preview/entrance/ace_container.h create mode 100644 adapter/preview/entrance/ace_resource_register.cpp create mode 100644 adapter/preview/entrance/ace_resource_register.h create mode 100644 adapter/preview/entrance/ace_run_args.h create mode 100644 adapter/preview/entrance/flutter_ace_view.cpp create mode 100644 adapter/preview/entrance/flutter_ace_view.h create mode 100644 adapter/preview/entrance/flutter_task_executor.cpp create mode 100644 adapter/preview/entrance/flutter_task_executor.h create mode 100644 adapter/preview/entrance/flutter_window.cpp create mode 100644 adapter/preview/entrance/flutter_window.h create mode 100644 adapter/preview/entrance/samples/BUILD.gn create mode 100644 adapter/preview/entrance/samples/ace_card_test.cpp create mode 100644 adapter/preview/entrance/samples/ace_phone_test.cpp create mode 100644 adapter/preview/entrance/samples/ace_tablet_test.cpp create mode 100644 adapter/preview/entrance/samples/ace_tv_test.cpp create mode 100644 adapter/preview/entrance/samples/ace_watch_test.cpp create mode 100644 adapter/preview/osal/BUILD.gn create mode 100644 adapter/preview/osal/ace_trace.cpp create mode 100644 adapter/preview/osal/download_manager.cpp create mode 100644 adapter/preview/osal/event_report.cpp create mode 100644 adapter/preview/osal/log_wrapper.cpp create mode 100755 adapter/preview/osal/system_properties.cpp create mode 100644 figures/JS-UI框架架构.png create mode 100644 figures/framework-architecture.png create mode 100644 frameworks/base/BUILD.gn create mode 100644 frameworks/base/geometry/arc.h create mode 100644 frameworks/base/geometry/axis.h create mode 100644 frameworks/base/geometry/dimension.h create mode 100644 frameworks/base/geometry/dimension_offset.h create mode 100644 frameworks/base/geometry/matrix4.cpp create mode 100644 frameworks/base/geometry/matrix4.h create mode 100644 frameworks/base/geometry/offset.h create mode 100644 frameworks/base/geometry/point.h create mode 100644 frameworks/base/geometry/rect.h create mode 100644 frameworks/base/geometry/rrect.h create mode 100644 frameworks/base/geometry/size.h create mode 100644 frameworks/base/i18n/BUILD.gn create mode 100644 frameworks/base/i18n/localization.cpp create mode 100644 frameworks/base/i18n/localization.h create mode 100644 frameworks/base/json/json_util.cpp create mode 100644 frameworks/base/json/json_util.h create mode 100644 frameworks/base/log/ace_trace.cpp create mode 100644 frameworks/base/log/ace_trace.h create mode 100644 frameworks/base/log/dump_log.cpp create mode 100644 frameworks/base/log/dump_log.h create mode 100644 frameworks/base/log/event_report.h create mode 100644 frameworks/base/log/log.h create mode 100644 frameworks/base/log/log_wrapper.h create mode 100644 frameworks/base/memory/ace_type.h create mode 100644 frameworks/base/memory/memory_monitor.cpp create mode 100644 frameworks/base/memory/memory_monitor.h create mode 100644 frameworks/base/memory/memory_monitor_def.h create mode 100644 frameworks/base/memory/ref_counter.h create mode 100644 frameworks/base/memory/referenced.h create mode 100644 frameworks/base/memory/type_info_base.h create mode 100644 frameworks/base/network/download_manager.cpp create mode 100644 frameworks/base/network/download_manager.h create mode 100644 frameworks/base/resource/BUILD.gn create mode 100644 frameworks/base/resource/asset_manager.h create mode 100644 frameworks/base/resource/binary/close.svg create mode 100644 frameworks/base/resource/binary/correct.svg create mode 100644 frameworks/base/resource/binary/down_arrow.svg create mode 100644 frameworks/base/resource/binary/exit_full_screen.svg create mode 100644 frameworks/base/resource/binary/full_screen.svg create mode 100644 frameworks/base/resource/binary/hide_password.svg create mode 100644 frameworks/base/resource/binary/i18n/entry.json create mode 100644 frameworks/base/resource/binary/i18n/errorcode.json create mode 100644 frameworks/base/resource/binary/ic_back.svg create mode 100644 frameworks/base/resource/binary/ic_more.svg create mode 100644 frameworks/base/resource/binary/ic_more_dark.svg create mode 100644 frameworks/base/resource/binary/ic_more_transparent.svg create mode 100644 frameworks/base/resource/binary/indexer_arrow.png create mode 100644 frameworks/base/resource/binary/indexletter_bar.json create mode 100644 frameworks/base/resource/binary/left_arrow.svg create mode 100644 frameworks/base/resource/binary/mac/close.o create mode 100644 frameworks/base/resource/binary/mac/correct.o create mode 100644 frameworks/base/resource/binary/mac/down_arrow.o create mode 100644 frameworks/base/resource/binary/mac/entry.o create mode 100644 frameworks/base/resource/binary/mac/errorcode.o create mode 100644 frameworks/base/resource/binary/mac/exit_full_screen.o create mode 100644 frameworks/base/resource/binary/mac/full_screen.o create mode 100644 frameworks/base/resource/binary/mac/hide_password.o create mode 100644 frameworks/base/resource/binary/mac/ic_back.o create mode 100644 frameworks/base/resource/binary/mac/ic_more.o create mode 100644 frameworks/base/resource/binary/mac/ic_more_dark.o create mode 100644 frameworks/base/resource/binary/mac/ic_more_transparent.o create mode 100644 frameworks/base/resource/binary/mac/indexer_arrow.o create mode 100644 frameworks/base/resource/binary/mac/indexletter_bar.o create mode 100644 frameworks/base/resource/binary/mac/left_arrow.o create mode 100644 frameworks/base/resource/binary/mac/navigation_bar_back.o create mode 100644 frameworks/base/resource/binary/mac/navigation_bar_more.o create mode 100644 frameworks/base/resource/binary/mac/pause.o create mode 100644 frameworks/base/resource/binary/mac/piece_delete.o create mode 100644 frameworks/base/resource/binary/mac/play.o create mode 100644 frameworks/base/resource/binary/mac/rate_star_big_off.o create mode 100644 frameworks/base/resource/binary/mac/rate_star_big_on.o create mode 100644 frameworks/base/resource/binary/mac/rate_star_small_off.o create mode 100644 frameworks/base/resource/binary/mac/rate_star_small_on.o create mode 100644 frameworks/base/resource/binary/mac/right_arrow.o create mode 100644 frameworks/base/resource/binary/mac/search.o create mode 100644 frameworks/base/resource/binary/mac/select_arrow_disabled.o create mode 100644 frameworks/base/resource/binary/mac/select_arrow_normal.o create mode 100644 frameworks/base/resource/binary/mac/semi_modal_bar_down.o create mode 100644 frameworks/base/resource/binary/mac/semi_modal_bar_middle.o create mode 100644 frameworks/base/resource/binary/mac/share.o create mode 100644 frameworks/base/resource/binary/mac/show_password.o create mode 100644 frameworks/base/resource/binary/mac/stepper_back_arrow.o create mode 100644 frameworks/base/resource/binary/mac/stepper_next_arrow.o create mode 100644 frameworks/base/resource/binary/mac/translate_c2e.o create mode 100644 frameworks/base/resource/binary/mac/tv_rate_star_big_off.o create mode 100644 frameworks/base/resource/binary/mac/tv_rate_star_big_on.o create mode 100644 frameworks/base/resource/binary/mac/tv_rate_star_small_off.o create mode 100644 frameworks/base/resource/binary/mac/tv_rate_star_small_on.o create mode 100644 frameworks/base/resource/binary/mac/up_arrow.o create mode 100644 frameworks/base/resource/binary/mac/watch_down_arrow.o create mode 100644 frameworks/base/resource/binary/mac/watch_up_arrow.o create mode 100644 frameworks/base/resource/binary/mac/wrong.o create mode 100644 frameworks/base/resource/binary/navigation_bar_back.png create mode 100644 frameworks/base/resource/binary/navigation_bar_more.png create mode 100644 frameworks/base/resource/binary/pause.svg create mode 100644 frameworks/base/resource/binary/piece_delete.svg create mode 100644 frameworks/base/resource/binary/play.svg create mode 100644 frameworks/base/resource/binary/rate_star_big_half.png create mode 100644 frameworks/base/resource/binary/rate_star_big_off.png create mode 100644 frameworks/base/resource/binary/rate_star_big_off.svg create mode 100644 frameworks/base/resource/binary/rate_star_big_on.png create mode 100644 frameworks/base/resource/binary/rate_star_big_on.svg create mode 100644 frameworks/base/resource/binary/rate_star_small_half.png create mode 100644 frameworks/base/resource/binary/rate_star_small_off.png create mode 100644 frameworks/base/resource/binary/rate_star_small_off.svg create mode 100644 frameworks/base/resource/binary/rate_star_small_on.png create mode 100644 frameworks/base/resource/binary/rate_star_small_on.svg create mode 100644 frameworks/base/resource/binary/right_arrow.svg create mode 100644 frameworks/base/resource/binary/search.svg create mode 100644 frameworks/base/resource/binary/select_arrow_disabled.png create mode 100644 frameworks/base/resource/binary/select_arrow_normal.png create mode 100644 frameworks/base/resource/binary/semi_modal_bar_down.svg create mode 100644 frameworks/base/resource/binary/semi_modal_bar_middle.svg create mode 100644 frameworks/base/resource/binary/share.svg create mode 100644 frameworks/base/resource/binary/show_password.svg create mode 100644 frameworks/base/resource/binary/stepper_back_arrow.svg create mode 100644 frameworks/base/resource/binary/stepper_next_arrow.svg create mode 100644 frameworks/base/resource/binary/translate_c2e.svg create mode 100644 frameworks/base/resource/binary/tv_rate_star_big_half.png create mode 100644 frameworks/base/resource/binary/tv_rate_star_big_off.png create mode 100644 frameworks/base/resource/binary/tv_rate_star_big_off.svg create mode 100644 frameworks/base/resource/binary/tv_rate_star_big_on.png create mode 100644 frameworks/base/resource/binary/tv_rate_star_big_on.svg create mode 100644 frameworks/base/resource/binary/tv_rate_star_small_half.png create mode 100644 frameworks/base/resource/binary/tv_rate_star_small_off.png create mode 100644 frameworks/base/resource/binary/tv_rate_star_small_off.svg create mode 100644 frameworks/base/resource/binary/tv_rate_star_small_on.png create mode 100644 frameworks/base/resource/binary/tv_rate_star_small_on.svg create mode 100644 frameworks/base/resource/binary/up_arrow.svg create mode 100644 frameworks/base/resource/binary/watch_down_arrow.svg create mode 100644 frameworks/base/resource/binary/watch_up_arrow.svg create mode 100644 frameworks/base/resource/binary/wrong.svg create mode 100644 frameworks/base/resource/internal_resource.cpp create mode 100644 frameworks/base/resource/internal_resource.h create mode 100644 frameworks/base/resource/shared_image_manager.cpp create mode 100644 frameworks/base/resource/shared_image_manager.h create mode 100644 frameworks/base/test/BUILD.gn create mode 100644 frameworks/base/test/unittest/json_util/BUILD.gn create mode 100644 frameworks/base/test/unittest/json_util/json_util_test.cpp create mode 100644 frameworks/base/test/unittest/mock_system_properties.cpp create mode 100644 frameworks/base/test/unittest/task_executor/BUILD.gn create mode 100644 frameworks/base/test/unittest/task_executor/task_executor_test.cpp create mode 100644 frameworks/base/thread/background_task_executor.cpp create mode 100644 frameworks/base/thread/background_task_executor.h create mode 100644 frameworks/base/thread/cancelable_callback.h create mode 100644 frameworks/base/thread/task_executor.h create mode 100644 frameworks/base/thread/thread_util.h create mode 100644 frameworks/base/utils/base_id.cpp create mode 100644 frameworks/base/utils/base_id.h create mode 100644 frameworks/base/utils/date_util.cpp create mode 100644 frameworks/base/utils/date_util.h create mode 100644 frameworks/base/utils/device_config.h create mode 100644 frameworks/base/utils/device_type.h create mode 100644 frameworks/base/utils/event_callback.h create mode 100644 frameworks/base/utils/label_target.h create mode 100644 frameworks/base/utils/linear_map.h create mode 100644 frameworks/base/utils/listener.h create mode 100644 frameworks/base/utils/macros.h create mode 100644 frameworks/base/utils/noncopyable.h create mode 100644 frameworks/base/utils/singleton.h create mode 100644 frameworks/base/utils/string_utils.cpp create mode 100644 frameworks/base/utils/string_utils.h create mode 100644 frameworks/base/utils/system_properties.h create mode 100644 frameworks/base/utils/time_util.cpp create mode 100644 frameworks/base/utils/time_util.h create mode 100644 frameworks/base/utils/type_definition.h create mode 100644 frameworks/base/utils/utils.h create mode 100644 frameworks/base/utils/value_change_notifier.h create mode 100644 frameworks/base/watch_dog/watch_dog.cpp create mode 100644 frameworks/base/watch_dog/watch_dog.h create mode 100755 frameworks/bridge/BUILD.gn create mode 100644 frameworks/bridge/card_frontend/card_frontend.cpp create mode 100644 frameworks/bridge/card_frontend/card_frontend.h create mode 100644 frameworks/bridge/card_frontend/card_frontend_delegate.cpp create mode 100644 frameworks/bridge/card_frontend/card_frontend_delegate.h create mode 100644 frameworks/bridge/card_frontend/js_card_parser.cpp create mode 100644 frameworks/bridge/card_frontend/js_card_parser.h create mode 100644 frameworks/bridge/card_frontend/media_queryer.cpp create mode 100644 frameworks/bridge/card_frontend/media_queryer.h create mode 100644 frameworks/bridge/codec/byte_buffer_operator.cpp create mode 100644 frameworks/bridge/codec/byte_buffer_operator.h create mode 100644 frameworks/bridge/codec/codec_data.h create mode 100644 frameworks/bridge/codec/function_call.h create mode 100644 frameworks/bridge/codec/function_codec.h create mode 100644 frameworks/bridge/codec/standard_codec_buffer_operator.cpp create mode 100644 frameworks/bridge/codec/standard_codec_buffer_operator.h create mode 100644 frameworks/bridge/codec/standard_function_codec.cpp create mode 100644 frameworks/bridge/codec/standard_function_codec.h create mode 100644 frameworks/bridge/common/accessibility/accessibility_node_manager.cpp create mode 100644 frameworks/bridge/common/accessibility/accessibility_node_manager.h create mode 100644 frameworks/bridge/common/accessibility/fake_accessibility_manager.cpp create mode 100644 frameworks/bridge/common/accessibility/fake_accessibility_node_manager.cpp create mode 100644 frameworks/bridge/common/accessibility/js_accessibility_manager.cpp create mode 100644 frameworks/bridge/common/accessibility/js_accessibility_manager.h create mode 100644 frameworks/bridge/common/dom/dom_badge.cpp create mode 100644 frameworks/bridge/common/dom/dom_badge.h create mode 100644 frameworks/bridge/common/dom/dom_button.cpp create mode 100644 frameworks/bridge/common/dom/dom_button.h create mode 100644 frameworks/bridge/common/dom/dom_calendar.cpp create mode 100644 frameworks/bridge/common/dom/dom_calendar.h create mode 100644 frameworks/bridge/common/dom/dom_camera.cpp create mode 100644 frameworks/bridge/common/dom/dom_camera.h create mode 100644 frameworks/bridge/common/dom/dom_canvas.cpp create mode 100644 frameworks/bridge/common/dom/dom_canvas.h create mode 100644 frameworks/bridge/common/dom/dom_chart.cpp create mode 100644 frameworks/bridge/common/dom/dom_chart.h create mode 100644 frameworks/bridge/common/dom/dom_clock.cpp create mode 100644 frameworks/bridge/common/dom/dom_clock.h create mode 100644 frameworks/bridge/common/dom/dom_dialog.cpp create mode 100644 frameworks/bridge/common/dom/dom_dialog.h create mode 100644 frameworks/bridge/common/dom/dom_div.cpp create mode 100644 frameworks/bridge/common/dom/dom_div.h create mode 100644 frameworks/bridge/common/dom/dom_divider.cpp create mode 100644 frameworks/bridge/common/dom/dom_divider.h create mode 100644 frameworks/bridge/common/dom/dom_document.cpp create mode 100644 frameworks/bridge/common/dom/dom_document.h create mode 100644 frameworks/bridge/common/dom/dom_grid_column.cpp create mode 100644 frameworks/bridge/common/dom/dom_grid_column.h create mode 100644 frameworks/bridge/common/dom/dom_grid_container.cpp create mode 100644 frameworks/bridge/common/dom/dom_grid_container.h create mode 100644 frameworks/bridge/common/dom/dom_grid_row.cpp create mode 100644 frameworks/bridge/common/dom/dom_grid_row.h create mode 100644 frameworks/bridge/common/dom/dom_image.cpp create mode 100644 frameworks/bridge/common/dom/dom_image.h create mode 100644 frameworks/bridge/common/dom/dom_image_animator.cpp create mode 100644 frameworks/bridge/common/dom/dom_image_animator.h create mode 100644 frameworks/bridge/common/dom/dom_input.cpp create mode 100644 frameworks/bridge/common/dom/dom_input.h create mode 100644 frameworks/bridge/common/dom/dom_label.cpp create mode 100644 frameworks/bridge/common/dom/dom_label.h create mode 100644 frameworks/bridge/common/dom/dom_list.cpp create mode 100644 frameworks/bridge/common/dom/dom_list.h create mode 100644 frameworks/bridge/common/dom/dom_list_item.cpp create mode 100644 frameworks/bridge/common/dom/dom_list_item.h create mode 100644 frameworks/bridge/common/dom/dom_list_item_group.cpp create mode 100644 frameworks/bridge/common/dom/dom_list_item_group.h create mode 100644 frameworks/bridge/common/dom/dom_marquee.cpp create mode 100644 frameworks/bridge/common/dom/dom_marquee.h create mode 100644 frameworks/bridge/common/dom/dom_menu.cpp create mode 100644 frameworks/bridge/common/dom/dom_menu.h create mode 100644 frameworks/bridge/common/dom/dom_navigation_bar.cpp create mode 100644 frameworks/bridge/common/dom/dom_navigation_bar.h create mode 100644 frameworks/bridge/common/dom/dom_navigation_menu.cpp create mode 100644 frameworks/bridge/common/dom/dom_navigation_menu.h create mode 100644 frameworks/bridge/common/dom/dom_node.cpp create mode 100644 frameworks/bridge/common/dom/dom_node.h create mode 100644 frameworks/bridge/common/dom/dom_option.cpp create mode 100644 frameworks/bridge/common/dom/dom_option.h create mode 100644 frameworks/bridge/common/dom/dom_panel.cpp create mode 100644 frameworks/bridge/common/dom/dom_panel.h create mode 100644 frameworks/bridge/common/dom/dom_picker_base.cpp create mode 100644 frameworks/bridge/common/dom/dom_picker_base.h create mode 100644 frameworks/bridge/common/dom/dom_picker_dialog.cpp create mode 100644 frameworks/bridge/common/dom/dom_picker_dialog.h create mode 100644 frameworks/bridge/common/dom/dom_picker_view.cpp create mode 100644 frameworks/bridge/common/dom/dom_picker_view.h create mode 100644 frameworks/bridge/common/dom/dom_piece.cpp create mode 100644 frameworks/bridge/common/dom/dom_piece.h create mode 100644 frameworks/bridge/common/dom/dom_popup.cpp create mode 100644 frameworks/bridge/common/dom/dom_popup.h create mode 100644 frameworks/bridge/common/dom/dom_progress.cpp create mode 100644 frameworks/bridge/common/dom/dom_progress.h create mode 100644 frameworks/bridge/common/dom/dom_proxy.cpp create mode 100644 frameworks/bridge/common/dom/dom_proxy.h create mode 100644 frameworks/bridge/common/dom/dom_qrcode.cpp create mode 100644 frameworks/bridge/common/dom/dom_qrcode.h create mode 100644 frameworks/bridge/common/dom/dom_rating.cpp create mode 100644 frameworks/bridge/common/dom/dom_rating.h create mode 100644 frameworks/bridge/common/dom/dom_reflect_map.h create mode 100644 frameworks/bridge/common/dom/dom_refresh.cpp create mode 100644 frameworks/bridge/common/dom/dom_refresh.h create mode 100644 frameworks/bridge/common/dom/dom_search.cpp create mode 100644 frameworks/bridge/common/dom/dom_search.h create mode 100644 frameworks/bridge/common/dom/dom_select.cpp create mode 100644 frameworks/bridge/common/dom/dom_select.h create mode 100644 frameworks/bridge/common/dom/dom_slider.cpp create mode 100644 frameworks/bridge/common/dom/dom_slider.h create mode 100644 frameworks/bridge/common/dom/dom_span.cpp create mode 100644 frameworks/bridge/common/dom/dom_span.h create mode 100644 frameworks/bridge/common/dom/dom_stack.cpp create mode 100644 frameworks/bridge/common/dom/dom_stack.h create mode 100644 frameworks/bridge/common/dom/dom_stepper.cpp create mode 100644 frameworks/bridge/common/dom/dom_stepper.h create mode 100644 frameworks/bridge/common/dom/dom_stepper_item.cpp create mode 100644 frameworks/bridge/common/dom/dom_stepper_item.h create mode 100644 frameworks/bridge/common/dom/dom_svg.cpp create mode 100644 frameworks/bridge/common/dom/dom_svg.h create mode 100644 frameworks/bridge/common/dom/dom_svg_animate.cpp create mode 100644 frameworks/bridge/common/dom/dom_svg_animate.h create mode 100644 frameworks/bridge/common/dom/dom_svg_animate_motion.cpp create mode 100644 frameworks/bridge/common/dom/dom_svg_animate_motion.h create mode 100644 frameworks/bridge/common/dom/dom_svg_animate_transform.cpp create mode 100644 frameworks/bridge/common/dom/dom_svg_animate_transform.h create mode 100644 frameworks/bridge/common/dom/dom_svg_base.cpp create mode 100644 frameworks/bridge/common/dom/dom_svg_base.h create mode 100644 frameworks/bridge/common/dom/dom_svg_circle.cpp create mode 100644 frameworks/bridge/common/dom/dom_svg_circle.h create mode 100644 frameworks/bridge/common/dom/dom_svg_ellipse.cpp create mode 100644 frameworks/bridge/common/dom/dom_svg_ellipse.h create mode 100644 frameworks/bridge/common/dom/dom_svg_line.cpp create mode 100644 frameworks/bridge/common/dom/dom_svg_line.h create mode 100644 frameworks/bridge/common/dom/dom_svg_path.cpp create mode 100644 frameworks/bridge/common/dom/dom_svg_path.h create mode 100644 frameworks/bridge/common/dom/dom_svg_polygon.cpp create mode 100644 frameworks/bridge/common/dom/dom_svg_polygon.h create mode 100644 frameworks/bridge/common/dom/dom_svg_polyline.cpp create mode 100644 frameworks/bridge/common/dom/dom_svg_polyline.h create mode 100644 frameworks/bridge/common/dom/dom_svg_rect.cpp create mode 100644 frameworks/bridge/common/dom/dom_svg_rect.h create mode 100644 frameworks/bridge/common/dom/dom_svg_text.cpp create mode 100644 frameworks/bridge/common/dom/dom_svg_text.h create mode 100644 frameworks/bridge/common/dom/dom_svg_text_path.cpp create mode 100644 frameworks/bridge/common/dom/dom_svg_text_path.h create mode 100644 frameworks/bridge/common/dom/dom_svg_tspan.cpp create mode 100644 frameworks/bridge/common/dom/dom_svg_tspan.h create mode 100644 frameworks/bridge/common/dom/dom_swiper.cpp create mode 100644 frameworks/bridge/common/dom/dom_swiper.h create mode 100644 frameworks/bridge/common/dom/dom_switch.cpp create mode 100644 frameworks/bridge/common/dom/dom_switch.h create mode 100644 frameworks/bridge/common/dom/dom_tab_bar.cpp create mode 100644 frameworks/bridge/common/dom/dom_tab_bar.h create mode 100644 frameworks/bridge/common/dom/dom_tab_content.cpp create mode 100644 frameworks/bridge/common/dom/dom_tab_content.h create mode 100644 frameworks/bridge/common/dom/dom_tabs.cpp create mode 100644 frameworks/bridge/common/dom/dom_tabs.h create mode 100644 frameworks/bridge/common/dom/dom_text.cpp create mode 100644 frameworks/bridge/common/dom/dom_text.h create mode 100644 frameworks/bridge/common/dom/dom_textarea.cpp create mode 100644 frameworks/bridge/common/dom/dom_textarea.h create mode 100644 frameworks/bridge/common/dom/dom_toggle.cpp create mode 100644 frameworks/bridge/common/dom/dom_toggle.h create mode 100644 frameworks/bridge/common/dom/dom_tool_bar.cpp create mode 100644 frameworks/bridge/common/dom/dom_tool_bar.h create mode 100644 frameworks/bridge/common/dom/dom_tool_bar_item.cpp create mode 100644 frameworks/bridge/common/dom/dom_tool_bar_item.h create mode 100644 frameworks/bridge/common/dom/dom_type.cpp create mode 100644 frameworks/bridge/common/dom/dom_type.h create mode 100644 frameworks/bridge/common/dom/dom_video.cpp create mode 100644 frameworks/bridge/common/dom/dom_video.h create mode 100644 frameworks/bridge/common/dom/dom_web.cpp create mode 100644 frameworks/bridge/common/dom/dom_web.h create mode 100644 frameworks/bridge/common/dom/input/dom_button_util.cpp create mode 100644 frameworks/bridge/common/dom/input/dom_button_util.h create mode 100644 frameworks/bridge/common/dom/input/dom_checkbox_util.cpp create mode 100644 frameworks/bridge/common/dom/input/dom_checkbox_util.h create mode 100644 frameworks/bridge/common/dom/input/dom_radio_util.cpp create mode 100644 frameworks/bridge/common/dom/input/dom_radio_util.h create mode 100644 frameworks/bridge/common/dom/input/dom_textfield_util.cpp create mode 100644 frameworks/bridge/common/dom/input/dom_textfield_util.h create mode 100644 frameworks/bridge/common/inspector/inspect_button.cpp create mode 100644 frameworks/bridge/common/inspector/inspect_button.h create mode 100644 frameworks/bridge/common/inspector/inspect_canvas.cpp create mode 100644 frameworks/bridge/common/inspector/inspect_canvas.h create mode 100644 frameworks/bridge/common/inspector/inspect_chart.cpp create mode 100644 frameworks/bridge/common/inspector/inspect_chart.h create mode 100644 frameworks/bridge/common/inspector/inspect_dialog.cpp create mode 100644 frameworks/bridge/common/inspector/inspect_dialog.h create mode 100644 frameworks/bridge/common/inspector/inspect_div.cpp create mode 100644 frameworks/bridge/common/inspector/inspect_div.h create mode 100644 frameworks/bridge/common/inspector/inspect_divider.cpp create mode 100644 frameworks/bridge/common/inspector/inspect_divider.h create mode 100644 frameworks/bridge/common/inspector/inspect_image.cpp create mode 100644 frameworks/bridge/common/inspector/inspect_image.h create mode 100644 frameworks/bridge/common/inspector/inspect_image_animator.cpp create mode 100644 frameworks/bridge/common/inspector/inspect_image_animator.h create mode 100644 frameworks/bridge/common/inspector/inspect_input.cpp create mode 100644 frameworks/bridge/common/inspector/inspect_input.h create mode 100644 frameworks/bridge/common/inspector/inspect_label.cpp create mode 100644 frameworks/bridge/common/inspector/inspect_label.h create mode 100644 frameworks/bridge/common/inspector/inspect_list.cpp create mode 100644 frameworks/bridge/common/inspector/inspect_list.h create mode 100644 frameworks/bridge/common/inspector/inspect_list_item.cpp create mode 100644 frameworks/bridge/common/inspector/inspect_list_item.h create mode 100644 frameworks/bridge/common/inspector/inspect_list_item_group.cpp create mode 100644 frameworks/bridge/common/inspector/inspect_list_item_group.h create mode 100644 frameworks/bridge/common/inspector/inspect_marquee.cpp create mode 100644 frameworks/bridge/common/inspector/inspect_marquee.h create mode 100644 frameworks/bridge/common/inspector/inspect_menu.cpp create mode 100644 frameworks/bridge/common/inspector/inspect_menu.h create mode 100644 frameworks/bridge/common/inspector/inspect_node.cpp create mode 100644 frameworks/bridge/common/inspector/inspect_node.h create mode 100644 frameworks/bridge/common/inspector/inspect_option.cpp create mode 100644 frameworks/bridge/common/inspector/inspect_option.h create mode 100644 frameworks/bridge/common/inspector/inspect_picker.cpp create mode 100644 frameworks/bridge/common/inspector/inspect_picker.h create mode 100644 frameworks/bridge/common/inspector/inspect_picker_view.cpp create mode 100644 frameworks/bridge/common/inspector/inspect_picker_view.h create mode 100644 frameworks/bridge/common/inspector/inspect_popup.cpp create mode 100644 frameworks/bridge/common/inspector/inspect_popup.h create mode 100644 frameworks/bridge/common/inspector/inspect_progress.cpp create mode 100644 frameworks/bridge/common/inspector/inspect_progress.h create mode 100644 frameworks/bridge/common/inspector/inspect_rating.cpp create mode 100644 frameworks/bridge/common/inspector/inspect_rating.h create mode 100644 frameworks/bridge/common/inspector/inspect_refresh.cpp create mode 100644 frameworks/bridge/common/inspector/inspect_refresh.h create mode 100644 frameworks/bridge/common/inspector/inspect_search.cpp create mode 100644 frameworks/bridge/common/inspector/inspect_search.h create mode 100644 frameworks/bridge/common/inspector/inspect_select.cpp create mode 100644 frameworks/bridge/common/inspector/inspect_select.h create mode 100644 frameworks/bridge/common/inspector/inspect_slider.cpp create mode 100644 frameworks/bridge/common/inspector/inspect_slider.h create mode 100644 frameworks/bridge/common/inspector/inspect_span.cpp create mode 100644 frameworks/bridge/common/inspector/inspect_span.h create mode 100644 frameworks/bridge/common/inspector/inspect_stack.cpp create mode 100644 frameworks/bridge/common/inspector/inspect_stack.h create mode 100644 frameworks/bridge/common/inspector/inspect_swiper.cpp create mode 100644 frameworks/bridge/common/inspector/inspect_swiper.h create mode 100644 frameworks/bridge/common/inspector/inspect_switch.cpp create mode 100644 frameworks/bridge/common/inspector/inspect_switch.h create mode 100644 frameworks/bridge/common/inspector/inspect_tab_bar.cpp create mode 100644 frameworks/bridge/common/inspector/inspect_tab_bar.h create mode 100644 frameworks/bridge/common/inspector/inspect_tab_content.cpp create mode 100644 frameworks/bridge/common/inspector/inspect_tab_content.h create mode 100644 frameworks/bridge/common/inspector/inspect_tabs.cpp create mode 100644 frameworks/bridge/common/inspector/inspect_tabs.h create mode 100644 frameworks/bridge/common/inspector/inspect_text.cpp create mode 100644 frameworks/bridge/common/inspector/inspect_text.h create mode 100644 frameworks/bridge/common/inspector/inspect_textarea.cpp create mode 100644 frameworks/bridge/common/inspector/inspect_textarea.h create mode 100644 frameworks/bridge/common/inspector/inspect_video.cpp create mode 100644 frameworks/bridge/common/inspector/inspect_video.h create mode 100644 frameworks/bridge/common/inspector/inspector_client.cpp create mode 100644 frameworks/bridge/common/inspector/inspector_client.h create mode 100644 frameworks/bridge/common/inspector/js_inspector_manager.cpp create mode 100644 frameworks/bridge/common/inspector/js_inspector_manager.h create mode 100644 frameworks/bridge/common/manifest/manifest_appinfo.cpp create mode 100644 frameworks/bridge/common/manifest/manifest_appinfo.h create mode 100644 frameworks/bridge/common/manifest/manifest_parser.cpp create mode 100644 frameworks/bridge/common/manifest/manifest_parser.h create mode 100644 frameworks/bridge/common/manifest/manifest_router.cpp create mode 100644 frameworks/bridge/common/manifest/manifest_router.h create mode 100644 frameworks/bridge/common/manifest/manifest_widget.cpp create mode 100644 frameworks/bridge/common/manifest/manifest_widget.h create mode 100644 frameworks/bridge/common/manifest/manifest_window.cpp create mode 100644 frameworks/bridge/common/manifest/manifest_window.h create mode 100644 frameworks/bridge/common/media_query/media_query_info.cpp create mode 100644 frameworks/bridge/common/media_query/media_query_info.h create mode 100644 frameworks/bridge/common/utils/class_utils.h create mode 100644 frameworks/bridge/common/utils/function_traits.h create mode 100644 frameworks/bridge/common/utils/page_id_pool.h create mode 100644 frameworks/bridge/common/utils/source_map.cpp create mode 100644 frameworks/bridge/common/utils/source_map.h create mode 100644 frameworks/bridge/common/utils/utils.cpp create mode 100644 frameworks/bridge/common/utils/utils.h create mode 100644 frameworks/bridge/declarative_frontend/declarative_frontend.cpp create mode 100644 frameworks/bridge/declarative_frontend/declarative_frontend.h create mode 100644 frameworks/bridge/declarative_frontend/engine/bindings.h create mode 100644 frameworks/bridge/declarative_frontend/engine/bindings.inl create mode 100644 frameworks/bridge/declarative_frontend/engine/bindings_defines.h create mode 100644 frameworks/bridge/declarative_frontend/engine/bindings_implementation.cpp create mode 100644 frameworks/bridge/declarative_frontend/engine/bindings_implementation.h create mode 100644 frameworks/bridge/declarative_frontend/engine/bindings_implementation.inl create mode 100644 frameworks/bridge/declarative_frontend/engine/declarative_engine_loader.cpp create mode 100644 frameworks/bridge/declarative_frontend/engine/declarative_engine_loader.h create mode 100644 frameworks/bridge/declarative_frontend/engine/js_object_template.h create mode 100644 frameworks/bridge/declarative_frontend/engine/js_object_template.inl create mode 100644 frameworks/bridge/declarative_frontend/engine/js_view_listeners.cpp create mode 100644 frameworks/bridge/declarative_frontend/engine/js_view_listeners.h create mode 100644 frameworks/bridge/declarative_frontend/engine/jsproxyClass.js create mode 100644 frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_click_function.cpp create mode 100644 frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_click_function.h create mode 100644 frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_foreach_function.cpp create mode 100644 frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_foreach_function.h create mode 100644 frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_function.cpp create mode 100644 frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_function.h create mode 100644 frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_touch_function.cpp create mode 100644 frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_touch_function.h create mode 100644 frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_view_function.cpp create mode 100644 frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_view_function.h create mode 100644 frameworks/bridge/declarative_frontend/engine/quickjs/qjs_bindings.cpp create mode 100644 frameworks/bridge/declarative_frontend/engine/quickjs/qjs_bindings.h create mode 100644 frameworks/bridge/declarative_frontend/engine/quickjs/qjs_bindings.inl create mode 100644 frameworks/bridge/declarative_frontend/engine/quickjs/qjs_declarative_engine.cpp create mode 100644 frameworks/bridge/declarative_frontend/engine/quickjs/qjs_declarative_engine.h create mode 100644 frameworks/bridge/declarative_frontend/engine/quickjs/qjs_declarative_engine_instance.cpp create mode 100644 frameworks/bridge/declarative_frontend/engine/quickjs/qjs_declarative_engine_instance.h create mode 100644 frameworks/bridge/declarative_frontend/engine/quickjs/qjs_function_list_entries_container.cpp create mode 100644 frameworks/bridge/declarative_frontend/engine/quickjs/qjs_function_list_entries_container.h create mode 100644 frameworks/bridge/declarative_frontend/engine/quickjs/qjs_helpers.cpp create mode 100644 frameworks/bridge/declarative_frontend/engine/quickjs/qjs_helpers.h create mode 100644 frameworks/bridge/declarative_frontend/engine/quickjs/qjs_object_template.cpp create mode 100644 frameworks/bridge/declarative_frontend/engine/quickjs/qjs_object_template.h create mode 100644 frameworks/bridge/declarative_frontend/engine/quickjs/qjs_object_template.inl create mode 100644 frameworks/bridge/declarative_frontend/engine/quickjs/qjs_value_conversions.h create mode 100644 frameworks/bridge/declarative_frontend/engine/quickjs/qjs_view_register.cpp create mode 100644 frameworks/bridge/declarative_frontend/frontend_delegate_declarative.cpp create mode 100644 frameworks/bridge/declarative_frontend/frontend_delegate_declarative.h create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_animation.cpp create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_animation.h create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_button.cpp create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_button.h create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_column.cpp create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_column.h create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_container_base.cpp create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_container_base.h create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_customview_base.cpp create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_customview_base.h create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_divider.cpp create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_divider.h create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_flex.h create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_flex.inl create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_foreach.cpp create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_foreach.h create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_grid.cpp create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_grid.h create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_grid_item.cpp create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_grid_item.h create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_image.cpp create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_image.h create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_interactable_view.cpp create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_interactable_view.h create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_list.cpp create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_list.h create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_list_item.cpp create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_list_item.h create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_navigator.cpp create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_navigator.h create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_pan_handler.cpp create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_pan_handler.h create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_row.cpp create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_row.h create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_sliding_panel.cpp create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_sliding_panel.h create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_stack.cpp create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_stack.h create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_swiper.cpp create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_swiper.h create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_text.cpp create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_text.h create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_touch_handler.cpp create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_touch_handler.h create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_view.cpp create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_view.h create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_view_abstract.cpp create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_view_abstract.h create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_view_abstract.inl create mode 100644 frameworks/bridge/declarative_frontend/jsview/js_view_register.h create mode 100644 frameworks/bridge/js_frontend/engine/common/base_animation_bridge.cpp create mode 100644 frameworks/bridge/js_frontend/engine/common/base_animation_bridge.h create mode 100644 frameworks/bridge/js_frontend/engine/common/base_canvas_bridge.h create mode 100644 frameworks/bridge/js_frontend/engine/common/group_js_bridge.h create mode 100644 frameworks/bridge/js_frontend/engine/common/js_api_perf.cpp create mode 100644 frameworks/bridge/js_frontend/engine/common/js_api_perf.h create mode 100644 frameworks/bridge/js_frontend/engine/common/js_constants.cpp create mode 100644 frameworks/bridge/js_frontend/engine/common/js_constants.h create mode 100644 frameworks/bridge/js_frontend/engine/common/js_engine copy.h create mode 100644 frameworks/bridge/js_frontend/engine/common/js_engine.h create mode 100644 frameworks/bridge/js_frontend/engine/common/js_engine_loader.cpp create mode 100644 frameworks/bridge/js_frontend/engine/common/js_engine_loader.h create mode 100644 frameworks/bridge/js_frontend/engine/common/qjs_group_js_bridge.cpp create mode 100644 frameworks/bridge/js_frontend/engine/common/runtime_constants.h create mode 100644 frameworks/bridge/js_frontend/engine/quickjs/animation_bridge.cpp create mode 100644 frameworks/bridge/js_frontend/engine/quickjs/animation_bridge.h create mode 100644 frameworks/bridge/js_frontend/engine/quickjs/badge_bridge.cpp create mode 100644 frameworks/bridge/js_frontend/engine/quickjs/badge_bridge.h create mode 100644 frameworks/bridge/js_frontend/engine/quickjs/canvas_bridge.cpp create mode 100644 frameworks/bridge/js_frontend/engine/quickjs/canvas_bridge.h create mode 100644 frameworks/bridge/js_frontend/engine/quickjs/chart_bridge.cpp create mode 100644 frameworks/bridge/js_frontend/engine/quickjs/chart_bridge.h create mode 100644 frameworks/bridge/js_frontend/engine/quickjs/clock_bridge.cpp create mode 100644 frameworks/bridge/js_frontend/engine/quickjs/clock_bridge.h create mode 100644 frameworks/bridge/js_frontend/engine/quickjs/component_api_bridge.cpp create mode 100644 frameworks/bridge/js_frontend/engine/quickjs/component_api_bridge.h create mode 100644 frameworks/bridge/js_frontend/engine/quickjs/image_animator_bridge.cpp create mode 100644 frameworks/bridge/js_frontend/engine/quickjs/image_animator_bridge.h create mode 100644 frameworks/bridge/js_frontend/engine/quickjs/intl/intl.h create mode 100644 frameworks/bridge/js_frontend/engine/quickjs/intl/intl_locales.h create mode 100644 frameworks/bridge/js_frontend/engine/quickjs/intl/intl_support.cpp create mode 100644 frameworks/bridge/js_frontend/engine/quickjs/intl/intl_support.h create mode 100644 frameworks/bridge/js_frontend/engine/quickjs/list_bridge.cpp create mode 100644 frameworks/bridge/js_frontend/engine/quickjs/list_bridge.h create mode 100644 frameworks/bridge/js_frontend/engine/quickjs/qjs_engine.cpp create mode 100644 frameworks/bridge/js_frontend/engine/quickjs/qjs_engine.h create mode 100644 frameworks/bridge/js_frontend/engine/quickjs/qjs_engine_loader.cpp create mode 100644 frameworks/bridge/js_frontend/engine/quickjs/qjs_engine_loader.h create mode 100644 frameworks/bridge/js_frontend/engine/quickjs/qjs_group_js_bridge.cpp create mode 100644 frameworks/bridge/js_frontend/engine/quickjs/qjs_group_js_bridge.h create mode 100644 frameworks/bridge/js_frontend/engine/quickjs/qjs_utils.cpp create mode 100644 frameworks/bridge/js_frontend/engine/quickjs/qjs_utils.h create mode 100644 frameworks/bridge/js_frontend/engine/quickjs/stepper_bridge.cpp create mode 100644 frameworks/bridge/js_frontend/engine/quickjs/stepper_bridge.h create mode 100644 frameworks/bridge/js_frontend/frontend_delegate.h create mode 100644 frameworks/bridge/js_frontend/frontend_delegate_impl.cpp create mode 100644 frameworks/bridge/js_frontend/frontend_delegate_impl.h create mode 100644 frameworks/bridge/js_frontend/js_ace_page.cpp create mode 100644 frameworks/bridge/js_frontend/js_ace_page.h create mode 100644 frameworks/bridge/js_frontend/js_command.cpp create mode 100644 frameworks/bridge/js_frontend/js_command.h create mode 100644 frameworks/bridge/js_frontend/js_frontend.cpp create mode 100644 frameworks/bridge/js_frontend/js_frontend.h create mode 100644 frameworks/bridge/test/BUILD.gn create mode 100644 frameworks/bridge/test/unittest/cardfrontend/card_test_factory.cpp create mode 100644 frameworks/bridge/test/unittest/cardfrontend/card_test_factory.h create mode 100644 frameworks/bridge/test/unittest/cardfrontend/dombutton/BUILD.gn create mode 100644 frameworks/bridge/test/unittest/cardfrontend/dombutton/dom_button_test.cpp create mode 100644 frameworks/bridge/test/unittest/cardfrontend/domchart/dom_chart_test.cpp create mode 100644 frameworks/bridge/test/unittest/cardfrontend/domclock/BUILD.gn create mode 100644 frameworks/bridge/test/unittest/cardfrontend/domclock/dom_clock_test.cpp create mode 100644 frameworks/bridge/test/unittest/cardfrontend/domdiv/BUILD.gn create mode 100644 frameworks/bridge/test/unittest/cardfrontend/domdiv/dom_div_test.cpp create mode 100644 frameworks/bridge/test/unittest/cardfrontend/domimage/BUILD.gn create mode 100644 frameworks/bridge/test/unittest/cardfrontend/domimage/dom_image_test.cpp create mode 100644 frameworks/bridge/test/unittest/cardfrontend/domprogress/BUILD.gn create mode 100644 frameworks/bridge/test/unittest/cardfrontend/domprogress/dom_progress_test.cpp create mode 100644 frameworks/bridge/test/unittest/cardfrontend/domstack/BUILD.gn create mode 100644 frameworks/bridge/test/unittest/cardfrontend/domstack/dom_stack_test.cpp create mode 100644 frameworks/bridge/test/unittest/cardfrontend/domtext/BUILD.gn create mode 100644 frameworks/bridge/test/unittest/cardfrontend/domtext/dom_text_test.cpp create mode 100644 frameworks/bridge/test/unittest/cardfrontend/frontend/BUILD.gn create mode 100644 frameworks/bridge/test/unittest/cardfrontend/frontend/card_frontend_test.cpp create mode 100644 frameworks/bridge/test/unittest/cardfrontend/mediaquery/BUILD.gn create mode 100644 frameworks/bridge/test/unittest/cardfrontend/mediaquery/media_query_test.cpp create mode 100644 frameworks/bridge/test/unittest/jsfrontend/animation/BUILD.gn create mode 100644 frameworks/bridge/test/unittest/jsfrontend/animation/dom_animation_test.cpp create mode 100644 frameworks/bridge/test/unittest/jsfrontend/codec/BUILD.gn create mode 100644 frameworks/bridge/test/unittest/jsfrontend/codec/group_message_codec_test.cpp create mode 100644 frameworks/bridge/test/unittest/jsfrontend/dom_mock.h create mode 100644 frameworks/bridge/test/unittest/jsfrontend/dom_node_factory.cpp create mode 100644 frameworks/bridge/test/unittest/jsfrontend/dom_node_factory.h create mode 100644 frameworks/bridge/test/unittest/jsfrontend/dom_test_constants.h create mode 100644 frameworks/bridge/test/unittest/jsfrontend/dombutton/BUILD.gn create mode 100644 frameworks/bridge/test/unittest/jsfrontend/dombutton/dom_button_test.cpp create mode 100644 frameworks/bridge/test/unittest/jsfrontend/domdiv/BUILD.gn create mode 100644 frameworks/bridge/test/unittest/jsfrontend/domdiv/dom_div_test.cpp create mode 100644 frameworks/bridge/test/unittest/jsfrontend/domdivider/BUILD.gn create mode 100644 frameworks/bridge/test/unittest/jsfrontend/domdivider/dom_divider_test.cpp create mode 100644 frameworks/bridge/test/unittest/jsfrontend/domimage/BUILD.gn create mode 100644 frameworks/bridge/test/unittest/jsfrontend/domimage/dom_image_test.cpp create mode 100644 frameworks/bridge/test/unittest/jsfrontend/domimageanimator/BUILD.gn create mode 100644 frameworks/bridge/test/unittest/jsfrontend/domimageanimator/dom_image_animator_test.cpp create mode 100644 frameworks/bridge/test/unittest/jsfrontend/dominput/BUILD.gn create mode 100644 frameworks/bridge/test/unittest/jsfrontend/dominput/dom_input_test.cpp create mode 100644 frameworks/bridge/test/unittest/jsfrontend/domlabel/BUILD.gn create mode 100644 frameworks/bridge/test/unittest/jsfrontend/domlabel/dom_label_test.cpp create mode 100644 frameworks/bridge/test/unittest/jsfrontend/domlist/BUILD.gn create mode 100644 frameworks/bridge/test/unittest/jsfrontend/domlist/dom_list_test.cpp create mode 100644 frameworks/bridge/test/unittest/jsfrontend/domnode/BUILD.gn create mode 100644 frameworks/bridge/test/unittest/jsfrontend/domnode/dom_node_test.cpp create mode 100644 frameworks/bridge/test/unittest/jsfrontend/dompiece/BUILD.gn create mode 100644 frameworks/bridge/test/unittest/jsfrontend/dompiece/dom_piece_test.cpp create mode 100644 frameworks/bridge/test/unittest/jsfrontend/dompopup/BUILD.gn create mode 100644 frameworks/bridge/test/unittest/jsfrontend/dompopup/dom_popup_test.cpp create mode 100644 frameworks/bridge/test/unittest/jsfrontend/domrating/BUILD.gn create mode 100644 frameworks/bridge/test/unittest/jsfrontend/domrating/dom_rating_test.cpp create mode 100644 frameworks/bridge/test/unittest/jsfrontend/domrefresh/BUILD.gn create mode 100644 frameworks/bridge/test/unittest/jsfrontend/domrefresh/dom_refresh_test.cpp create mode 100644 frameworks/bridge/test/unittest/jsfrontend/domsearch/BUILD.gn create mode 100644 frameworks/bridge/test/unittest/jsfrontend/domsearch/dom_search_test.cpp create mode 100644 frameworks/bridge/test/unittest/jsfrontend/domspan/BUILD.gn create mode 100644 frameworks/bridge/test/unittest/jsfrontend/domspan/dom_span_test.cpp create mode 100644 frameworks/bridge/test/unittest/jsfrontend/domsvg/BUILD.gn create mode 100644 frameworks/bridge/test/unittest/jsfrontend/domsvg/dom_svg_test.cpp create mode 100644 frameworks/bridge/test/unittest/jsfrontend/domsvgtext/BUILD.gn create mode 100644 frameworks/bridge/test/unittest/jsfrontend/domsvgtext/dom_svg_text_test.cpp create mode 100644 frameworks/bridge/test/unittest/jsfrontend/domtab/BUILD.gn create mode 100644 frameworks/bridge/test/unittest/jsfrontend/domtab/dom_tab_test.cpp create mode 100644 frameworks/bridge/test/unittest/jsfrontend/domtext/BUILD.gn create mode 100644 frameworks/bridge/test/unittest/jsfrontend/domtext/dom_text_test.cpp create mode 100644 frameworks/bridge/test/unittest/jsfrontend/domtextarea/BUILD.gn create mode 100644 frameworks/bridge/test/unittest/jsfrontend/domtextarea/dom_textarea_test.cpp create mode 100644 frameworks/bridge/test/unittest/jsfrontend/event/BUILD.gn create mode 100644 frameworks/bridge/test/unittest/jsfrontend/event/common_event_test.cpp create mode 100644 frameworks/bridge/test/unittest/jsfrontend/manifest/BUILD.gn create mode 100644 frameworks/bridge/test/unittest/jsfrontend/manifest/manifest_window_test.cpp create mode 100644 frameworks/bridge/test/unittest/jsfrontend/marquee/BUILD.gn create mode 100644 frameworks/bridge/test/unittest/jsfrontend/marquee/dom_marquee_test.cpp create mode 100644 frameworks/bridge/test/unittest/jsfrontend/progress/BUILD.gn create mode 100644 frameworks/bridge/test/unittest/jsfrontend/progress/dom_progress_test.cpp create mode 100644 frameworks/bridge/test/unittest/jsfrontend/slider/BUILD.gn create mode 100644 frameworks/bridge/test/unittest/jsfrontend/slider/dom_slider_test.cpp create mode 100644 frameworks/bridge/test/unittest/jsfrontend/swiper/BUILD.gn create mode 100644 frameworks/bridge/test/unittest/jsfrontend/swiper/dom_swiper_test.cpp create mode 100644 frameworks/bridge/test/unittest/jsfrontend/switch/BUILD.gn create mode 100644 frameworks/bridge/test/unittest/jsfrontend/switch/dom_switch_test.cpp create mode 100644 frameworks/bridge/test/unittest/jsfrontend/utils/BUILD.gn create mode 100644 frameworks/bridge/test/unittest/jsfrontend/utils/js_utils_test.cpp create mode 100644 frameworks/bridge/test/unittest/jsfrontend/video/BUILD.gn create mode 100644 frameworks/bridge/test/unittest/jsfrontend/video/dom_video_test.cpp create mode 100644 frameworks/core/BUILD.gn create mode 100644 frameworks/core/accessibility/BUILD.gn create mode 100644 frameworks/core/accessibility/accessibility_manager.h create mode 100644 frameworks/core/accessibility/accessibility_node.cpp create mode 100644 frameworks/core/accessibility/accessibility_node.h create mode 100644 frameworks/core/accessibility/accessibility_utils.cpp create mode 100644 frameworks/core/accessibility/accessibility_utils.h create mode 100644 frameworks/core/animation/animation.h create mode 100644 frameworks/core/animation/animation_pub.h create mode 100644 frameworks/core/animation/animator.cpp create mode 100644 frameworks/core/animation/animator.h create mode 100644 frameworks/core/animation/anticipate_curve.cpp create mode 100644 frameworks/core/animation/anticipate_curve.h create mode 100644 frameworks/core/animation/bilateral_spring_adapter.cpp create mode 100644 frameworks/core/animation/bilateral_spring_adapter.h create mode 100644 frameworks/core/animation/bilateral_spring_node.cpp create mode 100644 frameworks/core/animation/bilateral_spring_node.h create mode 100644 frameworks/core/animation/card_transition_controller.cpp create mode 100644 frameworks/core/animation/card_transition_controller.h create mode 100644 frameworks/core/animation/cubic_curve.cpp create mode 100644 frameworks/core/animation/cubic_curve.h create mode 100644 frameworks/core/animation/curve.h create mode 100644 frameworks/core/animation/curve_animation.h create mode 100644 frameworks/core/animation/curves.cpp create mode 100644 frameworks/core/animation/curves.h create mode 100644 frameworks/core/animation/evaluator.h create mode 100644 frameworks/core/animation/flush_event.h create mode 100644 frameworks/core/animation/friction_motion.cpp create mode 100644 frameworks/core/animation/friction_motion.h create mode 100644 frameworks/core/animation/interpolator.h create mode 100644 frameworks/core/animation/keyframe.h create mode 100644 frameworks/core/animation/keyframe_animation.h create mode 100644 frameworks/core/animation/motion.h create mode 100644 frameworks/core/animation/page_transition_listener.h create mode 100644 frameworks/core/animation/param_transfer.h create mode 100644 frameworks/core/animation/picture_animation.h create mode 100644 frameworks/core/animation/property_animatable.h create mode 100644 frameworks/core/animation/schedule_task.h create mode 100644 frameworks/core/animation/scheduler.cpp create mode 100644 frameworks/core/animation/scheduler.h create mode 100644 frameworks/core/animation/scroll_motion.cpp create mode 100644 frameworks/core/animation/scroll_motion.h create mode 100644 frameworks/core/animation/shared_transition_controller.cpp create mode 100644 frameworks/core/animation/shared_transition_controller.h create mode 100644 frameworks/core/animation/shared_transition_effect.cpp create mode 100644 frameworks/core/animation/shared_transition_effect.h create mode 100644 frameworks/core/animation/simple_spring_adapter.cpp create mode 100644 frameworks/core/animation/simple_spring_adapter.h create mode 100644 frameworks/core/animation/simple_spring_chain.cpp create mode 100644 frameworks/core/animation/simple_spring_chain.h create mode 100644 frameworks/core/animation/simple_spring_node.cpp create mode 100644 frameworks/core/animation/simple_spring_node.h create mode 100644 frameworks/core/animation/spring_adapter.h create mode 100644 frameworks/core/animation/spring_animation.cpp create mode 100644 frameworks/core/animation/spring_animation.h create mode 100644 frameworks/core/animation/spring_model.cpp create mode 100644 frameworks/core/animation/spring_model.h create mode 100644 frameworks/core/animation/spring_motion.cpp create mode 100644 frameworks/core/animation/spring_motion.h create mode 100644 frameworks/core/animation/spring_node.h create mode 100644 frameworks/core/animation/spring_node_listenable.h create mode 100644 frameworks/core/animation/status_listener.h create mode 100644 frameworks/core/animation/svg_animate.cpp create mode 100644 frameworks/core/animation/svg_animate.h create mode 100644 frameworks/core/animation/test/BUILD.gn create mode 100644 frameworks/core/animation/test/unittest/framework/BUILD.gn create mode 100644 frameworks/core/animation/test/unittest/framework/animation_framework_test.cpp create mode 100644 frameworks/core/animation/test/unittest/mock/animation_mock.cpp create mode 100644 frameworks/core/animation/test/unittest/mock/animation_mock.h create mode 100644 frameworks/core/animation/test/unittest/mock/animation_test_utils.h create mode 100644 frameworks/core/animation/test/unittest/mock/spring_chain_item.h create mode 100644 frameworks/core/animation/test/unittest/spring_chain/BUILD.gn create mode 100644 frameworks/core/animation/test/unittest/spring_chain/spring_chain_test.cpp create mode 100644 frameworks/core/animation/test/unittest/svg_animate/BUILD.gn create mode 100644 frameworks/core/animation/test/unittest/svg_animate/svg_animate_test.cpp create mode 100644 frameworks/core/animation/time_event.h create mode 100644 frameworks/core/common/ace_application_info.cpp create mode 100644 frameworks/core/common/ace_application_info.h create mode 100644 frameworks/core/common/ace_engine.cpp create mode 100644 frameworks/core/common/ace_engine.h create mode 100644 frameworks/core/common/ace_page.h create mode 100644 frameworks/core/common/ace_view.h create mode 100644 frameworks/core/common/clipboard/clipboard.h create mode 100644 frameworks/core/common/clipboard/clipboard_interface.h create mode 100644 frameworks/core/common/clipboard/clipboard_proxy.cpp create mode 100644 frameworks/core/common/clipboard/clipboard_proxy.h create mode 100644 frameworks/core/common/container.h create mode 100644 frameworks/core/common/draw_delegate.h create mode 100644 frameworks/core/common/event_manager.cpp create mode 100644 frameworks/core/common/event_manager.h create mode 100644 frameworks/core/common/focus_animation_manager.cpp create mode 100644 frameworks/core/common/focus_animation_manager.h create mode 100644 frameworks/core/common/font_loader.cpp create mode 100644 frameworks/core/common/font_loader.h create mode 100644 frameworks/core/common/font_manager.cpp create mode 100644 frameworks/core/common/font_manager.h create mode 100644 frameworks/core/common/frontend.h create mode 100644 frameworks/core/common/ime/constant.h create mode 100644 frameworks/core/common/ime/text_edit_controller.h create mode 100644 frameworks/core/common/ime/text_editing_value.cpp create mode 100644 frameworks/core/common/ime/text_editing_value.h create mode 100644 frameworks/core/common/ime/text_input.h create mode 100644 frameworks/core/common/ime/text_input_action.cpp create mode 100644 frameworks/core/common/ime/text_input_action.h create mode 100644 frameworks/core/common/ime/text_input_client.h create mode 100644 frameworks/core/common/ime/text_input_configuration.cpp create mode 100644 frameworks/core/common/ime/text_input_configuration.h create mode 100644 frameworks/core/common/ime/text_input_connection.cpp create mode 100644 frameworks/core/common/ime/text_input_connection.h create mode 100644 frameworks/core/common/ime/text_input_formatter.cpp create mode 100644 frameworks/core/common/ime/text_input_formatter.h create mode 100644 frameworks/core/common/ime/text_input_proxy.cpp create mode 100644 frameworks/core/common/ime/text_input_proxy.h create mode 100644 frameworks/core/common/ime/text_input_type.cpp create mode 100644 frameworks/core/common/ime/text_input_type.h create mode 100644 frameworks/core/common/ime/text_range.h create mode 100644 frameworks/core/common/ime/text_selection.h create mode 100644 frameworks/core/common/js_message_dispatcher.h create mode 100644 frameworks/core/common/manager_interface.h create mode 100644 frameworks/core/common/message_bridge.h create mode 100644 frameworks/core/common/message_dispatcher.h create mode 100644 frameworks/core/common/page_scroller.cpp create mode 100644 frameworks/core/common/page_scroller.h create mode 100644 frameworks/core/common/platform_bridge.cpp create mode 100644 frameworks/core/common/platform_bridge.h create mode 100644 frameworks/core/common/platform_res_register.h create mode 100644 frameworks/core/common/platform_window.h create mode 100644 frameworks/core/common/text_field_manager.cpp create mode 100644 frameworks/core/common/text_field_manager.h create mode 100644 frameworks/core/common/vibrator/vibrator.h create mode 100644 frameworks/core/common/vibrator/vibrator_interface.h create mode 100644 frameworks/core/common/vibrator/vibrator_proxy.cpp create mode 100644 frameworks/core/common/vibrator/vibrator_proxy.h create mode 100644 frameworks/core/common/watch_dog.cpp create mode 100644 frameworks/core/common/watch_dog.h create mode 100644 frameworks/core/common/window.cpp create mode 100644 frameworks/core/common/window.h create mode 100644 frameworks/core/components/align/BUILD.gn create mode 100644 frameworks/core/components/align/align_component.cpp create mode 100644 frameworks/core/components/align/align_component.h create mode 100644 frameworks/core/components/align/render_align.cpp create mode 100644 frameworks/core/components/align/render_align.h create mode 100644 frameworks/core/components/arc/BUILD.gn create mode 100644 frameworks/core/components/arc/arc_component.cpp create mode 100644 frameworks/core/components/arc/arc_component.h create mode 100644 frameworks/core/components/arc/arc_element.cpp create mode 100644 frameworks/core/components/arc/arc_element.h create mode 100644 frameworks/core/components/arc/flutter_render_arc.cpp create mode 100644 frameworks/core/components/arc/flutter_render_arc.h create mode 100644 frameworks/core/components/arc/render_arc.cpp create mode 100644 frameworks/core/components/arc/render_arc.h create mode 100644 frameworks/core/components/badge/BUILD.gn create mode 100644 frameworks/core/components/badge/badge_component.cpp create mode 100644 frameworks/core/components/badge/badge_component.h create mode 100644 frameworks/core/components/badge/badge_element.h create mode 100644 frameworks/core/components/badge/badge_theme.h create mode 100644 frameworks/core/components/badge/flutter_render_badge.cpp create mode 100644 frameworks/core/components/badge/flutter_render_badge.h create mode 100644 frameworks/core/components/badge/render_badge.cpp create mode 100644 frameworks/core/components/badge/render_badge.h create mode 100644 frameworks/core/components/box/BUILD.gn create mode 100644 frameworks/core/components/box/box_base_component.cpp create mode 100644 frameworks/core/components/box/box_base_component.h create mode 100644 frameworks/core/components/box/box_base_element.cpp create mode 100644 frameworks/core/components/box/box_base_element.h create mode 100644 frameworks/core/components/box/box_component.cpp create mode 100644 frameworks/core/components/box/box_component.h create mode 100644 frameworks/core/components/box/box_element.cpp create mode 100644 frameworks/core/components/box/box_element.h create mode 100644 frameworks/core/components/box/flutter_render_box.cpp create mode 100644 frameworks/core/components/box/flutter_render_box.h create mode 100644 frameworks/core/components/box/flutter_render_box_base.cpp create mode 100644 frameworks/core/components/box/flutter_render_box_base.h create mode 100644 frameworks/core/components/box/render_box.cpp create mode 100644 frameworks/core/components/box/render_box.h create mode 100644 frameworks/core/components/box/render_box_base.cpp create mode 100644 frameworks/core/components/box/render_box_base.h create mode 100644 frameworks/core/components/bubble/BUILD.gn create mode 100644 frameworks/core/components/bubble/bubble_component.cpp create mode 100644 frameworks/core/components/bubble/bubble_component.h create mode 100644 frameworks/core/components/bubble/bubble_element.cpp create mode 100644 frameworks/core/components/bubble/bubble_element.h create mode 100644 frameworks/core/components/bubble/flutter_render_bubble.cpp create mode 100644 frameworks/core/components/bubble/flutter_render_bubble.h create mode 100644 frameworks/core/components/bubble/render_bubble.cpp create mode 100644 frameworks/core/components/bubble/render_bubble.h create mode 100644 frameworks/core/components/button/BUILD.gn create mode 100644 frameworks/core/components/button/button_component.cpp create mode 100644 frameworks/core/components/button/button_component.h create mode 100644 frameworks/core/components/button/button_element.cpp create mode 100644 frameworks/core/components/button/button_element.h create mode 100644 frameworks/core/components/button/button_theme.h create mode 100644 frameworks/core/components/button/flutter_render_button.cpp create mode 100644 frameworks/core/components/button/flutter_render_button.h create mode 100644 frameworks/core/components/button/render_button.cpp create mode 100644 frameworks/core/components/button/render_button.h create mode 100644 frameworks/core/components/calendar/BUILD.gn create mode 100644 frameworks/core/components/calendar/calendar_component.cpp create mode 100644 frameworks/core/components/calendar/calendar_component.h create mode 100644 frameworks/core/components/calendar/calendar_data_adapter.cpp create mode 100644 frameworks/core/components/calendar/calendar_data_adapter.h create mode 100644 frameworks/core/components/calendar/calendar_element.cpp create mode 100644 frameworks/core/components/calendar/calendar_element.h create mode 100644 frameworks/core/components/calendar/calendar_theme.h create mode 100644 frameworks/core/components/calendar/flutter_render_calendar.cpp create mode 100644 frameworks/core/components/calendar/flutter_render_calendar.h create mode 100644 frameworks/core/components/calendar/focusable_grid.cpp create mode 100644 frameworks/core/components/calendar/focusable_grid.h create mode 100644 frameworks/core/components/calendar/render_calendar.cpp create mode 100644 frameworks/core/components/calendar/render_calendar.h create mode 100644 frameworks/core/components/camera/BUILD.gn create mode 100644 frameworks/core/components/camera/camera.cpp create mode 100644 frameworks/core/components/camera/camera.h create mode 100644 frameworks/core/components/camera/camera_component.cpp create mode 100644 frameworks/core/components/camera/camera_component.h create mode 100644 frameworks/core/components/camera/camera_element.cpp create mode 100644 frameworks/core/components/camera/camera_element.h create mode 100644 frameworks/core/components/camera/camera_theme.h create mode 100644 frameworks/core/components/chart/BUILD.gn create mode 100644 frameworks/core/components/chart/chart_component.cpp create mode 100644 frameworks/core/components/chart/chart_component.h create mode 100644 frameworks/core/components/chart/chart_element.h create mode 100644 frameworks/core/components/chart/flutter_render_chart.cpp create mode 100644 frameworks/core/components/chart/flutter_render_chart.h create mode 100644 frameworks/core/components/chart/render_chart.cpp create mode 100644 frameworks/core/components/chart/render_chart.h create mode 100644 frameworks/core/components/checkable/BUILD.gn create mode 100644 frameworks/core/components/checkable/checkable_component.cpp create mode 100644 frameworks/core/components/checkable/checkable_component.h create mode 100644 frameworks/core/components/checkable/checkable_element.cpp create mode 100644 frameworks/core/components/checkable/checkable_element.h create mode 100644 frameworks/core/components/checkable/checkable_theme.h create mode 100644 frameworks/core/components/checkable/flutter_render_checkbox.cpp create mode 100644 frameworks/core/components/checkable/flutter_render_checkbox.h create mode 100644 frameworks/core/components/checkable/flutter_render_radio.cpp create mode 100644 frameworks/core/components/checkable/flutter_render_radio.h create mode 100644 frameworks/core/components/checkable/flutter_render_switch.cpp create mode 100644 frameworks/core/components/checkable/flutter_render_switch.h create mode 100644 frameworks/core/components/checkable/radio_group_component.h create mode 100644 frameworks/core/components/checkable/render_checkable.cpp create mode 100644 frameworks/core/components/checkable/render_checkable.h create mode 100644 frameworks/core/components/checkable/render_checkbox.cpp create mode 100644 frameworks/core/components/checkable/render_checkbox.h create mode 100644 frameworks/core/components/checkable/render_radio.cpp create mode 100644 frameworks/core/components/checkable/render_radio.h create mode 100644 frameworks/core/components/checkable/render_switch.cpp create mode 100644 frameworks/core/components/checkable/render_switch.h create mode 100644 frameworks/core/components/clip/BUILD.gn create mode 100644 frameworks/core/components/clip/clip_component.cpp create mode 100644 frameworks/core/components/clip/clip_component.h create mode 100644 frameworks/core/components/clip/clip_element.h create mode 100644 frameworks/core/components/clip/flutter_render_clip.cpp create mode 100644 frameworks/core/components/clip/flutter_render_clip.h create mode 100644 frameworks/core/components/clip/render_clip.cpp create mode 100644 frameworks/core/components/clip/render_clip.h create mode 100644 frameworks/core/components/clock/BUILD.gn create mode 100644 frameworks/core/components/clock/clock_component.h create mode 100644 frameworks/core/components/clock/clock_element.h create mode 100644 frameworks/core/components/clock/clock_theme.h create mode 100644 frameworks/core/components/clock/flutter_render_clock.cpp create mode 100644 frameworks/core/components/clock/flutter_render_clock.h create mode 100644 frameworks/core/components/clock/render_clock.cpp create mode 100644 frameworks/core/components/clock/render_clock.h create mode 100644 frameworks/core/components/column_split/BUILD.gn create mode 100644 frameworks/core/components/column_split/column_split_component.cpp create mode 100644 frameworks/core/components/column_split/column_split_component.h create mode 100644 frameworks/core/components/column_split/column_split_element.cpp create mode 100644 frameworks/core/components/column_split/column_split_element.h create mode 100644 frameworks/core/components/column_split/flutter_render_column_split.cpp create mode 100644 frameworks/core/components/column_split/flutter_render_column_split.h create mode 100644 frameworks/core/components/column_split/render_column_split.cpp create mode 100644 frameworks/core/components/column_split/render_column_split.h create mode 100644 frameworks/core/components/common/BUILD.gn create mode 100644 frameworks/core/components/common/layout/constants.h create mode 100644 frameworks/core/components/common/layout/grid_column_info.cpp create mode 100644 frameworks/core/components/common/layout/grid_column_info.h create mode 100644 frameworks/core/components/common/layout/grid_container_info.cpp create mode 100644 frameworks/core/components/common/layout/grid_container_info.h create mode 100644 frameworks/core/components/common/layout/grid_layout_info.h create mode 100644 frameworks/core/components/common/layout/grid_system_manager.cpp create mode 100644 frameworks/core/components/common/layout/grid_system_manager.h create mode 100644 frameworks/core/components/common/layout/layout_param.h create mode 100644 frameworks/core/components/common/layout/position_param.h create mode 100644 frameworks/core/components/common/painter/flutter_checkable_painter.cpp create mode 100644 frameworks/core/components/common/painter/flutter_checkable_painter.h create mode 100644 frameworks/core/components/common/painter/flutter_decoration_painter.cpp create mode 100644 frameworks/core/components/common/painter/flutter_decoration_painter.h create mode 100644 frameworks/core/components/common/painter/flutter_scroll_bar_painter.cpp create mode 100644 frameworks/core/components/common/painter/flutter_scroll_bar_painter.h create mode 100644 frameworks/core/components/common/painter/flutter_scroll_fade_painter.cpp create mode 100644 frameworks/core/components/common/painter/flutter_scroll_fade_painter.h create mode 100644 frameworks/core/components/common/painter/flutter_svg_painter.cpp create mode 100644 frameworks/core/components/common/painter/flutter_svg_painter.h create mode 100644 frameworks/core/components/common/painter/flutter_universal_painter.cpp create mode 100644 frameworks/core/components/common/painter/flutter_universal_painter.h create mode 100644 frameworks/core/components/common/properties/alignment.cpp create mode 100644 frameworks/core/components/common/properties/alignment.h create mode 100644 frameworks/core/components/common/properties/border.cpp create mode 100644 frameworks/core/components/common/properties/border.h create mode 100644 frameworks/core/components/common/properties/border_edge.cpp create mode 100644 frameworks/core/components/common/properties/border_edge.h create mode 100644 frameworks/core/components/common/properties/color.cpp create mode 100644 frameworks/core/components/common/properties/color.h create mode 100644 frameworks/core/components/common/properties/color_factory.cpp create mode 100644 frameworks/core/components/common/properties/color_factory.h create mode 100644 frameworks/core/components/common/properties/decoration.cpp create mode 100644 frameworks/core/components/common/properties/decoration.h create mode 100644 frameworks/core/components/common/properties/edge.cpp create mode 100644 frameworks/core/components/common/properties/edge.h create mode 100644 frameworks/core/components/common/properties/page_transition_option.cpp create mode 100644 frameworks/core/components/common/properties/page_transition_option.h create mode 100644 frameworks/core/components/common/properties/paint_state.h create mode 100644 frameworks/core/components/common/properties/placement.h create mode 100644 frameworks/core/components/common/properties/progress_data.h create mode 100644 frameworks/core/components/common/properties/radius.h create mode 100644 frameworks/core/components/common/properties/scroll_bar.cpp create mode 100644 frameworks/core/components/common/properties/scroll_bar.h create mode 100644 frameworks/core/components/common/properties/shadow.h create mode 100644 frameworks/core/components/common/properties/shadow_config.cpp create mode 100644 frameworks/core/components/common/properties/shadow_config.h create mode 100644 frameworks/core/components/common/properties/svg_paint_state.h create mode 100644 frameworks/core/components/common/properties/swiper_indicator.h create mode 100644 frameworks/core/components/common/properties/test/BUILD.gn create mode 100644 frameworks/core/components/common/properties/test/unittest/alignment/BUILD.gn create mode 100644 frameworks/core/components/common/properties/test/unittest/alignment/alignment_test.cpp create mode 100644 frameworks/core/components/common/properties/test/unittest/color/BUILD.gn create mode 100644 frameworks/core/components/common/properties/test/unittest/color/color_test.cpp create mode 100644 frameworks/core/components/common/properties/text_style.cpp create mode 100644 frameworks/core/components/common/properties/text_style.h create mode 100644 frameworks/core/components/common/properties/tween_option.h create mode 100644 frameworks/core/components/common/rotation/rotation_controller.h create mode 100644 frameworks/core/components/common/rotation/rotation_node.h create mode 100644 frameworks/core/components/components.gni create mode 100644 frameworks/core/components/custom_dialog/BUILD.gn create mode 100644 frameworks/core/components/custom_dialog/custom_dialog_component.cpp create mode 100644 frameworks/core/components/custom_dialog/custom_dialog_component.h create mode 100644 frameworks/core/components/custom_dialog/custom_dialog_element.cpp create mode 100644 frameworks/core/components/custom_dialog/custom_dialog_element.h create mode 100644 frameworks/core/components/custom_paint/BUILD.gn create mode 100644 frameworks/core/components/custom_paint/custom_paint_component.cpp create mode 100644 frameworks/core/components/custom_paint/custom_paint_component.h create mode 100644 frameworks/core/components/custom_paint/custom_paint_element.h create mode 100644 frameworks/core/components/custom_paint/flutter_render_custom_paint.cpp create mode 100644 frameworks/core/components/custom_paint/flutter_render_custom_paint.h create mode 100644 frameworks/core/components/custom_paint/render_custom_paint.cpp create mode 100644 frameworks/core/components/custom_paint/render_custom_paint.h create mode 100644 frameworks/core/components/data_panel/BUILD.gn create mode 100644 frameworks/core/components/data_panel/data_panel_component.cpp create mode 100644 frameworks/core/components/data_panel/data_panel_component.h create mode 100644 frameworks/core/components/data_panel/data_panel_element.h create mode 100644 frameworks/core/components/data_panel/data_panel_theme.h create mode 100644 frameworks/core/components/data_panel/flutter_render_data_panel.cpp create mode 100644 frameworks/core/components/data_panel/flutter_render_data_panel.h create mode 100644 frameworks/core/components/data_panel/render_data_panel.cpp create mode 100644 frameworks/core/components/data_panel/render_data_panel.h create mode 100644 frameworks/core/components/dialog/BUILD.gn create mode 100644 frameworks/core/components/dialog/dialog_component.cpp create mode 100644 frameworks/core/components/dialog/dialog_component.h create mode 100644 frameworks/core/components/dialog/dialog_element.cpp create mode 100644 frameworks/core/components/dialog/dialog_element.h create mode 100644 frameworks/core/components/dialog/dialog_theme.h create mode 100644 frameworks/core/components/dialog/flutter_render_dialog.cpp create mode 100644 frameworks/core/components/dialog/flutter_render_dialog.h create mode 100644 frameworks/core/components/dialog/render_dialog.cpp create mode 100644 frameworks/core/components/dialog/render_dialog.h create mode 100644 frameworks/core/components/dialog_modal/BUILD.gn create mode 100644 frameworks/core/components/dialog_modal/dialog_modal_component.cpp create mode 100644 frameworks/core/components/dialog_modal/dialog_modal_component.h create mode 100644 frameworks/core/components/dialog_modal/dialog_modal_element.cpp create mode 100644 frameworks/core/components/dialog_modal/dialog_modal_element.h create mode 100644 frameworks/core/components/dialog_modal/render_dialog_modal.cpp create mode 100644 frameworks/core/components/dialog_modal/render_dialog_modal.h create mode 100644 frameworks/core/components/dialog_tween/BUILD.gn create mode 100644 frameworks/core/components/dialog_tween/dialog_tween_component.cpp create mode 100644 frameworks/core/components/dialog_tween/dialog_tween_component.h create mode 100644 frameworks/core/components/dialog_tween/dialog_tween_element.cpp create mode 100644 frameworks/core/components/dialog_tween/dialog_tween_element.h create mode 100644 frameworks/core/components/dialog_tween/render_dialog_tween.cpp create mode 100644 frameworks/core/components/dialog_tween/render_dialog_tween.h create mode 100644 frameworks/core/components/display/BUILD.gn create mode 100644 frameworks/core/components/display/display_component.cpp create mode 100644 frameworks/core/components/display/display_component.h create mode 100644 frameworks/core/components/display/display_element.cpp create mode 100644 frameworks/core/components/display/display_element.h create mode 100644 frameworks/core/components/display/flutter_render_display.cpp create mode 100644 frameworks/core/components/display/flutter_render_display.h create mode 100644 frameworks/core/components/display/render_display.cpp create mode 100644 frameworks/core/components/display/render_display.h create mode 100644 frameworks/core/components/divider/BUILD.gn create mode 100644 frameworks/core/components/divider/divider_component.cpp create mode 100644 frameworks/core/components/divider/divider_component.h create mode 100644 frameworks/core/components/divider/divider_element.h create mode 100644 frameworks/core/components/divider/divider_theme.h create mode 100644 frameworks/core/components/divider/flutter_render_divider.cpp create mode 100644 frameworks/core/components/divider/flutter_render_divider.h create mode 100644 frameworks/core/components/divider/render_divider.cpp create mode 100644 frameworks/core/components/divider/render_divider.h create mode 100644 frameworks/core/components/drag_bar/BUILD.gn create mode 100644 frameworks/core/components/drag_bar/drag_bar_component.cpp create mode 100644 frameworks/core/components/drag_bar/drag_bar_component.h create mode 100644 frameworks/core/components/drag_bar/drag_bar_element.cpp create mode 100644 frameworks/core/components/drag_bar/drag_bar_element.h create mode 100644 frameworks/core/components/drag_bar/flutter_render_drag_bar.cpp create mode 100644 frameworks/core/components/drag_bar/flutter_render_drag_bar.h create mode 100644 frameworks/core/components/drag_bar/render_drag_bar.cpp create mode 100644 frameworks/core/components/drag_bar/render_drag_bar.h create mode 100644 frameworks/core/components/drop_filter/BUILD.gn create mode 100644 frameworks/core/components/drop_filter/drop_filter_component.cpp create mode 100644 frameworks/core/components/drop_filter/drop_filter_component.h create mode 100644 frameworks/core/components/drop_filter/drop_filter_element.h create mode 100644 frameworks/core/components/drop_filter/flutter_render_drop_filter.cpp create mode 100644 frameworks/core/components/drop_filter/flutter_render_drop_filter.h create mode 100644 frameworks/core/components/drop_filter/render_drop_filter.cpp create mode 100644 frameworks/core/components/drop_filter/render_drop_filter.h create mode 100644 frameworks/core/components/flex/BUILD.gn create mode 100644 frameworks/core/components/flex/flex_component.h create mode 100644 frameworks/core/components/flex/flex_element.cpp create mode 100644 frameworks/core/components/flex/flex_element.h create mode 100644 frameworks/core/components/flex/flex_item_component.h create mode 100644 frameworks/core/components/flex/flex_item_element.h create mode 100644 frameworks/core/components/flex/render_flex.cpp create mode 100644 frameworks/core/components/flex/render_flex.h create mode 100644 frameworks/core/components/flex/render_flex_item.cpp create mode 100644 frameworks/core/components/flex/render_flex_item.h create mode 100644 frameworks/core/components/focus_animation/BUILD.gn create mode 100644 frameworks/core/components/focus_animation/flutter_render_focus_animation.cpp create mode 100644 frameworks/core/components/focus_animation/flutter_render_focus_animation.h create mode 100644 frameworks/core/components/focus_animation/focus_animation_component.cpp create mode 100644 frameworks/core/components/focus_animation/focus_animation_component.h create mode 100644 frameworks/core/components/focus_animation/focus_animation_element.h create mode 100644 frameworks/core/components/focus_animation/focus_animation_theme.h create mode 100644 frameworks/core/components/focus_animation/render_focus_animation.cpp create mode 100644 frameworks/core/components/focus_animation/render_focus_animation.h create mode 100644 frameworks/core/components/focus_collaboration/BUILD.gn create mode 100644 frameworks/core/components/focus_collaboration/focus_collaboration_component.h create mode 100644 frameworks/core/components/focus_collaboration/focus_collaboration_element.cpp create mode 100644 frameworks/core/components/focus_collaboration/focus_collaboration_element.h create mode 100644 frameworks/core/components/focus_collaboration/render_focus_collaboration.cpp create mode 100644 frameworks/core/components/focus_collaboration/render_focus_collaboration.h create mode 100644 frameworks/core/components/focusable/BUILD.gn create mode 100644 frameworks/core/components/focusable/focusable_component.h create mode 100644 frameworks/core/components/focusable/focusable_element.cpp create mode 100644 frameworks/core/components/focusable/focusable_element.h create mode 100644 frameworks/core/components/font/BUILD.gn create mode 100644 frameworks/core/components/font/constants_converter.cpp create mode 100644 frameworks/core/components/font/constants_converter.h create mode 100644 frameworks/core/components/font/flutter_font_collection.cpp create mode 100644 frameworks/core/components/font/flutter_font_collection.h create mode 100644 frameworks/core/components/font/flutter_font_loader.cpp create mode 100644 frameworks/core/components/font/flutter_font_loader.h create mode 100644 frameworks/core/components/font/flutter_font_manager.cpp create mode 100644 frameworks/core/components/font/flutter_font_manager.h create mode 100644 frameworks/core/components/foreach/foreach_component.h create mode 100644 frameworks/core/components/gesture_listener/BUILD.gn create mode 100644 frameworks/core/components/gesture_listener/gesture_listener_component.h create mode 100644 frameworks/core/components/gesture_listener/gesture_listener_element.h create mode 100644 frameworks/core/components/gesture_listener/render_gesture_listener.cpp create mode 100644 frameworks/core/components/gesture_listener/render_gesture_listener.h create mode 100644 frameworks/core/components/grid/BUILD.gn create mode 100644 frameworks/core/components/grid/flutter_render_grid.cpp create mode 100644 frameworks/core/components/grid/flutter_render_grid.h create mode 100644 frameworks/core/components/grid/grid_component.cpp create mode 100644 frameworks/core/components/grid/grid_component.h create mode 100644 frameworks/core/components/grid/grid_controller.cpp create mode 100644 frameworks/core/components/grid/grid_controller.h create mode 100644 frameworks/core/components/grid/grid_element.cpp create mode 100644 frameworks/core/components/grid/grid_element.h create mode 100644 frameworks/core/components/grid/grid_item_component.cpp create mode 100644 frameworks/core/components/grid/grid_item_component.h create mode 100644 frameworks/core/components/grid/grid_item_element.h create mode 100644 frameworks/core/components/grid/render_grid.cpp create mode 100644 frameworks/core/components/grid/render_grid.h create mode 100644 frameworks/core/components/grid/render_grid_item.cpp create mode 100644 frameworks/core/components/grid/render_grid_item.h create mode 100644 frameworks/core/components/grid_layout/BUILD.gn create mode 100644 frameworks/core/components/grid_layout/flutter_render_grid_layout.cpp create mode 100644 frameworks/core/components/grid_layout/flutter_render_grid_layout.h create mode 100644 frameworks/core/components/grid_layout/grid_layout_component.cpp create mode 100644 frameworks/core/components/grid_layout/grid_layout_component.h create mode 100644 frameworks/core/components/grid_layout/grid_layout_element.cpp create mode 100644 frameworks/core/components/grid_layout/grid_layout_element.h create mode 100644 frameworks/core/components/grid_layout/grid_layout_item_component.cpp create mode 100644 frameworks/core/components/grid_layout/grid_layout_item_component.h create mode 100644 frameworks/core/components/grid_layout/grid_layout_item_element.cpp create mode 100644 frameworks/core/components/grid_layout/grid_layout_item_element.h create mode 100644 frameworks/core/components/grid_layout/render_grid_layout.cpp create mode 100644 frameworks/core/components/grid_layout/render_grid_layout.h create mode 100644 frameworks/core/components/grid_layout/render_grid_layout_item.cpp create mode 100644 frameworks/core/components/grid_layout/render_grid_layout_item.h create mode 100644 frameworks/core/components/image/BUILD.gn create mode 100644 frameworks/core/components/image/flutter_render_image.cpp create mode 100644 frameworks/core/components/image/flutter_render_image.h create mode 100644 frameworks/core/components/image/image_animator_component.cpp create mode 100644 frameworks/core/components/image/image_animator_component.h create mode 100644 frameworks/core/components/image/image_animator_element.cpp create mode 100644 frameworks/core/components/image/image_animator_element.h create mode 100644 frameworks/core/components/image/image_component.cpp create mode 100644 frameworks/core/components/image/image_component.h create mode 100644 frameworks/core/components/image/image_element.h create mode 100644 frameworks/core/components/image/image_event.h create mode 100644 frameworks/core/components/image/render_image.cpp create mode 100644 frameworks/core/components/image/render_image.h create mode 100644 frameworks/core/components/indexer/BUILD.gn create mode 100644 frameworks/core/components/indexer/indexer_component.cpp create mode 100644 frameworks/core/components/indexer/indexer_component.h create mode 100644 frameworks/core/components/indexer/indexer_element.cpp create mode 100644 frameworks/core/components/indexer/indexer_element.h create mode 100644 frameworks/core/components/indexer/indexer_item_component.cpp create mode 100644 frameworks/core/components/indexer/indexer_item_component.h create mode 100644 frameworks/core/components/indexer/indexer_list_component.cpp create mode 100644 frameworks/core/components/indexer/indexer_list_component.h create mode 100644 frameworks/core/components/indexer/indexer_list_element.cpp create mode 100644 frameworks/core/components/indexer/indexer_list_element.h create mode 100644 frameworks/core/components/indexer/render_indexer.cpp create mode 100644 frameworks/core/components/indexer/render_indexer.h create mode 100644 frameworks/core/components/indexer/render_indexer_circle.cpp create mode 100644 frameworks/core/components/indexer/render_indexer_circle.h create mode 100644 frameworks/core/components/indexer/render_indexer_item.cpp create mode 100644 frameworks/core/components/indexer/render_indexer_item.h create mode 100644 frameworks/core/components/indexer/render_indexer_list.cpp create mode 100644 frameworks/core/components/indexer/render_indexer_list.h create mode 100644 frameworks/core/components/list/BUILD.gn create mode 100644 frameworks/core/components/list/flutter_render_list.cpp create mode 100644 frameworks/core/components/list/flutter_render_list.h create mode 100644 frameworks/core/components/list/flutter_render_list_item.cpp create mode 100644 frameworks/core/components/list/flutter_render_list_item.h create mode 100644 frameworks/core/components/list/flutter_render_list_item_group.cpp create mode 100644 frameworks/core/components/list/flutter_render_list_item_group.h create mode 100644 frameworks/core/components/list/grid_layout_manager.cpp create mode 100644 frameworks/core/components/list/grid_layout_manager.h create mode 100644 frameworks/core/components/list/interactive_effect.cpp create mode 100644 frameworks/core/components/list/interactive_effect.h create mode 100644 frameworks/core/components/list/layout_manager.cpp create mode 100644 frameworks/core/components/list/layout_manager.h create mode 100644 frameworks/core/components/list/list_component.cpp create mode 100644 frameworks/core/components/list/list_component.h create mode 100644 frameworks/core/components/list/list_element.cpp create mode 100644 frameworks/core/components/list/list_element.h create mode 100644 frameworks/core/components/list/list_item_component.cpp create mode 100644 frameworks/core/components/list/list_item_component.h create mode 100644 frameworks/core/components/list/list_item_element.cpp create mode 100644 frameworks/core/components/list/list_item_element.h create mode 100644 frameworks/core/components/list/list_item_group_component.cpp create mode 100644 frameworks/core/components/list/list_item_group_component.h create mode 100644 frameworks/core/components/list/list_item_group_element.cpp create mode 100644 frameworks/core/components/list/list_item_group_element.h create mode 100644 frameworks/core/components/list/list_item_theme.h create mode 100644 frameworks/core/components/list/list_layout_manager.cpp create mode 100644 frameworks/core/components/list/list_layout_manager.h create mode 100644 frameworks/core/components/list/list_theme.h create mode 100644 frameworks/core/components/list/list_watch_layout_manager.cpp create mode 100644 frameworks/core/components/list/list_watch_layout_manager.h create mode 100644 frameworks/core/components/list/render_list.cpp create mode 100644 frameworks/core/components/list/render_list.h create mode 100644 frameworks/core/components/list/render_list_item.cpp create mode 100644 frameworks/core/components/list/render_list_item.h create mode 100644 frameworks/core/components/list/render_list_item_group.cpp create mode 100644 frameworks/core/components/list/render_list_item_group.h create mode 100644 frameworks/core/components/list/tv_interactive_effect.cpp create mode 100644 frameworks/core/components/list/tv_interactive_effect.h create mode 100644 frameworks/core/components/list/watch_interactive_effect.cpp create mode 100644 frameworks/core/components/list/watch_interactive_effect.h create mode 100644 frameworks/core/components/marquee/BUILD.gn create mode 100644 frameworks/core/components/marquee/flutter_render_marquee.cpp create mode 100644 frameworks/core/components/marquee/flutter_render_marquee.h create mode 100644 frameworks/core/components/marquee/marquee_component.h create mode 100644 frameworks/core/components/marquee/marquee_theme.h create mode 100644 frameworks/core/components/marquee/render_marquee.cpp create mode 100644 frameworks/core/components/marquee/render_marquee.h create mode 100644 frameworks/core/components/menu/BUILD.gn create mode 100644 frameworks/core/components/menu/menu_component.cpp create mode 100644 frameworks/core/components/menu/menu_component.h create mode 100644 frameworks/core/components/menu/menu_element.cpp create mode 100644 frameworks/core/components/menu/menu_element.h create mode 100644 frameworks/core/components/mouse_listener/BUILD.gn create mode 100644 frameworks/core/components/mouse_listener/mouse_listener_component.h create mode 100644 frameworks/core/components/mouse_listener/mouse_listener_element.h create mode 100644 frameworks/core/components/mouse_listener/render_mouse_listener.cpp create mode 100644 frameworks/core/components/mouse_listener/render_mouse_listener.h create mode 100644 frameworks/core/components/multimodal/BUILD.gn create mode 100644 frameworks/core/components/multimodal/flutter_render_multimodal.cpp create mode 100644 frameworks/core/components/multimodal/flutter_render_multimodal.h create mode 100644 frameworks/core/components/multimodal/multimodal_component.h create mode 100644 frameworks/core/components/multimodal/multimodal_element.h create mode 100644 frameworks/core/components/multimodal/render_multimodal.cpp create mode 100644 frameworks/core/components/multimodal/render_multimodal.h create mode 100644 frameworks/core/components/navigation_bar/BUILD.gn create mode 100644 frameworks/core/components/navigation_bar/navigation_bar_component.cpp create mode 100644 frameworks/core/components/navigation_bar/navigation_bar_component.h create mode 100644 frameworks/core/components/navigation_bar/navigation_bar_element.cpp create mode 100644 frameworks/core/components/navigation_bar/navigation_bar_element.h create mode 100644 frameworks/core/components/navigation_bar/navigation_bar_theme.h create mode 100644 frameworks/core/components/navigation_bar/navigation_container_component.h create mode 100644 frameworks/core/components/navigation_bar/navigation_container_element.h create mode 100644 frameworks/core/components/navigation_bar/render_collapsing_navigation_bar.cpp create mode 100644 frameworks/core/components/navigation_bar/render_collapsing_navigation_bar.h create mode 100644 frameworks/core/components/navigation_bar/render_navigation_container.cpp create mode 100644 frameworks/core/components/navigation_bar/render_navigation_container.h create mode 100644 frameworks/core/components/navigator/BUILD.gn create mode 100644 frameworks/core/components/navigator/navigator_component.cpp create mode 100644 frameworks/core/components/navigator/navigator_component.h create mode 100644 frameworks/core/components/navigator/navigator_element.cpp create mode 100644 frameworks/core/components/navigator/navigator_element.h create mode 100644 frameworks/core/components/navigator/render_navigator.cpp create mode 100644 frameworks/core/components/navigator/render_navigator.h create mode 100644 frameworks/core/components/option/BUILD.gn create mode 100644 frameworks/core/components/option/flutter_render_option.cpp create mode 100644 frameworks/core/components/option/flutter_render_option.h create mode 100644 frameworks/core/components/option/option_component.cpp create mode 100644 frameworks/core/components/option/option_component.h create mode 100644 frameworks/core/components/option/option_element.cpp create mode 100644 frameworks/core/components/option/option_element.h create mode 100644 frameworks/core/components/option/render_option.cpp create mode 100644 frameworks/core/components/option/render_option.h create mode 100644 frameworks/core/components/overlay/BUILD.gn create mode 100644 frameworks/core/components/overlay/overlay_component.cpp create mode 100644 frameworks/core/components/overlay/overlay_component.h create mode 100644 frameworks/core/components/overlay/overlay_element.cpp create mode 100644 frameworks/core/components/overlay/overlay_element.h create mode 100644 frameworks/core/components/padding/BUILD.gn create mode 100644 frameworks/core/components/padding/padding_component.cpp create mode 100644 frameworks/core/components/padding/padding_component.h create mode 100644 frameworks/core/components/padding/padding_element.h create mode 100644 frameworks/core/components/padding/render_padding.cpp create mode 100644 frameworks/core/components/padding/render_padding.h create mode 100644 frameworks/core/components/page/BUILD.gn create mode 100644 frameworks/core/components/page/page_component.cpp create mode 100644 frameworks/core/components/page/page_component.h create mode 100644 frameworks/core/components/page/page_element.cpp create mode 100644 frameworks/core/components/page/page_element.h create mode 100644 frameworks/core/components/page_transition/BUILD.gn create mode 100644 frameworks/core/components/page_transition/page_transition_component.h create mode 100644 frameworks/core/components/page_transition/page_transition_element.cpp create mode 100644 frameworks/core/components/page_transition/page_transition_element.h create mode 100644 frameworks/core/components/panel/BUILD.gn create mode 100644 frameworks/core/components/panel/panel_component.cpp create mode 100644 frameworks/core/components/panel/panel_component.h create mode 100644 frameworks/core/components/panel/panel_element.cpp create mode 100644 frameworks/core/components/panel/panel_element.h create mode 100644 frameworks/core/components/panel/render_sliding_panel.cpp create mode 100644 frameworks/core/components/panel/render_sliding_panel.h create mode 100644 frameworks/core/components/panel/sliding_panel_component.cpp create mode 100644 frameworks/core/components/panel/sliding_panel_component.h create mode 100644 frameworks/core/components/panel/sliding_panel_element.h create mode 100644 frameworks/core/components/picker/BUILD.gn create mode 100644 frameworks/core/components/picker/flutter_render_picker_base.cpp create mode 100644 frameworks/core/components/picker/flutter_render_picker_base.h create mode 100644 frameworks/core/components/picker/flutter_render_picker_column.cpp create mode 100644 frameworks/core/components/picker/flutter_render_picker_column.h create mode 100644 frameworks/core/components/picker/picker_animation.cpp create mode 100644 frameworks/core/components/picker/picker_animation.h create mode 100644 frameworks/core/components/picker/picker_animation_controller.cpp create mode 100644 frameworks/core/components/picker/picker_animation_controller.h create mode 100644 frameworks/core/components/picker/picker_base_component.cpp create mode 100644 frameworks/core/components/picker/picker_base_component.h create mode 100644 frameworks/core/components/picker/picker_base_element.cpp create mode 100644 frameworks/core/components/picker/picker_base_element.h create mode 100644 frameworks/core/components/picker/picker_column_component.cpp create mode 100644 frameworks/core/components/picker/picker_column_component.h create mode 100644 frameworks/core/components/picker/picker_column_element.cpp create mode 100644 frameworks/core/components/picker/picker_column_element.h create mode 100644 frameworks/core/components/picker/picker_date_component.cpp create mode 100644 frameworks/core/components/picker/picker_date_component.h create mode 100644 frameworks/core/components/picker/picker_datetime_component.cpp create mode 100644 frameworks/core/components/picker/picker_datetime_component.h create mode 100644 frameworks/core/components/picker/picker_multitext_component.cpp create mode 100644 frameworks/core/components/picker/picker_multitext_component.h create mode 100644 frameworks/core/components/picker/picker_option_component.cpp create mode 100644 frameworks/core/components/picker/picker_option_component.h create mode 100644 frameworks/core/components/picker/picker_option_element.cpp create mode 100644 frameworks/core/components/picker/picker_option_element.h create mode 100644 frameworks/core/components/picker/picker_text_component.cpp create mode 100644 frameworks/core/components/picker/picker_text_component.h create mode 100644 frameworks/core/components/picker/picker_theme.h create mode 100644 frameworks/core/components/picker/picker_time_component.cpp create mode 100644 frameworks/core/components/picker/picker_time_component.h create mode 100644 frameworks/core/components/picker/picker_value_component.h create mode 100644 frameworks/core/components/picker/picker_value_element.cpp create mode 100644 frameworks/core/components/picker/picker_value_element.h create mode 100644 frameworks/core/components/picker/render_picker_base.cpp create mode 100644 frameworks/core/components/picker/render_picker_base.h create mode 100644 frameworks/core/components/picker/render_picker_column.cpp create mode 100644 frameworks/core/components/picker/render_picker_column.h create mode 100644 frameworks/core/components/picker/render_picker_option.cpp create mode 100644 frameworks/core/components/picker/render_picker_option.h create mode 100644 frameworks/core/components/picker/render_picker_value.cpp create mode 100644 frameworks/core/components/picker/render_picker_value.h create mode 100644 frameworks/core/components/picker/toss_animation_controller.cpp create mode 100644 frameworks/core/components/picker/toss_animation_controller.h create mode 100644 frameworks/core/components/piece/BUILD.gn create mode 100644 frameworks/core/components/piece/flutter_render_piece.cpp create mode 100644 frameworks/core/components/piece/flutter_render_piece.h create mode 100644 frameworks/core/components/piece/piece_component.cpp create mode 100644 frameworks/core/components/piece/piece_component.h create mode 100644 frameworks/core/components/piece/piece_element.cpp create mode 100644 frameworks/core/components/piece/piece_element.h create mode 100644 frameworks/core/components/piece/piece_theme.h create mode 100644 frameworks/core/components/piece/render_piece.cpp create mode 100644 frameworks/core/components/piece/render_piece.h create mode 100644 frameworks/core/components/popup/BUILD.gn create mode 100644 frameworks/core/components/popup/popup_component.cpp create mode 100644 frameworks/core/components/popup/popup_component.h create mode 100644 frameworks/core/components/popup/popup_element.cpp create mode 100644 frameworks/core/components/popup/popup_element.h create mode 100644 frameworks/core/components/popup/popup_theme.h create mode 100644 frameworks/core/components/positioned/BUILD.gn create mode 100644 frameworks/core/components/positioned/positioned_component.h create mode 100644 frameworks/core/components/positioned/positioned_element.h create mode 100644 frameworks/core/components/positioned/render_positioned.cpp create mode 100644 frameworks/core/components/positioned/render_positioned.h create mode 100644 frameworks/core/components/progress/BUILD.gn create mode 100644 frameworks/core/components/progress/flutter_render_loading_progress.cpp create mode 100644 frameworks/core/components/progress/flutter_render_loading_progress.h create mode 100644 frameworks/core/components/progress/flutter_render_progress.cpp create mode 100644 frameworks/core/components/progress/flutter_render_progress.h create mode 100644 frameworks/core/components/progress/loading_progress_component.cpp create mode 100644 frameworks/core/components/progress/loading_progress_component.h create mode 100644 frameworks/core/components/progress/loading_progress_element.h create mode 100644 frameworks/core/components/progress/progress_component.cpp create mode 100644 frameworks/core/components/progress/progress_component.h create mode 100644 frameworks/core/components/progress/progress_element.h create mode 100644 frameworks/core/components/progress/progress_theme.h create mode 100644 frameworks/core/components/progress/render_loading_progress.cpp create mode 100644 frameworks/core/components/progress/render_loading_progress.h create mode 100644 frameworks/core/components/progress/render_progress.cpp create mode 100644 frameworks/core/components/progress/render_progress.h create mode 100644 frameworks/core/components/proxy/BUILD.gn create mode 100644 frameworks/core/components/proxy/flutter_render_item_proxy.cpp create mode 100644 frameworks/core/components/proxy/flutter_render_item_proxy.h create mode 100644 frameworks/core/components/proxy/render_item_proxy.cpp create mode 100644 frameworks/core/components/proxy/render_item_proxy.h create mode 100644 frameworks/core/components/proxy/render_proxy.cpp create mode 100644 frameworks/core/components/proxy/render_proxy.h create mode 100644 frameworks/core/components/qrcode/BUILD.gn create mode 100755 frameworks/core/components/qrcode/applypatch.sh create mode 100644 frameworks/core/components/qrcode/flutter_render_qrcode.cpp create mode 100644 frameworks/core/components/qrcode/flutter_render_qrcode.h create mode 100644 frameworks/core/components/qrcode/qrcode_component.cpp create mode 100644 frameworks/core/components/qrcode/qrcode_component.h create mode 100644 frameworks/core/components/qrcode/qrcode_element.h create mode 100644 frameworks/core/components/qrcode/qrcode_patch2.patch create mode 100644 frameworks/core/components/qrcode/qrcode_theme.h create mode 100644 frameworks/core/components/qrcode/render_qrcode.cpp create mode 100644 frameworks/core/components/qrcode/render_qrcode.h create mode 100644 frameworks/core/components/rating/BUILD.gn create mode 100644 frameworks/core/components/rating/flutter_render_rating.cpp create mode 100644 frameworks/core/components/rating/flutter_render_rating.h create mode 100644 frameworks/core/components/rating/rating_component.cpp create mode 100644 frameworks/core/components/rating/rating_component.h create mode 100644 frameworks/core/components/rating/rating_element.h create mode 100644 frameworks/core/components/rating/rating_theme.h create mode 100644 frameworks/core/components/rating/render_rating.cpp create mode 100644 frameworks/core/components/rating/render_rating.h create mode 100644 frameworks/core/components/refresh/BUILD.gn create mode 100644 frameworks/core/components/refresh/flutter_render_refresh.cpp create mode 100644 frameworks/core/components/refresh/flutter_render_refresh.h create mode 100644 frameworks/core/components/refresh/refresh_component.cpp create mode 100644 frameworks/core/components/refresh/refresh_component.h create mode 100644 frameworks/core/components/refresh/refresh_controller.h create mode 100644 frameworks/core/components/refresh/refresh_element.cpp create mode 100644 frameworks/core/components/refresh/refresh_element.h create mode 100644 frameworks/core/components/refresh/refresh_theme.h create mode 100644 frameworks/core/components/refresh/render_refresh.cpp create mode 100644 frameworks/core/components/refresh/render_refresh.h create mode 100644 frameworks/core/components/root/BUILD.gn create mode 100644 frameworks/core/components/root/flutter_render_root.cpp create mode 100644 frameworks/core/components/root/flutter_render_root.h create mode 100644 frameworks/core/components/root/render_root.cpp create mode 100644 frameworks/core/components/root/render_root.h create mode 100644 frameworks/core/components/root/root_component.cpp create mode 100644 frameworks/core/components/root/root_component.h create mode 100644 frameworks/core/components/root/root_element.cpp create mode 100644 frameworks/core/components/root/root_element.h create mode 100644 frameworks/core/components/scroll/BUILD.gn create mode 100644 frameworks/core/components/scroll/flutter_render_multi_child_scroll.cpp create mode 100644 frameworks/core/components/scroll/flutter_render_multi_child_scroll.h create mode 100644 frameworks/core/components/scroll/flutter_render_single_child_scroll.cpp create mode 100644 frameworks/core/components/scroll/flutter_render_single_child_scroll.h create mode 100644 frameworks/core/components/scroll/render_multi_child_scroll.cpp create mode 100644 frameworks/core/components/scroll/render_multi_child_scroll.h create mode 100644 frameworks/core/components/scroll/render_scroll.cpp create mode 100644 frameworks/core/components/scroll/render_scroll.h create mode 100644 frameworks/core/components/scroll/render_single_child_scroll.cpp create mode 100644 frameworks/core/components/scroll/render_single_child_scroll.h create mode 100644 frameworks/core/components/scroll/scroll_bar_controller.cpp create mode 100644 frameworks/core/components/scroll/scroll_bar_controller.h create mode 100644 frameworks/core/components/scroll/scroll_bar_theme.h create mode 100644 frameworks/core/components/scroll/scroll_component.cpp create mode 100644 frameworks/core/components/scroll/scroll_component.h create mode 100644 frameworks/core/components/scroll/scroll_edge_effect.h create mode 100644 frameworks/core/components/scroll/scroll_element.cpp create mode 100644 frameworks/core/components/scroll/scroll_element.h create mode 100644 frameworks/core/components/scroll/scroll_fade_controller.cpp create mode 100644 frameworks/core/components/scroll/scroll_fade_controller.h create mode 100644 frameworks/core/components/scroll/scroll_fade_effect.cpp create mode 100644 frameworks/core/components/scroll/scroll_fade_effect.h create mode 100644 frameworks/core/components/scroll/scroll_fade_painter.h create mode 100644 frameworks/core/components/scroll/scroll_position_controller.cpp create mode 100644 frameworks/core/components/scroll/scroll_position_controller.h create mode 100644 frameworks/core/components/scroll/scroll_spring_effect.cpp create mode 100644 frameworks/core/components/scroll/scroll_spring_effect.h create mode 100644 frameworks/core/components/scroll/scrollable.cpp create mode 100644 frameworks/core/components/scroll/scrollable.h create mode 100644 frameworks/core/components/search/BUILD.gn create mode 100644 frameworks/core/components/search/flutter_render_search.cpp create mode 100644 frameworks/core/components/search/flutter_render_search.h create mode 100644 frameworks/core/components/search/render_search.cpp create mode 100644 frameworks/core/components/search/render_search.h create mode 100644 frameworks/core/components/search/search_component.cpp create mode 100644 frameworks/core/components/search/search_component.h create mode 100644 frameworks/core/components/search/search_element.cpp create mode 100644 frameworks/core/components/search/search_element.h create mode 100644 frameworks/core/components/search/search_theme.h create mode 100644 frameworks/core/components/select/BUILD.gn create mode 100644 frameworks/core/components/select/render_select.cpp create mode 100644 frameworks/core/components/select/render_select.h create mode 100644 frameworks/core/components/select/select_component.cpp create mode 100644 frameworks/core/components/select/select_component.h create mode 100644 frameworks/core/components/select/select_element.cpp create mode 100644 frameworks/core/components/select/select_element.h create mode 100644 frameworks/core/components/select/select_theme.h create mode 100644 frameworks/core/components/select_popup/BUILD.gn create mode 100644 frameworks/core/components/select_popup/flutter_render_select_popup.cpp create mode 100644 frameworks/core/components/select_popup/flutter_render_select_popup.h create mode 100644 frameworks/core/components/select_popup/render_select_popup.cpp create mode 100644 frameworks/core/components/select_popup/render_select_popup.h create mode 100644 frameworks/core/components/select_popup/select_popup_component.cpp create mode 100644 frameworks/core/components/select_popup/select_popup_component.h create mode 100644 frameworks/core/components/select_popup/select_popup_element.cpp create mode 100644 frameworks/core/components/select_popup/select_popup_element.h create mode 100644 frameworks/core/components/semi_modal/BUILD.gn create mode 100644 frameworks/core/components/semi_modal/render_semi_modal.cpp create mode 100644 frameworks/core/components/semi_modal/render_semi_modal.h create mode 100644 frameworks/core/components/semi_modal/semi_modal_component.cpp create mode 100644 frameworks/core/components/semi_modal/semi_modal_component.h create mode 100644 frameworks/core/components/semi_modal/semi_modal_element.cpp create mode 100644 frameworks/core/components/semi_modal/semi_modal_element.h create mode 100644 frameworks/core/components/shadow/BUILD.gn create mode 100644 frameworks/core/components/shadow/flutter_render_shadow.cpp create mode 100644 frameworks/core/components/shadow/flutter_render_shadow.h create mode 100644 frameworks/core/components/shadow/render_shadow.cpp create mode 100644 frameworks/core/components/shadow/render_shadow.h create mode 100644 frameworks/core/components/shadow/shadow_component.h create mode 100644 frameworks/core/components/shadow/shadow_element.h create mode 100644 frameworks/core/components/shared_transition/BUILD.gn create mode 100644 frameworks/core/components/shared_transition/shared_transition_component.cpp create mode 100644 frameworks/core/components/shared_transition/shared_transition_component.h create mode 100644 frameworks/core/components/shared_transition/shared_transition_element.cpp create mode 100644 frameworks/core/components/shared_transition/shared_transition_element.h create mode 100644 frameworks/core/components/slider/BUILD.gn create mode 100644 frameworks/core/components/slider/block_component.cpp create mode 100644 frameworks/core/components/slider/block_component.h create mode 100644 frameworks/core/components/slider/flutter_render_circle_block.cpp create mode 100644 frameworks/core/components/slider/flutter_render_circle_block.h create mode 100644 frameworks/core/components/slider/flutter_render_slider.cpp create mode 100644 frameworks/core/components/slider/flutter_render_slider.h create mode 100644 frameworks/core/components/slider/render_block.cpp create mode 100644 frameworks/core/components/slider/render_block.h create mode 100644 frameworks/core/components/slider/render_slider.cpp create mode 100644 frameworks/core/components/slider/render_slider.h create mode 100644 frameworks/core/components/slider/slider_component.cpp create mode 100644 frameworks/core/components/slider/slider_component.h create mode 100644 frameworks/core/components/slider/slider_element.h create mode 100644 frameworks/core/components/slider/slider_theme.h create mode 100644 frameworks/core/components/stack/BUILD.gn create mode 100644 frameworks/core/components/stack/flutter_render_stack.cpp create mode 100644 frameworks/core/components/stack/flutter_render_stack.h create mode 100644 frameworks/core/components/stack/render_stack.cpp create mode 100644 frameworks/core/components/stack/render_stack.h create mode 100644 frameworks/core/components/stack/stack_component.h create mode 100644 frameworks/core/components/stack/stack_element.cpp create mode 100644 frameworks/core/components/stack/stack_element.h create mode 100644 frameworks/core/components/stage/BUILD.gn create mode 100644 frameworks/core/components/stage/render_stage.cpp create mode 100644 frameworks/core/components/stage/render_stage.h create mode 100644 frameworks/core/components/stage/stage_component.h create mode 100644 frameworks/core/components/stage/stage_element.cpp create mode 100644 frameworks/core/components/stage/stage_element.h create mode 100644 frameworks/core/components/stepper/BUILD.gn create mode 100644 frameworks/core/components/stepper/flutter_render_stepper.cpp create mode 100644 frameworks/core/components/stepper/flutter_render_stepper.h create mode 100644 frameworks/core/components/stepper/flutter_render_stepper_item.cpp create mode 100644 frameworks/core/components/stepper/flutter_render_stepper_item.h create mode 100644 frameworks/core/components/stepper/render_stepper.cpp create mode 100644 frameworks/core/components/stepper/render_stepper.h create mode 100644 frameworks/core/components/stepper/render_stepper_item.cpp create mode 100644 frameworks/core/components/stepper/render_stepper_item.h create mode 100644 frameworks/core/components/stepper/stepper_animation_controller.cpp create mode 100644 frameworks/core/components/stepper/stepper_animation_controller.h create mode 100644 frameworks/core/components/stepper/stepper_component.cpp create mode 100644 frameworks/core/components/stepper/stepper_component.h create mode 100644 frameworks/core/components/stepper/stepper_element.cpp create mode 100644 frameworks/core/components/stepper/stepper_element.h create mode 100644 frameworks/core/components/stepper/stepper_item_component.cpp create mode 100644 frameworks/core/components/stepper/stepper_item_component.h create mode 100644 frameworks/core/components/stepper/stepper_item_element.cpp create mode 100644 frameworks/core/components/stepper/stepper_item_element.h create mode 100644 frameworks/core/components/stepper/stepper_theme.h create mode 100644 frameworks/core/components/svg/BUILD.gn create mode 100644 frameworks/core/components/svg/flutter_render_svg.cpp create mode 100644 frameworks/core/components/svg/flutter_render_svg.h create mode 100644 frameworks/core/components/svg/flutter_render_svg_circle.cpp create mode 100644 frameworks/core/components/svg/flutter_render_svg_circle.h create mode 100644 frameworks/core/components/svg/flutter_render_svg_ellipse.cpp create mode 100644 frameworks/core/components/svg/flutter_render_svg_ellipse.h create mode 100644 frameworks/core/components/svg/flutter_render_svg_line.cpp create mode 100644 frameworks/core/components/svg/flutter_render_svg_line.h create mode 100644 frameworks/core/components/svg/flutter_render_svg_path.cpp create mode 100644 frameworks/core/components/svg/flutter_render_svg_path.h create mode 100644 frameworks/core/components/svg/flutter_render_svg_polygon.cpp create mode 100644 frameworks/core/components/svg/flutter_render_svg_polygon.h create mode 100644 frameworks/core/components/svg/flutter_render_svg_polyline.cpp create mode 100644 frameworks/core/components/svg/flutter_render_svg_polyline.h create mode 100644 frameworks/core/components/svg/flutter_render_svg_rect.cpp create mode 100644 frameworks/core/components/svg/flutter_render_svg_rect.h create mode 100644 frameworks/core/components/svg/flutter_render_svg_text.cpp create mode 100644 frameworks/core/components/svg/flutter_render_svg_text.h create mode 100644 frameworks/core/components/svg/flutter_render_svg_text_path.cpp create mode 100644 frameworks/core/components/svg/flutter_render_svg_text_path.h create mode 100644 frameworks/core/components/svg/flutter_render_svg_tspan.cpp create mode 100644 frameworks/core/components/svg/flutter_render_svg_tspan.h create mode 100644 frameworks/core/components/svg/render_svg.cpp create mode 100644 frameworks/core/components/svg/render_svg.h create mode 100644 frameworks/core/components/svg/render_svg_base.cpp create mode 100644 frameworks/core/components/svg/render_svg_base.h create mode 100644 frameworks/core/components/svg/render_svg_circle.cpp create mode 100644 frameworks/core/components/svg/render_svg_circle.h create mode 100644 frameworks/core/components/svg/render_svg_ellipse.cpp create mode 100644 frameworks/core/components/svg/render_svg_ellipse.h create mode 100644 frameworks/core/components/svg/render_svg_line.cpp create mode 100644 frameworks/core/components/svg/render_svg_line.h create mode 100644 frameworks/core/components/svg/render_svg_path.cpp create mode 100644 frameworks/core/components/svg/render_svg_path.h create mode 100644 frameworks/core/components/svg/render_svg_polygon.cpp create mode 100644 frameworks/core/components/svg/render_svg_polygon.h create mode 100644 frameworks/core/components/svg/render_svg_polyline.cpp create mode 100644 frameworks/core/components/svg/render_svg_polyline.h create mode 100644 frameworks/core/components/svg/render_svg_rect.cpp create mode 100644 frameworks/core/components/svg/render_svg_rect.h create mode 100644 frameworks/core/components/svg/render_svg_text.cpp create mode 100644 frameworks/core/components/svg/render_svg_text.h create mode 100644 frameworks/core/components/svg/render_svg_text_path.cpp create mode 100644 frameworks/core/components/svg/render_svg_text_path.h create mode 100644 frameworks/core/components/svg/svg_animate_component.h create mode 100644 frameworks/core/components/svg/svg_circle_component.cpp create mode 100644 frameworks/core/components/svg/svg_circle_component.h create mode 100644 frameworks/core/components/svg/svg_circle_element.h create mode 100644 frameworks/core/components/svg/svg_component.cpp create mode 100644 frameworks/core/components/svg/svg_component.h create mode 100644 frameworks/core/components/svg/svg_element.h create mode 100644 frameworks/core/components/svg/svg_ellipse_component.cpp create mode 100644 frameworks/core/components/svg/svg_ellipse_component.h create mode 100644 frameworks/core/components/svg/svg_ellipse_element.h create mode 100644 frameworks/core/components/svg/svg_line_component.cpp create mode 100644 frameworks/core/components/svg/svg_line_component.h create mode 100644 frameworks/core/components/svg/svg_line_element.h create mode 100644 frameworks/core/components/svg/svg_path_component.cpp create mode 100644 frameworks/core/components/svg/svg_path_component.h create mode 100644 frameworks/core/components/svg/svg_path_element.h create mode 100644 frameworks/core/components/svg/svg_polygon_component.cpp create mode 100644 frameworks/core/components/svg/svg_polygon_component.h create mode 100644 frameworks/core/components/svg/svg_polygon_element.h create mode 100644 frameworks/core/components/svg/svg_polyline_component.cpp create mode 100644 frameworks/core/components/svg/svg_polyline_component.h create mode 100644 frameworks/core/components/svg/svg_polyline_element.h create mode 100644 frameworks/core/components/svg/svg_rect_component.cpp create mode 100644 frameworks/core/components/svg/svg_rect_component.h create mode 100644 frameworks/core/components/svg/svg_rect_element.h create mode 100644 frameworks/core/components/svg/svg_sharp.h create mode 100644 frameworks/core/components/svg/svg_text_component.cpp create mode 100644 frameworks/core/components/svg/svg_text_component.h create mode 100644 frameworks/core/components/svg/svg_text_element.h create mode 100644 frameworks/core/components/svg/svg_text_path_component.cpp create mode 100644 frameworks/core/components/svg/svg_text_path_component.h create mode 100644 frameworks/core/components/svg/svg_text_path_element.h create mode 100644 frameworks/core/components/svg/svg_tspan_component.cpp create mode 100644 frameworks/core/components/svg/svg_tspan_component.h create mode 100644 frameworks/core/components/svg/svg_tspan_element.h create mode 100644 frameworks/core/components/swiper/BUILD.gn create mode 100644 frameworks/core/components/swiper/flutter_render_swiper.cpp create mode 100644 frameworks/core/components/swiper/flutter_render_swiper.h create mode 100644 frameworks/core/components/swiper/render_swiper.cpp create mode 100644 frameworks/core/components/swiper/render_swiper.h create mode 100644 frameworks/core/components/swiper/swiper_component.h create mode 100644 frameworks/core/components/swiper/swiper_element.cpp create mode 100644 frameworks/core/components/swiper/swiper_element.h create mode 100644 frameworks/core/components/swiper/swiper_indicator_theme.h create mode 100644 frameworks/core/components/tab_bar/BUILD.gn create mode 100644 frameworks/core/components/tab_bar/flutter_render_tab_bar.cpp create mode 100644 frameworks/core/components/tab_bar/flutter_render_tab_bar.h create mode 100644 frameworks/core/components/tab_bar/flutter_render_tab_bar_item.cpp create mode 100644 frameworks/core/components/tab_bar/flutter_render_tab_bar_item.h create mode 100644 frameworks/core/components/tab_bar/flutter_render_tab_content.cpp create mode 100644 frameworks/core/components/tab_bar/flutter_render_tab_content.h create mode 100644 frameworks/core/components/tab_bar/render_tab_bar.cpp create mode 100644 frameworks/core/components/tab_bar/render_tab_bar.h create mode 100644 frameworks/core/components/tab_bar/render_tab_bar_item.cpp create mode 100644 frameworks/core/components/tab_bar/render_tab_bar_item.h create mode 100644 frameworks/core/components/tab_bar/render_tab_content.cpp create mode 100644 frameworks/core/components/tab_bar/render_tab_content.h create mode 100644 frameworks/core/components/tab_bar/tab_bar_component.cpp create mode 100644 frameworks/core/components/tab_bar/tab_bar_component.h create mode 100644 frameworks/core/components/tab_bar/tab_bar_element.cpp create mode 100644 frameworks/core/components/tab_bar/tab_bar_element.h create mode 100644 frameworks/core/components/tab_bar/tab_bar_indicator_component.cpp create mode 100644 frameworks/core/components/tab_bar/tab_bar_indicator_component.h create mode 100644 frameworks/core/components/tab_bar/tab_bar_item_component.cpp create mode 100644 frameworks/core/components/tab_bar/tab_bar_item_component.h create mode 100644 frameworks/core/components/tab_bar/tab_bar_item_element.h create mode 100644 frameworks/core/components/tab_bar/tab_bar_size_animation.cpp create mode 100644 frameworks/core/components/tab_bar/tab_bar_size_animation.h create mode 100644 frameworks/core/components/tab_bar/tab_content_component.cpp create mode 100644 frameworks/core/components/tab_bar/tab_content_component.h create mode 100644 frameworks/core/components/tab_bar/tab_content_element.cpp create mode 100644 frameworks/core/components/tab_bar/tab_content_element.h create mode 100644 frameworks/core/components/tab_bar/tab_controller.cpp create mode 100644 frameworks/core/components/tab_bar/tab_controller.h create mode 100644 frameworks/core/components/tab_bar/tab_theme.h create mode 100644 frameworks/core/components/test/BUILD.gn create mode 100644 frameworks/core/components/test/json/align_creator.cpp create mode 100644 frameworks/core/components/test/json/align_creator.h create mode 100644 frameworks/core/components/test/json/background_image_creator.cpp create mode 100644 frameworks/core/components/test/json/background_image_creator.h create mode 100644 frameworks/core/components/test/json/base/component_factory.h create mode 100644 frameworks/core/components/test/json/border_creator.cpp create mode 100644 frameworks/core/components/test/json/border_creator.h create mode 100644 frameworks/core/components/test/json/border_edge_creator.cpp create mode 100644 frameworks/core/components/test/json/border_edge_creator.h create mode 100644 frameworks/core/components/test/json/box_creator.cpp create mode 100644 frameworks/core/components/test/json/box_creator.h create mode 100644 frameworks/core/components/test/json/button_creator.cpp create mode 100644 frameworks/core/components/test/json/button_creator.h create mode 100644 frameworks/core/components/test/json/checkable_creator.cpp create mode 100644 frameworks/core/components/test/json/checkable_creator.h create mode 100644 frameworks/core/components/test/json/clip_creator.cpp create mode 100644 frameworks/core/components/test/json/clip_creator.h create mode 100644 frameworks/core/components/test/json/color_creator.cpp create mode 100644 frameworks/core/components/test/json/color_creator.h create mode 100644 frameworks/core/components/test/json/component_factory.cpp create mode 100644 frameworks/core/components/test/json/component_factory.h create mode 100644 frameworks/core/components/test/json/compose_creator.cpp create mode 100644 frameworks/core/components/test/json/compose_creator.h create mode 100644 frameworks/core/components/test/json/decoration_creator.cpp create mode 100644 frameworks/core/components/test/json/decoration_creator.h create mode 100644 frameworks/core/components/test/json/dialog_creator.cpp create mode 100644 frameworks/core/components/test/json/dialog_creator.h create mode 100644 frameworks/core/components/test/json/display_creator.cpp create mode 100644 frameworks/core/components/test/json/display_creator.h create mode 100644 frameworks/core/components/test/json/divider_creator.cpp create mode 100644 frameworks/core/components/test/json/divider_creator.h create mode 100644 frameworks/core/components/test/json/edge_creator.cpp create mode 100644 frameworks/core/components/test/json/edge_creator.h create mode 100644 frameworks/core/components/test/json/flex_creator.cpp create mode 100644 frameworks/core/components/test/json/flex_creator.h create mode 100644 frameworks/core/components/test/json/flex_item_creator.cpp create mode 100644 frameworks/core/components/test/json/flex_item_creator.h create mode 100644 frameworks/core/components/test/json/focusable_creator.cpp create mode 100644 frameworks/core/components/test/json/focusable_creator.h create mode 100644 frameworks/core/components/test/json/gesture_listener_creator.cpp create mode 100644 frameworks/core/components/test/json/gesture_listener_creator.h create mode 100644 frameworks/core/components/test/json/gradient_creator.cpp create mode 100644 frameworks/core/components/test/json/gradient_creator.h create mode 100644 frameworks/core/components/test/json/grid_creator.cpp create mode 100644 frameworks/core/components/test/json/grid_creator.h create mode 100644 frameworks/core/components/test/json/grid_item_creator.cpp create mode 100644 frameworks/core/components/test/json/grid_item_creator.h create mode 100644 frameworks/core/components/test/json/grid_layout_creator.cpp create mode 100644 frameworks/core/components/test/json/grid_layout_creator.h create mode 100644 frameworks/core/components/test/json/grid_layout_item_creator.cpp create mode 100644 frameworks/core/components/test/json/grid_layout_item_creator.h create mode 100644 frameworks/core/components/test/json/image_creator.cpp create mode 100644 frameworks/core/components/test/json/image_creator.h create mode 100644 frameworks/core/components/test/json/json_ace_page.cpp create mode 100644 frameworks/core/components/test/json/json_ace_page.h create mode 100644 frameworks/core/components/test/json/json_frontend.cpp create mode 100644 frameworks/core/components/test/json/json_frontend.h create mode 100644 frameworks/core/components/test/json/list_creator.cpp create mode 100644 frameworks/core/components/test/json/list_creator.h create mode 100644 frameworks/core/components/test/json/list_item_creator.cpp create mode 100644 frameworks/core/components/test/json/list_item_creator.h create mode 100644 frameworks/core/components/test/json/loading_progress_creator.cpp create mode 100644 frameworks/core/components/test/json/loading_progress_creator.h create mode 100644 frameworks/core/components/test/json/marquee_creator.cpp create mode 100644 frameworks/core/components/test/json/marquee_creator.h create mode 100644 frameworks/core/components/test/json/offset_creator.cpp create mode 100644 frameworks/core/components/test/json/offset_creator.h create mode 100644 frameworks/core/components/test/json/padding_creator.cpp create mode 100644 frameworks/core/components/test/json/padding_creator.h create mode 100644 frameworks/core/components/test/json/popup_creator.cpp create mode 100644 frameworks/core/components/test/json/popup_creator.h create mode 100644 frameworks/core/components/test/json/positioned_creator.cpp create mode 100644 frameworks/core/components/test/json/positioned_creator.h create mode 100644 frameworks/core/components/test/json/progress_creator.cpp create mode 100644 frameworks/core/components/test/json/progress_creator.h create mode 100644 frameworks/core/components/test/json/radius_creator.cpp create mode 100644 frameworks/core/components/test/json/radius_creator.h create mode 100644 frameworks/core/components/test/json/rating_creator.cpp create mode 100644 frameworks/core/components/test/json/rating_creator.h create mode 100644 frameworks/core/components/test/json/scroll_creator.cpp create mode 100644 frameworks/core/components/test/json/scroll_creator.h create mode 100644 frameworks/core/components/test/json/select_creator.cpp create mode 100644 frameworks/core/components/test/json/select_creator.h create mode 100644 frameworks/core/components/test/json/shadow_creator.cpp create mode 100644 frameworks/core/components/test/json/shadow_creator.h create mode 100644 frameworks/core/components/test/json/slider_creator.cpp create mode 100644 frameworks/core/components/test/json/slider_creator.h create mode 100644 frameworks/core/components/test/json/stack_creator.cpp create mode 100644 frameworks/core/components/test/json/stack_creator.h create mode 100644 frameworks/core/components/test/json/swiper_creator.cpp create mode 100644 frameworks/core/components/test/json/swiper_creator.h create mode 100644 frameworks/core/components/test/json/tab_bar_creator.cpp create mode 100644 frameworks/core/components/test/json/tab_bar_creator.h create mode 100644 frameworks/core/components/test/json/tab_content_creator.cpp create mode 100644 frameworks/core/components/test/json/tab_content_creator.h create mode 100644 frameworks/core/components/test/json/text_creator.cpp create mode 100644 frameworks/core/components/test/json/text_creator.h create mode 100644 frameworks/core/components/test/json/text_field_creator.cpp create mode 100644 frameworks/core/components/test/json/text_field_creator.h create mode 100644 frameworks/core/components/test/json/text_span_creator.cpp create mode 100644 frameworks/core/components/test/json/text_span_creator.h create mode 100644 frameworks/core/components/test/json/text_style_creator.cpp create mode 100644 frameworks/core/components/test/json/text_style_creator.h create mode 100644 frameworks/core/components/test/json/texture_creator.cpp create mode 100644 frameworks/core/components/test/json/texture_creator.h create mode 100644 frameworks/core/components/test/json/touch_listener_creator.cpp create mode 100644 frameworks/core/components/test/json/touch_listener_creator.h create mode 100644 frameworks/core/components/test/json/transform_creator.cpp create mode 100644 frameworks/core/components/test/json/transform_creator.h create mode 100644 frameworks/core/components/test/json/tween_creator.cpp create mode 100644 frameworks/core/components/test/json/tween_creator.h create mode 100644 frameworks/core/components/test/json/tween_option_creator.cpp create mode 100644 frameworks/core/components/test/json/tween_option_creator.h create mode 100644 frameworks/core/components/test/json/video_creator.cpp create mode 100644 frameworks/core/components/test/json/video_creator.h create mode 100644 frameworks/core/components/test/json/wrap_creator.cpp create mode 100644 frameworks/core/components/test/json/wrap_creator.h create mode 100644 frameworks/core/components/test/unittest/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/align/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/align/align_creator_test.cpp create mode 100644 frameworks/core/components/test/unittest/border/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/border/border_creator_test.cpp create mode 100644 frameworks/core/components/test/unittest/border/border_edge_creator_test.cpp create mode 100644 frameworks/core/components/test/unittest/border/radius_creator_test.cpp create mode 100644 frameworks/core/components/test/unittest/box/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/box/box_creator_test.cpp create mode 100644 frameworks/core/components/test/unittest/box/box_test_utils.cpp create mode 100644 frameworks/core/components/test/unittest/box/box_test_utils.h create mode 100644 frameworks/core/components/test/unittest/box/color_creator_test.cpp create mode 100644 frameworks/core/components/test/unittest/box/mouse_hover_animation_test.cpp create mode 100644 frameworks/core/components/test/unittest/box/mouse_hover_test.cpp create mode 100644 frameworks/core/components/test/unittest/box/render_box_percent_test.cpp create mode 100644 frameworks/core/components/test/unittest/box/render_box_test.cpp create mode 100644 frameworks/core/components/test/unittest/button/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/button/button_creator_test.cpp create mode 100644 frameworks/core/components/test/unittest/camera/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/camera/camera_component_test.cpp create mode 100644 frameworks/core/components/test/unittest/checkable/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/checkable/checkable_creator_test.cpp create mode 100644 frameworks/core/components/test/unittest/checkable/render_checkable_test.cpp create mode 100644 frameworks/core/components/test/unittest/click_effect/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/click_effect/click_spring_effect_test.cpp create mode 100644 frameworks/core/components/test/unittest/decoration/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/decoration/decoration_creator_test.cpp create mode 100644 frameworks/core/components/test/unittest/dialog/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/dialog/dialog_component_test.cpp create mode 100644 frameworks/core/components/test/unittest/dialog/dialog_creator_test.cpp create mode 100644 frameworks/core/components/test/unittest/dialog/dialog_test_utils.cpp create mode 100644 frameworks/core/components/test/unittest/dialog/dialog_test_utils.h create mode 100644 frameworks/core/components/test/unittest/dialog/popup_creator_test.cpp create mode 100644 frameworks/core/components/test/unittest/dialog/render_bubble_test.cpp create mode 100644 frameworks/core/components/test/unittest/dialog/render_dialog_test.cpp create mode 100644 frameworks/core/components/test/unittest/display/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/display/display_creator_test.cpp create mode 100644 frameworks/core/components/test/unittest/display/display_test_utils.cpp create mode 100644 frameworks/core/components/test/unittest/display/display_test_utils.h create mode 100644 frameworks/core/components/test/unittest/display/render_display_test.cpp create mode 100644 frameworks/core/components/test/unittest/divider/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/divider/divider_creator_test.cpp create mode 100644 frameworks/core/components/test/unittest/drag_bar/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/drag_bar/drag_bar_test_utils.h create mode 100644 frameworks/core/components/test/unittest/drag_bar/render_drag_bar_test.cpp create mode 100644 frameworks/core/components/test/unittest/flex/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/flex/flex_creator_test.cpp create mode 100644 frameworks/core/components/test/unittest/flex/flex_item_creator_test.cpp create mode 100644 frameworks/core/components/test/unittest/flex/flex_test_utils.cpp create mode 100644 frameworks/core/components/test/unittest/flex/flex_test_utils.h create mode 100644 frameworks/core/components/test/unittest/flex/render_column_test.cpp create mode 100644 frameworks/core/components/test/unittest/flex/render_flex_item_test.cpp create mode 100644 frameworks/core/components/test/unittest/flex/render_magic_layout_test.cpp create mode 100644 frameworks/core/components/test/unittest/flex/render_row_test.cpp create mode 100644 frameworks/core/components/test/unittest/gestures/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/gestures/gesture_component_test.cpp create mode 100644 frameworks/core/components/test/unittest/grid/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/grid/grid_creator_test.cpp create mode 100644 frameworks/core/components/test/unittest/grid/grid_test_utils.cpp create mode 100644 frameworks/core/components/test/unittest/grid/grid_test_utils.h create mode 100644 frameworks/core/components/test/unittest/grid/render_grid_test.cpp create mode 100644 frameworks/core/components/test/unittest/grid_layout/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/grid_layout/grid_layout_test_utils.cpp create mode 100644 frameworks/core/components/test/unittest/grid_layout/grid_layout_test_utils.h create mode 100644 frameworks/core/components/test/unittest/grid_layout/render_grid_layout_test.cpp create mode 100644 frameworks/core/components/test/unittest/image/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/image/image_creator_test.cpp create mode 100644 frameworks/core/components/test/unittest/image/image_test_utils.cpp create mode 100644 frameworks/core/components/test/unittest/image/image_test_utils.h create mode 100644 frameworks/core/components/test/unittest/image/render_image_test.cpp create mode 100644 frameworks/core/components/test/unittest/image/render_imagefit_none_test.cpp create mode 100644 frameworks/core/components/test/unittest/image/render_imagefit_others_test.cpp create mode 100644 frameworks/core/components/test/unittest/image_animator/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/image_animator/image_animator_test.cpp create mode 100644 frameworks/core/components/test/unittest/indexer/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/indexer/indexer_test_utils.cpp create mode 100644 frameworks/core/components/test/unittest/indexer/indexer_test_utils.h create mode 100644 frameworks/core/components/test/unittest/indexer/render_indexer_test.cpp create mode 100644 frameworks/core/components/test/unittest/list/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/list/list_creator_test.cpp create mode 100644 frameworks/core/components/test/unittest/list/list_element_test.cpp create mode 100644 frameworks/core/components/test/unittest/list/list_test_utils.cpp create mode 100644 frameworks/core/components/test/unittest/list/list_test_utils.h create mode 100644 frameworks/core/components/test/unittest/list/render_list_test.cpp create mode 100644 frameworks/core/components/test/unittest/marquee/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/marquee/marquee_creator_test.cpp create mode 100644 frameworks/core/components/test/unittest/marquee/render_marquee_test.cpp create mode 100644 frameworks/core/components/test/unittest/menu/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/menu/menu_component_test.cpp create mode 100644 frameworks/core/components/test/unittest/mock/ace_trace_mock.cpp create mode 100644 frameworks/core/components/test/unittest/mock/event_report_mock.cpp create mode 100644 frameworks/core/components/test/unittest/mock/mock_flutter_font_manager.cpp create mode 100644 frameworks/core/components/test/unittest/mock/mock_render_common.cpp create mode 100644 frameworks/core/components/test/unittest/mock/mock_render_common.h create mode 100644 frameworks/core/components/test/unittest/mock/mock_render_depend.h create mode 100644 frameworks/core/components/test/unittest/mock/mock_render_node_factory.cpp create mode 100644 frameworks/core/components/test/unittest/mock/overlay_mock.cpp create mode 100644 frameworks/core/components/test/unittest/mock/overlay_mock.h create mode 100644 frameworks/core/components/test/unittest/mock/render_mock.cpp create mode 100644 frameworks/core/components/test/unittest/mock/render_mock.h create mode 100644 frameworks/core/components/test/unittest/mock/semi_modal_mock.cpp create mode 100644 frameworks/core/components/test/unittest/mock/transform_mock.cpp create mode 100644 frameworks/core/components/test/unittest/mock/transform_mock.h create mode 100644 frameworks/core/components/test/unittest/mock/transition_mock.cpp create mode 100644 frameworks/core/components/test/unittest/mock/transition_mock.h create mode 100644 frameworks/core/components/test/unittest/mock/tween_mock.cpp create mode 100644 frameworks/core/components/test/unittest/mock/tween_mock.h create mode 100644 frameworks/core/components/test/unittest/mock/window_mock.h create mode 100644 frameworks/core/components/test/unittest/padding/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/padding/edge_creator_test.cpp create mode 100644 frameworks/core/components/test/unittest/padding/padding_creator_test.cpp create mode 100644 frameworks/core/components/test/unittest/padding/render_padding_test.cpp create mode 100644 frameworks/core/components/test/unittest/picker/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/picker/render_picker_test.cpp create mode 100644 frameworks/core/components/test/unittest/piece/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/piece/piece_component_test.cpp create mode 100644 frameworks/core/components/test/unittest/progress/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/progress/progress_creator_test.cpp create mode 100644 frameworks/core/components/test/unittest/progress/progress_test_utils.h create mode 100644 frameworks/core/components/test/unittest/progress/render_progress_test.cpp create mode 100644 frameworks/core/components/test/unittest/rating/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/rating/rating_creator_test.cpp create mode 100644 frameworks/core/components/test/unittest/rating/render_rating_test.cpp create mode 100644 frameworks/core/components/test/unittest/refresh/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/refresh/render_refresh_test.cpp create mode 100644 frameworks/core/components/test/unittest/rotation/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/rotation/rotation_test.cpp create mode 100644 frameworks/core/components/test/unittest/scroll/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/scroll/render_scroll_test.cpp create mode 100644 frameworks/core/components/test/unittest/scroll/scroll_creator_test.cpp create mode 100644 frameworks/core/components/test/unittest/scroll/scroll_test_utils.cpp create mode 100644 frameworks/core/components/test/unittest/scroll/scroll_test_utils.h create mode 100644 frameworks/core/components/test/unittest/select/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/select/select_creator_test.cpp create mode 100644 frameworks/core/components/test/unittest/semimodal/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/semimodal/render_semi_modal_test.cpp create mode 100644 frameworks/core/components/test/unittest/shadow/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/shadow/shadow_creator_test.cpp create mode 100644 frameworks/core/components/test/unittest/slider/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/slider/render_slider_test.cpp create mode 100644 frameworks/core/components/test/unittest/slider/slider_creator_test.cpp create mode 100644 frameworks/core/components/test/unittest/stack/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/stack/positioned_creator_test.cpp create mode 100644 frameworks/core/components/test/unittest/stack/render_positioned_test.cpp create mode 100644 frameworks/core/components/test/unittest/stack/render_stack_test.cpp create mode 100644 frameworks/core/components/test/unittest/stack/stack_creator_test.cpp create mode 100644 frameworks/core/components/test/unittest/stack/stack_test_utils.cpp create mode 100644 frameworks/core/components/test/unittest/stack/stack_test_utils.h create mode 100644 frameworks/core/components/test/unittest/stage/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/stage/stage_element_test.cpp create mode 100644 frameworks/core/components/test/unittest/svg/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/svg/render_svg_test.cpp create mode 100644 frameworks/core/components/test/unittest/swiper/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/swiper/render_swiper_test.cpp create mode 100644 frameworks/core/components/test/unittest/swiper/swiper_creator_test.cpp create mode 100644 frameworks/core/components/test/unittest/tabbar/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/tabbar/render_tab_bar_test.cpp create mode 100644 frameworks/core/components/test/unittest/tabbar/render_tabcontent_test.cpp create mode 100644 frameworks/core/components/test/unittest/tabbar/tab_bar_element_test.cpp create mode 100644 frameworks/core/components/test/unittest/tabbar/tab_content_element_test.cpp create mode 100644 frameworks/core/components/test/unittest/tabbar/tab_test_utils.h create mode 100644 frameworks/core/components/test/unittest/tabbar/tabbar_creator_test.cpp create mode 100644 frameworks/core/components/test/unittest/tabbar/tabbar_test_utils.cpp create mode 100644 frameworks/core/components/test/unittest/tabbar/tabbar_test_utils.h create mode 100644 frameworks/core/components/test/unittest/tabbar/tabbarindicator_creator_test.cpp create mode 100644 frameworks/core/components/test/unittest/tabbar/tabcontent_creator_test.cpp create mode 100644 frameworks/core/components/test/unittest/text/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/text/text_creator_test.cpp create mode 100644 frameworks/core/components/test/unittest/text/textspan_creator_test.cpp create mode 100644 frameworks/core/components/test/unittest/text/textstyle_creator_test.cpp create mode 100644 frameworks/core/components/test/unittest/text_field/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/text_field/dsl_text_field_creator_test.cpp create mode 100644 frameworks/core/components/test/unittest/text_field/dsl_text_field_style_creator_test.cpp create mode 100644 frameworks/core/components/test/unittest/text_field/render_text_field_test.cpp create mode 100644 frameworks/core/components/test/unittest/text_select/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/text_select/render_text_select_test.cpp create mode 100644 frameworks/core/components/test/unittest/theme/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/theme/theme_constants_test.cpp create mode 100644 frameworks/core/components/test/unittest/theme/theme_manager_test.cpp create mode 100644 frameworks/core/components/test/unittest/theme/theme_mock.cpp create mode 100644 frameworks/core/components/test/unittest/theme/theme_mock.h create mode 100644 frameworks/core/components/test/unittest/transform/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/transform/render_transform_test.cpp create mode 100644 frameworks/core/components/test/unittest/transform/transform_creator_test.cpp create mode 100644 frameworks/core/components/test/unittest/transition/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/transition/shared_transition_element_test.cpp create mode 100644 frameworks/core/components/test/unittest/transition/transition_element_test.cpp create mode 100644 frameworks/core/components/test/unittest/transition/transition_test_utils.cpp create mode 100644 frameworks/core/components/test/unittest/tween/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/tween/tween_element_test.cpp create mode 100644 frameworks/core/components/test/unittest/video/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/video/render_texture_test.cpp create mode 100644 frameworks/core/components/test/unittest/video/texture_test_utils.cpp create mode 100644 frameworks/core/components/test/unittest/video/texture_test_utils.h create mode 100644 frameworks/core/components/test/unittest/video/video_creator_test.cpp create mode 100644 frameworks/core/components/test/unittest/view_update/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/view_update/view_update_test.cpp create mode 100644 frameworks/core/components/test/unittest/wrap/BUILD.gn create mode 100644 frameworks/core/components/test/unittest/wrap/render_wrap_test.cpp create mode 100644 frameworks/core/components/test/unittest/wrap/wrap_test_utils.cpp create mode 100644 frameworks/core/components/test/unittest/wrap/wrap_test_utils.h create mode 100644 frameworks/core/components/text/BUILD.gn create mode 100644 frameworks/core/components/text/flutter_render_text.cpp create mode 100644 frameworks/core/components/text/flutter_render_text.h create mode 100644 frameworks/core/components/text/render_text.cpp create mode 100644 frameworks/core/components/text/render_text.h create mode 100644 frameworks/core/components/text/text_component.cpp create mode 100644 frameworks/core/components/text/text_component.h create mode 100644 frameworks/core/components/text/text_element.h create mode 100644 frameworks/core/components/text/text_theme.h create mode 100644 frameworks/core/components/text_field/BUILD.gn create mode 100644 frameworks/core/components/text_field/flutter_render_text_field.cpp create mode 100644 frameworks/core/components/text_field/flutter_render_text_field.h create mode 100644 frameworks/core/components/text_field/render_text_field.cpp create mode 100644 frameworks/core/components/text_field/render_text_field.h create mode 100644 frameworks/core/components/text_field/text_field_component.cpp create mode 100644 frameworks/core/components/text_field/text_field_component.h create mode 100644 frameworks/core/components/text_field/text_field_controller.cpp create mode 100644 frameworks/core/components/text_field/text_field_controller.h create mode 100644 frameworks/core/components/text_field/text_field_element.cpp create mode 100644 frameworks/core/components/text_field/text_field_element.h create mode 100644 frameworks/core/components/text_field/textfield_theme.h create mode 100644 frameworks/core/components/text_overlay/BUILD.gn create mode 100644 frameworks/core/components/text_overlay/flutter_render_text_overlay.cpp create mode 100644 frameworks/core/components/text_overlay/flutter_render_text_overlay.h create mode 100644 frameworks/core/components/text_overlay/render_text_overlay.cpp create mode 100644 frameworks/core/components/text_overlay/render_text_overlay.h create mode 100644 frameworks/core/components/text_overlay/text_overlay_component.cpp create mode 100644 frameworks/core/components/text_overlay/text_overlay_component.h create mode 100644 frameworks/core/components/text_overlay/text_overlay_element.cpp create mode 100644 frameworks/core/components/text_overlay/text_overlay_element.h create mode 100644 frameworks/core/components/text_overlay/text_overlay_theme.h create mode 100644 frameworks/core/components/text_span/BUILD.gn create mode 100644 frameworks/core/components/text_span/flutter_render_text_span.cpp create mode 100644 frameworks/core/components/text_span/flutter_render_text_span.h create mode 100644 frameworks/core/components/text_span/render_text_span.cpp create mode 100644 frameworks/core/components/text_span/render_text_span.h create mode 100644 frameworks/core/components/text_span/text_span_component.cpp create mode 100644 frameworks/core/components/text_span/text_span_component.h create mode 100644 frameworks/core/components/text_span/text_span_element.h create mode 100644 frameworks/core/components/theme/BUILD.gn create mode 100644 frameworks/core/components/theme/app_theme.cpp create mode 100644 frameworks/core/components/theme/app_theme.h create mode 100644 frameworks/core/components/theme/card_theme.h create mode 100644 frameworks/core/components/theme/resource_adapter.cpp create mode 100644 frameworks/core/components/theme/resource_adapter.h create mode 100644 frameworks/core/components/theme/resource_adapter_preview.cpp create mode 100644 frameworks/core/components/theme/resource_adapter_preview.h create mode 100644 frameworks/core/components/theme/theme.csv create mode 100644 frameworks/core/components/theme/theme.h create mode 100644 frameworks/core/components/theme/theme_attributes.cpp create mode 100644 frameworks/core/components/theme/theme_attributes.h create mode 100644 frameworks/core/components/theme/theme_constants.cpp create mode 100644 frameworks/core/components/theme/theme_constants.h create mode 100644 frameworks/core/components/theme/theme_manager.cpp create mode 100644 frameworks/core/components/theme/theme_manager.h create mode 100644 frameworks/core/components/theme/theme_style.h create mode 100644 frameworks/core/components/theme/theme_utils.cpp create mode 100644 frameworks/core/components/theme/theme_utils.h create mode 100755 frameworks/core/components/theme/tools/build_theme_code.py create mode 100644 frameworks/core/components/tip/BUILD.gn create mode 100644 frameworks/core/components/tip/flutter_render_tip.cpp create mode 100644 frameworks/core/components/tip/flutter_render_tip.h create mode 100644 frameworks/core/components/tip/render_tip.cpp create mode 100644 frameworks/core/components/tip/render_tip.h create mode 100644 frameworks/core/components/tip/tip_component.cpp create mode 100644 frameworks/core/components/tip/tip_component.h create mode 100644 frameworks/core/components/tip/tip_element.cpp create mode 100644 frameworks/core/components/tip/tip_element.h create mode 100644 frameworks/core/components/toast/BUILD.gn create mode 100644 frameworks/core/components/toast/toast_component.cpp create mode 100644 frameworks/core/components/toast/toast_component.h create mode 100644 frameworks/core/components/toast/toast_theme.h create mode 100644 frameworks/core/components/toggle/BUILD.gn create mode 100644 frameworks/core/components/toggle/flutter_render_toggle.cpp create mode 100644 frameworks/core/components/toggle/flutter_render_toggle.h create mode 100644 frameworks/core/components/toggle/render_toggle.cpp create mode 100644 frameworks/core/components/toggle/render_toggle.h create mode 100644 frameworks/core/components/toggle/toggle_component.cpp create mode 100644 frameworks/core/components/toggle/toggle_component.h create mode 100644 frameworks/core/components/toggle/toggle_element.cpp create mode 100644 frameworks/core/components/toggle/toggle_element.h create mode 100644 frameworks/core/components/toggle/toggle_theme.h create mode 100644 frameworks/core/components/tool_bar/BUILD.gn create mode 100644 frameworks/core/components/tool_bar/flutter_render_tool_bar.cpp create mode 100644 frameworks/core/components/tool_bar/flutter_render_tool_bar.h create mode 100644 frameworks/core/components/tool_bar/flutter_render_tool_bar_item.cpp create mode 100644 frameworks/core/components/tool_bar/flutter_render_tool_bar_item.h create mode 100644 frameworks/core/components/tool_bar/render_tool_bar.cpp create mode 100644 frameworks/core/components/tool_bar/render_tool_bar.h create mode 100644 frameworks/core/components/tool_bar/render_tool_bar_item.cpp create mode 100644 frameworks/core/components/tool_bar/render_tool_bar_item.h create mode 100644 frameworks/core/components/tool_bar/tool_bar_component.cpp create mode 100644 frameworks/core/components/tool_bar/tool_bar_component.h create mode 100644 frameworks/core/components/tool_bar/tool_bar_element.h create mode 100644 frameworks/core/components/tool_bar/tool_bar_item_component.cpp create mode 100644 frameworks/core/components/tool_bar/tool_bar_item_component.h create mode 100644 frameworks/core/components/tool_bar/tool_bar_item_element.cpp create mode 100644 frameworks/core/components/tool_bar/tool_bar_item_element.h create mode 100644 frameworks/core/components/tool_bar/tool_bar_theme.h create mode 100644 frameworks/core/components/touch_listener/BUILD.gn create mode 100644 frameworks/core/components/touch_listener/render_touch_listener.cpp create mode 100644 frameworks/core/components/touch_listener/render_touch_listener.h create mode 100644 frameworks/core/components/touch_listener/touch_listener_component.h create mode 100644 frameworks/core/components/touch_listener/touch_listener_element.h create mode 100644 frameworks/core/components/track/BUILD.gn create mode 100644 frameworks/core/components/track/flutter_render_arc_track.cpp create mode 100644 frameworks/core/components/track/flutter_render_arc_track.h create mode 100644 frameworks/core/components/track/flutter_render_circular_track.cpp create mode 100644 frameworks/core/components/track/flutter_render_circular_track.h create mode 100644 frameworks/core/components/track/flutter_render_linear_track.cpp create mode 100644 frameworks/core/components/track/flutter_render_linear_track.h create mode 100644 frameworks/core/components/track/flutter_render_moon_track.cpp create mode 100644 frameworks/core/components/track/flutter_render_moon_track.h create mode 100644 frameworks/core/components/track/flutter_render_scale_ring_track.cpp create mode 100644 frameworks/core/components/track/flutter_render_scale_ring_track.h create mode 100644 frameworks/core/components/track/render_track.cpp create mode 100644 frameworks/core/components/track/render_track.h create mode 100644 frameworks/core/components/track/track_component.cpp create mode 100644 frameworks/core/components/track/track_component.h create mode 100644 frameworks/core/components/transform/BUILD.gn create mode 100644 frameworks/core/components/transform/click_spring_effect.cpp create mode 100644 frameworks/core/components/transform/click_spring_effect.h create mode 100644 frameworks/core/components/transform/flutter_render_transform.cpp create mode 100644 frameworks/core/components/transform/flutter_render_transform.h create mode 100644 frameworks/core/components/transform/render_transform.cpp create mode 100644 frameworks/core/components/transform/render_transform.h create mode 100644 frameworks/core/components/transform/transform_component.cpp create mode 100644 frameworks/core/components/transform/transform_component.h create mode 100644 frameworks/core/components/transform/transform_element.cpp create mode 100644 frameworks/core/components/transform/transform_element.h create mode 100644 frameworks/core/components/transition/BUILD.gn create mode 100644 frameworks/core/components/transition/transition_component.cpp create mode 100644 frameworks/core/components/transition/transition_component.h create mode 100644 frameworks/core/components/transition/transition_element.cpp create mode 100644 frameworks/core/components/transition/transition_element.h create mode 100644 frameworks/core/components/triangle/BUILD.gn create mode 100644 frameworks/core/components/triangle/flutter_render_triangle.cpp create mode 100644 frameworks/core/components/triangle/flutter_render_triangle.h create mode 100644 frameworks/core/components/triangle/render_triangle.cpp create mode 100644 frameworks/core/components/triangle/render_triangle.h create mode 100644 frameworks/core/components/triangle/triangle_component.cpp create mode 100644 frameworks/core/components/triangle/triangle_component.h create mode 100644 frameworks/core/components/triangle/triangle_element.cpp create mode 100644 frameworks/core/components/triangle/triangle_element.h create mode 100644 frameworks/core/components/tween/BUILD.gn create mode 100644 frameworks/core/components/tween/tween_component.cpp create mode 100644 frameworks/core/components/tween/tween_component.h create mode 100644 frameworks/core/components/tween/tween_element.cpp create mode 100644 frameworks/core/components/tween/tween_element.h create mode 100644 frameworks/core/components/video/BUILD.gn create mode 100644 frameworks/core/components/video/flutter_render_texture.cpp create mode 100644 frameworks/core/components/video/flutter_render_texture.h create mode 100644 frameworks/core/components/video/render_texture.cpp create mode 100644 frameworks/core/components/video/render_texture.h create mode 100644 frameworks/core/components/video/resource/player.cpp create mode 100644 frameworks/core/components/video/resource/player.h create mode 100644 frameworks/core/components/video/resource/resource.cpp create mode 100644 frameworks/core/components/video/resource/resource.h create mode 100644 frameworks/core/components/video/resource/texture.cpp create mode 100644 frameworks/core/components/video/resource/texture.h create mode 100644 frameworks/core/components/video/texture_component.cpp create mode 100644 frameworks/core/components/video/texture_component.h create mode 100644 frameworks/core/components/video/texture_element.h create mode 100644 frameworks/core/components/video/video_component.cpp create mode 100644 frameworks/core/components/video/video_component.h create mode 100644 frameworks/core/components/video/video_element.cpp create mode 100644 frameworks/core/components/video/video_element.h create mode 100644 frameworks/core/components/video/video_theme.h create mode 100644 frameworks/core/components/watch_slider/BUILD.gn create mode 100644 frameworks/core/components/watch_slider/flutter_render_watch_slider.cpp create mode 100644 frameworks/core/components/watch_slider/flutter_render_watch_slider.h create mode 100644 frameworks/core/components/watch_slider/render_watch_slider.cpp create mode 100644 frameworks/core/components/watch_slider/render_watch_slider.h create mode 100644 frameworks/core/components/watch_slider/watch_slider_component.cpp create mode 100644 frameworks/core/components/watch_slider/watch_slider_component.h create mode 100644 frameworks/core/components/watch_slider/watch_slider_element.h create mode 100644 frameworks/core/components/web/BUILD.gn create mode 100644 frameworks/core/components/web/flutter_render_web.cpp create mode 100644 frameworks/core/components/web/flutter_render_web.h create mode 100644 frameworks/core/components/web/render_web.cpp create mode 100644 frameworks/core/components/web/render_web.h create mode 100644 frameworks/core/components/web/resource/web_delegate.cpp create mode 100644 frameworks/core/components/web/resource/web_delegate.h create mode 100644 frameworks/core/components/web/resource/web_resource.cpp create mode 100644 frameworks/core/components/web/resource/web_resource.h create mode 100644 frameworks/core/components/web/web_component.cpp create mode 100644 frameworks/core/components/web/web_component.h create mode 100644 frameworks/core/components/web/web_element.cpp create mode 100644 frameworks/core/components/web/web_element.h create mode 100644 frameworks/core/components/wrap/BUILD.gn create mode 100644 frameworks/core/components/wrap/render_wrap.cpp create mode 100644 frameworks/core/components/wrap/render_wrap.h create mode 100644 frameworks/core/components/wrap/wrap_component.h create mode 100644 frameworks/core/components/wrap/wrap_element.cpp create mode 100644 frameworks/core/components/wrap/wrap_element.h create mode 100644 frameworks/core/event/ace_event_handler.h create mode 100644 frameworks/core/event/ace_event_helper.h create mode 100644 frameworks/core/event/ace_events.h create mode 100644 frameworks/core/event/back_end_event_manager.cpp create mode 100644 frameworks/core/event/back_end_event_manager.h create mode 100644 frameworks/core/event/event_manager.cpp create mode 100644 frameworks/core/event/event_manager.h create mode 100644 frameworks/core/event/event_trigger.h create mode 100644 frameworks/core/event/key_event.cpp create mode 100644 frameworks/core/event/key_event.h create mode 100644 frameworks/core/event/key_event_recognizer.cpp create mode 100644 frameworks/core/event/key_event_recognizer.h create mode 100644 frameworks/core/event/mouse_event.h create mode 100644 frameworks/core/event/mouse_raw_recognizer.cpp create mode 100644 frameworks/core/event/mouse_raw_recognizer.h create mode 100644 frameworks/core/event/multimodal/ace_multimodal_define.h create mode 100644 frameworks/core/event/multimodal/ace_multimodal_event.h create mode 100644 frameworks/core/event/multimodal/multimodal_manager.cpp create mode 100644 frameworks/core/event/multimodal/multimodal_manager.h create mode 100644 frameworks/core/event/multimodal/multimodal_properties.h create mode 100644 frameworks/core/event/multimodal/multimodal_scene.cpp create mode 100644 frameworks/core/event/multimodal/multimodal_scene.h create mode 100644 frameworks/core/event/multimodal/multimodal_subscriber.h create mode 100644 frameworks/core/event/multimodal/voice_event.h create mode 100644 frameworks/core/event/rotation_event.h create mode 100644 frameworks/core/event/test/BUILD.gn create mode 100644 frameworks/core/event/test/unittest/BUILD.gn create mode 100644 frameworks/core/event/test/unittest/event_test.cpp create mode 100644 frameworks/core/event/test/unittest/multimodal_test.cpp create mode 100644 frameworks/core/focus/focus_animation_manager.cpp create mode 100644 frameworks/core/focus/focus_animation_manager.h create mode 100644 frameworks/core/focus/focus_node.cpp create mode 100644 frameworks/core/focus/focus_node.h create mode 100644 frameworks/core/focus/test/BUILD.gn create mode 100644 frameworks/core/focus/test/unittest/focus/BUILD.gn create mode 100644 frameworks/core/focus/test/unittest/focus/focus_test.cpp create mode 100644 frameworks/core/font/constants_converter.cpp create mode 100644 frameworks/core/font/constants_converter.h create mode 100644 frameworks/core/font/flutter_font_collection.cpp create mode 100644 frameworks/core/font/flutter_font_collection.h create mode 100644 frameworks/core/font/flutter_font_loader.cpp create mode 100644 frameworks/core/font/flutter_font_loader.h create mode 100644 frameworks/core/font/font_loader.cpp create mode 100644 frameworks/core/font/font_loader.h create mode 100644 frameworks/core/font/font_manager.cpp create mode 100644 frameworks/core/font/font_manager.h create mode 100644 frameworks/core/gestures/click_recognizer.cpp create mode 100644 frameworks/core/gestures/click_recognizer.h create mode 100644 frameworks/core/gestures/drag_recognizer.cpp create mode 100644 frameworks/core/gestures/drag_recognizer.h create mode 100644 frameworks/core/gestures/gesture_recognizer.cpp create mode 100644 frameworks/core/gestures/gesture_recognizer.h create mode 100644 frameworks/core/gestures/gesture_referee.cpp create mode 100644 frameworks/core/gestures/gesture_referee.h create mode 100644 frameworks/core/gestures/long_press_recognizer.cpp create mode 100644 frameworks/core/gestures/long_press_recognizer.h create mode 100644 frameworks/core/gestures/press_recognizer.cpp create mode 100644 frameworks/core/gestures/press_recognizer.h create mode 100644 frameworks/core/gestures/raw_recognizer.cpp create mode 100644 frameworks/core/gestures/raw_recognizer.h create mode 100644 frameworks/core/gestures/swipe_recognizer.cpp create mode 100644 frameworks/core/gestures/swipe_recognizer.h create mode 100644 frameworks/core/gestures/test/BUILD.gn create mode 100644 frameworks/core/gestures/test/unittest/BUILD.gn create mode 100644 frameworks/core/gestures/test/unittest/gestures_test.cpp create mode 100644 frameworks/core/gestures/touch_event.h create mode 100644 frameworks/core/gestures/velocity.h create mode 100644 frameworks/core/gestures/velocity_tracker.cpp create mode 100644 frameworks/core/gestures/velocity_tracker.h create mode 100644 frameworks/core/image/animated_image_player.cpp create mode 100644 frameworks/core/image/animated_image_player.h create mode 100644 frameworks/core/image/flutter_image_cache.cpp create mode 100644 frameworks/core/image/flutter_image_cache.h create mode 100644 frameworks/core/image/image_cache.cpp create mode 100644 frameworks/core/image/image_cache.h create mode 100644 frameworks/core/image/image_provider.cpp create mode 100644 frameworks/core/image/image_provider.h create mode 100644 frameworks/core/image/render_image_provider.h create mode 100644 frameworks/core/image/test/BUILD.gn create mode 100644 frameworks/core/image/test/unittest/BUILD.gn create mode 100644 frameworks/core/image/test/unittest/image_cache_test.cpp create mode 100644 frameworks/core/image/test/unittest/image_cache_test.h create mode 100644 frameworks/core/image/test/unittest/image_provider_test.cpp create mode 100644 frameworks/core/image/test/unittest/image_provider_test_utils.h create mode 100644 frameworks/core/mock/mock_ace_application_info.cpp create mode 100644 frameworks/core/mock/mock_resource_register.h create mode 100644 frameworks/core/mock/mock_system_properties.cpp create mode 100644 frameworks/core/mock/mock_watch_dog.cpp create mode 100644 frameworks/core/pipeline/BUILD.gn create mode 100644 frameworks/core/pipeline/LICENSE create mode 100644 frameworks/core/pipeline/base/component.cpp create mode 100644 frameworks/core/pipeline/base/component.h create mode 100644 frameworks/core/pipeline/base/component_group.h create mode 100644 frameworks/core/pipeline/base/component_group_element.cpp create mode 100644 frameworks/core/pipeline/base/component_group_element.h create mode 100644 frameworks/core/pipeline/base/composed_component.cpp create mode 100644 frameworks/core/pipeline/base/composed_component.h create mode 100644 frameworks/core/pipeline/base/composed_element.cpp create mode 100644 frameworks/core/pipeline/base/composed_element.h create mode 100644 frameworks/core/pipeline/base/constants.cpp create mode 100644 frameworks/core/pipeline/base/constants.h create mode 100644 frameworks/core/pipeline/base/element.cpp create mode 100644 frameworks/core/pipeline/base/element.h create mode 100644 frameworks/core/pipeline/base/factories/flutter_node_factory.h create mode 100644 frameworks/core/pipeline/base/factories/flutter_render_factory.h create mode 100644 frameworks/core/pipeline/base/factories/render_factory.h create mode 100644 frameworks/core/pipeline/base/factories/render_node_factory.cpp create mode 100644 frameworks/core/pipeline/base/factories/render_node_factory.h create mode 100644 frameworks/core/pipeline/base/flutter_render_context.cpp create mode 100644 frameworks/core/pipeline/base/flutter_render_context.h create mode 100644 frameworks/core/pipeline/base/measurable.h create mode 100644 frameworks/core/pipeline/base/overlay_show_option.h create mode 100644 frameworks/core/pipeline/base/position_layout_utils.h create mode 100644 frameworks/core/pipeline/base/related_node.cpp create mode 100644 frameworks/core/pipeline/base/related_node.h create mode 100644 frameworks/core/pipeline/base/render_component.h create mode 100644 frameworks/core/pipeline/base/render_context.h create mode 100644 frameworks/core/pipeline/base/render_element.cpp create mode 100644 frameworks/core/pipeline/base/render_element.h create mode 100644 frameworks/core/pipeline/base/render_layer.h create mode 100644 frameworks/core/pipeline/base/render_node.cpp create mode 100644 frameworks/core/pipeline/base/render_node.h create mode 100644 frameworks/core/pipeline/base/scoped_canvas_state.h create mode 100644 frameworks/core/pipeline/base/single_child.h create mode 100644 frameworks/core/pipeline/base/sole_child_component.h create mode 100644 frameworks/core/pipeline/base/sole_child_element.cpp create mode 100644 frameworks/core/pipeline/base/sole_child_element.h create mode 100644 frameworks/core/pipeline/layers/ace_scene_builder.cpp create mode 100644 frameworks/core/pipeline/layers/ace_scene_builder.h create mode 100644 frameworks/core/pipeline/layers/clip_layer.cpp create mode 100644 frameworks/core/pipeline/layers/clip_layer.h create mode 100644 frameworks/core/pipeline/layers/container_layer.cpp create mode 100644 frameworks/core/pipeline/layers/container_layer.h create mode 100644 frameworks/core/pipeline/layers/dropfilter_layer.cpp create mode 100644 frameworks/core/pipeline/layers/dropfilter_layer.h create mode 100644 frameworks/core/pipeline/layers/flutter_scene_builder.cpp create mode 100644 frameworks/core/pipeline/layers/flutter_scene_builder.h create mode 100644 frameworks/core/pipeline/layers/gradient_layer.cpp create mode 100644 frameworks/core/pipeline/layers/gradient_layer.h create mode 100644 frameworks/core/pipeline/layers/layer.cpp create mode 100644 frameworks/core/pipeline/layers/layer.h create mode 100644 frameworks/core/pipeline/layers/offset_layer.cpp create mode 100644 frameworks/core/pipeline/layers/offset_layer.h create mode 100644 frameworks/core/pipeline/layers/opacity_layer.cpp create mode 100644 frameworks/core/pipeline/layers/opacity_layer.h create mode 100644 frameworks/core/pipeline/layers/picture_layer.cpp create mode 100644 frameworks/core/pipeline/layers/picture_layer.h create mode 100644 frameworks/core/pipeline/layers/scene_builder.h create mode 100644 frameworks/core/pipeline/layers/texture_layer.cpp create mode 100644 frameworks/core/pipeline/layers/texture_layer.h create mode 100644 frameworks/core/pipeline/layers/transform_layer.cpp create mode 100644 frameworks/core/pipeline/layers/transform_layer.h create mode 100644 frameworks/core/pipeline/pipeline_context.cpp create mode 100644 frameworks/core/pipeline/pipeline_context.h create mode 100644 frameworks/core/pipeline/test/BUILD.gn create mode 100644 frameworks/core/pipeline/test/unittest/context/BUILD.gn create mode 100644 frameworks/core/pipeline/test/unittest/context/pipeline_context_test.cpp create mode 100644 frameworks/core/pipeline/test/unittest/unittest_config.gni create mode 100644 frameworks/core/theme/theme_manager.cpp create mode 100644 frameworks/core/theme/theme_manager.h create mode 100755 interfaces/kits/js/declaration/BUILD.gn create mode 100644 interfaces/kits/js/declaration/api/@internal/console.d.ts create mode 100644 interfaces/kits/js/declaration/api/@internal/featureability.d.ts create mode 100644 interfaces/kits/js/declaration/api/@internal/global.d.ts create mode 100644 interfaces/kits/js/declaration/api/@internal/index.d.ts create mode 100644 interfaces/kits/js/declaration/api/@internal/viewmodel.d.ts create mode 100644 interfaces/kits/js/declaration/api/@system.app.d.ts create mode 100644 interfaces/kits/js/declaration/api/@system.battery.d.ts create mode 100644 interfaces/kits/js/declaration/api/@system.brightness.d.ts create mode 100644 interfaces/kits/js/declaration/api/@system.cipher.d.ts create mode 100644 interfaces/kits/js/declaration/api/@system.configuration.d.ts create mode 100644 interfaces/kits/js/declaration/api/@system.device.d.ts create mode 100644 interfaces/kits/js/declaration/api/@system.fetch.d.ts create mode 100644 interfaces/kits/js/declaration/api/@system.file.d.ts create mode 100644 interfaces/kits/js/declaration/api/@system.geolocation.d.ts create mode 100644 interfaces/kits/js/declaration/api/@system.mediaquery.d.ts create mode 100644 interfaces/kits/js/declaration/api/@system.network.d.ts create mode 100644 interfaces/kits/js/declaration/api/@system.notification.d.ts create mode 100644 interfaces/kits/js/declaration/api/@system.package.d.ts create mode 100644 interfaces/kits/js/declaration/api/@system.prompt.d.ts create mode 100644 interfaces/kits/js/declaration/api/@system.request.d.ts create mode 100644 interfaces/kits/js/declaration/api/@system.router.d.ts create mode 100644 interfaces/kits/js/declaration/api/@system.sensor.d.ts create mode 100644 interfaces/kits/js/declaration/api/@system.shortcut.d.ts create mode 100644 interfaces/kits/js/declaration/api/@system.storage.d.ts create mode 100644 interfaces/kits/js/declaration/api/@system.vibrator.d.ts create mode 100644 ohos.build create mode 100644 test/resource/graphicalbasicability/imagecache/images/1008157312073340586 create mode 100644 test/resource/graphicalbasicability/imagecache/images/13610839755484614436 create mode 100644 test/resource/graphicalbasicability/imagecache/images/5841967474238710136 create mode 100644 test/resource/graphicalbasicability/imagecache/images/748621363886323660 create mode 100644 test/resource/graphicalbasicability/imagecache/images/8819493328252140263 create mode 100644 test/resource/graphicalbasicability/imageprovider/images/broken.bmp create mode 100644 test/resource/graphicalbasicability/imageprovider/images/broken.gif create mode 100644 test/resource/graphicalbasicability/imageprovider/images/broken.jpg create mode 100644 test/resource/graphicalbasicability/imageprovider/images/broken.png create mode 100644 test/resource/graphicalbasicability/imageprovider/images/broken.webp create mode 100644 test/resource/graphicalbasicability/imageprovider/images/unbroken.bmp create mode 100644 test/resource/graphicalbasicability/imageprovider/images/unbroken.gif create mode 100644 test/resource/graphicalbasicability/imageprovider/images/unbroken.jpg create mode 100644 test/resource/graphicalbasicability/imageprovider/images/unbroken.png create mode 100644 test/resource/graphicalbasicability/imageprovider/images/unbroken.webp create mode 100644 test/resource/graphicalbasicability/ohos_test.xml create mode 100644 test/resource/jscard/carddomclock/correct.json create mode 100644 test/resource/jscard/carddomclock/error.json create mode 100644 test/resource/jscard/ohos_test.xml diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..e69de29b diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..0eb4fb60 --- /dev/null +++ b/.gitignore @@ -0,0 +1,14 @@ +.vs/ +.vscode/ +*.iml +.idea/ +CMakeLists.txt +cmake-build-debug/ +lite/appfwk/ +lite/base/ +lite/interfaces/ +lite/jsfwk/ +lite/maplejs/ +lite/tools/ +lite/ui/ + diff --git a/BUILD.gn b/BUILD.gn new file mode 100644 index 00000000..8c10ac95 --- /dev/null +++ b/BUILD.gn @@ -0,0 +1,134 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +config("accessibility_library_config") { + include_dirs = [ "../accessibility/common/" ] +} + +group("ace_packages") { + deps = [] + + # core library for Ability Cross-platform Environment(ACE) JS + deps += [ + "$ace_root/frameworks/core/components/theme:build_theme_code", + "adapter/common/cpp:libace", + ] + + if (is_wearable_product) { + deps += [ "adapter/common/cpp:libace_debug" ] + } + + if (!is_wearable_product) { + deps += [ + "adapter/common/cpp:libace_engine_qjs", + "adapter/common/cpp:libace_engine_qjs_debug", + "adapter/common/cpp:libace_engine_declarative_qjs" + ] + } +} + +group("ace_test_packages") { + # ohos platform + deps = [] +} + +source_set("third_party_cjson") { + sources = [ "$cjson_root/cJSON.c" ] +} + +# Common config for Ability Cross-platform Environment(ACE) source +config("ace_config") { + visibility = [ ":*" ] + include_dirs = [ + "$ace_root", + "$ace_root/frameworks", + "$root_out_dir/ace/framework", + "//third_party/zlib", + ] + if (is_standard_system) { + include_dirs += [ + "//base/global/resmgr_standard/frameworks/resmgr/include", + "//base/global/resmgr_standard/interfaces/innerkits/include", + ] + } + defines = ace_common_defines + + if (is_wearable_product) { + defines += ace_wearable_defines + } + + if (enable_dump_drawcmd) { + defines += [ "DUMP_DRAW_CMD" ] + } + + if (is_standard_system) { + defines += [ "SK_BUILD_FOR_UNIX" ] + } + + cflags = [ + "-fvisibility=hidden", + "-fdata-sections", + "-ffunction-sections", + "-Os", + ] + + cflags_cc = [ + "-fvisibility-inlines-hidden", + "-Os", + ] + + if (use_js_debug) { + cflags_cc += [ + "-fexceptions", + "-fno-complete-member-pointers", + "-Wno-implicit-fallthrough", + ] + } + + if (use_mingw_win) { + cflags += [ "-std=c++17" ] + defines += [ "_USE_MATH_DEFINES" ] + } +} + +config("ace_test_config") { + visibility = [ ":*" ] + include_dirs = [ + "$ace_root", + "$ace_root/frameworks", + "$root_out_dir/ace/framework", + ] + if (is_standard_system) { + include_dirs += [ + "//base/global/resmgr_standard/frameworks/resmgr/include", + "//base/global/resmgr_standard/interfaces/innerkits/include", + ] + } + defines = ace_common_defines + defines += ace_ohos_defines + + if (is_wearable_product) { + defines += ace_wearable_defines + } + + cflags = [ + "-fvisibility=hidden", + "-fdata-sections", + "-ffunction-sections", + ] + + cflags_cc = [ "-fvisibility-inlines-hidden" ] +} diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..4947287f --- /dev/null +++ b/LICENSE @@ -0,0 +1,177 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/OAT.xml b/OAT.xml new file mode 100644 index 00000000..433926ba --- /dev/null +++ b/OAT.xml @@ -0,0 +1,91 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/README.en.md b/README.en.md deleted file mode 100644 index 3f94b629..00000000 --- a/README.en.md +++ /dev/null @@ -1,36 +0,0 @@ -# ace_ace_engine - -#### Description -JS UI framework | JS UI开发框架 - -#### Software Architecture -Software architecture description - -#### Installation - -1. xxxx -2. xxxx -3. xxxx - -#### Instructions - -1. xxxx -2. xxxx -3. xxxx - -#### Contribution - -1. Fork the repository -2. Create Feat_xxx branch -3. Commit your code -4. Create Pull Request - - -#### Gitee Feature - -1. You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md -2. Gitee blog [blog.gitee.com](https://blog.gitee.com) -3. Explore open source project [https://gitee.com/explore](https://gitee.com/explore) -4. The most valuable open source project [GVP](https://gitee.com/gvp) -5. The manual of Gitee [https://gitee.com/help](https://gitee.com/help) -6. The most popular members [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) diff --git a/README.md b/README.md index 6e77a795..b9cf9967 100644 --- a/README.md +++ b/README.md @@ -1,37 +1,102 @@ -# ace_ace_engine +# JS UI Framework -#### 介绍 -JS UI framework | JS UI开发框架 +- [Introduction](#section15701932113019) +- [Directory Structure](#section1791423143211) +- [When to Use](#section171384529150) +- [Available Components](#section271831717166) +- [Repositories Involved](#section1447164910172) -#### 软件架构 -软件架构说明 +## Introduction + +The OpenHarmony JS UI framework provides basic, container, and canvas UI components and standard CSS animation capabilities. It supports the web-development-like programming paradigm. + +- **Web-development-like paradigm** + + The JS UI framework supports languages that are similar to those for web development, such as HTML and CSS. You can use them to describe the page layout and style, and use JavaScript \(conforming to the ECMAScript specification\) for page behavior. This paradigm allows you to avoid code for UI state switching. The view configuration information is intuitive. -#### 安装教程 +**Figure 1** Framework architecture +![](figures/framework-architecture.png "framework-architecture") -1. xxxx -2. xxxx -3. xxxx +The JS UI framework consists of the application, framework, engine, and porting layers. -#### 使用说明 +- **Application** -1. xxxx -2. xxxx -3. xxxx + Contains apps with Feature Abilities \(FAs\) developed with the JS UI framework. The FA app in this document refers to the app with FAs developed using JavaScript. -#### 参与贡献 +- **Framework** -1. Fork 本仓库 -2. 新建 Feat_xxx 分支 -3. 提交代码 -4. 新建 Pull Request + Parses UI pages and provides the Model-View-ViewModel \(MVVM\), page routing, custom components and more for front end development. + +- **Engine** + + Accomplishes animation parsing, Document Object Model \(DOM\) building, layout computing, rendering command building and drawing, and event management. + +- **Porting Layer** + + Abstracts the platform layer to provide abstract interfaces to connect to the platform. For example, event interconnection, rendering pipeline interconnection, and lifecycle interconnection. -#### 特技 +## Directory Structure + +The source code of the framework is stored in **/foundation/ace/ace\_engine**. The following shows the directory structure. + +``` +/foundation/ace/ace_engine +├── adapter # Platform adaptation code +│ ├── common +│ └── ohos +├── frameworks # Framework code +│ ├── base # Basic libraries +│ ├── bridge # Bridging layer for frontend and backend components +│ └── core # Core components +``` + +## When to Use + +JS UI framework provides various UI components with rich functionalities and style definitions. You can use and reuse any component anywhere as needed. You can customize new components by combining existing ones to simplify development. + +## Available Components + +**Table 1** Components provided by the framework + + + + + + + + + + + + + + + + + + + +

Type

+

Components

+

Basic

+

button, text, input, label, image, progress, rating, span, marquee, image-animator, divider, menu, chart, option, picker, picker-view, piece, qrcode, select, slider, switch, toolbar, toolbar-item, toggle

+

Container

+

div, list, list-item, list-item-group, stack, swiper, tabs, tab-bar, tab-content, refresh, dialog, badge, panel, popup, stepper, stepper-item

+

Canvas

+

canvas

+

Grid

+

grid-container, grid-row, grid-col

+
+ +## Repositories Involved + +JS UI framework + +**ace\_ace\_engine** + +ace\_ace\_engine\_lite + +ace\_napi -1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md -2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) -3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 -4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 -5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) -6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) diff --git a/README_zh.md b/README_zh.md new file mode 100644 index 00000000..596939a2 --- /dev/null +++ b/README_zh.md @@ -0,0 +1,102 @@ +# JS UI框架组件 + +- [简介](#section15701932113019) +- [目录](#section1791423143211) +- [使用场景](#section171384529150) +- [接口说明](#section271831717166) +- [涉及仓](#section1447164910172) + +## 简介 + +JS UI框架是OpenHarmony UI开发框架,提供基础类、容器类、画布类等UI组件和标准CSS动画能力,支持类Web范式编程。 + +- **类Web范式编程** + + JS UI框架采用类HTML和CSS Web编程语言作为页面布局和页面样式的开发语言,页面业务逻辑则支持ECMAScript规范的JavaScript语言。JS UI框架提供的类Web编程范式,可以让开发者避免编写UI状态切换的代码,视图配置信息更加直观。 + + +**图 1** JS UI框架架构 +![](figures/JS-UI框架架构.png "JS-UI框架架构") + +JS UI框架包括应用层(Application)、前端框架层(Framework)、引擎层(Engine)和平台适配层(Porting Layer)。 + +- **Application** + + 应用层表示开发者使用JS UI框架开发的FA应用,这里的FA应用特指JS FA应用。 + +- **Framework** + + 前端框架层主要完成前端页面解析,以及提供MVVM(Model-View-ViewModel)开发模式、页面路由机制和自定义组件等能力。 + +- **Engine** + + 引擎层主要提供动画解析、DOM(Document Object Model)树构建、布局计算、渲染命令构建与绘制、事件管理等能力。 + +- **Porting Layer** + + 适配层主要完成对平台层进行抽象,提供抽象接口,可以对接到系统平台。比如:事件对接、渲染管线对接和系统生命周期对接等。 + + +## 目录 + +JS UI开发框架源代码在/foundation/ace/ace\_engine下,目录结构如下图所示: + +``` +/foundation/ace/ace_engine +├── adapter # 平台适配目录 +│ ├── common +│ └── ohos +├── frameworks # 框架代码 +│ ├── base # 基础库 +│ ├── bridge # 前后端组件对接层 +│ └── core # 核心组件目录 +``` + +## 使用场景 + +JS UI框架提供了丰富的、功能强大的UI组件、样式定义,组件之间相互独立,随取随用,也可以在需求相同的地方重复使用。开发者还可以通过组件间合理的搭配定义满足业务需求的新组件,减少开发量。 + +## 接口说明 + +**表 1** 组件介绍 + + + + + + + + + + + + + + + + + + + +

组件类型

+

主要组件

+

基础组件

+

button、text、input、label、image、progress、rating、span、marquee、image-animator、divider、menu、chart、option、picker、picker-view、piece、qrcode、select、slider、switch、toolbar、toolbar-item、toggle

+

容器组件

+

div、list、list-item、list-item-group、stack、swiper、tabs、tab-bar、tab-content、refresh、dialog、badge、panel、popup、stepper、stepper-item

+

画布组件

+

canvas

+

栅格组件

+

grid-container、grid-row、grid-col

+
+ +## 涉及仓 + +JS UI框架子系统 + +**ace\_ace\_engine** + +ace\_ace\_engine\_lite + +ace\_napi + diff --git a/ace_config.gni b/ace_config.gni new file mode 100644 index 00000000..6dbe159b --- /dev/null +++ b/ace_config.gni @@ -0,0 +1,26 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//third_party/flutter/flutter_ace_config.gni") + +ace_root = "//foundation/ace/ace_engine" + +ace_test_output_root = "ace_engine_standard" + +objcopy_aarch64 = "//prebuilts/gcc/linux-x86/arm/gcc-linaro-7.5.0-arm-linux-gnueabi/arm-linux-gnueabi/bin/objcopy" +objcopy_x86_64 = "" +ark_tools_root = "//prebuilts/ace-toolkit/ace-loader/panda" +node_js_path = "//prebuilts/ace-toolkit/nodejs/node-v12.18.4-linux-x64/bin/" +cjson_root = "//third_party/cJSON" + +use_js_debug = false diff --git a/adapter/common/cpp/BUILD.gn b/adapter/common/cpp/BUILD.gn new file mode 100644 index 00000000..cdc65abe --- /dev/null +++ b/adapter/common/cpp/BUILD.gn @@ -0,0 +1,179 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +# build static +template("ace_base_platform_source_set") { + # get is_ohos_platform + forward_variables_from(invoker, "*") + + ohos_source_set(target_name) { + defines += invoker.defines + configs = [ + "$ace_root:ace_config", + "$flutter_root:flutter_config", + "$flutter_root:icu_config_$platform", + ] + + include_dirs = [ "//utils/native/base/include" ] + + sources = [ + "ace_res_config.cpp", + "ace_res_key_parser.cpp", + "ace_trace.cpp", + "file_asset_provider.cpp", + "flutter_task_executor.cpp", + "localization.cpp", + "thread_util.cpp", + ] + if (is_standard_system) { + sources += [ "$ace_root/adapter/common/cpp/flutter_window.cpp" ] + external_deps = [ + "appexecfwk_standard:libeventhandler", + "ipc:ipc_core", + ] + } + + if (is_ohos_platform) { + deps = [ "//third_party/zlib:libz" ] + } + } +} + +ace_base_platform_source_set("ace_base_common_ohos") { + defines = ace_ohos_defines + is_ohos_platform = true + platform = "ohos" +} + +# Build libace shared library +template("libace_shared_library") { + # get is_ohos_platform + forward_variables_from(invoker, "*") + + ohos_shared_library(target_name) { + deps = [ + "$ace_root/frameworks/base:ace_base_$platform", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/bridge:js_framework_$platform", + "$ace_root/frameworks/core:ace_core_$platform", + "$ace_root/frameworks/core/accessibility:ace_accessibility_$platform", + ] + + if (link_qjs_engine) { + if (use_js_debug) { + deps += [ "$ace_root/frameworks/bridge:js_engine_debug_$platform" ] + } else { + deps += [ + "$ace_root/frameworks/bridge:js_engine_$platform", + "$ace_root/frameworks/bridge:declarative_js_engine_qjs_$platform", + ] + } + } + + if (is_ohos_platform) { + subsystem_name = "ace" + } + + if (is_standard_system) { + part_name = "ace_engine_standard" + } + } +} + +libace_shared_library("libace") { + is_ohos_platform = true + if (is_standard_system) { + platform = "ohos" + } + if (is_wearable_product) { + link_qjs_engine = true + use_js_debug = false + } else { + link_qjs_engine = false + } +} + +libace_shared_library("libace_debug") { + is_ohos_platform = true + if (is_standard_system) { + platform = "ohos" + } + if (is_wearable_product) { + link_qjs_engine = true + use_js_debug = true + } else { + link_qjs_engine = false + } +} + +# build platform engine sources +template("ace_platform_engine") { + # get is_ohos_platform, use_quickjs_engine + forward_variables_from(invoker, "*") + + ohos_shared_library(target_name) { + deps = [] + + if (is_ohos_platform) { + deps += [ "$ace_root/adapter/common/cpp:libace" ] + } + + if (use_quickjs_engine) { + if (use_js_debug) { + deps += [ "$ace_root/frameworks/bridge:js_engine_debug_$platform" ] + } else if (is_declarative) { + deps += [ "$ace_root/frameworks/bridge:declarative_js_engine_qjs_$platform" ] + } else { + deps += [ "$ace_root/frameworks/bridge:js_engine_$platform"] + } + } + + if (is_ohos_platform) { + subsystem_name = "ace" + } + + if (is_standard_system) { + part_name = "ace_engine_standard" + } + } +} + +ace_platform_engine("libace_engine_qjs") { + is_ohos_platform = true + use_quickjs_engine = true + if (is_standard_system) { + platform = "ohos" + } + is_declarative = false +} + +ace_platform_engine("libace_engine_declarative_qjs") { + is_ohos_platform = true + use_quickjs_engine = true + if (is_standard_system) { + platform = "ohos" + } + is_declarative = true +} + +ace_platform_engine("libace_engine_qjs_debug") { + is_ohos_platform = true + use_quickjs_engine = true + use_js_debug = true + if (is_standard_system) { + platform = "ohos" + } +} diff --git a/adapter/common/cpp/ace_res_config.cpp b/adapter/common/cpp/ace_res_config.cpp new file mode 100644 index 00000000..be8ad48d --- /dev/null +++ b/adapter/common/cpp/ace_res_config.cpp @@ -0,0 +1,720 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "adapter/common/cpp/ace_res_config.h" + +#include + +#include "unicode/locid.h" + +#include "adapter/common/cpp/ace_res_key_parser.h" +#include "base/json/json_util.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace { +namespace { + +const std::unordered_map LOCALE_PARENTS { + { "ar-DZ", "ar-015" }, + { "ar-EH", "ar-015" }, + { "ar-LY", "ar-015" }, + { "ar-MA", "ar-015" }, + { "ar-TN", "ar-015" }, + { "zh-MO", "zh-HK" }, + { "en-150", "en-001" }, + { "en-AG", "en-001" }, + { "en-AI", "en-001" }, + { "en-AU", "en-001" }, + { "en-BB", "en-001" }, + { "en-BE", "en-001" }, + { "en-BM", "en-001" }, + { "en-BS", "en-001" }, + { "en-BZ", "en-001" }, + { "en-CC", "en-001" }, + { "en-CK", "en-001" }, + { "en-CX", "en-001" }, + { "en-DG", "en-001" }, + { "en-ER", "en-001" }, + { "en-FK", "en-001" }, + { "en-FM", "en-001" }, + { "en-GB", "en-001" }, + { "en-GD", "en-001" }, + { "en-GG", "en-001" }, + { "en-GI", "en-001" }, + { "en-GY", "en-001" }, + { "en-HK", "en-001" }, + { "en-IE", "en-001" }, + { "en-IM", "en-001" }, + { "en-IN", "en-001" }, + { "en-IO", "en-001" }, + { "en-JE", "en-001" }, + { "en-KI", "en-001" }, + { "en-KN", "en-001" }, + { "en-KY", "en-001" }, + { "en-LC", "en-001" }, + { "en-LR", "en-001" }, + { "en-LS", "en-001" }, + { "en-MM", "en-001" }, + { "en-MO", "en-001" }, + { "en-MS", "en-001" }, + { "en-MT", "en-001" }, + { "en-MY", "en-001" }, + { "en-NF", "en-001" }, + { "en-NR", "en-001" }, + { "en-NU", "en-001" }, + { "en-NZ", "en-001" }, + { "en-PG", "en-001" }, + { "en-PK", "en-001" }, + { "en-PN", "en-001" }, + { "en-PW", "en-001" }, + { "en-SB", "en-001" }, + { "en-SC", "en-001" }, + { "en-SD", "en-001" }, + { "en-SG", "en-001" }, + { "en-SH", "en-001" }, + { "en-SL", "en-001" }, + { "en-SS", "en-001" }, + { "en-SX", "en-001" }, + { "en-SZ", "en-001" }, + { "en-TC", "en-001" }, + { "en-TK", "en-001" }, + { "en-TT", "en-001" }, + { "en-TV", "en-001" }, + { "en-VC", "en-001" }, + { "en-VG", "en-001" }, + { "en-WS", "en-001" }, + { "en-ZG", "en-001" }, + { "es-AR", "es-419" }, + { "es-BO", "es-419" }, + { "es-BR", "es-419" }, + { "es-BZ", "es-419" }, + { "es-CL", "es-419" }, + { "es-CO", "es-419" }, + { "es-CR", "es-419" }, + { "es-CU", "es-419" }, + { "es-DO", "es-419" }, + { "es-EC", "es-419" }, + { "es-GT", "es-419" }, + { "es-HN", "es-419" }, + { "es-MX", "es-419" }, + { "es-NI", "es-419" }, + { "es-PA", "es-419" }, + { "es-PE", "es-419" }, + { "es-PR", "es-419" }, + { "es-PY", "es-419" }, + { "es-SV", "es-419" }, + { "es-US", "es-419" }, + { "es-UY", "es-419" }, + { "es-VE", "es-419" }, + { "pt-AO", "pt-PT" }, + { "pt-CH", "pt-PT" }, + { "pt-CV", "pt-PT" }, + { "pt-GQ", "pt-PT" }, + { "pt-GW", "pt-PT" }, + { "pt-LU", "pt-PT" }, + { "pt-MO", "pt-PT" }, + { "pt-MZ", "pt-PT" }, + { "pt-ST", "pt-PT" }, + { "pt-TL", "pt-PT" }, +}; + +const std::unordered_map DEFAULT_LANG { + { "es-419", "es-US" }, + { "en-Qaag", "en-GB" }, + { "en-001", "en-GB" }, +}; + +const std::unordered_map LANGUAGE_CODE_MAP { + { "iw", "he" }, + { "tl", "fil" }, + { "in", "id" }, +}; + +std::string ComputeScript(const AceResConfig& resConfig) +{ + icu::Locale locale(resConfig.language_.c_str(), resConfig.region_.c_str()); + UErrorCode status = U_ZERO_ERROR; + locale.addLikelySubtags(status); + if (status != U_ZERO_ERROR) { + return std::string(); + } + return locale.getScript(); +} + +AceResConfig ConvertLocaleTagToConfig(const std::string& localeTag) +{ + UErrorCode status = U_ZERO_ERROR; + icu::Locale locale = icu::Locale::forLanguageTag(icu::StringPiece(localeTag), status); + if (status != U_ZERO_ERROR) { + LOGE("This localeTag is not valid."); + return AceResConfig("", "", ""); + } + return AceResConfig(locale.getLanguage(), locale.getScript(), locale.getCountry()); +} + +std::string ConvertLocaleConfigToTag(const AceResConfig& localeConfig) +{ + std::string localeTag = localeConfig.language_; + if (!localeConfig.script_.empty()) { + localeTag += ('-' + localeConfig.script_); + } + if (!localeConfig.region_.empty()) { + localeTag += ('-' + localeConfig.region_); + } + return localeTag; +} + +bool IsPseudoLocale(const AceResConfig& resConfig) +{ + return (resConfig.language_ == "en" && resConfig.region_ == "XA") || + (resConfig.language_ == "ar" && resConfig.region_ == "XB"); +} + +void MatchLocaleConfig(const std::vector& candidatesLocaleConfig, const AceResConfig& deviceLocaleConfig, + std::vector& matchedLocaleConfigs) +{ + std::string deviceLanguage = deviceLocaleConfig.language_; + std::string deviceScript = deviceLocaleConfig.script_; + auto iter = LANGUAGE_CODE_MAP.find(deviceLanguage); + if (iter != LANGUAGE_CODE_MAP.end()) { + deviceLanguage = iter->second; + } + for (auto& candidate : candidatesLocaleConfig) { + std::string candidateLanguage = candidate.language_; + // Languages codes need to be specially handled. + auto candidateIter = LANGUAGE_CODE_MAP.find(candidateLanguage); + if (candidateIter != LANGUAGE_CODE_MAP.end()) { + candidateLanguage = candidateIter->second; + } + if (candidateLanguage != deviceLanguage) { + continue; + } + if (IsPseudoLocale(candidate)) { + if (IsPseudoLocale(deviceLocaleConfig)) { + matchedLocaleConfigs.emplace_back(candidate); + } + continue; + } + if (deviceLanguage == "en" && deviceScript == "Qaag") { + deviceScript = "Latn"; + } + // Compute Script when it is not provided. + std::string candidateScript = candidate.script_.empty() ? ComputeScript(candidate) : candidate.script_; + if (deviceScript != candidateScript) { + continue; + } + matchedLocaleConfigs.emplace_back(candidate); + } +} + +void FindBacktrackPath( + const AceResConfig& localeConfig, std::vector& backtrackPath, const std::string& localeTag) +{ + if (LOCALE_PARENTS.find(localeTag) != LOCALE_PARENTS.end()) { + std::string curTag = LOCALE_PARENTS.find(localeTag)->second; + backtrackPath.emplace_back(curTag); + FindBacktrackPath(localeConfig, backtrackPath, curTag); + } else { + backtrackPath.emplace_back(localeConfig.language_); + } +} + +bool IsOnBacktrackingPath(const std::string& bestConfigTag, const std::string& candidateConfigTag, + const AceResConfig& bestLocaleConfig, const AceResConfig& candidateLocaleConfig, + std::vector backtrackPath) +{ + std::vector bestConfigBacktrackPaths; + FindBacktrackPath(bestLocaleConfig, bestConfigBacktrackPaths, bestConfigTag); + std::vector candidateConfigBacktrackPaths; + FindBacktrackPath(candidateLocaleConfig, candidateConfigBacktrackPaths, candidateConfigTag); + int32_t bestConfigIndex = -1; + int32_t candidateConfigIndex = -1; + for (std::size_t i = 0; i < backtrackPath.size(); i++) { + for (const auto& bestConfigPath : bestConfigBacktrackPaths) { + if (bestConfigPath == backtrackPath[i] && bestConfigIndex == -1) { + bestConfigIndex = i; + } + } + for (const auto& candidateConfigPath : candidateConfigBacktrackPaths) { + if (candidateConfigPath == backtrackPath[i] && candidateConfigIndex == -1) { + candidateConfigIndex = i; + } + } + } + if (bestConfigIndex < candidateConfigIndex) { + return (bestConfigIndex == -1); + } else if (candidateConfigIndex < bestConfigIndex) { + return (candidateConfigIndex != -1); + } + // Check if candidate and best are on the default area of device's backtracking path. + for (auto& path : backtrackPath) { + if (DEFAULT_LANG.find(path) != DEFAULT_LANG.end()) { + std::string curTag = DEFAULT_LANG.find(path)->second; + if (bestConfigTag == curTag) { + return false; + } else if (candidateConfigTag == curTag) { + return true; + } + } + } + + // Compute the default region code through the device language code. + UErrorCode status = U_ZERO_ERROR; + icu::Locale locale = icu::Locale::forLanguageTag(icu::StringPiece(backtrackPath[backtrackPath.size() - 1]), status); + locale.addLikelySubtags(status); + if (status == U_ZERO_ERROR) { + if (bestLocaleConfig.region_ == locale.getCountry()) { + return false; + } + if (candidateLocaleConfig.region_ == locale.getCountry()) { + return true; + } + } + + // If configs did not meet all the conditions above, sort the config region with dictionary order. + return strcmp(bestLocaleConfig.region_.c_str(), candidateLocaleConfig.region_.c_str()) >= 0; +} + +bool IsLocaleConfigMoreSpecified(const AceResConfig& bestLocaleConfig, const AceResConfig& deviceLocaleConfig, + const AceResConfig& candidateLocaleConfig) +{ + // Candidates' language and script are equal with the device's after being filtered MatchLocaleConfig(). + std::string deviceRegion = deviceLocaleConfig.region_; + if (bestLocaleConfig.region_ == deviceRegion) { + return false; + } + if (candidateLocaleConfig.region_ == deviceRegion) { + return true; + } + std::string deviceTag = deviceLocaleConfig.language_ + '-' + deviceLocaleConfig.region_; + std::vector deviceBacktrackPath; + FindBacktrackPath(deviceLocaleConfig, deviceBacktrackPath, deviceTag); + std::string bestConfigTag = bestLocaleConfig.language_; + if (!bestLocaleConfig.region_.empty()) { + bestConfigTag += '-' + bestLocaleConfig.region_; + } + std::string candidateConfigTag = candidateLocaleConfig.language_; + if (!candidateLocaleConfig.region_.empty()) { + candidateConfigTag += '-' + candidateLocaleConfig.region_; + } + int32_t bestConfigIndex = -1; + int32_t candidateConfigIndex = -1; + for (std::size_t i = 0; i < deviceBacktrackPath.size(); i++) { + if (deviceBacktrackPath[i] == bestConfigTag) { + bestConfigIndex = i; + } + if (deviceBacktrackPath[i] == candidateConfigTag) { + candidateConfigIndex = i; + } + } + if (bestConfigIndex < candidateConfigIndex) { + return (bestConfigIndex == -1); + } else if (candidateConfigIndex < bestConfigIndex) { + return (candidateConfigIndex != -1); + } + // Neither best nor candidate on the device's backtracking path, check if they are the default locale of the device. + if (candidateConfigIndex == bestConfigIndex && candidateConfigIndex == -1) { + std::string deviceTagWithScript = deviceLocaleConfig.language_ + "-" + deviceLocaleConfig.script_; + if (DEFAULT_LANG.find(deviceTagWithScript) != DEFAULT_LANG.end()) { + std::string defaultTag = DEFAULT_LANG.find(deviceTagWithScript)->second; + std::string defaultRegion = defaultTag.substr(defaultTag.find('-') + 1); + if (candidateLocaleConfig.region_ == defaultRegion) { + return true; + } + if (bestLocaleConfig.region_ == defaultRegion) { + return false; + } + } + // If they are not on the default area, continue to check the candidates' backtacking path. + return IsOnBacktrackingPath( + bestConfigTag, candidateConfigTag, bestLocaleConfig, candidateLocaleConfig, deviceBacktrackPath); + } + // Both best and candidate on the device's backtracking path with same index. + return false; +} + +void SortLocaleConfigs(std::vector& candidatesLocaleConfig, const AceResConfig& deviceLocaleConfig, + int32_t left, int32_t right) +{ + if (left < right) { + AceResConfig bestLocaleConfig = candidatesLocaleConfig[left]; + int32_t i = left; + int32_t j = right; + while (i < j) { + while (i < j && + !IsLocaleConfigMoreSpecified(bestLocaleConfig, deviceLocaleConfig, candidatesLocaleConfig[j])) { + j--; + } + candidatesLocaleConfig[i] = candidatesLocaleConfig[j]; + while ( + i < j && IsLocaleConfigMoreSpecified(bestLocaleConfig, deviceLocaleConfig, candidatesLocaleConfig[i])) { + i++; + } + candidatesLocaleConfig[j] = candidatesLocaleConfig[i]; + } + candidatesLocaleConfig[i] = bestLocaleConfig; + SortLocaleConfigs(candidatesLocaleConfig, deviceLocaleConfig, left, i - 1); + SortLocaleConfigs(candidatesLocaleConfig, deviceLocaleConfig, i + 1, right); + } +} + +bool IsLowerResolutionPreferred(int32_t high, int32_t low, int32_t request) +{ + if (request <= low) { + return true; + } + + if (request >= high) { + return false; + } + + return ((2 * low) - request) * high > request * request; // scaling down is 2x better than up +} + +bool IsCandidateResolutionPreferred( + const AceResConfig& deviceConfig, const AceResConfig& bestConfig, const AceResConfig& candidateConfig) +{ + if (bestConfig.resolution_ == candidateConfig.resolution_) { + return false; + } + + const ResolutionType bestRes = bestConfig.resolution_ != ResolutionType::RESOLUTION_NONE + ? bestConfig.resolution_ + : ResolutionType::RESOLUTION_MDPI; + const ResolutionType candidateRes = candidateConfig.resolution_ != ResolutionType::RESOLUTION_NONE + ? candidateConfig.resolution_ + : ResolutionType::RESOLUTION_MDPI; + + if (bestRes == ResolutionType::RESOLUTION_ANY) { + return false; + } else if (candidateRes == ResolutionType::RESOLUTION_ANY) { + return true; + } + + ResolutionType deviceRes = deviceConfig.resolution_; + if (deviceConfig.resolution_ == ResolutionType::RESOLUTION_NONE || + deviceConfig.resolution_ == ResolutionType::RESOLUTION_ANY) { + deviceRes = ResolutionType::RESOLUTION_MDPI; + } + + if (bestRes > candidateRes) { + return IsLowerResolutionPreferred( + static_cast(bestRes), static_cast(candidateRes), static_cast(deviceRes)); + } + + if (bestRes < candidateRes) { + return !IsLowerResolutionPreferred( + static_cast(candidateRes), static_cast(bestRes), static_cast(deviceRes)); + } + + return false; +} + +bool IsCandidateResConfigPreferred( + const AceResConfig& deviceConfig, const AceResConfig& bestConfig, const AceResConfig& candidateConfig) +{ + if ((candidateConfig.mcc_ != bestConfig.mcc_) && deviceConfig.mcc_) { + return candidateConfig.mcc_; + } + if ((candidateConfig.mnc_ != bestConfig.mnc_) && deviceConfig.mnc_) { + return candidateConfig.mnc_; + } + + if (bestConfig.orientation_ != candidateConfig.orientation_ && + deviceConfig.orientation_ != DeviceOrientation::ORIENTATION_UNDEFINED) { + return candidateConfig.orientation_ != DeviceOrientation::ORIENTATION_UNDEFINED; + } + + if (bestConfig.deviceType_ != DeviceType::UNKNOWN || candidateConfig.deviceType_ != DeviceType::UNKNOWN) { + if (bestConfig.deviceType_ != candidateConfig.deviceType_) { + return candidateConfig.deviceType_ != DeviceType::UNKNOWN; + } + } + + if (bestConfig.colorMode_ != candidateConfig.colorMode_) { + return candidateConfig.colorMode_ == deviceConfig.colorMode_; + } + + return IsCandidateResolutionPreferred(deviceConfig, bestConfig, candidateConfig); +} + +void SortResConfigs( + const AceResConfig& desiredConfig, std::vector& candidateConfigs, int32_t left, int32_t right) +{ + if (left < right) { + AceResConfig bestConfig = candidateConfigs[left]; + int32_t i = left; + int32_t j = right; + while (i < j) { + while (i < j && !IsCandidateResConfigPreferred(desiredConfig, bestConfig, candidateConfigs[j])) { + j--; + } + candidateConfigs[i] = candidateConfigs[j]; + while (i < j && IsCandidateResConfigPreferred(desiredConfig, bestConfig, candidateConfigs[i])) { + i++; + } + candidateConfigs[j] = candidateConfigs[i]; + } + candidateConfigs[i] = bestConfig; + SortResConfigs(desiredConfig, candidateConfigs, left, i - 1); + SortResConfigs(desiredConfig, candidateConfigs, i + 1, right); + } +} + +bool IsOrientationMatch(const AceResConfig& desired, const AceResConfig& supported) +{ + return supported.orientation_ == DeviceOrientation::ORIENTATION_UNDEFINED || + supported.orientation_ == desired.orientation_; +} + +bool IsDeviceTypeMatch(const AceResConfig& desired, const AceResConfig& supported) +{ + return supported.deviceType_ == DeviceType::UNKNOWN || supported.deviceType_ == desired.deviceType_; +} + +bool IsColorModeMatch(const AceResConfig& desired, const AceResConfig& supported) +{ + return supported.colorMode_ == ColorMode::COLOR_MODE_UNDEFINED || supported.colorMode_ == desired.colorMode_; +} + +bool IsMccMncMatch(const AceResConfig& desired, const AceResConfig& supported) +{ + if (supported.mcc_ != 0 && supported.mcc_ != desired.mcc_) { + return false; + } + return !(supported.mnc_ != 0 && supported.mnc_ != desired.mnc_); +} + +bool IsResolutionMatch(const AceResConfig& desired, const AceResConfig& supported) +{ + return supported.resolution_ == ResolutionType::RESOLUTION_NONE || supported.resolution_ == desired.resolution_; +} + +bool MatchResConfig(const AceResConfig& desired, const AceResConfig& supported) +{ + return !(!IsOrientationMatch(desired, supported) || !IsDeviceTypeMatch(desired, supported) || + !IsColorModeMatch(desired, supported) || !IsMccMncMatch(desired, supported) || + !IsResolutionMatch(desired, supported)); +} + +} // namespace + +bool AceResConfig::operator==(const AceResConfig& other) const +{ + return language_ == other.language_ && script_ == other.script_ && region_ == other.region_ && mcc_ == other.mcc_ && + mnc_ == other.mnc_ && orientation_ == other.orientation_ && colorMode_ == other.colorMode_ && + deviceType_ == other.deviceType_ && resolution_ == other.resolution_; +} + +void AceResConfig::MatchAndSortI18nConfigs(const std::vector& candidatesFiles, + const std::string& devicesLocaleTag, std::vector& fileList) +{ + std::vector candidateLocaleConfigs; + for (auto& file : candidatesFiles) { + AceResConfig LocaleConfig = ConvertLocaleTagToConfig(file); + if (file == ConvertLocaleConfigToTag(LocaleConfig)) { + candidateLocaleConfigs.emplace_back(LocaleConfig); + } + } + AceResConfig deviceLocaleConfig = ConvertLocaleTagToConfig(devicesLocaleTag); + // Compute Script when it is not provided. + if (deviceLocaleConfig.script_.empty()) { + deviceLocaleConfig.script_ = ComputeScript(deviceLocaleConfig); + } + std::vector matchedLocaleConfigs; + MatchLocaleConfig(candidateLocaleConfigs, deviceLocaleConfig, matchedLocaleConfigs); + int32_t left = 0; + int32_t right = matchedLocaleConfigs.size() - 1; + SortLocaleConfigs(matchedLocaleConfigs, deviceLocaleConfig, left, right); + bool existDefault = false; + for (const auto& matchedLocaleConfig : matchedLocaleConfigs) { + std::string localeConfigTag = ConvertLocaleConfigToTag(matchedLocaleConfig); + if (localeConfigTag == "en-US") { + existDefault = true; + } + fileList.emplace_back(localeConfigTag); + } + + if (!existDefault) { + fileList.emplace_back("en-US"); + } +} + +void AceResConfig::MatchAndSortResConfigs(const std::vector& candidateFiles, + const std::string& deviceResTag, std::vector& matchedFileList) +{ + std::vector candidateResConfigs; + for (auto& file : candidateFiles) { + AceResConfig ResConfig = ConvertResTagToConfig(file); + if (file == ConvertResConfigToTag(ResConfig)) { + candidateResConfigs.emplace_back(ResConfig); + } + } + + AceResConfig deviceResConfig = ConvertResTagToConfig(deviceResTag); + int32_t candidateConfigSize = candidateResConfigs.size(); + std::vector matchedResConfigs; + for (auto i = 0; i < candidateConfigSize; i++) { + if (!MatchResConfig(deviceResConfig, candidateResConfigs[i])) { + continue; + } else { + matchedResConfigs.emplace_back(candidateResConfigs[i]); + } + } + int32_t left = 0; + int32_t right = matchedResConfigs.size() - 1; + SortResConfigs(deviceResConfig, matchedResConfigs, left, right); + for (const auto& matchedConfig : matchedResConfigs) { + matchedFileList.emplace_back(ConvertResConfigToTag(matchedConfig)); + } + matchedFileList.emplace_back("res-defaults"); +} + +void AceResConfig::GetConfigString(KeyType type, int32_t value, std::string& buf) +{ + std::string appending; + if (!buf.empty()) { + appending = "-"; + } + + switch (type) { + case KeyType::ORIENTATION: + appending.append( + AceResKeyParser::GetInstance().GetOrientationByType(static_cast(value))); + break; + case KeyType::DEVICETYPE: + appending.append(AceResKeyParser::GetInstance().GetDeviceByType(static_cast(value))); + break; + case KeyType::RESOLUTION: + appending.append(AceResKeyParser::GetInstance().GetResolutionByType(static_cast(value))); + break; + case KeyType::COLOR_MODE: + appending.append(AceResKeyParser::GetInstance().GetColorModeByType(static_cast(value))); + break; + case KeyType::MCC: + appending.append(AceResKeyParser::GetInstance().GetMccByValue(value)); + break; + case KeyType::MNC_SHORT_LEN: + appending.append(AceResKeyParser::GetInstance().GetMncShortLenByValue(value)); + break; + case KeyType::MNC: + appending.append(AceResKeyParser::GetInstance().GetMncByValue(value)); + break; + default: + break; + } + buf.append(appending); +} + +bool AceResConfig::ParseConfig(const std::vector& keyParams) +{ + for (auto keyParam : keyParams) { + switch (keyParam.keyType) { + case KeyType::RESOLUTION: + resolution_ = static_cast(keyParam.value); + break; + case KeyType::ORIENTATION: + orientation_ = static_cast(keyParam.value); + break; + case KeyType::DEVICETYPE: + deviceType_ = static_cast(keyParam.value); + break; + case KeyType::COLOR_MODE: + colorMode_ = static_cast(keyParam.value); + break; + case KeyType::MCC: + mcc_ = keyParam.value; + break; + case KeyType::MNC: + mnc_ = keyParam.value; + break; + case KeyType::MNC_SHORT_LEN: + mnc_ = keyParam.value; + mncShortLen_ = true; + break; + default: + LOGE("unknown KeyType:%{public}d", keyParam.keyType); + break; + } + } + return true; +} + +ResolutionType AceResConfig::GetResolutionType(double resolution) +{ + static const LinearEnumMapNode resolutionMap[] = { + { ResolutionType::RESOLUTION_LDPI, + [](double resolution) { return GreatNotEqual(resolution, 0.0) && LessNotEqual(resolution, 0.875); } }, + { ResolutionType::RESOLUTION_MDPI, + [](double resolution) { return GreatOrEqual(resolution, 0.875) && LessNotEqual(resolution, 1.25); } }, + { ResolutionType::RESOLUTION_HDPI, + [](double resolution) { return GreatOrEqual(resolution, 1.25) && LessNotEqual(resolution, 1.75); } }, + { ResolutionType::RESOLUTION_XHDPI, + [](double resolution) { return GreatOrEqual(resolution, 1.75) && LessNotEqual(resolution, 2.5); } }, + { ResolutionType::RESOLUTION_XXHDPI, + [](double resolution) { return GreatOrEqual(resolution, 2.5) && LessNotEqual(resolution, 3.5); } }, + { ResolutionType::RESOLUTION_XXXHDPI, [](double resolution) { return GreatOrEqual(resolution, 3.5); } }, + }; + + for (const auto& idx : resolutionMap) { + if (idx.value(resolution)) { + return idx.key; + } + } + return ResolutionType::RESOLUTION_MDPI; +} + +AceResConfig AceResConfig::ConvertResTagToConfig(const std::string& deviceResConfigTag) +{ + AceResConfig resConfig; + std::vector keyParams; + bool parseSucceed = AceResKeyParser::GetInstance().Parse(deviceResConfigTag, keyParams); + if (parseSucceed) { + resConfig.ParseConfig(keyParams); + } + return resConfig; +} + +std::string AceResConfig::ConvertResConfigToTag(const AceResConfig& resConfig) +{ + std::string resTag = "res"; + if (resConfig.mcc_ != MCC_UNDEFINED && resConfig.mnc_ != MNC_UNDEFINED) { + GetConfigString(KeyType::MCC, resConfig.mcc_, resTag); + if (resConfig.mncShortLen_) { + GetConfigString(KeyType::MNC_SHORT_LEN, resConfig.mnc_, resTag); + } else { + GetConfigString(KeyType::MNC, resConfig.mnc_, resTag); + } + } + + if (resConfig.orientation_ != DeviceOrientation::ORIENTATION_UNDEFINED) { + GetConfigString(KeyType::ORIENTATION, static_cast(resConfig.orientation_), resTag); + } + + if (resConfig.colorMode_ != ColorMode::COLOR_MODE_UNDEFINED) { + GetConfigString(KeyType::COLOR_MODE, static_cast(resConfig.colorMode_), resTag); + } + + if (resConfig.deviceType_ != DeviceType::UNKNOWN) { + GetConfigString(KeyType::DEVICETYPE, static_cast(resConfig.deviceType_), resTag); + } + + if (resConfig.resolution_ != ResolutionType::RESOLUTION_NONE) { + GetConfigString(KeyType::RESOLUTION, static_cast(resConfig.resolution_), resTag); + } + return resTag; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/adapter/common/cpp/ace_res_config.h b/adapter/common/cpp/ace_res_config.h new file mode 100644 index 00000000..12803cae --- /dev/null +++ b/adapter/common/cpp/ace_res_config.h @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_ADAPTER_COMMON_CPP_ACE_RES_CONFIG_H +#define FOUNDATION_ACE_ADAPTER_COMMON_CPP_ACE_RES_CONFIG_H + +#include +#include +#include + +#include "adapter/common/cpp/ace_res_data_struct.h" + +namespace OHOS::Ace { +class AceResConfig { +public: + AceResConfig() = default; + ~AceResConfig() = default; + AceResConfig(const AceResConfig& config) = default; + AceResConfig& operator=(const AceResConfig& config) = default; + AceResConfig(const std::string& language, const std::string& script, const std::string& region) + : language_(language), script_(script), region_(region) + {} + + AceResConfig(int32_t mcc, int32_t mnc, DeviceOrientation orientation, ColorMode colorMode, DeviceType deviceType, + ResolutionType resolution) + : mcc_(mcc), mnc_(mnc), orientation_(orientation), colorMode_(colorMode), deviceType_(deviceType), + resolution_(resolution) + {} + + bool operator==(const AceResConfig& other) const; + static void MatchAndSortI18nConfigs(const std::vector& candidatesFiles, + const std::string& devicesLocaleTag, std::vector& fileList); + static void MatchAndSortResConfigs(const std::vector& candidateFiles, + const std::string& deviceConfigTag, std::vector& viableFileList); + static void GetConfigString(KeyType type, int32_t value, std::string& buf); + bool ParseConfig(const std::vector& keyParams); + static ResolutionType GetResolutionType(double resolution); + static AceResConfig ConvertResTagToConfig(const std::string& deviceResConfigTag); + static std::string ConvertResConfigToTag(const AceResConfig& resConfig); + + std::string language_; + std::string script_; + std::string region_; + int32_t mcc_ = MCC_UNDEFINED; + int32_t mnc_ = MNC_UNDEFINED; + bool mncShortLen_ = false; + DeviceOrientation orientation_ = DeviceOrientation::ORIENTATION_UNDEFINED; + ColorMode colorMode_ = ColorMode::COLOR_MODE_UNDEFINED; + DeviceType deviceType_ = DeviceType::UNKNOWN; + ResolutionType resolution_ = ResolutionType::RESOLUTION_NONE; +}; +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_ADAPTER_COMMON_CPP_ACE_RES_CONFIG_H \ No newline at end of file diff --git a/adapter/common/cpp/ace_res_data_struct.h b/adapter/common/cpp/ace_res_data_struct.h new file mode 100644 index 00000000..fcb0c809 --- /dev/null +++ b/adapter/common/cpp/ace_res_data_struct.h @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_ADAPTER_COMMON_CPP_ACE_RES_DATA_STRUCT_H +#define FOUNDATION_ACE_ADAPTER_COMMON_CPP_ACE_RES_DATA_STRUCT_H + +#include +#include + +#include "base/utils/system_properties.h" + +namespace OHOS::Ace { +enum class KeyType : int32_t { + MCC = 0, + MNC = 1, + MNC_SHORT_LEN = 2, + ORIENTATION = 3, + COLOR_MODE = 4, + DEVICETYPE = 5, + RESOLUTION = 6, +}; + +struct KeyParam { + KeyType keyType; + int32_t value; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_ADAPTER_COMMON_CPP_ACE_RES_DATA_STRUCT_H \ No newline at end of file diff --git a/adapter/common/cpp/ace_res_key_parser.cpp b/adapter/common/cpp/ace_res_key_parser.cpp new file mode 100644 index 00000000..8328362b --- /dev/null +++ b/adapter/common/cpp/ace_res_key_parser.cpp @@ -0,0 +1,276 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "adapter/common/cpp/ace_res_key_parser.h" + +#ifdef WINDOWS_PLATFORM +#include +#else +#include "securec.h" +#endif +#include +#include + +#include "base/log/log.h" +#include "base/utils/string_utils.h" + +namespace OHOS::Ace { +namespace { + +constexpr int32_t MCC_MNC_KEYWORD_LEN = 3; +constexpr int32_t MCC_MNC_VALUE_LEN = 3; +constexpr int32_t MAX_MCC_MNC_LEN = 8; + +const std::unordered_map RES_RESOLUTION = { + { "ldpi", ResolutionType::RESOLUTION_LDPI }, + { "mdpi", ResolutionType::RESOLUTION_MDPI }, + { "hdpi", ResolutionType::RESOLUTION_HDPI }, + { "xhdpi", ResolutionType::RESOLUTION_XHDPI }, + { "xxhdpi", ResolutionType::RESOLUTION_XXHDPI }, + { "xxxhdpi", ResolutionType::RESOLUTION_XXXHDPI }, +}; + +const std::unordered_map RES_ORIENTATION = { + { "horizontal", DeviceOrientation::LANDSCAPE }, + { "vertical", DeviceOrientation::PORTRAIT } +}; + +const std::unordered_map RES_COLOR_MODE = { + { "dark", ColorMode::DARK }, +}; + +const std::unordered_map RES_DEVICE_TYPE = { + { "phone", DeviceType::PHONE }, + { "tablet", DeviceType::TABLET }, + { "tv", DeviceType::TV }, + { "wearable", DeviceType::WATCH }, +}; + +} + +AceResKeyParser::AceResKeyParser() = default; +AceResKeyParser::~AceResKeyParser() = default; + +bool AceResKeyParser::Parse(const std::string& deviceResConfigTag, std::vector &keyParams) +{ + std::vector keyParts; + StringUtils::StringSpliter(deviceResConfigTag, '-', keyParts); + + static parse_key_function functions[] = { + ParseMcc, + ParseMnc, + ParseOrientation, + ParseColorMode, + ParseDeviceType, + ParseResolution, + ParseDefaults, + }; + const int32_t FUNC_LEN = sizeof(functions) / sizeof(functions[0]); + if (!keyParts.empty()) { + if (!ParseMatch(keyParts, keyParams, functions, FUNC_LEN)) { + LOGE("Invalid config:%{public}s", deviceResConfigTag.c_str()); + return false; + } + return true; + } + return false; +} + +bool AceResKeyParser::ParseMatch(const std::vector& keys, std::vector &keyParams, + parse_key_function functions[], int32_t funcLen) const +{ + for (auto iter = keys.begin(); iter != keys.end(); iter++) { + // currently, the first key part must be res + if (iter == keys.begin()) { + if (*iter == "res") { + continue; + } else { + LOGE("Invalid first key part:%{private}s", iter->c_str()); + return false; + } + } + bool parseRet = false; + for (int32_t k = 0; k < funcLen; k++) { + if (functions[k](*iter, keyParams)) { + parseRet = true; + break; + } + } + if (!parseRet) { + LOGE("Invalid key:%{private}s", iter->c_str()); + return false; + } + } + return true; +} + +bool AceResKeyParser::ParseMcc(const std::string& key, std::vector& keyParams) +{ + std::regex mcc("mcc(\\d{3})"); + if (regex_match(key, mcc)) { + KeyParam keyParam; + keyParam.value = StringUtils::StringToInt(key.substr(MCC_MNC_KEYWORD_LEN)); + keyParam.keyType = KeyType::MCC; + keyParams.emplace_back(keyParam); + return true; + } + return false; +} + +bool AceResKeyParser::ParseMnc(const std::string& key, std::vector& keyParams) +{ + std::regex mnc("mnc(\\d{2,3})"); + if (regex_match(key, mnc)) { + KeyParam keyParam; + keyParam.value = StringUtils::StringToInt(key.substr(MCC_MNC_KEYWORD_LEN)); + if (key.substr(MCC_MNC_KEYWORD_LEN).length() == MCC_MNC_VALUE_LEN) { + keyParam.keyType = KeyType::MNC; + } else { + keyParam.keyType = KeyType::MNC_SHORT_LEN; + } + keyParams.emplace_back(keyParam); + return true; + } + return false; +} + +bool AceResKeyParser::ParseOrientation(const std::string& key, std::vector& keyParams) +{ + auto iter = RES_ORIENTATION.find(key); + if (iter != RES_ORIENTATION.end()) { + KeyParam keyParam; + keyParam.keyType = KeyType::ORIENTATION; + keyParam.value = static_cast(iter->second); + keyParams.emplace_back(keyParam); + return true; + } + return false; +} + +bool AceResKeyParser::ParseColorMode(const std::string& key, std::vector& keyParams) +{ + auto iter = RES_COLOR_MODE.find(key); + if (iter != RES_COLOR_MODE.end()) { + KeyParam keyParam; + keyParam.keyType = KeyType::COLOR_MODE; + keyParam.value = static_cast(iter->second); + keyParams.emplace_back(keyParam); + return true; + } + return false; +} + +bool AceResKeyParser::ParseDeviceType(const std::string& key, std::vector& keyParams) +{ + auto iter = RES_DEVICE_TYPE.find(key); + if (iter != RES_DEVICE_TYPE.end()) { + KeyParam keyParam; + keyParam.keyType = KeyType::DEVICETYPE; + keyParam.value = static_cast(iter->second); + keyParams.emplace_back(keyParam); + return true; + } + return false; +} + +bool AceResKeyParser::ParseResolution(const std::string& key, std::vector& keyParams) +{ + auto iter = RES_RESOLUTION.find(key); + if (iter != RES_RESOLUTION.end()) { + KeyParam keyParam; + keyParam.keyType = KeyType::RESOLUTION; + keyParam.value = static_cast(iter->second); + keyParams.emplace_back(keyParam); + return true; + } + return false; +} + +bool AceResKeyParser::ParseDefaults(const std::string& key, std::vector& keyParams) +{ + return key == "defaults"; +} + +std::string AceResKeyParser::GetMccByValue(uint32_t value) const +{ + char mccStr[MAX_MCC_MNC_LEN] = {0}; + if (sprintf_s(mccStr, MAX_MCC_MNC_LEN, "mcc%03d", value) < 0) { + LOGE("output mcc exception"); + return ""; + } + return std::string(mccStr); +} + +std::string AceResKeyParser::GetMncShortLenByValue(uint32_t value) const +{ + char mncStr[MAX_MCC_MNC_LEN] = {0}; + if (sprintf_s(mncStr, MAX_MCC_MNC_LEN, "mnc%02d", value) < 0) { + LOGE("output mnc short len exception"); + return ""; + } + return std::string(mncStr); +} + +std::string AceResKeyParser::GetMncByValue(uint32_t value) const +{ + char mncStr[MAX_MCC_MNC_LEN] = {0}; + if (sprintf_s(mncStr, MAX_MCC_MNC_LEN, "mnc%03d", value) < 0) { + LOGE("output mnc len exception"); + return ""; + } + return std::string(mncStr); +} + +std::string AceResKeyParser::GetOrientationByType(DeviceOrientation type) const +{ + auto item = find_if(RES_ORIENTATION.begin(), RES_ORIENTATION.end(), + [type](auto iter) { return iter.second == type; }); + if (item != RES_ORIENTATION.end()) { + return item->first; + } + return ""; +} + +std::string AceResKeyParser::GetColorModeByType(ColorMode type) const +{ + auto item = find_if(RES_COLOR_MODE.begin(), RES_COLOR_MODE.end(), + [type](auto iter) { return iter.second == type; }); + if (item != RES_COLOR_MODE.end()) { + return item->first; + } + return ""; +} + +std::string AceResKeyParser::GetDeviceByType(DeviceType type) const +{ + auto deviceTypeItem = find_if(RES_DEVICE_TYPE.begin(), RES_DEVICE_TYPE.end(), + [type](auto iter) { return iter.second == type; }); + if (deviceTypeItem != RES_DEVICE_TYPE.end()) { + return deviceTypeItem->first; + } + return ""; +} + +std::string AceResKeyParser::GetResolutionByType(ResolutionType type) const +{ + auto resolutionItem = find_if(RES_RESOLUTION.begin(), RES_RESOLUTION.end(), + [type](auto iter) { return iter.second == type; }); + if (resolutionItem != RES_RESOLUTION.end()) { + return resolutionItem->first; + } + return ""; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/adapter/common/cpp/ace_res_key_parser.h b/adapter/common/cpp/ace_res_key_parser.h new file mode 100644 index 00000000..cebf1e11 --- /dev/null +++ b/adapter/common/cpp/ace_res_key_parser.h @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_ADAPTER_COMMON_CPP_ACE_RES_KEY_PARSER_H +#define FOUNDATION_ACE_ADAPTER_COMMON_CPP_ACE_RES_KEY_PARSER_H + +#include +#include +#include + +#include "adapter/common/cpp/ace_res_data_struct.h" +#include "base/utils/singleton.h" + +namespace OHOS::Ace { +using parse_key_function = std::function&)>; + +class AceResKeyParser final : public Singleton { + DECLARE_SINGLETON(AceResKeyParser); + ACE_DISALLOW_MOVE(AceResKeyParser); + +public: + bool Parse(const std::string& deviceResConfigTag, std::vector& keyParams); + std::string GetMccByValue(uint32_t value) const; + std::string GetMncByValue(uint32_t value) const; + std::string GetMncShortLenByValue(uint32_t value) const; + std::string GetOrientationByType(DeviceOrientation type) const; + std::string GetColorModeByType(ColorMode type) const; + std::string GetDeviceByType(DeviceType type) const; + std::string GetResolutionByType(ResolutionType type) const; + +private: + bool ParseMatch(const std::vector& keys, std::vector& keyParams, + parse_key_function functions[], int32_t funcLen) const; + static bool ParseMcc(const std::string& key, std::vector& keyParams); + static bool ParseMnc(const std::string& key, std::vector& keyParams); + static bool ParseOrientation(const std::string& key, std::vector& keyParams); + static bool ParseColorMode(const std::string& key, std::vector& keyParams); + static bool ParseDeviceType(const std::string& key, std::vector& keyParams); + static bool ParseResolution(const std::string& key, std::vector& keyParams); + static bool ParseDefaults(const std::string& key, std::vector& keyParams); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_ADAPTER_COMMON_CPP_ACE_RES_KEY_PARSER_H \ No newline at end of file diff --git a/adapter/common/cpp/ace_trace.cpp b/adapter/common/cpp/ace_trace.cpp new file mode 100644 index 00000000..f0fbc940 --- /dev/null +++ b/adapter/common/cpp/ace_trace.cpp @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "base/log/ace_trace.h" + +#ifndef WINDOWS_PLATFORM +#include "securec.h" +#endif + +namespace OHOS::Ace { +namespace { + +const size_t MAX_STRING_SIZE = 128; + +} + +bool AceTraceBeginWithArgv(const char* format, va_list args) +{ + char name[MAX_STRING_SIZE] = { 0 }; + if (vsnprintf_s(name, sizeof(name), sizeof(name) - 1, format, args) < 0) { + return false; + } + AceTraceBegin(name); + return true; +} + +} // namespace OHOS::Ace diff --git a/adapter/common/cpp/file_asset_provider.cpp b/adapter/common/cpp/file_asset_provider.cpp new file mode 100644 index 00000000..b7f57b56 --- /dev/null +++ b/adapter/common/cpp/file_asset_provider.cpp @@ -0,0 +1,120 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "adapter/common/cpp/file_asset_provider.h" + +#include + +#include "base/log/ace_trace.h" +#include "base/log/log.h" + +namespace OHOS::Ace { + +FileAssetProvider::~FileAssetProvider() +{ +} + +bool FileAssetProvider::Initialize(const std::string& packagePath, const std::vector& assetBasePaths) +{ + ACE_SCOPED_TRACE("Initialize"); + if (packagePath.empty() || assetBasePaths.empty()) { + LOGE("the packagePath or assetBasePath is empty"); + return false; + } + assetBasePaths_ = assetBasePaths; + packagePath_ = packagePath; + return true; +} + +bool FileAssetProvider::IsValid() const +{ + return true; +} + +class FileAssetMapping : public fml::Mapping { +public: + FileAssetMapping(std::unique_ptr data, size_t size) : data_(std::move(data)), size_(size) {} + + ~FileAssetMapping() override {} + + size_t GetSize() const override + { + return size_; + } + + const uint8_t* GetMapping() const override + { + return data_.get(); + } + +private: + std::unique_ptr data_ = nullptr; + size_t size_ = 0; +}; + +std::unique_ptr FileAssetProvider::GetAsMapping(const std::string& assetName) const +{ + ACE_SCOPED_TRACE("GetAsMapping"); + LOGD("assert name is: %{public}s", assetName.c_str()); + std::lock_guard lock(mutex_); + + for (const auto& basePath: assetBasePaths_) { + std::string fileName = packagePath_ + basePath + assetName; + std::FILE* fp = std::fopen(fileName.c_str(), "r"); + if (fp == nullptr) { + continue; + } + + if (std::fseek(fp, 0, SEEK_END) != 0) { + LOGE("seek file tail error"); + std::fclose(fp); + continue; + } + + long size = std::ftell(fp); + uint8_t* dataArray = new (std::nothrow) uint8_t[size]; + if (dataArray == nullptr) { + LOGE("new uint8_t array failed"); + std::fclose(fp); + continue; + } + + rewind(fp); + std::unique_ptr data(dataArray); + size_t result = std::fread(data.get(), 1, size, fp); + if (result != (size_t)size) { + LOGE("read file failed"); + std::fclose(fp); + continue; + } + + fclose(fp); + return std::make_unique(std::move(data), size); + } + return nullptr; +} + +std::string FileAssetProvider::GetAssetPath(const std::string& assetName) +{ + auto filePath = filePathMap_.find(assetName); + if (filePath == filePathMap_.end()) { + return ""; + } + std::string assetPath; + assetPath.append(packagePath_).append("!/").append(filePath->second); + return assetPath; +} + +} // namespace OHOS::Ace diff --git a/adapter/common/cpp/file_asset_provider.h b/adapter/common/cpp/file_asset_provider.h new file mode 100644 index 00000000..c866bfe6 --- /dev/null +++ b/adapter/common/cpp/file_asset_provider.h @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_ADAPTER_COMMON_CPP_FILE_ASSET_PROVIDER_H +#define FOUNDATION_ACE_ADAPTER_COMMON_CPP_FILE_ASSET_PROVIDER_H + +#include +#include +#include + +#include "contrib/minizip/unzip.h" +#include "flutter/assets/asset_resolver.h" +#include "flutter/fml/mapping.h" + +#include "base/utils/macros.h" + +namespace OHOS::Ace { + +class ACE_EXPORT FileAssetProvider : public flutter::AssetResolver { +public: + FileAssetProvider() = default; + ~FileAssetProvider() override; + + bool Initialize(const std::string& packagePath, const std::vector& assetBasePaths); + + bool IsValid() const override; + + std::unique_ptr GetAsMapping(const std::string& assetName) const override; + + std::string GetAssetPath(const std::string& assetName); + +private: + std::unordered_map fileMap_; + mutable std::mutex mutex_; + std::unordered_map filePathMap_; + std::string packagePath_; + std::vector assetBasePaths_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_ADAPTER_COMMON_CPP_FILE_ASSET_PROVIDER_H diff --git a/adapter/common/cpp/flutter_asset_manager.h b/adapter/common/cpp/flutter_asset_manager.h new file mode 100644 index 00000000..0e6b90dc --- /dev/null +++ b/adapter/common/cpp/flutter_asset_manager.h @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_ADAPTER_CPP_FLUTTER_ASSET_MANAGER_H +#define FOUNDATION_ACE_ADAPTER_CPP_FLUTTER_ASSET_MANAGER_H + +#include + +#include "flutter/assets/asset_resolver.h" +#include "flutter/fml/mapping.h" + +#include "base/log/event_report.h" +#include "base/memory/ace_type.h" +#include "base/resource/asset_manager.h" +#include "base/utils/macros.h" + +namespace OHOS::Ace { + +class FlutterAsset final : public Asset { +public: + explicit FlutterAsset(std::unique_ptr mapping) : mapping_(std::move(mapping)) {} + ~FlutterAsset() override = default; + + size_t GetSize() const override + { + return mapping_ ? mapping_->GetSize() : 0; + } + + const uint8_t* GetData() const override + { + return mapping_ ? mapping_->GetMapping() : nullptr; + } + +private: + std::unique_ptr mapping_; +}; + +class FlutterAssetManager final : public AssetManager { + DECLARE_ACE_TYPE(FlutterAssetManager, AssetManager); + +public: + FlutterAssetManager() = default; + ~FlutterAssetManager() override = default; + + void PushFront(std::unique_ptr provider) + { + if (!provider || !provider->IsValid()) { + return; + } + providers_.push_front(std::move(provider)); + } + + void PushBack(std::unique_ptr provider) + { + if (!provider || !provider->IsValid()) { + return; + } + providers_.push_back(std::move(provider)); + } + + RefPtr GetAsset(const std::string& assetName) override + { + if (assetName.empty()) { + return nullptr; + } + + for (const auto& provider : providers_) { + auto mapping = provider->GetAsMapping(assetName); + if (mapping) { + return AceType::MakeRefPtr(std::move(mapping)); + } + } + LOGE("find asset failed, assetName = %{private}s", assetName.c_str()); + return nullptr; + } + +private: + std::deque> providers_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_ADAPTER_CPP_FLUTTER_ASSET_MANAGER_H diff --git a/adapter/common/cpp/flutter_task_executor.cpp b/adapter/common/cpp/flutter_task_executor.cpp new file mode 100644 index 00000000..b445be16 --- /dev/null +++ b/adapter/common/cpp/flutter_task_executor.cpp @@ -0,0 +1,155 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "adapter/common/cpp/flutter_task_executor.h" + +#include +#include +#include +#include + +#ifdef FML_EMBEDDER_ONLY +#undef FML_EMBEDDER_ONLY +#define FML_EMBEDDER_ONLY +#endif +#include "flutter/fml/message_loop.h" +#include "flutter/shell/platform/ohos/platform_task_runner_adapter.h" + +#include "base/log/log.h" +#include "base/thread/background_task_executor.h" + +namespace OHOS::Ace { +namespace { + +constexpr int32_t GPU_THREAD_PRIORITY = -10; +constexpr int32_t UI_THREAD_PRIORITY = -8; + +inline std::string GenJsThreadName() +{ + static std::atomic instanceCount { 1 }; + return std::string("jsThread-") + std::to_string(instanceCount.fetch_add(1, std::memory_order_relaxed)); +} + +bool PostTaskToTaskRunner(const fml::RefPtr& taskRunner, TaskExecutor::Task&& task, uint32_t delayTime) +{ + if (!taskRunner || !task) { + return false; + } + + if (delayTime > 0) { + taskRunner->PostDelayedTask(std::move(task), fml::TimeDelta::FromMilliseconds(delayTime)); + } else { + taskRunner->PostTask(std::move(task)); + } + return true; +} + +void SetThreadPriority(int32_t priority) +{ + if (setpriority(PRIO_PROCESS, gettid(), priority) < 0) { + LOGW("Failed to set thread priority, errno = %{private}d", errno); + } +} + +} // namespace + +FlutterTaskExecutor::~FlutterTaskExecutor() +{ + // To guarantee the jsThread released in platform thread + auto rawPtr = jsThread_.release(); + PostTaskToTaskRunner( + platformRunner_, [rawPtr] { std::unique_ptr jsThread(rawPtr); }, 0); +} + +void FlutterTaskExecutor::InitPlatformThread() +{ + platformRunner_ = flutter::PlatformTaskRunnerAdapter::CurrentTaskRunner(); +} + +void FlutterTaskExecutor::InitJsThread(bool newThread) +{ + if (newThread) { + jsThread_ = std::make_unique(GenJsThreadName()); + jsRunner_ = jsThread_->GetTaskRunner(); + } else { + jsRunner_ = uiRunner_; + } +} + +void FlutterTaskExecutor::InitOtherThreads(const flutter::TaskRunners& taskRunners) +{ + uiRunner_ = taskRunners.GetUITaskRunner(); + ioRunner_ = taskRunners.GetIOTaskRunner(); + gpuRunner_ = taskRunners.GetGPUTaskRunner(); + + PostTaskToTaskRunner( + uiRunner_, [] { SetThreadPriority(UI_THREAD_PRIORITY); }, 0); + PostTaskToTaskRunner( + gpuRunner_, [] { SetThreadPriority(GPU_THREAD_PRIORITY); }, 0); +} + +bool FlutterTaskExecutor::OnPostTask(Task&& task, TaskType type, uint32_t delayTime) const +{ + switch (type) { + case TaskType::PLATFORM: + return PostTaskToTaskRunner(platformRunner_, std::move(task), delayTime); + case TaskType::UI: + return PostTaskToTaskRunner(uiRunner_, std::move(task), delayTime); + case TaskType::IO: + return PostTaskToTaskRunner(ioRunner_, std::move(task), delayTime); + case TaskType::GPU: + return PostTaskToTaskRunner(gpuRunner_, std::move(task), delayTime); + case TaskType::JS: + return PostTaskToTaskRunner(jsRunner_, std::move(task), delayTime); + case TaskType::BACKGROUND: + // Ignore delay time + return BackgroundTaskExecutor::GetInstance().PostTask(std::move(task)); + default: + return false; + } +} + +bool FlutterTaskExecutor::WillRunOnCurrentThread(TaskType type) const +{ + switch (type) { + case TaskType::PLATFORM: + return platformRunner_ ? platformRunner_->RunsTasksOnCurrentThread() : false; + case TaskType::UI: + return uiRunner_ ? uiRunner_->RunsTasksOnCurrentThread() : false; + case TaskType::IO: + return ioRunner_ ? ioRunner_->RunsTasksOnCurrentThread() : false; + case TaskType::GPU: + return gpuRunner_ ? gpuRunner_->RunsTasksOnCurrentThread() : false; + case TaskType::JS: + return jsRunner_ ? jsRunner_->RunsTasksOnCurrentThread() : false; + case TaskType::BACKGROUND: + // Always return false for background tasks. + return false; + default: + return false; + } +} + +void FlutterTaskExecutor::AddTaskObserver(Task&& callback) +{ + fml::MessageLoop::GetCurrent().AddTaskObserver(reinterpret_cast(this), std::move(callback)); +} + +void FlutterTaskExecutor::RemoveTaskObserver() +{ + fml::MessageLoop::GetCurrent().RemoveTaskObserver(reinterpret_cast(this)); +} + +} // namespace OHOS::Ace diff --git a/adapter/common/cpp/flutter_task_executor.h b/adapter/common/cpp/flutter_task_executor.h new file mode 100644 index 00000000..7bda52f0 --- /dev/null +++ b/adapter/common/cpp/flutter_task_executor.h @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_ADAPTER_CPP_FLUTTER_TASK_EXECUTOR_H +#define FOUNDATION_ACE_ADAPTER_CPP_FLUTTER_TASK_EXECUTOR_H + +#include "flutter/common/task_runners.h" +#include "flutter/fml/thread.h" + +#include "base/thread/task_executor.h" +#include "base/utils/macros.h" + +namespace OHOS::Ace { + +class ACE_EXPORT FlutterTaskExecutor final : public TaskExecutor { + DECLARE_ACE_TYPE(FlutterTaskExecutor, TaskExecutor); + +public: + ~FlutterTaskExecutor() final; + // Must call this method on platform thread + void InitPlatformThread(); + void InitJsThread(bool newThread = true); + void InitOtherThreads(const flutter::TaskRunners& taskRunners); + + void AddTaskObserver(Task&& callback) override; + void RemoveTaskObserver() override; + bool WillRunOnCurrentThread(TaskType type) const final; + +private: + bool OnPostTask(Task&& task, TaskType type, uint32_t delayTime) const final; + + std::unique_ptr jsThread_; + + fml::RefPtr platformRunner_; + fml::RefPtr uiRunner_; + fml::RefPtr ioRunner_; + fml::RefPtr jsRunner_; + fml::RefPtr gpuRunner_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_ADAPTER_CPP_FLUTTER_TASK_EXECUTOR_H diff --git a/adapter/common/cpp/flutter_window.cpp b/adapter/common/cpp/flutter_window.cpp new file mode 100644 index 00000000..a2581c69 --- /dev/null +++ b/adapter/common/cpp/flutter_window.cpp @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "adapter/common/cpp/flutter_window.h" + +#include + +#include "flutter/runtime/window_manager.h" + +#include "base/log/log.h" +#include "core/common/ace_view.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +std::unique_ptr PlatformWindow::Create(AceView* view) +{ + if (view != nullptr) { + return std::make_unique(view->GetInstanceId()); + } else { + return nullptr; + } +} + +namespace Platform { + +FlutterWindow::FlutterWindow(int32_t instanceId) : instanceId_(instanceId) {} + +FlutterWindow::~FlutterWindow() {} + +void FlutterWindow::RequestFrame() +{ + auto window = flutter::WindowManager::GetWindow(instanceId_); + if (window != nullptr) { + window->ScheduleFrame(); + if (!window->HasBeginFrameCallback()) { + window->SetBeginFrameCallback(std::bind(&FlutterWindow::OnVsyncCallback, this, std::placeholders::_1)); + } + } +} + +void FlutterWindow::RegisterVsyncCallback(AceVsyncCallback&& callback) +{ + vsyncCallbacks_.emplace_back(std::move(callback)); +} + +void FlutterWindow::SetRootRenderNode(const RefPtr& root) {} + +void FlutterWindow::OnVsyncCallback(uint64_t timeStampNanos) +{ + for (const auto& vsyncCallback : vsyncCallbacks_) { + vsyncCallback(timeStampNanos, 0); + } +} + +} // namespace Platform +} // namespace OHOS::Ace diff --git a/adapter/common/cpp/flutter_window.h b/adapter/common/cpp/flutter_window.h new file mode 100644 index 00000000..ad5dc977 --- /dev/null +++ b/adapter/common/cpp/flutter_window.h @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_ADAPTER_COMMON_CPP_FLUTTER_WINDOW_H +#define FOUNDATION_ACE_ADAPTER_COMMON_CPP_FLUTTER_WINDOW_H + +#include + +#include "base/utils/noncopyable.h" +#include "core/common/platform_window.h" + +namespace OHOS::Ace::Platform { + +class FlutterWindow final : public PlatformWindow { +public: + explicit FlutterWindow(int32_t instanceId); + ~FlutterWindow() override; + + // Platform window interface + void RequestFrame() override; + void RegisterVsyncCallback(AceVsyncCallback&& callback) override; + void SetRootRenderNode(const RefPtr& root) override; + + // Vsync callback + void OnVsyncCallback(uint64_t timeStampNanos); + +private: + std::vector vsyncCallbacks_; + int32_t instanceId_; + + ACE_DISALLOW_COPY_AND_MOVE(FlutterWindow); +}; + +} // namespace OHOS::Ace::Platform + +#endif // FOUNDATION_ACE_ADAPTER_COMMON_CPP_FLUTTER_WINDOW_H diff --git a/adapter/common/cpp/localization.cpp b/adapter/common/cpp/localization.cpp new file mode 100644 index 00000000..c9a5474c --- /dev/null +++ b/adapter/common/cpp/localization.cpp @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "base/i18n/localization.h" + +#include + +#ifndef WINDOWS_PLATFORM +#include "securec.h" +#endif + +namespace OHOS::Ace { +namespace { + +const size_t MAX_FORMAT_BUFFER = 256; + +} + +const std::string FormatEntry(const char* fmt, ...) +{ + char buf[MAX_FORMAT_BUFFER] = { 0 }; + bool ret = false; + va_list args; + va_start(args, fmt); + if (vsnprintf_s(buf, sizeof(buf), sizeof(buf) - 1, fmt, args) < 0) { + ret = true; + } + va_end(args); + return ret ? "" : buf; +} + +} // namespace OHOS::Ace diff --git a/adapter/common/cpp/multimodal/fake_multimodal_subscriber.h b/adapter/common/cpp/multimodal/fake_multimodal_subscriber.h new file mode 100644 index 00000000..f996e206 --- /dev/null +++ b/adapter/common/cpp/multimodal/fake_multimodal_subscriber.h @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_ADAPTER_COMMON_CPP_MULTIMODAL_FAKE_MULTIMODAL_SUBSCRIBER_H +#define FOUNDATION_ACE_ADAPTER_COMMON_CPP_MULTIMODAL_FAKE_MULTIMODAL_SUBSCRIBER_H + +#include "core/event/multimodal/multimodal_subscriber.h" + +namespace OHOS::Ace::Platform { + +class FakeMultimodalSubscriber : public MultimodalSubscriber { + DECLARE_ACE_TYPE(FakeMultimodalSubscriber, MultimodalSubscriber) + +public: + FakeMultimodalSubscriber() = default; + ~FakeMultimodalSubscriber() override = default; + + void RegisterCallback(const std::function& callback, + const std::function& successCallback) override {} + bool SubscribeVoiceEvents(const std::vector& voiceEvents) override + { + return false; + } + void UnSubscribeVoiceEvents(const std::vector& voiceEvents) override {} + void UnSubscribeAllEvents() override {} +}; + +} // namespace OHOS::Ace::Platform + +#endif // FOUNDATION_ACE_ADAPTER_COMMON_CPP_MULTIMODAL_FAKE_MULTIMODAL_SUBSCRIBER_H diff --git a/adapter/common/cpp/thread_util.cpp b/adapter/common/cpp/thread_util.cpp new file mode 100644 index 00000000..7eb0bf26 --- /dev/null +++ b/adapter/common/cpp/thread_util.cpp @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "base/thread/thread_util.h" + +#include + +namespace OHOS::Ace { + +void SetCurrentThreadName(const std::string& name) +{ +#ifdef MAC_PLATFORM + pthread_setname_np(name.c_str()); +#else + pthread_setname_np(pthread_self(), name.c_str()); +#endif +} + +} // namespace OHOS::Ace diff --git a/adapter/ohos/cpp/BUILD.gn b/adapter/ohos/cpp/BUILD.gn new file mode 100644 index 00000000..6385a536 --- /dev/null +++ b/adapter/ohos/cpp/BUILD.gn @@ -0,0 +1,63 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +# build static +template("ace_base_platform_source_set") { + # get is_ohos_platform + forward_variables_from(invoker, "*") + + ohos_source_set(target_name) { + defines += invoker.defines + + sources = [ + "$ace_root/adapter/ohos/cpp/ace_ability.cpp", + "$ace_root/adapter/ohos/cpp/ace_application_info.cpp", + "$ace_root/adapter/ohos/cpp/ace_container.cpp", + "$ace_root/adapter/ohos/cpp/flutter_ace_view.cpp", + ] + + configs = [ + "$ace_root:ace_config", + "$flutter_root:flutter_config", + "$flutter_root:icu_config_$platform", + ] + + include_dirs = [ "//utils/native/base/include" ] + + deps = [ + "$flutter_root:ace_skia_$platform", + "//base/global/resmgr_standard/frameworks/resmgr:global_resmgr", + "//foundation/aafwk/standard/frameworks/kits/ability/native:abilitykit_native", + "//foundation/graphic/standard:libwms_client", + "//third_party/zlib:libz", + ] + + external_deps = [ + "aafwk_standard:ability_manager", + "aafwk_standard:want", + "appexecfwk_standard:appexecfwk_base", + "appexecfwk_standard:appexecfwk_core", + "appexecfwk_standard:libeventhandler", + "ipc:ipc_core", + "multimodalinput_base:mmi_event", + ] + } +} + +ace_base_platform_source_set("ace_base_platform_ohos") { + defines = ace_ohos_defines + platform = "ohos" +} diff --git a/adapter/ohos/cpp/ace_ability.cpp b/adapter/ohos/cpp/ace_ability.cpp new file mode 100644 index 00000000..c3a0edff --- /dev/null +++ b/adapter/ohos/cpp/ace_ability.cpp @@ -0,0 +1,285 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "adapter/ohos/cpp/ace_ability.h" + +#include "adapter/ohos/cpp/ace_container.h" +#include "adapter/ohos/cpp/flutter_ace_view.h" +#include "base/log/log.h" +#include "core/common/ace_application_info.h" +#include "core/common/frontend.h" +#include "init_data.h" +#include "touch_event.h" + +#include "locale_info.h" +#include "res_config.h" +#include "resource_manager.h" + +namespace OHOS { +namespace Ace { +namespace { +FrontendType GetFrontendTypeFromManifest(const std::string& packagePathStr) +{ + auto manifestPath = packagePathStr + std::string("assets/js/default/manifest.json"); + char realPath[PATH_MAX] = { 0x00 }; + if (realpath(manifestPath.c_str(), realPath) == nullptr) { + LOGE("realpath fail! filePath: %{private}s, fail reason: %{public}s", manifestPath.c_str(), strerror(errno)); + LOGE("return default frontend: JS frontend."); + return FrontendType::JS; + } + std::unique_ptr file(fopen(realPath, "rb"), fclose); + if (!file) { + LOGE("open file failed, filePath: %{private}s, fail reason: %{public}s", manifestPath.c_str(), strerror(errno)); + LOGE("return default frontend: JS frontend."); + return FrontendType::JS; + } + if (std::fseek(file.get(), 0, SEEK_END) != 0) { + LOGE("seek file tail error, return default frontend: JS frontend."); + return FrontendType::JS; + } + + long size = std::ftell(file.get()); + char* fileData = new (std::nothrow) char[size]; + if (fileData == nullptr) { + LOGE("new json buff failed, return default frontend: JS frontend."); + return FrontendType::JS; + } + rewind(file.get()); + std::unique_ptr jsonStream(fileData); + size_t result = std::fread(jsonStream.get(), 1, size, file.get()); + if (result != (size_t)size) { + LOGE("read file failed, return default frontend: JS frontend."); + return FrontendType::JS; + } + + std::string jsonString(jsonStream.get(), jsonStream.get() + size); + auto rootJson = JsonUtil::ParseJsonString(jsonString); + std::string frontendType = rootJson->GetString("type"); + if (frontendType == "normal") { + return FrontendType::JS; + } else if (frontendType == "form") { + return FrontendType::JS_CARD; + } else if (frontendType == "declarative") { + return FrontendType::DECLARATIVE_JS; + } else { + LOGE("frontend type not supported. return default frontend: JS frontend."); + return FrontendType::JS; + } +} +} + +using namespace OHOS::AAFwk; +using namespace OHOS::AppExecFwk; + +using AcePlatformFinish = std::function; +class AcePlatformEventCallback final : public Platform::PlatformEventCallback { +public: + explicit AcePlatformEventCallback(AcePlatformFinish onFinish) : onFinish_(onFinish) {} + + ~AcePlatformEventCallback() = default; + + virtual void OnFinish() const + { + LOGI("AcePlatformEventCallback OnFinish"); + if (onFinish_) { + onFinish_(); + } + } + + virtual void OnStatusBarBgColorChanged(uint32_t color) + { + LOGI("AcePlatformEventCallback OnStatusBarBgColorChanged"); + } + +private: + AcePlatformFinish onFinish_; +}; + +int32_t AceAbility::instanceId_ = 0; +const std::string AceAbility::START_PARAMS_KEY = "__startParams"; +const std::string AceAbility::PAGE_URI = "url"; +const std::string AceAbility::CONTINUE_PARAMS_KEY = "__remoteData"; + +REGISTER_AA(AceAbility) +void AceAbility::OnStart(const Want& want) +{ + Ability::OnStart(want); + LOGI("AceAbility::OnStart called"); + + SetHwIcuDirectory(); + + std::unique_ptr resConfig(Global::Resource::CreateResConfig()); + auto resourceManager = GetResourceManager(); + if (resourceManager != nullptr) { + resourceManager->GetResConfig(*resConfig); + auto localeInfo = resConfig->GetLocaleInfo(); + AceApplicationInfo::GetInstance().SetResourceManager(resourceManager); + if (localeInfo != nullptr) { + auto language = localeInfo->GetLanguage(); + auto region = localeInfo->GetRegion(); + auto script = localeInfo->GetScript(); + AceApplicationInfo::GetInstance().SetLocale( + (language == nullptr) ? "" : language, + (region == nullptr) ? "" : region, + (script == nullptr) ? "" : script, + ""); + } + } + + auto packagePathStr = GetBundleCodePath(); + auto moduleInfo = GetHapModuleInfo(); + if (moduleInfo != nullptr) { + packagePathStr += "/" + moduleInfo->name + "/"; + } + FrontendType frontendType = GetFrontendTypeFromManifest(packagePathStr); + + // create container + Platform::AceContainer::CreateContainer( + abilityId_, frontendType, this, + std::make_unique([this]() { + TerminateAbility(); + })); + // create view. + auto flutterAceView = Platform::FlutterAceView::CreateView(abilityId_); + OHOS::Window* window = Ability::GetWindow().get(); + + auto&& touchEventCallback = [aceView = flutterAceView](OHOS::TouchEvent event) -> bool { + LOGD("RegistOnTouchCb touchEventCallback called"); + return aceView->DispatchTouchEvent(aceView, event); + }; + window->RegistOnTouchCb(touchEventCallback); + + Platform::FlutterAceView::SurfaceCreated(flutterAceView, window); + + // set metrics + BufferRequestConfig windowConfig; + window->GetRequestConfig(windowConfig); + LOGI("AceAbility: windowConfig: width: %{public}d, height: %{public}d", windowConfig.width, windowConfig.height); + + flutter::ViewportMetrics metrics; + metrics.physical_width = windowConfig.width; + metrics.physical_height = windowConfig.height; + Platform::FlutterAceView::SetViewportMetrics(flutterAceView, metrics); + + // add asset path. + auto assetBasePathStr = { std::string("assets/js/default/"), std::string("assets/js/share/") }; + Platform::AceContainer::AddAssetPath(abilityId_, packagePathStr, assetBasePathStr); + // set view + Platform::AceContainer::SetView(flutterAceView, density_, windowConfig.width, windowConfig.height); + Platform::FlutterAceView::SurfaceChanged(flutterAceView, windowConfig.width, windowConfig.height, 0); + + // get url + std::string parsedPageUrl; + if (!remotePageUrl_.empty()) { + parsedPageUrl = remotePageUrl_; + } else if (!pageUrl_.empty()) { + parsedPageUrl = pageUrl_; + } else if (want.HasParameter(PAGE_URI)) { + parsedPageUrl = want.GetStringParam(PAGE_URI); + } else { + parsedPageUrl = ""; + } + + // run page. + Platform::AceContainer::RunPage( + abilityId_, Platform::AceContainer::GetContainer(abilityId_)->GeneratePageId(), + parsedPageUrl, want.GetStringParam(START_PARAMS_KEY)); + + Platform::AceContainer::OnRestoreData(abilityId_, remoteData_); + LOGI("AceAbility::OnStart called End"); +} + +void AceAbility::OnStop() +{ + LOGI("AceAbility::OnStop called "); + Ability::OnStop(); + Platform::AceContainer::DestroyContainer(abilityId_); + LOGI("AceAbility::OnStop called End"); +} + +void AceAbility::OnActive() +{ + LOGI("AceAbility::OnActive called "); + Ability::OnActive(); + Platform::AceContainer::OnActive(abilityId_); + LOGI("AceAbility::OnActive called End"); +} + +void AceAbility::OnForeground(const Want& want) +{ + LOGI("AceAbility::OnForeground called "); + Ability::OnForeground(want); + Platform::AceContainer::OnShow(abilityId_); + LOGI("AceAbility::OnForeground called End"); +} + +void AceAbility::OnBackground() +{ + LOGI("AceAbility::OnBackground called "); + Ability::OnBackground(); + Platform::AceContainer::OnHide(abilityId_); + LOGI("AceAbility::OnBackground called End"); +} + +void AceAbility::OnInactive() +{ + LOGI("AceAbility::OnInactive called "); + Ability::OnInactive(); + Platform::AceContainer::OnInactive(abilityId_); + LOGI("AceAbility::OnInactive called End"); +} + +void AceAbility::OnBackPressed() +{ + LOGI("AceAbility::OnBackPressed called "); + if (!Platform::AceContainer::OnBackPressed(abilityId_)) { + LOGI("AceAbility::OnBackPressed: passed to Ability to process"); + Ability::OnBackPressed(); + } + LOGI("AceAbility::OnBackPressed called End"); +} + +void AceAbility::OnNewWant(const Want& want) +{ + LOGI("AceAbility::OnNewWant called "); + Ability::OnNewWant(want); + std::string params = want.GetStringParam(START_PARAMS_KEY); + Platform::AceContainer::OnNewRequest(abilityId_, params); + LOGI("AceAbility::OnNewWant called End"); +} + +void AceAbility::OnRestoreAbilityState(const PacMap& inState) +{ + LOGI("AceAbility::OnRestoreAbilityState called "); + Ability::OnRestoreAbilityState(inState); + LOGI("AceAbility::OnRestoreAbilityState called End"); +} + +void AceAbility::OnSaveAbilityState(PacMap& outState) +{ + LOGI("AceAbility::OnSaveAbilityState called "); + Ability::OnSaveAbilityState(outState); + LOGI("AceAbility::OnSaveAbilityState called End"); +} + +void AceAbility::OnConfigurationUpdated(const Configuration& configuration) +{ + LOGI("AceAbility::OnConfigurationUpdated called "); + Ability::OnConfigurationUpdated(configuration); + LOGI("AceAbility::OnConfigurationUpdated called End"); +} + +} +} // namespace OHOS::Ace diff --git a/adapter/ohos/cpp/ace_ability.h b/adapter/ohos/cpp/ace_ability.h new file mode 100644 index 00000000..ae55c233 --- /dev/null +++ b/adapter/ohos/cpp/ace_ability.h @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_ACE_ENGINE_ADAPTER_OHOS_CPP_ACE_ABILITY_H +#define FOUNDATION_ACE_ACE_ENGINE_ADAPTER_OHOS_CPP_ACE_ABILITY_H + +#include "ability.h" +#include "ability_loader.h" +#include "want.h" + +namespace OHOS::Ace { + +class AceAbility final : public OHOS::AppExecFwk::Ability { +public: + AceAbility() + { + abilityId_ = instanceId_; + instanceId_++; + } + virtual ~AceAbility() = default; + + void OnStart(const OHOS::AAFwk::Want& want) override; + void OnStop() override; + void OnActive() override; + void OnInactive() override; + void OnForeground(const OHOS::AAFwk::Want& want) override; + void OnBackground() override; + void OnBackPressed() override; + void OnNewWant(const OHOS::AAFwk::Want& want) override; + void OnRestoreAbilityState(const OHOS::AppExecFwk::PacMap& inState) override; + void OnSaveAbilityState(OHOS::AppExecFwk::PacMap& outState) override; + void OnConfigurationUpdated(const OHOS::AppExecFwk::Configuration& configuration) override; + +private: + static int32_t instanceId_; + static const std::string START_PARAMS_KEY; + static const std::string PAGE_URI; + static const std::string CONTINUE_PARAMS_KEY; + + int32_t abilityId_ = 0; + float density_ = 1.0f; + std::string remotePageUrl_; + std::string remoteData_; + std::string pageUrl_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_ACE_ENGINE_ADAPTER_OHOS_CPP_ACE_ABILITY_H diff --git a/adapter/ohos/cpp/ace_application_info.cpp b/adapter/ohos/cpp/ace_application_info.cpp new file mode 100755 index 00000000..f1db9cf0 --- /dev/null +++ b/adapter/ohos/cpp/ace_application_info.cpp @@ -0,0 +1,190 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "adapter/ohos/cpp/ace_application_info.h" + +#include +#include +#include + +#include "contrib/minizip/unzip.h" +#include "unicode/locid.h" + +#include "adapter/common/cpp/ace_res_config.h" +#include "adapter/common/cpp/ace_res_data_struct.h" +#include "base/i18n/localization.h" +#include "base/log/ace_trace.h" +#include "base/log/log.h" +#include "core/common/ace_engine.h" + +#include "init_data.h" + +namespace OHOS::Ace::Platform { + +AceApplicationInfoImpl::AceApplicationInfoImpl() {} + +AceApplicationInfoImpl::~AceApplicationInfoImpl() = default; + +void AceApplicationInfoImpl::SetJsEngineParam(const std::string& key, const std::string& value) +{ + jsEngineParams_[key] = value; +} + +std::string AceApplicationInfoImpl::GetJsEngineParam(const std::string& key) const +{ + std::string value; + auto iter = jsEngineParams_.find(key); + if (iter != jsEngineParams_.end()) { + value = iter->second; + } + return value; +} + +void AceApplicationInfoImpl::ChangeLocale(const std::string& language, const std::string& countryOrRegion) +{ + std::string languageLower; + std::transform(language.begin(), language.end(), languageLower.begin(), ::tolower); + + std::string countryOrRegionUpper; + std::transform(countryOrRegion.begin(), countryOrRegion.end(), countryOrRegionUpper.begin(), ::tolower); + + std::unique_ptr resConfig(Global::Resource::CreateResConfig()); + resourceManager_->GetResConfig(*resConfig); + + auto localeInfo = resConfig->GetLocaleInfo(); + if (localeInfo == nullptr) { + LOGE("get local info failed"); + return; + } + + auto script = localeInfo->GetScript(); + resConfig->SetLocaleInfo(languageLower.c_str(), script, countryOrRegionUpper.c_str()); + resourceManager_->UpdateResConfig(*resConfig); + + SetLocale(languageLower, countryOrRegionUpper, (script == nullptr) ? "" : script, ""); +} + +std::vector AceApplicationInfoImpl::GetLocaleFallback(const std::vector& localeList) const +{ + ACE_SCOPED_TRACE("GetLocaleFallback"); + std::vector fileList; + AceResConfig::MatchAndSortI18nConfigs(localeList, localeTag_, fileList); + return fileList; +} + +void AceApplicationInfoImpl::SetLocale( + const std::string& language, + const std::string& countryOrRegion, + const std::string& script, + const std::string& keywordsAndValues) +{ + language_ = language; + countryOrRegion_ = countryOrRegion; + script_ = script; + keywordsAndValues_ = keywordsAndValues; + + localeTag_ = language; + if (!script_.empty()) { + localeTag_.append("-" + script_); + } + localeTag_.append("-" + countryOrRegion_); + + icu::Locale locale(language_.c_str(), countryOrRegion.c_str()); + isRightToLeft_ = locale.isRightToLeft(); + + auto languageList = Localization::GetLanguageList(language_); + if (languageList.size() == 1) { + Localization::SetLocale( + language_, countryOrRegion_, script, languageList.front(), keywordsAndValues_); + } else { + auto selectLanguage = GetLocaleFallback(languageList); + Localization::SetLocale( + language_, countryOrRegion_, script, selectLanguage.front(), keywordsAndValues_); + } +} + +bool AceApplicationInfoImpl::GetFiles(const std::string& filePath, std::vector& fileList) const +{ + const auto& packagePath = AceEngine::Get().GetPackagePath(); + const auto& assetBasePathSet = AceEngine::Get().GetAssetBasePath(); + if (packagePath.empty() || assetBasePathSet.empty()) { + LOGE("the packagePath or assetBasePathSet is empty"); + return false; + } + + for (const auto& assetBasePath : assetBasePathSet) { + std::string dirPath = packagePath + assetBasePath + filePath; + DIR* dir = opendir(dirPath.c_str()); + if (dir == nullptr) { + continue; + } + struct dirent* dirEntry = readdir(dir); + while (dirEntry != nullptr) { + std::string file = dirEntry->d_name; + std::string fullPath = dirPath + file; + dirEntry = readdir(dir); + + struct stat st; + if (stat(fullPath.c_str(), &st) != 0 || !S_ISREG(st.st_mode)) { + continue; + } + fileList.emplace_back(file); + } + closedir(dir); + } + return true; +} + +std::vector AceApplicationInfoImpl::SplitLocale(const std::string& desireLocales) +{ + std::vector ret; + if (desireLocales.empty()) { + ret.emplace_back("en-US"); + return ret; + } + + size_t rpos = -1; + auto pos = desireLocales.find(','); + while (pos != std::string::npos) { + ret.emplace_back(desireLocales.substr(rpos + 1, pos - rpos - 1)); + rpos = pos; + pos = desireLocales.find(',', rpos + 1); + } + ret.emplace_back(desireLocales.substr(rpos + 1, desireLocales.length() - rpos - 1)); + + return ret; +} + +bool AceApplicationInfoImpl::GetBundleInfo(const std::string& packageName, AceBundleInfo& bundleInfo) +{ + return false; +} + +AceApplicationInfoImpl& AceApplicationInfoImpl::GetInstance() +{ + static AceApplicationInfoImpl instance; + return instance; +} + +} // namespace OHOS::Ace::Platform + +namespace OHOS::Ace { + +AceApplicationInfo& AceApplicationInfo::GetInstance() +{ + return Platform::AceApplicationInfoImpl::GetInstance(); +} + +} // namespace OHOS::Ace diff --git a/adapter/ohos/cpp/ace_application_info.h b/adapter/ohos/cpp/ace_application_info.h new file mode 100755 index 00000000..eb8db223 --- /dev/null +++ b/adapter/ohos/cpp/ace_application_info.h @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_ADAPTER_COMMON_CPP_ACE_APPLICATION_INFO_H +#define FOUNDATION_ACE_ADAPTER_COMMON_CPP_ACE_APPLICATION_INFO_H + +#include +#include +#include +#include + +#include "base/utils/noncopyable.h" +#include "core/common/ace_application_info.h" + +namespace OHOS::Ace::Platform { + +class AceApplicationInfoImpl : public AceApplicationInfo { +public: + AceApplicationInfoImpl(); + ~AceApplicationInfoImpl() override; + + static AceApplicationInfoImpl& GetInstance(); + + void SetLocale(const std::string& language, const std::string& countryOrRegion, const std::string& script, + const std::string& keywordsAndValues) override; + void ChangeLocale(const std::string& language, const std::string& countryOrRegion) override; + std::vector GetLocaleFallback(const std::vector& localeList) const override; + std::vector GetResourceFallback(const std::vector& resourceList) const override + { + return std::vector(); + } + double GetLifeTime() const override { return 0.0f; } + std::string GetCurrentDeviceResTag() const override { return std::string(); }; + bool GetFiles(const std::string& filePath, std::vector& fileList) const override; + + bool GetBundleInfo(const std::string& packageName, AceBundleInfo& bundleInfo) override; + + std::string GetJsEngineParam(const std::string& key) const override; + + void SetJsEngineParam(const std::string& key, const std::string& value); + + void SetResourceManager(std::shared_ptr& resourceManager) override + { + resourceManager_ = resourceManager; + } + +private: + std::vector SplitLocale(const std::string& desireLocales); + + std::map jsEngineParams_; + std::shared_ptr resourceManager_; +}; + +} // namespace OHOS::Ace::Platform + +#endif // FOUNDATION_ACE_ADAPTER_COMMON_CPP_ACE_APPLICATION_INFO_H diff --git a/adapter/ohos/cpp/ace_container.cpp b/adapter/ohos/cpp/ace_container.cpp new file mode 100644 index 00000000..c1358981 --- /dev/null +++ b/adapter/ohos/cpp/ace_container.cpp @@ -0,0 +1,589 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "adapter/common/cpp/file_asset_provider.h" +#include "adapter/ohos/cpp/ace_application_info.h" +#include "adapter/ohos/cpp/ace_container.h" +#include "base/log/ace_trace.h" +#include "base/log/event_report.h" +#include "base/log/log.h" +#include "base/utils/system_properties.h" +#include "base/utils/utils.h" +#include "base/watch_dog/watch_dog.h" +#include "core/common/ace_engine.h" +#include "core/common/platform_window.h" +#include "core/common/text_field_manager.h" +#include "core/common/window.h" +#include "core/pipeline/base/element.h" +#include "core/pipeline/pipeline_context.h" +#include "core/components/theme/app_theme.h" +#include "core/components/theme/theme_constants.h" +#include "core/components/theme/theme_manager.h" +#include "frameworks/bridge/card_frontend/card_frontend.h" +#include "frameworks/bridge/declarative_frontend/declarative_frontend.h" +#include "frameworks/bridge/js_frontend/engine/common/js_engine_loader.h" +#include "frameworks/bridge/js_frontend/js_frontend.h" + +#include "flutter/lib/ui/ui_dart_state.h" + +#include "adapter/common/cpp/flutter_asset_manager.h" +#include "adapter/common/cpp/flutter_task_executor.h" + +namespace OHOS::Ace::Platform { + +AceContainer::AceContainer(int32_t instanceId, FrontendType type, AceAbility* aceAbility, + std::unique_ptr callback) : instanceId_(instanceId), type_(type), aceAbility_(aceAbility) +{ + ACE_DCHECK(callback); + auto flutterTaskExecutor = Referenced::MakeRefPtr(); + flutterTaskExecutor->InitPlatformThread(); + flutterTaskExecutor->InitJsThread(); + taskExecutor_ = flutterTaskExecutor; + if (type_ != FrontendType::DECLARATIVE_JS) { + InitializeFrontend(); + } + + platformEventCallback_ = std::move(callback); +} + +void AceContainer::InitializeFrontend() +{ + if (type_ == FrontendType::JS) { + frontend_ = Frontend::Create(); + auto jsFrontend = AceType::DynamicCast(frontend_); + jsFrontend->SetJsEngine(Framework::JsEngineLoader::Get().CreateJsEngine(instanceId_)); + jsFrontend->SetNeedDebugBreakPoint(AceApplicationInfo::GetInstance().IsNeedDebugBreakPoint()); + jsFrontend->SetDebugVersion(AceApplicationInfo::GetInstance().IsDebugVersion()); + jsFrontend->SetAbility(aceAbility_); + } else if (type_ == FrontendType::DECLARATIVE_JS) { + frontend_ = AceType::MakeRefPtr(); + auto declarativeFrontend = AceType::DynamicCast(frontend_); + declarativeFrontend->SetJsEngine(Framework::JsEngineLoader::GetDeclarative().CreateJsEngine(instanceId_)); + } else { + LOGE("Frontend type not supported"); + EventReport::SendAppStartException(AppStartExcepType::FRONTEND_TYPE_ERR); + return; + } + ACE_DCHECK(frontend_); + frontend_->Initialize(type_, taskExecutor_); +} + +RefPtr AceContainer::GetContainer(int32_t instanceId) +{ + auto container = AceEngine::Get().GetContainer(instanceId); + if (container != nullptr) { + auto aceContainer = AceType::DynamicCast(container); + return aceContainer; + } else { + return nullptr; + } +} + +bool AceContainer::OnBackPressed(int32_t instanceId) +{ + auto container = AceEngine::Get().GetContainer(instanceId); + if (!container) { + return false; + } + + auto context = container->GetPipelineContext(); + if (!context) { + return false; + } + return context->CallRouterBackToPopPage(); +} + +void AceContainer::OnShow(int32_t instanceId) +{ + auto container = AceEngine::Get().GetContainer(instanceId); + if (!container) { + return; + } + + auto front = container->GetFrontend(); + if (front) { + front->OnShow(); + } + auto context = container->GetPipelineContext(); + if (!context) { + return; + } +#ifndef WEARABLE_PRODUCT + context->OnShow(); +#endif +} + +void AceContainer::OnHide(int32_t instanceId) +{ + auto container = AceEngine::Get().GetContainer(instanceId); + if (!container) { + return; + } + auto front = container->GetFrontend(); + if (front) { + front->OnHide(); + auto taskExecutor = container->GetTaskExecutor(); + if (taskExecutor) { + taskExecutor->PostTask([front]() { front->TriggerGarbageCollection(); }, TaskExecutor::TaskType::JS); + } + } + + auto context = container->GetPipelineContext(); + if (!context) { + return; + } +#ifndef WEARABLE_PRODUCT + context->OnHide(); +#endif +} + +void AceContainer::OnActive(int32_t instanceId) +{ + auto container = AceEngine::Get().GetContainer(instanceId); + if (!container) { + return; + } + + auto front = container->GetFrontend(); + if (front) { + front->OnActive(); + } +} + +void AceContainer::OnInactive(int32_t instanceId) +{ + auto container = AceEngine::Get().GetContainer(instanceId); + if (!container) { + return; + } + + auto front = container->GetFrontend(); + if (front) { + front->OnInactive(); + } +} + +std::string AceContainer::OnSaveData(int32_t instanceId) +{ + std::string result = "false"; + auto container = AceEngine::Get().GetContainer(instanceId); + if (container) { + auto front = container->GetFrontend(); + if (front) { + front->OnSaveData(result); + } + } + + return result; +} + +bool AceContainer::OnRestoreData(int32_t instanceId, const std::string& data) +{ + auto container = AceEngine::Get().GetContainer(instanceId); + if (!container) { + return false; + } + + auto front = container->GetFrontend(); + if (front) { + if (!data.empty()) { + auto result = front->OnRestoreData(data); + return result; + } + } + + return false; +} + +void AceContainer::OnNewRequest(int32_t instanceId, const std::string& data) +{ + auto container = AceEngine::Get().GetContainer(instanceId); + if (!container) { + return; + } + + auto front = container->GetFrontend(); + if (front) { + front->OnNewRequest(data); + } +} + +void AceContainer::InitializeCallback() +{ + ACE_FUNCTION_TRACE(); + + ACE_DCHECK(aceView_ && taskExecutor_ && pipelineContext_); + auto&& touchEventCallback = [context = pipelineContext_](const TouchPoint& event) { + context->GetTaskExecutor()->PostTask( + [context, event]() { context->OnTouchEvent(event); }, TaskExecutor::TaskType::UI); + }; + aceView_->RegisterTouchEventCallback(touchEventCallback); + + auto&& keyEventCallback = [context = pipelineContext_](const KeyEvent& event) { + bool result = false; + context->GetTaskExecutor()->PostSyncTask( + [context, event, &result]() { result = context->OnKeyEvent(event); }, TaskExecutor::TaskType::UI); + return result; + }; + aceView_->RegisterKeyEventCallback(keyEventCallback); + + auto&& mouseEventCallback = [context = pipelineContext_](const MouseEvent& event) { + context->GetTaskExecutor()->PostTask( + [context, event]() { context->OnMouseEvent(event); }, TaskExecutor::TaskType::UI); + }; + aceView_->RegisterMouseEventCallback(mouseEventCallback); + + auto&& rotationEventCallback = [context = pipelineContext_](const RotationEvent& event) { + bool result = false; + context->GetTaskExecutor()->PostSyncTask( + [context, event, &result]() { result = context->OnRotationEvent(event); }, TaskExecutor::TaskType::UI); + return result; + }; + aceView_->RegisterRotationEventCallback(rotationEventCallback); + + auto&& viewChangeCallback = [context = pipelineContext_](int32_t width, int32_t height) { + ACE_SCOPED_TRACE("ViewChangeCallback(%d, %d)", width, height); + context->GetTaskExecutor()->PostTask( + [context, width, height]() { context->OnSurfaceChanged(width, height); }, TaskExecutor::TaskType::UI); + }; + aceView_->RegisterViewChangeCallback(viewChangeCallback); + + auto&& densityChangeCallback = [context = pipelineContext_](double density) { + ACE_SCOPED_TRACE("DensityChangeCallback(%lf)", density); + context->GetTaskExecutor()->PostTask( + [context, density]() { context->OnSurfaceDensityChanged(density); }, TaskExecutor::TaskType::UI); + }; + aceView_->RegisterDensityChangeCallback(densityChangeCallback); + + auto&& systemBarHeightChangeCallback = [context = pipelineContext_](double statusBar, double navigationBar) { + ACE_SCOPED_TRACE("SystemBarHeightChangeCallback(%lf, %lf)", statusBar, navigationBar); + context->GetTaskExecutor()->PostTask( + [context, statusBar, navigationBar]() { context->OnSystemBarHeightChanged(statusBar, navigationBar); }, + TaskExecutor::TaskType::UI); + }; + aceView_->RegisterSystemBarHeightChangeCallback(systemBarHeightChangeCallback); + + auto&& surfaceDestroyCallback = [context = pipelineContext_]() { + context->GetTaskExecutor()->PostTask( + [context]() { context->OnSurfaceDestroyed(); }, TaskExecutor::TaskType::UI); + }; + aceView_->RegisterSurfaceDestroyCallback(surfaceDestroyCallback); + + auto&& idleCallback = [context = pipelineContext_](int64_t deadline) { + context->GetTaskExecutor()->PostTask( + [context, deadline]() { context->OnIdle(deadline); }, TaskExecutor::TaskType::UI); + }; + aceView_->RegisterIdleCallback(idleCallback); + + auto&& viewDestoryCallback = [context = pipelineContext_](AceView::ViewReleaseCallback&& callback) { + context->GetTaskExecutor()->PostTask( + [context, callback = std::move(callback)]() { + context->GetTaskExecutor()->PostTask( + [callback = std::move(callback)]() { callback(); }, TaskExecutor::TaskType::PLATFORM); + }, + TaskExecutor::TaskType::UI); + }; + aceView_->RegisterViewDestroyCallback(viewDestoryCallback); +} + +void AceContainer::CreateContainer(int32_t instanceId, FrontendType type, AceAbility* aceAbility, + std::unique_ptr callback) +{ + auto aceContainer = AceType::MakeRefPtr(instanceId, type, aceAbility, std::move(callback)); + AceEngine::Get().AddContainer(instanceId, aceContainer); + auto front = aceContainer->GetFrontend(); + if (front) { + front->UpdateState(Frontend::State::ON_CREATE); + front->SetJsMessageDispatcher(aceContainer); + } +} + +void AceContainer::DestroyContainer(int32_t instanceId) +{ + LOGI("DestroyContainer with id %{private}d", instanceId); + auto container = AceEngine::Get().GetContainer(instanceId); + if (!container) { + LOGE("no AceContainer with id %{private}d", instanceId); + return; + } + auto context = container->GetPipelineContext(); + if (context) { + auto taskExecutor = context->GetTaskExecutor(); + if (taskExecutor) { + taskExecutor->PostTask([context]() { context->Destroy(); }, TaskExecutor::TaskType::UI); + } + } + AceEngine::Get().RemoveContainer(instanceId); + auto front = container->GetFrontend(); + if (front) { + front->UpdateState(Frontend::State::ON_DESTROY); + } +} + +void AceContainer::SetView(AceView* view, double density, int32_t width, int32_t height) +{ + if (view == nullptr) { + return; + } + + auto container = AceType::DynamicCast(AceEngine::Get().GetContainer(view->GetInstanceId())); + if (!container) { + return; + } + auto platformWindow = PlatformWindow::Create(view); + if (!platformWindow) { + LOGE("Create PlatformWindow failed!"); + return; + } + std::unique_ptr window = std::make_unique(std::move(platformWindow)); + container->AttachView(std::move(window), view, density, width, height); +} + +bool AceContainer::RunPage(int32_t instanceId, int32_t pageId, const std::string& content, const std::string& params) +{ + auto container = AceEngine::Get().GetContainer(instanceId); + if (!container) { + return false; + } + auto front = container->GetFrontend(); + if (front) { + front->RunPage(pageId, content, params); + return true; + } + return false; +} + +bool AceContainer::PushPage(int32_t instanceId, const std::string& content, const std::string& params) +{ + auto container = AceEngine::Get().GetContainer(instanceId); + if (!container) { + return false; + } + auto front = container->GetFrontend(); + if (front) { + front->PushPage(content, params); + return true; + } + return false; +} + +bool AceContainer::UpdatePage(int32_t instanceId, int32_t pageId, const std::string& content) +{ + auto container = AceEngine::Get().GetContainer(instanceId); + if (!container) { + return false; + } + auto context = container->GetPipelineContext(); + if (!context) { + return false; + } + return context->CallRouterBackToPopPage(); +} + +void AceContainer::Dispatch( + const std::string& group, std::vector&& data, int32_t id, bool replyToComponent) const +{ + return; +} + +void AceContainer::DispatchPluginError(int32_t callbackId, int32_t errorCode, std::string&& errorMessage) const +{ + auto front = GetFrontend(); + if (!front) { + LOGE("the front is nullptr"); + return; + } + + taskExecutor_->PostTask( + [front, callbackId, errorCode, errorMessage = std::move(errorMessage)]() mutable { + front->TransferJsPluginGetError(callbackId, errorCode, std::move(errorMessage)); + }, + TaskExecutor::TaskType::BACKGROUND); +} + +bool AceContainer::Dump(const std::vector& params) +{ + if (aceView_ && aceView_->Dump(params)) { + return true; + } + + if (pipelineContext_) { + pipelineContext_->Dump(params); + return true; + } + return false; +} + +void AceContainer::AddAssetPath( + int32_t instanceId, const std::string& packagePath, const std::vector& paths) +{ + auto container = AceType::DynamicCast(AceEngine::Get().GetContainer(instanceId)); + if (!container) { + return; + } + + AceEngine::Get().SetPackagePath(packagePath); + for (auto path: paths) { + AceEngine::Get().SetAssetBasePath(path); + } + + RefPtr flutterAssetManager; + if (container->assetManager_) { + flutterAssetManager = AceType::DynamicCast(container->assetManager_); + } else { + flutterAssetManager = Referenced::MakeRefPtr(); + container->assetManager_ = flutterAssetManager; + if (container->type_ != FrontendType::DECLARATIVE_JS) { + container->frontend_->SetAssetManager(flutterAssetManager); + } + } + if (flutterAssetManager && !packagePath.empty()) { + auto assetProvider = std::make_unique(); + if (assetProvider->Initialize(packagePath, paths)) { + LOGI("Push AssetProvider to queue."); + flutterAssetManager->PushBack(std::move(assetProvider)); + } + } +} + +void AceContainer::AttachView( + std::unique_ptr window, AceView* view, double density, int32_t width, int32_t height) +{ + aceView_ = view; + auto instanceId = aceView_->GetInstanceId(); + auto state = flutter::UIDartState::Current()->GetStateById(instanceId); + ACE_DCHECK(state != nullptr); + auto flutterTaskExecutor = AceType::DynamicCast(taskExecutor_); + flutterTaskExecutor->InitOtherThreads(state->GetTaskRunners()); + + if (type_ == FrontendType::DECLARATIVE_JS) { + // For DECLARATIVE_JS or UJOINT_JS frontend display UI in JS thread temporarily. + flutterTaskExecutor->InitJsThread(false); + InitializeFrontend(); + auto front = GetFrontend(); + if (front) { + front->UpdateState(Frontend::State::ON_CREATE); + front->SetJsMessageDispatcher(AceType::Claim(this)); + front->SetAssetManager(assetManager_); + } + } + + resRegister_ = aceView_->GetPlatformResRegister(); + pipelineContext_ = AceType::MakeRefPtr(std::move(window), + taskExecutor_, + assetManager_, + resRegister_, + frontend_, + instanceId); + pipelineContext_->SetRootSize(density, width, height); + pipelineContext_->SetTextFieldManager(AceType::MakeRefPtr()); + pipelineContext_->SetIsRightToLeft(AceApplicationInfo::GetInstance().IsRightToLeft()); + pipelineContext_->SetWindowModal(windowModal_); + pipelineContext_->SetDrawDelegate(aceView_->GetDrawDelegate()); + InitializeCallback(); + + auto&& finishEventHandler = [weak = WeakClaim(this)] { + auto container = weak.Upgrade(); + if (!container) { + LOGE("FinishEventHandler container is null!"); + return; + } + auto context = container->GetPipelineContext(); + if (!context) { + LOGE("FinishEventHandler context is null!"); + return; + } + context->GetTaskExecutor()->PostTask( + [weak = WeakPtr(container)] { + auto container = weak.Upgrade(); + if (!container) { + LOGE("Finish task, container is null!"); + return; + } + container->OnFinish(); + }, + TaskExecutor::TaskType::PLATFORM); + }; + pipelineContext_->SetFinishEventHandler(finishEventHandler); + + auto&& setStatusBarEventHandler = [weak = WeakClaim(this)](const Color& color) { + auto container = weak.Upgrade(); + if (!container) { + LOGE("StatusBarEventHandler container is null!"); + return; + } + auto context = container->GetPipelineContext(); + if (!context) { + LOGE("StatusBarEventHandler context is null!"); + return; + } + context->GetTaskExecutor()->PostTask( + [weak, color = color.GetValue()]() { + auto container = weak.Upgrade(); + if (!container) { + LOGE("StatusBarEventHandler container is null!"); + return; + } + if (container->platformEventCallback_) { + container->platformEventCallback_->OnStatusBarBgColorChanged(color); + } + }, + TaskExecutor::TaskType::PLATFORM); + }; + pipelineContext_->SetStatusBarEventHandler(setStatusBarEventHandler); + + // Load custom style at UI thread before frontend attach, to make sure style can be loaded before building dom tree. + auto themeManager = pipelineContext_->GetThemeManager(); + if (themeManager) { + taskExecutor_->PostTask( + [ themeManager, assetManager = assetManager_, colorScheme = colorScheme_] { + themeManager->SetColorScheme(colorScheme); + themeManager->LoadCustomTheme(assetManager); + }, + TaskExecutor::TaskType::UI); + } + + taskExecutor_->PostTask( + [context = pipelineContext_]() { context->SetupRootElement(); }, TaskExecutor::TaskType::UI); + aceView_->Launch(); + frontend_->AttachPipelineContext(pipelineContext_); + + AceEngine::Get().RegisterToWatchDog(instanceId, taskExecutor_); +} + +void AceContainer::SetFontScale(int32_t instanceId, float fontScale) +{ + auto container = AceEngine::Get().GetContainer(instanceId); + if (!container) { + return; + } + auto pipelineContext = container->GetPipelineContext(); + if (!pipelineContext) { + LOGE("fail to set font style due to context is null"); + return; + } + pipelineContext->SetFontScale(fontScale); +} + +void AceContainer::SetWindowStyle(int32_t instanceId, WindowModal windowModal, ColorScheme colorScheme) +{ + auto container = AceType::DynamicCast(AceEngine::Get().GetContainer(instanceId)); + if (!container) { + return; + } + container->SetWindowModal(windowModal); + container->SetColorScheme(colorScheme); +} +} // namespace OHOS::Ace::Platform diff --git a/adapter/ohos/cpp/ace_container.h b/adapter/ohos/cpp/ace_container.h new file mode 100644 index 00000000..c48a5018 --- /dev/null +++ b/adapter/ohos/cpp/ace_container.h @@ -0,0 +1,158 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_ADAPTER_OHOS_CPP_ACE_CONTAINER_H +#define FOUNDATION_ACE_ADAPTER_OHOS_CPP_ACE_CONTAINER_H + +#include + +#include "adapter/ohos/cpp/ace_ability.h" +#include "adapter/ohos/cpp/platform_event_callback.h" +#include "base/resource/asset_manager.h" +#include "base/thread/task_executor.h" +#include "base/utils/noncopyable.h" +#include "core/common/ace_view.h" +#include "core/common/container.h" +#include "core/common/js_message_dispatcher.h" + +namespace OHOS::Ace::Platform { +class AceContainer : public Container, public JsMessageDispatcher { + DECLARE_ACE_TYPE(AceContainer, Container, JsMessageDispatcher); + +public: + AceContainer(int32_t instanceId, FrontendType type, AceAbility* aceAbility, + std::unique_ptr callback); + ~AceContainer() override = default; + + static bool Register(); + + int32_t GetInstanceId() const override + { + if (aceView_) { + return aceView_->GetInstanceId(); + } + return 0; + } + + RefPtr GetFrontend() const override + { + return frontend_; + } + + RefPtr GetTaskExecutor() const override + { + return taskExecutor_; + } + + RefPtr GetAssetManager() const override + { + return assetManager_; + } + + RefPtr GetPlatformResRegister() const override + { + return resRegister_; + } + + RefPtr GetPipelineContext() const override + { + return pipelineContext_; + } + + AceView* GetAceView() const + { + return aceView_; + } + + void SetWindowModal(WindowModal windowModal) + { + windowModal_ = windowModal; + } + + void SetColorScheme(ColorScheme colorScheme) + { + colorScheme_ = colorScheme; + } + + void Dispatch( + const std::string& group, std::vector&& data, int32_t id, bool replyToComponent) const override; + + void DispatchPluginError(int32_t callbackId, int32_t errorCode, std::string&& errorMessage) const override; + + bool Dump(const std::vector& params) override; + + void OnFinish() + { + if (platformEventCallback_) { + platformEventCallback_->OnFinish(); + } + } + + int32_t GeneratePageId() + { + return pageId_++; + } + + std::string GetHostClassName() const override + { + return ""; + } + + static void CreateContainer(int32_t instanceId, FrontendType type, AceAbility* aceAbility, + std::unique_ptr callback); + static void DestroyContainer(int32_t instanceId); + static bool RunPage(int32_t instanceId, int32_t pageId, const std::string& content, const std::string& params); + static bool PushPage(int32_t instanceId, const std::string& content, const std::string& params); + static bool OnBackPressed(int32_t instanceId); + static void OnShow(int32_t instanceId); + static void OnHide(int32_t instanceId); + static void OnActive(int32_t instanceId); + static void OnInactive(int32_t instanceId); + static std::string OnSaveData(int32_t instanceId); + static bool OnRestoreData(int32_t instanceId, const std::string& data); + static void OnNewRequest(int32_t instanceId, const std::string& data); + static void AddAssetPath(int32_t instanceId, const std::string& packagePath, const std::vector& paths); + static void SetView(AceView* view, double density, int32_t width, int32_t height); + static void SetFontScale(int32_t instanceId, float fontScale); + static void SetWindowStyle(int32_t instanceId, WindowModal windowModal, ColorScheme colorScheme); + + static RefPtr GetContainer(int32_t instanceId); + static bool UpdatePage(int32_t instanceId, int32_t pageId, const std::string& content); + +private: + void InitializeFrontend(); + void InitializeCallback(); + + void AttachView(std::unique_ptr window, AceView* view, double density, int32_t width, int32_t height); + int32_t instanceId_ = 0; + AceView* aceView_ = nullptr; + RefPtr taskExecutor_; + RefPtr assetManager_; + RefPtr resRegister_; + RefPtr pipelineContext_; + RefPtr frontend_; + FrontendType type_ = FrontendType::JS; + std::unique_ptr platformEventCallback_; + WindowModal windowModal_ { WindowModal::NORMAL }; + ColorScheme colorScheme_ { ColorScheme::FIRST_VALUE }; + AceAbility* aceAbility_ = nullptr; + int32_t pageId_ = 0; + + ACE_DISALLOW_COPY_AND_MOVE(AceContainer); +}; + +} // namespace OHOS::Ace::Platform + +#endif // FOUNDATION_ACE_ADAPTER_OHOS_CPP_ACE_CONTAINER_H diff --git a/adapter/ohos/cpp/flutter_ace_view.cpp b/adapter/ohos/cpp/flutter_ace_view.cpp new file mode 100644 index 00000000..5b104665 --- /dev/null +++ b/adapter/ohos/cpp/flutter_ace_view.cpp @@ -0,0 +1,476 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "adapter/ohos/cpp/flutter_ace_view.h" +#include + +#include "base/log/dump_log.h" +#include "base/log/event_report.h" +#include "base/log/log.h" +#include "base/utils/macros.h" +#include "base/utils/system_properties.h" +#include "base/utils/utils.h" +#include "core/common/ace_engine.h" +#include "core/event/mouse_event.h" +#include "core/gestures/touch_event.h" +#include "core/image/image_cache.h" +#include "core/components/theme/app_theme.h" +#include "core/components/theme/theme_manager.h" +#include "core/pipeline/layers/flutter_scene_builder.h" + +namespace OHOS::Ace::Platform { +namespace { + +constexpr int32_t ROTATION_DIVISOR = 64; +constexpr double PERMIT_ANGLE_VALUE = 0.5; + +TouchPoint ConvertTouchEvent(OHOS::TouchEvent& touchEvent) +{ + int32_t id = static_cast(touchEvent.GetIndex()); + MmiPoint mmiPoint = touchEvent.GetPointerPosition(id); + std::chrono::microseconds micros(touchEvent.GetOccurredTime()); + TimeStamp time(micros); + TouchPoint point { id, mmiPoint.GetX(), mmiPoint.GetY(), TouchType::UNKNOWN, time, touchEvent.GetRadius(id) }; + switch (touchEvent.GetAction()) { + case OHOS::TouchEvent::CANCEL: + point.type = TouchType::CANCEL; + break; + case OHOS::TouchEvent::HOVER_POINTER_ENTER: + case OHOS::TouchEvent::HOVER_POINTER_MOVE: + case OHOS::TouchEvent::HOVER_POINTER_EXIT: + LOGD("ConvertTouchEvent not implement type:%{public}ld", touchEvent.GetAction()); + break; + case OHOS::TouchEvent::PRIMARY_POINT_DOWN: + case OHOS::TouchEvent::OTHER_POINT_DOWN: + point.type = TouchType::DOWN; + break; + case OHOS::TouchEvent::POINT_MOVE: + point.type = TouchType::MOVE; + break; + case OHOS::TouchEvent::PRIMARY_POINT_UP: + case OHOS::TouchEvent::OTHER_POINT_UP: + point.type = TouchType::UP; + break; + default: + LOGW("unknown type"); + break; + } + return point; +} + +void ConvertMouseEvent(OHOS::MouseEvent& mouseEvent, MouseEvent& events) +{ + MmiPoint mmiPoint = mouseEvent.GetCursor(); + events.x = mmiPoint.GetX(); + events.y = mmiPoint.GetY(); + events.z = mmiPoint.GetZ(); + switch (mouseEvent.GetAction()) { + case OHOS::MouseEvent::PRESS: + events.action = MouseAction::PRESS; + break; + case OHOS::MouseEvent::RELEASE: + events.action = MouseAction::RELEASE; + break; + case OHOS::MouseEvent::MOVE: + events.action = MouseAction::MOVE; + break; + case OHOS::MouseEvent::HOVER_ENTER: + events.action = MouseAction::HOVER_ENTER; + break; + case OHOS::MouseEvent::HOVER_MOVE: + events.action = MouseAction::HOVER_MOVE; + break; + case OHOS::MouseEvent::HOVER_EXIT: + events.action = MouseAction::HOVER_EXIT; + break; + default: + events.action = MouseAction::NONE; + break; + } + switch (mouseEvent.GetActionButton()) { + case OHOS::MouseEvent::LEFT_BUTTON: + events.button = MouseButton::LEFT_BUTTON; + break; + case OHOS::MouseEvent::RIGHT_BUTTON: + events.button = MouseButton::RIGHT_BUTTON; + break; + case OHOS::MouseEvent::MIDDLE_BUTTON: + events.button = MouseButton::MIDDLE_BUTTON; + break; + case OHOS::MouseEvent::BACK_BUTTON: + events.button = MouseButton::BACK_BUTTON; + break; + case OHOS::MouseEvent::FORWARD_BUTTON: + events.button = MouseButton::FORWARD_BUTTON; + break; + default: + events.button = MouseButton::NONE_BUTTON; + break; + } + events.pressedButtons = static_cast(mouseEvent.GetPressedButtons()); + std::chrono::microseconds micros(mouseEvent.GetOccurredTime()); + TimeStamp time(micros); + events.time = time; +} + +} // namespace + +FlutterAceView* FlutterAceView::CreateView(int32_t instanceId) +{ + FlutterAceView* aceSurface = new Platform::FlutterAceView(instanceId); + flutter::Settings settings; + settings.instanceId = instanceId; + settings.platform = flutter::AcePlatform::ACE_PLATFORM_OHOS; + settings.enable_software_rendering = true; + settings.idle_notification_callback = [aceSurface](int64_t deadline) { + if (aceSurface != nullptr) { + aceSurface->ProcessIdleEvent(deadline); + } + }; + auto shell_holder = std::make_unique(settings, false); + if (aceSurface != nullptr) { + aceSurface->SetShellHolder(std::move(shell_holder)); + } + return aceSurface; +} + +void FlutterAceView::SurfaceCreated(FlutterAceView* view, OHOS::Window* window) +{ + LOGI(">>> FlutterAceView::SurfaceCreated, pWnd:%{public}p", window); + if (window == nullptr) { + LOGE("FlutterAceView::SurfaceCreated, window is nullptr"); + return; + } + + if (view == nullptr) { + LOGE("FlutterAceView::SurfaceCreated, view is nullptr"); + return; + } + + auto platformView = view->GetShellHolder()->GetPlatformView(); + LOGI("FlutterAceView::SurfaceCreated, GetPlatformView"); + if (platformView) { + LOGI("FlutterAceView::SurfaceCreated, call NotifyCreated"); + platformView->NotifyCreated(window); + } + LOGI("<<< FlutterAceView::SurfaceCreated, end"); +} + +void FlutterAceView::SurfaceChanged(FlutterAceView* view, int32_t width, int32_t height, int32_t orientation) +{ + if (view == nullptr) { + LOGE("FlutterAceView::SurfaceChanged, view is nullptr"); + return; + } + + view->NotifySurfaceChanged(width, height); +} + +void FlutterAceView::SetViewportMetrics(FlutterAceView* view, const flutter::ViewportMetrics& metrics) +{ + if (view) { + view->NotifyDensityChanged(metrics.device_pixel_ratio); + view->NotifySystemBarHeightChanged(metrics.physical_padding_top, metrics.physical_view_inset_bottom); + auto platformView = view->GetShellHolder()->GetPlatformView(); + if (platformView) { + platformView->SetViewportMetrics(metrics); + } + } +} + +bool FlutterAceView::DispatchTouchEvent(FlutterAceView* view, OHOS::TouchEvent& touchEvent) +{ + if (touchEvent.GetAction() == OHOS::TouchEvent::OTHER && touchEvent.GetSourceDevice() == OHOS::TouchEvent::MOUSE) { + // mouse event + LOGD("DispatchTouchEvent MouseEvent"); + std::shared_ptr multimodalEvent = touchEvent.GetMultimodalEvent(); + OHOS::MouseEvent* mouseEvent = (OHOS::MouseEvent*)multimodalEvent.get(); + if (mouseEvent == nullptr) { + LOGE("mouseEvent is nullptr"); + return false; + } + view->ProcessMouseEvent(*mouseEvent); + } else { + // touch event + LOGD("DispatchTouchEvent TouchEvent"); + return view->ProcessTouchEvent(touchEvent); + } + return true; +} + +bool FlutterAceView::DispatchKeyEvent(FlutterAceView* view, int32_t keyCode, int32_t action, int32_t repeatTime, + int64_t timeStamp, int64_t timeStampStart) +{ + if (view != nullptr) { + return view->ProcessKeyEvent(keyCode, action, repeatTime, timeStamp, timeStampStart); + } + LOGE("view is null, return false!"); + return false; +} + +bool FlutterAceView::DispatchRotationEvent(FlutterAceView* view, float rotationValue) +{ + if (view) { + return view->ProcessRotationEvent(rotationValue); + } + LOGE("view is null, return false!"); + return false; +} + +void FlutterAceView::RegisterTouchEventCallback(TouchEventCallback&& callback) +{ + ACE_DCHECK(callback); + touchEventCallback_ = std::move(callback); +} + +void FlutterAceView::RegisterKeyEventCallback(KeyEventCallback&& callback) +{ + ACE_DCHECK(callback); + keyEventCallback_ = std::move(callback); +} + +void FlutterAceView::RegisterMouseEventCallback(MouseEventCallback&& callback) +{ + ACE_DCHECK(callback); + mouseEventCallback_ = std::move(callback); +} + +void FlutterAceView::RegisterRotationEventCallback(RotationEventCallBack&& callback) +{ + ACE_DCHECK(callback); + rotationEventCallBack_ = std::move(callback); +} + +void FlutterAceView::Launch() +{ + LOGD("Launch shell holder."); + if (!viewLaunched_) { + flutter::RunConfiguration config; + shell_holder_->Launch(std::move(config)); + viewLaunched_ = true; + } +} + +void FlutterAceView::SetShellHolder(std::unique_ptr holder) +{ + shell_holder_ = std::move(holder); +} + +bool FlutterAceView::ProcessTouchEvent(OHOS::TouchEvent& touchEvent) +{ + TouchPoint touchPoint = ConvertTouchEvent(touchEvent); + bool forbiddenToPlatform = false; + if (touchPoint.type != TouchType::UNKNOWN) { + if (touchEventCallback_) { + touchEventCallback_(touchPoint); + } + } else { + LOGW("Unknown event."); + } + +#ifdef WEARABLE_PRODUCT + forbiddenToPlatform = forbiddenToPlatform || IsNeedForbidToPlatform(point); +#endif + + // if last page, let os know so that to quit app. + return forbiddenToPlatform || (!IsLastPage()); +} + +void FlutterAceView::ProcessMouseEvent(OHOS::MouseEvent& mouseEvent) +{ + MouseEvent event; + ConvertMouseEvent(mouseEvent, event); + LOGD("ProcessMouseEvent event"); + + if (mouseEventCallback_) { + mouseEventCallback_(event); + } +} + +bool FlutterAceView::ProcessKeyEvent( + int32_t keyCode, int32_t keyAction, int32_t repeatTime, int64_t timeStamp, int64_t timeStampStart) +{ + if (!keyEventCallback_) { + return false; + } + + auto keyEvents = keyEventRecognizer_.GetKeyEvents(keyCode, keyAction, repeatTime, timeStamp, timeStampStart); + // First distributes special events. + // Because the platform receives a raw event, the identified special event processing result is ignored + if (keyEvents.size() > 1) { + keyEventCallback_(keyEvents.back()); + } + return keyEventCallback_(keyEvents.front()); +} + +void FlutterAceView::ProcessIdleEvent(int64_t deadline) +{ + if (idleCallback_) { + idleCallback_(deadline); + } +} + +bool FlutterAceView::ProcessRotationEvent(float rotationValue) +{ + if (!rotationEventCallBack_) { + return false; + } + + RotationEvent event { .value = rotationValue * ROTATION_DIVISOR }; + + return rotationEventCallBack_(event); +} + +bool FlutterAceView::Dump(const std::vector& params) +{ + if (params.empty() || params[0] != "-drawcmd") { + LOGE("Unsupported parameters."); + return false; + } +#ifdef DUMP_DRAW_CMD + static int32_t count = 0; + if (shell_holder_) { + auto screenShot = shell_holder_->Screenshot(flutter::Rasterizer::ScreenshotType::SkiaPicture, false); + if (screenShot.data->data() != nullptr) { + auto byteData = screenShot.data; + auto path = ImageCache::GetImageCacheFilePath() + "/picture_" + std::to_string(count++) + ".mskp"; + if (DumpLog::GetInstance().GetDumpFile()) { + DumpLog::GetInstance().AddDesc("Dump draw command to path: " + path); + DumpLog::GetInstance().Print(0, "Info:", 0); + } + std::ofstream outFile(path, std::fstream::out | std::fstream::binary); + if (!outFile.is_open()) { + LOGE("Open file %{private}s failed.", path.c_str()); + return false; + } + outFile.write(reinterpret_cast(byteData->data()), byteData->size()); + outFile.close(); + return true; + } + } +#else + if (DumpLog::GetInstance().GetDumpFile()) { + DumpLog::GetInstance().AddDesc("Dump draw command not support on this version."); + DumpLog::GetInstance().Print(0, "Info:", 0); + return true; + } +#endif + return false; +} + +void FlutterAceView::InitCacheFilePath(const std::string& path) +{ + if (!path.empty()) { + ImageCache::SetImageCacheFilePath(path); + ImageCache::SetCacheFileInfo(); + } else { + LOGW("image cache path empty"); + } +} + +bool FlutterAceView::IsLastPage() const +{ + auto container = AceEngine::Get().GetContainer(instanceId_); + if (!container) { + return false; + } + + auto context = container->GetPipelineContext(); + if (!context) { + return false; + } + + return context->IsLastPage(); +} + +uint32_t FlutterAceView::GetBackgroundColor() +{ + return Color::WHITE.GetValue(); +} + +// On watch device, it's probable to quit the application unexpectedly when we slide our finger diagonally upward on the +// screen, so we do restrictions here. +bool FlutterAceView::IsNeedForbidToPlatform(TouchPoint point) +{ + if (point.type == TouchType::DOWN) { + auto result = touchPointInfoMap_.try_emplace(point.id, TouchPointInfo(point.GetOffset())); + if (!result.second) { + result.first->second = TouchPointInfo(point.GetOffset()); + } + + return false; + } + + auto iter = touchPointInfoMap_.find(point.id); + if (iter == touchPointInfoMap_.end()) { + return false; + } + if (iter->second.eventState_ == EventState::HORIZONTAL_STATE) { + return false; + } else if (iter->second.eventState_ == EventState::VERTICAL_STATE) { + return true; + } + + Offset offset = point.GetOffset() - iter->second.offset_; + double deltaX = offset.GetX(); + double deltaY = std::abs(offset.GetY()); + + if (point.type == TouchType::MOVE) { + if (deltaX > 0.0) { + if (deltaY / deltaX > PERMIT_ANGLE_VALUE) { + iter->second.eventState_ = EventState::VERTICAL_STATE; + return true; + } else { + iter->second.eventState_ = EventState::HORIZONTAL_STATE; + } + } + + return false; + } + + touchPointInfoMap_.erase(point.id); + return deltaX > 0.0 && deltaY / deltaX > PERMIT_ANGLE_VALUE; +} + +std::unique_ptr FlutterAceView::GetDrawDelegate() +{ + auto darwDelegate = std::make_unique(); + + darwDelegate->SetDrawFrameCallback([this](RefPtr& layer, const Rect& dirty) { + if (!layer) { + return; + } + RefPtr flutterSceneBuilder = AceType::MakeRefPtr(); + layer->AddToScene(*flutterSceneBuilder, 0.0, 0.0); + auto scene = flutterSceneBuilder->Build(); + if (!flutter::UIDartState::Current()) { + LOGE("uiDartState is nullptr"); + return; + } + auto window = flutter::UIDartState::Current()->window(); + if (window != nullptr && window->client() != nullptr) { + window->client()->Render(scene.get()); + } + }); + + return darwDelegate; +} + +std::unique_ptr FlutterAceView::GetPlatformWindow() +{ + return nullptr; +} + +} // namespace OHOS::Ace::Platform diff --git a/adapter/ohos/cpp/flutter_ace_view.h b/adapter/ohos/cpp/flutter_ace_view.h new file mode 100644 index 00000000..42f11a40 --- /dev/null +++ b/adapter/ohos/cpp/flutter_ace_view.h @@ -0,0 +1,197 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_ADAPTER_OHOS_CPP_FLUTTER_ACE_VIEW_H +#define FOUNDATION_ACE_ADAPTER_OHOS_CPP_FLUTTER_ACE_VIEW_H + +#include + +#include "flutter/common/settings.h" +#include "flutter/lib/ui/compositing/scene.h" +#include "flutter/lib/ui/compositing/scene_builder.h" +#include "flutter/shell/platform/ohos/ohos_shell_holder.h" + +#include "base/utils/noncopyable.h" +#include "core/common/ace_view.h" +#include "core/common/platform_res_register.h" +#include "core/event/key_event_recognizer.h" + +#include "mouse_event.h" +#include "touch_event.h" +#include "window_manager.h" + +namespace OHOS::Ace::Platform { + +using ReleaseCallback = std::function; + +class FlutterAceView : public AceView, public Referenced { +public: + FlutterAceView() = default; + explicit FlutterAceView(int32_t id) : instanceId_(id) {} + ~FlutterAceView() override = default; + static FlutterAceView* CreateView(int32_t instanceId); + static void SurfaceCreated(FlutterAceView* view, OHOS::Window* window); + static void SurfaceChanged(FlutterAceView* view, int32_t width, int32_t height, int32_t orientation); + static void SetViewportMetrics(FlutterAceView* view, const flutter::ViewportMetrics& metrics); + + static bool DispatchTouchEvent(FlutterAceView* view, OHOS::TouchEvent& touchEvent); + + static bool DispatchKeyEvent(FlutterAceView* view, int32_t keyCode, int32_t action, int32_t repeatTime, + int64_t timeStamp, int64_t timeStampStart); + static bool DispatchRotationEvent(FlutterAceView* view, float rotationValue); + static void InitCacheFilePath(const std::string& path); + static uint32_t GetBackgroundColor(); + + void RegisterTouchEventCallback(TouchEventCallback&& callback) override; + void RegisterKeyEventCallback(KeyEventCallback&& callback) override; + void RegisterMouseEventCallback(MouseEventCallback&& callback) override; + void RegisterRotationEventCallback(RotationEventCallBack&& callback) override; + void RegisterCardViewPositionCallback(CardViewPositionCallBack&& callback) override {} + void RegisterCardViewAccessibilityParamsCallback(CardViewAccessibilityParamsCallback&& callback) override {} + + void Launch() override; + void SetShellHolder(std::unique_ptr holder); + flutter::OhosShellHolder* GetShellHolder() const + { + return shell_holder_.get(); + } + + bool ProcessTouchEvent(OHOS::TouchEvent& touchEvent); + + void ProcessMouseEvent(OHOS::MouseEvent& mouseEvent); + + bool ProcessKeyEvent( + int32_t keyCode, int32_t keyAction, int32_t repeatTime, int64_t timeStamp = 0, int64_t timeStampStart = 0); + + void ProcessIdleEvent(int64_t deadline); + + bool ProcessRotationEvent(float rotationValue); + + int32_t GetInstanceId() const override + { + return instanceId_; + } + + void RegisterViewChangeCallback(ViewChangeCallback&& callback) override + { + viewChangeCallback_ = std::move(callback); + } + + void RegisterDensityChangeCallback(DensityChangeCallback&& callback) override + { + densityChangeCallback_ = std::move(callback); + } + + void RegisterSystemBarHeightChangeCallback(SystemBarHeightChangeCallbak&& callback) override + { + systemBarHeightChangeCallback_ = std::move(callback); + } + + void RegisterSurfaceDestroyCallback(SurfaceDestroyCallback&& callback) override + { + surfaceDestroyCallback_ = std::move(callback); + } + + void RegisterIdleCallback(IdleCallback&& callback) override + { + idleCallback_ = std::move(callback); + } + + void SetPlatformResRegister(const RefPtr& resRegister) + { + resRegister_ = resRegister; + } + + void RegisterViewDestroyCallback(ViewDestoryCallback&& callback) override {} + + const RefPtr& GetPlatformResRegister() const override + { + return resRegister_; + } + + ViewType GetViewType() const override + { + return AceView::ViewType::SURFACE_VIEW; + } + + std::unique_ptr GetDrawDelegate() override; + std::unique_ptr GetPlatformWindow() override; + bool Dump(const std::vector& params) override; + +private: + void NotifySurfaceChanged(int width, int height) const + { + if (viewChangeCallback_) { + viewChangeCallback_(width, height); + } + } + + void NotifyDensityChanged(double density) const + { + if (densityChangeCallback_) { + densityChangeCallback_(density); + } + } + + void NotifySystemBarHeightChanged(double statusBar, double navigationBar) const + { + if (systemBarHeightChangeCallback_) { + systemBarHeightChangeCallback_(statusBar, navigationBar); + } + } + + void NotifySurfaceDestroyed() const + { + if (surfaceDestroyCallback_) { + surfaceDestroyCallback_(); + } + } + + bool IsLastPage() const; + bool IsNeedForbidToPlatform(TouchPoint point); + + std::unique_ptr shell_holder_; + TouchEventCallback touchEventCallback_; + MouseEventCallback mouseEventCallback_; + RotationEventCallBack rotationEventCallBack_; + ViewChangeCallback viewChangeCallback_; + DensityChangeCallback densityChangeCallback_; + SystemBarHeightChangeCallbak systemBarHeightChangeCallback_; + SurfaceDestroyCallback surfaceDestroyCallback_; + IdleCallback idleCallback_; + int32_t instanceId_ = 0; + bool viewLaunched_ = false; + RefPtr resRegister_; + KeyEventCallback keyEventCallback_; + KeyEventRecognizer keyEventRecognizer_; + // mark the touch event's state, HORIZONTAL_STATE: the event should send to platform, VERTICAL_STATE: should not + enum class EventState { INITIAL_STATE, HORIZONTAL_STATE, VERTICAL_STATE }; + + struct TouchPointInfo { + Offset offset_; + EventState eventState_ = EventState::INITIAL_STATE; + + TouchPointInfo() = default; + explicit TouchPointInfo(const Offset& offset) : offset_(offset) {} + ~TouchPointInfo() = default; + }; + std::unordered_map touchPointInfoMap_; + + ACE_DISALLOW_COPY_AND_MOVE(FlutterAceView); +}; + +} // namespace OHOS::Ace::Platform + +#endif // FOUNDATION_ACE_ADAPTER_OHOS_CPP_FLUTTER_ACE_VIEW_H diff --git a/adapter/ohos/cpp/platform_event_callback.h b/adapter/ohos/cpp/platform_event_callback.h new file mode 100644 index 00000000..c450e866 --- /dev/null +++ b/adapter/ohos/cpp/platform_event_callback.h @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_ADAPTER_OHOS_CPP_PLATFORM_EVENT_CALLBACK_H +#define FOUNDATION_ACE_ADAPTER_OHOS_CPP_PLATFORM_EVENT_CALLBACK_H + +#include "base/utils/noncopyable.h" + +namespace OHOS::Ace::Platform { + +class PlatformEventCallback { +public: + PlatformEventCallback() = default; + virtual ~PlatformEventCallback() = default; + virtual void OnFinish() const = 0; + virtual void OnStatusBarBgColorChanged(uint32_t color) = 0; + +private: + ACE_DISALLOW_COPY_AND_MOVE(PlatformEventCallback); +}; + +} // namespace OHOS::Ace::Platform + +#endif // FOUNDATION_ACE_ADAPTER_OHOS_CPP_PLATFORM_EVENT_CALLBACK_H diff --git a/adapter/ohos/osal/BUILD.gn b/adapter/ohos/osal/BUILD.gn new file mode 100644 index 00000000..ae57002a --- /dev/null +++ b/adapter/ohos/osal/BUILD.gn @@ -0,0 +1,59 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +# build static +template("ace_osal_ohos_source_set") { + forward_variables_from(invoker, "*") + + ohos_source_set(target_name) { + defines += invoker.defines + if (is_standard_system) { + external_deps = [ + "bytrace_standard:bytrace_core", + "hiviewdfx_hilog_native:libhilog", + "startup_l2:syspara", + ] + configs = [ + "//base/startup/syspara_lite/interfaces/innerkits/native/syspara:syspara_config", + "$ace_root:ace_config", + "$flutter_root:flutter_config", + ] + } + include_dirs = [ "//utils/native/base/include" ] + + sources = [ + "$ace_root/adapter/ohos/osal/ace_trace.cpp", + "$ace_root/adapter/ohos/osal/event_report.cpp", + "$ace_root/adapter/ohos/osal/log_wrapper.cpp", + "$ace_root/adapter/ohos/osal/system_properties.cpp", + ] + external_deps += [ "hisysevent_native:libhisysevent" ] + + deps = [ + "$ace_root/adapter/common/cpp:ace_base_common_$platform", + "//third_party/zlib:libz", + ] + + if (is_standard_system) { + deps += [ "$ace_root/adapter/ohos/cpp:ace_base_platform_ohos" ] + } + } +} + +ace_osal_ohos_source_set("ace_osal_ohos") { + defines = ace_ohos_defines + platform = "ohos" +} diff --git a/adapter/ohos/osal/ace_trace.cpp b/adapter/ohos/osal/ace_trace.cpp new file mode 100644 index 00000000..30d1cbf4 --- /dev/null +++ b/adapter/ohos/osal/ace_trace.cpp @@ -0,0 +1,117 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "base/log/ace_trace.h" + +#include +#include +#include +#include + +#include + +#include "bytrace.h" + +#include "base/log/log.h" +#include "base/utils/macros.h" +#include "base/utils/system_properties.h" + +namespace OHOS::Ace { +namespace { + +pthread_key_t g_threadLocalKey; + +bool InitThreadLocalData() +{ + static std::once_flag onceFlag; + static bool initialized = false; + std::call_once(onceFlag, []() { + auto retVal = pthread_key_create(&g_threadLocalKey, [](void* ptr) { + if (ptr != nullptr) { + delete reinterpret_cast*>(ptr); + } + }); + if (retVal == 0) { + initialized = true; + } + }); + return initialized; +} + +bool PushString(const std::string& str) +{ + auto vector = reinterpret_cast*>(pthread_getspecific(g_threadLocalKey)); + if (vector == nullptr) { + vector = new std::vector(); + if (pthread_setspecific(g_threadLocalKey, vector) != 0) { + delete vector; + return false; + } + } + vector->emplace_back(str); + return true; +} + +bool PopString(std::string& str) +{ + auto vector = reinterpret_cast*>(pthread_getspecific(g_threadLocalKey)); + if (vector == nullptr || vector->empty()) { + return false; + } + str = std::move(vector->back()); + vector->pop_back(); + return true; +} + +} // namespace + +bool AceTraceEnabled() +{ + return SystemProperties::GetTraceEnabled(); +} + +void AceTraceBegin(const char* name) +{ + if (name == nullptr) { + return; + } + + if (InitThreadLocalData()) { + std::string nameStr(name); + if (PushString(nameStr)) { + StartTrace(BYTRACE_TAG_ACE, nameStr); + } else { + LOGW("Failed push current tag name"); + } + } else { + LOGW("Failed to initialized local thread data"); + } +} + +void AceTraceEnd() +{ + if (InitThreadLocalData()) { + std::string nameStr; + if (PopString(nameStr)) { + FinishTrace(BYTRACE_TAG_ACE, nameStr); + } else { + LOGW("Failed pop last tag name"); + } + } else { + LOGW("Failed to initialized local thread data"); + } +} + +} // namespace OHOS::Ace diff --git a/adapter/ohos/osal/event_report.cpp b/adapter/ohos/osal/event_report.cpp new file mode 100644 index 00000000..b6fd7aad --- /dev/null +++ b/adapter/ohos/osal/event_report.cpp @@ -0,0 +1,239 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "base/log/event_report.h" + +#include +#include +#include + +#include "hisysevent.h" + +#include "base/json/json_util.h" +#include "core/common/ace_engine.h" + +namespace OHOS::Ace { +namespace { + +constexpr char EVENT_KEY_ERROR_TYPE[] = "ERROR_TYPE"; +constexpr char EVENT_KEY_UID[] = "UID"; +constexpr char EVENT_KEY_PACKAGE_NAME[] = "PACKAGE_NAME"; +constexpr char EVENT_KEY_PROCESS_NAME[] = "PROCESS_NAME"; +constexpr char EVENT_KEY_MESSAGE[] = "MESSAGE"; +constexpr char EVENT_KEY_CMD[] = "CMD"; +constexpr char EVENT_KEY_TIME[] = "TIME"; +constexpr char EVENT_KEY_JS_ERR_RAW_CODE[] = "JS_ERR_RAW_CODE"; +constexpr char EVENT_KEY_REASON[] = "REASON"; +constexpr char EVENT_KEY_SUMMARY[] = "SUMMARY"; + +constexpr int32_t MAX_PACKAGE_NAME_LENGTH = 128; +constexpr int32_t JS_CRASH_RAW_EVENT_ID = 5002; +constexpr int32_t JS_ERR_RAW_CODE = 3; +constexpr int32_t UIP_WARNING_EVENT_ID = 10257; +constexpr int32_t UIP_FREEZE_EVENT_ID = 10258; +constexpr int32_t UIP_RECOVER_EVENT_ID = 10280; + +constexpr char DUMP_LOG_COMMAND[] = "B"; + +void StrTrim(std::string& str) +{ + if (str.size() > MAX_PACKAGE_NAME_LENGTH) { + str = str.substr(0, MAX_PACKAGE_NAME_LENGTH); + } +} + +} // namespace + +void EventReport::SendEvent(const EventInfo& eventInfo) +{ + auto packageName = AceEngine::Get().GetPackageName(); + if (packageName.size() > MAX_PACKAGE_NAME_LENGTH) { + StrTrim(packageName); + } + OHOS::HiviewDFX::HiSysEvent::Write(OHOS::HiviewDFX::HiSysEvent::Domain::ACE, std::to_string(eventInfo.eventType), + OHOS::HiviewDFX::HiSysEvent::EventType::FAULT, + EVENT_KEY_ERROR_TYPE, eventInfo.errorType, + EVENT_KEY_PACKAGE_NAME, packageName); +} + +void EventReport::SendAppStartException(AppStartExcepType type) +{ + EventInfo eventInfo = { + .eventType = EXCEPTION_FRAMEWORK_APP_START, + .errorType = static_cast(type), + }; + + SendEventInner(eventInfo); +} + +void EventReport::SendPageRouterException(PageRouterExcepType type, const std::string& pageUrl) +{ + EventInfo eventInfo = { + .eventType = EXCEPTION_FRAMEWORK_PAGE_ROUTER, + .errorType = static_cast(type), + .pageUrl = pageUrl, + }; + + SendEventInner(eventInfo); +} + +void EventReport::SendComponentException(ComponentExcepType type) +{ + EventInfo eventInfo = { + .eventType = EXCEPTION_COMPONENT, + .errorType = static_cast(type), + }; + + SendEventInner(eventInfo); +} + +void EventReport::SendAPIChannelException(APIChannelExcepType type) +{ + EventInfo eventInfo = { + .eventType = EXCEPTION_API_CHANNEL, + .errorType = static_cast(type), + }; + + SendEventInner(eventInfo); +} + +void EventReport::SendRenderException(RenderExcepType type) +{ + EventInfo eventInfo = { + .eventType = EXCEPTION_RENDER, + .errorType = static_cast(type), + }; + + SendEventInner(eventInfo); +} + +void EventReport::SendJsException(JsExcepType type) +{ + EventInfo eventInfo = { + .eventType = EXCEPTION_JS, + .errorType = static_cast(type), + }; + + SendEventInner(eventInfo); +} + +void EventReport::SendAnimationException(AnimationExcepType type) +{ + EventInfo eventInfo = { + .eventType = EXCEPTION_ANIMATION, + .errorType = static_cast(type), + }; + + SendEventInner(eventInfo); +} + +void EventReport::SendEventException(EventExcepType type) +{ + EventInfo eventInfo = { + .eventType = EXCEPTION_EVENT, + .errorType = static_cast(type), + }; + + SendEventInner(eventInfo); +} + +void EventReport::SendInternalException(InternalExcepType type) +{ + EventInfo eventInfo = { + .eventType = EXCEPTION_INTERNATIONALIZATION, + .errorType = static_cast(type), + }; + + SendEventInner(eventInfo); +} + +void EventReport::SendAccessibilityException(AccessibilityExcepType type) +{ + EventInfo eventInfo = { + .eventType = EXCEPTION_ACCESSIBILITY, + .errorType = static_cast(type), + }; + + SendEventInner(eventInfo); +} + +void EventReport::SendFormException(FormExcepType type) +{ + EventInfo eventInfo = { + .eventType = EXCEPTION_FORM, + .errorType = static_cast(type), + }; + + SendEventInner(eventInfo); +} + +void EventReport::JsEventReport(int32_t eventType, const std::string& jsonStr) +{ + if (!JsonUtil::ParseJsonString(jsonStr)) { + LOGE("jsonStr is not a JsonArray."); + return; + } +} + +void EventReport::JsErrReport( + int32_t uid, const std::string& packageName, const std::string& reason, const std::string& summary) +{ + OHOS::HiviewDFX::HiSysEvent::Write(OHOS::HiviewDFX::HiSysEvent::Domain::ACE, std::to_string(JS_CRASH_RAW_EVENT_ID), + OHOS::HiviewDFX::HiSysEvent::EventType::FAULT, + EVENT_KEY_TIME, std::to_string((int32_t)std::time(nullptr)), + EVENT_KEY_UID, std::to_string(uid), + EVENT_KEY_JS_ERR_RAW_CODE, std::to_string(JS_ERR_RAW_CODE), + EVENT_KEY_PACKAGE_NAME, packageName, + EVENT_KEY_REASON, reason, + EVENT_KEY_SUMMARY, summary); +} + +void EventReport::ANRRawReport(RawEventType type, int32_t uid, const std::string& packageName, + const std::string& processName, const std::string& msg) +{ + int32_t pid = getpid(); + int32_t eventId = 0; + std::string cmd = " "; + if (type == RawEventType::WARNING) { + eventId = UIP_WARNING_EVENT_ID; + cmd = "p=" + std::to_string(pid); + } else if (type == RawEventType::FREEZE) { + eventId = UIP_FREEZE_EVENT_ID; + cmd = DUMP_LOG_COMMAND; + } else { + eventId = UIP_RECOVER_EVENT_ID; + } + std::string eventIdStr = std::to_string(eventId); + std::string uidStr = std::to_string(uid); + OHOS::HiviewDFX::HiSysEvent::Write(OHOS::HiviewDFX::HiSysEvent::Domain::ACE, eventIdStr, + OHOS::HiviewDFX::HiSysEvent::EventType::FAULT, + EVENT_KEY_UID, uidStr, + EVENT_KEY_PACKAGE_NAME, packageName, + EVENT_KEY_PROCESS_NAME, processName, + EVENT_KEY_MESSAGE, msg, + EVENT_KEY_CMD, cmd); +} + +void EventReport::SendEventInner(const EventInfo& eventInfo) +{ + auto packageName = AceEngine::Get().GetPackageName(); + StrTrim(packageName); + OHOS::HiviewDFX::HiSysEvent::Write(OHOS::HiviewDFX::HiSysEvent::Domain::ACE, std::to_string(eventInfo.eventType), + OHOS::HiviewDFX::HiSysEvent::EventType::FAULT, + EVENT_KEY_ERROR_TYPE, eventInfo.errorType, + EVENT_KEY_PACKAGE_NAME, packageName); +} + +} // namespace OHOS::Ace diff --git a/adapter/ohos/osal/fake_asset_manager.h b/adapter/ohos/osal/fake_asset_manager.h new file mode 100644 index 00000000..e59f860b --- /dev/null +++ b/adapter/ohos/osal/fake_asset_manager.h @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_ADAPTER_OHOS_CPP_FAKE_ASSET_MANAGER_H +#define FOUNDATION_ACE_ADAPTER_OHOS_CPP_FAKE_ASSET_MANAGER_H + +#include "base/resource/asset_manager.h" + +namespace OHOS::Ace { + +class FakeAsset final : public Asset { +public: + ~FakeAsset() override = default; + + size_t GetSize() const override + { + return 0; + } + + const uint8_t* GetData() const override + { + return nullptr; + } +}; + +class FakeAssetManager final : public AssetManager { +public: + ~FakeAssetManager() override = default; + + RefPtr GetAsset(const std::string& assetName) override + { + return nullptr; + } +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_ADAPTER_OHOS_CPP_FAKE_ASSET_MANAGER_H diff --git a/adapter/ohos/osal/fake_task_executor.h b/adapter/ohos/osal/fake_task_executor.h new file mode 100644 index 00000000..283522d7 --- /dev/null +++ b/adapter/ohos/osal/fake_task_executor.h @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_ADAPTER_OHOS_CPP_FAKE_TASK_EXECUTOR_H +#define FOUNDATION_ACE_ADAPTER_OHOS_CPP_FAKE_TASK_EXECUTOR_H + +#include "base/thread/background_task_executor.h" +#include "base/thread/task_executor.h" + +namespace OHOS::Ace { + +class FakeTaskExecutor final : public TaskExecutor { +public: + bool WillRunOnCurrentThread(TaskType type) const final + { + switch (type) { + case TaskType::PLATFORM: + case TaskType::UI: + case TaskType::IO: + case TaskType::GPU: + case TaskType::JS: + return false; + case TaskType::BACKGROUND: + // Always return false for background tasks. + return false; + default: + return false; + } + } + + void AddTaskObserver(Task&& callback) {} + void RemoveTaskObserver() {} + +private: + bool OnPostTask(Task&& task, TaskType type, uint32_t delayTime) const final + { + switch (type) { + case TaskType::PLATFORM: + case TaskType::UI: + case TaskType::IO: + case TaskType::GPU: + case TaskType::JS: + return false; + case TaskType::BACKGROUND: + // Ignore delay time + return BackgroundTaskExecutor::GetInstance().PostTask(std::move(task)); + default: + return false; + } + } +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_ADAPTER_OHOS_CPP_FAKE_TASK_EXECUTOR_H diff --git a/adapter/ohos/osal/log_wrapper.cpp b/adapter/ohos/osal/log_wrapper.cpp new file mode 100644 index 00000000..ed7fef8f --- /dev/null +++ b/adapter/ohos/osal/log_wrapper.cpp @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "base/log/log_wrapper.h" + +#include + +#include "hilog/log.h" + +extern "C" { +int HiLogPrintArgs(LogType type, LogLevel level, unsigned int domain, const char* tag, const char* fmt, va_list ap); +} + +namespace OHOS::Ace { + +namespace { + +const ::LogLevel LOG_LEVELS[] = { + LOG_DEBUG, + LOG_INFO, + LOG_WARN, + LOG_ERROR, + LOG_FATAL, +}; + +const char* LOG_TAGS[] = { + "Ace", + "JSApp", +}; + +constexpr uint32_t LOG_DOMAINS[] = { + 0xD003900, + 0xD003B00, +}; + +} + +// initial static member object +LogLevel LogWrapper::level_ = LogLevel::DEBUG; + +char LogWrapper::GetSeparatorCharacter() +{ + return '/'; +} + +void LogWrapper::PrintLog(LogDomain domain, LogLevel level, const char* fmt, va_list args) +{ + HiLogPrintArgs(LOG_CORE, LOG_LEVELS[static_cast(level)], LOG_DOMAINS[static_cast(domain)], + LOG_TAGS[static_cast(domain)], fmt, args); +} + +} // namespace OHOS::Ace diff --git a/adapter/ohos/osal/system_properties.cpp b/adapter/ohos/osal/system_properties.cpp new file mode 100644 index 00000000..b8d66691 --- /dev/null +++ b/adapter/ohos/osal/system_properties.cpp @@ -0,0 +1,149 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "base/utils/system_properties.h" +#include "core/common/ace_application_info.h" + +#include "parameters.h" + +#include "base/log/log.h" + +namespace OHOS::Ace { +namespace { + +const char PROPERTY_DEVICE_TYPE[] = "ro.build.characteristics"; +const char PROPERTY_DEVICE_TYPE_DEFAULT[] = "default"; +const char PROPERTY_DEVICE_TYPE_TV[] = "tv"; +const char PROPERTY_DEVICE_TYPE_WATCH[] = "watch"; +const char PROPERTY_DEVICE_TYPE_CAR[] = "car"; + +constexpr int32_t ORIENTATION_PORTRAIT = 0; +constexpr int32_t ORIENTATION_LANDSCAPE = 1; + +void Swap(int32_t& deviceWidth, int32_t& deviceHeight) +{ + int32_t temp = deviceWidth; + deviceWidth = deviceHeight; + deviceHeight = temp; +} + +} // namespace + +void SystemProperties::InitDeviceType(DeviceType) +{ + // Do nothing, no need to store type here, use system property at 'GetDeviceType' instead. +} + +bool SystemProperties::traceEnabled_ = system::GetParameter("persist.ace.trace.enabled", "0") == "1"; +bool SystemProperties::isRound_ = false; +int32_t SystemProperties::width_ = 0; +int32_t SystemProperties::height_ = 0; +int32_t SystemProperties::deviceWidth_ = 0; +int32_t SystemProperties::deviceHeight_ = 0; +double SystemProperties::resolution_ = 1.0; +DeviceType SystemProperties::deviceType_ { DeviceType::UNKNOWN }; +DeviceOrientation SystemProperties::orientation_ { DeviceOrientation::PORTRAIT }; +std::string SystemProperties::brand_ = INVALID_PARAM; +std::string SystemProperties::manufacturer_ = INVALID_PARAM; +std::string SystemProperties::model_ = INVALID_PARAM; +std::string SystemProperties::product_ = INVALID_PARAM; +std::string SystemProperties::apiVersion_ = INVALID_PARAM; +std::string SystemProperties::releaseType_ = INVALID_PARAM; +std::string SystemProperties::paramDeviceType_ = INVALID_PARAM; +int32_t SystemProperties::mcc_ = MCC_UNDEFINED; +int32_t SystemProperties::mnc_ = MNC_UNDEFINED; +ColorMode SystemProperties::colorMode_ { ColorMode::LIGHT }; + +void SystemProperties::UpdateSurfaceStatus(int32_t width, int32_t height) +{ + width_ = width; + height_ = height; +} + +DeviceType SystemProperties::GetDeviceType() +{ + InitDeviceTypeBySystemProperty(); + return deviceType_; +} + +void SystemProperties::InitDeviceTypeBySystemProperty() +{ + if (deviceType_ != DeviceType::UNKNOWN) { + return; + } + + auto deviceProp = system::GetParameter(PROPERTY_DEVICE_TYPE, PROPERTY_DEVICE_TYPE_DEFAULT); + // Properties: "default", "tv", "tablet", "watch", "car" + LOGD("GetDeviceType, deviceProp=%{private}s.", deviceProp.c_str()); + if (deviceProp == PROPERTY_DEVICE_TYPE_TV) { + deviceType_ = DeviceType::TV; + } else if (deviceProp == PROPERTY_DEVICE_TYPE_CAR) { + deviceType_ = DeviceType::CAR; + } else if (deviceProp == PROPERTY_DEVICE_TYPE_WATCH) { + deviceType_ = DeviceType::WATCH; + } else { + deviceType_ = DeviceType::PHONE; + } +} + +void SystemProperties::InitDeviceInfo(int32_t deviceWidth, int32_t deviceHeight, int32_t orientation, + double resolution, bool isRound) +{ + // SetDeviceOrientation should be eralier than deviceWidth/deviceHeight init. + SetDeviceOrientation(orientation); + + isRound_ = isRound; + resolution_ = resolution; + deviceWidth_ = deviceWidth; + deviceHeight_ = deviceHeight; + brand_ = system::GetParameter("ro.product.brand", INVALID_PARAM); + manufacturer_ = system::GetParameter("ro.product.manufacturer", INVALID_PARAM); + model_ = system::GetParameter("ro.product.model", INVALID_PARAM); + product_ = system::GetParameter("ro.product.name", INVALID_PARAM); + apiVersion_ = system::GetParameter("hw_sc.build.os.apiversion", INVALID_PARAM); + releaseType_ = system::GetParameter("hw_sc.build.os.releasetype", INVALID_PARAM); + paramDeviceType_ = system::GetParameter("hw_sc.build.os.devicetype", INVALID_PARAM); + + InitDeviceTypeBySystemProperty(); +} + +void SystemProperties::SetDeviceOrientation(int32_t orientation) +{ + if (orientation == ORIENTATION_PORTRAIT && orientation_ != DeviceOrientation::PORTRAIT) { + Swap(deviceWidth_, deviceHeight_); + orientation_ = DeviceOrientation::PORTRAIT; + } else if (orientation == ORIENTATION_LANDSCAPE && orientation_ != DeviceOrientation::LANDSCAPE) { + Swap(deviceWidth_, deviceHeight_); + orientation_ = DeviceOrientation::LANDSCAPE; + } else { + LOGW("SetDeviceOrientation, undefined orientation"); + } +} + +float SystemProperties::GetFontWeightScale() +{ + // Default value of font weight scale is 1.0. + std::string prop = + "persist.sys.font_wght_scale_for_user" + std::to_string(AceApplicationInfo::GetInstance().GetUserId()); + return std::stof(system::GetParameter(prop, "1.0")); +} + +void SystemProperties::InitMccMnc(int32_t mcc, int32_t mnc) +{ + mcc_ = mcc; + mnc_ = mnc; +} + +} // namespace OHOS::Ace diff --git a/adapter/preview/entrance/BUILD.gn b/adapter/preview/entrance/BUILD.gn new file mode 100644 index 00000000..e9264d29 --- /dev/null +++ b/adapter/preview/entrance/BUILD.gn @@ -0,0 +1,70 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +template("libace_engine") { + forward_variables_from(invoker, "*") + + ohos_shared_library(target_name) { + defines += invoker.defines + sources = [ + "$ace_root/adapter/common/cpp/ace_res_config.cpp", + "$ace_root/adapter/common/cpp/ace_res_key_parser.cpp", + "$ace_root/adapter/common/cpp/ace_trace.cpp", + "$ace_root/adapter/common/cpp/localization.cpp", + "$ace_root/adapter/common/cpp/thread_util.cpp", + "$ace_root/adapter/preview/osal/download_manager.cpp", + "ace_ability.cpp", + "ace_application_info.cpp", + "ace_container.cpp", + "ace_resource_register.cpp", + "flutter_ace_view.cpp", + "flutter_window.cpp", + ] + + configs = [ + "$ace_root:ace_config", + "$flutter_root:flutter_config", + "$flutter_root:flutter_glfw_config", + "$flutter_root:icu_config_$platform", + "//third_party/curl:curl_config", + ] + + cflags = [ "-std=c++17" ] + deps = [ + "$ace_root/frameworks/base:ace_base_$platform", + "$ace_root/frameworks/bridge:js_engine_$platform", + "$ace_root/frameworks/core:ace_core_$platform", + "$flutter_root:ace_skia_$platform", + "//third_party/curl:curl", + ] + if (platform == "windows") { + defines += [ "NOGDI" ] + } + if (platform == "mac") { + include_dirs = [ "//utils/native/base/include" ] + } + } +} + +libace_engine("libace_engine_windows") { + defines = ace_windows_defines + platform = "windows" +} + +libace_engine("libace_engine_mac") { + defines = ace_mac_defines + platform = "mac" +} diff --git a/adapter/preview/entrance/ace_ability.cpp b/adapter/preview/entrance/ace_ability.cpp new file mode 100644 index 00000000..1c4fb967 --- /dev/null +++ b/adapter/preview/entrance/ace_ability.cpp @@ -0,0 +1,294 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "adapter/preview/entrance/ace_ability.h" + +#include + +#include "adapter/preview/entrance/ace_application_info.h" +#include "adapter/preview/entrance/ace_container.h" +#include "frameworks/bridge/common/inspector/inspector_client.h" +#include "frameworks/bridge/common/utils/utils.h" +#include "frameworks/bridge/js_frontend/js_frontend.h" + +namespace OHOS::Ace::Platform { + +std::atomic AceAbility::loopRunning_ = true; + +namespace { + +// JS frontend maintain the page ID self, so it's useless to pass page ID from platform +// layer, neither OpenHarmony or Windows. +constexpr int32_t UNUSED_PAGE_ID = 1; + +// Different with mobile, we don't support multi-instances in Windows, because we only want +// preivew UI effect, it doesn't make scense to create multi ability in one process. +constexpr int32_t ACE_INSTANCE_ID = 0; + +constexpr char ASSET_PATH_SHARE[] = "share"; +#ifdef WINDOWS_PLATFORM +constexpr char DELIMITER[] = "\\"; +#else +constexpr char DELIMITER[] = "/"; +#endif + +#ifdef USE_GLFW_WINDOW +// Screen Density Coefficient/Base Density = Resolution/ppi +constexpr double SCREEN_DENSITY_COEFFICIENT_PHONE = 1080.0 * 160.0 / 480.0; +constexpr double SCREEN_DENSITY_COEFFICIENT_WATCH = 466.0 * 160 / 320.0; +constexpr double SCREEN_DENSITY_COEFFICIENT_TABLE = 2560.0 * 160.0 / 280.0; +constexpr double SCREEN_DENSITY_COEFFICIENT_TV = 3840.0 * 160.0 / 640.0; +#endif +} // namespace + +std::unique_ptr AceAbility::CreateInstance(AceRunArgs& runArgs) +{ + LOGI("Start create AceAbility instance"); + bool initSucceeded = FlutterDesktopInit(); + if (!initSucceeded) { + LOGE("Could not create window; AceDesktopInit failed."); + return nullptr; + } + + AceApplicationInfo::GetInstance().SetLocale(runArgs.language, runArgs.region, runArgs.script, ""); + + auto controller = FlutterDesktopCreateWindow( + runArgs.deviceWidth, runArgs.deviceHeight, runArgs.windowTitle.c_str(), runArgs.onRender); + auto aceAbility = std::make_unique(runArgs); + aceAbility->SetGlfwWindowController(controller); + return aceAbility; +} + +bool AceAbility::DispatchTouchEvent(const TouchPoint& event) +{ + auto container = AceContainer::GetContainerInstance(ACE_INSTANCE_ID); + if (!container) { + LOGE("container is null"); + return false; + } + + auto aceView = container->GetAceView(); + if (!aceView) { + LOGE("aceView is null"); + return false; + } + + std::promise touchPromise; + std::future touchFuture = touchPromise.get_future(); + container->GetTaskExecutor()->PostTask( + [aceView, event, &touchPromise]() { + bool isHandled = aceView->HandleTouchEvent(event); + touchPromise.set_value(isHandled); + }, + TaskExecutor::TaskType::PLATFORM); + return touchFuture.get(); +} + +bool AceAbility::DispatchBackPressedEvent() +{ + LOGI("DispatchBackPressedEvent start "); + auto container = AceContainer::GetContainerInstance(ACE_INSTANCE_ID); + if (!container) { + return false; + } + + auto context = container->GetPipelineContext(); + if (!context) { + return false; + } + + std::promise backPromise; + std::future backFuture = backPromise.get_future(); + container->GetTaskExecutor()->PostTask( + [container, context, &backPromise]() { + bool canBack = false; + if (context->IsLastPage()) { + LOGW("Can't back because this is the last page!"); + } else { + canBack = context->CallRouterBackToPopPage(); + } + backPromise.set_value(canBack); + }, + TaskExecutor::TaskType::PLATFORM); + return backFuture.get(); +} + +AceAbility::AceAbility(const AceRunArgs& runArgs) : runArgs_(runArgs) +{ + SystemProperties::InitDeviceInfo(runArgs_.deviceWidth, runArgs_.deviceHeight, + runArgs_.orientation == DeviceOrientation::PORTRAIT ? 0 : 1, runArgs_.resolution, runArgs_.isRound); + SystemProperties::InitDeviceType(runArgs_.deviceType); + SystemProperties::SetColorMode(runArgs_.colorMode == OHOS::Ace::Platform::ColorMode::DARK ? + OHOS::Ace::ColorMode::DARK : OHOS::Ace::ColorMode::LIGHT); + if (runArgs_.formsEnabled) { + LOGI("CreateContainer with JS_CARD frontend"); + AceContainer::CreateContainer(ACE_INSTANCE_ID, FrontendType::JS_CARD); + } else { + LOGI("CreateContainer with JS frontend"); + AceContainer::CreateContainer(ACE_INSTANCE_ID, FrontendType::JS); + } +} + +AceAbility::~AceAbility() +{ + if (controller_) { + FlutterDesktopDestroyWindow(controller_); + } + FlutterDesktopTerminate(); +} + +std::string GetCustomAssetPath(std::string assetPath) +{ + if (assetPath.empty()) { + LOGE("AssetPath is null."); + return std::string(); + } + std::string customAssetPath; + if (OHOS::Ace::Framework::EndWith(assetPath, DELIMITER)) { + assetPath = assetPath.substr(0, assetPath.size() - 1); + } + customAssetPath = assetPath.substr(0, assetPath.find_last_of(DELIMITER) + 1); + return customAssetPath; +} + +void AceAbility::InitEnv() +{ + AceContainer::AddAssetPath( + ACE_INSTANCE_ID, "", { runArgs_.assetPath, GetCustomAssetPath(runArgs_.assetPath).append(ASSET_PATH_SHARE) }); + + AceContainer::SetResourcesPathAndThemeStyle(ACE_INSTANCE_ID, runArgs_.resourcesPath, + runArgs_.themeId, runArgs_.colorMode); + + auto view = new FlutterAceView(ACE_INSTANCE_ID); + AceContainer::SetView(view, runArgs_.resolution, runArgs_.deviceWidth, runArgs_.deviceHeight); + IdleCallback idleNoticeCallback = [view](int64_t deadline) { view->ProcessIdleEvent(deadline); }; + FlutterDesktopSetIdleCallback(controller_, idleNoticeCallback); + + // Should make it possible to update surface changes by using viewWidth and viewHeight. + view->NotifySurfaceChanged(runArgs_.deviceWidth, runArgs_.deviceHeight); + view->NotifyDensityChanged(runArgs_.resolution); +} + +void AceAbility::Start() +{ + AceContainer::RunPage(ACE_INSTANCE_ID, UNUSED_PAGE_ID, runArgs_.url, ""); + RunEventLoop(); +} + +void AceAbility::Stop() +{ + auto container = AceContainer::GetContainerInstance(ACE_INSTANCE_ID); + if (!container) { + return; + } + + container->GetTaskExecutor()->PostTask([]() { loopRunning_ = false; }, TaskExecutor::TaskType::PLATFORM); +} + +#ifdef USE_GLFW_WINDOW +void AdaptDeviceType(AceRunArgs& runArgs) +{ + if (runArgs.deviceType == DeviceType::PHONE) { + runArgs.resolution = runArgs.deviceWidth / SCREEN_DENSITY_COEFFICIENT_PHONE; + } else if (runArgs.deviceType == DeviceType::WATCH) { + runArgs.resolution = runArgs.deviceWidth / SCREEN_DENSITY_COEFFICIENT_WATCH; + } else if (runArgs.deviceType == DeviceType::TABLET) { + runArgs.resolution = runArgs.deviceWidth / SCREEN_DENSITY_COEFFICIENT_TABLE; + } else if (runArgs.deviceType == DeviceType::TV) { + runArgs.resolution = runArgs.deviceWidth / SCREEN_DENSITY_COEFFICIENT_TV; + } else { + LOGE("DeviceType not supported"); + } +} +#endif + +void AceAbility::RunEventLoop() +{ + while (!FlutterDesktopWindowShouldClose(controller_) && loopRunning_) { + FlutterDesktopWaitForEvents(controller_); +#ifdef USE_GLFW_WINDOW + auto window = FlutterDesktopGetWindow(controller_); + int width; + int height; + FlutterDesktopGetFramebufferSize(window, &width, &height); + if (width != runArgs_.deviceWidth || height != runArgs_.deviceHeight) { + AdaptDeviceType(runArgs_); + SurfaceChanged(runArgs_.orientation, width, height, runArgs_.resolution); + } +#endif + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + } + loopRunning_ = true; + + // Currently exit loop is only to restart the AceContainer for real-time preivew case. + // Previewer background thread will release the AceAbility instance and create new one, + // then call the InitEnv() and Start() again. + auto container = AceContainer::GetContainerInstance(ACE_INSTANCE_ID); + if (!container) { + LOGE("container is null"); + FlutterDesktopDestroyWindow(controller_); + controller_ = nullptr; + return; + } + auto viewPtr = container->GetAceView(); + AceContainer::DestroyContainer(ACE_INSTANCE_ID); + + FlutterDesktopDestroyWindow(controller_); + if (viewPtr != nullptr) { + delete viewPtr; + viewPtr = nullptr; + } + controller_ = nullptr; +} + +void AceAbility::SurfaceChanged( + const DeviceOrientation& orientation, const int32_t& width, const int32_t& height, const double& resolution) +{ + SystemProperties::InitDeviceInfo( + width, height, orientation == DeviceOrientation::PORTRAIT ? 0 : 1, resolution, runArgs_.isRound); + auto container = AceContainer::GetContainerInstance(ACE_INSTANCE_ID); + if (!container) { + LOGE("container is null, SurfaceChanged failed."); + return; + } + + auto viewPtr = container->GetAceView(); + if (viewPtr == nullptr) { + LOGE("aceView is null, SurfaceChanged failed."); + return; + } + viewPtr->NotifySurfaceChanged(width, height); + viewPtr->NotifyDensityChanged(resolution); + runArgs_.orientation = orientation; + runArgs_.deviceWidth = width; + runArgs_.deviceHeight = height; + runArgs_.resolution = resolution; +} + +std::string AceAbility::GetJSONTree() +{ + std::string jsonTreeStr; + OHOS::Ace::Framework::InspectorClient::GetInstance().AssembleJSONTreeStr(jsonTreeStr); + return jsonTreeStr; +} + +std::string AceAbility::GetDefaultJSONTree() +{ + std::string defaultJsonTreeStr; + OHOS::Ace::Framework::InspectorClient::GetInstance().AssembleDefaultJSONTreeStr(defaultJsonTreeStr); + return defaultJsonTreeStr; +} + +} // namespace OHOS::Ace::Platform diff --git a/adapter/preview/entrance/ace_ability.h b/adapter/preview/entrance/ace_ability.h new file mode 100644 index 00000000..5b7a5d96 --- /dev/null +++ b/adapter/preview/entrance/ace_ability.h @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_ADAPTER_PREVIEW_ACE_ABILITY_H +#define FOUNDATION_ACE_ADAPTER_PREVIEW_ACE_ABILITY_H + +#include + +#include "flutter/shell/platform/glfw/public/flutter_glfw.h" + +#include "adapter/preview/entrance/ace_run_args.h" +#include "core/gestures/touch_event.h" + +#ifndef ACE_PREVIEW_EXPORT +#ifdef _WIN32 +#define ACE_PREVIEW_EXPORT __declspec(dllexport) +#elif defined(__APPLE__) +#define ACE_PREVIEW_EXPORT __attribute__((visibility("default"))) +#endif +#endif // ACE_PREVIEW_EXPORT + +namespace OHOS::Ace::Platform { + +class ACE_PREVIEW_EXPORT AceAbility { + +public: + static std::unique_ptr CreateInstance(AceRunArgs& runArgs); + + // Be called in Previewer frontend thread, which is not ACE platform thread. + static void Stop(); + static bool DispatchTouchEvent(const TouchPoint& event); + static bool DispatchBackPressedEvent(); + + explicit AceAbility(const AceRunArgs& runArgs); + ~AceAbility(); + + void InitEnv(); + void Start(); + void SurfaceChanged( + const DeviceOrientation& orientation, const int32_t& width, const int32_t& height, const double& resolution); + std::string GetJSONTree(); + std::string GetDefaultJSONTree(); + +private: + void RunEventLoop(); + + void SetGlfwWindowController(const FlutterDesktopWindowControllerRef& controller) + { + controller_ = controller; + } + + // flag indicating if the glfw message loop should be running. + static std::atomic loopRunning_; + + AceRunArgs runArgs_; + FlutterDesktopWindowControllerRef controller_ = nullptr; +}; + +} // namespace OHOS::Ace::Platform + +#endif // FOUNDATION_ACE_ADAPTER_PREVIEW_ACE_ABILITY_H diff --git a/adapter/preview/entrance/ace_application_info.cpp b/adapter/preview/entrance/ace_application_info.cpp new file mode 100644 index 00000000..14f792c6 --- /dev/null +++ b/adapter/preview/entrance/ace_application_info.cpp @@ -0,0 +1,160 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "adapter/preview/entrance/ace_application_info.h" + +#include "unicode/locid.h" + +#include "adapter/common/cpp/ace_res_config.h" +#include "adapter/common/cpp/ace_res_data_struct.h" +#include "base/i18n/localization.h" +#include "base/log/ace_trace.h" +#include "base/log/log.h" +#include "core/common/ace_engine.h" + +#ifdef WINDOWS_PLATFORM +#include +#else +#include +#include +#endif + +namespace OHOS::Ace::Platform { + +void AceApplicationInfoImpl::ChangeLocale(const std::string& language, const std::string& countryOrRegion) {} + +std::vector AceApplicationInfoImpl::GetLocaleFallback(const std::vector& localeList) const +{ + std::vector fileList; + AceResConfig::MatchAndSortI18nConfigs(localeList, localeTag_, fileList); + return fileList; +} + +std::vector AceApplicationInfoImpl::GetResourceFallback(const std::vector& resourceList) const +{ + std::vector fileList; + std::string deviceConfigTag = GetCurrentDeviceResTag(); + AceResConfig::MatchAndSortResConfigs(resourceList, deviceConfigTag, fileList); + return fileList; +} + +std::string AceApplicationInfoImpl::GetCurrentDeviceResTag() const +{ + ResolutionType resolutionType = AceResConfig::GetResolutionType(SystemProperties::GetResolution()); + AceResConfig deviceResConfig = AceResConfig(SystemProperties::GetMcc(), SystemProperties::GetMnc(), + SystemProperties::GetDevcieOrientation(), SystemProperties::GetColorMode(), SystemProperties::GetDeviceType(), + resolutionType); + return AceResConfig::ConvertResConfigToTag(deviceResConfig); +} + +void AceApplicationInfoImpl::SetLocale(const std::string& language, const std::string& countryOrRegion, + const std::string& script, const std::string& keywordsAndValues) +{ + language_ = language; + countryOrRegion_ = countryOrRegion; + script_ = script; + keywordsAndValues_ = keywordsAndValues; + + localeTag_ = language; + if (!script_.empty()) { + localeTag_.append("-" + script_); + } + localeTag_.append("-" + countryOrRegion_); + + icu::Locale locale(language_.c_str(), countryOrRegion.c_str()); + isRightToLeft_ = locale.isRightToLeft(); + + auto languageList = Localization::GetLanguageList(language_); + Localization::SetLocale( + language_, countryOrRegion_, script, languageList.front(), keywordsAndValues_); +} + +bool AceApplicationInfoImpl::GetFiles(const std::string& filePath, std::vector& fileList) const +{ + const auto& assetBasePathSet = AceEngine::Get().GetAssetBasePath(); + if (assetBasePathSet.empty()) { + LOGE("the assetBasePathSet is empty"); + return false; + } + std::vector assetPaths; +#ifdef WINDOWS_PLATFORM + for (const auto& assetBasePath : assetBasePathSet) { + assetPaths.emplace_back(assetBasePath + "\\" + filePath); + } + for (const auto& path : assetPaths) { + std::string filePath(path); + WIN32_FIND_DATA fileInfo; + HANDLE hFind; + if ((hFind = FindFirstFile(filePath.append("\\*").c_str(), &fileInfo)) != INVALID_HANDLE_VALUE) { + do { + if (strcmp(fileInfo.cFileName, ".") != 0 && strcmp(fileInfo.cFileName, "..") != 0) { + fileList.push_back(fileInfo.cFileName); + } + } while (FindNextFile(hFind, &fileInfo) != 0); + FindClose(hFind); + } + } +#elif defined(MAC_PLATFORM) + for (const auto& assetBasePath : assetBasePathSet) { + assetPaths.emplace_back(assetBasePath + "/" + filePath); + } + for (const auto& assetPath : assetPaths) { + DIR* dp = nullptr; + if (nullptr == (dp = opendir(assetPath.c_str()))) { + continue; + } + struct dirent* dptr = nullptr; + while ((dptr = readdir(dp)) != nullptr) { + if (strcmp(dptr->d_name, ".") != 0 && strcmp(dptr->d_name, "..") != 0) { + fileList.push_back(dptr->d_name); + } + } + closedir(dp); + } +#endif + return true; +} + +bool AceApplicationInfoImpl::GetBundleInfo(const std::string& packageName, AceBundleInfo& bundleInfo) +{ + return false; +} + +double AceApplicationInfoImpl::GetLifeTime() const +{ + return 0; +} + +std::string AceApplicationInfoImpl::GetJsEngineParam(const std::string& key) const +{ + return ""; +} + +AceApplicationInfoImpl& AceApplicationInfoImpl::GetInstance() +{ + static AceApplicationInfoImpl instance; + return instance; +} + +} // namespace OHOS::Ace::Platform + +namespace OHOS::Ace { + +AceApplicationInfo& AceApplicationInfo::GetInstance() +{ + return Platform::AceApplicationInfoImpl::GetInstance(); +} + +} // namespace OHOS::Ace diff --git a/adapter/preview/entrance/ace_application_info.h b/adapter/preview/entrance/ace_application_info.h new file mode 100644 index 00000000..f5f3c56d --- /dev/null +++ b/adapter/preview/entrance/ace_application_info.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_ADAPTER_PREVIEW_ACE_APPLICATION_INFO_H +#define FOUNDATION_ACE_ADAPTER_PREVIEW_ACE_APPLICATION_INFO_H + +#include "core/common/ace_application_info.h" + +namespace OHOS::Ace::Platform { + +class AceApplicationInfoImpl : public AceApplicationInfo { +public: + static AceApplicationInfoImpl& GetInstance(); + + void SetLocale(const std::string& language, const std::string& countryOrRegion, const std::string& script, + const std::string& keywordsAndValues) override; + void ChangeLocale(const std::string& language, const std::string& countryOrRegion) override; + std::vector GetLocaleFallback(const std::vector& localeList) const override; + std::vector GetResourceFallback(const std::vector& resourceList) const override; + bool GetFiles(const std::string& filePath, std::vector& fileList) const override; + + bool GetBundleInfo(const std::string& packageName, AceBundleInfo& bundleInfo) override; + double GetLifeTime() const override; + + std::string GetJsEngineParam(const std::string& key) const override; + + std::string GetCurrentDeviceResTag() const override; +}; + +} // namespace OHOS::Ace::Platform + +#endif // #ifndef FOUNDATION_ACE_ADAPTER_PREVIEW_ACE_APPLICATION_INFO_H \ No newline at end of file diff --git a/adapter/preview/entrance/ace_container.cpp b/adapter/preview/entrance/ace_container.cpp new file mode 100644 index 00000000..53bd0928 --- /dev/null +++ b/adapter/preview/entrance/ace_container.cpp @@ -0,0 +1,385 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "adapter/preview/entrance/ace_container.h" + +#include "flutter/assets/directory_asset_bundle.h" +#include "flutter/lib/ui/ui_dart_state.h" + +#include "adapter/common/cpp/flutter_asset_manager.h" +#include "adapter/preview/entrance/ace_application_info.h" +#include "adapter/preview/entrance/flutter_task_executor.h" +#include "base/log/ace_trace.h" +#include "base/log/event_report.h" +#include "base/log/log.h" +#include "base/utils/system_properties.h" +#include "base/utils/utils.h" +#include "core/common/ace_engine.h" +#include "core/common/ace_view.h" +#include "core/common/platform_bridge.h" +#include "core/common/platform_window.h" +#include "core/common/text_field_manager.h" +#include "core/common/watch_dog.h" +#include "core/common/window.h" +#include "core/components/theme/app_theme.h" +#include "core/components/theme/theme_constants.h" +#include "core/components/theme/theme_manager.h" +#include "core/pipeline/base/element.h" +#include "core/pipeline/pipeline_context.h" +#include "frameworks/bridge/card_frontend/card_frontend.h" +#include "frameworks/bridge/js_frontend/engine/common/js_engine_loader.h" +#include "frameworks/bridge/js_frontend/js_frontend.h" + +#ifdef USE_GLFW_WINDOW +#include "flutter/shell/platform/embedder/embedder.h" +#endif + +namespace OHOS::Ace::Platform { + +std::once_flag AceContainer::onceFlag_; + +AceContainer::AceContainer(int32_t instanceId, FrontendType type) : instanceId_(instanceId), type_(type) +{ + ThemeConstants::InitDeviceType(); + + auto state = flutter::UIDartState::Current()->GetStateById(instanceId); + taskExecutor_ = Referenced::MakeRefPtr(state->GetTaskRunners()); + + InitializeFrontend(); +} + +void AceContainer::InitializeFrontend() +{ + if (type_ == FrontendType::JS) { + frontend_ = Frontend::Create(); + auto jsFrontend = AceType::DynamicCast(frontend_); + jsFrontend->SetJsEngine(Framework::JsEngineLoader::Get().CreateJsEngine(GetInstanceId())); + jsFrontend->SetNeedDebugBreakPoint(AceApplicationInfo::GetInstance().IsNeedDebugBreakPoint()); + jsFrontend->SetDebugVersion(AceApplicationInfo::GetInstance().IsDebugVersion()); + } else if (type_ == FrontendType::JS_CARD) { + AceApplicationInfo::GetInstance().SetCardType(); + frontend_ = AceType::MakeRefPtr(); + } else { + LOGE("Frontend type not supported"); + return; + } + ACE_DCHECK(frontend_); + frontend_->Initialize(type_, taskExecutor_); +} + +void AceContainer::InitializeCallback() +{ + ACE_FUNCTION_TRACE(); + + ACE_DCHECK(aceView_ && taskExecutor_ && pipelineContext_); + auto&& touchEventCallback = [context = pipelineContext_](const TouchPoint& event) { + context->GetTaskExecutor()->PostTask( + [context, event]() { context->OnTouchEvent(event); }, TaskExecutor::TaskType::UI); + }; + aceView_->RegisterTouchEventCallback(touchEventCallback); + + auto&& keyEventCallback = [context = pipelineContext_](const KeyEvent& event) { + bool result = false; + context->GetTaskExecutor()->PostSyncTask( + [context, event, &result]() { result = context->OnKeyEvent(event); }, TaskExecutor::TaskType::UI); + return result; + }; + aceView_->RegisterKeyEventCallback(keyEventCallback); + + auto&& mouseEventCallback = [context = pipelineContext_](const MouseEvent& event) { + context->GetTaskExecutor()->PostTask( + [context, event]() { context->OnMouseEvent(event); }, TaskExecutor::TaskType::UI); + }; + aceView_->RegisterMouseEventCallback(mouseEventCallback); + + auto&& rotationEventCallback = [context = pipelineContext_](const RotationEvent& event) { + bool result = false; + context->GetTaskExecutor()->PostSyncTask( + [context, event, &result]() { result = context->OnRotationEvent(event); }, TaskExecutor::TaskType::UI); + return result; + }; + aceView_->RegisterRotationEventCallback(rotationEventCallback); + + auto&& cardViewPositionCallback = [context = pipelineContext_](int id, float offsetX, float offsetY) { + context->GetTaskExecutor()->PostSyncTask( + [context, id, offsetX, offsetY]() { context->SetCardViewPosition(id, offsetX, offsetY); }, + TaskExecutor::TaskType::UI); + }; + aceView_->RegisterCardViewPositionCallback(cardViewPositionCallback); + + auto&& cardViewParamsCallback = [context = pipelineContext_](const std::string& key, bool focus) { + context->GetTaskExecutor()->PostSyncTask( + [context, key, focus]() { context->SetCardViewAccessibilityParams(key, focus); }, + TaskExecutor::TaskType::UI); + }; + aceView_->RegisterCardViewAccessibilityParamsCallback(cardViewParamsCallback); + + auto&& viewChangeCallback = [context = pipelineContext_](int32_t width, int32_t height) { + ACE_SCOPED_TRACE("ViewChangeCallback(%d, %d)", width, height); + context->GetTaskExecutor()->PostTask( + [context, width, height]() { context->OnSurfaceChanged(width, height); }, TaskExecutor::TaskType::UI); + }; + aceView_->RegisterViewChangeCallback(viewChangeCallback); + + auto&& densityChangeCallback = [context = pipelineContext_](double density) { + ACE_SCOPED_TRACE("DensityChangeCallback(%lf)", density); + context->GetTaskExecutor()->PostTask( + [context, density]() { context->OnSurfaceDensityChanged(density); }, TaskExecutor::TaskType::UI); + }; + aceView_->RegisterDensityChangeCallback(densityChangeCallback); + + auto&& systemBarHeightChangeCallback = [context = pipelineContext_](double statusBar, double navigationBar) { + ACE_SCOPED_TRACE("SystemBarHeightChangeCallback(%lf, %lf)", statusBar, navigationBar); + context->GetTaskExecutor()->PostTask( + [context, statusBar, navigationBar]() { context->OnSystemBarHeightChanged(statusBar, navigationBar); }, + TaskExecutor::TaskType::UI); + }; + aceView_->RegisterSystemBarHeightChangeCallback(systemBarHeightChangeCallback); + + auto&& surfaceDestroyCallback = [context = pipelineContext_]() { + context->GetTaskExecutor()->PostTask( + [context]() { context->OnSurfaceDestroyed(); }, TaskExecutor::TaskType::UI); + }; + aceView_->RegisterSurfaceDestroyCallback(surfaceDestroyCallback); + + auto&& idleCallback = [context = pipelineContext_](int64_t deadline) { + context->GetTaskExecutor()->PostTask( + [context, deadline]() { context->OnIdle(deadline); }, TaskExecutor::TaskType::UI); + }; + aceView_->RegisterIdleCallback(idleCallback); + + auto&& viewDestoryCallback = [context = pipelineContext_](AceView::ViewReleaseCallback&& callback) { + context->GetTaskExecutor()->PostTask( + [context, callback = std::move(callback)]() { + context->GetTaskExecutor()->PostTask( + [callback = std::move(callback)]() { callback(); }, TaskExecutor::TaskType::PLATFORM); + }, + TaskExecutor::TaskType::UI); + }; + aceView_->RegisterViewDestroyCallback(viewDestoryCallback); +} + +void AceContainer::CreateContainer(int32_t instanceId, FrontendType type) +{ +#ifdef USE_GLFW_WINDOW + std::call_once(onceFlag_, [] { + FlutterEngineRegisterHandleTouchEventCallback([](std::unique_ptr& packet) -> bool { + auto container = AceContainer::GetContainerInstance(0); + if (!container || !container->GetAceView()) { + return false; + } + return container->GetAceView()->HandleTouchEvent(std::move(packet)); + }); + }); +#endif + auto aceContainer = AceType::MakeRefPtr(instanceId, type); + AceEngine::Get().AddContainer(aceContainer->GetInstanceId(), aceContainer); + auto front = aceContainer->GetFrontend(); + if (front) { + front->UpdateState(Frontend::State::ON_CREATE); + front->SetJsMessageDispatcher(aceContainer); + } +} + +void AceContainer::DestroyContainer(int32_t instanceId) +{ + auto container = AceEngine::Get().GetContainer(instanceId); + if (!container) { + LOGE("no AceContainer with id %{private}d in AceEngine", instanceId); + return; + } + auto context = container->GetPipelineContext(); + if (context) { + context->Destroy(); + } + AceEngine::Get().RemoveContainer(instanceId); + auto front = container->GetFrontend(); + if (front) { + front->UpdateState(Frontend::State::ON_DESTROY); + } + + auto taskExecutor = AceType::DynamicCast(container->GetTaskExecutor()); + if (taskExecutor) { + taskExecutor->DestroyJsThread(); + } + + auto aceView = AceType::DynamicCast(container)->GetAceView(); + if (aceView) { + LOGI("NotifyViewDestroyed"); + aceView->NotifyViewDestroyed([aceView]() { aceView->DecRefCount(); }); + } +} + +bool AceContainer::RunPage(int32_t instanceId, int32_t pageId, const std::string& url, const std::string& params) +{ + ACE_FUNCTION_TRACE(); + + auto container = AceEngine::Get().GetContainer(instanceId); + if (!container) { + return false; + } + auto front = container->GetFrontend(); + if (front) { + auto type = front->GetType(); + if ((type == FrontendType::JS) || (type == FrontendType::JS_CARD)) { + front->RunPage(pageId, url, params); + return true; + } else { + LOGE("Frontend type not supported when runpage"); + EventReport::SendAppStartException(AppStartExcepType::FRONTEND_TYPE_ERR); + return false; + } + } + return false; +} + +void AceContainer::Dispatch( + const std::string& group, std::vector&& data, int32_t id, bool replyToComponent) const +{} + +void AceContainer::DispatchPluginError(int32_t callbackId, int32_t errorCode, std::string&& errorMessage) const {} + +bool AceContainer::Dump(const std::vector& params) +{ + if (aceView_ && aceView_->Dump(params)) { + return true; + } + + if (pipelineContext_) { + pipelineContext_->Dump(params); + return true; + } + return false; +} + +void AceContainer::AddAssetPath( + int32_t instanceId, const std::string& packagePath, const std::vector& paths) +{ + auto container = AceType::DynamicCast(AceEngine::Get().GetContainer(instanceId)); + if (!container) { + return; + } + + for (const auto& path : paths) { + AceEngine::Get().SetPackagePath(packagePath); + AceEngine::Get().SetAssetBasePath(path); + + RefPtr flutterAssetManager; + if (container->assetManager_) { + flutterAssetManager = AceType::DynamicCast(container->assetManager_); + } else { + flutterAssetManager = Referenced::MakeRefPtr(); + container->assetManager_ = flutterAssetManager; + container->frontend_->SetAssetManager(flutterAssetManager); + } + + if (flutterAssetManager) { + LOGD("Current path is: %s", path.c_str()); + flutterAssetManager->PushBack(std::make_unique( + fml::OpenDirectory(path.c_str(), false, fml::FilePermission::kRead))); + } + } +} + +void AceContainer::SetResourcesPathAndThemeStyle(int32_t instanceId, const std::string& resourcesPath, + const ThemeId& themeId, const ColorMode& colorMode) +{ + auto container = AceType::DynamicCast(AceEngine::Get().GetContainer(instanceId)); + if (!container) { + return; + } + container->deviceResourceInfo_.deviceConfig.colorMode = static_cast(colorMode); + container->deviceResourceInfo_.packagePath = resourcesPath; + container->deviceResourceInfo_.themeId = static_cast(themeId); +} + +void AceContainer::SetView(FlutterAceView* view, double density, int32_t width, int32_t height) +{ + if (view == nullptr) { + return; + } + + auto container = AceType::DynamicCast(AceEngine::Get().GetContainer(view->GetInstanceId())); + if (!container) { + return; + } + auto platformWindow = PlatformWindow::Create(view); + if (!platformWindow) { + LOGE("Create PlatformWindow failed!"); + return; + } + + std::unique_ptr window = std::make_unique(std::move(platformWindow)); + container->AttachView(std::move(window), view, density, width, height); +} + +void AceContainer::AttachView( + std::unique_ptr window, FlutterAceView* view, double density, int32_t width, int32_t height) +{ + aceView_ = view; + auto instanceId = aceView_->GetInstanceId(); + + resRegister_ = aceView_->GetPlatformResRegister(); + pipelineContext_ = AceType::MakeRefPtr( + std::move(window), taskExecutor_, assetManager_, resRegister_, frontend_, instanceId); + pipelineContext_->SetRootSize(density, width, height); + pipelineContext_->SetTextFieldManager(AceType::MakeRefPtr()); + pipelineContext_->SetIsRightToLeft(AceApplicationInfo::GetInstance().IsRightToLeft()); + pipelineContext_->SetWindowModal(windowModal_); + pipelineContext_->SetDrawDelegate(aceView_->GetDrawDelegate()); + pipelineContext_->SetIsJsCard(type_ == FrontendType::JS_CARD); + InitializeCallback(); + + // Only init global resource here, construct theme in UI thread + auto themeManager = pipelineContext_->GetThemeManager(); + if (themeManager) { + // Init resource, load theme map. + themeManager->InitResource(deviceResourceInfo_); + themeManager->LoadSystemTheme(deviceResourceInfo_.themeId); + // get background color from theme + aceView_->SetBackgroundColor(themeManager->GetBackgroundColor()); + + taskExecutor_->PostTask( + [themeManager, assetManager = assetManager_, colorScheme = colorScheme_]() { + themeManager->ParseSystemTheme(); + themeManager->SetColorScheme(colorScheme); + themeManager->LoadCustomTheme(assetManager); + }, + TaskExecutor::TaskType::UI); + } + + taskExecutor_->PostTask( + [context = pipelineContext_]() { context->SetupRootElement(); }, TaskExecutor::TaskType::UI); + aceView_->Launch(); + + frontend_->AttachPipelineContext(pipelineContext_); + auto cardFronted = AceType::DynamicCast(frontend_); + if (cardFronted) { + cardFronted->SetDensity(static_cast(density)); + taskExecutor_->PostTask( + [context = pipelineContext_, width, height]() { context->OnSurfaceChanged(width, height); }, + TaskExecutor::TaskType::UI); + } + + AceEngine::Get().RegisterToWatchDog(instanceId, taskExecutor_); +} + +RefPtr AceContainer::GetContainerInstance(int32_t instanceId) +{ + auto container = AceType::DynamicCast(AceEngine::Get().GetContainer(instanceId)); + return container; +} + +} // namespace OHOS::Ace::Platform diff --git a/adapter/preview/entrance/ace_container.h b/adapter/preview/entrance/ace_container.h new file mode 100644 index 00000000..b9139547 --- /dev/null +++ b/adapter/preview/entrance/ace_container.h @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_ADAPTER_PREVIEW_ACE_CONTAINER_H +#define FOUNDATION_ACE_ADAPTER_PREVIEW_ACE_CONTAINER_H + +#include +#include +#include +#include + +#include "adapter/preview/entrance/ace_run_args.h" +#include "adapter/preview/entrance/flutter_ace_view.h" +#include "base/resource/asset_manager.h" +#include "base/thread/task_executor.h" +#include "base/utils/noncopyable.h" +#include "core/common/ace_view.h" +#include "core/common/container.h" +#include "core/common/js_message_dispatcher.h" +#include "core/common/platform_bridge.h" + +namespace OHOS::Ace::Platform { + +// AceContainer is the instance have its own pipeline and thread models, it can contains multiple pages. +class AceContainer : public Container, public JsMessageDispatcher { + DECLARE_ACE_TYPE(AceContainer, Container, JsMessageDispatcher); + +public: + static void CreateContainer(int32_t instanceId, FrontendType type); + static void DestroyContainer(int32_t instanceId); + + static void AddAssetPath(int32_t instanceId, const std::string& packagePath, const std::vector& paths); + static void SetResourcesPathAndThemeStyle(int32_t instanceId, const std::string& resourcesPath, + const ThemeId& themeId, const ColorMode& colorMode); + static void SetView(FlutterAceView* view, double density, int32_t width, int32_t height); + static bool RunPage(int32_t instanceId, int32_t pageId, const std::string& url, const std::string& params); + static RefPtr GetContainerInstance(int32_t instanceId); + + AceContainer(int32_t instanceId, FrontendType type); + ~AceContainer() override = default; + + int32_t GetInstanceId() const override + { + return instanceId_; + } + + std::string GetHostClassName() const override + { + return ""; + } + + RefPtr GetFrontend() const override + { + return frontend_; + } + + RefPtr GetTaskExecutor() const override + { + return taskExecutor_; + } + + RefPtr GetAssetManager() const override + { + return assetManager_; + } + + RefPtr GetPlatformResRegister() const override + { + return resRegister_; + } + + RefPtr GetPipelineContext() const override + { + return pipelineContext_; + } + + FlutterAceView* GetAceView() const + { + return aceView_; + } + + void SetWindowModal(WindowModal windowModal) + { + windowModal_ = windowModal; + } + + void SetColorScheme(ColorScheme colorScheme) + { + colorScheme_ = colorScheme; + } + + void Dispatch( + const std::string& group, std::vector&& data, int32_t id, bool replyToComponent) const override; + + void DispatchPluginError(int32_t callbackId, int32_t errorCode, std::string&& errorMessage) const override; + + bool Dump(const std::vector& params) override; + +private: + void InitializeFrontend(); + void InitializeCallback(); + + void AttachView( + std::unique_ptr window, FlutterAceView* view, double density, int32_t width, int32_t height); + + int32_t instanceId_; + FlutterAceView* aceView_ = nullptr; + RefPtr taskExecutor_; + RefPtr assetManager_; + RefPtr resRegister_; + RefPtr pipelineContext_; + RefPtr frontend_; + FrontendType type_ { FrontendType::JSON }; + WindowModal windowModal_ { WindowModal::NORMAL }; + ColorScheme colorScheme_ { ColorScheme::SCHEME_LIGHT }; + DeviceResourceInfo deviceResourceInfo_; + static std::once_flag onceFlag_; + + ACE_DISALLOW_COPY_AND_MOVE(AceContainer); +}; + +} // namespace OHOS::Ace::Platform + +#endif // FOUNDATION_ACE_ADAPTER_PREVIEW_ACE_CONTAINER_H diff --git a/adapter/preview/entrance/ace_resource_register.cpp b/adapter/preview/entrance/ace_resource_register.cpp new file mode 100644 index 00000000..c72a7e77 --- /dev/null +++ b/adapter/preview/entrance/ace_resource_register.cpp @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "adapter/preview/entrance/ace_resource_register.h" + +namespace OHOS::Ace::Platform { + +bool AceResourceRegister::OnMethodCall(const std::string& method, const std::string& param, std::string& result) +{ + return false; +} + +int64_t AceResourceRegister::CreateResource(const std::string& resourceType, const std::string& param) +{ + return -1; +} + +bool AceResourceRegister::ReleaseResource(const std::string& resourceHash) +{ + return false; +} + +} // namespace OHOS::Ace::Platform \ No newline at end of file diff --git a/adapter/preview/entrance/ace_resource_register.h b/adapter/preview/entrance/ace_resource_register.h new file mode 100644 index 00000000..a842f0ce --- /dev/null +++ b/adapter/preview/entrance/ace_resource_register.h @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_ADAPTER_PREVIEW_ACE_RESOURCE_REGISTER_H +#define FOUNDATION_ACE_ADAPTER_PREVIEW_ACE_RESOURCE_REGISTER_H + +#include + +#include "core/common/platform_res_register.h" + +namespace OHOS::Ace::Platform { + +class AceResourceRegister final : public PlatformResRegister { +public: + int64_t CreateResource(const std::string& resourceType, const std::string& param) override; + bool ReleaseResource(const std::string& resourceHash) override; + bool OnMethodCall(const std::string& method, const std::string& param, std::string& result) override; +}; + +} // namespace OHOS::Ace::Platform + +#endif // FOUNDATION_ACE_ADAPTER_PREVIEW_ACE_RESOURCE_REGISTER_H diff --git a/adapter/preview/entrance/ace_run_args.h b/adapter/preview/entrance/ace_run_args.h new file mode 100644 index 00000000..0fd63c19 --- /dev/null +++ b/adapter/preview/entrance/ace_run_args.h @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_ADAPTER_PREVIEW_ACE_RUN_OPTIONS_H +#define FOUNDATION_ACE_ADAPTER_PREVIEW_ACE_RUN_OPTIONS_H + +#include +#include + +#include "base/utils/device_type.h" + +#ifndef ACE_PREVIEW_EXPORT +#ifdef _WIN32 +#define ACE_PREVIEW_EXPORT __declspec(dllexport) +#elif defined(__APPLE__) +#define ACE_PREVIEW_EXPORT __attribute__((visibility("default"))) +#endif +#endif // ACE_PREVIEW_EXPORT + +namespace OHOS::Ace::Platform { + +using SendRenderDataCallback = bool (*)(const void*, size_t); + +// Keep the same with definition in base/utils/system_properties.h +enum class DeviceOrientation : int32_t { + PORTRAIT, + LANDSCAPE, +}; + +enum class ThemeId : int32_t { + THEME_ID_LIGHT, + THEME_ID_DARK, +}; + +// Keep the same with definition in base/utils/system_properties.h +enum class ColorMode : int32_t { + LIGHT = 0, + DARK, +}; + +struct ACE_PREVIEW_EXPORT AceRunArgs { + // The absolute path end of "default". + std::string assetPath; + // The absolute path of system resources. + std::string resourcesPath; + + // Indecate light or dark theme. 0 is theme_light, 1 is theme_dark. + ThemeId themeId = ThemeId::THEME_ID_LIGHT; + + // Light Theme contains light mode and dark mode. The dafault is light mode of light theme. + ColorMode colorMode = ColorMode::LIGHT; + + // Set page path to launch directly, or launch the main page in default. + std::string url; + + std::string windowTitle; + + bool isRound = false; + int32_t viewWidth = 0; + int32_t viewHeight = 0; + int32_t deviceWidth = 0; + int32_t deviceHeight = 0; + double resolution = 1.0; + + // Locale + std::string language = "zh"; + std::string region = "CN"; + std::string script = ""; + + DeviceOrientation orientation = DeviceOrientation::PORTRAIT; + DeviceType deviceType = DeviceType::PHONE; + + bool formsEnabled = false; + + SendRenderDataCallback onRender; +}; + +} // namespace OHOS::Ace::Platform + +#endif // FOUNDATION_ACE_ADAPTER_PREVIEW_ACE_RUN_OPTIONS_H diff --git a/adapter/preview/entrance/flutter_ace_view.cpp b/adapter/preview/entrance/flutter_ace_view.cpp new file mode 100644 index 00000000..4875934f --- /dev/null +++ b/adapter/preview/entrance/flutter_ace_view.cpp @@ -0,0 +1,186 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "adapter/preview/entrance/flutter_ace_view.h" + +#include "base/log/dump_log.h" +#include "base/log/event_report.h" +#include "base/log/log.h" +#include "base/utils/macros.h" +#include "base/utils/system_properties.h" +#include "base/utils/utils.h" +#include "core/common/ace_engine.h" +#include "core/components/theme/theme_manager.h" +#include "core/event/mouse_event.h" +#include "core/gestures/touch_event.h" +#include "core/image/image_cache.h" +#include "core/pipeline/layers/flutter_scene_builder.h" + +namespace OHOS::Ace::Platform { +namespace { + +constexpr int32_t DEFAULT_ACTION_ID = 0; + +void ConvertTouchEvent(const std::vector& data, std::vector& events) +{ + const auto* origin = reinterpret_cast(data.data()); + size_t size = data.size() / sizeof(flutter::PointerData); + auto current = const_cast(origin); + auto end = current + size; + + while (current < end) { + std::chrono::microseconds micros(current->time_stamp); + TimeStamp time(micros); + TouchPoint point { + static_cast(DEFAULT_ACTION_ID), static_cast(current->physical_x), + static_cast(current->physical_y), TouchType::UNKNOWN, time, current->size, + static_cast(current->pressure), static_cast(current->device) + }; + switch (current->change) { + case flutter::PointerData::Change::kCancel: + point.type = TouchType::CANCEL; + events.push_back(point); + break; + case flutter::PointerData::Change::kAdd: + case flutter::PointerData::Change::kRemove: + case flutter::PointerData::Change::kHover: + break; + case flutter::PointerData::Change::kDown: + point.type = TouchType::DOWN; + events.push_back(point); + break; + case flutter::PointerData::Change::kMove: + point.type = TouchType::MOVE; + events.push_back(point); + break; + case flutter::PointerData::Change::kUp: + point.type = TouchType::UP; + events.push_back(point); + break; + } + current++; + } +} + +} + +void FlutterAceView::RegisterTouchEventCallback(TouchEventCallback&& callback) +{ + ACE_DCHECK(callback); + touchEventCallback_ = std::move(callback); +} + +void FlutterAceView::RegisterKeyEventCallback(KeyEventCallback&& callback) +{ + ACE_DCHECK(callback); + keyEventCallback_ = std::move(callback); +} + +void FlutterAceView::RegisterMouseEventCallback(MouseEventCallback&& callback) +{ + ACE_DCHECK(callback); + mouseEventCallback_ = std::move(callback); +} + +void FlutterAceView::RegisterRotationEventCallback(RotationEventCallBack&& callback) +{ + ACE_DCHECK(callback); + rotationEventCallBack_ = std::move(callback); +} + +void FlutterAceView::Launch() +{ +} + +bool FlutterAceView::Dump(const std::vector& params) +{ + return false; +} + +void FlutterAceView::ProcessIdleEvent(int64_t deadline) +{ + if (idleCallback_) { + idleCallback_(deadline); + } +} + +bool FlutterAceView::HandleTouchEvent(std::unique_ptr packet) +{ + if (packet == nullptr) { + return false; + } + + std::vector touchEvents; + ConvertTouchEvent(packet->data(), touchEvents); + for (const auto& point : touchEvents) { + LOGD("HandleTouchEvent point.x: %lf, point.y: %lf, point.size: %lf", point.x, point.y, point.size); + if (point.type == TouchType::UNKNOWN) { + LOGW("Unknown event."); + continue; + } + if (touchEventCallback_) { + touchEventCallback_(point); + } + } + + return true; +} + +bool FlutterAceView::HandleTouchEvent(const TouchPoint& touchEvent) +{ + if (touchEvent.type == TouchType::UNKNOWN) { + LOGW("Unknown event."); + return false; + } + + LOGD("HandleTouchEvent touchEvent.x: %lf, touchEvent.y: %lf, touchEvent.size: %lf", + touchEvent.x, touchEvent.y, touchEvent.size); + if (touchEventCallback_) { + touchEventCallback_(touchEvent); + } + + return true; +} + +std::unique_ptr FlutterAceView::GetDrawDelegate() +{ + auto darwDelegate = std::make_unique(); + + darwDelegate->SetDrawFrameCallback([this](RefPtr& layer, const Rect& dirty) { + if (!layer) { + return; + } + RefPtr flutterSceneBuilder = AceType::MakeRefPtr(); + layer->AddToScene(*flutterSceneBuilder, 0.0, 0.0); + auto scene_ = flutterSceneBuilder->Build(); + if (!flutter::UIDartState::Current()) { + LOGE("uiDartState is nullptr"); + return; + } + auto window = flutter::UIDartState::Current()->window(); + if (window != nullptr && window->client() != nullptr) { + window->client()->Render(scene_.get()); + } + }); + + return darwDelegate; +} + +std::unique_ptr FlutterAceView::GetPlatformWindow() +{ + return nullptr; +} + +} // namespace OHOS::Ace::Platform diff --git a/adapter/preview/entrance/flutter_ace_view.h b/adapter/preview/entrance/flutter_ace_view.h new file mode 100644 index 00000000..a3dbfba9 --- /dev/null +++ b/adapter/preview/entrance/flutter_ace_view.h @@ -0,0 +1,182 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_ADAPTER_PREVIEW_FLUTTER_ACE_VIEW_H +#define FOUNDATION_ACE_ADAPTER_PREVIEW_FLUTTER_ACE_VIEW_H + +#include + +#include "adapter/preview/entrance/ace_resource_register.h" +#include "base/utils/noncopyable.h" +#include "core/common/ace_view.h" +#include "core/event/key_event_recognizer.h" + +namespace OHOS::Ace::Platform { + +using ReleaseCallback = std::function; + +class FlutterAceView : public AceView, public Referenced { +public: + explicit FlutterAceView(int32_t instanceId) : instanceId_(instanceId) {} + ~FlutterAceView() override = default; + + void RegisterTouchEventCallback(TouchEventCallback&& callback) override; + void RegisterKeyEventCallback(KeyEventCallback&& callback) override; + void RegisterMouseEventCallback(MouseEventCallback&& callback) override; + void RegisterRotationEventCallback(RotationEventCallBack&& callback) override; + + void Launch() override; + + int32_t GetInstanceId() const override + { + return instanceId_; + } + + void RegisterCardViewPositionCallback(CardViewPositionCallBack&& callback) override + { + if (callback) { + cardViewPositionCallBack_ = std::move(callback); + } + } + + void RegisterCardViewAccessibilityParamsCallback(CardViewAccessibilityParamsCallback&& callback) override + { + if (callback) { + cardViewAccessibilityParamsCallback_ = std::move(callback); + } + } + + void RegisterViewChangeCallback(ViewChangeCallback&& callback) override + { + if (callback) { + viewChangeCallback_ = std::move(callback); + } + } + + void RegisterDensityChangeCallback(DensityChangeCallback&& callback) override + { + if (callback) { + densityChangeCallback_ = std::move(callback); + } + } + + void RegisterSystemBarHeightChangeCallback(SystemBarHeightChangeCallbak&& callback) override + { + if (callback) { + systemBarHeightChangeCallbak_ = std::move(callback); + } + } + + void RegisterSurfaceDestroyCallback(SurfaceDestroyCallback&& callback) override + { + if (callback) { + surfaceDestroyCallback_ = std::move(callback); + } + } + + void RegisterIdleCallback(IdleCallback&& callback) override + { + if (callback) { + idleCallback_ = std::move(callback); + } + } + + const RefPtr& GetPlatformResRegister() const override + { + return resRegister_; + } + + bool Dump(const std::vector& params) override; + + void ProcessIdleEvent(int64_t deadline); + + void NotifySurfaceChanged(int32_t width, int32_t height) const + { + if (viewChangeCallback_) { + viewChangeCallback_(width, height); + } + } + + void NotifyDensityChanged(double density) const + { + if (densityChangeCallback_) { + densityChangeCallback_(density); + } + } + + void NotifySystemBarHeightChanged(double statusBar, double navigationBar) const + { + if (systemBarHeightChangeCallbak_) { + systemBarHeightChangeCallbak_(statusBar, navigationBar); + } + } + + void NotifySurfaceDestroyed() const + { + if (surfaceDestroyCallback_) { + surfaceDestroyCallback_(); + } + } + + void NotifyViewDestroyed(ViewReleaseCallback&& callback) + { + if (viewDestoryCallback_) { + viewDestoryCallback_(std::move(callback)); + } + } + + void RegisterViewDestroyCallback(ViewDestoryCallback&& callback) override + { + viewDestoryCallback_ = std::move(callback); + } + + // Use to receive event from glfw window + bool HandleTouchEvent(std::unique_ptr packet) override; + + // Use to receive event from pc previewer + bool HandleTouchEvent(const TouchPoint& touchEvent) override; + + ViewType GetViewType() const override + { + return AceView::ViewType::SURFACE_VIEW; + } + + std::unique_ptr GetDrawDelegate() override; + std::unique_ptr GetPlatformWindow() override; + +private: + int32_t instanceId_ = 0; + RefPtr resRegister_ = Referenced::MakeRefPtr(); + + TouchEventCallback touchEventCallback_; + MouseEventCallback mouseEventCallback_; + RotationEventCallBack rotationEventCallBack_; + CardViewPositionCallBack cardViewPositionCallBack_; + CardViewAccessibilityParamsCallback cardViewAccessibilityParamsCallback_; + ViewChangeCallback viewChangeCallback_; + DensityChangeCallback densityChangeCallback_; + SystemBarHeightChangeCallbak systemBarHeightChangeCallbak_; + SurfaceDestroyCallback surfaceDestroyCallback_; + IdleCallback idleCallback_; + KeyEventCallback keyEventCallback_; + KeyEventRecognizer keyEventRecognizer_; + ViewDestoryCallback viewDestoryCallback_; + + ACE_DISALLOW_COPY_AND_MOVE(FlutterAceView); +}; + +} // namespace OHOS::Ace::Platform + +#endif // FOUNDATION_ACE_ADAPTER_PREVIEW_FLUTTER_ACE_VIEW_H diff --git a/adapter/preview/entrance/flutter_task_executor.cpp b/adapter/preview/entrance/flutter_task_executor.cpp new file mode 100644 index 00000000..068f0bcb --- /dev/null +++ b/adapter/preview/entrance/flutter_task_executor.cpp @@ -0,0 +1,104 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "adapter/preview/entrance/flutter_task_executor.h" + +#include "base/log/log.h" +#include "base/thread/background_task_executor.h" + +namespace OHOS::Ace { +namespace { + +inline std::string GenJsThreadName() +{ + static std::atomic instanceCount { 1 }; + return std::string("jsThread-") + std::to_string(instanceCount.fetch_add(1, std::memory_order_relaxed)); +} + +bool PostTaskToTaskRunner(const fml::RefPtr& taskRunner, TaskExecutor::Task&& task, uint32_t delayTime) +{ + if (!taskRunner || !task) { + return false; + } + + if (delayTime > 0) { + taskRunner->PostDelayedTask(std::move(task), fml::TimeDelta::FromMilliseconds(delayTime)); + } else { + taskRunner->PostTask(std::move(task)); + } + return true; +} + +} // namespace + +FlutterTaskExecutor::FlutterTaskExecutor(const flutter::TaskRunners& taskRunners) +{ + jsThread_ = std::make_unique(GenJsThreadName()); + jsRunner_ = jsThread_->GetTaskRunner(); + + platformRunner_ = taskRunners.GetPlatformTaskRunner(); + uiRunner_ = taskRunners.GetUITaskRunner(); + ioRunner_ = taskRunners.GetIOTaskRunner(); + gpuRunner_ = taskRunners.GetGPUTaskRunner(); +} + +bool FlutterTaskExecutor::OnPostTask(Task&& task, TaskType type, uint32_t delayTime) const +{ + switch (type) { + case TaskType::PLATFORM: + return PostTaskToTaskRunner(platformRunner_, std::move(task), delayTime); + case TaskType::UI: + return PostTaskToTaskRunner(uiRunner_, std::move(task), delayTime); + case TaskType::IO: + return PostTaskToTaskRunner(ioRunner_, std::move(task), delayTime); + case TaskType::GPU: + return PostTaskToTaskRunner(gpuRunner_, std::move(task), delayTime); + case TaskType::JS: + return PostTaskToTaskRunner(jsRunner_, std::move(task), delayTime); + case TaskType::BACKGROUND: + // Ignore delay time + return BackgroundTaskExecutor::GetInstance().PostTask(std::move(task)); + default: + return false; + } +} + +bool FlutterTaskExecutor::WillRunOnCurrentThread(TaskType type) const +{ + switch (type) { + case TaskType::PLATFORM: + return platformRunner_ ? platformRunner_->RunsTasksOnCurrentThread() : false; + case TaskType::UI: + return uiRunner_ ? uiRunner_->RunsTasksOnCurrentThread() : false; + case TaskType::IO: + return ioRunner_ ? ioRunner_->RunsTasksOnCurrentThread() : false; + case TaskType::GPU: + return gpuRunner_ ? gpuRunner_->RunsTasksOnCurrentThread() : false; + case TaskType::JS: + return jsRunner_ ? jsRunner_->RunsTasksOnCurrentThread() : false; + case TaskType::BACKGROUND: + // Always return false for background tasks. + return false; + default: + return false; + } +} + +void FlutterTaskExecutor::DestroyJsThread() +{ + jsThread_.reset(); +} + +} // namespace OHOS::Ace diff --git a/adapter/preview/entrance/flutter_task_executor.h b/adapter/preview/entrance/flutter_task_executor.h new file mode 100644 index 00000000..22735796 --- /dev/null +++ b/adapter/preview/entrance/flutter_task_executor.h @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_ADAPTER_PREVIEW_FLUTTER_TASK_EXECUTOR_H +#define FOUNDATION_ACE_ADAPTER_PREVIEW_FLUTTER_TASK_EXECUTOR_H + +#include "flutter/common/task_runners.h" +#include "flutter/fml/thread.h" + +#include "base/thread/task_executor.h" +#include "base/utils/macros.h" + +namespace OHOS::Ace { + +class ACE_EXPORT FlutterTaskExecutor final : public TaskExecutor { + DECLARE_ACE_TYPE(FlutterTaskExecutor, TaskExecutor); + +public: + explicit FlutterTaskExecutor(const flutter::TaskRunners& taskRunners); + ~FlutterTaskExecutor() override = default; + + void DestroyJsThread(); + bool WillRunOnCurrentThread(TaskType type) const final; + +private: + bool OnPostTask(Task&& task, TaskType type, uint32_t delayTime) const final; + + std::unique_ptr jsThread_; + + fml::RefPtr platformRunner_; + fml::RefPtr uiRunner_; + fml::RefPtr ioRunner_; + fml::RefPtr jsRunner_; + fml::RefPtr gpuRunner_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_ADAPTER_PREVIEW_FLUTTER_TASK_EXECUTOR_H diff --git a/adapter/preview/entrance/flutter_window.cpp b/adapter/preview/entrance/flutter_window.cpp new file mode 100644 index 00000000..9400abaa --- /dev/null +++ b/adapter/preview/entrance/flutter_window.cpp @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "adapter/preview/entrance/flutter_window.h" + +#include + +#include "flutter/runtime/window_manager.h" + +#include "base/log/log.h" +#include "core/common/ace_view.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +std::unique_ptr PlatformWindow::Create(AceView* view) +{ + if (view != nullptr) { + return std::make_unique(view->GetInstanceId()); + } else { + return nullptr; + } +} + +namespace Platform { + +FlutterWindow::FlutterWindow(int32_t instanceId) : instanceId_(instanceId) {} + +FlutterWindow::~FlutterWindow() {} + +void FlutterWindow::RequestFrame() +{ + auto window = flutter::WindowManager::GetWindow(instanceId_); + if (window != nullptr) { + window->ScheduleFrame(); + if (!window->HasBeginFrameCallback()) { + window->SetBeginFrameCallback(std::bind(&FlutterWindow::OnVsyncCallback, this, std::placeholders::_1)); + } + } +} + +void FlutterWindow::RegisterVsyncCallback(AceVsyncCallback&& callback) +{ + vsyncCallbacks_.emplace_back(std::move(callback)); +} + +void FlutterWindow::SetRootRenderNode(const RefPtr& root) {} + +void FlutterWindow::OnVsyncCallback(uint64_t timeStampNanos) +{ + for (const auto& vsyncCallback : vsyncCallbacks_) { + vsyncCallback(timeStampNanos, 0); + } +} + +} // namespace Platform +} // namespace OHOS::Ace diff --git a/adapter/preview/entrance/flutter_window.h b/adapter/preview/entrance/flutter_window.h new file mode 100644 index 00000000..6b8c63d0 --- /dev/null +++ b/adapter/preview/entrance/flutter_window.h @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_ADAPTER_PREVIEW_FLUTTER_WINDOW_H +#define FOUNDATION_ACE_ADAPTER_PREVIEW_FLUTTER_WINDOW_H + +#include + +#include "base/utils/noncopyable.h" +#include "core/common/platform_window.h" + +namespace OHOS::Ace::Platform { + +class FlutterWindow final : public PlatformWindow { +public: + explicit FlutterWindow(int32_t instanceId); + ~FlutterWindow() override; + + // Platform window interface + void RequestFrame() override; + void RegisterVsyncCallback(AceVsyncCallback&& callback) override; + void SetRootRenderNode(const RefPtr& root) override; + + // Vsync callback + void OnVsyncCallback(uint64_t timeStampNanos); + +private: + std::vector vsyncCallbacks_; + int32_t instanceId_; + + ACE_DISALLOW_COPY_AND_MOVE(FlutterWindow); +}; + +} // namespace OHOS::Ace::Platform + +#endif // FOUNDATION_ACE_ADAPTER_PREVIEW_FLUTTER_WINDOW_H diff --git a/adapter/preview/entrance/samples/BUILD.gn b/adapter/preview/entrance/samples/BUILD.gn new file mode 100644 index 00000000..66486cbb --- /dev/null +++ b/adapter/preview/entrance/samples/BUILD.gn @@ -0,0 +1,110 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +config("ace_pc_preview_config") { + cflags = [ "-std=c++17" ] + include_dirs = [ + "$ace_root", + "$ace_root/frameworks", + "$flutter_root/engine", + "$flutter_root/engine/flutter/shell/platform/common/cpp/public", + "$flutter_root/engine/ace_adapter/flutter/shell/platform/glfw/public", + ] +} + +template("ace_test") { + forward_variables_from(invoker, "*") + ohos_executable(target_name) { + defines += invoker.defines + if (device == "phone") { + sources = [ "ace_phone_test.cpp" ] + } else if (device == "wearable") { + sources = [ "ace_watch_test.cpp" ] + } else if (device == "tv") { + sources = [ "ace_tv_test.cpp" ] + } else if (device == "tablet") { + sources = [ "ace_tablet_test.cpp" ] + } else if (device == "card") { + sources = [ "ace_card_test.cpp" ] + } + + configs = [ ":ace_pc_preview_config" ] + deps = [ "$ace_root/adapter/preview/entrance:libace_engine_$platform(${current_toolchain})" ] + if (platform == "windows") { + libs = [ "pthread" ] + } + } +} + +ace_test("ace_test_windows_phone") { + defines = ace_windows_defines + platform = "windows" + device = "phone" +} + +ace_test("ace_test_windows_tv") { + defines = ace_windows_defines + platform = "windows" + device = "tv" +} + +ace_test("ace_test_windows_wearable") { + defines = ace_windows_defines + platform = "windows" + device = "wearable" +} + +ace_test("ace_test_windows_tablet") { + defines = ace_windows_defines + platform = "windows" + device = "tablet" +} + +ace_test("ace_test_windows_card") { + defines = ace_windows_defines + platform = "windows" + device = "card" +} + +ace_test("ace_test_mac_phone") { + defines = ace_mac_defines + platform = "mac" + device = "phone" +} + +ace_test("ace_test_mac_tv") { + defines = ace_mac_defines + platform = "mac" + device = "tv" +} + +ace_test("ace_test_mac_wearable") { + defines = ace_mac_defines + platform = "mac" + device = "wearable" +} + +ace_test("ace_test_mac_tablet") { + defines = ace_mac_defines + platform = "mac" + device = "tablet" +} + +ace_test("ace_test_mac_card") { + defines = ace_mac_defines + platform = "mac" + device = "card" +} diff --git a/adapter/preview/entrance/samples/ace_card_test.cpp b/adapter/preview/entrance/samples/ace_card_test.cpp new file mode 100644 index 00000000..e9f916a7 --- /dev/null +++ b/adapter/preview/entrance/samples/ace_card_test.cpp @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +#include "adapter/preview/entrance/ace_ability.h" +#include "adapter/preview/entrance/ace_run_args.h" + +namespace { + +constexpr int32_t GET_INSPECTOR_TREE_TIMES = 12; +constexpr int32_t GET_INSPECTOR_TREE_INTERVAL = 5000; +constexpr char FILE_NAME[] = "InspectorTree.txt"; +// card default width and height: +// 2*1 (150*54) +// 2*2 (150*150) +// 4*2 (320*150) +// 4*4 (320*344) +constexpr int32_t CARD_DEFAULT_WIDTH = 320; +constexpr int32_t CARD_DEFAULT_HEIGHT = 344; + +} // namespace + +int main() +{ + auto&& renderCallback = [](const void*, size_t bufferSize) -> bool { return true; }; + +#ifdef MAC_PLATFORM + std::string assetPath = "/Volumes/SSD2T/daily-test/preview/js/default_card"; + std::string resourcesPath = "/Volumes/SSD2T/daily-test/preview/js/resources"; + constexpr double resolution = 2; +#else + std::string assetPath = "D:\\Workspace\\preview\\js\\default_card"; + std::string resourcesPath = "D:\\Workspace\\preview\\js\\resources"; + constexpr double resolution = 1; +#endif + + OHOS::Ace::Platform::AceRunArgs args = { + .assetPath = assetPath, + .resourcesPath = resourcesPath, + .deviceWidth = CARD_DEFAULT_WIDTH, + .deviceHeight = CARD_DEFAULT_HEIGHT, + .windowTitle = "ACE card", + .resolution = resolution, + .formsEnabled = true, + .onRender = std::move(renderCallback), + }; + + auto ability = OHOS::Ace::Platform::AceAbility::CreateInstance(args); + if (!ability) { + std::cerr << "Could not create AceAbility!" << std::endl; + return -1; + } + + std::thread timer([&ability]() { + int32_t getJSONTreeTimes = GET_INSPECTOR_TREE_TIMES; + while (getJSONTreeTimes--) { + std::this_thread::sleep_for(std::chrono::milliseconds(GET_INSPECTOR_TREE_INTERVAL)); + std::string jsonTreeStr = ability->GetJSONTree(); + // clear all information + std::ofstream fileCleaner(FILE_NAME, std::ios_base::out); + std::ofstream fileWriter(FILE_NAME, std::ofstream::app); + fileWriter << jsonTreeStr; + fileWriter << std::endl; + fileWriter.close(); + } + }); + ability->InitEnv(); + std::cout << "Ace initialize done. run loop now" << std::endl; + ability->Start(); + + return 0; +} diff --git a/adapter/preview/entrance/samples/ace_phone_test.cpp b/adapter/preview/entrance/samples/ace_phone_test.cpp new file mode 100644 index 00000000..e0460ec3 --- /dev/null +++ b/adapter/preview/entrance/samples/ace_phone_test.cpp @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +#include "adapter/preview/entrance/ace_ability.h" +#include "adapter/preview/entrance/ace_run_args.h" + +namespace { + +constexpr int32_t GET_INSPECTOR_TREE_TIMES = 12; +constexpr int32_t GET_INSPECTOR_TREE_INTERVAL = 5000; +constexpr char FILE_NAME[] = "InspectorTree.txt"; + +} + +int main() +{ + auto&& renderCallback = [](const void*, size_t bufferSize) -> bool { + return true; + }; + +#ifdef MAC_PLATFORM + std::string assetPath = "/Volumes/SSD2T/daily-test/preview/js/default"; + std::string resourcesPath = "/Volumes/SSD2T/daily-test/preview/js/resources"; + constexpr double resolution = 2; +#else + std::string assetPath = "D:\\Workspace\\preview\\js\\default"; + std::string resourcesPath = "D:\\Workspace\\preview\\js\\resources"; + constexpr double resolution = 1; +#endif + + OHOS::Ace::Platform::AceRunArgs args = { + .assetPath = assetPath, + .resourcesPath = resourcesPath, + .deviceWidth = 360, + .deviceHeight = 750, + .windowTitle = "ACE phone", + .resolution = resolution, + .onRender = std::move(renderCallback), + }; + + auto ability = OHOS::Ace::Platform::AceAbility::CreateInstance(args); + if (!ability) { + std::cerr << "Could not create AceAbility!" << std::endl; + return -1; + } + + std::thread timer([&ability]() { + int32_t getJSONTreeTimes = GET_INSPECTOR_TREE_TIMES; + while (getJSONTreeTimes--) { + std::string jsonTreeStr = ability->GetJSONTree(); + // clear all information + std::ofstream fileCleaner(FILE_NAME, std::ios_base::out); + std::ofstream fileWriter(FILE_NAME, std::ofstream::app); + fileWriter << jsonTreeStr; + fileWriter << std::endl; + fileWriter.close(); + std::this_thread::sleep_for(std::chrono::milliseconds(GET_INSPECTOR_TREE_INTERVAL)); + } + }); + ability->InitEnv(); + std::cout << "Ace initialize done. run loop now" << std::endl; + ability->Start(); + + return 0; +} diff --git a/adapter/preview/entrance/samples/ace_tablet_test.cpp b/adapter/preview/entrance/samples/ace_tablet_test.cpp new file mode 100644 index 00000000..00504051 --- /dev/null +++ b/adapter/preview/entrance/samples/ace_tablet_test.cpp @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +#include "adapter/preview/entrance/ace_ability.h" +#include "adapter/preview/entrance/ace_run_args.h" + +namespace { + +constexpr int32_t GET_INSPECTOR_TREE_TIMES = 12; +constexpr int32_t GET_INSPECTOR_TREE_INTERVAL = 5000; +constexpr char FILE_NAME[] = "InspectorTree.txt"; + +} + +int main() +{ + auto&& renderCallback = [](const void*, size_t bufferSize) -> bool { + return true; + }; + +#ifdef MAC_PLATFORM + std::string assetPath = "/Volumes/SSD2T/daily-test/preview/js/default"; + std::string resourcesPath = "/Volumes/SSD2T/daily-test/preview/js/resources"; +#else + std::string assetPath = "D:\\Workspace\\preview\\js\\default"; + std::string resourcesPath = "D:\\Workspace\\preview\\js\\resources"; +#endif + + OHOS::Ace::Platform::AceRunArgs args = { + .assetPath = assetPath, + .resourcesPath = resourcesPath, + .orientation = OHOS::Ace::Platform::DeviceOrientation::LANDSCAPE, + .deviceWidth = 1280, + .deviceHeight = 800, + .windowTitle = "ACE Table", + .resolution = 1, + .deviceType = OHOS::Ace::DeviceType::TABLET, + .onRender = std::move(renderCallback), + }; + + auto ability = OHOS::Ace::Platform::AceAbility::CreateInstance(args); + if (!ability) { + std::cerr << "Could not create AceAbility!" << std::endl; + return -1; + } + + std::thread timer([&ability]() { + int32_t getJSONTreeTimes = GET_INSPECTOR_TREE_TIMES; + while (getJSONTreeTimes--) { + std::this_thread::sleep_for(std::chrono::milliseconds(GET_INSPECTOR_TREE_INTERVAL)); + std::string jsonTreeStr = ability->GetJSONTree(); + // clear all information + std::ofstream fileCleaner(FILE_NAME, std::ios_base::out); + std::ofstream fileWriter(FILE_NAME, std::ofstream::app); + fileWriter << jsonTreeStr; + fileWriter << std::endl; + fileWriter.close(); + } + }); + ability->InitEnv(); + std::cout << "Ace initialize done. run loop now" << std::endl; + ability->Start(); + + return 0; +} diff --git a/adapter/preview/entrance/samples/ace_tv_test.cpp b/adapter/preview/entrance/samples/ace_tv_test.cpp new file mode 100644 index 00000000..2c2df069 --- /dev/null +++ b/adapter/preview/entrance/samples/ace_tv_test.cpp @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +#include "adapter/preview/entrance/ace_ability.h" +#include "adapter/preview/entrance/ace_run_args.h" + +namespace { + +constexpr int32_t GET_INSPECTOR_TREE_TIMES = 12; +constexpr int32_t GET_INSPECTOR_TREE_INTERVAL = 5000; +constexpr char FILE_NAME[] = "InspectorTree.txt"; + +} + +int main() +{ + auto&& renderCallback = [](const void*, size_t bufferSize) -> bool { + return true; + }; + +#ifdef MAC_PLATFORM + std::string assetPath = "/Volumes/SSD2T/daily-test/preview/js/default"; + std::string resourcesPath = "/Volumes/SSD2T/daily-test/preview/js/resources"; +#else + std::string assetPath = "D:\\Workspace\\preview\\js\\default"; + std::string resourcesPath = "D:\\Workspace\\preview\\js\\resources"; +#endif + + OHOS::Ace::Platform::AceRunArgs args = { + .assetPath = assetPath, + .orientation = OHOS::Ace::Platform::DeviceOrientation::LANDSCAPE, + .deviceWidth = 960, + .deviceHeight = 540, + .windowTitle = "ACE TV", + .resolution = 1, + .deviceType = OHOS::Ace::DeviceType::TV, + .onRender = std::move(renderCallback), + }; + + auto ability = OHOS::Ace::Platform::AceAbility::CreateInstance(args); + if (!ability) { + std::cerr << "Could not create AceAbility!" << std::endl; + return -1; + } + + std::thread timer([&ability]() { + int32_t getJSONTreeTimes = GET_INSPECTOR_TREE_TIMES; + while (getJSONTreeTimes--) { + std::this_thread::sleep_for(std::chrono::milliseconds(GET_INSPECTOR_TREE_INTERVAL)); + std::string jsonTreeStr = ability->GetJSONTree(); + // clear all information + std::ofstream fileCleaner(FILE_NAME, std::ios_base::out); + std::ofstream fileWriter(FILE_NAME, std::ofstream::app); + fileWriter << jsonTreeStr; + fileWriter << std::endl; + fileWriter.close(); + } + }); + ability->InitEnv(); + std::cout << "Ace initialize done. run loop now" << std::endl; + ability->Start(); + + return 0; +} diff --git a/adapter/preview/entrance/samples/ace_watch_test.cpp b/adapter/preview/entrance/samples/ace_watch_test.cpp new file mode 100644 index 00000000..cce629c5 --- /dev/null +++ b/adapter/preview/entrance/samples/ace_watch_test.cpp @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +#include "adapter/preview/entrance/ace_ability.h" +#include "adapter/preview/entrance/ace_run_args.h" + +namespace { + +constexpr int32_t GET_INSPECTOR_TREE_TIMES = 12; +constexpr int32_t GET_INSPECTOR_TREE_INTERVAL = 5000; +constexpr char FILE_NAME[] = "InspectorTree.txt"; + +} + +int main() +{ + auto&& renderCallback = [](const void*, size_t bufferSize) -> bool { + return true; + }; + +#ifdef MAC_PLATFORM + std::string assetPath = "/Volumes/SSD2T/daily-test/preview/js/default"; + std::string resourcesPath = "/Volumes/SSD2T/daily-test/preview/js/resources"; +#else + std::string assetPath = "D:\\Workspace\\preview\\js\\default"; + std::string resourcesPath = "D:\\Workspace\\preview\\js\\resources"; +#endif + + OHOS::Ace::Platform::AceRunArgs args = { + .assetPath = assetPath, + .deviceWidth = 466, + .deviceHeight = 466, + .windowTitle = "ACE wearable", + .resolution = 2.0, + .isRound = true, + .deviceType = OHOS::Ace::DeviceType::WATCH, + .onRender = std::move(renderCallback), + }; + + auto ability = OHOS::Ace::Platform::AceAbility::CreateInstance(args); + if (!ability) { + std::cerr << "Could not create AceAbility!" << std::endl; + return -1; + } + + std::thread timer([&ability]() { + int32_t getJSONTreeTimes = GET_INSPECTOR_TREE_TIMES; + while (getJSONTreeTimes--) { + std::this_thread::sleep_for(std::chrono::milliseconds(GET_INSPECTOR_TREE_INTERVAL)); + std::string jsonTreeStr = ability->GetJSONTree(); + // clear all information + std::ofstream fileCleaner(FILE_NAME, std::ios_base::out); + std::ofstream fileWriter(FILE_NAME, std::ofstream::app); + fileWriter << jsonTreeStr; + fileWriter << std::endl; + fileWriter.close(); + } + }); + ability->InitEnv(); + std::cout << "Ace initialize done. run loop now" << std::endl; + ability->Start(); + + return 0; +} diff --git a/adapter/preview/osal/BUILD.gn b/adapter/preview/osal/BUILD.gn new file mode 100644 index 00000000..55a5de21 --- /dev/null +++ b/adapter/preview/osal/BUILD.gn @@ -0,0 +1,57 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +# build static +template("ace_osal_preview_source_set") { + # get is_ohos_platform + forward_variables_from(invoker, "*") + + ohos_source_set(target_name) { + defines += invoker.defines + + sources = [ + "$ace_root/adapter/common/cpp/file_asset_provider.cpp", + "$ace_root/adapter/preview/entrance/flutter_task_executor.cpp", + "$ace_root/adapter/preview/osal/ace_trace.cpp", + "$ace_root/adapter/preview/osal/event_report.cpp", + "$ace_root/adapter/preview/osal/log_wrapper.cpp", + "$ace_root/adapter/preview/osal/system_properties.cpp", + ] + + cflags_cc = [ "-DNAME_MAX=128" ] + + if (platform == "mac") { + include_dirs = [ "//utils/native/base/include" ] + } + + configs = [ + "$ace_root:ace_config", + "$flutter_root:flutter_config", + ] + + deps = [ "//third_party/zlib:libz" ] + } +} + +ace_osal_preview_source_set("ace_osal_windows") { + defines = ace_windows_defines + platform = "windows" +} + +ace_osal_preview_source_set("ace_osal_mac") { + defines = ace_mac_defines + platform = "mac" +} diff --git a/adapter/preview/osal/ace_trace.cpp b/adapter/preview/osal/ace_trace.cpp new file mode 100644 index 00000000..7f64ace0 --- /dev/null +++ b/adapter/preview/osal/ace_trace.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "base/log/ace_trace.h" + +namespace OHOS::Ace { + +bool AceTraceEnabled() +{ + return false; +} + +void AceTraceBegin(const char* name) +{ +} + +void AceTraceEnd() +{ +} + +} // namespace OHOS::Ace diff --git a/adapter/preview/osal/download_manager.cpp b/adapter/preview/osal/download_manager.cpp new file mode 100644 index 00000000..840b4402 --- /dev/null +++ b/adapter/preview/osal/download_manager.cpp @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "base/network/download_manager.h" + +#include +#include + +#include "curl/curl.h" + +#include "base/log/log.h" +#include "base/utils/singleton.h" +#include "base/utils/utils.h" + +#define ACE_CURL_EASY_SET_OPTION(handle, opt, data) \ + do { \ + CURLcode result = curl_easy_setopt(handle, opt, data); \ + if (result != CURLE_OK) { \ + LOGE("Failed to set option: %{public}s, %{public}s", #opt, curl_easy_strerror(result)); \ + return false; \ + } \ + } while (0) + +namespace OHOS::Ace { +namespace { + +class DownloadManagerImpl final : public DownloadManager, public Singleton { + DECLARE_SINGLETON(DownloadManagerImpl); + ACE_DISALLOW_MOVE(DownloadManagerImpl); + +public: + bool Download(const std::string& url, std::vector& dataOut) override + { + if (!Initialize()) { + return false; + } + + std::unique_ptr handle(curl_easy_init(), &curl_easy_cleanup); + if (!handle) { + LOGE("Failed to create download task"); + return false; + } + + dataOut.clear(); + + ACE_CURL_EASY_SET_OPTION(handle.get(), CURLOPT_URL, url.c_str()); + ACE_CURL_EASY_SET_OPTION(handle.get(), CURLOPT_WRITEFUNCTION, OnWritingMemory); + ACE_CURL_EASY_SET_OPTION(handle.get(), CURLOPT_WRITEDATA, &dataOut); + // Some servers don't like requests that are made without a user-agent field, so we provide one + ACE_CURL_EASY_SET_OPTION(handle.get(), CURLOPT_USERAGENT, "libcurl-agent/1.0"); + ACE_CURL_EASY_SET_OPTION(handle.get(), CURLOPT_URL, url.c_str()); +#ifdef WINDOWS_PLATFORM + ACE_CURL_EASY_SET_OPTION(handle.get(), CURLOPT_SSL_VERIFYPEER, 0L); + ACE_CURL_EASY_SET_OPTION(handle.get(), CURLOPT_SSL_VERIFYHOST, 0L); +#endif + + CURLcode result = curl_easy_perform(handle.get()); + if (result != CURLE_OK) { + LOGE("Failed to download, url: %{private}s, %{public}s", url.c_str(), curl_easy_strerror(result)); + dataOut.clear(); + return false; + } + dataOut.shrink_to_fit(); + return true; + } + +private: + static size_t OnWritingMemory(void* data, size_t size, size_t memBytes, void* userData) + { + // size is always 1, for more details see https://curl.haxx.se/libcurl/c/CURLOPT_WRITEFUNCTION.html + auto& dataOut = *static_cast*>(userData); + auto chunkData = static_cast(data); + dataOut.insert(dataOut.end(), chunkData, chunkData + memBytes); + return memBytes; + } + + bool Initialize() + { + if (initialized_) { + return true; + } + + std::lock_guard lock(mutex_); + if (initialized_) { + return true; + } + if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) { + LOGE("Failed to initialize 'curl'"); + return false; + } + initialized_ = true; + return true; + } + + std::mutex mutex_; + bool initialized_ = false; +}; + +DownloadManagerImpl::DownloadManagerImpl() = default; + +DownloadManagerImpl::~DownloadManagerImpl() +{ + curl_global_cleanup(); +} + +} + +DownloadManager& DownloadManager::GetInstance() +{ + return Singleton::GetInstance(); +} + +} // namespace OHOS::Ace diff --git a/adapter/preview/osal/event_report.cpp b/adapter/preview/osal/event_report.cpp new file mode 100644 index 00000000..92247178 --- /dev/null +++ b/adapter/preview/osal/event_report.cpp @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "base/log/event_report.h" + +namespace OHOS::Ace { + +void EventReport::SendEvent(const EventInfo& eventInfo) {} + +void EventReport::SendAppStartException(AppStartExcepType type) {} + +void EventReport::SendPageRouterException(PageRouterExcepType type, const std::string& pageUrl) {} + +void EventReport::SendComponentException(ComponentExcepType type) {} + +void EventReport::SendAPIChannelException(APIChannelExcepType type) {} + +void EventReport::SendRenderException(RenderExcepType type) {} + +void EventReport::SendJsException(JsExcepType type) {} + +void EventReport::SendAnimationException(AnimationExcepType type) {} + +void EventReport::SendEventException(EventExcepType type) {} + +void EventReport::SendInternalException(InternalExcepType type) {} + +void EventReport::SendAccessibilityException(AccessibilityExcepType type) {} + +void EventReport::SendFormException(FormExcepType type) {} + +void EventReport::JsEventReport(int32_t eventType, const std::string& jsonStr) {} + +void EventReport::JsErrReport(int32_t uid, const std::string& packageName, + const std::string& reason, const std::string& summary) {} + +void EventReport::ANRRawReport(RawEventType type, int32_t uid, const std::string& packageName, + const std::string& processName, const std::string& msg) {} + +void EventReport::SendEventInner(const EventInfo& eventInfo) {} + +} // namespace OHOS::Ace diff --git a/adapter/preview/osal/log_wrapper.cpp b/adapter/preview/osal/log_wrapper.cpp new file mode 100644 index 00000000..8fe1491c --- /dev/null +++ b/adapter/preview/osal/log_wrapper.cpp @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "base/log/log_wrapper.h" + +#ifdef WINDOWS_PLATFORM +#include +#else +#include "securec.h" +#endif +#include + +namespace OHOS::Ace { +namespace { + +constexpr uint32_t MAX_BUFFER_SIZE = 512; +constexpr uint32_t MAX_TIME_SIZE = 32; +const char* const LOGLEVELNAME[] = { "DEBUG", "INFO", "WARNING", "ERROR", "FATAL" }; + +const char* LOG_TAGS[] = { + "Ace", + "Console", +}; + +} // namespace + +// initial static member object +LogLevel LogWrapper::level_ = LogLevel::DEBUG; + +const char* GetNameForLogLevel(LogLevel level) +{ + if (level <= LogLevel::FATAL) { + return LOGLEVELNAME[static_cast(level)]; + } + return "UNKNOWN"; +} + +char LogWrapper::GetSeparatorCharacter() +{ + return '/'; +} + +std::string GetTimeStamp() +{ + time_t tt = time(nullptr); + tm* t = localtime(&tt); + char time[MAX_TIME_SIZE]; + + if (sprintf_s(time, MAX_TIME_SIZE, " %02d/%02d %02d:%02d:%02d", t->tm_mon + 1, t->tm_mday, t->tm_hour, t->tm_min, + t->tm_sec) < 0) { + return std::string(); + } + return std::string(time); +} + +void LogWrapper::PrintLog(LogDomain domain, LogLevel level, const char* fmt, va_list args) +{ + std::string newFmt(fmt); + StripFormatString("{public}", newFmt); + StripFormatString("{private}", newFmt); + + char buf[MAX_BUFFER_SIZE]; + if (vsnprintf_s(buf, sizeof(buf), sizeof(buf) - 1, newFmt.c_str(), args) < 0) { + return; + } + + std::string newTimeFmt("%s %-6d [%-7s %7s]"); + char timeBuf[MAX_BUFFER_SIZE]; +#ifdef WINDOWS_PLATFORM + if (_snprintf_s(timeBuf, sizeof(timeBuf), sizeof(timeBuf) - 1, newTimeFmt.c_str(), GetTimeStamp().c_str(), + std::this_thread::get_id(), LOG_TAGS[static_cast(domain)], GetNameForLogLevel(level)) < 0) { + return; + } +#else + if (snprintf_s(timeBuf, sizeof(timeBuf), sizeof(timeBuf) - 1, newTimeFmt.c_str(), GetTimeStamp().c_str(), + std::this_thread::get_id(), LOG_TAGS[static_cast(domain)], GetNameForLogLevel(level)) < 0) { + return; + } +#endif + printf("%s %s\r\n", timeBuf, buf); + fflush(stdout); +} + +} // namespace OHOS::Ace diff --git a/adapter/preview/osal/system_properties.cpp b/adapter/preview/osal/system_properties.cpp new file mode 100755 index 00000000..fe05e8ea --- /dev/null +++ b/adapter/preview/osal/system_properties.cpp @@ -0,0 +1,138 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "base/utils/system_properties.h" + +#include "base/log/log.h" + +namespace OHOS::Ace { +namespace { + +constexpr int32_t ORIENTATION_PORTRAIT = 0; +constexpr int32_t ORIENTATION_LANDSCAPE = 1; +const char PROPERTY_DEVICE_TYPE_PHONE[] = "phone"; +const char PROPERTY_DEVICE_TYPE_TV[] = "tv"; +const char PROPERTY_DEVICE_TYPE_TABLET[] = "tablet"; +const char PROPERTY_DEVICE_TYPE_WEARABLE[] = "wearable"; +const char PROPERTY_DEVICE_TYPE_CAR[] = "car"; + +static constexpr char UNDEFINED_PARAM[] = "undefined parameter"; + +void Swap(int32_t& deviceWidth, int32_t& deviceHeight) +{ + int32_t temp = deviceWidth; + deviceWidth = deviceHeight; + deviceHeight = temp; +} + +} // namespace + +void SystemProperties::InitDeviceType(DeviceType type) +{ + // Properties: "phone", "tv", "tablet", "watch", "car" + if (type == DeviceType::TV) { + deviceType_ = DeviceType::TV; + paramDeviceType_ = PROPERTY_DEVICE_TYPE_TV; + } else if (type == DeviceType::WATCH) { + deviceType_ = DeviceType::WATCH; + paramDeviceType_ = PROPERTY_DEVICE_TYPE_WEARABLE; + } else if (type == DeviceType::CAR) { + deviceType_ = DeviceType::CAR; + paramDeviceType_ = PROPERTY_DEVICE_TYPE_CAR; + } else if (type == DeviceType::TABLET) { + deviceType_ = DeviceType::PHONE; + paramDeviceType_ = PROPERTY_DEVICE_TYPE_TABLET; + } else { + deviceType_ = DeviceType::PHONE; + paramDeviceType_ = PROPERTY_DEVICE_TYPE_PHONE; + } +} + +bool SystemProperties::traceEnabled_ = false; +bool SystemProperties::isRound_ = false; +int32_t SystemProperties::width_ = 0; +int32_t SystemProperties::height_ = 0; +int32_t SystemProperties::deviceWidth_ = 0; +int32_t SystemProperties::deviceHeight_ = 0; +double SystemProperties::resolution_ = 1.0; +DeviceType SystemProperties::deviceType_ { DeviceType::PHONE }; +DeviceOrientation SystemProperties::orientation_ { DeviceOrientation::PORTRAIT }; +std::string SystemProperties::brand_ = UNDEFINED_PARAM; +std::string SystemProperties::manufacturer_ = UNDEFINED_PARAM; +std::string SystemProperties::model_ = UNDEFINED_PARAM; +std::string SystemProperties::product_ = UNDEFINED_PARAM; +std::string SystemProperties::apiVersion_ = UNDEFINED_PARAM; +std::string SystemProperties::releaseType_ = UNDEFINED_PARAM; +std::string SystemProperties::paramDeviceType_ = UNDEFINED_PARAM; +int32_t SystemProperties::mcc_ = MCC_UNDEFINED; +int32_t SystemProperties::mnc_ = MNC_UNDEFINED; +ColorMode SystemProperties::colorMode_ = ColorMode::LIGHT; + +void SystemProperties::UpdateSurfaceStatus(int32_t width, int32_t height) +{ + width_ = width; + height_ = height; +} + +DeviceType SystemProperties::GetDeviceType() +{ + return deviceType_; +} + +void SystemProperties::InitDeviceTypeBySystemProperty() +{ + deviceType_ = DeviceType::PHONE; +} + +void SystemProperties::InitDeviceInfo(int32_t deviceWidth, int32_t deviceHeight, int32_t orientation, + double resolution, bool isRound) +{ + // SetDeviceOrientation should be eralier than deviceWidth/deviceHeight init. + SetDeviceOrientation(orientation); + + isRound_ = isRound; + resolution_ = resolution; + deviceWidth_ = deviceWidth; + deviceHeight_ = deviceHeight; + // To avoid the deviceinfor api failure due to surface width and height equal 0 in previewer. + width_ = deviceWidth_; + height_ = deviceHeight_; +} + +void SystemProperties::SetDeviceOrientation(int32_t orientation) +{ + if (orientation == ORIENTATION_PORTRAIT && orientation_ != DeviceOrientation::PORTRAIT) { + Swap(deviceWidth_, deviceHeight_); + orientation_ = DeviceOrientation::PORTRAIT; + } else if (orientation == ORIENTATION_LANDSCAPE && orientation_ != DeviceOrientation::LANDSCAPE) { + Swap(deviceWidth_, deviceHeight_); + orientation_ = DeviceOrientation::LANDSCAPE; + } else { + LOGW("SetDeviceOrientation, undefined orientation"); + } +} + +float SystemProperties::GetFontWeightScale() +{ + return 1.0f; +} + +void SystemProperties::InitMccMnc(int32_t mcc, int32_t mnc) +{ + mcc_ = mcc; + mnc_ = mnc; +} + +} // namespace OHOS::Ace diff --git a/figures/JS-UI框架架构.png b/figures/JS-UI框架架构.png new file mode 100644 index 0000000000000000000000000000000000000000..128187aacfa540846172eac7d4ff47a3c2a31291 GIT binary patch literal 35564 zcmdqJcQ~9|7dK2KN)RnkqDGD05{VKml4wD68Fd5+qeP7|dV&aoXi-Lrh;E3{YX;F1 zb#x&JW{5V*Fy0%IzOF%$Csivx; zOF%#bA|N2dk`e%HyCm#LzKO>T!`acH<7!$w^8b6+o_~$&pAVo;y$(fI*$qYV24Z83`J@(Ine`dEN zMAB3If0@4GiJ#w<`kgN4?J!D90^)ysEH4q~cUKiFFX6UU_C6Df5fJ_3Q%p@{Xm<%g zFToppq4C^5|HnbWfuO$MY1%+Qaq^>YY3U8$bhi@`5vdCBn#)nny2U@I0PC7DFbd1N zvp&{;sjL98=r5)171K_f{qZJ7O4mQ*CM3l1Z@MgdD1<~18OtgU%V1vG*#ts7_PV12 zgP5JRv8%z_3iTxPJP6@2r-@>s4RU)6Gk76EeMRun_}eaIyh ztX!$m=y&$Nna4Ialz=KWftT00{bF-A{?D-5GKYt&zVgBCPiGhK1Z~e_pk4>DZsqwd~h9n>a;&Vc!uiv6b zh`tB(6|}H(rnFZ79^T0@dnx#)Z?zRUgz$tAT{Ma5FMzZjpm6Uq*t-nM+dVc>48l&6 zPk1`_9iN7VS&iWN@5PS{CMxKA>Ui<-mW9Wy)YUDlJ!>8;rPI;P*md7ZFWY1tD~H31 zI>fD}O*4!jLBfB_k${-~JP1$QWSIG*IqHn)d2WB6jzY0Y639ml>TC>5#>;-xYuzk; zMcptKt)5B;b!Ezw!E3Qqt&aQkgsWRvNKZ6l^igu}h8Td;{jBf?G3T7~H7 zcb`x0dc!J{u@*%7+q99v-qfUXycQPxqX|j%?N`0`o9XfdG>rCYj^q7}9k*ebkt&N} zJ~H_&quJM!Fj!}wwflmVF3X~8_CRAsYx!u>4Cdmna-@_216&%`>Lmt=?y~wzWi9I| zgm@8YmvsasD-GDm(?;tnllajDqP#V#sfYme{#Q=qOSCerrQZEpcPa;pmg5w7TzWUt z&BI;^>yD22#nYy{F##o} z391D8>kGSDMK{~&a~y>g7pl_Eigc%1k$oHWZRg8xIQ!?UHAqVo2cmRODU%6qy(F&{ zu3Y2FyT?}iN@sOc9c$#_DyW*{Nc6VI`}|(I_p8==KEvdT91@(JLqn4e3BHQAeI^Il zawe%k83}Ig>LV%#O@D1?gSVJV1xgn@qa49c6;3O?h!+y&MBAg(Gj2cOTlv)Mv5ZW2 z$|kLt=Ue|c*_AZ{qgTl_<^Nph`o4Xct@qMfgQ5>v9SFselG#dGDw3=l8#7qO?OJc& zosi0!nrpDQyb95|**@(#3?^o7Z7u4+3-_)Pii_XbkjUBR0O%fIWfwB#o~M-TF!nzVQvr~Uy;)@-=AcC(iAy-}tv&NH}+ z=h>@|YK{&{7xN?ObQYh~-p{VDhJL=&ULM?rxRdav*^oP5#j>&oU5A(G7#s{2wu;sc z=B7w{PDmrque9#FjvYJ;x4P$!!*0<%jZSl`Fb$Z{AFoSIf|U_yt`HezPd{I8Vxwqi zkYc*71L0rIG%WBD<2H1vX;@GR_i4AlecAk)*@rdSbXDd7tjFiN$tCq7T{FOROmrl_ z%cdC#dmwk?T1>=NuzI_nly>f246e9k@z=xU!ooe@mN<_oLZ%yaXI6NA8$}4q|F|HfRf2YHO0U)zO+DlQ=j0L;s9230v<~n=#K#KO9-KRx1sn6$_Ze z`NoDIutOb<^6C}y?*4s3_puKsQszbi3Zb6B@I+NerN+iv%<6--Y@E}q!-M*%>(cXt zV2y5HT)f5i*ELPV+8yhmcj5d1n+PUF$Qd%<(ewz(-T+|cY&*qJZSKTR$xJV*UH8s^ zzcQcvGC|vUw1YYILYc1BbyRfmUf&k^<{PR*J2Z73a1yGCbSqH}_q4x%Oru*yd=4aq zy+D;vbtgk}ETV~|=g$Xy=y)Epl_aNCopvv&Z3`o&Ve!ofSZb3|5poGZ4LUUO#T-PO zrkwE2aq{F24evEe_sK!D|4X;-^Pn7q@_xkdW?mAKiNgxS7)Z!ye2s{Y4ipG?68p)% zOG0dE$wtKK2Zq~VQoJu(ZK1Yc3SAd0T)Ts_X|T(m*Eq%eIG(+d)@!)bNq_#=_OzS@ z(g{ULJlH@0jto^*4kcs^3_8O^9UDgra-0tE-l^T$De&*CqE}ORJqinOHs{@pNYhJ- z-(ia^2*Q>AkT2}mPFC}qi#HsxPzw<8 zoOXYLAhY)L4S*;cChG6+niC;{bT>ot?zSc0DDWFH_ad{pZ+Yevq*t9;Q<|9%M~<^( z2j1Nm0~nwYy8f<~z4el6?@+bv6mWpCSQ57sS`Mv-hwxdWm+EX;{z7mAckRULSH+r_ zmtT{w@$Z~J^tV2M3Ix6-ITLaw^faJQ97I|=Jg39M<5k0@2|ZG-^M-#eQQvHNMOuo; zaP2f6uCka-zGk~kt5k2{4c+kGmj9yrbqjSC1SoGBJ5jjssT*MO!)bXXrp~AqS8cv! z!%X;2g<6c;PnK@_uG7|xRX}xGK-FN+N1{u8g4Wh;MvIb4kci7d*JD70k*B#s-opLA zdocz98w*5IA^8y@LTS$$0Au}Y+|LWl<591tb@@?af=uD4r?0d88D+?e$^~!-*~g5_ znrRwk9#1X^Jrj*RMH-x2YET}F)AytGcDR^L(QP7Ie^JL`SsC^E^k2BwpoqBzv} z6Q2vfK`;;#keroZ?&K3X8Em1G02aWJCKQKy|Mw^8EFg0M#)RR>{ciKGTN^k2cn!eH z2LhX^3=xk!8HfOD=>!oX4bQxL9yc3rLV02;LPnG*Aax{tDdS0!fbYMlDrLZ>*JiFP z_?{eO1@M6a(-Zw2Zyj2L%u__+1!r$x;OXEiz4(vWiY)-m4i~l+KYZ=PM*tu;*HYhB z6f5hiG}*Uxa!?Zim>k|LM0|obfIY=Cz)Tlj2&gA&+g?36l_d~800Aqg6MRyDz;}Ji zOd3%AKE^p}zexddLhQ$jb%YG_cVFiwApy8k7a z)bO@ozdDC*B-$itSAgD7|HeJxN5Psm?7 z8{`O>r;$to6^LU;8|m{6hQHT9#~-OU&kUu6V#9=8!-vTQuivVMq9-DcED&7ZmUAKq z82+B%?dNmF%V@ErVtISs(ievt7%avb?=E?;e&c} zCf!N9b@y!1uo?*?gyvOhFF|#qm<0?2!`!l3JI<+2VZ2g9(8hOE#3Lh5&~1w`qgCeH z%cxVnmAm{P)3KE7VE+aa0}E-{5=xPinwDrag#>G;7;f=%-i~;MueH4Y^-&N_!a#(e zXx+xjYONO0tZ5F^tai<#!Uu9D<4k{qq@e#P!mK6QvRdX1U-$)#@8&}`-z~_E)H^&9 z8mC3ieR@G;bq7s)!YI7722!01WJD%+pBws}y7YMSr=e8_tU%{p(|4@`jvES91N@>7 zm1DU_Vdmn0EZC8UzOeLo#V3sP_JJIEL= z42@-w^0%ljxLU&?S5kF>?4znsS)R*y-J&TX>W$)AS*gub1uyqUVD57(V**1@BbH)_ zo_e;hp-x(gsbq>YW5`0ss(Y(KYU>m}=V7xD4`NIT6wRPxo(!cjOiB~G_x58z+uO9E zp}vSrtug60?p{OV3WLi_SO<|y`kcblPaRYD>mt@ow;fMClg+*_U89QT!>#8GPs_@k zRBo2Apr_4-7L4y@BzQ#j{MD0<#jV&MTCsDirqSx;I1aj`VAPGJ;TOzYlj%)!&71Q`aRr3C7?S` z*1O$Guq92=HP6)b5sU%Muk<5YFHbMWk(Trn+-AjFPc%Wq;qzLM$|7QekI;USP@t90 z6cQF`O?lmc`wL5er!0k2Sfh2R)lTu)!CKz;$=eW1oWqw%s(nf}#0>dWV`CUfJ%8=W zOTl|T46|GXjVm$n?O({_6wz1moX4NX<@#1D&lw^2#9a@PL=`qcDX6%T8UoFT%9|lb z{un+*jI81;DkKu)@;IN+F6wm3Ob@UeM(hbhYRXy`qUx91MY;->)$F&lf`T>3IQdvI zU}HQ!QQ?ob?D%89Bkr0GpJluLeX?uQ%#8Er;-w@jHYF<(H|--x7Y!e303 z@@T7~yJ56;IbJ@Ll;;s^%*UMa1DujGb@t=)V>#URhB0Clti&;0#D0)4$_R}zrc36K zu!tk!-indXp17Gnd(COo9e!bK=E5XNmI%fz!iYS3>haQ|s}e{{hfg^3M{@B=bw%L%6WuuQ2b5kNCBZ`3|qGSG))jPxF4Nso94FTPF9n9kJc!FM2>2~|A;Dj8R(S{nki8rvEbO9?5GP`q8#!qxw&qO6Ont-+ zMI$iuqj1Ulz5n3my5Szjk>plS!Jl5fUna(Vw9CZRE^tLvKtI*a9^1jGE4o z_12|??4#44Targ!yevh0R-vRn^!z{+;}GlB*iWhxUV!2LsC!S}q27A!a3NE++}h?4A4bo|7?D3RlRq@!cdHqI3A(Wt`=* z9n1Qvk@dL(hdL)Nj0o9_I~5c+sr(o;Oz*-bl9xU>S2ae?e&1(UFDo7|!&F7CF{tKW zrG0NJg0Eu?8My9yb;XH%y6D6vf#`op^&SglGxxS3-o<8y7= z7;eM^1?vDsh?<-_RD|YT3H;7{Jhx!c+!8L#iFTo-W{GT8{qf!8n~=>G0|W1HCdS!! zx(BVB$+)cu>D*WiU~>x0byRtx^&In9GhYvIUaMeKRiEA)uhW9;3kVt#wc_nHt55Ob zI;B5=hGjk$dJsXP2oh$NbwvE?%acZa8sryE)+OVdZdtm#l(`n`VtU!Kx%?bUCTqMx z$Lt#lTasS#)o&91efdZWb9J;DG7uh=V&-u^fOMA>o)D=$u*0}i8ht6kP2PfMH{jC5 z#SDhE*^#-II5e{k7^89-#ke{VQ7D9O3AtXA&V8c94z*E!yBmsU~jVWo8d zjnW6(Br2J?z^Xxt_g7EpJBhjJOvfqu?})i9e6(nj8&R}rQ|d`jx*HeB7nYxPg)niEE=*zdt&@U3ZzP#(~ZomAIyn;ovXI8L>(xlW=GYr}U=aw|ctZvUZMHtBxjlY+&pkqX}1 z=h{v5M)kjhA!0Tx#_XJ6nkiY(MQNX_D;owpDYQ1V~%x21$yX9vX$&`mys6OVU)i>Ei5g6Qrv_UW3qHO1@UeEH}Bgiu?C|dG7sr(*pY@J@&@zPpL)!@?)WOWy77e4 ze?hFg7u|=-`dBg-&Eb?vHhj1ErSl_g;$ZG3GA$qclb}#JNQcwbW_)Uwf92jqmx}|B zo1DvL!h|hadvho6?5LvDb|tOn&y(ow>aP_78SR46gr1FkbnZyOOcpWukO zkEH7!WOCwehY)-5=kBp3&eBEh;VmaBgW@Ny&E3Tg;Xbb1qrH&$`8^-5)uuHG-tLdF zlQR|&1|<)A{KCLmev0qp$tQQO8QI1U;_Ilg6q+gq5)7`0X^`dhBT9CoaKk0DEQi+1 z9r|IPck2e0Z^i9e9CK_Hl?nq))gUt_BmSg67Z{cw+*6lnt=he7rFWRs~zgyt@ z!#8z_@;%T&OTr@y-!^;BOz~Spi;Ok%_Gl(I;Z440EmqYHbnHvEG#)SG0>xJu)fBs= z&*kK$1$^(hNNDd3_dpTc+vU(?#5~sy$b3s1QFXedP_FWU*AguFk@G`mgskDls^?V$ zVt&trd}#Yvmby;g;vC<(Cd5a#+>-2biKhGLTIJk{Hs1j5*roL@%k|_v19r`xhxP2& zxfvPebfvmm-gv&uUa_K>0Zq%14EVNWmi+QNI!3)PqL789C)8so^}SK@$30QB8Y0AM zX{u=0+Gsxl9r|v=t2Gv^2R8YVinf?9mEuC|H4HvQcguVTjFBRF3hrq39$>)k^|Jen z^|frDX1H6u3l)%lGnB1s1ns7{QwkCP+W5eoi7#Y zdbFJ;HP_;QWIdrt^tIuOo1~|8h&r8<5?SA4R~&uNrpWz*&Q;_)Ph;4|RzpK=`sr|R zs!M)yoJ>Au9R*?0fHc>QnkqvqtYd3Cp9taAI#;3To6rdUcOeh>CCjUN9gSGXKJUv3 z%84GBq{hB$iR{j{mT%eD-EH5hXC^u`bAGs}Mw@E>;f{RI@Vno~p(COIDP*3c!~L^^ zzyLqk{d%|H?!^c~Exs=wSh&bkPdyZUa`$6i;g;^C!|9Jt0tEwlv`r;`_P4#i60Xhq zQC0al&H~Zu5x&HWYi=#yq{Ic-kJILNa4R`e^K2S>fp72z43PBoGQ=yi;?$?Z)^XzS z1n9~bqg$50K>!e-+)Iyn)A(tr=X#y7Y|LiLuNiACMmv3r&FRqlOns*`yQO*O1}x28 z%>;U6ocM6ha($;!BQH98Og?XFjaY}rsEm3rfqfbHbob@n9dh=J_4Y{aXhHqZZ>8pk z^K|^A{W01w6K}{YHl6TXgmfcVH>slkMY`wDIb5i5qV^n`Ocm2+ z*gBn2fS7pyha#B8068f8oc<5f3>en55@WXG^z{;MCn%;c@7GuCL4Va<8jx-g4SaU- zMizREz|rS7zwJftuo(ZOClXhRqh`LLgN7O1`fx6vppqC@h*a*nc&}Yt_H>xpt4Lw? z(sS(G8Z7HJ(VK3JqtT!5Io_U|&u7B0f4BaMr@dKqJ$5;A0qS%8jwHJH?Qfs|2^Ghb zYHM3ae%U@zD=wKdP3++t;B5-fA3g6?%aE~j5c34yx(e&f0)USk+_h|m$j{%S`&`E!*@%|OC-mKnm>SB6r z|0>aFbeqLyzTU5R&Y!ctxNP@I1X3z=N{hkPK9QaM`?LHeNgtptv=LLGcdC~99bs%KTUBB0BH!h!K z-#m$_{nv`mY zp^~X4{PLM(y<1*fi{~=Kdmp7YXut$3O_2vr_g9IeezHG(S-5y(>n2?is#iW@1;3wU zX_*PD^F%4$Lh7PK7nq|RExuTqV1Y*8tnZBWW}oAlHUS06?bqpQZO%jyn@84m3#<}U zq|Q#+%)&&mL|B1*`SZ-DohLjVN|1%*^8pH1Zc`4aXvzM;0*usu?9t!TQEq94b=owF zD@3Qb94v)}VehS0p&w3)O?>gKZ*tYuZjLv8hN87d-R6f|{&WTJ2rsYjVlR6V^YUy~ zbB+4PFtpjx`P+$NFp?_ zl=0E*Xyj;?s7*CXfOVmB^_^OcV2Hepf*P_U;H|mmL8eomAwr1UK|8mj|) z9e(N*Ol+Axx5xZ%5pC(S(tv1VbYTWNmobu8AA0PM&*tKI|L0xAd z8SnIOB#!+_dV8AuP8LLoL%2up2%PTt<*i8{DcV=&nLU#HcbfV; zeH2C-E@aLm?};bNk1KwBMN&KYn?jSEu5e)s$+oRc3Eh9?oH%;W(%st*ESHbg8U+LX zwxJcVtq5@}s<)rZym*+TA0=EskF1!K=qlZm@$gmJ2U=*!4}~)v z1)GsUSWY4guzlB1W%DxJ$*$-fo}uHsc8}$ER?pu5&#WHcoiyo?_ph?P~_tQzGaUDD?vz+>!{R?xN0>%b;n9S##L5uHLi`5E?9F>3~sgQ%% z-8|d692(I-SvmX+QKXoTBw=)d8JE%=QXa_rDZ8V)p3Tmz94z#7*+<;Cb};BnG-`1Z z@Bh>JSFt}aQrqFEq+viQcKRdcG$Yv+HwA!376tCYeHVlF8S$M`)21m;MmZ_w%8F*} zN*x^8yY|JM6C!eo`b5}%b=I(4GHPCzvJKYLg<2&>BBX93&u^~v?P zR)y7n_Du9`8lq*B*jl-OqEO_`GVb?=5BGrrEW6an{rcD*$m%5`9bIN~*yKKXEnGO1 z7tH+k7DP7!n`ZUN-s;o)FL5Q*pwmOvr;WM^?f%k(G#XxO(#deo^u#90;{&j)ZLX#z0MXFE0X znF@f9wAA1d8DBzi;E5Y!$x9m5J*mr+QI-DNmhvC4J!P}&Au{IeY60f;0R=rOMzD8j zf_8L(E3kvSi1O+_JP%J%Bi_`gB~3bv7RBP~(|F3~uHdC5T{>$v zQ?ejJJsw&*sR^H5!j6o|&Mh-nL&a9)`Ia%e*ygdx_I;aca}yH>JbCU^7IF>|yPEPt zMJ;~&drIjmQI$2d;#)aB=@l`2n-@Gb(}0bGKR%ZIU`u-P>2CBz3J8o)R6-x5l4**V zzEtx<2V->cGwt+;&~${;0?DHdw#Dy@EXx7=U(MExxe-m)=@lAsiYkWKJ$XFJ0a~cb z3}+_-`o2L=e-lnFYtT0J6lzOxeu0m6ib?Y2c@Ux&Hd`k|LxbfH^}NMj7nawMEdx)W z<^7HzS-&?t5?R1p7Po0X(YBaCchx`jf(+-m`o;AsXy4Y$1Xu@qfH%%k-d|4;VsC@N zy9Jr)gCe?6K>OeF(QhS+NK}#oKm`#@U!E6yFdzRcrZQI1T0g2Wm;d!L3(KQ#?>c@$ zwId5ApjNsWq?b(ws`jTs6DjVGoqdIN7#(0O>bL;UD!*!joZlTtwn~MHZ(;B4?E3L7 zTf@)5p4RkQAZI0y?0_-^0KmjIs7;9#n-M>IdJ|O$lmkC$bGlFGE%%X@deA-Q3Ff_& z!4kh(C$-Fr6$SRe|AMe-Li~k>Wywo>rs?7P6mvjBC>pTPhiWGi{4RFvb0a6VflZ8B z;^hSw#;7DXp86V3$VdP2s-QbU zna|o|w#po}(H4FpZW#Yfg@tc^V zT(@q^41+T2H#Q_Py&TBBc3Xj|wVrZ&I)s$9~k_soZN%hVJ=on+xL!?EMjC zZ&)sKFF}qyiE%pYkpfZ#HJkjmxiJIG&7B9CCJT?XX(8;B_~lX`ZGF?E!_s{ivs*z7 zJkP8g3k4CiHqWx$gbcgoZkb*^)ghmOUk~&2aIk{gkZ9iUH6QVc-P!VEb<=6CWJChc zN#t+oJW*_#q^LP;6k3`P)8-kk28Px%y$8T}XnEUk$5h$P~+f)_MM;rmSpJ4-<#ki33|*_8?`^!tUpcSLqN#kvkNQ^k&>eQDNF$P=}(8>IPrKw02RV}1mF4HFh7KZ z95#RQf~~~`KcVxfvB-@7vQTnc@SmB0DG$S(!$XuiWeiI5e$(B_cmlpya>Qjd9Vp;H zJ3xxw4{t^EHyMFJuPIQE=eM42wmAE*GrL(Gl)E>++G0%=p%Bz;JpZ?oYG_D20i_we>q0IEGG6#dDwW8{&7%8QP$%BMAk@1>e$&5RD+F9QX>q&9{%rO949qLJtNz& zlh^{w%>NzyND_J25*G`4K0P5W6z%_tm;V3H%GdCMNj$c^#s6Oc*r9R;*)SH%EH(XN z|1U6pAtwNoGtHZ&_;0jMaiEnAIq5O1=J#!Yqd%?+HMAR2=IQeOd$Q_s06MtcXf|K) z4RxXV?{fh}e+}|X#WLjZO(-lqrmt`1ABuf+;FTi{?w-)jL-G6pk_Gvc5~1ivPtFH< zdIZe*FW57n=bXV_)Y;tJyj>4K{!QP|Ky7dkwxX(C7ED^F*anU;)spVSLP7fyKr8Y2 z_Nb`kX@*_46Kny2Us?|8)X&;ecdM;Vp!Y2;g(-xD5X+r<-_>L5H-5Ft$t$F0%X;un z1CV?_Ev2}Ll?5#kt5@sUqFkmw(in{97MB-PlWu;1G$6{ZQ*8#`I=TEMVnYsu%H?L5 zVdz4)-YJ0!1$4V<+r9}y7FbX|X^$1Q-Zpk-K5k#6vpFG6V<>jzX7MVs-(MLF@C6+K z;7Af_xyWK&w|;zI%hODESqM#-@Za1g8Nui}X;(%HfL9MXLetrB@HmJ~=k{x6WNhsRTq?MoC7l=2<#QiY2 z1)z8U*n1uei`qfQJUf2l+IqDDeqe7cPkOgLV2d4Zi{G!uC&iDn5tr+IN_S&}l?#uK zxeCZvf6(3|i7uZq+NMf#3hEOcfe>t&0(m2;&G8n7aB5J2GI(ojlE{GWx0?gbTb>?L&RL#^-}!?Q_^|Mhkp) zyGxSD2gF_GJyCIj%onbyhuIqF+%Ml8-zXJ?N}38pJbXNuYFfdi>Wo&oY3oIKL@}yY zn^+UNrTl2bCUmmP3u-disLdrr1G+zTcsFFZExboPG>4B>Bo@v8&eS*yav1wNN;j-z zEnlTI5n$6CfA*i0$pVyBy%MVkv+wprv?B+-phdX8tmC(Ew^?yhW> zpgyT;NcDjR@+JUVMG0?n;EA$9Q|=ue`QNRXX+fSYj+1#FvlHbWz%`PZgWUETAXn!> z0H;+`?Yc5pqJ62R%Au!PB{=&<-NV-obb!-!=pghL^(cz{GS@-@WdTPjq3Qjo4*+qy zRL#l^{(|2^CTbaHZ!aV1lQs+1_$^w&hXtn**T6}QaR=@a9x%m!jsc2Ud>>yY@EnxP zjA^_~QmuOhAIt3%heVu^#4zpZ86dRqB$p3AXjq`XKJLouu#K`s8vY7=F|n^VcC!p= zX}x4~m_q)&A85c&{(C=I0T|Sq675qpXIEe)RJl`ZxsC;j!s24;35P(0|CiuFU=6nW zjq`;oUG0=_53^NalI`05+S{BR&7u6GG$0Ca`BcaW1q5OnCp)gOlW(SS=DOlI5sXNu zMv@aJ;pR~sRL{m%b1)vTow~Diuxp`Z-{D9}Z_!l^fHr0UJn+Ge3+`Ib{`yV5iA|i5 zTd(2)CenKguVEZk*6&C-NLA(-rIJXeqla+r2(aDOY|Y%P{2o9xH*@y7^s7?08~$E+ zy-p0X+ZqbCo~oj?y^C)#odAF(VZbZpGy#a#V|++rM^a@~$$0-SabUlf-k-8+w|oe( zFhodwD%r$@RMtV72WK%P>mCsV^~6eC7#~H*EOGT!+F@hJoni14VMszjY)a*q7RR@hk8Br3M4daU z;VHF0x35z8#Cd$-9{f=UdeqmnnIHQ_9odhPuciU5sx&n1lP~pwzw7&Ax&sEqB0R%m z9=IxVAfCBqvP_bdHW!|jet*}_A417~EL8H-=a7T12wNE3oQ=xRkcmOMN1f5!w~0S} zw|UjB1yG*+QUIX*YIE4ISFY-P`-AbFo9+3qWV~CS zBhH4yuFUf8c{HP2J=52>miO#9Jm=7Sa8&bTa)f4zg+hSX7I_OeCoB?^gs+p>!R+oQ zVezv+vO>+y`EK_%A0TgZKiz2?X~&r+Z;9yb^p8N4hwobW;ohQ$cAzaV3_c6%A zA)?S(FHJuODf(`G6p{;`LrUUrLv9g$AY|SRoMh|6r>k;`NIwaB7jL+-_SyW@CRoGv z%;u`$*Dp6^Hn1E@8gE}ZEcwFlw5ndE_*0dk4o!0i; zCE}M1)?~qgv!DAIS-~>D1m{P|oSNsyLc_)RCtdxiciO~F zAWPhE9qr>;Yx6l+C(Mk|*6UrnT~9I?U@ngsbWmh`B_jgX;Hgsb&D9{asTWCUX+(`o z@Pz?2i7etknZT{Ml98UmG>@&PZCR1D#pBp5OdrK2k?fB>Ppr7{YKi2NaUywcZ>fCM z;NHy=40_-$pVv6T6QON*#(h{f>Gp%F1kr((?KJRY0(4OI0T0+70viu6unf#1v31r& zhe&Wxq;yCwVu$kTrs=*x`GtGF5%iP@;AAtJhu%Ul`M#xRX&fz>Rs)0>gC=ikt%uX5Z)gsI71BUMN6#2e$l8jJKp zZ%W_2dPjU(ekbS0gW-grU_|pN&G`}NPb}bzX4_xCZ`%MT-mPF z>|3rrmcX-WG2|O=^(edW-K#f173clpjh8olY$AJzH>pN*_*_4XRD0D0RZ$MV-zdK* z{|s;mz*SZkQ>0-MgxHZk1pZLUjOW{RvIik0r@hkqt3tnbyj*W4k{M=;6kzIa9(5cw z?-~LU{nj1~PHWkDf8QGKmt(TiEmB+MF|W>@Ep=&Q>3SP|$i7am(Iz(MZ>u(9M=YJv z{u712q^I}9Y0Kd8=ZT?*MyWAk9cD6$vV;EB>o9XPg>?I9E&I*%K(b|;#QpOY0(_Mk z%li2lO-?B&TEc8sgQOW1(+H|BlUCIoYklv1s!=*RSRM9F*G+fdNR)bc?W?f0efw?3 zqfFRUDQk@Bv!WdZIIqEz)?F_`6Oj{Y>nO)By>Y7U^ro@gEFv3e=*|W2*MkmT0LkxY zl>i&l`a*QmD@sL*_r1FR9Z0jh9B&3PCiEM8|MOb*DvSJ73uRyd`-n!YVJA-4pKBJ~ z9pLl$#t&6=-0mx-s>p9~A;DxM5jZXY-1|ul&D+DDM7m32`$avC^f_WV1A|Rlt?lYN zBz<&1YEvhtVZLf_9xc;$$J{7Hsc-4)NZqGaE0FTx`Q`&}!HvnUA*+f7qAND!FAj zx>{!^Bf6g-&nQ<$?chSj^>>%1B^=c;1PCd@qKix>H8&-QT6q{S3cSTz8_CM(w9{&sgwhC^LZxC&9t(6C>tA@4mK?Bi73e-AnMb?RQb zj%0k|JN;TT)?6ZP#>Rl71orBk;qC`+b;qGHC=ijggzC4ggcpP>RmO17m)^KdlAH*= zLmZPhpwIF}Vh`m1!Jl zI6odES5(+-zlRgGSxbFI)^#`Vu5Drp2}8c%;a;bNB4pD0^!*yPqTX8weR)2chrX&i zSLGdks}*fF9&2Ccj}T-i`W`?3V=G7-X(+EF)mW^NysH*a%fV0RyF7cb_PtPu0*$tA z>ljv~v0}Yr@>|r-BAEfU_iVZl6ueI@(Vv%kQGcW{-?z#VujV`(p*vF9-E%P_Uqv$t z6M|Y?=L|{vwP53YdmP``M>?Am^nI#*WeM6`=XECoxj<}3%ix}3CgiCtt3k2mvueZP z@BC(dN=xs`*}mDN`IkAB+OCVtbP7?$^F4!ebQoa-U@MHfZx_Fy zR2|&I{gt_Bo<(*=ZjM~5z&XV6d?_QG-)*EKcD3O`>=Ipd%=3S%idi8-oE}*FF-26N zEux#Tk)0-4ZbtiJ(qa)atZF(0Q_sIO^hx6et&P;y+t9JQB~K|h4Yw<+8>jE@DiU9R zJ@l>WuC;#8$1OizdKC#VjNdJ+c5RX!ii$2|;+v6eh)97HKEtx`Bq{` zJD071a{uOs7PK%T?r{(ssDIo1bF1;N^5u*uoir|ld*J34fvTlJkSG%p`t~-&8?+Gu zL)}Bao-_*1%@4e*c1{8`7oWsEyj@d?$?-v4o2wp{PE{R?|5|0T9UfJ*lJF$yG?!%J z%DYxXBx-02hFS|59vC!_hrp*BZGr3x$^Ejx2sSR4mpW=hT+sC6^lkLnxR{u9DsDzc zM_OFxU9nMCRF^sNPgJ=!qhFW#^U=HzGXwwasR=WAXz6bJlEJ9@v4vS`N%Bi znHtW~nI3uTN1oX&)B0L3Wp?~*tfPK>(9s|EdA?0{<__B7^UkCDwb=>dD2e+94s7OJ zc>@s@diKt60~FQ=UimEMuyTpJ01^rBAa|wXBcq!DBOBwZv7{>ydAe!voPfilYnCpBKC;R(C8_;wm2} zfg%&jn`s-PCAx<)4p(3D^S(qM3XMDn#RkS)MSa#b-&(0(oD4u<<^R~xj)L$XDh5u~ zRIcH|&XHv#x{F>Tb-A%$s6p8nJ-@{#*w%n(JBNx4@KWau^I>1v>{rk+=<#_k(}VL! zitjF{Fx}(P_+fhc$pjU(%UfJU5Y(9r$ck=48qwx^qz6HpwZ;Cqo`XlBf9vYki{c@v0;M-zI8AD8_h50<3Z`D{#|)Cg4LClu1apBM z#v9%854QK8>>F{#UP43<1#GuJa*R4i8^r$#z+?YJ%|OjukC?$SklQpd)B)IW!xW5_ zJI=Ey05KW1{k;lTe5`5V1!ssy@*xGXPvXV~`xJn@g%-SYghVLYMfd~1#NlAm;97Nh zMI$NbU`omMmV?QTy!9o#&0y*rUR*SA+Z1_VLA6qcV-kd%Mg=D(*- ze=h7Dw0fA}{=%6Ix-flzO+@LzMe|qb5FLA1H*}Z>3kE!zdKD%BToC8*)#UiZwEX+R zlx6bK3)$eMff|S9A)tH89TvikZIu6uDz~G4BXHhc#QGvCUc4lbxfbZkg8r)_M{!hE z2b2uxx{sB6SWiIx)3?8D|B@FK;o|;!?#zAv5USq=Kos9$aePp#IT4D+MOD^qXmfvx z39LtqmK>}lv2Y@=Op0o08?t{o0}a$iuloZ(Bk-wZvivFP;#uCk+a*VriH~LsdifXe zeyo1khKuPyr8bh_BC*b4%kB>vJ8PBpTX>VW))a8%cgIb$ss; zDAz81Zvq1H9s>30_mjUR1eErUC*VX>k$}hAp+;+4Ux~!0Cx4*ouHOW@&HrU42L*7R zH^(zlUT-vxSrTtaF?=Wb79>^-nStH5U_>S$r6}Ga|d#k*pn_4y-~WKCB(YX?FW*g=I0n*ij~e zsq?x;e?t83ACE#Q=+&A)s-D2PN^1iu7JDQIjRA8Ox1SzNDS&>#;$#ND+&kKKO?jYDCzLj~7X`eTjg5+1pHXnR-$aJ%oPYn@N6>(}fGDLc*iC+D z|B5nk3^4t{lhA!JpL?06V= zT%3yQA{0o6jjwm@Faz{yVVHU5TLY#(h0x-?4u zYxv1?0ot2)lZn;+bfY*E(+ zgc!T~4%n>h@Pc)+PuyKqP@s0wMPsxo9$rwjA8jFQZLw#^B-_O0*(v_p;sc)4XuS~B zR&^kxbSE@{7KANPqOl>$13)qGOR!3UZfs)I#RwsKEjOUb@x2=K>)sxTR(Zoh;*#+{ zU2)KjKd$(#5_U8U>t7WnI&9Esx_8t6Wkl^g^2>2hB%z z^2GnBBg%e7;}*o=xs6BGIhC=!T1dmke)o|9 zK19WU7@AT=9+a5#N2Q}w1PoyNAeSRQd&n}{P=d3t{MIG;BWv@W#O@~sxN@> z=K0sUsz1qB@lnYq$8?cLD=RF1Ag@2%&v6MFz?$i<{9=`(HLy`e(oZ_&Ag$I zBw3NSXzI-LF)Rj#)6VTYcYn6VEN*XiqTXLogn_?`#d?AJ$@?|npz!bpCZ?tsyLSZvixGs z>`1b>tNYnqOc9cWadqKHz&{Rw$F6_D599lx{2>apT}hJ+8YT6nO*GKkZwmtaj1c`a z@UmP~2+Drvywl2nEa|Pi_h2jg5=CtJR>C$T2Y%ghIW^2B6mQKZGzO_%n|w0;X3uXT z3CfD7FKAJ8F^j(d+(m$}T<+K4n^u_`B{RMT_q1NdELptWE*QQKq0Llpt#$V>B?5a8pE*J&2>E`q^mPnL6)Y$Lx z4^v{#M+cQPjzz>SojFRm0cFob-&GF12iYKi+|(|qoPBJu)XczPrr76A4I1QLr!KyL z^!LW&C4~^S`R8DEH7=S%M})}&2cx=`l8~%pnF(35uZb`QBYPNY#xj`aL(BdB-oN{MKhN`eJ%2p@n3vbgIp=fE zb(YV$-q-uOu2O!Fgy^f+_M*i(okGa$CWx z)UwONp61d33%ozK@jjeakKs~&oU5oTeH5F-(~1H|X?1e;MBcaKGs&YKqu*NUa`+nV43i7#|HX^AOapns1s9UljjHZSFIhb2A5 zaoeeR1hz4fl%)QRq`V0 zl$y-4e1&wf{!kZXGMx1CdNIz7M#Xl!W-SU6Welr-W1d1(-|K%{eXy##mxEM1FG0ERC^KqrCSKcWTzNV7pWRB z&z(tR+SGuR!s0wdsBbSqzS)`;nbQW339MiXQ}E)GZM!Sj*kp3-PR91?mNJr}-EjM^ zAji=nl?BhcLL)9_=MqE18-gMlDow?_nwJNh^$%lVyzFT)Y^L6jDGoZ;(+^o*##Wb9 zzBRYTZ@0#_>{&J9d)P3nH#B!hPd)0n1tQ}Xr1&}2c( z#2vusY7id(VwYEuq6*TQ7WdDOz2>M7{hSb|CaCVgXUx&0)7;)sykJr5d0LbDzPq(zN;5NurqWg!gpLvV#ocFUJ`2%N zG)gW>wJzV4_E?Medyi}L{ybPcWzP1v>KXL?yZh5$od=o$!>}Gr&uLU>ULUr#Azts? z4{rU{^Pt$(yayEwb=#yA{fsX8V&Qy-mNhth>ps^Q$1r$Me=v*x_l3h z0=mB=?Hsyt8?*hPYM7uF5#y(u(T`LcoL(~St2XDz8zUAs;%)BtD4R(NHD8q2f~%MD zJR9EC3H%NZ(wG>`es%b3&iD;Hb`|ok{iAMJA3wxJh)g3reYo&FKRxLEkd^K>E(i(@Vr!bEM~2|Md38>1mx%?(~nYrWcZ3X3)Nq83Ly zANJ;fjbF&c>vQP%!q@~4 z3&jaEF8xLhHsq6A*+oDa1Z|xZC?iTKt@wP`NQuRRFy_2r`NEb#%4e);{5Sn1-IHJ5 zKW8P)A@O*KDU4;a&SK;P=6YHEf8tEtqCc0B$mm zZK4KO&QlLunwr8)kGtSDWBHy&qH3psmDse%X)@E^%ApLya+`Gs&J&nxSWVEG6k^7sSC;03+(BdC>I-ULl--q#< zkb#$+y-=lBE3Vp&ElCwOuVM(h*0`#xXV`1+H&27=IZ}ATS8q=%ASu}bnE4~`%^!QQ z-xgwb?-rWrXsehMBE1+W+Nm56RMq)-Y~nQ=>zADL)MxG2IJ~E0J%Tv-=C&qg$sJXG z4FwwV>s8^0m1+vMV?a?H;4AygRRSCcM4lO{DI zTs)Pxsyu7#INtfHHZJj>M3+_tnnl;!$m%Z0avvWFtGVOBOIi--{e4Vtf*$p+4IZQ@ zTqZQnhQsfW<-I_qUv4?wIz%uefo@ji{aNww=|**OqR(1{7`b_U>Lrw%jrAc9Hr0ht z28GX_#$4y)pB6m7UVqWwy12Z|=epTR!#z~#*KFJF&`oERvhR8_kmty;Z0nbV#2 zu}lAA>+G4+0RSSNaRAuB#Ii}%Yr`RCfO7Wp!f|3j{)0sbdDkYUig;1pp-n zY9Y7`|8*Koig!9b?Deqy4l0M~yto`xXJRMSfg|XST^tp^yYHk2F7Y`Kr=F z=k7c@PrNi7nDKi>5B1jplfDd(}r@7&E%_}3$Kc|*HFpX;iuowlf@Ck7A)tZj2# zV-(aPtUC!2vTR9*Gu1(?kUh`1dQL#&>v}jYi~V(GE3rbns4qfu^5Oj_6SMIpRe&Xi ziPg+Q6zX&vT({#e|Co}}xUf{kSMmGO;B}U{d4r7HDn_e4LJnAUFqmGyGMf9Hol@)C zH!p7>4?N)UA<$gmFP-!jQ@|8M-R^H(#12L~J2y?|2?tQP*o0#QP@)fA)jKyv5r`+O zQHs#@1i2MmwHLl`kBYap56z@@SQTr)-~l(z=++yr`|d2+8oiqgJ_&V#*FFzcNBx1o zQeN)kP=K1Zs*Zi>WxYT^N?BG{%27a7)$TcW)=|^u3C{-3B%%}(JrP`ge+Ka?tmS>* z8o7VuNS_Jo9T^iW0IME#5j?pCFuQ+3SfjoBG+RJm1ykmpsJ`dE>tblXJxU2?@mu+h zRaNH$D_Ur{6=K$^bMr3CuWEfwd&FG;2@#Tz>a0wBFuxwGYWRi$*rlUa>(cc9z+=}t zeiD2gHQ1qZy|tmMF)V+Oug>Rt1Ka1&^U!vRsrK;Fp85q07CQgLHo5OHgSX(YNym8~ z0Ph=cRT}6){`l>XbrSWnJ`e^5C#lM&fMBbg8u-ndTiG9#z07AjTam>X8a3E{l)scujayg+_$sXVFK9n$T)J2{PA9=eD;M%}nt`gm{Be6H76@gj3n_(M zk3^2~$(hPh$M?uG9a!RnHgSvz|Ahj!hi6@&19{R~e`0RFM2QpQ8Jfy%b=NbOD|EeQ z`5S0s|Ig^pensQGe$%_|&=*`ilgutLW(`ccJsm}^zvjpI(_uRF~B2F_R@xiGPs17T&NQov1qugy<0Bw{cHR?WQp z$!q=Y-&(xwvm{uSmxbJK(Qk{>G6&DOp>IyElOX+kZR`{1Tl)?&M7?c`zW?7$45c-y z$#HpJbo$YFzpbo2Qwz}Ua%nmIA*HueVjD{Mw+?ETi)#Ou4jPMLb}NvZg!bx9ECszm zplnoc^9i#uQC8b1W_L94y!d<}+R$<@S@#0M)r*2dC zhqzT{TK}>OZM;Uh6kb2Ij@l(zc7z~(Wszj$ZgnvW8|D;71!JB~;w^HPX<1kWBK!u( zY%Fe(8i$Ywb4?VIY?TkdhzZP=eK%3h3+ndXMH|mgR&Z0e=P3Ig6v^>s%QAENi`9t* zVb);Kw$(mq%ynAPGysS} zzIq07rVrMLq#fAZaFe+d=I)ERE=+7!h2_k2Fat=z+nKN`S`7 zNuw+1-@5UNIGuMifAF$XI8+3zyXja}g`BaQGLald(6*$b67}V4lmUZo;D$oxaCH@D z+SmLebHAbo*?CPr53?^}g=DQhRtQK*rQC;#pqQEFQP-MWS#JnIMQpPqrbaB{Zh9UU zi9jY}e4IX=05!I9h(OF97RxPTZ`FD+q?-IoswKs(3{b2&vdFVU-wyRDy5wj;_>~iYs1y8@(v#9 zyVGO4lRWHXEpGKbd6(#&oN6JAGN$%tg2q~m-i3!c(xqcsbX{^a)A@HJ#c#&GmS8>} zr8c4Nqit)3M0>FKRhl_DXT~X#_618EukNQXuxgawx zFos+XlFQs6#KOh;CqV+F?@iINTTP~^ot?<3&^*iMtQI8?JoN6P2Y2$IejdoRio%oA z(U@Gin5W+iI2Gi!mFq*8Y<)JQ>tf+=7u?Ai&$Y?N2P#xRMUS7~WHU5EoGMzoNYI2i zy98EiNM}9URxvYlE+!q%w>~Q71WpcaVq3d_NH8nXcod^5fl@4#_e!u%HoL!ObHPhr zhr)JV#KomoCtk2newIE60V#g@mC>krFz$eVM@3$a4sEqwZiv2Pm`$;b84%Id(8J9; zs38U)@IY0zuU|T}bu*NthFe!e6s4_Icj_CEr(63#LbeI>N*$DXEGxutbv|~-ewr@~ znZC)t0KS_ao}Hg^ue#m}ab2AI={LiHICxvY%nffkXwX28WWp}Ap!Hrrz^h8UxA2PP z8{`uhFj=esGH=|=WM`H4XztkMxuJSvf9+^C!{I?Hl{n`Tj5D{A+Hh zI`^D!!Zw4yFoA|H7>tcX${p4jYcb~-s8*KXNgO{Qp)IJ>+~GS8N2XdZYx7ptm)tW8 zVH^|e-iv0~93Luzu_(n`WCbL-N7(&1O2^dzVvAjOoM&eOBQT3U{3O@0vmnhi@wew~ z6Bd=eQfw%`r0gF1RruQcc2;<$JLp`gf7>-qa`+gwv{LfsE8P{T0M!p`9w7_sY<$sv zowoAAn72bKBwb{C@%lxcNoSSn5d%te*Uy)X^KBSTt?xEX|M|y#3ZZ#t4?msJt_n1w zjT4~1dYI@J}YO;ufVgmo(8IvI$EA(BMITAAn*w(fxvrYN>7-iZn4|- z1ZxQVh+fy+`Zxs#R!oIADSsew1kvK-#KsRA8&_;Kyf%=j*{}q|^9(F5`uc(=^ouu^XmUeAD!$^Q6KoY}jtA1wwA}!in zW5`(b6s|#@ntWb{d?2|vg3WAF^O^kP5`|@=`C;IK|RU zc$16JHkIx+(BaHc706%#&|70_HqaPd!MF6%wzgMtT**^1P28_fwRHjK3=<2a?jd|2 zn8G`Z5<-9J~cxf)h!pm6>xqT*VF*_RQhNvfqS z(r-d-R&%0)$YtCA=9*Ipo&M*>_!OK|??dZ$) zBdnfwr(jqV1E*^l?KymOPAXP;=-P;GY-u!ZJ#E5R;04hFb|~_4wbXid&q3nOt@VXU z({HVAWs%Lf7(`JP{C=@Gg!x!Q7TZBdsRQB#ArZ_%?xUZn=1R<#Pm>Zhi1XX_`2!wh zst=3 z+&UWpHC^%Z%BU!U_R^~@J)7p`4W#{;VpZ{|Ofp}UA8!*F+sP6s8ckvn3Zdoa5wx__O_ypQ*!c?@jHqB(-TEMmwRgJfZ~(U z+sU65!RX^>TOK^g@%2bc&c=q#HO{PCYX_!A(8#^4MZ&6x*dt0 zxZ71}WAuBofy60+f)3TDJko4YgMP27j}Fd|6jz?G z*`7vi>JP+>bL~8I~30is;>T2p_l6Bj7i`~7f&8)hr>!XBw+6SfQ!{_%#@Cn-H zac4|D97o2}mDagff0?V%eJ*hN)HRRTUjKa5PfE?4XoK;!+S03O!29_4p^h@D7vp`h zhee5zC&B<#@EV6s(p@m2dLt5h=#EwRiC>ES9IU~Zv9{DW?eV~w@4Z@zvaP^T$pTrj z4Eib?9|q8iPLwHUDSrLw=aAdb7yZboz6+< z{3<%%(8mUF^?{E?U|DEcHwxW!gwj~)zYQ{OEE@?0!O z!Cu6p)dSdHKrtJ{kfuLA7zm<3gN{?Xy!ZS^l)NS6J(XoXQ*i9*2tK=ChGM|0Rp^nE z)BjOtGX_qu-GLmt9V*6FZ%j+SnP)=|>d>XBAEH=bNVB&PjbQ~*yVgQnm3F+j?> z^dS09pEYWKB3|t_^v{wG?Hcx1ErtK4h&iD%4)r5UgyOUqHv#NLcuMO7I9%eff z1|>4=OXP#4(z@i!bm+d@;QTSi;q!MW-k)NX&r5ixvxH6;to!y^a~ zO8VLZCymG>x2wj%8yzoquFgK8)MOXd*q`F~CD7J~UAJkiddHOlSOosy1XfmOfr#=+ zPpnxw`G2eMzkaj|-Ba_!laBnw(Qgk$`RUN;r8T_5Q_S~=P_*|?A@jaF{XfQ_zd({Q zR0H>P{k4+%zNY>kLdx%l6;Yp!CnWCt@qyk)ap3>mN!Sn_nRH|;3Gw7NngCSd`mYgE zP8ndg8|QzshJNBd^FjNA{|~O2`)L7^p2FLWK6m|)`ORwDa}M1nHvLnS|JkVWNqIZ) zzXZSMvCj8j2j6ZqZ=LxFk%{_)+yJ$oaNVo#b48LN*40aY51F#p@fv9$%)Hk>rP~5r zXx(G}L%yw=!lFYod%m$$fAy{f9A&L+|DQ$9SA`LIsTlq(16ZLdyUIa34U53F?b{F|SS^QgN>pjul&UO4l zn)^AgMppal%KAtGA?eV+IA?q7dUYS2`lpl&w((=z_UC7;x43>IQF{~k?7yuNFTHOo zO2zzt>zLc_f1h%L6pH8}xE|kM$NFp^w*04j6A|a{AnZB*z>53eV&^_W_m4>}%$}~I zGM3=mPz$TjQ3h%yyFjkd@o%r7VCRfIeq1ZSjFZwDtl|H@K1H0|3lh^YT8+p1udZe# zq?bk^QQ3xzC7^;s>MlRPyE2jNWdUB88veIi2)HIyaR#FQ4`54tMGo4Q|qqC!O+6R?KR_B$W--6HS!`D)jVZLmgA(Z^Z2N; zOMX%-KUH*5E}-1fRa7C$)m6Y1WjE${_1TH1Wm!w<2?>N`6k(TZYjM(Hyk&iHEJT-V z(u)jte-T!Zs$cKhzZ$EM?_GHg2_H{AzD5sqx{|6^*nCJ^n+L$7E-0o}ie)Jkf7)@!}>MQ#6aMF=H;MWy;6PGwQ zpXZ@@4eWRRnQ*5(Q_1jK1PAy|V%7)B*{=>3p^+0XyzY7D!F`L)>9) zw(MK8Es-llaT0>V=j%B8KL+lJ5;q+>+S?M*tRaN5u`j`Ng5bl;!8i3 zVog2XWxGv-J~Yo0XdYc3HQ;!vPN;vR#*aH>Ijn>Ek;r^G>u$U4Dx)=e}*7ph9&tsA$sO4mqLT8IFj z)9=lA8M#iBv9}dz>R8@xE|%;o$frc|1~o7z9D{`I<}~UwPl_AEBW>DJD1|CE3oQOX z#+=RE`aY{S5q2CzhV;rV5nufX-kAV{_0FM@WUOntzkj)IrH$lbboMK+n1^tgnj(?2 z@Adq*2X^ed9Hs!Ky+o7krQ~QkvL3lVn!? zai{y^sq!Xw9m{54#pK|f3*LwEqYqwKv!l$e+Ys*XUC*xgF-}9c58_=j?4qM1E@%2w zXJNFxC6mIeE6KNlyff$+RmikWdXa`b+)j(986Uh*wAp!2;OOUL^L!ls4(YcJyZ%ih zQ5Rmm8Yj8%ILQfH;>*vmw)H+ov#g_mSqAD9Ay)2J;r$k7=#)I5xAn2l_nZ&4bv;7w zGx|OwffaJ;3++kmXbrV9F$YcxJBlUx(GM^w3fRX{E#tM0nU5r+zGm3EjQV}2yIxuE z${piphVC1l%ZQ9yYA_<+GF*T=7Vr8c=4*lZ+UXwR1M zl+ux#@%@K7AA+JokXn|4#P@Vsp1jSHj=JCEiay<_G*9hSIeV>|y!*0`Q>-5vVnmpP z^?P=h7!`OcbIGS1+AlGw&Y|X3H6r!Q{@sXVs7jxy0(?=WW1nebQ!h zTbqfFMA>CChi<^HS}Kq;;3clBddfv>DGuQ$33VF7T~f(c6yWc`8_v|@HO}k8(4)fm zz!>f58)4EtuHxTk)t>5(7^l3;YODNsQU94E-RtfHH-(+N+QWHbbzd)rA26ZQ-p1sY zGj)ur=h5Q0uL#$S$!)EctRL5|p@3*q3+Nv7%8_t5W#K6>DL%eg4M>{&kru{<`J{O|7njRYlI1ht0v5AY)g7 zIjn6}Hf|k}P#h9Lm+kG#7uFW1R(afE7x6m4@;d2L8RkZlFL`oKsA{;evY9qN_nvoz>M4AAf-qNMt`&OPdEL1E2(!8zC*kuh)cG7`PdJ`!r+Jl5OV$nl~?bCn50ZK#0yu6TYE&Gk0nIqR!CEYZ<*K3@_e3nXQ&r zEqIOYg!aW98WDPat!*`^9>dJ=;>|Pn*R+H$`s6=_>dwcUr1`*&yGOb`$bR^JA0m6@ zj?#U;cOaeJ1sFR{FCs>fp)<<<6>pyksnW+GKGqqm*_NQDXH<>$%h6T0PR@b>qyl>b zzJwC<9;WJQQo{DGGsPCk>HlNv#(dPPhn(mIQ2KaAM|s4xyuFy-?}zvK47vbXJhL2=E8)q zWoM|^+bVa8kn^!puWYy=ZAuZ7Zs}tWIZ2MxE-C2I8u{!1 z^Qw}aYx$KS5%YXs%@$F!N6G&7i@Uz{Ot!l`dIs-2#))G*y8$wD;>4txWV43?nAX8` z>vL`P_5~vc3#O(P@LRPrqo|WOWk7m2} zdYkKKtEzraorLSq7WZ!5GN7qgC2$R2b`g_iaBYUa0F$`#R{<>)II1KZT0(P+Dfq2oj ze#=fi<}anhXaaHP7z#049ea`Y!Sg|b!Q*Io16PRf_nsPWHSmCU{EsV{OqE6TE=833 zDmO3Vo$=1owwZ{SRVH|51mB<>dcl+2O`r555KH`&Ca25uB|z|Tc;WbV?U4e$Ym294 zJ4uMI!dBX?X2IX}l#EUpAmU5A?je7ewQTwgM!v0LR{&BrwuWy>RUoT(p?nTa4=g(r z>}R=fa>E?B-Q;c;2g(oqY)TYrlBlv15c{}e3b<=3I$9<6YuCWFRK*nJ(E2WtV-H%6 zp4LvRaN6rLJ)|=YyT%<&b;ZMNY8HP={&pl{GrpSBpSqOIIQ#f(tH94GSf`j1 zpS8_D!83^L?7LcgLgdpJ&04}Wyac;MA#Z6$iO6jA3qOc|7O|JqQBu|1dm8V8LqaW^ zg>)*vazX6Rd+r9lD-FR~m%C0Xv(JIBd~^-QCJAp{2;A z*-rvu!g(t*MgGU9vV_K`!*EKy*8)Yw3e~;4M2hj~QJ&b=npJucliQ`0ay{H7+Zt!@ zV5!YxH=t}<8wWT!zfp1tUM!MZCl_yD%BCDsI_Uw55L@JdWjH?`Xr;ZO+Wk6(R6*0L z5G1SM&Cit;O`Zw7gtCeW1A9dTRvM|SPJiAxO`YWk)rEC4%pzdC2^11he`;F4T3&*5 zS|IiC9OF>RJr;b{;JqDDEWDmB!@`jzn;1P$XTRz&trstwqrWrhUFLt-ndhy(zg(Og z=XyhlH}4>)18oMA=Qh^*wUdt%bJv{*Ace>!xw^oTxHYO1IP zgkE=Y=T6evU10GJ6X4p;#2m_Y?jB-X^S z`E4jJ?;WE@=ff^FvJDwau)Et(TB!xQR#1>4Ojba5vh|bEpY<hgMv2YU`@SR~nGj&wzHhz&23mN$pV zEl__m-Vm}DPHjD;#N3s=Vxa22!XXexZF}@UV>kj`5TpqJL1 z+}@&dAp)yMVcuPsyEqZz`8ccC|BZeM-v>f~dGtpHj6jk3ywk!-BEq2HbEI8kGL@Vc zsF{T7y|oSI@%adUvZXVa2{-ZZCrtJ6nwNF^nky(QyscXBv8=YCFbc^O8vL31^;n1M9Fty6k7`q&E+e-HG|0o&t~1*i|Ixn9f+HJG0G<0(9jqwcB*U`) zoFRJ9AO8k)DhJDkQu80Sa)4T1QZhxKTO3EPf7`K{XlS5Pa-`H)dceDhe0{g@H@Th? zv)0dVhhRE1gDMEx@W#kF6|LxW(QK4XC7H$%(ENxTO{m zNLbNJwOoR@oI5cL;X0USoNFMHdkq{aMqF0cb}x(^lfwB;(}j7Gp-Uf(Pt;9NXZgSi<8#~z z;MlhS)d4VX{sl z4v^ZO@^T!(isin)YqSI>uS$XbtaXd&Nb&KM{*~@jC8a`FWB)fH$1dSRqr$gJUXQ2; zg_gm){hy}h*q`k_zILU*5k|ll!6{8ao%4i2A0s`UBHbGJ&EX1fB~;>gvY*$`^|RZ( zN9NW11?K^7dx?LEbHb-cq-*5*PSo?`29dclG16x;D?lgga|1blU6n4#+3g^Y2tWPw z8tjL+y`tPM>)hTsk!-;YonB5M$4;r(L&3z)7URApoWEjR}qKmjU}2>^JUy_jXG*fXx^(_2V{!4O$O5ICiq1{BQ_}2%a2!5dA;WyFQ5%AJAhNkSN&nv1{0NYuc32>gYCk~bUw(ae7s&Vfe;KQCbZmL~g%51`mDJyj zDgfs(iYljAd|tQhLChLr#O9i1PygS5;~Oa8cNPd?j^{)oTIw%m2OxA}IDkU`bL2_x zaCnF5XTlHpzf@9v`rm+S*$hWqBkbP{B6|<{=RC>(KRslFg0Dy)(s&4%2>hSRep5W_ z$@R&z;I#dV^!8gMce#>BRvB+3OB!5b?5;uFSG%wbl)&Z#)C@L~uVJ=_*Nk)4RB}!+ zNY(&f?SFiXr?S<>6+Nx}{l(t5+zjU++?PwC%eO^18u1TgBzsh!W#==U53bHW=bcbc zsBi0~BXu2z&_jbVrROEOTrtN<=VP0U^amSb`36_ z4$YoD{x-5$-~GlDsB*@8%f`CptKVjwg-;rs3c+uzBl_kIW-fcJd3x6Hds;Mo+ye11 zNG_#N*|upoy|E3XqBWMkkw6p*A{z}?)JyOhp6jee!oA;Lk(^UEV5m>=qnA3WA4PvkuSk-zD8U#iO+x4gP=^A73|vh>rDFJ zt?)xsz>x(`sv|3Qfe$&QUc)MzRUzMI`0o3*Q&STh_>HIAw(`3ShH-pY`%kn92Qjue z_ryy{vjPTgQ(MMF-`qDo&DyB2Rl_cFDh7Hxsolu zw)PiU&rpJuxdHKK)5eMcvkcu6$3@BUO2c&9IqNT!`|EYJM8f*{izu9JuE|L!I%`Ab z#%*2^23S8Z{xR9*z442jXg0yn(upjOt4Ab5ntXhuVXgh6Z1u$J3qhhA7TxlO^HMc6 zpMeT&()3dM74At03}x7k6w9XcHlE!y{|l!vW}0%scH^ zDq1enuQeV%0s-@)xZ(nG&si4=FI~*uQdk58s?dCUjlZq)+xq;;XL0COyVw4UU#aC= zK5VA6nHAL%M>R=vtsFf#y~xB>zjmn_pci!6u)SX7@XS2bmr8T+z zw(t%h`?=V$(NE98F0nVCRA>99zS&%|Cd0{aU=9Nx#sS+!2S?izqzO1|5~))@^*D3r?9Nsvp) zCPw<#ZrM=Z>!w>*Y{RDdrPD30_|TL_<2@* z)v1>=KJzTy-R4j6L~B)?0VWr^|CnDNs!AmY# zU`9qp3|4Cr82&0hAP_XeMU^@I70rWeQGqmq{8aQ>s{8+P=&RyxD;w~{{_R`As1)3z up9TJuRgIuY!L`14@2vB;A0$vU$eONn{^MUq><$2b+E=b?JX2!htcvHN*8d|0-b}hKrb2 z!6a#%H?0tP*h=@jYQp_^W*e`-wv@V4EE751_le(CSwwV%m9)JPZ=?&!^oe)hwo`b* zk5lD^nw_z7&?TxXv$gHqv#o-6;kZrs928`TOa8CSfNK`Ff}#H-argNbvf}>;A7ilk z{|qyvYy0%?AQZXHq_BU)Sp%W+-xmsczXGWKeS;{uhvDC8534Zs!vA?eI<)Zri@(^- zJcAG_lZe1}*ysY+($=nKG`0O#cal(2xS_GJf}9*bhwTCHlYL?1p3)RO5BNa`Or3uX z;WZXO+I1}utWKkW6jH+?JfB*jScHb$?^mi5pFyk>5 z-=F^s7+POH95b3oy%@n2LxTbfeSaYU`cH+&Ih+t(el5@e<^)2U8Cq23v*q2ztvkz5 zdwnrR50`R3FGLeg>bVu;DNixn?4wBSqLFU_44{R;&|p(I?)*?*r%Jnm<6jiS`LF+Y zwV_4rmm$hHsN0@e*|Djm(U&@d`w3iCJae!He}d~C@;7A0E2fF7f^QyHT*JBc6}#VS zx!NobMXP0)lo4PFjvi>o1)erkJ+DH4JLi@5juqqV3@{A*NjDT}^jN&jhcv*>gAObj zZ?$yE)6nIQBZ1;Uj|n+FUTSt>;KxvDi)8n>rz@0NAhbR|NB{bd@tWuWFG$pT7clu*3c=8F$Xa7)90-N&VUtSw{X6-=}HG&>Xau zUY1#!&i4*=9Qt>4UQ5<5TATk+W*r>be8TvzrQ%RTH?a(~L%y;1Z$VGaE>2Co>EZyQ zcNy+$O>q{97}_Daa0x~&_2CZ|7w2=EXu8}mC=LV~J=&ahC_IHj_^*)~KmHXvX|J({NI@r^Q|; z2k>{OI$tZK(1@pFOpubHxi*%t2ZDk$MCdR&pZI-Tdxh?x9>o!#SzBlkLAL-qGQF^B zV{!8NaE!4os@*3-L28CR4HQ?(fNLKcmE2IEqk|Y^ka#}Ia8{}2<4Nb`LFpfBxkQex zi6XF}ut9%6A=Qqd6#63ea;BdtOA-Eo^kJSQ6cA--kx@k9#DWCJzh;Z;QG42QZCP*l3+&@y+`D2X@h+%CD@KY4HlTy>*z&UE zXwN?)tM4M>IW{9p%+(egx|&u`ATTm4n0E_53S$sp zQ+K*NmOk$JYpoGjBo4vw$^XSmw&kY4Toaxui=7od1&viLh}0oAL_too=@RUjAkUfp zyxZ^cb!b&%c-f}@8;SgeI5||a=?%U>*cz3)Gs35Wxx0TN{EQ)O+fUrZ>WC1D>$KA* z$~ONs=!7c0HUzFHUD=*^vFl* z$+t%}=0gx3js0aWTIC~{XR`2k?WAy*x38|;?cJRi54L<$tR?UXWj&KUe!6f;gPIbl z8~)Rrtya&=KFLP-;QNTvG0zWo{g|2vT;FrX(Nl@^_Y3!lthv<=LcFh6*Jlfs>wHo2+FV9V)p9f$qWLEe6@xTM^duM;wOgb55zUJR zbzJZz-bW>`ho>`sJ?UbNYV_q{*Y*26&UDLTZsGa0Mjg3y?yi;QJQ@&437S`$am9G$ zhm^~m?TvOm;Hx@)?Njpj4#SVHw2%~LJV=4T74&O*7sDP3@RB zhb{GY!hyP9(u|Em!LXAtXo%f%mI`feRbL*i_Al`>WQbjS*LQ9!zt4WXjVbWC!xD;1 zpfn497^(UPgU?i~woCgXTp?MGL_iPY1XRh-bJX8PD?+pI^SX$D# zLx>R74JB1!$$<-b7(^{I+wCKt?t?K~L8Q>UB(|C^e7%m!RM6szqs=wBxj$KHutEc? zs+EmgaIbKFzU@gI1sm!#t8TX+z=nlcS8nvWMe}eEyG{ki&HBFDEUwp_PPgD37@07> z%#CYosOe`~HA6$%H(*=Qt^dZk?&}4~QVy4slj$=nG+v$nI|E!TbN>P3>utzf+K#QZ zdJn~dlgRF{^O%_N16$w;tx`}EUgSs5xYuig9G>oc5}_OFaQf2Ajc3f|M0Zq~Zf6*G zDT?D^u;xwb9fd9Y8|?KIiTjT3MSy=~%L{wO^NPfc1(T6{=fsI#9C_7@i}Bbdo;D27 zLYrz*;1)kdpe5M^VJLe9`CexrDdB13q@?IAisTA7Ij^jJ&1YrC`{FfE`{w=y9Sb^^ zvu+YvZoQN=D7nmk<>C?4Y_9$zN!3wcBDZHKt-13z>Z?c-N~^gU4bBS+T-|87*8izF3~$u*mEo35HYaI(nVewE zpX{@CT&;E&aOgmpTtn+t}TN>>2}z2)e^s&-Xa=+agCt*ui4@x+p)7-(MD|{9dYk zBzk)~=9NEX3$B390<~7IZ9AVSz7xEMx1M)IM|f&YEhpG$%DG#gG0t;SE-loB{{GH? zIeF@DN?7Nm{NH1-bHg9e%h1(e_~_VBp*;bE#2Vrt=E+*cFOHJT=5eLbGUgjN9+hFS zRF~?Wac*Yt4%b|b5vo2NX;krWR-VaU9ow`nIpbEale0y zl*yHc7Vovu(1KSLYeodH$NY7TdsT` ze{ZCeSe2Vpc}$8!BA!b-8zgM_Re-9l<0dG^?}>(6#Xf}R!7P^5d_pZ_to`%!)+NZW zKi8G#AK=3~KC$)z_^n~ND)hQS{t)=<;CjGQJf%#LkkX{o$f)ARbp|BORdu?2u3ca1 z9yi@hm4Aj(;O*y`aHfv*%X^6>HH1?LI~UbcQF26Z^2avd_q?a%!4-vz1+485rLck7IJ6MacBY|S7fV*}AJz||NM5rCrNnJ|lFvN7+0#B~Ef!;s* ziPTHUNReEtJd4GSMM>ksKQ|>R(#60D`LhKX`ke zY)OPH^*8-?Zk=aKg2YF^9&V6E8z&8TSTw{n(!^f%yrZBo$EzZk^h_BCd8JEfE#8&r z0j7u_VkgW-B8Jb_k`N%io<=}c=krV>ZBdh6K)!%gL4LWbzEEG^L{(~=z=-%^>EaI% z_J|Tnv7){!GS?)q^M3c)JF_#GEJ=1DBoJc|tx75%)y3EH-?A=y6Py)QMT@mqXGeng z*>aonOAfCJTVv#o={e)6qYvk51phQY@fNY~#tqnA@4M}L#{QOPXhSrH z10x|pPd+HAtBre*USLa!W%m=*;UEq^1`YmajgXi%LT3x%Ng8{>mELvPP`=#iDr>}1 zKv1@SRZ@-vv=h)LD((7i>R?Be{g9qH-3webG|FJ>0s^6Sq2`?iwZ=pkE##p)99u10 z)*m~BHm*r#9Yfgf8$wEK&MR?f>|4a~rhDj29};&t7)16|xHOpCW{` zl#5!3dNOqOLQjJmc8!bgYbc1$+CPisdgaB}OnOr9=FIIxzJStDL&}(=N#oESzKSuT zMHjTFuCDOpidx*JjUo|@#!1-hi;?Z-7lNI^dSr|T$Al=1v{da)G_G(f!WI2FF&m3( zDb8;|bt05p!!^hv)46o|PAk3Cs>G18@L_QPq7u6Dl9T`ycgy{8XLmOqqb~k;MZpi6 zIk4(0p~$vtAs=^dG6_7eXNwAu6vZi#N`r!{B#hKr?sh;+0s`DnU$w`SQ<%gWwt+rJ zcgyJsoS1Bs1QN+QE+fe7{H*+>QrOuyRAr4RB2N)*F8k;e9X;;-4~jRBm^3aFl<317 zi5_ks+ab+ey74|~2pQSO4*ryVf?KS!AayCaV8ognY+4B1BY+VS#U*|>jQ*$}NW;2f zS0vX|op9;6@guHliFw-`Vcvaa)cx8Ya+HqI)_^+cncaxfQ0<9|OViFcj{5;4gI{mq zNl|Wc3gj{&HV*a*$_aTMV4U^|w6u{Mva<1rAB6a==BH)|!5$Y~p-l_1@q#k7oK!{p z#LU##u)Mp%!OLChY(c$>NZ=okZTfX|kz-rG`FMilVp|HQ<~Nr=yujE5k@cPGgNSQi zZXRt+Ljf#!kc|QWRJyd~egd1vtBG`~65@1pjE}m24>3SrSl24%3XayWQCVUZx<5Pf zRv$OXPQd;RyUFRK(t_$qD9ZGL`u}iDvs= z@anDL^f1URdGrHZb-pUnM4yq#)^lBNHTsMn9N--KI&nLm`Xzrr<6;);jZ0IJxex~o z+^>mBZW~=}g@4M|$7c1Pu@Xp{GfE`~!mCn<&etXzvu*NfV1}4TU8Z>kq-?I>cvOO1 z*@>r0RN1x%Vg|hp;j2=aN=E=Exia6picqn-y3_xRJT!!!Z;aF z=6!TH)o!qyyW3F7c(FWG9QFYv2 zaa(9+I+;)e)BA8EG|JNE){x6QJn1Ssn*;j!-D0o2t-thWAhoy^%k6K<6Z*2@#2kxC z6vbp*UA$ailBgY{MV;sSfFQCTp2Qffp9rpX)x~nm){pHtlAp9%kHx1)Xv* zvKb&<&as=l-%1dBI}6<|;W@Wl@q1luP3z2He5&YS{79v|9GNa3iGr!k+vTG+5HSKt z{Ol)f35`*-Hc+T~#iLTGydIK7sBr_qGJ)ckX1&Cov>Wc!JV#gy#w7i&5QY*9#_TzmQw_PW%nUwepQl`0*Zj4DYLK$H!f%zBaY9 z0xv9K!Hpc)W-g#>j1tSUi|Pg0g?X2I46VO4KMmYdvJ*R9ZXSE+zn3XLSJV_0(cRU- zX0o@GB?2qPvBA^DRVEBQ;EkkbV_X6Q;k#BF?@c}~x$SeX76-qMt{JUadH&+%G^R)5 zNtHEh4E@@?`dWiuZbd4}UbUA}n0_m;-y@A3{qn@zgeM4u?LirP~nCoe4K-*+q(ThYGGh4FN zCkc)Bfy&hP7xd5OII&or0f(xUyA1nDM#WzX%yk|Bwk`QT6GKVbxc3AvbXG7onw#{V z*#*4XA}2H;D>g?PU!jHbt_oQ+K#r;R!2C799k`1_OYqO?!9i#)#8mm+u}=L;w_BUZIUfGu;HA+_o12<_=| zu)uSmPyoD)o8GN)Ul=>W#X8~^D=tRBYF82T=u+J!m~Dz_;C{&JS9*;eZ=JPp8xWO*0hUc0g^QaF&R{06}y4a<;x ziWZ*G5e-NT^Zw;KY#?FWw*}^~#n$TW*G48!RTY^#Xl{0)zb`b>%<_^B6sq=fv0_~L zCbHP-Up3TpY}K^TlpWX&_cO{xSmA-F|-lX7;%ys_4D2@p9L< zDU7bQW7LfpkkqMmHke%>MpY7V0F~%`B)9np+$mnL+W}^mnYi0vm|z-6?j&T{+vAgq zvv)6|_W*Xnj^W@F;Bjwciq<&N*8+h%EWVk&su3yGuNyvPkv!c~-I?5%+AE&pm=#%x zGUS^WTNnf628@vy6xcCfczs6bCluM=Qi*k~w);53W??RI9R~Tx7eArL)dos%&h#V) zI{}XPg-y@yXrrhw(j3SCcx^|QAf4;T_tn5fb{FU@Hb>kt_;%X?Jpu>y*L$;rg||GF z)Gm_wy9oGg?3eDAnW3ppl^ULF)O#HlaB7T2%`nHHK=QXl+p#jAB1)KF>K`; zjArwrrN6Xxl&8vJAw4RMZEAkneAd?JfEYj(Xlwloi$YzKgVn)@zXio_E;#K2X&j@h z?Axuce)6fDP*wM0Fn&giFUS=7rt>oSVt8q8i758fm8)5z5YrRUNSPNI0D+K;H;I`qVkKHFo2;qS3o2?ms-ywH(Zu_e7URUd_<}5l| zMoOAq8`Om_@g=ycG^_n7+1Ue3bcmC5Ilr99(kfsR9lG6!&4&cbIfL;Q)3OfMs0bK# zw@7|}h8rqtiX0UdOrM_BlBOg@@(YW~N)yv_h3|hv$$r+Wj6dGz*jNEQD6TU!mC~gV zzu}LQXKPERyjVM~kX-9yyeCz1YxU*1C+_qQ%TURDB8%sbWYd2~_HE7&PEL$5<&TY% zTVT!#yL464-@^3actgADpBw+E4S|HJj2fonALIG+g{ELaGRB3!1E;CVXFEH(PyuBiZDq zxFqvsn-P2dyo%GLxcH7Q@903CZJrN^er*Xex5Ng5+vnI;=(gk<7dz@xwGGm#QggU? zjy9cO#5?NyybUJK9U#c_tuB2$roC?lygw3;*T1H>(?%(a4Q5nUxO~y0GU)#ix0j*z{(@1Q zvw+4&vL@Um*9`Ch06yy+6tl)bAjtltJ@N=}48Wx0?z&yqHrg*ny3919M`&@p$%2Cu zK%KnFbu&NkwsHt_$kY9;BfHc6|>}=%fF{QGHgoE#PtI8rD3B~EWuSEcz=dKM# zgk=gwB0sy$Dr=8x2}3r5NMTTq2B%hZjD{&I_KDitjWLD~zRagOL<&^}h~Bf97;Zz% z+oX*p??8<_hIM0oTuU}QH{91k&)fJyOf{RrG5P7&4Ho=Ym0gLkFsRu)oH4K}Ps|Q~ zGtDvU4bN-0s%}9qh6;!M?XMlCPPAMgK>7o>nxfwlB6--Mplk!~qP@V%q+h((Qegm4 z58-#bvc>c_mmlUpyijb&f`@OT3^(RxKmAPkY4F^4>~n~JM254H*1k$>D%!f-W~ZH@ z)OvnC3fdC@{=IKu$Jf3*2)rYsPgtgUZ_zgxT$KLuO^Jw;%CO7IM zBsm+H>jQ4x(6Tq|NDTLHJbF;;#YH{<&RbC?t|DU~qt{D$#!|BxDoFC%6hD7(H6x=j z>i`-tO10P5a2k zlMpBr2HrC@C@12CA;K|UPA8D4`_ZEGDigr*0Lo1|aXHBi6J}Rr3~qN;n0K#CBXycE zF6i;bR|}4Wlf1nWqdf^_lWf3(`vdi&iD5S1XU{KK>#8W&wwBOh2EoHJol!~FZ>8PI z_LME7qe?3KwZHch;Q*LaoiFylbgN>nos!jFDmX_L6V{vFkuOD*uksfVD%Bo;{&mWNQ6Mof^y_xexwF;lZNqco*{Gk{pNYU@bEMS0ycC1wu;qN!)9&%xU*GLY ze=I8n$^+RmDh6INTq6Irf?vw%+MdFCx_UKGsJ3klmzyX$fU@z9-T|l<9SCidaVJI| zdM`0Iyj#yc&t>%OzL@Cfj}H&HuP$nZp|SfE^6 z8TYDO2#3WKDHqa7|CA7x$+tv~sy08J!GJ{H2Y-sT@qb6?nc)4a6N zAsuJP#Ryy^z!-NG6JU8W;0nQ;je&+oS(vuA)~Ix*%8_*1DgJ{iW&Xp5fdl&p6bZ60 zeOb&%xZW7;A$q;Hwtn?)B;%g*)%70e-y^VVHpXwuY;AVBx`VB~Es*tnuhlvL=k+Vz z-+hh3=jdFOLq(+Xn*Br%k*@GV7Xo8W6^4%lTNW&8-U6?>{q(KO534o9rMwit-SD_| zrEgI1_jX)9Gg2HJLcTM)d2|hNj%&J;bSX>QHP~}BKvQcM|%r$9=9KVY&TX~YI>-<;}UgprPg@n?zoPlN)RiO(&Hw>KoC@i96flr z1;pq@ZpbeJV{qoU9qReA_3?ot%D8Wk;omDSdOqPS?6()AL*zQx8{zGkn10k9%wK=k ze`8*p+!?L4Z&NP+ON^S?r2Wf@isMM_maU&zp8q1o98TOhb}+ zr+NJmW_)h2r2m0m&ocUdUqv*%-urIUZp+e*UC0p1<^;r|p{@(xh;O1X%x7JpbK8UJ zol;wCvzI>Cm#sE|J6*=!IeE#`#hL~l$FJOBmp05-SAPatq>#7li&sZ(KA4l@%O9Xq z;+OE_R@MKYlWUzcdp1>9HS{7k1Z?g8{96Ss4*w4si&qScSm?#W6afw zTlnGZvpj*SBxjs#C~Gn_6EdZhTP=}vumKT@GZNVCW%9V5Ae% zz;_?EXn!;amf+*iAj2>l&Bf$fA<+BlVzfd{NmSCL(AaMqf?sscP`#CpPofX>p0=B-@6;FPMX@FzKJgKnYX@EJ4pTnc0xoB`~56*>dK*uNK zGjS&;j*Ry!g1xep5w*O&ZIlM@6B(vRBAOrdu@>6BrM^o&{!i3=SSGX0IR{W#ioQx* z$$$I^%8GudVYFI(N=(M#usxyV!*V5O;06W+^yGIsatt%Gno1p;8zv( zdaTZFcj<^9B_+4;$oRMPaNDxZ59vOU1cOyULw%U9wjE5j>5V z2#0*~CR>Q@Kwlj;Y*)@`ZJy}r*SxY4%iJI9dTPu%lm75xbdFoNlM4rbS$c=8{~_oN zr7<9NGZ!{#D@`1x_3!QRVYhPz&Ip8dJmwEuxeQxtOcJoPPi)t68@!w)qMk}DGt9;+&iH%AwYp4)bB_3q-N#utn-&q32b{k~*`^IU2nFSaZL1 z*Yos5XSixfSlD%>jv?s{_TGXD?;CV|9AJauzjrhkhDgr9yluvyJ>^POp(0b;dL6KZ zhVp?KI3FDf&vN(n;s>FpgAuN8eYyn)ex-aS75UHXPW}K1kN?Tb$TvCfN@D zNO)nH|17!Io!O^27gOnx#wY%$n}DUG_oVPxQ?)ZC%x1f_f9JL($U$Ad+uRm!aPh4l z^YM(0OjY_oYM2psV0Zl)vE8lQxPPWm<8fI&nX$~!i9M&E{WNe5SvNw8?Ie#bvgO7r zB>JR(@#<@f$ph3|xSW@8NGz-L^t^p+pbeQqxy%YG=+Z=@DkG(;$YHi-+RwBSB+FOmgHc~K1<=djPIn7LxJmMY(Z*^Ej?p0cjPRv-m;KP_IG>9 zDK&=j>yElL+L;42(b$3QH|)-+%?J7f?}-Q2e1siwMFNZvl85$i3XXNj?`XPK=?&@P{2?o zx4S04FE5lHkUd8hgU!6I{ISGCN91S!CM=>~i@k(b7$m+_-zL}vBCGoT5!smneAEf zcET$y1W5dAzBp9-fwBKhg|3bHzr%8NRCEI;Q6rBdg@fo}?fXz~^xp;WG7yd!eJD>H zhiKydU|@5&9id~#ebC~cT~IZ24-dw%F4<%J)gA--(3UQHvc@`9^(o7 z2w-7hHC1^2pOcD{qc_;CPxJ&MDvdr)re6H6uTKJpgkiN_teVyRAHK0B6$M2g_qx}0 zUFLHne5EyrI!PA%@KN0tW1xrKAd(EJH^C;1?QioDhKvUEmG4tvH6zl&{y&7YEA;+t zhp#1bmIT|*13~J(r~{7nna+NnyO;_PMt5t&i(I}wbK?TG5Xd~!z^ zUWQ%io(K`^DSgrUsT7mxw0P{uRQbqjE0P-LRGXl?pxvw8_O z(Tw!EN@ziZya;0&T*+*QPNAm@t~aqC=h_T*PPlQ!@Ya#syPWwWl`? zsrhLi{eX)DK9mI;l+|~!>oUK)XDdiWPFYUGE63bwwv?4j+_+wKz}Tyx^LU5ZM<4G$ z;!OF2^of9VFi0ij9wKvF4*-0P@g2_G(I>g`%Dm_rv@sR}C(| zQ_-wEnMm<%0Z7_zhohfGKmYBqe#p?FgR83^Q9mTP36|nU5s6PmNqY^Qi_X{XI8acK zA(S!SbiNzSPrtdhC~MDC8n5HaDC=KzMkf;6O=r`|g`dQtsYSquJOQVOR!{5|dZqkuN(onfKwjk=*cK{S`PHB5s}ZcBU%@ z`#{N)*$(&iy;R!|UlvSX?lDlStxX|ekABjY;Z9PmKSH=gv*iAAWny@Lg7vvx^qMdD zM0mg+B!r{ed+MgwD}l$HHb8+ze1sVh8;2gh$QI*{`sV+hSsNS}PU)&4&1jDK%A7W_ z>K1MAZ68-{hDxTZMM`)asISvE>KUradi6mz)W%`2(PnNq-k?rjx?0G1I2{G0)pjd? z)9HcM_YKMzbT$(4j{$l34LuD$&amhio9%kYJ|mlM3C3JBUvtnY*_yt-XtrIvd@`%h zpY-1|D|->hgABEwPCeB5d`lRDy>HY=b%Crg&9m0fsBt;->h)ZLe{?jO>h&tl+{_46 zh!Gefu+m;y;z^H}j`aWFyz#HlN1}xv<5}d!6IM>{5km zwD~rs|JRRUUe=g;=nyDz06ei`y@5ZgWF9r+tCY52B_?cG>U#Q;sW8QS$J*d$Pz$#6T7TW2N$k1r2^}hw#kvkqg-i%g- z%}8FaAv5Z$_3QZApk7@3URX+MPVXGk6tl|n-p3*+aXs3YVP|hF-xwd%HyXIZo>>CP zs#)_%UsqTobaF(aXVr$)xkIUmNVa9yvrHP?87p1%fb6aY?kHwk3K>iECbQ>9n=eBU zo1HC491~=ImYe0&KosUpKcfnEj;M>X(3IQV=5V($W5@tgle8~BGabqC zIxyL$(puzwj~VkR|LNjs=wzcb;KLG9lGba*0o=S->gXT&?NVl?*r7g&k^*t z>isn-=4u7<{(3P3maH`Bs=MELc%lpCYwDa3SNZBh@*`?Z=N+jowfsf|%wVagAV}#@Rg|(K=2h0#pcF*=ojwZhO6uRS-#J9 zX`2sl@`Axvwj25tcZY|vjZ5oTf2SGvO4I3K%+N|(;MsYGX(AOqEq>gcWxaUA$ns{v zTW=_03lx(7tjump4;gA3{HL_)2)n9?y8BFYis_tG^thGLlUtFa984o^Y3^i6#>xsW zR*e16&`jazg(?^YEfHT91I(G>J;~X2qp)xGJ{P1Sn;VH8+aj==*CKxl*^ZrHG zX+oNiC8II5yvbJIeaA$GvrvleyQWXulrqp+G4sLnmcnYp_ewuzVlzsD!F@k?{bFMu z_9F}oo}{dsx&ILzVhr$oU>62>z&K$u8*HxNjXhrDH2*e-*A%I340b=Co0{Kq$U9Wf z6l2*x0#0n621lg5k9FGb-}r~>mzIYrQrPXbPPUJ4xnZ+D56(7wd?Vg4I$3Zx8<12h zw+sx60$Q66D|L*H5;W9AuwO--?Ys+dW-P30_T{-{8x6byjg15XKI)C*1lR6Ik9;qz zL0g|>9T5*D*eiUuJL6WG0oYYgmNa?3nzeO}tX=FN<28W02CZnlw_A2R`|3Ym2W%WK>MLd9`MloScPiwdl4|& z+vj*2(g)m?e476Qw#HajqQ75US#CCZcWUkZjQVoOU_2D&1YS62tvhnBZ(YD`pxZP( zpg?*(54^liX{<7o!qe7!VHR#_^h1Kg#1IjkcK-5)u=cVK3otrlZV2hZAevMVe!+8_ zB<{Co5a~)hMw5-Fl=<&xMua?2J!Oceoqa8sYR9Z*r`t1?pEBK~Qo+O-DX<2{kYG6S zedYaf_O_J{)SB=c=pAgu;lhW~F?_V|(R4Gwma@%-7f}bFcYmO4i{!n2{$bF^dEzAiV179#hT2#cE4=cIA2Rlftlk?JVnP0%gAEf&(IzcP!Y z3k4IIpCn&&l4H}Ok0k0yk;MTTwY)OGlu6k=a=yX`B3DR}cu7H>6;6}44?x;kNgMZCd3(}Zt{?H=Mmuv~2hR}e4Ys4Af<+Z~6gPu-s1lUHE zDzS#JPe|eqCOB(L-r7MU&ix3EV?Tob-M0IGpnh#)HSJz_9E!0z6Rg$<&p$&F*waCb zQ=Q8epbpO2d?9i2d~F)u_|EfC(42tF=}21=hmYQ~cXG4qk(2V!RvoDbUg`1neG($x z-g3B4(my!Ll$RpG+B&FcRS%L}GCBNBZ;Y4dN8$ zZV!6mB3vCU3qmouE=-7J9?(N@A{4a0ck_LTla(pL342);6Yi<{=%_>u$pfslB&4@e zcz83yM@SH=oNHOjCg3nOE=z1W3_?R2S*q01rqtBe6ERfIlkHhlM>t}d4L{!sxap^& za2n1`fA9K9w>kl%2ZA~wJ4xQ~2eQ=<%rCFl1p}M(@>Eoq;^+`^aI8$$t4c-#tmJw0 zekehuAy0gP9bfj93AtiJ7Ko&rDRH@)6umj-m)4C0+r5=lypPV&(LNmz**N11#eak5 zHJr+&&-v-QGn;*LZw47+i5jLKTLg!>sqYK*8zW85miVc;T9qmc@6a3%mJTnKvhDX0C-hZ9=sS>Xr2vq#|k;gj^tbNCgl z$zZee&ldpbcu)bRk`^MOgfn|s%tSH31gg5$@$y7iQf{!-dL2((f6qC{m^vosmxVxJ z9ceQ~w<ezOi1vd!^zkkD&II zM){rlkFih65U;M8vgYc7S>?6YZsc%GL-_|a9q>`3V+ zh0FfRv2GzI4M{J{%s7p@$kG_`+K$Awm=cPCn6j6l{%aJJh+M>L-Ch61uMCQRbAH2DK| zXz~JvKy6i?8T_3rG2I)*C>L_+luMifxJ6x(uEG)lJ`VpJGP|z@{*#3W=^jXWi?gEI zo$gD%Qed8Lm@{vSIYWi z{*3l$E~P-WXU49tI(Uz^hwXS>-eoZwxB$Hx6exME{&1rIk8O5 zL585EvNWHSV4khx-e$z#oqrKR$kxK{P*UI8%Q^3$&`rL9rUr9$u=-&ehCJMD-M~+3kab)wuEM~EzM=mT=1^lU~~@LWTHXRF06#1MNsER zSxTpr*tJS}bX(867h6_$XLAI!@fCXLypzFU%Hsq9k@FLo>lmwjQe>+eTO;(*L$BNXmqGqAkTZX;q+*_Z5U#QkA`9$yhoZnVk;;=DnRAL| zXm3%(@92=!B!NY6NVCl{hjFLsEf5bnQv{qUNr=1IZC*k4%%`j182^i~Z;Z|?3bO6E zW81cE+fF*RZFkHsw$({GwmPm4^Y8t=>#lpwTDMM}s$I2r<>`?pJ<=;@7Oi1}$0m_g#FyJbgFQDJB$)gsw;Ajoe5}-&FVdg;OJpQW zUysG7VbI*H)aklYK$oRkSNi0tm4WsG(l(cS@D2&2!LIWpj{nYkzQf2pYj}O=p60sX z&U@F;AIF#Hd0tIuGf zhgGx+MeVqS!eVzK8NInNJew+yu}0Hg790YSNF+R-(r{GKn|bKK>Xp(YWDCz$zG*ps zxY2dFbA{UDB0Ec{8J-@0D!hvRz;}Iugw8>?L-~;!xCNE7`9sgu4Qdty7d4v9S#o+W zkdfZ-V_Czc>{5HnTbkU$lwdm>M><)jjphhm_J5L}IUx@>$Qn9SHcsSz45#@{ZZh?s zDh(3M#L}cH>4fQuqa4CFGb-hcS#c&1_Zpzf2 zCbuK>+<^pe#uOOw9M&ANM{;H=iXryMAHwmi)l2p%;WC9*A%Uk}5WJa?brjW2< z13csBs~j9R#enqw!Yom^D92fLU(k7H(tfY1ADROFz>Trsj~CYgu_PA$tar~)RhyA; z&^lAShKRw{6EXn7_~(V&0=Rs;ZE!@Hr*kR2(Ny+o4E6yzf?(jhFf*#Gr?RmmGq6h$ z70W%w@8V`)0Kv>(8C=>PbsWj^5-p7G9qtJyd_`kc!r7cb6?l+{z2COlZr?84H?c#Kme4H1I${f(ZhT zATD|Zb6Vg(=fO1Yi6x(M;S5t=0v|Eq$o_*?0l_{E__cr2|3ycdI-5#Nv7sLsH{w=x;#LqefQ-2 z0QrRd7z)=+2g6xvBdwCDEGG%9>&Jme6o$womc#kQjC-`*T{o4}TvAFchh?0h0_&5Z1ZyKrB1A{f2%PWTpMyP=#db#giRX4z?T&kF*=phJIu zD?D$b)dGlwRkOD+-sEN^f5NIF8e;=f-DrA9ZNd00osZ0Lv+m}4)-h7Q7uTm+ynVw% z+yRdc0v_b?JiO!x#NG*P!!8A0qsfh9*F9`m>sk_mqy}QM)lI#;4|1=sq(&k)PL&t= zZROLzuEU`;POVJ~1mOO^Jts1hR&aSj5aQ*(@LmPX_C)xdcEg_E`a4{MTm}3MOz-9} zybFBuYn=wp1&0$BzRPkoBYt)L&$;~uEp(H|^+5jD2g#({v9LS-*BjD_kaYjw2bC3k zM*sfX_~y2g0QBIQkX^DH{e9XUqm4wC{xeI2f(5^2A^O3`+c%mL1QeQKkYQTeu0c&O zHxZd^e_|1~p7c-%DGQ_K8zT6CJOm#%GwpKVBMraR(3GXW{Ac93MAJK$DIP^mn(Yi<^}-%x-w zEAG!cE(uvai|GCiosZaPvD6jrWR_)QQ)>%)Sx3L^61)X0xJj-g^<!wvB`lR^se)^t}-w;l~H-MoNb?|W@t+`Wfku-WLaVk08gT5YXKbZK0+1TibC4+b9l8IC!ys} znP~H1eq9QGd0!zTVPj^RVh2tBH2028y*@JUy>Hv6Cdd>~>fS(45^#q3sW_XU+BNEdDM1=?SGyBMDs)m=cqs&rizw+dtT!JKd1pBC z7@$3}lR_p97PJRibchAG`i#FyPWNmw(q;AMAUy*7VS>>edy8Q~*@49e9&dfvYPFi8vIa3rK&lyxS-)dL8%z*>MsOj7<<`@ik5+yJ)BSZ1Ml>u1IFakwc zpGoSKTgb-m_q)Yr1Nq|!=ji>1Fv<<5PnEA9s+Gr5hUdV%-6iadnCO<9EX?PsawNU( zL^FrZUPOHc%DyT+GA1)49sLj$p|RpDZRZa*jF@Q060O}Bjv3v~dymVVP)Yy3sI6JF zO@B&*mjx_iI3)(R`zqJax;i`5ekP%-(rqT_3=T{L9hg^8;#2)k{6(m-vbP0PUpsvo zQIve3bFK;abI{vrlPz`k`=G=l;M1bsq8$qsoYADII4;A^NSnfYMseo!k3ox|<3Yj+ zqLJ&vEM~jNwEeCXCi3Q)*KXwYZ7G2G_2`q8^H-2qw#&c!o21@vKMaY`ubA&77|xMf z-1#pgEXw;fi@nQrTglm2@8?G+zAv$mC5ZKw_86~2_2EMzq{8EplG@C$D?W)X2X*xi z^usr_e|OGUQ-i;wtt_h z_xWl-kkWjFpuX%~!N&r9_P9J^9LX%`B6wh=S+le66@$#b4yGoZ=9~ae7$V2E&H=d( zvb&)}Rz7ud%j``XBqF(xIq|Ool}Ed^-qY++A5ISFTD;rP;Ue6=iL2s%SpFK7l;Y5a;pI%Tw}dO^?R0-MJ^< z9Fa2IkiA|L8&950?m55g#4xPHdesa*GYV|S-s~UtJeJj~Q}sZ7b5U6~y$=rY0?Upy zDBw)|rvwbur@J+W;IvD(Z(^zJyBH9W!eB#Q``k-BxThmX=)EaL#56QJK%Gk_?LhaY-e+ncN;CaUgmY=TqR>cbM-fmm1fk+ z(fQ4KtcH4L;2^R%l#?G=Y7G_zyLdrPArLvxk#O)w4EYQ_-2!nF9cG2+dEK)5m*lDr zRGFP!unlZ0FMXotg<2cKhVrafCbF2Pn%8F+juwT8a%6@hXEb5vK;J~P9TtgFTLwJ! zO&MdgY5yZ|MWgF?@1WI06v$miY?zXe`m`R$r<%XQok$!1v<#PB-dL}fKRUQ2PT8)r zD=HA@_;C+#jf{;QIDFW5;a&o;8uO9#%ga$^$fj8MtI1_>92(>(;xW=NwKr#q|vXy`4z{%9B!V^#=7W7LAfOXp+Fv@L5PrB+qI`|tK%(^ ze!@IajU$UEx%6C55ml=%v!~e4tI><|3cm>A6XpS*sk0txq8K7Jd!SHoZ=@lp(=1IN zOxy@dudBFGOyA)G*+HA3h#-`47bsm&HbMI0eQP3MgJ7LaiH~ zq$H77d}6YC@Nd5?5|MEgI07EUH9`KgBsRDACpVJqMJiougHU>P+|R;LeqCvOagFPH z@0Vwj<1F*l_=%7SQVd~)%Qk;#^!89F?k}ej$3lBH6g*C#q1Vt z1`x@J;hnU6g*a^LOfZDbest;)?QvaEX8_F7kA>&8p9c}PePII& z%gdr(x9*b6Opb{`DSoPpE~-skNN~}@gTKPbp`oew|ACnyo>^85=y9}vh8O(ovJY|x z2icTRo%SOg|4y_iQtfz2`=`s(3d_ncxg35G=lG*4p{dCmKAi1_DuRnpSu)7yIzWL3 z+MOJKGPHXqIf=sr5t?6S7oh&sO8<$r7+Rul3Z7(V5(?)H4~qt`{%z+>{q@Z7N%3a6 z4MMR>Xd&eV)W9^_9v0{a-1Jl-Co2U*c1y!w7KfwgH09;lqw*GkX3r;Q52!Qrz-Ljv z`^Wp4vq%b4{Z|o!x$QVOed$EDo%Ar_z3T*13CY5==d8N+gTA1Rao1R3pTBssI)98#*Yzb4`?5bN$ObyUnC^b+}bn952g3zk8A`*i?me7v2_@X}O)jJmSr4lMazD7wu(jV;~tDzl9*fM*? z`?0gYGvS55W5WS-Z0XMp?Q~p@Ik)1VO*3MQN!OwX7l-^17(Yn_B~AAr@55gu)0=XG z`l?5(FJ;h5=R~G%`P3UU1(n6 zzv(qjaB$J7$@U{>eclJt*}l<=k~70-S;qMvuHRJ?#)Zj7VPs1h&naGvzPB(qV7kJU z-TF`YeCnwYaeUz4a_6PDTmgc0uh)Ry4V*r0>hRZ_~_Z0CY zelL!%4zBQ;g_c3shJG)D?CzYeoqiOYVtJ#-r*3(Vfh1QxulP(4 z&W0!0eW@PVQ%O(XIYCJH4P*M)!`+SBx){6*eoXOY(}PQKuTr zknn|`yQOV*pT72T;rjhn)8(+Bb^yHR5B~ReJH##Syu(Yz?Wu{f>#<=_wxT4ZkM;Lw zgFJHpPjuvyZz|ztvdr7**Fk{(%19Qk0*Z>;hEBi;qDM{YBi(gIAqcJ9r6< z`$*wik4~lkhxQiz-_rI?!1$kh3sWW6i;s;)L*^C>*jITA*O-h0V6%YZ>|usoMp&ifk5 z*H0hRYIbkqtQ4{aB<8IW+{?)CN9`^!(xA{skt{)HxVCT^L z$QKjOho?5bO{{VJO74w`4Xbt()OHbm`%JO@*blfKpX|^0+8oA8+EDnIGq`DMg6?p9$s;Gko$wLGckqqVB&O^?ze!IjPZtoG014y-~jn%Q8f>o@V2HX|1T4 z-t& zGrYf7?Y{M}rKR0BU1OK)ICQVhNfp;XGYkvH-MxU=xfx1I5KJQHR46V~H!9s7JU@n{ zU0dyQ4@$5{udMz^zSN$6O*Cn2vDOL;MaP#m?RAt;=#D(Q;~V(FPfR&e-1f%Zeu>^( zQL1jYq)(;XI z?5ljIiA?4UCvGRQXYda{Ki4a*F_-TKCFe<__E18zr>p11fUbe48(6AzUw%%+r!LBC zI(Q@)Dq=zFegqDD-l@9Qwux-^aODQn^!p0>%9Yk|KM0+_863f`uxxjJ64GlFsaD2? zT^2Z)KQhCmronF^Et1mIMC5%a`AejcxCh^?DUhggseEUrBI2}`L!0ZZ`0G;DD-8A& z*Ehi5BviDJM7@tPkbw-G*>u{y)h%CrW1?oZ>pBX0qDbA_ZRQE_Bcov)I3AZprhOs= ztu5(dX{<1VEF$;p1cfCV(KTf`xleqqthJ(5*=0OpZK;aCN@IKaEV-p#K7;WDKu=B* zTGwd)+QKW*L!vT|V-x==6Y^n~#^8$fgp-BL`9qi@d zW!qmd2`X^g9u8)nxH(6W4k|wFRNgW{Bi_|aJ4Dtw$24p?@N}g7Y0+1G|6_k zB4surKUYQ!hn*UT`7^uxpPdmjqWOWNMBG@3$FQ{f)uwn;02`?<}#?7C|!~z-vYhv z5Ce8X&3LIRF8VLr5_sxUB<_qBLa1Y+K>bGOe^V-%z|b}zQ)~>(R%;A^P387# zAkw3xSU&j)`+gp*0aHqIe!IF(F!@-G$ycT2_w-8+e!*!PR|VAwBK|~k!T$_@?#H># z^LQcL4WWG(EC5W|v)X|rqH1(s)QUAYeZn5`g(DQF+rF`8KAFs}xU|e^_sDlvm3ET< z90Ww`eLa6dp|b_fxg@UD11f#r;5jNi0T+w@nLfgIWm*}*RJrS7^Fcbb6o3-Tc%bVR zdQoY{8oT0cS{jO!rLD#30vV6N2fV{oS!w685I}*#dc@Y+CX@L}ZzNfHv=!k0DwB4b zCU{{s&n#?SkNM}_O@HfPSk=Ck%fA{}XYC-v}Hl(xDCw4g9QPD*RsY6sNQ68@A zo1GBmnxD8M28T}`Wd4;FYh$Aumw;{jz7`Q^^!*ZtP=m5NB-6FfA{D`417}Dg6^{2u zc6pi^_@h`JQFVFY`RYWa2>Amy!~$iVs*~mpN!2*br=>HWItHCR;AROR_Wcx6!*YeZ zl^M826C>szx^|;8nCg-fKXkY{p5z}nVo0c$MCY{qEIA>EV+l+@9x0MTLgjF?6rC8f z!UC7PlHqH}c)^RU>e{SX&rZ$D1$0 zt$KT>4>)AjtOn~0A)ZpD*Ope3kf24B&cdzRn^tcIq=z_f*{Y9&vHOaK-Z9n7Zd!m%>3WfRlpEB;st zsk-o+{UQJ917i~9LNx+SNe>aU#^ekG#memgu{hkK?0pX+fku&p;$)9qbwNqJ*#I_< zHCaaN1ve>}^t@mcTxEDGi+mOtdLc3lvKD=d zweWh2`!3qkzDh-mlMqXiN+V5)RnC7bq4H@u$CI}34So5$;nWFGX40d<)3f9j!{v;5 zdMlp2J?p>c zGA|vip%C!#jiG>ce&C<4b!FsUnnvBiVDk@z{zbHSz9)00^=SB8nyklbxa6u-)E9UR z>x{As&CoGcVTOILs_-$3y3i!KpPQu^HY|?D0^D4bDZ^XErOioRxJu0#B9uw5@zO|Ej! zdG#MS zUjHH0th61#_&ufE4M79D8`gisB0~}S8V47S_|Tb7&cU% ze+c8}kbmA)|0v?(GIP>;_ZxZFH2?yQ^rx2ullz<{#<^FhC^=)T?;CJbF^ZfO3=ZGo zNCXIJ{b*+-u1zvFz>Q`>$?~)Ib$!O;GbXP~X)G+3c%tKspz9?iD6ns9yO z%K!GN<9f;Z(N^lfgB9bZMwRIG{Kx?|d88mFBY-gP^HfxqmkyMX18VyfWIEu>hi`pm z;NRIJlaCg`^7JIh+0oVQb4Sa|VfQvo`dy{*r`glLM7I}7dztZamp4vq zo=#W~$;!6K9W-O_1UB51{2!)1Xz%Q#zLDlSyXa@+q!C6bvXVQbb$5=rb&I0EQ&dd0 zmh1l_PuDzyq~|l3goiJh4^Jrw!GsA*{IkPof^%D;O)=0}DHyVSAA`MTQX7m_M!1qD z44eY>HOK0f34qg!6zWydaJU|n2L5~M`UZ8ehiA<Kt508{22X-L?AxAM zf37Zft2FhGH1pbH&lkuP)ChK0a{aQ=42h6hl@>8X3e5Q40(77;HU^h-b;iG?OYa`r z(_RJz0lPzm`;8Bpw?NI7`IVJ8O^}9)jHBhQ;b=3;m91nki6M5r=k0)_HqPZ*<9>I2 zuM2YjR{#_iHooHf=%L!Ve*)$9DH&4Z^q9?|Z#;1Ti6})tV$H|9yuMCbuDVX@-Lt0s z?%IF`T2ols)<$2~hn*)HQmVp1@AmDwV0SO#GVI>a=9s4cjm~F>E&BM9?cpSPh4v$m z@NT4Vm#mr5VtI`4wnERbaC&rfQ2VOttw?%Yd!&E+o7}RkKYeOf@p2K@Jz#g@Hz2-L z@7#}|QNtfgNfTI{+*}J1J zqXE0tku*Y}+vAvbw>C1{FfxWMV`9U5=5Zm6c+$$q(yjP2&{2E`prrI8&;3X-8PXnp zZT;!GG~f$ky6Y1moK4vwSRyOUT(gp9zw)v|F+f1CLWD5 z=Iqid=F9&y?fpE~_7)Y~5Avr`FxS*)qKq{n1UB0{4}s_FSL@xYvZ=U;!?&>eNMR`7 z>n7uMQ;oi&vqyYb6>pi1)t~5Y^R@Dy%j?o*)wrp5zC&}fq98=sEi!?kZ!Joy%97@f zx&)t(Ep7g%QY`2|xEfFmH4s>VH+X`#CCvCMqYjtkDg5UX};jh#NDdlwNg9CVzm64NY_!X`Ctf3Nn3o?1n z(BA4OFg$w3KjaLF*dCihGZUu9zq>vKWSVOVE7*fhq6rRmhY8GoaXCU57VV7YOcp5$ zOcg~RCFutQJ@7uE%mL;vCYtT&NTufb-ZI>uIwx>Z0_{Z@gL+9Rn66T_r=*04mHMRD z?fU!Ru(3+uS5_n<3}5@U4_(dGegON{i&?J;`eP;RiE^zdh7NQgh4=3 ze%qlK{M!@WADef1xN)gsB2y)&1Qa_kU2)Nobf&PnZkp0lM%qI=5AJ zwq^DDtJd)1vy#NLL?KWlz6v;c#=J)9{fz5|PCQR1_O~z#mcL~YT-m+?_HS7D@aX4% z)g!Z5Gdg0_5~pbPD{(+D++VS7p@7T_EwPD{K33VNlKRGEQJ_3kYPOrh%!&lFCc`YV zCMp2>QVKshIw48Kz{A)9^xeVXKifaD33pTiQ&CfrtG8ucBuVxOy_0#b+A_rV>!qTd z^*K?@k#JAQse6ww6}yHm`QNDVog$jCO{DrVVofvr)zb3b$>UgTcKIlPKQ|5%GMSRB z7?YKj=Y$k}=~xB*2$v@bC(>Q7nL=89%vnt)H8Pv?iqE9zhatXuo|Sq|q1aK}ZcXUg zKkY9wc_LgPY*nP%zgQbxSMgq*xKqYkRJw}OkzWKVw|HchuZpWR$gkSpS}#};o!1*h zoKes%GVS`LP>MQz=Pj-$Y77j`#L0a)E)NeXu?NK4vnef_0d}Dg8BS2D_HW=V6F4G? z%O~j*+1yE8V;3DCr%pWo-k?L$*y`!Z);=i05wgiBzK5W^e02@t&!dcReMk=rYhc8^ z*Mu(+^7r1!R%mrq#o$JVsiOInjGKhM-T*oxcRl=L*MR^trH-U-Qu7VAg{;!r_Y9SG zZ|{>USfU^7G?`o;Fw{=^YC3@6Y?I^g?atg{W|DU zTQd_qH0$;@F}$PAnXgdu4wrDvSy%*N@ASP-9VuItx6uoFV=%(gu)sHn(` z?~Z|2^i83O1FUl>FfJIu!pAWRUESayRM2!b!MnP-%}bu2e0Llrr5BUkh8-dAJ4td5)yYKgJa1v)))&%+ApffOuN}I+~kwrUBX@ZSpjpS1=*Bt}$>a6$e zW9bNF_gAnAe~5>a@p#6c`Vq4|;ZaP+P*TrYiF%iXzLNTBk@Sr6*IduFjII18r0w{X z4-ldPt*J>1>wI9-l3tOtv0{yumJ|)K;M3ATC>oA4eJ=ClgSkKX{ezx5CFGs2p88K7 zD`P4hE1vx5c(woo_1)LZ~e zWaxfI-qzsO;(FPtclJ^g4o(U)SJJyJ-F)b&jK%#PH5vvqpHQCFUM${F{DD+G={^?@ zXIR@ZVhIzv8tQv_BrRjGZC?0*zo3MoU}rYYii1%GPC0EfGpArr%ni3GwMAmKB*n%^ zt+Zr%W?gi9STLT=MG^V4sitsxDjoqvIs_+lSlX(QghH z^t-X8rOaE(6Juh6;;v(?nDYhKWc06Oh>l+KT)lm*{<~u0E~mYD+tyLfF>j{?&c;X- zN#h*OQWgCGg$5xp399Qg>@dV#x4Eib-daAJ^zZzqU(+y&BFB_&2)A-TM+$wI?Gjrw zI$zL!`uSN#U`2)oJtvhteRn)d>ZZAPajA2%&<3kOlOMN*34)~j+kYM`Rq!!VJ0E3b12srSgTsM}OnYG~6-ps1Ky#O2S zw8sRU7|6sui|!bUpZ zOw4Ur6h#7dTP3j6z=Rw{ZEdiAN;%W>!!&27(760Fcv?jt+8IoCOK2H=@(V3R23CGMuwJHcR3Km(S6C;$_s#1Xvt&&q+rT7uJ z*w1}!_oE7X>rJ74P`s9X6^D;EvY z%*k`Xl_3Es_-H7=kVA%;$kwkzV!f-P9B^|9Xz?P!ez#=^1!^K|u$zz}<*j0Nr*FZ8 zS5D`bc&0o3%)vhNBrJ}`aU{&Av03bfciR(BTau^tH$g^rmr@%(0 zl5L05fg*CRAXB7AC<9d4V9c`RsIxnhNxf(bEH`G#)T}kxhtz06W2ti@;$B5sKh9>V z-9aKF_4xsxW|nyO%)(KQFZB!-v`fj*xI2(FC{ql?Spa!1YJ#I)s=r@qc> zi3M&Z0sENBJ+W<^$l8>e07j2eZK{{U4M|1V^}BDQG3(LqZ50fyFQGw}AR3f&SMQyw zTcpi!Mx?SRqvXSiOH@)R7nO+6AvIeRmOEYvvd)mc>F^|Z(rRz#vh!R)r0EZn;|x!b z$|9OM`SqL1hbk`D0TT5$gz=|!qO@b!;>KD(u!vnx1O3k* zuLTK>dW&TR_hH@kA7GfZj&26lw6|3Bzb!o;e?#)3iHO%zgFP0WrQRZuzsIHCR*T5rH zU5&`Ai2a)cyZJTAj?EqwgdES_ipwhNs?H4bL!Qz!70czJ*yg#lgg8b$WWkh7MShYG z2Bg?z7Q^=+EZcd5eQnWyad|SL86SF=+A6nN!{rlT#u)H~t2m%-9M$25tqQ!lDUjtU z8_Gf|Gl`a*7$Z8Lz+W+NczxXgh>q8TJ(=WR* z!37%u(v+@mN$IXO#Fr_l15b5Wp{QPWGe)Ohun9F?+mF zT;l6T3PWXSR2e-Ckp*T(!ZF??oykt3xn`GeOOMc2m^t=iZDh!8J{C%;Dy~f z(L5X#ZCXQb?W-KK7o7Po>-C8Ev*nGX1>sD&mLYgY>=)UY6_at7q}uD#B9SX7bm zbTxO&-E}z{Y|=zEsY3w$I*xcx!A+zp?7IkGEg%Ck-n_h=&KSRi2i4}Wf3V;|aV zvmX^U)U#IR(TmVWj{W7^TB}_wVO~YYiz#H{i9vuM5M5K~=Nt8r5bN~WzX28K=>op| zq|$4>@*;CV7cQ9f7l}B(Ak{qsgBNskd1H~sN~WuxZV;Cd4CUJ5rdr z`((Va$wcttnu&4#_Hf>w`TCp^zBoBEH*CFv)j0s~?!K}mG7OB|EshF%7q=>Zj|u%< zxH$#uScWqz%#ne)B|XU0$EXEf7lTPE!I)u%@4=Nizt69Us46HML^~FzXV0B=iR9q0BW|8|zl*U>RF0R@c`M&SJq;+>w1_xL?j@?KhE zv8%&&s`+qcXSU#IeT$oo&I#T6P#+wam1bLXn=E`R!PKF6X^h%8Q%xa+VOWPci1!D25Lgqur6Z46Hi6ISV_vjy{-c|!rtQn5e+(>$))IWY}}Q>xm6oW z98b)T*ED6sfdiPU7^myqrzf-L%xVc;5o9H_b`YBfqcV@vJSA{pN2?LUcGK{xHdE0i%rM2>W$>+Bp2OlGj!(1Er)u;hnm&9Q(oH~+#OB_w(CVF z2sJYiwYT3Q&NA<&bOwsUsVS8JeL15{&35`!oS|}GBvUB8H_isf@Hj1HYOe$&Zco2e zH$0{F<0uZ7TJ)HRr|Ui@^mbZ>^|3bFXmKk*I^_r&oA-e_w&mCeJzRXszg$maZk80n@-ag7U-0nlw0wBY{=dZnWn-Vz;46A zXxMv+oqV1%J~TOrCr3DuT(>CZi*ahIX^xYheLn{|q)DmW>IuERj8RwTi+`ulsKnM8 zI94wZ^81+DU*cxg3bRs(L)}DD>3vQ@gDz`)Pq2HeoOr$r)`xYOJiEU;98``FOKkOa z?<(VEt*E1|K7At!cP4g-EQT>%fs8eFwlVMnpQB2sZq+0`7bJBq{U+ypgU}>ziZoqE z#EM69(a^Co(TZ@KQXPvXw&JPIOp{X2ZS|S8fcNhJVk5yuZ{|x*Yuzjw#-D_fry?~- zY;K0G=E=t9#(KiC#*Q_Ca2dsnC^mPO{J#KvJ!G|QXBif_xo4(8ElkFu{OrB1sK)!? z0n(RbK+cHzUyp36#chQTZVf;T;_$z~B-oWLX=(t=FRhm;lGN!{z?8M=h#4o7-7lV$ z;nrKbDk;+I&!ma9rYLS%4ds8vWTH^N2IA<{A{2(C2k`MG2t@rupRXIi#;%c1d{8y@ z+hafe>Gi~6j#T9L{Eo1OK#<(!qcESsycr)3qp zrkj_jM)B^jhMU#O(-uQ>E<+1~C#%#_PJ+_8mp z#%WS3wTAlK^jweP%x|w{AfKR-`GdEcp3B(AYHLAHic4vOVCc3Z)08|#OZOjlh5l3s z{n2DT3G&we)fh5JyS>*b*j#Ua!|-dol+}NP3bND-(c_;aBxJBQ9G05=b*Ffx|C6|W zN5GFZPWY0#88W%2>vOKRmageOa$N1@MDbtSv%38C>Dl*jyUKZxYAC+SC`N<=M1~@| z*7~_l{~3}SZxz`{9?k`5L4a)=^u4)k8%_0HOlad$VxLZv1H3Gg_Df0$<^LJR%U*=c z-e-MKWo4x@S-7({{WEWiHnaD}`9ZKD{4MHONZh5gNO$kO zeu;p~6cL>?)}YrL%EY|fKZ$hH+WYoTe>aZN@c}^tHdvwzmJk9Lk1$z?A zVA7{XNFo-V!lNE&%%3e-=To()anNhQ-1S^&ja6w!WT3 z9c=22G=Bkyk^~-QTLy#!y`iXfNFX3X3nQNhBX6?(&s|0fpBzbd=G;3Gx0Y5f%j+_f zbbtl44aS7YQY*2kCU`_KwpN&jXsV@+@$l<%Mz<;I*@i94DJ``I266sbBqTC#ZospWAyay! z7x`I|(J(LVl4DKCkC`8{ zKKb=upZv6P3`)-ujTSJ%Bi-HRI&R5xpI=Bjczoa$Hl-vC*n<2+SHXX`G73pQ7}m2s zHUuoHY^|Fb@%(o$K)|j?hoCRcVF6Mk{hjvpn#;StLXaukTwL`@3Hz_$vlXnWaqWiY zAc);wQz({Ecv=}K1G$gd3)9J*$wa8`IQ)(@EubYuS~0RLPx`01JHsn}fd9MIWdQt~ z!zW|Zn2c5O&LX!sH7e(p!tj)OrFMp>MrL3R-|VR3J`OSHNe0@%AHt~__g*6Dm)h}T z&4#Sdt0|MMV4qdftYnTQWj##=oS77FDPa4KVzd(L5u~+#bp2&ji|1Vz!(KwoE=Q^g z4nq74bM}C_M)#|UzsuL#`yU%N_@`u6J1ycR$qCgb8CtA(OA0STWLS*@)T{Zp4J90G z;s;`u(LqV#|A>BSfImLUB~*A_sb?V=Z{EM)4EJwkPHXU_`+qPcmin92;PY(n%=tXo;Nz2WYF<#_-e+r-h!>kO z+wkniTjOcD+2=gEJJ>WZUk7kHA6BVmFttYD9Zp&AqRIKx2;SQ-M`U;D!I|O|g6Lq$eD40K3H4avx1*%WCgX^XT@q+aF^6oxwv9TS_!FEvIZ{IQB(ww*~P%Q1U1g zTH%Y+|LGx8u2Qb_p(sE{2xS4`v4YF4c=zpRo}@3R98qeI7GD~dmcp-AJ#6Q?;oy;#j2GNtxa@4t z&eT12?tu%V!eb8{J6BJx`8B$wEqGv)_CX0FHB=M=6GipU8uG)yFIH^sbBB4dQ7IDZ zQ(MvT>)+FzYrh4S%Nycz@1gdJ-}jj2Q0T5YZ`3b-A4D6%4+6pG&QU}}e)<_pPMJ#9 zxS)61=f`aYGhKBI<+c;SQmkI4$7Tq+mr?kQ*9KLsp2*n@=18Not=>3)CIAXVY7&l$ zUAh>Q?x=Xbd7Z}%ivF5W;ROuj@Ad?-&$te@lrUQs@79vCYI3dTVh%j1yYC zM1KvNv}df$2q2e{~VU&qJbx`m-eY?R_yGoIZs;II5 zhrGWGsfWlY z+WB!f&taser@N=SpP6ohXd++$S$RGEI)4rmcP(@qQ*(-_FBERh8s?RpYIg;no6B`) zS^)M$+T1bs*(<}p`;{)tP4WC^%S{w(A{vTLPnH*Z?q0~#TmWlcuVrjFNDu532`J?_ zigWe%4lkeecZR*crULGI305DGV$8H~io(&Y3!U#ZIM0N-&Q3;~O|~&?ve53b-F&~K zNHV6w$lm6+nPbB1J#uM`d8AI$6aRovIL4~BPy_9_l6jt67?|l~4Qzrp)j%y=ctO-0 ze}%HnSg5hIhzGpcbNG%RZQrMHhco6uyVTh4Ks5jcSxpz`Rvka09{Q_I#`9D4_Tb)` zRHUzp&I}B?`^?C%KUTI|xpRw#Y;^r%ly&~qY|HUgGgYfOzv+4cH8HWk_r_a#g+e#f zO%8qRnL$YRmVGj&Iqlbs&?F&wVCq1LvGzBmbVENvr5c~^vXhP0xM>kJT)v$TBl6&# zo{_Kn0Z7J%NinA48=+dYK7s%w1hdPh&p3-QF_lf353?#23as;rU*+Jp%&)*}v56TJ zc|Yb;JMOKGy4|l#)*LHs?C%kzTy^O0r^`+mt9kBiIJ(ZcNltnOh3dP7Qqrv)nycXW zz&9!p9~F5Ae=gD)|0q^^n1kB4?=eVeQm})iKbq3Hul#sJ{`}g^L%(W)7O_8LyQ?7I zY0t_Pt=0S1F+I^yoqstXzlQP$uZu~U*Sl++8GuK z$NcP(dLhR5RCq~|Xs71+r<MKH8xQMn~nZ}K-u@v}=SfqO|KB{paadupsmgu-I zp+IfU1v!G8Qb;@1O)XDLYVwEY$5=)8bl3A8np@-+k}H<;<;&yt)fU?i*Xi~(obOk2 zrPPeiTYYYi+giE*qUr;urW_HI@Q2?*UF^}boLuUr*D;0oAuB^DD2;b9Rnq21G6fin zl`0C}x;$9@?q+4g_+Zg=VR@H<79AhO?WIz=%=glckmc9Iy0*q3a2r7*vzuZY14fOb zyd&fNJPKtMT?KDl&QoN1LtFj?73_Pn%_*?wGy9`sZWc6M>pItvGzXYD#w$A98QZbn8JH+Ri`Nifr$606&-%5<@ie7V>2;2v$zx!V5vz zhux@ktxuhTcBJm~3;ij=Cy;pSd(LDD;C5-)ZBz}P9C3Y)_b)3mC*!#`c4PS3KY6hN zkWHqNG?{PX%bHx21)GKWLA6Al`_a=p0ItJ7+|#&{C(PypG_@MAt?*$|ALO1?`A%JI z2pwo=sGTD zga$KiyEZeO@C;p&BW(Gyjw0wJi2D-4<~9;6-}#JIL8L0oxIUx#lQ7d9pU~REssBW5 zFpT^toX5UpdBr@UFN|{StP-0~U1`tnQl78@n5vlGa2PG48Ty+AW7Y^EIi1G@6ypS0 z0>$aCy*5CPC1>SuuA7rUKJ_EahiE`z??+JeA0en>*Y4JbaO>L5e%Lu$!xFv%v0%OZ z;m*_R>xyQpJcU-vJJXz(cfjeih7Az%0OPC@gqh4Lb8aEMPP9Z0U3@6LMnI!}_~ncS z=6*Y?^JMZ`>Q2L#evgW$C8amzDPSR{tw%bCURn5qU$p8A>*ofkaA!Q4(XR3FT&E#p zNu+X9EgatXP-^U7G<8fVBP?vG*~v<#x3Zj#57npg-z=%8m}}ApGF2-8Au-yz3jJYT zwyH>oGG4ptQF}dnolxLKHMO+~cdK{~#}3u<;47ePXnE!j67u5<5Knqty9|Wldv*LoE0Icu2sBXbMgkim@i4+z=Kd&%@XP*c`b zrC$$B173Ghu7w;v;qxiW*jo!M;mxWfXf-h!Bef;UxEf!r0hig9AmKP-Xd5T=Xm)1P zKm-(=N=M98g=py(f3XugUM7mnk2PYr6tBN&_@!j@W2|4nRRxb|zZmXwn(tNyqQnjH zuTV5}q$s!9SZ284ij4044z&phlN}sgR7Krhx_FJ$4kJc0Ns^Qk`wWYo!ge?IUdtJo z17tSPs0W%q9uNU9(tyHV9NrNn3lm81+DI{K$WWNAHasXjPJfjQ4$PfU*1Q~vF@emj z-BFsNA3p5lJE)cb@u4f?H?SdR(&8@^;EYY-zdmaiaCdUigj0LGUBQQb(w62A|GS@u)D)u2T8nY^uosqt#WkT<&@1iX_Z;E5@!+7jB zN}JXarGbI1j71({4!1b9V~ns<`AlbnpDsc)l?;;D(=XN36kQr;&0glS3t*sE)s?4X_hAJf<=V(o zy|y_xAnc7R!B+K;QbQ)g$xW`F)qkk=gu1b_U z+Z=7$4f)z^DlY_9l3Qm}3RdOK^oGu3?jkiu%GqXiB}L&rSf6jtUHTu!#D3(+-ZFBesTiUj z&)YR|#ORB)Dz9q5*N zs^8);$3${(yshnEL0Or3y2Qf=%#4sggttrygIt^FEi{oSfpeKyVpg*M=10-!*LrGw_A{_ z;h+y>34J|Z%a?yCbAAiCQi)U=Z$q1ll{UYzcZo0f*{vylxryK8$V{C2IN6_JH=w9% z3(^Fu@WY82F$Z^yyX_UbkwftwzmCcfBbLvO*A+4IEQ)^tMWNvC<7Y8@$``p0C7sU~ zoYvpj>;qmtd66Z~?+;i{YIa;zLXl)U(3MM~dB5b8-}@^|pd45qnwi;ZVs4k&hYDXOuDxavA14#k(`jEN;hp<> z);F$=t?C^9;j-a~rqgbHM=>L!IiEC{(C+Wu zY7xs1_l??aTXHWnBe6@jeV3m?T#Y=&!9S;}qi%Z6IE434yy7gMUH2fyoE5QC55-i* zUk7jlvsMt=k7M3jZ%+)s=;P%$O9C93&FwbIv52&$CUQE}Ww?JxOP|8n69}T`HJA=~ zXEd9b^Xg}%zJ%W`7%&e7K*GBnL@!-YP#aGM;XEfh{G z$rY(c0mgTl;n|zxV^OWmYCe;RCrxY=psN?SS5M}d=f%+aO&*)HGkb7@D{c6Gaq*i2Soxz-8dO?5#Cq(_m@= zaHIte?qTGH?y8p1IrmE9GL^NLQ8Onq=fb;MbY1Ae4*1%A@~N}jwln*V7_~*sB+#Nm zL=L;?^#xBK>Z6Nu`vZo-uZ_HI$QBDLq0w`kGdI~4EoUmu<+E{}fwC`p!?nISj2^Nt zA+lMUu7b(x8_X>+lhOA#>j!6SB}P|L?k6kl#FkQ)1+b(+D8*s{nxbKPd*WOH+MXPw z(Vp#%_@SePNkDxH<*PXn^^<4 zB{4_^1TQU)O&!D41azCuPWdgii%QKxo)PZODvFM238!Vn(+juNaCSMyt<)=nErFhc zUJ-(i_w*kAJ5c6IWc4wGm)F^6?t8`=+)+#R!6>3I_NniBrf8TFWt5B6iFjs^HF3It zGz<`6(Xe$%AjmMJeZ}!T7saS>W@s`+s8tvPOE&SqhQJzwBtVBs5X!cilp!DPtlqUi zhw~O!Qz$ztTn$V{$r8hR|D-_&67Sm>il`Ty#UM#yhLWU>AeLTM*)Hr+^*dgGAT&r{ z$O0=qu&Zt^qYMJb-+v?(x24=;`19?*$IAD2SO0td^;PCioBse2z0rR6k^X`D{i8h@ z!wUPq$IM2Ib#za$tkdMM^$BL-!l!USIqQS<3RS(FBpGBnWJYQxRq5AplV0g2aDCLOTgR!+ z%$aUGT~B0FL-GW+u6%1VhG5bc9quWjdzJO79L>t2CU0_1e-q^S7r<-IhSE-ip*F55 z&0XMKZkf0B+P#Fq1bzdvE2^Z7PZyB@wIN2$CI1bKK!7qhy(R?3E{>z^h4pldO9jLt z#3tc$UC2`&$Y*U{ce^`KTq7pMp*aIQ=5h+*bfv6YFO#2!$|`;f^UgAFnER1uFXnbC ze&w;CXG=Dyo1!9%1yqxRj-%n0RxB|f>!%EoBq5qilVoqYY^6>IOi0Pioij{?(GYPD810|DI%@ZKex~ zW7Z1#cc}OO6U6)xt5^#Jixwk`@96gJX~*dqIU+{LRWIe&hMK z%^Z9R!Q`{cr5bMsC zMzYr!>iXg-5Q0T>*Iw8qxMu2J2sJuXCC1HOllU0Rjnz@>vMfOc6=K7jr{||5R}5#8 z?Ch1|TlOe)dV&EwQ-^sRKWbSNmHgu((QMax@2pq8^T^I7lhpzjs!!_QhHW3lN-wVu z;@cHks5-0+mzdFausGDp)Yioo)6q31V1W_S8X&WvIn6~Lv|<0t9HBNV@bi3?%Q~4x zN5i)$!up%Z=BVwS4&xbe9G4!+R2*TN%E+r~O$S43s3p?CUD$#3W)}kAVS|y-q8+w& zUNy5!@ai$%5o+)7bM4k)92EtHY!RIh1UMj<5QqPz^uBOfWkn35`?BZ9ta|#T46(Hb zc-;GbTl+!GUYsK#9Ua}RD$is3b-+tP+r@!n+vR$18;1?bo*2NvMDSn-!%rwZBhpav z8%@@$b%%=_qxTE7o?>A`4n&?ysdNii@5SqZvE}1zCuriGrF}Ew;7^%C)pN}fVZF)w z4AT!y`$YjJ6;#Qe6guI{9#i1k_wpJ0PG+y5QbQJ$7ZmCx+$$~G-WE!niMf8s-$!;km6Bx}Z(!|~_<7JI4MLuY8=ddQG{J5oT)vqy(BUiP zsBd%TEil-DjRHn3jkv0#>@T`tu+z=HVNPQ837a>ofd;L`z)}LXSt03XK zY49~#g67)K^tIVfu*ghAJvY8@RQ2T#~tqRBRfr=Gr>;e$kmuN5GKS&ui?P01w-Iz8jg=T{NFKB+>4KXNxdx?bonXc|6} zQ~|tyciwq++yk6<^)H!L?U(ErkIbf*mxeOqX6!Wcetr9cb}5lHiLs zM$EoGrwX&%Cm;E|Z`e7&aOHnC?y!XEBGBd~<5ZuU5#V8fy-%;|-jL)Uz%ZV=kh$G@ z?=mU4i*kfjFnc4~_N);vcP*@tPv<(|Bw?fwyo5u}`$j4J-9&e2g27Ji1WrD)B|JL1 zPCq(kfVpC~ns$!2MG@+uFnncz#CJtstHD3EwJ~y&z{4HE_el9|W$>Gg>7pk=>GJ8h zxqJ=Yo?3do#rkBqG4=rSa4d%-#Y81^VnDHLG^hp*+G3+4ve^-9#!Q(FIv)@HT+U*n z!Owa0zQ#r_a{lfnvBTb|37|pVcJp$VqE7Yz-%$be(j);5C(Kij^uPTD^^3lHaMN;-C7$&4SGg z-c(4Q%It;3x4>lBOYAcYE`hXy_oR%Dgw6>L;V5csY8)GvCXqhbI&~uJ)5I%3QZ;pn zw7f9+;i4 zC<2?zO7!i?>IJ9oQZ@G5gN!)q5pD)_Ry8LQy-$2G@dJZz=1f546B$)xWb7GR)n}Kf zhDTbTr!i?(K7^h})M;?jQq1p3!MM`Y@u;K%=3B?vmddna!cb}M01N%r*!x#o+Q)iu z99Bb`IQBrdeG#N`-R>eT*Nf0LQ77wj{Fs+8{kIZA>gmvQSVV-| zPkuepF4Jv}0xLN$sGZBZ@oCP`n(`-N!ZL{TK$_Zz{zp^jGn;rKtC=NUhjgApm(&kA zgUL19X8LB;MmrR6uzQ*+&N7fjk};;U2llhcnz0#9%s6-OjQ`F8C|rvn>a#tQ#*ddR z-dyNtQ zJHPIGdrd6PaJlFiy>6=VWkJ8Lsm{lDyDW~Wc3a~tf1<v)>1tgWt3(u$LqJM>D@&W|Fv8X2@(aqS#+PB=cufd$-+Z9i7}L_?#ueyXv7WNNR8 z~bc9xz zVb^TcFSrRZNRzZO;of3j-&T63RlgvxCQ|**RK$?;Ki(e5bE4ECNZEm?Y~z9AGs+Ur z=bZR;JcXpavOC_C0AJCW9C0*luN#I>8WM%qdv@WI{^i{F}cj?ZD=6mz4u z_}$oHYOe7|?Ki%KyKUR`4MQ~8>UDn$zOE{V61+b3-Tf^GU|HNSDzqqM*8`Zm8Y+Y0 zvb~05V>20E{y<$-{Wz5$+wsnEXaD0k4m>M;-mTRSM~?8r!zXh6eRPX682Rmm34ze_ z(=9%P5tFhZrdphkh6zEAZNa+n zmte9`2;ae&k;a$z^Xh}=O%RCq0-i|S3-G6GJa3z)zX6oBKFWlz4{;Vwg}~m4WD*{K znla3`lv3T`P8W$&C#)=h>Lk;d%3)EXRs}q1Xt+=*nOybtp4Qb4SN<@&N%Y?}3veK< z=&qR_!qZZ+cwneO;x%xK<3%@L_KjWRTVa_MobP=2>eEWnL+p&ecWYuv|4fQc-4e(l zW4_)RGcVw2kqfc|@$=nmn85t2Nj}sm8>AZ0GKC*HnZBvP$&bPpHQ^CZiyE%cj2uZC zZehv^O|>K^&y}S%exbO=8aFzA{y6ruQ)$6)7N|0x@);n~vy~ViP?69Dv#(;;O}OeH z$GJyMJCCF%{2_UYBB^IIblTk7pYeM+v#1MIs42R*7%Pf+aL;c360CV)SHrKLKiR*A z8svC6z&l)k>+;@upw&%30MrxkrO8*%?2ei>@dn4q;s8J}g&3knK7{w*O;vvt;`0}D!!=TU z0=ioIn&tmmkU3~03SS0yoTxaWQ7IS<3`^ButZ1S#>cZ>$tLwvYFVJDMn>ZH*){~R< zGzfR{?+G~F%3+a$o0hWVW%I*X)aO-!Un ztMafHM*(>?bTW{}z~!mG{4-LxQTA~D1;*>8sPW5*{PNp~EnLks(7Y*P$!W9A5q4UDm;3KGQB(Z zjsn;|qgI~b$@l8}`nPtl`1{<&eGo`%q4#j7 zik;u|0HrX&!zsG#&UKYFOvNfvrG_E%=GXZ)JfTEh$sK8^-z(7B9wAd7yjw^8V8C!U z%PhK}L?RGnHw~yzs{D`w8pP#`5D3W? zD_&%CJM={x*F1HkqECv3>mJ%EwqJ(RManI+x;Eu)n+*76VqlUR8HEH{y`WgcP$LGa zTJ!o2`$gz3$ZWewBz=e^LWaN9uPin@W9#lbdBEycK&kovJkV*4CCoZy$DgNG*DP(d z)a1ln`m~FEE@i7b@M=u?=@aOOT9WRq@(+Q?dW(&ebzHM5?}#0gL6mw|@xrckKYS@* zV-?=pT-lH?2ds?gtc)Q+vp%EL_`TTHSj|x-vzr(iC#hx{#+tf|fs0wp$u~KXNMNco zFnK0561hh&U=tRUV1i*4Jd*5QzuvWGo#?guY5D@-=X?wPMM z?YYfCR}F<7&{?_tOp^AW`JaQP_&qXjTh&suvf6Ak;rT2re7EG%7%6;eep!ArqI0wG z9*ZT06amkL1(8y)hM`LL0upSNQ%~Wo6oPKuJ0<1KldcTwh5TNJEjuod6{e7{sbZk& zZo1x@qxSUz?fzx^lS{B@WF}`CJX1Nv;AIF#w(4DysyVeto(XlUt1!(1&|zf`k|{|? zT*M?!fkyFQ*g>)YT2l=t#cU(aLU+$(u(xu!iv6MgZO%~L%w+4#EuygUB?OSYHjtjdcPhfhqQb*qw*RwryZ}(5K62f{1tgYg02X_~6G>f24HIj<_stWfJ^QcGBuHshipyE#uglfe{dKZo>gIXlTE7zTSW-B(EHSvk z%L*lxW)5vt`(qS>mB2pwKsUK_Tx-cW2E2N zYCG$+Z$@-i|H9iQoBbQ^UTl?;_u}_0C31HI!ed`Yczutl2VuerWV^h+=}=YHBNv~W zUb-LGzNuSYdUj*jKMbB4&%PY40~Vi0ypmrpkG-xj(bZ_}&=xNhmkF^=2=j^N2gide z^6V3pF0R+^7cP1m8)~-pava{u0q(P^p`F*p)R&41nohj>%{y>5*}p;;p(DP$>+Jg! zfAuUcS#G3)IsINpSCgwrO5}@KI$y)3QpIKM?wijPa)Yck1K3S>rK4%fFcwtYCC1c< z=A#7$+wES}b_8Nn<6rJpDyz%~B{@&4EUck=K^B5f%3p7YJs{s=+5yqErTiB{ukI7g z&K`!TxE|*)VAFAVc?0WTxWZY&2Po1TmW*qcoPC#!6F3BH(6|PyzHp%`R|mq8NeFwK zGlPp|2s)k%oZb(%2a2iu`hjra-KlpFv6Z+_z&**c@0rc|+~dgOyNw}vL&sAWwL@nf zV5}zK41Kr7bw<7S2yxz61Ffh?6dqkq@jTYGXA__6TuIPnrhCREfS9IB@+q+ERTNen@Ynxap>6>S^Ew z&84EG;Ec$lFu})=69CfKocxroeT0X`EmbGX2C+$PQCgW>)ZqW5F`R%ethhib-vQ98 zk$jHp?7RT0WYQjNcsU$K^=^!HJG6UJe8zC~@qkmKy3dz06+lIeQ}h3mJUwnE7+cr| zbx(|G=g2Ffyuz&7P>y^Y5le$RXvK!vESg|&v0L{r4Ozj)BhrB+tIll`+qHOd(Z=a` zDbz*)z-)ES=<<=Wq_V!69>y!Bt*yf8j4$5DNRqitt_4!v@dIHUL5%t(^929o-d)~W zANk;8(^0Wqo-WM^Pgs1F1V|q*g2^VOtNrIro6KLusV-RO5L%$z8lKCyd^u$uIwJ=i zW>cN?if~;}Mwl~Zt4SDjlhnm(u9D{wo7{|gdR(%t_uEgPe2d#WZO% zSy#0cTM@32xd!r@EtuMe{&QleBLiO9qY424xAaqzo50TY6%13cC&BQN~=eZ5Mkt~88pM}fUgj=F;di&MnXu+P<{ffJn zCB%0z3#GgNua`6uc=(pu?ao&CDbJpL+7wSmtmOud&RV4IG?(DNA z_Q)no0tT8;mi}a6>h=I4AB*&QgiI&v(U}ddaIT64^6cbyr^jvP-!5p&NEOqQJq zhN1T-k-9K%Vg%-w6r=*%JJ9v3dsZ_I#JNU6d7s5z9Qe_%RQ6Tz z@KW{GG$W{iOcE3Phe=RT{Xp7CBJ3`i86S=oHV^mH1Y9Z0%-V+i#~##t=;hngke`%Z z$#VGiO)Ika!=hDwynwLLegmdlht9wFlcS!Z*Oe5*auQebjqP;Vxxlj&P9EGuS}waw6oIf3P%)Wa zuC{m-J)5%m$I}4^1>%|WtA4(e#_lXJsw}Vy$YD`YH1@?3s=NFN(cmT6m__X7f4yZ| zfpvjYSM^U_(PTSXa`7v>QIZL_TseBp68z~9l?SN#7f)x7EH3LNfl zu}=Q~2y4Nb{~Ao2{y$|1xU2&(FO-4Q-q&|3`%{QJ(bM`f*|$ETKrA*O3Ud<(b{GB+ zH{Od43MdfN#v9ZMZYH0w*vux3&sLisI(+jY$p5x?(5|A7Xldc4KkkbZbe;~<+|Tx8 zjEagXP^ERo$N1aRV-SRhu!;&QI5ZMJDS)dx-17Q==)4kSU-|xy@b~inOQZ(_Nj-Yu zY^_y>0s3}qr6V>@x!~Yj8T948agD! zirC^tN_PJ8`(?%|@GrK>{_nJOTyV(w@C&X>ODm2h4w=n9_dHg<1%ldczL$hKh)ku& z<(RmI0(}COA?07UQinGPmGUrc6yx~o#%BZVC#5d1E9dAB5WsCIVJ!g^ymhA2lazE2 zU_9c9kQ*j<8qHy)+Z>>PNQ!oOc5}KA*xeoh)A|Za_kZcJ4%j12WX_MG-*a!f8@{X& zTn*lSNpiM36K^e9o*wnoCvKUk?#PISd=mY6Qf?P#o{wupBk#( z>YV?WFlOSA=l4gdIhI_UYPaXWpZGB-NcBlGrrfh)Q((?me`zXCZQNq%s+7Y>&;aG* zin!xZ)>(iCg=E1kl@9bIlA{xoII&O~1ttOc7dUy3X9mE5GuU7^vXsS(ln-n8j`#uV z7H7xRE=Gk_gN($;;cQ_f0dJo`Wgzk*f}cSs;VkaUA}OkhbH9&g-%^h0WlJ@cAU1 zDtT_#$jmnyFi9*N+J@qZ#Xkn_x-oiQ>eqJMbhmN7yYMnHjERBfe&x;@_`U)1)` zr3E(n!QOOUL3O-j4a*a)`cEt4>{!IQ{gYt_v~6G{BrpW=3b5%8M!V46DuG$}Mlb;& z8_pMAIV3YL6L4m6NeSTWAfs*l(*ym;`RyX3zI*Ostka2D52|8Jn9`dImtC=m;p&!E-;@Id1on z-|-1N^w@v-^eD_w6)n~21|HLd6sjPex;kh0USHD!%OPX9{pB46|VwHa$E{49fe zvODtnWX^(!^_rpQc9;OM<7$bk$JHZu^?GFM5miN}Ics|!fSdbR>e*{q70b4==&lRQ zlxej;F`DP*0E4pLm+Ncx6ZLC@2dr(JlFNE=6M&kFrR^)$X}bx121nG}b3cJgrO&q% zeH^)*Y$Keh$yhiru)=>E^A)P9TQFo3_po(&cI&Bkiei@9V1Wt&8+{F#3a_3A^}?Ei z09Vuqbx&H;<8>-e=eK&#yKM-Lwt5d}=Y$n-mH6AalS}{(U74jH&SO@Q-I;FA-cv-& z)CyS0?k_$wMEK6Ouzo$bdoiNiY6KH(AOEj{j_{3&^rT42{5cCL>NRejkR2aKw>kK@ znG5lqYGh_BccO$CO>Y^$o3rOvyy5A;Y@5p>c2P*)(iGZ1O8T&Ra%B`x?#xZI=-d*M z)5tt(4Vu?e6(f)0h`N|!jd4C8ccTq>k1|~EhfrbSmXi;CIhGhyW2J`N}(6l}IZKEFJu)!AT2lQ@{73nx} zkbCT-!|JGpL&SlSA11uP5iZFELj&&5skaISdn~Q^hvNH3FVjJxrt1fJypDluenGHm z3QuQ-(=PM^Uh%wid!p~?r$AgYHZZb(a$RX~(}lL}FUA^2vTV!U{>|)H5?liyq~!(L zT-IF}GrR?pUJord9HW|O3F9VEU^H3T1i^*|8OfNNx`|ch3$NUpGerW- z5b47dX-4KM7|Ef>$G27gm71J8Q7+MQx*H}kS!Or9i& z!*Xh@2J;;21VWadR9ZalIN;IPRb}&qEPFeEA4sT=6vk%@)v>wUqf|nsS#{1~=e-S< zDNhA4`(It`<2Y&E_KiNaT4l5y41d}uU<%eGj&&Z3NhLxV&=z-Y85AB+yw1Z;1+Gb`uGMK4A*49Rb zF&r}(S$^!>@q^dG!bnz$Pm-XmA_Q*;HdzrSSKPC42?AG@k*3ccsH2=o^VwyAPQ$je zv=3-kKVx?@F%Y%8QIB#ct&JqzdpapqWHtJP35`#1!ue3hxcB7rA(F*enXd(FFnm!X z!^$5M_H+4K#-_d=|ImCOErAlTpoAc-4+tqd?{4VBYa$ud?Fd;M@1u?7uh`tu^&L+p zB7^a44A?>21m~Ke5~`s#>Ezu-FKZpp1%zP%+T++NlOK*=J~u}qSZC5xiK>KT(^!xq zPlUPNdSSK-G@J1vJQVTN`dN-`7V!hYmh*%>I6Mp`L_dvnA0<-Q&UuJ1}oG$GK#eu}*jSDWbP~0$_ zOTjepsa^I!J#(%|+h8f#5b!FAG|N%j$S6@9pv7xt%_rd%>c1Q`*${{%)bu^mrXMwa zqQsLN&4R9{A-82|$8++;R6jqZLpLW9fnv?i`6I0j@kVrtp0ZiMPN+0i)X)c z!P*R6jtQC1p>+tgRUS(5bRiga!(IG%A49|Hct}TMoxnS;?cbD}e-6i`mz}cdf%y5VZY<7>B9} zm@oUhNXkrn^n2l|azP1NnL!9nTh_DB(-R~}RO^x+j(HaB^eM)yZ&!||tO;}!LW*4s z!7gE`?%WwFA6_Sq>N}zd<`wL9AjkszP;>|oEehxHI3?)1KQwv@MpLDm3v@cixlnGN zojPv~v$k&-;kJObM0h5Y)usWfHXxhN084`f{fdaeP=e`WW^>!alt>j?LM=8ZDWG(S8 zr-#$MD4)=T$9>Yd&cBrH%%Fy$^i-u7?-1zaq!nCs301Z3FeW4KqB0(fH&*3#`Ip`v zr@cOVb@18ITvkQxJRV+Fv?cpZ8qmwVY)bs6jP4rcUVMY83SBN0x|&2Uj}}L{XTkL~b-$g8 zb3doIPtIl+`;9a0u0m-DdD+XA{;$5o<4)7o0|v%_50Zo*UF@y~`}uCx42tb-a6r7) z;oESI9XYnMZ^GNknz%y0Y6JfT_^XjOb_*6&$wpmrlr4pHvgiW|chp4Wq;u3`UwlwaLd$%g^ZIQk6CyWSD|muf>%}P>&nB z^O(Y>>5h#5npLUeqr}`m+SqEU-om%2f`v^cd%fYnF@1=opn`vA0p`1YOMW-mbOr;P z?3XE8k&CmlYtsPS5o8*J*3e+ zK6-uwO=xDSH;p=59D&1Cgdc@F(WZcYs3ZCLVdwKis`M){~4wyKr<4ID>&R( z&FhfqF=trjOyO}*fIRGcaENw{k|~L-s&_Z*P5;?=wez|%+%J}pypbY?o=;{383tyD zD%5e$me}M-39UdBb?C!)Z<|Q<>3$r1K0K&z2X3#LkIM%c&D9-Z-!R#`EF}U2U_fQ9Hz;^}IrUc>T1oUGW=a^jrK& zMVJ+z%rr7chOs3x_Ui>Gl~-}NF%7~c*s{q8Bq#(?NhZ-vsu!O=kvn`NCtrc|B!$@$ zDcREFuCY{juxbIjYsKH`ddVw}UciAdbGqnJ^J033)eAsV?``7;W-Y`;|7_Ue8`fC6 zM-YjX5GnThhWztno14g=kW!^Snq%fIYA|I6PI9K=v0|%^7bObztlpYi7Jk_-8=sH65oLy8vMe#1r3ZqrRyLzj1-StLg4nmTF1aEms2Q^*oP2_W}c*NN`lmK741gbn8 zZfFEh!KtbCCIGwUg6Bfz2h}gPRR(^RUZd@uj_&Lp1BD?E1}Utl(r}20BA_m_WWMu=@^iihcD#ke!i?vI+MKQf=Zb5GpGhxEmTn~*8=3-V; z>F@Z8;Bb|SseWBrD0CE!`{s-tKf%GNbR`_c1m^tAz%KH&az(HBlBVlDHF>f6!y&`- zTS$P8*FPn*6hkjd+84*n^Tcbsx?0DwROqRod9_G_#3rd}(J^ms}?ezXQBFSFfFq^nwP?sV{SH+cImKiPASu0D#5d)1m%ZE*3n{t7Gv|)4d=xm#1Q# z8;YLqrEQKCc46?Tjq-{`#cd8MwX0vIY4BH`EHH{yCT}ERY-weFOHl~aB$Md#~0v>aR)Rgk*-H~LbG9!=sBSxQmhR-OMc5&0zXuSFRK30ahKW*a5ckEz4KWu-2tBEuX#e5{O8d?{K zY0UQUTk)xd8O5;x0^i~C%Xb>>N1*Sq_A_IT*n zc5_E`RYNvd{lzcEs=(mrzUg^jjKA482{M zYqjUoLi6#hsTY)e_W?Yv%MuTQ1@fmm&$=#F6zkQ2yWoga9!Dg2*AD5kVBfu(>j6g< zF6kdv@d;t?ZtTZh+_0wOlEs>2$g(mX>8?yOQ5pD`wpx7=$gjbn`m4PahOW%rY>A-JpkTyw?y=sOpO>mTgGxP+g_Kux z;*iJuE(uq~1vuuQtJ_WEX;XrZjoQCPAmwYHIRzXk-32Dlgz#hrrKTyXO)_ z=#$d*0E5+fZCtuFUurx0>nXkwt~%Zz_n^7A3D}7;I$h2qIosBlHXLMc5xCD6+9C)J@aidR7x)VDAY@W)T(y`v+l^Fv7A;9&{{ieI4_N2PQ4l2#MQBcvyA2S+ta)gR{C3m<1Hdu7A09yO@ zC(5wRzQaq(#2(c&xFlE8=7Urnh{aN)bKhhPced}t^S8_sub3{lxC2+r6z@k_8v+cU zN!ONS&=qt=4_3&xFrhkDa7NETX96Px%xLju@ZL2hrElpvWTGl&ylttRv|Z|y>7sbe({hZU}&FBy|M z_)@y$KhFSzEx*g>?^UMvEY`>$wI&e|VK~I(EUmn~sY%L5iwBcV=BL@r}M6+Xfsu5P!rp zIr^D=-4i!SB=TFQeMPDl`Lf(;@rYs1=4Cbcaqi01KZj`QO$)&J`@rK~;P^ztcQ8AH zXI|qNpodQwzm4(z{Ux5D%0NMtR$rM?=lK6Y(^*Ef)wFH96n9!EuEpKmp=fcZxCVE3 zinh4BTPg1D?(V@QxH}1a^nSkgch=f#XEL*AXU^+7j@~aVEo~;gfSj; z4VigIK1U{Rp75n$4&Z)d4w+Mv()$~rg^-Cp+h3!ubnORaGsfP{${as_;Tzo<*0n_W z8Ab|5M@m4IuucfU2TVE)7V!Ph>Hm!f%_CY|xhv0wnRze+f={1pvwPa9hqtgPRF3zj zrrSOKREHxh%G*1By)D25Fh2j|pQOay?CAJ0ZH?zPvO+*(gKv=>ilz zl*W9V1vTBZGM?0f_1Yia>1;n69!l$iH2h0Mi<#`S_0>T`|Ls0LP7Ev~Fmdt`TFvh0 z{Cu}&v;FS~KGosoc5StB?cVF!6z!){`a|e`uzU8vDa&a##99CG<)*#fpJC}0Y$wYl zFjWfxT#p_@2iuC*LRcnoxs%2w@do}dvHEm#Vpstq>aLAC9XILK5)B6D%j~w1$xXD} zi0Db)VA*rD25T=vfLH!Yv-@Xh?N9x3#CpyF;rpr{gSNV!N3gnrTrm{#3~5gvrUbZS zBnZ$kA|z??Ue%d8ygnwtnHd4}J)n_|n^PfUo_8&H3>&qfcVAFXt7=){d^X9rOOPR< z`rRQ0?debw7)`lHhLqj_NaBT@cLwa3+w39yBl9c0f%jOxX|HXj?~E&ukAt-SoXqdK zi`}!L5*^_Cyap7k2>_<{IQA@K)by-C*y_v`0ngS1%T3f`TVBl}?`(UbsmBPRDMskJ zVd!I3s6f_bqdz`RB?8=MX68hMQ+Hj>5j&hy)h-7&!vxzto(n zYgt=A^jKAEEdOB2^kLyri8-n@wqUP8woY&K zS*RLY0BMADIXXbklNO}Mk?AM#NsRWAgDW~yWXM|^p8)&~^S#84qzm$*!w{1_v25Kn zqB&$5_k}YI-jHjLP`4+2DQAlxor%i&y31i~prEDNKDBt9bBAcTXOKH*rwAv067D^-UnZ~O##BLBnA4GBr$WpgK9{_Aa7oJf zz$25wl}Kw0Ps$i`>hL4+O8?i;!S`6|ZMN#^;>cRN>Hb6K+VIBE`A+c)>+h1+cRHmL z8cvdFy7M!Wz9>49_g&#oD2}Jo(VC558@elmf2Nf>*NpV&+ z`K3>LzR&Ma1w*hzlhbYhPm757!Nqbg>D_&f=Rql@+$LXY8!`S==g`}D20M0jYin?< zaJ+S=BYVQ+xrp|y-Vg7Qu;Tw7+N^_c+(*@*3eDw~DY7bm^hw;690xz*KDfO)!x5E6 z`_zf}GtKE10rnt;gF*X%{*9*wK5^H`PpoY_v7wgAZTE zKv(ZG+;lSjsk{<6ISFBMZAddefZE$js ziG}5}m=AqCU~(QtjCr>Rd>DHSK5ncvS|Mn!5f+{N2G1;QzZ5O<*OK`p$1{>UdEy{R zBErLZzz&Ug*oSibS6r7lW|GcBt@GuRuG1?<=>0gQ0~^SF6V9#NBZQaW{xi5ea5?$O zMyo#f-I~$lg1pA1IjhzZGyJYt&_wH>@E&)fa8g0|Adc}Hb8Hfpl-uW&5;gW?y6T0C zat(RxpY?%b0I|vBwWg=pjB#@1>UURHuQ@+EY>AUbl@?F#HTayV{T%%900nK2G@NE> z7^@~`!>3zeR^Mlv1LpO?MZOp>l;rha6$|jC&cb6o->Dqkq@>M$n0v~@uXLSrVo#ol zvs`&i-m^1nLcze5=l)WgFxQyK=mWMYqhuxW+-_aiXY^TD35@JcwRaOlaMu8sd6)v^ zX;#xJTy?ZN&X6XB?Z2i(GLfI=AHZCXAbyM_BEy;@XO8zXy4y6NN=ZJMy&`3ST4|BF zuP_({XN7(X8*4T@CEZDmy802qkIiwa-51&t!|ESBmWIjr(}QRIcm}TSiBdoF=_7k~ z#=xi<{c<%)JTV6HCtq*MwI*{(oApU-d z-S}g$tWJ8gcXM$tFy1ecP`@{!iphK~xyGghQ}BmE4ix{N0m0_@r?H1P_C^wjSK+Yd z+5mA1hWyO(f3qfd6+V%BY4{viN?+|8p-YY{yX#aZC}h4 zkf2UW4^dtr82BY)xzin5H(_eF1zD@JC3rc2uboudoeTxfK^OR*lHZo5cev; zVO&T96rIwv&~q!*crs6b^ry^ry=Tf85?}ebwwCOQoX+SD7*SZapC}n1Yjy3fE|f_M zXo)TdgqvhoQqW)hQ2y0%4O0)orK@^t3)u56+z}nlRG`Yrb9>3M}UD@BXr@P8}6&O+|gr~N(uITshvk0 zG6E<#brx%#S5Wl-*ix_=A-SV47kVq0m$SqrB-M~!A`$_+i_LC4GK}$~IsJVwwhj_i zf6PWRNgTKmn!*v!_Z1-hTu%LITw`lYNGDm+?j7i8xzJM zNKN{_RO@oj>w|@j)%QtK9*0fnm%91z`$1Ife`&&+Wwxjvs{M}0<-CWLFzHGz7=1_3 zi%wL^G4ecwT0C3&3&>8B-Pgq5YO2LpYn^U}$9{iCUQ64pFgdyD0@?ffCE=}I9|`ZN zz@eZc;E_69W}qoG81X4q33PV`eS*tzg%u27k#aZs{KWIF^3?1KgPd#_>N}ztt!)uG zW8}H8i*Jq<=rys)%GUh~$=^e7`^nmuQfI!zbkFFUrv3sSyWT_9w2*sXWH=GZ$)MF4 zb2|GyRiKujgD(*Dx!HDf<;B4h?vxOn9Nz44js`UOrif2Rq@8L(8J)C<} zX??s92$kb&VnexJT>?J0Wc!22By*Iii}`!F5OC5pM?2yC)pXxA_idTo;;r{bqy6gW z-%-|EriuF7nt)I`d@d$q88cQr?^`2>9J=_37)MwFX`A#(Wc1A`-x%9aQNVP=g_2i} zQOVF8vJXR3obOs=t@Ad@Yoi%_Pjwtt3}cZmlOe;YmJlo@{BpAsn)9M0?a@NYHfC7- z7fy=fhZ_Gm*+rqIAZk8W%GoAiZa4X`xKcf5kCUU#%ZQha!kPyWK9`e;!$2tkdi8T- zP$=)XR#S*+&g))sw4pI82fvJ!raUO^?FG|6yE7?w2}UwAL&|P^ux#^t-(*>H$r z8@2^HC^P3XGAf<%T!9fj)n&jwbd8>yD)K1`B(OW*T(-&?8gBYrM-Fy8^Zd&s;uIqX z{63>1YY7bP7~V^VJ{**^(oCB$ed>d;o1c za@sXNeI0a**is&_e(#hpAn{GcQPp`|yA9D@huA!W4yM7`MM&@AHP0mB!Gv%QGvx3D z_?Y(Uk{7pb4@tCtbKt9*NE_)%qR+c{Z@bJ`a@}s3 zFtwMty`QM}iu?*{2YGC5`u8xGEX=yRzU^vm683e+v)l>slm=X~!ev(n49X*~u$&2H zmyZ_=(wXec>oh-=k^D*!~>Ee7!W30~+YZe&w8;7GV)0& zr+m2T`hKzdYSKv#zr{bFdB=GE2$l!mUNg49pK3SLhJ;w-WFGL?WP)~O3aoKf3 z_=<18$E+_^@7n5n--`OZl?^TH-cU?+_)vxHLmo?H9DQ={_q*8q7v-{Tk0mF!6t7yU z{3FJw-HNRXv-j?Yo>G{>>41ZAV|jgk^URk`-I-6a!tT#lVk$o8nUanctq578t(Y14buu4s_i0d#CTs`o#>XPk5@IVb5Pi z9@2y!n8(xCv%%ZsPuF;i%!{H2yaR*ZUf7OzrkrnxxE&O_YE$c{loM4paO&1b$y-WAko3Xcv9B#KfNW)u?!3DmU9mU+L^Co|f>Q)iLyI5xy z@DYNvVLDQb%3!cC{AGV7l{9OJ`=Y`Wr1O1w5^L~|zTiE)D1R6?LZx9(5U#UZys=rW zhhsM-?6d0%YpWz4OM^8sPP^*P=Nx-{dGPBuaFYW_*l^o3uMfNmomD%ZxpQGZ!W1W7 zZ(u$F1vj^U*9acQBl9l`kKI=J2MV{mXx01R71b>{-hf_=@Rn;Wh^;rgf=nOuZy~1- zk2?*jyiL}2Wq_iIaY)Ylw2yi1Zf~d4s9GP1HUfNRYP7s|zq}?PHhb+=Z|+0=uZvT!^Pfz4JCop2SKGcLmVVF}B3x+-A6@C%(TP!W%3bHFd^#;@*&TE~ z)Km(uAzf7)cz>OA++_9}j~MeC*fcm(EO%$NJ74>}6;@MDM3GSDVe%?c+5Vtk*=3Gf zU>rM&vPjH>^dgM*ul9Bi(H^xpiI90Pc~5R`(>9!U3#H zK-r~t7{hMPTQ7lqm091k`l+Bl)_|$Gva_mI4bOgxf5HuOdUtrG5g}=Arq*JFjtk9T>QzR3q#*Q;ezDe1oAF6PwfP`p^8i@K zH$w);)RKypbFla>``zp*Nv*LYWA4-+nI9XgDUeFMfF`6K>~ZuF*c^0%Hs(aUZXF2! z_^lT4A!D@VZ6$~7?cKnNOiL3G-U>fPJsObGYiT7HgPwA};*CNK^C>+8-%`QzsG3xI z^WyoQK(?w=oTs_+*GdGAbKmsLx8J)*G1_oen#@Kw#YyvtZst1;ImMdF@9bIE3BL{f z%a08U5^}G=ETG%Nz8sC!-7MimfzR@S&&w2VecSenK%)_671Kt4R*<)GL%(Pzyhoz$ zGbNS2D`LV+u`mYj9-A?c$IZ?sV~C_`I9Qi4%;v{LJpc{zni_WI{TL@8H#8G@oH6!y zfpUCh3Y5^#3opcuoYtoXT&f4@KIIon2sr5b?I%OEC3c^_<2(-$Hm@sk#dBJ4Kl_--t)XL+^Mixnaw?RaiJkIyGRRV-ZP}RDcQX7abGt##ZUu|IBU0# zez2wYReL~pE$e(=b_j#Mdn{_Hqf5>u?|G{=1q50ANFffkMuF%cu!Mmmle0Tcj8Qm_{rty(8F%<*L7T0GYUcP15D^+qHYntsq94e zbLrBitimL}aGy6o_$}9&62L2GA*q(F8d~}()S($?oxh)!akzwcBZiFpx23^{WMn&p zQ#VhnP}^D+G{0FgiD!DV_CJvd17^45r(`33_at&k&fP`kb6&@P36>iziR~-w`;kda zb;9(Mp-BXmhWI(uqr*Ua&C60#VvD~A^sVmIYt0hmm4uR&cSBjrrGjmQ*qhOrb{ zrSk zIR~xxfWA|))wTx2_pIzmZuQ;G-vzS31RX6*<(oqMlI=65>bjoMtVf*?aByPRO3{O! zqX4FFZ&Mq-LnDq!zc${o{vHePQd`D5O~xl>IS(RR6GUpy#=Et=)FK1DTQZnWLtwE{ z7#OOzK5#X%Hty4m)$WthYmdklFhrSCL{TZ0Ab}tSUWLl_3_9s}PfvbAt=37;UR$_JwN~6ctv`a6R$CwmLl@Yu5aG@Nl&JKj=Lu}L3S$2B$zs3G!=Pf|h zF4^sE6*t%%rcd4??A3&cdvn)#d8f}jOd3nqNaW7&4j_fS`hP9rM4>-JMQL_fnIPob znb`o!yiA_CxVX$!JAN6vFRF<|2zA`i`ew2wp*9}{7%U>E9fjK$MM4O1rX>_k{(D(w z>WyzpNN@s!JX%V}Ak3#B>y(I)b7@kSc66GY|l~+OCtP3mWtSRd%{1W zS2*(5ZZb5kbJK}I1r%yA&|1t5_?koU9y@oMDo{FDssF1@V~v?B^h*g!U&Ziw-Iu8Q z-c(6ES9R8}X;^3ab`+8{Sb5UcXbz3sT>=~{G$y!auxNP&Wqr8KrkE4#zxINa_dX-H z1*DCLOnX?uOIZsPfs?G+bU3hF9$c!e6``Y~+#C-b$ivX7EqP=2E}t9fPuKbmf~1yb z7Q~Ildj-VFR^69gD)kC6*InEsrwb&N(#>Kgu5!?cm)|`GguT=87!rh38?)a`@I&E6 zY0;;UP14Nf)dvy6*kG*`AAOJ;il54b4anel&hnFF{@x=oK@M$!y!YdMyBru7dY-?T zR0JJcy=rq!VfI<&BQc}-ab_h0)c*WVpZx%?;?}~9DJ-3UENmEwzb;sCf z=T^VMD%T6`rVQlJ(nY(2whXE-&^J#|kL-F?Ie6%|{81Y+5W_&7<>nZHL`%#WvXbCl zXAjhRU-7gA8j|v^tVW>u@5{)JLLP2NWi}{%l`m`t&8z5i9T^<4vM(SL4vO9aTt0Jr z?r4w93411!fyFUA&eF`ZWO=@pDAf1H$BvG8AYxsb2I8mgf(SJ*DZCqOw?%=`5wwjT z)i!*5Ou>f;CADoy*z-s~AWt0L!cxYmnRPoR>Hfu}C@V`4%M6}1N{%l5L_`YSwlYdx zU)s?O(P(MPXO=F(>U;%;?u0gcKmMe}0?RPhqM)rKE9iwWk*_;l%D?|w4IhN{HYf{= zFd#P@M^5p;RY&sYY~33*RAp}nY?#dm*@gWl!+CFV&w-MBkwiP)7(5O#8lE6yrbj>N zFXfdj$l{1TbMlz5x<4fv+Qu^(7TV^ufM0XF5@1V;U>882n!9k+c1L%?5?5EzwfW4| zQwJr!3ox@3n0jkF>39)QrDd@!u{>cHxbAz~dZqL}RA>nnheGM=WqXE}(&O`TP%hKc_l~+Y{LQRr7rfrj#bb4+D;e`g!aH z4YsINg0aQa?w{+ofU&!BR>oa=KElUKmq=v7dzXEPr^_gM~bo)|y zIfJ<_oi!Bz&I!-b1oc894`WB(LEw1{>c6&OV`OVPYu?iW5IhN3G%f~A|w=(Rg8uU0-wUc+4H{JkX5XO5^j7!YJ6 z`^qiMP!Xp>mzA=-czyRYv(vG7aZI_3|QX}f=dh2fp@4!6p$>jC?U|X&f z2}78VdYTkh-qB*$IQvO>b1%=fs>Wn#-$p*lDAcoa2)1LvGMeitGYtu?{WholvirgF z(#*oP%y4I3c2E&tN@j#-l#Xz;45UnGFtM@JIk7}y)&C^&d*l(Ce+n7}c}}gQMW+I+ zJ}QT*&$?|$`6cOf`8fzNAMwg)=V>TQ!w`-oN|nSNA2#%tnb%hGr>I0_{T+biJFBBl zB+U=|;1?uD1EZca{7nm781W7?q4h_6+?~ZoL17Po%6yDHlN`yp2LXkSshAWCEiHXB z7{6=Oc&)H$aCVGTW{H-QpS*{Ubzq$yQ{u-x+}b)up!4^q&pSVF1i}-Om3i+z|6Nen z(C>)TOF7@2juiN8om_J^4CN%L#_qf`T+mR9a*ZezQTmtLp>cfs*xu*2a2J42-S!uz zBw`20Y8?x-vJ-T&uAFoyloZj4aCS#unPHMH~YCd9p zcu}lDOnNdI689e>A@K{P-ay(}bsbOFlYms0CMKd5mG|b_3>RT>za^*OKr%0wZxn`e z__&J^qnI~_kkMbm!;;0kyLy;ZsAHDt|L8l$iNOe;FdY4v7MYzo zFuip(XTXqaG0wpUNW8h-SZ{AUunlF(8EE(91!?W>cT8Wfd+erIaq=;izOLNKt6WajX^AQ-oE%>s4DzR$_3oQUl!*a}MloX*d1;y1iT@06;2A z(^0Ekp@OzePwt4&7)=lmt?H+Kvef0#WI;re0m%7V?ef`BctZ^U zNU*#dm#YO+wTE{attA_inpFfcwxZKre$KW^-bcTwkB*`0nk=dj^>qk{)|P4vtm8+! z4+XnX5i&3$2ZkdCXrNm|_mq=_L$B&8_g2r>DKfaLpI@o9fz>GxYj?+KVhJW{_?}?g zYJuq)zS^+OaaVTY{Huxu!sWV5PIzkzA44K<)jC{uGb&Am+pf86_-s5fT&5x$i=W;1 zs4gC?k(nPQ_a4)9J9ZV{bp3sDTZW!;qtS(Qp}iA%h)CtO0KDop23s;+?%_O&nB ztJPDlqniOhaJXyjuidjK5FU;7D3)+#Eo z1A)}>6lnDUbpAOnps)w|bPKIlE_(eYY4o;)F36slTq$!d4Rwxmd8$^UsHF^A7QJSz zrM-RL&+)&Ufgk=hr_PGRhU&?mS}%VG|Nazwc>-%pizWJbZE0rSF__#O(X(TYVB~AE zs)&pk{9jjSTQ3A{&k&R`em{X@MHE5(6qt*btbf!S=x8=DKO45lEZNMQc#8FQs2Ge1 zHW_N5$bm6|gDLN7;CHBOd6t@=`_}J=6wDciz+dBpcvM#AR!z5hHq;+rka2~)k%}U6 z%yvgz%Ly6+`;ZR^I~?$v!HamO2bVp>=?@@G0`0N#lPV*>U)P$~A4w-R*53n^2>+e5 zCjLv8+vcBVL-w<<^uLG@jXsKEp3b3U>;9%;s5I`k!0d419DBWG*v~s@@e-q@RQ9Ji zZ6;t)7V}=Qp+c=H${fGqs1`OPgCk5~lcoEM%LUwRL8bS2ssYeCGJ|Rz z2e3lfhq893ftT3U*>9NkXI3QuY0d#xaT?g%-^bfUYDpDF>yt~`x4mnL2CQi#MZa;k ziuicik6HD>6N)YV5|O}mou|wK7N|KSjIq(4`qkwcOL$Zr&JBTmMPD}}w+j7?H0V$;}Dvb#tU!QdSw?1l#I`Nc(O=R8o13zK&e&JvZft*why z42R!+3QSf1Q;BkD2wo%xq8Nh1Wd3DRgn#sH$&eMH*(W-}DRtx%53gOQ`wIWKqN#;y zvjMWtCPI_ThzY3}ci&+j2cSrk)yFSq)V0RkYtKVUJd4Xie_EH}COe`e`Cfe~ToPjg%9)v@a#S$viPCC+5! zkWY(M20e@1*(M`JN#l5U1vH1;<&bWtWZ@?`o%@D(gdb8FCr}|0`|~jj{n~G6_OIKB zp)mH;d|jz|+a_&EZmY{(089dcA3Vk=d9_}+b)oyxZ%b4EkchZiSQh*;?(XR>-Z%=X z5gApbdgONj?oXK;-0ZGQMuNuK4kIG^b>4Ay#Y%Ga>cjDzm2b8ArfCy}+{`;6 z!qHz_9Z*~;S!YLx%f-t)_W*CBCJ{^373?X0imn9Umriu@=u{U5qYB>7s2VI`S~R|B zCrdnXT%6_75VQT3xfx36G9$Nt-CN`Fe%SK8!qnxZBB94E25ic1c z31?raN-Dp*Fq{w&uk>4JMo$J=jLt1;n{4-!E+FKSoq{|$PwY%YX<=;8x2Jvyn#3(R zZ_h_L7ARq*nY?k1n4xj#6t0oaBdWOUu8fMpbU7U4!Y|*<^v@g%6!QJ2^uA z*7hW%)~7^3$Ng_kCa-k*aaw3et|sB3OEuefnjUrLG@5d{B7qgZ?7e@1vh~ONs%{NK zu%N{Al3*#6D#ko+-}}&|8ewQU5A-`Bl^L52a z($Hx8pK=oe6^3N$iE~SN!*b2q$8No%G(YqL;C+z1sgiCoJcoC11(8%1V$VunmH8iPpuy8A|gZecDCHfEkuLw_N;%*`}M z?#KA$T!4L$`A>u=^m1N4-bfx~?i%Cm1pNnb|FErS$%b;cazz>ge4z2ytOBCG6s%e*8N@tC7F)-o9*|jIj-Rv8i7W~@HRAm zDUml3val257dV)9RiMnR2z>3#K6~1aoW4QEGK+Jq$zx6f!vi&8a{H~>w9geLxI&eY zj_hk5yIFSv&ld(;X)g>6MbkeDfE-uZXkMQ`p-hR=Cv;4}TUy%o6*AP(;%KH#F9vrU z4*8smPGY>C(Pj2lEcK*JT6Y>_ zk`V1aYl~N(;*%L;;D_fvfojZeI2ie2Df5VG{SR4GFTXsy===X$F;kko7KXTSd@ZQgwi! z?lF5N2ZMHwIFwM5+?`Jv-sDxMbOav2Q;%Wl=olQ30empOG_hT4P#^ry$POD~cmFdD zs{#xc#Uuz>Kl~JeS)A^}$FbK7B)g{#ZIn|W*1G4r;dHU>anqkYLu|;vS)wgBNO@NE zVrvj_?ERN!t2%S6Y4<9Y`;*r=NV?8lyBm-t2*Y{v4@8g!{&T{qzjli?^?Fv;{`qpM z10TI&ZuyEU{a)eVcxq!X<<07A@(mOr$!d=>_Ca6;q1RT<<0#21b5YZ)@Oj6Lq>zSZ z`ehBW+dj+hK{-<+FIxLEo2|>kCoFlQAqsG*LkY6JWp6Hs#Ze=e`<}>XrjinTtTX00 ze0_45Cn&%#q3Ditl^F6X?9B6Yc~jcmha%P)jsM6jT`>F8?sq)yf~ftB#p|#O-|P~9 zAFx(wNn4Ny+i6Tv_41rgEcsaljjXbo(*TZ;OkW&F2C-J(BH%6BzSHUx3#$KBq#8Go z9<9sPV=pq2G`3>C;iSRM#8~6yI;g33cfsIlI#lY>q`OKpKQRo{FEfD2(ZsNa`QFW_ zxUL>^7LZ({(iI?aJM1cf&WMT&lp>c^tz!L;qR_XN zlB&emTAXs(x;=Ge0?Cy+LzrDYan_Q$GK~sx$2KJ$1sR0}iukd#wkFhVhc?zFg4u&t zF6J^O=%+k-MDMD@0U6T+IywQM8n@utnG4M4!n-Ro=`X}?`4Q*$ZhTId)C?h~RbmOJ zr@5-|HEj^%95f}@0YPByM;>ASpOo~Cb%N)!(74IJG_?noWtyD(%AM$uH4-69lKexiA(7^Up z9yI!Uh8tOv?2k}JyhDWe>j~im9B!OxvN^(5G}i|v5&&%8$4b|{ZlXs@A`mloM|V=W z8Gqsah_S{i1?zM)@&L<4C4nnDyVhMQyRQAuf1wRq{d|e3l_YKYrJmOOBX1u2VyZ1x zG`P-KL{ivoHr9b2FSx}xwtHdzRv>Bb%x?#DdOBo-KBw?Ld9R4a*un$5-xq6qg_kY; zImO8>l==3lnA-NuD_hLTZmdXuzh#SM8sKNb2(D+j5b_1AJAQbv(ZF-*VZxP|=&>V= zCV{sy+evekBNPr^+PvgxF3YfhxJYW^C?%ktBYvV*4Ei)?GAg*aQ&!+NG&~S;ilx{&K0I-lJn`e4FS=B3VF$mCsZM9pV&ia=4u-Vv73iqK&C~w zh^wF~wohmoK%1heW01t}iK}hNwxGtAPjD}{J}kkaq)bqxn)+8oj7G`mX%)QwZx1Pg zv%eYVi4nb1P6SR19YDii2mdST>5_v z2t`_{xL=l>#sJPEv_7$$g0K7jPd?)D%>Dwjy`K(dU2?ivSD*iKzP)eIHSo+8V)O)CLlnw# zw0g2Kv)q^8lu}zr`|a+Ju`#!tu@9CCTQ@Na2a_aAL>{v6n5_w2X{#I8u2?RiKZe8T zQgg0L(a`)XhW04Qhr8N}y!r9=kQhHVsw~xG znhCU6xONfjzt3!T5D%`fhdH zo;0#h`tvOm_l}~B*W-vN_w}z`Y!?(T{#2z>Itttt{bPY-QZ-C)+oLY+Kfx(LLD zCY*_iZCQ%`Zg8b>ySUo;o>OyT?Hn*)pXMjpvhxbAN2-Vhs!OBlo1V3m6co6gOp4jf z?(cND`>TvF6-jjd^vH!sF^1w zD(MOa|5VPfv{T_}{HPl#629Z8$zpr&Gq@B=qn4gnR@hj`)5T#y9<0NfQf4<+>?6w` zH?6Jz*Nbap`P<<5AF4sbz+gEzjhRFOEf05MK~)AZ@k(PaSK<~z|LB{h{Wt11KMrTv z^Ws0PkvptwJU-LiuACmq;|`3JnAi>zQGIx6sD+$v2Lkw|nWK*cox>d_Cuu)YzIQ@J zyO%Rs)%0VZzjt%hjS#7Y7hyu4*wQU%)Blge*&gB-t%Kkbp@|9ym~Y@C2KajaFAC)2p{G{|D@{6 zxME8|YptkjvYv$6To?4=wG<^$bn4DNKU)fL*<6XaH`F9rK4vZQ$Ogij54ce2-e{i_eKH4ElRotby$$ZPtNcKZZV2go zHw!vlbUd)xu5!f7Xy>Yg2ljJd5jkd5ObDJ@Hl-=)iRfu#y)fLAsDJp0s#tsbAiP!i z!es2uYo#-HM*GBrSqivPw1)cyLA);@MIO`Yda_A_*DH*!H&axT z??JaHi!%4C%-tmQ;M_>$!nv*N0Y*AAQR%0uIgwr{TQSm`wtDzU#4<%ISg0}P^S=SX z$kAoWpv&eeLYKOQ$ZLoouBuw~>>5ncCt6^ ze1SJurf>ra7Xgj-be$*Y?W!gA$-=6$V+;_VUM>as?G@1FQ?{G87>Wy05yYgO|0ZiO z(|ZdEj1p7-4j#-}cU*cH@O>^&y~8W9*1T|BdEoWkV3{e2QTBaF?ev{L+E5Kgp18A* zyv=T%T5KZ%tX{=@Z@Wm{i5zO>YrFB-+@yCcN9Xa%7I>A%dUYh$Ea78#q}yr}F{Jlvfmv+u6SK99epx*B%8MY1Zz*H19sV|1^&NMPtXq&10M1^6{MgPPzLH z${G)~lMy`=8_0~f_l5U-vO%!qh-Q+@gQ{QTNqAxF=4mFEsg?o(tIff!30_xxsXOq>Jm~ zd~t=KL#};7ihp`2vVIBiASr|-&cHFD8&BYDiRX3_YWq#ee!YeNb2eHU%xEZ!&uZ4Y zqG=uI_r!2qmpjL+$W7M|`%lyNt!pkAG5BY20otL$XT+$9w7L>7mKFSG$JYA6Xi0=% z@nB}9jQ@E@F>sRIpq%iWcQ=)^G{kKu3k2E@FuaqlHNTAi{*2F?oz~;bcC zo0jCr`cLeZzv-EnV4y1^Ay2s8l2BZXmDSh7BTgZUXIR);jeZJf@ZLlOy!a=ghhN+JU;_Y{_9@oW?tW$&N=9JZ;X!6*iAV zhBRuT+*$T-k^W%9*IUsd$Jquob%Wla_w!aeqECggqOx`!|6BzB4T!|gcfn&|5A@LR z5biT;=lvQju=>D%UbiY03;V78;C$!>Iws_VI;&Y;T@XtXbSjZ$4S z{eQAdU6=okz*#tuZ1&!tpEQnwUht9ka9;97$oAyXkxy=_DhvH;&=z}V})xOr}>u{0_(KpSyii58WJ?Z zNVsD7&E&iEBp2&2!gSqa>~_gILFij}Aa!o{MET!8%+XAs$U=h8Vkpwt(6nF@vfyS? zES!njRoSPYmF#+{7-T&a45jx=uwg})I10Yu5}qdh{I*JdE(%b2#vp@B4=9yh##ant zeQe8g|0mw-4=DJjSlrw_(e0KA>O|nPuYf|G2?&HWg?(<55Yq+Ak>cMv3&Ovk%8841 ztN7fMQoZt8pgco98M7!o`bs&ch%?}xTpYC9&*b)?>+_CRZCWM0-!Rl4?%iXSB`*LQM$^m~lz$zt+Fo+DiK0!bDxC&rlwL*hJ35#Wr^ z$%^?kIaM@upCs8N_nZ=iZOme`x69vg!#$q#pMOS#^|hsSfCCHot}}ayh^&_((7$EA zkO4(o<0E&i#EN%Lkdb+o&$hf~!w^_w-#;u>-xgg1W&Wo}g$ov$rktq@lP|-mbG#iq?P?u>2ldx? z*J4gwI3Nd?q^;-&V9!d#ayAwHpJq>=#dm^$O1P*be|ljBUSu7--Wj0VfS-!WHyk4< z7+|e3xpnG1`Ja^+q8QjCbZ_q!p5t@#R^t-(RUz1dBHT>7gkjk)5>8;}OajIF?ogm{ zM3kUib~%03C&Irg?@w38*Z#2NGpo;y#EDC`NS7QGMUzPw5GxjgZ&roqpNy;V#(gJO z{`Y{=#^&g{N3jP#pldZU%YI#v>1m#c)OLWKqgKcl^VWKnJGr+2x_k*K2upCkzzt{Lt5dOD@P_X{D|3n0xdIIRn^ere$BXB)I56%1OY5$L>YYePxX|}QL ziEZ1qIl;tECbn%(Y&#QUV%xS)Y+EmL@BQBYefI9|Q|ww*Yn&iO!bKh!8UFISjm9aV zDWz!lw{=Z*Z*Q#RcJwdp`^)~~`mZHsG0!ik3=DjAtPP1VeWCLmR8vP|)D=Rxx(Zaf zOa{;6yVCxA{`V(PMDz&%ep4=0f0z(=OsK3Ss?=rV`?OKu+*UN|e^1R+PnyDed=br5 z^Nxa3(zS3l2M9vk$Gpl_4xe-=X2 z_b;UHuW@{yZy9gCmlpT*)Og*#biXfpXC)`%*@mnozPv$&7o-F#R^|GSC^{@MV*Vem ze9no5-iQ{{na^w~>5HUV0@ADL|!$v(rP4fFb2^5&%Yu-oJAJe355vez|v39qI zw#J!|UFb9HnY3%J>l{HuDKFa8A*~8G= zhvpwE8iZtc_3tUI=<+YHRPP?7%V_GqeEV)zW#>#B?Q#o^j`{1fV`=FxZRX##VGaMg zvQ;`lRc%2F=){g{cz>7J54HaeyD?P0#w$IroBR9RoV3J zWv*SyruTHsc<;YN;(tFFnDe(fj~S(m5KApunTg+HJ;s+y*G17 zYv^h-?|Y$XyTGuFe_3j>spk`s|MjY=b{|H_>cjxQykDfuMD)CsJ=d(8gcqV{`e`sC zU)GeKv$E%&^@8w1IeTq9i}MLKR=~VrdrSHFeSr?>>wLG1^jq2USy?5)H-Zf&CS4;9{B>0;=WI8 zqa#qVPMtV8sWJ^}Cle4l<)V2McxbQlw}u7{nj%h zZTO?{SsZEcb#T09Rc-u4=E&auVDDav^D^wKn|-cIm2j`Ns52y2;@GiLDNPRzSm z`b(hfd(5o^)P)A_gki{2m;Jx6%A<6ow##tj-(^kaxgMIeLYYX2geSLin8WhSquVOh zQ}(7x4pfp+yOUcWg)?1~^Nyrj-Ynf|Ah~hhxLgA-msKE0ttN2V612IfLzRk%zAWb& zA`t|Rh=0jW*CuaoOfoB0?T5`Q7ZbcBSNc}Pg{hHB#AG53upJQuVf5Ce>OMrXsd1td zI_BfE?myxt=^ukU9*aDwjp~8mri+CRn~(+Ca%ptB3OaRPG6v`J=eHD3daV3N0lz}4 zB@un%1MA=QNPX22KhUa5j^*98Imk1f+2THIejyQ1cm3E9e==)dK|H_+wzDqqq!mehRKfE zGFThIVyib}IzKsvYkXgTVMwO^%P%P$_A$-#L(vo-hUv=frO&zJKPiPnG{MzBb&S29 zzdf}W5BCAe`USyy{jfvJI#$}|!7b7P74Zl5KVt#(&v*SAz6&Pi3x@UD{p!m@@_+17 z>+XY3L8-lg?z%kxhZgm(U6K5EjScK}8_cF#uO`&h#{kLhH=ts8kS|9D4o-41ELKU;iR)%2F5KyzS4@2eKs zg{vJr;2|KD?*v5r6^Xzh(1To^o6gKXBUAOMuhz#6i3p5I{%VDNyd$40>{qRqToMy! zsmfp^f5AAoZ~UDg$Mj)gKXFD(-4&5afk1ss+Tw^j#o+evI=rhbz>fBd2AR2V%&x8rv-}Dq zNK1i@h>QZBnTPn!{|@!|ZUydn;FV;%&KCMp!eq|m(RCMsIGP;|_#F9Seb{k~`%6L$ z-U_L$p4lRodK-V7Hs zFucxjw7Y7unS>HhZ=N7lQ45;%N2M_T5VIx`Y7#_X2=8JWDzuDm1SqXx%E1(F{SC z3Lc+mc(O!;sy7_Wg<9-Jm`&>rR>gJ3+ngsuz0y=h6ZRZhLOD!9f-1lUmhOk{{)nDH z&+P?>O^XTT98kDUI3fvXO7?-Zm8UmZHSU#q2^-7r^?X_3736@?0hy983f@m{d0>1u ze=Lt>)sOZyg9i81vdLN$d8v`V!5bODx8dWZG>t>0xvn zgj3-l+M&}Q>TXuY5Z`TW$xwJViaH|?2Wt!)6Jt7pXug{B)b`AhxIsHOSkO$%LCw~b zKa6IyV)mwtZ_dV=Ek%(g+7iVTk>qX7`r?-~Z^T)$c5MNZ&-ZXN2=R&jGr5HSUR8)f zi}m(9SWR2^@20bwbz)8X`A19NO;@oUS77y+2bt##4Gc&a8A1??*4Gb5fYnS=TLVN! z{c<;C*CvbJK9&?}Oh3>}PZTd(A%(q;nl<(oWeskkm*!S5M1Cqt=fOcvSrlBKL!{4X zijMxqQc@S}o}(1>L|7diq{5M~HURrQ(I2t*D+!OpIL$#8+8#kRemOjvw(YWQJ*PQS z(-a*R^E>J>JZ0pgxc@AD9%%Iyps(w2X^P_)I(w~xCf0nPqXX1IbcyMOjaHN1sM=C= zv5zR+&s<1*IL0}=<+beXrL9l+AE#ZtB@u@X=cR-fn)3v3+-=JrCn9e*kf#=JN0J!w zSiQ@D-1Rqn(!X~8D{|l8L&sFq-3YW<8_D+OYd{QaT^^ZIOA|;0=H8U|T9S8Zqu*Fa z+DpbzidhH71ObBA(oFS-TH(?Z1tkaO;_MGiwU)qY-PXP6IMe;epSq-*B~_MbzMSm> z_!mRNwH?#EU1ii$9qhp&fwQu$I#|>7zZNRx28e!*kbpOhL;v$8YsuBTiD@ksX1f1N zMML;&3XYJSl9zwwCAAu0~&DpnCB zV0(Xd*AT|LN5dD&t7M2|ATbg8>GhEu)fOmz2I1(wLU z!c+Iz_$63e$@izr2$)5h7W!5o3Jcl3@9bWon8Yzqrj=!bL#Ur2xH+IQS~>>vH`Hymsp7 zbt2nkg8v)Qm?!sT-ex9ki5$-tTy!o#FsD=8OgH7vj_Q7khq~dJwaTR@fwxYvLL$FN znE!;F3o0&m;7HCF=fz%(jZF~1>itjjT zOJ)C^wmAI6pr8RYtW1We4rG%%i*1EZGG?|<1m>c%Luq5`w-i~!*~0XXO?0Mi3(z{% z_^Njt&DuBTKYws@Ygh70*18$HZ?zp9Prk9-G8gOdr#pc1f{V9?_hslEQgrD|ZdS;o zI!;(sWvRuiaCGPbXG^&3((u0BDJQcXs&rl9U!=!L$ZO=ueHLacKjJEMv;;I}{5Za- zVT7}TxuMEv{*}gZU?;{z$|uS7F;ITkeCGYI<@Pbb9)mWyJKJV!Y{(u2|0%5I&ThJ7 zneB50zR9U7cyX5TJi9N#$j&#gTixD`%1~({fV6rIHua$o9!epXYqz+u&cv1jNaZ%E zkqwJXehB>IP1QHx=&9bgkjtn2Muj)RkHrRScHzjurzj#Y&?LwGR0-5a3>p8H%4lOY9L*S+H z55lxITzY0S5j^9`JVqJL@~N}@%*=nCk#KkNW~toZGfs*r@Hw$wch`h=7c#ffnkvW4 z-d&KRD~z|Vqc&r5IJnoYC(J2@ET0<4Mh0q)nQpfKi{Oino**A-5EttM`+fS2<fwJg~C5IE~Uehcc2ui%)DBNsvdg|NN# zi@VmPIFi8Y58k<1Se9Vg2iH@7w_PvzSdiqw<37*R4-r|EdVM zQNMJkiU6^A=grzuiqN;D0i}F!=oqh4p=|AI_O;)OHP0k$^V`1s$=9FtuA4hb+J_&X zvMc!u7v+x;q)1`J&@&lK`fy+Uq_xpMwT*^qReY%AFXU{b92^~OJ-Y0rtakC&YN@_P zUtQvfN`w*TL7bSZjc0BV)ccjz*6t?Xy5qa)yB>_ErDd@kdQEwDR(sR?mn!<)cmN0a z*@^1kr)#)~M*}?drV<{h+!lk<05xO$Tr*3Ko6v0jifF8OUNdz8$%H{60ENP8f$RBX z>o}H2HC8*Z%bAfE4Zm_KN=&sDu!!=^R*8;aujXz(6cAQ$oj{GVt>20Y3SgO=3i_i_ zU<5E!x>BU^3b-^N*@ZiB=?`Kyn%WXe@oW{ol^KhRmgI?^oa=Z*C~H!l=Mdj{mqs35 zvaB>;AZVHv9HM~XQXTM`w7H^?z0rg(S=Pe#a!^yucdrhTDm=~bBh~2*Jl~NKmeQS^ zmjjh$1RX|!MqL(E)|_cn$Wwmdl^|71Ks8>P%|&+YX4#>if1pWAnEVo{HuplWLF0Dq z9Pc&z82yR2o2u!;!2t_i0&zZZKX0Scvq(N!7zfMIn_%@({K=egornig}D z2gfi)xLL3Q4x6x>k-a}r65~*+NcR5n4eoALb5<6}AlLcQuy4J@&C-_t+vE%{D-|RH zo#FE-!_8Sd(s7zk=Fs;#pC6dN7n7AvT0<-X0V7vZ*V4o-q-f}9@V^aU*Dwk44vL1{ zEbPhHAixq}hw*uXLkcF$U3G=*#o_4lXXIN07JZ@u*OIR%-&$z(SX1B^4CI{x4`z{8 z+~L+Y`on3e`f&M!e7NXkfvGY454^2>_aDbscoRaRki>tItbJa=OlYt^?>?j^6SOjAEH4zdM zy3_}J)Oey0un`H0^Y%F_`G`DP^JnX7rW>)|t~K|P(GvF5?4bPZmF*M-)dih6Y8{u@ zPu6sv!57YW7D$m5WHucW=zfa8!&i~KNRW0Q!TUM@0B z1<6Eccp{y>ft=+S30?xuLwt^cHZTnFJUV_rLiPOks7+Rs?J8?x0<;vV+E@_V6(*Ai zCd0&_E~pYz8GT-ZLCBBv@@mWN`fJGtY3q|FaMUoYaQU<&w0)Aco^m-9yIrdw`q z=)}fp;r#vB6}0~U$+Q4Aff9@4rO zP#rj%jS=A`%9l4e{WC>9#nqsG$TAaWS*_P(7f-rLL&$BH*IqYg0a@efaD-xZe%iKc zq(Cu+7Zw*KBoz^YL6L~s?Pj!h*x=bdyb^c4ZEVQm#YYe@DowBZv|nF8c{4TVdsnH* zAftn;Vlr*I0RUc48xQTJfH6`!j-2+)UCLtr9Vrqn2LGpg;v1AKPS$UR3~}1b5drxc zxW1Ph?TahI``JL(pb)d_$XNa^t*(d=^%B?m5PY zKr1)xxa&SOZCz`>S94>Bw*AVWX?V!U!OUH@S7xl;Tle~R=2lYh`r zp=N_twSnYyjzYO@+)zk&AE*i%(4>Dh0d<6ie@N2qW zQ3L|+VFxQ+CKm;$!*}jSyi~fu@aYfLChtF{7(b)cHSHx!c+7<|5vR5dWK-WM5#=e3 zH2z$wZUG3wkuVHsFl^(cWy=Ho#-ed}T1QLMr)~r~Mt$k=2V>P^OYWmfG@sU(A z0Z^h)Rxcz9Z#QfQ&M`*4>I8>~O{Vb&Domb{F5H~h)LhJ;zHUbnKf}BB?K|(cqv4{g ziJJEn-iA2za?7Vunr~^g4u|GCQZaJ<7M!C7D=(Q2F&S{nGuEX90BeY? zN2(3=R#Nf>qOvjS*7~&` z`a87mbV4I-4XxpzS17|{PX7}b!&RSzp21q~UlbV2(`q7bYcNi=OwtT0$_QCrKD7aw zGr<@J8RJ>G=G#z??QVoWbiW(V^4sC(exm^YNWLIj20MX?p#g@-YdPf(Qnrr5RUa3u zn_**MqSDe$rS0bMay|&khVHl>g>)Z8_WOD4)7q?ig|Ea_Xsz#VcHZ=m8387((-4o9 zhKlGwknc`O_4?2>9K8LViLU!Gm(Rx;{o>mZ`(|X?aH+-AOiCjt&UqlC4`L`oK{WvpN`AxlAKS! z;3VI@O0nAhln=kPNFwo1v{!&6|1M=|c?`>-Ow`cWPD)qbqLEsK7N#iSw2qHQ`9Zx! z+URBIXHWptSc303V)2vR5am%E3GT)<_UH3(f|bCg zY$P%{t`c(Z2N6wq;IA2}g`TG8{XWQ*_aoPq>E1dX&> z=fCiJS?n^-(R>(_(QIpZQfAWkNy$1Oynt<9jxcLQ4w#%GMEyZnqq?@do>zY6^%i=z zsnPd9PEr1YEIvm;+CQfO3ySqpf2Kfhuf;n0%nAV&fwPttRu#RnAR~JrQnSvHM#kX+ z5NEqSyrFVC!xr73gnF!3lb{y)gR|X*1)ie>DVAn+bmd4;=Jst*PtVwvQSb+4(A*9=iuwK(;PN`vmRpJr*bvuD zOiye{BqZhimsxi9RL<6KP!SR=Wb=*cXa>Cm`NNSgb}=zW zkFe{fQjcd>C)RT#ok|>;rkWeau*(d|bOO)!+`afXK$7Se?v@aUmBYtZKzi_5avWzW zOq0*a#YJDUcmrBdjkY?raF5rau3j>BX+~~S-9vjsfC(d)vQX!vdR^}hXz6&R5G{p; zk|CMYqXUkm*uL-l)cm5{*w;B#aJoARdyf*Ipmuji@#Kf>eYWL;&5FY7yz<*jDNTK4 z^nta^vVDG9^A0E#4l`IR2y(#LT5VF+X{@1#blOMOrQK;mT+|7sM5c{8-GDEAQwv*N z9oxrcnKQ0NWAJ<5%Zz5GHNk6Ob~TWgdbol-8Ocf{YK^x2lS-Y`-5`MLTPp(rcK9BO zB2q8dZ=Az0&u=ahblN;sVWJe~q)Z0AZmW;BdlT-_xSXmYGHZma07kh4Z=AzAS63FP zf%@jxtLtjurR!-1+`^B?YPaV`(62~=V(F1a=sruH&LB88f$0NSe8Zj~ z1^x!L+MmUlv+u#G=q()Y%tG<_vs<-zi$AOO9o-AYd@06c-e0aluQQ_0^LHsM*fGd_ zjHyedXP}5gCS2zW|Hb=(_c-Nj*s)qk#hGlU&Jp4BPR`BZMOJ(LGgcG2Nj?|)SGM$F zPsv@r7+7AVKk^$UkbJXG-G?K%a}(bKVQM$2WlW>Vnd*8@qD1k0Y?sXXj`nread68qB9TyMj5 zi|-paIt;%C|kB>-DXbb)q;Uts4w;|TezF7tPrx*PEYW!kwbF@XT^fqO2 zxYB11K3_oV_AhSIPor_aEONQ2@=0ab;PB7egfdVd3LJB^Z#d7hocUxj^F}{?I5LLM z8EsfmXQ}HBy|6>JS{=LCzr0$Nktwx)gT397Az@<3SrOxwesGS$e#ZBFY#$sQHFI-4 zM0?w(f9YSw_ov)uN3_=;BHz^BB}`n2D47s&eqR=&R`?JmNE~ob^ ziIxA{LtB@}v@DIzF351Ro;0%3edjqK=N`ejgGw=37WM(d6NAk?rqO&B2YpVN0z3$8 z_G9S*%_S%Z+2iZ(Y3%nA572~*-W&@rpT0TkL3l%$Dvq~^r`xT{&V^@3^NKDcO_0T)Y=9mb_Th@yv9}26q0>Gm_1M5TE19+ zWJgiX$V7`Q_gJ#4z%ArB9BrV5yVjBMN00!lRy4E_YX|H_70%#l-v>qYHLHx9SxRQi zKr(;SzY1kk0@3sd2|ULngKp?+rfX)lpnU(fxhE!Hu?ddsBWt~{D}0#K`i?mEA3BrG zMHk}aV6q@O!Xu>9%lr&15WKAU^9_j-$)N)C624E;_*h(YD4>;eT`?D^%1KV_r~Kd-*zukMR%>*M?GJvfCZZsf(OrAd>EFx6F!=Mwy!|C5_}G5t98@~%m$8Q|?w(BSEt) zHr>Mh-f@HQgFBwGy*!Z#_2xR0nOI%Oi7@fI7K)AGVxniuPg8#I8D_X#gI#uN%nlI~ z8D>q?5~kbam36OoPU(bmX5vAO@|QvY**MPSS7N*hPkSzq{q6n6p2|Kk8PTvm1iZb& z3)Z$$ptp1#<>gSAvh|I@!3iDmt55ic1hM;Em4Tosu~g=MB)H33xF9Cva;+ubZ}vYV zFx6iK*sk`cawe+%YXRD8rEa_wJ_9nLk2T*(caEK7qpDC@tGpwcmKqE(#+3Rtl9Q3P0=vwVDK#*uoTwxZkWVVB;`b4 z((h9XYl}n9UqP~R3~^qqNQAghaSESrq_Zk#v_?P?KqP~KCy^A8LiLt7ZJ-+8>7v;X zWRY`iUiF@DMI6I2hf0*7&^L$_JDxdXaSN!>inBE4kH+M~hyfk7q)++CiGJaTp=&b2 zU-U~1c(F1A@S@`hZ0up8vcwS}tq~C+5J3TQtn-{o_o%9quVhKp!3r5FIsPGi76wm% zV-=MtCK)8i<}mV@Uy>idP%=Uqx*=Phd<7+DzoO_+Jl{YmrR0iaBMltap-eY;!o$(I zbz!+_L6^2a;KpT*1wGjs;VH~90`LjTKKEs*TQYy=?}ySR=uhX4sWOTP1!0Rw#un%c zLrlI8K~qw zJ`V^li_U7R6@6g1q{0x(1oReqVX=M-1&T<}KKBG4VxrxD=Jt=H{tuF*wI-x&Zj@LD z1IKIFJZ__~dG$K8$tCx@DL}jC+q9FDI$UQnar`I+^K-4 zvv?U4veKSrp%MO!2?FVd1CQ%Ea~KLiP;UUfn$TGKpmWoCe#y-#}X)`-baFMYWlrrmWK?WkdnasPc18(syoe_WZiL>QDY1{KNnTe`FNKi5qW`mVc z>H4thX0-2#y$hk@5$Y)6dn%#jtG;(osqoHcRh30NDB@zdU$bWG#pBb!@k=(CI11g! z+;f^6Y#yq7lht#4VwO1O4bm`#H8hHYO;R zg#eo!S|m%7=Ag*R&h^$!dWZ(stf9+KRxTrxCaaCrS_W3RfG?Eg!C;Pp6I?)jH^YqU z2sMWaIr1xYE7A|g1?=uhh6CGM>XYV!Qq++2eQdVJL`dWC`9oO#MkD@G^%&v#(sy3U zpqg|oD11)oEE6T5=B*{?cu9J2SR!pf0c8}{_Ut*s3MuT5M2&a{9i$NwE@bU;yy#dE z;uov*@__vElH{cD(g{&PNXT<1$e*RZe-`be3ctTNv#On&J?;cnaJ%^lrU+$IQCqv)ct0Z#WXIkZ?iwX)HvZ%1n<;Gd&JZwAr zIDMRvkC^eJbAVQ)jjCejHVjEnUlQ#=YECMJT!3tG0#Q^|)#)qCETLnBkLnkFBkN0L zyBd=Hl>=12~+^xhfw@}!WTJ}EyF4F%pG73!{2V!&h%E%Ddmg)TNQa?(lf z4mtKuXVpXdKkxSfW$B-Kn4J2fi;qaDcg|7q-02k`+=Ux(jWB7?eSlK zKLVJ!{Pc0L=@`m)I*rK#>jm5<+4Q!yFf0hdX=ljnWn-r}*~O!gsJ3_Rs;RGp)W={{ z>hCS2YTKO0Q>Cxjrp>{e}y+7D^dbl90`Xe!TLml+==x6oHuZ*p^1enX~S?N%qQ4 z%H-!=vO>vPbB~D+{qws2u!a^ zmbNDg9Qrb2dnSAF^Z@423dd^S>0bt(3@S;?AP~+et0nJUl2?A>z81GR)Zz9+-(Y88 zCxU`Zrl%CYCkWD%*=SK;c}>I&PT%vA1dc;q0oz-f+eSrPN9rR^!w*%I$fAs?e`pl| zx_l|4re;NQ9u`xaO;LBWw>5fvnTc=&HDC7!To7Ew1VQ*iJ!t5Zqf9KF*FC{^x}Jgb}lnaA>+DjitcDQ7#PEQzdw8P55J z5D&}^t}1J&RDbC}m$iTdtq{caVPLrW_huXk7p_3tCu%+1-J!$p3edhT-gH58;e9EB z(#q`LzWErk5%zMuQe?C%9u1pi2@%vcU{3=#&N$+2XyBu@%N8u0Jm7q*?d*K7`8gIxZ zgc)pKdr%Ee^_5v1HW)=*)LhP#F{tK7+tnoZd7=~VAo*7zaL0htd&N2>ggL{hkL$)@ zE&W1t{+^!`@9dlI=tDOn6)w3>FEf{m=4oJkT!Id(h(iy!*U$bu6U3cxnl`(!iKyS zGe%m;Kw9Cc)=m%lu9WBoI7u)`)3wy;o?jP@3o5Ufht%4nqaws{Z@V=$B#e$D!>IjM zT>bzBGS4TCsu-IY&nU+S6>JQBpXmL&NVQy$A?F%^O*Pxjg*4@ocq{ z+eU1@5Ik_lP4p0y5s83q42<^vesj*FEMw8-nP3okaqJI1RYEr}%-8RHJ&{v%+Y<}t zP${AO;1*9_n#T82{W+=8dQFP4)%w?i1)?4qG+A(Fs)AhVBfw`<=tYki-+{0r$^mxe zq8>2c989Q0q*<;Wux2Q0>zSAW!uyMoLtQ}uq*&&r~J*E|BX7CBr#xG!FL{K4pNiFmc#70A1Ynd(AxOTyet(ExHFL~XbSgk z97aP;cG`ydm_@Gp2NB7~EEsxXR-J&C$Kb#*TL|N2#Qt%!2@=3+4bu&`bh;nczPF=9 z6dTvy3S+1X`*%q>7;@hDgGmJ|l;sH-70z0kQ>YlLd)Nu3fwc2;~##B7stl;8=7h!Dd_^Hv^_ z*Bq)UPon+771%Hn3@5v2&zXV)dv-L{>}?21p~ zI}Zt1Jua!JipXQbe68&a%mYVe?#52Dn^V~`a|7BH&_>TU8Qi5wvNqyjpRMneEfSv8S z?0&jQ`w!;C@fiewPJ|AHpaw)w47q%R)0{=C{d4??RD_U<$)NJckbk&|w?^%v&k~1? zX9{}kd-4Dz#IIFf7!n$oQY5bDh%_fn&{X&M|e7~_^l{v*g zWRUX>Ea^9k>+j(aOng~jfxrPJUgfle2u&0T>pmD2G9|_@BD`*{$5bSjkb=n z+C030ZX8G##h#ySyw_b@Mm@#iF-`+J;Vpt`5J4#Q;dq=;QijNvbWeOk^7HWk`rJ$J zdMxZyl5bETP~flv-jEMwf&fiAOP_b7Q~ZzQ z&P@2s5^9RSa%6a?^C%0=Fynu<#};p}(Rx0sna1XbDMz9HZj32MufEFo${1^y!oC`r zJ6aRm15Ye4t#K*fV{z@INeOt;i zN3D7{hZI}e!Ij}|)z1vNA1@|Rqs~5i_e?-~+PoqXa($1JJXRTxtksQ;bGIGU*H<-8 z@jCj3$S{{COFW+w3?H^!GOgk)dk4Ndwt7?~n*}4|Me$QWF65k9B=ZE7hHD4B4Rw&u z7gMGz9klT3!@a#RsSZ4HCp1kpPCL3Dt$pSms(ET^6&2cbfZb~wuECFm)3PkS1Pv#i z6LQP)g?4Mu(DFy6-z6vt^J6G>Epx-ejdr$r!;^R%H6MahV!=qYlbLpEXlu7>MBKIa zR56>ik^?Ef#J|fUYTYYS|29+pp4_7diA9k@Nu4XojWo1aWAN2llI0FJqCkRo7RC$< zC&3(3k*4jtKehY_kWVj9scS7y5}7*N$5Lmq=_f6I04H;Z8?it`OeXyw7Jx`lsfO86 zGBT2+q#ibAQOQ<=w6AQKQq{b2eLN4ejjQ}Me+A;)bI++LAr6x1$Cki=n5RxeSf_gSNY=31cf8V0sS=jQA;nbkG5)ZQV~ApWBHNH=;#GZIsGJ@oW(sBv&Jel4xCc7m3BBQ3u@R{)S z+5vxK;uasWZ{_&`1^;!|grgL7rP+x^-U~B_3b(ubK@R(2&E^Rim2W=i`g{{)%=}L9 zZdD;l+yc~!Q~yRYp1v&pnwOI1YfdHO;}BI&VR+50N^9UhE8;q*`*7}roWPe3*~J;v zz>2xp^4!ReLTifA*E9op&P$0b4afGIj}Rv>8uKSHAJS& zV>=l_K{knX5m5YHRIP;cy}yN2pz3`u>GcTCXQ&tZ^pCfoG6bu>twzu0nra>eq#jJnDl}f+8Ds> zJSH!3K)P80_AOYWCqalBwQ4Av!KRMhXXth=^xPqOrB?Lt?16 z+kjxF4e;CP%~6&l1OBO3`G!$XnjG-OahUQXxFLxz+GIX7Y_An;&y#OhJHWqP=j_)e+1ak z#ZhiOg)HYu1_@fQoh-4*+~vWA2BN(TW{qJV^P*KfRM6QUpg3u518@^{g@f{+#2&lUP51T{w@ zh7R1`5i#|x79_BGPkeN3FvC)IMyceJ7g{bAI{oR% zbM%MPJMXIW8eKWX37^dd6UB zG`qI#g>j4dw_=y_jHnEVd$29pr;IKFfW*b1Ng@-@zO5l9nqKYp)pakGL;lFr7 zv6b7Lr#XbqnLMkLm$^WSQJ%a+v4e^<$|vmS=nwO+daRtSfK?Nhv{A@u z=>~J`Gc5Np{bb3RKk0mFaNypq&_4k-szgyzc9s09JZbJ8TnQnL7xi6GOD;7LF_M!T zqr;1GdD)q@HO2Ib2u&tR_1@T?V+fE+cwY{aUmY~+h!Zy>+GLJBjr3oqFl~6#@$jiK z+SR{c%5AZVL%X^u8l8_)OB=+2p>E(SuDaem4n5uK&g5}uY3bPB&xzhztJ3@UA$N?B z)n7=;!#@i3c(OM7YG~6Gq64Kzt%o&f^cx)SQ&@VrhdbSsdRLHTk9;o-4d&wBwpNHbQZH z;$eNq7A@nQ8wyOZ!ztgr#wOfs?BZNJH;`*YcbOKmN~$Ob6e}8ATBd;!*35d!*&A5q z1LolhhLbP(aUeM}wYIQQIp(G2u8hhxa>ioLtUc-#+&JmRWlatnFfnZy9leQ{F19zs zOIS`${C zx)(wVIx1F{mava9ZIy0`KC+DVB9Qc8c6Y?7MDkQ{!ko1l;EGCHFHzJ-3IzJnYJXWN zNmA4=Ow1LL&~aYYrmZc&z=GOR14(JmPwobpkXDvNnAA`|70_S~2Q}6o6$C9IJ8u5u z%@9eoHb;d*j`IF7zE#l83=hZh^_-yra*v$2J-Cq>yy5LSMhvZIvd(1?lsL5#8H#*Oi$0dULJQ-1vA!pSI1uJQcviIuURUT8v zLzCkp2rL5Cb`7yea);KnTOns zZgox;L)#CaVtI+ds&KS-UnDwm3q7g+hW!!?KG}dT2=vQw+;RN=3j^TQV+q za2FShH6jG9`Zio`=Jn`(?l7C+S8A(8m=B=o@Ru^-U@Tj@lsVr2O%ApvSGm2UE-rxi zM`N|^vlKYXnnI(=2^g=^x)AYPW-E`3G|h#zm&;pjfZdJ**sNz`{XVI!<@Ae&gFsKv zbMKD7#Dya-%L`?+Yp`!$Z`Yt`sReigAZ_zDleE5kic3uX0BmGeHZI-1-t32Nlj5yfztQ5huPA3Oo@2~^Gp>86=&a(FF@)uOq1AMk1`_U!fA&UkMqu4IUs=@IX&jWY1e^kx}d8?<Efw*-GDx_}DQ)t3fkZA)MU`MEB~@;7FXyVdDV3GZcKcN(i?d)%c&A}Q zWbi)rO3|Ik}Q2x$z^f)2(uUfX5zChZR4mNhq7z- zVw`(HSB}_N`Aihol;H>Q$T0bMkG2+3G|1Y|D0Z;XIy@qri?}Ee6KSPI4I&d%n|8he z62AhIV5dJ=7zk)>Rf=ls3ZPQ&C!S>Caqr}&qCRx7s$hBFps%4RccCU6(~ZZPz;-K_ zJ*_Z_ylXY35J3s%6QQDjAd8=)Ovf9cswh>u0q5X-Zx1g`yIjf0@i>s@FF2%9P t z{D!7$POv}Do$ak%wDkC$Vdf)h*J6e{95&I{|3OXkloSVkL?YPW#qPO!y9yJMWiDbM zAu&wA5)_GfV=v0{*K1BkT*m(~_l@6~HBG-UCY;!IGO=xAf(a(JZQHhOPcX42<`vtv z?Q_k2KhJyK59bd!Ywb^at?sU_UFco?tEwo@1PA4-%+7w*S(#1CkL21|kDymk-tuFg zj*|6HRAEvBM1vXEkJuaNUaSiUB|dor1Q=R*E!chd_t8tL7FxkreSOhjhHa;vhkn$< z+bzfBn|0HYD?2hMS7DNHs60Pqa93I03;hPSqeGF_)-fUjnmjHdig2MnkZRYXEkY!LUBy9TNDQ?%Vi# z!CVJ9#dS7w1H!d~L|i<}^Za)Pk7dZX1|mashFAnAuw|ZsO;v9uzOG5RlMRyciG70p zC$u9g6uBkHBQs zuO~ej*MWgkssivH85`(=fD|iQGD7Iyxv4wOdZ_;R*mpXJJ|Z;ak_aB+6Z9xgT*uOix^CFZ0D z&X(s=>!gF-slScXkx}Madg|#j#Iul6PVNU5=y@m)KbCIwVB7}8M=C^QV-kPw2q$|* z9qH|Y((jWuag_gEaGtPpmzZ=wNqW8}s3fv<=={*XvOLtEDVrgXzINn847XbKQ3V!! z;P(U%MP`&|;F+3(5+N@y%xxew97fL8*EI?DdYcCcP-h4%yoVR{<)Nhfdgh51$Uq%h zRCK#p7-qaG1kB43&TH|0s`pAV6}v1X4$Hdqkm5)C_vVbZw?AxxxM`9#_>S|3~TJvIvjM9eg))$%4eBw-XilZr>h7G<<0iw z1S?#>!9kl(W{LGIiir6`cZ=wWd3?`kx_yy})NocI_xTRF`|^C%I*Acz9mw0av-2z> zAZq%9iP&sq`I%poT5sh6JYFYPyXt3ey;!!4E9tLTY<6O=g`q5ui6du>&&fb zlC&a&eb1_EftDjHw8I@j;Ls3DO!vBMc7J-2tw%W{uR#eHC5e~hmw-X8h>7P+(eI;e zG1%1Ku+kdV?Run85SLq4s2Q1Ofu8?Iy}YU(-R;Tijp+dCKpW2&-CUzJ1#Q_a#60zLXai| z^|3|Ygp#5?vjLB8^suuardBlji|_sdvWQ<1Y0YA=cd-J9!hPbf0h8of#Vs=y67Azj1fgfjU%OMR4 zu!Y@rY~%pLGo8AWd6~!Aa~Cb)kpM}elsBfrvNZ0fwPAAwl7IK|kBoUW{VU^3-&Nqm zstqq!8Ln3><;+qiC=LOY)cMJ6-!AKqkZ#K&9_@54?;{PSXBSe(=2>54@x^VNeE-t$ zuc-bdiSR!p5u^2pB=kuY(E1Zd;4p!-Tp!!aXd%XMXQz_sVArs&{RF#+?OOToxW6I< z@gE|Pg$Gz?u^k^5N7DB4c&ZteBLc!xeNs1vJE>9A4&L%65^ ztAidLKdc>%mJ#?h{IA>3&Jc4$*+pTlT2xewaDgW_E3-VBFAD=oM84w4Udc}>4{oppARyNf z*ZcUMu`sdi` zBGent`yqu&4(!(E2&NT}wvWZaDnxcXli@V|yQXsqXmnsZ8XJRuw4;z&ql=*JS1#x@ zuAtX3-q&mn3(i8YEQp6uXrnw_$7xfKUW;J{B$1X!b7Ofd0yJZSXmqF}9Ok5;*Y1W% zI20!@Qef&@0(W6*VT?myO-&NBvB``APF>y=k#i%1vit^r+4yW|E(Vb1M{Y{cN~aRd z9{&6kPAq`$JXP)0mg+%{qPuT!@=OxbETjpc8dW4BhXGx0a2j=-pvM&{g3#_MQxc$c zr7Ww6uEZ*!%Kq*-PCYqIJ;B~)HO{3};Z{sF%0%pBw}P|$`^xuu?ADgqR0#hY0#sXh zB2{+JGN%0YOC&(Ax2K9PxCT{>WPhf1YKUbKjqp@kF$pz=9wJ<2aU2Y_sfbGCaCj01XM~4#He%Y*CSdDvTFvDj=ch_o9 zNcB7``=At=kQvy|O;ek9W)}wjK%~j;)YlS~xWxQf6Yq^5Fzxhmev@@jyWh3y0>5p1OlG3N9lXSuJz zt+lr|xMO9S&vXia_UM8gA=wkyY1AShw<8MvecV*8flCyM!(2{QB+D#y*|W8-E0jJ~ z3v3P2dNMVt7fyi9ViKL+5nkc@5_C3x?)#ft(`nU*t(T$~K8_145DF=xiT(R9)&ZjwRi$H22=>do zE^=YMzmoHxy*Lyo4gjZ$!6DXykQ2>NY830m5=Tr=r*AtzuYQQzLg|MI9Z5#%?22!4 zOQ8CH3?u`dTs$uL=ZhGMSinq# zZbAzY8TqYmk3k86`Jie`3l3dD!W4B+a`kI+3(`Q={7m@%-+}ur`Ty_^9I8w2TYIJM zcD^m$p|N(KopI<7Xf~&Y=ml-frK4FvT|mc>kJNpZFtgHwPbI3fV1m`@m=tDKU+ZF2 z-rUWBXr++)|7=G)_a7sHCe`yty6BfudwH$R-nqoaKnl?#?lHi0Q0O|%|B(9;@=}Uet$=={jYQ=w(unF_kQ5T(=VaCB9azex8 z8_a$>#jOyl&G)wMn}#yVvxMmTY4P=^Ltp>ev?VSAgW>I$D4K{FcRVDfL%aWoY#TqG zD=X&v0TZAZKPv`dx%iN@B<98g+6CA|rx0Vut*G%_>V7hc0}$xtb~s5(6=G@`A7m9+Fovy%Rq0m3^*Q za)mzQXopZ*u?>WpJcPb%{L%jWN>={lfK=bPQ+BEp?qmh;qqQvgM|)ypv6jS-yj zZ{q8<630S~?8J@pWCoE%Q2W27hGI6>8%YGD1Qh~x+esM3HpzKXE0Ma7nX}k*F^Wq< z`Y-3WPVi2rXrX+}heT|O;VeiHYpZPxRW!nEgz$&>d>BL{W;D!%;~KR$e&X)W<$%i5 z+>2n!g0UeKNTr%r7TnRmOjR=aRRb6B+7G%Cx9QSFFV^)R!S)W&W)3;RS)%W#qmZ65 zohqdY^6o%7{+>iHiMrKt1sJ3fk@3n>T4pl@#4G((sU&$S^L8N7gz_{6wl)5qRj!hX z@*p@y)%X1s*u3B)C#fkbrdooBdmE@jvP~0}H!-pB`4MWtBI^KEAG%!1(6rhOCpWY2!Gf3@eXQS^L>0M7a}n$ABr8$%<5OyK zGO7O&<2O&dQquF-+1O&LY|d2a>%sLeG7nH_{#{?rFHW*=z;p36IX?)Q z>|3b%D7gS_SdB9Pd!&TIOlGNS1;f}|4!4A!Gl4q^8BBQ*=9v}Bc{0ye3Ty0P3()#s zEPx_p6@xe!7(7fQX*Ud)A6${uFC#UqqeE}`d=bf8{!+-s;tsG1pfd{x$q!_}w{?1m zCZvx8qZ@mDTb z)xGyy_X{ID15{BJ!?n0}Fhst;xgf|T=b$pmp=1IwY}+JH?gT^2a~fRA#I)QJE2Hye z?Lzn!3qNT2UswA2OIym>F<~W4thNB2RSwUkC_YK=#p#PM4mzYhGdPqD<=BNbtOjvn z{Tri{=1$8@J1CcIwj5?a(EhJ{c4;voNW4qcuyJf%*4Lj1x8IW#t&}C!s?#;@hovPHSTYNX`$@t^SI(9#MM9 zVGpUd3jB4Tt&A3nj3O0v4tG$eA1TIM%g{%0M@q<8)b=yyiq*fiIzwBNgV9%xPZ&>w zPoxd;Cu8RLMk#XvZ{k{B&qqOPF_aK?VL64cq3BenDRG925fWoNjlSfWD5>V*gz`!r7zP z6s{L_<@Te4c}5V^heeFAVs;b0A}Vs}Q4Og1#NtxK>{jWtVgYki75$FcQI>CLd|xjv z(-a-xlrLICuRB@H92H@c3%uqbmZl-T?NLj1um7w4S zavdqXfptr<#5T|1dvRbEaf|cKzjJ&t@O~a1y4O80U-%p|)esoO6^bZj_j$s|1ymU? zCkpH_D2SEg-dlfkH@wJMDJFD4WD>>Z%pCNo=Sjg7^e|3$0{u-0YhVT1tK1BG%?YsVTl?Qu){O<$bB zW9@~{hrKDv3h@(W0nOUV{g624?Y*!=1y>w3&)Lk5mKDKYRJzsnmdUYVkIU!~TkiGl@BeBS;rV&@YH zb@wo!fwVCBe=dWHZhpbu3aJmcNcO# z_EAaC-SZT8R0^u_&{gJ9OG{IC>G9+8KevXe0$7NO6qg1=f|+-2V9!n ztyx!0Mw=J!Ki(A)`OZ9P|5<7UyJ}@clFWvwiWm3P4F3HbA_zpgN8%JWOcXVWYOF}J zi7=N~J__7U1;&UbqduZHYidpDuFcVg|1D3}OiB1M&IVE)JzX3j=I9BgmummxFMQbXb_ z?`S!%s5M-cM26CGI}7=tN>YnLx2DK6w8gA4q}O6Ja$uL#sko)pzmpHl0<7Fg-a{hz zqS*x$;2YK$J1Kobd7yL$$*Ebqa%WT1m zNplW8^PP(sXW0u|ASq*iUVp$&A=Ea2dXBQaSDa?p6hnyPORDQ6Vj z0o2wbSppER|7>q5XUtsZzpt$d09xIm%kVXKnrsz4>_?_LS`6B^iU=#PJU1~gFV}uQ z^pjtLZ4kr~;Ws!j8t$?w^UvLP7;0H;9zIyF91q?{+_Xw!vS#b$vT#0Uea)IZ zhtUykn|5o{Z?_SSyZf!+A=mmiS5V|?&B}K9xK7R&poH`lJ`@Jh>&c5>RyWK}5E-KA zU?0*`0^L7_U-z+F%EjnqrA=Yi4K_n?vGde;^m=0!*%LGL*A+k{-?MJ$`0A7Yp)0jt zGj7lUk-wtjJkn29F}FQfw@Z?;j}YMJU|UeWFOUifb#UA;{=bwdI%=Y-|mT zCh1-g?4Lu|Dz$+4YTBn<1Nt&t=?#r#~^VNcoZV`Leo z9U(XKfc@?CCq~Q+SYZjLS(1yS69Ls1I5-{KC>?rPeAkAZ?Te^*S{7K~(*w>53L^DT z=wzytjy*l-=Ek0^Vhme;pw+tIMCs&B|DA;k<>dAbZP$dWkJFb+%zC11i>Qb(D%{7~XLPWSig=9WHb9mSduGP+ZQ`DlJiy4Ap_c)b zEHl$gYBDuN97LBYF{=u`x65fwkO)7tDdgPB7V;~AoK_&JsZmuAY} zNn+}L&C|5*$IVTKSY(YF%Zh4lo&Sy8P8+r@#8dM?{hTJH4J584V)Ck|KA*oR}mFPCyy)Fzn$zJ{}=KHk^)`Qm1R8HdUW+Zfx1nMe84 z%)&gsWL^wuPe~f=a;lXgv1~@;$8_G!H?k%SffH?>2FXuhzhchpmT2MI$sg#pdWf zrf%OvV6UeQN-&}gjnG)t>+|xZ^@_N{)+!JPw?_C5eMw(aT+t=4?@hn!A9}gp$WPJA zFWFysrgMd2+jZqy!mu{@0wut&+($!exE1VbH!r4U*XI|P8r5V=x*yo0fwMJH|cCwcibr$v~^De-AXE&bz+l$ZBix#FF| zdVO-M(UIYBP-gNV>rd-OwDfDC3v5@(54!Z{FDwV+2KLTunH(1C)F8OC<9P)JB&lnT zgojz{nKyo}>+=X@uXorRZ>tPXeF4fX57VDResiT&?l+gbJl!~Wkt)+LFF6lvHf<*) z^mvN0;(~qiL|@H~=0z}XKlv!XqIUmbdz9<-I4kAlFyz9m(7ZB6CwY-K8BL;=<+21u zRlv!(@o+DpbY>b)tWCOakZrrV)5zI~owTYF3_Nn2$uV_(C|$FYB6Tl0Ph=FkgrS05 z8H@(zy6w(C=}DB{oG)Id5!Rf|b-|8v()lM09!JYNUJ@^FpSUA$Y`aE(m+nowPB*un z)>*SQmN4F7xbWR0l<<;LrQJ|=*`EimvG$T#xG#1+0i3Hc-XWBAeNtR2SxK0}hrjF+ zG6%5KJTtjQbU8Kf*n8amM*(DH3%b=^K0=7#%H{!<%vdY@gR4 zYO)xtZ;s5}8LEJ(OTM1|Yj;-O8(MNzB3Y=4wo;f**~Qwy&Nyy%l)xy zOZD&DWj&v{4s5miGUV)WES#P2@rDYBY^e+Kd?G@^`7pSt{ z$L1!seg|oyWAMAUoJq5_Ksuuc2bT)&uIGpx51mT*KVUY!9Vq_@ZSE{~w?@E8VC*_} zgu?QF1H5SX?hI_c$Ecm$ay=j3w$vFBk34>6Uh=C2I%#`N*fw1K;b=XY7WVLZXZpA; znTEG?%hdRMMDXGBq%wWKan%wqCZl}qRCF~%mi$rYeu4USv~j4xd=R?!IWg91>-BXa zMQpD#_vX`Qa}>b8`~1=8{rn_AsP`bTy8L}J^};yyrbpnyaIFXA8K^Xf*|YZopQ<%2 zMw?mk&u{-65GE-)3DozWLABKCos{{iudPBJ#z~yB=!oYwvfg*^5m?1`qN>MBMDJT( zPNZPlkXVvLni%-l_K6&!cSn-xJWmOEIlVD+t?;BbLHn@yQDjlIBuHfaWq%eOyk!XR zUh}gY)E3uu<%F~dwxKM4S5VeQ4QD$oPk-{hNOQp1g$^;3q70d7vO5#cIN{$8zT6C6 zXo+sKUM;tlCk_fB$eb*A@i>#y{Mzm5ryNNn0d9m>?T+aC@?6+)zd^Dvw>Ues5<;te zBH)E~Tvbq0BM=^R=ac&2Wn(Ly)8xseY5EbL%ik3gjmx35iAJ7)VwTZkZAJ#HltKcR zT5o*Q>2+BlebWHHqIKCKMeBbKvE1pvL@4lvJbR#0XKfl0CLqqq6Z&T0F91^DL5#cc zLM!0w0ISJvT~N~+eZ;@|#1;=Jv+VV!x%INbpmij^JnC~S>fG`|)&COtc{z zs-@lyOU?d_0}O)I7T9Y6f!%Q*;x=$tGI{0@5mL*|4@x9! zw{+2Ynx;z|;*4L@nT1a~wl^m!)l1f!{cX-*fslR>%0wBiN}m_D&&!6nznlgv?}=Vgo`BKRJUoBC*`;^vpav%=qE+5E%bgSsXF3fB z?g7e0``5U|r=faZ=KE}i8_)ZF0C5~L5yyny#JGgJL!jJ`-1ZjdGh~W;^?^|hHkC`8 zUS_a82&*$m)Zf3_dZ`Hr#HRncKyuZ=Ji5@V`))lnW!EkI)`g^KhdH5JNxB& zb8BUce&@uVtFh^@XJ+tsLjNw#sm?R1HBaiz!;E-_FTh8(x|?g9tL_ej@!<3d4>k*x(NKS4~N z6UTiI(Q{U_B~FJuTO4GWNHuZY8oEMGGB6x&nPFP3`!zGlVv87mCXnGH&kRb7hW{Rr zQU?f?$h5b(B#3GzHMxDM>_hbcim`TL#_vk?t0`1jPhb4ZCbF<6QY?+-Jq$Q7P-HgR zCGK6Mx4Ua{;F(u)9h7U`Hk|&(q3yM%qKIhhDxyTuy56h{pS5UJFK+nB{V}F-^`$V}dzBs+8;;_N_ zR2-vAJu<9R^5kWsEemRU;TxUTrx<~c2Na940m z)3gd-zl3K zES$k_t0DH4eE`AkIO*xed-vEP8tQqozbAe7p9&OZ8jDj-&h^)Nm9ZB}gEpRZY)eHF zP}Ckpd>}<`X1z@xj&;eWq9DqbF!+7UQIp_J=A08-@+FWLtxa~LeCymscvHSj?5yuM zGv6iAeW@o>YKV@m{X}BuW)DTs=sOm;{z8ADDT_g$QBugGXuz|`ayh?TrNbS_wckmd z#hAV=!p5Kq0}i}0yCq+Gn3nc{Cm1-QPPJElBx+*-EVQy{u-h`7^2=S_RgE3RGbKbY zlXiCdfa#|Wubf+14jW#zF525{qI_}4Gk%0p?fziEu&vmyMv^DtbYc}5H1VT=X*xIP z3rKZ83OAS4jhD*Z#$>j4Ba8q8B?Dto>?};y;hBsGS1C)JYG&tf|`e++rJ7b zA;r&JP{=u$pTkqdJSjR8(H6uzQ=!)w0OvZdNIceuVO=Nl9d;}6I^|aNz5H>|eNWRM z?cw-ylLb5D=fpV2=Ro0Sg+VG?2%K$qJgniDBYE-(Q(!HnuGsYV7m2Fqy?Bn7pBH%A zqJXQfQB?QaOR#t6xmS0NlebIb-_96cnVuIcsU}ByO`njQ3~WIeqf#7o^jFY|-$$yCbv)${VbCKQghh1Sj)F%nsd?X;ukh@xKvgR#z_Url>GF z?PzQ1#LI|>h@7tkSEX@98e8JJ8$T@Xr6jZHl@Sj4Ydhu|K8$_pog_fCCerU_C3+~w z-_r7(7bOpa3|8RmICCLzMPBi1eyk3Kwyq;`cXwWzv z+smveAmPaLI|iqX_|fjq#qu#wYWsmbVLIgqtWOGnoWLwvY#EU?{|HM)>KJ=T)!ACN zA&)A5#qU)DOfe-7CLoHdOCLo4G47u4UoaxDH6FnD zoGupR5mW5im7BH1p3?CN=IiSLb!kg)FrKdF_y=gcWHEeis#0eWJ`@1h@iPA9;x)cH z|HPd2N1Rv&^2(ViNHPaBe=fCD23N&N>8CV%xv6#d&qI(Y>BLsbwg1FgAq@mwXJ%w& z`*CG9HBPkfAXepO!%s-QpECf~F>lZ6qz#^au^*=)Iq4Hf-F}2OD90PljA?t43tR6) z&U3&!zG)&BFG9bc!Be}BtCk}y7HZ8_?U_jVrJ&=gSC&7^6RNdO;ZQ*SVhViD`D;e5 z-TrZw>-zed-T5*62-Gk21jRAZiB-1}eN4xLn*8TR=0@S@1N_{Z1Jui31Ea-fQI)`q z)Ap9*H{J+PS`Q4z+)v!kr*jp42kQdi)lxU(TF+o4(=GtZ*e#aVa`oEBxlD_lq(c4U z1(VDs-FCPHfyn};!tL3bCKcVtcJCKSP#vD9AFKlnWna~9-!I=OF_T4zH>O_F;2t6l z)A$Ub7^E2WfN zZm5%@y8NZobcdWp>PIfG7Q!b8ZGtyC=GSQE`IlxW)Ri*le3;06P>c0IkS!FIOf{jx5xCn2Rc1C zFm9zTDCYnN$F5dqH%-w`-G_|BscG79mVM}E)D=4;wP?57T(gy74^FjqTVr2wz&C*U z`2;>|($O=AR7+G_pO6U+8`J0<@34cC0U9GV8|u4zyv#1OI@X5>AR)Mv*_YBiTvUrG z`Hl&ptQT}kmFY#8+R>7|UQ1^(Fn;K6ucaHnLvWz0YI;w4T38yGjaRQIIdS_+TZ_b>sVVP7xpW6Z`;q(eYwPnGv8FPaGIavg{?F>_4ha&PRXm9m*Pwa$M|i)4_ ze>iVS)v%!5g}o{lNX9vc4oqiY#UqB#A4hvd@k3UJ5(GyB;Rtx1WB_FI0_p zZG$t(l8bpxqvuh%P86j*ISUXWt*&CCz;2YbZv#z|A}L75I#I!d@5OTaboecSES%$pV3Fu8lqxPKFDxoeqB3APL>i zC*tb`EBRapE@hjxI30ee#=dJZN0`*jPt>LOt#}U0XR~d}qQPi!q|E+x5YSIEoA=`Z zucyjXH|y)nx7*ar<@yWnlfvq#76+2UHSe$BbPTx;5JhKH*3%Fv{hBaT8`2RZ2~CS4 zS3U8nxv`1AU>|XM<9ND<+{x)%%^KA=UcVIbm97eD9HVP_7ICc~7ayTR=Kj{$C;B&p zA|`E%-a8sVl!5G3-xUK|%mq(>%FXu+VngYWu+}!OhJ3JPgUe~`VVfmp@&_6ZE#=pN zOf&M}yfWB0Hg3aN2PxWR?Hd8WaJ@^WLAr-5ZK|F

C?1f;`%aXbF6eSzHIo_(K7{Drdz9vVuA`a*7 z*}TnZWNb3iK!^0cSr-sr;8mN=Rocgf-xxr@^3d*Q#{I;01+pWxbLr?W>!ef`{f<7S^7jn3<9+ z$Pf2u+vN$^t;|{~G9-o<5Yv6Ny=b{21C+6blOs8sNEe;%n=D zqsVO!A3Od*-Rx}^7YRwp8TCjj2nJCa`B~8{9i%u}vFJNyi^<=s z`z!wZhw1i@NheaFu@bqnB7xRbS4CRw`sqi0h{Obf^>*brTY^2MV@UYbnj+usE_gzW zwRYxmI3pv2l!qdv*|L<2u4`#OAVg^@Yzlc*O0HVuJjKK!g}%sV(FUVhdw9kfAx-?j zG|J@l1hz+hzTUDjk`YIP;}+@dGNSbP^sdAe?xI70k^hl`52Aly7{a~<`Co_(B`xY<)coDuZIX;VG= zu#|6Z61Om1V&?HJ&L7udJp9>Eo3tP@o$D{4DZ!btD3}2|^#pr|M&}K(jZQ*XP$sGb z#BzOcDCq=@3`?UI*032TWHD<;U$>5VC_{UR*n|+3-*Q1?ueFC{LS~~{8KQNtmxlXeDn7cb4ud&p|!Ye zA)9wPl>nq-mPDg%B$N2WT){}2;yNxN+NpQDK;#)pF|SYrNGKEJs0T=VkRt!7-aVsd z#;Cjc3-g%cK1O(9Ndw_Cca{kdVw9>Jj>O8KYwcfbUiC5_Mk-gHenSb zB-w&?@+v_W&JjZ_>r#^I=ev2{7Q*p`wclT64!nigZxfS*C$W=O6E;qG>*Wn1C?vMi z)dy$Qd!x2DKCK4RB_D>>ny8^6X}oG=N*mR;)ux%1??Vfc z5nx!W_~*r#S3lMBUt^m9=%G8?iY{y zvS+uDzN_BsLprNAKZ`|w*a)miGHxF@f~f=kSSSY8M)7c;TTvg)0eYdwUI zOWQoOmNvBXFOb^H#?wRZnN|F5++aEdqiI2W7(T;k?D~sPb{%v|jS%m?(mIx*sdv)H z05O!a8c_1FL0d3fNQ7CF11CXNuT?9qA2|~pZ6oW-?|s#8V^iHc4AH!w6k1(+1)+i= z06E0B7%|yo*o*cP%rDVA!8;v{{9{~hBt%vT)%z+Bqx!kQZb1;o2CFq{EhkrE+ik<( zIYD1+MKO`@+&OBYtrUR9>>~4s=qnJGjS;S%CaA~|5_2kEGBu^`9_Q@>8fa96$#)z0 z>ZM)edEasldzC{c1tz5g8!1Yc_+5&eGWt>+YKNssKOsVOij>l>2L_$`hq6ntr5zO+ zPdBtT)az7=jmcPyiN%Tjk$y(gY44xt#rnGmg)#s`{?nd+)bX*Lsl0107#;)v@VgBH zup6>*Xr`U*Ju}c8&!%v=@1}>kUEH&&%(pvTrid}7i7;BBoaxBNM)==JsnqGuA}Rqs zC^b9>CjQiAdw)6EFzGlas3@Zgiah0Bf>wd<$lI1~)#a7a*T5K22jMGCNThfq;?Of# zx*)cx&_en4e!Th3YpRxJR7lDWc#>j=hR#01v`Q%f9pP*gyNNp!k)60N`Muj(U4u9V)l3#|C7rtsv)~!YOR>2$jyM6V^ z&KUtU)VYv|cIwze54NLJiwAe*$;caj_jO+>1@n7wrM!gSDLIVwI)x*EOD4=JXXsKO zqmNX;H>5*%P4qGHB|++ys@j0r5svEIa7#72HyG(H?i5gyhiBX0lP?Jy1KIYxtl)#x znWD&tBRujy;>*typGr0n3%q)w6*ts>MRPgryPEab)@{w% zmsza0>4yPueRDg)JkBGx46pHxDE<79Fk#IdG;iLJ>(0%UV$wB&4-^D1SXH|j3EbQ% ze)KwP@?f!WA{FmG^#tt@fv_1IfK0nwMk@(O()<-ykUqO!ICyA}R( zUsU?a#sSGywRLYB$)&VFU|0cI(dFdw_S{q6kmxn~7Z=Qsv;xl?hj+<4YzNfQY3`@( zhMN!6rRtBVPAg8+oFC$!poP>I3!yga+HGnvl&-gi;~vKxZ%+uXY5Z0WBYzGV?qd!+ zK%-t(yw^NGA)rdTeOh*pFR;(kA-Gaa2{T4lXF1~1bNzK|4u6N{kaKL6etsi;h{+Pz z=}d&tsufu7O7>(3Szf>#hDIPm*X1mAtR~HzsX24LOC<&-owV#o12LQ45yDwY=>wsa zmP;zAe~yfb?L|V1GjTP3SBGD}I~>RFD%2*F&71>9UGnZa#yH>G+PQwS2|p|hrLlX` zGcY7W%ph=TzXdUWp}v@os!=eVZ!>9Xa^o}6a=j!3!tHdBVL<&ESSmK0iFx33?U{;G z`nx-Gn$)wXJQ*r75algV5o8X(8yANiaeHu!#iPaRqEXb^;nzL2(`iB3kFA=P?(*-F zZ|2_-iU`b*$$_^e>f(_#>!HUtA*ug@Pk8WO1*tuL&#^Z1lu)ISR@-eurlZeynxjsV z4qQ+pG`<+e_R{m;gvf2Wylg^7UdVHPq$&Bl&{thp+$CfW(-8^%-utI?7e5D-bylf6 zDAx4VY`o21)901Q*Y|wV>o(`LW#@#2bNB2T9#==+euO?{Qdh=M4sD%RmD=6&nkMnA z!|IDn)9wS9qT*r>PfBc#q| z`NQV>L$Gu=4mTJkF-Ee+f9H^ zJ8N*DI0n+W)H6WM#DNYXwe<9#jb>GuzOt+*GWm*|$DRU4iDlf{&VmwO}) zE#{t5afB^CC@}b+k=-vQ!YqdzR5vyZl$0*?cHhi9xGni`8{^@z zdE#y5&aMY?wpysCpc7_attfKu=nawRgYracy=a)Mjf)etJB2M9 zY3VMBO?UGxp7(j)ALr*8-xz0%vj%@0-uqrP8O zTU+y+V@7XHRd>lm-S0)rStCcaeVO^Qgfb3&cyOArrMD7v?Ijb}uv#+G8T~r$TYm&x z-g}ab$*Q>BF@F*%4^*jceS<9(ez5gM^>S$)oZD=Ko&FJxYi|wzlNbx-Ji>W6W-mEL z4tD>Cg2s1mv|ltNy%XS1&$<`$I;WtJPTau0(V5Q_qEiUdX+XD9;_YM-p(1G+coix@ zo7#gRNMy7e(kHZS%=>+(g##|7G3`d^rer!kA0CAyNc7m0p}~aH6jc+$F?EUeaidH< zI=+3*7G%r$N@Jfg^LdG&&p^4*^0h~nu(OQY_*RK(VTrHH;Qp_De225mYxncaX!mn} z?7~@InQ^Ne3}40xjur@md`55|zrrhcVd3F&|2=B!>h*!Q*CYAJn2(y@$zF}^3Euc> zVz$Auf*Q|%cS-Vu_VIK)4xvHxhghnFQkfJHYD3=3j`&P0Bh85-$g(r?7Q!owCqA9u zl|kcD-Ij%Lha`VoBeGBHhq*v0M=t)RPl=o|Hkf1(rUvHLS22kXJ9i{+`}3%Ga9(&3 zd@F=I^w;RbpLF_?-ATUi%}$E0p&aU*I~0`pLUU!0!8kB`5a!8q=j}iiy2y>I=mQOB z&15hg`k8fTar4-)yFdd!rlLZ8>_bor-=in5nQWKH3lE@a*hTYaqM{#0UZvBBmyS52 zR$krHOkz^8v0>KBHxn>ZdVd;PSPb1I&Wk^6-^g`0ejMt`=O9|M{HL(J+e--7_}<_R zHT>`X3guol@+}_Q=S)5U(bCS+{fv$_6B8p{caFB^o#vGJBZA)pb}OytezEs`S>axG zzUZoB1h}+9%`gmYv=%E{XNb(?rI%Pietx&%Gi(Vr48O|*2+pD-W~5Unl^l|@?#m$D z#n})x9kC#!Ej*K7?u+YbwuSd;>~O}#?i(*?SmU?!u>Bz}qcernl2lq|Zq$nKBIwV- zn`x^)k~wbCC)efWmW}o(#KnT2hTer~Jjo{0(#BqLzO+BOA@KGYL0COd``bWbsH;!q zbfPwQ*?vdJPbnO7Ou64%7(Ka~`32>o`A44&LLB!I>a%_KXFT@@*%y_?ghITUOL&T_ zM{Dw%yxQn9t~GiW$k}^y!6o(gk!M}bSec@Q*R4@f91ymXRg0VkI^1UcD<0R@a~I85ESxeaQzdPHcB-%}DLji2-n!h0%8=DW6e7=?>0Q-#PAEGTW(h3Q@0ff*U^g zW3ocKP8(X)k>%4@>88+W$yufQ=FF+9Lr(dU1|s^U5Cm+)T=dwuPYLm34vSrn$=XhY ztc$Oo?cYN+D}8*#+AJFhzPvW2>D~>|eCn`u?i-nI_C+oN zHKJ^xo^uUj4@5oiSQfZLIBUCq(X#4d=@vrDyN<+LEZ&Q} zwjSNHX(Veu9kVo5VE~Qs*|6{ABswR$V~b=oGr=M>Iol!3xXCBc5xaWf+q`Ov#nDL2 z^BPef7cznrs|aDw?kyPFK4=!3iWeFQmNj`}{A$AfQ@ano`GPyKh1*_dSi3_m?X57` zC2d@08glF~LhM-NYV$$|ho1`~W9WRCox&xb_hvt}JdM;Qm9g;a7=-}pTl5&8D~b|+ z)0MeDBhUEg2-;%g4r<7LP7K@!#KzREw6KtOt4Qg7_!!i`8rr^SdjGi9pIroV)z%<5 z)g#$qyA|nTv!3ItNfCBTaULf(8wQ1Q2V6Ad31v&bK)Yb%(5U%p`j>X3*iFC6;j12~ zzyVyry?q+nz!qaK<&ys*oy&yNQJ(m%d3MK^fp4&nUsFCy0AZs!jqp@Zdp6nU986v+&BUBNm`N*{YX zGgscca6IWP#*=1b%B8n2 zIz-GUDAF{LpwqV(V~3tM8&`HY7nJ+bdk3b@Sma^OW8A_ohp@5_xXyf)!$LO}d%P%| z-wl)n+mE{pO%lKNREhMa4A2>GVwMld(uKr6osTwUuc zWWREoE-~9fS6@c**NOvg^tbAlZw6*7y@WNh@2>po;_JJe713a^*&S(m*{eG-E*C>? zKJGn?rx}ytU-E$0wIfZ^Y3pde z9m2@)IA1(~@lj6n!G~X^mxXBXV5nlYMP(-~MiJBUEa4@>5B%)TRPqBP{5KJT^G)*y zJ)cIsLn7JmTitEX=o}GiiIkk3I|vuOxEUjdXp?_daUL%C-SIQSL+h@>tieqi6-&Q^ zKF8^ile7>4IMlHi8$rq)l27~bqP$_%7fJL&l2r75Gg;tH%&vpBs~s;Ir)fJKw#Pb|-iNf>ZKz;(doIHGQ7cUOz| zpIm08-D$Cv&s{pc2%~l-v_t#v+mIK@Ct_6JEOwW|&z5s1!)9TThvhx>CRIfCAFH@b z7IZV(9TD3Nyde9nXCLPT*$JLRRfI|4L2OXDPr3~oPKYu}eK8W-&$@;Q9zJ7H&;q7V%XDvlelw;P53!#s*D;dTA0-FADjp{L`5|7< z8E>4{qar#Fe`An5xWT@wJ26V&=mW>jF7;6J?iP2G-d|$yqKfSKnj-AA+CAz;uy=Pn zEH5};t*)!6gx8zj+^yF;Y@9}MvHA&wTGik=6F*B!#OSs#C%cUWC(1LEn%qs=ReCy5 zx7m<|W!TL{>Aax`I^PlXRypQ6yMG(ZWchW3jv5>Z&RJl}$8J~J<5A%mm{q##6^=dS zp}@auO9YGciFwg13T;H6bY@8cLj5GPYEqq_bAtf?^m#TD4ZUnf!U%B+7d2+Hs7MsY zP`$+DP2Dt*0d>2PxMre41cpSq8AAb61 z_ycrRXZ;>?tlfbn)aQ(G>Z9gTk6!X&@j$kwcrw>hkJvk*tovkc;j?Zyr*%G(el{9K zEaqN}v!%+u)Ly;DszH54mtvb;mpjKAa(8Ya()Tky0kU@uL4!D}A(OjO&D{uZpyQ@R z6bgjid2&BiLN+S5@7X)}kE@p*n@5&gK7C@w1=rdNNBG_DaneQYHn>k?Btyk8iIF>2 z5x5H%f?l#1bhDI3I_#G@=jRJ8xi&5zdM>%fNNrD1E~m$~`fDzFJ+5}DirYeI$$UvI zRq=#;*T%latz#YAmwM+A;yI@KRP6YXzE2%`NPQslCwE_ka|$_Ed-Zby_OD}mK?X^6GU*o zQI>UHo!{e9a7IJzE4oI0g_$;v zyJkm1UBMJ=?UGlgvt{N&aNdy4WUw~~XEttncl_KJiw*O;!DY(+29>HO4V=ZU??eM{%*^;3ZM zIT$mBBhmG*n8b>N(#s_oUY%^&3uYd&eaQPU&-uQD$gPiH7!95hxZCU3X z!DCRLmnVrN0g+n7%io03LIn``iB;p*b~7-PkUHQ2rR$J8#~PHn{6p|LuT6t*ikL%{ zr~7yG=y(29h~F{8hOJ+QRQtJf(N~x-sf6l<{rFPR9sNWl=h&5jfB-VG8VW!0B@=c< zO&)XPqFxN{^Yl}4H`IOMtXP60;MNoM`8kWPXDr2Hb{0mV(~|U_%9j@cXD(=WXUP_o zu6J7A@K7vW3RW8#EMD2W^j|DQLra*)8x4*lG5z|uGbnyTEQ@i}&-iWxKT*1o_eRT0 zf37$dfZw#_Abii5LxXP=+LxHHGAweDukyIaXx8CoRSR5BE0bMz1;iYV*>6PC8p=#| zu|NWQqgmeE1#&26^`!RO*0}LGww*X*^-)AQ_bxA-vnuq8tFtw4;Q zQBPk5dtRO%COVCjf#B!RPd(ugjVYccs4BM(oEN+_5VS#`DzxnElN^&N(>d>R(`S%P z)L$O;^_#r@P&Dsz7nU|3NfM3UTv)&O=%g8!jGJ*6J#TsM&NFEbRsp`+wI$6(_&hVX z^gB6wb(MDGD}L~1?`ouIcp5LdBx5(P2{-p_OisZiBt{n&Y*B+TRx#9>fG^m19?5`V zDRxiaCfI-r-L-9alWLg3OU%DvdCN1EDHf9Sgwg)y1Vw}Q{Oi247<{@kR7=-!3N1`;0BW_4b2{Jy9j5BN>G z*R=)@rDg2SE+ai?hx%*@4^rOZg}p1JJ-$jeYB9ok{r2T4vN-&s^=MBrRoLz2W@4RO*cLMfp~Dvn8dG9lanG+POA)@m4Y#W8t5ahE4n!? z!(azp)TIXhB&28oUt9E12L0G{^G}jV&COqwAtdFPduP=GXHdn10=uVG71^Hx)2rgi z=pN-MAO_1^X!i?cU>S<;hA=TE_| zbNu#`*r;o!A8tEK2YtLR*Nid*z0nE72-6Nje)0e95YR=cN5dN;4_m(=61c1--(|Ks z_>>Y!%)e&Xb@0^PTfC$KCFw71WkyqY)S#(lFzcrjUTl7aKUDJ`h+ZV+m1Y~X`=N&o z%!~x=$+&w-NCM6~ylsSz_IjP<4Mr(q!-Vdw1x??oeIs}_avQ$EL*}kzwR7g#jP(-< z#9HW){QS-4Kb3RhpE=@^mw=Dq`4YTQNp z=}l+I)BDFu2umm72jPL<Mnpewi2R&-XWOAfL-Z`XP%iF=2;9T+ z5k_n8xIGYbF;w`G$>V5rGwJ1JKO`f1Y0|qebWe6He)Hn8A8c+7=`1yr3MWC3)uzfz zm$P?As6dt37G{8SFkivH<_ItWvuL81mhe>)c}C<;kd^Kd-lFyfAqPpk*;{{4*th1+ z1zBJ6V#y9^jzW4^;weHVB(wK^z6B!KLZjPO3VkkxA2`uIS2MUSGs%8*Cb99d{9N)^YQNSX1={*^6O zivy}p=+1lR2~_K6o$Y>ewp+(Eyt10JIuJ|v+=5EHH2yIC^*wuS>aOU$OF9)gp5QF_ zf_Po&hMdH2N%lQj%fTdl_L7}qZQS<6xY^rDozYsQDL7lXScEt0q_c=aIZ8#!ab);a z@KZv?aVt(*e$2mP$qvJg6p~}koLCA0b;(YK7=ia|&b@y-49bY?o0V}_!+HNUycNhS zbi^GdgfmL}#TC#RdXz*VaSShGdn+E$To_;;GzPd{_yw}5ZniWymWqATVqS7Vioq-W zs5-Y?TtR%>ir`};N*cMTVcTv`lso?(IzFVUd`CF~q3g=7Y!q1$3PPU|MQ)Ks*0sGK z__kugZ5KR*beGOCzKG(t_Z^36w#whN*l9Xho${EnnPU7N?WLDQLVKXgl~amUYPtKSaNQV)$6z49Tri>fij?j=*{PcbMf_8-&+Ysix?J~e;Ucu)WhCp z{JCVNm5w5PgWGw4MLsx9W-01IjQ5@4eQcrzQiBN1Z^qq*xrqR-)V>B^H9-|rB}do) z`Te8VP8OPNqTJ1US%t@(KE{MtRwQJiF8Btsnf6{iDPhYWk#o9tyETbs52lNwIB^tv z{``=P%OCH6b`an{w2_?7B`|)LY;-y}@|>_O)1zL~oX#79Hd~w6#`8ofNOpGXr`9+3 zke;fWCcFwHgL=+O!^z2O$UB{uFZ?H2a{C z_NQumqD=af4#k%Ktg$*&NRVtN@y~8a`9y>DiX_FqBhz9QM5xzKjv#$gu&Nj~xO79$ z2%)M(njrFP4UCQTjh>D6oa20sB#51|`tJbZOa{Skh3;8{N#x109!WsX$nRNf$qL`x zUC1}I`oBZkdFhHkq)ndk;(csJnJL{CGN-wxve5!1yfDVeC5t_K?ppF`En=|1Klaq==R(9@9I@IpfKEfKJ8&ZM8- ziUGRbvV$+UNX!y)QRDv_j|%5PV{N-z+TR9UnPwC+T!4<}|8eE3Xpp8<0-n?eWyf2& zQNtOR)QjUj4R41%ZtvXiF~8PN>5km?s)Kl&yj?H2)Rbr;6!=p%R+4hA+!=eF_n8qZ zZ0{MDa=S4L3qLNj2E4{Y7Kh+?Pvb;Wbu1tCG|NZ@WxYcJF1d6Jb64C>3S!BNh?DKG zlDA`8<5G!D{gzj-+#e?vS5sHivLYZ@2}>VexeIR@*SKI4+1un5p{Pw`U~JmZvJeU_ z7q!r78q6Uvi`7u83015@jPYEaHn)u)5f9mqG$HjHdBc2#6h80*jH+Riq(iHxuj{C# zZe@od-8`taq%C-Wbsk_#a;g1s`mM;*owwe%T|4K!Hy?!eoiZ3(z=ojgi zfQW8YE?#N0^4I=$as0m?C-;Xj(|$fI-H#20GG1}ec#O;ZITxhu(U#~qz+%%ys;O5A zd-F3Ki;d6Qj!swqq1SKK*dyqOp#@f`)}$+EzyV;mAKu~HdwT!VbM8RjJIV%|cQwyi zXmW!Sv&wpg)yReQ57V|BP$2sF;OP`$8jKwdiKmpdvA7hA9m0qOXpr6=x&?>FJrR>E zUF!sB;27J}SDBW>Kd`AusDvr-Z5KPNopO7Ciqf-ICBPA^}l0ma;0NrlziILQ0CQvTmf0SI9!GJ$Hc@4BnSUHz0H}p&!1_arYlC^0Y^ti zdw~CV`S@Pp1-lc4{r5~7Rdi^7UtdK36$+QWPn)sx<&haU;wC)z*Z;1WvRJ$^7fCd# zWEjrw`6+J7|NaNQo|nKZ)qe~1e{*I3nf8YdAME$$Uh1}a6O&+@*#5Usx1AfuMw`Q5 zpS}3-^sSuSwa+aQgL|#rqUhS+zg?ERU8{#bn+5)RcoI4DT^J@2yWwJ+50-w2)7B{c z@3a?~C@3h0?2rB(`N)eNYra(uze{lIkBDKQrgk|Ydom_u$ysn!m*hVg`Y8F~!*gAB zq8e=*-HD+!<^MYP|BImgKh@>**G%ol_@pGlQ^j}haNfRstMvXoM(H@o{)$`rkq|aR zbaZskSu-{-SX(J=ZIb6KEZ{DH54Fa-Gqp_2%o6Y3#eBF=Oi0LSX(4lQak*97&MN-? zy|?Urwc4W5MA`d8c8&I`Y3n05&As~1pFgL}%ovK%)6+ZLm?KG=nHA{n9~~dB+YoID zU=@D<{>}v_e~RfmLdrw9Os~0awqGObxQm=pqm*EMeZ7Q_kC72=e0+Rf-_4+?v{cf= z!z0<1S4@l&3{Ae_DD=s0+ZHCwWWv1q6y8J|KT{CksL!~q@L;>!t7dnLDk`99FFwX4 zCr{>)2DX`2PglC`Y6Cs#ZDw-DE&(r8P{2O%6oK{k2em=XtG|L7fiAQf9qG5>aHINJ z_5I?CiZ|-&1b>IJV{dM5g1--eVQJM^;-{shsohgvWTG~QhN51c+SJbzLO)~SfN_JN zeY&~@`V8@Z>GU_JrlzL<-VN%t-^$qTd(es2+?w$*(J}jH(6seyBO~gPk`lFDWtv(A zFw0*W@K0apwP1=%1%>HXKtB=lbhT~#jCfM1#d@^=aiT0>-WJ;A0>5f+7vkYB%le^M=8Stdtiwy2#|DsyO;~#((&in*?$K!qcSqcfY_k=-(M7i&2VsV zkT13H5%nv_oMSvZ=)&aq74W=OKenoh+tkbq0rE{g^>H${Y<}3YfKGKY z(npYH*WJ%UXoOKH#~VY?NCKA1591|wtb6`HoHpJ;I?mh9TLqHyOHnWh4Uhj00HJsT zHd)Pvbj0ut&-%EgLG*=GZEI_5 z_FKuxH1$%APTTr!OJ3vYDl_UuT5>VZR*E5!b219|rGT8yn5HH{;nP2=N7zeX?>Nn1 zPeD7GPY#cF&VyXoHRW2pK`mv|se_158F9-cvrB{KM_|?Q8BufOGljpo9eRJq!m^ofs#S!IkatoTm+7~XL=kc9 zIkFcO75R^U=o#`oXlkm-%;CZ&DS5`ghRaJN9lcl06E2mKT#B>Zcjpt`k{0d z8Rw~{asnpd{x+Yg6Nsf6F4x)Kd{ks)WZXvJ+?=lULJP5(nc2}jn?akm_y*-J=JnYw z($eC$2oh^{R#quxWqimIRP4?nLr(IK-velA;CzNvlJ2yAz>xbf@u}J<{FFNEjM>XE zAt~v#i-Qg4vx6vun^$+OjF(8Q%DGyQtiOGFgl(!av?w*Cc)pnzi+F&G zL@pC?5#bs50MpZdm_SQ>71vBhrF;fH)WY~bz!+Bp*!7y|+GFU$;(6y}D<;7guHlNa zPlhMTbr9&@aeVn0!Oir-=gRrAw$o6FJQlVFk4HvLd%||;l#5xbi0-~yJGnLqq=XCG z0^8eNOI^L^=VGQcUpkq6+wq{#s&3jrWK`5T6&+HXbGadaOsK)z+aFkU8%D+B)%FkHzoXk01Ev)x^L;CEVKqOFdO-6m-*kBzw6tU9Fy-$W)jUQzP0znS#lB z4@3vp%9$b#k|4Ic{Cp|j6~ZB_0$M9;Yb-$@H{b$p$OCQAtRhcm##p8=)CB2F0FUB zr(%0=Y2l-8Ygau@b|TUla|$d8m@=pFKE#Y%x7n2q;-^&K(jvV1gT#9FdGgn%-`fy7 zvP8Tf7so0n6r`}*A7=eYMYB6Z2HwiPw|SJeOl#M_&7FqNluIN#>s<8oGCy3umh{L{ z-8%*@jD7Z7QAruc==sLrceug*G*obPYG&V*%U803ES9!AjJ z4R{hYU2P!=cDknKDSWab`M$kkuu-HOGhVA)Lrp^iwY-{?&pP}nB{38WaT^45Z`1H= zi;I~})8%~@y;~0)Gi4^ks^6mJs|SAVKsjs8=dnl<-OH|+SFXWgK9EK~$+-SI z8Fp1;zue_pp{PPpD&xU-babQ!-+q@o7*@ z*p?B6R6LS63}UXXuGpdH|KpGu(Tuy47kE$Kw3UWYc*^*a4{(n5_P+M;LX#6_AMhmH z(W(djySO-hw#3q|3b^X{Cu#@9Mtx@5p-*%Sqc3Ep+`9qyEG_q!9 z^yY&Z#5Fz%+rz(8d6f0_DeB}$kgfS`=a||x>dM~&8M38C3Oi;Q;$MzoTYt%7zsL-K zm2bj3Cn_t|>f?*C-VuOQve?Ws9o=czk;-FH>2YkXKKOG%bmL4z58a|W6#G|ye>a#y z;KcNLe=@C@m{^I46fq|`x(IzDkA2%=FR247hVuQAb&%9kej(SLI0Mq?-W(AL#BA@x zq$HSRL7naVbAuh=TfuKB!*D5aygCnm^9=psX=KxDdJ3{_4_+U*(&vnkzN^vvYnWxg z?a8NbB8VR>Y11i+-PY*7{?bQxUi8xaAjiAYqJEakZEr5l3^zkTrjg8wl=sC8dR=bA z^nuXp{dR+eB;cH!{{D_X&#u`mXxCvSyjemM>sam%TQ>uky2SkYgQX>UD&`}|g2x8= zW$lTSiZNe0c%!bmzr_3OglnnilV`iL&3f6!BU4jM$t)^a(JL#)<9zSiykF{jA4&^f zu6=3Pt($$!uBlRFbF%hD5r&|-&btR=UVz3@a&SPc`ATPy@_0j zXkv2GWV}ROtKL>GnOnL96ILe;V|gM_;O*k_0?0hw{r5@u;ZhJTY+ae%WF3|$;BjO+ zTqTpgYm7b>`AluWZ1^1Y}Kquf$t1&`>Z5CUj z1xH7~Vs+O^s$9|s*u*dNlykux8xqI@VRu6XMPLA zX4J79Q?~C_@s0M|nRy-0L}C*3*yA$Rv50!jXPHh|Jz%y8*b{z}n7k1K0233zb-@W(6TaIOJz;Zf=oSz1zP2 zr4!^Q0gFb_-NNW7&GxD1@D;hcwe4&j+ZtaS41Au(GFzauza`s>sWF)-2HVHK&`X3i=~v)hiRggW zfUd?}aW&Dp$#L1(*h;RHK&0bDj$Kikta-0m4Vmlw`j{}wnO4hfWxGs++)HKO^96zX z;Mp^gmm6m_>{2uQvvoGAyXi`&R0o33{~Q(xXT8$9reBGz68-5o2)3;0m^L!E!SCMp zaO4eTw48i+H)=$Y!3#b=| z?oZf9IX_z-H=iVx>(rxW>Nn@)h$o_Jr9IX)uAW|--soa0Y-rGWK}M&{lpWdza5Z%{ zCx=d*{OQTXYOI*Xt={zPx3)G>Qyl8`FIOE|C?F&$VeY919o0;}k&r-G@PxB9ik82x zW-uPiT_{p~fZYZxVJM+0N=p8{y}db#^95g@^(S*cf$@$1@+AoPhm<4n)4D8MTC)oL zR((oG57Z!p#Kgp-JEW#}$jW+p<=fcLN^IU&8U}1%sGSLWZWSc2ofQ`qp@TpHM;nwn z4isj2K3_Zk0(&~}#LrB>Qp*={AY079m)v&K5P0buAEYO-I^`Pb`(GdCyo+GU`Ru`F zgBS*Kw;&Whvprs_X##+{MDpo_m2H>n?r)OYmUvnc_H=1KK39053!A*Gv{V)QhxIBh z?tiraSQ_oW&8tgrLbgNd3_B6Q+rZ!N6fVgZYbx9HNKzDoMRV=Tj+at`4Ed)B+h4!? zx3e?N-r8@pB^&s@zZ03VFSI<9&E4!jmZMWq99sB8x-qvSk0%DSCV zPDRMkL5uh(_M3cfi&h2VxF1@q)JPe2?YDI|f}Dr$OP@UBV_eLJnN@5Xlsr-)E?Jc8 zO67ZTfd=PuPKs0K%ulq!SehMQcXiY;rGV>uf(Op4z0PfS7FtPbYisqk!yGTa!t#G> z5^h~YoVcx?^?{Bv+|r)xG{V4Gn3PdU2`C$DODn`s)F{%=0B%#I&xwij?V>K*YGiV+{+$04gD`_o7}&IC;Q~$3c+_0E*Cj1E zIOk9GFM~_OPE0-bV@0nX5RPhtRGLv`P7VZ&39P*$v&HqJ@qYQspL~@T5;d(jbTBfO zWm^@mQc-5OS6M(-SJ$gDoq8OL!3+sWNhENL203@!d*DZaUpxB$E<{?LWm_vZ04U!m_Ggy;nP88(}ad=dDc!15jjr5~i;l;F%|S zYED&LS&0`C5>g`GA44vr7I8?cfHypQwVG0`UH%Zfh~8b8s2`n+0|YrP8vIt9{GF3i z_4c`?`D3*OCFBL&DQmvQ7Pkct3pF#XCTFXkS*Rl_3(lx=7o|HAUw5LZl_@AGeNL2r zE8a=cM`rU{smS+lv0JUg8GZ>x=6;6d4w#|!tj_(G<9EqM(J+eYcuy`7Alq61W*)G^2c z!HBMg-FDwgqRrMOyvQo@TJ3V>+HP1~JMeDfr1H~n-cd>D+1Xi9Ke3#B6+j3&yPoFe z=D)M4Ns1n%TAv5lh+vP%si~=F4i|58;ak!+xs}@GmX?+sXq4Xm6B8400UVXkFus_;Ujyd zS!Xj`&4{B5C7kmZ4TFh$OPPRUOD7hQlVQoD^SK5GljNmDN3Vx}8YS0SPjl-wITy>3 zR{=5&a8{G5+S-vIo{Ou_pLbjIIr8GSTPX81aB-=9o-&ba{F1Oc!X^8ss_-Dk`GQx4 zH^r{iV3~cB*C2{#1$%I=^&2=GZqoK0o$RQ|Vu%8=Y_UR@d$C$6K|_*|psIzd=0ncA z^%2BdfFgW|5{}mUl|e9df~X3MB8WKZeaTt;kyQlqyE*_?CFz=GpDzMBtocB2jm%>) z_!9^>2+=4{P-S7!FO*~?Pk{+<|GTQHf`hMuLtdj@ex#IU872daMDQ5wtL`#jiD0L4 z+wr-&S&m-P$B=^DTton5v;Z{wGL z*No}xva=hoQg?#w$hOIQgLKV+Is5}c6cBkxgzcTLWz3SgP;002*+hDzvv|e7FW2x$ zp+)*874eXqeJcP%TvWH`~@NE5e-XRtC2w=n=4srxO2gj>tSKT1*BrOsm@6VVRzuK7uDDC57)- zl$A*VrUK*<)*$k3=dvw7S8pB*kS>*0w2>ThgV0^wqxcodP_q-zqeAxJyo|3GV~S$Y z7kBmv&_3}UX+i!@TMo-PL)ys=(X$GokwWXS!o=&I9ld z2vOoU4FEJ9!e#BBJaLjXyzdqPM}Ileiu(Y){eU@vdfT4bMU2y1)YHI z-dD_kp|bnUXFWxA-=47lwqg=007F!So=X^ZT{2L}F; z$KKA~%XvR`|>w#mKg1!_%Cx31dr z0I7GdW2UV&=I3zoqZaHF#;O1zftES*eiRt{QxsjlDBf9J6BCm^eR|laLEZsYKeQ^1 zx=|b7ylcopfwhZV?^GMXzc?G&0lREqu$V_on^%xga13BS^&-*5&)Y*NC9V!f0>IGQ z3<8{~&W5p2``Jyvo<@Gi^r0U8{TA?p=2Pt~vtfXMKx?YWn}n!395P9mcX2Xn`>iiH>E)$eVE zns|h5mb*fZ;17}PnaUko!dRhVURxUlVU#q%4({veYMMEFRx_c=;bE%mCxHW~lSB!v z$AAUzng{{ZQ{zT#f?|2$HJ$#7gD*2Ht6C;z66^cNF0oU9@h|q&6S==Rre2(#cd}K4 zzoLT)+o?2mO#=c|*lFeN_F5g6I^Q20sxbG&p*2G0V%1fx$GL6LhgHvi2<1ci zKz=3g%-+)4`sZAule%Q&tASrn*~}{G)Asg!dJH+2whFV8{O%Xd+lY9T0Ns*eAK{+Z zinHLp8XecF3ZxLvX*!XIROI+K&k@{S1oJ@+JW?{$vIF(x0b%z$onNsnZUTN|JKV)%0JQk<8P+;{l5h@D;=Hx8V01*n!a_w=m_rPrdLSpAQ zH6M{VOrY&-=A(oijtw6vNdD0dp4A$52C}lCamh| zG7=muHMRViJr#RuWyHNvx0>1Af56K<7v6UTHYO$|lw*+bA+2IhN=_~f+!4FoQuNB3 zq7H$NFwIxG^5eH2Ex)p{DHm4b7(G+*)mH(&unH{(B&D2&L>TWWzPGB?1;FaKrmXFK zsQLLd36xTW+-!$kCjh_H7WN0T=%0;q@hvVZO9)DJZ6<&4sQ`3Hq7H$q4p2xn-0KGf z?V#hfkuf{ggonNE@WcD^DDH9z%xV1$>!5y7g|q(04`oq~UX!}Xg&eXrQ8QSAKvHng z{?>{fgeKPzcoaUsByM0^efaPSaEl;Ay>2_AQ*Wz2F9kpKY&o6K5z#-du^L+=ErU|} zkpV`B85k{2zq=b>MPvhIWokb~W+fx;)U~MA4x8awx zFP+wW+>X{{t*5J`+bsXUPmkb1Xtj+Agn*&?ZO^mN4%4 zi*+>H&Nt=s`(AAouKO#1ET`+;X+3O&~{EQIZ`19S6jS8q^n%1$;I$!GLe>Gn;92D*QkU zaGnab0hmw8?su#M`D{^&4Wr>+fta zO5pMydV~)SW(ujhIDm-RM^w%6A$ApQxWBtzr`uL(e&pOfnGWdMAY9RKz>tso#+Z8{ z+^xEwZjbB5)OUE6TYmvrpDDwzKXSmrzaFnUv!KX^!QPSy*o%M1?3{VO{zF?sg8}Wj zsaerjgo2P=cWO0E_wAuzJ6LGz#Wr#f#eA79O=QtD25_LnrM|Atcw;bAZwCHAcRfxH z8_jfLAFgh~iv~G`<>9ZAM~!yiL7=t#YbH!n=X|O1CHpNVP#nme$w#VpCnkW5+2)E@SglP4a23qHBahvu*YCFsK$_gx`0mVB4 z1@Zi{GWlAAT#PD$r%w$5GwQw;|7Ohv;2gBu7{C)hh)sQZ8wfiu|5Bw%?Eq-^V5>kb zv6_7rP~W&hKVaxF{!!$K zD+AKNzK2l;O8^Kv&I>tjDkY!Gx=4J`c{Q%sLD}%gRT7vLL@aW_r*cWG@w1Ui{c&}v zM-6k;7O^+=TCti@J)`tY#O3y_nfXS=FdNc=GLKP(nkozRO4qklfD!byl6wfLF5N+{ z+cAfUgF}&h*5`bFa(7(}z<<4MBi3px4K=l#+FEtd-dE!vI}8*7gH;}m5JY*q`KCnh znGI)oJxJ$x3_cnke2AzJ^wt&J%dY7rRwbs#YU_W(Z)j}x0pV6Wv#kV2{a*LwM_Iej z#@yaSh}J_~{)9n3E_T-*s`Ow=U1T<91Jd^2!qU;P=Jv&(V&ag}7o5+ZKaT?$H4;~R=GZTeDH1i^&JaJJnO3j*7PiE7 zkP9twJUuUy9L2+Io~KYhn*TS$3P279SQi% z)hYak&-Gb@@I1CUJ4n3)s{puX*#$dTmb^}#HHP3P2HjbZm98}Ic?1$sVdXjiFM=Ue zw%j7kG8XGLyY25)4dg>4Y1W!mR8Vn@JwDt04>QNh%bQbHRwifrEjO3OBmHbr(jUmb z^=w_a-1~&;>QlOU6(ggs+bQsOLt()2er;?dX3;29I!#MR(gXnmh&3NLbmh#|ghqe= zsX(h%X+aBF7ixP_*$o>rDv4AcYpV5TmB`6U;81^^T7s3*o4_ub&D$$$Zw7n!CqxTS zZ^6Q$@(f>EVg}OrO9%a6vV?mLt1-3}Vp+MVm+_XI_)^MGSM|azh0mr;w5m)ozA0wo z6pj(^ui)X+XViY2geg*9ms&`+qzst<&UpDm{5*S#fdmvaoQsmOE=Gi38Gy1H;BtZd z<4}r{?XL_|aXuSr3<_{ABO)M>eo;!RtXS~v+X~1vO*J^s>U*pw`WlFNfwDCEA^=3z zHa0*|NLP|20LwCh5f7l!GV?#e%g#dakw{(QQ?sL{$+h3!-d<~wQWU*31)1=m9z)>` z9A`k+9{r#gz$%mqLU^c_!}#zkjvDC3Llumwq6ooRE2vHZn-}j#xx+Ik^O8-TVJzpZ zQc1?{Zl>Epgp(C0x%0T*tzVy9HV>kW>@gJCz%d0pEb0=a?{xYTJUse`0~o>|t4T-% zWHkRY{s9m<_vZf=O)E}H#b>$E3+a-4ln=I8vjpxm?A z6t>or4JiJ!+7;XBeFW2dz3ox}(pf|IH$&h%H|6#fz!~Hs*8@;hsal+zm}mr|)1vZn z@&tZX$xtk11s4M#>EuGLSlcb6{Yh++R#wbFoEE%~2Og^X9w!`S7y{L^ndLi+`AX49 zIMj&L7wdOp0_o_DCPiC+L8&Yd$P{VZf{7murSQT6*0u9wYit?Ryy=nsZ_V2)Q1gaE zCg2ZlL0L)E)ZaQktp=6O|F-`Z^?sv0&5)7D()hBnvJig|go1VbuMTl0J|O`aXjIi6 z!jqQA$Or&y60z(0k8OQ&bNKg}@b4JK#l?WY!$YQKhf{KPmVWw#)pEVpJk{po)e`mU z-;z9M1$<-#Vq)UM_w~;zL=CtAuVddlf8g2b5Own3*!4b2DF`CBSA`e*75px;usR-w`SM9b9_<`t?iP)s=4# zkm|k$_x>3AtpL6}`#;59XHZky7N#meP!SNM2^gB-1q2ZU5>P-6gcd1srASkdCJE94 z2_jvjgx*nVM2g~-4uT*cO~4D%ODG2Ep$Fle;Jlgp^Ua$#^D_CdCRwxh+TUJna=yKD z)t(87L{5?SX8y4=L0Y*@q=7<@xi6e2%9^Wv)`h`FQ`U7v-lu-zpX|<@zaM$5O{v!% z?*H^Krw&OQi?Q%k$@(Wt6x1Q!V0Hr`U{DVfkE9Vi()~BPF~ERBlPTzI@)J3-(!a6$ zFZTWa%%G(KP45c?kEqD=IQ|8E4Z$2NkUuVOH7~FWMfUw+L9bpM@&|CrHN`u^ifc^Z zqQ8-JGPwPYQ`Dau!o$U-Smg;F+S{~MkI!4*-L{!rzqJdVinXZDd!}`X4#qaoCDhIb zzi>yaw0O_`U1Xq3Lcd!9Uw(YGestt5gD+ zij)yfIeOd8#6#w6{@t_LI288_*6gX6T6k+y#Y4fHn_9Zlx$>ZhWhd7M4K%PSY_u~VK%4+Ru14jDPsZ&y6KT%RBNVwqCQzPed zFRl&UwL53$lCEE1*PR#t9w?Mc^(-hDKn%#buH?!pL;!}*(!}xi*8+?9I#KOH?Lt!m zQf&=wWSGGb4Xcj^(7#rLh09SU8yY89#~ZyG$jVUQS^ByT9!mO~ffm9TNv}LyH|y1a zUFhAL_zYWoT}gO!@~0z51)vU#A-|HJwe92>Q&((v4*cArrC=3&>XGpMb<(bYbG z^4dB7jF?H0K@8yR#YTs&Jls;%-CZg3LOmuMR4wpg%tyCu+>Q<$5H3Z++~Rl!8rsw^ zb}rTp3AK$ryqzC3mP)glIEU(<%^+nDA( z=EI+?|HuwWVbWrC&AEKAytSC`!<`#eDdTY=EuqoiJ8bkhzTBWsKLR=pd?%a!0dZM0tkGtQhZEf0Hj#vmM zO2#bBM66EqE&{CYW84d$9ym`HQ}Gi$w(o|fwy089^p<4R5oPDCA5QYqywv>bGuYrW z{`cAB`qd;}8Ai2>v?jwi86+0dN1W0o_1k=NofPqx6yFEu_mcYrue*@SUIOT{2!M5IW`&ac&Ux#T z=gQso)1oqxAGw%Bfc~7VS^>W#5Vq$KLByw1jSogcO{6R*SvdJEo^)Ord;CfG0hE3g zrG#n?S5*4zya<3W?uzT2<7RsBZfyjjpy*jUPs-9~T}l zEZ63GRJ^4U|53B<6g5dA9D#?cEBp zB*a!Q0-y^gvo$4Idcw_SzOxi{=H(c^N~rUfG|_-fc6}edzCp0IYAXS>HBC4Z6MZAI zE+l{fmZDq+1@JUXg5f}Z&G0*{oaIk1q*1)h1mh|0aTN~yj8olWvLQp-z0c@AMskO- zS$PGTz1Pzcx ztY{)3_icViQrxEt$a{cjxdk<(x--o{XBA^m`zY&&q5L346JB3v>HiA-7b^cQk2S7Tj_xd1_+C5anT`WkAH1h^6iq`?;ibdtI6_B`>Pj0 z9PVC5I6ivy`ek&voA|9ot-k*Lo1^W1i*iC5n#@L|7Ln!O>;9csL?DL35$rQnPi6S@ z?$|{jMCUmRcdfjOf)(S1++1uuFXz22jPYL;@?+vYsX;FhYGB?XQrWy6%yBqKLj!>T z8tTR?qeTLK;i}`5A6Q#CYmB&oM5H+DMXl~#wBtp&7$x)r^xTp{!3$n3q=}xLUMRDm z(sBrZht^kfQ-Kd8DyP`q+LBSEgRcDiUS0BB6}-W0ha>dPbzj;6*nt3S zz0@30+GA)GF8)ilp#cgYQ?FWqQ`0u8V!7BfWsPJ7nUKNL7uV9PY4VVHfjJ!U8BFHV z-ATa=>e?SZL=G;=hg!fgBIHWvUuV$iqqeVY$}B zT_rKN*hb0^O$%8&2K5!s6(ThYp=FO}YpVnpq4I|JvR{6fX3FnZ-;W8_Fw!>kNc+S{ zYs0}Nu(F`Wht6wAimc&Tq{VZPT++D0qE0E{p}GNRWxXrQ2!{4K;PkT1QPXgjiaRft z#rN(C%+S~BX~0xs&{I=+~o31qZ*R8^XI1-`-3UC;%+Ec#F4`0~)s4~?u66V}S-yc=?J2MyYdXanN z27W&>#Z&gSv5Kr3_gVQD4nN8jv=H@Cdun4l+>)#NCrANj%27v`RNg+2V-Dztkf*%r;YH%Ba1{5no=v-n<1H{>h18EXoE zo8fpraFD={NaN*;GB!BIA$bp0neT8ibTf*_~ki z3Fnzdugvi7jq>)q^3djYR)F1FDClkzBloETczNv$RQJ+9mwYZ1v2uT`MS^9OByx9~ zULfE@x+{?8viM@zRR?L_-(gzgt@0%%DTHr@w=twRgxmRDf>Hn^N$=*})V zwDow&F`|6No3n_BHnV>Xp0p5Tp^r4uc*|i^O~pI)xJZjYpqh@bYzg!q^8skNJWAI5 zL+c|2cwJ?@s}1L{i^#BN+0zk3Q&F$?{ewnreTTn1fBn!mUB1!sG6(Ony(_X_$P7W6*ay*tQ9h8rOK;^!!1oM(9aT&5p%%%KYcuFuVuOJ;pRW(gf9wXEpBKtJDTT`s@)VV zt@jdePw(rgsyXpWQIutX??&D85@&(g_3W|M$|P6f)XPi3t`&}19_&Y0GT(#fqTE+UCI&terctf5`r}Tsj6i1+xMiarx^gfE3q|45-bM_mvrhYN0{B=E7V4r8Q zj%<2-HNLqHeo}7Z0^@eWSKaa8op-yc*Vp6DbkApe zmLlEMIOyMn?AfwDwA|pbu%2YfK7>wAmZy%VV|f?pB;D%q6yUF=2_zbMQV-jGF08Po$nd`(z6`% z4n^d-F(i=Rm`&Wd(|UHuY(UZNs@%L~PwmL(0oay*L08t7>XIjU%$oS!Z}mn%LTu?H zo28{W40|*|49zlm)xONj6{QXnb>tKk=No3d>FrfD z@`RgN?Wab;K0@%par0#Y0q}5T?>A*+x{S$0R1B$p-Y===Thxo!q0LX3 zi9L}vQYh#C*}=k3|D@e*8iH_$#dIFOnHa?O)zcKgYZ($|lU=*bFfUkr&=$MsTkJB{ zs}-^*BdC2YNU*gi$=p-QqHB|JAVo&_mTQ7oG;^pV81+AnqaItBf`oY=I8KzuWdwAD zrTCC;GX-%;8^eX3LL(xG=R7hlnK49`$$8QM7SLo#Jad{NX0SF@W}&`LjKwN0&x)ru zA$As}f$J&*n@Z!)$1dP*jE`**(E(T(>PFac0RF&A`bY$z6Z;%(O*~gjv=g)H`2)aD zAb%_0ZC=N29>vE*-JyC9M;3`u8x*K=E47gZ#k_Y8RJg!5a`?C`fg-`>*naR+;}6H< zfZtxe_ZeInRWb1j5%fr^_$7(D^;FTJ^S>XiWHZ(3BX1%Ul8QJH=%RoLHM?{?`sQF< zhrKp_Hmd7aL4+9%NLZv2yETkF3zCI@DHmF{4`3QRRRZ)p0w=&|%aU(x>i} literal 0 HcmV?d00001 diff --git a/frameworks/base/BUILD.gn b/frameworks/base/BUILD.gn new file mode 100644 index 00000000..4966ffdb --- /dev/null +++ b/frameworks/base/BUILD.gn @@ -0,0 +1,114 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +config("ace_base_config") { + include_dirs = [ "//utils/native/base/include" ] +} + +template("ace_base_source_set") { + # get is_ohos_platform + forward_variables_from(invoker, "*") + + ohos_source_set(target_name) { + defines += invoker.defines + deps = [ + "$ace_root:third_party_cjson", + "i18n:ace_base_i18n_$platform", + "resource:ace_resource", + ] + + if (is_ohos_platform) { + deps += [ "$ace_root/adapter/ohos/osal:ace_osal_$platform" ] + } else if (use_mingw_win || use_mac) { + deps += [ "$ace_root/adapter/preview/osal:ace_osal_$platform" ] + } + + configs = [ + ":ace_base_config", + "$ace_root:ace_config", + "//third_party/cJSON:cJSON_config", + ] + + # add base source file here + sources = [ + "geometry/matrix4.cpp", + "json/json_util.cpp", + "log/ace_trace.cpp", + "log/dump_log.cpp", + "memory/memory_monitor.cpp", + "thread/background_task_executor.cpp", + "utils/base_id.cpp", + "utils/date_util.cpp", + "utils/string_utils.cpp", + "utils/time_util.cpp", + ] + + if (is_standard_system) { + configs += [ "//third_party/curl:curl_config" ] + deps += [ "//third_party/curl:curl" ] + sources += [ "network/download_manager.cpp" ] + } + + if (use_mingw_win) { + defines += [ "_USE_MATH_DEFINES" ] + + cflags = [ "-std=c++17" ] + } else { + # add secure c API + sources += [ + "//utils/native/base/src/securec/memset_s.c", + "//utils/native/base/src/securec/securecutil.c", + "//utils/native/base/src/securec/secureprintoutput_a.c", + "//utils/native/base/src/securec/sprintf_s.c", + "//utils/native/base/src/securec/strcat_s.c", + "//utils/native/base/src/securec/strcpy_s.c", + "//utils/native/base/src/securec/vsnprintf_s.c", + "//utils/native/base/src/securec/vsprintf_s.c", + ] + + if (!use_mac) { + # add ashmem API + sources += [ + "//utils/native/base/src/ashmem.cpp", + "//utils/native/base/src/refbase.cpp", + ] + } else { + sources += [ + # This is used only when logs are printed on the MAC platform. + "//utils/native/base/src/securec/snprintf_s.c", + ] + } + } + } +} + +ace_base_source_set("ace_base_ohos") { + defines = ace_ohos_defines + is_ohos_platform = true + platform = "ohos" +} + +ace_base_source_set("ace_base_windows") { + defines = ace_windows_defines + is_ohos_platform = false + platform = "windows" +} + +ace_base_source_set("ace_base_mac") { + defines = ace_mac_defines + is_ohos_platform = false + platform = "mac" +} diff --git a/frameworks/base/geometry/arc.h b/frameworks/base/geometry/arc.h new file mode 100644 index 00000000..26570f9f --- /dev/null +++ b/frameworks/base/geometry/arc.h @@ -0,0 +1,147 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_GEOMETRY_ARC_H +#define FOUNDATION_ACE_FRAMEWORKS_BASE_GEOMETRY_ARC_H + +#include "base/geometry/point.h" +#include "base/utils/utils.h" + +namespace OHOS::Ace { + +class Arc { +public: + Arc() = default; + ~Arc() = default; + + const Point& GetCenterPoint() const + { + return centerPoint_; + } + + void SetCenterPoint(const Point& point) + { + centerPoint_ = point; + } + + double GetRadius() const + { + return radius_; + } + + void SetRadius(double radius) + { + radius_ = radius; + } + + double GetStartAngle() const + { + return startAngle_; + } + + void SetStartAngle(double angle) + { + startAngle_ = angle; + } + + double GetEndAngle() const + { + return endAngle_; + } + + void SetEndAngle(double angle) + { + endAngle_ = angle; + } + + double GetSweepAngle() const + { + return endAngle_ - startAngle_; + } + + void Rotate(const Point& point, double angle) + { + centerPoint_.Rotate(point, angle); + startAngle_ += angle; + endAngle_ += angle; + } + + void Move(double xOffset, double yOffset) + { + centerPoint_.SetX(centerPoint_.GetX() + xOffset); + centerPoint_.SetY(centerPoint_.GetY() + yOffset); + } + + void GetPointByAngle(double angle, Point& out) const + { + out.SetX(centerPoint_.GetX() + radius_); + out.SetY(centerPoint_.GetY()); + out.Rotate(centerPoint_, angle); + } + + void GetStartPoint(Point& out) const + { + GetPointByAngle(startAngle_, out); + } + + void GetEndPoint(Point& out) const + { + GetPointByAngle(endAngle_, out); + } + + Point GetStartPoint() const + { + Point startPoint; + GetStartPoint(startPoint); + return startPoint; + } + + Point GetEndPoint() const + { + Point endPoint; + GetEndPoint(endPoint); + return endPoint; + } + + double GetLeft() const + { + return centerPoint_.GetX() - radius_; + } + + double GetRight() const + { + return centerPoint_.GetX() + radius_; + } + + double GetTop() const + { + return centerPoint_.GetY() - radius_; + } + + double GetBottom() const + { + return centerPoint_.GetY() + radius_; + } + +private: + Point centerPoint_; + double radius_ = 0.0; + double startAngle_ = 0.0; + double endAngle_ = 0.0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BASE_GEOMETRY_ARC_H diff --git a/frameworks/base/geometry/axis.h b/frameworks/base/geometry/axis.h new file mode 100644 index 00000000..5bd4b49d --- /dev/null +++ b/frameworks/base/geometry/axis.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_GEOMETRY_AXIS_H +#define FOUNDATION_ACE_FRAMEWORKS_BASE_GEOMETRY_AXIS_H + +namespace OHOS::Ace { + +enum class Axis { + VERTICAL = 0, + HORIZONTAL, + FREE, +}; + +enum class RotateAxis { + AXIS_X, + AXIS_Y, + AXIS_Z, +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BASE_GEOMETRY_AXIS_H diff --git a/frameworks/base/geometry/dimension.h b/frameworks/base/geometry/dimension.h new file mode 100644 index 00000000..fa251234 --- /dev/null +++ b/frameworks/base/geometry/dimension.h @@ -0,0 +1,196 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_GEOMETRY_DIMENSION_H +#define FOUNDATION_ACE_FRAMEWORKS_BASE_GEOMETRY_DIMENSION_H + +#include "base/utils/macros.h" +#include "base/utils/utils.h" + +namespace OHOS::Ace { + +enum class DimensionUnit { + /* + * Logical pixel used in Ace. It's based on frontend design width. + * For example, when a frontend with 750px design width running on a + * device with 1080 pixels width, 1px represents 1.44 pixels. + */ + PX = 0, + /* + * Density independent pixels, one vp is one pixel on a 160 dpi screen. + */ + VP, + /* + * scale independent pixels, this is like VP but will be scaled by + * user's font size preference. + */ + FP, + /* + * The percentage of either a value from the element's parent or from + * another property of the element itself. + */ + PERCENT, +}; + +/* + * Dimension contains a value and an unit to represent different + * scales in one class. + */ +class Dimension { +public: + constexpr Dimension() = default; + ~Dimension() = default; + constexpr explicit Dimension(double value, DimensionUnit unit = DimensionUnit::PX) : value_(value), unit_(unit) {} + + double Value() const + { + return value_; + } + + void SetValue(double value) + { + value_ = value; + } + + DimensionUnit Unit() const + { + return unit_; + } + + bool IsValid() const + { + return (value_ > 0.0) && (!NearZero(value_)); + } + + double ConvertToPx(double dipScale) const + { + if (unit_ == DimensionUnit::VP || unit_ == DimensionUnit::FP) { + return value_ * dipScale; + } else { + return value_; + } + } + + constexpr Dimension operator*(double value) const + { + return Dimension(value_ * value, unit_); + } + + constexpr Dimension operator/(double value) const + { + // NearZero cannot be used in a constant expression + if (value > 0.0 ? value - 0.0 <= 0.000001f : 0.0 - value <= 0.000001f) { + return Dimension(); + } + return Dimension(value_ / value, unit_); + } + + bool operator==(const Dimension& dimension) const + { + return (unit_ == dimension.unit_) && NearEqual(value_, dimension.value_); + } + + bool operator!=(const Dimension& dimension) const + { + return !operator==(dimension); + } + + /* + * Add two dimensions using the same unit. + */ + constexpr Dimension operator+(const Dimension& dimension) const + { + ACE_DCHECK(unit_ == dimension.unit_); + return Dimension(value_ + dimension.value_, unit_); + } + + /* + * Add a new dimension to itself using same unit. + */ + Dimension& operator+=(const Dimension& dimension) + { + ACE_DCHECK(unit_ == dimension.unit_); + value_ += dimension.value_; + return *this; + } + + /* + * Minus a dimension using the same unit. + */ + constexpr Dimension operator-(const Dimension& dimension) const + { + ACE_DCHECK(unit_ == dimension.unit_); + return Dimension(value_ - dimension.value_, unit_); + } + + /* + * The opposite of dimension. + */ + constexpr Dimension operator-() const + { + return Dimension(-value_, unit_); + } + + /* + * Minus a dimension to itself using the same unit. + */ + Dimension& operator-=(const Dimension& dimension) + { + ACE_DCHECK(unit_ == dimension.unit_); + value_ -= dimension.value_; + return *this; + } + + bool operator>(const Dimension& dimension) const + { + ACE_DCHECK(unit_ == dimension.unit_); + return (value_ > dimension.value_); + } + + bool operator<(const Dimension& dimension) const + { + ACE_DCHECK(unit_ == dimension.unit_); + return (value_ < dimension.value_); + } + +private: + double value_ = 0.0; + DimensionUnit unit_ = DimensionUnit::PX; +}; + +// literal operators for dimension +inline constexpr Dimension operator""_vp(long double value) +{ + return Dimension(static_cast(value), DimensionUnit::VP); +} + +inline constexpr Dimension operator""_px(long double value) +{ + return Dimension(static_cast(value), DimensionUnit::PX); +} + +inline constexpr Dimension operator""_fp(long double value) +{ + return Dimension(static_cast(value), DimensionUnit::FP); +} + +inline constexpr Dimension operator""_pct(long double value) +{ + return Dimension(static_cast(value), DimensionUnit::PERCENT); +} + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BASE_GEOMETRY_DIMENSION_H diff --git a/frameworks/base/geometry/dimension_offset.h b/frameworks/base/geometry/dimension_offset.h new file mode 100644 index 00000000..adfe4a4b --- /dev/null +++ b/frameworks/base/geometry/dimension_offset.h @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_GEOMETRY_DIMENSION_OFFSET_H +#define FOUNDATION_ACE_FRAMEWORKS_BASE_GEOMETRY_DIMENSION_OFFSET_H + +#include +#include + +#include "base/geometry/dimension.h" +#include "base/geometry/offset.h" + +namespace OHOS::Ace { + +class DimensionOffset { +public: + DimensionOffset() = default; + ~DimensionOffset() = default; + DimensionOffset(Dimension deltaX, Dimension deltaY) : deltaX_(deltaX), deltaY_(deltaY) {} + DimensionOffset(Offset offset) : deltaX_(Dimension(offset.GetX(), DimensionUnit::PX)), + deltaY_(Dimension(offset.GetY(), DimensionUnit::PX)) {} + + const Dimension& GetX() const + { + return deltaX_; + } + + const Dimension& GetY() const + { + return deltaY_; + } + + void SetX(Dimension& x) + { + deltaX_ = x; + } + + void SetY(Dimension& y) + { + deltaY_ = y; + } + + DimensionOffset operator+(const DimensionOffset& dimensionOffset) const + { + return DimensionOffset(deltaX_ + dimensionOffset.deltaX_, deltaY_ + dimensionOffset.deltaY_); + } + + DimensionOffset operator-(const DimensionOffset& dimensionOffset) const + { + return DimensionOffset(deltaX_ - dimensionOffset.deltaX_, deltaY_ - dimensionOffset.deltaY_); + } + + DimensionOffset operator*(double value) const + { + return DimensionOffset(deltaX_ * value, deltaY_ * value); + } + +private: + Dimension deltaX_; + Dimension deltaY_; +}; + +} + +#endif // FOUNDATION_ACE_FRAMEWORKS_BASE_GEOMETRY_DIMENSION_OFFSET_H diff --git a/frameworks/base/geometry/matrix4.cpp b/frameworks/base/geometry/matrix4.cpp new file mode 100644 index 00000000..26a196a6 --- /dev/null +++ b/frameworks/base/geometry/matrix4.cpp @@ -0,0 +1,308 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "base/geometry/matrix4.h" + +#include + +#include "base/utils/utils.h" + +namespace OHOS::Ace { +namespace { + +constexpr int32_t MATRIX_LENGTH = Matrix4::DIMENSION * Matrix4::DIMENSION; + +inline bool IsEqual(const float& left, const float& right) +{ + return NearEqual(left, right); +} + +} // namespace + +Matrix4 Matrix4::CreateIdentity() +{ + return Matrix4( + 1.0f, 0.0f, 0.0f, 0.0f, + 0.0f, 1.0f, 0.0f, 0.0f, + 0.0f, 0.0f, 1.0f, 0.0f, + 0.0f, 0.0f, 0.0f, 1.0f); +} + +Matrix4 Matrix4::CreateTranslate(float x, float y, float z) +{ + return Matrix4( + 1.0f, 0.0f, 0.0f, x, + 0.0f, 1.0f, 0.0f, y, + 0.0f, 0.0f, 1.0f, z, + 0.0f, 0.0f, 0.0f, 1.0f); +} + +Matrix4 Matrix4::CreateScale(float x, float y, float z) +{ + return Matrix4( + x, 0.0f, 0.0f, 0.0f, + 0.0f, y, 0.0f, 0.0f, + 0.0f, 0.0f, z, 0.0f, + 0.0f, 0.0f, 0.0f, 1.0f); +} + +Matrix4 Matrix4::CreateRotate(float angle, float dx, float dy, float dz) +{ + // (x,y,z) need normalize + float sum = dx * dx + dy * dy + dz * dz; + if (NearZero(sum)) { + return Matrix4::CreateIdentity(); + } + + float x = dx / sqrt(sum); + float y = dy / sqrt(sum); + float z = dz / sqrt(sum); + float redian = static_cast(angle * (M_PI / 180.0f)); + float cosValue = cosf(redian); + float sinValue = sinf(redian); + + return Matrix4(cosValue + (x * x * (1.0f - cosValue)), (x * y * (1.0f - cosValue)) - (z * sinValue), + (x * z * (1.0f - cosValue)) + (y * sinValue), 0.0f, (y * x * (1.0f - cosValue)) + (z * sinValue), + cosValue + (y * y * (1.0f - cosValue)), (y * z * (1.0f - cosValue)) - (x * sinValue), 0.0f, + (z * x * (1.0f - cosValue)) - (y * sinValue), (z * y * (1.0f - cosValue)) + (x * sinValue), + cosValue + (z * z * (1.0f - cosValue)), 0.0f, 0.0f, 0.0f, 0.0f, 1.0f); +} + +Matrix4 Matrix4::Invert(const Matrix4& matrix) +{ + Matrix4 inverted = CreateInvert(matrix); + float determinant = matrix(0, 0) * inverted(0, 0) + + matrix(0, 1) * inverted(1, 0) + + matrix(0, 2) * inverted(2, 0) + + matrix(0, 3) * inverted(3, 0); + + if (!NearZero(determinant)) { + inverted = inverted * (1.0f / determinant); + } else { + inverted = CreateIdentity(); + } + + return inverted; +} + +Matrix4::Matrix4() + : Matrix4(1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f) +{} + +Matrix4::Matrix4(const Matrix4& matrix) +{ + std::copy_n(&matrix.matrix4x4_[0][0], MATRIX_LENGTH, &matrix4x4_[0][0]); +} + +Matrix4::Matrix4(float m00, float m01, float m02, float m03, float m10, float m11, float m12, float m13, float m20, + float m21, float m22, float m23, float m30, float m31, float m32, float m33) +{ + matrix4x4_[0][0] = m00; + matrix4x4_[1][0] = m01; + matrix4x4_[2][0] = m02; + matrix4x4_[3][0] = m03; + matrix4x4_[0][1] = m10; + matrix4x4_[1][1] = m11; + matrix4x4_[2][1] = m12; + matrix4x4_[3][1] = m13; + matrix4x4_[0][2] = m20; + matrix4x4_[1][2] = m21; + matrix4x4_[2][2] = m22; + matrix4x4_[3][2] = m23; + matrix4x4_[0][3] = m30; + matrix4x4_[1][3] = m31; + matrix4x4_[2][3] = m32; + matrix4x4_[3][3] = m33; +} + +void Matrix4::SetScale(float x, float y, float z) +{ + // The 4X4 matrix scale index is [0][0], [1][1], [2][2], [3][3]. + matrix4x4_[0][0] = x; + matrix4x4_[1][1] = y; + matrix4x4_[2][2] = z; + matrix4x4_[3][3] = 1.0f; +} + +float Matrix4::GetScaleX() const +{ + return matrix4x4_[0][0]; +} + +float Matrix4::GetScaleY() const +{ + return matrix4x4_[1][1]; +} + +void Matrix4::SetEntry(int32_t row, int32_t col, float value) +{ + if ((row < 0 || row >= DIMENSION) || (col < 0 || col >= DIMENSION)) { + return; + } + matrix4x4_[row][col] = value; +} + +bool Matrix4::IsIdentityMatrix() const +{ + return *this == CreateIdentity(); +} + +void Matrix4::Rotate(float angle, float dx, float dy, float dz) +{ + Matrix4 transform = *this; + *this = transform * CreateRotate(angle, dx, dy, dz); +} + +int32_t Matrix4::Count() const +{ + return MATRIX_LENGTH; +} + +Matrix4 Matrix4::CreateInvert(const Matrix4& matrix) +{ + return Matrix4( + matrix(1, 1) * matrix(2, 2) * matrix(3, 3) - matrix(1, 1) * matrix(2, 3) * matrix(3, 2) - + matrix(2, 1) * matrix(1, 2) * matrix(3, 3) + matrix(2, 1) * matrix(1, 3) * matrix(3, 2) + + matrix(3, 1) * matrix(1, 2) * matrix(2, 3) - matrix(3, 1) * matrix(1, 3) * matrix(2, 2), + -matrix(1, 0) * matrix(2, 2) * matrix(3, 3) + matrix(1, 0) * matrix(2, 3) * matrix(3, 2) + + matrix(2, 0) * matrix(1, 2) * matrix(3, 3) - matrix(2, 0) * matrix(1, 3) * matrix(3, 2) - + matrix(3, 0) * matrix(1, 2) * matrix(2, 3) + matrix(3, 0) * matrix(1, 3) * matrix(2, 2), + matrix(1, 0) * matrix(2, 1) * matrix(3, 3) - matrix(1, 0) * matrix(2, 3) * matrix(3, 1) - + matrix(2, 0) * matrix(1, 1) * matrix(3, 3) + matrix(2, 0) * matrix(1, 3) * matrix(3, 1) + + matrix(3, 0) * matrix(1, 1) * matrix(2, 3) - matrix(3, 0) * matrix(1, 3) * matrix(2, 1), + -matrix(1, 0) * matrix(2, 1) * matrix(3, 2) + matrix(1, 0) * matrix(2, 2) * matrix(3, 1) + + matrix(2, 0) * matrix(1, 1) * matrix(3, 2) - matrix(2, 0) * matrix(1, 2) * matrix(3, 1) - + matrix(3, 0) * matrix(1, 1) * matrix(2, 2) + matrix(3, 0) * matrix(1, 2) * matrix(2, 1), + -matrix(0, 1) * matrix(2, 2) * matrix(3, 3) + matrix(0, 1) * matrix(2, 3) * matrix(3, 2) + + matrix(2, 1) * matrix(0, 2) * matrix(3, 3) - matrix(2, 1) * matrix(0, 3) * matrix(3, 2) - + matrix(3, 1) * matrix(0, 2) * matrix(2, 3) + matrix(3, 1) * matrix(0, 3) * matrix(2, 2), + matrix(0, 0) * matrix(2, 2) * matrix(3, 3) - matrix(0, 0) * matrix(2, 3) * matrix(3, 2) - + matrix(2, 0) * matrix(0, 2) * matrix(3, 3) + matrix(2, 0) * matrix(0, 3) * matrix(3, 2) + + matrix(3, 0) * matrix(0, 2) * matrix(2, 3) - matrix(3, 0) * matrix(0, 3) * matrix(2, 2), + -matrix(0, 0) * matrix(2, 1) * matrix(3, 3) + matrix(0, 0) * matrix(2, 3) * matrix(3, 1) + + matrix(2, 0) * matrix(0, 1) * matrix(3, 3) - matrix(2, 0) * matrix(0, 3) * matrix(3, 1) - + matrix(3, 0) * matrix(0, 1) * matrix(2, 3) + matrix(3, 0) * matrix(0, 3) * matrix(2, 1), + matrix(0, 0) * matrix(2, 1) * matrix(3, 2) - matrix(0, 0) * matrix(2, 2) * matrix(3, 1) - + matrix(2, 0) * matrix(0, 1) * matrix(3, 2) + matrix(2, 0) * matrix(0, 2) * matrix(3, 1) + + matrix(3, 0) * matrix(0, 1) * matrix(2, 2) - matrix(3, 0) * matrix(0, 2) * matrix(2, 1), + matrix(0, 1) * matrix(1, 2) * matrix(3, 3) - matrix(0, 1) * matrix(1, 3) * matrix(3, 2) - + matrix(1, 1) * matrix(0, 2) * matrix(3, 3) + matrix(1, 1) * matrix(0, 3) * matrix(3, 2) + + matrix(3, 1) * matrix(0, 2) * matrix(1, 3) - matrix(3, 1) * matrix(0, 3) * matrix(1, 2), + -matrix(0, 0) * matrix(1, 2) * matrix(3, 3) + matrix(0, 0) * matrix(1, 3) * matrix(3, 2) + + matrix(1, 0) * matrix(0, 2) * matrix(3, 3) - matrix(1, 0) * matrix(0, 3) * matrix(3, 2) - + matrix(3, 0) * matrix(0, 2) * matrix(1, 3) + matrix(3, 0) * matrix(0, 3) * matrix(1, 2), + matrix(0, 0) * matrix(1, 1) * matrix(3, 3) - matrix(0, 0) * matrix(1, 3) * matrix(3, 1) - + matrix(1, 0) * matrix(0, 1) * matrix(3, 3) + matrix(1, 0) * matrix(0, 3) * matrix(3, 1) + + matrix(3, 0) * matrix(0, 1) * matrix(1, 3) - matrix(3, 0) * matrix(0, 3) * matrix(1, 1), + -matrix(0, 0) * matrix(1, 1) * matrix(3, 2) + matrix(0, 0) * matrix(1, 2) * matrix(3, 1) + + matrix(1, 0) * matrix(0, 1) * matrix(3, 2) - matrix(1, 0) * matrix(0, 2) * matrix(3, 1) - + matrix(3, 0) * matrix(0, 1) * matrix(1, 2) + matrix(3, 0) * matrix(0, 2) * matrix(1, 1), + -matrix(0, 1) * matrix(1, 2) * matrix(2, 3) + matrix(0, 1) * matrix(1, 3) * matrix(2, 2) + + matrix(1, 1) * matrix(0, 2) * matrix(2, 3) - matrix(1, 1) * matrix(0, 3) * matrix(2, 2) - + matrix(2, 1) * matrix(0, 2) * matrix(1, 3) + matrix(2, 1) * matrix(0, 3) * matrix(1, 2), + matrix(0, 0) * matrix(1, 2) * matrix(2, 3) - matrix(0, 0) * matrix(1, 3) * matrix(2, 2) - + matrix(1, 0) * matrix(0, 2) * matrix(2, 3) + matrix(1, 0) * matrix(0, 3) * matrix(2, 2) + + matrix(2, 0) * matrix(0, 2) * matrix(1, 3) - matrix(2, 0) * matrix(0, 3) * matrix(1, 2), + -matrix(0, 0) * matrix(1, 1) * matrix(2, 3) + matrix(0, 0) * matrix(1, 3) * matrix(2, 1) + + matrix(1, 0) * matrix(0, 1) * matrix(2, 3) - matrix(1, 0) * matrix(0, 3) * matrix(2, 1) - + matrix(2, 0) * matrix(0, 1) * matrix(1, 3) + matrix(2, 0) * matrix(0, 3) * matrix(1, 1), + matrix(0, 0) * matrix(1, 1) * matrix(2, 2) - matrix(0, 0) * matrix(1, 2) * matrix(2, 1) - + matrix(1, 0) * matrix(0, 1) * matrix(2, 2) + matrix(1, 0) * matrix(0, 2) * matrix(2, 1) + + matrix(2, 0) * matrix(0, 1) * matrix(1, 2) - matrix(2, 0) * matrix(0, 2) * matrix(1, 1)); +} + +bool Matrix4::operator==(const Matrix4& matrix) const +{ + return std::equal(&matrix4x4_[0][0], &matrix4x4_[0][0] + MATRIX_LENGTH, &matrix.matrix4x4_[0][0], IsEqual); +} + +Matrix4 Matrix4::operator*(float num) +{ + Matrix4 ret(*this); + std::for_each_n(&ret.matrix4x4_[0][0], MATRIX_LENGTH, [num](float& v) { v *= num; }); + return ret; +} + +Matrix4 Matrix4::operator*(const Matrix4& matrix) +{ + return Matrix4( + matrix4x4_[0][0] * matrix(0, 0) + matrix4x4_[1][0] * matrix(0, 1) + matrix4x4_[2][0] * matrix(0, 2) + + matrix4x4_[3][0] * matrix(0, 3), + matrix4x4_[0][0] * matrix(1, 0) + matrix4x4_[1][0] * matrix(1, 1) + matrix4x4_[2][0] * matrix(1, 2) + + matrix4x4_[3][0] * matrix(1, 3), + matrix4x4_[0][0] * matrix(2, 0) + matrix4x4_[1][0] * matrix(2, 1) + matrix4x4_[2][0] * matrix(2, 2) + + matrix4x4_[3][0] * matrix(2, 3), + matrix4x4_[0][0] * matrix(3, 0) + matrix4x4_[1][0] * matrix(3, 1) + matrix4x4_[2][0] * matrix(3, 2) + + matrix4x4_[3][0] * matrix(3, 3), + matrix4x4_[0][1] * matrix(0, 0) + matrix4x4_[1][1] * matrix(0, 1) + matrix4x4_[2][1] * matrix(0, 2) + + matrix4x4_[3][1] * matrix(0, 3), + matrix4x4_[0][1] * matrix(1, 0) + matrix4x4_[1][1] * matrix(1, 1) + matrix4x4_[2][1] * matrix(1, 2) + + matrix4x4_[3][1] * matrix(1, 3), + matrix4x4_[0][1] * matrix(2, 0) + matrix4x4_[1][1] * matrix(2, 1) + matrix4x4_[2][1] * matrix(2, 2) + + matrix4x4_[3][1] * matrix(2, 3), + matrix4x4_[0][1] * matrix(3, 0) + matrix4x4_[1][1] * matrix(3, 1) + matrix4x4_[2][1] * matrix(3, 2) + + matrix4x4_[3][1] * matrix(3, 3), + matrix4x4_[0][2] * matrix(0, 0) + matrix4x4_[1][2] * matrix(0, 1) + matrix4x4_[2][2] * matrix(0, 2) + + matrix4x4_[3][2] * matrix(0, 3), + matrix4x4_[0][2] * matrix(1, 0) + matrix4x4_[1][2] * matrix(1, 1) + matrix4x4_[2][2] * matrix(1, 2) + + matrix4x4_[3][2] * matrix(1, 3), + matrix4x4_[0][2] * matrix(2, 0) + matrix4x4_[1][2] * matrix(2, 1) + matrix4x4_[2][2] * matrix(2, 2) + + matrix4x4_[3][2] * matrix(2, 3), + matrix4x4_[0][2] * matrix(3, 0) + matrix4x4_[1][2] * matrix(3, 1) + matrix4x4_[2][2] * matrix(3, 2) + + matrix4x4_[3][2] * matrix(3, 3), + matrix4x4_[0][3] * matrix(0, 0) + matrix4x4_[1][3] * matrix(0, 1) + matrix4x4_[2][3] * matrix(0, 2) + + matrix4x4_[3][3] * matrix(0, 3), + matrix4x4_[0][3] * matrix(1, 0) + matrix4x4_[1][3] * matrix(1, 1) + matrix4x4_[2][3] * matrix(1, 2) + + matrix4x4_[3][3] * matrix(1, 3), + matrix4x4_[0][3] * matrix(2, 0) + matrix4x4_[1][3] * matrix(2, 1) + matrix4x4_[2][3] * matrix(2, 2) + + matrix4x4_[3][3] * matrix(2, 3), + matrix4x4_[0][3] * matrix(3, 0) + matrix4x4_[1][3] * matrix(3, 1) + matrix4x4_[2][3] * matrix(3, 2) + + matrix4x4_[3][3] * matrix(3, 3)); +} + +Point Matrix4::operator*(const Point& point) +{ + double x = point.GetX(); + double y = point.GetY(); + return Point(matrix4x4_[0][0] * x + matrix4x4_[1][0] * y + matrix4x4_[3][0], + matrix4x4_[0][1] * x + matrix4x4_[1][1] * y + matrix4x4_[3][1]); +} + +Matrix4& Matrix4::operator=(const Matrix4& matrix) +{ + if (this == &matrix) { + return *this; + } + std::copy_n(&matrix.matrix4x4_[0][0], MATRIX_LENGTH, &matrix4x4_[0][0]); + return *this; +} + +float Matrix4::operator[](int32_t index) const +{ + if (index < 0 || index >= MATRIX_LENGTH) { + return 0.0f; + } + int32_t row = index / DIMENSION; + int32_t col = index % DIMENSION; + return matrix4x4_[row][col]; +} + +float Matrix4::operator()(int32_t row, int32_t col) const +{ + // Caller guarantee row and col in range of [0, 3]. + return matrix4x4_[row][col]; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/base/geometry/matrix4.h b/frameworks/base/geometry/matrix4.h new file mode 100644 index 00000000..603dcf6e --- /dev/null +++ b/frameworks/base/geometry/matrix4.h @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_GEOMETRY_MATRIX4_H +#define FOUNDATION_ACE_FRAMEWORKS_BASE_GEOMETRY_MATRIX4_H + +#include "base/geometry/point.h" + +namespace OHOS::Ace { + +class ACE_EXPORT Matrix4 final { +public: + // Matrix dimension is 4X4. + static constexpr int32_t DIMENSION = 4; + // Crate an identity matrix. + static Matrix4 CreateIdentity(); + // Multiplies this matrix by another that translates coordinates by the vector (x, y, z). + static Matrix4 CreateTranslate(float x, float y, float z); + // Multiplies this matrix by another that scales coordinates by the vector (x, y, z). + static Matrix4 CreateScale(float x, float y, float z); + // Multiplies this matrix by another that rotates coordinates through angle degrees about the vector (dx, dy, dz). + static Matrix4 CreateRotate(float angle, float dx, float dy, float dz); + // Returns the inverse of this matrix. Returns the identity if this matrix cannot be inverted; + static Matrix4 Invert(const Matrix4& matrix); + + Matrix4(); + Matrix4(const Matrix4& matrix); + Matrix4( + float m00, float m01, float m02, float m03, + float m10, float m11, float m12, float m13, + float m20, float m21, float m22, float m23, + float m30, float m31, float m32, float m33); + ~Matrix4() = default; + void SetScale(float x, float y, float z); + float GetScaleX() const; + float GetScaleY() const; + void Rotate(float angle, float dx, float dy, float dz); + void SetEntry(int32_t row, int32_t col, float value); + bool IsIdentityMatrix() const; + int32_t Count() const; + + bool operator==(const Matrix4& matrix) const; + Matrix4 operator*(float num); + Matrix4 operator*(const Matrix4& matrix); + // Transform point by the matrix + Point operator*(const Point& point); + Matrix4& operator=(const Matrix4& matrix); + float operator[](int32_t index) const; + +private: + static Matrix4 CreateInvert(const Matrix4& matrix); + float operator()(int32_t row, int32_t col) const; + + float matrix4x4_[DIMENSION][DIMENSION] = { + { 0.0f, 0.0f, 0.0f, 0.0f }, + { 0.0f, 0.0f, 0.0f, 0.0f }, + { 0.0f, 0.0f, 0.0f, 0.0f }, + { 0.0f, 0.0f, 0.0f, 0.0f }, + }; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BASE_GEOMETRY_MATRIX4_H diff --git a/frameworks/base/geometry/offset.h b/frameworks/base/geometry/offset.h new file mode 100644 index 00000000..304b6738 --- /dev/null +++ b/frameworks/base/geometry/offset.h @@ -0,0 +1,150 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_GEOMETRY_OFFSET_H +#define FOUNDATION_ACE_FRAMEWORKS_BASE_GEOMETRY_OFFSET_H + +#include +#include + +#include "base/geometry/size.h" +#include "base/utils/utils.h" + +namespace OHOS::Ace { + +class Offset { +public: + Offset() = default; + ~Offset() = default; + Offset(double deltaX, double deltaY) : deltaX_(deltaX), deltaY_(deltaY) {} + + void Reset() + { + deltaX_ = 0.0; + deltaY_ = 0.0; + } + + static Offset Zero() + { + return Offset(); + } + + static Offset ErrorOffset() + { + return Offset((std::numeric_limits::max)(), (std::numeric_limits::max)()); + } + + bool IsZero() const + { + return operator==(Offset()); + } + + bool IsErrorOffset() const + { + return operator==(ErrorOffset()); + } + + double GetX() const + { + return deltaX_; + } + + double GetY() const + { + return deltaY_; + } + + void SetX(double x) + { + deltaX_ = x; + } + + void SetY(double y) + { + deltaY_ = y; + } + + double GetDistance() const + { + return std::sqrt((deltaX_ * deltaX_) + (deltaY_ * deltaY_)); + } + + Offset operator+(const Offset& offset) const + { + return Offset(deltaX_ + offset.deltaX_, deltaY_ + offset.deltaY_); + } + + Offset operator+(const Size& size) const + { + return Offset(deltaX_ + size.Width(), deltaY_ + size.Height()); + } + + Offset operator-(const Offset& offset) const + { + return Offset(deltaX_ - offset.deltaX_, deltaY_ - offset.deltaY_); + } + + Offset operator*(double value) const + { + return Offset(deltaX_ * value, deltaY_ * value); + } + + Offset operator/(double value) const + { + if (NearZero(value)) { + return ErrorOffset(); + } + return Offset(deltaX_ / value, deltaY_ / value); + } + + Offset& operator+=(const Offset& offset) + { + deltaX_ += offset.deltaX_; + deltaY_ += offset.deltaY_; + return *this; + } + + bool operator==(const Offset& offset) const + { + return NearEqual(deltaX_, offset.deltaX_) && NearEqual(deltaY_, offset.deltaY_); + } + + bool operator!=(const Offset& offset) const + { + return !operator==(offset); + } + + std::string ToString() const + { + return std::string("Offset (") + .append(std::to_string(deltaX_)) + .append(", ") + .append(std::to_string(deltaY_)) + .append(")"); + } + + bool IsPositiveOffset() const + { + return deltaX_ >= 0 && deltaY_ >= 0; + } + +private: + double deltaX_ = 0.0; + double deltaY_ = 0.0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BASE_GEOMETRY_OFFSET_H diff --git a/frameworks/base/geometry/point.h b/frameworks/base/geometry/point.h new file mode 100644 index 00000000..920cfd20 --- /dev/null +++ b/frameworks/base/geometry/point.h @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_GEOMETRY_POINT_H +#define FOUNDATION_ACE_FRAMEWORKS_BASE_GEOMETRY_POINT_H + +#include "base/geometry/offset.h" +#include "base/utils/macros.h" +#include "base/utils/utils.h" + +namespace OHOS::Ace { + +class ACE_EXPORT Point { +public: + Point() = default; + ~Point() = default; + Point(double x, double y) : x_(x), y_(y) {} + + double GetX() const + { + return x_; + } + + double GetY() const + { + return y_; + } + + void SetX(double x) + { + x_ = x; + } + + void SetY(double y) + { + y_ = y; + } + + void Rotate(const Point& center, double angle) + { + double x = (x_ - center.GetX()) * std::cos(angle) - (y_ - center.GetY()) * std::sin(angle) + center.GetX(); + double y = (x_ - center.GetX()) * std::sin(angle) + (y_ - center.GetY()) * std::cos(angle) + center.GetY(); + x_ = x; + y_ = y; + } + + Point operator-(const Offset& offset) const + { + return Point(x_ - offset.GetX(), y_ - offset.GetY()); + } + + Point operator+(const Offset& offset) const + { + return Point(x_ + offset.GetX(), y_ + offset.GetY()); + } + + Offset operator-(const Point& point) const + { + return Offset(x_ - point.x_, y_ - point.y_); + } + + bool operator==(const Point& point) const + { + return NearEqual(x_, point.x_) && NearEqual(y_, point.y_); + } + + bool operator!=(const Point& point) const + { + return !operator==(point); + } + +private: + double x_ = 0.0; + double y_ = 0.0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BASE_GEOMETRY_POINT_H diff --git a/frameworks/base/geometry/rect.h b/frameworks/base/geometry/rect.h new file mode 100644 index 00000000..d0e802f8 --- /dev/null +++ b/frameworks/base/geometry/rect.h @@ -0,0 +1,389 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_GEOMETRY_RECT_H +#define FOUNDATION_ACE_FRAMEWORKS_BASE_GEOMETRY_RECT_H + +#include + +#include "base/geometry/offset.h" +#include "base/geometry/point.h" +#include "base/geometry/size.h" + +namespace OHOS::Ace { + +class Rect { +public: + Rect() = default; + ~Rect() = default; + + Rect(double x, double y, double width, double height) + { + SetRect(x, y, width, height); + } + + Rect(const Offset& offset, const Size& size) + { + SetOffset(offset); + SetSize(size); + } + + void SetRect(double x, double y, double width, double height) + { + x_ = x; + y_ = y; + width_ = width; + height_ = height; + } + + void SetRect(const Offset& offset, const Size& size) + { + SetOffset(offset); + SetSize(size); + } + + void ApplyScale(double scale) + { + x_ *= scale; + y_ *= scale; + width_ *= scale; + height_ *= scale; + } + + void ApplyScaleAndRound(const Size& scale) + { + x_ = round(x_ * scale.Width()); + y_ = round(y_ * scale.Height()); + width_ = round(width_ * scale.Width()); + height_ = round(height_ * scale.Height()); + } + + double Left() const + { + return width_ > 0.0 ? x_ : x_ + width_; + } + + double Top() const + { + return height_ > 0.0 ? y_ : y_ + height_; + } + + double Right() const + { + return width_ > 0.0 ? x_ + width_ : x_; + } + + double Bottom() const + { + return height_ > 0.0 ? y_ + height_ : y_; + } + + double Width() const + { + return width_; + } + + double Height() const + { + return height_; + } + + void SetSize(const Size& size) + { + width_ = size.Width(); + height_ = size.Height(); + } + + Size GetSize() const + { + return Size(width_, height_); + } + + void SetOffset(const Offset& offset) + { + x_ = offset.GetX(); + y_ = offset.GetY(); + } + + Offset GetOffset() const + { + return Offset(x_, y_); + } + + void SetLeft(double left) + { + x_ = left; + } + + void SetTop(double top) + { + y_ = top; + } + + void SetWidth(double width) + { + width_ = width; + } + + void SetHeight(double height) + { + height_ = height; + } + + bool IsInRegion(const Point& point) const + { + return (point.GetX() > x_) && (point.GetX() < (x_ + width_)) && (point.GetY() > y_) && + (point.GetY() < (y_ + height_)); + } + + bool IsWrappedBy(const Rect& other) const + { + return (Left() >= other.Left()) && (Right() <= other.Right()) && (Top() >= other.Top()) && + (Bottom() <= other.Bottom()); + } + + bool IsValid() const + { + return width_ > 0.0 && height_ > 0.0; + } + + Rect Constrain(const Rect& other) + { + double right = Right(); + double bottom = Bottom(); + double left = std::clamp(x_, other.Left(), other.Right()); + double top = std::clamp(y_, other.Top(), other.Bottom()); + right = std::clamp(right, other.Left(), other.Right()) - left; + bottom = std::clamp(bottom, other.Top(), other.Bottom()) - top; + return Rect(left, top, right, bottom); + } + + Rect& operator+=(const Offset& offset) + { + x_ += offset.GetX(); + y_ += offset.GetY(); + return *this; + } + + Rect& operator-=(const Offset& offset) + { + x_ -= offset.GetX(); + y_ -= offset.GetY(); + return *this; + } + + Rect& operator+=(const Size& size) + { + width_ += size.Width(); + height_ += size.Height(); + return *this; + } + + Rect& operator-=(const Size& size) + { + width_ -= size.Width(); + height_ -= size.Height(); + return *this; + } + + Rect operator+(const Offset& offset) const + { + return Rect(x_ + offset.GetX(), y_ + offset.GetY(), width_, height_); + } + + Rect operator-(const Offset& offset) const + { + return Rect(x_ - offset.GetX(), y_ - offset.GetY(), width_, height_); + } + + Rect operator+(const Size& size) const + { + return Rect(x_, y_, width_ + size.Width(), height_ + size.Height()); + } + + Rect operator-(const Size& size) const + { + return Rect(x_, y_, width_ - size.Width(), height_ - size.Height()); + } + + Rect operator*(double scale) const + { + return Rect(x_ * scale, y_ * scale, width_ * scale, height_ * scale); + } + + bool operator==(const Rect& rect) const + { + return (GetOffset() == rect.GetOffset()) && (GetSize() == rect.GetSize()); + } + + bool operator!=(const Rect& rect) const + { + return !operator==(rect); + } + + bool IsIntersectWith(const Rect& other) const + { + return !(other.Right() < Left() || other.Left() > Right() || other.Bottom() < Top() || other.Top() > Bottom()); + } + + Rect IntersectRect(const Rect& other) const + { + double left = std::max(Left(), other.Left()); + double right = std::min(Right(), other.Right()); + double top = std::max(Top(), other.Top()); + double bottom = std::min(Bottom(), other.Bottom()); + return Rect(left, top, right - left, bottom - top); + } + + Rect CombineRect(const Rect& other) const + { + double left = std::min(Left(), other.Left()); + double right = std::max(Right(), other.Right()); + double top = std::min(Top(), other.Top()); + double bottom = std::max(Bottom(), other.Bottom()); + return Rect(left, top, right - left, bottom - top); + } + + /** + * @brief Magnetically attracted to a "magnetic" rect. + * + * Let's show some cases to illustrate how this method works: + * + * Case 1 : Inside. Rect won't be move because it is already attracted by magnet. + * Result: Offset(0, 0) + * + * +-----------------------------+ + * | | + * | Magnetical Rect | + * | | + * | +-------+ | + * | | R | | + * | | | | + * | +-------+ | + * +-----------------------------+ + * + * Case 2: Outside. R will be attracted to position R' + * Result: Offset(-12, -3) + * + * +-----------------------+ + * | | + * | Magnetical Rect +--+ + * | | | + * | |R'| +--+ + * +-----------------------+ |R | + * | | + * +--+ + * + * Case 3: Half Inside. R will be moved totally into magnet. + * Result: Offset(-8, 0) + * + * +-----------------------------+ +-----------------------------+ + * | | | | + * | Magnetical Rect | +----------> | Magnetical Rect | + * | | | | + * | +----------+ | +----------+ + * | | | R | | | R' | + * | +----------+ | +----------+ + * | | | | + * +-----------------------------+ +-----------------------------+ + * + * Case 4: Outside or Half Outside but space not enough. R will be moved into magnet as more as possible. + * Result: Offset(0, 1) + * + * +--+ + * | | +--+ + * |R | | | + * | | |R'| + * +---------------------------+ +---------------------------+ + * | | | | | | | | + * | Magnetical Rect | | | +-----> | Magnetical Rect | | | + * | +--+ | | | | | + * +---------------------------+ +------------------+--+-----+ + * + * Case 5: Totally Across magnet. Nothing should happen. + * Result: Offset(0, 0) + * + * +--+ + * | | + * |R | + * | | + * +---------------------------+ + * | | | | + * | Magnetical Rect | | | + * | | | | + * +---------------------------+ + * | | + * +--+ + * + * @param[in] magnet The magnetical rectangle. + * + * @return The offset that this rect need to moving into magnet. + */ + Offset MagneticAttractedBy(const Rect& magnet) + { + Offset offset = Offset::Zero(); + if (IsWrappedBy(magnet)) { + return Offset::Zero(); + } + + if (Left() < magnet.Left()) { + offset.SetX(std::max(0.0, std::min(magnet.Left() - Left(), magnet.Right() - Right()))); + } else if (Right() > magnet.Right()) { + offset.SetX(std::min(0.0, std::max(magnet.Left() - Left(), magnet.Right() - Right()))); + } else { + // No need to offset. + } + + if (Top() < magnet.Top()) { + offset.SetY(std::max(0.0, std::min(magnet.Top() - Top(), magnet.Bottom() - Bottom()))); + } else if (Bottom() > magnet.Bottom()) { + offset.SetY(std::min(0.0, std::max(magnet.Top() - Top(), magnet.Bottom() - Bottom()))); + } else { + // No need to offset. + } + + *this += offset; + + return offset; + } + + std::string ToString() const + { + return std::string("Rect (") + .append(std::to_string(x_)) + .append(", ") + .append(std::to_string(y_)) + .append(") - [") + .append(NearEqual(width_, Size::INFINITE_SIZE) ? "INFINITE" : std::to_string(width_)) + .append(" x ") + .append(NearEqual(height_, Size::INFINITE_SIZE) ? "INFINITE" : std::to_string(height_)) + .append("]"); + } + + Offset Center() const + { + return Offset(width_ / 2.0 + x_, height_ / 2.0 + y_); + } + +private: + double x_ = 0.0; + double y_ = 0.0; + double width_ = 0.0; + double height_ = 0.0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BASE_GEOMETRY_RECT_H diff --git a/frameworks/base/geometry/rrect.h b/frameworks/base/geometry/rrect.h new file mode 100644 index 00000000..75b8d0d3 --- /dev/null +++ b/frameworks/base/geometry/rrect.h @@ -0,0 +1,167 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_GEOMETRY_RRECT_H +#define FOUNDATION_ACE_FRAMEWORKS_BASE_GEOMETRY_RRECT_H + +#include +#include +#include + +#include "base/geometry/rect.h" +#include "core/components/common/properties/radius.h" + +namespace OHOS::Ace { + +struct Corner { + Radius topLeftRadius; + Radius topRightRadius; + Radius bottomRightRadius; + Radius bottomLeftRadius; +}; + +class RRect final { +public: + RRect() = default; + ~RRect() = default; + + explicit RRect(const Rect& rect) : rect_(rect) {} + RRect(double x, double y, double width, double height) + { + rect_.SetRect(x, y, width, height); + } + + static RRect MakeRect(const Rect& rect) + { + RRect rrect; + rrect.SetRect(rect); + return rrect; + } + + static RRect MakeRRect(const Rect& rect, const Radius& radius) + { + RRect rrect; + rrect.SetRectWithSimpleRadius(rect, radius.GetX().Value(), radius.GetY().Value()); + return rrect; + } + + static RRect MakeRRect(const Rect& rect, double x, double y) + { + RRect rrect; + rrect.SetRectWithSimpleRadius(rect, x, y); + return rrect; + } + + static RRect MakeOval(const Rect& rect) + { + RRect rrect; + rrect.SetOval(rect); + return rrect; + } + + const Rect& GetRect() const + { + return rect_; + } + + const Corner& GetCorner() const + { + return corner_; + } + + void SetRect(const Rect& rect) + { + rect_ = rect; + } + + void SetCorner(const Corner& corner) + { + corner_ = corner; + } + + void SetRectWithSimpleRadius(const Rect& rect, double xRadius, double yRadius) + { + rect_ = rect; + if (xRadius <= 0 || yRadius <= 0) { + return; + } + if (rect_.Width() < (xRadius + xRadius) || rect.Height() < (yRadius + yRadius)) { + double scale = std::min(rect.Width() / (xRadius + xRadius), rect.Height() / (yRadius + yRadius)); + xRadius *= scale; + yRadius *= scale; + } + auto radius = Radius(xRadius, yRadius); + corner_ = { radius, radius, radius, radius }; + } + + void ApplyScaleAndRound(float scale) + { + rect_.ApplyScaleAndRound(Size(scale, scale)); + corner_.topLeftRadius.ApplyScaleAndRound(scale); + corner_.topRightRadius.ApplyScaleAndRound(scale); + corner_.bottomRightRadius.ApplyScaleAndRound(scale); + corner_.bottomLeftRadius.ApplyScaleAndRound(scale); + } + + void SetOval(const Rect& rect) + { + rect_ = rect; + double xRadius = rect.Width() / 2; + double yRadius = rect.Height() / 2; + auto radius = Radius(xRadius, yRadius); + corner_ = { radius, radius, radius, radius }; + } + + double Width() const + { + return rect_.Width(); + } + + double Height() const + { + return rect_.Height(); + } + + bool NearEqual(const RRect& rrect) const + { + return rrect.GetCorner().bottomLeftRadius == corner_.bottomLeftRadius && + rrect.GetCorner().bottomRightRadius == corner_.bottomRightRadius && + rrect.GetCorner().topLeftRadius == corner_.topLeftRadius && + rrect.GetCorner().topRightRadius == corner_.topRightRadius && rrect.GetRect() == rect_; + } + + bool operator==(const RRect& rrect) const + { + return rrect.GetCorner().bottomLeftRadius == corner_.bottomLeftRadius && + rrect.GetCorner().bottomRightRadius == corner_.bottomRightRadius && + rrect.GetCorner().topLeftRadius == corner_.topLeftRadius && + rrect.GetCorner().topRightRadius == corner_.topRightRadius && rrect.Height() == rect_.Height() && + rrect.Width() == rect_.Width(); + } + + RRect& operator+=(const Offset& offset) + { + rect_ += offset; + return *this; + } + +private: + Corner corner_ { { 0.0, 0.0 }, { 0.0, 0.0 }, { 0.0, 0.0 }, { 0.0, 0.0 } }; + Rect rect_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BASE_GEOMETRY_RRECT_H diff --git a/frameworks/base/geometry/size.h b/frameworks/base/geometry/size.h new file mode 100644 index 00000000..08977de7 --- /dev/null +++ b/frameworks/base/geometry/size.h @@ -0,0 +1,192 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_GEOMETRY_SIZE_H +#define FOUNDATION_ACE_FRAMEWORKS_BASE_GEOMETRY_SIZE_H + +#include +#include + +#include "base/utils/utils.h" + +namespace OHOS::Ace { + +class Size { +public: + static constexpr double INFINITE_SIZE = std::numeric_limits::max(); + Size() = default; + ~Size() = default; + Size(double width, double height) : width_(width), height_(height) {} + + double Width() const + { + return width_; + } + + double Height() const + { + return height_; + } + + void SetWidth(double width) + { + width_ = width; + } + + void SetHeight(double height) + { + height_ = height; + } + + bool IsWidthInfinite() const + { + return NearEqual(width_, INFINITE_SIZE); + } + + bool IsHeightInfinite() const + { + return NearEqual(height_, INFINITE_SIZE); + } + + bool IsInfinite() const + { + return NearEqual(width_, INFINITE_SIZE) || NearEqual(height_, INFINITE_SIZE); + } + + bool IsEmpty() const + { + return NearEqual(width_, 0.0) || NearEqual(height_, 0.0); + } + + Size& AddHeight(double height) + { + height_ += height; + return *this; + } + + Size& AddWidth(double value) + { + width_ += value; + return *this; + } + + Size& MinusHeight(double height) + { + height_ -= height; + return *this; + } + + bool IsValid() const + { + return width_ > 0.0 && height_ > 0.0; + } + + Size operator*(double value) const + { + return Size(width_ * value, height_ * value); + } + + bool operator==(const Size& size) const + { + return NearEqual(width_, size.width_) && NearEqual(height_, size.height_); + } + + bool operator!=(const Size& size) const + { + return !operator==(size); + } + + Size operator+(const Size& size) const + { + return Size(width_ + size.Width(), height_ + size.Height()); + } + + Size operator+=(const Size& size) + { + width_ += size.Width(); + height_ += size.Height(); + return *this; + } + + Size operator-(const Size& size) const + { + return Size(width_ - size.Width(), height_ - size.Height()); + } + + Size operator-=(const Size& size) + { + width_ -= size.Width(); + height_ -= size.Height(); + return *this; + } + + void ApplyScale(double scale) + { + width_ *= scale; + height_ *= scale; + } + + /* + * Please make sure that two sizes are both valid. + * You can use IsValid() to see if a size is valid. + */ + bool operator>(const Size& size) const + { + if (IsValid() && size.IsValid()) { + return GreatOrEqual(width_, size.width_) && GreatOrEqual(height_, size.height_); + } else { + return false; + } + } + + /* + * Please make sure that two sizes are both valid. + * You can use IsValid() to see if a size is valid. + */ + bool operator<(const Size& size) const + { + if (IsValid() && size.IsValid()) { + return LessOrEqual(width_, size.width_) && LessOrEqual(height_, size.height_); + } else { + return false; + } + } + + template + static double CalcRatio(const T& rectangle) + { + if (NearZero(static_cast(rectangle.Height()))) { + return INFINITE_SIZE; + } + return static_cast(rectangle.Width()) / static_cast(rectangle.Height()); + } + + std::string ToString() const + { + return std::string(std::string("[")) + .append(NearEqual(width_, INFINITE_SIZE) ? std::string("INFINITE") : std::to_string(width_)) + .append(" x ") + .append(NearEqual(height_, INFINITE_SIZE) ? std::string("INFINITE") : std::to_string(height_)) + .append("]"); + } + +private: + double width_ = 0.0; + double height_ = 0.0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BASE_GEOMETRY_SIZE_H diff --git a/frameworks/base/i18n/BUILD.gn b/frameworks/base/i18n/BUILD.gn new file mode 100644 index 00000000..7e3cb893 --- /dev/null +++ b/frameworks/base/i18n/BUILD.gn @@ -0,0 +1,65 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +config("ace_base_i18n_config") { + defines = [ "ACEL10N" ] + + include_dirs = [ "//utils/native/base/include" ] +} + +template("ace_base_i18n") { + forward_variables_from(invoker, "*") + source_set(target_name) { + defines += invoker.defines + deps = [ + "$ace_root/frameworks/base/resource:ace_resource", + "$flutter_root:ace_libicu_$platform", + ] + + configs += [ + ":ace_base_i18n_config", + "$ace_root:ace_config", + "$flutter_root:icu_config_$platform", + ] + + # add base source file here + sources = [ "localization.cpp" ] + + if (use_mingw_win) { + cflags = [ + "-std=c++17", + + # Notice: this flag actually apply to icu source code. + "-Wno-ignored-attributes", + ] + } + } +} + +ace_base_i18n("ace_base_i18n_ohos") { + defines = ace_ohos_defines + platform = "ohos" +} + +ace_base_i18n("ace_base_i18n_windows") { + defines = ace_windows_defines + platform = "windows" +} + +ace_base_i18n("ace_base_i18n_mac") { + defines = ace_mac_defines + platform = "mac" +} diff --git a/frameworks/base/i18n/localization.cpp b/frameworks/base/i18n/localization.cpp new file mode 100644 index 00000000..97e69bf6 --- /dev/null +++ b/frameworks/base/i18n/localization.cpp @@ -0,0 +1,906 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "base/i18n/localization.h" + +#include +#include + +#include "chnsecal.h" +#include "unicode/calendar.h" +#include "unicode/datefmt.h" +#include "unicode/dtfmtsym.h" +#include "unicode/dtptngen.h" +#include "unicode/locid.h" +#include "unicode/measfmt.h" +#include "unicode/measure.h" +#include "unicode/numberformatter.h" +#include "unicode/plurrule.h" +#include "unicode/reldatefmt.h" +#include "unicode/smpdtfmt.h" +#include "unicode/uclean.h" +#include "unicode/udata.h" + +#include "base/json/json_util.h" +#include "base/log/log.h" +#include "base/resource/internal_resource.h" +#include "base/utils/linear_map.h" +#include "base/utils/string_utils.h" +#include "base/utils/utils.h" + +namespace OHOS::Ace { + +using namespace icu; + +struct LocaleProxy final { + LocaleProxy(const char* language, const char* countryOrRegion, const char* variant, const char* keywordsAndValues) + : instance(language, countryOrRegion, variant, keywordsAndValues) + {} + ~LocaleProxy() = default; + + Locale instance; +}; + +namespace { + +#define CHECK_RETURN(status, ret) \ + do { \ + if (status > U_ZERO_ERROR) { \ + LOGE("status = %{public}d", static_cast(status)); \ + return ret; \ + } \ + } while (0) + +#define CHECK_NO_RETURN(status) \ + do { \ + if (status > U_ZERO_ERROR) { \ + LOGE("status = %{public}d", static_cast(status)); \ + } \ + } while (0) + +const char JSON_PATH_CARVE = '.'; +const char DEFAULT_LANGUAGE[] = "en-US"; +constexpr uint32_t SEXAGENARY_CYCLE_SIZE = 60; +constexpr uint32_t GUIHAI_YEAR_RECENT = 3; + +const char CHINESE_LEAP[] = u8"\u95f0"; +const char CHINESE_FIRST[] = u8"\u521d"; +const char CHINESE_TEN[] = u8"\u5341"; +const char CHINESE_TWENTY[] = u8"\u5eff"; +const char* g_chineseOneToNine[] = { + u8"\u4e00", u8"\u4e8c", u8"\u4e09", u8"\u56db", u8"\u4e94", u8"\u516d", u8"\u4e03", u8"\u516b", u8"\u4e5d" +}; +const std::unordered_map LANGUAGE_CODE_MAP { + { "he", "iw" }, + { "fil", "tl" }, + { "id", "in" }, +}; + +inline void UnicodeString2String(const UnicodeString& source, std::string& result) +{ + source.toUTF8String(result); +} + +DateFormat::EStyle DateTimeStyle2EStyle(DateTimeStyle dateTimeStyle) +{ + switch (dateTimeStyle) { + case DateTimeStyle::NONE: + return DateFormat::EStyle::kNone; + case DateTimeStyle::FULL: + return DateFormat::EStyle::kFull; + case DateTimeStyle::LONG: + return DateFormat::EStyle::kLong; + case DateTimeStyle::MEDIUM: + return DateFormat::EStyle::kMedium; + case DateTimeStyle::SHORT: + return DateFormat::EStyle::kShort; + default: + return DateFormat::EStyle::kNone; + } +} + +UMeasureFormatWidth GetMeasureFormatWidth(MeasureFormatStyle formatStyle) +{ + switch (formatStyle) { + case MeasureFormatStyle::WIDTH_WIDE: + return UMeasureFormatWidth::UMEASFMT_WIDTH_WIDE; + case MeasureFormatStyle::WIDTH_SHORT: + return UMeasureFormatWidth::UMEASFMT_WIDTH_SHORT; + case MeasureFormatStyle::WIDTH_NARROW: + return UMeasureFormatWidth::UMEASFMT_WIDTH_NARROW; + case MeasureFormatStyle::WIDTH_NUMERIC: + return UMeasureFormatWidth::UMEASFMT_WIDTH_NUMERIC; + case MeasureFormatStyle::WIDTH_COUNT: + return UMeasureFormatWidth::UMEASFMT_WIDTH_COUNT; + default: + return UMeasureFormatWidth::UMEASFMT_WIDTH_WIDE; + } +} + +MeasureUnit* GetMeasureUnit(TimeUnitStyle timeUnitStyle, UErrorCode& status) +{ + switch (timeUnitStyle) { + case TimeUnitStyle::YEAR: + return MeasureUnit::createYear(status); + case TimeUnitStyle::MONTH: + return MeasureUnit::createMonth(status); + case TimeUnitStyle::DAY: + return MeasureUnit::createDay(status); + case TimeUnitStyle::HOUR: + return MeasureUnit::createHour(status); + case TimeUnitStyle::MINUTE: + return MeasureUnit::createMinute(status); + case TimeUnitStyle::SECOND: + return MeasureUnit::createSecond(status); + case TimeUnitStyle::MILLISECOND: + return MeasureUnit::createMillisecond(status); + default: + return MeasureUnit::createYear(status); + } +} + +void GetLocalJsonObject(InternalResource::ResourceId id, std::string language, std::unique_ptr& indexJson, + std::unique_ptr& json) +{ + if (indexJson == nullptr) { + size_t size = 0; + const uint8_t* buf = InternalResource::GetInstance().GetResource(id, size); + if (buf == nullptr) { + return; + } + + std::string jsonStr(reinterpret_cast(buf), size); + const char* endMsg = nullptr; + indexJson = JsonUtil::ParseJsonString(jsonStr, &endMsg); + if (indexJson == nullptr) { + LOGE("read indexletter json failed. reason: %{private}s.", endMsg); + return; + } + } + + if (indexJson->Contains(language) && indexJson->GetValue(language)->IsObject()) { + json = indexJson->GetValue(language); + } else if (indexJson->Contains(DEFAULT_LANGUAGE) && indexJson->GetValue(DEFAULT_LANGUAGE)->IsObject()) { + json = indexJson->GetValue(DEFAULT_LANGUAGE); + } +} + +} // namespace + +// for entry.json +static std::unique_ptr g_indexJsonEntry = nullptr; +static std::unique_ptr g_indexJsonError = nullptr; + +void Localization::SetLocaleImpl(const std::string& language, const std::string& countryOrRegion, + const std::string& script, const std::string& selectLanguage, const std::string& keywordsAndValues) +{ + locale_ = std::make_unique(language.c_str(), countryOrRegion.c_str(), "", keywordsAndValues.c_str()); + + UErrorCode status = U_ZERO_ERROR; + std::vector keyValuePairs; + StringUtils::StringSpliter(keywordsAndValues, ';', keyValuePairs); + for (const auto& pair : keyValuePairs) { + // [pair] is like "nu=arab" or "nu=" for most occasions, but may be "=" under extreme scenarios + std::vector res; + StringUtils::StringSpliter(pair, '=', res); + if (res.size() == 0) { + continue; + } + auto value = (res.size() == 2) ? res[1] : ""; + locale_->instance.setUnicodeKeywordValue(res[0], value, status); + CHECK_NO_RETURN(status); + } + + languageTag_ = language; + if (!script.empty()) { + languageTag_.append("-").append(script); + } + languageTag_.append("-").append(countryOrRegion); + fontLocale_ = languageTag_; + // Smiple chinese + if (languageTag_ == "zh-Hans-CN") { + languageTag_ = "zh-CN"; + fontLocale_ = ""; + } + + selectLanguage_ = selectLanguage; + // match json of latin + if (selectLanguage_ == "jv-Latn") { + selectLanguage_ = "b+jv+Latn"; + } else if (selectLanguage_ == "sr-Latn") { + selectLanguage_ = "b+sr+Latn"; + } + + LOGI("SetLocale language tag: %{public}s, select language: %{public}s", languageTag_.c_str(), + selectLanguage_.c_str()); + if (!isPromiseUsed_) { + promise_.set_value(true); + isPromiseUsed_ = true; + } +} + +std::string Localization::GetLanguage() +{ + WaitingForInit(); + if (locale_) { + return locale_->instance.getLanguage(); + } + return ""; +} + +std::string Localization::GetLanguageTag() +{ + WaitingForInit(); + return languageTag_; +} + +std::string Localization::GetFontLocale() +{ + WaitingForInit(); + return fontLocale_; +} + +const std::string Localization::FormatDuration(uint32_t duration, bool needShowHour) +{ + WaitingForInit(); + UErrorCode status = U_ZERO_ERROR; + // duration greater than 1 hour, use hh:mm:ss; + if (!needShowHour && duration > 3600) { + needShowHour = true; + } + const char* engTimeFormat = needShowHour ? "hh:mm:ss" : "mm:ss"; + auto simpleDateFormat = std::make_unique(UnicodeString(engTimeFormat), locale_->instance, status); + CHECK_RETURN(status, ""); + + UnicodeString simpleStr; + simpleDateFormat->format(1000.0 * duration, simpleStr, status); + CHECK_RETURN(status, ""); + + std::string ret; + UnicodeString2String(simpleStr, ret); + return ret; +} + +const std::string Localization::FormatDateTime(DateTime dateTime, const std::string& format) +{ + WaitingForInit(); + UErrorCode status = U_ZERO_ERROR; + auto cal = Calendar::createInstance(locale_->instance, status); + CHECK_RETURN(status, ""); + cal->set(dateTime.year, dateTime.month, dateTime.day, dateTime.hour, dateTime.minute, dateTime.second); + + UDate date = cal->getTime(status); + delete cal; + CHECK_RETURN(status, ""); + + auto patternGenerator = DateTimePatternGenerator::createInstance(locale_->instance, status); + CHECK_RETURN(status, ""); + UnicodeString pattern = patternGenerator->getBestPattern(UnicodeString(format.c_str()), status); + delete patternGenerator; + CHECK_RETURN(status, ""); + + auto dateFormat = std::make_unique(pattern, locale_->instance, status); + CHECK_RETURN(status, ""); + + UnicodeString dateTimeStr; + dateFormat->format(date, dateTimeStr, status); + CHECK_RETURN(status, ""); + + std::string ret; + UnicodeString2String(dateTimeStr, ret); + return ret; +} + +bool Localization::GetDateColumnFormatOrder(std::vector& outOrder) +{ + outOrder.clear(); + WaitingForInit(); + UErrorCode status = U_ZERO_ERROR; + + auto patternGenerator = DateTimePatternGenerator::createInstance(locale_->instance, status); + CHECK_RETURN(status, false); + std::string format = "yyyyMMdd"; + UnicodeString pattern = patternGenerator->getBestPattern(UnicodeString(format.c_str()), status); + delete patternGenerator; + CHECK_RETURN(status, false); + + std::string result; + UnicodeString2String(pattern, result); + LOGD("order of date format is %{public}s", result.c_str()); + + std::map order; + std::size_t position = result.find("yyyy"); + if (position == std::string::npos) { + return false; + } + order[position] = "year"; + + position = result.find("MM"); + if (position == std::string::npos) { + return false; + } + order[position] = "month"; + + position = result.find("dd"); + if (position == std::string::npos) { + return false; + } + order[position] = "day"; + + for (auto it = order.begin(); it != order.end(); ++it) { + outOrder.emplace_back(it->second); + } + + return true; +} + +bool Localization::Contain(const std::string& str, const std::string& tag) +{ + auto pos = str.find(tag); + return (pos != std::string::npos); +} + +bool Localization::GetHourFormat(bool& isAmPm, bool& hasZero) +{ + WaitingForInit(); + UErrorCode status = U_ZERO_ERROR; + + auto patternGenerator = DateTimePatternGenerator::createInstance(locale_->instance, status); + CHECK_RETURN(status, false); + std::string format = "J:mm"; + UnicodeString pattern = patternGenerator->getBestPattern(UnicodeString(format.c_str()), status); + delete patternGenerator; + CHECK_RETURN(status, false); + + std::string result; + UnicodeString2String(pattern, result); + LOGI("hour format is %{public}s", result.c_str()); + + if (Contain(result, "hh") || Contain(result, "KK")) { + isAmPm = true; + hasZero = true; + return true; + } + + if (Contain(result, "h") || Contain(result, "K")) { + isAmPm = true; + hasZero = false; + return true; + } + + if (Contain(result, "HH") || Contain(result, "kk")) { + isAmPm = false; + hasZero = true; + return true; + } + + if (Contain(result, "H") || Contain(result, "k")) { + isAmPm = false; + hasZero = false; + return true; + } + + LOGE("hour format is unknow[%{public}s]", result.c_str()); + return false; +} + +const std::string Localization::FormatDateTime(DateTime dateTime, DateTimeStyle dateStyle, DateTimeStyle timeStyle) +{ + WaitingForInit(); + UErrorCode status = U_ZERO_ERROR; + auto cal = Calendar::createInstance(locale_->instance, status); + CHECK_RETURN(status, ""); + cal->set(dateTime.year, dateTime.month, dateTime.day, dateTime.hour, dateTime.minute, dateTime.second); + + UDate date = cal->getTime(status); + delete cal; + CHECK_RETURN(status, ""); + + auto dateFormat = DateFormat::createDateTimeInstance( + DateTimeStyle2EStyle(dateStyle), DateTimeStyle2EStyle(timeStyle), locale_->instance); + if (dateFormat == nullptr) { + return ""; + } + + UnicodeString dateTimeStr; + dateFormat->format(date, dateTimeStr, status); + delete dateFormat; + CHECK_RETURN(status, ""); + + std::string ret; + UnicodeString2String(dateTimeStr, ret); + return ret; +} + +std::vector Localization::GetMonths(bool isShortType, const std::string& calendarType) +{ + WaitingForInit(); + std::vector months; + UErrorCode status = U_ZERO_ERROR; + DateFormatSymbols dateformat(locale_->instance, calendarType.c_str(), status); + CHECK_RETURN(status, months); + + int32_t count = 0; + + auto monthsUniStr = dateformat.getMonths(count, DateFormatSymbols::DtContextType::STANDALONE, + isShortType ? DateFormatSymbols::DtWidthType::SHORT : DateFormatSymbols::DtWidthType::WIDE); + if (count > 0) { + std::string month; + for (int32_t i = 0; i < count; i++) { + month.clear(); + UnicodeString2String(monthsUniStr[i], month); + months.push_back(month); + } + } + return months; +} + +std::vector Localization::GetWeekdays(bool isShortType) +{ + WaitingForInit(); + std::vector weekdays; + UErrorCode status = U_ZERO_ERROR; + DateFormatSymbols dateformat(locale_->instance, status); + CHECK_RETURN(status, weekdays); + + int32_t count = 0; + + auto language = locale_->instance.getLanguage(); + auto widthType = isShortType ? (strcmp(language, "zh") == 0 || strcmp(language, "bo") == 0) + ? DateFormatSymbols::DtWidthType::NARROW + : DateFormatSymbols::DtWidthType::ABBREVIATED + : DateFormatSymbols::DtWidthType::WIDE; + auto weekdaysUniStr = dateformat.getWeekdays(count, DateFormatSymbols::DtContextType::STANDALONE, widthType); + if (count > 0) { + std::string weekday; + for (int32_t i = 0; i < count; i++) { + weekday.clear(); + UnicodeString2String(weekdaysUniStr[i], weekday); + if (!weekday.empty()) { + weekdays.push_back(weekday); + } + } + } + return weekdays; +} + +std::vector Localization::GetAmPmStrings() +{ + WaitingForInit(); + std::vector amPms; + UErrorCode status = U_ZERO_ERROR; + DateFormatSymbols dateformat(locale_->instance, status); + CHECK_RETURN(status, amPms); + + int32_t count = 0; + + auto amPmUniStr = dateformat.getAmPmStrings(count); + if (count > 0) { + std::string amPm; + for (int32_t i = 0; i < count; i++) { + amPm.clear(); + UnicodeString2String(amPmUniStr[i], amPm); + amPms.push_back(amPm); + } + } + return amPms; +} + +std::string Localization::GetRelativeDateTime(double offset) +{ + WaitingForInit(); + UErrorCode status = U_ZERO_ERROR; + RelativeDateTimeFormatter relativeDateformat(locale_->instance, status); + CHECK_RETURN(status, ""); + + UnicodeString relativeDate; + relativeDateformat.format(offset, URelativeDateTimeUnit::UDAT_REL_UNIT_DAY, relativeDate, status); + CHECK_RETURN(status, ""); + + std::string ret; + UnicodeString2String(relativeDate, ret); + return ret; +} + +LunarDate Localization::GetLunarDate(Date date) +{ + WaitingForInit(); + LunarDate dateRet; + UErrorCode status = U_ZERO_ERROR; + Locale locale("zh", "CN"); + auto cal = Calendar::createInstance(locale, status); + CHECK_RETURN(status, dateRet); + // 0 means January, 1 means February, so month - 1 + cal->set(date.year, date.month - 1, date.day); + + UDate udate = cal->getTime(status); + delete cal; + CHECK_RETURN(status, dateRet); + + ChineseCalendar chineseCalendar(locale, status); + CHECK_RETURN(status, dateRet); + + chineseCalendar.setTime(udate, status); + CHECK_RETURN(status, dateRet); + + int32_t lunarYear = chineseCalendar.get(UCalendarDateFields::UCAL_YEAR, status); + CHECK_RETURN(status, dateRet); + int32_t lunarMonth = chineseCalendar.get(UCalendarDateFields::UCAL_MONTH, status); + CHECK_RETURN(status, dateRet); + int32_t lunarDate = chineseCalendar.get(UCalendarDateFields::UCAL_DATE, status); + CHECK_RETURN(status, dateRet); + int32_t isLeapMonth = chineseCalendar.get(UCalendarDateFields::UCAL_IS_LEAP_MONTH, status); + CHECK_RETURN(status, dateRet); + + // Sexagenary cycle years convert to Western years + dateRet.year = lunarYear + GUIHAI_YEAR_RECENT; + dateRet.year += ((date.year - GUIHAI_YEAR_RECENT) / SEXAGENARY_CYCLE_SIZE) * SEXAGENARY_CYCLE_SIZE; + // 0 means January, 1 means February, so month + 1 + dateRet.month = lunarMonth + 1; + dateRet.day = lunarDate; + dateRet.isLeapMonth = isLeapMonth == 0 ? false : true; + return dateRet; +} + +std::string Localization::GetLunarMonth(uint32_t month, bool isLeapMonth) +{ + WaitingForInit(); + std::vector months = Localization::GetInstance()->GetMonths(false, "chinese"); + if (month <= months.size() && month > 0) { + std::string leap; + if (isLeapMonth) { + leap += std::string(CHINESE_LEAP); + } + return leap + months[month - 1]; + } else { + LOGE("month parameter is illegal:%{public}d", month); + return ""; + } +} + +std::string Localization::GetLunarDay(uint32_t dayOfMonth) +{ + WaitingForInit(); + if (dayOfMonth > 30 || dayOfMonth == 0) { + LOGE("dayOfMonth parameter is illegal"); + return ""; + } + + std::string ret; + if (dayOfMonth < 10) { + ret = std::string(CHINESE_FIRST) + std::string(g_chineseOneToNine[dayOfMonth - 1]); + } else if (dayOfMonth == 10) { + ret = std::string(CHINESE_FIRST) + std::string(CHINESE_TEN); + } else if (dayOfMonth < 20) { + ret = std::string(CHINESE_TEN) + std::string(g_chineseOneToNine[dayOfMonth - 11]); + } else if (dayOfMonth == 20) { + ret = std::string(CHINESE_TWENTY) + std::string(CHINESE_TEN); + } else if (dayOfMonth == 30) { + ret = g_chineseOneToNine[2] + std::string(CHINESE_TEN); + } else { + ret = std::string(CHINESE_TWENTY) + std::string(g_chineseOneToNine[dayOfMonth - 21]); + } + + return ret; +} + +std::string Localization::TimeUnitFormat(double timeValue, TimeUnitStyle timeStyle, MeasureFormatStyle formatStyle) +{ + WaitingForInit(); + UErrorCode status = U_ZERO_ERROR; + MeasureFormat measureFormat(locale_->instance, GetMeasureFormatWidth(formatStyle), status); + CHECK_RETURN(status, ""); + + MeasureUnit* minuteUnit = GetMeasureUnit(timeStyle, status); + CHECK_RETURN(status, ""); + + Formattable formattable(timeValue); + Measure measure(formattable, minuteUnit, status); + CHECK_RETURN(status, ""); + + UnicodeString timeUnit; + FieldPosition fieldPosition; + measureFormat.formatMeasures(&measure, 1, timeUnit, fieldPosition, status); + CHECK_RETURN(status, ""); + + std::string ret; + UnicodeString2String(timeUnit, ret); + return ret; +} + +std::string Localization::PluralRulesFormat(double number, bool isCardinal) +{ + WaitingForInit(); + UErrorCode status = U_ZERO_ERROR; + UPluralType pluralType = isCardinal ? UPluralType::UPLURAL_TYPE_CARDINAL : UPluralType::UPLURAL_TYPE_ORDINAL; + PluralRules* pluralRules = PluralRules::forLocale(locale_->instance, pluralType, status); + CHECK_RETURN(status, ""); + + UnicodeString numberFormat = pluralRules->select(number); + delete pluralRules; + + std::string ret; + UnicodeString2String(numberFormat, ret); + return ret; +} + +std::string Localization::NumberFormat(double number) +{ + WaitingForInit(); + UErrorCode status = U_ZERO_ERROR; + + icu::number::LocalizedNumberFormatter formatter = icu::number::NumberFormatter::withLocale(locale_->instance); + icu::number::FormattedNumber formattedNumber = formatter.formatDouble(number, status); + CHECK_RETURN(status, ""); + + UnicodeString numberFormat = formattedNumber.toString(status); + CHECK_RETURN(status, ""); + + std::string ret; + UnicodeString2String(numberFormat, ret); + return ret; +} + +std::vector Localization::GetLetters(bool alphabet) +{ + WaitingForInit(); + std::vector letters; + size_t size = 0; + const uint8_t* buf = + InternalResource::GetInstance().GetResource(InternalResource::ResourceId::INDEXLETTER_BAR_JSON, size); + if (buf == nullptr) { + return letters; + } + + std::string jsonStr(reinterpret_cast(buf), size); + const char* endMsg = nullptr; + auto indexLetterJson = JsonUtil::ParseJsonString(jsonStr, &endMsg); + if (indexLetterJson == nullptr) { + LOGE("read indexletter json failed. reason: %{private}s.", endMsg); + return letters; + } + + std::string language = locale_->instance.getLanguage(); + if (language == "zh") { + language = language + "-" + std::string(locale_->instance.getCountry()); + } + auto iter = LANGUAGE_CODE_MAP.find(language); + if (iter != LANGUAGE_CODE_MAP.end()) { + language = iter->second; + } + LOGI("[alphabet] Localization::GetLetters. language: %{private}s", language.c_str()); + std::unique_ptr lettersSet; + if (!indexLetterJson->Contains(language) || !indexLetterJson->GetValue(language)->IsObject()) { + lettersSet = indexLetterJson->GetValue("default"); + } else { + lettersSet = indexLetterJson->GetValue(language); + } + + std::string letterType = alphabet ? "alphabet" : "index"; + std::unique_ptr lettersArray; + if (!lettersSet->Contains(letterType) || !lettersSet->GetValue(letterType)->IsArray()) { + LOGE("read letter array failed. Invalid type. %s", letterType.c_str()); + return letters; + } else { + lettersArray = lettersSet->GetValue(letterType)->GetChild(); + } + + while (lettersArray->IsValid()) { + letters.push_back(StringUtils::Str8ToStr16(lettersArray->GetString())); + lettersArray = lettersArray->GetNext(); + } + return letters; +} + +std::vector Localization::GetIndexLetter() +{ + return GetLetters(false); +} + +std::vector Localization::GetIndexAlphabet() +{ + return GetLetters(true); +} + +std::string Localization::GetEntryLetters(const std::string& lettersIndex) +{ + WaitingForInit(); + if (lettersIndex.empty()) { + return ""; + } + + std::unique_ptr localJsonEntry; + auto language = selectLanguage_; + auto iter = LANGUAGE_CODE_MAP.find(language); + if (iter != LANGUAGE_CODE_MAP.end()) { + language = iter->second; + } + GetLocalJsonObject(InternalResource::ResourceId::ENTRY_JSON, language, g_indexJsonEntry, localJsonEntry); + if (localJsonEntry == nullptr) { + LOGE("read JsonObject fail. language: %{public}s.", selectLanguage_.c_str()); + return ""; + } + + std::vector jsonLetterIndex; + StringUtils::StringSpliter(lettersIndex, JSON_PATH_CARVE, jsonLetterIndex); + + for (const auto& letter : jsonLetterIndex) { + if (localJsonEntry && localJsonEntry->Contains(letter)) { + localJsonEntry = localJsonEntry->GetValue(letter); + } else { + LOGE("read entry json failed."); + return ""; + } + } + + if (localJsonEntry->IsString()) { + return localJsonEntry->GetString(); + } + + return ""; +} + +std::string Localization::GetErrorDescription(const std::string& errorIndex) +{ + WaitingForInit(); + if (errorIndex.empty()) { + return ""; + } + + std::unique_ptr localJsonError; + auto language = selectLanguage_; + auto iter = LANGUAGE_CODE_MAP.find(language); + if (iter != LANGUAGE_CODE_MAP.end()) { + language = iter->second; + } + GetLocalJsonObject(InternalResource::ResourceId::ERRORINFO_JSON, language, g_indexJsonError, localJsonError); + if (localJsonError == nullptr) { + LOGE("read JsonObject fail. language: %{public}s.", selectLanguage_.c_str()); + return ""; + } + + if (localJsonError && localJsonError->Contains(errorIndex)) { + localJsonError = localJsonError->GetValue(errorIndex); + } else { + LOGE("read error json failed. error path: %{private}s.", errorIndex.c_str()); + return ""; + } + + if (localJsonError->IsString()) { + return localJsonError->GetString(); + } + + return ""; +} + +const std::vector& Localization::GetLanguageList(const std::string& language) +{ + static const LinearMapNode> mulitiLanguageMap[] = { + { "am", { "am" } }, + { "ar", { "ar" } }, + { "as", { "as" } }, + { "az", { "az-AZ" } }, + { "be", { "be" } }, + { "bg", { "bg" } }, + { "bn", { "bn" } }, + { "bo", { "bo-CN" } }, + { "bs", { "bs" } }, + { "ca", { "ca" } }, + { "cs", { "cs" } }, + { "da", { "da" } }, + { "de", { "de" } }, + { "el", { "el" } }, + { "en", { "en-US", "en-GB" } }, + { "es", { "es,es-US" } }, + { "et", { "et" } }, + { "fa", { "fa" } }, + { "fi", { "fi" } }, + { "fil", { "fil" } }, + { "fr", { "fr" } }, + { "gl", { "gl-ES" } }, + { "he", { "he" } }, + { "hi", { "hi" } }, + { "hr", { "hr" } }, + { "hu", { "hu" } }, + { "id", { "id" } }, + { "in", { "in" } }, + { "it", { "it" } }, + { "iw", { "iw" } }, + { "ja", { "ja" } }, + { "jv", { "jv-Latn" } }, + { "ka", { "ka-GE" } }, + { "kk", { "kk-KZ" } }, + { "km", { "km-KH" } }, + { "kn", { "kn" } }, + { "ko", { "ko" } }, + { "lo", { "lo-LA" } }, + { "lt", { "lt" } }, + { "lv", { "lv" } }, + { "mai", { "mai" } }, + { "mi", { "mi" } }, + { "mk", { "mk" } }, + { "ml", { "ml" } }, + { "mn", { "mn" } }, + { "mr", { "mr" } }, + { "ms", { "ms" } }, + { "my", { "my-ZG", "my-MM" } }, + { "nb", { "nb" } }, + { "ne", { "ne" } }, + { "nl", { "nl" } }, + { "or", { "or" } }, + { "pa", { "pa" } }, + { "pl", { "pl" } }, + { "pt", { "pt", "pt-PT" } }, + { "ro", { "ro" } }, + { "ru", { "ru" } }, + { "si", { "si-LK" } }, + { "sk", { "sk" } }, + { "sl", { "sl" } }, + { "sr", { "sr-Latn" } }, + { "sv", { "sv" } }, + { "sw", { "sw" } }, + { "ta", { "ta" } }, + { "te", { "te" } }, + { "th", { "th" } }, + { "tl", { "tl" } }, + { "tr", { "tr" } }, + { "ug", { "ug" } }, + { "uk", { "uk" } }, + { "ur", { "ur" } }, + { "uz", { "uz-UZ" } }, + { "vi", { "vi" } }, + { "zh", { "zh-CN", "zh-HK", "zh-TW" } }, + { "zz", { "zz-ZX" } }, + }; + int64_t list = BinarySearchFindIndex(mulitiLanguageMap, ArraySize(mulitiLanguageMap), language.c_str()); + if (list == -1) { + static const std::vector defaultLanguage = { "en-US" }; + return defaultLanguage; + } + return mulitiLanguageMap[list].value; +} + +std::mutex Localization::mutex_; +std::shared_ptr Localization::instance_; +bool Localization::firstInstance_ = true; + +std::shared_ptr Localization::GetInstance() +{ + std::lock_guard lock(mutex_); + if (!instance_) { + instance_ = std::make_shared(); + } + return instance_; +} + +void Localization::SetLocale(const std::string& language, const std::string& countryOrRegion, const std::string& script, + const std::string& selectLanguage, const std::string& keywordsAndValues) +{ + if (instance_) { + instance_->HandleOnChange(); + } + std::shared_ptr instance; + { + std::lock_guard lock(mutex_); + if (!firstInstance_ || !instance_) { + instance_ = std::make_shared(); + } + firstInstance_ = false; + instance = instance_; + } + instance->SetLocaleImpl(language, countryOrRegion, script, selectLanguage, keywordsAndValues); +} + +} // namespace OHOS::Ace diff --git a/frameworks/base/i18n/localization.h b/frameworks/base/i18n/localization.h new file mode 100644 index 00000000..acc45579 --- /dev/null +++ b/frameworks/base/i18n/localization.h @@ -0,0 +1,252 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_I18N_LOCALIZATION_H +#define FOUNDATION_ACE_FRAMEWORKS_BASE_I18N_LOCALIZATION_H + +#include +#include +#include + +#include "base/utils/date_util.h" +#include "base/utils/macros.h" +#include "base/utils/noncopyable.h" + +namespace OHOS::Ace { + +struct LocaleProxy; + +struct LunarDate : Date { + bool isLeapMonth = false; +}; + +struct DateTime final : Date { + uint32_t hour = 0; + uint32_t minute = 0; + uint32_t second = 0; +}; + +enum DateTimeStyle { NONE, FULL, LONG, MEDIUM, SHORT }; + +enum MeasureFormatStyle { WIDTH_WIDE, WIDTH_SHORT, WIDTH_NARROW, WIDTH_NUMERIC, WIDTH_COUNT }; + +enum TimeUnitStyle { YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, MILLISECOND }; + +const std::string FormatEntry(const char* fmt, ...); + +class ACE_EXPORT Localization : public NonCopyable { +public: + /** + * Get language list to select the best language. + * @return language list which is supported + */ + static const std::vector& GetLanguageList(const std::string& language); + + static std::shared_ptr GetInstance(); + + static void SetLocale(const std::string& language, const std::string& countryOrRegion, const std::string& script, + const std::string& selectLanguage, const std::string& keywordsAndValues); + + void SetOnChange(const std::function& value) { + onChange_ = value; + } + + void HandleOnChange() + { + if (onChange_) { + onChange_(); + } + } + + bool GetDateColumnFormatOrder(std::vector& outOrder); + + bool IsAmPmHour() + { + bool isAmPm = false; + bool hasZero = true; + GetHourFormat(isAmPm, hasZero); + return isAmPm; + } + + bool HasZeroHour() + { + bool isAmPm = false; + bool hasZero = true; + GetHourFormat(isAmPm, hasZero); + return hasZero; + } + + std::string GetLanguage(); + std::string GetLanguageTag(); + std::string GetFontLocale(); + + /** + * For formatting local format duration. Cannot be formatted correctly when duration greater than 24 + * hours. For example: 10:00. + * @param duration The value used to set the duration, the range is 0 to 90,000. + * @return local format duration. + */ + const std::string FormatDuration(uint32_t duration, bool needShowHour = false); + + /** + * For formatting date time. For example: 2020/03/30 08:00:00. + * @param dateTime The value of date time. + * @param format the pattern for the format. + * @return local format date time. + */ + const std::string FormatDateTime(DateTime dateTime, const std::string& format); + + /** + * For formatting date time. + * @param dateTime The value of date time. + * @param dateStyle The value of date style. + * @param timeStyle The value of time style. + * @return local format date time. + */ + const std::string FormatDateTime(DateTime dateTime, DateTimeStyle dateStyle, DateTimeStyle timeStyle); + + /** + * Gets month strings. For example: "January", "February", etc. + * @param isShortType The month style. + * @param calendarType The calendar style. + * @return the month string vector. + */ + std::vector GetMonths(bool isShortType = false, const std::string& calendarType = ""); + + /** + * Gets weekdays strings. For example: "Monday", "Tuesday", etc. + * @param isShortType The weekday style. + * @return the weekday string vector. + */ + std::vector GetWeekdays(bool isShortType = false); + + /** + * Gets AM/PM strings. For example: "AM", "PM". + * @return the AM/PM string vector. + */ + std::vector GetAmPmStrings(); + + /** + * Gets relative date. For example: "yesterday", "today", "tomorrow", "in 2 days", etc. + * @param offset The relative date time offset. + * @return the relative date string. + */ + std::string GetRelativeDateTime(double offset); + + /** + * Gets lunar date. + * @param date the western calendar date. + * @return the lunar calendar date. + */ + LunarDate GetLunarDate(Date date); + + /** + * Gets lunar month. + * @param month the western calendar month. + * @param isLeapMonth is a leap month. + * @return the lunar calendar month. + */ + std::string GetLunarMonth(uint32_t month, bool isLeapMonth); + + /** + * Gets lunar day. + * @param dayOfMonth the western calendar day. + * @return the lunar calendar day. + */ + std::string GetLunarDay(uint32_t dayOfMonth); + + /** + * For formatting time unit. For example: "8hours", "8min", etc . + * @param timeValue the format time value. + * @param timeStyle the time unit style. + * @param formatStyle the measure format style. + * @return local format time unit. + */ + std::string TimeUnitFormat(double timeValue, TimeUnitStyle timeStyle, MeasureFormatStyle formatStyle); + + /** + * For formatting plural rules. + * @param number the number to be formatted. + * @param isCardinal the plural is cardinal type. + * @return local keyword of the plural rule. + */ + std::string PluralRulesFormat(double number, bool isCardinal = true); + + /** + * Gets Letter strings for indexer. For example: "A", "B", etc. + * @return the letter string vector. + */ + std::vector GetIndexLetter(); + + /** + * For formatting number. + * @param number the number to be formatted. + * @return local format number. + */ + std::string NumberFormat(double number); + + /** + * Gets alphabet strings. For example: "A", "B", etc. + * @return the alphabet string vector. + */ + std::vector GetIndexAlphabet(); + + /** + * Gets entry letters, read from resource/binary/entry.json. + * @param lettersIndex letters index, like "common.ok" + * @return letters + */ + std::string GetEntryLetters(const std::string& lettersIndex); + + /** + * Gets error description, read from resource/binary/errorcode.json. + * @param errorIndex error index, like "error_video_000001" + * @return error description + */ + std::string GetErrorDescription(const std::string& errorIndex); + +private: + void SetLocaleImpl(const std::string& language, const std::string& countryOrRegion, const std::string& script, + const std::string& selectLanguage, const std::string& keywordsAndValues); + std::vector GetLetters(bool alphabet); + bool GetHourFormat(bool& isAmPm, bool& hasZero); + bool Contain(const std::string& str, const std::string& tag); + + std::unique_ptr locale_; + std::string languageTag_; + std::string selectLanguage_; + std::string fontLocale_; + + std::promise promise_; + std::shared_future future_ = promise_.get_future(); + std::function onChange_; + bool isPromiseUsed_ = false; + bool isInit_ = false; + + void WaitingForInit() + { + if (!isInit_) { + isInit_ = future_.get(); + } + } + + static std::mutex mutex_; + static std::shared_ptr instance_; + static bool firstInstance_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BASE_I18N_LOCALIZATION_H diff --git a/frameworks/base/json/json_util.cpp b/frameworks/base/json/json_util.cpp new file mode 100644 index 00000000..f5660f1a --- /dev/null +++ b/frameworks/base/json/json_util.cpp @@ -0,0 +1,377 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "base/json/json_util.h" + +#include "cJSON.h" + +namespace OHOS::Ace { + +JsonValue::JsonValue(JsonObject* object) : object_(object) {} + +JsonValue::JsonValue(JsonObject* object, bool isRoot) : object_(object), isRoot_(isRoot) {} + +JsonValue::~JsonValue() +{ + if (object_ != nullptr && isRoot_) { + cJSON_Delete(object_); + } + object_ = nullptr; +} + +bool JsonValue::IsBool() const +{ + return cJSON_IsBool(object_); +} + +bool JsonValue::IsNumber() const +{ + return cJSON_IsNumber(object_); +} + +bool JsonValue::IsString() const +{ + return cJSON_IsString(object_); +} + +bool JsonValue::IsArray() const +{ + return cJSON_IsArray(object_); +} + +bool JsonValue::IsObject() const +{ + return cJSON_IsObject(object_); +} + +bool JsonValue::IsValid() const +{ + return (object_ != nullptr) && !cJSON_IsInvalid(object_); +} + +bool JsonValue::IsNull() const +{ + return (object_ == nullptr) || cJSON_IsNull(object_); +} + +bool JsonValue::Contains(const std::string& key) const +{ + return cJSON_HasObjectItem(object_, key.c_str()); +} + +bool JsonValue::GetBool() const +{ + return cJSON_IsTrue(object_) != 0; +} + +bool JsonValue::GetBool(const std::string& key, bool defaultValue) const +{ + if (Contains(key) && GetValue(key)->IsBool()) { + return GetValue(key)->GetBool(); + } + return defaultValue; +} + +int32_t JsonValue::GetInt() const +{ + return static_cast((object_ == nullptr) ? 0 : object_->valuedouble); +} + +uint32_t JsonValue::GetUInt() const +{ + return static_cast((object_ == nullptr) ? 0 : object_->valuedouble); +} + +double JsonValue::GetDouble() const +{ + return (object_ == nullptr) ? 0.0 : object_->valuedouble; +} + +double JsonValue::GetDouble(const std::string& key, double defaultVal) const +{ + auto value = GetValue(key); + if (value && value->IsNumber()) { + return value->GetDouble(); + } + return defaultVal; +} + +std::string JsonValue::GetString() const +{ + return ((object_ == nullptr) || (object_->valuestring == nullptr)) ? "" : std::string(object_->valuestring); +} + +std::unique_ptr JsonValue::GetNext() const +{ + if (object_ == nullptr) { + return std::make_unique(nullptr); + } + return std::make_unique(object_->next); +} + +std::unique_ptr JsonValue::GetChild() const +{ + if (object_ == nullptr) { + return std::make_unique(nullptr); + } + return std::make_unique(object_->child); +} + +std::string JsonValue::GetKey() const +{ + return ((object_ == nullptr) || (object_->string == nullptr)) ? "" : std::string(object_->string); +} +std::unique_ptr JsonValue::GetValue(const std::string& key) const +{ + return std::make_unique(cJSON_GetObjectItem(object_, key.c_str())); +} + +std::unique_ptr JsonValue::GetObject(const std::string& key) const +{ + if (Contains(key) && GetValue(key)->IsObject()) { + return GetValue(key); + } + return std::make_unique(); +} + +int32_t JsonValue::GetArraySize() const +{ + return cJSON_GetArraySize(object_); +} + +std::unique_ptr JsonValue::GetArrayItem(int32_t index) const +{ + return std::make_unique(cJSON_GetArrayItem(object_, index)); +} + +bool JsonValue::Put(const char* key, const char* value) +{ + if (!value || !key) { + return false; + } + + cJSON* child = cJSON_CreateString(value); + if (child == nullptr) { + return false; + } + cJSON_AddItemToObject(object_, key, child); + return true; +} + +const JsonObject* JsonValue::GetJsonObject() const +{ + return object_; +} + +bool JsonValue::Put(const char* key, const std::unique_ptr& value) +{ + if (!value || !key) { + return false; + } + cJSON* jsonObject = cJSON_Duplicate(value->GetJsonObject(), true); + if (jsonObject == nullptr) { + return false; + } + + cJSON_AddItemToObject(object_, key, jsonObject); + return true; +} + +// add item to array +bool JsonValue::Put(const std::unique_ptr& value) +{ + if (!value) { + return false; + } + cJSON* jsonObject = cJSON_Duplicate(value->GetJsonObject(), true); + if (jsonObject == nullptr) { + return false; + } + + cJSON_AddItemToArray(object_, jsonObject); + return true; +} + +bool JsonValue::Put(const char* key, size_t value) +{ + if (key == nullptr) { + return false; + } + + cJSON* child = cJSON_CreateNumber(static_cast(value)); + if (child == nullptr) { + return false; + } + cJSON_AddItemToObject(object_, key, child); + return true; +} + +bool JsonValue::Put(const char* key, int32_t value) +{ + if (key == nullptr) { + return false; + } + + cJSON* child = cJSON_CreateNumber(static_cast(value)); + if (child == nullptr) { + return false; + } + cJSON_AddItemToObject(object_, key, child); + return true; +} + +bool JsonValue::Put(const char* key, double value) +{ + if (key == nullptr) { + return false; + } + + cJSON* child = cJSON_CreateNumber(value); + if (child == nullptr) { + return false; + } + cJSON_AddItemToObject(object_, key, child); + return true; +} + +bool JsonValue::Put(const char* key, bool value) +{ + if (key == nullptr) { + return false; + } + + cJSON* child = cJSON_CreateBool(value); + if (child == nullptr) { + return false; + } + cJSON_AddItemToObject(object_, key, child); + return true; +} + +bool JsonValue::Replace(const char* key, const char* value) +{ + if ((value == nullptr) || (key == nullptr)) { + return false; + } + + cJSON* child = cJSON_CreateString(value); + if (child == nullptr) { + return false; + } + if (!cJSON_ReplaceItemInObject(object_, key, child)) { + cJSON_Delete(child); + return false; + } + return true; +} + +bool JsonValue::Replace(const char* key, int32_t value) +{ + if (key == nullptr) { + return false; + } + + cJSON* child = cJSON_CreateNumber(static_cast(value)); + if (child == nullptr) { + return false; + } + if (!cJSON_ReplaceItemInObject(object_, key, child)) { + cJSON_Delete(child); + return false; + } + return true; +} + +bool JsonValue::Replace(const char* key, const std::unique_ptr& value) +{ + if ((value == nullptr) || (key == nullptr)) { + return false; + } + cJSON* jsonObject = cJSON_Duplicate(value->GetJsonObject(), true); + if (jsonObject == nullptr) { + return false; + } + + if (!cJSON_ReplaceItemInObject(object_, key, jsonObject)) { + cJSON_Delete(jsonObject); + return false; + } + return true; +} + +std::string JsonValue::ToString() +{ + std::string result; + if (!object_) { + return result; + } + + // It is null-terminated. + char* unformatted = cJSON_PrintUnformatted(object_); + if (unformatted != nullptr) { + result = unformatted; + cJSON_free(unformatted); + } + return result; +} + +std::string JsonValue::GetString(const std::string& key, const std::string& defaultVal) const +{ + auto value = GetValue(key); + if (value && value->IsString()) { + return value->GetString(); + } + return defaultVal; +} + +int32_t JsonValue::GetInt(const std::string& key, int32_t defaultVal) const +{ + auto value = GetValue(key); + if (value && value->IsNumber()) { + return value->GetInt(); + } + return defaultVal; +} + +uint32_t JsonValue::GetUInt(const std::string& key, uint32_t defaultVal) const +{ + auto value = GetValue(key); + if (value && value->IsNumber()) { + return value->GetUInt(); + } + return defaultVal; +} + +std::unique_ptr JsonUtil::ParseJsonData(const char* data, const char** parseEnd) +{ + return std::make_unique(cJSON_ParseWithOpts(data, parseEnd, true), true); +} + +std::unique_ptr JsonUtil::ParseJsonString(const std::string& content, const char** parseEnd) +{ + return ParseJsonData(content.c_str(), parseEnd); +} + +std::unique_ptr JsonUtil::Create(bool isRoot) +{ + return std::make_unique(cJSON_CreateObject(), isRoot); +} + +std::unique_ptr JsonUtil::CreateArray(bool isRoot) +{ + return std::make_unique(cJSON_CreateArray(), isRoot); +} + +} // namespace OHOS::Ace diff --git a/frameworks/base/json/json_util.h b/frameworks/base/json/json_util.h new file mode 100644 index 00000000..3143e80f --- /dev/null +++ b/frameworks/base/json/json_util.h @@ -0,0 +1,102 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_JSON_JSON_UTIL_H +#define FOUNDATION_ACE_FRAMEWORKS_BASE_JSON_JSON_UTIL_H + +#include +#include + +#include "base/utils/macros.h" + +struct cJSON; + +namespace OHOS::Ace { + +using JsonObject = cJSON; + +class ACE_EXPORT JsonValue final { +public: + JsonValue() = default; + explicit JsonValue(JsonObject* object); + JsonValue(JsonObject* object, bool isRoot); + ~JsonValue(); + + // check functions + bool IsBool() const; + bool IsNumber() const; + bool IsString() const; + bool IsArray() const; + bool IsObject() const; + bool IsValid() const; + bool IsNull() const; + bool Contains(const std::string& key) const; + + // get functions + bool GetBool() const; + bool GetBool(const std::string& key, bool defaultValue) const; + int32_t GetInt() const; + int32_t GetInt(const std::string& key, int32_t defaultVal = 0) const; + uint32_t GetUInt() const; + uint32_t GetUInt(const std::string& key, uint32_t defaultVal = 0) const; + double GetDouble() const; + double GetDouble(const std::string& key, double defaultVal = 0.0) const; + std::string GetString() const; + std::string GetString(const std::string& key, const std::string& defaultVal = "") const; + + std::unique_ptr GetNext() const; + std::unique_ptr GetChild() const; + std::string GetKey() const; + std::unique_ptr GetValue(const std::string& key) const; + std::unique_ptr GetObject(const std::string& key) const; + int32_t GetArraySize() const; + std::unique_ptr GetArrayItem(int32_t index) const; + const JsonObject* GetJsonObject() const; + + // put functions + bool Put(const char* key, const char* value); + bool Put(const char* key, size_t value); + bool Put(const char* key, int32_t value); + bool Put(const char* key, double value); + bool Put(const char* key, bool value); + bool Put(const char* key, const std::unique_ptr& value); + bool Put(const std::unique_ptr& value); + + // replace functions + bool Replace(const char* key, const char* value); + bool Replace(const char* key, int32_t value); + bool Replace(const char* key, const std::unique_ptr& value); + + // serialize + std::string ToString(); + +private: + JsonObject* object_ = nullptr; + bool isRoot_ = false; +}; + +class ACE_EXPORT JsonUtil final { +public: + JsonUtil() = delete; + ~JsonUtil() = delete; + static std::unique_ptr ParseJsonData(const char* data, const char** parseEnd = nullptr); + static std::unique_ptr ParseJsonString(const std::string& content, const char** parseEnd = nullptr); + static std::unique_ptr Create(bool isRoot); + static std::unique_ptr CreateArray(bool isRoot); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BASE_JSON_JSON_UTIL_H diff --git a/frameworks/base/log/ace_trace.cpp b/frameworks/base/log/ace_trace.cpp new file mode 100644 index 00000000..ca7d8ee4 --- /dev/null +++ b/frameworks/base/log/ace_trace.cpp @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "base/log/ace_trace.h" + +namespace OHOS::Ace { + +bool AceTraceBeginWithArgs(const char* format, ...) +{ + va_list args; + va_start(args, format); + bool retVal = AceTraceBeginWithArgv(format, args); + va_end(args); + return retVal; +} + +AceScopedTrace::AceScopedTrace(const char* format, ...) : traceEnabled_(AceTraceEnabled()) +{ + if (traceEnabled_) { + va_list args; + va_start(args, format); + traceEnabled_ = AceTraceBeginWithArgv(format, args); + va_end(args); + } +} + +AceScopedTrace::~AceScopedTrace() +{ + if (traceEnabled_) { + AceTraceEnd(); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/base/log/ace_trace.h b/frameworks/base/log/ace_trace.h new file mode 100644 index 00000000..9e25946c --- /dev/null +++ b/frameworks/base/log/ace_trace.h @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_LOG_ACE_TRACE_H +#define FOUNDATION_ACE_FRAMEWORKS_BASE_LOG_ACE_TRACE_H + +#include +#include + +#include "base/utils/macros.h" +#include "base/utils/noncopyable.h" + +#define ACE_SCOPED_TRACE(fmt, ...) AceScopedTrace aceScopedTrace(fmt, ##__VA_ARGS__) +#ifdef ACE_DEBUG +#define ACE_DEBUG_SCOPED_TRACE(fmt, ...) AceScopedTrace aceScopedTrace(fmt, ##__VA_ARGS__) +#else +#define ACE_DEBUG_SCOPED_TRACE(fmt, ...) +#endif + +#define ACE_FUNCTION_TRACE() ACE_SCOPED_TRACE(__func__) + +namespace OHOS::Ace { + +bool ACE_EXPORT AceTraceEnabled(); +void ACE_EXPORT AceTraceBegin(const char* name); +bool ACE_EXPORT AceTraceBeginWithArgs(const char* format, ...) __attribute__((__format__(printf, 1, 2))); +bool ACE_EXPORT AceTraceBeginWithArgv(const char* format, va_list args); +void ACE_EXPORT AceTraceEnd(); + +class ACE_EXPORT AceScopedTrace final { +public: + explicit AceScopedTrace(const char* format, ...) __attribute__((__format__(printf, 2, 3))); + ~AceScopedTrace(); + + ACE_DISALLOW_COPY_AND_MOVE(AceScopedTrace); + +private: + bool traceEnabled_ { false }; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BASE_LOG_ACE_TRACE_H diff --git a/frameworks/base/log/dump_log.cpp b/frameworks/base/log/dump_log.cpp new file mode 100644 index 00000000..7a640d74 --- /dev/null +++ b/frameworks/base/log/dump_log.cpp @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "base/log/dump_log.h" + +#include + +namespace OHOS::Ace { + +DumpLog::DumpLog() = default; +DumpLog::~DumpLog() = default; + +void DumpLog::Print(int32_t depth, const std::string& className, int32_t childSize) +{ + std::string space = " "; + for (int32_t i = 0; i < depth; ++i) { + fwrite(space.c_str(), 1, space.length(), dumpFile_.get()); + } + fwrite(space.c_str(), 1, space.length(), dumpFile_.get()); + std::string data = "|-> "; + data.append(className); + data.append(" childSize:" + std::to_string(childSize)); + data.append("\n"); + fwrite(data.c_str(), 1, data.length(), dumpFile_.get()); + + for (auto& desc : description_) { + for (int32_t i = 0; i < depth; ++i) { + fwrite(space.c_str(), 1, space.length(), dumpFile_.get()); + } + std::string data = ""; + if (childSize == 0) { + data = " "; + } else { + data = " | "; + } + data.append(desc); + fwrite(data.c_str(), 1, data.length(), dumpFile_.get()); + } + description_.clear(); + description_.shrink_to_fit(); +} + +void DumpLog::Print(const std::string& content) +{ + Print(0, content); +} + +void DumpLog::Print(int32_t depth, const std::string& content) +{ + std::string space = " "; + for (int32_t i = 0; i < depth; ++i) { + fwrite(space.c_str(), 1, space.length(), dumpFile_.get()); + } + + std::string data = content + "\n"; + fwrite(data.c_str(), 1, data.length(), dumpFile_.get()); +} + +void DumpLog::Reset() +{ + dumpFile_.reset(); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/base/log/dump_log.h b/frameworks/base/log/dump_log.h new file mode 100644 index 00000000..93cb109f --- /dev/null +++ b/frameworks/base/log/dump_log.h @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_LOG_DUMP_LOG_H +#define FOUNDATION_ACE_FRAMEWORKS_BASE_LOG_DUMP_LOG_H + +#include +#include +#include +#include + +#include "base/utils/noncopyable.h" +#include "base/utils/singleton.h" + +namespace OHOS::Ace { + +class DumpLog : public Singleton { + DECLARE_SINGLETON(DumpLog); + +public: + using DumpFile = std::unique_ptr; + + void SetDumpFile(DumpFile&& file) + { + dumpFile_ = std::move(file); + } + const DumpFile& GetDumpFile() const + { + return dumpFile_; + } + + void Print(int32_t depth, const std::string& className, int32_t childSize); + void Print(const std::string& content); + void Print(int32_t depth, const std::string& content); + void Reset(); + + template + void AddDesc(const T&& t) + { + std::stringstream paramStream; + paramStream << t << "\n"; + description_.push_back(paramStream.str()); + } + + template + void AddDesc(const T& t) + { + std::stringstream paramStream; + paramStream << t << "\n"; + description_.push_back(paramStream.str()); + } + + template + void AddDesc(Args&&... args) + { + std::stringstream paramStream; + BuildDesc(paramStream, args...); + } + + template + void BuildDesc(std::stringstream& stream, T& t, Args&&... args) + { + stream << t << " "; + BuildDesc(stream, args...); + } + + template + void BuildDesc(std::stringstream& stream, T& t) + { + stream << t << "\n"; + description_.push_back(stream.str()); + } + +private: + DumpFile dumpFile_ { nullptr, &fclose }; + std::vector description_; + + ACE_DISALLOW_MOVE(DumpLog); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BASE_LOG_DUMP_LOG_H diff --git a/frameworks/base/log/event_report.h b/frameworks/base/log/event_report.h new file mode 100644 index 00000000..e99c89f4 --- /dev/null +++ b/frameworks/base/log/event_report.h @@ -0,0 +1,177 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_LOG_EVENT_REPORT_H +#define FOUNDATION_ACE_FRAMEWORKS_BASE_LOG_EVENT_REPORT_H + +#include + +#include "base/utils/macros.h" + +namespace OHOS::Ace { + +// eventType use int32_t type, no need enum class. +enum { + EXCEPTION_FRAMEWORK_APP_START = 951004000, + EXCEPTION_FRAMEWORK_PAGE_ROUTER = 951004001, + EXCEPTION_COMPONENT = 951004002, + EXCEPTION_API_CHANNEL = 951004003, + EXCEPTION_RENDER = 951004004, + EXCEPTION_JS = 951004005, + EXCEPTION_ANIMATION = 951004006, + EXCEPTION_EVENT = 951004007, + EXCEPTION_INTERNATIONALIZATION = 951004009, + EXCEPTION_ACCESSIBILITY = 951004010, + EXCEPTION_FORM = 951004011, +}; + +// EXCEPTION_FRAMEWORK_APP_START +enum class AppStartExcepType { + CREATE_CONTAINER_ERR = 1, + SET_VIEW_ERR, + VIEW_TYPE_ERR, + GET_PACKAGE_PATH_ERR, + JNI_CLASS_ERR, + JNI_INIT_ERR = 10, + FRONTEND_TYPE_ERR, + PIPELINE_CONTEXT_ERR, + VIEW_STATE_ERR, + RESOURCE_REGISTER_INIT_ERR, + JS_ENGINE_CREATE_ERR, + JAVA_EVENT_CALLBACK_INIT_ERR, +}; + +// EXCEPTION_FRAMEWORK_PAGE_ROUTER +enum class PageRouterExcepType { + ROUTE_PARSE_ERR = 0, + PAGE_STACK_OVERFLOW_ERR, + RUN_PAGE_ERR, + UPDATE_PAGE_ERR, + LOAD_PAGE_ERR, + REPLACE_PAGE_ERR, +}; + +// EXCEPTION_COMPONENT +enum class ComponentExcepType { + TEXT_INPUT_CONNECTION_CLOSE_ERR = 0, + GET_THEME_ERR, + BUTTON_COMPONENT_ERR, + DIALOG_EVENT_ERR, + DOM_NODE_NOT_FOUND, + SET_ROOT_DOM_NODE_ERR, + IMAGE_ANIMATOR_ERR, + LIST_COMPONENT_ERR, + LIST_ITEM_ERR, + MARQUEE_ERR, + NAVIGATION_BAR_ERR, +}; + +// EXCEPTION_API_CHANNEL +enum class APIChannelExcepType { + JS_BRIDGE_INIT_ERR = 0, + SET_FUNCTION_ERR, +}; + +// EXCEPTION_RENDER +enum class RenderExcepType { + VIEW_SCALE_ERR = 0, + RENDER_ANIMATION_ERR, + RENDER_COMPONENT_ERR, + CLIP_ERR, + UI_THREAD_STUCK, +}; + +// EXCEPTION_JS +enum class JsExcepType { + GET_NODE_ERR = 0, + CREATE_NODE_ERR, + CREATE_DOM_BODY_ERR, + REMOVE_DOM_ELEMENT_ERR, + UPDATE_DOM_ELEMENT_ERR, + JS_ENGINE_INIT_ERR, + JS_RUNTIME_OBJ_ERR, + JS_CONTEXT_INIT_ERR, + JS_THREAD_STUCK, +}; + +// EXCEPTION_ANIMATION +enum class AnimationExcepType { + ANIMATION_BRIDGE_ERR = 0, + ANIMATION_PAGE_ERR, +}; + +// EXCEPTION_EVENT +enum class EventExcepType { + FIRE_EVENT_ERR = 1, +}; + +// EXCEPTION_INTERNATIONALIZATION +enum class InternalExcepType { + CHANGE_LOCALE_ERR = 0, +}; + +// EXCEPTION_ACCESSIBILITY +enum class AccessibilityExcepType { + CREATE_ACCESSIBILITY_NODE_ERR = 0, + GET_NODE_ERR, +}; + +// EXCEPTION_FORM +enum class FormExcepType { + RUN_PAGE_ERR = 0, + LOAD_PAGE_ERR, + CREATE_NODE_ERR, + UPDATE_PAGE_ERR, + FIRE_FORM_EVENT_ERR, + ACTION_EVENT_CALLBACK_ERR, +}; + +enum class RawEventType { WARNING, FREEZE, RECOVER }; + +struct EventInfo { + int32_t eventType = 0; + int32_t errorType = 0; + std::string pageUrl; +}; + +class ACE_EXPORT EventReport { +public: + static void SendEvent(const EventInfo& eventInfo); + + static void SendAppStartException(AppStartExcepType type); + static void SendPageRouterException(PageRouterExcepType type, const std::string& pageUrl = ""); + static void SendComponentException(ComponentExcepType type); + static void SendAPIChannelException(APIChannelExcepType type); + static void SendRenderException(RenderExcepType type); + static void SendJsException(JsExcepType type); + static void SendAnimationException(AnimationExcepType type); + static void SendEventException(EventExcepType type); + static void SendInternalException(InternalExcepType type); + static void SendAccessibilityException(AccessibilityExcepType type); + static void SendFormException(FormExcepType type); + + static void JsEventReport(int32_t eventType, const std::string& jsonStr); + static void JsErrReport( + int32_t uid, const std::string& packageName, const std::string& reason, const std::string& summary); + static void ANRRawReport(RawEventType type, int32_t uid, const std::string& packageName, + const std::string& processName, const std::string& msg = " "); + +private: + static void SendEventInner(const EventInfo& eventInfo); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BASE_LOG_EVENT_REPORT_H diff --git a/frameworks/base/log/log.h b/frameworks/base/log/log.h new file mode 100644 index 00000000..6e000ca3 --- /dev/null +++ b/frameworks/base/log/log.h @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_LOG_LOG_H +#define FOUNDATION_ACE_FRAMEWORKS_BASE_LOG_LOG_H + +#include "base/log/log_wrapper.h" + +#endif // FOUNDATION_ACE_FRAMEWORKS_BASE_LOG_LOG_H diff --git a/frameworks/base/log/log_wrapper.h b/frameworks/base/log/log_wrapper.h new file mode 100644 index 00000000..ec6340aa --- /dev/null +++ b/frameworks/base/log/log_wrapper.h @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_LOG_LOG_WRAPPER_H +#define FOUNDATION_ACE_FRAMEWORKS_BASE_LOG_LOG_WRAPPER_H + +#include +#include +#include + +#include "base/utils/macros.h" + +#define PRINT_LOG(level, fmt, ...) \ + do { \ + if (OHOS::Ace::LogWrapper::JudgeLevel(OHOS::Ace::LogLevel::level)) { \ + OHOS::Ace::LogWrapper::PrintLog(OHOS::Ace::LogDomain::FRAMEWORK, OHOS::Ace::LogLevel::level, \ + "[%{private}-20s(%{private}s)] " fmt, OHOS::Ace::LogWrapper::GetBriefFileName(__FILE__), \ + __FUNCTION__, ##__VA_ARGS__); \ + } \ + } while (0) + +#ifdef ACE_DEBUG +#define LOGD(fmt, ...) PRINT_LOG(DEBUG, fmt, ##__VA_ARGS__) +#else +#define LOGD(fmt, ...) +#endif + +#define LOGI(fmt, ...) PRINT_LOG(INFO, fmt, ##__VA_ARGS__) +#define LOGW(fmt, ...) PRINT_LOG(WARN, fmt, ##__VA_ARGS__) +#define LOGE(fmt, ...) PRINT_LOG(ERROR, fmt, ##__VA_ARGS__) +#define LOGF(fmt, ...) PRINT_LOG(FATAL, fmt, ##__VA_ARGS__) + +#define PRINT_APP_LOG(level, fmt, ...) \ + OHOS::Ace::LogWrapper::PrintLog(OHOS::Ace::LogDomain::JS_APP, OHOS::Ace::LogLevel::level, fmt, ##__VA_ARGS__) + +#define APP_LOGD(fmt, ...) PRINT_APP_LOG(DEBUG, fmt, ##__VA_ARGS__) +#define APP_LOGI(fmt, ...) PRINT_APP_LOG(INFO, fmt, ##__VA_ARGS__) +#define APP_LOGW(fmt, ...) PRINT_APP_LOG(WARN, fmt, ##__VA_ARGS__) +#define APP_LOGE(fmt, ...) PRINT_APP_LOG(ERROR, fmt, ##__VA_ARGS__) +#define APP_LOGF(fmt, ...) PRINT_APP_LOG(FATAL, fmt, ##__VA_ARGS__) + +namespace OHOS::Ace { + +enum class LogDomain : uint32_t { + FRAMEWORK = 0, + JS_APP, +}; + +enum class LogLevel : uint32_t { + DEBUG = 0, + INFO, + WARN, + ERROR, + FATAL, +}; + +class ACE_EXPORT LogWrapper final { +public: + static bool JudgeLevel(LogLevel level) + { + return level_ <= level; + } + + static void SetLogLevel(LogLevel level) + { + level_ = level; + } + + static LogLevel GetLogLevel() + { + return level_; + } + + static const char* GetBriefFileName(const char* name) + { + static const char separator = GetSeparatorCharacter(); + const char* p = strrchr(name, separator); + return p != nullptr ? p + 1 : name; + } + + static void StripFormatString(const std::string& prefix, std::string& str) + { + for (auto pos = str.find(prefix, 0); pos != std::string::npos; pos = str.find(prefix, pos)) { + str.erase(pos, prefix.size()); + } + } + + static void PrintLog(LogDomain domain, LogLevel level, const char* fmt, ...) + __attribute__((__format__(os_log, 3, 4))) + { + va_list args; + va_start(args, fmt); + PrintLog(domain, level, fmt, args); + va_end(args); + } + + // MUST implement these interface on each platform. + static char GetSeparatorCharacter(); + static void PrintLog(LogDomain domain, LogLevel level, const char* fmt, va_list args); + +private: + LogWrapper() = delete; + ~LogWrapper() = delete; + + static LogLevel level_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BASE_LOG_LOG_WRAPPER_H diff --git a/frameworks/base/memory/ace_type.h b/frameworks/base/memory/ace_type.h new file mode 100644 index 00000000..92b061dc --- /dev/null +++ b/frameworks/base/memory/ace_type.h @@ -0,0 +1,133 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_MEMORY_ACE_TYPE_H +#define FOUNDATION_ACE_FRAMEWORKS_BASE_MEMORY_ACE_TYPE_H + +#include "base/log/log.h" +#include "base/memory/referenced.h" +#include "base/memory/type_info_base.h" + +/** + * Example: + * class BaseA : public virtual AceType { + * DECLARE_ACE_TYPE(BaseA, AceType); + * }; + * + * class BaseB : public virtual AceType { + * DECLARE_ACE_TYPE(BaseB, AceType); + * }; + * + * class BaseC : public BaseA, public BaseB { + * DECLARE_ACE_TYPE(BaseC, BaseA, BaseB); + * }; + */ +// Integrate it into class declaration to support 'DynamicCast'. +#define DECLARE_ACE_TYPE(...) DECLARE_RELATIONSHIP_OF_CLASSES(__VA_ARGS__) + +namespace OHOS::Ace { + +// Inherit 'AceType' to manager pointers using 'RefPtr', 'WeakPtr' and 'AceType::DynamicCast'. +class AceType : public virtual TypeInfoBase, public virtual Referenced { + DECLARE_ACE_TYPE(AceType, TypeInfoBase); + +public: + ~AceType() override = default; + + template + static T* DynamicCast(AceType* rawPtr) + { + return TypeInfoHelper::DynamicCast(rawPtr); + } + template + static const T* DynamicCast(const AceType* rawPtr) + { + return TypeInfoHelper::DynamicCast(rawPtr); + } + template + static RefPtr DynamicCast(const RefPtr& ptr) + { + return Claim(DynamicCast(RawPtr(ptr))); + } + template + static WeakPtr DynamicCast(const WeakPtr& weak) + { + return WeakClaim(DynamicCast(RawPtr(weak.Upgrade()))); + } + + // Get type info by instance. + static AceType::IdType TypeId(const AceType* rawPtr) + { + return TypeInfoHelper::TypeId(rawPtr); + } + template + static AceType::IdType TypeId(const RefPtr& ptr) + { + return TypeId(AceType::RawPtr(ptr)); + } + static AceType::IdType TypeId(const AceType& instance) + { + return TypeInfoHelper::TypeId(instance); + } + static const char* TypeName(const AceType* rawPtr) + { + return TypeInfoHelper::TypeName(rawPtr); + } + template + static const char* TypeName(const RefPtr& ptr) + { + return TypeName(AceType::RawPtr(ptr)); + } + static const char* TypeName(const AceType& instance) + { + return TypeInfoHelper::TypeName(instance); + } + + // Get type info by type itself. + template + static AceType::IdType TypeId() + { + return TypeInfoHelper::TypeId(); + } + template + static const char* TypeName() + { + return TypeInfoHelper::TypeName(); + } + + // Check whether instance is the specified type + template + static bool InstanceOf(const AceType* rawPtr) + { + return TypeInfoHelper::InstanceOf(rawPtr); + } + template + static bool InstanceOf(const AceType& instance) + { + return TypeInfoHelper::InstanceOf(&instance); + } + template + static bool InstanceOf(const RefPtr& ptr) + { + return TypeInfoHelper::InstanceOf(RawPtr(ptr)); + } + +protected: + AceType() = default; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BASE_MEMORY_ACE_TYPE_H diff --git a/frameworks/base/memory/memory_monitor.cpp b/frameworks/base/memory/memory_monitor.cpp new file mode 100644 index 00000000..2e31857d --- /dev/null +++ b/frameworks/base/memory/memory_monitor.cpp @@ -0,0 +1,120 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "base/memory/memory_monitor.h" + +#include +#include + +#include "base/log/dump_log.h" +#include "base/log/log.h" + +#ifdef ACE_MEMORY_MONITOR + +namespace OHOS::Ace { + +class MemoryMonitorImpl : public MemoryMonitor { +public: + void Add(void* ptr) final + { + std::lock_guard lock(mutex_); + auto result = memoryMap_.emplace(ptr, MemInfo()); + if (!result.second) { + LOGE("Address is already in memory map"); + return; + } + + count_++; + } + + void Remove(void* ptr) final + { + std::lock_guard lock(mutex_); + auto it = memoryMap_.find(ptr); + if (it == memoryMap_.end()) { + LOGE("Address MUST be in memory map"); + return; + } + count_--; + + if (it->second.size > 0) { + total_ -= it->second.size; + auto& info = typeMap_[it->second.typeName]; + info.count--; + info.total -= it->second.size; + } + memoryMap_.erase(it); + } + + void Update(void* ptr, size_t size, const std::string& typeName) final + { + std::lock_guard lock(mutex_); + auto it = memoryMap_.find(ptr); + if (it == memoryMap_.end()) { + LOGE("Address MUST be in memory map"); + return; + } + + it->second.size = size; + it->second.typeName = typeName; + + total_ += size; + auto& info = typeMap_[typeName]; + info.count++; + info.total += size; + } + + void Dump() const final + { + std::lock_guard lock(mutex_); + std::string out = "total = " + std::to_string(total_) + ", count = " + std::to_string(count_); + DumpLog::GetInstance().Print(0, out); + for (auto&& [typeName, info] : typeMap_) { + if (info.total == 0) { + continue; + } + out = typeName + ": total = " + std::to_string(info.total) + ", count = " + std::to_string(info.count); + DumpLog::GetInstance().Print(1, out); + } + } + +private: + struct MemInfo { + size_t size = 0; + std::string typeName = "Unknown"; + }; + + struct TypeInfo { + size_t count = 0; + size_t total = 0; + }; + + std::map memoryMap_; + std::map typeMap_; + size_t total_ = 0; + size_t count_ = 0; + + mutable std::mutex mutex_; +}; + +MemoryMonitor& MemoryMonitor::GetInstance() +{ + static MemoryMonitorImpl instance; + return instance; +} + +} // namespace OHOS::Ace + +#endif // ACE_MEMORY_MONITOR diff --git a/frameworks/base/memory/memory_monitor.h b/frameworks/base/memory/memory_monitor.h new file mode 100644 index 00000000..d7556c54 --- /dev/null +++ b/frameworks/base/memory/memory_monitor.h @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_MEMORY_MEMORY_MONITOR_H +#define FOUNDATION_ACE_FRAMEWORKS_BASE_MEMORY_MEMORY_MONITOR_H + +#include + +#include "base/memory/memory_monitor_def.h" +#include "base/memory/type_info_base.h" +#include "base/utils/macros.h" + +#ifdef ACE_MEMORY_MONITOR + +namespace OHOS::Ace { + +class ACE_EXPORT MemoryMonitor { +public: + static MemoryMonitor& GetInstance(); + + virtual ~MemoryMonitor() = default; + + virtual void Add(void* ptr) = 0; + virtual void Remove(void* ptr) = 0; + virtual void Update(void* ptr, size_t size, const std::string& typeName) = 0; + virtual void Dump() const = 0; + + template + void Update(T* ptr, void* refPtr) + { + if (ptr != nullptr && ptr->RefCount() == 0) { + Update(refPtr, TypeInfo::Size(ptr), TypeInfo::Name(ptr)); + } + } + +private: + template> + struct TypeInfo; + + template + struct TypeInfo { + static const char* Name(T*) + { + return "Unknown"; + } + + static size_t Size(T*) + { + return sizeof(T); + } + }; + + template + struct TypeInfo { + static const char* Name(T* rawPtr) + { + return TypeInfoHelper::TypeName(rawPtr); + } + + static size_t Size(T* rawPtr) + { + return TypeInfoHelper::TypeSize(rawPtr); + } + }; +}; + +} // namespace OHOS::Ace + +#endif // ACE_MEMORY_MONITOR + +#endif // FOUNDATION_ACE_FRAMEWORKS_BASE_MEMORY_MEMORY_MONITOR_H diff --git a/frameworks/base/memory/memory_monitor_def.h b/frameworks/base/memory/memory_monitor_def.h new file mode 100644 index 00000000..6b0ff373 --- /dev/null +++ b/frameworks/base/memory/memory_monitor_def.h @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_MEMORY_MEMORY_MONITOR_DEF_H +#define FOUNDATION_ACE_FRAMEWORKS_BASE_MEMORY_MEMORY_MONITOR_DEF_H + +#include + +#include "base/utils/macros.h" + +#ifdef ACE_DEBUG +#define ACE_MEMORY_MONITOR +#endif + +#ifdef ACE_MEMORY_MONITOR +#define VERIFY_CLASSNAME(classname, p) \ + VerifyClass>>>::Success() + +#define VERIFY_DECLARED_CLASS(classname) \ + VerifyClass>::Success() + +#define DECLARE_CLASS_TYPE_SIZE(classname) \ + typedef classname SelfType; \ + static size_t TypeSize() \ + { \ + return sizeof(classname); \ + } + +#define DECLARE_CLASS_GET_TYPE_SIZE(classname) \ + size_t GetTypeSize() const override \ + { \ + VERIFY_CLASSNAME(classname, this); \ + return TypeSize(); \ + } + +namespace OHOS::Ace { + +template +struct VerifyClass; + +template<> +struct VerifyClass { + static void Success() {} +}; + +} // namespace OHOS::Ace + +#else // ACE_MEMORY_MONITOR +#define DECLARE_CLASS_TYPE_SIZE(classname) +#define DECLARE_CLASS_GET_TYPE_SIZE(classname) +#define VERIFY_DECLARED_CLASS(classname) +#endif // ACE_MEMORY_MONITOR + +#endif // FOUNDATION_ACE_FRAMEWORKS_BASE_MEMORY_MEMORY_MONITOR_DEF_H diff --git a/frameworks/base/memory/ref_counter.h b/frameworks/base/memory/ref_counter.h new file mode 100644 index 00000000..4b7d23fd --- /dev/null +++ b/frameworks/base/memory/ref_counter.h @@ -0,0 +1,168 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_MEMORY_REF_COUNTER_H +#define FOUNDATION_ACE_FRAMEWORKS_BASE_MEMORY_REF_COUNTER_H + +#include + +#include "base/utils/macros.h" +#include "base/utils/noncopyable.h" + +namespace OHOS::Ace { + +// Reference counter. +class RefCounter { +public: + virtual int32_t IncStrongRef() = 0; + virtual int32_t DecStrongRef() = 0; + virtual int32_t TryIncStrongRef() = 0; + virtual int32_t StrongRefCount() const = 0; + virtual int32_t IncWeakRef() = 0; + virtual int32_t DecWeakRef() = 0; + +protected: + virtual ~RefCounter() = default; +}; + +// Define thread-safe counter using 'std::atomic' to implement Increase/Decrease count. +class ThreadSafeCounter final { +public: + explicit ThreadSafeCounter(int32_t count) : count_(count) {} + ~ThreadSafeCounter() = default; + + int32_t Increase() + { + int32_t count = count_.fetch_add(1, std::memory_order_relaxed) + 1; + ACE_DCHECK(count > 0); + return count; + } + int32_t Decrease() + { + int32_t count = count_.fetch_sub(1, std::memory_order_release); + ACE_DCHECK(count > 0); + return count - 1; + } + int32_t CurrentCount() const + { + return count_.load(std::memory_order_relaxed); + } + + // Try to increase reference count while current value is not zero. + int32_t TryIncrease() + { + int32_t count = CurrentCount(); + do { + if (count == 0) { + return 0; + } + ACE_DCHECK(count > 0); + } while (!count_.compare_exchange_weak(count, count + 1, std::memory_order_relaxed)); + return count + 1; + } + +private: + std::atomic count_ { 0 }; + + ACE_DISALLOW_COPY_AND_MOVE(ThreadSafeCounter); +}; + +// Define thread-unsafe counter. +class ThreadUnsafeCounter final { +public: + explicit ThreadUnsafeCounter(int32_t count) : count_(count) {} + ~ThreadUnsafeCounter() = default; + + int32_t Increase() + { + int32_t count = ++count_; + ACE_DCHECK(count > 0); + return count; + } + int32_t Decrease() + { + int32_t count = --count_; + ACE_DCHECK(count >= 0); + return count; + } + int32_t CurrentCount() const + { + return count_; + } + + // Try to increase count while current value is not zero. + int32_t TryIncrease() + { + return CurrentCount() == 0 ? 0 : Increase(); + } + +private: + int32_t count_ { 0 }; + + ACE_DISALLOW_COPY_AND_MOVE(ThreadUnsafeCounter); +}; + +template +class RefCounterImpl final : public RefCounter { +public: + static RefCounter* Create() + { + return new RefCounterImpl(); + } + + int32_t IncStrongRef() final + { + return strongRef_.Increase(); + } + int32_t DecStrongRef() final + { + return strongRef_.Decrease(); + } + int32_t TryIncStrongRef() final + { + return strongRef_.TryIncrease(); + } + int32_t StrongRefCount() const final + { + return strongRef_.CurrentCount(); + } + + int32_t IncWeakRef() final + { + return weakRef_.Increase(); + } + int32_t DecWeakRef() final + { + int32_t refCount = weakRef_.Decrease(); + if (refCount == 0) { + // Release this reference counter, while its weak reference have reduced to zero. + delete this; + } + return refCount; + } + +private: + T strongRef_ { 0 }; + // Weak reference count should start with 1, + // because instance MUST hold the reference counter for itself. + T weakRef_ { 1 }; +}; + +using ThreadSafeRef = RefCounterImpl; +using ThreadUnsafeRef = RefCounterImpl; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BASE_MEMORY_REF_COUNTER_H diff --git a/frameworks/base/memory/referenced.h b/frameworks/base/memory/referenced.h new file mode 100644 index 00000000..404a00b1 --- /dev/null +++ b/frameworks/base/memory/referenced.h @@ -0,0 +1,466 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_MEMORY_REFERENCED_H +#define FOUNDATION_ACE_FRAMEWORKS_BASE_MEMORY_REFERENCED_H + +#include + +#include "base/memory/memory_monitor.h" +#include "base/memory/ref_counter.h" +#include "base/utils/macros.h" + +#define ACE_REMOVE(...) + +namespace OHOS::Ace { + +template +class RefPtr; +template +class WeakPtr; + +// Inherit this class to use 'RefPtr' and 'WeakPtr' to manage pointer of instance. +class Referenced { +public: + // Use raw pointer to construct 'RefPtr' and 'WeakPtr'. + template + static RefPtr Claim(T* rawPtr) + { +#ifdef ACE_MEMORY_MONITOR + MemoryMonitor::GetInstance().Update(rawPtr, static_cast(rawPtr)); +#endif + return RefPtr(rawPtr); + } + template + static WeakPtr WeakClaim(T* rawPtr) + { + return WeakPtr(rawPtr); + } + + // 'Referenced::MakeRefPtr' is used to create new instance inherited from 'Referenced', + // and manager its pointer using 'RefPtr'. + template + static RefPtr MakeRefPtr(Args&&... args) + { + return Claim(new T(std::forward(args)...)); + } + + // Get raw pointer from 'RefPtr'. + template + static T* RawPtr(const RefPtr& ptr) + { + return ptr.rawPtr_; + } + + int32_t IncRefCount() + { + return refCounter_->IncStrongRef(); + } + int32_t DecRefCount() + { + int32_t refCount = refCounter_->DecStrongRef(); + if (refCount == 0 && MaybeRelease()) { + // Release this instance, while its strong reference have reduced to zero. + delete this; + } + return refCount; + } +#ifdef ACE_MEMORY_MONITOR + int32_t RefCount() const + { + return refCounter_->StrongRefCount(); + } +#endif + +protected: + explicit Referenced(bool threadSafe = true) + : refCounter_(threadSafe ? ThreadSafeRef::Create() : ThreadUnsafeRef::Create()) + { +#ifdef ACE_MEMORY_MONITOR + MemoryMonitor::GetInstance().Add(this); +#endif + } + + virtual ~Referenced() + { + // Decrease weak reference count held by 'Referenced' itself. + refCounter_->DecWeakRef(); + refCounter_ = nullptr; +#ifdef ACE_MEMORY_MONITOR + MemoryMonitor::GetInstance().Remove(this); +#endif + } + + virtual bool MaybeRelease() + { + return true; + } + +private: + template + friend class RefPtr; + template + friend class WeakPtr; + + RefCounter* refCounter_ { nullptr }; + + ACE_DISALLOW_COPY_AND_MOVE(Referenced); +}; + +// Use reference count to manager instance inherited from 'Referenced'. +// Implicit conversion is necessary in some cases, so remove 'explicit' from construct function. +template +class RefPtr final { +public: + // Basic constructors. + RefPtr() = default; + ACE_REMOVE(explicit) RefPtr(std::nullptr_t) {} + // Basic copy and move constructors. + ACE_REMOVE(explicit) RefPtr(const RefPtr& other) : RefPtr(other.rawPtr_) {} + ACE_REMOVE(explicit) RefPtr(RefPtr&& other) : rawPtr_(other.rawPtr_) + { + other.rawPtr_ = nullptr; + } + // Construct instance by other 'RefPtr' that inherited from type 'T'. + template + ACE_REMOVE(explicit) RefPtr(const RefPtr& other) : RefPtr(other.rawPtr_) {} + template + ACE_REMOVE(explicit) RefPtr(RefPtr&& other) : rawPtr_(other.rawPtr_) + { + other.rawPtr_ = nullptr; + } + + ~RefPtr() + { + if (rawPtr_ != nullptr) { + // Decrease strong reference count. + rawPtr_->DecRefCount(); + rawPtr_ = nullptr; + } + } + + void Swap(RefPtr& other) + { + std::swap(rawPtr_, other.rawPtr_); + } + void Swap(RefPtr&& other) + { + Swap(other); + } + void Reset() + { + Swap(RefPtr()); + } + + T* operator->() const + { + return rawPtr_; + } + T& operator*() const + { + ACE_DCHECK(rawPtr_ != nullptr); + return *rawPtr_; + } + operator bool() const + { + return rawPtr_ != nullptr; + } + + // Use 'Swap' to implement overloaded operator '='. + // Construct a temporary 'RefPtr' by different parameters to increase strong reference count of the new instance, + // swap with 'this', and then decrease strong reference of the old instance while destroying the temporary 'RefPtr'. + RefPtr& operator=(const RefPtr& other) + { + if (this != &other) { + Swap(RefPtr(other)); + } + return *this; + } + RefPtr& operator=(RefPtr&& other) + { + if (this != &other) { + Swap(RefPtr(std::move(other))); + } + return *this; + } + + template + RefPtr& operator=(O* rawPtr) + { + Swap(RefPtr(rawPtr)); + return *this; + } + template + RefPtr& operator=(const RefPtr& other) + { + Swap(RefPtr(other)); + return *this; + } + template + RefPtr& operator=(RefPtr&& other) + { + Swap(RefPtr(std::move(other))); + return *this; + } + + // Comparing pointer of reference counter to implement Overloaded operator '==' and '!='. + template + bool operator==(const O* rawPtr) const + { + if (rawPtr_ == nullptr) { + return rawPtr == nullptr; + } + return rawPtr != nullptr && rawPtr_->refCounter_ == rawPtr->refCounter_; + } + template + bool operator!=(const O* rawPtr) const + { + return !operator==(rawPtr); + } + + template + bool operator==(const RefPtr& other) const + { + return *this == other.rawPtr_; + } + template + bool operator!=(const RefPtr& other) const + { + return !operator==(other); + } + + template + bool operator==(const WeakPtr& weak) const + { + return weak == *this; + } + template + bool operator!=(const WeakPtr& weak) const + { + return !operator==(weak); + } + + bool operator==(std::nullptr_t) const + { + return rawPtr_ == nullptr; + } + bool operator!=(std::nullptr_t) const + { + return rawPtr_ != nullptr; + } + + // Overload '<' is useful for 'std::map', 'std::set' and so on. + template + bool operator<(const RefPtr& other) const + { + if (rawPtr_ == nullptr) { + return other.rawPtr_ != nullptr; + } + return other.rawPtr_ != nullptr && rawPtr_->refCounter_ < other.rawPtr_->refCounter_; + } + +private: + // Construct instance by raw pointer. + // 'WeakPtr' may construct 'RefPtr' without increasing its strong reference count, + // because strong reference count is already increased in 'WeakPtr' while upgrading. + // In that case, 'forceIncRef' should be 'false'. + explicit RefPtr(T* rawPtr, bool forceIncRef = true) : rawPtr_(rawPtr) + { + if (rawPtr_ != nullptr && forceIncRef) { + // Increase strong reference count for holding instance. + rawPtr_->IncRefCount(); + } + } + + friend class Referenced; + template + friend class RefPtr; + template + friend class WeakPtr; + + T* rawPtr_ { nullptr }; +}; + +// Working with 'RefPtr' to resolve 'circular reference'. +// Implicit conversion is necessary in some cases, so remove 'explicit' from construct function. +template +class WeakPtr final { +public: + // Basic constructors. + WeakPtr() = default; + ACE_REMOVE(explicit) WeakPtr(std::nullptr_t) {} + // Basic copy and move constructors. + ACE_REMOVE(explicit) WeakPtr(const WeakPtr& other) : WeakPtr(other.unsafeRawPtr_, other.refCounter_) {} + ACE_REMOVE(explicit) WeakPtr(WeakPtr&& other) : unsafeRawPtr_(other.unsafeRawPtr_), refCounter_(other.refCounter_) + { + other.unsafeRawPtr_ = nullptr; + other.refCounter_ = nullptr; + } + // Construct instance by other 'WeakPtr' that inherited from type 'T'. + template + ACE_REMOVE(explicit) WeakPtr(const WeakPtr& other) : WeakPtr(other.unsafeRawPtr_, other.refCounter_) {} + template + ACE_REMOVE(explicit) WeakPtr(WeakPtr&& other) + : unsafeRawPtr_(other.unsafeRawPtr_), refCounter_(other.refCounter_) + { + other.unsafeRawPtr_ = nullptr; + other.refCounter_ = nullptr; + } + // Construct instance by 'RefPtr' that inherited from type 'T' or 'T' itself. + template + ACE_REMOVE(explicit) WeakPtr(const RefPtr& other) : WeakPtr(other.rawPtr_) {} + + ~WeakPtr() + { + // Decrease weak reference count while releasing reference counter. + if (refCounter_ != nullptr) { + refCounter_->DecWeakRef(); + refCounter_ = nullptr; + unsafeRawPtr_ = nullptr; + } + } + + void Swap(WeakPtr& other) + { + std::swap(unsafeRawPtr_, other.unsafeRawPtr_); + std::swap(refCounter_, other.refCounter_); + } + void Swap(WeakPtr&& other) + { + Swap(other); + } + void Reset() + { + Swap(WeakPtr()); + } + + RefPtr Upgrade() const + { + // A 'WeakPtr' could upgrade to 'RefPtr' if this instance is still alive. + return refCounter_ != nullptr && refCounter_->TryIncStrongRef() > 0 ? RefPtr(unsafeRawPtr_, false) : nullptr; + } + bool Invalid() const + { + return refCounter_ == nullptr || refCounter_->StrongRefCount() == 0; + } + + // Use 'Swap' to implement overloaded operator '=', just like 'RefPtr'. + WeakPtr& operator=(const WeakPtr& other) + { + if (this != &other) { + Swap(WeakPtr(other)); + } + return *this; + } + WeakPtr& operator=(WeakPtr&& other) + { + if (this != &other) { + Swap(WeakPtr(std::move(other))); + } + return *this; + } + + template + WeakPtr& operator=(O* rawPtr) + { + Swap(WeakPtr(rawPtr)); + return *this; + } + template + WeakPtr& operator=(const WeakPtr& other) + { + Swap(WeakPtr(other)); + return *this; + } + template + WeakPtr& operator=(WeakPtr&& other) + { + Swap(WeakPtr(std::move(other))); + return *this; + } + template + WeakPtr& operator=(const RefPtr& other) + { + Swap(WeakPtr(other.rawPtr_)); + return *this; + } + + // Comparing pointer of reference counter to implement Overloaded operator '==' and '!=', just like 'RefPtr'. + template + bool operator==(const O* rawPtr) const + { + if (refCounter_ == nullptr) { + return rawPtr == nullptr; + } + return rawPtr != nullptr && refCounter_ == rawPtr->refCounter_; + } + template + bool operator!=(const O* rawPtr) const + { + return !operator==(rawPtr); + } + + template + bool operator==(const WeakPtr& other) const + { + return refCounter_ == other.refCounter_; + } + template + bool operator!=(const WeakPtr& other) const + { + return !operator==(other); + } + + template + bool operator==(const RefPtr& strong) const + { + return strong.rawPtr_ != nullptr ? strong.rawPtr_->refCounter_ == refCounter_ : refCounter_ == nullptr; + } + template + bool operator!=(const RefPtr& strong) const + { + return !operator==(strong); + } + + // Overload '<' is useful for 'std::map', 'std::set' and so on, just like 'RefPtr'. + template + bool operator<(const WeakPtr& other) const + { + return refCounter_ < other.refCounter_; + } + +private: + // Construct instance by raw pointer. + explicit WeakPtr(T* rawPtr) : WeakPtr(rawPtr, rawPtr != nullptr ? rawPtr->refCounter_ : nullptr) {} + template + WeakPtr(O* rawPtr, RefCounter* aceRef) : unsafeRawPtr_(rawPtr), refCounter_(aceRef) + { + if (refCounter_) { + refCounter_->IncWeakRef(); + } + } + + friend class Referenced; + template + friend class WeakPtr; + + // Notice: Raw pointer of instance is kept, but NEVER use it except succeed to upgrade to 'RefPtr'. + T* unsafeRawPtr_ { nullptr }; + RefCounter* refCounter_ { nullptr }; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BASE_MEMORY_REFERENCED_H diff --git a/frameworks/base/memory/type_info_base.h b/frameworks/base/memory/type_info_base.h new file mode 100644 index 00000000..46fa9376 --- /dev/null +++ b/frameworks/base/memory/type_info_base.h @@ -0,0 +1,167 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_MEMORY_TYPE_INFO_BASE_H +#define FOUNDATION_ACE_FRAMEWORKS_BASE_MEMORY_TYPE_INFO_BASE_H + +#include + +#include "base/memory/memory_monitor_def.h" + +// Generate 'TypeInfo' for each classes. +// And using hash code of its name for 'TypeId'. +#define DECLARE_CLASS_TYPE_INFO(classname) \ +public: \ + static const char* TypeName() \ + { \ + return #classname; \ + } \ + static IdType TypeId() \ + { \ + static IdType myTypeId = std::hash {}(TypeName()); \ + return myTypeId; \ + } \ + DECLARE_CLASS_TYPE_SIZE(classname) + +// Integrate it into class declaration to support 'DynamicCast'. +#define DECLARE_RELATIONSHIP_OF_CLASSES(classname, ...) DECLARE_CLASS_TYPE_INFO(classname) \ +protected: \ + template \ + uintptr_t TrySafeCastById(IdType id) const \ + { \ + VERIFY_DECLARED_CLASS(__T); \ + uintptr_t ptr = __T::SafeCastById(id); \ + return ptr != 0 ? ptr : TrySafeCastById<__O, __V...>(id); \ + } \ + template \ + uintptr_t TrySafeCastById(IdType id) const \ + { \ + VERIFY_DECLARED_CLASS(__T); \ + return __T::SafeCastById(id); \ + } \ + uintptr_t SafeCastById(IdType id) const override \ + { \ + return id == TypeId() ? reinterpret_cast(this) : TrySafeCastById<__VA_ARGS__>(id); \ + } \ + IdType GetTypeId() const override \ + { \ + return TypeId(); \ + } \ + const char* GetTypeName() const override \ + { \ + return TypeName(); \ + } \ + DECLARE_CLASS_GET_TYPE_SIZE(classname) + +namespace OHOS::Ace { + +// Define the base class, inherit this class to support partial 'RTTI' feature. +class TypeInfoBase { +public: + friend class TypeInfoHelper; + virtual ~TypeInfoBase() = default; + + using IdType = std::size_t; + DECLARE_CLASS_TYPE_INFO(TypeInfoBase); + +protected: + virtual uintptr_t SafeCastById(IdType id) const + { + return id == TypeId() ? reinterpret_cast(this) : 0; + } + + virtual IdType GetTypeId() const = 0; + virtual const char* GetTypeName() const = 0; +#ifdef ACE_MEMORY_MONITOR + virtual size_t GetTypeSize() const = 0; +#endif // ACE_MEMORY_MONITOR +}; + +class TypeInfoHelper final { +public: + TypeInfoHelper() = delete; + ~TypeInfoHelper() = delete; + + // Convert pointer of instance inherited from 'TypeInfoBase'. + // Notice: Result SHOULD BE checked with 'nullptr', because 'DynamicCast' might be failed. + template + static T* DynamicCast(TypeInfoBase* rawPtr) + { + VERIFY_DECLARED_CLASS(T); + return rawPtr != nullptr ? reinterpret_cast(rawPtr->SafeCastById(T::TypeId())) : nullptr; + } + template + static const T* DynamicCast(const TypeInfoBase* rawPtr) + { + VERIFY_DECLARED_CLASS(T); + return rawPtr != nullptr ? reinterpret_cast(rawPtr->SafeCastById(T::TypeId())) : nullptr; + } + + // Get type info by instance. + static TypeInfoBase::IdType TypeId(const TypeInfoBase* rawPtr) + { + return rawPtr != nullptr ? rawPtr->GetTypeId() : 0; + } + static TypeInfoBase::IdType TypeId(const TypeInfoBase& instance) + { + return TypeId(&instance); + } + static const char* TypeName(const TypeInfoBase* rawPtr) + { + return rawPtr != nullptr ? rawPtr->GetTypeName() : nullptr; + } + static const char* TypeName(const TypeInfoBase& instance) + { + return TypeName(&instance); + } +#ifdef ACE_MEMORY_MONITOR + static size_t TypeSize(const TypeInfoBase* rawPtr) + { + return rawPtr != nullptr ? rawPtr->GetTypeSize() : 0; + } + static size_t TypeSize(const TypeInfoBase& instance) + { + return TypeSize(&instance); + } +#endif + + // Get type info by type itself. + template + static TypeInfoBase::IdType TypeId() + { + return T::TypeId(); + } + template + static const char* TypeName() + { + return T::TypeName(); + } + + // Check whether instance is the specified type + template + static bool InstanceOf(const TypeInfoBase* rawPtr) + { + return DynamicCast(rawPtr) != nullptr; + } + template + static bool InstanceOf(const TypeInfoBase& instance) + { + return DynamicCast(&instance) != nullptr; + } +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BASE_MEMORY_TYPE_INFO_BASE_H diff --git a/frameworks/base/network/download_manager.cpp b/frameworks/base/network/download_manager.cpp new file mode 100644 index 00000000..840b4402 --- /dev/null +++ b/frameworks/base/network/download_manager.cpp @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "base/network/download_manager.h" + +#include +#include + +#include "curl/curl.h" + +#include "base/log/log.h" +#include "base/utils/singleton.h" +#include "base/utils/utils.h" + +#define ACE_CURL_EASY_SET_OPTION(handle, opt, data) \ + do { \ + CURLcode result = curl_easy_setopt(handle, opt, data); \ + if (result != CURLE_OK) { \ + LOGE("Failed to set option: %{public}s, %{public}s", #opt, curl_easy_strerror(result)); \ + return false; \ + } \ + } while (0) + +namespace OHOS::Ace { +namespace { + +class DownloadManagerImpl final : public DownloadManager, public Singleton { + DECLARE_SINGLETON(DownloadManagerImpl); + ACE_DISALLOW_MOVE(DownloadManagerImpl); + +public: + bool Download(const std::string& url, std::vector& dataOut) override + { + if (!Initialize()) { + return false; + } + + std::unique_ptr handle(curl_easy_init(), &curl_easy_cleanup); + if (!handle) { + LOGE("Failed to create download task"); + return false; + } + + dataOut.clear(); + + ACE_CURL_EASY_SET_OPTION(handle.get(), CURLOPT_URL, url.c_str()); + ACE_CURL_EASY_SET_OPTION(handle.get(), CURLOPT_WRITEFUNCTION, OnWritingMemory); + ACE_CURL_EASY_SET_OPTION(handle.get(), CURLOPT_WRITEDATA, &dataOut); + // Some servers don't like requests that are made without a user-agent field, so we provide one + ACE_CURL_EASY_SET_OPTION(handle.get(), CURLOPT_USERAGENT, "libcurl-agent/1.0"); + ACE_CURL_EASY_SET_OPTION(handle.get(), CURLOPT_URL, url.c_str()); +#ifdef WINDOWS_PLATFORM + ACE_CURL_EASY_SET_OPTION(handle.get(), CURLOPT_SSL_VERIFYPEER, 0L); + ACE_CURL_EASY_SET_OPTION(handle.get(), CURLOPT_SSL_VERIFYHOST, 0L); +#endif + + CURLcode result = curl_easy_perform(handle.get()); + if (result != CURLE_OK) { + LOGE("Failed to download, url: %{private}s, %{public}s", url.c_str(), curl_easy_strerror(result)); + dataOut.clear(); + return false; + } + dataOut.shrink_to_fit(); + return true; + } + +private: + static size_t OnWritingMemory(void* data, size_t size, size_t memBytes, void* userData) + { + // size is always 1, for more details see https://curl.haxx.se/libcurl/c/CURLOPT_WRITEFUNCTION.html + auto& dataOut = *static_cast*>(userData); + auto chunkData = static_cast(data); + dataOut.insert(dataOut.end(), chunkData, chunkData + memBytes); + return memBytes; + } + + bool Initialize() + { + if (initialized_) { + return true; + } + + std::lock_guard lock(mutex_); + if (initialized_) { + return true; + } + if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) { + LOGE("Failed to initialize 'curl'"); + return false; + } + initialized_ = true; + return true; + } + + std::mutex mutex_; + bool initialized_ = false; +}; + +DownloadManagerImpl::DownloadManagerImpl() = default; + +DownloadManagerImpl::~DownloadManagerImpl() +{ + curl_global_cleanup(); +} + +} + +DownloadManager& DownloadManager::GetInstance() +{ + return Singleton::GetInstance(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/base/network/download_manager.h b/frameworks/base/network/download_manager.h new file mode 100644 index 00000000..7d4fc6e2 --- /dev/null +++ b/frameworks/base/network/download_manager.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_NETWORK_DOWNLOAD_MANAGER_H +#define FOUNDATION_ACE_FRAMEWORKS_BASE_NETWORK_DOWNLOAD_MANAGER_H + +#include +#include +#include + +namespace OHOS::Ace { + +class DownloadManager { +public: + static DownloadManager& GetInstance(); + + virtual ~DownloadManager() = default; + virtual bool Download(const std::string& url, std::vector& dataOut) = 0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BASE_NETWORK_DOWNLOAD_MANAGER_H diff --git a/frameworks/base/resource/BUILD.gn b/frameworks/base/resource/BUILD.gn new file mode 100644 index 00000000..a5fcf57f --- /dev/null +++ b/frameworks/base/resource/BUILD.gn @@ -0,0 +1,159 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/ace_config.gni") + +source_set("ace_resource") { + deps = [ ":binary_resource" ] + + # add resource file here + sources = [ + "internal_resource.cpp", + "shared_image_manager.cpp", + ] + + configs += [ "$ace_root:ace_config" ] + + if (current_os == "mingw") { + cflags = [ "-std=c++17" ] + } +} + +source_set("binary_resource") { + if (current_os == "mac") { + ace_resource_dir = "$ace_root/frameworks/base/resource/binary/mac/" + } else { + deps = [ ":objcopy_resource" ] + ace_resource_dir = + get_label_info(":binary_resource($current_toolchain)", "target_out_dir") + } + sources = [ + "$ace_resource_dir/close.o", + "$ace_resource_dir/correct.o", + "$ace_resource_dir/down_arrow.o", + "$ace_resource_dir/entry.o", + "$ace_resource_dir/errorcode.o", + "$ace_resource_dir/exit_full_screen.o", + "$ace_resource_dir/full_screen.o", + "$ace_resource_dir/hide_password.o", + "$ace_resource_dir/ic_back.o", + "$ace_resource_dir/ic_more.o", + "$ace_resource_dir/ic_more_dark.o", + "$ace_resource_dir/ic_more_transparent.o", + "$ace_resource_dir/indexer_arrow.o", + "$ace_resource_dir/indexletter_bar.o", + "$ace_resource_dir/left_arrow.o", + "$ace_resource_dir/pause.o", + "$ace_resource_dir/piece_delete.o", + "$ace_resource_dir/play.o", + "$ace_resource_dir/rate_star_big_off.o", + "$ace_resource_dir/rate_star_big_on.o", + "$ace_resource_dir/rate_star_small_off.o", + "$ace_resource_dir/rate_star_small_on.o", + "$ace_resource_dir/right_arrow.o", + "$ace_resource_dir/search.o", + "$ace_resource_dir/select_arrow_disabled.o", + "$ace_resource_dir/select_arrow_normal.o", + "$ace_resource_dir/semi_modal_bar_down.o", + "$ace_resource_dir/semi_modal_bar_middle.o", + "$ace_resource_dir/share.o", + "$ace_resource_dir/show_password.o", + "$ace_resource_dir/stepper_back_arrow.o", + "$ace_resource_dir/stepper_next_arrow.o", + "$ace_resource_dir/translate_c2e.o", + "$ace_resource_dir/tv_rate_star_big_off.o", + "$ace_resource_dir/tv_rate_star_big_on.o", + "$ace_resource_dir/tv_rate_star_small_off.o", + "$ace_resource_dir/tv_rate_star_small_on.o", + "$ace_resource_dir/up_arrow.o", + "$ace_resource_dir/watch_down_arrow.o", + "$ace_resource_dir/watch_up_arrow.o", + "$ace_resource_dir/wrong.o", + ] +} + +action_foreach("objcopy_resource") { + # add resource file here + sources = [ + "binary/close.svg", + "binary/correct.svg", + "binary/down_arrow.svg", + "binary/exit_full_screen.svg", + "binary/full_screen.svg", + "binary/hide_password.svg", + "binary/i18n/entry.json", + "binary/i18n/errorcode.json", + "binary/ic_back.svg", + "binary/ic_more.svg", + "binary/ic_more_dark.svg", + "binary/ic_more_transparent.svg", + "binary/indexer_arrow.png", + "binary/indexletter_bar.json", + "binary/left_arrow.svg", + "binary/pause.svg", + "binary/piece_delete.svg", + "binary/play.svg", + "binary/rate_star_big_off.svg", + "binary/rate_star_big_on.svg", + "binary/rate_star_small_off.svg", + "binary/rate_star_small_on.svg", + "binary/right_arrow.svg", + "binary/search.svg", + "binary/select_arrow_disabled.png", + "binary/select_arrow_normal.png", + "binary/semi_modal_bar_down.svg", + "binary/semi_modal_bar_middle.svg", + "binary/share.svg", + "binary/show_password.svg", + "binary/stepper_back_arrow.svg", + "binary/stepper_next_arrow.svg", + "binary/translate_c2e.svg", + "binary/tv_rate_star_big_off.svg", + "binary/tv_rate_star_big_on.svg", + "binary/tv_rate_star_small_off.svg", + "binary/tv_rate_star_small_on.svg", + "binary/up_arrow.svg", + "binary/watch_down_arrow.svg", + "binary/watch_up_arrow.svg", + "binary/wrong.svg", + ] + + ace_resource_dir = + get_label_info(":binary_resource($current_toolchain)", "target_out_dir") + + outputs = [ "$ace_resource_dir/{{source_name_part}}.o" ] + + objcopy_tool = objcopy_aarch64 + script = "$flutter_root/engine/flutter/sky/tools/objcopy.py" + + if (use_mingw_win) { + objcopy_tool = objcopy_mingw + script = "$flutter_root/engine/flutter/sky/tools/objcopy_pc_mac.py" + } else if (use_mac) { + objcopy_tool = objcopy_clang + script = "$flutter_root/engine/flutter/sky/tools/objcopy_pc_mac.py" + } else if (target_cpu == "x86_64") { + objcopy_tool = objcopy_x86_64 + } + + args = [ + "--objcopy", + rebase_path("$objcopy_tool"), + "--input", + "{{source}}", + "--output", + rebase_path("$ace_resource_dir/") + "{{source_name_part}}.o", + "--arch", + current_cpu, + ] +} diff --git a/frameworks/base/resource/asset_manager.h b/frameworks/base/resource/asset_manager.h new file mode 100644 index 00000000..b8b1e499 --- /dev/null +++ b/frameworks/base/resource/asset_manager.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_RESOURCE_ASSET_MANAGER_H +#define FOUNDATION_ACE_FRAMEWORKS_BASE_RESOURCE_ASSET_MANAGER_H + +#include "base/memory/ace_type.h" +#include "base/memory/referenced.h" + +namespace OHOS::Ace { + +class Asset : public Referenced { +public: + ~Asset() override = default; + + virtual size_t GetSize() const = 0; + virtual const uint8_t* GetData() const = 0; +}; + +class AssetManager : public AceType { + DECLARE_ACE_TYPE(AssetManager, AceType); + +public: + ~AssetManager() override = default; + + virtual RefPtr GetAsset(const std::string& assetName) = 0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BASE_RESOURCE_ASSET_MANAGER_H diff --git a/frameworks/base/resource/binary/close.svg b/frameworks/base/resource/binary/close.svg new file mode 100644 index 00000000..afb8030f --- /dev/null +++ b/frameworks/base/resource/binary/close.svg @@ -0,0 +1,13 @@ + + + ic_cancel + + + + + + + + + + \ No newline at end of file diff --git a/frameworks/base/resource/binary/correct.svg b/frameworks/base/resource/binary/correct.svg new file mode 100644 index 00000000..364a5c91 --- /dev/null +++ b/frameworks/base/resource/binary/correct.svg @@ -0,0 +1,12 @@ + + + + ic/56x56/OK/White + Created with Sketch. + + + + + + + \ No newline at end of file diff --git a/frameworks/base/resource/binary/down_arrow.svg b/frameworks/base/resource/binary/down_arrow.svg new file mode 100644 index 00000000..992ccd9b --- /dev/null +++ b/frameworks/base/resource/binary/down_arrow.svg @@ -0,0 +1,10 @@ + + + + ic/56x56/Arrow/Up + Created with Sketch. + + + + + \ No newline at end of file diff --git a/frameworks/base/resource/binary/exit_full_screen.svg b/frameworks/base/resource/binary/exit_full_screen.svg new file mode 100644 index 00000000..2e1a0173 --- /dev/null +++ b/frameworks/base/resource/binary/exit_full_screen.svg @@ -0,0 +1 @@ +ic \ No newline at end of file diff --git a/frameworks/base/resource/binary/full_screen.svg b/frameworks/base/resource/binary/full_screen.svg new file mode 100644 index 00000000..1465911a --- /dev/null +++ b/frameworks/base/resource/binary/full_screen.svg @@ -0,0 +1 @@ +ic \ No newline at end of file diff --git a/frameworks/base/resource/binary/hide_password.svg b/frameworks/base/resource/binary/hide_password.svg new file mode 100644 index 00000000..be569304 --- /dev/null +++ b/frameworks/base/resource/binary/hide_password.svg @@ -0,0 +1,15 @@ + + + ic_hide + + + + + + + + + + \ No newline at end of file diff --git a/frameworks/base/resource/binary/i18n/entry.json b/frameworks/base/resource/binary/i18n/entry.json new file mode 100644 index 00000000..118d3df1 --- /dev/null +++ b/frameworks/base/resource/binary/i18n/entry.json @@ -0,0 +1,2324 @@ +{ + "zh-CN":{ + "common":{ + "ok":"确定", + "cancel":"取消", + "more":"更多" + }, + "refresh":{ + "last_updated":"上次更新时间:%s", + "loading":"正在刷新…" + }, + "textoverlay":{ + "copy":"复制", + "cut":"剪切", + "paste":"粘贴", + "select_all":"全选", + "translate":"翻译", + "share":"分享", + "search":"搜索" + }, + "switch":{ + "on":"开", + "off":"关" + }, + "stepper":{ + "start":"开始", + "skip":"跳过", + "back":"返回", + "next":"下一步" + } + }, + "en-US":{ + "common":{ + "ok":"OK", + "cancel":"Cancel", + "more":"More" + }, + "refresh":{ + "last_updated":"Last updated: %s", + "loading":"Refreshing…" + }, + "textoverlay":{ + "copy":"Copy", + "cut":"Cut", + "paste":"Paste", + "select_all":"Select all", + "translate":"Translate", + "share":"Share", + "search":"Search" + }, + "switch":{ + "on":"On", + "off":"Off" + }, + "stepper":{ + "start":"START", + "skip":"SKIP", + "back":"BACK", + "next":"NEXT" + } + }, + "ml":{ + "common":{ + "ok":"ശരി", + "cancel":"റദ്ദാക്കുക" + }, + "textoverlay":{ + "paste":"ഒട്ടിക്കുക", + "select_all":"എല്ലാം തിരഞ്ഞെടുക്കുക", + "cut":"കട്ട് ചെയ്യുക", + "copy":"പകർത്തുക", + "search":"തിരയുക", + "share":"പങ്കിടുക", + "translate":"വിവർത്തനം ചെയ്യുക" + }, + "refresh":{ + "last_updated":"അവസാനം അപ്‌ഡേറ്റ് ചെയ്തത്: %s", + "loading":"റിഫ്രഷ് ചെയ്യുന്നു…" + }, + "switch":{ + "on":"ഓൺ", + "off":"ഓഫ്" + }, + "stepper":{ + "skip":"ഒഴിവാക്കുക", + "next":"അടുത്തത്", + "start":"ആരംഭിക്കുക", + "back":"മടങ്ങുക" + } + }, + "tr":{ + "common":{ + "ok":"Tamam", + "cancel":"İptal" + }, + "textoverlay":{ + "paste":"Yapıştır", + "select_all":"Tümünü seç", + "cut":"Kes", + "copy":"Kopyala", + "search":"Ara", + "share":"Paylaş", + "translate":"Çeviri" + }, + "refresh":{ + "last_updated":"Son güncelleme: %s", + "loading":"Yenileniyor..." + }, + "switch":{ + "on":"Açık", + "off":"Kapalı" + }, + "stepper":{ + "skip":"Atla", + "next":"İleri", + "start":"Başlat", + "back":"Geri" + } + }, + "sl":{ + "common":{ + "ok":"V redu", + "cancel":"Prekliči" + }, + "textoverlay":{ + "paste":"Prilepi", + "select_all":"Izberi vse", + "cut":"Izreži", + "copy":"Kopiraj", + "search":"Išči", + "share":"Deli", + "translate":"Prevedi" + }, + "refresh":{ + "last_updated":"Zadnja posodobitev: %s", + "loading":"Osveževanje …" + }, + "switch":{ + "on":"Vklopljeno", + "off":"Izklopljeno" + }, + "stepper":{ + "skip":"Preskoči", + "next":"Naprej", + "start":"Začni", + "back":"Nazaj" + } + }, + "nb":{ + "common":{ + "ok":"OK", + "cancel":"Avbryt" + }, + "textoverlay":{ + "paste":"Lim inn", + "select_all":"Velg alt", + "cut":"Klipp", + "copy":"Kopi", + "search":"Søk", + "share":"Del", + "translate":"Oversett" + }, + "refresh":{ + "last_updated":"Siste oppdatering: %s", + "loading":"Oppdaterer ..." + }, + "switch":{ + "on":"På", + "off":"Av" + }, + "stepper":{ + "skip":"Hopp over", + "next":"Neste", + "start":"Start", + "back":"Tilbake" + } + }, + "bs":{ + "common":{ + "ok":"U redu", + "cancel":"Otkaži" + }, + "textoverlay":{ + "paste":"Zalijepi", + "select_all":"Odaberi sve", + "cut":"Izreži", + "copy":"Kopiraj", + "search":"Pretraživanje", + "share":"Dijelite", + "translate":"Prevedi" + }, + "refresh":{ + "last_updated":"Posljednje ažuriranje: %s", + "loading":"Osvježavanje…" + }, + "switch":{ + "on":"Uključeno", + "off":"Isključeno" + }, + "stepper":{ + "skip":"Preskoči", + "next":"Dalje", + "start":"Pokreni", + "back":"Leđa" + } + }, + "en-GB":{ + "common":{ + "ok":"OK", + "cancel":"Cancel" + }, + "textoverlay":{ + "paste":"Paste", + "select_all":"Select all", + "cut":"Cut", + "copy":"Copy", + "search":"Search", + "share":"Share", + "translate":"Translate" + }, + "refresh":{ + "last_updated":"Last updated: %s", + "loading":"Refreshing…" + }, + "switch":{ + "on":"On", + "off":"Off" + }, + "stepper":{ + "skip":"Skip", + "next":"Next", + "start":"Start", + "back":"Back" + } + }, + "az-AZ":{ + "common":{ + "ok":"OK", + "cancel":"Ləğv edin" + }, + "textoverlay":{ + "paste":"Əlavə edin", + "select_all":"Hamısını seçin", + "cut":"Kəsin", + "copy":"Köçürün", + "search":"Axtarın", + "share":"Paylaşın", + "translate":"Tərcümə edin" + }, + "refresh":{ + "last_updated":"Sonuncu dəfə yenilənib: %s", + "loading":"Təzələnir…" + }, + "switch":{ + "on":"Yanılı", + "off":"Sönülü" + }, + "stepper":{ + "skip":"Ötürün", + "next":"Növbəti", + "start":"Başlayın", + "back":"Geri" + } + }, + "gu":{ + "common":{ + "ok":"ઑકે", + "cancel":"રદ કરો" + }, + "textoverlay":{ + "paste":"પેસ્ટ કરો", + "select_all":"બધું પસંદ કરો", + "cut":"કાપો", + "copy":"કૉપિ કરો", + "search":"શોધો", + "share":"શેર કરો", + "translate":"અનુવાદ કરો" + }, + "refresh":{ + "last_updated":"છેલ્લે અપડેટ કર્યું: %s", + "loading":"રિફ્રેશ કરી રહ્યું છે..." + }, + "switch":{ + "on":"ચાલુ", + "off":"બંધ" + }, + "stepper":{ + "skip":"છોડી દો", + "next":"આગલું", + "start":"પ્રારંભ કરો", + "back":"પાછળ જાઓ" + } + }, + "gl-ES":{ + "common":{ + "ok":"OK", + "cancel":"Cancelar" + }, + "textoverlay":{ + "paste":"Pegar", + "select_all":"Seleccionar todo", + "cut":"Cortar", + "copy":"Copiar", + "search":"Buscar", + "share":"Compartir", + "translate":"Traducir" + }, + "refresh":{ + "last_updated":"Última actualización: %s", + "loading":"Actualizando..." + }, + "switch":{ + "on":"Activado", + "off":"Desactivado" + }, + "stepper":{ + "skip":"Omitir", + "next":"Seguinte", + "start":"Comezar", + "back":"Volver" + } + }, + "am":{ + "common":{ + "ok":"እሺ", + "cancel":"ይቅር" + }, + "textoverlay":{ + "paste":"ለጥፍ", + "select_all":"ሁሉንም ምረጥ", + "cut":"ቁረጥ", + "copy":"ቅዳ", + "search":"ፈልግ", + "share":"አጋራ", + "translate":"ተርጉም" + }, + "refresh":{ + "last_updated":"መጨረሻ የተዘመነው፦ %s", + "loading":"በማደስ ላይ..." + }, + "switch":{ + "on":"በርቷል", + "off":"ጠፍቷል" + }, + "stepper":{ + "skip":"እለፍ", + "next":"ቀጣይ", + "start":"ጀምር", + "back":"ተመለስ" + } + }, + "bg":{ + "common":{ + "ok":"ОК", + "cancel":"Отказ" + }, + "textoverlay":{ + "paste":"Поставяне", + "select_all":"Избор на всички", + "cut":"Изрязване", + "copy":"Копиране", + "search":"Търсене", + "share":"Споделяне", + "translate":"Превод" + }, + "refresh":{ + "last_updated":"Последна актуализация: %s", + "loading":"Опресняване..." + }, + "switch":{ + "on":"Включено", + "off":"Изключено" + }, + "stepper":{ + "skip":"Пропускане", + "next":"Напред", + "start":"Начало", + "back":"Назад" + } + }, + "ro":{ + "common":{ + "ok":"OK", + "cancel":"Anulare" + }, + "textoverlay":{ + "paste":"Lipire", + "select_all":"Selectare totală", + "cut":"Tăiere", + "copy":"Copiere", + "search":"Căutare", + "share":"Partajare", + "translate":"Traducere" + }, + "refresh":{ + "last_updated":"Ultima actualizare: %s", + "loading":"Se reîmprospătează…" + }, + "switch":{ + "on":"Pornit", + "off":"Oprit" + }, + "stepper":{ + "skip":"Omitere", + "next":"Înainte", + "start":"Pornire", + "back":"Înapoi" + } + }, + "ca":{ + "common":{ + "ok":"D\\'acord", + "cancel":"Cancel·lar" + }, + "textoverlay":{ + "paste":"Enganxa", + "select_all":"Selecciona-ho tot", + "cut":"Retalla", + "copy":"Copia", + "search":"Cercar", + "share":"Compartir", + "translate":"Traduir" + }, + "refresh":{ + "last_updated":"Última actualització: %s", + "loading":"S\\'està actualitzant…" + }, + "switch":{ + "on":"Encès", + "off":"Apagat" + }, + "stepper":{ + "skip":"Ometre", + "next":"Següent", + "start":"Iniciar", + "back":"Enrere" + } + }, + "mi":{ + "common":{ + "ok":"ĀE", + "cancel":"Whakakore" + }, + "textoverlay":{ + "paste":"Whakapiri", + "select_all":"Tīpako katoa", + "cut":"Tapahi", + "copy":"Tārua", + "search":"Rapu", + "share":"Tiri", + "translate":"Whakamāori" + }, + "refresh":{ + "last_updated":"Whakahōunga whakamutunga: %s", + "loading":"Tāmata ana..." + }, + "switch":{ + "on":"Kā", + "off":"Weto" + }, + "stepper":{ + "skip":"Tīpoka", + "next":"Panuku", + "start":"Tīmata", + "back":"Hoki" + } + }, + "uz-UZ":{ + "common":{ + "ok":"OK", + "cancel":"Bekor qilish" + }, + "textoverlay":{ + "paste":"Joylash", + "select_all":"Hammasini tanlash", + "cut":"Kesib olish", + "copy":"Nusxalash", + "search":"Qidiruv", + "share":"Ulashish", + "translate":"Tarjima" + }, + "refresh":{ + "last_updated":"Oxirgi yangilanish: %s", + "loading":"Yangilanmoqda…" + }, + "switch":{ + "on":"Yoniq", + "off":"Yoqilmagan" + }, + "stepper":{ + "skip":"Tashlab ketish", + "next":"Keyingisi", + "start":"Boshlash", + "back":"Orqaga" + } + }, + "b+sr+Latn":{ + "common":{ + "ok":"U REDU", + "cancel":"Otkaži" + }, + "textoverlay":{ + "paste":"Nalepi", + "select_all":"Izaberi sve", + "cut":"Iseci", + "copy":"Kopiraj", + "search":"Pretraži", + "share":"Podeli", + "translate":"Prevedi" + }, + "refresh":{ + "last_updated":"Poslednji put ažurirano: %s", + "loading":"Osvežavanje…" + }, + "switch":{ + "on":"Uključeno", + "off":"Isključeno" + }, + "stepper":{ + "skip":"Preskoči", + "next":"Sledeće", + "start":"Pokreni", + "back":"Nazad" + } + }, + "ar":{ + "common":{ + "ok":"موافق", + "cancel":"إلغاء" + }, + "textoverlay":{ + "paste":"لصق", + "select_all":"تحديد الكل", + "cut":"قص", + "copy":"نسخ", + "search":"بحث", + "share":"مشاركة", + "translate":"ترجمة" + }, + "refresh":{ + "last_updated":"آخر تحديث: %s", + "loading":"جاري تجديد المحتوى..." + }, + "switch":{ + "on":"مشغّل", + "off":"مغلق" + }, + "stepper":{ + "skip":"تخطي", + "next":"التالي", + "start":"بدء", + "back":"رجوع" + } + }, + "es-US":{ + "common":{ + "ok":"Aceptar", + "cancel":"Cancelar" + }, + "textoverlay":{ + "paste":"Pegar", + "select_all":"Seleccionar todo", + "cut":"Cortar", + "copy":"Copiar", + "search":"Buscar", + "share":"Compartir", + "translate":"Traducir" + }, + "refresh":{ + "last_updated":"Última actualización: %s", + "loading":"Actualizando..." + }, + "switch":{ + "on":"Sí", + "off":"No" + }, + "stepper":{ + "skip":"Omitir", + "next":"Siguiente", + "start":"Iniciar", + "back":"Volver" + } + }, + "my-ZG":{ + "common":{ + "ok":"အိုေက", + "cancel":"မလုပ္ပါ" + }, + "textoverlay":{ + "paste":"ကူးထည့္ရန္", + "select_all":"အားလုံး ေရြးရန္", + "cut":"ျဖတ္ရန္", + "copy":"ကူးရန္", + "search":"ရွာရန္", + "share":"ေဝမွ်ရန္", + "translate":"ဘာသာျပန္" + }, + "refresh":{ + "last_updated":"ေနာက္ဆုံး အပ္ဒိတ္လုပ္ခဲ့မႈ- %s", + "loading":"ျပန္လည္လုပ္ေဆာင္ေနဆဲ…" + }, + "switch":{ + "on":"ဖြင့္", + "off":"ပိတ္" + }, + "stepper":{ + "skip":"ေက်ာ္ရန္", + "next":"ေရွ႕သို႔", + "start":"စရန္", + "back":"ေနာက္သို႔" + } + }, + "eu-ES":{ + "common":{ + "ok":"Ados", + "cancel":"Utzi" + }, + "textoverlay":{ + "paste":"Itsatsi", + "select_all":"Hautatu dena", + "cut":"Ebaki", + "copy":"Kopiatu", + "search":"Bilatu", + "share":"Partekatu", + "translate":"Itzuli" + }, + "refresh":{ + "last_updated":"Azken eguneratzea: %s", + "loading":"Freskatzen…" + }, + "switch":{ + "on":"Aktibatuta", + "off":"Desaktibatuta" + }, + "stepper":{ + "skip":"Saltatu", + "next":"Hurrengoa", + "start":"Hasi", + "back":"Atzera" + } + }, + "km-KH":{ + "common":{ + "ok":"យល់ព្រម", + "cancel":"បោះបង់" + }, + "textoverlay":{ + "paste":"បិទភ្ជាប់", + "select_all":"ជ្រើសរើសទាំងអស់", + "cut":"កាត់", + "copy":"ចម្លង", + "search":"ស្វែងរក", + "share":"ចែករំលែក", + "translate":"បកប្រែ" + }, + "refresh":{ + "last_updated":"បានធ្វើ​បច្ចុប្បន្នភាព​ចុងក្រោយនៅ៖ %s", + "loading":"កំពុងធ្វើឲ្យថ្មីឡើងវិញ…" + }, + "switch":{ + "on":"បើក", + "off":"បិទ" + }, + "stepper":{ + "skip":"រំលង", + "next":"បន្ទាប់", + "start":"ចាប់ផ្តើម", + "back":"ថយក្រោយ" + } + }, + "bo-CN":{ + "common":{ + "ok":"གཏན་འཁེལ།", + "cancel":"འདོར་བ།" + }, + "textoverlay":{ + "paste":"སྦྱར་བ།", + "select_all":"ཡོངས་འདེམས།", + "cut":"དྲས་གཏུབ།", + "copy":"འདྲ་བཤུས།", + "search":"བཤེར་འཚོལ།", + "share":"མཉམ་སྤྱོད།", + "translate":"ཡིག་སྒྱུར།" + }, + "refresh":{ + "last_updated":"ཐེངས་སྔོན་མར་གསར་བཅོས་བྱས་པའི་དུས་ཚོད། %s", + "loading":"གསར་འདོན་བྱེད་བཞིན་ཡོད།" + }, + "switch":{ + "on":"འབྱེད།", + "off":"ཁ་རྒྱག" + }, + "stepper":{ + "skip":"མཆོང་པ།", + "next":"གོམ་རིམ་ཕྱི་མ།", + "start":"འགོ་རྩོམ།", + "back":"ཕྱིར་ལོག" + } + }, + "mai":{ + "common":{ + "ok":"ठीक अछि", + "cancel":"रद्द करू" + }, + "textoverlay":{ + "paste":"पेस्ट करू", + "select_all":"सभटा केँ चयनित करू", + "cut":"कट करू", + "copy":"कॉपी करू", + "search":"खोजू", + "share":"साझा करू", + "translate":"अनुवाद करू" + }, + "refresh":{ + "last_updated":"अंतिम बेर कयल गेल अपडेट: %s", + "loading":"रिफ्रेश कए रहल अछि..." + }, + "switch":{ + "on":"चालू", + "off":"बंद" + }, + "stepper":{ + "skip":"छोडू", + "next":"अगिला", + "start":"शुरू करू", + "back":"पाछू जाउ" + } + }, + "lt":{ + "common":{ + "ok":"Gerai", + "cancel":"Atšaukti" + }, + "textoverlay":{ + "paste":"Įdėti", + "select_all":"Pasirinkti viską", + "cut":"Iškirpti", + "copy":"Kopijuoti", + "search":"Ieškoti", + "share":"Bendrinti", + "translate":"Versti" + }, + "refresh":{ + "last_updated":"Paskutinis atnaujinimas: %s", + "loading":"Atnaujinama…" + }, + "switch":{ + "on":"Įjungta", + "off":"Išjungta" + }, + "stepper":{ + "skip":"Praleisti", + "next":"Pirmyn", + "start":"Pradėti", + "back":"Atgal" + } + }, + "in":{ + "common":{ + "ok":"OK", + "cancel":"Batal" + }, + "textoverlay":{ + "paste":"Tempel", + "select_all":"Pilih semua", + "cut":"Potong", + "copy":"Salin", + "search":"Cari", + "share":"Berbagi", + "translate":"Terjemahkan" + }, + "refresh":{ + "last_updated":"Terakhir diperbarui: %s", + "loading":"Menyegarkan…" + }, + "switch":{ + "on":"Hidup", + "off":"Mati" + }, + "stepper":{ + "skip":"Lewati", + "next":"Berikutnya", + "start":"Mulai", + "back":"Kembali" + } + }, + "mr":{ + "common":{ + "ok":"ठीक", + "cancel":"रद्द करा" + }, + "textoverlay":{ + "paste":"पेस्ट करा", + "select_all":"सर्व निवडा", + "cut":"कट करा", + "copy":"कॉपी करा", + "search":"शोधा", + "share":"सामायिक करा", + "translate":"अनुवाद करा" + }, + "refresh":{ + "last_updated":"शेवटचे अद्यतनित केले: %s", + "loading":"रिफ्रेश करीत आहे..." + }, + "switch":{ + "on":"चालू", + "off":"बंद" + }, + "stepper":{ + "skip":"वगळा", + "next":"पुढील", + "start":"प्रारंभ करा", + "back":"मागे" + } + }, + "kn":{ + "common":{ + "ok":"ಸರಿ", + "cancel":"ರದ್ದುಗೊಳಿಸಿ" + }, + "textoverlay":{ + "paste":"ಅಂಟಿಸಿ", + "select_all":"ಎಲ್ಲವನ್ನೂ ಆಯ್ಕೆಮಾಡಿ", + "cut":"ಕತ್ತರಿಸಿ", + "copy":"ನಕಲಿಸಿ", + "search":"ಹುಡುಕಿ", + "share":"ಹಂಚಿ", + "translate":"ಅನುವಾದಿಸಿ" + }, + "refresh":{ + "last_updated":"ಕೊನೆಯದಾಗಿ ನವೀಕರಿಸಿದ್ದು: %s", + "loading":"ರಿಫ್ರೆಶ್‌ ಮಾಡಲಾಗುತ್ತಿದೆ…" + }, + "switch":{ + "on":"ಆನ್", + "off":"ಆಫ್" + }, + "stepper":{ + "skip":"ಸ್ಕಿಪ್ ಮಾಡಿ", + "next":"ಮುಂದೆ", + "start":"ಪ್ರಾರಂಭಿಸಿ", + "back":"ಹಿಂದಕ್ಕೆ" + } + }, + "or":{ + "common":{ + "ok":"ଓକେ", + "cancel":"ବାତିଲ୍ କରନ୍ତୁ" + }, + "textoverlay":{ + "paste":"ପେଷ୍ଟ କରନ୍ତୁ", + "select_all":"ସମସ୍ତ ଚୟନ କରନ୍ତୁ", + "cut":"ଛେଦନ କରନ୍ତୁ", + "copy":"କପି କରନ୍ତୁ", + "search":"ସନ୍ଧାନ କରନ୍ତୁ", + "share":"ଅଂଶୀଦାର କରନ୍ତୁ", + "translate":"ଅନୁବାଦ କରନ୍ତୁ" + }, + "refresh":{ + "last_updated":"ଶେଷ ଅପଡେଟ୍ ହୋଇଥିଲା: %s", + "loading":"ସତେଜ କରାଯାଉଛି..." + }, + "switch":{ + "on":"ଅନ୍‌ କରନ୍ତୁ", + "off":"ଅଫ୍" + }, + "stepper":{ + "skip":"ଅତିକ୍ରମ କରନ୍ତୁ", + "next":"ପରବର୍ତ୍ତୀ", + "start":"ଆରମ୍ଭ କରନ୍ତୁ", + "back":"ଫେରନ୍ତୁ" + } + }, + "sv":{ + "common":{ + "ok":"OK", + "cancel":"Avbryt" + }, + "textoverlay":{ + "paste":"Klistra in", + "select_all":"Markera alla", + "cut":"Klipp ut", + "copy":"Kopiera", + "search":"Sök", + "share":"Dela", + "translate":"Översätt" + }, + "refresh":{ + "last_updated":"Senast uppdaterad: %s", + "loading":"Uppdaterar …" + }, + "switch":{ + "on":"På", + "off":"Av" + }, + "stepper":{ + "skip":"Hoppa över", + "next":"Nästa", + "start":"Starta", + "back":"Bakåt" + } + }, + "pt":{ + "common":{ + "ok":"OK", + "cancel":"Cancelar" + }, + "textoverlay":{ + "paste":"Colar", + "select_all":"Selecionar tudo", + "cut":"Recortar", + "copy":"Copiar", + "search":"Pesquisar", + "share":"Compartilhar", + "translate":"Traduzir" + }, + "refresh":{ + "last_updated":"Última atualização: %s", + "loading":"Atualizando…" + }, + "switch":{ + "on":"Ligado", + "off":"Desligado" + }, + "stepper":{ + "skip":"Pular", + "next":"Avançar", + "start":"Iniciar", + "back":"Voltar" + } + }, + "mn":{ + "common":{ + "ok":"OK", + "cancel":"Цуцлах" + }, + "textoverlay":{ + "paste":"Буулгах", + "select_all":"Бүгдийг сонгох", + "cut":"Зөөх", + "copy":"Хуулах", + "search":"Хайх", + "share":"Хуваалцах", + "translate":"Орчуулах" + }, + "refresh":{ + "last_updated":"Сүүлд шинэчилсэн: %s", + "loading":"Шинэчилж байна..." + }, + "switch":{ + "on":"Асаах", + "off":"Унтраах" + }, + "stepper":{ + "skip":"Алгасах", + "next":"Дараагийнх", + "start":"Эхлэх", + "back":"Буцах" + } + }, + "ur":{ + "common":{ + "ok":"ٹھیک ہے", + "cancel":"منسوخ کریں" + }, + "textoverlay":{ + "paste":"پیسٹ کریں", + "select_all":"تمام منتخب کریں", + "cut":"کٹ کریں", + "copy":"کاپی کریں", + "search":"تلاش کریں", + "share":"شیئر کریں", + "translate":"ترجمہ کریں" + }, + "refresh":{ + "last_updated":"آخری بار اپ ڈیٹ کی گئی: %s", + "loading":"ریفریش ہو رہا ہے…" + }, + "switch":{ + "on":"آن", + "off":"آف" + }, + "stepper":{ + "skip":"نظر انداز کریں", + "next":"اگلا", + "start":"شروع کریں", + "back":"واپس جائیں" + } + }, + "nl":{ + "common":{ + "ok":"OK", + "cancel":"Annuleren" + }, + "textoverlay":{ + "paste":"Plakken", + "select_all":"Alles selecteren", + "cut":"Knippen", + "copy":"Kopiëren", + "search":"Zoeken", + "share":"Delen", + "translate":"Vertalen" + }, + "refresh":{ + "last_updated":"Laatst bijgewerkt op: %s", + "loading":"Bezig met vernieuwen…" + }, + "switch":{ + "on":"Aan", + "off":"Uit" + }, + "stepper":{ + "skip":"Overslaan", + "next":"Volgende", + "start":"Starten", + "back":"Terug" + } + }, + "pl":{ + "common":{ + "ok":"OK", + "cancel":"Anuluj" + }, + "textoverlay":{ + "paste":"Wklej", + "select_all":"Zaznacz wszystko", + "cut":"Wytnij", + "copy":"Kopiuj", + "search":"Szukaj", + "share":"Udostępnij", + "translate":"Tłumacz" + }, + "refresh":{ + "last_updated":"Ostatnia aktualizacja: %s", + "loading":"Odświeżanie…" + }, + "switch":{ + "on":"Włączono", + "off":"Wyłączono" + }, + "stepper":{ + "skip":"Pomiń", + "next":"Dalej", + "start":"Rozpocznij", + "back":"Wstecz" + } + }, + "tl":{ + "common":{ + "ok":"OK", + "cancel":"Kanselahin" + }, + "textoverlay":{ + "paste":"I-paste", + "select_all":"Piliin ang lahat", + "cut":"I-cut", + "copy":"Kopyahin", + "search":"Maghanap", + "share":"Ibahagi", + "translate":"Isalin" + }, + "refresh":{ + "last_updated":"Huling na-update: %s", + "loading":"Nire-refresh…" + }, + "switch":{ + "on":"I-on", + "off":"I-off" + }, + "stepper":{ + "skip":"Laktawan", + "next":"Susunod", + "start":"Simula", + "back":"Bumalik" + } + }, + "kk-KZ":{ + "common":{ + "ok":"OK", + "cancel":"Бас тарту" + }, + "textoverlay":{ + "paste":"Қою", + "select_all":"Барлығын таңдау", + "cut":"Кесу", + "copy":"Көшіру", + "search":"Іздеу", + "share":"Бөлісу", + "translate":"Аудару" + }, + "refresh":{ + "last_updated":"Соңғы жаңартылған: %s", + "loading":"Жаңартылуда…" + }, + "switch":{ + "on":"Қосулы", + "off":"Өшірулі" + }, + "stepper":{ + "skip":"Өткізіп жіберу", + "next":"Келесі", + "start":"Бастау", + "back":"Кері" + } + }, + "th":{ + "common":{ + "ok":"ตกลง", + "cancel":"ยกเลิก" + }, + "textoverlay":{ + "paste":"วาง", + "select_all":"เลือกทั้งหมด", + "cut":"ตัด", + "copy":"คัดลอก", + "search":"ค้นหา", + "share":"แบ่งปัน", + "translate":"แปลภาษา" + }, + "refresh":{ + "last_updated":"ปรับปรุงล่าสุด: %s", + "loading":"กำลังรีเฟรช…" + }, + "switch":{ + "on":"เปิด", + "off":"ปิด" + }, + "stepper":{ + "skip":"ข้าม", + "next":"ถัดไป", + "start":"เริ่มต้น", + "back":"ย้อนกลับ" + } + }, + "si-LK":{ + "common":{ + "ok":"හරි", + "cancel":"අවලංගු කරන්න" + }, + "textoverlay":{ + "paste":"අලවන්න", + "select_all":"සියල්ල තෝරන්න", + "cut":"කපන්න", + "copy":"පිටපත", + "search":"සොයන්න", + "share":"හුවමාරු කරන්න", + "translate":"පරිවර්තනය කරන්න" + }, + "refresh":{ + "last_updated":"අවසන් වරට යාවත් කළේ: %s", + "loading":"නැවුම් කරමින්…" + }, + "switch":{ + "on":"සක්‍රීය කරන්න", + "off":"අක්‍රීය කරන්න" + }, + "stepper":{ + "skip":"මග හරින්න", + "next":"ඊළඟ", + "start":"අරඹන්න", + "back":"ආපසු" + } + }, + "as":{ + "common":{ + "ok":"ঠিক", + "cancel":"বাতিল কৰক" + }, + "textoverlay":{ + "paste":"লেপন কৰক", + "select_all":"সকলো বাছনি কৰক", + "cut":"কাটক", + "copy":"প্ৰতিলিপি কৰক", + "search":"অনুসন্ধান কৰক", + "share":"ভাগ-বতৰা কৰক", + "translate":"অনুবাদ কৰক" + }, + "refresh":{ + "last_updated":"অন্তিমবাৰ আপডেট হৈছিল: %s", + "loading":"সতেজ কৰি আছে…" + }, + "switch":{ + "on":"অন", + "off":"অফ" + }, + "stepper":{ + "skip":"এৰি যাওক", + "next":"পৰৱৰ্তী", + "start":"আৰম্ভ কৰক", + "back":"পাছলৈ" + } + }, + "cs":{ + "common":{ + "ok":"OK", + "cancel":"Zrušit" + }, + "textoverlay":{ + "paste":"Vložit", + "select_all":"Vybrat vše", + "cut":"Vyjmout", + "copy":"Kopírovat", + "search":"Hledat", + "share":"Sdílet", + "translate":"Přeložit" + }, + "refresh":{ + "last_updated":"Poslední aktualizace: %s", + "loading":"Obnovování..." + }, + "switch":{ + "on":"Zapnuto", + "off":"Vypnuto" + }, + "stepper":{ + "skip":"Přeskočit", + "next":"Další", + "start":"Začít", + "back":"Zpět" + } + }, + "hu":{ + "common":{ + "ok":"OK", + "cancel":"Mégse" + }, + "textoverlay":{ + "paste":"Beillesztés", + "select_all":"Mind kijelöl", + "cut":"Kivágás", + "copy":"Másolás", + "search":"Keres", + "share":"Megoszt", + "translate":"Fordítás" + }, + "refresh":{ + "last_updated":"Utolsó frissítés: %s", + "loading":"Frissítés…" + }, + "switch":{ + "on":"Be", + "off":"Ki" + }, + "stepper":{ + "skip":"Kihagy", + "next":"Tovább", + "start":"Indítás", + "back":"Vissza" + } + }, + "es":{ + "common":{ + "ok":"Aceptar", + "cancel":"Cancelar" + }, + "textoverlay":{ + "paste":"Pegar", + "select_all":"Seleccionar todo", + "cut":"Cortar", + "copy":"Copiar", + "search":"Buscar", + "share":"Compartir", + "translate":"Traducir" + }, + "refresh":{ + "last_updated":"Última actualización: %s", + "loading":"Actualizando..." + }, + "switch":{ + "on":"Sí", + "off":"No" + }, + "stepper":{ + "skip":"Omitir", + "next":"Siguiente", + "start":"Iniciar", + "back":"Volver" + } + }, + "iw":{ + "common":{ + "ok":"אישור", + "cancel":"ביטול" + }, + "textoverlay":{ + "paste":"הדבק", + "select_all":"בחר הכל", + "cut":"חתוך", + "copy":"העתק", + "search":"חיפוש", + "share":"שיתוף", + "translate":"תרגום" + }, + "refresh":{ + "last_updated":"עדכון אחרון: %s", + "loading":"מרענן..." + }, + "switch":{ + "on":"מופעל", + "off":"כבוי" + }, + "stepper":{ + "skip":"דלג", + "next":"הבא", + "start":"התחל", + "back":"חזרה" + } + }, + "ms":{ + "common":{ + "ok":"OK", + "cancel":"Batalkan" + }, + "textoverlay":{ + "paste":"Tampal", + "select_all":"Pilih semua", + "cut":"Potong", + "copy":"Salin", + "search":"Cari", + "share":"Kongsi", + "translate":"Terjemahkan" + }, + "refresh":{ + "last_updated":"Kemas kini terakhir: %s", + "loading":"Menyegarkan..." + }, + "switch":{ + "on":"Buka", + "off":"Tutup" + }, + "stepper":{ + "skip":"Langkau", + "next":"Seterusnya", + "start":"Mula", + "back":"Kembali" + } + }, + "be":{ + "common":{ + "ok":"ОК", + "cancel":"Адмяніць" + }, + "textoverlay":{ + "paste":"Уставіць", + "select_all":"Выбраць усё", + "cut":"Выразаць", + "copy":"Капіраваць", + "search":"Шукаць", + "share":"Падзяліцца", + "translate":"Перакласці" + }, + "refresh":{ + "last_updated":"Апошняе абнаўленне: %s", + "loading":"Абнаўленне…" + }, + "switch":{ + "on":"Укл.", + "off":"Выкл." + }, + "stepper":{ + "skip":"Прапусціць", + "next":"Далей", + "start":"Пачаць", + "back":"Назад" + } + }, + "fi":{ + "common":{ + "ok":"OK", + "cancel":"Peruuta" + }, + "textoverlay":{ + "paste":"Liitä", + "select_all":"Valitse kaikki", + "cut":"Leikkaa", + "copy":"Kopioi", + "search":"Hae", + "share":"Jaa", + "translate":"Käännä" + }, + "refresh":{ + "last_updated":"Päivitetty viimeksi: %s", + "loading":"Päivitetään..." + }, + "switch":{ + "on":"Päällä", + "off":"Pois päältä" + }, + "stepper":{ + "skip":"Ohita", + "next":"Seuraava", + "start":"Aloita", + "back":"Takaisin" + } + }, + "ru":{ + "common":{ + "ok":"OK", + "cancel":"Отмена" + }, + "textoverlay":{ + "paste":"Вставить", + "select_all":"Выбрать все", + "cut":"Вырезать", + "copy":"Копировать", + "search":"Найти", + "share":"Отправить", + "translate":"Перевести" + }, + "refresh":{ + "last_updated":"Обновлено: %s", + "loading":"Обновление…" + }, + "switch":{ + "on":"Включить", + "off":"Выключить" + }, + "stepper":{ + "skip":"Пропустить", + "next":"Далее", + "start":"Начать", + "back":"Назад" + } + }, + "ko":{ + "common":{ + "ok":"확인", + "cancel":"취소" + }, + "textoverlay":{ + "paste":"붙여넣기", + "select_all":"모두 선택", + "cut":"잘라내기", + "copy":"복사", + "search":"검색", + "share":"공유", + "translate":"번역" + }, + "refresh":{ + "last_updated":"마지막 업데이트: %s", + "loading":"새로 고침 중..." + }, + "switch":{ + "on":"사용", + "off":"사용 안 함" + }, + "stepper":{ + "skip":"건너뛰기", + "next":"다음", + "start":"시작", + "back":"뒤로" + } + }, + "sw":{ + "common":{ + "ok":"SAWA", + "cancel":"Ghairi" + }, + "textoverlay":{ + "paste":"Bandika", + "select_all":"Chagua zote", + "cut":"Kata", + "copy":"Nakili", + "search":"Tafuta", + "share":"Shiriki", + "translate":"Tafsiri" + }, + "refresh":{ + "last_updated":"Mara ya mwisho kusasishwa: %s", + "loading":"Inaonyesha upya…" + }, + "switch":{ + "on":"Waka", + "off":"Zima" + }, + "stepper":{ + "skip":"Ruka", + "next":"Ifuatayo", + "start":"Anza", + "back":"Nyuma" + } + }, + "de":{ + "common":{ + "ok":"OK", + "cancel":"Abbrechen" + }, + "textoverlay":{ + "paste":"Einfügen", + "select_all":"Alle auswählen", + "cut":"Ausschneiden", + "copy":"Kopieren", + "search":"Suchen", + "share":"Teilen", + "translate":"Übersetzen" + }, + "refresh":{ + "last_updated":"Letzte Aktualisierung: %s", + "loading":"Aktualisieren ..." + }, + "switch":{ + "on":"Ein", + "off":"Aus" + }, + "stepper":{ + "skip":"Überspringen", + "next":"Weiter", + "start":"Start", + "back":"Zurück" + } + }, + "hi":{ + "common":{ + "ok":"ठीक", + "cancel":"रद्द करें" + }, + "textoverlay":{ + "paste":"चिपकाएं", + "select_all":"सभी चुनें", + "cut":"काटें", + "copy":"कॉपी करें", + "search":"खोजें", + "share":"साझा करें", + "translate":"अनुवाद करें" + }, + "refresh":{ + "last_updated":"पिछली बार अद्यतन किया गया: %s", + "loading":"रीफ़्रेश किया जा रहा है…" + }, + "switch":{ + "on":"चालू", + "off":"बंद करें" + }, + "stepper":{ + "skip":"छोड़ें", + "next":"अगला", + "start":"प्रारंभ करें", + "back":"वापस जाएँ" + } + }, + "my-MM":{ + "common":{ + "ok":"အိုကေ", + "cancel":"မလုပ်ပါ" + }, + "textoverlay":{ + "paste":"ကူးထည့်ရန်", + "select_all":"အားလုံး ရွေးရန်", + "cut":"ဖြတ်ရန်", + "copy":"ကူးရန်", + "search":"ရှာရန်", + "share":"ဝေမျှရန်", + "translate":"ဘာသာပြန်" + }, + "refresh":{ + "last_updated":"နောက်ဆုံး အပ်ဒိတ်လုပ်ခဲ့မှု- %s", + "loading":"ပြန်လည်လုပ်ဆောင်နေဆဲ…" + }, + "switch":{ + "on":"ဖွင့်", + "off":"ပိတ်" + }, + "stepper":{ + "skip":"ကျော်ရန်", + "next":"ရှေ့သို့", + "start":"စရန်", + "back":"နောက်သို့" + } + }, + "da":{ + "common":{ + "ok":"OK", + "cancel":"Annuller" + }, + "textoverlay":{ + "paste":"Indsæt", + "select_all":"Vælg alle", + "cut":"Klip", + "copy":"Kopier", + "search":"Søg", + "share":"Del", + "translate":"Oversæt" + }, + "refresh":{ + "last_updated":"Sidst opdateret: %s", + "loading":"Opdaterer…" + }, + "switch":{ + "on":"Til", + "off":"Fra" + }, + "stepper":{ + "skip":"Spring over", + "next":"Næste", + "start":"Start", + "back":"Tilbage" + } + }, + "mk":{ + "common":{ + "ok":"ОК", + "cancel":"Откажи" + }, + "textoverlay":{ + "paste":"Залепи", + "select_all":"Изберете ги сите", + "cut":"Отсечи", + "copy":"Копирај", + "search":"Пребарај", + "share":"Сподели", + "translate":"Преведи" + }, + "refresh":{ + "last_updated":"Последно ажурирање: %s", + "loading":"Се освежува…" + }, + "switch":{ + "on":"Вклучено", + "off":"Исклучено" + }, + "stepper":{ + "skip":"Прескокни", + "next":"Следно", + "start":"Почеток", + "back":"Назад" + } + }, + "fa":{ + "common":{ + "ok":"تأييد", + "cancel":"لغو" + }, + "textoverlay":{ + "paste":"چسباندن", + "select_all":"انتخاب همه", + "cut":"برش", + "copy":"کپی", + "search":"جستجو", + "share":"اشتراک‌گذاری", + "translate":"ترجمه" + }, + "refresh":{ + "last_updated":"آخرین به‌روزرسانی: %s", + "loading":"درحال تازه کردن…" + }, + "switch":{ + "on":"روشن", + "off":"خاموش" + }, + "stepper":{ + "skip":"رد شدن", + "next":"بعدی", + "start":"شروع", + "back":"بازگشت" + } + }, + "ja":{ + "common":{ + "ok":"OK", + "cancel":"キャンセル" + }, + "textoverlay":{ + "paste":"貼り付け", + "select_all":"すべて選択", + "cut":"切り取り", + "copy":"コピー", + "search":"検索", + "share":"共有", + "translate":"翻訳" + }, + "refresh":{ + "last_updated":"最終更新:%s", + "loading":"再読み込み中..." + }, + "switch":{ + "on":"オン", + "off":"オフ" + }, + "stepper":{ + "skip":"スキップ", + "next":"次へ", + "start":"開始", + "back":"戻る" + } + }, + "ka-GE":{ + "common":{ + "ok":"კარგი", + "cancel":"გაუქმება" + }, + "textoverlay":{ + "paste":"ჩასმა", + "select_all":"ყველას არჩევა", + "cut":"ამოჭრა", + "copy":"კოპირება", + "search":"ძიება", + "share":"გაზიარება", + "translate":"თარგმნა" + }, + "refresh":{ + "last_updated":"ბოლო გაახლება: %s", + "loading":"მიმდინარეობს განახლება..." + }, + "switch":{ + "on":"ჩართვა", + "off":"გამორთვა" + }, + "stepper":{ + "skip":"გამოტოვება", + "next":"შემდეგი", + "start":"დაწყება", + "back":"უკან" + } + }, + "ne":{ + "common":{ + "ok":"ओके", + "cancel":"रद्द गर्नुहोस्" + }, + "textoverlay":{ + "paste":"टाँस्नुहोस्", + "select_all":"सबै चयन गर्नुहोस्", + "cut":"काट्नुहोस्", + "copy":"प्रतिलिपि बनाउनुहोस्", + "search":"खोज्नुहोस्", + "share":"साझा गर्नुहोस्", + "translate":"अनुवाद गर्नुहोस्" + }, + "refresh":{ + "last_updated":"पछिल्लो अद्यावधिक: %s", + "loading":"ताजा गर्दैछ..." + }, + "switch":{ + "on":"अन", + "off":"अफ" + }, + "stepper":{ + "skip":"छोड्नुहोस्", + "next":"अर्को", + "start":"सुरु गर्नुहोस्", + "back":"पछाडि" + } + }, + "pt-PT":{ + "common":{ + "ok":"OK", + "cancel":"Cancelar" + }, + "textoverlay":{ + "paste":"Colar", + "select_all":"Selecionar tudo", + "cut":"Cortar", + "copy":"Copiar", + "search":"Procurar", + "share":"Partilhar", + "translate":"Traduzir" + }, + "refresh":{ + "last_updated":"Última atualização: %s", + "loading":"A atualizar..." + }, + "switch":{ + "on":"Ativado", + "off":"Desativado" + }, + "stepper":{ + "skip":"Ignorar", + "next":"Seguinte", + "start":"Iniciar", + "back":"Anterior" + } + }, + "sk":{ + "common":{ + "ok":"OK", + "cancel":"Zrušiť" + }, + "textoverlay":{ + "paste":"Prilepiť", + "select_all":"Vybrať všetko", + "cut":"Vystrihnúť", + "copy":"Kopírovať", + "search":"Hľadať", + "share":"Zdieľať", + "translate":"Preložiť" + }, + "refresh":{ + "last_updated":"Posledná aktualizácia: %s", + "loading":"Obnovuje sa…" + }, + "switch":{ + "on":"Zapnuté", + "off":"Vypnuté" + }, + "stepper":{ + "skip":"Preskočiť", + "next":"Ďalej", + "start":"Spustiť", + "back":"Späť" + } + }, + "uk":{ + "common":{ + "ok":"OK", + "cancel":"Скасувати" + }, + "textoverlay":{ + "paste":"Вставити", + "select_all":"Вибрати все", + "cut":"Вирізати", + "copy":"Копіювати", + "search":"Шукати", + "share":"Поділитися", + "translate":"Перекласти" + }, + "refresh":{ + "last_updated":"Останнє оновлення: %s", + "loading":"Оновлення…" + }, + "switch":{ + "on":"Увімк.", + "off":"Вимк." + }, + "stepper":{ + "skip":"Пропустити", + "next":"Далі", + "start":"Почати", + "back":"Назад" + } + }, + "vi":{ + "common":{ + "ok":"OK", + "cancel":"Hủy" + }, + "textoverlay":{ + "paste":"Dán", + "select_all":"Chọn tất cả", + "cut":"Cắt", + "copy":"Sao chép", + "search":"Tìm kiếm", + "share":"Chia sẻ", + "translate":"Dịch" + }, + "refresh":{ + "last_updated":"Cập nhật mới nhất: %s", + "loading":"Đang làm mới…" + }, + "switch":{ + "on":"Bật", + "off":"Tắt" + }, + "stepper":{ + "skip":"Bỏ qua", + "next":"Tiếp", + "start":"Bắt đầu", + "back":"Quay lại" + } + }, + "b+jv+Latn":{ + "common":{ + "ok":"OK", + "cancel":"Wurung" + }, + "textoverlay":{ + "paste":"Tempel", + "select_all":"Pilih kabeh", + "cut":"Kethok", + "copy":"Salin", + "search":"Tlusur", + "share":"Bage", + "translate":"Jarwakake" + }, + "refresh":{ + "last_updated":"Dianyarake pungkasan tanggal: %s", + "loading":"Mbukak maneh..." + }, + "switch":{ + "on":"Urip", + "off":"Mati" + }, + "stepper":{ + "skip":"Lumpati", + "next":"Sabanjure", + "start":"Wiwit", + "back":"Mbalik" + } + }, + "pa":{ + "common":{ + "ok":"ਠੀਕ ਹੈ", + "cancel":"ਰੱਦ ਕਰੋ" + }, + "textoverlay":{ + "paste":"ਚਿਪਕਾਓ", + "select_all":"ਸਭ ਚੁਣੋ", + "cut":"ਕੱਟੋ", + "copy":"ਕਾਪੀ ਕਰੋ", + "search":"ਖੋਜੋ", + "share":"ਸਾਂਝਾ ਕਰੋ", + "translate":"ਅਨੁਵਾਦ ਕਰੋ" + }, + "refresh":{ + "last_updated":"ਪਿਛਲੀ ਵਾਰ ਅੱਪਡੇਟ ਕੀਤਾ ਗਿਆ: %s", + "loading":"ਤਾਜ਼ਾ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ..." + }, + "switch":{ + "on":"ਚਾਲੂ", + "off":"ਬੰਦ" + }, + "stepper":{ + "skip":"ਛੱਡੋ", + "next":"ਅਗਲਾ", + "start":"ਸ਼ੁਰੂ ਕਰੋ", + "back":"ਪਿੱਛੇ" + } + }, + "te":{ + "common":{ + "ok":"సరే", + "cancel":"రద్దు చేయి" + }, + "textoverlay":{ + "paste":"అతికించు", + "select_all":"అన్నింటినీ ఎంచుకోండి", + "cut":"కత్తిరించు", + "copy":"కాపీ చేయి", + "search":"శోధించు", + "share":"భాగస్వామ్యం చేయి", + "translate":"అనువదించు" + }, + "refresh":{ + "last_updated":"చివరిగా అప్‌డేట్ చేసినది: %s", + "loading":"రీఫ్రెష్ చేస్తోంది…" + }, + "switch":{ + "on":"ఆన్", + "off":"ఆఫ్" + }, + "stepper":{ + "skip":"దాటవేయి", + "next":"తదుపరి", + "start":"ప్రారంభించు", + "back":"వెనుకకు" + } + }, + "ug":{ + "common":{ + "ok":"جەزملەش", + "cancel":"بىكار قىلىش" + }, + "textoverlay":{ + "paste":"چاپلاش", + "select_all":"ھەممىنى تاللاش", + "cut":"كېسىش", + "copy":"كۆچۈرۈش", + "search":"ئىزدەش", + "share":"ئورتاقلىشىش", + "translate":"تەرجىمە" + }, + "refresh":{ + "last_updated":"يېڭىلانغان ۋاقىت: %s", + "loading":"يېڭىلىنىۋاتىدۇ..." + }, + "switch":{ + "on":"ئوچۇق", + "off":"ئېتىك" + }, + "stepper":{ + "skip":"ئاتلاش", + "next":"كېيىنكى", + "start":"باشلاش", + "back":"قايتىش" + } + }, + "et":{ + "common":{ + "ok":"OK", + "cancel":"Loobu" + }, + "textoverlay":{ + "paste":"Kleebi", + "select_all":"Vali kõik", + "cut":"Lõika", + "copy":"Kopeeri", + "search":"Otsi", + "share":"Jaga", + "translate":"Tõlgi" + }, + "refresh":{ + "last_updated":"Viimane värskendus: %s", + "loading":"Värskendamine..." + }, + "switch":{ + "on":"Sees", + "off":"Väljas" + }, + "stepper":{ + "skip":"Jäta vahele", + "next":"Edasi", + "start":"Alusta", + "back":"Tagasi" + } + }, + "ta":{ + "common":{ + "ok":"சரி", + "cancel":"ரத்து" + }, + "textoverlay":{ + "paste":"ஒட்டு", + "select_all":"எல்லாம் தேர்வுசெய்", + "cut":"வெட்டு", + "copy":"நகலெடு", + "search":"தேடு", + "share":"பகிர்", + "translate":"மொழிபெயர்" + }, + "refresh":{ + "last_updated":"கடைசியாகப் புதுப்பித்தது: %s", + "loading":"புதுப்பிக்கிறது…" + }, + "switch":{ + "on":"ஆன்", + "off":"ஆஃப்" + }, + "stepper":{ + "skip":"தவிர்", + "next":"அடுத்து", + "start":"தொடங்கு", + "back":"திரும்பு" + } + }, + "it":{ + "common":{ + "ok":"OK", + "cancel":"Annulla" + }, + "textoverlay":{ + "paste":"Incolla", + "select_all":"Seleziona tutto", + "cut":"Taglia", + "copy":"Copia", + "search":"Cerca", + "share":"Condividi", + "translate":"Traduci" + }, + "refresh":{ + "last_updated":"Ultimo aggiornamento: %s", + "loading":"Aggiornamento..." + }, + "switch":{ + "on":"On", + "off":"Off" + }, + "stepper":{ + "skip":"Salta", + "next":"Avanti", + "start":"Inizio", + "back":"Indietro" + } + }, + "bn":{ + "common":{ + "ok":"ঠিক আছে", + "cancel":"বাতিল" + }, + "textoverlay":{ + "paste":"প্রতিলেপন করুন", + "select_all":"সব নির্বাচন করুন", + "cut":"কাট করুন", + "copy":"অনুলিপি", + "search":"অনুসন্ধান করুন", + "share":"শেয়ার করুন", + "translate":"অনুবাদ করুন" + }, + "refresh":{ + "last_updated":"শেষবার আপডেট করা হয়েছে: %s", + "loading":"রিফ্রেশ করা হচ্ছে…" + }, + "switch":{ + "on":"চালু", + "off":"বন্ধ" + }, + "stepper":{ + "skip":"এড়িয়ে যান", + "next":"পরবর্তী", + "start":"শুরু করুন", + "back":"পিছনে" + } + }, + "fr":{ + "common":{ + "ok":"OK", + "cancel":"Annuler" + }, + "textoverlay":{ + "paste":"Coller", + "select_all":"Sélectionner tout", + "cut":"Couper", + "copy":"Copier", + "search":"Rechercher", + "share":"Partager", + "translate":"Traduire" + }, + "refresh":{ + "last_updated":"Dernière mise à jour : %s", + "loading":"Actualisation en cours." + }, + "switch":{ + "on":"Activé", + "off":"Désactivé" + }, + "stepper":{ + "skip":"Ignorer", + "next":"Suivant", + "start":"Commencer", + "back":"Précédent" + } + }, + "zh-HK":{ + "common":{ + "ok":"確定", + "cancel":"取消" + }, + "textoverlay":{ + "paste":"貼上", + "select_all":"全選", + "cut":"剪下", + "copy":"複製", + "search":"搜尋", + "share":"分享", + "translate":"翻譯" + }, + "refresh":{ + "last_updated":"上次更新時間:%s", + "loading":"重新整理中..." + }, + "switch":{ + "on":"開", + "off":"關" + }, + "stepper":{ + "skip":"略過", + "next":"下一步", + "start":"開始", + "back":"返回" + } + }, + "zh-TW":{ + "common":{ + "ok":"確定", + "cancel":"取消" + }, + "textoverlay":{ + "paste":"貼上", + "select_all":"全選", + "cut":"剪下", + "copy":"複製", + "search":"搜尋", + "share":"分享", + "translate":"翻譯" + }, + "refresh":{ + "last_updated":"上次更新時間:%s", + "loading":"正在重新整理..." + }, + "switch":{ + "on":"開", + "off":"關" + }, + "stepper":{ + "skip":"跳過", + "next":"下一步", + "start":"開始", + "back":"返回" + } + }, + "hr":{ + "common":{ + "ok":"U redu", + "cancel":"Odustani" + }, + "textoverlay":{ + "paste":"Zalijepi", + "select_all":"Odaberi sve", + "cut":"Izreži", + "copy":"Kopiraj", + "search":"Pretraži", + "share":"Podijeli", + "translate":"Prevedi" + }, + "refresh":{ + "last_updated":"Zadnje ažuriranje: %s", + "loading":"Osvježavanje…" + }, + "switch":{ + "on":"Uključeno", + "off":"Isključeno" + }, + "stepper":{ + "skip":"Preskoči", + "next":"Sljedeće", + "start":"Početak", + "back":"Natrag" + } + }, + "lv":{ + "common":{ + "ok":"Labi", + "cancel":"Atcelt" + }, + "textoverlay":{ + "paste":"Ielīmēt", + "select_all":"Atlasīt visu", + "cut":"Izgriezt", + "copy":"Kopēt", + "search":"Meklēt", + "share":"Kopīgot", + "translate":"Tulkot" + }, + "refresh":{ + "last_updated":"Pēdējoreiz atjaunināts: %s", + "loading":"Notiek atsvaidzināšana..." + }, + "switch":{ + "on":"Iesl.", + "off":"Izsl." + }, + "stepper":{ + "skip":"Izlaist", + "next":"Tālāk", + "start":"Sākt", + "back":"Atpakaļ" + } + }, + "el":{ + "common":{ + "ok":"OK", + "cancel":"Ακύρωση" + }, + "textoverlay":{ + "paste":"Επικόλληση", + "select_all":"Επιλογή όλων", + "cut":"Αποκοπή", + "copy":"Αντιγραφή", + "search":"Αναζήτηση", + "share":"Κοινή χρήση", + "translate":"Μετάφραση" + }, + "refresh":{ + "last_updated":"Τελευταία ενημέρωση: %s", + "loading":"Ανανέωση..." + }, + "switch":{ + "on":"Ενεργό", + "off":"Ανενεργό" + }, + "stepper":{ + "skip":"Παράλειψη", + "next":"Επόμενο", + "start":"Εκκίνηση", + "back":"Πίσω" + } + }, + "lo-LA":{ + "common":{ + "ok":"​ຕົກລົງ", + "cancel":"ຍົກ​ເລີກ" + }, + "textoverlay":{ + "paste":"ວາງ​ໃສ່", + "select_all":"​​ເລືອກ​ທັງ​ໝົດ", + "cut":"ຕັດ​", + "copy":"​ອັດ​ສຳ​ເນົາ", + "search":"ຊອກຫາ", + "share":"ແຊຣ໌", + "translate":"ແປ​ພາ​ສາ" + }, + "refresh":{ + "last_updated":"ອັບເດດຫຼ້າສຸດ: %s", + "loading":"ກໍາລັງຣີເຟຣຊ…" + }, + "switch":{ + "on":"ເປີດ", + "off":"ປິດ" + }, + "stepper":{ + "skip":"ຂ້າມໄປ", + "next":"ຕໍ່ໄປ", + "start":"ເລີ່ມຕົ້ນ", + "back":"ກັບ​ຄືນ" + } + }, + "zz-ZX":{ + "common":{ + "ok":"[HM_637199]_OK", + "cancel":"[HM_637200]_Cancel" + }, + "textoverlay":{ + "paste":"[HM_637196]_Paste", + "select_all":"[HM_637195]_Select all", + "cut":"[HM_637202]_Cut", + "copy":"[HM_637198]_Copy", + "search":"[HM_743926]_Search", + "share":"[HM_743924]_Share", + "translate":"[HM_743925]_Translate" + }, + "refresh":{ + "last_updated":"[HM_637204]_Last updated: %s", + "loading":"[HM_637205]_Refreshing…" + }, + "switch":{ + "on":"[HM_637197]_On", + "off":"[HM_637194]_Off" + }, + "stepper":{ + "skip":"[HM_699345]_Skip", + "next":"[HM_699342]_Next", + "start":"[HM_699340]_Start", + "back":"[HM_699338]_Back" + } + } +} \ No newline at end of file diff --git a/frameworks/base/resource/binary/i18n/errorcode.json b/frameworks/base/resource/binary/i18n/errorcode.json new file mode 100644 index 00000000..e25b28f2 --- /dev/null +++ b/frameworks/base/resource/binary/i18n/errorcode.json @@ -0,0 +1,322 @@ +{ + "zh-CN":{ + "error_video_000001":"初始化播放器失败。", + "error_video_000002":"打开视频文件失败。" + }, + "en-US":{ + "error_video_000001":"Unable to initialize video player.", + "error_video_000002":"Unable to open video file." + }, + "ml":{ + "error_video_000002":"വീഡിയോ ഫയൽ തുറക്കാനായില്ല.", + "error_video_000001":"വീഡിയോ പ്ലെയർ ഇനിഷ്യലൈസ് ചെയ്യാനായില്ല." + }, + "tr":{ + "error_video_000002":"Video dosyası açılamıyor.", + "error_video_000001":"Video oynatıcı başlatılamıyor." + }, + "sl":{ + "error_video_000002":"Datoteke videoposnetka ni mogoče odpreti.", + "error_video_000001":"Predvajalnika videoposnetkov ni mogoče inicializirati." + }, + "nb":{ + "error_video_000002":"Kunne ikke åpne videofil.", + "error_video_000001":"Kan ikke initialisere videospiller." + }, + "bs":{ + "error_video_000002":"Nije moguće otvoriti datoteku videozapisa.", + "error_video_000001":"Nije moguće inicijalizirati video plejer." + }, + "en-GB":{ + "error_video_000002":"Unable to open video file.", + "error_video_000001":"Unable to initialise video player." + }, + "az-AZ":{ + "error_video_000002":"Video faylını açmaq olmur.", + "error_video_000001":"Video pleyeri başlatmaq olmur." + }, + "gu":{ + "error_video_000002":"વિડિઓ ફાઇલ ખોલવામાં અસમર્થ.", + "error_video_000001":"વિડિઓ પ્લેયરને શરૂ કરવામાં અસમર્થ." + }, + "gl-ES":{ + "error_video_000002":"Non se pode abrir o ficheiro de vídeo.", + "error_video_000001":"Non se pode iniciar o reprodutor de vídeo." + }, + "am":{ + "error_video_000002":"የቪዲዮ ፋይሉን መክፈት አልቻለም።", + "error_video_000001":"የቪዲዮ ማጫወቻን ማስነሳት አልተቻለም።" + }, + "bg":{ + "error_video_000002":"Видео файлът не може да се отвори.", + "error_video_000001":"Видео плейърът не може да се инициализира." + }, + "ro":{ + "error_video_000002":"Fișierul video nu poate fi deschis.", + "error_video_000001":"Playerul video nu poate fi inițializat." + }, + "ca":{ + "error_video_000002":"No s\\'ha pogut obrir l\\'arxiu de vídeo.", + "error_video_000001":"No s\\'ha pogut obrir el reproductor de vídeo." + }, + "mi":{ + "error_video_000002":"Tē taea te huaki kōnae ataata.", + "error_video_000001":"Tē taea te arawhiti pūpāpāho ataata." + }, + "uz-UZ":{ + "error_video_000002":"Video fayli ochilmadi.", + "error_video_000001":"Video pleyer ishga tushirilmadi." + }, + "b+sr+Latn":{ + "error_video_000002":"Nije moguće otvoriti datoteku video zapisa.", + "error_video_000001":"Pokretanje video plejera nije moguće." + }, + "ar":{ + "error_video_000002":"تعذر فتح ملف الفيديو", + "error_video_000001":"تعذر تهيئة مشغل الفيديو" + }, + "es-US":{ + "error_video_000002":"No se pudo abrir el archivo de video.", + "error_video_000001":"No se pudo inicializar el reproductor de video." + }, + "my-ZG":{ + "error_video_000002":"ဗီဒီယိုဖိုင္ကို ဖြင့္၍ မရႏိုင္ပါ။", + "error_video_000001":"ဗီဒီယို Player ကို စတင္၍ မရႏိုင္ပါ။" + }, + "eu-ES":{ + "error_video_000002":"Ezin da ireki bideo-fitxategia.", + "error_video_000001":"Ezin da hasieratu bideo-erreproduzigailua." + }, + "km-KH":{ + "error_video_000002":"មិនអាច​បើក​ឯកសារ​វីដេអូ​បានទេ។", + "error_video_000001":"មិនអាចចាប់ផ្ដើម​កម្មវិធីចាក់វីដេអូបានទេ។" + }, + "bo-CN":{ + "error_video_000002":"བརྙན་ཟློས་ཡིག་ཆ་ཁ་ཕྱེ་མ་ཐུབ།", + "error_video_000001":"གཏོང་ཆས་ཐོག་མ་ཅན་དུ་སྒྱུར་མ་ཐུབ།" + }, + "mai":{ + "error_video_000002":"वीडियो फाइल केँ खोलबा मे अक्षम।", + "error_video_000001":"वीडियो प्लेयर केँ प्रारंभ करबा मे अक्षम।" + }, + "lt":{ + "error_video_000002":"Nepavyksta atverti vaizdo įrašo failo.", + "error_video_000001":"Nepavyksta inicijuoti vaizdo leistuvės." + }, + "in":{ + "error_video_000002":"Tidak dapat membuka file video.", + "error_video_000001":"Tidak dapat menginisialisasi pemutar video." + }, + "mr":{ + "error_video_000002":"व्हिडिओ फाइल उघडू शकत नाही.", + "error_video_000001":"व्हिडिओ प्लेयर सुरू करू शकत नाही." + }, + "kn":{ + "error_video_000002":"ವೀಡಿಯೊ ಫೈಲ್ ತೆರೆಯಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ.", + "error_video_000001":"ವೀಡಿಯೊ ಪ್ಲೇಯರ್‌ ಪ್ರಾರಂಭಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ." + }, + "or":{ + "error_video_000002":"ଭିଡ଼ିଓ ଫାଇଲ୍‌ ଖୋଲିବାରେ ଅସମର୍ଥ।", + "error_video_000001":"ଭିଡ଼ିଓ ପ୍ଲେୟାର୍‌ ଆରମ୍ଭ କରିବାରେ ଅସମର୍ଥ।" + }, + "sv":{ + "error_video_000002":"Kunde inte öppna videofilen.", + "error_video_000001":"Kunde inte initiera videospelaren." + }, + "pt":{ + "error_video_000002":"Não é possível abrir o arquivo de vídeo.", + "error_video_000001":"Não é possível inicializar o player de vídeo." + }, + "mn":{ + "error_video_000002":"Видео файлыг нээх боломжгүй байна.", + "error_video_000001":"Видео тоглуулагчийг эхлүүлэх боломжгүй байна." + }, + "ur":{ + "error_video_000002":"ویڈیو فائل کھولنے سے قاصر۔", + "error_video_000001":"ویڈیو پلیئر کو شروع کرنے سے قاصر۔" + }, + "nl":{ + "error_video_000002":"Kan videobestand niet openen.", + "error_video_000001":"Kan de videospeler niet initialiseren." + }, + "pl":{ + "error_video_000002":"Nie można otworzyć pliku wideo.", + "error_video_000001":"Nie można zainicjować odtwarzacza wideo." + }, + "tl":{ + "error_video_000002":"Hindi mabuksan ang file ng video.", + "error_video_000001":"Hindi masimulan ang video player." + }, + "kk-KZ":{ + "error_video_000002":"Бейне файлды ашу мүмкін емес.", + "error_video_000001":"Бейне ойнатқышы баптандыру мүмкін емес." + }, + "th":{ + "error_video_000002":"ไม่สามารถเปิดไฟล์วิดีโอได้", + "error_video_000001":"ไม่สามารถเตรียมใช้งานเครื่องเล่นวิดีโอได้" + }, + "si-LK":{ + "error_video_000002":"වීඩියෝ ගොනුව විවෘත කළ නොහැක.", + "error_video_000001":"වීඩියෝ ප්ලේයරය ආරම්භ කළ නොහැක." + }, + "as":{ + "error_video_000002":"ভিডিঅ\\' ফাইল খুলিবলৈ অক্ষম।", + "error_video_000001":"ভিডিঅ\\' প্লেয়াৰ আৰম্ভ কৰিবলৈ অক্ষম।" + }, + "cs":{ + "error_video_000002":"Video soubor nelze otevřít.", + "error_video_000001":"Nepodařilo se spustit přehrávač videí." + }, + "hu":{ + "error_video_000002":"A videofájl nem nyitható meg.", + "error_video_000001":"Nem lehet inicializálni a videolejátszót." + }, + "es":{ + "error_video_000002":"No se ha podido abrir el archivo de vídeo.", + "error_video_000001":"No se ha podido inicializar el reproductor de vídeo." + }, + "iw":{ + "error_video_000002":"לא ניתן לפתוח את קובץ הווידאו.", + "error_video_000001":"לא ניתן לאתחל את נגן הווידאו." + }, + "ms":{ + "error_video_000002":"Tidak dapat membuka fail video.", + "error_video_000001":"Tidak dapat memulakan pemain video." + }, + "be":{ + "error_video_000002":"Немагчыма адкрыць відэафайл.", + "error_video_000001":"Немагчыма ініцыялізаваць прайгравальнік відэа." + }, + "fi":{ + "error_video_000002":"Videotiedostoa ei voi avata.", + "error_video_000001":"Videosoitinta ei voi alustaa." + }, + "ru":{ + "error_video_000002":"Сбой открытия видеофайла.", + "error_video_000001":"Сбой запуска видеоплеера." + }, + "ko":{ + "error_video_000002":"비디오 파일을 열 수 없습니다.", + "error_video_000001":"비디오 플레이어를 초기화할 수 없습니다." + }, + "sw":{ + "error_video_000002":"Haikuweza kufungua faili ya video.", + "error_video_000001":"Haikuweza kuanzilisha kichezaji video." + }, + "de":{ + "error_video_000002":"Öffnen der Videodatei nicht möglich.", + "error_video_000001":"Initialisieren des Video-Players nicht möglich." + }, + "hi":{ + "error_video_000002":"वीडियो फ़ाइल खोलने में असमर्थ।", + "error_video_000001":"वीडियो प्लेयर प्रारंभ करने में असमर्थ।" + }, + "my-MM":{ + "error_video_000002":"ဗီဒီယိုဖိုင်ကို ဖွင့်၍ မရနိုင်ပါ။", + "error_video_000001":"ဗီဒီယို Player ကို စတင်၍ မရနိုင်ပါ။" + }, + "da":{ + "error_video_000002":"Videofilen kan ikke åbnes.", + "error_video_000001":"Videoafspilleren kan ikke initialiseres." + }, + "mk":{ + "error_video_000002":"Датотеката со видео не може да се отвори.", + "error_video_000001":"Видеорепродукторот не може да се иницијализира." + }, + "fa":{ + "error_video_000002":"بازکردن فایل ویدیو امکان‌پذیر نیست.", + "error_video_000001":"راه‌اندازی اولیه پخش‌کننده ویدیو امکان‌پذیر نیست." + }, + "ja":{ + "error_video_000002":"ビデオファイルを開けません。", + "error_video_000001":"ビデオプレーヤーを起動できません。" + }, + "ka-GE":{ + "error_video_000002":"ვიდეოფაილის გახსნა შეუძლებელია.", + "error_video_000001":"ვიდეოპლეერის ინიციალიზაცია შეუძლებელია." + }, + "ne":{ + "error_video_000002":"भिडियो फाइल खोल्न असमर्थ ।", + "error_video_000001":"भिडियो प्लेयर प्रारम्भ गर्न असमर्थ ।" + }, + "pt-PT":{ + "error_video_000002":"Não é possível abrir o ficheiro de vídeo.", + "error_video_000001":"Não é possível iniciar o reprodutor de vídeo." + }, + "sk":{ + "error_video_000002":"Súbor videa nemožno otvoriť.", + "error_video_000001":"Prehrávač videa nemožno spustiť." + }, + "uk":{ + "error_video_000002":"Неможливо відкрити відеофайл.", + "error_video_000001":"Неможливо ініціалізувати відеопрогравач." + }, + "vi":{ + "error_video_000002":"Không mở được tệp tin video.", + "error_video_000001":"Không khởi tạo được trình phát video." + }, + "b+jv+Latn":{ + "error_video_000002":"Ora bisa mbukak file video.", + "error_video_000001":"Ora bisa miwiti pamuter video." + }, + "pa":{ + "error_video_000002":"ਵੀਡੀਓ ਫ਼ਾਈਲ ਖੋਲ੍ਹੀ ਨਹੀਂ ਜਾ ਸਕਦੀ।", + "error_video_000001":"ਵੀਡੀਓ ਪਲੇਅਰ ਨੂੰ ਸ਼ੁਰੂ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ।" + }, + "te":{ + "error_video_000002":"వీడియో ఫైల్‌ను తెరవడం సాధ్యం కాదు.", + "error_video_000001":"వీడియో ప్లేయర్‌ను ప్రారంభించడం సాధ్యం కాదు." + }, + "ug":{ + "error_video_000002":"سىن ئېچىلمىدى.", + "error_video_000001":"قويغۇچ دەسلەپلەشمىدى." + }, + "et":{ + "error_video_000002":"Videofaili ei saa avada.", + "error_video_000001":"Videopleierit ei saa lähtestada." + }, + "ta":{ + "error_video_000002":"வீடியோ கோப்பைத் திறக்க முடியவில்லை.", + "error_video_000001":"வீடியோ பிளேயரைத் தொடங்க முடியவில்லை." + }, + "it":{ + "error_video_000002":"Impossibile aprire il file video.", + "error_video_000001":"Impossibile inizializzare il lettore video." + }, + "bn":{ + "error_video_000002":"ভিডিও ফাইল খোলা যাচ্ছে না।", + "error_video_000001":"ভিডিও প্লেয়ার চালু করা যাচ্ছে না।" + }, + "fr":{ + "error_video_000002":"L\\'ouverture du fichier vidéo a échoué.", + "error_video_000001":"L\\'initialisation du lecteur vidéo a échoué." + }, + "zh-HK":{ + "error_video_000002":"影片檔案無法開啟。", + "error_video_000001":"播放器初始化失敗。" + }, + "zh-TW":{ + "error_video_000002":"開啟影片檔案失敗。", + "error_video_000001":"初始化播放器失敗。" + }, + "hr":{ + "error_video_000002":"Nije moguće otvoriti videodatoteku.", + "error_video_000001":"Nije moguće pokrenuti reproduktor videozapisa." + }, + "lv":{ + "error_video_000002":"Nevar atvērt video failu.", + "error_video_000001":"Nevar inicializēt video atskaņotāju." + }, + "el":{ + "error_video_000002":"Δεν είναι δυνατό το άνοιγμα του αρχείου βίντεο.", + "error_video_000001":"Δεν είναι δυνατή η προετοιμασία της συσκευής αναπαραγωγής βίντεο." + }, + "lo-LA":{ + "error_video_000002":"ບໍ່ສາມາດເປີດ​ໄຟ​ລ໌​ວິ​ດີ​ໂອໄດ້.", + "error_video_000001":"​ບໍ່​ສາມາດ​ລິ​ເລີ່​ມ​ໂປຣ​ແກຣມຫຼິ້ນວິ​ດີ​ໂອ​ໄດ້." + }, + "zz-ZX":{ + "error_video_000002":"[HM_637203]_Unable to open video file.", + "error_video_000001":"[HM_637201]_Unable to initialize video player." + } +} \ No newline at end of file diff --git a/frameworks/base/resource/binary/ic_back.svg b/frameworks/base/resource/binary/ic_back.svg new file mode 100644 index 00000000..595ebace --- /dev/null +++ b/frameworks/base/resource/binary/ic_back.svg @@ -0,0 +1,17 @@ + + + 画板备份 + + + + + + + + + + + + + + \ No newline at end of file diff --git a/frameworks/base/resource/binary/ic_more.svg b/frameworks/base/resource/binary/ic_more.svg new file mode 100644 index 00000000..339e48ac --- /dev/null +++ b/frameworks/base/resource/binary/ic_more.svg @@ -0,0 +1,13 @@ + + + ic_more + + + + + + + + + + \ No newline at end of file diff --git a/frameworks/base/resource/binary/ic_more_dark.svg b/frameworks/base/resource/binary/ic_more_dark.svg new file mode 100644 index 00000000..199688a9 --- /dev/null +++ b/frameworks/base/resource/binary/ic_more_dark.svg @@ -0,0 +1,13 @@ + + + ic_more + + + + + + + + + + \ No newline at end of file diff --git a/frameworks/base/resource/binary/ic_more_transparent.svg b/frameworks/base/resource/binary/ic_more_transparent.svg new file mode 100644 index 00000000..1b69c9eb --- /dev/null +++ b/frameworks/base/resource/binary/ic_more_transparent.svg @@ -0,0 +1,13 @@ + + + ic_more + + + + + + + + + + \ No newline at end of file diff --git a/frameworks/base/resource/binary/indexer_arrow.png b/frameworks/base/resource/binary/indexer_arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..c083d216b5452736fe93eaeb64cfd8698d59c51e GIT binary patch literal 761 zcmVPx%vq?ljR9Fe^SV2o0K@`qr)BXtUQSjInBp@C_gP?yP5PE2f5(U!=7QE*Wa`u{o zC=@JBXfM4Ldg!GGuO9pnf`^dgAPMRB(u{q(Gqd}~-K~fj7-#m)H{bi_&CKqLUM`pO zQMHoSEHlIZ81UdrQ)P5~YaEZqXG-#|Q5mR}a~hGHiuW~NTnGoMKCMfunDixVCs2T$ znDhDkw{p4sRk5koNwXLnaIajM+Ped>s9h1`WHPw{_(K@1xh@n6Cjeg$hr?nR90+`+ zQt?fJr%3^z1?1mj9L27~5r}%$LKy{?j@=I_wycJFhPo$JDvs%BGk|3ShjZ&V1g=mPz-rww zhp}=S{Mv;Wz#8!^AKGDJN%(#Sf|Cj5i$QL%9TI%tkj!a8;N0k^Csc7!G7}Pfm^8w) ziqvmD{)2W=DwP(&{S1}LLa|u9Y_(cfe;@DmH!kGjaf%uuS?AG2bl*Xin8Svp-|ndt z2--rbxz5ObR;$(HZnw)!$-0SFYdDYZlb%N`$E3+ + + mdpi/画板 + + + + + + + + + + \ No newline at end of file diff --git a/frameworks/base/resource/binary/mac/close.o b/frameworks/base/resource/binary/mac/close.o new file mode 100644 index 0000000000000000000000000000000000000000..b81bbbfee9009ef5016c11d03737e435204fce66 GIT binary patch literal 1914 zcmbVNzmMBC6jq!50Ft3=yAjN4OZ+L42irkTpI-g>`@4^$=)GGJ{?Ppx zCK%p*7e$|8eBrTwX)ix)H;7k8+pl3W^1XwjEL+Z-xtC~LmVI&m;r;!pAAkFsy|*9r zd&AlLSbU292lhX}$Z*(K81JBejqaO2+jq~&%lw}(#b9s^^yWK9{$++6C z62TZtV51W`x!x4z#Z7|TIhTZ8I=fBKCQZ?7@>#LS7V~nEZzf3#w42NPyl&-!?B%>! zlj?H5D4M5J8mE*jr}P0=F&A>gMQoTQXWYetNujtMaT6Qsn6RRS6?0A~4_jfa;hLO6 zT01GF;3IBhA-HnV5szAClubQqg*H+J^kDgL2uwgi38M`TgkCBQV|y01Rg- z90KehA%%|skDY^$4BX_=nFA@$h8qXRHIx+-GKIQlW4SQg9HWOQ3=ax1?V_h)j45OX zO!Se~u`w!DoV79St_5sTBT}im+v+Z{X9J&QtT?XPGcnx~S0rM_z`GqsK`6zt!}R9m53dr#7&h#~y8Qh_egBKRH9K2Ap_5GSrB?sAwcA$S(K7tnoT!GhLY z34N4>XG6n>Q~-l;RV`g)_CTs96X3ngK?qL=4h-Vm`#QLqf#H5i5E{^u#^5DE4Nrrku#_QU9!16(X9T%96(3Pj;EDQoJLYsYN&KvP_(}h`C#xWKC<2t!&9=J8r?jlf ze7_p+ieql*+4qK%FAlG>`F^08IR}nMKJCsW3gA=t&1if$OYLa zbxuNUI$3Y?^C`XC`;DzZ9ZI~h!P+Z&p09uX>CF#6zxn0)>mR@0pL7?=kJc_bKf&r* zzO7I#eVzP|(zHk44>*85{Bi_unO%(kFt)P!L literal 0 HcmV?d00001 diff --git a/frameworks/base/resource/binary/mac/correct.o b/frameworks/base/resource/binary/mac/correct.o new file mode 100644 index 0000000000000000000000000000000000000000..17bc9d02c96f4a40d69fce3d7bab93a1e64cf54e GIT binary patch literal 1184 zcmaJ>y>8S%5H-@E3AW~kIn1ai881R&8x{dtBs^usBqUGw$NGS5jn;#5 zHh~$V)dM~ci3Jw89{$MkPMZL76=g^=DW^lztg6bWHVrN&X3w%L6FJ(D;XG%>!9{_# z@B3zrlF>S#1b1~E9@Bz~SaLChCkIp}8F-s;&+j>odmnUA`ASS!)|ip-L(uhhyJRw_ zBbJ!1H+MaAcgK8|F-Zfn0h$~sEtAnhL1Rf%sF=*!G)7?7P!lx)mWJdXDgvbx{D6j} z;05hgdc{(iVMhtPV0qqw%GSkEj?r{R3!bKJopr5?47)o^?ivy_k#+vBZ{MGOde^aT zIPSJP9uwfxIAQV_4+nc(&yC%FhB~W^vPmXGg7zpd6=BmO#jhlo^86SNhSqt$ef)6x z`E^%LNH)f`bdIh*&2AGh5MC$}5(ptA4sbvk%%zd){mX8eM7ya92(FcAC2p%_*CeJ}JMy~OlnbxH z4T&2M!87m_h!Zcsp<=vQrv(~D8GFXx%s2L|oo~N>p5JtwYg-NusAg^roX$Tu&O@9( znzapbzfEu)Fv%#^M^49Rx9ntDnd{s{tR%~x?;q}4?_$397hiPa0=sNoN9O_R5OEW- z#Njp0w^0vJjhNa-4dn(JME)QQqQoh1m5zhvY@f4I;}98EtrsHY0ui8SFu93RepT>^8M>)oBIS?h(bWl^MdO$ z{0!L5c5LlQ;+f3u)GgCoR%h5~*0LSsdPW1>irwj&aJ67J8(ps8_IL4vpu{$h8p0x< zr$ot9QU0;~PIA0N-MUt}sNYI;l9JY}u(R9Y&|Mv42i9f}>LRb$cCZ69=z)^jMADJp zh4$bgpRThocy0H9z#MC9ynA5?K@9x}!d-V5$3YxJ7`j0a4EoV7L;=A**}m8t;!V*? z%>A5fcrNCh-NnJa-$&?gIk5J}9llP_vNv4h>MSc|BeLAwxeWO;CQAIXxEibZd$t+W Hxzf&WTk93~ literal 0 HcmV?d00001 diff --git a/frameworks/base/resource/binary/mac/entry.o b/frameworks/base/resource/binary/mac/entry.o new file mode 100644 index 0000000000000000000000000000000000000000..00fc3d43a3c1b18f3deaf31d2eeeb7b911d9e974 GIT binary patch literal 57756 zcmeHwTW}m#dY&AoDpk%y@)*B$vC8F#4YwTIv9tRIQrZ!$@PYs6U-p1M|L{NF zdFOZW_XhpV=imSO8~#G0neos14w~=K|HRMloHF|2uQ$-KyhN);Ig_-%0fT zebIjBeEL`T@*nUYegCiVw;F$s;P1bs&-jo2`z`Swm5HXQ!p~Eb9D;{TyrF_v3xP9-DtLKfLchvb^+X`fp#I9<4JXc>UtywU?`X^6QpZ z+`!A1x0YXw5AQ2w{Y#t5zPRyG+(qrmv~;nf$nM&z7PXcjNO$qjsyOTV0(aB#(7ARw^Mi0(g8_KMGYB9(% zumtsVk>$DaSQW-gmggy?mTxlE;Zwqd%Vd+T<|?pZIIg$oEi$JibKS|bCUqZ|7sf1q zrnl}aJ{nE#EXL(BTsC+-zuA)CjOI7Bgpr?;lX9avY$%-;(bG5#%h4mcca4X%keXOj zYXA%AltqjdBN*vFGooe$|Fy^BKm6ejy~_;(a8-V4XR%oplLPp$-l|7-7JY~Y!?!94 zEqH@;ClfK^ru@=^eV$K0U~JAqx#4#~>6 zO;lZ?IYz6_&chm7t9zlh#*HTVr3Jpz`p#ff$ttk-f!^U#w+npH+R$B-fDUj~TW!2O z>0PB^oZJz!MKhyHC(q^JP8yL0^d1!p6Rs^{wzkUZaUjl{w~%nFF;RP3td)%js?A%BGT3?_oNIKbDO0tuWq^SE&Vp7A8>C5~6v#SmMr!qD z=jg_Tt=dFrY@G;pY{!z#I`t@?mK6qIr}c>0RL-v*tJj%hgR_ve!9n(q@7Sti2{;)z zH$#KKsW?0(p3A^3(bfd-rZewWk#jrI9BE4J4Ej5_gq^^%3d#VmoO63uhtRUhEdW-> zn&apw$gc$ij~F|bo!u4}05QP->4DG~4DfGafbS`L82Ej!(XnJ}9C`=Up||jE2kD^4 zle3WC?XAu)1ohe8-YA|AHEQS|Nn0hChAANFl?A9Ek9L60E7{6)p-J!9Uv>Izpy|jL zH+M$cGy}7RjCXhtu?P^Va6$7V8e$!jFGTtqJEh#i35x20IUu~=X;$~8DVHP0y(4iew zB(o=+T+ryDAr%^uWacuN86x+U+0@big3M&d%%nzB;pzT>w?4vnJTfzbg2+sc+#e(} zqYjdil3aZ}GBZnNrpWzHGK1+AkU;*KE;mb3ehyy7@ir?|nMf9Xl8N5Wh(2_%V;j3o zIPAgznYqP;%rYVIc^-s&SP^6Fg)KLfu)yUCMmnp3hh*kHBZ)eI4p&R;rtyRtdca-^ zdiaTQQBhBm%nXwms12-l%Gl$k!D<9GFy#$}GN!>;8z3{#24#JcLdsUNb9_T)ddbXn z&IzhqPGy-2t6}I8N&wsV1Z#68^(e%J{jeHA`degX35jpB%vT%|x%_-XWdD0_aall* zI|{Oe59Q>mjRs`5GpXLah7Qc@%ve;9Ye@`-<;0@*5R0Q5ue{^F9UTbMkI9g3JwF^t znk~Af*CkWvX?N&#W_~FejPxoiZL~gC5qLqsY|~YdIdI=K65xg>@U-zV&^^{-CQU_U z!ll<34Jk9~KWI7_YcV=hg$p>Ij78{R%;w4kKg=bDT`VYGm?-usv$!R1UL2S!_V*O~ z<{U-YSPBKeVqahJ1J#NYHXIyvR0gCB0DT_SBXC;mPZvMF3jyT1u>5K9 z<20);C4qn{RUPyO6!fh)P~-w^Etb4Pu5J}Z3jWLZg^{OSh4n(Fu;wVqp^Grxj>2eR z`)McWWD41*7Ykd36-9FAOlILmVXd%;ENKmCGa52=7III|gN>Y=k;9kfc$x<3wL%t! zcoZPI8-?M*cHtq2rA0E&`VEO_E>>Zquu@p&jAjb!PrIIWgZ4%t2WB!)dr{WKV3!N^ zKLkH35OND52mvYrci~g$XyfT8(A5e!+LpD&0nYU6PUoqHGB7WUf@^5=X*W2h2=P$6 zKz!jdyk&qksdj7s6rbJtt2H3eTMuD?_+GR@kN#3w zJ9G6D?9S@`#u!DT!V+6Q`p^JO)nzyb5}h-C-yerkZ#BugtHG|b23o{4dH#;o$3?Da zvLZ0P7p==rD+{q4j8(0A0~Qf0L!*&Y;beDM^P5IgQMlz24@J#7ItZ|p$^3`_<9pG# z+xA^pY%xP)aVPzrTtun2da6-x)|-7dONGH8BLRP?&a^li{o_0LTTzhKtS4g%UWG5j z3UZ@DMF8;lPG>yzW(Z`AHa;3m!DzIzRPdHml70yWAxdt+u1`&m>J>HGhj)BN`KOFz ztRm1+UB;RfEeh0C>(NxRvRrLp4tc3GG9U!z-j6l=dcRc1{u6IyCiZ{I_6hREvZMnQgh&8hlW|J#TY-5EeiB~kV^a#J2m|H z4cVbQ_DeI~U~27pw84z%QHURmJj|c6ge|dO)aw;_y`ROR<}YLwai{mQ7;2yej?ZUq zxlA*B9Lk93wOX^0q}3>?O+fLm(T;UnGocu@g~kIhN=3~t;CL+l3oz)wh|2}m{vZ+m z!4W;_+P@sQY3PLZ;d}3%keMwx!#7^={6G(}jicOhXTqpc^d(@34MT6di-Rt9(zQ-g zYfUBX_0Cu@6!~6`|A$vQYaq0-b6)MVi|x?C3!Zd0N4*~o(SnB^itqL8_3cjWb?zy1 zttAldPVAlAUEiJB9dndtn^&j_Bv4pUi*UKd-I?9F-G#jiy9*i^I=9!ocTTYj)-T-a z+Es@00*-sVyGy(C-fV_+iMyZg&hIX2C2sBq!*F*Nido#dKr_rb+3$fgGkbk|{S`IQ zdp*0$yX$+GRUL3&iTCT!QJ1%Lw=CF+TBiiopYv;2HIn_Wh@S8rm@y(__W-Trs^+OfMGG%2}5Z{EF$D#q@2K zZm5`kP)y_Vz61HTiG*^LD5{vw6w|q4`f@RSfl*v5rf(I~SMe+xoXdeSj%Qg`&d(~I zHO4-&Z?YFYba=0`nBFL+uNBjmSgC$V#r(X@rKny_m2)f&z9KPx$yU_k zWh#aCIk7dl3b`>cmVh=Ynm2gL_;ilaVtSo14#})qvGK=TwD9p3Dz=JU(8Y*Ade>E% zJImh}(>=Z<3wBPP*!&+nb4CSg97J# z!TWkDsVA{##fU0{Rc=4;VHadjM;W=j>o%m3RCP2PQ4MR3Q6sJ=JB%{Z1V5pBiD|lM zMYyeMPMWn~Ssj{l$kLTnJBeMx4%L^zYz?;YQk~d2oDh9K6~~6Z26b-6!sPoHNXvNz z7ONn2+;^DP+_L}h`{5gck(fk)=%>Yz;o`^*x!e*Ciz8QyqvwjF=jp=; z9^PQ{3?s2t9JyQ^xz0)k(N$J}vctjM5R9C+7~L+8j53b-11PN)M|&w_BcIb(U{BJ% zXbMKstgMS(DMSk}(gQ`Xf^LD}8zGxX3em0Z|yWSRuCsHOgjtc(c*GD-(Svpeo|i0GLd*aKn$)~Fga;Gqxc?{hRb}7X^cN3FRG4n2}N)g!SOIle;MosS}g-XsT@$^ zmCJeIH$=fyVE#PBIN++rFA4$6%9(JezDPuX_$;Jknw3qK*q=YiSZVgl@(B= zW#?dNqMtE}t(7JIJY8B?6Q_Fa0*j2%c~G5YTF7wv5Fv}F>+CoBgw!)+e2je`4W2Ed z6+)%I&lHNvfo8C+m9l*ifAI1Fr!H!`qPa7s=xxxUbuU$vFiS{8CG-i&QKnU;AeUOB-J$6P+BTTnh}Z63>>AQ7uC(6pl^No?kh;NrEXX_tX)bsXzJIK8M;v%qV$8EEb~JL7q*uO)rlb49+K@M z*-@L8O+oeNB>M@;W*H}0l3gL$Y4(gybe^)kB)h=A50NE2&y(yn$&PtR#)se8A(9w#h$?|X5jp{nGkA8&qM+EaNQg`2gSx3$GGir+WCWSEp%UmE>E}wCmvdPLnSH>L zFxs?Q8FwheZd+W&8T%g1+UylFJ4EIJPIb=ClG$xCJ5FXFlG!YogF297HbZ8o@rAya z>vV8pgFBpo&d#88GP}lTVdSdPwkdiT>}-zA&J%nxR*-#|%#DJz5QIeYH+zdQFc~tF zXbmZwGf;_FId-+!tcTs^PG(oRK0vsK6*0!Xk8;I7Aaes`7W$eH)iJwW#zd)tP({dc zyTmK1bAeTAKY{eK4=WomQ~oFfn6;O!Hes4H(|u&}Moc-=q`5f|fmvV=AjC{V*|IGg zr8R~u0Ca|Bhh8{lkgj*V*iJVa=ol%c(4|C6B73 z*9Tj{2@zBW=UgjlaQ-oZ>gXDd_WOs`$&UkrvIZ?!*3jL4%3A@w1A23Q!g&n9g|*i3 zQ#=7f>w|B+ed=J0o*1!fUiIxYbX+42C#Tetx*TgC8aSQewb6_F>4R_ac(OR1j8GPL z%j`0(5=n75xgxk7F&l!8CP(;d&t|5K2d$Gv_gIA(K=~>4wFSDeyQpY2*i5-l z*Ajlb5P-VEBo6WQ;^bZCX^*2M8$_YH9EHoE(hVw0jEi3QHOe z5N_l6;1bS!`ph&IuK)GDzrN@3mcy|yA&T}DAY|{pF!tpFSlcKpYft;Y-PY4V97@dL zP-W-S!NOLsH!Ms$a}-uJoMO#DKpbMNs3%ak1jS^$l*t?Y!d>v!#m=(&%3TJxg-fEo zP>`x!0pP+_yrd^)GpHh3V_Rxc3(SSNr#;ZtpqfH>QHGLUR+R*S@;9yNC?ym7{zQ1%lWEn^X|cvFW%6dv|*@#sl5y zJMEj1JKnGE1<)2PJ*1eTeAuLHRodKyZS(maYf!^BV(gx#`@Ofdulm0Jm@z_2S=gQY z`r}~iQ?>4O($C#x)W%+)hUd=RDONKTIqTie_mtrt$35QojEu^l9Wcmo0ei7wdTKXo zE6`RO^Hu`+yHj5+VEeTaxz$2DwuLX!z16;S1n7|lO5I)3*amed(}h5nM~{XNJR0E9 ztD-o=jN^emhj+rvlU7IcX6$g2t;*GBtwK=Q1m@{!1bbGRq(;$ijiTSGQgU=#^Y?vO z4e7X#=-4ut)N0M92IH&|Z%!gIWH4e67#(JV)?y?z^cJJ0kvd!H);t`MlH}$%JyGcq zW-ye9=qg!(N^GodFrxLo+p<|NR@Jw_BGxui4G#b3LSO4!LSHJ9@(Csz270HOBOYN@ zozwBB^^T}s*P)$FbhIau%{~!!PPHearV^jkfjd7YLxS!Y`~XV8n623gvC~v$8|bn6 zN4L(J#-mM~?=vd$i>DrS?ex@j#QcKZo@%!fcs2`VoMd&Z#eAe3_7TuSP)LuOp`#|; z?eJl&qcv97;h}N?y;CTN!+I3{2nU7V!1W#4&*Se)R_$_qbcxc8;?!@0 zhSJm+)7=HNJ^EQ+Z&#B_q@pn;P=eJ2*O)CBd&xWrz#T}nV42c4cw}?){=;wO z$a3K_I<%b{4RM1wGzbCXz__igP@||X5u)blC$c;)=&{n$=w%OldFAOqVT+afjKNjk(`#VfhxL$fEQ}Slzr0J?(h94E44C2y87ORg zc?IK#awDi~?mQSyLa2(6%Jc|{shVV+aK!%gv?VgqT=TB6GQJWd5FP31HH06!R(J@J z@n;d5rfQVxK{!xa5g2mO%D5&cu^`RS#K5GG5x{2knRapQYR8kVdx8QFJ(JuJ$#s(4 z1jz-gR^&dXi5{d`x@A0j>nlv_PI6Num-Q&k1#+vbHIkcS{9PxxMe?8@`AF_Q$&Hbm zaz2LpTqe+>*K4uHkUK|7<*qVWC~eSsbtSz8lIvoXg8Cej@hl)ua@T~u zA3*W9!8$)!St4szz3aX{OahvUUNV-lz&?A)pPyl)Obt@+NLm zS?dO;WObcoLeX1bWsa9DzZa)?Z2Xbw-sg|e*4ESWk_ zCTGYbmaLEq-0;8CTc{HX*gRs0hy?iJ? zr(_lwJl(o;%XcNaF?{g)0OTFb-)q2KRGz|z0p0<_q?5}X$^1R#oVg2qN6l!x){Ki} zBKcKiS2@SuVH0)SkRMYB2_JkEuVNAU-jm&s06dY5MH2ZX?W4GvNI>^sJlKE!#7Q-#Bi(}Ap=dpoSk=-H?S?SLct80_tyjUd(M&+a@Mt!Og@vJX8Q2LVND?)1RTWu&<2t^YEv z55nAjri}H4>x05BKf5IB+VXsOI|BtMTnWdASJxo7?|`W#yz2{SY}tt{oIUauJ`DJ9 zUn=hBRD^Uw@1Ocm77iWh3AFSyT&Fmn6^uB?p{$A^cOaz(QRQGej=-?3-pVe6v?EwB zYS#Uttkf8gER`s8Dod^<0ktxRvTAV!{ad*a;1cHKH)$MytQYh?{n%R#VK7&?Te=m1 zQP0IEwu?YO&P@*e(eV9Y1QR%Vhfxig5 z?=MV9r-;o|53zXD2hCh8tZ1ORNcVm{9ibEcctU{uV8DWalB1%YA$Eo#!2b_r!8v%D zCfRGx-fkHHv#|eEZ?pn>1q37o3&%BMfgsmrvqx+ywo-S*z&l-8&=i=Z5nf#Z z=xwEi-R@PLA2-_&BR`pJ$Kh_X#b{2HIow*xksr^GM=NrrAdw%BL{$B7NLI&ixVx35 zp*r-egEF{0)@Z6bw*?Suj8t4la9X8u1PrSpF^|jwfX5LC93hIGZL4eW5`QbhWp>ZX zCUX-RZ~4Pu5T-5eS;4&{U8?7Eq0!+{k(6JvvLdU<ZNDoyHH znPENZ2y=*(7dn{JXJ4JW z`?tA_j7=AsU(HOvx_n7{eeTY0x<8XsaumNFx$)|=%~xH^9<&64UoEY??wWlg%)XlH zdp(tYHPx@ZzTWd{F!TDe<=CWp1)7tCt%N03UaQ=Guo-8|u zDu1WF9_rJ6Gc@fjU>TVH?c(yQbA7LFWjxd;;Q4A`{Pkx_f6IdA>w(*^5j)Lpve=+i zfb!L+<4}QvF_)7~gdeTfRGq4l%P5W0f7+)G8+>QMfDhB zSR@*CE!EmyS8wnHDKpvZP*_T7S8RTMLhw*H)8 z`=A{g!yNp$u!fDbVVz$k_sr-=`Aux~m8EdOjqbtL^i<+(e!MZF zrsa^UN+l9?jZwoyyi}Q*qigBEV?1PoeZ)w1Bn=JGO6ir83EWPFC_2Hu&ym)M{?(m| zJRdYAOT}>qxgFJPgQ479c>XpnoloErs;Gzh1^!MM^rk7fTnl|QtZ!+T=!DhZy#D+i}hy;QNSO^t{2pAVBIZ0F(Mp^WfIRw=}kPO5lL4=KI z1i|pg#nEcf9rZ~h_HlVcP6?1KB!Zb(5Dua35EF$mjOb)E$_Jk07%DvE2NENu3JorY z;3D)X81FP-2*RaIjHpr9Y)Ukq7zpwZZ1f3HRr)IG$$pRcYg`;~=MRrE-r5evHooay zcfxjefYDBeD{y&y#G*fXG_=h*V$mZy zx^jDYsjuOVMUPP6i0$pOc_B>KLy1L?0P7&iBa18d&AQCbFBU!WZm~e&h;Q#hha037 zH5~!b{fiXsh=Wgyre}96q&>25?+E(NW6`5@gnq{@0Ipc{__Y*^9?zxd@pyK`qEBxl zXSs0ns3Sy&M}&D!2jS=?f+(JIg9!3?g_QV;AKxGxJ?a3&Xm!d?ls96IaP&S07t5F> ztC9_iad2%_jO4S0akBSN76b!RR^a%w5-i_p>Kx(d6$yk%T8b*wqJyf94wq5ZhrdlR zs2fHP!r>&G!}M*TLv6^%(sm+0sqCb18Q97EWTb&cZctX_MUNkm8|1omb-TRT3uz)X zW<8F+#dydDBN^QM923dn6}2YEO=XRUWArDk0PhYJmw{#t>tkuLpok5Vpdo9|!d_4} z3(VH)4bD9%E`YT(hj#hlu1H?R{lqqy9Xbf(-V4{oWI3)UR)lpf!-?yWSFmicg4rUh zGvH7*JwlIpBlTuwjz2oPh!iXIEW1ox;1H`J*4$m@=?!l=LgG=n7OX6ir$E9r}M1GGFWEwc=R6Ub*OS3 z^N@&D|#asPMPB%_JVr4+vQSOB6?tc3P9-&vHpM42pmGJXLm=aBLoy_F1y&iBr<z<8mEst!SiI?9C$kOWH%_5}0^6rd- zLzic63J=htbRhk|Tvhn)y~c{}~hrD#tS-BscVCx@3sAnC9eduXxLXU7-(4GcF{PXW6o7o$xADAdz@cdu6r1(^ zKYcHBKcU!tv)Fy9*nOwi{b{lLhRkfqkFwWDcemI*QS81|?7mv;zKom>E*$k8ru$Ir zzQ;-)W8~D`O3ofcv3si6J;Vwf=9x5$YY+h|c&AVh13@Ys`2DQdJ;%gU({TthO(4|> z)W8x3N*JAYL{C}SPBuWVGS}^Xx5oEZ+Si5bBj_e?fS{N&l=I>n8 zE1I6PDhIH*?yX%h&=VqY1v^q#;>j)jaAKb`>3F3xq}ljl-rE}bbx$({aP>eXUNE-I zim4FlpJjluDp(?H4FD%OR8|S6>LfrS2^@yhDuyTfhT`9C0g7Z9TTOPC@WXK z=;=G67xPOcFbT(Jb8$F^&UPX;G-l6mjfFzc6Ne#Kt>Ud)u16o)GB!!%??cFLGhHu-YfWbb@B5oOvhdsdWAXDUjSYF1bx zE004K0m7BW%d$a+Js=P%>7^zmHIyqwn59)IP~;f2?l1;dE7+RcUwu4uD;UrxJNVBf zzTv@thS3diy#-x0>(JvBp|>h&wgrVZ#AN{Ny{8eEf$*V*Xe_RVFces=!7Yep#rMQk zA!pn~aAlh@7x)t4=V=0v$4|mNnsAh28(yf1!0Nb3uWttlJ0lDoF=ur;>jXR$N1u3d&P2uJhRqetd)?gQ+OXDsmrrrt^ zG5xcSX)qd`gl;>=jxTRbgz5LYcl@a{POd%&X2Wt~4>bxcv*V9W*3rl&f)iZ@^c798VE1$ul5ZB)eRohp zkL-0N2v)cIsnsT+%y&=+M2Z>3Ea`dg8WMmmzkj+d{C0x?|N4G$W2(J!9KVZ0xPgB4 zU}JG(Fsdbs>k~<>uDE_zPR)D72aD?q%36&8YmFY$>KgO+d`@nJ#3)LbYt^ES_>6ge$5HtrfC1>j@o}0es==uV4>( zv=;m6nza@^YBW~V$vhEPS28&OE5D~Ig`;P_7gg2hwR*HE757~MJY}9$;}Zzz9i_Ka zH9N52f?aF)X=XBghulk(Y214`{eax-Q>wN!?J%7o_ZG=CZoHfxBJ_)MYSC^)L-jbx z^e~xzNTz2Pt!*-WMK0IXyp!o1nMME#O6}ET_6crXdt|R!#RXejw)+F>M<7nUcydQV;kST9*~s0jnA?4@s1*Z(_n=dY0TnVHI9$2{q9wfkrFC|wTKF$#iDTEJF2i4A9{OYCPy+EvKTN;hu4`& zvN*^-F@=#CMsku_AQ|Uugw1d`!^!lJ%s5Dp%n? zgb`#uAsIo3l3g5NU&oL_CMzcAXxZb89%luTf*~JPtjRf=X`5tbc#-9l5!UpeRa*86 ztquBc9fd$52#kX0O*14j#`Hdlucb;r@^fhI|;q)EgDKpK%B!%`zsj5mawDUWs${E0b+)k=PrdFAw zk`Xc`voxTM3IGJ=m}-5nVA&&Of=i1+fD3@mcMl_CI)}B&-Px~)ungU^cMgBmm2;~p z!)kZ`UN=^27qz`EJf7R@_ghpBGg8IcKVqQMXzFU2u4W7&{fEF@4~p#F>t~DRDBCk1 zH?+O(uP-4aKjluUDq&Pe(EC;I*L?^{@4GG@(vtQre0}MwIjRl1_P@JMKeew1@CPc| zoe4G)J2RJ!=EDsE{a8+~?8?O5$-O=Zc7D&N4MN=hOSFJJpQx^7%wczu@#m>}(Fjr9 zW77z&s_wmhS^t&=utoo6?>ZD<-|K=7FEDL5cP_X(Y{px;W9LXLR-5v64`Fb8IAR#J z%EhQI1k-cAT62B{T~8U1{ERPsrJPL>V8sz%1M{KY42DGMNu29N7hh}3kH-@T;$NRC z6N>1hl~8XnqeewNq8bBXd?azXPX_TwlU~_Dj6chdCv~k&Z$wKiQx_0?uO0`S4ejd*nO7|z&=$e|A~IiBb}vc_A1ybvy7fZ zhM0y>7zi%%QY!1S%tIIVJd`W?EcA6Z=idQF2QbR`Y04TZh_Xp5Rjxv7yfELxDv*n6 z0nsjnuVsiM@l4taH2wTdp#>FeRzHOn&&vjFiZQNIhb%6`!f-vTVFgS$vMWvy`JIub zy#J*wN+?S@6s?PS+_mTOP#q#m5MPI7n|w^JX%n4V;K1 z&6b#^H#A_8EULE{(PX)M(ws>va^}aB$yg56V-?2u$DEhyg#|9@{b=g+kLAE|I~poL zhO|H)_U4;LG9Gj2*M+p&@H2{~aI|*(Qn}F5_AM(4tO(fZDE)gvkj7r6aaj>Q)C&IU zicX6cQ=JIjDs$q(D4}6kXTdg&NK0u^iabp1Fn(kKN&N^3?{0;u4Nfa&hD117@Rcov zs`XYuNPv^cRTe~c&0^atE-eD-LQ5F5(g?MqEIo}eTgJ81JkZH~p=GMvRZB=gY;u^r ze1m|s&@$q=BABbv8VmnUYl8>i^@+Mx&cD;(wYRAxOmYaoL)a>~usl5tF$>92EJp)^ z^ajMQh4xXI6l#`gJV9r9drBNSWg(EKd}oP13V(}RIVb-nr+082CO!RQ+a+)1obx_4 z`Fr&KDtP&*5!aGlfofT={a`HBs*-ZJc|Sfwn!&sD8mjzs+|XJ~1PRLD(VAkZxE74? zsycqs8WZTTsAfd9I^;?G(Ayppm?^Jw-3-CBfh%2pybpvBCDmue{$0c})kOl&_O=Xw z+4d1tcLJ_8DQrxMD(hNS3ve*jf;O*C%`O009nasZ%iqJvcHfY;9gX|n4-rgQ}X`Uy8UwX4GuwIJNY*`W$U-grN8Kz#ujpg0|vtv{WIU>lsRDm!*9pWe|vY! zyY@rE5WHbGHQzS=@@Cg}*RGV=JpSGJLF_PpIkf!iOTCru9LElASz7Kpzq{_-E^3=` zxosl99-8>B^Ank-037u9O)mX%PTk2PdcT1i#=m`d^~J3bhmKuc4nXbrsnGq~e}UTf zg4)ZuyDx4}I{{Zw@Aj>u?c24be;TwkhHqt0XmO)nS)(s`wPTng!VRIrMdSYy&5@?m&YgtNC-m5k_#o%^`1z)Yytz*^Wt9Sw2Q=uqg`7^H=GR#Zp`R_|P?-?`Eh ziyLMKcKtT#si+y<=}eZHrTrk5G>v9tNVMr@eFx3*XiSgl6*<8}Mk3;~zwJ;5edQ@& zxsF~(1i=y&%?TVH-|39(bSfybP*{U^N>%~Es$?sIOYJyM#JNCdyp_u%A76gF{$%h; z=ac>?-H+G2H4w%XJ|23Ke*6HmK7PD`|E)1JJ~UKYob6^GX^%Oou32PtJjfr6-+_7oYSZp=X7LMC{}7$19LzXT-Ssx-lB^Q&ZiimYeJ zI*v?(VmDczAsfoZDOcwJ2_2=ck@Yz+Kz~`kPSzJKN}n-4ugVo7rn0ESNO~37loZ@D z7(q}LsVHCTOIEoz8S$*Q)FEw!@eS(3OpjN=3|YTV);GyUKT`8@{fOh<_LsAtVwpCNw6)H zazUsMjgN2wq!H)VE9#1ur1?`+pwA*lDGiuBR^fsNqw%93{m~!OdZ70lOUe~CP)dd> z_`vw3QU{h1l+poEH35+Yt#p5c$~vHXgc$stzxtEpa5q|8C>1IFnOsvc|`TNzk1^itfw6*>7&FgRLcRWRMyA^kPzuYA$ z?cZa6-@pF$^%vnsFP0-O#;0H2U4J=MdNCV+5lerWT|D&#uKz7ZYAyQ%$i5t%e6j2M za(UzrPwu>&4*l28*10Sf{k4v8U2?X4@)L6|pE$)1yCkTJAUkDM7VYw&Byhfh%PtN` z?(dpXI)_kPlCv({E!(B;^@b>=Dfg8nAdx zp+e8-k3 z9IzjxoqDHmh`$gNyTfa_PoPFHrpb*C(IjtR)Z;a$Lx~(E_9?Nz!%2Y>tCT2FB1DM{ zZl-B9f*3D_)D4~&K*lg73j97rs}q!1G=I~VH6^%chE}00Nr@CC;)nx$i`}d;HBp`n ziYCg9&uwpe*JRRQqx4P1DR?BorF2Px*x{Dlf+BRwoi<5!W6(k`DX(MrGJmjU9KEkI zB)8;pD_veyaW`Wbc#015_oGGP+Gs+HWVFbJpiM-y$hsCD)yATN7M{_@*0qVSHkuQ( zvBz3?LL1%D!eK4^NSkcX(-R?HvnU*zA;%97h_ua6Q=FWQ!< zN@!GQ0-jEr>@k0akN9$>B?j8oZy)f9L{u-(>lDrD-Bbk6&wu_mHW93PysDt^CT~ZQ z=>DbbZEmGzLt|?w$=+!6omaJbhiuOEcnm=GE8? zAiBj{Ha0`Ko~^nL{P=HE&VUR}*gM$v$=4dfWkJDfwL8Qv3+n}a~b|!7LJQ&j1C3gA;~n?wQvzGinzugIKQOT{6n#R#ibiw`Ejoyf zXJG0WX#4a%^Ovsq?rFXa&3BiF_chP1d?Vo z-vcf1nNcFD`BpW5#Pm(H)Gz467qHJ24{N^Lb;agd4K*QoEzRTa4$4lfJ_Xq=VW8+> zRod1qtG~q1+ap^TD;n}P(SzYzRK0Z!?0WS%d{FKYWxE$p26}ytwj1wTcu{jR+FV|n zo7Co>XmeZI-0<&w5p8Ztn=5H^J|0gZqRq|o-1|J`p*C00=Ek&nKbP8Vh(H`TcUb!T zl=(Zlq#D|}mMLu>9HQF%U8aRGnc*rxV}>V!GdO@Y3V?|&<>OKpx$$Q)5;N3Ohhl0^ zU|o;)rfKg9m1b#gl6E7sH&3Na+S{eQC4Rd=dl}jb@c0N1{XC3PDNTDt9-raiZQ9E+ zwA~5Q8e)KZpK&ciTy~_P4j@pitJ7hJ8^rD~e8zBzN_V+-sC&|yfT1QFqJ_DSVmVs$ zQEY)?`xHykB8&&IRf?4;7NQsy<*_I&BIZYI8o5ZL*c$S2zkwWFhIyF@isgAy%)A;} z=}gcfATnH8l42=?W<4{-X(0?yY@O%FaAQKoP$hQNya(NsTw?z~pGOrjZTCxVOy&Ke zJc!ZtAn6vLEnwM>{%K`gJ_q9Ca<5l8$FfVZNA>m}+`}r(KvA|Z1%E7eiG3J^T%syC zBu9rA76E2F(&td~8N(>=>;XLwTk3f*CJ8Rd;Z-qz@cH-xIfsR*m$xXq%5C1F^mc`v zp0QDlQf!7bx0LR#@i=+d+q;!40_;&;ArXxB4RTq(i;W!AYmu!6>K!p~4~ij|hK zwoYsNwEmEVYiJ{DtF%_4wGgdkXkF*IHcjghcF&5e@$3|>W7t_6rnLgCZO|I-CunVv z7A=fCmoz50Fw});eZB!-S3Sb8p@G3;yjhF#dn-H)RpIG3A9P@JgAG7-Vh2**a=Dy! z3m@y$PV+b4B#o}DvUP>teLXJ8F1i_nfsxC~Fj#)72;~)Q-#ni3dOus4)~yzz`xoBE z3e~F7;u2W%N>!EZ zEQwhK_Sgp8Y!}*$9{|cGj0wSN5QwSDW;KMp{5G^PO_iO`lYrl`qSf%2UJHHZB>a5* z3;a&PY-_VzTf$D{iVtMxNglYMTg70?5kM($CFTZOwqClcDG1*yW@F2?f~b zq))=NZQLQ!3fw^7X~7`QEW~_b>5wqNI=isXlVBWx55!VChcq*lu|+p)+LBwB=Z&7t zUobacYU>tQ-ISSy`PnYIoub}S+=BxLA+$*u=H*)!_h9D;gCc9&y~-^SAWD~dOLPy4 zor7Wn%1~#j1$OVt&Mr6%L`?G@RDkI0(IvObO+if6tWQW&Yhv1@T{wf2hzP`2_ z77P=WJIvDI2UN&X zVTu=<7yc7O`&JQrm~O-B?nby2Q5M};SxRgel}fTco+vzq0UKp6D$ zobx)%Vmv_%k1%@`H$&Zc1!BV1IKrTiFe?NR~L+v(boTLw!98Iu-Qn1&6Cn4KAXh`i5aClF0V(GRoFsjC7Zjv&@UcL@IkA*eql*s zv*0~?M<4IH%L~1BP;&^*0a>+)YIzg8pdKsa9D-f4VZu3EeUumAPZjE`C72$|3#wD6Di5}k*j&C0)gyUtz?;I}*$5V(zQEC$DQS*Af1Pip|d&dv!u#b=LGHn+?4dfjb z>f5-9t#5*{Gq*Y^UXaJc*oUbRyI;)T4GaUR4#~VmE06e0$CrfF2pzQ&X>JV!~JBzJ4?$yuOzeUWaFJ9eF*Ldld=4ip0ztL=)1~_^Zd^*N?KV zr?amXcZJv4@P8LlU(HT^6@AiX&Or!!FtYVA-}j){ix#9Wu?^I^EcCVVbaywl4cHO51>Ur9CIpQNi*FmuV&$zK zJ7VVaeq2Ap#mw;>&7-5W>D~p;B|rmFn}tr(%Er1l*KA`wv#iE-lPa^U!psSa7>uh0 zW>#f3D;U+RSvf4)SFf_FS|Vbo33!q|{Lp-aZ0X4{dXkFG4js6d_P9eQulb5io+RH? zlP3uh|9_q&D_RXT(PhCu&KoQ@?+9$#sUNrMa7q@u_FPu%t{|CoI)R@@WEe`OB$HVFrP91HT*_``AW{osB3p4TAsY$0snF<}lp)u-(hTpi<-naCg;7jk9wU z)fqOqz40VPw}n?xi^EuwVKxr9g-5tq1@@I8fmudsNp5O^-*^}WmQO}tJUuDZQpkaC zc?6fuTEcvc0rc`o2(k>KmSp;#k24Q4tTs>(5`ei;%c1}bFC(l7OS7)u(ENHWJo9OA z@-!Ga4J1y3(bK@fX&`nQTs;lk{lj$R)PLvHUpn#dbAzuQ7?e zk%HmTU25A$ADcIeo0m+>4LkKWI$d`OP2YN1JY(mvFvk9*Tx45ow(7w#7YTO9l2fT4 zY<*_oWFrm&8@AF-Ao_Njff#DiYk^gLi@}b>vC$N#;OZL%wy?&c8Vl=20?yMlmeuCH zrv>iW)@7RSOR#mpsL!@8MjiDj;cN?24PAJwehW*l8@6&5c2bA7GcO$6`OlQL^R!b? zwVjYlz%Hb*^fa?-)KU6ufRQ0ygcJB2&0St|+60#kwu1(sq53=C>g~69w(4Kuxaoi! zR^Z#&zOUufJ(rbl@$+XQ{J2;evxWw5wSkh$!W2RA9If~$zQ99x=i;jr-=%no;$e!z z0v4a9l?YCAA5zBSi6Gio*;B9V-D^ zVX-Y*@goiQJeiZwRYy7Lm`>mV4?F>Q80tf{GR&rOl=e|-fl~XFN>UmpB~q)D4pS;a zY34GdRGiZAoTg%w9-&lp{Nyu1c%wAWQdX4NCBydL~@L4oaI_9kucPYY~daK z*ugx_atAxcBD!!s9`11a*BStu5in~H^25tG3CV%%l8R%(XD4I~^g1lKmtk?|rgq&Q zfYI=hGa$m90T}R>lH5&jpWEplz=n^cI7_lJ`dw0U$rZ4~TmkpF3OEQb+`td81V4a@ zX2TPATktf00H25AWe1?VsJAXJ-UUvk>Jv(N1t(T|Z;uFF5E%>Ki?4^G{8hV+Sdbtq({m{b8%_w#=FQW5SHZkX46*j&z z#3zC;qxYEXMJ^xzoB66#*WAqL9M5dfY5A#RD=sz*Z?W}hZN4UGd_raZ`V1g0c4XV> z#Zk8Ufz>{C{+=T?PJJ6{%x>ZM%T1{to(&wgJD7CW7g5~I=(WI&i|VU%9DF{QY{-kM zr%!w~qNoS{Uf>uwNfzAhhf{~S!#x2(@^J4keYhV$daG%{~7y`=Y4)@KU=PI>_8^U2;IPx9&p)|)BKs6K}1)+hf z&mRSZqu|jnQi>=se7J!GkY}uYj2GgYN2B1&GYrfOHDp)XK6uBxom25X?M%>4n2HH1 zW~jKp!ztSFQSkv4b5xwdQD52_qT)P@6c=e{oJW?a2!jVwrcjKR2~csJmxQ>5^#T{J ztLJe81D>*2*TL8zo&!;yzQDpA=mW*4Jnp9={y*gpuu8>U2!aF^XQ|klD3`)h>0AwU zH#pe#>CepT?%&`4u>J3T`1e2f-Vgty{rvO4OWy;V4HsuH-*1L#jJB7)OxBrx``4E~ z*=FB!e+NP1JMq89{kN_OXZLT{^Unm^+dE{Z=pJb2A8dEx!?yNbkK$~XoL%@Ry>*@k OpGv8nu5LTN49Xe!fH$qt{iPR4*rLq7QMd85#IustV5Ufo*DikHKSj%Zq6v!hK z9SY|S&TdS^>khW-FO>iFHycSlm>x1Zl{A6nME9SbH<#I*r%`_ZzV z0Di&PALKI@fsh7UA9`A-P1urhs*FPBMx=Z`cr|Ff4nH*oZNIDgUGA=h;m4rYU_1c) z0r&>+5$H=$6l{fxXF|^ZNLnrDB%k)}n~SeEm*>*A2_D2L)v<1a1cIyMqOAJ%kuj(H zo>$kkTL~6Y6sm&d*9~BYefxk5m&cU*G~_f8Zm&1yLIpIS zjB*%)vT^9Eh(-{AkOS6m%Rmlu#1IR`h;ugyDK<<7U59po!-JU7Fll zICPnyy~K@!F7JepqBxBrSQUuTIA(Y9xVI?m_C_NoI<&nEe#LU0{r(p5o_Aqt-_IWS zI~LjcFPi+eTFTdXsTOBauW}=2Z;L`!lZDo$ghiw-r|@L|#;Edl`d<{I7RLGolA5Sc literal 0 HcmV?d00001 diff --git a/frameworks/base/resource/binary/mac/full_screen.o b/frameworks/base/resource/binary/mac/full_screen.o new file mode 100644 index 0000000000000000000000000000000000000000..119d740bab0139c3cc9488649e632c77301862ad GIT binary patch literal 844 zcmbVKKX2496nAMQ1_oAGkQG+Pu@gIK+FYbV3^%k=2XsS)WSP6%HIkcF7x&VF5E2^_ z9{`E3zyM!>ufV71Sc#dT;<=YJ?Qje{`}ybh=l5P5``4eV>xT$!Y$8}d9o}pJu0J63 z6!44lt&z`;1cF=aY^aHxwr-@co|D>dxeH{ztNUImhL6;9Y+GdHLg`3O(!&;#c~(=$sgw=f|e12i}pj zr#nH=G!1Pcda{@YA!96nA|76rMf2k1eBd$6a2mt(@@!hn>O8CMg(-46F}2U%%}Qf- zo^$QS?)xlQ1+!q4YD){LhW0lF;0p)dzF;KP5s3(c!9n8@PxnMb zlbA#)O~kMdf-OTL#2%M~r&Ppa!FsMA6E@~TOCsB1(wB$(Qqm+LlG8+zZBCM8EaR5M zp`jyfhds#$`siK;^W#wxQz?xfN|=2|B4{Xlw;Xyw4u4=d&(~a@yWhvKbnoUF*qaF7 s+F2XFr7QKOtn}hS&CZNb^<+^Lm4XJUsHX5r*97bGZSjw&)eDQzU;fsh4FCWD literal 0 HcmV?d00001 diff --git a/frameworks/base/resource/binary/mac/hide_password.o b/frameworks/base/resource/binary/mac/hide_password.o new file mode 100644 index 0000000000000000000000000000000000000000..f16c63cf9568512a002f9eca4b4f7ec55eba2922 GIT binary patch literal 3962 zcmbW4&2B7L5yuCDgp>%fh27C)JMKAE=ljZb2u7?NiAC6CGji_CwMW;Px$;b|Z`iO! ztdQ8S<{dyth-YBS3q)D*0xTkab=n`pm6HW6kGuQd)m3$>{#AAQpa1#yH$R+AzW2_A zfBfv+FF1Yk+sWjood0Clw;X@_(fGjG%N+Oj=$zQ^4xTI)%ZvSmNsPy0@r#c>`RM-c z@%)#!^!@9{kIxRTzR%51_}TLx*!BC9$!DD3Gbqn$8o%0@2^*< z>*tHB^>TGQA8*G;%hikBDAgrjUF@&i_SMDn_5RC~>CmQK${vl!@?`pP7&OKZG`E=! zQd85K)tv)ZAAKtoG^U{V`xMPSbssCSFJ5A>Mc0&g z&m2xAmL8oJqxL0aWnsCJ7>E#ZPz2B7puQ@!A;59SmAm4|cfu%KvJ@qVS$uMBC?R>& zH=_ZOCL5O9mRpw6x@>5Qa72R{j|16-EP8j3SMF?l#L99=A$4QH#~cEVku?aBW8#HY zn*GhBXFFiUjQJFD_K^%5SF4nq9nO?g-~fyQEkr{F6m|+p?HY1w(Tiz7e<>l1v1vjH zs;fg1FsjRfQ*5o-xYe)EPzr&X-aj-Wfj~$nWg@<{1&8wzm4fd9RHKEQHYq$5BQ zc$QMhQHwiEgLth`LYq}84VH&$q|6aVa_!5O#99K?`b36FJmICJj5A|C(2y$CO4NmX zSOu0rP*H_a0wy;e?i)-a5TfU-h?NS%4Km%#AIJh)P)#ET9xZT`E)oO^_3mmaWK4Pljksuiw1GiQBQQ*= zcs6>WO`%vC2zo)0e5noYM|jFR3Ba2-Arb*ANaVr6v?Au>s4Wn%>x0 zl9fxK8}gj8#D@@lrjhhwjg&qP+wcf&B(7Do2`P?rq_UFgEz#I%^wc0Q%Sy$p<42VM zK^lFH+Rg%jY0t2*(SXEIm`ji`bC3*RG%`af#Aw;X9P}siv{rkI!4fJQqhe?%O4BW% z#FeHNf;+E7sLfuP{np5ES_wWa zqXUts6ZFnPA-*EOAw$|q=~$ymw0-(JlOvL{4xqzcxxZ$3K->O|(6mN|sC@F7{iq_) zYAnf+4yFehguTqp!pPARCro<^7}P^VvS?@vM5M7WB7$JG+{GaZv0*fyvtDA~P=m`E z)<$w--Nua3t3l11M0>T^z&_8i4W(u^n#Z18(>tGBOrUnN<4%@SxJKGq$&=4vy% zyKI~cXzVV-Z_v&Q_B3$6Q?0^v+bS4aDx|bjGipef(Dw|rO@nb5_z8pNGoy+PNB5)9 zfS3tg2OYmfTSa4h`xuuIQTHKPonS8d_2G8JIp?!PM`SDv+uz7`Spfy5 z5D^jxk&qyM1IcpYC-5g&91%f8fT-&6*uKRlAxds{^;gwjbyYv+m%o1h`?XHzr8^z? zgNA)jum^b?+P6X5|M%ys4Nh<}NIM434z@MiNz-vwXXw#Lntt%$@q>1>?f6; zk(U8`3me#9f&OFYA3^^*H0)6@Ha5%&eg2Om_pi=otJ14zFfKdAiS$d++05jRpqE-4wK4!($}|&(djhE8npquCVCGsFK)1}6+7N}4BS#@Ybm($NS(s;tqdIW8 z1`RPRprQ%PF`5etQe+5lv&;au#6wQG^Wt9#?$7%PdAPGawqaBu$2J>AHDgX$#S|vl zrp~BW-b%-%1$bL1DwL8^m{7lM@|!x4p}f4_E1Buz2pu_sMTFhkOY;MNua-yxZNAJfH9?*aRSkXO@@`=Y)~j?Qfnza z+BG?1)JZ3$@r*YJl*CEzgm(@Aqm)sS8^Rzi4h)K}D1h?Hw8j(dkuTJxRR90o) zj(W>tTu2Lc~&k? zs`*(z3hFGY^LGVQ7Ntw%T6=GYX@_m~(>JT@PkZ8)HF%t5i_?$~D&VqS>T+7t`5yl; z=VFnQ@N6AU=lMxLy0b)i* zcsTLN{15C&JlTfZ41$v26Fk`anZWPJ8}QeDpWcD-oetTI)!M$9oTkS`na!W3>kUbP YI?c;5d}2JDEVc*O z-^>T~9k{nrBT$8LFk}Gz9f;;!?e7(Gsx63?i&H+bs)1R}hDD&*u)ttwR~UrLB`TlTWWW?@!$Qp_%cPAj z>8JEENK#FUXNoi0De0D!Q^J{K(o4%`XpL%0G@}_-W9=P_CB+O-x}9ET5euT#S{4f@ zNfHY{Zl{z*Z}inVVPy;i9yU6Hy?~8lk4E|gd*+%?PG^|S=e#KMT;C9R_K&mrNK(_F*YBY1R5aYmlewog2YJP|rWHR- z*qW&tL)L}zh|KZ{NV~lJ^6~1;r>oEJF5kZHR$9Xwjtwt3UG0A`$KC`V6nYHCf4)`p yp54P=_f9@Uf5m}?KhW_7GEHBIBCF0*Eoq9pDKBz-k*^8V;)4Gr(qvWRIKKdr)BRf?oVynbZ76vR+Uy@T2JF?xl?ZSpCCL|VS zCO!cR;xq6ms}i~%g863}e zKK)mq7lxrDymYuuU_>>qXKct1lX+3H$dORGGB&DYl!#oU^@Ldrd)W=3NXrtU8#Rb3WS7Sp`QS&KRi&*}+0 zKT1Y?Hfx=@?vzI}h-OQc7g?s>gt+bVw3-TPTy(bD)MmnKX2gluqlyvns0Ndgjbgf? zs|J_xgd8L@Fec(xo`3sv@$SpT*AM6K&)SnVMq)_VDHiD=uTP*k*nuAe@X+yz-*8^! zjG?h$QyBi;v#_r{fWNk1J_fvIkt>WT=)W3C@|x#qd6Fohp&ysi1jrMXXV9Ln^H%(n L-Q=#*vbKH$*7s5p literal 0 HcmV?d00001 diff --git a/frameworks/base/resource/binary/mac/ic_more_transparent.o b/frameworks/base/resource/binary/mac/ic_more_transparent.o new file mode 100644 index 0000000000000000000000000000000000000000..5312bf0f1420a5b5a76003bf2a752c54473f7850 GIT binary patch literal 1604 zcmb7E&2H2%5DpZCR1RF>Hgct&y7_50+f9{hRf;%Ki9@+?i9+Mujk--%iMuIWxFSxK zxNznnxFDVZUZU!W7vNAaV>`7M@oU8yk7vHm<4?A~eE)WJ$8m0~IQYX(Ru0fyy>^@j zXy4P^Z`%Bp3IKtzbv|-B)b+HJrg{cU&P_rpOX zy`h|Rhf&zy@VE<1}NQ5FSCdR(P}M=g_9(S1t7Om z%Az;=YMrn$1_d5AI&{5&jbe{R`pkOfWX2Pjrq3^fM%2|YPgq%%yz_c(k&7u_KL+Ds zHtT{k?$xI=%;pPTR(Y=PggoshS#vC@Y0%s3pzX8}+{%-=rws>rsdlC{A17?hRE;6) z3VB3k`2?h0UVQ#=`S#=Gr*{|UZ@QJ%#X=GdFy6GGR2^z-XP@7F#2b?@Rj z`YR4x`%iTI8keRoiZZKTrdrTc)LGfgvznJ8#T8Os=J*=_C8;T1@qfq?S&fhG4+L^w1_nlE1|R{%AR5d7Qvd217$kx843HQO@P`Q^p#ahh1Ta3(Oa>5!3NysV zrzDmnf>c02e7uWeh$D=Lpnsy7C&Pk}LuP@LNdU0|P#&Zt0Z1ePX>K460AdgT*$u)V zKjAP2D1#q#2Kc%2a!GLkRq=XyxC8-dEfD5l1Dd_*$j`Gt4r6hUyA#8@b22X(7??JD z0zDSN`8LAQTiQ|NT-xP-9B%_Z+z?YykaKEYP_H0RmC-H4dYMaX&vSvIZ?l>;M09*J z^!JKZy;#b=Uha=zQ~QJ`3Y;&$U+SsdZM^ySvAb(KBqh?noi)Gz``Otu@4Dmkrhg9H zI_bKO@!|gxA0BuIrl_xiLpP;$l8VyTI9y1tvn$8fN(vRmuDdd3&k9QA;P zxidch{Ik7i=bzAxE3bKOmXIk}A2ajTZsv_EVg(I;ViLcr=AFxIzv2v`{5)B z8IGEzK_7h^mwPfUV105wS?1`v!-5@E*PJ9-r}f?C*W9+It*UL8dZUaH7kdH;RBxl}LH_M=~q z8nRB@(UGi`#`58z#@Upg#X-LlC3)ENU#2!4_FsNvWyJb_mVzoUx`<+*(z9At&+L^di0_4OlILa<-S}y!*%(09DQcp zn&`E5)xIsIxBgm`X4w?|)Cm4cj*sN&mUkDse#SqmKNo#3aujb!<(OIiGer=53G_ zs(CQsOs3<5J1>^2hZF`H2@BQCFgdiP>q@@ezvi+)t*K%M|ME;d<+L$kPtMk;@Ot_8 z-^}%%JSyyxQi^@vMu`G zPoC$lb9~9k3=>9EX`yea+s?`x3t4=%_WwL-u3K%{tMzJkU9G0=yioG!NB`4*()z4*}Q$iDnjRk=66F-oE=Tjh`nLz>0cYw+RDF}#u0FaQ7=0-|vM literal 0 HcmV?d00001 diff --git a/frameworks/base/resource/binary/mac/indexletter_bar.o b/frameworks/base/resource/binary/mac/indexletter_bar.o new file mode 100644 index 0000000000000000000000000000000000000000..34e71b0416131068a2233bf485f41aadfe1dfe8b GIT binary patch literal 35610 zcmeI5%X1XR9mnN3RjG0gxhA)%<(gDQO5!|j*yd$pz#t4JK5_nkxuSj6I1YVWE3JI)~z$yv6 zCV|xwSR;W}39OaC>k?Qef%Ou2LjoI8PbTio;vA;Bdpf(`ZOn6VL<%&YC-YpG@eii% zE!F)OVfv0?TtpDJylpIqp>s4M1_AmRYn*?+#<_;zMG62&@lz^&zf4q}7M8`jAy0 zqUxWp{9((7B>E6UA9CnJ41GwU4`WK{x`|wnKc&a`;RUe+J z|0!DjCy*NwDN&i!8aMuJa~f)l7P>CZH7RCM8eLnBm4*iu;Xy@sP!S$fga;MjK}C2_ z5gv@W2V3qzfp}nw2L<9mfp}0L9u$ZN1>!-0c;}^Tde9yoh~hzec+egmw1)@nQKBAb zO!v$%w+5$s775?fZ7kt|i$Ec85hw)iE-P?%tFlMZJ8%&&1nxmq^N=b>RDm)GTxf&9 zg*pga=!3vLq1qc(<)kVQ^T36i2kvQA^NcEIRe|^hF61|G W{RdH2;paw1^HE=Hl zE@U%suX3cWsV1+h0vjK=F!F&5D<8Nw+2(CRpA-6m&|N}lLdbWNsA7`wO=Dd(Jk!=P z9MaYTZ?v^Q8f~rGCCe-dYID1>f(rYQ?+E*u0PDxRhy5_%VL!$}>FE{H zx3(B7`wAu^{w|55OIum~am$B8>?02KccV4Lp_)V%EJmW#)?R!UV%4%GyY^cpm-8=#$=0SCrU7leTBD!P8-0O}pCdv`Q`o}EavHT&WFCd&$ z7K4_*OC`HeGl|MT2vXhLH~NfZmVd$WFItAl?(1kDp^Xp!yhb!g5}xR|4}Rz>%?oPi zZVZVM%@Rm5R?HGcyuaxet?P^(kkEnk51m0Pbg)n!I`9EP2L?WLV7)_!(W`@KBy_la z!#NPO6JPR^^l` zr&T$l%2`zqkAw~~EunKx)jY3?tI7pckY))TWYR+iEDW71a%@XfGa4po1BNF z;3Q#?_Chd4TPrCuW>+;!UoloS&602}68Mz_el3CDNZ@%1{8j?LlfdsK(ELjv=xZ}N z+l<~eqr1)MZ!3;NuGKDVIHE$DL#`rLv(w>&??do9M=iT8lBV{*LF zE%XYV!Z>0WF^U+(#>CHD{)?ITNZ7L7d{ekVhU+QMRJKZSSt|kLCD+LsZ%Cj-Yu}i~ zCpI!KL#fqreAh^z;Sh4D5ATp<_V(fbb<_HlH`-FXXgH^w~>hAg=;!>5d> zk4@&!0U8((xDWBxLNm8ZP^Jj(x`Pokt~vt*%MN;Wp~bS6N}d; z-jC3j|AGabUi(jJEObRyFE!t@0dxD^vmG)08_k~rZcrdffw?mDNi@PvE9-zJLk$)1 zSbkG=?C2%Y2>Cis$QoUw?CCI0Dn9KBz^Y}5Z}t)Q8o{fM52*R#l6-(| z=4bsFsDKeLvmyzBas&pW{nBQ}+lf)^ABay8#M5RJ+i;LKL@{g0rPGh%HF-A~PLak(*SHSv|#f8MPu`m?z zY65XaH5}B4 zh=zaKT86ySwgsMPYk_0hT85m`wgo0XjVzp&B~sYpw@Frp21l*0;Z#8I4bq>KdwIuS-;fB1p~;b#R}E;` z8K38Z9Z0}{TA6Rn4cEtPN7O)v`2t9gu_f(-Oh2IkLX2iI2*QF4R#AftJc%H~z$U|} zC3A?KI7|rMWRN+^TE_^%;s+UqHW|918HP3)hBg_7H5s@EK?di#2N@`&AOp`d$eiO1 zohRfHx=82}p_!+e8h9LY!LvFdm4-oe%8iI(+F|}AD9;R-gvj!&iHWZyb2X<=T(=%U zD#z~m3bg3LUG=oT9Xevd{9*HQIE#*8;`vK%O z*)K?1W5}869x66H3oHLSl2R)8{Q1~PE7`-v))>45{L{HCzj|UOPu-kzg9K^A|~z&`a0QaXB`+O7J>#m5`m% zRf4nf0BLmHWpHEp6Q#P#;Kb@GCFy|fI&yc`C)GE0S9M1!0_{a|k{3(BAkMBxdNqqU zZ3VivQg*&NkvOs}SZ>s$UCQgI7^GtxT##&u&&J2+;L6Q~DSzd;51RC^XB7Ms_0O_B zQ=czTZ_hSaPySx~`17ex)xT|R9o;?cz3;Vk_jGo>yS1yYudBDMqrJCn^Y*uU+PZo= TV`^;ge!nZON?&_#U(^2qoRt+J literal 0 HcmV?d00001 diff --git a/frameworks/base/resource/binary/mac/left_arrow.o b/frameworks/base/resource/binary/mac/left_arrow.o new file mode 100644 index 0000000000000000000000000000000000000000..dfeae48cdcf7c242abd75f9ab8e6ccf2f1c4083a GIT binary patch literal 1032 zcmbVL&2G~`5H=JEsT{b%0co^c8mYF|Y3%&SPE~|*Kpc7~5;x1lTW3{w*IIAlq!(U; z$KXwP5?+8q#jNd3E0kUsd3Juj`P(1=`t$q#rQD1R8=6ZH9c z2Y^XNvNqOq4EJs)P4i4=CZeM>{djS8VXX)G>7ROKJJ17eH52v*xkCH}%AY8|qI`vX ziEPO9Hf&0mnE#>pe0y8MhN+rMk&wWn1ejRLoQonMU#=GJgq+Wh<9bs-!*jjDn5fzk zSTSC#w6!*zH6P?QArvSC5q{)x(SQK95p_aVT30jQZ<@wy&OE6Ke@H3yv3wsg+m>A1 z910Ak)2ZL0WPS`tvF5sD^SiZ-{Z8%N1@Jr}=q6BWC2v?lgcQtLuH6TLYhIQXG`g$S zB}TIi6Ee^D2{;j3W>rFzT#LN#-cHc9;!BC!*bb>5x=UH@+%ub+koUuIv{;M@XqAcj zTB_TGv}&1Yb~5pB_eiH;wE-xp4dezB+M|Omxy^8G;3@3Y0X&+iovV`N&P?5&#AT*e zW~54Tq45qPZv-Q60#h%XMj>*5-A56f(1?a$&>--}VMxd05t+xnE!LfSTi-AGD=+L^w1_nlE1|R{%AR5d7Qvd217$kx843HQO-~!SF1PV|Z#s`|o0K!mVhWPlD z#F9jiN(hLLcX14Hgz*rx6I27tyc8yc95M?eECIwBKn4qtUIC;_fHXG{2LLe$fQ$lR zke@(m$N`-Je(t|<+=BFzth>uH{V!Pt^Icpz^#G%w2=AdVoeDO=<6d7r+p;ss zvGE8nG={OP6ZsMP=8~4@>K!qE+H*9`wt8Jrdbh12Pof@eiNeg}~PGPE?P%dy_ zTcN}1Ph2O$55C}F`oxzJ8prrkOG4K1(gb_WvxOh|HwFHnz&_cOaN}? zZzA z@xl)zVDYU6@ WO97@b0*Z<=t5S(jRgzc)OiTbsiN*~8 literal 0 HcmV?d00001 diff --git a/frameworks/base/resource/binary/mac/navigation_bar_more.o b/frameworks/base/resource/binary/mac/navigation_bar_more.o new file mode 100644 index 0000000000000000000000000000000000000000..a19829f904361556c8f44ce5ad4fbd5ee5de0cc3 GIT binary patch literal 684 zcmX^A>+L^w1_nlE1|R{%AR5d7Qvd217$kx843HQOa04o?0MZNuFh0;s1`vh{GsMTI zB$gzCR6sy{yo+OqBaDZjuR@tH^M1e#KqvvTn1G}N5QF4dfV2frpae*B191Qlg8)b? z2!s3tQbP{t4DfU3<&xq8>gDzHa0vp^AZrac*nlK=$F9Xdim^Dz-HBn{IhmJ0PQNG6 zV-cKhrv`F081Oi^%g?)8Tw$?(A@>hMH@9v*`6RAZ!ADVXsk%o$iZW&AmaMM4(`mdV zvyuC}-a=pQl6&F}V#kE6;-ogQmIbwE9+@`TAmHVM;@lglOllvBnLcel!L9!1@QtFx zsEUgx6y!gx*ib5Lz$l!-apJy`{+u>5`%O;|nfxntn#yl^v00a&Gp22d=~0faDjYzk zF?hQAxvXpPOHl8efo?9-o?*0*rM6ii$IC>>6Q9Dwr|@cw zuiy)K@WRm-@IajD518*mDzGu6HY~={NK+(nynArm%hhU!&TO)5+ z1VU4r#lT5WQjAhBAlPqu4-Adu&-%B#`n3s*!$}td;t0d&JI`#jh}~PefUaP81pWml1kK9lwUL+rgo|}Obz;VwH!m84ha!}EDZziWHGUpdkRu9JIPOEzsS zNtK?2RIh1kiDwUl?9!$$LO4DqfDWt5MbT1=OqA4;%5deutD8m&=m1$Ns~1bPd4?KS zG!)HQM|r%75>Hv8j4L)#mMj%ofF7_-?5b?2h@}XUV%X>bxlzLo;S5OBRm;Sk3_%P+ z%Zv}h@9nJq+c*#V@XF>4XDCPLJZ9NVPXflc=feRHYSMk!S@cEMrfTRo!*8-o`E$UIU2( z5;yJ~5E9}McnZ`LFTkNBx9g6ov@GR_hq#{oM!eBy4i-O;L_ z&&DtlSUk?kfVH6w{Q*5}IkLlma>+bk6RoE^oEJsm6jmgU3SV;$djua zJHz3STa=AffyjU4y6_Ywsz_&Q2cDmxjwdkKf{kIf*Xy^y1ye7lg1N=KI6DQ`t;4m@ zDUL+U`-8GS;QMKoBY!aw8hu`2Rhb0yc(kuD(wIOY^rWuj`P@R4*BC?+u&c5$$hFE& zFkmv1*jR2M5lvBFr}Iu{>4{rvW^30*(fHa`a0 zG>U~jr+c8|w5!!eJ~xq7-!>5)GD6v*@;wIUwJf^<>ur%;OViNB`_C6&zq_>CG_g(> zMzmba8#Zv$72SX3@0v<+G!2-_&LlPCbF=e5yb5R)$^1A|rvbBSN;kaG-S+yn!A+Q} zEy&|2#SOQ!37u9IXPw=-%O))J7X00&&&M<;<|7|nF>+>3@6poC|3k7@9GKfC#^7@b k!`DJa>O7nZj4@0wMU5e44^bxccXJ(@i#K=^tRtnJKU+XD=Kufz literal 0 HcmV?d00001 diff --git a/frameworks/base/resource/binary/mac/play.o b/frameworks/base/resource/binary/mac/play.o new file mode 100644 index 0000000000000000000000000000000000000000..ff154d655ebb0049257519860c5f1ce8f77e42d8 GIT binary patch literal 806 zcmbVK%}(Pm5cblQ_P~K7%gqW`Cvg%t+dvvAXtg&a4xD3rAjnL$x#c0fg8KV~=O%o0-qH?7vTst1pCn>JV5!(N+$a)deA2V6PDS zkNn0a5Zc%_22O(7z(mTCG72kek@9<_T( zpa-BRNQH`b!kUjrTr9>kAN8$=>$`{BOX*t_FJe#CBx^wm;ORt9i@tSi%xuSX%d&LJ zz&V+ZU7vIA0*OTzc~tyWKr6xB}nh#^Q_Trf`$8@Mw0ozvuaKgT|AA~Fn7IwguV1jWN9t-Wj5#O{QGOwGy zf+I(Stjn2jcvLSD?`=ZBsVH)%pOxyqzSgNo>kfy2`OgIZu0ej+E zJQ$IWnHE6|!pI+3ZUR?cjFb0Y3*U1CmiC`)Lfj$rId+=-bGMW~^QoFI5=&XV5% literal 0 HcmV?d00001 diff --git a/frameworks/base/resource/binary/mac/rate_star_big_off.o b/frameworks/base/resource/binary/mac/rate_star_big_off.o new file mode 100644 index 0000000000000000000000000000000000000000..1ffb51cefe627223dc85389d4e1bb7e472e429c4 GIT binary patch literal 2006 zcmbVN&5j#I5H++i8;6wxam@`OD|~*}L)K-}F6AO73az1N#&`t$%=V zfw9K;G5QbasU_Q~r%yqQ(?e3bq4@|!$l&&H32 z>+89=uFB0<&CMuNLJ1D|XNNl}6VO$!N7*i| zuBPWzdkdB&?KtRoxSGNtSpJ@jj5?6w*f)}lbf?5Qk||MBTa-<41B*nh8{VE&*d?&ja^*6%hJ#aUHPSGNV~bXjzD_N>3|5FC_yY2P<1g?~$4*&oF literal 0 HcmV?d00001 diff --git a/frameworks/base/resource/binary/mac/rate_star_big_on.o b/frameworks/base/resource/binary/mac/rate_star_big_on.o new file mode 100644 index 0000000000000000000000000000000000000000..dc36e9517dcc97a15a9dd4944ba223d799186632 GIT binary patch literal 1986 zcmbVN%Z?jG6g32d6c%j5uIOxt9_1?SJ!vj5y-3x}dKlgf{V*Djx zC)yt$ZWlz_jJBUcW-s*}+$)ONw4El#wiU$}Po6*7&)$u{|3lt`B;-hYAJ~J`vHk(Z z?=il__%Zr7=&2>$sVAQj=l`_fIHoh;=hM(oR_^PbS<+N> z93nRU1jtGzbIG_qv!qBNSSuz>l31DGbb>tvC_{EC88~Rop%3>tKu5x~BIn5@%oqn- zJOn7Ily$*DE+VCogAf3_T+k{i?#NMj1t)+S4wh_8s3!buasr`brO6|d5g}1Q^JzFp zNYIwG?}UUHyk;>8GVKe&*aYL8J?kL6^npM@*nqm^iPu1lh0{KED125<8!U+2FiWSrXP>}`lL-nE7;$l0+aNBY#1ViQ;E9u@e2l~=VJ#7MsEIf} zoGI*QoCsn|5owiBl94oPBrU?l#vpPX%E2=^3)I08gt^PjU>L@CB7#vS!o!rCHaKqs z3tWMu%{nC3yRvSt79JGEyzI&(u^C12{fk#GcDsjlcYmkv>!jqs_!!vdn9p$j z80#h04(n6QpE1)&w$n^8C7J&-#?SAr7vi>BuIjd#WF%E4s^+Yn*UiNw`}NfiIcLwO zPsXd;3vpXl>+jmTNv4Dn+TuUkze$;Zu4XmKF1zmLWHef@*K%!SySx}_rPK&Iwjw8Y zi@LcwBuFvFQGc3Ep9qZcmw7IJteR?BcJ1;+yu7NqvrFNvcovN_;aic5WN!t7tNu)$ zwbvrgx7WM6TU66u%H|3YjaFT`EUKn_y{P8n(dKMpW?rq%rn6;LcGX<0>+W)ENsdST z(MIY*)bmMpNLwaW-Lk!^CRx)q)oz!s>v?wxUNdoCFBZGQ^qen$UqHILt(tZ|-<;>| zO?g&#_n=tPmVlmwn-UJe@=v5?G)zjzp_XKwkAb2%B`39W%4#!YX^jh38GRJiB%L*6 zZQPfhX)RTBR>!ap1AP!?Hr6>8#2y+S3?>yj;V6TR-ua-Du!%01V27lnvd%c`6N&(o zbCghRtWlQWbC60ixglA&L!@mu2C_`|V4OCgSHh74vN!WG-D9>c!N_yahJ}-X2_m2ks85ju1JpVM z9b%6nX620)Gn9q5)|Krj1Vlar@>*52Ibde>jRf_98;JK3}tG^97xvdyOB zQR*Yx#yGk_TTeZCdg!~6zAK;MXZOAO2Kz??@qT~0J%4|mmxv#aZJ eu_)T}^8!}Tb?5j>{)^D6epCGiDRgms4F3Tx52X+Q literal 0 HcmV?d00001 diff --git a/frameworks/base/resource/binary/mac/rate_star_small_on.o b/frameworks/base/resource/binary/mac/rate_star_small_on.o new file mode 100644 index 0000000000000000000000000000000000000000..fae2bd768cfafba12a41d41d1dc53a12c66efeaf GIT binary patch literal 1992 zcmbVNO^+Kz5H$pZ6b@X&t(gcZkv#3L{_d6SC>Vl-7739cAuc0h54)rF&aCXg-sHmH z;9v1eI3ghq5wFH})rjtZv+;d_G5jRY#g}DWE~jm?JQL5a%64`sycLgQcDShdUMsvKo?QFNN~N5S9(oZegBoN7LHcM^Qo1826%?ERYIStvkPniE@aNbGgie-WEfLaHqL+ViYth}*eg0k?| zI&e4^$#Bv=$Xa>Q!9%f%fEnS5m83#SgvvSrlSJ5I zCLw*uDekX1BhperSpiKlkxgSp~{M;qpw5#z(@1p)9CC zK3PVOyy-t=UBh|aHI|$_<&);-Wv=(lZRoK^Lz{BIIkcH8?KEy|>& literal 0 HcmV?d00001 diff --git a/frameworks/base/resource/binary/mac/right_arrow.o b/frameworks/base/resource/binary/mac/right_arrow.o new file mode 100644 index 0000000000000000000000000000000000000000..8c604e4073df1332d9a7888d4183cf053721c6fe GIT binary patch literal 1052 zcmbVL&2G~`5H=JEsT{b%1&x+VBgOW*jh&>jQx&0{dngB_N|uSY&Z_RNwcf-@g#?em zC7-XNz?b|m*+Nmupj@Z_qiSD0k@u^y+Zwp_%pQM(O#i_ zfqH>z#Pl|5N*K=nNPM=rEn&@6&80|4;86lhEM(3_k&q9Ub9X|{W`}XTE}-GLULq%| zHUyT87fWrUHD}E`xk(5G3PFSqd0aFgfNeybkfqkusqZ&U<25IqRE2*`DfO{@PdVL` zT-^MP7)+;AzeUOH5Kv;xb;)L1xq{g5{BFGfo+kv?T>`aM@`fcuNWpC6+MN)%=4EL? z7|*kl3Zv!lE@pu$eX~_3#U)F%J`1WiGL5Lh# zA|XWl2ol6^;4hF^j`#xv7GL$uK7fOO*7kJQS5;qE)oj=N`p55Y-X9F!x--B7lh(As z^5*No;A5=c6ZS9Tn|C_}BWH}A49)?~9v)1m^I1D1i*8J(pFVi>U?&~cul~mO!+Qta z@$PL1A7PUI9jw1$J;V9|=I59+=xmyl6WRQqF}i>AWW}z_O;fGwaVELQSXrO1=T*HJ zXJ0(}Y#6fple?qldcm%%a{I~pW}FEom@@cf$DT4{;HsN(wrtz0lcLyew|uMldb22$ z5TXD_Z*p?8s_M(z3}uY5NZM?2mtlU`Riv(5Q(RCGY6oR=3(XP0cRX6=%# zuV&{}`)r(Xm$CUcdni4RHkhDXE*+OTS{FP!Q<9tLl#eEtkvkQ=(uSP^4k4PTZLS0t z(pw!hBQ)yZq9fE<;X;&zVkf-Ju@go|C2V4lD#j2a!A4mH76vz~w9*#5K#d4qf~_Q;B_?VB^qb7 zRF=UFU@$&XmUwN##0X-*!b%wtg+s=|gAvRIZ^KKx-W+iXZw<=Lq~gwb?QB9(fUXuP zHFmnon>?VS3Q@3KfqIc@hu8j>GVT3RO^?dEFSbcu9(m)xCvBc&dgObIC9$t{w>Mlk z?FHiATTzaOu+yGW?d^72!t(=61tp-1y%Y9~>|oc0)y1D8e4Mcgw~DUXP-c@+LA(C0 z7Ki&dS|qdmz0FwDZq}FOIIGunxs!(5YTho897wYL8_ZB#7KPpKJBZfV%m&p*Ut_nn~c)13j^ n%c|G!U8mD8t9rJ1*0;wgc&BAO#|P=3cvC$uZ&$RlO*{A#hyH$U literal 0 HcmV?d00001 diff --git a/frameworks/base/resource/binary/mac/select_arrow_disabled.o b/frameworks/base/resource/binary/mac/select_arrow_disabled.o new file mode 100644 index 0000000000000000000000000000000000000000..dc0e63a4ddb212f8fcf8cda78a40acc1e3843ab9 GIT binary patch literal 858 zcmX^A>+L^w1_nlE1|R{%AR5d7Qvd217$kx843HQO&;Zf|1PV|Z#s`|o0K!mVhWPlD z#F9jiN(hLLcX14Hgz*qGOh3%L1xyGzWEMzR0*FEKEI|4JkgfvK+&~-v#2^5&8-ziA z0;wSfbO!jj^KwaX0rm2Fdbk7uX%!%r;9vuilXk@W0V&4fAa^H*b?0PW0y!+{j=n&D zZS3d%lgJ9>a~60+7BevL9R^{>p?~s9ji@3(b6`BtO?)+yG z30bnppLLO=2uJJrHO+?wK5d+PY4@c$a$%_DP^!k;vqIV(C}x9CEweIZGuv!+q;$+scrK=Hv7-aU_Ft` z%MVEx?|pDmXJd`lp2SsLn$Ew!Jmd|Y*CTmqxqkkPWlqjNLSFI)o6lUDKVNHa;w>)C z+Mgk>c`uttUcS2AEnnigQ*2Gv*S5l$XM|n_uQu=TS3G)MT^%TXQX+i*oV|%oTswa} zdCL3Pdgjuz>Occ8IC;(Wzjx0-ak63R{H8sLyJ{4l_Q_0C{p4`1!%x!Zx>MKJ%zl>2 z&u&jRA4o)>;Zt6&01Pz-Pgg&ebxsLQAT}}p#V0?IfTa@+AfK5*0nP`-JxCr7;^UJt z^Ad|H> E07PBhI{*Lx literal 0 HcmV?d00001 diff --git a/frameworks/base/resource/binary/mac/select_arrow_normal.o b/frameworks/base/resource/binary/mac/select_arrow_normal.o new file mode 100644 index 0000000000000000000000000000000000000000..5efe7b90604929ad95b2f23255b7a04e76e91cd1 GIT binary patch literal 772 zcmX^A>+L^w1_nlE1|R{%AR5d7Qvd217$kx843HQOU;xqt1PV|Z#s`|o0K!mVhWPlD z#F9jiN(hLLcX14Hgz*rx9#jL&yZ|PI95M?eECIwIc@`i&0Z5ksX>O1h5Q6~7C=dqu z38aP`&>7(8&dVjm1=P#y>ERLtq*Z`ef`bi6PTCRg2c#H_gWR1M)}51i3FNS(JNg3s zwXvW3Pa-Rj&spFRSQ-aPu40&3b7* z|JUY6luV4AZoKTj+3mxZpR}F&wxz&1wbJNrfaJUjyrM5NukwmM&73TK>UQu{=~I`3 zw@RNn96VWi)%D=%(yOjc?v`G4bn^P9fy%>m#m6UQ<|P(Y#uumNq$ZcdCl(dum&fPj7v(1A#24hH$EW6{ V08QQ~|r-iJnB*hq+3M zEx2SuI*o9iJ;(&RF&u0*j=$fex#vSzs`onuzh8tS++Bk4YU06rQ?`X|?Cz3nWdUP+4d2Qq@dZ2( zrz{H|G#bBT`przgX{SGLAMeXOgmx+j1~AJj2Wa_%&=K&f&HaF?Edt;*mocn~tgX|C zQqBys$^w+$4DJVIwB@qCT<>IeJNMPI=|iv@I91>Xcmcc*b_Zr*_qJxwWHtYRr>A2q zxlj6i+9uc@qLHvz*aU{eELMs3No35V=Qw$uH}g(2&BjjKbzKLF37$%kU#BylxY)(5 zu8S{R5_nvUbl_<-S0ZSJN;g_hBdJs`NfUAP>^a4Z=M*|44d`U(Ifds*uH_C-+^Yxe^rip(5e% RPkxnYxe$NS8I~D@J^|e`jimqp literal 0 HcmV?d00001 diff --git a/frameworks/base/resource/binary/mac/share.o b/frameworks/base/resource/binary/mac/share.o new file mode 100644 index 0000000000000000000000000000000000000000..bb044724a90af2b4307cb892d0f76452fd75de73 GIT binary patch literal 2242 zcmbVOzm6M47&in76bdS&(2X{&Jv)DQW=^)FU_^l~5=CgzSmwNEug+PY?9KU-Cy1yh zsq+w#Qt%8s#fgd+pg{b-nf2{*oG2LGc)tJh{o8Nuw?F^*>(jyDqXz^0VAB}^I+Ek?>%N1VvCTk>E&UoM&jNu)KOfAjSD(<9cMU*56jKkImX=wl#{u!;W( z&TE|C;rtx?du&>CH*JcEWd6?@Ke>LnVOQmDUv2A2Cb`I1S)Xl}RlS;IKRo|-5vHD$(NtKLttb<R|noT*a&gT2|VpopygeTszJl`j=D0;bQ)@*yZIIEi1Z7j=4 z_Dm|S>`<|p)I5m7TcdzUOH|FZ(b8CFTY`mHkR~s^m@v zWePWRJQT**!Z@NDC!94BR3DrdA{6Y@@}QL#3S?PuC9DVn1`BS4v;vw$E(AdZE4VYx zX=6ckTxzF0-`BGpF9KEC=hMD&{!KF!lcI~O2MTeLbgna zbk3AK#@;eCIpkxaJX63t#Ag7M;4)>2^^^ccYw?_=YpfGy7zxoCuMsM#Tck?cz>?=) z+o237j8rCAb{fN!g$anKBO_DR$s%~f(=%bY4$i1xVVFE<@0+RH8n+Jg-9|=YFflW? zA$A%uGe|upXl6LoSSW$46Txupg>{@glIwU8Ng<)Bki-aFD~~Rbtf!>}Wl>P%K5_Bs2!>eu3K5N#BGg^c)587HC-_Ev z2Ip{N@{W3yn(-grB|McTvO52Iitq*2$U*c$>mi|3|GtL_kJb{{`PfsW97W&YWXh$c zs?%4Dnm83OE-(!QcXo(YXj9t~NHB6xwKi4p`)@VTvTc0`qERGVOgE|?Ck$-%H8ow5 z1n=C|X-02i%?Wyuu?pjkhTuqM({WBvJ4EwtQjS+q>^M*}wr_UZi*l0H+qyhrqeHc9 z)|jCgJFhmIBa`6K?$rj;A62^guP>S0|qWlt{3zS@^8j`@@I zt~{S)k2|-)>do|=jP-C*q%d!OetYxb{mrlMe*fwH@utUkWv~+3`iZFCl)Eh+9(r>A z>1}>6V7Itv`M0X``Hxk-*u75A)*NQ%Wxd4z3I8JR Pt2gDn^k%VZ27|u=Js`$1 literal 0 HcmV?d00001 diff --git a/frameworks/base/resource/binary/mac/show_password.o b/frameworks/base/resource/binary/mac/show_password.o new file mode 100644 index 0000000000000000000000000000000000000000..c4c23e09a06d915aae02885c576002cd9e551bcf GIT binary patch literal 2402 zcmb7GKaX2Q5H|z~5(--ARxhn@y)(0aBl|)yqDmx+(4?`P_~p*Z#Xi~2`9edBsE}w7 zqT)l)021GTPZ6c!3s6M-W}lrqq9hV)KkwVw*_qk-{btvH{qy&W_j|o}uJrJONBjDM z?!`B~-Y4jPRM{Ka&seO@=wh_}SjGD6#J$O6Hr-5Bqid7N=eO?O+K(>!pI))|`v(_u zm*3vS;A1?0V*WjyxZ3O8NB1F~FLjKjzV*>PRUP#Iw+(NeKRz*M?P@(=E=CPm*O+$k zU^$yFjz-N_cfUBu&CSDW!}ZybIh(iJ&z9$-#u;bWu!m)6KD2o=zXkH%~{6Elt(ZsjkgN%^f0JatJYSKbSE^E9@yr!HAuWT)fZHPu5Gw zj*A#(n|&m9sgJcjW=fEbS*#;+oU1rN90N@3q>1~)mV{z-v^PPqsMJI11HlCRiHqc^ zk2v5XQ%*)h@~%WgLB$XZ6*EpYMv5GRjsyx+f^*%vkTZ)nWQiq}oU0FxL>$f7*%ESM zS8}WoaVUke>BQm#!y?%fnWMm)+Q@=Uc6((C(VMY4bOn3iniwWv84Y6c!HE;3?mt<* zXYT0cU2z#(ix!b4B$dqVOKK3CakeahTtX6c>}@DQl0)ie3y5Ozxflj2$&p7s$O5`d z-rQyzl20{wAjUx@0MEs!fUtEEg`qh1mR;t8jr7Uem@!Hw!j2C@AOX@HlE6VQ#U=?3 z<^fYeWEsiQ)R$NyK(D$|7|I?N)HwpqITYsI7*UyVHwBtS2@Wq%mo2wJOFSufe|Tcra6TKhyXaG3E5zRRH^F-alk?h#e-_F0Q)J4bh#;% zsIWmgL2{9ffl2oo6?(=tPz6{|9!#vPg+y^e{z9odNGuN2tI|?j2sLJ8JyJ;k6|0;T zEZe;j;21+%EJ))(Tac5iAa%$BkYyqXC4uVBdK5)KX(fw9vS*Ldf*92XuTjOyW1_6e zlyd}?Aq6c<5YIakIY^}@sGUOWOaumBa}@`mo&Xw5M3e}?R2~C!uu@c-5CXH7y_6F4 z3_uhphCoE>P8^UB#6a+jcu`Ei1Q}8Db+_K;QanDp2^Av&(Yb(6G)kzNZ%s}2Udcm6 z%PxYiC>A|6Q2nShDKHM|#^8~)j*bb1k?U%t&jW`YcT)!L1o8s0f(=)iV`DhFkafUX zxYoWyc9kNxRa`oHXx*q1Cmdh3zBJc}cMO99Ya#^1l#qdussKC$aTKjrA0i=aWZ`wi ze(%-OcaGy%Pv`?`4u=DM+nw)&i(`CvWK^v?>l?G)td@`3QL|Vs+WqKYJD+WiaZxqq z;r!%eKdJ8rt0yPWZqM4qayHvtAA0l;A5Yhhs%3pS;Qi9=@qE)>(yO{p)~%`c&yC|% z`*74;zX%#rm#&+E8oM;sg&O^{KYn@s-LKDo`{CL5-|jtK$B~JK+fVPkw^$wyj&RxP zO?mkGn_TbvkMQ&Ie+0%?dgkT$)7?C}u1zNQ=Zop;>12Jp+)hrX>-BcInoZzg(k^EB U-}1)k_5ADht@E4dYSZie3s`sSp#T5? literal 0 HcmV?d00001 diff --git a/frameworks/base/resource/binary/mac/stepper_back_arrow.o b/frameworks/base/resource/binary/mac/stepper_back_arrow.o new file mode 100644 index 0000000000000000000000000000000000000000..d72850d49a412a0274345527252f634deb2f2838 GIT binary patch literal 1536 zcmb7Ey^a()5biq;odf~tky(w%X54n!F59b_L9mDbEfN7FB&}h`JJZ^sd(_?R?2%l; z0}%2Sgk-z|Pl0sFy#N8C+|#q$cL$u#lH0DYKG%=C${#=f_2t(j`RPhRADVIPHne>C zBS~)3`Zi+U8RD0ng2lr$_A=Q_;_Trh&lmG{9vQol=lAbExx1Gx*X$qm9$&rG4R=42 z@Egsjk4N6nx}o)Y#AwD5ea9Jd>dn&b|BcC=^A~G&7V4&`%4sUONLeV4t3^>Rr|Hut z55_LNGrKlv&X(+~2-|zr`7{+wFbNEFIy@;;Mz+dkny%V*bC6}*?Urv9uj*w6LWqoP z^pu11by1#vizvPKS*J~B*BFgSTeRyiD~|K$^W)P=wi9=%ML218td6;vw=1@orjL+& zP-u;_Bg4HyL?scSS-hm`oJE4rwl3DHyda&RKRS0N=0_M1q3bYWKP_)WgKxBuG zTce#)9qg@k==Evqu@rSY~{v@2?s zl${jo^A*x@Xc)nd_?a95l!=FMqmI&Q|WKe}BNZ5Z%6?#m{yt_KcQbvT)( zw=Sb5)u7_DXlx+IgE7lL-@p6x;q_SJ-pwuQKN>r+50X-P73zvwGB)E6Turhiy#TR& zXa9O!;`?)hKKpm=Hpy2Kb|F9P^%n>8{CQE%>)-RH4Vz7Vh)JQCb4I9gJsuQczc4T`x&1~54 z5&Q*9cJm8-1ri$sYZfC;*-j^F9wSO}>ejud&VAIa%FloP_WHfauswh)+!1}?3D!5gBf~?3PHG89)*9=L7gH{%vKmE*DQJTlFd3EB zYhjp)-tRJl+6f~?Obmsv+$!mSmXr&tIFl$31gE`229h#_@4<{JYvmBMj?7@yQXt-= z;zKN2Q}1$k$V0WnpTU1)+VW+1GpH+?Zt@qVf_TUP literal 0 HcmV?d00001 diff --git a/frameworks/base/resource/binary/mac/translate_c2e.o b/frameworks/base/resource/binary/mac/translate_c2e.o new file mode 100644 index 0000000000000000000000000000000000000000..aa803684b5e79452f1d0ede5fcbf92f12c22ecb8 GIT binary patch literal 6154 zcmbW5yKW@M6^3ccfB`vh=1bNXrL)btUj%YxnSvtXIJ6MWbkfY^FPhdDQ z;KZ>bKYUW>~=22OF@c7-6`&Z9~SKH0QuWw(UuFPNt7x=eYzG+tj zYu((RuAc99FW)~tet38oAN+WG_w3jiV~$y4n)3eZ>+Q{pw@tLQ*5mf;>hZe+pOf8o zcfEPMeR8q8yS%x-zT9mtp194)ahLZwSDUBzeR_N4<>l`AaQpJ|$#(bUWYg8@>SJq0 zV?C;JfuFT$Ylr^Cm2ECoDgz>X!}`s^$d(^x{VCYda8 z!kMWAi3vi9r38s{1fC8!W{@32$i>S!#wRj{*%^P>lAHtajq})je)sUAk(30F!5fxMV+=*q(V~$OD&yWX=454i z3r2Doy$DwFT@b9}rS^8o)e;nKuQ+8_;21&@&?##xRE>B7RdIdH*0LzJWE=1#%L01T z@&Sg7qYu77Q&r-OPkDI=prM9<7bLAN#GEtIkYaH*VOhamQ;Z|Lu%E5QTgQH7bkVp{ z5&ID(3S7&|W%LSMI4-*q|)F5X9YTMK{B*AhR2m{q78`phgOa?YceJYlTm`7ex6oO^9 z3@AVtu9G-gl`3feuN8(TD?>BlnuesmXwmibVSY z$AC_WiIXj*X;&(~A`YOH_{FBOP3&Epe*hPn;&M3I2WNn`=2C44B>~16#d@IG#36<1 zMSrO8p)+Vivwc-IXSt4m)IjJY7W)KHf@8=fA4CzrfXvP4QLx$-A_X8|)5I2$?0}@f zNvyGPN6YApdWe0Ow7e&r-i2HP8;Kv##J5=_Y6$cQ62r+MTdFOf55UYQO0bY&b%>7e z(=Z^$G^l~h&jld{cxIv%bO!OGNwYU*NLAShnbItU?z9N~SXvT^DIXZue3=|;W3t3# zMR7_CT+DWWTqIm!3pu{>gq9#g(im}0?O?N{0(L+QyaJpXtPnP0_9JOyNtZ5__YS22 zFaW;qj;G3kFI`Y6*^h%LOWHb|Mw?I|c2SeB@JE{%3=r*saEAE#45lc2I5SE$vhM9- z!y2Fp>nN&}Ai&!)_bnxu+6+|G7tS?~p@l#pSIO`#oAh{EfM28<1W5q^#sDfagVNQc z5kiDwl=y%T@H%>jgl8RSYEkya!U5zKwq@~|DlG+(u#!_O zY|)K)wjhIO@>4Vig_AqI96~pwIf#I{9PVshR~e!nc0PmG8v1hVjFwbky%Z26Lm`XL zGKG_b+Rc*b?m| z_SCH=>s`&8@df~p*VN&!2{cXX)ZQ~9iy zi>aa~*q7`>VL?IgrV*fEu>s8>yx+u`ed%9`F{mf2npE5yC8KqseL=|3yzN650cWWVM7*7a`!`%(iw6B0t4(loqn0z&d+3;xJT1; z#`d&O0vkix6_%g~TF}z0L(257q&gkQPSzpbTZA-p>u}26dZaXnytwq#xuh~KBcF@cOB`)ep6fghNLhq;$B1vUO)PAS7pKQciC)FzUkkus})H zOu~{Zl-W#=t{|tzkRC2y078Aufiav;=+wSShN&(Qp@vH`iuak?Dh7T3Jf;leI8MU4 zP2xDiha7~Rbnn*A22D&aD$*gb9C1-u;y#4($mP<2l&CqHTS@6Rbgt9Q5&6skeJ!Sf z*ntcyK(d-a53f@iXJ#D$kwRMB9cVITwDoh6(wfkGlN20$=!=_TS_-^$)4pYDH{Ms! zMRNnTI1d6!rH~2??KfG-IS?A>5GQu!cvRJ1>N;*ArqX_Qkxy5{mfJwx5k9i3$0x^n zn(i8p4;P6i&)T$a-#e~```z8`i_Pik=JsYYj~+d2uXfM5YFrIZx7XM6k9vM|_r*1{ zH?KA~w^vuwrDnUO{QUC%McYFUkKFv~!}INKvzXWBesRAU+O6pO&+j%*Pgn09)aR$g z)#tGmTa5Lh%>DWwfBEJQfBWX|fBO25zn^z{Pv9_I_%8Iss;@S8x7^d}hW2}QJ2`&F zwXp7VAHVJ1S@+UE<-h%XH{*AXhW+?g)9-xs&&9=O+ndX~FW;LoT R`|Veo@BMvudAB<{`Y)s|-RS@T literal 0 HcmV?d00001 diff --git a/frameworks/base/resource/binary/mac/tv_rate_star_big_off.o b/frameworks/base/resource/binary/mac/tv_rate_star_big_off.o new file mode 100644 index 0000000000000000000000000000000000000000..77b12d5f9a9e159d954200e43499891987c863e6 GIT binary patch literal 2166 zcmb7F%Z?*86b%f5(Xe0(J5#e@kP^q&*Uwgx(Gb*Z8id5KVN=R6s0` zF$+G01%JSo@B=JH99NR=EV^N^RAu}4`1-zl{pa6*z5Aro`QT9pKYXcg2k74Y+Ub0O z{%yh@Xuo~DTM%h8+F=fvo%HSDPM%LE%_K2)EziGw@$$uCcGn;FALRX>gxu3U1ok<; zKd}B$T7TT>Y|wp*@5eMpOJ}Dq+0=5-|KB!vesj4Ln_^v;)oPfLRGBDN=hd`a&4<~~ zFHd_Rdp>$Hs5f)5DU0nl)y*(dLJ2ZPkPg}LUdjZdt?FU6Xqu~&et)~&$}P)kJ@0F! zR3B3Il#`ofxw^QINHNBKyPA!j2(-bMy`K24SQYC@Q>{>-#G%RtHm zK4yKHAyiZL9{j&wAk8=d4Bm4_CV zr1puEK$Q$JEUc20jD{8lQF6h1c)~Y+Q0> z+8!KAm0}gIC@{<@TDfa|-@+@F#R0ApofvBKv5%tfXe^HIumas{fLS5_KTegC1q0K|hW5l?V0XP&5Yf zmUdi)GEq0{>Y^BCt7=soX1#4WZ5F7-nV6N!{NzYwWVzZ^X1&+*)(mtu6^TbACt&+t3EqhDeEs3UIY zKkV0U_vZPlay41M&YMk+2c*c`0K6*ac{Q8mI3_PvQ#{}Q#j49U#rx3Unx^v)<*m{f literal 0 HcmV?d00001 diff --git a/frameworks/base/resource/binary/mac/tv_rate_star_big_on.o b/frameworks/base/resource/binary/mac/tv_rate_star_big_on.o new file mode 100644 index 0000000000000000000000000000000000000000..d5c4a3068ec0ebdc85fe128d46af54239c617c5d GIT binary patch literal 2148 zcmbVNO^+Kj7!DMHR1RF>W~LGXDdYI{>(5n^sszeqk&s$0Tt?|;HW_VpW|f(4w!QQp zR2=yk{1bi&5@!w-k7tu^1iMgS$z%KR<9FUKzy9sd-`{*R7`%6HfDd{a`w50OuLgt9 zF#eLTJKE15UT=tW7;V3X%t7iqcu*9Jc{fjt>sA!sJbL_%Zqq=&7ZDr=Dy|od46t53kPG;)D$SM}L#M2azv`rT}LU!aXY&vWrzS(lr6*KCf&le4lrSqaCI#FtSUtG^PtNPlec z%eLQ@C(XIY^PPaM>el77?dF@JF1O>+_4-=)qHIs5vrReg%7xfg-D)Rajz|60o^{$@ z3+pwyn1i>NWZ!!$NqeQD8!}0_G%*BgJ;)A%;kPifUYcMmSqs!c3m5Fr z2B>VLI3)jdm`GL{LzYz=a`DSV7}i)KXE1)^dV9^a)Xm2$c*w=9o~&)`cEa5vO{lGVB9e zaqJ-gF43?V!7(lxqY#lhU~6Q+K||2ZN*$xcQ89zV*^!PW45O1Aqw>(glGHwN5~z|P zhJ{sc6GOvi&Gacp5c zJVr=2kE;rovFAHs4pI{nr3^w$*{Q%r%-A6wD#iqRsf9zzNBE1tFWbn#c zsN7#Oc22>c4*rDh3|L2Lv_(X$fM<+`kJt`%fWsBE79Q0Cd5p*>Dk1fdh+^gq@&fkt z0xU7^DFh%jLu4P#kd@SIy=D@(UiF_cQK1f`dXQ5#9gos%S9MT7_C;g7>}mT7l!><6 zG-u@`tDCyqukvlR=vJt~nK-T1>-}b$=bPtiu*=J`ZWfDOUF<8-`Mf>rWv5B5_eZy@ zsw)q8J@cCt`rbgiT_5lE-<~XrXH`Al oyePWM0uM%6^iF?PEsLfu@Q7dsZdTiPC*M@D;}2 z7<-^S|8%z@_%PaG4bB1gJv_+sMbQ;3v1@t$-Lsd^4y%90!}$Z>6_ec4J_hzBI`4mi z@pp{BVEi2YIXXAKn>*XYGXJMdp5Cli;<{`%RZ~whk}4Breby|hdO6L0dU-O6+0)tM z$>w?~uB&qUZF4itlu$xj{Ia_zDHGtTH`DB*>#mN+-?&?aAxM&kRjF59AO+GFwJvh2<-gty{JGR}k}F%o>=1{ZGnJ$crw z#b~rY-c{YIoNc=tJUhT$@5YBdIjn7x~!YUVsBq>lha`wm9(Uzi*yGC7@|wgGH8{K zAt7S#q0t*6pNwFJgD@#c+6FR-g*}T{Hw0<|;gTM;&T7)0QOEcC2!*|*q+rO9V4c-o zf#D%E$dDX`n1&Q()ZW1ZVopIOV}glbP7)Rf2JAG17ZK;+QxslCiVz9DM>X3*K%Hf?*`Z0oYE8+BxtAseWuxhp zw$>tq8p6gzYZ8bd4CP2UCPo4fIR!Mz1On@wIE6oTFyMfb5EMAhA=(eYMmlFS(yxyz z^w%nhxsgyg*vO7n2ns3fy#T6=4=H(MS1`%gpcsWaJ%Vq68XuAEKtbVPpVf+m$vNay zWZ?kfkOII%+FOa>IsQuSfTzfXm|W2M15hHVDd1|e`^YRI#>fj|)m$_T!|Rqs1kmW5 zvys0@GRP-#B#;1bwT(Ui)d_y^j?auB{4yAPhVfU% zjhCfAi|{Ilgu>S$Z z-!R@|{22W^bZ&e$ceaUT{!g1ceZ5|Z+oEa9x|(JrRVIq+yk3^oL(|pv2_>|}FFX8_G6Alton}{EcXK)(Z#EmbF|uwh$66^h2FFh1^!2K& zt{)Pll+w80&1R1U+T`=mNPJUNMYHJY=2X16F1qt8;jK7H#+mR$j0B(8;=s1wljrqX zj7Gc9yRusqv$k6_`Fhb@7t6_b3vJn#MSDJ*H^rhWmSR(OSGxn`WZZ9Ur7lIeoMs0k znP|JFzAmO&RaeD+HQJQR?h0Pa#6`JU?KgQoYJOfpy0|T>db!-$*4ww^zFWVlSL2Ij zu`b4KzsN6}a>+jKnnl%K)XjRD_0tuUJ<$>_MH`C!>`6A8j4!ul_slm7m;=4PB`rgw z;IthY%%X}aC2>Yp2GY(rJxo&R6r%A*(Ik`8UaNQ@JJ(8D($PgaKmms6lCun2rDI5l z)<4kb4UtbqFvDJ$lq78fnZ&}LMXVbFHGyzQk6LFnY0s$RbA5!uUQ$vpWJs{iYOla> z3=J|QMFU?IPZH@J1D6^kz@?4kL@Xx zvY?0zCyP7|MnJb{YUkRYoM)D`ba|@Dz+!bQFdq_zuQW zuZOlVSvWLEW0e6r4dF$^IrtQXmysewg6~nywh&Nf*=%-blCWA+a$@eKi9y+DdZn$k z2%(0sG0~a?VhBSyQjUp{07Om!jWU72dMD1{PaO<6;3NbEj&q3iG1y4wj7IwPafSX` zB{4S=DhC_c(F#E!rM(wGmGL1ZkL(I285+9Ex zzGRKa(`a7b+>P|UOnvb@%)eHs{0Ef^b?v@rYOX0&t`-`RvGJ!|%~2_}jm8 zCs;okh_`EgyLkU?%kx)dwP^10?lwn>FY><1w(G@emDg2{qw=C!;(h&3v9`P~-boH` IK{puu1<3ul`~Uy| literal 0 HcmV?d00001 diff --git a/frameworks/base/resource/binary/mac/up_arrow.o b/frameworks/base/resource/binary/mac/up_arrow.o new file mode 100644 index 0000000000000000000000000000000000000000..c0383e9c6d6fc139d179743bf9eb7e287af4ba96 GIT binary patch literal 1202 zcmaJ>&2H2%5DpXxsT{b1;4rwCuGIW)vfZtcR0Rar3fglBiMwl>wIj#fY`O3n+>p5O z5Ih4 zHvuJlWSa1taw=0L4k0S(nBN?FMSSroi%u{6j^cQc|4Kh;YGazcOo< zs~J|5zzHjg9@Mre&kFRW3(7^FclT`WDru&gB;P)K`uh1}AG(FrLm?o_G-K)Cd_1Yd89%`j-<}!(IFoC_x`*YQiinBO=8a z&;QtdBN%p1x36T%s}mvT5oyc<%ew82t@ai>urdcAh0>roaXNGW>kxD0xC3i@00c@* zr?AmH58METK6tyZfd%BB5|4tv^ sdc%O#deq^o;3Rp?cq-46voc9_b0x@~P@dyo!c|Dc-qPzJl}cs&2B@SH>Hq)$ literal 0 HcmV?d00001 diff --git a/frameworks/base/resource/binary/mac/watch_down_arrow.o b/frameworks/base/resource/binary/mac/watch_down_arrow.o new file mode 100644 index 0000000000000000000000000000000000000000..c790e78fa7bff51eeeda7ce227c2e96f9c288d05 GIT binary patch literal 2154 zcmb7F&2A$_5H>6V6b@YB)|y<1H16sDpUBQCWEC!pv_i{;i#6C2dx$d=jVE!k7hVG- z9)$yMz?1L-99Dca{@swUqUCXSS66>s^;K2(pMU@L_LE-kgJ(Vb;iJAApnLmsulFVT zUr6>u`|ab^0;A1nn>jFh^sU9c(P)ylIccogX!PRr_337|>wkTK_d9_+(msUj3w(cI z{UcicwAcFy-Dmh-(HxD=rjLB;bkP6bHh6w_HD|X)vncCom`E-XR#fA9QdZMp^8M@c zen_6591Iq>Q+8Vx%dhLZVIr7dQQ?>D@01AxR<#%=v$nlH&a&ll$(Nef%`{U&hzuBO zmE*g4SzSJ+C}WISx0;+BFtkBiw)5ho9B0ki7SoTs|E_JjqrpoXrqO(S_Gwpbg zA{gOQ<+u$ZL>m}Mjdd2tDstsQ2vRX1C}V_`F4cm^piJ<3A6SFqD6G=)9V?9H#wz8s zWoIxBz(QD`LhQYf(klk3FitwHNgA!u)@r6CcglLFR??{8tOv5>R^l8TQe(O)+zMVq znw}|Grfsm+bWotdTFW3cK?oH(X%Jd_=SV75h|((3-P$N4HwqR&7gQP-g;ESc9fO8J zsexTGL=9trAgl)Outji0Lc@R9v5XH_qU%XM#rqXcZ ztVSI7g_Ok}h-DKbxQ&!!G9u;(I;2s@sC<`@LMkYLBgu_WLMy1Qqvx&n z-A>ewj@lt?l1Jo%kbwY&G(ov8FSHYmNT*}Gl12jX(Y*g5VI``9s-rKHlR-wKb)jXu z5*kc9wMU9BVT-n@FNX^_S(Oo#FaO*hM*?Zx(6XZ*Jz$E^dpeo=nz7-IeI- z460<*bbkL$Q{P-CtZnjYaZxu{!=xL|^S1a(1`ZO?Qnno)?O}CzSNY^DK3V|;f@t7?e3CJIU~>qG6Enrw=TQ_nVVw|&%3sou1Nr8 zZ;GZ)Sbd$3%k~~ODR=G(pONJopSQy!wixGg@R726VDIB=Mt?9iiXfo6PKarhPHfXs7X|>wDa2XBu#2&?&vBr})*$c10 zk+cyVgECX zzhRtU{E{$qYNVSw-HBxWPa8hJyPmV#vRzh9J>oJIoR#&snN;<3#NWPoc^vrj)1%?? zcFJz6a`mFQ8*#w|iwZx!e^PP=u6jA*v#wj5WZ7!9N>@5<+G(bQ5E(c&A}4qAs=hiT zC}WISzspaL7}~I_x_Nn8jWg@+tjo^YwpnGbtLdy8X6wDR+@!o*u8;J`7DYE>lM(+( znN&(|g4c;usqso1A=w4N(OVlV!PfXFjb#_wrPf9jgG?Y1MRe9kcCJIJw6HpcL_s2m z5N%+DI;$T1}`h);Otq6xMt1!K~7#g%c_!#`Mb|t#z?qo?{n>tuBL=9^| zVZ0Wav_l|h4F|xeJ!ZhrCnNa^H&R}EWy!Hx8S5lP0iMvnwNF$4b);-zgjye!Rf+Pc ziBf4e1*pW;VH8CSfkt!?_I+l=$%EKY6n1tQwn? zgaEq7u*;`&z)?up5h=}NM9>lS-uclfX9&eUybm9#G$`q{lt4G}Lnv?q5`vPbU7s1+ zi6BH+pEW_bJ~KSr=VYJG$Q5ZM7!T(D&zx0w8T3MqB|jZzG~2wkZ1;?Y(_ZY*%j0a> zwaryI;&oG(+tu-^nshT15za2F`Fy)c^W*kr4(al?teeSX^R)YSx>oXbfp=Zp|JXJ+ z3(mT>sF#;bdp+X)bY67jGa1MSXbF3mez(Wevt1XoU8SzBI?_|u(Ju(c~Ey>LdPk1!%2XKpU=3ZC35efqL*>*dA)aM!!CZ8&Qd#klJ3 zQA<%QP!*{j{)Y|2Y`RlEY|C-Cr+M)j>y4@%_diUb;>{VUgkAMj&vaE zZ8|{ZkP7$d(c!NPeSf~f-}bxqE!Iy4>|y<4v;S~9&wr`vqP@>oMK_-1H;cTWik?G9 WUe*(QNI$;6tlpLXF3=TiH~1TC>9rLA literal 0 HcmV?d00001 diff --git a/frameworks/base/resource/binary/mac/wrong.o b/frameworks/base/resource/binary/mac/wrong.o new file mode 100644 index 0000000000000000000000000000000000000000..4cb47e9f6ae1cda46c24695a5738085897a6d0ac GIT binary patch literal 1274 zcmc&!KX21O6gLzJsSK>JJ+4b4#W^R9qo%S`g;qskszec^W$decihCEGuW`b{*Fa)G zVq;@qLPC55J_X9e7htG(=RZk-mX(*hd;fpW@6P9MKYv`_wX9oP7B0v}mI{i?*Ov7V zflkT-%K}r3)Yyn=8Lr({5X7MlO-4mQa5OocG}cBo^$p(a&L(zMyN$*JWD_?j zA8~n#@*eUDvLVykuzAEAU@-D;@(vc~8O)i=xfDL>bsYjsL^9?g@yYYkV|$MrjJLgf zp1_>5;;~%#!~qA~A^yqL${qp461h)Ot!Mj`7Ddr5cDqs~wC^|$MT|OSf01!9y)Lmg z8jWZfCF5;C@*deXJYj;VP)oHB&!$XADGYa^HR=xrZX0Yc{c>!Wm$7an&%w6qa?N$d z#yq0#aN!Q=VJ34%U!+_!k5;j&P0aFWe5hEcSquf&Y2B&o(K1wJCBS2!T!%&=*Gf*A zPlOb#vFw7!I>mh@aK^K&2^!s27a3-=ITJFD>uJl06^nG)XZ7yG_b>08(w(C{^CKW< zVZ`+k&jGiyTr0iqWsW6fJV~`rP#=5L09M;k;^W>kSoH9z1_YM1T=ac1*hRaRX3o{y zPpi*gZS*#??F`(BdwkqDn(?q>m0=s~D4h93$qRu~dDM9RPjk>J6#1D{=RPUb3=g-} z-|M>gHaboR)@mE_D9l*P?scHouIkEUd!5pOjoyae2lHrxSH!&E<3Dekxu5rOY3{wb r(_0p-ZKsZ}>w@4V7ol1Pg_0r(5HnyR#_!8t?wr43*ZOs+v}OGQ^3W-3 literal 0 HcmV?d00001 diff --git a/frameworks/base/resource/binary/navigation_bar_back.png b/frameworks/base/resource/binary/navigation_bar_back.png new file mode 100644 index 0000000000000000000000000000000000000000..a1941c0e6cb2767f4ea52c1122887147fef67cb2 GIT binary patch literal 322 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpTC#^NA%Cx&(BWL^R}e>`0rLo!(3 z&a~w^Y{1icd7eVF|3$e4=_grtmu322vJB?CxOD0PMnMtYLt#1Z@-?NqmuODN;(j~P_p{)8(*v(F4lNRX*(@}1%i5R#+|0{U yJc^HOX}V=L@zn%>vx(nkl;$#p3%rpOk375Age+>qP1B0ilpUXO@geCya&x!T` literal 0 HcmV?d00001 diff --git a/frameworks/base/resource/binary/navigation_bar_more.png b/frameworks/base/resource/binary/navigation_bar_more.png new file mode 100644 index 0000000000000000000000000000000000000000..ad2fc4fae147a311574fb793ae01d0aa6930fc61 GIT binary patch literal 213 zcmeAS@N?(olHy`uVBq!ia0vp^5NJ(#@?x_tKW9wa6w{*|UsX7OPGj(N L^>bP0l+XkKW}Zw( literal 0 HcmV?d00001 diff --git a/frameworks/base/resource/binary/pause.svg b/frameworks/base/resource/binary/pause.svg new file mode 100644 index 00000000..7ed20f8d --- /dev/null +++ b/frameworks/base/resource/binary/pause.svg @@ -0,0 +1 @@ +ic \ No newline at end of file diff --git a/frameworks/base/resource/binary/piece_delete.svg b/frameworks/base/resource/binary/piece_delete.svg new file mode 100644 index 00000000..f27263e4 --- /dev/null +++ b/frameworks/base/resource/binary/piece_delete.svg @@ -0,0 +1,11 @@ + + + + ic/56x56/Close/White + Created with Sketch. + + + + + + \ No newline at end of file diff --git a/frameworks/base/resource/binary/play.svg b/frameworks/base/resource/binary/play.svg new file mode 100644 index 00000000..331fba6b --- /dev/null +++ b/frameworks/base/resource/binary/play.svg @@ -0,0 +1 @@ +ic \ No newline at end of file diff --git a/frameworks/base/resource/binary/rate_star_big_half.png b/frameworks/base/resource/binary/rate_star_big_half.png new file mode 100644 index 0000000000000000000000000000000000000000..d85c1fb3148d048730034e6e7f99f1f4d71c8f5d GIT binary patch literal 4545 zcmb7GcQo7$v;OI;i?&Mi9wZ2&6D4+qV6{aML|?4l5?!?DEjmk-L<IDGgbpHw-kdwy*0AxB&YHE6Vj_%&>UXJcaPN*GNDi!YggqRw* zW##hFL2v}x!xR9(az5H|Bcq&*TU%LNv&SL!j=NDeF8l7>N?ZpEH?42+2?3gCBYQJe ztE-a)$X>iUpLUl@b7008a9lXIcsNU1WJdNQ@H{?1=1PUVpjhv_0^40Oa`GKMn_{%s za=g;thl}pm_~6r9_GUJ4AMnUg$*#tfL|l7VyZP3@5^)2Bs^V^EIG&r{sF3SKq0uGD zPtQdd;tt@k&3fEAy#ZfgDe7E(8B4SqArc21nb)Lgew0Af8(qw^FC?D_5SZXyJp6bn z_?R!C5_}~3mW4b8pmC6t2si_PwD$8P6=6JJD64cC09x0Xo>!!UwR=DSpk5SqukJAk zMF)KqhAOXvtrY{tw1JYBK%xOz*2N4XOX6{LtKUu zhoyZUwuJ-}zhElpWNLjwO8EFYh|ZczF6NF+;uQBV2%Mcr$ZZXgObspN+=!vq=kEUQ zS&Cn&>YQQ$;W-rbq?b*2u5yt)`<+uF?kcWTQ#?JaUZ3D6zK_b+3J#XIo+7VNZ%Jy4 z&`gxeC`%)|V(1rC`RLPiA8+7wT%v90s5q7V+iC0PZ=*F{#KKwldl_w4;Znv)QnqaH zN4^ZKm;&oP5HEgwDBU*5GLohf5uTi^3D<_JRq$=|G}5+!Oh_Xl#XAMK(<*cu`2uOr zyZmkBJ|)ASRPpa}v2zvhSqf0mS*1aEsrph^o{@3!B}+ibp)QbFh-j%nsnQsYQ=T^e zReg*vTo{S-?x<}db#eHC2dj^FRV13R!hoGd6n>ep@eF7(FgsZ z%7UMu4>59uW>D86U%dwg(Uo+PJ~@0txr}N9rJ^MhKXRNLoX#8{Yev`%zH7p^WH-*a$MaFb6T0Gc_?k$kr|+8qdo9ZYcIkf;HRW9rZhRBlx}3 zd#@N$`e`%dGK@2VGjJaajl7JMCjvf@8-6sR{%C3Zy6lNjgWhr_=}*Rw6P0X6|5QrX z48#0jNqQstRwZp#*Wnkol=W|-o)o=-lo;AJ^)M%JG4@E<9l%v5J&g&rL|oqK*qGO! zZ)^J!U9$Q<2+}rC^ZH<4WuIc7zveN7N7eHQyDvMPr!~wqOgS7RN+7B%`f1X++P*rt z`q50_Oxujjj^_^J&eqJH4>DgRUnKuT&QC8f);WE5H= z(9FLZ?XWE64_30Ta=&X+CHdQK&PBo6#z|tfw5zmxrA=rk-6hAqWwdeJdvNf($XwM_ zRo`}^>_nbRfpyz->+DrR)O(G*ZmoFf_}~D+=!-zMZj~-deyi-N{I+4@!0J%!m474!E_<3hK%3>81vYRk zk1Ka83>?Tc?$;kLb?)b~_E~&W+HstXaOp3XFpY1Zoq6dOr$SEn>T?}s!DD^1e7X}tax0SVV zFDSP01WyKM2a{YCT*_YzTqpf$Uko^8Ja|U*0Dw_oLFoxgbc zI#f9$U08_T$>9ElqM&?H8YP6veQ2L*mnza;C z*Yb@sPG#ohU#nd>zR`W+)ANv27bYB#!kqe*=Sas`ee!qJ$h60_sBC&(dR_^P(kZi1 z_?K9dV3V%Buy7jXO2C?HKWkca|Je%9x!2Jw10qU$w4@PMqesQ4{h&hF-<-+ZzZrst znEiaXV1KiD&O;u~_zIm|r`KH9FxBjDdVu9_*Z7B#C*A<;cVFBB*7DNdX@BhXfa5@Y z=C$4u9A)P5t1W|d#!I6;=d1~Hqe~3WJT5899@JrR~VX<_{X<&Yc#eng3^~a{RY5tkX_IbacBdQ2C z2KnE6>D#TJh5b!j&>F8#+{Sjp=aX1$SX|pBj#$` z+v`bPVbTfg5IN*(Zm9cA?oN*1XQbIZs?Nu&9RdqwuY#8K){BR~&3zkM$PQ^b0c}A7 zgvaFCeX2xDT#FQo(R=G}OY+$)*)-dl{s!-fFWdU`N+p>T6y*yl9-Oa)r!AMiEHB7^ zrmXlgdoJKi`zqVTLf-=Ipf*yV4EEmDZn8S-JNk`Fve<7$9&?}B%)B>)a^s)B+sxN;^2hgd z2kb|-t378CnB-r3)i!gzNpeBG8Pa(3$qwU+{qq9zV&t1C^&S;zbiqyf-|^_hG0j2E z37#iB2}$`J9ITWq=);%8X^Z9c<#Z$c!Nz|Bw!A*#7Os~rpN_z=l9Le(D| z`p<0VTUF2--R)HlLjNtJ%_vKL&K()Jo&+O~GKJKI!})!WtZw*XctN~o9O2(FF+wpQ z-WdGitj(eN7|L+as~B!E5ZOJX#>VbM5Za{o(l6+pxVuknkl&tcgM)orVXxh3-gNdz zfo%H`?om`AI*}$}{RbZntpS%WytjugQV z?$_@(kG)KZtB6|2ww`fN5-3junFd;IjwB1-*AqI$*9@JTYT?rg zo}Slk6w*JuoP8wa(JG*S*cXT`<4?50X1FNQ@`Y?WF3K0E_kk5LZy4KtZDqI+#irIK z`|HR5`lyLoiFQ5uQ*#^Bp;{!Fw1+!9NYm8+GSXlqnEXvVLm{qyLWTJ@So#qGb#6?~ zZ5?W;ms$BLSz(@@XMg%~1(iv45w3AaJHNrhdd``ZgccYg!GIq>U6ZxBE~Y?OFX4Ra$64`g0MQe*Cvh=U)y* zD56tTFj!kY)FP-W05_>shYHL;57PZ~(5ssXmb5cXM`M;EYwhgK8RSdiGL~$x3|MH< zyAqH~tVxZilkIg0Mvv(a-ENa$#u7Ky1q+P6btRc;$)Q&ab+BEMMH>VBO;iS&i@GIy+_?v10~0(32!&%{=1 z1mABmAyv;RcHTyXDQ^Ti_{#5B?;6ck5UA~HD!$)zLY1~X==DHD5WElTm0w_8>6c4+u$;K-aJUp=?HTDeWR6Rj{K^k?ibth`PjeacNy4-ExYz-$fD5Gj`}rXcz1bcx_q>(Yt@~)9%0C^ z22tq1V@VsDDg14`-yNMxi_%f(i2Lf2rcU~0UXr`(lk}$_G@QCP)Ej<~7_gjLQV@j5 zxC#_ZCYZXwE-JztbtP%Lm6`zRGLh~4w`x~ZMe+&fPUC|8>|+mWBpBi)u3s5svnwW` z5KySF1jAGDaj8?@I14ucvxu!0UXz*~#5t^GJhM>R6}64->Gp%Be$BJ3RsW<}xSUF# zLo=Nw=nIdUy^P3l-Dnw0FO=3nZSx2D({^9A`*;y+Y-9-9n+{AoN1CF>|6RQ}S>IF( zg;<+)E6v7C>5rvLQL|1ob_CPEYg|8kpEc{>d?z5@)Me=FIBXlbYgizP&!a_#vC5HJiCdHJ=&oiIuq8fW_u%m>V zvIK}y!+8#Y>+@)_{oc@EEKD`2kScb}%*7^X<&X*a=>6uwG!=-Tot^lG6UqLMDLBva z$4b56tVrhVbcy}LVLs1D50^v>uBV2)H=yZjaIIrsebzkAnZpC?2CLgfOHf>e!6jMQ z=G{yz zd)`eY-ibmZ6)MvbHZPac64LLm+F`LMnSZo zXf&GfWp+#n%9w6h27KMj-`~$T+y|d>DJ}^Lb8M@~$PzixN}qQ6^3YLX`!nZY#bRQO zI$oQD8y(X4n||$GxZwP7vcW{O6r^} literal 0 HcmV?d00001 diff --git a/frameworks/base/resource/binary/rate_star_big_off.png b/frameworks/base/resource/binary/rate_star_big_off.png new file mode 100644 index 0000000000000000000000000000000000000000..7b0e138ca3d2e5d682923c9de7630afbff529e9d GIT binary patch literal 4112 zcmY*bc{J1y_x>Pd$r58HTbRn0QX=~{B+ST`WD8j)Vhm#$B763+3nhe;zVP#Wm3y)$j194o*hM2a7jxa!Q zQS*7=T4(i`s3)Z|J2W0kw5bJVJi!*H-0Bq8r{LqLB)f1|64}co*9Fe}p)-m@ttln7M91uzZ zW<}Um7^xCrK&SNMP7u(^4OEzXdd>h~0Kgp;s38J;U;@^6^;BqqvEq~|E?^ALUrYzY zQ2|)6?lo$)FMzG-YnUW;a|@71R1=ZD&|F3pV)%T6oqncJp^h>Gym%vr-*>I(p? z;Q)EUW@%}Z#|%Ob9!DW%m+U28&9 z`VSR#EVIQB5>P|$NWJA{OafS)@5rGj0Fcsjn4or(3g}DEUjTrHU))dMW4H|3=>R}0 z@AZue^-Gt(f{4w`*A0}*7ewqJcalT$ zg;t|LP?5GyuYBra4c8=Vi0HPI7wCT6Q?;YS$xb1;n3I?W-CLN~AE7k=Q2VIWy%*$- zY0vW>MBHJq4oSni4f0l9RSx-#FB*LK%Lf4j#l$;=4BldPdOL3S^lhZJZL|ficn7D$ zl7+lkg1m!(#XTekUvrKfneG~OYzX^0-Lp5WE$*R-iMkdB7MkzH)>gmks!`|F# zkq}9FZ&W4b&vw}AXRlb9XrV(C|08@=I7jT61T(u$3gjAdSMs7EgRoeloF1c|8)On9 zm2Z--GQ{eVZ6Lmu2=Ds2NcS;>D3qR5lgN^2lziOvZLtQV*cLT!K##u$%g3-tGQ?n;uiZJp$)5Y0^@-M~0G=Z58Xg&}K_TsMI=1t%><>9U ztaAoShKH%ejr|*e97)}5sfwv)sp!;|506c~O;txw9~d8(n6i{SGYcxzG5ut`P)z?1 zXURyhfa#awyJh__Us!_i0Mv%iXmc8R4f{1DXdVTpzl=XYz95*80gh!+PfW z#f|&>cKc%c@cjXSUVb)#Q6+>@pclfY7wPWVu$Dh}=UZ`W@wZiTXFlh5-nbokuEK|j zJ#6X7bS@KkQB2XxT>qZbCEh>vL)F83gsd-FQ>EkZf2Mnt+k#4tA4zBNby(}aVjIn*}imLaVz)mN$|D$;A-*Pm$IXap}{ zFBDvor;Vfia#7~83WvsJdL~OjuN04Fu5G?Uhuc%ml9_`X-E=sPCwxb;z2XK}N3X<3 z4A9N6qCE-^4OV+U(?!kdx<}Oty6|AR4ue3~Z^(U+{tc}%LA*jxBu9yhmdDPd_^pKE zw{=RBuAjY-&O}#tn7hMzR&7Y_huYVEkq6pa>1+u0YxEn@i>+g=%Fzqn)GO|px3d>B zAEzN4%9f_^bzIA<{XIFp4=m*^69W~(GuYBUsxE~IX&B3J8!Z*Rd?diW{U$5iNV^dq zhlf_y)apM-UdEZF?kh|y1!*3=h%nOeX}?Wx1iOh!;z_O(-FalDHTsh{F#c*>>OLkL zlTCmzxujLy{2^Ndt}$}Dc{7D+5w#5O=1Ym}rYwpcdhbkfxQ81I5~^Tj#>|`sGVgEt zS#ewW)j~*+C;!}@aXR~bD9RYh8AwX3Fs`lmG*;_pxiu@&r2U0cG}eU6SNfJUtp2&5 z%jQr}&x@XqX{W~X7BJIoSJc#YJS=Repg{9xsQI1LVoX=h%d*`kbq*YMsn1QxuIVFI zX2CbOQf-Ky#P?+f6*{%c^X7&&BY}G;_{79d{hIELHON~2+DjtEvZ-93ncMs4XWUpdjGVzBYNy z72)ANRo>L}ksc1a8+R3==(&^?;xUo6k?C9Q`Q!$3i~7=6iJ8K{fCb}U@A|(@ee0XS z2G{J-twB&XhZLK9h*AW2p7J{q`PW+lPT-k-Z5NzR%BIjUTUKL#~6l&+nhD+$({4W7Fq6#GfBnun#z zWy-o}&(k?bxs}J7Bc*4<{6QIF_tBctAbB|W$hCRI`^Ui#Y3p1RiQK-^!KGBmfyiuXO)i4@Yw^~X4`>pmMmmu`pBF!%-`Y2 zxgp(N-4Rh8(YOShpdcR;FKPREf683Z$0GKDZnW87)S7q6%FOBf@xuX&ld(<4!`OkQ zGF0)77rCUkT(Lv6L$IMArMy*mQrbTmM6M;*&vcLkvEUQ6Gvl4XBZrQn??x1rmB6zT z8OocTW3i#!+vne=kOKtv2mt)W03aj`01p42^XmC8DhmL=Z2>?r0|2-@l5N^_0Dx9m zPfPu=-^4o3%6CEmq@&6wF>9DLWcc^5U^X(-pp3P7#}?(u7r`xx6?Gw3TXbnk+j`{2 zN_J@v-=X$PNY(_RsQ-fy@PFffq$uhTuxw)Yir~!{k^KcIq~2?$Nk7J4Dt4eif#XMa zaA;uiZshSZ!(?4ON+n|$`0PN$<&|1aLb6jb8b(m_QA<{l=K|poA_oUNTIwLJE^AE5 zYnOs#L>yQvMOc!R78>|h5`V3As=84VTQ{Q)!qY=(q38l`OK-_4!8&b>!I0toZNI)N z;Z>SP>X=W%hNG(zy3l^*!IhW@Fi$?teb@*)x3UL)+wZM}tc#v6Y3!6fT@=@c?|KNw z2nVu!&GlylpmJ};$F({BJzy2;(scQogr)m3vmJ@O*D6m+MHX zjLg)0B|W|_vW}u~S*`w1F2w7~a&lw1!oILp9kkHR=5i`~ZfPtGyx^GLF7nXD8ibE# za!S)4uj6`}gL8ylTaETcyc$jZJgSZIg!4X)Xs_->yTzz2fMH*p*CZ+}2QUqadZWoR zuP}*t1nr2qqpZz0KqmR@OstAq&~xom>h5%bC|$>={K>?>LI|xxQjN_GLbWWr&s|?b zOii1NMR6-h_Ik9&J0+rb!$_2RFGzcpVR~SminghSJUVR#=vxt6?_t1 zM9NR+D7KsoB-7Y^=#jlvow7d>-^!|uG>nlO8epvkf1(>Q99H_=mc(14fe9q&4L_72 zSE^wiXuBXLCf0bNEuLbNYhf|1Dn?cKd6JE{q>SzE7VyRuO$;9?FS zjQoOy@nbAqEUx!XQ6uQp)&zP&?CP!wZ?K0+KCYB~UXX;NZ%W%uFU0!SRRpR?#>#2` zL?cD`v*>4P5g`AZl2tpPM_#|v_<<9g{3%xUVfbV_DQz%%!Aw-Y6IFSWOS@eXP)#cg z^n~waTX2ZAHjK67W(5_4sr<|jj-(MqXje-%{K3nBAPNyls?3WJNV; z!b76bt2#D;vHXi;Wi-Y!h%2Q=kxr9oe`)EQH*jh1@f?rB0A8;`PLAY{+ o82*!I|Ay9o<9`yZc!vx~Ihrj}U#yck4_!b{+fb`a!#4E)0P#J?z5oCK literal 0 HcmV?d00001 diff --git a/frameworks/base/resource/binary/rate_star_big_off.svg b/frameworks/base/resource/binary/rate_star_big_off.svg new file mode 100644 index 00000000..8c38fa61 --- /dev/null +++ b/frameworks/base/resource/binary/rate_star_big_off.svg @@ -0,0 +1,10 @@ + + + + Ranking/star_enabled@1x + Created with Sketch. + + + + \ No newline at end of file diff --git a/frameworks/base/resource/binary/rate_star_big_on.png b/frameworks/base/resource/binary/rate_star_big_on.png new file mode 100644 index 0000000000000000000000000000000000000000..8813f78144af9bc55361cce2a9952ee356a3a8bc GIT binary patch literal 4563 zcmY+GcRbq2czyi55w0Fj03c)@V;XFk zPPnPOOn5>MSD!n0o9z(=@bTAB3^7=hFr)zv&lo_e{jqUWaAp?90*HBE^fVO&6Sq<< z+~%y75ce?A+(vGXXR-2KMCktR?)mI_$7aFi#Tas&9>oX}O5G@N1LRF&6&2=qQj8#d zpE^;*ED$^?FT)0|$C<1j01ilyA&~(MDi=ic-T*P+Gc7Iv8vK48({3ze0q~{*cs|f3 zH4)kb7!o%dVg`m-fdY4pvKwFh$S1Z9LIhxOnWNeIlhVv>nV;E%e;wdgZmslqyj6Dq-(f&duJILQ z=kqf`Hc6mkGyuSUHu3RFP6fTWvG#ofvFWk@yT9bh{lJ?~`PSj`RmV$WQh>p5e1HDY z`uYrs&md7lV7Gg~Frrs5FeARhx zHBtFm`nxwiG4kYZd$kaH0Qlyq=GJ0MV=jFiyn^aXk~eXr>XKfBP5!IF*r%7tcP3V3 z-r9(=h=>#E zEGL5i)ySi}FWIS60S0FoDI@^^(!0-6R7Ht^(d@ES0OF9nn;BMNj`Upv341YP-gk!PkCJk< zn|P2-)V2@!hCORx4{OJBN>a5U3MPkJ3UQ2%$#Z;T6yV%sQa%TWOd6_;cPow=#@9dO zS4Lc|?v`o`;s15lk6Av+M)ePRVTe~M;Ub|!M=~R-5k@ja9H{!fiibU6pxA#RK!)BH zl~v+C!QRZRglZ|NoY4Of7yv{hBs-xdB%?XG zPY??Sw$NdpLV!3C#k50V_l%*(BN~m?v4mP`R0;0zH-p+KEGT21N%q|4ORq9&77PWQ z^@TVpyhU4T*9h(1;=WZVXm^{A=}|gFfbLV;njzIKL9~=EwXQp40dlv@v`l%D!L>kIR`%!Y zN%tS*Tbo-kzk_LLpVP(+LL7zJ+}Xm|Dp_0EByyn@WM8s#hs^HHN^#^m=g{YPn_G&U zh=jAG4udikGU1t#nVYZ8%>B((rjf6y&EA;Pzp;ZyRA`$w8Lw7TPThPnUCm|wq56K^ zm`Sinit#w?QEAts%jiE&w2jYWwTquaO3j>F2iTHs-5ij5a%ibO;|C|%7IV)raI|hb z+kpm=opS_9gh5R;{9hw#5UB{vhVLj5-N0M?f&AA3y|G(kv}0j+N$#rLeLLe;i>QsP z{bxROzH8ob*Khac?)LnCpbthBBZfIv@KhiKQnuf3hqcGHF9eSNRQ}?$johL<9zLeq z`Zl3+?D@O&82od8W`Ba`pL;SC_t9(~l5$Q5BWR}|?m4b)69><}S25yT+Ee>nN+)zn zZ?_5Uy>MQY4FM}7YP>leYh;$5EV?T?IJ!zLl=YSMuXWuS&2Y~{v`;jD2^bj}5?id9 ztNFB(EI(b~Ug*&EwPWETDYjgzpkFWXe&S%(d{#J)EXyE^P?G~!h9lv}@Yx#O8Jlgf zZO<7C4`U9Ce42cPd|XRaZGLTEP`>9f^9pmyoyj}Lre5=sI~O}tJ9#@dcI8hTP6SUp zPsX`MI6+)94+0*9`vnA!1bO&$Y?pnP>87_zKtmLN4z;V5YOlMWZSE>ulDb^W5zKc)q+W~vgf*K6_y!QfW@^@~&Ye4x4^ygNzJIXb*5ViB zT;t|p;^DND--c>?-4+${;#BJ}8x+7KK)D;g);HIu6u;_Eyy=lAU9gsCmKESsx4u~N z9=x$NhARwKw34+#hs(w0fU+A^)?;|pjU`x()+@aXxR`!D%a1kE>MBVpfxT^Q(^E{_ zz`!$4u>+(6ImiC_i$N;W6vs5$w)%WXN`HX^$f>IM&*Q{pI z*?XQ2qDnNxn$M|xcYgO=65;Iv|t|1z2A(L61@d@Wu_xs^{Cl-gy$L9NP+0)kWry}6YM>Re* zRduHg+HD&v7KV?e!;g`k^Ycr3t;4(9knOTrq?(czd}bJZ#nY$E&g4#op27+^4O_6x$G_ z=%hk-V9ni9&tj!lo%=stmSVW8q8GD+@7( zDoRtii%0_WBG=s(X4~nkF?8!YI5wdfCV27jCOXwSCn_&C#Y0$|o zIGAb=x@a4k5>kKBHGlb&{15%lr_EPypI|-lr}kL;@m?$XeLBh)g;yEZUtWBl)EUv4 z=GW#=O2P2(aL}@M{(3x?{=KrXl4*Q65`K-`_J6ave7SP2KW=$3cR+oXINn`{tUmJF ze^XtrFvvg1(=morI;^;;9b1UlZ`*HQ9_-}F6~0itGCrF4<1|?L*@&RL8GdykL3nm_ zE;v~v{daBhIzdbf03cKl08lXiaCZIIxBhO?djRm$9sm?_008Wr_NZSQ0LTGdO*ONS z`5g>0&fJ`HP{n&um>N1YHJ}%7Hc~TXHX?QmcX7$W<$r3tsz!Uj?$oHH700SmFT5n) zPASXe6YlvWkWljYqPKjyaU#2=>V3w0*?N^Rwme7ezr+7F|9N2mX)!|v`}B=1b|;UA zfQX&t;E;)EHA5x6k?0W;c2v=B(G5J@mOXy5U>z&1+Kspl5^5l}e2wFW0XK+STMw_P zQEDKqshbT3Nt%pJRC9=S&1w&A<`8Q(DjPAFNVcQbohCuO^%*7WzLT$dU3Qsb!y(1q zj0*%Z@pR!#o%L#eyzC~xl*5exuBJTzDGa;TaFJ-aY=`$Nq__wRpYUf{hR|oe-p)?a9T16Mk;wk+m+NBoyH^pFF5JFr7W6wE0aGB7 zc2ZoX2{VjeVUv#HmMpB-8F3uY6H43Xo;6P)wj&*bGFsR>x10SwT9kfaQQzEd-##5ZmK?^pmG+$#@V52_!mca1V8vGuT1rmzJr_w&Y?Yaj-4ib4`G*?*Ev=55*2#2MD@<8tb=SM zNiXe3SVmSS&TPc#ve0ez^Bn!67TTH(*};`Btev%l)f16nGZ+e|T67899f~LH`l8Rt za%dKbI8Cgx`(Suw=*q`hUyRHWclncjDN;+ag8CMTocbtv>>q?mm!)CBVt58`D_c5k zDBH%jXD%4U0~tii^&bH$^iE$nZ!oJRg-w(Mk4ZuiCJ6cu&*_6|^){*AU5zm6P;0wp zyaAN^YFZcES6+?&5ak|ajp}AT@smcll`~0L*%nBj6C(nb+o>|wnCw{(()45f0{xDI zv6grTd=VAn8bt$Z8|Ue#cRlYFsjr27x;uSn?_{ru+S43Vy-}gz$#Rzo?0;jzej+~D zL2te9rxsx~+eF{CboDhGq#HEXKo}F~U22Y>>=Rk|aPhjqqNG`eawP9CvGpVq&-A*7@70JOx$GnJogpd z?4Uc$M!zDPoIPJl%C#z;Q1Y09PzrU(tQH|XlLiSYY7>z_cu2zISHc+uN9AprK!ThK z=slaGreW4qNCpB5gjQN+EVU$qv|2Gi)v3bk6J$-#`1cxu^+z@fl2>&>w%{jHpYIMF zdA7iY?D1-NOX%h(=rAshtv@nCZBTFJIpB7yE^4xVh!$VUi0@f7Chb-gK_>$AUOPb`8d(# zVm68zl_Gk0vie$B2^G)C6;`{eWp~G6*)zwPJ5f@Utrr10jC2|bgCRgytwD4ogt>t^ z_<%3Fq`t}^u>9O+AX!eKXvQ4Yvlso3Lzb@M*i%!I;d1Wu!0%^zZI^ArdMZ$%n0qdL zWmoK!9&yDr)5@^nH!1pVu@baZpynHFNxAP${@q z`y6M>?l{MB|Ba^+!H_cMVf-W&hwu)`mn3*{RnJnx*VtTt6R6u%AgFwI6Qn=?wSxPo zB^XAjWIV~7$9^2gwG7F)Z+Sy8C|V6K3C$W}#Oj>to4QSLct9db-i~tOIkKrRi?gzM zRqn?}9lfY(Ri2R#x&NSeAmDE(Bvx)jCMFawpOBlt_GMN!4XhQSmMI?ff0h{t91;yHv$N&HU literal 0 HcmV?d00001 diff --git a/frameworks/base/resource/binary/rate_star_big_on.svg b/frameworks/base/resource/binary/rate_star_big_on.svg new file mode 100644 index 00000000..5dd4faf1 --- /dev/null +++ b/frameworks/base/resource/binary/rate_star_big_on.svg @@ -0,0 +1,9 @@ + + + + Ranking/star_activited + Created with Sketch. + + + + \ No newline at end of file diff --git a/frameworks/base/resource/binary/rate_star_small_half.png b/frameworks/base/resource/binary/rate_star_small_half.png new file mode 100644 index 0000000000000000000000000000000000000000..d0a41a0f6724d77937962030e42ee5e83489738b GIT binary patch literal 3270 zcmV;%3_0_OP)KLZ*U+5Lu!Sk^o_Z5E4Meg@_7P6crJiNL9pw)e1;Xm069{HJUZAPk55R%$-RIA z6-eL&AQ0xu!e<4=008gy@A0LT~suv4>S3ILP<0Bm`DLLvaF4FK%)Nj?Pt*r}7;7Xa9z9H|HZjR63e zC`Tj$K)V27Re@400>HumpsYY5E(E}?0f1SyGDiY{y#)Yvj#!WnKwtoXnL;eg03bL5 z07D)V%>y7z1E4U{zu>7~aD})?0RX_umCct+(lZpemCzb@^6=o|A>zVpu|i=NDG+7} zl4`aK{0#b-!z=TL9Wt0BGO&T{GJWpjryhdijfaIQ&2!o}p04JRKYg3k&Tf zVxhe-O!X z{f;To;xw^bEES6JSc$k$B2CA6xl)ltA<32E66t?3@gJ7`36pmX0IY^jz)rRYwaaY4 ze(nJRiw;=Qb^t(r^DT@T3y}a2XEZW-_W%Hszxj_qD**t_m!#tW0KDiJT&R>6OvVTR z07RgHDzHHZ48atvzz&?j9lXF70$~P3Knx_nJP<+#`N z#-MZ2bTkiLfR>_b(HgWKJ%F~Nr_oF3b#wrIijHG|(J>BYjM-sajE6;FiC7vY#};Gd zST$CUHDeuEH+B^pz@B062qXfFfD`NpUW5?BY=V%GM_5c)L#QR}BeW8_2v-S%gfYS= zB9o|3v?Y2H`NVi)In3rTB8+ej^> zQ=~r95NVuDChL%G$=>7$vVg20myx%S50Foi`^m%Pw-h?Xh~i8Mq9jtJloCocWk2Nv zrJpiFnV_ms&8eQ$2&#xWpIS+6pmtC%Q-`S&GF4Q#^mhymh7E(qNMa}%YZ-ePrx>>xFPTiH1=E+A$W$=bG8>s^ zm=Bn5Rah$aDtr}@$`X}2l~$F0mFKEdRdZE8)p@E5RI61Ft6o-prbbn>P~)iy)E2AN zsU20jsWz_8Qg>31P|s0cqrPALg8E|(vWA65poU1JRAaZs8I2(p#xiB`SVGovRs-uS zYnV-9TeA7=Om+qP8+I>yOjAR1s%ETak!GFdam@h^# z)@rS0t$wXH+Irf)+G6c;?H29p+V6F6oj{!|o%K3xI`?%6x;DB|x`n#ibhIR?(H}Q3Gzd138Ei2)WAMz7W9Vy`X}HnwgyEn!VS)>mv$8&{hQn>w4zwy3R}t;BYlZQm5)6pty=DfLrs+A-|>>;~;Q z_F?uV_HFjh9n2gO9o9Q^JA86v({H5aB!kjoO6 zc9$1ZZKsN-Zl8L~mE{`ly3)1N^`o1+o7}D0ZPeY&J;i;i`%NyJ8_8Y6J?}yE@b_5a zam?eLr<8@mESk|3$_SkmS{wQ>%qC18))9_|&j{ZT zes8AvOzF(F2#DZEY>2oYX&IRp`F#{ADl)1r>QS^)ba8a|EY_^#S^HO&t^Rgqwv=MZThqqEWH8 zxJo>d=ABlR_Bh=;eM9Tw|Ih34~oTE|= zX_mAr*D$vzw@+p(E0Yc6dFE}(8oqt`+R{gE3x4zjX+Sb3_cYE^= zgB=w+-tUy`ytONMS8KgRef4hA?t0j zufM;t32jm~jUGrkaOInTZ`zyfns>EuS}G30LFK_G-==(f<51|K&cocp&EJ`SxAh3? zNO>#LI=^+SEu(FqJ)ynt=!~PC9bO$rzPJB=?=j6w@a-(u02P7 zaQ)#(uUl{HW%tYNS3ItC^iAtK(eKlL`f9+{bJzISE?u8_z3;~C8@FyI-5j_jy7l;W z_U#vU3hqqYU3!mrul&B+{ptt$59)uk{;_4iZQ%G|z+lhASr6|H35TBkl>gI*;nGLU zN7W-nBaM%pA0HbH8olyl&XeJ%vZoWz%6?Y=dFykl=imL}`%BMQ{Mhgd`HRoLu6e2R za__6DuR6yg#~-}Tc|Gx_{H@O0eebyMy5GmWADJlpK>kqk(fVV@r_fLLKIeS?{4e)} z^ZO;zpECde03c&XQcVB=dL;k=fP(-4`Tqa_faw4Lbua(`>RI+y?e7jKeZ#YO-C z0rN>jK~#9!?3X`F96=a|pS{cJZILRIG?`Q>E%FCKtn9`{gjks>_!WY zLqcGi)D~7279rILf!hlt#*BKaW04V-b2T^TF1LYuVOe%yb|2pN{r%qA$T>%oqD8}E z3iRIr-Kpd)sq99J2f5WE582k;=+%&+R7SuaaIYyPTL2yd?KsJ1ngH~=ScN74Ej0%y zmGi)(qDbN->r663t7YPuB+zonT09w`R6g_Sy5endl8xSI zL&|&x_5*h0R*Td6j4_oGm@9b6zdqK9ldN4I(BGp*tFZScu;bNpsUmlq*%oT?uZEuQ z19yRK;24-KF}yBtRDFh0`M|4fI0nEM;7>_*0A}JOYt>P*)sl?v0#8xqgVo{~=y|^x z9uwU-QA7TM72NK-I*>0Ov@L)_?A_VE_OC07*qoM6N<$ Ef*T+?tpET3 literal 0 HcmV?d00001 diff --git a/frameworks/base/resource/binary/rate_star_small_off.png b/frameworks/base/resource/binary/rate_star_small_off.png new file mode 100644 index 0000000000000000000000000000000000000000..e17ece8849a72b607364addc8ca54d6b053e602e GIT binary patch literal 3120 zcmV-04A1k4P)KLZ*U+5Lu!Sk^o_Z5E4Meg@_7P6crJiNL9pw)e1;Xm069{HJUZAPk55R%$-RIA z6-eL&AQ0xu!e<4=008gy@A0LT~suv4>S3ILP<0Bm`DLLvaF4FK%)Nj?Pt*r}7;7Xa9z9H|HZjR63e zC`Tj$K)V27Re@400>HumpsYY5E(E}?0f1SyGDiY{y#)Yvj#!WnKwtoXnL;eg03bL5 z07D)V%>y7z1E4U{zu>7~aD})?0RX_umCct+(lZpemCzb@^6=o|A>zVpu|i=NDG+7} zl4`aK{0#b-!z=TL9Wt0BGO&T{GJWpjryhdijfaIQ&2!o}p04JRKYg3k&Tf zVxhe-O!X z{f;To;xw^bEES6JSc$k$B2CA6xl)ltA<32E66t?3@gJ7`36pmX0IY^jz)rRYwaaY4 ze(nJRiw;=Qb^t(r^DT@T3y}a2XEZW-_W%Hszxj_qD**t_m!#tW0KDiJT&R>6OvVTR z07RgHDzHHZ48atvzz&?j9lXF70$~P3Knx_nJP<+#`N z#-MZ2bTkiLfR>_b(HgWKJ%F~Nr_oF3b#wrIijHG|(J>BYjM-sajE6;FiC7vY#};Gd zST$CUHDeuEH+B^pz@B062qXfFfD`NpUW5?BY=V%GM_5c)L#QR}BeW8_2v-S%gfYS= zB9o|3v?Y2H`NVi)In3rTB8+ej^> zQ=~r95NVuDChL%G$=>7$vVg20myx%S50Foi`^m%Pw-h?Xh~i8Mq9jtJloCocWk2Nv zrJpiFnV_ms&8eQ$2&#xWpIS+6pmtC%Q-`S&GF4Q#^mhymh7E(qNMa}%YZ-ePrx>>xFPTiH1=E+A$W$=bG8>s^ zm=Bn5Rah$aDtr}@$`X}2l~$F0mFKEdRdZE8)p@E5RI61Ft6o-prbbn>P~)iy)E2AN zsU20jsWz_8Qg>31P|s0cqrPALg8E|(vWA65poU1JRAaZs8I2(p#xiB`SVGovRs-uS zYnV-9TeA7=Om+qP8+I>yOjAR1s%ETak!GFdam@h^# z)@rS0t$wXH+Irf)+G6c;?H29p+V6F6oj{!|o%K3xI`?%6x;DB|x`n#ibhIR?(H}Q3Gzd138Ei2)WAMz7W9Vy`X}HnwgyEn!VS)>mv$8&{hQn>w4zwy3R}t;BYlZQm5)6pty=DfLrs+A-|>>;~;Q z_F?uV_HFjh9n2gO9o9Q^JA86v({H5aB!kjoO6 zc9$1ZZKsN-Zl8L~mE{`ly3)1N^`o1+o7}D0ZPeY&J;i;i`%NyJ8_8Y6J?}yE@b_5a zam?eLr<8@mESk|3$_SkmS{wQ>%qC18))9_|&j{ZT zes8AvOzF(F2#DZEY>2oYX&IRp`F#{ADl)1r>QS^)ba8a|EY_^#S^HO&t^Rgqwv=MZThqqEWH8 zxJo>d=ABlR_Bh=;eM9Tw|Ih34~oTE|= zX_mAr*D$vzw@+p(E0Yc6dFE}(8oqt`+R{gE3x4zjX+Sb3_cYE^= zgB=w+-tUy`ytONMS8KgRef4hA?t0j zufM;t32jm~jUGrkaOInTZ`zyfns>EuS}G30LFK_G-==(f<51|K&cocp&EJ`SxAh3? zNO>#LI=^+SEu(FqJ)ynt=!~PC9bO$rzPJB=?=j6w@a-(u02P7 zaQ)#(uUl{HW%tYNS3ItC^iAtK(eKlL`f9+{bJzISE?u8_z3;~C8@FyI-5j_jy7l;W z_U#vU3hqqYU3!mrul&B+{ptt$59)uk{;_4iZQ%G|z+lhASr6|H35TBkl>gI*;nGLU zN7W-nBaM%pA0HbH8olyl&XeJ%vZoWz%6?Y=dFykl=imL}`%BMQ{Mhgd`HRoLu6e2R za__6DuR6yg#~-}Tc|Gx_{H@O0eebyMy5GmWADJlpK>kqk(fVV@r_fLLKIeS?{4e)} z^ZO;zpECde03c&XQcVB=dL;k=fP(-4`Tqa_faw4Lbua(`>RI+y?e7jKeZ#YO-C z0bNN%K~#9!?3inBf-n?@pM#)XvSlvp|Np^lx?2{Cu?VXr=3$1DU{j0RkwF3M1FO zn*o`~y~%*?BKIZ%Dgu2h5B0YgiLW_nV=T3dh2ixJygKKa*a*ppFx~Sd#WDx%M;uw7 zz#-K#fDN$KE6 zQO+H#1)j9ZHnFy)096|PkH~ze)xt+TC+e$)EMGqspap1T{S5&BQDreEmd33B0000< KMNUMnLSTZA4e$^E literal 0 HcmV?d00001 diff --git a/frameworks/base/resource/binary/rate_star_small_off.svg b/frameworks/base/resource/binary/rate_star_small_off.svg new file mode 100644 index 00000000..4d1f243d --- /dev/null +++ b/frameworks/base/resource/binary/rate_star_small_off.svg @@ -0,0 +1,10 @@ + + + + Ranking/star_enabled + Created with Sketch. + + + + \ No newline at end of file diff --git a/frameworks/base/resource/binary/rate_star_small_on.png b/frameworks/base/resource/binary/rate_star_small_on.png new file mode 100644 index 0000000000000000000000000000000000000000..b539728040558f886c7b7991efad0454a61a092f GIT binary patch literal 3240 zcmV;Z3|I4sP)KLZ*U+5Lu!Sk^o_Z5E4Meg@_7P6crJiNL9pw)e1;Xm069{HJUZAPk55R%$-RIA z6-eL&AQ0xu!e<4=008gy@A0LT~suv4>S3ILP<0Bm`DLLvaF4FK%)Nj?Pt*r}7;7Xa9z9H|HZjR63e zC`Tj$K)V27Re@400>HumpsYY5E(E}?0f1SyGDiY{y#)Yvj#!WnKwtoXnL;eg03bL5 z07D)V%>y7z1E4U{zu>7~aD})?0RX_umCct+(lZpemCzb@^6=o|A>zVpu|i=NDG+7} zl4`aK{0#b-!z=TL9Wt0BGO&T{GJWpjryhdijfaIQ&2!o}p04JRKYg3k&Tf zVxhe-O!X z{f;To;xw^bEES6JSc$k$B2CA6xl)ltA<32E66t?3@gJ7`36pmX0IY^jz)rRYwaaY4 ze(nJRiw;=Qb^t(r^DT@T3y}a2XEZW-_W%Hszxj_qD**t_m!#tW0KDiJT&R>6OvVTR z07RgHDzHHZ48atvzz&?j9lXF70$~P3Knx_nJP<+#`N z#-MZ2bTkiLfR>_b(HgWKJ%F~Nr_oF3b#wrIijHG|(J>BYjM-sajE6;FiC7vY#};Gd zST$CUHDeuEH+B^pz@B062qXfFfD`NpUW5?BY=V%GM_5c)L#QR}BeW8_2v-S%gfYS= zB9o|3v?Y2H`NVi)In3rTB8+ej^> zQ=~r95NVuDChL%G$=>7$vVg20myx%S50Foi`^m%Pw-h?Xh~i8Mq9jtJloCocWk2Nv zrJpiFnV_ms&8eQ$2&#xWpIS+6pmtC%Q-`S&GF4Q#^mhymh7E(qNMa}%YZ-ePrx>>xFPTiH1=E+A$W$=bG8>s^ zm=Bn5Rah$aDtr}@$`X}2l~$F0mFKEdRdZE8)p@E5RI61Ft6o-prbbn>P~)iy)E2AN zsU20jsWz_8Qg>31P|s0cqrPALg8E|(vWA65poU1JRAaZs8I2(p#xiB`SVGovRs-uS zYnV-9TeA7=Om+qP8+I>yOjAR1s%ETak!GFdam@h^# z)@rS0t$wXH+Irf)+G6c;?H29p+V6F6oj{!|o%K3xI`?%6x;DB|x`n#ibhIR?(H}Q3Gzd138Ei2)WAMz7W9Vy`X}HnwgyEn!VS)>mv$8&{hQn>w4zwy3R}t;BYlZQm5)6pty=DfLrs+A-|>>;~;Q z_F?uV_HFjh9n2gO9o9Q^JA86v({H5aB!kjoO6 zc9$1ZZKsN-Zl8L~mE{`ly3)1N^`o1+o7}D0ZPeY&J;i;i`%NyJ8_8Y6J?}yE@b_5a zam?eLr<8@mESk|3$_SkmS{wQ>%qC18))9_|&j{ZT zes8AvOzF(F2#DZEY>2oYX&IRp`F#{ADl)1r>QS^)ba8a|EY_^#S^HO&t^Rgqwv=MZThqqEWH8 zxJo>d=ABlR_Bh=;eM9Tw|Ih34~oTE|= zX_mAr*D$vzw@+p(E0Yc6dFE}(8oqt`+R{gE3x4zjX+Sb3_cYE^= zgB=w+-tUy`ytONMS8KgRef4hA?t0j zufM;t32jm~jUGrkaOInTZ`zyfns>EuS}G30LFK_G-==(f<51|K&cocp&EJ`SxAh3? zNO>#LI=^+SEu(FqJ)ynt=!~PC9bO$rzPJB=?=j6w@a-(u02P7 zaQ)#(uUl{HW%tYNS3ItC^iAtK(eKlL`f9+{bJzISE?u8_z3;~C8@FyI-5j_jy7l;W z_U#vU3hqqYU3!mrul&B+{ptt$59)uk{;_4iZQ%G|z+lhASr6|H35TBkl>gI*;nGLU zN7W-nBaM%pA0HbH8olyl&XeJ%vZoWz%6?Y=dFykl=imL}`%BMQ{Mhgd`HRoLu6e2R za__6DuR6yg#~-}Tc|Gx_{H@O0eebyMy5GmWADJlpK>kqk(fVV@r_fLLKIeS?{4e)} z^ZO;zpECde03c&XQcVB=dL;k=fP(-4`Tqa_faw4Lbua(`>RI+y?e7jKeZ#YO-C z0o6%FK~#9!?AO0*6j2bs@y|s)1VIr+2`(ic1A8}5sfon|>HOOq{l*QE+C<5H$y$L3Y* zU$H}op9USFnJzGoF)74(A6PulVTHCC1XtC$kvQpYV^!c?}_Dl#MGN!iD& zalXYlA>QlZe+sv-6Q8rRtqd|k4{#R~Jz?6>TEqkv@d`i79nkW<+iF6r2+-(lKLYy4 a@@oL-?Tk7hwP7Lv0000 + + + Ranking/star_activited + Created with Sketch. + + + + \ No newline at end of file diff --git a/frameworks/base/resource/binary/right_arrow.svg b/frameworks/base/resource/binary/right_arrow.svg new file mode 100644 index 00000000..c299b87a --- /dev/null +++ b/frameworks/base/resource/binary/right_arrow.svg @@ -0,0 +1,13 @@ + + + mdpi/画板备份 + + + + + + + + + + \ No newline at end of file diff --git a/frameworks/base/resource/binary/search.svg b/frameworks/base/resource/binary/search.svg new file mode 100644 index 00000000..95685e5a --- /dev/null +++ b/frameworks/base/resource/binary/search.svg @@ -0,0 +1,13 @@ + + + ic_search + + + + + + + + + + \ No newline at end of file diff --git a/frameworks/base/resource/binary/select_arrow_disabled.png b/frameworks/base/resource/binary/select_arrow_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..79a909f28d9c1f73ffb223d874e456761b0d14c0 GIT binary patch literal 384 zcmV-`0e}99P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D0ToF^K~zXf&5}C~ z!Y~j-7buaaDc}&?{{j?Lq@qs+qCpf0h0m;m!w~YZoy72@LEef{=8Z&Tg)ESNARXf; zLC)s!pMtz$x_lw!jvSFC@<7&zP8m$sLW=ci ej|6%1M&t?L7+cH^Bc~t$0000Nn{1`ISV`@iy0XB4ude`@%$AjK*7VFE{-7{-e)fv@*OhZaeL^IBeQh*ql`IC zt;Jusbk3Yf2v61cr0tuuyY|w0ufQc~Ke|e$?&UYC^|m~H>}SIHm(pK!gPY%|Zq`fl z`M)+lqGV#^bmL|J&2AsQ{G{#Fw=D(Esg*`|10?5N;1zwDd6if6Y35|a%3LvL!^b=9K8JwbVeoYIb6Mw<&;$VQ?tT*h literal 0 HcmV?d00001 diff --git a/frameworks/base/resource/binary/semi_modal_bar_down.svg b/frameworks/base/resource/binary/semi_modal_bar_down.svg new file mode 100644 index 00000000..3cc76601 --- /dev/null +++ b/frameworks/base/resource/binary/semi_modal_bar_down.svg @@ -0,0 +1 @@ +ic \ No newline at end of file diff --git a/frameworks/base/resource/binary/semi_modal_bar_middle.svg b/frameworks/base/resource/binary/semi_modal_bar_middle.svg new file mode 100644 index 00000000..ad44994a --- /dev/null +++ b/frameworks/base/resource/binary/semi_modal_bar_middle.svg @@ -0,0 +1 @@ +ic \ No newline at end of file diff --git a/frameworks/base/resource/binary/share.svg b/frameworks/base/resource/binary/share.svg new file mode 100644 index 00000000..644a121b --- /dev/null +++ b/frameworks/base/resource/binary/share.svg @@ -0,0 +1,13 @@ + + + ic_share + + + + + + + + + + \ No newline at end of file diff --git a/frameworks/base/resource/binary/show_password.svg b/frameworks/base/resource/binary/show_password.svg new file mode 100644 index 00000000..11f15d68 --- /dev/null +++ b/frameworks/base/resource/binary/show_password.svg @@ -0,0 +1,15 @@ + + + ic_eye + + + + + + + + + + \ No newline at end of file diff --git a/frameworks/base/resource/binary/stepper_back_arrow.svg b/frameworks/base/resource/binary/stepper_back_arrow.svg new file mode 100644 index 00000000..a8f582b8 --- /dev/null +++ b/frameworks/base/resource/binary/stepper_back_arrow.svg @@ -0,0 +1,16 @@ + + + ic_arrow_left + + + + + + + + + + \ No newline at end of file diff --git a/frameworks/base/resource/binary/stepper_next_arrow.svg b/frameworks/base/resource/binary/stepper_next_arrow.svg new file mode 100644 index 00000000..ea38d3df --- /dev/null +++ b/frameworks/base/resource/binary/stepper_next_arrow.svg @@ -0,0 +1,13 @@ + + + ic_arrow + + + + + + + + + + \ No newline at end of file diff --git a/frameworks/base/resource/binary/translate_c2e.svg b/frameworks/base/resource/binary/translate_c2e.svg new file mode 100644 index 00000000..93fa1215 --- /dev/null +++ b/frameworks/base/resource/binary/translate_c2e.svg @@ -0,0 +1,13 @@ + + + ic_translate_c2e + + + + + + + + + + \ No newline at end of file diff --git a/frameworks/base/resource/binary/tv_rate_star_big_half.png b/frameworks/base/resource/binary/tv_rate_star_big_half.png new file mode 100644 index 0000000000000000000000000000000000000000..29b7d09b9f9f1824e6387edba040e9f3290a008b GIT binary patch literal 2292 zcmcJRi8~XF1IL+7YrG+2Bgb45qnxkIHOyRP=FBnaHIXcGixr}XG*?zsi;)x>V!1`^ zb>C9W9g|21k-Ywh-|u-o-|y!y_&(1!#oo^HFNh?Bhll4cYb&h7p{a+71M?sDJat;( zP`sfImS#NVeNsz2Jm7L`tf^BJ@5*(+s|LI7jR~otLCZ@DY>) zA2H%uAD^=>L_XP^H5C<-yo$qz{Gk8vKAU!2q=4|F0FHtE14e<9*-ugH!%b5fpvK1f zDx+cDVdv2xGMYmiCK7*+)c>S7bBOBiFaX8>2Ls6Xd0UD5UwTRPQus^;tlLbjxOcw5 zm>fG&bfr1CVr~Sc_(GYUwxE|O>Hq3&fN)7hyFK7vJuQ%Czu>*H@4Xf%te1oaFq2mv zHZOub*NyYJ;MOZC*EB?c+SlxgPGsM+S?RYUhl&DE(z69KZ#+!oSUM6WdM9*z%ropU zmu2|Y5mJi}mr8nS)&sU;7S?tmRp`&cKlj8=C|vGPJNin6&MzpvC!(ykIvX^z<1bVcSMEf9GU@69)bT+$MDw=BO8h3XOBFhed*L7; zz+m2(R&gQ}jErFev1wubYB8Q8dpSYzh$r_z0j%{)X#iCuz3aY>t2+ix@k$@_BgBjQ z%j1er;`W*wz96T|CMA^sn+Pi*DXx+W2sD=E-La|p!RB@s z#OjoR<^>m>9CA`A3UPUtTPlW|)CFbdItg|@+YU$djFXRbYe`%RtZds%ur7V1PR*Ni zt;s}9K%5;hWk!2hVqN}wIZ!Grs2FK7O?jyuCELyZJQ&dF){yZcnEpNN!Q`97;+8Z{ z9H)D{09_Lx{2{;V`^mPO4`HNUx3Wr{Sr;>E2Z7DfeVP%3Q~*jmY4PGvkWc;6(Wvr)KTUv~X#QXDjKDJN8T=u+U-I4bmbn>_%% z70UBYKe=f0hism15Rjxz8tdwe8hCkR@9D&ua*K1LGT_Casq<0F2oSKDo4k3EREO+; zrn@_?=TGdpAD+E!ZV0Q3;(X3scfdS~@ln*gGEWxNn&cB%=_3|I9h1TmM#lB;7FEqH zf@skwga?vV{nVEi>y%ZCPz*Bt_#5pmYmVMSNQq^Px5n_Q7*%2W3U#l`zqm%FrUXc`g&f)AtH$n5t=h7HGdtO`ex3zT`%1^vh*beG zbD0$#4FUwbuL&EjfoAorRTbv*Bkg!oashYO-?wpr*|AEIEwSp-lRVinqF;1029L6T zRI8Ue!-y#8)3~(Ug>Fa&pi(i`vvB(jbYVF{c4Lg~7&hF}J_;a)pf5W;4}&|Spt*6s zzfpXX;Lef8lDyBh-@q4^%LB>LEEBP+0B$Fx5IhKGZyZitZIH%{0*<6i=4Q;5{IWAt zg5Q%!HN((!LgiGiTWn1=3^cVeTy>W$Bx7FZt7MO@Wj$|AJ0~S0?R6Fkc=vd_bNYZ4 zeWs5M0x$ZyDF`hIq_a}JZaM;-_YA~yE5s}YAvwnH9~U0zyXxVE5GMHPYgFP=tSMGC z-((=b-oA0O(c<+bitQ;u7cl1&W1!e+!9kYZ9`%7j{O-;?=+7GrW)C(@1mHz2% zp7Cyvz?E-2O;NJ)c>Ly9d)6t9#4y0#S8v!uCEcCX*a3h|Q`Ryeo^sw@z;%*&lTUWl z%h%=Zt`QlOY~=^}bmxn|$I;{-jIDUJ7#O`l+wnE(!C&#!prMPA_<}oc%6e^NLnN_` zV_TRu1}9;~WnWU)CzdHJTqoPUUFV7IXd>ofn5 zVzLgZ%eN9+A|*mxnio$J)XUTW;o^ F@E<-^2_^sl literal 0 HcmV?d00001 diff --git a/frameworks/base/resource/binary/tv_rate_star_big_off.png b/frameworks/base/resource/binary/tv_rate_star_big_off.png new file mode 100644 index 0000000000000000000000000000000000000000..5b7a900b0010e984d320be5f99f99a873350c17d GIT binary patch literal 1806 zcmb`I?LQL;0LQo8^2w+WJ$O!1PV#UJ3B%@b8x51^cDO@X7?wQC6fTozjxcV>JcaWx z52X|CZYEDzp7z1G#Rz4wvGe*~-;3Yx`~45T>CR}|QxJIw001~;ZwJR5Gy8Z+C&i9` zC7XTu7(fEX)(X%#s>lTZ#D?wRmaY$hyfTSgSwmS85g`qSHOH~5!1Y3r$flVFvYmc~ zy)C<#LR*9JN0D2j$o{nMu6;~C&ppS!uXGf3mAmlxJ4LW60C*Ax07)eQ{ztV#vUS5* zHs^UOD=R5#iQkLRxx@aUM#B#`^*))yVLz{n=38sf%=`3c`C6(HxD7LlT3mbgXWi!JDN-^EB6pYe zdaTiuF&VpaR&EeG?KHs+0``ER!9al=WBVL{bO|kg3sRdZr1)whs|01K zwfqxh3QN~77Cu~Xw@T2F=ul_#$FmBb=<@K6^fDE8ezX9?Hx+yNGE@}?~h&LeKYuhiy-FtJ#_?+`Y_g|8b7`2_!38j77E*k0v z^?>>yIw{})ip=xfxcY7L{K2l=o~QU%-OZV2oxK3!BU>$W!<`=N$f&<5)PwAB9o_=c zzn?ywxui|m?Yp+B`rap8qh6vd2-v0j%w7Pazp&7%y9M>Y$7CFZ{cQhwFt#-}yQh!k zZ$r2tJ1cy=+%ywlmKT)lH#^x9u`r{*fA12cDdMn)>C% zUhj)*n0;Xb7s1u251hka2I6-O{=%wt(^Bt`@3m0E?UY@LY4|s0sO)hrnt#_jH6hJ( z1Yu6$OWSw?4N2tBUnS2N1}K>@>8=#6Gk-tmr*ehRkfOarJQ8))Tllwj_Tbsy$WM|6 z>=TJ;YDG=Z!t+yVRPTwrt`iyRsuG%kT6q{4V_rElM-JG|3kS{yHISeC6g2n3jq)8? zpt>|Q$nZe=%|U(7NiMjWKDT^>5N8}>FsUs)QQQ&l-Qh@vVND3$ICk~z&Z zLB;ciQnpi?ro_j#u8jIc9c2k8S@EL&7734nsDK}EE&>bRs<@`h%4L{|-3aL!AKuaD zr9Zw|;0LLz1Yr|X@hng~`2f*Jm-+J@@l_xLSO$aDTiKS~daHvP z>k8s;7X+qd17^1?bT}$ol5q(DQD&;_hKnqvu1fExHx19clse2GmoDAP?QgO>v+|_R z1Gjm*phWU}qEQ$F6mgYxsKk%8F&*Sjlz3GwifQEh=z5csBu^OQXZ>FMs3OB}n6K|a zPpynRa=XCK%v$Lc>n68e{MG+X1@i$<8(A>)Ftf%f@LQC8KXw^7;88Z-7M67d!Y2zm zw-AT3r7TnA`=)QzLCLP-@xB^g*z@iJDe|~kl*8iT%h;WG^ARs$n@z#FpxMjqrkxUQ z8#7m_F5zG1-#=g(DAyV8u$M#kQ6Q1^hm2?sPgVEHm}R3zRg1u0{cYMy%l`GOcGH>7 zAYz#A literal 0 HcmV?d00001 diff --git a/frameworks/base/resource/binary/tv_rate_star_big_off.svg b/frameworks/base/resource/binary/tv_rate_star_big_off.svg new file mode 100644 index 00000000..fae8bd82 --- /dev/null +++ b/frameworks/base/resource/binary/tv_rate_star_big_off.svg @@ -0,0 +1,15 @@ + + + + star_default + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff --git a/frameworks/base/resource/binary/tv_rate_star_big_on.png b/frameworks/base/resource/binary/tv_rate_star_big_on.png new file mode 100644 index 0000000000000000000000000000000000000000..b7d5a8b03a7b47aa18354dbdbabb1a07932a2b36 GIT binary patch literal 2215 zcmchZi9Zt#1IBHRt;sQ&D>2sEm}{e$YsgKQE2Btea)i{+k#oJ&gxoCAypvmsTp39@ za)v@N`8iwiVugzNdHoab`}sW2_xmS2PpXrHl?X%*!pFxaVqHxSaJj z;z)p-&Q@l8^`r9N`1ruSHs+?T(SZMyc!j_$GVWPt4Kp<7tdCu z-dFJ!&k*z0suGv5N#|yRE`YBwv(a(_z#yihv6*nt>Fyp?xp8_G6iZY=gY#OJbZ0e+ zABVihvjQBVB6nw($-jn2hevt;%pY-m_%ovGF@kaJ zo2j|tpav-&sEFLV%@b-=$a<~8vf8&if)j93T91Ku zt$MfSFEL|wSaM_d7u2rQY(Hv{Y1-?@ll47i@wR9-5GXkoDB0bO;6Jqdr?$tDY@&FI zl(OUHmZ;%UZkJ%8;<8uaJb^*@7ZssEagye2!~DB2-4?Zd0#d9HmN~$H(z!$Ga1%g^ z*_d<8q-1}XOjl(r1blar<$uPuU#=rU8!HAR!ej`xJjqffGhfbTin1v(kTq) zMm+25_h@j0?`8d)v1kR&xd`zJ+5C5g5F;yuKW;Bs6bachEsZNQnTtrg%9U9PepiX1 zz2#RqJ!JMuki2B0`W3PL^68sfEc^b_9 zY}NZDM~jl;Y)F)lMP0`ku9+8wZXDxK?CXf#zg>$iu~{uS^OL}IHogUqf=iBfqN$JX z(TY`TT$;TU(_qyVzFBDoD0r>|JMfVb;~t!u2(pPvC>|kOW+Um&*H^zAwBn~}8mFHS za_zKcI!}da3(wuWS+{($I@kTI&n~Md0A*JyUeFGRhkqS3w0}a9ZeO81BO|<}9xgRT zr>hrhP$9i{Na9fohpgWvE}V@8E|#t3SoS`^Me0X^EI^ii@WQH<8UHa)u&v=k)v^Jt z((SA-BU{}Ch_lD88Oie(YA$S9fCs**>Jsu9qFE2&_uO^DRO$nhsNNW?n zfZr{jMEqF_Cxj)@r23b&biU;CXjVz?9ZB<89qGCQw+;y>ny_Y>5dix1ZJ0f0^>u=Q z>Zks3EN5~ny%31IYRbQF>k6AyVh$Ewug(~BP(Fph7VKDFXFBS-C+-pN>+KRgcaWA1 zw-fVuh>@HG{h+*?VS*puV-E6HMjEj!aze&>;q9g`5VXfn($beGKh|^x`IBQxEAUMK zF%(cwt_}UPTDPJwOKg{5bOG1?;=D!EduWyi&Gj;K6n!2nD>7t93+e6d=M4cLm}rL= zUTBV~B+=4Pv|o65=(_^ksOFm~+G*3I$R0)K}}2oHCWte z1m5!fyh=KX1742>vD(Mu5k2EL;z%#N7WC*MQhdgE(l|ao&6eWc5S?CvZ9jx9>S~jx z%XDmw!{+PM_Tb>tnGRjU$kNfj4?7G3VcuHvCf9v5j>}`FHMy znX4!PrL{`TLk+>xM{c|kV%Tu9r=h!4y#-(wr8~KLqO_vSri44fkl?s7*J}AkHu~BY zvFG|@M@p*J6wCvg1j@%3JoL4E5{+d#)WtFMw8sa~tRAVX7`yP$<}~Rmk-hFPy!q2u)5axuVL3=&1;GzrRvm~KL4?)r1Iy) zDS@wo!a==l4}!f9(A4%P<;q-ITJg;WpzbUldjyDbt$cHD6mlowuD! z%}oGXFY_Af@;fL~a*!!`)$jP1pr*>*1^pMq!OnD_umQSc93}4Od6V`YW^o0zmJGGM z7cdDcxScyBGj|Cz?UnIeBWc=4xf7#C$J_26?M+shA}}c1@k-q@MBAq6M@*LF9woVfGKjpPP^$?&f7-`%6di~ka^Wd|wa4@eoyK?8hl^fXp literal 0 HcmV?d00001 diff --git a/frameworks/base/resource/binary/tv_rate_star_big_on.svg b/frameworks/base/resource/binary/tv_rate_star_big_on.svg new file mode 100644 index 00000000..8e56ac68 --- /dev/null +++ b/frameworks/base/resource/binary/tv_rate_star_big_on.svg @@ -0,0 +1,15 @@ + + + + star_new + Created with Sketch. + + + + + + + + + + \ No newline at end of file diff --git a/frameworks/base/resource/binary/tv_rate_star_small_half.png b/frameworks/base/resource/binary/tv_rate_star_small_half.png new file mode 100644 index 0000000000000000000000000000000000000000..884048554399e00e5cab17098856da5f4e585296 GIT binary patch literal 529 zcmV+s0`C2ZP)Px$%Sl8*R7efwRJ%$8K@>fc#3YJuf{0cMqJ=?F3!7*xwGc$G@C*C`OB*Xc!OnlM zu=53qf{jf;#DJBG21FqcjTz4*nayn6-AsxU;=pC^J#+3oGqZOF_*X+-rxQ}jSj#po zPmrZRvKfJpEm@vn8WJPqM=8=_n`bS664s2OeTEPx$LP?CPJ zaBnhN+qh57BmzouLul88cZ1Kk;${*7p|KOkd?zfb=|MQvfW_m%aWpEpqdO~%U7GI< zz^q)*6Z90J&W?V z1O#=6xHeI0@D literal 0 HcmV?d00001 diff --git a/frameworks/base/resource/binary/tv_rate_star_small_off.svg b/frameworks/base/resource/binary/tv_rate_star_small_off.svg new file mode 100644 index 00000000..4b20722e --- /dev/null +++ b/frameworks/base/resource/binary/tv_rate_star_small_off.svg @@ -0,0 +1,11 @@ + + + + star_unmarked + Created with Sketch. + + + + + \ No newline at end of file diff --git a/frameworks/base/resource/binary/tv_rate_star_small_on.png b/frameworks/base/resource/binary/tv_rate_star_small_on.png new file mode 100644 index 0000000000000000000000000000000000000000..2149039e6fb084ea8f528eade3dbac6a80a21c09 GIT binary patch literal 488 zcmVP)Px$qDe$SR7ef&R6Q?5K@>gLuGLeCLPsGIwZvMHXb@3}E%*VVL6jPi=yYloI=_JR z6^U9D$VMY!8`+9vE!Uk{Z}-mbo0v@$ik)OK=bkxp?z?y1dq8XaWe4~a%bdefGoBPG z<|}lfglDTyp__*B8gjNRL}WE3%z=@z)8N1no&Z>=dNLNP_!kh=BECQ$%D8j9lIW)q z+&f%M5LQ81J$+;n$3=T;bt;gzWJ`Lys`e|8&@R0DFoZARK4P@Hl)*~GCnI22LS7CT zF5&R(M3tbDu*2CgNeQ=_b1Ei!$ z>&BS$xhj5E;Re`jf`T;e$#G$%?VUMfE$}AbOALstwj|d;)KnR%ceM3|%ueds%Y;0000 + + + star_marked + Created with Sketch. + + + + + \ No newline at end of file diff --git a/frameworks/base/resource/binary/up_arrow.svg b/frameworks/base/resource/binary/up_arrow.svg new file mode 100644 index 00000000..ca94c6d1 --- /dev/null +++ b/frameworks/base/resource/binary/up_arrow.svg @@ -0,0 +1,10 @@ + + + + ic/56x56/Arrow/Up + Created with Sketch. + + + + + \ No newline at end of file diff --git a/frameworks/base/resource/binary/watch_down_arrow.svg b/frameworks/base/resource/binary/watch_down_arrow.svg new file mode 100644 index 00000000..67b04119 --- /dev/null +++ b/frameworks/base/resource/binary/watch_down_arrow.svg @@ -0,0 +1,16 @@ + + + ic/56x56/Arrow/Down + + + + + + + + + + + + + diff --git a/frameworks/base/resource/binary/watch_up_arrow.svg b/frameworks/base/resource/binary/watch_up_arrow.svg new file mode 100644 index 00000000..1f6783eb --- /dev/null +++ b/frameworks/base/resource/binary/watch_up_arrow.svg @@ -0,0 +1,16 @@ + + + ic/56x56/Arrow/Right + + + + + + + + + + + + + diff --git a/frameworks/base/resource/binary/wrong.svg b/frameworks/base/resource/binary/wrong.svg new file mode 100644 index 00000000..5cc4a94a --- /dev/null +++ b/frameworks/base/resource/binary/wrong.svg @@ -0,0 +1,11 @@ + + + + ic/56x56/Close/White + Created with Sketch. + + + + + + \ No newline at end of file diff --git a/frameworks/base/resource/internal_resource.cpp b/frameworks/base/resource/internal_resource.cpp new file mode 100644 index 00000000..a4675d0f --- /dev/null +++ b/frameworks/base/resource/internal_resource.cpp @@ -0,0 +1,429 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "base/resource/internal_resource.h" + +#include + +#include "base/log/log.h" + +// binary/play.svg +// Use objcopy transform to compiled object file. +// The following parameters represent the beginning and end of the file. +extern uint8_t _binary_play_svg_start[]; +extern uint8_t _binary_play_svg_end[]; + +// binary/pause.svg +// Use objcopy transform to compiled object file. +// The following parameters represent the beginning and end of the file. +extern uint8_t _binary_pause_svg_start[]; +extern uint8_t _binary_pause_svg_end[]; + +// binary/select_arrow_normal.png +// Use objcopy transform to compiled object file. +// The following parameters represent the beginning and end of the file. +extern uint8_t _binary_select_arrow_normal_png_start[]; +extern uint8_t _binary_select_arrow_normal_png_end[]; + +// binary/select_arrow_disabled.png +// Use objcopy transform to compiled object file. +// The following parameters represent the beginning and end of the file. +extern uint8_t _binary_select_arrow_disabled_png_start[]; +extern uint8_t _binary_select_arrow_disabled_png_end[]; + +// binary/full_screen.svg +// Use objcopy transform to compiled object file. +// The following parameters represent the beginning and end of the file. +extern uint8_t _binary_full_screen_svg_start[]; +extern uint8_t _binary_full_screen_svg_end[]; + +// binary/exit_full_screen.svg +// Use objcopy transform to compiled object file. +// The following parameters represent the beginning and end of the file. +extern uint8_t _binary_exit_full_screen_svg_start[]; +extern uint8_t _binary_exit_full_screen_svg_end[]; + +// binary/errorcode.json +// Use objcopy transform to compiled object file. +// The following parameters represent the beginning and end of the file. +extern uint8_t _binary_errorcode_json_start[]; +extern uint8_t _binary_errorcode_json_end[]; + +// binary/tv_rate_star_big_off.svg +// Use objcopy transform to compiled object file. +// The following parameters represent the beginning and end of the file. +extern uint8_t _binary_tv_rate_star_big_off_svg_start[]; +extern uint8_t _binary_tv_rate_star_big_off_svg_end[]; + +// binary/tv_rate_star_big_on.svg +// Use objcopy transform to compiled object file. +// The following parameters represent the beginning and end of the file. +extern uint8_t _binary_tv_rate_star_big_on_svg_start[]; +extern uint8_t _binary_tv_rate_star_big_on_svg_end[]; + +// binary/tv_rate_star_small_off.svg +// Use objcopy transform to compiled object file. +// The following parameters represent the beginning and end of the file. +extern uint8_t _binary_tv_rate_star_small_off_svg_start[]; +extern uint8_t _binary_tv_rate_star_small_off_svg_end[]; + +// binary/tv_rate_star_small_on.png +// Use objcopy transform to compiled object file. +// The following parameters represent the beginning and end of the file. +extern uint8_t _binary_tv_rate_star_small_on_svg_start[]; +extern uint8_t _binary_tv_rate_star_small_on_svg_end[]; + +// binary/rate_star_big_off.svg +// Use objcopy transform to compiled object file. +// The following parameters represent the beginning and end of the file. +extern uint8_t _binary_rate_star_big_off_svg_start[]; +extern uint8_t _binary_rate_star_big_off_svg_end[]; + +// binary/rate_star_big_on.svg +// Use objcopy transform to compiled object file. +// The following parameters represent the beginning and end of the file. +extern uint8_t _binary_rate_star_big_on_svg_start[]; +extern uint8_t _binary_rate_star_big_on_svg_end[]; + +// binary/rate_star_small_off.svg +// Use objcopy transform to compiled object file. +// The following parameters represent the beginning and end of the file. +extern uint8_t _binary_rate_star_small_off_svg_start[]; +extern uint8_t _binary_rate_star_small_off_svg_end[]; + +// binary/rate_star_small_on.svg +// Use objcopy transform to compiled object file. +// The following parameters represent the beginning and end of the file. +extern uint8_t _binary_rate_star_small_on_svg_start[]; +extern uint8_t _binary_rate_star_small_on_svg_end[]; + +// binary/rate_star_small_on.svg +// Use objcopy transform to compiled object file. +// The following parameters represent the beginning and end of the file. +extern uint8_t _binary_rate_star_small_on_svg_start[]; +extern uint8_t _binary_rate_star_small_on_svg_end[]; + +// binary/indexer_arrow.png +// Use objcopy transform to compiled object file. +// The following parameters represent the beginning and end of the file. +extern uint8_t _binary_indexer_arrow_png_start[]; +extern uint8_t _binary_indexer_arrow_png_end[]; + +// binary/correct.svg +// Use objcopy transform to compiled object file. +// The following parameters represent the beginning and end of the file. +extern uint8_t _binary_correct_svg_start[]; +extern uint8_t _binary_correct_svg_end[]; + +// binary/wrong.svg +// Use objcopy transform to compiled object file. +// The following parameters represent the beginning and end of the file. +extern uint8_t _binary_wrong_svg_start[]; +extern uint8_t _binary_wrong_svg_end[]; + +// binary/search.svg +// Use objcopy transform to compiled object file. +// The following parameters represent the beginning and end of the file. +extern uint8_t _binary_search_svg_start[]; +extern uint8_t _binary_search_svg_end[]; + +// binary/close.svg +// Use objcopy transform to compiled object file. +// The following parameters represent the beginning and end of the file. +extern uint8_t _binary_close_svg_start[]; +extern uint8_t _binary_close_svg_end[]; + +// binary/indexletter_bar.json +// Use objcopy transform to compiled object file. +// The following parameters represent the beginning and end of the file. +extern uint8_t _binary_indexletter_bar_json_start[]; +extern uint8_t _binary_indexletter_bar_json_end[]; + +// binary/entry.json +// Use objcopy transform to compiled object file. +// The following parameters represent the beginning and end of the file. +extern uint8_t _binary_entry_json_start[]; +extern uint8_t _binary_entry_json_end[]; + +// binary/up_arrow.svg +// Use objcopy transform to compiled object file. +// The following parameters represent the beginning and end of the file. +extern uint8_t _binary_up_arrow_svg_start[]; +extern uint8_t _binary_up_arrow_svg_end[]; + +// binary/watch_up_arrow.svg +// Use objcopy transform to compiled object file. +// The following parameters represent the beginning and end of the file. +extern uint8_t _binary_watch_up_arrow_svg_start[]; +extern uint8_t _binary_watch_up_arrow_svg_end[]; + +// binary/down_arrow.svg +// Use objcopy transform to compiled object file. +// The following parameters represent the beginning and end of the file. +extern uint8_t _binary_down_arrow_svg_start[]; +extern uint8_t _binary_down_arrow_svg_end[]; + +// binary/watch_down_arrow.svg +// Use objcopy transform to compiled object file. +// The following parameters represent the beginning and end of the file. +extern uint8_t _binary_watch_down_arrow_svg_start[]; +extern uint8_t _binary_watch_down_arrow_svg_end[]; + +// binary/show_password.svg +// Use objcopy transform to compiled object file. +// The following parameters represent the beginning and end of the file. +extern uint8_t _binary_show_password_svg_start[]; +extern uint8_t _binary_show_password_svg_end[]; + +// binary/hide_password.svg +// Use objcopy transform to compiled object file. +// The following parameters represent the beginning and end of the file. +extern uint8_t _binary_hide_password_svg_start[]; +extern uint8_t _binary_hide_password_svg_end[]; + +// binary/semi_modal_bar_down.svg +// Use objcopy transform to compiled object file. +// The following parameters represent the beginning and end of the file. +extern uint8_t _binary_semi_modal_bar_down_svg_start[]; +extern uint8_t _binary_semi_modal_bar_down_svg_end[]; + +// binary/semi_modal_bar_middle.svg +// Use objcopy transform to compiled object file. +// The following parameters represent the beginning and end of the file. +extern uint8_t _binary_semi_modal_bar_middle_svg_start[]; +extern uint8_t _binary_semi_modal_bar_middle_svg_end[]; + +// binary/left_arrow.svg +// Use objcopy transform to compiled object file. +// The following parameters represent the beginning and end of the file. +extern uint8_t _binary_left_arrow_svg_start[]; +extern uint8_t _binary_left_arrow_svg_end[]; + +// binary/right_arrow.svg +// Use objcopy transform to compiled object file. +// The following parameters represent the beginning and end of the file. +extern uint8_t _binary_right_arrow_svg_start[]; +extern uint8_t _binary_right_arrow_svg_end[]; + +// binary/stepper_back_arrow.svg +// Use objcopy transform to compiled object file. +// The following parameters represent the beginning and end of the file. +extern uint8_t _binary_stepper_back_arrow_svg_start[]; +extern uint8_t _binary_stepper_back_arrow_svg_end[]; + +// binary/stepper_next_arrow.svg +// Use objcopy transform to compiled object file. +// The following parameters represent the beginning and end of the file. +extern uint8_t _binary_stepper_next_arrow_svg_start[]; +extern uint8_t _binary_stepper_next_arrow_svg_end[]; + +// binary/piece_delete.svg +// Use objcopy transform to compiled object file. +// The following parameters represent the beginning and end of the file. +extern uint8_t _binary_piece_delete_svg_start[]; +extern uint8_t _binary_piece_delete_svg_end[]; + +// binary/ic_back.svg +// Use objcopy transform to compiled object file. +// The following parameters represent the beginning and end of the file. +extern uint8_t _binary_ic_back_svg_start[]; +extern uint8_t _binary_ic_back_svg_end[]; + +// binary/ic_more.svg +// Use objcopy transform to compiled object file. +// The following parameters represent the beginning and end of the file. +extern uint8_t _binary_ic_more_svg_start[]; +extern uint8_t _binary_ic_more_svg_end[]; + +// binary/ic_more_dark.svg +// Use objcopy transform to compiled object file. +// The following parameters represent the beginning and end of the file. +extern uint8_t _binary_ic_more_dark_svg_start[]; +extern uint8_t _binary_ic_more_dark_svg_end[]; + +// binary/ic_more_transparent.svg +// Use objcopy transform to compiled object file. +// The following parameters represent the beginning and end of the file. +extern uint8_t _binary_ic_more_transparent_svg_start[]; +extern uint8_t _binary_ic_more_transparent_svg_end[]; + +// binary/translate_c2e.svg +// Use objcopy transform to compiled object file. +// The following parameters represent the beginning and end of the file. +extern uint8_t _binary_translate_c2e_svg_start[]; +extern uint8_t _binary_translate_c2e_svg_end[]; + +// binary/share.svg +// Use objcopy transform to compiled object file. +// The following parameters represent the beginning and end of the file. +extern uint8_t _binary_share_svg_start[]; +extern uint8_t _binary_share_svg_end[]; + +namespace OHOS::Ace { +namespace { + +struct ResourceData final { + ResourceData(const uint8_t* buf, size_t size) : buf(buf), size(size) {} + ~ResourceData() = default; + + const uint8_t* buf; + size_t size; +}; + +} // namespace + +InternalResource::InternalResource() = default; + +InternalResource::~InternalResource() = default; + +const uint8_t* InternalResource::GetResource(const ResourceId id, size_t& size) const +{ + static const std::map RESOURCE_MAP = { + { InternalResource::ResourceId::TV_RATE_STAR_BIG_ON_SVG, + ResourceData(_binary_tv_rate_star_big_on_svg_start, + static_cast(_binary_tv_rate_star_big_on_svg_end - _binary_tv_rate_star_big_on_svg_start)) }, + { InternalResource::ResourceId::TV_RATE_STAR_BIG_OFF_SVG, + ResourceData(_binary_tv_rate_star_big_off_svg_start, + static_cast(_binary_tv_rate_star_big_off_svg_end - _binary_tv_rate_star_big_off_svg_start)) }, + { InternalResource::ResourceId::TV_RATE_STAR_SMALL_ON_SVG, + ResourceData(_binary_tv_rate_star_small_on_svg_start, + static_cast(_binary_tv_rate_star_small_on_svg_end - _binary_tv_rate_star_small_on_svg_start)) }, + { InternalResource::ResourceId::TV_RATE_STAR_SMALL_OFF_SVG, + ResourceData(_binary_tv_rate_star_small_off_svg_start, + static_cast( + _binary_tv_rate_star_small_off_svg_end - _binary_tv_rate_star_small_off_svg_start)) }, + { InternalResource::ResourceId::RATE_STAR_BIG_ON_SVG, + ResourceData(_binary_rate_star_big_on_svg_start, + static_cast(_binary_rate_star_big_on_svg_end - _binary_rate_star_big_on_svg_start)) }, + { InternalResource::ResourceId::RATE_STAR_BIG_OFF_SVG, + ResourceData(_binary_rate_star_big_off_svg_start, + static_cast(_binary_rate_star_big_off_svg_end - _binary_rate_star_big_off_svg_start)) }, + { InternalResource::ResourceId::RATE_STAR_SMALL_ON_SVG, + ResourceData(_binary_rate_star_small_on_svg_start, + static_cast(_binary_rate_star_small_on_svg_end - _binary_rate_star_small_on_svg_start)) }, + { InternalResource::ResourceId::RATE_STAR_SMALL_OFF_SVG, + ResourceData(_binary_rate_star_small_off_svg_start, + static_cast(_binary_rate_star_small_off_svg_end - _binary_rate_star_small_off_svg_start)) }, + { InternalResource::ResourceId::RATE_STAR_SMALL_OFF_SVG, + ResourceData(_binary_rate_star_small_off_svg_start, + static_cast(_binary_rate_star_small_off_svg_end - _binary_rate_star_small_off_svg_start)) }, + { InternalResource::ResourceId::INDEXER_ARROW_PNG, + ResourceData(_binary_indexer_arrow_png_start, + static_cast(_binary_indexer_arrow_png_end - _binary_indexer_arrow_png_start)) }, + { InternalResource::ResourceId::CORRECT_SVG, + ResourceData( + _binary_correct_svg_start, static_cast(_binary_correct_svg_end - _binary_correct_svg_start)) }, + { InternalResource::ResourceId::WRONG_SVG, + ResourceData( + _binary_wrong_svg_start, static_cast(_binary_wrong_svg_end - _binary_wrong_svg_start)) }, + { InternalResource::ResourceId::SEARCH_SVG, + ResourceData( + _binary_search_svg_start, static_cast(_binary_search_svg_end - _binary_search_svg_start)) }, + { InternalResource::ResourceId::CLOSE_SVG, + ResourceData( + _binary_close_svg_start, static_cast(_binary_close_svg_end - _binary_close_svg_start)) }, + { InternalResource::ResourceId::PLAY_SVG, + ResourceData(_binary_play_svg_start, static_cast(_binary_play_svg_end - _binary_play_svg_start)) }, + { InternalResource::ResourceId::PAUSE_SVG, + ResourceData( + _binary_pause_svg_start, static_cast(_binary_pause_svg_end - _binary_pause_svg_start)) }, + { InternalResource::ResourceId::FULLSCREEN_SVG, + ResourceData(_binary_full_screen_svg_start, + static_cast(_binary_full_screen_svg_end - _binary_full_screen_svg_start)) }, + { InternalResource::ResourceId::QUIT_FULLSCREEN_SVG, + ResourceData(_binary_exit_full_screen_svg_start, + static_cast(_binary_exit_full_screen_svg_end - _binary_exit_full_screen_svg_start)) }, + { InternalResource::ResourceId::ERRORINFO_JSON, + ResourceData(_binary_errorcode_json_start, + static_cast(_binary_errorcode_json_end - _binary_errorcode_json_start)) }, + { InternalResource::ResourceId::SELECT_ARROW_NORMAL_PNG, + ResourceData(_binary_select_arrow_normal_png_start, + static_cast(_binary_select_arrow_normal_png_end - _binary_select_arrow_normal_png_start)) }, + { InternalResource::ResourceId::SELECT_ARROW_DISABLED_PNG, + ResourceData(_binary_select_arrow_disabled_png_start, + static_cast(_binary_select_arrow_disabled_png_end - _binary_select_arrow_disabled_png_start)) }, + { InternalResource::ResourceId::INDEXLETTER_BAR_JSON, + ResourceData(_binary_indexletter_bar_json_start, + static_cast(_binary_indexletter_bar_json_end - _binary_indexletter_bar_json_start)) }, + { InternalResource::ResourceId::ENTRY_JSON, + ResourceData( + _binary_entry_json_start, static_cast(_binary_entry_json_end - _binary_entry_json_start)) }, + { InternalResource::ResourceId::UP_ARROW_SVG, + ResourceData(_binary_up_arrow_svg_start, + static_cast(_binary_up_arrow_svg_end - _binary_up_arrow_svg_start)) }, + { InternalResource::ResourceId::WATCH_UP_ARROW_SVG, + ResourceData(_binary_watch_up_arrow_svg_start, + static_cast(_binary_watch_up_arrow_svg_end - _binary_watch_up_arrow_svg_start)) }, + { InternalResource::ResourceId::DOWN_ARROW_SVG, + ResourceData(_binary_down_arrow_svg_start, + static_cast(_binary_down_arrow_svg_end - _binary_down_arrow_svg_start)) }, + { InternalResource::ResourceId::WATCH_DOWN_ARROW_SVG, + ResourceData(_binary_watch_down_arrow_svg_start, + static_cast(_binary_watch_down_arrow_svg_end - _binary_watch_down_arrow_svg_start)) }, + { InternalResource::ResourceId::SHOW_PASSWORD_SVG, + ResourceData(_binary_show_password_svg_start, + static_cast(_binary_show_password_svg_end - _binary_show_password_svg_start)) }, + { InternalResource::ResourceId::HIDE_PASSWORD_SVG, + ResourceData(_binary_hide_password_svg_start, + static_cast(_binary_hide_password_svg_end - _binary_hide_password_svg_start)) }, + { InternalResource::ResourceId::SEMI_MODAL_BAR_DOWN_SVG, + ResourceData(_binary_semi_modal_bar_down_svg_start, + static_cast(_binary_semi_modal_bar_down_svg_end - _binary_semi_modal_bar_down_svg_start)) }, + { InternalResource::ResourceId::SEMI_MODAL_BAR_MIDDLE_SVG, + ResourceData(_binary_semi_modal_bar_middle_svg_start, + static_cast(_binary_semi_modal_bar_middle_svg_end - _binary_semi_modal_bar_middle_svg_start)) }, + { InternalResource::ResourceId::LEFT_ARROW_SVG, + ResourceData(_binary_left_arrow_svg_start, + static_cast(_binary_left_arrow_svg_end - _binary_left_arrow_svg_start)) }, + { InternalResource::ResourceId::RIGHT_ARROW_SVG, + ResourceData(_binary_right_arrow_svg_start, + static_cast(_binary_right_arrow_svg_end - _binary_right_arrow_svg_start)) }, + { InternalResource::ResourceId::STEPPER_BACK_ARROW, + ResourceData(_binary_stepper_back_arrow_svg_start, + static_cast(_binary_stepper_back_arrow_svg_end - _binary_stepper_back_arrow_svg_start)) }, + { InternalResource::ResourceId::STEPPER_NEXT_ARROW, + ResourceData(_binary_stepper_next_arrow_svg_start, + static_cast(_binary_stepper_next_arrow_svg_end - _binary_stepper_next_arrow_svg_start)) }, + { InternalResource::ResourceId::PIECE_DELETE_SVG, + ResourceData(_binary_piece_delete_svg_start, + static_cast(_binary_piece_delete_svg_end - _binary_piece_delete_svg_start)) }, + { InternalResource::ResourceId::IC_BACK, + ResourceData(_binary_ic_back_svg_start, + static_cast(_binary_ic_back_svg_end - _binary_ic_back_svg_start)) }, + { InternalResource::ResourceId::IC_MORE, + ResourceData(_binary_ic_more_svg_start, + static_cast(_binary_ic_more_svg_end - _binary_ic_more_svg_start)) }, + { InternalResource::ResourceId::IC_MORE_DARK, + ResourceData(_binary_ic_more_dark_svg_start, + static_cast(_binary_ic_more_dark_svg_end - _binary_ic_more_dark_svg_start)) }, + { InternalResource::ResourceId::IC_MORE_TRANSPARENT, + ResourceData(_binary_ic_more_transparent_svg_start, + static_cast(_binary_ic_more_transparent_svg_end - _binary_ic_more_transparent_svg_start)) }, + { InternalResource::ResourceId::TRANSLATE_C2E_SVG, + ResourceData(_binary_translate_c2e_svg_start, + static_cast(_binary_translate_c2e_svg_end - _binary_translate_c2e_svg_start)) }, + { InternalResource::ResourceId::SHARE_SVG, + ResourceData( + _binary_share_svg_start, static_cast(_binary_share_svg_end - _binary_share_svg_start)) }, + }; + auto iter = RESOURCE_MAP.find(id); + if (iter != RESOURCE_MAP.end()) { + size = iter->second.size; + return iter->second.buf; + } + return nullptr; +} + +} // namespace OHOS::Ace diff --git a/frameworks/base/resource/internal_resource.h b/frameworks/base/resource/internal_resource.h new file mode 100644 index 00000000..6e5ef73e --- /dev/null +++ b/frameworks/base/resource/internal_resource.h @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_RESOURCE_INTERNAL_RESOURCE_H +#define FOUNDATION_ACE_FRAMEWORKS_BASE_RESOURCE_INTERNAL_RESOURCE_H + +#include + +#include "base/utils/singleton.h" + +namespace OHOS::Ace { + +class InternalResource final : public Singleton { + DECLARE_SINGLETON(InternalResource); + +public: + enum class ResourceId : uint32_t { + NO_ID = 0, + SELECT_ARROW_NORMAL_PNG, + SELECT_ARROW_DISABLED_PNG, + INDEXER_ARROW_PNG, + + // 10000 - 20000 is reserved for SVG resource. + SVG_START = 10000, + CORRECT_SVG, + WRONG_SVG, + SEARCH_SVG, + CLOSE_SVG, + PLAY_SVG, + PAUSE_SVG, + FULLSCREEN_SVG, + QUIT_FULLSCREEN_SVG, + UP_ARROW_SVG, + WATCH_UP_ARROW_SVG, + DOWN_ARROW_SVG, + WATCH_DOWN_ARROW_SVG, + SHOW_PASSWORD_SVG, + HIDE_PASSWORD_SVG, + SEMI_MODAL_BAR_MIDDLE_SVG, + SEMI_MODAL_BAR_DOWN_SVG, + LEFT_ARROW_SVG, + RIGHT_ARROW_SVG, + STEPPER_BACK_ARROW, + STEPPER_NEXT_ARROW, + PIECE_DELETE_SVG, + RATE_STAR_BIG_OFF_SVG, + RATE_STAR_BIG_ON_SVG, + RATE_STAR_SMALL_OFF_SVG, + RATE_STAR_SMALL_ON_SVG, + TV_RATE_STAR_BIG_OFF_SVG, + TV_RATE_STAR_BIG_ON_SVG, + TV_RATE_STAR_SMALL_OFF_SVG, + TV_RATE_STAR_SMALL_ON_SVG, + IC_BACK, + IC_MORE, + IC_MORE_DARK, + IC_MORE_TRANSPARENT, + TRANSLATE_C2E_SVG, + SHARE_SVG, + SVG_END = 20000, + + // 20001 - 30000 is reserved for i18n resource. + I18N_START = 20001, + INDEXLETTER_BAR_JSON, + ERRORINFO_JSON, + ENTRY_JSON, + I18N_END = 30000, + }; + + const uint8_t* GetResource(const ResourceId id, size_t& size) const; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BASE_RESOURCE_INTERNAL_RESOURCE_H diff --git a/frameworks/base/resource/shared_image_manager.cpp b/frameworks/base/resource/shared_image_manager.cpp new file mode 100644 index 00000000..52ba3f2b --- /dev/null +++ b/frameworks/base/resource/shared_image_manager.cpp @@ -0,0 +1,130 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "base/resource/shared_image_manager.h" + +#include "base/log/log.h" + +namespace OHOS::Ace { +namespace { + +constexpr uint32_t DELAY_TIME_FOR_IMAGE_DATA_CLEAN = 30000; +constexpr char MEMORY_IMAGE_HEAD[] = "memory://"; + +} // namespace + +std::function SharedImageManager::GenerateClearImageDataCallback(const std::string& name) +{ + auto clearImageDataCallback = [wp = AceType::WeakClaim(this), picName = name]() { + auto sharedImageManager = wp.Upgrade(); + if (!sharedImageManager) { + LOGW("sharedImageManager upgrade fail, picName: %{private}s", picName.c_str()); + return; + } + { + std::lock_guard lockImageMap(sharedImageManager->sharedImageMapMutex_); + sharedImageManager->sharedImageMap_.erase(picName); + } + { + std::lock_guard lockCancelableCallbackMap_(sharedImageManager->cancelableCallbackMapMutex_); + sharedImageManager->cancelableCallbackMap_.erase(picName); + } + }; + return clearImageDataCallback; +} + +void SharedImageManager::PostDelayedTaskToClearImageData(const std::string& name) +{ + if (!taskExecutor_) { + LOGE("taskExecutor is null!"); + return; + } + std::lock_guard lockCancelableCallbackMap_(cancelableCallbackMapMutex_); + auto& cancelableCallback = cancelableCallbackMap_[name]; + cancelableCallback.Reset(GenerateClearImageDataCallback(name)); + taskExecutor_->PostDelayedTask(cancelableCallback, TaskExecutor::TaskType::IO, DELAY_TIME_FOR_IMAGE_DATA_CLEAN); +} + +void SharedImageManager::AddSharedImage(const std::string& name, SharedImage&& sharedImage) +{ + { + std::set> providerSet = std::set>(); + // step1: lock provider map to search for record of current picture name + std::scoped_lock lock(providerMapMutex_, sharedImageMapMutex_); + auto providersToNotify = providerMapToReload_.find(name); + if (providersToNotify != providerMapToReload_.end()) { + for (const auto& providerWp : providersToNotify->second) { + auto provider = providerWp.Upgrade(); + if (!provider) { + LOGE("provider of %{private}s is null", name.c_str()); + continue; + } + providerSet.emplace(provider); + } + providerMapToReload_.erase(providersToNotify); + } + // step2: lock image map to add shared image and notify [LazyMemoryImageProvider]s to update data and reload + // update image data when the name can be found in map + auto result = sharedImageMap_.try_emplace(name, std::move(sharedImage)); + if (!result.second) { + result.first->second = std::move(sharedImage); + } + for (const auto& provider : providerSet) { + provider->UpdateData(std::string(MEMORY_IMAGE_HEAD).append(name), result.first->second); + } + LOGI("done add image data for %{private}s, length of data is %{private}zu", name.c_str(), + result.first->second.size()); + } + PostDelayedTaskToClearImageData(name); +} + +void SharedImageManager::AddPictureNamesToReloadMap(std::string&& name) +{ + // add names of memory image to be read from shared memory + std::lock_guard lock(providerMapMutex_); + providerMapToReload_.try_emplace(name, std::set>()); +} + +bool SharedImageManager::AddProviderToReloadMap( + const std::string& name, const WeakPtr& loaderWp) +{ + std::lock_guard lock(providerMapMutex_); + auto providerMapIter = providerMapToReload_.find(name); + if (providerMapIter != providerMapToReload_.end()) { + providerMapIter->second.emplace(loaderWp); + return true; + } + return false; +} + +bool SharedImageManager::FindImageInSharedImageMap( + const std::string& name, const WeakPtr& providerWp) +{ + auto loader = providerWp.Upgrade(); + if (!loader) { + LOGE("provider of %{private}s is null", name.c_str()); + return false; + } + std::lock_guard lockImageMap(sharedImageMapMutex_); + auto iter = sharedImageMap_.find(name); + if (iter == sharedImageMap_.end()) { + LOGE("image data of %{private}s does not found in SharedImageMap", name.c_str()); + return false; + } + loader->UpdateData(std::string(MEMORY_IMAGE_HEAD).append(name), iter->second); + return true; +} + +} // namespace OHOS::Ace diff --git a/frameworks/base/resource/shared_image_manager.h b/frameworks/base/resource/shared_image_manager.h new file mode 100644 index 00000000..2beb9c5e --- /dev/null +++ b/frameworks/base/resource/shared_image_manager.h @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_RESOURCE_SHARED_IMAGE_MANAGER_H +#define FOUNDATION_ACE_FRAMEWORKS_BASE_RESOURCE_SHARED_IMAGE_MANAGER_H + +#include +#include +#include +#include + +#include "base/memory/ace_type.h" +#include "base/thread/cancelable_callback.h" +#include "base/thread/task_executor.h" + +namespace OHOS::Ace { + +using SharedImage = std::vector; +using SharedImageMap = std::unordered_map; + +class ImageProviderLoader; +using ProviderMapToReload = std::unordered_map>>; + +class SharedImageManager : public AceType { + DECLARE_ACE_TYPE(SharedImageManager, AceType); + +public: + explicit SharedImageManager(const RefPtr& taskExecutor) : taskExecutor_(taskExecutor) {} + ~SharedImageManager() override = default; + void AddSharedImage(const std::string& name, SharedImage&& sharedImage); + void AddPictureNamesToReloadMap(std::string&& name); + bool AddProviderToReloadMap(const std::string& name, const WeakPtr& providerWp); + bool FindImageInSharedImageMap(const std::string& name, const WeakPtr& providerWp); + + const SharedImageMap& GetSharedImageMap() const + { + return sharedImageMap_; + } + + bool Remove(const std::string& name) + { + int res = sharedImageMap_.erase(name); + return (res != 0); + } + + bool IsResourceToReload(const std::string& name) + { + std::lock_guard lockProviderMap(providerMapMutex_); + return providerMapToReload_.find(name) != providerMapToReload_.end(); + } + +private: + void PostDelayedTaskToClearImageData(const std::string& name); + std::function GenerateClearImageDataCallback(const std::string& name); + + std::mutex sharedImageMapMutex_; + std::mutex providerMapMutex_; + std::mutex cancelableCallbackMapMutex_; + SharedImageMap sharedImageMap_; + ProviderMapToReload providerMapToReload_; + std::function clearImageDataCallback_; + std::unordered_map> cancelableCallbackMap_; + RefPtr taskExecutor_; +}; + +class ImageProviderLoader : public virtual AceType { + DECLARE_ACE_TYPE(ImageProviderLoader, AceType); + +public: + ~ImageProviderLoader() override = default; + virtual void UpdateData(const std::string& uri, const std::vector& memData) = 0; + +protected: + ImageProviderLoader() = default; + + ACE_DISALLOW_COPY_AND_MOVE(ImageProviderLoader); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BASE_RESOURCE_SHARED_IMAGE_MANAGER_H diff --git a/frameworks/base/test/BUILD.gn b/frameworks/base/test/BUILD.gn new file mode 100644 index 00000000..78294c7e --- /dev/null +++ b/frameworks/base/test/BUILD.gn @@ -0,0 +1,19 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +group("unittest") { + testonly = true +} diff --git a/frameworks/base/test/unittest/json_util/BUILD.gn b/frameworks/base/test/unittest/json_util/BUILD.gn new file mode 100644 index 00000000..694ce7a7 --- /dev/null +++ b/frameworks/base/test/unittest/json_util/BUILD.gn @@ -0,0 +1,56 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +if (is_standard_system) { + module_output_path = "ace_engine_standard/frameworkbasicability/jsonutil" +} + +ohos_unittest("JsonUtilsTest") { + module_out_path = module_output_path + + sources = [ "json_util_test.cpp" ] + + configs = [ + ":config_json_creator_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_json_creator_test") { + visibility = [ ":*" ] + include_dirs = [ + "//utils/native/base/include", + "$ace_root", + ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":JsonUtilsTest" ] +} diff --git a/frameworks/base/test/unittest/json_util/json_util_test.cpp b/frameworks/base/test/unittest/json_util/json_util_test.cpp new file mode 100644 index 00000000..86a495c0 --- /dev/null +++ b/frameworks/base/test/unittest/json_util/json_util_test.cpp @@ -0,0 +1,420 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include "gtest/gtest.h" + +#include "base/json/json_util.h" +#include "base/utils/utils.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +const std::string TEST_STRING = "Ace Unittest"; +const std::string TEST_KEY = "JsonObjectTypeTest"; +const std::string TEST_FALSE_KEY = "FalseKey"; + +} // namespace + +class JsonUtilsTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; +}; + +void JsonUtilsTest::SetUpTestCase() +{ + GTEST_LOG_(INFO) << "JsonUtilsTest SetUpTestCase"; +} + +void JsonUtilsTest::TearDownTestCase() +{ + GTEST_LOG_(INFO) << "JsonUtilsTest TearDownTestCase"; +} + +void JsonUtilsTest::SetUp() +{ + GTEST_LOG_(INFO) << "JsonUtilsTest SetUp"; +} + +void JsonUtilsTest::TearDown() +{ + GTEST_LOG_(INFO) << "JsonUtilsTest TearDown"; +} + +/** + * @tc.name: JsonUtilsTest001 + * @tc.desc: Check json util function for bool type value + * @tc.type: FUNC + * @tc.require: AR000DAQVN + * @tc.author: luoying + */ +HWTEST_F(JsonUtilsTest, JsonUtilsTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the test string with bool value. + */ + std::string testJson = "true"; + + /** + * @tc.steps: step2. get JsonValue and check results of IsValid, IsNull, IsBool and GetBool. + * @tc.expected: step2. get the JsonValue successfully and the results are correct. + */ + std::unique_ptr boolValue = JsonUtil::ParseJsonString(testJson); + ASSERT_TRUE(boolValue); + EXPECT_TRUE(boolValue->IsValid()); + EXPECT_FALSE(boolValue->IsNull()); + EXPECT_TRUE(boolValue->IsBool()); + EXPECT_TRUE(boolValue->GetBool()); +} + +/** + * @tc.name: JsonUtilsTest002 + * @tc.desc: Check json util function for bool type value + * @tc.type: FUNC + * @tc.require: AR000DAQVN + * @tc.author: luoying + */ +HWTEST_F(JsonUtilsTest, JsonUtilsTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the test string with bool value. + */ + std::string testJson = "false"; + + /** + * @tc.steps: step2. get JsonValue and check results of IsValid, IsNull, IsBool and GetBool. + * @tc.expected: step2. get the JsonValue successfully and the results are correct. + */ + std::unique_ptr boolValue = JsonUtil::ParseJsonString(testJson); + ASSERT_TRUE(boolValue); + EXPECT_TRUE(boolValue->IsValid()); + EXPECT_FALSE(boolValue->IsNull()); + EXPECT_TRUE(boolValue->IsBool()); + EXPECT_FALSE(boolValue->GetBool()); +} + +/** + * @tc.name: JsonUtilsTest003 + * @tc.desc: Check json util function for signed integer + * @tc.type: FUNC + * @tc.require: AR000DAQVN + * @tc.author: luoying + */ +HWTEST_F(JsonUtilsTest, JsonUtilsTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the test string with signed integer. + */ + std::string testJson = "-1"; + int32_t intNum = -1; + uint32_t uintNum = 0; + double doubleNum = -1; + + /** + * @tc.steps: step2. get JsonValue and check results of IsValid, IsNull, IsNumber, GetInt, GetUInt and GetDouble. + * @tc.expected: step2. get the JsonValue successfully and the results are correct. + */ + std::unique_ptr intValue = JsonUtil::ParseJsonString(testJson); + ASSERT_TRUE(intValue); + EXPECT_TRUE(intValue->IsValid()); + EXPECT_FALSE(intValue->IsNull()); + EXPECT_TRUE(intValue->IsNumber()); + EXPECT_TRUE(intValue->GetInt() == intNum); + EXPECT_TRUE(intValue->GetUInt() == uintNum); + EXPECT_TRUE(NearEqual(intValue->GetDouble(), doubleNum)); +} + +/** + * @tc.name: JsonUtilsTest004 + * @tc.desc: Check json util function for unsigned integer + * @tc.type: FUNC + * @tc.require: AR000DAQVN + * @tc.author: luoying + */ +HWTEST_F(JsonUtilsTest, JsonUtilsTest004, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the test string with unsigned integer. + */ + std::string testJson = "1"; + int32_t intNum = 1; + uint32_t uintNum = 1; + double doubleNum = 1; + + /** + * @tc.steps: step2. get JsonValue and check results of IsValid, IsNull, IsNumber, GetInt, GetUInt and GetDouble. + * @tc.expected: step2. get the JsonValue successfully and the results are correct. + */ + std::unique_ptr uintValue = JsonUtil::ParseJsonString(testJson); + ASSERT_TRUE(uintValue); + EXPECT_TRUE(uintValue->IsValid()); + EXPECT_FALSE(uintValue->IsNull()); + EXPECT_TRUE(uintValue->IsNumber()); + EXPECT_TRUE(uintValue->GetInt() == intNum); + EXPECT_TRUE(uintValue->GetUInt() == uintNum); + EXPECT_TRUE(NearEqual(uintValue->GetDouble(), doubleNum)); +} + +/** + * @tc.name: JsonUtilsTest005 + * @tc.desc: Check json util function for decimal number + * @tc.type: FUNC + * @tc.require: AR000DAQVN + * @tc.author: luoying + */ +HWTEST_F(JsonUtilsTest, JsonUtilsTest005, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the test string with decimal number. + */ + std::string testJson = "6.66"; + int32_t intNum = 6; + uint32_t uintNum = 6; + double doubleNum = 6.66; + + /** + * @tc.steps: step2. get JsonValue and check results of IsValid, IsNull, IsNumber, GetInt, GetUInt and GetDouble. + * @tc.expected: step2. get the JsonValue successfully and the results are correct. + */ + std::unique_ptr doubleValue = JsonUtil::ParseJsonString(testJson); + ASSERT_TRUE(doubleValue); + EXPECT_TRUE(doubleValue->IsValid()); + EXPECT_FALSE(doubleValue->IsNull()); + EXPECT_TRUE(doubleValue->IsNumber()); + EXPECT_TRUE(doubleValue->GetInt() == intNum); + EXPECT_TRUE(doubleValue->GetUInt() == uintNum); + EXPECT_TRUE(NearEqual(doubleValue->GetDouble(), doubleNum)); +} + +/** + * @tc.name: JsonUtilsTest006 + * @tc.desc: Check json util function for string + * @tc.type: FUNC + * @tc.require: AR000DAQVN + * @tc.author: luoying + */ +HWTEST_F(JsonUtilsTest, JsonUtilsTest006, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the test string with string. + */ + std::string testJson = "\"Ace Unittest\""; + + /** + * @tc.steps: step2. get JsonValue and check results of IsValid, IsNull, IsString and GetString. + * @tc.expected: step2. get the JsonValue successfully and the results are correct. + */ + std::unique_ptr stringValue = JsonUtil::ParseJsonString(testJson); + ASSERT_TRUE(stringValue); + EXPECT_TRUE(stringValue->IsValid()); + EXPECT_FALSE(stringValue->IsNull()); + EXPECT_TRUE(stringValue->IsString()); + EXPECT_TRUE(stringValue->GetString() == TEST_STRING); +} + +/** + * @tc.name: JsonUtilsTest007 + * @tc.desc: Check json util function for empty string + * @tc.type: FUNC + * @tc.require: AR000DAQVN + * @tc.author: luoying + */ +HWTEST_F(JsonUtilsTest, JsonUtilsTest007, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the test string with empty string. + */ + std::string testJson = "\"\""; + + /** + * @tc.steps: step2. get JsonValue and check results of IsValid, IsNull, IsString and GetString. + * @tc.expected: step2. get the JsonValue successfully and the results are correct. + */ + std::unique_ptr emptyStringValue = JsonUtil::ParseJsonString(testJson); + ASSERT_TRUE(emptyStringValue); + EXPECT_TRUE(emptyStringValue->IsValid()); + EXPECT_FALSE(emptyStringValue->IsNull()); + EXPECT_TRUE(emptyStringValue->IsString()); + EXPECT_TRUE(emptyStringValue->GetString().empty()); +} + +/** + * @tc.name: JsonUtilsTest008 + * @tc.desc: Check json util function for JsonObject + * @tc.type: FUNC + * @tc.require: AR000DAQVN + * @tc.author: luoying + */ +HWTEST_F(JsonUtilsTest, JsonUtilsTest008, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the test string with JsonObject. + */ + std::string testJson = R"({"JsonObjectTypeTest": "Ace Unittest"})"; + + /** + * @tc.steps: step2. get JsonValue and check results of IsValid, IsNull, IsObject, Contains and GetValue. + * @tc.expected: step2. get the JsonValue successfully and the results are correct. + */ + std::unique_ptr objectValue = JsonUtil::ParseJsonString(testJson); + ASSERT_TRUE(objectValue); + EXPECT_TRUE(objectValue->IsValid()); + EXPECT_FALSE(objectValue->IsNull()); + EXPECT_TRUE(objectValue->IsObject()); + EXPECT_TRUE(objectValue->Contains(TEST_KEY)); + EXPECT_FALSE(objectValue->Contains(TEST_FALSE_KEY)); + EXPECT_TRUE(objectValue->GetValue(TEST_KEY)->GetString() == TEST_STRING); + EXPECT_TRUE(objectValue->GetValue(TEST_FALSE_KEY)->GetString().empty()); +} + +/** + * @tc.name: JsonUtilsTest009 + * @tc.desc: Check json util function for incorrect JsonObject + * @tc.type: FUNC + * @tc.require: AR000DAQVN + * @tc.author: luoying + */ +HWTEST_F(JsonUtilsTest, JsonUtilsTest009, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the test string with incorrect JsonObject. + */ + std::string testJson = R"({"JsonObjectTypeTest": ""})"; + + /** + * @tc.steps: step2. get JsonValue and check results of IsValid, IsNull, IsObject, Contains and GetValue. + * @tc.expected: step2. get the JsonValue successfully and the results are correct. + */ + std::unique_ptr objectValue = JsonUtil::ParseJsonString(testJson); + ASSERT_TRUE(objectValue); + EXPECT_TRUE(objectValue->IsValid()); + EXPECT_FALSE(objectValue->IsNull()); + EXPECT_TRUE(objectValue->IsObject()); + EXPECT_TRUE(objectValue->Contains(TEST_KEY)); + EXPECT_TRUE(objectValue->GetValue(TEST_KEY)->GetString().empty()); +} + +/** + * @tc.name: JsonUtilsTest010 + * @tc.desc: Check json util function for array + * @tc.type: FUNC + * @tc.require: AR000DAQVN + * @tc.author: luoying + */ +HWTEST_F(JsonUtilsTest, JsonUtilsTest010, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the test string with array. + */ + std::string testJson = "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]"; + int32_t testArraySize = 10; + int32_t testArrayIndex = 5; + int32_t testArrayValue = 5; + + /** + * @tc.steps: step2. get JsonValue and check results of IsValid, IsNull, IsArray, GetArraySize and GetArrayItem. + * @tc.expected: step2. get the JsonValue successfully and the results are correct. + */ + std::unique_ptr arrayValue = JsonUtil::ParseJsonString(testJson); + ASSERT_TRUE(arrayValue); + EXPECT_TRUE(arrayValue->IsValid()); + EXPECT_FALSE(arrayValue->IsNull()); + EXPECT_TRUE(arrayValue->IsArray()); + EXPECT_TRUE(arrayValue->GetArraySize() == testArraySize); + EXPECT_TRUE(arrayValue->GetArrayItem(testArrayIndex)->GetInt() == testArrayValue); +} + +/** + * @tc.name: JsonUtilsTest011 + * @tc.desc: Check json util function for empty array + * @tc.type: FUNC + * @tc.require: AR000DAQVN + * @tc.author: luoying + */ +HWTEST_F(JsonUtilsTest, JsonUtilsTest011, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the test string with empty array. + */ + std::string testJson = "[]"; + + /** + * @tc.steps: step2. get JsonValue and check results of IsValid, IsNull, IsArray, GetArraySize and GetArrayItem. + * @tc.expected: step2. get the JsonValue successfully and the results are correct. + */ + std::unique_ptr arrayValue = JsonUtil::ParseJsonString(testJson); + ASSERT_TRUE(arrayValue); + EXPECT_TRUE(arrayValue->IsValid()); + EXPECT_FALSE(arrayValue->IsNull()); + EXPECT_TRUE(arrayValue->IsArray()); + EXPECT_TRUE(arrayValue->GetArraySize() == 0); +} + +/** + * @tc.name: JsonUtilsTest012 + * @tc.desc: Check json util function for empty test string + * @tc.type: FUNC + * @tc.require: AR000DAQVN + * @tc.author: luoying + */ +HWTEST_F(JsonUtilsTest, JsonUtilsTest012, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the empty test string. + */ + std::string testJson; + + /** + * @tc.steps: step2. get JsonValue and check results of IsValid, IsNull. + * @tc.expected: step2. get the JsonValue successfully and the results are correct. + */ + std::unique_ptr emptyValue = JsonUtil::ParseJsonString(testJson); + ASSERT_TRUE(emptyValue); + EXPECT_FALSE(emptyValue->IsValid()); + EXPECT_TRUE(emptyValue->IsNull()); +} + +/** + * @tc.name: JsonUtilsTest013 + * @tc.desc: Check json util function for illegal type value + * @tc.type: FUNC + * @tc.require: AR000DAQVN + * @tc.author: luoying + */ +HWTEST_F(JsonUtilsTest, JsonUtilsTest013, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the test string with illegal type value. + */ + std::string testJson = "{Ace Unittest}"; + + /** + * @tc.steps: step2. get JsonValue and check results of IsValid, IsNull. + * @tc.expected: step2. get the JsonValue successfully and the results are correct. + */ + std::unique_ptr illegalValue = JsonUtil::ParseJsonString(testJson); + ASSERT_TRUE(illegalValue); + EXPECT_FALSE(illegalValue->IsValid()); + EXPECT_TRUE(illegalValue->IsNull()); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/base/test/unittest/mock_system_properties.cpp b/frameworks/base/test/unittest/mock_system_properties.cpp new file mode 100644 index 00000000..c2c78701 --- /dev/null +++ b/frameworks/base/test/unittest/mock_system_properties.cpp @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "base/utils/system_properties.h" + +namespace OHOS::Ace { + +float SystemProperties::GetWghtScale() +{ + return 1.0f; +} + +} // namespace OHOS::Ace diff --git a/frameworks/base/test/unittest/task_executor/BUILD.gn b/frameworks/base/test/unittest/task_executor/BUILD.gn new file mode 100644 index 00000000..d6048de5 --- /dev/null +++ b/frameworks/base/test/unittest/task_executor/BUILD.gn @@ -0,0 +1,49 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +if (is_standard_system) { + module_output_path = "ace_engine_standard/frameworkbasicability/executor" +} + +ohos_unittest("TaskExecutorsTest") { + module_out_path = module_output_path + + sources = [ "task_executor_test.cpp" ] + + configs = [ + "$ace_root:ace_test_config", + "$flutter_root:flutter_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$flutter_root:ace_libicu_ohos", + "$flutter_root:third_party_flutter_engine_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +group("unittest") { + testonly = true + + deps = [ ":TaskExecutorsTest" ] +} diff --git a/frameworks/base/test/unittest/task_executor/task_executor_test.cpp b/frameworks/base/test/unittest/task_executor/task_executor_test.cpp new file mode 100644 index 00000000..e71517dc --- /dev/null +++ b/frameworks/base/test/unittest/task_executor/task_executor_test.cpp @@ -0,0 +1,265 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "flutter/common/task_runners.h" +#include "flutter/fml/task_runner.h" +#include "gtest/gtest.h" + +#include "adapter/common/cpp/flutter_task_executor.h" +#include "base/thread/background_task_executor.h" +#include "base/thread/task_executor.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +const std::string UITASK = "ui task has executed"; +const std::string UISYNCTASK = "ui sync task has executed"; +const std::string PLATFORMTASK = "platform task has executed"; +const std::string PLATFORMSYNCTASK = "platform sync task has executed"; +const std::string IOTASK = "io task has executed"; +const std::string IOSYNCTASK = "io sync task has executed"; +const std::string JSTASK = "js task has executed"; +const std::string JSSYNCTASK = "js sync task has executed"; +const std::string BACKGROUNDTASK = "background task has executed"; +const std::string BACKGROUNDSYNCTASK = "background sync task has executed"; +const std::string LABEL = "task executor test"; +const std::string THREADFIRST = "thread_1"; +const std::string THREADSECOND = "thread_2"; +const std::string THREADTHIRD = "thread_3"; +const std::string THREADFOURTH = "thread_4"; +const uint32_t DELAYTIME = 5; + +} // namespace + +class TaskExecutorsTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); + void InitTaskExecutor(); + void GetString(const std::string& task, std::promise&& taskPromise); + +protected: + RefPtr taskExecutor_; + std::string label_ = LABEL; + std::unique_ptr ThreadFirst_ = std::make_unique(THREADFIRST); + std::unique_ptr ThreadSecond_ = std::make_unique(THREADSECOND); + std::unique_ptr ThreadThird_ = std::make_unique(THREADTHIRD); + std::unique_ptr ThreadFourth_ = std::make_unique(THREADFOURTH); + fml::RefPtr platform_ = ThreadFirst_->GetTaskRunner(); + fml::RefPtr gpu_ = ThreadSecond_->GetTaskRunner(); + fml::RefPtr ui_ = ThreadThird_->GetTaskRunner(); + fml::RefPtr io_ = ThreadFourth_->GetTaskRunner(); +}; + +void TaskExecutorsTest::SetUpTestCase() {} + +void TaskExecutorsTest::TearDownTestCase() {} + +void TaskExecutorsTest::SetUp() +{ + InitTaskExecutor(); +} + +void TaskExecutorsTest::TearDown() {} + +void TaskExecutorsTest::InitTaskExecutor() +{ + std::promise promiseInit; + std::future futureInit = promiseInit.get_future(); + flutter::TaskRunners taskRunner(label_, platform_, gpu_, ui_, io_); + auto flutterTaskExecutor = Referenced::MakeRefPtr(); + + platform_->PostTask([&promiseInit, flutterTaskExecutor]() { + flutterTaskExecutor->InitPlatformThread(); + promiseInit.set_value(); + }); + + flutterTaskExecutor->InitJsThread(); + flutterTaskExecutor->InitOtherThreads(taskRunner); + futureInit.wait(); + + taskExecutor_ = flutterTaskExecutor; +} + +void TaskExecutorsTest::GetString(const std::string& task, std::promise&& taskPromise) +{ + taskPromise.set_value(task); +} + +/** + * @tc.name: TaskExecutorsTest001 + * @tc.desc: test synchronous and asynchronous execution of the UI thread + * @tc.type: FUNC + */ +HWTEST_F(TaskExecutorsTest, TaskExecutorsTest001, TestSize.Level0) +{ + /** + * @tc.steps: step1. set the synchronous task. + * @tc.expected: step1. task gets executed. + */ + std::string uiTask; + taskExecutor_->PostSyncTask([&uiTask]() { uiTask = UISYNCTASK; }, TaskExecutor::TaskType::UI); + ASSERT_TRUE(uiTask == UISYNCTASK); + + /** + * @tc.steps: step2. set asynchronous task. + * @tc.expected: step2. task gets executed. + */ + std::promise taskPromise; + std::future taskFuture = taskPromise.get_future(); + taskExecutor_->PostDelayedTask([this, &taskPromise]() { this->GetString(UITASK, std::move(taskPromise)); }, + TaskExecutor::TaskType::UI, DELAYTIME); + ASSERT_TRUE(taskFuture.get() == UITASK); + + /** + * @tc.steps: step3. set empty task. + * @tc.expected: step3. result return failed. + */ + ASSERT_FALSE(taskExecutor_->PostTask(nullptr, TaskExecutor::TaskType::UI)); +} + +/** + * @tc.name: TaskExecutorsTest002 + * @tc.desc: test synchronous and asynchronous execution of the PLATFORM thread + * @tc.type: FUNC + */ +HWTEST_F(TaskExecutorsTest, TaskExecutorsTest002, TestSize.Level0) +{ + /** + * @tc.steps: step1. set the synchronous task. + * @tc.expected: step1. task gets executed. + */ + std::string platformTask; + taskExecutor_->PostSyncTask( + [&platformTask]() { platformTask = PLATFORMSYNCTASK; }, TaskExecutor::TaskType::PLATFORM); + ASSERT_TRUE(platformTask == PLATFORMSYNCTASK); + + /** + * @tc.steps: step2. set asynchronous task. + * @tc.expected: step2. task gets executed. + */ + std::promise taskPromise; + std::future taskFuture = taskPromise.get_future(); + taskExecutor_->PostDelayedTask([this, &taskPromise]() { this->GetString(PLATFORMTASK, std::move(taskPromise)); }, + TaskExecutor::TaskType::PLATFORM, DELAYTIME); + ASSERT_TRUE(taskFuture.get() == PLATFORMTASK); + + /** + * @tc.steps: step3. set empty task. + * @tc.expected: step3. result return failed. + */ + ASSERT_FALSE(taskExecutor_->PostTask(nullptr, TaskExecutor::TaskType::PLATFORM)); +} + +/** + * @tc.name: TaskExecutorsTest003 + * @tc.desc: test synchronous and asynchronous execution of the IO thread + * @tc.type: FUNC + */ +HWTEST_F(TaskExecutorsTest, TaskExecutorsTest003, TestSize.Level0) +{ + /** + * @tc.steps: step1. set the synchronous task. + * @tc.expected: step1. task gets executed. + */ + std::string ioTask; + taskExecutor_->PostSyncTask([&ioTask]() { ioTask = IOSYNCTASK; }, TaskExecutor::TaskType::IO); + ASSERT_TRUE(ioTask == IOSYNCTASK); + + /** + * @tc.steps: step2. set asynchronous task. + * @tc.expected: step2. task gets executed. + */ + std::promise taskPromise; + std::future taskFuture = taskPromise.get_future(); + taskExecutor_->PostDelayedTask([this, &taskPromise]() { this->GetString(IOTASK, std::move(taskPromise)); }, + TaskExecutor::TaskType::IO, DELAYTIME); + ASSERT_TRUE(taskFuture.get() == IOTASK); + + /** + * @tc.steps: step3. set empty task. + * @tc.expected: step3. result return failed. + */ + ASSERT_FALSE(taskExecutor_->PostTask(nullptr, TaskExecutor::TaskType::IO)); +} + +/** + * @tc.name: TaskExecutorsTest004 + * @tc.desc: test synchronous and asynchronous execution of the JS thread + * @tc.type: FUNC + */ +HWTEST_F(TaskExecutorsTest, TaskExecutorsTest004, TestSize.Level0) +{ + /** + * @tc.steps: step1. set the synchronous task. + * @tc.expected: step1. task gets executed. + */ + std::string jsTask; + taskExecutor_->PostSyncTask([&jsTask]() { jsTask = JSSYNCTASK; }, TaskExecutor::TaskType::JS); + ASSERT_TRUE(jsTask == JSSYNCTASK); + + /** + * @tc.steps: step2. set asynchronous task. + * @tc.expected: step2. task gets executed. + */ + std::promise taskPromise; + std::future taskFuture = taskPromise.get_future(); + taskExecutor_->PostDelayedTask([this, &taskPromise]() { this->GetString(JSTASK, std::move(taskPromise)); }, + TaskExecutor::TaskType::JS, DELAYTIME); + ASSERT_TRUE(taskFuture.get() == JSTASK); + + /** + * @tc.steps: step3. set empty task. + * @tc.expected: step3. result return failed. + */ + ASSERT_FALSE(taskExecutor_->PostTask(nullptr, TaskExecutor::TaskType::JS)); +} + +/** + * @tc.name: TaskExecutorsTest005 + * @tc.desc: test synchronous and asynchronous execution of the BACKGROUND thread + * @tc.type: FUNC + */ +HWTEST_F(TaskExecutorsTest, TaskExecutorsTest005, TestSize.Level0) +{ + /** + * @tc.steps: step1. set the synchronous task. + * @tc.expected: step1. result return failed. + */ + ASSERT_FALSE(taskExecutor_->PostSyncTask([]() {}, TaskExecutor::TaskType::BACKGROUND)); + + /** + * @tc.steps: step2. set asynchronous task. + * @tc.expected: step2. task gets executed. + */ + std::promise taskPromise; + std::future taskFuture = taskPromise.get_future(); + taskExecutor_->PostTask([this, &taskPromise]() { this->GetString(BACKGROUNDTASK, std::move(taskPromise)); }, + TaskExecutor::TaskType::BACKGROUND); + ASSERT_TRUE(taskFuture.get() == BACKGROUNDTASK); + + /** + * @tc.steps: step3. set empty task. + * @tc.expected: step3. result return failed. + */ + ASSERT_FALSE(taskExecutor_->PostTask(nullptr, TaskExecutor::TaskType::BACKGROUND)); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/base/thread/background_task_executor.cpp b/frameworks/base/thread/background_task_executor.cpp new file mode 100644 index 00000000..60f56491 --- /dev/null +++ b/frameworks/base/thread/background_task_executor.cpp @@ -0,0 +1,164 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "base/thread/background_task_executor.h" + +#include + +#include "base/log/log.h" +#include "base/thread/thread_util.h" + +namespace OHOS::Ace { +namespace { + +const size_t MAX_BACKGROUND_THREADS = 8; + +void SetThreadName(uint32_t threadNo) +{ + std::string name("ace.bg."); + name.append(std::to_string(threadNo)); + SetCurrentThreadName(name); +} + +} // namespace + +BackgroundTaskExecutor& BackgroundTaskExecutor::GetInstance() +{ + static BackgroundTaskExecutor instance; + return instance; +} + +BackgroundTaskExecutor::BackgroundTaskExecutor() : maxThreadNum_(MAX_BACKGROUND_THREADS) +{ + if (maxThreadNum_ > 1) { + // Start other threads in the first created thread. + PostTask([this, num = maxThreadNum_ - 1]() { StartNewThreads(num); }); + } + + // Make sure there is at least 1 thread in background thread pool. + StartNewThreads(1); +} + +BackgroundTaskExecutor::~BackgroundTaskExecutor() +{ + std::list threads; + + { + std::lock_guard lock(mutex_); + running_ = false; + condition_.notify_all(); + threads = std::move(threads_); + } + + for (auto& threadInPool : threads) { + threadInPool.join(); + } +} + +bool BackgroundTaskExecutor::PostTask(Task&& task) +{ + if (!task) { + return false; + } + + std::lock_guard lock(mutex_); + if (!running_) { + return false; + } + tasks_.emplace_back(std::move(task)); + condition_.notify_one(); + return true; +} + +bool BackgroundTaskExecutor::PostTask(const Task& task) +{ + if (!task) { + return false; + } + + std::lock_guard lock(mutex_); + if (!running_) { + return false; + } + tasks_.emplace_back(task); + condition_.notify_one(); + return true; +} + +void BackgroundTaskExecutor::StartNewThreads(size_t num) +{ + uint32_t currentThreadNo = 0; + + { + std::lock_guard lock(mutex_); + if (!running_ || currentThreadNum_ >= maxThreadNum_) { + return; + } + if (currentThreadNum_ + num > maxThreadNum_) { + num = maxThreadNum_ - currentThreadNum_; + } + currentThreadNo = currentThreadNum_ + 1; + currentThreadNum_ += num; + } + + // Start new threads. + std::list newThreads; + for (size_t idx = 0; idx < num; ++idx) { + newThreads.emplace_back(std::bind(&BackgroundTaskExecutor::ThreadLoop, this, currentThreadNo + idx)); + } + + { + std::lock_guard lock(mutex_); + if (running_) { + threads_.splice(threads_.end(), newThreads); + } + } + + for (auto& newThread : newThreads) { + // Join the new thread if stop running. + if (newThread.joinable()) { + newThread.join(); + } + } +} + +void BackgroundTaskExecutor::ThreadLoop(uint32_t threadNo) +{ + LOGI("Background thread is started"); + + SetThreadName(threadNo); + + Task task; + std::unique_lock lock(mutex_); + while (running_) { + if (tasks_.empty()) { + condition_.wait(lock); + continue; + } + + task = std::move(tasks_.front()); + tasks_.pop_front(); + + lock.unlock(); + // Execute the task and clear after execution. + task(); + task = nullptr; + lock.lock(); + } + + LOGD("Background thread is stopped"); +} + +} // namespace OHOS::Ace diff --git a/frameworks/base/thread/background_task_executor.h b/frameworks/base/thread/background_task_executor.h new file mode 100644 index 00000000..20feae84 --- /dev/null +++ b/frameworks/base/thread/background_task_executor.h @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_THREAD_BACKGROUND_TASK_EXECUTOR_H +#define FOUNDATION_ACE_FRAMEWORKS_BASE_THREAD_BACKGROUND_TASK_EXECUTOR_H + +#include +#include + +#include "base/utils/noncopyable.h" + +namespace OHOS::Ace { + +class BackgroundTaskExecutor { + ACE_DISALLOW_COPY_AND_MOVE(BackgroundTaskExecutor); + +public: + using Task = std::function; + + static BackgroundTaskExecutor& GetInstance(); + + bool PostTask(Task&& task); + bool PostTask(const Task& task); + +private: + BackgroundTaskExecutor(); + ~BackgroundTaskExecutor(); + + void StartNewThreads(size_t num = 1); + void ThreadLoop(uint32_t threadNo); + + std::mutex mutex_; + std::condition_variable condition_; + std::list tasks_; + std::list threads_; + size_t currentThreadNum_ { 0 }; + size_t maxThreadNum_ { 0 }; + bool running_ { true }; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BASE_THREAD_BACKGROUND_TASK_EXECUTOR_H diff --git a/frameworks/base/thread/cancelable_callback.h b/frameworks/base/thread/cancelable_callback.h new file mode 100644 index 00000000..72f011a6 --- /dev/null +++ b/frameworks/base/thread/cancelable_callback.h @@ -0,0 +1,170 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_THREAD_CANCELABEL_CALLBACK_H +#define FOUNDATION_ACE_FRAMEWORKS_BASE_THREAD_CANCELABEL_CALLBACK_H + +#include +#include +#include + +#include "base/memory/referenced.h" +#include "base/utils/macros.h" + +namespace OHOS::Ace { + +template +class CancelableCallback; + +template +class CancelableCallback final { +public: + using FunctionType = std::function; + + CancelableCallback() = default; + explicit CancelableCallback(const FunctionType& callback) + : impl_(callback ? Referenced::MakeRefPtr(callback) : nullptr) + {} + explicit CancelableCallback(FunctionType&& callback) + : impl_(callback ? Referenced::MakeRefPtr(std::move(callback)) : nullptr) + {} + ~CancelableCallback() = default; + + void Reset(const FunctionType& callback, bool needCancel = true, bool waitUntilCompleted = false); + void Reset(FunctionType&& callback, bool needCancel = true, bool waitUntilCompleted = false); + bool WaitUntilComplete(); + bool Cancel(bool waitUntilCompleted = false); + void operator()(V&&... values) const; + operator bool() const + { + return impl_ && impl_->callback_; + } + +private: + enum : int32_t { + READY, + CANCELED, + RUNNING, + COMPLETED, + }; + + struct Callback final : public Referenced { + explicit Callback(const FunctionType& callback) : callback_(callback) {} + explicit Callback(FunctionType&& callback) : callback_(std::move(callback)) {} + ~Callback() override + { + int32_t status = status_.load(std::memory_order_relaxed); + ACE_DCHECK(status != RUNNING); + if (status == READY) { + promise_.set_value(CANCELED); + } + } + + FunctionType callback_; + std::atomic status_ { READY }; + std::promise promise_; + std::shared_future future_ { promise_.get_future() }; + }; + + RefPtr impl_; +}; + +template +void CancelableCallback::Reset( + const CancelableCallback::FunctionType& callback, bool needCancel, bool waitUntilCompleted) +{ + if (needCancel) { + Cancel(waitUntilCompleted); + } + impl_ = callback ? Referenced::MakeRefPtr(callback) : nullptr; +} + +template +void CancelableCallback::Reset( + CancelableCallback::FunctionType&& callback, bool needCancel, bool waitUntilCompleted) +{ + if (needCancel) { + Cancel(waitUntilCompleted); + } + impl_ = callback ? Referenced::MakeRefPtr(std::move(callback)) : nullptr; +} + +template +bool CancelableCallback::WaitUntilComplete() +{ + RefPtr impl(std::move(impl_)); + if (!impl) { + return false; + } + + switch (impl->status_.load(std::memory_order_relaxed)) { + case READY: + case RUNNING: { + std::shared_future future(impl->future_); + impl.Reset(); + return future.get() == COMPLETED; + } + case COMPLETED: + return true; + case CANCELED: + default: + return false; + } +} + +template +bool CancelableCallback::Cancel(bool waitUntilCompleted) +{ + RefPtr impl(std::move(impl_)); + if (!impl) { + return true; + } + + int32_t status = READY; + if (impl->status_.compare_exchange_strong(status, CANCELED, std::memory_order_relaxed)) { + impl->promise_.set_value(CANCELED); + return true; + } else if (status == CANCELED) { + return true; + } + + if (waitUntilCompleted && status == RUNNING) { + std::shared_future future(impl->future_); + impl.Reset(); + status = future.get(); + ACE_DCHECK(status == COMPLETED); + } + return false; +} + +template +void CancelableCallback::operator()(V&&... values) const +{ + RefPtr impl(std::move(impl_)); + if (!impl) { + return; + } + + int32_t status = READY; + if (impl->status_.compare_exchange_strong(status, RUNNING, std::memory_order_relaxed)) { + impl->callback_(std::forward(values)...); + impl->status_.store(COMPLETED); + impl->promise_.set_value(COMPLETED); + } +} + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BASE_THREAD_CANCELABEL_CALLBACK_H diff --git a/frameworks/base/thread/task_executor.h b/frameworks/base/thread/task_executor.h new file mode 100644 index 00000000..122961b8 --- /dev/null +++ b/frameworks/base/thread/task_executor.h @@ -0,0 +1,319 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_THREAD_TASK_EXECUTOR_H +#define FOUNDATION_ACE_FRAMEWORKS_BASE_THREAD_TASK_EXECUTOR_H + +#include + +#include "base/memory/ace_type.h" +#include "base/thread/cancelable_callback.h" +#include "base/utils/noncopyable.h" + +namespace OHOS::Ace { + +class TaskExecutor : public AceType { + DECLARE_ACE_TYPE(TaskExecutor, AceType); + ACE_DISALLOW_COPY_AND_MOVE(TaskExecutor); + +public: + using Task = std::function; + using CancelableTask = CancelableCallback; + + enum class TaskType : uint32_t { + PLATFORM = 0, + UI, + IO, + GPU, + JS, + BACKGROUND, + }; + + ~TaskExecutor() override = default; + + /** + * Post a task to the specified thread. + * + * @param task Task which need execution. + * @param type FrontendType of task, used to specify the thread. + * @return Returns 'true' whether task has been post successfully. + */ + bool PostTask(Task&& task, TaskType type) const + { + return PostDelayedTask(std::move(task), type, 0); + } + + /** + * Post a task to the specified thread. + * + * @param task Task which need execution. + * @param type FrontendType of task, used to specify the thread. + * @return Returns 'true' if task has been posted successfully. + */ + bool PostTask(const Task& task, TaskType type) const + { + return PostDelayedTask(task, type, 0); + } + + /** + * Post a delayed task to the specified thread. + * Never allow to post a background delayed task. + * + * @param task Task which need execution. + * @param type FrontendType of task, used to specify the thread. + * @param delayTime Wait a period of time in milliseconds before execution. + * @return Returns 'true' if task has been posted successfully. + */ + bool PostDelayedTask(Task&& task, TaskType type, uint32_t delayTime) const + { + if (delayTime > 0 && type == TaskType::BACKGROUND) { + return false; + } + return OnPostTask(std::move(task), type, delayTime); + } + + /** + * Post a delayed task to the specified thread. + * Never allow to post a background delayed task. + * + * @param task Task which need execution. + * @param type FrontendType of task, used to specify the thread. + * @param delayTime Wait a period of time in milliseconds before execution. + * @return Returns 'true' if task has been posted successfully. + */ + bool PostDelayedTask(const Task& task, TaskType type, uint32_t delayTime) const + { + return PostDelayedTask(Task(task), type, delayTime); + } + + /** + * Post a task to the specified thread and wait until finished executing. + * Never allow to post a background synchronous task. + * + * @param task Task which need execution. + * @param type FrontendType of task, used to specify the thread. + * @return Returns 'true' whether task has been executed. + */ + bool PostSyncTask(Task&& task, TaskType type) const + { + if (!task || type == TaskType::BACKGROUND) { + return false; + } else if (WillRunOnCurrentThread(type)) { + task(); + return true; + } + return PostTaskAndWait(CancelableTask(std::move(task)), type); + } + + /** + * Post a task to the specified thread and wait until finished executing. + * Never allow to post a background synchronous task. + * + * @param task Task which need execution. + * @param type FrontendType of task, used to specify the thread. + * @return Returns 'true' whether task has been executed. + */ + bool PostSyncTask(const Task& task, TaskType type) const + { + return PostSyncTask(Task(task), type); + } + + /** + * Post a cancelable task to the specified thread and wait until finished executing. + * Never allow to post a background synchronous task. + * + * @param task Task which need execution. + * @param type FrontendType of task, used to specify the thread. + * @return Returns 'true' whether task has been executed. + */ + bool PostSyncTask(CancelableTask&& task, TaskType type) const + { + if (!task || type == TaskType::BACKGROUND) { + return false; + } else if (WillRunOnCurrentThread(type)) { + CancelableTask avatar(task); + task(); + return avatar.WaitUntilComplete(); + } + return PostTaskAndWait(std::move(task), type); + } + + /** + * Post a cancelable task to the specified thread and wait until finished executing. + * Never allow to post a background synchronous task. + * + * @param task Task which need execution. + * @param type FrontendType of task, used to specify the thread. + * @return Returns 'true' whether task has been executed. + */ + bool PostSyncTask(const CancelableTask& task, TaskType type) const + { + return PostSyncTask(CancelableTask(task), type); + } + + virtual void AddTaskObserver(Task&& callback) = 0; + virtual void RemoveTaskObserver() = 0; + virtual bool WillRunOnCurrentThread(TaskType type) const = 0; + +protected: + TaskExecutor() = default; + + virtual bool OnPostTask(Task&& task, TaskType type, uint32_t delayTime) const = 0; + +private: + bool PostTaskAndWait(CancelableTask&& task, TaskType type) const + { + return OnPostTask(Task(task), type, 0) && task.WaitUntilComplete(); + } +}; + +class SingleTaskExecutor final { +public: + using Task = TaskExecutor::Task; + using CancelableTask = TaskExecutor::CancelableTask; + using TaskType = TaskExecutor::TaskType; + + SingleTaskExecutor(RefPtr&& taskExecutor, TaskType type) + : taskExecutor_(std::move(taskExecutor)), type_(type) + {} + SingleTaskExecutor(const RefPtr& taskExecutor, TaskType type) + : taskExecutor_(taskExecutor), type_(type) + {} + ~SingleTaskExecutor() = default; + + static SingleTaskExecutor Make(RefPtr&& taskExecutor, TaskType type) + { + return SingleTaskExecutor(std::move(taskExecutor), type); + } + + static SingleTaskExecutor Make(const RefPtr& taskExecutor, TaskType type) + { + return SingleTaskExecutor(taskExecutor, type); + } + + /** + * Post a task to the specified thread. + * + * @param task Task which need execution. + * @return Returns 'true' whether task has been post successfully. + */ + bool PostTask(Task&& task) const + { + return taskExecutor_ ? taskExecutor_->PostTask(std::move(task), type_) : false; + } + + /** + * Post a task to the specified thread. + * + * @param task Task which need execution. + * @return Returns 'true' whether task has been post successfully. + */ + bool PostTask(const Task& task) const + { + return taskExecutor_ ? taskExecutor_->PostTask(task, type_) : false; + } + + /** + * Post a delayed task to the specified thread. + * Never allow to post a background delayed task. + * + * @param task Task which need execution. + * @param delayTime Wait a period of time in milliseconds before execution. + * @return Returns 'true' if task has been posted successfully. + */ + bool PostDelayedTask(Task&& task, uint32_t delayTime) const + { + return taskExecutor_ ? taskExecutor_->PostDelayedTask(std::move(task), type_, delayTime) : false; + } + + /** + * Post a delayed task to the specified thread. + * Never allow to post a background delayed task. + * + * @param task Task which need execution. + * @param delayTime Wait a period of time in milliseconds before execution. + * @return Returns 'true' if task has been posted successfully. + */ + bool PostDelayedTask(const Task& task, uint32_t delayTime) const + { + return taskExecutor_ ? taskExecutor_->PostDelayedTask(task, type_, delayTime) : false; + } + + /** + * Post a task to the specified thread and wait until finished executing. + * Never allow to post a background synchronous task. + * + * @param task Task which need execution. + * @return Returns 'true' whether task has been executed. + */ + bool PostSyncTask(Task&& task) const + { + return taskExecutor_ ? taskExecutor_->PostSyncTask(std::move(task), type_) : false; + } + + /** + * Post a task to the specified thread and wait until finished executing. + * Never allow to post a background synchronous task. + * + * @param task Task which need execution. + * @return Returns 'true' whether task has been executed. + */ + bool PostSyncTask(const Task& task) const + { + return taskExecutor_ ? taskExecutor_->PostSyncTask(task, type_) : false; + } + + /** + * Post a cancelable task to the specified thread and wait until finished executing. + * Never allow to post a background synchronous task. + * + * @param task Task which need execution. + * @return Returns 'true' whether task has been executed. + */ + bool PostSyncTask(CancelableTask&& task) const + { + return taskExecutor_ ? taskExecutor_->PostSyncTask(std::move(task), type_) : false; + } + + /** + * Post a cancelable task to the specified thread and wait until finished executing. + * Never allow to post a background synchronous task. + * + * @param task Task which need execution. + * @return Returns 'true' whether task has been executed. + */ + bool PostSyncTask(const CancelableTask& task) const + { + return taskExecutor_ ? taskExecutor_->PostSyncTask(task, type_) : false; + } + + RefPtr GetTaskExecutor() const + { + return taskExecutor_; + } + + bool IsRunOnCurrentThread() const + { + return taskExecutor_ ? taskExecutor_->WillRunOnCurrentThread(type_) : false; + } + +private: + RefPtr taskExecutor_; + TaskExecutor::TaskType type_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BASE_THREAD_TASK_EXECUTOR_H diff --git a/frameworks/base/thread/thread_util.h b/frameworks/base/thread/thread_util.h new file mode 100644 index 00000000..6f9a05f2 --- /dev/null +++ b/frameworks/base/thread/thread_util.h @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_THREAD_THREAD_UTIL_H +#define FOUNDATION_ACE_FRAMEWORKS_BASE_THREAD_THREAD_UTIL_H + +#include + +namespace OHOS::Ace { + +void SetCurrentThreadName(const std::string& name); + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BASE_THREAD_THREAD_UTIL_H diff --git a/frameworks/base/utils/base_id.cpp b/frameworks/base/utils/base_id.cpp new file mode 100644 index 00000000..6ba96525 --- /dev/null +++ b/frameworks/base/utils/base_id.cpp @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "base/utils/base_id.h" + +#include + +namespace OHOS::Ace { +namespace { + +std::atomic g_currentId = { 0 }; + +} + +BaseId::BaseId() : id_(++g_currentId) {} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/base/utils/base_id.h b/frameworks/base/utils/base_id.h new file mode 100644 index 00000000..a7e25caa --- /dev/null +++ b/frameworks/base/utils/base_id.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_BASE_ID_H +#define FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_BASE_ID_H + +#include + +#include "base/utils/macros.h" + +namespace OHOS::Ace { + +class ACE_EXPORT BaseId { +public: + using IdType = uint64_t; + + BaseId(); + virtual ~BaseId() = default; + + IdType GetId() const + { + return id_; + } + +private: + IdType id_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_BASE_ID_H diff --git a/frameworks/base/utils/date_util.cpp b/frameworks/base/utils/date_util.cpp new file mode 100644 index 00000000..4ae583dc --- /dev/null +++ b/frameworks/base/utils/date_util.cpp @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "base/utils/date_util.h" + +#include +#include + +namespace OHOS::Ace { + +Date Date::Current() +{ + Date date; + auto now = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now()); + auto local = std::localtime(&now); + if (local == nullptr) { + return date; + } + date.year = local->tm_year + 1900; // local date start from 1900 + date.month = local->tm_mon + 1; // local month start from 0 to 11, need add one. + date.day = local->tm_mday; + date.week = local->tm_wday; + return date; +} + +bool Date::IsLeapYear(int32_t year) +{ + return ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0); +} + +int32_t Date::DayOfMonth(int32_t year, int32_t month) +{ + int32_t day = 0; + switch (month) { + case 1: + case 3: + case 5: + case 7: + case 8: + case 10: + case 12: + day = 31; + break; + case 4: + case 6: + case 9: + case 11: + day = 30; + break; + case 2: + day = IsLeapYear(year) ? 29 : 28; + break; + default: + day = 0; + } + return day; +} + +int32_t Date::CalculateWeekDay(int32_t year, int32_t month, int32_t day) +{ + if (month == 1 || month == 2) { + month += 12; + year--; + } + + // Day of the week calculation formula + return (day + 2 * month + 3 * (month + 1) / 5 + year + year / 4 - year / 100 + year / 400) % 7; +} + +} // namespace OHOS::Ace diff --git a/frameworks/base/utils/date_util.h b/frameworks/base/utils/date_util.h new file mode 100644 index 00000000..d5727c6d --- /dev/null +++ b/frameworks/base/utils/date_util.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_DATE_UTIL_H +#define FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_DATE_UTIL_H + +#include + +namespace OHOS::Ace { + +struct Date { + Date() = default; + Date(uint32_t year, uint32_t month, uint32_t day) : year(year), month(month), day(day) {} + ~Date() = default; + + static Date Current(); + static int32_t DayOfMonth(int32_t year, int32_t month); + static bool IsLeapYear(int32_t year); + static int32_t CalculateWeekDay(int32_t year, int32_t month, int32_t day); + + uint32_t year = 1900; + uint32_t month = 0; + uint32_t day = 1; + uint32_t week = 0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_DATE_UTIL_H diff --git a/frameworks/base/utils/device_config.h b/frameworks/base/utils/device_config.h new file mode 100644 index 00000000..990e33d8 --- /dev/null +++ b/frameworks/base/utils/device_config.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_DEVICE_CONFIG_H +#define FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_DEVICE_CONFIG_H + +#include +#include + +#include "base/utils/system_properties.h" + +namespace OHOS::Ace { + +struct DeviceConfig { + DeviceOrientation orientation { DeviceOrientation::PORTRAIT }; + double density { 1.0 }; + DeviceType deviceType { DeviceType::PHONE }; + double fontRatio { 1.0 }; + ColorMode colorMode { ColorMode::LIGHT }; +}; + +struct DeviceResourceInfo { + DeviceConfig deviceConfig; + std::vector resourcehandlers; + std::string packagePath; + int32_t themeId { -1 }; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_DEVICE_CONFIG_H diff --git a/frameworks/base/utils/device_type.h b/frameworks/base/utils/device_type.h new file mode 100644 index 00000000..9cf0a4d1 --- /dev/null +++ b/frameworks/base/utils/device_type.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_DEVICE_TYPE_H +#define FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_DEVICE_TYPE_H + +namespace OHOS::Ace { + +enum class DeviceType { + PHONE, + TV, + WATCH, + CAR, + TABLET, + UNKNOWN, +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_DEVICE_TYPE_H diff --git a/frameworks/base/utils/event_callback.h b/frameworks/base/utils/event_callback.h new file mode 100644 index 00000000..1db7fe52 --- /dev/null +++ b/frameworks/base/utils/event_callback.h @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_EVENT_CALLBACK_H +#define FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_EVENT_CALLBACK_H + +#include + +#include "base/utils/base_id.h" +#include "base/utils/macros.h" + +namespace OHOS::Ace { + +template +class EventCallback; + +template +class EventCallback : public BaseId { +public: + using FunctionType = std::function; + + EventCallback() : callback_(nullptr) {} + explicit EventCallback(FunctionType&& callback) : callback_(std::move(callback)) {} + explicit EventCallback(const FunctionType& callback) : callback_(callback) {} + + ~EventCallback() override = default; + + // Notice: uses operator bool to judge its legitimacy. + R operator()(Args&&... args) const + { + return callback_(std::forward(args)...); + } + + explicit operator bool() const + { + return callback_ != nullptr; + } + + bool operator==(std::nullptr_t) const + { + return callback_ == nullptr; + } + + bool operator!=(std::nullptr_t) const + { + return callback_ != nullptr; + } + + bool operator==(const EventCallback& callback) const + { + return GetId() == callback.GetId(); + } + + bool operator<(const EventCallback& callback) const + { + return GetId() < callback.GetId(); + } + + const FunctionType& GetCallback() const + { + return callback_; + } + +private: + FunctionType callback_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_EVENT_CALLBACK_H diff --git a/frameworks/base/utils/label_target.h b/frameworks/base/utils/label_target.h new file mode 100644 index 00000000..ce8ea51a --- /dev/null +++ b/frameworks/base/utils/label_target.h @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_LABEL_TARGET_H +#define FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_LABEL_TARGET_H + +#include + +#include "base/memory/ace_type.h" + +namespace OHOS::Ace { + +using LabelTriggerClickHandler = std::function; +class LabelTrigger : public AceType { + DECLARE_ACE_TYPE(LabelTrigger, AceType); + +public: + LabelTrigger() = default; + ~LabelTrigger() override = default; + + void Click() + { + if (clickHandler_) { + clickHandler_(); + } + } + + LabelTriggerClickHandler clickHandler_; +}; + +class LabelTarget : public virtual AceType { + DECLARE_ACE_TYPE(LabelTarget, AceType); + +public: + LabelTarget() : trigger_(AceType::MakeRefPtr()) {}; + ~LabelTarget() override = default; + + const RefPtr& GetTrigger() const + { + return trigger_; + } + +private: + RefPtr trigger_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_LABEL_TARGET_H diff --git a/frameworks/base/utils/linear_map.h b/frameworks/base/utils/linear_map.h new file mode 100644 index 00000000..43532852 --- /dev/null +++ b/frameworks/base/utils/linear_map.h @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_LINEAR_MAP_H +#define FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_LINEAR_MAP_H + +#include +#include + +namespace OHOS::Ace { +template +struct LinearMapNode { + const char* key; + T value; +}; + +// the key type K must can be compared. +template +struct LinearEnumMapNode { + K key; + V value; +}; + +// these binary search functions in linear map, so the map must be sorted by key. +template +int64_t BinarySearchFindIndex(const LinearMapNode* vec, size_t length, const char* key) +{ + auto it = std::lower_bound( + vec, vec + length, key, [](LinearMapNode lhs, const char* key) { return strcmp(lhs.key, key) < 0; }); + if (it == vec + length || strcmp(it->key, key) != 0) { + return -1; + } else { + return it - vec; + } +} + +template +int64_t BinarySearchFindIndex(const LinearEnumMapNode* vec, size_t length, K key) +{ + auto it = + std::lower_bound(vec, vec + length, key, [](LinearEnumMapNode lhs, K key) { return lhs.key < key; }); + if (it == vec + length || it->key != key) { + return -1; + } else { + return it - vec; + } +} +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_LINEAR_MAP_H diff --git a/frameworks/base/utils/listener.h b/frameworks/base/utils/listener.h new file mode 100644 index 00000000..d037b1df --- /dev/null +++ b/frameworks/base/utils/listener.h @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_LISTENER_H +#define FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_LISTENER_H + +#include + +#include "base/utils/event_callback.h" + +namespace OHOS::Ace { + +template +class ValueListenable { +public: + using ValueCallback = EventCallback; + + ValueListenable() = default; + virtual ~ValueListenable() = default; + + void AddListener(const ValueCallback& callback) + { + callbacks_.emplace(callback.GetId(), callback); + } + + template + typename ValueCallback::IdType AddListener(const F& funcObject) + { + ValueCallback callback(funcObject); + AddListener(callback); + return callback.GetId(); + } + + void RemoveListener(const ValueCallback& callback) + { + callbacks_.erase(callback.GetId()); + } + + void RemoveListener(typename ValueCallback::IdType id) + { + callbacks_.erase(id); + } + + void ClearListeners() + { + callbacks_.clear(); + } + + void NotifyListener(const T& value) const + { + for (auto&& [id, callback] : callbacks_) { + if (callback) { + callback(value); + } + } + } + +private: + std::unordered_map callbacks_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_LISTENER_H diff --git a/frameworks/base/utils/macros.h b/frameworks/base/utils/macros.h new file mode 100644 index 00000000..a6c0a95c --- /dev/null +++ b/frameworks/base/utils/macros.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_MACROS_H +#define FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_MACROS_H + +#ifndef ACE_EXPORT +#ifndef WEARABLE_PRODUCT +#define ACE_EXPORT __attribute__((visibility("default"))) +#else +#define ACE_EXPORT +#endif +#endif + +#ifdef ACE_DEBUG + +#ifdef NDEBUG +#define CANCEL_NDEBUG +#undef NDEBUG +#endif // NDEBUG + +#include + +#ifdef CANCEL_NDEBUG +#define NDEBUG +#undef CANCEL_NDEBUG +#endif // CANCEL_NDEBUG + +#define ACE_DCHECK(expr) assert(expr) +#else +#define ACE_DCHECK(expr) ((void)0) + +#endif // ACE_DEBUG + +#endif // FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_MACROS_H diff --git a/frameworks/base/utils/noncopyable.h b/frameworks/base/utils/noncopyable.h new file mode 100644 index 00000000..cb68364b --- /dev/null +++ b/frameworks/base/utils/noncopyable.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_NONCOPYABLE_H +#define FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_NONCOPYABLE_H + +#define ACE_DISALLOW_COPY_AND_MOVE(className) \ + ACE_DISALLOW_COPY(className); \ + ACE_DISALLOW_MOVE(className) + +#define ACE_DISALLOW_COPY(className) \ + className(const className&) = delete; \ + className& operator=(const className&) = delete + +#define ACE_DISALLOW_MOVE(className) \ + className(className&&) = delete; \ + className& operator=(className&&) = delete + +namespace OHOS::Ace { + +class NonCopyable { +protected: + NonCopyable() = default; + virtual ~NonCopyable() = default; + +private: + ACE_DISALLOW_COPY_AND_MOVE(NonCopyable); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_NONCOPYABLE_H diff --git a/frameworks/base/utils/singleton.h b/frameworks/base/utils/singleton.h new file mode 100644 index 00000000..285954a8 --- /dev/null +++ b/frameworks/base/utils/singleton.h @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_SINGLETON_H +#define FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_SINGLETON_H + +#include "base/utils/noncopyable.h" + +namespace OHOS::Ace { + +#define DECLARE_SINGLETON(MyClass) \ +private: \ + friend Singleton; \ + MyClass& operator=(const MyClass&) = delete; \ + MyClass(const MyClass&) = delete; \ + MyClass(); \ + ~MyClass(); + +template +class Singleton : public NonCopyable { +public: + static T& GetInstance() + { + return instance_; + } + +private: + static T instance_; +}; + +template +T Singleton::instance_; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_SINGLETON_H diff --git a/frameworks/base/utils/string_utils.cpp b/frameworks/base/utils/string_utils.cpp new file mode 100644 index 00000000..deb71ba6 --- /dev/null +++ b/frameworks/base/utils/string_utils.cpp @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "base/utils/string_utils.h" + +namespace OHOS::Ace::StringUtils { + +const char DEFAULT_STRING[] = "error"; +const std::wstring DEFAULT_WSTRING = L"error"; +const std::u16string DEFAULT_USTRING = u"error"; + +} // namespace OHOS::Ace::StringUtils \ No newline at end of file diff --git a/frameworks/base/utils/string_utils.h b/frameworks/base/utils/string_utils.h new file mode 100644 index 00000000..42db891a --- /dev/null +++ b/frameworks/base/utils/string_utils.h @@ -0,0 +1,289 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_STRING_UTILS_H +#define FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_STRING_UTILS_H + +#include +#include +#include +#include +#include +#include + +#include "base/geometry/dimension.h" +#include "base/utils/linear_map.h" +#include "base/utils/utils.h" + +namespace OHOS::Ace::StringUtils { + +ACE_EXPORT extern const char DEFAULT_STRING[]; +ACE_EXPORT extern const std::wstring DEFAULT_WSTRING; +ACE_EXPORT extern const std::u16string DEFAULT_USTRING; + +inline std::u16string Str8ToStr16(const std::string& str) +{ + if (str == DEFAULT_STRING) { + return DEFAULT_USTRING; + } + std::wstring_convert, char16_t> convert(DEFAULT_STRING, DEFAULT_USTRING); + std::u16string result = convert.from_bytes(str); + return result == DEFAULT_USTRING ? u"" : result; +} + +inline std::string Str16ToStr8(const std::u16string& str) +{ + if (str == DEFAULT_USTRING) { + return DEFAULT_STRING; + } + std::wstring_convert, char16_t> convert(DEFAULT_STRING); + std::string result = convert.to_bytes(str); + return result == DEFAULT_STRING ? "" : result; +} + +inline std::wstring ToWstring(const std::string& str) +{ + if (str == DEFAULT_STRING) { + return DEFAULT_WSTRING; + } +#ifdef WINDOWS_PLATFORM + std::wstring_convert, wchar_t> convert(DEFAULT_STRING, DEFAULT_WSTRING); +#else + std::wstring_convert, wchar_t> convert(DEFAULT_STRING, DEFAULT_WSTRING); +#endif + std::wstring result = convert.from_bytes(str); + return result == DEFAULT_WSTRING ? L"" : result; +} + +inline std::string ToString(const std::wstring& str) +{ + if (str == DEFAULT_WSTRING) { + return DEFAULT_STRING; + } +#ifdef WINDOWS_PLATFORM + std::wstring_convert, wchar_t> convert(DEFAULT_STRING); +#else + std::wstring_convert, wchar_t> convert(DEFAULT_STRING); +#endif + std::string result = convert.to_bytes(str); + return result == DEFAULT_STRING ? "" : result; +} + +inline bool NotInUtf16Bmp(char16_t c) +{ + return (c & 0xF800) == 0xD800; +} + +inline bool IsNumber(const std::string& value) +{ + if (value.empty()) { + return false; + } + return std::all_of(value.begin(), value.end(), [](char i) { return isdigit(i); }); +} + +inline int32_t StringToInt(const std::string& value) +{ + errno = 0; + char* pEnd = nullptr; + int64_t result = std::strtol(value.c_str(), &pEnd, 10); + if (pEnd == value.c_str() || (result < INT_MIN || result > INT_MAX) || errno == ERANGE) { + return 0; + } else { + return result; + } +} + +inline uint32_t StringToUint(const std::string& value, uint32_t defaultErr = 0) +{ + errno = 0; + char* pEnd = nullptr; + uint64_t result = std::strtoul(value.c_str(), &pEnd, 10); + if (pEnd == value.c_str() || result > UINT32_MAX || errno == ERANGE) { + return defaultErr; + } else { + return result; + } +} + +inline double StringToDouble(const std::string& value) +{ + char* pEnd = NULL; + double result = std::strtod(value.c_str(), &pEnd); + if (pEnd == value.c_str() || errno == ERANGE) { + return 0.0; + } else { + return result; + } +} + +inline Dimension StringToDimension(const std::string& value, bool useVp = false) +{ + errno = 0; + char* pEnd = nullptr; + double result = std::strtod(value.c_str(), &pEnd); + if (pEnd == value.c_str() || errno == ERANGE) { + return Dimension(0.0, DimensionUnit::PX); + } else { + if ((pEnd) && (std::strcmp(pEnd, "%") == 0)) { + // Parse percent, transfer from [0, 100] to [0, 1] + return Dimension(result / 100.0, DimensionUnit::PERCENT); + } else if ((pEnd) && (std::strcmp(pEnd, "px") == 0)) { + return Dimension(result, DimensionUnit::PX); + } else if ((pEnd) && (std::strcmp(pEnd, "vp") == 0)) { + return Dimension(result, DimensionUnit::VP); + } else if ((pEnd) && (std::strcmp(pEnd, "fp") == 0)) { + return Dimension(result, DimensionUnit::FP); + } + return Dimension(result, useVp ? DimensionUnit::VP : DimensionUnit::PX); + } +} + +inline double StringToDegree(const std::string& value) +{ + // https://developer.mozilla.org/zh-CN/docs/Web/CSS/angle + constexpr static double DEGREES = 360.0; + constexpr static double GRADIANS = 400.0; + constexpr static double RADIUS = 2 * M_PI; + + errno = 0; + char* pEnd = nullptr; + double result = std::strtod(value.c_str(), &pEnd); + if (pEnd == value.c_str() || errno == ERANGE) { + return 0.0; + } else if (pEnd) { + if ((std::strcmp(pEnd, "deg")) == 0) { + return result; + } else if (std::strcmp(pEnd, "grad") == 0) { + return result / GRADIANS * DEGREES; + } else if (std::strcmp(pEnd, "rad") == 0) { + return result / RADIUS * DEGREES; + } else if (std::strcmp(pEnd, "turn") == 0) { + return result * DEGREES; + } + } + return StringToDouble(value); +} + +template +inline void StringSpliter(const std::string& source, char delimiter, T (*func)(const std::string&), std::vector& out) +{ + out.erase(out.begin(), out.end()); + + if (source.empty()) { + return; + } + + std::size_t startIndex = 0; + for (std::size_t index = 0; index < source.size(); index++) { + if (source[index] != delimiter) { + continue; + } + + if (index > startIndex) { + out.emplace_back(func(source.substr(startIndex, index - startIndex))); + } + startIndex = index + 1; + } + + if (startIndex < source.size()) { + out.emplace_back(func(source.substr(startIndex))); + } +} + +inline void StringSpliter(const std::string& source, char delimiter, std::vector& out) +{ + using Func = std::string (*)(const std::string&); + Func func = [](const std::string& value) { return value; }; + StringSpliter(source, delimiter, func, out); +} + +inline void StringSpliter(const std::string& source, char delimiter, std::vector& out) +{ + using Func = double (*)(const std::string&); + Func func = [](const std::string& value) { return StringToDouble(value); }; + StringSpliter(source, delimiter, func, out); +} + +inline void StringSpliter(const std::string& source, char delimiter, std::vector& out) +{ + using Func = int32_t (*)(const std::string&); + Func func = [](const std::string& value) { return StringToInt(value); }; + StringSpliter(source, delimiter, func, out); +} + +inline std::string DoubleToString(double value, int32_t precision = 2) +{ + std::ostringstream result; + result.precision(precision); + result << std::fixed << value; + return result.str(); +} + +inline void DeleteAllMark(std::string& str, const char mark) +{ + str.erase(std::remove(str.begin(), str.end(), mark), str.end()); +} + +inline std::string TrimStr(const std::string& str, char cTrim = ' ') +{ + auto firstPos = str.find_first_not_of(cTrim); + if (firstPos == std::string::npos) { + return str; + } + auto endPos = str.find_last_not_of(cTrim); + return str.substr(firstPos, endPos - firstPos + 1); +} + +inline void SplitStr( + const std::string& str, const std::string& sep, std::vector& out, bool needTrim = true) +{ + out.erase(out.begin(), out.end()); + + if (str.empty() || sep.empty()) { + return; + } + + std::string strPart; + std::string::size_type startPos = 0; + std::string::size_type pos = str.find_first_of(sep, startPos); + while (pos != std::string::npos) { + if (pos > startPos) { + strPart = needTrim ? TrimStr(str.substr(startPos, pos - startPos)) : str.substr(startPos, pos - startPos); + out.emplace_back(std::move(strPart)); + } + startPos = pos + sep.size(); + pos = str.find_first_of(sep, startPos); + } + + if (startPos < str.size()) { + strPart = needTrim ? TrimStr(str.substr(startPos)) : str.substr(startPos); + out.emplace_back(std::move(strPart)); + } +} + +inline bool StartWith(const std::string& dst, const std::string& prefix) +{ + return dst.compare(0, prefix.size(), prefix) == 0; +} + +inline bool EndWith(const std::string& dst, const std::string& suffix) +{ + return (dst.size() >= suffix.size()) && dst.compare(dst.size() - suffix.size(), suffix.size(), suffix) == 0; +} + +} // namespace OHOS::Ace::StringUtils + +#endif // FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_STRING_UTILS_H diff --git a/frameworks/base/utils/system_properties.h b/frameworks/base/utils/system_properties.h new file mode 100644 index 00000000..5f3d3002 --- /dev/null +++ b/frameworks/base/utils/system_properties.h @@ -0,0 +1,231 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_SYSTEM_PROPERTIES_H +#define FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_SYSTEM_PROPERTIES_H + +#include + +#include "base/utils/device_type.h" +#include "base/utils/macros.h" + +namespace OHOS::Ace { + +enum class DeviceOrientation : int32_t { + PORTRAIT, + LANDSCAPE, + ORIENTATION_UNDEFINED, +}; + +enum class ColorMode : int32_t { + LIGHT = 0, + DARK, + COLOR_MODE_UNDEFINED, +}; + +enum class ResolutionType : int32_t { + RESOLUTION_NONE = -2, + RESOLUTION_ANY = -1, + RESOLUTION_LDPI = 120, + RESOLUTION_MDPI = 160, + RESOLUTION_HDPI = 240, + RESOLUTION_XHDPI = 320, + RESOLUTION_XXHDPI = 480, + RESOLUTION_XXXHDPI = 640, +}; + +constexpr int32_t MCC_UNDEFINED = 0; +constexpr int32_t MNC_UNDEFINED = 0; + +class ACE_EXPORT SystemProperties final { +public: + /* + * Init device type for Ace. + */ + static void InitDeviceType(DeviceType deviceType); + + /* + * Init device info for Ace. + */ + static void InitDeviceInfo(int32_t deviceWidth, int32_t deviceHeight, int32_t orientation, + double resolution, bool isRound); + + /* + * Init device type according to system property. + */ + static void InitDeviceTypeBySystemProperty(); + + /* + * Update view's width and height information. + */ + static void UpdateSurfaceStatus(int32_t width, int32_t height); + + /* + * Get width of view. + */ + static int32_t GetWidth() + { + return width_; + } + + /* + * Get height of view. + */ + static int32_t GetHeight() + { + return height_; + } + + /* + * Get type of current device. + */ + static DeviceType GetDeviceType(); + + /* + * Get current orientation of device. + */ + static DeviceOrientation GetDevcieOrientation() + { + return orientation_; + } + + /* + * Get width of device. + */ + static int32_t GetDeviceWidth() + { + return deviceWidth_; + } + + /* + * Get height of device. + */ + static int32_t GetDeviceHeight() + { + return deviceHeight_; + } + + /* + * Get wght scale of device. + */ + static float GetFontWeightScale(); + + /* + * Get resolution of device. + */ + static double GetResolution() + { + return resolution_; + } + + static bool GetIsScreenRound() + { + return isRound_; + } + + static const std::string& GetBrand() + { + return brand_; + } + + static const std::string& GetManufacturer() + { + return manufacturer_; + } + + static const std::string& GetModel() + { + return model_; + } + + static const std::string& GetProduct() + { + return product_; + } + + static const std::string& GetApiVersion() + { + return apiVersion_; + } + + static const std::string& GetReleaseType() + { + return releaseType_; + } + + static const std::string& GetParamDeviceType() + { + return paramDeviceType_; + } + + static bool GetTraceEnabled() + { + return traceEnabled_; + } + + /* + * Set device orientation. + */ + static void SetDeviceOrientation(int32_t orientation); + + static constexpr char INVALID_PARAM[] = "N/A"; + + static int32_t GetMcc() + { + return mcc_; + } + + static int32_t GetMnc() + { + return mnc_; + } + + static void SetColorMode(ColorMode colorMode) + { + colorMode_ = colorMode; + } + + static ColorMode GetColorMode() + { + return colorMode_; + } + + static void InitMccMnc(int32_t mcc, int32_t mnc); + +private: + static bool traceEnabled_; + static bool isRound_; + static int32_t width_; + static int32_t height_; + static int32_t deviceWidth_; + static int32_t deviceHeight_; + static double resolution_; + static DeviceType deviceType_; + static DeviceOrientation orientation_; + static std::string brand_; + static std::string manufacturer_; + static std::string model_; + static std::string product_; + static std::string apiVersion_; + static std::string releaseType_; + static std::string paramDeviceType_; + static int32_t mcc_; + static int32_t mnc_; + static ColorMode colorMode_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_SYSTEM_PROPERTIES_H diff --git a/frameworks/base/utils/time_util.cpp b/frameworks/base/utils/time_util.cpp new file mode 100644 index 00000000..712ab44b --- /dev/null +++ b/frameworks/base/utils/time_util.cpp @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "base/utils/time_util.h" + +#include + +#include "base/log/log.h" +#include "base/utils/utils.h" + +namespace OHOS::Ace { +namespace { + +constexpr int64_t SEC_TO_MICROSEC = 1000000; +constexpr int64_t MICROSEC_TO_NANOSEC = 1000; +constexpr int32_t HOURS_WEST_GEOGRAPHICAL_LOWER_LIMIT = -12; +constexpr int32_t HOURS_WEST_LOWER_LIMIT = -14; +constexpr int32_t HOURS_WEST_UPPER_LIMIT = 12; +constexpr int32_t TOTAL_SECONDS_OF_DAY = 24 * 60 * 60; +constexpr int32_t TOTAL_SECONDS_OF_HOUR = 60 * 60; +constexpr int32_t TOTAL_SECONDS_OF_MINUTE = 60; +constexpr int32_t TOTAL_MINUTE_OF_HOUR = 60; +constexpr int32_t TWENTY_FOUR_HOUR_BASE = 24; +constexpr int32_t TWELVE_HOUR_BASE = 12; +constexpr int32_t DAY_TIME_LOWER_LIMIT = 6; +constexpr int32_t DAY_TIME_UPPER_LIMIT = 18; + +} // namespace + +int64_t GetMicroTickCount() +{ + struct timespec ts; + clock_gettime(CLOCK_MONOTONIC, &ts); + return (ts.tv_sec * SEC_TO_MICROSEC + ts.tv_nsec / MICROSEC_TO_NANOSEC); +} + +TimeOfNow GetTimeOfNow(double hoursWest) +{ + struct timeval currentTime; + struct timezone timeZone; + gettimeofday(¤tTime, &timeZone); + + TimeOfNow timeOfNow(hoursWest); + int32_t minutesWest = timeZone.tz_minuteswest; + if (IsHoursWestValid(timeOfNow.hoursWest_)) { + minutesWest = Round(TOTAL_MINUTE_OF_HOUR * timeOfNow.hoursWest_); + } else { + // when [hoursWest] is invalid, set current time zone to [hoursWest]. + if (!NearEqual(timeOfNow.hoursWest_, DBL_MAX)) { // default value of hoursWest_ is DBL_MAX + LOGW("hoursWest [%{public}lf] is invalid, use current time zone.", timeOfNow.hoursWest_); + } + timeOfNow.hoursWest_ = timeZone.tz_minuteswest / TOTAL_MINUTE_OF_HOUR; + } + int secondsOfToday = currentTime.tv_sec % TOTAL_SECONDS_OF_DAY - minutesWest * TOTAL_SECONDS_OF_MINUTE; + if (secondsOfToday < 0) { + secondsOfToday += TOTAL_SECONDS_OF_DAY; + } + timeOfNow.minute_ = (secondsOfToday / TOTAL_SECONDS_OF_MINUTE) % TOTAL_MINUTE_OF_HOUR + + static_cast(secondsOfToday % TOTAL_SECONDS_OF_MINUTE) / TOTAL_SECONDS_OF_MINUTE; + timeOfNow.hour24_ = + (secondsOfToday / TOTAL_SECONDS_OF_HOUR) % TWENTY_FOUR_HOUR_BASE + timeOfNow.minute_ / TOTAL_MINUTE_OF_HOUR; + timeOfNow.hour12_ = + (timeOfNow.hour24_ < TWELVE_HOUR_BASE) ? timeOfNow.hour24_ : (timeOfNow.hour24_ - TWELVE_HOUR_BASE); + timeOfNow.second_ = secondsOfToday % TOTAL_SECONDS_OF_MINUTE; + timeOfNow.timeUsec_ = currentTime.tv_usec; + return timeOfNow; +} + +bool IsHoursWestValid(double& hoursWest) +{ + // valid hoursWest is within [-14, 12] + bool isValid = GreatOrEqual(hoursWest, HOURS_WEST_LOWER_LIMIT) && LessOrEqual(hoursWest, HOURS_WEST_UPPER_LIMIT); + if (!isValid) { + return false; + } + // Theoretically, the time zone range should be [-12, +12], but some countries and regions that cross the + // International Date Line use -13(UTC+13) and -14(UTC+14) to keep the whole country or region at the same date. + bool isSpecialTimeZone = LessNotEqual(hoursWest, HOURS_WEST_GEOGRAPHICAL_LOWER_LIMIT); + if (isSpecialTimeZone) { + hoursWest += TWENTY_FOUR_HOUR_BASE; + } + return true; +} + +bool IsDayTime(const TimeOfNow& timeOfNow) +{ + return GreatOrEqual(timeOfNow.hour24_, DAY_TIME_LOWER_LIMIT) && + LessNotEqual(timeOfNow.hour24_, DAY_TIME_UPPER_LIMIT); +} + +} // namespace OHOS::Ace diff --git a/frameworks/base/utils/time_util.h b/frameworks/base/utils/time_util.h new file mode 100644 index 00000000..a14f96a7 --- /dev/null +++ b/frameworks/base/utils/time_util.h @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_TIME_UTIL_H +#define FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_TIME_UTIL_H + +#include +#include +#include + +#include "base/utils/macros.h" + +namespace OHOS::Ace { + +/** +* The GetMicroTickCount function get current microseconds since the system was started. +*/ +ACE_EXPORT int64_t GetMicroTickCount(); + +struct TimeOfNow final { + explicit TimeOfNow(double hoursWest = DBL_MAX) : hoursWest_(hoursWest) {} + ~TimeOfNow() = default; + + // hours west of Greenwich, for e.g., [hoursWest] is [-8] in UTC+8. + // Valid range of [hoursWest] is [-14, 12]. Set default value to DBL_MAX to use current time zone by default. + double hoursWest_ = DBL_MAX; + int32_t second_ = 0; + double minute_ = 0.0; + double hour12_ = 0.0; // 12-hour clock + double hour24_ = 0.0; // 24-hour clock + long timeUsec_ = 0L; // microsecond. 1 second = 1000 millisecond = 1000000 microsecond +}; + +bool IsHoursWestValid(double& hoursWest); + +TimeOfNow GetTimeOfNow(double hoursWest = DBL_MAX); + +bool IsDayTime(const TimeOfNow& timeOfNow); + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_TIME_UTIL_H diff --git a/frameworks/base/utils/type_definition.h b/frameworks/base/utils/type_definition.h new file mode 100644 index 00000000..89c3d139 --- /dev/null +++ b/frameworks/base/utils/type_definition.h @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_TYPE_DEFINITION_H +#define FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_TYPE_DEFINITION_H + +#include + +namespace OHOS::Ace { + +using TimeStamp = std::chrono::high_resolution_clock::time_point; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_TYPE_DEFINITION_H diff --git a/frameworks/base/utils/utils.h b/frameworks/base/utils/utils.h new file mode 100644 index 00000000..3d3685c1 --- /dev/null +++ b/frameworks/base/utils/utils.h @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_UTILS_H +#define FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_UTILS_H + +#include +#include + +namespace OHOS::Ace { + +template +constexpr std::size_t ArraySize(T (&)[N]) noexcept +{ + return N; +} + +template +T ConvertIntToEnum(int32_t index, const T (&values)[N], T defaultValue) +{ + if (index >= 0 && index < N) { + return values[index]; + } + return defaultValue; +} + +inline bool NearEqual(const double left, const double right, const double epsilon) +{ + return (std::abs(left - right) <= epsilon); +} + +inline bool NearZero(const double value, const double epsilon) +{ + return NearEqual(value, 0.0, epsilon); +} + +inline bool NearEqual(const double left, const double right) +{ + static constexpr double epsilon = 0.000001f; + return NearEqual(left, right, epsilon); +} + +inline bool NearZero(const double left) +{ + static constexpr double epsilon = 0.000001f; + return NearZero(left, epsilon); +} + +inline bool LessOrEqual(double left, double right) +{ + static constexpr double epsilon = 0.000001f; + return (left - right) < epsilon; +} + +inline bool LessNotEqual(double left, double right) +{ + static constexpr double epsilon = -0.000001f; + return (left - right) < epsilon; +} + +inline bool GreatOrEqual(double left, double right) +{ + static constexpr double epsilon = -0.000001f; + return (left - right) > epsilon; +} + +inline bool GreatNotEqual(double left, double right) +{ + static constexpr double epsilon = 0.000001f; + return (left - right) > epsilon; +} + +inline double Round(double rawNum) +{ + static constexpr double epsilon = 0.000001f; + return std::round(rawNum + epsilon); +} + +inline bool InRegion(double lowerBound, double upperBound, double destNum) +{ + return LessOrEqual(lowerBound, destNum) && LessOrEqual(destNum, upperBound); +} + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_UTILS_H diff --git a/frameworks/base/utils/value_change_notifier.h b/frameworks/base/utils/value_change_notifier.h new file mode 100644 index 00000000..1a3a361c --- /dev/null +++ b/frameworks/base/utils/value_change_notifier.h @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_VALUE_CHANGE_NOTIFIER_H +#define FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_VALUE_CHANGE_NOTIFIER_H + +#include + +#include "base/memory/ace_type.h" +#include "base/utils/noncopyable.h" + +namespace OHOS::Ace { + +class ValueChangeObserver : public virtual AceType { + DECLARE_ACE_TYPE(ValueChangeObserver, AceType); + +public: + virtual void OnValueChanged(bool needFireChangeEvent = true) = 0; + +protected: + ValueChangeObserver() = default; + ~ValueChangeObserver() override = default; + + ACE_DISALLOW_COPY_AND_MOVE(ValueChangeObserver); +}; + +/** + * @brief Used for observe a value change. + * @see example as TextEditController. + * + * Note: Make sure all methods calling on same thread. + * + * @tparam U is the value type. + */ +template +class ValueChangeNotifier : public virtual AceType { + DECLARE_ACE_TYPE(ValueChangeNotifier, AceType); + +public: + void AddObserver(const WeakPtr& observer) + { + observers_.emplace_back(observer); + } + + void RemoveObserver(const WeakPtr& observer) + { + observers_.remove(observer); + } + + void SetValue(U&& newValue, bool needFireChangeEvent = true) + { + if (newValue == value_) { + return; + } + + value_ = std::move(newValue); + Notify(needFireChangeEvent); + } + + void SetValue(const U& newValue, bool needFireChangeEvent = true) + { + if (newValue == value_) { + return; + } + + value_ = newValue; + Notify(needFireChangeEvent); + } + + const U& GetValue() const + { + return value_; + } + +private: + void Notify(bool needFireChangeEvent = true) + { + auto iter = observers_.begin(); + while (iter != observers_.end()) { + const auto& observer = iter->Upgrade(); + if (observer) { + observer->OnValueChanged(needFireChangeEvent); + iter++; + } else { + iter = observers_.erase(iter); + } + } + } + + std::list> observers_; + + U value_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BASE_UTILS_VALUE_CHANGE_NOTIFIER_H diff --git a/frameworks/base/watch_dog/watch_dog.cpp b/frameworks/base/watch_dog/watch_dog.cpp new file mode 100644 index 00000000..40a802cb --- /dev/null +++ b/frameworks/base/watch_dog/watch_dog.cpp @@ -0,0 +1,160 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "base/watch_dog/watch_dog.h" + +#include "base/log/event_report.h" +#include "base/log/log.h" + +namespace OHOS::Ace { +namespace { + +const int32_t WAIT_SECOND = 10; + +} // namespace + +WatchDog::WatchDog() +{ + checkThread_ = std::thread(&WatchDog::CheckLoop, this); +} + +WatchDog::~WatchDog() +{ + sleeper_.Interrupt(); + if (checkThread_.joinable()) { + checkThread_.join(); + } +} + +void WatchDog::CheckLoop() +{ + while (!sleeper_.WaitFor(std::chrono::seconds(WAIT_SECOND))) { + CheckStuckThread(); + CheckAndResetIfNeeded(); + + mutex_.lock(); + for (auto iter = taskExecutorMap_.begin(); iter != taskExecutorMap_.end();) { + auto taskExecutor = iter->second.Upgrade(); + if (taskExecutor) { + // send task to UI thread for checking it + taskExecutor->PostTask( + [instanceId = iter->first, weak = Referenced::WeakClaim(this)]() { + auto me = weak.Upgrade(); + if (me) { + me->TriggerThreadTagIncrease(instanceId, TaskExecutor::TaskType::UI); + } + }, + TaskExecutor::TaskType::UI); + + // send task to JS thread for checking it + taskExecutor->PostTask( + [instanceId = iter->first, weak = Referenced::WeakClaim(this)]() { + auto me = weak.Upgrade(); + if (me) { + me->TriggerThreadTagIncrease(instanceId, TaskExecutor::TaskType::JS); + } + }, + TaskExecutor::TaskType::JS); + + ++iter; + } else { + int32_t num = threadTagMap_.erase(iter->first); + if (num == 0) { + LOGW("find no item in threadTagMap_ with instanceID %{public}d when delete it from this map\n", + iter->first); + } + iter = taskExecutorMap_.erase(iter); + } + } + loopTime_++; + mutex_.unlock(); + } +} + +void WatchDog::RegisterTaskExecutor(int32_t instanceId, const RefPtr& taskExecutor) +{ + std::lock_guard lock(mutex_); + const auto resExecutor = taskExecutorMap_.try_emplace(instanceId, taskExecutor); + if (!resExecutor.second) { + LOGW("taskExecutor with instance id: %{public}d has been registered, and not effected", instanceId); + } + + std::unordered_map tagMap = { { TaskExecutor::TaskType::UI, loopTime_ }, + { TaskExecutor::TaskType::JS, loopTime_ } }; + const auto resThreadTag = threadTagMap_.try_emplace(instanceId, tagMap); + if (!resThreadTag.second) { + LOGW( + "taskExecutor with instanceId: %{public}d inserted to threadTagMap_ repeats, it's not normal.", instanceId); + } +} + +void WatchDog::TriggerThreadTagIncrease(int32_t instanceId, TaskExecutor::TaskType type) +{ + std::lock_guard lock(mutex_); + auto tagMap = threadTagMap_.find(instanceId); + if (tagMap == threadTagMap_.end()) { + LOGW("no item with instanceId %{public}d in map", instanceId); + return; + } + + int32_t val = tagMap->second.at(type); + tagMap->second.at(type) = ++val; +} + +void WatchDog::CheckAndResetIfNeeded() +{ + std::lock_guard lock(mutex_); + if (loopTime_ < INT32_MAX) { + return; + } + + loopTime_ = 0; + + if (threadTagMap_.empty()) { + return; + } + + for (auto& iter : threadTagMap_) { + iter.second.at(TaskExecutor::TaskType::UI) = loopTime_; + iter.second.at(TaskExecutor::TaskType::JS) = loopTime_; + } +} + +void WatchDog::CheckStuckThread() +{ + std::lock_guard lock(mutex_); + for (auto& iter : threadTagMap_) { + for (auto& iterThread : iter.second) { + if (iterThread.second == loopTime_) { + continue; + } + LOGW("thread stuck, container instanceId: %{public}d, threadId: %{public}d", iter.first, + iterThread.first); + if (iterThread.first == TaskExecutor::TaskType::JS) { + EventInfo eventInfo; + eventInfo.eventType = EXCEPTION_JS_RUNTIME; + eventInfo.errorType = JS_THREAD_STUCK; + EventReport::SendEvent(eventInfo); + } else if (iterThread.first == TaskExecutor::TaskType::UI) { + EventInfo eventInfo; + eventInfo.eventType = EXCEPTION_RENDER; + eventInfo.errorType = UI_THREAD_STUCK; + EventReport::SendEvent(eventInfo); + } + } + } +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/base/watch_dog/watch_dog.h b/frameworks/base/watch_dog/watch_dog.h new file mode 100644 index 00000000..d144e6da --- /dev/null +++ b/frameworks/base/watch_dog/watch_dog.h @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_WATCH_DOG_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_WATCH_DOG_H + +#include +#include + +#include "base/thread/task_executor.h" + +namespace OHOS::Ace { + +class InterruptibleSleeper { +public: + template + bool WaitFor(std::chrono::duration const & time) + { + std::unique_lock lock(mutex_); + return cv_.wait_for(lock, time, [&] { return terminate_; }); + } + + void Interrupt() + { + std::unique_lock lock(mutex_); + terminate_ = true; + cv_.notify_all(); + } + +private: + std::condition_variable cv_; + std::mutex mutex_; + bool terminate_ = false; +}; + +class WatchDog : public Referenced { +public: + WatchDog(); + ~WatchDog(); + + void RegisterTaskExecutor(int32_t instanceId, const RefPtr& taskExecutor); + void TriggerThreadTagIncrease(int32_t instanceId, TaskExecutor::TaskType type); + +private: + void CheckAndResetIfNeeded(); + void CheckStuckThread(); + void CheckLoop(); + + std::thread checkThread_; + int32_t loopTime_ = 0; + std::mutex mutex_; + std::unordered_map> taskExecutorMap_; + std::unordered_map> threadTagMap_; + InterruptibleSleeper sleeper_; + + ACE_DISALLOW_COPY_AND_MOVE(WatchDog); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_WATCH_DOG_H diff --git a/frameworks/bridge/BUILD.gn b/frameworks/bridge/BUILD.gn new file mode 100755 index 00000000..a804b1eb --- /dev/null +++ b/frameworks/bridge/BUILD.gn @@ -0,0 +1,581 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +config("ace_utils_config") { + include_dirs = [ "//utils/native/base/include" ] +} + +# build javascript sdk library +template("js_framework") { + # get is_ohos_platform, use_quickjs_engine flag. + forward_variables_from(invoker, "*") + + ohos_source_set(target_name) { + defines += invoker.defines + + deps = [ + "$ace_root/frameworks/base:ace_base_$platform", + "$ace_root/frameworks/core:ace_core_$platform", + "$ace_root/frameworks/core/accessibility:ace_accessibility_$platform", + ] + + # add common source file needed by all product platform here + sources = [ + # codec + "codec/byte_buffer_operator.cpp", + "codec/standard_codec_buffer_operator.cpp", + "codec/standard_function_codec.cpp", + + # dom + "common/dom/dom_badge.cpp", + "common/dom/dom_button.cpp", + "common/dom/dom_calendar.cpp", + "common/dom/dom_canvas.cpp", + "common/dom/dom_chart.cpp", + "common/dom/dom_dialog.cpp", + "common/dom/dom_div.cpp", + "common/dom/dom_divider.cpp", + "common/dom/dom_document.cpp", + "common/dom/dom_grid_column.cpp", + "common/dom/dom_grid_container.cpp", + "common/dom/dom_grid_row.cpp", + "common/dom/dom_image.cpp", + "common/dom/dom_image_animator.cpp", + "common/dom/dom_input.cpp", + "common/dom/dom_label.cpp", + "common/dom/dom_list.cpp", + "common/dom/dom_list_item.cpp", + "common/dom/dom_list_item_group.cpp", + "common/dom/dom_marquee.cpp", + "common/dom/dom_navigation_bar.cpp", + "common/dom/dom_node.cpp", + "common/dom/dom_panel.cpp", + "common/dom/dom_picker_base.cpp", + "common/dom/dom_picker_view.cpp", + "common/dom/dom_progress.cpp", + "common/dom/dom_proxy.cpp", + "common/dom/dom_refresh.cpp", + "common/dom/dom_search.cpp", + "common/dom/dom_slider.cpp", + "common/dom/dom_span.cpp", + "common/dom/dom_stack.cpp", + "common/dom/dom_svg.cpp", + "common/dom/dom_svg_animate.cpp", + "common/dom/dom_svg_animate_motion.cpp", + "common/dom/dom_svg_animate_transform.cpp", + "common/dom/dom_svg_base.cpp", + "common/dom/dom_svg_circle.cpp", + "common/dom/dom_svg_ellipse.cpp", + "common/dom/dom_svg_line.cpp", + "common/dom/dom_svg_path.cpp", + "common/dom/dom_svg_polygon.cpp", + "common/dom/dom_svg_polyline.cpp", + "common/dom/dom_svg_rect.cpp", + "common/dom/dom_svg_text.cpp", + "common/dom/dom_svg_text_path.cpp", + "common/dom/dom_svg_tspan.cpp", + "common/dom/dom_swiper.cpp", + "common/dom/dom_switch.cpp", + "common/dom/dom_text.cpp", + "common/dom/dom_textarea.cpp", + "common/dom/dom_toggle.cpp", + "common/dom/dom_type.cpp", + "common/dom/input/dom_button_util.cpp", + "common/dom/input/dom_checkbox_util.cpp", + "common/dom/input/dom_radio_util.cpp", + "common/dom/input/dom_textfield_util.cpp", + + # card frontend + "card_frontend/card_frontend.cpp", + "card_frontend/card_frontend_delegate.cpp", + "card_frontend/js_card_parser.cpp", + "card_frontend/media_queryer.cpp", + + # js frontend + "js_frontend/engine/common/base_animation_bridge.cpp", + "js_frontend/engine/common/js_api_perf.cpp", + "js_frontend/engine/common/js_constants.cpp", + "js_frontend/frontend_delegate_impl.cpp", + "js_frontend/js_ace_page.cpp", + "js_frontend/js_command.cpp", + "js_frontend/js_frontend.cpp", + + # manifest + "common/manifest/manifest_appinfo.cpp", + "common/manifest/manifest_parser.cpp", + "common/manifest/manifest_router.cpp", + "common/manifest/manifest_widget.cpp", + "common/manifest/manifest_window.cpp", + + # media query + "common/media_query/media_query_info.cpp", + + # utils + "common/utils/source_map.cpp", + "common/utils/utils.cpp", + + # declarative js + "declarative_frontend/declarative_frontend.cpp", + "declarative_frontend/frontend_delegate_declarative.cpp", + ] + if (!use_mingw_win && !use_mac) { + sources += [ "common/dom/dom_qrcode.cpp" ] + } + + # add sources needed by phone and TV. wearable like watch do not need them + if (!is_wearable_product) { + sources += [ + "common/dom/dom_camera.cpp", + "common/dom/dom_clock.cpp", + "common/dom/dom_menu.cpp", + "common/dom/dom_navigation_menu.cpp", + "common/dom/dom_option.cpp", + "common/dom/dom_picker_dialog.cpp", + "common/dom/dom_piece.cpp", + "common/dom/dom_popup.cpp", + "common/dom/dom_rating.cpp", + "common/dom/dom_select.cpp", + "common/dom/dom_stepper.cpp", + "common/dom/dom_stepper_item.cpp", + "common/dom/dom_tab_bar.cpp", + "common/dom/dom_tab_content.cpp", + "common/dom/dom_tabs.cpp", + "common/dom/dom_tool_bar.cpp", + "common/dom/dom_tool_bar_item.cpp", + "common/dom/dom_video.cpp", + ] + } + + # add sources needed by phone and TV. wearable like watch do not need them + if (!is_wearable_product && !use_mingw_win && !use_mac) { + sources += [ "common/dom/dom_web.cpp" ] + } + + if (!is_wearable_product && !use_mingw_win && + !use_mac) { + sources += [ "js_frontend/engine/common/js_engine_loader.cpp" ] + } + + configs = [ + "$ace_root:ace_config", + ":ace_utils_config", + ] + + if (is_ohos_platform) { + if (is_standard_system) { + sources += [ "common/accessibility/fake_accessibility_manager.cpp" ] + sources += + [ "common/accessibility/fake_accessibility_node_manager.cpp" ] + deps += [ + "//foundation/aafwk/standard/frameworks/kits/ability/native:abilitykit_native", + "//foundation/appexecfwk/standard/interfaces/innerkits/appexecfwk_base:appexecfwk_base", + ] + external_deps = [ + "aafwk_standard:ability_manager", + "aafwk_standard:want", + "appexecfwk_standard:appexecfwk_base", + "appexecfwk_standard:appexecfwk_core", + "ipc:ipc_core", + ] + } + } else if (use_mingw_win) { + sources += [ + "common/accessibility/accessibility_node_manager.cpp", + "common/inspector/inspect_button.cpp", + "common/inspector/inspect_canvas.cpp", + "common/inspector/inspect_chart.cpp", + "common/inspector/inspect_dialog.cpp", + "common/inspector/inspect_div.cpp", + "common/inspector/inspect_divider.cpp", + "common/inspector/inspect_image.cpp", + "common/inspector/inspect_image_animator.cpp", + "common/inspector/inspect_input.cpp", + "common/inspector/inspect_label.cpp", + "common/inspector/inspect_list.cpp", + "common/inspector/inspect_list_item.cpp", + "common/inspector/inspect_list_item_group.cpp", + "common/inspector/inspect_marquee.cpp", + "common/inspector/inspect_menu.cpp", + "common/inspector/inspect_node.cpp", + "common/inspector/inspect_option.cpp", + "common/inspector/inspect_picker.cpp", + "common/inspector/inspect_picker_view.cpp", + "common/inspector/inspect_popup.cpp", + "common/inspector/inspect_progress.cpp", + "common/inspector/inspect_rating.cpp", + "common/inspector/inspect_refresh.cpp", + "common/inspector/inspect_search.cpp", + "common/inspector/inspect_select.cpp", + "common/inspector/inspect_slider.cpp", + "common/inspector/inspect_span.cpp", + "common/inspector/inspect_stack.cpp", + "common/inspector/inspect_swiper.cpp", + "common/inspector/inspect_switch.cpp", + "common/inspector/inspect_tab_bar.cpp", + "common/inspector/inspect_tab_content.cpp", + "common/inspector/inspect_tabs.cpp", + "common/inspector/inspect_text.cpp", + "common/inspector/inspect_textarea.cpp", + "common/inspector/inspect_video.cpp", + "common/inspector/inspector_client.cpp", + "common/inspector/js_inspector_manager.cpp", + ] + defines += [ "_USE_MATH_DEFINES" ] + cflags = [ "-std=c++17" ] + } else if (use_mac) { + sources += [ + "common/accessibility/accessibility_node_manager.cpp", + "common/inspector/inspect_button.cpp", + "common/inspector/inspect_canvas.cpp", + "common/inspector/inspect_chart.cpp", + "common/inspector/inspect_dialog.cpp", + "common/inspector/inspect_div.cpp", + "common/inspector/inspect_divider.cpp", + "common/inspector/inspect_image.cpp", + "common/inspector/inspect_image_animator.cpp", + "common/inspector/inspect_input.cpp", + "common/inspector/inspect_label.cpp", + "common/inspector/inspect_list.cpp", + "common/inspector/inspect_list_item.cpp", + "common/inspector/inspect_list_item_group.cpp", + "common/inspector/inspect_marquee.cpp", + "common/inspector/inspect_menu.cpp", + "common/inspector/inspect_node.cpp", + "common/inspector/inspect_option.cpp", + "common/inspector/inspect_picker.cpp", + "common/inspector/inspect_picker_view.cpp", + "common/inspector/inspect_popup.cpp", + "common/inspector/inspect_progress.cpp", + "common/inspector/inspect_rating.cpp", + "common/inspector/inspect_refresh.cpp", + "common/inspector/inspect_search.cpp", + "common/inspector/inspect_select.cpp", + "common/inspector/inspect_slider.cpp", + "common/inspector/inspect_span.cpp", + "common/inspector/inspect_stack.cpp", + "common/inspector/inspect_swiper.cpp", + "common/inspector/inspect_switch.cpp", + "common/inspector/inspect_tab_bar.cpp", + "common/inspector/inspect_tab_content.cpp", + "common/inspector/inspect_tabs.cpp", + "common/inspector/inspect_text.cpp", + "common/inspector/inspect_textarea.cpp", + "common/inspector/inspect_video.cpp", + "common/inspector/inspector_client.cpp", + "common/inspector/js_inspector_manager.cpp", + ] + cflags = [ "-std=c++17" ] + } + } +} + +js_framework("js_framework_ohos") { + defines = ace_ohos_defines + is_ohos_platform = true + platform = "ohos" +} + +js_framework("js_framework_windows") { + defines = ace_windows_defines + is_ohos_platform = false + platform = "windows" +} + +js_framework("js_framework_mac") { + defines = ace_mac_defines + is_ohos_platform = false + platform = "mac" +} + +ohos_static_library("intl_qjs_preview") { + include_dirs = [ "$ace_root" ] + sources = [ "js_frontend/engine/quickjs/intl/intl_support.cpp" ] +} + +ohos_shared_library("intl_qjs") { + include_dirs = [ "$ace_root" ] + sources = [ "js_frontend/engine/quickjs/intl/intl_support.cpp" ] + subsystem_name = "ace" + if (is_standard_system) { + part_name = "ace_engine_standard" + } +} + +# build javascript engine library +template("js_engine") { + # get is_ohos_platform, use_quickjs_engine flag. + forward_variables_from(invoker, "*") + + ohos_source_set(target_name) { + defines += invoker.defines + deps = [] + configs = [] + sources = [] + + #add quickjs engine support + if (use_quickjs_engine) { + deps += [ "//third_party/jsframework:jsf" ] + + if (use_js_debug) { + deps += [ "//third_party/quickjs:qjs_debugger" ] + defines += [ "ENABLE_JS_DEBUG" ] + configs += [ "//third_party/quickjs:qjs_debug_config" ] + } else { + deps += [ "//third_party/quickjs:qjs" ] + } + + sources += [ + #runtime + "js_frontend/engine/quickjs/animation_bridge.cpp", + "js_frontend/engine/quickjs/badge_bridge.cpp", + "js_frontend/engine/quickjs/canvas_bridge.cpp", + "js_frontend/engine/quickjs/chart_bridge.cpp", + "js_frontend/engine/quickjs/clock_bridge.cpp", + "js_frontend/engine/quickjs/component_api_bridge.cpp", + "js_frontend/engine/quickjs/image_animator_bridge.cpp", + "js_frontend/engine/quickjs/list_bridge.cpp", + "js_frontend/engine/quickjs/qjs_engine.cpp", + "js_frontend/engine/quickjs/qjs_engine_loader.cpp", + "js_frontend/engine/quickjs/qjs_group_js_bridge.cpp", + "js_frontend/engine/quickjs/stepper_bridge.cpp", + + # utils + "js_frontend/engine/quickjs/qjs_utils.cpp", + ] + deps += [ "//foundation/ace/napi:ace_napi_quickjs" ] + } + + configs += [ "$ace_root:ace_config" ] + + print("platform: ${platform}") + + if (is_ohos_platform) { + if (!is_wearable_product) { + deps += [ "$ace_root/adapter/common/cpp:libace" ] + } else { + deps += [ ":js_framework_$platform" ] + defines += [ "BUILT_IN_JS_ENGINE" ] + } + deps += [ ":intl_qjs" ] + if (is_standard_system) { + external_deps = [ "hiviewdfx_hilog_native:libhilog" ] + } + } + + if (use_mingw_win || use_mac) { + deps += [ + ":intl_qjs_preview", + ":js_framework_$platform", + ] + + defines += [ "_USE_MATH_DEFINES" ] + defines += [ "BUILT_IN_JS_ENGINE" ] + cflags = [ "-std=c++17" ] + } + } +} + +js_engine("js_engine_ohos") { + defines = ace_ohos_defines + is_ohos_platform = true + use_quickjs_engine = true + platform = "ohos" +} + +js_engine("js_engine_debug_ohos") { + defines = ace_ohos_defines + is_ohos_platform = true + use_quickjs_engine = true + use_js_debug = true + platform = "ohos" +} + +js_engine("js_engine_windows") { + defines = ace_windows_defines + is_ohos_platform = false + use_quickjs_engine = true + platform = "windows" +} + +js_engine("js_engine_mac") { + defines = ace_mac_defines + is_ohos_platform = false + use_quickjs_engine = true + platform = "mac" +} + +template("gen_obj") { + name = target_name + action("gen_obj_" + name) { + visibility = [ ":*" ] # Only targets in this file can depend on this. + + if (use_mingw_win) { + objcopy_tool = objcopy_mingw + script = "$flutter_root/engine/flutter/sky/tools/objcopy_pc_mac.py" + } else if (use_mac) { + objcopy_tool = objcopy_clang + script = "$flutter_root/engine/flutter/sky/tools/objcopy_pc_mac.py" + } else if (target_cpu == "x86_64") { + objcopy_tool = objcopy_x86_64 + script = "$flutter_root/engine/flutter/sky/tools/objcopy.py" + } else { + objcopy_tool = objcopy_aarch64 + script = "$flutter_root/engine/flutter/sky/tools/objcopy.py" + } + + args = [ + "--objcopy", + rebase_path(objcopy_tool), + "--input", + rebase_path(invoker.input), + "--output", + rebase_path(invoker.output), + "--arch", + current_cpu, + ] + + deps = [] + deps += invoker.snapshot_dep + + inputs = [ invoker.input ] + outputs = [ invoker.output ] + } + + source_set("gen_obj_src_" + name) { + sources = [ invoker.output ] + deps = [ ":gen_obj_" + name ] + } +} + +base_output_path = get_label_info(":js_proxyclass", "target_out_dir") +jsproxyclass_obj_path = base_output_path + "/js_proxy_class.o" + +gen_obj("js_proxyclass") { + input = "declarative_frontend/engine/jsproxyClass.js" + if (use_mac) { + jsproxyclass_obj_path = base_output_path + "/js_proxy_class.c" + } + output = jsproxyclass_obj_path + snapshot_dep = [] +} + +# build declarative javascript engine library +template("declarative_js_engine") { + # get is_ohos_platform, use_quickjs_engine flag. + forward_variables_from(invoker, "*") + + ohos_source_set(target_name) { + defines += invoker.defines + deps = [] + configs = [] + is_separated_so = is_ohos_platform && !is_wearable_product + sources = [ + "declarative_frontend/engine/declarative_engine_loader.cpp", + "declarative_frontend/engine/js_view_listeners.cpp", + "declarative_frontend/jsview/js_animation.cpp", + "declarative_frontend/jsview/js_button.cpp", + "declarative_frontend/jsview/js_column.cpp", + "declarative_frontend/jsview/js_container_base.cpp", + "declarative_frontend/jsview/js_customview_base.cpp", + "declarative_frontend/jsview/js_divider.cpp", + "declarative_frontend/jsview/js_foreach.cpp", + "declarative_frontend/jsview/js_grid.cpp", + "declarative_frontend/jsview/js_grid_item.cpp", + "declarative_frontend/jsview/js_image.cpp", + "declarative_frontend/jsview/js_interactable_view.cpp", + "declarative_frontend/jsview/js_list.cpp", + "declarative_frontend/jsview/js_list_item.cpp", + "declarative_frontend/jsview/js_navigator.cpp", + "declarative_frontend/jsview/js_row.cpp", + "declarative_frontend/jsview/js_sliding_panel.cpp", + "declarative_frontend/jsview/js_stack.cpp", + "declarative_frontend/jsview/js_swiper.cpp", + "declarative_frontend/jsview/js_text.cpp", + "declarative_frontend/jsview/js_touch_handler.cpp", + "declarative_frontend/jsview/js_view.cpp", + "declarative_frontend/jsview/js_view_abstract.cpp", + ] + + #add quickjs engine support + if (use_quickjs_engine) { + defines += [ "USE_QUICKJS_ENGINE" ] + defines += [ "ACE_CACHE_PATH=\"\"" ] + + #shoule build qjs anytime, when use_quickjs_engine is true + if (is_separated_so || use_mingw_win || use_mac) { + deps += [ "//third_party/quickjs:qjs" ] + } + + sources += [ + "declarative_frontend/engine/quickjs/functions/qjs_click_function.cpp", + "declarative_frontend/engine/quickjs/functions/qjs_foreach_function.cpp", + "declarative_frontend/engine/quickjs/functions/qjs_function.cpp", + "declarative_frontend/engine/quickjs/functions/qjs_touch_function.cpp", + "declarative_frontend/engine/quickjs/functions/qjs_view_function.cpp", + "declarative_frontend/engine/quickjs/qjs_bindings.cpp", + "declarative_frontend/engine/quickjs/qjs_declarative_engine.cpp", + "declarative_frontend/engine/quickjs/qjs_declarative_engine_instance.cpp", + "declarative_frontend/engine/quickjs/qjs_function_list_entries_container.cpp", + "declarative_frontend/engine/quickjs/qjs_helpers.cpp", + "declarative_frontend/engine/quickjs/qjs_object_template.cpp", + "declarative_frontend/engine/quickjs/qjs_view_register.cpp", + ] + + if (is_separated_so) { + sources += [ + "js_frontend/engine/quickjs/qjs_group_js_bridge.cpp", + "js_frontend/engine/quickjs/qjs_utils.cpp", + ] + } + deps += [ "//foundation/ace/napi:ace_napi_quickjs" ] + } + + configs += [ "$ace_root:ace_config" ] + + print("platform: ${platform}") + + if (is_separated_so) { + deps += [ "$ace_root/adapter/common/cpp:libace" ] + } else { + deps += [ ":js_framework_$platform" ] + defines += [ "BUILT_IN_JS_ENGINE" ] + } + if (is_ohos_platform) { + deps += [ + ":gen_obj_src_js_proxyclass", + ":intl_qjs", + ] + } + + if (use_mingw_win || use_mac) { + deps += [ + ":gen_obj_src_js_proxyclass", + ":intl_qjs_preview", + ] + + defines += [ "_USE_MATH_DEFINES" ] + defines += [ "BUILT_IN_JS_ENGINE" ] + cflags = [ "-std=c++17" ] + } + } +} + +declarative_js_engine("declarative_js_engine_qjs_ohos") { + defines = ace_ohos_defines + is_ohos_platform = true + use_quickjs_engine = true + platform = "ohos" +} diff --git a/frameworks/bridge/card_frontend/card_frontend.cpp b/frameworks/bridge/card_frontend/card_frontend.cpp new file mode 100644 index 00000000..d7fbe3e5 --- /dev/null +++ b/frameworks/bridge/card_frontend/card_frontend.cpp @@ -0,0 +1,309 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/card_frontend/card_frontend.h" + +#include +#include + +#include "base/log/event_report.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace { +namespace { + +const char MANIFEST_JSON[] = "manifest.json"; +const char FILE_TYPE_JSON[] = ".json"; + +} // namespace + +CardFrontend::~CardFrontend() = default; + +bool CardFrontend::Initialize(FrontendType type, const RefPtr& taskExecutor) +{ + type_ = type; + taskExecutor_ = taskExecutor; + delegate_ = AceType::MakeRefPtr(); + manifestParser_ = AceType::MakeRefPtr(); + return true; +} + +void CardFrontend::AttachPipelineContext(const RefPtr& context) +{ + eventHandler_ = AceType::MakeRefPtr(delegate_); + context->RegisterEventHandler(eventHandler_); + holder_.Attach(context); + delegate_->GetJsAccessibilityManager()->SetPipelineContext(context); + delegate_->GetJsAccessibilityManager()->InitializeCallback(); +} + +void CardFrontend::SetAssetManager(const RefPtr& assetManager) +{ + assetManager_ = assetManager; +} + +void CardFrontend::ParseManifest() const +{ + std::call_once(onceFlag_, [this]() { + std::string jsonContent; + if (!Framework::GetAssetContentImpl(assetManager_, MANIFEST_JSON, jsonContent)) { + LOGE("RunPage parse manifest.json failed"); + EventReport::SendFormException(FormExcepType::RUN_PAGE_ERR); + return; + } + manifestParser_->Parse(jsonContent); + }); +} + +void CardFrontend::RunPage(int32_t pageId, const std::string& url, const std::string& params) +{ + ParseManifest(); + std::string urlPath; + if (!url.empty()) { + urlPath = manifestParser_->GetRouter()->GetPagePath(url, FILE_TYPE_JSON); + } + if (urlPath.empty()) { + urlPath = manifestParser_->GetRouter()->GetEntry(FILE_TYPE_JSON); + } + if (urlPath.empty()) { + LOGE("fail to run page due to path url is empty"); + EventReport::SendFormException(FormExcepType::RUN_PAGE_ERR); + return; + } + taskExecutor_->PostTask( + [weak = AceType::WeakClaim(this), urlPath, params] { + auto frontend = weak.Upgrade(); + if (frontend) { + frontend->LoadPage(urlPath, params); + } + }, + TaskExecutor::TaskType::JS); +} + +RefPtr CardFrontend::GetPage(int32_t pageId) const +{ + if (!delegate_) { + return nullptr; + } + return delegate_->GetPage(); +} + +const WindowConfig& CardFrontend::GetWindowConfig() const +{ + ParseManifest(); + return manifestParser_->GetWindowConfig(); +} + +void CardFrontend::LoadPage(const std::string& urlPath, const std::string& params) +{ + auto page = delegate_->CreatePage(0, urlPath); + page->SetPageParams(params); + page->SetFlushCallback([weak = WeakClaim(this)](const RefPtr& page) { + auto front = weak.Upgrade(); + if (front) { + front->OnPageLoaded(page); + } + }); + + std::string content; + if (!Framework::GetAssetContentImpl(assetManager_, urlPath, content)) { + LOGE("Failed to load page"); + EventReport::SendFormException(FormExcepType::LOAD_PAGE_ERR); + return; + } + ParsePage(holder_.Get(), content, params, page); +} + +void CardFrontend::ParsePage(const RefPtr& context, const std::string& pageContent, + const std::string& params, const RefPtr& page) +{ + auto rootBody = Framework::ParseFileData(pageContent); + if (!rootBody) { + LOGE("parse index json error"); + return; + } + + const auto& rootTemplate = rootBody->GetValue("template"); + parseJsCard_ = AceType::MakeRefPtr(context, assetManager_, std::move(rootBody)); + if (!parseJsCard_->Initialize()) { + LOGE("js card parser initialize fail"); + return; + } + parseJsCard_->SetColorMode(colorMode_); + parseJsCard_->SetDensity(density_); + parseJsCard_->LoadImageInfo(); + parseJsCard_->CreateDomNode(page, rootTemplate, -1); + parseJsCard_->ResetNodeId(); + page->FlushCommands(); + if (!params.empty()) { + parseJsCard_->UpdatePageData(params, page); + } +} + +void CardFrontend::OnPageLoaded(const RefPtr& page) +{ + // Pop all JS command and execute them in UI thread. + auto jsCommands = std::make_shared>>(); + page->PopAllCommands(*jsCommands); + page->SetPipelineContext(holder_.Get()); + taskExecutor_->PostTask( + [weak = AceType::WeakClaim(this), page, jsCommands] { + auto frontend = weak.Upgrade(); + if (!frontend) { + return; + } + // Flush all JS commands. + for (const auto& command : *jsCommands) { + command->Execute(page); + } + + auto pipelineContext = frontend->holder_.Get(); + + auto document = page->GetDomDocument(); + if (frontend->pageLoaded_) { + page->ClearShowCommand(); + std::vector dirtyNodes; + page->PopAllDirtyNodes(dirtyNodes); + if (dirtyNodes.empty()) { + return; + } + auto rootNodeId = dirtyNodes.front(); + if (rootNodeId == DOM_ROOT_NODE_ID_BASE) { + auto patchComponent = page->BuildPagePatch(rootNodeId); + if (patchComponent) { + pipelineContext->ScheduleUpdate(patchComponent); + } + } + if (document) { + // When a component is configured with "position: fixed", there is a proxy node in root tree + // instead of the real composed node. So here updates the real composed node. + for (int32_t nodeId : document->GetProxyRelatedNodes()) { + auto patchComponent = page->BuildPagePatch(nodeId); + if (patchComponent) { + pipelineContext->ScheduleUpdate(patchComponent); + } + } + } + return; + } + + // Just clear all dirty nodes. + page->ClearAllDirtyNodes(); + if (document) { + document->HandleComponentPostBinding(); + } + if (pipelineContext->GetAccessibilityManager()) { + pipelineContext->GetAccessibilityManager()->HandleComponentPostBinding(); + } + if (pipelineContext->CanPushPage()) { + pipelineContext->PushPage(page->BuildPage(page->GetUrl())); + frontend->pageLoaded_ = true; + frontend->delegate_->GetJsAccessibilityManager()->SetRunningPage(page); + } + }, + TaskExecutor::TaskType::UI); +} + +void CardFrontend::UpdateData(const std::string& dataList) +{ + taskExecutor_->PostTask( + [weak = AceType::WeakClaim(this), dataList] { + auto frontend = weak.Upgrade(); + if (frontend) { + frontend->UpdatePageData(dataList); + } + }, + TaskExecutor::TaskType::JS); +} + +void CardFrontend::UpdatePageData(const std::string& dataList) +{ + if (!delegate_ || !parseJsCard_) { + LOGE("the delegate or parseJsCard is null"); + EventReport::SendFormException(FormExcepType::UPDATE_PAGE_ERR); + return; + } + parseJsCard_->UpdatePageData(dataList, delegate_->GetPage()); +} + +void CardFrontend::SetColorMode(ColorMode colorMode) +{ + colorMode_ = colorMode; + if (!delegate_ || !parseJsCard_) { + LOGI("the delegate is null"); + return; + } + parseJsCard_->SetColorMode(colorMode); + OnMediaFeatureUpdate(); +} + +void CardFrontend::RebuildAllPages() +{ + if (!delegate_) { + LOGI("the delegate is null"); + return; + } + auto page = delegate_->GetPage(); + taskExecutor_->PostTask( + [weakPage = WeakPtr(page)] { + auto page = weakPage.Upgrade(); + if (!page) { + return; + } + auto domDoc = page->GetDomDocument(); + if (!domDoc) { + return; + } + auto rootNode = domDoc->GetDOMNodeById(domDoc->GetRootNodeId()); + if (!rootNode) { + return; + } + rootNode->UpdateStyleWithChildren(); + }, + TaskExecutor::TaskType::UI); +} + +void CardFrontend::OnSurfaceChanged(int32_t width, int32_t height) +{ + taskExecutor_->PostTask( + [weak = AceType::WeakClaim(this), width, height] { + auto frontend = weak.Upgrade(); + if (frontend) { + frontend->HandleSurfaceChanged(width, height); + } + }, + TaskExecutor::TaskType::JS); +} + +void CardFrontend::HandleSurfaceChanged(int32_t width, int32_t height) +{ + if (!parseJsCard_) { + LOGE("the parser is null"); + return; + } + parseJsCard_->OnSurfaceChanged(width, height); + OnMediaFeatureUpdate(); +} + +void CardFrontend::OnMediaFeatureUpdate() +{ + if (!delegate_ || !parseJsCard_) { + LOGE("the delegate or parser is null"); + return; + } + parseJsCard_->UpdateStyle(delegate_->GetPage()); +} + +} // namespace OHOS::Ace diff --git a/frameworks/bridge/card_frontend/card_frontend.h b/frameworks/bridge/card_frontend/card_frontend.h new file mode 100644 index 00000000..ea5bc729 --- /dev/null +++ b/frameworks/bridge/card_frontend/card_frontend.h @@ -0,0 +1,222 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_CARD_FRONTEND_CARD_FRONTEND_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_CARD_FRONTEND_CARD_FRONTEND_H + +#include + +#include "base/memory/ace_type.h" +#include "core/common/ace_page.h" +#include "core/common/frontend.h" +#include "frameworks/bridge/card_frontend/card_frontend_delegate.h" +#include "frameworks/bridge/card_frontend/js_card_parser.h" +#include "frameworks/bridge/common/accessibility/js_accessibility_manager.h" +#include "frameworks/bridge/common/manifest/manifest_parser.h" +#include "frameworks/bridge/common/utils/page_id_pool.h" +#include "frameworks/bridge/js_frontend/frontend_delegate_impl.h" + +namespace OHOS::Ace { + +class ACE_EXPORT CardFrontend : public Frontend { + DECLARE_ACE_TYPE(CardFrontend, Frontend); + +public: + CardFrontend() = default; + ~CardFrontend() override; + + bool Initialize(FrontendType type, const RefPtr& taskExecutor) override; + void AttachPipelineContext(const RefPtr& context) override; + void SetAssetManager(const RefPtr& assetManager) override; + + void RunPage(int32_t pageId, const std::string& url, const std::string& params) override; + void PushPage(const std::string& url, const std::string& params) override {} + void AddPage(const RefPtr& page) override {} + RefPtr GetPage(int32_t pageId) const override; + void TriggerGarbageCollection() override {} + + void SendCallbackMessage(const std::string& callbackId, const std::string& data) const override {} + // platform channel. + void SetJsMessageDispatcher(const RefPtr& dispatcher) const override {} + void TransferComponentResponseData(int32_t callbackId, int32_t code, std::vector&& data) const override {} + void TransferJsResponseData(int32_t callbackId, int32_t code, std::vector&& data) const override {} + void TransferJsEventData(int32_t callbackId, int32_t code, std::vector&& data) const override {} + void TransferJsPluginGetError(int32_t callbackId, int32_t errorCode, std::string&& errorMessage) const override {} + + void LoadPluginJsCode(std::string&& jsCode) const override {} + + // application lifecycle. + void UpdateState(Frontend::State state) override {} + + // page lifecycle. + bool OnBackPressed() override + { + return false; + } + void OnShow() override + { + foregroundFrontend_ = true; + } + void OnHide() override + { + foregroundFrontend_ = false; + } + + // TODO(maxuchu): these life cycle function needs to be completed. + void OnActive() override {} + void OnInactive() override {} + bool OnStartContinuation() override + { + return false; + } + void OnCompleteContinuation(int32_t code) override {} + void OnSaveData(std::string& data) override {} + bool OnRestoreData(const std::string& data) override + { + return false; + } + void OnNewRequest(const std::string& data) override {} + void CallRouterBack() override {} + void OnSurfaceChanged(int32_t width, int32_t height) override; + void DumpFrontend() const override {} + const WindowConfig& GetWindowConfig() const override; + void UpdateData(const std::string& dataList); + void SetColorMode(ColorMode colorMode) override; + void RebuildAllPages() override; + + RefPtr GetEventHandler() override + { + return eventHandler_; + } + + FrontendType GetType() override + { + return type_; + } + + // judge frontend is foreground frontend. + bool IsForeground() override + { + return foregroundFrontend_; + } + + RefPtr GetAccessibilityManager() const override + { + if (!delegate_) { + LOGE("GetAccessibilityManager delegate is null"); + return nullptr; + } + return delegate_->GetJsAccessibilityManager(); + } + + void SetDensity(double density) + { + density_ = density; + } + +private: + void UpdatePageData(const std::string& dataList); + void LoadPage(const std::string& urlPath, const std::string& params); + void ParsePage(const RefPtr& context, const std::string& pageContent, const std::string& params, + const RefPtr& page); + void OnPageLoaded(const RefPtr& page); + void ParseManifest() const; + void HandleSurfaceChanged(int32_t width, int32_t height); + void OnMediaFeatureUpdate(); + + ColorMode colorMode_ = ColorMode::LIGHT; + FrontendType type_ = FrontendType::JS_CARD; + bool foregroundFrontend_ = false; + bool pageLoaded_ = false; + double density_ = 1.0; + + Framework::PipelineContextHolder holder_; + RefPtr assetManager_; + RefPtr manifestParser_; + + mutable std::once_flag onceFlag_; + RefPtr taskExecutor_; + RefPtr eventHandler_; + RefPtr delegate_; + Framework::PageIdPool pageIdPool_; + RefPtr parseJsCard_; +}; + +class CardEventHandler : public AceEventHandler { +public: + explicit CardEventHandler(const RefPtr& delegate) : delegate_(delegate) + { + ACE_DCHECK(delegate_); + } + + ~CardEventHandler() override = default; + + void HandleAsyncEvent(const EventMarker& eventMarker) override + { + LOGI("HandleAsyncEvent cardId: %{public}d, eventId: %{public}s", eventMarker.GetData().pageId, + eventMarker.GetData().eventId.c_str()); + delegate_->FireCardEvent(eventMarker); + } + + void HandleAsyncEvent(const EventMarker& eventMarker, int32_t param) override + { + LOGW("card event handler does not support this event type!"); + } + + void HandleAsyncEvent(const EventMarker& eventMarker, const BaseEventInfo& info) override + { + LOGI("HandleAsyncEvent cardId: %{public}d, eventId: %{public}s", eventMarker.GetData().pageId, + eventMarker.GetData().eventId.c_str()); + delegate_->FireCardEvent(eventMarker); + } + + void HandleAsyncEvent(const EventMarker& eventMarker, const KeyEvent& info) override + { + LOGW("card event handler does not support this event type!"); + } + + void HandleAsyncEvent(const EventMarker& eventMarker, const std::string& param) override + { + LOGI("HandleAsyncEvent cardId: %{public}d, eventId: %{public}s", eventMarker.GetData().pageId, + eventMarker.GetData().eventId.c_str()); + delegate_->FireCardEvent(eventMarker, param); + } + + void HandleSyncEvent(const EventMarker& eventMarker, bool& result) override + { + LOGW("card event handler does not support this event type!"); + } + + void HandleSyncEvent(const EventMarker& eventMarker, const BaseEventInfo& info, bool& result) override + { + LOGW("card event handler does not support this event type!"); + } + + void HandleSyncEvent(const EventMarker& eventMarker, const KeyEvent& info, bool& result) override + { + LOGW("card event handler does not support this event type!"); + } + + void HandleSyncEvent(const EventMarker& eventMarker, const std::string& param, std::string& result) override + { + LOGW("card event handler does not support this event type!"); + } + +private: + RefPtr delegate_; +}; +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_CARD_FRONTEND_CARD_FRONTEND_H diff --git a/frameworks/bridge/card_frontend/card_frontend_delegate.cpp b/frameworks/bridge/card_frontend/card_frontend_delegate.cpp new file mode 100644 index 00000000..0e120805 --- /dev/null +++ b/frameworks/bridge/card_frontend/card_frontend_delegate.cpp @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/card_frontend/card_frontend_delegate.h" + +#include + +#include "base/log/event_report.h" + +namespace OHOS::Ace::Framework { + +CardFrontendDelegate::CardFrontendDelegate() +{ +#if !defined(WINDOWS_PLATFORM) and !defined(MAC_PLATFORM) + jsAccessibilityManager_ = AceType::MakeRefPtr(); +#else + jsAccessibilityManager_ = AceType::MakeRefPtr(); +#endif +} + +void CardFrontendDelegate::FireCardEvent(const EventMarker& eventMarker, const std::string& params) +{ + if (!page_) { + LOGE("FireCardEvent failed due to page is null"); + return; + } + auto context = page_->GetPipelineContext().Upgrade(); + if (!context) { + LOGE("FireCardEvent get pipeline context failed"); + EventReport::SendFormException(FormExcepType::FIRE_FORM_EVENT_ERR); + return; + } + auto nodeId = eventMarker.GetData().eventId == "_root" ? DOM_ROOT_NODE_ID_BASE + page_->GetPageId() + : StringToInt(eventMarker.GetData().eventId); + auto action = page_->GetNodeEventAction(nodeId, eventMarker.GetData().eventType); + auto node = page_->GetDomDocument()->GetDOMNodeById(nodeId); + if (!node) { + LOGE("FireCardEvent get node failed"); + EventReport::SendFormException(FormExcepType::FIRE_FORM_EVENT_ERR); + return; + } + + auto routerAction = JsonUtil::ParseJsonString(action); + auto paramsJson = JsonUtil::ParseJsonString(params); + if (!routerAction->IsValid()) { + LOGE("FireCardEvent router action is null"); + return; + } + auto paramsInfo = routerAction->GetValue("params"); + if (paramsInfo->IsValid()) { + auto child = paramsInfo->GetChild(); + while (child->IsValid()) { + auto key = child->GetKey(); + auto value = child->GetString(); + child = child->GetNext(); + if (Framework::StartWith(value, "$event.")) { + paramsInfo->Replace(key.c_str(), paramsJson->GetValue(value.substr(7))); + } + } + } + action = routerAction->ToString(); + context->OnActionEvent(action); + + // send event to accessibility + AccessibilityEvent accessibilityEvent; + accessibilityEvent.nodeId = nodeId; + accessibilityEvent.eventType = eventMarker.GetData().eventType; + context->SendEventToAccessibility(accessibilityEvent); +} + +RefPtr& CardFrontendDelegate::CreatePage(int32_t pageId, const std::string& url) +{ + if (!page_) { + auto document = AceType::MakeRefPtr(pageId); + page_ = AceType::MakeRefPtr(pageId, document, url); + } + return page_; +} + +RefPtr& CardFrontendDelegate::GetPage() +{ + return page_; +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/card_frontend/card_frontend_delegate.h b/frameworks/bridge/card_frontend/card_frontend_delegate.h new file mode 100644 index 00000000..edc96f78 --- /dev/null +++ b/frameworks/bridge/card_frontend/card_frontend_delegate.h @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_CARD_FRONTEND_CARD_FRONTEND_DELEGATE_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_CARD_FRONTEND_CARD_FRONTEND_DELEGATE_H + +#include "frameworks/base/memory/ace_type.h" +#include "frameworks/base/utils/noncopyable.h" +#if !defined(WINDOWS_PLATFORM) and !defined(MAC_PLATFORM) +#include "frameworks/bridge/common/accessibility/js_accessibility_manager.h" +#else +#include "frameworks/bridge/common/inspector/js_inspector_manager.h" +#endif +#include "frameworks/bridge/js_frontend/js_ace_page.h" + +namespace OHOS::Ace::Framework { +// This is the primary class by which the CardFrontend delegates +class CardFrontendDelegate : public AceType { + DECLARE_ACE_TYPE(CardFrontendDelegate, AceType); + +public: + CardFrontendDelegate(); + ~CardFrontendDelegate() override = default; + void FireCardEvent(const EventMarker& eventMarker, const std::string& params = ""); + RefPtr& CreatePage(int32_t pageId, const std::string& url); + RefPtr& GetPage(); + + RefPtr GetJsAccessibilityManager() const + { + return jsAccessibilityManager_; + } + +private: + RefPtr page_; + RefPtr jsAccessibilityManager_; + + ACE_DISALLOW_COPY_AND_MOVE(CardFrontendDelegate); +}; +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_CARD_FRONTEND_CARD_FRONTEND_DELEGATE_H diff --git a/frameworks/bridge/card_frontend/js_card_parser.cpp b/frameworks/bridge/card_frontend/js_card_parser.cpp new file mode 100644 index 00000000..9a81f8a7 --- /dev/null +++ b/frameworks/bridge/card_frontend/js_card_parser.cpp @@ -0,0 +1,1694 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/card_frontend/js_card_parser.h" + +#include + +#include "base/i18n/localization.h" +#include "core/common/ace_application_info.h" +#include "frameworks/base/log/event_report.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +namespace { + +const char I18N_FOLDER[] = "i18n/"; +const char FILE_TYPE_JSON[] = ".json"; +const char RESOURCES_FOLDER[] = "resources/"; +const char DEFAULTS_RESOURCES_JSON_FILE[] = "res-defaults.json"; +const char BLOCK_VALUE[] = "blockValue"; + +const std::string REPEAT_INDEX = "$idx"; +const std::string REPEAT_ITEM = "$item"; +const std::string TRUE = "true"; +const std::string FALSE = "false"; + +std::unique_ptr GetJsonValue( + const std::vector& keys, const std::unique_ptr& fileData) +{ + auto it = keys.begin(); + if (!fileData || !fileData->IsValid() || !fileData->Contains(*it)) { + return nullptr; + } + auto data = fileData->GetValue(*it); + for (++it; it != keys.end(); ++it) { + if (data->IsValid() && data->Contains(*it)) { + data = data->GetValue(*it); + } else { + return nullptr; + } + } + + return data; +} + +std::string GetDeviceDpi(double dpi) +{ + static const LinearMapNode dpiMap[] = { + { "ldpi", [](double dpi) { return GreatNotEqual(dpi, 0.0) && LessNotEqual(dpi, 0.875); } }, + { "mdpi", [](double dpi) { return GreatOrEqual(dpi, 0.875) && LessNotEqual(dpi, 1.25); } }, + { "hdpi", [](double dpi) { return GreatOrEqual(dpi, 1.25) && LessNotEqual(dpi, 1.75); } }, + { "xhdpi", [](double dpi) { return GreatOrEqual(dpi, 1.75) && LessNotEqual(dpi, 2.5); } }, + { "xxhdpi", [](double dpi) { return GreatOrEqual(dpi, 2.5) && LessNotEqual(dpi, 3.5); } }, + { "xxxhdpi", [](double dpi) { return GreatOrEqual(dpi, 3.5); } }, + }; + for (const auto& idx : dpiMap) { + if (idx.value(dpi)) { + return idx.key; + } + } + return "mdpi"; +} + +void GetAttrOptionsSeriesPoint(const std::unique_ptr& jsonPoint, PointInfo& pointInfo) +{ + if (!jsonPoint || !jsonPoint->IsValid() || !jsonPoint->IsObject()) { + return; + } + + pointInfo.SetDisplay(true); + auto child = jsonPoint->GetChild(); + while (child && child->IsValid()) { + static const LinearMapNode&, PointInfo&)> chartOptionsPointMap[] = { + { "display", + [](std::unique_ptr& child, PointInfo& pointInfo) { + if (child->IsBool()) { + pointInfo.SetDisplay(child->GetBool()); + } + } }, + { "fillColor", + [](std::unique_ptr& child, PointInfo& pointInfo) { + const auto& valStr = child->GetString(); + pointInfo.SetFillColor(Color::FromString(valStr)); + } }, + { "shape", + [](std::unique_ptr& child, PointInfo& pointInfo) { + const auto& valStr = child->GetString(); + PointShape shape = (valStr == "circle") + ? PointShape::CIRCLE + : (valStr == "square") ? PointShape::SQUARE : PointShape::TRIANGLE; + pointInfo.SetPointShape(shape); + } }, + { "size", + [](std::unique_ptr& child, PointInfo& pointInfo) { + auto valStr = child->IsString() ? child->GetString() : child->ToString(); + pointInfo.SetPointSize(StringToDimension(valStr)); + } }, + { "strokeColor", + [](std::unique_ptr& child, PointInfo& pointInfo) { + auto valStr = child->GetString(); + pointInfo.SetStrokeColor(Color::FromString(valStr)); + } }, + { "strokeWidth", + [](std::unique_ptr& child, PointInfo& pointInfo) { + auto valStr = child->IsString() ? child->GetString() : child->ToString(); + pointInfo.SetPointStrokeWidth(StringToDimension(valStr)); + } }, + }; + auto key = child->GetKey(); + auto iter = BinarySearchFindIndex(chartOptionsPointMap, ArraySize(chartOptionsPointMap), key.c_str()); + if (iter != -1) { + chartOptionsPointMap[iter].value(child, pointInfo); + } else { + LOGD("key : %{public}s unsupported. Ignoring!", key.c_str()); + } + child = child->GetNext(); + } +} + +void GetChartAttrOptionsSeriesLineStyle(const std::unique_ptr& jsonLineStyle, ChartOptions& options) +{ + if (!jsonLineStyle || !jsonLineStyle->IsValid() || !jsonLineStyle->IsObject()) { + return; + } + + auto child = jsonLineStyle->GetChild(); + while (child && child->IsValid()) { + auto key = child->GetKey(); + if (key == "smooth" && child->IsBool()) { + options.SetSmoothFlag(child->GetBool()); + } else if (key == "width") { + auto valStr = child->IsString() ? child->GetString() : child->ToString(); + options.SetLineWidth(StringToDouble(valStr)); + } + child = child->GetNext(); + } +} + +void GetChartAttrOptionsSeries(const std::unique_ptr& jsonSeries, ChartOptions& options) +{ + if (!jsonSeries || !jsonSeries->IsValid()) { + return; + } + auto child = jsonSeries->GetChild(); + while (child && child->IsValid()) { + if (child->IsObject()) { + static const LinearMapNode&, ChartOptions&)> + chartOptionsSeriesMap[] = { + { "bottomPoint", + [](const std::unique_ptr& jsonVal, ChartOptions& chartOptions) { + PointInfo pointInfo; + GetAttrOptionsSeriesPoint(jsonVal, pointInfo); + chartOptions.SetBottomPoint(pointInfo); + } }, + { "headPoint", + [](const std::unique_ptr& jsonVal, ChartOptions& chartOptions) { + PointInfo pointInfo; + GetAttrOptionsSeriesPoint(jsonVal, pointInfo); + chartOptions.SetHeadPoint(pointInfo); + } }, + { "lineStyle", + [](const std::unique_ptr& jsonVal, ChartOptions& chartOptions) { + GetChartAttrOptionsSeriesLineStyle(jsonVal, chartOptions); + } }, + { "topPoint", + [](const std::unique_ptr& jsonVal, ChartOptions& chartOptions) { + PointInfo pointInfo; + GetAttrOptionsSeriesPoint(jsonVal, pointInfo); + chartOptions.SetTopPoint(pointInfo); + } }, + }; + auto key = child->GetKey(); + auto iter = BinarySearchFindIndex(chartOptionsSeriesMap, ArraySize(chartOptionsSeriesMap), key.c_str()); + if (iter != -1) { + chartOptionsSeriesMap[iter].value(child, options); + } else { + LOGD("key : %{public}s unsupported. Ignoring!", key.c_str()); + } + } + child = child->GetNext(); + } +} + +void GetAttrOptionsAxis(const std::unique_ptr& jsonAxis, AxisOption& axisOption) +{ + if (!jsonAxis || !jsonAxis->IsValid() || !jsonAxis->IsObject()) { + return; + } + + auto child = jsonAxis->GetChild(); + while (child && child->IsValid()) { + static const LinearMapNode&, AxisOption&)> chartOptionsAxisMap[] = { + { "axisTick", + [](const std::unique_ptr& jsonAxis, AxisOption& axis) { + if (jsonAxis->IsNumber()) { + axis.tickNumber = jsonAxis->GetInt(); + } + } }, + { "color", + [](const std::unique_ptr& jsonAxis, AxisOption& axis) { + const auto& valStr = jsonAxis->GetString(); + axis.color = Color::FromString(valStr); + } }, + { "display", + [](const std::unique_ptr& jsonAxis, AxisOption& axis) { + if (jsonAxis->IsBool()) { + axis.display = jsonAxis->GetBool(); + } + } }, + { "max", + [](const std::unique_ptr& jsonAxis, AxisOption& axis) { + if (jsonAxis->IsNumber()) { + axis.max = jsonAxis->GetDouble(); + } + } }, + { "min", + [](const std::unique_ptr& jsonAxis, AxisOption& axis) { + if (jsonAxis->IsNumber()) { + axis.min = jsonAxis->GetDouble(); + } + } }, + }; + auto key = child->GetKey(); + auto iter = BinarySearchFindIndex(chartOptionsAxisMap, ArraySize(chartOptionsAxisMap), key.c_str()); + if (iter != -1) { + chartOptionsAxisMap[iter].value(child, axisOption); + } else { + LOGD("key : %{public}s unsupported. Ignoring!", key.c_str()); + } + child = child->GetNext(); + } +} + +void GetAttrOptions(const std::unique_ptr& jsonOption, ChartOptions& options) +{ + if (!jsonOption || !jsonOption->IsValid() || !jsonOption->IsObject()) { + return; + } + auto child = jsonOption->GetChild(); + while (child && child->IsValid()) { + static const LinearMapNode&, ChartOptions&)> chartOptionsMap[] = { + { "series", [](const std::unique_ptr& jsonSeries, + ChartOptions& chartOptions) { GetChartAttrOptionsSeries(jsonSeries, chartOptions); } }, + { "xAxis", + [](const std::unique_ptr& jsonOption, ChartOptions& chartOptions) { + AxisOption xAxis; + GetAttrOptionsAxis(jsonOption, xAxis); + chartOptions.SetXAxis(xAxis); + } }, + { "yAxis", + [](const std::unique_ptr& jsonOption, ChartOptions& chartOptions) { + AxisOption yAxis; + GetAttrOptionsAxis(jsonOption, yAxis); + chartOptions.SetYAxis(yAxis); + } }, + }; + auto key = child->GetKey(); + auto iter = BinarySearchFindIndex(chartOptionsMap, ArraySize(chartOptionsMap), key.c_str()); + if (iter != -1) { + chartOptionsMap[iter].value(child, options); + } else { + LOGD("key : %{public}s unsupported. Ignoring!", key.c_str()); + } + child = child->GetNext(); + } +} + +void ParseLineDash(const std::string val, SegmentInfo& segmentInfo) +{ + std::vector dash; + StringUtils::StringSpliter(val, ',', dash); + if (!dash.empty()) { + segmentInfo.SetLineType(dash[0] == "dashed" ? LineType::DASHED : LineType::SOLID); + } + if (dash.size() > 1) { + segmentInfo.SetSolidWidth(Framework::StringToDouble(dash[1])); + } + if (dash.size() > 2) { + segmentInfo.SetSpaceWidth(Framework::StringToDouble(dash[2])); + } +} + +void ParseTextPlacement(const std::string val, TextInfo& textInfo) +{ + if (val == "top") { + textInfo.SetPlacement(Placement::TOP); + } else if (val == "bottom") { + textInfo.SetPlacement(Placement::BOTTOM); + } else if (val == "none") { + textInfo.SetPlacement(Placement::NONE); + } +} + +void GetAttrDataSetData(const std::unique_ptr& jsonData, MainChart& dataset) +{ + if (!jsonData || !jsonData->IsValid() || !jsonData->IsArray()) { + return; + } + std::vector line; + for (int32_t i = 0; i < jsonData->GetArraySize(); ++i) { + PointInfo pointInfo; + TextInfo textInfo; + SegmentInfo segmentInfo; + if (jsonData->GetArrayItem(i)->IsNumber()) { + pointInfo.SetX(static_cast(i)); + pointInfo.SetY(jsonData->GetArrayItem(i)->GetDouble()); + } else if (jsonData->GetArrayItem(i)->IsObject()) { + auto data = jsonData->GetArrayItem(i)->GetChild(); + while (data && data->IsValid()) { + auto key = data->GetKey(); + auto val = data->GetString(); + if (key == "description") { + textInfo.SetTextValue(val); + } else if (key == "textLocation") { + ParseTextPlacement(val, textInfo); + } else if (key == "lineDash") { + ParseLineDash(val, segmentInfo); + } else if (key == "lineColor") { + segmentInfo.SetSegmentColor(Color::FromString(val)); + } else if (key == "textColor") { + textInfo.SetColor(Color::FromString(val)); + } else if (key == "value" && data->IsNumber()) { + pointInfo.SetX(static_cast(i)); + pointInfo.SetY(data->GetDouble()); + } else if (key == "pointStyle" && data->IsObject()) { + GetAttrOptionsSeriesPoint(data, pointInfo); + } else { + LOGW("key is %{public}s. Ignoring!", key.c_str()); + } + data = data->GetNext(); + } + } else { + continue; + } + LineInfo lineInfo; + lineInfo.SetPointInfo(pointInfo); + lineInfo.SetTextInfo(textInfo); + lineInfo.SetSegmentInfo(segmentInfo); + line.emplace_back(lineInfo); + } + dataset.SetData(line); +} + +void GetAttrDataset(const std::unique_ptr& jsonDataSet, MainChart& dataset) +{ + if (!jsonDataSet || !jsonDataSet->IsValid()) { + return; + } + auto data = jsonDataSet->GetChild(); + while (data && data->IsValid()) { + auto key = data->GetKey(); + if (key == "gradient") { + dataset.SetGradient(data->GetBool()); + } else if (key == "strokeColor") { + dataset.SetStrokeColor(Color::FromString(data->GetString())); + } else if (key == "fillColor") { + dataset.SetFillColor(Color::FromString(data->GetString())); + } else if (key == "data" && data->IsArray()) { + GetAttrDataSetData(data, dataset); + } + data = data->GetNext(); + } +} + +void GetAttrDatasets(const std::unique_ptr& jsonDataSets, std::vector& datasets) +{ + if (!jsonDataSets || !jsonDataSets->IsValid() || !jsonDataSets->IsArray()) { + return; + } + for (int32_t i = 0; i < jsonDataSets->GetArraySize(); ++i) { + auto item = jsonDataSets->GetArrayItem(i); + if (item->IsObject()) { + MainChart chart; + GetAttrDataset(item, chart); + datasets.emplace_back(chart); + } + } +} + +void ParseSegmentObject(const std::unique_ptr& jsonDataSet, Segment& segment) +{ + if (!jsonDataSet || !jsonDataSet->IsValid()) { + return; + } + auto data = jsonDataSet->GetChild(); + while (data && data->IsValid()) { + auto key = data->GetKey(); + if (key == "startColor") { + segment.SetStartColor(Color::FromString(data->GetString())); + segment.SetColorType(SegmentStyleType::USE_COLOR); + } else if (key == "endColor") { + segment.SetEndColor(Color::FromString(data->GetString())); + segment.SetColorType(SegmentStyleType::USE_COLOR); + } else if (key == "value") { + segment.SetValue(data->GetDouble()); + } else if (key == "name") { + segment.SetSegmentName(data->GetString()); + } else { + LOGD("json parser %{public}s fail", key.c_str()); + } + data = data->GetNext(); + } +} + +void ParseSegments(const std::unique_ptr& jsonDataSets, std::vector& datasets) +{ + if (!jsonDataSets || !jsonDataSets->IsValid()) { + return; + } + if (jsonDataSets->IsObject()) { + Segment segment; + ParseSegmentObject(jsonDataSets, segment); + datasets.emplace_back(segment); + } else if (jsonDataSets->IsArray()) { + for (int32_t i = 0; i < jsonDataSets->GetArraySize(); ++i) { + auto item = jsonDataSets->GetArrayItem(i); + if (item && item->IsObject()) { + Segment segment; + ParseSegmentObject(item, segment); + datasets.emplace_back(segment); + } + } + } +} + +void GetBadgeConfig(const std::unique_ptr& jsonDataSets, BadgeConfig& badgeConfig) +{ + if (!jsonDataSets || !jsonDataSets->IsValid()) { + return; + } + auto data = jsonDataSets->GetChild(); + while (data && data->IsValid()) { + auto key = data->GetKey(); + auto valStr = data->GetString(); + if (valStr.empty()) { + valStr = data->ToString(); + } + static const LinearMapNode badgeConfigOperators[] = { + { DOM_BADGE_COLOR, + [](const std::string& valStr, BadgeConfig& badgeConfig) { + badgeConfig.badgeColor = { Color::FromString(valStr), true }; + } }, + { DOM_BADGE_CIRCLE_SIZE, + [](const std::string& valStr, BadgeConfig& badgeConfig) { + badgeConfig.badgeSize = { StringToDimension(valStr), true }; + } }, + { DOM_BADGE_TEXT_COLOR, + [](const std::string& valStr, BadgeConfig& badgeConfig) { + badgeConfig.textColor = { Color::FromString(valStr), true }; + } }, + { DOM_BADGE_TEXT_FONT_SIZE, + [](const std::string& valStr, BadgeConfig& badgeConfig) { + badgeConfig.textSize = { StringToDimension(valStr), true }; + } }, + }; + auto operatorIter = BinarySearchFindIndex(badgeConfigOperators, ArraySize(badgeConfigOperators), key.c_str()); + if (operatorIter != -1) { + badgeConfigOperators[operatorIter].value(valStr, badgeConfig); + } else { + LOGD("key : %{public}s unsupported. Ignoring!", key.c_str()); + } + data = data->GetNext(); + } +} + +bool GetStrValue(const std::string& key, std::stack& keyStack) +{ + auto topKey = keyStack.top(); + auto data = JsonUtil::ParseJsonString(topKey); + if (!data || !data->IsValid() || !data->Contains(key)) { + return false; + } + keyStack.pop(); + auto dataValue = data->GetValue(key); + auto dataStr = dataValue->IsString() ? dataValue->GetString() : dataValue->ToString(); + keyStack.emplace(dataStr); + return true; +} + +bool GetIndexValue(const std::string& key, std::stack& keyStack) +{ + auto topValue = keyStack.top(); + auto data = JsonUtil::ParseJsonString(topValue); + auto index = StringToInt(key); + if (!data || !data->IsValid() || !data->IsArray() || (data->IsArray() && index >= data->GetArraySize())) { + return false; + } + keyStack.pop(); + auto dataValue = data->GetArrayItem(index); + auto dataStr = dataValue->IsString() ? dataValue->GetString() : dataValue->ToString(); + keyStack.emplace(dataStr); + return true; +} + +bool IsVariable(const std::string& value) +{ + return StartWith(value, "{{") && EndWith(value, "}}"); +} + +bool IsMultiVariable(const std::string& value) +{ + return StartWith(value, "$f(") && EndWith(value, ")"); +} + +} // namespace + +void JsCardParser::ParseAttributes(const std::unique_ptr& rootJson, int32_t nodeId, + std::vector>& attrs, JsCommandDomElementOperator* command) +{ + auto attrList = rootJson->GetValue("attr"); + if (!attrList || !attrList->IsValid()) { + return; + } + auto attr = attrList->GetChild(); + while (attr && attr->IsValid()) { + auto key = attr->GetKey(); + auto value = attr->IsString() ? attr->GetString() : attr->ToString(); + static const LinearMapNode + attrOperators[] = { + { "clockconfig", + [](std::string& value, JsCommandDomElementOperator* command, JsCardParser& jsCardParser) { + ClockConfig clockConfig; + jsCardParser.ParseSpecialAttr( + std::bind(&JsCardParser::GetClockConfig, &jsCardParser, std::placeholders::_1, + std::placeholders::_2), + value, clockConfig); + command->SetClockConfig(clockConfig); + } }, + { "config", + [](std::string& value, JsCommandDomElementOperator* command, JsCardParser& jsCardParser) { + BadgeConfig badgeConfig; + jsCardParser.ParseSpecialAttr(GetBadgeConfig, value, badgeConfig); + command->SetBadgeConfig(badgeConfig); + } }, + { "datasets", + [](std::string& value, JsCommandDomElementOperator* command, JsCardParser& jsCardParser) { + std::vector datasets; + jsCardParser.ParseSpecialAttr(GetAttrDatasets, value, datasets); + command->SetDatasets(datasets); + } }, + { "options", + [](std::string& value, JsCommandDomElementOperator* command, JsCardParser& jsCardParser) { + ChartOptions options; + jsCardParser.ParseSpecialAttr(GetAttrOptions, value, options); + command->SetOptions(options); + } }, + { "segments", + [](std::string& value, JsCommandDomElementOperator* command, JsCardParser& jsCardParser) { + std::vector segments; + jsCardParser.ParseSpecialAttr(ParseSegments, value, segments); + command->SetSegments(segments); + } }, + }; + auto operatorIter = BinarySearchFindIndex(attrOperators, ArraySize(attrOperators), key.c_str()); + if (operatorIter != -1) { + attrOperators[operatorIter].value(value, command, *this); + attr = attr->GetNext(); + continue; + } + if (IsVariable(value)) { + ParseVariable(value); + } else if (IsMultiVariable(value)) { + ParseMultiVariable(value); + } + attrs.emplace_back(std::make_pair(key, value)); + attr = attr->GetNext(); + } +} + +bool JsCardParser::GetShownValue(std::string& value) +{ + std::vector splitResult; + StringUtils::SplitStr(value, "&&", splitResult); + bool showValue = true; + std::vector> shownVariable; + for (const auto& splitStr : splitResult) { + if (IsVariable(splitStr)) { + auto key = splitStr; + ParseVariable(key); + showValue &= StringToBool(key); + } else if (StartWith(splitStr, "!{{") && EndWith(splitStr, "}}")) { + // !{{value}} --> {{value}} + auto key = splitStr.substr(1, splitStr.size() - 1); + ParseVariable(key); + showValue &= !StringToBool(key); + } else { + return false; + } + } + value = showValue ? TRUE : FALSE; + return true; +} + +bool JsCardParser::GetRepeatData(std::unique_ptr& repeatValue, std::string& key) +{ + if (!repeatValue || !repeatValue->IsValid()) { + LOGE("GetRepeatData failed, repeat value is invalid."); + return false; + } + auto dataValue = repeatValue->IsString() ? repeatValue->GetString() : repeatValue->ToString(); + if (IsVariable(dataValue)) { + // {{value}} --> value + key = dataValue.substr(2, dataValue.size() - 4); + if (!dataJson_->Contains(key)) { + return false; + } + repeatValue = dataJson_->GetValue(key); + } + return true; +} + +void JsCardParser::SetRepeatItemValue(uint32_t index, const std::unique_ptr& repeatValue, bool hasKeyValue) +{ + if (!repeatValue || !repeatValue->IsValid()) { + LOGE("SetRepeatItemValue failed, repeat value is invalid."); + return; + } + auto idx = std::to_string(index); + auto itemValue = repeatValue->GetArrayItem(index); + + // update $idx and $item value. + repeatJson_->Contains(REPEAT_INDEX) ? repeatJson_->Replace(REPEAT_INDEX.c_str(), idx.c_str()) + : repeatJson_->Put(REPEAT_INDEX.c_str(), idx.c_str()); + repeatJson_->Contains(REPEAT_ITEM) ? repeatJson_->Replace(REPEAT_ITEM.c_str(), itemValue) + : repeatJson_->Put(REPEAT_ITEM.c_str(), itemValue); + if (!hasKeyValue) { + return; + } + // update the user-defined index and item value. + if (!repeatIndex_.empty()) { + repeatJson_->Contains(repeatIndex_) ? repeatJson_->Replace(repeatIndex_.c_str(), idx.c_str()) + : repeatJson_->Put(repeatIndex_.c_str(), idx.c_str()); + } + if (!repeatItem_.empty()) { + repeatJson_->Contains(repeatItem_) ? repeatJson_->Replace(repeatItem_.c_str(), itemValue) + : repeatJson_->Put(repeatItem_.c_str(), itemValue); + } +} + +void JsCardParser::ParseRepeatIndexItem(const std::unique_ptr& repeatValue) +{ + if (!repeatValue || !repeatValue->IsValid()) { + LOGE("ParseRepeatIndexItem failed, repeat value is invalid."); + return; + } + if (repeatValue->Contains("key")) { + repeatIndex_ = repeatValue->GetValue("key")->GetString(); + } + if (repeatValue->Contains("value")) { + repeatItem_ = repeatValue->GetValue("value")->GetString(); + } +} +void JsCardParser::ResetRepeatIndexItem() +{ + repeatIndex_.clear(); + repeatItem_.clear(); +} + +void JsCardParser::LoadResImageUrl(const std::string& jsonFile, const std::string& splitStr, std::string& value) +{ + auto content = resourceJson_->GetValue(jsonFile); + if (!content || !content->IsValid()) { + LOGE("LoadResImageUrl failed, content is invalid."); + return; + } + std::vector keys; + StringUtils::StringSpliter(splitStr, '.', keys); + auto result = GetJsonValue(keys, content); + if (result && result->IsValid()) { + value = result->GetString(); + } +} + +void JsCardParser::GetResImageUrl(std::string& value) +{ + static std::array themeArray = { "", "dark" }; + auto mode = static_cast(colorMode_); + // $r('value') --> value + auto splitStr = value.substr(4, value.size() - 6); + auto iter = imageUrlMap_.find(splitStr + themeArray[mode]); + if (iter != imageUrlMap_.end()) { + value = iter->second; + return; + } + auto assetManager = assetManager_.Upgrade(); + std::string imagePath; + auto jsonFile = std::string(RESOURCES_FOLDER) + "res-" + themeArray[mode] + (themeArray[mode].empty() ? "" : "-") + + GetDeviceDpi(density_) + std::string(FILE_TYPE_JSON); + LoadResImageUrl(jsonFile, splitStr, imagePath); + + if (!themeArray[mode].empty() && imagePath.empty()) { + jsonFile = + std::string(RESOURCES_FOLDER) + "res-" + themeArray[mode] + "-" + "defaults" + std::string(FILE_TYPE_JSON); + LoadResImageUrl(jsonFile, splitStr, imagePath); + } + + if (imagePath.empty()) { + jsonFile = std::string(RESOURCES_FOLDER) + std::string(DEFAULTS_RESOURCES_JSON_FILE); + LoadResImageUrl(jsonFile, splitStr, imagePath); + } + value = imagePath; + imageUrlMap_.emplace(splitStr + themeArray[mode], imagePath); +} + +bool JsCardParser::GetI18nData(std::string& value) +{ + std::vector keys; + StringUtils::StringSpliter(value, '.', keys); + std::vector files; + auto context = context_.Upgrade(); + if (!context) { + return false; + } + + if (!AceApplicationInfo::GetInstance().GetFiles(context->GetInstanceId(), I18N_FOLDER, files)) { + LOGE("Get i18n files fail!"); + return false; + } + + std::vector fileNameList; + for (const auto& file : files) { + if (EndWith(file, FILE_TYPE_JSON)) { + fileNameList.emplace_back(file.substr(0, file.size() - (sizeof(FILE_TYPE_JSON) - 1))); + } + } + auto priorityFileName = AceApplicationInfo::GetInstance().GetLocaleFallback(fileNameList); + for (const auto& fileName : priorityFileName) { + auto filePath = std::string(I18N_FOLDER) + fileName + std::string(FILE_TYPE_JSON); + std::string content; + auto assetManager = assetManager_.Upgrade(); + if (GetAssetContentImpl(assetManager, filePath, content)) { + auto fileData = ParseFileData(content); + auto result = GetJsonValue(keys, fileData); + if (result && result->IsValid()) { + value = result->IsString() ? result->GetString() : result->ToString(); + return true; + } + } + } + return false; +} + +void JsCardParser::GetPlurals(std::string& value) +{ + // $tc('strings.plurals', 2) --> 'strings.plurals', 2 + auto variable = value.substr(4, value.size() - 5); + std::vector splitStr; + StringUtils::SplitStr(variable, ",", splitStr); + if (splitStr.size() != 2) { + return; + } + if (!StartWith(splitStr[0], "'") || !EndWith(splitStr[0], "'")) { + return; + } + // 'strings.plurals' --> strings.plurals + auto tempStr = splitStr[0].substr(1, splitStr[0].size() - 2); + GetI18nData(tempStr); + auto plurals = ParseFileData(tempStr); + auto key = Localization::GetInstance()->PluralRulesFormat(StringUtils::StringToDouble(splitStr[1])); + if (plurals->IsValid() && plurals->Contains(key)) { + value = plurals->GetValue(key)->GetString(); + } +} + +void JsCardParser::ParseStyles(const std::unique_ptr& rootJson, int32_t nodeId, + std::vector>& styles) +{ + // parse class style + auto classList = rootJson->GetValue("classList"); + if (classList && classList->IsValid()) { + auto styleList = classList->GetChild(); + while (styleList && styleList->IsValid()) { + auto value = styleList->GetString(); + if (IsVariable(value)) { + ParseVariable(value); + } + std::string styleClass("." + value); + SelectStyle(styleClass, styleJson_, styles); + SelectMediaQueryStyle(styleClass, styles); + styleList = styleList->GetNext(); + } + } + + // parse id style + if (rootJson->Contains("id")) { + auto value = rootJson->GetValue("id")->GetString(); + if (IsVariable(value)) { + ParseVariable(value); + } + std::string idStyle("#" + value); + SelectStyle(idStyle, styleJson_, styles); + SelectMediaQueryStyle(idStyle, styles); + } + + // parse inline style + ParseInlineStyles(rootJson, styles); +} + +void JsCardParser::ParseInlineStyles( + const std::unique_ptr& rootJson, std::vector>& styles) +{ + auto styleList = rootJson->GetValue("style"); + if (!styleList || !styleList->IsValid()) { + return; + } + auto style = styleList->GetChild(); + while (style && style->IsValid()) { + auto key = style->GetKey(); + auto value = style->IsString() ? style->GetString() : style->ToString(); + if (IsVariable(value)) { + ParseVariable(value); + } + if (key == "fontFamily") { + RegisterFont(value); + } + styles.emplace_back(std::make_pair(key, value)); + style = style->GetNext(); + } +} + +void JsCardParser::SelectStyle(const std::string& className, const std::unique_ptr& styleClass, + std::vector>& styles) +{ + auto styleDetail = styleClass->GetValue(className); + if (!styleDetail || !styleDetail->IsValid()) { + return; + } + auto style = styleDetail->GetChild(); + while (style && style->IsValid()) { + auto key = style->GetKey(); + auto styleValue = style->IsString() ? style->GetString() : style->ToString(); + if (key == "fontFamily") { + RegisterFont(styleValue); + } + styles.emplace_back(std::make_pair(key, styleValue)); + style = style->GetNext(); + } +} + +void JsCardParser::SelectMediaQueryStyle( + const std::string& styleClass, std::vector>& styles) +{ + const auto& mediaFeature = mediaQueryer_.GetMediaFeature(); + for (const auto& iter : mediaQueryStyles_) { + if (mediaQueryer_.MatchCondition(iter.first, mediaFeature)) { + auto mediaIter = mediaQueryStyles_.find(iter.first); + if (mediaIter != mediaQueryStyles_.end()) { + SelectStyle(styleClass, mediaIter->second, styles); + } + } + } +} + +void JsCardParser::RegisterFont(const std::string& fontFamily) +{ + auto fontFaceValue = styleJson_->GetValue("@FONT-FACE"); + if (!fontFaceValue || !fontFaceValue->IsValid()) { + return; + } + auto fontFace = fontFaceValue->GetChild(); + while (fontFace && fontFace->IsValid()) { + if (fontFace->GetValue("fontFamily")->GetString() == fontFamily) { + auto fontSrc = fontFace->GetValue("src")->GetString(); + if (fontSrc.size() > 7) { + // url("src") --> src + fontSrc = fontSrc.substr(5, fontSrc.size() - 7); + auto context = context_.Upgrade(); + if (context) { + context->RegisterFont(fontFamily, fontSrc); + return; + } + } + } + fontFace = fontFace->GetNext(); + } +} + +void JsCardParser::ParseEvents(const std::unique_ptr& rootJson, std::vector& events, + const RefPtr& page, int32_t nodeId) +{ + auto eventList = rootJson->GetValue("events"); + if (!eventList || !eventList->IsValid()) { + return; + } + auto event = eventList->GetChild(); + while (event && event->IsValid()) { + auto key = event->GetKey(); + auto value = event->GetString(); + events.emplace_back(key); + auto action = eventJson_->GetValue(value)->ToString(); + auto eventAction = GetEventAction(action, key, nodeId); + page->AddNodeEvent(nodeId, key, eventAction); + event = event->GetNext(); + } +} + +std::string JsCardParser::GetEventAction(const std::string& action, const std::string& actionType, int32_t nodeId) +{ + auto actionDetail = JsonUtil::ParseJsonString(action); + if (!actionDetail || !actionDetail->IsValid()) { + LOGE("GetEventAction: action detail is invalid"); + return ""; + } + auto child = actionDetail->GetChild(); + while (child && child->IsValid()) { + auto key = child->GetKey(); + auto value = child->IsString() ? child->GetString() : child->ToString(); + child = child->GetNext(); + if (key != "params") { + auto originValue = value; + if (IsVariable(value)) { + ParseVariable(value); + actionDetail->Replace(key.c_str(), value.c_str()); + } + } else { + auto jsonParamDetail = actionDetail->GetValue("params"); + if (jsonParamDetail->IsValid()) { + auto pChild = jsonParamDetail->GetChild(); + while (pChild->IsValid()) { + auto paramKey = pChild->GetKey(); + auto paramValue = pChild->IsString() ? pChild->GetString() : child->ToString(); + pChild = pChild->GetNext(); + auto originParamValue = paramValue; + if (IsVariable(paramValue)) { + ParseVariable(paramValue); + jsonParamDetail->Replace(paramKey.c_str(), paramValue.c_str()); + } + } + } + actionDetail->Replace("params", jsonParamDetail); + } + } + return actionDetail->ToString(); +} + +void JsCardParser::LoadMediaQueryStyle() +{ + auto media = styleJson_->GetValue("@MEDIA"); + if (!media || !media->IsValid()) { + return; + } + auto mediaChild = media->GetChild(); + while (mediaChild && mediaChild->IsValid()) { + auto condition = mediaChild->GetString("condition", ""); + if (condition.empty()) { + mediaChild = mediaChild->GetNext(); + continue; + } + + // record media query style + auto mediaQueryStyle = JsonUtil::Create(true); + auto child = mediaChild->GetChild(); + while (child && child->IsValid()) { + mediaQueryStyle->Put(child->GetKey().c_str(), child); + child = child->GetNext(); + } + + mediaQueryStyles_[condition] = std::move(mediaQueryStyle); + mediaChild = mediaChild->GetNext(); + } +} + +void JsCardParser::GetResourceValue(const std::string& path) +{ + auto assetManager = assetManager_.Upgrade(); + if (!assetManager) { + return; + } + std::string content; + if (GetAssetContentImpl(assetManager, path, content) && !content.empty()) { + auto jsonBody = ParseFileData(content); + resourceJson_->Put(path.c_str(), jsonBody); + } +} + +void JsCardParser::LoadImageInfo() +{ + resourceJson_ = JsonUtil::Create(true); + + std::string path = std::string(RESOURCES_FOLDER) + std::string(DEFAULTS_RESOURCES_JSON_FILE); + GetResourceValue(path); + path = std::string(RESOURCES_FOLDER) + "res-" + GetDeviceDpi(density_) + std::string(FILE_TYPE_JSON); + GetResourceValue(path); + path = std::string(RESOURCES_FOLDER) + "res-" + "dark-defaults" + std::string(FILE_TYPE_JSON); + GetResourceValue(path); + path = std::string(RESOURCES_FOLDER) + "res-" + "dark-" + GetDeviceDpi(density_) + std::string(FILE_TYPE_JSON); + GetResourceValue(path); +} + +void JsCardParser::UpdatePageData(const std::string& dataList, const RefPtr& page) +{ + LOGI("update data is %{private}s", dataList.c_str()); + if (!page || dataList.empty()) { + LOGE("update data is null"); + return; + } + const auto& rootData = JsonUtil::ParseJsonString(dataList); + if (!rootData || !rootData->IsValid()) { + return; + } + auto data = rootData->GetChild(); + if (!data || !data->IsValid()) { + LOGE("update card data error"); + return; + } + while (data && data->IsValid()) { + auto key = data->GetKey(); + dataJson_->Replace(key.c_str(), data); + repeatJson_->Replace(key.c_str(), data); + data = data->GetNext(); + } + SetUpdateStatus(page); +} + +void JsCardParser::UpdateStyle(const RefPtr& page) +{ + if (!page) { + LOGE("update color mode error"); + return; + } + SetUpdateStatus(page); +} + +bool JsCardParser::ParseComplexExpression(std::string& value) +{ + if (value.find('[') == std::string::npos && value.find('.') == std::string::npos) { + return false; + } + std::stack keyStack; + auto key = value; + if (!ParseArrayExpression(key, keyStack) || keyStack.size() != 1) { + return false; + } + auto result = keyStack.top(); + keyStack.pop(); + value = result; + return true; +} + +bool JsCardParser::ParseArrayExpression(const std::string& expression, std::stack& keyStack) +{ + auto dataJson = isRepeat_ ? repeatJson_->ToString() : dataJson_->ToString(); + auto dataValue = JsonUtil::ParseJsonString(dataJson); + std::string tmpKey; + for (char i : expression) { + switch (i) { + case '[': + if (tmpKey.empty()) { + return false; + } + if (!ParsePointOperator(tmpKey, keyStack, dataJson)) { + return false; + } + tmpKey.clear(); + break; + case ']': + if (StringUtils::IsNumber(tmpKey)) { + if (!GetIndexValue(tmpKey, keyStack)) { + return false; + } + } else if (tmpKey.empty() && keyStack.size() >= 2) { + auto topValue = keyStack.top(); + keyStack.pop(); + if (!GetStrValue(topValue, keyStack) && !GetIndexValue(topValue, keyStack)) { + return false; + } + } else if (!tmpKey.empty() && dataValue->Contains(tmpKey)) { + auto data = dataValue->GetValue(tmpKey); + auto dataStr = data->IsString() ? data->GetString() : data->ToString(); + if (!GetStrValue(dataStr, keyStack) && !GetIndexValue(dataStr, keyStack)) { + return false; + } + } else if (tmpKey.find('.') != std::string::npos) { + std::vector keys; + StringUtils::StringSpliter(tmpKey, '.', keys); + auto jsonValue = GetJsonValue(keys, dataValue); + if (jsonValue && jsonValue->IsValid()) { + auto result = jsonValue->IsString() ? jsonValue->GetString() : jsonValue->ToString(); + if (!GetStrValue(result, keyStack) && !GetIndexValue(result, keyStack)) { + return false; + } + } + } else { + return false; + } + tmpKey.clear(); + break; + default: { + tmpKey += i; + break; + } + } + } + if (!tmpKey.empty()) { + return ParsePointOperator(tmpKey, keyStack, dataJson); + } + return true; +} + +void JsCardParser::UpdateDomNode(const RefPtr& page, const std::unique_ptr& rootJson, + int32_t parentId, const std::vector& idArray) +{ + if (!page || !rootJson->IsValid()) { + LOGE("fail to CreateDomNode due to page or root is invalid"); + return; + } + if (rootJson->Contains("repeat") && !isRepeat_) { + CreateRepeatDomNode(page, rootJson, parentId); + return; + } + auto type = rootJson->GetString("type"); + if (type == "block") { + CreateBlockNode(page, rootJson, parentId); + return; + } + int32_t selfId = 0; + if (!isRepeat_) { + selfId = parentId < 0 ? DOM_ROOT_NODE_ID_BASE : nodeId_; + ++nodeId_; + } else { + if (listNodeIndex_ < static_cast(idArray.size())) { + selfId = idArray[listNodeIndex_]; + ++listNodeIndex_; + } + } + bool shouldShow = true; + bool hasShownAttr = false; + GetShownAttr(rootJson, shouldShow, hasShownAttr); + + std::vector> attrs; + std::vector> styles; + std::vector events; + + auto styleCommand = Referenced::MakeRefPtr(selfId); + auto attrCommand = Referenced::MakeRefPtr(selfId); + auto ptr = Referenced::RawPtr(attrCommand); + if (shouldShow && hasShownAttr) { + attrs.emplace_back(std::make_pair("show", TRUE)); + } + ParseAttributes(rootJson, selfId, attrs, (JsCommandDomElementOperator*)ptr); + if (!shouldShow && hasShownAttr) { + attrs.emplace_back(std::make_pair("show", FALSE)); + } + ParseStyles(rootJson, selfId, styles); + ParseEvents(rootJson, events, page, selfId); + attrCommand->SetAttributes(std::move(attrs)); + styleCommand->SetStyles(std::move(styles)); + page->PushCommand(attrCommand); + page->PushCommand(styleCommand); + + auto childList = rootJson->GetValue("children"); + if (childList && childList->IsValid()) { + auto child = childList->GetChild(); + while (child && child->IsValid()) { + UpdateDomNode(page, child, selfId, idArray); + child = child->GetNext(); + } + } +} + +void JsCardParser::ParseVariable(std::string& value) +{ + // {{value}} --> value + auto variable = value.substr(2, value.size() - 4); + if (ParseComplexExpression(variable) || GetVariable(variable) || ParseSpecialVariable(variable) || + ParseTernaryExpression(variable) || ParseLogicalExpression(variable)) { + value = variable; + } +} + +void JsCardParser::ParseMultiVariable(std::string& value) +{ + if (value.size() < 4) { + return; + } + // $f({{key1}} {{key2}}) --> {{key1}} {{key2}} + auto variable = value.substr(3, value.size() - 4); + std::vector splitStr; + StringUtils::SplitStr(variable, ".", splitStr); + std::string resultStr; + for (auto& split : splitStr) { + if (IsVariable(split)) { + ParseVariable(split); + } + resultStr += (split + '.'); + } + value = resultStr.substr(0, resultStr.size() - 1); +} + +bool JsCardParser::ParseTernaryExpression(std::string& value) +{ + if (value.find('?') == std::string::npos || value.find(':') == std::string::npos) { + return false; + } + // eg:{{flag ? key1 : key2}}, flagStr[0] = "flag", flagStr[1] = "key1 : key2". + std::vector flagStr; + StringUtils::SplitStr(value, "?", flagStr); + if (flagStr.size() != 2) { + return false; + } + GetVariable(flagStr[0]); + auto flag = flagStr[0] == TRUE; + + std::vector keyStr; + StringUtils::SplitStr(flagStr[1], ":", keyStr); + if (keyStr.size() != 2) { + return false; + } + // parse key1 and key2. + GetVariable(keyStr[0]); + GetVariable(keyStr[1]); + value = flag ? keyStr[0] : keyStr[1]; + return true; +} + +bool JsCardParser::ParseLogicalExpression(std::string& value) +{ + std::vector splitStr; + if (value.find("&&") != std::string::npos) { + // for {{flag1 && flag2}}. + StringUtils::SplitStr(value, "&&", splitStr); + if (splitStr.size() != 2) { + return false; + } + GetVariable(splitStr[0]); + GetVariable(splitStr[1]); + value = (splitStr[0] == TRUE && splitStr[1] == TRUE) ? TRUE : FALSE; + return true; + } else if (value.find("||") != std::string::npos) { + // for {{flag1 || flag2}}. + StringUtils::SplitStr(value, "||", splitStr); + if (splitStr.size() != 2) { + return false; + } + GetVariable(splitStr[0]); + GetVariable(splitStr[1]); + value = (splitStr[0] == TRUE || splitStr[1] == TRUE) ? TRUE : FALSE; + return true; + } else if (value.find('!') != std::string::npos) { + // for {{!flag1}}. + StringUtils::SplitStr(value, "!", splitStr); + if (splitStr.size() != 1) { + return false; + } + GetVariable(splitStr[0]); + value = splitStr[0] == TRUE ? FALSE : TRUE; + return true; + } + return false; +} + +bool JsCardParser::ParseSpecialVariable(std::string& value) +{ + if (StartWith(value, "$r('") && EndWith(value, "')")) { + GetResImageUrl(value); + return true; + } else if (StartWith(value, "$t('") && EndWith(value, "')")) { + // $t('value') --> value + value = value.substr(4, value.size() - 6); + return GetI18nData(value); + } else if (StartWith(value, "$tc(") && EndWith(value, ")")) { + GetPlurals(value); + return true; + } + return false; +} + +bool JsCardParser::GetVariable(std::string& value) +{ + auto key = value; + if (!repeatJson_->Contains(key)) { + return false; + } + auto dataValue = dataJson_->GetValue(key); + if (isRepeat_) { + dataValue = repeatJson_->GetValue(key); + } + if (!dataValue || !dataValue->IsValid()) { + return false; + } + value = dataValue->IsString() ? dataValue->GetString() : dataValue->ToString(); + if (IsVariable(value)) { + ParseVariable(value); + } + return true; +} + +template +void JsCardParser::ParseSpecialAttr( + const std::function&, std::vector&)>& function, std::string& value, + std::vector& vector) +{ + if (IsVariable(value)) { + ParseVariable(value); + auto jsonValue = JsonUtil::ParseJsonString(value); + function(jsonValue, vector); + } else { + auto jsonValue = JsonUtil::ParseJsonString(value); + function(jsonValue, vector); + } +} + +template +void JsCardParser::ParseSpecialAttr( + const std::function&, T&)>& function, std::string& variable, T& value) +{ + if (IsVariable(variable)) { + ParseVariable(variable); + auto jsonValue = JsonUtil::ParseJsonString(variable); + function(jsonValue, value); + } else { + auto jsonValue = JsonUtil::ParseJsonString(variable); + function(jsonValue, value); + } +} + +bool JsCardParser::ParsePointOperator( + const std::string& tmpKey, std::stack& keyStack, const std::string& dataJson) +{ + std::unique_ptr data; + if (tmpKey[0] == '.') { + if (keyStack.empty()) { + return false; + } + data = JsonUtil::ParseJsonString(keyStack.top()); + keyStack.pop(); + } else { + data = JsonUtil::ParseJsonString(dataJson); + } + std::vector keys; + StringUtils::StringSpliter(tmpKey, '.', keys); + auto result = GetJsonValue(keys, data); + if (result && result->IsValid()) { + auto dataStr = result->IsString() ? result->GetString() : result->ToString(); + keyStack.emplace(dataStr); + return true; + } + return false; +} + +void JsCardParser::CreateDomNode(const RefPtr& page, const std::unique_ptr& rootJson, + int32_t parentId, bool isNewNode) +{ + if (!page || !rootJson->IsValid()) { + LOGE("fail to CreateDomNode due to page or root is invalid"); + EventReport::SendFormException(FormExcepType::CREATE_NODE_ERR); + return; + } + if (rootJson->Contains("repeat") && !isRepeat_) { + CreateRepeatDomNode(page, rootJson, parentId); + return; + } + auto type = rootJson->GetString("type"); + if (type == "block") { + CreateBlockNode(page, rootJson, parentId); + return; + } + int32_t nodeId = 0; + if (!isNewNode) { + nodeId = parentId < 0 ? DOM_ROOT_NODE_ID_BASE : nodeId_; + ++nodeId_; + } else { + nodeId = maxNodeId_++; + } + if (isRepeat_) { + idArray_.emplace_back(nodeId); + } + bool shouldShow = true; + bool hasShownAttr = false; + GetShownAttr(rootJson, shouldShow, hasShownAttr); + + std::vector> attrs; + std::vector> styles; + std::vector events; + + RefPtr command; + if (parentId < 0) { + command = Referenced::MakeRefPtr(type, nodeId); + } else { + command = Referenced::MakeRefPtr(type, nodeId, parentId); + } + command->SetPipelineContext(context_); + auto ptr = Referenced::RawPtr(command); + if (shouldShow && hasShownAttr) { + attrs.emplace_back(std::make_pair("show", TRUE)); + } + ParseAttributes(rootJson, nodeId, attrs, (Framework::JsCommandDomElementOperator*)ptr); + if (!shouldShow && hasShownAttr) { + attrs.emplace_back(std::make_pair("show", FALSE)); + } + LOGD("card nodeId: %d, parentId: %d, type: %s", nodeId, parentId, type.c_str()); + ParseStyles(rootJson, nodeId, styles); + ParseEvents(rootJson, events, page, nodeId); + command->SetAttributes(std::move(attrs)); + command->SetStyles(std::move(styles)); + command->AddEvents(std::move(events)); + page->PushCommand(command); + + auto childList = rootJson->GetValue("children"); + if (childList && childList->IsValid()) { + auto child = childList->GetChild(); + while (child && child->IsValid()) { + CreateDomNode(page, child, nodeId, isNewNode); + child = child->GetNext(); + } + } +} + +void JsCardParser::CreateRepeatDomNode( + const RefPtr& page, const std::unique_ptr& rootJson, int32_t parentId) +{ + auto repeatValue = rootJson->GetValue("repeat"); + if (!repeatValue || !repeatValue->IsValid()) { + LOGE("CreateRepeatDomNode failed, repeat value is invalid."); + return; + } + isRepeat_ = true; + std::string key; + if (repeatValue->IsString()) { + // eg: repeatValue = {{list}}. + if (!GetRepeatData(repeatValue, key)) { + LOGE("CreateRepeatDomNode failed, root data does not contains repeat value."); + isRepeat_ = false; + return; + } + ProcessRepeatNode(page, rootJson, key, parentId, false, repeatValue); + } else { + // eg: repeatValue = {"exp": {{list}}, "key":"index", "value": "item"}. + if (!repeatValue->Contains("exp")) { + LOGE("CreateRepeatDomNode failed, repeat value does not contains exp."); + isRepeat_ = false; + return; + } + auto expValue = repeatValue->GetValue("exp"); + if (!GetRepeatData(expValue, key)) { + LOGE("CreateRepeatDomNode failed, root data does not contains exp value."); + isRepeat_ = false; + return; + } + ParseRepeatIndexItem(repeatValue); + ProcessRepeatNode(page, rootJson, key, parentId, true, repeatValue); + ResetRepeatIndexItem(); + } + isRepeat_ = false; +} + +void JsCardParser::GetClockConfig(const std::unique_ptr& jsonDataSets, ClockConfig& clockConfig) +{ + if (!jsonDataSets || !jsonDataSets->IsValid()) { + return; + } + auto data = jsonDataSets->GetChild(); + while (data && data->IsValid()) { + auto key = data->GetKey(); + auto valStr = data->IsString() ? data->GetString() : data->ToString(); + static const LinearMapNode clockConfigOperators[] = { + { DOM_DIGIT_COLOR, [](std::string& valStr, ClockConfig& clockConfig, + JsCardParser& jsCardParser) { clockConfig.digitColor_ = Color::FromString(valStr); } }, + { DOM_DIGIT_COLOR_NIGHT, + [](std::string& valStr, ClockConfig& clockConfig, JsCardParser& jsCardParser) { + clockConfig.digitColorNight_ = Color::FromString(valStr); + } }, + { DOM_DIGIT_RADIUS_RATIO, + [](std::string& valStr, ClockConfig& clockConfig, JsCardParser& jsCardParser) { + clockConfig.digitRadiusRatio_ = StringToDouble(valStr); + } }, + { DOM_DIGIT_SIZE_RATIO, + [](std::string& valStr, ClockConfig& clockConfig, JsCardParser& jsCardParser) { + clockConfig.digitSizeRatio_ = StringToDouble(valStr); + } }, + { DOM_CLOCK_FACE_SOURCE, + [](std::string& valStr, ClockConfig& clockConfig, JsCardParser& jsCardParser) { + if (IsVariable(valStr)) { + jsCardParser.ParseVariable(valStr); + } + clockConfig.clockFaceSrc_ = valStr; + } }, + { DOM_CLOCK_FACE_SOURCE_NIGHT, + [](std::string& valStr, ClockConfig& clockConfig, JsCardParser& jsCardParser) { + if (IsVariable(valStr)) { + jsCardParser.ParseVariable(valStr); + } + clockConfig.clockFaceNightSrc_ = valStr; + } }, + { DOM_HOUR_HAND_SOURCE, + [](std::string& valStr, ClockConfig& clockConfig, JsCardParser& jsCardParser) { + if (IsVariable(valStr)) { + jsCardParser.ParseVariable(valStr); + } + clockConfig.hourHandSrc_ = valStr; + } }, + { DOM_HOUR_HAND_SOURCE_NIGHT, + [](std::string& valStr, ClockConfig& clockConfig, JsCardParser& jsCardParser) { + if (IsVariable(valStr)) { + jsCardParser.ParseVariable(valStr); + } + clockConfig.hourHandNightSrc_ = valStr; + } }, + { DOM_MINUTE_HAND_SOURCE, + [](std::string& valStr, ClockConfig& clockConfig, JsCardParser& jsCardParser) { + if (IsVariable(valStr)) { + jsCardParser.ParseVariable(valStr); + } + clockConfig.minuteHandSrc_ = valStr; + } }, + { DOM_MINUTE_HAND_SOURCE_NIGHT, + [](std::string& valStr, ClockConfig& clockConfig, JsCardParser& jsCardParser) { + if (IsVariable(valStr)) { + jsCardParser.ParseVariable(valStr); + } + clockConfig.minuteHandNightSrc_ = valStr; + } }, + { DOM_SECOND_HAND_SOURCE, + [](std::string& valStr, ClockConfig& clockConfig, JsCardParser& jsCardParser) { + if (IsVariable(valStr)) { + jsCardParser.ParseVariable(valStr); + } + clockConfig.secondHandSrc_ = valStr; + } }, + { DOM_SECOND_HAND_SOURCE_NIGHT, + [](std::string& valStr, ClockConfig& clockConfig, JsCardParser& jsCardParser) { + if (IsVariable(valStr)) { + jsCardParser.ParseVariable(valStr); + } + clockConfig.secondHandNightSrc_ = valStr; + } }, + }; + auto operatorIter = BinarySearchFindIndex(clockConfigOperators, ArraySize(clockConfigOperators), key.c_str()); + if (operatorIter != -1) { + clockConfigOperators[operatorIter].value(valStr, clockConfig, *this); + } else { + LOGD("key : %{public}s unsupported. Ignoring!", key.c_str()); + } + data = data->GetNext(); + } +} + +void JsCardParser::ProcessRepeatNode(const RefPtr& page, + const std::unique_ptr& rootJson, const std::string& key, int32_t parentId, bool hasKeyValue, + std::unique_ptr& repeatValue) +{ + ++numberOfForNode_; + if (parsingStatus_ == ParsingStatus::CREATE) { + if (repeatValue->GetArraySize() == 0) { + listIdMap_.emplace(numberOfForNode_, std::make_pair(idArray_, 0)); + singleLoopMap_.emplace(key, 0); + return; + } + for (auto i = 0; i < repeatValue->GetArraySize(); i++) { + SetRepeatItemValue(i, repeatValue, hasKeyValue); + CreateDomNode(page, rootJson, parentId); + } + // Number of nodes in a single loop + auto factor = idArray_.size() / repeatValue->GetArraySize(); + listIdMap_.emplace(numberOfForNode_, std::make_pair(idArray_, static_cast(idArray_.size()))); + singleLoopMap_.emplace(key, factor); + } else if (parsingStatus_ == ParsingStatus::UPDATE) { + auto iter = listIdMap_.find(numberOfForNode_); + auto loopIter = singleLoopMap_.find(key); + if (iter == listIdMap_.end() || loopIter == singleLoopMap_.end()) { + return; + } + auto array = iter->second.first; + auto factor = loopIter->second; + int32_t lastSize = factor > 0 ? array.size() / factor : 0; + auto updateSize = std::min(static_cast(lastSize), repeatValue->GetArraySize()); + for (auto i = 0; i < updateSize; ++i) { + SetRepeatItemValue(i, repeatValue, hasKeyValue); + UpdateDomNode(page, rootJson, parentId, array); + } + + if (repeatValue->GetArraySize() > lastSize) { + for (auto i = lastSize; i < repeatValue->GetArraySize(); ++i) { + SetRepeatItemValue(i, repeatValue, hasKeyValue); + CreateDomNode(page, rootJson, parentId, true); + } + if (factor == 0) { + factor = static_cast(idArray_.size()) / repeatValue->GetArraySize(); + loopIter->second = factor; + } + iter->second.first.insert(iter->second.first.end(), idArray_.begin(), idArray_.end()); + } else if (lastSize > repeatValue->GetArraySize()) { + for (int32_t i = array.size() - factor; i >= repeatValue->GetArraySize() * factor; i = i - factor) { + auto nodeId = iter->second.first[i]; + page->PushCommand(Referenced::MakeRefPtr(nodeId)); + } + iter->second.first.erase(iter->second.first.end() - (array.size() - repeatValue->GetArraySize() * factor), + iter->second.first.end()); + } + nodeId_ += iter->second.second; + } + idArray_.clear(); + listNodeIndex_ = 0; +} + +void JsCardParser::SetUpdateStatus(const RefPtr& page) +{ + parsingStatus_ = ParsingStatus::UPDATE; + UpdateDomNode(page, rootJson_, -1); + nodeId_ = 0; + numberOfForNode_ = 0; + page->FlushCommands(); +} + +void JsCardParser::GetShownAttr(const std::unique_ptr& rootJson, bool& shouldShow, bool& hasShownAttr) +{ + GetBoolValue(rootJson, "shown", shouldShow, hasShownAttr); + bool blockValue = false; + bool hasBlock = false; + GetBoolValue(rootJson, BLOCK_VALUE, blockValue, hasBlock); + if (hasBlock) { + shouldShow &= blockValue; + hasShownAttr = true; + } +} + +bool JsCardParser::Initialize() +{ + rootJson_ = rootBody_->GetValue("template"); + styleJson_ = rootBody_->GetValue("styles"); + eventJson_ = rootBody_->GetValue("actions"); + dataJson_ = rootBody_->GetValue("data"); + + if (!rootJson_ || !styleJson_ || !eventJson_ || !dataJson_) { + LOGE("the json template is nullptr"); + return false; + } + if (!rootJson_->IsValid() || !styleJson_->IsValid() || !eventJson_->IsValid() || !dataJson_->IsValid()) { + LOGE("the json template is error"); + return false; + } + // repeatJson contains dataJson. + repeatJson_ = JsonUtil::ParseJsonString(dataJson_->ToString()); + LoadMediaQueryStyle(); + return true; +} + +void JsCardParser::OnSurfaceChanged(int32_t width, int32_t height) +{ + mediaQueryer_.SetSurfaceSize(width, height); +} + +void JsCardParser::CreateBlockNode(const OHOS::Ace::RefPtr& page, + const std::unique_ptr& rootJson, int32_t parentId) +{ + auto blockChild = rootJson->GetValue("children"); + bool shouldShow = true; + bool hasShownAttr = false; + GetBoolValue(rootJson, "shown", shouldShow, hasShownAttr); + if (blockChild && blockChild->IsValid()) { + auto child = blockChild->GetChild(); + while (child && child->IsValid()) { + if (child->Contains(BLOCK_VALUE)) { + shouldShow ? child->Replace(BLOCK_VALUE, "true") : child->Replace(BLOCK_VALUE, "false"); + } else { + shouldShow ? child->Put(BLOCK_VALUE, "true") : child->Put(BLOCK_VALUE, "false"); + } + parsingStatus_ == ParsingStatus::UPDATE ? UpdateDomNode(page, child, parentId) + : CreateDomNode(page, child, parentId); + child = child->GetNext(); + } + } +} + +void JsCardParser::GetBoolValue( + const std::unique_ptr& rootJson, const std::string& key, bool& shouldShow, bool& hasShownAttr) +{ + auto shown = rootJson->GetValue(key); + if (shown && shown->IsValid()) { + if (shown->IsString()) { + auto shownValue = shown->GetString(); + GetShownValue(shownValue); + shouldShow = shownValue == "true"; + hasShownAttr = true; + } else if (shown->IsBool()) { + shouldShow = shown->GetBool(); + hasShownAttr = true; + } + } +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/card_frontend/js_card_parser.h b/frameworks/bridge/card_frontend/js_card_parser.h new file mode 100644 index 00000000..ab60c44a --- /dev/null +++ b/frameworks/bridge/card_frontend/js_card_parser.h @@ -0,0 +1,170 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_CARD_FRONTEND_JS_CARD_PARSER_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_CARD_FRONTEND_JS_CARD_PARSER_H + +#include +#include + +#include "base/memory/referenced.h" +#include "frameworks/bridge/card_frontend/media_queryer.h" +#include "frameworks/bridge/js_frontend/frontend_delegate_impl.h" +#include "frameworks/bridge/js_frontend/js_command.h" + +namespace OHOS::Ace::Framework { + +enum class ParsingStatus { CREATE, UPDATE }; + +class ACE_EXPORT JsCardParser : public Referenced { +public: + JsCardParser(const WeakPtr& context, const WeakPtr& assertManager, + std::unique_ptr&& rootBody) + : Referenced(false), context_(context), assetManager_(assertManager), rootBody_(std::move(rootBody)) + {} + ~JsCardParser() override = default; + + void ParseAttributes(const std::unique_ptr& rootJson, int32_t nodeId, + std::vector>& attrs, JsCommandDomElementOperator* command); + bool GetShownValue(std::string& value); + bool GetRepeatData(std::unique_ptr& repeatValue, std::string& key); + + void ParseStyles(const std::unique_ptr& rootJson, int32_t nodeId, + std::vector>& styles); + void ParseEvents(const std::unique_ptr& rootJson, std::vector& events, + const RefPtr& page, int32_t nodeId); + void UpdatePageData(const std::string& dataList, const RefPtr& page); + void LoadImageInfo(); + void UpdateStyle(const RefPtr& page); + void CreateDomNode(const RefPtr& page, const std::unique_ptr& rootJson, + int32_t parentId, bool isNewNode = false); + void ParseVariable(std::string& value); + void ParseMultiVariable(std::string& value); + + void ParseRepeatIndexItem(const std::unique_ptr& repeatValue); + void SetRepeatItemValue(uint32_t index, const std::unique_ptr& repeatValue, bool hasKeyValue); + bool Initialize(); + + const WeakPtr& GetPipelineContext() const + { + return context_; + } + + void SetColorMode(ColorMode colorMode) + { + colorMode_ = colorMode; + mediaQueryer_.SetColorMode(colorMode); + } + + void SetDensity(double density) + { + density_ = density; + } + + void ResetNodeId() + { + maxNodeId_ = nodeId_; + numberOfForNode_ = 0; + nodeId_ = 0; + } + + int32_t GetNumberOfNodes() const + { + return maxNodeId_; + } + + // add for test case + void SetIsRepeat(bool isRepeat) + { + isRepeat_ = isRepeat; + } + + void OnSurfaceChanged(int32_t width, int32_t height); + +private: + void GetResImageUrl(std::string& value); + bool GetI18nData(std::string& value); + void GetPlurals(std::string& value); + void ParseInlineStyles( + const std::unique_ptr& rootJson, std::vector>& styles); + void SelectStyle(const std::string& className, const std::unique_ptr& styleClass, + std::vector>& styles); + void SelectMediaQueryStyle(const std::string& styleClass, std::vector>& styles); + void LoadMediaQueryStyle(); + void LoadResImageUrl(const std::string& jsonFile, const std::string& splitStr, std::string& value); + void RegisterFont(const std::string& fontFamily); + std::string GetEventAction(const std::string& action, const std::string& actionType, int32_t nodeId); + bool ParseComplexExpression(std::string& value); + bool ParseTernaryExpression(std::string& value); + bool ParseLogicalExpression(std::string& value); + bool ParseArrayExpression(const std::string& expression, std::stack& keyStack); + void UpdateDomNode(const RefPtr& page, const std::unique_ptr& rootJson, + int32_t parentId, const std::vector& idArray = std::vector()); + bool ParseSpecialVariable(std::string& value); + bool GetVariable(std::string& value); + template + void ParseSpecialAttr(const std::function&, std::vector&)>& function, + std::string& value, std::vector& vector); + template + void ParseSpecialAttr( + const std::function&, T&)>& function, std::string& variable, T& value); + bool ParsePointOperator(const std::string& tmpKey, std::stack& keyStack, const std::string& dataJson); + void ResetRepeatIndexItem(); + void CreateRepeatDomNode( + const RefPtr& page, const std::unique_ptr& rootJson, int32_t parentId); + void GetResourceValue(const std::string& path); + void GetClockConfig(const std::unique_ptr& jsonDataSets, ClockConfig& clockConfig); + void ProcessRepeatNode(const RefPtr& page, + const std::unique_ptr& rootJson, const std::string& key, int32_t parentId, bool hasKeyValue, + std::unique_ptr& repeatValue); + void SetUpdateStatus(const RefPtr& page); + void GetShownAttr(const std::unique_ptr& rootJson, bool& shouldShow, bool& hasShownAttr); + void CreateBlockNode( + const RefPtr& page, const std::unique_ptr& rootJson, int32_t parentId); + void GetBoolValue( + const std::unique_ptr& rootJson, const std::string& key, bool& shouldShow, bool& hasShownAttr); + + double density_ = 1.0; + int32_t nodeId_ = 0; + int32_t maxNodeId_ = 0; + int32_t numberOfForNode_ = 0; + int32_t listNodeIndex_ = 0; + ColorMode colorMode_ = ColorMode::LIGHT; + ParsingStatus parsingStatus_ = ParsingStatus::CREATE; + std::vector idArray_; + WeakPtr context_; + WeakPtr assetManager_; + std::unique_ptr rootBody_; + std::unique_ptr styleJson_; + std::unique_ptr rootJson_; + std::unique_ptr eventJson_; + std::unique_ptr dataJson_; + std::unique_ptr repeatJson_; + std::unique_ptr resourceJson_; + std::unordered_map imageUrlMap_; + std::unordered_map, int32_t>> listIdMap_; + std::unordered_map singleLoopMap_; + std::unordered_map> mediaQueryStyles_; + MediaQueryer mediaQueryer_; + + // for repeat attr + bool isRepeat_ = false; + std::string repeatIndex_; + std::string repeatItem_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_CARD_FRONTEND_JS_CARD_PARSER_H diff --git a/frameworks/bridge/card_frontend/media_queryer.cpp b/frameworks/bridge/card_frontend/media_queryer.cpp new file mode 100644 index 00000000..1ea38dc0 --- /dev/null +++ b/frameworks/bridge/card_frontend/media_queryer.cpp @@ -0,0 +1,361 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/card_frontend/media_queryer.h" + +#include +#include + +#include "base/log/log.h" +#include "frameworks/bridge/common/media_query/media_query_info.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +namespace { + +constexpr double NOT_FOUND = -1.0; +enum class MediaError { + NONE, + SYNTAX, +}; +using ConditionParser = + std::function; + +class MediaQueryerRule { +public: + MediaQueryerRule(const std::regex& regex, const ConditionParser& parser, uint32_t matchResultSize) + : regex_(regex), parser_(parser), matchResultSize_(matchResultSize) + {} + explicit MediaQueryerRule(const std::regex& regex) : regex_(regex) {} + ~MediaQueryerRule() = default; + + bool ParseCondition(std::smatch& matchResults, const MediaFeature& mediaFeature, MediaError& failReason) const + { + if (!parser_) { + return false; + } + if (matchResults.size() != matchResultSize_) { + failReason = MediaError::SYNTAX; + return false; + } + return parser_(matchResults, mediaFeature, failReason); + } + bool Match(const std::string& condition, std::smatch& matchResults) const + { + return std::regex_match(condition, matchResults, regex_); + } + bool Match(const std::string& condition) const + { + return std::regex_match(condition, regex_); + } + +private: + const std::regex regex_; + const ConditionParser parser_; + const uint32_t matchResultSize_ = 0; +}; + +namespace RelationShip { +const std::string GREAT_OR_EQUAL(">="); +const std::string GREAT_NOT_EQUAL = ">"; +const std::string LESS_OR_EQUAL = "<="; +const std::string LESS_NOT_EQUAL = "<"; +}; // namespace RelationShip + +/** + * transfer unit the same with condition value unit + * @param value: device value should be transfer unit the same with condition value + * @param unit: condition value unit, such as: dpi/dpcm/dppx + */ +double TransferValue(double value, const std::string& unit) +{ + double transfer; + if (unit == "dpi") { + transfer = 96.0; // 1px = 96 dpi + } else if (unit == "dpcm") { + transfer = 36.0; // 1px = 36 dpcm + } else { + transfer = 1.0; // default same with device unit: px + } + return value * transfer; +} + +bool CalculateExpression(double lvalue, const std::string& relationship, double rvalue, MediaError& failReason) +{ + if (relationship == RelationShip::GREAT_OR_EQUAL) { + return GreatOrEqual(lvalue, rvalue); + } else if (relationship == RelationShip::GREAT_NOT_EQUAL) { + return GreatNotEqual(lvalue, rvalue); + } else if (relationship == RelationShip::LESS_OR_EQUAL) { + return LessOrEqual(lvalue, rvalue); + } else if (relationship == RelationShip::LESS_NOT_EQUAL) { + return LessNotEqual(lvalue, rvalue); + } else { + failReason = MediaError::SYNTAX; + } + return false; +} + +const MediaQueryerRule CONDITION_WITH_SCREEN( + std::regex("(((only|not)screen)|screen)((and|or|,)\\([\\w\\.:><=-]+\\))*")); +const MediaQueryerRule CONDITION_WITHOUT_SCREEN(std::regex("\\([\\w\\.:><=-]+\\)((and|or|,)\\([\\w\\.:><=-]+\\))*")); +const MediaQueryerRule CONDITION_WITH_AND(std::regex("(\\([\\.a-z0-9:>=<-]+\\))(and\\([\\.a-z0-9:>=<-]+\\))+")); + +// condition such as: (100 < width < 1000) +const MediaQueryerRule CSS_LEVEL4_MULTI( + std::regex("\\(([\\d\\.]+)(dpi|dppx|dpcm|px)?(>|<|>=|<=)([a-z0-9:-]+)(>|<|>=|<=)([\\d\\.]+)(dpi|dppx|dpcm|px)?\\)"), + [](const std::smatch& matchResults, const MediaFeature& mediaFeature, MediaError& failReason) { + static constexpr int32_t LEFT_CONDITION_VALUE = 6; + static constexpr int32_t LEFT_UNIT = 7; + static constexpr int32_t LEFT_RELATIONSHIP = 5; + static constexpr int32_t MEDIA_FEATURE = 4; + static constexpr int32_t RIGHT_CONDITION_VALUE = 1; + static constexpr int32_t RIGHT_UNIT = 2; + static constexpr int32_t RIGHT_RELATIONSHIP = 3; + + auto mediaFeatureValue = mediaFeature->GetDouble(matchResults[MEDIA_FEATURE], NOT_FOUND); + return CalculateExpression(TransferValue(mediaFeatureValue, matchResults[LEFT_UNIT]), + matchResults[LEFT_RELATIONSHIP], StringToDouble(matchResults[LEFT_CONDITION_VALUE]), failReason) && + CalculateExpression(StringToDouble(matchResults[RIGHT_CONDITION_VALUE]), + matchResults[RIGHT_RELATIONSHIP], TransferValue(mediaFeatureValue, matchResults[RIGHT_UNIT]), + failReason); + }, + 8); + +// condition such as: width < 1000 +const MediaQueryerRule CSS_LEVEL4_LEFT( + std::regex("\\(([^m][a-z-]+)(>|<|>=|<=)([\\d\\.]+)(dpi|dppx|dpcm|px)?\\)"), + [](const std::smatch& matchResults, const MediaFeature& mediaFeature, MediaError& failReason) { + static constexpr int32_t CONDITION_VALUE = 3; + static constexpr int32_t UNIT = 4; + static constexpr int32_t RELATIONSHIP = 2; + static constexpr int32_t MEDIA_FEATURE = 1; + + return CalculateExpression( + TransferValue(mediaFeature->GetDouble(matchResults[MEDIA_FEATURE], NOT_FOUND), matchResults[UNIT]), + matchResults[RELATIONSHIP], StringToDouble(matchResults[CONDITION_VALUE]), failReason); + }, + 5); + +// condition such as: 1000 < width +const MediaQueryerRule CSS_LEVEL4_RIGHT( + std::regex("\\(([\\d\\.]+)(dpi|dppx|dpcm|px)?(>|<|>=|<=)([^m][a-z-]+)\\)"), + [](const std::smatch& matchResults, const MediaFeature& mediaFeature, MediaError& failReason) { + static constexpr int32_t CONDITION_VALUE = 1; + static constexpr int32_t UNIT = 2; + static constexpr int32_t RELATIONSHIP = 3; + static constexpr int32_t MEDIA_FEATURE = 4; + return CalculateExpression(StringToDouble(matchResults[CONDITION_VALUE]), matchResults[RELATIONSHIP], + TransferValue(mediaFeature->GetDouble(matchResults[MEDIA_FEATURE], NOT_FOUND), matchResults[UNIT]), + failReason); + }, + 5); + +// condition such as: min-width: 1000 +const MediaQueryerRule CSS_LEVEL3_RULE( + std::regex("\\((min|max)-([a-z-]+):([\\d\\.]+)(dpi|dppx|dpcm)?\\)"), + [](const std::smatch& matchResults, const MediaFeature& mediaFeature, MediaError& failReason) { + static constexpr int32_t RELATIONSHIP = 1; + static constexpr int32_t MEDIA_FEATURE = 2; + static constexpr int32_t CONDITION_VALUE = 3; + static constexpr int32_t UNIT = 4; + std::string relationship; + if (matchResults[RELATIONSHIP] == "max") { + relationship = RelationShip::LESS_OR_EQUAL; + } else if (matchResults[RELATIONSHIP] == "min") { + relationship = RelationShip::GREAT_OR_EQUAL; + } else { + return false; + } + + return CalculateExpression( + TransferValue(mediaFeature->GetDouble(matchResults[MEDIA_FEATURE], NOT_FOUND), matchResults[UNIT]), + relationship, StringToDouble(matchResults[CONDITION_VALUE]), failReason); + }, + 5); + +const MediaQueryerRule SCREEN_SHAPE_RULE( + std::regex("\\(round-screen:([a-z]+)\\)"), + [](const std::smatch& matchResults, const MediaFeature& mediaFeature, MediaError& failReason) { + static constexpr int32_t CONDITION_VALUE = 1; + return StringToBool(matchResults[CONDITION_VALUE]) == mediaFeature->GetBool("round-screen", false); + }, + 2); + +const MediaQueryerRule ORIENTATION_RULE( + std::regex("\\(orientation:([a-z]+)\\)"), + [](const std::smatch& matchResults, const MediaFeature& mediaFeature, MediaError& failReason) { + static constexpr int32_t CONDITION_VALUE = 1; + return matchResults[CONDITION_VALUE] == mediaFeature->GetString("orientation", ""); + }, + 2); + +const MediaQueryerRule DEVICE_TYPE_RULE( + std::regex("\\(device-type:([a-z]+)\\)"), + [](const std::smatch& matchResults, const MediaFeature& mediaFeature, MediaError& failReason) { + static constexpr int32_t CONDITION_VALUE = 1; + return matchResults[CONDITION_VALUE] == mediaFeature->GetString("device-type", ""); + }, + 2); + +const MediaQueryerRule DARK_MODE_RULE( + std::regex("\\(dark-mode:([a-z]+)\\)"), + [](const std::smatch& matchResults, const MediaFeature& mediaFeature, MediaError& failReason) { + static constexpr int32_t CONDITION_VALUE = 1; + return StringToBool(matchResults[CONDITION_VALUE]) == mediaFeature->GetBool("dark-mode", false); + }, + 2); + +const std::list SINGLE_CONDITION_RULES = { + CSS_LEVEL4_MULTI, + CSS_LEVEL4_LEFT, + CSS_LEVEL4_RIGHT, + CSS_LEVEL3_RULE, + ORIENTATION_RULE, + DEVICE_TYPE_RULE, + SCREEN_SHAPE_RULE, + DARK_MODE_RULE, + +}; + +bool ParseSingleCondition(const std::string& condition, const MediaFeature& mediaFeature, MediaError& failReason) +{ + std::smatch result; + for (const auto& rule : SINGLE_CONDITION_RULES) { + std::smatch matchResults; + if (rule.Match(condition, matchResults)) { + return rule.ParseCondition(matchResults, mediaFeature, failReason); + } + } + LOGE("illegal condition"); + failReason = MediaError::SYNTAX; + return false; +} + +bool ParseAndCondition(const std::string& condition, const MediaFeature& mediaFeature, MediaError& failReason) +{ + auto noAnd = std::regex_replace(condition, std::regex("and[^a-z]"), ",("); + std::vector conditionArr; + StringUtils::SplitStr(noAnd, ",", conditionArr); + if (conditionArr.empty()) { + failReason = MediaError::SYNTAX; + return false; + } + + for (const auto& item : conditionArr) { + if (!ParseSingleCondition(item, mediaFeature, failReason)) { + return false; + } + } + return true; +} + +bool DoMatchCondition(const std::string& condition, const MediaFeature& mediaFeature) +{ + // remove space from condition string + std::string noSpace = std::regex_replace(condition, std::regex("\\s"), ""); + bool inverse = false; + std::string noScreen; + if (CONDITION_WITH_SCREEN.Match(noSpace)) { + if (noSpace.find("notscreen") != std::string::npos) { + inverse = true; + } + MediaQueryerRule screenPatten(std::regex("screen[^and:]")); + if (screenPatten.Match(noSpace)) { + return !inverse; + } + noScreen = std::regex_replace(noSpace, std::regex("^(only|not)?screen(and)?"), ""); + } else if (CONDITION_WITHOUT_SCREEN.Match(noSpace)) { + noScreen = noSpace; + } else { + LOGE("illegal condition"); + return false; + } + MediaError failReason = MediaError::NONE; + // replace 'or' with comma ',' + auto commaCondition = std::regex_replace(noScreen, std::regex("or[(]"), ",("); + // remove screen and modifier + std::vector conditionArr; + StringUtils::SplitStr(commaCondition, ",", conditionArr); + int32_t len = conditionArr.size(); + for (int32_t i = 0; i < len; i++) { + std::smatch matchResults; + if (CONDITION_WITH_AND.Match(conditionArr[i])) { + bool result = ParseAndCondition(conditionArr[i], mediaFeature, failReason); + if (failReason == MediaError::SYNTAX) { + return false; + } + if (i + 1 == len) { + return (inverse && !result) || (!inverse && result); + } + } else { + if (ParseSingleCondition(conditionArr[i], mediaFeature, failReason)) { + return !inverse; + } + if (failReason == MediaError::SYNTAX) { + return false; + } + } + } + return inverse; +} + +} // namespace + +bool MediaQueryer::MatchCondition(const std::string& condition, const MediaFeature& mediaFeature) +{ + if (condition.empty()) { + return false; + } + + // If width and height are not initialized, and the query condition includes "width" or "height", + // return false directly. + if (mediaFeature->GetInt("width", 0) == 0 && + (condition.find("width") != std::string::npos || condition.find("height") != std::string::npos)) { + return false; + } + + auto iter = queryHistories.find(condition); + if (iter != queryHistories.end()) { + auto queryHistory = iter->second; + if (queryHistory.mediaFeatureValue == mediaFeature->ToString()) { + return queryHistory.result; + } + } + + auto result = DoMatchCondition(condition, mediaFeature); + queryHistories[condition] = { mediaFeature->ToString(), result }; + return result; +} + +std::unique_ptr MediaQueryer::GetMediaFeature() const +{ + MediaQueryInfo mediaQueryInfo; + auto json = JsonUtil::Create(true); + double aspectRatio = (height_ != 0) ? (static_cast(width_) / height_) : 1.0; + json->Put("width", width_); + json->Put("height", height_); + json->Put("aspect-ratio", aspectRatio); + json->Put("round-screen", SystemProperties::GetIsScreenRound()); + json->Put("device-width", SystemProperties::GetDeviceWidth()); + json->Put("device-height", SystemProperties::GetDeviceHeight()); + json->Put("resolution", SystemProperties::GetResolution()); + json->Put("orientation", mediaQueryInfo.GetOrientation().c_str()); + json->Put("device-type", mediaQueryInfo.GetDeviceType().c_str()); + json->Put("dark-mode", colorMode_ == ColorMode::DARK ? true : false); + return json; +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/card_frontend/media_queryer.h b/frameworks/bridge/card_frontend/media_queryer.h new file mode 100644 index 00000000..9b1ad5ac --- /dev/null +++ b/frameworks/bridge/card_frontend/media_queryer.h @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_CARD_FRONTEND_MEDIA_QUERYER_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_CARD_FRONTEND_MEDIA_QUERYER_H + +#include +#include + +#include "base/json/json_util.h" +#include "base/utils/device_config.h" + +namespace OHOS::Ace::Framework { + +using MediaFeature = std::unique_ptr; +class MediaQueryer { +public: + bool MatchCondition(const std::string& condition, const MediaFeature& mediaFeature); + std::unique_ptr GetMediaFeature() const; + void SetColorMode(ColorMode colorMode) + { + colorMode_ = colorMode; + } + + void SetSurfaceSize(int32_t width, int32_t height) + { + width_ = width; + height_ = height; + } + +private: + struct QueryHistory { + std::string mediaFeatureValue; + bool result = false; + }; + std::unordered_map queryHistories; + int32_t width_ = 0; + int32_t height_ = 0; + ColorMode colorMode_ = ColorMode::LIGHT; + +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_CARD_FRONTEND_MEDIA_QUERYER_H diff --git a/frameworks/bridge/codec/byte_buffer_operator.cpp b/frameworks/bridge/codec/byte_buffer_operator.cpp new file mode 100644 index 00000000..277c88a8 --- /dev/null +++ b/frameworks/bridge/codec/byte_buffer_operator.cpp @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/codec/byte_buffer_operator.h" + +namespace OHOS::Ace::Framework { + +bool ByteBufferReader::ReadData(std::map& mapValue) const +{ + int32_t size = -1; + if (!ReadData(size) || size < 0) { + LOGW("Could not read map size or map size is invalid"); + return false; + } + + mapValue.clear(); + + std::string key; + std::string value; + for (int32_t idx = 0; idx < size; ++idx) { + if (!ReadData(key) || !ReadData(value)) { + LOGW("Failed to read key or value"); + return false; + } + mapValue.emplace(std::move(key), std::move(value)); + } + return true; +} + +bool ByteBufferReader::ReadData(std::set& setValue) const +{ + int32_t size = -1; + if (!ReadData(size) || size < 0) { + LOGW("Could not read map size or map size is invalid"); + return false; + } + + setValue.clear(); + + std::string value; + for (int32_t idx = 0; idx < size; ++idx) { + if (!ReadData(value)) { + LOGW("Failed to read string value"); + return false; + } + setValue.emplace(std::move(value)); + } + return true; +} + +void ByteBufferWriter::WriteData(const std::map& mapValue) +{ + WriteData(static_cast(mapValue.size())); + for (const auto& [key, value] : mapValue) { + WriteData(key); + WriteData(value); + } +} + +void ByteBufferWriter::WriteData(const std::set& setValue) +{ + WriteData(static_cast(setValue.size())); + for (const auto& value : setValue) { + WriteData(value); + } +} + +} // namespace OHOS::Ace::Framework \ No newline at end of file diff --git a/frameworks/bridge/codec/byte_buffer_operator.h b/frameworks/bridge/codec/byte_buffer_operator.h new file mode 100644 index 00000000..c8c48dbe --- /dev/null +++ b/frameworks/bridge/codec/byte_buffer_operator.h @@ -0,0 +1,170 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_CODEC_BYTE_BUFFER_OPERATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_CODEC_BYTE_BUFFER_OPERATOR_H + +#include +#include +#include +#include +#include + +#include "base/log/log.h" +#include "base/utils/noncopyable.h" + +namespace OHOS::Ace::Framework { + +class ByteBufferReader final { +public: + explicit ByteBufferReader(const std::vector& buffer) : buffer_(buffer) {}; + ~ByteBufferReader() = default; + + bool ReadData(uint8_t& value) const + { + return ReadValue(value); + } + bool ReadData(int32_t& value) const + { + return ReadValue(value); + } + bool ReadData(int64_t& value) const + { + return ReadValue(value); + } + bool ReadData(double& value) const + { + return ReadValue(value); + } + bool ReadData(std::string& value) const + { + return ReadArray(value); + } + + bool ReadData(std::vector& dst) const + { + return ReadArray(dst); + } + bool ReadData(std::vector& dst) const + { + return ReadArray(dst); + } + bool ReadData(std::vector& dst) const + { + return ReadArray(dst); + } + + bool ReadData(std::map& dst) const; + bool ReadData(std::set& dst) const; + +private: + template + bool ReadValue(T& value) const + { + if (readPos_ + sizeof(T) > buffer_.size()) { + LOGW("Exceed buffer size, readPos = %{public}u, buffer size = %{public}zu", readPos_, buffer_.size()); + return false; + } + value = *reinterpret_cast(buffer_.data() + readPos_); + readPos_ += sizeof(T); + return true; + } + + template + bool ReadArray(T& dst) const + { + int32_t length = -1; + if (!ReadData(length) || length < 0 || readPos_ + sizeof(typename T::value_type) * length > buffer_.size()) { + LOGW("Could not read array length or array length is invalid"); + return false; + } + auto data = reinterpret_cast(buffer_.data() + readPos_); + dst.assign(data, data + length); + readPos_ += sizeof(typename T::value_type) * length; + return true; + } + + const std::vector& buffer_; + mutable uint32_t readPos_ = 0; + + ACE_DISALLOW_COPY_AND_MOVE(ByteBufferReader); +}; + +class ByteBufferWriter final { +public: + ByteBufferWriter(std::vector& buffer) : buffer_(buffer) {}; + ~ByteBufferWriter() = default; + + void WriteData(uint8_t value) + { + WriteValue(value); + } + void WriteData(int32_t value) + { + WriteValue(value); + } + void WriteData(int64_t value) + { + WriteValue(value); + } + void WriteData(double value) + { + WriteValue(value); + } + void WriteData(const std::string& src) + { + WriteArray(src); + } + + void WriteData(const std::vector& src) + { + WriteArray(src); + } + void WriteData(const std::vector& src) + { + WriteArray(src); + } + void WriteData(const std::vector& src) + { + WriteArray(src); + } + + void WriteData(const std::map& mapValue); + void WriteData(const std::set& setValue); + +private: + template + void WriteValue(T value) + { + auto data = reinterpret_cast(&value); + buffer_.insert(buffer_.end(), data, data + sizeof(T)); + } + + template + void WriteArray(const T& array) + { + WriteData(static_cast(array.size())); + auto data = reinterpret_cast(array.data()); + buffer_.insert(buffer_.end(), data, data + sizeof(typename T::value_type) * array.size()); + } + + std::vector& buffer_; + + ACE_DISALLOW_COPY_AND_MOVE(ByteBufferWriter); +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_CODEC_BYTE_BUFFER_OPERATOR_H diff --git a/frameworks/bridge/codec/codec_data.h b/frameworks/bridge/codec/codec_data.h new file mode 100644 index 00000000..24e22573 --- /dev/null +++ b/frameworks/bridge/codec/codec_data.h @@ -0,0 +1,234 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_CODEC_CODEC_DATA_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_CODEC_CODEC_DATA_H + +#include +#include +#include +#include +#include +#include +#include + +namespace OHOS::Ace::Framework { + +enum class BufferDataType : uint8_t { + TYPE_NULL = 0x10, + TYPE_TRUE, + TYPE_FALSE, + TYPE_INT, + TYPE_LONG, + TYPE_DOUBLE, + TYPE_STRING, + TYPE_MAP, + TYPE_SET, + TYPE_INT8_ARRAY, + TYPE_INT16_ARRAY, + TYPE_INT32_ARRAY, + TYPE_FUNCTION, + TYPE_OBJECT, +}; + +class CodecData final { +public: + CodecData() = default; + ~CodecData() = default; + CodecData(const CodecData& other) = default; + CodecData(CodecData&& other) = default; + CodecData& operator=(const CodecData& other) = default; + CodecData& operator=(CodecData&& other) = default; + + explicit CodecData(bool val) : type_(val ? BufferDataType::TYPE_TRUE : BufferDataType::TYPE_FALSE) {} + explicit CodecData(int32_t val) : type_(BufferDataType::TYPE_INT), data_(val) {} + explicit CodecData(int32_t val, BufferDataType type) : type_(type), data_(val) {} + explicit CodecData(int64_t val) : type_(BufferDataType::TYPE_LONG), data_(val) {} + explicit CodecData(double val) : type_(BufferDataType::TYPE_DOUBLE), data_(val) {} + + explicit CodecData(const std::string& val) : type_(BufferDataType::TYPE_STRING), data_(val) {} + explicit CodecData(const std::string& val, BufferDataType type) : type_(type), data_(val) {} + explicit CodecData(const std::map& val) : type_(BufferDataType::TYPE_MAP), data_(val) {} + explicit CodecData(const std::set& val) : type_(BufferDataType::TYPE_SET), data_(val) {} + explicit CodecData(const std::vector& val) : type_(BufferDataType::TYPE_INT8_ARRAY), data_(val) {} + explicit CodecData(const std::vector& val) : type_(BufferDataType::TYPE_INT16_ARRAY), data_(val) {} + explicit CodecData(const std::vector& val) : type_(BufferDataType::TYPE_INT32_ARRAY), data_(val) {} + + explicit CodecData(std::string&& val) : type_(BufferDataType::TYPE_STRING), data_(std::move(val)) {} + explicit CodecData(std::map&& val) + : type_(BufferDataType::TYPE_MAP), data_(std::move(val)) {} + explicit CodecData(std::set&& val) : type_(BufferDataType::TYPE_SET), data_(std::move(val)) {} + explicit CodecData(std::vector&& val) : type_(BufferDataType::TYPE_INT8_ARRAY), data_(std::move(val)) {} + explicit CodecData(std::vector&& val) : type_(BufferDataType::TYPE_INT16_ARRAY), data_(std::move(val)) {} + explicit CodecData(std::vector&& val) : type_(BufferDataType::TYPE_INT32_ARRAY), data_(std::move(val)) {} + + BufferDataType GetType() const + { + return type_; + } + bool IsNull() const + { + return type_ == BufferDataType::TYPE_NULL; + } + bool IsBool() const + { + return type_ == BufferDataType::TYPE_TRUE || type_ == BufferDataType::TYPE_FALSE; + } + bool IsInt() const + { + return type_ == BufferDataType::TYPE_INT; + } + bool IsLong() const + { + return type_ == BufferDataType::TYPE_LONG; + } + bool IsDouble() const + { + return type_ == BufferDataType::TYPE_DOUBLE; + } + bool IsString() const + { + return type_ == BufferDataType::TYPE_STRING; + } + bool IsMap() const + { + return type_ == BufferDataType::TYPE_MAP; + } + bool IsSet() const + { + return type_ == BufferDataType::TYPE_SET; + } + bool IsInt8Array() const + { + return type_ == BufferDataType::TYPE_INT8_ARRAY; + } + bool IsInt16Array() const + { + return type_ == BufferDataType::TYPE_INT16_ARRAY; + } + bool IsInt32Array() const + { + return type_ == BufferDataType::TYPE_INT32_ARRAY; + } + + bool IsFunction() const + { + return type_ == BufferDataType::TYPE_FUNCTION; + } + + bool IsObject() const + { + return type_ == BufferDataType::TYPE_OBJECT; + } + + bool GetBoolValue(bool defValue = false) const + { + return (type_ == BufferDataType::TYPE_TRUE) ? true : (type_ == BufferDataType::TYPE_FALSE) ? false : defValue; + } + int32_t GetIntValue(int32_t defValue = 0) const + { + return IsInt() ? std::get(data_) : defValue; + } + int64_t GetLongValue(int64_t defValue = 0) const + { + return IsLong() ? std::get(data_) : IsInt() ? std::get(data_) : defValue; + } + double GetDoubleValue(double defValue = 0.0) const + { + return IsDouble() ? std::get(data_) + : IsLong() ? std::get(data_) : IsInt() ? std::get(data_) : defValue; + } + + const std::string& GetStringValue() const + { + return GetValue(); + } + const std::map& GetMapValue() const + { + return GetValue>(); + } + const std::set& GetSetValue() const + { + return GetValue>(); + } + const std::vector& GetInt8ArrayValue() const + { + return GetValue>(); + } + const std::vector& GetInt16ArrayValue() const + { + return GetValue>(); + } + const std::vector& GetInt32ArrayValue() const + { + return GetValue>(); + } + + int32_t GetFunctionValue(int32_t defValue = 0) const + { + return IsFunction() ? std::get(data_) : defValue; + } + + const std::string& GetObjectValue() const + { + return GetValue(); + } + +private: + template + struct CopyableUniquePtr final { + CopyableUniquePtr() = default; + ~CopyableUniquePtr() = default; + + CopyableUniquePtr(const CopyableUniquePtr& other) : ptr(std::make_unique(*other.ptr)) {} + CopyableUniquePtr(CopyableUniquePtr&& other) = default; + + CopyableUniquePtr& operator=(const CopyableUniquePtr& other) + { + ptr = std::make_unique(*other.ptr); + return *this; + } + CopyableUniquePtr& operator=(CopyableUniquePtr&& other) = default; + + CopyableUniquePtr(const T& data) : ptr(std::make_unique(data)) {} + CopyableUniquePtr(T&& data) : ptr(std::make_unique(std::move(data))) {} + + std::unique_ptr ptr; + }; + + using EncodedData = std::variant, + CopyableUniquePtr>, CopyableUniquePtr>, + CopyableUniquePtr>, CopyableUniquePtr>, + CopyableUniquePtr>>; + + template + const T& GetValue() const + { + auto val = std::get_if>(&data_); + if (val != nullptr) { + return *(val->ptr); + } else { + static T defData; + return defData; + } + } + + BufferDataType type_ = BufferDataType::TYPE_NULL; + EncodedData data_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_CODEC_CODEC_DATA_H diff --git a/frameworks/bridge/codec/function_call.h b/frameworks/bridge/codec/function_call.h new file mode 100644 index 00000000..6f5ae570 --- /dev/null +++ b/frameworks/bridge/codec/function_call.h @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_CODEC_FUNCTION_CALL_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_CODEC_FUNCTION_CALL_H + +#include +#include + +#include "base/utils/noncopyable.h" +#include "frameworks/bridge/codec/codec_data.h" + +namespace OHOS::Ace::Framework { + +constexpr int32_t MAX_PARAMETERS_COUNT = UINT8_MAX; + +class FunctionCall final { +public: + FunctionCall(const std::string& funcName, const std::vector& args) : funcName_(funcName), args_(args) {} + FunctionCall(std::string&& funcName, std::vector&& args) + : funcName_(std::move(funcName)), args_(std::move(args)) + {} + FunctionCall() = default; + ~FunctionCall() = default; + + const std::string& GetFuncName() const + { + return funcName_; + } + + const std::vector& GetArgs() const + { + return args_; + } + + void SetFuncName(const std::string& funcName) + { + funcName_ = funcName; + } + + void SetArgs(const std::vector& args) + { + args_ = args; + } + + void SetFuncName(std::string&& funcName) + { + funcName_ = std::move(funcName); + } + + void SetArgs(std::vector&& args) + { + args_ = std::move(args); + } + +private: + std::string funcName_; + std::vector args_; + + ACE_DISALLOW_COPY_AND_MOVE(FunctionCall); +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_CODEC_FUNCTION_CALL_H diff --git a/frameworks/bridge/codec/function_codec.h b/frameworks/bridge/codec/function_codec.h new file mode 100644 index 00000000..61c4b42f --- /dev/null +++ b/frameworks/bridge/codec/function_codec.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_CODEC_FUNCTION_CODEC_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_CODEC_FUNCTION_CODEC_H + +#include +#include + +#include "base/utils/noncopyable.h" +#include "frameworks/bridge/codec/codec_data.h" +#include "frameworks/bridge/codec/function_call.h" + +namespace OHOS::Ace::Framework { + +class FunctionCodec { +public: + FunctionCodec() = default; + virtual ~FunctionCodec() = default; + + virtual bool EncodeFunctionCall(const FunctionCall& functionCall, std::vector& resultBuffer) = 0; + virtual bool DecodeFunctionCall(const std::vector& buffer, FunctionCall& functionCall) = 0; + virtual bool DecodePlatformMessage(const std::vector& buffer, CodecData& platformMessage) = 0; + +private: + ACE_DISALLOW_COPY_AND_MOVE(FunctionCodec); +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_CODEC_FUNCTION_CODEC_H diff --git a/frameworks/bridge/codec/standard_codec_buffer_operator.cpp b/frameworks/bridge/codec/standard_codec_buffer_operator.cpp new file mode 100644 index 00000000..52fb97c5 --- /dev/null +++ b/frameworks/bridge/codec/standard_codec_buffer_operator.cpp @@ -0,0 +1,169 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/codec/standard_codec_buffer_operator.h" + +#include "base/log/log.h" + +namespace OHOS::Ace::Framework { +namespace { + +template +inline bool ReadDataFromByteBuffer(const ByteBufferReader& buffer, CodecData& resultData) +{ + T data; + if (buffer.ReadData(data)) { + resultData = CodecData(std::move(data)); + return true; + } + return false; +} + +} + +bool StandardCodecBufferReader::ReadType(BufferDataType& type) +{ + uint8_t uint8Type = 0; + if (byteBufferReader_.ReadData(uint8Type)) { + type = static_cast(uint8Type); + return true; + } + return false; +} + +bool StandardCodecBufferReader::ReadDataList(std::vector& resultDataList) +{ + resultDataList.clear(); + uint8_t size = 0; + if (!byteBufferReader_.ReadData(size)) { + LOGW("Failed to read size of data list"); + return false; + } + + for (int32_t idx = 0; idx < size; ++idx) { + CodecData data; + if (!ReadData(data)) { + LOGW("Failed to read data"); + resultDataList.clear(); + return false; + } + resultDataList.emplace_back(std::move(data)); + } + return true; +} + +bool StandardCodecBufferReader::ReadData(CodecData& resultData) +{ + BufferDataType type = BufferDataType::TYPE_NULL; + if (!ReadType(type)) { + LOGW("Read type failed"); + return false; + } + + switch (type) { + case BufferDataType::TYPE_NULL: + resultData = CodecData(); + return true; + case BufferDataType::TYPE_TRUE: + resultData = CodecData(true); + return true; + case BufferDataType::TYPE_FALSE: + resultData = CodecData(false); + return true; + case BufferDataType::TYPE_INT: + return ReadDataFromByteBuffer(byteBufferReader_, resultData); + case BufferDataType::TYPE_LONG: + return ReadDataFromByteBuffer(byteBufferReader_, resultData); + case BufferDataType::TYPE_DOUBLE: + return ReadDataFromByteBuffer(byteBufferReader_, resultData); + case BufferDataType::TYPE_STRING: + return ReadDataFromByteBuffer(byteBufferReader_, resultData); + case BufferDataType::TYPE_INT8_ARRAY: + return ReadDataFromByteBuffer>(byteBufferReader_, resultData); + case BufferDataType::TYPE_INT16_ARRAY: + return ReadDataFromByteBuffer>(byteBufferReader_, resultData); + case BufferDataType::TYPE_INT32_ARRAY: + return ReadDataFromByteBuffer>(byteBufferReader_, resultData); + case BufferDataType::TYPE_MAP: + return ReadDataFromByteBuffer>(byteBufferReader_, resultData); + case BufferDataType::TYPE_SET: + return ReadDataFromByteBuffer>(byteBufferReader_, resultData); + case BufferDataType::TYPE_FUNCTION: + return ReadDataFromByteBuffer(byteBufferReader_, resultData); + case BufferDataType::TYPE_OBJECT: + return ReadDataFromByteBuffer(byteBufferReader_, resultData); + default: + LOGW("Unknown type, type = %{public}u", static_cast(type)); + return false; + } +} + +void StandardCodecBufferWriter::WriteType(BufferDataType type) +{ + byteBufferWriter_.WriteData(static_cast(type)); +} + +void StandardCodecBufferWriter::WriteDataList(const std::vector& dataList) +{ + byteBufferWriter_.WriteData(static_cast(dataList.size())); + for (const auto& data : dataList) { + WriteData(data); + } +} + +void StandardCodecBufferWriter::WriteData(const CodecData& data) +{ + WriteType(data.GetType()); + + switch (data.GetType()) { + case BufferDataType::TYPE_INT: + byteBufferWriter_.WriteData(data.GetIntValue()); + break; + case BufferDataType::TYPE_LONG: + byteBufferWriter_.WriteData(data.GetLongValue()); + break; + case BufferDataType::TYPE_DOUBLE: + byteBufferWriter_.WriteData(data.GetDoubleValue()); + break; + case BufferDataType::TYPE_STRING: + byteBufferWriter_.WriteData(data.GetStringValue()); + break; + case BufferDataType::TYPE_INT8_ARRAY: + byteBufferWriter_.WriteData(data.GetInt8ArrayValue()); + break; + case BufferDataType::TYPE_INT16_ARRAY: + byteBufferWriter_.WriteData(data.GetInt16ArrayValue()); + break; + case BufferDataType::TYPE_INT32_ARRAY: + byteBufferWriter_.WriteData(data.GetInt32ArrayValue()); + break; + case BufferDataType::TYPE_MAP: + byteBufferWriter_.WriteData(data.GetMapValue()); + break; + case BufferDataType::TYPE_SET: + byteBufferWriter_.WriteData(data.GetSetValue()); + break; + case BufferDataType::TYPE_FUNCTION: + byteBufferWriter_.WriteData(data.GetFunctionValue()); + break; + case BufferDataType::TYPE_OBJECT: + byteBufferWriter_.WriteData(data.GetObjectValue()); + break; + default: + break; + } +} + +} // namespace OHOS::Ace::Framework \ No newline at end of file diff --git a/frameworks/bridge/codec/standard_codec_buffer_operator.h b/frameworks/bridge/codec/standard_codec_buffer_operator.h new file mode 100644 index 00000000..42b14cef --- /dev/null +++ b/frameworks/bridge/codec/standard_codec_buffer_operator.h @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_CODEC_STANDARD_CODEC_BUFFER_OPERATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_CODEC_STANDARD_CODEC_BUFFER_OPERATOR_H + +#include + +#include "base/utils/noncopyable.h" +#include "frameworks/bridge/codec/byte_buffer_operator.h" +#include "frameworks/bridge/codec/codec_data.h" + +namespace OHOS::Ace::Framework { + +class StandardCodecBufferReader final { +public: + explicit StandardCodecBufferReader(const std::vector& buffer) : byteBufferReader_(buffer) {}; + ~StandardCodecBufferReader() = default; + + bool ReadData(CodecData& resultData); + bool ReadDataList(std::vector& resultDataList); + +private: + bool ReadType(BufferDataType& type); + + ByteBufferReader byteBufferReader_; + + ACE_DISALLOW_COPY_AND_MOVE(StandardCodecBufferReader); +}; + +class StandardCodecBufferWriter final { +public: + explicit StandardCodecBufferWriter(std::vector& buffer) : byteBufferWriter_(buffer) {}; + ~StandardCodecBufferWriter() = default; + + void WriteData(const CodecData& data); + void WriteDataList(const std::vector& dataList); + +private: + void WriteType(BufferDataType type); + + ByteBufferWriter byteBufferWriter_; + + ACE_DISALLOW_COPY_AND_MOVE(StandardCodecBufferWriter); +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_CODEC_STANDARD_CODEC_BUFFER_OPERATOR_H diff --git a/frameworks/bridge/codec/standard_function_codec.cpp b/frameworks/bridge/codec/standard_function_codec.cpp new file mode 100644 index 00000000..e108a833 --- /dev/null +++ b/frameworks/bridge/codec/standard_function_codec.cpp @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/codec/standard_function_codec.h" + +#include "base/log/log.h" +#include "frameworks/bridge/codec/standard_codec_buffer_operator.h" + +namespace OHOS::Ace::Framework { + +bool StandardFunctionCodec::EncodeFunctionCall(const FunctionCall& functionCall, std::vector& resultBuffer) +{ + if (functionCall.GetArgs().size() > MAX_PARAMETERS_COUNT) { + LOGW("Too many args for a function call"); + return false; + } + + StandardCodecBufferWriter bufferWriter(resultBuffer); + bufferWriter.WriteData(CodecData(functionCall.GetFuncName())); + bufferWriter.WriteDataList(functionCall.GetArgs()); + return true; +} + +bool StandardFunctionCodec::DecodeFunctionCall(const std::vector& buffer, FunctionCall& functionCall) +{ + StandardCodecBufferReader bufferReader(buffer); + CodecData funcName; + if (!bufferReader.ReadData(funcName)) { + LOGW("Decode funcName failed"); + return false; + } + + std::vector args; + if (!bufferReader.ReadDataList(args)) { + LOGW("Decode args failed"); + return false; + } + + functionCall.SetFuncName(funcName.GetStringValue()); + functionCall.SetArgs(std::move(args)); + return true; +} + +bool StandardFunctionCodec::DecodePlatformMessage(const std::vector& buffer, CodecData& platformMessage) +{ + StandardCodecBufferReader bufferReader(buffer); + if (!bufferReader.ReadData(platformMessage)) { + LOGW("Decode platform message failed"); + return false; + } + return true; +} + +} // namespace OHOS::Ace::Framework \ No newline at end of file diff --git a/frameworks/bridge/codec/standard_function_codec.h b/frameworks/bridge/codec/standard_function_codec.h new file mode 100644 index 00000000..d24bf9ac --- /dev/null +++ b/frameworks/bridge/codec/standard_function_codec.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_CODEC_STANDARD_FUNCTION_CODEC_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_CODEC_STANDARD_FUNCTION_CODEC_H + +#include "base/utils/macros.h" +#include "frameworks/bridge/codec/function_codec.h" + +namespace OHOS::Ace::Framework { + +class ACE_EXPORT StandardFunctionCodec final : public FunctionCodec { +public: + StandardFunctionCodec() = default; + ~StandardFunctionCodec() override = default; + + bool EncodeFunctionCall(const FunctionCall& functionCall, std::vector& resultBuffer) override; + bool DecodeFunctionCall(const std::vector& buffer, FunctionCall& functionCall) override; + bool DecodePlatformMessage(const std::vector& buffer, CodecData& platformMessage) override; + +private: + ACE_DISALLOW_COPY_AND_MOVE(StandardFunctionCodec); +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_CODEC_STANDARD_FUNCTION_CODEC_H diff --git a/frameworks/bridge/common/accessibility/accessibility_node_manager.cpp b/frameworks/bridge/common/accessibility/accessibility_node_manager.cpp new file mode 100644 index 00000000..4a268878 --- /dev/null +++ b/frameworks/bridge/common/accessibility/accessibility_node_manager.cpp @@ -0,0 +1,336 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/accessibility/accessibility_node_manager.h" + +#include "base/log/dump_log.h" +#include "base/log/event_report.h" +#include "base/log/log.h" +#include "base/utils/linear_map.h" +#include "base/utils/string_utils.h" +#include "base/utils/utils.h" +#include "frameworks/bridge/common/dom/dom_type.h" + +namespace OHOS::Ace::Framework { +namespace { + +const char PAGE_CHANGE_EVENT[] = "pagechange"; +const char ROOT_STACK_TAG[] = "rootstacktag"; +constexpr int32_t ROOT_STACK_BASE = 1100000; +constexpr int32_t CARD_NODE_ID_RATION = 10000; +constexpr int32_t CARD_ROOT_NODE_ID = 21000; +constexpr int32_t CARD_BASE = 100000; +constexpr int32_t CARD_MAX_AGP_ID = 20000; + +std::atomic g_accessibilityId(ROOT_STACK_BASE); + +inline int32_t GetRootNodeIdFromPage(const RefPtr& page) +{ + auto domDocument = page ? page->GetDomDocument() : nullptr; + if (domDocument) { + return domDocument->GetRootNodeId(); + } + LOGW("Failed to get root dom node"); + return -1; +} + +int32_t ConvertToNodeId(int32_t cardAccessibilityId) +{ + // cardAccessibilityId is integer total ten digits, top five for agp virtualViewId, end five for ace nodeId, + // for example 00032 10001 convert to result is 1000001 + int result = 0; + int32_t nodeId = cardAccessibilityId % CARD_BASE; + if (nodeId >= CARD_ROOT_NODE_ID) { + return 0; + } + result = + (static_cast(nodeId / CARD_NODE_ID_RATION)) * DOM_ROOT_NODE_ID_BASE + nodeId % CARD_NODE_ID_RATION; + return result; +} + +} // namespace + +AccessibilityNodeManager::~AccessibilityNodeManager() +{ + auto rootNode = GetAccessibilityNodeById(rootNodeId_ + ROOT_STACK_BASE); + if (rootNode) { + RemoveAccessibilityNodes(rootNode); + } +} + +void AccessibilityNodeManager::InitializeCallback() {} + +void AccessibilityNodeManager::SetPipelineContext(const RefPtr& context) +{ + context_ = context; +} + +void AccessibilityNodeManager::SetRunningPage(const RefPtr& page) +{ + indexPage_ = page; + // send page change event to barrier free when page change. + AccessibilityEvent accessibilityEvent; + accessibilityEvent.eventType = PAGE_CHANGE_EVENT; + SendAccessibilityAsyncEvent(accessibilityEvent); +} + +std::string AccessibilityNodeManager::GetNodeChildIds(const RefPtr& node) +{ + std::string ids; + if (node) { + const auto& children = node->GetChildList(); + if ((node->GetNodeId() == rootNodeId_ + ROOT_STACK_BASE) && !children.empty()) { + ids.append(std::to_string(children.back()->GetNodeId())); + } else { + for (const auto& child : children) { + if (!ids.empty()) { + ids.append(","); + } + ids.append(std::to_string(child->GetNodeId())); + } + } + } + return ids; +} + +void AccessibilityNodeManager::AddNodeWithId(const std::string& key, const RefPtr& node) +{ + if (!node) { + return; + } + nodeWithIdMap_[key] = node; +} + +void AccessibilityNodeManager::AddNodeWithTarget(const std::string& key, const RefPtr& node) +{ + if (!node) { + return; + } + nodeWithTargetMap_[key] = node; +} + +RefPtr AccessibilityNodeManager::GetAccessibilityNodeFromPage(NodeId nodeId) const +{ + if (isOhosHostCard_) { + nodeId = ConvertToNodeId(nodeId); + } + auto indexPage = indexPage_.Upgrade(); + if (nodeId == 0 && indexPage) { + auto rootNode = GetRootNodeIdFromPage(indexPage); + if (rootNode < 0) { + LOGW("Failed to get page root node"); + return nullptr; + } + nodeId = rootNode + ROOT_STACK_BASE; + } + + return GetAccessibilityNodeById(nodeId); +} + +void AccessibilityNodeManager::ClearNodeRectInfo(RefPtr& node, bool isPopDialog) +{ + if (!node) { + return; + } + auto children = node->GetChildList(); + for (auto it = children.begin(); it != children.end(); it++) { + ClearNodeRectInfo(*it, isPopDialog); + } +#if defined(WINDOWS_PLATFORM) || defined(MAC_PLATFORM) + if (isPopDialog) { + node->SetClearRectInfoFlag(true); + } else { + node->SetClearRectInfoFlag(false); + } +#endif +} + +void AccessibilityNodeManager::SendAccessibilityAsyncEvent(const AccessibilityEvent& accessibilityEvent) {} + +int32_t AccessibilityNodeManager::GenerateNextAccessibilityId() +{ + return g_accessibilityId.fetch_add(1, std::memory_order_relaxed); +} + +// combined components which pop up through js api, such as dialog/toast +RefPtr AccessibilityNodeManager::CreateSpecializedNode( + const std::string& tag, int32_t nodeId, int32_t parentNodeId) +{ + if (nodeId < ROOT_STACK_BASE) { + return nullptr; + } + return CreateAccessibilityNode(tag, nodeId, parentNodeId, -1); +} + +RefPtr AccessibilityNodeManager::CreateAccessibilityNode( + const std::string& tag, int32_t nodeId, int32_t parentNodeId, int32_t itemIndex) +{ + LOGD("create AccessibilityNode %{public}s, id %{public}d, parent id %{public}d, itemIndex %{public}d", tag.c_str(), + nodeId, parentNodeId, itemIndex); + + RefPtr parentNode; + if (parentNodeId != -1) { + parentNode = GetAccessibilityNodeById(parentNodeId); + if (!parentNode) { + LOGE("Parent node %{private}d not exists", parentNodeId); + EventReport::SendAccessibilityException(AccessibilityExcepType::CREATE_ACCESSIBILITY_NODE_ERR); + return nullptr; + } + } else { + // create accessibility root stack node + auto rootStackId = rootNodeId_ + ROOT_STACK_BASE; + parentNode = GetAccessibilityNodeById(rootStackId); + if (!parentNode) { + parentNode = AceType::MakeRefPtr(rootStackId, ROOT_STACK_TAG); + auto result = accessibilityNodes_.try_emplace(rootStackId, parentNode); + if (!result.second) { + LOGW("the accessibility node has already in the map"); + return nullptr; + } + } + } + + auto accessibilityNode = AceType::MakeRefPtr(nodeId, tag); + auto result = accessibilityNodes_.try_emplace(nodeId, accessibilityNode); + if (!result.second) { + LOGW("the accessibility node has already in the map"); + return nullptr; + } + + accessibilityNode->SetIsRootNode(nodeId == rootNodeId_); + accessibilityNode->SetPageId(rootNodeId_ - DOM_ROOT_NODE_ID_BASE); + accessibilityNode->SetParentNode(parentNode); + accessibilityNode->Mount(itemIndex); + return accessibilityNode; +} + +RefPtr AccessibilityNodeManager::GetAccessibilityNodeById(NodeId nodeId) const +{ + const auto itNode = accessibilityNodes_.find(nodeId); + if (itNode == accessibilityNodes_.end()) { + return nullptr; + } + return itNode->second; +} + +void AccessibilityNodeManager::RemoveAccessibilityNodes(RefPtr& node) +{ + if (!node) { + return; + } + auto children = node->GetChildList(); + for (auto it = children.begin(); it != children.end();) { + RemoveAccessibilityNodes(*it++); + } + auto parentId = node->GetParentId(); + RefPtr parentNode; + if (parentId != -1) { + parentNode = GetAccessibilityNodeById(parentId); + if (parentNode) { + parentNode->RemoveNode(node); + } + } + LOGD("remove accessibility node %{public}d, remain num %{public}zu", node->GetNodeId(), accessibilityNodes_.size()); + accessibilityNodes_.erase(node->GetNodeId()); +} + +void AccessibilityNodeManager::RemoveAccessibilityNodeById(NodeId nodeId) +{ + auto accessibilityNode = GetAccessibilityNodeById(nodeId); + if (!accessibilityNode) { + LOGW("the accessibility node %{public}d is not in the map", nodeId); + return; + } + RemoveAccessibilityNodes(accessibilityNode); +} + +void AccessibilityNodeManager::ClearPageAccessibilityNodes(int32_t pageId) +{ + auto rootNodeId = pageId + ROOT_STACK_BASE; + auto accessibilityNode = GetAccessibilityNodeById(rootNodeId); + if (!accessibilityNode) { + LOGW("the accessibility node %{public}d is not in the map", rootNodeId); + return; + } + RemoveAccessibilityNodes(accessibilityNode); +} + +void AccessibilityNodeManager::TrySaveTargetAndIdNode( + const std::string& id, const std::string& target, const RefPtr& node) +{ + if (!id.empty()) { + AddNodeWithId(id, node); + } + + if (!target.empty()) { + AddNodeWithTarget(target, node); + } +} + +void AccessibilityNodeManager::HandleComponentPostBinding() +{ + for (auto targetIter = nodeWithTargetMap_.begin(); targetIter != nodeWithTargetMap_.end();) { + auto nodeWithTarget = targetIter->second.Upgrade(); + if (nodeWithTarget) { + if (nodeWithTarget->GetTag() == ACCESSIBILITY_TAG_POPUP) { + auto idNodeIter = nodeWithIdMap_.find(targetIter->first); + if (idNodeIter != nodeWithIdMap_.end()) { + auto nodeWithId = idNodeIter->second.Upgrade(); + if (nodeWithId) { + nodeWithId->SetAccessibilityHint(nodeWithTarget->GetText()); + } else { + nodeWithIdMap_.erase(idNodeIter); + } + } + } + ++targetIter; + } else { + // clear the disabled node in the maps + nodeWithTargetMap_.erase(targetIter++); + } + } + + // clear the disabled node in the maps + for (auto idItem = nodeWithIdMap_.begin(); idItem != nodeWithIdMap_.end();) { + if (!idItem->second.Upgrade()) { + nodeWithIdMap_.erase(idItem++); + } else { + ++idItem; + } + } +} + +void AccessibilityNodeManager::DumpHandleEvent(const std::vector& params) {} + +void AccessibilityNodeManager::DumpProperty(const std::vector& params) {} + +void AccessibilityNodeManager::DumpTree(int32_t depth, NodeId nodeID) {} + +void AccessibilityNodeManager::SetCardViewParams(const std::string& key, bool focus) {} + +void AccessibilityNodeManager::SetCardViewPosition(int id, float offsetX, float offsetY) +{ + cardOffset_ = Offset(offsetX, offsetY); + if (id < 0 || id > CARD_MAX_AGP_ID) { + cardId_ = 0; + } else { + cardId_ = id; + } + isOhosHostCard_ = true; + LOGD("setcardview id=%{public}d offsetX=%{public}f, offsetY=%{public}f", id, cardOffset_.GetX(), + cardOffset_.GetY()); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/accessibility/accessibility_node_manager.h b/frameworks/bridge/common/accessibility/accessibility_node_manager.h new file mode 100644 index 00000000..803982c6 --- /dev/null +++ b/frameworks/bridge/common/accessibility/accessibility_node_manager.h @@ -0,0 +1,111 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_ACCESSIBILITY_ACCESSIBILITY_NODE_MANAGER_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_ACCESSIBILITY_ACCESSIBILITY_NODE_MANAGER_H + +#include +#include +#include + +#include "base/memory/ace_type.h" +#include "core/pipeline/pipeline_context.h" +#include "frameworks/bridge/js_frontend/js_ace_page.h" + +namespace OHOS::Ace::Framework { + +class AccessibilityNodeManager : public AccessibilityManager { + DECLARE_ACE_TYPE(AccessibilityNodeManager, AccessibilityManager); + +public: + AccessibilityNodeManager() = default; + ~AccessibilityNodeManager() override; + + // AccessibilityNodeManager functions. + virtual void InitializeCallback(); + void SetPipelineContext(const RefPtr& context); + void SetRunningPage(const RefPtr& page); + std::string GetNodeChildIds(const RefPtr& node); + void AddNodeWithId(const std::string& key, const RefPtr& node); + void AddNodeWithTarget(const std::string& key, const RefPtr& node); + RefPtr GetAccessibilityNodeFromPage(NodeId nodeId) const; + void ClearNodeRectInfo(RefPtr& node, bool isPopDialog) override; + + int32_t GetRootNodeId() + { + return rootNodeId_; + } + + const Offset& GetCardOffset() + { + return cardOffset_; + } + + int32_t GetCardId() + { + return cardId_; + } + + bool isOhosHostCard() + { + return isOhosHostCard_; + } + + const WeakPtr GetPipelineContext() + { + return context_; + } + + // AccessibilityNodeManager overrides functions. + virtual void SendAccessibilityAsyncEvent(const AccessibilityEvent& accessibilityEvent) override; + int32_t GenerateNextAccessibilityId() override; + RefPtr CreateSpecializedNode( + const std::string& tag, int32_t nodeId, int32_t parentNodeId) override; + RefPtr CreateAccessibilityNode( + const std::string& tag, int32_t nodeId, int32_t parentNodeId, int32_t itemIndex) override; + RefPtr GetAccessibilityNodeById(NodeId nodeId) const override; + void RemoveAccessibilityNodes(RefPtr& node) override; + void RemoveAccessibilityNodeById(NodeId nodeId) override; + void ClearPageAccessibilityNodes(int32_t pageId) override; + + void SetRootNodeId(int32_t nodeId) override + { + rootNodeId_ = nodeId; + } + + void TrySaveTargetAndIdNode( + const std::string& id, const std::string& target, const RefPtr& node) override; + void HandleComponentPostBinding() override; + virtual void DumpHandleEvent(const std::vector& params) override; + virtual void DumpProperty(const std::vector& params) override; + virtual void DumpTree(int32_t depth, NodeId nodeID) override; + virtual void SetCardViewParams(const std::string& key, bool focus) override; + void SetCardViewPosition(int id, float offsetX, float offsetY) override; + +private: + std::unordered_map> accessibilityNodes_; + std::unordered_map> nodeWithIdMap_; + std::unordered_map> nodeWithTargetMap_; + WeakPtr context_; + WeakPtr indexPage_; + int32_t rootNodeId_ = -1; + Offset cardOffset_; + int32_t cardId_ = 0; + bool isOhosHostCard_ = false; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_ACCESSIBILITY_ACCESSIBILITY_NODE_MANAGER_H diff --git a/frameworks/bridge/common/accessibility/fake_accessibility_manager.cpp b/frameworks/bridge/common/accessibility/fake_accessibility_manager.cpp new file mode 100644 index 00000000..26858521 --- /dev/null +++ b/frameworks/bridge/common/accessibility/fake_accessibility_manager.cpp @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/accessibility/js_accessibility_manager.h" + +namespace OHOS::Ace::Framework { + +void JsAccessibilityManager::InitializeCallback() {} + +// AccessibilityManager overrides +void JsAccessibilityManager::SendAccessibilityAsyncEvent(const AccessibilityEvent& accessibilityEvent) {} + +void JsAccessibilityManager::SendAccessibilitySyncEvent(const AccessibilityEvent& accessibilityEvent) {} + +void JsAccessibilityManager::UpdateNodeChildIds(const RefPtr& node) {} + +void JsAccessibilityManager::DumpHandleEvent(const std::vector& params) {} + +void JsAccessibilityManager::DumpProperty(const std::vector& params) {}; + +void JsAccessibilityManager::DumpTree(int32_t depth, NodeId nodeID) {}; + +void JsAccessibilityManager::SetCardViewParams(const std::string& key, bool focus) {}; + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/accessibility/fake_accessibility_node_manager.cpp b/frameworks/bridge/common/accessibility/fake_accessibility_node_manager.cpp new file mode 100644 index 00000000..e896bd42 --- /dev/null +++ b/frameworks/bridge/common/accessibility/fake_accessibility_node_manager.cpp @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/accessibility/accessibility_node_manager.h" + +#include "base/log/dump_log.h" +#include "base/log/event_report.h" +#include "base/log/log.h" +#include "base/utils/linear_map.h" +#include "base/utils/string_utils.h" +#include "base/utils/utils.h" +#include "frameworks/bridge/common/dom/dom_type.h" + +namespace OHOS::Ace::Framework { + +AccessibilityNodeManager::~AccessibilityNodeManager() = default; + +void AccessibilityNodeManager::InitializeCallback() {} + +void AccessibilityNodeManager::SetPipelineContext(const RefPtr& context) {} + +void AccessibilityNodeManager::SetRunningPage(const RefPtr& page) {} + +std::string AccessibilityNodeManager::GetNodeChildIds(const RefPtr& node) +{ + return ""; +} + +void AccessibilityNodeManager::AddNodeWithId(const std::string& key, const RefPtr& node) {} + +void AccessibilityNodeManager::AddNodeWithTarget(const std::string& key, const RefPtr& node) {} + +RefPtr AccessibilityNodeManager::GetAccessibilityNodeFromPage(NodeId nodeId) const +{ + return nullptr; +} + +void AccessibilityNodeManager::ClearNodeRectInfo(RefPtr& node, bool isPopDialog) {} + +void AccessibilityNodeManager::SendAccessibilityAsyncEvent(const AccessibilityEvent& accessibilityEvent) {} + +int32_t AccessibilityNodeManager::GenerateNextAccessibilityId() +{ + return 0; +} + +// combined components which pop up through js api, such as dialog/toast +RefPtr AccessibilityNodeManager::CreateSpecializedNode( + const std::string& tag, int32_t nodeId, int32_t parentNodeId) +{ + return nullptr; +} + +RefPtr AccessibilityNodeManager::CreateAccessibilityNode( + const std::string& tag, int32_t nodeId, int32_t parentNodeId, int32_t itemIndex) +{ + return nullptr; +} + +RefPtr AccessibilityNodeManager::GetAccessibilityNodeById(NodeId nodeId) const +{ + return nullptr; +} + +void AccessibilityNodeManager::RemoveAccessibilityNodes(RefPtr& node) {} + +void AccessibilityNodeManager::RemoveAccessibilityNodeById(NodeId nodeId) {} + +void AccessibilityNodeManager::ClearPageAccessibilityNodes(int32_t pageId) {} + +void AccessibilityNodeManager::TrySaveTargetAndIdNode( + const std::string& id, const std::string& target, const RefPtr& node) {} + +void AccessibilityNodeManager::HandleComponentPostBinding() {} + +void AccessibilityNodeManager::DumpHandleEvent(const std::vector& params) {} + +void AccessibilityNodeManager::DumpProperty(const std::vector& params) {} + +void AccessibilityNodeManager::DumpTree(int32_t depth, NodeId nodeID) {} + +void AccessibilityNodeManager::SetCardViewParams(const std::string& key, bool focus) {} + +void AccessibilityNodeManager::SetCardViewPosition(int id, float offsetX, float offsetY) {} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/accessibility/js_accessibility_manager.cpp b/frameworks/bridge/common/accessibility/js_accessibility_manager.cpp new file mode 100644 index 00000000..14d8bf70 --- /dev/null +++ b/frameworks/bridge/common/accessibility/js_accessibility_manager.cpp @@ -0,0 +1,690 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/accessibility/js_accessibility_manager.h" + +#include "accessibility_ability_client.h" +#include "accessibility_system_ability_client.h" + +#include "base/log/dump_log.h" +#include "base/log/event_report.h" +#include "base/log/log.h" +#include "base/utils/linear_map.h" +#include "base/utils/string_utils.h" +#include "base/utils/utils.h" +#include "frameworks/bridge/common/dom/dom_type.h" + +namespace OHOS::Ace::Framework { +namespace { + +const int32_t EVENT_DUMP_PARAM_LENGTH = 3; +const int32_t PROPERTY_DUMP_PARAM_LENGTH = 2; +const char DUMP_ORDER[] = "-accessibility"; +const char TEXT_CHANGE_EVENT[] = "textchange"; +const char PAGE_CHANGE_EVENT[] = "pagechange"; +const char EJECT_DISMISS_EVENT[] = "ejectdismiss"; +const char SCROLL_START_EVENT[] = "scrollstart"; +const char SCROLL_END_EVENT[] = "scrollend"; +const char ACCESSIBILITY_EVENT_TYPE[] = "accessibilityeventtype"; +const char IMPORTANT_YES[] = "yes"; +const char IMPORTANT_NO[] = "no"; +const char IMPORTANT_NO_HIDE_DES[] = "no-hide-descendants"; +constexpr int32_t ROOT_STACK_BASE = 1100000; +constexpr int32_t CARD_NODE_ID_RATION = 10000; +constexpr int32_t CARD_ROOT_NODE_ID_RATION = 1000; +constexpr int32_t CARD_BASE = 100000; + +// key event value +const char KEYBOARD_BACK[] = "4"; +const char KEYBOARD_UP[] = "19"; +const char KEYBOARD_DOWN[] = "20"; +const char KEYBOARD_LEFT[] = "21"; +const char KEYBOARD_RIGHT[] = "22"; +const char KEYBOARD_CENTER[] = "23"; +const char HANDLE_A[] = "96"; +const char HANDLE_SELECT[] = "109"; +const char KEYBOARD_TAB[] = "61"; +const char KEYBOARD_SPACE[] = "62"; +const char KEYBOARD_ENTER[] = "66"; +const char KEYBOARD_ESCAPE[] = "111"; +const char KEYBOARD_NUMBER_ENTER[] = "160"; +const char TV_CONTROL_MEDIA_PLAY[] = "85"; + +struct ActionTable { + AceAction aceAction; + Action action; +}; + +AccessibilityEventType ConvertStrToEventType(const std::string& type) +{ + // static linear map must be sorted by key. + static const LinearMapNode eventTypeMap[] = { + { HANDLE_SELECT, AccessibilityEventType::HANDLE_SELECT }, + { KEYBOARD_ESCAPE, AccessibilityEventType::KEYBOARD_ESCAPE }, + { KEYBOARD_NUMBER_ENTER, AccessibilityEventType::KEYBOARD_NUMBER_ENTER }, + { KEYBOARD_UP, AccessibilityEventType::KEYBOARD_UP }, + { KEYBOARD_DOWN, AccessibilityEventType::KEYBOARD_DOWN }, + { KEYBOARD_LEFT, AccessibilityEventType::KEYBOARD_LEFT }, + { KEYBOARD_RIGHT, AccessibilityEventType::KEYBOARD_RIGHT }, + { KEYBOARD_CENTER, AccessibilityEventType::KEYBOARD_CENTER }, + { KEYBOARD_BACK, AccessibilityEventType::KEYBOARD_BACK }, + { KEYBOARD_TAB, AccessibilityEventType::KEYBOARD_TAB }, + { KEYBOARD_SPACE, AccessibilityEventType::KEYBOARD_SPACE }, + { KEYBOARD_ENTER, AccessibilityEventType::KEYBOARD_ENTER }, + { TV_CONTROL_MEDIA_PLAY, AccessibilityEventType::TV_CONTROL_MEDIA_PLAY }, + { HANDLE_A, AccessibilityEventType::HANDLE_A }, + { DOM_BLUR, AccessibilityEventType::BLUR }, + { DOM_CHANGE, AccessibilityEventType::CHANGE }, + { DOM_CLICK, AccessibilityEventType::CLICK }, + { EJECT_DISMISS_EVENT, AccessibilityEventType::EJECT_DISMISS }, + { DOM_FOCUS, AccessibilityEventType::FOCUS }, + { DOM_LONG_PRESS, AccessibilityEventType::LONG_PRESS }, + { DOM_MOUSE, AccessibilityEventType::MOUSE }, + { PAGE_CHANGE_EVENT, AccessibilityEventType::PAGE_CHANGE }, + { SCROLL_END_EVENT, AccessibilityEventType::SCROLL_END }, + { SCROLL_START_EVENT, AccessibilityEventType::SCROLL_START }, + { DOM_SELECTED, AccessibilityEventType::SELECTED }, + { TEXT_CHANGE_EVENT, AccessibilityEventType::TEXT_CHANGE }, + { DOM_TOUCH_CANCEL, AccessibilityEventType::TOUCH_CANCEL }, + { DOM_TOUCH_END, AccessibilityEventType::TOUCH_END }, + { DOM_TOUCH_MOVE, AccessibilityEventType::TOUCH_MOVE }, + { DOM_TOUCH_START, AccessibilityEventType::TOUCH_START }, + }; + AccessibilityEventType eventType = AccessibilityEventType::UNKNOWN; + int64_t idx = BinarySearchFindIndex(eventTypeMap, ArraySize(eventTypeMap), type.c_str()); + if (idx >= 0) { + eventType = eventTypeMap[idx].value; + } + return eventType; +} + +Action ConvertAceAction(AceAction aceAction) +{ + static const ActionTable actionTable[] = { + { AceAction::GLOBAL_ACTION_BACK, Action::GLOBAL_ACTION_BACK }, + { AceAction::CUSTOM_ACTION, Action::CUSTOM_ACTION }, + { AceAction::ACTION_CLICK, Action::ACTION_CLICK }, + { AceAction::ACTION_LONG_CLICK, Action::ACTION_LONG_CLICK }, + { AceAction::ACTION_SCROLL_FORWARD, Action::ACTION_SCROLL_FORWARD }, + { AceAction::ACTION_SCROLL_BACKWARD, Action::ACTION_SCROLL_BACKWARD }, + { AceAction::ACTION_FOCUS, Action::CUSTOM_ACTION }, + { AceAction::ACTION_ACCESSIBILITY_FOCUS, Action::ACTION_ACCESSIBILITY_FOCUS }, + { AceAction::ACTION_CLEAR_ACCESSIBILITY_FOCUS, Action::ACTION_CLEAR_ACCESSIBILITY_FOCUS }, + { AceAction::ACTION_NEXT_AT_MOVEMENT_GRANULARITY, Action::ACTION_NEXT_AT_MOVEMENT_GRANULARITY }, + { AceAction::ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY, Action::ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY }, + }; + for (const auto& item : actionTable) { + if (aceAction == item.aceAction) { + return item.action; + } + } + return Action::ACTION_NONE; +} + +inline RangeInfo ConvertAccessibilityValue(const AccessibilityValue& value) +{ + return RangeInfo(value.current, value.min, value.max); +} + +TEXT_CATEGORY ConvertInputType(AceTextCategory type) +{ + switch (type) { + case AceTextCategory::INPUT_TYPE_TEXT: + return TEXT_CATEGORY::INPUT_TYPE_TEXT; + case AceTextCategory::INPUT_TYPE_EMAIL: + return TEXT_CATEGORY::INPUT_TYPE_EMAIL; + case AceTextCategory::INPUT_TYPE_DATE: + return TEXT_CATEGORY::INPUT_TYPE_DATE; + case AceTextCategory::INPUT_TYPE_TIME: + return TEXT_CATEGORY::INPUT_TYPE_TIME; + case AceTextCategory::INPUT_TYPE_NUMBER: + return TEXT_CATEGORY::INPUT_TYPE_NUMBER; + case AceTextCategory::INPUT_TYPE_PASSWORD: + return TEXT_CATEGORY::INPUT_TYPE_PASSWORD; + default: + return TEXT_CATEGORY::INPUT_TYPE_DEFAULT; + } +} + +int32_t ConvertToCardAccessibilityId(int32_t nodeId, int32_t cardId, int32_t rootNodeId) +{ + // result is integer total ten digits, top five for agp virtualViewId, end five for ace nodeId, + // for example agp virtualViewId is 32, ace nodeId is 1000001, convert to result is 00032 10001. + int32_t result = 0; + if (nodeId == rootNodeId + ROOT_STACK_BASE) { + // for example agp virtualViewId is 32 root node is 2100000, convert to result is 00032 21000. + result = cardId * CARD_BASE + (static_cast(nodeId / CARD_BASE)) * CARD_ROOT_NODE_ID_RATION + + nodeId % CARD_BASE; + } else { + result = cardId * CARD_BASE + (static_cast(nodeId / DOM_ROOT_NODE_ID_BASE)) * CARD_NODE_ID_RATION + + nodeId % DOM_ROOT_NODE_ID_BASE; + } + return result; +} + +void UpdateAccessibilityNodeInfo(const RefPtr& node, AccessibilityNodeInfo& nodeInfo, + const RefPtr& manager) +{ + if (manager->isOhosHostCard()) { + nodeInfo.ID = ConvertToCardAccessibilityId(node->GetNodeId(), manager->GetCardId(), manager->GetRootNodeId()); + if (node->GetParentId() == -1) { + nodeInfo.parentID = -1; + } else { + nodeInfo.parentID = + ConvertToCardAccessibilityId(node->GetParentId(), manager->GetCardId(), manager->GetRootNodeId()); + } + nodeInfo.left = node->GetLeft() + manager->GetCardOffset().GetX(); + nodeInfo.top = node->GetTop() + manager->GetCardOffset().GetY(); + } else { + nodeInfo.ID = node->GetNodeId(); + nodeInfo.parentID = node->GetParentId(); + nodeInfo.left = node->GetLeft(); + nodeInfo.top = node->GetTop(); + } + + if (node->GetParentId() == -1) { + const auto& children = node->GetChildList(); + if (!children.empty()) { + auto lastChildNode = manager->GetAccessibilityNodeById(children.back()->GetNodeId()); + if (lastChildNode) { + nodeInfo.width = lastChildNode->GetWidth(); + nodeInfo.height = lastChildNode->GetHeight(); + } + } + } else { + nodeInfo.width = node->GetWidth(); + nodeInfo.height = node->GetHeight(); + } + + nodeInfo.isChecked = node->GetCheckedState(); + nodeInfo.isEnabled = node->GetEnabledState(); + nodeInfo.isFocused = node->GetFocusedState(); + nodeInfo.isSelected = node->GetSelectedState(); + nodeInfo.isCheckable = node->GetCheckableState(); + nodeInfo.isClickable = node->GetClickableState(); + nodeInfo.isFocusable = node->GetFocusableState(); + nodeInfo.isScrollable = node->GetScrollableState(); + nodeInfo.isLongClickable = node->GetLongClickableState(); + nodeInfo.isEditable = node->GetEditable(); + nodeInfo.isMultiLine = node->GetIsMultiLine(); + nodeInfo.isPassword = node->GetIsPassword(); + nodeInfo.maxTextLength = node->GetMaxTextLength(); + nodeInfo.textSelectionStart = node->GetTextSelectionStart(); + nodeInfo.textSelectionEnd = node->GetTextSelectionEnd(); + nodeInfo.isVisible = (node->GetWidth() != 0 && node->GetHeight() != 0); + bool visible = node->GetShown() && node->GetVisible(); + nodeInfo.isVisible = nodeInfo.isVisible && visible; + nodeInfo.hintText = node->GetHintText(); + nodeInfo.accessibilityLabel = node->GetAccessibilityLabel(); + nodeInfo.error = node->GetErrorText(); + nodeInfo.jsComponentID = node->GetJsComponentId(); + nodeInfo.rangeInfo = ConvertAccessibilityValue(node->GetAccessibilityValue()); + nodeInfo.inputType = node->GetInputType(); + nodeInfo.textInputType = ConvertInputType(node->GetTextInputType()); + nodeInfo.componentName = node->GetTag(); + nodeInfo.collectionInfo.rows = node->GetCollectionInfo().rows; + nodeInfo.collectionInfo.columns = node->GetCollectionInfo().columns; + nodeInfo.collectionItemInfo.row = node->GetCollectionItemInfo().row; + nodeInfo.collectionItemInfo.column = node->GetCollectionItemInfo().column; + + if (node->GetIsPassword()) { + std::string strStar(node->GetText().size(), '*'); + nodeInfo.text = strStar; + } else { + nodeInfo.text = node->GetText(); + } + + if (!node->GetAccessibilityHint().empty()) { + if (node->GetAccessibilityLabel().empty()) { + nodeInfo.accessibilityLabel = nodeInfo.text + "," + node->GetAccessibilityHint(); + } else { + nodeInfo.accessibilityLabel = node->GetAccessibilityLabel() + "," + node->GetAccessibilityHint(); + } + } + + auto supportAceActions = node->GetSupportAction(); + std::vector actions(supportAceActions.size()); + std::transform(supportAceActions.begin(), supportAceActions.end(), actions.begin(), + [](const AceAction& action) { return ConvertAceAction(action); }); + if (node->GetImportantForAccessibility() == IMPORTANT_YES) { + actions.emplace_back(Action::ACTION_FOCUS); + nodeInfo.isCheckable = true; + } else if (node->GetImportantForAccessibility() == IMPORTANT_NO || + node->GetImportantForAccessibility() == IMPORTANT_NO_HIDE_DES) { + nodeInfo.isVisible = false; + } + + if (!node->GetAccessible() && node->GetImportantForAccessibility() != IMPORTANT_NO_HIDE_DES && visible) { + nodeInfo.childIDs = node->GetChildIds(); + } + + nodeInfo.supportAction = std::move(actions); +#ifdef ACE_DEBUG + std::string actionForLog; + for (const auto& action : supportAceActions) { + if (!actionForLog.empty()) { + actionForLog.append(","); + } + actionForLog.append(std::to_string(static_cast(action))); + } + LOGD("Support action is %{public}s", actionForLog.c_str()); +#endif +} + +std::string PrepareCustomEventParam(const std::vector>& actionParam) +{ + std::string eventParam; + std::string params; + for (const auto& param : actionParam) { + if (param.first == ACCESSIBILITY_EVENT_TYPE) { + eventParam.append("{\"eventType\":\"").append(param.second).append("\""); + } else { + if (params.empty()) { + params.append(",\"param\":{\""); + } else { + params.append(",\""); + } + params.append(param.first).append("\":\"").append(param.second).append("\""); + } + } + + if (eventParam.empty()) { + return std::string(); + } + + if (!params.empty()) { + params.append("}"); + } + return eventParam.append(params).append("}"); +} + +bool AccessibilityActionEvent(const AccessibilityActionInfo& actionInfo, const RefPtr& node, + const RefPtr& context) +{ + if (!node || !context) { + return false; + } + // neither register fronted event nor set backend event will return false. + switch (actionInfo.action) { + case Action::GLOBAL_ACTION_BACK: + return context->CallRouterBackToPopPage(); + case Action::CUSTOM_ACTION: { + if (!node->GetAccessibilityEventMarker().IsEmpty()) { + auto actionParam = actionInfo.param; + if (actionParam.empty()) { + LOGW("param cannot be empty when accessibility event"); + return false; + } + auto eventParam = PrepareCustomEventParam(actionParam); + std::string param = node->GetAccessibilityEventMarker().GetData().GetEventParam(); + if (eventParam.empty()) { + param.append("null"); + } else { + param.append(eventParam); + } + context->SendEventToFrontend(node->GetAccessibilityEventMarker(), param); + return true; + } + return false; + } + case Action::ACTION_CLICK: { + node->SetClicked(true); + if (!node->GetClickEventMarker().IsEmpty()) { + context->SendEventToFrontend(node->GetClickEventMarker()); + node->ActionClick(); + return true; + } + return node->ActionClick(); + } + case Action::ACTION_LONG_CLICK: { + if (!node->GetLongPressEventMarker().IsEmpty()) { + context->SendEventToFrontend(node->GetLongPressEventMarker()); + node->ActionLongClick(); + return true; + } + return node->ActionLongClick(); + } + case Action::ACTION_FOCUS: { + context->AccessibilityRequestFocus(std::to_string(node->GetNodeId())); + if (!node->GetFocusEventMarker().IsEmpty()) { + context->SendEventToFrontend(node->GetFocusEventMarker()); + node->ActionFocus(); + return true; + } + return node->ActionFocus(); + } + case Action::ACTION_SCROLL_FORWARD: + return node->ActionScrollForward(); + case Action::ACTION_SCROLL_BACKWARD: + return node->ActionScrollBackward(); + default: + return false; + } +} + +inline std::string BoolToString(bool tag) +{ + return tag ? "true" : "false"; +} + +std::string ConvertInputTypeToString(AceTextCategory type) +{ + switch (type) { + case AceTextCategory::INPUT_TYPE_DEFAULT: + return "INPUT_TYPE_DEFAULT"; + case AceTextCategory::INPUT_TYPE_TEXT: + return "INPUT_TYPE_TEXT"; + case AceTextCategory::INPUT_TYPE_EMAIL: + return "INPUT_TYPE_EMAIL"; + case AceTextCategory::INPUT_TYPE_DATE: + return "INPUT_TYPE_DATE"; + case AceTextCategory::INPUT_TYPE_TIME: + return "INPUT_TYPE_TIME"; + case AceTextCategory::INPUT_TYPE_NUMBER: + return "INPUT_TYPE_NUMBER"; + case AceTextCategory::INPUT_TYPE_PASSWORD: + return "INPUT_TYPE_PASSWORD"; + default: + return "illegal input type"; + } +} + +} // namespace + +void JsAccessibilityManager::InitializeCallback() +{ + auto fetchNodeInfoCallback = [weak = WeakClaim(this)](AccessibilityNodeInfo& nodeInfo) { + auto jsAccessibilityManager = weak.Upgrade(); + if (!jsAccessibilityManager) { + return false; + } + + auto node = jsAccessibilityManager->GetAccessibilityNodeFromPage(nodeInfo.ID); + if (!node) { + LOGW("AccessibilityNodeInfo can't attach component by Id = %{public}d", nodeInfo.ID); + return false; + } + jsAccessibilityManager->UpdateNodeChildIds(node); + UpdateAccessibilityNodeInfo(node, nodeInfo, jsAccessibilityManager); + return true; + }; + AccessibilityAbilityClient::GetInstance().RegisterFetchNodeInfoCallback(fetchNodeInfoCallback); + + auto eventHandleCallback = [weak = WeakClaim(this)](AccessibilityActionInfo& actionInfo) { + LOGD("AccessibilityActionInfo nodeId= %{public}d, action=%{public}d", actionInfo.ID, actionInfo.action); + + auto jsAccessibilityManager = weak.Upgrade(); + if (!jsAccessibilityManager) { + return false; + } + + auto context = jsAccessibilityManager->GetPipelineContext().Upgrade(); + if (!context) { + return false; + } + + auto node = jsAccessibilityManager->GetAccessibilityNodeFromPage(actionInfo.ID); + if (!node) { + LOGW("AccessibilityActionInfo can't attach component by Id = %{public}d", actionInfo.ID); + return false; + } + + bool ret = false; + if (actionInfo.action == Action::ACTION_SCROLL_FORWARD || actionInfo.action == Action::ACTION_SCROLL_BACKWARD) { + context->GetTaskExecutor()->PostSyncTask( + [&actionInfo, &node, &context, &ret]() { ret = AccessibilityActionEvent(actionInfo, node, context); }, + TaskExecutor::TaskType::UI); + } else { + ret = AccessibilityActionEvent(actionInfo, node, context); + } + return ret; + }; + AccessibilityAbilityClient::GetInstance().RegisterEventHandleCallback(eventHandleCallback); +} + +void JsAccessibilityManager::SendAccessibilitySyncEvent(const AccessibilityEvent& accessibilityEvent) +{ + AccessibilityEventType type = ConvertStrToEventType(accessibilityEvent.eventType); + if (type == AccessibilityEventType::UNKNOWN) { + return; + } + + auto client = AccessibilitySystemAbilityClient::GetInstance(nullptr); + if (!client) { + return; + } + auto barrierEvent = std::make_unique(); + barrierEvent->SetId(accessibilityEvent.nodeId); + barrierEvent->SetEventType(static_cast(type)); + barrierEvent->SetClassName(accessibilityEvent.componentType); + barrierEvent->SetCurrentItemIndex(static_cast(accessibilityEvent.currentItemIndex)); + barrierEvent->SetItemCount(static_cast(accessibilityEvent.itemCount)); + client->SendBarrierfreeEvent(barrierEvent); +} + +void JsAccessibilityManager::SendAccessibilityAsyncEvent(const AccessibilityEvent& accessibilityEvent) +{ + auto context = GetPipelineContext().Upgrade(); + if (!context) { + return; + } + + context->GetTaskExecutor()->PostTask( + [weak = WeakClaim(this), accessibilityEvent] { + auto jsAccessibilityManager = weak.Upgrade(); + if (!jsAccessibilityManager) { + return; + } + jsAccessibilityManager->SendAccessibilitySyncEvent(accessibilityEvent); + }, + TaskExecutor::TaskType::BACKGROUND); +} + +void JsAccessibilityManager::UpdateNodeChildIds(const RefPtr& node) +{ + if (!node) { + return; + } + node->ActionUpdateIds(); + const auto& children = node->GetChildList(); + std::vector childrenVec; + auto cardId = GetCardId(); + auto rootNodeId = GetRootNodeId(); + + // get last stack children to barrier free service. + if ((node->GetNodeId() == GetRootNodeId() + ROOT_STACK_BASE) && !children.empty()) { + auto lastChildNodeId = children.back()->GetNodeId(); + if (isOhosHostCard()) { + childrenVec.emplace_back(ConvertToCardAccessibilityId(lastChildNodeId, cardId, rootNodeId)); + } else { + childrenVec.emplace_back(lastChildNodeId); + } + } else { + childrenVec.resize(children.size()); + if (isOhosHostCard()) { + std::transform(children.begin(), children.end(), childrenVec.begin(), + [cardId, rootNodeId](const RefPtr& child) { + return ConvertToCardAccessibilityId(child->GetNodeId(), cardId, rootNodeId); + }); + } else { + std::transform(children.begin(), children.end(), childrenVec.begin(), + [](const RefPtr& child) { return child->GetNodeId(); }); + } + } + node->SetChildIds(childrenVec); +} + +void JsAccessibilityManager::DumpHandleEvent(const std::vector& params) +{ + if (params.empty()) { + DumpLog::GetInstance().Print("Error: params is empty!"); + return; + } + if (params.size() != EVENT_DUMP_PARAM_LENGTH) { + DumpLog::GetInstance().Print("Error: params length is illegal!"); + return; + } + if (params[0] != DUMP_ORDER) { + DumpLog::GetInstance().Print("Error: not accessibility dump order!"); + return; + } + int32_t ID = StringUtils::StringToInt(params[1]); + auto node = GetAccessibilityNodeFromPage(ID); + if (!node) { + DumpLog::GetInstance().Print("Error: can't find node with ID"); + return; + } + auto action = static_cast(StringUtils::StringToInt(params[2])); + AccessibilityActionInfo actionInfo = { + .ID = ID, + }; + static const ActionTable actionEventTable[] = { + { AceAction::CUSTOM_ACTION, Action::CUSTOM_ACTION }, + { AceAction::ACTION_CLICK, Action::ACTION_CLICK }, + { AceAction::ACTION_LONG_CLICK, Action::ACTION_LONG_CLICK }, + { AceAction::ACTION_SCROLL_FORWARD, Action::ACTION_SCROLL_FORWARD }, + { AceAction::ACTION_SCROLL_BACKWARD, Action::ACTION_SCROLL_BACKWARD }, + { AceAction::ACTION_FOCUS, Action::CUSTOM_ACTION }, + }; + for (const auto& item : actionEventTable) { + if (action == item.aceAction) { + actionInfo.action = item.action; + break; + } + } + auto context = GetPipelineContext().Upgrade(); + if (context) { + context->GetTaskExecutor()->PostTask( + [actionInfo, node, context]() { AccessibilityActionEvent(actionInfo, node, context); }, + TaskExecutor::TaskType::UI); + } +} + +void JsAccessibilityManager::DumpProperty(const std::vector& params) +{ + if (!DumpLog::GetInstance().GetDumpFile()) { + return; + } + + if (params.empty()) { + DumpLog::GetInstance().Print("Error: params cannot be empty!"); + return; + } + if (params.size() != PROPERTY_DUMP_PARAM_LENGTH) { + DumpLog::GetInstance().Print("Error: params length is illegal!"); + return; + } + if (params[0] != DUMP_ORDER) { + DumpLog::GetInstance().Print("Error: not accessibility dump order!"); + return; + } + + auto node = GetAccessibilityNodeFromPage(StringUtils::StringToInt(params[1])); + if (!node) { + DumpLog::GetInstance().Print("Error: can't find node with ID " + params[1]); + return; + } + + const auto& supportAceActions = node->GetSupportAction(); + std::string actionForDump; + for (const auto& action : supportAceActions) { + if (!actionForDump.empty()) { + actionForDump.append(","); + } + actionForDump.append(std::to_string(static_cast(action))); + } + + const auto& charValue = node->GetChartValue(); + + DumpLog::GetInstance().AddDesc("ID: ", node->GetNodeId()); + DumpLog::GetInstance().AddDesc("parent ID: ", node->GetParentId()); + DumpLog::GetInstance().AddDesc("child IDs: ", GetNodeChildIds(node)); + DumpLog::GetInstance().AddDesc("component type: ", node->GetTag()); + DumpLog::GetInstance().AddDesc("input type: ", node->GetInputType()); + DumpLog::GetInstance().AddDesc("text: ", node->GetText()); + DumpLog::GetInstance().AddDesc("width: ", node->GetWidth()); + DumpLog::GetInstance().AddDesc("height: ", node->GetHeight()); + DumpLog::GetInstance().AddDesc("left: ", node->GetLeft() + GetCardOffset().GetX()); + DumpLog::GetInstance().AddDesc("top: ", node->GetTop() + GetCardOffset().GetY()); + DumpLog::GetInstance().AddDesc("enabled: ", BoolToString(node->GetEnabledState())); + DumpLog::GetInstance().AddDesc("checked: ", BoolToString(node->GetCheckedState())); + DumpLog::GetInstance().AddDesc("selected: ", BoolToString(node->GetSelectedState())); + DumpLog::GetInstance().AddDesc("focusable: ", BoolToString(node->GetFocusableState())); + DumpLog::GetInstance().AddDesc("focused: ", BoolToString(node->GetFocusedState())); + DumpLog::GetInstance().AddDesc("checkable: ", BoolToString(node->GetCheckableState())); + DumpLog::GetInstance().AddDesc("clickable: ", BoolToString(node->GetClickableState())); + DumpLog::GetInstance().AddDesc("long clickable: ", BoolToString(node->GetLongClickableState())); + DumpLog::GetInstance().AddDesc("scrollable: ", BoolToString(node->GetScrollableState())); + DumpLog::GetInstance().AddDesc("editable: ", BoolToString(node->GetEditable())); + DumpLog::GetInstance().AddDesc("hint text: ", node->GetHintText()); + DumpLog::GetInstance().AddDesc("error text: ", node->GetErrorText()); + DumpLog::GetInstance().AddDesc("js component id: ", node->GetJsComponentId()); + DumpLog::GetInstance().AddDesc("accessibility label: ", node->GetAccessibilityLabel()); + DumpLog::GetInstance().AddDesc("accessibility hint: ", node->GetAccessibilityHint()); + DumpLog::GetInstance().AddDesc("max text length: ", node->GetMaxTextLength()); + DumpLog::GetInstance().AddDesc("text selection start: ", node->GetTextSelectionStart()); + DumpLog::GetInstance().AddDesc("text selection end: ", node->GetTextSelectionEnd()); + DumpLog::GetInstance().AddDesc("is multi line: ", BoolToString(node->GetIsMultiLine())); + DumpLog::GetInstance().AddDesc("is password", BoolToString(node->GetIsPassword())); + DumpLog::GetInstance().AddDesc("text input type: ", ConvertInputTypeToString(node->GetTextInputType())); + DumpLog::GetInstance().AddDesc("min value: ", node->GetAccessibilityValue().min); + DumpLog::GetInstance().AddDesc("max value: ", node->GetAccessibilityValue().max); + DumpLog::GetInstance().AddDesc("current value: ", node->GetAccessibilityValue().current); + DumpLog::GetInstance().AddDesc("collection info rows: ", node->GetCollectionInfo().rows); + DumpLog::GetInstance().AddDesc("collection info columns: ", node->GetCollectionInfo().columns); + DumpLog::GetInstance().AddDesc("collection item info, row: ", node->GetCollectionItemInfo().row); + DumpLog::GetInstance().AddDesc("collection item info, column: ", node->GetCollectionItemInfo().column); + DumpLog::GetInstance().AddDesc("chart has value: ", BoolToString(charValue && !charValue->empty())); + DumpLog::GetInstance().AddDesc("support action: ", actionForDump); + + DumpLog::GetInstance().Print(0, node->GetTag(), node->GetChildList().size()); +} + +void JsAccessibilityManager::DumpTree(int32_t depth, NodeId nodeID) +{ + if (!DumpLog::GetInstance().GetDumpFile()) { + return; + } + + auto node = GetAccessibilityNodeFromPage(nodeID); + if (!node) { + DumpLog::GetInstance().Print("Error: failed to get accessibility node with ID " + std::to_string(nodeID)); + return; + } + + std::string info = "ID:"; + info.append(std::to_string(node->GetNodeId())); + if (!node->GetText().empty()) { + info.append(" "); + info.append("text:"); + info.append(node->GetText()); + } + DumpLog::GetInstance().AddDesc(info); + DumpLog::GetInstance().Print(depth, node->GetTag(), node->GetChildList().size()); + for (const auto& item : node->GetChildList()) { + DumpTree(depth + 1, item->GetNodeId()); + } +} + +void JsAccessibilityManager::SetCardViewParams(const std::string& key, bool focus) +{ + LOGD("SetCardViewParams key=%{public}s focus=%{public}d", key.c_str(), focus); + callbackKey_ = key; + if (!callbackKey_.empty()) { + InitializeCallback(); + } +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/accessibility/js_accessibility_manager.h b/frameworks/bridge/common/accessibility/js_accessibility_manager.h new file mode 100644 index 00000000..1ca1eef8 --- /dev/null +++ b/frameworks/bridge/common/accessibility/js_accessibility_manager.h @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_ACCESSIBILITY_JS_ACCESSIBILITY_MANAGER_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_ACCESSIBILITY_JS_ACCESSIBILITY_MANAGER_H + +#include +#include +#include + +#include "core/accessibility/accessibility_manager.h" +#include "core/accessibility/accessibility_utils.h" +#include "frameworks/bridge/common/accessibility/accessibility_node_manager.h" + +namespace OHOS::Ace::Framework { + +class JsAccessibilityManager : public AccessibilityNodeManager { + DECLARE_ACE_TYPE(JsAccessibilityManager, AccessibilityNodeManager); + +public: + JsAccessibilityManager() = default; + ~JsAccessibilityManager() override = default; + + // JsAccessibilityManager overrides functions. + void InitializeCallback() override; + void SendAccessibilityAsyncEvent(const AccessibilityEvent& accessibilityEvent) override; + void DumpHandleEvent(const std::vector& params) override; + void DumpProperty(const std::vector& params) override; + void DumpTree(int32_t depth, NodeId nodeID) override; + void SetCardViewParams(const std::string& key, bool focus) override; + +private: + void UpdateNodeChildIds(const RefPtr& node); + void SendAccessibilitySyncEvent(const AccessibilityEvent& accessibilityEvent); + + std::string callbackKey_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_ACCESSIBILITY_JS_ACCESSIBILITY_MANAGER_H diff --git a/frameworks/bridge/common/dom/dom_badge.cpp b/frameworks/bridge/common/dom/dom_badge.cpp new file mode 100644 index 00000000..0d4c5480 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_badge.cpp @@ -0,0 +1,158 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_badge.h" + +#include "base/log/event_report.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { + +DOMBadge::DOMBadge(NodeId nodeId, const std::string& nodeName) : DOMNode(nodeId, nodeName) +{ + badgeChild_ = AceType::MakeRefPtr(); + if (IsRightToLeft()) { + badgeChild_->SetTextDirection(TextDirection::RTL); + } +} + +void DOMBadge::ResetInitializedStyle() +{ + InitializeStyle(); +} + +bool DOMBadge::SetSpecializedAttr(const std::pair& attr) +{ + static const LinearMapNode badgeAttrOperators[] = { + { DOM_BADGE_COUNT, + [](DOMBadge& badge, const std::string& value) { badge.badgeChild_->SetMessageCount(StringToInt(value)); } }, + { DOM_BADGE_LABEL, + [](DOMBadge& badge, const std::string& value) { badge.badgeChild_->SetBadgeLabel(value); } }, + { DOM_BADGE_MAX_COUNT, + [](DOMBadge& badge, const std::string& value) { badge.badgeChild_->SetMaxCount(StringToInt(value)); } }, + { DOM_BADGE_PLACEMENT, + [](DOMBadge& badge, const std::string& value) { + badge.badgeChild_->SetBadgePosition(ConvertStrToBadgePosition(value)); + } }, + { DOM_BADGE_VISIBLE, + [](DOMBadge& badge, const std::string& value) { badge.badgeChild_->SetShowMessage(StringToBool(value)); } } + }; + auto operatorIter = BinarySearchFindIndex(badgeAttrOperators, ArraySize(badgeAttrOperators), attr.first.c_str()); + if (operatorIter != -1) { + badgeAttrOperators[operatorIter].value(*this, attr.second); + return true; + } + return false; +} + +bool DOMBadge::SetSpecializedStyle(const std::pair& style) +{ + const static LinearMapNode badgeOperators[] = { + { DOM_BADGE_COLOR, + [](DOMBadge& badge, const std::string& value) { + badge.badgeChild_->SetBadgeColor(badge.ParseColor(value)); + } }, + { DOM_BADGE_CIRCLE_SIZE, + [](DOMBadge& badge, const std::string& value) { + badge.badgeChild_->SetBadgeCircleSize(badge.ParseDimension(value)); + } }, + { DOM_BADGE_TEXT_FONT_SIZE, + [](DOMBadge& badge, const std::string& value) { + badge.badgeChild_->SetBadgeFontSize(badge.ParseDimension(value)); + } }, + { DOM_BADGE_TEXT_COLOR, + [](DOMBadge& badge, const std::string& value) { + badge.badgeChild_->SetBadgeTextColor(badge.ParseColor(value)); + } }, + }; + auto operatorIter = BinarySearchFindIndex(badgeOperators, ArraySize(badgeOperators), style.first.c_str()); + if (operatorIter != -1) { + badgeOperators[operatorIter].value(*this, style.second); + return true; + } + return false; +} + +bool DOMBadge::AddSpecializedEvent(int32_t pageId, const std::string& event) +{ + if (event == DOM_CLICK) { + badgeClickEvent_ = EventMarker(GetNodeIdForEvent(), event, pageId); + badgeChild_->SetClickEvent(badgeClickEvent_); + return true; + } + return false; +} + +void DOMBadge::PrepareSpecializedComponent() +{ + if (!boxComponent_) { + return; + } + boxComponent_->SetAlignment(Alignment::TOP_LEFT); + auto edge = boxComponent_->GetPadding(); + if (edge == Edge::NONE) { + return; + } + badgeChild_->SetPadding(edge); + boxComponent_->SetPadding(Edge()); +} + +void DOMBadge::OnChildNodeAdded(const RefPtr& child, int32_t slot) +{ + ACE_DCHECK(child); + if (badgeChild_->GetChild()) { + return; + } + badgeChild_->SetChild(child->GetRootComponent()); +} + +void DOMBadge::OnChildNodeRemoved(const RefPtr& child) +{ + badgeChild_->SetChild(nullptr); +} + +void DOMBadge::InitializeStyle() +{ + badgeTheme_ = GetTheme(); + if (!badgeTheme_) { + LOGE("badgeTheme is null"); + EventReport::SendComponentException(ComponentExcepType::GET_THEME_ERR); + return; + } + badgeChild_->SetBadgeColor(badgeTheme_->GetBadgeColor()); + badgeChild_->SetMessageCount(badgeTheme_->GetMessageCount()); + badgeChild_->SetBadgePosition(badgeTheme_->GetBadgePosition()); + badgeChild_->SetShowMessage(badgeTheme_->GetShowMessage()); + badgeChild_->SetBadgeTextColor(badgeTheme_->GetBadgeTextColor()); + badgeChild_->SetBadgeFontSize(badgeTheme_->GetBadgeFontSize()); +} + +void DOMBadge::SetBadgeConfig(const BadgeConfig& badgeConfig) +{ + if (badgeConfig.badgeColor.second) { + badgeChild_->SetBadgeColor(badgeConfig.badgeColor.first); + } + if (badgeConfig.badgeSize.second) { + badgeChild_->SetBadgeCircleSize(badgeConfig.badgeSize.first); + } + if (badgeConfig.textColor.second) { + badgeChild_->SetBadgeTextColor(badgeConfig.textColor.first); + } + if (badgeConfig.textSize.second) { + badgeChild_->SetBadgeFontSize(badgeConfig.textSize.first); + } +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_badge.h b/frameworks/bridge/common/dom/dom_badge.h new file mode 100644 index 00000000..0d995053 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_badge.h @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_BADGE_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_BADGE_H + +#include "core/components/badge/badge_component.h" +#include "core/components/badge/badge_theme.h" +#include "frameworks/bridge/common/dom/dom_node.h" +#include "frameworks/bridge/common/dom/dom_type.h" + +namespace OHOS::Ace::Framework { + +struct BadgeConfig { + std::pair badgeColor { Color::RED, false}; + std::pair textColor{ Color::WHITE, false}; + std::pair badgeSize { 0.0_px, false}; + std::pair textSize { 0.0_px, false}; +}; + +class DOMBadge final : public DOMNode { + DECLARE_ACE_TYPE(DOMBadge, DOMNode); + +public: + DOMBadge(NodeId nodeId, const std::string& nodeName); + ~DOMBadge() override = default; + + void SetBadgeConfig(const BadgeConfig& badgeConfig); + + RefPtr GetSpecializedComponent() override + { + return badgeChild_; + } + + void InitializeStyle() override; + +protected: + bool SetSpecializedAttr(const std::pair& attr) override; + bool SetSpecializedStyle(const std::pair& style) override; + bool AddSpecializedEvent(int32_t pageId, const std::string& event) override; + void PrepareSpecializedComponent() override; + void ResetInitializedStyle() override; + void OnChildNodeAdded(const RefPtr& child, int32_t slot) override; + void OnChildNodeRemoved(const RefPtr& child) override; + +private: + RefPtr badgeChild_; + RefPtr badgeTheme_; + EventMarker badgeClickEvent_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_BADGE_H diff --git a/frameworks/bridge/common/dom/dom_button.cpp b/frameworks/bridge/common/dom/dom_button.cpp new file mode 100644 index 00000000..c241b2f8 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_button.cpp @@ -0,0 +1,745 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_button.h" + +#include "base/log/event_report.h" +#include "core/common/ace_application_info.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +namespace { + +// Button types definition +const char BUTTON_TYPE_CAPSULE[] = "capsule"; +const char BUTTON_TYPE_TEXT[] = "text"; +const char BUTTON_TYPE_CIRCLE[] = "circle"; +const char BUTTON_TYPE_DOWNLOAD[] = "download"; +const char BUTTON_TYPE_ICON[] = "icon"; +const char BUTTON_TYPE_ARC[] = "arc"; // for watch + +// Button children placement definition +const char PLACEMENT_START[] = "start"; +const char PLACEMENT_TOP[] = "top"; +const char PLACEMENT_BOTTOM[] = "bottom"; + +// Watch button definitions +constexpr Dimension ARC_FONT_SIZE = 19.0_fp; +constexpr Dimension ARC_FONT_MIN_SIZE = 16.0_fp; +constexpr Dimension ARC_PADDING_TOP = 8.0_vp; +constexpr Dimension ARC_PADDING_BOTTOM = 0.0_vp; +constexpr Dimension ARC_PADDING_HORIZONTAL = 30.0_vp; +constexpr Dimension WATCH_TEXT_PADDING = 2.0_vp; +constexpr Dimension WATCH_TEXT_RADIUS = 4.0_vp; +constexpr uint32_t MAX_LINES = 2; + +// TV button definitions +constexpr Dimension TEXT_PADDING_HORIZONTAL = 8.0_vp; +constexpr Dimension TEXT_PADDING_VERTICAL = 0.0_vp; +constexpr Dimension TEXT_FONT_MIN_SIZE = 12.0_fp; +constexpr double TEXT_FOCUS_HEIGHT = 24.0; + +constexpr uint32_t TRANSPARENT_COLOR = 0x00000000; +constexpr uint32_t METHOD_SET_PROGRESS_ARGS_SIZE = 1; +constexpr double FLEX_ITEM_SHRINK = 1.0; +constexpr double INIT_HEIGHT = -1.0; +constexpr Dimension DOWNLOAD_BORDER_WIDTH = Dimension(1.0, DimensionUnit::VP); +constexpr Dimension ICON_BUTTON_PADDING = 0.0_vp; +constexpr Dimension ICON_BUTTON_RADIUS = 0.0_vp; +constexpr Dimension INNER_PADDING = 4.0_vp; + +} // namespace + +void DOMButton::ResetInitializedStyle() +{ + buttonTheme_ = GetTheme(); + if (!buttonTheme_) { + return; + } + paddingChild_->SetPadding(buttonTheme_->GetPadding()); + blendOpacity_ = buttonTheme_->GetBgDisabledAlpha(); + edge_.SetColor(buttonTheme_->GetDownloadBorderColor()); + progressColor_ = buttonTheme_->GetProgressColor(); + diameter_ = buttonTheme_->GetProgressDiameter(); + innerLeftPadding_ = buttonTheme_->GetInnerPadding(); + InitButtonStyle(); + InitTextStyle(); +} + +DOMButton::DOMButton(NodeId nodeId, const std::string& nodeName) : DOMNode(nodeId, nodeName) +{ + std::list> buttonChildren; + buttonChild_ = AceType::MakeRefPtr(buttonChildren); + textChild_ = AceType::MakeRefPtr(""); + imageChild_ = AceType::MakeRefPtr(""); + paddingChild_ = AceType::MakeRefPtr(); + buttonChild_->AppendChild(paddingChild_); + isWatch_ = (SystemProperties::GetDeviceType() == DeviceType::WATCH); + isTv_ = (SystemProperties::GetDeviceType() == DeviceType::TV); + if (IsRightToLeft()) { + textChild_->SetTextDirection(TextDirection::RTL); + imageChild_->SetTextDirection(TextDirection::RTL); + } +} + +void DOMButton::InitializeStyle() +{ + ResetInitializedStyle(); +} + +void DOMButton::InitButtonStyle() +{ + if (!buttonChild_) { + return; + } + buttonChild_->SetLayoutFlag(LAYOUT_FLAG_EXTEND_TO_PARENT); + buttonChild_->SetRectRadius(buttonTheme_->GetRadius()); + buttonChild_->SetMinWidth(buttonTheme_->GetMinWidth()); + buttonChild_->SetBackgroundColor(buttonTheme_->GetBgColor()); + buttonChild_->SetClickedColor(buttonTheme_->GetClickedColor()); + buttonChild_->SetFocusColor(buttonTheme_->GetBgFocusColor()); + buttonChild_->SetHoverColor(buttonTheme_->GetHoverColor()); + buttonChild_->SetFocusAnimationColor(buttonTheme_->GetBgFocusColor()); + buttonChild_->SetProgressFocusColor(buttonTheme_->GetProgressFocusColor()); +} + +void DOMButton::InitTextStyle() +{ + textStyle_ = buttonTheme_->GetTextStyle(); + textStyle_.SetAdaptTextSize(textStyle_.GetFontSize(), buttonTheme_->GetMinFontSize()); + textStyle_.SetMaxLines(buttonTheme_->GetTextMaxLines()); + textStyle_.SetTextOverflow(TextOverflow::ELLIPSIS); + textStyle_.SetTextAlign(TextAlign::LEFT); + if (textChild_) { + textChild_->SetTextStyle(textStyle_); + textChild_->SetFocusColor(buttonTheme_->GetTextFocusColor()); + } +} + +bool DOMButton::SetSpecializedAttr(const std::pair& attr) +{ + static const LinearMapNode buttonAttrOperators[] = { + { DOM_BUTTON_AUTO_FOCUS, + [](DOMButton& button, const std::string& value) { + button.buttonChild_->SetAutoFocusState(StringToBool(value)); + } }, + { DOM_DISABLED, [](DOMButton& button, + const std::string& value) { button.buttonChild_->SetDisabledState(StringToBool(value)); } }, + { DOM_BUTTON_ICON, [](DOMButton& button, const std::string& value) { button.imageChild_->SetSrc(value); } }, + { DOM_PLACEMENT, [](DOMButton& button, const std::string& value) { button.placement_ = value; } }, + { DOM_BUTTON_TYPE, [](DOMButton& button, const std::string& value) { button.buttonType_ = value; } }, + { DOM_BUTTON_TEXT_DATA, + [](DOMButton& button, const std::string& value) { button.textChild_->SetData(value); } }, + { DOM_BUTTON_WAITING, + [](DOMButton& button, const std::string& value) { button.isWaiting_ = StringToBool(value); } }, + }; + auto operatorIter = BinarySearchFindIndex(buttonAttrOperators, ArraySize(buttonAttrOperators), attr.first.c_str()); + if (operatorIter != -1) { + LOGD("Button attrs : %{public}s = %{public}s", attr.first.c_str(), attr.second.c_str()); + buttonAttrOperators[operatorIter].value(*this, attr.second); + return true; + } + return false; +} + +bool DOMButton::SetSpecializedStyle(const std::pair& style) +{ + // Static linear map should be sorted by key. + const static LinearMapNode buttonStyleOperators[] = { + { DOM_TEXT_ALLOW_SCALE, + [](DOMButton& button, const std::string& value) { button.textStyle_.SetAllowScale(StringToBool(value)); } }, + { DOM_BUTTON_DEFAULT_COLOR, + [](DOMButton& button, const std::string& value) { + button.buttonChild_->SetBackgroundColor(button.ParseColor(value)); + button.bgColorDefined_ = true; + } }, + { DOM_BUTTON_BORDER_COLOR, + [](DOMButton& button, const std::string& value) { button.edge_.SetColor(button.ParseColor(value)); } }, + { DOM_BUTTON_BORDER_WIDTH, + [](DOMButton& button, const std::string& value) { button.edge_.SetWidth(button.ParseDimension(value)); } }, + { DOM_BUTTON_ICON_DIRECTION, + [](DOMButton& button, const std::string& value) { + button.imageChild_->SetMatchTextDirection(StringToBool(value)); + } }, + { DOM_BUTTON_CLICKED_COLOR, + [](DOMButton& button, const std::string& value) { + button.buttonChild_->SetClickedColor(button.ParseColor(value)); + } }, + { DOM_BUTTON_PROGRESS_DIAMETER, + [](DOMButton& button, const std::string& value) { button.diameter_ = button.ParseDimension(value); } }, + { DOM_BUTTON_DISABLE_COLOR, + [](DOMButton& button, const std::string& value) { button.disabledColor_ = button.ParseColor(value); } }, + { DOM_BUTTON_TEXT_DISABLE_COLOR, + [](DOMButton& button, const std::string& value) { button.disabledTextColor_ = button.ParseColor(value); } }, + { DOM_BUTTON_FOCUS_COLOR, + [](DOMButton& button, const std::string& value) { + button.buttonChild_->SetFocusColor(button.ParseColor(value)); + } }, + { DOM_BUTTON_FONT_FAMILY, + [](DOMButton& button, const std::string& value) { + button.textStyle_.SetFontFamilies(button.ParseFontFamilies(value)); + } }, + { DOM_BUTTON_FONT_SIZE, + [](DOMButton& button, const std::string& value) { + button.textStyle_.SetFontSize(button.ParseDimension(value)); + button.fontSizeDefined_ = true; + } }, + { DOM_BUTTON_FONT_STYLE, + [](DOMButton& button, const std::string& value) { + button.textStyle_.SetFontStyle(ConvertStrToFontStyle(value)); + } }, + { DOM_BUTTON_FONT_WEIGHT, + [](DOMButton& button, const std::string& value) { + button.textStyle_.SetFontWeight(ConvertStrToFontWeight(value)); + } }, + { DOM_BUTTON_HEIGHT, + [](DOMButton& button, const std::string& value) { + button.SetHeight(button.ParseDimension(value)); + button.buttonChild_->SetHeight(button.ParseDimension(value)); + button.heightDefined_ = true; + } }, + { DOM_BUTTON_ICON_HEIGHT, + [](DOMButton& button, const std::string& value) { + button.imageChild_->SetHeight(button.ParseDimension(value)); + } }, + { DOM_BUTTON_ICON_WIDTH, + [](DOMButton& button, const std::string& value) { + button.imageChild_->SetWidth(button.ParseDimension(value)); + } }, + { DOM_BUTTON_INNER_PADDING, + [](DOMButton& button, const std::string& value) { + button.innerLeftPadding_ = button.ParseDimension(value); + } }, + { DOM_BUTTON_MIN_WIDTH, + [](DOMButton& button, const std::string& value) { + button.buttonChild_->SetMinWidth(button.ParseDimension(value)); + } }, + { DOM_BUTTON_PROGRESS_COLOR, + [](DOMButton& button, const std::string& value) { button.progressColor_ = button.ParseColor(value); } }, + { DOM_BUTTON_PROGRESS_FOCUS_COLOR, + [](DOMButton& button, const std::string& value) { + button.buttonChild_->SetProgressFocusColor(button.ParseColor(value)); + } }, + { DOM_BUTTON_RRECT_RADIUS, + [](DOMButton& button, const std::string& value) { + button.buttonChild_->SetRectRadius(button.ParseDimension(value)); + button.radiusDefined_ = true; + } }, + { DOM_BUTTON_TEXT_COLOR, + [](DOMButton& button, const std::string& value) { + button.textStyle_.SetTextColor(button.ParseColor(value)); + button.textColorDefined_ = true; + } }, + { DOM_BUTTON_WIDTH, + [](DOMButton& button, const std::string& value) { + auto width = button.ParseDimension(value); + button.SetWidth(width); + button.buttonChild_->SetWidth(width); + } }, + }; + auto operatorIter = + BinarySearchFindIndex(buttonStyleOperators, ArraySize(buttonStyleOperators), style.first.c_str()); + if (operatorIter != -1) { + LOGD("Button styles : %{public}s = %{public}s", style.first.c_str(), style.second.c_str()); + buttonStyleOperators[operatorIter].value(*this, style.second); + return true; + } + return false; +} + +bool DOMButton::AddSpecializedEvent(int32_t pageId, const std::string& event) +{ + // Note! this map should be sorted by key. + static const LinearMapNode buttonEventOperators[] = { + { DOM_CLICK, + [](DOMButton& button, const EventMarker& event) { button.buttonChild_->SetClickedEventId(event); } }, + }; + auto operatorIter = BinarySearchFindIndex(buttonEventOperators, ArraySize(buttonEventOperators), event.c_str()); + if (operatorIter != -1) { + LOGD("Button events : %{public}s", event.c_str()); + buttonEventOperators[operatorIter].value(*this, EventMarker(GetNodeIdForEvent(), event, pageId)); + return true; + } + return false; +} + +void DOMButton::CallSpecializedMethod(const std::string& method, const std::string& args) +{ + auto controller = buttonChild_->GetButtonController(); + if (!controller) { + LOGE("Get button controller error"); + EventReport::SendComponentException(ComponentExcepType::BUTTON_COMPONENT_ERR); + return; + } + if (method == DOM_BUTTON_METHOD_SET_PROGRESS) { + std::unique_ptr argsValue = JsonUtil::ParseJsonString(args); + if ((!argsValue) || (!argsValue->IsArray()) || (argsValue->GetArraySize() != METHOD_SET_PROGRESS_ARGS_SIZE)) { + return; + } + std::unique_ptr progressValue = argsValue->GetArrayItem(0)->GetValue("progress"); + if ((!progressValue) || (!progressValue->IsNumber())) { + return; + } + uint32_t progress = progressValue->GetUInt(); + controller->SetProgress(progress); + } +} + +void DOMButton::PrepareSpecializedComponent() +{ + bool isCard = AceApplicationInfo::GetInstance().GetIsCardType(); + if (isCard) { + textStyle_.SetAllowScale(false); + if (textStyle_.GetFontSize().Unit() == DimensionUnit::FP) { + textStyle_.SetAllowScale(true); + } + } + if (!focusColorChanged_) { + focusColor_ = buttonChild_->GetFocusColor(); + } + buttonChild_->SetWaitingState(false); + paddingChild_->SetChild(textChild_); + PrepareBoxSize(); + PrepareUniversalButton(); + PrepareBorderStyle(); + PrepareBackDecorationStyle(); + PrepareButtonState(); + PreparePseudoStyle(); + if (!isTv_) { + textChild_->SetFocusColor(textStyle_.GetTextColor()); + if (!isWatch_) { + PrepareClickedColor(); + } + } + if (fontSizeDefined_) { + textStyle_.SetAdaptTextSize(textStyle_.GetFontSize(), textStyle_.GetFontSize()); + } + textChild_->SetTextStyle(textStyle_); + buttonChild_->SetBorderEdge(edge_); + AddPadding(); +} + +void DOMButton::PrepareBoxSize() +{ + if (!boxComponent_) { + return; + } + boxComponent_->SetDeliverMinToChild(true); + backDecoration_ = boxComponent_->GetBackDecoration(); + if (buttonType_ == BUTTON_TYPE_ARC) { + return; + } + if (GreatOrEqual(buttonChild_->GetWidth().Value(), 0.0)) { + boxComponent_->SetWidth(buttonChild_->GetWidth().Value(), buttonChild_->GetWidth().Unit()); + } + if (GreatOrEqual(buttonChild_->GetHeight().Value(), 0.0)) { + boxComponent_->SetHeight(buttonChild_->GetHeight().Value(), buttonChild_->GetHeight().Unit()); + } + // Use theme height if user not define. Circle button will calculate height when rendering. + if ((buttonType_ != BUTTON_TYPE_CIRCLE) && (LessNotEqual(buttonChild_->GetHeight().Value(), 0.0))) { + if ((buttonType_ == BUTTON_TYPE_DOWNLOAD) && (SystemProperties::GetDeviceType() == DeviceType::PHONE)) { + boxComponent_->SetHeight(buttonTheme_->GetDownloadHeight().Value(), + buttonTheme_->GetDownloadHeight().Unit()); + return; + } + boxComponent_->SetHeight(buttonTheme_->GetHeight().Value(), buttonTheme_->GetHeight().Unit()); + } +} + +void DOMButton::PreparePseudoStyle() +{ + if (!HasPseudo()) { + return; + } + if (HasActivePseudo()) { + buttonChild_->SetClickedColor(buttonChild_->GetBackgroundColor()); + } + if (HasFocusPseudo()) { + buttonChild_->SetFocusColor(buttonChild_->GetBackgroundColor()); + } +} + +void DOMButton::PrepareUniversalButton() +{ + UpdateCustomizedColorFlag(); + if (buttonType_ == BUTTON_TYPE_ICON) { + PrepareIconButton(); + } else if (buttonType_ == BUTTON_TYPE_CAPSULE) { + PrepareCapsuleButton(); + } else if (buttonType_ == BUTTON_TYPE_TEXT) { + PrepareTextButton(); + } else if (buttonType_ == BUTTON_TYPE_CIRCLE) { + PrepareCircleButton(); + } else if (buttonType_ == BUTTON_TYPE_DOWNLOAD) { + PrepareDownloadButton(); + } else if (buttonType_ == BUTTON_TYPE_ARC) { + PrepareArcButton(); + } else { + PrepareDefaultButton(); + } +} + +void DOMButton::PrepareDefaultButton() +{ + paddingChild_->SetPadding(Edge()); + if (!heightDefined_) { + ResetBoxHeight(INIT_HEIGHT); + } + if (!imageChild_->GetSrc().empty()) { + if (textChild_->GetData().empty()) { + paddingChild_->SetChild(imageChild_); + return; + } + textStyle_.DisableAdaptTextSize(); + PrepareChildren(); + } +} + +void DOMButton::PrepareIconButton() +{ + buttonChild_->SetType(ButtonType::ICON); + buttonChild_->SetRectRadius(ICON_BUTTON_RADIUS); + paddingChild_->SetChild(imageChild_); + paddingChild_->SetPadding(Edge(ICON_BUTTON_PADDING)); + ResetBoxHeight(INIT_HEIGHT); +} + +void DOMButton::PrepareCapsuleButton() +{ + buttonChild_->SetType(ButtonType::CAPSULE); + if (!radiusDefined_) { + if (!NearZero(buttonChild_->GetHeight().Value())) { + buttonChild_->SetRectRadius(buttonChild_->GetHeight() / 2.0); + } + } else { + ResetBoxHeight(buttonChild_->GetRectRadius().Value() * 2.0, buttonChild_->GetRectRadius().Unit()); + } + if (isCustomizedColor_ && isTv_) { + buttonChild_->SetFocusColor(buttonChild_->GetBackgroundColor()); + textChild_->SetFocusColor(textStyle_.GetTextColor()); + } +} + +void DOMButton::PrepareTextButton() +{ + buttonChild_->SetType(ButtonType::TEXT); + if (!isCustomizedColor_) { + buttonChild_->SetBackgroundColor(Color(TRANSPARENT_COLOR)); + } + textStyle_.SetTextAlign(TextAlign::CENTER); + if (isTv_) { + textStyle_.SetAdaptTextSize(textStyle_.GetFontSize(), TEXT_FONT_MIN_SIZE); + paddingChild_->SetPadding(Edge(TEXT_PADDING_HORIZONTAL, TEXT_PADDING_VERTICAL, + TEXT_PADDING_HORIZONTAL, TEXT_PADDING_VERTICAL)); + if (!fontSizeDefined_) { + ResetBoxHeight(TEXT_FOCUS_HEIGHT, DimensionUnit::VP); + buttonChild_->SetRectRadius(Dimension(TEXT_FOCUS_HEIGHT / 2.0, DimensionUnit::VP)); + } + return; + } + if (isWatch_) { + if (!fontSizeDefined_) { + std::vector preferTextSizeGroups; + preferTextSizeGroups.push_back({ buttonTheme_->GetTextStyle().GetFontSize(), 1 }); + preferTextSizeGroups.push_back({ buttonTheme_->GetMinFontSize(), MAX_LINES, TextOverflow::ELLIPSIS }); + textStyle_.SetPreferTextSizeGroups(preferTextSizeGroups); + } + ResetBoxHeight(INIT_HEIGHT); + paddingChild_->SetPadding(Edge(WATCH_TEXT_PADDING)); + buttonChild_->SetRectRadius(WATCH_TEXT_RADIUS); + return; + } + if (!textColorDefined_) { + textStyle_.SetTextColor(buttonTheme_->GetNormalTextColor()); + } +} + +void DOMButton::PrepareCircleButton() +{ + buttonChild_->SetType(ButtonType::CIRCLE); + paddingChild_->SetPadding(Edge()); + if (!imageChild_->GetSrc().empty()) { + paddingChild_->SetChild(imageChild_); + } + if (isCustomizedColor_ && isTv_) { + buttonChild_->SetFocusColor(buttonChild_->GetBackgroundColor()); + } +} + +void DOMButton::PrepareDownloadButton() +{ + buttonChild_->SetType(ButtonType::DOWNLOAD); + if (!isWatch_) { + edge_.SetWidth(DOWNLOAD_BORDER_WIDTH); + buttonChild_->SetProgressColor(buttonTheme_->GetDownloadProgressColor()); + if (!isTv_) { + if (!radiusDefined_) { + buttonChild_->SetRectRadius(buttonTheme_->GetDownloadHeight() / 2.0); + } + if (!bgColorDefined_) { + buttonChild_->SetBackgroundColor(buttonTheme_->GetDownloadBackgroundColor()); + } + if (!textColorDefined_) { + textStyle_.SetTextColor(buttonTheme_->GetDownloadTextColor()); + } + if (!fontSizeDefined_) { + textStyle_.SetFontSize(buttonTheme_->GetDownloadFontSize()); + } + } + return; + } + if (!isCustomizedColor_) { + buttonChild_->SetBackgroundColor(Color(TRANSPARENT_COLOR)); + } + if (!imageChild_->GetSrc().empty()) { + paddingChild_->SetChild(imageChild_); + } + paddingChild_->SetPadding(Edge()); + buttonChild_->SetProgressDiameter(diameter_); + buttonChild_->SetProgressColor(progressColor_); + ResetBoxHeight(INIT_HEIGHT); +} + +void DOMButton::PrepareArcButton() +{ + buttonChild_->SetType(ButtonType::ARC); + textStyle_.SetAdaptTextSize(ARC_FONT_SIZE, ARC_FONT_MIN_SIZE); + paddingChild_->SetPadding(Edge(ARC_PADDING_HORIZONTAL, ARC_PADDING_TOP, + ARC_PADDING_HORIZONTAL, ARC_PADDING_BOTTOM)); +} + +void DOMButton::PrepareButtonState() +{ + UpdateCustomizedColorFlag(); + if (isWaiting_) { + PrepareWaiting(); + } else { + if (!textColorChanged_) { + textColor_ = textStyle_.GetTextColor(); + } + textStyle_.SetTextColor(textColor_); + if (focusColorChanged_) { + buttonChild_->SetFocusColor(focusColor_); + } + } + + if (buttonChild_->GetDisabledState()) { + if (HasDisabledPseudo()) { + buttonChild_->SetDisabledColor(buttonChild_->GetBackgroundColor()); + } else { + PrepareDisabledBackgroundColor(); + PrepareDisabledChildStyle(); + } + } +} + +void DOMButton::PrepareDisabledBackgroundColor() +{ + if (disabledColorEffected_) { + return; + } + edge_.SetColor(edge_.GetColor().BlendOpacity(blendOpacity_)); + if ((SystemProperties::GetDeviceType() == DeviceType::PHONE) && (buttonType_ == BUTTON_TYPE_DOWNLOAD)) { + buttonChild_->SetProgressColor(buttonChild_->GetProgressColor().BlendOpacity(blendOpacity_)); + } + + // Disabled background color not defined by user. + if (disabledColor_ == Color()) { + Color bgColor = buttonChild_->GetBackgroundColor(); + Color customizedColor = (isWatch_ ? bgColor : bgColor.BlendOpacity(blendOpacity_)); + buttonChild_->SetDisabledColor(isCustomizedColor_ ? customizedColor : buttonTheme_->GetDisabledColor()); + } else { + buttonChild_->SetDisabledColor(disabledColor_); + } + disabledColorEffected_ = true; +} + +void DOMButton::PrepareDisabledChildStyle() +{ + bool isWatchDownload = isWatch_ && (buttonType_ == BUTTON_TYPE_DOWNLOAD); + if ((buttonType_ == BUTTON_TYPE_CIRCLE) || isWatchDownload || isWaiting_) { + auto displayChild = AceType::MakeRefPtr(paddingChild_->GetChild()); + displayChild->SetOpacity(blendOpacity_); + paddingChild_->SetChild(displayChild); + return; + } + + // Disabled text color not defined by user. + if (disabledTextColor_ == Color()) { + Color textColor = textStyle_.GetTextColor().BlendOpacity(blendOpacity_); + textStyle_.SetTextColor(isCustomizedColor_ ? textColor : buttonTheme_->GetTextDisabledColor()); + } else { + textStyle_.SetTextColor(disabledTextColor_); + } + textColorChanged_ = true; +} + +void DOMButton::PrepareClickedColor() +{ + if (buttonChild_->GetClickedColor() != buttonTheme_->GetClickedColor()) { + return; + } + Color defaultClickedColor = buttonChild_->GetBackgroundColor().BlendColor(buttonTheme_->GetClickedColor()); + buttonChild_->SetClickedColor(defaultClickedColor); +} + +void DOMButton::PrepareWaiting() +{ + if ((!buttonTheme_) || isWatch_ || (buttonType_ == BUTTON_TYPE_DOWNLOAD)) { + return; + } + buttonChild_->SetWaitingState(true); + buttonChild_->SetFocusColor(focusColor_.BlendOpacity(blendOpacity_)); + buttonChild_->SetFocusAnimationColor(buttonTheme_->GetBgFocusColor().BlendOpacity(blendOpacity_)); + focusColorChanged_ = true; + if (buttonType_ == BUTTON_TYPE_CIRCLE) { + diameter_ = LessNotEqual(buttonChild_->GetWidth().Value(), 0.0) + ? buttonChild_->GetRectRadius() + : std::min(buttonChild_->GetHeight(), buttonChild_->GetWidth()) / 2.0; + } + auto progressComponent = AceType::MakeRefPtr(); + progressComponent->SetDiameter(diameter_); + progressComponent->SetProgressColor(progressColor_); + if ((buttonType_ == BUTTON_TYPE_CIRCLE) || (buttonType_ == BUTTON_TYPE_TEXT) || textChild_->GetData().empty()) { + paddingChild_->SetChild(progressComponent); + return; + } + PrepareWaitingWithText(progressComponent); +} + +void DOMButton::PrepareWaitingWithText(const RefPtr& progressComponent) +{ + if (!progressComponent) { + return; + } + if (!isCustomizedColor_) { + textStyle_.SetTextColor(buttonTheme_->GetTextWaitingColor()); + textColorChanged_ = true; + } + textStyle_.DisableAdaptTextSize(); + auto innerPadding = AceType::MakeRefPtr(); + Edge edge; + edge.SetLeft(innerLeftPadding_); + innerPadding->SetChild(textChild_); + innerPadding->SetPadding(edge); + auto flexItemProgress = AceType::MakeRefPtr(0.0, 0.0, 0.0, progressComponent); + auto flexItemText = AceType::MakeRefPtr(0.0, 0.0, 0.0, innerPadding); + flexItemText->SetFlexShrink(FLEX_ITEM_SHRINK); + std::list> children; + children.emplace_back(flexItemProgress); + children.emplace_back(flexItemText); + auto rowComponent = AceType::MakeRefPtr(FlexAlign::CENTER, FlexAlign::CENTER, children); + paddingChild_->SetChild(rowComponent); +} + +void DOMButton::PrepareBorderStyle() +{ + if (!isCustomizedColor_) { + return; + } + if ((buttonType_ == BUTTON_TYPE_CAPSULE) || (buttonType_ == BUTTON_TYPE_CIRCLE)) { + edge_.SetColor(buttonTheme_->GetBorderColor()); + edge_.SetWidth(buttonTheme_->GetBorderWidth()); + } +} + +void DOMButton::PrepareBackDecorationStyle() +{ + if (!backDecoration_) { + return; + } + if (backDecoration_->GetImage() || backDecoration_->GetGradient().IsValid()) { + buttonChild_->SetBackgroundColor(Color(TRANSPARENT_COLOR)); + } + if (buttonChild_->GetType() == ButtonType::CIRCLE) { + return; + } + auto border = backDecoration_->GetBorder(); + if (!HasBorderRadiusStyle() || radiusDefined_) { + backDecoration_->SetBorderRadius(Radius(buttonChild_->GetRectRadius() + border.Top().GetWidth())); + } else { + buttonChild_->SetRectRadius(border.TopLeftRadius().GetX() - border.Top().GetWidth()); + } +} + +void DOMButton::PrepareChildren() +{ + Edge edge; + if (placement_ == PLACEMENT_BOTTOM) { + edge.SetBottom(INNER_PADDING); + } else if (placement_ == PLACEMENT_TOP) { + edge.SetTop(INNER_PADDING); + } else if (placement_ == PLACEMENT_START) { + edge.SetLeft(INNER_PADDING); + } else { + edge.SetRight(INNER_PADDING); + edge.SetBottom(Dimension(1.0, DimensionUnit::PX)); + } + innerPaddingChild_ = AceType::MakeRefPtr(); + innerPaddingChild_->SetChild(textChild_); + innerPaddingChild_->SetPadding(edge); + PrepareChildrenLayout(); + +} + +void DOMButton::PrepareChildrenLayout() +{ + auto flexItemText = AceType::MakeRefPtr(0.0, 1.0, 0.0, innerPaddingChild_); + auto flexItemIcon = AceType::MakeRefPtr(0.0, 0.0, 0.0, imageChild_); + std::list> children; + if ((placement_ == PLACEMENT_START) || (placement_ == PLACEMENT_TOP)) { + children.emplace_back(flexItemIcon); + children.emplace_back(flexItemText); + } else { + children.emplace_back(flexItemText); + children.emplace_back(flexItemIcon); + } + auto flexComponent = AceType::MakeRefPtr(FlexDirection::ROW, FlexAlign::CENTER, + FlexAlign::CENTER, children); + if ((placement_ == PLACEMENT_TOP) || (placement_ == PLACEMENT_BOTTOM)) { + flexComponent->SetDirection(FlexDirection::COLUMN); + } + flexComponent->SetMainAxisSize(MainAxisSize::MIN); + paddingChild_->SetChild(flexComponent); +} + +void DOMButton::AddPadding() +{ + RefPtr boxComponent = GetBoxComponent(); + if (!boxComponent) { + return; + } + auto edge = boxComponent->GetPadding(); + if (edge == Edge::NONE) { + return; + } + paddingChild_->SetPadding(edge); + boxComponent->SetPadding(Edge()); +} + +void DOMButton::ResetBoxHeight(double height, DimensionUnit unit) +{ + if (!boxComponent_) { + return; + } + boxComponent_->SetHeight(height, unit); +} + +void DOMButton::UpdateCustomizedColorFlag() +{ + isCustomizedColor_ = buttonChild_->GetBackgroundColor() != buttonTheme_->GetBgColor(); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_button.h b/frameworks/bridge/common/dom/dom_button.h new file mode 100644 index 00000000..566fd576 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_button.h @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_BUTTON_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_BUTTON_H + +#include "core/components/button/button_component.h" +#include "core/components/button/button_theme.h" +#include "core/components/image/image_component.h" +#include "core/components/padding/padding_component.h" +#include "core/components/text/text_component.h" +#include "frameworks/bridge/common/dom/dom_node.h" +#include "frameworks/bridge/common/dom/dom_type.h" + +namespace OHOS::Ace::Framework { + +class DOMButton final : public DOMNode { + DECLARE_ACE_TYPE(DOMButton, DOMNode); + +public: + DOMButton(NodeId nodeId, const std::string& nodeName); + ~DOMButton() override = default; + + void InitializeStyle() override; + + void CallSpecializedMethod(const std::string& method, const std::string& args) override; + + RefPtr GetSpecializedComponent() override + { + return buttonChild_; + } + +protected: + bool SetSpecializedAttr(const std::pair& attr) override; + bool SetSpecializedStyle(const std::pair& style) override; + bool AddSpecializedEvent(int32_t pageId, const std::string& event) override; + void PrepareSpecializedComponent() override; + void ResetInitializedStyle() override; + +private: + void InitButtonStyle(); + void InitTextStyle(); + void PrepareBoxSize(); + void PreparePseudoStyle(); + void PrepareUniversalButton(); + void PrepareDefaultButton(); + void PrepareIconButton(); + void PrepareCapsuleButton(); + void PrepareTextButton(); + void PrepareCircleButton(); + void PrepareDownloadButton(); + void PrepareArcButton(); + void PrepareButtonState(); + void PrepareDisabledBackgroundColor(); + void PrepareDisabledChildStyle(); + void PrepareClickedColor(); + void PrepareWaiting(); + void PrepareWaitingWithText(const RefPtr& progressComponent); + void PrepareBorderStyle(); + void PrepareBackDecorationStyle(); + void PrepareChildren(); + void PrepareChildrenLayout(); + void AddPadding(); + void ResetBoxHeight(double height, DimensionUnit unit = DimensionUnit::PX); + void UpdateCustomizedColorFlag(); + + RefPtr buttonChild_; + RefPtr textChild_; + RefPtr paddingChild_; + RefPtr imageChild_; + RefPtr buttonTheme_; + RefPtr backDecoration_; + RefPtr innerPaddingChild_; + + std::string buttonType_; + std::string placement_; + BorderEdge edge_; + TextStyle textStyle_; + Color focusColor_; + Color progressColor_; + Color disabledColor_; + Color textColor_; + Color disabledTextColor_; + Dimension innerLeftPadding_; + Dimension diameter_; + double blendOpacity_ = 0.0; + bool isWaiting_ = false; + bool focusColorChanged_ = false; + bool textColorChanged_ = false; + bool isWatch_ = false; + bool isTv_ = false; + bool isCustomizedColor_ = false; + bool fontSizeDefined_ = false; + bool heightDefined_ = false; + bool disabledColorEffected_ = false; + bool textColorDefined_ = false; + bool bgColorDefined_ = false; + bool radiusDefined_ = false; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_BUTTON_H diff --git a/frameworks/bridge/common/dom/dom_calendar.cpp b/frameworks/bridge/common/dom/dom_calendar.cpp new file mode 100644 index 00000000..ef87a360 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_calendar.cpp @@ -0,0 +1,193 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_calendar.h" + +#include "base/utils/string_utils.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +namespace { + +constexpr uint32_t METHOD_GO_TO_ARGS_SIZE = 1; +const char GO_TO_ARG_KEY_YEAR[] = "year"; +const char GO_TO_ARG_KEY_MONTH[] = "month"; +const char GO_TO_ARG_KEY_DAY[] = "day"; + +} // namespace + +DomCalendar::DomCalendar(NodeId nodeId, const std::string& nodeName) + : DOMNode(nodeId, nodeName), + calendarComponent_(AceType::MakeRefPtr(std::to_string(nodeId), nodeName)) +{ + if (IsRightToLeft()) { + calendarComponent_->SetTextDirection(TextDirection::RTL); + } +} + +bool DomCalendar::SetSpecializedAttr(const std::pair& attr) +{ + static const LinearMapNode calendarAttrOperators[] = { + { DOM_CALENDAR_DATA, + [](const std::string& value, DomCalendar& calendar) { + calendar.calendarComponent_->SetCalendarData(value); + return true; + } }, + { DOM_CALENDAR_CARD_CALENDAR, + [](const std::string& value, DomCalendar& calendar) { + calendar.calendarComponent_->SetCardCalendar(StringToBool(value)); + return true; + } }, + { DOM_CALENDAR_DATE, + [](const std::string& value, DomCalendar& calendar) { + CalendarDay day; + auto isLegal = StringUtils::StringToCalendarDay(value, day); + if (isLegal) { + calendar.calendarComponent_->SetCalendarDate(day); + return true; + } + return false; + } }, + { DOM_CALENDAR_DATE_ADAPTER, + [](const std::string& value, DomCalendar& calendar) { + return calendar.ParseDataAdapter(value); + } }, + { DOM_CALENDAR_OFF_DAYS, + [](const std::string& value, DomCalendar& calendar) { + calendar.calendarComponent_->SetOffDays(value); + return true; + } }, + { DOM_CALENDAR_SHOW_HOLIDAY, + [](const std::string& value, DomCalendar& calendar) { + calendar.calendarComponent_->SetShowHoliday(StringToBool(value)); + return true; + } }, + { DOM_CALENDAR_SHOW_LUNAR, + [](const std::string& value, DomCalendar& calendar) { + calendar.calendarComponent_->SetShowLunar(StringToBool(value)); + return true; + } }, + { DOM_CALENDAR_START_DAY_OF_WEEK, + [](const std::string& value, DomCalendar& calendar) { + auto indexOfWeek = StringToInt(value); + if (0 <= indexOfWeek && indexOfWeek < 7) { + calendar.calendarComponent_->SetStartDayOfWeek(indexOfWeek); + return true; + } + return false; + } }, + { DOM_VERTICAL, + [](const std::string& value, DomCalendar& calendar) { + calendar.calendarComponent_->SetAxis(StringToBool(value) ? Axis::VERTICAL : Axis::HORIZONTAL); + return true; + } }, + }; + auto operatorIter = + BinarySearchFindIndex(calendarAttrOperators, ArraySize(calendarAttrOperators), attr.first.c_str()); + if (operatorIter != -1) { + return calendarAttrOperators[operatorIter].value(attr.second, *this); + } + return false; +} + +void DomCalendar::CallSpecializedMethod(const std::string& method, const std::string& args) +{ + if (method == DOM_CALENDAR_METHOD_GO_TO) { + HandleGoTo(args); + } +} + +bool DomCalendar::AddSpecializedEvent(int32_t pageId, const std::string& event) +{ + if (event == DOM_CALENDAR_EVENT_SELECTED_CHANGE) { + selectedChangeEvent_ = EventMarker(GetNodeIdForEvent(), event, pageId); + calendarComponent_->SetSelectedChangeEvent(selectedChangeEvent_); + return true; + } else if (event == DOM_CALENDAR_EVENT_REQUEST_DATA) { + requestDataEvent_ = EventMarker(GetNodeIdForEvent(), event, pageId); + calendarComponent_->SetRequestDataEvent(requestDataEvent_); + return true; + } + return false; +} + +bool DomCalendar::ParseDataAdapter(const std::string& value) +{ + std::unique_ptr dataAdapterValue = JsonUtil::ParseJsonString(value); + if (!dataAdapterValue) { + LOGE("data adapter format is error"); + return false; + } + std::unique_ptr bundleNameValue = dataAdapterValue->GetValue("bundleName"); + if (!bundleNameValue || !bundleNameValue->IsString()) { + LOGE("get bundleName failed"); + return false; + } + std::unique_ptr abilityNameValue = dataAdapterValue->GetValue("abilityName"); + if (!abilityNameValue || !abilityNameValue->IsString()) { + LOGE("get abilityName failed"); + return false; + } + std::unique_ptr messageCodeValue = dataAdapterValue->GetValue("messageCode"); + if (!messageCodeValue || !messageCodeValue->IsNumber()) { + LOGE("get messageCode failed"); + return false; + } + std::string bundleName = bundleNameValue->GetString(); + std::string abilityName = abilityNameValue->GetString(); + int32_t messageCode = messageCodeValue->GetInt(); + CalendarDataAdapterAction dataAdapterAction { + { .bundleName = bundleName, .abilityName = abilityName, .messageCode = messageCode } + }; + calendarComponent_->SetDataAdapterAction(dataAdapterAction); + return true; +} + +void DomCalendar::HandleGoTo(const std::string& args) +{ + std::unique_ptr argsValue = JsonUtil::ParseJsonString(args); + if (!argsValue || !argsValue->IsArray() || argsValue->GetArraySize() != METHOD_GO_TO_ARGS_SIZE) { + LOGE("parse args error: %{private}s", args.c_str()); + return; + } + auto gotoArg = argsValue->GetArrayItem(0); + if (!gotoArg || !gotoArg->Contains(GO_TO_ARG_KEY_YEAR) || !gotoArg->Contains(GO_TO_ARG_KEY_MONTH)) { + LOGE("calendar goto arg no year or month"); + return; + } + + std::unique_ptr yearValue = gotoArg->GetValue(GO_TO_ARG_KEY_YEAR); + if (!yearValue || !yearValue->IsNumber()) { + LOGE("get year failed"); + return; + } + + std::unique_ptr monthValue = gotoArg->GetValue(GO_TO_ARG_KEY_MONTH); + if (!monthValue || !monthValue->IsNumber()) { + LOGE("get month failed"); + return; + } + int32_t year = yearValue->GetInt(); + int32_t month = monthValue->GetInt(); + // default selected first day of month + int32_t day = -1; + + std::unique_ptr dayValue = gotoArg->GetValue(GO_TO_ARG_KEY_DAY); + if (dayValue && dayValue->IsNumber()) { + day = dayValue->GetInt(); + } + calendarComponent_->GoTo(year, month, day); +} +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_calendar.h b/frameworks/bridge/common/dom/dom_calendar.h new file mode 100644 index 00000000..2598eddf --- /dev/null +++ b/frameworks/bridge/common/dom/dom_calendar.h @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_CALENDAR_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_CALENDAR_H + +#include "core/components/calendar/calendar_component.h" +#include "frameworks/bridge/common/dom/dom_node.h" + +namespace OHOS::Ace::Framework { + +class DomCalendar : public DOMNode { + DECLARE_ACE_TYPE(DomCalendar, DOMNode); + +public: + DomCalendar(NodeId nodeId, const std::string& nodeName); + ~DomCalendar() override = default; + + RefPtr GetSpecializedComponent() override + { + return calendarComponent_; + } + +protected: + bool SetSpecializedAttr(const std::pair& attr) override; + void CallSpecializedMethod(const std::string& method, const std::string& args) override; + bool AddSpecializedEvent(int32_t pageId, const std::string& event) override; + +private: + bool ParseDataAdapter(const std::string& value); + void HandleGoTo(const std::string& args); + + EventMarker selectedChangeEvent_; + EventMarker requestDataEvent_; + RefPtr calendarComponent_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_CALENDAR_H diff --git a/frameworks/bridge/common/dom/dom_camera.cpp b/frameworks/bridge/common/dom/dom_camera.cpp new file mode 100644 index 00000000..2de5050e --- /dev/null +++ b/frameworks/bridge/common/dom/dom_camera.cpp @@ -0,0 +1,181 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_camera.h" + +#include "frameworks/bridge/common/dom/dom_type.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +namespace { + +const char CALLBACK_SUCCESS[] = "success"; +const char CALLBACK_FAIL[] = "fail"; +const char CALLBACK_COMPLETE[] = "complete"; +const char QUALITY[] = "quality"; +const char DEVICE_POSITION_FRONT[] = "front"; +const char FLUSH_ON[] = "on"; +const char FLUSH_OFF[] = "off"; +const char FLUSH_TORCH[] = "torch"; +const char FLUSH_AUTO[] = "auto"; +const char START_STR[] = "[\""; + +} // namespace + +DOMCamera::DOMCamera(NodeId nodeId, const std::string& nodeName) : DOMNode(nodeId, nodeName) +{ + cameraComponent_ = AceType::MakeRefPtr(); + cameraComponent_->SetFit(ImageFit::FILL); +} + +bool DOMCamera::SetSpecializedAttr(const std::pair& attr) +{ + // Operator map for attr + static const std::unordered_map&, const std::string&)> + attrOperators = { + { DOM_CAMERA_FLASH, + [](const RefPtr& cameraComponent, const std::string& val) { + cameraComponent->SetFlash(GetFlashType(val)); + } }, + { DOM_CAMERA_DEVICE_POSITION, + [](const RefPtr& cameraComponent, const std::string& val) { + cameraComponent->SetDevicePosition(GetDevicePosition(val)); + } }, + }; + auto operatorIter = attrOperators.find(attr.first); + if (operatorIter != attrOperators.end()) { + operatorIter->second(cameraComponent_, attr.second); + return true; + } + return false; +} + +bool DOMCamera::AddSpecializedEvent(int32_t pageId, const std::string& event) +{ + // Operator map for event + static const std::unordered_map&, const EventMarker&)> + eventOperators = { + { DOM_ERROR, + [](const RefPtr& cameraComponent, const EventMarker& event) { + cameraComponent->SetErrorEventId(event); + } }, + }; + auto operatorIter = eventOperators.find(event); + if (operatorIter != eventOperators.end()) { + operatorIter->second(cameraComponent_, EventMarker(GetNodeIdForEvent(), event, pageId)); + return true; + } + return false; +} + +void DOMCamera::CallSpecializedMethod(const std::string& method, const std::string& args) +{ + if (method == DOM_TAKE_PHOTO) { + auto controller = cameraComponent_->GetCameraController(); + if (controller) { + controller->TakePhoto(GetParamFromJson(args)); + } + } + + if (method == DOM_CAMERA_START_RECORD) { + auto controller = cameraComponent_->GetCameraController(); + if (controller) { + controller->StartRecord(); + } + } + + if (method == DOM_CAMERA_CLOSE_RECORDER) { + auto controller = cameraComponent_->GetCameraController(); + if (controller) { + controller->CloseRecorder(GetRecorderParam(args)); + } + } +} + +TakePhotoParams DOMCamera::GetParamFromJson(const std::string& args) const +{ + std::unique_ptr argsValue = JsonUtil::ParseJsonString(args); + + TakePhotoParams takePhotoParams; + if (!argsValue || !argsValue->IsArray() || argsValue->GetArraySize() == 0) { + LOGE("parse args error"); + return takePhotoParams; + } + std::unique_ptr firstItem = argsValue->GetArrayItem(0); + std::string quality = firstItem->GetString(QUALITY); + if (!quality.empty()) { + takePhotoParams.quality = quality; + } + + std::string successId = firstItem->GetString(CALLBACK_SUCCESS); + if (!successId.empty()) { + takePhotoParams.success = successId; + } + + std::string failId = firstItem->GetString(CALLBACK_FAIL); + if (!failId.empty()) { + takePhotoParams.fail = failId; + } + + std::string completeId = firstItem->GetString(CALLBACK_COMPLETE); + if (!completeId.empty()) { + takePhotoParams.complete = completeId; + } + + return takePhotoParams; +} + +std::string DOMCamera::GetRecorderParam(const std::string& args) const +{ + size_t len = args.length(); + size_t pos = args.find(START_STR); + size_t strLen = sizeof(START_STR) - 1; + int32_t result = 0; + + if (pos == std::string::npos || (pos + strLen) >= len) { + return std::string(); + } + std::stringstream ss; + ss << args.substr(pos + strLen); + ss >> result; + + return std::to_string(result); +} + +FlashType DOMCamera::GetFlashType(const std::string& val) +{ + static const std::unordered_map flashTypes = { + { FLUSH_ON, FlashType::ON }, + { FLUSH_OFF, FlashType::OFF }, + { FLUSH_TORCH, FlashType::TORCH }, + { FLUSH_AUTO, FlashType::AUTO }, + }; + auto operatorIter = flashTypes.find(val); + if (operatorIter != flashTypes.end()) { + return operatorIter->second; + } + return FlashType::AUTO; +} + +DevicePosition DOMCamera::GetDevicePosition(const std::string& val) +{ + if (val == DEVICE_POSITION_FRONT) { + return DevicePosition::CAMERA_FACING_FRONT; + } else { + return DevicePosition::CAMERA_FACING_BACK; + } +} + +} // namespace OHOS::Ace::Framework \ No newline at end of file diff --git a/frameworks/bridge/common/dom/dom_camera.h b/frameworks/bridge/common/dom/dom_camera.h new file mode 100644 index 00000000..b3bbbf2b --- /dev/null +++ b/frameworks/bridge/common/dom/dom_camera.h @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_CAMERA_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_CAMERA_H + +#include "core/components/camera/camera_component.h" +#include "frameworks/bridge/common/dom/dom_node.h" + +namespace OHOS::Ace::Framework { + +class DOMCamera final : public DOMNode { + DECLARE_ACE_TYPE(DOMCamera, DOMNode); + +public: + DOMCamera(NodeId nodeId, const std::string& nodeName); + ~DOMCamera() override = default; + + RefPtr GetSpecializedComponent() override + { + return cameraComponent_; + } + +protected: + bool SetSpecializedAttr(const std::pair& attr) override; + bool AddSpecializedEvent(int32_t pageId, const std::string& event) override; + void CallSpecializedMethod(const std::string& method, const std::string& args) override; + + TakePhotoParams GetParamFromJson(const std::string& args) const; + std::string GetRecorderParam(const std::string& args) const; + + static FlashType GetFlashType(const std::string& val); + static DevicePosition GetDevicePosition(const std::string& val); + +private: + RefPtr cameraComponent_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_CAMERA_H \ No newline at end of file diff --git a/frameworks/bridge/common/dom/dom_canvas.cpp b/frameworks/bridge/common/dom/dom_canvas.cpp new file mode 100644 index 00000000..538bce93 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_canvas.cpp @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_canvas.h" + +#include "base/utils/string_utils.h" +#include "frameworks/bridge/common/dom/dom_type.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +namespace { + +constexpr Dimension DEFAULT_WIDTH = 300.0_px; +constexpr Dimension DEFAULT_HEIGHT = 150.0_px; + +} // namespace + +DOMCanvas::DOMCanvas(NodeId nodeId, const std::string& nodeName) : DOMNode(nodeId, nodeName) +{ + paintChild_ = AceType::MakeRefPtr(); + if (IsRightToLeft()) { + paintChild_->SetTextDirection(TextDirection::RTL); + } + ResetInitializedStyle(); +} + +void DOMCanvas::ResetInitializedStyle() +{ + SetWidth(DEFAULT_WIDTH); + SetHeight(DEFAULT_HEIGHT); + boxComponent_->SetWidth(DEFAULT_WIDTH.Value(), DEFAULT_WIDTH.Unit()); + boxComponent_->SetHeight(DEFAULT_HEIGHT.Value(), DEFAULT_HEIGHT.Unit()); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_canvas.h b/frameworks/bridge/common/dom/dom_canvas.h new file mode 100644 index 00000000..2f87cff0 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_canvas.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_CANVAS_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_CANVAS_H + +#include "core/components/custom_paint/custom_paint_component.h" +#include "frameworks/bridge/common/dom/dom_node.h" + +namespace OHOS::Ace::Framework { + +class DOMCanvas : public DOMNode { + DECLARE_ACE_TYPE(DOMCanvas, DOMNode); + +public: + DOMCanvas(NodeId nodeId, const std::string& nodeName); + ~DOMCanvas() override = default; + + RefPtr GetSpecializedComponent() override + { + return paintChild_; + } + +protected: + void ResetInitializedStyle() override; + +private: + RefPtr paintChild_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_CANVAS_H diff --git a/frameworks/bridge/common/dom/dom_chart.cpp b/frameworks/bridge/common/dom/dom_chart.cpp new file mode 100644 index 00000000..981ee107 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_chart.cpp @@ -0,0 +1,499 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_chart.h" + +#include "frameworks/bridge/common/utils/utils.h" + +#include "base/utils/linear_map.h" +#include "base/utils/string_utils.h" +#include "base/utils/utils.h" +#include "core/components/common/properties/color_factory.h" + +namespace OHOS::Ace::Framework { +namespace { + +const char LIGHT_RED_COLOR[] = "#EB4034"; +const char LIGHT_GREEN_COLOR[] = "#AEEB34"; +const char LIGHT_BLUE_COLOR[] = "#34EBD9"; +constexpr double PROGRESS_DEFAULT_MAX_VALUE = 100.0; +constexpr uint32_t METHOD_APPEND_ARGS_SIZE = 1; + +} // namespace + +RefPtr DOMChart::GetSpecializedComponent() +{ + if (chartType_ == ChartType::BAR || chartType_ == ChartType::LINE) { + return chartChild_; + } + if (chartType_ == ChartType::GAUGE) { + return progressChild_; + } + return dataPanelChild_; +} + +DOMChart::DOMChart(NodeId nodeId, const std::string& nodeName) : DOMNode(nodeId, nodeName) {} + +void DOMChart::SetChartAttrOptions(const ChartOptions& chartOptions) +{ + chartOptions_ = chartOptions; +} + +void DOMChart::SetChartAttrDatasets(const std::vector& datasets) +{ + chartDatasets_ = datasets; +} + +void DOMChart::SetChartAttrSegments(const std::vector& segments) +{ + segments_ = segments; +} + +bool DOMChart::SetSpecializedAttr(const std::pair& attr) +{ + // this map should be sorted by key. + static const LinearMapNode chartAttrsOperators[] = { + { DOM_AUTO_SCALE, + [](const std::string& val, DOMChart& chart) { + chart.autoScale_ = StringToBool(val); + } }, + { DOM_EFFECTS_ON, + [](const std::string& val, DOMChart& chart) { + chart.showEffect_ = StringToBool(val); + } }, + { DOM_PROGRESS_PERCENT, + [](const std::string& val, DOMChart& chart) { + chart.percent_ = StringToDouble(val); + if (chart.percent_ > chart.max_) { + chart.percent_ = chart.max_; + } + if (chart.percent_ < chart.min_) { + chart.percent_ = chart.min_; + } + } }, + { DOM_CHART_TYPE, + [](const std::string& val, DOMChart& chart) { + if (val == DOM_CHART_TYPE_GAUGE) { + chart.chartType_ = ChartType::GAUGE; + } else if (val == DOM_CHART_TYPE_BAR) { + chart.chartType_ = ChartType::BAR; + } else if (val == DOM_CHART_TYPE_LINE) { + chart.chartType_ = ChartType::LINE; + } else if (val == DOM_CHART_TYPE_PROGRESS) { + chart.chartType_ = ChartType::PROGRESS; + } else if (val == DOM_CHART_TYPE_RAINBOW) { + chart.chartType_ = ChartType::RAINBOW; + } else if (val == DOM_CHART_TYPE_LOADING) { + chart.chartType_ = ChartType::LOADING; + } else { + LOGI("chart type error %{public}s, now using loading", val.c_str()); + chart.chartType_ = ChartType::LINE; + } + } }, + }; + auto operatorIter = BinarySearchFindIndex(chartAttrsOperators, ArraySize(chartAttrsOperators), attr.first.c_str()); + if (operatorIter != -1) { + chartAttrsOperators[operatorIter].value(attr.second, *this); + return true; + } + return false; +} + +bool DOMChart::SetSpecializedStyle(const std::pair& style) +{ + // this map should be sorted by key. + static const LinearMapNode chartStylesOperators[] = { + { DOM_BACKGROUND_COLOR, + [](const std::string& val, DOMChart& chart) { + chart.backgroundColor_ = Color::FromString(val); + chart.trackColorSet_ = true; + } }, + { DOM_CENTER_X, + [](const std::string& val, DOMChart& chart) { + chart.centerX_.first = StringToDouble(val); + chart.centerX_.second = true; + } }, + { DOM_CENTER_Y, + [](const std::string& val, DOMChart& chart) { + chart.centerY_.first = StringToDouble(val); + chart.centerY_.second = true; + } }, + { DOM_COLORS_ARRAY, + [](const std::string& val, DOMChart& chart) { + chart.colors_.clear(); + StringUtils::StringSpliter(val, ',', chart.colors_); + } }, + { DOM_TEXT_FONT_FAMILY, + [](const std::string& val, DOMChart& chart) { + chart.fontFamily_ = ConvertStrToFontFamilies(val); + } }, + { DOM_TEXT_FONT_SIZE, + [](const std::string& val, DOMChart& chart) { + chart.textSize_ = StringToDouble(val); + } }, + { DOM_PROGRESS_RADIUS, + [](const std::string& val, DOMChart& chart) { + chart.radius_.first = StringToDouble(val); + chart.radius_.second = true; + } }, + { DOM_START_DEGREE, + [](const std::string& val, DOMChart& chart) { + chart.startAngle_.first = StringToDouble(val); + chart.startAngle_.second = true; + } }, + { DOM_PROGRESS_STROKE_WIDTH, + [](const std::string& val, DOMChart& chart) { + chart.strokeWidth_.first = chart.ParseDimension(val); + chart.strokeWidth_.second = true; + } }, + { DOM_SWEEP_DEGREE, + [](const std::string& val, DOMChart& chart) { + chart.totalAngle_.first = StringToDouble(val); + chart.totalAngle_.second = true; + } }, + { DOM_WEIGHTS_ARRAY, + [](const std::string& val, DOMChart& chart) { + chart.weights_.clear(); + StringUtils::StringSpliter(val, ',', chart.weights_); + } }, + }; + auto operatorIter = + BinarySearchFindIndex(chartStylesOperators, ArraySize(chartStylesOperators), style.first.c_str()); + if (operatorIter != -1) { + chartStylesOperators[operatorIter].value(style.second, *this); + return true; + } + return false; +} + +void DOMChart::OnSetStyleFinished() +{ + // colors or weight are illegal, and set default color and weight + if (colors_.empty() || weights_.empty() || colors_.size() != weights_.size()) { + colors_.push_back(ParseColor(LIGHT_RED_COLOR)); + colors_.push_back(ParseColor(LIGHT_GREEN_COLOR)); + colors_.push_back(ParseColor(LIGHT_BLUE_COLOR)); + // equally seprate the range + weights_.push_back(1); + weights_.push_back(1); + weights_.push_back(1); + } + if (!centerY_.second || !centerX_.second || !radius_.second) { + centerY_.first = -1.0; + centerX_.first = -1.0; + radius_.first = -1.0; + centerY_.second = false; + centerX_.second = false; + radius_.second = false; + } +} + +// Sets other properties of a point, except coordinates. +void DOMChart::SetPoint(PointInfo& pointInfo, PointInfo getPointInfo) +{ + pointInfo.SetFillColor(getPointInfo.GetFillColor()); + pointInfo.SetStrokeColor(getPointInfo.GetStrokeColor()); + pointInfo.SetPointStrokeWidth(getPointInfo.GetPointStrokeWidth()); + pointInfo.SetPointSize(getPointInfo.GetPointSize()); + pointInfo.SetPointShape(getPointInfo.GetPointShape()); + pointInfo.SetDisplay(getPointInfo.GetDisplay()); +} + +void DOMChart::SetChart(MainChart& chartDataset) +{ + chartDataset.SetLineWidth(chartOptions_.GetLineWidth()); + chartDataset.SetSmoothFlag(chartOptions_.GetSmoothFlag()); + chartDataset.SetLineGradient(chartOptions_.GetLineGradient()); + chartDataset.SetErasePointNumber(chartOptions_.GetErasePointNumber()); + chartDataset.SetTextSize(textSize_); + chartDataset.SetFontFamily(fontFamily_); + + // remove points out of range. get topPoint and bottomPoint. + auto points = chartDataset.GetData(); + if (points.empty()) { + LOGD("points is empty, chart has no data to set."); + return; + } + sort(points.begin(), points.end(), + [](LineInfo a, LineInfo b) { return a.GetPointInfo().GetX() < b.GetPointInfo().GetX(); }); + + PointInfo headPoint; + PointInfo topPoint = points.begin()->GetPointInfo(); + PointInfo bottomPoint = points.begin()->GetPointInfo(); + + for (auto pointInfo = points.begin(); pointInfo != points.end();) { + auto point = pointInfo->GetPointInfo(); + auto segment = pointInfo->GetSegmentInfo(); + if (segment.GetSegmentColor() == Color::TRANSPARENT) { + segment.SetSegmentColor(chartDataset.GetStrokeColor()); + pointInfo->SetSegmentInfo(segment); + } + if ((chartType_ == ChartType::LINE && point.GetX() < chartOptions_.GetXAxis().min) || + (chartType_ == ChartType::LINE && point.GetX() > chartOptions_.GetXAxis().max) || + point.GetY() < chartOptions_.GetYAxis().min || point.GetY() > chartOptions_.GetYAxis().max) { + points.erase(pointInfo); + } else { + if (point.GetY() > topPoint.GetY()) { + topPoint = point; + } + if (point.GetY() < bottomPoint.GetY()) { + bottomPoint = point; + } + ++pointInfo; + } + } + chartDataset.SetData(points); + + if (!points.empty()) { + headPoint = points[points.size() - 1].GetPointInfo(); + SetPoint(headPoint, chartOptions_.GetHeadPoint()); + chartDataset.SetHeadPoint(headPoint); + } + + SetPoint(topPoint, chartOptions_.GetTopPoint()); + chartDataset.SetTopPoint(topPoint); + + SetPoint(bottomPoint, chartOptions_.GetBottomPoint()); + chartDataset.SetBottomPoint(bottomPoint); +} + +void DOMChart::PrepareSpecializedComponent() +{ + if (chartType_ == ChartType::GAUGE) { + if (!progressChild_) { + progressChild_ = + AceType::MakeRefPtr(0.0, 0.0, 0.0, PROGRESS_DEFAULT_MAX_VALUE, ProgressType::GAUGE); + } + progressChild_->SetValue(percent_); + progressChild_->SetMaxValue(max_); + progressChild_->SetMinValue(min_); + progressChild_->GetTrack()->SetIndicatorFlag(true); + progressChild_->GetTrack()->SetSectionsStyle(colors_, weights_); + progressChild_->GetTrack()->SetTrackThickness(strokeWidth_.first); + progressChild_->GetTrack()->GetTrackInfo()->SetStartDegree(startAngle_.first); + progressChild_->GetTrack()->GetTrackInfo()->SetSweepDegree(totalAngle_.first); + progressChild_->GetTrack()->SetCenterX(centerX_.first); + progressChild_->GetTrack()->SetCenterY(centerY_.first); + progressChild_->GetTrack()->SetRadius(radius_.first); + } else if (chartType_ == ChartType::BAR || chartType_ == ChartType::LINE) { + if (!chartChild_) { + chartChild_ = AceType::MakeRefPtr(chartType_); + } + chartChild_->SetHorizontalOption(chartOptions_.GetXAxis()); + chartChild_->SetVerticalOption(chartOptions_.GetYAxis()); + // Convert the data in options to mainchart + for (auto& charDataset : chartDatasets_) { + SetChart(charDataset); + } + chartChild_->SetMainCharts(chartDatasets_); + } else if (chartType_ == ChartType::PROGRESS || chartType_ == ChartType::LOADING) { + dataPanelChild_ = AceType::MakeRefPtr(chartType_); + dataPanelChild_->InitalStyle(GetThemeManager()); + dataPanelChild_->SetEffects(showEffect_); + if (trackColorSet_) { + dataPanelChild_->SetTrackColor(backgroundColor_); + } + dataPanelChild_->SetAutoScale(autoScale_); + if (segments_.empty()) { + LOGI("progress chart hasn't set segment"); + return; + } + auto progressDataPanel = AceType::DynamicCast(dataPanelChild_); + if (segments_[0].GetColorType() == SegmentStyleType::USE_COLOR) { + progressDataPanel->SetStartColor(segments_[0].GetStartColor()); + progressDataPanel->SetEndColor(segments_[0].GetEndColor()); + } else if (segments_[0].GetColorType() == SegmentStyleType::USE_GRADIENT) { + auto& colorManager = ColorFactory::GetInstance(); + auto colorPair = colorManager.GetColorTuple(segments_[0].GetColorDescriptor()); + progressDataPanel->SetStartColor(colorPair.first); + progressDataPanel->SetEndColor(colorPair.second); + } + // for else case, keep default color + progressDataPanel->SetProgressValue(segments_[0].GetValue()); + if (strokeWidth_.second) { + dataPanelChild_->SetThickness(strokeWidth_.first); + } + } else if (chartType_ == ChartType::RAINBOW) { + dataPanelChild_ = AceType::MakeRefPtr(chartType_); + dataPanelChild_->SetEffects(showEffect_); + dataPanelChild_->SetAutoScale(autoScale_); + auto percentageDataPanel = AceType::DynamicCast(dataPanelChild_); + // the angle range is from 0 to 360. + percentageDataPanel->SetStartDegree(startAngle_.second ? startAngle_.first : 0.0); + percentageDataPanel->SetSweepDegree(totalAngle_.second ? totalAngle_.first : 360.0); + percentageDataPanel->ClearSegment(); + if (segments_.empty()) { + LOGI("progress chart hasn't set segment"); + return; + } + for (const auto& segment : segments_) { + percentageDataPanel->AppendSegment(segment); + } + dataPanelChild_->InitalStyle(GetThemeManager()); + if (trackColorSet_) { + dataPanelChild_->SetTrackColor(backgroundColor_); + } + if (strokeWidth_.second) { + dataPanelChild_->SetThickness(strokeWidth_.first); + } + } +} + +void DOMChart::CallSpecializedMethod(const std::string& method, const std::string& args) +{ + if (method != DOM_METHOD_APPEND) { + LOGD("Not support method %{private}s yet!", method.c_str()); + return; + } + std::unique_ptr argsValue = JsonUtil::ParseJsonString(args); + if (!argsValue || !argsValue->IsArray() || argsValue->GetArraySize() != METHOD_APPEND_ARGS_SIZE) { + LOGE("parse args error"); + return; + } + + std::unique_ptr serialValue = argsValue->GetArrayItem(0)->GetValue("serial"); + if (!serialValue || !serialValue->IsNumber()) { + LOGE("get serial failed"); + return; + } + seriesNum_ = serialValue->GetInt(); + + std::unique_ptr dataValue = argsValue->GetArrayItem(0)->GetValue("data"); + if (!dataValue || !dataValue->IsArray()) { + LOGE("get data failed"); + return; + } + int32_t arraySize = dataValue->GetArraySize(); + auto chartDatas = chartChild_->GetMainCharts(); + + if (seriesNum_ < 0 || (static_cast(seriesNum_) >= chartDatas.size())) { + LOGE("series number is greater or equal to the size of chart"); + return; + } + + if (!isSetFirst_) { + isSetFirst_ = true; + for (int32_t i = 0; i < static_cast(chartDatas.size()); i++) { + lineData_.emplace_back(chartOptions_.GetXAxis().min, false); + } + } + + // get the head point position of the series data to be updated. + position_ = lineData_[seriesNum_].first; + isResetPosition_ = lineData_[seriesNum_].second; + + for (int32_t i = 0; i < arraySize; i++) { + std::unique_ptr coorVal = dataValue->GetArrayItem(i); + if (!coorVal || !coorVal->IsNumber()) { + LOGE("get coorVal failed"); + return; + } + int32_t coorY = coorVal->GetInt(); + if (coorY <= chartOptions_.GetYAxis().max && coorY >= chartOptions_.GetYAxis().min) { + UpdateChartData(coorY, chartDatas); + } + } + + // save the head point position of the updated series data. + lineData_[seriesNum_].first = position_; + lineData_[seriesNum_].second = isResetPosition_; + + UpdateTopButtomPoint(chartDatas); + + chartChild_->SetMainCharts(chartDatas); + auto node = DOMNode::GetRootComponent(); + node->MarkNeedUpdate(); + auto pipelineContext = pipelineContext_.Upgrade(); + if (!pipelineContext) { + LOGE("pipelineContext_ is nullptr"); + return; + } + pipelineContext->ScheduleUpdate(node); +} + +void DOMChart::UpdateTopButtomPoint(std::vector& data) +{ + Point bottomPt = Point(0, 0); + Point topPt = Point(0, 0); + auto pointVec = data[seriesNum_].GetData(); + double minY = pointVec[0].GetPointInfo().GetY(); + double maxY = pointVec[0].GetPointInfo().GetY(); + + for (auto iter : pointVec) { + if (iter.GetPointInfo().GetY() <= minY) { + bottomPt.SetX(iter.GetPointInfo().GetX()); + bottomPt.SetY(iter.GetPointInfo().GetY()); + minY = iter.GetPointInfo().GetY(); + } + if (iter.GetPointInfo().GetY() >= maxY) { + topPt.SetX(iter.GetPointInfo().GetX()); + topPt.SetY(iter.GetPointInfo().GetY()); + maxY = iter.GetPointInfo().GetY(); + } + } + auto bottomPoint = data[seriesNum_].GetBottomPoint(); + bottomPoint.SetX(bottomPt.GetX()); + bottomPoint.SetY(bottomPt.GetY()); + data[seriesNum_].SetBottomPoint(bottomPoint); + + auto topPoint = data[seriesNum_].GetTopPoint(); + topPoint.SetX(topPt.GetX()); + topPoint.SetY(topPt.GetY()); + data[seriesNum_].SetTopPoint(topPoint); +} + +void DOMChart::UpdateChartData(int32_t coorY, std::vector& data) +{ + if (isResetPosition_) { + position_ = position_ + 1; + } else { + position_ = data[seriesNum_].GetData().size(); + } + if (position_ > chartOptions_.GetXAxis().max || position_ < chartOptions_.GetXAxis().min) { + return; + } + if (chartOptions_.GetLoop() && position_ > chartOptions_.GetXAxis().max - 1) { + isResetPosition_ = true; + position_ = chartOptions_.GetXAxis().min; + Point coor = Point(position_, coorY); + PointInfo point = PointInfo(coor); + SegmentInfo segment; + segment.SetSegmentColor(data[seriesNum_].GetStrokeColor()); + LineInfo line = LineInfo(point); + line.SetSegmentInfo(segment); + data[seriesNum_].ReplaceData(position_, line); + data[seriesNum_].SetErasePointNumber(chartOptions_.GetErasePointNumber()); + data[seriesNum_].SetHeadPointIndex(position_); + } else { + Point coor = Point(position_, coorY); + PointInfo point = PointInfo(coor); + SegmentInfo segment; + segment.SetSegmentColor(data[seriesNum_].GetStrokeColor()); + LineInfo line = LineInfo(point); + line.SetSegmentInfo(segment); + if (!isResetPosition_) { + data[seriesNum_].AppendData(line); + } else { + data[seriesNum_].ReplaceData(position_, line); + data[seriesNum_].SetHeadPointIndex(position_); + } + } + auto headPoint = data[seriesNum_].GetHeadPoint(); + headPoint.SetX(position_); + headPoint.SetY(coorY); + data[seriesNum_].SetHeadPoint(headPoint); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_chart.h b/frameworks/bridge/common/dom/dom_chart.h new file mode 100644 index 00000000..70f2ea2e --- /dev/null +++ b/frameworks/bridge/common/dom/dom_chart.h @@ -0,0 +1,208 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_CHART_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_CHART_H + +#include "core/components/chart/chart_component.h" +#include "core/components/common/properties/color.h" +#include "core/components/data_panel/data_panel_component.h" +#include "core/components/progress/progress_component.h" +#include "frameworks/bridge/common/dom/dom_node.h" + +namespace OHOS::Ace::Framework { + +class ChartOptions { +public: + void SetHeadPoint(const PointInfo& point) + { + headPoint_ = point; + } + + const PointInfo& GetHeadPoint() const + { + return headPoint_; + } + + void SetTopPoint(const PointInfo& point) + { + topPoint_ = point; + } + + const PointInfo& GetTopPoint() const + { + return topPoint_; + } + + void SetBottomPoint(const PointInfo& point) + { + bottomPoint_ = point; + } + + const PointInfo& GetBottomPoint() const + { + return bottomPoint_; + } + + bool GetSmoothFlag() const + { + return smoothFlag_; + } + + void SetSmoothFlag(bool flag) + { + smoothFlag_ = flag; + } + + double GetLineWidth() const + { + return lineWidth_; + } + + void SetLineWidth(double lineWidth) + { + lineWidth_ = lineWidth; + } + + const AxisOption& GetXAxis() const + { + return xAxis_; + } + + void SetXAxis(const AxisOption& xAxis) + { + xAxis_ = xAxis; + } + + const AxisOption& GetYAxis() const + { + return yAxis_; + } + + void SetYAxis(const AxisOption& yAxis) + { + yAxis_ = yAxis; + } + + int32_t GetErasePointNumber() const + { + return erasePointNumber_; + } + + void SetErasePointNumber(int32_t erasePointNumber) + { + erasePointNumber_ = erasePointNumber; + } + + bool GetLineGradient() const + { + return lineGradient_; + } + + void SetLineGradient(bool lineGradient) + { + lineGradient_ = lineGradient; + } + + bool GetLoop() const + { + return loop_; + } + + void SetLoop(bool loop) + { + loop_ = loop; + } + +private: + AxisOption xAxis_; + AxisOption yAxis_; + double lineWidth_ = 3.0; + bool smoothFlag_ = false; + PointInfo headPoint_; + PointInfo topPoint_; + PointInfo bottomPoint_; + int32_t erasePointNumber_ = 0; + bool lineGradient_ = false; + bool loop_ = false; +}; + +class DOMChart : public DOMNode { + DECLARE_ACE_TYPE(DOMChart, DOMNode); + +public: + DOMChart(NodeId nodeId, const std::string& nodeName); + ~DOMChart() override = default; + + RefPtr GetSpecializedComponent() override; + + void SetChartAttrOptions(const ChartOptions& chartOptions); + void SetChartAttrDatasets(const std::vector& datasets); + void SetChartAttrSegments(const std::vector& segments); + void CallSpecializedMethod(const std::string& method, const std::string& args) override; + +protected: + bool SetSpecializedAttr(const std::pair& attr) override; + bool SetSpecializedStyle(const std::pair& style) override; + void OnSetStyleFinished() override; + void PrepareSpecializedComponent() override; + +private: + void UpdateTopButtomPoint(std::vector& data); + void UpdateChartData(int32_t coorY, std::vector& data); + void SetPoint(PointInfo& pointInfo, PointInfo getPointInfo); + void SetChart(MainChart& chartDataset); + + RefPtr progressChild_; + RefPtr chartChild_; + RefPtr dataPanelChild_; + + ChartType chartType_ { ChartType::LINE }; + ChartOptions chartOptions_; + std::vector chartDatasets_; + std::vector segments_; + + double min_ = 0.0; + double max_ = 100.0; + double percent_ = 0.0; + std::pair strokeWidth_ = { Dimension(32.0, DimensionUnit::PX), false }; + std::pair startAngle_ = { 240.0, false }; + std::pair totalAngle_ = { 240.0, false }; + + std::pair radius_ = { -1.0, false }; + std::pair centerX_ = { -1.0, false }; + std::pair centerY_ = { -1.0, false }; + + std::vector colors_; + std::vector weights_; + std::vector> lineData_; + + bool isResetPosition_ = false; + int32_t position_ = 0; + int32_t seriesNum_ = 0; + bool isSetFirst_ = false; + + Color textColor_; + Color backgroundColor_ = Color::FromString("#08000000"); + bool trackColorSet_ = false; + double textSize_ = 18.0; + std::vector fontFamily_; + bool showEffect_ = false; + bool autoScale_ = false; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_CHART_H diff --git a/frameworks/bridge/common/dom/dom_clock.cpp b/frameworks/bridge/common/dom/dom_clock.cpp new file mode 100644 index 00000000..7b1b7fcd --- /dev/null +++ b/frameworks/bridge/common/dom/dom_clock.cpp @@ -0,0 +1,110 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_clock.h" + +#include "base/log/event_report.h" +#include "base/utils/linear_map.h" +#include "base/utils/utils.h" +#include "core/components/clock/clock_theme.h" +#include "frameworks/bridge/common/dom/dom_type.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { + +DOMClock::DOMClock(NodeId nodeId, const std::string& nodeName) : DOMNode(nodeId, nodeName) +{ + clockChild_ = AceType::MakeRefPtr(); +} + +bool DOMClock::SetSpecializedAttr(const std::pair& attr) +{ + // static linear map must be sorted by key. + static const LinearMapNode clockAttrOperators[] = { + { DOM_HOURS_WEST, + [](const std::string& val, DOMClock& clock) { clock.clockChild_->SetHoursWest(StringToDouble(val)); } }, + { DOM_SHOW_DIGIT, + [](const std::string& val, DOMClock& clock) { clock.clockChild_->SetShowDigit(StringToBool(val)); } }, + + }; + auto operatorIter = BinarySearchFindIndex(clockAttrOperators, ArraySize(clockAttrOperators), attr.first.c_str()); + if (operatorIter != -1) { + clockAttrOperators[operatorIter].value(attr.second, *this); + return true; + } + return false; +} + +bool DOMClock::SetSpecializedStyle(const std::pair& style) +{ + // static linear map must be sorted by key. + static const LinearMapNode clockStylesOperators[] = { + { DOM_DIGIT_FONT_FAMILY, + [](const std::string& val, DOMClock& clock) { + clock.clockChild_->SetFontFamilies(ConvertStrToFontFamilies(val)); + } }, + }; + auto operatorIter = + BinarySearchFindIndex(clockStylesOperators, ArraySize(clockStylesOperators), style.first.c_str()); + if (operatorIter != -1) { + clockStylesOperators[operatorIter].value(style.second, *this); + return true; + } + return false; +} + +bool DOMClock::AddSpecializedEvent(int32_t pageId, const std::string& event) +{ + if (event == "hour") { + onHourCallback_ = EventMarker(GetNodeIdForEvent(), event, pageId); + clockChild_->SetOnHourChangeEvent(onHourCallback_); + return true; + } + return false; +} + +void DOMClock::PrepareSpecializedComponent() +{ + clockChild_->SetDigitRadiusRatio(clockConfig_.digitRadiusRatio_); + clockChild_->SetDigitSizeRatio(clockConfig_.digitSizeRatio_); + clockChild_->SetClockFaceSrc(clockConfig_.clockFaceSrc_); + clockChild_->SetClockFaceNightSrc(clockConfig_.clockFaceNightSrc_); + clockChild_->SetHourHandSrc(clockConfig_.hourHandSrc_); + clockChild_->SetHourHandNightSrc(clockConfig_.hourHandNightSrc_); + clockChild_->SetMinuteHandSrc(clockConfig_.minuteHandSrc_); + clockChild_->SetMinuteHandNightSrc(clockConfig_.minuteHandNightSrc_); + clockChild_->SetSecondHandSrc(clockConfig_.secondHandSrc_); + clockChild_->SetSecondHandNightSrc(clockConfig_.secondHandNightSrc_); + clockChild_->SetDigitColor(clockConfig_.digitColor_); + clockChild_->SetDigitColorNight(clockConfig_.digitColorNight_); +} + +void DOMClock::InitializeStyle() +{ + auto theme = GetTheme(); + if (!theme) { + LOGE("ClockTheme is null!"); + EventReport::SendComponentException(ComponentExcepType::GET_THEME_ERR); + return; + } + clockChild_->SetDefaultSize(theme->GetDefaultSize()); +} + +void DOMClock::ResetInitializedStyle() +{ + InitializeStyle(); +} + +} // namespace OHOS::Ace::Framework \ No newline at end of file diff --git a/frameworks/bridge/common/dom/dom_clock.h b/frameworks/bridge/common/dom/dom_clock.h new file mode 100644 index 00000000..1a4cad18 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_clock.h @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_CLOCK_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_CLOCK_H + +#include "core/components/clock/clock_component.h" +#include "frameworks/bridge/common/dom/dom_node.h" + +namespace OHOS::Ace::Framework { + +struct ClockConfig final { + // ratio of digit-radius and half of side length of clock-face-image. + // digit-radius is used to calculate digit offset. + // e.g., when size of clock-face-image is 200 x 200, digit "3" is [200 / 2 x 0.7 = 70] right of the center. + double digitRadiusRatio_ = 0.7; + // ratio of digit-size and side length of clock-face-image, which is used to decide font-size of digit. + // e.g., when size of clock-face-image is 200 x 200, font-size of digit is 200 x 0.08 = 16 + double digitSizeRatio_ = 0.08; + + // image sources and color for day + std::string clockFaceSrc_; + std::string hourHandSrc_; + std::string minuteHandSrc_; + std::string secondHandSrc_; + Color digitColor_; + + // image sources and color for night + std::string clockFaceNightSrc_; + std::string hourHandNightSrc_; + std::string minuteHandNightSrc_; + std::string secondHandNightSrc_; + Color digitColorNight_ = Color::TRANSPARENT; +}; + +class DOMClock final : public DOMNode { + DECLARE_ACE_TYPE(DOMClock, DOMNode); + +public: + DOMClock(NodeId nodeId, const std::string& nodeName); + ~DOMClock() override = default; + + RefPtr GetSpecializedComponent() override + { + return clockChild_; + } + void ResetInitializedStyle() override; + void InitializeStyle() override; + void SetClockConfig(const ClockConfig& clockConfig) + { + clockConfig_ = clockConfig; + } + +protected: + bool SetSpecializedAttr(const std::pair& attr) override; + bool SetSpecializedStyle(const std::pair& style) override; + bool AddSpecializedEvent(int32_t pageId, const std::string& event) override; + void PrepareSpecializedComponent() override; + + bool IsSubscriptEnable() const override + { + return true; + } + +private: + RefPtr clockChild_; + ClockConfig clockConfig_; + EventMarker onHourCallback_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_CLOCK_H diff --git a/frameworks/bridge/common/dom/dom_dialog.cpp b/frameworks/bridge/common/dom/dom_dialog.cpp new file mode 100644 index 00000000..c4842931 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_dialog.cpp @@ -0,0 +1,172 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_dialog.h" + +#include "base/log/event_report.h" +#include "base/utils/string_utils.h" +#include "frameworks/bridge/common/dom/dom_type.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { + +DOMDialog::DOMDialog(NodeId nodeId, const std::string& nodeName) : DOMNode(nodeId, nodeName) +{ + dialogChild_ = AceType::MakeRefPtr(std::to_string(nodeId), nodeName); + if (IsRightToLeft()) { + dialogChild_->SetTextDirection(TextDirection::RTL); + } +} + +void DOMDialog::PrepareSpecializedComponent() +{ + if (dialogWidth_.second) { + dialogChild_->SetWidth(dialogWidth_.first); + } + if (dialogHeight_.second) { + dialogChild_->SetHeight(dialogHeight_.first); + } + if (display_) { + display_->SetVisible(isShow_ ? VisibleType::VISIBLE : VisibleType::GONE); + } + + if (customizedMargin_) { + auto margin = Edge(marginLeft_, marginTop_, marginRight_, marginBottom_); + dialogChild_->SetMargin(margin); + } +} + +bool DOMDialog::SetSpecializedStyle(const std::pair& style) +{ + static const LinearMapNode styleOperators[] = { + { DOM_HEIGHT, + [](const std::string& val, DOMDialog& dialog) { + dialog.dialogHeight_.first = dialog.ParseDimension(val); + dialog.dialogHeight_.second = true; + } }, + { DOM_MARGIN_BOTTOM, + [](const std::string& val, DOMDialog& dialog) { + dialog.marginBottom_ = dialog.ParseDimension(val); + dialog.customizedMargin_ = true; + } }, + { DOM_MARGIN_END, + [](const std::string& val, DOMDialog& dialog) { + if (dialog.IsRightToLeft()) { + dialog.marginLeft_ = dialog.ParseDimension(val); + } else { + dialog.marginRight_ = dialog.ParseDimension(val); + } + dialog.customizedMargin_ = true; + } }, + { DOM_MARGIN_LEFT, + [](const std::string& val, DOMDialog& dialog) { + dialog.marginLeft_ = dialog.ParseDimension(val); + dialog.customizedMargin_ = true; + } }, + { DOM_MARGIN_RIGHT, + [](const std::string& val, DOMDialog& dialog) { + dialog.marginRight_ = dialog.ParseDimension(val); + dialog.customizedMargin_ = true; + } }, + { DOM_MARGIN_START, + [](const std::string& val, DOMDialog& dialog) { + if (dialog.IsRightToLeft()) { + dialog.marginRight_ = dialog.ParseDimension(val); + } else { + dialog.marginLeft_ = dialog.ParseDimension(val); + } + dialog.customizedMargin_ = true; + } }, + { DOM_MARGIN_TOP, + [](const std::string& val, DOMDialog& dialog) { + dialog.marginTop_ = dialog.ParseDimension(val); + dialog.customizedMargin_ = true; + } }, + { DOM_WIDTH, + [](const std::string& val, DOMDialog& dialog) { + dialog.dialogWidth_.first = dialog.ParseDimension(val); + dialog.dialogWidth_.second = true; + } }, + }; + auto operatorIter = BinarySearchFindIndex(styleOperators, ArraySize(styleOperators), style.first.c_str()); + if (operatorIter != -1) { + styleOperators[operatorIter].value(style.second, *this); + return true; + } + return false; +} + +bool DOMDialog::SetSpecializedAttr(const std::pair& attr) +{ + if (attr.first == DOM_SHOW) { + isShow_ = StringToBool(attr.second); + return true; + } + return false; +} + +void DOMDialog::CallSpecializedMethod(const std::string& method, const std::string& args) +{ + if (method == DOM_DIALOG_METHOD_SHOW) { + const auto& controller = dialogChild_->GetDialogController(); + if (!controller) { + return; + } + controller->ShowDialog(); + } else if (method == DOM_DIALOG_METHOD_CLOSE) { + const auto& controller = dialogChild_->GetDialogController(); + if (!controller) { + return; + } + controller->CloseDialog(); + } else { + LOGW("no such method available."); + } +} + +void DOMDialog::OnChildNodeAdded(const RefPtr& child, int32_t slot) +{ + if (!display_) { + display_ = AceType::MakeRefPtr(child->GetRootComponent()); + } + display_->SetVisible(isShow_ ? VisibleType::VISIBLE : VisibleType::GONE); + dialogChild_->SetChild(display_); +} + +void DOMDialog::OnChildNodeRemoved(const RefPtr& child) +{ + dialogChild_->SetChild(nullptr); +} + +bool DOMDialog::AddSpecializedEvent(int32_t pageId, const std::string& event) +{ + if (event == DOM_DIALOG_EVENT_CANCEL) { + dialogChild_->SetOnCancel(EventMarker(GetNodeIdForEvent(), event, pageId)); + return true; + } + + LOGE("unsupported event: %{public}s.", event.c_str()); + EventReport::SendComponentException(ComponentExcepType::DIALOG_EVENT_ERR); + return false; +} + +RefPtr DOMDialog::CompositeSpecializedComponent(const std::vector>& components) +{ + auto box = AceType::MakeRefPtr(); + box->SetChild(dialogChild_); + return box; +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_dialog.h b/frameworks/bridge/common/dom/dom_dialog.h new file mode 100644 index 00000000..843db0a9 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_dialog.h @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_DIALOG_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_DIALOG_H + +#include "core/components/custom_dialog/custom_dialog_component.h" +#include "frameworks/bridge/common/dom/dom_node.h" + +namespace OHOS::Ace::Framework { + +class DOMDialog : public DOMNode { + DECLARE_ACE_TYPE(DOMDialog, DOMNode); + +public: + DOMDialog(NodeId nodeId, const std::string& nodeName); + ~DOMDialog() override = default; + + RefPtr GetSpecializedComponent() override + { + return dialogChild_; + } + + void CallSpecializedMethod(const std::string& method, const std::string& args) override; + +protected: + void PrepareSpecializedComponent() override; + bool SetSpecializedStyle(const std::pair& style) override; + bool AddSpecializedEvent(int32_t pageId, const std::string& event) override; + + void OnChildNodeAdded(const RefPtr& child, int32_t slot) override; + void OnChildNodeRemoved(const RefPtr& child) override; + bool SetSpecializedAttr(const std::pair& attr) override; + RefPtr CompositeSpecializedComponent(const std::vector>& components) override; + +private: + RefPtr dialogChild_; + RefPtr display_; + std::pair dialogWidth_ = { 0.0_vp, false }; + std::pair dialogHeight_ = { 0.0_vp, false }; + Dimension marginLeft_ = 0.0_vp; + Dimension marginRight_ = 0.0_vp; + Dimension marginTop_ = 0.0_vp; + Dimension marginBottom_ = 0.0_vp; + bool customizedMargin_ = false; + bool isShow_ = true; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_DIALOG_H diff --git a/frameworks/bridge/common/dom/dom_div.cpp b/frameworks/bridge/common/dom/dom_div.cpp new file mode 100644 index 00000000..d0cf5e14 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_div.cpp @@ -0,0 +1,522 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_div.h" + +#include "base/log/event_report.h" +#include "core/common/ace_application_info.h" +#include "core/components/focus_collaboration/focus_collaboration_component.h" +#include "core/components/scroll/scroll_bar_theme.h" +#include "core/components/scroll/scroll_fade_effect.h" +#include "core/components/scroll/scroll_spring_effect.h" +#include "core/components/theme/theme_manager.h" +#include "frameworks/bridge/common/dom/dom_reflect_map.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +namespace { + +const Alignment ALIGN_ARRAY[3][3] = { + { Alignment::TOP_LEFT, Alignment::TOP_CENTER, Alignment::TOP_RIGHT }, + { Alignment::CENTER_LEFT, Alignment::CENTER, Alignment::CENTER_RIGHT }, + { Alignment::BOTTOM_LEFT, Alignment::BOTTOM_CENTER, Alignment::BOTTOM_RIGHT } +}; + +} // namespace + +DOMDiv::DOMDiv(NodeId nodeId, const std::string& nodeName) : DOMNode(nodeId, nodeName) {} + +void DOMDiv::OnChildNodeAdded(const RefPtr& child, int32_t slot) +{ + ACE_DCHECK(child); + LOGD("DOMDiv appendChild %{public}s", child->GetTag().c_str()); + if (GetDisplay() == DisplayType::GRID) { + if (!grid_) { + LOGE("DOMDiv GridLayout is null"); + return; + } + LOGD("Current is grid, add child to grid."); + grid_->InsertChild(slot, child->GetRootComponent()); + } else { + if (isFlexWrap_) { + if (!wrapChild_) { + LOGE("DOMDiv wrapChild is null"); + return; + } + LOGD("Current is wrap, add child to wrap."); + wrapChild_->InsertChild(slot, child->GetRootComponent()); + } else { + if (!flexChild_) { + LOGE("DOMDiv FlexChild is null"); + return; + } + LOGD("Current is flex, add child to flex."); + flexChild_->InsertChild(slot, child->GetRootComponent()); + } + } +} + +void DOMDiv::OnChildNodeRemoved(const RefPtr& child) +{ + LOGD("DOMDiv remove child %{public}s", child->GetTag().c_str()); + if (GetDisplay() == DisplayType::GRID) { + if (!grid_) { + LOGE("DOMDiv GridLayout is null"); + return; + } + LOGD("Current is grid, remove child from grid."); + grid_->RemoveChild(child->GetRootComponent()); + } else { + if (isFlexWrap_) { + if (!wrapChild_) { + LOGE("DOMDiv wrapChild is null"); + return; + } + LOGD("Current is wrap, remove child from wrap."); + wrapChild_->RemoveChild(child->GetRootComponent()); + } else { + if (!flexChild_) { + LOGE("DOMDiv FlexChild is null"); + return; + } + LOGD("Current is flex, remove child from flex."); + flexChild_->RemoveChild(child->GetRootComponent()); + } + } +} + +Alignment DOMDiv::ComputeFlexAlign(FlexAlign flexMainAlign, FlexAlign flexCrossAlign, bool isColumn, bool isRtl) +{ + AxisAlign mainAlign; + if (flexMainAlign == FlexAlign::FLEX_END) { + mainAlign = AxisAlign::END; + } else if (flexMainAlign == FlexAlign::CENTER || flexMainAlign == FlexAlign::SPACE_AROUND) { + mainAlign = AxisAlign::CENTER; + } else { + mainAlign = AxisAlign::START; + } + + AxisAlign crossAlign; + if (flexCrossAlign == FlexAlign::FLEX_END) { + crossAlign = isRtl && isColumn ? AxisAlign::START : AxisAlign::END; + } else if (flexCrossAlign == FlexAlign::CENTER) { + crossAlign = AxisAlign::CENTER; + } else { + crossAlign = isRtl && isColumn ? AxisAlign::END : AxisAlign::START; + } + + return isColumn ? ALIGN_ARRAY[static_cast(mainAlign)][static_cast(crossAlign)] + : ALIGN_ARRAY[static_cast(crossAlign)][static_cast(mainAlign)]; +} + +void DOMDiv::CreateOrUpdateGrid() +{ + LOGD("Create DOMGrid"); + if (!grid_) { + grid_ = AceType::MakeRefPtr(std::list>()); + } + grid_->SetDirection(direction_ == DOM_FLEX_ROW ? FlexDirection::COLUMN : FlexDirection::ROW); + grid_->SetColumnsArgs(columnsArgs_); + grid_->SetRowsArgs(rowsArgs_); + grid_->SetColumnGap(columnGap_); + grid_->SetRowGap(rowGap_); + grid_->SetRightToLeft(IsRightToLeft()); +} + +void DOMDiv::CreateOrUpdateGridItem() +{ + LOGD("Create DOMGrid item"); + if (!gridItem_) { + gridItem_ = AceType::MakeRefPtr(RefPtr()); + } + gridItem_->SetRowIndex(rowStart_); + gridItem_->SetColumnIndex(columnStart_); + gridItem_->SetRowSpan(rowEnd_ - rowStart_ + 1); + gridItem_->SetColumnSpan(columnEnd_ - columnStart_ + 1); +} + +void DOMDiv::CreateOrUpdateFlex() +{ + auto direction = FlexDirectionMap.find(direction_); + if (direction != FlexDirectionMap.end()) { + flexDirection_ = direction->second; + } + auto flexMainAlign = FlexAlign::FLEX_START; + auto justifyContent = FlexJustifyContentMap.find(justifyContent_); + if (justifyContent != FlexJustifyContentMap.end()) { + flexMainAlign = justifyContent->second; + } + + auto flexCrossAlign = FlexAlign::STRETCH; + auto alignItems = FlexAlignItemsMap.find(alignItems_); + if (alignItems != FlexAlignItemsMap.end()) { + flexCrossAlign = alignItems->second; + } + LOGD("DOMDiv GetFlexAlign end ,Direction:%{public}d, flexMainAlign:%{public}d, flexCrossAlign:%{public}d", + flexDirection_, flexMainAlign, flexCrossAlign); + if (!flexChild_) { + flexChild_ = AceType::MakeRefPtr( + flexDirection_, flexMainAlign, flexCrossAlign, std::list>()); + } else { + flexChild_->SetDirection(flexDirection_); + flexChild_->SetMainAxisAlign(flexMainAlign); + flexChild_->SetCrossAxisAlign(flexCrossAlign); + } + if (IsRightToLeft()) { + textDirection_ = TextDirection::RTL; + flexChild_->SetTextDirection(textDirection_); + } + flexChild_->SetMainAxisAlign(flexMainAlign); + flexChild_->SetCrossAxisAlign(flexCrossAlign); + if (boxWrap_) { + flexChild_->SetMainAxisSize(MainAxisSize::MIN); + } + bool isColumn = flexDirection_ == FlexDirection::COLUMN; + boxComponent_->SetAlignment(ComputeFlexAlign(flexMainAlign, flexCrossAlign, isColumn, IsRightToLeft())); + SetRootBoxHeight(); + if (!boxWrap_) { + SetFlexHeight(flexMainAlign); + } + if ((flexDirection_ == FlexDirection::ROW && boxComponent_->GetWidthDimension().IsValid()) || + (flexDirection_ == FlexDirection::COLUMN && boxComponent_->GetHeightDimension().IsValid())) { + flexChild_->SetMainAxisSize(MainAxisSize::MAX); + } + // When cross size is determined by developers, the flex cross size should be as large as the box. + // Otherwise, flex cross size is as large as the max child's size. + if ((flexDirection_ == FlexDirection::ROW && boxComponent_->GetHeightDimension().IsValid()) || + (flexDirection_ == FlexDirection::COLUMN && boxComponent_->GetWidthDimension().IsValid())) { + flexChild_->SetStretchToParent(!boxWrap_); + flexChild_->SetCrossAxisSize(CrossAxisSize::MAX); + } +} + +void DOMDiv::CreateOrUpdateWrap() +{ + if (!wrapChild_) { + wrapChild_ = AceType::MakeRefPtr(spacing_, contentSpacing_, std::list>()); + } + + auto wrapDirection = WrapDirection::HORIZONTAL; + auto direction = WrapDirectionMap.find(direction_); + if (direction != WrapDirectionMap.end()) { + wrapDirection = direction->second; + } + wrapChild_->SetDirection(wrapDirection); + SetBoxWidthFlex(wrapDirection == WrapDirection::HORIZONTAL); + + auto wrapMainAlign = WrapAlignment::START; + auto justifyContent = WrapJustifyContentMap.find(justifyContent_); + if (justifyContent != WrapJustifyContentMap.end()) { + wrapMainAlign = justifyContent->second; + } + wrapChild_->SetMainAlignment(wrapMainAlign); + + auto wrapCrossAlign = WrapAlignment::STRETCH; + auto alignItems = WrapAlignItemsMap.find(alignItems_); + if (alignItems != WrapAlignItemsMap.end()) { + wrapCrossAlign = alignItems->second; + } + wrapChild_->SetCrossAlignment(wrapCrossAlign); + auto wrapAlignContent = WrapAlignment::START; + auto alignContent = WrapAlignContentMap.find(alignContent_); + if (alignContent != WrapAlignContentMap.end()) { + wrapAlignContent = alignContent->second; + } + wrapChild_->SetAlignment(wrapAlignContent); + + if (IsRightToLeft()) { + textDirection_ = TextDirection ::RTL; + wrapChild_->SetTextDirection(textDirection_); + } + + LOGD("DOMDiv GetWrapAlign end ,Direction:%{public}d, flexMainAlign:%{public}d, flexCrossAlign:%{public}d, " + "AlignContent :%{public}d", + wrapDirection, wrapMainAlign, wrapCrossAlign, wrapAlignContent); + // final set box default alignment. + boxComponent_->SetAlignment(IsRightToLeft() ? Alignment::TOP_RIGHT : Alignment::TOP_LEFT); +} + +// If not set div width, Div width should fill the row width +void DOMDiv::SetBoxWidthFlex(bool isHorizontal) const +{ + // There is no custom width and the orientation is horizontal. + if (boxComponent_->GetWidthDimension().Value() < 0.0 && isHorizontal) { + boxComponent_->SetFlex(BoxFlex::FLEX_X); + } +} + +// If not set div height, The root node(id=0) should be fill the column height +void DOMDiv::SetRootBoxHeight() const +{ + // not the root node 0 or Height != 0 + if ((!isRootNode_) || GreatOrEqual(boxComponent_->GetHeightDimension().Value(), 0.0)) { + return; + } + if (boxComponent_->GetWidthDimension().IsValid()) { + boxComponent_->SetFlex(BoxFlex::FLEX_Y); + return; + } + auto context = GetPipelineContext().Upgrade(); + if (context && (context->GetWindowModal() == WindowModal::SEMI_MODAL || + context->GetWindowModal() == WindowModal::DIALOG_MODAL)) { + boxComponent_->SetFlex(BoxFlex::FLEX_X); + } else { + boxComponent_->SetFlex(BoxFlex::FLEX_XY); + } +} + +// If div and div parent direction is column,Set div height filed by his children +void DOMDiv::SetFlexHeight(FlexAlign flexMainAlign) +{ + auto parent = AceType::DynamicCast(parentNode_.Upgrade()); + if (!parent) { + return; + } + flexChild_->SetMainAxisSize(MainAxisSize::MAX); + if (flexMainAlign == FlexAlign::SPACE_BETWEEN || flexMainAlign == FlexAlign::SPACE_AROUND || + flexMainAlign == FlexAlign::SPACE_EVENLY) { + return; + } + // When parent and child are all column, child should be wrap-content to fit frontend standard. + // In this case, the alignment is calculated by boxComponent_. + if (parent->flexDirection_ == flexDirection_) { + flexChild_->SetMainAxisSize(MainAxisSize::MIN); + flexChild_->SetStretchToParent(flexDirection_ == FlexDirection::COLUMN); + } +} + +void DOMDiv::OnMounted(const RefPtr& parentNode) +{ + // overflowFlag means that default tabcontent, dialog and panel support scroll. + auto overflowFlag = !parentNode->HasOverflowStyle() && !hasOverflowStyle_; + if (parentNode->GetTag() == DOM_NODE_TAG_TAB_CONTENT && direction_ == DOM_FLEX_COLUMN && overflowFlag) { + auto child = boxComponent_->GetChild(); + scroll_ = AceType::MakeRefPtr(child); + scroll_->InitScrollBar(GetTheme(), scrollBarColor_, scrollBarWidth_, edgeEffect_); + boxComponent_->SetChild(scroll_); + if (flexChild_) { + flexChild_->SetUseViewPortFlag(true); + } + rootComponent_->MarkNeedUpdate(); + } + + if (parentNode->GetTag() == DOM_NODE_TAG_REFRESH && flexDirection_ == FlexDirection::COLUMN) { + if (flexChild_) { + flexChild_->SetStretchToParent(flexDirection_ == FlexDirection::COLUMN); + } + } + + if (parentNode->GetTag() == DOM_NODE_TAG_DIALOG && direction_ == DOM_FLEX_COLUMN && overflowFlag) { + if (flexChild_) { + flexChild_->SetMainAxisSize(MainAxisSize::MIN); + } + boxComponent_->SetFlex(BoxFlex::FLEX_X); + // dialog child should be scrollable + auto child = rootComponent_->GetChild(); + scroll_ = AceType::MakeRefPtr(child); + scroll_->InitScrollBar(GetTheme(), scrollBarColor_, scrollBarWidth_, edgeEffect_); + // use takeBoundary to expand the size of dialog + scroll_->SetTakeBoundary(false); + rootComponent_->SetChild(scroll_); + } + + if (parentNode->GetTag() == DOM_NODE_TAG_PANEL && direction_ == DOM_FLEX_COLUMN && overflowFlag) { + auto child = rootComponent_->GetChild(); + scroll_ = AceType::MakeRefPtr(child); + scroll_->InitScrollBar(GetTheme(), scrollBarColor_, scrollBarWidth_, edgeEffect_); + rootComponent_->SetChild(scroll_); + } +} + +bool DOMDiv::SetSpecializedStyle(const std::pair& style) +{ + static const LinearMapNode styleSetters[] { + { DOM_ALIGN_CONTENT, [](const std::string& value, DOMDiv& div) { div.alignContent_ = value; } }, + { DOM_ALIGN_ITEMS, [](const std::string& value, DOMDiv& div) { div.alignItems_ = value; } }, + { DOM_FLEX_DIRECTION, [](const std::string& value, DOMDiv& div) { div.direction_ = value; } }, + { DOM_FLEX_WRAP, [](const std::string& value, DOMDiv& div) { div.isFlexWrap_ = value == DOM_WRAP; } }, + { DOM_GRID_AUTO_FLOW, [](const std::string& value, DOMDiv& div) { div.direction_ = value; } }, + { DOM_GRID_COLUMN_END, [](const std::string& value, DOMDiv& div) { div.columnEnd_ = StringToInt(value); } }, + { DOM_GRID_COLUMN_START, [](const std::string& value, DOMDiv& div) { div.columnStart_ = StringToInt(value); } }, + { DOM_GRID_COLUMN_GAP, [](const std::string& value, DOMDiv& div) { div.columnGap_ = StringToDouble(value); } }, + { DOM_GRID_ROW_END, [](const std::string& value, DOMDiv& div) { div.rowEnd_ = StringToInt(value); } }, + { DOM_GRID_ROW_START, [](const std::string& value, DOMDiv& div) { div.rowStart_ = StringToInt(value); } }, + { DOM_GRID_ROW_GAP, [](const std::string& value, DOMDiv& div) { div.rowGap_ = StringToDouble(value); } }, + { DOM_GRID_TEMPLATE_COLUMNS, [](const std::string& value, DOMDiv& div) { div.columnsArgs_ = value; } }, + { DOM_GRID_TEMPLATE_ROWS, [](const std::string& value, DOMDiv& div) { div.rowsArgs_ = value; } }, + { DOM_JUSTIFY_CONTENT, [](const std::string& value, DOMDiv& div) { div.justifyContent_ = value; } }, + }; + auto operatorIter = BinarySearchFindIndex(styleSetters, ArraySize(styleSetters), style.first.c_str()); + if (operatorIter != -1) { + styleSetters[operatorIter].value(style.second, *this); + return true; + } + return false; +} + +bool DOMDiv::SetSpecializedAttr(const std::pair& attr) +{ + if (attr.first == DOM_DIV_CARD_TYPE) { + isCard_ = StringToBool(attr.second); + return true; + } + if (attr.first == DOM_DIV_CARD_BLUR) { + isCardBlur_ = StringToBool(attr.second); + return true; + } + return false; +} + +void DOMDiv::SetCardThemeAttrs() +{ + cardTheme_ = GetTheme(); + if (!cardTheme_) { + LOGE("cardTheme is null"); + EventReport::SendComponentException(ComponentExcepType::GET_THEME_ERR); + return; + } + if (boxComponent_) { + if (isCard_) { + RefPtr backDecoration = boxComponent_->GetBackDecoration(); + if (!backDecoration) { + RefPtr decoration = AceType::MakeRefPtr(); + decoration->SetBackgroundColor(cardTheme_->GetBackgroundColor()); + decoration->SetBorderRadius(Radius(cardTheme_->GetBorderRadius())); + boxComponent_->SetBackDecoration(decoration); + } + if (backDecoration && !backDecoration->GetBorder().HasRadius()) { + backDecoration->SetBorderRadius(Radius(cardTheme_->GetBorderRadius())); + } + if (backDecoration && (backDecoration->GetBackgroundColor() == Color::TRANSPARENT)) { + backDecoration->SetBackgroundColor(cardTheme_->GetBackgroundColor()); + } + if (isCardBlur_) { + RefPtr frontDecoration = boxComponent_->GetFrontDecoration(); + if (!frontDecoration) { + RefPtr frontDecoration = AceType::MakeRefPtr(); + frontDecoration->SetBlurRadius(cardTheme_->GetBlurRadius()); + boxComponent_->SetFrontDecoration(frontDecoration); + } + if (frontDecoration && !frontDecoration->GetBlurRadius().IsValid()) { + frontDecoration->SetBlurRadius(cardTheme_->GetBlurRadius()); + } + } else { + RefPtr frontDecoration = boxComponent_->GetFrontDecoration(); + if (frontDecoration && frontDecoration->GetBlurRadius().IsValid()) { + frontDecoration->SetBlurRadius(Dimension()); + } + } + } + } +} + +RefPtr DOMDiv::GetSpecializedComponent() +{ + SetCardThemeAttrs(); + auto parentNode = GetParentNode(); + if (parentNode && parentNode->GetDisplay() == DisplayType::GRID) { + return gridItem_; + } else { + if (isFlexWrap_) { + return wrapChild_; + } else { + return flexChild_; + } + } +} + +void DOMDiv::PrepareSpecializedComponent() +{ + RefPtr layoutChild; + if (isFlexWrap_) { + CreateOrUpdateWrap(); + layoutChild = wrapChild_; + } else { + CreateOrUpdateFlex(); + layoutChild = flexChild_; + } + + if (GetDisplay() == DisplayType::GRID) { + // Self is grid, node: flex/wrap -> grid + CreateOrUpdateGrid(); + layoutChild->ClearChildren(); + layoutChild->AppendChild(grid_); + } + if (GetParentNode() && GetParentNode()->GetDisplay() == DisplayType::GRID) { + // Parent is grid, node: gridItem -> flex/wrap. + CreateOrUpdateGridItem(); + gridItem_->SetChild(flexChild_); + } +} + +void DOMDiv::CompositeComponents() +{ + DOMNode::CompositeComponents(); + + scroll_.Reset(); + // root div is scrollable + bool isRootScroll = isRootNode_ && (!hasOverflowStyle_ || overflow_ == Overflow::SCROLL); + if (isRootScroll) { + auto child = rootComponent_->GetChild(); + auto focusCollaboration = AceType::MakeRefPtr(); + focusCollaboration->InsertChild(0, child); + bool isCard = AceApplicationInfo::GetInstance().GetIsCardType(); + if (isCard) { + rootComponent_->SetChild(focusCollaboration); + } else if (direction_ == DOM_FLEX_COLUMN) { + scroll_ = AceType::MakeRefPtr(focusCollaboration); + scroll_->SetAxisDirection(Axis::VERTICAL); + scroll_->InitScrollBar(GetTheme(), scrollBarColor_, scrollBarWidth_, edgeEffect_); + rootComponent_->SetChild(scroll_); + } else if (direction_ == DOM_FLEX_ROW) { + scroll_ = AceType::MakeRefPtr(focusCollaboration); + scroll_->SetAxisDirection(Axis::HORIZONTAL); + scroll_->SetEnable(false); + scroll_->InitScrollBar(GetTheme(), scrollBarColor_, scrollBarWidth_, edgeEffect_); + rootComponent_->SetChild(scroll_); + } else { + rootComponent_->SetChild(focusCollaboration); + } + + if (flexChild_) { + flexChild_->SetUseViewPortFlag(true); + if ((flexDirection_ == FlexDirection::ROW && boxComponent_->GetWidthDimension().IsValid()) || + (flexDirection_ == FlexDirection::COLUMN && boxComponent_->GetHeightDimension().IsValid())) { + flexChild_->SetMainAxisSize(MainAxisSize::MAX); + } else { + flexChild_->SetMainAxisSize(MainAxisSize::MIN); + } + } + } else if (isRootNode_) { + auto child = rootComponent_->GetChild(); + auto focusCollaboration = AceType::MakeRefPtr(); + focusCollaboration->InsertChild(0, child); + rootComponent_->SetChild(focusCollaboration); + } + if (!isRootNode_ && overflow_ == Overflow::SCROLL) { + auto child = boxComponent_->GetChild(); + scroll_ = AceType::MakeRefPtr(child); + scroll_->SetAxisDirection(direction_ == DOM_FLEX_COLUMN ? Axis::VERTICAL : Axis::HORIZONTAL); + scroll_->InitScrollBar(GetTheme(), scrollBarColor_, scrollBarWidth_, edgeEffect_); + boxComponent_->SetChild(scroll_); + } +} + +void DOMDiv::AdjustSpecialParamInLiteMode() +{ + alignItems_ = DOM_ALIGN_ITEMS_START; +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_div.h b/frameworks/bridge/common/dom/dom_div.h new file mode 100644 index 00000000..8987783f --- /dev/null +++ b/frameworks/bridge/common/dom/dom_div.h @@ -0,0 +1,116 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_DIV_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_DIV_H + +#include "base/utils/macros.h" +#include "core/components/flex/flex_component.h" +#include "core/components/grid_layout/grid_layout_component.h" +#include "core/components/grid_layout/grid_layout_item_component.h" +#include "core/components/scroll/scroll_component.h" +#include "core/components/theme/card_theme.h" +#include "core/components/wrap/wrap_component.h" +#include "frameworks/bridge/common/dom/dom_node.h" + +namespace OHOS::Ace::Framework { + +class DOMDiv : public DOMNode { + DECLARE_ACE_TYPE(DOMDiv, DOMNode); + +public: + DOMDiv(NodeId nodeId, const std::string& nodeName); + ~DOMDiv() override = default; + + FlexDirection GetFlexDirection() const + { + return flexDirection_; + }; + + const RefPtr& GetScrollComponent() const override + { + return scroll_; + } + + RefPtr GetSpecializedComponent() override; + void AdjustSpecialParamInLiteMode() override; + +protected: + void OnMounted(const RefPtr& parentNode) override; + void OnChildNodeAdded(const RefPtr& child, int32_t slot) override; + void OnChildNodeRemoved(const RefPtr& child) override; + bool SetSpecializedStyle(const std::pair& style) override; + void PrepareSpecializedComponent() override; + void CompositeComponents() override; + bool SetSpecializedAttr(const std::pair& attr) override; + + RefPtr flexChild_; + RefPtr wrapChild_; + std::string direction_ { DOM_FLEX_ROW }; + +private: + enum class AxisAlign { + START = 0, + CENTER = 1, + END = 2, + }; + + static Alignment ComputeFlexAlign(FlexAlign flexMainAlign, FlexAlign flexCrossAlign, bool isColumn, bool isRtl); + void CreateOrUpdateGrid(); + void CreateOrUpdateGridItem(); + void CreateOrUpdateFlex(); + void CreateOrUpdateWrap(); + void SetBoxWidthFlex(bool isHorizontal) const; + void SetRootBoxHeight() const; + void SetFlexHeight(FlexAlign flexMainAlign); + void SetCardThemeAttrs(); + void InitScrollBar(); + + bool isFlexWrap_ = false; + std::string justifyContent_ { DOM_JUSTIFY_CONTENT_START }; + std::string alignItems_ { DOM_ALIGN_ITEMS_STRETCH }; + std::string alignContent_ { DOM_ALIGN_CONTENT_START }; + + // Wrap's variables + double spacing_ = 0.0; + double contentSpacing_ = 0.0; + + // flex properties. + FlexDirection flexDirection_ = FlexDirection::ROW; + TextDirection textDirection_ = TextDirection::LTR; + + // for grid layout + std::string columnsArgs_; + std::string rowsArgs_; + double columnGap_ = 0.0; + double rowGap_ = 0.0; + + // for grid layout item + int32_t columnStart_ = -1; + int32_t columnEnd_ = -1; + int32_t rowStart_ = -1; + int32_t rowEnd_ = -1; + + RefPtr scroll_; + RefPtr grid_; + RefPtr gridItem_; + RefPtr cardTheme_; + bool isCardBlur_ = false; + bool isCard_ = false; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_DIV_H diff --git a/frameworks/bridge/common/dom/dom_divider.cpp b/frameworks/bridge/common/dom/dom_divider.cpp new file mode 100644 index 00000000..6450e629 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_divider.cpp @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_divider.h" + +#include "base/utils/linear_map.h" +#include "base/utils/utils.h" +#include "core/components/divider/divider_theme.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { + +DOMDivider::DOMDivider(NodeId nodeId, const std::string& nodeName) : DOMNode(nodeId, nodeName) +{ + dividerChild_ = AceType::MakeRefPtr(); +} + +void DOMDivider::InitializeStyle() +{ + auto theme = GetTheme(); + if (theme) { + dividerChild_->SetDividerColor(theme->GetColor()); + } +} + +bool DOMDivider::SetSpecializedStyle(const std::pair& style) +{ + static const LinearMapNode driverStyleOperators[] = { + { DOM_COLOR, [](const std::string& val, + DOMDivider& divider) { divider.dividerChild_->SetDividerColor(divider.ParseColor(val)); } }, + { DOM_DIVIDER_LINE_CAP, + [](const std::string& val, DOMDivider& divider) { + if (val == "butt") { + divider.dividerChild_->SetLineCap(LineCap::BUTT); + } else if (val == "round") { + divider.dividerChild_->SetLineCap(LineCap::ROUND); + } else if (val == "square") { + divider.dividerChild_->SetLineCap(LineCap::SQUARE); + } else { + LOGE("not support value: %{public}s", val.c_str()); + } + } }, + { DOM_DIVIDER_STROKE_WIDTH, + [](const std::string& val, DOMDivider& divider) { + divider.dividerChild_->SetStrokeWidth(divider.ParseDimension(val)); + } }, + }; + auto operatorIter = + BinarySearchFindIndex(driverStyleOperators, ArraySize(driverStyleOperators), style.first.c_str()); + if (operatorIter != -1) { + driverStyleOperators[operatorIter].value(style.second, *this); + return true; + } + return false; +} + +void DOMDivider::PrepareSpecializedComponent() +{ + if (dividerChild_->IsVertical()) { + boxComponent_->SetFlex(BoxFlex::FLEX_Y); + } else { + boxComponent_->SetFlex(BoxFlex::FLEX_X); + } +} + +bool DOMDivider::SetSpecializedAttr(const std::pair& attr) +{ + if (attr.first == DOM_DIVIDER_VERTICAL) { + dividerChild_->SetVertical(StringToBool(attr.second)); + return true; + } + return false; +} + +void DOMDivider::ResetInitializedStyle() +{ + InitializeStyle(); +} + +} // namespace OHOS::Ace::Framework \ No newline at end of file diff --git a/frameworks/bridge/common/dom/dom_divider.h b/frameworks/bridge/common/dom/dom_divider.h new file mode 100644 index 00000000..31f0d4d1 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_divider.h @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_DIVIDER_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_DIVIDER_H + +#include "core/components/divider/divider_component.h" + +#include "frameworks/bridge/common/dom/dom_node.h" + +namespace OHOS::Ace::Framework { + +class DOMDivider final : public DOMNode { + DECLARE_ACE_TYPE(DOMDivider, DOMNode); + +public: + DOMDivider(NodeId nodeId, const std::string& nodeName); + ~DOMDivider() override = default; + + void InitializeStyle() override; + + RefPtr GetSpecializedComponent() override + { + return dividerChild_; + } + +protected: + void PrepareSpecializedComponent() override; + bool SetSpecializedStyle(const std::pair& style) override; + bool SetSpecializedAttr(const std::pair& attr) override; + void ResetInitializedStyle() override; + +private: + RefPtr dividerChild_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_DIVIDER_H diff --git a/frameworks/bridge/common/dom/dom_document.cpp b/frameworks/bridge/common/dom/dom_document.cpp new file mode 100644 index 00000000..c165e805 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_document.cpp @@ -0,0 +1,444 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_document.h" + +#include "base/log/event_report.h" +#include "base/utils/linear_map.h" +#include "base/utils/utils.h" +#include "core/components/flex/flex_item_component.h" +#include "frameworks/bridge/common/dom/dom_button.h" +#include "frameworks/bridge/common/dom/dom_calendar.h" +#include "frameworks/bridge/common/dom/dom_canvas.h" +#include "frameworks/bridge/common/dom/dom_chart.h" +#include "frameworks/bridge/common/dom/dom_clock.h" +#include "frameworks/bridge/common/dom/dom_dialog.h" +#include "frameworks/bridge/common/dom/dom_div.h" +#include "frameworks/bridge/common/dom/dom_divider.h" +#include "frameworks/bridge/common/dom/dom_grid_column.h" +#include "frameworks/bridge/common/dom/dom_grid_container.h" +#include "frameworks/bridge/common/dom/dom_grid_row.h" +#include "frameworks/bridge/common/dom/dom_image.h" +#include "frameworks/bridge/common/dom/dom_image_animator.h" +#include "frameworks/bridge/common/dom/dom_input.h" +#include "frameworks/bridge/common/dom/dom_label.h" +#include "frameworks/bridge/common/dom/dom_list.h" +#include "frameworks/bridge/common/dom/dom_list_item.h" +#include "frameworks/bridge/common/dom/dom_list_item_group.h" +#include "frameworks/bridge/common/dom/dom_marquee.h" +#include "frameworks/bridge/common/dom/dom_navigation_bar.h" +#include "frameworks/bridge/common/dom/dom_panel.h" +#include "frameworks/bridge/common/dom/dom_picker_view.h" +#include "frameworks/bridge/common/dom/dom_progress.h" +#include "frameworks/bridge/common/dom/dom_proxy.h" +#if !defined(WINDOWS_PLATFORM) and !defined(MAC_PLATFORM) +#include "frameworks/bridge/common/dom/dom_qrcode.h" +#endif +#include "frameworks/bridge/common/dom/dom_refresh.h" +#include "frameworks/bridge/common/dom/dom_search.h" +#include "frameworks/bridge/common/dom/dom_slider.h" +#include "frameworks/bridge/common/dom/dom_span.h" +#include "frameworks/bridge/common/dom/dom_stack.h" +#include "frameworks/bridge/common/dom/dom_svg.h" +#include "frameworks/bridge/common/dom/dom_svg_animate.h" +#include "frameworks/bridge/common/dom/dom_svg_animate_motion.h" +#include "frameworks/bridge/common/dom/dom_svg_circle.h" +#include "frameworks/bridge/common/dom/dom_svg_ellipse.h" +#include "frameworks/bridge/common/dom/dom_svg_line.h" +#include "frameworks/bridge/common/dom/dom_svg_path.h" +#include "frameworks/bridge/common/dom/dom_svg_polygon.h" +#include "frameworks/bridge/common/dom/dom_svg_polyline.h" +#include "frameworks/bridge/common/dom/dom_svg_rect.h" +#include "frameworks/bridge/common/dom/dom_svg_text.h" +#include "frameworks/bridge/common/dom/dom_svg_text_path.h" +#include "frameworks/bridge/common/dom/dom_svg_tspan.h" +#include "frameworks/bridge/common/dom/dom_swiper.h" +#include "frameworks/bridge/common/dom/dom_switch.h" +#include "frameworks/bridge/common/dom/dom_text.h" +#include "frameworks/bridge/common/dom/dom_textarea.h" +#include "frameworks/bridge/common/dom/dom_toggle.h" +#ifndef WEARABLE_PRODUCT +#include "frameworks/bridge/common/dom/dom_badge.h" +#include "frameworks/bridge/common/dom/dom_camera.h" +#include "frameworks/bridge/common/dom/dom_menu.h" +#include "frameworks/bridge/common/dom/dom_navigation_menu.h" +#include "frameworks/bridge/common/dom/dom_option.h" +#include "frameworks/bridge/common/dom/dom_picker_dialog.h" +#include "frameworks/bridge/common/dom/dom_piece.h" +#include "frameworks/bridge/common/dom/dom_popup.h" +#include "frameworks/bridge/common/dom/dom_rating.h" +#include "frameworks/bridge/common/dom/dom_select.h" +#include "frameworks/bridge/common/dom/dom_stepper.h" +#include "frameworks/bridge/common/dom/dom_stepper_item.h" +#include "frameworks/bridge/common/dom/dom_tab_bar.h" +#include "frameworks/bridge/common/dom/dom_tab_content.h" +#include "frameworks/bridge/common/dom/dom_tabs.h" +#include "frameworks/bridge/common/dom/dom_tool_bar.h" +#include "frameworks/bridge/common/dom/dom_tool_bar_item.h" +#include "frameworks/bridge/common/dom/dom_video.h" +#if !defined(WINDOWS_PLATFORM) and !defined(MAC_PLATFORM) +#include "frameworks/bridge/common/dom/dom_web.h" +#endif +#endif + +namespace OHOS::Ace::Framework { +namespace { + +// avoid same with root node id +constexpr int32_t PROXY_ID = 10000000; +const char PROXY_PREFIX[] = "proxy_"; +const int32_t ROOT_STACK_ID = -1; +const char ROOT_STACK_NAME[] = "ComposedStack"; + +template +RefPtr DOMNodeCreator(NodeId nodeId, const std::string& tag, int32_t) +{ + return AceType::MakeRefPtr(nodeId, tag); +} + +template +RefPtr DOMListItemCreator(NodeId nodeId, const std::string& tag, int32_t itemIndex) +{ + return AceType::MakeRefPtr(nodeId, tag, itemIndex); +} + +} // namespace + +RefPtr DOMDocument::CreateNodeWithId(const std::string& tag, NodeId nodeId, int32_t itemIndex) +{ + LOGD("DOMDocument:created new DOMNode %{public}s, id %{public}d, itemIndex %{public}d", tag.c_str(), nodeId, + itemIndex); + + static const LinearMapNode(*)(NodeId, const std::string&, int32_t)> domNodeCreators[] = { + { DOM_NODE_TAG_ANIMATE, &DOMNodeCreator }, + { DOM_NODE_TAG_ANIMATE_MOTION, &DOMNodeCreator }, + { DOM_NODE_TAG_BADGE, &DOMNodeCreator }, + { DOM_NODE_TAG_BUTTON, &DOMNodeCreator }, + { DOM_NODE_TAG_CALENDAR, &DOMNodeCreator }, +#ifndef WEARABLE_PRODUCT + { DOM_NODE_TAG_CAMERA, &DOMNodeCreator }, +#endif + { DOM_NODE_TAG_CANVAS, &DOMNodeCreator }, + { DOM_NODE_TAG_CHART, &DOMNodeCreator }, + { DOM_NODE_TAG_CIRCLE, &DOMNodeCreator }, +#ifndef WEARABLE_PRODUCT + { DOM_NODE_TAG_CLOCK, &DOMNodeCreator }, +#endif + { DOM_NODE_TAG_DIALOG, &DOMNodeCreator }, + { DOM_NODE_TAG_DIV, &DOMNodeCreator }, + { DOM_NODE_TAG_DIVIDER, &DOMNodeCreator }, + { DOM_NODE_TAG_ELLIPSE, &DOMNodeCreator }, + { DOM_NODE_TAG_GRID_COLUMN, &DOMNodeCreator }, + { DOM_NODE_TAG_GRID_CONTAINER, &DOMNodeCreator }, + { DOM_NODE_TAG_GRID_ROW, &DOMNodeCreator }, + { DOM_NODE_TAG_IMAGE, &DOMNodeCreator }, + { DOM_NODE_TAG_IMAGE_ANIMATOR, &DOMNodeCreator }, + { DOM_NODE_TAG_INPUT, &DOMNodeCreator }, + { DOM_NODE_TAG_LABEL, &DOMNodeCreator }, + { DOM_NODE_TAG_LINE, &DOMNodeCreator }, + { DOM_NODE_TAG_LIST, &DOMNodeCreator }, + { DOM_NODE_TAG_LIST_ITEM, &DOMListItemCreator }, + { DOM_NODE_TAG_LIST_ITEM_GROUP, &DOMListItemCreator }, + { DOM_NODE_TAG_MARQUEE, &DOMNodeCreator }, +#ifndef WEARABLE_PRODUCT + { DOM_NODE_TAG_MENU, &DOMNodeCreator }, +#endif + { DOM_NODE_TAG_NAVIGATION_BAR, &DOMNodeCreator }, +#ifndef WEARABLE_PRODUCT + { DOM_NODE_TAG_NAVIGATION_MENU, &DOMNodeCreator }, + { DOM_NODE_TAG_OPTION, &DOMNodeCreator }, + { DOM_NODE_TAG_PANEL, &DOMNodeCreator }, +#endif + { DOM_NODE_TAG_PATH, &DOMNodeCreator }, +#ifndef WEARABLE_PRODUCT + { DOM_NODE_TAG_PICKER_DIALOG, &DOMNodeCreator }, +#endif + { DOM_NODE_TAG_PICKER_VIEW, &DOMNodeCreator }, + { DOM_NODE_TAG_POLYGON, &DOMNodeCreator }, + { DOM_NODE_TAG_POLYLINE, &DOMNodeCreator }, +#ifndef WEARABLE_PRODUCT + { DOM_NODE_TAG_POPUP, &DOMNodeCreator }, +#endif + { DOM_NODE_TAG_PROGRESS, &DOMNodeCreator }, +#if !defined(WINDOWS_PLATFORM) and !defined(MAC_PLATFORM) + { DOM_NODE_TAG_QRCODE, &DOMNodeCreator }, +#endif +#ifndef WEARABLE_PRODUCT + { DOM_NODE_TAG_RATING, &DOMNodeCreator }, +#endif + { DOM_NODE_TAG_RECT, &DOMNodeCreator }, + { DOM_NODE_TAG_REFRESH, &DOMNodeCreator }, + { DOM_NODE_TAG_SEARCH, &DOMNodeCreator }, +#ifndef WEARABLE_PRODUCT + { DOM_NODE_TAG_SELECT, &DOMNodeCreator }, +#endif + { DOM_NODE_TAG_SLIDER, &DOMNodeCreator }, + { DOM_NODE_TAG_SPAN, &DOMNodeCreator }, + { DOM_NODE_TAG_STACK, &DOMNodeCreator }, +#ifndef WEARABLE_PRODUCT + { DOM_NODE_TAG_STEPPER, &DOMNodeCreator }, + { DOM_NODE_TAG_STEPPER_ITEM, &DOMListItemCreator }, +#endif + { DOM_NODE_TAG_SVG, &DOMNodeCreator }, + { DOM_NODE_TAG_SVG_TEXT, &DOMNodeCreator }, + { DOM_NODE_TAG_SWIPER, &DOMNodeCreator }, + { DOM_NODE_TAG_SWITCH, &DOMNodeCreator }, +#ifndef WEARABLE_PRODUCT + { DOM_NODE_TAG_TAB_BAR, &DOMNodeCreator }, + { DOM_NODE_TAG_TAB_CONTENT, &DOMNodeCreator }, + { DOM_NODE_TAG_TABS, &DOMNodeCreator }, +#endif + { DOM_NODE_TAG_TEXT, &DOMNodeCreator }, + { DOM_NODE_TAG_TEXTAREA, &DOMNodeCreator }, + { DOM_NODE_TAG_TEXT_PATH, &DOMNodeCreator }, + { DOM_NODE_TAG_TOGGLE, &DOMNodeCreator }, +#ifndef WEARABLE_PRODUCT + { DOM_NODE_TAG_TOOL_BAR, &DOMNodeCreator }, + { DOM_NODE_TAG_TOOL_BAR_ITEM, &DOMNodeCreator }, +#endif + { DOM_NODE_TAG_TSPAN, &DOMNodeCreator }, +#ifndef WEARABLE_PRODUCT + { DOM_NODE_TAG_VIDEO, &DOMNodeCreator }, +#if !defined(WINDOWS_PLATFORM) and !defined(MAC_PLATFORM) + { DOM_NODE_TAG_WEB, &DOMNodeCreator }, +#endif +#endif + }; +#ifndef WEARABLE_PRODUCT + static const LinearMapNode(*)(NodeId, const std::string&, int32_t)> phoneNodeCreators[] = { + { DOM_NODE_TAG_PIECE, &DOMNodeCreator }, + }; +#endif + + RefPtr domNode; + int64_t creatorIndex = BinarySearchFindIndex(domNodeCreators, ArraySize(domNodeCreators), tag.c_str()); + if (creatorIndex >= 0) { + domNode = domNodeCreators[creatorIndex].value(nodeId, tag, itemIndex); +#ifndef WEARABLE_PRODUCT + } else { + if (SystemProperties::GetDeviceType() == DeviceType::PHONE) { + creatorIndex = BinarySearchFindIndex(phoneNodeCreators, ArraySize(phoneNodeCreators), tag.c_str()); + if (creatorIndex >= 0) { + domNode = phoneNodeCreators[creatorIndex].value(nodeId, tag, itemIndex); + } + } else { + LOGW("node type %{public}s is invalid", tag.c_str()); + return nullptr; + } +#endif + } + if (!domNode) { + LOGW("node type %{public}s is invalid", tag.c_str()); + return nullptr; + } + + auto result = domNodes_.try_emplace(nodeId, domNode); + if (!result.second) { + LOGW("the node has already in the map"); + return nullptr; + } + domNode->SetIsRootNode(nodeId == rootNodeId_); + domNode->SetPageId(rootNodeId_ - DOM_ROOT_NODE_ID_BASE); + return domNode; +} + +RefPtr DOMDocument::CreateProxyNodeWithId(const std::string& tag, NodeId nodeId) +{ + // generate proxy tag and id, proxy id marked different from root tag id + std::string proxyTag = std::string(PROXY_PREFIX) + tag; + NodeId proxyId = PROXY_ID + nodeId; + auto proxy = AceType::MakeRefPtr(proxyId, proxyTag); + auto result = domNodes_.try_emplace(proxyId, proxy); + if (!result.second) { + LOGW("the node has already in the map"); + return nullptr; + } + proxyRelatedNode_.emplace(nodeId); + return proxy; +} + +RefPtr DOMDocument::GetDOMNodeById(NodeId nodeId) const +{ + const auto itNode = domNodes_.find(nodeId); + if (itNode == domNodes_.end()) { + LOGE("the node is not in the map"); + return nullptr; + } + return itNode->second; +} + +void DOMDocument::RemoveNodes(const RefPtr& node, bool scheduleUpdate) +{ + if (!node) { + LOGE("remove null node"); + return; + } + auto children = node->GetChildList(); + for (auto it = children.begin(); it != children.end();) { + RemoveNodes(*it++, scheduleUpdate); + } + auto parentId = node->GetParentId(); + RefPtr parentNode; + if (parentId != -1) { + parentNode = GetDOMNodeById(parentId); + if (parentNode) { + parentNode->RemoveNode(node); + } + } + // Fixed positioned node and navigation bar node need to delete the relative proxy node. + if (node->GetPosition() == PositionType::FIXED && rootStackComponent_) { + rootStackComponent_->RemoveChild(node->GetRootComponent()); + auto context = node->GetPipelineContext().Upgrade(); + if (context && scheduleUpdate) { + context->ScheduleUpdate(rootComposedStack_); + } + auto proxyId = node->GetNodeId() + PROXY_ID; + auto proxy = GetDOMNodeById(proxyId); + if (proxy) { + if (parentNode) { + parentNode->RemoveNode(proxy); + } + domNodes_.erase(proxyId); + proxyRelatedNode_.erase(node->GetNodeId()); + } + } + if (node->GetTag() == DOM_NODE_TAG_NAVIGATION_BAR && rootStackComponent_ && + rootStackComponent_->HasNavigationBar()) { + auto rootColumn = AceType::DynamicCast(rootStackComponent_->GetChildren().front()); + if (rootColumn) { + rootColumn->RemoveChild(node->GetRootComponent()); + auto proxyId = node->GetNodeId() + PROXY_ID; + auto proxy = GetDOMNodeById(proxyId); + if (proxy) { + if (parentNode) { + parentNode->RemoveNode(proxy); + } + domNodes_.erase(proxyId); + proxyRelatedNode_.erase(node->GetNodeId()); + } + } + } + LOGD("RemoveNodes: remove node %{public}d, remain nodes number %{public}lu", node->GetNodeId(), domNodes_.size()); + domNodes_.erase(node->GetNodeId()); +} + +void DOMDocument::AddNodeWithId(const std::string& key, const RefPtr& domNode) +{ + nodeWithIdVec_.emplace_back(key, domNode); +} + +void DOMDocument::AddNodeWithTarget(const std::string& key, const RefPtr& domNode) +{ + // Always save only one (the last) 'target' dom node + for (auto iter = nodeWithTargetVec_.begin(); iter != nodeWithTargetVec_.end();) { + if (iter->first == key) { + iter = nodeWithTargetVec_.erase(iter); + } else { + ++iter; + } + } + nodeWithTargetVec_.emplace_back(key, domNode); +} + +void DOMDocument::HandleComponentPostBinding() +{ + LOGD("HandleComponentPostBinding"); + for (auto iterTarget = nodeWithTargetVec_.begin(); iterTarget != nodeWithTargetVec_.end();) { + auto targetNode = iterTarget->second.Upgrade(); + if (!targetNode) { + LOGW("DOM:: Node with target %{public}s has been invalid", iterTarget->first.c_str()); + iterTarget = nodeWithTargetVec_.erase(iterTarget); + continue; + } + + for (auto iterId = nodeWithIdVec_.begin(); iterId != nodeWithIdVec_.end();) { + auto idNode = iterId->second.Upgrade(); + if (!idNode) { + LOGW("DOM:: Node with id %{public}s has been invalid, add targetNode fail", iterId->first.c_str()); + iterId = nodeWithIdVec_.erase(iterId); + continue; + } + + if (iterTarget->first != iterId->first) { + ++iterId; + continue; + } + + auto component = targetNode->GetSpecializedComponent(); + if (AceType::InstanceOf(component)) { + auto labelNode = AceType::DynamicCast(targetNode); + if (labelNode) { + labelNode->SetTargetNode(idNode); + } +#ifndef WEARABLE_PRODUCT + } else if (AceType::InstanceOf(component)) { + auto popupNode = AceType::DynamicCast(targetNode); + if (popupNode) { + // DOMPopup bind node with ID node + popupNode->BindIdNode(idNode); + } + } else if (AceType::InstanceOf(component)) { + auto menuNode = AceType::DynamicCast(targetNode); + if (menuNode) { + // DOMMenu bind node with ID node + menuNode->BindIdNode(idNode); + } + } else if (AceType::InstanceOf(targetNode)) { + auto tabBarNode = AceType::DynamicCast(targetNode); + // DOMTabBar in navigation bar bind tabs with ID node + tabBarNode->BindToTabs(idNode); +#endif + } else { + LOGW("component type not supported"); + } + ++iterId; + } + ++iterTarget; + } +} + +void DOMDocument::HandlePageLoadFinish() +{ + for (auto iter : domNodes_) { + if (iter.second) { + iter.second->OnPageLoadFinish(); + } + } +} + +void DOMDocument::SetUpRootComponent(const RefPtr& node) +{ + LOGD("DOMDocument SetUpRootComponent"); + if (!node) { + LOGE("fail to set up root component due to node is null"); + EventReport::SendComponentException(ComponentExcepType::SET_ROOT_DOM_NODE_ERR); + return; + } + std::list> stackChildren { node->GetRootComponent() }; + rootStackComponent_ = AceType::MakeRefPtr( + Alignment::TOP_LEFT, StackFit::INHERIT, Overflow::OBSERVABLE, stackChildren); + auto context = pipelineContext_.Upgrade(); + if (context && !context->IsFullScreenModal()) { + rootStackComponent_->SetMainStackSize(MainStackSize::MIN); + rootStackComponent_->SetStackFit(StackFit::FIRST_CHILD); + } else { + rootStackComponent_->SetMainStackSize(MainStackSize::MAX); + } + rootComposedStack_ = + AceType::MakeRefPtr(std::to_string(ROOT_STACK_ID - rootNodeId_), ROOT_STACK_NAME); + rootComposedStack_->SetChild(rootStackComponent_); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_document.h b/frameworks/bridge/common/dom/dom_document.h new file mode 100644 index 00000000..2ef531df --- /dev/null +++ b/frameworks/bridge/common/dom/dom_document.h @@ -0,0 +1,111 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_DOCUMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_DOCUMENT_H + +#include +#include + +#include "base/memory/ace_type.h" +#include "base/utils/macros.h" +#include "core/components/stack/stack_component.h" +#include "frameworks/bridge/common/dom/dom_node.h" +#include "frameworks/bridge/common/dom/dom_proxy.h" + +namespace OHOS::Ace::Framework { + +// DOMDocument is owned by JsAcePage, to maintain the component structures. +// As the [Component] can't completely one-one correspondence with Ace [Component], +// so the basic idea is: +// Each AcePage corresponding to only one DOMDocument, each DomDocument contains some [Node]s, +// each [Node] maybe corresponding only one Ace [Component], like Text/Image/..., or a +// [ComposedComponent] with some other components. +class ACE_EXPORT DOMDocument final : public virtual AceType { + DECLARE_ACE_TYPE(DOMDocument, AceType); + +public: + explicit DOMDocument(int32_t pageId) : rootNodeId_(DOM_ROOT_NODE_ID_BASE + pageId) {}; + ~DOMDocument() override = default; + + RefPtr CreateNodeWithId(const std::string& tag, NodeId nodeId, int32_t itemIndex = -1); + + RefPtr CreateProxyNodeWithId(const std::string& tag, NodeId nodeId); + + RefPtr GetDOMNodeById(NodeId nodeId) const; + + void RemoveNodes(const RefPtr& node, bool scheduleUpdate); + + void SetUpRootComponent(const RefPtr& node); + + RefPtr GetComponentById(NodeId nodeId) const + { + auto domNode = GetDOMNodeById(nodeId); + return (domNode == nullptr) ? nullptr : domNode->GetRootComponent(); + } + + const RefPtr& GetRootStackComponent() const + { + return rootStackComponent_; + } + + const RefPtr& GetRootComposedStack() const + { + return rootComposedStack_; + } + + void AddNodeWithId(const std::string& key, const RefPtr& domNode); + void AddNodeWithTarget(const std::string& key, const RefPtr& domNode); + void HandleComponentPostBinding(); + void HandlePageLoadFinish(); + + int32_t GetRootNodeId() const + { + return rootNodeId_; + } + + void SetPipelineContext(const WeakPtr& pipelineContext) + { + pipelineContext_ = pipelineContext; + } + + const std::unordered_set& GetProxyRelatedNodes() const + { + return proxyRelatedNode_; + } + +private: + NodeId rootNodeId_ = DOM_ROOT_NODE_ID_BASE; + + RefPtr rootStackComponent_; + RefPtr rootComposedStack_; + std::unordered_map> domNodes_; + WeakPtr pipelineContext_; + std::unordered_set proxyRelatedNode_; + + // Below id and target vector are for special cases: popup and label node in Js. + // Both of them must be assigned a 'target' attribute, which is corresponding to a DOMNode + // that must be assigned 'id' attribute. + // And the popup/label component in backend must be as the parent of the component that is + // included in 'id' DOMNode. + // However, the sequence(position in JS bundle) of the 'target' and 'id' DOMNode is uncertain, + // and even not 1 to 1, we need save them and binding the relation after whole page loading done. + std::vector>> nodeWithIdVec_; + std::vector>> nodeWithTargetVec_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_DOCUMENT_H diff --git a/frameworks/bridge/common/dom/dom_grid_column.cpp b/frameworks/bridge/common/dom/dom_grid_column.cpp new file mode 100644 index 00000000..c19c79b8 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_grid_column.cpp @@ -0,0 +1,126 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_grid_column.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { + +DomGridColumn::DomGridColumn(NodeId nodeId, const std::string& nodeName) : DOMDiv(nodeId, nodeName) {} + +RefPtr DomGridColumn::GetSpecializedComponent() +{ + if (!columnInfo_) { + columnInfo_ = infoBuilder_.Build(); + boxComponent_->SetGridLayoutInfo(columnInfo_); + } + return DOMDiv::GetSpecializedComponent(); +} + +void DomGridColumn::OnChildNodeAdded(const RefPtr& child, int32_t slot) +{ + ACE_DCHECK(child); + DOMDiv::OnChildNodeAdded(child, slot); +} + +void DomGridColumn::OnChildNodeRemoved(const RefPtr& child) +{ + ACE_DCHECK(child); + DOMDiv::OnChildNodeRemoved(child); +} + +bool DomGridColumn::SetSpecializedAttr(const std::pair& attr) +{ + static const LinearMapNode attrOperators[] { + { DOM_GRID_SIZE_TYPE_LG, + [](const std::string& value, DomGridColumn& column) { + uint32_t span = 0; + Dimension offset = UNDEFINED_DIMENSION; + column.ParseSpanAndOffset(value, span, offset); + column.infoBuilder_.SetLgSizeColumn(span, offset); + } }, + { DOM_GRID_SIZE_TYPE_MD, + [](const std::string& value, DomGridColumn& column) { + uint32_t span = 0; + Dimension offset = UNDEFINED_DIMENSION; + column.ParseSpanAndOffset(value, span, offset); + column.infoBuilder_.SetMdSizeColumn(span, offset); + } }, + { DOM_GRID_COLUMN_OFFSET, + [](const std::string& value, DomGridColumn& column) { + column.SetPosition( + PositionType::ABSOLUTE, Dimension(0.0, DimensionUnit::PX), column.ParseDimension(value)); + } }, + { DOM_GRID_SIZE_TYPE_SM, + [](const std::string& value, DomGridColumn& column) { + uint32_t span = 0; + Dimension offset = UNDEFINED_DIMENSION; + column.ParseSpanAndOffset(value, span, offset); + column.infoBuilder_.SetSmSizeColumn(span, offset); + } }, + { DOM_GRID_COLUMN_SPAN, + [](const std::string& value, DomGridColumn& column) { + column.infoBuilder_.SetColumns(StringUtils::StringToUint(value)); + } }, + { DOM_GRID_SIZE_TYPE_XS, + [](const std::string& value, DomGridColumn& column) { + uint32_t span = 0; + Dimension offset = UNDEFINED_DIMENSION; + column.ParseSpanAndOffset(value, span, offset); + column.infoBuilder_.SetXsSizeColumn(span, offset); + } }, + }; + + auto operatorIter = BinarySearchFindIndex(attrOperators, ArraySize(attrOperators), attr.first.c_str()); + if (operatorIter != -1) { + attrOperators[operatorIter].value(attr.second, *this); + return true; + } + return false; +} + +void DomGridColumn::DomGridColumn::ParseSpanAndOffset(const std::string& value, uint32_t& span, Dimension& offset) +{ + span = StringUtils::StringToUint(value); + if (span > 0) { + return; + } + + std::unique_ptr jsonValue = JsonUtil::ParseJsonString(value); + if (!jsonValue) { + LOGE("parse format is error"); + return; + } + + std::unique_ptr spanValue = jsonValue->GetValue(DOM_GRID_COLUMN_SPAN); + if (spanValue && spanValue->IsNumber()) { + span = spanValue->GetUInt(); + } else { + LOGW("get span failed"); + } + + std::unique_ptr offsetValue = jsonValue->GetValue(DOM_GRID_COLUMN_OFFSET); + if (!offsetValue) { + return; + } + if (offsetValue->IsNumber()) { + offset.SetValue(offsetValue->GetDouble()); + } else if (offsetValue->IsString()) { + offset = ParseDimension(offsetValue->GetString()); + } +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_grid_column.h b/frameworks/bridge/common/dom/dom_grid_column.h new file mode 100644 index 00000000..b091731f --- /dev/null +++ b/frameworks/bridge/common/dom/dom_grid_column.h @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_GRID_COLUMN_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_GRID_COLUMN_H + +#include "core/components/common/layout/grid_column_info.h" +#include "frameworks/bridge/common/dom/dom_div.h" + +namespace OHOS::Ace::Framework { + +class DomGridColumn : public DOMDiv { + DECLARE_ACE_TYPE(DomGridColumn, DOMDiv); + +public: + DomGridColumn(NodeId nodeId, const std::string& nodeName); + ~DomGridColumn() override = default; + + RefPtr GetSpecializedComponent() override; + void SetParentGridInfo(const RefPtr& parent) + { + infoBuilder_.SetParent(parent); + } + +protected: + void OnChildNodeAdded(const RefPtr& child, int32_t slot) override; + void OnChildNodeRemoved(const RefPtr& child) override; + bool SetSpecializedAttr(const std::pair& attr) override; + void ParseSpanAndOffset(const std::string& value, uint32_t& span, Dimension& offset); + +private: + RefPtr columnInfo_; + GridColumnInfo::Builder infoBuilder_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_GRID_COLUMN_H diff --git a/frameworks/bridge/common/dom/dom_grid_container.cpp b/frameworks/bridge/common/dom/dom_grid_container.cpp new file mode 100644 index 00000000..6e1cd7ef --- /dev/null +++ b/frameworks/bridge/common/dom/dom_grid_container.cpp @@ -0,0 +1,188 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_grid_container.h" + +#include "core/components/common/layout/grid_system_manager.h" +#include "frameworks/bridge/common/dom/dom_grid_row.h" +#include "frameworks/bridge/common/dom/dom_reflect_map.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { + +DomGridContainer::DomGridContainer(NodeId nodeId, const std::string& nodeName) : DOMDiv(nodeId, nodeName) +{ + direction_ = DOM_FLEX_COLUMN; +} + +RefPtr DomGridContainer::GetSpecializedComponent() +{ + if (!gridContainerInfo_) { + gridContainerInfo_ = infoBuilder_.Build(); + boxComponent_->SetGridLayoutInfo(gridContainerInfo_); + } + return DOMDiv::GetSpecializedComponent(); +} + +void DomGridContainer::OnChildNodeAdded(const RefPtr& child, int32_t slot) +{ + ACE_DCHECK(child); + DOMDiv::OnChildNodeAdded(child, slot); + auto gridRow = AceType::DynamicCast(child); + if (gridRow) { + gridRow->SetParentGridInfo(gridContainerInfo_); + } +} + +void DomGridContainer::OnChildNodeRemoved(const RefPtr& child) +{ + ACE_DCHECK(child); + DOMDiv::OnChildNodeRemoved(child); + auto gridRow = AceType::DynamicCast(child); + if (gridRow) { + gridRow->SetParentGridInfo(nullptr); + } +} + +void DomGridContainer::CallSpecializedMethod(const std::string& method, const std::string& args) +{ + std::string result; + if (method == DOM_GRID_CONTAINER_GET_COLUMNS) { + result = std::to_string(gridContainerInfo_->GetColumns()); + } else if (method == DOM_GRID_CONTAINER_GET_COLUMN_WIDTH) { + result = std::to_string(gridContainerInfo_->GetColumnWidth()); + } else if (method == DOM_GRID_CONTAINER_GET_GUTTER_WIDTH) { + auto dipScale = GridSystemManager::GetInstance().GetDipScale(); + result = std::to_string(gridContainerInfo_->GetGutterWidth().ConvertToPx(dipScale)); + } else if (method == DOM_GRID_CONTAINER_GET_SIZE_TYPE) { + auto sizeType = gridContainerInfo_->GetSizeType(); + result.append("\""); + if (sizeType == GridSizeType::LG) { + result.append(DOM_GRID_SIZE_TYPE_LG); + } else if (sizeType == GridSizeType::MD) { + result.append(DOM_GRID_SIZE_TYPE_MD); + } else if (sizeType == GridSizeType::SM) { + result.append(DOM_GRID_SIZE_TYPE_SM); + } + result.append("\""); + } else { + return; + } + std::unique_ptr argsValue = JsonUtil::ParseJsonString(args); + if (!argsValue || !argsValue->IsArray() || argsValue->GetArraySize() != 1) { + LOGE("parse args error"); + return; + } + auto callbackId = argsValue->GetArrayItem(0)->GetString(); + auto content = pipelineContext_.Upgrade(); + if (!content) { + return; + } + content->SendCallbackMessageToFrontend(callbackId, result); +} + +bool DomGridContainer::SetSpecializedAttr(const std::pair& attr) +{ + static const LinearMapNode attrOperators[] { + { DOM_GRID_CONTAINER_COLUMNS, + [](const std::string& value, DomGridContainer& container) { + container.infoBuilder_.SetColumns(StringUtils::StringToInt(value)); + } }, + { DOM_GRID_CONTAINER_GUTTER_WIDTH, + [](const std::string& value, DomGridContainer& container) { + container.infoBuilder_.SetGutterWidth(Dimension(StringUtils::StringToDouble(value), DimensionUnit::PX)); + } }, + { DOM_GRID_CONTAINER_SIZE_TYPE, + [](const std::string& value, DomGridContainer& container) { + auto sizeType = GridSizeType::UNDEFINED; + auto iter = GridSizeTypeMap.find(value); + if (iter != GridSizeTypeMap.end()) { + sizeType = iter->second; + } + container.infoBuilder_.SetSizeType(sizeType); + } }, + }; + + auto operatorIter = BinarySearchFindIndex(attrOperators, ArraySize(attrOperators), attr.first.c_str()); + if (operatorIter != -1) { + attrOperators[operatorIter].value(attr.second, *this); + return true; + } + return false; +} + +bool DomGridContainer::SetSpecializedStyle(const std::pair& style) +{ + static const std::list notSupportStyles { + DOM_FLEX_DIRECTION, + DOM_GRID_COLUMN_END, + DOM_GRID_COLUMN_START, + DOM_GRID_COLUMN_GAP, + DOM_GRID_ROW_END, + DOM_GRID_ROW_START, + DOM_GRID_ROW_GAP, + DOM_GRID_TEMPLATE_COLUMNS, + DOM_GRID_TEMPLATE_ROWS, + }; + + if (std::find(notSupportStyles.begin(), notSupportStyles.end(), style.first.c_str()) != notSupportStyles.end()) { + // not support + return true; + } + if (style.first == DOM_MARGIN_LEFT) { + infoBuilder_.SetMarginLeft(StringToDimension(style.second)); + return DOMNode::SetSpecializedStyle(style); + } else if (style.first == DOM_MARGIN_RIGHT) { + infoBuilder_.SetMarginRight(StringToDimension(style.second)); + return DOMNode::SetSpecializedStyle(style); + } else if (style.first == DOM_MARGIN_START) { + if (IsRightToLeft()) { + infoBuilder_.SetMarginRight(StringToDimension(style.second)); + } else { + infoBuilder_.SetMarginLeft(StringToDimension(style.second)); + } + return DOMNode::SetSpecializedStyle(style); + } else if (style.first == DOM_MARGIN_END) { + if (IsRightToLeft()) { + infoBuilder_.SetMarginLeft(StringToDimension(style.second)); + } else { + infoBuilder_.SetMarginRight(StringToDimension(style.second)); + } + return DOMNode::SetSpecializedStyle(style); + } else if (style.first == DOM_PADDING_LEFT) { + infoBuilder_.SetPaddingLeft(StringToDimension(style.second)); + return DOMNode::SetSpecializedStyle(style); + } else if (style.first == DOM_PADDING_RIGHT) { + infoBuilder_.SetPaddingRight(StringToDimension(style.second)); + return DOMNode::SetSpecializedStyle(style); + } else if (style.first == DOM_PADDING_START) { + if (IsRightToLeft()) { + infoBuilder_.SetPaddingRight(StringToDimension(style.second)); + } else { + infoBuilder_.SetPaddingLeft(StringToDimension(style.second)); + } + return DOMNode::SetSpecializedStyle(style); + } else if (style.first == DOM_PADDING_END) { + if (IsRightToLeft()) { + infoBuilder_.SetPaddingLeft(StringToDimension(style.second)); + } else { + infoBuilder_.SetPaddingRight(StringToDimension(style.second)); + } + return DOMNode::SetSpecializedStyle(style); + } + return DOMDiv::SetSpecializedStyle(style); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_grid_container.h b/frameworks/bridge/common/dom/dom_grid_container.h new file mode 100644 index 00000000..f4684a2d --- /dev/null +++ b/frameworks/bridge/common/dom/dom_grid_container.h @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_GRID_CONTAINER_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_GRID_CONTAINER_H + +#include "core/components/common/layout/grid_container_info.h" +#include "frameworks/bridge/common/dom/dom_div.h" +#include "frameworks/bridge/common/dom/dom_node.h" + +namespace OHOS::Ace::Framework { + +class DomGridContainer : public DOMDiv { + DECLARE_ACE_TYPE(DomGridContainer, DOMDiv); + +public: + DomGridContainer(NodeId nodeId, const std::string& nodeName); + ~DomGridContainer() override = default; + + RefPtr GetSpecializedComponent() override; + +protected: + void OnChildNodeAdded(const RefPtr& child, int32_t slot) override; + void OnChildNodeRemoved(const RefPtr& child) override; + void CallSpecializedMethod(const std::string& method, const std::string& args) override; + bool SetSpecializedAttr(const std::pair& attr) override; + bool SetSpecializedStyle(const std::pair& style) override; + +private: + RefPtr gridContainerInfo_; + GridContainerInfo::Builder infoBuilder_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_GRID_CONTAINER_H diff --git a/frameworks/bridge/common/dom/dom_grid_row.cpp b/frameworks/bridge/common/dom/dom_grid_row.cpp new file mode 100644 index 00000000..a06ade65 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_grid_row.cpp @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_grid_row.h" + +#include "core/components/common/layout/grid_system_manager.h" +#include "frameworks/bridge/common/dom/dom_grid_column.h" +#include "frameworks/bridge/common/dom/dom_reflect_map.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { + +DomGridRow::DomGridRow(NodeId nodeId, const std::string& nodeName) : DOMDiv(nodeId, nodeName) {} + +void DomGridRow::SetParentGridInfo(const RefPtr& parent) +{ + if (columnType_ != GridColumnType::NONE) { + auto info = GridSystemManager::GetInstance().GetInfoByType(columnType_); + boxComponent_->SetGridLayoutInfo(info); + gridContainerInfo_ = info->GetParent(); + } else { + gridContainerInfo_ = parent; + } +} + +void DomGridRow::OnChildNodeAdded(const RefPtr& child, int32_t slot) +{ + ACE_DCHECK(child); + DOMDiv::OnChildNodeAdded(child, slot); + + auto gridColumn = AceType::DynamicCast(child); + if (gridColumn) { + gridColumn->SetParentGridInfo(gridContainerInfo_); + } +} + +void DomGridRow::OnChildNodeRemoved(const RefPtr& child) +{ + ACE_DCHECK(child); + DOMDiv::OnChildNodeRemoved(child); + auto gridColumn = AceType::DynamicCast(child); + if (gridColumn) { + gridColumn->SetParentGridInfo(nullptr); + } +} + +bool DomGridRow::SetSpecializedAttr(const std::pair& attr) +{ + if (attr.first == DOM_GRID_COLUMN_TYPE) { + auto iter = GridColumnTypeMap.find(attr.second); + if (iter != GridColumnTypeMap.end()) { + columnType_ = iter->second; + } + return true; + } + return false; +} + +bool DomGridRow::SetSpecializedStyle(const std::pair& style) +{ + static const std::list notSupportStyles { + DOM_GRID_COLUMN_END, + DOM_GRID_COLUMN_START, + DOM_GRID_COLUMN_GAP, + DOM_GRID_ROW_END, + DOM_GRID_ROW_START, + DOM_GRID_ROW_GAP, + DOM_GRID_TEMPLATE_COLUMNS, + DOM_GRID_TEMPLATE_ROWS, + }; + + if (std::find(notSupportStyles.begin(), notSupportStyles.end(), style.first.c_str()) != notSupportStyles.end()) { + // not support + return true; + } + + return DOMDiv::SetSpecializedStyle(style); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_grid_row.h b/frameworks/bridge/common/dom/dom_grid_row.h new file mode 100644 index 00000000..c1784fa6 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_grid_row.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_GRID_ROW_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_GRID_ROW_H + +#include "core/components/common/layout/grid_container_info.h" +#include "frameworks/bridge/common/dom/dom_div.h" +#include "frameworks/bridge/common/dom/dom_node.h" + +namespace OHOS::Ace::Framework { + +class DomGridRow : public DOMDiv { + DECLARE_ACE_TYPE(DomGridRow, DOMDiv); + +public: + DomGridRow(NodeId nodeId, const std::string& nodeName); + ~DomGridRow() override = default; + + void SetParentGridInfo(const RefPtr& parent); + +protected: + void OnChildNodeAdded(const RefPtr& child, int32_t slot) override; + void OnChildNodeRemoved(const RefPtr& child) override; + bool SetSpecializedAttr(const std::pair& attr) override; + bool SetSpecializedStyle(const std::pair& style) override; + +private: + RefPtr gridContainerInfo_; + GridColumnType columnType_ = GridColumnType::NONE; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_GRID_ROW_H diff --git a/frameworks/bridge/common/dom/dom_image.cpp b/frameworks/bridge/common/dom/dom_image.cpp new file mode 100644 index 00000000..848838bb --- /dev/null +++ b/frameworks/bridge/common/dom/dom_image.cpp @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_image.h" + +#include "base/utils/linear_map.h" +#include "base/utils/utils.h" +#include "frameworks/bridge/common/dom/dom_type.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +namespace { + +ImageFit ConvertStrToFit(const std::string& fit) +{ + static const LinearMapNode imageFitMap[] = { + { "contain", ImageFit::CONTAIN }, + { "cover", ImageFit::COVER }, + { "fill", ImageFit::FILL }, + { "none", ImageFit::NONE }, + { "scale-down", ImageFit::SCALEDOWN }, + }; + ImageFit imageFit = ImageFit::COVER; + auto iter = BinarySearchFindIndex(imageFitMap, ArraySize(imageFitMap), fit.c_str()); + if (iter != -1) { + imageFit = imageFitMap[iter].value; + } + return imageFit; +} + +} // namespace + +DOMImage::DOMImage(NodeId nodeId, const std::string& nodeName) : DOMNode(nodeId, nodeName) +{ + imageChild_ = AceType::MakeRefPtr(); + imageChild_->SetFitMaxSize(true); + if (IsRightToLeft()) { + imageChild_->SetTextDirection(TextDirection::RTL); + } +} + +bool DOMImage::SetSpecializedAttr(const std::pair& attr) +{ + if (attr.first == DOM_SRC) { + imageChild_->SetSrc(attr.second); + return true; + } + if (attr.first == DOM_IMAGE_ALT) { + imageChild_->SetAlt(attr.second); + return true; + } + return false; +} + +bool DOMImage::SetSpecializedStyle(const std::pair& style) +{ + // static linear map must be sorted by key. + static const LinearMapNode imageStylesOperators[] = { + { DOM_IMAGE_FIT_ORIGINAL_SIZE, + [](const std::string& val, DOMImage& image) { image.imageChild_->SetFitMaxSize(!StringToBool(val)); } }, + { DOM_IMAGE_MATCH_TEXT_DIRECTION, + [](const std::string& val, DOMImage& image) { + image.imageChild_->SetMatchTextDirection(StringToBool(val)); + } }, + { DOM_IMAGE_FIT, [](const std::string& val, + DOMImage& image) { image.imageChild_->SetImageFit(ConvertStrToFit(val.c_str())); } }, + }; + auto operatorIter = + BinarySearchFindIndex(imageStylesOperators, ArraySize(imageStylesOperators), style.first.c_str()); + if (operatorIter != -1) { + imageStylesOperators[operatorIter].value(style.second, *this); + return true; + } + return false; +} + +bool DOMImage::AddSpecializedEvent(int32_t pageId, const std::string& event) +{ + if (event == DOM_COMPLETE) { + loadSuccessEventId_ = EventMarker(GetNodeIdForEvent(), event, pageId); + imageChild_->SetLoadSuccessEventId(loadSuccessEventId_); + } else if (event == DOM_ERROR) { + loadFailEventId_ = EventMarker(GetNodeIdForEvent(), event, pageId); + imageChild_->SetLoadFailEventId(loadFailEventId_); + } else { + return false; + } + return true; +} + +void DOMImage::PrepareSpecializedComponent() +{ + // If there is a corresponding box decoration, specialize the box. + if (boxComponent_) { + auto backDecoration = boxComponent_->GetBackDecoration(); + if (backDecoration) { + Border border = backDecoration->GetBorder(); + if (border.TopLeftRadius().IsValid() && border.TopRightRadius().IsValid() && + border.BottomLeftRadius().IsValid() && border.BottomRightRadius().IsValid()) { + imageChild_->SetBorder(border); + } + } + } + if (flexItemComponent_ && !imageChild_->GetFitMaxSize()) { + flexItemComponent_->SetStretchFlag(false); + } +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_image.h b/frameworks/bridge/common/dom/dom_image.h new file mode 100644 index 00000000..280aa223 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_image.h @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_IMAGE_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_IMAGE_H + +#include "core/components/clip/clip_component.h" +#include "core/components/image/image_component.h" +#include "frameworks/bridge/common/dom/dom_node.h" + +namespace OHOS::Ace::Framework { + +class DOMImage final : public DOMNode { + DECLARE_ACE_TYPE(DOMImage, DOMNode); + +public: + DOMImage(NodeId nodeId, const std::string& nodeName); + ~DOMImage() override = default; + + RefPtr GetSpecializedComponent() override + { + return imageChild_; + } + + bool IsLeafNode() const override + { + auto src = imageChild_->GetSrc(); + return !(src.size() > 4 && src.substr(src.size() - 4) == ".svg"); + } + +protected: + bool SetSpecializedAttr(const std::pair& attr) override; + bool SetSpecializedStyle(const std::pair& style) override; + bool AddSpecializedEvent(int32_t pageId, const std::string& event) override; + void PrepareSpecializedComponent() override; + + bool IsSubscriptEnable() const override + { + return true; + } + +private: + RefPtr imageChild_; + EventMarker loadSuccessEventId_; + EventMarker loadFailEventId_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_IMAGE_H diff --git a/frameworks/bridge/common/dom/dom_image_animator.cpp b/frameworks/bridge/common/dom/dom_image_animator.cpp new file mode 100644 index 00000000..4f90c763 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_image_animator.cpp @@ -0,0 +1,199 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_image_animator.h" + +#include "base/log/event_report.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +namespace { + +constexpr int32_t MS_TO_S = 1000; +const char* STATE_PLAYING = "playing"; +const char* STATE_PAUSED = "paused"; +const char* STATE_STOPPED = "stopped"; +const char* ITERATIONS_INFINITE = "infinite"; + +} // namespace + +DOMImageAnimator::DOMImageAnimator(NodeId nodeId, const std::string& nodeName) : DOMNode(nodeId, nodeName) +{ + imageAnimator_ = AceType::MakeRefPtr(nodeName); + controller_ = AceType::MakeRefPtr(); + controller_->SetFillMode(FillMode::FORWARDS); + imageAnimator_->SetAnimator(controller_); +} + +bool DOMImageAnimator::SetSpecializedAttr(const std::pair& attr) +{ + if (attr.first == DOM_ITERATION) { + if (attr.second == ITERATIONS_INFINITE) { + iteration_ = ANIMATION_REPEAT_INFINITE; + } else { + iteration_ = StringToInt(attr.second); + } + return true; + } + if (attr.first == DOM_PREDECODE) { + preDecode_ = StringToInt(attr.second); + return true; + } + if (attr.first == DOM_DURATION) { + auto val = attr.second; + if (val.find("ms") != std::string::npos) { + duration_ = StringToInt(val); + } else if (val.find('s') != std::string::npos) { + duration_ = StringToInt(val) * MS_TO_S; + } else { + duration_ = StringToInt(val); + } + return true; + } + if (attr.first == DOM_FIXEDSIZE) { + fixedSize_ = StringToBool(attr.second); + return true; + } + if (attr.first == DOM_REVERSE) { + isReverse_ = StringToBool(attr.second); + return true; + } + if (attr.first == DOM_FILLMODE) { + if (controller_) { + controller_->SetFillMode(StringToFillMode(attr.second)); + } + return true; + } + return false; +} + +bool DOMImageAnimator::AddSpecializedEvent(int32_t pageId, const std::string& event) +{ + EventMarker eventMarker(GetNodeIdForEvent(), event, pageId); + auto weakContext = pipelineContext_; + if (event == DOM_IMAGE_ANIMATOR_START) { + controller_->ClearStartListeners(); + controller_->AddStartListener([eventMarker, weakContext] { + auto context = weakContext.Upgrade(); + if (!context) { + LOGE("Start event: Context is null"); + return; + } + AceAsyncEvent::Create(eventMarker, context)(); + }); + return true; + } else if (event == DOM_IMAGE_ANIMATOR_STOP) { + controller_->ClearStopListeners(); + controller_->AddStopListener([eventMarker, weakContext] { + auto context = weakContext.Upgrade(); + if (!context) { + LOGE("Stop event: Context is null"); + return; + } + AceAsyncEvent::Create(eventMarker, context)(); + }); + return true; + } else if (event == DOM_IMAGE_ANIMATOR_PAUSE) { + controller_->ClearPauseListeners(); + controller_->AddPauseListener([eventMarker, weakContext] { + auto context = weakContext.Upgrade(); + if (!context) { + LOGE("Pause event: Context is null"); + return; + } + AceAsyncEvent::Create(eventMarker, context)(); + }); + return true; + } else if (event == DOM_IMAGE_ANIMATOR_RESUME) { + controller_->ClearResumeListeners(); + controller_->AddResumeListener([eventMarker, weakContext] { + auto context = weakContext.Upgrade(); + if (!context) { + LOGE("Resume event: Context is null"); + return; + } + AceAsyncEvent::Create(eventMarker, context)(); + }); + return true; + } else { + return false; + } +} + +void DOMImageAnimator::CallSpecializedMethod(const std::string& method, const std::string& args) +{ + if (!controller_) { + LOGE("The controller is not created."); + return; + } + auto nodeId = GetNodeId(); + if (method == DOM_IMAGE_ANIMATOR_START) { + LOGI("JS call Start method, nodeId: %{public}d", nodeId); + if (isReverse_) { + controller_->Backward(); + } else { + controller_->Forward(); + } + } else if (method == DOM_IMAGE_ANIMATOR_STOP) { + LOGI("JS call Stop method, nodeId: %{public}d", nodeId); + controller_->Finish(); + } else if (method == DOM_IMAGE_ANIMATOR_PAUSE) { + LOGI("JS call Pause method, nodeId: %{public}d", nodeId); + controller_->Pause(); + } else if (method == DOM_IMAGE_ANIMATOR_RESUME) { + LOGI("JS call Resume method, nodeId: %{public}d", nodeId); + controller_->Resume(); + } else { + LOGE("Do not support this method: %{public}s, nodeId: %{public}d.", method.c_str(), nodeId); + EventReport::SendComponentException(ComponentExcepType::IMAGE_ANIMATOR_ERR); + } +} + +const char* DOMImageAnimator::GetState() const +{ + if (!controller_) { + LOGE("The controller is not created."); + return ""; + } + auto currentStatus = controller_->GetStatus(); + if (currentStatus == Animator::Status::PAUSED) { + return STATE_PAUSED; + } else if (currentStatus == Animator::Status::RUNNING) { + return STATE_PLAYING; + } else { + // IDLE and STOP + return STATE_STOPPED; + } +}; + +void DOMImageAnimator::PrepareSpecializedComponent() +{ + if (!imageAnimator_) { + LOGE("The imageAnimator is not created."); + EventReport::SendComponentException(ComponentExcepType::IMAGE_ANIMATOR_ERR); + return; + } + if (border_.HasRadius()) { + imageAnimator_->SetBorder(border_); + } + imageAnimator_->SetDuration(duration_); + imageAnimator_->SetIteration(iteration_); + imageAnimator_->SetIsReverse(isReverse_); + imageAnimator_->SetImageProperties(imagesAttr_); + imageAnimator_->SetIsFixedSize(fixedSize_); + imageAnimator_->SetPreDecode(preDecode_); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_image_animator.h b/frameworks/bridge/common/dom/dom_image_animator.h new file mode 100644 index 00000000..8dfed1a1 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_image_animator.h @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_IMAGE_ANIMATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_IMAGE_ANIMATOR_H + +#include "base/utils/macros.h" +#include "core/components/image/image_animator_component.h" +#include "core/components/image/image_component.h" +#include "frameworks/bridge/common/dom/dom_node.h" +#include "frameworks/bridge/common/dom/dom_type.h" + +namespace OHOS::Ace::Framework { + +class ACE_EXPORT DOMImageAnimator final : public DOMNode { + DECLARE_ACE_TYPE(DOMImageAnimator, DOMNode); + +public: + DOMImageAnimator(NodeId nodeId, const std::string& nodeName); + ~DOMImageAnimator() override = default; + + void CallSpecializedMethod(const std::string& method, const std::string& args) override; + + const char* GetState() const; + + RefPtr GetSpecializedComponent() override + { + return imageAnimator_; + } + + void SetImagesAttr(const std::vector& imagesAttr) + { + imagesAttr_ = std::move(imagesAttr); + } + +protected: + bool SetSpecializedAttr(const std::pair& attr) override; + bool AddSpecializedEvent(int32_t pageId, const std::string& event) override; + void PrepareSpecializedComponent() override; + +private: + RefPtr controller_; + RefPtr imageAnimator_; + std::vector imagesAttr_; + int32_t iteration_ = ANIMATION_REPEAT_INFINITE; // infinite as default. + int32_t duration_ = 0; // Duration in millisecond. + int32_t preDecode_ = 1; + bool isReverse_ = false; + bool fixedSize_ = true; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_IMAGE_ANIMATOR_H diff --git a/frameworks/bridge/common/dom/dom_input.cpp b/frameworks/bridge/common/dom/dom_input.cpp new file mode 100644 index 00000000..c67e8207 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_input.cpp @@ -0,0 +1,393 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_input.h" + +#include + +#include "core/components/button/button_component.h" +#include "core/components/checkable/checkable_component.h" +#include "core/components/text_field/text_field_component.h" +#include "frameworks/bridge/common/dom/input/dom_button_util.h" +#include "frameworks/bridge/common/dom/input/dom_checkbox_util.h" +#include "frameworks/bridge/common/dom/input/dom_radio_util.h" +#include "frameworks/bridge/common/dom/input/dom_textfield_util.h" + +namespace OHOS::Ace::Framework { +namespace { + +constexpr uint32_t METHOD_SHOW_ERROR_ARGS_SIZE = 1; + +// input type +constexpr char INPUT_TYPE_BUTTON[] = "button"; +constexpr char INPUT_TYPE_CHECKBOX[] = "checkbox"; +constexpr char INPUT_TYPE_RADIO[] = "radio"; +constexpr char INPUT_TYPE_TEXT[] = "text"; +constexpr char INPUT_TYPE_EMAIL[] = "email"; +constexpr char INPUT_TYPE_DATE[] = "date"; +constexpr char INPUT_TYPE_TIME[] = "time"; +constexpr char INPUT_TYPE_NUMBER[] = "number"; +constexpr char INPUT_TYPE_PASSWORD[] = "password"; + +std::set g_textCategory; + +// If type is changed between g_textCategory, there is no need to recreate components. +bool ShouldCreateNewComponent(const std::string& oldType, const std::string& newType) +{ + if (g_textCategory.empty()) { + g_textCategory = std::set({ INPUT_TYPE_TEXT, INPUT_TYPE_EMAIL, INPUT_TYPE_DATE, INPUT_TYPE_TIME, + INPUT_TYPE_NUMBER, INPUT_TYPE_PASSWORD }); + } + return g_textCategory.find(oldType) == g_textCategory.end() || g_textCategory.find(newType) == g_textCategory.end(); +} + +} // namespace + +DOMInput::DOMInput(NodeId nodeId, const std::string& nodeName) : DOMNode(nodeId, nodeName) {} + +DOMInput::~DOMInput() +{ + if (!checkableChangeMarker_.IsEmpty()) { + BackEndEventManager::GetInstance().RemoveBackEndEvent(checkableChangeMarker_); + checkableChangeMarker_.Reset(); + } +} + +bool DOMInput::SetSpecializedAttr(const std::pair& attr) +{ + static const std::set inputCategory { INPUT_TYPE_BUTTON, INPUT_TYPE_CHECKBOX, INPUT_TYPE_RADIO, + INPUT_TYPE_TEXT, INPUT_TYPE_EMAIL, INPUT_TYPE_DATE, INPUT_TYPE_TIME, INPUT_TYPE_NUMBER, INPUT_TYPE_PASSWORD }; + if (attr.first == DOM_INPUT_TYPE) { + std::string typeName = attr.second; + if (typeName.empty() || inputCategory.find(typeName) == inputCategory.end()) { + typeName = INPUT_TYPE_TEXT; + } + type_.second = ShouldCreateNewComponent(type_.first, typeName); + type_.first = typeName; + } + inputAttrs_[attr.first] = attr.second; + return false; +} + +void DOMInput::ResetInitializedStyle() +{ + if (type_.first == INPUT_TYPE_CHECKBOX) { + InitCheckable(); + } else if (type_.first == INPUT_TYPE_RADIO) { + InitCheckable, RadioTheme>(); + } else { + const auto& theme = GetTheme(); + DOMTextFieldUtil::InitDefaultValue( + GetBoxComponent(), AceType::DynamicCast(inputChild_), theme); + DOMTextFieldUtil::SetDisableStyle(AceType::DynamicCast(inputChild_), theme); + } +} + +bool DOMInput::SetSpecializedStyle(const std::pair& style) +{ + inputStyles_[style.first] = style.second; + return false; +} + +bool DOMInput::AddSpecializedEvent(int32_t pageId, const std::string& event) +{ + tempEvent_.emplace_back(event); + pageId_ = pageId; + return false; +} + +void DOMInput::CallSpecializedMethod(const std::string& method, const std::string& args) +{ + auto textField = AceType::DynamicCast(inputChild_); + if (!textField) { + return; + } + auto controller = textField->GetTextFieldController(); + if (!controller) { + return; + } + if (method == DOM_INPUT_METHOD_SHOW_ERROR) { + std::unique_ptr argsValue = JsonUtil::ParseJsonString(args); + if (!argsValue || !argsValue->IsArray() || argsValue->GetArraySize() != METHOD_SHOW_ERROR_ARGS_SIZE) { + LOGE("parse args error"); + return; + } + + std::unique_ptr error = argsValue->GetArrayItem(0)->GetValue("error"); + if (!error || !error->IsString()) { + LOGE("get error text failed"); + return; + } + std::string errorText = error->GetString(); + controller->ShowError(errorText); + } else if (method == DOM_INPUT_METHOD_DELETE) { + controller->Delete(); + } +} + +void DOMInput::OnRequestFocus(bool shouldFocus) +{ + if ((type_.first == INPUT_TYPE_CHECKBOX) || (type_.first == INPUT_TYPE_RADIO) || + (type_.first == INPUT_TYPE_BUTTON)) { + DOMNode::OnRequestFocus(shouldFocus); + return; + } + auto textField = AceType::DynamicCast(inputChild_); + if (!textField) { + return; + } + auto textFieldController = textField->GetTextFieldController(); + if (!textFieldController) { + return; + } + textFieldController->Focus(shouldFocus); +} + +void DOMInput::PrepareCheckedListener() +{ + bool isCheckbox = (type_.first == INPUT_TYPE_CHECKBOX); + bool isRadio = (type_.first == INPUT_TYPE_RADIO); + if (isCheckbox || isRadio) { + if (!checkableChangeMarker_.IsEmpty()) { + BackEndEventManager::GetInstance().RemoveBackEndEvent(checkableChangeMarker_); + checkableChangeMarker_.Reset(); + } + auto checkableChangeCallback = [weak = AceType::WeakClaim(this), isCheckbox](const std::string& checked) { + auto domNode = weak.Upgrade(); + if (!domNode) { + LOGE("get dom node failed!"); + return; + } + bool isChecked = false; + if (checked.find("\"checked\":true") != std::string::npos) { + isChecked = true; + } + domNode->OnChecked(isChecked); + }; + checkableChangeMarker_ = BackEndEventManager::GetInstance().GetAvailableMarker(); + BackEndEventManager::GetInstance().BindBackendEvent( + checkableChangeMarker_, checkableChangeCallback); + AceType::DynamicCast(inputChild_)->SetDomChangeEvent(checkableChangeMarker_); + } +} + +void DOMInput::PrepareSpecializedComponent() +{ + if (boxComponent_) { + boxComponent_->SetMouseAnimationType(HoverAnimationType::OPACITY); + } + if (boxComponent_ && boxComponent_->GetBackDecoration()) { + boxBorder_ = boxComponent_->GetBackDecoration()->GetBorder(); + } + // dom is created and type is not changed + if (!type_.second && inputChild_) { + UpdateSpecializedComponent(); + } else { + CreateSpecializedComponent(); + } + + auto textField = AceType::DynamicCast(inputChild_); + if (textField) { + textField->SetInputOptions(inputOptions_); + } + + inputAttrs_.erase(DOM_INPUT_VALUE); + UpdateSpecializedComponentStyle(); + if (HasCheckedPseudo()) { + PrepareCheckedListener(); + } + AddSpecializedComponentEvent(); +} + +RefPtr DOMInput::GetSpecializedComponent() +{ + return inputChild_; +} + +void DOMInput::CreateSpecializedComponent() +{ + type_.second = false; + auto radioComponent = AceType::DynamicCast>(inputChild_); + if (radioComponent) { + DOMRadioUtil::RemoveRadioComponent(*this, radioComponent); + } + if (type_.first == INPUT_TYPE_BUTTON) { + boxComponent_->SetDeliverMinToChild(true); + inputChild_ = DOMButtonUtil::CreateComponentAndSetChildAttr(inputAttrs_, *this); + } else if (type_.first == INPUT_TYPE_CHECKBOX) { + boxComponent_->SetDeliverMinToChild(true); + inputChild_ = DOMCheckboxUtil::CreateComponentAndSetChildAttr(inputAttrs_, *this); + } else if (type_.first == INPUT_TYPE_RADIO) { + boxComponent_->SetDeliverMinToChild(true); + inputChild_ = DOMRadioUtil::CreateComponentAndSetChildAttr(inputAttrs_, *this); + } else { + // if type is not be set, will create a textfield component + inputChild_ = + DOMTextFieldUtil::CreateComponentAndSetChildAttr(GetBoxComponent(), type_.first, inputAttrs_, *this); + } + if (IsRightToLeft()) { + inputChild_->SetTextDirection(TextDirection::RTL); + } +} + +void DOMInput::UpdateSpecializedComponent() +{ + if (type_.first == INPUT_TYPE_BUTTON) { + boxComponent_->SetDeliverMinToChild(true); + DOMButtonUtil::SetChildAttr( + AceType::DynamicCast(inputChild_), inputAttrs_, GetTheme()); + } else if (type_.first == INPUT_TYPE_CHECKBOX) { + boxComponent_->SetDeliverMinToChild(true); + DOMCheckboxUtil::SetChildAttr(AceType::DynamicCast(inputChild_), inputAttrs_); + } else if (type_.first == INPUT_TYPE_RADIO) { + boxComponent_->SetDeliverMinToChild(true); + DOMRadioUtil::SetChildAttr(*this, AceType::DynamicCast>(inputChild_), inputAttrs_); + } else { + DOMTextFieldUtil::SetChildAttr( + AceType::DynamicCast(inputChild_), GetBoxComponent(), type_.first, inputAttrs_); + } +} + +void DOMInput::UpdateSpecializedComponentStyle() +{ + static const LinearMapNode&, const RefPtr&, + const std::map&, const Border&, DOMInput&)> + styleOperators[] = { + { INPUT_TYPE_BUTTON, + [](const RefPtr& boxComponent, const RefPtr& component, + const std::map& styles, const Border& boxBorder, DOMInput& input) { + DOMButtonUtil::SetChildStyle( + boxComponent, AceType::DynamicCast(component), styles, input); + } }, + { INPUT_TYPE_DATE, + [](const RefPtr& boxComponent, const RefPtr& component, + const std::map& styles, const Border& boxBorder, DOMInput& input) { + DOMTextFieldUtil::SetChildStyle( + boxComponent, AceType::DynamicCast(component), styles, boxBorder, input); + } }, + { INPUT_TYPE_EMAIL, + [](const RefPtr& boxComponent, const RefPtr& component, + const std::map& styles, const Border& boxBorder, DOMInput& input) { + DOMTextFieldUtil::SetChildStyle( + boxComponent, AceType::DynamicCast(component), styles, boxBorder, input); + } }, + { INPUT_TYPE_NUMBER, + [](const RefPtr& boxComponent, const RefPtr& component, + const std::map& styles, const Border& boxBorder, DOMInput& input) { + DOMTextFieldUtil::SetChildStyle( + boxComponent, AceType::DynamicCast(component), styles, boxBorder, input); + } }, + { INPUT_TYPE_PASSWORD, + [](const RefPtr& boxComponent, const RefPtr& component, + const std::map& styles, const Border& boxBorder, DOMInput& input) { + DOMTextFieldUtil::SetChildStyle( + boxComponent, AceType::DynamicCast(component), styles, boxBorder, input); + } }, + { INPUT_TYPE_RADIO, + [](const RefPtr& boxComponent, const RefPtr& component, + const std::map& styles, const Border& boxBorder, DOMInput& input) { + DOMRadioUtil::SetChildStyle( + boxComponent, AceType::DynamicCast>(component), styles); + } }, + { INPUT_TYPE_TEXT, + [](const RefPtr& boxComponent, const RefPtr& component, + const std::map& styles, const Border& boxBorder, DOMInput& input) { + DOMTextFieldUtil::SetChildStyle( + boxComponent, AceType::DynamicCast(component), styles, boxBorder, input); + } }, + { INPUT_TYPE_TIME, + [](const RefPtr& boxComponent, const RefPtr& component, + const std::map& styles, const Border& boxBorder, DOMInput& input) { + DOMTextFieldUtil::SetChildStyle( + boxComponent, AceType::DynamicCast(component), styles, boxBorder, input); + } }, + }; + auto styleOperatorIter = BinarySearchFindIndex(styleOperators, ArraySize(styleOperators), type_.first.c_str()); + if (styleOperatorIter != -1) { + styleOperators[styleOperatorIter].value(GetBoxComponent(), inputChild_, inputStyles_, boxBorder_, *this); + } + auto textField = DynamicCast(inputChild_); + if (textField) { + textField->SetIsVisible(IsShow()); + } +} + +void DOMInput::AddSpecializedComponentEvent() +{ + static const LinearMapNode&, const int32_t, const std::string&, const std::vector&)> + eventOperators[] = { + { INPUT_TYPE_BUTTON, + [](const RefPtr& component, int32_t pageId, const std::string& nodeId, + const std::vector& events) { + DOMButtonUtil::AddChildEvent( + AceType::DynamicCast(component), pageId, nodeId, events); + } }, + { INPUT_TYPE_CHECKBOX, + [](const RefPtr& component, int32_t pageId, const std::string& nodeId, + const std::vector& events) { + DOMCheckboxUtil::AddChildEvent( + AceType::DynamicCast(component), pageId, nodeId, events); + } }, + { INPUT_TYPE_DATE, + [](const RefPtr& component, int32_t pageId, const std::string& nodeId, + const std::vector& events) { + DOMTextFieldUtil::AddChildEvent( + AceType::DynamicCast(component), pageId, nodeId, events); + } }, + { INPUT_TYPE_EMAIL, + [](const RefPtr& component, int32_t pageId, const std::string& nodeId, + const std::vector& events) { + DOMTextFieldUtil::AddChildEvent( + AceType::DynamicCast(component), pageId, nodeId, events); + } }, + { INPUT_TYPE_NUMBER, + [](const RefPtr& component, int32_t pageId, const std::string& nodeId, + const std::vector& events) { + DOMTextFieldUtil::AddChildEvent( + AceType::DynamicCast(component), pageId, nodeId, events); + } }, + { INPUT_TYPE_PASSWORD, + [](const RefPtr& component, int32_t pageId, const std::string& nodeId, + const std::vector& events) { + DOMTextFieldUtil::AddChildEvent( + AceType::DynamicCast(component), pageId, nodeId, events); + } }, + { INPUT_TYPE_RADIO, + [](const RefPtr& component, int32_t pageId, const std::string& nodeId, + const std::vector& events) { + DOMRadioUtil::AddChildEvent( + AceType::DynamicCast>(component), pageId, nodeId, events); + } }, + { INPUT_TYPE_TEXT, + [](const RefPtr& component, int32_t pageId, const std::string& nodeId, + const std::vector& events) { + DOMTextFieldUtil::AddChildEvent( + AceType::DynamicCast(component), pageId, nodeId, events); + } }, + { INPUT_TYPE_TIME, + [](const RefPtr& component, int32_t pageId, const std::string& nodeId, + const std::vector& events) { + DOMTextFieldUtil::AddChildEvent( + AceType::DynamicCast(component), pageId, nodeId, events); + } }, + }; + auto eventOperatorIter = BinarySearchFindIndex(eventOperators, ArraySize(eventOperators), type_.first.c_str()); + if (eventOperatorIter != -1) { + eventOperators[eventOperatorIter].value(inputChild_, pageId_, GetNodeIdForEvent(), tempEvent_); + } +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_input.h b/frameworks/bridge/common/dom/dom_input.h new file mode 100644 index 00000000..0a0c0a67 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_input.h @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_INPUT_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_INPUT_H + +#include "core/components/common/properties/border.h" +#include "core/pipeline/base/component.h" +#include "frameworks/bridge/common/dom/dom_node.h" +#include "frameworks/bridge/common/dom/dom_text.h" +#include "frameworks/bridge/common/dom/dom_type.h" + +namespace OHOS::Ace::Framework { + +struct InputOption { + std::string image_; + std::string text_; +}; + +class DOMInput final : public DOMNode { + DECLARE_ACE_TYPE(DOMInput, DOMNode); + +public: + DOMInput(NodeId nodeId, const std::string& nodeName); + ~DOMInput() override; + + void CallSpecializedMethod(const std::string& method, const std::string& args) override; + void OnRequestFocus(bool shouldFocus) override; + RefPtr GetSpecializedComponent() override; + + void SetInputOptions(const std::vector& inputOptions) + { + inputOptions_ = inputOptions; + } + +protected: + bool SetSpecializedAttr(const std::pair& attr) override; + bool SetSpecializedStyle(const std::pair& style) override; + bool AddSpecializedEvent(int32_t pageId, const std::string& event) override; + + void PrepareSpecializedComponent() override; + + void ResetInitializedStyle() override; + + void UpdateSpecializedComponent(); + + void CreateSpecializedComponent(); + + void UpdateSpecializedComponentStyle(); + + void AddSpecializedComponentEvent(); + + template + void InitCheckable() + { + const auto& theme = GetTheme(); + const auto& checkableComponent = AceType::DynamicCast(inputChild_); + if (theme && checkableComponent) { + checkableComponent->ApplyTheme(theme); + SetWidth(theme->GetWidth()); + SetHeight(theme->GetHeight()); + } + } + +private: + void PrepareCheckedListener(); + + RefPtr inputChild_; + std::pair type_ = { "text", false }; + + std::map inputAttrs_; + std::map inputStyles_; + std::vector tempEvent_; + EventMarker checkableChangeMarker_; + int32_t pageId_ = -1; // invalid id. + Border boxBorder_; + std::vector inputOptions_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_INPUT_H diff --git a/frameworks/bridge/common/dom/dom_label.cpp b/frameworks/bridge/common/dom/dom_label.cpp new file mode 100644 index 00000000..f41d6031 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_label.cpp @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_label.h" + +#include "core/components/checkable/checkable_component.h" +#include "core/components/common/layout/constants.h" +#include "core/components/common/properties/text_style.h" +#include "core/components/gesture_listener/gesture_listener_component.h" +#include "core/components/text_span/text_span_component.h" +#include "frameworks/bridge/common/dom/input/dom_radio_util.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { + +DOMLabel::DOMLabel(NodeId nodeId, const std::string& nodeName) : DOMText(nodeId, nodeName) {} + +DOMLabel::~DOMLabel() +{ + BackEndEventManager::GetInstance().RemoveBackEndEvent(clickMarker_); +} + +bool DOMLabel::SetSpecializedAttr(const std::pair& attr) +{ + LOGD("Domlabel SetSpecializedAttr"); + if (DOMText::SetSpecializedAttr(attr)) { + return true; + } + + bool consumed = true; + if (attr.first == DOM_TARGET) { + target_ = attr.second; + } else if (attr.first == DOM_VALUE) { + textChild_->SetData(attr.second); + } else { + consumed = false; + } + return consumed; +} + +bool DOMLabel::SetSpecializedStyle(const std::pair& style) +{ + return DOMText::SetSpecializedStyle(style); +} + +void DOMLabel::PrepareSpecializedComponent() +{ + DOMText::PrepareSpecializedComponent(); + if (!labelComponent_) { + labelComponent_ = AceType::MakeRefPtr(textChild_); + } + + clickMarker_ = BackEndEventManager::GetInstance().GetAvailableMarker(); + BackEndEventManager::GetInstance().BindBackendEvent( + clickMarker_, [weak = WeakClaim(this)](const TouchEventInfo& info) { + auto labelComponent = weak.Upgrade(); + if (!labelComponent) { + return; + } + auto trigger = labelComponent->GetLabelTrigger(); + if (!trigger) { + LOGW("label not get trigger"); + return; + } + trigger->Click(); + }); + labelComponent_->SetOnTouchDownId(clickMarker_); +} + +RefPtr DOMLabel::GetSpecializedComponent() +{ + return labelComponent_; +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_label.h b/frameworks/bridge/common/dom/dom_label.h new file mode 100644 index 00000000..298dbd6f --- /dev/null +++ b/frameworks/bridge/common/dom/dom_label.h @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_LABEL_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_LABEL_H + +#include "base/utils/label_target.h" +#include "core/components/text/text_component.h" +#include "core/pipeline/base/component.h" +#include "frameworks/bridge/common/dom/dom_node.h" +#include "frameworks/bridge/common/dom/dom_text.h" +#include "frameworks/bridge/common/dom/dom_type.h" +#include "frameworks/bridge/js_frontend/frontend_delegate_impl.h" + +namespace OHOS::Ace::Framework { + +class DOMLabel : public DOMText { + DECLARE_ACE_TYPE(DOMLabel, DOMText); + +public: + DOMLabel(NodeId nodeId, const std::string& nodeName); + ~DOMLabel(); + + void SetTargetNode(const RefPtr& node) + { + auto labelTarget = AceType::DynamicCast(node->GetBoxComponent()->GetChild()); + if (!labelTarget) { + LOGE("node component type is not label target"); + return; + } + trigger_ = labelTarget->GetTrigger(); + } + + RefPtr GetLabelTrigger() const + { + return trigger_; + } + + std::function GetEvent() + { + return event_; + } + + RefPtr GetSpecializedComponent() override; + +protected: + bool SetSpecializedAttr(const std::pair& attr) override; + bool SetSpecializedStyle(const std::pair& style) override; + void PrepareSpecializedComponent() override; + +private: + // input component id + std::string target_; + // click event + std::list> children_; + RefPtr labelComponent_; + RefPtr trigger_; + std::function event_; + EventMarker clickMarker_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_LABEL_H diff --git a/frameworks/bridge/common/dom/dom_list.cpp b/frameworks/bridge/common/dom/dom_list.cpp new file mode 100644 index 00000000..ea20475c --- /dev/null +++ b/frameworks/bridge/common/dom/dom_list.cpp @@ -0,0 +1,942 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_list.h" + +#include "base/log/event_report.h" +#include "base/utils/linear_map.h" +#include "base/utils/utils.h" +#include "core/components/list/list_theme.h" +#include "core/components/scroll/scroll_bar_theme.h" +#include "core/components/scroll/scroll_fade_effect.h" +#include "core/components/scroll/scroll_spring_effect.h" +#include "core/components/theme/theme_manager.h" +#include "frameworks/bridge/common/dom/dom_list_item.h" +#include "frameworks/bridge/common/dom/dom_list_item_group.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +namespace { + +constexpr int32_t DEFAULT_NODE_INDEX = -1; +constexpr char INDEXER_ALPHABET_DIV = 10; // newline character + +} // namespace + +DOMList::DOMList(NodeId nodeId, const std::string& nodeName) : DOMNode(nodeId, nodeName) {} + +bool DOMList::SetSpecializedAttr(const std::pair& attr) +{ + // static linear map must be sorted by key. + static const LinearMapNode attrOperators[] = { + { + LIST_BEGIN_INDEX, + [](DOMList& list, const std::string& val) { list.beginIndex_ = StringUtils::StringToInt(val); }, + }, + { + LIST_CACHED_COUNT, + [](DOMList& list, const std::string& val) { list.cachedCount_ = StringUtils::StringToInt(val); }, + }, + { + DOM_LIST_CENTER_LAYOUT, + [](DOMList& list, const std::string& val) { list.centerLayout_ = StringToBool(val); }, + }, + { + DOM_LIST_CHAIN_ANIMATION, + [](DOMList& list, const std::string& val) { list.chainAnimation_ = StringToBool(val); }, + }, + { + DOM_LIST_DIVIDER, + [](DOMList& list, const std::string& val) { list.needDivider_ = StringToBool(val); }, + }, + { + LIST_END_INDEX, + [](DOMList& list, const std::string& val) { list.endIndex_ = StringUtils::StringToInt(val); }, + }, + { + DOM_LIST_INDEXER, + [](DOMList& list, const std::string& val) { list.ParseIndexer(val); }, + }, + { + DOM_LIST_INDEXER_BUBBLE, + [](DOMList& list, const std::string& val) { + list.bubble_.first = StringToBool(val); + list.bubble_.second = true; + }, + }, + { + DOM_LIST_INDEXER_MODE, + [](DOMList& list, const std::string& val) { + list.circleMode_.first = StringToBool(val); + list.circleMode_.second = true; + }, + }, + { + DOM_LIST_INDEXER_MULTI, + [](DOMList& list, const std::string& val) { + list.multiLanguage_.first = StringToBool(val); + list.multiLanguage_.second = true; + }, + }, + { + LIST_INDEX_OFFSET, + [](DOMList& list, const std::string& val) { list.indexOffset_ = StringUtils::StringToInt(val); }, + }, + { + DOM_LIST_INITIAL_INDEX, + [](DOMList& list, const std::string& val) { list.initialIndex_ = StringToInt(val); }, + }, + { + DOM_LIST_INITIAL_OFFSET, + [](DOMList& list, const std::string& val) { list.initialOffset_ = StringToDouble(val); }, + }, + { + DOM_LIST_ITEM_CENTER, + [](DOMList& list, const std::string& val) { list.itemCenter_ = StringToBool(val); }, + }, + { + DOM_LIST_ITEM_OPACITY, + [](DOMList& list, const std::string& val) { list.itemOpacity_ = StringToBool(val); }, + }, + { + DOM_LIST_ITEM_SCALE, + [](DOMList& list, const std::string& val) { list.itemScale_ = StringToBool(val); }, + }, + { + LIST_REPEATED_LENGTH, + [](DOMList& list, const std::string& val) { list.repeatedLength_ = StringUtils::StringToInt(val); }, + }, + { + DOM_SCROLL_SCROLLBAR, + [](DOMList& list, const std::string& val) { + if (val == DOM_SCROLL_SCROLLBAR_ON) { + list.displayMode_ = DisplayMode::ON; + } else if (val == DOM_SCROLL_SCROLLBAR_AUTO) { + list.displayMode_ = DisplayMode::AUTO; + } else { + list.displayMode_ = DisplayMode::OFF; + } + }, + }, + { + DOM_SCROLL_EFFECT, + [](DOMList& list, const std::string& val) { + if (val == DOM_SCROLL_EFFECT_SPRING) { + list.edgeEffect_ = EdgeEffect::SPRING; + } else if (val == DOM_SCROLL_EFFECT_FADE) { + list.edgeEffect_ = EdgeEffect::FADE; + } else { + list.edgeEffect_ = EdgeEffect::NONE; + } + }, + }, + { + DOM_LIST_SCROLLPAGE, + [](DOMList& list, const std::string& val) { list.scrollPage_ = StringToBool(val); }, + }, + { + DOM_LIST_SCROLL_VIBRATE, + [](DOMList& list, const std::string& val) { list.scrollVibrate_ = StringToBool(val); }, + }, + { + DOM_LIST_ATTR_SELECTED, + [](DOMList& list, const std::string& val) { list.selectedItem_ = val; }, + }, + { + DOM_SCROLL_SHAPE_MODE, + [](DOMList& list, const std::string& val) { + if (val == DOM_SCROLL_SHAPE_MODE_RECT) { + list.shapeMode_ = ShapeMode::RECT; + } else if (val == DOM_SCROLL_SHAPE_MODE_ROUND) { + list.shapeMode_ = ShapeMode::ROUND; + } else { + list.shapeMode_ = ShapeMode::DEFAULT; + } + }, + }, + { + DOM_LIST_UPDATE_EFFECT, + [](DOMList& list, const std::string& val) { list.updateEffect_ = StringToBool(val); }, + }, + }; + auto operatorIter = BinarySearchFindIndex(attrOperators, ArraySize(attrOperators), attr.first.c_str()); + if (operatorIter != -1) { + attrOperators[operatorIter].value(*this, attr.second); + return true; + } + return false; +} + +void DOMList::ParseIndexer(const std::string& indexerAlphabet) +{ + indexerAlphabet_.clear(); + indexer_ = false; + + if (indexerAlphabet.empty() || indexerAlphabet.find("false") != std::string::npos) { + return; + } + + if (indexerAlphabet.find("true") != std::string::npos) { + indexer_ = true; + return; + } + + StringUtils::StringSpliter(indexerAlphabet, INDEXER_ALPHABET_DIV, indexerAlphabet_); + int32_t alphabetCount = indexerAlphabet_.size(); + indexer_ = alphabetCount > 0; + LOGI("IndexerFlag:%{public}d, AlphabetCount:%{public}d.", indexer_, alphabetCount); +} + +bool DOMList::SupportChainAnimation() const +{ + return chainAnimation_ && !indexer_; +} + +bool DOMList::AddSpecializedEvent(int32_t pageId, const std::string& event) +{ + // static linear map must be sorted by key. + static const LinearMapNode eventOperators[] = { + { + DOM_LIST_EVENT_INDEXER_CHANGE, + [](int32_t pageId, DOMList& list) { + list.onIndexerChange_ = EventMarker(list.GetNodeIdForEvent(), DOM_LIST_EVENT_INDEXER_CHANGE, pageId); + }, + }, + { + LIST_EVENT_REQUEST_ITEM, + [](int32_t pageId, DOMList& list) { + list.onRequestItem_ = EventMarker(list.GetNodeIdForEvent(), LIST_EVENT_REQUEST_ITEM, pageId); + }, + }, + { + DOM_LIST_EVENT_SCROLL, + [](int32_t pageId, DOMList& list) { + list.onScroll_ = EventMarker(list.GetNodeIdForEvent(), DOM_LIST_EVENT_SCROLL, pageId); + }, + }, + { + DOM_LIST_EVENT_SCROLL_BOTTOM, + [](int32_t pageId, DOMList& list) { + list.onScrollBottom_ = EventMarker(list.GetNodeIdForEvent(), DOM_LIST_EVENT_SCROLL_BOTTOM, pageId); + }, + }, + { + DOM_LIST_EVENT_SCROLL_END, + [](int32_t pageId, DOMList& list) { + list.onScrollEnd_ = EventMarker(list.GetNodeIdForEvent(), DOM_LIST_EVENT_SCROLL_END, pageId); + }, + }, + { + DOM_LIST_EVENT_SCROLL_TOP, + [](int32_t pageId, DOMList& list) { + list.onScrollTop_ = EventMarker(list.GetNodeIdForEvent(), DOM_LIST_EVENT_SCROLL_TOP, pageId); + }, + }, + { + DOM_LIST_EVENT_SCROLL_TOUCH_UP, + [](int32_t pageId, DOMList& list) { + list.onScrollTouchUp_ = EventMarker(list.GetNodeIdForEvent(), DOM_LIST_EVENT_SCROLL_TOUCH_UP, pageId); + }, + }, + }; + auto iter = BinarySearchFindIndex(eventOperators, ArraySize(eventOperators), event.c_str()); + if (iter != -1) { + eventOperators[iter].value(pageId, *this); + return true; + } + return false; +} + +void DOMList::ResetInitializedStyle() +{ + if (!listComponent_) { + LOGE("list component is null, reset style failed."); + EventReport::SendComponentException(ComponentExcepType::LIST_COMPONENT_ERR); + return; + } + // list theme + RefPtr listTheme = GetTheme(); + if (listTheme) { + listComponent_->InitStyle(listTheme); + if (hasBackGroundColor_) { + listComponent_->SetBackgroundColor(backgroundColor_); + } + scrollDistance_ = listTheme->GetScrollDistance(); + } + + if (!scrollBar_ || displayMode_ == DisplayMode::OFF) { + return; + } + // scrollBar_ theme + RefPtr scrollBarTheme = GetTheme(); + if (scrollBarTheme) { + if (scrollBar_->GetShapeMode() == ShapeMode::DEFAULT) { + scrollBar_->SetShapeMode(scrollBarTheme->GetShapeMode()); + } + scrollBar_->SetInactiveWidth(scrollBarTheme->GetNormalWidth()); + scrollBar_->SetNormalWidth(scrollBarTheme->GetNormalWidth()); + scrollBar_->SetActiveWidth(scrollBarTheme->GetActiveWidth()); + scrollBar_->SetMinHeight(scrollBarTheme->GetMinHeight()); + scrollBar_->SetMinDynamicHeight(scrollBarTheme->GetMinDynamicHeight()); + scrollBar_->SetReservedHeight(scrollBarTheme->GetReservedHeight()); + scrollBar_->SetTouchWidth(scrollBarTheme->GetTouchWidth()); + scrollBar_->SetBackgroundColor(scrollBarTheme->GetBackgroundColor()); + scrollBar_->SetForegroundColor(scrollBarTheme->GetForegroundColor()); + scrollBar_->SetPadding(scrollBarTheme->GetPadding()); + } +} + +void DOMList::CreateOrUpdateList() +{ + if (!listComponent_) { + listComponent_ = AceType::MakeRefPtr(); + } + + listComponent_->SetDirection(flexDirection_); + if (flexDirection_ == FlexDirection::COLUMN || flexDirection_ == FlexDirection::COLUMN_REVERSE) { + listComponent_->SetScrollPage(scrollPage_); + boxComponent_->SetScrollPage(scrollPage_); + } else { + listComponent_->SetScrollPage(false); + boxComponent_->SetScrollPage(false); + } + listComponent_->SetChainProperty(chainProperty_); + listComponent_->SetChainAnimation(SupportChainAnimation()); + if (useDefaultOverSpringProperty_) { + if (SupportChainAnimation()) { + listComponent_->SetOverSpringProperty(SpringChainProperty::GetDefaultOverSpringProperty()); + } else { + listComponent_->SetOverSpringProperty(Scrollable::GetDefaultOverSpringProperty()); + } + } else { + listComponent_->SetOverSpringProperty(1.0, overStiffness_, overDamping_); + } + + listComponent_->SetFlexAlign(crossAxisAlign_); + listComponent_->SetRightToLeft(IsRightToLeft()); + listComponent_->SetOnRequestItem(onRequestItem_); + listComponent_->SetOnScroll(onScroll_); + listComponent_->SetOnScrollBottom(onScrollBottom_); + listComponent_->SetOnScrollTop(onScrollTop_); + listComponent_->SetOnScrollEnd(onScrollEnd_); + listComponent_->SetOnScrollTouchUp(onScrollTouchUp_); + if (cachedCount_ > 0) { + listComponent_->SetCachedCount(cachedCount_); + } + listComponent_->SetBeginIndex(beginIndex_); + listComponent_->SetEndIndex(endIndex_); + listComponent_->SetRepeatedLength(repeatedLength_); + listComponent_->SetIndexOffset(indexOffset_); + listComponent_->SetColumnCount(listColumns_); + listComponent_->SetItemExtent(itemExtent_); + listComponent_->SetUpdateEffect(updateEffect_); + if (listColumns_ > 1) { + // itemScale is not supported in 'columns > 1' case. + itemScale_ = false; + } + listComponent_->SetItemScale(itemScale_); + listComponent_->MarkCenterLayout(centerLayout_); + listComponent_->SetSupportItemCenter(itemCenter_); + if (edgeEffect_ == EdgeEffect::SPRING) { + listComponent_->SetScrollEffect(AceType::MakeRefPtr()); + } else if (edgeEffect_ == EdgeEffect::FADE) { + listComponent_->SetScrollEffect(AceType::MakeRefPtr(fadeColor_)); + } else { + listComponent_->SetScrollEffect(AceType::MakeRefPtr(EdgeEffect::NONE)); + } + + // keep list state during update. + if (!listComponent_->GetPositionController()) { + listComponent_->SetPositionController(AceType::MakeRefPtr()); + } + listComponent_->GetPositionController()->SetInitialIndex(initialIndex_); + listComponent_->GetPositionController()->SetInitialOffset(initialOffset_); + + SetScrollBar(); + ResetInitializedStyle(); + InitScrollBarWithSpecializedStyle(); + SetChildActive(); +} + +void DOMList::CreateOrUpdateIndexer() +{ + CreateOrUpdateList(); + bool isCircle = circleMode_.second ? circleMode_.first : SystemProperties::GetDeviceType() == DeviceType::WATCH; + bool bubble = bubble_.second ? bubble_.first : true; + bool multiLanguage = multiLanguage_.second ? multiLanguage_.first : false; + if (!indexerComponent_) { + if (indexerAlphabet_.empty()) { + indexerComponent_ = AceType::MakeRefPtr( + listComponent_, isCircle, IsRightToLeft(), bubble, multiLanguage); + } else { + indexerComponent_ = AceType::MakeRefPtr( + listComponent_, indexerAlphabet_, isCircle, IsRightToLeft(), bubble, multiLanguage); + } + if (isCircle && !onIndexerChange_.IsEmpty()) { + indexerComponent_->SetIndexerChangeEvent(onIndexerChange_); + } + } + indexerComponent_->SetBubbleEnabled(bubble_.first); +} + +void DOMList::SetScrollBar() +{ + if (displayMode_ == DisplayMode::ON || displayMode_ == DisplayMode::AUTO) { + if (shapeMode_ == ShapeMode::ROUND || shapeMode_ == ShapeMode::RECT) { + scrollBar_ = AceType::MakeRefPtr(displayMode_, shapeMode_); + } else { + scrollBar_ = AceType::MakeRefPtr(displayMode_, ShapeMode::DEFAULT); + } + if (IsRightToLeft()) { + scrollBar_->SetPositionMode(PositionMode::LEFT); + } + } else { + scrollBar_ = AceType::MakeRefPtr(DisplayMode::OFF, ShapeMode::DEFAULT); + } + listComponent_->SetScrollBar(scrollBar_); +} + +void DOMList::InitScrollBarWithSpecializedStyle() +{ + if (!scrollBar_) { + return; + } + + if (scrollbarColor_.first) { + scrollBar_->SetForegroundColor(scrollbarColor_.second); + } + if (scrollbarWidth_.first) { + scrollBar_->SetInactiveWidth(scrollbarWidth_.second); + scrollBar_->SetNormalWidth(scrollbarWidth_.second); + scrollBar_->SetActiveWidth(scrollbarWidth_.second); + scrollBar_->SetTouchWidth(scrollbarWidth_.second); + } +} + +void DOMList::SetChildActive() +{ + if (selectedItem_.empty()) { + return; + } + for (const auto& child : GetChildList()) { + auto childItem = AceType::DynamicCast(child); + if (!childItem) { + continue; + } + auto listItem = AceType::DynamicCast(childItem->GetSpecializedComponent()); + if (!listItem) { + continue; + } + auto itemKey = childItem->GetItemKey(); + bool isItemActive = !itemKey.empty() && selectedItem_ == itemKey; + if (listItem->IsActive() != isItemActive) { + listItem->SetIsActive(isItemActive); + childItem->MarkNeedUpdate(); + } + } +} + +bool DOMList::SetSpecializedStyle(const std::pair& style) +{ + static const LinearMapNode styleOperators[] = { + { DOM_ALIGN_ITEMS, + [](const std::string& val, DOMList& list) { + list.crossAxisAlign_ = ConvertStrToFlexAlign(val); + return true; + } }, + { DOM_BACKGROUND_COLOR, + [](const std::string& val, DOMList& list) { + // The list component uses backgroundColor as the foreground color. + // The backgroundColor still needs to be set to the background color of the box component, so return + // false. + list.backgroundColor_ = list.ParseColor(val); + return false; + } }, + { DOM_LIST_COLUMNS, + [](const std::string& val, DOMList& list) { + list.listColumns_ = StringUtils::StringToInt(val); + return true; + } }, + { DOM_LIST_DIVIDER_COLOR, + [](const std::string& val, DOMList& list) { + list.dividerColor_ = list.ParseColor(val); + return true; + } }, + { DOM_LIST_DIVIDER_HEIGHT, + [](const std::string& val, DOMList& list) { + list.dividerHeight_ = list.ParseDimension(val); + return true; + } }, + { DOM_LIST_DIVIDER_LENGTH, + [](const std::string& val, DOMList& list) { + list.dividerLength_ = list.ParseDimension(val); + return true; + } }, + { DOM_LIST_DIVIDER_ORIGIN, + [](const std::string& val, DOMList& list) { + list.dividerOrigin_ = list.ParseDimension(val); + return true; + } }, + { DOM_FADE_COLOR, + [](const std::string& val, DOMList& list) { + list.fadeColor_ = list.ParseColor(val); + return true; + } }, + { DOM_FLEX_DIRECTION, + [](const std::string& val, DOMList& list) { + list.flexDirection_ = val == DOM_FLEX_ROW ? FlexDirection::ROW : FlexDirection::COLUMN; + return true; + } }, + { DOM_LIST_ITEM_EXTENT, + [](const std::string& val, DOMList& list) { + list.itemExtent_ = list.ParseDimension(val); + return true; + } }, + { DOM_SCROLL_OVER_SCROLL_EFFECT, + [](const std::string& val, DOMList& list) { + if (val == DOM_SCROLL_EFFECT_SPRING) { + list.edgeEffect_ = EdgeEffect::SPRING; + } else if (val == DOM_SCROLL_EFFECT_FADE) { + list.edgeEffect_ = EdgeEffect::FADE; + } else { + list.edgeEffect_ = EdgeEffect::NONE; + } + return true; + } }, + { DOM_SCROLL_SCROLLBAR_COLOR, + [](const std::string& val, DOMList& list) { + list.scrollbarColor_.first = true; + list.scrollbarColor_.second = list.ParseColor(val); + return true; + } }, + { DOM_SCROLL_SCROLLBAR_WIDTH, + [](const std::string& val, DOMList& list) { + list.scrollbarWidth_.first = true; + auto width = list.ParseDimension(val); + list.scrollbarWidth_.second = width.IsValid() ? width : Dimension(); + return true; + } }, + }; + auto operatorIter = BinarySearchFindIndex(styleOperators, ArraySize(styleOperators), style.first.c_str()); + if (operatorIter != -1) { + return styleOperators[operatorIter].value(style.second, *this); + } + return false; +} + +void DOMList::OnChildNodeAdded(const RefPtr& child, int32_t slot) +{ + auto childListItem = AceType::DynamicCast(child); + if (!childListItem) { + LOGE("child is not list item, add to list failed."); + return; + } + + // childIndex is generated by js framework, just the position of this new list item should be added into the list. + auto childIndex = childListItem->GetItemIndex(); + LOGD("DOMList AddChild %{public}s, childIndex: %{public}d", child->GetTag().c_str(), childIndex); + if (childIndex != DEFAULT_NODE_INDEX) { + if (indexer_) { + needUpdateIds_ = true; + indexerComponent_->InsertChild(childIndex, child->GetRootComponent()); + } else { + listComponent_->InsertChild(childIndex, child->GetRootComponent()); + } + } else { + if (indexer_) { + needUpdateIds_ = true; + indexerComponent_->AppendChild(child->GetRootComponent()); + } else { + listComponent_->AppendChild(child->GetRootComponent()); + } + } + auto item = AceType::DynamicCast(childListItem->GetSpecializedComponent()); + if (!item) { + return; + } + if (!selectedItem_.empty() && !childListItem->GetItemKey().empty() && + (selectedItem_ == childListItem->GetItemKey())) { + item->SetIsActive(true); + } else { + item->SetIsActive(false); + } +} + +void DOMList::CallSpecializedMethod(const std::string& method, const std::string& args) +{ + if (method == DOM_LIST_METHOD_SCROLL_TO) { + std::unique_ptr argsValue = JsonUtil::ParseJsonString(args); + if (!argsValue || !argsValue->IsArray() || argsValue->GetArraySize() != 1) { + LOGE("parse args error"); + return; + } + std::unique_ptr indexValue = argsValue->GetArrayItem(0)->GetValue("index"); + if (!indexValue || !indexValue->IsNumber()) { + LOGE("get index failed"); + return; + } + int32_t index = indexValue->GetInt(); + ScrollToMethod(index); + } else if (method == DOM_LIST_METHOD_SCROLL_ARROW) { + std::unique_ptr argsValue = JsonUtil::ParseJsonString(args); + if (!argsValue || !argsValue->IsArray() || argsValue->GetArraySize() != 1) { + LOGE("parse args error"); + return; + } + std::unique_ptr scrollArrowParams = argsValue->GetArrayItem(0); + bool reverse = scrollArrowParams->GetBool("reverse", false); + bool isSmooth = scrollArrowParams->GetBool("smooth", false); + ScrollArrowMethod(reverse, isSmooth); + } else if (method == DOM_LIST_METHOD_SCROLL_TOP || method == DOM_LIST_METHOD_SCROLL_BOTTOM) { + ScrollToEdgeMethod(method, args); + } else if (method == DOM_LIST_METHOD_SCROLL_PAGE) { + ScrollPageMethod(method, args); + } else if (method == DOM_LIST_METHOD_EXPAND_GROUP || method == DOM_LIST_METHOD_COLLAPSE_GROUP) { + std::unique_ptr argsValue = JsonUtil::ParseJsonString(args); + std::string groupId; + if (argsValue && argsValue->IsArray() && argsValue->GetArraySize() == 1) { + std::unique_ptr expandParams = argsValue->GetArrayItem(0); + std::unique_ptr value = expandParams->GetValue("groupid"); + if (value && value->IsString()) { + groupId = value->GetString(); + } + } + if (method == DOM_LIST_METHOD_EXPAND_GROUP) { + ExpandGroup(groupId, true); + } else { + ExpandGroup(groupId, false); + } + } else if (method == DOM_ROTATION) { + auto controller = listComponent_->GetRotationController(); + if (controller) { + LOGD("Rotation focus list request"); + controller->RequestRotation(true); + } + } else { + LOGE("CallSpecializedMethod: undefined method :%{private}s", method.c_str()); + EventReport::SendComponentException(ComponentExcepType::LIST_COMPONENT_ERR); + } +} + +void DOMList::OnScrollBy(double dx, double dy, bool isSmooth) +{ + ScrollByMethod(dx, dy, isSmooth); +} + +void DOMList::ExpandGroup(const std::string& groupId, bool expand) +{ + if (!listComponent_) { + LOGE("DOMList ExpandGroup listComponent_ is null"); + EventReport::SendComponentException(ComponentExcepType::LIST_COMPONENT_ERR); + return; + } + if (groupId.empty()) { + listComponent_->SetGroupState(INDEX_EXPAND_ALL, expand); + } + auto children = GetChildList(); + for (const auto& child : children) { + auto itemGroup = AceType::DynamicCast(child); + if (!itemGroup) { + continue; + } + if (groupId.empty() || groupId == itemGroup->GetGroupId()) { + if (!groupId.empty()) { + listComponent_->SetGroupState(itemGroup->GetItemIndex(), expand); + itemGroup->Update(); + break; + } + itemGroup->Update(); + } + } +} + +void DOMList::ScrollToMethod(int32_t index) +{ + if (!listComponent_) { + LOGE("DOMList ScrollToMethod listComponent_ is null"); + EventReport::SendComponentException(ComponentExcepType::LIST_COMPONENT_ERR); + return; + } + auto controller = listComponent_->GetPositionController(); + if (!controller) { + LOGE("get controller failed"); + EventReport::SendComponentException(ComponentExcepType::LIST_COMPONENT_ERR); + return; + } + controller->JumpTo(index); +} + +void DOMList::ScrollByMethod(double x, double y, bool isSmooth) +{ + if (!listComponent_) { + LOGE("DOMList ScrollByMethod listComponent_ is null"); + EventReport::SendComponentException(ComponentExcepType::LIST_COMPONENT_ERR); + return; + } + auto controller = listComponent_->GetPositionController(); + if (!controller) { + LOGE("get controller failed"); + EventReport::SendComponentException(ComponentExcepType::LIST_COMPONENT_ERR); + return; + } + controller->ScrollBy(x, y, isSmooth); +} + +void DOMList::ScrollArrowMethod(bool reverse, bool isSmooth) +{ + if (!listComponent_) { + LOGE("DOMList ScrollArrowMethod listComponent_ is null"); + EventReport::SendComponentException(ComponentExcepType::LIST_COMPONENT_ERR); + return; + } + auto controller = listComponent_->GetPositionController(); + if (!controller) { + LOGE("get controller failed"); + EventReport::SendComponentException(ComponentExcepType::LIST_COMPONENT_ERR); + return; + } + controller->ScrollArrow(scrollDistance_, reverse, isSmooth); +} + +void DOMList::ScrollToEdgeMethod(const std::string& method, const std::string& args) +{ + if (!listComponent_) { + LOGE("DOMList ScrollToEdgeMethod listComponent_ is null"); + EventReport::SendComponentException(ComponentExcepType::LIST_COMPONENT_ERR); + return; + } + auto controller = listComponent_->GetPositionController(); + if (!controller) { + LOGE("get controller failed"); + EventReport::SendComponentException(ComponentExcepType::LIST_COMPONENT_ERR); + return; + } + + std::unique_ptr argsValue = JsonUtil::ParseJsonString(args); + if (!argsValue || !argsValue->IsArray() || argsValue->GetArraySize() != 1) { + LOGE("parse args error"); + return; + } + std::unique_ptr params = argsValue->GetArrayItem(0); + bool isSmooth = params->GetBool("smooth", false); + if (method == DOM_LIST_METHOD_SCROLL_TOP) { + controller->ScrollToEdge(ScrollEdgeType::SCROLL_TOP, isSmooth); + } else { + controller->ScrollToEdge(ScrollEdgeType::SCROLL_BOTTOM, isSmooth); + } +} + +void DOMList::ScrollPageMethod(const std::string& method, const std::string& args) +{ + if (!listComponent_) { + LOGE("DOMList ScrollPageMethod listComponent_ is null"); + EventReport::SendComponentException(ComponentExcepType::LIST_COMPONENT_ERR); + return; + } + auto controller = listComponent_->GetPositionController(); + if (!controller) { + LOGE("get controller failed"); + EventReport::SendComponentException(ComponentExcepType::LIST_COMPONENT_ERR); + return; + } + + std::unique_ptr argsValue = JsonUtil::ParseJsonString(args); + if (!argsValue || !argsValue->IsArray() || argsValue->GetArraySize() != 1) { + LOGE("parse args error"); + return; + } + std::unique_ptr params = argsValue->GetArrayItem(0); + bool reverse = params->GetBool("reverse", false); + bool isSmooth = params->GetBool("smooth", false); + controller->ScrollPage(reverse, isSmooth); +} + +Offset DOMList::GetCurrentOffset() const +{ + if (!listComponent_) { + LOGE("DOMList GetCurrentOffset listComponent_ is null"); + EventReport::SendComponentException(ComponentExcepType::LIST_COMPONENT_ERR); + return Offset::Zero(); + } + auto controller = listComponent_->GetPositionController(); + if (!controller) { + LOGE("get controller failed"); + EventReport::SendComponentException(ComponentExcepType::LIST_COMPONENT_ERR); + return Offset::Zero(); + } + return controller->GetCurrentOffset(); +} + +void DOMList::OnChildNodeRemoved(const RefPtr& child) +{ + if (!listComponent_ || !child) { + LOGE("DOMList OnChildNodeRemoved listComponent_ is null"); + return; + } + LOGD("DOMList %{public}s, remove child %{public}s", GetTag().c_str(), child->GetTag().c_str()); + listComponent_->RemoveChild(child->GetRootComponent()); +} + +void DOMList::PrepareSpecializedComponent() +{ + if (indexer_) { + CreateOrUpdateIndexer(); + } else { + CreateOrUpdateList(); + } +} + +void DOMList::OnMounted(const RefPtr& parentNode) +{ + auto parent = parentNode; + while (parent) { + if (parent->GetTag() == DOM_NODE_TAG_REFRESH) { + listComponent_->SetInRefresh(true); + break; + } + parent = parent->GetParentNode(); + } +} + +RefPtr DOMList::GetAccessibilityNode() +{ + auto pipelineContext = pipelineContext_.Upgrade(); + if (!pipelineContext) { + return RefPtr(); + } + auto accessibilityManager = pipelineContext->GetAccessibilityManager(); + if (!accessibilityManager) { + return RefPtr(); + } + auto accessibilityNode = accessibilityManager->GetAccessibilityNodeById(GetNodeId()); + if (!accessibilityNode) { + return RefPtr(); + } + + return accessibilityNode; +} + +void DOMList::UpdateAccessibilityOrder() +{ + auto accessibilityNode = GetAccessibilityNode(); + if (!accessibilityNode) { + return; + } + + if (listComponent_) { + listComponent_->UpdateListItemIndex(); + } + + children_.sort([](const RefPtr& node1, const RefPtr& node2) { + RefPtr item1, item2; + auto itemNode1 = DOMListItem::GetDOMListItem(node1); + auto itemNode2 = DOMListItem::GetDOMListItem(node2); + if (itemNode1) { + item1 = itemNode1->GetListItemComponent(); + } + if (itemNode2) { + item2 = itemNode2->GetListItemComponent(); + } + if (item1 && item2) { + return item1->GetIndex() < item2->GetIndex(); + } + return false; + }); + + std::list> children; + auto nodes = accessibilityNode->GetChildList(); + for (const auto& child : children_) { + auto item = DOMListItem::GetDOMListItem(child); + if (item) { + auto it = std::find_if( + nodes.begin(), nodes.end(), [nodeId = item->GetNodeId()](const RefPtr& node) { + return node->GetNodeId() == nodeId; + }); + if (it != nodes.end()) { + children.emplace_back(*it); + } + } + } + if (!children.empty()) { + accessibilityNode->ResetChildList(children); + } else { + LOGW("Update accessibility node order failed."); + } +} + +void DOMList::UpdateAccessibilityByVisible() +{ + auto pipelineContext = pipelineContext_.Upgrade(); + if (!pipelineContext) { + return; + } + auto accessibilityManager = pipelineContext->GetAccessibilityManager(); + if (!accessibilityManager) { + return; + } + auto accessibilityNode = accessibilityManager->GetAccessibilityNodeById(GetNodeId()); + if (!accessibilityNode) { + return; + } + + bool visibleRange = false; + std::list> children; + for (auto& child : children_) { + auto childAccessibilityNode = accessibilityManager->GetAccessibilityNodeById(child->GetNodeId()); + if (childAccessibilityNode && + childAccessibilityNode->GetWidth() != 0 && childAccessibilityNode->GetHeight() != 0) { + children.emplace_back(childAccessibilityNode); + visibleRange = true; + } else { + if (visibleRange) { + break; // Just load the visible range item. + } + } + } + if (!children.empty()) { + accessibilityNode->ResetChildList(children); + } +} + +void DOMList::OnPageLoadFinish() +{ + if (listComponent_) { + listComponent_->SetPageReady(true); + } + + auto accessibilityNode = GetAccessibilityNode(); + if (!accessibilityNode) { + return; + } + + accessibilityNode->SetActionUpdateIdsImpl([weakList = AceType::WeakClaim(this), indexer = this->indexer_]() { + auto list = weakList.Upgrade(); + if (list) { + if (indexer && list->needUpdateIds_) { + list->UpdateAccessibilityOrder(); + list->needUpdateIds_ = false; + } + + list->UpdateAccessibilityByVisible(); + } + }); +} + +void DOMList::AdjustSpecialParamInLiteMode() +{ + itemScale_ = false; +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_list.h b/frameworks/bridge/common/dom/dom_list.h new file mode 100644 index 00000000..49f12e6d --- /dev/null +++ b/frameworks/bridge/common/dom/dom_list.h @@ -0,0 +1,205 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_LIST_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_LIST_H + +#include "base/utils/macros.h" +#include "core/components/indexer/indexer_list_component.h" +#include "core/components/list/list_component.h" +#include "frameworks/bridge/common/dom/dom_node.h" +#include "frameworks/bridge/common/dom/dom_type.h" + +namespace OHOS::Ace::Framework { + +class ACE_EXPORT DOMList final : public DOMNode { + DECLARE_ACE_TYPE(DOMList, DOMNode); + +public: + DOMList(NodeId nodeId, const std::string& nodeName); + ~DOMList() override = default; + + void CallSpecializedMethod(const std::string& method, const std::string& args) override; + void OnPageLoadFinish() override; + void OnScrollBy(double dx, double dy, bool isSmooth) override; + Offset GetCurrentOffset() const; + + RefPtr GetSpecializedComponent() override + { + if (indexer_) { + return indexerComponent_; + } else { + return listComponent_; + } + } + + FlexDirection GetDirection() const + { + return flexDirection_; + } + + bool GetItemScale() const + { + return itemScale_; + } + + bool GetItemOpacity() const + { + return itemOpacity_; + } + + bool NeedVibrate() const + { + return scrollVibrate_; + } + + bool GetItemCenter() const + { + return itemCenter_; + } + + bool NeedDivider() const + { + return needDivider_; + } + + const Dimension& GetDividerHeight() const + { + return dividerHeight_; + } + + const Dimension& GetDividerLength() const + { + return dividerLength_; + } + + const Dimension& GetDividerOrigin() const + { + return dividerOrigin_; + } + + Color GetDividerColor() const + { + return dividerColor_; + } + + void AdjustSpecialParamInLiteMode() override; + +protected: + void OnChildNodeAdded(const RefPtr& child, int32_t slot) override; + void OnChildNodeRemoved(const RefPtr& child) override; + bool SetSpecializedAttr(const std::pair& attr) override; + bool SetSpecializedStyle(const std::pair& style) override; + bool AddSpecializedEvent(int32_t pageId, const std::string& event) override; + void PrepareSpecializedComponent() override; + void ResetInitializedStyle() override; + void OnMounted(const RefPtr& parentNode) override; + +private: + void CreateOrUpdateList(); + + void CreateOrUpdateIndexer(); + + RefPtr GetAccessibilityNode(); + void UpdateAccessibilityOrder(); + void UpdateAccessibilityByVisible(); + + void SetScrollBar(); + + void SetChildActive(); + + void ExpandGroup(const std::string& groupId, bool expand = true); + void ScrollToMethod(int32_t index); + void ScrollByMethod(double x, double y, bool isSmooth); + void ScrollArrowMethod(bool reverse, bool isSmooth); + void ScrollToEdgeMethod(const std::string& method, const std::string& args); + void ScrollPageMethod(const std::string& method, const std::string& args); + + void ParseIndexer(const std::string& indexerAlphabet); + bool SupportChainAnimation() const; + + void InitScrollBarWithSpecializedStyle(); + + // List columns default value is 1 + int32_t listColumns_ = 1; + int32_t cachedCount_ = 0; + bool itemScale_ = true; + bool itemOpacity_ = false; + bool itemCenter_ = false; + bool centerLayout_ = false; + bool scrollVibrate_ = true; + bool scrollPage_ = false; + bool chainAnimation_ = false; + SpringChainProperty chainProperty_; + bool useDefaultOverSpringProperty_ = true; + double overStiffness_ = 0.0; + double overDamping_ = 0.0; + bool updateEffect_ = false; + double scrollDistance_ = 0.0; + Dimension itemExtent_; + std::pair scrollbarWidth_; + std::pair scrollbarColor_; + + EventMarker onRequestItem_; + + bool indexer_ = false; + + // first:value second:tag whether user defined + std::pair circleMode_ = { false, false }; + std::pair bubble_ = { true, false }; + std::pair multiLanguage_ = { false, false }; + + std::vector indexerAlphabet_; + bool needUpdateIds_ = false; + + // list divider + bool needDivider_ = false; + Dimension dividerHeight_ = DIVIDER_DEFAULT_HEIGHT; + Dimension dividerLength_; + Dimension dividerOrigin_; + Color dividerColor_ = Color::TRANSPARENT; + + EventMarker onScroll_; + EventMarker onScrollTop_; + EventMarker onScrollBottom_; + EventMarker onScrollEnd_; + EventMarker onScrollTouchUp_; + EventMarker onIndexerChange_; + FlexDirection flexDirection_ { FlexDirection::COLUMN }; + FlexAlign crossAxisAlign_ { FlexAlign::STRETCH }; + EdgeEffect edgeEffect_ = EdgeEffect::SPRING; + DisplayMode displayMode_ = DisplayMode::OFF; + ShapeMode shapeMode_ = ShapeMode::DEFAULT; + Color fadeColor_ = Color::GRAY; + Color backgroundColor_ = Color::TRANSPARENT; + std::string selectedItem_; + + RefPtr scrollBar_; + + int32_t beginIndex_ = LIST_PARAM_INVAID; + int32_t endIndex_ = LIST_PARAM_INVAID; + int32_t repeatedLength_ = 0; + int32_t indexOffset_ = 0; + + int32_t initialIndex_ = 0; + double initialOffset_ = 0.0; + + RefPtr listComponent_; + RefPtr indexerComponent_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_LIST_H diff --git a/frameworks/bridge/common/dom/dom_list_item.cpp b/frameworks/bridge/common/dom/dom_list_item.cpp new file mode 100644 index 00000000..dcd3e7af --- /dev/null +++ b/frameworks/bridge/common/dom/dom_list_item.cpp @@ -0,0 +1,432 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_list_item.h" + +#include "base/log/event_report.h" +#include "base/utils/linear_map.h" +#include "base/utils/utils.h" +#include "core/components/focus_animation/focus_animation_theme.h" +#include "frameworks/bridge/common/dom/dom_list.h" +#include "frameworks/bridge/common/dom/dom_list_item_group.h" +#include "frameworks/bridge/common/dom/dom_reflect_map.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { + +DOMListItem::DOMListItem(NodeId nodeId, const std::string& nodeName, int32_t itemIndex) : DOMNode(nodeId, nodeName) +{ + itemIndex_ = itemIndex; + listItemComponent_ = AceType::MakeRefPtr(type_, RefPtr()); +} + +bool DOMListItem::SetSpecializedAttr(const std::pair& attr) +{ + auto parent = AceType::DynamicCast(parentNode_.Upgrade()); + if (!parent) { + auto group = AceType::DynamicCast(parentNode_.Upgrade()); + if (!group) { + LOGE("DOMListItem parent is null"); + EventReport::SendComponentException(ComponentExcepType::LIST_ITEM_ERR); + return false; + } else { + LOGD("DOMListItem parent is list item group"); + } + } else { + LOGD("DOMListItem parent is list"); + } + + if (attr.first == DOM_LISTITEM_TYPE) { + type_ = attr.second; + return true; + } else if (attr.first == DOM_LISTITEM_CARD_TYPE) { + isCard_ = StringToBool(attr.second); + return true; + } else if (attr.first == DOM_LISTITEM_CARD_BLUR) { + isCardBlur_ = StringToBool(attr.second); + return true; + } else if (attr.first == DOM_LISTITEM_STICKY) { + sticky_ = StringToBool(attr.second); + if (attr.second == "normal" || attr.second == "true") { + sticky_ = true; + stickyMode_ = StickyMode::NORMAL; + } else if (attr.second == "opacity") { + sticky_ = true; + stickyMode_ = StickyMode::OPACITY; + } else { + sticky_ = false; + stickyMode_ = StickyMode::NONE; + } + return true; + } else if (attr.first == DOM_LISTITEM_IS_TITLE) { + isTitle_ = StringToBool(attr.second); + return true; + } else if (attr.first == DOM_LISTITEM_CLICK_EFFECT) { + clickEffect_ = StringToBool(attr.second); + return true; + } else if (attr.first == DOM_LISTITEM_STICKY_RADIUS) { + stickyRadius_ = ParseDimension(attr.second); + } else if (attr.first == DOM_LISTITEM_INDEX_KEY) { + indexKey_ = attr.second; + return true; + } else if (attr.first == DOM_LISTITEM_PRIMARY) { + primary_ = StringToBool(attr.second); + return true; + } else if (attr.first == DOM_LISTITEM_ACTIVE) { + isActive_ = StringToBool(attr.second); + return true; + } + return false; +} + +void DOMListItem::SetCardThemeAttrs() +{ + cardTheme_ = GetTheme(); + if (!cardTheme_) { + LOGE("cardTheme is null"); + EventReport::SendComponentException(ComponentExcepType::GET_THEME_ERR); + return; + } + if (!boxComponent_) { + LOGE("boxComponent is null"); + return; + } + + if (!isCard_) { + LOGW("it is not card"); + return; + } + RefPtr backDecoration = boxComponent_->GetBackDecoration(); + if (!backDecoration) { + RefPtr decoration = AceType::MakeRefPtr(); + decoration->SetBackgroundColor(cardTheme_->GetBackgroundColor()); + decoration->SetBorderRadius(Radius(cardTheme_->GetBorderRadius())); + boxComponent_->SetBackDecoration(decoration); + } + if (backDecoration && !backDecoration->GetBorder().HasRadius()) { + backDecoration->SetBorderRadius(Radius(cardTheme_->GetBorderRadius())); + } + if (backDecoration && (backDecoration->GetBackgroundColor() == Color::TRANSPARENT)) { + backDecoration->SetBackgroundColor(cardTheme_->GetBackgroundColor()); + } + if (isCardBlur_) { + RefPtr frontDecoration = boxComponent_->GetFrontDecoration(); + if (!frontDecoration) { + RefPtr frontDecoration = AceType::MakeRefPtr(); + frontDecoration->SetBlurRadius(cardTheme_->GetBlurRadius()); + boxComponent_->SetFrontDecoration(frontDecoration); + } + if (frontDecoration && !frontDecoration->GetBlurRadius().IsValid()) { + frontDecoration->SetBlurRadius(cardTheme_->GetBlurRadius()); + } + } else { + RefPtr frontDecoration = boxComponent_->GetFrontDecoration(); + if (frontDecoration && frontDecoration->GetBlurRadius().IsValid()) { + frontDecoration->SetBlurRadius(Dimension()); + } + } + SetCardTransitionEffect(); +} + +void DOMListItem::SetCardTransitionEffect() +{ + // set default style for card if user did not set clickSpringEffect + if (!transformComponent_) { + transformComponent_ = AceType::MakeRefPtr(); + } + if (!hasClickEffect_) { + transformComponent_->SetClickSpringEffectType(ClickSpringEffectType::MEDIUM); + } + if (!hasTransitionAnimation_) { + transformComponent_->SetTransitionEffect(TransitionEffect::UNFOLD); + if (listItemComponent_) { + listItemComponent_->SetTransitionEffect(TransitionEffect::UNFOLD); + } + } else { + listItemComponent_->SetTransitionEffect(transformComponent_->GetTransitionEffect()); + } +} + +bool DOMListItem::SetSpecializedStyle(const std::pair& style) +{ + static const LinearMapNode listItemStyleOperators[] = { + { DOM_ALIGN_ITEMS, [](const std::string& val, + DOMListItem& listItem) { listItem.flexCrossAlign_ = ConvertStrToFlexAlign(val); } }, + { DOM_ALIGN_SELF, [](const std::string& val, + DOMListItem& listItem) { listItem.alignSelf_ = ConvertStrToFlexAlign(val); } }, + { DOM_FLEX_DIRECTION, [](const std::string& val, + DOMListItem& listItem) { listItem.flexDirection_ = ConvertStrToFlexDirection(val); } }, + { DOM_JUSTIFY_CONTENT, [](const std::string& val, + DOMListItem& listItem) { listItem.flexMainAlign_ = ConvertStrToFlexAlign(val); } }, + }; + auto operatorIter = BinarySearchFindIndex(listItemStyleOperators, + ArraySize(listItemStyleOperators), style.first.c_str()); + if (operatorIter != -1) { + listItemStyleOperators[operatorIter].value(style.second, *this); + return true; + } + static const LinearMapNode listItemRadiusStyleOperators[] = { + // Set border radius + { DOM_BORDER_BOTTOM_LEFT_RADIUS, + [](const std::string& val, DOMListItem& listItem) { + listItem.bottomLeftRadius_ = Radius(listItem.ParseDimension(val)); + } }, + { DOM_BORDER_BOTTOM_RIGHT_RADIUS, + [](const std::string& val, DOMListItem& listItem) { + listItem.bottomRightRadius_ = Radius(listItem.ParseDimension(val)); + } }, + { DOM_BORDER_RADIUS, + [](const std::string& val, DOMListItem& listItem) { + listItem.topLeftRadius_ = Radius(listItem.ParseDimension(val)); + listItem.topRightRadius_ = Radius(listItem.ParseDimension(val)); + listItem.bottomLeftRadius_ = Radius(listItem.ParseDimension(val)); + listItem.bottomRightRadius_ = Radius(listItem.ParseDimension(val)); + } }, + { DOM_BORDER_TOP_LEFT_RADIUS, + [](const std::string& val, DOMListItem& listItem) { + listItem.topLeftRadius_ = Radius(listItem.ParseDimension(val)); + } }, + { DOM_BORDER_TOP_RIGHT_RADIUS, + [](const std::string& val, DOMListItem& listItem) { + listItem.topRightRadius_ = Radius(listItem.ParseDimension(val)); + } }, + }; + // The radius still needs to be set to the radius of the box component, so return false. + auto radiusIter = BinarySearchFindIndex(listItemRadiusStyleOperators, + ArraySize(listItemRadiusStyleOperators), style.first.c_str()); + if (radiusIter != -1) { + listItemRadiusStyleOperators[radiusIter].value(style.second, *this); + return false; + } + + if (style.first == DOM_LISTITEM_COLUMN_SPAN) { + auto columnSpan = StringUtils::StringToInt(style.second); + if (columnSpan <= 0) { + LOGD("ListItem column-span must greater than 0"); + columnSpan = DEFAULT_COLUMN_SPAN; + } + columnSpan_ = columnSpan; + return true; + } + return false; +} + +bool DOMListItem::AddSpecializedEvent(int32_t pageId, const std::string& event) +{ + LOGD("DOMListItem AddEvent"); + if (event == DOM_CLICK) { + clickEventId_ = EventMarker(GetNodeIdForEvent(), event, pageId); + listItemComponent_->SetClickEventId(clickEventId_); + return true; + } else if (event == DOM_LIST_ITEM_EVENT_STICKY) { + stickyEventId_ = EventMarker(GetNodeIdForEvent(), event, pageId); + listItemComponent_->SetStickyEventId(stickyEventId_); + return true; + } else { + return false; + } +} + +void DOMListItem::AddListItem(const RefPtr& node, int32_t slot) +{ + const auto& childComponent = node->GetRootComponent(); + if (!flexComponent_) { + flexComponent_ = AceType::MakeRefPtr( + flexDirection_, flexMainAlign_, flexCrossAlign_, std::list>()); + } + flexComponent_->InsertChild(slot, childComponent); +} + +void DOMListItem::RemoveListItem(const RefPtr& node) +{ + const auto& childComponent = node->GetRootComponent(); + if (flexComponent_) { + flexComponent_->RemoveChild(childComponent); + } +} + +void DOMListItem::OnChildNodeAdded(const RefPtr& child, int32_t slot) +{ + if (child) { + AddListItem(child, slot); + } +} + +void DOMListItem::OnChildNodeRemoved(const RefPtr& child) +{ + if (child) { + RemoveListItem(child); + } +} + +void DOMListItem::OnMounted(const RefPtr& parentNode) +{ + if (!parentNode) { + return; + } + if (parentNode->GetTag() == DOM_NODE_TAG_LIST) { + const auto& parentNodeTmp = AceType::DynamicCast(parentNode); + if (listItemComponent_ && parentNodeTmp) { + listItemComponent_->SetSupportScale(parentNodeTmp->GetItemScale()); + listItemComponent_->SetSupportOpacity(parentNodeTmp->GetItemOpacity()); + listItemComponent_->MarkNeedVibrate(parentNodeTmp->NeedVibrate()); + SetDividerStyle(parentNode); + } + } else if (parentNode->GetTag() == DOM_NODE_TAG_LIST_ITEM_GROUP) { + const auto& parentNodeTmp = AceType::DynamicCast(parentNode); + if (listItemComponent_ && parentNodeTmp) { + listItemComponent_->SetSupportScale(false); + // Divider style is set in DOMList + SetDividerStyle(parentNode->GetParentNode()); + } + } else { + LOGW("list item parent is valid type."); + } +} + +void DOMListItem::SetDividerStyle(const RefPtr& parentNode) +{ + auto parentList = AceType::DynamicCast(parentNode); + if (parentList) { + listItemComponent_->MarkNeedDivider(parentList->NeedDivider()); + listItemComponent_->SetDividerLength(parentList->GetDividerLength()); + listItemComponent_->SetDividerOrigin(parentList->GetDividerOrigin()); + listItemComponent_->SetDividerHeight(parentList->GetDividerHeight()); + auto dividerColor = parentList->GetDividerColor(); + RefPtr listTheme = GetTheme(); + if (dividerColor == Color::TRANSPARENT && listTheme) { + dividerColor = listTheme->GetDividerColor(); + } + listItemComponent_->SetDividerColor(dividerColor); + } +} + +void DOMListItem::ResetInitializedStyle() +{ + if (!listItemComponent_) { + LOGE("list item is null, reset style failed."); + EventReport::SendComponentException(ComponentExcepType::LIST_ITEM_ERR); + return; + } + RefPtr theme = GetTheme(); + if (theme) { + listItemComponent_->SetFocusAnimationColor(theme->GetColor()); + } + if (isCard_ || (isCard_ && isCardBlur_)) { + SetCardThemeAttrs(); + } + + if (SystemProperties::GetDeviceType() == DeviceType::TV && boxComponent_) { + RefPtr itemTheme = GetTheme(); + if (itemTheme) { + double margin = itemTheme->GetItemMarginInPercent(); + boxComponent_->SetMargin(Edge(GetMarginLeft(), GetMarginTop(), GetMarginRight(), GetMarginBottom()), + Edge(margin, margin, margin, margin, DimensionUnit::PERCENT)); + } + } +} + +void DOMListItem::PrepareSpecializedComponent() +{ + if (!listItemComponent_) { + listItemComponent_ = AceType::MakeRefPtr(type_, RefPtr()); + } + + ResetInitializedStyle(); + listItemComponent_->SetType(type_.empty() ? "default" : type_); + listItemComponent_->SetSticky(sticky_); + listItemComponent_->SetStickyMode(stickyMode_); + listItemComponent_->SetStickyRadius(stickyRadius_); + listItemComponent_->SetPrimary(primary_); + listItemComponent_->SetSupportClick(clickEffect_); + listItemComponent_->MarkTitle(isTitle_); + listItemComponent_->SetFlags(LIST_ITEM_FLAG_FROM_CHILD); + listItemComponent_->SetColumnSpan(columnSpan_); + listItemComponent_->SetTopLeftRadius(topLeftRadius_); + listItemComponent_->SetTopRightRadius(topRightRadius_); + listItemComponent_->SetBottomLeftRadius(bottomLeftRadius_); + listItemComponent_->SetBottomRightRadius(bottomRightRadius_); + listItemComponent_->SetAlignSelf(alignSelf_); + if (!indexKey_.empty()) { + listItemComponent_->SetIndexKey(indexKey_); + } + + if (flexComponent_) { + flexComponent_->SetDirection(flexDirection_); + flexComponent_->SetMainAxisAlign(flexMainAlign_); + flexComponent_->SetCrossAxisAlign(flexCrossAlign_); + } else { + flexComponent_ = AceType::MakeRefPtr( + flexDirection_, flexMainAlign_, flexCrossAlign_, std::list>()); + flexComponent_->SetTextDirection(IsRightToLeft() ? TextDirection::RTL : TextDirection::LTR); + } + + if (displayComponent_) { + displayComponent_->SetVisible(VisibleType::VISIBLE); + displayComponent_->SetOpacity(1.0); + } else { + displayComponent_ = AceType::MakeRefPtr(); + } + + if (boxComponent_) { + boxComponent_->SetMouseAnimationType(HoverAnimationType::OPACITY); + } +} + +RefPtr DOMListItem::GetSpecializedComponent() +{ + SetCardThemeAttrs(); + return listItemComponent_; +} + +RefPtr DOMListItem::CompositeSpecializedComponent(const std::vector>& components) +{ + RefPtr component; + if (sticky_ && stickyMode_ == StickyMode::OPACITY) { + RefPtr opacity = AceType::MakeRefPtr(); + opacity->SetVisible(VisibleType::VISIBLE); + opacity->SetOpacity(1.0); + RefPtr scale = AceType::MakeRefPtr(); + opacity->SetChild(scale); + scale->SetChild(flexComponent_); + component = opacity; + } else { + component = flexComponent_; + } + if (!components.empty()) { + const auto& parent = components.back(); + if (parent) { + parent->SetChild(component); + } + component = AceType::DynamicCast(components.front()); + } + if (listItemComponent_) { + if (displayComponent_) { + displayComponent_->SetChild(component); + listItemComponent_->SetChild(displayComponent_); + } else { + listItemComponent_->SetChild(component); + } + } + hasPositionProcessed_ = true; + return listItemComponent_; +} + +const EventMarker& DOMListItem::GetClickId() +{ + return clickEventId_; +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_list_item.h b/frameworks/bridge/common/dom/dom_list_item.h new file mode 100644 index 00000000..3fcf20be --- /dev/null +++ b/frameworks/bridge/common/dom/dom_list_item.h @@ -0,0 +1,128 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_LIST_ITEM_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_LIST_ITEM_H + +#include "core/components/list/list_item_component.h" +#include "core/components/theme/card_theme.h" +#include "frameworks/bridge/common/dom/dom_node.h" +#include "frameworks/bridge/common/dom/dom_type.h" + +namespace OHOS::Ace::Framework { + +class DOMListItem : public DOMNode { + DECLARE_ACE_TYPE(DOMListItem, DOMNode); + +public: + DOMListItem(NodeId nodeId, const std::string& nodeName, int32_t forIndex); + ~DOMListItem() override = default; + + RefPtr GetSpecializedComponent() override; + + virtual int32_t GetItemIndex() const + { + return itemIndex_; + } + + const std::string& GetItemKey() const + { + return indexKey_; + } + + const RefPtr& GetListItemComponent() const + { + return listItemComponent_; + } + + static RefPtr GetDOMListItem(const RefPtr& node) + { + RefPtr domNode = node; + while (domNode) { + auto listItem = AceType::DynamicCast(domNode); + if (listItem) { + return listItem; + } + if (domNode->GetChildList().empty()) { + return nullptr; + } + domNode = domNode->GetChildList().front(); + } + return nullptr; + } + +protected: + bool SetSpecializedAttr(const std::pair& attr) override; + bool SetSpecializedStyle(const std::pair& style) override; + bool AddSpecializedEvent(int32_t pageId, const std::string& event) override; + void OnChildNodeAdded(const RefPtr& child, int32_t slot) override; + void OnChildNodeRemoved(const RefPtr& child) override; + void OnMounted(const RefPtr& parentNode) override; + void PrepareSpecializedComponent() override; + RefPtr CompositeSpecializedComponent(const std::vector>& components) override; + void ResetInitializedStyle() override; + const EventMarker& GetClickId() override; + + bool IsSubscriptEnable() const override + { + return true; + } + + std::string type_; + Radius topLeftRadius_; + Radius topRightRadius_; + Radius bottomLeftRadius_; + Radius bottomRightRadius_; + StickyMode stickyMode_ = StickyMode::NONE; + +private: + void AddListItem(const RefPtr& node, int32_t slot); + void RemoveListItem(const RefPtr& node); + void SetCardThemeAttrs(); + void SetDividerStyle(const RefPtr& parentNode); + void SetCardTransitionEffect(); + + // common variables + int32_t columnSpan_ = DEFAULT_COLUMN_SPAN; + // If the item is generated by for loop, its index would be increased from 0. + int32_t itemIndex_ = -1; + std::string indexKey_; + + // list-item's variables + Alignment alignment_ { Alignment::TOP_LEFT }; + FlexDirection flexDirection_ { FlexDirection::ROW }; + FlexAlign flexMainAlign_ { FlexAlign::FLEX_START }; + FlexAlign flexCrossAlign_ { FlexAlign::FLEX_START }; + FlexAlign alignSelf_ { FlexAlign::AUTO }; + RefPtr listItemComponent_; + RefPtr flexComponent_; + RefPtr displayComponent_; + bool sticky_ = false; + bool isTitle_ = false; + Dimension stickyRadius_; + bool clickEffect_ = true; + bool primary_ = false; + bool isActive_ = false; + + EventMarker clickEventId_; + EventMarker stickyEventId_; + RefPtr cardTheme_; + bool isCardBlur_ = false; + bool isCard_ = false; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_LIST_ITEM_H diff --git a/frameworks/bridge/common/dom/dom_list_item_group.cpp b/frameworks/bridge/common/dom/dom_list_item_group.cpp new file mode 100644 index 00000000..89ab2908 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_list_item_group.cpp @@ -0,0 +1,224 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_list_item_group.h" + +#include "base/log/event_report.h" +#include "base/utils/linear_map.h" +#include "base/utils/utils.h" +#include "core/components/focus_animation/focus_animation_theme.h" +#include "frameworks/bridge/common/dom/dom_list.h" +#include "frameworks/bridge/common/dom/dom_reflect_map.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +namespace { + +constexpr int32_t DEFAULT_NODE_INDEX = -1; + +} // namespace + +DOMListItemGroup::DOMListItemGroup(NodeId nodeId, const std::string& nodeName, int32_t itemIndex) + : DOMListItem(nodeId, nodeName, itemIndex) +{} + +bool DOMListItemGroup::SetSpecializedAttr(const std::pair& attr) +{ + auto parent = AceType::DynamicCast(parentNode_.Upgrade()); + if (!parent) { + LOGW("DOMListItemGroup parent is null"); + return false; + } + if (attr.first == DOM_LISTITEM_TYPE) { + type_ = attr.second; + return true; + } + if (attr.first == DOM_LISTITEM_CARD_TYPE) { + isCard_ = StringToBool(attr.second); + return true; + } + if (attr.first == DOM_LISTITEM_CARD_BLUR) { + isCardBlur_ = StringToBool(attr.second); + return true; + } + if (attr.first == DOM_ID) { + // Do not return true, ID still need be handled outside. + groupId_ = attr.second; + } + return false; +} + +void DOMListItemGroup::SetCardThemeAttrs() +{ + cardTheme_ = GetTheme(); + if (!cardTheme_) { + LOGE("cardTheme is null"); + EventReport::SendComponentException(ComponentExcepType::GET_THEME_ERR); + return; + } + if (boxComponent_) { + if (isCard_) { + RefPtr backDecoration = boxComponent_->GetBackDecoration(); + if (!backDecoration) { + RefPtr decoration = AceType::MakeRefPtr(); + decoration->SetBackgroundColor(cardTheme_->GetBackgroundColor()); + decoration->SetBorderRadius(Radius(cardTheme_->GetBorderRadius())); + boxComponent_->SetBackDecoration(decoration); + } + if (backDecoration && !backDecoration->GetBorder().HasRadius()) { + backDecoration->SetBorderRadius(Radius(cardTheme_->GetBorderRadius())); + } + if (backDecoration && (backDecoration->GetBackgroundColor() == Color::TRANSPARENT)) { + backDecoration->SetBackgroundColor(cardTheme_->GetBackgroundColor()); + } + if (isCardBlur_) { + RefPtr frontDecoration = boxComponent_->GetFrontDecoration(); + if (!frontDecoration) { + RefPtr frontDecoration = AceType::MakeRefPtr(); + frontDecoration->SetBlurRadius(cardTheme_->GetBlurRadius()); + boxComponent_->SetFrontDecoration(frontDecoration); + } + if (frontDecoration && !frontDecoration->GetBlurRadius().IsValid()) { + frontDecoration->SetBlurRadius(cardTheme_->GetBlurRadius()); + } + } else { + RefPtr frontDecoration = boxComponent_->GetFrontDecoration(); + if (frontDecoration && frontDecoration->GetBlurRadius().IsValid()) { + frontDecoration->SetBlurRadius(Dimension()); + } + } + } + } +} + +bool DOMListItemGroup::AddSpecializedEvent(int32_t pageId, const std::string& event) +{ + static const LinearMapNode eventOperators[] = { + { + DOM_LIST_ITEM_GROUP_EVENT_GROUPCLICK, + [](int32_t pageId, DOMListItemGroup& listItemGroup) { + listItemGroup.onClicked_ = + EventMarker(listItemGroup.GetNodeIdForEvent(), DOM_LIST_ITEM_GROUP_EVENT_GROUPCLICK, pageId); + }, + }, + { + DOM_LIST_ITEM_GROUP_EVENT_GROUPCOLLAPSE, + [](int32_t pageId, DOMListItemGroup& listItemGroup) { + listItemGroup.onCollapse_ = + EventMarker(listItemGroup.GetNodeIdForEvent(), DOM_LIST_ITEM_GROUP_EVENT_GROUPCOLLAPSE, pageId); + }, + }, + { + DOM_LIST_ITEM_GROUP_EVENT_GROUPEXPAND, + [](int32_t pageId, DOMListItemGroup& listItemGroup) { + listItemGroup.onExpand_ = + EventMarker(listItemGroup.GetNodeIdForEvent(), DOM_LIST_ITEM_GROUP_EVENT_GROUPEXPAND, pageId); + }, + }, + }; + auto iter = BinarySearchFindIndex(eventOperators, ArraySize(eventOperators), event.c_str()); + if (iter != -1) { + eventOperators[iter].value(pageId, *this); + return true; + } + return false; +} + +void DOMListItemGroup::OnChildNodeAdded(const RefPtr& child, int32_t slot) +{ + if (child) { + const auto& childComponent = child->GetRootComponent(); + listItemGroupComponent_->AppendChild(childComponent); + } +} + +void DOMListItemGroup::OnChildNodeRemoved(const RefPtr& child) +{ + if (child) { + const auto& childComponent = child->GetRootComponent(); + listItemGroupComponent_->RemoveChild(childComponent); + } +} + +void DOMListItemGroup::PrepareSpecializedComponent() +{ + if (!listItemGroupComponent_) { + listItemGroupComponent_ = AceType::MakeRefPtr(type_); + } + + ResetInitializedStyle(); + listItemGroupComponent_->SetGroupId(groupId_); + listItemGroupComponent_->SetType(type_); + listItemGroupComponent_->SetFlags(LIST_ITEM_FLAG_FROM_CHILD); + listItemGroupComponent_->SetTopLeftRadius(topLeftRadius_); + listItemGroupComponent_->SetTopRightRadius(topRightRadius_); + listItemGroupComponent_->SetBottomLeftRadius(bottomLeftRadius_); + listItemGroupComponent_->SetBottomRightRadius(bottomRightRadius_); + listItemGroupComponent_->SetOnClicked(onClicked_); + listItemGroupComponent_->SetOnCollapse(onCollapse_); + listItemGroupComponent_->SetOnExpand(onExpand_); + + auto domList = AceType::DynamicCast(parentNode_.Upgrade()); + if (domList) { + listItemGroupComponent_->SetDirection(domList->GetDirection()); + } else { + LOGW("item group has a wrong parent"); + } +} + +void DOMListItemGroup::ResetInitializedStyle() +{ + if (!listItemGroupComponent_) { + LOGE("list item is null, reset style failed."); + EventReport::SendComponentException(ComponentExcepType::LIST_ITEM_ERR); + return; + } + RefPtr theme = GetTheme(); + if (theme) { + listItemGroupComponent_->SetFocusAnimationColor(theme->GetColor()); + } + if (isCard_ || (isCard_ && isCardBlur_)) { + SetCardThemeAttrs(); + } +} + +RefPtr DOMListItemGroup::GetSpecializedComponent() +{ + SetCardThemeAttrs(); + return listItemGroupComponent_; +} + +RefPtr DOMListItemGroup::CompositeSpecializedComponent(const std::vector>& components) +{ + return DOMNode::CompositeSpecializedComponent(components); +} + +void DOMListItemGroup::Update() +{ + auto pipelineContext = pipelineContext_.Upgrade(); + if (pipelineContext) { + pipelineContext->ScheduleUpdate(GetRootComponent()); + } +} + +int32_t DOMListItemGroup::GetItemIndex() const +{ + if (listItemGroupComponent_) { + return listItemGroupComponent_->GetIndex(); + } + return DEFAULT_NODE_INDEX; +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_list_item_group.h b/frameworks/bridge/common/dom/dom_list_item_group.h new file mode 100644 index 00000000..b8995cfb --- /dev/null +++ b/frameworks/bridge/common/dom/dom_list_item_group.h @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_LIST_ITEM_GROUP_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_LIST_ITEM_GROUP_H + +#include "core/components/list/list_item_group_component.h" +#include "core/components/theme/card_theme.h" +#include "frameworks/bridge/common/dom/dom_list_item.h" + +namespace OHOS::Ace::Framework { + +class DOMListItemGroup : public DOMListItem { + DECLARE_ACE_TYPE(DOMListItemGroup, DOMListItem); + +public: + DOMListItemGroup(NodeId nodeId, const std::string& nodeName, int32_t forIndex); + ~DOMListItemGroup() override = default; + RefPtr GetSpecializedComponent() override; + int32_t GetItemIndex() const override; + + const std::string& GetGroupId() const + { + return groupId_; + } + + void Update(); + +protected: + void OnChildNodeAdded(const RefPtr& child, int32_t slot) override; + void OnChildNodeRemoved(const RefPtr& child) override; + void PrepareSpecializedComponent() override; + RefPtr CompositeSpecializedComponent(const std::vector>& components) override; + void ResetInitializedStyle() override; + +private: + bool SetSpecializedAttr(const std::pair& attr) override; + bool AddSpecializedEvent(int32_t pageId, const std::string& event) override; + void SetCardThemeAttrs(); + + EventMarker onClicked_; + EventMarker onCollapse_; + EventMarker onExpand_; + std::string groupId_; + RefPtr listItemGroupComponent_; + RefPtr cardTheme_; + bool isCardBlur_ = false; + bool isCard_ = false; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_LIST_ITEM_GROUP_H diff --git a/frameworks/bridge/common/dom/dom_marquee.cpp b/frameworks/bridge/common/dom/dom_marquee.cpp new file mode 100644 index 00000000..f2ed4a7d --- /dev/null +++ b/frameworks/bridge/common/dom/dom_marquee.cpp @@ -0,0 +1,130 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_marquee.h" + +#include "base/log/event_report.h" +#include "base/utils/linear_map.h" +#include "base/utils/utils.h" +#include "core/components/marquee/marquee_theme.h" +#include "core/components/theme/theme_manager.h" +#include "frameworks/bridge/common/dom/dom_type.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { + +DOMMarquee::DOMMarquee(NodeId nodeId, const std::string& nodeName) : DOMNode(nodeId, nodeName) +{ + marqueeChild_ = AceType::MakeRefPtr(); +} + +void DOMMarquee::InitializeStyle() +{ + ResetInitializedStyle(); +} + +void DOMMarquee::ResetInitializedStyle() +{ + RefPtr theme = GetTheme(); + // the marquee text lines is only one. + textStyle_.SetMaxLines(1); + if (theme) { + textStyle_.SetFontSize(theme->GetFontSize()); + textStyle_.SetTextColor(theme->GetTextColor()); + marqueeChild_->SetTextStyle(textStyle_); + } +} + +void DOMMarquee::CallSpecializedMethod(const std::string& method, const std::string& args) +{ + auto controller = marqueeChild_->GetController(); + if (!controller) { + LOGE("get controller failed"); + EventReport::SendComponentException(ComponentExcepType::MARQUEE_ERR); + return; + } + if (method == DOM_MARQUEE_METHOD_START) { + controller->Start(); + } else if (method == DOM_MARQUEE_METHOD_STOP) { + controller->Stop(); + } else { + LOGE("Method not support: %{private}s", method.c_str()); + } +} + +bool DOMMarquee::SetSpecializedAttr(const std::pair& attr) +{ + static const LinearMapNode attrOperators[] = { + { DOM_MARQUEE_DIRECTION, + [](MarqueeComponent& marquee, const std::string& val) { + marquee.SetDirection( + val == DOM_MARQUEE_DIRECTION_RIGHT ? MarqueeDirection::RIGHT : MarqueeDirection::LEFT); + } }, + { DOM_MARQUEE_LOOP, + [](MarqueeComponent& marquee, const std::string& val) { marquee.SetLoop(StringToInt(val)); } }, + { DOM_MARQUEE_SCROLL_AMOUNT, + [](MarqueeComponent& marquee, const std::string& val) { marquee.SetScrollAmount(StringToDouble(val)); } }, + { DOM_MARQUEE_VALUE, [](MarqueeComponent& marquee, const std::string& val) { marquee.SetValue(val); } }, + }; + auto operatorIter = BinarySearchFindIndex(attrOperators, ArraySize(attrOperators), attr.first.c_str()); + if (operatorIter != -1) { + attrOperators[operatorIter].value(*marqueeChild_, attr.second); + return true; + } + return false; +} + +bool DOMMarquee::SetSpecializedStyle(const std::pair& style) +{ + static const LinearMapNode textStyleOperators[] = { + { DOM_TEXT_ALLOW_SCALE, [](TextStyle& textStyle, const std::string& val, + const DOMMarquee&) { textStyle.SetAllowScale(StringToBool(val)); } }, + { DOM_MARQUEE_COLOR, [](TextStyle& textStyle, const std::string& val, + const DOMMarquee& node) { textStyle.SetTextColor(node.ParseColor(val)); } }, + { DOM_MARQUEE_FONT_FAMILY, + [](TextStyle& textStyle, const std::string& val, const DOMMarquee& node) { + textStyle.SetFontFamilies(node.ParseFontFamilies(val)); + } }, + { DOM_MARQUEE_FONT_SIZE, [](TextStyle& textStyle, const std::string& val, + const DOMMarquee& node) { textStyle.SetFontSize(node.ParseDimension(val)); } }, + { DOM_MARQUEE_FONT_WEIGHT, [](TextStyle& textStyle, const std::string& val, + const DOMMarquee&) { textStyle.SetFontWeight(ConvertStrToFontWeight(val)); } }, + }; + auto operatorIter = BinarySearchFindIndex(textStyleOperators, ArraySize(textStyleOperators), style.first.c_str()); + if (operatorIter != -1) { + textStyleOperators[operatorIter].value(textStyle_, style.second, *this); + marqueeChild_->SetTextStyle(textStyle_); + return true; + } + return false; +} + +bool DOMMarquee::AddSpecializedEvent(int32_t pageId, const std::string& event) +{ + if (event == DOM_MARQUEE_EVENT_BOUNCE) { + marqueeChild_->SetBounceEventId(EventMarker(GetNodeIdForEvent(), event, pageId)); + } else if (event == DOM_MARQUEE_EVENT_FINISH) { + marqueeChild_->SetFinishEventId(EventMarker(GetNodeIdForEvent(), event, pageId)); + } else if (event == DOM_MARQUEE_EVENT_START) { + marqueeChild_->SetStartEventId(EventMarker(GetNodeIdForEvent(), event, pageId)); + } else { + return false; + } + return true; +} + +void DOMMarquee::PrepareSpecializedComponent() {} + +} // namespace OHOS::Ace::Framework \ No newline at end of file diff --git a/frameworks/bridge/common/dom/dom_marquee.h b/frameworks/bridge/common/dom/dom_marquee.h new file mode 100644 index 00000000..3a1ca7e2 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_marquee.h @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_MARQUEE_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_MARQUEE_H + +#include "core/components/marquee/marquee_component.h" +#include "frameworks/bridge/common/dom/dom_node.h" + +namespace OHOS::Ace::Framework { + +class DOMMarquee final : public DOMNode { + DECLARE_ACE_TYPE(DOMMarquee, DOMNode); + +public: + DOMMarquee(NodeId nodeId, const std::string& nodeName); + ~DOMMarquee() override = default; + + void InitializeStyle() override; + + void CallSpecializedMethod(const std::string& method, const std::string& args) override; + + RefPtr GetSpecializedComponent() override + { + return marqueeChild_; + } + +protected: + bool SetSpecializedAttr(const std::pair& attr) override; + bool SetSpecializedStyle(const std::pair& style) override; + bool AddSpecializedEvent(int32_t pageId, const std::string& event) override; + void PrepareSpecializedComponent() override; + void ResetInitializedStyle() override; + +private: + RefPtr marqueeChild_; + TextStyle textStyle_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_MARQUEE_H diff --git a/frameworks/bridge/common/dom/dom_menu.cpp b/frameworks/bridge/common/dom/dom_menu.cpp new file mode 100644 index 00000000..704018c0 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_menu.cpp @@ -0,0 +1,229 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_menu.h" + +#include + +#include "base/utils/linear_map.h" +#include "base/utils/utils.h" +#include "core/components/common/properties/color.h" +#include "core/components/option/option_component.h" +#include "core/components/select/select_theme.h" +#include "core/components/text/text_component.h" +#include "core/components/theme/theme_manager.h" +#include "frameworks/bridge/common/dom/dom_text.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { + +DOMMenu::DOMMenu(NodeId nodeId, const std::string& nodeName) : DOMNode(nodeId, nodeName) +{ + menuChild_ = AceType::MakeRefPtr(std::to_string(nodeId), nodeName); + menuChild_->SetTextDirection((IsRightToLeft() ? TextDirection::RTL : TextDirection::LTR)); +} + +void DOMMenu::InitializeStyle() +{ + ResetInitializedStyle(); +} + +void DOMMenu::ResetInitializedStyle() +{ + menuChild_->InitTheme(GetThemeManager()); + titleStyle_ = menuChild_->GetTitleStyle(); +} + +void DOMMenu::OnChildNodeRemoved(const RefPtr& child) +{ + if (!child) { + return; + } + + auto option = AceType::DynamicCast(child->GetSpecializedComponent()); + if (!option) { + return; + } + + menuChild_->RemoveOption(option); +} + +void DOMMenu::PrepareSpecializedComponent() +{ + menuChild_->SetTitleStyle(titleStyle_); +} + +bool DOMMenu::SetSpecializedAttr(const std::pair& attr) +{ + if (attr.first == DOM_TYPE) { + isClickType_ = (attr.second == DOM_CLICK); + return true; + } + + if (attr.first == DOM_TITLE && !attr.second.empty()) { + menuChild_->SetTitle(attr.second); + } + + return true; +} + +bool DOMMenu::SetSpecializedStyle(const std::pair& style) +{ + static const LinearMapNode menuStyleOperators[] = { + { DOM_TEXT_ALLOW_SCALE, [](TextStyle& textStyle, const std::string& val, + const DOMMenu&) { textStyle.SetAllowScale(StringToBool(val)); } }, + { DOM_TEXT_FONT_FAMILY, [](TextStyle& textStyle, const std::string& val, + const DOMMenu& node) { textStyle.SetFontFamilies(node.ParseFontFamilies(val)); } }, + { DOM_TEXT_FONT_SIZE, [](TextStyle& textStyle, const std::string& val, + const DOMMenu& node) { textStyle.SetFontSize(node.ParseDimension(val)); } }, + { DOM_TEXT_FONT_STYLE, [](TextStyle& textStyle, const std::string& val, + const DOMMenu&) { textStyle.SetFontStyle(ConvertStrToFontStyle(val)); } }, + { DOM_TEXT_FONT_WEIGHT, [](TextStyle& textStyle, const std::string& val, + const DOMMenu&) { textStyle.SetFontWeight(ConvertStrToFontWeight(val)); } }, + { DOM_TEXT_LETTER_SPACING, [](TextStyle& textStyle, const std::string& val, + const DOMMenu&) { textStyle.SetLetterSpacing(StringToDouble(val)); } }, + { DOM_PICKER_TEXT_COLOR, // use define of picker which is the same "text-color" + [](TextStyle& textStyle, const std::string& val, const DOMMenu& node) { + textStyle.SetTextColor(node.ParseColor(val)); + } }, + { DOM_TEXT_DECORATION, [](TextStyle& textStyle, const std::string& val, + const DOMMenu&) { textStyle.SetTextDecoration(ConvertStrToTextDecoration(val)); } }, + }; + auto operatorIter = BinarySearchFindIndex(menuStyleOperators, ArraySize(menuStyleOperators), style.first.c_str()); + if (operatorIter != -1) { + menuStyleOperators[operatorIter].value(titleStyle_, style.second, *this); + return true; + } + return false; +} + +bool DOMMenu::AddSpecializedEvent(int32_t pageId, const std::string& event) +{ + if (event == DOM_SELECTED) { + menuChild_->SetOnSuccess(EventMarker(GetNodeIdForEvent(), event, pageId)); + } else if (event == DOM_CANCEL) { + menuChild_->SetOnCancel(EventMarker(GetNodeIdForEvent(), event, pageId)); + } else { + LOGE("unsupported event: %{public}s.", event.c_str()); + return false; + } + return true; +} + +RefPtr DOMMenu::GetSpecializedComponent() +{ + return menuChild_; +} + +void DOMMenu::BindIdNode(const RefPtr& idNode) +{ + if (SystemProperties::GetDeviceType() == DeviceType::TV) { + EventMarker clickMarker = BackEndEventManager::GetInstance().GetAvailableMarker(); + BackEndEventManager::GetInstance().BindBackendEvent( + clickMarker, [weak = WeakClaim(this), idNode]() { + if (!idNode || idNode->IsNodeDisabled()) { + return; + } + auto domMenu = weak.Upgrade(); + if (!domMenu) { + return; + } + const auto& targetCallback = domMenu->menuChild_->GetTargetCallback(); + const auto& targetId = idNode->GetRootComponent()->GetId(); + if (targetCallback) { + targetCallback(targetId, Offset(0, 0)); + } + }); + idNode->SetOnFocusClick(clickMarker); + } + if (isClickType_) { + EventMarker clickMarker = BackEndEventManager::GetInstance().GetAvailableMarker(); + BackEndEventManager::GetInstance().BindBackendEvent( + clickMarker, [weak = WeakClaim(this), idNode](const ClickInfo& clickInfo) { + auto domMenu = weak.Upgrade(); + if (!domMenu || !idNode) { + return; + } + const auto& targetCallback = domMenu->menuChild_->GetTargetCallback(); + const auto& targetId = idNode->GetRootComponent()->GetId(); + if (targetCallback) { + targetCallback(targetId, clickInfo.GetGlobalLocation()); + } + }); + idNode->SetOnClick(clickMarker); + } else { + EventMarker longPressMarker = + BackEndEventManager::GetInstance().GetAvailableMarker(); + BackEndEventManager::GetInstance().BindBackendEvent( + longPressMarker, [weak = WeakClaim(this), idNode](const LongPressInfo& longPressInfo) { + auto domMenu = weak.Upgrade(); + if (!domMenu || !idNode) { + return; + } + const auto& targetCallback = domMenu->menuChild_->GetTargetCallback(); + const auto& targetId = idNode->GetRootComponent()->GetId(); + if (targetCallback) { + targetCallback(targetId, longPressInfo.GetGlobalLocation()); + } + }); + idNode->SetOnLongPress(longPressMarker); + } +} + +double DOMMenu::GetJsonDouble( + const std::unique_ptr& json, const std::string& name, double defaultValue) const +{ + if (json && json->IsArray() && json->GetArraySize() > 0) { + std::unique_ptr itemValue = json->GetArrayItem(0)->GetValue(name); + if (itemValue && itemValue->IsNumber()) { + return itemValue->GetDouble(); + } + } + + return defaultValue; +} + +void DOMMenu::CallSpecializedMethod(const std::string& method, const std::string& args) +{ + if (method == "show") { + std::unique_ptr argsValue = JsonUtil::ParseJsonString(args); + double x = GetJsonDouble(argsValue, "x", 0); + double y = GetJsonDouble(argsValue, "y", 0); + const auto& targetCallback = menuChild_->GetTargetCallback(); + if (targetCallback) { + targetCallback("", Offset(x, y)); + } + } +} + +void DOMMenu::OnChildNodeAdded(const RefPtr& child, int32_t slot) +{ + if (!child) { + return; + } + + auto option = AceType::DynamicCast(child->GetSpecializedComponent()); + if (!option) { + return; + } + + if (slot < 0) { + menuChild_->AppendOption(option); + } else { + menuChild_->InsertOption(option, static_cast(slot)); + } +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_menu.h b/frameworks/bridge/common/dom/dom_menu.h new file mode 100644 index 00000000..7ef84154 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_menu.h @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_MENU_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_MENU_H + +#include "core/components/menu/menu_component.h" +#include "core/components/text/text_component.h" +#include "frameworks/bridge/common/dom/dom_node.h" + +namespace OHOS::Ace::Framework { + +class DOMMenu final : public DOMNode { + DECLARE_ACE_TYPE(DOMMenu, DOMNode); + +public: + DOMMenu(NodeId nodeId, const std::string& nodeName); + ~DOMMenu() override = default; + + void BindIdNode(const RefPtr& idNode); + + RefPtr GetSpecializedComponent() override; + + void InitializeStyle() override; + + void ResetInitializedStyle() override; + +protected: + bool SetSpecializedAttr(const std::pair& attr) override; + bool SetSpecializedStyle(const std::pair& style) override; + bool AddSpecializedEvent(int32_t pageId, const std::string& event) override; + void OnChildNodeAdded(const RefPtr& child, int32_t slot) override; + void OnChildNodeRemoved(const RefPtr& child) override; + void PrepareSpecializedComponent() override; + void CallSpecializedMethod(const std::string& method, const std::string& args) override; + +private: + double GetJsonDouble(const std::unique_ptr& json, const std::string& name, double defaultValue) const; + + RefPtr menuChild_; + TextStyle titleStyle_; + bool isClickType_ = true; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_MENU_H diff --git a/frameworks/bridge/common/dom/dom_navigation_bar.cpp b/frameworks/bridge/common/dom/dom_navigation_bar.cpp new file mode 100644 index 00000000..7694b614 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_navigation_bar.cpp @@ -0,0 +1,200 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_navigation_bar.h" + +#include "base/log/event_report.h" +#include "base/utils/linear_map.h" +#include "base/utils/utils.h" +#include "frameworks/bridge/common/dom/dom_type.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +namespace { + +const char EMPHASIZE[] = "emphasize"; +NavigationBarType GetType(const std::string& value) +{ + return value == EMPHASIZE ? NavigationBarType::EMPHASIZE : NavigationBarType::NORMAL; +} + +} // namespace + +DomNavigationBar::DomNavigationBar(NodeId nodeId, const std::string& nodeName) + : DOMNode(nodeId, nodeName), + navigationBarComponent_(AceType::MakeRefPtr(std::to_string(nodeId), nodeName)), + navigationBarData_(navigationBarComponent_->GetData()) +{ + if (IsRightToLeft()) { + navigationBarComponent_->SetTextDirection(TextDirection::RTL); + } +} + +void DomNavigationBar::InitializeStyle() +{ + auto theme = GetTheme(); + navigationBarData_->theme = theme; + navigationBarData_->subTitleColor = theme->GetSubTitleColor(); + navigationBarData_->titleColor = theme->GetTitleColor(); +} + +void DomNavigationBar::ResetInitializedStyle() +{ + InitializeStyle(); +} + +#ifndef WEARABLE_PRODUCT +void DomNavigationBar::OnChildNodeRemoved(const RefPtr& child) +{ + if (!child || !navigationBarData_) { + return; + } + + auto menu = AceType::DynamicCast(child->GetSpecializedComponent()); + if (menu) { + navigationBarData_->menu = nullptr; + navigationBarData_->allMenuItems.clear(); + return; + } + auto tabBar = AceType::DynamicCast(child->GetSpecializedComponent()); + if (tabBar) { + navigationBarData_->tabBar = nullptr; + return; + } + + auto selectPopup = AceType::DynamicCast(child->GetSpecializedComponent()); + if (selectPopup) { + navigationBarData_->selectPopup = nullptr; + } else { + LOGW("navigation bar child node type not support"); + } +} + +void DomNavigationBar::OnChildNodeAdded(const RefPtr& child, int32_t slot) +{ + if (!child || !navigationBarComponent_) { + return; + } + + auto menu = AceType::DynamicCast(child->GetSpecializedComponent()); + if (menu) { + navigationBarData_->menu = menu; + return; + } + auto tabBar = AceType::DynamicCast(child->GetSpecializedComponent()); + if (tabBar) { + navigationBarData_->tabBar = tabBar; + return; + } + + auto selectPopup = AceType::DynamicCast(child->GetSpecializedComponent()); + if (selectPopup) { + navigationBarData_->selectPopup = selectPopup; + } else { + LOGW("navigation bar child node type not support"); + } +} +#endif + +void DomNavigationBar::CallSpecializedMethod(const std::string& method, const std::string& args) +{ + if (!navigationBarData_->controller) { + LOGE("get navigation bar controller failed"); + EventReport::SendComponentException(ComponentExcepType::NAVIGATION_BAR_ERR); + return; + } + if (method == DOM_NAVIGATION_BAR_METHOD_SHOW) { + navigationBarData_->controller->Show(); + } else if (method == DOM_NAVIGATION_BAR_METHOD_HIDE) { + navigationBarData_->controller->Hide(); + } else { + LOGE("call not support method: %{private}s", method.c_str()); + } +} + +bool DomNavigationBar::SetSpecializedAttr(const std::pair& attr) +{ + static const LinearMapNode&)> attrOperators[] = { + { DOM_NAVIGATION_BAR_BACK_ENABLED, + [](const std::string& val, const RefPtr& navigationBar) { + navigationBar->backEnabled = StringToBool(val); + } }, + { DOM_NAVIGATION_BAR_END_ICON, + [](const std::string& val, const RefPtr& navigationBar) { + navigationBar->endIcon = val; + } }, + { DOM_NAVIGATION_BAR_HEADER, [](const std::string& val, + const RefPtr& navigationBar) { navigationBar->header = val; } }, + { DOM_NAVIGATION_BAR_LOGO, + [](const std::string& val, const RefPtr& navigationBar) { navigationBar->logo = val; } }, + { DOM_NAVIGATION_BAR_START_ICON, + [](const std::string& val, const RefPtr& navigationBar) { + navigationBar->startIcon = val; + } }, + { DOM_NAVIGATION_BAR_SUBTITLE, + [](const std::string& val, const RefPtr& navigationBar) { + navigationBar->subTitle = val; + } }, + { DOM_NAVIGATION_BAR_TITLE, [](const std::string& val, + const RefPtr& navigationBar) { navigationBar->title = val; } }, + { DOM_NAVIGATION_BAR_TYPE, + [](const std::string& val, const RefPtr& navigationBar) { + navigationBar->type = GetType(val); + } }, + }; + auto operatorIter = BinarySearchFindIndex(attrOperators, ArraySize(attrOperators), attr.first.c_str()); + if (operatorIter != -1) { + attrOperators[operatorIter].value(attr.second, navigationBarData_); + return true; + } + return false; +} + +bool DomNavigationBar::SetSpecializedStyle(const std::pair& style) +{ + static const LinearMapNode navigationBarStyleOperators[] = { + { DOM_NAVIGATION_BAR_SUBTITLE_COLOR, + [](const std::string& val, const DomNavigationBar& node) { + node.navigationBarData_->subTitleColor = node.ParseColor(val); + } }, + { DOM_NAVIGATION_BAR_TITLE_COLOR, + [](const std::string& val, const DomNavigationBar& node) { + node.navigationBarData_->titleColor = node.ParseColor(val); + } }, + }; + auto operatorIter = + BinarySearchFindIndex(navigationBarStyleOperators, ArraySize(navigationBarStyleOperators), style.first.c_str()); + if (operatorIter != -1) { + navigationBarStyleOperators[operatorIter].value(style.second, *this); + return true; + } + return false; +} + +bool DomNavigationBar::AddSpecializedEvent(int32_t pageId, const std::string& event) +{ + if (event == DOM_NAVIGATION_BAR_EVENT_BACK_CLICK) { + navigationBarData_->backClickMarker = EventMarker(GetNodeIdForEvent(), event, pageId); + } else if (event == DOM_NAVIGATION_BAR_EVENT_START_CLICK) { + navigationBarData_->startClickMarker = EventMarker(GetNodeIdForEvent(), event, pageId); + } else if (event == DOM_NAVIGATION_BAR_EVENT_END_CLICK) { + navigationBarData_->endClickMarker = EventMarker(GetNodeIdForEvent(), event, pageId); + } else { + return false; + } + return true; +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_navigation_bar.h b/frameworks/bridge/common/dom/dom_navigation_bar.h new file mode 100644 index 00000000..6cc3ce0b --- /dev/null +++ b/frameworks/bridge/common/dom/dom_navigation_bar.h @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_NAVIGATION_BAR_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_NAVIGATION_BAR_H + +#include "core/components/navigation_bar/navigation_bar_component.h" +#include "frameworks/bridge/common/dom/dom_node.h" + +namespace OHOS::Ace::Framework { + +class DomNavigationBar final : public DOMNode { + DECLARE_ACE_TYPE(DomNavigationBar, DOMNode); + +public: + DomNavigationBar(NodeId nodeId, const std::string& nodeName); + ~DomNavigationBar() override = default; + + void InitializeStyle() override; + + void ResetInitializedStyle() override; + + void CallSpecializedMethod(const std::string& method, const std::string& args) override; + + RefPtr GetSpecializedComponent() override + { + return navigationBarComponent_; + } + +protected: +#ifndef WEARABLE_PRODUCT + void OnChildNodeRemoved(const RefPtr& child) override; + void OnChildNodeAdded(const RefPtr& child, int32_t slot) override; +#endif + bool SetSpecializedAttr(const std::pair& attr) override; + bool SetSpecializedStyle(const std::pair& style) override; + bool AddSpecializedEvent(int32_t pageId, const std::string& event) override; + +private: + RefPtr navigationBarComponent_; + RefPtr navigationBarData_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_NAVIGATION_BAR_H diff --git a/frameworks/bridge/common/dom/dom_navigation_menu.cpp b/frameworks/bridge/common/dom/dom_navigation_menu.cpp new file mode 100644 index 00000000..a71b0ad8 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_navigation_menu.cpp @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_navigation_menu.h" + +#include "frameworks/bridge/common/dom/dom_navigation_bar.h" + +namespace OHOS::Ace::Framework { + +DOMNavigationMenu::DOMNavigationMenu(NodeId nodeId, const std::string& nodeName) : DOMNode(nodeId, nodeName) +{ + menuChild_ = AceType::MakeRefPtr(std::to_string(nodeId), nodeName); + menuChild_->SetTextDirection((IsRightToLeft() ? TextDirection::RTL : TextDirection::LTR)); +} + +void DOMNavigationMenu::InitializeStyle() +{ + menuChild_->InitTheme(GetThemeManager()); +} + +void DOMNavigationMenu::ResetInitializedStyle() +{ + InitializeStyle(); +} + +void DOMNavigationMenu::OnChildNodeAdded(const RefPtr& child, int32_t slot) +{ + if (!child) { + return; + } + auto option = AceType::DynamicCast(child->GetSpecializedComponent()); + if (!option) { + return; + } + if (navigationBar_) { + navigationBar_->GetData()->allMenuItems.push_back(option); + UpdateNavigationBar(); + } +} + +void DOMNavigationMenu::OnChildNodeRemoved(const RefPtr& child) +{ + if (!child) { + return; + } + auto option = AceType::DynamicCast(child->GetSpecializedComponent()); + if (!option) { + return; + } + if (navigationBar_) { + navigationBar_->GetData()->allMenuItems.remove(option); + UpdateNavigationBar(); + } +} + +void DOMNavigationMenu::OnMounted(const RefPtr& parentNode) +{ + auto parentDom = AceType::DynamicCast(parentNode); + if (!parentDom) { + return; + } + + RefPtr component = parentDom->GetSpecializedComponent(); + navigationBar_ = AceType::DynamicCast(component); +} + +bool DOMNavigationMenu::AddSpecializedEvent(int32_t pageId, const std::string& event) +{ + if (event == DOM_SELECTED) { + menuChild_->SetOnSuccess(EventMarker(GetNodeIdForEvent(), event, pageId)); + return true; + } + return false; +} + +void DOMNavigationMenu::UpdateNavigationBar() +{ + navigationBar_->MarkNeedUpdate(); + auto pipelineContext = pipelineContext_.Upgrade(); + if (!pipelineContext) { + LOGE("pipelineContext_ is nullptr"); + return; + } + pipelineContext->ScheduleUpdate(GetParentNode()->GetRootComponent()); +} + +} // namespace OHOS::Ace::Framework \ No newline at end of file diff --git a/frameworks/bridge/common/dom/dom_navigation_menu.h b/frameworks/bridge/common/dom/dom_navigation_menu.h new file mode 100644 index 00000000..8e515fce --- /dev/null +++ b/frameworks/bridge/common/dom/dom_navigation_menu.h @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_NAVIGATION_MENU_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_NAVIGATION_MENU_H + +#include "core/components/menu/menu_component.h" +#include "core/components/navigation_bar/navigation_bar_component.h" +#include "frameworks/bridge/common/dom/dom_node.h" + +namespace OHOS::Ace::Framework { + +class DOMNavigationMenu final : public DOMNode { + DECLARE_ACE_TYPE(DOMNavigationMenu, DOMNode); + +public: + DOMNavigationMenu(NodeId nodeId, const std::string& nodeName); + ~DOMNavigationMenu() override = default; + + void InitializeStyle() override; + + void ResetInitializedStyle() override; + + RefPtr GetSpecializedComponent() override + { + return menuChild_; + } + +protected: + void OnChildNodeAdded(const RefPtr& child, int32_t slot) override; + void OnChildNodeRemoved(const RefPtr& child) override; + void OnMounted(const RefPtr& parentNode) override; + bool AddSpecializedEvent(int32_t pageId, const std::string& event) override; + +private: + void UpdateNavigationBar(); + + RefPtr menuChild_; + RefPtr navigationBar_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_NAVIGATION_MENU_H diff --git a/frameworks/bridge/common/dom/dom_node.cpp b/frameworks/bridge/common/dom/dom_node.cpp new file mode 100644 index 00000000..ae6adc2f --- /dev/null +++ b/frameworks/bridge/common/dom/dom_node.cpp @@ -0,0 +1,2895 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_node.h" + +#include +#include + +#include "base/log/ace_trace.h" +#include "core/common/ace_application_info.h" +#include "core/common/frontend.h" +#include "core/components/scroll/scroll_bar_theme.h" +#include "core/components/scroll/scroll_fade_effect.h" +#include "core/components/scroll/scroll_spring_effect.h" +#include "frameworks/bridge/common/dom/dom_div.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +namespace { + +constexpr uint32_t TRANSFORM_SINGLE = 1; +constexpr uint32_t TRANSFORM_DUAL = 2; +constexpr uint32_t COMMON_METHOD_FOCUS_ARGS_SIZE = 1; +constexpr uint32_t SINGLE_VALUE = 1; +constexpr uint32_t TWO_VALUES = 2; +constexpr uint32_t THREE_VALUES = 3; +constexpr uint32_t FOUR_VALUES = 4; +const char COMMON_METHOD_FOCUS[] = "focus"; + +// focusable support list, this list should be updated after the other nodes(checkbox/radio/switch/ +// grid/dialog/button/input) implemented in frontend. +std::unordered_set g_focusableNode; + +// unsupported focusable list. +const std::unordered_set UNFOCUSABLED_NODE = { + DOM_NODE_TAG_SPAN, +}; + +// default flex value +constexpr double DEFAULT_FLEX_GROW = 0.0; +constexpr double DEFAULT_FLEX_SHRINK = 1.0; +constexpr double DEFAULT_FLEX_BASIS = -1.0; +constexpr int32_t DIRECTION_ANGLE = 1; +constexpr int32_t DIRECTION_SIDE = 2; +constexpr int32_t DIRECTION_CORNER = 3; +constexpr int32_t MS_TO_S = 1000; +constexpr int32_t PERCENTAGE = 100; +constexpr Dimension TRANSFORM_ORIGIN_DEFAULT = 0.5_pct; + +// prefix id of TweenComponent, for differentiation from id of ComposedComponent +constexpr char COMPONENT_PREFIX[] = "FrontendTween"; + +// Shared Transition Effect FrontendType String +constexpr char SHARED_TRANSITION_EFFECT_STATIC[] = "static"; +constexpr char SHARED_TRANSITION_EFFECT_EXCHANGE[] = "exchange"; + +constexpr PropertyAnimatableType PROPERTY_ANIMATIONABLE_FLOAT_TYPES[] = { + PropertyAnimatableType::PROPERTY_PADDING_LEFT, + PropertyAnimatableType::PROPERTY_PADDING_TOP, + PropertyAnimatableType::PROPERTY_PADDING_RIGHT, + PropertyAnimatableType::PROPERTY_PADDING_BOTTOM, + PropertyAnimatableType::PROPERTY_MARGIN_LEFT, + PropertyAnimatableType::PROPERTY_MARGIN_TOP, + PropertyAnimatableType::PROPERTY_MARGIN_RIGHT, + PropertyAnimatableType::PROPERTY_MARGIN_BOTTOM, +}; + +RefPtr ParseSharedEffect(const std::string& effect, DOMNode& node) +{ + std::string effectTrim = effect; + RemoveHeadTailSpace(effectTrim); + if (effectTrim == SHARED_TRANSITION_EFFECT_STATIC) { + return SharedTransitionEffect::GetSharedTransitionEffect( + SharedTransitionEffectType::SHARED_EFFECT_STATIC, node.GetShareId()); + } else if (effectTrim == SHARED_TRANSITION_EFFECT_EXCHANGE) { + return SharedTransitionEffect::GetSharedTransitionEffect( + SharedTransitionEffectType::SHARED_EFFECT_EXCHANGE, node.GetShareId()); + } else { + LOGE("Parse shared effect failed. unknown effect: %{public}s, share id: %{public}s", effect.c_str(), + node.GetShareId().c_str()); + return nullptr; + } +} + +ClickSpringEffectType ParseClickEffect(const std::string& effect) +{ + static std::unordered_map types = { + { "spring-small", ClickSpringEffectType::SMALL }, + { "spring-medium", ClickSpringEffectType::MEDIUM }, + { "spring-large", ClickSpringEffectType::LARGE }, + }; + auto pos = types.find(effect); + if (pos != types.end()) { + return pos->second; + } + return ClickSpringEffectType::NONE; +} + +TransitionEffect ParseTransitionEffect(const std::string& option) +{ + static std::unordered_map types = { + { "unfold", TransitionEffect::UNFOLD }, + { "none", TransitionEffect::NONE }, + }; + auto pos = types.find(option); + if (pos != types.end()) { + return pos->second; + } + return TransitionEffect::NONE; +} + +inline WindowBlurStyle StrToWindowBlurStyle(const std::string& value) +{ + static std::unordered_map types = { + { "small_light", WindowBlurStyle::STYLE_BACKGROUND_SMALL_LIGHT }, + { "medium_light", WindowBlurStyle::STYLE_BACKGROUND_MEDIUM_LIGHT }, + { "large_light", WindowBlurStyle::STYLE_BACKGROUND_LARGE_LIGHT }, + { "xlarge_light", WindowBlurStyle::STYLE_BACKGROUND_XLARGE_LIGHT }, + { "small_dark", WindowBlurStyle::STYLE_BACKGROUND_SMALL_DARK }, + { "medium_dark", WindowBlurStyle::STYLE_BACKGROUND_MEDIUM_DARK }, + { "large_dark", WindowBlurStyle::STYLE_BACKGROUND_LARGE_DARK }, + { "xlarge_dark", WindowBlurStyle::STYLE_BACKGROUND_XLARGE_DARK }, + }; + auto pos = types.find(value); + if (pos != types.end()) { + return pos->second; + } + return WindowBlurStyle::STYLE_BACKGROUND_SMALL_LIGHT; +} + +template +T ParseFunctionValue(const std::string& line, const std::string& key, std::function parser) +{ + std::vector strs; + StringUtils::SplitStr(line, " ", strs, true); + for (const auto& str : strs) { + if (str.empty()) { + continue; + } + auto leftIndex = str.find('('); + auto rightIndex = str.find(')'); + if (leftIndex == std::string::npos || rightIndex == std::string::npos) { + continue; + } + if (leftIndex + 1 >= rightIndex) { + continue; + } + if (str.substr(0, leftIndex) != key) { + continue; + } + + auto valueStr = str.substr(leftIndex + 1, rightIndex - leftIndex - 1); + return parser(valueStr); + } + return T {}; +} + +} // namespace + +DOMNode::DOMNode(NodeId nodeId, const std::string& nodeName) : nodeId_(nodeId), tag_(nodeName) +{ + rootComponent_ = AceType::MakeRefPtr(std::to_string(nodeId), nodeName); + backDecoration_ = AceType::MakeRefPtr(); + backgroundImage_ = AceType::MakeRefPtr(); + boxComponent_ = AceType::MakeRefPtr(); + isRightToLeft_ = AceApplicationInfo::GetInstance().IsRightToLeft(); +} + +DOMNode::~DOMNode() +{ + if (!onFocusId_.IsEmpty()) { + BackEndEventManager::GetInstance().RemoveBackEndEvent(onFocusId_); + } + if (!onBlurId_.IsEmpty()) { + BackEndEventManager::GetInstance().RemoveBackEndEvent(onBlurId_); + } + + for (uint32_t eventAction = 0; eventAction < EventAction::SIZE; eventAction++) { + for (uint32_t eventStage = 0; eventStage < EventStage::SIZE; eventStage++) { + for (uint32_t touchEventType = 0; touchEventType < EventType::SIZE; touchEventType++) { + const auto& eventMarker = onTouchIds_[eventAction][eventStage][touchEventType]; + if (!eventMarker.IsEmpty()) { + BackEndEventManager::GetInstance().RemoveBackEndEvent(eventMarker); + } + } + } + } +} + +void DOMNode::Mount(int32_t slot) +{ + auto parentNode = parentNode_.Upgrade(); + if (!parentNode) { + return; + } + // flex-item could be used in div, list-item, tabs + static const std::unordered_set flexItemParents = { + DOM_NODE_TAG_DIV, + DOM_NODE_TAG_GRID_COLUMN, + DOM_NODE_TAG_LIST_ITEM, + DOM_NODE_TAG_LIST_ITEM_GROUP, + DOM_NODE_TAG_TABS, + DOM_NODE_TAG_REFRESH, + DOM_NODE_TAG_STEPPER_ITEM, + }; + if (flexItemParents.count(parentTag_) > 0) { + flexItemComponent_ = + AceType::MakeRefPtr(DEFAULT_FLEX_GROW, DEFAULT_FLEX_SHRINK, DEFAULT_FLEX_BASIS); + if (boxComponent_) { + // span has no box component. + boxComponent_->SetDeliverMinToChild(false); + } + } + GenerateComponentNode(); + if (parentNode->IsRootNode()) { + // When parent is root node, parent contains scroll component, + // box could handle percent with viewport size. + if (boxComponent_) { + // span has no box component. + boxComponent_->SetPercentFlag(PERCENT_FLAG_USE_VIEW_PORT); + } + } + parentNode->AddNode(AceType::Claim(this), slot); + OnMounted(parentNode); +} + +void DOMNode::AddEvent(int32_t pageId, const std::vector& events) +{ + ACE_SCOPED_TRACE("DOMNode::AddEvent"); + static const LinearMapNode eventSetters[] = { + { DOM_BLUR, + [](int32_t pageId, DOMNode& node) { + node.onBlurId_ = EventMarker(node.GetNodeIdForEvent(), DOM_BLUR, pageId); + } }, + { DOM_CAPTURE_TOUCH_CANCEL, + [](int32_t pageId, DOMNode& node) { + node.onTouchIds_[EventAction::ON][EventStage::CAPTURE][EventType::TOUCH_CANCEL] = + EventMarker(node.GetNodeIdForEvent(), DOM_CAPTURE_TOUCH_CANCEL, pageId); + } }, + { DOM_CAPTURE_TOUCH_END, + [](int32_t pageId, DOMNode& node) { + node.onTouchIds_[EventAction::ON][EventStage::CAPTURE][EventType::TOUCH_UP] = + EventMarker(node.GetNodeIdForEvent(), DOM_CAPTURE_TOUCH_END, pageId); + } }, + { DOM_CAPTURE_TOUCH_MOVE, + [](int32_t pageId, DOMNode& node) { + node.onTouchIds_[EventAction::ON][EventStage::CAPTURE][EventType::TOUCH_MOVE] = + EventMarker(node.GetNodeIdForEvent(), DOM_CAPTURE_TOUCH_MOVE, pageId); + } }, + { DOM_CAPTURE_TOUCH_START, + [](int32_t pageId, DOMNode& node) { + node.onTouchIds_[EventAction::ON][EventStage::CAPTURE][EventType::TOUCH_DOWN] = + EventMarker(node.GetNodeIdForEvent(), DOM_CAPTURE_TOUCH_START, pageId); + } }, + { DOM_CATCH_BUBBLE_TOUCH_CANCEL, + [](int32_t pageId, DOMNode& node) { + node.onTouchIds_[EventAction::CATCH][EventStage::BUBBLE][EventType::TOUCH_CANCEL] = + EventMarker(node.GetNodeIdForEvent(), DOM_CATCH_BUBBLE_TOUCH_CANCEL, pageId); + } }, + { DOM_CATCH_BUBBLE_TOUCH_END, + [](int32_t pageId, DOMNode& node) { + node.onTouchIds_[EventAction::CATCH][EventStage::BUBBLE][EventType::TOUCH_UP] = + EventMarker(node.GetNodeIdForEvent(), DOM_CATCH_BUBBLE_TOUCH_END, pageId); + } }, + { DOM_CATCH_BUBBLE_TOUCH_MOVE, + [](int32_t pageId, DOMNode& node) { + node.onTouchIds_[EventAction::CATCH][EventStage::BUBBLE][EventType::TOUCH_MOVE] = + EventMarker(node.GetNodeIdForEvent(), DOM_CATCH_BUBBLE_TOUCH_MOVE, pageId); + } }, + { DOM_CATCH_BUBBLE_TOUCH_START, + [](int32_t pageId, DOMNode& node) { + node.onTouchIds_[EventAction::CATCH][EventStage::BUBBLE][EventType::TOUCH_DOWN] = + EventMarker(node.GetNodeIdForEvent(), DOM_CATCH_BUBBLE_TOUCH_START, pageId); + } }, + { DOM_CATCH_CAPTURE_TOUCH_CANCEL, + [](int32_t pageId, DOMNode& node) { + node.onTouchIds_[EventAction::CATCH][EventStage::CAPTURE][EventType::TOUCH_CANCEL] = + EventMarker(node.GetNodeIdForEvent(), DOM_CATCH_CAPTURE_TOUCH_CANCEL, pageId); + } }, + { DOM_CATCH_CAPTURE_TOUCH_END, + [](int32_t pageId, DOMNode& node) { + node.onTouchIds_[EventAction::CATCH][EventStage::CAPTURE][EventType::TOUCH_UP] = + EventMarker(node.GetNodeIdForEvent(), DOM_CATCH_CAPTURE_TOUCH_END, pageId); + } }, + { DOM_CATCH_CAPTURE_TOUCH_MOVE, + [](int32_t pageId, DOMNode& node) { + node.onTouchIds_[EventAction::CATCH][EventStage::CAPTURE][EventType::TOUCH_MOVE] = + EventMarker(node.GetNodeIdForEvent(), DOM_CATCH_CAPTURE_TOUCH_MOVE, pageId); + } }, + { DOM_CATCH_CAPTURE_TOUCH_START, + [](int32_t pageId, DOMNode& node) { + node.onTouchIds_[EventAction::CATCH][EventStage::CAPTURE][EventType::TOUCH_DOWN] = + EventMarker(node.GetNodeIdForEvent(), DOM_CATCH_CAPTURE_TOUCH_START, pageId); + } }, + { DOM_CLICK, + [](int32_t pageId, DOMNode& node) { + node.onClickId_ = EventMarker(node.GetNodeIdForEvent(), DOM_CLICK, pageId); + } }, + { DOM_FOCUS, + [](int32_t pageId, DOMNode& node) { + node.onFocusId_ = EventMarker(node.GetNodeIdForEvent(), DOM_FOCUS, pageId); + } }, + { DOM_KEY, + [](int32_t pageId, DOMNode& node) { + node.onKeyId_ = EventMarker(node.GetNodeIdForEvent(), DOM_KEY, pageId); + } }, + { DOM_LONG_PRESS, + [](int32_t pageId, DOMNode& node) { + node.onLongPressId_ = EventMarker(node.GetNodeIdForEvent(), DOM_LONG_PRESS, pageId); + } }, + { DOM_MOUSE, + [](int32_t pageId, DOMNode& node) { + node.onMouseId_ = EventMarker(node.GetNodeIdForEvent(), DOM_MOUSE, pageId); + } }, + { DOM_SWIPE, + [](int32_t pageId, DOMNode& node) { + node.onSwipeId_ = EventMarker(node.GetNodeIdForEvent(), DOM_SWIPE, pageId); + } }, + { DOM_TOUCH_CANCEL, + [](int32_t pageId, DOMNode& node) { + node.onTouchIds_[EventAction::ON][EventStage::BUBBLE][EventType::TOUCH_CANCEL] = + EventMarker(node.GetNodeIdForEvent(), DOM_TOUCH_CANCEL, pageId); + } }, + { DOM_TOUCH_END, + [](int32_t pageId, DOMNode& node) { + node.onTouchIds_[EventAction::ON][EventStage::BUBBLE][EventType::TOUCH_UP] = + EventMarker(node.GetNodeIdForEvent(), DOM_TOUCH_END, pageId); + } }, + { DOM_TOUCH_MOVE, + [](int32_t pageId, DOMNode& node) { + node.onTouchIds_[EventAction::ON][EventStage::BUBBLE][EventType::TOUCH_MOVE] = + EventMarker(node.GetNodeIdForEvent(), DOM_TOUCH_MOVE, pageId); + } }, + { DOM_TOUCH_START, + [](int32_t pageId, DOMNode& node) { + node.onTouchIds_[EventAction::ON][EventStage::BUBBLE][EventType::TOUCH_DOWN] = + EventMarker(node.GetNodeIdForEvent(), DOM_TOUCH_START, pageId); + } }, + }; + for (const auto& event : events) { + if (AddSpecializedEvent(pageId, event)) { + continue; + } + auto setterIter = BinarySearchFindIndex(eventSetters, ArraySize(eventSetters), event.c_str()); + if (setterIter != -1) { + eventSetters[setterIter].value(pageId, *this); + } + } +} + +void DOMNode::SetAttr(const std::vector>& attrs) +{ + rootComponent_->SetUpdateType(UpdateType::ALL); + static const std::string flagOn = "on"; + static const std::string flagOff = "off"; + static const std::string flagAuto = "auto"; + // static linear map must be sorted by key. + static const LinearMapNode attrSetters[] = { + { DOM_CLICK_EFFECT, + [](const std::string &val, DOMNode &node) { + if (!node.transformComponent_) { + node.transformComponent_ = AceType::MakeRefPtr(); + } + node.hasClickEffect_ = true; + node.transformComponent_->SetClickSpringEffectType(ParseClickEffect(val)); + } }, + { DOM_DIR, + [](const std::string& val, DOMNode& node) { + if (val == "rtl") { + node.isRightToLeft_ = true; + } else if (val == "ltr") { + node.isRightToLeft_ = false; + } + } }, + { DOM_FOCUSABLE, + [](const std::string& value, DOMNode& node) { + node.focusable_.first = StringToBool(value); + node.focusable_.second = true; // Tag whether user defined focusable. + } }, + { DOM_ID, [](const std::string& value, DOMNode& node) { node.hasIdAttr_ = true; } }, +#ifndef WEARABLE_PRODUCT + { DOM_SCENE_LABEL, + [](const std::string& value, DOMNode& node) { + static const LinearMapNode multimodalSceneMap[] = { + { "audio", SceneLabel::AUDIO }, { "common", SceneLabel::COMMON }, + { "page", SceneLabel::PAGE }, { "switch", SceneLabel::SWITCH }, + { "video", SceneLabel::VIDEO }, + }; + auto iter = BinarySearchFindIndex( + multimodalSceneMap, ArraySize(multimodalSceneMap), value.c_str()); + if (iter != -1) { + node.multimodalProperties_.scene = multimodalSceneMap[iter].value; + } + } }, +#endif + { DOM_SHOW, + [](const std::string& value, DOMNode& node) { + if (node.useLiteStyle_) { + node.visibility_ = value == "true" ? VisibilityType::VISIBLE : VisibilityType::HIDDEN; + } else { + node.SetShowAttr(value); + } + node.hasDisplayStyle_ = true; + } }, +#ifndef WEARABLE_PRODUCT + { DOM_SUBSCRIPT_FLAG, + [](const std::string& value, DOMNode& node) { + node.multimodalProperties_.useSubscript = + (value == flagOn) || (value == flagAuto && node.IsSubscriptEnable()); + } }, + { DOM_SUBSCRIPT_LABEL, + [](const std::string& value, DOMNode& node) { node.multimodalProperties_.subscriptLabel = value; } }, + { DOM_TOUCHABLE, [](const std::string& value, DOMNode& node) { node.touchable_ = StringToBool(value); } }, + { DOM_VOICE_LABEL, + [](const std::string& value, DOMNode& node) { node.multimodalProperties_.voiceLabel = value; } }, +#endif + }; + + for (const auto& attr : attrs) { + if (attr.first == DOM_DISABLED) { + nodeDisabled_ = StringToBool(attr.second); + } + + if (attr.first == DOM_BUTTON_WAITING) { + isWaiting_ = StringToBool(attr.second); + } + + if (attr.first == DOM_CHECKED) { + isChecked_ = StringToBool(attr.second); + } + + if (SetSpecializedAttr(attr)) { + continue; + } + auto operatorIter = BinarySearchFindIndex(attrSetters, ArraySize(attrSetters), attr.first.c_str()); + if (operatorIter != -1) { + attrSetters[operatorIter].value(attr.second, *this); + } + } +} + +void DOMNode::CallMethod(const std::string& method, const std::string& args) +{ + if (method == COMMON_METHOD_FOCUS) { + LOGD("CallMethod: node tag: %{public}s call focus method.", tag_.c_str()); + if (!focusableEventComponent_) { + LOGE("CallMethod: call focus method failed, focusableEventComponent is null"); + return; + } + + bool shouldFocus = true; + std::unique_ptr argsValue = JsonUtil::ParseJsonString(args); + if (argsValue && argsValue->IsArray() && argsValue->GetArraySize() == COMMON_METHOD_FOCUS_ARGS_SIZE) { + std::unique_ptr focusValue = argsValue->GetArrayItem(0)->GetValue(COMMON_METHOD_FOCUS); + if (focusValue && focusValue->IsBool()) { + shouldFocus = focusValue->GetBool(); + } + } + OnRequestFocus(shouldFocus); + } else if (method == DOM_LIST_METHOD_SCROLL_BY) { + std::unique_ptr argsValue = JsonUtil::ParseJsonString(args); + if (!argsValue || !argsValue->IsArray() || argsValue->GetArraySize() != 1) { + LOGE("parse args error"); + return; + } + std::unique_ptr scrollByPara = argsValue->GetArrayItem(0); + double x = scrollByPara->GetDouble("dx", 0.0); + double y = scrollByPara->GetDouble("dy", 0.0); + bool isSmooth = scrollByPara->GetBool("smooth", true); + OnScrollBy(x, y, isSmooth); + } else { + CallSpecializedMethod(method, args); + } +} + +void DOMNode::OnRequestFocus(bool shouldFocus) +{ + auto controller = focusableEventComponent_->GetFocusableController(); + if (!controller) { + return; + } + controller->RequestFocus(shouldFocus); +} + +void DOMNode::OnScrollBy(double dx, double dy, bool isSmooth) +{ + auto scrollComponent = GetScrollComponent(); + if (!scrollComponent) { + return; + } + auto positionController = scrollComponent->GetScrollPositionController(); + if (!positionController) { + return; + } + positionController->ScrollBy(dx, dy, isSmooth); +} + +void DOMNode::SetShowAttr(const std::string& showValue) +{ + showAttr_ = showValue; + if (showValue == "false") { + display_ = DisplayType::NONE; + } else { + display_ = DisplayType::NO_SETTING; + } +} + +void DOMNode::OnActive(bool isActive) +{ + isActive_ = isActive; + UpdatePseudoStyle(true); +} + +void DOMNode::OnFocus(bool isFocus) +{ + isFocus_ = isFocus; + UpdatePseudoStyle(true); +} + +void DOMNode::OnChecked(bool isChecked) +{ + isChecked_ = isChecked; + UpdatePseudoStyle(true); +} + +void DOMNode::MarkNeedUpdate() +{ + auto pipelineContext = pipelineContext_.Upgrade(); + if (!pipelineContext) { + LOGE("pipelineContext_ is nullptr"); + return; + } + rootComponent_->MarkNeedUpdate(); + rootComponent_->SetUpdateType(UpdateType::ALL); + pipelineContext->ScheduleUpdate(rootComponent_); +} + +void DOMNode::SetOnFocusClick(const EventMarker& eventMarker) +{ + if (!focusableEventComponent_) { + return; + } + focusableEventComponent_->SetOnClickId(eventMarker); +} + +bool DOMNode::IsNodeDisabled() const +{ + return nodeDisabled_; +} + +void DOMNode::ResetDefaultStyles() +{ + width_ = Dimension(-1.0, DimensionUnit::PX); + height_ = Dimension(-1.0, DimensionUnit::PX); + + paddingLeft_ = Dimension(0.0, DimensionUnit::PX); + paddingRight_ = Dimension(0.0, DimensionUnit::PX); + paddingTop_ = Dimension(0.0, DimensionUnit::PX); + paddingBottom_ = Dimension(0.0, DimensionUnit::PX); + + marginLeft_ = Dimension(0.0, DimensionUnit::PX); + marginRight_ = Dimension(0.0, DimensionUnit::PX); + marginTop_ = Dimension(0.0, DimensionUnit::PX); + marginBottom_ = Dimension(0.0, DimensionUnit::PX); + + flexGrow_ = 0.0; + flexShrink_ = 1.0; + flexBasis_ = 0.0; + flexWeight_ = 0.0; + + minWidth_ = Dimension(0.0); + minHeight_ = Dimension(0.0); + maxWidth_ = Dimension(Size::INFINITE_SIZE); + maxHeight_ = Dimension(Size::INFINITE_SIZE); + displayIndex_ = 1; + aspectRatio_ = -1.0; + + opacity_ = 1.0; + + display_ = DisplayType::NO_SETTING; + hasDisplayStyle_ = false; + displayComponent_.Reset(); + visibility_ = VisibilityType::NO_SETTING; + if (!showAttr_.empty()) { + hasDisplayStyle_ = true; + SetShowAttr(showAttr_); + } + + borderLeftEdge_ = BorderEdge(Color::BLACK, Dimension(), BorderStyle::SOLID); + borderTopEdge_ = BorderEdge(Color::BLACK, Dimension(), BorderStyle::SOLID); + borderRightEdge_ = BorderEdge(Color::BLACK, Dimension(), BorderStyle::SOLID); + borderBottomEdge_ = BorderEdge(Color::BLACK, Dimension(), BorderStyle::SOLID); + border_ = Border(borderLeftEdge_, borderTopEdge_, borderRightEdge_, borderBottomEdge_); + + backDecoration_ = AceType::MakeRefPtr(); + frontDecoration_ = AceType::MakeRefPtr(); + gradient_ = Gradient(); + + backgroundImage_ = AceType::MakeRefPtr(); + + if (transformComponent_) { + transformComponent_->ResetTransform(); + } +} + +void DOMNode::UpdatePseudoStyleByStatus(int32_t status, bool isBackendChange) +{ + // first:use status as the key, search the complete matched; + // second:if first do not matched any, calculate the max value of key & status, select the max value one. + std::unordered_map matchedStyleMap; + auto matchedStyle = pseudoClassStyleMap_.find(status); + if (matchedStyle != pseudoClassStyleMap_.end()) { + matchedStyleMap = matchedStyle->second; + } else { + uint32_t maxAndResult = 0; + uint32_t maxValueKey = pseudoClassStyleMap_.begin()->first; + // status & map key, select the max result one + for (const auto& pseudoClass : pseudoClassStyleMap_) { + uint32_t key = pseudoClass.first; + uint32_t andResult = key & status; + if (andResult > maxAndResult) { + maxAndResult = andResult; + maxValueKey = key; + } + } + // if matched style except none pseudo style + if (maxAndResult > 0) { + matchedStyleMap = pseudoClassStyleMap_.find(maxValueKey)->second; + } + } + + ResetDefaultStyles(); + ResetInitializedStyle(); + + // if not none pseudo style, need set none pseudo style first. + auto nonePseudoStylesIter = pseudoClassStyleMap_.find(STATE_NORMAL); + if (status != STATE_NORMAL && nonePseudoStylesIter != pseudoClassStyleMap_.end()) { + for (const auto& noneTypeStyle : nonePseudoStylesIter->second) { + SetCurrentStyle(noneTypeStyle); + } + } + for (const auto& style : matchedStyleMap) { + SetCurrentStyle(style); + } + if (isBackendChange) { + auto pipelineContext = pipelineContext_.Upgrade(); + if (!pipelineContext) { + LOGE("pipelineContext_ is nullptr"); + return; + } + if (GetTag() != DOM_NODE_TAG_SPAN) { + UpdateUiComponents(); + } + PrepareSpecializedComponent(); + CompositeComponents(); + rootComponent_->MarkNeedUpdate(); + rootComponent_->SetUpdateType(UpdateType::STYLE); + pipelineContext->ScheduleUpdate(rootComponent_); + } +} + +uint32_t DOMNode::CalculatePseudoStatus() const +{ + uint32_t status = STATE_NORMAL; + if (isActive_) { + status |= STATE_ACTIVE; + } + if (nodeDisabled_) { + status |= STATE_DISABLED; + } + if (isFocus_) { + status |= STATE_FOCUS; + } + if (isChecked_) { + status |= STATE_CHECKED; + } + if (isWaiting_) { + status |= STATE_WAITING; + } + return status; +} + +void DOMNode::UpdateStyleWithChildren() +{ + auto status = CalculatePseudoStatus(); + UpdatePseudoStyleByStatus(status, true); + + for (const auto& child : children_) { + if (child) { + child->UpdateStyleWithChildren(); + } + } +} + +void DOMNode::UpdatePseudoStyle(bool isBackendChange) +{ + if (!HasPseudo()) { + return; + } + auto status = CalculatePseudoStatus(); + LOGD("UpdatePseudoStyle status is:%{public}d, isBackendChange:%{public}d", status, isBackendChange); + if (!isBackendChange) { + UpdatePseudoStyleByStatus(status, false); + return; + } + // Triggered by backend, elements may processing build or layout now. So post a new task to UI thread. + auto context = GetPipelineContext().Upgrade(); + if (!context) { + LOGE("Context is null!"); + return; + } + context->GetTaskExecutor()->PostTask( + [weak = AceType::WeakClaim(this), status = status]() { + auto node = weak.Upgrade(); + if (!node) { + return; + } + node->UpdatePseudoStyleByStatus(status, true); + }, + TaskExecutor::TaskType::UI); +} + +void DOMNode::SetStyle(const std::vector>& styles) +{ + ACE_SCOPED_TRACE("DOMNode::SetStyle"); + + for (const auto& style : styles) { + CachePseudoClassStyle(style); + if (style.first.find(DOM_PSEUDO_CLASS_SYMBOL) == std::string::npos) { + SetCurrentStyle(style); + } + } + OnSetStyleFinished(); +} + +void DOMNode::CachePseudoClassStyle(const std::pair& pseudoClassStyle) +{ + uint32_t pseudoClassType = STATE_NORMAL; + const auto& styleKey = pseudoClassStyle.first; + + if (styleKey.find(DOM_ACTIVE_PSEUDO_CLASS) != std::string::npos) { + pseudoClassType |= STATE_ACTIVE; + } + + if (styleKey.find(DOM_DISABLED_PSEUDO_CLASS) != std::string::npos) { + pseudoClassType |= STATE_DISABLED; + } + + if (styleKey.find(DOM_FOCUS_PSEUDO_CLASS) != std::string::npos) { + pseudoClassType |= STATE_FOCUS; + } + + if (styleKey.find(DOM_CHECKED_PSEUDO_CLASS) != std::string::npos) { + pseudoClassType |= STATE_CHECKED; + } + + if (styleKey.find(DOM_WAITING_PSEUDO_CLASS) != std::string::npos) { + pseudoClassType |= STATE_WAITING; + } + + cachedPseudoType_ |= pseudoClassType; + + auto pseudoSymbolLocation = styleKey.find(DOM_PSEUDO_CLASS_SYMBOL); + auto dealedStyleKey = + ((pseudoSymbolLocation != std::string::npos) ? styleKey.substr(0, pseudoSymbolLocation) : styleKey); + + auto styleMapIter = pseudoClassStyleMap_.find(pseudoClassType); + + if (styleMapIter != pseudoClassStyleMap_.end()) { + auto result = styleMapIter->second.try_emplace(dealedStyleKey, pseudoClassStyle.second); + if (!result.second) { + result.first->second = pseudoClassStyle.second; + } + return; + } + std::unordered_map newPseudoMap; + newPseudoMap.emplace(dealedStyleKey, pseudoClassStyle.second); + pseudoClassStyleMap_.emplace(pseudoClassType, newPseudoMap); +} + +void DOMNode::SetCurrentStyle(const std::pair& style) +{ + if (SetSpecializedStyle(style)) { + // If the subclass consumes this property, it will no longer look in the general property. + return; + } + // Operator map for styles + static const std::unordered_map styleOperators = { + // Set width and height + { DOM_WIDTH, [](const std::string& val, DOMNode& node) { + node.width_ = node.ParseDimension(val); + node.hasBoxStyle_ = true; + } }, + { DOM_HEIGHT, [](const std::string& val, DOMNode& node) { + node.height_ = node.ParseDimension(val); + node.hasBoxStyle_ = true; + } }, + + // Set padding + { DOM_PADDING, &DOMNode::SetPaddingOverall}, + { DOM_PADDING_LEFT, [](const std::string& val, DOMNode& node) { + node.paddingLeft_ = node.ParseDimension(val); + node.hasBoxStyle_ = true; + } }, + { DOM_PADDING_RIGHT, [](const std::string& val, DOMNode& node) { + node.paddingRight_ = node.ParseDimension(val); + node.hasBoxStyle_ = true; + } }, + { DOM_PADDING_TOP, [](const std::string& val, DOMNode& node) { + node.paddingTop_ = node.ParseDimension(val); + node.hasBoxStyle_ = true; + } }, + { DOM_PADDING_BOTTOM, [](const std::string& val, DOMNode& node) { + node.paddingBottom_ = node.ParseDimension(val); + node.hasBoxStyle_ = true; + } }, + { DOM_PADDING_START, [](const std::string& val, DOMNode& node) { + if (node.IsRightToLeft()) { + node.paddingRight_ = node.ParseDimension(val); + } else { + node.paddingLeft_ = node.ParseDimension(val); + } + node.hasBoxStyle_ = true; + } }, + { DOM_PADDING_END, [](const std::string& val, DOMNode& node) { + if (node.IsRightToLeft()) { + node.paddingLeft_ = node.ParseDimension(val); + } else { + node.paddingRight_ = node.ParseDimension(val); + } + node.hasBoxStyle_ = true; + } }, + // Set margin + { DOM_MARGIN, &DOMNode::SetMarginOverall}, + { DOM_MARGIN_LEFT, [](const std::string& val, DOMNode& node) { + node.marginLeft_ = node.ParseDimension(val); + node.hasBoxStyle_ = true; + } }, + { DOM_MARGIN_RIGHT, [](const std::string& val, DOMNode& node) { + node.marginRight_ = node.ParseDimension(val); + node.hasBoxStyle_ = true; + } }, + { DOM_MARGIN_TOP, [](const std::string& val, DOMNode& node) { + node.marginTop_ = node.ParseDimension(val); + node.hasBoxStyle_ = true; + } }, + { DOM_MARGIN_BOTTOM, [](const std::string& val, DOMNode& node) { + node.marginBottom_ = node.ParseDimension(val); + node.hasBoxStyle_ = true; + } }, + { DOM_MARGIN_START, [](const std::string& val, DOMNode& node) { + if (node.IsRightToLeft()) { + node.marginRight_ = node.ParseDimension(val); + } else { + node.marginLeft_ = node.ParseDimension(val); + } + node.hasBoxStyle_ = true; + } }, + { DOM_MARGIN_END, [](const std::string& val, DOMNode& node) { + if (node.IsRightToLeft()) { + node.marginLeft_ = node.ParseDimension(val); + } else { + node.marginRight_ = node.ParseDimension(val); + } + node.hasBoxStyle_ = true; + } }, + { DOM_LAYOUT_IN_BOX, [](const std::string& val, DOMNode& node) { + node.layoutInBox_ = StringToBool(val); + node.hasBoxStyle_ = true; + } }, + // Set flex + { DOM_FLEX, [](const std::string& val, DOMNode& node) { node.flexGrow_ = StringToDouble(val); } }, + { DOM_FLEX_GROW, [](const std::string& val, DOMNode& node) { node.flexGrow_ = StringToDouble(val); } }, + { DOM_FLEX_SHRINK, [](const std::string& val, DOMNode& node) { node.flexShrink_ = StringToDouble(val); } }, + { DOM_FLEX_BASIS, [](const std::string& val, DOMNode& node) { node.flexBasis_ = StringToDouble(val); } }, + { DOM_FLEX_WEIGHT, [](const std::string& val, DOMNode& node) { node.flexWeight_ = StringToDouble(val); } }, + { DOM_MIN_WIDTH, [](const std::string& val, DOMNode& node) { node.minWidth_ = node.ParseDimension(val); } }, + { DOM_MIN_HEIGHT, [](const std::string& val, DOMNode& node) { node.minHeight_ = node.ParseDimension(val); } }, + { DOM_MAX_WIDTH, [](const std::string& val, DOMNode& node) { node.maxWidth_ = node.ParseDimension(val); } }, + { DOM_MAX_HEIGHT, [](const std::string& val, DOMNode& node) { node.maxHeight_ = node.ParseDimension(val); } }, + { DOM_DISPLAY_INDEX, [](const std::string& val, DOMNode& node) { node.displayIndex_ = StringToInt(val); } }, + { DOM_ASPECT_RATIO, [](const std::string& val, DOMNode& node) { node.aspectRatio_ = StringToDouble(val); } }, + { DOM_ALIGN_SELF, [](const std::string& val, DOMNode& node) { node.alignSelf_ = val; } }, + // Set display + { DOM_OPACITY, [](const std::string& val, DOMNode& node) { + node.opacity_ = node.ParseDouble(val); + node.hasDisplayStyle_ = true; + } }, + { DOM_OVERFLOW_STYLE, [](const std::string& val, DOMNode& node) { + node.overflow_ = ConvertStrToOverflow(val); + node.hasOverflowStyle_ = true; + } }, + { DOM_DISPLAY, + [](const std::string& val, DOMNode& node) { + node.display_ = (val == DOM_DISPLAY_NONE) + ? DisplayType::NONE + : (val == DOM_DISPLAY_GRID) ? DisplayType::GRID : DisplayType::FLEX; + node.hasDisplayStyle_ = true; + } }, + { DOM_VISIBILITY, + [](const std::string& val, DOMNode& node) { + node.visibility_ = (val == DOM_VISIBILITY_HIDDEN) ? VisibilityType::HIDDEN : VisibilityType::VISIBLE; + node.hasDisplayStyle_ = true; + } }, + // Set border + { BORDER, &DOMNode::SetBorderOverall}, + // Set border width + { DOM_BORDER_WIDTH, &DOMNode::SetBorderWidthForFourEdges}, + { DOM_BORDER_LEFT_WIDTH, [](const std::string& val, DOMNode& node) { + node.borderLeftEdge_.SetWidth(node.ParseDimension(val)); + node.hasDecorationStyle_ = true; + node.hasBorderStyle_ = true; + } }, + { DOM_BORDER_RIGHT_WIDTH, [](const std::string& val, DOMNode& node) { + node.borderRightEdge_.SetWidth(node.ParseDimension(val)); + node.hasDecorationStyle_ = true; + node.hasBorderStyle_ = true; + } }, + { DOM_BORDER_TOP_WIDTH, [](const std::string& val, DOMNode& node) { + node.borderTopEdge_.SetWidth(node.ParseDimension(val)); + node.hasDecorationStyle_ = true; + node.hasBorderStyle_ = true; + } }, + { DOM_BORDER_BOTTOM_WIDTH, [](const std::string& val, DOMNode& node) { + node.borderBottomEdge_.SetWidth(node.ParseDimension(val)); + node.hasDecorationStyle_ = true; + node.hasBorderStyle_ = true; + } }, + // Set border color + { DOM_BORDER_COLOR, &DOMNode::SetBorderColorForFourEdges}, + { DOM_BORDER_LEFT_COLOR, [](const std::string& val, DOMNode& node) { + node.borderLeftEdge_.SetColor(node.ParseColor(val)); + node.hasDecorationStyle_ = true; + node.hasBorderStyle_ = true; + } }, + { DOM_BORDER_RIGHT_COLOR, [](const std::string& val, DOMNode& node) { + node.borderRightEdge_.SetColor(node.ParseColor(val)); + node.hasDecorationStyle_ = true; + node.hasBorderStyle_ = true; + } }, + { DOM_BORDER_TOP_COLOR, [](const std::string& val, DOMNode& node) { + node.borderTopEdge_.SetColor(node.ParseColor(val)); + node.hasDecorationStyle_ = true; + node.hasBorderStyle_ = true; + } }, + { DOM_BORDER_BOTTOM_COLOR, [](const std::string& val, DOMNode& node) { + node.borderBottomEdge_.SetColor(node.ParseColor(val)); + node.hasDecorationStyle_ = true; + node.hasBorderStyle_ = true; + } }, + // Set border radius + { DOM_BORDER_TOP_LEFT_RADIUS, [](const std::string& val, DOMNode& node) { + node.border_.SetTopLeftRadius(Radius(node.ParseDimension(val))); + node.hasDecorationStyle_ = true; + node.hasBorderStyle_ = true; + node.hasBorderRadiusStyle_ = true; + } }, + { DOM_BORDER_TOP_RIGHT_RADIUS, [](const std::string& val, DOMNode& node) { + node.border_.SetTopRightRadius(Radius(node.ParseDimension(val))); + node.hasDecorationStyle_ = true; + node.hasBorderStyle_ = true; + node.hasBorderRadiusStyle_ = true; + } }, + { DOM_BORDER_BOTTOM_LEFT_RADIUS, [](const std::string& val, DOMNode& node) { + node.border_.SetBottomLeftRadius(Radius(node.ParseDimension(val))); + node.hasDecorationStyle_ = true; + node.hasBorderRadiusStyle_ = true; + } }, + { DOM_BORDER_BOTTOM_RIGHT_RADIUS, [](const std::string& val, DOMNode& node) { + node.border_.SetBottomRightRadius(Radius(node.ParseDimension(val))); + node.hasDecorationStyle_ = true; + node.hasBorderStyle_ = true; + node.hasBorderRadiusStyle_ = true; + } }, + { DOM_BORDER_RADIUS, [](const std::string& val, DOMNode& node) { + node.border_.SetBorderRadius(Radius(node.ParseDimension(val))); + node.hasDecorationStyle_ = true; + node.hasBorderStyle_ = true; + node.hasBorderRadiusStyle_ = true; + } }, + // Set border style + { DOM_BORDER_LEFT_STYLE, [](const std::string& val, DOMNode& node) { + node.borderLeftEdge_.SetStyle(ConvertStrToBorderStyle(val)); + node.hasDecorationStyle_ = true; + node.hasBorderStyle_ = true; + } }, + { DOM_BORDER_RIGHT_STYLE, [](const std::string& val, DOMNode& node) { + node.borderRightEdge_.SetStyle(ConvertStrToBorderStyle(val)); + node.hasDecorationStyle_ = true; + node.hasBorderStyle_ = true; + } }, + { DOM_BORDER_TOP_STYLE, [](const std::string& val, DOMNode& node) { + node.borderTopEdge_.SetStyle(ConvertStrToBorderStyle(val)); + node.hasDecorationStyle_ = true; + node.hasBorderStyle_ = true; + } }, + { DOM_BORDER_BOTTOM_STYLE, [](const std::string& val, DOMNode& node) { + node.borderBottomEdge_.SetStyle(ConvertStrToBorderStyle(val)); + node.hasDecorationStyle_ = true; + node.hasBorderStyle_ = true; + } }, + { DOM_BORDER_STYLE, &DOMNode::SetBorderStyleForFourEdges}, + // Set position + { DOM_POSITION, + [](const std::string& val, DOMNode& node) { + node.position_ = val == DOM_POSITION_FIXED + ? PositionType::FIXED + : val == DOM_POSITION_ABSOLUTE ? PositionType::ABSOLUTE : PositionType::RELATIVE; + node.hasPositionStyle_ = true; + } }, + { DOM_POSITION_LEFT, + [](const std::string& val, DOMNode& node) { + if (!val.empty()) { + node.left_ = node.ParseDimension(val); + node.hasPositionStyle_ = true; + node.hasLeft_ = true; + } + } }, + { DOM_POSITION_RIGHT, + [](const std::string& val, DOMNode& node) { + if (!val.empty()) { + node.right_ = node.ParseDimension(val); + node.hasPositionStyle_ = true; + node.hasRight_ = true; + } + } }, + { DOM_POSITION_TOP, + [](const std::string& val, DOMNode& node) { + if (!val.empty()) { + node.top_ = node.ParseDimension(val); + node.hasPositionStyle_ = true; + node.hasTop_ = true; + } + } }, + { DOM_POSITION_BOTTOM, + [](const std::string& val, DOMNode& node) { + if (!val.empty()) { + node.bottom_ = node.ParseDimension(val); + node.hasPositionStyle_ = true; + node.hasBottom_ = true; + } + } }, + // Set background color and image + { DOM_BACKGROUND_COLOR, [](const std::string& val, DOMNode& node) { + node.backDecoration_->SetBackgroundColor(node.ParseColor(val)); + node.hasDecorationStyle_ = true; + node.hasBackGroundColor_ = true; + } }, + { DOM_BACKGROUND_IMAGE, [](const std::string& val, DOMNode& node) { + node.backgroundImage_->SetSrc(val); + node.backDecoration_->SetImage(node.backgroundImage_); + node.hasDecorationStyle_ = true; + } }, + // Set background color and image + { DOM_BOX_SHADOW_H, [](const std::string& val, DOMNode& node) { + node.shadow_.SetOffsetX(StringToDouble(val)); + node.hasDecorationStyle_ = true; + node.hasShadowStyle_ = true; + } }, + { DOM_BOX_SHADOW_V, [](const std::string& val, DOMNode& node) { + node.shadow_.SetOffsetY(StringToDouble(val)); + node.hasDecorationStyle_ = true; + node.hasShadowStyle_ = true; + } }, + { DOM_BOX_SHADOW_BLUR, [](const std::string& val, DOMNode& node) { + node.shadow_.SetBlurRadius(StringToDouble(val)); + node.hasDecorationStyle_ = true; + node.hasShadowStyle_ = true; + } }, + { DOM_BOX_SHADOW_SPREAD, [](const std::string& val, DOMNode& node) { + node.shadow_.SetSpreadRadius(StringToDouble(val)); + node.hasDecorationStyle_ = true; + node.hasShadowStyle_ = true; + } }, + { DOM_BOX_SHADOW_COLOR, [](const std::string& val, DOMNode& node) { + if (val.empty()) { + node.shadow_.SetColor(Color::BLACK); + return; + } + node.shadow_.SetColor(node.ParseColor(val)); + node.hasDecorationStyle_ = true; + node.hasShadowStyle_ = true; + } }, + + { DOM_BACKGROUND_IMAGE_SIZE, &DOMNode::SetBackgroundImageSize }, + { DOM_BACKGROUND_IMAGE_POSITION, &DOMNode::SetBackgroundImagePosition }, + { DOM_BACKGROUND_IMAGE_REPEAT, [](const std::string& val, DOMNode& node) { + node.backgroundImage_->SetImageRepeat(ConvertStrToImageRepeat(val)); + node.hasDecorationStyle_ = true; + } }, + { DOM_BACKGROUND, &DOMNode::SetBackground }, + { DOM_TRANSFORM, &DOMNode::SetTransform }, + { DOM_TRANSFORM_ORIGIN, + [](const std::string& val, DOMNode& node) { + if (!node.transformComponent_) { + node.transformComponent_ = AceType::MakeRefPtr(); + } + std::vector offsets; + StringUtils::StringSpliter(val, ' ', offsets); + if (offsets.size() == TRANSFORM_SINGLE) { + Dimension originDimensionX = TRANSFORM_ORIGIN_DEFAULT; + Dimension originDimensionY = TRANSFORM_ORIGIN_DEFAULT; + // for Enum + if (CheckTransformEnum(val)) { + auto resultX = ConvertStrToTransformOrigin(val, Axis::HORIZONTAL); + if (resultX.first) { + originDimensionX = resultX.second; + } + auto resultY = ConvertStrToTransformOrigin(val, Axis::VERTICAL); + if (resultY.first) { + originDimensionY = resultY.second; + } + } else { + // for Dimension + originDimensionX = node.ParseDimension(val); + } + node.tweenOption_.SetTransformOrigin(originDimensionX, originDimensionY); + node.transformComponent_->SetOriginDimension(DimensionOffset(originDimensionX, originDimensionY)); + } else if (offsets.size() == TRANSFORM_DUAL) { + Dimension originDimensionX = TRANSFORM_ORIGIN_DEFAULT; + Dimension originDimensionY = TRANSFORM_ORIGIN_DEFAULT; + if (CheckTransformEnum(offsets[0])) { + auto result = ConvertStrToTransformOrigin(offsets[0], Axis::HORIZONTAL); + if (result.first) { + originDimensionX = result.second; + } + } else { + originDimensionX = node.ParseDimension(offsets[0]); + } + + if (CheckTransformEnum(offsets[1])) { + auto result = ConvertStrToTransformOrigin(offsets[1], Axis::VERTICAL); + if (result.first) { + originDimensionY = result.second; + } + } else { + originDimensionY = node.ParseDimension(offsets[1]); + } + node.tweenOption_.SetTransformOrigin(originDimensionX, originDimensionY); + node.transformComponent_->SetOriginDimension(DimensionOffset(originDimensionX, originDimensionY)); + } + } }, + { DOM_ANIMATION_DELAY, [](const std::string& val, DOMNode& node) { + if (val.find("ms") != std::string::npos) { + node.tweenOption_.SetDelay(StringUtils::StringToInt(val)); + } else { + node.tweenOption_.SetDelay(StringUtils::StringToInt(val) * MS_TO_S); + } + } }, + { DOM_ANIMATION_DURATION, [](const std::string& val, DOMNode& node) { + if (val.find("ms") != std::string::npos) { + node.tweenOption_.SetDuration(StringUtils::StringToInt(val)); + } else { + node.tweenOption_.SetDuration(StringUtils::StringToInt(val) * MS_TO_S); + } + } }, + { DOM_ANIMATION_ITERATION_COUNT, + [](const std::string& val, DOMNode& node) { + node.tweenOption_.SetIteration(StringUtils::StringToInt(val)); + } }, + { DOM_ANIMATION_TIMING_FUNCTION, + [](const std::string& val, DOMNode& node) { node.tweenOption_.SetCurve(CreateCurve(val)); } }, + { DOM_ANIMATION_FILL_MODE, + [](const std::string& val, DOMNode& node) { node.tweenOption_.SetFillMode(StringToFillMode(val)); } }, + { DOM_ANIMATION_DIRECTION, + [](const std::string& val, DOMNode& node) { + node.tweenOption_.SetAnimationDirection(StringToAnimationDirection(val)); + } }, + + { DOM_TRANSITION_DURATION, [](const std::string& val, DOMNode& node) { + if (val.find("ms") != std::string::npos) { + node.transitionEnterOption_.SetDuration(StringUtils::StringToInt(val)); + node.transitionExitOption_.SetDuration(StringUtils::StringToInt(val)); + } else { + node.transitionEnterOption_.SetDuration(StringUtils::StringToInt(val) * MS_TO_S); + node.transitionExitOption_.SetDuration(StringUtils::StringToInt(val) * MS_TO_S); + } + } }, + { DOM_TRANSITION_TIMING_FUNCTION, [](const std::string& val, DOMNode& node) { + node.transitionEnterOption_.SetCurve(CreateCurve(val)); + node.transitionExitOption_.SetCurve(CreateCurve(val)); + } }, + { DOM_SHARED_TRANSITION_TIMING_FUNCTION, + [](const std::string& val, DOMNode& node) { node.sharedTransitionOption_.SetCurve(CreateCurve(val)); } }, + { DOM_SHARED_TRANSITION_EFFECT, + [](const std::string& val, DOMNode& node) { node.sharedEffect_ = ParseSharedEffect(val, node); } }, + // set filter + { DOM_FILTER, + [](const std::string& val, DOMNode& node) { + node.hasFrontDecorationStyle_ = true; + if (!node.frontDecoration_) { + node.frontDecoration_ = AceType::MakeRefPtr(); + } + auto radius = ParseFunctionValue(val, DOM_BLUR, StringToDimension); + if (radius.IsValid()) { + node.frontDecoration_->SetBlurRadius(radius); + } else { + node.frontDecoration_->SetBlurRadius(Dimension {}); + } + } }, + // set backdrop-filter + { DOM_BACKDROP_FILTER, + [](const std::string& val, DOMNode& node) { + node.hasDecorationStyle_ = true; + auto radius = ParseFunctionValue(val, DOM_BLUR, StringToDimension); + if (radius.IsValid()) { + node.backDecoration_->SetBlurRadius(radius); + } else { + node.backDecoration_->SetBlurRadius(Dimension {}); + } + } }, + // card transition + { DOM_TRANSITION_EFFECT, + [](const std::string& val, DOMNode& node) { + node.hasTransitionAnimation_ = true; + if (!node.transformComponent_) { + node.transformComponent_ = AceType::MakeRefPtr(); + } + node.transformComponent_->SetTransitionEffect(ParseTransitionEffect(val)); + } }, + { DOM_WINDOW_FILTER, + [](const std::string& val, DOMNode& node) { + node.hasDecorationStyle_ = true; + + std::vector offsets; + StringUtils::StringSpliter(val, ' ', offsets); + // progress + if (offsets.size() >= SINGLE_VALUE) { + auto value = ParseFunctionValue(offsets[0], DOM_BLUR, StringToDimension); + if (value.Unit() == DimensionUnit::PERCENT) { + auto progress = value.Value(); + if (GreatNotEqual(progress, 0.0) && LessOrEqual(progress, 1.0)) { + node.backDecoration_->SetWindowBlurProgress(static_cast(progress)); + } + } else { + node.backDecoration_->SetWindowBlurProgress(static_cast(0.0f)); + } + } + // style + if (offsets.size() >= TWO_VALUES) { + auto value = StrToWindowBlurStyle(offsets[1]); + node.backDecoration_->SetWindowBlurStyle(value); + } + } }, + { DOM_ZINDEX, + [](const std::string& val, DOMNode& node) { + node.zIndex_ = StringToInt(val); + } }, + // scroll bar + { DOM_SCROLL_OVER_SCROLL_EFFECT, + [](const std::string& val, DOMNode& node) { + if (val == DOM_SCROLL_EFFECT_SPRING) { + node.edgeEffect_ = EdgeEffect::SPRING; + } else if (val == DOM_SCROLL_EFFECT_FADE) { + node.edgeEffect_ = EdgeEffect::FADE; + } else { + node.edgeEffect_ = EdgeEffect::NONE; + } + } }, + { DOM_SCROLL_SCROLLBAR_COLOR, + [](const std::string& val, DOMNode& node) { + node.scrollBarColor_.first = true; + node.scrollBarColor_.second = node.ParseColor(val); + } }, + { DOM_SCROLL_SCROLLBAR_WIDTH, + [](const std::string& val, DOMNode& node) { + node.scrollBarWidth_.first = true; + auto width = node.ParseDimension(val); + node.scrollBarWidth_.second = width.IsValid() ? width : Dimension(); + } }, + }; + auto operatorIter = styleOperators.find(style.first); + if (operatorIter != styleOperators.end()) { + operatorIter->second(style.second, *this); + } + static const std::unordered_set displayStyleSet = { DOM_OPACITY, DOM_DISPLAY, DOM_VISIBILITY }; + if (displayStyleSet.find(style.first) != displayStyleSet.end() && + AceApplicationInfo::GetInstance().GetIsCardType() && showAttr_ == "false") { + SetShowAttr(showAttr_); + } +} + +void DOMNode::GenerateComponentNode() +{ + UpdatePseudoStyle(false); + if (GetTag() != DOM_NODE_TAG_SPAN) { + UpdateUiComponents(); + UpdateTouchEventComponent(); + UpdateGestureEventComponent(); + UpdateMouseEventComponent(); + UpdateFocusableEventComponents(); + // Prepare for fixed position + UpdatePositionComponent(); +#ifndef WEARABLE_PRODUCT + UpdateMultimodalComponent(); + PrepareScrollComponent(); +#endif + } + PrepareSpecializedComponent(); + CompositeComponents(); + // Relative and absolute position needs to update the top component props. + UpdatePositionProps(); + auto rootChild = AceType::DynamicCast(rootComponent_->GetChild()); + if (isCustomComponent_) { + if (rootChild) { + rootChild->SetIsCustomComponent(isCustomComponent_); + rootChild->SetOnLayoutReadyMarker(EventMarker(GetNodeIdForEvent(), "")); + } + } + if (rootChild) { + rootChild->SetZIndex(zIndex_); + } + rootComponent_->MarkNeedUpdate(); +} + +void DOMNode::AddNode(const RefPtr& node, int32_t slot) +{ + if (!node) { + return; + } + auto isExist = std::find_if(children_.begin(), children_.end(), + [node](const RefPtr& child) { return child->GetNodeId() == node->GetNodeId(); }); + if (isExist != children_.end()) { + LOGW("the node[%{public}d] has already in the children", node->GetNodeId()); + return; + } + auto pos = children_.begin(); + std::advance(pos, slot); + children_.insert(pos, node); + if (node->position_ != PositionType::FIXED) { + if (!node->IsProxy() && display_ == DisplayType::NONE) { + node->GenerateComponentNode(); + } + OnChildNodeAdded(node, slot); + } +} + +void DOMNode::RemoveNode(const RefPtr& node) +{ + if (!node) { + return; + } + children_.remove_if([node](const RefPtr& child) { return node->GetNodeId() == child->GetNodeId(); }); + if (node->position_ != PositionType::FIXED) { + OnChildNodeRemoved(node); + } +} + +void DOMNode::SetDisplayStyle() +{ + switch (display_) { + case DisplayType::NONE: + visible_ = VisibleType::GONE; + break; + case DisplayType::GRID: + case DisplayType::FLEX: + default: + visible_ = (visibility_ == VisibilityType::HIDDEN) ? VisibleType::INVISIBLE : VisibleType::VISIBLE; + break; + } +} + +void SetBgImgSizeX(const BackgroundImageSizeType type, const double value, BackgroundImageSize& bgImgSize) +{ + bgImgSize.SetSizeTypeX(type); + bgImgSize.SetSizeValueX(value); +} + +void SetBgImgSizeY(const BackgroundImageSizeType type, const double value, BackgroundImageSize& bgImgSize) +{ + bgImgSize.SetSizeTypeY(type); + bgImgSize.SetSizeValueY(value); +} + +const RefPtr& DOMNode::BuildTransitionComponent() +{ + transitionComponent_ = AceType::MakeRefPtr(); + if (isRightToLeft_) { + transitionComponent_->SetTextDirection(TextDirection::RTL); + } + if (transitionEnterOption_.IsValid() || transitionExitOption_.IsValid()) { + if (!transitionEnterOption_.GetCurve()) { + // use FRICTION as transition default curve. + transitionEnterOption_.SetCurve(Curves::FRICTION); + transitionExitOption_.SetCurve(Curves::FRICTION); + } + transitionComponent_->SetContentTransitionOption(transitionEnterOption_, transitionExitOption_); + } + return transitionComponent_; +} + +void DOMNode::SetBackgroundImageSize(const std::string& value, DOMNode& node) +{ + static const LinearMapNode bgImageSizeType[] = { + { DOM_BACKGROUND_IMAGE_SIZE_AUTO, BackgroundImageSizeType::AUTO }, + { DOM_BACKGROUND_IMAGE_SIZE_CONTAIN, BackgroundImageSizeType::CONTAIN }, + { DOM_BACKGROUND_IMAGE_SIZE_COVER, BackgroundImageSizeType::COVER }, + }; + BackgroundImageSize bgImgSize; + auto spaceIndex = value.find(' ', 0); + if (spaceIndex != std::string::npos) { + std::string valueX = value.substr(0, spaceIndex); + std::string valueY = value.substr(spaceIndex + 1, value.size() - spaceIndex - 1); + if (valueX.find("px") != std::string::npos) { + SetBgImgSizeX(BackgroundImageSizeType::LENGTH, StringToDouble(valueX), bgImgSize); + } else if (valueX.find('%') != std::string::npos) { + SetBgImgSizeX(BackgroundImageSizeType::PERCENT, StringToDouble(valueX), bgImgSize); + } else { + bgImgSize.SetSizeTypeX(BackgroundImageSizeType::AUTO); + } + if (valueY.find("px") != std::string::npos) { + SetBgImgSizeY(BackgroundImageSizeType::LENGTH, StringToDouble(valueY), bgImgSize); + } else if (valueY.find('%') != std::string::npos) { + SetBgImgSizeY(BackgroundImageSizeType::PERCENT, StringToDouble(valueY), bgImgSize); + } else { + bgImgSize.SetSizeTypeY(BackgroundImageSizeType::AUTO); + } + } else { + auto sizeTypeIter = BinarySearchFindIndex(bgImageSizeType, ArraySize(bgImageSizeType), value.c_str()); + if (sizeTypeIter != -1) { + bgImgSize.SetSizeTypeX(bgImageSizeType[sizeTypeIter].value); + bgImgSize.SetSizeTypeY(bgImageSizeType[sizeTypeIter].value); + } else if (value.find("px") != std::string::npos) { + SetBgImgSizeX(BackgroundImageSizeType::LENGTH, StringToDouble(value), bgImgSize); + bgImgSize.SetSizeTypeY(BackgroundImageSizeType::AUTO); + } else if (value.find('%') != std::string::npos) { + SetBgImgSizeX(BackgroundImageSizeType::PERCENT, StringToDouble(value), bgImgSize); + bgImgSize.SetSizeTypeY(BackgroundImageSizeType::AUTO); + } else { + bgImgSize.SetSizeTypeX(BackgroundImageSizeType::AUTO); + bgImgSize.SetSizeTypeY(BackgroundImageSizeType::AUTO); + } + } + node.backgroundImage_->SetImageSize( + bgImgSize.GetSizeTypeX(), bgImgSize.GetSizeValueX(), bgImgSize.GetSizeTypeY(), bgImgSize.GetSizeValueY()); + node.hasDecorationStyle_ = true; +} + +void DOMNode::SetBackgroundImagePosition(const std::string& value, DOMNode& node) +{ + BackgroundImagePosition backgroundImagePosition; + if (!ParseBackgroundImagePosition(value, backgroundImagePosition)) { + LOGE("Invalid background image position."); + return; + } + node.backgroundImage_->SetImagePosition(backgroundImagePosition.GetSizeTypeX(), + backgroundImagePosition.GetSizeValueX(), backgroundImagePosition.GetSizeTypeY(), + backgroundImagePosition.GetSizeValueY()); + node.hasDecorationStyle_ = true; +} + +void DOMNode::SetBackground(const std::string& value, DOMNode& node) +{ + LOGD("DOMNode::SetBackground value:%{private}s", value.c_str()); + auto backgroundJson = JsonUtil::ParseJsonString(value); + if (!backgroundJson->IsObject()) { + LOGE("background json is not Object"); + return; + } + if (backgroundJson->Contains(DOM_VALUES) && backgroundJson->GetValue(DOM_VALUES)->IsArray() && + backgroundJson->GetValue(DOM_VALUES)->GetArraySize() > 0) { + node.gradient_ = Gradient(); + auto values = backgroundJson->GetValue(DOM_VALUES)->GetArrayItem(0); + if (values->Contains(DOM_GRADIENT_TYPE) && values->GetValue(DOM_GRADIENT_TYPE)->IsString()) { + SetGradientType(values->GetValue(DOM_GRADIENT_TYPE)->GetString(), node); + } + if (values->Contains(DOM_GRADIENT_DIRECTIONS) && values->GetValue(DOM_GRADIENT_DIRECTIONS)->IsArray()) { + SetGradientDirections(values->GetValue(DOM_GRADIENT_DIRECTIONS), node); + } + if (values->Contains(DOM_GRADIENT_VALUES) && values->GetValue(DOM_GRADIENT_VALUES)->IsArray()) { + SetGradientColor(values->GetValue(DOM_GRADIENT_VALUES), node); + } + } + node.hasDecorationStyle_ = true; + node.hasBackGroundColor_ = true; +} + +void DOMNode::SetBorderColorForFourEdges(const std::string& value, DOMNode& node) +{ + node.borderLeftEdge_.SetColor(node.ParseColor(value)); + node.borderRightEdge_.SetColor(node.ParseColor(value)); + node.borderTopEdge_.SetColor(node.ParseColor(value)); + node.borderBottomEdge_.SetColor(node.ParseColor(value)); + node.hasDecorationStyle_ = true; + node.hasBorderStyle_ = true; +} + +void DOMNode::SetBorderStyleForFourEdges(const std::string& value, DOMNode& node) +{ + node.borderLeftEdge_.SetStyle(ConvertStrToBorderStyle(value)); + node.borderRightEdge_.SetStyle(ConvertStrToBorderStyle(value)); + node.borderTopEdge_.SetStyle(ConvertStrToBorderStyle(value)); + node.borderBottomEdge_.SetStyle(ConvertStrToBorderStyle(value)); + node.hasDecorationStyle_ = true; + node.hasBorderStyle_ = true; +} + +void DOMNode::SetBorderWidthForFourEdges(const std::string& value, DOMNode& node) +{ + node.borderLeftEdge_.SetWidth(node.ParseDimension(value)); + node.borderRightEdge_.SetWidth(node.ParseDimension(value)); + node.borderTopEdge_.SetWidth(node.ParseDimension(value)); + node.borderBottomEdge_.SetWidth(node.ParseDimension(value)); + node.hasDecorationStyle_ = true; + node.hasBorderStyle_ = true; +} + +void DOMNode::SetBorderOverall(const std::string& value, DOMNode& node) +{ + std::vector offsets; + StringUtils::StringSpliter(value, ' ', offsets); + switch (offsets.size()) { + case SINGLE_VALUE: + if (offsets[0].find("px") != std::string::npos) { + SetBorderWidthForFourEdges(offsets[0], node); + } else if (offsets[0] == "solid" || offsets[0] == "dotted" || offsets[0] == "dashed") { + SetBorderStyleForFourEdges(offsets[0], node); + } else { + SetBorderColorForFourEdges(offsets[0], node); + } + break; + case TWO_VALUES: + SetBorderWidthForFourEdges(offsets[0], node); + SetBorderStyleForFourEdges(offsets[1], node); + break; + case THREE_VALUES: + SetBorderWidthForFourEdges(offsets[0], node); + SetBorderStyleForFourEdges(offsets[1], node); + SetBorderColorForFourEdges(offsets[2], node); + break; + default: + break; + } +} + +void DOMNode::SetGradientType(const std::string& gradientType, DOMNode& node) +{ + if (gradientType == DOM_REPEATING_LINEAR_GRADIENT) { + node.gradient_.SetRepeat(true); + node.hasDecorationStyle_ = true; + } +} + +void DOMNode::SetGradientDirections(const std::unique_ptr& gradientDirections, DOMNode& node) +{ + std::unique_ptr angleItem; + std::unique_ptr sideItem; + std::unique_ptr cornerItem; + GradientDirection direction; + switch (gradientDirections->GetArraySize()) { + case DIRECTION_ANGLE: + angleItem = gradientDirections->GetArrayItem(0); + if (angleItem->IsString()) { + node.gradient_.SetUseAngle(true); + node.gradient_.SetAngle(StringToDouble(angleItem->GetString())); + node.hasDecorationStyle_ = true; + } + break; + case DIRECTION_SIDE: + sideItem = gradientDirections->GetArrayItem(1); + if (sideItem->IsString()) { + direction = StrToGradientDirection(sideItem->GetString()); + node.gradient_.SetDirection(direction); + node.hasDecorationStyle_ = true; + } + break; + case DIRECTION_CORNER: + sideItem = gradientDirections->GetArrayItem(1); + cornerItem = gradientDirections->GetArrayItem(2); + if (sideItem->IsString() && cornerItem->IsString()) { + direction = StrToGradientDirectionCorner(sideItem->GetString(), cornerItem->GetString()); + node.gradient_.SetDirection(direction); + node.hasDecorationStyle_ = true; + } + break; + default: + LOGE("gradientDirectionsLength error"); + break; + } +} + +void DOMNode::SetGradientColor(const std::unique_ptr& gradientColorValues, DOMNode& node) +{ + node.gradient_.ClearColors(); + int32_t gradientColorValuesLength = gradientColorValues->GetArraySize(); + for (int32_t i = 0; i < gradientColorValuesLength; i++) { + std::string gradientColorValue = gradientColorValues->GetArrayItem(i)->GetString(); + GradientColor gradientColor; + RemoveHeadTailSpace(gradientColorValue); + auto index = gradientColorValue.find(' '); + if (index != std::string::npos && index != 0) { + std::string color = gradientColorValue.substr(0, index); + std::string area = gradientColorValue.substr(index + 1, gradientColorValue.size() - index - 1); + gradientColor.SetColor(node.ParseColor(color)); + gradientColor.SetHasValue(true); + if (area.find("px") != std::string::npos) { + gradientColor.SetDimension(StringToDouble(area), DimensionUnit::PX); + } else if (area.find('%') != std::string::npos) { + gradientColor.SetDimension(StringToDouble(area), DimensionUnit::PERCENT); + } else { + LOGW("gradientColor DimensionUnit is incorrect)"); + gradientColor.SetHasValue(false); + } + } else { + gradientColor.SetHasValue(false); + gradientColor.SetColor(node.ParseColor(gradientColorValue)); + } + node.gradient_.AddColor(gradientColor); + node.hasDecorationStyle_ = true; + } +} + +void DOMNode::SetMarginOverall(const std::string& value, DOMNode& node) +{ + std::vector offsets; + StringUtils::StringSpliter(value, ' ', offsets); + switch (offsets.size()) { + case SINGLE_VALUE: + node.marginLeft_ = node.ParseDimension(offsets[0]); + node.marginRight_ = node.ParseDimension(offsets[0]); + node.marginTop_ = node.ParseDimension(offsets[0]); + node.marginBottom_ = node.ParseDimension(offsets[0]); + break; + case TWO_VALUES: + node.marginLeft_ = node.ParseDimension(offsets[1]); + node.marginRight_ = node.ParseDimension(offsets[1]); + node.marginTop_ = node.ParseDimension(offsets[0]); + node.marginBottom_ = node.ParseDimension(offsets[0]); + break; + case THREE_VALUES: + node.marginLeft_ = node.ParseDimension(offsets[1]); + node.marginRight_ = node.ParseDimension(offsets[1]); + node.marginTop_ = node.ParseDimension(offsets[0]); + node.marginBottom_ = node.ParseDimension(offsets[2]); + break; + case FOUR_VALUES: + node.marginLeft_ = node.ParseDimension(offsets[3]); + node.marginRight_ = node.ParseDimension(offsets[1]); + node.marginTop_ = node.ParseDimension(offsets[0]); + node.marginBottom_ = node.ParseDimension(offsets[2]); + break; + default: + break; + } + node.hasBoxStyle_ = true; +} + +void DOMNode::SetPaddingOverall(const std::string& value, DOMNode& node) +{ + std::vector offsets; + StringUtils::StringSpliter(value, ' ', offsets); + switch (offsets.size()) { + case SINGLE_VALUE: + node.paddingLeft_ = node.ParseDimension(offsets[0]); + node.paddingRight_ = node.ParseDimension(offsets[0]); + node.paddingTop_ = node.ParseDimension(offsets[0]); + node.paddingBottom_ = node.ParseDimension(offsets[0]); + break; + case TWO_VALUES: + node.paddingLeft_ = node.ParseDimension(offsets[1]); + node.paddingRight_ = node.ParseDimension(offsets[1]); + node.paddingTop_ = node.ParseDimension(offsets[0]); + node.paddingBottom_ = node.ParseDimension(offsets[0]); + break; + case THREE_VALUES: + node.paddingLeft_ = node.ParseDimension(offsets[1]); + node.paddingRight_ = node.ParseDimension(offsets[1]); + node.paddingTop_ = node.ParseDimension(offsets[0]); + node.paddingBottom_ = node.ParseDimension(offsets[2]); + break; + case FOUR_VALUES: + node.paddingLeft_ = node.ParseDimension(offsets[3]); + node.paddingRight_ = node.ParseDimension(offsets[1]); + node.paddingTop_ = node.ParseDimension(offsets[0]); + node.paddingBottom_ = node.ParseDimension(offsets[2]); + break; + default: + break; + } + node.hasBoxStyle_ = true; +} + +std::string DOMNode::GetTransformType(const std::unique_ptr& transformJson) +{ + if (transformJson->IsNull()) { + LOGE("transformJson is null"); + return ""; + } + return transformJson->GetKey(); +} + +std::string DOMNode::GetTransformTypeValue(const std::unique_ptr& transformJson) +{ + if (transformJson->IsNull()) { + LOGE("transformJson is null"); + return ""; + } + std::string jsonValue = transformJson->GetString(); + if (jsonValue.empty()) { + double jsonDouble = transformJson->GetDouble(); + return std::to_string(jsonDouble); + } + return jsonValue; +} + +void DOMNode::SetTransform(const std::string& value, DOMNode& node) +{ + if (!node.transformComponent_) { + node.transformComponent_ = AceType::MakeRefPtr(); + } + node.transformComponent_->ResetTransform(); // Avoid transfrom effect overlay. + auto jsonValue = node.GetTransformJsonValue(value); + std::unique_ptr transformJson = JsonUtil::ParseJsonString(jsonValue); + for (int32_t index = 0; index < transformJson->GetArraySize(); ++index) { + std::string typeKey = node.GetTransformType(transformJson->GetArrayItem(index)); + std::string typeValue = node.GetTransformTypeValue(transformJson->GetArrayItem(index)); + if ((!typeKey.empty()) && (!typeValue.empty())) { + // Operator map for transform + static const std::unordered_map transformOperators = { + { DOM_ROTATE, + [](const std::string& typeValue, DOMNode& node) { + node.transformComponent_->RotateZ(StringUtils::StringToDegree(typeValue)); + } }, + { DOM_ROTATE_X, + [](const std::string& typeValue, DOMNode& node) { + node.transformComponent_->RotateX(StringUtils::StringToDegree(typeValue)); + } }, + { DOM_ROTATE_Y, + [](const std::string& typeValue, DOMNode& node) { + node.transformComponent_->RotateY(StringUtils::StringToDegree(typeValue)); + } }, + { SCALE, + [](const std::string& typeValue, DOMNode& node) { + if (typeValue.find(' ', 0) != std::string::npos) { + Offset offset = ConvertStrToOffset(typeValue); + node.transformComponent_->Scale(offset.GetX(), offset.GetY()); + } else { + auto scaleValue = StringToDouble(typeValue); + node.transformComponent_->Scale(scaleValue, scaleValue); + } + } }, + { DOM_SCALE_X, [](const std::string& typeValue, + DOMNode& node) { node.transformComponent_->ScaleX(StringToDouble(typeValue)); } }, + { DOM_SCALE_Y, [](const std::string& typeValue, + DOMNode& node) { node.transformComponent_->ScaleY(StringToDouble(typeValue)); } }, + { DOM_TRANSLATE, + [](const std::string& typeValue, DOMNode& node) { + std::vector offsets; + StringUtils::StringSpliter(typeValue, ' ', offsets); + if (offsets.size() == TRANSFORM_DUAL) { + node.transformComponent_->Translate( + node.ParseDimension(offsets[0]), node.ParseDimension(offsets[1])); + } else if (offsets.size() == TRANSFORM_SINGLE) { + node.transformComponent_->TranslateX(node.ParseDimension(offsets[0])); + } + } }, + { DOM_TRANSLATE_X, + [](const std::string& typeValue, DOMNode& node) { + node.transformComponent_->TranslateX(node.ParseDimension(typeValue)); + } }, + { DOM_TRANSLATE_Y, + [](const std::string& typeValue, DOMNode& node) { + node.transformComponent_->TranslateY(node.ParseDimension(typeValue)); + } }, + }; + + auto operatorIter = transformOperators.find(typeKey); + if (operatorIter != transformOperators.end()) { + operatorIter->second(typeValue, node); + } + } + } +} + +// Convert transform style to json format, such as rotate(50deg) to {"ratate":"50deg"} +std::string DOMNode::GetTransformJsonValue(const std::string& value) +{ + auto rightIndex = value.find('('); + auto leftIndex = value.find(')'); + std::string jsonValue = value; + + if (rightIndex != std::string::npos && leftIndex != std::string::npos && (leftIndex - 1 - rightIndex > 0)) { + std::string transformType = value.substr(0, rightIndex); + std::string transformValue = value.substr(rightIndex + 1, leftIndex - 1 - rightIndex); + jsonValue = "{\"" + transformType + "\":\"" + transformValue + "\"}"; + } + + return jsonValue; +} + +void DOMNode::AddKeyframe( + double time, double typeValue, RefPtr>& transformKeyframes) +{ + auto keyframe = AceType::MakeRefPtr>(time, typeValue); + transformKeyframes->AddKeyframe(keyframe); +} + +void DOMNode::AddKeyframe( + double time, const std::string& typeValue, RefPtr>& transformKeyframes) +{ + DOMNode::AddKeyframe(time, StringToDouble(typeValue), transformKeyframes); +} + +void DOMNode::AddKeyframeOffset(const std::string& keyValue, double time, const std::string& typeValue, + RefPtr>& transformKeyframes) +{ + DimensionOffset dimensionOffset; + if (std::strcmp(keyValue.c_str(), DOM_TRANSLATE) == 0) { + if (typeValue.find(' ', 0) != std::string::npos) { + std::vector offsetValues; + StringUtils::StringSpliter(typeValue, ' ', offsetValues); + if (offsetValues.size() == OFFSET_VALUE_NUMBER) { + auto translateXDimension = ParseDimension(offsetValues[0]); + auto translateYDimension = ParseDimension(offsetValues[1]); + dimensionOffset = DimensionOffset(translateXDimension, translateYDimension); + } + } else { + if (typeValue.find('%') != std::string::npos) { + dimensionOffset = + DimensionOffset(ParseDimension(typeValue), Dimension(0.0, DimensionUnit::PERCENT)); + } else { + dimensionOffset = DimensionOffset(ParseDimension(typeValue), Dimension(0.0)); + } + } + } + if (std::strcmp(keyValue.c_str(), DOM_TRANSLATE_X) == 0) { + if (typeValue.find('%') != std::string::npos) { + dimensionOffset = DimensionOffset(ParseDimension(typeValue), Dimension(0.0, DimensionUnit::PERCENT)); + } else { + dimensionOffset = DimensionOffset(ParseDimension(typeValue), Dimension(0.0)); + } + } + if (std::strcmp(keyValue.c_str(), DOM_TRANSLATE_Y) == 0) { + if (typeValue.find('%') != std::string::npos) { + dimensionOffset = DimensionOffset(Dimension(0.0, DimensionUnit::PERCENT), ParseDimension(typeValue)); + } else { + dimensionOffset = DimensionOffset(Dimension(0.0), ParseDimension(typeValue)); + } + } + auto keyframe = AceType::MakeRefPtr>(time, dimensionOffset); + transformKeyframes->AddKeyframe(keyframe); +} + +void DOMNode::SetSharedTransitionStyle( + const std::vector>& animationKeyframes) +{ + if (!ParseAnimationStyle(animationKeyframes)) { + return; + } + sharedTransitionOption_ = TweenOption(); + TweenOptionSetKeyframes(sharedTransitionOption_); +} + +bool DOMNode::ParseAnimationStyle(const std::vector>& animationKeyframes) +{ + if (animationKeyframes.empty()) { + return false; + } + + for (auto& type : PROPERTY_ANIMATIONABLE_FLOAT_TYPES) { + propertyFloatAnimations[type] = AceType::MakeRefPtr>(); + } + + bgPositionAnimation_ = AceType::MakeRefPtr>(); + colorAnimation_ = AceType::MakeRefPtr>(); + colorAnimation_->SetEvaluator(AceType::MakeRefPtr()); + opacityAnimation_ = AceType::MakeRefPtr>(); + widthAnimation_ = AceType::MakeRefPtr>(); + heightAnimation_ = AceType::MakeRefPtr>(); + translateAnimation_ = AceType::MakeRefPtr>(); + translateXAnimation_ = AceType::MakeRefPtr>(); + translateYAnimation_ = AceType::MakeRefPtr>(); + scaleAnimationX_ = AceType::MakeRefPtr>(); + scaleAnimationY_ = AceType::MakeRefPtr>(); + scaleXAnimation_ = AceType::MakeRefPtr>(); + scaleYAnimation_ = AceType::MakeRefPtr>(); + rotateZAnimation_ = AceType::MakeRefPtr>(); + rotateXAnimation_ = AceType::MakeRefPtr>(); + rotateYAnimation_ = AceType::MakeRefPtr>(); + sameScale_ = true; + + for (const auto& animationNameKeyframe : animationKeyframes) { + auto keyframeTime = animationNameKeyframe.find(DOM_ANIMATION_NAME_TIME); + // if keyframeTime not exist in animationNameKeyframe, animationNameKeyframe have no meaning of existence. + if (keyframeTime == animationNameKeyframe.end()) { + LOGE(" DOMNode::SetAnimationStyle keyframeTime not exist"); + continue; + } + + double time = StringToDouble(keyframeTime->second) / PERCENTAGE; + for (const auto& [keyStyle, value] : animationNameKeyframe) { + // key style = DOM_ANIMATION_NAME_TIME is time, + // just need to pass the time into the function KeyframesAddKeyFrame + if (keyStyle == DOM_ANIMATION_NAME_TIME) { + continue; + } + KeyframesAddKeyFrame(keyStyle, value, time); + } + } + return true; +} + +void DOMNode::SetAnimationStyle(const std::vector>& animationKeyframes) +{ + if (!ParseAnimationStyle(animationKeyframes)) { + return; + } + if (isTransition_) { + if (isEnter_) { + TweenOptionSetKeyframes(transitionEnterOption_); + } else { + TweenOptionSetKeyframes(transitionExitOption_); + } + } else { + tweenOption_ = TweenOption(); + TweenOptionSetKeyframes(tweenOption_); + animationStyleUpdated_ = true; + } +} + +void DOMNode::SetTweenComponent(const RefPtr& tweenComponent) +{ + tweenComponent_ = tweenComponent; +} + +RefPtr DOMNode::GetTweenComponent() const +{ + return tweenComponent_; +} + +void DOMNode::KeyframesAddKeyFrame(const std::string& keyStyle, const std::string& value, double time) +{ + static const std::unordered_map + keyFrameAddMap = { + { DOM_BACKGROUND_COLOR, + [](const std::string& value, const double& time, DOMNode& node) { + auto keyframe = AceType::MakeRefPtr>(time, node.ParseColor(value)); + node.colorAnimation_->AddKeyframe(keyframe); + } }, + { DOM_BACKGROUND_IMAGE_POSITION, + [](const std::string& value, const double& time, DOMNode& node) { + BackgroundImagePosition backgroundImagePosition; + if (!ParseBackgroundImagePosition(value, backgroundImagePosition)) { + LOGW("parse frame failed."); + return; + } + auto keyframe = AceType::MakeRefPtr>(time, backgroundImagePosition); + node.bgPositionAnimation_->AddKeyframe(keyframe); + } }, + { DOM_HEIGHT, [](const std::string& value, const double& time, + DOMNode& node) { node.AddKeyframe(time, value, node.heightAnimation_); } }, + { DOM_OPACITY, [](const std::string& value, const double& time, + DOMNode& node) { node.AddKeyframe(time, value, node.opacityAnimation_); } }, + // margin + { DOM_MARGIN_LEFT, + [](const std::string& value, const double& time, DOMNode& node) { + node.AddKeyframe( + time, value, node.propertyFloatAnimations[PropertyAnimatableType::PROPERTY_MARGIN_LEFT]); + } }, + { DOM_MARGIN_RIGHT, + [](const std::string& value, const double& time, DOMNode& node) { + node.AddKeyframe( + time, value, node.propertyFloatAnimations[PropertyAnimatableType::PROPERTY_MARGIN_RIGHT]); + } }, + { DOM_MARGIN_TOP, + [](const std::string& value, const double& time, DOMNode& node) { + node.AddKeyframe( + time, value, node.propertyFloatAnimations[PropertyAnimatableType::PROPERTY_MARGIN_TOP]); + } }, + { DOM_MARGIN_BOTTOM, + [](const std::string& value, const double& time, DOMNode& node) { + node.AddKeyframe( + time, value, node.propertyFloatAnimations[PropertyAnimatableType::PROPERTY_MARGIN_BOTTOM]); + } }, + { DOM_MARGIN_START, + [](const std::string& value, const double& time, DOMNode& node) { + if (node.IsRightToLeft()) { + node.AddKeyframe( + time, value, node.propertyFloatAnimations[PropertyAnimatableType::PROPERTY_MARGIN_RIGHT]); + } else { + node.AddKeyframe( + time, value, node.propertyFloatAnimations[PropertyAnimatableType::PROPERTY_MARGIN_LEFT]); + } + } }, + { DOM_MARGIN_END, + [](const std::string& value, const double& time, DOMNode& node) { + if (node.IsRightToLeft()) { + node.AddKeyframe( + time, value, node.propertyFloatAnimations[PropertyAnimatableType::PROPERTY_MARGIN_LEFT]); + } else { + node.AddKeyframe( + time, value, node.propertyFloatAnimations[PropertyAnimatableType::PROPERTY_MARGIN_RIGHT]); + } + } }, + { DOM_MARGIN, + [](const std::string& value, const double& time, DOMNode& node) { + node.AddKeyframe( + time, value, node.propertyFloatAnimations[PropertyAnimatableType::PROPERTY_MARGIN_LEFT]); + node.AddKeyframe( + time, value, node.propertyFloatAnimations[PropertyAnimatableType::PROPERTY_MARGIN_RIGHT]); + node.AddKeyframe( + time, value, node.propertyFloatAnimations[PropertyAnimatableType::PROPERTY_MARGIN_TOP]); + node.AddKeyframe( + time, value, node.propertyFloatAnimations[PropertyAnimatableType::PROPERTY_MARGIN_BOTTOM]); + } }, + // padding + { DOM_PADDING_LEFT, + [](const std::string& value, const double& time, DOMNode& node) { + node.AddKeyframe( + time, value, node.propertyFloatAnimations[PropertyAnimatableType::PROPERTY_PADDING_LEFT]); + } }, + { DOM_PADDING_RIGHT, + [](const std::string& value, const double& time, DOMNode& node) { + node.AddKeyframe( + time, value, node.propertyFloatAnimations[PropertyAnimatableType::PROPERTY_PADDING_RIGHT]); + } }, + { DOM_PADDING_TOP, + [](const std::string& value, const double& time, DOMNode& node) { + node.AddKeyframe( + time, value, node.propertyFloatAnimations[PropertyAnimatableType::PROPERTY_PADDING_TOP]); + } }, + { DOM_PADDING_BOTTOM, + [](const std::string& value, const double& time, DOMNode& node) { + node.AddKeyframe( + time, value, node.propertyFloatAnimations[PropertyAnimatableType::PROPERTY_PADDING_BOTTOM]); + } }, + { DOM_PADDING_START, + [](const std::string& value, const double& time, DOMNode& node) { + if (node.IsRightToLeft()) { + node.AddKeyframe( + time, value, node.propertyFloatAnimations[PropertyAnimatableType::PROPERTY_PADDING_RIGHT]); + } else { + node.AddKeyframe( + time, value, node.propertyFloatAnimations[PropertyAnimatableType::PROPERTY_PADDING_LEFT]); + } + } }, + { DOM_PADDING_END, + [](const std::string& value, const double& time, DOMNode& node) { + if (node.IsRightToLeft()) { + node.AddKeyframe( + time, value, node.propertyFloatAnimations[PropertyAnimatableType::PROPERTY_PADDING_LEFT]); + } else { + node.AddKeyframe( + time, value, node.propertyFloatAnimations[PropertyAnimatableType::PROPERTY_PADDING_RIGHT]); + } + } }, + { DOM_PADDING, + [](const std::string& value, const double& time, DOMNode& node) { + node.AddKeyframe( + time, value, node.propertyFloatAnimations[PropertyAnimatableType::PROPERTY_PADDING_LEFT]); + node.AddKeyframe( + time, value, node.propertyFloatAnimations[PropertyAnimatableType::PROPERTY_PADDING_RIGHT]); + node.AddKeyframe( + time, value, node.propertyFloatAnimations[PropertyAnimatableType::PROPERTY_PADDING_TOP]); + node.AddKeyframe( + time, value, node.propertyFloatAnimations[PropertyAnimatableType::PROPERTY_PADDING_BOTTOM]); + } }, + { DOM_TRANSFORM, + [](const std::string& value, const double& time, DOMNode& node) { + std::unique_ptr transformJson = JsonUtil::ParseJsonString(value); + for (int32_t index = 0; index < transformJson->GetArraySize(); ++index) { + std::string typeKey = node.GetTransformType(transformJson->GetArrayItem(index)); + std::string typeValue = node.GetTransformTypeValue(transformJson->GetArrayItem(index)); + LOGD("DOMNode::SetAnimationStyle DOM_TRANSFORM typeKey: %{private}s typeValue: %{private}s", + typeKey.c_str(), typeValue.c_str()); + if ((!typeKey.empty()) && (!typeValue.empty())) { + node.TransformAnimationAddKeyframe(typeKey, typeValue, time); + } + } + } }, + { DOM_WIDTH, [](const std::string& value, const double& time, + DOMNode& node) { node.AddKeyframe(time, value, node.widthAnimation_); } }, + }; + + auto pos = keyFrameAddMap.find(keyStyle); + if (pos != keyFrameAddMap.end()) { + pos->second(value, time, *this); + } + +} + +void DOMNode::TransformAnimationAddKeyframe(const std::string& typeKey, const std::string& typeValue, double time) +{ + static const LinearMapNode + translateAddMap[] = { + { DOM_TRANSLATE, + [](const std::string& typeKey, const std::string& typeValue, const double& time, DOMNode& node) { + node.AddKeyframeOffset(typeKey, time, typeValue, node.translateAnimation_); + } }, + { DOM_TRANSLATE_X, + [](const std::string& typeKey, const std::string& typeValue, const double& time, DOMNode& node) { + node.AddKeyframeOffset(typeKey, time, typeValue, node.translateXAnimation_); + } }, + { DOM_TRANSLATE_Y, + [](const std::string& typeKey, const std::string& typeValue, const double& time, DOMNode& node) { + node.AddKeyframeOffset(typeKey, time, typeValue, node.translateYAnimation_); + } }, + }; + auto translateAddKeyframeIter = BinarySearchFindIndex(translateAddMap, ArraySize(translateAddMap), typeKey.c_str()); + if (translateAddKeyframeIter != -1) { + translateAddMap[translateAddKeyframeIter].value(typeKey, typeValue, time, *this); + } + static const LinearMapNode + transformAniAddKeyFrameMap[] = { + { DOM_ROTATE, + [](const std::string& typeValue, const double& time, DOMNode& node) { + node.AddKeyframe(time, StringUtils::StringToDegree(typeValue), node.rotateZAnimation_); + } }, + { DOM_ROTATE_X, + [](const std::string& typeValue, const double& time, DOMNode& node) { + node.AddKeyframe(time, StringUtils::StringToDegree(typeValue), node.rotateXAnimation_); + } }, + { DOM_ROTATE_Y, + [](const std::string& typeValue, const double& time, DOMNode& node) { + node.AddKeyframe(time, StringUtils::StringToDegree(typeValue), node.rotateYAnimation_); + } }, + { SCALE, + [](const std::string& typeValue, const double& time, DOMNode& node) { + if (typeValue.find(' ') != std::string::npos) { + std::vector values; + StringUtils::StringSpliter(typeValue, ' ', values); + if (values.size() == OFFSET_VALUE_NUMBER) { + double scaleValueX = StringToDouble(values[0]); + double scaleValueY = StringToDouble(values[1]); + node.AddKeyframe(time, scaleValueX, node.scaleAnimationX_); + node.AddKeyframe(time, scaleValueY, node.scaleAnimationY_); + node.maxScaleXY_ = std::max(scaleValueX, scaleValueY); + if (!NearEqual(scaleValueY, scaleValueX)) { + node.sameScale_ = false; + } + } + } else { + node.AddKeyframe(time, typeValue, node.scaleAnimationX_); + node.AddKeyframe(time, typeValue, node.scaleAnimationY_); + node.maxScaleXY_ = StringToDouble(typeValue); + } + } }, + { DOM_SCALE_X, + [](const std::string& typeValue, const double& time, DOMNode& node) { + node.sameScale_ = false; + node.AddKeyframe(time, typeValue, node.scaleXAnimation_); + double scaleValueX = StringToDouble(typeValue); + node.maxScaleXY_ = std::max(scaleValueX, node.maxScaleXY_); + } }, + { DOM_SCALE_Y, + [](const std::string& typeValue, const double& time, DOMNode& node) { + node.sameScale_ = false; + node.AddKeyframe(time, typeValue, node.scaleYAnimation_); + double scaleValueY = StringToDouble(typeValue); + node.maxScaleXY_ = std::max(scaleValueY, node.maxScaleXY_); + } }, + }; + + auto traFloatAniAddKeyframeIter = BinarySearchFindIndex( + transformAniAddKeyFrameMap, ArraySize(transformAniAddKeyFrameMap), typeKey.c_str()); + if (traFloatAniAddKeyframeIter != -1) { + transformAniAddKeyFrameMap[traFloatAniAddKeyframeIter].value(typeValue, time, *this); + } +} + +void DOMNode::TweenOptionSetKeyframes(TweenOption& tweenOption) +{ + if (!bgPositionAnimation_->GetKeyframes().empty()) { + tweenOption.SetBackgroundPositionAnimation(bgPositionAnimation_); + } + if (!colorAnimation_->GetKeyframes().empty()) { + tweenOption.SetColorAnimation(colorAnimation_); + } + if (!opacityAnimation_->GetKeyframes().empty()) { + tweenOption.SetOpacityAnimation(opacityAnimation_); + } + if (!widthAnimation_->GetKeyframes().empty()) { + tweenOption.SetPropertyAnimationFloat(PropertyAnimatableType::PROPERTY_WIDTH, widthAnimation_); + } + if (!heightAnimation_->GetKeyframes().empty()) { + tweenOption.SetPropertyAnimationFloat(PropertyAnimatableType::PROPERTY_HEIGHT, heightAnimation_); + } + + for (auto& [type, animation] : propertyFloatAnimations) { + if (!animation->GetKeyframes().empty()) { + tweenOption.SetPropertyAnimationFloat(type, animation); + } + } + + if (!translateAnimation_->GetKeyframes().empty()) { + tweenOption.SetTranslateAnimations(AnimationType::TRANSLATE, translateAnimation_); + } + if (!translateXAnimation_->GetKeyframes().empty()) { + tweenOption.SetTranslateAnimations(AnimationType::TRANSLATE_X, translateXAnimation_); + } + if (!translateYAnimation_->GetKeyframes().empty()) { + tweenOption.SetTranslateAnimations(AnimationType::TRANSLATE_Y, translateYAnimation_); + } + if (sameScale_ && (!scaleAnimationX_->GetKeyframes().empty())) { + tweenOption.SetTransformFloatAnimation(AnimationType::SCALE, scaleAnimationX_); + tweenOption.SetMaxScaleXY(maxScaleXY_); + } else { + if (!scaleAnimationX_->GetKeyframes().empty()) { + tweenOption.SetTransformFloatAnimation(AnimationType::SCALE_X, scaleAnimationX_); + } + if (!scaleAnimationY_->GetKeyframes().empty()) { + tweenOption.SetTransformFloatAnimation(AnimationType::SCALE_Y, scaleAnimationY_); + } + tweenOption.SetMaxScaleXY(maxScaleXY_); + } + if (!scaleXAnimation_->GetKeyframes().empty()) { + tweenOption.SetTransformFloatAnimation(AnimationType::SCALE_X, scaleXAnimation_); + tweenOption.SetMaxScaleXY(maxScaleXY_); + } + if (!scaleYAnimation_->GetKeyframes().empty()) { + tweenOption.SetTransformFloatAnimation(AnimationType::SCALE_Y, scaleYAnimation_); + tweenOption.SetMaxScaleXY(maxScaleXY_); + } + if (!rotateZAnimation_->GetKeyframes().empty()) { + tweenOption.SetTransformFloatAnimation(AnimationType::ROTATE_Z, rotateZAnimation_); + } + if (!rotateXAnimation_->GetKeyframes().empty()) { + tweenOption.SetTransformFloatAnimation(AnimationType::ROTATE_X, rotateXAnimation_); + } + if (!rotateYAnimation_->GetKeyframes().empty()) { + tweenOption.SetTransformFloatAnimation(AnimationType::ROTATE_Y, rotateYAnimation_); + } +} + +void DOMNode::CompositeComponents() +{ + std::vector> components; + // Only fixed position has position component + if (positionComponent_ && position_ == PositionType::FIXED) { + components.emplace_back(positionComponent_); + } + if (flexItemComponent_) { + // Update flex item after PrepareSpecializedComponent to make sure sub class has finished prepare. + UpdateFlexItemComponent(); + components.emplace_back(flexItemComponent_); + } + if (focusableEventComponent_) { + components.emplace_back(focusableEventComponent_); + } + if (touchEventComponent_) { + touchEventComponent_->SetIsVisible(visible_ == VisibleType::VISIBLE); + components.emplace_back(touchEventComponent_); + } + if (gestureEventComponent_) { + gestureEventComponent_->SetIsVisible(visible_ == VisibleType::VISIBLE); + components.emplace_back(gestureEventComponent_); + } +#ifndef WEARABLE_PRODUCT + if (multimodalComponent_) { + components.emplace_back(multimodalComponent_); + } +#endif + if (mouseEventComponent_) { + components.emplace_back(mouseEventComponent_); + } + + if (displayComponent_) { + displayComponent_->DisableLayer(IsLeafNode()); + components.emplace_back(displayComponent_); + if (focusableEventComponent_) { + bool show = (display_ != DisplayType::NONE); + focusableEventComponent_->SetShow(show); + } + } + + if (transformComponent_) { + components.emplace_back(transformComponent_); + } + if (tweenComponent_) { + tweenComponent_->SetLeafNode(IsLeafNode()); + components.emplace_back(tweenComponent_); + } + if (boxComponent_) { + components.emplace_back(boxComponent_); + } + if (scrollComponent_) { + components.emplace_back(scrollComponent_); + } + if (sharedTransitionComponent_) { + components.emplace_back(sharedTransitionComponent_); + } + // First, composite all common components. + for (int32_t idx = static_cast(components.size()) - 1; idx - 1 >= 0; --idx) { + components[idx - 1]->SetChild(DynamicCast(components[idx])); + } + // Then composite specialized components. + auto compositeComponent = CompositeSpecializedComponent(components); + // At last add to composite component. + rootComponent_->SetChild(compositeComponent); + // final set disabled status. + rootComponent_->SetDisabledStatus(nodeDisabled_); +} + +void DOMNode::UpdateFlexItemComponent() +{ + flexItemComponent_->SetFlexGrow(flexGrow_); + flexItemComponent_->SetFlexShrink(flexShrink_); + flexItemComponent_->SetFlexBasis(flexBasis_); + flexItemComponent_->SetFlexWeight(flexWeight_); + flexItemComponent_->SetDisplayIndex(displayIndex_); + const LinearMapNode ALIGN_SELF_TABLE[] = { + { "center", FlexAlign::CENTER }, + { "flex-end", FlexAlign::FLEX_END }, + { "flex-start", FlexAlign::FLEX_START }, + { "stretch", FlexAlign::STRETCH }, + }; + int64_t index = BinarySearchFindIndex(ALIGN_SELF_TABLE, ArraySize(ALIGN_SELF_TABLE), alignSelf_.c_str()); + if (index != -1) { + flexItemComponent_->SetAlignSelf(ALIGN_SELF_TABLE[index].value); + } else { + flexItemComponent_->SetAlignSelf(FlexAlign::AUTO); + } + auto parentNode = parentNode_.Upgrade(); + if ((parentNode) && + (parentNode->GetTag() == DOM_NODE_TAG_DIV || parentNode->GetTag() == DOM_NODE_TAG_GRID_COLUMN)) { + auto parent = AceType::DynamicCast(parentNode); + // Stretch flag means that if the child's main size is determined, it can not be stretched. + if (((parent->GetFlexDirection() == FlexDirection::ROW && GreatOrEqual(height_.Value(), 0.0)) || + (parent->GetFlexDirection() == FlexDirection::COLUMN && GreatOrEqual(width_.Value(), 0.0)))) { + flexItemComponent_->SetStretchFlag(false); + } else { + flexItemComponent_->SetStretchFlag(true); + } + } + // Make sure input layout constraint is valid + flexItemComponent_->SetMaxHeight(maxHeight_); + flexItemComponent_->SetMaxWidth(maxWidth_); + flexItemComponent_->SetMinHeight(minHeight_); + flexItemComponent_->SetMinWidth(minWidth_); + // If set aspect Ratio, it cannot be stretch + if (GreatNotEqual(aspectRatio_, 0.0)) { + flexItemComponent_->SetStretchFlag(false); + } + // If set display, this flexItem is ignored. + flexItemComponent_->SetIsHidden(display_ == DisplayType::NONE); +} + +void DOMNode::UpdateUiComponents() +{ + UpdateBoxComponent(); + UpdateDisplayComponent(); + UpdateTweenComponent(); +} + +void DOMNode::UpdateBoxSize(const Dimension& width, const Dimension& height) +{ + boxComponent_->SetHeight(height.Value(), height.Unit()); + boxComponent_->SetWidth(width.Value(), width.Unit()); +} + +void DOMNode::UpdateBoxPadding(const Edge& padding) +{ + boxComponent_->SetPadding(padding); +} + +void DOMNode::UpdateBoxBorder(const Border& border) +{ + backDecoration_->SetBorder(border); +} + +void DOMNode::UpdateBoxComponent() +{ + if (hasBoxStyle_) { + UpdateBoxSize(width_, height_); + UpdateBoxPadding(Edge(paddingLeft_, paddingTop_, paddingRight_, paddingBottom_)); + boxComponent_->SetMargin(Edge(marginLeft_, marginTop_, marginRight_, marginBottom_)); + boxComponent_->SetLayoutInBoxFlag(layoutInBox_); + } + if (flexItemComponent_) { + boxComponent_->SetDeliverMinToChild(false); + boxComponent_->SetAspectRatio(aspectRatio_); + boxComponent_->SetMinWidth(minWidth_); + boxComponent_->SetMinHeight(minHeight_); + boxComponent_->SetMaxWidth(maxWidth_); + boxComponent_->SetMaxHeight(maxHeight_); + } + + if (hasDecorationStyle_) { + border_.SetLeftEdge(borderLeftEdge_); + border_.SetRightEdge(borderRightEdge_); + border_.SetTopEdge(borderTopEdge_); + border_.SetBottomEdge(borderBottomEdge_); + // Do not support drawing a different border when there are rounded corners + if (border_.HasRadius() && !border_.IsAllEqual()) { + border_.SetBorderEdge(BorderEdge(Color::BLACK, Dimension(), BorderStyle::SOLID)); + } + UpdateBoxBorder(border_); + if (gradient_.IsValid()) { + backDecoration_->SetGradient(gradient_); + } + if (hasShadowStyle_) { + backDecoration_->ClearAllShadow(); + backDecoration_->AddShadow(shadow_); + } + boxComponent_->SetBackDecoration(backDecoration_); + } + + if (hasFrontDecorationStyle_) { + boxComponent_->SetFrontDecoration(frontDecoration_); + } + boxComponent_->SetOverflow(overflow_); +} + +void DOMNode::PrepareScrollComponent() +{ + // div and stack is specially handled. + if (GetTag() == DOM_NODE_TAG_DIV || GetTag() == DOM_NODE_TAG_STACK) { + return; + } + if (!hasOverflowStyle_ || overflow_ != Overflow::SCROLL) { + return; + } + if (boxComponent_->GetWidthDimension().IsValid() && boxComponent_->GetHeightDimension().IsValid()) { + if (!scrollComponent_) { + scrollComponent_ = AceType::MakeRefPtr(nullptr); + } + scrollComponent_->InitScrollBar(GetTheme(), scrollBarColor_, scrollBarWidth_, edgeEffect_); + } +} + +void DOMNode::UpdateDisplayComponent() +{ + if (hasDisplayStyle_) { + if (!displayComponent_) { + displayComponent_ = AceType::MakeRefPtr(rootComponent_->GetChild()); + } + displayComponent_->SetOpacity(opacity_); + SetDisplayStyle(); + displayComponent_->SetVisible(visible_); + bool show = (display_ != DisplayType::NONE); + if (!focusableEventComponent_ && !show) { + focusableEventComponent_ = AceType::MakeRefPtr(); + focusableEventComponent_->SetFocusable(true); + } + if (focusableEventComponent_) { + focusableEventComponent_->SetShow(show); + } + if (hasShadowStyle_) { + displayComponent_->SetShadow(shadow_); + } + } +} + +void DOMNode::UpdateTweenComponent() +{ + if (transformComponent_ && hasShadowStyle_) { + transformComponent_->SetShadow(shadow_); + } + // Only check animation style here. + if (tweenOption_.IsValid() && animationStyleUpdated_) { + if (!tweenComponent_) { + tweenComponent_ = AceType::MakeRefPtr(COMPONENT_PREFIX + std::to_string(nodeId_), tag_); + } + tweenComponent_->SetTweenOption(tweenOption_); + tweenComponent_->SetTweenOperation(TweenOperation::PLAY); + if (hasShadowStyle_) { + tweenComponent_->SetShadow(shadow_); + } + animationStyleUpdated_ = false; + } + if (!shareId_.empty()) { + if (!sharedTransitionComponent_) { + sharedTransitionComponent_ = AceType::MakeRefPtr( + "FrontendShared" + std::to_string(nodeId_), tag_, shareId_); + sharedTransitionComponent_->SetOption(sharedTransitionOption_); + sharedTransitionComponent_->SetEffect(sharedEffect_); + } else { + sharedTransitionComponent_->SetShareId(shareId_); + } + } +} + +bool DOMNode::IsTabbarSubNode() const +{ + if (isRootNode_) { + return GetTag() == DOM_NODE_TAG_TAB_BAR; + } + RefPtr parent = parentNode_.Upgrade(); + if (!parent) { + return false; + } + + if (parent->GetTag() == DOM_NODE_TAG_TAB_BAR) { + return true; + } + + while (!parent->IsRootNode()) { + if (parent->GetTag() == DOM_NODE_TAG_TAB_BAR) { + return true; + } + parent = parent->GetParentNode(); + if (!parent) { + return false; + } + } + return false; +} + +void DOMNode::PrepareTouchEvent(EventMarker& eventMarker, uint32_t type) +{ + bool isTababrSubNode = IsTabbarSubNode(); + if (isTababrSubNode) { + return; + } + + auto weak = AceType::WeakClaim(this); + if (eventMarker.IsEmpty()) { + eventMarker = BackEndEventManager::GetInstance().GetAvailableMarker(); + BackEndEventManager::GetInstance().BindBackendEvent( + eventMarker, [](const TouchEventInfo&) {}); + } + eventMarker.SetPreFunction([weak, type]() { + auto domNode = weak.Upgrade(); + if (!domNode) { + LOGE("get dom node failed!"); + return; + } + domNode->OnActive(type != EventType::TOUCH_UP && type != EventType::TOUCH_CANCEL); + }); +} + +void DOMNode::PrepareFocusableEventId() +{ + auto weak = AceType::WeakClaim(this); + + if (onFocusId_.IsEmpty()) { + onFocusId_ = BackEndEventManager::GetInstance().GetAvailableMarker(); + BackEndEventManager::GetInstance().BindBackendEvent(onFocusId_, []() {}); + } + + onFocusId_.SetPreFunction([weak]() { + auto domNode = weak.Upgrade(); + if (!domNode) { + LOGE("get dom node failed!"); + return; + } + domNode->OnFocus(true); + }); + + if (onBlurId_.IsEmpty()) { + onBlurId_ = BackEndEventManager::GetInstance().GetAvailableMarker(); + BackEndEventManager::GetInstance().BindBackendEvent(onBlurId_, []() {}); + } + + onBlurId_.SetPreFunction([weak]() { + auto domNode = weak.Upgrade(); + if (!domNode) { + LOGE("get dom node failed!"); + return; + } + domNode->OnFocus(false); + }); +} + +void DOMNode::UpdateTouchEventComponent() +{ + for (uint32_t eventAction = 0; eventAction < EventAction::SIZE; eventAction++) { + for (uint32_t eventStage = 0; eventStage < EventStage::SIZE; eventStage++) { + for (uint32_t touchEventType = 0; touchEventType < EventType::SIZE; touchEventType++) { + EventMarker& eventMarker = onTouchIds_[eventAction][eventStage][touchEventType]; + if (!eventMarker.IsEmpty() || HasActivePseudo()) { + if (!touchEventComponent_) { + touchEventComponent_ = AceType::MakeRefPtr(); + } + if (HasActivePseudo() && touchEventType != EventType::TOUCH_MOVE && + eventAction == EventAction::ON && eventStage == EventStage::BUBBLE) { + PrepareTouchEvent(eventMarker, touchEventType); + } + touchEventComponent_->SetEvent(eventMarker, eventAction, eventStage, touchEventType); + } + } + } + } + if (!onSwipeId_.IsEmpty()) { + if (!touchEventComponent_) { + touchEventComponent_ = AceType::MakeRefPtr(); + } + touchEventComponent_->SetOnSwipeId(onSwipeId_); + } + if (!touchable_) { + if (!touchEventComponent_) { + touchEventComponent_ = AceType::MakeRefPtr(); + } + touchEventComponent_->SetTouchable(touchable_); + } +} + +void DOMNode::UpdateMouseEventComponent() +{ + if (!onMouseId_.IsEmpty()) { + if (!mouseEventComponent_) { + mouseEventComponent_ = AceType::MakeRefPtr(); + } + mouseEventComponent_->SetOnMouseId(onMouseId_); + } +} + +void DOMNode::UpdateGestureEventComponent() +{ + if (!onClickId_.IsEmpty() || !onLongPressId_.IsEmpty() || hasIdAttr_) { + if (!gestureEventComponent_) { + gestureEventComponent_ = AceType::MakeRefPtr(); + } + gestureEventComponent_->SetOnClickId(onClickId_); + gestureEventComponent_->SetOnLongPressId(onLongPressId_); + } +} + +void DOMNode::UpdateFocusableEventComponents() +{ + if (UNFOCUSABLED_NODE.find(tag_) != UNFOCUSABLED_NODE.end()) { + return; + } + + if (!focusable_.second && onClickId_.IsEmpty() && onBlurId_.IsEmpty() && onFocusId_.IsEmpty() && + onKeyId_.IsEmpty() && !HasFocusPseudo()) { + return; + } + + if (!focusableEventComponent_) { + focusableEventComponent_ = AceType::MakeRefPtr(); + } + if (focusable_.second) { + focusableEventComponent_->SetFocusable(focusable_.first); + } else { + focusableEventComponent_->SetFocusable(true); + } + + focusableEventComponent_->SetOnClickId(onClickId_); + + PrepareFocusableEventId(); + + focusableEventComponent_->SetOnBlurId(onBlurId_); + focusableEventComponent_->SetOnFocusId(onFocusId_); + focusableEventComponent_->SetOnKeyId(onKeyId_); + if (g_focusableNode.empty()) { + g_focusableNode = std::unordered_set({ + DOM_NODE_TAG_BUTTON, + DOM_NODE_TAG_DIV, + DOM_NODE_TAG_LIST, + DOM_NODE_TAG_LIST_ITEM, + DOM_NODE_TAG_REFRESH, + DOM_NODE_TAG_INPUT, + DOM_NODE_TAG_OPTION, + DOM_NODE_TAG_PROGRESS, + DOM_NODE_TAG_POPUP, + DOM_NODE_TAG_RATING, + DOM_NODE_TAG_SELECT, + DOM_NODE_TAG_SLIDER, + DOM_NODE_TAG_STACK, + DOM_NODE_TAG_STEPPER, + DOM_NODE_TAG_STEPPER_ITEM, + DOM_NODE_TAG_SWIPER, + DOM_NODE_TAG_SWITCH, + DOM_NODE_TAG_TABS, + DOM_NODE_TAG_TAB_BAR, + DOM_NODE_TAG_TAB_CONTENT, + DOM_NODE_TAG_TEXTAREA, + DOM_NODE_TAG_TOGGLE, + DOM_NODE_TAG_SEARCH, + DOM_NODE_TAG_VIDEO, + DOM_NODE_TAG_CALENDAR, + DOM_NODE_TAG_PICKER_DIALOG, + DOM_NODE_TAG_PIECE, + }); + } + if (g_focusableNode.find(tag_) != g_focusableNode.end()) { + focusableEventComponent_->SetFocusNode(false); + } else { + focusableEventComponent_->SetFocusNode(true); + } +} + +void DOMNode::UpdatePositionProps() +{ + if (!hasPositionStyle_ || position_ == PositionType::FIXED) { + return; + } + hasPositionStyle_ = false; + auto tweenComponent = AceType::DynamicCast(rootComponent_->GetChild()); + if (tweenComponent) { + UpdateTweenPosition(tweenComponent); + } else { + // Set position props to first RenderComponent of node + auto compositeComponent = AceType::DynamicCast(rootComponent_->GetChild()); + if (!compositeComponent) { + return; + } + compositeComponent->SetHasLeft(hasLeft_); + compositeComponent->SetHasTop(hasTop_); + compositeComponent->SetHasBottom(hasBottom_); + compositeComponent->SetHasRight(hasRight_); + if (hasLeft_) { + compositeComponent->SetLeft(left_); + // reset value + hasLeft_ = false; + } + if (hasRight_) { + compositeComponent->SetRight(right_); + hasRight_ = false; + } + if (hasTop_) { + compositeComponent->SetTop(top_); + hasTop_ = false; + } + if (hasBottom_) { + compositeComponent->SetBottom(bottom_); + hasBottom_ = false; + } + compositeComponent->SetPositionType(position_); + } +} + +void DOMNode::UpdateTweenPosition(const RefPtr tweenComponent) +{ + if (!tweenComponent) { + return; + } + tweenComponent->SetHasLeft(hasLeft_); + tweenComponent->SetHasTop(hasTop_); + tweenComponent->SetHasBottom(hasBottom_); + tweenComponent->SetHasRight(hasRight_); + if (hasLeft_) { + tweenComponent->SetLeft(left_); + // reset value + hasLeft_ = false; + } + if (hasRight_) { + tweenComponent->SetRight(right_); + hasRight_ = false; + } + if (hasTop_) { + tweenComponent->SetTop(top_); + hasTop_ = false; + } + if (hasBottom_) { + tweenComponent->SetBottom(bottom_); + hasBottom_ = false; + } + tweenComponent->SetPositionType(position_); +} + +void DOMNode::UpdatePositionComponent() +{ + if (!hasPositionStyle_ || position_ != PositionType::FIXED) { + return; + } + if (!positionComponent_) { + positionComponent_ = AceType::MakeRefPtr(); + } + positionComponent_->SetTop(top_); + positionComponent_->SetRight(right_); + positionComponent_->SetBottom(bottom_); + positionComponent_->SetLeft(left_); + positionComponent_->SetHasLeft(hasLeft_); + positionComponent_->SetHasRight(hasRight_); + positionComponent_->SetHasBottom(hasBottom_); + positionComponent_->SetHasTop(hasTop_); +} + +RefPtr DOMNode::CompositeSpecializedComponent(const std::vector>& components) +{ + const auto& specializedComponent = GetSpecializedComponent(); + if (specializedComponent) { + specializedComponent->SetTouchable(touchable_); + } + if (components.empty()) { + return specializedComponent; + } else { + const auto& parent = components.back(); + if (parent) { + parent->SetChild(specializedComponent); + } + return AceType::DynamicCast(components.front()); + } +} +#ifndef WEARABLE_PRODUCT +void DOMNode::UpdateMultimodalComponent() +{ + if (GetClickId().IsEmpty()) { + return; + } + if (multimodalProperties_.IsUnavailable() || multimodalProperties_.scene == SceneLabel::SWITCH) { + return; + } + if (!multimodalComponent_) { + multimodalComponent_ = AceType::MakeRefPtr(pageId_); + } + multimodalComponent_->SetMultimodalProperties(multimodalProperties_); + multimodalComponent_->SetOnClickId(GetClickId()); +} +#endif + +RefPtr DOMNode::GetThemeConstants() const +{ + auto themeManager = GetThemeManager(); + if (!themeManager) { + return nullptr; + } + return themeManager->GetThemeConstants(); +} + +Color DOMNode::ParseColor(const std::string& value, uint32_t maskAlpha) const +{ + auto themeConstants = GetThemeConstants(); + auto&& noRefFunc = [&value, maskAlpha = maskAlpha]() { return Color::FromString(value, maskAlpha); }; + auto&& idRefFunc = [constants = themeConstants](uint32_t refId) { return constants->GetColor(refId); }; + return ParseThemeReference(value, noRefFunc, idRefFunc, Color::TRANSPARENT); +} + +double DOMNode::ParseDouble(const std::string& value) const +{ + auto themeConstants = GetThemeConstants(); + auto&& noRefFunc = [&value]() { return StringUtils::StringToDouble(value); }; + auto&& idRefFunc = [constants = themeConstants](uint32_t refId) { return constants->GetDouble(refId); }; + return ParseThemeReference(value, noRefFunc, idRefFunc, 0.0); +} + +Dimension DOMNode::ParseDimension(const std::string& value) const +{ + auto themeConstants = GetThemeConstants(); + auto&& noRefFunc = [&value]() { return StringUtils::StringToDimension(value); }; + auto&& idRefFunc = [constants = themeConstants](uint32_t refId) { return constants->GetDimension(refId); }; + return ParseThemeReference(value, noRefFunc, idRefFunc, Dimension()); +} + +Dimension DOMNode::ParseLineHeight(const std::string& value) const +{ + const auto& parseResult = ThemeUtils::ParseThemeIdReference(value); + if (!parseResult.parseSuccess) { + return StringUtils::StringToDimension(value); + } + auto themeConstants = GetThemeConstants(); + auto&& noRefFunc = [&value]() { return StringUtils::StringToDouble(value); }; + auto&& idRefFunc = [constants = themeConstants](uint32_t refId) { return constants->GetDouble(refId); }; + auto lineHeightScale = ParseThemeReference(value, noRefFunc, idRefFunc, 1.0); + // If got 0.0 from ThemeConstants, use default 1.0 + lineHeightScale = NearZero(lineHeightScale) ? 1.0 : lineHeightScale; + return Dimension(lineHeightScale, DimensionUnit::PERCENT); +} + +std::vector DOMNode::ParseFontFamilies(const std::string& value) const +{ + std::vector fontFamilies; + std::stringstream stream(value); + std::string fontFamily; + + auto themeConstants = GetThemeConstants(); + auto&& idRefFunc = [constants = themeConstants](uint32_t refId) { return constants->GetString(refId); }; + + while (getline(stream, fontFamily, ',')) { + auto&& noRefFunc = [&fontFamily]() { return fontFamily; }; + fontFamilies.emplace_back(ParseThemeReference(fontFamily, noRefFunc, idRefFunc, fontFamily)); + } + return fontFamilies; +} + +std::vector DOMNode::ParsePreferFontSizes(const std::string& value) const +{ + std::vector prefers; + std::stringstream stream(value); + std::string fontSize; + while (getline(stream, fontSize, ',')) { + prefers.emplace_back(ParseDimension(fontSize)); + } + std::sort(prefers.begin(), prefers.end(), + [](const Dimension& left, const Dimension& right) { return left.Value() > right.Value(); }); + return prefers; +} + +void DOMNode::AdjustParamInLiteMode() +{ + useLiteStyle_ = true; + // Change default value + if (boxComponent_) { + boxComponent_->SetUseLiteStyle(true); + boxComponent_->SetAlignment(Alignment::TOP_CENTER); + } + flexShrink_ = 0.0; + AdjustSpecialParamInLiteMode(); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_node.h b/frameworks/bridge/common/dom/dom_node.h new file mode 100644 index 00000000..5eddfda3 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_node.h @@ -0,0 +1,844 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_NODE_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_NODE_H + +#include +#include + +#include "base/json/json_util.h" +#include "base/memory/ace_type.h" +#include "base/utils/macros.h" +#include "core/animation/keyframe_animation.h" +#include "core/components/box/box_component.h" +#include "core/components/common/properties/shadow.h" +#include "core/components/display/display_component.h" +#include "core/components/flex/flex_component.h" +#include "core/components/flex/flex_item_component.h" +#include "core/components/focusable/focusable_component.h" +#include "core/components/gesture_listener/gesture_listener_component.h" +#include "core/components/list/list_component.h" +#include "core/components/mouse_listener/mouse_listener_component.h" +#include "core/components/page_transition/page_transition_component.h" +#include "core/components/positioned/positioned_component.h" +#include "core/components/shared_transition/shared_transition_component.h" +#include "core/components/stack/stack_component.h" +#include "core/components/swiper/swiper_component.h" +#include "core/components/theme/theme_utils.h" +#include "core/components/touch_listener/touch_listener_component.h" +#include "core/components/transform/transform_component.h" +#include "core/components/tween/tween_component.h" +#include "core/pipeline/pipeline_context.h" +#include "frameworks/bridge/common/dom/dom_type.h" + +#ifndef WEARABLE_PRODUCT +#include "core/components/multimodal/multimodal_component.h" +#include "core/event/multimodal/multimodal_properties.h" +#endif + +namespace OHOS::Ace::Framework { + +enum class DisplayType { + NO_SETTING = 0, + FLEX, + GRID, + NONE, +}; + +enum class VisibilityType { + NO_SETTING = 0, + VISIBLE, + HIDDEN, +}; + +// If no insertion location is specified, new child will be added to the end of children list by default. +inline constexpr int32_t DEFAULT_ITEM_INDEX = -1; + +class ACE_EXPORT DOMNode : public AceType { + DECLARE_ACE_TYPE(DOMNode, AceType); + +public: + DOMNode(NodeId nodeId, const std::string& nodeName); + ~DOMNode() override; + + virtual void SetAttr(const std::vector>& attrs); + virtual void SetStyle(const std::vector>& styles); + virtual void AddEvent(int32_t pageId, const std::vector& events); + void SetTweenComponent(const RefPtr& tweenComponent); + void SetAnimationStyle(const std::vector>& animationKeyframes); + bool ParseAnimationStyle(const std::vector>& animationKeyframes); + void SetSharedTransitionStyle(const std::vector>& animationKeyframes); + + void AddNode(const RefPtr& node, int32_t slot = DEFAULT_ITEM_INDEX); + void RemoveNode(const RefPtr& node); + virtual void Mount(int32_t slot); + void GenerateComponentNode(); + virtual void OnPageLoadFinish() {}; + + virtual void CallMethod(const std::string& method, const std::string& args); + + virtual void OnRequestFocus(bool shouldFocus); + + virtual void OnScrollBy(double dx, double dy, bool isSmooth); + + virtual void SetShowAttr(const std::string& showValue); + + virtual const RefPtr& GetScrollComponent() const + { + return scrollComponent_; + } + + void MarkNeedUpdate(); + + const std::list>& GetChildList() const + { + return children_; + } + + const RefPtr& GetRootComponent() const + { + return rootComponent_; + } + + const RefPtr& GetBoxComponent() const + { + return boxComponent_; + } + + const RefPtr& GetDisplayComponent() const + { + return displayComponent_; + } + + const RefPtr& GetTouchListenerComponent() const + { + return touchEventComponent_; + } + + const RefPtr& GetMouseListenerComponent() const + { + return mouseEventComponent_; + } + + const RefPtr& GetGestureListenerComponent() const + { + return gestureEventComponent_; + } + + const RefPtr& GetFocusableComponent() const + { + return focusableEventComponent_; + } + + const RefPtr& GetTransformComponent() const + { + return transformComponent_; + } + + PositionType GetPosition() const + { + return position_; + } + + const RefPtr& BuildTransitionComponent(); + + // Ensure DOMPopup can response onClick event even without defining it. + void SetOnClick(const EventMarker& eventMarker) + { + ACE_DCHECK(gestureEventComponent_); + gestureEventComponent_->SetOnClickId(eventMarker); + } + + void SetOnLongPress(const EventMarker& eventMarker) + { + gestureEventComponent_->SetOnLongPressId(eventMarker); + } + + void SetIsRootNode(bool isRootNode) + { + isRootNode_ = isRootNode; + } + + bool IsRootNode() const + { + return isRootNode_; + } + + void SetIsTransition(bool isTransition) + { + isTransition_ = isTransition; + } + + bool GetIsTransition() const + { + return isTransition_; + } + + void SetOnFocusClick(const EventMarker& eventMarker); + + bool IsNodeDisabled() const; + + void SetIsEnter(bool isEnter) + { + isEnter_ = isEnter; + } + + bool GetIsEnter() const + { + return isEnter_; + } + + NodeId GetNodeId() const + { + return nodeId_; + } + + std::string GetNodeIdForEvent() const + { + return isRootNode_ ? DOM_DEFAULT_ROOT_NODE_ID : std::to_string(GetNodeId()); + } + + const std::string& GetTag() const + { + return tag_; + } + + DisplayType GetDisplay() const + { + return display_; + } + + void SetDisplay(DisplayType type) + { + display_ = type; + } + + void SetProxyNode(bool isProxy) + { + isProxy_ = isProxy; + } + + bool IsProxy() const + { + return isProxy_; + } + + bool IsShow() const + { + return visible_ == VisibleType::VISIBLE && !NearZero(opacity_); + } + + const Dimension& GetHeight() const + { + return height_; + } + + void SetHeight(const Dimension& height) + { + height_ = height; + } + + const Dimension& GetWidth() const + { + return width_; + } + + void SetWidth(const Dimension& width) + { + width_ = width; + } + + NodeId GetParentId() const + { + return parentId_; + } + + RefPtr GetParentNode() const + { + return parentNode_.Upgrade(); + } + + bool IsTabbarSubNode() const; + + RefPtr GetTweenComponent() const; + + void SetParentNode(const RefPtr& parentNode) + { + if (!parentNode) { + return; + } + parentNode_ = parentNode; + parentId_ = parentNode->GetNodeId(); + parentTag_ = parentNode->GetTag(); + + if (tag_ == DOM_NODE_TAG_SVG || parentNode->HasSvgTag()) { + hasSvgTag_ = true; + } + } + + bool IsRightToLeft() const + { + return isRightToLeft_; + } + + int32_t GetPageId() const + { + return pageId_; + } + void SetPageId(int32_t pageId) + { + pageId_ = pageId; + } + + // Subclasses need to implement this interface to return their specialized components, which will be added to the + // last node of the component tree. + virtual RefPtr GetSpecializedComponent() = 0; + + void SetPipelineContext(const WeakPtr& pipelineContext) + { + pipelineContext_ = pipelineContext; + } + + const WeakPtr& GetPipelineContext() const + { + return pipelineContext_; + } + + // Initialize node theme style when created. + virtual void InitializeStyle() {}; + + void OnActive(bool isActive); + + bool HasPseudo() const + { + return (cachedPseudoType_ != STATE_NORMAL); + } + + bool HasDisabledPseudo() const + { + return ((cachedPseudoType_ & STATE_DISABLED) > 0); + } + + bool HasCheckedPseudo() const + { + return ((cachedPseudoType_ & STATE_CHECKED) > 0); + } + + bool HasFocusPseudo() const + { + return ((cachedPseudoType_ & STATE_FOCUS) > 0); + } + + bool HasActivePseudo() const + { + return ((cachedPseudoType_ & STATE_ACTIVE) > 0); + } + + void SetShareId(const std::string& shareId) + { + shareId_ = shareId; + } + + const std::string& GetShareId() const + { + return shareId_; + } + + void SetHasDisplayStyleFlag(bool flag) + { + hasDisplayStyle_ = flag; + } + + const Dimension& GetMarginTop() const + { + return marginTop_; + } + + const Dimension& GetMarginBottom() const + { + return marginBottom_; + } + + const Dimension& GetMarginLeft() const + { + return marginLeft_; + } + + const Dimension& GetMarginRight() const + { + return marginRight_; + } + + bool GetDisable() const + { + return nodeDisabled_; + } + + double GetFlexWeight() const + { + return flexWeight_; + } + + bool HasSvgTag() + { + return hasSvgTag_; + } + + /* + * Parse color from string content and reference for id/attr, including format: + * #rrggbb, #aarrggbb, "@id001", "@attr_sys_color". + */ + Color ParseColor(const std::string& value, uint32_t maskAlpha = COLOR_ALPHA_MASK) const; + + /* + * Parse double from string content and reference for id/attr, including format: + * 100.01, "@id001", "@attr_sys_alpha". + */ + double ParseDouble(const std::string& value) const; + + /* + * Parse dimension from string content and reference for id/attr, including format: + * 10px, "@id001", "@attr_sys_dimension". + */ + Dimension ParseDimension(const std::string& value) const; + + /* + * Parse line height from string content and reference for id/attr, including format: + * 1.5, "@id001", "@attr_sys_line_height". + */ + Dimension ParseLineHeight(const std::string& value) const; + + /* + * Parse font family list from string content and reference for id/attr, including format: + * sans-serif, "@id001", "@attr_sys_font_family". + */ + std::vector ParseFontFamilies(const std::string& value) const; + + /* + * Parse dimension list from string content and reference for id/attr, including format: + * 10px, "@id001", "@attr_sys_dimension". + */ + std::vector ParsePreferFontSizes(const std::string& value) const; + + RefPtr GetThemeManager() const + { + auto context = pipelineContext_.Upgrade(); + if (!context) { + return nullptr; + } + return context->GetThemeManager(); + } + + template + RefPtr GetTheme() const + { + auto context = pipelineContext_.Upgrade(); + if (!context) { + return nullptr; + } + auto themeManager = context->GetThemeManager(); + if (!themeManager) { + return nullptr; + } + return themeManager->GetTheme(); + } + + virtual void UpdateStyleWithChildren(); + + bool IsCustomComponent() const + { + return isCustomComponent_; + } + + void SetIsCustomComponent(bool isCustomComponent) + { + isCustomComponent_ = isCustomComponent; + } + + bool HasBorderRadiusStyle() const + { + return hasBorderRadiusStyle_; + } + + bool HasPositionStyle() const + { + return hasPositionStyle_; + } + + bool HasOverflowStyle() const + { + return hasOverflowStyle_; + } + + bool IsBoxWrap() const + { + return boxWrap_; + } + + void SetBoxWrap(bool boxWrap) + { + boxWrap_ = boxWrap; + } + + const TweenOption& GetTweenOption() const + { + return tweenOption_; + } + + void AdjustParamInLiteMode(); + + virtual void AdjustSpecialParamInLiteMode() {} + +protected: + virtual void OnMounted(const RefPtr& parentNode) {}; + virtual void OnChildNodeAdded(const RefPtr& child, int32_t slot) {}; + virtual void OnChildNodeRemoved(const RefPtr& child) {}; + virtual void CallSpecializedMethod(const std::string& method, const std::string& args) {}; + virtual void OnSetStyleFinished() {}; + virtual const EventMarker& GetClickId() + { + return onClickId_; + }; + + // Subclasses need to implement this interface to composite specialized component into common components. + virtual RefPtr CompositeSpecializedComponent(const std::vector>& components); + + // Each subclass needs to override this function to obtain the properties. If it returns true, it means that the + // property has been consumed. If it returns false, it means it is handed over to the parent class. + virtual bool SetSpecializedAttr(const std::pair& attr) + { + return false; + } + + // Each subclass needs to override this function to obtain the style. If it returns true, it means that the + // style has been consumed. If it returns false, it means it is handed over to the parent class. + virtual bool SetSpecializedStyle(const std::pair& style) + { + return false; + } + + // Each subclass needs to override this function to obtain the event. If it returns true, it means that the + // event has been consumed. If it returns false, it means it is handed over to the parent class. + virtual bool AddSpecializedEvent(int32_t pageId, const std::string& event) + { + return false; + } + + // Subclasses need to override this interface to implement the dynamic creation of subclass specialized components. + virtual void PrepareSpecializedComponent() {}; + + virtual void CompositeComponents(); + + virtual void UpdateBoxSize(const Dimension& width, const Dimension& height); + virtual void UpdateBoxPadding(const Edge& padding); + virtual void UpdateBoxBorder(const Border& border); + + // Subclasses need to override this interface to implement reset initialization style before any frontend style set. + virtual void ResetInitializedStyle() {}; + + // When the multi-mode input subscript is set to auto, need to determine whether the current component has the + // ability to support the subscript. + virtual bool IsSubscriptEnable() const + { + return false; + } + + virtual bool IsLeafNode() const + { + return false; + } + + void PrepareScrollComponent(); + + RefPtr GetLastCommonParent() + { + if (sharedTransitionComponent_) { + return sharedTransitionComponent_; + } + return boxComponent_; + } + + void SetAlignment(const Alignment& align) + { + ACE_DCHECK(boxComponent_); + boxComponent_->SetAlignment(align); + } + + void SetPosition(const PositionType& positionType, const Dimension& top, const Dimension& left) + { + hasPositionStyle_ = true; + position_ = positionType; + left_ = left; + top_ = top; + hasLeft_ = true; + hasTop_ = true; + } + + void OnChecked(bool isChecked); + + WeakPtr parentNode_; + NodeId parentId_ = -1; + bool isRootNode_ = false; + bool hasBackGroundColor_ = false; + bool hasPositionProcessed_ = false; + std::string parentTag_; + std::list> children_; +#ifndef WEARABLE_PRODUCT + MultimodalProperties multimodalProperties_; +#endif + RefPtr rootComponent_; + RefPtr boxComponent_; + RefPtr scrollComponent_; + RefPtr flexItemComponent_; + RefPtr transformComponent_; + WeakPtr pipelineContext_; + RefPtr backDecoration_; + RefPtr frontDecoration_; + Shadow shadow_; + Border border_ = Border(borderLeftEdge_, borderTopEdge_, borderRightEdge_, borderBottomEdge_); + Dimension paddingTop_; + Dimension paddingRight_; + Dimension paddingBottom_; + Dimension paddingLeft_; + bool hasBoxStyle_ = false; + bool hasDecorationStyle_ = false; + bool hasShadowStyle_ = false; + bool hasFrontDecorationStyle_ = false; + bool hasBorderStyle_ = false; + bool hasBorderRadiusStyle_ = false; + double opacity_ = 1.0; + bool hasClickEffect_ = false; + bool hasTransitionAnimation_ = false; + Overflow overflow_ = Overflow::OBSERVABLE; + bool hasOverflowStyle_ = false; + bool isCustomComponent_ = false; + Dimension height_ = Dimension(-1.0, DimensionUnit::PX); + Dimension width_ = Dimension(-1.0, DimensionUnit::PX); + bool useLiteStyle_ = false; + bool boxWrap_ = false; + + // scroll bar + std::pair scrollBarColor_; + std::pair scrollBarWidth_; + EdgeEffect edgeEffect_ = EdgeEffect::NONE; + +private: + static void SetBackgroundImageSize(const std::string& value, DOMNode& node); + static void SetBackgroundImagePosition(const std::string& value, DOMNode& node); + static void SetBorderColorForFourEdges(const std::string& value, DOMNode& node); + static void SetBorderStyleForFourEdges(const std::string& value, DOMNode& node); + static void SetBorderWidthForFourEdges(const std::string& value, DOMNode& node); + static void SetBorderOverall(const std::string& value, DOMNode& node); + static void SetMarginOverall(const std::string& value, DOMNode& node); + static void SetPaddingOverall(const std::string& value, DOMNode& node); + static void SetGradientType(const std::string& gradientType, DOMNode& node); + static void SetGradientDirections(const std::unique_ptr& gradientDirections, DOMNode& node); + static void SetGradientColor(const std::unique_ptr& gradientColorValues, DOMNode& node); + static void SetBackground(const std::string& value, DOMNode& node); + static void SetTransform(const std::string& value, DOMNode& node); + static void AddKeyframe( + double time, const std::string& typeValue, RefPtr>& transformKeyframes); + static void AddKeyframe( + double time, double typeValue, RefPtr>& transformKeyframes); + void AddKeyframeOffset(const std::string& keyValue, double time, const std::string& typeValue, + RefPtr>& transformKeyframes); + std::string GetTransformJsonValue(const std::string& value); + std::string GetTransformType(const std::unique_ptr& transformJson); + std::string GetTransformTypeValue(const std::unique_ptr& transformJson); + void KeyframesAddKeyFrame(const std::string& keyStyle, const std::string& value, double time); + void TransformAnimationAddKeyframe(const std::string& typeKey, const std::string& typeValue, double time); + void TweenOptionSetKeyframes(TweenOption& tweenOption); + void SetDisplayStyle(); + + void UpdateFlexItemComponent(); + void UpdateUiComponents(); + void UpdateBoxComponent(); + void UpdateDisplayComponent(); + void UpdateTweenComponent(); + void UpdateTouchEventComponent(); + void UpdateGestureEventComponent(); + void UpdateMouseEventComponent(); + void UpdateFocusableEventComponents(); + void UpdatePositionComponent(); + void UpdatePositionProps(); + void UpdateTweenPosition(const RefPtr tweenComponent); +#ifndef WEARABLE_PRODUCT + void UpdateMultimodalComponent(); +#endif + + void SetCurrentStyle(const std::pair& style); + void CachePseudoClassStyle(const std::pair& pseudoClassStyle); + void UpdatePseudoStyle(bool isBackendChange); + void PrepareTouchEvent(EventMarker& eventMarker, uint32_t type); + void PrepareFocusableEventId(); + void UpdatePseudoStyleByStatus(int32_t status, bool isBackendChange); + void ResetDefaultStyles(); + uint32_t CalculatePseudoStatus() const; + + // for state update callbacks + void OnFocus(bool isFocus); + + RefPtr GetThemeConstants() const; + + template + T ParseThemeReference(const std::string& value, std::function&& noRefFunc, + std::function&& idRefFunc, const T& errorValue) const + { + const auto& parseResult = ThemeUtils::ParseThemeIdReference(value); + if (!parseResult.parseSuccess) { + return noRefFunc(); + } + auto themeConstants = GetThemeConstants(); + if (!themeConstants) { + return errorValue; + } + // Refer to a theme id resource. + if (parseResult.isIdRef) { + return idRefFunc(parseResult.id); + } + // Refer to a theme attribute. + auto themeStyle = themeConstants->GetThemeStyle(); + if (!themeStyle) { + return errorValue; + } + return themeStyle->GetAttr(parseResult.refAttr, errorValue); + } + + int32_t pageId_ = -1; + NodeId nodeId_ = -1; + std::string tag_; + + RefPtr displayComponent_; + RefPtr backgroundImage_; + RefPtr touchEventComponent_; + RefPtr gestureEventComponent_; + RefPtr focusableEventComponent_; + RefPtr mouseEventComponent_; + + RefPtr positionComponent_; + RefPtr sharedTransitionComponent_; + + RefPtr tweenComponent_; + RefPtr transitionComponent_; + + EventMarker onTouchIds_[EventAction::SIZE][EventStage::SIZE][EventType::SIZE]; + EventMarker onClickId_; + EventMarker onLongPressId_; + EventMarker onFocusId_; + EventMarker onBlurId_; + EventMarker onKeyId_; + EventMarker onMouseId_; + EventMarker onSwipeId_; + + Dimension marginTop_; + Dimension marginRight_; + Dimension marginBottom_; + Dimension marginLeft_; + std::string alignSelf_; + bool isTransition_ = false; + bool isEnter_ = false; + bool layoutInBox_ = false; + bool isProxy_ = false; + + VisibleType visible_ { VisibleType::VISIBLE }; + VisibilityType visibility_ { VisibilityType::NO_SETTING }; + DisplayType display_ { DisplayType::NO_SETTING }; + std::string showAttr_; + bool hasDisplayStyle_ = false; + + // The target node (with id attribute) for popup should be added gesture event handler, + // it's ok to take 'id' as a flag, even not all dom nodes with id attribute should do this. + bool hasIdAttr_ = false; + + double flexGrow_ = 0.0; + double flexShrink_ = 1.0; + double flexBasis_ = 0.0; + double flexWeight_ = 0.0; + Dimension minWidth_ = Dimension(0.0); + Dimension minHeight_ = Dimension(0.0); + Dimension maxWidth_ = Dimension(Size::INFINITE_SIZE); + Dimension maxHeight_ = Dimension(Size::INFINITE_SIZE); + int32_t displayIndex_ = 1; + + double aspectRatio_ = 0.0; + + BorderEdge borderLeftEdge_ = BorderEdge(Color::BLACK, Dimension(), BorderStyle::SOLID); + BorderEdge borderTopEdge_ = BorderEdge(Color::BLACK, Dimension(), BorderStyle::SOLID); + BorderEdge borderRightEdge_ = BorderEdge(Color::BLACK, Dimension(), BorderStyle::SOLID); + BorderEdge borderBottomEdge_ = BorderEdge(Color::BLACK, Dimension(), BorderStyle::SOLID); + Gradient gradient_; + + PositionType position_ { PositionType::RELATIVE }; + Dimension bottom_; + Dimension left_; + Dimension right_; + Dimension top_; + bool hasLeft_ = false; + bool hasTop_ = false; + bool hasRight_ = false; + bool hasBottom_ = false; + bool hasPositionStyle_ = false; + bool hasSvgTag_ = false; + + RefPtr> translateAnimation_; + RefPtr> translateXAnimation_; + RefPtr> translateYAnimation_; + double maxScaleXY_ = -1.0; + RefPtr> scaleAnimationX_; + RefPtr> scaleAnimationY_; + RefPtr> scaleXAnimation_; + RefPtr> scaleYAnimation_; + RefPtr> rotateZAnimation_; + RefPtr> rotateXAnimation_; + RefPtr> rotateYAnimation_; + RefPtr> widthAnimation_; + RefPtr> heightAnimation_; + RefPtr> opacityAnimation_; + RefPtr> colorAnimation_; + RefPtr> bgPositionAnimation_; + std::unordered_map>> propertyFloatAnimations; + bool sameScale_ = true; + TweenOption tweenOption_; + TweenOption transitionEnterOption_; + TweenOption transitionExitOption_; + TweenOption sharedTransitionOption_; + RefPtr sharedEffect_; + bool animationStyleUpdated_ = false; + std::pair focusable_ = { false, false }; + bool touchable_ = true; + bool nodeDisabled_ = false; + // for direction + bool isRightToLeft_ = false; + // for pseudo class + std::unordered_map> pseudoClassStyleMap_; + bool isActive_ = false; + bool isFocus_ = false; + bool isChecked_ = false; + bool isWaiting_ = false; + uint32_t cachedPseudoType_ = STATE_NORMAL; + + int32_t zIndex_ = 0; + // for shared transition + std::string shareId_; +#ifndef WEARABLE_PRODUCT + // for multi modal input. + RefPtr multimodalComponent_; +#endif +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_NODE_H diff --git a/frameworks/bridge/common/dom/dom_option.cpp b/frameworks/bridge/common/dom/dom_option.cpp new file mode 100644 index 00000000..17eb29ac --- /dev/null +++ b/frameworks/bridge/common/dom/dom_option.cpp @@ -0,0 +1,168 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_option.h" + +#include "frameworks/bridge/common/dom/dom_reflect_map.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +namespace { + +const char MENU_OPTION_SHOW_TYPE[] = "show"; +const char MENU_OPTION_POPUP_TYPE[] = "popup"; + +} + +DOMOption::DOMOption(NodeId nodeId, const std::string& nodeName) : DOMNode(nodeId, nodeName) +{ + selectOptionComponent_ = AceType::MakeRefPtr(); + selectOptionComponent_->SetId(std::to_string(nodeId)); + selectOptionComponent_->SetTextDirection((IsRightToLeft() ? TextDirection::RTL : TextDirection::LTR)); +} + +void DOMOption::InitializeStyle() +{ + ResetInitializedStyle(); +} + +void DOMOption::ResetInitializedStyle() +{ + selectOptionComponent_->InitTheme(GetThemeManager()); + theme_ = GetTheme(); + if (theme_) { + selectOptionComponent_->SetClickedColor(theme_->GetClickedColor()); + selectOptionComponent_->SetSelectedColor(theme_->GetSelectedColor()); + selectOptionComponent_->SetFontColor(theme_->GetFontColor()); + selectOptionComponent_->SetFontSize(theme_->GetFontSize()); + selectOptionComponent_->SetFontWeight(theme_->GetFontWeight()); + selectOptionComponent_->SetFontFamily(theme_->GetFontFamily()); + selectOptionComponent_->SetTextDecoration(theme_->GetTextDecoration()); + selectOptionComponent_->SetAllowScale(theme_->IsAllowScale()); + } +} + +bool DOMOption::SetSpecializedAttr(const std::pair& attr) +{ +#if defined(WINDOWS_PLATFORM) || defined(MAC_PLATFORM) + if (attr.first != DOM_OPTION_CONTENT) { + attrs_.push_back(attr); + } +#endif + if (attr.first == DOM_OPTION_SELECTED) { + selectOptionComponent_->SetSelected(StringToBool(attr.second)); + return true; + } + + if (attr.first == DOM_OPTION_VALUE) { + selectOptionComponent_->SetValue(attr.second); + return true; + } + + if (attr.first == DOM_OPTION_ICON) { + if (!icon_) { + icon_ = AceType::MakeRefPtr(attr.second); + } else { + icon_->SetSrc(attr.second); + } + selectOptionComponent_->SetIcon(icon_); + return true; + } + + if (attr.first == DOM_OPTION_ACTION) { + if (attr.second == MENU_OPTION_SHOW_TYPE) { + selectOptionComponent_->SetShowInNavigationBar(ShowInNavigationBar::SHOW); + } else if (attr.second == MENU_OPTION_POPUP_TYPE) { + selectOptionComponent_->SetShowInNavigationBar(ShowInNavigationBar::POPUP); + } + return true; + } + + if (attr.first == DOM_OPTION_CONTENT) { + if (!content_) { + content_ = AceType::MakeRefPtr(attr.second); + } else { + content_->SetData(attr.second); + } + selectOptionComponent_->SetText(content_); + return true; + } + + if (attr.first == DOM_DISABLED) { + selectOptionComponent_->SetDisabled(StringToBool(attr.second)); + return true; + } + + if (attr.first == DOM_SHOW) { + selectOptionComponent_->SetVisible(StringToBool(attr.second)); + return true; + } + + if (attr.first == DOM_FOCUSABLE) { + selectOptionComponent_->SetFocusable(StringToBool(attr.second)); + return true; + } + + return false; +} + +bool DOMOption::SetSpecializedStyle(const std::pair& style) +{ +#if defined(WINDOWS_PLATFORM) || defined(MAC_PLATFORM) + styles_.push_back(style); +#endif + if (style.first == DOM_TEXTAREA_COLOR) { + selectOptionComponent_->SetFontColor(ParseColor(style.second)); + return true; + } + + if (style.first == DOM_TEXTAREA_FONT_SIZE) { + selectOptionComponent_->SetFontSize(ParseDimension(style.second)); + return true; + } + + if (style.first == DOM_TEXTAREA_FONT_WEIGHT) { + selectOptionComponent_->SetFontWeight(ConvertStrToFontWeight(style.second)); + return true; + } + + if (style.first == DOM_TEXTAREA_FONT_FAMILY) { + selectOptionComponent_->SetFontFamily(style.second); + return true; + } + + if (style.first == DOM_OPTION_TEXT_DECORATION) { + selectOptionComponent_->SetTextDecoration(ConvertStrToTextDecoration(style.second)); + return true; + } + + if (style.first == DOM_TEXT_ALLOW_SCALE) { + selectOptionComponent_->SetAllowScale(StringToBool(style.second)); + return true; + } + + return false; +} + +#if defined(WINDOWS_PLATFORM) || defined(MAC_PLATFORM) +void DOMOption::OnSetStyleFinished() +{ + std::reverse(std::begin(attrs_), std::end(attrs_)); + std::reverse(std::begin(styles_), std::end(styles_)); + selectOptionComponent_->SetAttr(attrs_); + selectOptionComponent_->SetStyle(styles_); +} +#endif +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_option.h b/frameworks/bridge/common/dom/dom_option.h new file mode 100644 index 00000000..735aa2e5 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_option.h @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_OPTION_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_OPTION_H + +#include "core/components/option/option_component.h" +#include "core/components/select/select_theme.h" +#include "core/components/theme/theme_manager.h" +#include "frameworks/bridge/common/dom/dom_node.h" +#include "frameworks/bridge/common/dom/dom_type.h" + +namespace OHOS::Ace::Framework { + +class DOMOption final : public DOMNode { + DECLARE_ACE_TYPE(DOMOption, DOMNode); + +public: + DOMOption(NodeId nodeId, const std::string& nodeName); + ~DOMOption() override = default; + + RefPtr GetSpecializedComponent() override + { + return selectOptionComponent_; + } + + void InitializeStyle() override; + + void ResetInitializedStyle() override; + +protected: + bool SetSpecializedAttr(const std::pair& attr) override; + bool SetSpecializedStyle(const std::pair& style) override; +#if defined(WINDOWS_PLATFORM) || defined(MAC_PLATFORM) + void OnSetStyleFinished() override; +#endif + +private: + RefPtr theme_; + RefPtr selectOptionComponent_; + std::list> children_; + RefPtr content_; + RefPtr icon_; + // used for inspector node in PC preview + std::vector> styles_; + std::vector> attrs_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_OPTION_H diff --git a/frameworks/bridge/common/dom/dom_panel.cpp b/frameworks/bridge/common/dom/dom_panel.cpp new file mode 100644 index 00000000..9d3cf163 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_panel.cpp @@ -0,0 +1,166 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_panel.h" + +#include "base/utils/string_utils.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +namespace { + +template +inline T ConvertStrToEnum(const char* key, const LinearMapNode* map, size_t length, T defaultValue) +{ + int64_t index = BinarySearchFindIndex(map, length, key); + return index != -1 ? map[index].value : defaultValue; +} + +} // namespace + +DOMPanel::DOMPanel(NodeId nodeId, const std::string& nodeName) : DOMNode(nodeId, nodeName) +{ + panelChild_ = AceType::MakeRefPtr(std::to_string(nodeId), nodeName); + if (IsRightToLeft()) { + panelChild_->SetTextDirection(TextDirection::RTL); + } +} + +void DOMPanel::PrepareSpecializedComponent() +{ + // adjust panel mode + if (type_ == PanelType::TEMP_DISPLAY && mode_ == PanelMode::MINI) { + mode_ = PanelMode::HALF; + } else if (type_ == PanelType::MINI_BAR && mode_ == PanelMode::HALF) { + mode_ = PanelMode::MINI; + } + panelChild_->SetPanelMode(mode_); + panelChild_->SetPanelType(type_); + panelChild_->SetHasDragBar(hasDragBar_); + panelChild_->SetMiniHeight(miniHeight_); + panelChild_->SetHalfHeight(halfHeight_); + panelChild_->SetFullHeight(fullHeight_); + panelChild_->SetHasBoxStyle(hasBoxStyle_); + panelChild_->SetHasDecorationStyle(hasDecorationStyle_); + panelChild_->SetHasBackgroundColor(hasBackGroundColor_); + panelChild_->SetHasBorderStyle(hasBorderStyle_); + if (boxComponent_) { + panelChild_->SetBoxStyle(boxComponent_); + } else { + boxComponent_ = AceType::MakeRefPtr(); + panelChild_->SetBoxStyle(boxComponent_); + } +} + +bool DOMPanel::SetSpecializedAttr(const std::pair& attr) +{ + const LinearMapNode specialAttrSetters[] = { + { DOM_PANEL_ATTR_DRAG_BAR, + [](const std::string& val, DOMPanel& panel) { panel.hasDragBar_ = StringToBool(val); } }, + { DOM_PANEL_ATTR_FULL_HEIGHT, + [](const std::string& val, DOMPanel& panel) { + panel.fullHeight_.second = true; + panel.fullHeight_.first = StringToDimension(val); + } }, + { DOM_PANEL_ATTR_HALF_HEIGHT, + [](const std::string& val, DOMPanel& panel) { + panel.halfHeight_.second = true; + panel.halfHeight_.first = StringToDimension(val); + } }, + { DOM_PANEL_ATTR_MIN_HEIGHT, + [](const std::string& val, DOMPanel& panel) { + panel.miniHeight_.second = true; + panel.miniHeight_.first = StringToDimension(val); + } }, + { DOM_PANEL_ATTR_MODE, + [](const std::string& val, DOMPanel& panel) { + const LinearMapNode modeTable[] = { + { "full", PanelMode::FULL }, + { "half", PanelMode::HALF }, + { "mini", PanelMode::MINI }, + }; + panel.mode_ = ConvertStrToEnum(val.c_str(), modeTable, ArraySize(modeTable), PanelMode::FULL); + } }, + { DOM_SHOW, [](const std::string& val, DOMPanel& panel) { panel.isShow_ = StringToBool(val); } }, + { DOM_PANEL_ATTR_TYPE, + [](const std::string& val, DOMPanel& panel) { + const LinearMapNode typeTable[] = { + { "foldable", PanelType::FOLDABLE_BAR }, + { "minibar", PanelType::MINI_BAR }, + { "temporary", PanelType::TEMP_DISPLAY }, + }; + panel.type_ = ConvertStrToEnum(val.c_str(), typeTable, ArraySize(typeTable), PanelType::FOLDABLE_BAR); + } }, + }; + auto operatorIter = BinarySearchFindIndex(specialAttrSetters, ArraySize(specialAttrSetters), attr.first.c_str()); + if (operatorIter != -1) { + specialAttrSetters[operatorIter].value(attr.second, *this); + return true; + } else { + return false; + } +} + +void DOMPanel::CallSpecializedMethod(const std::string& method, const std::string& args) +{ + if (method == DOM_PANEL_METHOD_SHOW) { + const auto& controller = panelChild_->GetPanelController(); + if (!controller) { + return; + } + controller->ShowPanel(); + } else if (method == DOM_DIALOG_METHOD_CLOSE) { + const auto& controller = panelChild_->GetPanelController(); + if (!controller) { + return; + } + controller->ClosePanel(); + } else { + LOGW("no such method available."); + } +} + +void DOMPanel::OnChildNodeAdded(const RefPtr& child, int32_t slot) +{ + if (!display_) { + display_ = AceType::MakeRefPtr(child->GetRootComponent()); + } + display_->SetVisible(isShow_ ? VisibleType::VISIBLE : VisibleType::GONE); + display_->SetOpacity(opacity_); + panelChild_->SetChild(display_); +} + +void DOMPanel::OnChildNodeRemoved(const RefPtr& child) +{ + panelChild_->SetChild(nullptr); +} + +bool DOMPanel::AddSpecializedEvent(int32_t pageId, const std::string& event) +{ + if (event == DOM_PANEL_EVENT_SIZE_CHANGED) { + panelChild_->SetOnSizeChanged(EventMarker(GetNodeIdForEvent(), event, pageId)); + return true; + } + return false; +} + +RefPtr DOMPanel::CompositeSpecializedComponent(const std::vector>& components) +{ + auto box = AceType::MakeRefPtr(); + box->SetChild(panelChild_); + return box; +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_panel.h b/frameworks/bridge/common/dom/dom_panel.h new file mode 100644 index 00000000..fa0688b4 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_panel.h @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_PANEL_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_PANEL_H + +#include "core/components/panel/panel_component.h" +#include "frameworks/bridge/common/dom/dom_node.h" + +namespace OHOS::Ace::Framework { + +class DOMPanel : public DOMNode { + DECLARE_ACE_TYPE(DOMPanel, DOMNode); + +public: + DOMPanel(NodeId nodeId, const std::string& nodeName); + ~DOMPanel() override = default; + + RefPtr GetSpecializedComponent() override + { + return panelChild_; + } + + void CallSpecializedMethod(const std::string& method, const std::string& args) override; + +protected: + void PrepareSpecializedComponent() override; + bool AddSpecializedEvent(int32_t pageId, const std::string& event) override; + + void OnChildNodeAdded(const RefPtr& child, int32_t slot) override; + void OnChildNodeRemoved(const RefPtr& child) override; + bool SetSpecializedAttr(const std::pair& attr) override; + RefPtr CompositeSpecializedComponent(const std::vector>& components) override; + +private: + RefPtr panelChild_; + RefPtr display_; + PanelMode mode_ = PanelMode::FULL; + PanelType type_ = PanelType::FOLDABLE_BAR; + bool hasDragBar_ = true; + + std::pair miniHeight_ = { 0.0_vp, false }; + std::pair halfHeight_ = { 0.0_vp, false }; + std::pair fullHeight_ = { 0.0_vp, false }; + Dimension marginLeft_ = 0.0_vp; + Dimension marginRight_ = 0.0_vp; + Dimension marginTop_ = 0.0_vp; + Dimension marginBottom_ = 0.0_vp; + bool isShow_ = true; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_PANEL_H diff --git a/frameworks/bridge/common/dom/dom_picker_base.cpp b/frameworks/bridge/common/dom/dom_picker_base.cpp new file mode 100644 index 00000000..0d05c031 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_picker_base.cpp @@ -0,0 +1,791 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_picker_base.h" + +#include "base/utils/linear_map.h" +#include "base/utils/string_utils.h" +#include "base/utils/utils.h" +#include "frameworks/bridge/common/dom/dom_reflect_map.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +namespace { + +const PickerDate DEFAULT_PICKER_DATE(1970, 1, 1); +const PickerDate DEFAULT_END_PICKER_DATE(2100, 12, 31); +constexpr char PICKER_DATE_SPLITER = '-'; +const PickerTime DEFAULT_PICKER_TIME(0, 0, 0); +constexpr char PICKER_TIME_SPLITER = ':'; + +} // namespace + +DOMPickerBase::DOMPickerBase(NodeId nodeId, const std::string& nodeName, bool hasValue) + : DOMNode(nodeId, nodeName), hasValue_(hasValue) +{ + if (!hasValue_) { + return; + } + valuePickerChild_ = AceType::MakeRefPtr([weak = WeakClaim(this)]() { + auto refPtr = weak.Upgrade(); + if (refPtr) { + refPtr->HandleClickCallback(); + } + }); + valuePickerChild_->SetTextDirection((IsRightToLeft() ? TextDirection::RTL : TextDirection::LTR)); + pickerId_ = nodeId; +} + +void DOMPickerBase::InitializeStyle() +{ + ResetInitializedStyle(); +} + +void DOMPickerBase::ResetInitializedStyle() +{ + auto theme = GetTheme(); + if (!theme) { + return; + } + theme_ = theme->clone(); + if (!theme_ || !valuePickerChild_) { + return; + } + valuePickerChild_->SetTheme(theme_); +} + +RefPtr DOMPickerBase::GetSpecializedComponent() +{ + if (!hasValue_) { + return basePickerChild_; + } + return valuePickerChild_; +} + +void DOMPickerBase::HandleClickCallback() const +{ + if (!hasValue_) { + return; + } + ShowDialog(); +} + +void DOMPickerBase::ShowDialog() const +{ + if (!basePickerChild_) { + LOGW("not implementation now."); + return; + } + auto context = GetPipelineContext().Upgrade(); + if (!context) { + LOGE("Pipeline context not found error!"); + return; + } + auto pageStack = context->GetLastStack(); + if (!pageStack) { + LOGE("Page stack not found error!"); + return; + } + basePickerChild_->ShowDialog(pageStack); +} + +bool DOMPickerBase::GetPickerDate(const std::string& strDate, PickerDate& outDate) const +{ + std::string strValue; + std::stringstream streamDate(strDate); + if (!std::getline(streamDate, strValue, PICKER_DATE_SPLITER)) { + return false; + } + outDate.SetYear(StringUtils::StringToInt(strValue)); + if (!std::getline(streamDate, strValue, PICKER_DATE_SPLITER)) { + return false; + } + outDate.SetMonth(StringUtils::StringToInt(strValue)); + if (!std::getline(streamDate, strValue, PICKER_DATE_SPLITER)) { + return false; + } + outDate.SetDay(StringUtils::StringToInt(strValue)); + return true; +} + +bool DOMPickerBase::GetPickerTime(const std::string& strDate, PickerTime& outTime) const +{ + std::string strValue; + std::stringstream streamDate(strDate); + if (!std::getline(streamDate, strValue, PICKER_TIME_SPLITER)) { + return false; + } + outTime.SetHour(StringUtils::StringToInt(strValue)); + if (!std::getline(streamDate, strValue, PICKER_TIME_SPLITER)) { + return false; + } + outTime.SetMinute(StringUtils::StringToInt(strValue)); + if (!std::getline(streamDate, strValue)) { + return false; + } + outTime.SetSecond(StringUtils::StringToInt(strValue)); + return true; +} + +bool DOMPickerBase::GetPickerDateTime(const std::string& strDate, PickerDateTime& outDateTime) const +{ + std::vector strValues; + StringUtils::StringSpliter(strDate, PICKER_DATE_SPLITER, strValues); + PickerDate outDate = outDateTime.GetDate(); + PickerTime outTime = outDateTime.GetTime(); + if (strValues.size() == 4) { // MM-dd-hh-mm + outDate.SetMonth(StringUtils::StringToInt(strValues[0])); + outDate.SetDay(StringUtils::StringToInt(strValues[1])); + outTime.SetHour(StringUtils::StringToInt(strValues[2])); + outTime.SetMinute(StringUtils::StringToInt(strValues[3])); + } else if (strValues.size() == 5) { // yyyy-MM-dd-hh-mm + outDate.SetYear(StringUtils::StringToInt(strValues[0])); + outDate.SetMonth(StringUtils::StringToInt(strValues[1])); + outDate.SetDay(StringUtils::StringToInt(strValues[2])); + outTime.SetHour(StringUtils::StringToInt(strValues[3])); + outTime.SetMinute(StringUtils::StringToInt(strValues[4])); + } else { + LOGE("input date time is invalidate."); + return false; + } + outDateTime.SetDate(outDate); + outDateTime.SetTime(outTime); + return true; +} + +bool DOMPickerBase::SetSpecializedAttr(const std::pair& attr) +{ + if (attr.first == DOM_VALUE) { + if (!hasValue_) { + LOGE("picker view has no attribute of value."); + return false; + } + std::string strValue = attr.second; + strValue.erase( + std::remove_if(strValue.begin(), strValue.end(), [](char c) { return c == DOM_PICKER_SPLIT_ARRAY; }), + strValue.end()); + valuePickerChild_->SetText(strValue); + return true; + } + + if (attr.first == DOM_TYPE) { + type_ = attr.second; + return true; + } + + static const LinearMapNode pickerAttrOperators[] = { + { DOM_PICKER_COLUMN_COUNT, [](DOMPickerBase& picker, const std::string& val) { picker.SetColumnCount(val); } }, + { DOM_PICKER_CONTAIN_SECOND, [](DOMPickerBase& picker, const std::string& val) { picker.SetHasSecond(val); } }, + { DOM_END, [](DOMPickerBase& picker, const std::string& val) { picker.SetEnd(val); } }, + { DOM_PICKER_HOUR24, [](DOMPickerBase& picker, const std::string& val) { picker.SetHour24(val); } }, + { DOM_PICKER_PREFIX, [](DOMPickerBase& picker, const std::string& val) { picker.SetPrefix(val); } }, + { DOM_PICKER_SUFFIX, [](DOMPickerBase& picker, const std::string& val) { picker.SetSuffix(val); } }, + { DOM_PICKER_SHOW_LUNAR, [](DOMPickerBase& picker, const std::string& val) { picker.SetShowLunar(val); } }, + { DOM_PICKER_LUNAR, [](DOMPickerBase& picker, const std::string& val) { picker.SetLunar(val); } }, + { DOM_PICKER_RANGE, [](DOMPickerBase& picker, const std::string& val) { picker.SetRange(val); } }, + { DOM_SELECTED, [](DOMPickerBase& picker, const std::string& val) { picker.SetSelected(val); } }, + { DOM_START, [](DOMPickerBase& picker, const std::string& val) { picker.SetStart(val); } }, + }; + auto it = BinarySearchFindIndex(pickerAttrOperators, ArraySize(pickerAttrOperators), attr.first.c_str()); + if (it != -1) { + if (!basePickerChild_) { + storeAttributes_.emplace_back(attr); + return true; + } + pickerAttrOperators[it].value(*this, attr.second); + return true; + } + return false; +} + +bool DOMPickerBase::AddSpecializedEvent(int32_t pageId, const std::string& event) +{ + static const LinearMapNode&, const EventMarker&)> pickerEventOperators[] = { + { DOM_CANCEL, + [](RefPtr& picker, const EventMarker& event) { picker->SetOnCancel(event); } }, + { DOM_CHANGE, + [](RefPtr& picker, const EventMarker& event) { picker->SetOnChange(event); } }, + { DOM_PICKER_COLUMN_CHANGE, + [](RefPtr& picker, const EventMarker& event) { picker->SetOnColumnChange(event); } }, + }; + auto it = BinarySearchFindIndex(pickerEventOperators, ArraySize(pickerEventOperators), event.c_str()); + if (it != -1) { + if (!basePickerChild_) { + storeEvents_.emplace_back(std::make_pair(pageId, event)); + return true; + } + pickerEventOperators[it].value(basePickerChild_, EventMarker(GetNodeIdForEvent(), event, pageId)); + return true; + } + return false; +} + +bool DOMPickerBase::SetSpecializedStyle(const std::pair& style) +{ + if (!hasValue_) { + return SetOptionStyleOperators(style); + } + return SetTextStyleOperators(style); +} + +bool DOMPickerBase::SetOptionStyleOperators(const std::pair& style) +{ + static const LinearMapNode + optionStyleOperators[] = { + { DOM_TEXT_COLOR, [](const DOMPickerBase& node, const std::string& val, TextStyle& normal, TextStyle&, + TextStyle&, TextStyle&) { normal.SetTextColor(node.ParseColor(val)); } }, + { DOM_PICKER_DISAPPEAR_COLOR, [](const DOMPickerBase& node, const std::string& val, + TextStyle&, TextStyle&, TextStyle&, TextStyle& style) { style.SetTextColor(node.ParseColor(val)); } }, + { DOM_PICKER_DISAPPEAR_FONT_SIZE, [](const DOMPickerBase& node, const std::string& val, + TextStyle&, TextStyle&, TextStyle&, TextStyle& style) { + style.SetFontSize(node.ParseDimension(val)); + style.SetAdaptMaxFontSize(node.ParseDimension(val)); } }, + { DOM_PICKER_FOCUS_COLOR, [](const DOMPickerBase& node, const std::string& val, TextStyle&, TextStyle&, + TextStyle& focus, TextStyle&) { focus.SetTextColor(node.ParseColor(val)); } }, + { DOM_PICKER_FOCUS_SIZE, + [](const DOMPickerBase& node, const std::string& val, + TextStyle&, TextStyle&, TextStyle& focus, TextStyle&) { + focus.SetFontSize(node.ParseDimension(val)); + focus.SetAdaptMaxFontSize(node.ParseDimension(val)); + } }, + { DOM_TEXT_FONT_FAMILY, + [](const DOMPickerBase& node, const std::string& val, TextStyle& normal, TextStyle& select, + TextStyle& focus, TextStyle& disappear) { + normal.SetFontFamilies(node.ParseFontFamilies(val)); + select.SetFontFamilies(node.ParseFontFamilies(val)); + focus.SetFontFamilies(node.ParseFontFamilies(val)); + disappear.SetFontFamilies(node.ParseFontFamilies(val)); + } }, + { DOM_TEXT_FONT_SIZE, + [](const DOMPickerBase& node, const std::string& val, + TextStyle& normal, TextStyle&, TextStyle&, TextStyle&) { + normal.SetFontSize(node.ParseDimension(val)); + normal.SetAdaptMaxFontSize(node.ParseDimension(val)); + } }, + { DOM_PICKER_SELECT_COLOR, [](const DOMPickerBase& node, const std::string& val, + TextStyle&, TextStyle& select, + TextStyle&, TextStyle&) { select.SetTextColor(node.ParseColor(val)); } }, + { DOM_PICKER_SELECT_SIZE, + [](const DOMPickerBase& node, const std::string& val, + TextStyle&, TextStyle& select, TextStyle&, TextStyle&) { + select.SetFontSize(node.ParseDimension(val)); + select.SetAdaptMaxFontSize(node.ParseDimension(val)); + } }, + }; + auto styleIter = BinarySearchFindIndex(optionStyleOperators, ArraySize(optionStyleOperators), style.first.c_str()); + if (styleIter != -1) { + if (!basePickerChild_) { + storeStyles_.emplace_back(style); + return true; + } + auto theme = basePickerChild_->GetTheme(); + auto normalStyle = theme->GetOptionStyle(false, false); + auto selectStyle = theme->GetOptionStyle(true, false); + auto focusStyle = theme->GetOptionStyle(true, true); + auto disappearStyle = theme->GetDisappearOptionStyle(); + optionStyleOperators[styleIter].value(*this, style.second, + normalStyle, selectStyle, focusStyle, disappearStyle); + theme->SetOptionStyle(false, false, normalStyle); + theme->SetOptionStyle(true, false, selectStyle); + theme->SetOptionStyle(true, true, focusStyle); + theme->SetDisappearOptionStyle(disappearStyle); + return true; + } + return false; +} + +bool DOMPickerBase::SetTextBackgoundColor(const std::pair& style) +{ + if (style.first != DOM_BACKGROUND_COLOR) { + return false; + } + auto decoration = theme_->GetOptionDecoration(false); + if (!decoration) { + return false; + } + decoration->SetBackgroundColor(ParseColor(style.second)); + return true; +} + +bool DOMPickerBase::SetTextStyleOperators(const std::pair& style) +{ + static const LinearMapNode + textStyleOperators[] = { + { DOM_TEXT_ALLOW_SCALE, + [](const DOMPickerBase& node, const std::string& val, TextStyle& normal, TextStyle& focus) { + normal.SetAllowScale(StringToBool(val)); + focus.SetAllowScale(StringToBool(val)); + } }, + { DOM_TEXT_FONT_FAMILY, + [](const DOMPickerBase& node, const std::string& val, TextStyle& normal, TextStyle& focus) { + normal.SetFontFamilies(node.ParseFontFamilies(val)); + focus.SetFontFamilies(node.ParseFontFamilies(val)); + } }, + { DOM_TEXT_FONT_SIZE, + [](const DOMPickerBase& node, const std::string& val, TextStyle& normal, TextStyle& focus) { + normal.SetFontSize(node.ParseDimension(val)); + normal.SetAdaptMaxFontSize(node.ParseDimension(val)); + focus.SetFontSize(node.ParseDimension(val)); + focus.SetAdaptMaxFontSize(node.ParseDimension(val)); + } }, + { DOM_TEXT_FONT_STYLE, + [](const DOMPickerBase& node, const std::string& val, TextStyle& normal, TextStyle& focus) { + normal.SetFontStyle(ConvertStrToFontStyle(val)); + focus.SetFontStyle(ConvertStrToFontStyle(val)); + } }, + { DOM_TEXT_FONT_WEIGHT, + [](const DOMPickerBase& node, const std::string& val, TextStyle& normal, TextStyle& focus) { + normal.SetFontWeight(ConvertStrToFontWeight(val)); + focus.SetFontWeight(ConvertStrToFontWeight(val)); + } }, + { DOM_TEXT_LETTER_SPACING, + [](const DOMPickerBase& node, const std::string& val, TextStyle& normal, TextStyle& focus) { + normal.SetLetterSpacing(StringToDouble(val)); + focus.SetLetterSpacing(StringToDouble(val)); + } }, + { DOM_TEXT_LINE_HEIGHT, + [](const DOMPickerBase& node, const std::string& val, TextStyle& normal, TextStyle& focus) { + normal.SetLineHeight(node.ParseLineHeight(val)); + focus.SetLineHeight(node.ParseLineHeight(val)); + } }, + { DOM_PICKER_TEXT_COLOR, + [](const DOMPickerBase& node, const std::string& val, TextStyle& normal, TextStyle& focus) { + normal.SetTextColor(node.ParseColor(val)); + focus.SetTextColor(node.ParseColor(val)); + } }, + { DOM_TEXT_DECORATION, + [](const DOMPickerBase& node, const std::string& val, TextStyle& normal, TextStyle& focus) { + normal.SetTextDecoration(ConvertStrToTextDecoration(val)); + focus.SetTextDecoration(ConvertStrToTextDecoration(val)); + } }, + }; + auto operatorIter = BinarySearchFindIndex(textStyleOperators, ArraySize(textStyleOperators), style.first.c_str()); + if (operatorIter != -1) { + auto normalStyle = theme_->GetOptionStyle(false, false); + auto focusStyle = theme_->GetOptionStyle(true, true); + textStyleOperators[operatorIter].value(*this, style.second, normalStyle, focusStyle); + theme_->SetOptionStyle(false, false, normalStyle); + theme_->SetOptionStyle(true, false, normalStyle); + theme_->SetOptionStyle(true, true, focusStyle); + return true; + } + if (SetColumnHeight(style)) { + return true; + } + if (SetTextBackgoundColor(style)) { + return true; + } + return false; +} + +void DOMPickerBase::CallSpecializedMethod(const std::string& method, const std::string& args) +{ + if (!basePickerChild_) { + LOGW("not implementation now."); + return; + } + if (method == DOM_ROTATION) { + auto controller = basePickerChild_->GetRotationController(); + if (controller) { + LOGD("Rotation focus picker view"); + controller->RequestRotation(true); + } + } + if (!hasValue_) { + return; + } + if (method == DOM_SHOW) { + ShowDialog(); + } +} + +void DOMPickerBase::PrepareSpecializedComponent() +{ + if (CreatePicker()) { + for (const auto& attribute : storeAttributes_) { + SetSpecializedAttr(attribute); + } + for (const auto& oneEvent : storeEvents_) { + AddSpecializedEvent(oneEvent.first, oneEvent.second); + } + for (const auto& oneStyle : storeStyles_) { + SetSpecializedStyle(oneStyle); + } + } + storeAttributes_.clear(); + storeEvents_.clear(); + storeStyles_.clear(); +} + +void DOMPickerBase::CompositeComponents() +{ + if (basePickerChild_ && type_ == DOM_PICKER_TYPE_DATE && + AceType::InstanceOf(basePickerChild_)) { + auto picker = AceType::DynamicCast(basePickerChild_); + // check invalidate of start and end. + const auto& start = picker->GetStartDate(); + const auto& end = picker->GetEndDate(); + if (start.GetYear() > end.GetYear() || + (start.GetYear() == end.GetYear() && start.GetMonth() > end.GetMonth()) || + (start.GetYear() == end.GetYear() && start.GetMonth() == end.GetMonth() && start.GetDay() > end.GetDay())) { + // invalidate => use default start date and end date. + picker->SetStartDate(DEFAULT_PICKER_DATE); // default start date is 1970-1-1 from FA document. + picker->SetEndDate(DEFAULT_END_PICKER_DATE); // default end date is 2100-12-31 from FA document. + } + } + if (IsRightToLeft()) { + SetAlignment(Alignment::CENTER_RIGHT); + } + DOMNode::CompositeComponents(); +} + +bool DOMPickerBase::CreatePicker() +{ + // The type cannot be dynamically changed. + if (basePickerChild_) { + return true; + } + + // Operator map for type. + static const std::unordered_map&)> pickerOperators = { + { DOM_PICKER_TYPE_TIME, + [](RefPtr& pickerBase) { + pickerBase = AceType::MakeRefPtr(); } }, + { DOM_PICKER_TYPE_DATE, + [](RefPtr& pickerBase) { + pickerBase = AceType::MakeRefPtr(); } }, + { DOM_PICKER_TYPE_TEXT, + [](RefPtr& pickerBase) { + pickerBase = AceType::MakeRefPtr(); } }, + { DOM_PICKER_TYPE_MULTITEXT, + [](RefPtr& pickerBase) { + pickerBase = AceType::MakeRefPtr(); + } }, + { DOM_PICKER_TYPE_DATETIME, + [](RefPtr& pickerBase) { + pickerBase = AceType::MakeRefPtr(); + } }, + }; + + auto operatorIter = pickerOperators.find(type_); + if (operatorIter != pickerOperators.end()) { + operatorIter->second(basePickerChild_); + } else { + basePickerChild_ = AceType::MakeRefPtr(); + type_ = DOM_PICKER_TYPE_TEXT; + } + + if (basePickerChild_) { + auto theme = GetTheme(); + basePickerChild_->SetTheme(theme->clone()); + basePickerChild_->SetTextDirection((IsRightToLeft() ? TextDirection::RTL : TextDirection::LTR)); + basePickerChild_->SetIsDialog(hasValue_); + basePickerChild_->SetNodeId(GetNodeId()); +#if defined(WINDOWS_PLATFORM) || defined(MAC_PLATFORM) + basePickerChild_->SetPickerBaseId(pickerId_); +#endif + return true; + } + + LOGE("unsupported type: %{private}s.", type_.c_str()); + return false; +} + +bool DOMPickerBase::SetColumnHeight(const std::pair& style) +{ + if (style.first != DOM_PICKER_COLUMN_HEIGHT) { + return false; + } + + if (!hasValue_ || !basePickerChild_) { + return false; + } + + basePickerChild_->SetColumnHeight(StringToDimension(style.second)); + return true; +} + +bool DOMPickerBase::SetStart(const std::string& value) +{ + if (basePickerChild_ && type_ == DOM_PICKER_TYPE_DATE && + AceType::InstanceOf(basePickerChild_)) { + auto picker = AceType::DynamicCast(basePickerChild_); + auto date = DEFAULT_PICKER_DATE; + if (GetPickerDate(value, date)) { + picker->SetStartDate(date); + } else { + LOGE("the value of picker date is invalid."); + } + + return true; + } + + return false; +} + +bool DOMPickerBase::SetEnd(const std::string& value) +{ + if (basePickerChild_ && type_ == DOM_PICKER_TYPE_DATE && + AceType::InstanceOf(basePickerChild_)) { + auto picker = AceType::DynamicCast(basePickerChild_); + auto date = DEFAULT_PICKER_DATE; + if (GetPickerDate(value, date)) { + picker->SetEndDate(date); + } else { + LOGE("input value of picker date is invalid."); + } + + return true; + } + + return false; +} + +bool DOMPickerBase::SetSelected(const std::string& value) +{ + return (SetTextSelected(value) || SetDateTimeSelected(value)); +} + +bool DOMPickerBase::SetTextSelected(const std::string& value) +{ + if (basePickerChild_ && type_ == DOM_PICKER_TYPE_TEXT && + AceType::InstanceOf(basePickerChild_)) { + auto picker = AceType::DynamicCast(basePickerChild_); + picker->SetSelected(StringUtils::StringToInt(value)); + return true; + } + + if (basePickerChild_ && type_ == DOM_PICKER_TYPE_MULTITEXT && + AceType::InstanceOf(basePickerChild_)) { + auto picker = AceType::DynamicCast(basePickerChild_); + std::vector out; + StringUtils::StringSpliter(value, DOM_PICKER_SPLIT_ARRAY, out); + std::vector selectedIndexes; + for (uint32_t index = 0; index < out.size(); ++index) { + selectedIndexes.emplace_back(StringUtils::StringToInt(out[index])); + } + picker->SetSelected(selectedIndexes); + return true; + } + + return false; +} + +bool DOMPickerBase::SetDateTimeSelected(const std::string& value) +{ + if (basePickerChild_ && type_ == DOM_PICKER_TYPE_DATE && + AceType::InstanceOf(basePickerChild_)) { + auto picker = AceType::DynamicCast(basePickerChild_); + auto date = DEFAULT_PICKER_DATE; + if (GetPickerDate(value, date)) { + picker->SetSelectedDate(date); + } else { + LOGE("input value of picker date is invalid."); + } + + return true; + } + + if (basePickerChild_ && type_ == DOM_PICKER_TYPE_TIME && + AceType::InstanceOf(basePickerChild_)) { + auto picker = AceType::DynamicCast(basePickerChild_); + auto time = DEFAULT_PICKER_TIME; + if (GetPickerTime(value, time)) { + picker->SetSelectedTime(time); + } else { + LOGE("input value of picker time is invalid."); + } + return true; + } + + if (basePickerChild_ && type_ == DOM_PICKER_TYPE_DATETIME && + AceType::InstanceOf(basePickerChild_)) { + auto picker = AceType::DynamicCast(basePickerChild_); + auto dateTime = PickerDateTime::Current(); + if (GetPickerDateTime(value, dateTime)) { + picker->SetSelectedDateTime(dateTime); + } else { + LOGE("input value of picker date time is invalid."); + } + + return true; + } + + return false; +} + +bool DOMPickerBase::SetHasSecond(const std::string& value) +{ + if (basePickerChild_ && type_ == DOM_PICKER_TYPE_TIME && + AceType::InstanceOf(basePickerChild_)) { + auto picker = AceType::DynamicCast(basePickerChild_); + picker->SetHasSecond((value == "true")); // bool attribute's value is "true" and "false". + return true; + } + + return false; +} + +bool DOMPickerBase::SetRange(const std::string& value) +{ + if (basePickerChild_ && type_ == DOM_PICKER_TYPE_TEXT && + AceType::InstanceOf(basePickerChild_)) { + auto picker = AceType::DynamicCast(basePickerChild_); + std::vector out; + StringUtils::StringSpliter(value, DOM_PICKER_SPLIT_ARRAY, out); + picker->SetRange(out); + return true; + } + + if (basePickerChild_ && type_ == DOM_PICKER_TYPE_MULTITEXT && + AceType::InstanceOf(basePickerChild_)) { + auto picker = AceType::DynamicCast(basePickerChild_); + std::vector out; + StringUtils::StringSpliter(value, DOM_PICKER_SPLIT_ARRAY, out); + std::vector> arrayRange; + for (uint32_t index = 0; index < out.size(); ++index) { + std::vector textRange; + StringUtils::StringSpliter(out[index], DOM_PICKER_SPLIT_ITEM, textRange); + arrayRange.emplace_back(textRange); + } + picker->SetRange(arrayRange); + return true; + } + + return false; +} + +bool DOMPickerBase::SetColumnCount(const std::string& value) +{ + if (basePickerChild_ && type_ == DOM_PICKER_TYPE_MULTITEXT && + AceType::InstanceOf(basePickerChild_)) { + auto picker = AceType::DynamicCast(basePickerChild_); + picker->SetColumnCount(StringUtils::StringToInt(value)); + return true; + } + + return false; +} + +bool DOMPickerBase::SetHour24(const std::string& value) +{ + if (basePickerChild_ && (type_ == DOM_PICKER_TYPE_DATETIME || type_ == DOM_PICKER_TYPE_TIME) && + AceType::InstanceOf(basePickerChild_)) { + auto picker = AceType::DynamicCast(basePickerChild_); + if (value == "24") { + picker->SetHour24(true); + } else if (value == "12") { + picker->SetHour24(false); + } else { + LOGE("value of hour24 is invalid."); + } + return true; + } + + return false; +} + +bool DOMPickerBase::SetShowLunar(const std::string& value) +{ + static const char* FALSE = "false"; + static const char* TRUE = "true"; + + if (basePickerChild_ && type_ == DOM_PICKER_TYPE_DATETIME && + AceType::InstanceOf(basePickerChild_)) { + auto picker = AceType::DynamicCast(basePickerChild_); + if (value == TRUE) { + picker->SetShowLunar(true); + } else if (value == FALSE) { + picker->SetShowLunar(false); + } else { + LOGE("value of show lunar is invalid."); + } + return true; + } + + if (basePickerChild_ && type_ == DOM_PICKER_TYPE_DATE && + AceType::InstanceOf(basePickerChild_)) { + auto picker = AceType::DynamicCast(basePickerChild_); + if (value == TRUE) { + picker->SetShowLunar(true); + } else if (value == FALSE) { + picker->SetShowLunar(false); + } else { + LOGE("value of show lunar is invalid."); + } + return true; + } + + return false; +} + +bool DOMPickerBase::SetLunar(const std::string& value) +{ + static const char* FALSE = "false"; + static const char* TRUE = "true"; + + if (basePickerChild_ && type_ == DOM_PICKER_TYPE_DATETIME && + AceType::InstanceOf(basePickerChild_)) { + auto picker = AceType::DynamicCast(basePickerChild_); + if (value == TRUE) { + picker->SetHasLunar(true); + } else if (value == FALSE) { + picker->SetHasLunar(false); + } else { + LOGE("value of lunar is invalid."); + } + return true; + } + + if (basePickerChild_ && type_ == DOM_PICKER_TYPE_DATE && + AceType::InstanceOf(basePickerChild_)) { + auto picker = AceType::DynamicCast(basePickerChild_); + if (value == TRUE) { + picker->SetHasLunar(true); + } else if (value == FALSE) { + picker->SetHasLunar(false); + } else { + LOGE("value of lunar is invalid."); + } + return true; + } + + return false; +} + +bool DOMPickerBase::SetPrefix(const std::string& value) +{ + if (basePickerChild_ && type_ == DOM_PICKER_TYPE_TEXT && + AceType::InstanceOf(basePickerChild_)) { + auto picker = AceType::DynamicCast(basePickerChild_); + picker->SetPrefix(value); + return true; + } + return false; +} + +bool DOMPickerBase::SetSuffix(const std::string& value) +{ + if (basePickerChild_ && type_ == DOM_PICKER_TYPE_TEXT && + AceType::InstanceOf(basePickerChild_)) { + auto picker = AceType::DynamicCast(basePickerChild_); + picker->SetSuffix(value); + return true; + } + return false; +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_picker_base.h b/frameworks/bridge/common/dom/dom_picker_base.h new file mode 100644 index 00000000..e8448d36 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_picker_base.h @@ -0,0 +1,104 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_PICKER_BASE_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_PICKER_BASE_H + +#include "core/components/picker/picker_date_component.h" +#include "core/components/picker/picker_datetime_component.h" +#include "core/components/picker/picker_multitext_component.h" +#include "core/components/picker/picker_text_component.h" +#include "core/components/picker/picker_theme.h" +#include "core/components/picker/picker_time_component.h" +#include "core/components/picker/picker_value_component.h" +#include "core/components/text/text_component.h" +#include "core/components/theme/theme_manager.h" +#include "frameworks/bridge/common/dom/dom_node.h" +#include "frameworks/bridge/common/dom/dom_type.h" + +namespace OHOS::Ace::Framework { + +class DOMPickerBase : public DOMNode { + DECLARE_ACE_TYPE(DOMPickerBase, DOMNode); + +public: + DOMPickerBase(NodeId nodeId, const std::string& nodeName, bool hasValue); + ~DOMPickerBase() override = default; + + RefPtr GetSpecializedComponent() override; + + void InitializeStyle() override; + + void ResetInitializedStyle() override; + + bool SetStart(const std::string& value); + bool SetEnd(const std::string& value); + bool SetSelected(const std::string& value); + bool SetHasSecond(const std::string& value); + bool SetRange(const std::string& value); + bool SetColumnCount(const std::string& value); + bool SetHour24(const std::string& value); + bool SetLunar(const std::string& value); + bool SetShowLunar(const std::string& value); + bool SetPrefix(const std::string& value); + bool SetSuffix(const std::string& value); + +protected: + bool SetSpecializedAttr(const std::pair& attr) override; + bool AddSpecializedEvent(int32_t pageId, const std::string& event) override; + bool SetSpecializedStyle(const std::pair& style) override; + void CallSpecializedMethod(const std::string& method, const std::string& args) override; + void CompositeComponents() override; + void PrepareSpecializedComponent() override; + +private: + void HandleClickCallback() const; + + void ShowDialog() const; + + bool GetPickerDate(const std::string& strDate, PickerDate& outDate) const; + bool GetPickerTime(const std::string& strDate, PickerTime& outTime) const; + bool GetPickerDateTime(const std::string& strDate, PickerDateTime& outDateTime) const; + + bool CreatePicker(); + + bool SetTextSelected(const std::string& value); + + bool SetDateTimeSelected(const std::string& value); + + bool SetOptionStyleOperators(const std::pair& style); + + bool SetTextStyleOperators(const std::pair& style); + + bool SetTextBackgoundColor(const std::pair& style); + bool SetColumnHeight(const std::pair& style); + + bool hasValue_ = true; + // used for inspector node in PC preview + int32_t pickerId_ = -1; + std::string type_ { DOM_PICKER_TYPE_TEXT }; + + std::list> storeAttributes_; + std::list> storeEvents_; + std::list> storeStyles_; + + RefPtr theme_; + RefPtr basePickerChild_; + RefPtr valuePickerChild_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_PICKER_BASE_H diff --git a/frameworks/bridge/common/dom/dom_picker_dialog.cpp b/frameworks/bridge/common/dom/dom_picker_dialog.cpp new file mode 100644 index 00000000..332e3f6b --- /dev/null +++ b/frameworks/bridge/common/dom/dom_picker_dialog.cpp @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_picker_dialog.h" + +namespace OHOS::Ace::Framework { + +DOMPickerDialog::DOMPickerDialog(NodeId nodeId, const std::string& nodeName) : DOMPickerBase(nodeId, nodeName, true) {} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_picker_dialog.h b/frameworks/bridge/common/dom/dom_picker_dialog.h new file mode 100644 index 00000000..5a03b8c0 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_picker_dialog.h @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_PICKER_DIALOG_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_PICKER_DIALOG_H + +#include "frameworks/bridge/common/dom/dom_picker_base.h" + +namespace OHOS::Ace::Framework { + +class DOMPickerDialog final : public DOMPickerBase { + DECLARE_ACE_TYPE(DOMPickerDialog, DOMPickerBase); + +public: + DOMPickerDialog(NodeId nodeId, const std::string& nodeName); + ~DOMPickerDialog() override = default; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_PICKER_DIALOG_H diff --git a/frameworks/bridge/common/dom/dom_picker_view.cpp b/frameworks/bridge/common/dom/dom_picker_view.cpp new file mode 100644 index 00000000..1dd0c4e0 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_picker_view.cpp @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_picker_view.h" + +namespace OHOS::Ace::Framework { + +DOMPickerView::DOMPickerView(NodeId nodeId, const std::string& nodeName) : DOMPickerBase(nodeId, nodeName, false) {} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_picker_view.h b/frameworks/bridge/common/dom/dom_picker_view.h new file mode 100644 index 00000000..53203831 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_picker_view.h @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_PICKER_VIEW_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_PICKER_VIEW_H + +#include "frameworks/bridge/common/dom/dom_picker_base.h" + +namespace OHOS::Ace::Framework { + +class DOMPickerView final : public DOMPickerBase { + DECLARE_ACE_TYPE(DOMPickerView, DOMPickerBase); + +public: + DOMPickerView(NodeId nodeId, const std::string& nodeName); + ~DOMPickerView() override = default; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_PICKER_VIEW_H diff --git a/frameworks/bridge/common/dom/dom_piece.cpp b/frameworks/bridge/common/dom/dom_piece.cpp new file mode 100644 index 00000000..ba92db38 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_piece.cpp @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_piece.h" + +#include "core/components/piece/piece_theme.h" + +namespace OHOS::Ace::Framework { + +DOMPiece::DOMPiece(NodeId nodeId, const std::string& nodeName) : DOMNode(nodeId, nodeName) +{ + pieceChild_ = AceType::MakeRefPtr(); + if (IsRightToLeft()) { + pieceChild_->SetTextDirection(TextDirection::RTL); + } +} + +void DOMPiece::ResetInitializedStyle() +{ + InitializeStyle(); +} + +void DOMPiece::InitializeStyle() +{ + auto theme = GetTheme(); + if (!theme) { + return; + } + hasBoxStyle_ = true; + hasDecorationStyle_ = true; + SetHeight(theme->GetHeight()); + paddingLeft_ = theme->GetPaddingHorizontal(); + paddingRight_ = theme->GetPaddingHorizontal(); + paddingTop_ = theme->GetPaddingVertical(); + paddingBottom_ = theme->GetPaddingVertical(); + backDecoration_->SetBackgroundColor(theme->GetBackgroundColor()); + border_.SetBorderRadius(Radius(theme->GetHeight() / 2.0)); + pieceChild_->SetTextStyle(theme->GetTextStyle()); + pieceChild_->SetInterval(theme->GetInterval()); + pieceChild_->SetIconResource(theme->GetIconResource()); + pieceChild_->SetIconSize(theme->GetIconSize()); + pieceChild_->SetHoverColor(theme->GetHoverColor()); +} + +bool DOMPiece::SetSpecializedAttr(const std::pair& attr) +{ + if (attr.first == DOM_PIECE_CONTENT) { + hasContent_ = !attr.second.empty(); + pieceChild_->SetContent(attr.second); + return true; + } else if (attr.first == DOM_PIECE_ICON) { + pieceChild_->SetIcon(attr.second); + return true; + } else if (attr.first == DOM_PIECE_CLOSABLE) { + pieceChild_->SetShowDelete(StringToBool(attr.second)); + return true; + } + return false; +} + +bool DOMPiece::SetSpecializedStyle(const std::pair& style) +{ + if (style.first == DOM_BACKGROUND || style.first == DOM_BACKGROUND_IMAGE) { + hasBackGround_ = true; + } + return false; +} + +void DOMPiece::PrepareSpecializedComponent() +{ + if (!hasBackGroundColor_ && hasBackGround_) { + backDecoration_->SetBackgroundColor(Color::TRANSPARENT); + } + pieceChild_->SetMargin(GetBoxComponent()->GetMargin()); + if (boxComponent_->GetBackDecoration()) { + pieceChild_->SetBorder(boxComponent_->GetBackDecoration()->GetBorder()); + } + if (!hasContent_) { + boxComponent_->SetWidth(0.0); + boxComponent_->SetHeight(0.0); + boxComponent_->SetPadding(Edge()); + boxComponent_->SetMargin(Edge()); + } +} + +bool DOMPiece::AddSpecializedEvent(int32_t pageId, const std::string& event) +{ + if (event == DOM_PIECE_EVENT_CLOSE) { + pieceChild_->SetOnDelete(EventMarker(GetNodeIdForEvent(), event, pageId)); + return true; + } + return false; +} + +RefPtr DOMPiece::GetSpecializedComponent() +{ + return pieceChild_; +} + +}; // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_piece.h b/frameworks/bridge/common/dom/dom_piece.h new file mode 100644 index 00000000..d1079204 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_piece.h @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_PIECE_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_PIECE_H + +#include "core/components/image/image_component.h" +#include "core/components/piece/piece_component.h" +#include "core/components/text/text_component.h" +#include "frameworks/bridge/common/dom/dom_node.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { + +class DOMPiece final : public DOMNode { + DECLARE_ACE_TYPE(DOMPiece, DOMNode); + +public: + DOMPiece(NodeId id, const std::string& nodeName); + ~DOMPiece() override = default; + + RefPtr GetSpecializedComponent() override; + + void InitializeStyle() override; + +protected: + bool SetSpecializedAttr(const std::pair& attr) override; + bool SetSpecializedStyle(const std::pair& style) override; + void PrepareSpecializedComponent() override; + bool AddSpecializedEvent(int32_t pageId, const std::string& event) override; + void ResetInitializedStyle() override; + +private: + bool hasContent_ = false; + bool hasBackGround_ = false; + RefPtr pieceChild_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_PIECE_H diff --git a/frameworks/bridge/common/dom/dom_popup.cpp b/frameworks/bridge/common/dom/dom_popup.cpp new file mode 100644 index 00000000..64f5383e --- /dev/null +++ b/frameworks/bridge/common/dom/dom_popup.cpp @@ -0,0 +1,234 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_popup.h" + +#include + +#include "base/utils/linear_map.h" +#include "base/utils/utils.h" +#include "core/components/box/box_component.h" +#include "core/components/common/properties/color.h" +#include "core/components/focus_collaboration/focus_collaboration_component.h" +#include "core/components/popup/popup_theme.h" +#include "core/components/theme/theme_manager.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +namespace { + +constexpr uint32_t MASK_COLOR_ALPHA = 0x4c000000; // UX standand, 30% opacity + +} // namespace + +DOMPopup::DOMPopup(NodeId nodeId, const std::string& nodeName) : DOMNode(nodeId, nodeName) +{ + popupChild_ = AceType::MakeRefPtr(std::to_string(nodeId), nodeName); +} + +DOMPopup::~DOMPopup() +{ + RemoveMarker(); +} + +void DOMPopup::InitializeStyle() +{ + RefPtr theme = GetTheme(); + if (!theme) { + return; + } + maskColor_ = theme->GetMaskColor(); + popupChild_->GetPopupParam()->SetMaskColor(maskColor_); + backgroundColor_ = theme->GetBackgroundColor(); + popupChild_->GetPopupParam()->SetBackgroundColor(backgroundColor_); + + border_.SetBorderRadius(theme->GetRadius()); + paddingTop_ = theme->GetPadding().Top(); + paddingRight_ = theme->GetPadding().Right(); + paddingBottom_ = theme->GetPadding().Bottom(); + paddingLeft_ = theme->GetPadding().Left(); + hasBoxStyle_ = true; + hasDecorationStyle_ = true; +} + +void DOMPopup::RemoveMarker() +{ + BackEndEventManager::GetInstance().RemoveBackEndEvent(clickMarker_); +} + +void DOMPopup::ResetInitializedStyle() +{ + InitializeStyle(); +} + +void DOMPopup::OnChildNodeRemoved(const RefPtr& child) +{ + popupChild_->SetChild(nullptr); +} + +bool DOMPopup::SetSpecializedAttr(const std::pair& attr) +{ + LOGD("DOMPopup SetChildAttr"); + // static linear map must be sorted by key. + static const LinearMapNode placeMap[] = { + { "bottom", Placement::BOTTOM }, + { "bottomLeft", Placement::BOTTOM_LEFT }, + { "bottomRight", Placement::BOTTOM_RIGHT }, + { "left", Placement::LEFT }, + { "right", Placement::RIGHT }, + { "top", Placement::TOP }, + { "topLeft", Placement::TOP_LEFT }, + { "topRight", Placement::TOP_RIGHT }, + }; + if (attr.first == DOM_PLACEMENT) { + auto valueIt = BinarySearchFindIndex(placeMap, ArraySize(placeMap), attr.second.c_str()); + if (valueIt != -1) { + popupChild_->GetPopupParam()->SetPlacement(placeMap[valueIt].value); + } else { + LOGW("illegal placement value"); + } + return true; + } else if (attr.first == DOM_ARROW_OFFSET) { + popupChild_->GetPopupParam()->SetArrowOffset(ParseDimension(attr.second)); + return true; + } else if (attr.first == DOM_CLICKABLE) { + clickable_ = StringToBool(attr.second); + return true; + } else if (attr.first == DOM_KEEP_ALIVE) { + popupChild_->GetPopupParam()->SetHasAction(StringToBool(attr.second)); + return true; + } + return false; +} + +bool DOMPopup::SetSpecializedStyle(const std::pair& style) +{ + LOGD("DOMPopup SetSpecializedStyle"); + if (style.first == DOM_BACKGROUND_COLOR || style.first == DOM_BACKGROUND || style.first == DOM_BACKGROUND_IMAGE) { + hasBackground_ = true; + } + + // popup don't support position + if (style.first == DOM_POSITION || style.first == DOM_POSITION_LEFT || style.first == DOM_POSITION_RIGHT || + style.first == DOM_POSITION_TOP || style.first == DOM_POSITION_BOTTOM) { + return true; + } + + if (style.first == DOM_MASK_COLOR) { + maskColor_ = ParseColor(style.second, MASK_COLOR_ALPHA); + popupChild_->GetPopupParam()->SetMaskColor(maskColor_); + return true; + } else if (style.first == DOM_BACKGROUND_COLOR) { + backgroundColor_ = ParseColor(style.second); + popupChild_->GetPopupParam()->SetBackgroundColor(backgroundColor_); + return false; + } else { + LOGW("DOMPopup unsupported style"); + return false; + } +} + +bool DOMPopup::AddSpecializedEvent(int32_t pageId, const std::string& event) +{ + if (event == DOM_VISIBILITY_CHANGE) { + visibilityChangeEventId_ = EventMarker(GetNodeIdForEvent(), event, pageId); + popupChild_->GetPopupParam()->SetOnVisibilityChange(visibilityChangeEventId_); + return true; + } else { + LOGW("event type not supported"); + return false; + } +} + +void DOMPopup::CallSpecializedMethod(const std::string& method, const std::string& args) +{ + auto popup = AceType::DynamicCast(popupChild_); + if (!popup) { + return; + } + auto controller = popup->GetPopupController(); + if (!controller) { + return; + } + if (method == DOM_SHOW) { + controller->ShowPopup(); + } else if (method == DOM_HIDE) { + controller->CancelPopup(); + } +} + +void DOMPopup::BindIdNode(const RefPtr& idNode) +{ + if (!idNode) { + return; + } + if (!clickMarker_.IsEmpty()) { + RemoveMarker(); + } + clickMarker_ = BackEndEventManager::GetInstance().GetAvailableMarker(); + popupChild_->GetPopupParam()->SetTargetId(idNode->GetRootComponent()->GetId()); + popupChild_->GetPopupParam()->SetTargetMargin(idNode->GetBoxComponent()->GetMargin()); + + if (clickable_) { + BackEndEventManager::GetInstance().BindBackendEvent( + clickMarker_, [weakChild = WeakPtr(popupChild_), weakNode = WeakPtr(idNode)]( + const ClickInfo& clickInfo) { + auto popupChild = weakChild.Upgrade(); + auto idNode = weakNode.Upgrade(); + if (popupChild && idNode) { + auto controller = popupChild->GetPopupController(); + controller->ShowPopup(); + } + }); + idNode->SetOnClick(clickMarker_); + idNode->MarkNeedUpdate(); + } +} + +void DOMPopup::OnChildNodeAdded(const RefPtr& child, int32_t slot) +{ + if (!child) { + return; + } + if (lastComponent_) { + auto focusCollaboration = AceType::MakeRefPtr(); + focusCollaboration->InsertChild(0, child->GetRootComponent()); + lastComponent_->SetChild(focusCollaboration); + } +} + +void DOMPopup::PrepareSpecializedComponent() +{ + if (boxComponent_->GetBackDecoration()) { + popupChild_->GetPopupParam()->SetBorder(boxComponent_->GetBackDecoration()->GetBorder()); + boxComponent_->GetBackDecoration()->SetBorder(Border()); + boxComponent_->GetBackDecoration()->SetBackgroundColor(Color::TRANSPARENT); + } + popupChild_->GetPopupParam()->SetIsShow(IsShow()); + popupChild_->GetPopupParam()->SetPadding(boxComponent_->GetPadding()); + popupChild_->GetPopupParam()->SetMargin(boxComponent_->GetMargin()); + boxComponent_->SetMargin(Edge()); +} + +RefPtr DOMPopup::CompositeSpecializedComponent(const std::vector>& components) +{ + lastComponent_ = components.back(); + popupChild_->SetChild(AceType::DynamicCast(components.front())); + auto box = AceType::MakeRefPtr(); + box->SetChild(popupChild_); + return box; +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_popup.h b/frameworks/bridge/common/dom/dom_popup.h new file mode 100644 index 00000000..e95743d5 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_popup.h @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_POPUP_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_POPUP_H + +#include "core/components/popup/popup_component.h" +#include "frameworks/bridge/common/dom/dom_node.h" + +namespace OHOS::Ace::Framework { + +class DOMPopup final : public DOMNode { + DECLARE_ACE_TYPE(DOMPopup, DOMNode); + +public: + DOMPopup(NodeId nodeId, const std::string& nodeName); + ~DOMPopup() override; + + void BindIdNode(const RefPtr& idNode); + + void CallSpecializedMethod(const std::string& method, const std::string& args) override; + + void InitializeStyle() override; + + RefPtr GetSpecializedComponent() override + { + return popupChild_; + } + +protected: + bool SetSpecializedAttr(const std::pair& attr) override; + bool SetSpecializedStyle(const std::pair& style) override; + bool AddSpecializedEvent(int32_t pageId, const std::string& event) override; + void OnChildNodeAdded(const RefPtr& child, int32_t slot) override; + void OnChildNodeRemoved(const RefPtr& child) override; + void ResetInitializedStyle() override; + void PrepareSpecializedComponent() override; + RefPtr CompositeSpecializedComponent(const std::vector>& components) override; + +private: + void RemoveMarker(); + + bool clickable_ = true; + bool hasBackground_ = false; + Color maskColor_; + Color backgroundColor_; + RefPtr popupChild_; + EventMarker clickMarker_; + EventMarker visibilityChangeEventId_; + RefPtr lastComponent_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_POPUP_H diff --git a/frameworks/bridge/common/dom/dom_progress.cpp b/frameworks/bridge/common/dom/dom_progress.cpp new file mode 100644 index 00000000..806ecc1e --- /dev/null +++ b/frameworks/bridge/common/dom/dom_progress.cpp @@ -0,0 +1,326 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_progress.h" + +#include "base/utils/utils.h" +#include "core/components/common/properties/decoration.h" +#include "core/components/progress/progress_theme.h" +#include "core/components/theme/theme_manager.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { + + +bool IsGradient(const std::string& value) +{ + auto gradientJson = JsonUtil::ParseJsonString(value); + if (!gradientJson->IsObject()) { + return false; + } + return true; +} + +Gradient ParseGradient(const DOMProgress& progress, const std::string& value) +{ + // only support linear gradient + auto gradientJson = JsonUtil::ParseJsonString(value); + Gradient gradient = Gradient(); + if (!gradientJson->IsObject()) { + LOGW("gradientJson json param error"); + return gradient; + } + auto gradientValue = gradientJson->GetValue(DOM_VALUES); + if (gradientValue == nullptr || !gradientValue->IsArray() || gradientValue->GetArraySize() <= 0) { + LOGW("gradientValue json param error"); + return gradient; + } + auto values = gradientValue->GetArrayItem(0); + gradient.SetDirection(GradientDirection::START_TO_END); + auto colors = values->GetValue(DOM_GRADIENT_VALUES); + if (colors != nullptr && colors->IsArray()) { + for (int32_t index = 0; index < colors->GetArraySize(); index++) { + // remove the " at front and end. check the color string longer than "" + // "#FFFFFF" -> #FFFFFF + if (colors->GetArrayItem(index)->ToString().length() > 2) { + gradient.AddColor(GradientColor(progress.ParseColor(colors->GetArrayItem(index)->ToString().substr( + 1, colors->GetArrayItem(index)->ToString().length() - 2)))); + } + } + } + return gradient; +} + +RefPtr DOMProgress::CreateProgressComponent( + double min, double percent, double cachedValue, double max, ProgressType type) +{ + if (type == ProgressType::CIRCLE) { + return AceType::MakeRefPtr(min, percent, cachedValue, max, ProgressType::LINEAR); + } + return AceType::MakeRefPtr(min, percent, cachedValue, max, type); +} + +DOMProgress::DOMProgress(NodeId nodeId, const std::string& nodeName) : DOMNode(nodeId, nodeName) {} + +bool DOMProgress::SetSpecializedAttr(const std::pair& attr) +{ + static const LinearMapNode progressAttrsOperators[] = { + { DOM_RING_CLOCKWISH_DIRECTION, + [](const std::string& val, DOMProgress& progress) { progress.clockwiseDirection_ = StringToBool(val); } }, + { DOM_EFFECTS_ON, + [](const std::string& val, DOMProgress& progress) { progress.showAnimationEffect_ = StringToBool(val); } }, + { DOM_PROGRESS_PERCENT, + [](const std::string& val, DOMProgress& progress) { + progress.percent_ = StringToDouble(val); + if (progress.percent_ > progress.max_) { + progress.percent_ = progress.max_; + } + if (progress.percent_ < progress.min_) { + progress.percent_ = progress.min_; + } + } }, + { DOM_PROGRESS_SECONDARY_PERCENT, + [](const std::string& val, DOMProgress& progress) { + progress.cachedValue_ = StringToDouble(val); + if (progress.cachedValue_ > progress.max_) { + progress.cachedValue_ = progress.max_; + } + if (progress.cachedValue_ < progress.min_) { + progress.cachedValue_ = progress.min_; + } + } }, + { DOM_PROGRESS_TYPE, + [](const std::string& val, DOMProgress& progress) { + if (val == DOM_PROGRESS_TYPE_CIRCULAR) { + progress.type_ = ProgressType::CIRCLE; + } else if (val == DOM_PROGRESS_TYPE_RING) { + progress.type_ = ProgressType::RING; + } else if (val == DOM_PROGRESS_TYPE_HORIZONTAL) { + progress.type_ = ProgressType::LINEAR; + } else if (val == DOM_PROGRESS_TYPE_SCALE) { + progress.type_ = ProgressType::SCALE; + } else if (val == DOM_PROGRESS_TYPE_MOON) { + progress.type_ = ProgressType::MOON; + } else if ((val == DOM_PROGRESS_TYPE_ARC)) { + progress.type_ = ProgressType::ARC; + } else { + progress.type_ = ProgressType::LINEAR; + } + } }, + }; + auto operatorIter = + BinarySearchFindIndex(progressAttrsOperators, ArraySize(progressAttrsOperators), attr.first.c_str()); + if (operatorIter != -1) { + progressAttrsOperators[operatorIter].value(attr.second, *this); + return true; + } + return false; +} + +bool DOMProgress::SetSpecializedStyle(const std::pair& style) +{ + // static linear map must be sorted by key. + static const LinearMapNode progressStylesOperators[] = { + { DOM_PROGRESS_BACKGROUND_COLOR, + [](const std::string& val, DOMProgress& progress) { + progress.backgroundColor_.first = progress.ParseColor(val); + progress.backgroundColor_.second = true; + } }, + { DOM_CENTER_X, + [](const std::string& val, DOMProgress& progress) { + progress.centerX_.first = StringToDouble(val); + progress.centerX_.second = true; + } }, + { DOM_CENTER_Y, + [](const std::string& val, DOMProgress& progress) { + progress.centerY_.first = StringToDouble(val); + progress.centerY_.second = true; + } }, + { DOM_PROGRESS_COLOR, + [](const std::string& val, DOMProgress& progress) { + if (IsGradient(val)) { + progress.gradient_ = ParseGradient(progress, val); + } else { + progress.color_.first = progress.ParseColor(val); + progress.color_.second = true; + } + } }, + { DOM_DIRECTION, + [](const std::string& val, DOMProgress& progress) { progress.isStartToEnd_ = val == DOM_START_TO_END; } }, + { DOM_PROGRESS_RADIUS, + [](const std::string& val, DOMProgress& progress) { + progress.radius_.first = StringToDouble(val); + progress.radius_.second = true; + } }, + { DOM_SCALE_NUMBER, + [](const std::string& val, DOMProgress& progress) { + progress.scaleNumber_.first = StringUtils::StringToInt(val); + progress.scaleNumber_.second = true; + } }, + { DOM_SCALE_WIDTH, + [](const std::string& val, DOMProgress& progress) { + progress.scaleWidth_.first = progress.ParseDimension(val); + progress.scaleWidth_.second = true; + } }, + { DOM_PROGRESS_SECONDARY_COLOR, + [](const std::string& val, DOMProgress& progress) { + progress.cachedColor_.first = progress.ParseColor(val); + progress.cachedColor_.second = true; + } }, + { DOM_START_DEGREE, + [](const std::string& val, DOMProgress& progress) { progress.startDegree_ = StringToDouble(val); } }, + { DOM_PROGRESS_STROKE_WIDTH, + [](const std::string& val, DOMProgress& progress) { + progress.strokeWidth_.first = progress.ParseDimension(val); + progress.strokeWidth_.second = true; + } }, + { DOM_SWEEP_DEGREE, + [](const std::string& val, DOMProgress& progress) { progress.sweepDegree_ = StringToDouble(val); } }, + }; + auto operatorIter = + BinarySearchFindIndex(progressStylesOperators, ArraySize(progressStylesOperators), style.first.c_str()); + if (operatorIter != -1) { + progressStylesOperators[operatorIter].value(style.second, *this); + return true; + } + return false; +} + +void DOMProgress::PrepareSpecializedComponent() +{ + InitProgressIfNeed(); + if (type_ == ProgressType::CIRCLE) { + loadingProgressChild_->SetProgressColor(color_.first); + return; + } + progressChild_->SetMaxValue(max_); + progressChild_->SetMinValue(min_); + progressChild_->SetValue(percent_); + progressChild_->SetCachedValue(cachedValue_); + progressChild_->GetTrack()->SetSelectColor(color_.first); + progressChild_->GetTrack()->SetCachedColor(cachedColor_.first); + progressChild_->GetTrack()->SetBackgroundColor(backgroundColor_.first); + progressChild_->GetTrack()->SetTrackThickness(strokeWidth_.first); + progressChild_->GetTrack()->SetShowAnimation(showAnimationEffect_); + progressChild_->SetAnimationPlay(showAnimationEffect_); + progressChild_->GetTrack()->SetTextDirection( + IsRightToLeft() && isStartToEnd_ ? TextDirection::RTL : TextDirection::LTR); + if (gradient_.IsValid()) { + progressChild_->GetTrack()->SetSelectGradient(gradient_); + } + if (type_ == ProgressType::RING) { + auto info = progressChild_->GetTrack()->GetTrackInfo(); + info->SetClockwise(clockwiseDirection_); + } else if (type_ == ProgressType::SCALE) { + auto info = progressChild_->GetTrack()->GetTrackInfo(); + info->SetScaleWidth(scaleWidth_.first); + info->SetScaleNumber(scaleNumber_.first); + info->SetClockwise(clockwiseDirection_); + } else if (type_ == ProgressType::ARC) { + // draw arc progress + progressChild_->GetTrack()->GetTrackInfo()->SetStartDegree(startDegree_); + progressChild_->GetTrack()->GetTrackInfo()->SetSweepDegree(sweepDegree_); + if (radius_.second) { + progressChild_->GetTrack()->SetRadius(radius_.first); + } + if (centerX_.second) { + progressChild_->GetTrack()->SetCenterX(centerX_.first); + } + if (centerY_.second) { + progressChild_->GetTrack()->SetCenterY(centerY_.first); + } + } +} + +void DOMProgress::OnSetStyleFinished() +{ + // the range is from -360 to 360 degree + static constexpr double defaultStartDegree = -120; + static constexpr double defaultSweepDegree = 240; + if (startDegree_ > 360.0 || startDegree_ < -360.0) { + startDegree_ = defaultStartDegree; + sweepDegree_ = defaultSweepDegree; + return; + } + if (sweepDegree_ > 360.0 || sweepDegree_ < -360.0) { + startDegree_ = defaultStartDegree; + sweepDegree_ = defaultSweepDegree; + return; + } +} + +RefPtr DOMProgress::GetSpecializedComponent() +{ + if (type_ == ProgressType::CIRCLE) { + return loadingProgressChild_; + } else { + return progressChild_; + } +} + +void DOMProgress::InitProgressIfNeed() +{ + auto theme = GetTheme(); + if (type_ == ProgressType::CIRCLE) { + // Width_ and height_ in circluar progress are usually the same with diameter in loading progress component. + // If width_ and height_ are different, choose smaller one as diameter. + if (!loadingProgressChild_) { + loadingProgressChild_ = AceType::MakeRefPtr(); + } + if (theme) { + if (!color_.second) { + color_.first = theme->GetProgressColor(); + } + loadingProgressChild_->SetMoveRatio(theme->GetMoveRatio()); + loadingProgressChild_->SetRingRadius(theme->GetRingRadius()); + loadingProgressChild_->SetOrbitRadius(theme->GetOrbitRadius()); + loadingProgressChild_->SetCometTailLen(theme->GetCometTailLen()); + } + return; + } + if (!progressChild_ || progressChild_->GetType() != type_) { + progressChild_ = CreateProgressComponent(min_, percent_, cachedValue_, max_, type_); + } + if (!theme) { + return; + } + if (!color_.second) { + color_.first = type_ == ProgressType::MOON ? theme->GetMoonFrontColor() : theme->GetTrackSelectedColor(); + } + if (!backgroundColor_.second) { + backgroundColor_.first = + type_ == ProgressType::MOON ? theme->GetMoonBackgroundColor() : theme->GetTrackBgColor(); + } + if (!cachedColor_.second) { + cachedColor_.first = theme->GetTrackCachedColor(); + } + if (!strokeWidth_.second) { + if (type_ == ProgressType::SCALE) { + strokeWidth_.first = theme->GetScaleLength(); + } else if (type_ == ProgressType::RING) { + strokeWidth_.first = theme->GetRingThickness(); + } else { + strokeWidth_.first = theme->GetTrackThickness(); + } + } + if (!scaleWidth_.second) { + scaleWidth_.first = theme->GetScaleWidth(); + } + if (!scaleNumber_.second) { + scaleNumber_.first = theme->GetScaleNumber(); + } +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_progress.h b/frameworks/bridge/common/dom/dom_progress.h new file mode 100644 index 00000000..2c982897 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_progress.h @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_PROGRESS_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_PROGRESS_H + +#include + +#include "core/components/progress/loading_progress_component.h" +#include "core/components/progress/progress_component.h" +#include "frameworks/bridge/common/dom/dom_node.h" + +namespace OHOS::Ace::Framework { + +class DOMProgress final : public DOMNode { + DECLARE_ACE_TYPE(DOMProgress, DOMNode); + +public: + DOMProgress(NodeId nodeId, const std::string& nodeName); + ~DOMProgress() override = default; + + static RefPtr CreateProgressComponent( + double min, double percent, double cachedValue, double max, ProgressType type); + + RefPtr GetSpecializedComponent() override; + +protected: + bool SetSpecializedAttr(const std::pair& attr) override; + bool SetSpecializedStyle(const std::pair& style) override; + void OnSetStyleFinished() override; + void PrepareSpecializedComponent() override; + +private: + void InitProgressIfNeed(); + + double cachedValue_ = 0.0; + double min_ = 0.0; + double max_ = 100.0; + double percent_ = 0.0; + + bool clockwiseDirection_ = true; + bool showAnimationEffect_ = true; + + // All the magic numbers below are followed UX requirement. + std::pair color_ { Color(), false }; + + Gradient gradient_; + std::pair cachedColor_ { Color(), false }; + std::pair backgroundColor_ { Color(), false }; + std::pair strokeWidth_ = { 32.0_px, false }; + std::pair scaleWidth_ = { 2.0_vp, false }; + std::pair scaleNumber_ = { 120, false }; + + std::pair radius_ = { -1.0, false }; + std::pair centerX_ = { -1.0, false }; + std::pair centerY_ = { -1.0, false }; + + double startDegree_ = -120.0; + double sweepDegree_ = 240.0; + bool isStartToEnd_ = true; + + std::vector colors_; + std::vector weights_; + + ProgressType type_ = ProgressType::LINEAR; + + RefPtr progressChild_; + RefPtr loadingProgressChild_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_PROGRESS_H diff --git a/frameworks/bridge/common/dom/dom_proxy.cpp b/frameworks/bridge/common/dom/dom_proxy.cpp new file mode 100644 index 00000000..6f4a91c9 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_proxy.cpp @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_proxy.h" + +namespace OHOS::Ace::Framework { + +void DOMProxy::Mount(int32_t slot) +{ + auto parentNode = parentNode_.Upgrade(); + if (!parentNode) { + return; + } + rootComponent_->SetChild(boxComponent_); + rootComponent_->MarkNeedUpdate(); + + parentNode->AddNode(AceType::Claim(this), slot); + OnMounted(parentNode); +} + +void DOMProxy::SetShowAttr(const std::string& showValue) +{ + auto targetNode = targetNode_.Upgrade(); + if (!targetNode) { + return; + } + targetNode->SetHasDisplayStyleFlag(true); + targetNode->SetShowAttr(showValue); + targetNode->GetRootComponent()->SetUpdateType(UpdateType::ALL); + targetNode->GenerateComponentNode(); + auto pipeline = pipelineContext_.Upgrade(); + if (pipeline) { + pipeline->ScheduleUpdate(targetNode->GetRootComponent()); + } +} + +void DOMProxy::ConnectWith(const WeakPtr& target) +{ + targetNode_ = target; +} + +void DOMProxy::UpdateStyleWithChildren() +{ + auto target = targetNode_.Upgrade(); + if (!target) { + return; + } + target->UpdateStyleWithChildren(); +} + +void DOMProxy::SetIsIgnored(bool ignore) +{ + if (boxComponent_) { + boxComponent_->SetIsIgnored(ignore); + } +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_proxy.h b/frameworks/bridge/common/dom/dom_proxy.h new file mode 100644 index 00000000..3d677944 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_proxy.h @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_PROXY_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_PROXY_H + +#include "frameworks/bridge/common/dom/dom_node.h" + +namespace OHOS::Ace::Framework { + +class DOMProxy : public DOMNode { + DECLARE_ACE_TYPE(DOMProxy, DOMNode); + +public: + DOMProxy(NodeId nodeId, const std::string& nodeName) : DOMNode(nodeId, nodeName) {} + ~DOMProxy() override = default; + + RefPtr GetSpecializedComponent() override + { + return nullptr; + } + + void CompositeComponents() override {} + + void Mount(int32_t slot) override; + void SetShowAttr(const std::string& showValue) override; + void ConnectWith(const WeakPtr& target); + + // proxy node does not need the following actions + void SetAttr(const std::vector>& attrs) override {} + void SetStyle(const std::vector>& styles) override {} + void AddEvent(int32_t pageId, const std::vector& events) override {} + void UpdateStyleWithChildren() override; + void SetIsIgnored(bool ignore); + +private: + WeakPtr targetNode_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_PROXY_H diff --git a/frameworks/bridge/common/dom/dom_qrcode.cpp b/frameworks/bridge/common/dom/dom_qrcode.cpp new file mode 100644 index 00000000..5644e879 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_qrcode.cpp @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_qrcode.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { + +DOMQrcode::DOMQrcode(NodeId nodeId, const std::string& nodeName) : DOMNode(nodeId, nodeName) +{ + qrcodeChild_ = AceType::MakeRefPtr(); +} + +void DOMQrcode::ResetInitializedStyle() +{ + InitializeStyle(); +} + +bool DOMQrcode::SetSpecializedAttr(const std::pair& attr) +{ + static const LinearMapNode qrcodeAttrOperators[] = { + { DOM_QRCODE_TYPE, + [](DOMQrcode& qrcode, + const std::string& value) { qrcode.qrcodeChild_->SetQrcodeType(ConvertStrToQrcodeType(value)); } }, + { DOM_QRCODE_VALUE, + [](DOMQrcode& qrcode, const std::string& value) { qrcode.qrcodeChild_->SetValue(value); } }, + }; + auto operatorIter = BinarySearchFindIndex(qrcodeAttrOperators, ArraySize(qrcodeAttrOperators), attr.first.c_str()); + if (operatorIter != -1) { + qrcodeAttrOperators[operatorIter].value(*this, attr.second); + return true; + } + return false; +} + +bool DOMQrcode::SetSpecializedStyle(const std::pair& style) +{ + const static LinearMapNode qrcodeOperators[] = { + { DOM_QRCODE_BACKGROUND_COLOR, + [](DOMQrcode& qrcode, const std::string& value) { + qrcode.qrcodeChild_->SetBackgroundColor(qrcode.ParseColor(value)); + } }, + { DOM_QRCODE_COLOR, + [](DOMQrcode& qrcode, const std::string& value) { + qrcode.qrcodeChild_->SetQrcodeColor(qrcode.ParseColor(value)); + } }, + { DOM_QRCODE_HEIGHT, + [](DOMQrcode& qrcode, const std::string& value) { + qrcode.qrcodeChild_->SetQrcodeHeight(qrcode.ParseDimension(value)); + qrcode.qrcodeChild_->SetHeightDefined(true); + } }, + { DOM_QRCODE_WIDTH, + [](DOMQrcode& qrcode, const std::string& value) { + qrcode.qrcodeChild_->SetQrcodeWidth(qrcode.ParseDimension(value)); + qrcode.qrcodeChild_->SetWidthDefined(true); + } }, + }; + auto operatorIter = BinarySearchFindIndex(qrcodeOperators, ArraySize(qrcodeOperators), style.first.c_str()); + if (operatorIter != -1) { + qrcodeOperators[operatorIter].value(*this, style.second); + return true; + } + return false; +} + +void DOMQrcode::InitializeStyle() +{ + qrcodeTheme_ = GetTheme(); + if (!qrcodeTheme_) { + LOGE("qrcodeTheme is null"); + return; + } + qrcodeChild_->SetQrcodeColor(qrcodeTheme_->GetQrcodeColor()); + qrcodeChild_->SetBackgroundColor(qrcodeTheme_->GetBackgroundColor()); + qrcodeChild_->SetQrcodeType(qrcodeTheme_->GetQrcodeType()); + qrcodeChild_->SetQrcodeWidth(qrcodeTheme_->GetQrcodeWidth()); + qrcodeChild_->SetQrcodeHeight(qrcodeTheme_->GetQrcodeHeight()); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_qrcode.h b/frameworks/bridge/common/dom/dom_qrcode.h new file mode 100644 index 00000000..8e151663 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_qrcode.h @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_DOM_DOM_QRCODE_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_DOM_DOM_QRCODE_H + +#include "core/components/qrcode/qrcode_component.h" +#include "core/components/qrcode/qrcode_theme.h" +#include "frameworks/bridge/common/dom/dom_node.h" +#include "frameworks/bridge/common/dom/dom_type.h" + +namespace OHOS::Ace::Framework { + +class DOMQrcode final : public DOMNode { + DECLARE_ACE_TYPE(DOMQrcode, DOMNode); + +public: + DOMQrcode(NodeId nodeId, const std::string& nodeName); + ~DOMQrcode() override = default; + + RefPtr GetSpecializedComponent() override + { + return qrcodeChild_; + } + + void InitializeStyle() override; + +protected: + bool SetSpecializedAttr(const std::pair& attr) override; + bool SetSpecializedStyle(const std::pair& style) override; + void ResetInitializedStyle() override; + +private: + RefPtr qrcodeChild_; + RefPtr qrcodeTheme_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_DOM_DOM_QRCODE_H diff --git a/frameworks/bridge/common/dom/dom_rating.cpp b/frameworks/bridge/common/dom/dom_rating.cpp new file mode 100644 index 00000000..922e3aa9 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_rating.cpp @@ -0,0 +1,181 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_rating.h" + +#include "core/components/rating/rating_theme.h" +#include "frameworks/bridge/common/dom/dom_type.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { + +DOMRating::DOMRating(NodeId nodeId, const std::string& nodeName) : DOMNode(nodeId, nodeName) +{ + ratingChild_ = AceType::MakeRefPtr(); + if (IsRightToLeft()) { + ratingChild_->SetTextDirection(TextDirection::RTL); + } +} + +void DOMRating::ResetInitializedStyle() +{ + SetThemeAttrs(); +} + +bool DOMRating::SetSpecializedAttr(const std::pair& attr) +{ + if (attr.first == DOM_RATING_INDICATOR) { + ratingChild_->SetIndicator(StringToBool(attr.second)); + return true; + } + // DOMRating attributes map + static const std::unordered_map ratingAttrOperators = { + { DOM_STAR_NUM, + [](const std::string& val, DOMRating& rating) { + rating.starNum_.first = StringToInt(val); + rating.starNum_.second = true; + } }, + { DOM_RATING_SCORE, + [](const std::string& val, DOMRating& rating) { + rating.ratingScore_.first = StringToDouble(val); + rating.ratingScore_.second = true; + } }, + { DOM_RATING_STEP, + [](const std::string& val, DOMRating& rating) { + rating.stepSize_.first = StringToDouble(val); + rating.stepSize_.second = true; + } }, + }; + auto operatorIter = ratingAttrOperators.find(attr.first); + if (operatorIter != ratingAttrOperators.end()) { + operatorIter->second(attr.second, *this); + return true; + } + + return false; +} + +bool DOMRating::SetSpecializedStyle(const std::pair& style) +{ + if (style.first == DOM_RTL_FLIP) { + ratingChild_->SetRtlFlip(StringToBool(style.second)); + return true; + } + // DOMRating styles map + static const std::unordered_map ratingStyleOperators = { + { DOM_BACKGROUND_SRC, + [](const std::string& val, DOMRating& rating) { + rating.backgroundSrc_.first = val; + rating.backgroundSrc_.second = true; + } }, + { DOM_FOREGROUND_SRC, + [](const std::string& val, DOMRating& rating) { + rating.foregroundSrc_.first = val; + rating.foregroundSrc_.second = true; + } }, + { DOM_SECONDARY_SRC, + [](const std::string& val, DOMRating& rating) { + rating.secondarySrc_.first = val; + rating.secondarySrc_.second = true; + } }, + }; + auto operatorIter = ratingStyleOperators.find(style.first); + if (operatorIter != ratingStyleOperators.end()) { + operatorIter->second(style.second, *this); + return true; + } + + return false; +} + +bool DOMRating::AddSpecializedEvent(int32_t pageId, const std::string& event) +{ + LOGD("DOMRating AddEvent"); + if (event == DOM_CHANGE) { + changeEventId_ = EventMarker(GetNodeIdForEvent(), event, pageId); + ratingChild_->SetChangeEventId(changeEventId_); + return true; + } + return false; +} + +void DOMRating::SetThemeAttrs() +{ + auto theme = GetTheme(); + if (!theme) { + return; + } + if (ratingChild_->GetIndicator()) { + // If box's size not defined, use theme to initialize. + if (boxComponent_->GetHeightDimension().Value() < 0.0) { + SetHeight(theme->GetRatingMiniHeight()); + boxComponent_->SetHeight(theme->GetRatingMiniHeight().Value(), theme->GetRatingMiniHeight().Unit()); + } + if (boxComponent_->GetWidthDimension().Value() < 0.0) { + SetWidth(theme->GetRatingMiniWidth()); + boxComponent_->SetWidth(theme->GetRatingMiniWidth().Value(), theme->GetRatingMiniWidth().Unit()); + } + ratingChild_->SetPaddingVertical(Dimension()); + ratingChild_->SetRatingScore(theme->GetRatingMiniScore()); + ratingChild_->SetMiniResIdFromTheme(theme); + } else { + // If box's size not defined, use theme to initialize. + if (boxComponent_->GetHeightDimension().Value() < 0.0) { + SetHeight(theme->GetRatingHeight()); + boxComponent_->SetHeight(theme->GetRatingHeight().Value(), theme->GetRatingHeight().Unit()); + } + if (boxComponent_->GetWidthDimension().Value() < 0.0) { + SetWidth(theme->GetRatingWidth()); + boxComponent_->SetWidth(theme->GetRatingWidth().Value(), theme->GetRatingWidth().Unit()); + } + ratingChild_->SetRatingScore(theme->GetRatingScore()); + ratingChild_->SetPaddingVertical(theme->GetPaddingVertical()); + ratingChild_->SetResIdFromTheme(theme); + } + ratingChild_->SetStarNum(theme->GetStarNum()); + ratingChild_->SetStepSize(theme->GetStepSize()); + ratingChild_->SetDefaultHeight(theme->GetRatingHeight()); + ratingChild_->SetDesignedStarAspectRatio(theme->GetDesignedStarAspectRatio()); + ratingChild_->SetFocusBorderWidth(theme->GetFocusBorderWidth()); + ratingChild_->SetFocusBorderRadius(theme->GetFocusBorderRadius()); + ratingChild_->SetHoverColor(theme->GetHoverColor()); + ratingChild_->SetStarColorActive(theme->GetStarColorActive()); + ratingChild_->SetStarColorInactive(theme->GetStarColorInactive()); +} + +void DOMRating::PrepareSpecializedComponent() +{ + SetThemeAttrs(); + if (starNum_.second) { + ratingChild_->SetStarNum(starNum_.first); + } + if (ratingScore_.second) { + ratingChild_->SetRatingScore(ratingScore_.first); + } + if (stepSize_.second) { + ratingChild_->SetStepSize(stepSize_.first); + } + if (backgroundSrc_.second) { + ratingChild_->SetBackgroundSrc(backgroundSrc_.first); + } + if (foregroundSrc_.second) { + ratingChild_->SetForegroundSrc(foregroundSrc_.first); + } + if (secondarySrc_.second) { + ratingChild_->SetSecondarySrc(secondarySrc_.first); + } +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_rating.h b/frameworks/bridge/common/dom/dom_rating.h new file mode 100644 index 00000000..3208b10a --- /dev/null +++ b/frameworks/bridge/common/dom/dom_rating.h @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_RATING_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_RATING_H + +#include "core/components/rating/rating_component.h" +#include "frameworks/bridge/common/dom/dom_node.h" + +namespace OHOS::Ace::Framework { + +class DOMRating final : public DOMNode { + DECLARE_ACE_TYPE(DOMRating, DOMNode); + +public: + DOMRating(NodeId nodeId, const std::string& nodeName); + ~DOMRating() override = default; + + void SetThemeAttrs(); + + RefPtr GetSpecializedComponent() override + { + return ratingChild_; + } + + void ResetInitializedStyle() override; + +protected: + bool SetSpecializedAttr(const std::pair& attr) override; + bool SetSpecializedStyle(const std::pair& style) override; + bool AddSpecializedEvent(int32_t pageId, const std::string& event) override; + void PrepareSpecializedComponent() override; + +private: + RefPtr ratingChild_; + EventMarker changeEventId_; + + std::pair starNum_ = { DEFAULT_RATING_STAR_NUM, false }; + std::pair ratingScore_ = { DEFAULT_RATING_SCORE, false }; + std::pair stepSize_ = { DEFAULT_RATING_STEP_SIZE, false }; + std::pair foregroundSrc_ { "", false }; + std::pair secondarySrc_ { "", false }; + std::pair backgroundSrc_ { "", false }; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_RATING_H diff --git a/frameworks/bridge/common/dom/dom_reflect_map.h b/frameworks/bridge/common/dom/dom_reflect_map.h new file mode 100644 index 00000000..af4c8a92 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_reflect_map.h @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_REFLECT_MAP_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_REFLECT_MAP_H + +#include + +#include "core/components/common/layout/constants.h" +#include "core/components/common/layout/grid_layout_info.h" +#include "frameworks/bridge/common/dom/dom_type.h" + +namespace OHOS::Ace::Framework { + +const std::map FlexDirectionMap = { + { DOM_FLEX_COLUMN, FlexDirection::COLUMN }, + { DOM_FLEX_ROW, FlexDirection::ROW } +}; + +const std::map FlexJustifyContentMap = { + { DOM_JUSTIFY_CONTENT_START, FlexAlign::FLEX_START }, + { DOM_JUSTIFY_CONTENT_CENTER, FlexAlign::CENTER }, + { DOM_JUSTIFY_CONTENT_END, FlexAlign::FLEX_END }, + { DOM_JUSTIFY_CONTENT_BETWEEN, FlexAlign::SPACE_BETWEEN }, + { DOM_JUSTIFY_CONTENT_AROUND, FlexAlign::SPACE_AROUND }, + { DOM_JUSTIFY_CONTENT_EVENLY, FlexAlign::SPACE_EVENLY }, +}; + +const std::map FlexAlignItemsMap = { + { DOM_ALIGN_ITEMS_STRETCH, FlexAlign::STRETCH }, + { DOM_ALIGN_ITEMS_START, FlexAlign::FLEX_START }, + { DOM_ALIGN_ITEMS_CENTER, FlexAlign::CENTER }, + { DOM_ALIGN_ITEMS_END, FlexAlign::FLEX_END } +}; + +const std::map WrapDirectionMap = { + { DOM_FLEX_ROW, WrapDirection::HORIZONTAL }, + { DOM_FLEX_COLUMN, WrapDirection::VERTICAL } +}; + +const std::map WrapJustifyContentMap = { + { DOM_JUSTIFY_CONTENT_START, WrapAlignment::START }, + { DOM_JUSTIFY_CONTENT_CENTER, WrapAlignment::CENTER }, + { DOM_JUSTIFY_CONTENT_END, WrapAlignment::END }, + { DOM_JUSTIFY_CONTENT_BETWEEN, WrapAlignment::SPACE_BETWEEN }, + { DOM_JUSTIFY_CONTENT_AROUND, WrapAlignment::SPACE_AROUND } +}; + +const std::map WrapAlignItemsMap = { + { DOM_ALIGN_ITEMS_STRETCH, WrapAlignment::STRETCH }, + { DOM_ALIGN_ITEMS_START, WrapAlignment::START }, + { DOM_ALIGN_ITEMS_CENTER, WrapAlignment::CENTER }, + { DOM_ALIGN_ITEMS_END, WrapAlignment::END} +}; + +const std::map WrapAlignContentMap = { + { DOM_ALIGN_CONTENT_STRETCH, WrapAlignment::STRETCH }, + { DOM_ALIGN_CONTENT_START, WrapAlignment::START }, + { DOM_ALIGN_CONTENT_CENTER, WrapAlignment::CENTER }, + { DOM_ALIGN_CONTENT_END, WrapAlignment::END }, + { DOM_ALIGN_CONTENT_BETWEEN, WrapAlignment::SPACE_BETWEEN }, + { DOM_ALIGN_CONTENT_AROUND, WrapAlignment::SPACE_AROUND } +}; + +const std::map GridSizeTypeMap = { + { DOM_GRID_SIZE_TYPE_XS, GridSizeType::XS }, + { DOM_GRID_SIZE_TYPE_SM, GridSizeType::SM }, + { DOM_GRID_SIZE_TYPE_MD, GridSizeType::MD }, + { DOM_GRID_SIZE_TYPE_LG, GridSizeType::LG } +}; + +const std::map GridColumnTypeMap = { + { DOM_COLUMN_TYPE_NONE, GridColumnType::NONE }, + { DOM_COLUMN_TYPE_BUBBLE, GridColumnType::BUBBLE_TYPE }, + { DOM_COLUMN_TYPE_BUTTON, GridColumnType::BUTTON_TYPE }, + { DOM_COLUMN_TYPE_CARD, GridColumnType::CARD_TYPE }, + { DOM_COLUMN_TYPE_CONTENT, GridColumnType::CONTENT_TYPE }, +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_REFLECT_MAP_H diff --git a/frameworks/bridge/common/dom/dom_refresh.cpp b/frameworks/bridge/common/dom/dom_refresh.cpp new file mode 100644 index 00000000..2658a32b --- /dev/null +++ b/frameworks/bridge/common/dom/dom_refresh.cpp @@ -0,0 +1,148 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_refresh.h" + +#include "core/components/progress/progress_theme.h" +#include "core/components/refresh/refresh_theme.h" +#include "frameworks/bridge/common/dom/dom_type.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { + +DOMRefresh::DOMRefresh(NodeId nodeId, const std::string& nodeName) : DOMNode(nodeId, nodeName) +{ + refreshChild_ = AceType::MakeRefPtr(); + columnChild_ = AceType::MakeRefPtr( + FlexAlign::FLEX_START, FlexAlign::FLEX_START, std::list>()); + + if (IsRightToLeft()) { + refreshChild_->SetTextDirection(TextDirection::RTL); + columnChild_->SetTextDirection(TextDirection::RTL); + } +} + +void DOMRefresh::InitializeStyle() +{ + ResetInitializedStyle(); +} + +void DOMRefresh::ResetInitializedStyle() +{ + RefPtr theme = GetTheme(); + if (theme) { + refreshChild_->SetLoadingDistance(theme->GetLoadingDistance()); + refreshChild_->SetRefreshDistance(theme->GetRefreshDistance()); + refreshChild_->SetProgressDistance(theme->GetProgressDistance()); + refreshChild_->SetProgressDiameter(theme->GetProgressDiameter()); + refreshChild_->SetMaxDistance(theme->GetMaxDistance()); + refreshChild_->SetShowTimeDistance(theme->GetShowTimeDistance()); + refreshChild_->SetTextStyle(theme->GetTextStyle()); + refreshChild_->SetProgressColor(theme->GetProgressColor()); + refreshChild_->SetBackgroundColor(theme->GetBackgroundColor()); + } +} + +bool DOMRefresh::SetSpecializedAttr(const std::pair& attr) +{ + if (attr.first == DOM_REFRESH_OFFSET) { + Dimension offset = ParseDimension(attr.second); + refreshChild_->SetUseOffset(true); + refreshChild_->SetIndicatorOffset(offset); + } else if (attr.first == DOM_REFRESH_REFRESHING) { + refreshing_ = StringToBool(attr.second); + refreshChild_->SetRefreshing(refreshing_); + } else if (attr.first == DOM_REFRESH_TYPE) { + if (attr.second == "pulldown") { + refreshType_ = RefreshType::PULL_DOWN; + } else { + refreshType_ = RefreshType::AUTO; + } + refreshChild_->SetRefreshType(refreshType_); + } else if (attr.first == DOM_REFRESH_LASTTIME) { + showLastTime_ = StringToBool(attr.second); + refreshChild_->SetShowLastTime(showLastTime_); + } else if (attr.first == DOM_REFRESH_FRICTION) { + friction_ = StringToInt(attr.second); + refreshChild_->SetFriction(friction_); + } else if (attr.first == DOM_REFRESH_TIME_OFFSET) { + refreshChild_->SetTimeOffset(ParseDimension(attr.second)); + } else { + return false; + } + return true; +} + +bool DOMRefresh::SetSpecializedStyle(const std::pair& style) +{ + if (style.first == DOM_REFRESH_PROGRESS_COLOR) { + progressColor_.first = ParseColor(style.second); + progressColor_.second = true; + return true; + } + if (style.first == DOM_REFRESH_BACKGROUND_COLOR) { + backgroundColor_ = ParseColor(style.second); + refreshChild_->SetBackgroundColor(backgroundColor_); + return true; + } + return false; +} + +void DOMRefresh::OnChildNodeAdded(const RefPtr& child, int32_t slot) +{ + if (columnChild_) { + columnChild_->AppendChild(child->GetRootComponent()); + } +} + +void DOMRefresh::OnChildNodeRemoved(const RefPtr& child) +{ + if (columnChild_) { + columnChild_->RemoveChild(child->GetRootComponent()); + } +} + +bool DOMRefresh::AddSpecializedEvent(int32_t pageId, const std::string& event) +{ + LOGD("DOMRefresh start add event"); + if (event == DOM_REFRESH) { + LOGD("DOMRefresh Add refresh Event"); + refreshEventId_ = EventMarker(GetNodeIdForEvent(), event, pageId); + refreshChild_->SetRefreshEventId(refreshEventId_); + return true; + } + if (event == DOM_REFRESH_EVENT_PULL_DOWN) { + LOGD("DOMRefresh Add pulldown Event"); + pullDownEventId_ = EventMarker(GetNodeIdForEvent(), event, pageId); + refreshChild_->SetPulldownEventId(pullDownEventId_); + return true; + } + return false; +} + +RefPtr DOMRefresh::GetSpecializedComponent() +{ + if (refreshChild_) { + refreshChild_->SetChild(columnChild_); + if (!progressColor_.second) { + auto theme = GetTheme(); + progressColor_.first = theme->GetProgressColor(); + } + refreshChild_->SetProgressColor(progressColor_.first); + } + return refreshChild_; +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_refresh.h b/frameworks/bridge/common/dom/dom_refresh.h new file mode 100644 index 00000000..50dce8df --- /dev/null +++ b/frameworks/bridge/common/dom/dom_refresh.h @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_REFRESH_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_REFRESH_H + +#include "core/components/flex/flex_component.h" +#include "core/components/refresh/refresh_component.h" +#include "frameworks/bridge/common/dom/dom_node.h" + +namespace OHOS::Ace::Framework { + +class DOMRefresh final : public DOMNode { + DECLARE_ACE_TYPE(DOMRefresh, DOMNode); + +public: + DOMRefresh(NodeId nodeId, const std::string& nodeName); + ~DOMRefresh() override = default; + + void InitializeStyle() override; + + RefPtr GetSpecializedComponent() override; + +protected: + void OnChildNodeAdded(const RefPtr& child, int32_t slot) override; + void OnChildNodeRemoved(const RefPtr& child) override; + bool SetSpecializedAttr(const std::pair& attr) override; + bool SetSpecializedStyle(const std::pair& style) override; + bool AddSpecializedEvent(int32_t pageId, const std::string& event) override; + void ResetInitializedStyle() override; + +private: + RefPtr refreshChild_; + RefPtr columnChild_; + EventMarker refreshEventId_; + EventMarker pullDownEventId_; + + bool refreshing_ = false; + bool showLastTime_ = false; + int32_t friction_ = 0; + RefreshType refreshType_ = RefreshType::AUTO; + + std::pair progressColor_ { Color(), false }; + Color backgroundColor_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_REFRESH_H diff --git a/frameworks/bridge/common/dom/dom_search.cpp b/frameworks/bridge/common/dom/dom_search.cpp new file mode 100644 index 00000000..22a57d13 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_search.cpp @@ -0,0 +1,330 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_search.h" + +#include "base/utils/linear_map.h" +#include "base/utils/utils.h" +#include "core/common/ime/text_selection.h" +#include "core/components/common/properties/radius.h" +#include "core/components/search/search_theme.h" +#include "core/components/text_field/textfield_theme.h" +#include "frameworks/bridge/common/dom/input/dom_textfield_util.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +namespace { + +struct StyleParseHolder { + const DOMSearch& node; + RefPtr& search; + RefPtr& textField; + TextStyle& textStyle; + bool& isPaddingChanged; +}; + +} // namespace + +DOMSearch::DOMSearch(NodeId nodeId, const std::string& nodeName) : DOMNode(nodeId, nodeName) +{ + searchChild_ = AceType::MakeRefPtr(); + textFieldComponent_ = AceType::MakeRefPtr(); + DOMTextFieldUtil::InitController(textFieldComponent_); + if (IsRightToLeft()) { + searchChild_->SetTextDirection(TextDirection::RTL); + textFieldComponent_->SetTextDirection(TextDirection::RTL); + } +} + +void DOMSearch::ResetInitializedStyle() +{ + InitializeStyle(); +} + +void DOMSearch::InitializeStyle() +{ + auto textFieldTheme = GetTheme(); + auto searchTheme = GetTheme(); + if (!textFieldTheme || !searchTheme) { + // theme is null, set default decoration to text field component + RefPtr decoration = AceType::MakeRefPtr(); + textFieldComponent_->SetDecoration(decoration); + LOGE("textFieldTheme or searchTheme is null"); + return; + } + + DOMTextFieldUtil::InitDefaultValue(boxComponent_, textFieldComponent_, textFieldTheme); + boxComponent_->SetBackDecoration(nullptr); + boxComponent_->SetPadding(Edge()); + textFieldComponent_->SetIconSize(searchTheme->GetIconSize()); + textFieldComponent_->SetIconHotZoneSize(searchTheme->GetCloseIconHotZoneSize()); + Edge decorationPadding; + Dimension leftPadding = searchTheme->GetLeftPadding(); + Dimension rightPadding = searchTheme->GetRightPadding(); + if (IsRightToLeft()) { + decorationPadding = Edge(rightPadding.Value(), 0.0, leftPadding.Value(), 0.0, leftPadding.Unit()); + } else { + decorationPadding = Edge(leftPadding.Value(), 0.0, rightPadding.Value(), 0.0, leftPadding.Unit()); + } + auto textFieldDecoration = textFieldComponent_->GetDecoration(); + if (textFieldDecoration) { + textFieldDecoration->SetPadding(decorationPadding); + textFieldDecoration->SetBorderRadius(searchTheme->GetBorderRadius()); + textFieldComponent_->SetOriginBorder(textFieldDecoration->GetBorder()); + } + textFieldComponent_->SetAction(TextInputAction::SEARCH); + textFieldComponent_->SetWidthReserved(searchTheme->GetTextFieldWidthReserved()); + textFieldComponent_->SetTextColor(searchTheme->GetTextColor()); + textFieldComponent_->SetFocusTextColor(searchTheme->GetFocusTextColor()); + textFieldComponent_->SetPlaceholderColor(searchTheme->GetPlaceholderColor()); + textFieldComponent_->SetFocusPlaceholderColor(searchTheme->GetFocusPlaceholderColor()); + textFieldComponent_->SetBlockRightShade(searchTheme->GetBlockRightShade()); + textStyle_ = textFieldComponent_->GetTextStyle(); + + std::function submitEvent; + searchChild_->SetSubmitEvent(submitEvent); + searchChild_->SetChild(textFieldComponent_); + searchChild_->SetTextEditController(textFieldComponent_->GetTextEditController()); + searchChild_->SetCloseIconSize(searchTheme->GetCloseIconSize()); + searchChild_->SetCloseIconHotZoneHorizontal(searchTheme->GetCloseIconHotZoneSize()); + searchChild_->SetHoverColor(textFieldTheme->GetHoverColor()); + searchChild_->SetPressColor(textFieldTheme->GetPressColor()); + SetHeight(searchTheme->GetHeight()); + isPaddingChanged_ = true; +} + +bool DOMSearch::SetSpecializedAttr(const std::pair& attr) +{ + static const LinearMapNode + searchAttrOperators[] = { + { DOM_SEARCH_HINT, + [](const std::string& val, SearchComponent& searchComponent, TextFieldComponent& textFieldComponent, + TextStyle& textStyle) { textFieldComponent.SetPlaceholder(val); } }, + { DOM_SEARCH_ICON, + [](const std::string& val, SearchComponent& searchComponent, TextFieldComponent& textFieldComponent, + TextStyle& textStyle) { + if (SystemProperties::GetDeviceType() == DeviceType::TV) { + return; + } + textFieldComponent.SetIconImage(val); + } }, + { DOM_SEARCH_BUTTON, + [](const std::string& val, SearchComponent& searchComponent, TextFieldComponent& textFieldComponent, + TextStyle& textStyle) { searchComponent.SetSearchText(val); } }, + { DOM_SEARCH_VALUE, + [](const std::string& val, SearchComponent& searchComponent, TextFieldComponent& textFieldComponent, + TextStyle& textStyle) { + textFieldComponent.SetValue(val); + textFieldComponent.SetResetToStart(false); + } }, + }; + auto operatorIter = BinarySearchFindIndex(searchAttrOperators, ArraySize(searchAttrOperators), attr.first.c_str()); + if (operatorIter != -1) { + searchAttrOperators[operatorIter].value(attr.second, *searchChild_, *textFieldComponent_, textStyle_); + return true; + } + return false; +} + +bool DOMSearch::SetSpecializedStyle(const std::pair& style) +{ + // static linear map must be sorted by key. + static const LinearMapNode searchStyleSize[] = { + { DOM_TEXT_ALLOW_SCALE, [](const std::string& val, + StyleParseHolder& holder) { holder.textStyle.SetAllowScale(StringToBool(val)); } }, + { DOM_BACKGROUND_COLOR, + [](const std::string& val, StyleParseHolder& holder) { + holder.textField->SetBgColor(holder.node.ParseColor(val)); + holder.textField->SetFocusBgColor(holder.node.ParseColor(val)); + } }, + { DOM_COLOR, [](const std::string& val, + StyleParseHolder& holder) { holder.textField->SetFocusTextColor(holder.node.ParseColor(val)); } }, + { DOM_TEXT_FONT_FAMILY, + [](const std::string& val, StyleParseHolder& holder) { + holder.textStyle.SetFontFamilies(holder.node.ParseFontFamilies(val)); + } }, + { DOM_TEXT_FONT_SIZE, + [](const std::string& val, StyleParseHolder& holder) { + holder.textStyle.SetFontSize(holder.node.ParseDimension(val)); + } }, + { DOM_TEXT_FONT_WEIGHT, + [](const std::string& val, StyleParseHolder& holder) { + holder.textStyle.SetFontWeight(ConvertStrToFontWeight(val)); + } }, + { DOM_PADDING, + [](const std::string& val, StyleParseHolder& holder) { + Edge padding; + if (Edge::FromString(val, padding)) { + holder.textField->GetDecoration()->SetPadding(padding); + holder.isPaddingChanged = true; + } + } }, + { DOM_PADDING_BOTTOM, + [](const std::string& val, StyleParseHolder& holder) { + auto padding = holder.textField->GetDecoration()->GetPadding(); + padding.SetBottom(holder.node.ParseDimension(val)); + holder.textField->GetDecoration()->SetPadding(padding); + holder.isPaddingChanged = true; + } }, + { DOM_PADDING_END, + [](const std::string& val, StyleParseHolder& holder) { + auto padding = holder.textField->GetDecoration()->GetPadding(); + (holder.search->GetTextDirection() == TextDirection::RTL) + ? padding.SetLeft(holder.node.ParseDimension(val)) + : padding.SetRight(holder.node.ParseDimension(val)); + holder.textField->GetDecoration()->SetPadding(padding); + holder.isPaddingChanged = true; + } }, + { DOM_PADDING_LEFT, + [](const std::string& val, StyleParseHolder& holder) { + auto padding = holder.textField->GetDecoration()->GetPadding(); + padding.SetLeft(holder.node.ParseDimension(val)); + holder.textField->GetDecoration()->SetPadding(padding); + holder.isPaddingChanged = true; + } }, + { DOM_PADDING_RIGHT, + [](const std::string& val, StyleParseHolder& holder) { + auto padding = holder.textField->GetDecoration()->GetPadding(); + padding.SetRight(holder.node.ParseDimension(val)); + holder.textField->GetDecoration()->SetPadding(padding); + holder.isPaddingChanged = true; + } }, + { DOM_PADDING_START, + [](const std::string& val, StyleParseHolder& holder) { + auto padding = holder.textField->GetDecoration()->GetPadding(); + (holder.search->GetTextDirection() == TextDirection::RTL) + ? padding.SetRight(holder.node.ParseDimension(val)) + : padding.SetLeft(holder.node.ParseDimension(val)); + holder.textField->GetDecoration()->SetPadding(padding); + holder.isPaddingChanged = true; + } }, + { DOM_PADDING_TOP, + [](const std::string& val, StyleParseHolder& holder) { + auto padding = holder.textField->GetDecoration()->GetPadding(); + padding.SetTop(holder.node.ParseDimension(val)); + holder.textField->GetDecoration()->SetPadding(padding); + holder.isPaddingChanged = true; + } }, + { DOM_INPUT_PLACEHOLDER_COLOR, + [](const std::string& val, StyleParseHolder& holder) { + holder.textField->SetPlaceholderColor(holder.node.ParseColor(val)); + } }, + }; + auto operatorIter = BinarySearchFindIndex(searchStyleSize, ArraySize(searchStyleSize), style.first.c_str()); + if (operatorIter != -1) { + StyleParseHolder holder = { + .node = *this, + .search = searchChild_, + .textField = textFieldComponent_, + .textStyle = textStyle_, + .isPaddingChanged = isPaddingChanged_ + }; + searchStyleSize[operatorIter].value(style.second, holder); + return true; + } + if (DOMTextFieldUtil::IsRadiusStyle(style.first)) { + hasBoxRadius_ = true; + } + return false; +} + +bool DOMSearch::AddSpecializedEvent(int32_t pageId, const std::string& event) +{ + if (event == DOM_CHANGE) { + changeEvent_ = EventMarker(GetNodeIdForEvent(), event, pageId); + searchChild_->SetChangeEventId(changeEvent_); + return true; + } + if (event == DOM_SUBMIT) { + submitEvent_ = EventMarker(GetNodeIdForEvent(), event, pageId); + searchChild_->SetSubmitEventId(submitEvent_); + return true; + } else if (event == DOM_INPUT_EVENT_OPTION_SELECT) { + EventMarker optionsClickEvent = EventMarker(GetNodeIdForEvent(), event, pageId); + textFieldComponent_->SetOnOptionsClick(optionsClickEvent); + return true; + } else if (event == DOM_INPUT_EVENT_TRANSLATE) { + EventMarker translateEvent = EventMarker(GetNodeIdForEvent(), event, pageId); + textFieldComponent_->SetOnTranslate(translateEvent); + return true; + } else if (event == DOM_INPUT_EVENT_SHARE) { + EventMarker shareEvent = EventMarker(GetNodeIdForEvent(), event, pageId); + textFieldComponent_->SetOnShare(shareEvent); + return true; + } else if (event == DOM_INPUT_EVENT_SEARCH) { + EventMarker searchEvent = EventMarker(GetNodeIdForEvent(), event, pageId); + textFieldComponent_->SetOnSearch(searchEvent); + return true; + } else { + return false; + } +} + +void DOMSearch::CallSpecializedMethod(const std::string& method, const std::string& args) +{ + auto textField = AceType::DynamicCast(textFieldComponent_); + if (!textField) { + return; + } + auto controller = textField->GetTextFieldController(); + if (!controller) { + return; + } + if (method == DOM_INPUT_METHOD_DELETE) { + controller->Delete(); + } +} + +void DOMSearch::PrepareSpecializedComponent() +{ + Border boxBorder; + // [boxComponent_] is created when [DomNode] is constructed so it won't be null + boxComponent_->SetMouseAnimationType(HoverAnimationType::OPACITY); + if (boxComponent_->GetBackDecoration()) { + boxBorder = boxComponent_->GetBackDecoration()->GetBorder(); + } + // [textFieldComponent_] is created when [DomSearch] is constructed so it won't be null + textFieldComponent_->SetTextStyle(textStyle_); + textFieldComponent_->SetInputOptions(inputOptions_); + DOMTextFieldUtil::UpdateDecorationStyle(boxComponent_, textFieldComponent_, boxBorder, hasBoxRadius_); + if (GreatOrEqual(boxComponent_->GetHeightDimension().Value(), 0.0)) { + textFieldComponent_->SetHeight(boxComponent_->GetHeightDimension()); + } + if (isPaddingChanged_) { + auto padding = textFieldComponent_->GetDecoration()->GetPadding(); + if (searchChild_->GetTextDirection() == TextDirection::RTL) { + padding.SetLeft(padding.Left() + searchChild_->GetCloseIconHotZoneHorizontal()); + } else { + padding.SetRight(padding.Right() + searchChild_->GetCloseIconHotZoneHorizontal()); + } + textFieldComponent_->GetDecoration()->SetPadding(padding); + searchChild_->SetDecoration(textFieldComponent_->GetDecoration()); + isPaddingChanged_ = false; + } +} + +void DOMSearch::OnRequestFocus(bool shouldFocus) +{ + if (!textFieldComponent_) { + return; + } + auto textFieldController = textFieldComponent_->GetTextFieldController(); + if (!textFieldController) { + return; + } + textFieldController->Focus(shouldFocus); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_search.h b/frameworks/bridge/common/dom/dom_search.h new file mode 100644 index 00000000..20cda10a --- /dev/null +++ b/frameworks/bridge/common/dom/dom_search.h @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_SEARCH_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_SEARCH_H + +#include "core/components/search/search_component.h" +#include "core/components/text_field/text_field_component.h" +#include "frameworks/bridge/common/dom/dom_input.h" +#include "frameworks/bridge/common/dom/dom_node.h" + +namespace OHOS::Ace::Framework { + +class DOMSearch final : public DOMNode { + DECLARE_ACE_TYPE(DOMSearch, DOMNode); + +public: + DOMSearch(NodeId nodeId, const std::string& nodeName); + ~DOMSearch() override = default; + + void InitializeStyle() override; + + RefPtr GetSpecializedComponent() override + { + return searchChild_; + } + void OnRequestFocus(bool shouldFocus) override; + + void SetInputOptions(const std::vector& inputOptions) + { + inputOptions_ = inputOptions; + } + +protected: + bool SetSpecializedAttr(const std::pair& attr) override; + bool SetSpecializedStyle(const std::pair& style) override; + bool AddSpecializedEvent(int32_t pageId, const std::string& event) override; + void CallSpecializedMethod(const std::string& method, const std::string& args) override; + void PrepareSpecializedComponent() override; + void ResetInitializedStyle() override; + +private: + bool hasBoxRadius_ = false; + TextStyle textStyle_; + EventMarker changeEvent_; + EventMarker submitEvent_; + RefPtr searchChild_; + RefPtr textFieldComponent_; + bool isPaddingChanged_ = true; + std::vector inputOptions_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_SEARCH_H diff --git a/frameworks/bridge/common/dom/dom_select.cpp b/frameworks/bridge/common/dom/dom_select.cpp new file mode 100644 index 00000000..531ac591 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_select.cpp @@ -0,0 +1,212 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_select.h" + +#include "base/utils/linear_map.h" +#include "base/utils/utils.h" +#include "frameworks/bridge/common/dom/dom_option.h" +#include "frameworks/bridge/common/dom/dom_reflect_map.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { + +bool DOMSelect::IsParentNavigation() const +{ + auto parent = GetParentNode(); + if (!parent) { + LOGE("parent of dom select is null."); + return false; + } + return parent->GetTag() == DOM_NODE_TAG_NAVIGATION_BAR; +} + +DOMSelect::DOMSelect(NodeId nodeId, const std::string& nodeName) : DOMNode(nodeId, nodeName) +{ + selectComponent_ = AceType::MakeRefPtr(); + tipText_ = AceType::MakeRefPtr(""); + selectComponent_->SetTipText(tipText_); + selectComponent_->SetTextDirection((IsRightToLeft() ? TextDirection::RTL : TextDirection::LTR)); +#if defined(WINDOWS_PLATFORM) || defined(MAC_PLATFORM) + selectComponent_->SetNodeId(nodeId); +#endif +} + +void DOMSelect::ResetInitializedStyle() +{ + InitializeStyle(); +} + +void DOMSelect::InitializeStyle() +{ + selectComponent_->InitTheme(GetThemeManager()); + theme_ = GetTheme(); + if (theme_ && selectComponent_) { + selectComponent_->SetClickedColor(theme_->GetClickedColor()); + selectComponent_->SetDisabledColor(theme_->GetDisabledColor()); + selectComponent_->SetSelectedColor(theme_->GetSelectedColor()); + selectComponent_->SetOptionSize(theme_->GetOptionSize()); + selectComponent_->SetRRectSize(theme_->GetRRectSize()); + selectComponent_->SetPopupBorderWidth(theme_->GetPopupBorderWidth()); + selectComponent_->SetPopupShadowWidth(theme_->GetPopupShadowWidth()); + selectComponent_->SetFontFamily(theme_->GetFontFamily()); + selectComponent_->SetFontSize(theme_->GetFontSize()); + selectComponent_->SetAllowScale(theme_->IsAllowScale()); + selectComponent_->SetTextColor(theme_->GetFontColor()); + selectComponent_->SetFontWeight(FontWeight::W500); + selectComponent_->SetTextDecoration(theme_->GetTextDecoration()); + selectComponent_->SetBackgroundColor(Color::TRANSPARENT); + } +} + +void DOMSelect::UpdateBoxSize(const Dimension& width, const Dimension& height) +{ + if (!selectComponent_) { + return; + } + + if (width.Unit() != DimensionUnit::PERCENT && height.Unit() != DimensionUnit::PERCENT) { + selectComponent_->SetInnerSize(width, height); + return; + } + + if (width.Unit() == DimensionUnit::PERCENT && height.Unit() == DimensionUnit::PERCENT) { + DOMNode::UpdateBoxSize(width, height); + selectComponent_->SetInnerSize(100.0_pct, 100.0_pct); + return; + } + + if (width.Unit() == DimensionUnit::PERCENT) { + DOMNode::UpdateBoxSize(width, height); + selectComponent_->SetInnerSize(100.0_pct, height); + return; + } + + DOMNode::UpdateBoxSize(width, height); + selectComponent_->SetInnerSize(100.0_pct, 100.0_pct); +} + +void DOMSelect::UpdateBoxPadding(const Edge& padding) +{ + if (!selectComponent_) { + return; + } + + selectComponent_->SetInnerPadding(padding); +} + +void DOMSelect::UpdateBoxBorder(const Border& border) +{ + if (!selectComponent_) { + return; + } + + selectComponent_->SetInnerBorder(border); +} + +bool DOMSelect::AddSpecializedEvent(int32_t pageId, const std::string& event) +{ + if (event == DOM_CHANGE) { + onChanged_ = EventMarker(GetNodeIdForEvent(), event, pageId); + selectComponent_->SetOnChanged(onChanged_); + return true; + } + return false; +} + +bool DOMSelect::SetSpecializedStyle(const std::pair& style) +{ + if (IsParentNavigation()) { + // not support style setting for navigation. + return true; + } + + static const LinearMapNode + selectStyleOperators[] = { + { DOM_TEXT_ALLOW_SCALE, [](const std::string& val, const DOMSelect& node, + SelectComponent& select) { select.SetAllowScale(StringToBool(val)); } }, + { DOM_BACKGROUND_COLOR, [](const std::string& val, const DOMSelect& node, + SelectComponent& select) { select.SetBackgroundColor(node.ParseColor(val)); } }, + { DOM_TEXT_COLOR, [](const std::string& val, const DOMSelect& node, + SelectComponent& select) { select.SetTextColor(node.ParseColor(val)); } }, + { DOM_TEXT_FONT_FAMILY, [](const std::string& val, const DOMSelect& node, + SelectComponent& select) { select.SetFontFamily(val); } }, + { DOM_TEXT_FONT_SIZE, + [](const std::string& val, const DOMSelect& node, SelectComponent& select) { + select.SetFontSize(node.ParseDimension(val)); + select.SetIsFontSetFlag(true); + } }, + { DOM_TEXT_FONT_WEIGHT, [](const std::string& val, const DOMSelect& node, + SelectComponent& select) { select.SetFontWeight(ConvertStrToFontWeight(val)); } }, + { DOM_TEXT_DECORATION, + [](const std::string& val, const DOMSelect& node, SelectComponent& select) { + select.SetTextDecoration(ConvertStrToTextDecoration(val)); + } }, + }; + auto operatorIter = + BinarySearchFindIndex(selectStyleOperators, ArraySize(selectStyleOperators), style.first.c_str()); + if (operatorIter != -1) { + selectStyleOperators[operatorIter].value(style.second, *this, *selectComponent_); + return true; + } + return false; +} + +void DOMSelect::OnChildNodeAdded(const RefPtr& child, int32_t slot) +{ + if (!child || child->GetTag() != DOM_NODE_TAG_OPTION) { + LOGE("DOMSelect child is not correct"); + return; + } + + auto option = AceType::DynamicCast(child); + if (option) { + auto optionComponent = AceType::DynamicCast(option->GetSpecializedComponent()); + if (!optionComponent) { + return; + } + if (!selectComponent_->GetSelectOptionCount() || optionComponent->GetSelected()) { + auto text = optionComponent->GetText(); + if (text) { + tipText_->SetData(text->GetData()); + } else { + LOGE("text of option component is null."); + tipText_->SetData(""); + } + } + if (slot < 0) { + selectComponent_->AppendSelectOption(optionComponent); + } else { + selectComponent_->InsertSelectOption(optionComponent, static_cast(slot)); + } + LOGD("DOMSelect %{public}s, appendChild %{public}s", GetTag().c_str(), child->GetTag().c_str()); + } +} + +void DOMSelect::OnChildNodeRemoved(const RefPtr& child) +{ + if (!child || !selectComponent_) { + return; + } + + auto option = AceType::DynamicCast(child->GetSpecializedComponent()); + if (!option) { + return; + } + + selectComponent_->RemoveSelectOption(option); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_select.h b/frameworks/bridge/common/dom/dom_select.h new file mode 100644 index 00000000..4ce7fc50 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_select.h @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_SELECT_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_SELECT_H + +#include "core/components/select/select_component.h" +#include "core/components/select/select_theme.h" +#include "core/components/theme/theme_manager.h" +#include "frameworks/bridge/common/dom/dom_node.h" +#include "frameworks/bridge/common/dom/dom_type.h" + +namespace OHOS::Ace::Framework { + +class DOMSelect final : public DOMNode { + DECLARE_ACE_TYPE(DOMSelect, DOMNode); + +public: + DOMSelect(NodeId nodeId, const std::string& nodeName); + ~DOMSelect() override = default; + + RefPtr GetSpecializedComponent() override + { + return selectComponent_; + } + + void InitializeStyle() override; + + void ResetInitializedStyle() override; + +protected: + bool SetSpecializedStyle(const std::pair& style) override; + bool AddSpecializedEvent(int32_t pageId, const std::string& event) override; + void OnChildNodeAdded(const RefPtr& child, int32_t slot) override; + void OnChildNodeRemoved(const RefPtr& child) override; + + bool SetSpecializedAttr(const std::pair& attr) override + { + if (attr.first == DOM_DISABLED) { + if (selectComponent_) { + selectComponent_->SetDisabled((attr.second == "true")); + } + return true; + } + return false; + } + + void OnSetStyleFinished() override + { + if (!selectComponent_) { + return; + } + selectComponent_->FlushRefresh(); + } + + void UpdateBoxSize(const Dimension& width, const Dimension& height) override; + void UpdateBoxPadding(const Edge& padding) override; + void UpdateBoxBorder(const Border& border) override; + +private: + bool IsParentNavigation() const; + + EventMarker onChanged_; + RefPtr theme_; + RefPtr selectComponent_; + RefPtr tipText_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_SELECT_H diff --git a/frameworks/bridge/common/dom/dom_slider.cpp b/frameworks/bridge/common/dom/dom_slider.cpp new file mode 100644 index 00000000..c0cc6a82 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_slider.cpp @@ -0,0 +1,189 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_slider.h" + +#include "base/utils/linear_map.h" +#include "base/utils/utils.h" +#include "core/components/common/properties/color.h" +#include "core/components/slider/slider_theme.h" +#include "core/components/theme/theme_manager.h" +#include "frameworks/bridge/common/dom/dom_type.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { + +DOMSlider::DOMSlider(NodeId nodeId, const std::string& nodeName) : DOMNode(nodeId, nodeName) +{ + // init component and default theme + sliderChild_ = AceType::MakeRefPtr(val_, step_, min_, max_); + watchSliderChild_ = AceType::MakeRefPtr(); + trackChild_ = sliderChild_->GetTrack(); + blockChild_ = sliderChild_->GetBlock(); + paddingChild_ = AceType::MakeRefPtr(); + if (SystemProperties::GetDeviceType() == DeviceType::WATCH) { + paddingChild_->SetChild(watchSliderChild_); + } else { + paddingChild_->SetChild(sliderChild_); + } +} + +void DOMSlider::InitializeStyle() +{ + RefPtr theme = GetTheme(); + if (!theme) { + return; + } + blockColor_ = theme->GetBlockColor(); + color_ = theme->GetTrackBgColor(); + selectColor_ = theme->GetTrackSelectedColor(); + sliderChild_->InitStyle(theme); +} + +void DOMSlider::CallSpecializedMethod(const std::string& method, const std::string& args) +{ + if (method == DOM_ROTATION) { + LOGD("Rotation focus slider"); + auto controller = (SystemProperties::GetDeviceType() == DeviceType::WATCH) + ? watchSliderChild_->GetRotationController() + : sliderChild_->GetRotationController(); + if (controller) { + LOGD("Rotation focus request"); + controller->RequestRotation(true); + } + } +} + +void DOMSlider::ResetInitializedStyle() +{ + sliderChild_->InitStyle(GetTheme()); +} + +bool DOMSlider::SetSpecializedAttr(const std::pair& attr) +{ + // static linear map must be sorted by key. + static const LinearMapNode sliderAttrsOperators[] = { + { DOM_MAX, [](const std::string& val, DOMSlider& slider) { slider.max_ = StringToDouble(val); } }, + { DOM_MAX_ICON, [](const std::string& val, DOMSlider& slider) { slider.maxIconUrl_ = val; } }, + { DOM_MIN, [](const std::string& val, DOMSlider& slider) { slider.min_ = StringToDouble(val); } }, + { DOM_MIN_ICON, [](const std::string& val, DOMSlider& slider) { slider.minIconUrl_ = val; } }, + { DOM_SLIDER_MODE, [](const std::string& val, DOMSlider& slider) { + if (val == DOM_INSET) { + slider.mode_ = SliderMode::INSET; + } else { + slider.mode_ = SliderMode::OUTSET; + } + } }, + { DOM_SHOW_STEPS, [](const std::string& val, DOMSlider& slider) { slider.showSteps_ = StringToBool(val); } }, + { DOM_SHOW_TIPS, [](const std::string& val, DOMSlider& slider) { slider.showTips_ = StringToBool(val); } }, + { DOM_STEP, + [](const std::string& val, DOMSlider& slider) { + slider.step_ = StringToDouble(val) > 0 ? StringToDouble(val) : slider.step_; + } }, + { DOM_TYPE, + [](const std::string& val, DOMSlider& slider) { + if (val == DOM_CONTINUOUS) { + slider.isContinuous_ = true; + } else if (val == DOM_INTERMITTENT) { + slider.isContinuous_ = false; + } else { + slider.isContinuous_ = true; + } + } }, + { DOM_VALUE, [](const std::string& val, DOMSlider& slider) { + slider.val_ = StringToDouble(val); + slider.sliderChild_->SetCurrentValue(StringToDouble(val)); + } }, + }; + auto operatorIter = + BinarySearchFindIndex(sliderAttrsOperators, ArraySize(sliderAttrsOperators), attr.first.c_str()); + if (operatorIter != -1) { + sliderAttrsOperators[operatorIter].value(attr.second, *this); + return true; + } else { + return false; + } +} + +bool DOMSlider::SetSpecializedStyle(const std::pair& style) +{ + static const LinearMapNode sliderStylesOperators[] = { + { DOM_BLOCK_COLOR, + [](const std::string& val, DOMSlider& slider) { slider.blockColor_ = slider.ParseColor(val); } }, + { DOM_COLOR, [](const std::string& val, DOMSlider& slider) { slider.color_ = slider.ParseColor(val); } }, + { DOM_PADDING_LEFT, + [](const std::string& val, DOMSlider& slider) { slider.paddingLeft_ = slider.ParseDimension(val); } }, + { DOM_PADDING_RIGHT, + [](const std::string& val, DOMSlider& slider) { slider.paddingRight_ = slider.ParseDimension(val); } }, + { DOM_SELECTED_COLOR, + [](const std::string& val, DOMSlider& slider) { slider.selectColor_ = slider.ParseColor(val); } }, + }; + auto operatorIter = + BinarySearchFindIndex(sliderStylesOperators, ArraySize(sliderStylesOperators), style.first.c_str()); + if (operatorIter != -1) { + sliderStylesOperators[operatorIter].value(style.second, *this); + return true; + } + return false; +} + +bool DOMSlider::AddSpecializedEvent(int32_t pageId, const std::string& event) +{ + LOGD("DOMSlider AddEvent"); + if (event == DOM_CHANGE) { + onMoveEndEventId_ = EventMarker(GetNodeIdForEvent(), event, pageId); + sliderChild_->SetOnMovingEventId(onMoveEndEventId_); + watchSliderChild_->SetOnMoveEndEventId(onMoveEndEventId_); + return true; + } + return false; +} + +void DOMSlider::PrepareSpecializedComponent() +{ + auto min = min_; + min_ = (max_ < min) ? max_ : min; + max_ = (max_ < min) ? min : max_; + sliderChild_->SetMaxValue(max_); + sliderChild_->SetMinValue(min_); + sliderChild_->SetDisable(GetDisable()); + if (val_ < min_ || val_ > max_) { + val_ = (val_ < min_) ? min_ : max_; + } + if (LessOrEqual(step_, 0.0) || step_ > max_ - min_) { + step_ = max_ - min_; + } + watchSliderChild_->SetMinValue(min_); + watchSliderChild_->SetMaxValue(max_); + watchSliderChild_->SetValue(val_); + watchSliderChild_->SetMaxIconUrl(maxIconUrl_); + watchSliderChild_->SetMinIconUrl(minIconUrl_); + watchSliderChild_->SetBackgroundColor(color_); + watchSliderChild_->SetSelectColor(selectColor_); + watchSliderChild_->SetContinuous(isContinuous_); + + sliderChild_->SetShowSteps(showSteps_); + sliderChild_->SetShowTips(showTips_); + sliderChild_->SetSliderMode(mode_); + sliderChild_->SetStepValue(step_); + sliderChild_->SetTextDirection(IsRightToLeft() ? TextDirection::RTL : TextDirection::LTR); + paddingChild_->SetPadding(Edge(paddingLeft_, 0.0_vp, paddingRight_, 0.0_vp)); + trackChild_->SetBackgroundColor(color_); + trackChild_->SetSelectColor(selectColor_); + blockChild_->SetBlockColor(blockColor_); + sliderChild_->InitStyle(GetTheme()); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_slider.h b/frameworks/bridge/common/dom/dom_slider.h new file mode 100644 index 00000000..7b272fc7 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_slider.h @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_SLIDER_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_SLIDER_H + +#include "core/components/padding/padding_component.h" +#include "core/components/slider/slider_component.h" +#include "core/components/track/track_component.h" +#include "core/components/watch_slider/watch_slider_component.h" +#include "frameworks/bridge/common/dom/dom_node.h" + +namespace OHOS::Ace::Framework { + +class DOMSlider final : public DOMNode { + DECLARE_ACE_TYPE(DOMSlider, DOMNode); + +public: + DOMSlider(NodeId nodeId, const std::string& nodeName); + ~DOMSlider() override = default; + + void InitializeStyle() override; + + void CallSpecializedMethod(const std::string& method, const std::string& args) override; + + RefPtr GetSpecializedComponent() override + { + return paddingChild_; + } + +protected: + bool SetSpecializedAttr(const std::pair& attr) override; + bool SetSpecializedStyle(const std::pair& style) override; + bool AddSpecializedEvent(int32_t pageId, const std::string& event) override; + void PrepareSpecializedComponent() override; + void ResetInitializedStyle() override; + +private: + + RefPtr trackChild_; + RefPtr blockChild_; + RefPtr sliderChild_; + RefPtr watchSliderChild_; + RefPtr paddingChild_; + + double min_ = 0.0; + double max_ = 100.0; + double step_ = 1.0; + double val_ = 0.0; + Dimension paddingLeft_ = 32.0_vp; + Dimension paddingRight_ = 32.0_vp; + Color color_; + Color selectColor_; + Color blockColor_; + EventMarker onMoveEndEventId_; + + std::string minIconUrl_; + std::string maxIconUrl_; + SliderMode mode_ = SliderMode::OUTSET; + bool isContinuous_ = true; + bool showSteps_ = false; + bool showTips_ = false; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_SLIDER_H diff --git a/frameworks/bridge/common/dom/dom_span.cpp b/frameworks/bridge/common/dom/dom_span.cpp new file mode 100644 index 00000000..1ff6ee70 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_span.cpp @@ -0,0 +1,166 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_span.h" + +#include "core/common/ace_application_info.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { + +DOMSpan::DOMSpan(NodeId nodeId, const std::string& nodeName) : DOMNode(nodeId, nodeName) +{ + textSpanChild_ = AceType::MakeRefPtr(""); + // span has no box component. + boxComponent_.Reset(); +} + +bool DOMSpan::SetSpecializedAttr(const std::pair& attr) +{ + if (attr.first == DOM_VALUE) { + textSpanChild_->SetSpanData(attr.second); + return true; + } + if (attr.first == DOM_SHOW) { + textSpanChild_->SetIsShow(StringToBool(attr.second)); + return true; + } + return false; +} + +bool DOMSpan::SetSpecializedStyle(const std::pair& style) +{ + static const LinearMapNode spanStyleOperators[] = { + { DOM_TEXT_ALLOW_SCALE, + [](const std::string& val, DOMSpan& span) { + span.spanStyle_.SetAllowScale(StringToBool(val)); + span.isSetAllowScale_ = true; + } }, + { DOM_TEXT_COLOR, + [](const std::string& val, DOMSpan& span) { + span.spanStyle_.SetTextColor(span.ParseColor(val)); + span.isSetFontColor_ = true; + } }, + { DOM_TEXT_FONT_FAMILY, + [](const std::string& val, DOMSpan& span) { + span.spanStyle_.SetFontFamilies(span.ParseFontFamilies(val)); + span.isSetFontFamily_ = true; + } }, + { DOM_TEXT_FONT_SIZE, + [](const std::string& val, DOMSpan& span) { + span.spanStyle_.SetFontSize(span.ParseDimension(val)); + span.isSetFontSize_ = true; + } }, + { DOM_TEXT_FONT_STYLE, + [](const std::string& val, DOMSpan& span) { + span.spanStyle_.SetFontStyle(ConvertStrToFontStyle(val)); + span.isSetFontStyle_ = true; + } }, + { DOM_TEXT_FONT_WEIGHT, + [](const std::string& val, DOMSpan& span) { + span.spanStyle_.SetFontWeight(ConvertStrToFontWeight(val)); + span.isSetFontWeight_ = true; + } }, + { DOM_TEXT_DECORATION, + [](const std::string& val, DOMSpan& span) { + span.spanStyle_.SetTextDecoration(ConvertStrToTextDecoration(val)); + span.isSetTextDecoration_ = true; + } }, + }; + auto spanStyleIter = BinarySearchFindIndex(spanStyleOperators, ArraySize(spanStyleOperators), style.first.c_str()); + if (spanStyleIter != -1) { + spanStyleOperators[spanStyleIter].value(style.second, *this); + } + + // span has no box component, set true to prevent setting style to box (empty object). + return true; +} + +void DOMSpan::CheckAndSetCurrentSpanStyle( + const RefPtr& domSpan, TextStyle& currentStyle, const TextStyle& parentStyle) +{ + if (!domSpan->HasSetFontColor()) { + currentStyle.SetTextColor(parentStyle.GetTextColor()); + } + if (!domSpan->HasSetFontSize()) { + currentStyle.SetFontSize(parentStyle.GetFontSize()); + } + if (!domSpan->HasSetFontStyle()) { + currentStyle.SetFontStyle(parentStyle.GetFontStyle()); + } + if (!domSpan->HasSetFontWeight()) { + currentStyle.SetFontWeight(parentStyle.GetFontWeight()); + } + if (!domSpan->HasSetTextDecoration()) { + currentStyle.SetTextDecoration(parentStyle.GetTextDecoration()); + } + if (!domSpan->HasSetFontFamily()) { + currentStyle.SetFontFamilies(parentStyle.GetFontFamilies()); + } + if (!domSpan->HasSetAllowScale()) { + currentStyle.SetAllowScale(parentStyle.IsAllowScale()); + } + currentStyle.SetLetterSpacing(parentStyle.GetLetterSpacing()); + currentStyle.SetLineHeight(parentStyle.GetLineHeight(), parentStyle.HasHeightOverride()); +} + +void DOMSpan::OnChildNodeAdded(const RefPtr& child, int32_t slot) +{ + if (!child) { + return; + } + + if (child->GetTag() == DOM_NODE_TAG_SPAN) { + // Get current span's parent (also span) styles, if no user setting styles + // on this span, use its parent styles. + TextStyle parentSpanStyle = textSpanChild_->GetTextStyle(); + auto spanComponent = AceType::DynamicCast(child->GetSpecializedComponent()); + if (!spanComponent) { + LOGE("DOMSpan: span is null"); + return; + } + + // Get current span's styles to compare with its parent span. + TextStyle currentSpanStyle = spanComponent->GetTextStyle(); + auto domSpan = AceType::DynamicCast(child); + CheckAndSetCurrentSpanStyle(domSpan, currentSpanStyle, parentSpanStyle); + domSpan->SetTextStyle(currentSpanStyle); + spanComponent->SetTextStyle(currentSpanStyle); + textSpanChild_->InsertChild(slot, child->GetRootComponent()); + } +} + +void DOMSpan::OnChildNodeRemoved(const RefPtr& child) +{ + if (!child) { + return; + } + + textSpanChild_->RemoveChild(child->GetRootComponent()); +} + +void DOMSpan::PrepareSpecializedComponent() +{ + bool isCard = AceApplicationInfo::GetInstance().GetIsCardType(); + if (isCard) { + spanStyle_.SetAllowScale(false); + if (spanStyle_.GetFontSize().Unit() == DimensionUnit::FP) { + spanStyle_.SetAllowScale(true); + } + } + textSpanChild_->SetTextStyle(spanStyle_); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_span.h b/frameworks/bridge/common/dom/dom_span.h new file mode 100644 index 00000000..b7d03a7c --- /dev/null +++ b/frameworks/bridge/common/dom/dom_span.h @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_SPAN_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_SPAN_H + +#include "core/components/text_span/text_span_component.h" +#include "frameworks/bridge/common/dom/dom_node.h" +#include "frameworks/bridge/common/dom/dom_type.h" + +namespace OHOS::Ace::Framework { + +class DOMSpan final : public DOMNode { + DECLARE_ACE_TYPE(DOMSpan, DOMNode); + +public: + DOMSpan(NodeId nodeId, const std::string& nodeName); + ~DOMSpan() override = default; + + bool HasSetFontStyle() const + { + return isSetFontStyle_; + } + + bool HasSetFontColor() const + { + return isSetFontColor_; + } + + bool HasSetFontWeight() const + { + return isSetFontWeight_; + } + + bool HasSetFontSize() const + { + return isSetFontSize_; + } + + bool HasSetFontFamily() const + { + return isSetFontFamily_; + } + + bool HasSetTextDecoration() const + { + return isSetTextDecoration_; + } + + RefPtr GetSpecializedComponent() override + { + return textSpanChild_; + } + + bool HasSetAllowScale() const + { + return isSetAllowScale_; + } + + void SetTextStyle(const TextStyle& spanStyle) + { + spanStyle_ = spanStyle; + } + +protected: + bool SetSpecializedAttr(const std::pair& attr) override; + bool SetSpecializedStyle(const std::pair& style) override; + void PrepareSpecializedComponent() override; + + void OnChildNodeAdded(const RefPtr& child, int32_t slot) override; + void OnChildNodeRemoved(const RefPtr& child) override; + +private: + void CheckAndSetCurrentSpanStyle(const RefPtr& domSpan, TextStyle& currentStyle, + const TextStyle& parentStyle); + + TextStyle spanStyle_; + bool isSetFontStyle_ = false; + bool isSetFontColor_ = false; + bool isSetFontWeight_ = false; + bool isSetFontSize_ = false; + bool isSetFontFamily_ = false; + bool isSetTextDecoration_ = false; + bool isSetAllowScale_ = false; + std::list> children_; + RefPtr textSpanChild_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_SPAN_H diff --git a/frameworks/bridge/common/dom/dom_stack.cpp b/frameworks/bridge/common/dom/dom_stack.cpp new file mode 100644 index 00000000..69ed9a3b --- /dev/null +++ b/frameworks/bridge/common/dom/dom_stack.cpp @@ -0,0 +1,131 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_stack.h" + +#include "base/utils/linear_map.h" +#include "base/utils/utils.h" +#include "core/common/ace_application_info.h" +#include "core/components/common/layout/constants.h" +#include "core/components/common/properties/color.h" +#include "core/components/scroll/scroll_bar_theme.h" +#include "core/components/scroll/scroll_fade_effect.h" +#include "core/components/scroll/scroll_spring_effect.h" +#include "core/components/theme/theme_manager.h" + +namespace OHOS::Ace::Framework { + +DOMStack::DOMStack(NodeId nodeId, const std::string& nodeName) : DOMNode(nodeId, nodeName) +{ + stackChild_ = AceType::MakeRefPtr( + alignment_, stackFit_, Overflow::OBSERVABLE, std::list>()); +} + +void DOMStack::OnChildNodeAdded(const RefPtr& child, int32_t slot) +{ + ACE_DCHECK(child); + LOGD("DOMStack Add Child"); + // If child has absolute position, the stack should be as large as the box component, so that the position is + // correct in front-end. + if (child->HasPositionStyle() && stackChild_->GetMainStackSize() != MainStackSize::MAX) { + stackChild_->SetMainStackSize(MainStackSize::MATCH_CHILDREN); + } + stackChild_->InsertChild(slot, child->GetRootComponent()); +} + +void DOMStack::OnChildNodeRemoved(const RefPtr& child) +{ + ACE_DCHECK(child); + LOGD("DOMStack remove child"); + stackChild_->RemoveChild(child->GetRootComponent()); +} + +bool DOMStack::GetAxisOffset(const std::pair& style) +{ + static const LinearMapNode stackStyleOperators[] = { + { DOM_ALIGN_ITEMS, + [](const std::string& val, DOMStack& stack) { + if (val == DOM_ALIGN_ITEMS_END) { + stack.crossAxisAlign_ = END; + } else if (val == DOM_ALIGN_ITEMS_CENTER) { + stack.crossAxisAlign_ = CENTER; + } else { + stack.crossAxisAlign_ = START; + } + } }, + { DOM_FLEX_DIRECTION, + [](const std::string& val, DOMStack& stack) { + if (val == DOM_FLEX_COLUMN) { + stack.direction_ = FlexDirection::COLUMN; + } else { + stack.direction_ = FlexDirection::ROW; + } + } }, + { DOM_JUSTIFY_CONTENT, + [](const std::string& val, DOMStack& stack) { + if (val == DOM_JUSTIFY_CONTENT_END) { + stack.mainAxisAlign_ = END; + } else if (val == DOM_JUSTIFY_CONTENT_CENTER || val == DOM_JUSTIFY_CONTENT_AROUND) { + stack.mainAxisAlign_ = CENTER; + } else { + stack.mainAxisAlign_ = START; + } + } }, + }; + auto operatorIter = BinarySearchFindIndex(stackStyleOperators, ArraySize(stackStyleOperators), style.first.c_str()); + if (operatorIter != -1) { + stackStyleOperators[operatorIter].value(style.second, *this); + return true; + } + return false; +} + +bool DOMStack::SetSpecializedStyle(const std::pair& style) +{ + return GetAxisOffset(style); +} + +void DOMStack::PrepareSpecializedComponent() +{ + if (FlexDirection::COLUMN == direction_) { + alignment_ = AlignArray[mainAxisAlign_][crossAxisAlign_]; + } else { + alignment_ = AlignArray[crossAxisAlign_][mainAxisAlign_]; + } + LOGD("DOMStack Vertical:%{private}lf ,Horizontal:%{private}lf", alignment_.GetVertical(), + alignment_.GetHorizontal()); + if (boxComponent_->GetWidthDimension().IsValid() && boxComponent_->GetHeightDimension().IsValid()) { + stackChild_->SetMainStackSize(MainStackSize::MAX); + } + stackChild_->SetAlignment(alignment_); + SetAlignment(alignment_); +} + +void DOMStack::CompositeComponents() +{ + DOMNode::CompositeComponents(); + + scroll_.Reset(); + bool isRootScroll = isRootNode_ && (!hasOverflowStyle_ || overflow_ == Overflow::SCROLL); + bool isCard = AceApplicationInfo::GetInstance().GetIsCardType(); + if (isRootScroll && !isCard) { + auto rootChild = rootComponent_->GetChild(); + scroll_ = AceType::MakeRefPtr(rootChild); + scroll_->InitScrollBar(GetTheme(), scrollBarColor_, scrollBarWidth_, edgeEffect_); + rootComponent_->SetChild(scroll_); + } +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_stack.h b/frameworks/bridge/common/dom/dom_stack.h new file mode 100644 index 00000000..7f8e8384 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_stack.h @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_STACK_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_STACK_H + +#include "base/utils/macros.h" +#include "core/components/common/properties/alignment.h" +#include "core/components/stack/stack_component.h" +#include "frameworks/bridge/common/dom/dom_node.h" +#include "frameworks/bridge/common/dom/dom_type.h" + +namespace OHOS::Ace::Framework { + +class DOMStack final : public DOMNode { + DECLARE_ACE_TYPE(DOMStack, DOMNode); + +public: + DOMStack(NodeId nodeId, const std::string& nodeName); + ~DOMStack() override = default; + + RefPtr GetSpecializedComponent() override + { + return stackChild_; + } + + const RefPtr& GetScrollComponent() const override + { + return scroll_; + } + +protected: + bool SetSpecializedStyle(const std::pair& style) override; + void PrepareSpecializedComponent() override; + void OnChildNodeAdded(const RefPtr& child, int32_t slot) override; + void OnChildNodeRemoved(const RefPtr& child) override; + void CompositeComponents() override; + +private: + bool GetAxisOffset(const std::pair& style); + void InitScrollBar(); + + enum AxisAlign { + START = 0, + CENTER = 1, + END = 2, + }; + + // Nine patched table + const Alignment AlignArray[3][3] { { Alignment::TOP_LEFT, Alignment::TOP_CENTER, Alignment::TOP_RIGHT }, + { Alignment::CENTER_LEFT, Alignment::CENTER, Alignment::CENTER_RIGHT }, + { Alignment::BOTTOM_LEFT, Alignment::BOTTOM_CENTER, Alignment::BOTTOM_RIGHT } }; + + uint8_t mainAxisAlign_ { 0 }; + uint8_t crossAxisAlign_ { 0 }; + FlexDirection direction_ { FlexDirection::ROW }; + + RefPtr scroll_; + RefPtr stackChild_; + StackFit stackFit_ { StackFit::KEEP }; + Alignment alignment_ { Alignment::CENTER }; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_STACK_H diff --git a/frameworks/bridge/common/dom/dom_stepper.cpp b/frameworks/bridge/common/dom/dom_stepper.cpp new file mode 100644 index 00000000..88424cbc --- /dev/null +++ b/frameworks/bridge/common/dom/dom_stepper.cpp @@ -0,0 +1,201 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_stepper.h" + +#include "base/utils/linear_map.h" +#include "base/utils/utils.h" +#include "core/components/common/properties/color.h" +#include "core/components/stepper/stepper_theme.h" +#include "core/components/theme/theme_manager.h" +#include "frameworks/bridge/common/dom/dom_stepper_item.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +namespace { + +constexpr int32_t DEFAULT_NODE_INDEX = -1; +constexpr int32_t METHOD_TO_ARGS_SIZE = 1; + +} // namespace + +DOMStepper::DOMStepper(NodeId nodeId, const std::string& nodeName) : DOMNode(nodeId, nodeName) +{ + stepperComponent_ = AceType::MakeRefPtr(std::list>()); + if (IsRightToLeft()) { + stepperComponent_->SetTextDirection(TextDirection::RTL); + } +} + +bool DOMStepper::SetSpecializedAttr(const std::pair& attr) +{ + // static linear map must be sorted by key. + static const LinearMapNode attrsOperators[] = { + { DOM_STEPPER_INDEX, + [](const std::string& val, DOMStepper& stepper) { + stepper.stepperComponent_->SetIndex(StringUtils::StringToInt(val)); + } }, + }; + auto iter = BinarySearchFindIndex(attrsOperators, ArraySize(attrsOperators), attr.first.c_str()); + if (iter != -1) { + attrsOperators[iter].value(attr.second, *this); + return true; + } else { + return false; + } +} + +bool DOMStepper::SetSpecializedStyle(const std::pair& style) +{ + return false; +} + +bool DOMStepper::AddSpecializedEvent(int32_t pageId, const std::string& event) +{ + // static linear map must be sorted by key. + static const LinearMapNode eventOperators[] = { + { + DOM_STEPPER_EVENT_BACK, + [](int32_t pageId, DOMStepper& stepper) { + stepper.backEventId_ = EventMarker(stepper.GetNodeIdForEvent(), DOM_STEPPER_EVENT_BACK, pageId); + stepper.stepperComponent_->SetBackEventId(stepper.backEventId_); + }, + }, + { + DOM_STEPPER_EVENT_CHANGE, + [](int32_t pageId, DOMStepper& stepper) { + stepper.changeEventId_ = EventMarker(stepper.GetNodeIdForEvent(), DOM_STEPPER_EVENT_CHANGE, pageId); + stepper.stepperComponent_->SetChangeEventId(stepper.changeEventId_); + }, + }, + { + DOM_STEPPER_EVENT_FINISH, + [](int32_t pageId, DOMStepper& stepper) { + stepper.finishEventId_ = EventMarker(stepper.GetNodeIdForEvent(), DOM_STEPPER_EVENT_FINISH, pageId); + stepper.stepperComponent_->SetFinishEventId(stepper.finishEventId_); + }, + }, + { + DOM_STEPPER_EVENT_NEXT, + [](int32_t pageId, DOMStepper& stepper) { + stepper.nextEventId_ = EventMarker(stepper.GetNodeIdForEvent(), DOM_STEPPER_EVENT_NEXT, pageId); + stepper.stepperComponent_->SetNextEventId(stepper.nextEventId_); + }, + }, + { + DOM_STEPPER_EVENT_SKIP, + [](int32_t pageId, DOMStepper& stepper) { + stepper.skipEventId_ = EventMarker(stepper.GetNodeIdForEvent(), DOM_STEPPER_EVENT_SKIP, pageId); + stepper.stepperComponent_->SetSkipEventId(stepper.skipEventId_); + }, + }, + }; + auto iter = BinarySearchFindIndex(eventOperators, ArraySize(eventOperators), event.c_str()); + if (iter != -1) { + eventOperators[iter].value(pageId, *this); + return true; + } + return false; +} + +void DOMStepper::CallSpecializedMethod(const std::string& method, const std::string& args) +{ + if (method == DOM_STEPPER_SET_RIGHT_BUTTON_STATUS) { + auto controller = stepperComponent_->GetStepperController(); + if (!controller) { + LOGE("get controller failed"); + return; + } + std::unique_ptr argsValue = JsonUtil::ParseJsonString(args); + if (!argsValue || !argsValue->IsArray() || argsValue->GetArraySize() != METHOD_TO_ARGS_SIZE) { + LOGE("parse args error"); + return; + } + std::unique_ptr valueParams = argsValue->GetArrayItem(0); + + std::string status; + std::unique_ptr statusValue = valueParams->GetValue("status"); + if (statusValue && statusValue->IsString()) { + status = statusValue->GetString(); + } + + std::string label; + std::unique_ptr labelValue = valueParams->GetValue("label"); + if (labelValue && labelValue->IsString()) { + label = labelValue->GetString(); + } + controller->SetRightButtonStatus(status, label); + } +} + +void DOMStepper::OnChildNodeAdded(const RefPtr& child, int32_t slot) +{ + auto domStepperItem = AceType::DynamicCast(child); + if (!domStepperItem) { + LOGE("child is not stepper item, add to stepper failed."); + return; + } + auto childIndex = domStepperItem->GetItemIndex(); + LOGD("DOMStepper AddChild %{public}s, childIndex: %{public}d, slot: %{public}d", + child->GetTag().c_str(), childIndex, slot); + if (childIndex != DEFAULT_NODE_INDEX) { + stepperComponent_->InsertChild(childIndex, child->GetRootComponent()); + } else { + stepperComponent_->AppendChild(child->GetRootComponent()); + } +} + +void DOMStepper::OnChildNodeRemoved(const RefPtr& child) +{ + if (!stepperComponent_ || !child) { + LOGE("DOMStepper OnChildNodeRemoved listComponent_ is null"); + return; + } + stepperComponent_->RemoveChild(child->GetRootComponent()); +} + +void DOMStepper::InitializeStyle() +{ + ResetInitializedStyle(); +} + +void DOMStepper::ResetInitializedStyle() +{ + auto theme = GetTheme(); + if (!theme) { + LOGE("Stepper theme is null"); + return; + } + stepperComponent_->SetDefaultPaddingStart(theme->GetDefaultPaddingStart()); + stepperComponent_->SetDefaultPaddingEnd(theme->GetDefaultPaddingEnd()); + stepperComponent_->SetProgressColor(theme->GetProgressColor()); + stepperComponent_->SetProgressDiameter(theme->GetProgressDiameter()); + stepperComponent_->SetArrowWidth(theme->GetArrowWidth()); + stepperComponent_->SetArrowHeight(theme->GetArrowHeight()); + stepperComponent_->SetArrowColor(theme->GetArrowColor()); + stepperComponent_->SetDisabledColor(theme->GetDisabledColor()); + stepperComponent_->SetRadius(theme->GetRadius()); + stepperComponent_->SetButtonPressedColor(theme->GetButtonPressedColor()); + stepperComponent_->SetButtonPressedHeight(theme->GetButtonPressedHeight()); + stepperComponent_->SetControlHeight(theme->GetControlHeight()); + stepperComponent_->SetControlMargin(theme->GetControlMargin()); + stepperComponent_->SetControlPadding(theme->GetControlPadding()); + stepperComponent_->SetFocusColor(theme->GetFocusColor()); + stepperComponent_->SetFocusBorderWidth(theme->GetFocusBorderWidth()); + stepperComponent_->SetMouseHoverColor(theme->GetMouseHoverColor()); + stepperComponent_->SetDisabledAlpha(theme->GetDisabledAlpha()); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_stepper.h b/frameworks/bridge/common/dom/dom_stepper.h new file mode 100644 index 00000000..a41156ee --- /dev/null +++ b/frameworks/bridge/common/dom/dom_stepper.h @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_STEPPER_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_STEPPER_H + +#include "core/components/stepper/stepper_component.h" +#include "frameworks/bridge/common/dom/dom_node.h" +#include "frameworks/bridge/common/dom/dom_type.h" + +namespace OHOS::Ace::Framework { + +class DOMStepper final : public DOMNode { + DECLARE_ACE_TYPE(DOMStepper, DOMNode); + +public: + DOMStepper(NodeId nodeId, const std::string& nodeName); + ~DOMStepper() override = default; + + void CallSpecializedMethod(const std::string& method, const std::string& args) override; + + void InitializeStyle() override; + + RefPtr GetSpecializedComponent() override + { + return stepperComponent_; + } + +protected: + void OnChildNodeAdded(const RefPtr& child, int32_t slot) override; + void OnChildNodeRemoved(const RefPtr& child) override; + bool SetSpecializedAttr(const std::pair& attr) override; + bool SetSpecializedStyle(const std::pair& style) override; + bool AddSpecializedEvent(int32_t pageId, const std::string& event) override; + void ResetInitializedStyle() override; + +private: + RefPtr stepperComponent_; + EventMarker finishEventId_; + EventMarker skipEventId_; + EventMarker changeEventId_; + EventMarker nextEventId_; + EventMarker backEventId_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_STEPPER_H diff --git a/frameworks/bridge/common/dom/dom_stepper_item.cpp b/frameworks/bridge/common/dom/dom_stepper_item.cpp new file mode 100644 index 00000000..2765c47a --- /dev/null +++ b/frameworks/bridge/common/dom/dom_stepper_item.cpp @@ -0,0 +1,209 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_stepper_item.h" + +#include "base/utils/linear_map.h" +#include "base/utils/utils.h" +#include "core/components/focus_animation/focus_animation_theme.h" +#include "core/components/stepper/stepper_theme.h" +#include "frameworks/bridge/common/dom/dom_reflect_map.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +namespace { + +constexpr double DEFAULT_OPACITY = 1.0; + +} // namespace + +DOMStepperItem::DOMStepperItem(NodeId nodeId, const std::string& nodeName, int32_t index) : DOMNode(nodeId, nodeName) +{ + itemIndex_ = index; + stepperItemComponent_ = AceType::MakeRefPtr(RefPtr()); +} + +bool DOMStepperItem::SetSpecializedStyle(const std::pair& style) +{ + static const LinearMapNode stepperItemStyleOperators[] = { + { DOM_ALIGN_ITEMS, [](const std::string& val, + DOMStepperItem& stepperItem) { stepperItem.flexCrossAlign_ = ConvertStrToFlexAlign(val); } }, + { DOM_TEXT_ALLOW_SCALE, + [](const std::string& value, DOMStepperItem& stepperItem) { + stepperItem.textStyle_.SetAllowScale(StringToBool(value)); + } }, + { DOM_FLEX_DIRECTION, [](const std::string& val, + DOMStepperItem& stepperItem) { stepperItem.flexDirection_ = ConvertStrToFlexDirection(val); } }, + { DOM_STEPPER_FONT_FAMILY, + [](const std::string& value, DOMStepperItem& stepperItem) { + stepperItem.textStyle_.SetFontFamilies(ConvertStrToFontFamilies(value)); + } }, + { DOM_STEPPER_FONT_SIZE, + [](const std::string& value, DOMStepperItem& stepperItem) { + stepperItem.textStyle_.SetFontSize(stepperItem.ParseDimension(value)); + } }, + { DOM_STEPPER_FONT_STYLE, + [](const std::string& value, DOMStepperItem& stepperItem) { + stepperItem.textStyle_.SetFontStyle(ConvertStrToFontStyle(value)); + } }, + { DOM_STEPPER_FONT_WEIGHT, + [](const std::string& value, DOMStepperItem& stepperItem) { + stepperItem.textStyle_.SetFontWeight(ConvertStrToFontWeight(value)); + } }, + { DOM_JUSTIFY_CONTENT, [](const std::string& val, + DOMStepperItem& stepperItem) { stepperItem.flexMainAlign_ = ConvertStrToFlexAlign(val); } }, + { DOM_STEPPER_TEXT_COLOR, + [](const std::string& value, DOMStepperItem& stepperItem) { + stepperItem.textStyle_.SetTextColor(stepperItem.ParseColor(value)); + } }, + { DOM_STEPPER_TEXT_DECORATION, + [](const std::string& value, DOMStepperItem& stepperItem) { + stepperItem.textStyle_.SetTextDecoration(ConvertStrToTextDecoration(value)); + } }, + }; + auto operatorIter = BinarySearchFindIndex(stepperItemStyleOperators, + ArraySize(stepperItemStyleOperators), style.first.c_str()); + if (operatorIter != -1) { + stepperItemStyleOperators[operatorIter].value(style.second, *this); + return true; + } + return false; +} + +void DOMStepperItem::InitializeStyle() +{ + auto theme = GetTheme(); + if (!theme) { + LOGE("Stepper theme is null"); + return; + } + textStyle_ = theme->GetTextStyle(); + textStyle_.SetAdaptTextSize(theme->GetTextStyle().GetFontSize(), theme->GetMinFontSize()); + textStyle_.SetMaxLines(theme->GetTextMaxLines()); + textStyle_.SetTextOverflow(TextOverflow::ELLIPSIS); +} + +bool DOMStepperItem::AddSpecializedEvent(int32_t pageId, const std::string& event) +{ + if (event == DOM_STEPPER_ITEM_EVENT_APPEAR) { + appearEventId_ = EventMarker(GetNodeIdForEvent(), event, pageId); + stepperItemComponent_->SetAppearEventId(appearEventId_); + return true; + } else if (event == DOM_STEPPER_ITEM_EVENT_DISAPPEAR) { + disappearEventId_ = EventMarker(GetNodeIdForEvent(), event, pageId); + stepperItemComponent_->SetDisappearEventId(disappearEventId_); + return true; + } else { + return false; + } +} + +void DOMStepperItem::AddStepperItem(const RefPtr& node, int32_t slot) +{ + const auto& childComponent = node->GetRootComponent(); + if (!flexComponent_) { + flexComponent_ = AceType::MakeRefPtr( + flexDirection_, flexMainAlign_, flexCrossAlign_, std::list>()); + } + flexComponent_->InsertChild(slot, childComponent); +} + +void DOMStepperItem::RemoveStepperItem(const RefPtr& node) +{ + const auto& childComponent = node->GetRootComponent(); + if (flexComponent_) { + flexComponent_->RemoveChild(childComponent); + } +} + +void DOMStepperItem::OnChildNodeAdded(const RefPtr& child, int32_t slot) +{ + if (child) { + AddStepperItem(child, slot); + } +} + +void DOMStepperItem::OnChildNodeRemoved(const RefPtr& child) +{ + if (child) { + RemoveStepperItem(child); + } +} + +void DOMStepperItem::PrepareSpecializedComponent() +{ + if (!stepperItemComponent_) { + stepperItemComponent_ = AceType::MakeRefPtr(RefPtr()); + } + stepperItemComponent_->SetLabel(GetLabel()); + stepperItemComponent_->SetTextStyle(textStyle_); + ResetInitializedStyle(); + + if (flexComponent_) { + flexComponent_->SetDirection(flexDirection_); + flexComponent_->SetMainAxisAlign(flexMainAlign_); + flexComponent_->SetCrossAxisAlign(flexCrossAlign_); + } else { + flexComponent_ = AceType::MakeRefPtr( + flexDirection_, flexMainAlign_, flexCrossAlign_, std::list>()); + flexComponent_->SetTextDirection(IsRightToLeft() ? TextDirection::RTL : TextDirection::LTR); + } + + if (displayComponent_) { + displayComponent_->SetVisible(VisibleType::VISIBLE); + displayComponent_->SetOpacity(DEFAULT_OPACITY); + } else { + displayComponent_ = AceType::MakeRefPtr(); + } +} + +RefPtr DOMStepperItem::CompositeSpecializedComponent(const std::vector>& components) +{ + auto scroll = AceType::MakeRefPtr(flexComponent_); + scroll->SetTakeBoundary(false); + RefPtr component = scroll; + + if (!components.empty()) { + const auto& parent = components.back(); + if (parent) { + parent->SetChild(component); + } + component = AceType::DynamicCast(components.front()); + } + + if (stepperItemComponent_) { + if (displayComponent_) { + displayComponent_->SetChild(component); + stepperItemComponent_->SetChild(displayComponent_); + } else { + stepperItemComponent_->SetChild(component); + } + } + return stepperItemComponent_; +} + +void DOMStepperItem::ResetInitializedStyle() +{ + if (!stepperItemComponent_) { + LOGE("stepper item is null, reset style failed."); + return; + } + auto theme = GetTheme(); + if (theme) { + stepperItemComponent_->SetFocusAnimationColor(theme->GetColor()); + } +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_stepper_item.h b/frameworks/bridge/common/dom/dom_stepper_item.h new file mode 100644 index 00000000..5df413a1 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_stepper_item.h @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_STEPPER_ITEM_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_STEPPER_ITEM_H + +#include "core/components/stepper/stepper_item_component.h" +#include "frameworks/bridge/common/dom/dom_node.h" + +namespace OHOS::Ace::Framework { + +class DOMStepperItem final : public DOMNode { + DECLARE_ACE_TYPE(DOMStepperItem, DOMNode); + +public: + DOMStepperItem(NodeId nodeId, const std::string& nodeName, int32_t index); + ~DOMStepperItem() override = default; + + void SetLabel(const StepperLabels& label) + { + label_ = label; + } + + const StepperLabels& GetLabel() const + { + return label_; + } + + const TextStyle& GetTextStyle() const + { + return textStyle_; + } + + RefPtr GetSpecializedComponent() override + { + return stepperItemComponent_; + } + + int32_t GetItemIndex() const + { + return itemIndex_; + } + + void InitializeStyle() override; + +protected: + void OnChildNodeAdded(const RefPtr& child, int32_t slot) override; + void OnChildNodeRemoved(const RefPtr& child) override; + bool SetSpecializedStyle(const std::pair& style) override; + bool AddSpecializedEvent(int32_t pageId, const std::string& event) override; + void PrepareSpecializedComponent() override; + RefPtr CompositeSpecializedComponent(const std::vector>& components) override; + void ResetInitializedStyle() override; + +private: + void AddStepperItem(const RefPtr& node, int32_t slot); + void RemoveStepperItem(const RefPtr& node); + + RefPtr stepperItemComponent_; + TextStyle textStyle_; + StepperLabels label_; + EventMarker appearEventId_; + EventMarker disappearEventId_; + int32_t itemIndex_ = -1; + FlexDirection flexDirection_ { FlexDirection::ROW }; + FlexAlign flexMainAlign_ { FlexAlign::FLEX_START }; + FlexAlign flexCrossAlign_ { FlexAlign::FLEX_START }; + RefPtr flexComponent_; + RefPtr displayComponent_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_STEPPER_ITEM_H diff --git a/frameworks/bridge/common/dom/dom_svg.cpp b/frameworks/bridge/common/dom/dom_svg.cpp new file mode 100644 index 00000000..65d93eef --- /dev/null +++ b/frameworks/bridge/common/dom/dom_svg.cpp @@ -0,0 +1,105 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_svg.h" +#include "frameworks/bridge/common/dom/dom_svg_animate.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { + +DOMSvg::DOMSvg(NodeId nodeId, const std::string& nodeName) : DOMSvgBase(nodeId, nodeName) +{ + SetHasDisplayStyleFlag(true); + transformComponent_ = AceType::MakeRefPtr(); + overflow_ = Overflow::CLIP; +} + +bool DOMSvg::SetSpecializedAttr(const std::pair& attr) +{ + if (DOMSvgBase::SetPresentationAttr(attr)) { + return true; + } + if (attr.first == DOM_SVG_VIEW_BOX) { + std::vector viewBoxValues; + if (!attr.second.empty()) { + StringUtils::SplitStr(attr.second, " ", viewBoxValues); + } + if (viewBoxValues.size() == 4) { + viewBox_ = Rect(ParseDouble(viewBoxValues[0]), ParseDouble(viewBoxValues[1]), + ParseDouble(viewBoxValues[2]), ParseDouble(viewBoxValues[3])); + } + return true; + } + if (attr.first == DOM_SVG_X) { + x_ = ParseDimension(attr.second); + return true; + } + if (attr.first == DOM_SVG_Y) { + y_ = ParseDimension(attr.second); + return true; + } + if (attr.first == DOM_SVG_WIDTH) { + width_ = ParseDimension(attr.second); + return true; + } + if (attr.first == DOM_SVG_HEIGHT) { + height_ = ParseDimension(attr.second); + return true; + } + return false; +} + +RefPtr DOMSvg::GetSpecializedComponent() +{ + return svgComponent_; +} + +void DOMSvg::OnChildNodeAdded(const RefPtr& child, int32_t slot) +{ + if (AceType::InstanceOf(child->GetSpecializedComponent())) { + svgComponent_->InsertChild(slot, child->GetSpecializedComponent()); + } else { + svgComponent_->InsertChild(slot, child->GetRootComponent()); + } +} + +void DOMSvg::OnMounted(const RefPtr& parentNode) +{ + auto svgNode = AceType::DynamicCast(parentNode); + if (svgNode) { + fillState_.Inherit(svgNode->GetFillState()); + strokeState_.Inherit(svgNode->GetStrokeState()); + textStyle_.Inherit(svgNode->GetTextStyle()); + if (!NearZero(x_.Value()) || !NearZero(y_.Value())) { + transformComponent_->Translate(x_, y_); + } + } +} + +void DOMSvg::PrepareSpecializedComponent() +{ + if (!svgComponent_) { + svgComponent_ = AceType::MakeRefPtr(); + } + svgComponent_->SetX(x_); + svgComponent_->SetY(y_); + svgComponent_->SetHeight(height_); + svgComponent_->SetWidth(width_); + svgComponent_->SetViewBox(viewBox_); + DOMSvgBase::PrepareCommonAttrs(svgComponent_); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_svg.h b/frameworks/bridge/common/dom/dom_svg.h new file mode 100644 index 00000000..6526ae61 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_svg.h @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_SVG_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_SVG_H + +#include "base/geometry/rect.h" +#include "frameworks/bridge/common/dom/dom_svg_base.h" +#include "frameworks/core/components/svg/svg_component.h" + +namespace OHOS::Ace::Framework { + +class ACE_EXPORT DOMSvg final : public DOMSvgBase { + DECLARE_ACE_TYPE(DOMSvg, DOMSvgBase); + +public: + DOMSvg(NodeId nodeId, const std::string& nodeName); + ~DOMSvg() override = default; + +protected: + void OnMounted(const RefPtr& parentNode) override; + void OnChildNodeAdded(const RefPtr& child, int32_t slot) override; + void PrepareSpecializedComponent() override; + bool SetSpecializedAttr(const std::pair& attr) override; + RefPtr GetSpecializedComponent() override; + +private: + Dimension x_; + Dimension y_; + Dimension width_ = Dimension(-1.0); + Dimension height_ = Dimension(-1.0); + Rect viewBox_; + RefPtr svgComponent_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_SVG_H diff --git a/frameworks/bridge/common/dom/dom_svg_animate.cpp b/frameworks/bridge/common/dom/dom_svg_animate.cpp new file mode 100644 index 00000000..40c9ed89 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_svg_animate.cpp @@ -0,0 +1,196 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_svg_animate.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +namespace { + +const char ANIMATION_RESTART_ALWAYS[] = "always"; +const char ANIMATION_RESTART_WHENNOTACTIVE[] = "whenNotActive"; +const char ANIMATION_RESTART_NEVER[] = "never"; +const char ANIMATION_VALUE_INDEFINITE[] = "indefinite"; +const char ANIMATION_FILL_MODE_FREEZE[] = "freeze"; +const char ANIMATION_CALC_MODE_DISCRETE[] = "discrete"; +const char ANIMATION_CALC_MODE_LINEAR[] = "linear"; +const char ANIMATION_CALC_MODE_PACED[] = "paced"; +const char ANIMATION_CALC_MODE_SPLINE[] = "spline"; +const char ANIMATION_ADDITIVE_REPLACE[] = "replace"; +const char ANIMATION_ADDITIVE_SUM[] = "sum"; +const char ANIMATION_ACCUMULATE_NONE[] = "none"; +const char ANIMATION_ACCUMULATE_SUM[] = "sum"; + +} // namespace + +DOMSvgAnimate::DOMSvgAnimate(NodeId nodeId, const std::string& nodeName) : DOMNode(nodeId, nodeName) {} + +void DOMSvgAnimate::OnMounted(const RefPtr& parentNode) {} + +void DOMSvgAnimate::PrepareSpecializedComponent() +{ + if (!animateComponent_) { + animateComponent_ = AceType::MakeRefPtr(std::to_string(GetNodeId()), GetTag()); + } + PrepareSpecializedComponent(animateComponent_); +} + +void DOMSvgAnimate::PrepareSpecializedComponent(const RefPtr& animateComponent) +{ + animateComponent->SetSvgId(svgId_); + animateComponent->SetBegin(begin_); + animateComponent->SetDur(dur_); + animateComponent->SetEnd(end_); + animateComponent->SetMin(min_); + animateComponent->SetMax(max_); + animateComponent->SetRestart(restart_); + animateComponent->SetRepeatCount(repeatCount_); + animateComponent->SetRepeatDur(repeatDur_); + animateComponent->SetFillMode(fillMode_); + animateComponent->SetCalcMode(calcMode_); + animateComponent->SetValues(values_); + animateComponent->SetKeyTimes(keyTimes_); + animateComponent->SetKeySplines(keySplines_); + animateComponent->SetFrom(from_); + animateComponent->SetTo(to_); + animateComponent->SetBy(by_); + animateComponent->SetAttributeName(attributeName_); + animateComponent->SetAdditive(additive_); + animateComponent->SetAccumulate(accumulate_); +} + +bool DOMSvgAnimate::SetSpecializedAttr(const std::pair& attr) +{ + if (attr.first == DOM_SVG_ID) { + svgId_ = attr.second; + return true; + } + + if (attr.first == DOM_SVG_ANIMATION_BEGIN) { + begin_ = ConvertTimeStr(attr.second); + return true; + } + if (attr.first == DOM_SVG_ANIMATION_DUR) { + if (attr.second == ANIMATION_VALUE_INDEFINITE) { + dur_ = 0; + } else { + dur_ = ConvertTimeStr(attr.second); + } + return true; + } + if (attr.first == DOM_SVG_ANIMATION_END) { + end_ = ConvertTimeStr(attr.second); + return true; + } + if (attr.first == DOM_SVG_ANIMATION_MIN) { + min_ = ConvertTimeStr(attr.second); + return true; + } + if (attr.first == DOM_SVG_ANIMATION_MAX) { + max_ = ConvertTimeStr(attr.second); + return true; + } + if (attr.first == DOM_SVG_ANIMATION_RESTART) { + if (attr.second == ANIMATION_RESTART_ALWAYS) { + restart_ = Restart::ALWAYS; + } else if (attr.second == ANIMATION_RESTART_WHENNOTACTIVE) { + restart_ = Restart::WHEN_NOT_ACTIVE; + } else if (attr.second == ANIMATION_RESTART_NEVER) { + restart_ = Restart::NEVER; + } + return true; + } + if (attr.first == DOM_SVG_ANIMATION_REPEAT_COUNT) { + if (attr.second == ANIMATION_VALUE_INDEFINITE) { + repeatCount_ = -1; + } else { + repeatCount_ = StringToInt(attr.second); + } + return true; + } + if (attr.first == DOM_SVG_ANIMATION_REPEAT_DUR) { + repeatDur_ = ConvertTimeStr(attr.second); + return true; + } + if (attr.first == DOM_SVG_ANIMATION_FILL) { + if (attr.second == ANIMATION_FILL_MODE_FREEZE) { + fillMode_ = Fill::FREEZE; + } else { + fillMode_ = Fill::REMOVE; + } + return true; + } + if (attr.first == DOM_SVG_ANIMATION_CALC_MODE) { + if (attr.second == ANIMATION_CALC_MODE_DISCRETE) { + calcMode_ = CalcMode::DISCRETE; + } else if (attr.second == ANIMATION_CALC_MODE_LINEAR) { + calcMode_ = CalcMode::LINEAR; + } else if (attr.second == ANIMATION_CALC_MODE_PACED) { + calcMode_ = CalcMode::PACED; + } else if (attr.second == ANIMATION_CALC_MODE_SPLINE) { + calcMode_ = CalcMode::SPLINE; + } + return true; + } + if (attr.first == DOM_SVG_ANIMATION_VALUES) { + StringUtils::SplitStr(attr.second, ";", values_); + return true; + } + if (attr.first == DOM_SVG_ANIMATION_KEY_TIMES) { + StringUtils::StringSpliter(attr.second, ';', keyTimes_); + return true; + } + if (attr.first == DOM_SVG_ANIMATION_KEY_SPLINES) { + StringUtils::SplitStr(attr.second, ";", keySplines_); + return true; + } + if (attr.first == DOM_SVG_ANIMATION_FROM) { + from_ = attr.second; + return true; + } + if (attr.first == DOM_SVG_ANIMATION_TO) { + to_ = attr.second; + return true; + } + if (attr.first == DOM_SVG_ANIMATION_BY) { + by_ = attr.second; + return true; + } + if (attr.first == DOM_SVG_ANIMATION_ATTRIBUTE_NAME) { + attributeName_ = attr.second; + return true; + } + + if (attr.first == DOM_SVG_ANIMATION_ADDITIVE) { + if (attr.second == ANIMATION_ADDITIVE_REPLACE) { + additive_ = Additive::REPLACE; + } else if (attr.second == ANIMATION_ADDITIVE_SUM) { + additive_ = Additive::SUM_ADD; + } + return true; + } + if (attr.first == DOM_SVG_ANIMATION_ACCUMULATE) { + if (attr.second == ANIMATION_ACCUMULATE_NONE) { + accumulate_ = Accumulate::NONE; + } else if (attr.second == ANIMATION_ACCUMULATE_SUM) { + accumulate_ = Accumulate::SUM_ACC; + } + return true; + } + return false; +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_svg_animate.h b/frameworks/bridge/common/dom/dom_svg_animate.h new file mode 100644 index 00000000..5927f0a1 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_svg_animate.h @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_SVG_ANIMATE_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_SVG_ANIMATE_H + +#include "frameworks/bridge/common/dom/dom_node.h" +#include "frameworks/bridge/common/dom/dom_type.h" +#include "frameworks/core/components/svg/svg_animate_component.h" + +namespace OHOS::Ace::Framework { + +class ACE_EXPORT DOMSvgAnimate : public DOMNode { + DECLARE_ACE_TYPE(DOMSvgAnimate, DOMNode); + +public: + DOMSvgAnimate(NodeId nodeId, const std::string& nodeName); + ~DOMSvgAnimate() override = default; + + RefPtr GetSpecializedComponent() override + { + return animateComponent_; + } + +protected: + void OnMounted(const RefPtr& parentNode) override; + void PrepareSpecializedComponent() override; + bool SetSpecializedAttr(const std::pair& attr) override; + void PrepareSpecializedComponent(const RefPtr& animateComponent); + + std::string svgId_; + std::string attributeName_; + int32_t begin_ = 0; + int32_t dur_ = 0; + int32_t end_ = 0; + int32_t min_ = 0; + int32_t max_ = 0; + Restart restart_ = Restart::ALWAYS; + int32_t repeatCount_ = 1; + int32_t repeatDur_ = 0; + Fill fillMode_ = Fill::REMOVE; + CalcMode calcMode_ = CalcMode::LINEAR; + Additive additive_ = Additive::REPLACE; + Accumulate accumulate_ = Accumulate::NONE; + std::vector values_; + std::vector keyTimes_; + std::vector keySplines_; + std::string from_; + std::string to_; + std::string by_; + RefPtr animateComponent_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_SVG_ANIMATE_H diff --git a/frameworks/bridge/common/dom/dom_svg_animate_motion.cpp b/frameworks/bridge/common/dom/dom_svg_animate_motion.cpp new file mode 100644 index 00000000..08cdace2 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_svg_animate_motion.cpp @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_svg_animate_motion.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { + +void DOMSvgAnimateMotion::PrepareSpecializedComponent() +{ + if (!animateComponent_) { + animateComponent_ = AceType::MakeRefPtr(std::to_string(GetNodeId()), + GetTag(), SvgAnimateType::MOTION); + } + DOMSvgAnimate::PrepareSpecializedComponent(animateComponent_); + animateComponent_->SetKeyPoints(keyPoints_); + animateComponent_->SetPath(path_); + animateComponent_->SetRotate(rotate_); +} + +bool DOMSvgAnimateMotion::SetSpecializedAttr(const std::pair& attr) +{ + if (DOMSvgAnimate::SetSpecializedAttr(attr)) { + return true; + } + if (attr.first == DOM_SVG_ANIMATION_KEY_POINTS) { + StringUtils::StringSpliter(attr.second, ';', keyPoints_); + return true; + } + + if (attr.first == DOM_SVG_ANIMATION_PATH) { + path_ = attr.second; + return true; + } + + if (attr.first == DOM_SVG_ANIMATION_ROTATE) { + rotate_ = attr.second; + return true; + } + return false; +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_svg_animate_motion.h b/frameworks/bridge/common/dom/dom_svg_animate_motion.h new file mode 100644 index 00000000..754d35a6 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_svg_animate_motion.h @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_SVG_ANIMATION_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_SVG_ANIMATION_H + +#include "frameworks/bridge/common/dom/dom_svg_animate.h" + +namespace OHOS::Ace::Framework { + +class ACE_EXPORT DOMSvgAnimateMotion final : public DOMSvgAnimate { + DECLARE_ACE_TYPE(DOMSvgAnimateMotion, DOMSvgAnimate); + +public: + DOMSvgAnimateMotion(NodeId nodeId, const std::string& nodeName) : DOMSvgAnimate(nodeId, nodeName) + { + calcMode_ = CalcMode::PACED; + } + + ~DOMSvgAnimateMotion() override = default; + + RefPtr GetSpecializedComponent() override + { + return animateComponent_; + } + +protected: + void PrepareSpecializedComponent() override; + bool SetSpecializedAttr(const std::pair& attr) override; + +private: + std::vector keyPoints_; + std::string path_; + std::string rotate_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_SVG_ANIMATION_H diff --git a/frameworks/bridge/common/dom/dom_svg_animate_transform.cpp b/frameworks/bridge/common/dom/dom_svg_animate_transform.cpp new file mode 100644 index 00000000..9b9fa653 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_svg_animate_transform.cpp @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_svg_animate_transform.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { + +void DOMSvgAnimateTransform::PrepareSpecializedComponent() +{ + if (!animateComponent_) { + animateComponent_ = AceType::MakeRefPtr(std::to_string(GetNodeId()), + GetTag(), SvgAnimateType::TRANSFORM); + } + DOMSvgAnimate::PrepareSpecializedComponent(animateComponent_); + animateComponent_->SetTransformType(transformType_); +} + +bool DOMSvgAnimateTransform::SetSpecializedAttr(const std::pair& attr) +{ + if (DOMSvgAnimate::SetSpecializedAttr(attr)) { + return true; + } + if (attr.first == DOM_SVG_ANIMATION_TYPE) { + transformType_ = attr.second; + return true; + } + return false; +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_svg_animate_transform.h b/frameworks/bridge/common/dom/dom_svg_animate_transform.h new file mode 100644 index 00000000..e355af2e --- /dev/null +++ b/frameworks/bridge/common/dom/dom_svg_animate_transform.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_SVG_ANIMATION_TRANSFORM_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_SVG_ANIMATION_TRANSFORM_H + +#include "frameworks/bridge/common/dom/dom_svg_animate.h" + +namespace OHOS::Ace::Framework { + +class ACE_EXPORT DOMSvgAnimateTransform final : public DOMSvgAnimate { + DECLARE_ACE_TYPE(DOMSvgAnimateTransform, DOMSvgAnimate); + +public: + DOMSvgAnimateTransform(NodeId nodeId, const std::string& nodeName) : DOMSvgAnimate(nodeId, nodeName) {}; + ~DOMSvgAnimateTransform() override = default; + + RefPtr GetSpecializedComponent() override + { + return animateComponent_; + } + +protected: + void PrepareSpecializedComponent() override; + bool SetSpecializedAttr(const std::pair& attr) override; + +private: + std::string transformType_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_SVG_ANIMATION_TRANSFORM_H diff --git a/frameworks/bridge/common/dom/dom_svg_base.cpp b/frameworks/bridge/common/dom/dom_svg_base.cpp new file mode 100644 index 00000000..5a21ccae --- /dev/null +++ b/frameworks/bridge/common/dom/dom_svg_base.cpp @@ -0,0 +1,148 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_svg_base.h" + +#include "frameworks/bridge/common/dom/dom_svg.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +namespace { + +const char LINECAP_ROUND[] = "round"; +const char LINECAP_SQUARE[] = "square"; +const char LINEJOIN_BEVEL[] = "bevel"; +const char LINEJOIN_ROUND[] = "round"; +const char VALUE_NONE[] = "none"; + +} // namespace + +DOMSvgBase::DOMSvgBase(NodeId nodeId, const std::string& nodeName) : DOMNode(nodeId, nodeName) {} + +bool DOMSvgBase::SetPresentationAttr(const std::pair& attr) +{ + static const std::unordered_map presentationAttrs = { + { DOM_SVG_OPACITY, [](const std::string& val, DOMSvgBase& node) { + node.opacity_ = StringToDouble(val); + } }, + { DOM_SVG_FILL, [](const std::string& val, DOMSvgBase& node) { + if (val != VALUE_NONE) { + node.fillState_.SetColor(Color::FromString(val)); + return; + } + node.fillState_.SetOpacity(0.0); + node.fillState_.SetColor(Color::TRANSPARENT); + } }, + { DOM_SVG_FILL_OPACITY, [](const std::string& val, DOMSvgBase& node) { + if (node.fillState_.GetColor() == Color::TRANSPARENT) { + node.fillState_.SetOpacity(0.0); + return; + } + node.fillState_.SetOpacity(StringToDouble(val)); + } }, + { DOM_SVG_STROKE, [](const std::string& val, DOMSvgBase& node) { + if (val != VALUE_NONE) { + node.strokeState_.SetColor(Color::FromString(val)); + return; + } + node.strokeState_.SetOpacity(0.0); + node.strokeState_.SetColor(Color::TRANSPARENT); + } }, + { DOM_SVG_STROKE_DASHARRAY, [](const std::string& val, DOMSvgBase& node) { + std::vector tmp; + StringUtils::StringSpliter(val, ' ', tmp); + node.strokeState_.SetLineDash(tmp); + } }, + { DOM_SVG_STROKE_DASHOFFSET, [](const std::string& val, DOMSvgBase& node) { + node.strokeState_.SetLineDashOffset(StringToDouble(val)); + } }, + { DOM_SVG_STROKE_LINECAP, [](const std::string& val, DOMSvgBase& node) { + if (val == LINECAP_ROUND) { + node.strokeState_.SetLineCap(LineCapStyle::ROUND); + } else if (val == LINECAP_SQUARE) { + node.strokeState_.SetLineCap(LineCapStyle::SQUARE); + } else { + node.strokeState_.SetLineCap(LineCapStyle::BUTT); + } + } }, + { DOM_SVG_STROKE_LINEJOIN, [](const std::string& val, DOMSvgBase& node) { + if (val == LINEJOIN_BEVEL) { + node.strokeState_.SetLineJoin(LineJoinStyle::BEVEL); + } else if (val == LINEJOIN_ROUND) { + node.strokeState_.SetLineJoin(LineJoinStyle::ROUND); + } else { + node.strokeState_.SetLineJoin(LineJoinStyle::MITER); + } + } }, + { DOM_SVG_STROKE_MITERLIMIT, [](const std::string& val, DOMSvgBase& node) { + node.strokeState_.SetMiterLimit(StringToDouble(val)); + } }, + { DOM_SVG_STROKE_OPACITY, [](const std::string& val, DOMSvgBase& node) { + node.strokeState_.SetOpacity(StringToDouble(val)); + } }, + { DOM_SVG_STROKE_WIDTH, [](const std::string& val, DOMSvgBase& node) { + node.strokeState_.SetLineWidth(StringToDimension(val)); + } }, + { DOM_SVG_FONT_FAMILY, [](const std::string& val, DOMSvgBase& node) { + node.textStyle_.SetFontFamilies(ConvertStrToFontFamilies(val)); + } }, + { DOM_SVG_FONT_SIZE, [](const std::string& val, DOMSvgBase& node) { + node.textStyle_.SetFontSize(StringToDimension(val)); + } }, + { DOM_SVG_FONT_STYLE, [](const std::string& val, DOMSvgBase& node) { + node.textStyle_.SetFontStyle(ConvertStrToFontStyle(val)); + } }, + { DOM_SVG_FONT_WEIGHT, [](const std::string& val, DOMSvgBase& node) { + node.textStyle_.SetFontWeight(ConvertStrToFontWeight(val)); + } }, + { DOM_SVG_LETTER_SPACING, [](const std::string& val, DOMSvgBase& node) { + node.textStyle_.SetLetterSpacing(StringToDouble(val)); + } }, + { DOM_SVG_TEXT_DECORATION, [](const std::string& val, DOMSvgBase& node) { + node.textStyle_.SetTextDecoration(ConvertStrToTextDecoration(val)); + } }, + }; + auto attrIter = presentationAttrs.find(attr.first); + if (attrIter == presentationAttrs.end()) { + return false; + } + if (!attr.second.empty()) { + attrIter->second(attr.second, *this); + } + return true; +} + +void DOMSvgBase::PrepareCommonAttrs(const RefPtr& svgSharp) +{ + svgSharp->SetOpacity(std::clamp(opacity_, 0.0, 1.0)); + svgSharp->SetFillState(fillState_); + svgSharp->SetStrokeState(strokeState_); + svgSharp->SetTextStyle(textStyle_); +} + +void DOMSvgBase::InheritCommonAttrs(const RefPtr& svgSharp, const RefPtr& parentNode) +{ + auto svgNode = AceType::DynamicCast(parentNode); + if (svgNode) { + fillState_.Inherit(svgNode->GetFillState()); + strokeState_.Inherit(svgNode->GetStrokeState()); + textStyle_.Inherit(svgNode->GetTextStyle()); + svgSharp->SetFillState(fillState_); + svgSharp->SetStrokeState(strokeState_); + svgSharp->SetTextStyle(textStyle_); + } +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_svg_base.h b/frameworks/bridge/common/dom/dom_svg_base.h new file mode 100644 index 00000000..4e0bd776 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_svg_base.h @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_SVG_BASE_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_SVG_BASE_H + +#include "base/geometry/rect.h" +#include "frameworks/bridge/common/dom/dom_node.h" +#include "frameworks/bridge/common/dom/dom_type.h" +#include "frameworks/core/components/common/properties/svg_paint_state.h" +#include "frameworks/core/components/svg/svg_sharp.h" + + +namespace OHOS::Ace::Framework { +class DOMSvgBase : public DOMNode { + DECLARE_ACE_TYPE(DOMSvgBase, DOMNode); + +public: + DOMSvgBase(NodeId nodeId, const std::string& nodeName); + ~DOMSvgBase() override = default; + + bool SetPresentationAttr(const std::pair& attr); + + const FillState& GetFillState() const + { + return fillState_; + } + + const StrokeState& GetStrokeState() const + { + return strokeState_; + } + + const SvgTextStyle& GetTextStyle() const + { + return textStyle_; + } + +protected: + void InheritCommonAttrs(const RefPtr& svgSharp, const RefPtr& parentNode); + void PrepareCommonAttrs(const RefPtr& svgSharp); + FillState fillState_; + StrokeState strokeState_; + SvgTextStyle textStyle_; +}; + +} // namespace OHOS::Ace::Framework + + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_SVG_BASE_H diff --git a/frameworks/bridge/common/dom/dom_svg_circle.cpp b/frameworks/bridge/common/dom/dom_svg_circle.cpp new file mode 100644 index 00000000..ea9e6c0f --- /dev/null +++ b/frameworks/bridge/common/dom/dom_svg_circle.cpp @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_svg_circle.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { + +DOMSvgCircle::DOMSvgCircle(NodeId nodeId, const std::string& nodeName) : DOMSvgBase(nodeId, nodeName) {} + +bool DOMSvgCircle::SetSpecializedAttr(const std::pair& attr) +{ + if (DOMSvgBase::SetPresentationAttr(attr)) { + return true; + } + if (attr.first == DOM_SVG_CX) { + cx_ = ParseDimension(attr.second); + return true; + } + if (attr.first == DOM_SVG_CY) { + cy_ = ParseDimension(attr.second); + return true; + } + if (attr.first == DOM_SVG_R) { + r_ = ParseDimension(attr.second); + return true; + } + return false; +} + +RefPtr DOMSvgCircle::GetSpecializedComponent() +{ + return circleComponent_; +} + +void DOMSvgCircle::OnChildNodeAdded(const RefPtr& child, int32_t slot) +{ + circleComponent_->InsertChild(slot, child->GetSpecializedComponent()); +} + +void DOMSvgCircle::OnMounted(const RefPtr& parentNode) +{ + DOMSvgBase::InheritCommonAttrs(circleComponent_, parentNode); +} + +void DOMSvgCircle::PrepareSpecializedComponent() +{ + if (!circleComponent_) { + circleComponent_ = AceType::MakeRefPtr(); + } + circleComponent_->SetCx(cx_); + circleComponent_->SetCy(cy_); + circleComponent_->SetR(r_); + DOMSvgBase::PrepareCommonAttrs(circleComponent_); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_svg_circle.h b/frameworks/bridge/common/dom/dom_svg_circle.h new file mode 100644 index 00000000..e2fdb7a4 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_svg_circle.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_CIRCLE_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_CIRCLE_H + +#include "frameworks/bridge/common/dom/dom_svg_base.h" +#include "frameworks/core/components/svg/svg_circle_component.h" + +namespace OHOS::Ace::Framework { + +class ACE_EXPORT DOMSvgCircle final : public DOMSvgBase { + DECLARE_ACE_TYPE(DOMSvgCircle, DOMSvgBase); + +public: + DOMSvgCircle(NodeId nodeId, const std::string& nodeName); + ~DOMSvgCircle() override = default; + +protected: + void OnMounted(const RefPtr& parentNode) override; + void OnChildNodeAdded(const RefPtr& child, int32_t slot) override; + void PrepareSpecializedComponent() override; + bool SetSpecializedAttr(const std::pair& attr) override; + RefPtr GetSpecializedComponent() override; + +private: + Dimension cx_; + Dimension cy_; + Dimension r_; + RefPtr circleComponent_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_CIRCLE_H diff --git a/frameworks/bridge/common/dom/dom_svg_ellipse.cpp b/frameworks/bridge/common/dom/dom_svg_ellipse.cpp new file mode 100644 index 00000000..4580397f --- /dev/null +++ b/frameworks/bridge/common/dom/dom_svg_ellipse.cpp @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_svg_ellipse.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { + +DOMSvgEllipse::DOMSvgEllipse(NodeId nodeId, const std::string& nodeName) : DOMSvgBase(nodeId, nodeName) {} + +bool DOMSvgEllipse::SetSpecializedAttr(const std::pair& attr) +{ + if (DOMSvgBase::SetPresentationAttr(attr)) { + return true; + } + if (attr.first == DOM_SVG_CX) { + cx_ = ParseDimension(attr.second); + return true; + } + if (attr.first == DOM_SVG_CY) { + cy_ = ParseDimension(attr.second); + return true; + } + if (attr.first == DOM_SVG_RX) { + rx_ = ParseDimension(attr.second); + return true; + } + if (attr.first == DOM_SVG_RY) { + ry_ = ParseDimension(attr.second); + return true; + } + return false; +} + +RefPtr DOMSvgEllipse::GetSpecializedComponent() +{ + return ellipseComponent_; +} + +void DOMSvgEllipse::OnChildNodeAdded(const RefPtr& child, int32_t slot) +{ + ellipseComponent_->InsertChild(slot, child->GetSpecializedComponent()); +} + +void DOMSvgEllipse::OnMounted(const RefPtr& parentNode) +{ + DOMSvgBase::InheritCommonAttrs(ellipseComponent_, parentNode); +} + +void DOMSvgEllipse::PrepareSpecializedComponent() +{ + if (!ellipseComponent_) { + ellipseComponent_ = AceType::MakeRefPtr(); + } + ellipseComponent_->SetCx(cx_); + ellipseComponent_->SetCy(cy_); + ellipseComponent_->SetRx(rx_); + ellipseComponent_->SetRy(ry_); + DOMSvgBase::PrepareCommonAttrs(ellipseComponent_); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_svg_ellipse.h b/frameworks/bridge/common/dom/dom_svg_ellipse.h new file mode 100644 index 00000000..44613c9f --- /dev/null +++ b/frameworks/bridge/common/dom/dom_svg_ellipse.h @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_ELLIPSE_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_ELLIPSE_H + +#include "frameworks/bridge/common/dom/dom_svg_base.h" +#include "frameworks/core/components/svg/svg_ellipse_component.h" + +namespace OHOS::Ace::Framework { + +class ACE_EXPORT DOMSvgEllipse final : public DOMSvgBase { + DECLARE_ACE_TYPE(DOMSvgEllipse, DOMSvgBase); + +public: + DOMSvgEllipse(NodeId nodeId, const std::string& nodeName); + ~DOMSvgEllipse() override = default; + +protected: + void OnMounted(const RefPtr& parentNode) override; + void OnChildNodeAdded(const RefPtr& child, int32_t slot) override; + void PrepareSpecializedComponent() override; + bool SetSpecializedAttr(const std::pair& attr) override; + RefPtr GetSpecializedComponent() override; + +private: + Dimension cx_; + Dimension cy_; + Dimension rx_; + Dimension ry_; + RefPtr ellipseComponent_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_ELLIPSE_H diff --git a/frameworks/bridge/common/dom/dom_svg_line.cpp b/frameworks/bridge/common/dom/dom_svg_line.cpp new file mode 100644 index 00000000..1a0c9116 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_svg_line.cpp @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_svg_line.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { + +DOMSvgLine::DOMSvgLine(NodeId nodeId, const std::string& nodeName) : DOMSvgBase(nodeId, nodeName) {} + +bool DOMSvgLine::SetSpecializedAttr(const std::pair& attr) +{ + if (DOMSvgBase::SetPresentationAttr(attr)) { + return true; + } + if (attr.first == DOM_SVG_X1) { + x1_ = ParseDimension(attr.second); + return true; + } + if (attr.first == DOM_SVG_X2) { + x2_ = ParseDimension(attr.second); + return true; + } + if (attr.first == DOM_SVG_Y1) { + y1_ = ParseDimension(attr.second); + return true; + } + if (attr.first == DOM_SVG_Y2) { + y2_ = ParseDimension(attr.second); + return true; + } + return false; +} + +RefPtr DOMSvgLine::GetSpecializedComponent() +{ + return lineComponent_; +} + +void DOMSvgLine::OnChildNodeAdded(const RefPtr& child, int32_t slot) +{ + lineComponent_->InsertChild(slot, child->GetSpecializedComponent()); +} + +void DOMSvgLine::OnMounted(const RefPtr& parentNode) +{ + DOMSvgBase::InheritCommonAttrs(lineComponent_, parentNode); +} + +void DOMSvgLine::PrepareSpecializedComponent() +{ + if (!lineComponent_) { + lineComponent_ = AceType::MakeRefPtr(); + } + lineComponent_->SetX1(x1_); + lineComponent_->SetX2(x2_); + lineComponent_->SetY1(y1_); + lineComponent_->SetY2(y2_); + DOMSvgBase::PrepareCommonAttrs(lineComponent_); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_svg_line.h b/frameworks/bridge/common/dom/dom_svg_line.h new file mode 100644 index 00000000..3b9e6405 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_svg_line.h @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_LINE_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_LINE_H + +#include "frameworks/bridge/common/dom/dom_svg_base.h" +#include "frameworks/core/components/svg/svg_line_component.h" + +namespace OHOS::Ace::Framework { + +class ACE_EXPORT DOMSvgLine final : public DOMSvgBase { + DECLARE_ACE_TYPE(DOMSvgLine, DOMSvgBase); + +public: + DOMSvgLine(NodeId nodeId, const std::string& nodeName); + ~DOMSvgLine() override = default; + +protected: + void OnMounted(const RefPtr& parentNode) override; + void OnChildNodeAdded(const RefPtr& child, int32_t slot) override; + void PrepareSpecializedComponent() override; + bool SetSpecializedAttr(const std::pair& attr) override; + RefPtr GetSpecializedComponent() override; + +private: + Dimension x1_; + Dimension y1_; + Dimension x2_; + Dimension y2_; + RefPtr lineComponent_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_LINE_H diff --git a/frameworks/bridge/common/dom/dom_svg_path.cpp b/frameworks/bridge/common/dom/dom_svg_path.cpp new file mode 100644 index 00000000..0e756454 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_svg_path.cpp @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_svg_path.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { + +DOMSvgPath::DOMSvgPath(NodeId nodeId, const std::string& nodeName) : DOMSvgBase(nodeId, nodeName) {} + +bool DOMSvgPath::SetSpecializedAttr(const std::pair& attr) +{ + if (DOMSvgBase::SetPresentationAttr(attr)) { + return true; + } + if (attr.first == DOM_SVG_D) { + d_ = attr.second; + return true; + } + return false; +} + +RefPtr DOMSvgPath::GetSpecializedComponent() +{ + return pathComponent_; +} + +void DOMSvgPath::OnChildNodeAdded(const RefPtr& child, int32_t slot) +{ + pathComponent_->InsertChild(slot, child->GetSpecializedComponent()); +} + +void DOMSvgPath::OnMounted(const RefPtr& parentNode) +{ + DOMSvgBase::InheritCommonAttrs(pathComponent_, parentNode); +} + +void DOMSvgPath::PrepareSpecializedComponent() +{ + if (!pathComponent_) { + pathComponent_ = AceType::MakeRefPtr(); + } + pathComponent_->SetD(d_); + DOMSvgBase::PrepareCommonAttrs(pathComponent_); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_svg_path.h b/frameworks/bridge/common/dom/dom_svg_path.h new file mode 100644 index 00000000..2d45d686 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_svg_path.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_PATH_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_PATH_H + +#include "frameworks/bridge/common/dom/dom_svg_base.h" +#include "frameworks/core/components/svg/svg_path_component.h" + +namespace OHOS::Ace::Framework { + +class ACE_EXPORT DOMSvgPath final : public DOMSvgBase { + DECLARE_ACE_TYPE(DOMSvgPath, DOMSvgBase); + +public: + DOMSvgPath(NodeId nodeId, const std::string& nodeName); + ~DOMSvgPath() override = default; + +protected: + void OnMounted(const RefPtr& parentNode) override; + void OnChildNodeAdded(const RefPtr& child, int32_t slot) override; + void PrepareSpecializedComponent() override; + bool SetSpecializedAttr(const std::pair& attr) override; + RefPtr GetSpecializedComponent() override; + +private: + std::string d_; + RefPtr pathComponent_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_PATH_H diff --git a/frameworks/bridge/common/dom/dom_svg_polygon.cpp b/frameworks/bridge/common/dom/dom_svg_polygon.cpp new file mode 100644 index 00000000..d4c7ab47 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_svg_polygon.cpp @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_svg_polygon.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { + +DOMSvgPolygon::DOMSvgPolygon(NodeId nodeId, const std::string& nodeName) : DOMSvgBase(nodeId, nodeName) {} + +bool DOMSvgPolygon::SetSpecializedAttr(const std::pair& attr) +{ + if (DOMSvgBase::SetPresentationAttr(attr)) { + return true; + } + if (attr.first == DOM_SVG_POINTS) { + points_ = attr.second; + return true; + } + return false; +} + +RefPtr DOMSvgPolygon::GetSpecializedComponent() +{ + return polygonComponent_; +} + +void DOMSvgPolygon::OnChildNodeAdded(const RefPtr& child, int32_t slot) +{ + polygonComponent_->InsertChild(slot, child->GetSpecializedComponent()); +} + +void DOMSvgPolygon::OnMounted(const RefPtr& parentNode) +{ + DOMSvgBase::InheritCommonAttrs(polygonComponent_, parentNode); +} + +void DOMSvgPolygon::PrepareSpecializedComponent() +{ + if (!polygonComponent_) { + polygonComponent_ = AceType::MakeRefPtr(); + } + polygonComponent_->SetPoints(points_); + DOMSvgBase::PrepareCommonAttrs(polygonComponent_); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_svg_polygon.h b/frameworks/bridge/common/dom/dom_svg_polygon.h new file mode 100644 index 00000000..f4044a2a --- /dev/null +++ b/frameworks/bridge/common/dom/dom_svg_polygon.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_POLYGON_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_POLYGON_H + +#include "frameworks/bridge/common/dom/dom_svg_base.h" +#include "frameworks/core/components/svg/svg_polygon_component.h" + +namespace OHOS::Ace::Framework { + +class ACE_EXPORT DOMSvgPolygon final : public DOMSvgBase { + DECLARE_ACE_TYPE(DOMSvgPolygon, DOMSvgBase); + +public: + DOMSvgPolygon(NodeId nodeId, const std::string& nodeName); + ~DOMSvgPolygon() override = default; + +protected: + void OnMounted(const RefPtr& parentNode) override; + void OnChildNodeAdded(const RefPtr& child, int32_t slot) override; + void PrepareSpecializedComponent() override; + bool SetSpecializedAttr(const std::pair& attr) override; + RefPtr GetSpecializedComponent() override; + +private: + std::string points_; + RefPtr polygonComponent_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_POLYGON_H diff --git a/frameworks/bridge/common/dom/dom_svg_polyline.cpp b/frameworks/bridge/common/dom/dom_svg_polyline.cpp new file mode 100644 index 00000000..d81377ed --- /dev/null +++ b/frameworks/bridge/common/dom/dom_svg_polyline.cpp @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_svg_polyline.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { + +DOMSvgPolyline::DOMSvgPolyline(NodeId nodeId, const std::string& nodeName) : DOMSvgBase(nodeId, nodeName) {} + +bool DOMSvgPolyline::SetSpecializedAttr(const std::pair& attr) +{ + if (DOMSvgBase::SetPresentationAttr(attr)) { + return true; + } + if (attr.first == DOM_SVG_POINTS) { + points_ = attr.second; + return true; + } + return false; +} + +RefPtr DOMSvgPolyline::GetSpecializedComponent() +{ + return polylineComponent_; +} + +void DOMSvgPolyline::OnChildNodeAdded(const RefPtr& child, int32_t slot) +{ + polylineComponent_->InsertChild(slot, child->GetSpecializedComponent()); +} + +void DOMSvgPolyline::OnMounted(const RefPtr& parentNode) +{ + DOMSvgBase::InheritCommonAttrs(polylineComponent_, parentNode); +} + +void DOMSvgPolyline::PrepareSpecializedComponent() +{ + if (!polylineComponent_) { + polylineComponent_ = AceType::MakeRefPtr(); + } + polylineComponent_->SetPoints(points_); + DOMSvgBase::PrepareCommonAttrs(polylineComponent_); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_svg_polyline.h b/frameworks/bridge/common/dom/dom_svg_polyline.h new file mode 100644 index 00000000..fa311341 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_svg_polyline.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_POLYLINE_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_POLYLINE_H + +#include "frameworks/bridge/common/dom/dom_svg_base.h" +#include "frameworks/core/components/svg/svg_polyline_component.h" + +namespace OHOS::Ace::Framework { + +class ACE_EXPORT DOMSvgPolyline final : public DOMSvgBase { + DECLARE_ACE_TYPE(DOMSvgPolyline, DOMSvgBase); + +public: + DOMSvgPolyline(NodeId nodeId, const std::string& nodeName); + ~DOMSvgPolyline() override = default; + +protected: + void OnMounted(const RefPtr& parentNode) override; + void OnChildNodeAdded(const RefPtr& child, int32_t slot) override; + void PrepareSpecializedComponent() override; + bool SetSpecializedAttr(const std::pair& attr) override; + RefPtr GetSpecializedComponent() override; + +private: + std::string points_; + RefPtr polylineComponent_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_POLYLINE_H diff --git a/frameworks/bridge/common/dom/dom_svg_rect.cpp b/frameworks/bridge/common/dom/dom_svg_rect.cpp new file mode 100644 index 00000000..9cd1d98d --- /dev/null +++ b/frameworks/bridge/common/dom/dom_svg_rect.cpp @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_svg_rect.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { + +DOMSvgRect::DOMSvgRect(NodeId nodeId, const std::string& nodeName) : DOMSvgBase(nodeId, nodeName) {} + +bool DOMSvgRect::SetSpecializedAttr(const std::pair& attr) +{ + if (DOMSvgBase::SetPresentationAttr(attr)) { + return true; + } + if (attr.first == DOM_SVG_X) { + x_ = ParseDimension(attr.second); + return true; + } + if (attr.first == DOM_SVG_Y) { + y_ = ParseDimension(attr.second); + return true; + } + if (attr.first == DOM_SVG_RX) { + rx_ = ParseDimension(attr.second); + return true; + } + if (attr.first == DOM_SVG_RY) { + ry_ = ParseDimension(attr.second); + return true; + } + if (attr.first == DOM_SVG_WIDTH) { + width_ = ParseDimension(attr.second); + return true; + } + if (attr.first == DOM_SVG_HEIGHT) { + height_ = ParseDimension(attr.second); + return true; + } + return false; +} + +RefPtr DOMSvgRect::GetSpecializedComponent() +{ + return rectComponent_; +} + +void DOMSvgRect::OnChildNodeAdded(const RefPtr& child, int32_t slot) +{ + rectComponent_->InsertChild(slot, child->GetSpecializedComponent()); +} + +void DOMSvgRect::OnMounted(const RefPtr& parentNode) +{ + DOMSvgBase::InheritCommonAttrs(rectComponent_, parentNode); +} + +void DOMSvgRect::PrepareSpecializedComponent() +{ + if (!rectComponent_) { + rectComponent_ = AceType::MakeRefPtr(); + } + rectComponent_->SetX(x_); + rectComponent_->SetY(y_); + rectComponent_->SetHeight(height_); + rectComponent_->SetWidth(width_); + rectComponent_->SetRx(rx_); + rectComponent_->SetRy(ry_); + DOMSvgBase::PrepareCommonAttrs(rectComponent_); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_svg_rect.h b/frameworks/bridge/common/dom/dom_svg_rect.h new file mode 100644 index 00000000..486f468c --- /dev/null +++ b/frameworks/bridge/common/dom/dom_svg_rect.h @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_RECT_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_RECT_H + +#include "frameworks/bridge/common/dom/dom_svg_base.h" +#include "frameworks/core/components/svg/svg_rect_component.h" + +namespace OHOS::Ace::Framework { + +class DOMSvgRect final : public DOMSvgBase { + DECLARE_ACE_TYPE(DOMSvgRect, DOMSvgBase); + +public: + DOMSvgRect(NodeId nodeId, const std::string& nodeName); + ~DOMSvgRect() override = default; + +protected: + void OnMounted(const RefPtr& parentNode) override; + void OnChildNodeAdded(const RefPtr& child, int32_t slot) override; + void PrepareSpecializedComponent() override; + bool SetSpecializedAttr(const std::pair& attr) override; + RefPtr GetSpecializedComponent() override; + +private: + Dimension x_; + Dimension y_; + Dimension width_ = Dimension(-1.0); + Dimension height_ = Dimension(-1.0); + Dimension rx_; + Dimension ry_; + RefPtr rectComponent_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_RECT_H diff --git a/frameworks/bridge/common/dom/dom_svg_text.cpp b/frameworks/bridge/common/dom/dom_svg_text.cpp new file mode 100644 index 00000000..a262ae06 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_svg_text.cpp @@ -0,0 +1,117 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_svg_text.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { + +DOMSvgText::DOMSvgText(NodeId nodeId, const std::string& nodeName) : DOMSvgBase(nodeId, nodeName) {} + +bool DOMSvgText::SetSpecializedAttr(const std::pair& attr) +{ + if (DOMSvgBase::SetPresentationAttr(attr)) { + return true; + } + if (attr.first == DOM_VALUE) { + textData_ = attr.second; + return true; + } + if (attr.first == DOM_SVG_X) { + hasX_ = true; + x_ = ParseDimension(attr.second); + return true; + } + if (attr.first == DOM_SVG_Y) { + hasY_ = true; + y_ = ParseDimension(attr.second); + return true; + } + if (attr.first == DOM_SVG_DX) { + dx_ = ParseDimension(attr.second); + return true; + } + if (attr.first == DOM_SVG_DY) { + dy_ = ParseDimension(attr.second); + return true; + } + if (attr.first == DOM_SVG_ROTATE) { + rotate_ = ParseDouble(attr.second); + hasRotate_ = true; + return true; + } + if (attr.first == DOM_SVG_TEXT_LENGTH) { + textLength_ = ParseDimension(attr.second); + return true; + } + if (attr.first == DOM_SVG_LENGTH_ADJUST) { + lengthAdjust_ = attr.second; + return true; + } + return false; +} + +RefPtr DOMSvgText::GetSpecializedComponent() +{ + return textComponent_; +} + +void DOMSvgText::OnChildNodeAdded(const RefPtr& child, int32_t slot) +{ + textComponent_->InsertChild(slot, child->GetSpecializedComponent()); +} + +void DOMSvgText::OnMounted(const RefPtr& parentNode) +{ + auto svgNode = AceType::DynamicCast(parentNode); + if (svgNode) { + fillState_.Inherit(svgNode->GetFillState()); + strokeState_.Inherit(svgNode->GetStrokeState()); + textStyle_.Inherit(svgNode->GetTextStyle()); + textComponent_->SetFillState(fillState_); + textComponent_->SetStrokeState(strokeState_); + textComponent_->SetTextStyle(textStyle_); + } + + if (!hasRotate_) { + auto svgTextNode = AceType::DynamicCast(parentNode); + if (svgTextNode) { + rotate_ = svgTextNode->GetRotate(); + textComponent_->SetRotate(rotate_); + } + } +} + +void DOMSvgText::PrepareSpecializedComponent() +{ + if (!textComponent_) { + textComponent_ = AceType::MakeRefPtr(); + } + textComponent_->SetX(x_); + textComponent_->SetY(y_); + textComponent_->SetDx(dx_); + textComponent_->SetDy(dy_); + textComponent_->SetHasX(hasX_); + textComponent_->SetHasY(hasY_); + textComponent_->SetRotate(rotate_); + textComponent_->SetTextData(textData_); + textComponent_->SetTextLength(textLength_); + textComponent_->SetLengthAdjust(lengthAdjust_); + textComponent_->SetTextStyle(textStyle_); + DOMSvgBase::PrepareCommonAttrs(textComponent_); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_svg_text.h b/frameworks/bridge/common/dom/dom_svg_text.h new file mode 100644 index 00000000..9262e995 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_svg_text.h @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_SVG_TEXT_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_SVG_TEXT_H + +#include "frameworks/bridge/common/dom/dom_svg_base.h" +#include "frameworks/core/components/svg/svg_text_component.h" + +namespace OHOS::Ace::Framework { + +class ACE_EXPORT DOMSvgText : public DOMSvgBase { + DECLARE_ACE_TYPE(DOMSvgText, DOMSvgBase); + +public: + DOMSvgText(NodeId nodeId, const std::string& nodeName); + ~DOMSvgText() override = default; + +protected: + void OnMounted(const RefPtr& parentNode) override; + void OnChildNodeAdded(const RefPtr& child, int32_t slot) override; + void PrepareSpecializedComponent() override; + bool SetSpecializedAttr(const std::pair& attr) override; + RefPtr GetSpecializedComponent() override; + + RefPtr textComponent_; + + double GetRotate() const + { + return rotate_; + } + +private: + Dimension x_ = Dimension(0.0); + Dimension y_ = Dimension(0.0); + Dimension dx_ = Dimension(0.0); + Dimension dy_ = Dimension(0.0); + Dimension textLength_ = Dimension(0.0); + bool hasX_ = false; + bool hasY_ = false; + bool hasRotate_ = false; + double rotate_ = 0.0; + std::string lengthAdjust_ = "spacing"; // Value type: spacing|spacingAndGlyphs + std::string textData_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_SVG_TEXT_H diff --git a/frameworks/bridge/common/dom/dom_svg_text_path.cpp b/frameworks/bridge/common/dom/dom_svg_text_path.cpp new file mode 100644 index 00000000..41887961 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_svg_text_path.cpp @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_svg_text_path.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { + +DOMSvgTextPath::DOMSvgTextPath(NodeId nodeId, const std::string& nodeName) : DOMSvgBase(nodeId, nodeName) {} + +bool DOMSvgTextPath::SetSpecializedAttr(const std::pair& attr) +{ + if (DOMSvgBase::SetPresentationAttr(attr)) { + return true; + } + if (attr.first == DOM_VALUE) { + textData_ = attr.second; + return true; + } + if (attr.first == DOM_SVG_ATTR_PATH) { + path_ = attr.second; + return true; + } + if (attr.first == DOM_SVG_START_OFFSET) { + startOffset_ = ParseDimension(attr.second); + return true; + } + if (attr.first == DOM_SVG_TEXT_LENGTH) { + textLength_ = ParseDimension(attr.second); + return true; + } + if (attr.first == DOM_SVG_LENGTH_ADJUST) { + lengthAdjust_ = attr.second; + return true; + } + + + return false; +} + +RefPtr DOMSvgTextPath::GetSpecializedComponent() +{ + return textPathComponent_; +} + +void DOMSvgTextPath::OnChildNodeAdded(const RefPtr& child, int32_t slot) +{ + textPathComponent_->InsertChild(slot, child->GetSpecializedComponent()); +} + +void DOMSvgTextPath::OnMounted(const RefPtr& parentNode) +{ + auto svgNode = AceType::DynamicCast(parentNode); + if (svgNode) { + fillState_.Inherit(svgNode->GetFillState()); + strokeState_.Inherit(svgNode->GetStrokeState()); + textStyle_.Inherit(svgNode->GetTextStyle()); + textPathComponent_->SetFillState(fillState_); + textPathComponent_->SetStrokeState(strokeState_); + textPathComponent_->SetTextStyle(textStyle_); + } +} + +void DOMSvgTextPath::PrepareSpecializedComponent() +{ + if (!textPathComponent_) { + textPathComponent_ = AceType::MakeRefPtr(); + } + textPathComponent_->SetPath(path_); + textPathComponent_->SetStartOffset(startOffset_); + textPathComponent_->SetTextData(textData_); + textPathComponent_->SetTextLength(textLength_); + textPathComponent_->SetTextStyle(textStyle_); + textPathComponent_->SetLengthAdjust(lengthAdjust_); + DOMSvgBase::PrepareCommonAttrs(textPathComponent_); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_svg_text_path.h b/frameworks/bridge/common/dom/dom_svg_text_path.h new file mode 100644 index 00000000..ee8f036e --- /dev/null +++ b/frameworks/bridge/common/dom/dom_svg_text_path.h @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_SVG_TEXTPATH_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_SVG_TEXTPATH_H + +#include "frameworks/bridge/common/dom/dom_svg_base.h" +#include "frameworks/core/components/svg/svg_text_path_component.h" + +namespace OHOS::Ace::Framework { + +class DOMSvgTextPath : public DOMSvgBase { + DECLARE_ACE_TYPE(DOMSvgTextPath, DOMSvgBase); + +public: + DOMSvgTextPath(NodeId nodeId, const std::string& nodeName); + ~DOMSvgTextPath() override = default; + +protected: + void OnMounted(const RefPtr& parentNode) override; + void OnChildNodeAdded(const RefPtr& child, int32_t slot) override; + void PrepareSpecializedComponent() override; + bool SetSpecializedAttr(const std::pair& attr) override; + RefPtr GetSpecializedComponent() override; + + RefPtr textPathComponent_; + +private: + Dimension textLength_ = Dimension(0.0); + Dimension startOffset_ = Dimension(0.0); + std::string lengthAdjust_ = "spacing"; // Value type: spacing | spacingAndGlyphs + std::string path_; + std::string textData_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_SVG_TEXTPATH_H diff --git a/frameworks/bridge/common/dom/dom_svg_tspan.cpp b/frameworks/bridge/common/dom/dom_svg_tspan.cpp new file mode 100644 index 00000000..1ac66d32 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_svg_tspan.cpp @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_svg_tspan.h" + +#include "frameworks/bridge/common/utils/utils.h" +#include "frameworks/core/components/svg/svg_tspan_component.h" + +namespace OHOS::Ace::Framework { + +DOMSvgTspan::DOMSvgTspan(NodeId nodeId, const std::string& nodeName) : DOMSvgText(nodeId, nodeName) {} + +bool DOMSvgTspan::SetSpecializedAttr(const std::pair& attr) +{ + if (DOMSvgText::SetSpecializedAttr(attr)) { + return true; + } + return false; +} + +void DOMSvgTspan::PrepareSpecializedComponent() +{ + if (!textComponent_) { + textComponent_ = AceType::MakeRefPtr(); + } + DOMSvgText::PrepareSpecializedComponent(); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_svg_tspan.h b/frameworks/bridge/common/dom/dom_svg_tspan.h new file mode 100644 index 00000000..8014b37d --- /dev/null +++ b/frameworks/bridge/common/dom/dom_svg_tspan.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_SVG_TSPAN_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_SVG_TSPAN_H + +#include "frameworks/bridge/common/dom/dom_svg_text.h" + +namespace OHOS::Ace::Framework { + +class ACE_EXPORT DOMSvgTspan final : public DOMSvgText { + DECLARE_ACE_TYPE(DOMSvgTspan, DOMSvgText); + +public: + DOMSvgTspan(NodeId nodeId, const std::string& nodeName); + ~DOMSvgTspan() override = default; + +protected: + void PrepareSpecializedComponent() override; + bool SetSpecializedAttr(const std::pair& attr) override; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_SVG_TSPAN_H diff --git a/frameworks/bridge/common/dom/dom_swiper.cpp b/frameworks/bridge/common/dom/dom_swiper.cpp new file mode 100644 index 00000000..4d23e422 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_swiper.cpp @@ -0,0 +1,232 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_swiper.h" + +#include "base/utils/linear_map.h" +#include "base/utils/utils.h" +#include "core/components/common/properties/color.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +namespace { + +constexpr uint32_t METHOD_SWIPE_TO_ARGS_SIZE = 1; +constexpr double MAX_OPACITY = 255.0; +constexpr double INDICATOR_POINT_SCALE = 1.33; + +} // namespace + +DOMSwiper::DOMSwiper(NodeId nodeId, const std::string& nodeName) : DOMNode(nodeId, nodeName) +{ + swiperChild_ = AceType::MakeRefPtr(std::list>()); + indicator_ = AceType::MakeRefPtr(); + if (IsRightToLeft()) { + swiperChild_->SetTextDirection(TextDirection::RTL); + } +} + +void DOMSwiper::InitializeStyle() +{ + ResetInitializedStyle(); +} + +bool DOMSwiper::SetSpecializedAttr(const std::pair& attr) +{ + static const LinearMapNode swiperAttrsOperators[] = { + { DOM_SWIPER_ANIMATION_OPACITY, + [](const std::string& val, DOMSwiper& swiper) { + swiper.swiperChild_->SetAnimationOpacity(StringToBool(val)); } }, + { DOM_AUTOPLAY, + [](const std::string& val, DOMSwiper& swiper) { swiper.swiperChild_->SetAutoPlay(StringToBool(val)); } }, + { DOM_DIGITAL_INDICATOR, + [](const std::string& val, DOMSwiper& swiper) { + swiper.swiperChild_->SetDigitalIndicator(StringToBool(val)); + } }, + { DOM_DURATION, + [](const std::string& val, DOMSwiper& swiper) { swiper.swiperChild_->SetDuration(StringToDouble(val)); } }, + { DOM_INDEX, + [](const std::string& val, DOMSwiper& swiper) { + swiper.swiperChild_->SetIndex(StringUtils::StringToInt(val)); + } }, + { DOM_INDICATOR, + [](const std::string& val, DOMSwiper& swiper) { + swiper.showIndicator_ = StringToBool(val); + swiper.swiperChild_->SetIndicator(swiper.showIndicator_ ? swiper.indicator_ : nullptr); + } }, + { DOM_INDICATOR_DISABLED, + [](const std::string& val, DOMSwiper& swiper) { + swiper.indicator_->SetIndicatorDisabled(StringToBool(val)); + } }, + { DOM_INDICATOR_MASK, + [](const std::string& val, DOMSwiper& swiper) { swiper.indicator_->SetIndicatorMask(StringToBool(val)); } }, + { DOM_INTERVAL, [](const std::string& val, + DOMSwiper& swiper) { swiper.swiperChild_->SetAutoPlayInterval(StringToDouble(val)); } }, + { DOM_LOOP, + [](const std::string& val, DOMSwiper& swiper) { swiper.swiperChild_->SetLoop(StringToBool(val)); } }, + { DOM_VERTICAL, + [](const std::string& val, DOMSwiper& swiper) { + swiper.swiperChild_->SetAxis(StringToBool(val) ? Axis::VERTICAL : Axis::HORIZONTAL); + } }, + }; + auto operatorIter = BinarySearchFindIndex( + swiperAttrsOperators, ArraySize(swiperAttrsOperators), attr.first.c_str()); + if (operatorIter != -1) { + swiperAttrsOperators[operatorIter].value(attr.second, *this); + return true; + } else { + return false; + } +} + +bool DOMSwiper::SetSpecializedStyle(const std::pair& style) +{ + // static linear map must be sorted buy key. + static const LinearMapNode swiperStylesOperators[] = { + { DOM_ANIMATION_CURVE, + [](const std::string& val, DOMSwiper& swiper) { + swiper.swiperChild_->SetAnimationCurve(ConvertStrToAnimationCurve(val)); } }, + { DOM_INDICATOR_BOTTOM, [](const std::string& val, + DOMSwiper& swiper) { swiper.indicator_->SetBottom(swiper.ParseDimension(val)); } }, + { DOM_INDICATOR_COLOR, + [](const std::string& val, DOMSwiper& swiper) { swiper.indicator_->SetColor(swiper.ParseColor(val)); } }, + { DOM_INDICATOR_LEFT, + [](const std::string& val, DOMSwiper& swiper) { swiper.indicator_->SetLeft(swiper.ParseDimension(val)); } }, + { DOM_INDICATOR_RIGHT, [](const std::string& val, + DOMSwiper& swiper) { swiper.indicator_->SetRight(swiper.ParseDimension(val)); } }, + { DOM_INDICATOR_SELECTEDCOLOR, + [](const std::string& val, DOMSwiper& swiper) { + swiper.indicator_->SetSelectedColor(swiper.ParseColor(val)); + } }, + { DOM_INDICATOR_SIZE, + [](const std::string& val, DOMSwiper& swiper) { + Dimension indicatorSize = swiper.ParseDimension(val); + swiper.indicator_->SetSize(indicatorSize); + swiper.indicator_->SetSelectedSize(indicatorSize); + swiper.indicator_->SetPressSize(indicatorSize * INDICATOR_POINT_SCALE); + swiper.indicator_->SetHoverSize(indicatorSize * INDICATOR_POINT_SCALE * INDICATOR_POINT_SCALE); + } }, + { DOM_INDICATOR_TOP, + [](const std::string& val, DOMSwiper& swiper) { swiper.indicator_->SetTop(swiper.ParseDimension(val)); } }, + }; + auto operatorIter = + BinarySearchFindIndex(swiperStylesOperators, ArraySize(swiperStylesOperators), style.first.c_str()); + if (operatorIter != -1) { + swiperStylesOperators[operatorIter].value(style.second, *this); + return true; + } else { + return false; + } +} + +bool DOMSwiper::AddSpecializedEvent(int32_t pageId, const std::string& event) +{ + if (event == DOM_CHANGE) { + changeEventId_ = EventMarker(GetNodeIdForEvent(), event, pageId); + swiperChild_->SetChangeEventId(changeEventId_); + return true; + } else if (event == DOM_ROTATION) { + rotationEventId_ = EventMarker(GetNodeIdForEvent(), event, pageId); + swiperChild_->SetRotationEventId(rotationEventId_); + return true; + } else if (event == DOM_CLICK) { + clickEventId_ = EventMarker(GetNodeIdForEvent(), event, pageId); + swiperChild_->SetClickEventId(clickEventId_); + return true; + } else { + return false; + } +} + +void DOMSwiper::CallSpecializedMethod(const std::string& method, const std::string& args) +{ + LOGD("DOMSwiper CallSpecializedMethod"); + if (method == DOM_METHOD_SWIPE_TO) { + auto controller = swiperChild_->GetSwiperController(); + if (!controller) { + LOGE("get controller failed"); + return; + } + + std::unique_ptr argsValue = JsonUtil::ParseJsonString(args); + if (!argsValue || !argsValue->IsArray() || argsValue->GetArraySize() != METHOD_SWIPE_TO_ARGS_SIZE) { + LOGE("parse args error"); + return; + } + + std::unique_ptr indexValue = argsValue->GetArrayItem(0)->GetValue("index"); + if (!indexValue || !indexValue->IsNumber()) { + LOGE("get index failed"); + return; + } + int32_t index = indexValue->GetInt(); + controller->SwipeTo(index); + } else if (method == DOM_METHOD_SHOW_PREVIOUS) { + auto controller = swiperChild_->GetSwiperController(); + if (!controller) { + return; + } + controller->ShowPrevious(); + } else if (method == DOM_METHOD_SHOW_NEXT) { + auto controller = swiperChild_->GetSwiperController(); + if (!controller) { + return; + } + controller->ShowNext(); + } else if (method == DOM_ROTATION) { + auto controller = swiperChild_->GetRotationController(); + if (controller) { + LOGD("DOMSwiper rotation focus request"); + controller->RequestRotation(true); + } + } +} + +void DOMSwiper::OnChildNodeAdded(const RefPtr& child, int32_t slot) +{ + ACE_DCHECK(child); + auto display = AceType::MakeRefPtr(child->GetRootComponent()); + display->SetOpacity(MAX_OPACITY); + swiperChild_->InsertChild(slot, display); +} + +void DOMSwiper::OnChildNodeRemoved(const RefPtr& child) +{ + ACE_DCHECK(child); + swiperChild_->RemoveChild(child->GetRootComponent()); +} + +void DOMSwiper::PrepareSpecializedComponent() +{ + if (showIndicator_) { + swiperChild_->SetIndicator(indicator_); + } + swiperChild_->SetShow(GetDisplay() == DisplayType::NO_SETTING || GetDisplay() == DisplayType::FLEX); +} + +void DOMSwiper::ResetInitializedStyle() +{ + RefPtr theme = GetTheme(); + if (theme) { + indicator_->InitStyle(theme); + } +} + +void DOMSwiper::AdjustSpecialParamInLiteMode() +{ + showIndicator_ = false; +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_swiper.h b/frameworks/bridge/common/dom/dom_swiper.h new file mode 100644 index 00000000..a71a7eff --- /dev/null +++ b/frameworks/bridge/common/dom/dom_swiper.h @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_SWIPER_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_SWIPER_H + +#include "core/components/swiper/swiper_component.h" +#include "frameworks/bridge/common/dom/dom_node.h" + +namespace OHOS::Ace::Framework { + +class DOMSwiper final : public DOMNode { + DECLARE_ACE_TYPE(DOMSwiper, DOMNode); + +public: + DOMSwiper(NodeId nodeId, const std::string& nodeName); + ~DOMSwiper() override = default; + + void InitializeStyle() override; + + void CallSpecializedMethod(const std::string& method, const std::string& args) override; + + RefPtr GetSpecializedComponent() override + { + return swiperChild_; + } + void AdjustSpecialParamInLiteMode() override; + +protected: + void OnChildNodeAdded(const RefPtr& child, int32_t slot) override; + void OnChildNodeRemoved(const RefPtr& child) override; + bool SetSpecializedAttr(const std::pair& attr) override; + bool SetSpecializedStyle(const std::pair& style) override; + bool AddSpecializedEvent(int32_t pageId, const std::string& event) override; + void PrepareSpecializedComponent() override; + void ResetInitializedStyle() override; + +private: + bool showIndicator_ = true; + RefPtr indicator_; + EventMarker changeEventId_; + EventMarker rotationEventId_; + EventMarker clickEventId_; + RefPtr swiperChild_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_SWIPER_H diff --git a/frameworks/bridge/common/dom/dom_switch.cpp b/frameworks/bridge/common/dom/dom_switch.cpp new file mode 100644 index 00000000..c755b2b1 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_switch.cpp @@ -0,0 +1,179 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_switch.h" + +#include "base/i18n/localization.h" +#include "base/utils/linear_map.h" +#include "base/utils/utils.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +namespace { + +constexpr Dimension BOX_HOVER_RADIUS = 8.0_vp; + +} // namespace + +DOMSwitch::DOMSwitch(NodeId nodeId, const std::string& nodeName) : DOMNode(nodeId, nodeName) +{ + switchChild_ = AceType::MakeRefPtr(nullptr); + switchChild_->SetTextOn(Localization::GetInstance()->GetEntryLetters("switch.on")); + switchChild_->SetTextOff(Localization::GetInstance()->GetEntryLetters("switch.off")); + if (IsRightToLeft()) { + switchChild_->SetTextDirection(TextDirection::RTL); + } +} + +void DOMSwitch::InitializeStyle() +{ + ResetInitializedStyle(); +} + +void DOMSwitch::ResetInitializedStyle() +{ + RefPtr theme = GetTheme(); + if (theme) { + switchChild_->ApplyTheme(theme); + } + switchChild_->SetTextOn(Localization::GetInstance()->GetEntryLetters("switch.on")); + switchChild_->SetTextOff(Localization::GetInstance()->GetEntryLetters("switch.off")); +} + +bool DOMSwitch::SetSpecializedAttr(const std::pair& attr) +{ + static const LinearMapNode + switchAttrOperators[] = { + { DOM_CHECKED, [](const std::string& val, SwitchComponent& textSwitch, + TextStyle& textStyle) { textSwitch.SetValue(StringToBool(val)); } }, + { DOM_DISABLED, [](const std::string& val, SwitchComponent& textSwitch, + TextStyle& textStyle) { textSwitch.SetDisabled(StringToBool(val)); } }, + { DOM_SHOW_TEXT, [](const std::string& val, SwitchComponent& textSwitch, + TextStyle& textStyle) { textSwitch.SetShowText(StringToBool(val)); } }, + { DOM_TEXT_OFF, [](const std::string& val, SwitchComponent& textSwitch, + TextStyle& textStyle) { textSwitch.SetTextOff(val); } }, + { DOM_TEXT_ON, [](const std::string& val, SwitchComponent& textSwitch, + TextStyle& textStyle) { textSwitch.SetTextOn(val); } }, + }; + auto operatorIter = BinarySearchFindIndex( + switchAttrOperators, ArraySize(switchAttrOperators), attr.first.c_str()); + if (operatorIter != -1) { + switchAttrOperators[operatorIter].value(attr.second, *switchChild_, textStyle_); + return true; + } + return false; +} + +bool DOMSwitch::SetSpecializedStyle(const std::pair& style) +{ + static const LinearMapNode + switchTextOperators[] = { + { DOM_TEXT_ALLOW_SCALE, [](const std::string& val, const DOMSwitch& node, SwitchComponent& textSwitch, + TextStyle& textStyle) { textStyle.SetAllowScale(StringToBool(val)); } }, + { DOM_TEXT_FONT_FAMILY, + [](const std::string& val, const DOMSwitch& node, SwitchComponent& textSwitch, TextStyle& textStyle) { + textStyle.SetFontFamilies(node.ParseFontFamilies(val)); + } }, + { DOM_TEXT_FONT_SIZE, [](const std::string& val, const DOMSwitch& node, SwitchComponent& textSwitch, + TextStyle& textStyle) { textStyle.SetFontSize(node.ParseDimension(val)); } }, + { DOM_TEXT_FONT_STYLE, [](const std::string& val, const DOMSwitch& node, SwitchComponent& textSwitch, + TextStyle& textStyle) { textStyle.SetFontStyle(ConvertStrToFontStyle(val)); } }, + { DOM_TEXT_FONT_WEIGHT, [](const std::string& val, const DOMSwitch& node, SwitchComponent& textSwitch, + TextStyle& textStyle) { textStyle.SetFontWeight(ConvertStrToFontWeight(val)); } }, + { DOM_TEXT_LETTER_SPACING, [](const std::string& val, const DOMSwitch& node, SwitchComponent& textSwitch, + TextStyle& textStyle) { textStyle.SetLetterSpacing(StringToDouble(val)); } }, + { DOM_TEXT_DECORATION, + [](const std::string& val, const DOMSwitch& node, SwitchComponent& textSwitch, TextStyle& textStyle) { + textStyle.SetTextDecoration(ConvertStrToTextDecoration(val)); + } }, + { DOM_TEXT_PADDING, [](const std::string& val, const DOMSwitch& node, SwitchComponent& textSwitch, + TextStyle& textStyle) { textSwitch.SetTextPadding(node.ParseDimension(val)); } }, + { DOM_TEXT_OFF_COLOR, [](const std::string& val, const DOMSwitch& node, SwitchComponent& textSwitch, + TextStyle& textStyle) { textSwitch.SetTextColorOff(node.ParseColor(val)); } }, + { DOM_TEXT_ON_COLOR, [](const std::string& val, const DOMSwitch& node, SwitchComponent& textSwitch, + TextStyle& textStyle) { textSwitch.SetTextColorOn(node.ParseColor(val)); } }, + }; + auto operatorIter = BinarySearchFindIndex(switchTextOperators, ArraySize(switchTextOperators), style.first.c_str()); + if (operatorIter != -1) { + switchTextOperators[operatorIter].value(style.second, *this, *switchChild_, textStyle_); + return true; + } + return false; +} + +bool DOMSwitch::AddSpecializedEvent(int32_t pageId, const std::string& event) +{ + if (event == DOM_CHANGE) { + changeEvent_ = EventMarker(GetNodeIdForEvent(), event, pageId); + switchChild_->SetChangeEvent(changeEvent_); + return true; + } else if (event == DOM_CLICK) { + switchChild_->SetClickEvent(EventMarker(GetNodeIdForEvent(), event, pageId)); + } + return false; +} + +void DOMSwitch::PrepareCheckedListener() +{ + auto weak = AceType::WeakClaim(this); + auto checkableChangeCallback = [weak](const std::string& checked) { + auto domNode = weak.Upgrade(); + if (!domNode) { + LOGE("get dom node failed!"); + return; + } + bool isChecked = checked.find("\"checked\":true") != std::string::npos; + std::string checkedString = isChecked ? "true" : "false"; + domNode->SetSpecializedAttr(std::make_pair(DOM_CHECKED, checkedString)); + domNode->OnChecked(isChecked); + }; + auto checkableChangeMarker = BackEndEventManager::GetInstance().GetAvailableMarker(); + BackEndEventManager::GetInstance().BindBackendEvent( + checkableChangeMarker, checkableChangeCallback); + switchChild_->SetDomChangeEvent(checkableChangeMarker); +} + +void DOMSwitch::PrepareSpecializedComponent() +{ + if (boxComponent_) { + boxComponent_->SetMouseAnimationType(HoverAnimationType::OPACITY); + if (!boxComponent_->GetBackDecoration()) { + RefPtr backDecoration = AceType::MakeRefPtr(); + backDecoration->SetBorderRadius(Radius(BOX_HOVER_RADIUS)); + boxComponent_->SetBackDecoration(backDecoration); + } + } + if (HasCheckedPseudo()) { + PrepareCheckedListener(); + } + switchChild_->SetTextStyle(textStyle_); +#ifndef WEARABLE_PRODUCT + if (!multimodalProperties_.IsUnavailable() && multimodalProperties_.scene == SceneLabel::SWITCH) { + switchChild_->SetMultimodalProperties(multimodalProperties_); + } +#endif + RefPtr theme = GetTheme(); + if (switchChild_->GetShowText()) { + return; + } + if (boxComponent_->GetHeightDimension().Value() < 0.0 && theme) { + boxComponent_->SetHeight(theme->GetHeight().Value(), theme->GetHeight().Unit()); + } + if (boxComponent_->GetWidthDimension().Value() < 0.0 && theme) { + boxComponent_->SetWidth(theme->GetWidth().Value(), theme->GetWidth().Unit()); + } +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_switch.h b/frameworks/bridge/common/dom/dom_switch.h new file mode 100644 index 00000000..8710c6d1 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_switch.h @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_SWITCH_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_SWITCH_H + +#include "core/components/checkable/checkable_component.h" +#include "frameworks/bridge/common/dom/dom_node.h" + +namespace OHOS::Ace::Framework { + +class DOMSwitch final : public DOMNode { + DECLARE_ACE_TYPE(DOMSwitch, DOMNode); + +public: + DOMSwitch(NodeId nodeId, const std::string& nodeName); + ~DOMSwitch() override = default; + + RefPtr GetSpecializedComponent() override + { + return switchChild_; + } + + void InitializeStyle() override; + + void ResetInitializedStyle() override; + +protected: + bool SetSpecializedAttr(const std::pair& attr) override; + bool SetSpecializedStyle(const std::pair& style) override; + bool AddSpecializedEvent(int32_t pageId, const std::string& event) override; + void PrepareSpecializedComponent() override; + +private: + TextStyle textStyle_; + EventMarker changeEvent_; + RefPtr switchChild_; + + void PrepareCheckedListener(); +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_SWITCH_H diff --git a/frameworks/bridge/common/dom/dom_tab_bar.cpp b/frameworks/bridge/common/dom/dom_tab_bar.cpp new file mode 100644 index 00000000..8028f1a1 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_tab_bar.cpp @@ -0,0 +1,169 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_tab_bar.h" + +#include "core/components/tab_bar/tab_theme.h" +#include "core/components/theme/theme_manager.h" +#include "frameworks/bridge/common/dom/dom_type.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { + +DOMTabBar::DOMTabBar(NodeId nodeId, const std::string& nodeName) : DOMNode(nodeId, nodeName) +{ + std::list> tabBars; + RefPtr controller; + tabBarIndicator_ = AceType::MakeRefPtr(); + tabBarChild_ = AceType::MakeRefPtr(tabBars, controller, tabBarIndicator_); + if (IsRightToLeft()) { + tabBarChild_->SetTextDirection(TextDirection::RTL); + } +} + +void DOMTabBar::InitializeStyle() +{ + RefPtr theme = GetTheme(); + if (theme && boxComponent_) { + boxComponent_->SetColor(theme->GetBackgroundColor()); + } +} + +bool DOMTabBar::SetSpecializedAttr(const std::pair& attr) +{ + if (attr.first == DOM_TAB_BAR_MODE) { + tabBarMode_ = attr.second == "fixed" ? TabBarMode::FIXED : TabBarMode::SCROLLABEL; + return true; + } + return false; +} + +void DOMTabBar::OnChildNodeAdded(const RefPtr& child, int32_t slot) +{ + if (!child) { + LOGE("Child is nullptr, add node failed, slot:%{public}d.", slot); + return; + } + if (tabBarChild_) { + LOGD("DOMTabBar Add Child in slot(=%{public}d)", slot); + tabBarChild_->InsertChild(slot, child->GetRootComponent()); + } +} + +void DOMTabBar::UpdateIndex(uint32_t currentIndex) +{ + uint32_t index = 0; + for (const auto& childNode : GetChildList()) { + if (index == currentIndex) { + OnChildActive(childNode, true); + } else if (index == lastIndex_) { + OnChildActive(childNode, false); + } + index++; + } + lastIndex_ = currentIndex; +} + +void DOMTabBar::OnMounted(const RefPtr& parentNode) +{ + if (!parentNode) { + LOGE("parentNode is nullptr, mount node failed"); + return; + } + if (parentNode->GetTag() == DOM_NODE_TAG_TABS) { + const auto& parentNodeTmp = AceType::DynamicCast(parentNode); + if (!parentNodeTmp) { + LOGE("DynamicCast DOMTabs failed"); + return; + } + lastIndex_ = parentNodeTmp->GetTabIndex(); + controllerId_ = parentNodeTmp->GetTabControllerId(); + const auto& controller = parentNodeTmp->GetTabController(); + controller->SetIndex(lastIndex_); + tabBarChild_->SetController(controller); + PrepareChangeListener(); + } +} + +void DOMTabBar::OnChildNodeRemoved(const RefPtr& child) +{ + if (!child) { + LOGE("Child is nullptr, remove node failed."); + return; + } + if (tabBarChild_) { + LOGD("DOMTabBar remove child"); + tabBarChild_->RemoveChild(child->GetRootComponent()); + } +} + +void DOMTabBar::ResetInitializedStyle() +{ + if (!boxComponent_) { + LOGE("BoxComponent is null, reset style failed."); + return; + } + RefPtr theme = GetTheme(); + if (theme) { + tabBarChild_->InitStyle(theme); + if (vertical_) { + if (LessOrEqual(GetWidth().Value(), 0.0)) { + boxComponent_->SetWidth(theme->GetDefaultWidth().Value(), theme->GetDefaultWidth().Unit()); + } + } else { + if (LessOrEqual(GetHeight().Value(), 0.0)) { + boxComponent_->SetHeight(theme->GetDefaultHeight().Value(), theme->GetDefaultHeight().Unit()); + } + } + } +} + +void DOMTabBar::PrepareSpecializedComponent() +{ + tabBarChild_->SetMode(tabBarMode_); + const auto& parentNodeTmp = AceType::DynamicCast(parentNode_.Upgrade()); + if (parentNodeTmp) { + vertical_ = parentNodeTmp->IsVertical(); + } + tabBarChild_->SetVertical(vertical_); + ResetInitializedStyle(); +} + +void DOMTabBar::PrepareChangeListener() +{ + // used for initailzed the active tabBarItem + auto weak = AceType::WeakClaim(this); + auto changeCallback = [weak](uint32_t currentIndex) { + auto tabBarNode = weak.Upgrade(); + if (!tabBarNode) { + LOGE("get dom node failed!"); + return; + } + tabBarNode->UpdateIndex(currentIndex); + }; + auto changeMarker = BackEndEventManager::GetInstance().GetAvailableMarker(); + BackEndEventManager::GetInstance().BindBackendEvent(changeMarker, changeCallback); + tabBarChild_->SetDomChangeEventId(changeMarker); +} + +void DOMTabBar::OnChildActive(const RefPtr& node, bool active) +{ + node->OnActive(active); + for (const auto& childNode : node->GetChildList()) { + childNode->OnActive(active); + } +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_tab_bar.h b/frameworks/bridge/common/dom/dom_tab_bar.h new file mode 100644 index 00000000..c36aa76a --- /dev/null +++ b/frameworks/bridge/common/dom/dom_tab_bar.h @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_TAB_BAR_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_TAB_BAR_H + +#include "core/components/tab_bar/tab_bar_component.h" +#include "core/components/tab_bar/tab_bar_indicator_component.h" +#include "core/components/tab_bar/tab_bar_item_component.h" +#include "frameworks/bridge/common/dom/dom_node.h" +#include "frameworks/bridge/common/dom/dom_tabs.h" + +namespace OHOS::Ace::Framework { + +class DOMTabBar final : public DOMNode { + DECLARE_ACE_TYPE(DOMTabBar, DOMNode); + +public: + DOMTabBar(NodeId nodeId, const std::string& nodeName); + ~DOMTabBar() override = default; + + void InitializeStyle() override; + + RefPtr GetSpecializedComponent() override + { + return tabBarChild_; + } + + void UpdateIndex(uint32_t currentIndex); + + void BindToTabs(const RefPtr& tabsNode) + { + OnMounted(tabsNode); + } + +protected: + void OnMounted(const RefPtr& parentNode) override; + void OnChildNodeAdded(const RefPtr& child, int32_t slot) override; + void OnChildNodeRemoved(const RefPtr& child) override; + bool SetSpecializedAttr(const std::pair& attr) override; + void PrepareSpecializedComponent() override; + void ResetInitializedStyle() override; + +private: + void PrepareChangeListener(); + void OnChildActive(const RefPtr& node, bool active); + + RefPtr tabBarChild_; + RefPtr tabBarIndicator_; + uint32_t lastIndex_ = 0; + uint32_t controllerId_ = 0; + bool vertical_ = false; + TabBarMode tabBarMode_ = TabBarMode::SCROLLABEL; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_TAB_BAR_H diff --git a/frameworks/bridge/common/dom/dom_tab_content.cpp b/frameworks/bridge/common/dom/dom_tab_content.cpp new file mode 100644 index 00000000..16b64bf8 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_tab_content.cpp @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_tab_content.h" + +#include "frameworks/bridge/common/dom/dom_tab_bar.h" +#include "frameworks/bridge/common/dom/dom_type.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { + +DOMTabContent::DOMTabContent(NodeId nodeId, const std::string& nodeName) : DOMNode(nodeId, nodeName) +{ + std::list> tabContents; + RefPtr controller; + tabContentChild_ = AceType::MakeRefPtr(tabContents, controller); + if (IsRightToLeft()) { + tabContentChild_->SetTextDirection(TextDirection::RTL); + } +} + +bool DOMTabContent::SetSpecializedAttr(const std::pair& attr) +{ + if (attr.first == DOM_TAB_CONTENT_SCROLLABEL) { + scrollable_ = StringToBool(attr.second); + tabContentChild_->SetScrollable(scrollable_); + return true; + } + return false; +} + +void DOMTabContent::OnChildNodeAdded(const RefPtr& child, int32_t slot) +{ + if (!child) { + LOGE("Child is nullptr, add node failed, slot:%{public}d.", slot); + return; + } + if (tabContentChild_) { + tabContentChild_->InsertChild(slot, child->GetRootComponent()); + } +} + +void DOMTabContent::PrepareChangeListener(const RefPtr& parentNode) +{ + auto weak = AceType::WeakClaim(this); + auto changeCallback = [weak, parentNode](uint32_t currentIndex) { + auto domNode = weak.Upgrade(); + if (!domNode) { + LOGE("get dom node failed!"); + return; + } + + for (const auto& node : parentNode->GetChildList()) { + if (node->GetTag() == DOM_NODE_TAG_TAB_BAR) { + const auto& tabBarNode = AceType::DynamicCast(node); + if (tabBarNode) { + tabBarNode->UpdateIndex(currentIndex); + break; + } + } + } + }; + auto changeMarker = BackEndEventManager::GetInstance().GetAvailableMarker(); + BackEndEventManager::GetInstance().BindBackendEvent(changeMarker, changeCallback); + tabContentChild_->SetDomChangeEventId(changeMarker); +} + +void DOMTabContent::OnMounted(const RefPtr& parentNode) +{ + if (!parentNode) { + return; + } + if (parentNode->GetTag() == DOM_NODE_TAG_TABS) { + const auto& parentNodeTmp = AceType::DynamicCast(parentNode); + if (!parentNodeTmp) { + return; + } + index_ = parentNodeTmp->GetTabIndex(); + controllerId_ = parentNodeTmp->GetTabControllerId(); + const auto& controller = parentNodeTmp->GetTabController(); + controller->SetIndex(index_); + tabContentChild_->SetController(controller); + + vertical_ = parentNodeTmp->IsVertical(); + tabContentChild_->SetVertical(vertical_); + + changeEventId_ = EventMarker( + parentNodeTmp->GetTabEventId(), parentNodeTmp->GetTabEventType(), parentNodeTmp->GetTabPageId()); + if (parentNodeTmp->GetTabEventType() == DOM_CHANGE) { + tabContentChild_->SetChangeEventId(changeEventId_); + } + PrepareChangeListener(parentNodeTmp); + } +} + +void DOMTabContent::OnChildNodeRemoved(const RefPtr& child) +{ + if (!child) { + LOGE("Child is nullptr, remove node failed."); + return; + } + if (tabContentChild_) { + tabContentChild_->RemoveChild(child->GetRootComponent()); + } +} + +void DOMTabContent::PrepareSpecializedComponent() {} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_tab_content.h b/frameworks/bridge/common/dom/dom_tab_content.h new file mode 100644 index 00000000..2af9f69f --- /dev/null +++ b/frameworks/bridge/common/dom/dom_tab_content.h @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_TAB_CONTENT_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_TAB_CONTENT_H + +#include "core/components/tab_bar/tab_content_component.h" +#include "frameworks/bridge/common/dom/dom_node.h" +#include "frameworks/bridge/common/dom/dom_tabs.h" + +namespace OHOS::Ace::Framework { + +class DOMTabContent final : public DOMNode { + DECLARE_ACE_TYPE(DOMTabContent, DOMNode); + +public: + DOMTabContent(NodeId nodeId, const std::string& nodeName); + ~DOMTabContent() override = default; + + RefPtr GetSpecializedComponent() override + { + return tabContentChild_; + } + +protected: + void OnMounted(const RefPtr& parentNode) override; + void OnChildNodeAdded(const RefPtr& child, int32_t slot) override; + void OnChildNodeRemoved(const RefPtr& child) override; + bool SetSpecializedAttr(const std::pair& attr) override; + void PrepareSpecializedComponent() override; + +private: + RefPtr tabContentChild_; + EventMarker changeEventId_; + uint32_t index_ = 0; + uint32_t controllerId_ = 0; + bool scrollable_ = true; + bool vertical_ = false; + + void PrepareChangeListener(const RefPtr& parentNode); +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_TAB_CONTENT_H diff --git a/frameworks/bridge/common/dom/dom_tabs.cpp b/frameworks/bridge/common/dom/dom_tabs.cpp new file mode 100644 index 00000000..7cb8de8d --- /dev/null +++ b/frameworks/bridge/common/dom/dom_tabs.cpp @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_tabs.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { + +// global variable to track the tabs' controllerId +static uint32_t g_domNodeControllerId = 0; + +uint32_t DOMTabs::GetGlobalTabControllerId() +{ + return ++g_domNodeControllerId; +} + +DOMTabs::DOMTabs(NodeId nodeId, const std::string& nodeName) : DOMNode(nodeId, nodeName) +{ + flexChild_ = AceType::MakeRefPtr( + FlexAlign::FLEX_START, FlexAlign::CENTER, std::list>()); + tabControllerId_ = GetGlobalTabControllerId(); + tabController_ = TabController::GetController(tabControllerId_); +} + +bool DOMTabs::SetSpecializedAttr(const std::pair& attr) +{ + if (attr.first == TAB_INDEX) { + tabIndex_ = std::max(0, StringToInt(attr.second)); + LOGD("DOMTabs Index: %{public}u ControllerId: %{public}u", tabIndex_, tabControllerId_); + return true; + } else if (attr.first == TAB_IS_VERTICAL) { + vertical_ = StringToBool(attr.second); + if (vertical_) { + flexChild_ = AceType::MakeRefPtr( + FlexAlign::FLEX_START, FlexAlign::CENTER, std::list>()); + if (IsRightToLeft()) { + flexChild_->SetTextDirection(TextDirection::RTL); + } + } + return true; + } + return false; +} + +bool DOMTabs::AddSpecializedEvent(int32_t pageId, const std::string& event) +{ + if (event == DOM_CHANGE) { + tabPageId_ = pageId; + tabEventId_ = GetNodeIdForEvent(); + tabEventType_ = event; + LOGD("DOMTabs AddEvent pageId:%{private}u EventId:%{private}s EventType:%{private}s", + tabPageId_, tabEventId_.c_str(), tabEventType_.c_str()); + return true; + } + return false; +} + +void DOMTabs::OnChildNodeAdded(const RefPtr& child, int32_t slot) +{ + if (!child) { + LOGE("Child is nullptr, add node failed, slot:%{public}d.", slot); + return; + } + flexChild_->InsertChild(slot, child->GetRootComponent()); +} + +void DOMTabs::OnChildNodeRemoved(const RefPtr& child) +{ + if (!child) { + LOGE("Child is nullptr, remove node failed."); + return; + } + flexChild_->RemoveChild(child->GetRootComponent()); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_tabs.h b/frameworks/bridge/common/dom/dom_tabs.h new file mode 100644 index 00000000..bb645b9a --- /dev/null +++ b/frameworks/bridge/common/dom/dom_tabs.h @@ -0,0 +1,105 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_TABS_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_TABS_H + +#include "core/components/flex/flex_component.h" +#include "core/components/tab_bar/tab_controller.h" +#include "frameworks/bridge/common/dom/dom_node.h" + +namespace OHOS::Ace::Framework { + +class DOMTabs final : public DOMNode { + DECLARE_ACE_TYPE(DOMTabs, DOMNode); + +public: + DOMTabs(NodeId nodeId, const std::string& nodeName); + ~DOMTabs() override = default; + + uint32_t GetTabIndex() const + { + return tabIndex_; + } + + uint32_t GetTabControllerId() const + { + return tabControllerId_; + } + + const RefPtr& GetTabController() const + { + return tabController_; + } + + uint32_t GetTabPageId() const + { + return tabPageId_; + } + + const std::string& GetTabEventId() const + { + return tabEventId_; + } + + const std::string& GetTabEventType() const + { + return tabEventType_; + } + + bool IsVertical() const + { + return vertical_; + } + + RefPtr GetSpecializedComponent() override + { + return flexChild_; + } + + void OnPageLoadFinish() override + { + if (tabController_) { + tabController_->SetPageReady(true); + } + } + +protected: + void OnMounted(const RefPtr& parentNode) override {}; + void OnChildNodeAdded(const RefPtr& child, int32_t slot) override; + void OnChildNodeRemoved(const RefPtr& child) override; + bool SetSpecializedAttr(const std::pair& attr) override; + bool AddSpecializedEvent(int32_t pageId, const std::string& event) override; + +private: + static uint32_t GetGlobalTabControllerId(); + + RefPtr flexChild_; + RefPtr tabController_; + + // Record the tabs component info for its children (tab_bars and tab_contents) + uint32_t tabIndex_ = 0; + uint32_t tabControllerId_ = 0; + uint32_t tabPageId_ = 0; + std::string tabEventId_; + std::string tabEventType_; + + // Record the tab is verical or horizontal + bool vertical_ = false; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_TABS_H diff --git a/frameworks/bridge/common/dom/dom_text.cpp b/frameworks/bridge/common/dom/dom_text.cpp new file mode 100644 index 00000000..df39dd8c --- /dev/null +++ b/frameworks/bridge/common/dom/dom_text.cpp @@ -0,0 +1,240 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_text.h" + +#include "core/common/ace_application_info.h" +#include "core/components/text/text_theme.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +namespace { + +constexpr double DEFAULT_LETTER_SPACING = 0; // unit is px +constexpr double DEFAULT_LINE_HEIGHT = 0; // unit is px +const char DEFAULT_FONT_FAMILY[] = "sans-serif"; + +} // namespace + +DOMText::DOMText(NodeId nodeId, const std::string& nodeName) : DOMNode(nodeId, nodeName) +{ + textChild_ = AceType::MakeRefPtr(""); + if (IsRightToLeft()) { + textChild_->SetTextDirection(TextDirection::RTL); + } +} + +void DOMText::ResetInitializedStyle() +{ + InitializeStyle(); +} + +bool DOMText::SetSpecializedAttr(const std::pair& attr) +{ + if (attr.first == DOM_VALUE) { + textChild_->SetData(attr.second); + return true; + } + LOGD("Use default text attribute"); + return false; +} + +bool DOMText::SetSpecializedStyle(const std::pair& style) +{ + // static linear map must be sorted by key. + static const LinearMapNode + textStyleOperators[] = { + { DOM_TEXT_ALLOW_SCALE, [](const std::string& val, const DOMText& node, TextComponent& text, + TextStyle& textStyle) { textStyle.SetAllowScale(StringToBool(val)); } }, + { DOM_TEXT_COLOR, [](const std::string& val, const DOMText& node, TextComponent& text, + TextStyle& textStyle) { textStyle.SetTextColor(node.ParseColor(val)); } }, + { DOM_TEXT_FONT_FAMILY, [](const std::string& val, const DOMText& node, TextComponent& text, + TextStyle& textStyle) { textStyle.SetFontFamilies(node.ParseFontFamilies(val)); } }, + { DOM_TEXT_FONT_SIZE, [](const std::string& val, const DOMText& node, TextComponent& text, + TextStyle& textStyle) { textStyle.SetFontSize(node.ParseDimension(val)); } }, + { DOM_TEXT_FONT_SIZE_STEP, + [](const std::string& val, const DOMText& node, TextComponent& text, TextStyle& textStyle) { + textStyle.SetAdaptFontSizeStep(node.ParseDimension(val)); + } }, + { DOM_TEXT_FONT_STYLE, [](const std::string& val, const DOMText& node, TextComponent& text, + TextStyle& textStyle) { textStyle.SetFontStyle(ConvertStrToFontStyle(val)); } }, + { DOM_TEXT_FONT_WEIGHT, [](const std::string& val, const DOMText& node, TextComponent& text, + TextStyle& textStyle) { textStyle.SetFontWeight(ConvertStrToFontWeight(val)); } }, + { DOM_TEXT_LETTER_SPACING, [](const std::string& val, const DOMText& node, TextComponent& text, + TextStyle& textStyle) { textStyle.SetLetterSpacing(StringToDouble(val)); } }, + { DOM_TEXT_LINE_HEIGHT, [](const std::string& val, const DOMText& node, TextComponent& text, + TextStyle& textStyle) { textStyle.SetLineHeight(node.ParseLineHeight(val)); } }, + { DOM_TEXT_LINES, [](const std::string& val, const DOMText& node, TextComponent& text, + TextStyle& textStyle) { textStyle.SetMaxLines(StringUtils::StringToInt(val)); } }, + { DOM_TEXT_MAX_FONT_SIZE, + [](const std::string& val, const DOMText& node, TextComponent& text, TextStyle& textStyle) { + textStyle.SetAdaptMaxFontSize(node.ParseDimension(val)); + } }, + { DOM_TEXT_MAX_LINES, [](const std::string& val, const DOMText& node, TextComponent& text, + TextStyle& textStyle) { textStyle.SetMaxLines(StringUtils::StringToInt(val)); } }, + { DOM_TEXT_MIN_FONT_SIZE, + [](const std::string& val, const DOMText& node, TextComponent& text, TextStyle& textStyle) { + textStyle.SetAdaptMinFontSize(node.ParseDimension(val)); + } }, + { DOM_TEXT_PREFER_FONT_SIZES, + [](const std::string& val, const DOMText& node, TextComponent& text, TextStyle& textStyle) { + textStyle.SetPreferFontSizes(node.ParsePreferFontSizes(val)); + } }, + { DOM_TEXT_ALIGN, [](const std::string& val, const DOMText& node, TextComponent& text, + TextStyle& textStyle) { textStyle.SetTextAlign(ConvertStrToTextAlign(val)); } }, + { DOM_TEXT_DECORATION, + [](const std::string& val, const DOMText& node, TextComponent& text, TextStyle& textStyle) { + textStyle.SetTextDecoration(ConvertStrToTextDecoration(val)); + } }, + { DOM_TEXT_OVERFLOW, + [](const std::string& val, const DOMText& node, TextComponent& text, + TextStyle& textStyle) { textStyle.SetTextOverflow(ConvertStrToTextOverflow(val)); + } }, + { DOM_TEXT_WORD_BREAK, + [](const std::string& val, const DOMText& node, TextComponent& text, + TextStyle& textStyle) { textStyle.SetWordBreak(ConvertStrToWordBreak(val)); + } }, + }; + auto operatorIter = BinarySearchFindIndex(textStyleOperators, ArraySize(textStyleOperators), style.first.c_str()); + if (operatorIter != -1) { + textStyleOperators[operatorIter].value(style.second, *this, *textChild_, textStyle_); + if (style.first == DOM_TEXT_COLOR) { + hasSetTextColor_ = true; + } else if (style.first == DOM_TEXT_FONT_SIZE) { + hasSetTextFontSize_ = true; + } else { + LOGD("DOMText has no font-size and color"); + } + return true; + } + return false; +} + +void DOMText::CheckAndSetSpanStyle(const RefPtr& dmoSpan, TextStyle& spanStyle) +{ + if (!dmoSpan->HasSetFontSize()) { + LOGD("Set Text Font Size to Span"); + spanStyle.SetFontSize(textStyle_.GetFontSize()); + } + if (!dmoSpan->HasSetFontStyle()) { + LOGD("Set Text Font Style to Span"); + spanStyle.SetFontStyle(textStyle_.GetFontStyle()); + } + if (!dmoSpan->HasSetFontColor()) { + LOGD("Set Text Font Color to Span"); + spanStyle.SetTextColor(textStyle_.GetTextColor()); + } + if (!dmoSpan->HasSetFontWeight()) { + LOGD("Set Text Font Weight to Span"); + spanStyle.SetFontWeight(textStyle_.GetFontWeight()); + } + if (!dmoSpan->HasSetTextDecoration()) { + LOGD("Set Text Decoration to Span"); + spanStyle.SetTextDecoration(textStyle_.GetTextDecoration()); + } + if (!dmoSpan->HasSetFontFamily()) { + LOGD("Set Text Font Family to Span"); + spanStyle.SetFontFamilies(textStyle_.GetFontFamilies()); + } + if (!dmoSpan->HasSetAllowScale()) { + LOGD("Set Allow Scale to Span"); + spanStyle.SetAllowScale(textStyle_.IsAllowScale()); + } + spanStyle.SetLetterSpacing(textStyle_.GetLetterSpacing()); + spanStyle.SetLineHeight(textStyle_.GetLineHeight(), textStyle_.HasHeightOverride()); +} + +void DOMText::OnChildNodeAdded(const RefPtr& child, int32_t slot) +{ + ACE_DCHECK(child); + auto spanComponent = AceType::DynamicCast(child->GetSpecializedComponent()); + if (!spanComponent) { + LOGW("text only support span child"); + return; + } + + // If span component has no developer-set styles, then set text styles to span + TextStyle spanStyle = spanComponent->GetTextStyle(); + auto domSpan = AceType::DynamicCast(child); + ACE_DCHECK(domSpan); + CheckAndSetSpanStyle(domSpan, spanStyle); + domSpan->SetTextStyle(spanStyle); + spanComponent->SetTextStyle(spanStyle); + textChild_->InsertChild(slot, child->GetRootComponent()); +} + +void DOMText::OnChildNodeRemoved(const RefPtr& child) +{ + ACE_DCHECK(child); + textChild_->RemoveChild(child->GetRootComponent()); +} + +void DOMText::PrepareSpecializedComponent() +{ + bool isCard = AceApplicationInfo::GetInstance().GetIsCardType(); + if (isCard) { + textStyle_.SetAllowScale(false); + if (textStyle_.GetFontSize().Unit() == DimensionUnit::FP) { + textStyle_.SetAllowScale(true); + } + } + textChild_->SetTextStyle(textStyle_); + // Text focus color is same as text style color. + textChild_->SetFocusColor(textStyle_.GetTextColor()); + textChild_->SetMaxWidthLayout(boxComponent_->GetWidthDimension().IsValid()); + + // set box align + if (!textChild_->GetMaxWidthLayout()) { + SetBoxAlignForText(); + } +} + +void DOMText::SetBoxAlignForText() +{ + switch (textStyle_.GetTextAlign()) { + case TextAlign::LEFT: + SetAlignment(Alignment::CENTER_LEFT); + break; + case TextAlign::CENTER: + SetAlignment(Alignment::CENTER); + break; + case TextAlign::RIGHT: + SetAlignment(Alignment::CENTER_RIGHT); + break; + case TextAlign::START: + SetAlignment(IsRightToLeft() ? Alignment::CENTER_RIGHT : Alignment::CENTER_LEFT); + break; + case TextAlign::END: + SetAlignment(IsRightToLeft() ? Alignment::CENTER_LEFT : Alignment::CENTER_RIGHT); + break; + default: + break; + } +} + +void DOMText::InitializeStyle() +{ + RefPtr theme = GetTheme(); + if (theme) { + textStyle_ = theme->GetTextStyle(); + std::vector defaultFontFamilis; + defaultFontFamilis.emplace_back(DEFAULT_FONT_FAMILY); + textStyle_.SetFontFamilies(defaultFontFamilis); + textStyle_.SetLetterSpacing(DEFAULT_LETTER_SPACING); + textStyle_.SetLineHeight(Dimension(DEFAULT_LINE_HEIGHT, DimensionUnit::PX), false); + } +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_text.h b/frameworks/bridge/common/dom/dom_text.h new file mode 100644 index 00000000..f49ed260 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_text.h @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_TEXT_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_TEXT_H + +#include "core/components/text/text_component.h" +#include "frameworks/bridge/common/dom/dom_node.h" +#include "frameworks/bridge/common/dom/dom_span.h" +#include "frameworks/bridge/common/dom/dom_type.h" + +namespace OHOS::Ace::Framework { + +class DOMText : public DOMNode { + DECLARE_ACE_TYPE(DOMText, DOMNode); + +public: + DOMText(NodeId nodeId, const std::string& nodeName); + ~DOMText() override = default; + + void InitializeStyle() override; + + RefPtr GetSpecializedComponent() override + { + return textChild_; + } + + bool HasSetFontColor() const + { + return hasSetTextColor_; + } + + bool HasSetFontSize() const + { + return hasSetTextFontSize_; + } + +protected: + bool SetSpecializedAttr(const std::pair& attr) override; + bool SetSpecializedStyle(const std::pair& style) override; + void OnChildNodeAdded(const RefPtr& child, int32_t slot) override; + void OnChildNodeRemoved(const RefPtr& child) override; + void PrepareSpecializedComponent() override; + void ResetInitializedStyle() override; + + RefPtr textChild_; + +private: + void CheckAndSetSpanStyle(const RefPtr& dmoSpan, TextStyle& spanStyle); + void SetBoxAlignForText(); + + bool hasSetTextFontSize_ = false; + bool hasSetTextColor_ = false; + TextStyle textStyle_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_TEXT_H diff --git a/frameworks/bridge/common/dom/dom_textarea.cpp b/frameworks/bridge/common/dom/dom_textarea.cpp new file mode 100644 index 00000000..0d12ccda --- /dev/null +++ b/frameworks/bridge/common/dom/dom_textarea.cpp @@ -0,0 +1,354 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_textarea.h" + +#include + +#include "frameworks/bridge/common/dom/input/dom_textfield_util.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +namespace { + +constexpr uint32_t TEXTAREA_MAXLENGTH_VALUE_DEFAULT = std::numeric_limits::max(); +constexpr Dimension BOX_HOVER_RADIUS = 18.0_vp; + +} // namespace + +DOMTextarea::DOMTextarea(NodeId nodeId, const std::string& nodeName) : DOMNode(nodeId, nodeName) +{ + textAreaChild_ = AceType::MakeRefPtr(); + textAreaChild_->SetTextInputType(TextInputType::MULTILINE); + textAreaChild_->SetTextEditController(AceType::MakeRefPtr()); + textAreaChild_->SetTextFieldController(AceType::MakeRefPtr()); + if (IsRightToLeft()) { + textAreaChild_->SetTextDirection(TextDirection::RTL); + } +} + +void DOMTextarea::ResetInitializedStyle() +{ + InitializeStyle(); +} + +void DOMTextarea::InitializeStyle() +{ + auto boxComponent = GetBoxComponent(); + auto component = textAreaChild_; + auto theme = GetTheme(); + if (!boxComponent || !component || !theme) { + return; + } + + component->SetTextMaxLines(TEXTAREA_MAXLENGTH_VALUE_DEFAULT); + component->SetCursorColor(theme->GetCursorColor()); + component->SetPlaceholderColor(theme->GetPlaceholderColor()); + component->SetFocusBgColor(theme->GetFocusBgColor()); + component->SetFocusPlaceholderColor(theme->GetFocusPlaceholderColor()); + component->SetFocusTextColor(theme->GetFocusTextColor()); + component->SetBgColor(theme->GetBgColor()); + component->SetTextColor(theme->GetTextColor()); + component->SetSelectedColor(theme->GetSelectedColor()); + component->SetHoverColor(theme->GetHoverColor()); + component->SetPressColor(theme->GetPressColor()); + textStyle_.SetTextColor(theme->GetTextColor()); + textStyle_.SetFontSize(theme->GetFontSize()); + textStyle_.SetFontWeight(theme->GetFontWeight()); + std::vector textareaFontFamilyValueDefault = { + "sans-serif", + }; + textStyle_.SetFontFamilies(textareaFontFamilyValueDefault); + component->SetTextStyle(textStyle_); + component->SetCountTextStyle(theme->GetCountTextStyle()); + component->SetOverCountStyle(theme->GetOverCountStyle()); + component->SetCountTextStyleOuter(theme->GetCountTextStyleOuter()); + component->SetOverCountStyleOuter(theme->GetOverCountStyleOuter()); + + component->SetErrorBorderWidth(theme->GetErrorBorderWidth()); + component->SetErrorBorderColor(theme->GetErrorBorderColor()); + + RefPtr backDecoration = AceType::MakeRefPtr(); + backDecoration->SetPadding(theme->GetPadding()); + backDecoration->SetBackgroundColor(theme->GetBgColor()); + defaultRadius_ = theme->GetBorderRadius(); + backDecoration->SetBorderRadius(defaultRadius_); + if (boxComponent->GetBackDecoration()) { + backDecoration->SetImage(boxComponent->GetBackDecoration()->GetImage()); + backDecoration->SetGradient(boxComponent->GetBackDecoration()->GetGradient()); + } + component->SetDecoration(backDecoration); + component->SetIconSize(theme->GetIconSize()); + component->SetIconHotZoneSize(theme->GetIconHotZoneSize()); + + boxComponent->SetBackDecoration(backDecoration); + boxComponent->SetPadding(theme->GetPadding()); +} + +bool DOMTextarea::SetSpecializedAttr(const std::pair& attr) +{ + static const DOMTextareaMap textAreaAttrMap = { + { DOM_TEXTAREA_VALUE, + [](const std::string& val, DOMTextarea& textarea) { textarea.textAreaChild_->SetValue(val); } }, + { DOM_DISABLED, [](const std::string& val, + DOMTextarea& textarea) { textarea.textAreaChild_->SetEnabled(!StringToBool(val)); } }, + { DOM_TEXTAREA_PLACEHOLDER, + [](const std::string& val, DOMTextarea& textarea) { textarea.textAreaChild_->SetPlaceholder(val); } }, + { DOM_TEXTAREA_MAXLENGTH, + [](const std::string& val, DOMTextarea& textarea) { + int32_t tmp = StringUtils::StringToInt(val); + textarea.textAreaChild_->SetMaxLength( + tmp >= 0 ? (uint32_t)(tmp) : std::numeric_limits::max()); + } }, + { DOM_TEXTAREA_MAXLINES, + [](const std::string& val, DOMTextarea& textarea) { + textarea.textAreaChild_->SetTextMaxLines(std::max(StringToInt(val), 1)); + } }, + { DOM_TEXTAREA_OBSCURE, [](const std::string& val, + DOMTextarea& textarea) { textarea.textAreaChild_->SetObscure(StringToBool(val)); } }, + { DOM_TEXTAREA_EXTEND, [](const std::string& val, + DOMTextarea& textarea) { textarea.textAreaChild_->SetExtend(StringToBool(val)); } }, + { DOM_TEXTAREA_SHOW_COUNTER, + [](const std::string& val, DOMTextarea& textarea) { + textarea.textAreaChild_->SetShowCounter(StringToBool(val)); + } }, + { DOM_ICON_SRC, + [](const std::string& val, DOMTextarea& textarea) { textarea.textAreaChild_->SetIconImage(val); } }, + }; + auto textareaAttrIter = textAreaAttrMap.find(attr.first); + if (textareaAttrIter != textAreaAttrMap.end()) { + textareaAttrIter->second(attr.second, *this); + return true; + } + return false; +} + +bool DOMTextarea::SetSpecializedStyle(const std::pair& style) +{ + if (!textAreaChild_) { + return false; + } + static const DOMTextareaMap textAreaStyleMap = { + { DOM_BACKGROUND_COLOR, + [](const std::string& val, DOMTextarea& textarea) { + textarea.textAreaChild_->SetBgColor(textarea.ParseColor(val)); + textarea.textAreaChild_->SetFocusBgColor(textarea.ParseColor(val)); + } }, + { DOM_TEXTAREA_COLOR, + [](const std::string& val, DOMTextarea& textarea) { + textarea.textStyle_.SetTextColor(textarea.ParseColor(val)); + textarea.textAreaChild_->SetFocusTextColor(textarea.ParseColor(val)); + } }, + { DOM_TEXTAREA_FONT_SIZE, + [](const std::string& val, DOMTextarea& textarea) { + textarea.textStyle_.SetFontSize(textarea.ParseDimension(val)); + } }, + { DOM_TEXTAREA_FONT_WEIGHT, + [](const std::string& val, DOMTextarea& textarea) { + textarea.textStyle_.SetFontWeight(ConvertStrToFontWeight(val)); + } }, + { DOM_TEXTAREA_PLACEHOLDER_COLOR, + [](const std::string& val, DOMTextarea& textarea) { + textarea.textAreaChild_->SetPlaceholderColor(textarea.ParseColor(val)); + textarea.textAreaChild_->SetFocusPlaceholderColor(textarea.ParseColor(val)); + } }, + { DOM_TEXTAREA_FONT_FAMILY, + [](const std::string& val, DOMTextarea& textarea) { + textarea.textStyle_.SetFontFamilies(textarea.ParseFontFamilies(val)); + } }, + { DOM_TEXT_ALLOW_SCALE, [](const std::string& val, + DOMTextarea& textarea) { textarea.textStyle_.SetAllowScale(StringToBool(val)); } }, + { DOM_TEXTAREA_CURSOR_COLOR, + [](const std::string& val, DOMTextarea& textarea) { + textarea.textAreaChild_->SetCursorColor(textarea.ParseColor(val)); + } }, + { DOM_PADDING, + [](const std::string& val, DOMTextarea& textarea) { + Edge padding; + if (Edge::FromString(val, padding)) { + textarea.textAreaChild_->GetDecoration()->SetPadding(padding); + } + } }, + { DOM_PADDING_LEFT, + [](const std::string& val, DOMTextarea& textarea) { + auto padding = textarea.textAreaChild_->GetDecoration()->GetPadding(); + padding.SetLeft(textarea.ParseDimension(val)); + textarea.textAreaChild_->GetDecoration()->SetPadding(padding); + } }, + { DOM_PADDING_RIGHT, + [](const std::string& val, DOMTextarea& textarea) { + auto padding = textarea.textAreaChild_->GetDecoration()->GetPadding(); + padding.SetRight(textarea.ParseDimension(val)); + textarea.textAreaChild_->GetDecoration()->SetPadding(padding); + } }, + { DOM_PADDING_TOP, + [](const std::string& val, DOMTextarea& textarea) { + auto padding = textarea.textAreaChild_->GetDecoration()->GetPadding(); + padding.SetTop(textarea.ParseDimension(val)); + textarea.textAreaChild_->GetDecoration()->SetPadding(padding); + } }, + { DOM_PADDING_BOTTOM, + [](const std::string& val, DOMTextarea& textarea) { + auto padding = textarea.textAreaChild_->GetDecoration()->GetPadding(); + padding.SetBottom(textarea.ParseDimension(val)); + textarea.textAreaChild_->GetDecoration()->SetPadding(padding); + } }, + { DOM_PADDING_START, + [](const std::string& val, DOMTextarea& textarea) { + auto padding = textarea.textAreaChild_->GetDecoration()->GetPadding(); + textarea.IsRightToLeft() ? padding.SetRight(textarea.ParseDimension(val)) + : padding.SetLeft(textarea.ParseDimension(val)); + textarea.textAreaChild_->GetDecoration()->SetPadding(padding); + } }, + { DOM_PADDING_END, + [](const std::string& val, DOMTextarea& textarea) { + auto padding = textarea.textAreaChild_->GetDecoration()->GetPadding(); + textarea.IsRightToLeft() ? padding.SetLeft(textarea.ParseDimension(val)) + : padding.SetRight(textarea.ParseDimension(val)); + textarea.textAreaChild_->GetDecoration()->SetPadding(padding); + } }, + }; + auto textareaStyleIter = textAreaStyleMap.find(style.first); + if (textareaStyleIter != textAreaStyleMap.end()) { + textareaStyleIter->second(style.second, *this); + return true; + } + hasBoxRadius_ = DOMTextFieldUtil::IsRadiusStyle(style.first); + return false; +} + +bool DOMTextarea::AddSpecializedEvent(int32_t pageId, const std::string& event) +{ + static const LinearMapNode&, const EventMarker&)> eventOperators[] = { + { DOM_CHANGE, [](const RefPtr& component, + const EventMarker& event) { component->SetOnTextChange(event); } }, + { DOM_CLICK, + [](const RefPtr& component, const EventMarker& event) { component->SetOnTap(event); } }, + { DOM_LONG_PRESS, [](const RefPtr& component, + const EventMarker& event) { component->SetOnLongPress(event); } }, + { DOM_INPUT_EVENT_OPTION_SELECT, [](const RefPtr& component, + const EventMarker& event) { component->SetOnOptionsClick(event); } }, + { DOM_INPUT_EVENT_SEARCH, [](const RefPtr& component, + const EventMarker& event) { component->SetOnSearch(event); } }, + { DOM_INPUT_EVENT_SHARE, [](const RefPtr& component, + const EventMarker& event) { component->SetOnShare(event); } }, + { DOM_INPUT_EVENT_TRANSLATE, [](const RefPtr& component, + const EventMarker& event) { component->SetOnTranslate(event); } }, + }; + auto operatorIter = BinarySearchFindIndex(eventOperators, ArraySize(eventOperators), event.c_str()); + if (operatorIter != -1) { + eventOperators[operatorIter].value(textAreaChild_, EventMarker(GetNodeIdForEvent(), event, pageId)); + return true; + } + return false; +} + +void DOMTextarea::CallSpecializedMethod(const std::string& method, const std::string& args) +{ + if (method == DOM_INPUT_METHOD_DELETE) { + auto textField = AceType::DynamicCast(textAreaChild_); + if (!textField) { + return; + } + auto controller = textField->GetTextFieldController(); + if (!controller) { + return; + } + controller->Delete(); + } +} + +void DOMTextarea::OnRequestFocus(bool shouldFocus) +{ + if (!textAreaChild_) { + return; + } + auto textFieldController = textAreaChild_->GetTextFieldController(); + if (!textFieldController) { + return; + } + textFieldController->Focus(shouldFocus); +} + +void DOMTextarea::PrepareSpecializedComponent() +{ + RefPtr boxComponent = GetBoxComponent(); + if (!boxComponent || !textAreaChild_) { + return; + } + boxComponent_->SetMouseAnimationType(HoverAnimationType::OPACITY); + textAreaChild_->SetTextStyle(textStyle_); + textAreaChild_->SetInputOptions(inputOptions_); + UpdateDecoration(); + boxComponent->SetPadding(Edge()); + boxComponent->SetDeliverMinToChild(true); + auto theme = GetTheme(); + if (boxComponent_->GetHeightDimension().Value() < 0.0 && theme) { + boxComponent->SetHeight(theme->GetHeight().Value(), theme->GetHeight().Unit()); + } + textAreaChild_->SetHeight(boxComponent_->GetHeightDimension()); + if (textAreaChild_->IsExtend()) { + boxComponent_->SetHeight(-1.0, DimensionUnit::PX); + } +} + +void DOMTextarea::UpdateDecoration() +{ + RefPtr boxComponent = GetBoxComponent(); + if (!boxComponent || !textAreaChild_) { + return; + } + RefPtr backDecoration = boxComponent->GetBackDecoration(); + + // set box border properties to child component + RefPtr decoration = textAreaChild_->GetDecoration(); + if (backDecoration) { + Border boxBorder = backDecoration->GetBorder(); + if (decoration) { + if (hasBoxRadius_) { + decoration->SetBorder(boxBorder); + } else { + Border border = decoration->GetBorder(); + border.SetLeftEdge(boxBorder.Left()); + border.SetRightEdge(boxBorder.Right()); + border.SetTopEdge(boxBorder.Top()); + border.SetBottomEdge(boxBorder.Bottom()); + decoration->SetBorder(border); + } + textAreaChild_->SetOriginBorder(decoration->GetBorder()); + } + // clear box properties + if (backDecoration->GetImage() || backDecoration->GetGradient().IsValid()) { + // clear box properties except background image + backDecoration->SetBackgroundColor(Color::TRANSPARENT); + Border border; + if (!hasBoxRadius_) { + border.SetBorderRadius(defaultRadius_); + } else { + border.SetTopLeftRadius(boxBorder.TopLeftRadius()); + border.SetTopRightRadius(boxBorder.TopRightRadius()); + border.SetBottomLeftRadius(boxBorder.BottomLeftRadius()); + border.SetBottomRightRadius(boxBorder.BottomRightRadius()); + } + backDecoration->SetBorder(border); + } else { + RefPtr backDecoration = AceType::MakeRefPtr(); + backDecoration->SetBorderRadius(Radius(BOX_HOVER_RADIUS)); + boxComponent->SetBackDecoration(backDecoration); + } + } +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_textarea.h b/frameworks/bridge/common/dom/dom_textarea.h new file mode 100644 index 00000000..57050e19 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_textarea.h @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_TEXTAREA_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_TEXTAREA_H + +#include "core/components/text_field/text_field_component.h" +#include "core/components/text_field/textfield_theme.h" +#include "core/components/theme/theme_manager.h" +#include "frameworks/bridge/common/dom/dom_input.h" +#include "frameworks/bridge/common/dom/dom_node.h" +#include "frameworks/bridge/common/dom/dom_type.h" + +namespace OHOS::Ace::Framework { + +class DOMTextarea final : public DOMNode { + DECLARE_ACE_TYPE(DOMTextarea, DOMNode); + +public: + using DOMTextareaMap = std::unordered_map; + + DOMTextarea(NodeId nodeId, const std::string& nodeName); + ~DOMTextarea() override = default; + + void InitializeStyle() override; + void OnRequestFocus(bool shouldFocus) override; + + RefPtr GetSpecializedComponent() override + { + return textAreaChild_; + } + + void SetInputOptions(const std::vector& inputOptions) + { + inputOptions_ = inputOptions; + } + +protected: + bool SetSpecializedAttr(const std::pair& attr) override; + bool SetSpecializedStyle(const std::pair& style) override; + bool AddSpecializedEvent(int32_t pageId, const std::string& event) override; + void CallSpecializedMethod(const std::string& method, const std::string& args) override; + void PrepareSpecializedComponent() override; + void ResetInitializedStyle() override; + +private: + void UpdateDecoration(); + + bool hasBoxRadius_ = false; + RefPtr textAreaChild_; + TextStyle textStyle_; + + // Callback id for when text is changed. + EventMarker onTextChange_; + Radius defaultRadius_; + + std::vector inputOptions_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_TEXTAREA_H diff --git a/frameworks/bridge/common/dom/dom_toggle.cpp b/frameworks/bridge/common/dom/dom_toggle.cpp new file mode 100644 index 00000000..f0bcb894 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_toggle.cpp @@ -0,0 +1,205 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_toggle.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { + +DOMToggle::DOMToggle(NodeId nodeId, const std::string& nodeName) : DOMNode(nodeId, nodeName) +{ + toggleChild_ = AceType::MakeRefPtr(); + textChild_ = AceType::MakeRefPtr(""); + paddingChild_ = AceType::MakeRefPtr(); + paddingChild_->SetChild(textChild_); + toggleChild_->SetChild(paddingChild_); + if (IsRightToLeft()) { + textChild_->SetTextDirection(TextDirection::RTL); + } +} + +void DOMToggle::InitializeStyle() +{ + ResetInitializedStyle(); +} + +void DOMToggle::ResetInitializedStyle() +{ + toggleTheme_ = GetTheme(); + if (!toggleTheme_) { + LOGE("toggleTheme is null"); + return; + } + paddingChild_->SetPadding(toggleTheme_->GetPadding()); + toggleChild_->SetBackgroundColor(toggleTheme_->GetBackgroundColor()); + toggleChild_->SetCheckedColor(toggleTheme_->GetCheckedColor()); + toggleChild_->SetPressedBlendColor(toggleTheme_->GetPressedBlendColor()); + textStyle_ = toggleTheme_->GetTextStyle(); + textStyle_.SetMaxLines(1); + textStyle_.SetTextOverflow(TextOverflow::ELLIPSIS); + textStyle_.SetTextAlign(TextAlign::LEFT); + blendOpacity_ = toggleTheme_->GetDisabledAlpha(); +} + +bool DOMToggle::SetSpecializedAttr(const std::pair& attr) +{ + static const LinearMapNode toggleAttrOperators[] = { + { DOM_TOGGLE_CHECKED_STATE, + [](DOMToggle& toggle, const std::string& value) { + toggle.toggleChild_->SetCheckedState(StringToBool(value)); + } }, + { DOM_DISABLED, [](DOMToggle& toggle, const std::string& value) { toggle.isDisabled_ = StringToBool(value); } }, + { DOM_TEXT_VALUE, [](DOMToggle& toggle, const std::string& value) { toggle.textChild_->SetData(value); } }, + }; + auto operatorIter = BinarySearchFindIndex(toggleAttrOperators, ArraySize(toggleAttrOperators), attr.first.c_str()); + if (operatorIter != -1) { + toggleAttrOperators[operatorIter].value(*this, attr.second); + return true; + } + return false; +} + +bool DOMToggle::SetSpecializedStyle(const std::pair& style) +{ + const static LinearMapNode toggleStyleOperators[] = { + { DOM_TEXT_ALLOW_SCALE, + [](DOMToggle& toggle, const std::string& value) { toggle.textStyle_.SetAllowScale(StringToBool(value)); } }, + { DOM_TOGGLE_BACKGROUND_COLOR, + [](DOMToggle& toggle, const std::string& value) { + if (toggle.HasCheckedPseudo()) { + toggle.toggleChild_->SetCheckedColor(toggle.ParseColor(value)); + } else { + toggle.toggleChild_->SetBackgroundColor(toggle.ParseColor(value)); + } + } }, + { DOM_TOGGLE_CHECKED_COLOR, + [](DOMToggle& toggle, const std::string& value) { + toggle.toggleChild_->SetCheckedColor(toggle.ParseColor(value)); + } }, + { DOM_TEXT_FONT_FAMILY, + [](DOMToggle& toggle, const std::string& value) { + toggle.textStyle_.SetFontFamilies(toggle.ParseFontFamilies(value)); + } }, + { DOM_TEXT_FONT_SIZE, + [](DOMToggle& toggle, const std::string& value) { + toggle.textStyle_.SetFontSize(toggle.ParseDimension(value)); + } }, + { DOM_TEXT_FONT_STYLE, + [](DOMToggle& toggle, const std::string& value) { + toggle.textStyle_.SetFontStyle(ConvertStrToFontStyle(value)); + } }, + { DOM_TEXT_FONT_WEIGHT, + [](DOMToggle& toggle, const std::string& value) { + toggle.textStyle_.SetFontWeight(ConvertStrToFontWeight(value)); + } }, + { DOM_TOGGLE_HEIGHT, + [](DOMToggle& toggle, const std::string& value) { + toggle.toggleChild_->SetHeight(toggle.ParseDimension(value)); + } }, + { DOM_TOGGLE_TEXT_COLOR, + [](DOMToggle& toggle, const std::string& value) { + toggle.textStyle_.SetTextColor(toggle.ParseColor(value)); + } }, + { DOM_TOGGLE_WIDTH, + [](DOMToggle& toggle, const std::string& value) { + toggle.toggleChild_->SetWidth(toggle.ParseDimension(value)); + } }, + }; + auto operatorIter = + BinarySearchFindIndex(toggleStyleOperators, ArraySize(toggleStyleOperators), style.first.c_str()); + if (operatorIter != -1) { + toggleStyleOperators[operatorIter].value(*this, style.second); + return true; + } + return false; +} + +bool DOMToggle::AddSpecializedEvent(int32_t pageId, const std::string& event) +{ + static const LinearMapNode toggleEventOperators[] = { + { DOM_CHANGE, [](DOMToggle& toggle, const EventMarker& event) { toggle.toggleChild_->SetChangeEvent(event); } }, + { DOM_CLICK, [](DOMToggle& toggle, const EventMarker& event) { toggle.toggleChild_->SetClickEvent(event); } }, + }; + auto operatorIter = BinarySearchFindIndex(toggleEventOperators, ArraySize(toggleEventOperators), event.c_str()); + if (operatorIter != -1) { + toggleEventOperators[operatorIter].value(*this, EventMarker(GetNodeIdForEvent(), event, pageId)); + return true; + } + return false; +} + +void DOMToggle::PrepareSpecializedComponent() +{ + ResetColorStyle(); + if (isDisabled_) { + PrepareDisabledStyle(); + } + textStyle_.SetAdaptTextSize(textStyle_.GetFontSize(), textStyle_.GetFontSize()); + textChild_->SetTextStyle(textStyle_); + textChild_->SetFocusColor(textStyle_.GetTextColor()); + if (!boxComponent_) { + return; + } + boxComponent_->SetDeliverMinToChild(true); + if (!NearZero(toggleChild_->GetWidth().Value())) { + boxComponent_->SetWidth(toggleChild_->GetWidth().Value(), toggleChild_->GetWidth().Unit()); + } + if (!NearZero(toggleChild_->GetHeight().Value())) { + boxComponent_->SetHeight(toggleChild_->GetHeight().Value(), toggleChild_->GetHeight().Unit()); + } else { + boxComponent_->SetHeight(toggleTheme_->GetHeight().Value(), toggleTheme_->GetHeight().Unit()); + } + auto backDecoration = boxComponent_->GetBackDecoration(); + if (backDecoration) { + if (backDecoration->GetImage()) { + toggleChild_->SetBackgroundColor(Color::TRANSPARENT); + } + backDecoration->SetBorderRadius(Radius(boxComponent_->GetHeightDimension() / 2.0)); + } + + // Set the padding on the box to the toggle + auto edge = boxComponent_->GetPadding(); + if (edge == Edge::NONE) { + return; + } + paddingChild_->SetPadding(edge); + boxComponent_->SetPadding(Edge()); +} + +void DOMToggle::ResetColorStyle() +{ + if (!colorChanged_) { + textColor_ = textStyle_.GetTextColor(); + backgroundColor_ = toggleChild_->GetBackgroundColor(); + checkedColor_ = toggleChild_->GetCheckedColor(); + } + textStyle_.SetTextColor(textColor_); + toggleChild_->SetBackgroundColor(backgroundColor_); + toggleChild_->SetCheckedColor(checkedColor_); +} + +void DOMToggle::PrepareDisabledStyle() +{ + if (HasDisabledPseudo()) { + return; + } + textStyle_.SetTextColor(textStyle_.GetTextColor().BlendOpacity(blendOpacity_)); + toggleChild_->SetBackgroundColor(toggleChild_->GetBackgroundColor().BlendOpacity(blendOpacity_)); + toggleChild_->SetCheckedColor(toggleChild_->GetCheckedColor().BlendOpacity(blendOpacity_)); + colorChanged_ = true; +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_toggle.h b/frameworks/bridge/common/dom/dom_toggle.h new file mode 100644 index 00000000..17320c93 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_toggle.h @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_TOGGLE_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_TOGGLE_H + +#include "core/components/padding/padding_component.h" +#include "core/components/text/text_component.h" +#include "core/components/toggle/toggle_component.h" +#include "core/components/toggle/toggle_theme.h" +#include "frameworks/bridge/common/dom/dom_node.h" +#include "frameworks/bridge/common/dom/dom_type.h" + +namespace OHOS::Ace::Framework { + +class DOMToggle final : public DOMNode { + DECLARE_ACE_TYPE(DOMToggle, DOMNode); + +public: + DOMToggle(NodeId nodeId, const std::string& nodeName); + ~DOMToggle() override = default; + + void InitializeStyle() override; + + RefPtr GetSpecializedComponent() override + { + return toggleChild_; + } + +protected: + bool SetSpecializedAttr(const std::pair& attr) override; + bool SetSpecializedStyle(const std::pair& style) override; + bool AddSpecializedEvent(int32_t pageId, const std::string& event) override; + void PrepareSpecializedComponent() override; + void ResetInitializedStyle() override; + +private: + void PrepareDisabledStyle(); + void ResetColorStyle(); + + RefPtr toggleChild_; + RefPtr textChild_; + RefPtr paddingChild_; + RefPtr toggleTheme_; + + TextStyle textStyle_; + Color backgroundColor_; + Color checkedColor_; + Color textColor_; + double blendOpacity_ { 1.0 }; + bool isDisabled_ { false }; + bool colorChanged_ { false }; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_TOGGLE_H diff --git a/frameworks/bridge/common/dom/dom_tool_bar.cpp b/frameworks/bridge/common/dom/dom_tool_bar.cpp new file mode 100644 index 00000000..243b14cd --- /dev/null +++ b/frameworks/bridge/common/dom/dom_tool_bar.cpp @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_tool_bar.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { + +DOMToolBar::DOMToolBar(NodeId nodeId, const std::string& nodeName) : DOMNode(nodeId, nodeName) +{ + toolBarChild_ = AceType::MakeRefPtr(std::list>()); + if (IsRightToLeft()) { + toolBarChild_->SetTextDirection(TextDirection::RTL); + } +} + +void DOMToolBar::InitializeStyle() +{ + RefPtr theme = GetTheme(); + if (!theme) { + LOGE("ToolBarTheme is null"); + return; + } + backDecoration_->SetBackgroundColor(theme->GetToolBarBgColor()); + hasDecorationStyle_ = true; +} + +void DOMToolBar::OnChildNodeAdded(const RefPtr& child, int32_t slot) +{ + AddChildNode(child, slot, false); +} + +void DOMToolBar::OnChildNodeRemoved(const RefPtr& child) +{ + Rebuild(); +} + +void DOMToolBar::Rebuild() +{ + toolBarChild_->ClearChildren(); + menuChildren_.clear(); + + if (GetChildList().empty()) { + return; + } + + for (const auto& pos : GetChildList()) { + AddChildNode(pos, TOOL_BAR_INVALID_INDEX, true); + } +} + +void DOMToolBar::AddChildNode(const RefPtr& child, int32_t slot, bool isRebuild) +{ + if (!child) { + LOGE("Child is nullptr, add node failed, slot:%{public}d.", slot); + return; + } + + RefPtr domToolBarItem = AceType::DynamicCast(child); + if (!domToolBarItem || !domToolBarItem->GetSpecializedComponent()) { + return; + } + if (isRebuild) { + domToolBarItem->SetIsEndItem(false); + domToolBarItem->MarkNeedUpdate(); + } + + if (toolBarChild_->GetChildren().size() > TOOL_BAR_DEFAULT_SIZE) { + menuChildren_.emplace_back(domToolBarItem->BuildOptionComponent()); + return; + } + + domToolBarItem->SetPosition(GetPosition()); + if (toolBarChild_->GetChildren().size() == TOOL_BAR_DEFAULT_SIZE) { + if (preToolBarItem_) { + RefPtr preDomToolBarItem = AceType::DynamicCast(preToolBarItem_); + if (preDomToolBarItem) { + RefPtr toolBarItemComponent = + AceType::DynamicCast(preDomToolBarItem->GetSpecializedComponent()); + if (toolBarItemComponent) { + preDomToolBarItem->SetIsEndItem(true); + toolBarItemComponent->SetOptionChildrenCallBack([this]() { return GetMenuChildren(); }); + toolBarItemComponent->SetClickedEventId(EventMarker()); + menuChildren_.emplace_back(preDomToolBarItem->BuildOptionComponent()); + } + } + } + menuChildren_.emplace_back(domToolBarItem->BuildOptionComponent()); + preToolBarItem_ = nullptr; + return; + } + + if (slot == TOOL_BAR_INVALID_INDEX) { + toolBarChild_->AppendChild(child->GetRootComponent()); + } else { + toolBarChild_->InsertChild(slot, child->GetRootComponent()); + } + preToolBarItem_ = child; +} + +} // namespace diff --git a/frameworks/bridge/common/dom/dom_tool_bar.h b/frameworks/bridge/common/dom/dom_tool_bar.h new file mode 100644 index 00000000..181125b2 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_tool_bar.h @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_TOOL_BAR_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_TOOL_BAR_H + +#include "core/components/option/option_component.h" +#include "core/components/tool_bar/tool_bar_component.h" +#include "core/components/tool_bar/tool_bar_item_component.h" +#include "frameworks/bridge/common/dom/dom_tool_bar_item.h" + +namespace OHOS::Ace::Framework { + +constexpr int32_t TOOL_BAR_DEFAULT_SIZE = 5; +constexpr int32_t TOOL_BAR_INVALID_INDEX = -1; + +class DOMToolBar final : public DOMNode { + DECLARE_ACE_TYPE(DOMToolBar, DOMNode); + +public: + DOMToolBar(NodeId nodeId, const std::string& nodeName); + ~DOMToolBar() override = default; + + RefPtr GetSpecializedComponent() override + { + return toolBarChild_; + } + + const std::list>& GetMenuChildren() const + { + return menuChildren_; + } + void InitializeStyle() override; + +protected: + void OnChildNodeAdded(const RefPtr& child, int32_t slot) override; + void OnChildNodeRemoved(const RefPtr& child) override; + +private: + void AddChildNode(const RefPtr& child, int32_t slot, bool isRebuild); + void Rebuild(); + + RefPtr toolBarChild_; + std::list> menuChildren_; + RefPtr preToolBarItem_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_TOOL_BAR_H diff --git a/frameworks/bridge/common/dom/dom_tool_bar_item.cpp b/frameworks/bridge/common/dom/dom_tool_bar_item.cpp new file mode 100644 index 00000000..dc3dfcb8 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_tool_bar_item.cpp @@ -0,0 +1,260 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_tool_bar_item.h" + +#include "base/i18n/localization.h" +#include "core/components/padding/padding_component.h" +#include "core/components/select/select_theme.h" +#include "frameworks/bridge/common/dom/dom_type.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +namespace { + +constexpr int32_t MAX_LINES = 2; +const char MORE[] = "common.more"; + +} + +DOMToolBarItem::DOMToolBarItem(NodeId nodeId, const std::string& nodeName) : DOMNode(nodeId, nodeName) +{ + toolBarItemChild_ = AceType::MakeRefPtr(); + textChild_ = AceType::MakeRefPtr(""); + imageChild_ = AceType::MakeRefPtr(""); +} + +void DOMToolBarItem::InitializeStyle() +{ + ResetInitializedStyle(); +} + +void DOMToolBarItem::ResetInitializedStyle() +{ + theme_ = GetTheme(); + if (!theme_) { + LOGE("ToolBarTheme is null"); + return; + } + InitImageStyle(); + InitTextStyle(); + InitializedToolBarItemChild(); +} + +void DOMToolBarItem::InitImageStyle() +{ + const Size& iconSize = theme_->GetIconSize(); + imageChild_->SetWidth(Dimension(iconSize.Width(), DimensionUnit::VP)); + imageChild_->SetHeight(Dimension(iconSize.Height(), DimensionUnit::VP)); + imageChild_->SetMatchTextDirection(true); +} + +void DOMToolBarItem::InitTextStyle() +{ + textStyle_ = theme_->GetToolBarTextStyle(); + textStyle_.SetTextAlign(TextAlign::CENTER); + textStyle_.SetTextOverflow(TextOverflow::CLIP); + textStyle_.SetMaxLines(MAX_LINES); +} + +void DOMToolBarItem::InitializedToolBarItemChild() +{ + toolBarItemChild_->SetPressColor(theme_->GetPressColor()); + toolBarItemChild_->SetRadius(theme_->GetRadius()); + toolBarItemChild_->SetFocusColor(theme_->GetFocusColor()); + toolBarItemChild_->SetHoverColor(theme_->GetHoverColor()); + RefPtr selectTheme = GetTheme(); + if (selectTheme) { + toolBarItemChild_->SetMenuMinWidth(selectTheme->GetPopupMinWidth()); + } + backDecoration_->SetBackgroundColor(theme_->GetItemBackgroundColor()); + hasDecorationStyle_ = true; +} + +bool DOMToolBarItem::SetSpecializedAttr(const std::pair& attr) +{ + // Operator map for attr + static const LinearMapNode attrOperators[] = { + { DOM_TOOL_BAR_ITEM_ICON, + [](DOMToolBarItem& toolBarItem, const std::string& val) { toolBarItem.icon_ = std::move(val); } }, + { DOM_TOOL_BAR_ITEM_VALUE, + [](DOMToolBarItem& toolBarItem, const std::string& val) { toolBarItem.value_ = std::move(val); } }, + }; + auto operatorIter = BinarySearchFindIndex(attrOperators, ArraySize(attrOperators), attr.first.c_str()); + if (operatorIter != -1) { + LOGD("ToolBarItem attrs : %{public}s = %{public}s", attr.first.c_str(), attr.second.c_str()); + attrOperators[operatorIter].value(*this, attr.second); + return true; + } + return false; +} + +bool DOMToolBarItem::SetSpecializedStyle(const std::pair& style) +{ + // Operator map for style + static const LinearMapNode styleOperators[] = { + { DOM_TOOL_BAR_ITEM_ALLOW_SCALE, + [](DOMToolBarItem& toolBarItem, const std::string& val) { + toolBarItem.textStyle_.SetAllowScale(StringToBool(val)); + } }, + { DOM_TOOL_BAR_ITEM_FONT_FAMILY, + [](DOMToolBarItem& toolBarItem, const std::string& val) { + toolBarItem.textStyle_.SetFontFamilies(ConvertStrToFontFamilies(val)); + } }, + { DOM_TOOL_BAR_ITEM_FONT_SIZE, + [](DOMToolBarItem& toolBarItem, const std::string& val) { + toolBarItem.textStyle_.SetFontSize(StringToDimension(val)); + } }, + { DOM_TOOL_BAR_ITEM_FONT_STYLE, + [](DOMToolBarItem& toolBarItem, const std::string& val) { + toolBarItem.textStyle_.SetFontStyle(ConvertStrToFontStyle(val)); + } }, + { DOM_TOOL_BAR_ITEM_FONT_WEIGHT, + [](DOMToolBarItem& toolBarItem, const std::string& val) { + toolBarItem.textStyle_.SetFontWeight(ConvertStrToFontWeight(val)); + } }, + { DOM_TOOL_BAR_ITEM_TEXT_COLOR, + [](DOMToolBarItem& toolBarItem, const std::string& val) { + toolBarItem.textStyle_.SetTextColor(Color::FromString(val)); + } }, + { DOM_TOOL_BAR_ITEM_TEXT_DECORATION, + [](DOMToolBarItem& toolBarItem, const std::string& val) { + toolBarItem.textStyle_.SetTextDecoration(ConvertStrToTextDecoration(val)); + } }, + }; + auto operatorIter = BinarySearchFindIndex(styleOperators, ArraySize(styleOperators), style.first.c_str()); + if (operatorIter != -1) { + LOGD("ToolBarItem styles : %{public}s = %{public}s", style.first.c_str(), style.second.c_str()); + styleOperators[operatorIter].value(*this, style.second); + return true; + } + return false; +} + +bool DOMToolBarItem::AddSpecializedEvent(int32_t pageId, const std::string& event) +{ + static const LinearMapNode toolBarItemEventOperators[] = { + { DOM_CLICK, [](DOMToolBarItem& toolBarItem, + const EventMarker& event) { toolBarItem.clickEventId_ = std::move(event); } }, + }; + auto operatorIter = + BinarySearchFindIndex(toolBarItemEventOperators, ArraySize(toolBarItemEventOperators), event.c_str()); + if (operatorIter != -1) { + LOGD("ToolBarItem events : %{public}s", event.c_str()); + toolBarItemEventOperators[operatorIter].value(*this, EventMarker(GetNodeIdForEvent(), event, pageId)); + return true; + } + return false; +} + +void DOMToolBarItem::PrepareSpecializedComponent() +{ + toolBarItemChild_->SetChild(nullptr); + toolBarItemChild_->SetIsEndItem(isEndItem_); + + std::list> children; + if (isEndItem_) { + BuildEndItemComponent(children); + } else { + BuildCommonComponent(children); + toolBarItemChild_->SetClickedEventId(clickEventId_); + } + + if (children.empty()) { + toolBarItemChild_->SetChild(nullptr); + return; + } + auto column = AceType::MakeRefPtr(FlexAlign::FLEX_START, FlexAlign::CENTER, children); + if (icon_.empty() ^ value_.empty()) { + column->SetMainAxisAlign(FlexAlign::CENTER); + } + toolBarItemChild_->SetChild(column); +} + +void DOMToolBarItem::BuildCommonComponent(std::list>& children) +{ + // Generate common icon + if (!icon_.empty()) { + if (!imageChild_) { + imageChild_ = AceType::MakeRefPtr(icon_); + InitImageStyle(); + } + imageChild_->SetResourceId(InternalResource::ResourceId::NO_ID); + imageChild_->SetSrc(icon_); + children.emplace_back(SetPadding(imageChild_, Edge(theme_->GetIconEdge()))); + } + + // Generate common text + if (!value_.empty()) { + if (!textChild_) { + textChild_ = AceType::MakeRefPtr(value_); + InitTextStyle(); + } + textChild_->SetData(value_); + textStyle_.SetAdaptMaxFontSize(textStyle_.GetFontSize()); + textChild_->SetFocusColor(textStyle_.GetTextColor()); + textChild_->SetTextStyle(textStyle_); + children.emplace_back(SetPadding(textChild_, Edge(theme_->GetTextEdge()))); + } +} + +void DOMToolBarItem::BuildEndItemComponent(std::list>& children) +{ + // Generate endItem icon + if (!imageChild_) { + imageChild_ = AceType::MakeRefPtr(""); + InitImageStyle(); + } + imageChild_->SetSrc(""); + imageChild_->SetResourceId(InternalResource::ResourceId::IC_MORE); + imageChild_->SetColor(theme_->GetIconColor()); + children.emplace_back(SetPadding(imageChild_, Edge(theme_->GetIconEdge()))); + + // Generate endItem text + if (!textChild_) { + textChild_ = AceType::MakeRefPtr(""); + InitTextStyle(); + } + textChild_->SetData(Localization::GetInstance()->GetEntryLetters(MORE)); + textChild_->SetFocusColor(textStyle_.GetTextColor()); + textChild_->SetTextStyle(textStyle_); + children.emplace_back(SetPadding(textChild_, Edge(theme_->GetTextEdge()))); +} + +const RefPtr DOMToolBarItem::SetPadding(const RefPtr& component, Edge&& edge) +{ + auto paddingComponent = AceType::MakeRefPtr(); + paddingComponent->SetPadding(std::move(edge)); + paddingComponent->SetChild(component); + + return paddingComponent; +} + +RefPtr DOMToolBarItem::BuildOptionComponent() +{ + RefPtr optionComponent; + if (!value_.empty()) { + RefPtr textComponent = AceType::MakeRefPtr(value_); + if (!optionComponent) { + optionComponent = AceType::MakeRefPtr(); + } + optionComponent->SetText(textComponent); + optionComponent->SetValue(value_); + optionComponent->SetClickEventForToolBarItem(clickEventId_); + } + return optionComponent; +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_tool_bar_item.h b/frameworks/bridge/common/dom/dom_tool_bar_item.h new file mode 100644 index 00000000..e59b7328 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_tool_bar_item.h @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_TOOL_BAR_ITEM_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_TOOL_BAR_ITEM_H + +#include "core/components/button/button_component.h" +#include "core/components/flex/flex_component.h" +#include "core/components/image/image_component.h" +#include "core/components/option/option_component.h" +#include "core/components/text/text_component.h" +#include "core/components/theme/theme_manager.h" +#include "core/components/tool_bar/tool_bar_item_component.h" +#include "core/components/tool_bar/tool_bar_theme.h" +#include "frameworks/bridge/common/dom/dom_node.h" + +namespace OHOS::Ace::Framework { + +class DOMToolBarItem final : public DOMNode { + DECLARE_ACE_TYPE(DOMToolBarItem, DOMNode); + +public: + DOMToolBarItem(NodeId nodeId, const std::string& nodeName); + ~DOMToolBarItem() override = default; + + RefPtr GetSpecializedComponent() override + { + if (icon_.empty() && value_.empty()) { + return nullptr; + } + return toolBarItemChild_; + } + + void SetIsEndItem(bool isEndItem) + { + isEndItem_ = isEndItem; + PrepareSpecializedComponent(); + } + + void SetPosition(PositionType positionType) + { + toolBarItemChild_->SetPositionType(positionType); + } + + RefPtr BuildOptionComponent(); + void InitializeStyle() override; + +protected: + bool SetSpecializedAttr(const std::pair& attr) override; + bool SetSpecializedStyle(const std::pair& style) override; + bool AddSpecializedEvent(int32_t pageId, const std::string& event) override; + void PrepareSpecializedComponent() override; + void ResetInitializedStyle() override; + +private: + void InitImageStyle(); + void InitTextStyle(); + void InitializedToolBarItemChild(); + void BuildEndItemComponent(std::list>& children); + void BuildCommonComponent(std::list>& children); + const RefPtr SetPadding(const RefPtr& component, Edge&& edge); + + RefPtr toolBarItemChild_; + RefPtr textChild_; + RefPtr imageChild_; + TextStyle textStyle_; + RefPtr theme_; + + EventMarker clickEventId_; + bool isEndItem_ = false; + std::string value_; + std::string icon_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_TOOL_BAR_ITEM_H diff --git a/frameworks/bridge/common/dom/dom_type.cpp b/frameworks/bridge/common/dom/dom_type.cpp new file mode 100644 index 00000000..455dd217 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_type.cpp @@ -0,0 +1,1041 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_type.h" + +namespace OHOS::Ace { + +// Use DOM_ROOT_NODE_ID_BASE plus page id as the root node id, to ensure it is unique, +// if not, composedElementMap_ in PipelineContext would have problem when doing page +// routing, such as pageA --> PageB --> PageA. +const NodeId DOM_ROOT_NODE_ID_BASE = 1000000; +const char DOM_DEFAULT_ROOT_NODE_ID[] = "_root"; +// node tag defines +const char DOM_NODE_TAG_DIV[] = "div"; +const char DOM_NODE_TAG_CALENDAR[] = "calendar"; +const char DOM_NODE_TAG_GRID_COLUMN[] = "grid-col"; +const char DOM_NODE_TAG_GRID_CONTAINER[] = "grid-container"; +const char DOM_NODE_TAG_GRID_ROW[] = "grid-row"; +const char DOM_NODE_TAG_SVG_TEXT[] = "svg-text"; +const char DOM_NODE_TAG_TEXT[] = "text"; +const char DOM_NODE_TAG_TEXT_PATH[] = "textpath"; +const char DOM_NODE_TAG_TSPAN[] = "tspan"; +const char DOM_NODE_TAG_PICKER_DIALOG[] = "picker"; +const char DOM_NODE_TAG_PICKER_VIEW[] = "picker-view"; +const char DOM_NODE_TAG_OPTION[] = "option"; +const char DOM_NODE_TAG_POPUP[] = "popup"; +const char DOM_NODE_TAG_PROGRESS[] = "progress"; +const char DOM_NODE_TAG_SELECT[] = "select"; +const char DOM_NODE_TAG_MENU[] = "menu"; +const char DOM_NODE_TAG_SLIDER[] = "slider"; +const char DOM_NODE_TAG_SPAN[] = "span"; +const char DOM_NODE_TAG_STACK[] = "stack"; +const char DOM_NODE_TAG_SWIPER[] = "swiper"; +const char DOM_NODE_TAG_SWITCH[] = "switch"; +const char DOM_NODE_TAG_TABS[] = "tabs"; +const char DOM_NODE_TAG_TAB_BAR[] = "tab-bar"; +const char DOM_NODE_TAG_TAB_CONTENT[] = "tab-content"; +const char DOM_NODE_TAG_REFRESH[] = "refresh"; +const char DOM_NODE_TAG_IMAGE[] = "image"; +const char DOM_NODE_TAG_LIST[] = "list"; +const char DOM_NODE_TAG_LIST_ITEM[] = "list-item"; +const char DOM_NODE_TAG_LIST_ITEM_GROUP[] = "list-item-group"; +const char DOM_NODE_TAG_VIDEO[] = "video"; +const char DOM_NODE_TAG_RATING[] = "rating"; +const char DOM_NODE_TAG_MARQUEE[] = "marquee"; +const char DOM_NODE_TAG_NAVIGATION_BAR[] = "navigation-bar"; +const char DOM_NODE_TAG_NAVIGATION_MENU[] = "navigation-menu"; +const char DOM_NODE_TAG_TEXTAREA[] = "textarea"; +const char DOM_NODE_TAG_INPUT[] = "input"; +const char DOM_NODE_TAG_LABEL[] = "label"; +const char DOM_NODE_TAG_DIVIDER[] = "divider"; +const char DOM_NODE_TAG_CANVAS[] = "canvas"; +const char DOM_NODE_TAG_BUTTON[] = "button"; +const char DOM_NODE_TAG_CHART[] = "chart"; +const char DOM_NODE_TAG_DIALOG[] = "dialog"; +const char DOM_NODE_TAG_SEARCH[] = "search"; +const char DOM_NODE_TAG_IMAGE_ANIMATOR[] = "image-animator"; +const char DOM_NODE_TAG_TOGGLE[] = "toggle"; +const char DOM_NODE_TAG_CLOCK[] = "clock"; +const char DOM_NODE_TAG_STEPPER[] = "stepper"; +const char DOM_NODE_TAG_STEPPER_ITEM[] = "stepper-item"; +const char DOM_NODE_TAG_PIECE[] = "piece"; +const char DOM_NODE_TAG_BADGE[] = "badge"; +const char DOM_NODE_TAG_PANEL[] = "panel"; +const char DOM_NODE_TAG_TOOL_BAR[] = "toolbar"; +const char DOM_NODE_TAG_TOOL_BAR_ITEM[] = "toolbar-item"; +const char DOM_NODE_TAG_QRCODE[] = "qrcode"; +const char DOM_NODE_TAG_SVG[] = "svg"; +const char DOM_NODE_TAG_RECT[] = "rect"; +const char DOM_NODE_TAG_ANIMATE[] = "animate"; +const char DOM_NODE_TAG_WEB[] = "web"; +const char DOM_NODE_TAG_PATH[] = "path"; +const char DOM_NODE_TAG_LINE[] = "line"; +const char DOM_NODE_TAG_POLYLINE[] = "polyline"; +const char DOM_NODE_TAG_POLYGON[] = "polygon"; +const char DOM_NODE_TAG_CIRCLE[] = "circle"; +const char DOM_NODE_TAG_ELLIPSE[] = "ellipse"; +const char DOM_NODE_TAG_ANIMATE_MOTION[] = "animatemotion"; +const char DOM_NODE_TAG_CAMERA[] = "camera"; + +// common attribute constants +const char DOM_ID[] = "id"; +const char DOM_SHARE_ID[] = "shareid"; +const char DOM_SHOW[] = "show"; +const char DOM_DIR[] = "dir"; + +// common persudo class style constants +const char DOM_PSEUDO_CLASS_SYMBOL[] = ":"; +const char DOM_ACTIVE_PSEUDO_CLASS[] = ":active"; +const char DOM_DISABLED_PSEUDO_CLASS[] = ":disabled"; +const char DOM_FOCUS_PSEUDO_CLASS[] = ":focus"; +const char DOM_CHECKED_PSEUDO_CLASS[] = ":checked"; +const char DOM_WAITING_PSEUDO_CLASS[] = ":waiting"; + +// common style constants +const char DOM_WIDTH[] = "width"; +const char DOM_HEIGHT[] = "height"; +const char DOM_TYPE[] = "type"; +const char DOM_VALUE[] = "value"; +const char DOM_START[] = "start"; +const char DOM_END[] = "end"; +const char DOM_TITLE[] = "title"; +const char DOM_TOUCHABLE[] = "touchable"; +const char DOM_DISABLED[] = "disabled"; +const char DOM_PADDING[] = "padding"; +const char DOM_PADDING_TOP[] = "paddingTop"; +const char DOM_PADDING_RIGHT[] = "paddingRight"; +const char DOM_PADDING_BOTTOM[] = "paddingBottom"; +const char DOM_PADDING_LEFT[] = "paddingLeft"; +const char DOM_PADDING_START[] = "paddingStart"; +const char DOM_PADDING_END[] = "paddingEnd"; +const char DOM_MARGIN[] = "margin"; +const char DOM_MARGIN_TOP[] = "marginTop"; +const char DOM_MARGIN_RIGHT[] = "marginRight"; +const char DOM_MARGIN_BOTTOM[] = "marginBottom"; +const char DOM_MARGIN_LEFT[] = "marginLeft"; +const char DOM_MARGIN_START[] = "marginStart"; +const char DOM_MARGIN_END[] = "marginEnd"; +const char DOM_LAYOUT_IN_BOX[] = "layoutInBox"; +const char DOM_BACKGROUND_COLOR[] = "backgroundColor"; +const char DOM_BACKGROUND_IMAGE[] = "backgroundImage"; +const char DOM_FADE_COLOR[] = "fadeColor"; +const char DOM_BOX_SHADOW_H[] = "boxShadowH"; +const char DOM_BOX_SHADOW_V[] = "boxShadowV"; +const char DOM_BOX_SHADOW_BLUR[] = "boxShadowBlur"; +const char DOM_BOX_SHADOW_SPREAD[] = "boxShadowSpread"; +const char DOM_BOX_SHADOW_COLOR[] = "boxShadowColor"; +const char DOM_FLEX_DIRECTION[] = "flexDirection"; +const char DOM_FLEX_ROW[] = "row"; +const char DOM_FLEX_COLUMN[] = "column"; +const char DOM_FLEX[] = "flex"; +const char DOM_FLEX_GROW[] = "flexGrow"; +const char DOM_FLEX_SHRINK[] = "flexShrink"; +const char DOM_FLEX_BASIS[] = "flexBasis"; +const char DOM_FLEX_WEIGHT[] = "flexWeight"; +const char DOM_ALIGN_SELF[] = "alignSelf"; +const char DOM_MIN_WIDTH[] = "minWidth"; +const char DOM_MIN_HEIGHT[] = "minHeight"; +const char DOM_MAX_WIDTH[] = "maxWidth"; +const char DOM_MAX_HEIGHT[] = "maxHeight"; +const char DOM_DISPLAY_INDEX[] = "displayIndex"; +const char DOM_ASPECT_RATIO[] = "aspectRatio"; +const char DOM_OPACITY[] = "opacity"; +const char DOM_DISPLAY[] = "display"; +const char DOM_VISIBILITY[] = "visibility"; +const char DOM_DISPLAY_GRID[] = "grid"; +const char DOM_DISPLAY_FLEX[] = "flex"; +const char DOM_DISPLAY_NONE[] = "none"; +const char DOM_VISIBILITY_VISIBLE[] = "visible"; +const char DOM_VISIBILITY_HIDDEN[] = "hidden"; +const char DOM_BORDER[] = "border"; +const char DOM_BORDER_WIDTH[] = "borderWidth"; +const char DOM_BORDER_LEFT_WIDTH[] = "borderLeftWidth"; +const char DOM_BORDER_TOP_WIDTH[] = "borderTopWidth"; +const char DOM_BORDER_RIGHT_WIDTH[] = "borderRightWidth"; +const char DOM_BORDER_BOTTOM_WIDTH[] = "borderBottomWidth"; +const char DOM_BORDER_COLOR[] = "borderColor"; +const char DOM_BORDER_LEFT_COLOR[] = "borderLeftColor"; +const char DOM_BORDER_TOP_COLOR[] = "borderTopColor"; +const char DOM_BORDER_RIGHT_COLOR[] = "borderRightColor"; +const char DOM_BORDER_BOTTOM_COLOR[] = "borderBottomColor"; +const char DOM_BORDER_STYLE[] = "borderStyle"; +const char DOM_BORDER_LEFT_STYLE[] = "borderLeftStyle"; +const char DOM_BORDER_TOP_STYLE[] = "borderTopStyle"; +const char DOM_BORDER_RIGHT_STYLE[] = "borderRightStyle"; +const char DOM_BORDER_BOTTOM_STYLE[] = "borderBottomStyle"; +const char DOM_BORDER_RADIUS[] = "borderRadius"; +const char DOM_BORDER_TOP_LEFT_RADIUS[] = "borderTopLeftRadius"; +const char DOM_BORDER_TOP_RIGHT_RADIUS[] = "borderTopRightRadius"; +const char DOM_BORDER_BOTTOM_RIGHT_RADIUS[] = "borderBottomRightRadius"; +const char DOM_BORDER_BOTTOM_LEFT_RADIUS[] = "borderBottomLeftRadius"; +const char DOM_POSITION[] = "position"; +const char DOM_POSITION_RELATIVE[] = "relative"; +const char DOM_POSITION_FIXED[] = "fixed"; +const char DOM_POSITION_ABSOLUTE[] = "absolute"; +const char DOM_POSITION_TOP[] = "top"; +const char DOM_POSITION_RIGHT[] = "right"; +const char DOM_POSITION_BOTTOM[] = "bottom"; +const char DOM_POSITION_LEFT[] = "left"; +const char DOM_BACKGROUND_IMAGE_SIZE[] = "backgroundSize"; +const char DOM_BACKGROUND_IMAGE_SIZE_CONTAIN[] = "contain"; +const char DOM_BACKGROUND_IMAGE_SIZE_COVER[] = "cover"; +const char DOM_BACKGROUND_IMAGE_SIZE_AUTO[] = "auto"; +const char DOM_BACKGROUND_IMAGE_POSITION[] = "backgroundPosition"; +const char DOM_BACKGROUND_IMAGE_POSITION_LEFT[] = "left"; +const char DOM_BACKGROUND_IMAGE_POSITION_CENTER[] = "center"; +const char DOM_BACKGROUND_IMAGE_POSITION_RIGHT[] = "right"; +const char DOM_BACKGROUND_IMAGE_POSITION_TOP[] = "top"; +const char DOM_BACKGROUND_IMAGE_POSITION_BOTTOM[] = "bottom"; +const char DOM_BACKGROUND_IMAGE_REPEAT[] = "backgroundRepeat"; +const char DOM_BACKGROUND[] = "background"; +const char DOM_GRADIENT_DIRECTION_TOP[] = "top"; +const char DOM_GRADIENT_DIRECTION_RIGHT[] = "right"; +const char DOM_GRADIENT_DIRECTION_BOTTOM[] = "bottom"; +const char DOM_GRADIENT_DIRECTION_LEFT[] = "left"; +const char DOM_VALUES[] = "values"; +const char DOM_GRADIENT_VALUES[] = "values"; +const char DOM_GRADIENT_TYPE[] = "type"; +const char DOM_GRADIENT_DIRECTIONS[] = "directions"; +const char DOM_REPEATING_LINEAR_GRADIENT[] = "repeatingLinearGradient"; +const char DOM_TRANSFORM[] = "transform"; +const char DOM_SCALE[] = "scale"; +const char DOM_SCALE_X[] = "scaleX"; +const char DOM_SCALE_Y[] = "scaleY"; +const char DOM_TRANSLATE[] = "translate"; +const char DOM_TRANSLATE_X[] = "translateX"; +const char DOM_TRANSLATE_Y[] = "translateY"; +const char DOM_ROTATE[] = "rotate"; +const char DOM_ROTATE_X[] = "rotateX"; +const char DOM_ROTATE_Y[] = "rotateY"; +const char DOM_FOCUSABLE[] = "focusable"; +const char DOM_ANIMATION_WIDTH[] = "width"; +const char DOM_ANIMATION_HEIGHT[] = "height"; +const char DOM_ANIMATION_COLOR[] = "backgroundColor"; +const char DOM_ANIMATION_OPACITY[] = "opacity"; +const char DOM_ANIMATION_ITERATIONS[] = "iterations"; +const char DOM_ANIMATION_DELAY_API[] = "delay"; +const char DOM_ANIMATION_DURATION_API[] = "duration"; +const char DOM_TRANSFORM_ORIGIN[] = "transformOrigin"; +const char DOM_ANIMATION_NAME[] = "animationName"; +const char DOM_ANIMATION_DELAY[] = "animationDelay"; +const char DOM_ANIMATION_DURATION[] = "animationDuration"; +const char DOM_ANIMATION_FILL[] = "fill"; +const char DOM_ANIMATION_EASING[] = "easing"; +const char DOM_ANIMATION_ITERATION_COUNT[] = "animationIterationCount"; +const char DOM_ANIMATION_TIMING_FUNCTION[] = "animationTimingFunction"; +const char DOM_ANIMATION_FILL_MODE[] = "animationFillMode"; +const char DOM_ANIMATION_DIRECTION[] = "animationDirection"; +const char DOM_ANIMATION_DIRECTION_NORMAL[] = "normal"; +const char DOM_ANIMATION_DIRECTION_ALTERNATE[] = "alternate"; +const char DOM_ANIMATION_DIRECTION_REVERSE[] = "reverse"; +const char DOM_ANIMATION_DIRECTION_ALTERNATE_REVERSE[] = "alternate-reverse"; +const char DOM_ANIMATION_TIMING_FUNCTION_EASE[] = "ease"; +const char DOM_ANIMATION_TIMING_FUNCTION_EASE_IN[] = "ease-in"; +const char DOM_ANIMATION_TIMING_FUNCTION_EASE_OUT[] = "ease-out"; +const char DOM_ANIMATION_TIMING_FUNCTION_EASE_IN_OUT[] = "ease-in-out"; +const char DOM_ANIMATION_TIMING_FUNCTION_LINEAR[] = "linear"; +const char DOM_ANIMATION_TIMING_FUNCTION_FAST_OUT_SLOW_IN[] = "fast-out-slow-in"; +const char DOM_ANIMATION_TIMING_FUNCTION_LINEAR_OUT_SLOW_IN[] = "linear-out-slow-in"; +const char DOM_ANIMATION_TIMING_FUNCTION_FAST_OUT_LINEAR_IN[] = "fast-out-linear-in"; +const char DOM_ANIMATION_TIMING_FUNCTION_FRICTION[] = "friction"; +const char DOM_ANIMATION_TIMING_FUNCTION_EXTREME_DECELERATION[] = "extreme-deceleration"; +const char DOM_ANIMATION_TIMING_FUNCTION_SHARP[] = "sharp"; +const char DOM_ANIMATION_TIMING_FUNCTION_RHYTHM[] = "rhythm"; +const char DOM_ANIMATION_TIMING_FUNCTION_SMOOTH[] = "smooth"; +const char DOM_ANIMATION_TIMING_FUNCTION_STEPS[] = "steps"; +const char DOM_ANIMATION_TIMING_FUNCTION_CUBIC_BEZIER[] = "cubic-bezier"; +const char DOM_ANIMATION_FILL_MODE_NONE[] = "none"; +const char DOM_ANIMATION_FILL_MODE_FORWARDS[] = "forwards"; +const char DOM_ANIMATION_FILL_MODE_BACKWARDS[] = "backwards"; +const char DOM_ANIMATION_FILL_MODE_BOTH[] = "both"; +const char DOM_ANIMATION_NAME_TIME[] = "time"; +const char DOM_ANIMATION_OFFSET[] = "offset"; +const char DOM_TRANSFORM_ORIGIN_RIGHT_TOP[] = "right top"; +const char DOM_TRANSFORM_ORIGIN_RIGHT_CENTER[] = "right center"; +const char DOM_TRANSFORM_ORIGIN_RIGHT_BOTTOM[] = "right bottom"; +const char DOM_TRANSFORM_ORIGIN_CENTER_TOP[] = "center top"; +const char DOM_TRANSFORM_ORIGIN_CENTER_CENTER[] = "center center"; +const char DOM_TRANSFORM_ORIGIN_CENTER_BOTTOM[] = "center bottom"; +const char DOM_TRANSFORM_ORIGIN_LEFT_TOP[] = "left top"; +const char DOM_TRANSFORM_ORIGIN_LEFT_CENTER[] = "left center"; +const char DOM_TRANSFORM_ORIGIN_LEFT_BOTTOM[] = "left bottom"; +const char DOM_FILTER[] = "filter"; +const char DOM_BACKDROP_FILTER[] = "backdropFilter"; +const char DOM_WINDOW_FILTER[] = "windowFilter"; + +// transition style +const char DOM_TRANSITION_ENTER[] = "transitionEnter"; +const char DOM_TRANSITION_EXIT[] = "transitionExit"; +const char DOM_TRANSITION_DURATION[] = "transitionDuration"; +const char DOM_TRANSITION_TIMING_FUNCTION[] = "transitionTimingFunction"; + +// shared transition style +const char DOM_SHARED_TRANSITION_EFFECT[] = "sharedTransitionEffect"; +const char DOM_SHARED_TRANSITION_NAME[] = "sharedTransitionName"; +const char DOM_SHARED_TRANSITION_TIMING_FUNCTION[] = "sharedTransitionTimingFunction"; + +// display: grid style constants +const char DOM_GRID_TEMPLATE_COLUMNS[] = "gridTemplateColumns"; +const char DOM_GRID_TEMPLATE_ROWS[] = "gridTemplateRows"; +const char DOM_GRID_COLUMN_GAP[] = "gridColumnsGap"; +const char DOM_GRID_ROW_GAP[] = "gridRowsGap"; +const char DOM_GRID_COLUMN_START[] = "gridColumnStart"; +const char DOM_GRID_COLUMN_END[] = "gridColumnEnd"; +const char DOM_GRID_ROW_START[] = "gridRowStart"; +const char DOM_GRID_ROW_END[] = "gridRowEnd"; +const char DOM_GRID_AUTO_FLOW[] = "gridAutoFlow"; + +// div node style constants +const char DOM_ALIGN_CONTENT[] = "alignContent"; +const char DOM_ALIGN_CONTENT_STRETCH[] = "stretch"; +const char DOM_ALIGN_CONTENT_START[] = "flex-start"; +const char DOM_ALIGN_CONTENT_CENTER[] = "center"; +const char DOM_ALIGN_CONTENT_END[] = "flex-end"; +const char DOM_ALIGN_CONTENT_BETWEEN[] = "space-between"; +const char DOM_ALIGN_CONTENT_AROUND[] = "space-around"; +const char DOM_ALIGN_ITEMS[] = "alignItems"; +const char DOM_ALIGN_ITEMS_START[] = "flex-start"; +const char DOM_ALIGN_ITEMS_CENTER[] = "center"; +const char DOM_ALIGN_ITEMS_END[] = "flex-end"; +const char DOM_ALIGN_ITEMS_STRETCH[] = "stretch"; +const char DOM_ALIGN_ITEMS_BASELINE[] = "baseline"; +const char DOM_JUSTIFY_CONTENT[] = "justifyContent"; +const char DOM_JUSTIFY_CONTENT_START[] = "flex-start"; +const char DOM_JUSTIFY_CONTENT_CENTER[] = "center"; +const char DOM_JUSTIFY_CONTENT_END[] = "flex-end"; +const char DOM_JUSTIFY_CONTENT_BETWEEN[] = "space-between"; +const char DOM_JUSTIFY_CONTENT_AROUND[] = "space-around"; +const char DOM_JUSTIFY_CONTENT_EVENLY[] = "space-evenly"; +const char DOM_FLEX_WRAP[] = "flexWrap"; +const char DOM_WRAP[] = "wrap"; +const char DOM_DIV_CARD_TYPE[] = "card"; +const char DOM_DIV_CARD_BLUR[] = "blureffect"; + +// image attribute and style constants +const char DOM_SRC[] = "src"; +const char DOM_IMAGE_FIT[] = "objectFit"; +const char DOM_IMAGE_ALT[] = "alt"; +const char DOM_IMAGE_MATCH_TEXT_DIRECTION[] = "matchTextDirection"; +const char DOM_IMAGE_FIT_ORIGINAL_SIZE[] = "fitOriginalSize"; + +// image animator attribute and style constants +const char DOM_IMAGES[] = "images"; +const char DOM_ITERATION[] = "iteration"; +const char DOM_REVERSE[] = "reverse"; +const char DOM_FIXEDSIZE[] = "fixedsize"; +const char DOM_FILLMODE[] = "fillmode"; +const char DOM_PREDECODE[] = "predecode"; +const char DOM_IMAGE_ANIMATOR_START[] = "start"; +const char DOM_IMAGE_ANIMATOR_STOP[] = "stop"; +const char DOM_IMAGE_ANIMATOR_PAUSE[] = "pause"; +const char DOM_IMAGE_ANIMATOR_RESUME[] = "resume"; + +// list attribute、style and event constants +const char DOM_LIST_COLUMNS[] = "columns"; +const char DOM_LIST_ITEM_EXTENT[] = "itemExtent"; +const char DOM_LIST_EVENT_SCROLL[] = "scroll"; +const char DOM_LIST_EVENT_SCROLL_BOTTOM[] = "scrollbottom"; +const char DOM_LIST_EVENT_SCROLL_END[] = "scrollend"; +const char DOM_LIST_EVENT_SCROLL_TOP[] = "scrolltop"; +const char DOM_LIST_EVENT_SCROLL_TOUCH_UP[] = "scrolltouchup"; +const char DOM_LIST_EVENT_INDEXER_CHANGE[] = "indexerchange"; +const char DOM_LIST_ITEM_EVENT_STICKY[] = "sticky"; +const char DOM_LIST_METHOD_EXPAND_GROUP[] = "expandGroup"; +const char DOM_LIST_METHOD_COLLAPSE_GROUP[] = "collapseGroup"; +const char DOM_LIST_METHOD_SCROLL_BY[] = "scrollBy"; +const char DOM_LIST_METHOD_SCROLL_TO[] = "scrollTo"; +const char DOM_LIST_METHOD_SCROLL_ARROW[] = "scrollArrow"; +const char DOM_LIST_METHOD_SCROLL_TOP[] = "scrollTop"; +const char DOM_LIST_METHOD_SCROLL_BOTTOM[] = "scrollBottom"; +const char DOM_LIST_METHOD_SCROLL_PAGE[] = "scrollPage"; +const char DOM_LIST_SCROLLPAGE[] = "scrollpage"; +const char DOM_LIST_CHAIN_ANIMATION[] = "chainanimation"; +const char DOM_LIST_INITIAL_INDEX[] = "initialindex"; +const char DOM_LIST_INITIAL_OFFSET[] = "initialoffset"; +const char DOM_LIST_UPDATE_EFFECT[] = "updateeffect"; +const char DOM_SCROLL_EFFECT[] = "scrolleffect"; +const char DOM_SCROLL_EFFECT_SPRING[] = "spring"; +const char DOM_SCROLL_EFFECT_FADE[] = "fade"; +const char DOM_SCROLL_EFFECT_NONE[] = "no"; +const char DOM_LIST_INDEXER[] = "indexer"; +const char DOM_LIST_INDEXER_MODE[] = "indexercircle"; +const char DOM_LIST_INDEXER_BUBBLE[] = "indexerbubble"; +const char DOM_LIST_INDEXER_MULTI[] = "indexermulti"; +const char DOM_LIST_ITEM_SCALE[] = "itemscale"; +const char DOM_LIST_ITEM_OPACITY[] = "itemopacity"; +const char DOM_LIST_ITEM_CENTER[] = "itemcenter"; +const char DOM_LIST_CENTER_LAYOUT[] = "centerlayout"; +const char DOM_LIST_SCROLL_VIBRATE[] = "scrollvibrate"; +const char DOM_LIST_DIVIDER[] = "divider"; +const char DOM_LIST_DIVIDER_COLOR[] = "dividerColor"; +const char DOM_LIST_DIVIDER_HEIGHT[] = "dividerHeight"; +const char DOM_LIST_DIVIDER_LENGTH[] = "dividerLength"; +const char DOM_LIST_DIVIDER_ORIGIN[] = "dividerOrigin"; +const char DOM_LIST_ATTR_SELECTED[] = "selected"; +const char DOM_SCROLL_SCROLLBAR[] = "scrollbar"; +const char DOM_SCROLL_SCROLLBAR_OFF[] = "off"; +const char DOM_SCROLL_SCROLLBAR_ON[] = "on"; +const char DOM_SCROLL_SCROLLBAR_AUTO[] = "auto"; +const char DOM_SCROLL_SHAPE_MODE[] = "shapemode"; +const char DOM_SCROLL_SHAPE_MODE_RECT[] = "rect"; +const char DOM_SCROLL_SHAPE_MODE_ROUND[] = "round"; +const char DOM_SCROLL_SCROLLBAR_COLOR[] = "scrollbarColor"; +const char DOM_SCROLL_SCROLLBAR_WIDTH[] = "scrollbarWidth"; +const char DOM_SCROLL_OVER_SCROLL_EFFECT[] = "overscrollEffect"; + +// list-items attribute and style constants +const char DOM_LISTITEM_COLUMN_SPAN[] = "columnSpan"; +const char DOM_LISTITEM_TYPE[] = "type"; +const char DOM_LISTITEM_STICKY[] = "sticky"; +const char DOM_LISTITEM_STICKY_RADIUS[] = "stickyradius"; +const char DOM_LISTITEM_CLICK_EFFECT[] = "clickeffect"; +const char DOM_LISTITEM_IS_TITLE[] = "title"; +const char DOM_LISTITEM_INDEX_KEY[] = "section"; +const char DOM_LISTITEM_PRIMARY[] = "primary"; +const char DOM_LISTITEM_CARD_TYPE[] = "card"; +const char DOM_LISTITEM_CARD_BLUR[] = "blureffect"; +const char DOM_LISTITEM_ACTIVE[] = "active"; + +// list-items-group attribute and style constants +const char DOM_LIST_ITEM_GROUP_EVENT_GROUPCLICK[] = "groupclick"; +const char DOM_LIST_ITEM_GROUP_EVENT_GROUPCOLLAPSE[] = "groupcollapse"; +const char DOM_LIST_ITEM_GROUP_EVENT_GROUPEXPAND[] = "groupexpand"; + +// option attribute style and event constants +const char DOM_OPTION_SELECTED[] = "selected"; +const char DOM_OPTION_VALUE[] = "value"; +const char DOM_OPTION_ICON[] = "icon"; +const char DOM_OPTION_ACTION[] = "action"; +const char DOM_OPTION_CONTENT[] = "content"; +const char DOM_OPTION_TEXT_DECORATION[] = "textDecoration"; + +// text attribute and style constants +const char DOM_TEXT_VALUE[] = "value"; +const char DOM_TEXT_COLOR[] = "color"; +const char DOM_TEXT_LINES[] = "lines"; +const char DOM_TEXT_MAX_LINES[] = "maxLines"; +const char DOM_TEXT_FONT_SIZE[] = "fontSize"; +const char DOM_TEXT_MIN_FONT_SIZE[] = "minFontSize"; +const char DOM_TEXT_MAX_FONT_SIZE[] = "maxFontSize"; +const char DOM_TEXT_FONT_SIZE_STEP[] = "fontSizeStep"; +const char DOM_TEXT_PREFER_FONT_SIZES[] = "preferFontSizes"; +const char DOM_TEXT_FONT_WEIGHT[] = "fontWeight"; +const char DOM_TEXT_DECORATION[] = "textDecoration"; +const char DOM_TEXT_FONT_STYLE[] = "fontStyle"; +const char DOM_TEXT_ALLOW_SCALE[] = "allowScale"; +const char DOM_TEXT_ALIGN[] = "textAlign"; +const char DOM_TEXT_OVERFLOW[] = "textOverflow"; +const char DOM_OVERFLOW_STYLE[] = "overflow"; +const char DOM_TEXT_LINE_HEIGHT[] = "lineHeight"; +const char DOM_TEXT_LETTER_SPACING[] = "letterSpacing"; +const char DOM_TEXT_FONT_FAMILY[] = "fontFamily"; +const char DOM_ELLIPSIS[] = "ellipsis"; +const char DOM_CLIP[] = "clip"; +const char DOM_LEFT[] = "left"; +const char DOM_RIGHT[] = "right"; +const char DOM_CENTER[] = "center"; +const char DOM_TEXT_DECORATION_UNDERLINE[] = "underline"; +const char DOM_TEXT_DECORATION_OVERLINE[] = "overline"; +const char DOM_TEXT_DECORATION_LINETHROUGH[] = "line-through"; +const char DOM_TEXT_DECORATION_INHERIT[] = "inherit"; +const char DOM_TEXT_DECORATION_NONE[] = "none"; +const char DOM_TEXT_FONT_STYLE_ITALIC[] = "italic"; +const char DOM_TEXT_FONT_STYLE_NORMAL[] = "normal"; +const char DOM_TEXT_WORD_BREAK[] = "wordBreak"; + +// popup attribute and style constants +const char DOM_TARGET[] = "target"; +const char DOM_PLACEMENT[] = "placement"; +const char DOM_MASK_COLOR[] = "maskColor"; +const char DOM_ARROW_OFFSET[] = "arrowoffset"; +const char DOM_KEEP_ALIVE[] = "keepalive"; +const char DOM_CLICKABLE[] = "clickable"; +const char DOM_VISIBILITY_CHANGE[] = "visibilitychange"; + +// progress attribute and style constants +const char DOM_PROGRESS_COLOR[] = "color"; +const char DOM_PROGRESS_SECONDARY_COLOR[] = "secondaryColor"; +const char DOM_PROGRESS_BACKGROUND_COLOR[] = "backgroundColor"; +const char DOM_PROGRESS_STROKE_WIDTH[] = "strokeWidth"; +const char DOM_PROGRESS_TYPE[] = "type"; +const char DOM_PROGRESS_TYPE_HORIZONTAL[] = "horizontal"; +const char DOM_PROGRESS_TYPE_CIRCULAR[] = "circular"; +const char DOM_PROGRESS_TYPE_RING[] = "ring"; +const char DOM_PROGRESS_TYPE_SCALE[] = "scale-ring"; +const char DOM_PROGRESS_TYPE_MOON[] = "eclipse"; +const char DOM_PROGRESS_TYPE_ARC[] = "arc"; +const char DOM_PROGRESS_PERCENT[] = "percent"; +const char DOM_PROGRESS_SECONDARY_PERCENT[] = "secondarypercent"; +const char DOM_CIRCULAR_WIDTH[] = "width"; +const char DOM_CIRCULAR_HEIGHT[] = "height"; +const char DOM_CENTER_X[] = "centerX"; +const char DOM_CENTER_Y[] = "centerY"; +const char DOM_PROGRESS_RADIUS[] = "radius"; +const char DOM_START_DEGREE[] = "startAngle"; +const char DOM_SWEEP_DEGREE[] = "totalAngle"; +const char DOM_RING_CLOCKWISH_DIRECTION[] = "clockwise"; +const char DOM_SCALE_WIDTH[] = "scaleWidth"; +const char DOM_SCALE_NUMBER[] = "scaleNumber"; +const char DOM_DIRECTION[] = "direction"; +const char DOM_START_TO_END[] = "startToEnd"; + +// chart attribute and style constants +const char DOM_CHART_TYPE[] = "type"; +const char DOM_CHART_TYPE_BAR[] = "bar"; +const char DOM_CHART_TYPE_LINE[] = "line"; +const char DOM_CHART_TYPE_GAUGE[] = "gauge"; +const char DOM_CHART_TYPE_LOADING[] = "loading"; +const char DOM_CHART_TYPE_PROGRESS[] = "progress"; +const char DOM_CHART_TYPE_RAINBOW[] = "rainbow"; +const char DOM_COLORS_ARRAY[] = "colors"; +const char DOM_WEIGHTS_ARRAY[] = "weights"; +const char DOM_EFFECTS_ON[] = "effects"; +const char DOM_AUTO_SCALE[] = "autoscale"; + +// slider attribute and style constants +const char DOM_MIN[] = "min"; +const char DOM_MAX[] = "max"; +const char DOM_STEP[] = "step"; +const char DOM_COLOR[] = "color"; +const char DOM_SELECTED_COLOR[] = "selectedColor"; +const char DOM_BLOCK_COLOR[] = "blockColor"; +const char DOM_MIN_ICON[] = "minicon"; +const char DOM_MAX_ICON[] = "maxicon"; +const char DOM_CONTINUOUS[] = "continuous"; +const char DOM_INTERMITTENT[] = "intermittent"; +const char DOM_SLIDER_MODE[] = "mode"; +const char DOM_SHOW_TIPS[] = "showtips"; +const char DOM_SHOW_STEPS[] = "showsteps"; +const char DOM_OUTSET[] = "outset"; +const char DOM_INSET[] = "inset"; + +// stepper attribute style and event constants +const char DOM_STEPPER_INDEX[] = "index"; +const char DOM_STEPPER_LABEL[] = "label"; +const char DOM_STEPPER_LEFT_LABEL[] = "prevLabel"; +const char DOM_STEPPER_RIGHT_LABEL[] = "nextLabel"; +const char DOM_STEPPER_INITIAL_STATUS[] = "status"; +const char DOM_STEPPER_TEXT_COLOR[] = "textColor"; +const char DOM_STEPPER_FONT_SIZE[] = "fontSize"; +const char DOM_STEPPER_FONT_STYLE[] = "fontStyle"; +const char DOM_STEPPER_FONT_WEIGHT[] = "fontWeight"; +const char DOM_STEPPER_FONT_FAMILY[] = "fontFamily"; +const char DOM_STEPPER_TEXT_DECORATION[] = "textDecoration"; +const char DOM_STEPPER_EVENT_FINISH[] = "finish"; +const char DOM_STEPPER_EVENT_SKIP[] = "skip"; +const char DOM_STEPPER_EVENT_CHANGE[] = "change"; +const char DOM_STEPPER_EVENT_NEXT[] = "next"; +const char DOM_STEPPER_EVENT_BACK[] = "back"; +const char DOM_STEPPER_SET_RIGHT_BUTTON_STATUS[] = "setNextButtonStatus"; + +// stepper-item attribute style and event constants +const char DOM_STEPPER_ITEM_EVENT_APPEAR[] = "appear"; +const char DOM_STEPPER_ITEM_EVENT_DISAPPEAR[] = "disappear"; + +// swiper attribute and style constants +const char DOM_INDEX[] = "index"; +const char DOM_SWIPER_ANIMATION_OPACITY[] = "animationopacity"; +const char DOM_AUTOPLAY[] = "autoplay"; +const char DOM_INTERVAL[] = "interval"; +const char DOM_INDICATOR[] = "indicator"; +const char DOM_LOOP[] = "loop"; +const char DOM_DURATION[] = "duration"; +const char DOM_VERTICAL[] = "vertical"; +const char DOM_ANIMATION_CURVE[] = "animationCurve"; +const char DOM_INDICATOR_COLOR[] = "indicatorColor"; +const char DOM_INDICATOR_MASK[] = "indicatormask"; +const char DOM_INDICATOR_DISABLED[] = "indicatordisabled"; +const char DOM_INDICATOR_SELECTEDCOLOR[] = "indicatorSelectedColor"; +const char DOM_INDICATOR_SIZE[] = "indicatorSize"; +const char DOM_INDICATOR_TOP[] = "indicatorTop"; +const char DOM_INDICATOR_LEFT[] = "indicatorLeft"; +const char DOM_INDICATOR_RIGHT[] = "indicatorRight"; +const char DOM_INDICATOR_BOTTOM[] = "indicatorBottom"; +const char DOM_METHOD_SWIPE_TO[] = "swipeTo"; +const char DOM_METHOD_APPEND[] = "append"; +const char DOM_METHOD_SHOW_PREVIOUS[] = "showPrevious"; +const char DOM_METHOD_SHOW_NEXT[] = "showNext"; +const char DOM_DIGITAL_INDICATOR[] = "digital"; + +// switch attribute and style constants +const char DOM_CHECKED[] = "checked"; +const char DOM_SHOW_TEXT[] = "showtext"; +const char DOM_TEXT_ON[] = "texton"; +const char DOM_TEXT_OFF[] = "textoff"; +const char DOM_TEXT_PADDING[] = "textPadding"; +const char DOM_TEXT_ON_COLOR[] = "textonColor"; +const char DOM_TEXT_OFF_COLOR[] = "textoffColor"; +const char DOM_TRACK_COLOR_ON[] = "trackColorOn"; +const char DOM_TRACK_COLOR_OFF[] = "trackColorOff"; + +// tabs attribute and style constants +const char DOM_TAB_BAR_MODE[] = "mode"; +const char DOM_TAB_CONTENT_SCROLLABEL[] = "scrollable"; + +// refresh attribute and style constants +const char DOM_REFRESH[] = "refresh"; +const char DOM_REFRESH_OFFSET[] = "offset"; +const char DOM_REFRESH_REFRESHING[] = "refreshing"; +const char DOM_REFRESH_TYPE[] = "type"; +const char DOM_REFRESH_LASTTIME[] = "lasttime"; +const char DOM_REFRESH_FRICTION[] = "friction"; +const char DOM_REFRESH_BACKGROUND_COLOR[] = "backgroundColor"; +const char DOM_REFRESH_PROGRESS_COLOR[] = "progressColor"; +const char DOM_REFRESH_EVENT_PULL_DOWN[] = "pulldown"; +const char DOM_REFRESH_TIME_OFFSET[] = "timeoffset"; + +// rating attribute and style constants +const char DOM_STAR_NUM[] = "numstars"; +const char DOM_RATING_SCORE[] = "rating"; +const char DOM_RATING_STEP[] = "stepsize"; +const char DOM_RATING_INDICATOR[] = "indicator"; +const char DOM_BACKGROUND_SRC[] = "starBackground"; +const char DOM_FOREGROUND_SRC[] = "starForeground"; +const char DOM_SECONDARY_SRC[] = "starSecondary"; +const char DOM_RTL_FLIP[] = "rtlFlip"; + +// marquee attribute and style constants +const char DOM_MARQUEE_LOOP[] = "loop"; +const char DOM_MARQUEE_SCROLL_AMOUNT[] = "scrollamount"; +const char DOM_MARQUEE_DIRECTION[] = "direction"; +const char DOM_MARQUEE_DIRECTION_LEFT[] = "left"; +const char DOM_MARQUEE_DIRECTION_RIGHT[] = "right"; +const char DOM_MARQUEE_VALUE[] = "value"; +const char DOM_MARQUEE_COLOR[] = "color"; +const char DOM_MARQUEE_FONT_SIZE[] = "fontSize"; +const char DOM_MARQUEE_FONT_WEIGHT[] = "fontWeight"; +const char DOM_MARQUEE_FONT_FAMILY[] = "fontFamily"; +const char DOM_MARQUEE_EVENT_BOUNCE[] = "bounce"; +const char DOM_MARQUEE_EVENT_FINISH[] = "finish"; +const char DOM_MARQUEE_EVENT_START[] = "start"; +const char DOM_MARQUEE_METHOD_START[] = "start"; +const char DOM_MARQUEE_METHOD_STOP[] = "stop"; + +// navigationBar attribute and style constants +const char DOM_NAVIGATION_BAR_METHOD_SHOW[] = "show"; +const char DOM_NAVIGATION_BAR_METHOD_HIDE[] = "hide"; +const char DOM_NAVIGATION_BAR_TYPE[] = "type"; +const char DOM_NAVIGATION_BAR_HEADER[] = "header"; +const char DOM_NAVIGATION_BAR_TITLE[] = "title"; +const char DOM_NAVIGATION_BAR_SUBTITLE[] = "subtitle"; +const char DOM_NAVIGATION_BAR_BACK_ENABLED[] = "backenabled"; +const char DOM_NAVIGATION_BAR_LOGO[] = "logo"; +const char DOM_NAVIGATION_BAR_START_ICON[] = "starticon"; +const char DOM_NAVIGATION_BAR_END_ICON[] = "endicon"; +const char DOM_NAVIGATION_BAR_TITLE_COLOR[] = "titleColor"; +const char DOM_NAVIGATION_BAR_SUBTITLE_COLOR[] = "subtitleColor"; +const char DOM_NAVIGATION_BAR_EVENT_BACK_CLICK[] = "backclick"; +const char DOM_NAVIGATION_BAR_EVENT_START_CLICK[] = "startclick"; +const char DOM_NAVIGATION_BAR_EVENT_END_CLICK[] = "endclick"; + +// common event list +const char DOM_CHANGE[] = "change"; +const char DOM_TOUCH_START[] = "touchstart"; +const char DOM_TOUCH_MOVE[] = "touchmove"; +const char DOM_TOUCH_CANCEL[] = "touchcancel"; +const char DOM_TOUCH_END[] = "touchend"; +const char DOM_CAPTURE_TOUCH_START[] = "capturetouchstart"; +const char DOM_CAPTURE_TOUCH_MOVE[] = "capturetouchmove"; +const char DOM_CAPTURE_TOUCH_CANCEL[] = "capturetouchcancel"; +const char DOM_CAPTURE_TOUCH_END[] = "capturetouchend"; +const char DOM_CATCH_BUBBLE_TOUCH_START[] = "catchbubbletouchstart"; +const char DOM_CATCH_BUBBLE_TOUCH_MOVE[] = "catchbubbletouchmove"; +const char DOM_CATCH_BUBBLE_TOUCH_CANCEL[] = "catchbubbletouchcancel"; +const char DOM_CATCH_BUBBLE_TOUCH_END[] = "catchbubbletouchend"; +const char DOM_CATCH_CAPTURE_TOUCH_START[] = "catchcapturetouchstart"; +const char DOM_CATCH_CAPTURE_TOUCH_MOVE[] = "catchcapturetouchmove"; +const char DOM_CATCH_CAPTURE_TOUCH_CANCEL[] = "catchcapturetouchcancel"; +const char DOM_CATCH_CAPTURE_TOUCH_END[] = "catchcapturetouchend"; +const char DOM_CLICK[] = "click"; +const char DOM_LONG_PRESS[] = "longpress"; +const char DOM_COMPLETE[] = "complete"; +const char DOM_ERROR[] = "error"; +const char DOM_FOCUS[] = "focus"; +const char DOM_BLUR[] = "blur"; +const char DOM_KEY[] = "key"; +const char DOM_SELECTED[] = "selected"; +const char DOM_CANCEL[] = "cancel"; +const char DOM_HIDE[] = "hide"; +const char DOM_MOUSE[] = "mouse"; +const char DOM_SWIPE[] = "swipe"; +const char DOM_ROTATION[] = "rotation"; + +// video constants +const char DOM_VIDEO_MUTED[] = "muted"; +const char DOM_VIDEO_SRC[] = "src"; +const char DOM_VIDEO_AUTOPLAY[] = "autoplay"; +const char DOM_VIDEO_POSTER[] = "poster"; +const char DOM_VIDEO_CONTROLS[] = "controls"; +const char DOM_VIDEO_FIT[] = "objectFit"; +const char DOM_VIDEO_EVENT_PREPARED[] = "prepared"; +const char DOM_VIDEO_EVENT_START[] = "start"; +const char DOM_VIDEO_EVENT_PAUSE[] = "pause"; +const char DOM_VIDEO_EVENT_FINISH[] = "finish"; +const char DOM_VIDEO_EVENT_ERROR[] = "error"; +const char DOM_VIDEO_EVENT_SEEKING[] = "seeking"; +const char DOM_VIDEO_EVENT_SEEKED[] = "seeked"; +const char DOM_VIDEO_EVENT_TIMEUPDATE[] = "timeupdate"; +const char DOM_VIDEO_EVENT_FULLSCREENCHANGE[] = "fullscreenchange"; +const char DOM_VIDEO_METHOD_START[] = "start"; +const char DOM_VIDEO_METHOD_PAUSE[] = "pause"; +const char DOM_VIDEO_METHOD_SEEK_TO[] = "setCurrentTime"; +const char DOM_VIDEO_METHOD_REQUEST_FULLSCREEN[] = "requestFullscreen"; +const char DOM_VIDEO_METHOD_EXIT_FULLSCREEN[] = "exitFullscreen"; + +// textarea attribute and style constants +const char DOM_TEXTAREA_VALUE[] = "value"; +const char DOM_TEXTAREA_PLACEHOLDER[] = "placeholder"; +const char DOM_TEXTAREA_MAXLENGTH[] = "maxlength"; +const char DOM_TEXTAREA_MAXLINES[] = "maxlines"; +const char DOM_TEXTAREA_OBSCURE[] = "obscure"; +const char DOM_INPUT_AUTO_FOCUS[] = "autoFocus"; +const char DOM_TEXTAREA_PLACEHOLDER_COLOR[] = "placeholderColor"; +const char DOM_TEXTAREA_CURSOR_COLOR[] = "cursorColor"; +const char DOM_TEXTAREA_COLOR[] = "color"; +const char DOM_TEXTAREA_FONT_SIZE[] = "fontSize"; +const char DOM_TEXTAREA_FONT_WEIGHT[] = "fontWeight"; +const char DOM_TEXTAREA_FONT_FAMILY[] = "fontFamily"; +const char DOM_INPUT_RECT_RADIUS[] = "rectRadius"; +const char DOM_INPUT_BACKGROUND_COLOR[] = "backgroundColor"; +const char DOM_INPUT_CLICKED_COLOR[] = "clickedColor"; +const char DOM_INPUT_DISABLE_COLOR[] = "disabledColor"; +const char DOM_INPUT_FOCUS_COLOR[] = "focusColor"; +const char DOM_TEXTAREA_METHOD_FOCUS[] = "focus"; +const char DOM_TEXTAREA_EXTEND[] = "extend"; +const char DOM_TEXTAREA_SHOW_COUNTER[] = "showcounter"; +const char DOM_INPUT_SHOW_COUNTER[] = "showcounter"; +const char DOM_INPUT_METHOD_SHOW_ERROR[] = "showError"; +const char DOM_INPUT_METHOD_DELETE[] = "delete"; + +// input attribute and style constants +const char DOM_INPUT_TYPE[] = "type"; +const char DOM_INPUT_CHECKED[] = "checked"; +const char DOM_INPUT_NAME[] = "name"; +const char DOM_INPUT_VALUE[] = "value"; +const char DOM_INPUT_PLACEHOLDER[] = "placeholder"; +const char DOM_INPUT_MAXLENGTH[] = "maxlength"; +const char DOM_INPUT_ENTERKEYTYPE[] = "enterkeytype"; +const char DOM_INPUT_OBSCURE[] = "obscure"; +const char DOM_INPUT_PLACEHOLDER_COLOR[] = "placeholderColor"; +const char DOM_INPUT_CURSOR_COLOR[] = "cursorColor"; +const char DOM_INPUT_COLOR[] = "color"; +const char DOM_INPUT_FONT_SIZE[] = "fontSize"; +const char DOM_INPUT_FONT_WEIGHT[] = "fontWeight"; +const char DOM_INPUT_WIDTH[] = "width"; +const char DOM_INPUT_HEIGHT[] = "height"; +const char DOM_INPUT_FONT_FAMILY[] = "fontFamily"; +const char DOM_INPUT_METHOD_FOCUS[] = "focus"; +const char DOM_ICON_SRC[] = "headericon"; +const char DOM_SHOW_ICON_SRC[] = "showicon"; +const char DOM_HIDE_ICON_SRC[] = "hideicon"; +const char DOM_INPUT_OPTION_ICON[] = "icon"; +const char DOM_INPUT_OPTION_CONTENT[] = "content"; + +// input event constants +const char DOM_INPUT_EVENT_NAME[] = "name"; +const char DOM_INPUT_EVENT_VALUE[] = "value"; +const char DOM_INPUT_EVENT_CHECKED[] = "checked"; +const char DOM_INPUT_EVENT_ENTERKEYCLICK[] = "enterkeyclick"; +const char DOM_INPUT_EVENT_OPTION_SELECT[] = "optionselect"; +const char DOM_INPUT_EVENT_TRANSLATE[] = "translate"; +const char DOM_INPUT_EVENT_SHARE[] = "share"; +const char DOM_INPUT_EVENT_SEARCH[] = "search"; + +// divider style extern constants +const char DOM_DIVIDER_VERTICAL[] = "vertical"; +const char DOM_DIVIDER_STROKE_WIDTH[] = "strokeWidth"; +const char DOM_DIVIDER_LINE_CAP[] = "lineCap"; + +// canvas +const char DOM_CANVAS_METHOD_GET_CONTEXT[] = "getContext"; + +// button attribute and style constants +const char DOM_BUTTON_TYPE[] = "type"; +const char DOM_BUTTON_HEIGHT[] = "height"; +const char DOM_BUTTON_WIDTH[] = "width"; +const char DOM_BUTTON_MIN_WIDTH[] = "minWidth"; +const char DOM_BUTTON_RRECT_RADIUS[] = "radius"; +const char DOM_BUTTON_DEFAULT_COLOR[] = "backgroundColor"; +const char DOM_BUTTON_CLICKED_COLOR[] = "clickedColor"; +const char DOM_BUTTON_DISABLE_COLOR[] = "disabledColor"; +const char DOM_BUTTON_FOCUS_COLOR[] = "focusColor"; +const char DOM_BUTTON_AUTO_FOCUS[] = "autofocus"; +const char DOM_BUTTON_TEXT_DATA[] = "value"; +const char DOM_BUTTON_TEXT_COLOR[] = "textColor"; +const char DOM_BUTTON_TEXT_DISABLE_COLOR[] = "disabledTextColor"; +const char DOM_BUTTON_FONT_SIZE[] = "fontSize"; +const char DOM_BUTTON_FONT_WEIGHT[] = "fontWeight"; +const char DOM_BUTTON_FONT_FAMILY[] = "fontFamily"; +const char DOM_BUTTON_FONT_STYLE[] = "fontStyle"; +const char DOM_BUTTON_BORDER_WIDTH[] = "borderWidth"; +const char DOM_BUTTON_BORDER_COLOR[] = "borderColor"; +const char DOM_BUTTON_WAITING[] = "waiting"; +const char DOM_BUTTON_ICON[] = "icon"; +const char DOM_BUTTON_ICON_WIDTH[] = "iconWidth"; +const char DOM_BUTTON_ICON_HEIGHT[] = "iconHeight"; +const char DOM_BUTTON_ICON_DIRECTION[] = "changeIconDirection"; +const char DOM_BUTTON_PROGRESS_DIAMETER[] = "diameter"; +const char DOM_BUTTON_PROGRESS_COLOR[] = "progressColor"; +const char DOM_BUTTON_PROGRESS_FOCUS_COLOR[] = "progressFocusColor"; +const char DOM_BUTTON_INNER_PADDING[] = "innerPadding"; +const char DOM_BUTTON_METHOD_SET_PROGRESS[] = "setProgress"; + +// picker attribute and style constants +const char DOM_PICKER_SPLIT_ITEM = '\t'; +const char DOM_PICKER_SPLIT_ARRAY = '\n'; +const char DOM_PICKER_CONTAIN_SECOND[] = "containsecond"; +const char DOM_PICKER_RANGE[] = "range"; +const char DOM_PICKER_COLUMN_CHANGE[] = "columnchange"; +const char DOM_PICKER_COLUMN_COUNT[] = "columns"; +const char DOM_PICKER_HOUR24[] = "hours"; +const char DOM_PICKER_LUNAR[] = "lunarswitch"; +const char DOM_PICKER_SHOW_LUNAR[] = "lunar"; +const char DOM_PICKER_TYPE_TIME[] = "time"; +const char DOM_PICKER_TYPE_DATE[] = "date"; +const char DOM_PICKER_TYPE_TEXT[] = "text"; +const char DOM_PICKER_TYPE_MULTITEXT[] = "multi-text"; +const char DOM_PICKER_TYPE_DATETIME[] = "datetime"; +const char DOM_PICKER_TEXT_COLOR[] = "textColor"; +const char DOM_PICKER_SELECT_COLOR[] = "selectedColor"; +const char DOM_PICKER_SELECT_SIZE[] = "selectedFontSize"; +const char DOM_PICKER_SELECT_FAMILIES[] = "selectedFontFamily"; +const char DOM_PICKER_FOCUS_COLOR[] = "focusColor"; +const char DOM_PICKER_FOCUS_SIZE[] = "focusFontSize"; +const char DOM_PICKER_FOCUS_FAMILIES[] = "focusFontFamily"; +const char DOM_PICKER_PREFIX[] = "indicatorprefix"; +const char DOM_PICKER_SUFFIX[] = "indicatorsuffix"; +const char DOM_PICKER_DISAPPEAR_COLOR[] = "disappearColor"; +const char DOM_PICKER_DISAPPEAR_FONT_SIZE[] = "disappearFontSize"; +const char DOM_PICKER_COLUMN_HEIGHT[] = "columnHeight"; + +// calendar +const char DOM_CALENDAR_DATA[] = "calendardata"; +const char DOM_CALENDAR_DATE[] = "date"; +const char DOM_CALENDAR_DATE_ADAPTER[] = "dateadapter"; +const char DOM_CALENDAR_METHOD_GO_TO[] = "goto"; +const char DOM_CALENDAR_EVENT_SELECTED_CHANGE[] = "selectedchange"; +const char DOM_CALENDAR_SHOW_HOLIDAY[] = "showholiday"; +const char DOM_CALENDAR_SHOW_LUNAR[] = "showlunar"; +const char DOM_CALENDAR_CARD_CALENDAR[] = "cardcalendar"; +const char DOM_CALENDAR_START_DAY_OF_WEEK[] = "startdayofweek"; +const char DOM_CALENDAR_EVENT_REQUEST_DATA[] = "requestdata"; +const char DOM_CALENDAR_OFF_DAYS[] = "offdays"; + +// dialog +const char DOM_DIALOG_METHOD_SHOW[] = "show"; +const char DOM_DIALOG_METHOD_CLOSE[] = "close"; +const char DOM_DIALOG_EVENT_CANCEL[] = "cancel"; + +// multi modal event +const char DOM_VOICE_LABEL[] = "voicelabel"; +const char DOM_SUBSCRIPT_LABEL[] = "subscriptlabel"; +const char DOM_SUBSCRIPT_FLAG[] = "subscriptflag"; +const char DOM_SCENE_LABEL[] = "scenelabel"; + +// search constants +const char DOM_SEARCH_HINT[] = "hint"; +const char DOM_SEARCH_ICON[] = "icon"; +const char DOM_SUBMIT[] = "submit"; +const char DOM_SEARCH_VALUE[] = "value"; +const char DOM_SEARCH_BUTTON[] = "searchbutton"; + +// toggle constants +const char DOM_TOGGLE_BACKGROUND_COLOR[] = "backgroundColor"; +const char DOM_TOGGLE_CHECKED_COLOR[] = "checkedColor"; +const char DOM_TOGGLE_CHECKED_STATE[] = "checked"; +const char DOM_TOGGLE_TEXT_COLOR[] = "textColor"; +const char DOM_TOGGLE_HEIGHT[] = "height"; +const char DOM_TOGGLE_WIDTH[] = "width"; + +// clock constants +// clock style +const char DOM_DIGIT_FONT_FAMILY[] = "fontFamily"; +// clock attr +const char DOM_HOURS_WEST[] = "hourswest"; +const char DOM_CLOCK_CONFIG[] = "clockconfig"; +const char DOM_DIGIT_COLOR[] = "digitColor"; +const char DOM_DIGIT_COLOR_NIGHT[] = "digitColorNight"; +const char DOM_DIGIT_RADIUS_RATIO[] = "digitRadiusRatio"; +const char DOM_DIGIT_SIZE_RATIO[] = "digitSizeRatio"; +const char DOM_CLOCK_FACE_SOURCE[] = "face"; +const char DOM_CLOCK_FACE_SOURCE_NIGHT[] = "faceNight"; +const char DOM_HOUR_HAND_SOURCE[] = "hourHand"; +const char DOM_HOUR_HAND_SOURCE_NIGHT[] = "hourHandNight"; +const char DOM_MINUTE_HAND_SOURCE[] = "minuteHand"; +const char DOM_MINUTE_HAND_SOURCE_NIGHT[] = "minuteHandNight"; +const char DOM_SECOND_HAND_SOURCE[] = "secondHand"; +const char DOM_SECOND_HAND_SOURCE_NIGHT[] = "secondHandNight"; +const char DOM_SHOW_DIGIT[] = "showdigit"; + +// piece constants +const char DOM_PIECE_CONTENT[] = "content"; +const char DOM_PIECE_ICON[] = "icon"; +const char DOM_PIECE_CLOSABLE[] = "closable"; +const char DOM_PIECE_EVENT_CLOSE[] = "close"; + +// badge constants +const char DOM_BADGE_CONFIG[] = "config"; +const char DOM_BADGE_COUNT[] = "count"; +const char DOM_BADGE_LABEL[] = "label"; +const char DOM_BADGE_PLACEMENT[] = "placement"; +const char DOM_BADGE_VISIBLE[] = "visible"; +const char DOM_BADGE_MAX_COUNT[] = "maxcount"; +const char DOM_BADGE_COLOR[] = "badgeColor"; +const char DOM_BADGE_CIRCLE_SIZE[] = "badgeSize"; +const char DOM_BADGE_TEXT_FONT_SIZE[] = "textSize"; +const char DOM_BADGE_TEXT_COLOR[] = "textColor"; + +// grid container/row/columns +const char DOM_GRID_CONTAINER_COLUMNS[] = "columns"; +const char DOM_GRID_CONTAINER_GUTTER_WIDTH[] = "gutterwidth"; +const char DOM_GRID_CONTAINER_SIZE_TYPE[] = "sizetype"; +const char DOM_GRID_CONTAINER_GET_COLUMNS[] = "getColumns"; +const char DOM_GRID_CONTAINER_GET_COLUMN_WIDTH[] = "getColumnWidth"; +const char DOM_GRID_CONTAINER_GET_GUTTER_WIDTH[] = "getGutterWidth"; +const char DOM_GRID_CONTAINER_GET_SIZE_TYPE[] = "getSizeType"; +const char DOM_GRID_COLUMN_SPAN[] = "span"; +const char DOM_GRID_COLUMN_OFFSET[] = "offset"; +const char DOM_GRID_COLUMN_TYPE[] = "columntype"; +const char DOM_GRID_SIZE_TYPE_XS[] = "xs"; +const char DOM_GRID_SIZE_TYPE_SM[] = "sm"; +const char DOM_GRID_SIZE_TYPE_MD[] = "md"; +const char DOM_GRID_SIZE_TYPE_LG[] = "lg"; + +const char DOM_COLUMN_TYPE_NONE[] = "none"; +const char DOM_COLUMN_TYPE_BUBBLE[] = "bubble"; +const char DOM_COLUMN_TYPE_BUTTON[] = "button"; +const char DOM_COLUMN_TYPE_CARD[] = "card"; +const char DOM_COLUMN_TYPE_CONTENT[] = "content"; + +const char DOM_CLICK_EFFECT[] = "clickEffect"; +// panel constants +const char DOM_PANEL_METHOD_SHOW[] = "show"; +const char DOM_PANEL_METHOD_CLOSE[] = "close"; +const char DOM_PANEL_ATTR_TYPE[] = "type"; +const char DOM_PANEL_ATTR_MODE[] = "mode"; +const char DOM_PANEL_ATTR_DRAG_BAR[] = "dragbar"; +const char DOM_PANEL_ATTR_MIN_HEIGHT[] = "miniheight"; +const char DOM_PANEL_ATTR_HALF_HEIGHT[] = "halfheight"; +const char DOM_PANEL_ATTR_FULL_HEIGHT[] = "fullheight"; +const char DOM_PANEL_EVENT_SIZE_CHANGED[] = "sizechange"; + +// tool-bar-item constants +const char DOM_TOOL_BAR_ITEM_ICON[] = "icon"; +const char DOM_TOOL_BAR_ITEM_VALUE[] = "value"; +const char DOM_TOOL_BAR_ITEM_TEXT_COLOR[] = "textColor"; +const char DOM_TOOL_BAR_ITEM_FONT_SIZE[] = "fontSize"; +const char DOM_TOOL_BAR_ITEM_FONT_STYLE[] = "fontStyle"; +const char DOM_TOOL_BAR_ITEM_FONT_WEIGHT[] = "fontWeight"; +const char DOM_TOOL_BAR_ITEM_TEXT_DECORATION[] = "textDecoration"; +const char DOM_TOOL_BAR_ITEM_FONT_FAMILY[] = "fontFamily"; +const char DOM_TOOL_BAR_ITEM_ALLOW_SCALE[] = "allowScale"; + +// card transition +const char DOM_TRANSITION_EFFECT[] = "transitionEffect"; +const char DOM_TRANSITION_CARD_COMPOSEID[] = "ref"; + +// qrcode +const char DOM_QRCODE_BACKGROUND_COLOR[] = "backgroundColor"; +const char DOM_QRCODE_COLOR[] = "color"; +const char DOM_QRCODE_HEIGHT[] = "height"; +const char DOM_QRCODE_WIDTH[] = "width"; +const char DOM_QRCODE_TYPE[] = "type"; +const char DOM_QRCODE_VALUE[] = "value"; + +// svg +const char DOM_SVG_ID[] = "svgId"; +const char DOM_SVG_ANIMATION_BEGIN[] = "begin"; +const char DOM_SVG_ANIMATION_DUR[] = "dur"; +const char DOM_SVG_ANIMATION_END[] = "end"; +const char DOM_SVG_ANIMATION_MIN[] = "min"; +const char DOM_SVG_ANIMATION_MAX[] = "max"; +const char DOM_SVG_ANIMATION_RESTART[] = "restart"; +const char DOM_SVG_ANIMATION_REPEAT_COUNT[] = "repeatcount"; +const char DOM_SVG_ANIMATION_REPEAT_DUR[] = "repeatdur"; +const char DOM_SVG_ANIMATION_FILL[] = "fill"; +const char DOM_SVG_ANIMATION_CALC_MODE[] = "calcmode"; +const char DOM_SVG_ANIMATION_VALUES[] = "values"; +const char DOM_SVG_ANIMATION_KEY_TIMES[] = "keytimes"; +const char DOM_SVG_ANIMATION_KEY_SPLINES[] = "keysplines"; +const char DOM_SVG_ANIMATION_FROM[] = "from"; +const char DOM_SVG_ANIMATION_TO[] = "to"; +const char DOM_SVG_ANIMATION_BY[] = "by"; +const char DOM_SVG_ANIMATION_ATTRIBUTE_NAME[] = "attributename"; +const char DOM_SVG_ANIMATION_ADDITIVE[] = "additive"; +const char DOM_SVG_ANIMATION_ACCUMULATE[] = "accumulate"; +const char DOM_SVG_ANIMATION_TYPE[] = "type"; +const char DOM_SVG_ANIMATION_KEY_POINTS[] = "keypoints"; +const char DOM_SVG_ANIMATION_PATH[] = "path"; +const char DOM_SVG_ANIMATION_ROTATE[] = "rotate"; +const char DOM_SVG_ATTR_PATH[] = "path"; +const char DOM_SVG_START_OFFSET[] = "startoffset"; +const char DOM_SVG_FILL[] = "fill"; +const char DOM_SVG_FILL_OPACITY[] = "fillOpacity"; +const char DOM_SVG_FILL_RULE[] = "fillRule"; +const char DOM_SVG_FONT_FAMILY[] = "fontFamily"; +const char DOM_SVG_FONT_SIZE[] = "fontSize"; +const char DOM_SVG_FONT_STYLE[] = "fontStyle"; +const char DOM_SVG_FONT_WEIGHT[] = "fontWeight"; +const char DOM_SVG_LETTER_SPACING[] = "letterSpacing"; +const char DOM_SVG_TEXT_DECORATION[] = "textDecoration"; +const char DOM_SVG_TEXT_LENGTH[] = "textlength"; +const char DOM_SVG_STROKE[] = "stroke"; +const char DOM_SVG_STROKE_DASHARRAY[] = "strokeDasharray"; +const char DOM_SVG_STROKE_DASHOFFSET[] = "strokeDashoffset"; +const char DOM_SVG_STROKE_LINECAP[] = "strokeLinecap"; +const char DOM_SVG_STROKE_LINEJOIN[] = "strokeLinejoin"; +const char DOM_SVG_STROKE_MITERLIMIT[] = "strokeMiterlimit"; +const char DOM_SVG_STROKE_OPACITY[] = "strokeOpacity"; +const char DOM_SVG_STROKE_WIDTH[] = "strokeWidth"; +const char DOM_SVG_OPACITY[] = "opacity"; +const char DOM_SVG_VIEW_BOX[] = "viewbox"; +const char DOM_SVG_X[] = "x"; +const char DOM_SVG_Y[] = "y"; +const char DOM_SVG_WIDTH[] = "width"; +const char DOM_SVG_HEIGHT[] = "height"; +const char DOM_SVG_DX[] = "dx"; +const char DOM_SVG_DY[] = "dy"; +const char DOM_SVG_RX[] = "rx"; +const char DOM_SVG_RY[] = "ry"; +const char DOM_SVG_D[] = "d"; +const char DOM_SVG_X1[] = "x1"; +const char DOM_SVG_X2[] = "x2"; +const char DOM_SVG_Y1[] = "y1"; +const char DOM_SVG_Y2[] = "y2"; +const char DOM_SVG_POINTS[] = "points"; +const char DOM_SVG_CX[] = "cx"; +const char DOM_SVG_CY[] = "cy"; +const char DOM_SVG_R[] = "r"; +const char DOM_SVG_ROTATE[] = "rotate"; +const char DOM_SVG_LENGTH_ADJUST[] = "lengthadjust"; + +// web +const char DOM_PAGESTART[] = "pagestart"; +const char DOM_PAGEFINISH[] = "pagefinish"; +const char DOM_PAGEERROR[] = "error"; +const char DOM_WEB_WEBSRC[] = "src"; +const char DOM_METHOD_RELOAD[] = "reload"; + +const char DOM_ZINDEX[] = "zIndex"; + +// camera +const char DOM_TAKE_PHOTO[] = "takePhoto"; +const char DOM_CAMERA_FLASH[] = "flash"; +const char DOM_CAMERA_DEVICE_POSITION[] = "deviceposition"; +const char DOM_CAMERA_START_RECORD[] = "startRecorder"; +const char DOM_CAMERA_CLOSE_RECORDER[] = "closeRecorder"; + +} // namespace OHOS::Ace diff --git a/frameworks/bridge/common/dom/dom_type.h b/frameworks/bridge/common/dom/dom_type.h new file mode 100644 index 00000000..de242c7c --- /dev/null +++ b/frameworks/bridge/common/dom/dom_type.h @@ -0,0 +1,1048 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_TYPE_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_TYPE_H + +#include + +#include "base/utils/macros.h" + +namespace OHOS::Ace { + +using NodeId = int32_t; +ACE_EXPORT extern const NodeId DOM_ROOT_NODE_ID_BASE; +ACE_EXPORT extern const char DOM_DEFAULT_ROOT_NODE_ID[]; +// node tag defines +ACE_EXPORT extern const char DOM_NODE_TAG_CALENDAR[]; +ACE_EXPORT extern const char DOM_NODE_TAG_DIV[]; +ACE_EXPORT extern const char DOM_NODE_TAG_GRID_COLUMN[]; +ACE_EXPORT extern const char DOM_NODE_TAG_GRID_CONTAINER[]; +ACE_EXPORT extern const char DOM_NODE_TAG_GRID_ROW[]; +ACE_EXPORT extern const char DOM_NODE_TAG_SVG_TEXT[]; +ACE_EXPORT extern const char DOM_NODE_TAG_TEXT[]; +ACE_EXPORT extern const char DOM_NODE_TAG_TEXT_PATH[]; +ACE_EXPORT extern const char DOM_NODE_TAG_TSPAN[]; +ACE_EXPORT extern const char DOM_NODE_TAG_PICKER_DIALOG[]; +ACE_EXPORT extern const char DOM_NODE_TAG_PICKER_VIEW[]; +ACE_EXPORT extern const char DOM_NODE_TAG_OPTION[]; +ACE_EXPORT extern const char DOM_NODE_TAG_POPUP[]; +ACE_EXPORT extern const char DOM_NODE_TAG_PROGRESS[]; +ACE_EXPORT extern const char DOM_NODE_TAG_SELECT[]; +ACE_EXPORT extern const char DOM_NODE_TAG_MENU[]; +ACE_EXPORT extern const char DOM_NODE_TAG_SLIDER[]; +ACE_EXPORT extern const char DOM_NODE_TAG_SPAN[]; +ACE_EXPORT extern const char DOM_NODE_TAG_STACK[]; +ACE_EXPORT extern const char DOM_NODE_TAG_SWIPER[]; +ACE_EXPORT extern const char DOM_NODE_TAG_SWITCH[]; +ACE_EXPORT extern const char DOM_NODE_TAG_TABS[]; +ACE_EXPORT extern const char DOM_NODE_TAG_TAB_BAR[]; +ACE_EXPORT extern const char DOM_NODE_TAG_TAB_CONTENT[]; +ACE_EXPORT extern const char DOM_NODE_TAG_REFRESH[]; +ACE_EXPORT extern const char DOM_NODE_TAG_IMAGE[]; +ACE_EXPORT extern const char DOM_NODE_TAG_LIST[]; +ACE_EXPORT extern const char DOM_NODE_TAG_LIST_ITEM[]; +ACE_EXPORT extern const char DOM_NODE_TAG_LIST_ITEM_GROUP[]; +ACE_EXPORT extern const char DOM_NODE_TAG_VIDEO[]; +ACE_EXPORT extern const char DOM_NODE_TAG_RATING[]; +ACE_EXPORT extern const char DOM_NODE_TAG_MARQUEE[]; +ACE_EXPORT extern const char DOM_NODE_TAG_NAVIGATION_BAR[]; +ACE_EXPORT extern const char DOM_NODE_TAG_NAVIGATION_MENU[]; +ACE_EXPORT extern const char DOM_NODE_TAG_TEXTAREA[]; +ACE_EXPORT extern const char DOM_NODE_TAG_INPUT[]; +ACE_EXPORT extern const char DOM_NODE_TAG_LABEL[]; +ACE_EXPORT extern const char DOM_NODE_TAG_DIVIDER[]; +ACE_EXPORT extern const char DOM_NODE_TAG_CANVAS[]; +ACE_EXPORT extern const char DOM_NODE_TAG_BUTTON[]; +ACE_EXPORT extern const char DOM_NODE_TAG_CHART[]; +ACE_EXPORT extern const char DOM_NODE_TAG_DIALOG[]; +ACE_EXPORT extern const char DOM_NODE_TAG_SEARCH[]; +ACE_EXPORT extern const char DOM_NODE_TAG_IMAGE_ANIMATOR[]; +ACE_EXPORT extern const char DOM_NODE_TAG_TOGGLE[]; +ACE_EXPORT extern const char DOM_NODE_TAG_CLOCK[]; +ACE_EXPORT extern const char DOM_NODE_TAG_STEPPER[]; +ACE_EXPORT extern const char DOM_NODE_TAG_STEPPER_ITEM[]; +ACE_EXPORT extern const char DOM_NODE_TAG_PIECE[]; +ACE_EXPORT extern const char DOM_NODE_TAG_BADGE[]; +ACE_EXPORT extern const char DOM_NODE_TAG_PANEL[]; +ACE_EXPORT extern const char DOM_NODE_TAG_TOOL_BAR[]; +ACE_EXPORT extern const char DOM_NODE_TAG_TOOL_BAR_ITEM[]; +ACE_EXPORT extern const char DOM_NODE_TAG_QRCODE[]; +ACE_EXPORT extern const char DOM_NODE_TAG_SVG[]; +ACE_EXPORT extern const char DOM_NODE_TAG_RECT[]; +ACE_EXPORT extern const char DOM_NODE_TAG_ANIMATE[]; +ACE_EXPORT extern const char DOM_NODE_TAG_WEB[]; +ACE_EXPORT extern const char DOM_NODE_TAG_PATH[]; +ACE_EXPORT extern const char DOM_NODE_TAG_LINE[]; +ACE_EXPORT extern const char DOM_NODE_TAG_POLYLINE[]; +ACE_EXPORT extern const char DOM_NODE_TAG_POLYGON[]; +ACE_EXPORT extern const char DOM_NODE_TAG_CIRCLE[]; +ACE_EXPORT extern const char DOM_NODE_TAG_ELLIPSE[]; +ACE_EXPORT extern const char DOM_NODE_TAG_ANIMATE_MOTION[]; +ACE_EXPORT extern const char DOM_NODE_TAG_CAMERA[]; + +// common attribute constants +ACE_EXPORT extern const char DOM_ID[]; +ACE_EXPORT extern const char DOM_SHARE_ID[]; +ACE_EXPORT extern const char DOM_SHOW[]; +ACE_EXPORT extern const char DOM_DIR[]; + +// common persudo class style constants +ACE_EXPORT extern const char DOM_PSEUDO_CLASS_SYMBOL[]; +ACE_EXPORT extern const char DOM_ACTIVE_PSEUDO_CLASS[]; +ACE_EXPORT extern const char DOM_DISABLED_PSEUDO_CLASS[]; +ACE_EXPORT extern const char DOM_FOCUS_PSEUDO_CLASS[]; +ACE_EXPORT extern const char DOM_CHECKED_PSEUDO_CLASS[]; +ACE_EXPORT extern const char DOM_WAITING_PSEUDO_CLASS[]; + +// common style constants +ACE_EXPORT extern const char DOM_WIDTH[]; +ACE_EXPORT extern const char DOM_HEIGHT[]; +ACE_EXPORT extern const char DOM_TYPE[]; +ACE_EXPORT extern const char DOM_VALUE[]; +ACE_EXPORT extern const char DOM_START[]; +ACE_EXPORT extern const char DOM_END[]; +ACE_EXPORT extern const char DOM_TITLE[]; +ACE_EXPORT extern const char DOM_TOUCHABLE[]; +ACE_EXPORT extern const char DOM_DISABLED[]; +ACE_EXPORT extern const char DOM_PADDING[]; +ACE_EXPORT extern const char DOM_PADDING_TOP[]; +ACE_EXPORT extern const char DOM_PADDING_RIGHT[]; +ACE_EXPORT extern const char DOM_PADDING_BOTTOM[]; +ACE_EXPORT extern const char DOM_PADDING_LEFT[]; +ACE_EXPORT extern const char DOM_PADDING_START[]; +ACE_EXPORT extern const char DOM_PADDING_END[]; +ACE_EXPORT extern const char DOM_MARGIN[]; +ACE_EXPORT extern const char DOM_MARGIN_TOP[]; +ACE_EXPORT extern const char DOM_MARGIN_RIGHT[]; +ACE_EXPORT extern const char DOM_MARGIN_BOTTOM[]; +ACE_EXPORT extern const char DOM_MARGIN_LEFT[]; +ACE_EXPORT extern const char DOM_MARGIN_START[]; +ACE_EXPORT extern const char DOM_MARGIN_END[]; +ACE_EXPORT extern const char DOM_LAYOUT_IN_BOX[]; +ACE_EXPORT extern const char DOM_BACKGROUND_COLOR[]; +ACE_EXPORT extern const char DOM_BACKGROUND_IMAGE[]; +ACE_EXPORT extern const char DOM_FADE_COLOR[]; +ACE_EXPORT extern const char DOM_BOX_SHADOW_H[]; +ACE_EXPORT extern const char DOM_BOX_SHADOW_V[]; +ACE_EXPORT extern const char DOM_BOX_SHADOW_BLUR[]; +ACE_EXPORT extern const char DOM_BOX_SHADOW_SPREAD[]; +ACE_EXPORT extern const char DOM_BOX_SHADOW_COLOR[]; +ACE_EXPORT extern const char DOM_FLEX_DIRECTION[]; +ACE_EXPORT extern const char DOM_FLEX_ROW[]; +ACE_EXPORT extern const char DOM_FLEX_COLUMN[]; +ACE_EXPORT extern const char DOM_FLEX[]; +ACE_EXPORT extern const char DOM_FLEX_GROW[]; +ACE_EXPORT extern const char DOM_FLEX_SHRINK[]; +ACE_EXPORT extern const char DOM_FLEX_BASIS[]; +ACE_EXPORT extern const char DOM_FLEX_WEIGHT[]; +ACE_EXPORT extern const char DOM_ALIGN_SELF[]; +ACE_EXPORT extern const char DOM_MIN_WIDTH[]; +ACE_EXPORT extern const char DOM_MIN_HEIGHT[]; +ACE_EXPORT extern const char DOM_MAX_WIDTH[]; +ACE_EXPORT extern const char DOM_MAX_HEIGHT[]; +ACE_EXPORT extern const char DOM_DISPLAY_INDEX[]; +ACE_EXPORT extern const char DOM_ASPECT_RATIO[]; +ACE_EXPORT extern const char DOM_OPACITY[]; +ACE_EXPORT extern const char DOM_DISPLAY[]; +ACE_EXPORT extern const char DOM_VISIBILITY[]; +ACE_EXPORT extern const char DOM_DISPLAY_GRID[]; +ACE_EXPORT extern const char DOM_DISPLAY_FLEX[]; +ACE_EXPORT extern const char DOM_DISPLAY_NONE[]; +ACE_EXPORT extern const char DOM_VISIBILITY_VISIBLE[]; +ACE_EXPORT extern const char DOM_VISIBILITY_HIDDEN[]; +ACE_EXPORT extern const char DOM_BORDER[]; +ACE_EXPORT extern const char DOM_BORDER_WIDTH[]; +ACE_EXPORT extern const char DOM_BORDER_LEFT_WIDTH[]; +ACE_EXPORT extern const char DOM_BORDER_TOP_WIDTH[]; +ACE_EXPORT extern const char DOM_BORDER_RIGHT_WIDTH[]; +ACE_EXPORT extern const char DOM_BORDER_BOTTOM_WIDTH[]; +ACE_EXPORT extern const char DOM_BORDER_COLOR[]; +ACE_EXPORT extern const char DOM_BORDER_LEFT_COLOR[]; +ACE_EXPORT extern const char DOM_BORDER_TOP_COLOR[]; +ACE_EXPORT extern const char DOM_BORDER_RIGHT_COLOR[]; +ACE_EXPORT extern const char DOM_BORDER_BOTTOM_COLOR[]; +ACE_EXPORT extern const char DOM_BORDER_STYLE[]; +ACE_EXPORT extern const char DOM_BORDER_LEFT_STYLE[]; +ACE_EXPORT extern const char DOM_BORDER_TOP_STYLE[]; +ACE_EXPORT extern const char DOM_BORDER_RIGHT_STYLE[]; +ACE_EXPORT extern const char DOM_BORDER_BOTTOM_STYLE[]; +ACE_EXPORT extern const char DOM_BORDER_RADIUS[]; +ACE_EXPORT extern const char DOM_BORDER_TOP_LEFT_RADIUS[]; +ACE_EXPORT extern const char DOM_BORDER_TOP_RIGHT_RADIUS[]; +ACE_EXPORT extern const char DOM_BORDER_BOTTOM_RIGHT_RADIUS[]; +ACE_EXPORT extern const char DOM_BORDER_BOTTOM_LEFT_RADIUS[]; +ACE_EXPORT extern const char DOM_POSITION[]; +ACE_EXPORT extern const char DOM_POSITION_RELATIVE[]; +ACE_EXPORT extern const char DOM_POSITION_FIXED[]; +ACE_EXPORT extern const char DOM_POSITION_ABSOLUTE[]; +ACE_EXPORT extern const char DOM_POSITION_TOP[]; +ACE_EXPORT extern const char DOM_POSITION_RIGHT[]; +ACE_EXPORT extern const char DOM_POSITION_BOTTOM[]; +ACE_EXPORT extern const char DOM_POSITION_LEFT[]; +ACE_EXPORT extern const char DOM_BACKGROUND_IMAGE_SIZE[]; +ACE_EXPORT extern const char DOM_BACKGROUND_IMAGE_SIZE_CONTAIN[]; +ACE_EXPORT extern const char DOM_BACKGROUND_IMAGE_SIZE_COVER[]; +ACE_EXPORT extern const char DOM_BACKGROUND_IMAGE_SIZE_AUTO[]; +ACE_EXPORT extern const char DOM_BACKGROUND_IMAGE_POSITION[]; +ACE_EXPORT extern const char DOM_BACKGROUND_IMAGE_POSITION_LEFT[]; +ACE_EXPORT extern const char DOM_BACKGROUND_IMAGE_POSITION_CENTER[]; +ACE_EXPORT extern const char DOM_BACKGROUND_IMAGE_POSITION_RIGHT[]; +ACE_EXPORT extern const char DOM_BACKGROUND_IMAGE_POSITION_TOP[]; +ACE_EXPORT extern const char DOM_BACKGROUND_IMAGE_POSITION_BOTTOM[]; +ACE_EXPORT extern const char DOM_BACKGROUND_IMAGE_REPEAT[]; +ACE_EXPORT extern const char DOM_BACKGROUND[]; +ACE_EXPORT extern const char DOM_GRADIENT_DIRECTION_TOP[]; +ACE_EXPORT extern const char DOM_GRADIENT_DIRECTION_RIGHT[]; +ACE_EXPORT extern const char DOM_GRADIENT_DIRECTION_BOTTOM[]; +ACE_EXPORT extern const char DOM_GRADIENT_DIRECTION_LEFT[]; +ACE_EXPORT extern const char DOM_VALUES[]; +ACE_EXPORT extern const char DOM_GRADIENT_VALUES[]; +ACE_EXPORT extern const char DOM_GRADIENT_TYPE[]; +ACE_EXPORT extern const char DOM_GRADIENT_DIRECTIONS[]; +ACE_EXPORT extern const char DOM_REPEATING_LINEAR_GRADIENT[]; +ACE_EXPORT extern const char DOM_TRANSFORM[]; +ACE_EXPORT extern const char DOM_SCALE[]; +ACE_EXPORT extern const char DOM_SCALE_X[]; +ACE_EXPORT extern const char DOM_SCALE_Y[]; +ACE_EXPORT extern const char DOM_TRANSLATE[]; +ACE_EXPORT extern const char DOM_TRANSLATE_X[]; +ACE_EXPORT extern const char DOM_TRANSLATE_Y[]; +ACE_EXPORT extern const char DOM_ROTATE[]; +ACE_EXPORT extern const char DOM_ROTATE_X[]; +ACE_EXPORT extern const char DOM_ROTATE_Y[]; +ACE_EXPORT extern const char DOM_FOCUSABLE[]; +ACE_EXPORT extern const char DOM_ANIMATION_WIDTH[]; +ACE_EXPORT extern const char DOM_ANIMATION_HEIGHT[]; +ACE_EXPORT extern const char DOM_ANIMATION_COLOR[]; +ACE_EXPORT extern const char DOM_ANIMATION_OPACITY[]; +ACE_EXPORT extern const char DOM_ANIMATION_ITERATIONS[]; +ACE_EXPORT extern const char DOM_ANIMATION_DELAY_API[]; +ACE_EXPORT extern const char DOM_ANIMATION_DURATION_API[]; +ACE_EXPORT extern const char DOM_TRANSFORM_ORIGIN[]; +ACE_EXPORT extern const char DOM_ANIMATION_NAME[]; +ACE_EXPORT extern const char DOM_ANIMATION_DELAY[]; +ACE_EXPORT extern const char DOM_ANIMATION_DURATION[]; +ACE_EXPORT extern const char DOM_ANIMATION_FILL[]; +ACE_EXPORT extern const char DOM_ANIMATION_EASING[]; +ACE_EXPORT extern const char DOM_ANIMATION_ITERATION_COUNT[]; +ACE_EXPORT extern const char DOM_ANIMATION_TIMING_FUNCTION[]; +ACE_EXPORT extern const char DOM_ANIMATION_FILL_MODE[]; +ACE_EXPORT extern const char DOM_ANIMATION_DIRECTION[]; +ACE_EXPORT extern const char DOM_ANIMATION_DIRECTION_NORMAL[]; +ACE_EXPORT extern const char DOM_ANIMATION_DIRECTION_ALTERNATE[]; +ACE_EXPORT extern const char DOM_ANIMATION_DIRECTION_REVERSE[]; +ACE_EXPORT extern const char DOM_ANIMATION_DIRECTION_ALTERNATE_REVERSE[]; +ACE_EXPORT extern const char DOM_ANIMATION_TIMING_FUNCTION_EASE[]; +ACE_EXPORT extern const char DOM_ANIMATION_TIMING_FUNCTION_EASE_IN[]; +ACE_EXPORT extern const char DOM_ANIMATION_TIMING_FUNCTION_EASE_OUT[]; +ACE_EXPORT extern const char DOM_ANIMATION_TIMING_FUNCTION_EASE_IN_OUT[]; +ACE_EXPORT extern const char DOM_ANIMATION_TIMING_FUNCTION_LINEAR[]; +ACE_EXPORT extern const char DOM_ANIMATION_TIMING_FUNCTION_FAST_OUT_SLOW_IN[]; +ACE_EXPORT extern const char DOM_ANIMATION_TIMING_FUNCTION_LINEAR_OUT_SLOW_IN[]; +ACE_EXPORT extern const char DOM_ANIMATION_TIMING_FUNCTION_FAST_OUT_LINEAR_IN[]; +ACE_EXPORT extern const char DOM_ANIMATION_TIMING_FUNCTION_FRICTION[]; +ACE_EXPORT extern const char DOM_ANIMATION_TIMING_FUNCTION_EXTREME_DECELERATION[]; +ACE_EXPORT extern const char DOM_ANIMATION_TIMING_FUNCTION_SHARP[]; +ACE_EXPORT extern const char DOM_ANIMATION_TIMING_FUNCTION_RHYTHM[]; +ACE_EXPORT extern const char DOM_ANIMATION_TIMING_FUNCTION_SMOOTH[]; +ACE_EXPORT extern const char DOM_ANIMATION_TIMING_FUNCTION_STEPS[]; +ACE_EXPORT extern const char DOM_ANIMATION_TIMING_FUNCTION_CUBIC_BEZIER[]; +ACE_EXPORT extern const char DOM_ANIMATION_FILL_MODE_NONE[]; +ACE_EXPORT extern const char DOM_ANIMATION_FILL_MODE_FORWARDS[]; +ACE_EXPORT extern const char DOM_ANIMATION_FILL_MODE_BACKWARDS[]; +ACE_EXPORT extern const char DOM_ANIMATION_FILL_MODE_BOTH[]; +ACE_EXPORT extern const char DOM_ANIMATION_NAME_TIME[]; +ACE_EXPORT extern const char DOM_ANIMATION_OFFSET[]; +ACE_EXPORT extern const char DOM_TRANSFORM_ORIGIN_RIGHT_TOP[]; +ACE_EXPORT extern const char DOM_TRANSFORM_ORIGIN_RIGHT_CENTER[]; +ACE_EXPORT extern const char DOM_TRANSFORM_ORIGIN_RIGHT_BOTTOM[]; +ACE_EXPORT extern const char DOM_TRANSFORM_ORIGIN_CENTER_TOP[]; +ACE_EXPORT extern const char DOM_TRANSFORM_ORIGIN_CENTER_CENTER[]; +ACE_EXPORT extern const char DOM_TRANSFORM_ORIGIN_CENTER_BOTTOM[]; +ACE_EXPORT extern const char DOM_TRANSFORM_ORIGIN_LEFT_TOP[]; +ACE_EXPORT extern const char DOM_TRANSFORM_ORIGIN_LEFT_CENTER[]; +ACE_EXPORT extern const char DOM_TRANSFORM_ORIGIN_LEFT_BOTTOM[]; +ACE_EXPORT extern const char DOM_FILTER[]; +ACE_EXPORT extern const char DOM_BACKDROP_FILTER[]; +ACE_EXPORT extern const char DOM_WINDOW_FILTER[]; + +// transition style +ACE_EXPORT extern const char DOM_TRANSITION_ENTER[]; +ACE_EXPORT extern const char DOM_TRANSITION_EXIT[]; +ACE_EXPORT extern const char DOM_TRANSITION_DURATION[]; +ACE_EXPORT extern const char DOM_TRANSITION_TIMING_FUNCTION[]; + +// shared transition style +ACE_EXPORT extern const char DOM_SHARED_TRANSITION_EFFECT[]; +ACE_EXPORT extern const char DOM_SHARED_TRANSITION_NAME[]; +ACE_EXPORT extern const char DOM_SHARED_TRANSITION_TIMING_FUNCTION[]; + +// display: grid style constants +ACE_EXPORT extern const char DOM_GRID_TEMPLATE_COLUMNS[]; +ACE_EXPORT extern const char DOM_GRID_TEMPLATE_ROWS[]; +ACE_EXPORT extern const char DOM_GRID_COLUMN_GAP[]; +ACE_EXPORT extern const char DOM_GRID_ROW_GAP[]; +ACE_EXPORT extern const char DOM_GRID_COLUMN_START[]; +ACE_EXPORT extern const char DOM_GRID_COLUMN_END[]; +ACE_EXPORT extern const char DOM_GRID_ROW_START[]; +ACE_EXPORT extern const char DOM_GRID_ROW_END[]; +ACE_EXPORT extern const char DOM_GRID_AUTO_FLOW[]; + +// div node style constants +ACE_EXPORT extern const char DOM_ALIGN_CONTENT[]; +ACE_EXPORT extern const char DOM_ALIGN_CONTENT_STRETCH[]; +ACE_EXPORT extern const char DOM_ALIGN_CONTENT_START[]; +ACE_EXPORT extern const char DOM_ALIGN_CONTENT_CENTER[]; +ACE_EXPORT extern const char DOM_ALIGN_CONTENT_END[]; +ACE_EXPORT extern const char DOM_ALIGN_CONTENT_BETWEEN[]; +ACE_EXPORT extern const char DOM_ALIGN_CONTENT_AROUND[]; +ACE_EXPORT extern const char DOM_ALIGN_ITEMS[]; +ACE_EXPORT extern const char DOM_ALIGN_ITEMS_START[]; +ACE_EXPORT extern const char DOM_ALIGN_ITEMS_CENTER[]; +ACE_EXPORT extern const char DOM_ALIGN_ITEMS_END[]; +ACE_EXPORT extern const char DOM_ALIGN_ITEMS_STRETCH[]; +ACE_EXPORT extern const char DOM_ALIGN_ITEMS_BASELINE[]; +ACE_EXPORT extern const char DOM_JUSTIFY_CONTENT[]; +ACE_EXPORT extern const char DOM_JUSTIFY_CONTENT_START[]; +ACE_EXPORT extern const char DOM_JUSTIFY_CONTENT_CENTER[]; +ACE_EXPORT extern const char DOM_JUSTIFY_CONTENT_END[]; +ACE_EXPORT extern const char DOM_JUSTIFY_CONTENT_BETWEEN[]; +ACE_EXPORT extern const char DOM_JUSTIFY_CONTENT_AROUND[]; +ACE_EXPORT extern const char DOM_JUSTIFY_CONTENT_EVENLY[]; +ACE_EXPORT extern const char DOM_FLEX_WRAP[]; +ACE_EXPORT extern const char DOM_WRAP[]; +ACE_EXPORT extern const char DOM_DIV_CARD_TYPE[]; +ACE_EXPORT extern const char DOM_DIV_CARD_BLUR[]; + +// image attribute and style constants +ACE_EXPORT extern const char DOM_SRC[]; +ACE_EXPORT extern const char DOM_IMAGE_FIT[]; +ACE_EXPORT extern const char DOM_IMAGE_ALT[]; +ACE_EXPORT extern const char DOM_IMAGE_MATCH_TEXT_DIRECTION[]; +ACE_EXPORT extern const char DOM_IMAGE_FIT_ORIGINAL_SIZE[]; + +// image animator attribute and stytle constants +ACE_EXPORT extern const char DOM_IMAGES[]; +ACE_EXPORT extern const char DOM_ITERATION[]; +ACE_EXPORT extern const char DOM_REVERSE[]; +ACE_EXPORT extern const char DOM_FIXEDSIZE[]; +ACE_EXPORT extern const char DOM_FILLMODE[]; +ACE_EXPORT extern const char DOM_PREDECODE[]; +ACE_EXPORT extern const char DOM_IMAGE_ANIMATOR_START[]; +ACE_EXPORT extern const char DOM_IMAGE_ANIMATOR_STOP[]; +ACE_EXPORT extern const char DOM_IMAGE_ANIMATOR_PAUSE[]; +ACE_EXPORT extern const char DOM_IMAGE_ANIMATOR_RESUME[]; + +// list attribute、style and event constants +ACE_EXPORT extern const char DOM_LIST_COLUMNS[]; +ACE_EXPORT extern const char DOM_LIST_ITEM_EXTENT[]; +ACE_EXPORT extern const char DOM_LIST_EVENT_SCROLL[]; +ACE_EXPORT extern const char DOM_LIST_EVENT_SCROLL_BOTTOM[]; +ACE_EXPORT extern const char DOM_LIST_EVENT_SCROLL_END[]; +ACE_EXPORT extern const char DOM_LIST_EVENT_SCROLL_TOP[]; +ACE_EXPORT extern const char DOM_LIST_EVENT_SCROLL_TOUCH_UP[]; +ACE_EXPORT extern const char DOM_LIST_EVENT_INDEXER_CHANGE[]; +ACE_EXPORT extern const char DOM_LIST_ITEM_EVENT_STICKY[]; +ACE_EXPORT extern const char DOM_LIST_METHOD_EXPAND_GROUP[]; +ACE_EXPORT extern const char DOM_LIST_METHOD_COLLAPSE_GROUP[]; +ACE_EXPORT extern const char DOM_LIST_METHOD_SCROLL_BY[]; +ACE_EXPORT extern const char DOM_LIST_METHOD_SCROLL_TO[]; +ACE_EXPORT extern const char DOM_LIST_METHOD_SCROLL_ARROW[]; +ACE_EXPORT extern const char DOM_LIST_METHOD_SCROLL_TOP[]; +ACE_EXPORT extern const char DOM_LIST_METHOD_SCROLL_BOTTOM[]; +ACE_EXPORT extern const char DOM_LIST_METHOD_SCROLL_PAGE[]; +ACE_EXPORT extern const char DOM_LIST_SCROLLPAGE[]; +ACE_EXPORT extern const char DOM_LIST_CHAIN_ANIMATION[]; +ACE_EXPORT extern const char DOM_LIST_INITIAL_INDEX[]; +ACE_EXPORT extern const char DOM_LIST_INITIAL_OFFSET[]; +ACE_EXPORT extern const char DOM_LIST_UPDATE_EFFECT[]; +ACE_EXPORT extern const char DOM_LIST_INDEXER[]; +ACE_EXPORT extern const char DOM_LIST_INDEXER_MODE[]; +ACE_EXPORT extern const char DOM_LIST_INDEXER_BUBBLE[]; +ACE_EXPORT extern const char DOM_LIST_INDEXER_MULTI[]; +ACE_EXPORT extern const char DOM_LIST_ITEM_SCALE[]; +ACE_EXPORT extern const char DOM_LIST_ITEM_OPACITY[]; +ACE_EXPORT extern const char DOM_LIST_ITEM_CENTER[]; +ACE_EXPORT extern const char DOM_LIST_CENTER_LAYOUT[]; +ACE_EXPORT extern const char DOM_LIST_SCROLL_VIBRATE[]; +ACE_EXPORT extern const char DOM_LIST_DIVIDER[]; +ACE_EXPORT extern const char DOM_LIST_DIVIDER_COLOR[]; +ACE_EXPORT extern const char DOM_LIST_DIVIDER_HEIGHT[]; +ACE_EXPORT extern const char DOM_LIST_DIVIDER_LENGTH[]; +ACE_EXPORT extern const char DOM_LIST_DIVIDER_ORIGIN[]; +ACE_EXPORT extern const char DOM_LIST_ATTR_SELECTED[]; +ACE_EXPORT extern const char DOM_SCROLL_EFFECT[]; +ACE_EXPORT extern const char DOM_SCROLL_EFFECT_SPRING[]; +ACE_EXPORT extern const char DOM_SCROLL_EFFECT_FADE[]; +ACE_EXPORT extern const char DOM_SCROLL_EFFECT_NONE[]; +ACE_EXPORT extern const char DOM_SCROLL_SCROLLBAR[]; +ACE_EXPORT extern const char DOM_SCROLL_SCROLLBAR_OFF[]; +ACE_EXPORT extern const char DOM_SCROLL_SCROLLBAR_ON[]; +ACE_EXPORT extern const char DOM_SCROLL_SCROLLBAR_AUTO[]; +ACE_EXPORT extern const char DOM_SCROLL_SHAPE_MODE[]; +ACE_EXPORT extern const char DOM_SCROLL_SHAPE_MODE_RECT[]; +ACE_EXPORT extern const char DOM_SCROLL_SHAPE_MODE_ROUND[]; +ACE_EXPORT extern const char DOM_SCROLL_SCROLLBAR_COLOR[]; +ACE_EXPORT extern const char DOM_SCROLL_SCROLLBAR_WIDTH[]; +ACE_EXPORT extern const char DOM_SCROLL_OVER_SCROLL_EFFECT[]; + +// list-items attribute and style constants +ACE_EXPORT extern const char DOM_LISTITEM_COLUMN_SPAN[]; +ACE_EXPORT extern const char DOM_LISTITEM_TYPE[]; +ACE_EXPORT extern const char DOM_LISTITEM_STICKY[]; +ACE_EXPORT extern const char DOM_LISTITEM_STICKY_RADIUS[]; +ACE_EXPORT extern const char DOM_LISTITEM_CLICK_EFFECT[]; +ACE_EXPORT extern const char DOM_LISTITEM_IS_TITLE[]; +ACE_EXPORT extern const char DOM_LISTITEM_INDEX_KEY[]; +ACE_EXPORT extern const char DOM_LISTITEM_PRIMARY[]; +ACE_EXPORT extern const char DOM_LISTITEM_CARD_TYPE[]; +ACE_EXPORT extern const char DOM_LISTITEM_CARD_BLUR[]; +ACE_EXPORT extern const char DOM_LISTITEM_ACTIVE[]; + +// list-items-group attribute and style constants +ACE_EXPORT extern const char DOM_LIST_ITEM_GROUP_EVENT_GROUPCLICK[]; +ACE_EXPORT extern const char DOM_LIST_ITEM_GROUP_EVENT_GROUPCOLLAPSE[]; +ACE_EXPORT extern const char DOM_LIST_ITEM_GROUP_EVENT_GROUPEXPAND[]; + +// option attribute style and event constants +ACE_EXPORT extern const char DOM_OPTION_SELECTED[]; +ACE_EXPORT extern const char DOM_OPTION_VALUE[]; +ACE_EXPORT extern const char DOM_OPTION_ICON[]; +ACE_EXPORT extern const char DOM_OPTION_ACTION[]; +ACE_EXPORT extern const char DOM_OPTION_CONTENT[]; +ACE_EXPORT extern const char DOM_OPTION_TEXT_DECORATION[]; + +// text attribute and style constants +ACE_EXPORT extern const char DOM_TEXT_VALUE[]; +ACE_EXPORT extern const char DOM_TEXT_COLOR[]; +ACE_EXPORT extern const char DOM_TEXT_LINES[]; +ACE_EXPORT extern const char DOM_TEXT_MAX_LINES[]; +ACE_EXPORT extern const char DOM_TEXT_FONT_SIZE[]; +ACE_EXPORT extern const char DOM_TEXT_MIN_FONT_SIZE[]; +ACE_EXPORT extern const char DOM_TEXT_MAX_FONT_SIZE[]; +ACE_EXPORT extern const char DOM_TEXT_FONT_SIZE_STEP[]; +ACE_EXPORT extern const char DOM_TEXT_PREFER_FONT_SIZES[]; +ACE_EXPORT extern const char DOM_TEXT_FONT_WEIGHT[]; +ACE_EXPORT extern const char DOM_TEXT_DECORATION[]; +ACE_EXPORT extern const char DOM_TEXT_FONT_STYLE[]; +ACE_EXPORT extern const char DOM_TEXT_ALLOW_SCALE[]; +ACE_EXPORT extern const char DOM_TEXT_ALIGN[]; +ACE_EXPORT extern const char DOM_TEXT_OVERFLOW[]; +ACE_EXPORT extern const char DOM_OVERFLOW_STYLE[]; +ACE_EXPORT extern const char DOM_TEXT_LINE_HEIGHT[]; +ACE_EXPORT extern const char DOM_TEXT_LETTER_SPACING[]; +ACE_EXPORT extern const char DOM_TEXT_FONT_FAMILY[]; +ACE_EXPORT extern const char DOM_ELLIPSIS[]; +ACE_EXPORT extern const char DOM_CLIP[]; +ACE_EXPORT extern const char DOM_LEFT[]; +ACE_EXPORT extern const char DOM_RIGHT[]; +ACE_EXPORT extern const char DOM_CENTER[]; +ACE_EXPORT extern const char DOM_TEXT_DECORATION_UNDERLINE[]; +ACE_EXPORT extern const char DOM_TEXT_DECORATION_OVERLINE[]; +ACE_EXPORT extern const char DOM_TEXT_DECORATION_LINETHROUGH[]; +ACE_EXPORT extern const char DOM_TEXT_DECORATION_INHERIT[]; +ACE_EXPORT extern const char DOM_TEXT_DECORATION_NONE[]; +ACE_EXPORT extern const char DOM_TEXT_FONT_STYLE_ITALIC[]; +ACE_EXPORT extern const char DOM_TEXT_FONT_STYLE_NORMAL[]; +ACE_EXPORT extern const char DOM_TEXT_WORD_BREAK[]; + +// popup attribute and style constants +ACE_EXPORT extern const char DOM_TARGET[]; +ACE_EXPORT extern const char DOM_PLACEMENT[]; +ACE_EXPORT extern const char DOM_MASK_COLOR[]; +ACE_EXPORT extern const char DOM_ARROW_OFFSET[]; +ACE_EXPORT extern const char DOM_KEEP_ALIVE[]; +ACE_EXPORT extern const char DOM_CLICKABLE[]; +ACE_EXPORT extern const char DOM_VISIBILITY_CHANGE[]; + +// progress attribute and style constants +ACE_EXPORT extern const char DOM_PROGRESS_COLOR[]; +ACE_EXPORT extern const char DOM_PROGRESS_SECONDARY_COLOR[]; +ACE_EXPORT extern const char DOM_PROGRESS_BACKGROUND_COLOR[]; +ACE_EXPORT extern const char DOM_PROGRESS_STROKE_WIDTH[]; +ACE_EXPORT extern const char DOM_PROGRESS_TYPE[]; +ACE_EXPORT extern const char DOM_PROGRESS_TYPE_HORIZONTAL[]; +ACE_EXPORT extern const char DOM_PROGRESS_TYPE_CIRCULAR[]; +ACE_EXPORT extern const char DOM_PROGRESS_TYPE_MOON[]; +ACE_EXPORT extern const char DOM_PROGRESS_TYPE_RING[]; +ACE_EXPORT extern const char DOM_PROGRESS_TYPE_SCALE[]; +ACE_EXPORT extern const char DOM_PROGRESS_TYPE_ARC[]; +ACE_EXPORT extern const char DOM_PROGRESS_PERCENT[]; +ACE_EXPORT extern const char DOM_PROGRESS_SECONDARY_PERCENT[]; +ACE_EXPORT extern const char DOM_CIRCULAR_WIDTH[]; +ACE_EXPORT extern const char DOM_CIRCULAR_HEIGHT[]; +ACE_EXPORT extern const char DOM_CENTER_X[]; +ACE_EXPORT extern const char DOM_CENTER_Y[]; +ACE_EXPORT extern const char DOM_PROGRESS_RADIUS[]; +ACE_EXPORT extern const char DOM_START_DEGREE[]; +ACE_EXPORT extern const char DOM_SWEEP_DEGREE[]; +ACE_EXPORT extern const char DOM_RING_CLOCKWISH_DIRECTION[]; +ACE_EXPORT extern const char DOM_SCALE_WIDTH[]; +ACE_EXPORT extern const char DOM_SCALE_NUMBER[]; +ACE_EXPORT extern const char DOM_DIRECTION[]; +ACE_EXPORT extern const char DOM_START_TO_END[]; + +// chart attribute and style constants +ACE_EXPORT extern const char DOM_CHART_TYPE[]; +ACE_EXPORT extern const char DOM_CHART_TYPE_BAR[]; +ACE_EXPORT extern const char DOM_CHART_TYPE_LINE[]; +ACE_EXPORT extern const char DOM_CHART_TYPE_GAUGE[]; +ACE_EXPORT extern const char DOM_CHART_TYPE_PROGRESS[]; +ACE_EXPORT extern const char DOM_CHART_TYPE_LOADING[]; +ACE_EXPORT extern const char DOM_CHART_TYPE_RAINBOW[]; +ACE_EXPORT extern const char DOM_COLORS_ARRAY[]; +ACE_EXPORT extern const char DOM_WEIGHTS_ARRAY[]; +ACE_EXPORT extern const char DOM_EFFECTS_ON[]; +ACE_EXPORT extern const char DOM_AUTO_SCALE[]; + +// slider attribute and style constants +ACE_EXPORT extern const char DOM_MIN[]; +ACE_EXPORT extern const char DOM_MAX[]; +ACE_EXPORT extern const char DOM_STEP[]; +ACE_EXPORT extern const char DOM_COLOR[]; +ACE_EXPORT extern const char DOM_SELECTED_COLOR[]; +ACE_EXPORT extern const char DOM_BLOCK_COLOR[]; +ACE_EXPORT extern const char DOM_MIN_ICON[]; +ACE_EXPORT extern const char DOM_MAX_ICON[]; +ACE_EXPORT extern const char DOM_CONTINUOUS[]; +ACE_EXPORT extern const char DOM_INTERMITTENT[]; +ACE_EXPORT extern const char DOM_SLIDER_MODE[]; +ACE_EXPORT extern const char DOM_SHOW_TIPS[]; +ACE_EXPORT extern const char DOM_SHOW_STEPS[]; +ACE_EXPORT extern const char DOM_OUTSET[]; +ACE_EXPORT extern const char DOM_INSET[]; + +// stepper attribute style event and method constants +ACE_EXPORT extern const char DOM_STEPPER_INDEX[]; +ACE_EXPORT extern const char DOM_STEPPER_LABEL[]; +ACE_EXPORT extern const char DOM_STEPPER_LEFT_LABEL[]; +ACE_EXPORT extern const char DOM_STEPPER_RIGHT_LABEL[]; +ACE_EXPORT extern const char DOM_STEPPER_INITIAL_STATUS[]; +ACE_EXPORT extern const char DOM_STEPPER_TEXT_COLOR[]; +ACE_EXPORT extern const char DOM_STEPPER_FONT_SIZE[]; +ACE_EXPORT extern const char DOM_STEPPER_FONT_STYLE[]; +ACE_EXPORT extern const char DOM_STEPPER_FONT_WEIGHT[]; +ACE_EXPORT extern const char DOM_STEPPER_FONT_FAMILY[]; +ACE_EXPORT extern const char DOM_STEPPER_TEXT_DECORATION[]; +ACE_EXPORT extern const char DOM_STEPPER_EVENT_FINISH[]; +ACE_EXPORT extern const char DOM_STEPPER_EVENT_SKIP[]; +ACE_EXPORT extern const char DOM_STEPPER_EVENT_CHANGE[]; +ACE_EXPORT extern const char DOM_STEPPER_EVENT_NEXT[]; +ACE_EXPORT extern const char DOM_STEPPER_EVENT_BACK[]; +ACE_EXPORT extern const char DOM_STEPPER_SET_RIGHT_BUTTON_STATUS[]; + +// stepper-item attribute style and event constants +ACE_EXPORT extern const char DOM_STEPPER_ITEM_EVENT_APPEAR[]; +ACE_EXPORT extern const char DOM_STEPPER_ITEM_EVENT_DISAPPEAR[]; + +// swiper attribute and style constants +ACE_EXPORT extern const char DOM_INDEX[]; +ACE_EXPORT extern const char DOM_SWIPER_ANIMATION_OPACITY[]; +ACE_EXPORT extern const char DOM_AUTOPLAY[]; +ACE_EXPORT extern const char DOM_INTERVAL[]; +ACE_EXPORT extern const char DOM_INDICATOR[]; +ACE_EXPORT extern const char DOM_LOOP[]; +ACE_EXPORT extern const char DOM_DURATION[]; +ACE_EXPORT extern const char DOM_VERTICAL[]; +ACE_EXPORT extern const char DOM_ANIMATION_CURVE[]; +ACE_EXPORT extern const char DOM_INDICATOR_COLOR[]; +ACE_EXPORT extern const char DOM_INDICATOR_MASK[]; +ACE_EXPORT extern const char DOM_INDICATOR_DISABLED[]; +ACE_EXPORT extern const char DOM_INDICATOR_SELECTEDCOLOR[]; +ACE_EXPORT extern const char DOM_INDICATOR_SIZE[]; +ACE_EXPORT extern const char DOM_INDICATOR_TOP[]; +ACE_EXPORT extern const char DOM_INDICATOR_LEFT[]; +ACE_EXPORT extern const char DOM_INDICATOR_RIGHT[]; +ACE_EXPORT extern const char DOM_INDICATOR_BOTTOM[]; +ACE_EXPORT extern const char DOM_METHOD_SWIPE_TO[]; +ACE_EXPORT extern const char DOM_METHOD_APPEND[]; +ACE_EXPORT extern const char DOM_METHOD_SHOW_PREVIOUS[]; +ACE_EXPORT extern const char DOM_METHOD_SHOW_NEXT[]; +ACE_EXPORT extern const char DOM_DIGITAL_INDICATOR[]; + +// switch attribute and style constants +ACE_EXPORT extern const char DOM_CHECKED[]; +ACE_EXPORT extern const char DOM_SHOW_TEXT[]; +ACE_EXPORT extern const char DOM_TEXT_ON[]; +ACE_EXPORT extern const char DOM_TEXT_OFF[]; +ACE_EXPORT extern const char DOM_TEXT_PADDING[]; +ACE_EXPORT extern const char DOM_TEXT_ON_COLOR[]; +ACE_EXPORT extern const char DOM_TEXT_OFF_COLOR[]; +ACE_EXPORT extern const char DOM_TRACK_COLOR_ON[]; +ACE_EXPORT extern const char DOM_TRACK_COLOR_OFF[]; + +// tabs attribute and style constants +ACE_EXPORT extern const char DOM_TAB_BAR_MODE[]; +ACE_EXPORT extern const char DOM_TAB_CONTENT_SCROLLABEL[]; + +// refresh attribute and style constants +ACE_EXPORT extern const char DOM_REFRESH[]; +ACE_EXPORT extern const char DOM_REFRESH_OFFSET[]; +ACE_EXPORT extern const char DOM_REFRESH_REFRESHING[]; +ACE_EXPORT extern const char DOM_REFRESH_TYPE[]; +ACE_EXPORT extern const char DOM_REFRESH_LASTTIME[]; +ACE_EXPORT extern const char DOM_REFRESH_FRICTION[]; +ACE_EXPORT extern const char DOM_REFRESH_BACKGROUND_COLOR[]; +ACE_EXPORT extern const char DOM_REFRESH_PROGRESS_COLOR[]; +ACE_EXPORT extern const char DOM_REFRESH_EVENT_PULL_DOWN[]; +ACE_EXPORT extern const char DOM_REFRESH_TIME_OFFSET[]; + +// rating attribute and style constants +ACE_EXPORT extern const char DOM_STAR_NUM[]; +ACE_EXPORT extern const char DOM_RATING_SCORE[]; +ACE_EXPORT extern const char DOM_RATING_STEP[]; +ACE_EXPORT extern const char DOM_RATING_INDICATOR[]; +ACE_EXPORT extern const char DOM_BACKGROUND_SRC[]; +ACE_EXPORT extern const char DOM_FOREGROUND_SRC[]; +ACE_EXPORT extern const char DOM_SECONDARY_SRC[]; +ACE_EXPORT extern const char DOM_RTL_FLIP[]; + +// marquee attribute and style constants +ACE_EXPORT extern const char DOM_MARQUEE_LOOP[]; +ACE_EXPORT extern const char DOM_MARQUEE_SCROLL_AMOUNT[]; +ACE_EXPORT extern const char DOM_MARQUEE_DIRECTION[]; +ACE_EXPORT extern const char DOM_MARQUEE_DIRECTION_LEFT[]; +ACE_EXPORT extern const char DOM_MARQUEE_DIRECTION_RIGHT[]; +ACE_EXPORT extern const char DOM_MARQUEE_VALUE[]; +ACE_EXPORT extern const char DOM_MARQUEE_COLOR[]; +ACE_EXPORT extern const char DOM_MARQUEE_FONT_SIZE[]; +ACE_EXPORT extern const char DOM_MARQUEE_FONT_WEIGHT[]; +ACE_EXPORT extern const char DOM_MARQUEE_FONT_FAMILY[]; +ACE_EXPORT extern const char DOM_MARQUEE_EVENT_BOUNCE[]; +ACE_EXPORT extern const char DOM_MARQUEE_EVENT_FINISH[]; +ACE_EXPORT extern const char DOM_MARQUEE_EVENT_START[]; +ACE_EXPORT extern const char DOM_MARQUEE_METHOD_START[]; +ACE_EXPORT extern const char DOM_MARQUEE_METHOD_STOP[]; + +// navigationBar attribute and style constants +ACE_EXPORT extern const char DOM_NAVIGATION_BAR_METHOD_SHOW[]; +ACE_EXPORT extern const char DOM_NAVIGATION_BAR_METHOD_HIDE[]; +ACE_EXPORT extern const char DOM_NAVIGATION_BAR_TYPE[]; +ACE_EXPORT extern const char DOM_NAVIGATION_BAR_HEADER[]; +ACE_EXPORT extern const char DOM_NAVIGATION_BAR_TITLE[]; +ACE_EXPORT extern const char DOM_NAVIGATION_BAR_SUBTITLE[]; +ACE_EXPORT extern const char DOM_NAVIGATION_BAR_BACK_ENABLED[]; +ACE_EXPORT extern const char DOM_NAVIGATION_BAR_LOGO[]; +ACE_EXPORT extern const char DOM_NAVIGATION_BAR_START_ICON[]; +ACE_EXPORT extern const char DOM_NAVIGATION_BAR_END_ICON[]; +ACE_EXPORT extern const char DOM_NAVIGATION_BAR_TITLE_COLOR[]; +ACE_EXPORT extern const char DOM_NAVIGATION_BAR_SUBTITLE_COLOR[]; +ACE_EXPORT extern const char DOM_NAVIGATION_BAR_EVENT_BACK_CLICK[]; +ACE_EXPORT extern const char DOM_NAVIGATION_BAR_EVENT_START_CLICK[]; +ACE_EXPORT extern const char DOM_NAVIGATION_BAR_EVENT_END_CLICK[]; + +// common event list +ACE_EXPORT extern const char DOM_CHANGE[]; +ACE_EXPORT extern const char DOM_TOUCH_START[]; +ACE_EXPORT extern const char DOM_TOUCH_MOVE[]; +ACE_EXPORT extern const char DOM_TOUCH_CANCEL[]; +ACE_EXPORT extern const char DOM_TOUCH_END[]; +ACE_EXPORT extern const char DOM_CAPTURE_TOUCH_START[]; +ACE_EXPORT extern const char DOM_CAPTURE_TOUCH_MOVE[]; +ACE_EXPORT extern const char DOM_CAPTURE_TOUCH_END[]; +ACE_EXPORT extern const char DOM_CAPTURE_TOUCH_CANCEL[]; +ACE_EXPORT extern const char DOM_CATCH_BUBBLE_TOUCH_START[]; +ACE_EXPORT extern const char DOM_CATCH_BUBBLE_TOUCH_MOVE[]; +ACE_EXPORT extern const char DOM_CATCH_BUBBLE_TOUCH_CANCEL[]; +ACE_EXPORT extern const char DOM_CATCH_BUBBLE_TOUCH_END[]; +ACE_EXPORT extern const char DOM_CATCH_CAPTURE_TOUCH_START[]; +ACE_EXPORT extern const char DOM_CATCH_CAPTURE_TOUCH_MOVE[]; +ACE_EXPORT extern const char DOM_CATCH_CAPTURE_TOUCH_CANCEL[]; +ACE_EXPORT extern const char DOM_CATCH_CAPTURE_TOUCH_END[]; +ACE_EXPORT extern const char DOM_CLICK[]; +ACE_EXPORT extern const char DOM_LONG_PRESS[]; +ACE_EXPORT extern const char DOM_COMPLETE[]; +ACE_EXPORT extern const char DOM_ERROR[]; +ACE_EXPORT extern const char DOM_FOCUS[]; +ACE_EXPORT extern const char DOM_BLUR[]; +ACE_EXPORT extern const char DOM_KEY[]; +ACE_EXPORT extern const char DOM_SELECTED[]; +ACE_EXPORT extern const char DOM_CANCEL[]; +ACE_EXPORT extern const char DOM_HIDE[]; +ACE_EXPORT extern const char DOM_MOUSE[]; +ACE_EXPORT extern const char DOM_SWIPE[]; +ACE_EXPORT extern const char DOM_ROTATION[]; + +// video constants +ACE_EXPORT extern const char DOM_VIDEO_MUTED[]; +ACE_EXPORT extern const char DOM_VIDEO_SRC[]; +ACE_EXPORT extern const char DOM_VIDEO_AUTOPLAY[]; +ACE_EXPORT extern const char DOM_VIDEO_POSTER[]; +ACE_EXPORT extern const char DOM_VIDEO_CONTROLS[]; +ACE_EXPORT extern const char DOM_VIDEO_FIT[]; +ACE_EXPORT extern const char DOM_VIDEO_EVENT_PREPARED[]; +ACE_EXPORT extern const char DOM_VIDEO_EVENT_START[]; +ACE_EXPORT extern const char DOM_VIDEO_EVENT_PAUSE[]; +ACE_EXPORT extern const char DOM_VIDEO_EVENT_FINISH[]; +ACE_EXPORT extern const char DOM_VIDEO_EVENT_ERROR[]; +ACE_EXPORT extern const char DOM_VIDEO_EVENT_SEEKING[]; +ACE_EXPORT extern const char DOM_VIDEO_EVENT_SEEKED[]; +ACE_EXPORT extern const char DOM_VIDEO_EVENT_TIMEUPDATE[]; +ACE_EXPORT extern const char DOM_VIDEO_EVENT_FULLSCREENCHANGE[]; +ACE_EXPORT extern const char DOM_VIDEO_METHOD_START[]; +ACE_EXPORT extern const char DOM_VIDEO_METHOD_PAUSE[]; +ACE_EXPORT extern const char DOM_VIDEO_METHOD_SEEK_TO[]; +ACE_EXPORT extern const char DOM_VIDEO_METHOD_REQUEST_FULLSCREEN[]; +ACE_EXPORT extern const char DOM_VIDEO_METHOD_EXIT_FULLSCREEN[]; + +// textarea attribute and style constants +ACE_EXPORT extern const char DOM_TEXTAREA_VALUE[]; +ACE_EXPORT extern const char DOM_TEXTAREA_PLACEHOLDER[]; +ACE_EXPORT extern const char DOM_TEXTAREA_MAXLENGTH[]; +ACE_EXPORT extern const char DOM_TEXTAREA_MAXLINES[]; +ACE_EXPORT extern const char DOM_TEXTAREA_OBSCURE[]; +ACE_EXPORT extern const char DOM_TEXTAREA_PLACEHOLDER_COLOR[]; +ACE_EXPORT extern const char DOM_TEXTAREA_CURSOR_COLOR[]; +ACE_EXPORT extern const char DOM_TEXTAREA_COLOR[]; +ACE_EXPORT extern const char DOM_TEXTAREA_FONT_SIZE[]; +ACE_EXPORT extern const char DOM_TEXTAREA_FONT_WEIGHT[]; +ACE_EXPORT extern const char DOM_TEXTAREA_FONT_FAMILY[]; +ACE_EXPORT extern const char DOM_TEXTAREA_METHOD_FOCUS[]; +ACE_EXPORT extern const char DOM_TEXTAREA_EXTEND[]; +ACE_EXPORT extern const char DOM_TEXTAREA_SHOW_COUNTER[]; + +// input attribute and style extern constants +ACE_EXPORT extern const char DOM_INPUT_TYPE[]; +ACE_EXPORT extern const char DOM_INPUT_CHECKED[]; +ACE_EXPORT extern const char DOM_INPUT_NAME[]; +ACE_EXPORT extern const char DOM_INPUT_VALUE[]; +ACE_EXPORT extern const char DOM_INPUT_PLACEHOLDER[]; +ACE_EXPORT extern const char DOM_INPUT_MAXLENGTH[]; +ACE_EXPORT extern const char DOM_INPUT_ENTERKEYTYPE[]; +ACE_EXPORT extern const char DOM_INPUT_PLACEHOLDER_COLOR[]; +ACE_EXPORT extern const char DOM_INPUT_CURSOR_COLOR[]; +ACE_EXPORT extern const char DOM_INPUT_COLOR[]; +ACE_EXPORT extern const char DOM_INPUT_FONT_SIZE[]; +ACE_EXPORT extern const char DOM_INPUT_FONT_WEIGHT[]; +ACE_EXPORT extern const char DOM_INPUT_WIDTH[]; +ACE_EXPORT extern const char DOM_INPUT_HEIGHT[]; +ACE_EXPORT extern const char DOM_INPUT_FONT_FAMILY[]; +ACE_EXPORT extern const char DOM_INPUT_OBSCURE[]; +ACE_EXPORT extern const char DOM_INPUT_AUTO_FOCUS[]; +ACE_EXPORT extern const char DOM_INPUT_RECT_RADIUS[]; +ACE_EXPORT extern const char DOM_INPUT_BACKGROUND_COLOR[]; +ACE_EXPORT extern const char DOM_INPUT_CLICKED_COLOR[]; +ACE_EXPORT extern const char DOM_INPUT_DISABLE_COLOR[]; +ACE_EXPORT extern const char DOM_INPUT_FOCUS_COLOR[]; +ACE_EXPORT extern const char DOM_INPUT_METHOD_FOCUS[]; +ACE_EXPORT extern const char DOM_ICON_SRC[]; +ACE_EXPORT extern const char DOM_SHOW_ICON_SRC[]; +ACE_EXPORT extern const char DOM_HIDE_ICON_SRC[]; +ACE_EXPORT extern const char DOM_INPUT_SHOW_COUNTER[]; +ACE_EXPORT extern const char DOM_INPUT_OPTION_ICON[]; +ACE_EXPORT extern const char DOM_INPUT_OPTION_CONTENT[]; +ACE_EXPORT extern const char DOM_INPUT_METHOD_SHOW_ERROR[]; +ACE_EXPORT extern const char DOM_INPUT_METHOD_DELETE[]; + +// input event extern constants +ACE_EXPORT extern const char DOM_INPUT_EVENT_NAME[]; +ACE_EXPORT extern const char DOM_INPUT_EVENT_VALUE[]; +ACE_EXPORT extern const char DOM_INPUT_EVENT_CHECKED[]; +ACE_EXPORT extern const char DOM_INPUT_EVENT_ENTERKEYCLICK[]; +ACE_EXPORT extern const char DOM_INPUT_EVENT_OPTION_SELECT[]; +ACE_EXPORT extern const char DOM_INPUT_EVENT_TRANSLATE[]; +ACE_EXPORT extern const char DOM_INPUT_EVENT_SHARE[]; +ACE_EXPORT extern const char DOM_INPUT_EVENT_SEARCH[]; + +// divider style extern constants +ACE_EXPORT extern const char DOM_DIVIDER_VERTICAL[]; +ACE_EXPORT extern const char DOM_DIVIDER_STROKE_WIDTH[]; +ACE_EXPORT extern const char DOM_DIVIDER_LINE_CAP[]; + +// canvas +ACE_EXPORT extern const char DOM_CANVAS_METHOD_GET_CONTEXT[]; + +// button attribute and style constants +ACE_EXPORT extern const char DOM_BUTTON_TYPE[]; +ACE_EXPORT extern const char DOM_BUTTON_HEIGHT[]; +ACE_EXPORT extern const char DOM_BUTTON_WIDTH[]; +ACE_EXPORT extern const char DOM_BUTTON_MIN_WIDTH[]; +ACE_EXPORT extern const char DOM_BUTTON_RRECT_RADIUS[]; +ACE_EXPORT extern const char DOM_BUTTON_DEFAULT_COLOR[]; +ACE_EXPORT extern const char DOM_BUTTON_CLICKED_COLOR[]; +ACE_EXPORT extern const char DOM_BUTTON_DISABLE_COLOR[]; +ACE_EXPORT extern const char DOM_BUTTON_FOCUS_COLOR[]; +ACE_EXPORT extern const char DOM_BUTTON_AUTO_FOCUS[]; +ACE_EXPORT extern const char DOM_BUTTON_TEXT_DATA[]; +ACE_EXPORT extern const char DOM_BUTTON_TEXT_COLOR[]; +ACE_EXPORT extern const char DOM_BUTTON_TEXT_DISABLE_COLOR[]; +ACE_EXPORT extern const char DOM_BUTTON_FONT_SIZE[]; +ACE_EXPORT extern const char DOM_BUTTON_FONT_WEIGHT[]; +ACE_EXPORT extern const char DOM_BUTTON_FONT_FAMILY[]; +ACE_EXPORT extern const char DOM_BUTTON_FONT_STYLE[]; +ACE_EXPORT extern const char DOM_BUTTON_BORDER_WIDTH[]; +ACE_EXPORT extern const char DOM_BUTTON_BORDER_COLOR[]; +ACE_EXPORT extern const char DOM_BUTTON_WAITING[]; +ACE_EXPORT extern const char DOM_BUTTON_ICON[]; +ACE_EXPORT extern const char DOM_BUTTON_ICON_WIDTH[]; +ACE_EXPORT extern const char DOM_BUTTON_ICON_HEIGHT[]; +ACE_EXPORT extern const char DOM_BUTTON_ICON_DIRECTION[]; +ACE_EXPORT extern const char DOM_BUTTON_PROGRESS_DIAMETER[]; +ACE_EXPORT extern const char DOM_BUTTON_PROGRESS_COLOR[]; +ACE_EXPORT extern const char DOM_BUTTON_PROGRESS_FOCUS_COLOR[]; +ACE_EXPORT extern const char DOM_BUTTON_INNER_PADDING[]; +ACE_EXPORT extern const char DOM_BUTTON_METHOD_SET_PROGRESS[]; + +// picker attribute and style constants +ACE_EXPORT extern const char DOM_PICKER_SPLIT_ITEM; +ACE_EXPORT extern const char DOM_PICKER_SPLIT_ARRAY; +ACE_EXPORT extern const char DOM_PICKER_CONTAIN_SECOND[]; +ACE_EXPORT extern const char DOM_PICKER_RANGE[]; +ACE_EXPORT extern const char DOM_PICKER_COLUMN_CHANGE[]; +ACE_EXPORT extern const char DOM_PICKER_COLUMN_COUNT[]; +ACE_EXPORT extern const char DOM_PICKER_HOUR24[]; +ACE_EXPORT extern const char DOM_PICKER_LUNAR[]; +ACE_EXPORT extern const char DOM_PICKER_SHOW_LUNAR[]; +ACE_EXPORT extern const char DOM_PICKER_TYPE_TIME[]; +ACE_EXPORT extern const char DOM_PICKER_TYPE_DATE[]; +ACE_EXPORT extern const char DOM_PICKER_TYPE_TEXT[]; +ACE_EXPORT extern const char DOM_PICKER_TYPE_MULTITEXT[]; +ACE_EXPORT extern const char DOM_PICKER_TYPE_DATETIME[]; +ACE_EXPORT extern const char DOM_PICKER_TEXT_COLOR[]; +ACE_EXPORT extern const char DOM_PICKER_SELECT_COLOR[]; +ACE_EXPORT extern const char DOM_PICKER_SELECT_SIZE[]; +ACE_EXPORT extern const char DOM_PICKER_SELECT_FAMILIES[]; +ACE_EXPORT extern const char DOM_PICKER_FOCUS_COLOR[]; +ACE_EXPORT extern const char DOM_PICKER_FOCUS_SIZE[]; +ACE_EXPORT extern const char DOM_PICKER_FOCUS_FAMILIES[]; +ACE_EXPORT extern const char DOM_PICKER_PREFIX[]; +ACE_EXPORT extern const char DOM_PICKER_SUFFIX[]; +ACE_EXPORT extern const char DOM_PICKER_DISAPPEAR_COLOR[]; +ACE_EXPORT extern const char DOM_PICKER_DISAPPEAR_FONT_SIZE[]; +ACE_EXPORT extern const char DOM_PICKER_COLUMN_HEIGHT[]; + +// calendar +ACE_EXPORT extern const char DOM_CALENDAR_DATA[]; +ACE_EXPORT extern const char DOM_CALENDAR_DATE[]; +ACE_EXPORT extern const char DOM_CALENDAR_DATE_ADAPTER[]; +ACE_EXPORT extern const char DOM_CALENDAR_METHOD_GO_TO[]; +ACE_EXPORT extern const char DOM_CALENDAR_EVENT_SELECTED_CHANGE[]; +ACE_EXPORT extern const char DOM_CALENDAR_SHOW_HOLIDAY[]; +ACE_EXPORT extern const char DOM_CALENDAR_SHOW_LUNAR[]; +ACE_EXPORT extern const char DOM_CALENDAR_CARD_CALENDAR[]; +ACE_EXPORT extern const char DOM_CALENDAR_START_DAY_OF_WEEK[]; +ACE_EXPORT extern const char DOM_CALENDAR_EVENT_REQUEST_DATA[]; +ACE_EXPORT extern const char DOM_CALENDAR_OFF_DAYS[]; + +// dialog +ACE_EXPORT extern const char DOM_DIALOG_METHOD_SHOW[]; +ACE_EXPORT extern const char DOM_DIALOG_METHOD_CLOSE[]; +ACE_EXPORT extern const char DOM_DIALOG_EVENT_CANCEL[]; + +// multi modal event +ACE_EXPORT extern const char DOM_VOICE_LABEL[]; +ACE_EXPORT extern const char DOM_SUBSCRIPT_LABEL[]; +ACE_EXPORT extern const char DOM_SUBSCRIPT_FLAG[]; +ACE_EXPORT extern const char DOM_SCENE_LABEL[]; + +// search constants +ACE_EXPORT extern const char DOM_SEARCH_ICON[]; +ACE_EXPORT extern const char DOM_SEARCH_HINT[]; +ACE_EXPORT extern const char DOM_SUBMIT[]; +ACE_EXPORT extern const char DOM_SEARCH_VALUE[]; +ACE_EXPORT extern const char DOM_SEARCH_BUTTON[]; + +// toggle constants +ACE_EXPORT extern const char DOM_TOGGLE_BACKGROUND_COLOR[]; +ACE_EXPORT extern const char DOM_TOGGLE_CHECKED_COLOR[]; +ACE_EXPORT extern const char DOM_TOGGLE_CHECKED_STATE[]; +ACE_EXPORT extern const char DOM_TOGGLE_TEXT_COLOR[]; +ACE_EXPORT extern const char DOM_TOGGLE_HEIGHT[]; +ACE_EXPORT extern const char DOM_TOGGLE_WIDTH[]; + +// clock constants +// clock style +ACE_EXPORT extern const char DOM_DIGIT_FONT_FAMILY[]; +// clock attr +ACE_EXPORT extern const char DOM_HOURS_WEST[]; +ACE_EXPORT extern const char DOM_CLOCK_CONFIG[]; +ACE_EXPORT extern const char DOM_DIGIT_COLOR[]; +ACE_EXPORT extern const char DOM_DIGIT_COLOR_NIGHT[]; +ACE_EXPORT extern const char DOM_CLOCK_FACE_SOURCE[]; +ACE_EXPORT extern const char DOM_CLOCK_FACE_SOURCE_NIGHT[]; +ACE_EXPORT extern const char DOM_HOUR_HAND_SOURCE[]; +ACE_EXPORT extern const char DOM_HOUR_HAND_SOURCE_NIGHT[]; +ACE_EXPORT extern const char DOM_MINUTE_HAND_SOURCE[]; +ACE_EXPORT extern const char DOM_MINUTE_HAND_SOURCE_NIGHT[]; +ACE_EXPORT extern const char DOM_SECOND_HAND_SOURCE[]; +ACE_EXPORT extern const char DOM_SECOND_HAND_SOURCE_NIGHT[]; +ACE_EXPORT extern const char DOM_SHOW_DIGIT[]; +ACE_EXPORT extern const char DOM_DIGIT_RADIUS_RATIO[]; +ACE_EXPORT extern const char DOM_DIGIT_SIZE_RATIO[]; + +// piece attribute and style constants +ACE_EXPORT extern const char DOM_PIECE_CONTENT[]; +ACE_EXPORT extern const char DOM_PIECE_ICON[]; +ACE_EXPORT extern const char DOM_PIECE_CLOSABLE[]; +ACE_EXPORT extern const char DOM_PIECE_EVENT_CLOSE[]; + +// badge constants +ACE_EXPORT extern const char DOM_BADGE_CONFIG[]; +ACE_EXPORT extern const char DOM_BADGE_COUNT[]; +ACE_EXPORT extern const char DOM_BADGE_LABEL[]; +ACE_EXPORT extern const char DOM_BADGE_PLACEMENT[]; +ACE_EXPORT extern const char DOM_BADGE_VISIBLE[]; +ACE_EXPORT extern const char DOM_BADGE_MAX_COUNT[]; +ACE_EXPORT extern const char DOM_BADGE_COLOR[]; +ACE_EXPORT extern const char DOM_BADGE_CIRCLE_SIZE[]; +ACE_EXPORT extern const char DOM_BADGE_TEXT_FONT_SIZE[]; +ACE_EXPORT extern const char DOM_BADGE_TEXT_COLOR[]; + +// grid container/row/columns +ACE_EXPORT extern const char DOM_GRID_CONTAINER_COLUMNS[]; +ACE_EXPORT extern const char DOM_GRID_CONTAINER_SIZE_TYPE[]; +ACE_EXPORT extern const char DOM_GRID_CONTAINER_GUTTER_WIDTH[]; +ACE_EXPORT extern const char DOM_GRID_CONTAINER_GET_COLUMNS[]; +ACE_EXPORT extern const char DOM_GRID_CONTAINER_GET_COLUMN_WIDTH[]; +ACE_EXPORT extern const char DOM_GRID_CONTAINER_GET_GUTTER_WIDTH[]; +ACE_EXPORT extern const char DOM_GRID_CONTAINER_GET_SIZE_TYPE[]; +ACE_EXPORT extern const char DOM_GRID_COLUMN_SPAN[]; +ACE_EXPORT extern const char DOM_GRID_COLUMN_OFFSET[]; + +ACE_EXPORT extern const char DOM_GRID_COLUMN_TYPE[]; +ACE_EXPORT extern const char DOM_GRID_SIZE_TYPE_XS[]; +ACE_EXPORT extern const char DOM_GRID_SIZE_TYPE_SM[]; +ACE_EXPORT extern const char DOM_GRID_SIZE_TYPE_MD[]; +ACE_EXPORT extern const char DOM_GRID_SIZE_TYPE_LG[]; + +ACE_EXPORT extern const char DOM_COLUMN_TYPE_NONE[]; +ACE_EXPORT extern const char DOM_COLUMN_TYPE_BUBBLE[]; +ACE_EXPORT extern const char DOM_COLUMN_TYPE_BUTTON[]; +ACE_EXPORT extern const char DOM_COLUMN_TYPE_CARD[]; +ACE_EXPORT extern const char DOM_COLUMN_TYPE_CONTENT[]; + +ACE_EXPORT extern const char DOM_CLICK_EFFECT[]; +// panel attribute and style constants +ACE_EXPORT extern const char DOM_PANEL_METHOD_SHOW[]; +ACE_EXPORT extern const char DOM_PANEL_METHOD_CLOSE[]; +ACE_EXPORT extern const char DOM_PANEL_ATTR_TYPE[]; +ACE_EXPORT extern const char DOM_PANEL_ATTR_MODE[]; +ACE_EXPORT extern const char DOM_PANEL_ATTR_DRAG_BAR[]; +ACE_EXPORT extern const char DOM_PANEL_ATTR_MIN_HEIGHT[]; +ACE_EXPORT extern const char DOM_PANEL_ATTR_HALF_HEIGHT[]; +ACE_EXPORT extern const char DOM_PANEL_ATTR_FULL_HEIGHT[]; +ACE_EXPORT extern const char DOM_PANEL_EVENT_SIZE_CHANGED[]; + +// tool-bar-item constants +ACE_EXPORT extern const char DOM_TOOL_BAR_ITEM_ICON[]; +ACE_EXPORT extern const char DOM_TOOL_BAR_ITEM_VALUE[]; +ACE_EXPORT extern const char DOM_TOOL_BAR_ITEM_TEXT_COLOR[]; +ACE_EXPORT extern const char DOM_TOOL_BAR_ITEM_FONT_SIZE[]; +ACE_EXPORT extern const char DOM_TOOL_BAR_ITEM_FONT_STYLE[]; +ACE_EXPORT extern const char DOM_TOOL_BAR_ITEM_FONT_WEIGHT[]; +ACE_EXPORT extern const char DOM_TOOL_BAR_ITEM_TEXT_DECORATION[]; +ACE_EXPORT extern const char DOM_TOOL_BAR_ITEM_FONT_FAMILY[]; +ACE_EXPORT extern const char DOM_TOOL_BAR_ITEM_ALLOW_SCALE[]; + +// card transition +ACE_EXPORT extern const char DOM_TRANSITION_EFFECT[]; +ACE_EXPORT extern const char DOM_TRANSITION_CARD_COMPOSEID[]; + +// qrcode +ACE_EXPORT extern const char DOM_QRCODE_BACKGROUND_COLOR[]; +ACE_EXPORT extern const char DOM_QRCODE_COLOR[]; +ACE_EXPORT extern const char DOM_QRCODE_HEIGHT[]; +ACE_EXPORT extern const char DOM_QRCODE_WIDTH[]; +ACE_EXPORT extern const char DOM_QRCODE_TYPE[]; +ACE_EXPORT extern const char DOM_QRCODE_VALUE[]; + +// svg +ACE_EXPORT extern const char DOM_SVG_ID[]; +ACE_EXPORT extern const char DOM_SVG_ANIMATION_BEGIN[]; +ACE_EXPORT extern const char DOM_SVG_ANIMATION_DUR[]; +ACE_EXPORT extern const char DOM_SVG_ANIMATION_END[]; +ACE_EXPORT extern const char DOM_SVG_ANIMATION_MIN[]; +ACE_EXPORT extern const char DOM_SVG_ANIMATION_MAX[]; +ACE_EXPORT extern const char DOM_SVG_ANIMATION_RESTART[]; +ACE_EXPORT extern const char DOM_SVG_ANIMATION_REPEAT_COUNT[]; +ACE_EXPORT extern const char DOM_SVG_ANIMATION_REPEAT_DUR[]; +ACE_EXPORT extern const char DOM_SVG_ANIMATION_FILL[]; +ACE_EXPORT extern const char DOM_SVG_ANIMATION_CALC_MODE[]; +ACE_EXPORT extern const char DOM_SVG_ANIMATION_VALUES[]; +ACE_EXPORT extern const char DOM_SVG_ANIMATION_KEY_TIMES[]; +ACE_EXPORT extern const char DOM_SVG_ANIMATION_KEY_SPLINES[]; +ACE_EXPORT extern const char DOM_SVG_ANIMATION_FROM[]; +ACE_EXPORT extern const char DOM_SVG_ANIMATION_TO[]; +ACE_EXPORT extern const char DOM_SVG_ANIMATION_BY[]; +ACE_EXPORT extern const char DOM_SVG_ANIMATION_ATTRIBUTE_NAME[]; +ACE_EXPORT extern const char DOM_SVG_ANIMATION_ADDITIVE[]; +ACE_EXPORT extern const char DOM_SVG_ANIMATION_ACCUMULATE[]; +ACE_EXPORT extern const char DOM_SVG_ANIMATION_TYPE[]; +ACE_EXPORT extern const char DOM_SVG_ANIMATION_KEY_POINTS[]; +ACE_EXPORT extern const char DOM_SVG_ANIMATION_PATH[]; +ACE_EXPORT extern const char DOM_SVG_ANIMATION_ROTATE[]; +ACE_EXPORT extern const char DOM_SVG_ATTR_PATH[]; +ACE_EXPORT extern const char DOM_SVG_START_OFFSET[]; +ACE_EXPORT extern const char DOM_SVG_FILL[]; +ACE_EXPORT extern const char DOM_SVG_FILL_OPACITY[]; +ACE_EXPORT extern const char DOM_SVG_FILL_RULE[]; +ACE_EXPORT extern const char DOM_SVG_FONT_FAMILY[]; +ACE_EXPORT extern const char DOM_SVG_FONT_SIZE[]; +ACE_EXPORT extern const char DOM_SVG_FONT_STYLE[]; +ACE_EXPORT extern const char DOM_SVG_FONT_WEIGHT[]; +ACE_EXPORT extern const char DOM_SVG_LETTER_SPACING[]; +ACE_EXPORT extern const char DOM_SVG_TEXT_DECORATION[]; +ACE_EXPORT extern const char DOM_SVG_TEXT_LENGTH[]; +ACE_EXPORT extern const char DOM_SVG_STROKE[]; +ACE_EXPORT extern const char DOM_SVG_STROKE_DASHARRAY[]; +ACE_EXPORT extern const char DOM_SVG_STROKE_DASHOFFSET[]; +ACE_EXPORT extern const char DOM_SVG_STROKE_LINECAP[]; +ACE_EXPORT extern const char DOM_SVG_STROKE_LINEJOIN[]; +ACE_EXPORT extern const char DOM_SVG_STROKE_MITERLIMIT[]; +ACE_EXPORT extern const char DOM_SVG_STROKE_OPACITY[]; +ACE_EXPORT extern const char DOM_SVG_STROKE_WIDTH[]; +ACE_EXPORT extern const char DOM_SVG_OPACITY[]; +ACE_EXPORT extern const char DOM_SVG_VIEW_BOX[]; +ACE_EXPORT extern const char DOM_SVG_X[]; +ACE_EXPORT extern const char DOM_SVG_Y[]; +ACE_EXPORT extern const char DOM_SVG_WIDTH[]; +ACE_EXPORT extern const char DOM_SVG_HEIGHT[]; +ACE_EXPORT extern const char DOM_SVG_DX[]; +ACE_EXPORT extern const char DOM_SVG_DY[]; +ACE_EXPORT extern const char DOM_SVG_RX[]; +ACE_EXPORT extern const char DOM_SVG_RY[]; +ACE_EXPORT extern const char DOM_SVG_D[]; +ACE_EXPORT extern const char DOM_SVG_X1[]; +ACE_EXPORT extern const char DOM_SVG_X2[]; +ACE_EXPORT extern const char DOM_SVG_Y1[]; +ACE_EXPORT extern const char DOM_SVG_Y2[]; +ACE_EXPORT extern const char DOM_SVG_POINTS[]; +ACE_EXPORT extern const char DOM_SVG_CX[]; +ACE_EXPORT extern const char DOM_SVG_CY[]; +ACE_EXPORT extern const char DOM_SVG_R[]; +ACE_EXPORT extern const char DOM_SVG_ROTATE[]; +ACE_EXPORT extern const char DOM_SVG_LENGTH_ADJUST[]; + +// web +ACE_EXPORT extern const char DOM_PAGESTART[]; +ACE_EXPORT extern const char DOM_PAGEFINISH[]; +ACE_EXPORT extern const char DOM_PAGEERROR[]; +ACE_EXPORT extern const char DOM_WEB_WEBSRC[]; +ACE_EXPORT extern const char DOM_METHOD_RELOAD[]; + +// z-index +ACE_EXPORT extern const char DOM_ZINDEX[]; + +// camera +ACE_EXPORT extern const char DOM_TAKE_PHOTO[]; +ACE_EXPORT extern const char DOM_CAMERA_FLASH[]; +ACE_EXPORT extern const char DOM_CAMERA_DEVICE_POSITION[]; +ACE_EXPORT extern const char DOM_CAMERA_START_RECORD[]; +ACE_EXPORT extern const char DOM_CAMERA_CLOSE_RECORDER[]; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_TYPE_H diff --git a/frameworks/bridge/common/dom/dom_video.cpp b/frameworks/bridge/common/dom/dom_video.cpp new file mode 100644 index 00000000..6e4a88ea --- /dev/null +++ b/frameworks/bridge/common/dom/dom_video.cpp @@ -0,0 +1,267 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_video.h" + +#include "frameworks/bridge/common/dom/dom_type.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +namespace { + +constexpr uint32_t METHOD_VIDEO_TO_ARGS_SIZE = 1; + +} + +DOMVideo::DOMVideo(NodeId nodeId, const std::string& nodeName) : DOMNode(nodeId, nodeName) +{ + videoChild_ = AceType::MakeRefPtr(); + videoChild_->SetFullscreenEvent([weak = AceType::WeakClaim(this)](bool fullscreen, const WeakPtr& player, + const WeakPtr& texture) { + auto client = weak.Upgrade(); + RefPtr result; + if (client) { + result = client->FireFullscreen(fullscreen, player, texture); + } + return result; + }); + if (IsRightToLeft()) { + videoChild_->SetTextDirection(TextDirection::RTL); + } +} + +bool DOMVideo::SetSpecializedAttr(const std::pair& attr) +{ + // Operator map for attr + static const std::unordered_map&, const std::string&)> + attrOperators = { + { DOM_VIDEO_MUTED, [](const RefPtr& video, + const std::string& val) { video->SetMute(StringToBool(val)); } }, + { DOM_VIDEO_SRC, [](const RefPtr& video, const std::string& val) { video->SetSrc(val); } }, + { DOM_VIDEO_AUTOPLAY, [](const RefPtr& video, + const std::string& val) { video->SetAutoPlay(StringToBool(val)); } }, + { DOM_VIDEO_POSTER, + [](const RefPtr& video, const std::string& val) { video->SetPoster(val); } }, + { DOM_VIDEO_CONTROLS, [](const RefPtr& video, + const std::string& val) { video->SetNeedControls(StringToBool(val)); } }, + }; + auto operatorIter = attrOperators.find(attr.first); + if (operatorIter != attrOperators.end()) { + operatorIter->second(videoChild_, attr.second); + return true; + } + return false; +} + +bool DOMVideo::SetSpecializedStyle(const std::pair& style) +{ + // Operator map for styles + static const std::unordered_map&, const std::string&)> + styleOperators = { + // Set video-fit + { DOM_VIDEO_FIT, [](const RefPtr& video, + const std::string& val) { video->SetFit(ConvertStrToFit(val)); } }, + }; + auto operatorIter = styleOperators.find(style.first); + if (operatorIter != styleOperators.end()) { + operatorIter->second(videoChild_, style.second); + return true; + } + return false; +} + +bool DOMVideo::AddSpecializedEvent(int32_t pageId, const std::string& event) +{ + // Operator map for event + static const std::unordered_map&, const EventMarker&)> + eventOperators = { + { DOM_VIDEO_EVENT_PREPARED, [](const RefPtr& video, + const EventMarker& event) { video->SetPreparedEventId(event); } }, + { DOM_VIDEO_EVENT_START, + [](const RefPtr& video, const EventMarker& event) { video->SetStartEventId(event); } }, + { DOM_VIDEO_EVENT_PAUSE, + [](const RefPtr& video, const EventMarker& event) { video->SetPauseEventId(event); } }, + { DOM_VIDEO_EVENT_FINISH, + [](const RefPtr& video, const EventMarker& event) { video->SetFinishEventId(event); } }, + { DOM_VIDEO_EVENT_ERROR, + [](const RefPtr& video, const EventMarker& event) { video->SetErrorEventId(event); } }, + { DOM_VIDEO_EVENT_SEEKING, [](const RefPtr& video, + const EventMarker& event) { video->SetSeekingEventId(event); } }, + { DOM_VIDEO_EVENT_SEEKED, + [](const RefPtr& video, const EventMarker& event) { video->SetSeekedEventId(event); } }, + { DOM_VIDEO_EVENT_TIMEUPDATE, [](const RefPtr& video, + const EventMarker& event) { video->SetTimeUpdateEventId(event); } }, + { DOM_VIDEO_EVENT_FULLSCREENCHANGE, + [](const RefPtr& video, const EventMarker& event) { + video->SetFullscreenChangeEventId(event); + } }, + }; + auto operatorIter = eventOperators.find(event); + if (operatorIter != eventOperators.end()) { + operatorIter->second(videoChild_, EventMarker(GetNodeIdForEvent(), event, pageId)); + return true; + } + return false; +} + +void DOMVideo::CallSpecializedMethod(const std::string& method, const std::string& args) +{ + // Operator map for method + static const std::unordered_map&, const std::string&)> + methedOperators = { + { DOM_VIDEO_METHOD_START, + [](const RefPtr& video, const std::string& args) { + auto controller = video->GetVideoController(); + ACE_DCHECK(controller); + controller->Start(); + } }, + { DOM_VIDEO_METHOD_PAUSE, + [](const RefPtr& video, const std::string& args) { + auto controller = video->GetVideoController(); + ACE_DCHECK(controller); + controller->Pause(); + } }, + { DOM_VIDEO_METHOD_SEEK_TO, + [](const RefPtr& video, const std::string& args) { + auto controller = video->GetVideoController(); + ACE_DCHECK(controller); + auto value = GetParamFromJson(args, "currenttime"); + if (value) { + int32_t pos = value->GetInt(); + controller->SeekTo(pos); + } + } }, + { DOM_VIDEO_METHOD_REQUEST_FULLSCREEN, + [](const RefPtr& video, const std::string& args) { + auto controller = video->GetVideoController(); + ACE_DCHECK(controller); + auto value = GetParamFromJson(args, "screenOrientation "); + if (value) { + controller->RequestFullscreen(!(value->GetString() == "landscape")); + } + } }, + { DOM_VIDEO_METHOD_EXIT_FULLSCREEN, + [](const RefPtr& video, const std::string& args) { + auto controller = video->GetVideoController(); + ACE_DCHECK(controller); + controller->ExitFullscreen(false); + } }, + }; + auto operatorIter = methedOperators.find(method); + if (operatorIter != methedOperators.end()) { + operatorIter->second(videoChild_, args); + } +} + +std::unique_ptr DOMVideo::GetParamFromJson(const std::string& json, const std::string& key) +{ + std::unique_ptr argsValue = JsonUtil::ParseJsonString(json); + if (!argsValue || !argsValue->IsArray() || argsValue->GetArraySize() != METHOD_VIDEO_TO_ARGS_SIZE) { + LOGE("parse args error"); + return nullptr; + } + + std::unique_ptr Value = argsValue->GetArrayItem(0)->GetValue(key); + if (!Value) { + LOGE("get index failed"); + return nullptr; + } + return Value; +} + +RefPtr DOMVideo::FireFullscreen( + bool isFullScreen, const WeakPtr& player, const WeakPtr& texture) +{ + const auto& composed = GetRootComponent(); + ACE_DCHECK(composed); + if (isFullScreen) { + if (isFullscreen_) { + return nullptr; + } + originComponent_ = composed->GetChild(); + videoChild_->SetFullscreen(true); + videoChild_->SetPlayer(player); + videoChild_->SetTexture(texture); + composed->SetChild(GetEventComponents(videoChild_)); + isFullscreen_ = true; + } else { + if (!isFullscreen_) { + return nullptr; + } + if (!originComponent_) { + LOGE("the origin component is null"); + return nullptr; + } + videoChild_->SetFullscreen(false); + videoChild_->SetPlayer(nullptr); + videoChild_->SetTexture(nullptr); + composed->SetChild(originComponent_); + isFullscreen_ = false; + + auto controller = videoChild_->GetVideoController(); + ACE_DCHECK(controller); + controller->ExitFullscreen(true); + return nullptr; + } + + return GetRootComponent(); +} + +RefPtr DOMVideo::GetEventComponents(const RefPtr& videoChild) +{ + std::vector> components; + RefPtr focusableEventComponent = GetFocusableComponent(); + if (focusableEventComponent) { + components.emplace_back(focusableEventComponent); + } + RefPtr touchEventComponent = GetTouchListenerComponent(); + if (touchEventComponent) { + components.emplace_back(touchEventComponent); + } + RefPtr gestureEventComponent = GetGestureListenerComponent(); + if (gestureEventComponent) { + components.emplace_back(gestureEventComponent); + } + RefPtr mouseEventComponent = GetMouseListenerComponent(); + if (mouseEventComponent) { + components.emplace_back(mouseEventComponent); + } + for (int32_t idx = static_cast(components.size()) - 1; idx >= 1; --idx) { + components[idx - 1]->SetChild(components[idx]); + } + if (!components.empty()) { + const auto& lastEventComponent = components.back(); + if (lastEventComponent) { + lastEventComponent->SetChild(videoChild); + return components.front(); + } + } + return videoChild; +} + +ImageFit DOMVideo::ConvertStrToFit(const std::string& fit) +{ + static const std::unordered_map IMAGE_FIT_TABLE = { + { "fill", ImageFit::FILL }, + { "contain", ImageFit::CONTAIN }, + { "cover", ImageFit::COVER }, + { "scaledown", ImageFit::SCALEDOWN }, + { "none", ImageFit::NONE }, + }; + auto imageFitIter = IMAGE_FIT_TABLE.find(fit); + return imageFitIter != IMAGE_FIT_TABLE.end() ? imageFitIter->second : ImageFit::CONTAIN; +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_video.h b/frameworks/bridge/common/dom/dom_video.h new file mode 100644 index 00000000..0188cad8 --- /dev/null +++ b/frameworks/bridge/common/dom/dom_video.h @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_VIDEO_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_VIDEO_H + +#include "core/components/video/video_component.h" +#include "frameworks/bridge/common/dom/dom_node.h" + +namespace OHOS::Ace::Framework { + +class DOMVideo final : public DOMNode { + DECLARE_ACE_TYPE(DOMVideo, DOMNode); + +public: + DOMVideo(NodeId nodeId, const std::string& nodeName); + ~DOMVideo() override = default; + + RefPtr GetSpecializedComponent() override + { + if (videoChild_->GetSrc().empty()) { + return nullptr; + } + return videoChild_; + } + + RefPtr FireFullscreen( + bool isFullScreen, const WeakPtr& player, const WeakPtr& texture); + + bool OnFullScreen() const + { + return isFullscreen_; + } + RefPtr GetEventComponents(const RefPtr& videoChild); + + bool IsLeafNode() const override + { + return true; + } + +protected: + bool SetSpecializedAttr(const std::pair& attr) override; + bool SetSpecializedStyle(const std::pair& style) override; + bool AddSpecializedEvent(int32_t pageId, const std::string& event) override; + void CallSpecializedMethod(const std::string& method, const std::string& args) override; + +private: + static ImageFit ConvertStrToFit(const std::string& fit); + static std::unique_ptr GetParamFromJson(const std::string& json, const std::string& key); + + RefPtr videoChild_; + RefPtr originComponent_; + bool isFullscreen_ = false; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_VIDEO_H diff --git a/frameworks/bridge/common/dom/dom_web.cpp b/frameworks/bridge/common/dom/dom_web.cpp new file mode 100644 index 00000000..9751c17f --- /dev/null +++ b/frameworks/bridge/common/dom/dom_web.cpp @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/dom_web.h" + +#include "base/log/log.h" +#include "frameworks/bridge/common/dom/dom_type.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { + +DOMWeb::DOMWeb(NodeId nodeId, const std::string& nodeName) : DOMNode(nodeId, nodeName) +{ + webChild_ = AceType::MakeRefPtr(nodeName); +} + +bool DOMWeb::SetSpecializedAttr(const std::pair& attr) +{ + static const LinearMapNode + webAttrOperators[] = { + { DOM_WEB_WEBSRC, [](const std::string& val, WebComponent& webCom) { webCom.SetSrc(val); } }, + }; + auto operatorIter = BinarySearchFindIndex(webAttrOperators, ArraySize(webAttrOperators), + attr.first.c_str()); + if (operatorIter != -1) { + webAttrOperators[operatorIter].value(attr.second, *webChild_); + return true; + } + return false; +} + +bool DOMWeb::AddSpecializedEvent(int32_t pageId, const std::string& event) +{ + // Operator map for event + static const std::unordered_map&, const EventMarker&)> + eventOperators = { + { DOM_PAGESTART, [](const RefPtr& web, + const EventMarker& event) { web->SetPageStartedEventId(event); } }, + { DOM_PAGEFINISH, [](const RefPtr& web, + const EventMarker& event) { web->SetPageFinishedEventId(event); } }, + { DOM_PAGEERROR, [](const RefPtr& web, + const EventMarker& event) { web->SetPageErrorEventId(event); } }, + }; + auto operatorIter = eventOperators.find(event); + if (operatorIter != eventOperators.end()) { + operatorIter->second(webChild_, EventMarker(GetNodeIdForEvent(), event, pageId)); + return true; + } + return false; +} + +void DOMWeb::CallSpecializedMethod(const std::string& method, const std::string& args) +{ + // Operator map for method + static const std::unordered_map&, const std::string&)> + methedOperators = { + { DOM_METHOD_RELOAD, [](const RefPtr& web, const std::string& args) { + web->Reload(); + } }, + }; + auto operatorIter = methedOperators.find(method); + if (operatorIter != methedOperators.end()) { + operatorIter->second(webChild_, args); + } +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/dom_web.h b/frameworks/bridge/common/dom/dom_web.h new file mode 100644 index 00000000..5ee6acca --- /dev/null +++ b/frameworks/bridge/common/dom/dom_web.h @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_WEB_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_WEB_H + +#include "core/components/web/web_component.h" +#include "frameworks/bridge/common/dom/dom_node.h" + +namespace OHOS::Ace::Framework { + +class DOMWeb final : public DOMNode { + DECLARE_ACE_TYPE(DOMWeb, DOMNode); + +public: + DOMWeb(NodeId nodeId, const std::string& nodeName); + ~DOMWeb() override = default; + + RefPtr GetSpecializedComponent() override + { + return webChild_; + } + + void CallSpecializedMethod(const std::string& method, const std::string& args) override; + +protected: + bool SetSpecializedAttr(const std::pair& attr) override; + bool AddSpecializedEvent(int32_t pageId, const std::string& event) override; + +private: + RefPtr webChild_; + EventMarker pageStartEventId_; + EventMarker pageFinishEventId_; + EventMarker pageErrorEventId_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_DOM_WEB_H diff --git a/frameworks/bridge/common/dom/input/dom_button_util.cpp b/frameworks/bridge/common/dom/input/dom_button_util.cpp new file mode 100644 index 00000000..dfe0842b --- /dev/null +++ b/frameworks/bridge/common/dom/input/dom_button_util.cpp @@ -0,0 +1,262 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/input/dom_button_util.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +namespace { + +constexpr uint32_t WATCH_BACKGROUND_COLOR = 0xff007dff; +constexpr uint32_t WATCH_TEXT_COLOR = 0xffffffff; +constexpr Dimension BOX_HOVER_RADIUS = 8.0_vp; + +} // namespace + +void DOMButtonUtil::InitDefaultValue( + const RefPtr& component, const RefPtr& textChild, const RefPtr& theme) +{ + // set default properties + component->SetLayoutFlag(LAYOUT_FLAG_EXTEND_TO_PARENT); + component->SetBackgroundColor(theme->GetBgColor()); + component->SetFocusColor(theme->GetBgFocusColor()); + component->SetFocusAnimationColor(theme->GetBgFocusColor()); + component->SetHoverColor(theme->GetHoverColor()); + textChild->SetFocusColor(theme->GetTextFocusColor()); + // set text styles + auto textStyle = theme->GetTextStyle(); + textStyle.SetAdaptTextSize(textStyle.GetFontSize(), theme->GetMinFontSize()); + textStyle.SetTextAlign(TextAlign::CENTER); + textStyle.SetMaxLines(theme->GetTextMaxLines()); + textStyle.SetTextOverflow(TextOverflow::ELLIPSIS); + // set default background color and text color in watch + if (SystemProperties::GetDeviceType() == DeviceType::WATCH) { + component->SetBackgroundColor(Color(WATCH_BACKGROUND_COLOR)); + textStyle.SetTextColor(Color(WATCH_TEXT_COLOR)); + textChild->SetFocusColor(Color(WATCH_TEXT_COLOR)); + } + textChild->SetTextStyle(textStyle); +} + +RefPtr DOMButtonUtil::CreateComponentAndSetChildAttr( + const std::map& attrs, DOMInput& node) +{ + std::list> buttonChildren; + RefPtr component = AceType::MakeRefPtr(buttonChildren); + RefPtr theme = node.GetTheme(); + if (!theme) { + return component; + } + RefPtr textChild = AceType::MakeRefPtr(""); + RefPtr padding = AceType::MakeRefPtr(); + padding->SetPadding(theme->GetPadding()); + padding->SetChild(textChild); + component->AppendChild(padding); + InitDefaultValue(component, textChild, theme); + + auto boxComponent = node.GetBoxComponent(); + if (boxComponent) { + if (!boxComponent->GetBackDecoration()) { + RefPtr backDecoration = AceType::MakeRefPtr(); + backDecoration->SetBorderRadius(Radius(BOX_HOVER_RADIUS)); + boxComponent->SetBackDecoration(backDecoration); + } + } + if (LessOrEqual(node.GetHeight().Value(), 0.0)) { + node.SetHeight(theme->GetHeight()); + component->SetHeight(theme->GetHeight()); + boxComponent->SetHeight(theme->GetHeight()); + } else { + component->SetHeight(boxComponent->GetHeightDimension()); + } + if (GreatNotEqual(boxComponent->GetWidthDimension().Value(), 0.0)) { + padding->SetPadding(Edge()); + component->SetWidth(boxComponent->GetWidthDimension()); + } + component->SetRectRadius(component->GetHeight() / 2); + SetChildAttr(component, attrs, theme); + return component; +} + +void DOMButtonUtil::SetChildAttr(const RefPtr& component, + const std::map& attrs, const RefPtr& theme) +{ + if (!component) { + LOGE("fail to set child attr due to button component is null"); + return; + } + component->SetType(ButtonType::NORMAL); + for (const auto& attr : attrs) { + if (attr.first == DOM_DISABLED) { + component->SetDisabledState(StringToBool(attr.second)); + } else if (attr.first == DOM_INPUT_AUTO_FOCUS) { + component->SetAutoFocusState(StringToBool(attr.second)); + } + } + // set text data to Text child + std::list> children = component->GetChildren(); + RefPtr padding = AceType::DynamicCast(children.front()); + if (!padding) { + return; + } + RefPtr textChild = AceType::DynamicCast(padding->GetChild()); + auto inputValue = attrs.find(DOM_INPUT_VALUE); + if (inputValue != attrs.end()) { + textChild->SetData(inputValue->second); + } + if (component->GetDisabledState()) { + auto textStyle = textChild->GetTextStyle(); + textStyle.SetTextColor(theme->GetTextDisabledColor()); + textChild->SetTextStyle(textStyle); + } +} + +void DOMButtonUtil::SetChildStyle(const RefPtr& boxComponent, const RefPtr& component, + const std::map& styles, DOMInput& node) +{ + if (!boxComponent || !component) { + LOGE("fail to set child style due to box and button component is null"); + return; + } + // get style which is set by theme + std::list> children = component->GetChildren(); + RefPtr padding = AceType::DynamicCast(children.front()); + if (!padding) { + return; + } + RefPtr textChild = AceType::DynamicCast(padding->GetChild()); + TextStyle parentStyle = textChild->GetTextStyle(); + static const LinearMapNode&, TextStyle&)> + styleOperators[] = { + { DOM_INPUT_BACKGROUND_COLOR, + [](const std::string& value, const DOMInput& node, const RefPtr& component, + TextStyle& style) { component->SetBackgroundColor(node.ParseColor(value)); } }, + { DOM_INPUT_CLICKED_COLOR, + [](const std::string& value, const DOMInput& node, const RefPtr& component, + TextStyle& style) { component->SetClickedColor(node.ParseColor(value)); } }, + { DOM_INPUT_COLOR, + [](const std::string& value, const DOMInput& node, const RefPtr& component, + TextStyle& style) { style.SetTextColor(node.ParseColor(value)); } }, + { DOM_INPUT_DISABLE_COLOR, + [](const std::string& value, const DOMInput& node, const RefPtr& component, + TextStyle& style) { component->SetDisabledColor(node.ParseColor(value)); } }, + { DOM_INPUT_FOCUS_COLOR, + [](const std::string& value, const DOMInput& node, const RefPtr& component, + TextStyle& style) { component->SetFocusColor(node.ParseColor(value)); } }, + { DOM_INPUT_FONT_FAMILY, + [](const std::string& value, const DOMInput& node, const RefPtr& component, + TextStyle& style) { + std::vector fontFamilies; + std::stringstream sstr(value); + std::string fontFamily; + while (getline(sstr, fontFamily, ',')) { + fontFamilies.emplace_back(fontFamily); + } + style.SetFontFamilies(fontFamilies); + } }, + { DOM_INPUT_FONT_SIZE, + [](const std::string& value, const DOMInput& node, const RefPtr& component, + TextStyle& style) { style.SetFontSize(node.ParseDimension(value)); } }, + { DOM_INPUT_FONT_WEIGHT, + [](const std::string& value, const DOMInput& node, const RefPtr& component, + TextStyle& style) { style.SetFontWeight(ConvertStrToFontWeight(value)); } }, + { DOM_INPUT_RECT_RADIUS, + [](const std::string& value, const DOMInput& node, const RefPtr& component, + TextStyle& style) { component->SetRectRadius(node.ParseDimension(value)); } }, + }; + static const LinearMapNode&)> + paddingStyleOperators[] = { + { DOM_PADDING_BOTTOM, + [](const std::string& value, const DOMInput& node, const RefPtr& component) { + component->SetPaddingBottom(node.ParseDimension(value)); + } }, + { DOM_PADDING_LEFT, + [](const std::string& value, const DOMInput& node, const RefPtr& component) { + component->SetPaddingLeft(node.ParseDimension(value)); + } }, + { DOM_PADDING_RIGHT, + [](const std::string& value, const DOMInput& node, const RefPtr& component) { + component->SetPaddingRight(node.ParseDimension(value)); + } }, + { DOM_PADDING_TOP, + [](const std::string& value, const DOMInput& node, const RefPtr& component) { + component->SetPaddingTop(node.ParseDimension(value)); + } }, + }; + // set text style properties + for (const auto& [key, value] : styles) { + auto operatorIter = BinarySearchFindIndex(styleOperators, ArraySize(styleOperators), key.c_str()); + if (operatorIter != -1) { + styleOperators[operatorIter].value(value, node, component, parentStyle); + continue; + } + auto paddingOperator = + BinarySearchFindIndex(paddingStyleOperators, ArraySize(paddingStyleOperators), key.c_str()); + if (paddingOperator != -1) { + paddingStyleOperators[paddingOperator].value(value, node, padding); + } + } + + auto theme = node.GetTheme(); + if (theme) { + component->SetDisabledColor(component->GetBackgroundColor().BlendOpacity(theme->GetBgDisabledAlpha())); + component->SetClickedColor(component->GetBackgroundColor().BlendColor(theme->GetClickedColor())); + } + // set text style to Text child + if (SystemProperties::GetDeviceType() != DeviceType::TV) { + textChild->SetFocusColor(parentStyle.GetTextColor()); + } + if (parentStyle.GetFontSize() != theme->GetTextStyle().GetFontSize()) { + parentStyle.SetAdaptTextSize(parentStyle.GetFontSize(), parentStyle.GetFontSize()); + } + textChild->SetTextStyle(parentStyle); + + auto backDecoration = boxComponent->GetBackDecoration(); + if (backDecoration) { + const auto& border = backDecoration->GetBorder(); + if (node.HasBorderRadiusStyle()) { + component->SetRectRadius(border.TopLeftRadius().GetX() - border.Top().GetWidth()); + } else { + backDecoration->SetBorderRadius(Radius(component->GetRectRadius())); + } + if (backDecoration->GetImage()) { + component->SetType(ButtonType::ICON); + } + } + boxComponent->SetPadding(Edge()); +} + +void DOMButtonUtil::AddChildEvent(const RefPtr& component, int32_t pageId, const std::string& nodeId, + const std::vector& events) +{ + if (!component) { + LOGE("fail to add child event due to button component is null"); + return; + } + static const LinearMapNode&, const EventMarker&)> eventOperators[] = { + { DOM_CLICK, [](const RefPtr& component, + const EventMarker& event) { component->SetClickedEventId(event); } }, + }; + for (const auto& event : events) { + auto operatorIter = BinarySearchFindIndex(eventOperators, ArraySize(eventOperators), event.c_str()); + if (operatorIter != -1) { + eventOperators[operatorIter].value(component, EventMarker(nodeId, event, pageId)); + } + } +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/input/dom_button_util.h b/frameworks/bridge/common/dom/input/dom_button_util.h new file mode 100644 index 00000000..f38da3d9 --- /dev/null +++ b/frameworks/bridge/common/dom/input/dom_button_util.h @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_INPUT_DOM_BUTTON_UTIL_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_INPUT_DOM_BUTTON_UTIL_H + +#include "core/components/button/button_component.h" +#include "core/components/button/button_theme.h" +#include "core/components/common/properties/text_style.h" +#include "core/components/padding/padding_component.h" +#include "core/components/theme/theme_manager.h" +#include "core/pipeline/base/component.h" +#include "frameworks/bridge/common/dom/dom_input.h" + +namespace OHOS::Ace::Framework { + +class DOMButtonUtil final { +public: + DOMButtonUtil() = delete; + ~DOMButtonUtil() = delete; + + static RefPtr GetTheme(const NodeId nodeId); + + static RefPtr CreateComponentAndSetChildAttr( + const std::map& attrs, DOMInput& node); + + static void SetChildAttr(const RefPtr& component, const std::map& attrs, + const RefPtr& theme); + + static void SetChildStyle(const RefPtr& boxComponent, const RefPtr& component, + const std::map& styles, DOMInput& node); + + static void AddChildEvent(const RefPtr& component, int32_t pageId, const std::string& nodeId, + const std::vector& events); + +private: + static void InitDefaultValue(const RefPtr& component, const RefPtr& textChild, + const RefPtr& theme); +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_INPUT_DOM_BUTTON_UTIL_H diff --git a/frameworks/bridge/common/dom/input/dom_checkbox_util.cpp b/frameworks/bridge/common/dom/input/dom_checkbox_util.cpp new file mode 100644 index 00000000..9c4362ed --- /dev/null +++ b/frameworks/bridge/common/dom/input/dom_checkbox_util.cpp @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/input/dom_checkbox_util.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +namespace { + +constexpr bool INPUT_CHECKED_VALUE_DEFAULT = false; +constexpr Dimension BOX_HOVER_RADIUS = 8.0_vp; + +} // namespace + +void DOMCheckboxUtil::InitDefaultValue(const RefPtr& component) +{ + component->SetValue(INPUT_CHECKED_VALUE_DEFAULT); +} + +RefPtr DOMCheckboxUtil::CreateComponentAndSetChildAttr( + const std::map& attrs, DOMInput& node) +{ + // get theme to create component + RefPtr theme = node.GetTheme(); + RefPtr component = AceType::MakeRefPtr(theme); + // set default value + InitDefaultValue(component); + // Set default width and height to box. + auto boxComponent = node.GetBoxComponent(); + if (boxComponent) { + if (!boxComponent->GetBackDecoration()) { + RefPtr backDecoration = AceType::MakeRefPtr(); + backDecoration->SetBorderRadius(Radius(BOX_HOVER_RADIUS)); + boxComponent->SetBackDecoration(backDecoration); + } + } + if (LessOrEqual(node.GetWidth().Value(), 0.0)) { + node.SetWidth(theme->GetWidth()); + boxComponent->SetWidth(theme->GetWidth().Value(), theme->GetWidth().Unit()); + } + if (LessOrEqual(node.GetHeight().Value(), 0.0)) { + node.SetHeight(theme->GetHeight()); + boxComponent->SetHeight(theme->GetHeight().Value(), theme->GetHeight().Unit()); + } + + SetChildAttr(component, attrs); + + return component; +} + +void DOMCheckboxUtil::SetChildAttr( + const RefPtr& component, const std::map& attrs) +{ + if (!component) { + LOGE("fail to set child attr due to checkbox component is null"); + return; + } + static const LinearMapNode&, const std::string&)> attrOperators[] = { + { DOM_INPUT_CHECKED, [](const RefPtr& component, + const std::string& value) { component->SetValue(StringToBool(value)); } }, + { DOM_DISABLED, [](const RefPtr& component, + const std::string& value) { component->SetDisabled(StringToBool(value)); } }, + }; + for (const auto& [key, value] : attrs) { + auto operatorIter = BinarySearchFindIndex(attrOperators, ArraySize(attrOperators), key.c_str()); + if (operatorIter != -1) { + attrOperators[operatorIter].value(component, value); + } + } +} + +void DOMCheckboxUtil::AddChildEvent(const RefPtr& component, int32_t pageId, + const std::string& nodeId, const std::vector& events) +{ + if (!component) { + LOGE("fail to add child event due to checkbox component is null"); + return; + } + for (const auto& event : events) { + if (event == DOM_CHANGE) { + component->SetChangeEvent(EventMarker(nodeId, event, pageId)); + } else if (event == DOM_CLICK) { + component->SetClickEvent(EventMarker(nodeId, event, pageId)); + } + } +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/input/dom_checkbox_util.h b/frameworks/bridge/common/dom/input/dom_checkbox_util.h new file mode 100644 index 00000000..b08d0620 --- /dev/null +++ b/frameworks/bridge/common/dom/input/dom_checkbox_util.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_INPUT_DOM_CHECKBOX_UTIL_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_INPUT_DOM_CHECKBOX_UTIL_H + +#include "core/components/checkable/checkable_component.h" +#include "core/components/checkable/checkable_theme.h" +#include "core/components/theme/theme_manager.h" +#include "core/pipeline/base/component.h" +#include "frameworks/bridge/common/dom/dom_input.h" + +namespace OHOS::Ace::Framework { + +class DOMCheckboxUtil final { +public: + DOMCheckboxUtil() = delete; + ~DOMCheckboxUtil() = delete; + + static RefPtr CreateComponentAndSetChildAttr( + const std::map& attrs, DOMInput& node); + + static void SetChildAttr( + const RefPtr& component, const std::map& attrs); + + static void AddChildEvent(const RefPtr& component, int32_t pageId, const std::string& nodeId, + const std::vector& events); + +private: + static void InitDefaultValue(const RefPtr& component); +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_INPUT_DOM_CHECKBOX_UTIL_H diff --git a/frameworks/bridge/common/dom/input/dom_radio_util.cpp b/frameworks/bridge/common/dom/input/dom_radio_util.cpp new file mode 100644 index 00000000..becb6f81 --- /dev/null +++ b/frameworks/bridge/common/dom/input/dom_radio_util.cpp @@ -0,0 +1,194 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/input/dom_radio_util.h" + +#include "core/components/common/layout/constants.h" +#include "frameworks/bridge/common/utils/utils.h" +#include "frameworks/bridge/js_frontend/js_ace_page.h" +#include "frameworks/bridge/js_frontend/js_frontend.h" + +namespace OHOS::Ace::Framework { +namespace { + +std::shared_ptr GetRadioGroups(const DOMNode& node) +{ + auto context = node.GetPipelineContext().Upgrade(); + if (!context) { + LOGE("pipeline context is null"); + return nullptr; + } + auto frontend = context->GetFrontend(); + if (!frontend) { + LOGE("frontend is null"); + return nullptr; + } + auto page = frontend->GetPage(node.GetPageId()); + if (!page) { + auto jsFrontend = AceType::DynamicCast(frontend); + if (!jsFrontend) { + LOGE("not js frontend"); + return nullptr; + } + page = jsFrontend->GetCurrentReadyPage().Upgrade(); + } + auto jsPage = AceType::DynamicCast(page); + if (!jsPage) { + LOGE("js page is null"); + return nullptr; + } + return jsPage->GetRadioGroups(); +} + +} + +void DOMRadioUtil::InitDefaultValue(const RefPtr>& component) {} + +RefPtr> DOMRadioUtil::CreateComponentAndSetChildAttr( + const std::map& attrs, DOMInput& node) +{ + // get theme to create component + RefPtr theme = node.GetTheme(); + RefPtr> component = AceType::MakeRefPtr>(theme); + // set default value + InitDefaultValue(component); + auto boxComponent = node.GetBoxComponent(); + if (LessOrEqual(node.GetWidth().Value(), 0.0)) { + node.SetWidth(theme->GetWidth()); + boxComponent->SetWidth(theme->GetWidth().Value(), theme->GetWidth().Unit()); + } + if (LessOrEqual(node.GetHeight().Value(), 0.0)) { + node.SetHeight(theme->GetHeight()); + boxComponent->SetHeight(theme->GetHeight().Value(), theme->GetHeight().Unit()); + } + auto diameter = boxComponent->GetHeightDimension() > boxComponent->GetWidthDimension() + ? boxComponent->GetWidthDimension() + : boxComponent->GetHeightDimension(); + if (!boxComponent->GetBackDecoration()) { + RefPtr backDecoration = AceType::MakeRefPtr(); + backDecoration->SetBorderRadius(Radius(diameter / 2.0)); + boxComponent->SetBackDecoration(backDecoration); + } + + SetChildAttr(node, component, attrs); + + return component; +} + +void DOMRadioUtil::SetChildAttr(const DOMInput& node, const RefPtr>& component, + const std::map& attrs) +{ + if (!component) { + LOGE("fail to set child attr due to radio component is null"); + return; + } + bool checked = false; + for (const auto& attr : attrs) { + if (attr.first == DOM_INPUT_CHECKED) { + checked = StringToBool(attr.second); + } else if (attr.first == DOM_INPUT_NAME) { + CheckRadioGroup(node, component, attr.second); + } else if (attr.first == DOM_DISABLED) { + component->SetDisabled(StringToBool(attr.second)); + } else if (attr.first == DOM_INPUT_VALUE) { + component->SetValue(attr.second); + } + } + if (checked) { + component->SetGroupValue(component->GetValue()); + } else { + component->SetGroupValue(""); + } +} + +void DOMRadioUtil::SetChildStyle(const RefPtr& boxComponent, + const RefPtr>& component, const std::map& styles) +{ + if (!component) { + LOGE("fail to set child attr due to radio component is null"); + return; + } + // Padding is set in radio specially so that it can respond click event. + boxComponent->SetPadding(Edge()); + for (const auto& style : styles) { + if (style.first == DOM_PADDING) { + Edge padding; + if (Edge::FromString(style.second, padding)) { + component->SetHorizontalPadding(padding.Left()); + component->SetHotZoneVerticalPadding(padding.Top()); + } + } + } +} + +void DOMRadioUtil::AddChildEvent(const RefPtr>& component, int32_t pageId, + const std::string& nodeId, const std::vector& events) +{ + if (!component) { + LOGE("fail to add child event due to radio component is null"); + return; + } + for (const auto& event : events) { + if (event == DOM_CHANGE) { + component->SetChangeEvent(EventMarker(nodeId, event, pageId)); + } else if (event == DOM_CLICK) { + component->SetClickEvent(EventMarker(nodeId, event, pageId)); + } + } +} + +void DOMRadioUtil::RemoveRadioComponent(const DOMInput& node, const RefPtr>& component) +{ + if (!component) { + return; + } + auto radioGroups = GetRadioGroups(node); + if (radioGroups == nullptr) { + return; + } + + auto radioGroupIter = (*radioGroups).find(component->GetGroupName()); + if (radioGroupIter != (*radioGroups).end()) { + radioGroupIter->second.RemoveRadio(component); + if (radioGroupIter->second.IsEmpty()) { + (*radioGroups).erase(radioGroupIter); + } + } +} + +void DOMRadioUtil::CheckRadioGroup( + const DOMInput& node, const RefPtr>& component, const std::string& name) +{ + auto radioGroups = GetRadioGroups(node); + if (radioGroups == nullptr) { + return; + } + const auto& groupName = component->GetGroupName(); + if (!groupName.empty()) { + if (groupName == name) { + return; + } + auto& oldRadioGroup = (*radioGroups)[groupName]; + oldRadioGroup.RemoveRadio(component); + if (oldRadioGroup.IsEmpty()) { + (*radioGroups).erase(groupName); + } + } + component->SetGroupName(name); + auto& radioGroup = (*radioGroups)[name]; + radioGroup.AddRadio(component); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/input/dom_radio_util.h b/frameworks/bridge/common/dom/input/dom_radio_util.h new file mode 100644 index 00000000..df39be4e --- /dev/null +++ b/frameworks/bridge/common/dom/input/dom_radio_util.h @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_INPUT_DOM_RADIO_UTIL_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_INPUT_DOM_RADIO_UTIL_H + +#include "core/components/checkable/checkable_component.h" +#include "core/components/checkable/checkable_theme.h" +#include "core/components/checkable/radio_group_component.h" +#include "core/components/theme/theme_manager.h" +#include "core/pipeline/base/component.h" +#include "frameworks/bridge/common/dom/dom_input.h" + +namespace OHOS::Ace::Framework { + +class ACE_EXPORT DOMRadioUtil final { +public: + DOMRadioUtil() = delete; + ~DOMRadioUtil() = delete; + + static RefPtr> CreateComponentAndSetChildAttr( + const std::map& attrs, DOMInput& node); + + static void SetChildAttr(const DOMInput& node, const RefPtr>& component, + const std::map& attrs); + + static void SetChildStyle(const RefPtr& boxComponent, + const RefPtr>& component, const std::map& styles); + + static void AddChildEvent(const RefPtr>& component, int32_t pageId, + const std::string& nodeId, const std::vector& events); + + static void RemoveRadioComponent(const DOMInput& node, const RefPtr>& component); + +private: + static void InitDefaultValue(const RefPtr>& component); + + static void CheckRadioGroup( + const DOMInput& node, const RefPtr>& component, const std::string& name); +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_INPUT_DOM_RADIO_UTIL_H diff --git a/frameworks/bridge/common/dom/input/dom_textfield_util.cpp b/frameworks/bridge/common/dom/input/dom_textfield_util.cpp new file mode 100644 index 00000000..63c9786b --- /dev/null +++ b/frameworks/bridge/common/dom/input/dom_textfield_util.cpp @@ -0,0 +1,427 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/dom/input/dom_textfield_util.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +namespace { + +const TextInputAction INPUT_TEXTINPUTACTION_VALUE_DEFAULT = TextInputAction::UNSPECIFIED; +const std::vector INPUT_FONT_FAMILY_VALUE = { + "sans-serif", +}; + +constexpr Dimension BOX_HOVER_RADIUS = 18.0_vp; +constexpr char INPUT_TYPE_EMAIL[] = "email"; +constexpr char INPUT_TYPE_DATE[] = "date"; +constexpr char INPUT_TYPE_TIME[] = "time"; +constexpr char INPUT_TYPE_NUMBER[] = "number"; +constexpr char INPUT_TYPE_PASSWORD[] = "password"; + +} // namespace + +Radius DOMTextFieldUtil::defaultRadius_; + +void DOMTextFieldUtil::InitDefaultValue(const RefPtr& boxComponent, + const RefPtr& component, const RefPtr& theme) +{ + if (!boxComponent || !component || !theme) { + return; + } + + component->SetAction(INPUT_TEXTINPUTACTION_VALUE_DEFAULT); + component->SetCursorColor(theme->GetCursorColor()); + component->SetCursorRadius(theme->GetCursorRadius()); + component->SetPlaceholderColor(theme->GetPlaceholderColor()); + + component->SetFocusBgColor(theme->GetFocusBgColor()); + component->SetFocusPlaceholderColor(theme->GetFocusPlaceholderColor()); + component->SetFocusTextColor(theme->GetFocusTextColor()); + component->SetBgColor(theme->GetBgColor()); + component->SetTextColor(theme->GetTextColor()); + component->SetSelectedColor(theme->GetSelectedColor()); + component->SetHoverColor(theme->GetHoverColor()); + component->SetPressColor(theme->GetPressColor()); + component->SetNeedFade(theme->NeedFade()); + component->SetShowEllipsis(theme->ShowEllipsis()); + + TextStyle textStyle = component->GetTextStyle(); + textStyle.SetTextColor(theme->GetTextColor()); + textStyle.SetFontSize(theme->GetFontSize()); + textStyle.SetFontWeight(theme->GetFontWeight()); + textStyle.SetFontFamilies(INPUT_FONT_FAMILY_VALUE); + component->SetTextStyle(textStyle); + + component->SetCountTextStyle(theme->GetCountTextStyle()); + component->SetOverCountStyle(theme->GetOverCountStyle()); + component->SetCountTextStyleOuter(theme->GetCountTextStyleOuter()); + component->SetOverCountStyleOuter(theme->GetOverCountStyleOuter()); + + component->SetErrorTextStyle(theme->GetErrorTextStyle()); + component->SetErrorSpacing(theme->GetErrorSpacing()); + component->SetErrorIsInner(theme->GetErrorIsInner()); + component->SetErrorBorderWidth(theme->GetErrorBorderWidth()); + component->SetErrorBorderColor(theme->GetErrorBorderColor()); + + RefPtr decoration = AceType::MakeRefPtr(); + decoration->SetPadding(theme->GetPadding()); + decoration->SetBackgroundColor(theme->GetBgColor()); + decoration->SetBorderRadius(theme->GetBorderRadius()); + defaultRadius_ = theme->GetBorderRadius(); + const auto& boxDecoration = boxComponent->GetBackDecoration(); + if (boxDecoration) { + decoration->SetImage(boxDecoration->GetImage()); + decoration->SetGradient(boxDecoration->GetGradient()); + } + component->SetDecoration(decoration); + + component->SetIconSize(theme->GetIconSize()); + component->SetIconHotZoneSize(theme->GetIconHotZoneSize()); + + boxComponent->SetPadding(theme->GetPadding()); + component->SetHeight(theme->GetHeight()); +} + +void DOMTextFieldUtil::SetDisableStyle(const RefPtr& component, const RefPtr& theme) +{ + if (!component || !theme) { + return; + } + + TextStyle textStyle = component->GetTextStyle(); + textStyle.SetTextColor(theme->GetDisableTextColor()); + component->SetTextStyle(textStyle); + component->SetPlaceholderColor(theme->GetDisableTextColor()); +} + +void DOMTextFieldUtil::InitController(const RefPtr& component) +{ + if (component) { + component->SetTextEditController(AceType::MakeRefPtr()); + component->SetTextFieldController(AceType::MakeRefPtr()); + } +} + +RefPtr DOMTextFieldUtil::CreateComponentAndSetChildAttr(const RefPtr& boxComponent, + const std::string& type, const std::map& attrs, const DOMInput& node) +{ + // create component + RefPtr component = AceType::MakeRefPtr(); + // set default value + RefPtr theme = node.GetTheme(); + InitController(component); + InitDefaultValue(boxComponent, component, theme); + + SetChildAttr(component, boxComponent, type, attrs); + + if (!component->IsEnabled()) { + SetDisableStyle(component, theme); + } + + return component; +} + +void DOMTextFieldUtil::SetChildAttr(const RefPtr& component, + const RefPtr& boxComponent, const std::string& type, const std::map& attrs) +{ + if (!component) { + return; + } + component->SetTextInputType(ConvertStrToTextInputType(type)); + component->SetObscure(type == INPUT_TYPE_PASSWORD); + // this static map should be sorted by key. + static const LinearMapNode&, const std::string&)> attrOperators[] = { + { DOM_DISABLED, [](const RefPtr& component, + const std::string& value) { component->SetEnabled(!StringToBool(value)); } }, + { DOM_INPUT_ENTERKEYTYPE, + [](const RefPtr& component, const std::string& value) { + component->SetAction(ConvertStrToTextInputAction(value)); + } }, + { DOM_ICON_SRC, [](const RefPtr& component, + const std::string& value) { component->SetIconImage(value); } }, + { DOM_HIDE_ICON_SRC, [](const RefPtr& component, + const std::string& value) { component->SetHideIconImage(value); } }, + { DOM_INPUT_MAXLENGTH, + [](const RefPtr& component, const std::string& value) { + int32_t tmp = StringUtils::StringToInt(value); + component->SetMaxLength(tmp >= 0 ? (uint32_t)(tmp) : std::numeric_limits::max()); + } }, + { DOM_INPUT_OBSCURE, [](const RefPtr& component, + const std::string& value) { component->SetObscure(StringToBool(value)); } }, + { DOM_INPUT_PLACEHOLDER, [](const RefPtr& component, + const std::string& value) { component->SetPlaceholder(value); } }, + { DOM_INPUT_SHOW_COUNTER, [](const RefPtr& component, + const std::string& value) { component->SetShowCounter(StringToBool(value)); } }, + { DOM_SHOW_ICON_SRC, [](const RefPtr& component, + const std::string& value) { component->SetShowIconImage(value); } }, + { DOM_INPUT_VALUE, + [](const RefPtr& component, const std::string& value) { component->SetValue(value); } }, + }; + for (const auto& [key, value] : attrs) { + auto operatorIter = BinarySearchFindIndex(attrOperators, ArraySize(attrOperators), key.c_str()); + if (operatorIter != -1) { + attrOperators[operatorIter].value(component, value); + } + } + + if (boxComponent) { + boxComponent->SetDeliverMinToChild(true); + if (GreatOrEqual(boxComponent->GetHeightDimension().Value(), 0.0)) { + component->SetHeight(boxComponent->GetHeightDimension()); + } + boxComponent->SetHeight(-1.0, DimensionUnit::PX); + } +} + +void DOMTextFieldUtil::SetChildStyle(const RefPtr& boxComponent, + const RefPtr& component, const std::map& styles, + const Border& boxBorder, const DOMInput& node) +{ + if (!component) { + return; + } + TextStyle textStyle = component->GetTextStyle(); + // static linear map must be sorted by key. + static const LinearMapNode&, TextStyle&, const std::string&, const DOMInput&)> + styleOperators[] = { + { DOM_TEXT_ALLOW_SCALE, + [](const RefPtr& component, TextStyle& style, const std::string& value, + const DOMInput& node) { style.SetAllowScale(StringToBool(value)); } }, + { DOM_BACKGROUND_COLOR, + [](const RefPtr& component, TextStyle& style, const std::string& value, + const DOMInput& node) { + component->SetBgColor(node.ParseColor(value)); + component->SetFocusBgColor(node.ParseColor(value)); + } }, + { DOM_INPUT_COLOR, + [](const RefPtr& component, TextStyle& style, const std::string& value, + const DOMInput& node) { + style.SetTextColor(node.ParseColor(value)); + component->SetFocusTextColor(node.ParseColor(value)); + } }, + { DOM_INPUT_CURSOR_COLOR, + [](const RefPtr& component, TextStyle& style, const std::string& value, + const DOMInput& node) { component->SetCursorColor(node.ParseColor(value)); } }, + { DOM_INPUT_FONT_FAMILY, + [](const RefPtr& component, TextStyle& style, const std::string& value, + const DOMInput& node) { + std::vector fontFamilies; + std::stringstream sstr(value); + std::string fontFamily; + while (getline(sstr, fontFamily, ',')) { + fontFamilies.emplace_back(fontFamily); + } + style.SetFontFamilies(fontFamilies); + } }, + { DOM_INPUT_FONT_SIZE, + [](const RefPtr& component, TextStyle& style, const std::string& value, + const DOMInput& node) { style.SetFontSize(node.ParseDimension(value)); } }, + { DOM_INPUT_FONT_WEIGHT, + [](const RefPtr& component, TextStyle& style, const std::string& value, + const DOMInput& node) { style.SetFontWeight(ConvertStrToFontWeight(value)); } }, + { DOM_PADDING, + [](const RefPtr& component, TextStyle& style, const std::string& value, + const DOMInput& node) { + Edge padding; + if (Edge::FromString(value, padding)) { + component->GetDecoration()->SetPadding(padding); + } + } }, + { DOM_PADDING_BOTTOM, + [](const RefPtr& component, TextStyle& style, const std::string& value, + const DOMInput& node) { + auto padding = component->GetDecoration()->GetPadding(); + padding.SetBottom(node.ParseDimension(value)); + component->GetDecoration()->SetPadding(padding); + } }, + { DOM_PADDING_END, + [](const RefPtr& component, TextStyle& style, const std::string& value, + const DOMInput& node) { + auto padding = component->GetDecoration()->GetPadding(); + component->GetTextDirection() == TextDirection::LTR ? padding.SetRight(node.ParseDimension(value)) + : padding.SetLeft(node.ParseDimension(value)); + component->GetDecoration()->SetPadding(padding); + } }, + { DOM_PADDING_LEFT, + [](const RefPtr& component, TextStyle& style, const std::string& value, + const DOMInput& node) { + auto padding = component->GetDecoration()->GetPadding(); + padding.SetLeft(node.ParseDimension(value)); + component->GetDecoration()->SetPadding(padding); + } }, + { DOM_PADDING_RIGHT, + [](const RefPtr& component, TextStyle& style, const std::string& value, + const DOMInput& node) { + auto padding = component->GetDecoration()->GetPadding(); + padding.SetRight(node.ParseDimension(value)); + component->GetDecoration()->SetPadding(padding); + } }, + { DOM_PADDING_START, + [](const RefPtr& component, TextStyle& style, const std::string& value, + const DOMInput& node) { + auto padding = component->GetDecoration()->GetPadding(); + component->GetTextDirection() == TextDirection::LTR ? padding.SetLeft(node.ParseDimension(value)) + : padding.SetRight(node.ParseDimension(value)); + component->GetDecoration()->SetPadding(padding); + } }, + { DOM_PADDING_TOP, + [](const RefPtr& component, TextStyle& style, const std::string& value, + const DOMInput& node) { + auto padding = component->GetDecoration()->GetPadding(); + padding.SetTop(node.ParseDimension(value)); + component->GetDecoration()->SetPadding(padding); + } }, + { DOM_INPUT_PLACEHOLDER_COLOR, + [](const RefPtr& component, TextStyle& style, const std::string& value, + const DOMInput& node) { + component->SetPlaceholderColor(node.ParseColor(value)); + component->SetFocusPlaceholderColor(node.ParseColor(value)); + } }, + }; + bool hasBoxRadius = false; + for (const auto& [key, value] : styles) { + auto operatorIter = BinarySearchFindIndex(styleOperators, ArraySize(styleOperators), key.c_str()); + if (operatorIter != -1) { + styleOperators[operatorIter].value(component, textStyle, value, node); + } + if (IsRadiusStyle(key)) { + hasBoxRadius = true; + } + } + component->SetTextStyle(textStyle); + UpdateDecorationStyle(boxComponent, component, boxBorder, hasBoxRadius); +} + +void DOMTextFieldUtil::UpdateDecorationStyle(const RefPtr& boxComponent, + const RefPtr& component, const Border& boxBorder, bool hasBoxRadius) +{ + RefPtr decoration = component->GetDecoration(); + if (!decoration) { + decoration = AceType::MakeRefPtr(); + } + if (hasBoxRadius) { + decoration->SetBorder(boxBorder); + } else { + Border border = decoration->GetBorder(); + border.SetLeftEdge(boxBorder.Left()); + border.SetRightEdge(boxBorder.Right()); + border.SetTopEdge(boxBorder.Top()); + border.SetBottomEdge(boxBorder.Bottom()); + border.SetBorderRadius(defaultRadius_); + decoration->SetBorder(border); + } + component->SetOriginBorder(decoration->GetBorder()); + + if (!boxComponent) { + return; + } + RefPtr boxDecoration = boxComponent->GetBackDecoration(); + if (boxDecoration && (boxDecoration->GetImage() || boxDecoration->GetGradient().IsValid())) { + // clear box properties except background image and radius. + boxDecoration->SetBackgroundColor(Color::TRANSPARENT); + Border border; + if (!hasBoxRadius) { + border.SetBorderRadius(defaultRadius_); + } else { + border.SetTopLeftRadius(boxBorder.TopLeftRadius()); + border.SetTopRightRadius(boxBorder.TopRightRadius()); + border.SetBottomLeftRadius(boxBorder.BottomLeftRadius()); + border.SetBottomRightRadius(boxBorder.BottomRightRadius()); + } + boxDecoration->SetBorder(border); + } else { + RefPtr backDecoration = AceType::MakeRefPtr(); + backDecoration->SetBorderRadius(Radius(BOX_HOVER_RADIUS)); + boxComponent->SetBackDecoration(backDecoration); + } + boxComponent->SetPadding(Edge()); +} + +void DOMTextFieldUtil::AddChildEvent(const RefPtr& component, int32_t pageId, + const std::string& nodeId, const std::vector& events) +{ + static const LinearMapNode&, const EventMarker&)> eventOperators[] = { + { DOM_CHANGE, [](const RefPtr& component, + const EventMarker& event) { component->SetOnTextChange(event); } }, + { DOM_CLICK, + [](const RefPtr& component, const EventMarker& event) { component->SetOnTap(event); } }, + { DOM_INPUT_EVENT_ENTERKEYCLICK, [](const RefPtr& component, + const EventMarker& event) { component->SetOnFinishInput(event); } }, + { DOM_LONG_PRESS, [](const RefPtr& component, + const EventMarker& event) { component->SetOnLongPress(event); } }, + { DOM_INPUT_EVENT_OPTION_SELECT, [](const RefPtr& component, + const EventMarker& event) { component->SetOnOptionsClick(event); } }, + { DOM_INPUT_EVENT_SEARCH, [](const RefPtr& component, + const EventMarker& event) { component->SetOnSearch(event); } }, + { DOM_INPUT_EVENT_SHARE, [](const RefPtr& component, + const EventMarker& event) { component->SetOnShare(event); } }, + { DOM_INPUT_EVENT_TRANSLATE, [](const RefPtr& component, + const EventMarker& event) { component->SetOnTranslate(event); } }, + }; + for (const auto& event : events) { + auto operatorIter = BinarySearchFindIndex(eventOperators, ArraySize(eventOperators), event.c_str()); + if (operatorIter != -1) { + eventOperators[operatorIter].value(component, EventMarker(nodeId, event, pageId)); + } + } +} + +bool DOMTextFieldUtil::IsRadiusStyle(const std::string& style) +{ + return (style == DOM_BORDER_TOP_LEFT_RADIUS || style == DOM_BORDER_TOP_RIGHT_RADIUS || + style == DOM_BORDER_BOTTOM_LEFT_RADIUS || style == DOM_BORDER_BOTTOM_RIGHT_RADIUS || + style == DOM_BORDER_RADIUS); +} + +TextInputAction DOMTextFieldUtil::ConvertStrToTextInputAction(const std::string& action) +{ + TextInputAction inputAction; + if (action == "next") { + inputAction = TextInputAction::NEXT; + } else if (action == "go") { + inputAction = TextInputAction::GO; + } else if (action == "done") { + inputAction = TextInputAction::DONE; + } else if (action == "send") { + inputAction = TextInputAction::SEND; + } else if (action == "search") { + inputAction = TextInputAction::SEARCH; + } else { + inputAction = TextInputAction::UNSPECIFIED; + } + return inputAction; +} + +TextInputType DOMTextFieldUtil::ConvertStrToTextInputType(const std::string& type) +{ + TextInputType inputType; + if (type == INPUT_TYPE_NUMBER) { + inputType = TextInputType::NUMBER; + } else if (type == INPUT_TYPE_DATE || type == INPUT_TYPE_TIME) { + inputType = TextInputType::DATETIME; + } else if (type == INPUT_TYPE_EMAIL) { + inputType = TextInputType::EMAIL_ADDRESS; + } else if (type == INPUT_TYPE_PASSWORD) { + inputType = TextInputType::VISIBLE_PASSWORD; + } else { + inputType = TextInputType::TEXT; + } + return inputType; +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/dom/input/dom_textfield_util.h b/frameworks/bridge/common/dom/input/dom_textfield_util.h new file mode 100644 index 00000000..cd316669 --- /dev/null +++ b/frameworks/bridge/common/dom/input/dom_textfield_util.h @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_INPUT_DOM_TEXTFIELD_UTIL_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_INPUT_DOM_TEXTFIELD_UTIL_H + +#include "core/common/ime/text_input_action.h" +#include "core/common/ime/text_input_type.h" +#include "core/components/text_field/text_field_component.h" +#include "core/components/text_field/textfield_theme.h" +#include "core/components/theme/theme_manager.h" +#include "core/pipeline/base/component.h" +#include "frameworks/bridge/common/dom/dom_input.h" + +namespace OHOS::Ace::Framework { + +class DOMTextFieldUtil final { +public: + DOMTextFieldUtil() = delete; + ~DOMTextFieldUtil() = delete; + + static RefPtr CreateComponentAndSetChildAttr(const RefPtr& boxComponent, + const std::string& type, const std::map& attrs, const DOMInput& node); + + static void SetChildAttr(const RefPtr& component, const RefPtr& boxComponent, + const std::string& type, const std::map& attrs); + + static void SetChildStyle(const RefPtr& boxComponent, const RefPtr& component, + const std::map& styles, const Border& boxBorder, const DOMInput& node); + + static void UpdateDecorationStyle(const RefPtr& boxComponent, + const RefPtr& component, const Border& boxBorder, bool hasBoxRadius); + + static void AddChildEvent(const RefPtr& component, int32_t pageId, const std::string& nodeId, + const std::vector& events); + + static void InitDefaultValue(const RefPtr& boxComponent, + const RefPtr& component, const RefPtr& theme); + + static void SetDisableStyle( + const RefPtr& component, const RefPtr& theme); + + static void InitController(const RefPtr& component); + + static bool IsRadiusStyle(const std::string& style); + +private: + static TextInputAction ConvertStrToTextInputAction(const std::string& action); + static TextInputType ConvertStrToTextInputType(const std::string& type); + static Radius defaultRadius_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_DOM_INPUT_DOM_TEXTFIELD_UTIL_H diff --git a/frameworks/bridge/common/inspector/inspect_button.cpp b/frameworks/bridge/common/inspector/inspect_button.cpp new file mode 100644 index 00000000..9ace86f8 --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_button.cpp @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/inspector/inspect_button.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +InspectButton::InspectButton(NodeId nodeId, const std::string& nodeName) : InspectNode(nodeId, nodeName) { +} + +void InspectButton::PackAttrAndStyle() +{ + // add for the attrs + attrs_.insert(std::make_pair("placement", "end")); + attrs_.insert(std::make_pair("waiting", "false")); + attrs_.insert(std::make_pair("disabled", "false")); + attrs_.insert(std::make_pair("focusable", "true")); + + // add for the styles + DeviceType deviceType = SystemProperties::GetDeviceType(); + if (deviceType == DeviceType::PHONE) { + styles_.insert(std::make_pair("text-color", "#ff007dff")); + styles_.insert(std::make_pair("font-size", "16px")); + } else if (deviceType == DeviceType::TV) { + styles_.insert(std::make_pair("text-color", "#e5ffffff")); + styles_.insert(std::make_pair("font-size", "18px")); + } else if (deviceType == DeviceType::WATCH) { + styles_.insert(std::make_pair("text-color", "#ff45a5ff")); + styles_.insert(std::make_pair("font-size", "16px")); + } + styles_.insert(std::make_pair("allow-scale", "true")); + styles_.insert(std::make_pair("font-style", "normal")); + styles_.insert(std::make_pair("font-weight", "normal")); + styles_.insert(std::make_pair("font-family", "sans-serif")); +} +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/inspector/inspect_button.h b/frameworks/bridge/common/inspector/inspect_button.h new file mode 100644 index 00000000..2bcf5ad8 --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_button.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_BUTTON_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_BUTTON_H + +#include "frameworks/bridge/common/inspector/inspect_node.h" + +namespace OHOS::Ace::Framework { +class InspectButton : public InspectNode { + DECLARE_ACE_TYPE(InspectButton, InspectNode); + +public: + InspectButton(NodeId nodeId, const std::string& nodeName); + ~InspectButton() override = default; + void PackAttrAndStyle() override; +}; +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_BUTTON_H diff --git a/frameworks/bridge/common/inspector/inspect_canvas.cpp b/frameworks/bridge/common/inspector/inspect_canvas.cpp new file mode 100644 index 00000000..aa8af6dd --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_canvas.cpp @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/inspector/inspect_canvas.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +InspectCanvas::InspectCanvas(NodeId nodeId, const std::string& nodeName) : InspectNode(nodeId, nodeName) { +} + +void InspectCanvas::PackAttrAndStyle() +{ + // add for the attrs + attrs_.insert(std::make_pair("disabled", "false")); + attrs_.insert(std::make_pair("focusable", "false")); +} +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/inspector/inspect_canvas.h b/frameworks/bridge/common/inspector/inspect_canvas.h new file mode 100644 index 00000000..2bf1581f --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_canvas.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_CANVAS_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_CANVAS_H + +#include "frameworks/bridge/common/inspector/inspect_node.h" + +namespace OHOS::Ace::Framework { +class InspectCanvas : public InspectNode { + DECLARE_ACE_TYPE(InspectCanvas, InspectNode); + +public: + InspectCanvas(NodeId nodeId, const std::string& nodeName); + ~InspectCanvas() override = default; + void PackAttrAndStyle() override; +}; +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_CANVAS_H diff --git a/frameworks/bridge/common/inspector/inspect_chart.cpp b/frameworks/bridge/common/inspector/inspect_chart.cpp new file mode 100644 index 00000000..cac89157 --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_chart.cpp @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/inspector/inspect_chart.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +InspectChart::InspectChart(NodeId nodeId, const std::string& nodeName) : InspectNode(nodeId, nodeName) { +} + +void InspectChart::PackAttrAndStyle() +{ + // add for the attrs + attrs_.insert(std::make_pair("type", "line")); + attrs_.insert(std::make_pair("effects", "true")); + attrs_.insert(std::make_pair("disabled", "false")); + attrs_.insert(std::make_pair("focusable", "false")); + attrs_.insert(std::make_pair("strokeColor", "#ff6384")); + attrs_.insert(std::make_pair("fillColor", "#ff6384")); + attrs_.insert(std::make_pair("gradient", "false")); + attrs_.insert(std::make_pair("min", "0")); + attrs_.insert(std::make_pair("max", "100")); + attrs_.insert(std::make_pair("axisTick", "10")); + attrs_.insert(std::make_pair("display", "false")); + attrs_.insert(std::make_pair("color", "#c0c0c0")); + attrs_.insert(std::make_pair("width", "1px")); + attrs_.insert(std::make_pair("smooth", "false")); + attrs_.insert(std::make_pair("shape", "circle")); + attrs_.insert(std::make_pair("size", "5px")); + attrs_.insert(std::make_pair("strokeWidth", "1px")); + attrs_.insert(std::make_pair("strokeColor", "#ff0000")); + attrs_.insert(std::make_pair("fillColor", "#ff0000")); + attrs_.insert(std::make_pair("margin", "1")); + attrs_.insert(std::make_pair("percent", "0")); + + // add for the styles + styles_.insert(std::make_pair("stroke-width", "32px")); + styles_.insert(std::make_pair("start-angle", "240")); + styles_.insert(std::make_pair("total-angle", "240")); +} +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/inspector/inspect_chart.h b/frameworks/bridge/common/inspector/inspect_chart.h new file mode 100644 index 00000000..2b64ce21 --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_chart.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_CHART_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_CHART_H + +#include "frameworks/bridge/common/inspector/inspect_node.h" + +namespace OHOS::Ace::Framework { +class InspectChart : public InspectNode { + DECLARE_ACE_TYPE(InspectChart, InspectNode); + +public: + InspectChart(NodeId nodeId, const std::string& nodeName); + ~InspectChart() override = default; + void PackAttrAndStyle() override; +}; +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_CHART_H diff --git a/frameworks/bridge/common/inspector/inspect_dialog.cpp b/frameworks/bridge/common/inspector/inspect_dialog.cpp new file mode 100644 index 00000000..0b9ab511 --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_dialog.cpp @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/inspector/inspect_dialog.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +InspectDialog::InspectDialog(NodeId nodeId, const std::string& nodeName) : InspectNode(nodeId, nodeName) { +} + +void InspectDialog::PackAttrAndStyle() +{ + // add for the attrs + attrs_.insert(std::make_pair("disabled", "false")); + + // add for the styles + // clear the common styles for dialog + std::unordered_map().swap(styles_); + styles_.clear(); + styles_.insert(std::make_pair("margin-left", "0")); + styles_.insert(std::make_pair("margin-top", "0")); + styles_.insert(std::make_pair("margin-right", "0")); + styles_.insert(std::make_pair("margin-bottom", "0")); +} +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/inspector/inspect_dialog.h b/frameworks/bridge/common/inspector/inspect_dialog.h new file mode 100644 index 00000000..7daacdae --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_dialog.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_DIALOG_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_DIALOG_H + +#include "frameworks/bridge/common/inspector/inspect_node.h" + +namespace OHOS::Ace::Framework { +class InspectDialog : public InspectNode { + DECLARE_ACE_TYPE(InspectDialog, InspectNode); + +public: + InspectDialog(NodeId nodeId, const std::string& nodeName); + ~InspectDialog() override = default; + void PackAttrAndStyle() override; +}; +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_DIALOG_H diff --git a/frameworks/bridge/common/inspector/inspect_div.cpp b/frameworks/bridge/common/inspector/inspect_div.cpp new file mode 100644 index 00000000..5aa3d9a2 --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_div.cpp @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/inspector/inspect_div.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +InspectDiv::InspectDiv(NodeId nodeId, const std::string& nodeName) : InspectNode(nodeId, nodeName) {} + +void InspectDiv::PackAttrAndStyle() +{ + // add for the attrs + attrs_.insert(std::make_pair("disabled", "false")); + attrs_.insert(std::make_pair("focusable", "true")); + + // add for the styles + styles_.insert(std::make_pair("flex-direction", "row")); + styles_.insert(std::make_pair("flex-wrap", "nowrap")); + styles_.insert(std::make_pair("justify-content", "flex-start")); + styles_.insert(std::make_pair("align-items", "stretch")); + styles_.insert(std::make_pair("align-content", "flex-start")); + styles_.insert(std::make_pair("display", "flex")); + styles_.insert(std::make_pair("grid-template-columns", "1")); + styles_.insert(std::make_pair("grid-template-rows", "1")); + styles_.insert(std::make_pair("grid-columns-gap", "0")); + styles_.insert(std::make_pair("grid-rows-gap", "0")); +} +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/inspector/inspect_div.h b/frameworks/bridge/common/inspector/inspect_div.h new file mode 100644 index 00000000..045c9e32 --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_div.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_DIV_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_DIV_H + +#include "frameworks/bridge/common/inspector/inspect_node.h" + +namespace OHOS::Ace::Framework { +class InspectDiv : public InspectNode { + DECLARE_ACE_TYPE(InspectDiv, InspectNode); + +public: + InspectDiv(NodeId nodeId, const std::string& nodeName); + ~InspectDiv() override = default; + void PackAttrAndStyle() override; +}; +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_DIV_H diff --git a/frameworks/bridge/common/inspector/inspect_divider.cpp b/frameworks/bridge/common/inspector/inspect_divider.cpp new file mode 100644 index 00000000..a07bfd24 --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_divider.cpp @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/inspector/inspect_divider.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +InspectDivider::InspectDivider(NodeId nodeId, const std::string& nodeName) : InspectNode(nodeId, nodeName) { +} + +void InspectDivider::PackAttrAndStyle() +{ + // add for the attrs + attrs_.insert(std::make_pair("vertical", "false")); + + // add for the styles + std::unordered_map().swap(styles_); + styles_.clear(); + DeviceType deviceType = SystemProperties::GetDeviceType(); + if (deviceType == DeviceType::PHONE) { + styles_.insert(std::make_pair("color", "#08000000")); + } else if (deviceType == DeviceType::TV) { + styles_.insert(std::make_pair("color", "#33ffffff")); + } else if (deviceType == DeviceType::WATCH) { + styles_.insert(std::make_pair("color", "#33ffffff")); + } + styles_.insert(std::make_pair("stroke-width", "1")); + styles_.insert(std::make_pair("line-cap", "butt")); + styles_.insert(std::make_pair("margin-left", "0")); + styles_.insert(std::make_pair("margin-top", "0")); + styles_.insert(std::make_pair("margin-right", "0")); + styles_.insert(std::make_pair("margin-bottom", "0")); + styles_.insert(std::make_pair("display", "flex")); + styles_.insert(std::make_pair("visibility", "visible")); + styles_.insert(std::make_pair("flex-grow", "0")); + styles_.insert(std::make_pair("flex-shrink", "1")); +} +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/inspector/inspect_divider.h b/frameworks/bridge/common/inspector/inspect_divider.h new file mode 100644 index 00000000..339d92c4 --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_divider.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_DIVIDER_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_DIVIDER_H + +#include "frameworks/bridge/common/inspector/inspect_node.h" + +namespace OHOS::Ace::Framework { +class InspectDivider : public InspectNode { + DECLARE_ACE_TYPE(InspectDivider, InspectNode); + +public: + InspectDivider(NodeId nodeId, const std::string& nodeName); + ~InspectDivider() override = default; + void PackAttrAndStyle() override; +}; +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_DIVIDER_H diff --git a/frameworks/bridge/common/inspector/inspect_image.cpp b/frameworks/bridge/common/inspector/inspect_image.cpp new file mode 100644 index 00000000..a6ec8434 --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_image.cpp @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/inspector/inspect_image.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +InspectImage::InspectImage(NodeId nodeId, const std::string& nodeName) : InspectNode(nodeId, nodeName) { +} + +void InspectImage::PackAttrAndStyle() +{ + // add for the attrs + attrs_.insert(std::make_pair("disabled", "false")); + attrs_.insert(std::make_pair("focusable", "false")); + + // add for the styles + styles_.insert(std::make_pair("object-fit", "cover")); + styles_.insert(std::make_pair("match-text-direction", "false")); + styles_.insert(std::make_pair("fit-original-size", "false")); +} +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/inspector/inspect_image.h b/frameworks/bridge/common/inspector/inspect_image.h new file mode 100644 index 00000000..cd4ed103 --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_image.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_IMAGE_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_IMAGE_H + +#include "frameworks/bridge/common/inspector/inspect_node.h" + +namespace OHOS::Ace::Framework { +class InspectImage : public InspectNode { + DECLARE_ACE_TYPE(InspectImage, InspectNode); + +public: + InspectImage(NodeId nodeId, const std::string& nodeName); + ~InspectImage() override = default; + void PackAttrAndStyle() override; +}; +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_IMAGE_H diff --git a/frameworks/bridge/common/inspector/inspect_image_animator.cpp b/frameworks/bridge/common/inspector/inspect_image_animator.cpp new file mode 100644 index 00000000..b79a52f6 --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_image_animator.cpp @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/inspector/inspect_image_animator.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +InspectImageAnimator::InspectImageAnimator(NodeId nodeId, const std::string& nodeName) : InspectNode(nodeId, nodeName) { +} + +void InspectImageAnimator::PackAttrAndStyle() +{ + // add for the attrs + attrs_.insert(std::make_pair("iteration", "infinite")); + attrs_.insert(std::make_pair("reverse", "false")); + attrs_.insert(std::make_pair("fixedsize", "true")); + attrs_.insert(std::make_pair("fillmode", "forwards")); + attrs_.insert(std::make_pair("disabled", "false")); + attrs_.insert(std::make_pair("focusable", "false")); + + // only the common styles +} +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/inspector/inspect_image_animator.h b/frameworks/bridge/common/inspector/inspect_image_animator.h new file mode 100644 index 00000000..ce63beed --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_image_animator.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_IMAGE_ANIMATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_IMAGE_ANIMATOR_H + +#include "frameworks/bridge/common/inspector/inspect_node.h" + +namespace OHOS::Ace::Framework { +class InspectImageAnimator : public InspectNode { + DECLARE_ACE_TYPE(InspectImageAnimator, InspectNode); + +public: + InspectImageAnimator(NodeId nodeId, const std::string& nodeName); + ~InspectImageAnimator() override = default; + void PackAttrAndStyle() override; +}; +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_IMAGE_ANIMATOR_H diff --git a/frameworks/bridge/common/inspector/inspect_input.cpp b/frameworks/bridge/common/inspector/inspect_input.cpp new file mode 100644 index 00000000..1e32eedd --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_input.cpp @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/inspector/inspect_input.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +InspectInput::InspectInput(NodeId nodeId, const std::string& nodeName) : InspectNode(nodeId, nodeName) { +} + +void InspectInput::PackAttrAndStyle() +{ + // add for the attrs + attrs_.insert(std::make_pair("type", "text")); + attrs_.insert(std::make_pair("checked", "false")); + attrs_.insert(std::make_pair("enterkeytype", "default")); + attrs_.insert(std::make_pair("showcounter", "false")); + attrs_.insert(std::make_pair("disabled", "false")); + attrs_.insert(std::make_pair("focusable", "true")); + + // add for the styles + DeviceType deviceType = SystemProperties::GetDeviceType(); + if (deviceType == DeviceType::PHONE) { + styles_.insert(std::make_pair("color", "#e6000000")); + styles_.insert(std::make_pair("font-size", "16px")); + styles_.insert(std::make_pair("placeholder-color", "#99000000")); + } else if (deviceType == DeviceType::TV) { + styles_.insert(std::make_pair("color", "#e6ffffff")); + styles_.insert(std::make_pair("font-size", "18px")); + styles_.insert(std::make_pair("placeholder-color", "#99ffffff")); + } + styles_.insert(std::make_pair("allow-scale", "true")); + styles_.insert(std::make_pair("font-weight", "normal")); + styles_.insert(std::make_pair("font-family", "sans-serif")); +} +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/inspector/inspect_input.h b/frameworks/bridge/common/inspector/inspect_input.h new file mode 100644 index 00000000..6ffefedb --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_input.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_INPUT_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_INPUT_H + +#include "frameworks/bridge/common/inspector/inspect_node.h" + +namespace OHOS::Ace::Framework { +class InspectInput : public InspectNode { + DECLARE_ACE_TYPE(InspectInput, InspectNode); + +public: + InspectInput(NodeId nodeId, const std::string& nodeName); + ~InspectInput() override = default; + void PackAttrAndStyle() override; +}; +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_INPUT_H diff --git a/frameworks/bridge/common/inspector/inspect_label.cpp b/frameworks/bridge/common/inspector/inspect_label.cpp new file mode 100644 index 00000000..02b32d25 --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_label.cpp @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/inspector/inspect_label.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +InspectLabel::InspectLabel(NodeId nodeId, const std::string& nodeName) : InspectNode(nodeId, nodeName) { +} + +void InspectLabel::PackAttrAndStyle() +{ + // add for the attrs + attrs_.insert(std::make_pair("disabled", "false")); + attrs_.insert(std::make_pair("focusable", "false")); + + // add for the styles + DeviceType deviceType = SystemProperties::GetDeviceType(); + if (deviceType == DeviceType::PHONE) { + styles_.insert(std::make_pair("color", "#e5000000")); + } else if (deviceType == DeviceType::TV) { + styles_.insert(std::make_pair("color", "#e5ffffff")); + } else if (deviceType == DeviceType::WATCH) { + styles_.insert(std::make_pair("color", "#ffffffff")); + } + styles_.insert(std::make_pair("font-size", "30px")); + styles_.insert(std::make_pair("allow-scale", "true")); + styles_.insert(std::make_pair("letter-spacing", "0px")); + styles_.insert(std::make_pair("font-style", "normal")); + styles_.insert(std::make_pair("font-weight", "normal")); + styles_.insert(std::make_pair("text-decoration", "none")); + styles_.insert(std::make_pair("text-align", "start")); + styles_.insert(std::make_pair("line-height", "0px")); + styles_.insert(std::make_pair("text-overflow", "clip")); + styles_.insert(std::make_pair("font-family", "sans-serif")); + styles_.insert(std::make_pair("font-size-step", "1px")); +} +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/inspector/inspect_label.h b/frameworks/bridge/common/inspector/inspect_label.h new file mode 100644 index 00000000..36866060 --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_label.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_LABEL_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_LABEL_H + +#include "frameworks/bridge/common/inspector/inspect_node.h" + +namespace OHOS::Ace::Framework { +class InspectLabel : public InspectNode { + DECLARE_ACE_TYPE(InspectLabel, InspectNode); + +public: + InspectLabel(NodeId nodeId, const std::string& nodeName); + ~InspectLabel() override = default; + void PackAttrAndStyle() override; +}; +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_LABEL_H diff --git a/frameworks/bridge/common/inspector/inspect_list.cpp b/frameworks/bridge/common/inspector/inspect_list.cpp new file mode 100644 index 00000000..59635c15 --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_list.cpp @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/inspector/inspect_list.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +InspectList::InspectList(NodeId nodeId, const std::string& nodeName) : InspectNode(nodeId, nodeName) {} + +void InspectList::PackAttrAndStyle() +{ + // add for the attrs + attrs_.insert(std::make_pair("scrollpage", "true")); + attrs_.insert(std::make_pair("cachedcount", "0")); + attrs_.insert(std::make_pair("scrollbar", "off")); + attrs_.insert(std::make_pair("scrolleffect", "spring")); + attrs_.insert(std::make_pair("indexer", "false")); + attrs_.insert(std::make_pair("indexermulti", "false")); + attrs_.insert(std::make_pair("indexerbubble", "true")); + attrs_.insert(std::make_pair("divider", "false")); + attrs_.insert(std::make_pair("shapemode", "default")); + attrs_.insert(std::make_pair("itemscale", "true")); + attrs_.insert(std::make_pair("itemopacity", "true")); + attrs_.insert(std::make_pair("itemcenter", "false")); + attrs_.insert(std::make_pair("updateeffect", "false")); + attrs_.insert(std::make_pair("chainanimation", "false")); + attrs_.insert(std::make_pair("scrollvibrate", "true")); + attrs_.insert(std::make_pair("initialindex", "0")); + attrs_.insert(std::make_pair("initialoffset", "0")); + attrs_.insert(std::make_pair("disabled", "false")); + attrs_.insert(std::make_pair("focusable", "true")); + + // add for the styles + styles_.insert(std::make_pair("divider-color", "transparent")); + styles_.insert(std::make_pair("divider-height", "1")); + styles_.insert(std::make_pair("divider-origin", "0")); + styles_.insert(std::make_pair("flex-direction", "column")); + styles_.insert(std::make_pair("columns", "1")); + styles_.insert(std::make_pair("fade-color", "grey")); +} +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/inspector/inspect_list.h b/frameworks/bridge/common/inspector/inspect_list.h new file mode 100644 index 00000000..b9255509 --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_list.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_LIST_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_LIST_H + +#include "frameworks/bridge/common/inspector/inspect_node.h" + +namespace OHOS::Ace::Framework { +class InspectList : public InspectNode { + DECLARE_ACE_TYPE(InspectList, InspectNode); + +public: + InspectList(NodeId nodeId, const std::string& nodeName); + ~InspectList() override = default; + void PackAttrAndStyle() override; +}; +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_LIST_H diff --git a/frameworks/bridge/common/inspector/inspect_list_item.cpp b/frameworks/bridge/common/inspector/inspect_list_item.cpp new file mode 100644 index 00000000..81420152 --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_list_item.cpp @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/inspector/inspect_list_item.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +InspectListItem::InspectListItem(NodeId nodeId, const std::string& nodeName) : InspectNode(nodeId, nodeName) {} + +void InspectListItem::PackAttrAndStyle() +{ + // add for the attrs + attrs_.insert(std::make_pair("type", "default")); + attrs_.insert(std::make_pair("primary", "false")); + attrs_.insert(std::make_pair("sticky", "none")); + attrs_.insert(std::make_pair("stickyradius", "1000px")); + attrs_.insert(std::make_pair("clickeffect", "true")); + attrs_.insert(std::make_pair("disabled", "false")); + attrs_.insert(std::make_pair("focusable", "true")); + + // add for the styles + styles_.insert(std::make_pair("column-span", "1")); +} +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/inspector/inspect_list_item.h b/frameworks/bridge/common/inspector/inspect_list_item.h new file mode 100644 index 00000000..32026c28 --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_list_item.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_LIST_ITEM_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_LIST_ITEM_H + +#include "frameworks/bridge/common/inspector/inspect_node.h" + +namespace OHOS::Ace::Framework { +class InspectListItem : public InspectNode { + DECLARE_ACE_TYPE(InspectListItem, InspectNode); + +public: + InspectListItem(NodeId nodeId, const std::string& nodeName); + ~InspectListItem() override = default; + void PackAttrAndStyle() override; +}; +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_LIST_ITEM_H diff --git a/frameworks/bridge/common/inspector/inspect_list_item_group.cpp b/frameworks/bridge/common/inspector/inspect_list_item_group.cpp new file mode 100644 index 00000000..7954f142 --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_list_item_group.cpp @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/inspector/inspect_list_item_group.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +InspectListItemGroup::InspectListItemGroup(NodeId nodeId, const std::string& nodeName) + : InspectNode(nodeId, nodeName) {} + +void InspectListItemGroup::PackAttrAndStyle() +{ + // add for the attrs + attrs_.insert(std::make_pair("type", "default")); + attrs_.insert(std::make_pair("disabled", "false")); + attrs_.insert(std::make_pair("focusable", "true")); + + // add for the styles + styles_.insert(std::make_pair("flex-direction", "row")); + styles_.insert(std::make_pair("justify-content", "flex-start")); +} +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/inspector/inspect_list_item_group.h b/frameworks/bridge/common/inspector/inspect_list_item_group.h new file mode 100644 index 00000000..28e6517d --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_list_item_group.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_LIST_ITEM_GROUP_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_LIST_ITEM_GROUP_H + +#include "frameworks/bridge/common/inspector/inspect_node.h" + +namespace OHOS::Ace::Framework { +class InspectListItemGroup : public InspectNode { + DECLARE_ACE_TYPE(InspectListItemGroup, InspectNode); + +public: + InspectListItemGroup(NodeId nodeId, const std::string& nodeName); + ~InspectListItemGroup() override = default; + void PackAttrAndStyle() override; +}; +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_LIST_ITEM_GROUP_H diff --git a/frameworks/bridge/common/inspector/inspect_marquee.cpp b/frameworks/bridge/common/inspector/inspect_marquee.cpp new file mode 100644 index 00000000..eb4c05f1 --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_marquee.cpp @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/inspector/inspect_marquee.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +InspectMarquee::InspectMarquee(NodeId nodeId, const std::string& nodeName) : InspectNode(nodeId, nodeName) { +} + +void InspectMarquee::PackAttrAndStyle() +{ + // add for the attrs + attrs_.insert(std::make_pair("scrollamount", "6")); + attrs_.insert(std::make_pair("loop", "-1")); + attrs_.insert(std::make_pair("direction", "left")); + attrs_.insert(std::make_pair("disabled", "false")); + attrs_.insert(std::make_pair("focusable", "false")); + + // add for the styles + DeviceType deviceType = SystemProperties::GetDeviceType(); + if (deviceType == DeviceType::PHONE) { + styles_.insert(std::make_pair("color", "#e5000000")); + } else if (deviceType == DeviceType::TV) { + styles_.insert(std::make_pair("color", "#e5ffffff")); + } else if (deviceType == DeviceType::WATCH) { + styles_.insert(std::make_pair("color", "#ffffffff")); + } + styles_.insert(std::make_pair("font-size", "37.5")); + styles_.insert(std::make_pair("allow-scale", "true")); + styles_.insert(std::make_pair("font-weight", "normal")); + styles_.insert(std::make_pair("font-family", "sans-serif")); +} +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/inspector/inspect_marquee.h b/frameworks/bridge/common/inspector/inspect_marquee.h new file mode 100644 index 00000000..2aa2d31e --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_marquee.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_MARQUEE_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_MARQUEE_H + +#include "frameworks/bridge/common/inspector/inspect_node.h" + +namespace OHOS::Ace::Framework { +class InspectMarquee : public InspectNode { + DECLARE_ACE_TYPE(InspectMarquee, InspectNode); + +public: + InspectMarquee(NodeId nodeId, const std::string& nodeName); + ~InspectMarquee() override = default; + void PackAttrAndStyle() override; +}; +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_MARQUEE_H diff --git a/frameworks/bridge/common/inspector/inspect_menu.cpp b/frameworks/bridge/common/inspector/inspect_menu.cpp new file mode 100644 index 00000000..eb92b6d4 --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_menu.cpp @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/inspector/inspect_menu.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +InspectMenu::InspectMenu(NodeId nodeId, const std::string& nodeName) : InspectNode(nodeId, nodeName) { +} + +void InspectMenu::PackAttrAndStyle() +{ + // add for the attrs + attrs_.insert(std::make_pair("type", "click")); + + // add for the styles + std::unordered_map().swap(styles_); + styles_.clear(); + styles_.insert(std::make_pair("font-size", "30px")); + styles_.insert(std::make_pair("allow-scale", "true")); + styles_.insert(std::make_pair("letter-spacing", "0")); + styles_.insert(std::make_pair("font-style", "normal")); + styles_.insert(std::make_pair("font-weight", "normal")); + styles_.insert(std::make_pair("font-family", "sans-serif")); +} +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/inspector/inspect_menu.h b/frameworks/bridge/common/inspector/inspect_menu.h new file mode 100644 index 00000000..bd2ded51 --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_menu.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_MENU_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_MENU_H + +#include "frameworks/bridge/common/inspector/inspect_node.h" + +namespace OHOS::Ace::Framework { +class InspectMenu : public InspectNode { + DECLARE_ACE_TYPE(InspectMenu, InspectNode); + +public: + InspectMenu(NodeId nodeId, const std::string& nodeName); + ~InspectMenu() override = default; + void PackAttrAndStyle() override; +}; +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_MENU_H diff --git a/frameworks/bridge/common/inspector/inspect_node.cpp b/frameworks/bridge/common/inspector/inspect_node.cpp new file mode 100644 index 00000000..07f101ab --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_node.cpp @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/inspector/inspect_node.h" + +#include +#include + +#include "base/log/ace_trace.h" +#include "core/common/ace_application_info.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +InspectNode::InspectNode(NodeId nodeId, const std::string& nodeName) + : nodeId_(nodeId), tag_(nodeName) +{} + +InspectNode::~InspectNode() +{ + std::unordered_map().swap(attrs_); + attrs_.clear(); + std::unordered_map().swap(styles_); + styles_.clear(); +} + +void InspectNode::PackAttrAndStyle() +{} + +void InspectNode::InitCommonStyles() +{ + styles_.insert(std::make_pair("padding-left", "0")); + styles_.insert(std::make_pair("padding-top", "0")); + styles_.insert(std::make_pair("padding-right", "0")); + styles_.insert(std::make_pair("padding-bottom", "0")); + styles_.insert(std::make_pair("padding-start", "0")); + styles_.insert(std::make_pair("padding-end", "0")); + styles_.insert(std::make_pair("margin-left", "0")); + styles_.insert(std::make_pair("margin-top", "0")); + styles_.insert(std::make_pair("margin-right", "0")); + styles_.insert(std::make_pair("margin-bottom", "0")); + styles_.insert(std::make_pair("margin-start", "0")); + styles_.insert(std::make_pair("margin-end", "0")); + styles_.insert(std::make_pair("border", "0")); + styles_.insert(std::make_pair("border-left-style", "solid")); + styles_.insert(std::make_pair("border-top-style", "solid")); + styles_.insert(std::make_pair("border-right-style", "solid")); + styles_.insert(std::make_pair("border-bottom-style", "solid")); + styles_.insert(std::make_pair("border-left-width", "0")); + styles_.insert(std::make_pair("border-top-width", "0")); + styles_.insert(std::make_pair("border-right-width", "0")); + styles_.insert(std::make_pair("border-bottom-width", "0")); + styles_.insert(std::make_pair("border-left-color", "black")); + styles_.insert(std::make_pair("border-top-color", "black")); + styles_.insert(std::make_pair("border-right-color", "black")); + styles_.insert(std::make_pair("border-bottom-color", "black")); + styles_.insert(std::make_pair("background-size", "auto")); + styles_.insert(std::make_pair("background-repeat", "repeat")); + styles_.insert(std::make_pair("background-position", "0px 0px")); + styles_.insert(std::make_pair("opacity", "1")); + styles_.insert(std::make_pair("display", "flex")); + styles_.insert(std::make_pair("visibility", "visible")); + styles_.insert(std::make_pair("flex-grow", "0")); + styles_.insert(std::make_pair("flex-shrink", "1")); + styles_.insert(std::make_pair("position", "relative")); +} + +void InspectNode::SetAllAttr(std::unique_ptr& jsonNode) +{ + for (auto iter = attrs_.begin(); iter != attrs_.end(); iter++) { + jsonNode->Put(iter->first.c_str(), iter->second.c_str()); + } +} + +void InspectNode::SetAllStyle(std::unique_ptr& jsonNode) +{ + for (auto iter = styles_.begin(); iter != styles_.end(); iter++) { + jsonNode->Put(iter->first.c_str(), iter->second.c_str()); + } +} +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/inspector/inspect_node.h b/frameworks/bridge/common/inspector/inspect_node.h new file mode 100644 index 00000000..e1283bba --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_node.h @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_NODE_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_NODE_H + +#include +#include + +#include "base/json/json_util.h" +#include "base/memory/ace_type.h" +#include "base/utils/device_type.h" +#include "base/utils/macros.h" +#include "base/utils/system_properties.h" +#include "frameworks/bridge/common/dom/dom_type.h" + +namespace OHOS::Ace::Framework { +class InspectNode : public AceType { + DECLARE_ACE_TYPE(InspectNode, AceType); + +public: + InspectNode(NodeId nodeId, const std::string& nodeName); + ~InspectNode() override; + + void SetAllAttr(std::unique_ptr& jsonNode); + void SetAllStyle(std::unique_ptr& jsonNode); + void InitCommonStyles(); + virtual void PackAttrAndStyle(); +protected: + NodeId nodeId_ = -1; + std::string tag_; + std::unordered_map attrs_; + std::unordered_map styles_; +}; +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_NODE_H diff --git a/frameworks/bridge/common/inspector/inspect_option.cpp b/frameworks/bridge/common/inspector/inspect_option.cpp new file mode 100644 index 00000000..43eba3a3 --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_option.cpp @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/inspector/inspect_option.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +InspectOption::InspectOption(NodeId nodeId, const std::string& nodeName) : InspectNode(nodeId, nodeName) { +} + +void InspectOption::PackAttrAndStyle() +{ + // add for the attrs + attrs_.insert(std::make_pair("focusable", "true")); + attrs_.insert(std::make_pair("disabled", "false")); + + // add for the styles + std::unordered_map().swap(styles_); + styles_.clear(); + styles_.insert(std::make_pair("color", "#e6000000")); + styles_.insert(std::make_pair("font-size", "16px")); + styles_.insert(std::make_pair("allow-scale", "true")); + styles_.insert(std::make_pair("font-weight", "normal")); + styles_.insert(std::make_pair("text-decoration", "none")); + styles_.insert(std::make_pair("font-family", "sans-serif")); +} +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/inspector/inspect_option.h b/frameworks/bridge/common/inspector/inspect_option.h new file mode 100644 index 00000000..887a7297 --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_option.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_OPTION_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_OPTION_H + +#include "frameworks/bridge/common/inspector/inspect_node.h" + +namespace OHOS::Ace::Framework { +class InspectOption : public InspectNode { + DECLARE_ACE_TYPE(InspectOption, InspectNode); + +public: + InspectOption(NodeId nodeId, const std::string& nodeName); + ~InspectOption() override = default; + void PackAttrAndStyle() override; +}; +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_OPTION_H diff --git a/frameworks/bridge/common/inspector/inspect_picker.cpp b/frameworks/bridge/common/inspector/inspect_picker.cpp new file mode 100644 index 00000000..f5513a60 --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_picker.cpp @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/inspector/inspect_picker.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +InspectPickerDialog::InspectPickerDialog(NodeId nodeId, const std::string& nodeName) : InspectNode(nodeId, nodeName) { +} + +void InspectPickerDialog::PackAttrAndStyle() +{ + // add for the attrs + attrs_.insert(std::make_pair("disabled", "false")); + attrs_.insert(std::make_pair("focusable", "true")); + // type is text + attrs_.insert(std::make_pair("selected", "0")); + // type is date + attrs_.insert(std::make_pair("start", "1970-1-1")); + attrs_.insert(std::make_pair("end", "2100-12-31")); + attrs_.insert(std::make_pair("lunar", "false")); + attrs_.insert(std::make_pair("lunarswitch", "false")); + // type is time + attrs_.insert(std::make_pair("containsecond", "false")); + attrs_.insert(std::make_pair("hours", "24")); + + // add for the styles + styles_.insert(std::make_pair("text-color", "#e6000000")); + styles_.insert(std::make_pair("font-size", "30px")); + styles_.insert(std::make_pair("allow-scale", "true")); + styles_.insert(std::make_pair("letter-spacing", "0")); + styles_.insert(std::make_pair("font-style", "normal")); + styles_.insert(std::make_pair("font-weight", "normal")); + styles_.insert(std::make_pair("font-family", "sans-serif")); + styles_.insert(std::make_pair("line-height", "0px")); +} +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/inspector/inspect_picker.h b/frameworks/bridge/common/inspector/inspect_picker.h new file mode 100644 index 00000000..802bb57a --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_picker.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_PICKER_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_PICKER_H + +#include "frameworks/bridge/common/inspector/inspect_node.h" + +namespace OHOS::Ace::Framework { +class InspectPickerDialog : public InspectNode { + DECLARE_ACE_TYPE(InspectPickerDialog, InspectNode); + +public: + InspectPickerDialog(NodeId nodeId, const std::string& nodeName); + ~InspectPickerDialog() override = default; + void PackAttrAndStyle() override; +}; +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_PICKER_H diff --git a/frameworks/bridge/common/inspector/inspect_picker_view.cpp b/frameworks/bridge/common/inspector/inspect_picker_view.cpp new file mode 100644 index 00000000..825fe8b6 --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_picker_view.cpp @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/inspector/inspect_picker_view.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +InspectPickerView::InspectPickerView(NodeId nodeId, const std::string& nodeName) : InspectNode(nodeId, nodeName) { +} + +void InspectPickerView::PackAttrAndStyle() +{ + // add for the attrs + attrs_.insert(std::make_pair("type", "text")); + attrs_.insert(std::make_pair("disabled", "false")); + attrs_.insert(std::make_pair("focusable", "true")); + // type is text + attrs_.insert(std::make_pair("selected", "0")); + // type is date + attrs_.insert(std::make_pair("start", "1970-1-1")); + attrs_.insert(std::make_pair("end", "2100-12-31")); + attrs_.insert(std::make_pair("lunar", "false")); + attrs_.insert(std::make_pair("lunarswitch", "false")); + // type is time + attrs_.insert(std::make_pair("containsecond", "false")); + attrs_.insert(std::make_pair("hours", "24")); + + // add for the styles + styles_.insert(std::make_pair("color", "#808080")); + styles_.insert(std::make_pair("font-size", "30px")); + styles_.insert(std::make_pair("selected-color", "#ffffff")); + styles_.insert(std::make_pair("selected-font-size", "38px")); + styles_.insert(std::make_pair("focus-color", "#ffffff")); + styles_.insert(std::make_pair("focus-font-size", "38px")); + styles_.insert(std::make_pair("font-family", "sans-serif")); +} +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/inspector/inspect_picker_view.h b/frameworks/bridge/common/inspector/inspect_picker_view.h new file mode 100644 index 00000000..49ed5e7d --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_picker_view.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_PICKER_VIEW_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_PICKER_VIEW_H + +#include "frameworks/bridge/common/inspector/inspect_node.h" + +namespace OHOS::Ace::Framework { +class InspectPickerView : public InspectNode { + DECLARE_ACE_TYPE(InspectPickerView, InspectNode); + +public: + InspectPickerView(NodeId nodeId, const std::string& nodeName); + ~InspectPickerView() override = default; + void PackAttrAndStyle() override; +}; +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_PICKER_VIEW_H diff --git a/frameworks/bridge/common/inspector/inspect_popup.cpp b/frameworks/bridge/common/inspector/inspect_popup.cpp new file mode 100644 index 00000000..ddfa122a --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_popup.cpp @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/inspector/inspect_popup.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +InspectPopup::InspectPopup(NodeId nodeId, const std::string& nodeName) : InspectNode(nodeId, nodeName) { +} + +void InspectPopup::PackAttrAndStyle() +{ + // add for the attrs + attrs_.insert(std::make_pair("placement", "bottom")); + attrs_.insert(std::make_pair("keepalive", "false")); + attrs_.insert(std::make_pair("clickable", "true")); + attrs_.insert(std::make_pair("arrowoffset", "0")); + attrs_.insert(std::make_pair("disabled", "false")); + + // add for the styles + styles_.insert(std::make_pair("mask-color", "#00000000")); + styles_.erase("flex-grow"); + styles_.erase("flex-shrink"); + styles_.erase("position"); +} +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/inspector/inspect_popup.h b/frameworks/bridge/common/inspector/inspect_popup.h new file mode 100644 index 00000000..f90fe35d --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_popup.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_POPUP_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_POPUP_H + +#include "frameworks/bridge/common/inspector/inspect_node.h" + +namespace OHOS::Ace::Framework { +class InspectPopup : public InspectNode { + DECLARE_ACE_TYPE(InspectPopup, InspectNode); + +public: + InspectPopup(NodeId nodeId, const std::string& nodeName); + ~InspectPopup() override = default; + void PackAttrAndStyle() override; +}; +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_POPUP_H diff --git a/frameworks/bridge/common/inspector/inspect_progress.cpp b/frameworks/bridge/common/inspector/inspect_progress.cpp new file mode 100644 index 00000000..20eda568 --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_progress.cpp @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/inspector/inspect_progress.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +InspectProgress::InspectProgress(NodeId nodeId, const std::string& nodeName) : InspectNode(nodeId, nodeName) { +} + +void InspectProgress::PackAttrAndStyle() +{ + // add for the attrs + attrs_.insert(std::make_pair("type", "horizontal")); + attrs_.insert(std::make_pair("focusable", "true")); + attrs_.insert(std::make_pair("percent", "0")); + attrs_.insert(std::make_pair("secondarypercent", "0")); + attrs_.insert(std::make_pair("clockwise", "true")); + + // add for the styles + DeviceType deviceType = SystemProperties::GetDeviceType(); + if (deviceType == DeviceType::PHONE) { + styles_.insert(std::make_pair("color", "#ff007dff")); + } else if (deviceType == DeviceType::TV) { + styles_.insert(std::make_pair("color", "#e5ffffff")); + } else if (deviceType == DeviceType::WATCH) { + styles_.insert(std::make_pair("color", "#ff45a5ff")); + } + styles_.insert(std::make_pair("stroke-width", "4px")); + styles_.erase("background-size"); + styles_.erase("background-repeat"); + styles_.erase("background-position"); +} +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/inspector/inspect_progress.h b/frameworks/bridge/common/inspector/inspect_progress.h new file mode 100644 index 00000000..17335749 --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_progress.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_PROGRESS_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_PROGRESS_H + +#include "frameworks/bridge/common/inspector/inspect_node.h" + +namespace OHOS::Ace::Framework { +class InspectProgress : public InspectNode { + DECLARE_ACE_TYPE(InspectProgress, InspectNode); + +public: + InspectProgress(NodeId nodeId, const std::string& nodeName); + ~InspectProgress() override = default; + void PackAttrAndStyle() override; +}; +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_PROGRESS_H diff --git a/frameworks/bridge/common/inspector/inspect_rating.cpp b/frameworks/bridge/common/inspector/inspect_rating.cpp new file mode 100644 index 00000000..6cc39d16 --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_rating.cpp @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/inspector/inspect_rating.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +InspectRating::InspectRating(NodeId nodeId, const std::string& nodeName) : InspectNode(nodeId, nodeName) { +} + +void InspectRating::PackAttrAndStyle() +{ + // add for the attrs + attrs_.insert(std::make_pair("numstars", "5")); + attrs_.insert(std::make_pair("rating", "0")); + attrs_.insert(std::make_pair("stepsize", "0.5")); + attrs_.insert(std::make_pair("indicator", "false")); + attrs_.insert(std::make_pair("disabled", "false")); + attrs_.insert(std::make_pair("focusable", "true")); + + // add for the styles + DeviceType deviceType = SystemProperties::GetDeviceType(); + if (deviceType == DeviceType::PHONE) { + styles_.insert(std::make_pair("width", "120px")); + styles_.insert(std::make_pair("height", "24px")); + } else if (deviceType == DeviceType::TV) { + styles_.insert(std::make_pair("width", "360px")); + styles_.insert(std::make_pair("height", "72px")); + } + styles_.insert(std::make_pair("rtl-flip", "true")); +} +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/inspector/inspect_rating.h b/frameworks/bridge/common/inspector/inspect_rating.h new file mode 100644 index 00000000..4032c3ee --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_rating.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_RATING_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_RATING_H + +#include "frameworks/bridge/common/inspector/inspect_node.h" + +namespace OHOS::Ace::Framework { +class InspectRating : public InspectNode { + DECLARE_ACE_TYPE(InspectRating, InspectNode); + +public: + InspectRating(NodeId nodeId, const std::string& nodeName); + ~InspectRating() override = default; + void PackAttrAndStyle() override; +}; +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_RATING_H diff --git a/frameworks/bridge/common/inspector/inspect_refresh.cpp b/frameworks/bridge/common/inspector/inspect_refresh.cpp new file mode 100644 index 00000000..a6c420db --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_refresh.cpp @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/inspector/inspect_refresh.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +InspectRefresh::InspectRefresh(NodeId nodeId, const std::string& nodeName) : InspectNode(nodeId, nodeName) { +} + +void InspectRefresh::PackAttrAndStyle() +{ + // add for the attrs + attrs_.insert(std::make_pair("refreshing", "false")); + attrs_.insert(std::make_pair("type", "auto")); + attrs_.insert(std::make_pair("lasttime", "false")); + DeviceType deviceType = SystemProperties::GetDeviceType(); + if (deviceType == DeviceType::PHONE) { + attrs_.insert(std::make_pair("friction", "42")); + } else if (deviceType == DeviceType::WATCH) { + styles_.insert(std::make_pair("friction", "62")); + } + attrs_.insert(std::make_pair("disabled", "false")); + attrs_.insert(std::make_pair("focusable", "true")); + + // add for the styles + // clear all the common styles for refresh + std::unordered_map().swap(styles_); + styles_.clear(); + if (deviceType == DeviceType::PHONE) { + styles_.insert(std::make_pair("background-color", "white")); + styles_.insert(std::make_pair("progress-color", "black")); + } else { + styles_.insert(std::make_pair("background-color", "black")); + styles_.insert(std::make_pair("progress-color", "white")); + } + styles_.insert(std::make_pair("min-width", "0")); + styles_.insert(std::make_pair("min-height", "0")); + styles_.insert(std::make_pair("box-shadow", "0")); +} +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/inspector/inspect_refresh.h b/frameworks/bridge/common/inspector/inspect_refresh.h new file mode 100644 index 00000000..2f577e6e --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_refresh.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_REFRESH_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_REFRESH_H + +#include "frameworks/bridge/common/inspector/inspect_node.h" + +namespace OHOS::Ace::Framework { +class InspectRefresh : public InspectNode { + DECLARE_ACE_TYPE(InspectRefresh, InspectNode); + +public: + InspectRefresh(NodeId nodeId, const std::string& nodeName); + ~InspectRefresh() override = default; + void PackAttrAndStyle() override; +}; +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_REFRESH_H diff --git a/frameworks/bridge/common/inspector/inspect_search.cpp b/frameworks/bridge/common/inspector/inspect_search.cpp new file mode 100644 index 00000000..a0beb8b9 --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_search.cpp @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/inspector/inspect_search.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +InspectSearch::InspectSearch(NodeId nodeId, const std::string& nodeName) : InspectNode(nodeId, nodeName) { +} + +void InspectSearch::PackAttrAndStyle() +{ + // add for the attrs + attrs_.insert(std::make_pair("disabled", "false")); + attrs_.insert(std::make_pair("focusable", "true")); + + // add for the styles + styles_.insert(std::make_pair("allow-scale", "true")); + styles_.insert(std::make_pair("font-weight", "normal")); + styles_.insert(std::make_pair("font-family", "sans-serif")); +} +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/inspector/inspect_search.h b/frameworks/bridge/common/inspector/inspect_search.h new file mode 100644 index 00000000..ea12eee1 --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_search.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_SEARCH_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_SEARCH_H + +#include "frameworks/bridge/common/inspector/inspect_node.h" + +namespace OHOS::Ace::Framework { +class InspectSearch : public InspectNode { + DECLARE_ACE_TYPE(InspectSearch, InspectNode); + +public: + InspectSearch(NodeId nodeId, const std::string& nodeName); + ~InspectSearch() override = default; + void PackAttrAndStyle() override; +}; +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_SEARCH_H diff --git a/frameworks/bridge/common/inspector/inspect_select.cpp b/frameworks/bridge/common/inspector/inspect_select.cpp new file mode 100644 index 00000000..14301f59 --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_select.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/inspector/inspect_select.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +InspectSelect::InspectSelect(NodeId nodeId, const std::string& nodeName) : InspectNode(nodeId, nodeName) { +} + +void InspectSelect::PackAttrAndStyle() +{ + // add for the attrs + attrs_.insert(std::make_pair("disabled", "false")); + attrs_.insert(std::make_pair("focusable", "true")); + + // add for the styles + styles_.insert(std::make_pair("font-family", "sans-serif")); +} +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/inspector/inspect_select.h b/frameworks/bridge/common/inspector/inspect_select.h new file mode 100644 index 00000000..45314058 --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_select.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_SELECT_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_SELECT_H + +#include "frameworks/bridge/common/inspector/inspect_node.h" + +namespace OHOS::Ace::Framework { +class InspectSelect : public InspectNode { + DECLARE_ACE_TYPE(InspectSelect, InspectNode); + +public: + InspectSelect(NodeId nodeId, const std::string& nodeName); + ~InspectSelect() override = default; + void PackAttrAndStyle() override; +}; +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_SELECT_H diff --git a/frameworks/bridge/common/inspector/inspect_slider.cpp b/frameworks/bridge/common/inspector/inspect_slider.cpp new file mode 100644 index 00000000..107edb4d --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_slider.cpp @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/inspector/inspect_slider.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +InspectSlider::InspectSlider(NodeId nodeId, const std::string& nodeName) : InspectNode(nodeId, nodeName) { +} + +void InspectSlider::PackAttrAndStyle() +{ + // add for the attrs + attrs_.insert(std::make_pair("min", "0")); + attrs_.insert(std::make_pair("max", "100")); + attrs_.insert(std::make_pair("step", "1")); + attrs_.insert(std::make_pair("value", "0")); + attrs_.insert(std::make_pair("type", "continuous")); + attrs_.insert(std::make_pair("mode", "outset")); + attrs_.insert(std::make_pair("showsteps", "false")); + attrs_.insert(std::make_pair("showtips", "false")); + attrs_.insert(std::make_pair("disabled", "false")); + attrs_.insert(std::make_pair("focusable", "true")); + + // add for the styles + DeviceType deviceType = SystemProperties::GetDeviceType(); + if (deviceType == DeviceType::PHONE) { + styles_.insert(std::make_pair("color", "#19000000")); + styles_.insert(std::make_pair("selected-color", "#ff007dff")); + } else if (deviceType == DeviceType::TV) { + styles_.insert(std::make_pair("color", "#33ffffff")); + styles_.insert(std::make_pair("selected-color", "#ff0d9ffb")); + } else if (deviceType == DeviceType::WATCH) { + styles_.insert(std::make_pair("color", "#26ffffff")); + styles_.insert(std::make_pair("selected-color", "#ff007dff")); + } + styles_.insert(std::make_pair("block-color", "#ffffff")); +} +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/inspector/inspect_slider.h b/frameworks/bridge/common/inspector/inspect_slider.h new file mode 100644 index 00000000..9bf7c892 --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_slider.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_SLIDER_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_SLIDER_H + +#include "frameworks/bridge/common/inspector/inspect_node.h" + +namespace OHOS::Ace::Framework { +class InspectSlider : public InspectNode { + DECLARE_ACE_TYPE(InspectSlider, InspectNode); + +public: + InspectSlider(NodeId nodeId, const std::string& nodeName); + ~InspectSlider() override = default; + void PackAttrAndStyle() override; +}; +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_SLIDER_H diff --git a/frameworks/bridge/common/inspector/inspect_span.cpp b/frameworks/bridge/common/inspector/inspect_span.cpp new file mode 100644 index 00000000..701fe81f --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_span.cpp @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/inspector/inspect_span.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +InspectSpan::InspectSpan(NodeId nodeId, const std::string& nodeName) : InspectNode(nodeId, nodeName) { +} + +void InspectSpan::PackAttrAndStyle() +{ + // no default attrs for span + // add for the styles + std::unordered_map().swap(styles_); + styles_.clear(); + styles_.insert(std::make_pair("font-size", "30px")); + styles_.insert(std::make_pair("allow-scale", "true")); + styles_.insert(std::make_pair("font-style", "normal")); + styles_.insert(std::make_pair("font-weight", "normal")); + styles_.insert(std::make_pair("text-decoration", "none")); + styles_.insert(std::make_pair("font-family", "sans-serif")); + styles_.insert(std::make_pair("disabled", "false")); + styles_.insert(std::make_pair("focusable", "false")); +} +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/inspector/inspect_span.h b/frameworks/bridge/common/inspector/inspect_span.h new file mode 100644 index 00000000..99858a04 --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_span.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_SPAN_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_SPAN_H + +#include "frameworks/bridge/common/inspector/inspect_node.h" + +namespace OHOS::Ace::Framework { +class InspectSpan : public InspectNode { + DECLARE_ACE_TYPE(InspectSpan, InspectNode); + +public: + InspectSpan(NodeId nodeId, const std::string& nodeName); + ~InspectSpan() override = default; + void PackAttrAndStyle() override; +}; +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_SPAN_H diff --git a/frameworks/bridge/common/inspector/inspect_stack.cpp b/frameworks/bridge/common/inspector/inspect_stack.cpp new file mode 100644 index 00000000..61cf99ec --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_stack.cpp @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/inspector/inspect_stack.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +InspectStack::InspectStack(NodeId nodeId, const std::string& nodeName) : InspectNode(nodeId, nodeName) {} + +void InspectStack::PackAttrAndStyle() +{ + // add for the attrs + attrs_.insert(std::make_pair("disabled", "false")); + attrs_.insert(std::make_pair("focusable", "true")); + + // only the common styles +} +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/inspector/inspect_stack.h b/frameworks/bridge/common/inspector/inspect_stack.h new file mode 100644 index 00000000..a4e88d72 --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_stack.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_STACK_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_STACK_H + +#include "frameworks/bridge/common/inspector/inspect_node.h" + +namespace OHOS::Ace::Framework { +class InspectStack : public InspectNode { + DECLARE_ACE_TYPE(InspectStack, InspectNode); + +public: + InspectStack(NodeId nodeId, const std::string& nodeName); + ~InspectStack() override = default; + void PackAttrAndStyle() override; +}; +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_STACK_H diff --git a/frameworks/bridge/common/inspector/inspect_swiper.cpp b/frameworks/bridge/common/inspector/inspect_swiper.cpp new file mode 100644 index 00000000..3541a0ef --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_swiper.cpp @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/inspector/inspect_swiper.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +InspectSwiper::InspectSwiper(NodeId nodeId, const std::string& nodeName) : InspectNode(nodeId, nodeName) { +} + +void InspectSwiper::PackAttrAndStyle() +{ + // add for the attrs + attrs_.insert(std::make_pair("index", "0")); + attrs_.insert(std::make_pair("autoplay", "false")); + attrs_.insert(std::make_pair("interval", "3000")); + attrs_.insert(std::make_pair("indicator", "true")); + attrs_.insert(std::make_pair("digital", "false")); + attrs_.insert(std::make_pair("indicatormask", "false")); + attrs_.insert(std::make_pair("indicatordisabled", "false")); + attrs_.insert(std::make_pair("loop", "true")); + attrs_.insert(std::make_pair("vertical", "false")); + attrs_.insert(std::make_pair("disabled", "false")); + attrs_.insert(std::make_pair("focusable", "true")); + + // add for the styles + DeviceType deviceType = SystemProperties::GetDeviceType(); + if (deviceType == DeviceType::PHONE) { + styles_.insert(std::make_pair("indicator-selected-color", "#ff007dff")); + } else if (deviceType == DeviceType::TV || deviceType == DeviceType::WATCH) { + styles_.insert(std::make_pair("indicator-selected-color", "#ffffffff")); + } + styles_.insert(std::make_pair("indicator-size", "4px")); +} +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/inspector/inspect_swiper.h b/frameworks/bridge/common/inspector/inspect_swiper.h new file mode 100644 index 00000000..9e49df4e --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_swiper.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_SWIPER_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_SWIPER_H + +#include "frameworks/bridge/common/inspector/inspect_node.h" + +namespace OHOS::Ace::Framework { +class InspectSwiper : public InspectNode { + DECLARE_ACE_TYPE(InspectSwiper, InspectNode); + +public: + InspectSwiper(NodeId nodeId, const std::string& nodeName); + ~InspectSwiper() override = default; + void PackAttrAndStyle() override; +}; +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_SWIPER_H diff --git a/frameworks/bridge/common/inspector/inspect_switch.cpp b/frameworks/bridge/common/inspector/inspect_switch.cpp new file mode 100644 index 00000000..019cd702 --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_switch.cpp @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/inspector/inspect_switch.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +InspectSwitch::InspectSwitch(NodeId nodeId, const std::string& nodeName) : InspectNode(nodeId, nodeName) { +} + +void InspectSwitch::PackAttrAndStyle() +{ + // add for the attrs + attrs_.insert(std::make_pair("checked", "false")); + attrs_.insert(std::make_pair("showtext", "false")); + attrs_.insert(std::make_pair("texton", "On")); + attrs_.insert(std::make_pair("textoff", "Off")); + attrs_.insert(std::make_pair("disabled", "false")); + attrs_.insert(std::make_pair("focusable", "true")); + + // add for the styles + styles_.insert(std::make_pair("texton-color", "#000000")); + styles_.insert(std::make_pair("textoff-color", "#000000")); + styles_.insert(std::make_pair("text-padding", "0px")); + styles_.insert(std::make_pair("allow-scale", "true")); + styles_.insert(std::make_pair("font-style", "normal")); + styles_.insert(std::make_pair("font-weight", "normal")); + styles_.insert(std::make_pair("font-family", "sans-serif")); +} +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/inspector/inspect_switch.h b/frameworks/bridge/common/inspector/inspect_switch.h new file mode 100644 index 00000000..d022f304 --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_switch.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_SWITCH_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_SWITCH_H + +#include "frameworks/bridge/common/inspector/inspect_node.h" + +namespace OHOS::Ace::Framework { +class InspectSwitch : public InspectNode { + DECLARE_ACE_TYPE(InspectSwitch, InspectNode); + +public: + InspectSwitch(NodeId nodeId, const std::string& nodeName); + ~InspectSwitch() override = default; + void PackAttrAndStyle() override; +}; +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_SWITCH_H diff --git a/frameworks/bridge/common/inspector/inspect_tab_bar.cpp b/frameworks/bridge/common/inspector/inspect_tab_bar.cpp new file mode 100644 index 00000000..574f047c --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_tab_bar.cpp @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/inspector/inspect_tab_bar.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +InspectTabBar::InspectTabBar(NodeId nodeId, const std::string& nodeName) : InspectNode(nodeId, nodeName) { +} + +void InspectTabBar::PackAttrAndStyle() +{ + // add for the attrs + attrs_.insert(std::make_pair("mode", "scrollable")); + attrs_.insert(std::make_pair("disabled", "false")); + attrs_.insert(std::make_pair("focusable", "true")); + + // add for the styles + DeviceType deviceType = SystemProperties::GetDeviceType(); + if (deviceType == DeviceType::PHONE) { + styles_.insert(std::make_pair("height", "100px")); + } else if (deviceType == DeviceType::TV) { + styles_.insert(std::make_pair("height", "60px")); + } +} +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/inspector/inspect_tab_bar.h b/frameworks/bridge/common/inspector/inspect_tab_bar.h new file mode 100644 index 00000000..4c40c00e --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_tab_bar.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_TAB_BAR_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_TAB_BAR_H + +#include "frameworks/bridge/common/inspector/inspect_node.h" + +namespace OHOS::Ace::Framework { +class InspectTabBar : public InspectNode { + DECLARE_ACE_TYPE(InspectTabBar, InspectNode); + +public: + InspectTabBar(NodeId nodeId, const std::string& nodeName); + ~InspectTabBar() override = default; + void PackAttrAndStyle() override; +}; +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_TAB_BAR_H diff --git a/frameworks/bridge/common/inspector/inspect_tab_content.cpp b/frameworks/bridge/common/inspector/inspect_tab_content.cpp new file mode 100644 index 00000000..c4d5d531 --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_tab_content.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/inspector/inspect_tab_content.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +InspectTabContent::InspectTabContent(NodeId nodeId, const std::string& nodeName) : InspectNode(nodeId, nodeName) { +} + +void InspectTabContent::PackAttrAndStyle() +{ + // add for the attrs + attrs_.insert(std::make_pair("scrollable", "true")); + attrs_.insert(std::make_pair("disabled", "false")); + attrs_.insert(std::make_pair("focusable", "true")); + + // only the common styles +} +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/inspector/inspect_tab_content.h b/frameworks/bridge/common/inspector/inspect_tab_content.h new file mode 100644 index 00000000..a99631d9 --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_tab_content.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_TAB_CONTENT_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_TAB_CONTENT_H + +#include "frameworks/bridge/common/inspector/inspect_node.h" + +namespace OHOS::Ace::Framework { +class InspectTabContent : public InspectNode { + DECLARE_ACE_TYPE(InspectTabContent, InspectNode); + +public: + InspectTabContent(NodeId nodeId, const std::string& nodeName); + ~InspectTabContent() override = default; + void PackAttrAndStyle() override; +}; +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_TAB_CONTENT_H diff --git a/frameworks/bridge/common/inspector/inspect_tabs.cpp b/frameworks/bridge/common/inspector/inspect_tabs.cpp new file mode 100644 index 00000000..77e4772d --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_tabs.cpp @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/inspector/inspect_tabs.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +InspectTabs::InspectTabs(NodeId nodeId, const std::string& nodeName) : InspectNode(nodeId, nodeName) { +} + +void InspectTabs::PackAttrAndStyle() +{ + // add for the attrs + attrs_.insert(std::make_pair("index", "0")); + attrs_.insert(std::make_pair("vertical", "false")); + attrs_.insert(std::make_pair("disabled", "false")); + attrs_.insert(std::make_pair("focusable", "true")); + + // only the common styles +} +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/inspector/inspect_tabs.h b/frameworks/bridge/common/inspector/inspect_tabs.h new file mode 100644 index 00000000..5fc3f46f --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_tabs.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_TABS_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_TABS_H + +#include "frameworks/bridge/common/inspector/inspect_node.h" + +namespace OHOS::Ace::Framework { +class InspectTabs : public InspectNode { + DECLARE_ACE_TYPE(InspectTabs, InspectNode); + +public: + InspectTabs(NodeId nodeId, const std::string& nodeName); + ~InspectTabs() override = default; + void PackAttrAndStyle() override; +}; +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_TABS_H diff --git a/frameworks/bridge/common/inspector/inspect_text.cpp b/frameworks/bridge/common/inspector/inspect_text.cpp new file mode 100644 index 00000000..d5bd5a09 --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_text.cpp @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/inspector/inspect_text.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +InspectText::InspectText(NodeId nodeId, const std::string& nodeName) : InspectNode(nodeId, nodeName) {} + +void InspectText::PackAttrAndStyle() +{ + // add for the attrs + attrs_.insert(std::make_pair("disabled", "false")); + attrs_.insert(std::make_pair("focusable", "false")); + + // add for the styles + DeviceType deviceType = SystemProperties::GetDeviceType(); + if (deviceType == DeviceType::PHONE) { + styles_.insert(std::make_pair("color", "#e5000000")); + } else if (deviceType == DeviceType::TV) { + styles_.insert(std::make_pair("color", "#e5ffffff")); + } else if (deviceType == DeviceType::WATCH) { + styles_.insert(std::make_pair("color", "#ffffffff")); + } + styles_.insert(std::make_pair("font-size", "30px")); + styles_.insert(std::make_pair("allow-scale", "true")); + styles_.insert(std::make_pair("letter-spacing", "0px")); + styles_.insert(std::make_pair("font-style", "normal")); + styles_.insert(std::make_pair("font-weight", "normal")); + styles_.insert(std::make_pair("text-decoration", "none")); + styles_.insert(std::make_pair("text-align", "start")); + styles_.insert(std::make_pair("line-height", "0px")); + styles_.insert(std::make_pair("text-overflow", "clip")); + styles_.insert(std::make_pair("font-family", "sans-serif")); + styles_.insert(std::make_pair("font-size-step", "1px")); +} +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/inspector/inspect_text.h b/frameworks/bridge/common/inspector/inspect_text.h new file mode 100644 index 00000000..a3a5c706 --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_text.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_TEXT_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_TEXT_H + +#include "frameworks/bridge/common/inspector/inspect_node.h" + +namespace OHOS::Ace::Framework { +class InspectText : public InspectNode { + DECLARE_ACE_TYPE(InspectText, InspectNode); + +public: + InspectText(NodeId nodeId, const std::string& nodeName); + ~InspectText() override = default; + void PackAttrAndStyle() override; +}; +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_TEXT_H diff --git a/frameworks/bridge/common/inspector/inspect_textarea.cpp b/frameworks/bridge/common/inspector/inspect_textarea.cpp new file mode 100644 index 00000000..ac5bb93d --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_textarea.cpp @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/inspector/inspect_textarea.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +InspectTextArea::InspectTextArea(NodeId nodeId, const std::string& nodeName) : InspectNode(nodeId, nodeName) {} + +void InspectTextArea::PackAttrAndStyle() +{ + // add for the attrs + attrs_.insert(std::make_pair("extend", "false")); + attrs_.insert(std::make_pair("showcounter", "false")); + attrs_.insert(std::make_pair("disabled", "false")); + attrs_.insert(std::make_pair("focusable", "true")); + + // add for the styles + DeviceType deviceType = SystemProperties::GetDeviceType(); + if (deviceType == DeviceType::PHONE) { + styles_.insert(std::make_pair("color", "#e6000000")); + styles_.insert(std::make_pair("font-size", "16px")); + styles_.insert(std::make_pair("placeholder-color", "#99000000")); + } else if (deviceType == DeviceType::TV) { + styles_.insert(std::make_pair("color", "#e6ffffff")); + styles_.insert(std::make_pair("font-size", "18px")); + styles_.insert(std::make_pair("placeholder-color", "#99ffffff")); + } + styles_.insert(std::make_pair("allow-scale", "true")); + styles_.insert(std::make_pair("font-weight", "normal")); + styles_.insert(std::make_pair("font-family", "sans-serif")); +} +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/inspector/inspect_textarea.h b/frameworks/bridge/common/inspector/inspect_textarea.h new file mode 100644 index 00000000..1e27ebe9 --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_textarea.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_TEXTAREA_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_TEXTAREA_H + +#include "frameworks/bridge/common/inspector/inspect_node.h" + +namespace OHOS::Ace::Framework { +class InspectTextArea : public InspectNode { + DECLARE_ACE_TYPE(InspectTextArea, InspectNode); + +public: + InspectTextArea(NodeId nodeId, const std::string& nodeName); + ~InspectTextArea() override = default; + void PackAttrAndStyle() override; +}; +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_TEXTAREA_H diff --git a/frameworks/bridge/common/inspector/inspect_video.cpp b/frameworks/bridge/common/inspector/inspect_video.cpp new file mode 100644 index 00000000..3f2a8112 --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_video.cpp @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/inspector/inspect_video.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +InspectVideo::InspectVideo(NodeId nodeId, const std::string& nodeName) : InspectNode(nodeId, nodeName) { +} + +void InspectVideo::PackAttrAndStyle() +{ + // add for the attrs + attrs_.insert(std::make_pair("muted", "false")); + attrs_.insert(std::make_pair("autoplay", "false")); + attrs_.insert(std::make_pair("controls", "true")); + attrs_.insert(std::make_pair("disabled", "false")); + attrs_.insert(std::make_pair("focusable", "true")); + + // add for the styles + styles_.insert(std::make_pair("object-fit", "contain")); +} +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/inspector/inspect_video.h b/frameworks/bridge/common/inspector/inspect_video.h new file mode 100644 index 00000000..52af2b9f --- /dev/null +++ b/frameworks/bridge/common/inspector/inspect_video.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_VIDEO_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_VIDEO_H + +#include "frameworks/bridge/common/inspector/inspect_node.h" + +namespace OHOS::Ace::Framework { +class InspectVideo : public InspectNode { + DECLARE_ACE_TYPE(InspectVideo, InspectNode); + +public: + InspectVideo(NodeId nodeId, const std::string& nodeName); + ~InspectVideo() override = default; + void PackAttrAndStyle() override; +}; +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECT_VIDEO_H diff --git a/frameworks/bridge/common/inspector/inspector_client.cpp b/frameworks/bridge/common/inspector/inspector_client.cpp new file mode 100644 index 00000000..2b53c7d0 --- /dev/null +++ b/frameworks/bridge/common/inspector/inspector_client.cpp @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/inspector/inspector_client.h" + +namespace OHOS::Ace::Framework { + +InspectorClient& InspectorClient::GetInstance() +{ + static InspectorClient instance; + return instance; +} + +void InspectorClient::RegisterJSONTreeCallback(AssembleJSONTreeCallback&& callback) +{ + assembleJSONTreeCallback_ = callback; +} + +void InspectorClient::RegisterDefaultJSONTreeCallback(AssembleDefaultJSONTreeCallback&& callback) +{ + assembleDefaultJSONTreeCallback_ = callback; +} + +bool InspectorClient::AssembleJSONTreeStr(std::string& jsonTreeStr) +{ + if (assembleJSONTreeCallback_) { + return assembleJSONTreeCallback_(jsonTreeStr); + } else { + return false; + } +} + +bool InspectorClient::AssembleDefaultJSONTreeStr(std::string &jsonTreeStr) +{ + if (assembleDefaultJSONTreeCallback_) { + return assembleDefaultJSONTreeCallback_(jsonTreeStr); + } else { + return false; + } +} +} // namespace OHOS::Ace diff --git a/frameworks/bridge/common/inspector/inspector_client.h b/frameworks/bridge/common/inspector/inspector_client.h new file mode 100644 index 00000000..8e675cdb --- /dev/null +++ b/frameworks/bridge/common/inspector/inspector_client.h @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECTOR_CLIENT_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECTOR_CLIENT_H + +#include +#include +#include +#include + +namespace OHOS::Ace::Framework { + +using AssembleJSONTreeCallback = std::function; +using AssembleDefaultJSONTreeCallback = std::function; + +class InspectorClient { +public: + InspectorClient &operator = (const InspectorClient &) = delete; + InspectorClient(const InspectorClient &) = delete; + ~InspectorClient() = default; + + static InspectorClient &GetInstance(); + void RegisterJSONTreeCallback(AssembleJSONTreeCallback &&callback); + void RegisterDefaultJSONTreeCallback(AssembleDefaultJSONTreeCallback &&callback); + bool AssembleJSONTreeStr(std::string &jsonTreeStr); + bool AssembleDefaultJSONTreeStr(std::string &jsonTreeStr); + +private: + InspectorClient() = default; + AssembleJSONTreeCallback assembleJSONTreeCallback_; + AssembleDefaultJSONTreeCallback assembleDefaultJSONTreeCallback_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_INSPECTOR_CLIENT_H diff --git a/frameworks/bridge/common/inspector/js_inspector_manager.cpp b/frameworks/bridge/common/inspector/js_inspector_manager.cpp new file mode 100644 index 00000000..fd7b7ab0 --- /dev/null +++ b/frameworks/bridge/common/inspector/js_inspector_manager.cpp @@ -0,0 +1,593 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/inspector/js_inspector_manager.h" + +#include +#include +#include +#include +#include + +#include "frameworks/bridge/common/inspector/inspect_button.h" +#include "frameworks/bridge/common/inspector/inspect_canvas.h" +#include "frameworks/bridge/common/inspector/inspect_chart.h" +#include "frameworks/bridge/common/inspector/inspect_dialog.h" +#include "frameworks/bridge/common/inspector/inspect_div.h" +#include "frameworks/bridge/common/inspector/inspect_divider.h" +#include "frameworks/bridge/common/inspector/inspect_image.h" +#include "frameworks/bridge/common/inspector/inspect_image_animator.h" +#include "frameworks/bridge/common/inspector/inspect_input.h" +#include "frameworks/bridge/common/inspector/inspect_label.h" +#include "frameworks/bridge/common/inspector/inspect_list.h" +#include "frameworks/bridge/common/inspector/inspect_list_item.h" +#include "frameworks/bridge/common/inspector/inspect_list_item_group.h" +#include "frameworks/bridge/common/inspector/inspect_marquee.h" +#include "frameworks/bridge/common/inspector/inspect_menu.h" +#include "frameworks/bridge/common/inspector/inspect_option.h" +#include "frameworks/bridge/common/inspector/inspect_picker.h" +#include "frameworks/bridge/common/inspector/inspect_picker_view.h" +#include "frameworks/bridge/common/inspector/inspect_popup.h" +#include "frameworks/bridge/common/inspector/inspect_progress.h" +#include "frameworks/bridge/common/inspector/inspect_rating.h" +#include "frameworks/bridge/common/inspector/inspect_refresh.h" +#include "frameworks/bridge/common/inspector/inspect_search.h" +#include "frameworks/bridge/common/inspector/inspect_select.h" +#include "frameworks/bridge/common/inspector/inspect_slider.h" +#include "frameworks/bridge/common/inspector/inspect_span.h" +#include "frameworks/bridge/common/inspector/inspect_stack.h" +#include "frameworks/bridge/common/inspector/inspect_swiper.h" +#include "frameworks/bridge/common/inspector/inspect_switch.h" +#include "frameworks/bridge/common/inspector/inspect_tab_bar.h" +#include "frameworks/bridge/common/inspector/inspect_tab_content.h" +#include "frameworks/bridge/common/inspector/inspect_tabs.h" +#include "frameworks/bridge/common/inspector/inspect_text.h" +#include "frameworks/bridge/common/inspector/inspect_textarea.h" +#include "frameworks/bridge/common/inspector/inspect_video.h" +#include "frameworks/bridge/common/inspector/inspector_client.h" + +namespace OHOS::Ace::Framework { +namespace { + +const char BORDER_BOTTOM[] = "borderBottom"; +const char BORDER_LEFT[] = "borderLeft"; +const char BORDER_RIGHT[] = "borderRight"; +const char BORDER_TOP[] = "borderTop"; +const char SCALE_DOWN[] = "scaleDown"; +const char PROPERTY_ALIGN_CONTENT[] = "align-content"; +const char PROPERTY_ALIGN_ITEMS[] = "align-items"; +const char PROPERTY_ALLOW_SCALE[] = "allow-scale"; +const char PROPERTY_BACKGROUND_COLOR[] = "background-color"; +const char PROPERTY_BACKGROUND_IMAGE[] = "background-image"; +const char PROPERTY_BACKGROUND_POSITION[] = "background-position"; +const char PROPERTY_BACKGROUND_REPEAT[] = "background-repeat"; +const char PROPERTY_BACKGROUND_SIZE[] = "background-size"; +const char PROPERTY_BLOCK_COLOR[] = "block-color"; +const char PROPERTY_BORDER_BOTTOM[] = "border-bottom"; +const char PROPERTY_BORDER_BOTTOM_COLOR[] = "border-bottom-color"; +const char PROPERTY_BORDER_BOTTOM_LEFT_RADIUS[] = "border-bottom-left-radius"; +const char PROPERTY_BORDER_BOTTOM_RIGHT_RADIUS[] = "border-bottom-right-radius"; +const char PROPERTY_BORDER_BOTTOM_STYLE[] = "border-bottom-style"; +const char PROPERTY_BORDER_BOTTOM_WIDTH[] = "border-bottom-width"; +const char PROPERTY_BORDER_COLOR[] = "border-color"; +const char PROPERTY_BORDER_LEFT[] = "border-left"; +const char PROPERTY_BORDER_LEFT_COLOR[] = "border-left-color"; +const char PROPERTY_BORDER_LEFT_STYLE[] = "border-left-style"; +const char PROPERTY_BORDER_LEFT_WIDTH[] = "border-left-width"; +const char PROPERTY_BORDER_RADIUS[] = "border-radius"; +const char PROPERTY_BORDER_RIGHT[] = "border-right"; +const char PROPERTY_BORDER_RIGHT_COLOR[] = "border-right-color"; +const char PROPERTY_BORDER_RIGHT_STYLE[] = "border-right-style"; +const char PROPERTY_BORDER_RIGHT_WIDTH[] = "border-right-width"; +const char PROPERTY_BORDER_STYLE[] = "border-style"; +const char PROPERTY_BORDER_TOP[] = "border-top"; +const char PROPERTY_BORDER_TOP_COLOR[] = "border-top-color"; +const char PROPERTY_BORDER_TOP_LEFT_RADIUS[] = "border-top-left-radius"; +const char PROPERTY_BORDER_TOP_RIGHT_RADIUS[] = "border-top-right-radius"; +const char PROPERTY_BORDER_TOP_STYLE[] = "border-top-style"; +const char PROPERTY_BORDER_TOP_WIDTH[] = "border-top-width"; +const char PROPERTY_BORDER_WIDTH[] = "border-width"; +const char PROPERTY_CENTER_X[] = "center-x"; +const char PROPERTY_CENTER_Y[] = "center-y"; +const char PROPERTY_COLUMN_SPAN[] = "column-span"; +const char PROPERTY_FADE_COLOR[] = "fade-color"; +const char PROPERTY_FIT_ORIGINAL_SIZE[] = "fit-original-size"; +const char PROPERTY_FLEX_BASIS[] = "flex-basis"; +const char PROPERTY_FLEX_DIRECTION[] = "flex-direction"; +const char PROPERTY_FLEX_GROW[] = "flex-grow"; +const char PROPERTY_FLEX_SHRINK[] = "flex-shrink"; +const char PROPERTY_FLEX_WRAP[] = "flex-wrap"; +const char PROPERTY_FOCUS_COLOR[] = "focus-color"; +const char PROPERTY_FOCUS_FONT_SIZE[] = "focus-font-size"; +const char PROPERTY_FONT_FAMILY[] = "font-family"; +const char PROPERTY_FONT_SIZE[] = "font-size"; +const char PROPERTY_FONT_SIZE_STEP[] = "font-size-step"; +const char PROPERTY_FONT_STYLE[] = "font-style"; +const char PROPERTY_FONT_WEIGHT[] = "font-weight"; +const char PROPERTY_GRID_COLUMN_END[] = "grid-column-end"; +const char PROPERTY_GRID_COLUMN_START[] = "grid-column-start"; +const char PROPERTY_GRID_COLUMNS_GAP[] = "grid-columns-gap"; +const char PROPERTY_GRID_ROW_END[] = "grid-row-end"; +const char PROPERTY_GRID_ROW_START[] = "grid-row-start"; +const char PROPERTY_GRID_ROWS_GAP[] = "grid-rows-gap"; +const char PROPERTY_GRID_TEMPLATE_COLUMNS[] = "grid-template-columns"; +const char PROPERTY_GRID_TEMPLATE_ROWS[] = "grid-template-rows"; +const char PROPERTY_ICON_HEIGHT[] = "icon-height"; +const char PROPERTY_ICON_WIDTH[] = "icon-width"; +const char PROPERTY_INDICATOR_BOTTOM[] = "indicator-bottom"; +const char PROPERTY_INDICATOR_COLOR[] = "indicator-color"; +const char PROPERTY_INDICATOR_LEFT[] = "indicator-left"; +const char PROPERTY_INDICATOR_RIGHT[] = "indicator-right"; +const char PROPERTY_INDICATOR_SELECTED_COLOR[] = "indicator-selected-color"; +const char PROPERTY_INDICATOR_SIZE[] = "indicator-size"; +const char PROPERTY_INDICATOR_TOP[] = "indicator-top"; +const char PROPERTY_ITEM_EXTENT[] = "item-extent"; +const char PROPERTY_JUSTIFY_CONTENT[] = "justify-content"; +const char PROPERTY_LETTER_SPACING[] = "letter-spacing"; +const char PROPERTY_LINE_CAP[] = "line-cap"; +const char PROPERTY_LINE_HEIGHT[] = "line-height"; +const char PROPERTY_MARGIN_BOTTOM[] = "margin-bottom"; +const char PROPERTY_MARGIN_END[] = "margin-end"; +const char PROPERTY_MARGIN_LEFT[] = "margin-left"; +const char PROPERTY_MARGIN_RIGHT[] = "margin-right"; +const char PROPERTY_MARGIN_START[] = "margin-start"; +const char PROPERTY_MARGIN_TOP[] = "margin-top"; +const char PROPERTY_MASK_COLOR[] = "mask-color"; +const char PROPERTY_MATCH_TEXT_DIRECTION[] = "match-text-direction"; +const char PROPERTY_MAX_FONT_SIZE[] = "max-font-size"; +const char PROPERTY_MAX_LINES[] = "max-lines"; +const char PROPERTY_MIN_FONT_SIZE[] = "min-font-size"; +const char PROPERTY_OBJECT_FIT[] = "object-fit"; +const char PROPERTY_PADDING_BOTTOM[] = "padding-bottom"; +const char PROPERTY_PADDING_END[] = "padding-end"; +const char PROPERTY_PADDING_LEFT[] = "padding-left"; +const char PROPERTY_PADDING_RIGHT[] = "padding-right"; +const char PROPERTY_PADDING_START[] = "padding-start"; +const char PROPERTY_PADDING_TOP[] = "padding-top"; +const char PROPERTY_PLACEHOLDER_COLOR[] = "placeholder-color"; +const char PROPERTY_PREFER_FONT_SIZES[] = "prefer-font-sizes"; +const char PROPERTY_PROGRESS_COLOR[] = "progress-color"; +const char PROPERTY_RTL_FLIP[] = "rtl-flip"; +const char PROPERTY_SCALE_DOWN[] = "scale-down"; +const char PROPERTY_SCALE_NUMBER[] = "scale-number"; +const char PROPERTY_SCALE_WIDTH[] = "scale-width"; +const char PROPERTY_SECONDARY_COLOR[] = "secondary-color"; +const char PROPERTY_SELECTED_COLOR[] = "selected-color"; +const char PROPERTY_SELECTED_FONT_SIZE[] = "selected-font-size"; +const char PROPERTY_STAR_BACKGROUND[] = "star-background"; +const char PROPERTY_STAR_FOREGROUND[] = "star-foreground"; +const char PROPERTY_STAR_SECONDARY[] = "star-secondary"; +const char PROPERTY_STAR_ANGLE[] = "start-angle"; +const char PROPERTY_STROKE_WIDTH[] = "stroke-width"; +const char PROPERTY_TEXT_ALIGN[] = "text-align"; +const char PROPERTY_TEXT_COLOR[] = "text-color"; +const char PROPERTY_TEXT_DECORATION[] = "text-decoration"; +const char PROPERTY_TEXT_OVERFLOW[] = "text-overflow"; +const char PROPERTY_TEXT_PADDING[] = "text-padding"; +const char PROPERTY_TEXTOFF_COLOR[] = "textoff-color"; +const char PROPERTY_TEXTON_COLOR[] = "texton-color"; +const char PROPERTY_TOTAL_ANGLE[] = "total-angle"; +const char INSPECTOR_CURRENT_VERSION[] = "1.0"; +const char INSPECTOR_DEVICE_TYPE[] = "deviceType"; +const char INSPECTOR_DEFAULT_VALUE[] = "defaultValue"; +const char INSPECTOR_TYPE[] = "$type"; +const char INSPECTOR_ROOT[] = "root"; +const char INSPECTOR_VERSION[] = "version"; +const char INSPECTOR_WIDTH[] = "width"; +const char INSPECTOR_HEIGHT[] = "height"; +const char INSPECTOR_RESOLUTION[] = "$resolution"; +const char INSPECTOR_CHILDREN[] = "$children"; +const char INSPECTOR_RECT[] = "$rect"; + +} // namespace + + +template +RefPtr InspectNodeCreator(NodeId nodeId, const std::string& tag) +{ + return AceType::MakeRefPtr(nodeId, tag); +} + +void JsInspectorManager::InitializeCallback() +{ + auto assembleJSONTreeCallback = [weak = WeakClaim(this)](std::string &jsonTreeStr) { + auto jsInspectorManager = weak.Upgrade(); + if (!jsInspectorManager) { + return false; + } + jsInspectorManager->AssembleJSONTree(jsonTreeStr); + return true; + }; + InspectorClient::GetInstance().RegisterJSONTreeCallback(assembleJSONTreeCallback); + auto assembleDefaultJSONTreeCallback = [weak = WeakClaim(this)](std::string &jsonTreeStr) { + auto jsInspectorManager = weak.Upgrade(); + if (!jsInspectorManager) { + return false; + } + jsInspectorManager->AssembleDefaultJSONTree(jsonTreeStr); + return true; + }; + InspectorClient::GetInstance().RegisterDefaultJSONTreeCallback(assembleDefaultJSONTreeCallback); +} + +// assemble the JSON tree using all depth-1 nodes and root nodes. +void JsInspectorManager::AssembleJSONTree(std::string& jsonStr) +{ + auto jsonNode = JsonUtil::Create(true); + auto jsonNodeArray = JsonUtil::CreateArray(true); + GetNodeJSONStrMap(); + + jsonNode->Put(INSPECTOR_TYPE, INSPECTOR_ROOT); + auto context = GetPipelineContext().Upgrade(); + if (context) { + float scale = context->GetViewScale(); + double rootHeight = context->GetRootHeight(); + double rootWidth = context->GetRootWidth(); + jsonNode->Put(INSPECTOR_WIDTH, std::to_string(rootWidth * scale).c_str()); + jsonNode->Put(INSPECTOR_HEIGHT, std::to_string(rootHeight * scale).c_str()); + } + jsonNode->Put(INSPECTOR_RESOLUTION, std::to_string(SystemProperties::GetResolution()).c_str()); + auto firstDepthNodeVec = nodeJSONInfoMap_[1]; + for (auto nodeJSONInfo : firstDepthNodeVec) { + auto nodeJSONValue = JsonUtil::ParseJsonString(nodeJSONInfo.second.c_str()); + jsonNodeArray->Put(nodeJSONValue); + } + jsonNode->Put(INSPECTOR_CHILDREN, jsonNodeArray); + jsonStr = jsonNode->ToString(); +} + +std::string GetDeviceTypeStr(const DeviceType &deviceType) +{ + std::string deviceName = ""; + if (deviceType == DeviceType::TV) { + deviceName = "TV"; + } else if (deviceType == DeviceType::WATCH) { + deviceName = "Watch"; + } else if (deviceType == DeviceType::CAR) { + deviceName = "Car"; + } else { + deviceName = "Phone"; + } + return deviceName; +} + +// assemble the default attrs and styles for all components +void JsInspectorManager::AssembleDefaultJSONTree(std::string& jsonStr) +{ + auto jsonNode = JsonUtil::Create(true); + std::string deviceName = GetDeviceTypeStr(SystemProperties::GetDeviceType()); + + jsonNode->Put(INSPECTOR_VERSION, INSPECTOR_CURRENT_VERSION); + jsonNode->Put(INSPECTOR_DEVICE_TYPE, deviceName.c_str()); + static const std::vector tagNames = { DOM_NODE_TAG_BUTTON, DOM_NODE_TAG_CANVAS, DOM_NODE_TAG_CHART, + DOM_NODE_TAG_DIALOG, DOM_NODE_TAG_DIV, DOM_NODE_TAG_DIVIDER, DOM_NODE_TAG_IMAGE, DOM_NODE_TAG_IMAGE_ANIMATOR, + DOM_NODE_TAG_INPUT, DOM_NODE_TAG_LABEL, DOM_NODE_TAG_LIST, DOM_NODE_TAG_LIST_ITEM, DOM_NODE_TAG_LIST_ITEM_GROUP, + DOM_NODE_TAG_MARQUEE, DOM_NODE_TAG_MENU, DOM_NODE_TAG_OPTION, DOM_NODE_TAG_PICKER_DIALOG, + DOM_NODE_TAG_PICKER_VIEW, DOM_NODE_TAG_POPUP, DOM_NODE_TAG_PROGRESS, DOM_NODE_TAG_RATING, DOM_NODE_TAG_REFRESH, + DOM_NODE_TAG_SEARCH, DOM_NODE_TAG_SELECT, DOM_NODE_TAG_SLIDER, DOM_NODE_TAG_SPAN, DOM_NODE_TAG_STACK, + DOM_NODE_TAG_SWIPER, DOM_NODE_TAG_SWITCH, DOM_NODE_TAG_TAB_BAR, DOM_NODE_TAG_TAB_CONTENT, DOM_NODE_TAG_TABS, + DOM_NODE_TAG_TEXT, DOM_NODE_TAG_TEXTAREA, DOM_NODE_TAG_VIDEO }; + + static const LinearMapNode(*)(NodeId, const std::string&)> inspectNodeCreators[] = { + { DOM_NODE_TAG_BUTTON, &InspectNodeCreator }, + { DOM_NODE_TAG_CANVAS, &InspectNodeCreator }, + { DOM_NODE_TAG_CHART, &InspectNodeCreator }, + { DOM_NODE_TAG_DIALOG, &InspectNodeCreator }, + { DOM_NODE_TAG_DIV, &InspectNodeCreator }, + { DOM_NODE_TAG_DIVIDER, &InspectNodeCreator }, + { DOM_NODE_TAG_IMAGE, &InspectNodeCreator }, + { DOM_NODE_TAG_IMAGE_ANIMATOR, &InspectNodeCreator }, + { DOM_NODE_TAG_INPUT, &InspectNodeCreator }, + { DOM_NODE_TAG_LABEL, &InspectNodeCreator }, + { DOM_NODE_TAG_LIST, &InspectNodeCreator }, + { DOM_NODE_TAG_LIST_ITEM, &InspectNodeCreator }, + { DOM_NODE_TAG_LIST_ITEM_GROUP, &InspectNodeCreator }, + { DOM_NODE_TAG_MARQUEE, &InspectNodeCreator }, + { DOM_NODE_TAG_MENU, &InspectNodeCreator }, + { DOM_NODE_TAG_OPTION, &InspectNodeCreator }, + { DOM_NODE_TAG_PICKER_DIALOG, &InspectNodeCreator }, + { DOM_NODE_TAG_PICKER_VIEW, &InspectNodeCreator }, + { DOM_NODE_TAG_POPUP, &InspectNodeCreator }, + { DOM_NODE_TAG_PROGRESS, &InspectNodeCreator }, + { DOM_NODE_TAG_RATING, &InspectNodeCreator }, + { DOM_NODE_TAG_REFRESH, &InspectNodeCreator }, + { DOM_NODE_TAG_SEARCH, &InspectNodeCreator }, + { DOM_NODE_TAG_SELECT, &InspectNodeCreator }, + { DOM_NODE_TAG_SLIDER, &InspectNodeCreator }, + { DOM_NODE_TAG_SPAN, &InspectNodeCreator }, + { DOM_NODE_TAG_STACK, &InspectNodeCreator }, + { DOM_NODE_TAG_SWIPER, &InspectNodeCreator }, + { DOM_NODE_TAG_SWITCH, &InspectNodeCreator }, + { DOM_NODE_TAG_TAB_BAR, &InspectNodeCreator }, + { DOM_NODE_TAG_TAB_CONTENT, &InspectNodeCreator }, + { DOM_NODE_TAG_TABS, &InspectNodeCreator }, + { DOM_NODE_TAG_TEXT, &InspectNodeCreator }, + { DOM_NODE_TAG_TEXTAREA, &InspectNodeCreator }, + { DOM_NODE_TAG_VIDEO, &InspectNodeCreator }, + }; + auto jsonDefaultValue = JsonUtil::Create(true); + for (std::size_t i = 0; i < tagNames.size(); i++) { + auto jsonDefaultAttrs = JsonUtil::Create(true); + NodeId nodeId = -1; + auto tag = tagNames[i]; + RefPtr inspectNode; + int64_t creatorIndex = BinarySearchFindIndex(inspectNodeCreators, ArraySize(inspectNodeCreators), tag.c_str()); + if (creatorIndex >= 0) { + inspectNode = inspectNodeCreators[creatorIndex].value(nodeId, tag); + } else { + LOGW("node type %{public}s is invalid", tag.c_str()); + return; + } + inspectNode->InitCommonStyles(); + inspectNode->PackAttrAndStyle(); + inspectNode->SetAllAttr(jsonDefaultAttrs); + inspectNode->SetAllStyle(jsonDefaultAttrs); + jsonDefaultValue->Put(tag.c_str(), jsonDefaultAttrs); + } + jsonNode->Put(INSPECTOR_DEFAULT_VALUE, jsonDefaultValue); + jsonStr = jsonNode->ToString(); +} + +void JsInspectorManager::GetNodeJSONStrMap() +{ + ClearContainer(); + DumpNodeTreeInfo(0, 0); + + if (depthNodeIdVec_.empty()) { + LOGE("page is empty"); + return; + } + + for (auto depthNodeId : depthNodeIdVec_) { + depthNodeIdMap_[depthNodeId.first].push_back(depthNodeId.second); + } + + auto maxItem = std::max_element(depthNodeIdVec_.begin(), depthNodeIdVec_.end()); + for (int depth = maxItem->first; depth > 0; depth--) { + auto depthNodeId = depthNodeIdMap_[depth]; + for (auto nodeId : depthNodeId) { + auto node = GetAccessibilityNodeFromPage(nodeId); + auto jsonNode = JsonUtil::Create(true); + auto jsonNodeArray = JsonUtil::CreateArray(true); + jsonNode->Put(INSPECTOR_TYPE, node->GetTag().c_str()); + jsonNode->Put(INSPECTOR_RECT, UpdateNodeRectStrInfo(node).c_str()); + for (auto attr : node->GetAttrs()) { + jsonNode->Put(ConvertStrToPropertyType(attr.first).c_str(), attr.second.c_str()); + } + for (auto style : node->GetStyles()) { + jsonNode->Put(ConvertStrToPropertyType(style.first).c_str(), style.second.c_str()); + } + if (node->GetChildList().size() > 0) { + GetChildrenJSONArray(depth, node, jsonNodeArray); + jsonNode->Put(INSPECTOR_CHILDREN, jsonNodeArray); + } + nodeJSONInfoMap_[depth].emplace_back(nodeId, jsonNode->ToString()); + } + } +} + +// clear the memory occupied by each item in map and vector. +void JsInspectorManager::ClearContainer() +{ + std::vector>().swap(depthNodeIdVec_); + std::unordered_map>>().swap(nodeJSONInfoMap_); + nodeJSONInfoMap_.clear(); + std::unordered_map>().swap(depthNodeIdMap_); + depthNodeIdMap_.clear(); +} + +std::string JsInspectorManager::UpdateNodeRectStrInfo(RefPtr node) +{ + PositionInfo positionInfo = {0, 0, 0, 0}; + if (node->GetTag() == DOM_NODE_TAG_SPAN) { + positionInfo = { + node->GetParentNode()->GetWidth(), node->GetParentNode()->GetHeight(), + node->GetParentNode()->GetLeft(), node->GetParentNode()->GetTop() + }; + } else { + positionInfo = {node->GetWidth(), node->GetHeight(), node->GetLeft(), node->GetTop()}; + } + if (!node->GetVisible()) { + positionInfo = {0, 0, 0, 0}; + } + // the dialog node is hidden, while the position and size of the node are not cleared. + if (node->GetClearRectInfoFlag() == true) { + positionInfo = {0, 0, 0, 0}; + } + std::string strRec = std::to_string(positionInfo.left).append(","). + append(std::to_string(positionInfo.top)). + append(",").append(std::to_string(positionInfo.width)). + append(",").append(std::to_string(positionInfo.height)); + return strRec; +} + +void JsInspectorManager::DumpNodeTreeInfo(int32_t depth, NodeId nodeID) +{ + auto node = GetAccessibilityNodeFromPage(nodeID); + if (!node) { + LOGE("JsInspectorManager::DumpNodeTreeInfo return"); + return; + } + + // get the vector of nodeID per depth + depthNodeIdVec_.emplace_back(depth, nodeID); + for (const auto& item : node->GetChildList()) { + DumpNodeTreeInfo(depth + 1, item->GetNodeId()); + } +} + +// find children of the current node and combine them with this node to form a JSON array object. +void JsInspectorManager::GetChildrenJSONArray( + int32_t depth, RefPtr node, std::unique_ptr& childJSONArray) +{ + auto childNodeJSONVec = nodeJSONInfoMap_[depth + 1]; + for (auto item : node->GetChildList()) { + auto childVec = std::find_if(std::begin(childNodeJSONVec), std::end(childNodeJSONVec), + [item](const std::pair& upper) { + return upper.first == item->GetNodeId(); + }); + if (childVec != std::end(childNodeJSONVec)) { + auto childJSONValue = JsonUtil::ParseJsonString(childVec->second.c_str()); + childJSONArray->Put(childJSONValue); + } + } +} + +std::string JsInspectorManager::ConvertStrToPropertyType(const std::string& typeValue) +{ + // static linear map must be sorted by key. + static const LinearMapNode propertyMap[] = { + {DOM_ALIGN_CONTENT, PROPERTY_ALIGN_CONTENT}, + {DOM_ALIGN_ITEMS, PROPERTY_ALIGN_ITEMS}, + {DOM_TEXT_ALLOW_SCALE, PROPERTY_ALLOW_SCALE}, + {DOM_BACKGROUND_COLOR, PROPERTY_BACKGROUND_COLOR}, + {DOM_BACKGROUND_IMAGE, PROPERTY_BACKGROUND_IMAGE}, + {DOM_BACKGROUND_IMAGE_POSITION, PROPERTY_BACKGROUND_POSITION}, + {DOM_BACKGROUND_IMAGE_REPEAT, PROPERTY_BACKGROUND_REPEAT}, + {DOM_BACKGROUND_IMAGE_SIZE, PROPERTY_BACKGROUND_SIZE}, + {DOM_BLOCK_COLOR, PROPERTY_BLOCK_COLOR}, + {BORDER_BOTTOM, PROPERTY_BORDER_BOTTOM}, + {DOM_BORDER_BOTTOM_COLOR, PROPERTY_BORDER_BOTTOM_COLOR}, + {DOM_BORDER_BOTTOM_LEFT_RADIUS, PROPERTY_BORDER_BOTTOM_LEFT_RADIUS}, + {DOM_BORDER_BOTTOM_RIGHT_RADIUS, PROPERTY_BORDER_BOTTOM_RIGHT_RADIUS}, + {DOM_BORDER_BOTTOM_STYLE, PROPERTY_BORDER_BOTTOM_STYLE}, + {DOM_BORDER_BOTTOM_WIDTH, PROPERTY_BORDER_BOTTOM_WIDTH}, + {DOM_BORDER_COLOR, PROPERTY_BORDER_COLOR}, + {BORDER_LEFT, PROPERTY_BORDER_LEFT}, + {DOM_BORDER_LEFT_COLOR, PROPERTY_BORDER_LEFT_COLOR}, + {DOM_BORDER_LEFT_STYLE, PROPERTY_BORDER_LEFT_STYLE}, + {DOM_BORDER_LEFT_WIDTH, PROPERTY_BORDER_LEFT_WIDTH}, + {DOM_BORDER_RADIUS, PROPERTY_BORDER_RADIUS}, + {BORDER_RIGHT, PROPERTY_BORDER_RIGHT}, + {DOM_BORDER_RIGHT_COLOR, PROPERTY_BORDER_RIGHT_COLOR}, + {DOM_BORDER_RIGHT_STYLE, PROPERTY_BORDER_RIGHT_STYLE}, + {DOM_BORDER_RIGHT_WIDTH, PROPERTY_BORDER_RIGHT_WIDTH}, + {DOM_BORDER_STYLE, PROPERTY_BORDER_STYLE}, + {BORDER_TOP, PROPERTY_BORDER_TOP}, + {DOM_BORDER_TOP_COLOR, PROPERTY_BORDER_TOP_COLOR}, + {DOM_BORDER_TOP_LEFT_RADIUS, PROPERTY_BORDER_TOP_LEFT_RADIUS}, + {DOM_BORDER_TOP_RIGHT_RADIUS, PROPERTY_BORDER_TOP_RIGHT_RADIUS}, + {DOM_BORDER_TOP_STYLE, PROPERTY_BORDER_TOP_STYLE}, + {DOM_BORDER_TOP_WIDTH, PROPERTY_BORDER_TOP_WIDTH}, + {DOM_BORDER_WIDTH, PROPERTY_BORDER_WIDTH}, + {DOM_CENTER_X, PROPERTY_CENTER_X}, + {DOM_CENTER_Y, PROPERTY_CENTER_Y}, + {DOM_LISTITEM_COLUMN_SPAN, PROPERTY_COLUMN_SPAN}, + {FADE_COLOR, PROPERTY_FADE_COLOR}, + {DOM_IMAGE_FIT_ORIGINAL_SIZE, PROPERTY_FIT_ORIGINAL_SIZE}, + {FLEX_BASIS, PROPERTY_FLEX_BASIS}, + {DOM_FLEX_DIRECTION, PROPERTY_FLEX_DIRECTION}, + {DOM_FLEX_GROW, PROPERTY_FLEX_GROW}, + {DOM_FLEX_SHRINK, PROPERTY_FLEX_SHRINK}, + {DOM_FLEX_WRAP, PROPERTY_FLEX_WRAP}, + {DOM_INPUT_FOCUS_COLOR, PROPERTY_FOCUS_COLOR}, + {DOM_PICKER_FOCUS_SIZE, PROPERTY_FOCUS_FONT_SIZE}, + {DOM_TEXT_FONT_FAMILY, PROPERTY_FONT_FAMILY}, + {DOM_TEXT_FONT_SIZE, PROPERTY_FONT_SIZE}, + {DOM_TEXT_FONT_SIZE_STEP, PROPERTY_FONT_SIZE_STEP}, + {DOM_TEXT_FONT_STYLE, PROPERTY_FONT_STYLE}, + {DOM_TEXT_FONT_WEIGHT, PROPERTY_FONT_WEIGHT}, + {DOM_GRID_COLUMN_END, PROPERTY_GRID_COLUMN_END}, + {DOM_GRID_COLUMN_START, PROPERTY_GRID_COLUMN_START}, + {DOM_GRID_COLUMN_GAP, PROPERTY_GRID_COLUMNS_GAP}, + {DOM_GRID_ROW_END, PROPERTY_GRID_ROW_END}, + {DOM_GRID_ROW_START, PROPERTY_GRID_ROW_START}, + {DOM_GRID_ROW_GAP, PROPERTY_GRID_ROWS_GAP}, + {DOM_GRID_TEMPLATE_COLUMNS, PROPERTY_GRID_TEMPLATE_COLUMNS}, + {DOM_GRID_TEMPLATE_ROWS, PROPERTY_GRID_TEMPLATE_ROWS}, + {DOM_BUTTON_ICON_HEIGHT, PROPERTY_ICON_HEIGHT}, + {DOM_BUTTON_ICON_WIDTH, PROPERTY_ICON_WIDTH}, + {DOM_INDICATOR_BOTTOM, PROPERTY_INDICATOR_BOTTOM}, + {DOM_INDICATOR_COLOR, PROPERTY_INDICATOR_COLOR}, + {DOM_INDICATOR_LEFT, PROPERTY_INDICATOR_LEFT}, + {DOM_INDICATOR_RIGHT, PROPERTY_INDICATOR_RIGHT}, + {DOM_INDICATOR_SELECTEDCOLOR, PROPERTY_INDICATOR_SELECTED_COLOR}, + {DOM_INDICATOR_SIZE, PROPERTY_INDICATOR_SIZE}, + {DOM_INDICATOR_TOP, PROPERTY_INDICATOR_TOP}, + {DOM_LIST_ITEM_EXTENT, PROPERTY_ITEM_EXTENT}, + {DOM_JUSTIFY_CONTENT, PROPERTY_JUSTIFY_CONTENT}, + {DOM_TEXT_LETTER_SPACING, PROPERTY_LETTER_SPACING}, + {DOM_DIVIDER_LINE_CAP, PROPERTY_LINE_CAP}, + {DOM_TEXT_LINE_HEIGHT, PROPERTY_LINE_HEIGHT}, + {DOM_MARGIN_BOTTOM, PROPERTY_MARGIN_BOTTOM}, + {DOM_MARGIN_END, PROPERTY_MARGIN_END}, + {DOM_MARGIN_LEFT, PROPERTY_MARGIN_LEFT}, + {DOM_MARGIN_RIGHT, PROPERTY_MARGIN_RIGHT}, + {DOM_MARGIN_START, PROPERTY_MARGIN_START}, + {DOM_MARGIN_TOP, PROPERTY_MARGIN_TOP}, + {DOM_MASK_COLOR, PROPERTY_MASK_COLOR}, + {DOM_IMAGE_MATCH_TEXT_DIRECTION, PROPERTY_MATCH_TEXT_DIRECTION}, + {DOM_TEXT_MAX_FONT_SIZE, PROPERTY_MAX_FONT_SIZE}, + {DOM_TEXT_MAX_LINES, PROPERTY_MAX_LINES}, + {DOM_TEXT_MIN_FONT_SIZE, PROPERTY_MIN_FONT_SIZE}, + {IMAGE_FIT, PROPERTY_OBJECT_FIT}, + {DOM_PADDING_BOTTOM, PROPERTY_PADDING_BOTTOM}, + {DOM_PADDING_END, PROPERTY_PADDING_END}, + {DOM_PADDING_LEFT, PROPERTY_PADDING_LEFT}, + {DOM_PADDING_RIGHT, PROPERTY_PADDING_RIGHT}, + {DOM_PADDING_START, PROPERTY_PADDING_START}, + {DOM_PADDING_TOP, PROPERTY_PADDING_TOP}, + {DOM_TEXTAREA_PLACEHOLDER_COLOR, PROPERTY_PLACEHOLDER_COLOR}, + {DOM_TEXT_PREFER_FONT_SIZES, PROPERTY_PREFER_FONT_SIZES}, + {DOM_REFRESH_PROGRESS_COLOR, PROPERTY_PROGRESS_COLOR}, + {DOM_RTL_FLIP, PROPERTY_RTL_FLIP}, + {SCALE_DOWN, PROPERTY_SCALE_DOWN}, + {DOM_SCALE_NUMBER, PROPERTY_SCALE_NUMBER}, + {DOM_SCALE_WIDTH, PROPERTY_SCALE_WIDTH}, + {DOM_PROGRESS_SECONDARY_COLOR, PROPERTY_SECONDARY_COLOR}, + {DOM_SELECTED_COLOR, PROPERTY_SELECTED_COLOR}, + {DOM_PICKER_SELECT_SIZE, PROPERTY_SELECTED_FONT_SIZE}, + {DOM_BACKGROUND_SRC, PROPERTY_STAR_BACKGROUND}, + {DOM_FOREGROUND_SRC, PROPERTY_STAR_FOREGROUND}, + {DOM_SECONDARY_SRC, PROPERTY_STAR_SECONDARY}, + {DOM_START_DEGREE, PROPERTY_STAR_ANGLE}, + {DOM_PROGRESS_STROKE_WIDTH, PROPERTY_STROKE_WIDTH}, + {DOM_TEXT_ALIGN, PROPERTY_TEXT_ALIGN}, + {DOM_PICKER_TEXT_COLOR, PROPERTY_TEXT_COLOR}, + {DOM_TEXT_DECORATION, PROPERTY_TEXT_DECORATION}, + {DOM_TEXT_OVERFLOW, PROPERTY_TEXT_OVERFLOW}, + {DOM_TEXT_PADDING, PROPERTY_TEXT_PADDING}, + {DOM_TEXT_OFF_COLOR, PROPERTY_TEXTOFF_COLOR}, + {DOM_TEXT_ON_COLOR, PROPERTY_TEXTON_COLOR}, + {DOM_SWEEP_DEGREE, PROPERTY_TOTAL_ANGLE}, + }; + std::string dstStr; + int64_t idx = BinarySearchFindIndex(propertyMap, ArraySize(propertyMap), typeValue.c_str()); + if (idx >= 0) { + dstStr = propertyMap[idx].value; + } else { + dstStr = ConvertPseudoClassStyle(typeValue); + } + return dstStr; +} + +// pseudoClass styles, such as covert borderBottomColor:focus to border-bottom-color:focus +std::string JsInspectorManager::ConvertPseudoClassStyle(const std::string pseudoClassValue) +{ + std::string pesudoName; + std::string remPseudoStr; + std::string dstStr; + if (pseudoClassValue.find(":") != std::string::npos) { + int32_t pos = pseudoClassValue.find(":"); + remPseudoStr = pseudoClassValue.substr(0, pos); + pesudoName = pseudoClassValue.substr(pos, pseudoClassValue.length() - pos); + dstStr = ConvertStrToPropertyType(remPseudoStr); + dstStr.append(pesudoName); + return dstStr; + } + return pseudoClassValue; +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/inspector/js_inspector_manager.h b/frameworks/bridge/common/inspector/js_inspector_manager.h new file mode 100644 index 00000000..16715f4b --- /dev/null +++ b/frameworks/bridge/common/inspector/js_inspector_manager.h @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_JS_INSPECTOR_MANAGER_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_JS_INSPECTOR_MANAGER_H + +#include +#include +#include + +#include "core/pipeline/pipeline_context.h" +#include "frameworks/bridge/common/accessibility/js_accessibility_manager.h" + +namespace OHOS::Ace::Framework { + +class JsInspectorManager : public AccessibilityNodeManager { + DECLARE_ACE_TYPE(JsInspectorManager, AccessibilityNodeManager); + +public: + JsInspectorManager() = default; + ~JsInspectorManager() override = default; + + void InitializeCallback() override; + +private: + void AssembleJSONTree(std::string& jsonStr); + void AssembleDefaultJSONTree(std::string& jsonStr); + void GetNodeJSONStrMap(); + void ClearContainer(); + std::string UpdateNodeRectStrInfo(RefPtr node); + void DumpNodeTreeInfo(int32_t depth, NodeId nodeID); + void GetChildrenJSONArray( + int32_t depth, RefPtr node, std::unique_ptr& childJSONArray); + std::string ConvertStrToPropertyType(const std::string& typeValue); + std::string ConvertPseudoClassStyle(const std::string pseudoClassValue); + + std::vector> depthNodeIdVec_; + std::unordered_map> depthNodeIdMap_; + std::unordered_map>> nodeJSONInfoMap_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_INSPECTOR_JS_INSPECTOR_MANAGER_H diff --git a/frameworks/bridge/common/manifest/manifest_appinfo.cpp b/frameworks/bridge/common/manifest/manifest_appinfo.cpp new file mode 100644 index 00000000..54f2707f --- /dev/null +++ b/frameworks/bridge/common/manifest/manifest_appinfo.cpp @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/manifest/manifest_appinfo.h" + +namespace OHOS::Ace::Framework { + +const std::string& ManifestAppInfo::GetAppID() const +{ + return appID_; +} + +const std::string& ManifestAppInfo::GetAppName() const +{ + return appName_; +} + +const std::string& ManifestAppInfo::GetIcon() const +{ + return icon_; +} + +const std::string& ManifestAppInfo::GetVersionName() const +{ + return versionName_; +} + +uint32_t ManifestAppInfo::GetVersionCode() const +{ + return versionCode_; +} + +const std::string& ManifestAppInfo::GetLogLevel() const +{ + return logLevel_; +} + +const std::string& ManifestAppInfo::GetMinPlatformVersion() const +{ + return minPlatformVersion_; +} + +void ManifestAppInfo::AppInfoParse(const std::unique_ptr& root) +{ + if (!root) { + return; + } + + appName_ = root->GetString("appName"); + versionName_ = root->GetString("versionName"); + versionCode_ = root->GetUInt("versionCode"); + logLevel_ = root->GetString("logLevel"); + icon_ = root->GetString("icon"); + appID_ = root->GetString("appID"); + minPlatformVersion_ = root->GetString("minPlatformVersion"); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/manifest/manifest_appinfo.h b/frameworks/bridge/common/manifest/manifest_appinfo.h new file mode 100644 index 00000000..4e06bae0 --- /dev/null +++ b/frameworks/bridge/common/manifest/manifest_appinfo.h @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_MANIFEST_MANIFEST_APPINFO_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_MANIFEST_MANIFEST_APPINFO_H + +#include + +#include "base/json/json_util.h" +#include "base/log/log.h" +#include "base/memory/referenced.h" + +namespace OHOS::Ace::Framework { + +class ManifestAppInfo : public Referenced { +public: + ManifestAppInfo() = default; + ~ManifestAppInfo() override = default; + + // JS application description. + const std::string& GetAppID() const; + const std::string& GetAppName() const; + const std::string& GetIcon() const; + const std::string& GetVersionName() const; + const std::string& GetMinPlatformVersion() const; + uint32_t GetVersionCode() const; + + // Global config information. + const std::string& GetLogLevel() const; + + void AppInfoParse(const std::unique_ptr& root); + +private: + std::string appName_; + std::string versionName_; + uint32_t versionCode_ = 0; + std::string logLevel_; + std::string icon_; + std::string appID_; + std::string minPlatformVersion_; + + ACE_DISALLOW_COPY_AND_MOVE(ManifestAppInfo); +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_MANIFEST_MANIFEST_APPINFO_H diff --git a/frameworks/bridge/common/manifest/manifest_parser.cpp b/frameworks/bridge/common/manifest/manifest_parser.cpp new file mode 100644 index 00000000..4b3e0401 --- /dev/null +++ b/frameworks/bridge/common/manifest/manifest_parser.cpp @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/manifest/manifest_parser.h" + +namespace OHOS::Ace::Framework { + +ManifestParser::ManifestParser() + : manifestAppInfo_(Referenced::MakeRefPtr()), + manifestRouter_(Referenced::MakeRefPtr()), + manifestWidget_(Referenced::MakeRefPtr()), + manifestWindow_(Referenced::MakeRefPtr()) +{} + +const RefPtr& ManifestParser::GetAppInfo() const +{ + return manifestAppInfo_; +} + +const RefPtr& ManifestParser::GetRouter() const +{ + return manifestRouter_; +} + +const RefPtr& ManifestParser::GetWidget() const +{ + return manifestWidget_; +} + +const WindowConfig& ManifestParser::GetWindowConfig() const +{ + return manifestWindow_->GetWindowConfig(); +} + +void ManifestParser::Parse(const std::string& contents) +{ + auto rootJson = JsonUtil::ParseJsonString(contents); + manifestAppInfo_->AppInfoParse(rootJson); + manifestRouter_->RouterParse(rootJson); + manifestWidget_->WidgetParse(rootJson); + manifestWindow_->WindowParse(rootJson); +} + +void ManifestParser::Printer() +{ +#ifdef ACE_DEBUG + LOGD("appinfo:{"); + LOGD(" Icon:%{private}s", manifestAppInfo_->GetIcon().c_str()); + LOGD(" LogLevel:%{public}s", manifestAppInfo_->GetLogLevel().c_str()); + LOGD(" Name:%{public}s", manifestAppInfo_->GetAppName().c_str()); + LOGD(" AppID:%{public}s", manifestAppInfo_->GetAppID().c_str()); + LOGD(" VersionCode:%{public}d", manifestAppInfo_->GetVersionCode()); + LOGD(" VersionName:%{public}s", manifestAppInfo_->GetVersionName().c_str()); + LOGD(" minPlatformVersion:%{public}s", manifestAppInfo_->GetMinPlatformVersion().c_str()); + LOGD("}"); + + LOGD("router:{"); + LOGD(" entry:%{private}s", manifestRouter_->GetEntry().c_str()); + LOGD(" pages:{"); + for (const auto& page : manifestRouter_->GetPageList()) { + LOGD(" %{private}s", page.c_str()); + } + LOGD("}"); + + if (manifestWidget_->GetWidgetNum() > 0) { + LOGD("widgets:{"); + for (const auto& widget : manifestWidget_->GetWidgetList()) { + LOGD(" {"); + LOGD(" WidgetName:%{public}s", widget.second->GetWidgetName().c_str()); + LOGD(" WidgetPath:%{public}s", widget.second->GetWidgetPath().c_str()); + LOGD(" }"); + } + LOGD("}"); + } + manifestWindow_->PrintInfo(); +#endif +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/manifest/manifest_parser.h b/frameworks/bridge/common/manifest/manifest_parser.h new file mode 100644 index 00000000..4bf09153 --- /dev/null +++ b/frameworks/bridge/common/manifest/manifest_parser.h @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_MANIFEST_MANIFEST_PARSER_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_MANIFEST_MANIFEST_PARSER_H + +#include + +#include "base/log/log.h" +#include "base/memory/referenced.h" +#include "base/utils/noncopyable.h" +#include "frameworks/bridge/common/manifest/manifest_appinfo.h" +#include "frameworks/bridge/common/manifest/manifest_router.h" +#include "frameworks/bridge/common/manifest/manifest_widget.h" +#include "frameworks/bridge/common/manifest/manifest_window.h" + +namespace OHOS::Ace::Framework { + +class ACE_EXPORT ManifestParser : public Referenced { +public: + ManifestParser(); + ~ManifestParser() override = default; + + const RefPtr& GetAppInfo() const; + const RefPtr& GetRouter() const; + const RefPtr& GetWidget() const; + const WindowConfig& GetWindowConfig() const; + + void Parse(const std::string& url); + void Printer(); + +private: + RefPtr manifestAppInfo_; + RefPtr manifestRouter_; + RefPtr manifestWidget_; + RefPtr manifestWindow_; + + ACE_DISALLOW_COPY_AND_MOVE(ManifestParser); +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_MANIFEST_MANIFEST_PARSER_H diff --git a/frameworks/bridge/common/manifest/manifest_router.cpp b/frameworks/bridge/common/manifest/manifest_router.cpp new file mode 100644 index 00000000..b747aef7 --- /dev/null +++ b/frameworks/bridge/common/manifest/manifest_router.cpp @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/manifest/manifest_router.h" + +#include + +#include "base/log/event_report.h" + +namespace OHOS::Ace::Framework { + +std::string ManifestRouter::GetEntry(const std::string& suffix) const +{ + if (pages_.empty()) { + LOGE("pages list is empty"); + return ""; + } + return pages_.front() + suffix; +} + +std::string ManifestRouter::GetPagePath(const std::string& uri, const std::string& suffix) const +{ + if (uri.empty()) { + LOGW("page uri is empty"); + return ""; + } + // the case uri is starts with "/" and "/" is the mainPage + if (uri.front() == '/') { + if (uri.size() == 1) { + return pages_.front() + suffix; + } + } else { + if (std::find(std::begin(pages_), std::end(pages_), uri) != std::end(pages_)) { + return uri + suffix; + } + } + LOGE("can't find this page %{private}s path", uri.c_str()); + return ""; +} + +const std::list& ManifestRouter::GetPageList() const +{ + return pages_; +} + +void ManifestRouter::RouterParse(const std::unique_ptr& root) +{ + if (!root) { + return; + } + + auto pagesArray = root->GetValue("pages"); + if (pagesArray && pagesArray->IsArray()) { + for (int32_t index = 0; index < pagesArray->GetArraySize(); index++) { + auto page = pagesArray->GetArrayItem(index); + if (page && page->IsString()) { + pages_.emplace_back(page->GetString()); + } else { + LOGW("page is not a string."); + } + } + } + + if (pages_.empty()) { + LOGE("Nothing is parsed for page list."); + EventReport::SendPageRouterException(PageRouterExcepType::ROUTE_PARSE_ERR); + } +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/manifest/manifest_router.h b/frameworks/bridge/common/manifest/manifest_router.h new file mode 100644 index 00000000..7dcd88e4 --- /dev/null +++ b/frameworks/bridge/common/manifest/manifest_router.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_MANIFEST_MANIFEST_ROUTER_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_MANIFEST_MANIFEST_ROUTER_H + +#include +#include + +#include "base/json/json_util.h" +#include "base/log/log.h" +#include "base/memory/referenced.h" + +namespace OHOS::Ace::Framework { + +class ManifestRouter : public Referenced { +public: + ManifestRouter() = default; + ~ManifestRouter() override = default; + + std::string GetPagePath(const std::string& uri, const std::string& suffix = ".js") const; + std::string GetEntry(const std::string& suffix = ".js") const; + const std::list& GetPageList() const; + void RouterParse(const std::unique_ptr& router); + +private: + std::string pagePath_; + std::list pages_; + + ACE_DISALLOW_COPY_AND_MOVE(ManifestRouter); +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_MANIFEST_MANIFEST_ROUTER_H diff --git a/frameworks/bridge/common/manifest/manifest_widget.cpp b/frameworks/bridge/common/manifest/manifest_widget.cpp new file mode 100644 index 00000000..4c2489bf --- /dev/null +++ b/frameworks/bridge/common/manifest/manifest_widget.cpp @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/manifest/manifest_widget.h" + +namespace OHOS::Ace::Framework { + +const std::string& ManifestWidget::GetWidgetName() const +{ + return widgetName_; +} + +const std::string& ManifestWidget::GetWidgetPath() const +{ + return widgetPath_; +} + +void ManifestWidgetGroup::WidgetParse(const std::unique_ptr& root) +{ + if (!root) { + return; + } + + auto widgetInfo = root->GetValue("widgets"); + if (widgetInfo->IsArray()) { + for (int32_t index = 0; index < widgetInfo->GetArraySize(); ++index) { + const auto& widget = widgetInfo->GetArrayItem(index); + const auto& widgetName = widget->GetString("name"); + const auto& widgetPath = widget->GetString("path"); + + if (widgetName.empty()) { + LOGE("Invalid widget name. Need to be a non-empty string."); + continue; + } else if (widgetPath.empty()) { + LOGE("Invalid widget path. Need to be a non-empty string."); + continue; + } + + auto result = widgets_.try_emplace(widgetName, MakeRefPtr(widgetName, widgetPath)); + if (!result.second) { + LOGE("Duplicate Widget Names: %{public}s", widgetName.c_str()); + } + } + } else { + LOGE("Widget Format is invalid"); + } +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/manifest/manifest_widget.h b/frameworks/bridge/common/manifest/manifest_widget.h new file mode 100644 index 00000000..b51ca687 --- /dev/null +++ b/frameworks/bridge/common/manifest/manifest_widget.h @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_MANIFEST_MANIFEST_WIDGET_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_MANIFEST_MANIFEST_WIDGET_H + +#include +#include + +#include "base/json/json_util.h" +#include "base/log/log.h" +#include "base/memory/referenced.h" + +namespace OHOS::Ace::Framework { + +class ManifestWidget : public Referenced { +public: + ManifestWidget(const std::string& name, const std::string& path) : widgetName_(name), widgetPath_(path) {} + ~ManifestWidget() override = default; + + // widget description. + const std::string& GetWidgetName() const; + const std::string& GetWidgetPath() const; + +private: + std::string widgetName_; + std::string widgetPath_; + + ACE_DISALLOW_COPY_AND_MOVE(ManifestWidget); +}; + +class ManifestWidgetGroup : public Referenced { +public: + ManifestWidgetGroup() = default; + ~ManifestWidgetGroup() override = default; + + void WidgetParse(const std::unique_ptr& root); + + uint32_t GetWidgetNum() const + { + return static_cast(widgets_.size()); + } + + const std::unordered_map>& GetWidgetList() const + { + return widgets_; + } + +private: + std::unordered_map> widgets_; + + ACE_DISALLOW_COPY_AND_MOVE(ManifestWidgetGroup); +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_MANIFEST_MANIFEST_WIDGET_H diff --git a/frameworks/bridge/common/manifest/manifest_window.cpp b/frameworks/bridge/common/manifest/manifest_window.cpp new file mode 100644 index 00000000..010816df --- /dev/null +++ b/frameworks/bridge/common/manifest/manifest_window.cpp @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/manifest/manifest_window.h" + +#include "base/log/log.h" + +namespace OHOS::Ace::Framework { + +void ManifestWindow::WindowParse(const std::unique_ptr& root) +{ + if (!root) { + LOGE("the root manifest is nullptr"); + return; + } + windowConfig_.minSdkVersion = root->GetInt("minPlatformVersion"); + windowConfig_.boxWrap = root->GetBool("boxWrap", false); +#if defined(WINDOWS_PLATFORM) || defined(MAC_PLATFORM) + auto deviceTypes = root->GetValue("deviceType"); + if (deviceTypes && deviceTypes->IsArray()) { + for (int32_t index = 0; index < deviceTypes->GetArraySize(); ++index) { + auto device = deviceTypes->GetArrayItem(index); + if (device && device->IsString() && device->GetString() == "liteWearable") { + windowConfig_.useLiteStyle = true; + break; + } + } + } +#endif + auto window = root->GetObject("window"); + if (!window || window->IsNull()) { + LOGD("No window config found."); + return; + } + auto designWidth = window->GetInt("designWidth", DEFAULT_DESIGN_WIDTH); + if (designWidth <= 0) { + designWidth = DEFAULT_DESIGN_WIDTH; + } + windowConfig_.designWidth = designWidth; + windowConfig_.autoDesignWidth = window->GetBool("autoDesignWidth", false); +} + +void ManifestWindow::PrintInfo() +{ + LOGD("window: {"); + LOGD(" designWidth: %{private}d", windowConfig_.designWidth); + LOGD(" autoDesignWidth: %{private}d", windowConfig_.autoDesignWidth); + LOGD("}"); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/manifest/manifest_window.h b/frameworks/bridge/common/manifest/manifest_window.h new file mode 100644 index 00000000..1f5f4228 --- /dev/null +++ b/frameworks/bridge/common/manifest/manifest_window.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_MANIFEST_MANIFEST_WINDOW_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_MANIFEST_MANIFEST_WINDOW_H + +#include "base/json/json_util.h" +#include "base/memory/referenced.h" +#include "core/common/frontend.h" + +namespace OHOS::Ace::Framework { + +class ManifestWindow : public Referenced { +public: + ManifestWindow() = default; + ~ManifestWindow() override = default; + + void WindowParse(const std::unique_ptr& root); + void PrintInfo(); + + const WindowConfig& GetWindowConfig() const + { + return windowConfig_; + } + +private: + WindowConfig windowConfig_ = { .designWidth = DEFAULT_DESIGN_WIDTH, .autoDesignWidth = false }; + + ACE_DISALLOW_COPY_AND_MOVE(ManifestWindow); +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_MANIFEST_MANIFEST_WINDOW_H diff --git a/frameworks/bridge/common/media_query/media_query_info.cpp b/frameworks/bridge/common/media_query/media_query_info.cpp new file mode 100644 index 00000000..accb4f8c --- /dev/null +++ b/frameworks/bridge/common/media_query/media_query_info.cpp @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/media_query/media_query_info.h" + +#include "base/json/json_util.h" +#include "base/log/log.h" + +namespace OHOS::Ace::Framework { + +std::string MediaQueryInfo::GetDeviceType() const +{ + if (SystemProperties::GetParamDeviceType() == "tablet") { + return "tablet"; + } + switch (SystemProperties::GetDeviceType()) { + case DeviceType::TV: + return "tv"; + case DeviceType::CAR: + return "car"; + case DeviceType::WATCH: + return "wearable"; + default: + return "phone"; + } +} + +std::string MediaQueryInfo::GetOrientation() const +{ + switch (SystemProperties::GetDevcieOrientation()) { + case DeviceOrientation::PORTRAIT: + return "portrait"; + case DeviceOrientation::LANDSCAPE: + return "landscape"; + default: + LOGE("unsupported orientation type"); + } + return ""; +} + +std::string MediaQueryInfo::GetMediaQueryInfo() const +{ + auto json = JsonUtil::Create(true); + int32_t width = SystemProperties::GetWidth(); + int32_t height = SystemProperties::GetHeight(); + double aspectRatio = (height != 0) ? (static_cast(width) / height) : 1.0; + json->Put("width", width); + json->Put("height", height); + json->Put("aspectRatio", aspectRatio); + json->Put("roundScreen", SystemProperties::GetIsScreenRound()); + json->Put("deviceWidth", SystemProperties::GetDeviceWidth()); + json->Put("deviceHeight", SystemProperties::GetDeviceHeight()); + json->Put("resolution", SystemProperties::GetResolution()); + json->Put("orientation", GetOrientation().c_str()); + json->Put("deviceType", GetDeviceType().c_str()); + json->Put("isInit", false); + json->Put("darkMode", SystemProperties::GetColorMode() == ColorMode::DARK); + return json->ToString(); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/media_query/media_query_info.h b/frameworks/bridge/common/media_query/media_query_info.h new file mode 100644 index 00000000..dcc7f469 --- /dev/null +++ b/frameworks/bridge/common/media_query/media_query_info.h @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_MEDIA_QUERY_MEDIA_QUERY_INFO_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_MEDIA_QUERY_MEDIA_QUERY_INFO_H + +#include + +#include "base/memory/ace_type.h" +#include "base/utils/macros.h" +#include "base/utils/noncopyable.h" +#include "base/utils/system_properties.h" + +namespace OHOS::Ace::Framework { + +class ACE_EXPORT MediaQueryInfo : public AceType { + DECLARE_ACE_TYPE(MediaQueryInfo, AceType); + +public: + MediaQueryInfo() = default; + ~MediaQueryInfo() override = default; + + std::string GetMediaQueryInfo() const; + + std::string GetDeviceType() const; + + std::string GetOrientation() const; + + bool GetIsInit() const + { + return isInit_; + } + + void SetIsInit(bool init) + { + isInit_ = init; + } + + void SetListenerId(const std::string& listenerId) + { + listenerId_ = listenerId; + backupListenerId_ = listenerId; + } + + const std::string& GetListenerId() const + { + return listenerId_; + } + + // reset listenerId when it was consumed to handle multi-page case. + void ResetListenerId() + { + listenerId_.clear(); + } + + // ensure listenerId is valid to handle split screen case. + void EnsureListenerIdValid() + { + listenerId_ = backupListenerId_; + } + +private: + bool isInit_ = true; + std::string listenerId_; + // backupListenerId_ is used for backup listenerId_ to handle split screen case. + // under the circumstances, the viewsizechanged event will be triggered, but the + // method of addListener will not run, so the listenerId is empty. this backup + // can ensure listenerId_ is valid when screen is splited. + std::string backupListenerId_; + + ACE_DISALLOW_COPY_AND_MOVE(MediaQueryInfo); +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_MEDIA_QUERY_MEDIA_QUERY_INFO_H diff --git a/frameworks/bridge/common/utils/class_utils.h b/frameworks/bridge/common/utils/class_utils.h new file mode 100644 index 00000000..fba1a5da --- /dev/null +++ b/frameworks/bridge/common/utils/class_utils.h @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_UTILS_CLASS_UTILS_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_UTILS_CLASS_UTILS_H + +#define DEFINE_HAS_METHOD(method) \ + template \ + class internal_has_##method { \ + template \ + static std::true_type checkHas(decltype(&ClassTest::method)); \ + template \ + static std::false_type checkHas(...); \ + \ + public: \ + enum { value = std::is_same(0)), std::true_type>::value }; \ + }; \ + \ + template \ + static inline constexpr const bool has_##method = internal_has_##method::value; + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_UTILS_CLASS_UTILS_H \ No newline at end of file diff --git a/frameworks/bridge/common/utils/function_traits.h b/frameworks/bridge/common/utils/function_traits.h new file mode 100644 index 00000000..a6db789c --- /dev/null +++ b/frameworks/bridge/common/utils/function_traits.h @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_UTILS_FUNCTION_TRAITS_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_UTILS_FUNCTION_TRAITS_H + +#include + +template +struct function_traits; + +template +struct function_traits { + static constexpr const size_t argc = sizeof...(Args); + typedef ReturnType returnType; + using ArgumentPack = std::tuple; + template + struct argv { + typedef typename std::tuple_element::type type; + }; +}; + +namespace FunctionUtils { + +template +auto CallMemberFunction(C* instance, F func, T&& tuple, std::index_sequence) +{ + return (instance->*func)(std::get(std::forward(tuple))...); +} + +template +auto CallMemberFunction(C* instance, R (C::*func)(Types...), Tuple&& tup) +{ + return CallMemberFunction(instance, func, std::forward(tup), std::make_index_sequence {}); +} + +template +T* ConstructFromTuple(Tuple&& tuple, std::index_sequence) +{ + return new T { std::get(std::forward(tuple))... }; +} + +template +T* ConstructFromTuple(Tuple&& tuple) +{ + return ConstructFromTuple( + std::forward(tuple), std::make_index_sequence>::value> {}); +} + +}; // namespace FunctionUtils + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_UTILS_FUNCTION_TRAITS_H \ No newline at end of file diff --git a/frameworks/bridge/common/utils/page_id_pool.h b/frameworks/bridge/common/utils/page_id_pool.h new file mode 100644 index 00000000..4a7f104c --- /dev/null +++ b/frameworks/bridge/common/utils/page_id_pool.h @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_UTILS_PAGE_ID_POOL_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_UTILS_PAGE_ID_POOL_H + +#include +#include + +#include "base/utils/noncopyable.h" + +namespace OHOS::Ace::Framework { + +inline constexpr int32_t INVALID_PAGE_ID = -1; +inline constexpr int32_t MAX_PAGE_ID_SIZE = sizeof(uint64_t) * 8; + +class PageIdPool final : private NonCopyable { +public: + int32_t GenerateNextPageId() + { + for (int32_t idx = 0; idx < MAX_PAGE_ID_SIZE; ++idx) { + uint64_t bitMask = (1ULL << idx); + if ((bitMask & pageIdPool_.fetch_or(bitMask, std::memory_order_relaxed)) == 0) { + return idx; + } + } + return INVALID_PAGE_ID; + } + + void RecyclePageId(int32_t pageId) + { + if (pageId < 0 || pageId >= MAX_PAGE_ID_SIZE) { + return; + } + uint64_t bitMask = (1ULL << pageId); + pageIdPool_.fetch_and(~bitMask, std::memory_order_relaxed); + } + +private: + std::atomic pageIdPool_ = 0; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_UTILS_PAGE_ID_POOL_H diff --git a/frameworks/bridge/common/utils/source_map.cpp b/frameworks/bridge/common/utils/source_map.cpp new file mode 100644 index 00000000..a5cf39f4 --- /dev/null +++ b/frameworks/bridge/common/utils/source_map.cpp @@ -0,0 +1,249 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/utils/source_map.h" + +#include +#include + +namespace OHOS::Ace::Framework { + +const char SOURCES[] = "sources"; +const char NAMES[] = "names"; +const char MAPPINGS[] = "mappings"; +const char FILE[] = "file"; +const char SOURCE_CONTENT[] = "sourceContent"; +const char SOURCE_ROOT[] = "sourceRoot"; +const char DELIMITER_COMMA = ','; +const char DELIMITER_SEMICOLON = ';'; +const char DOUBLE_SLASH = '\\'; + +MappingInfo RevSourceMap::Find(int32_t row, int32_t col) +{ + if (row < 1 || col < 1) { + LOGE("the input pos is wrong"); + return MappingInfo {}; + } + row--; + col--; + // binary search + int32_t left = 0; + int32_t right = afterPos_.size() - 1; + int32_t res = 0; + if (row > afterPos_[afterPos_.size() - 1].afterRow) { + return MappingInfo { row + 1, col + 1, files_[0] }; + } + while (right - left >= 0) { + int32_t mid = (right + left) / 2; + if (afterPos_[mid].afterRow == row && (afterPos_[mid].afterColumn > col || afterPos_[mid].afterRow > row)) { + right = mid - 1; + } else { + res = mid; + left = mid + 1; + } + } + return MappingInfo { + .row = afterPos_[res].beforeRow + 1, + .col = afterPos_[res].beforeColumn + 1, + .sources = sources_[afterPos_[res].sourcesVal] + }; +}; + +void RevSourceMap::ExtractKeyInfo(const std::string& sourceMap, std::vector& sourceKeyInfo) +{ + uint32_t cnt = 0; + std::string tempStr; + for (uint32_t i = 0; i < sourceMap.size(); i++) { + // reslove json file + if (sourceMap[i] == DOUBLE_SLASH) { + i++; + tempStr += sourceMap[i]; + continue; + } + // cnt is used to represent a pair of double quotation marks: "" + if (sourceMap[i] == '"') { + cnt++; + } + if (cnt == 2) { + sourceKeyInfo.push_back(tempStr); + tempStr = ""; + cnt = 0; + } else if (cnt == 1) { + if (sourceMap[i] != '"') { + tempStr += sourceMap[i]; + } + } + } +} + +void RevSourceMap::Init(const std::string& sourceMap) +{ + std::vector sourceKeyInfo; + std::string mark = ""; + + ExtractKeyInfo(sourceMap, sourceKeyInfo); + + // first: find the key info and record the temp key info + // second: add the detail into the keyinfo + for (auto keyInfo : sourceKeyInfo) { + if (keyInfo == SOURCES || keyInfo == NAMES || keyInfo == MAPPINGS || keyInfo == FILE || + keyInfo == SOURCE_CONTENT || keyInfo == SOURCE_ROOT) { + // record the temp key info + mark = keyInfo; + } else if (mark == SOURCES) { + sources_.push_back(keyInfo); + } else if (mark == NAMES) { + names_.push_back(keyInfo); + } else if (mark == MAPPINGS) { + mappings_.push_back(keyInfo); + } else if (mark == FILE) { + files_.push_back(keyInfo); + } else { + continue; + } + } + + // transform to vector for mapping easily + mappings_ = HandleMappings(mappings_[0]); + + // the first bit: the column after transfering. + // the second bit: the source file. + // the third bit: the row before transfering. + // the fourth bit: the column before transfering. + // the fifth bit: the variable name. + for (const auto mapping : mappings_) { + if (mapping == ";") { + // plus a line for each semicolon + nowPos_.afterRow++, + nowPos_.afterColumn = 0; + continue; + } + // decode each mapping ";QAABC" + std::vector ans; + if (!VlqRevCode(mapping, ans)) { + LOGE("decode code fail"); + return; + } + if (ans.size() == 1) { + nowPos_.afterColumn += ans[0]; + continue; + } + // after decode, assgin each value to the position + nowPos_.afterColumn += ans[0]; + nowPos_.sourcesVal += ans[1]; + nowPos_.beforeRow += ans[2]; + nowPos_.beforeColumn += ans[3]; + if (ans.size() == 5) { + nowPos_.namesVal += ans[4]; + } + afterPos_.push_back({ + nowPos_.beforeRow, + nowPos_.beforeColumn, + nowPos_.afterRow, + nowPos_.afterColumn, + nowPos_.sourcesVal, + nowPos_.namesVal + }); + } + mappings_.clear(); + mappings_.shrink_to_fit(); + sourceKeyInfo.clear(); + sourceKeyInfo.shrink_to_fit(); +}; + +std::vector RevSourceMap::HandleMappings(const std::string& mapping) +{ + std::vector keyInfo; + std::string tempStr; + for (uint32_t i = 0; i < mapping.size(); i++) { + if (mapping[i] == DELIMITER_COMMA) { + keyInfo.push_back(tempStr); + tempStr = ""; + } else if (mapping[i] == DELIMITER_SEMICOLON) { + if (tempStr != "") { + keyInfo.push_back(tempStr); + } + tempStr = ""; + keyInfo.push_back(";"); + } else { + tempStr += mapping[i]; + } + } + if (tempStr != "") { + keyInfo.push_back(tempStr); + } + return keyInfo; +}; + +uint32_t RevSourceMap::Base64CharToInt(char charCode) +{ + if ('A' <= charCode && charCode <= 'Z') { + // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ + return charCode - 'A'; + } else if ('a' <= charCode && charCode <= 'z') { + // 26 - 51: abcdefghijklmnopqrstuvwxyz + return charCode - 'a' + 26; + } else if ('0' <= charCode && charCode <= '9') { + // 52 - 61: 0123456789 + return charCode - '0' + 52; + } else if (charCode == '+') { + // 62: + + return 62; + } else if (charCode == '/') { + // 63: / + return 63; + } + return 64; +}; + +bool RevSourceMap::VlqRevCode(const std::string& vStr, std::vector& ans) +{ + const int32_t VLQ_BASE_SHIFT = 5; + // binary: 100000 + uint32_t VLQ_BASE = 1 << VLQ_BASE_SHIFT; + // binary: 011111 + uint32_t VLQ_BASE_MASK = VLQ_BASE - 1; + // binary: 100000 + uint32_t VLQ_CONTINUATION_BIT = VLQ_BASE; + uint32_t result = 0; + uint32_t shift = 0; + bool continuation = 0; + for (uint32_t i = 0; i < vStr.size(); i++) { + uint32_t digit = Base64CharToInt(vStr[i]); + if (digit == 64) { + LOGE("the arg is error"); + return false; + } + continuation = digit & VLQ_CONTINUATION_BIT; + digit &= VLQ_BASE_MASK; + result += digit << shift; + if (continuation) { + shift += VLQ_BASE_SHIFT; + } else { + bool isNegate = result & 1; + result >>= 1; + ans.push_back(isNegate ? -result : result); + result = 0; + shift = 0; + } + } + if (continuation) { + LOGE("the arg is error"); + return false; + }; + return true; +}; + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/common/utils/source_map.h b/frameworks/bridge/common/utils/source_map.h new file mode 100644 index 00000000..defbe2a4 --- /dev/null +++ b/frameworks/bridge/common/utils/source_map.h @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_UTILS_SOURCE_MAP_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_UTILS_SOURCE_MAP_H + +#include +#include + +#include "base/log/log.h" +#include "base/memory/referenced.h" +#include "base/utils/macros.h" + +namespace OHOS::Ace::Framework { + +struct SourceMapInfo { + int32_t beforeRow = 0; + int32_t beforeColumn = 0; + int32_t afterRow = 0; + int32_t afterColumn = 0; + int32_t sourcesVal = 0; + int32_t namesVal = 0; +}; + +struct MappingInfo { + int32_t row = 0; + int32_t col = 0; + std::string sources; + const std::string ToString() + { + return "(" + sources + ":" + std::to_string(row) + ")"; + } +}; + +class ACE_EXPORT RevSourceMap final : public Referenced { +public: + MappingInfo Find(int32_t row, int32_t col); + void ExtractKeyInfo(const std::string& sourceMap, std::vector& sourceKeyInfo); + void Init(const std::string& sourceMap); + +private: + SourceMapInfo nowPos_; + std::vector files_; + std::vector sources_; + std::vector names_; + std::vector mappings_; + std::vector afterPos_; + + std::vector HandleMappings(const std::string& mapping); + uint32_t Base64CharToInt(char charCode); + bool VlqRevCode(const std::string& vStr, std::vector& ans); +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_UTILS_SOURCE_MAP_H diff --git a/frameworks/bridge/common/utils/utils.cpp b/frameworks/bridge/common/utils/utils.cpp new file mode 100644 index 00000000..51ce319f --- /dev/null +++ b/frameworks/bridge/common/utils/utils.cpp @@ -0,0 +1,301 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/common/utils/utils.h" + +#include + +#include "base/utils/string_utils.h" + +namespace OHOS::Ace::Framework { + +namespace { + +using CustomCurveCreator = RefPtr (*)(const std::vector&); + +const size_t STEPS_PARAMS_SIZE = 2; +const size_t CUBIC_PARAMS_SIZE = 4; + +static const std::unordered_set HORIZON_SET = { + DOM_BACKGROUND_IMAGE_POSITION_LEFT, + DOM_BACKGROUND_IMAGE_POSITION_RIGHT, +}; +static const std::unordered_set VERTICAL_SET = { + DOM_BACKGROUND_IMAGE_POSITION_TOP, + DOM_BACKGROUND_IMAGE_POSITION_BOTTOM, +}; + +RefPtr StepsCurveCreator(const std::vector& params) +{ + if (params.empty() || params.size() > STEPS_PARAMS_SIZE) { + LOGE("steps curve accept 1 or 2 parameter(s), current size is %zu.", params.size()); + return nullptr; + } + auto step = StringUtils::StringToInt(params.front()); + if (step <= 0) { + LOGE("step number is illegal: %{public}d", step); + return nullptr; + } + StepsCurvePosition position = StepsCurvePosition::END; + if (params.size() > 1) { + if (params.back() == "start") { + position = StepsCurvePosition::START; + } else if (params.back() == "end") { + position = StepsCurvePosition::END; + } else { + LOGE("step position is illegal: %{public}s", params.back().c_str()); + return nullptr; + } + } + return AceType::MakeRefPtr(step, position); +} + +RefPtr CubicCurveCreator(const std::vector& params) +{ + if (params.size() != CUBIC_PARAMS_SIZE) { + LOGE("cubic curve accept 4 parameters"); + return nullptr; + } + double x1 = StringToDouble(params.at(0)); + double y1 = StringToDouble(params.at(1)); + double x2 = StringToDouble(params.at(2)); + double y2 = StringToDouble(params.at(3)); + return AceType::MakeRefPtr(x1, y1, x2, y2); +} + +void SetBgImgPositionX( + const BackgroundImagePositionType type, const double value, BackgroundImagePosition& bgImgPosition) +{ + bgImgPosition.SetSizeTypeX(type); + bgImgPosition.SetSizeValueX(value); +} + +void SetBgImgPositionY( + const BackgroundImagePositionType type, const double value, BackgroundImagePosition& bgImgPosition) +{ + bgImgPosition.SetSizeTypeY(type); + bgImgPosition.SetSizeValueY(value); +} + +void SetBgImgPosition( + const BackgroundImagePositionType type, const double value, BackgroundImagePosition& bgImgPosition) +{ + SetBgImgPositionX(type, value, bgImgPosition); + SetBgImgPositionY(type, value, bgImgPosition); +} + +void GetOffsetValue(std::vector offsets, std::string& posX, std::string& posY) +{ + if (offsets.size() == 1) { + posX = offsets.front(); + if (VERTICAL_SET.find(posX) != VERTICAL_SET.end()) { + posY = offsets.front(); + posX = DOM_BACKGROUND_IMAGE_POSITION_CENTER; + } else { + posY = DOM_BACKGROUND_IMAGE_POSITION_CENTER; + } + } else { + posX = offsets.front(); + posY = offsets.back(); + if (VERTICAL_SET.find(posX) != VERTICAL_SET.end() && HORIZON_SET.find(posY) != HORIZON_SET.end()) { + posY = offsets.front(); + posX = offsets.back(); + } + } +} + +bool BgImgPositionIsValid(const std::string& posX, const std::string& posY) +{ + if ((posX == DOM_BACKGROUND_IMAGE_POSITION_CENTER) || (posY == DOM_BACKGROUND_IMAGE_POSITION_CENTER)) { + return true; + } + // posX and posY are not strictly corresponding to horizontal or vertical, but they must not conflict, + // for example both of them are "top" is invalid. + if (posX.find("px") != std::string::npos || posX.find('%') != std::string::npos || + HORIZON_SET.find(posX) != HORIZON_SET.end()) { + if (posY.find("px") != std::string::npos || posY.find('%') != std::string::npos || + VERTICAL_SET.find(posY) != VERTICAL_SET.end()) { + return true; + } + } + return VERTICAL_SET.find(posX) != VERTICAL_SET.end() && HORIZON_SET.find(posY) != HORIZON_SET.end(); +} + +} // namespace + +RefPtr CreateBuiltinCurve(const std::string& aniTimFunc) +{ + // this map should be sorted by key + static const LinearMapNode> aniTimFuncMap[] = { + { DOM_ANIMATION_TIMING_FUNCTION_EASE, Curves::EASE }, + { DOM_ANIMATION_TIMING_FUNCTION_EASE_IN, Curves::EASE_IN }, + { DOM_ANIMATION_TIMING_FUNCTION_EASE_IN_OUT, Curves::EASE_IN_OUT }, + { DOM_ANIMATION_TIMING_FUNCTION_EASE_OUT, Curves::EASE_OUT }, + { DOM_ANIMATION_TIMING_FUNCTION_EXTREME_DECELERATION, Curves::EXTREME_DECELERATION }, + { DOM_ANIMATION_TIMING_FUNCTION_FAST_OUT_LINEAR_IN, Curves::FAST_OUT_LINEAR_IN }, + { DOM_ANIMATION_TIMING_FUNCTION_FAST_OUT_SLOW_IN, Curves::FAST_OUT_SLOW_IN }, + { DOM_ANIMATION_TIMING_FUNCTION_FRICTION, Curves::FRICTION }, + { DOM_ANIMATION_TIMING_FUNCTION_LINEAR, Curves::LINEAR }, + { DOM_ANIMATION_TIMING_FUNCTION_LINEAR_OUT_SLOW_IN, Curves::LINEAR_OUT_SLOW_IN }, + { DOM_ANIMATION_TIMING_FUNCTION_RHYTHM, Curves::RHYTHM }, + { DOM_ANIMATION_TIMING_FUNCTION_SHARP, Curves::SHARP }, + { DOM_ANIMATION_TIMING_FUNCTION_SMOOTH, Curves::SMOOTH }, + }; + auto index = BinarySearchFindIndex(aniTimFuncMap, ArraySize(aniTimFuncMap), aniTimFunc.c_str()); + return index < 0 ? nullptr : aniTimFuncMap[index].value; +} + +RefPtr CreateCustomCurve(const std::string& aniTimFunc) +{ + if (aniTimFunc.back() != ')') { + LOGE("last character must be right embrace."); + return nullptr; + } + std::string::size_type leftEmbracePosition = aniTimFunc.find_last_of('('); + if (leftEmbracePosition == std::string::npos) { + LOGE("left embrace not found."); + return nullptr; + } + auto aniTimFuncName = aniTimFunc.substr(0, leftEmbracePosition); + auto params = aniTimFunc.substr(leftEmbracePosition + 1, aniTimFunc.length() - leftEmbracePosition - 2); + if (aniTimFuncName.empty() || params.empty()) { + LOGE("no easing function name, or no parameters."); + return nullptr; + } + std::vector paramsVector; + StringUtils::StringSpliter(params, ',', paramsVector); + for (auto& param : paramsVector) { + RemoveHeadTailSpace(param); + } + static const LinearMapNode customCurveMap[] = { + { DOM_ANIMATION_TIMING_FUNCTION_CUBIC_BEZIER, CubicCurveCreator }, + { DOM_ANIMATION_TIMING_FUNCTION_STEPS, StepsCurveCreator }, + }; + int64_t index = BinarySearchFindIndex(customCurveMap, ArraySize(customCurveMap), aniTimFuncName.c_str()); + if (index < 0) { + LOGE("no valid creator found for easing function: %{public}s", aniTimFuncName.c_str()); + return nullptr; + } + return customCurveMap[index].value(paramsVector); +} + +RefPtr CreateCurve(const std::string& aniTimFunc) +{ + auto curve = CreateBuiltinCurve(aniTimFunc); + if (curve) { + return curve; + } + curve = CreateCustomCurve(aniTimFunc); + if (curve) { + return curve; + } + return Curves::EASE; +} + +GradientDirection StrToGradientDirectionCorner(const std::string& horizontal, const std::string& vertical) +{ + static const std::vector> directionCornerVec = { + std::make_tuple(DOM_GRADIENT_DIRECTION_TOP, DOM_GRADIENT_DIRECTION_LEFT, GradientDirection::LEFT_TOP), + std::make_tuple(DOM_GRADIENT_DIRECTION_LEFT, DOM_GRADIENT_DIRECTION_TOP, GradientDirection::LEFT_TOP), + std::make_tuple(DOM_GRADIENT_DIRECTION_TOP, DOM_GRADIENT_DIRECTION_RIGHT, GradientDirection::RIGHT_TOP), + std::make_tuple(DOM_GRADIENT_DIRECTION_RIGHT, DOM_GRADIENT_DIRECTION_TOP, GradientDirection::RIGHT_TOP), + std::make_tuple(DOM_GRADIENT_DIRECTION_BOTTOM, DOM_GRADIENT_DIRECTION_LEFT, GradientDirection::LEFT_BOTTOM), + std::make_tuple(DOM_GRADIENT_DIRECTION_LEFT, DOM_GRADIENT_DIRECTION_BOTTOM, GradientDirection::LEFT_BOTTOM), + std::make_tuple(DOM_GRADIENT_DIRECTION_BOTTOM, DOM_GRADIENT_DIRECTION_RIGHT, GradientDirection::RIGHT_BOTTOM), + std::make_tuple(DOM_GRADIENT_DIRECTION_RIGHT, DOM_GRADIENT_DIRECTION_BOTTOM, GradientDirection::RIGHT_BOTTOM), + }; + + auto iter = + find_if(directionCornerVec.begin(), directionCornerVec.end(), [&horizontal, &vertical](const auto& item) { + return std::get<0>(item) == horizontal && std::get<1>(item) == vertical; + }); + return iter != directionCornerVec.end() ? std::get(*iter) : GradientDirection::BOTTOM; +} + +// Support keyword values / percentage/px values. Do not support multiple images and edge offsets values. +bool ParseBackgroundImagePosition(const std::string& value, BackgroundImagePosition& backgroundImagePosition) +{ + static const LinearMapNode backGroundPositionOperators[] = { + { DOM_BACKGROUND_IMAGE_POSITION_BOTTOM, + [](BackgroundImagePosition& backgroundImagePosition) { + SetBgImgPositionY(BackgroundImagePositionType::PERCENT, 100.0, backgroundImagePosition); + } }, + { DOM_BACKGROUND_IMAGE_POSITION_LEFT, + [](BackgroundImagePosition& backgroundImagePosition) { + SetBgImgPositionX(BackgroundImagePositionType::PERCENT, 0.0, backgroundImagePosition); + } }, + { DOM_BACKGROUND_IMAGE_POSITION_RIGHT, + [](BackgroundImagePosition& backgroundImagePosition) { + SetBgImgPositionX(BackgroundImagePositionType::PERCENT, 100.0, backgroundImagePosition); + } }, + { DOM_BACKGROUND_IMAGE_POSITION_TOP, + [](BackgroundImagePosition& backgroundImagePosition) { + SetBgImgPositionY(BackgroundImagePositionType::PERCENT, 0.0, backgroundImagePosition); + } }, + }; + + std::vector offsets; + StringUtils::StringSpliter(value, ' ', offsets); + if (!offsets.empty()) { + std::string valueX = ""; + std::string valueY = ""; + GetOffsetValue(offsets, valueX, valueY); + if (!BgImgPositionIsValid(valueX, valueY)) { + return false; + } + // The input is valid,so set the default is (center,center), + // if the value is different, the default value is overwritten. + // the center value is 50%. + SetBgImgPosition(BackgroundImagePositionType::PERCENT, 50.0, backgroundImagePosition); + if (valueX.find("px") != std::string::npos) { + SetBgImgPositionX(BackgroundImagePositionType::PX, StringToDouble(valueX), backgroundImagePosition); + } else if (valueX.find('%') != std::string::npos) { + SetBgImgPositionX(BackgroundImagePositionType::PERCENT, StringToDouble(valueX), backgroundImagePosition); + } else { + auto operatorIterX = BinarySearchFindIndex( + backGroundPositionOperators, ArraySize(backGroundPositionOperators), valueX.c_str()); + if (operatorIterX != -1) { + backGroundPositionOperators[operatorIterX].value(backgroundImagePosition); + } + } + if (valueY.find("px") != std::string::npos) { + SetBgImgPositionY(BackgroundImagePositionType::PX, StringToDouble(valueY), backgroundImagePosition); + } else if (valueY.find('%') != std::string::npos) { + SetBgImgPositionY(BackgroundImagePositionType::PERCENT, StringToDouble(valueY), backgroundImagePosition); + } else { + auto operatorIterY = BinarySearchFindIndex( + backGroundPositionOperators, ArraySize(backGroundPositionOperators), valueY.c_str()); + if (operatorIterY != -1) { + backGroundPositionOperators[operatorIterY].value(backgroundImagePosition); + } + } + } else { + SetBgImgPosition(BackgroundImagePositionType::PERCENT, 50.0, backgroundImagePosition); + if (value.find("px") != std::string::npos) { + SetBgImgPositionX(BackgroundImagePositionType::PX, StringToDouble(value), backgroundImagePosition); + } else if (value.find('%') != std::string::npos) { + SetBgImgPositionX(BackgroundImagePositionType::PERCENT, StringToDouble(value), backgroundImagePosition); + } else { + auto operatorIter = BinarySearchFindIndex( + backGroundPositionOperators, ArraySize(backGroundPositionOperators), value.c_str()); + if (operatorIter != -1) { + backGroundPositionOperators[operatorIter].value(backgroundImagePosition); + } + } + } + return true; +} + +} // namespace OHOS::Ace::Framework \ No newline at end of file diff --git a/frameworks/bridge/common/utils/utils.h b/frameworks/bridge/common/utils/utils.h new file mode 100644 index 00000000..6dddec67 --- /dev/null +++ b/frameworks/bridge/common/utils/utils.h @@ -0,0 +1,376 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_UTILS_UTILS_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_UTILS_UTILS_H + +#include +#include +#include +#include +#include +#include + +#include "base/geometry/axis.h" +#include "base/json/json_util.h" +#include "base/log/log.h" +#include "base/resource/asset_manager.h" +#include "base/utils/linear_map.h" +#include "base/utils/string_utils.h" +#include "base/utils/utils.h" +#include "core/animation/animation_pub.h" +#include "core/animation/curve.h" +#include "core/animation/curves.h" +#include "core/components/common/layout/constants.h" +#include "core/components/common/properties/decoration.h" +#include "core/components/common/properties/text_style.h" +#include "frameworks/bridge/common/dom/dom_type.h" + +namespace OHOS::Ace::Framework { + +constexpr int32_t OFFSET_VALUE_NUMBER = 2; + +template +bool GetAssetContentImpl(const RefPtr& assetManager, const std::string& url, T& content) +{ + if (!assetManager) { + LOGE("AssetManager is null"); + return false; + } + auto jsAsset = assetManager->GetAsset(url); + if (jsAsset == nullptr) { + LOGE("uri:%{private}s Asset is null", url.c_str()); + return false; + } + auto bufLen = jsAsset->GetSize(); + auto buffer = jsAsset->GetData(); + if ((buffer == nullptr) || (bufLen <= 0)) { + LOGE("uri:%{private}s buffer is null", url.c_str()); + return false; + } + content.assign(buffer, buffer + bufLen); + return true; +} + +inline std::unique_ptr ParseFileData(const std::string& data) +{ + const char* endMsg = nullptr; + auto fileData = JsonUtil::ParseJsonString(data, &endMsg); + if (!fileData) { + LOGE("parse i18n data failed, error: %{private}s", endMsg); + return nullptr; + } + return fileData; +} + +inline double StringToDouble(const std::string& value) +{ + return StringUtils::StringToDouble(value); +} + +inline Dimension StringToDimension(const std::string& value) +{ + return StringUtils::StringToDimension(value); +} + +inline int32_t StringToInt(const std::string& value) +{ + return StringUtils::StringToInt(value); +} + +inline bool StringToBool(const std::string& value) +{ + return value == "true"; +} + +inline BorderStyle ConvertStrToBorderStyle(const std::string& style) +{ + static const LinearMapNode borderStyleTable[] = { + { "dashed", BorderStyle::DASHED }, + { "dotted", BorderStyle::DOTTED }, + { "solid", BorderStyle::SOLID }, + }; + + auto index = BinarySearchFindIndex(borderStyleTable, ArraySize(borderStyleTable), style.c_str()); + return index < 0 ? BorderStyle::NONE : borderStyleTable[index].value; +} + +inline BadgePosition ConvertStrToBadgePosition(const std::string& badgePosition) +{ + static const LinearMapNode badgePositionTable[] = { + { "left", BadgePosition::LEFT }, + { "right", BadgePosition::RIGHT }, + { "rightTop", BadgePosition::RIGHT_TOP }, + }; + auto index = BinarySearchFindIndex(badgePositionTable, ArraySize(badgePositionTable), badgePosition.c_str()); + return index < 0 ? BadgePosition::RIGHT_TOP : badgePositionTable[index].value; +} + +inline ImageRepeat ConvertStrToImageRepeat(const std::string& repeat) +{ + static const LinearMapNode imageRepeatTable[] = { + { "no-repeat", ImageRepeat::NOREPEAT }, + { "repeat", ImageRepeat::REPEAT }, + { "repeat-x", ImageRepeat::REPEATX }, + { "repeat-y", ImageRepeat::REPEATY }, + }; + + auto index = BinarySearchFindIndex(imageRepeatTable, ArraySize(imageRepeatTable), repeat.c_str()); + return index < 0 ? ImageRepeat::NOREPEAT : imageRepeatTable[index].value; +} + +inline FontWeight ConvertStrToFontWeight(const std::string& weight) +{ + return StringUtils::StringToFontWeight(weight); +} + +inline TextDecoration ConvertStrToTextDecoration(const std::string& textDecoration) +{ + // this map should be sorted bu key. + static const LinearMapNode textDecorationTable[] = { + { DOM_TEXT_DECORATION_INHERIT, TextDecoration::INHERIT }, + { DOM_TEXT_DECORATION_LINETHROUGH, TextDecoration::LINE_THROUGH }, + { DOM_TEXT_DECORATION_NONE, TextDecoration::NONE }, + { DOM_TEXT_DECORATION_OVERLINE, TextDecoration::OVERLINE }, + { DOM_TEXT_DECORATION_UNDERLINE, TextDecoration::UNDERLINE }, + }; + + auto index = BinarySearchFindIndex(textDecorationTable, ArraySize(textDecorationTable), textDecoration.c_str()); + return index < 0 ? TextDecoration::NONE : textDecorationTable[index].value; +} + +inline FontStyle ConvertStrToFontStyle(const std::string& fontStyle) +{ + return fontStyle == DOM_TEXT_FONT_STYLE_ITALIC ? FontStyle::ITALIC : FontStyle::NORMAL; +} + +inline TextAlign ConvertStrToTextAlign(const std::string& align) +{ + static const LinearMapNode textAlignTable[] = { + { DOM_CENTER, TextAlign::CENTER }, + { DOM_END, TextAlign::END }, + { DOM_LEFT, TextAlign::LEFT }, + { DOM_RIGHT, TextAlign::RIGHT }, + { DOM_START, TextAlign::START }, + }; + + auto index = BinarySearchFindIndex(textAlignTable, ArraySize(textAlignTable), align.c_str()); + return index < 0 ? TextAlign::CENTER : textAlignTable[index].value; +} + +inline TextOverflow ConvertStrToTextOverflow(const std::string& overflow) +{ + return overflow == DOM_ELLIPSIS ? TextOverflow::ELLIPSIS : TextOverflow::CLIP; +} + +inline Overflow ConvertStrToOverflow(const std::string& val) +{ + const LinearMapNode overflowTable[] = { + { "hidden", Overflow::CLIP }, + { "scroll", Overflow::SCROLL }, + { "visible", Overflow::OBSERVABLE }, + }; + auto index = BinarySearchFindIndex(overflowTable, ArraySize(overflowTable), val.c_str()); + return index < 0 ? Overflow::OBSERVABLE : overflowTable[index].value; +} + +inline std::vector ConvertStrToFontFamilies(const std::string& family) +{ + std::vector fontFamilies; + std::stringstream stream(family); + std::string fontFamily; + while (getline(stream, fontFamily, ',')) { + fontFamilies.emplace_back(fontFamily); + } + return fontFamilies; +} + +inline FlexDirection ConvertStrToFlexDirection(const std::string& flexKey) +{ + return flexKey == DOM_FLEX_COLUMN ? FlexDirection::COLUMN : FlexDirection::ROW; +} + +inline FlexAlign ConvertStrToFlexAlign(const std::string& flexKey) +{ + static const LinearMapNode flexMap[] = { + { DOM_ALIGN_ITEMS_BASELINE, FlexAlign::BASELINE }, + { DOM_JUSTIFY_CONTENT_CENTER, FlexAlign::CENTER }, + { DOM_JUSTIFY_CONTENT_END, FlexAlign::FLEX_END }, + { DOM_JUSTIFY_CONTENT_START, FlexAlign::FLEX_START }, + { DOM_JUSTIFY_CONTENT_AROUND, FlexAlign::SPACE_AROUND }, + { DOM_JUSTIFY_CONTENT_BETWEEN, FlexAlign::SPACE_BETWEEN }, + { DOM_JUSTIFY_CONTENT_EVENLY, FlexAlign::SPACE_EVENLY }, + { DOM_ALIGN_ITEMS_STRETCH, FlexAlign::STRETCH }, + }; + auto index = BinarySearchFindIndex(flexMap, ArraySize(flexMap), flexKey.c_str()); + return index < 0 ? FlexAlign::FLEX_START : flexMap[index].value; +} + +inline Offset ConvertStrToOffset(const std::string& value) +{ + Offset offset; + std::vector offsetValues; + std::stringstream stream(value); + std::string offsetValue; + while (getline(stream, offsetValue, ' ')) { + offsetValues.emplace_back(offsetValue); + } + // To avoid illegal input, such as "100px ". + offsetValues.resize(OFFSET_VALUE_NUMBER); + offset.SetX(StringToDouble(offsetValues[0])); + offset.SetY(StringToDouble(offsetValues[1])); + return offset; +} + +inline QrcodeType ConvertStrToQrcodeType(const std::string& value) +{ + return value == "circle" ? QrcodeType::CIRCLE : QrcodeType::RECT; +} + +inline AnimationCurve ConvertStrToAnimationCurve(const std::string& value) +{ + return value == "standard" ? AnimationCurve::STANDARD : AnimationCurve::FRICTION; +} + +RefPtr CreateBuiltinCurve(const std::string& aniTimFunc); + +RefPtr CreateCustomCurve(const std::string& aniTimFunc); + +ACE_EXPORT RefPtr CreateCurve(const std::string& aniTimFunc); + +inline FillMode StringToFillMode(const std::string& fillMode) +{ + if (fillMode == DOM_ANIMATION_FILL_MODE_FORWARDS) { + return FillMode::FORWARDS; + } else if (fillMode == DOM_ANIMATION_FILL_MODE_BACKWARDS) { + return FillMode::BACKWARDS; + } else if (fillMode == DOM_ANIMATION_FILL_MODE_BOTH) { + return FillMode::BOTH; + } else { + return FillMode::NONE; + } +} + +inline AnimationDirection StringToAnimationDirection(const std::string& direction) +{ + if (direction == DOM_ANIMATION_DIRECTION_ALTERNATE) { + return AnimationDirection::ALTERNATE; + } else if (direction == DOM_ANIMATION_DIRECTION_REVERSE) { + return AnimationDirection::REVERSE; + } else if (direction == DOM_ANIMATION_DIRECTION_ALTERNATE_REVERSE) { + return AnimationDirection::ALTERNATE_REVERSE; + } else { + return AnimationDirection::NORMAL; + } +} + +inline void RemoveHeadTailSpace(std::string& value) +{ + if (!value.empty()) { + auto start = value.find_first_not_of(' '); + if (start == std::string::npos) { + value.clear(); + } else { + value = value.substr(start, value.find_last_not_of(' ') - start + 1); + } + } +} + +inline GradientDirection StrToGradientDirection(const std::string& direction) +{ + static const LinearMapNode gradientDirectionTable[] = { + { DOM_GRADIENT_DIRECTION_LEFT, GradientDirection::LEFT }, + { DOM_GRADIENT_DIRECTION_RIGHT, GradientDirection::RIGHT }, + { DOM_GRADIENT_DIRECTION_TOP, GradientDirection::TOP }, + }; + + auto index = BinarySearchFindIndex(gradientDirectionTable, ArraySize(gradientDirectionTable), direction.c_str()); + return index < 0 ? GradientDirection::BOTTOM : gradientDirectionTable[index].value; +} + +GradientDirection StrToGradientDirectionCorner(const std::string& horizontal, const std::string& vertical); + +bool ParseBackgroundImagePosition(const std::string& value, BackgroundImagePosition& backgroundImagePosition); + +inline bool StartWith(const std::string& dst, const std::string& prefix) +{ + return dst.compare(0, prefix.size(), prefix) == 0; +} + +inline bool EndWith(const std::string& dst, const std::string& suffix) +{ + return dst.size() >= suffix.size() && dst.compare(dst.size() - suffix.size(), suffix.size(), suffix) == 0; +} + +inline double ConvertTimeStr(const std::string& str) +{ + std::string time(str); + StringUtils::TrimStr(time); + double result = 0.0; + if (EndWith(time, "ms")) { + result = StringToDouble(std::string(time.begin(), time.end() - 2.0)); + } else if (EndWith(time, "s")) { + result = StringToDouble(std::string(time.begin(), time.end() - 1.0)) * 1000.0; + } else if (EndWith(time, "m")) { + result = StringToDouble(std::string(time.begin(), time.end() - 1.0)) * 60.0 * 1000.0; + } else { + result = StringToDouble(str); + } + return result; +} + +inline WordBreak ConvertStrToWordBreak(const std::string& wordBreak) +{ + return StringUtils::StringToWordBreak(wordBreak); +} + +inline bool CheckTransformEnum(const std::string& str) +{ + const static std::unordered_set offsetKeywords = { "left", "right", "center", "top", "bottom" }; + + return offsetKeywords.find(str) != offsetKeywords.end(); +} + +inline std::pair ConvertStrToTransformOrigin(const std::string& str, Axis axis) +{ + const static std::unordered_map xOffsetKeywords = { + { "left", 0.0_pct }, + { "right", 1.0_pct }, + { "center", 0.5_pct }, + }; + const static std::unordered_map yOffsetKeywords = { + { "top", 0.0_pct }, + { "bottom", 1.0_pct }, + { "center", 0.5_pct }, + }; + + if (axis == Axis::HORIZONTAL) { + auto pos = xOffsetKeywords.find(str); + if (pos != xOffsetKeywords.end()) { + return std::make_pair(true, pos->second); + } + } else if (axis == Axis::VERTICAL) { + auto pos = yOffsetKeywords.find(str); + if (pos != yOffsetKeywords.end()) { + return std::make_pair(true, pos->second); + } + } + + return std::make_pair(false, Dimension {}); +} + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_COMMON_UTILS_UTILS_H diff --git a/frameworks/bridge/declarative_frontend/declarative_frontend.cpp b/frameworks/bridge/declarative_frontend/declarative_frontend.cpp new file mode 100644 index 00000000..68a3e538 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/declarative_frontend.cpp @@ -0,0 +1,666 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/declarative_frontend/declarative_frontend.h" + +#include + +#include "base/log/dump_log.h" +#include "base/log/event_report.h" +#include "core/components/navigator/navigator_component.h" + +namespace OHOS::Ace { +namespace { + +/* + * NOTE: + * This function is needed to copy the values from BaseEventInfo + * It is observed, that the owner of BaseEventInfo will delete the pointer before it is ultimately + * processed by the EventMarker callback. In order to avoid this, a copy of all data needs to be made. + */ +std::shared_ptr CopyEventInfo(const BaseEventInfo& info) +{ + const auto* touchInfo = TypeInfoHelper::DynamicCast(&info); + if (touchInfo != nullptr) { + return std::make_shared(*touchInfo); + } + + const auto* dragStartInfo = TypeInfoHelper::DynamicCast(&info); + if (dragStartInfo != nullptr) { + return std::make_shared(*dragStartInfo); + } + + const auto* dragUpdateInfo = TypeInfoHelper::DynamicCast(&info); + if (dragUpdateInfo != nullptr) { + return std::make_shared(*dragUpdateInfo); + } + + const auto* dragEndInfo = TypeInfoHelper::DynamicCast(&info); + if (dragEndInfo != nullptr) { + return std::make_shared(*dragEndInfo); + } + + const auto* clickInfo = TypeInfoHelper::DynamicCast(&info); + if (clickInfo != nullptr) { + return std::make_shared(*clickInfo); + } + return nullptr; +} + +void TouchInfoToString(const BaseEventInfo& info, std::string& eventParam) +{ + eventParam.append("{\"touches\":[{"); + const auto touchInfo = TypeInfoHelper::DynamicCast(&info); + if (touchInfo) { + auto touchList = touchInfo->GetTouches(); + for (const auto& location : touchList) { + auto globalLocation = location.GetGlobalLocation(); + eventParam.append("\"globalX\":") + .append(std::to_string(globalLocation.GetX())) + .append(",\"globalY\":") + .append(std::to_string(globalLocation.GetY())) + .append(","); + auto localLocation = location.GetLocalLocation(); + eventParam.append("\"localX\":") + .append(std::to_string(localLocation.GetX())) + .append(",\"localY\":") + .append(std::to_string(localLocation.GetY())) + .append(","); + eventParam.append("\"size\":").append(std::to_string(location.GetSize())).append(","); + } + if (eventParam.back() == ',') { + eventParam.pop_back(); + } + eventParam.append("}],\"changedTouches\":[{"); + auto changeTouch = touchInfo->GetChangedTouches(); + for (const auto& change : changeTouch) { + auto globalLocation = change.GetGlobalLocation(); + eventParam.append("\"globalX\":") + .append(std::to_string(globalLocation.GetX())) + .append(",\"globalY\":") + .append(std::to_string(globalLocation.GetY())) + .append(","); + auto localLocation = change.GetLocalLocation(); + eventParam.append("\"localX\":") + .append(std::to_string(localLocation.GetX())) + .append(",\"localY\":") + .append(std::to_string(localLocation.GetY())) + .append(","); + eventParam.append("\"size\":").append(std::to_string(change.GetSize())).append(","); + } + if (eventParam.back() == ',') { + eventParam.pop_back(); + } + } + eventParam.append("}]}"); +} + +void MouseInfoToString(const BaseEventInfo& info, std::string& eventParam) +{ + const auto mouseInfo = TypeInfoHelper::DynamicCast(&info); + eventParam.append("{\"mouse\":{"); + if (mouseInfo) { + auto globalMouse = mouseInfo->GetGlobalMouse(); + eventParam.append("\"globalX\":") + .append(std::to_string(globalMouse.x)) + .append(",\"globalY\":") + .append(std::to_string(globalMouse.y)) + .append(",\"globalZ\":") + .append(std::to_string(globalMouse.z)) + .append(",\"localX\":") + .append(std::to_string(globalMouse.x)) + .append(",\"localY\":") + .append(std::to_string(globalMouse.y)) + .append(",\"localZ\":") + .append(std::to_string(globalMouse.z)) + .append(",\"deltaX\":") + .append(std::to_string(globalMouse.deltaX)) + .append(",\"deltaY\":") + .append(std::to_string(globalMouse.deltaY)) + .append(",\"deltaZ\":") + .append(std::to_string(globalMouse.deltaZ)) + .append(",\"scrollX\":") + .append(std::to_string(globalMouse.scrollX)) + .append(",\"scrollY\":") + .append(std::to_string(globalMouse.scrollY)) + .append(",\"scrollZ\":") + .append(std::to_string(globalMouse.scrollZ)) + .append(",\"action\":") + .append(std::to_string(static_cast(globalMouse.action))) + .append(",\"button\":") + .append(std::to_string(static_cast(globalMouse.button))) + .append(",\"pressedButtons\":") + .append(std::to_string(globalMouse.pressedButtons)); + } + eventParam.append("}}"); +} + +void SwipeInfoToString(const BaseEventInfo& info, std::string& eventParam) +{ + const auto& swipeInfo = TypeInfoHelper::DynamicCast(&info); + eventParam = swipeInfo->ToJsonParamInfo(); +} + +} // namespace + +DeclarativeFrontend::~DeclarativeFrontend() noexcept +{ + // To guarantee the jsEngine_ and delegate_ released in js thread + auto jsTaskExecutor = delegate_->GetAnimationJsTask(); + RefPtr jsEngine; + jsEngine.Swap(jsEngine_); + RefPtr delegate; + delegate.Swap(delegate_); + jsTaskExecutor.PostTask([jsEngine, delegate] {}); +} + +bool DeclarativeFrontend::Initialize(FrontendType type, const RefPtr& taskExecutor) +{ + LOGI("DeclarativeFrontend initialize begin."); + type_ = type; + ACE_DCHECK(type_ == FrontendType::DECLARATIVE_JS); + InitializeFrontendDelegate(taskExecutor); + taskExecutor->PostTask( + [weakEngine = WeakPtr(jsEngine_), delegate = delegate_] { + auto jsEngine = weakEngine.Upgrade(); + if (!jsEngine) { + return; + } + jsEngine->Initialize(delegate); + }, + TaskExecutor::TaskType::JS); + + LOGI("DeclarativeFrontend initialize end."); + return true; +} + +void DeclarativeFrontend::AttachPipelineContext(const RefPtr& context) +{ + LOGI("DeclarativeFrontend AttachPipelineContext."); + handler_ = AceType::MakeRefPtr(delegate_); + context->RegisterEventHandler(handler_); + delegate_->AttachPipelineContext(context); +} + +void DeclarativeFrontend::SetAssetManager(const RefPtr& assetManager) +{ + LOGI("DeclarativeFrontend SetAssetManager."); + delegate_->SetAssetManager(assetManager); +} + +void DeclarativeFrontend::InitializeFrontendDelegate(const RefPtr& taskExecutor) +{ + const auto& loadCallback = [weakEngine = WeakPtr(jsEngine_)](const std::string& url, + const RefPtr& jsPage, bool isMainPage) { + auto jsEngine = weakEngine.Upgrade(); + if (!jsEngine) { + return; + } + jsEngine->LoadJs(url, jsPage, isMainPage); + }; + + const auto& setPluginMessageTransferCallback = [weakEngine = WeakPtr(jsEngine_)]( + const RefPtr& dispatcher) { + auto jsEngine = weakEngine.Upgrade(); + if (!jsEngine) { + return; + } + jsEngine->SetJsMessageDispatcher(dispatcher); + }; + + const auto& asyncEventCallback = [weakEngine = WeakPtr(jsEngine_)]( + const std::string& eventId, const std::string& param) { + auto jsEngine = weakEngine.Upgrade(); + if (!jsEngine) { + return; + } + jsEngine->FireAsyncEvent(eventId, param); + }; + + const auto& syncEventCallback = [weakEngine = WeakPtr(jsEngine_)]( + const std::string& eventId, const std::string& param) { + auto jsEngine = weakEngine.Upgrade(); + if (!jsEngine) { + return; + } + jsEngine->FireSyncEvent(eventId, param); + }; + + const auto& updatePageCallback = [weakEngine = WeakPtr(jsEngine_)]( + const RefPtr& jsPage) { + auto jsEngine = weakEngine.Upgrade(); + if (!jsEngine) { + return; + } + jsEngine->UpdateRunningPage(jsPage); + jsEngine->UpdateStagingPage(jsPage); + }; + + const auto& resetStagingPageCallback = [weakEngine = WeakPtr(jsEngine_)]() { + auto jsEngine = weakEngine.Upgrade(); + if (!jsEngine) { + return; + } + jsEngine->ResetStagingPage(); + }; + + const auto& destroyPageCallback = [weakEngine = WeakPtr(jsEngine_)](int32_t pageId) { + auto jsEngine = weakEngine.Upgrade(); + if (!jsEngine) { + return; + } + jsEngine->DestroyPageInstance(pageId); + }; + + const auto& destroyApplicationCallback = [weakEngine = WeakPtr(jsEngine_)]( + const std::string& packageName) { + auto jsEngine = weakEngine.Upgrade(); + if (!jsEngine) { + return; + } + jsEngine->DestroyApplication(packageName); + }; + + const auto& timerCallback = [weakEngine = WeakPtr(jsEngine_)]( + const std::string& callbackId, const std::string& delay, bool isInterval) { + auto jsEngine = weakEngine.Upgrade(); + if (!jsEngine) { + return; + } + jsEngine->TimerCallback(callbackId, delay, isInterval); + }; + + const auto& mediaQueryCallback = [weakEngine = WeakPtr(jsEngine_)]( + const std::string& callbackId, const std::string& args) { + auto jsEngine = weakEngine.Upgrade(); + if (!jsEngine) { + return; + } + jsEngine->MediaQueryCallback(callbackId, args); + }; + + const auto& requestAnimationCallback = [weakEngine = WeakPtr(jsEngine_)]( + const std::string& callbackId, uint64_t timeStamp) { + auto jsEngine = weakEngine.Upgrade(); + if (!jsEngine) { + return; + } + jsEngine->RequestAnimationCallback(callbackId, timeStamp); + }; + + const auto& jsCallback = [weakEngine = WeakPtr(jsEngine_)]( + const std::string& callbackId, const std::string& args) { + auto jsEngine = weakEngine.Upgrade(); + if (!jsEngine) { + return; + } + jsEngine->JsCallback(callbackId, args); + }; + delegate_ = AceType::MakeRefPtr(taskExecutor, loadCallback, + setPluginMessageTransferCallback, asyncEventCallback, syncEventCallback, updatePageCallback, + resetStagingPageCallback, destroyPageCallback, destroyApplicationCallback, timerCallback, mediaQueryCallback, + requestAnimationCallback, jsCallback); + delegate_->SetAbility(ability_); + if (jsEngine_) { + delegate_->SetGroupJsBridge(jsEngine_->GetGroupJsBridge()); + } else { + LOGE("the js engine is nullptr"); + EventReport::SendAppStartException(AppStartExcepType::JS_ENGINE_CREATE_ERR); + } +} + +void DeclarativeFrontend::RunPage(int32_t pageId, const std::string& url, const std::string& params) +{ + // Not use this pageId from backend, manage it in FrontendDelegateDeclarative. + delegate_->RunPage(url, params); +} + +void DeclarativeFrontend::PushPage(const std::string& url, const std::string& params) +{ + delegate_->Push(url, params); +} + +// navigator component call router +void DeclarativeFrontend::NavigatePage(uint8_t type, const std::string& url) +{ + switch (static_cast(type)) { + case NavigatorType::PUSH: + delegate_->Push(url, ""); + break; + case NavigatorType::REPLACE: + delegate_->Replace(url, ""); + break; + case NavigatorType::BACK: + delegate_->Back(url); + break; + default: + LOGE("Navigator type is invalid!"); + delegate_->Back(url); + } +} + +void DeclarativeFrontend::SendCallbackMessage(const std::string& callbackId, const std::string& data) const +{ + delegate_->OnJSCallback(callbackId, data); +} + +void DeclarativeFrontend::SetJsMessageDispatcher(const RefPtr& dispatcher) const +{ + delegate_->SetJsMessageDispatcher(dispatcher); +} + +void DeclarativeFrontend::TransferComponentResponseData(int callbackId, int32_t code, std::vector&& data) const +{ + delegate_->TransferComponentResponseData(callbackId, code, std::move(data)); +} + +void DeclarativeFrontend::TransferJsResponseData(int callbackId, int32_t code, std::vector&& data) const +{ + delegate_->TransferJsResponseData(callbackId, code, std::move(data)); +} + +void DeclarativeFrontend::TransferJsPluginGetError(int callbackId, int32_t errorCode, std::string&& errorMessage) const +{ + delegate_->TransferJsPluginGetError(callbackId, errorCode, std::move(errorMessage)); +} + +void DeclarativeFrontend::TransferJsEventData(int32_t callbackId, int32_t code, std::vector&& data) const +{ + delegate_->TransferJsEventData(callbackId, code, std::move(data)); +} + +void DeclarativeFrontend::LoadPluginJsCode(std::string&& jsCode) const +{ + delegate_->LoadPluginJsCode(std::move(jsCode)); +} + +void DeclarativeFrontend::UpdateState(Frontend::State state) +{ + switch (state) { + case Frontend::State::ON_CREATE: + break; + case Frontend::State::ON_DESTROY: + delegate_->OnApplicationDestroy(delegate_->GetAppID()); + break; + default: + LOGE("error State: %d", state); + } +} + +RefPtr DeclarativeFrontend::GetAccessibilityManager() const +{ + if (!delegate_) { + LOGE("GetAccessibilityManager delegate is null"); + return nullptr; + } + return delegate_->GetJSAccessibilityManager(); +} + +const WindowConfig& DeclarativeFrontend::GetWindowConfig() const +{ + return delegate_->GetWindowConfig(); +} + +bool DeclarativeFrontend::OnBackPressed() +{ + return delegate_->OnPageBackPress(); +} + +void DeclarativeFrontend::OnShow() +{ + delegate_->OnForground(); +} + +void DeclarativeFrontend::OnHide() +{ + delegate_->OnBackGround(); + foregroundFrontend_ = false; +} + +void DeclarativeFrontend::OnActive() +{ + foregroundFrontend_ = true; + delegate_->InitializeAccessibilityCallback(); +} + +void DeclarativeFrontend::OnInactive() +{ + delegate_->OnSuspended(); +} + +bool DeclarativeFrontend::OnStartContinuation() +{ + return delegate_->OnStartContinuation(); +} + +void DeclarativeFrontend::OnCompleteContinuation(int32_t code) +{ + delegate_->OnCompleteContinuation(code); +} + +void DeclarativeFrontend::OnSaveData(std::string& data) +{ + delegate_->OnSaveData(data); +} + +bool DeclarativeFrontend::OnRestoreData(const std::string& data) +{ + return delegate_->OnRestoreData(data); +} + +void DeclarativeFrontend::OnNewRequest(const std::string& data) +{ + delegate_->OnNewRequest(data); +} + +void DeclarativeFrontend::CallRouterBack() +{ + delegate_->CallPopPage(); +} + +void DeclarativeFrontend::OnSurfaceChanged(int32_t width, int32_t height) +{ + delegate_->OnSurfaceChanged(); +} + +void DeclarativeFrontend::DumpFrontend() const +{ + int32_t routerIndex = 0; + std::string routerName; + std::string routerPath; + delegate_->GetState(routerIndex, routerName, routerPath); + + if (DumpLog::GetInstance().GetDumpFile()) { + DumpLog::GetInstance().AddDesc("Path: " + routerPath); + DumpLog::GetInstance().AddDesc("Length: " + std::to_string(routerIndex)); + DumpLog::GetInstance().Print(0, routerName, 0); + } +} + +void DeclarativeFrontend::TriggerGarbageCollection() +{ + jsEngine_->RunGarbageCollection(); +} + +void DeclarativeFrontend::RebuildAllPages() +{ + delegate_->RebuildAllPages(); +} + +void DeclarativeEventHandler::HandleAsyncEvent(const EventMarker& eventMarker) +{ + LOGI("HandleAsyncEvent pageId: %{private}d, eventId: %{private}s, eventType: %{private}s", + eventMarker.GetData().pageId, eventMarker.GetData().eventId.c_str(), eventMarker.GetData().eventType.c_str()); + std::string param = eventMarker.GetData().GetEventParam(); + if (eventMarker.GetData().isDeclarativeUi) { + if (delegate_) { + delegate_->GetUiTask().PostTask([eventMarker] { eventMarker.CallUiFunction(); }); + } + } else { + delegate_->FireAsyncEvent(eventMarker.GetData().eventId, param.append("null"), std::string("")); + } + + AccessibilityEvent accessibilityEvent; + accessibilityEvent.nodeId = StringUtils::StringToInt(eventMarker.GetData().eventId); + accessibilityEvent.eventType = eventMarker.GetData().eventType; + delegate_->FireAccessibilityEvent(accessibilityEvent); +} + +void DeclarativeEventHandler::HandleAsyncEvent(const EventMarker& eventMarker, const BaseEventInfo& info) +{ + std::string eventParam; + if (eventMarker.GetData().eventType.find("touch") != std::string::npos) { + TouchInfoToString(info, eventParam); + } else if (eventMarker.GetData().eventType.find("mouse") != std::string::npos) { + MouseInfoToString(info, eventParam); + } else if (eventMarker.GetData().eventType == "swipe") { + SwipeInfoToString(info, eventParam); + } + + LOGD("HandleAsyncEvent pageId: %{public}d, eventId: %{public}s, eventType: %{public}s", + eventMarker.GetData().pageId, eventMarker.GetData().eventId.c_str(), eventMarker.GetData().eventType.c_str()); + std::string param = eventMarker.GetData().GetEventParam(); + if (eventParam.empty()) { + param.append("null"); + } else { + param.append(eventParam); + } + + if (eventMarker.GetData().isDeclarativeUi) { + if (delegate_) { + auto cinfo = CopyEventInfo(info); + delegate_->GetUiTask().PostTask([eventMarker, cinfo] { eventMarker.CallUiArgFunction(cinfo.get()); }); + } + } else { + delegate_->FireAsyncEvent(eventMarker.GetData().eventId, param, ""); + } + + AccessibilityEvent accessibilityEvent; + accessibilityEvent.nodeId = StringUtils::StringToInt(eventMarker.GetData().eventId); + accessibilityEvent.eventType = eventMarker.GetData().eventType; + delegate_->FireAccessibilityEvent(accessibilityEvent); +} + +void DeclarativeEventHandler::HandleAsyncEvent( + const EventMarker& eventMarker, const std::shared_ptr& info) +{ + if (eventMarker.GetData().isDeclarativeUi) { + if (delegate_) { + delegate_->GetUiTask().PostTask([&eventMarker, info] { eventMarker.CallUiArgFunction(info.get()); }); + } + } +} + +void DeclarativeEventHandler::HandleSyncEvent(const EventMarker& eventMarker, const KeyEvent& info, bool& result) +{ + LOGD("HandleSyncEvent pageId: %{public}d, eventId: %{public}s, eventType: %{public}s", eventMarker.GetData().pageId, + eventMarker.GetData().eventId.c_str(), eventMarker.GetData().eventType.c_str()); + std::string param = std::string("\"") + .append(eventMarker.GetData().eventType) + .append("\",{\"code\":") + .append(std::to_string(static_cast(info.code))) + .append(",\"action\":") + .append(std::to_string(static_cast(info.action))) + .append(",\"repeatCount\":") + .append(std::to_string(static_cast(info.repeatTime))) + .append(",\"timestamp\":") + .append(std::to_string(static_cast(info.timeStamp))) + .append(",\"timestampStart\":") + .append(std::to_string(static_cast(info.timeStampStart))) + .append(",\"key\":\"") + .append(info.key) + .append("\"},"); + + result = delegate_->FireSyncEvent(eventMarker.GetData().eventId, param, ""); + + AccessibilityEvent accessibilityEvent; + accessibilityEvent.nodeId = StringUtils::StringToInt(eventMarker.GetData().eventId); + accessibilityEvent.eventType = std::to_string(static_cast(info.code)); + delegate_->FireAccessibilityEvent(accessibilityEvent); +} + +void DeclarativeEventHandler::HandleAsyncEvent(const EventMarker& eventMarker, int32_t param) +{ + LOGW("js event handler does not support this event type!"); + AccessibilityEvent accessibilityEvent; + accessibilityEvent.nodeId = StringUtils::StringToInt(eventMarker.GetData().eventId); + accessibilityEvent.eventType = eventMarker.GetData().eventType; + delegate_->FireAccessibilityEvent(accessibilityEvent); +} + +void DeclarativeEventHandler::HandleAsyncEvent(const EventMarker& eventMarker, const KeyEvent& info) +{ + LOGW("js event handler does not support this event type!"); + AccessibilityEvent accessibilityEvent; + accessibilityEvent.nodeId = StringUtils::StringToInt(eventMarker.GetData().eventId); + accessibilityEvent.eventType = eventMarker.GetData().eventType; + delegate_->FireAccessibilityEvent(accessibilityEvent); +} + +void DeclarativeEventHandler::HandleAsyncEvent(const EventMarker& eventMarker, const std::string& param) +{ + LOGD("HandleAsyncEvent pageId: %{public}d, eventId: %{public}s", eventMarker.GetData().pageId, + eventMarker.GetData().eventId.c_str()); + + if (eventMarker.GetData().isDeclarativeUi) { + std::string fixParam(param); + std::string::size_type startPos = param.find_first_of("{"); + std::string::size_type endPos = param.find_last_of("}"); + if (startPos != std::string::npos && endPos != std::string::npos && startPos < endPos) { + fixParam = fixParam.substr(startPos, endPos - startPos + 1); + } + if (delegate_) { + delegate_->GetUiTask().PostTask([&eventMarker, fixParam] { eventMarker.CallUiStrFunction(fixParam); }); + } + } else { + delegate_->FireAsyncEvent(eventMarker.GetData().eventId, param, ""); + } + + AccessibilityEvent accessibilityEvent; + accessibilityEvent.nodeId = StringUtils::StringToInt(eventMarker.GetData().eventId); + accessibilityEvent.eventType = eventMarker.GetData().eventType; + delegate_->FireAccessibilityEvent(accessibilityEvent); +} + +void DeclarativeEventHandler::HandleSyncEvent(const EventMarker& eventMarker, bool& result) +{ + LOGW("js event handler does not support this event type!"); + AccessibilityEvent accessibilityEvent; + accessibilityEvent.nodeId = StringUtils::StringToInt(eventMarker.GetData().eventId); + accessibilityEvent.eventType = eventMarker.GetData().eventType; + delegate_->FireAccessibilityEvent(accessibilityEvent); +} + +void DeclarativeEventHandler::HandleSyncEvent(const EventMarker& eventMarker, const BaseEventInfo& info, bool& result) +{ + LOGW("js event handler does not support this event type!"); + AccessibilityEvent accessibilityEvent; + accessibilityEvent.nodeId = StringUtils::StringToInt(eventMarker.GetData().eventId); + accessibilityEvent.eventType = eventMarker.GetData().eventType; + delegate_->FireAccessibilityEvent(accessibilityEvent); +} + +void DeclarativeEventHandler::HandleSyncEvent( + const EventMarker& eventMarker, const std::string& param, std::string& result) +{ + LOGW("js event handler does not support this event type!"); + AccessibilityEvent accessibilityEvent; + accessibilityEvent.nodeId = StringUtils::StringToInt(eventMarker.GetData().eventId); + accessibilityEvent.eventType = eventMarker.GetData().eventType; + delegate_->FireAccessibilityEvent(accessibilityEvent); + delegate_->FireSyncEvent(eventMarker.GetData().eventId, param, std::string(""), result); +} + +} // namespace OHOS::Ace diff --git a/frameworks/bridge/declarative_frontend/declarative_frontend.h b/frameworks/bridge/declarative_frontend/declarative_frontend.h new file mode 100644 index 00000000..8221b97e --- /dev/null +++ b/frameworks/bridge/declarative_frontend/declarative_frontend.h @@ -0,0 +1,201 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_DECLARATIVE_FRONTEND_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_DECLARATIVE_FRONTEND_H + +#include +#include + +#include "base/memory/ace_type.h" +#include "base/utils/string_utils.h" +#include "core/common/ace_page.h" +#include "core/common/container.h" +#include "core/common/frontend.h" +#include "core/common/js_message_dispatcher.h" +#include "frameworks/bridge/declarative_frontend/frontend_delegate_declarative.h" +#include "frameworks/bridge/js_frontend/engine/common/js_engine.h" + +namespace OHOS::Ace { + +// DeclarativeFrontend is the unique entrance from ACE backend to frontend. +// The relationship between AceActivity, AceContainer and DeclarativeFrontend is 1:1:1. +// So DeclarativeFrontend would be responsible for below things: +// - Create and initialize QuickJS engine. +// - Load pages of a JS app, and parse the manifest.json before loading main page. +// - Maintain the page stack of JS app by FrontendDelegateDeclarative. +// - Lifecycle of JS app (also AceActivity). +class DeclarativeFrontend : public Frontend { + DECLARE_ACE_TYPE(DeclarativeFrontend, Frontend); + +public: + DeclarativeFrontend() = default; + ~DeclarativeFrontend() override; + + bool Initialize(FrontendType type, const RefPtr& taskExecutor) override; + + void AttachPipelineContext(const RefPtr& context) override; + + void SetAssetManager(const RefPtr& assetManager) override; + + void RunPage(int32_t pageId, const std::string& url, const std::string& params) override; + + void PushPage(const std::string& url, const std::string& params) override; + + // Js frontend manages all pages self. + void AddPage(const RefPtr& page) override {}; + + RefPtr GetPage(int32_t pageId) const override + { + return nullptr; + }; + + void TriggerGarbageCollection() override; + + void SendCallbackMessage(const std::string& callbackId, const std::string& data) const override; + // platform channel. + void SetJsMessageDispatcher(const RefPtr& dispatcher) const override; + void TransferComponentResponseData(int32_t callbackId, int32_t code, + std::vector&& data) const override; + void TransferJsResponseData(int32_t callbackId, int32_t code, std::vector&& data) const override; + void TransferJsPluginGetError(int32_t callbackId, int32_t errorCode, std::string&& errorMessage) const override; + void TransferJsEventData(int32_t callbackId, int32_t code, std::vector&& data) const override; + void LoadPluginJsCode(std::string&& jsCode) const override; + + // application lifecycle. + void UpdateState(Frontend::State state) override; + + // page lifecycle. + bool OnBackPressed() override; + void OnShow() override; + void OnHide() override; + void OnActive() override; + void OnInactive() override; + bool OnStartContinuation() override; + void OnCompleteContinuation(int32_t code) override; + void OnSaveData(std::string& data) override; + bool OnRestoreData(const std::string& data) override; + void OnNewRequest(const std::string& data) override; + void CallRouterBack() override; + + void OnSurfaceChanged(int32_t width, int32_t height) override; + + void DumpFrontend() const override; + + RefPtr GetEventHandler() override + { + return handler_; + }; + + FrontendType GetType() override + { + return type_; + } + + // judge frontend is foreground frontend. + bool IsForeground() override + { + return foregroundFrontend_; + } + + RefPtr GetAccessibilityManager() const override; + const WindowConfig& GetWindowConfig() const override; + + // navigator component call router + void NavigatePage(uint8_t type, const std::string& url) override; + + void SetJsEngine(const RefPtr& jsEngine) + { + jsEngine_ = jsEngine; + } + + void SetNeedDebugBreakPoint(bool value) + { + if (jsEngine_) { + jsEngine_->SetNeedDebugBreakPoint(value); + } + } + + void SetDebugVersion(bool value) + { + if (jsEngine_) { + jsEngine_->SetDebugVersion(value); + } + } + + void SetInstanceName(const std::string& name) + { + if (jsEngine_) { + jsEngine_->SetInstanceName(name); + } + } + + void SetAbility(void* ability) + { + ability_ = ability; + } + + void RebuildAllPages() override; + +private: + void InitializeFrontendDelegate(const RefPtr& taskExecutor); + + FrontendType type_ = FrontendType::DECLARATIVE_JS; + RefPtr delegate_; + RefPtr handler_; + RefPtr jsEngine_; + RefPtr accessibilityManager_; + bool foregroundFrontend_ = false; + void* ability_ = nullptr; +}; + +class DeclarativeEventHandler : public AceEventHandler { +public: + explicit DeclarativeEventHandler(const RefPtr& delegate) + : delegate_(delegate) + { + ACE_DCHECK(delegate_); + } + DeclarativeEventHandler() {} + + ~DeclarativeEventHandler() override = default; + + void HandleAsyncEvent(const EventMarker& eventMarker) override; + + void HandleAsyncEvent(const EventMarker& eventMarker, int32_t param) override; + + void HandleAsyncEvent(const EventMarker& eventMarker, const BaseEventInfo& info) override; + + void HandleAsyncEvent(const EventMarker& eventMarker, const std::shared_ptr& info) override; + + void HandleAsyncEvent(const EventMarker& eventMarker, const KeyEvent& info) override; + + void HandleAsyncEvent(const EventMarker& eventMarker, const std::string& param) override; + + void HandleSyncEvent(const EventMarker& eventMarker, bool& result) override; + + void HandleSyncEvent(const EventMarker& eventMarker, const BaseEventInfo& info, bool& result) override; + + void HandleSyncEvent(const EventMarker& eventMarker, const KeyEvent& info, bool& result) override; + + void HandleSyncEvent(const EventMarker& eventMarker, const std::string& param, std::string& result) override; + +private: + RefPtr delegate_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_DECLARATIVE_FRONTEND_H diff --git a/frameworks/bridge/declarative_frontend/engine/bindings.h b/frameworks/bridge/declarative_frontend/engine/bindings.h new file mode 100644 index 00000000..9a7e3940 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/engine/bindings.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_DECLARATIVE_FRONTEND_ENGINE_BINDINGS_H +#define FOUNDATION_ACE_FRAMEWORKS_DECLARATIVE_FRONTEND_ENGINE_BINDINGS_H + +#include "bindings_implementation.h" + +#ifdef USE_QUICKJS_ENGINE +#include "frameworks/bridge/declarative_frontend/engine/quickjs/qjs_bindings.h" +#elif USE_V8_ENGINE +#include "frameworks/bridge/declarative_frontend/engine/v8/v8_bindings.h" +#else +#error "No engine selected" +#endif + +#endif // FOUNDATION_ACE_FRAMEWORKS_DECLARATIVE_FRONTEND_ENGINE_BINDINGS_H \ No newline at end of file diff --git a/frameworks/bridge/declarative_frontend/engine/bindings.inl b/frameworks/bridge/declarative_frontend/engine/bindings.inl new file mode 100644 index 00000000..44dc2df2 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/engine/bindings.inl @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "bindings_implementation.h" + +namespace OHOS::Ace::Framework { + +template typename ImplDetail> +std::unordered_map JSClassImpl::functions_; +template typename ImplDetail> +int JSClassImpl::nextFreeId_ = 0; +template typename ImplDetail> +std::string JSClassImpl::jsName; + +template typename ImplDetail> +void JSClassImpl::Declare(const char* name) +{ + jsName = name; + ImplDetail::Declare(name); +} + +template typename ImplDetail> +template +void JSClassImpl::Method(const char* name, R (C::*func)(Args...), MethodOptions options) +{ + functions_.emplace(nextFreeId_, new FunctionBinding(name, options, func)); + ImplDetail::Method(name, func, nextFreeId_++); +} + +template typename ImplDetail> +template +void JSClassImpl::Method(const char* name, R (Base::*func)(Args...), MethodOptions options) +{ + static_assert(std::is_base_of_v, "Trying to bind an unrelated method!"); + functions_.emplace(nextFreeId_, new FunctionBinding(name, options, func)); + ImplDetail::Method(name, func, nextFreeId_++); +} + +template typename ImplDetail> +template +void JSClassImpl::CustomMethod( + const char* name, typename ImplDetail::template MemberFunctionCallback callback) +{ + static_assert(std::is_base_of_v, "Trying to bind an unrelated method!"); + functions_.emplace(nextFreeId_, new FunctionBinding(name, MethodOptions::NONE, callback)); + ImplDetail::CustomMethod(name, callback, nextFreeId_++); +} + +template typename ImplDetail> +void JSClassImpl::CustomMethod(const char* name, typename ImplDetail::FunctionCallback callback) +{ + ImplDetail::CustomMethod(name, callback); +} + +template typename ImplDetail> +template +void JSClassImpl::StaticConstant(const char* name, T value) +{ + ImplDetail::StaticConstant(name, value); +} + +template typename ImplDetail> +void JSClassImpl::Bind( + typename ImplDetail::BindingTarget bindTarget, typename ImplDetail::FunctionCallback ctor) +{ + ImplDetail::Bind(bindTarget, ctor); +} + +template typename ImplDetail> +template +void JSClassImpl::Bind(typename ImplDetail::BindingTarget bindTarget) +{ + ImplDetail::template Bind(bindTarget); +} + +template typename ImplDetail> +template +void JSClassImpl::Inherit() +{ + static_assert(std::is_base_of_v, "Calling Inherit() on unrelated classes!"); + ImplDetail::template Inherit(); +} + +template typename ImplDetail> +IFunctionBinding* JSClassImpl::GetFunctionBinding(int id) +{ + return functions_[id]; +} + +template typename ImplDetail> +const char* JSClassImpl::JSName() +{ + return jsName.c_str(); +} + +}; // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/engine/bindings_defines.h b/frameworks/bridge/declarative_frontend/engine/bindings_defines.h new file mode 100644 index 00000000..6bd2c6c9 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/engine/bindings_defines.h @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_DECLARATIVE_FRONTEND_ENGINE_BINDINGS_DEFINES_H +#define FOUNDATION_ACE_FRAMEWORKS_DECLARATIVE_FRONTEND_ENGINE_BINDINGS_DEFINES_H + +enum class JavascriptEngine { NONE, QUICKJS, V8 }; + +#ifdef USE_QUICKJS_ENGINE + +#ifdef __cplusplus +extern "C" { +#endif +#include "third_party/quickjs/cutils.h" +#include "third_party/quickjs/quickjs-libc.h" + +void* JS_GetOpaqueA(JSValueConst obj, JSClassID* classIds, size_t classIdLen); + +JSValueConst JS_NewGlobalCConstructor( + JSContext* ctx, const char* name, JSCFunction* func, int length, JSValueConst proto); + +#ifdef __cplusplus +} +#endif + +using BindingTarget = JSValue; +using FunctionCallback = JSValue (*)(JSContext*, JSValueConst, int, JSValueConst*); +template +using MemberFunctionCallback = JSValue (T::*)(JSContext*, JSValueConst, int, JSValueConst*); +using ExoticGetterCallback = JSValue (*)(JSContext* ctx, JSValueConst obj, JSAtom atom, JSValueConst receiver); +using ExoticSetterCallback = int (*)( + JSContext* ctx, JSValueConst obj, JSAtom atom, JSValueConst value, JSValueConst receiver, int flags); +using ExoticHasPropertyCallback = int (*)(JSContext* ctx, JSValueConst obj, JSAtom atom); +using ExoticIsArrayCallback = int (*)(JSContext* ctx, JSValueConst obj); + +/* return < 0 if exception or TRUE/FALSE */ + +constexpr const JavascriptEngine cCurrentJSEngine = JavascriptEngine::QUICKJS; + +#elif USE_V8_ENGINE + +#include "third_party/v8/include/v8.h" + +using BindingTarget = v8::Local; +using FunctionCallback = void (*)(const v8::FunctionCallbackInfo&); +template +using MemberFunctionCallback = void (T::*)(const v8::FunctionCallbackInfo&); +using ExoticGetterCallback = int; +using ExoticSetterCallback = int; +using ExoticHasPropertyCallback = int; +using ExoticIsArrayCallback = int; + +constexpr const JavascriptEngine cCurrentJSEngine = JavascriptEngine::V8; + +#else +#error "No engine selected" +#endif + +#endif diff --git a/frameworks/bridge/declarative_frontend/engine/bindings_implementation.cpp b/frameworks/bridge/declarative_frontend/engine/bindings_implementation.cpp new file mode 100644 index 00000000..844e30a1 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/engine/bindings_implementation.cpp @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "bindings_implementation.h" + +namespace OHOS::Ace::Framework {}; // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/engine/bindings_implementation.h b/frameworks/bridge/declarative_frontend/engine/bindings_implementation.h new file mode 100644 index 00000000..74a30699 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/engine/bindings_implementation.h @@ -0,0 +1,340 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_DECLARATIVE_FRONTEND_ENGINE_BINDINGS_IMPLEMENTATION_H +#define FOUNDATION_ACE_FRAMEWORKS_DECLARATIVE_FRONTEND_ENGINE_BINDINGS_IMPLEMENTATION_H + +#include +#include +#include +#include + +#include "base/log/log.h" +#include "base/memory/ace_type.h" +#include "bindings_defines.h" +#include "frameworks/bridge/common/utils/function_traits.h" + +namespace OHOS::Ace::Framework { + +enum MethodOptions : uint8_t { + NONE = 0, + RETURN_SELF = 1 << 0, // for chaining + STRICT_TYPE_CHECK = 1 << 1, +}; + +class IFunctionBinding { +public: + IFunctionBinding(const char* name, MethodOptions options) : name_(name), options_(options) {} + ~IFunctionBinding() = default; + + const char* Name() + { + return name_; + } + + MethodOptions Options() + { + return options_; + } + +private: + const char* name_; + MethodOptions options_; +}; + +template +class FunctionBinding : public IFunctionBinding { + using FunctionPtr = ReturnType (Class::*)(Args...); + +public: + FunctionBinding(const char* name, MethodOptions options, FunctionPtr func) + : IFunctionBinding(name, options), func_(func) + {} + ~FunctionBinding() = default; + + const FunctionPtr Get() + { + return func_; + } + +private: + FunctionPtr func_; +}; + +/** + * \brief A class template that binds C++ classes to Javascript. + * + * This class is the entry point for binding classes and methods to Javascript regardless of which engine is + * underneath. In the following text, a class C is the C++ class to be bound to Javascript, and engine-specific + * implementation is abbeviated as ESI. + * + * Methods and member variables registered to javascript are equivalent to a property in a javascript object. + * \p Method(...) is used to register methods. If a member function is registered directly, the ESI should take care of + * the value conversion between Javascript and C++ types. If complete control is required when calling from Javascript, + * member functions and callbacks with engine-specific signatures can be registered to Javascript. + * Additional options can be passed to \p Method(...) when binding member functions, such as the object can return + * itself in case of functions that do not return a value, so that in Javascript one can do so-called "chaining": + * \code{.js} + * object.width(10).height(10).top(0).left(20) + * \endcode + * + * There is a general constructor for every bound class. When calling \p Bind however, the constructor argument types + * must be passes as template arguments (see example) so that the automatic conversion checks and converts the values. + * + * Engine-specific implementation guide: + * This code is using the curiously recurring template pattern (CRTP) idiom as neither function templates nor static + * methods can be overloaded. Therefore, an ESI "inherits" from this class because these class methods call methods + * that have to be defined, otherwise the compiler will report an error. As the binding itself is considerably + * engine-specific, this class implements only engine-agnostic attributes such as class names, method names, member + * function pointers etc. The actual value conversion is to be implemented by the engine implementation, and choosing + * the engine to be used should be conducted by the build system. + * + * ESIs are expected to define several aliases: + * 1. one called \p JSClass with the class C and the ESI class template as template + * arguments to this class: + * \code{.cpp} + * template + * using JSClass = JSClassImpl + * \endcode + * + * Inside the ImplDetail class template: + * 2. \p BindingTarget that corresponds to an ESI object template + * \code{.cpp} + * // A v8 object template + * using BindingTarget = v8::Local; + * // A QJS object template + * using BindingTarget = JSValue; + * \endcode + * + * 3. \p FunctionCallback and \p MemberFunctionCallback corresponding to ESI callback signatures: + * \code{.cpp} + * // v8 callback signatures + * using FunctionCallback = void (*)(const v8::FunctionCallbackInfo&); + * using MemberFunctionCallback = void (C::*)(const v8::FunctionCallbackInfo&); + * // QJS callback signatures + * using FunctionCallback = JSValue (*)(JSContext* ctx, JSValueConst thisObj, int argc, JSValueConst* argv); + * using MemberFunctionCallback = JSValue (C::*)(JSContext* ctx, JSValueConst thisObj, int argc, JSValueConst* argv); + * \endcode + * + * + * \tparam C The C++ class to be bound + * \tparam ImplDetail an engine-specific class template that takes class C as a template argument + * + * \example Binding classes TwoDPoint and ThreeDPoint as "Point2" and "Point3" in javascript, and registering its + * methods. + * + * \code{.cpp} + * class TwoDPoint { + * public: + * TwoDPoint(float x, float y) : x_(x), y_(y) {} + * ~TwoDPoint() {} + * + * void SetX(float x) { x_ = x; } + * void SetY(float y) { y_ = y; } + * virtual void Print() { std::cout << "Point(" << x_ << ", " << y_ << ")" << std::endl; } + * + * float GetX() { return x_; } + * float GetY() { return y_; } + * private: + * float x_; + * float y_; + * }; + * + * class ThreeDPoint : public TwoDPoint { + * public: + * ThreeDPoint(float x, float y, float z) : TwoDPoint(x,y) : z_(z) {} + * ~ThreeDPoint() {} + * + * void SetZ(float z) { z_ = z; } + * virtual void Print() override { std::cout << "Point(" << x_ << ", " << y_ << ", " << z_ << ")" << std::endl; } + * + * float GetZ() { return z_; } + * private: + * float z_; + * }; + * + * // We are using V8 engine for this example: + * template + * using JSClass = JSClassImpl; + * + * // Somewhere in engine-initialization: + * JSClass::Declare("Point2"); + * JSClass::Method("setX", &TwoDPoint::SetX, MethodOptions::RETURN_SELF); + * JSClass::Method("getX", &TwoDPoint::GetX); + * JSClass::Method("setY", &TwoDPoint::SetY, MethodOptions::RETURN_SELF); + * JSClass::Method("getY", &TwoDPoint::GetY); + * JSClass::Method("print", &TwoDPoint::Print); + * JSClass::Bind(globalObject); // Note the template arguments. Here we are specifying + * // that we're expecting the JS constructor to accept + * // two "float" arguments + * + * JSClass::Declare("Point3"); + * JSClass::Method("setZ", &ThreeDPoint::SetZ, MethodOptions::RETURN_SELF); + * JSClass::Method("getZ", &ThreeDPoint::GetZ); + * JSClass::Inherit(); + * JSClass::Bind(globalObject); + * // Note the template arguments. Here we are specifying + * // that we're expecting the JS constructor to accept + * // three "float" arguments + * \endcode + * + * \code{.js} + * let point = new Point2(1,2); // V8Class::internalConstructor called + * point.print(); // V8Class::internalMethodCallback called + * // Output: "Point(1,2)" + * console.log("Point.x is " + point.getX()); // V8Class::internalMethodCallback called + * // Output: "Point.x is 1" + * point.setX(5).setY(10); // V8Class::internalMethodCallback called + * // V8Class::internalMethodCallback called + * point.print(); // V8Class::internalMethodCallback called + * // Output: "Point(5,10)" + * let anotherPoint = new Point3(1,2,3); // V8Class::internalConstructor called + * anotherPoint.setX(5).setY(6).setZ(7) // V8Class::internalMethodCallback called + * // V8Class::internalMethodCallback called + * // V8Class::internalMethodCallback called + * anotherpoint.print(); // V8Class::internalMethodCalled called + * // Output: "Point(5,6,7)" + * \endcode + * \class JSClassImpl + */ +template typename ImplDetail> +class JSClassImpl { +public: + JSClassImpl() = delete; + + /** + * Declare class C that will be exposed with the given \p name in Javascript + * \note This must be always called first before any other registrations. The engine-specific implementations + * should instantiate object templates with this call + * \param name A string literal + * \static + */ + static void Declare(const char* name); + + /** + * Register a method that is a member of class C + * \param name The name of the method that will be exposed as in Javascript + * \param func A member-function pointer belonging to class C + * \param options Method options flags, default value is NONE + * + * \tparam R The return type of \p func . No need to specify, since it will be deducted from the function pointer + * \tparam Args... Types of function arguments of \p func . No need to specify, since they will be deducted from + * the function pointer + * \static + */ + // OPTIMIZE(cvetan): Pass method options as template parameter, that way we can check on compile-time what to do + template + static void Method(const char* name, R (C::*func)(Args...), MethodOptions options = MethodOptions::NONE); + + /** + * Register a method that is a member of a base of class C. + * \note Trying to bind a method of unrelated classes will result in a compile error + * \param name The name of the method that will be exposed as in Javascript + * \param func A member-function pointer belonging to class C's base class + * \param options Method options flags, default value is NONE + * + * \tparam Base A base class to \p C . No need to specify, since it will be deducted from the function pointer + * \tparam R The return type of \p func . No need to specify, since it will be deducted from the function pointer + * \tparam Args... Types of function arguments of \p func . No need to specify, since they will be deducted from + * the function pointer + * \static + */ + template + static void Method(const char* name, R (Base::*func)(Args...), MethodOptions options = MethodOptions::NONE); + + /** + * Register a method that is a member of a related class T with a signature equivalent to the underlying engine's + * requirements for callback signatures. + * + * \tparam T A class that is either equivalent or a base to C + * \param name The name of the method that will be exposed as in Javascript + * \param callback A member-function pointer belonging to class C's class with engine-specific signature + * \static + */ + template + static void CustomMethod(const char* name, MemberFunctionCallback callback); + + /** + * Register a method with a signature equivalent to the underlying engine's + * requirements for callback signatures. + * + * \param name The name of the method that will be exposed as in Javascript + * \param callback A function pointer with the engine-specific signature + * \static + */ + static void CustomMethod(const char* name, FunctionCallback callback); + + static void ExoticGetter(ExoticGetterCallback callback); + static void ExoticSetter(ExoticSetterCallback callback); + static void ExoticHasProperty(ExoticHasPropertyCallback callback); + + template + static void StaticConstant(const char* name, T value); + /** + * Bind the class to Javascript with a custom constructor with a signature specified by the engine-specific + * implementation. + * + * \param bindTarget An object template to bind this class to. + * \param ctor Constructor + * \static + */ + static void Bind(BindingTarget bindTarget, FunctionCallback ctor); + + /** + * Bind the class to Javascript. + * \tparam Args... A list of argument types that the constructor of class C accepts. + * \param bindTarget An object template to bind this class to. + * \static + */ + template + static void Bind(BindingTarget bindTarget); + + /** + * Inherit all bound methods and properties from \p Base + * \note A binding for the base class must exist beforehand with + * \code JSClassImpl::Declare("MyBaseClass") \endcode + * + * \tparam Base A base class of C + */ + template + static void Inherit(); + + static IFunctionBinding* GetFunctionBinding(int id); + + /** + * Get the Javascript name of class C + * \return The javascript name + */ + static const char* JSName(); + +private: + static std::string jsName; + /* OPTIMIZE(cvetan): Functions can be stored at compile-time with an additional index as a template parameter, for + example: + + template + static RetType(C::*function_)(Args...); + + But only if current approach proves to be a bottleneck. + */ + static std::unordered_map functions_; + static int nextFreeId_; +}; + +}; // namespace OHOS::Ace::Framework + +#include "bindings_implementation.inl" + +#endif // FOUNDATION_ACE_FRAMEWORKS_DECLARATIVE_FRONTEND_ENGINE_BINDINGS_IMPLEMENTATION_H diff --git a/frameworks/bridge/declarative_frontend/engine/bindings_implementation.inl b/frameworks/bridge/declarative_frontend/engine/bindings_implementation.inl new file mode 100644 index 00000000..9788a788 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/engine/bindings_implementation.inl @@ -0,0 +1,124 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "bindings_implementation.h" + +namespace OHOS::Ace::Framework { + +template typename ImplDetail> +std::unordered_map JSClassImpl::functions_; +template typename ImplDetail> +int JSClassImpl::nextFreeId_ = 0; +template typename ImplDetail> +std::string JSClassImpl::jsName; + +template typename ImplDetail> +void JSClassImpl::Declare(const char* name) +{ + jsName = name; + ImplDetail::Declare(name); +} + +template typename ImplDetail> +template +void JSClassImpl::Method(const char* name, R (C::*func)(Args...), MethodOptions options) +{ + functions_.emplace(nextFreeId_, new FunctionBinding(name, options, func)); + ImplDetail::Method(name, func, nextFreeId_++); +} + +template typename ImplDetail> +template +void JSClassImpl::Method(const char* name, R (Base::*func)(Args...), MethodOptions options) +{ + static_assert(std::is_base_of_v, "Trying to bind an unrelated method!"); + functions_.emplace(nextFreeId_, new FunctionBinding(name, options, func)); + ImplDetail::Method(name, func, nextFreeId_++); +} + +template typename ImplDetail> +template +void JSClassImpl::CustomMethod(const char* name, MemberFunctionCallback callback) +{ + static_assert(std::is_base_of_v, "Trying to bind an unrelated method!"); + functions_.emplace(nextFreeId_, new FunctionBinding(name, MethodOptions::NONE, callback)); + ImplDetail::CustomMethod(name, callback, nextFreeId_++); +} + +template typename ImplDetail> +void JSClassImpl::CustomMethod(const char* name, FunctionCallback callback) +{ + ImplDetail::CustomMethod(name, callback); +} + +template typename ImplDetail> +void JSClassImpl::ExoticGetter(ExoticGetterCallback callback) +{ + ImplDetail::ExoticGetter(callback); +} + +template typename ImplDetail> +void JSClassImpl::ExoticSetter(ExoticSetterCallback callback) +{ + ImplDetail::ExoticSetter(callback); +} + +template typename ImplDetail> +void JSClassImpl::ExoticHasProperty(ExoticHasPropertyCallback callback) +{ + ImplDetail::ExoticHasProperty(callback); +} + +template typename ImplDetail> +template +void JSClassImpl::StaticConstant(const char* name, T value) +{ + ImplDetail::StaticConstant(name, value); +} + +template typename ImplDetail> +void JSClassImpl::Bind(BindingTarget bindTarget, FunctionCallback ctor) +{ + ImplDetail::Bind(bindTarget, ctor); +} + +template typename ImplDetail> +template +void JSClassImpl::Bind(BindingTarget bindTarget) +{ + ImplDetail::template Bind(bindTarget); +} + +template typename ImplDetail> +template +void JSClassImpl::Inherit() +{ + static_assert(std::is_base_of_v, "Calling Inherit() on unrelated classes!"); + ImplDetail::template Inherit(); +} + +template typename ImplDetail> +IFunctionBinding* JSClassImpl::GetFunctionBinding(int id) +{ + return functions_[id]; +} + +template typename ImplDetail> +const char* JSClassImpl::JSName() +{ + return jsName.c_str(); +} + +}; // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/engine/declarative_engine_loader.cpp b/frameworks/bridge/declarative_frontend/engine/declarative_engine_loader.cpp new file mode 100644 index 00000000..036b3478 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/engine/declarative_engine_loader.cpp @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/declarative_frontend/engine/declarative_engine_loader.h" + +#include "base/utils/macros.h" + +#ifdef USE_V8_ENGINE +#include "frameworks/bridge/declarative_frontend/engine/v8/v8_declarative_engine.h" +#endif + +#ifdef USE_QUICKJS_ENGINE +#include "frameworks/bridge/declarative_frontend/engine/quickjs/qjs_declarative_engine.h" +#endif + +namespace OHOS::Ace::Framework { + +DeclarativeEngineLoader::DeclarativeEngineLoader() = default; +DeclarativeEngineLoader::~DeclarativeEngineLoader() = default; + +RefPtr DeclarativeEngineLoader::CreateJsEngine(int32_t instanceId) const +{ + // TODO: add instanceId +#ifdef USE_V8_ENGINE + return AceType::MakeRefPtr(instanceId); +#endif + +#ifdef USE_QUICKJS_ENGINE + return AceType::MakeRefPtr(instanceId); +#endif +} + +RefPtr DeclarativeEngineLoader::CreateCanvasBridge() const +{ + return nullptr; +} + +#if defined(BUILT_IN_JS_ENGINE) +JsEngineLoader& JsEngineLoader::GetDeclarative() +{ + return DeclarativeEngineLoader::GetInstance(); +} +#else +extern "C" ACE_EXPORT void* OHOS_ACE_GetJsEngineLoader() +{ + return &DeclarativeEngineLoader::GetInstance(); +} +#endif + +} // namespace OHOS::Ace::Framework \ No newline at end of file diff --git a/frameworks/bridge/declarative_frontend/engine/declarative_engine_loader.h b/frameworks/bridge/declarative_frontend/engine/declarative_engine_loader.h new file mode 100644 index 00000000..1fb849a6 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/engine/declarative_engine_loader.h @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_ENGINE_DECLARATIVE_ENGINE_LOADER_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_ENGINE_DECLARATIVE_ENGINE_LOADER_H + +#include "base/utils/singleton.h" +#include "frameworks/bridge/js_frontend/engine/common/js_engine_loader.h" + +namespace OHOS::Ace::Framework { + +class DeclarativeEngineLoader : public JsEngineLoader, public Singleton { + DECLARE_SINGLETON(DeclarativeEngineLoader); + +public: + RefPtr CreateJsEngine(int32_t instanceId) const final; + RefPtr CreateCanvasBridge() const final; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_ENGINE_V8_V8_ENGINE_LOADER_H diff --git a/frameworks/bridge/declarative_frontend/engine/js_object_template.h b/frameworks/bridge/declarative_frontend/engine/js_object_template.h new file mode 100644 index 00000000..797aa3c7 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/engine/js_object_template.h @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_ENGINE_JS_OBJECT_TEMPLATE_H +#define FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_ENGINE_JS_OBJECT_TEMPLATE_H + +#ifdef USE_V8_ENGINE +#include "frameworks/bridge/declarative_frontend/engine/v8/v8_object_template.h" +#elif USE_QUICKJS_ENGINE +#include "frameworks/bridge/declarative_frontend/engine/quickjs/qjs_object_template.h" +#endif + +namespace OHOS::Ace::Framework { + +template +class JSObjectTemplateImpl : private ImplDetail { +public: + JSObjectTemplateImpl(); + ~JSObjectTemplateImpl(); + + template + void Constant(const char* name, T value); + + auto operator*() const; + auto NewInstance() const; +}; + +#ifdef USE_V8_ENGINE +using JSObjectTemplate = JSObjectTemplateImpl; +#elif USE_QUICKJS_ENGINE +using JSObjectTemplate = JSObjectTemplateImpl; +#endif + +} // namespace OHOS::Ace::Framework + +#include "js_object_template.inl" + +#endif // FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_ENGINE_JS_OBJECT_TEMPLATE_H diff --git a/frameworks/bridge/declarative_frontend/engine/js_object_template.inl b/frameworks/bridge/declarative_frontend/engine/js_object_template.inl new file mode 100644 index 00000000..ab7e799d --- /dev/null +++ b/frameworks/bridge/declarative_frontend/engine/js_object_template.inl @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "js_object_template.h" + +namespace OHOS::Ace::Framework { + +template +JSObjectTemplateImpl::JSObjectTemplateImpl() : ImplDetail() +{} + +template +JSObjectTemplateImpl::~JSObjectTemplateImpl() +{} + +template +template +void JSObjectTemplateImpl::Constant(const char* name, T value) +{ + ImplDetail::Constant(name, value); +} + +template +auto JSObjectTemplateImpl::operator*() const +{ + return ImplDetail::operator*(); +} + +template +auto JSObjectTemplateImpl::NewInstance() const +{ + return ImplDetail::NewInstance(); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/engine/js_view_listeners.cpp b/frameworks/bridge/declarative_frontend/engine/js_view_listeners.cpp new file mode 100644 index 00000000..45506dfd --- /dev/null +++ b/frameworks/bridge/declarative_frontend/engine/js_view_listeners.cpp @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/declarative_frontend/engine/js_view_listeners.h" + +#include "base/log/ace_trace.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_view_abstract.h" +#include "frameworks/bridge/js_frontend/engine/quickjs/qjs_utils.h" + +namespace OHOS::Ace::Framework { + +void JSViewListeners::notifyAll() +{ + for (std::set::const_iterator iter = listeners_.begin(); iter != listeners_.end(); iter++) { + (*iter)->MarkNeedUpdate(); + } +} + +bool JSViewListeners::add(JSViewAbstract* view) +{ + // avoid duplicates + if (listeners_.find(view) == listeners_.end()) { + listeners_.emplace(view); + return true; + } else { + return false; + } +} + +bool JSViewListeners::remove(JSViewAbstract* view) +{ + // this simple approach only works because we avoid duplicates when adding new View. + std::set::iterator iter = listeners_.find(view); + if (iter != listeners_.end()) { + listeners_.erase(iter); + return true; + } else { + return false; + } +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/engine/js_view_listeners.h b/frameworks/bridge/declarative_frontend/engine/js_view_listeners.h new file mode 100644 index 00000000..e1a5d043 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/engine/js_view_listeners.h @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_DECLARATIVE_FRONTEND_ENGINE_VIEW_LISTENERS_H +#define FOUNDATION_ACE_FRAMEWORKS_DECLARATIVE_FRONTEND_ENGINE_VIEW_LISTENERS_H + +#include + +#include "base/memory/ace_type.h" + +namespace OHOS::Ace::Framework { + +// forward +class JSViewAbstract; + +class JSViewListeners : public AceType { + DECLARE_ACE_TYPE(JSViewListeners, AceType); + +protected: + std::set listeners_; + +public: + JSViewListeners() {} + ~JSViewListeners() + { + listeners_.clear(); + } + + /** Add a new listening view + * avoids duplicates + * returns false if View already exists + */ + bool add(JSViewAbstract* view); + + /** remove View + * returns true of found + */ + bool remove(JSViewAbstract* view); + + /** + * nodify all listeners to update + */ + void notifyAll(); + + std::size_t count() + { + return listeners_.size(); + } +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_DECLARATIVE_FRONTEND_ENGINE_VIEW_LISTENERS_H diff --git a/frameworks/bridge/declarative_frontend/engine/jsproxyClass.js b/frameworks/bridge/declarative_frontend/engine/jsproxyClass.js new file mode 100644 index 00000000..b281108e --- /dev/null +++ b/frameworks/bridge/declarative_frontend/engine/jsproxyClass.js @@ -0,0 +1,518 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +class Handler { + constructor(publishedProperties1) { + this.listeners = new Set(); + this.publishedProperties = publishedProperties1; + console.log(`ObservableObject Published Properties: ${JSON.stringify([...this.publishedProperties])}`); + + this.register = function (v) { + if (this.listeners.has(v.getViewId())) { + console.error(`ObservableObject: add listener: Given View is already a listener. Number of reg. listeners: ${this.listeners.size}`); + return false; + } else { + this.listeners.add(v.getViewId()); + addViewById(v.getViewId(), v); + console.log(`Added listening View to ObservableObject. Number of reg. listeners: ${this.listeners.size}`); + return true; + } + }.bind(this); + + this.unregister = function (v) { + if (!this.listeners.has(v.getViewId())) { + console.error(`ObservableObject: remove listener: Given View is not a listener. Number of reg. listeners: ${this.listeners.size}`); + return false; + } else { + this.listeners.delete(v.getViewId()); + removeViewById(v.getViewId()); + console.log(`Removed listening View from ObservableObject. Number of reg. listeners: ${this.listeners.size}`); + return true; + } + }.bind(this); + + this.notifyAllViews = function () { + console.log(`ObservableObject.notifyAllViews(): Notifying ${this.listeners.size} listeners.`); + this.listeners.forEach((viewId) => markViewNeedUpdateById(viewId)); + } + + this.get = function (target, property) { + return target[property]; + }.bind(this); + + this.set = function (target, property, newValue) { + + if (this.publishedProperties.has(property) && (target[property] != newValue)) { + console.log(`ObservableObject: Publishd property '${property}' has been changed.`); + this.notifyAllViews(); + } + target[property] = newValue + return true; + }.bind(this); + + } // constructor +} + +class ExtendableProxy { + constructor(obj, handler) { + return new Proxy(obj, handler); + } +} + +// gloabl JS function accessible from native side. +var createObservableObject = function (jsObj) { + return new ObservableObject(jsObj); +} + + +class ObservableObject extends ExtendableProxy { + + constructor(jsObject) { + var handler = new Handler(new Set(Object.keys(jsObject))); + super(jsObject, handler); + this.handler = handler; + + this.registerDependentView = function (view) { + this.handler.register(view); + } + this.unregisterDependentView = function (view) { + this.handler.unregister(view); + } + + this.__observableobject__ = { + get() { + console.log("Object is ObservableObject"); + return true; + } + } + } +} + + +/* + function to create a LinkReference, equivalent of the '$' sign pre-pended to + an constructor parameter. A parameter to initilaize a @Link in to-be-creted + child Component, e.g. + + @Component + ParentView { + @State myState : ...; + build() { + ChildView(boundState: $mystate) + } +} + + @Component + ChildView{ + @Link boundState; + + ... + } + + sourceView is a valid View, in above example: 'ParentView' + sourceProperty is name of the bount to property inside sourceView, + in above example: 'myState' +*/ +var createLinkReference = function (sourceView, sourceProperty1) { + if ((sourceView === undefined) + || (typeof sourceView.getViewId !== "function") + || (sourceView.getViewId() < 0) + || (sourceProperty1 == undefined) + || (typeof sourceProperty1 !== "string")) { + throw new SyntaxError(`createLinkReference expects a valid View and a property name (string) parameter!`); + } + let sourceProperty = sourceProperty1; + + return { + get: function () { + console.log(`${this.constructor.name}: get bound property '${sourceProperty}'`); + return this.hasOwnProperty(sourceProperty) ? this[sourceProperty] : /* should never happen */ undefined; + }.bind(sourceView), + set: function (newValue) { + if (this.hasOwnProperty(sourceProperty)) { + this[sourceProperty] = newValue; + return true; + } else { + /* should never happen */ + return false; + } + }.bind(sourceView), + ____is_link_reference____: true + } +} // createLinkReference + + +class View extends NativeView { + + constructor(id, parent) { + super(id, parent); + + if (this.____is_initialized___ && + (typeof this.obsPropStore === "object") && + (typeof this.setInitialObjectState === "function") && + (typeof this.updateObjectState === "function") && + (typeof this.createState === "function") && + (typeof this.createProp === "function") && + (typeof this.createLink === "function")) { + console.log(`${this.constructor.name}: re-using existing instance`); + // further initialization not needed + return; + } + + console.log(`${this.constructor.name}: new instance`); + + /** + * backing store for all observed properties, this is where their values are stored + */ + this.obsPropStore = {}; + + /** + * map of properties, indicates for each if it is used in rendering + * map gets build during render + */ + this.propUsedToRender = {}; + this.isRenderingInProgress = false; + + /** this function is run just once on an instance + * to set variables to their initial state + * var c = 1 -> setInitialObjectState({c: 1}) + */ + this.setInitialObjectState = function (initialState) { + if (!this.____is_initialized___) { + console.log(`${this.constructor.name}: one-time, local initialization with values: ${JSON.stringify(initialState)}`); + Object.assign(this, initialState); + } + }.bind(this); + + /** this function is run every time a component + * is re-initialized, use to update constructtion function parameters + * new CompA({C: 7}) -> updateObjectState({c: 7}) + */ + this.updateObjectState = function (updateParams) { + if ((updateParams != undefined) && (typeof updateParams === "object")) { + console.log(`${this.constructor.name}: on create and re-initialization: updating with constructor params: ${JSON.stringify(updateParams)}`); + Object.assign(this, updateParams); + } else { + console.warn(`${this.constructor.name}: on create and re-initialization: missing or invalid constructor params: ${JSON.stringify(updateParams)}`); + } + }.bind(this); + + /** + * View.createState("property") API function, in eDSL @State + * + * usage and syntax: + * 1. step set property of View to an initial value of type Object, ObservableObject, Bool, String, or Number, + * this should happen in the constructor, e.g. + * this["propStr"] = createObservableObject({value: 47}); + * 2. step: call View.createState("propStr") + * createState picks up the initial value from the property and turns it into an observed state property. + * turning into an observed state property means propStr gets added to View.addObservedProp and the property + * gets turned into a get/set property. + * + */ + this.createState = function (propStr) { + + var setStatePropToValue = function (propStr, newValue) { + var oldValue = this.obsPropStore[propStr]; + if ((oldValue !== undefined) && (oldValue.__observableobject__)) { + // old value is an ObservableObject, unregister this View from the ObservableObject + oldValue.unregisterDependentView(this); + } + + console.log(`setStatePropToValue(${propStr} - ${JSON.stringify(newValue)})`); + + switch (typeof newValue) { + case "boolean": + case "string": + case "number": + console.log(`${this.constructor.name}: set @State '${propStr}' with value ${JSON.stringify(newValue)} of type boolean/number/string.`); + this.obsPropStore[propStr] = newValue; + return newValue; + case "object": + if (newValue.__observableobject__) { + console.log(`${this.constructor.name}: set @State '${propStr}' with value ${JSON.stringify(newValue)} is wrapped with ObserableObject already`); + newValue.registerDependentView(this); + this.obsPropStore[propStr] = newValue; + return newValue; + } else { + console.log(`${this.constructor.name}: set @State '${propStr}' with value ${JSON.stringify(value)} needs wrapping in ObserableObject`); + let obs = createObservableObject(newValue); + obs.registerDependentView(this); + this.obsPropStore[propStr] = obs; + return obs; + } + default: + throw new SyntaxError(`${this.constructor.name}: set @State '${propStr}' with value ${JSON.stringify(value)} of unsupported type.`); + } + // unreachable + }.bind(this) // setStatePropToValue local function + + if (this.____is_initialized___) { + return; + } + + console.log(`${this.constructor.name}: createState '${propStr}' ...`); + + if (!this.hasOwnProperty(propStr)) { + throw new SyntaxError(`${this.constructor.name}: createState('${propStr}'): View lacks property '${propStr}'`); + } + if (this.obsPropStore.hasOwnProperty(propStr)) { + throw new SyntaxError(`${this.constructor.name}: createState('${propStr}'): View has observed property '${propStr}' already!`); + } + + // replace regular property of View with get/set property + let value = this[propStr]; + delete this[propStr]; + console.log(`${this.constructor.name}: View.createState('${propStr}', ${JSON.stringify(value)})`); + + + // in case value is an object, it must be wrapped inside an ObservableObject + this.obsPropStore[propStr] = setStatePropToValue(propStr, value); + + Object.defineProperty(this, propStr, { + get: function () { + if (this.isRenderingInProgress) { + console.log(`${this.constructor.name}: set this.propUsedToRender[{$propStr}] = true`); + this.propUsedToRender[propStr] = true; + } + return this.obsPropStore[propStr]; + }.bind(this), + + set: function (newValue) { + if (this.obsPropStore[propStr] === newValue) { + console.log(`${this.constructor.name}: View.(observed)set('${propStr}', unchanged value ${JSON.stringify(newValue)})`); + return true; + } + setStatePropToValue(propStr, newValue); + console.log(`${this.constructor.name}: View.(observed)set('${propStr}': need for update, is used in render`); + markViewNeedUpdateById(this.getViewId()) + + return true; + }.bind(this) + }); + + // native function: add this View into the global map of Views by random Id + // see also markViewNeedUpdateById + addViewById(this.getViewId(), this); + + }.bind(this); + + /** + * View.createLink(linkReference, "property") API function, in eDSL @Link + * + * in eDSL: + * + * @Component + * ParentView { + * @State myState = { ... }; + * build() { + * ChildView(boundState: $mystate) + * } + * } + * + * @Component + * ChildView{ + * @Link boundState; + * ... + * } + * + * in pure JS with ACE-Diff APIs: + * + * ParentView : View { + * constructor() { + * this.myState = { ... }; + * this.createState("myState"); + * } + * + * render() { + * return new ChildView(createLinkReference(this, "myState")); + * } + * + * ChildView : View { + * option 1 how to write constructor + * constructor(linkReference) { + * this.createLink("boundState", linkReference) + * } + * + * * option 2 how to write constructor + * constructor(linkReference) { + * this.boundState = linkReference; + * this.createLink("boundState") + * } + * } + */ + this.createLink = function (propStr, linkReference) { + + if (this.____is_initialized___) { + return; + } + + var ___linkReference___ = linkReference || this[propStr]; // to local closure use either 2nd parameter or previous defined value. + + if ((___linkReference___ === undefined) || (___linkReference___.get() === undefined)) { + throw new SyntaxError(`${this.constructor.name}: createLink for '${propStr}'. linkReference is undefined or invalid!`); + } + + console.log(`${this.constructor.name}: View.createLink('${propStr}'`); + + delete (this[propStr]); + Object.defineProperty(this, propStr, { + get: () => { + console.log(`${this.constructor.name}: Getting @Link '${propStr}'}`); + if (this.isRenderingInProgress) { + this.propUsedToRender[propStr] = true; + } + return ___linkReference___.get(); + }, + + set: (newValue) => { + if (newValue.____is_link_reference____) { + console.log(`${this.constructor.name}: set '${propStr}' with a link reference. Ignoring`); + if (this.propUsedToRender[propStr] == true) { + markViewNeedUpdateById(this.getViewId()) + } else { + console.log(`${this.constructor.name}: View.(observed)set('${propStr}': no need for update, is not used in render`); + } + return; + } + console.log(`${this.constructor.name}: Setting @Link '${propStr}' `); + + let oldValue = ___linkReference___.get(); + if (oldValue === newValue) { + console.log(`.. value unchanged, nothing to do.`); + return true; + } + // update registrations of this View to ObservableObjects (any old or new one) + if (oldValue.__observableobject__) { + console.log(`.. unregistering from ObservableObject old link value`); + oldValue.unregisterDependentView(this); + } + if (newValue.__observableobject__) { + console.log(`.. registering to ObservableObject new link value`); + newValue.registerDependentView(this); + } + if (this.propUsedToRender[propStr] == true) { + markViewNeedUpdateById(this.getViewId()) + } else { + console.log(`${this.constructor.name}: View.(observed)set('${propStr}': no need for update, is not used in render`); + } + return ___linkReference___.set(newValue); + } + }); + + if (___linkReference___.get().__observableobject__) { + console.log(`.. registering to ObservableObject new link value`); + ___linkReference___.get().registerDependentView(this); + } + + // native function: add this View into the global map of Views by random Id + // see also markViewNeedUpdateById + addViewById(this.getViewId(), this); + + }.bind(this); + + + + /** + * View.createProp("property") API function, in eDSL @Prop + * + * usage and syntax: + * 1. step set property of View to an initial value of type Bool, Number, or String/ + * this typically happens in the constructor, and the initial value is a attr of the constructor function, e.g. + * constructor(simpleValueProp) {} + * this["propStr"] = simpleValueProp + * this.createLink("propStr") + * } + * 2. step: call View.createProp("propStr") + * createProp picks up the initial value from the property and turns it into a observed link property. + * turning into an observed state property means propStr gets added to View.addObservedProp, + * and the property gets turned into a get/set property. + * + */ + this.createProp = function (propStr) { + + if (this.____is_initialized___) { + return; + } + + if (!this.hasOwnProperty(propStr)) { + throw new SyntaxErro(`${this.constructor.name}: createProp('${propStr}'). View lacks property '${propStr}'. Ignoring`); + } + if (this.obsPropStore.hasOwnProperty(propStr)) { + throw new SyntaxError(`${this.constructor.name}: createProp('${propStr}'): View has observed property '${propStr}' already!`); + } + + // replace regular property of View with a get/set property + let value = this[propStr]; + delete this[propStr]; + + console.log(`${this.constructor.name}: View.createProp('${propStr}', ${JSON.stringify(value)}) by-value type value.`); + + // check and set the value type, and set value to View's obsPropStore + if ((typeof value != "number") && (typeof value != "bool") && (typeof value != "string")) { + throw new SyntaxError(`${this.constructor.name} Create @Prop('${propStr}'): ${value} must be a Bool, Number, or String.`); + } + console.log(`${this.constructor.name}: Set @Prop '${propStr}' to ${JSON.stringify(value)}.`); + this.obsPropStore[propStr] = value; + + // define get/set property to obtain value from View's obsPropStore + Object.defineProperty(this, propStr, { + get: () => { + console.log(`${this.constructor.name}: Get @Prop '${propStr}'`); + if (this.isRenderingInProgress) { + this.propUsedToRender[propStr] = true; + } + return this.obsPropStore[propStr]; + }, + set: (newValue) => { + if (this.obsPropStore[propStr] === newValue) { + console.log(`${this.constructor.name}: Set @Prop '${propStr}' value ${JSON.stringify(newValue)} unchanged.`); + return true; + } + + if ((typeof newValue != "number") && (typeof newValue != "bool") && (typeof newValue != "string")) { + throw new SyntaxError(`${this.constructor.name} set @Prop('${propStr}'): ${newValue} must be a Bool, Number, or String.`); + } + console.log(`${this.constructor.name}: Set @Prop '${propStr}' to ${JSON.stringify(newValue)}.`); + this.obsPropStore[propStr] = newValue; + + if (this.propUsedToRender[propStr] == true) { + markViewNeedUpdateById(this.getViewId()) + } else { + console.log(`${this.constructor.name}: View.(observed)set('${propStr}': no need for update, is not used in render`); + } + return true; + } + }) + + // native function: add this View into the global map of Views by random Id + // see also markViewNeedUpdateById + addViewById(this.getViewId(), this); + + }.bind(this); // createProp function + } + + aboutToRender() { + this.isRenderingInProgress = true; + Object.keys(this.obsPropStore).forEach((prop) => this.propUsedToRender[prop] = false); + console.log(`${this.constructor.name}: aboutToRender: these properties to monitor get access: ${JSON.stringify(this.propUsedToRender)}.`); + + } + + onRenderDone() { + this.isRenderingInProgress = false; + console.log(`${this.constructor.name}: onRenderDone: render performed get access to these properties: ${JSON.stringify(this.propUsedToRender)}.`); + } +} diff --git a/frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_click_function.cpp b/frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_click_function.cpp new file mode 100644 index 00000000..d937f422 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_click_function.cpp @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_click_function.h" + +#include "base/log/log.h" +#include "frameworks/bridge/declarative_frontend/engine/quickjs/qjs_declarative_engine_instance.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_view_register.h" +#include "frameworks/bridge/js_frontend/engine/quickjs/qjs_utils.h" + +namespace OHOS::Ace::Framework { + +void QJSClickFunction::execute() +{ + JSValue result = QJSFunction::executeJS(); + + if (JS_IsException(result)) { + QjsUtils::JsStdDumpErrorAce(ctx_); + } + + // This is required to request for new frame, which eventually will call + // FlushBuild, FlushLayout and FlushRender on the dirty elements + auto* instance = QJSDeclarativeEngineInstance::UnWrapEngineInstance(ctx_); + if (instance != nullptr) { + instance->GetDelegate()->GetPipelineContext()->AddPageUpdateTask([] {}); + } else { + LOGE("QJS context has no ref to engine instance. Failed!"); + } + + JS_FreeValue(ctx_, result); +} + +void QJSClickFunction::MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc) +{ + LOGD("QJSClickFunction(MarkGC): start"); + QJSFunction::MarkGC(rt, markFunc); + JS_MarkValue(rt, jsFunction_, markFunc); + LOGD("QJSClickFunction(MarkGC): end"); +} + +void QJSClickFunction::ReleaseRT(JSRuntime* rt) +{ + LOGD("QJSClickFunction(release): start"); + QJSFunction::ReleaseRT(rt); + JS_FreeValueRT(rt, jsFunction_); + LOGD("QJSClickFunction(release): end"); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_click_function.h b/frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_click_function.h new file mode 100644 index 00000000..eec30bf0 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_click_function.h @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_ENGINE_QUICKJS_FUNCTION_QJS_CLICK_FUNCTION_H +#define FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_ENGINE_QUICKJS_FUNCTION_QJS_CLICK_FUNCTION_H + +#include "frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_function.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_view_abstract.h" + +namespace OHOS::Ace::Framework { + +class QJSClickFunction : public QJSFunction { + DECLARE_ACE_TYPE(QJSClickFunction, QJSFunction) + +public: + QJSClickFunction(JSContext* ctx, JSValue jsFunction) : QJSFunction(ctx, JS_UNDEFINED, jsFunction) {} + ~QJSClickFunction() + { + LOGD("Destroy: QJSClickFunction"); + }; + + virtual void MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc) override; + virtual void ReleaseRT(JSRuntime* rt) override; + + void execute(); +}; + +} // namespace OHOS::Ace::Framework + +#endif // FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_ENGINE_QUICKJS_FUNCTION_QJS_CLICK_FUNCTION_H diff --git a/frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_foreach_function.cpp b/frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_foreach_function.cpp new file mode 100644 index 00000000..013775a2 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_foreach_function.cpp @@ -0,0 +1,272 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_foreach_function.h" + +#include "frameworks/bridge/declarative_frontend/engine/quickjs/qjs_declarative_engine_instance.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_view.h" + +namespace OHOS::Ace::Framework { + +std::vector> QJSForEachFunction::execute() +{ + std::vector> result; + + JSValue jsKeys = JS_NULL; + if (!JS_IsNull(jsIdentityMapperFunc_)) { + jsKeys = QJSFunction::executeJS(1, &jsIdentityMapperFunc_); + + if (JS_IsException(jsKeys)) { + QjsUtils::JsStdDumpErrorAce(ctx_); + JS_FreeValue(ctx_, jsKeys); + return result; + } + } + + JSValue jsViews = QJSFunction::executeJS(1, &jsViewMapperFunc_); + + if (JS_IsException(jsViews)) { + QjsUtils::JsStdDumpErrorAce(ctx_); + JS_FreeValue(ctx_, jsViews); + return result; + } + + int length = 0; + JSValue jsLength = JS_GetPropertyStr(ctx_, jsViews, "length"); + JS_ToInt32(ctx_, &length, jsLength); + JS_FreeValue(ctx_, jsLength); + + for (int i = 0; i < length; i++) { + // this is safe because both results are from the same array + JSValue jsView = JS_GetPropertyUint32(ctx_, jsViews, i); + + JSValue jsKey = JS_NULL; + if (!JS_IsNull(jsKeys)) { + jsKey = JS_GetPropertyUint32(ctx_, jsKeys, i); + if (!JS_IsString(jsKey) && !JS_IsNumber(jsKey)) { + LOGE("ForEach Item with invalid identifier........."); + JS_FreeValue(ctx_, jsKey); + continue; + } + } + + std::string key(JS_IsNull(jsKeys) ? std::to_string(i) : JS_ToCString(ctx_, jsKey)); + LOGD("ForEach item with identifier: %s", key.c_str()); + + if (JS_IsArray(ctx_, jsView)) { + int arrLength = 0; + JSValue jsArrLength = JS_GetPropertyStr(ctx_, jsView, "length"); + JS_ToInt32(ctx_, &arrLength, jsArrLength); + JS_FreeValue(ctx_, jsArrLength); + for (int j = 0; j < arrLength; j++) { + JSValue jsArritem = JS_GetPropertyUint32(ctx_, jsView, i); + JSViewAbstract* view = static_cast(UnwrapAny(jsArritem)); + JS_FreeValue(ctx_, jsArritem); + result.emplace_back(std::make_tuple(key + "_" + std::to_string(j), view)); + } + } else { + JSViewAbstract* value = static_cast(UnwrapAny(jsView)); + result.emplace_back(std::make_tuple(key, value)); + } + if (!JS_IsNull(jsKey)) { + JS_FreeValue(ctx_, jsKey); + } + JS_FreeValue(ctx_, jsView); + } + if (!JS_IsNull(jsKeys)) { + JS_FreeValue(ctx_, jsKeys); + } + jsResult_ = jsViews; + + return result; +} + +std::vector QJSForEachFunction::executeIdentityMapper() +{ + std::vector result; + + JSValue jsKeys = JS_NULL; + if (!JS_IsNull(jsIdentityMapperFunc_)) { + JSValue jsKeys = QJSFunction::executeJS(1, &jsIdentityMapperFunc_); + + if (JS_IsException(jsKeys)) { + QjsUtils::JsStdDumpErrorAce(ctx_); + JS_FreeValue(ctx_, jsKeys); + return result; + } + } + + int length = 0; + JSValue jsLength; + if (!JS_IsNull(jsKeys)) { + jsLength = JS_GetPropertyStr(ctx_, jsKeys, "length"); + } else { + jsLength = JS_GetPropertyStr(ctx_, jsThis_, "length"); + } + JS_ToInt32(ctx_, &length, jsLength); + JS_FreeValue(ctx_, jsLength); + + for (int i = 0; i < length; i++) { + if (!JS_IsNull(jsKeys)) { + // this is safe because both results are from the same array + JSValue jsKey = JS_GetPropertyUint32(ctx_, jsKeys, i); + + if (!JS_IsString(jsKey) && !JS_IsNumber(jsKey)) { + LOGE("ForEach Item with invalid identifier........."); + JS_FreeValue(ctx_, jsKey); + continue; + } + + std::string key(JS_ToCString(ctx_, jsKey)); + LOGD("ForEach item with identifier: %s", key.c_str()); + + JS_FreeValue(ctx_, jsKey); + result.emplace_back(key); + } else { + result.emplace_back(std::to_string(i)); + } + } + + if (!JS_IsNull(jsKeys)) { + JS_FreeValue(ctx_, jsKeys); + } + + return result; +} + +std::vector QJSForEachFunction::executeBuilderForIndex(int32_t index) +{ + // indexed item + JSValue jsItem = JS_GetPropertyUint32(ctx_, jsThis_, index); + JSValue jsView = JS_Call(ctx_, jsViewMapperFunc_, jsThis_, 1, &jsItem); + JS_FreeValue(ctx_, jsItem); + if (JS_IsException(jsView)) { + QjsUtils::JsStdDumpErrorAce(ctx_); + JS_FreeValue(ctx_, jsView); + return {}; + } + + std::vector result; + if (JS_IsArray(ctx_, jsView)) { + int length = 0; + JSValue jsLength = JS_GetPropertyStr(ctx_, jsView, "length"); + JS_ToInt32(ctx_, &length, jsLength); + JS_FreeValue(ctx_, jsLength); + for (int i = 0; i < length; i++) { + JSValue jsArritem = JS_GetPropertyUint32(ctx_, jsView, i); + JSViewAbstract* view = static_cast(UnwrapAny(jsArritem)); + JS_FreeValue(ctx_, jsArritem); + result.emplace_back(view); + } + } else { + JSViewAbstract* view = static_cast(UnwrapAny(jsView)); + result.emplace_back(view); + } + + if (JS_IsNull(jsResult_)) { + jsResult_ = JS_NewArray(ctx_); + } + + if (JS_IsArray(ctx_, jsResult_)) { + JSValue jsPushFunc_ = JS_GetPropertyStr(ctx_, jsResult_, "push"); + JSValue jsPushResult = JS_Call(ctx_, jsPushFunc_, jsResult_, 1, &jsView); + // JS_Call internally dups the argument + // hence JS_FreeValue is added here. + // without this the destruction of the newly add view fail + JS_FreeValue(ctx_, jsView); + + if (JS_IsException(jsPushResult)) { + QjsUtils::JsStdDumpErrorAce(ctx_); + JS_FreeValue(ctx_, jsPushResult); + return {}; + } + } + return result; +} + +void QJSForEachFunction::PostTask(std::function&& task) +{ + // though its named PostJsTask, in acediff ui and js thread are the same + // FIXME: During cleanup of the ace-diff + QJSDeclarativeEngineInstance::PostJsTask(ctx_, std::move(task)); +} + +void QJSForEachFunction::MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc) +{ + LOGD("QJSForEachFunction(MarkGC): start"); + QJSFunction::MarkGC(rt, markFunc); + if (!JS_IsNull(jsResult_)) { + JS_MarkValue(rt, jsResult_, markFunc); + } + JS_MarkValue(rt, QJSFunction::jsThis_, markFunc); + JS_MarkValue(rt, QJSFunction::jsFunction_, markFunc); + JS_MarkValue(rt, jsIdentityMapperFunc_, markFunc); + JS_MarkValue(rt, jsViewMapperFunc_, markFunc); + LOGD("QJSForEachFunction(MarkGC): end"); +} + +void QJSForEachFunction::ReleaseRT(JSRuntime* rt) +{ + LOGD("QJSForEachFunction(release): start"); + QJSFunction::ReleaseRT(rt); + if (!JS_IsNull(jsResult_)) { + JS_FreeValueRT(rt, jsResult_); + } + JS_FreeValueRT(rt, QJSFunction::jsThis_); + JS_FreeValueRT(rt, QJSFunction::jsFunction_); + JS_FreeValueRT(rt, jsIdentityMapperFunc_); + JS_FreeValueRT(rt, jsViewMapperFunc_); + LOGD("QJSForEachFunction(release): end"); +} + +void QJSForEachFunction::Destroy(JSViewAbstract* parentCustomView) +{ + LOGD("QJSForEachFunction::Destroy start"); + if (!JS_IsNull(jsResult_)) { + int length = 0; + JSValue jsLength = JS_GetPropertyStr(ctx_, jsResult_, "length"); + JS_ToInt32(ctx_, &length, jsLength); + JS_FreeValue(ctx_, jsLength); + + for (int i = 0; i < length; i++) { + // this is safe because both results are from the same array + JSValue jsView = JS_GetPropertyUint32(ctx_, jsResult_, i); + if (JS_IsArray(ctx_, jsView)) { + int arrLength = 0; + JSValue jsArrLength = JS_GetPropertyStr(ctx_, jsView, "length"); + JS_ToInt32(ctx_, &arrLength, jsArrLength); + JS_FreeValue(ctx_, jsArrLength); + for (int i = 0; i < arrLength; i++) { + JSValue jsArritem = JS_GetPropertyUint32(ctx_, jsView, i); + JSViewAbstract* view = static_cast(UnwrapAny(jsArritem)); + JS_FreeValue(ctx_, jsArritem); + if (view && !view->IsCustomView()) { + view->Destroy(parentCustomView); + } + } + } else if (JS_IsObject(jsView)) { + JSViewAbstract* view = static_cast(UnwrapAny(jsView)); + if (view && !view->IsCustomView()) { + view->Destroy(parentCustomView); + } + } + } + JS_FreeValue(ctx_, jsResult_); + jsResult_ = JS_NULL; + } + LOGD("QJSForEachFunction::Destroy end"); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_foreach_function.h b/frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_foreach_function.h new file mode 100644 index 00000000..48690d22 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_foreach_function.h @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_ENGINE_QUICKJS_FUNCTION_QJS_FOREACH_FUNCTION_H +#define FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_ENGINE_QUICKJS_FUNCTION_QJS_FOREACH_FUNCTION_H + +#include + +#include "frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_function.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_view_abstract.h" + +namespace OHOS::Ace::Framework { + +class QJSForEachFunction : public QJSFunction { + DECLARE_ACE_TYPE(QJSForEachFunction, QJSFunction) + +private: + JSValue jsIdentityMapperFunc_ = JS_NULL; + JSValue jsViewMapperFunc_ = JS_NULL; + JSValue jsResult_ = JS_NULL; + +public: + QJSForEachFunction(JSContext* ctx, JSValue jsArray, JSValue jsIdentityMapperFunc, JSValue jsViewMapperFunc) + : QJSFunction(ctx, JS_UNDEFINED, JS_UNDEFINED) + { + QJSFunction::jsThis_ = JS_DupValue(ctx, jsArray); + QJSFunction::jsFunction_ = JS_GetPropertyStr(ctx, jsArray, "map"); // intrinsic property of array + if (!JS_IsNull(jsIdentityMapperFunc)) { + jsIdentityMapperFunc_ = JS_DupValue(ctx, jsIdentityMapperFunc); + } + jsViewMapperFunc_ = JS_DupValue(ctx, jsViewMapperFunc); + } + + ~QJSForEachFunction() + { + LOGD("Destroy: QJSForEachFunction"); + } + + // ForEach Syntax + // ForEach( + // [item], // proxied array of data items + // (item => String), // IdentifierFunction: provide unique id for given data item + // (item => View) // BuilderFunction: provide View for given data item + // ) + // This exexutes the IdentifierFunction + std::vector> execute(); + + // This exexutes the IdentifierFunction on all items in a array + // returns the vector of keys/ids in the same order. + std::vector executeIdentityMapper(); + + // This exexutes the BuilderFunction on a specific index + // returns the native JsView for the item in index. + std::vector executeBuilderForIndex(int32_t index); + + // Post task to the UI thread. + // In ace_diff UI and js runs on the same thread + void PostTask(std::function&& task); + + virtual void MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc) override; + virtual void ReleaseRT(JSRuntime* rt) override; + + virtual void Destroy(JSViewAbstract* parentCustomView); + +}; // QJSForEachFunction + +} // namespace OHOS::Ace::Framework + +#endif // FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_ENGINE_QUICKJS_FUNCTION_QJS_FOREACH_FUNCTION_H diff --git a/frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_function.cpp b/frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_function.cpp new file mode 100644 index 00000000..1fac0f8a --- /dev/null +++ b/frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_function.cpp @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_function.h" + +#include "base/log/ace_trace.h" +#include "base/log/log.h" +#include "frameworks/bridge/js_frontend/engine/quickjs/qjs_utils.h" + +namespace OHOS::Ace::Framework { + +QJSFunction::QJSFunction(JSContext* ctx, JSValue jsObject, JSValue jsFunction) +{ + // Do not duplicate values here. + // jsObject determines the lifecycle of this object. + // jsFunction can be: (1) property of jsObject + // (2) argument to a different function + // case 1: duplicating jsFunction value will prevent GC on its owner jsObject. + // case 2: Duplicate this value, at the position where the argument was passed (onClick() for example) + ctx_ = ctx; + jsThis_ = jsObject; + jsFunction_ = jsFunction; +} + +QJSFunction::~QJSFunction() +{ + ctx_ = nullptr; +} + +JSValue QJSFunction::executeJS(int argc, JSValueConst* argv) +{ + ACE_DCHECK(JS_IsFunction(ctx_, jsFunction_) && "jsFunction is not a JS Function"); + + ACE_FUNCTION_TRACE(); + + const char* jsFunctionStr = JS_ToCString(ctx_, jsFunction_); + LOGD("JS_CALL: %s", jsFunctionStr); + JS_FreeCString(ctx_, jsFunctionStr); + + // The function might delete itself or the object in a callback. Safe to duplicate before execution + JSValue jsTmpFunc = JS_DupValue(ctx_, jsFunction_); + JSValue jsTmpThis = JS_DupValue(ctx_, jsThis_); + + JSValue result = JS_Call(ctx_, jsTmpFunc, jsTmpThis, argc, argv); + + JS_FreeValue(ctx_, jsTmpFunc); + JS_FreeValue(ctx_, jsTmpThis); + + if (JS_IsException(result)) { + QjsUtils::JsStdDumpErrorAce(ctx_); + JS_FreeValue(ctx_, result); + return JS_NULL; + } + + return result; +} + +void QJSFunction::MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc) {} + +void QJSFunction::ReleaseRT(JSRuntime* rt) +{ + LOGD("QJSFunction(release): start"); + ctx_ = nullptr; + LOGD("QJSFunction(release): end"); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_function.h b/frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_function.h new file mode 100644 index 00000000..31cf7fd0 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_function.h @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_ENGINE_QUICKJS_FUNCTION_QJS_FUNCTION_H +#define FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_ENGINE_QUICKJS_FUNCTION_QJS_FUNCTION_H + +#include "base/memory/ace_type.h" + +#ifdef __cplusplus +extern "C" { +#endif +#include "third_party/quickjs/quickjs.h" +#ifdef __cplusplus +} +#endif + +#include "functional" + +#include "frameworks/bridge/js_frontend/engine/quickjs/qjs_utils.h" + +namespace OHOS::Ace::Framework { + +class QJSFunction : public virtual AceType { + DECLARE_ACE_TYPE(QJSFunction, AceType); + +public: + QJSFunction(JSContext* ctx, JSValue jsObject, JSValue jsFunction); + ~QJSFunction(); + + virtual void MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc); + virtual void ReleaseRT(JSRuntime* rt); + +protected: + virtual JSValue executeJS(int argc = 0, JSValueConst* argv = nullptr) final; + + JSValue jsFunction_; + JSValue jsThis_; + JSContext* ctx_; +}; + +template +class QJSEventFunction : public QJSFunction { + DECLARE_ACE_TYPE(QJSEventFunction, QJSFunction); + +public: + using ParseFunc = std::function; + QJSEventFunction() = delete; + QJSEventFunction(JSContext* ctx, JSValue jsFunction, ParseFunc parser) + : QJSFunction(ctx, JS_UNDEFINED, jsFunction), parser_(parser) {}; + ~QJSEventFunction() = default; + + void execute() + { + JSValue result = QJSFunction::executeJS(); + if (JS_IsException(result)) { + QjsUtils::JsStdDumpErrorAce(ctx_); + } + JS_FreeValue(ctx_, result); + } + + void execute(const T& eventInfo) + { + JSValue param = 0; + if (parser_) { + param = parser_(eventInfo, ctx_); + } + if (JS_IsException(param)) { + QjsUtils::JsStdDumpErrorAce(ctx_); + } + JSValue result = QJSFunction::executeJS(ARGC, ¶m); + if (JS_IsException(result)) { + QjsUtils::JsStdDumpErrorAce(ctx_); + } + JS_FreeValue(ctx_, result); + } + + void MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc) override + { + QJSFunction::MarkGC(rt, markFunc); + JS_MarkValue(rt, jsFunction_, markFunc); + } + void ReleaseRT(JSRuntime* rt) override + { + QJSFunction::ReleaseRT(rt); + JS_FreeValueRT(rt, jsFunction_); + } + +private: + ParseFunc parser_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_ENGINE_QUICKJS_FUNCTION_QJS_FUNCTION_H diff --git a/frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_touch_function.cpp b/frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_touch_function.cpp new file mode 100644 index 00000000..1ebda797 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_touch_function.cpp @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_touch_function.h" + +#include "base/log/log.h" +#include "core/gestures/raw_recognizer.h" +#include "frameworks/bridge/declarative_frontend/engine/quickjs/qjs_declarative_engine_instance.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_view_register.h" +#include "frameworks/bridge/js_frontend/engine/quickjs/qjs_utils.h" + +namespace OHOS::Ace::Framework { + +JSValue QJSTouchFunction::createTouchInfo(const TouchCallBackInfo& touchInfo) +{ + JSValue touchInfoObj = JS_NewObject(ctx_); + JS_SetPropertyStr(ctx_, touchInfoObj, "type", JS_NewFloat64(ctx_, static_cast(touchInfo.GetTouchType()))); + JS_SetPropertyStr(ctx_, touchInfoObj, "screenX", JS_NewFloat64(ctx_, touchInfo.GetScreenX())); + JS_SetPropertyStr(ctx_, touchInfoObj, "screenY", JS_NewFloat64(ctx_, touchInfo.GetScreenY())); + JS_SetPropertyStr(ctx_, touchInfoObj, "x", JS_NewFloat64(ctx_, touchInfo.GetLocalX())); + JS_SetPropertyStr(ctx_, touchInfoObj, "y", JS_NewFloat64(ctx_, touchInfo.GetLocalY())); + JS_SetPropertyStr(ctx_, touchInfoObj, "timestamp", + JS_NewFloat64(ctx_, static_cast(touchInfo.GetTimeStamp().time_since_epoch().count()))); + return touchInfoObj; +} + +void QJSTouchFunction::execute(const TouchCallBackInfo& info) +{ + LOGD("QJSTouchFunction: eventType[%s]", info.GetType().c_str()); + JSValue param = createTouchInfo(info); + + if (JS_IsException(param)) { + QjsUtils::JsStdDumpErrorAce(ctx_); + } + + JSValue result = QJSFunction::executeJS(1, ¶m); + + if (JS_IsException(result)) { + QjsUtils::JsStdDumpErrorAce(ctx_); + } + + JS_FreeValue(ctx_, result); +} + +void QJSTouchFunction::MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc) +{ + LOGD("QJSTouchFunction(MarkGC): start"); + QJSFunction::MarkGC(rt, markFunc); + JS_MarkValue(rt, jsFunction_, markFunc); + LOGD("QJSTouchFunction(MarkGC): end"); +} + +void QJSTouchFunction::ReleaseRT(JSRuntime* rt) +{ + LOGD("QJSTouchFunction(release): start"); + QJSFunction::ReleaseRT(rt); + JS_FreeValueRT(rt, jsFunction_); + LOGD("QJSTouchFunction(release): end"); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_touch_function.h b/frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_touch_function.h new file mode 100644 index 00000000..9e2d59cf --- /dev/null +++ b/frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_touch_function.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_ENGINE_QUICKJS_FUNCTION_QJS_TOUCH_FUNCTION_H +#define FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_ENGINE_QUICKJS_FUNCTION_QJS_TOUCH_FUNCTION_H + +#include "base/geometry/offset.h" +#include "frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_function.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_view_abstract.h" +#include "frameworks/core/gestures/raw_recognizer.h" + +namespace OHOS::Ace::Framework { + +class QJSTouchFunction : public QJSFunction { + DECLARE_ACE_TYPE(QJSTouchFunction, QJSFunction) + +public: + QJSTouchFunction(JSContext* ctx, JSValue jsFunction) : QJSFunction(ctx, JS_UNDEFINED, jsFunction) {} + ~QJSTouchFunction() + { + LOGD("Destroy: QJSTouchFunction"); + }; + + virtual void MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc) override; + virtual void ReleaseRT(JSRuntime* rt) override; + + void execute(const TouchCallBackInfo& info); + +private: + JSValue createTouchInfo(const TouchCallBackInfo& touchInfo); +}; + +} // namespace OHOS::Ace::Framework + +#endif // FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_ENGINE_QUICKJS_FUNCTION_QJS_TOUCH_FUNCTION_H diff --git a/frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_view_function.cpp b/frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_view_function.cpp new file mode 100644 index 00000000..c587bf65 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_view_function.cpp @@ -0,0 +1,195 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_view_function.h" + +#include "base/log/log.h" +#include "frameworks/bridge/declarative_frontend/engine/quickjs/qjs_declarative_engine_instance.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_view_register.h" +#include "frameworks/bridge/js_frontend/engine/quickjs/qjs_utils.h" + +namespace OHOS::Ace::Framework { + +QJSViewFunction::QJSViewFunction(JSContext* ctx, JSValue jsObject, JSValue jsFunction) + : QJSFunction(ctx, jsObject, JS_UNDEFINED), jsRenderResult_(JS_NULL) +{ + LOGD("Create: QJSViewFunction"); + + QJSContext::Scope scope(ctx); + + JSAtom appearProp = JS_NewAtom(ctx, "aboutToAppear"); + JSValue jsAppearFunction = JS_GetProperty(ctx, jsObject, appearProp); + if (JS_IsFunction(ctx, jsAppearFunction)) { + jsAppearFunction_ = jsAppearFunction; + } + JS_FreeAtom(ctx, appearProp); + + JSAtom disappearProp = JS_NewAtom(ctx, "aboutToDisappear"); + JSValue jsDisappearFunction = JS_GetProperty(ctx, jsObject, disappearProp); + if (JS_IsFunction(ctx, jsDisappearFunction)) { + jsDisappearFunction_ = jsDisappearFunction; + } + JS_FreeAtom(ctx, disappearProp); + JSAtom aboutToRenderProp = JS_NewAtom(ctx, "aboutToRender"); + JSValue jsAboutToRenderFunction = JS_GetProperty(ctx, jsObject, aboutToRenderProp); + if (JS_IsFunction(ctx, jsAboutToRenderFunction)) { + jsAboutToRenderFunc_ = jsAboutToRenderFunction; + } + JS_FreeAtom(ctx, aboutToRenderProp); + + JSAtom renderDoneProp = JS_NewAtom(ctx, "onRenderDone"); + JSValue jsRenderDoneFunction = JS_GetProperty(ctx, jsObject, renderDoneProp); + if (JS_IsFunction(ctx, jsRenderDoneFunction)) { + jsRenderDoneFunc_ = jsRenderDoneFunction; + } + JS_FreeAtom(ctx, renderDoneProp); + jsRenderFunction_ = jsFunction; +} + +QJSViewFunction::~QJSViewFunction() +{ + LOGD("Destroy: QJSViewFunction"); +} + +// FIXME: This need to return const value. So no accidental deletions of the returned view. +JSViewAbstract* QJSViewFunction::executeRender() +{ + /* + Function might not be invoked in the JS file ever (like render()) + In that case, the returned value is neve referenced there so it never goes out of scope + Because of that, the JSValue is never released. + Since C++ produces the result value, it is the responsibility of this native object to release it. + */ + + ACE_SCOPED_TRACE("QJSViewFunction::executeRender(complete function)"); + + ACE_DCHECK(ctx_ != nullptr); + QJSContext::Scope scope(ctx_); + + jsFunction_ = jsRenderFunction_; + jsRenderResult_ = QJSFunction::executeJS(); + jsFunction_ = JS_UNDEFINED; + + if (JS_IsException(jsRenderResult_)) { + QjsUtils::JsStdDumpErrorAce(ctx_); + JS_FreeValue(ctx_, jsRenderResult_); + jsRenderResult_ = JS_NULL; + return nullptr; + } + + JSViewAbstract* view = static_cast(UnwrapAny(jsRenderResult_)); + return view; +} + +void QJSViewFunction::executeAppear() +{ + ACE_SCOPED_TRACE("QJSViewFunction::executeAppear(complete function)"); + + ACE_DCHECK(ctx_ != nullptr); + QJSContext::Scope scope(ctx_); + + if (!JS_IsNull(jsAppearFunction_)) { + jsFunction_ = jsAppearFunction_; + QJSFunction::executeJS(); + jsFunction_ = JS_UNDEFINED; + } else { + LOGD("View doesn't have aboutToAppear() method!"); + } +} + +void QJSViewFunction::executeDisappear() +{ + ACE_SCOPED_TRACE("QJSViewFunction::executeDisappear(complete function)"); + + ACE_DCHECK(ctx_ != nullptr); + QJSContext::Scope scope(ctx_); + + if (!JS_IsNull(jsDisappearFunction_)) { + jsFunction_ = jsDisappearFunction_; + QJSFunction::executeJS(); + jsFunction_ = JS_UNDEFINED; + } else { + LOGD("View doesn't have aboutToDisappear() method!"); + } +} + +void QJSViewFunction::executeAboutToRender() +{ + ACE_SCOPED_TRACE("QJSViewFunction::executeAboutToRender(complete function)"); + + ACE_DCHECK(ctx_ != nullptr); + QJSContext::Scope scope(ctx_); + + if (JS_IsFunction(ctx_, jsAboutToRenderFunc_)) { + jsFunction_ = jsAboutToRenderFunc_; + QJSFunction::executeJS(); + jsFunction_ = JS_UNDEFINED; + } +} + +void QJSViewFunction::executeOnRenderDone() +{ + ACE_SCOPED_TRACE("QJSViewFunction::executeOnRenderDone(complete function)"); + + ACE_DCHECK(ctx_ != nullptr); + QJSContext::Scope scope(ctx_); + + if (JS_IsFunction(ctx_, jsRenderDoneFunc_)) { + jsFunction_ = jsRenderDoneFunc_; + QJSFunction::executeJS(); + jsFunction_ = JS_UNDEFINED; + } +} +void QJSViewFunction::MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc) +{ + LOGD("QJSViewFunction(MarkGC): start"); + QJSFunction::MarkGC(rt, markFunc); + if (!JS_IsNull(jsRenderResult_)) { + JS_MarkValue(rt, jsRenderResult_, markFunc); + } + LOGD("QJSViewFunction(MarkGC): end"); +} + +void QJSViewFunction::ReleaseRT(JSRuntime* rt) +{ + LOGD("QJSViewFunction(release): start"); + QJSFunction::ReleaseRT(rt); + + if (!JS_IsNull(jsRenderResult_)) { + JS_FreeValueRT(rt, jsRenderResult_); + } + ctx_ = nullptr; + LOGD("QJSViewFunction(release): end"); +} + +void QJSViewFunction::Destroy(JSViewAbstract* parentCustomView) +{ + LOGD("QJSViewFunction::Destroy() start"); + + if (!JS_IsNull(jsRenderResult_)) { + JSViewAbstract* view = static_cast(UnwrapAny(jsRenderResult_)); + + if (view && !view->IsCustomView()) { + view->Destroy(parentCustomView); + } + + LOGD("Release previous view"); + JS_FreeValue(ctx_, jsRenderResult_); + jsRenderResult_ = JS_NULL; + } + LOGD("QJSViewFunction::Destroy() end"); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_view_function.h b/frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_view_function.h new file mode 100644 index 00000000..b1776d4e --- /dev/null +++ b/frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_view_function.h @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_ENGINE_QUICKJS_FUNCTION_QJS_VIEW_FUNCTION_H +#define FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_ENGINE_QUICKJS_FUNCTION_QJS_VIEW_FUNCTION_H + +#include "frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_function.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_view_abstract.h" + +namespace OHOS::Ace::Framework { + +class QJSViewFunction : public QJSFunction { + DECLARE_ACE_TYPE(QJSViewFunction, QJSFunction) + +public: + QJSViewFunction(JSContext* ctx, JSValue jsObject, JSValue jsFunction); + ~QJSViewFunction(); + + virtual void MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc) override; + virtual void ReleaseRT(JSRuntime* rt) override; + virtual void Destroy(JSViewAbstract* parentCustomView); + + JSViewAbstract* executeRender(); + void executeAppear(); + void executeDisappear(); + void executeAboutToRender(); + void executeOnRenderDone(); + +private: + JSValue jsAppearFunction_ = JS_NULL; + JSValue jsDisappearFunction_ = JS_NULL; + JSValue jsRenderFunction_ = JS_NULL; + JSValue jsAboutToRenderFunc_ = JS_NULL; + JSValue jsRenderDoneFunc_ = JS_NULL; + JSValue jsRenderResult_ = JS_NULL; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_ENGINE_QUICKJS_FUNCTION_QJS_RENDER_FUNCTION_H diff --git a/frameworks/bridge/declarative_frontend/engine/quickjs/qjs_bindings.cpp b/frameworks/bridge/declarative_frontend/engine/quickjs/qjs_bindings.cpp new file mode 100644 index 00000000..ab28fc82 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/engine/quickjs/qjs_bindings.cpp @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "qjs_bindings.h" +namespace OHOS::Ace::Framework { + +std::vector g_classIds; + +void* UnwrapAny(JSValueConst val) +{ + return JS_GetOpaqueA(val, g_classIds.data(), g_classIds.size()); +} + +}; // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/engine/quickjs/qjs_bindings.h b/frameworks/bridge/declarative_frontend/engine/quickjs/qjs_bindings.h new file mode 100644 index 00000000..5da10d06 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/engine/quickjs/qjs_bindings.h @@ -0,0 +1,211 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_ENGINE_QUICKJS_BINDINGS +#define FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_ENGINE_QUICKJS_BINDINGS + +#include "base/log/log.h" +#include "base/memory/ace_type.h" +#include "frameworks/bridge/common/utils/class_utils.h" +#include "frameworks/bridge/common/utils/function_traits.h" +#include "frameworks/bridge/declarative_frontend/engine/bindings_implementation.h" +#include "frameworks/bridge/declarative_frontend/engine/quickjs/qjs_value_conversions.h" +#include "frameworks/bridge/js_frontend/engine/quickjs/qjs_utils.h" + +#ifdef __cplusplus +extern "C" { +#endif +#include "third_party/quickjs/cutils.h" +#include "third_party/quickjs/quickjs-libc.h" + +void* JS_GetOpaqueA(JSValueConst obj, JSClassID* classIds, size_t classIdLen); + +JSValueConst JS_NewGlobalCConstructor( + JSContext* ctx, const char* name, JSCFunction* func, int length, JSValueConst proto); + +#ifdef __cplusplus +} +#endif + +// FIXME(cvetan) Move to appropriate file and if possibly consolidate this with V8 conversions +namespace __detail__ { + +template +struct IsSignedInt { + static constexpr bool value = + std::is_integral::value && std::is_signed::value && !std::is_same::value; +}; + +template +static constexpr bool is_signed_int_v = IsSignedInt::value; + +template +T FromJSValue(JSValueConst val) +{ + static_assert(!std::is_const_v && !std::is_reference_v, // + "Cannot convert values to reference or cv-qualified types!"); + + JSContext* ctx = OHOS::Ace::Framework::QJSContext::current(); + if constexpr (is_signed_int_v) { + int64_t res; + JS_ToInt64(ctx, &res, val); + return res; + } else if constexpr (std::is_unsigned_v) { + uint32_t res; + JS_ToUint32(ctx, &res, val); + return res; + } else if constexpr (std::is_floating_point_v) { + double res; + JS_ToFloat64(ctx, &res, val); + return res; + } else if constexpr (std::is_same_v) { + OHOS::Ace::Framework::ScopedString str(val); + return str.str(); + } + + return T(); +} + +template +JSValue ToJSValue(T val) +{ + JSContext* ctx = OHOS::Ace::Framework::QJSContext::current(); + if constexpr (is_signed_int_v) { + return JS_NewInt64(ctx, val); + } else if constexpr (std::is_unsigned_v) { + return JS_NewInt64(ctx, val); + } else if constexpr (std::is_floating_point_v) { + return JS_NewFloat64(ctx, val); + } else if constexpr (std::is_same_v) { + return JS_NewStringLen(ctx, val.c_str(), val.size()); + } else if constexpr (std::is_same_v) { + return JS_NewStringLen(ctx, val, strlen(val)); + } + + return JS_ThrowInternalError(ctx, "Conversion failure..."); +} + +template +struct TupleConverter { + std::tuple operator()(JSValueConst* argv) + { + int index = 0; + return { + __detail__::FromJSValue(argv[index++])..., + }; + } +}; + +}; // namespace __detail__ + +namespace OHOS::Ace::Framework { + +extern std::vector g_classIds; + +void* UnwrapAny(JSValueConst val); + +template +JSValue Wrap(JSValueConst newTarget, T* thisPtr); + +template +JSValue Wrap(T* thisPtr); + +template +T* Unwrap(JSValueConst val); + +template +class QJSKlass { + using ThisJSClass = JSClassImpl; + +public: + QJSKlass() = delete; + + static void Declare(const char* name); + + template + static void Method(const char* name, R (C::*func)(Args...), int id); + + template + static void Method(const char* name, R (Base::*func)(Args...), int id); + + static void CustomMethod(const char* name, FunctionCallback cb); + + template + static void CustomMethod(const char* name, MemberFunctionCallback cb, int id); + + static void ExoticGetter(ExoticGetterCallback callback); + static void ExoticSetter(ExoticSetterCallback callback); + static void ExoticHasProperty(ExoticHasPropertyCallback callback); + static void ExoticIsArray(ExoticIsArrayCallback callback); + + template + static void Bind(BindingTarget target); + + static void Bind(BindingTarget target, FunctionCallback ctor); + + template + static void Inherit(); + + static C* Unwrap(JSValueConst val); + + static JSValue NewObjectProtoClass(JSValue proto); + + static JSValue NewInstance(); + static JSValue GetProto(); + + static int NumberOfInstances(); + +private: + // TODO(cvetan) DEPRECATE + DEFINE_HAS_METHOD(QjsDestructor) + // TODO(cvetan) DEPRECATE + DEFINE_HAS_METHOD(QjsGcMark) + + static void BindInternal(BindingTarget target, FunctionCallback ctor, size_t length); + + template + static JSValue InternalMemberFunctionCallback( + JSContext* ctx, JSValueConst thisObj, int argc, JSValueConst* argv, int magic); + + template + static JSValue MethodCallback(JSContext* ctx, JSValueConst thisObj, int argc, JSValueConst* argv, int magic); + + template + static JSValue InternalConstructor(JSContext* ctx, JSValueConst thisObj, int argc, JSValueConst* argv); + + static JSValue ConstructorInterceptor(JSContext* ctx, JSValueConst thisObj, int argc, JSValueConst* argv); + + static void Finalizer(JSRuntime* rt, JSValue val); + static void GcMark(JSRuntime* rt, JSValueConst val, JS_MarkFunc* markFunc); + + static JSValue proto_; + static std::unordered_map functions_; + static JSClassID classId_; + static JSClassExoticMethods exoticMethods_; + static JSClassDef classDefinitions_; + static FunctionCallback constructor_; + + template + friend class QJSKlass; +}; // namespace OHOS::Ace::Framework + +template +using JSClass = JSClassImpl; + +} // namespace OHOS::Ace::Framework + +#include "qjs_bindings.inl" + +#endif // FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_ENGINE_QUICKJS_BINDINGS diff --git a/frameworks/bridge/declarative_frontend/engine/quickjs/qjs_bindings.inl b/frameworks/bridge/declarative_frontend/engine/quickjs/qjs_bindings.inl new file mode 100644 index 00000000..4b4caedc --- /dev/null +++ b/frameworks/bridge/declarative_frontend/engine/quickjs/qjs_bindings.inl @@ -0,0 +1,322 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "qjs_bindings.h" + +#include "frameworks/bridge/declarative_frontend/engine/quickjs/qjs_function_list_entries_container.h" + +namespace OHOS::Ace::Framework { + +template +JSValue QJSKlass::proto_ = JS_UNDEFINED; +template +std::unordered_map QJSKlass::functions_; +template +JSClassDef QJSKlass::classDefinitions_ = { nullptr, .finalizer = QJSKlass::Finalizer, + .gc_mark = QJSKlass::GcMark, .exotic = nullptr, .call = nullptr }; +template +JSClassExoticMethods QJSKlass::exoticMethods_; +template +JSClassID QJSKlass::classId_; +template +FunctionCallback QJSKlass::constructor_ = nullptr; + +template +JSValue Wrap(JSValueConst newTarget, T* thisPtr) +{ + JSContext* ctx = QJSContext::current(); + JSValue proto = JS_GetPropertyStr(ctx, newTarget, "prototype"); + JSValue thisJs = QJSKlass::NewObjectProtoClass(proto); + JS_FreeValue(ctx, proto); + JS_SetOpaque(thisJs, thisPtr); + LOGD("Wrap: Wrapping a raw pointer of %s around a new JSValue...", JSClass::JSName()); + return thisJs; +} + +template +JSValue Wrap(T* thisPtr) +{ + JSValue thisJs = QJSKlass::NewInstance(); + JS_SetOpaque(thisJs, thisPtr); + LOGD("Wrap: Wrapping a raw pointer of %s around a new JSValue...", JSClass::JSName()); + return thisJs; +} + +template +T* Unwrap(JSValueConst val) +{ + return QJSKlass::Unwrap(val); +} + +template +void QJSKlass::Declare(const char* name) +{ + classDefinitions_.class_name = name; + JS_NewClassID(&classId_); + g_classIds.push_back(classId_); + + JSContext* ctx = QJSContext::current(); + classDefinitions_.exotic = &exoticMethods_; + JS_NewClass(JS_GetRuntime(ctx), classId_, &classDefinitions_); + + proto_ = JS_NewObject(ctx); + JS_SetClassProto(ctx, classId_, proto_); +} + +template +template +void QJSKlass::Method(const char* name, R (C::*func)(Args...), int id) +{ + JSCFunctionListEntry* funcEntry = QJSFunctionListEntriesContainer::GetInstance().New( + name, JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE, JS_DEF_CFUNC, id); + funcEntry->u.func = { sizeof...(Args), JS_CFUNC_generic_magic }; + + funcEntry->u.func.cfunc.generic_magic = MethodCallback; + functions_.insert_or_assign(name, funcEntry); +} + +template +template +void QJSKlass::Method(const char* name, R (Base::*func)(Args...), int id) +{ + JSCFunctionListEntry* funcEntry = QJSFunctionListEntriesContainer::GetInstance().New( + name, JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE, JS_DEF_CFUNC, id); + funcEntry->u.func = { sizeof...(Args), JS_CFUNC_generic_magic }; + + funcEntry->u.func.cfunc.generic_magic = MethodCallback; + functions_.insert_or_assign(name, funcEntry); +} + +template +void QJSKlass::CustomMethod(const char* name, FunctionCallback cb) +{ + JSCFunctionListEntry* funcEntry = QJSFunctionListEntriesContainer::GetInstance().New( + name, JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE, JS_DEF_CFUNC, 0); + funcEntry->u.func = { 1, JS_CFUNC_generic }; + + funcEntry->u.func.cfunc.generic = cb; + functions_.insert_or_assign(name, funcEntry); +} + +template +template +void QJSKlass::CustomMethod(const char* name, MemberFunctionCallback cb, int id) +{ + JSCFunctionListEntry* funcEntry = QJSFunctionListEntriesContainer::GetInstance().New( + name, JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE, JS_DEF_CFUNC, id); + funcEntry->u.func = { 0, JS_CFUNC_generic_magic }; + + funcEntry->u.func.cfunc.generic_magic = InternalMemberFunctionCallback; + functions_.insert_or_assign(name, funcEntry); +} + +template +void QJSKlass::ExoticGetter(ExoticGetterCallback callback) +{ + exoticMethods_.get_property = callback; +} +template +void QJSKlass::ExoticSetter(ExoticSetterCallback callback) +{ + exoticMethods_.set_property = callback; +} +template +void QJSKlass::ExoticHasProperty(ExoticHasPropertyCallback callback) +{ + exoticMethods_.has_property = callback; +} +template +void QJSKlass::ExoticIsArray(ExoticIsArrayCallback callback) +{ + exoticMethods_.is_array = callback; +} + +template +template +void QJSKlass::Bind(BindingTarget target) +{ + BindInternal(target, QJSKlass::InternalConstructor, sizeof...(Args)); +} + +template +void QJSKlass::Bind(BindingTarget target, FunctionCallback ctor) +{ + constructor_ = ctor; + BindInternal(target, ConstructorInterceptor, 0); +} + +template +template +void QJSKlass::Inherit() +{ + static_assert(std::is_base_of_v && "Trying to inherit from unrelated class!"); + functions_.insert(QJSKlass::functions_.begin(), QJSKlass::functions_.end()); +} + +template +C* QJSKlass::Unwrap(JSValueConst val) +{ + return static_cast(JS_GetOpaque(val, classId_)); +} + +template +JSValue QJSKlass::NewObjectProtoClass(JSValue proto) +{ + return JS_NewObjectProtoClass(QJSContext::current(), proto, classId_); +} + +template +JSValue QJSKlass::NewInstance() +{ + return JS_NewObjectClass(QJSContext::current(), classId_); +} + +template +JSValue QJSKlass::GetProto() +{ + return proto_; +} + +template +int QJSKlass::NumberOfInstances() +{ + return JS_CountClassInstances(JS_GetRuntime(QJSContext::current()), classId_); +} + +template +void QJSKlass::BindInternal(BindingTarget target, FunctionCallback ctor, size_t length) +{ + JSContext* ctx = QJSContext::current(); + if (!ctx || !JS_GetRuntime(ctx)) + return; + + JSValue funcObj = JS_NewCFunction2(ctx, ctor, ThisJSClass::JSName(), length, JS_CFUNC_constructor_or_func, 0); + + if (!JS_IsUndefined(target)) { + JS_DefinePropertyValueStr(ctx, target, ThisJSClass::JSName(), funcObj, JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE); + } + + JSValue proto = JS_GetClassProto(ctx, classId_); + for (const auto& [k, val] : functions_) { + JS_SetPropertyFunctionList(ctx, proto, val, 1); + } + + JS_AceSetConstructor(ctx, funcObj, proto); +} + +template +template +JSValue QJSKlass::InternalMemberFunctionCallback( + JSContext* ctx, JSValueConst thisObj, int argc, JSValueConst* argv, int magic) +{ + C* ptr = static_cast(Unwrap(thisObj)); + T* instance = static_cast(ptr); + auto binding = ThisJSClass::GetFunctionBinding(magic); + LOGD("InternalmemberFunctionCallback: Calling %s::%s", ThisJSClass::JSName(), binding->Name()); + auto fnPtr = + static_cast*>(binding)->Get(); + return (instance->*fnPtr)(ctx, thisObj, argc, argv); +} + +template +template +JSValue QJSKlass::MethodCallback(JSContext* ctx, JSValueConst thisObj, int argc, JSValueConst* argv, int magic) +{ + QJSContext::Scope scp(ctx); + C* ptr = static_cast(UnwrapAny(thisObj)); + Class* instance = static_cast(ptr); + auto iBind = ThisJSClass::GetFunctionBinding(magic); + FunctionBinding* binding = static_cast*>(iBind); + + LOGD("Calling method %s with %lu arguments", iBind->Name(), sizeof...(Args)); + auto fnPtr = binding->Get(); + auto tuple = __detail__::TupleConverter...>()(argv); + + constexpr bool isVoid = std::is_void_v; + constexpr bool hasArguments = sizeof...(Args) != 0; + bool returnSelf = binding->Options() & MethodOptions::RETURN_SELF; + + if constexpr (isVoid && hasArguments) { + // void(Args...) + FunctionUtils::CallMemberFunction(instance, fnPtr, tuple); + return returnSelf ? JS_DupValue(ctx, thisObj) : JS_UNDEFINED; + } else if constexpr (isVoid && !hasArguments) { + // void() + (instance->*fnPtr)(); + return returnSelf ? JS_DupValue(ctx, thisObj) : JS_UNDEFINED; + } else if constexpr (!isVoid && hasArguments) { + // T(Args...) + auto result = FunctionUtils::CallMemberFunction(instance, fnPtr, tuple); + return __detail__::ToJSValue(result); + } else if constexpr (!isVoid && !hasArguments) { + // T() + auto result = (instance->*fnPtr)(); + return __detail__::ToJSValue(result); + } +} + +template +template +JSValue QJSKlass::InternalConstructor(JSContext* ctx, JSValueConst thisObj, int argc, JSValueConst* argv) +{ + QJSContext::Scope scp(ctx); + if (JS_IsUndefined(thisObj)) { + return JS_ThrowSyntaxError(ctx, "Constructor of %s called without 'new'!", ThisJSClass::JSName()); + } + + if (argc != sizeof...(Args)) { + return JS_ThrowSyntaxError(ctx, "Constructing %s requires %lu arguments, %d were provided", + ThisJSClass::JSName(), static_cast(sizeof...(Args)), argc); + } + + JSValue newTargetProto = JS_GetPropertyStr(ctx, thisObj, "prototype"); + JSValue val = JS_NewObjectProtoClass(ctx, newTargetProto, classId_); + auto tuple = __detail__::TupleConverter...>()(argv); + JS_SetOpaque(val, FunctionUtils::ConstructFromTuple(tuple)); + return val; +} + +template +JSValue QJSKlass::ConstructorInterceptor(JSContext* ctx, JSValueConst newTarget, int argc, JSValueConst* argv) +{ + if (JS_IsUndefined(newTarget)) { + return JS_ThrowSyntaxError(ctx, "Constructor of %s called without 'new'!", ThisJSClass::JSName()); + } + + return constructor_(ctx, newTarget, argc, argv); +} + +template +void QJSKlass::Finalizer(JSRuntime* rt, JSValue val) +{ + if constexpr (has_QjsDestructor) { + LOGD("Finalizer for %s", ThisJSClass::JSName()); + C* instance = Unwrap(val); + C::QjsDestructor(rt, instance); + } else { + LOGD("No finalizer installed for %s", ThisJSClass::JSName()); + } +} + +template +void QJSKlass::GcMark(JSRuntime* rt, JSValueConst val, JS_MarkFunc* markFunc) +{ + LOGD("GC mark for %s", ThisJSClass::JSName()); + if constexpr (has_QjsGcMark) { + C::QjsGcMark(rt, val, markFunc); + } +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/engine/quickjs/qjs_declarative_engine.cpp b/frameworks/bridge/declarative_frontend/engine/quickjs/qjs_declarative_engine.cpp new file mode 100644 index 00000000..58340a51 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/engine/quickjs/qjs_declarative_engine.cpp @@ -0,0 +1,165 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/declarative_frontend/engine/quickjs/qjs_declarative_engine.h" + +#include + +#include "base/log/ace_trace.h" +#include "base/log/event_report.h" +#include "base/log/log.h" +#include "frameworks/bridge/js_frontend/engine/common/js_constants.h" + +namespace OHOS::Ace::Framework { + +QJSDeclarativeEngine::~QJSDeclarativeEngine() +{ + JS_RunGC(engineInstance_->GetQJSRuntime()); +} + +bool QJSDeclarativeEngine::Initialize(const RefPtr& delegate) +{ + LOGD("QJSDeclarativeEngine initialize"); + engineInstance_ = AceType::MakeRefPtr(delegate); + bool res = engineInstance_->InitJSEnv(); + if (!res) { + LOGE("QJSDeclarativeEngine initialize failed: %{public}d", instanceId_); + return false; + } + + return true; +} + +void QJSDeclarativeEngine::LoadJs(const std::string& url, const RefPtr& page, bool isMainPage) +{ + LOGD("QJSDeclarativeEngine LoadJs"); + ACE_SCOPED_TRACE("QJSDeclarativeEngine::LoadJS"); + ACE_DCHECK(engineInstance_); + + engineInstance_->SetRunningPage(page); + JSContext* ctx = engineInstance_->GetQJSContext(); + JS_SetContextOpaque(ctx, reinterpret_cast(AceType::RawPtr(engineInstance_))); + + std::string jsContent; + if (!engineInstance_->GetDelegate()->GetAssetContent(url, jsContent)) { + LOGE("js file load failed!"); + return; + } + + if (jsContent.empty()) { + LOGE("js file load failed! url=[%{public}s]", url.c_str()); + return; + } + + JSValue compiled = engineInstance_->CompileSource(url, jsContent.c_str(), jsContent.size()); + if (JS_IsException(compiled)) { + LOGE("js compilation failed url=[%{public}s]", url.c_str()); + return; + } + + // Todo: check the fail. + engineInstance_->ExecuteDocumentJS(compiled); + + js_std_loop(engineInstance_->GetQJSContext()); +} + +void QJSDeclarativeEngine::UpdateRunningPage(const RefPtr& page) +{ + ACE_DCHECK(engineInstance_); + engineInstance_->SetRunningPage(page); +} + +void QJSDeclarativeEngine::UpdateStagingPage(const RefPtr& page) +{ + ACE_DCHECK(engineInstance_); + engineInstance_->SetStagingPage(page); +} + +void QJSDeclarativeEngine::ResetStagingPage() +{ + ACE_DCHECK(engineInstance_); + auto runningPage = engineInstance_->GetRunningPage(); + engineInstance_->ResetStagingPage(runningPage); +} + +void QJSDeclarativeEngine::DestroyPageInstance(int32_t pageId) +{ + LOGE("Not implemented!"); +} + +void QJSDeclarativeEngine::DestroyApplication(const std::string& packageName) +{ + LOGE("Not implemented!"); +} + +void QJSDeclarativeEngine::TimerCallback(const std::string& callbackId, const std::string& delay, bool isInterval) +{ + // string with function source + LOGD("CallbackId %s", callbackId.c_str()); + JSContext* ctx = engineInstance_->GetQJSContext(); + if (!ctx) { + LOGE("TimerCallback no context"); + return; + } +} + +void QJSDeclarativeEngine::MediaQueryCallback(const std::string& callbackId, const std::string& args) +{ + LOGE("Not implemented!"); +} + +void QJSDeclarativeEngine::RequestAnimationCallback(const std::string& callbackId, uint64_t timeStamp) +{ + LOGD("Enter RequestAnimationCallback"); +} + +void QJSDeclarativeEngine::JsCallback(const std::string& callbackId, const std::string& args) +{ + LOGD("Enter JsCallback"); +} + +void QJSDeclarativeEngine::FireAsyncEvent(const std::string& eventId, const std::string& param) +{ + LOGD("FireAsyncEvent params: %{private}s", param.c_str()); + + if (engineInstance_) { + LOGD("FireAsyncEvent engineInstance_ OK"); + engineInstance_->FireAsyncEvent(eventId, param); + } +} + +void QJSDeclarativeEngine::FireSyncEvent(const std::string& eventId, const std::string& param) +{ + LOGE("Not implemented! eventId: %s param: %s ", eventId.c_str(), param.c_str()); +} + +void QJSDeclarativeEngine::SetJsMessageDispatcher(const RefPtr& dispatcher) +{ + ACE_DCHECK(engineInstance_); + engineInstance_->SetJsMessageDispatcher(dispatcher); +} + +void QJSDeclarativeEngine::RunGarbageCollection() +{ + ACE_DCHECK(engineInstance_); + engineInstance_->RunGarbageCollection(); +} + +RefPtr QJSDeclarativeEngine::GetGroupJsBridge() +{ + return nullptr; +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/engine/quickjs/qjs_declarative_engine.h b/frameworks/bridge/declarative_frontend/engine/quickjs/qjs_declarative_engine.h new file mode 100644 index 00000000..37098ab7 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/engine/quickjs/qjs_declarative_engine.h @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORK_JAVASCRIPT_ENGINE_ACE_DIFF_ENGINE_H +#define FOUNDATION_ACE_FRAMEWORK_JAVASCRIPT_ENGINE_ACE_DIFF_ENGINE_H + +#include + +#include "frameworks/bridge/declarative_frontend/engine/quickjs/qjs_declarative_engine_instance.h" +#include "frameworks/bridge/js_frontend/engine/common/js_engine.h" +#include "frameworks/bridge/js_frontend/engine/quickjs/qjs_group_js_bridge.h" +#include "frameworks/bridge/js_frontend/js_ace_page.h" + +namespace OHOS::Ace::Framework { + +class QJSDeclarativeEngine : public JsEngine { +public: + explicit QJSDeclarativeEngine(int32_t instanceId) : instanceId_(instanceId) {} + ~QJSDeclarativeEngine() override; + + bool Initialize(const RefPtr& delegate) override; + + void LoadJs(const std::string& url, const RefPtr& page, bool isMainPage) override; + + // Update running page + void UpdateRunningPage(const RefPtr& page) override; + + // Update staging page + void UpdateStagingPage(const RefPtr& page) override; + + // Reset staging page + void ResetStagingPage() override; + + void SetJsMessageDispatcher(const RefPtr& dispatcher) override; + + // Fire AsyncEvent on JS + void FireAsyncEvent(const std::string& eventId, const std::string& param) override; + + // Fire SyncEvent on JS + void FireSyncEvent(const std::string& eventId, const std::string& param) override; + + // Timer callback + virtual void TimerCallback(const std::string& callbackId, const std::string& delay, bool isInterval) override; + + // destroy page instance + void DestroyPageInstance(int32_t pageId) override; + + void MediaQueryCallback(const std::string& callbackId, const std::string& args) override; + + void RequestAnimationCallback(const std::string& callbackId, uint64_t timeStamp) override; + + void JsCallback(const std::string& callbackId, const std::string& args) override; + + // destroy application instance according packageName + void DestroyApplication(const std::string& packageName) override; + + void RunGarbageCollection() override; + + RefPtr GetGroupJsBridge() override; + +private: + RefPtr engineInstance_; + int32_t instanceId_ = 0; + + ACE_DISALLOW_COPY_AND_MOVE(QJSDeclarativeEngine); +}; +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORK_JAVASCRIPT_ENGINE_ACE_DIFF_ENGINE_H diff --git a/frameworks/bridge/declarative_frontend/engine/quickjs/qjs_declarative_engine_instance.cpp b/frameworks/bridge/declarative_frontend/engine/quickjs/qjs_declarative_engine_instance.cpp new file mode 100644 index 00000000..da9a0374 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/engine/quickjs/qjs_declarative_engine_instance.cpp @@ -0,0 +1,405 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/declarative_frontend/engine/quickjs/qjs_declarative_engine_instance.h" + +#include +#include +#include +#include +#include +#include + +#include "base/log/ace_trace.h" +#include "base/log/event_report.h" +#include "base/log/log.h" +#include "frameworks/bridge/declarative_frontend/engine/bindings_implementation.h" +#include "frameworks/bridge/declarative_frontend/engine/quickjs/qjs_helpers.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_view_register.h" +#include "frameworks/bridge/js_frontend/engine/common/js_constants.h" +#include "frameworks/bridge/js_frontend/engine/common/runtime_constants.h" +#include "frameworks/bridge/js_frontend/engine/quickjs/qjs_group_js_bridge.h" +#include "frameworks/core/common/ace_application_info.h" +#include "frameworks/core/image/image_cache.h" + +extern const char _binary_jsproxyClass_js_start[]; +extern const char _binary_jsproxyClass_js_end[]; +namespace OHOS::Ace::Framework { + +QJSDeclarativeEngineInstance* QJSDeclarativeEngineInstance::UnWrapEngineInstance(JSContext* ctx) +{ + auto* instance = static_cast(JS_GetContextOpaque(ctx)); + if (instance == nullptr) { + LOGE("Can not unwrap ctx and obtain QJSDeclarativeEngineInstance object."); + } + return instance; +} + +void QJSDeclarativeEngineInstance::SetRunningPage(const RefPtr& page) +{ + std::lock_guard lock(mutex_); + LOGD("new running page is %d.", (int)page->GetPageId()); + runningPage_ = page; +} + +void QJSDeclarativeEngineInstance::SetStagingPage(const RefPtr& page) +{ + std::lock_guard lock(mutex_); + LOGD("new staging page is %d.", (int)page->GetPageId()); + stagingPage_ = page; +} + +void QJSDeclarativeEngineInstance::ResetStagingPage(const RefPtr& page) +{ + std::lock_guard lock(mutex_); + LOGD("new staging page is %d.", (int)page->GetPageId()); + stagingPage_ = page; +} + +RefPtr QJSDeclarativeEngineInstance::GetRunningPage(JSContext* ctx) +{ + auto* instance = QJSDeclarativeEngineInstance::UnWrapEngineInstance(ctx); + if (instance != nullptr) { + return instance->GetRunningPage(); + } else { + LOGE("QJS context has no ref to engine instance. Failed!"); + return nullptr; + } +} + +void QJSDeclarativeEngineInstance::PushJSCommand(const RefPtr& jsCommand, bool forcePush) const +{ + auto page = GetRunningPage(); + if (page == nullptr) { + LOGE("Internal error: running page is null."); + return; + } + + ACE_SCOPED_TRACE("PushJSCommand"); + page->PushCommand(jsCommand); + + if (!page->CheckPageCreated() && (forcePush || (page->GetCommandSize() > (FRAGMENT_SIZE + 4)))) { + page->FlushCommands(); + } +} + +void QJSDeclarativeEngineInstance::PushJSCommand(JSContext* ctx, const RefPtr& jsCommand, bool forceFlush) +{ + auto* instance = QJSDeclarativeEngineInstance::UnWrapEngineInstance(ctx); + if (instance != nullptr) { + instance->PushJSCommand(jsCommand, forceFlush); + } else { + LOGE("QJS context has no ref to engine instance. Failed!"); + return; + } +} + +void QJSDeclarativeEngineInstance::PostJsTask(JSContext* ctx, std::function&& task) +{ + auto* instance = QJSDeclarativeEngineInstance::UnWrapEngineInstance(ctx); + if (instance != nullptr) { + instance->GetDelegate()->PostJsTask(std::move(task)); + } +} + +void QJSDeclarativeEngineInstance::TriggerPageUpdate(JSContext* ctx) +{ + auto* instance = QJSDeclarativeEngineInstance::UnWrapEngineInstance(ctx); + if (instance != nullptr) { + instance->GetDelegate()->TriggerPageUpdate(instance->GetRunningPage()->GetPageId()); + return; + } + LOGE("QJS context has no ref to instance. Failed!"); +} + +static int EvalBuf(JSContext* ctx, const char* buf, size_t bufLen, const char* filename, int evalFlags) +{ + JSValue val; + int ret; + + val = JS_Eval(ctx, buf, bufLen, filename, evalFlags); + if (JS_IsException(val)) { + LOGE("[QJS Native EvalBuf() FAILED FAILED FAILED!!!!\n\n"); + QjsUtils::JsStdDumpErrorAce(ctx); + ret = -1; + } else { + ret = 0; + } + JS_FreeValue(ctx, val); + return ret; +} + +void QJSDeclarativeEngineInstance::output_object_code(JSContext* ctx, int fho, JSValueConst obj) +{ + uint8_t* out_buf; + size_t out_buf_len; + out_buf = JS_WriteObject(ctx, &out_buf_len, obj, JS_WRITE_OBJ_BYTECODE); + if (!out_buf) { + js_std_dump_error(ctx); + return; + } + + int count __attribute__((unused)); + count = write(fho, out_buf, out_buf_len); + LOGD("Bytes written to file: %d vs. %zu", count, out_buf_len); + + js_free(ctx, out_buf); +} + +JSValue QJSDeclarativeEngineInstance::eval_binary_buf(JSContext* ctx, const uint8_t* buf, size_t buf_len) +{ + JSValue obj; + obj = JS_ReadObject(ctx, buf, buf_len, JS_READ_OBJ_BYTECODE); + if (JS_IsException(obj)) { + LOGE("eval_binary_buf (ReadObj) failed"); + js_std_dump_error(ctx); + return obj; + } + return JS_EvalFunction(ctx, obj); +} + +JSValue QJSDeclarativeEngineInstance::CompileSource(std::string url, const char* buf, size_t bufSize) +{ + LOGD("Compiling file url %s", url.c_str()); + + ACE_SCOPED_TRACE("Compile JS"); + JSContext* ctx = GetQJSContext(); + + std::size_t h1 = std::hash {}(url); + + // temporary use image cache path to store the snapshot + std::string separator = "/"; +#if defined(WINDOWS_PLATFORM) + separator = "\\"; +#endif + std::string filename = ImageCache::GetImageCacheFilePath() + separator; + filename.append(std::to_string(h1)); + + struct stat statbuf; + int statres = stat(filename.c_str(), &statbuf); + LOGD("Cache file stat result for %s, %d, errno %d, size %ld", filename.c_str(), statres, errno, statbuf.st_size); + + JSValue retVal = JS_NULL; + int fhi; + if (statres == 0 && (fhi = open(filename.c_str(), O_RDONLY)) != -1) { + LOGD("Cache file open result for %s, fhi: %d, errno %d, reading", filename.c_str(), fhi, errno); + uint8_t* in_buf = (uint8_t*)malloc(statbuf.st_size + 5); + if (!in_buf) { + close(fhi); + return JS_NULL; + } + read(fhi, in_buf, statbuf.st_size); + close(fhi); + retVal = eval_binary_buf(GetQJSContext(), in_buf, statbuf.st_size); + free(in_buf); + } else { + // Evaluate and write to the file + LOGD("cache file does not exist, compiling source file"); + retVal = JS_Eval(GetQJSContext(), buf, bufSize, url.c_str(), JS_EVAL_TYPE_GLOBAL | JS_EVAL_FLAG_COMPILE_ONLY); + if (JS_IsException(retVal)) { + LOGE("Failed reading (source) JS file %s into QuickJS!", url.c_str()); + QjsUtils::JsStdDumpErrorAce(ctx); + return JS_UNDEFINED; + } + + int fho = creat(filename.c_str(), S_IRWXU | S_IRWXG | S_IRWXO); + if (fho != -1) { + LOGD("Compiled cache file opend for writing %s", filename.c_str()); + output_object_code(GetQJSContext(), fho, retVal); + close(fho); + } else { + LOGE("Compiled cache file writing failed to %s", filename.c_str()); + } + } + return retVal; +} + +void QJSDeclarativeEngineInstance::CallAnimationFinishJs(JSValue animationContext) +{ + JSContext* ctx = GetQJSContext(); + QjsHandleScope handleScope(ctx); + auto proto = QjsUtils::GetPropertyStr(ctx, animationContext, "onfinish"); + if (!JS_IsFunction(ctx, proto)) { + LOGE("cannot find 'CallAnimationFinishJs' function from global object, this should not happen!"); + return; + } + LOGD("animation onfinish event call"); + JSValue retVal = JS_Call(ctx, proto, animationContext, 0, {}); + JS_FreeValue(ctx, retVal); + js_std_loop(ctx); +} + +void QJSDeclarativeEngineInstance::CallAnimationCancelJs(JSValue animationContext) +{ + JSContext* ctx = GetQJSContext(); + QjsHandleScope handleScope(ctx); + auto proto = QjsUtils::GetPropertyStr(ctx, animationContext, "oncancel"); + if (!JS_IsFunction(ctx, proto)) { + return; + } + + LOGD("animation oncancel event call"); + JSValue retVal = JS_Call(ctx, proto, animationContext, 0, {}); + JS_FreeValue(ctx, retVal); + js_std_loop(ctx); +} + +bool QJSDeclarativeEngineInstance::ExecuteDocumentJS(JSValue jsCode) +{ + LOGD("Executing JS ...."); + ACE_SCOPED_TRACE("Execute JS"); + + JSContext* ctx = GetQJSContext(); + + JSValue result = JS_EvalFunction(ctx, jsCode); + if (JS_IsException(result)) { + LOGD("Failed executing JS!"); + QjsUtils::JsStdDumpErrorAce(ctx); + return false; + } + js_std_loop(ctx); + LOGD("Executing JS -- DONE OK!"); + return true; +} + +const JSCFunctionListEntry moduleFunctions[] = {}; + +int InitializeModules(JSContext* ctx, JSModuleDef* m) +{ + QJSContext::Scope scope(ctx); + return JS_SetModuleExportList(ctx, m, moduleFunctions, countof(moduleFunctions)); +} + +JSModuleDef* JsInitModule(JSContext* ctx) +{ + LOGD("registering ace module methods\n"); + + JSModuleDef* m = JS_NewCModule(ctx, "ace", InitializeModules); + if (!m) + return nullptr; + + JS_AddModuleExportList(ctx, m, moduleFunctions, countof(moduleFunctions)); + return m; +} + +JSContext* InitJSContext(JSRuntime* rt, size_t maxStackSize, const RefPtr& delegate) +{ + LOGD("QJS Creating new JS context and loading HBS module"); + + ACE_SCOPED_TRACE("Init JS Context"); + + JSContext* ctx1 = JS_NewContext(rt); + if (!ctx1) { + LOGD("QJS cannot allocate JS context"); + return nullptr; + } + + /* + * Note: default 260k stack is not enough, lets use a value that should be enough + * for five cards 512k is too small, use 1MB + */ + JS_SetMaxStackSize(ctx1, maxStackSize); + + js_std_add_helpers(ctx1, 0, NULL); + + InitConsole(ctx1); + + /* inject hbs native functions module */ + QJSContext::Scope scope(ctx1); + JSValue globalObj = JS_GetGlobalObject(ctx1); + JsRegisterViews(globalObj); + + /* make 'std' and 'os' visible to non module code */ + /* dito for hbs */ + const char* str = "// import ACE own functions in sce module \n" + "// QJS rel 1 Sept no longer defines global but globalThis object, fix it \n" + "var global = globalThis;\n"; + + if (-1 == EvalBuf(ctx1, str, strlen(str), "JS Context initialize", JS_EVAL_TYPE_MODULE)) { + LOGE("QJS created JS context but failed to init hbs, os, or std module.!"); + } + NativeObjectInfo* nativeObjectInfo = new NativeObjectInfo(); + nativeObjectInfo->nativeObject = delegate->GetAbility(); + JSValue abilityValue = JS_NewExternal(ctx1, nativeObjectInfo, [](JSContext* ctx, void *data, void *hint) { + NativeObjectInfo *info = (NativeObjectInfo *)data; + if (info) { + delete info; + } + }, nullptr); + JS_SetPropertyStr(ctx1, globalObj, "ability", abilityValue); + return ctx1; +} + +bool QJSDeclarativeEngineInstance::InitJSEnv() +{ + ACE_SCOPED_TRACE("Init JS Env"); + runtime_ = JS_NewRuntime(); + if (!runtime_) { + LOGE("QJS cannot allocate JS runtime"); + return false; + } + ACE_DCHECK(frontendDelegate_); + context_ = InitJSContext(runtime_, MAX_STACK_SIZE, frontendDelegate_); + if (!context_) { + LOGE("QJS cannot allocate JS context"); + JS_FreeRuntime(runtime_); + return false; + } + auto result = EvalBuf(context_, _binary_jsproxyClass_js_start, + _binary_jsproxyClass_js_end - _binary_jsproxyClass_js_start, "jsproxyClass.js", JS_EVAL_TYPE_GLOBAL); + if (result == -1) { + EventInfo eventInfo; + eventInfo.eventType = EXCEPTION_JS; + eventInfo.errorType = static_cast(JsExcepType::JS_CONTEXT_INIT_ERR); + EventReport::SendEvent(eventInfo); + LOGW("JS Engine created JS context but failed to init proxy class!"); + return false; + } + // TODO: add js group function for js interface. + + // initialize native qjs engine. + nativeEngine_ = new QuickJSNativeEngine(runtime_, context_); + frontendDelegate_->AddTaskObserver([nativeEngine = nativeEngine_](){ + nativeEngine->Loop(); + }); + return true; +} + +QJSDeclarativeEngineInstance::~QJSDeclarativeEngineInstance() +{ + if (context_) { + JS_FreeContext(context_); + } + if (runtime_) { + JS_FreeRuntime(runtime_); + } + if (nativeEngine_ != nullptr) { + delete nativeEngine_; + } +} + +void QJSDeclarativeEngineInstance::FireAsyncEvent(const std::string& eventId, const std::string& param) +{ + LOGE("Not implemented!"); +} + +void QJSDeclarativeEngineInstance::RunGarbageCollection() +{ + if (runtime_) { + JS_RunGC(runtime_); + } +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/engine/quickjs/qjs_declarative_engine_instance.h b/frameworks/bridge/declarative_frontend/engine/quickjs/qjs_declarative_engine_instance.h new file mode 100644 index 00000000..9b9cd409 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/engine/quickjs/qjs_declarative_engine_instance.h @@ -0,0 +1,156 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_ENGINE_QUICKJS_QJS_DECLARATIVE_ENGINE_H +#define FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_ENGINE_QUICKJS_QJS_DECLARATIVE_ENGINE_H + +#include + +#include "third_party/quickjs/quickjs.h" + +#include "frameworks/bridge/js_frontend/engine/common/js_engine.h" +#include "frameworks/bridge/js_frontend/js_ace_page.h" +#include "native_engine/impl/quickjs/quickjs_native_engine.h" + +namespace OHOS::Ace::Framework { + +class QJSDeclarativeEngineInstance final : public AceType { +public: + explicit QJSDeclarativeEngineInstance(const RefPtr& delegate) + : runtime_(nullptr), context_(nullptr), frontendDelegate_(delegate), dispatcher_(nullptr) + {} + + ~QJSDeclarativeEngineInstance() override; + + bool InitJSEnv(); + + void loadDocument(); + + JSRuntime* GetQJSRuntime() const + { + return runtime_; + } + + JSContext* GetQJSContext() const + { + return context_; + } + + static QJSDeclarativeEngineInstance* UnWrapEngineInstance(JSContext* ctx); + + RefPtr GetRunningPage() const + { + std::lock_guard lock(mutex_); + return runningPage_; + } + + static RefPtr GetRunningPage(JSContext* ctx); + + void SetStagingPage(const RefPtr& page); + + RefPtr GetStagingPage() const + { + std::lock_guard lock(mutex_); + return stagingPage_; + } + void ResetStagingPage(const RefPtr& page); + + void SetRunningPage(const RefPtr& page); + + static void PostJsTask(JSContext* ctx, std::function&& task); + static void TriggerPageUpdate(JSContext* ctx); + + void SetJsMessageDispatcher(const RefPtr& dispatcher) + { + dispatcher_ = dispatcher; + } + + RefPtr GetDelegate() const + { + return frontendDelegate_; + } + + JSValue CompileSource(std::string url, const char* buf, size_t bufSize); + + void CallPlatformFunction(const std::string& channel, std::vector&& data, int32_t id, int32_t groupType) + { + auto dispatcher = dispatcher_.Upgrade(); + if (dispatcher) { + dispatcher->Dispatch(channel, std::move(data), id, groupType); + } + } + + void CallAnimationFinishJs(JSValue animationContext); + void CallAnimationCancelJs(JSValue animationContext); + + bool ExecuteDocumentJS(JSValue jsCode); + + void FireAsyncEvent(const std::string& eventId, const std::string& param); + + /** Pushes the given command on the currently loading page + * if conditions apply also flushesd the command queue + * if forceFlush=true is specificied the command buffer will be flushed. + * even if conditions are not met. + */ + void PushJSCommand(const RefPtr& jsCommand, bool forceFlush = false) const; + static void PushJSCommand(JSContext* ctx, const RefPtr& jsCommand, bool forceFlush = false); + + void PluginErrorCallback(int32_t callbackId, int32_t errorCode, std::string&& errorMessage) + { + auto dispatcher = dispatcher_.Upgrade(); + if (dispatcher) { + dispatcher->DispatchPluginError(callbackId, errorCode, std::move(errorMessage)); + } + } + + void ChangeLocale(const std::string& language, const std::string& countryOrRegion) + { + if (frontendDelegate_) { + frontendDelegate_->ChangeLocale(language, countryOrRegion); + } + } + + void RunGarbageCollection(); + +private: + void output_object_code(JSContext* ctx, int fho, JSValueConst obj); + JSValue eval_binary_buf(JSContext* ctx, const uint8_t* buf, size_t buf_len); + + JSRuntime* runtime_ = nullptr; + JSContext* context_ = nullptr; + RefPtr frontendDelegate_; + + // runningPage_ is the page that is loaded and rendered successfully, while stagingPage_ is to + // handle all page routing situation, which include two stages: + // - Loading stage: when a new page is loaded by qjs engine but not rendered, stagingPage_ point to + // a new created page, which is different with runningPage_, the DOM build operations should call + // this one, such as domCreateBody, domAddElement. + // - Running stage: If the stagingPage_ rendered successfully, the runningPage_ will update to stagingPage_. + // If the stagingPage_ render failed, it will reset to runningPage_. So in running stage, runningPage_ + // and stagingPage_ point to the same page. But it's better to use runningPage_ in dom update tasks, + // such as removeElement, updateElementAttrs and updateElementStyles. + RefPtr runningPage_; + RefPtr stagingPage_; + + WeakPtr dispatcher_; + mutable std::mutex mutex_; + QuickJSNativeEngine* nativeEngine_ = nullptr; + + ACE_DISALLOW_COPY_AND_MOVE(QJSDeclarativeEngineInstance); +}; + +} // namespace OHOS::Ace::Framework + +#endif // FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_ENGINE_QUICKJS_QJS_DECLARATIVE_ENGINE_H diff --git a/frameworks/bridge/declarative_frontend/engine/quickjs/qjs_function_list_entries_container.cpp b/frameworks/bridge/declarative_frontend/engine/quickjs/qjs_function_list_entries_container.cpp new file mode 100644 index 00000000..db9b0af2 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/engine/quickjs/qjs_function_list_entries_container.cpp @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/declarative_frontend/engine/quickjs/qjs_function_list_entries_container.h" + +namespace OHOS::Ace::Framework { + +QJSFunctionListEntriesContainer::QJSFunctionListEntriesContainer() {} +QJSFunctionListEntriesContainer::~QJSFunctionListEntriesContainer() +{ + for (auto entry : entries_) { + delete entry; + } +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/engine/quickjs/qjs_function_list_entries_container.h b/frameworks/bridge/declarative_frontend/engine/quickjs/qjs_function_list_entries_container.h new file mode 100644 index 00000000..3d0338c8 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/engine/quickjs/qjs_function_list_entries_container.h @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_ENGINE_QUICKJS_QJS_FUNCTION_LIST_ENTRIES_CONTAINER_H +#define FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_ENGINE_QUICKJS_QJS_FUNCTION_LIST_ENTRIES_CONTAINER_H + +#include + +#include "base/utils/singleton.h" +#ifdef __cplusplus +extern "C" { +#endif +#include "third_party/quickjs/cutils.h" +#include "third_party/quickjs/quickjs-libc.h" +#ifdef __cplusplus +} +#endif + +namespace OHOS::Ace::Framework { + +class QJSFunctionListEntriesContainer : public Singleton { + DECLARE_SINGLETON(QJSFunctionListEntriesContainer) +public: + template + JSCFunctionListEntry* New(Args&&... args) + { + JSCFunctionListEntry* entry = new JSCFunctionListEntry { std::forward(args)... }; + entries_.push_back(entry); + return entry; + } + +private: + std::vector entries_; +}; +} // namespace OHOS::Ace::Framework + +#endif diff --git a/frameworks/bridge/declarative_frontend/engine/quickjs/qjs_helpers.cpp b/frameworks/bridge/declarative_frontend/engine/quickjs/qjs_helpers.cpp new file mode 100644 index 00000000..7011f9bf --- /dev/null +++ b/frameworks/bridge/declarative_frontend/engine/quickjs/qjs_helpers.cpp @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/declarative_frontend/engine/quickjs/qjs_helpers.h" + +#include "base/log/log.h" +#include "frameworks/bridge/js_frontend/engine/quickjs/qjs_utils.h" + +namespace OHOS::Ace::Framework { + +JSValue JsLogPrint(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + ScopedString printLog(ctx, argv[0]); + LOGD("ace Log: %s", printLog.get()); + + return JS_NULL; +} + +JSValue JsDebugLogPrint(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + ScopedString printLog(ctx, argv[0]); + LOGD("ace Log: %s", printLog.get()); + + return JS_NULL; +} + +JSValue JsInfoLogPrint(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + ScopedString printLog(ctx, argv[0]); + LOGI("ace Log: %s", printLog.get()); + + return JS_NULL; +} + +JSValue JsWarnLogPrint(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + ScopedString printLog(ctx, argv[0]); + LOGW("ace Log: %s", printLog.get()); + + return JS_NULL; +} + +JSValue JsErrorLogPrint(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + ScopedString printLog(ctx, argv[0]); + LOGE("ace Log: %s", printLog.get()); + + return JS_NULL; +} + +void InitConsole(JSContext* ctx) +{ + JSValue globalObj, console; + globalObj = JS_GetGlobalObject(ctx); + console = JS_NewObject(ctx); + JS_SetPropertyStr(ctx, console, "log", JS_NewCFunction(ctx, JsLogPrint, "log", 1)); + JS_SetPropertyStr(ctx, console, "debug", JS_NewCFunction(ctx, JsDebugLogPrint, "debug", 1)); + JS_SetPropertyStr(ctx, console, "info", JS_NewCFunction(ctx, JsInfoLogPrint, "info", 1)); + JS_SetPropertyStr(ctx, console, "warn", JS_NewCFunction(ctx, JsWarnLogPrint, "warn", 1)); + JS_SetPropertyStr(ctx, console, "error", JS_NewCFunction(ctx, JsErrorLogPrint, "error", 1)); + JS_SetPropertyStr(ctx, globalObj, "console", console); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/engine/quickjs/qjs_helpers.h b/frameworks/bridge/declarative_frontend/engine/quickjs/qjs_helpers.h new file mode 100644 index 00000000..802d5aeb --- /dev/null +++ b/frameworks/bridge/declarative_frontend/engine/quickjs/qjs_helpers.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_ENGINE_QUICKJS_QJS_HELPERS_H +#define FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_ENGINE_QUICKJS_QJS_HELPERS_H + +#include "third_party/quickjs/quickjs.h" + +#include "base/log/log.h" +#include "frameworks/bridge/js_frontend/engine/common/js_engine.h" + +namespace OHOS::Ace::Framework { + +JSValue JsLogPrint(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); +JSValue JsDebugLogPrint(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); +JSValue JsInfoLogPrint(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); +JSValue JsWarnLogPrint(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); +JSValue JsErrorLogPrint(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); +void InitConsole(JSContext* ctx); + +} // namespace OHOS::Ace::Framework + +#endif // FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_ENGINE_QUICKJS_QJS_HELPERS_H diff --git a/frameworks/bridge/declarative_frontend/engine/quickjs/qjs_object_template.cpp b/frameworks/bridge/declarative_frontend/engine/quickjs/qjs_object_template.cpp new file mode 100644 index 00000000..3bab3b50 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/engine/quickjs/qjs_object_template.cpp @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/declarative_frontend/engine/quickjs/qjs_object_template.h" + +namespace OHOS::Ace::Framework { + +QJSObjectTemplate::QJSObjectTemplate() +{ + JSContext* ctx = QJSContext::current(); + proto_ = JS_NewObject(ctx); +} + +QJSObjectTemplate::~QJSObjectTemplate() {} + +JSValue QJSObjectTemplate::operator*() const +{ + return proto_; +} + +JSValue QJSObjectTemplate::NewInstance() const +{ + JSContext* ctx = QJSContext::current(); + return JS_NewObjectProto(ctx, proto_); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/engine/quickjs/qjs_object_template.h b/frameworks/bridge/declarative_frontend/engine/quickjs/qjs_object_template.h new file mode 100644 index 00000000..501c936e --- /dev/null +++ b/frameworks/bridge/declarative_frontend/engine/quickjs/qjs_object_template.h @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_ENGINE_QUICKJS_QJS_OBJECT_TEMPLATE_H +#define FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_ENGINE_QUICKJS_QJS_OBJECT_TEMPLATE_H + +#include "frameworks/bridge/js_frontend/engine/quickjs/qjs_utils.h" + +#ifdef __cplusplus +extern "C" { +#endif +#include "third_party/quickjs/cutils.h" +#include "third_party/quickjs/quickjs-libc.h" + +void* JS_GetOpaqueA(JSValueConst obj, JSClassID* classIds, size_t classIdLen); + +JSValueConst JS_NewGlobalCConstructor( + JSContext* ctx, const char* name, JSCFunction* func, int length, JSValueConst proto); + +#ifdef __cplusplus +} +#endif + +namespace OHOS::Ace::Framework { + +class QJSObjectTemplate { +public: + QJSObjectTemplate(); + ~QJSObjectTemplate(); + +protected: + template + void Constant(const char* constName, T value); + + JSValue operator*() const; + JSValue NewInstance() const; + +private: + template + void RegisterPropertyWithValue(const char* name, T value, int flags); + + JSValue proto_; +}; + +} // namespace OHOS::Ace::Framework + +#include "qjs_object_template.inl" + +#endif // FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_ENGINE_QUICKJS_QJS_OBJECT_TEMPLATE_H diff --git a/frameworks/bridge/declarative_frontend/engine/quickjs/qjs_object_template.inl b/frameworks/bridge/declarative_frontend/engine/quickjs/qjs_object_template.inl new file mode 100644 index 00000000..206e1c0a --- /dev/null +++ b/frameworks/bridge/declarative_frontend/engine/quickjs/qjs_object_template.inl @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "qjs_object_template.h" + +#include "frameworks/bridge/declarative_frontend/engine/quickjs/qjs_function_list_entries_container.h" + +namespace OHOS::Ace::Framework { + +template +void QJSObjectTemplate::Constant(const char* name, T value) +{ + RegisterPropertyWithValue(name, value, 0); +} + +template +void QJSObjectTemplate::RegisterPropertyWithValue(const char* name, T value, int flags) +{ + JSContext* ctx = QJSContext::current(); + if constexpr (std::is_same_v) { + JSCFunctionListEntry* funcEntry = + QJSFunctionListEntriesContainer::GetInstance().New(name, flags, JS_DEF_PROP_INT32, 0); + funcEntry->u.i32 = value; + JS_SetPropertyFunctionList(ctx, proto_, funcEntry, 1); + } else if constexpr (std::is_same_v) { + JSCFunctionListEntry* funcEntry = + QJSFunctionListEntriesContainer::GetInstance().New(name, flags, JS_DEF_PROP_INT64, 0); + funcEntry->u.i64 = value; + JS_SetPropertyFunctionList(ctx, proto_, funcEntry, 1); + } else if constexpr (std::is_floating_point_v) { + JSCFunctionListEntry* funcEntry = + QJSFunctionListEntriesContainer::GetInstance().New(name, flags, JS_DEF_PROP_DOUBLE, 0); + funcEntry->u.f64 = value; + JS_SetPropertyFunctionList(ctx, proto_, funcEntry, 1); + } else if constexpr (std::is_same_v) { + JSCFunctionListEntry* funcEntry = + QJSFunctionListEntriesContainer::GetInstance().New(name, flags, JS_DEF_PROP_STRING, 0); + funcEntry->u.str = value; + JS_SetPropertyFunctionList(ctx, proto_, funcEntry, 1); + } +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/engine/quickjs/qjs_value_conversions.h b/frameworks/bridge/declarative_frontend/engine/quickjs/qjs_value_conversions.h new file mode 100644 index 00000000..d0087e51 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/engine/quickjs/qjs_value_conversions.h @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_ENGINE_QUICKJS_QJS_VALUE_CONVERSIONS_H +#define FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_ENGINE_QUICKJS_QJS_VALUE_CONVERSIONS_H + +#include + +#include "frameworks/bridge/js_frontend/engine/quickjs/qjs_utils.h" + +namespace __private__ { + +template +struct is_signed_int { + static constexpr bool value = + std::is_integral::value && std::is_signed::value && !std::is_same::value; +}; + +} // namespace __private__ + +namespace __remove__ { + +template +struct QJSValueConvertor; + +template +struct QJSValueConvertor::value>::type> { + static T FromJSValue(JSValue val) + { + auto* ctx = OHOS::Ace::Framework::QJSContext::current(); + OHOS::Ace::Framework::ScopedString str(ctx, val); + return str.get(); + } + + static bool Validate(JSValue val) + { + if (JS_IsString(val)) { + return true; + } + + return false; + } +}; + +template +struct QJSValueConvertor::value>::type> { + static T FromJSValue(JSValue value) + { + auto* ctx = OHOS::Ace::Framework::QJSContext::current(); + uint32_t pres; + JS_ToUint32(ctx, &pres, value); + return pres; + } + + static bool Validate(JSValue value) + { + if (JS_IsNumber(value)) { + return true; + } + + return false; + } +}; + +template +struct QJSValueConvertor::value>::type> { + static T FromJSValue(JSValue value) + { + auto* ctx = OHOS::Ace::Framework::QJSContext::current(); + int32_t pres; + JS_ToInt32(ctx, &pres, value); + return pres; + } + + static bool Validate(JSValue value) + { + if (JS_IsInteger(value)) { + return true; + } + + return false; + } +}; + +} // namespace __remove__ + +#endif // FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_ENGINE_QUICKJS_QJS_VALUE_CONVERSIONS_H diff --git a/frameworks/bridge/declarative_frontend/engine/quickjs/qjs_view_register.cpp b/frameworks/bridge/declarative_frontend/engine/quickjs/qjs_view_register.cpp new file mode 100644 index 00000000..f91ed67d --- /dev/null +++ b/frameworks/bridge/declarative_frontend/engine/quickjs/qjs_view_register.cpp @@ -0,0 +1,253 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "base/log/log.h" +#include "core/components/common/layout/constants.h" +#include "frameworks/bridge/declarative_frontend/engine/quickjs/qjs_declarative_engine_instance.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_animation.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_button.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_column.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_divider.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_foreach.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_grid.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_grid_item.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_image.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_list.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_list_item.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_navigator.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_row.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_sliding_panel.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_stack.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_swiper.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_text.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_touch_handler.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_view.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_view_register.h" +#include "frameworks/bridge/js_frontend/engine/quickjs/qjs_utils.h" + +namespace OHOS::Ace::Framework { + +static std::unordered_map g_viewMapById = {}; + +static JSValue JsLoadDocument(JSContext* ctx, JSValueConst new_target, int argc, JSValueConst* argv) +{ + LOGD("Load Document"); + + if ((argc != 1) || (!JS_IsObject(argv[0]))) { + return JS_ThrowSyntaxError(ctx, "loadDocument expects a single object as parameter"); + } + + QjsHandleScope sc(ctx); + QJSContext::Scope scope(ctx); + + // JS_DupValue on arg[0]. And release when done. Otherwise it will get GC-d as soon as this function exits. + // Store jsView in page, so when page is unloaded a call to JS_FreeValue is made to release it + JSValue jsView = JS_DupValue(ctx, argv[0]); + + JSViewAbstract* view = static_cast(UnwrapAny(jsView)); + if (!view) { + return JS_ThrowReferenceError(ctx, "loadDocument: argument provided is not a View!"); + } + + auto page = QJSDeclarativeEngineInstance::GetRunningPage(ctx); + LOGD("Load Document setting root view"); + page->SetRootComponent(view->CreateComponent()); + + // We are done, tell to the JSAgePage + page->SetPageCreated(); + + return JS_UNDEFINED; +} + +static JSValue JsDumpMemoryStats(JSContext* ctx, JSValueConst new_target, int argc, JSValueConst* argv) +{ +#ifdef ACE_DEBUG + QJSContext::Scope scope(ctx); + + QjsUtils::JsDumpMemoryStats(ctx); + if (argc > 0) { + LOGI("ACE Declarative JS Memory dump: %s ========================", ScopedString(argv[0]).get()); + } else { + LOGI("ACE Declarative JS Memory dump: %s ========================", "unknown"); + } + LOGI("View (cust. Component): %5d ", QJSKlass>::NumberOfInstances()); + LOGI("ForEach: %5d ", QJSKlass::NumberOfInstances()); + LOGI("Row: %5d ", QJSKlass::NumberOfInstances()); + LOGI("Column: %5d ", QJSKlass::NumberOfInstances()); + LOGI("Text: %5d ", QJSKlass::NumberOfInstances()); + LOGI("Image: %5d ", QJSKlass::NumberOfInstances()); + LOGI("Button: %5d ", QJSKlass::NumberOfInstances()); + LOGI("Grid: %5d ", QJSKlass::NumberOfInstances()); + LOGI("GridItem: %5d ", QJSKlass::NumberOfInstances()); + LOGI("List: %5d ", QJSKlass::NumberOfInstances()); + LOGI("ListItem: %5d ", QJSKlass::NumberOfInstances()); +#endif + return JS_UNDEFINED; +} + +JSValue JsAddViewById(JSContext* ctx, JSValueConst new_target, int argc, JSValueConst* argv) +{ + LOGD("js_add_view_by_id"); + if (argc != 2) { + return JS_ThrowSyntaxError(ctx, "The arg is wrong, it is supposed to have 1 arguments"); + } + + QJSContext::Scope scp(ctx); + + if (JS_IsNumber(argv[0]) && JS_IsObject(argv[1])) { + ViewId viewId = __detail__::FromJSValue(argv[0]); + JSViewAbstract* view = static_cast(UnwrapAny(argv[1])); + g_viewMapById.emplace(viewId, view); + } else { + return JS_ThrowSyntaxError(ctx, "addViewById, invalid arguments!"); + } + + return JS_UNDEFINED; +} + +JSValue JsRemoveViewById(JSContext* ctx, JSValueConst new_target, int argc, JSValueConst* argv) +{ + LOGD("js_remove_view_by_id"); + if (argc != 1) { + return JS_ThrowSyntaxError(ctx, "The arg is wrong, it is supposed to have 1 arguments"); + } + + QJSContext::Scope scp(ctx); + + if (JS_IsNumber(argv[0])) { + ViewId viewId = __detail__::FromJSValue(argv[0]); + g_viewMapById.erase(viewId); + } else { + return JS_ThrowSyntaxError(ctx, "removeViewById, invalid arguments!"); + } + + return JS_UNDEFINED; +} + +JSValue JsMarkViewNeedUpdateById(JSContext* ctx, JSValueConst new_target, int argc, JSValueConst* argv) +{ + LOGD("js_mark_view_need_update_by_id"); + if (argc != 1) { + return JS_ThrowSyntaxError(ctx, "The arg is wrong, it is supposed to have 1 arguments"); + } + + QJSContext::Scope scp(ctx); + + if (JS_IsNumber(argv[0])) { + ViewId viewId = __detail__::FromJSValue(argv[0]); + auto itr = g_viewMapById.find(viewId); + if (itr != g_viewMapById.end()) { + LOGD("markViewNeedUpdateById, View(%d)", viewId); + itr->second->MarkNeedUpdate(); + } else { + LOGE("markViewNeedUpdateById, stale view do not exist!"); + } + } else { + return JS_ThrowSyntaxError(ctx, "markViewNeedUpdateById, invalid arguments!"); + } + + return JS_UNDEFINED; +} + +void JsRegisterViews(BindingTarget global) +{ + JSContext* ctx = QJSContext::current(); + + QjsUtils::DefineGlobalFunction(ctx, JsLoadDocument, "loadDocument", 1); + QjsUtils::DefineGlobalFunction(ctx, JsDumpMemoryStats, "dumpMemoryStats", 1); + QjsUtils::DefineGlobalFunction(ctx, JsAddViewById, "addViewById", 1); + QjsUtils::DefineGlobalFunction(ctx, JsRemoveViewById, "removeViewById", 1); + QjsUtils::DefineGlobalFunction(ctx, JsMarkViewNeedUpdateById, "markViewNeedUpdateById", 1); + + JSViewAbstract::JSBind(); + JSText::JSBind(global); + JSButton::JSBind(global); + JSImage::JSBind(global); + JSColumn::JSBind(global); + JSRow::JSBind(global); + JSList::JSBind(global); + JSListItem::JSBind(global); + JSView::JSBind(global); + JSStack::JSBind(global); + JSForEach::JSBind(global); + JSGrid::JSBind(global); + JSGridItem::JSBind(global); + JSDivider::JSBind(global); + JSSwiper::JSBind(global); + JSSlidingPanel::JSBind(global); + JSTouchHandler::JSBind(global); + JSNavigator::JSBind(global); + JSAnimation::JSBind(global); + + JSObjectTemplate mainAxisAlign; + mainAxisAlign.Constant("Start", 1); + mainAxisAlign.Constant("Center", 2); + mainAxisAlign.Constant("End", 3); + mainAxisAlign.Constant("SpaceBetween", 6); + mainAxisAlign.Constant("SpaceAround", 7); + + JSObjectTemplate crossAxisAlign; + crossAxisAlign.Constant("Start", 1); + crossAxisAlign.Constant("Center", 2); + crossAxisAlign.Constant("End", 3); + crossAxisAlign.Constant("Stretch", 4); + + JSObjectTemplate direction; + direction.Constant("Horizontal", 0); + direction.Constant("Vertical", 1); + + JSObjectTemplate stackFit; + stackFit.Constant("Keep", 0); + stackFit.Constant("Stretch", 1); + stackFit.Constant("Inherit", 2); + stackFit.Constant("FirstChild", 3); + + JSObjectTemplate overflow; + overflow.Constant("Clip", 0); + overflow.Constant("Observable", 1); + + JSObjectTemplate alignment; + alignment.Constant("TopLeft", 0); + alignment.Constant("TopCenter", 1); + alignment.Constant("TopRight", 2); + alignment.Constant("CenterLeft", 3); + alignment.Constant("Center", 4); + alignment.Constant("CenterRight", 5); + alignment.Constant("BottomLeft", 6); + alignment.Constant("BottomCenter", 7); + alignment.Constant("BottomRight", 8); + + JSObjectTemplate buttonType; + buttonType.Constant("Capsule", (int)ButtonType::CAPSULE); + buttonType.Constant("Circle", (int)ButtonType::CIRCLE); + + JS_SetPropertyStr(ctx, global, "MainAxisAlign", *mainAxisAlign); + JS_SetPropertyStr(ctx, global, "CrossAxisAlign", *crossAxisAlign); + JS_SetPropertyStr(ctx, global, "Direction", *direction); + JS_SetPropertyStr(ctx, global, "StackFit", *stackFit); + JS_SetPropertyStr(ctx, global, "Align", *alignment); + JS_SetPropertyStr(ctx, global, "Overflow", *overflow); + JS_SetPropertyStr(ctx, global, "ButtonType", *buttonType); + + LOGD("View classes and jsCreateDocuemnt, registerObservableObject functions registered."); +} + +void RemoveViewById(ViewId viewId) +{ + LOGD("js_view_register -> removeViewById(%d)", viewId); + g_viewMapById.erase(viewId); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/frontend_delegate_declarative.cpp b/frameworks/bridge/declarative_frontend/frontend_delegate_declarative.cpp new file mode 100644 index 00000000..98918819 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/frontend_delegate_declarative.cpp @@ -0,0 +1,1340 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/declarative_frontend/frontend_delegate_declarative.h" + +#include +#include + +#include "ability.h" +#include "ability_info.h" +#include "base/log/ace_trace.h" +#include "base/log/event_report.h" +#include "base/utils/utils.h" +#include "core/common/ace_application_info.h" +#include "core/common/platform_bridge.h" +#include "core/components/dialog/dialog_component.h" +#include "core/components/toast/toast_component.h" +#include "frameworks/bridge/common/manifest/manifest_parser.h" +#include "frameworks/bridge/common/utils/utils.h" +#include "frameworks/bridge/js_frontend/js_ace_page.h" + +namespace OHOS::Ace::Framework { +namespace { + +constexpr int32_t INVALID_PAGE_ID = -1; +constexpr int32_t MAX_ROUTER_STACK = 32; +constexpr int32_t TOAST_TIME_MAX = 10000; // ms +constexpr int32_t TOAST_TIME_DEFAULT = 1500; // ms +constexpr int32_t MAX_PAGE_ID_SIZE = sizeof(uint64_t) * 8; +constexpr int32_t NANO_TO_MILLI = 1000000; // nanosecond to millisecond +constexpr int32_t TO_MILLI = 1000; // second to millisecond + +const char MANIFEST_JSON[] = "manifest.json"; +const char FILE_TYPE_JSON[] = ".json"; +const char I18N_FOLDER[] = "i18n/"; +const char RESOURCES_FOLDER[] = "resources/"; + +} // namespace + +int32_t FrontendDelegateDeclarative::GenerateNextPageId() +{ + for (int32_t idx = 0; idx < MAX_PAGE_ID_SIZE; ++idx) { + uint64_t bitMask = (1ULL << idx); + if ((bitMask & pageIdPool_.fetch_or(bitMask, std::memory_order_relaxed)) == 0) { + return idx; + } + } + return INVALID_PAGE_ID; +} + +void FrontendDelegateDeclarative::RecyclePageId(int32_t pageId) +{ + if (pageId < 0 && pageId >= MAX_PAGE_ID_SIZE) { + return; + } + uint64_t bitMask = (1ULL << pageId); + pageIdPool_.fetch_and(~bitMask, std::memory_order_relaxed); +} + +FrontendDelegateDeclarative::FrontendDelegateDeclarative(const RefPtr& taskExecutor, + const LoadJsCallback& loadCallback, const JsMessageDispatcherSetterCallback& transferCallback, + const EventCallback& asyncEventCallback, const EventCallback& syncEventCallback, + const UpdatePageCallback& updatePageCallback, const ResetStagingPageCallback& resetLoadingPageCallback, + const DestroyPageCallback& destroyPageCallback, const DestroyApplicationCallback& destroyApplicationCallback, + const TimerCallback& timerCallback, const MediaQueryCallback& mediaQueryCallback, + const RequestAnimationCallback& requestAnimationCallback, const JsCallback& jsCallback) + : loadJs_(loadCallback), dispatcherCallback_(transferCallback), asyncEvent_(asyncEventCallback), + syncEvent_(syncEventCallback), updatePage_(updatePageCallback), resetStagingPage_(resetLoadingPageCallback), + destroyPage_(destroyPageCallback), destroyApplication_(destroyApplicationCallback), timer_(timerCallback), + mediaQueryCallback_(mediaQueryCallback), requestAnimationCallback_(requestAnimationCallback), + jsCallback_(jsCallback), manifestParser_(AceType::MakeRefPtr()), +#if !defined(WINDOWS_PLATFORM) and !defined(MAC_PLATFORM) + jsAccessibilityManager_(AceType::MakeRefPtr()), +#else + jsAccessibilityManager_(AceType::MakeRefPtr()), +#endif + mediaQueryInfo_(AceType::MakeRefPtr()), taskExecutor_(taskExecutor) +{ + LOGE("FrontendDelegateDeclarative create"); +} + +void FrontendDelegateDeclarative::RunPage(const std::string& url, const std::string& params) +{ + ACE_SCOPED_TRACE("FrontendDelegateDeclarative::RunPage"); + + LOGI("FrontendDelegateDeclarative RunPage url=%{private}s", url.c_str()); + std::string jsonContent; + if (GetAssetContent(MANIFEST_JSON, jsonContent)) { + manifestParser_->Parse(jsonContent); + manifestParser_->Printer(); + } else { + LOGE("RunPage parse manifest.json failed"); + EventReport::SendPageRouterException(PageRouterExcepType::RUN_PAGE_ERR, url); + } + + if (!url.empty()) { + mainPagePath_ = manifestParser_->GetRouter()->GetPagePath(url); + } else { + mainPagePath_ = manifestParser_->GetRouter()->GetEntry(); + } + LoadPage(GenerateNextPageId(), mainPagePath_, true, params); +} + +void FrontendDelegateDeclarative::ChangeLocale(const std::string& language, const std::string& countryOrRegion) +{ + LOGD("JSFrontend ChangeLocale"); + taskExecutor_->PostTask( + [language, countryOrRegion]() { AceApplicationInfo::GetInstance().ChangeLocale(language, countryOrRegion); }, + TaskExecutor::TaskType::PLATFORM); +} + +void FrontendDelegateDeclarative::GetI18nData(std::unique_ptr& json) +{ + auto data = JsonUtil::CreateArray(true); + GetConfigurationCommon(I18N_FOLDER, data); + auto i18nData = JsonUtil::Create(true); + i18nData->Put("resources", data); + json->Put("i18n", i18nData); +} + +void FrontendDelegateDeclarative::GetResourceConfiguration(std::unique_ptr& json) +{ + auto data = JsonUtil::CreateArray(true); + GetConfigurationCommon(RESOURCES_FOLDER, data); + json->Put("resourcesConfiguration", data); +} + +void FrontendDelegateDeclarative::GetConfigurationCommon(const std::string& filePath, std::unique_ptr& data) +{ + std::vector files; + if (!AceApplicationInfo::GetInstance().GetFiles(filePath, files)) { + LOGE("Get configuration files fail!"); + return; + } + + std::vector fileNameList; + for (const auto& file : files) { + if (EndWith(file, FILE_TYPE_JSON)) { + fileNameList.emplace_back(file.substr(0, file.size() - (sizeof(FILE_TYPE_JSON) - 1))); + } + } + + std::vector priorityFileName; + if (filePath.compare(I18N_FOLDER) == 0) { + priorityFileName = AceApplicationInfo::GetInstance().GetLocaleFallback(fileNameList); + } else { + priorityFileName = AceApplicationInfo::GetInstance().GetResourceFallback(fileNameList); + } + + for (const auto& fileName : priorityFileName) { + auto fileFullPath = filePath + fileName + std::string(FILE_TYPE_JSON); + std::string content; + if (GetAssetContent(fileFullPath, content)) { + auto fileData = ParseFileData(content); + if (fileData == nullptr) { + LOGW("parse %{private}s.json content failed", filePath.c_str()); + } else { + data->Put(fileData); + } + } + } +} + +void FrontendDelegateDeclarative::OnJSCallback(const std::string& callbackId, const std::string& data) +{ + taskExecutor_->PostTask( + [weak = AceType::WeakClaim(this), callbackId, args = std::move(data)] { + auto delegate = weak.Upgrade(); + if (delegate) { + delegate->jsCallback_(callbackId, args); + } + }, + TaskExecutor::TaskType::JS); +} + +void FrontendDelegateDeclarative::SetJsMessageDispatcher(const RefPtr& dispatcher) const +{ + LOGD("FrontendDelegateDeclarative SetJsMessageDispatcher"); + taskExecutor_->PostTask([dispatcherCallback = dispatcherCallback_, dispatcher] { dispatcherCallback(dispatcher); }, + TaskExecutor::TaskType::JS); +} + +void FrontendDelegateDeclarative::TransferComponentResponseData(int32_t callbackId, int32_t code, + std::vector&& data) +{ + LOGD("FrontendDelegateDeclarative TransferComponentResponseData"); + auto pipelineContext = pipelineContextHolder_.Get(); + WeakPtr contextWeak(pipelineContext); + taskExecutor_->PostTask( + [callbackId, data = std::move(data), contextWeak]() mutable { + auto context = contextWeak.Upgrade(); + if (!context) { + LOGE("context is null"); + } else if (!context->GetMessageBridge()) { + LOGE("messageBridge is null"); + } else { + context->GetMessageBridge()->HandleCallback(callbackId, std::move(data)); + } + }, + TaskExecutor::TaskType::UI); +} + +void FrontendDelegateDeclarative::TransferJsResponseData( + int32_t callbackId, int32_t code, std::vector&& data) const +{ + LOGD("FrontendDelegateDeclarative TransferJsResponseData"); + taskExecutor_->PostTask( + [callbackId, code, data = std::move(data), groupJsBridge = groupJsBridge_]() mutable { + if (groupJsBridge) { + groupJsBridge->TriggerModuleJsCallback(callbackId, code, std::move(data)); + } + }, + TaskExecutor::TaskType::JS); +} + +void FrontendDelegateDeclarative::TransferJsPluginGetError( + int32_t callbackId, int32_t errorCode, std::string&& errorMessage) const +{ + LOGD("FrontendDelegateDeclarative TransferJsPluginGetError"); + taskExecutor_->PostTask( + [callbackId, errorCode, errorMessage = std::move(errorMessage), groupJsBridge = groupJsBridge_]() mutable { + if (groupJsBridge) { + groupJsBridge->TriggerModulePluginGetErrorCallback(callbackId, errorCode, std::move(errorMessage)); + } + }, + TaskExecutor::TaskType::JS); +} + +void FrontendDelegateDeclarative::TransferJsEventData(int32_t callbackId, int32_t code, + std::vector&& data) const +{ + taskExecutor_->PostTask( + [callbackId, code, data = std::move(data), groupJsBridge = groupJsBridge_]() mutable { + if (groupJsBridge) { + groupJsBridge->TriggerEventJsCallback(callbackId, code, std::move(data)); + } + }, + TaskExecutor::TaskType::JS); +} + +void FrontendDelegateDeclarative::LoadPluginJsCode(std::string&& jsCode) const +{ + LOGD("FrontendDelegateDeclarative LoadPluginJsCode"); + taskExecutor_->PostTask( + [jsCode = std::move(jsCode), groupJsBridge = groupJsBridge_]() mutable { + if (groupJsBridge) { + groupJsBridge->LoadPluginJsCode(std::move(jsCode)); + } + }, + TaskExecutor::TaskType::JS); +} + +bool FrontendDelegateDeclarative::OnPageBackPress() +{ + bool result = FireSyncEvent("_root", std::string("\"clickbackitem\","), std::string("")); + LOGD("OnPageBackPress: jsframework callback result: %{public}d", result); + return result; +} + +void FrontendDelegateDeclarative::OnSuspended() +{ + LOGD("FrontendDelegateDeclarative OnSuspended"); + FireAsyncEvent("_root", std::string("\"viewsuspended\",null,null"), std::string("")); +} + +void FrontendDelegateDeclarative::OnBackGround() +{ + OnPageHide(); +} + +void FrontendDelegateDeclarative::OnForground() +{ + OnPageShow(); +} + +bool FrontendDelegateDeclarative::OnStartContinuation() +{ + return FireSyncEvent("_root", std::string("\"onStartContinuation\","), std::string("")); +} + +void FrontendDelegateDeclarative::OnCompleteContinuation(int32_t code) +{ + FireSyncEvent("_root", std::string("\"onCompleteContinuation\","), std::to_string(code)); +} + +void FrontendDelegateDeclarative::OnSaveData(std::string& data) +{ + std::string savedData; + FireSyncEvent("_root", std::string("\"onSaveData\","), std::string(""), savedData); + std::string pageUri = GetRunningPageUrl(); + data = std::string("{\"url\":\"").append(pageUri).append("\",\"__remoteData\":").append(savedData).append("}"); +} + +bool FrontendDelegateDeclarative::OnRestoreData(const std::string& data) +{ + LOGD("OnRestoreData: restores the user data to shareData from remote ability"); + return FireSyncEvent("_root", std::string("\"onRestoreData\","), data); +} + +void FrontendDelegateDeclarative::OnNewRequest(const std::string& data) +{ + FireSyncEvent("_root", std::string("\"onNewRequest\","), data); +} + +void FrontendDelegateDeclarative::CallPopPage() +{ + PopPage(); +} + +void FrontendDelegateDeclarative::ResetStagingPage() +{ + taskExecutor_->PostTask([resetStagingPage = resetStagingPage_] { resetStagingPage(); }, TaskExecutor::TaskType::JS); +} + +void FrontendDelegateDeclarative::OnApplicationDestroy(const std::string& packageName) +{ + taskExecutor_->PostSyncTask( + [destroyApplication = destroyApplication_, packageName] { destroyApplication(packageName); }, + TaskExecutor::TaskType::JS); +} + +void FrontendDelegateDeclarative::FireAsyncEvent( + const std::string& eventId, const std::string& param, const std::string& jsonArgs) +{ + LOGD("FireAsyncEvent eventId: %{public}s", eventId.c_str()); + std::string args = param; + args.append(",null").append(",null"); // callback and dom changes + if (!jsonArgs.empty()) { + args.append(",").append(jsonArgs); // method args + } + taskExecutor_->PostTask( + [weak = AceType::WeakClaim(this), eventId, args = std::move(args)] { + auto delegate = weak.Upgrade(); + if (delegate) { + delegate->asyncEvent_(eventId, args); + } + }, + TaskExecutor::TaskType::JS); +} + +bool FrontendDelegateDeclarative::FireSyncEvent( + const std::string& eventId, const std::string& param, const std::string& jsonArgs) +{ + std::string resultStr; + FireSyncEvent(eventId, param, jsonArgs, resultStr); + return (resultStr == "true"); +} + +void FrontendDelegateDeclarative::FireSyncEvent( + const std::string& eventId, const std::string& param, const std::string& jsonArgs, std::string& result) +{ + int32_t callbackId = callbackCnt_++; + std::string args = param; + args.append("{\"_callbackId\":\"").append(std::to_string(callbackId)).append("\"}").append(",null"); + if (!jsonArgs.empty()) { + args.append(",").append(jsonArgs); // method args + } + taskExecutor_->PostSyncTask( + [weak = AceType::WeakClaim(this), eventId, args = std::move(args)] { + auto delegate = weak.Upgrade(); + if (delegate) { + delegate->syncEvent_(eventId, args); + } + }, + TaskExecutor::TaskType::JS); + + result = jsCallBackResult_[callbackId]; + LOGD("FireSyncEvent eventId: %{public}s, callbackId: %{public}d", eventId.c_str(), callbackId); + jsCallBackResult_.erase(callbackId); +} + +void FrontendDelegateDeclarative::FireAccessibilityEvent(const AccessibilityEvent& accessibilityEvent) +{ + jsAccessibilityManager_->SendAccessibilityAsyncEvent(accessibilityEvent); +} + +void FrontendDelegateDeclarative::InitializeAccessibilityCallback() +{ + jsAccessibilityManager_->InitializeCallback(); +} + +// Start FrontendDelegate overrides. +void FrontendDelegateDeclarative::Push(const std::string& uri, const std::string& params) +{ + if (uri.empty()) { + LOGE("router.Push uri is empty"); + return; + } + if (isRouteStackFull_) { + LOGE("the router stack has reached its max size, you can't push any more pages."); + EventReport::SendPageRouterException(PageRouterExcepType::PAGE_STACK_OVERFLOW_ERR, uri); + return; + } + std::string pagePath = manifestParser_->GetRouter()->GetPagePath(uri); + LOGD("router.Push pagePath = %{private}s", pagePath.c_str()); + if (!pagePath.empty()) { + LoadPage(GenerateNextPageId(), pagePath, false, params); + } else { + LOGW("this uri not support in route push."); + } +} + +void FrontendDelegateDeclarative::Replace(const std::string& uri, const std::string& params) +{ + if (uri.empty()) { + LOGE("router.Replace uri is empty"); + return; + } + std::string pagePath = manifestParser_->GetRouter()->GetPagePath(uri); + LOGD("router.Replace pagePath = %{private}s", pagePath.c_str()); + if (!pagePath.empty()) { + LoadReplacePage(GenerateNextPageId(), pagePath, params); + } else { + LOGW("this uri not support in route replace."); + } +} + +void FrontendDelegateDeclarative::Back(const std::string& uri) +{ + LOGD("router.Back path = %{private}s", uri.c_str()); + if (uri.empty()) { + PopPage(); + } else { + std::string pagePath = manifestParser_->GetRouter()->GetPagePath(uri); + LOGD("router.Back pagePath = %{private}s", pagePath.c_str()); + if (!pagePath.empty()) { + PopToPage(pagePath); + } else { + LOGW("this uri not support in route Back."); + } + } +} + +void FrontendDelegateDeclarative::Clear() +{ + ClearInvisiblePages(); +} + +int32_t FrontendDelegateDeclarative::GetStackSize() const +{ + std::lock_guard lock(mutex_); + return static_cast(pageRouteStack_.size()); +} + +void FrontendDelegateDeclarative::GetState(int32_t& index, std::string& name, std::string& path) +{ + std::string url; + { + std::lock_guard lock(mutex_); + if (pageRouteStack_.empty()) { + return; + } + index = static_cast(pageRouteStack_.size()); + url = pageRouteStack_.back().url; + } + auto pos = url.rfind(".js"); + if (pos == url.length() - 3) { + url = url.substr(0, pos); + } + pos = url.rfind("/"); + if (pos != std::string::npos) { + name = url.substr(pos + 1); + path = url.substr(0, pos + 1); + } +} + +void FrontendDelegateDeclarative::TriggerPageUpdate(int32_t pageId, bool directExecute) +{ + auto page = GetPage(pageId); + if (!page) { + return; + } + + auto jsPage = AceType::DynamicCast(page); + ACE_DCHECK(jsPage); + + // Pop all JS command and execute them in UI thread. + auto jsCommands = std::make_shared>>(); + jsPage->PopAllCommands(*jsCommands); + + auto pipelineContext = pipelineContextHolder_.Get(); + WeakPtr jsPageWeak(jsPage); + WeakPtr contextWeak(pipelineContext); + auto updateTask = [jsPageWeak, contextWeak, jsCommands] { + ACE_SCOPED_TRACE("FlushUpdateCommands"); + auto jsPage = jsPageWeak.Upgrade(); + auto context = contextWeak.Upgrade(); + if (!jsPage || !context) { + LOGE("Page update failed. page or context is null."); + EventReport::SendPageRouterException(PageRouterExcepType::UPDATE_PAGE_ERR); + return; + } + // Flush all JS commands. + for (const auto& command : *jsCommands) { + command->Execute(jsPage); + } + if (jsPage->GetDomDocument()) { + jsPage->GetDomDocument()->HandleComponentPostBinding(); + } + if (context->GetAccessibilityManager()) { + context->GetAccessibilityManager()->HandleComponentPostBinding(); + } + + jsPage->ClearShowCommand(); + std::vector dirtyNodes; + jsPage->PopAllDirtyNodes(dirtyNodes); + for (auto nodeId : dirtyNodes) { + auto patchComponent = jsPage->BuildPagePatch(nodeId); + if (patchComponent) { + context->ScheduleUpdate(patchComponent); + } + } + }; + + taskExecutor_->PostTask( + [updateTask, pipelineContext, directExecute]() { + pipelineContext->AddPageUpdateTask(std::move(updateTask), directExecute); + }, + TaskExecutor::TaskType::UI); +} + +void FrontendDelegateDeclarative::PostJsTask(std::function&& task) +{ + taskExecutor_->PostTask(task, TaskExecutor::TaskType::JS); +} + +const std::string& FrontendDelegateDeclarative::GetAppID() const +{ + return manifestParser_->GetAppInfo()->GetAppID(); +} + +const std::string& FrontendDelegateDeclarative::GetAppName() const +{ + return manifestParser_->GetAppInfo()->GetAppName(); +} + +const std::string& FrontendDelegateDeclarative::GetVersionName() const +{ + return manifestParser_->GetAppInfo()->GetVersionName(); +} + +int32_t FrontendDelegateDeclarative::GetVersionCode() const +{ + return manifestParser_->GetAppInfo()->GetVersionCode(); +} + +const WindowConfig& FrontendDelegateDeclarative::GetWindowConfig() const +{ + return manifestParser_->GetWindowConfig(); +} + +void FrontendDelegateDeclarative::ShowToast(const std::string& message, int32_t duration, const std::string& bottom) +{ + LOGD("FrontendDelegateDeclarative ShowToast."); + int32_t durationTime = std::clamp(duration, TOAST_TIME_DEFAULT, TOAST_TIME_MAX); + auto pipelineContext = pipelineContextHolder_.Get(); + bool isRightToLeft = AceApplicationInfo::GetInstance().IsRightToLeft(); + taskExecutor_->PostTask( + [durationTime, message, bottom, isRightToLeft, context = pipelineContext] { + ToastComponent::GetInstance().Show(context, message, durationTime, bottom, isRightToLeft); + }, + TaskExecutor::TaskType::UI); +} + +void FrontendDelegateDeclarative::ShowDialog(const std::string& title, const std::string& message, + const std::vector>& buttons, bool autoCancel, + std::function&& callback, const std::set& callbacks) +{ + std::unordered_map callbackMarkers; + if (callbacks.find(COMMON_SUCCESS) != callbacks.end()) { + auto successEventMarker = BackEndEventManager::GetInstance().GetAvailableMarker(); + BackEndEventManager::GetInstance().BindBackendEvent( + successEventMarker, [callback, taskExecutor = taskExecutor_](int32_t successType) { + taskExecutor->PostTask( + [callback, successType]() { callback(0, successType); }, TaskExecutor::TaskType::JS); + }); + callbackMarkers.emplace(COMMON_SUCCESS, successEventMarker); + } + + if (callbacks.find(COMMON_CANCEL) != callbacks.end()) { + auto cancelEventMarker = BackEndEventManager::GetInstance().GetAvailableMarker(); + BackEndEventManager::GetInstance().BindBackendEvent( + cancelEventMarker, [callback, taskExecutor = taskExecutor_] { + taskExecutor->PostTask([callback]() { callback(1, 0); }, TaskExecutor::TaskType::JS); + }); + callbackMarkers.emplace(COMMON_CANCEL, cancelEventMarker); + } + + if (callbacks.find(COMMON_COMPLETE) != callbacks.end()) { + auto completeEventMarker = BackEndEventManager::GetInstance().GetAvailableMarker(); + BackEndEventManager::GetInstance().BindBackendEvent( + completeEventMarker, [callback, taskExecutor = taskExecutor_] { + taskExecutor->PostTask([callback]() { callback(2, 0); }, TaskExecutor::TaskType::JS); + }); + callbackMarkers.emplace(COMMON_COMPLETE, completeEventMarker); + } + + DialogProperties dialogProperties = { + .title = title, + .content = message, + .autoCancel = autoCancel, + .buttons = buttons, + .callbacks = std::move(callbackMarkers), + }; + pipelineContextHolder_.Get()->ShowDialog(dialogProperties, AceApplicationInfo::GetInstance().IsRightToLeft()); +} + + +Rect FrontendDelegateDeclarative::GetBoundingRectData(NodeId nodeId) +{ + Rect rect; + auto task = [context = pipelineContextHolder_.Get(), nodeId, &rect]() { + context->GetBoundingRectData(nodeId, rect); + }; + PostSyncTaskToPage(task); + return rect; +} + +void FrontendDelegateDeclarative::SetCallBackResult(const std::string& callBackId, const std::string& result) +{ + jsCallBackResult_.try_emplace(StringToInt(callBackId), result); +} + +void FrontendDelegateDeclarative::WaitTimer( + const std::string& callbackId, const std::string& delay, bool isInterval, bool isFirst) +{ + if (!isFirst) { + auto timeoutTaskIter = timeoutTaskMap_.find(callbackId); + // If not find the callbackId in map, means this timer already was removed, + // no need create a new cancelableTimer again. + if (timeoutTaskIter == timeoutTaskMap_.end()) { + return; + } + } + + int32_t delayTime = StringToInt(delay); + // CancelableCallback class can only be executed once. + CancelableCallback cancelableTimer; + cancelableTimer.Reset([callbackId, delay, isInterval, call = timer_] { call(callbackId, delay, isInterval); }); + auto result = timeoutTaskMap_.try_emplace(callbackId, cancelableTimer); + if (!result.second) { + result.first->second = cancelableTimer; + } + taskExecutor_->PostDelayedTask(cancelableTimer, TaskExecutor::TaskType::JS, delayTime); +} + +void FrontendDelegateDeclarative::ClearTimer(const std::string& callbackId) +{ + auto timeoutTaskIter = timeoutTaskMap_.find(callbackId); + if (timeoutTaskIter != timeoutTaskMap_.end()) { + timeoutTaskIter->second.Cancel(); + timeoutTaskMap_.erase(timeoutTaskIter); + } else { + LOGW("ClearTimer callbackId not found"); + } +} + +void FrontendDelegateDeclarative::PostSyncTaskToPage(std::function&& task) +{ + pipelineContextHolder_.Get(); // Wait until Pipeline Context is attached. + taskExecutor_->PostSyncTask(task, TaskExecutor::TaskType::UI); +} + +void FrontendDelegateDeclarative::AddTaskObserver(std::function&& task) +{ + taskExecutor_->AddTaskObserver(std::move(task)); +} + +void FrontendDelegateDeclarative::RemoveTaskObserver() +{ + taskExecutor_->RemoveTaskObserver(); +} + +bool FrontendDelegateDeclarative::GetAssetContent(const std::string& url, std::string& content) +{ + return GetAssetContentImpl(assetManager_, url, content); +} + +bool FrontendDelegateDeclarative::GetAssetContent(const std::string& url, std::vector& content) +{ + return GetAssetContentImpl(assetManager_, url, content); +} + +void FrontendDelegateDeclarative::LoadPage( + int32_t pageId, const std::string& url, bool isMainPage, const std::string& params) +{ + LOGI("FrontendDelegateDeclarative LoadPage[%{private}d]: %{private}s.", pageId, url.c_str()); + if (pageId == INVALID_PAGE_ID) { + LOGE("FrontendDelegateDeclarative, invalid page id"); + EventReport::SendPageRouterException(PageRouterExcepType::LOAD_PAGE_ERR, url); + return; + } + if (isStagingPageExist_) { + LOGE("FrontendDelegateDeclarative, load page failed, waiting for current page loading finish."); + return; + } + isStagingPageExist_ = true; + auto document = AceType::MakeRefPtr(pageId); + auto page = AceType::MakeRefPtr(pageId, document, url); + page->SetPageParams(params); + page->SetFlushCallback([weak = AceType::WeakClaim(this), isMainPage](const RefPtr& acePage) { + auto delegate = weak.Upgrade(); + if (delegate && acePage) { + delegate->FlushPageCommand(acePage, acePage->GetUrl(), isMainPage); + } + }); + taskExecutor_->PostTask( + [weak = AceType::WeakClaim(this), page, url, isMainPage] { + auto delegate = weak.Upgrade(); + if (!delegate) { + return; + } + delegate->loadJs_(url, page, isMainPage); + page->FlushCommands(); + // just make sure the pipelineContext is created. + delegate->pipelineContextHolder_.Get(); + delegate->taskExecutor_->PostTask( + [weak, page] { + auto delegate = weak.Upgrade(); + if (delegate && delegate->pipelineContextHolder_.Get()) { + delegate->pipelineContextHolder_.Get()->FlushFocus(); + } + if (page->GetDomDocument()) { + page->GetDomDocument()->HandlePageLoadFinish(); + } + }, + TaskExecutor::TaskType::UI); + }, + TaskExecutor::TaskType::JS); +} + +void FrontendDelegateDeclarative::OnSurfaceChanged() +{ + if (mediaQueryInfo_->GetIsInit()) { + mediaQueryInfo_->SetIsInit(false); + } + mediaQueryInfo_->EnsureListenerIdValid(); + OnMediaQueryUpdate(); +} + +void FrontendDelegateDeclarative::OnMediaQueryUpdate() +{ + if (mediaQueryInfo_->GetIsInit()) { + return; + } + + taskExecutor_->PostTask( + [weak = AceType::WeakClaim(this)] { + auto delegate = weak.Upgrade(); + if (!delegate) { + return; + } + const auto& info = delegate->mediaQueryInfo_->GetMediaQueryInfo(); + // request css mediaquery + std::string param("\"viewsizechanged\","); + param.append(info); + delegate->asyncEvent_("_root", param); + + // request js mediaquery + const auto& listenerId = delegate->mediaQueryInfo_->GetListenerId(); + if (listenerId.empty()) { + return; + } + delegate->mediaQueryCallback_(listenerId, info); + delegate->mediaQueryInfo_->ResetListenerId(); + }, + TaskExecutor::TaskType::JS); +} + +void FrontendDelegateDeclarative::OnPageReady(const RefPtr& page, const std::string& url, bool isMainPage) +{ + LOGI("OnPageReady url = %{private}s", url.c_str()); + // Pop all JS command and execute them in UI thread. + auto jsCommands = std::make_shared>>(); + page->PopAllCommands(*jsCommands); + + auto pipelineContext = pipelineContextHolder_.Get(); + page->SetPipelineContext(pipelineContext); + taskExecutor_->PostTask( + [weak = AceType::WeakClaim(this), page, url, jsCommands, isMainPage] { + auto delegate = weak.Upgrade(); + if (!delegate) { + return; + } + auto pipelineContext = delegate->pipelineContextHolder_.Get(); + // Flush all JS commands. + for (const auto& command : *jsCommands) { + command->Execute(page); + } + // Just clear all dirty nodes. + page->ClearAllDirtyNodes(); + if (page->GetDomDocument()) { + page->GetDomDocument()->HandleComponentPostBinding(); + } + if (pipelineContext->GetAccessibilityManager()) { + pipelineContext->GetAccessibilityManager()->HandleComponentPostBinding(); + } + if (pipelineContext->CanPushPage()) { + if (!isMainPage) { + delegate->OnPageHide(); + } + pipelineContext->PushPage(page->BuildPage(url)); + delegate->OnPushPageSuccess(page, url); + delegate->SetCurrentPage(page->GetPageId()); + delegate->OnMediaQueryUpdate(); + } else { + // This page has been loaded but become useless now, the corresponding js instance + // must be destroyed to avoid memory leak. + delegate->OnPageDestroy(page->GetPageId()); + delegate->ResetStagingPage(); + } + delegate->isStagingPageExist_ = false; + if (isMainPage) { + delegate->OnPageShow(); + } + }, + TaskExecutor::TaskType::UI); +} + +void FrontendDelegateDeclarative::FlushPageCommand( + const RefPtr& page, const std::string& url, bool isMainPage) +{ + if (!page) { + return; + } + LOGI("FlushPageCommand FragmentCount(%{public}d)", page->FragmentCount()); + if (page->FragmentCount() == 1) { + OnPageReady(page, url, isMainPage); + } else { + TriggerPageUpdate(page->GetPageId()); + } +} + +void FrontendDelegateDeclarative::AddPageLocked(const RefPtr& page) +{ + auto result = pageMap_.try_emplace(page->GetPageId(), page); + if (!result.second) { + LOGW("the page has already in the map"); + } +} + +void FrontendDelegateDeclarative::SetCurrentPage(int32_t pageId) +{ + LOGD("FrontendDelegateDeclarative SetCurrentPage pageId=%{private}d", pageId); + auto page = GetPage(pageId); + if (page != nullptr) { + jsAccessibilityManager_->SetRunningPage(page); + taskExecutor_->PostTask([updatePage = updatePage_, page] { updatePage(page); }, TaskExecutor::TaskType::JS); + } else { + LOGE("FrontendDelegateDeclarative SetCurrentPage page is null."); + } +} + +void FrontendDelegateDeclarative::OnPushPageSuccess(const RefPtr& page, const std::string& url) +{ + std::lock_guard lock(mutex_); + AddPageLocked(page); + pageRouteStack_.emplace_back(PageInfo { page->GetPageId(), url }); + if (pageRouteStack_.size() >= MAX_ROUTER_STACK) { + isRouteStackFull_ = true; + EventReport::SendPageRouterException(PageRouterExcepType::PAGE_STACK_OVERFLOW_ERR, page->GetUrl()); + } + LOGI("OnPushPageSuccess size=%{private}zu,pageId=%{private}d,url=%{private}s", pageRouteStack_.size(), + pageRouteStack_.back().pageId, pageRouteStack_.back().url.c_str()); +} + +void FrontendDelegateDeclarative::OnPopToPageSuccess(const std::string& url) +{ + std::lock_guard lock(mutex_); + while (!pageRouteStack_.empty()) { + if (pageRouteStack_.back().url == url) { + break; + } + OnPageDestroy(pageRouteStack_.back().pageId); + pageMap_.erase(pageRouteStack_.back().pageId); + pageRouteStack_.pop_back(); + } + if (isRouteStackFull_) { + isRouteStackFull_ = false; + } +} + +void FrontendDelegateDeclarative::PopToPage(const std::string& url) +{ + LOGD("FrontendDelegateDeclarative PopToPage url = %{private}s", url.c_str()); + taskExecutor_->PostTask( + [weak = AceType::WeakClaim(this), url] { + auto delegate = weak.Upgrade(); + if (!delegate) { + return; + } + auto pageId = delegate->GetPageIdByUrl(url); + if (pageId == INVALID_PAGE_ID) { + return; + } + auto pipelineContext = delegate->pipelineContextHolder_.Get(); + if (!pipelineContext->CanPopPage()) { + delegate->ResetStagingPage(); + return; + } + delegate->OnPageHide(); + pipelineContext->RemovePageTransitionListener(delegate->pageTransitionListenerId_); + delegate->pageTransitionListenerId_ = pipelineContext->AddPageTransitionListener( + [weak, url, pageId]( + const TransitionEvent& event, const WeakPtr& in, const WeakPtr& out) { + auto delegate = weak.Upgrade(); + if (delegate) { + delegate->PopToPageTransitionListener(event, url, pageId); + } + }); + pipelineContext->PopToPage(pageId); + }, + TaskExecutor::TaskType::UI); +} + +void FrontendDelegateDeclarative::PopToPageTransitionListener( + const TransitionEvent& event, const std::string& url, int32_t pageId) +{ + if (event == TransitionEvent::POP_END) { + OnPopToPageSuccess(url); + SetCurrentPage(pageId); + OnPageShow(); + OnMediaQueryUpdate(); + } +} + +int32_t FrontendDelegateDeclarative::OnPopPageSuccess() +{ + std::lock_guard lock(mutex_); + pageMap_.erase(pageRouteStack_.back().pageId); + pageRouteStack_.pop_back(); + if (isRouteStackFull_) { + isRouteStackFull_ = false; + } + if (!pageRouteStack_.empty()) { + return pageRouteStack_.back().pageId; + } + return INVALID_PAGE_ID; +} + +void FrontendDelegateDeclarative::PopPage() +{ + taskExecutor_->PostTask( + [weak = AceType::WeakClaim(this)] { + auto delegate = weak.Upgrade(); + if (!delegate) { + return; + } + auto pipelineContext = delegate->pipelineContextHolder_.Get(); + if (delegate->GetStackSize() == 1) { + auto ability = static_cast(delegate->ability_); + std::shared_ptr info = ability->GetAbilityInfo(); + if (info != nullptr && info->isLauncherAbility) { + LOGW("launcher ability, return"); + return; + } +#if !defined(WINDOWS_PLATFORM) and !defined(MAC_PLATFORM) + delegate->OnPageHide(); + delegate->OnPageDestroy(delegate->GetRunningPageId()); + delegate->OnPopPageSuccess(); + pipelineContext->Finish(); +#else + LOGW("Can't back because this is the last page!"); +#endif + return; + } + if (!pipelineContext->CanPopPage()) { + delegate->ResetStagingPage(); + return; + } + delegate->OnPageHide(); + pipelineContext->RemovePageTransitionListener(delegate->pageTransitionListenerId_); + delegate->pageTransitionListenerId_ = pipelineContext->AddPageTransitionListener( + [weak, destroyPageId = delegate->GetRunningPageId()]( + const TransitionEvent& event, const WeakPtr& in, const WeakPtr& out) { + auto delegate = weak.Upgrade(); + if (delegate) { + delegate->PopPageTransitionListener(event, destroyPageId); + } + }); + pipelineContext->PopPage(); + }, + TaskExecutor::TaskType::UI); +} + +void FrontendDelegateDeclarative::PopPageTransitionListener(const TransitionEvent& event, int32_t destroyPageId) +{ + if (event == TransitionEvent::POP_END) { + OnPageDestroy(destroyPageId); + auto pageId = OnPopPageSuccess(); + SetCurrentPage(pageId); + OnPageShow(); + OnMediaQueryUpdate(); + } +} + +int32_t FrontendDelegateDeclarative::OnClearInvisiblePagesSuccess() +{ + std::lock_guard lock(mutex_); + PageInfo pageInfo = std::move(pageRouteStack_.back()); + pageRouteStack_.pop_back(); + for (const auto& info : pageRouteStack_) { + OnPageDestroy(info.pageId); + pageMap_.erase(info.pageId); + } + pageRouteStack_.clear(); + int32_t resPageId = pageInfo.pageId; + pageRouteStack_.emplace_back(std::move(pageInfo)); + if (isRouteStackFull_) { + isRouteStackFull_ = false; + } + return resPageId; +} + +void FrontendDelegateDeclarative::ClearInvisiblePages() +{ + taskExecutor_->PostTask( + [weak = AceType::WeakClaim(this)] { + auto delegate = weak.Upgrade(); + if (!delegate) { + return; + } + auto pipelineContext = delegate->pipelineContextHolder_.Get(); + if (pipelineContext->ClearInvisiblePages()) { + auto pageId = delegate->OnClearInvisiblePagesSuccess(); + delegate->SetCurrentPage(pageId); + } + }, + TaskExecutor::TaskType::UI); +} + +void FrontendDelegateDeclarative::OnReplacePageSuccess(const RefPtr& page, const std::string& url) +{ + if (!page) { + return; + } + std::lock_guard lock(mutex_); + AddPageLocked(page); + if (!pageRouteStack_.empty()) { + pageMap_.erase(pageRouteStack_.back().pageId); + pageRouteStack_.pop_back(); + } + pageRouteStack_.emplace_back(PageInfo { page->GetPageId(), url }); +} + +void FrontendDelegateDeclarative::ReplacePage(const RefPtr& page, const std::string& url) +{ + LOGI("ReplacePage url = %{private}s", url.c_str()); + // Pop all JS command and execute them in UI thread. + auto jsCommands = std::make_shared>>(); + page->PopAllCommands(*jsCommands); + + auto pipelineContext = pipelineContextHolder_.Get(); + page->SetPipelineContext(pipelineContext); + taskExecutor_->PostTask( + [weak = AceType::WeakClaim(this), page, url, jsCommands] { + auto delegate = weak.Upgrade(); + if (!delegate) { + return; + } + auto pipelineContext = delegate->pipelineContextHolder_.Get(); + // Flush all JS commands. + for (const auto& command : *jsCommands) { + command->Execute(page); + } + // Just clear all dirty nodes. + page->ClearAllDirtyNodes(); + page->GetDomDocument()->HandleComponentPostBinding(); + pipelineContext->GetAccessibilityManager()->HandleComponentPostBinding(); + if (pipelineContext->CanReplacePage()) { + delegate->OnPageHide(); + delegate->OnPageDestroy(delegate->GetRunningPageId()); + pipelineContext->ReplacePage(page->BuildPage(url)); + delegate->OnReplacePageSuccess(page, url); + delegate->SetCurrentPage(page->GetPageId()); + delegate->OnMediaQueryUpdate(); + } else { + // This page has been loaded but become useless now, the corresponding js instance + // must be destroyed to avoid memory leak. + delegate->OnPageDestroy(page->GetPageId()); + delegate->ResetStagingPage(); + } + delegate->isStagingPageExist_ = false; + }, + TaskExecutor::TaskType::UI); +} + +void FrontendDelegateDeclarative::LoadReplacePage(int32_t pageId, const std::string& url, const std::string& params) +{ + LOGD("FrontendDelegateDeclarative LoadReplacePage[%{private}d]: %{private}s.", pageId, url.c_str()); + if (pageId == INVALID_PAGE_ID) { + LOGE("FrontendDelegateDeclarative, invalid page id"); + EventReport::SendPageRouterException(PageRouterExcepType::REPLACE_PAGE_ERR, url); + return; + } + if (isStagingPageExist_) { + LOGE("FrontendDelegateDeclarative, replace page failed, waiting for current page loading finish."); + EventReport::SendPageRouterException(PageRouterExcepType::REPLACE_PAGE_ERR, url); + return; + } + isStagingPageExist_ = true; + auto document = AceType::MakeRefPtr(pageId); + auto page = AceType::MakeRefPtr(pageId, document, url); + page->SetPageParams(params); + taskExecutor_->PostTask( + [page, url, weak = AceType::WeakClaim(this)] { + auto delegate = weak.Upgrade(); + if (delegate) { + delegate->loadJs_(url, page, false); + delegate->ReplacePage(page, url); + } + }, + TaskExecutor::TaskType::JS); +} + +void FrontendDelegateDeclarative::RebuildAllPages() +{ + std::unordered_map> pages; + { + std::lock_guard lock(mutex_); + pages.insert(pageMap_.begin(), pageMap_.end()); + } + for (const auto& [pageId, page] : pages) { + taskExecutor_->PostTask( + [weakPage = WeakPtr(page)] { + auto page = weakPage.Upgrade(); + if (!page) { + return; + } + auto domDoc = page->GetDomDocument(); + if (!domDoc) { + return; + } + auto rootNode = domDoc->GetDOMNodeById(domDoc->GetRootNodeId()); + if (!rootNode) { + return; + } + rootNode->UpdateStyleWithChildren(); + }, + TaskExecutor::TaskType::UI); + } +} + +void FrontendDelegateDeclarative::OnPageShow() +{ + FireAsyncEvent("_root", std::string("\"viewappear\",null,null"), std::string("")); +} + +void FrontendDelegateDeclarative::OnPageHide() +{ + FireAsyncEvent("_root", std::string("\"viewdisappear\",null,null"), std::string("")); +} + +void FrontendDelegateDeclarative::OnPageDestroy(int32_t pageId) +{ + taskExecutor_->PostTask( + [weak = AceType::WeakClaim(this), pageId] { + auto delegate = weak.Upgrade(); + if (delegate) { + delegate->destroyPage_(pageId); + delegate->RecyclePageId(pageId); + } + }, + TaskExecutor::TaskType::JS); +} + +int32_t FrontendDelegateDeclarative::GetRunningPageId() const +{ + std::lock_guard lock(mutex_); + if (pageRouteStack_.empty()) { + return INVALID_PAGE_ID; + } + return pageRouteStack_.back().pageId; +} + +std::string FrontendDelegateDeclarative::GetRunningPageUrl() const +{ + std::lock_guard lock(mutex_); + if (pageRouteStack_.empty()) { + return std::string(); + } + const auto& pageUrl = pageRouteStack_.back().url; + auto pos = pageUrl.rfind(".js"); + if (pos == pageUrl.length() - 3) { + return pageUrl.substr(0, pos); + } + return pageUrl; +} + +int32_t FrontendDelegateDeclarative::GetPageIdByUrl(const std::string& url) +{ + std::lock_guard lock(mutex_); + auto pageIter = std::find_if(std::rbegin(pageRouteStack_), std::rend(pageRouteStack_), + [&url](const PageInfo& pageRoute) { return url == pageRoute.url; }); + if (pageIter != std::rend(pageRouteStack_)) { + LOGD("GetPageIdByUrl pageId=%{private}d url=%{private}s", pageIter->pageId, url.c_str()); + return pageIter->pageId; + } + return INVALID_PAGE_ID; +} + +RefPtr FrontendDelegateDeclarative::GetPage(int32_t pageId) const +{ + std::lock_guard lock(mutex_); + auto itPage = pageMap_.find(pageId); + if (itPage == pageMap_.end()) { + LOGE("the page is not in the map"); + return nullptr; + } + return itPage->second; +} + +void FrontendDelegateDeclarative::RegisterFont(const std::string& familyName, const std::string& familySrc) +{ + pipelineContextHolder_.Get()->RegisterFont(familyName, familySrc); +} + +void FrontendDelegateDeclarative::HandleImage( + const std::string& src, std::function&& callback, const std::set& callbacks) +{ + if (src.empty() || !callback) { + return; + } + std::map callbackMarkers; + if (callbacks.find("success") != callbacks.end()) { + auto successEventMarker = BackEndEventManager::GetInstance().GetAvailableMarker(); + successEventMarker.SetPreFunction([callback, taskExecutor = taskExecutor_]() { + taskExecutor->PostTask([callback] { callback(0); }, TaskExecutor::TaskType::JS); + }); + callbackMarkers.emplace("success", successEventMarker); + } + + if (callbacks.find("fail") != callbacks.end()) { + auto failEventMarker = BackEndEventManager::GetInstance().GetAvailableMarker(); + failEventMarker.SetPreFunction([callback, taskExecutor = taskExecutor_]() { + taskExecutor->PostTask([callback] { callback(1); }, TaskExecutor::TaskType::JS); + }); + callbackMarkers.emplace("fail", failEventMarker); + } + pipelineContextHolder_.Get()->CanLoadImage(src, callbackMarkers); +} + +void FrontendDelegateDeclarative::RequestAnimationFrame(const std::string& callbackId) +{ + CancelableCallback cancelableTask; + cancelableTask.Reset([callbackId, call = requestAnimationCallback_, weak = AceType::WeakClaim(this)] { + auto delegate = weak.Upgrade(); + if (delegate && call) { + call(callbackId, delegate->GetSystemRealTime()); + } + }); + animationFrameTaskMap_.try_emplace(callbackId, cancelableTask); + animationFrameTaskIds_.emplace(callbackId); +} + +uint64_t FrontendDelegateDeclarative::GetSystemRealTime() +{ + struct timespec ts; + clock_gettime(CLOCK_REALTIME, &ts); + return ts.tv_sec * TO_MILLI + ts.tv_nsec / NANO_TO_MILLI; +} + +void FrontendDelegateDeclarative::CancelAnimationFrame(const std::string& callbackId) +{ + auto animationTaskIter = animationFrameTaskMap_.find(callbackId); + if (animationTaskIter != animationFrameTaskMap_.end()) { + animationTaskIter->second.Cancel(); + animationFrameTaskMap_.erase(animationTaskIter); + } else { + LOGW("cancelAnimationFrame callbackId not found"); + } +} + +void FrontendDelegateDeclarative::FlushAnimationTasks() +{ + while (!animationFrameTaskIds_.empty()) { + const auto& callbackId = animationFrameTaskIds_.front(); + if (!callbackId.empty()) { + auto taskIter = animationFrameTaskMap_.find(callbackId); + if (taskIter != animationFrameTaskMap_.end()) { + taskExecutor_->PostTask(taskIter->second, TaskExecutor::TaskType::JS); + } + } + animationFrameTaskIds_.pop(); + } +} + +SingleTaskExecutor FrontendDelegateDeclarative::GetAnimationJsTask() +{ + return SingleTaskExecutor::Make(taskExecutor_, TaskExecutor::TaskType::JS); +} + +SingleTaskExecutor FrontendDelegateDeclarative::GetUiTask() +{ + return SingleTaskExecutor::Make(taskExecutor_, TaskExecutor::TaskType::UI); +} + +void FrontendDelegateDeclarative::AttachPipelineContext(const RefPtr& context) +{ + context->SetOnPageShow([weak = AceType::WeakClaim(this)] { + auto delegate = weak.Upgrade(); + if (delegate) { + delegate->OnPageShow(); + } + }); + context->SetAnimationCallback([weak = AceType::WeakClaim(this)] { + auto delegate = weak.Upgrade(); + if (delegate) { + delegate->FlushAnimationTasks(); + } + }); + pipelineContextHolder_.Attach(context); + jsAccessibilityManager_->SetPipelineContext(context); + jsAccessibilityManager_->InitializeCallback(); +} + +void FrontendDelegateDeclarative::SetAssetManager(const RefPtr& assetManager) +{ + LOGE("FrontendDelegateDeclarative SetAssetManager"); + assetManager_ = assetManager; +} + +RefPtr FrontendDelegateDeclarative::GetPipelineContext() +{ + return pipelineContextHolder_.Get(); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/frontend_delegate_declarative.h b/frameworks/bridge/declarative_frontend/frontend_delegate_declarative.h new file mode 100644 index 00000000..9c438a17 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/frontend_delegate_declarative.h @@ -0,0 +1,266 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_FRONTEND_DELEGATE_DECLARATIVE_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_FRONTEND_DELEGATE_DECLARATIVE_H + +#include +#include +#include + +#include "base/memory/ace_type.h" +#include "base/thread/cancelable_callback.h" +#include "core/common/js_message_dispatcher.h" +#include "core/pipeline/pipeline_context.h" +#include "frameworks/bridge/common/accessibility/accessibility_node_manager.h" +#if !defined(WINDOWS_PLATFORM) and !defined(MAC_PLATFORM) +#include "frameworks/bridge/common/accessibility/js_accessibility_manager.h" +#else +#include "frameworks/bridge/common/inspector/js_inspector_manager.h" +#endif +#include "frameworks/bridge/common/manifest/manifest_parser.h" +#include "frameworks/bridge/js_frontend/engine/common/group_js_bridge.h" +#include "frameworks/bridge/js_frontend/frontend_delegate.h" +#include "frameworks/bridge/js_frontend/frontend_delegate_impl.h" +#include "frameworks/bridge/js_frontend/js_ace_page.h" + +namespace OHOS::Ace::Framework { + +class FrontendDelegateDeclarative : public FrontendDelegate { + DECLARE_ACE_TYPE(FrontendDelegateDeclarative, FrontendDelegate); + +public: + FrontendDelegateDeclarative(const RefPtr& taskExecutor, const LoadJsCallback& loadCallback, + const JsMessageDispatcherSetterCallback& transferCallback, const EventCallback& asyncEventCallback, + const EventCallback& syncEventCallback, const UpdatePageCallback& updatePageCallback, + const ResetStagingPageCallback& resetLoadingPageCallback, const DestroyPageCallback& destroyPageCallback, + const DestroyApplicationCallback& destroyApplicationCallback, const TimerCallback& timerCallback, + const MediaQueryCallback& mediaQueryCallback, const RequestAnimationCallback& requestAnimationCallback, + const JsCallback& jsCallback); + ~FrontendDelegateDeclarative() override = default; + + void AttachPipelineContext(const RefPtr& context) override; + void SetAssetManager(const RefPtr& assetManager) override; + + // JSFrontend delegate functions. + void RunPage(const std::string& url, const std::string& params); + void SetJsMessageDispatcher(const RefPtr& dispatcher) const; + void TransferComponentResponseData(int32_t callbackId, int32_t code, std::vector&& data); + void TransferJsResponseData(int32_t callbackId, int32_t code, std::vector&& data) const; + void TransferJsPluginGetError(int32_t callbackId, int32_t errorCode, std::string&& errorMessage) const; + void TransferJsEventData(int32_t callbackId, int32_t code, std::vector&& data) const; + void LoadPluginJsCode(std::string&& jsCode) const; + void OnJSCallback(const std::string& callbackId, const std::string& data); + bool OnPageBackPress(); + void OnBackGround(); + void OnForground(); + void OnSuspended(); + bool OnStartContinuation(); + void OnCompleteContinuation(int32_t code); + void OnSaveData(std::string& data); + bool OnRestoreData(const std::string& data); + void OnNewRequest(const std::string& data); + void CallPopPage(); + void OnApplicationDestroy(const std::string& packageName); + + // Accessibility delegate functions. + RefPtr GetJSAccessibilityManager() const + { + return jsAccessibilityManager_; + } + void FireAccessibilityEvent(const AccessibilityEvent& accessibilityEvent); + void InitializeAccessibilityCallback(); + + void OnMediaQueryUpdate() override; + void OnSurfaceChanged(); + // JSEventHandler delegate functions. + void FireAsyncEvent(const std::string& eventId, const std::string& param, const std::string& jsonArgs); + bool FireSyncEvent(const std::string& eventId, const std::string& param, const std::string& jsonArgs); + void FireSyncEvent( + const std::string& eventId, const std::string& param, const std::string& jsonArgs, std::string& result); + + // FrontendDelegate overrides. + void Push(const std::string& uri, const std::string& params) override; + void Replace(const std::string& uri, const std::string& params) override; + void Back(const std::string& uri) override; + void Clear() override; + int32_t GetStackSize() const override; + void GetState(int32_t& index, std::string& name, std::string& path) override; + void TriggerPageUpdate(int32_t pageId, bool directExecute = false) override; + + void PostJsTask(std::function&& task) override; + + const std::string& GetAppID() const override; + const std::string& GetAppName() const override; + const std::string& GetVersionName() const override; + int32_t GetVersionCode() const override; + const WindowConfig& GetWindowConfig() const; + + void ShowToast(const std::string& message, int32_t duration, const std::string& bottom) override; + void ShowDialog(const std::string& title, const std::string& message, + const std::vector>& buttons, bool autoCancel, + std::function&& callback, const std::set& callbacks) override; + + Rect GetBoundingRectData(NodeId nodeId) override; + // For async event. + void SetCallBackResult(const std::string& callBackId, const std::string& result) override; + + void WaitTimer(const std::string& callbackId, const std::string& delay, bool isInterval, bool isFirst) override; + void ClearTimer(const std::string& callbackId) override; + + void PostSyncTaskToPage(std::function&& task) override; + void AddTaskObserver(std::function&& task) override; + void RemoveTaskObserver() override; + + bool GetAssetContent(const std::string& url, std::string& content) override; + bool GetAssetContent(const std::string& url, std::vector& content) override; + + // i18n + void GetI18nData(std::unique_ptr& json) override; + + void GetResourceConfiguration(std::unique_ptr& json) override; + + void GetConfigurationCommon(const std::string& filePath, std::unique_ptr& data) override; + + void ChangeLocale(const std::string& language, const std::string& countryOrRegion) override; + + void RegisterFont(const std::string& familyName, const std::string& familySrc) override; + + void HandleImage(const std::string& src, std::function&& callback, + const std::set& callbacks) override; + + void RequestAnimationFrame(const std::string& callbackId) override; + + void CancelAnimationFrame(const std::string& callbackId) override; + + SingleTaskExecutor GetAnimationJsTask() override; + + SingleTaskExecutor GetUiTask() override; + + const RefPtr& GetMediaQueryInfoInstance() override + { + return mediaQueryInfo_; + } + + const RefPtr& GetGroupJsBridge() override + { + return groupJsBridge_; + } + + RefPtr GetPipelineContext() override; + + void SetGroupJsBridge(const RefPtr& groupJsBridge) + { + groupJsBridge_ = groupJsBridge; + } + + RefPtr GetPage(int32_t pageId) const override; + + void RebuildAllPages(); + + virtual void* GetAbility() override + { + return ability_; + } + + void SetAbility(void* ability) + { + ability_ = ability; + } + +private: + int32_t GenerateNextPageId(); + void RecyclePageId(int32_t pageId); + + void LoadPage(int32_t pageId, const std::string& url, bool isMainPage, const std::string& params); + void OnPageReady(const RefPtr& page, const std::string& url, bool isMainPage); + void FlushPageCommand(const RefPtr& page, const std::string& url, bool isMainPage); + void AddPageLocked(const RefPtr& page); + void SetCurrentPage(int32_t pageId); + + void OnPushPageSuccess(const RefPtr& page, const std::string& url); + void OnPopToPageSuccess(const std::string& url); + void PopToPage(const std::string& url); + int32_t OnPopPageSuccess(); + void PopPage(); + + void PopPageTransitionListener(const TransitionEvent& event, int32_t destroyPageId); + + void PopToPageTransitionListener(const TransitionEvent& event, const std::string& url, int32_t pageId); + + int32_t OnClearInvisiblePagesSuccess(); + void ClearInvisiblePages(); + + void OnReplacePageSuccess(const RefPtr& page, const std::string& url); + void ReplacePage(const RefPtr& page, const std::string& url); + void LoadReplacePage(int32_t pageId, const std::string& url, const std::string& params); + + uint64_t GetSystemRealTime(); + + // Page lifecycle + void OnPageShow(); + void OnPageHide(); + void OnPageDestroy(int32_t pageId); + + int32_t GetRunningPageId() const; + std::string GetRunningPageUrl() const; + int32_t GetPageIdByUrl(const std::string& url); + + void ResetStagingPage(); + void FlushAnimationTasks(); + + std::atomic pageIdPool_ = 0; + int32_t callbackCnt_ = 0; + bool isRouteStackFull_ = false; + bool isStagingPageExist_ = false; + std::string mainPagePath_; + std::vector pageRouteStack_; + std::unordered_map> pageMap_; + std::unordered_map jsCallBackResult_; + + LoadJsCallback loadJs_; + JsMessageDispatcherSetterCallback dispatcherCallback_; + EventCallback asyncEvent_; + EventCallback syncEvent_; + UpdatePageCallback updatePage_; + ResetStagingPageCallback resetStagingPage_; + DestroyPageCallback destroyPage_; + DestroyApplicationCallback destroyApplication_; + TimerCallback timer_; + std::unordered_map> timeoutTaskMap_; + MediaQueryCallback mediaQueryCallback_; + RequestAnimationCallback requestAnimationCallback_; + JsCallback jsCallback_; + RefPtr manifestParser_; + RefPtr jsAccessibilityManager_; + RefPtr mediaQueryInfo_; + RefPtr groupJsBridge_; + + RefPtr taskExecutor_; + RefPtr assetManager_; + + PipelineContextHolder pipelineContextHolder_; + + BaseId::IdType pageTransitionListenerId_ = 0L; + std::queue animationFrameTaskIds_; + std::unordered_map> animationFrameTaskMap_; + + mutable std::mutex mutex_; + void* ability_ = nullptr; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_FRONTEND_DELEGATE_DECLARATIVE_H diff --git a/frameworks/bridge/declarative_frontend/jsview/js_animation.cpp b/frameworks/bridge/declarative_frontend/jsview/js_animation.cpp new file mode 100644 index 00000000..dc569252 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_animation.cpp @@ -0,0 +1,169 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/declarative_frontend/jsview/js_animation.h" + +namespace OHOS::Ace::Framework { + +void JSAnimation::SetDuration(int duration) +{ + duration_ = duration; +} + +void JSAnimation::SetDelay(int delay) +{ + delay_ = delay; +} + +void JSAnimation::SetLinearCurve() +{ + SetAnimationCurve("linear"); +} + +void JSAnimation::SetEaseCurve() +{ + SetAnimationCurve("ease"); +} + +void JSAnimation::SetEaseInCurve() +{ + SetAnimationCurve("ease-in"); +} + +void JSAnimation::SetEaseOutCurve() +{ + SetAnimationCurve("ease-out"); +} + +void JSAnimation::SetEaseInOutCurve() +{ + SetAnimationCurve("ease-in-out"); +} + +void JSAnimation::SetDecelerationCurve() +{ + SetAnimationCurve("extreme-deceleration"); +} + +void JSAnimation::SetFastOutLinearInCurve() +{ + SetAnimationCurve("fast-out-linear-in"); +} + +void JSAnimation::SetFastOutSlowInCurve() +{ + SetAnimationCurve("fast-out-slow-in"); +} + +void JSAnimation::SetLinearOutSlowInCurve() +{ + SetAnimationCurve("linear-out-slow-in"); +} + +void JSAnimation::SetFrictionCurve() +{ + SetAnimationCurve("friction"); +} + +void JSAnimation::SetRhythmCurve() +{ + SetAnimationCurve("rhythm"); +} + +void JSAnimation::SetSharpCurve() +{ + SetAnimationCurve("sharp"); +} + +void JSAnimation::SetSmoothCurve() +{ + SetAnimationCurve("smooth"); +} + +void JSAnimation::SetNone() +{ + noAnimation_ = true; +} + +void JSAnimation::SetAnimationCurve(const std::string& animationCurve) +{ + LOGD("JSAnimation::SetAnimationCurve() %s", animationCurve.c_str()); + animationCurve_ = animationCurve; +} + +#ifdef USE_QUICKJS_ENGINE +void JSAnimation::MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc) +{ + LOGD("JSAnimation => MarkGC"); +} + +void JSAnimation::ReleaseRT(JSRuntime* rt) +{ + LOGD("JSAnimation => ReleaseRT"); +} + +void JSAnimation::QjsDestructor(JSRuntime* rt, JSAnimation* animationObj) +{ + if (!animationObj) { + return; + } + + animationObj->ReleaseRT(rt); + delete animationObj; + LOGD("JSAnimation(QjsDestructor) end"); +} + +void JSAnimation::QjsGcMark(JSRuntime* rt, JSValueConst val, JS_MarkFunc* markFunc) +{ + LOGD("JSAnimation(QjsGcMark) start"); + + JSAnimation* animationObj = Unwrap(val); + if (!animationObj) { + return; + } + + animationObj->MarkGC(rt, markFunc); + LOGD("JSAnimation(QjsGcMark) end"); +} +#endif + +void JSAnimation::JSBind(BindingTarget globalObj) +{ + LOGD("JSAnimation::JSBind()"); + JSClass::Declare("Animation"); + + MethodOptions opt = MethodOptions::RETURN_SELF; + JSClass::Method("duration", &JSAnimation::SetDuration, opt); + JSClass::Method("delay", &JSAnimation::SetDelay, opt); + + JSClass::Method("linear", &JSAnimation::SetLinearCurve, opt); + JSClass::Method("ease", &JSAnimation::SetEaseCurve, opt); + JSClass::Method("easeIn", &JSAnimation::SetEaseInCurve, opt); + JSClass::Method("easeOut", &JSAnimation::SetEaseOutCurve, opt); + JSClass::Method("easeInOut", &JSAnimation::SetEaseInOutCurve, opt); + JSClass::Method("deceleration", &JSAnimation::SetDecelerationCurve, opt); + JSClass::Method("fastOutLinearIn", &JSAnimation::SetFastOutLinearInCurve, opt); + JSClass::Method("fastOutSlowIn", &JSAnimation::SetFastOutSlowInCurve, opt); + JSClass::Method("linearOutSlowIn", &JSAnimation::SetLinearOutSlowInCurve, opt); + JSClass::Method("friction", &JSAnimation::SetFrictionCurve, opt); + JSClass::Method("rhythm", &JSAnimation::SetRhythmCurve, opt); + JSClass::Method("sharp", &JSAnimation::SetSharpCurve, opt); + JSClass::Method("smooth", &JSAnimation::SetSmoothCurve, opt); + JSClass::Method("none", &JSAnimation::SetNone, opt); + + JSClass::Bind<>(globalObj); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/jsview/js_animation.h b/frameworks/bridge/declarative_frontend/jsview/js_animation.h new file mode 100644 index 00000000..7a324636 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_animation.h @@ -0,0 +1,102 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_ANIMATION_H +#define FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_ANIMATION_H + +#include "frameworks/bridge/declarative_frontend/jsview/js_view_abstract.h" + +namespace OHOS::Ace::Framework { + +class JSAnimation { + +public: + JSAnimation() + { + LOGD("Constructor: JSAnimation"); + duration_ = 500; + delay_ = 0; + animationCurve_ = "linear"; + noAnimation_ = false; + } + + ~JSAnimation() + { + LOGD("Destroy: JSAnimation"); + } + + // Getters. + int GetDuration() const + { + return duration_; + } + + int GetDelay() const + { + return delay_; + } + + std::string GetAnimationCurve() const + { + return animationCurve_; + } + + bool GetNone() const + { + return noAnimation_; + } + +public: +#ifdef USE_QUICKJS_ENGINE + void MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc); + void ReleaseRT(JSRuntime* rt); + + static void QjsDestructor(JSRuntime* rt, JSAnimation* ptr); + static void QjsGcMark(JSRuntime* rt, JSValueConst val, JS_MarkFunc* markFunc); +#endif + + static void JSBind(BindingTarget globalObj); + +protected: + void SetDuration(int duration); + void SetDelay(int delay); + void SetAnimationCurve(const std::string& animationCurve); + + // Animation timing functions. + void SetLinearCurve(); + void SetEaseCurve(); + void SetEaseInCurve(); + void SetEaseOutCurve(); + void SetEaseInOutCurve(); + void SetDecelerationCurve(); + void SetFastOutLinearInCurve(); + void SetFastOutSlowInCurve(); + void SetLinearOutSlowInCurve(); + void SetFrictionCurve(); + void SetRhythmCurve(); + void SetSharpCurve(); + void SetSmoothCurve(); + void SetNone(); + +private: + int duration_; + int delay_; + std::string animationCurve_; + bool noAnimation_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_ANIMATION_H diff --git a/frameworks/bridge/declarative_frontend/jsview/js_button.cpp b/frameworks/bridge/declarative_frontend/jsview/js_button.cpp new file mode 100644 index 00000000..ecec8318 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_button.cpp @@ -0,0 +1,265 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/declarative_frontend/jsview/js_button.h" + +#ifdef USE_QUICKJS_ENGINE +#include "frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_function.h" +#include "frameworks/bridge/js_frontend/engine/quickjs/qjs_utils.h" +#endif +#ifdef USE_V8_ENGINE +#include "frameworks/bridge/declarative_frontend/engine/v8/functions/v8_click_function.h" +#endif + +#include "base/geometry/dimension.h" +#include "base/log/ace_trace.h" +#include "core/components/button/button_component.h" +#include "core/components/button/button_theme.h" +#include "core/components/padding/padding_component.h" +#include "core/components/text/text_component.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { + +RefPtr JSButton::CreateSpecializedComponent() +{ + ACE_DEBUG_SCOPED_TRACE("JSButton::CreateSpecializedComponent"); + LOGD("Create component: Button for %s", (child_ == nullptr) ? "text" : "image"); + // TODO: get default properties from theme + RefPtr buttonComponent; + std::list> buttonChildren; + if (child_ == nullptr) { + auto textComponent = AceType::MakeRefPtr(text_); + textComponent->SetTextStyle(textStyle_); + auto padding = AceType::MakeRefPtr(); + padding->SetChild(textComponent); + buttonChildren.emplace_back(padding); + buttonComponent = AceType::MakeRefPtr(buttonChildren); + } else { + buttonChildren.emplace_back(child_->CreateComponent()); + buttonComponent = AceType::MakeRefPtr(buttonChildren); + } + + buttonComponent->SetType(ButtonType::CAPSULE); + buttonComponent->SetWidth(100.0_px); + buttonComponent->SetHeight(50.0_px); + buttonComponent->SetBackgroundColor(Color::GRAY); + + // Apply styles if any. + if (GreatNotEqual(ViewWidth().Value(), 0.0)) { + buttonComponent->SetWidth(ViewWidth()); + } + if (GreatNotEqual(ViewHeight().Value(), 0.0)) { + buttonComponent->SetHeight(ViewHeight()); + } + if (GetUserDefColor()) { + buttonComponent->SetBackgroundColor(BackGroundColor()); + } + if (GreatNotEqual(ViewRadius().Value(), 0.0)) { + buttonComponent->SetRectRadius(ViewRadius()); + } + if (buttonType_ == static_cast(ButtonType::CAPSULE) || + buttonType_ == static_cast(ButtonType::CIRCLE)) { + buttonComponent->SetType(static_cast(buttonType_)); + } + + if (onClickFunc_) { + EventMarker clickEventId([func = std::move(onClickFunc_)](const BaseEventInfo* info) { +#ifdef USE_QUICKJS_ENGINE + func->execute(); +#elif USE_V8_ENGINE + auto clickInfo = TypeInfoHelper::DynamicCast(info); + func->execute(*clickInfo); +#endif + }); + buttonComponent->SetClickedEventId(clickEventId); + } + + return buttonComponent; +} + +std::vector> JSButton::CreateInteractableComponents() +{ + return JSInteractableView::CreateComponents(); +} + +#ifdef USE_QUICKJS_ENGINE +void JSButton::MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc) +{ + LOGD("JSButton => MarkGC: Mark value for GC start"); + JSInteractableView::MarkGC(rt, markFunc); + LOGD("JSButton => MarkGC: Mark value for GC end"); +} + +void JSButton::ReleaseRT(JSRuntime* rt) +{ + LOGD("JSButton => release start"); + JSInteractableView::ReleaseRT(rt); + LOGD("JSButton => release end"); +} +#endif + +void JSButton::SetFontSize(double value) +{ + textStyle_.SetFontSize(Dimension(value)); +} + +void JSButton::SetFontWeight(std::string value) +{ + textStyle_.SetFontWeight(ConvertStrToFontWeight(value)); +} + +void JSButton::SetTextColor(std::string value) +{ + textStyle_.SetTextColor(Color::FromString(value)); +} + +void JSButton::SetType(int value) +{ + if ((ButtonType)value == ButtonType::CAPSULE || (ButtonType)value == ButtonType::CIRCLE) { + buttonType_ = value; + } else { + LOGE("Setting button to non valid ButtonType %d", value); + } +} + +// STATIC qjs_class_bindings +#ifdef USE_QUICKJS_ENGINE +JSValue JSButton::JsOnClick(JSContext* ctx, JSValueConst jsBtn, int argc, JSValueConst* argv) +{ + if ((argc != 1) || !JS_IsFunction(ctx, argv[0])) { + LOGE("onCick expects a function as parameter. Throwing exception."); + return JS_EXCEPTION; + } + + QJSContext::Scope scope(ctx); + JSButton* btn = Unwrap(jsBtn); + + if (btn == nullptr) { + LOGE("onClick must be called on a JSButton. Throwing exception."); + return JS_EXCEPTION; + } + + // Dup and Free shoulj happen inside the QJSClickFunction + onClickFunc_ = AceType::MakeRefPtr(ctx, JS_DupValue(ctx, argv[0])); + + return JS_DupValue(ctx, jsBtn); // for call chaining +} + +JSValue JSButton::ConstructorCallback(JSContext* ctx, JSValueConst new_target, int argc, JSValueConst* argv) +{ + ACE_SCOPED_TRACE("JSButton::ConstructorCallback"); + if (argc > 0 || JS_IsObject(argv[0])) { + JSViewAbstract* img = static_cast(UnwrapAny(argv[0])); + if (img != nullptr) { + JS_DupValue(ctx, argv[0]); + JSButton* view = new JSButton(img); + return Wrap(new_target, view); + } + } + + if (argc > 0 && JS_IsString(argv[0])) { + QJSContext::Scope scope(ctx); + ScopedString text(argv[0]); + JSButton* view = new JSButton(text); + return Wrap(new_target, view); + } + + LOGE("Invalid call for Button constructor. Must provide one string argument or an Image component."); + return JS_NULL; +} + +void JSButton::QjsDestructor(JSRuntime* rt, JSButton* view) +{ + LOGD("JSButton(QjsDestructor) start"); + + if (!view) + return; + + view->ReleaseRT(rt); + delete view; + LOGD("JSButton(QjsDestructor) end"); +} + +void JSButton::QjsGcMark(JSRuntime* rt, JSValueConst val, JS_MarkFunc* markFunc) +{ + LOGD("JSButton(QjsGcMark) start"); + + JSButton* btn = Unwrap(val); + if (!btn) + return; + + btn->MarkGC(rt, markFunc); + LOGD("JSButton(QjsGcMark) end"); +} +#endif // USE_QUICKJS_ENGINE + +void JSButton::JSBind(BindingTarget globalObj) +{ + JSClass::Declare("Button"); + JSClass::Inherit(); + MethodOptions opt = MethodOptions::RETURN_SELF; + // "radius" bound by JSViewAbstract + JSClass::Method("color", &JSButton::SetTextColor, opt); + JSClass::Method("fontSize", &JSButton::SetFontSize, opt); + JSClass::Method("fontWeight", &JSButton::SetFontWeight, opt); + JSClass::Method("type", &JSButton::SetType, opt); + JSClass::CustomMethod("onClick", &JSButton::JsOnClick); + JSClass::CustomMethod("onTouch", &JSInteractableView::JsOnTouch); + JSClass::Bind(globalObj, ConstructorCallback); +} + +#ifdef USE_V8_ENGINE +void JSButton::ConstructorCallback(const v8::FunctionCallbackInfo& args) +{ + auto isolate = args.GetIsolate(); + v8::HandleScope scp(isolate); + auto context = isolate->GetCurrentContext(); + if (context.IsEmpty()) { + LOGE("context is empty!"); + return; + } + + int argc = args.Length(); + if (argc > 0 && args[0]->IsObject()) { + v8::Local obj = args[0]->ToObject(context).ToLocalChecked(); + JSViewAbstract* value = static_cast(obj->GetAlignedPointerFromInternalField(0)); + auto instance = V8Object::New(args.This(), value); + args.GetReturnValue().Set(instance->Get()); + } else if (argc > 0 && args[0]->IsString()) { + v8::Local obj = args[0]->ToObject(context).ToLocalChecked(); + V8Utils::ScopedString text(obj); + auto instance = V8Object::New(args.This(), text); + args.GetReturnValue().Set(instance->Get()); + } else { + LOGE("JSButton creation with unsupported child/parameter. Expected Image or text string."); + V8Utils ::ThrowException("JSButton creation with unsupported child / parameter."); + } +} + +void JSButton::JsOnClick(const v8::FunctionCallbackInfo& args) +{ + auto isolate = args.GetIsolate(); + v8::HandleScope scp(isolate); + LOGD("JSButton JsOnClick"); + if (args[0]->IsFunction()) { + v8::Local clickFunction = v8::Local::Cast(args[0]); + onClickFunc_ = AceType::MakeRefPtr(clickFunction); + } + args.GetReturnValue().Set(args.This()); +} +#endif + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/jsview/js_button.h b/frameworks/bridge/declarative_frontend/jsview/js_button.h new file mode 100644 index 00000000..eb5dc9ea --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_button.h @@ -0,0 +1,104 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_BUTTON_H +#define FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_BUTTON_H + +#include + +#include "core/components/button/button_component.h" +#include "core/components/touch_listener/touch_listener_component.h" +#include "core/event/ace_event_handler.h" +#include "frameworks/bridge/declarative_frontend/engine/bindings_defines.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_interactable_view.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_view_abstract.h" + +#ifdef USE_QUICKJS_ENGINE +#include "frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_click_function.h" +#ifdef __cplusplus +extern "C" { +#endif +#include "third_party/quickjs/quickjs.h" +#ifdef __cplusplus +} +#endif +#endif + +#ifdef USE_V8_ENGINE +#include "frameworks/bridge/declarative_frontend/engine/v8/functions/v8_click_function.h" +#endif + +namespace OHOS::Ace::Framework { + +class JSButton : public JSViewAbstract, public JSInteractableView { + DECLARE_ACE_TYPE(JSButton, JSViewAbstract); + +public: +#ifdef USE_QUICKJS_ENGINE + using ClickFunction = QJSClickFunction; +#elif USE_V8_ENGINE + using ClickFunction = V8ClickFunction; +#endif + + JSButton() = delete; + JSButton(const std::string text) + : text_(text), child_(nullptr), buttonType_(static_cast(ButtonType::CAPSULE)) + {} + JSButton(JSViewAbstract* child) : child_(child), buttonType_(static_cast(ButtonType::CAPSULE)) {} + ~JSButton() + { + LOGD("Destroy: JSButton"); + } + + void SetFontSize(double value); + void SetFontWeight(std::string value); + void SetTextColor(std::string value); + void SetType(int value); + + virtual RefPtr CreateSpecializedComponent() override; + virtual std::vector> CreateInteractableComponents() override; + RefPtr CreateTouchComponent(const RefPtr& wrapped); + +#ifdef USE_QUICKJS_ENGINE + virtual void MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc) override; + virtual void ReleaseRT(JSRuntime* rt) override; + virtual JSValue JsOnClick(JSContext* ctx, JSValueConst this_value, int32_t argc, JSValueConst* argv) override; +#endif +#ifdef USE_V8_ENGINE + void JsOnClick(const v8::FunctionCallbackInfo& args) override; +#endif + +public: +#ifdef USE_QUICKJS_ENGINE + static JSValue ConstructorCallback(JSContext* ctx, JSValueConst new_target, int argc, JSValueConst* argv); + static void QjsDestructor(JSRuntime* rt, JSButton* ptr); + static void QjsGcMark(JSRuntime* rt, JSValueConst val, JS_MarkFunc* markFunc); +#endif +#ifdef USE_V8_ENGINE + static void ConstructorCallback(const v8::FunctionCallbackInfo& args); +#endif + static void JSBind(BindingTarget globalObj); + +private: + std::string text_; + JSViewAbstract* child_ = nullptr; + TextStyle textStyle_; + int32_t buttonType_; + RefPtr onClickFunc_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_BUTTON_H diff --git a/frameworks/bridge/declarative_frontend/jsview/js_column.cpp b/frameworks/bridge/declarative_frontend/jsview/js_column.cpp new file mode 100644 index 00000000..e465ae34 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_column.cpp @@ -0,0 +1,111 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/declarative_frontend/jsview/js_column.h" + +#include "base/log/ace_trace.h" + +namespace OHOS::Ace::Framework { + +template<> +RefPtr JSFlex::ComponentForType( + FlexAlign mainAxisAlign, FlexAlign crossAxisAlign, const std::list>& children) +{ + auto columnComponent = AceType::MakeRefPtr(mainAxisAlign, crossAxisAlign, children); + if (columnComponent && GetIsDefWidth()) { + columnComponent->SetCrossAxisSize(CrossAxisSize::MAX); + } + return columnComponent; +} + +bool JSColumn::IsHorizontal() const +{ + return false; +} + +void JSColumn::Destroy(JSViewAbstract* parentCustomView) +{ + LOGD("JSColumn::Destroy start"); + JSContainerBase::Destroy(parentCustomView); + LOGD("JSColumn::Destroy end"); +} + +#ifdef USE_QUICKJS_ENGINE +// STATIC qjs_class_bindings +JSValue JSColumn::ConstructorCallback(JSContext* ctx, JSValueConst new_target, int argc, JSValueConst* argv) +{ + ACE_SCOPED_TRACE("JSColumn::ConstructorCallback"); + auto flex = [](std::list children, std::list jsChildren) { + return new JSColumn(children, jsChildren); + }; + return JSFlex::JsFlexConstructorInternal(ctx, new_target, argc, argv, flex); +} + +void JSColumn::QjsDestructor(JSRuntime* rt, JSColumn* view) +{ + LOGD("JSColumn(QjsDestructor) start"); + if (!view) + return; + view->ReleaseRT(rt); + delete view; + LOGD("JSColumn(QjsDestructor) end"); +} + +void JSColumn::QjsGcMark(JSRuntime* rt, JSValueConst val, JS_MarkFunc* markFunc) +{ + LOGD("JSColumn(QjsGcMark) start"); + JSColumn* view = Unwrap(val); + if (!view) + return; + + view->MarkGC(rt, markFunc); + LOGD("JSColumn(QjsGcMark) end"); +} +#endif // USE_QUICKJS_ENGINE + +void JSColumn::JSBind(BindingTarget globalObj) +{ + JSClass::Declare("Column"); + JSClass::Inherit(); + + MethodOptions opt = MethodOptions::RETURN_SELF; + JSClass::Method("fillParent", &JSFlex::SetFillParent, opt); + JSClass::Method("wrapContent", &JSFlex::SetWrapContent, opt); + JSClass::Method("justifyContent", &JSFlex::SetJustifyContent, opt); + JSClass::Method("alignItems", &JSFlex::SetAlignItems, opt); + JSClass::Method("wrap", &JSFlex::SetWrap, opt); + JSClass::Method("alignContent", &JSFlex::SetAlignContent, opt); + JSClass::CustomMethod("onTouch", &JSInteractableView::JsOnTouch); + JSClass::CustomMethod("onClick", &JSInteractableView::JsOnClick); +#ifdef USE_V8_ENGINE + JSClass::CustomMethod("onPan", &JSInteractableView::JsOnPan); +#endif + JSClass::Bind(globalObj, ConstructorCallback); +} + +#ifdef USE_V8_ENGINE +void JSColumn::ConstructorCallback(const v8::FunctionCallbackInfo& args) +{ + LOGD("ConstructorCallback"); + std::list children; + std::list>> jsChildren; + V8FlexConstructorInternal(args, children, jsChildren); + auto instance = V8Object::New(args.This(), children, jsChildren); + args.GetReturnValue().Set(instance->Get()); +} + +#endif + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/jsview/js_column.h b/frameworks/bridge/declarative_frontend/jsview/js_column.h new file mode 100644 index 00000000..ed94a865 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_column.h @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_COLUMN_H +#define FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_COLUMN_H + +#include "frameworks/bridge/declarative_frontend/jsview/js_flex.h" + +namespace OHOS::Ace::Framework { + +class JSColumn : public JSFlex { + DECLARE_ACE_TYPE(JSColumn, JSContainerBase); + +public: + JSColumn() = delete; +#ifdef USE_V8_ENGINE + JSColumn(const std::list& children, + std::list>> jsChildren) +#else + JSColumn(const std::list& children, std::list jsChildren) +#endif + : JSFlex(children, jsChildren) {}; + + ~JSColumn() + { + LOGD("Destroy: JSColumn"); + }; + + virtual void Destroy(JSViewAbstract* parentCustomView) override; + +protected: + bool IsHorizontal() const override; + +public: + static void JSBind(BindingTarget globalObj); +#ifdef USE_QUICKJS_ENGINE + static JSValue ConstructorCallback(JSContext* ctx, JSValueConst new_target, int argc, JSValueConst* argv); + static void QjsDestructor(JSRuntime* rt, JSColumn* ptr); + static void QjsGcMark(JSRuntime* rt, JSValueConst val, JS_MarkFunc* markFunc); +#elif USE_V8_ENGINE + static void ConstructorCallback(const v8::FunctionCallbackInfo& args); +#endif +}; + +} // namespace OHOS::Ace::Framework + +#endif // FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_COLUMN_H diff --git a/frameworks/bridge/declarative_frontend/jsview/js_container_base.cpp b/frameworks/bridge/declarative_frontend/jsview/js_container_base.cpp new file mode 100644 index 00000000..6bbaacbf --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_container_base.cpp @@ -0,0 +1,290 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/declarative_frontend/jsview/js_container_base.h" + +#include "frameworks/bridge/declarative_frontend/jsview/js_view.h" +#ifdef USE_V8_ENGINE +#include "frameworks/bridge/declarative_frontend/engine/v8/v8_utils.h" +#endif + +namespace OHOS::Ace::Framework { + +#ifdef USE_V8_ENGINE +JSContainerBase::JSContainerBase(const std::list& children, + std::list>> jsChildren) + : children_(children), jsChildren_(jsChildren) {}; +#endif + +#ifdef USE_QUICKJS_ENGINE +JSContainerBase::JSContainerBase(const std::list& children, std::list jsChildren) + : children_(children), jsChildren_(jsChildren) {}; +#endif + +void JSContainerBase::Destroy(JSViewAbstract* parentCustomView) +{ + LOGD("JSContainerBase::Destroy() start"); + + auto startIter = children_.begin(); + auto endIter = children_.end(); + auto startJsIter = jsChildren_.begin(); + + while (startIter != endIter) { + if (!(*startIter)->IsCustomView()) { + (*startIter)->Destroy(parentCustomView); + } +#ifdef USE_V8_ENGINE + (*startJsIter).Reset(); +#elif USE_QUICKJS_ENGINE + // Do nothing on the jsChildren here. That will be taken care of in releaseRT(); +#endif + ++startIter; + ++startJsIter; + } + LOGD("JSContainerBase::Destroy() end"); +} + +#ifdef USE_QUICKJS_ENGINE + +void JSContainerBase::MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc) +{ + LOGD("JSContainerBase => MarkGC: start"); + if (!jsChildren_.empty()) { + for (JSValue jsChild : jsChildren_) { + JSViewAbstract* child = static_cast(UnwrapAny(jsChild)); + if (!child->IsCustomView()) { + JS_MarkValue(rt, jsChild, markFunc); + } + } + } + LOGD("JSContainerBase => MarkGC: end"); +} + +void JSContainerBase::ReleaseRT(JSRuntime* rt) +{ + LOGD("JSContainerBase => release: start"); + if (!jsChildren_.empty()) { + LOGD("JSContainerBase => release children: start"); + for (JSValue jsChild : jsChildren_) { + JSViewAbstract* child = static_cast(UnwrapAny(jsChild)); + if (!child->IsCustomView()) { + JS_FreeValueRT(rt, jsChild); + } + } + LOGD("JSContainerBase => release children: end"); + } + LOGD("JSContainerBase => release: end"); +} + +std::pair, std::list> JSContainerBase::JsChildrenFromArgs( + JSContext* ctx, int argc, JSValueConst* argv) +{ + std::list children; + std::list jsChildren; + + for (int i = 0; i < argc; i++) { + JsChildrenFromValue(ctx, argv[i], children, jsChildren); + } + + return std::make_pair(std::move(children), std::move(jsChildren)); +} + +void JSContainerBase::JsChildrenFromValue( + JSContext* ctx, JSValueConst value, std::list& children, std::list& jsChildren) +{ + QJSContext::Scope scope(ctx); + + if (JS_IsFunction(ctx, value)) { + LOGW("JsFlexConstructorInternal -> Function argument. Processing..."); + JsChildrenFromFunction(ctx, value, children, jsChildren); + } else if (JS_IsArray(ctx, value)) { + LOGW("JsFlexConstructorInternal -> Array argument. Processing..."); + JsChildrenFromArray(ctx, value, children, jsChildren); + } else if (JS_IsObject(value)) { + LOGW("JsFlexConstructorInternal -> Object argument. Processing..."); + JSValue duplicate = JS_DupValue(ctx, value); + JsChildFromObject(ctx, duplicate, children, jsChildren); + } else { + LOGW("JsFlexConstructorInternal -> Unsupported child. Not an instance of View. Skipping."); + } +} + +void JSContainerBase::JsChildFromObject( + JSContext* ctx, JSValueConst& argObj, std::list& children, std::list& jsChildren) +{ + JSViewAbstract* child = static_cast(UnwrapAny(argObj)); + // Might be an empty object or unsupported. Check if JSViewAbstract opaque is attached + if (child) { + LOGD("JsFlexChildFromObject -> Add child"); + children.emplace_back(child); + jsChildren.emplace_back(argObj); + } else { + LOGW("JsFlexChildFromObject -> Unsupported child. Not an instance of View. Skipping."); + JS_FreeValue(ctx, argObj); + } +} + +void JSContainerBase::JsChildrenFromArray( + JSContext* ctx, JSValueConst& argArray, std::list& children, std::list& jsChildren) +{ + int32_t length = QjsUtils::JsGetArrayLength(ctx, argArray); + if (length < 0) { + LOGE("JsFlexChildrenFromArray -> Error retrieving array\'s length."); + return; + } + + for (int i = 0; i < length; i++) { + // JS_GetPropertyUint32 makes a copy of JSValue, but we cannot release it immediately because that would + // destroy the view. + JSValue element = JS_GetPropertyUint32(ctx, argArray, i); + + // Needs to be an object to potentially hold a view + if (JS_IsFunction(ctx, element)) { + JsChildrenFromFunction(ctx, element, children, jsChildren); + } else if (JS_IsArray(ctx, element)) { + // Nested array. Call self recursively + JsChildrenFromArray(ctx, element, children, jsChildren); + } else if (JS_IsObject(element)) { + JsChildFromObject(ctx, element, children, jsChildren); + } else { + // Unsupported child. Release immediately + LOGW("JsFlexChildrenFromArray -> Unsupported child. Not an instance of View. Skipping"); + JS_FreeValue(ctx, element); + } + } +} + +void JSContainerBase::JsChildrenFromFunction( + JSContext* ctx, JSValueConst& argObj, std::list& children, std::list& jsChildren) +{ + JSValue result = JS_Call(ctx, argObj, JS_UNDEFINED, 0, NULL); + + if (JS_IsException(result)) { + LOGE("JsFlexChildFromObject -> Error executing argument function"); + QjsUtils::JsStdDumpErrorAce(ctx); + JS_FreeValue(ctx, result); + } else if (JS_IsUndefined(result) || JS_IsNull(result)) { + LOGW("JsFlexChildFromObject -> Function does not return a view, or a list of views. Skipping..."); + JS_FreeValue(ctx, result); + } else if (JS_IsArray(ctx, result)) { + LOGW("JsFlexChildFromObject -> Function result is array"); + JsChildrenFromArray(ctx, result, children, jsChildren); + } else if (JS_IsObject(result)) { + LOGW("JsFlexChildFromObject -> Function result is object"); + JsChildFromObject(ctx, result, children, jsChildren); + } +} + +#endif + +#ifdef USE_V8_ENGINE + +void JSContainerBase::V8ChildrenFromArgs(const v8::FunctionCallbackInfo& args, + std::list& children, + std::list>>& jsChildren) +{ + LOGD("V8ChildrenFromArgs"); + auto isolate = args.GetIsolate(); + v8::HandleScope scp(isolate); + auto context = isolate->GetCurrentContext(); + if (context.IsEmpty()) { + LOGE("context is empty!"); + return; + } + + int argc = args.Length(); + // Process arguments + for (int i = 0; i < argc; i++) { + if (args[i]->IsFunction()) { + v8::Local v8Obj = args[i]->ToObject(context).ToLocalChecked(); + v8::Local v8Func = v8::Local::Cast(v8Obj); + V8ChildrenFromFunction(context, args.This(), v8Func, children, jsChildren); + } else if (args[i]->IsArray()) { + v8::Local v8Obj = args[i]->ToObject(context).ToLocalChecked(); + v8::Local v8Array = v8::Local::Cast(v8Obj); + V8ChildrenFromArray(context, args.This(), v8Array, children, jsChildren); + } else if (args[i]->IsObject()) { + V8ChildrenFromObject(context, args[i], children, jsChildren); + } else { + LOGW("V8ChildrenFromArgs -> Unsupported child. Skipping."); + continue; + } + } +} + +void JSContainerBase::V8ChildrenFromObject(v8::Local context, v8::Local v8Val, + std::list& children, + std::list>>& jsChildren) +{ + v8::Local obj = v8Val->ToObject(context).ToLocalChecked(); + JSViewAbstract* value = static_cast(obj->GetAlignedPointerFromInternalField(0)); + if (value) { + children.emplace_back(value); + jsChildren.emplace_back( + v8::Persistent>(v8::Isolate::GetCurrent(), obj)); + } +} + +void JSContainerBase::V8ChildrenFromArray(v8::Local context, v8::Local argsObject, + v8::Local v8Array, std::list& children, + std::list>>& jsChildren) +{ + int length = v8Array->Length(); + for (int i = 0; i < length; i++) { + v8::Local v8Val = v8Array->Get(context, i).ToLocalChecked(); + if (v8Val->IsFunction()) { + v8::Local v8Obj = v8Val->ToObject(context).ToLocalChecked(); + v8::Local v8Func = v8::Local::Cast(v8Obj); + V8ChildrenFromFunction(context, argsObject, v8Func, children, jsChildren); + } else if (v8Val->IsArray()) { + v8::Local innerArray = v8::Local::Cast(v8Val); + V8ChildrenFromArray(context, argsObject, innerArray, children, jsChildren); + } else if (v8Val->IsObject()) { + V8ChildrenFromObject(context, v8Val, children, jsChildren); + } + } +} + +void JSContainerBase::V8ChildrenFromFunction(v8::Local context, v8::Local argsObject, + v8::Local v8Func, std::list& children, + std::list>>& jsChildren) +{ + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + v8::Isolate::Scope isolateScope(isolate); + v8::HandleScope handleScope(isolate); + LOGD("V8 CALL: %s", V8Utils::ScopedString(v8Func).get()); + v8::TryCatch tryCatch(isolate); + v8::Local result; + bool success = v8Func->Call(context, argsObject, 0, nullptr).ToLocal(&result); + if (!success) { + LOGE("V8ChildrenFromFunction V8 CALL fail!"); + V8Utils::JsStdDumpErrorAce(isolate, &tryCatch); + return; + } + + if (result->IsArray()) { + v8::Local v8Obj = result->ToObject(context).ToLocalChecked(); + v8::Local v8Array = v8::Local::Cast(v8Obj); + V8ChildrenFromArray(context, argsObject, v8Array, children, jsChildren); + } else if (result->IsObject()) { + V8ChildrenFromObject(context, result, children, jsChildren); + } else { + LOGW("V8ChildrenFromFunction -> Unsupported child."); + } +} + +#endif + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/jsview/js_container_base.h b/frameworks/bridge/declarative_frontend/jsview/js_container_base.h new file mode 100644 index 00000000..2c95e60b --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_container_base.h @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_CONTAINER_BASE_H +#define FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_CONTAINER_BASE_H + +#include + +#include "frameworks/bridge/declarative_frontend/jsview/js_interactable_view.h" + +#ifdef USE_QUICKJS_ENGINE +#include "frameworks/bridge/js_frontend/engine/quickjs/qjs_utils.h" +#endif + +#include "frameworks/bridge/declarative_frontend/jsview/js_view_abstract.h" + +namespace OHOS::Ace::Framework { + +class JSContainerBase : public JSViewAbstract, public JSInteractableView { + DECLARE_ACE_TYPE(JSContainerBase, JSViewAbstract); +protected: +#ifdef USE_V8_ENGINE + JSContainerBase(const std::list& children, + std::list>> jsChildren); +#endif + +#ifdef USE_QUICKJS_ENGINE + JSContainerBase(const std::list& children, std::list jsChildren); +#endif + ~JSContainerBase() = default; + virtual void Destroy(JSViewAbstract* parentCustomView) override; + +protected: +#ifdef USE_QUICKJS_ENGINE + void MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc) override; + void ReleaseRT(JSRuntime* rt) override; + static std::pair, std::list> JsChildrenFromArgs( + JSContext* ctx, int argc, JSValueConst* argv); + static void JsChildrenFromValue( + JSContext* ctx, JSValueConst value, std::list& children, std::list& jsChildren); + static void JsChildFromObject( + JSContext* ctx, JSValueConst& argObj, std::list& children, std::list& jsChildren); + static void JsChildrenFromArray( + JSContext* ctx, JSValueConst& argArray, std::list& children, std::list& jsChildren); + static void JsChildrenFromFunction( + JSContext* ctx, JSValueConst& argObj, std::list& children, std::list& jsChildren); +#endif + +#ifdef USE_V8_ENGINE + static void V8ChildrenFromArgs(const v8::FunctionCallbackInfo& args, + std::list& children, + std::list>>& jsChildren); + static void V8ChildrenFromObject(v8::Local context, v8::Local v8Val, + std::list& children, + std::list>>& jsChildren); + static void V8ChildrenFromArray(v8::Local context, v8::Local argsObject, + v8::Local v8Array, std::list& children, + std::list>>& jsChildren); + static void V8ChildrenFromFunction(v8::Local context, v8::Local argsObject, + v8::Local v8Func, std::list& children, + std::list>>& jsChildren); +#endif + +protected: + std::list children_; +#ifdef USE_QUICKJS_ENGINE + std::list jsChildren_; +#endif +#ifdef USE_V8_ENGINE + std::list>> jsChildren_; +#endif +}; + +} // namespace OHOS::Ace::Framework + +#endif // FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_CONTAINER_BASE_H diff --git a/frameworks/bridge/declarative_frontend/jsview/js_customview_base.cpp b/frameworks/bridge/declarative_frontend/jsview/js_customview_base.cpp new file mode 100644 index 00000000..c435b187 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_customview_base.cpp @@ -0,0 +1,135 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/declarative_frontend/jsview/js_customview_base.h" + +#include "base/log/ace_trace.h" + +namespace OHOS::Ace::Framework { + +JSCustomViewBase::JSCustomViewBase() +{ + LOGD("JSCustomViewBase constructor"); +}; + +JSCustomViewBase::~JSCustomViewBase() +{ + LOGD("Destroy JSCustomViewBase"); +}; + +void JSCustomViewBase::Destroy(JSViewAbstract* parentCustomView) +{ + LOGD("JSCustomViewBase::Destroy start"); + for (auto child : customViewChildren_) { + child.second->Destroy(this); + } +#ifdef USE_V8_ENGINE + for (auto child : jsCustomViewChildren_) { + child.second.Reset(); + } +#endif + JSViewAbstract::Destroy(parentCustomView); + LOGD("JSCustomViewBase::Destroy end"); +} + +void JSCustomViewBase::CleanUpAbandonedChild() +{ + auto startIter = customViewChildren_.begin(); + auto endIter = customViewChildren_.end(); + auto startJsIter = jsCustomViewChildren_.begin(); + std::vector removedViewIds; + while (startIter != endIter) { + auto found = lastAccessedViewIds_.find(startIter->first); + if (found == lastAccessedViewIds_.end()) { + LOGD(" found abandoned view with id %s", startIter->first.c_str()); + removedViewIds.emplace_back(startIter->first); + startIter->second->Destroy(this); +#ifdef USE_V8_ENGINE + startJsIter->second.Reset(); +#endif +#ifdef USE_QUICKJS_ENGINE + JS_FreeValue(ctx_, startJsIter->second); +#endif + } + ++startIter; + ++startJsIter; + } + + for (auto& viewId : removedViewIds) { + customViewChildren_.erase(viewId); + jsCustomViewChildren_.erase(viewId); + } + + lastAccessedViewIds_.clear(); +} + +bool JSCustomViewBase::FindChildById(const std::string& viewId) +{ + return jsCustomViewChildren_.find(ProcessViewId(viewId)) != jsCustomViewChildren_.end(); +} + +#ifdef USE_V8_ENGINE +std::pair> JSCustomViewBase::GetChildById(const std::string& viewId) +{ + auto id = ProcessViewId(viewId); + auto found = jsCustomViewChildren_.find(id); + if (found != jsCustomViewChildren_.end()) { + ChildAccessedById(id); + return std::make_pair(customViewChildren_.find(id)->second, found->second.Get(v8::Isolate::GetCurrent())); + } + return std::make_pair(nullptr, v8::Object::New(v8::Isolate::GetCurrent())); +} +#elif USE_QUICKJS_ENGINE +std::pair JSCustomViewBase::GetChildById(const std::string& viewId) +{ + auto id = ProcessViewId(viewId); + auto found = jsCustomViewChildren_.find(id); + if (found != jsCustomViewChildren_.end()) { + ChildAccessedById(id); + return std::make_pair(customViewChildren_.find(id)->second, found->second); + } + return std::make_pair(nullptr, JS_UNDEFINED); +} +#endif + +#ifdef USE_V8_ENGINE +void JSCustomViewBase::AddChildById(const std::string& viewId, JSViewAbstract* view, v8::Local obj) +{ + auto id = ProcessViewId(viewId); + customViewChildren_.emplace(id, view); + jsCustomViewChildren_.emplace(id, V8Handle(v8::Isolate::GetCurrent(), obj)); + ChildAccessedById(id); +} +#elif USE_QUICKJS_ENGINE +void JSCustomViewBase::AddChildById(const std::string& viewId, JSViewAbstract* view, JSValue obj) +{ + auto id = ProcessViewId(viewId); + customViewChildren_.emplace(id, view); + jsCustomViewChildren_.emplace(id, obj); + ChildAccessedById(id); +} +#endif + +void JSCustomViewBase::ChildAccessedById(const std::string& viewId) +{ + lastAccessedViewIds_.emplace(viewId); +} + +std::string JSCustomViewBase::ProcessViewId(const std::string& viewId) +{ + return forEachKey_.empty() ? viewId : forEachKey_ + "_" + viewId; +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/jsview/js_customview_base.h b/frameworks/bridge/declarative_frontend/jsview/js_customview_base.h new file mode 100644 index 00000000..d8b61851 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_customview_base.h @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_CUSTOMVIEWBASE_H +#define FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_CUSTOMVIEWBASE_H + +#include + +#include "frameworks/bridge/declarative_frontend/jsview/js_view_abstract.h" + +namespace OHOS::Ace::Framework { + +#ifdef USE_V8_ENGINE +using V8Handle = v8::Persistent>; +#endif + +// JSView has two implmentation for qjs and v8 +// this base is used to keep the common implementation +class JSCustomViewBase : public JSViewAbstract { + DECLARE_ACE_TYPE(JSCustomViewBase, JSViewAbstract); + +public: + JSCustomViewBase(); + virtual ~JSCustomViewBase(); + + virtual void Destroy(JSViewAbstract* parentCustomView) override; + + virtual bool IsCustomView() override + { + return true; + } + + /** + * During render function execution, the child customview with same id will + * be recycled if they exist already in our child map. The ones which are not + * recycled needs to be cleaned. So After render function execution, clean the + * abandoned child customview. + */ + void CleanUpAbandonedChild(); + + /** + * Find if the customview child with same id exist + */ + bool FindChildById(const std::string& viewId); + +#ifdef USE_V8_ENGINE + /** + * Retries the customview child for recycling + * always use FindChildById to be certain before calling this method + */ + std::pair> GetChildById(const std::string& viewId); + /** + * New CustomView child will be added to the map. + * and it can be reterieved for recycling in next render function + * In next render call if this child is not recycled, it will be destroyed. + */ + void AddChildById(const std::string& viewId, JSViewAbstract* view, v8::Local obj); +#elif USE_QUICKJS_ENGINE + /** + * Retries the customview child for recycling + * always use FindChildById to be certain before calling this method + */ + std::pair GetChildById(const std::string& viewId); + /** + * New CustomView child will be added to the map. + * and it can be reterieved for recycling in next render function + * In next render call if this child is not recycled, it will be destroyed. + */ + void AddChildById(const std::string& viewId, JSViewAbstract* view, JSValue obj); +#endif + + /** + * This method should be called before executing view mapper function of a foreach + * child. + */ + void StartHandlingForEach(const std::string& key) + { + forEachKey_.append(key); + } + + /** + * This method should be called after executing view mapper function of a foreach + * child. + */ + void EndHandlingForEachKeys() + { + forEachKey_.clear(); + } +#ifdef USE_QUICKJS_ENGINE +protected: + JSContext* ctx_; +#endif + +private: + /** + * Takes care of the viewId wrt to foreach + */ + std::string ProcessViewId(const std::string& viewid); + /** + * creates a set of valid viewids on a renderfuntion excution + * its cleared after cleaning up the abandoned child. + */ + void ChildAccessedById(const std::string& viewId); + + // this holds the foreach identitymapperkeys + generatedviewid + // it will be reset on EndHandlingForEachKeys + std::string forEachKey_; + + // hold handle to the native and javascript object to keep them alive + // until they are abandoned + std::unordered_map customViewChildren_; +#ifdef USE_V8_ENGINE + std::unordered_map jsCustomViewChildren_; +#elif USE_QUICKJS_ENGINE + std::unordered_map jsCustomViewChildren_; +#endif + // a set of valid viewids on a renderfuntion excution + // its cleared after cleaning up the abandoned child. + std::unordered_set lastAccessedViewIds_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_CUSTOMVIEWBASE_H diff --git a/frameworks/bridge/declarative_frontend/jsview/js_divider.cpp b/frameworks/bridge/declarative_frontend/jsview/js_divider.cpp new file mode 100644 index 00000000..6fffeeb4 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_divider.cpp @@ -0,0 +1,126 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/declarative_frontend/jsview/js_divider.h" + +#include "core/components/box/box_component.h" + +namespace OHOS::Ace::Framework { + +RefPtr JSDivider::CreateSpecializedComponent() +{ + auto dividerComponent = AceType::MakeRefPtr(); + dividerComponent->SetVertical(isVertical_); + dividerComponent->SetStrokeWidth(strokeWidth_); + dividerComponent->SetLineCap(lineCap_); + dividerComponent->SetDividerColor(dividerColor_); + return std::move(dividerComponent); +} + +void JSDivider::SetVertical(bool isVertical) +{ + isVertical_ = isVertical; + + if (!boxComponent_) { + boxComponent_ = AceType::MakeRefPtr(); + } + + if (isVertical_) { + boxComponent_->SetFlex(BoxFlex::FLEX_Y); + } else { + boxComponent_->SetFlex(BoxFlex::FLEX_X); + } +} + +void JSDivider::SetLineCap(int lineCap) +{ + if (static_cast(LineCap::SQUARE) == lineCap) { + lineCap_ = LineCap::SQUARE; + } else if (static_cast(LineCap::ROUND) == lineCap) { + lineCap_ = LineCap::ROUND; + } else { + // default linecap of divider + lineCap_ = LineCap::BUTT; + } +} + +void JSDivider::SetDividerColor(const std::string& color) +{ + dividerColor_ = Color::FromString(color); +} + +void JSDivider::SetStrokeWidth(const std::string& width) +{ + strokeWidth_ = StringUtils::StringToDimension(width, true); +} + +#ifdef USE_QUICKJS_ENGINE +void JSDivider::MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc) +{ + LOGD("JSDivider => markGC: Mark value for GC start"); + JSInteractableView::MarkGC(rt, markFunc); + LOGD("JSDivider => markGC: Mark value for GC end"); +} + +void JSDivider::ReleaseRT(JSRuntime* rt) +{ + LOGD("JSDivider => release start"); + JSInteractableView::ReleaseRT(rt); + LOGD("JSDivider => release divider"); + LOGD("JSDivider => release end"); +} + +void JSDivider::QjsDestructor(JSRuntime* rt, JSDivider* view) +{ + if (!view) { + return; + } + + view->ReleaseRT(rt); + delete view; + LOGD("JSDivider(qjs_destructor) end"); +} + +void JSDivider::QjsGcMark(JSRuntime* rt, JSValueConst val, JS_MarkFunc* markFunc) +{ + LOGD("JSDivider(qjs_gc_mark) start"); + + JSDivider* view = Unwrap(val); + if (!view) { + return; + } + + view->MarkGC(rt, markFunc); + LOGD("JSDivider(qjs_gc_mark) end"); +} + +#endif + +void JSDivider::JSBind(BindingTarget globalObj) +{ + JSClass::Declare("Divider"); + JSClass::Inherit(); + + MethodOptions opt = MethodOptions::RETURN_SELF; + JSClass::Method("color", &JSDivider::SetDividerColor, opt); + JSClass::Method("vertical", &JSDivider::SetVertical, opt); + JSClass::Method("strokeWidth", &JSDivider::SetStrokeWidth, opt); + JSClass::Method("lineCap", &JSDivider::SetLineCap, opt); + JSClass::CustomMethod("onTouch", &JSInteractableView::JsOnTouch); + JSClass::CustomMethod("onClick", &JSInteractableView::JsOnClick); + JSClass::Bind<>(globalObj); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/jsview/js_divider.h b/frameworks/bridge/declarative_frontend/jsview/js_divider.h new file mode 100644 index 00000000..3ab47972 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_divider.h @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_DIVIDER_H +#define FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_DIVIDER_H + +#include "base/geometry/dimension.h" +#include "core/components/common/properties/color.h" +#include "core/components/divider/divider_component.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_interactable_view.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_view_abstract.h" + +namespace OHOS::Ace::Framework { + +class JSDivider : public JSViewAbstract, public JSInteractableView { + DECLARE_ACE_TYPE(JSDivider, JSViewAbstract); + +public: + JSDivider() = default; + ~JSDivider() override = default; + void SetDividerColor(const std::string& color); + void SetVertical(bool isVertical); + void SetLineCap(int lineCap); + void SetStrokeWidth(const std::string& width); + +public: + RefPtr CreateSpecializedComponent() override; +#ifdef USE_QUICKJS_ENGINE + virtual void MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc) override; + virtual void ReleaseRT(JSRuntime* rt) override; + + static void QjsDestructor(JSRuntime* rt, JSDivider* ptr); + static void QjsGcMark(JSRuntime* rt, JSValueConst val, JS_MarkFunc* markFunc); +#endif + + static void JSBind(BindingTarget globalObj); + +private: + LineCap lineCap_ = LineCap::BUTT; + Dimension strokeWidth_ = Dimension(1.0); + bool isVertical_ = false; + Color dividerColor_ = Color(0x51000000); +}; + +} // namespace OHOS::Ace::Framework + +#endif // FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_DIVIDER_H diff --git a/frameworks/bridge/declarative_frontend/jsview/js_flex.h b/frameworks/bridge/declarative_frontend/jsview/js_flex.h new file mode 100644 index 00000000..c7e82884 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_flex.h @@ -0,0 +1,126 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_FLEX_H +#define FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_FLEX_H + +#include + +#include "base/log/ace_trace.h" +#include "core/components/common/layout/constants.h" +#include "core/components/flex/flex_component.h" +#include "core/components/foreach/foreach_component.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_container_base.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_view_abstract.h" + +namespace OHOS::Ace::Framework { + +template +class JSFlex : public JSContainerBase { +protected: + // These need to be exposed in style setters + FlexAlign mainAxisAlign_ { FlexAlign::FLEX_START }; + FlexAlign crossAxisAlign_ { FlexAlign::FLEX_START }; + MainAxisSize mainAxisSize_ { MainAxisSize::MAX }; + WrapAlignment alignContent_ = { WrapAlignment::START }; + bool wrap_ = false; + + // Template method for creating component + virtual RefPtr ComponentForType( + FlexAlign mainAxisAlign, FlexAlign crossAxisAlign, const std::list>& children); + + virtual bool IsHorizontal() const = 0; + +public: + JSFlex() = delete; +#ifdef USE_V8_ENGINE + JSFlex(const std::list& children, + std::list>> jsChildren); +#endif + +#ifdef USE_QUICKJS_ENGINE + JSFlex(const std::list& children, std::list jsChildren); +#endif + + ~JSFlex(); + + RefPtr CreateSpecializedComponent() override; + std::vector> CreateInteractableComponents() override; + + void SetFillParent(); + void SetWrapContent(); + + /** + * JS JustifyContent function definition: + * Main axis alignment format of the current row of the flex container. The options are as follows: + * flexstart: The project is at the beginning of the container. + * flexend: The project is at the end of the container. + * center: The project is located in the center of the container. + * spacebetween: The project is located in a container with a blank space between lines. + * spacearound: The item is located in a container with blank space before, between, and after each line. + */ + void SetJustifyContent(int value); + + /** + * JS AlignItems function definition: + * Alignment format of the cross axis of the current row of the flex container. The options are as follows: + * stretch: The elastic element is stretched to the same height or width as the container in the cross axis + * direction. + * flexstart: The element is aligned to the start point of the cross axis. + * flexend: The element is aligned to the end of the cross axis. + * center: The element is centered on the cross axis. + */ + void SetAlignItems(int value); + + void SetAlignContent(int value); + + void SetWrap(bool value); + +#ifdef USE_QUICKJS_ENGINE + void MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc) override; + void ReleaseRT(JSRuntime* rt) override; + template + static JSValue JsFlexConstructorInternal(JSContext* ctx, JSValueConst new_target, int argc, JSValueConst* argv, + std::function, std::list)> flex); +#elif USE_V8_ENGINE + static void V8FlexConstructorInternal(const v8::FunctionCallbackInfo& args, + std::list& children, + std::list>>& jsChildren); +#endif + +private: +#ifdef USE_QUICKJS_ENGINE + static void JsFlexChildFromObject( + JSContext* ctx, JSValueConst& argObj, std::list& children, std::list& jsChildren); + static void JsFlexChildrenFromArray( + JSContext* ctx, JSValueConst& argArray, std::list& children, std::list& jsChildren); + static void JsFlexChildrenFromFunction( + JSContext* ctx, JSValueConst& argArray, std::list& children, std::list& jsChildren); +#endif + +#ifdef USE_V8_ENGINE + static void V8FlexChildrenFromObject( + v8::Local context, v8::Local v8Val, std::list& children); + static void V8FlexChildrenFromArray( + v8::Local context, v8::Local v8Array, std::list& children); +#endif + +}; // JSFlex class + +} // namespace OHOS::Ace::Framework + +#include "frameworks/bridge/declarative_frontend/jsview/js_flex.inl" + +#endif // FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_FLEX_H diff --git a/frameworks/bridge/declarative_frontend/jsview/js_flex.inl b/frameworks/bridge/declarative_frontend/jsview/js_flex.inl new file mode 100644 index 00000000..2e5ac67c --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_flex.inl @@ -0,0 +1,242 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/foreach/foreach_component.h" +#include "core/components/wrap/wrap_component.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_flex.h" +#ifdef USE_QUICKJS_ENGINE +#include "frameworks/bridge/js_frontend/engine/quickjs/qjs_utils.h" +#endif + +namespace OHOS::Ace::Framework { + +namespace { + +WrapAlignment FlexAlignToWrapAlign(FlexAlign flexAlign) +{ + switch (flexAlign) { + case FlexAlign::AUTO: + case FlexAlign::FLEX_START: + return WrapAlignment::START; + case FlexAlign::CENTER: + return WrapAlignment::CENTER; + case FlexAlign::FLEX_END: + return WrapAlignment::END; + case FlexAlign::STRETCH: + return WrapAlignment::STRETCH; + case FlexAlign::BASELINE: + return WrapAlignment::END; // TODO: No actual mapping + case FlexAlign::SPACE_BETWEEN: + return WrapAlignment::SPACE_BETWEEN; + case FlexAlign::SPACE_AROUND: + return WrapAlignment::SPACE_AROUND; + default: + return WrapAlignment::CENTER; + }; + return WrapAlignment::CENTER; +} + +RefPtr CreateWrapComponent(std::list> componentChildren, + WrapDirection direction, double spacing, double contentSpacing, FlexAlign const& mainAlignment, + FlexAlign const& crossAlignment, WrapAlignment const& alignContent, bool dialogStretch) +{ + LOGD("Create component: Wrap"); + + RefPtr component = + AceType::MakeRefPtr(spacing, contentSpacing, componentChildren); + + component->SetDirection(direction); + component->SetMainAlignment(FlexAlignToWrapAlign(mainAlignment)); + component->SetCrossAlignment(FlexAlignToWrapAlign(crossAlignment)); + component->SetAlignment(alignContent); + component->SetDialogStretch(dialogStretch); + + return component; +} + +} // anonymous namespace + +#ifdef USE_V8_ENGINE +template +JSFlex::JSFlex(const std::list& children, + std::list>> jsChildren) +#else +template +JSFlex::JSFlex(const std::list& children, std::list jsChildren) +#endif + : JSContainerBase(children, jsChildren), mainAxisAlign_(FlexAlign::FLEX_START), + crossAxisAlign_(FlexAlign::FLEX_START), mainAxisSize_(MainAxisSize::MAX) + +{ + LOGD("Flex(children: [%lu])", children_.size()); +}; + +template +JSFlex::~JSFlex() +{ + LOGD("Destroy: JSFlex"); +}; + +template +RefPtr JSFlex::CreateSpecializedComponent() +{ + LOGD("Create components for %d children of Flex", (int)children_.size()); + std::list> componentChildren; + + for (auto jsViewChild : children_) { + auto component = jsViewChild->CreateComponent(); + if (AceType::TypeName() == AceType::TypeName(component)) { + auto children = AceType::DynamicCast(component)->GetChildren(); + for (auto childComponent : children) { + componentChildren.emplace_back(childComponent); + } + } else { + componentChildren.emplace_back(component); + } + } + + double spacing = 0.0; + double contentSpacing = 0.0; + bool dialogStretch = false; + + RefPtr component; + if (wrap_) { + WrapDirection direction = IsHorizontal() ? WrapDirection::HORIZONTAL : WrapDirection::VERTICAL; + + component = CreateWrapComponent(componentChildren, direction, spacing, contentSpacing, mainAxisAlign_, + crossAxisAlign_, alignContent_, dialogStretch); + } else { + LOGD("Create component: Flex"); + auto flexComponent = ComponentForType(mainAxisAlign_, crossAxisAlign_, componentChildren); + flexComponent->SetMainAxisSize(mainAxisSize_); + component = flexComponent; + } + + return component; +} + +template +std::vector> JSFlex::CreateInteractableComponents() +{ + return JSInteractableView::CreateComponents(); +} + +template +void JSFlex::SetFillParent() +{ + mainAxisSize_ = MainAxisSize::MAX; +} + +template +void JSFlex::SetWrapContent() +{ + mainAxisSize_ = MainAxisSize::MIN; +} + +template +void JSFlex::SetJustifyContent(int value) +{ + if ((value == static_cast(FlexAlign::FLEX_START)) || (value == static_cast(FlexAlign::FLEX_END)) || + (value == static_cast(FlexAlign::CENTER)) || (value == static_cast(FlexAlign::SPACE_AROUND)) || + (value == static_cast(FlexAlign::SPACE_BETWEEN))) { + mainAxisAlign_ = (FlexAlign)value; + } else { + // FIXME: we have a design issue here, setters return void, can not signal error to JS + LOGE("invalid value for justifyContent"); + } +} + +template +void JSFlex::SetAlignItems(int value) +{ + if ((value == static_cast(FlexAlign::FLEX_START)) || (value == static_cast(FlexAlign::FLEX_END)) || + (value == static_cast(FlexAlign::CENTER)) || (value == static_cast(FlexAlign::STRETCH))) { + crossAxisAlign_ = (FlexAlign)value; + } else { + // FIXME: we have a design issue here, setters return void, can not signal error to JS + LOGE("invalid value for justifyContent"); + } +} + +template +void JSFlex::SetAlignContent(int value) +{ + if ((value == static_cast(WrapAlignment::START)) || (value == static_cast(WrapAlignment::CENTER)) || + (value == static_cast(WrapAlignment::END)) || (value == static_cast(WrapAlignment::SPACE_AROUND)) || + (value == static_cast(WrapAlignment::SPACE_BETWEEN)) || + (value == static_cast(WrapAlignment::STRETCH))) { + alignContent_ = (WrapAlignment)value; + } else { + // FIXME: we have a design issue here, setters return void, can not signal error to JS + LOGE("invalid value for justifyContent"); + } +} + +template +void JSFlex::SetWrap(bool value) +{ + wrap_ = value; +} + +#ifdef USE_QUICKJS_ENGINE + +template +void JSFlex::MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc) +{ + LOGD("JSFlex => MarkGC: start"); + JSContainerBase::MarkGC(rt, markFunc); + LOGD("JSFlex => MarkGC: end"); +} + +template +void JSFlex::ReleaseRT(JSRuntime* rt) +{ + LOGD("JSFlex => release: start"); + JSContainerBase::ReleaseRT(rt); + LOGD("JSFlex => release: end"); +} + +template +template +JSValue JSFlex::JsFlexConstructorInternal(JSContext* ctx, JSValueConst new_target, int argc, JSValueConst* argv, + std::function, std::list)> flex) +{ + ACE_SCOPED_TRACE("JSFlex::JsFlexConstructorInternal"); + QJSContext::Scope scope(ctx); + + U* value = nullptr; + + auto [children, jsChildren] = JsChildrenFromArgs(ctx, argc, argv); + + LOGD("JsFlexConstructorInternal -> Children created"); + + value = flex(children, jsChildren); + return Wrap(new_target, value); +} +#endif // USE_QUICKJS_ENGINE + +#ifdef USE_V8_ENGINE + +template +void JSFlex::V8FlexConstructorInternal(const v8::FunctionCallbackInfo& args, + std::list& children, + std::list>>& jsChildren) +{ + LOGD("V8FlexConstructorInternal"); + V8ChildrenFromArgs(args, children, jsChildren); +} +#endif + +}; // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/jsview/js_foreach.cpp b/frameworks/bridge/declarative_frontend/jsview/js_foreach.cpp new file mode 100644 index 00000000..34920db2 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_foreach.cpp @@ -0,0 +1,285 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/declarative_frontend/jsview/js_foreach.h" + +#include "frameworks/bridge/declarative_frontend/jsview/js_customview_base.h" +#ifdef USE_QUICKJS_ENGINE +#include "frameworks/bridge/js_frontend/engine/quickjs/qjs_utils.h" +#endif + +#include "base/log/ace_trace.h" +#include "core/components/foreach/foreach_component.h" +#include "core/pipeline/base/composed_element.h" + +namespace OHOS::Ace::Framework { + +#ifdef USE_QUICKJS_ENGINE +JSForEach::JSForEach(QJSForEachFunction* jsForEachFunction) +#else +JSForEach::JSForEach(V8ForEachFunction* jsForEachFunction) +#endif + : jsForEachFunction_(jsForEachFunction) +{ + LOGD("ForEach constructor"); +}; + +JSForEach::~JSForEach() +{ + if (jsForEachFunction_) { + delete jsForEachFunction_; + } + LOGD("Destroy: JSForEach"); +}; + +RefPtr JSForEach::CreateSpecializedComponent() +{ + LOGD("Create component: JSForEach"); + + std::list> componentChildren; + + std::vector> items; + std::vector keys = jsForEachFunction_->executeIdentityMapper(); + + for (size_t i = 0; i < keys.size(); i++) { + keys[i].insert(0, "_"); + keys[i].insert(0, transpilerGeneratedViewId_); + parentCustomView_->StartHandlingForEach(keys[i]); + std::vector views = jsForEachFunction_->executeBuilderForIndex(i); + parentCustomView_->EndHandlingForEachKeys(); + for (auto view : views) { + items.emplace_back(std::make_tuple(keys[i], view)); + } + } + + itemsCount_ = items.size(); + if (items.size() > 0) { + firstItemKey_ = HasUniqueKey() ? GetUniqueKey().append(std::get<0>(items[0])) : std::get<0>(items[0]); + } + + bool shouldSetElementFunction = true; + for (auto const& item : items) { + std::string key = HasUniqueKey() ? GetUniqueKey().append(std::get<0>(item)) : std::get<0>(item); + JSViewAbstract* view = std::get<1>(item); + + auto composedComponent = + AceType::MakeRefPtr(key, "ForEachItemView", view->CreateComponent()); + + if (shouldSetElementFunction) { + // Get hold of the first item's element. It is used in the markNeedUpdate + // to get the the parentElement_ (jsflex element). + // We can't get parent here because the item is not yet inflated. + auto elementFunction = [&](OHOS::Ace::ComposedElement* element) { + if (!element_) { + element_ = element; + } + }; + composedComponent->SetElementFunction(std::move(elementFunction)); + shouldSetElementFunction = false; + } + + componentChildren.emplace_back(composedComponent); + } + + // create component, return new something, need to set proper ID + auto forEachComponent = AceType::MakeRefPtr(componentChildren); + return std::move(forEachComponent); +} + +/** + * marks the JSForEach's child's needing update / rerender + */ +void JSForEach::MarkNeedUpdate() +{ + if (needsUpdate_) + return; + + needsUpdate_ = true; + // This function will be called whenever the ForEach's array is a observableobject + // and the array is mutated(for ex new item added/removed or items order changed). + // This function will update the foreach item's elements in the parent element tree + // i.e insert or remove or reorder the foreach items element in the parent. + // Please remember that ForEach items element are always ComposedElement. + + // JSForEach doesnt know abt ctx, so moving the PostTask implementation + // to for_each_function + jsForEachFunction_->PostTask([&] { + needsUpdate_ = false; + + if (!parentElement_) { + if (!element_) + return; + auto parent = element_->GetElementParent().Upgrade(); + parentElement_ = AceType::RawPtr(parent); + } + + // take hold of the items count and first item key before current update. + int32_t olditemsCount = itemsCount_; + std::string oldFirstItemkey = firstItemKey_; + + // execute the identifier function on the updated array to get the updated + // new items identifier vector(the identifiers are uniquekeys). We will + // use this to compare with last items elments in the parent + std::vector newItems = jsForEachFunction_->executeIdentityMapper(); + std::for_each(newItems.begin(), newItems.end(), [&](std::string& item) { + if (HasUniqueKey()) + item = GetUniqueKey().append(item); + }); + + // updated items count and first item key + firstItemKey_ = newItems[0]; + itemsCount_ = newItems.size(); + + // on the parent element call UpdateComposedChildrenForEach + // This will internally compare and update the foreach's new item elements + // and reorder the existing foreach item elements. + auto groupElement = AceType::DynamicCast(parentElement_); + groupElement->UpdateComposedChildrenForEach( + oldFirstItemkey, olditemsCount, newItems, [&](int32_t index) -> RefPtr { + auto view = jsForEachFunction_->executeBuilderForIndex(index); + + auto composedComponent = AceType::MakeRefPtr( + newItems[index], "ForEachItemView", view[0]->CreateComponent()); + + return composedComponent; + }); + }); +} + +void JSForEach::Destroy(JSViewAbstract* parentCustomView) +{ + LOGD("JSForEach::Destroy start"); + if (jsForEachFunction_) { + jsForEachFunction_->Destroy(parentCustomView); + delete jsForEachFunction_; + jsForEachFunction_ = nullptr; + } + JSViewAbstract::Destroy(parentCustomView); + LOGD("JSForEach::Destroy end"); +} + +#ifdef USE_QUICKJS_ENGINE +void JSForEach::MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc) +{ + LOGD("JSForEach => MarkGC: start"); + if (jsForEachFunction_) { + jsForEachFunction_->MarkGC(rt, markFunc); + } + LOGD("JSForEach => MarkGC: end"); +} + +void JSForEach::ReleaseRT(JSRuntime* rt) +{ + LOGD("JSForEach => release: start"); + if (jsForEachFunction_) { + jsForEachFunction_->ReleaseRT(rt); + } + LOGD("JSForEach => release: end"); +} + +JSValue JSForEach::ConstructorCallback(JSContext* ctx, JSValueConst new_target, int argc, JSValueConst* argv) +{ + QJSContext::Scope scope(ctx); + + if (argc < 4 || !JS_IsArray(ctx, argv[2]) || !JS_IsFunction(ctx, argv[3]) || + (!JS_IsString(argv[0]) && !JS_IsNumber(argv[0])) || JS_IsUndefined(argv[1]) || !JS_IsObject(argv[1])) { + LOGE("qjs_forEach_constructor Invalid arguments for ForEach"); + return JS_NULL; + } + + JSValue jsIdentityMapperFunc = JS_NULL; + if (argc > 4 && JS_IsFunction(ctx, argv[4])) { + jsIdentityMapperFunc = argv[4]; + } + + QJSForEachFunction* jsForEachFunction = new QJSForEachFunction(ctx, argv[2], jsIdentityMapperFunc, argv[3]); + + JSForEach* view = new JSForEach(jsForEachFunction); + + ScopedString viewId(argv[0]); + JSCustomViewBase* parentView = static_cast(UnwrapAny(argv[1])); + view->SetParentCustomView(parentView); + view->SetTranspilerGeneratedViewId(viewId); + + return Wrap(new_target, view); +} + +void JSForEach::QjsDestructor(JSRuntime* rt, JSForEach* view) +{ + LOGD("JSForEach(QjsDestructor) start"); + if (!view) + return; + + view->ReleaseRT(rt); + delete view; + LOGD("JSForEach(QjsDestructor) end"); +} + +void JSForEach::QjsGcMark(JSRuntime* rt, JSValueConst val, JS_MarkFunc* markFunc) +{ + LOGD("JSForEach(QjsGcMark) start"); + + JSForEach* view = Unwrap(val); + if (!view) + return; + + view->MarkGC(rt, markFunc); + LOGD("JSForEach(QjsGcMark) end"); +} +#endif + +#ifdef USE_V8_ENGINE +void JSForEach::ConstructorCallback(const v8::FunctionCallbackInfo& info) +{ + auto isolate = info.GetIsolate(); + v8::HandleScope scp(isolate); + auto context = isolate->GetCurrentContext(); + + if (!info[2]->IsObject() || !info[3]->IsFunction() || (!info[0]->IsNumber() && !info[0]->IsString()) || + info[1]->IsUndefined() || !info[1]->IsObject()) { + LOGE("v8_foreach_constructor invalid arguments for ForEach"); + info.GetReturnValue().Set(info.This()); + return; + } + + V8Utils::ScopedString viewId(info[0]); + v8::Local jsArray = v8::Local::Cast(info[2]); + v8::Local jsIdentityMapperFunc; + if (info.Length() > 4 && info[4]->IsFunction()) { + jsIdentityMapperFunc = v8::Local::Cast(info[4]); + } + v8::Local jsViewMapperFunc = v8::Local::Cast(info[3]); + V8ForEachFunction* jsForEachFunction = new V8ForEachFunction(jsArray, jsIdentityMapperFunc, jsViewMapperFunc); + + auto instance = V8Object::New(info.This(), jsForEachFunction); + info.GetReturnValue().Set(instance->Get()); + + v8::Local parentObj = info[1]->ToObject(context).ToLocalChecked(); + JSCustomViewBase* parentView = static_cast(parentObj->GetAlignedPointerFromInternalField(0)); + JSForEach* view = instance->GetInstance(); + if (view) { + view->SetParentCustomView(parentView); + view->SetTranspilerGeneratedViewId(viewId); + } +} +#endif + +void JSForEach::JSBind(BindingTarget globalObj) +{ + JSClass::Declare("ForEach"); + JSClass::Inherit(); + JSClass::Bind(globalObj, ConstructorCallback); +} +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/jsview/js_foreach.h b/frameworks/bridge/declarative_frontend/jsview/js_foreach.h new file mode 100644 index 00000000..bf964ebf --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_foreach.h @@ -0,0 +1,107 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_FOREACH_H +#define FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_FOREACH_H + +#include + +#include "core/pipeline/base/composed_component.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_view_abstract.h" +#ifdef USE_QUICKJS_ENGINE +#include "frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_foreach_function.h" +#endif +#ifdef USE_V8_ENGINE +#include "frameworks/bridge/declarative_frontend/engine/v8/functions/v8_foreach_function.h" +#endif + +namespace OHOS::Ace { +class ComposedElement; +} +namespace OHOS::Ace::Framework { + +class JSCustomViewBase; + +class JSForEach : public JSViewAbstract { + DECLARE_ACE_TYPE(JSForEach, JSViewAbstract); + +public: +#ifdef USE_QUICKJS_ENGINE + JSForEach(QJSForEachFunction* jsForEachFunction); +#else + JSForEach(V8ForEachFunction* jsForEachFunction); +#endif + ~JSForEach(); + + /** + * marks the JSView's composed component as needing update / rerender + */ + void MarkNeedUpdate() override; + virtual void Destroy(JSViewAbstract* parentCustomView) override; + virtual bool IsForEachView() override + { + return true; + } + + void SetParentCustomView(JSCustomViewBase* view) + { + parentCustomView_ = view; + } + + void SetTranspilerGeneratedViewId(std::string viewId) + { + transpilerGeneratedViewId_ = viewId; + } + + static void JSBind(BindingTarget globalObj); + +#ifdef USE_QUICKJS_ENGINE + virtual void MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc) override; + virtual void ReleaseRT(JSRuntime* rt) override; + + static JSValue ConstructorCallback(JSContext* ctx, JSValueConst new_target, int argc, JSValueConst* argv); + static void QjsDestructor(JSRuntime* rt, JSForEach* ptr); + static void QjsGcMark(JSRuntime* rt, JSValueConst val, JS_MarkFunc* markFunc); +#elif USE_V8_ENGINE + static void ConstructorCallback(const v8::FunctionCallbackInfo& info); +#endif + +protected: + virtual RefPtr CreateSpecializedComponent() override; + +private: +#ifdef USE_QUICKJS_ENGINE + QJSForEachFunction* jsForEachFunction_; +#elif USE_V8_ENGINE + V8ForEachFunction* jsForEachFunction_; +#endif + JSCustomViewBase* parentCustomView_ = nullptr; + // element_ for the first item in foreach. + // It is set to null, once the parentElement_ is updated. + OHOS::Ace::Element* element_ = nullptr; + OHOS::Ace::Element* parentElement_ = nullptr; + // Number of items in a foreach + // will be updated on markNeedUpdate with new count + int32_t itemsCount_ = 0; + // key/id of the first item in a foreach + // will be updated on markNeedUpdate + std::string firstItemKey_; + std::string transpilerGeneratedViewId_; + bool needsUpdate_ = false; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_FOREACH_H diff --git a/frameworks/bridge/declarative_frontend/jsview/js_grid.cpp b/frameworks/bridge/declarative_frontend/jsview/js_grid.cpp new file mode 100644 index 00000000..0f4e078f --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_grid.cpp @@ -0,0 +1,179 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/declarative_frontend/jsview/js_grid.h" + +#include "frameworks/bridge/declarative_frontend/jsview/js_interactable_view.h" +#include "frameworks/core/components/foreach/foreach_component.h" + +namespace OHOS::Ace::Framework { + +#ifdef USE_QUICKJS_ENGINE +JSGrid::JSGrid(const std::list& children, std::list jsChildren) + : JSContainerBase(children, jsChildren) +{ + LOGD("Grid(children: [%lu])", children_.size()); +} +#else +JSGrid::JSGrid(const std::list& children, + std::list>> jsChildren) + : JSContainerBase(children, jsChildren) +{ + LOGD("JSGrid(children: [%lu])", children_.size()); +} +#endif + +JSGrid::~JSGrid() +{ + LOGD("Destroy: JSGrid"); +}; + +RefPtr JSGrid::CreateSpecializedComponent() +{ + LOGD("Create component: Grid"); + std::list> componentChildren; + + for (const auto& jsViewChild : children_) { + if (!jsViewChild) { + continue; + } + auto component = jsViewChild->CreateComponent(); + if (AceType::TypeName() == AceType::TypeName(component)) { + auto children = AceType::DynamicCast(component)->GetChildren(); + for (const auto& childComponent : children) { + componentChildren.emplace_back(childComponent); + } + } else { + componentChildren.emplace_back(component); + } + } + + RefPtr gridComponent = AceType::MakeRefPtr(componentChildren); + gridComponent->SetColumnsArgs(columnsTemplate_); + gridComponent->SetRowsArgs(rowsTemplate_); + gridComponent->SetColumnGap(columnsGap_); + gridComponent->SetRowGap(rowsGap_); + + return std::move(gridComponent); +} + +std::vector> JSGrid::CreateInteractableComponents() +{ + return JSInteractableView::CreateComponents(); +} + +void JSGrid::SetColumnsTemplate(std::string value) +{ + columnsTemplate_ = value; +} + +void JSGrid::SetRowsTemplate(std::string value) +{ + rowsTemplate_ = value; +} + +void JSGrid::SetColumnsGap(double value) +{ + columnsGap_ = value; +} + +void JSGrid::SetRowsGap(double value) +{ + rowsGap_ = value; +} + +#ifdef USE_QUICKJS_ENGINE +void JSGrid::MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc) +{ + LOGD("JSGrid => MarkGC: Mark value for GC start"); + JSContainerBase::MarkGC(rt, markFunc); + LOGD("JSGrid => MarkGC: Mark value for GC end"); +} + +void JSGrid::ReleaseRT(JSRuntime* rt) +{ + LOGD("JSGrid => release start"); + JSContainerBase::ReleaseRT(rt); + LOGD("JSGrid => release end"); +} + +// STATIC qjs_class_bindings +JSValue JSGrid::ConstructorCallback(JSContext* ctx, JSValueConst new_target, int argc, JSValueConst* argv) +{ + ACE_SCOPED_TRACE("JSGrid::ConstructorCallback"); + QJSContext::Scope scope(ctx); + auto [children, jsChildren] = JsChildrenFromArgs(ctx, argc, argv); + JSGrid* grid = new JSGrid(children, jsChildren); + return Wrap(new_target, grid); +} + +void JSGrid::QjsDestructor(JSRuntime* rt, JSGrid* view) +{ + LOGD("JSGrid(QjsDestructor) start"); + + if (!view) { + return; + } + + view->ReleaseRT(rt); + delete view; + view = nullptr; + LOGD("JSGrid(QjsDestructor) end"); +} + +void JSGrid::QjsGcMark(JSRuntime* rt, JSValueConst val, JS_MarkFunc* markFunc) +{ + LOGD("JSGrid(QjsGcMark) start"); + + JSGrid* grid = Unwrap(val); + if (!grid) { + return; + } + + grid->MarkGC(rt, markFunc); + LOGD("JSGrid(QjsGcMark) end"); +} + +#endif // USE_QUICKJS_ENGINE + +void JSGrid::JSBind(BindingTarget globalObj) +{ + LOGD("JSGrid:V8Bind"); + JSClass::Declare("Grid"); + JSClass::Inherit(); + + MethodOptions opt = MethodOptions::RETURN_SELF; + JSClass::Method("columnsTemplate", &JSGrid::SetColumnsTemplate, opt); + JSClass::Method("rowsTemplate", &JSGrid::SetRowsTemplate, opt); + JSClass::Method("columnsGap", &JSGrid::SetColumnsGap, opt); + JSClass::Method("rowsGap", &JSGrid::SetRowsGap, opt); + JSClass::CustomMethod("onClick", &JSInteractableView::JsOnClick); + JSClass::CustomMethod("onTouch", &JSInteractableView::JsOnTouch); + JSClass::Bind(globalObj, ConstructorCallback); +} + +#ifdef USE_V8_ENGINE +void JSGrid::ConstructorCallback(const v8::FunctionCallbackInfo& args) +{ + LOGD("JSGrid:ConstructorCallback"); + std::list children; + std::list>> jsChildren; + V8ChildrenFromArgs(args, children, jsChildren); + auto instance = V8Object::New(args.This(), children, jsChildren); + args.GetReturnValue().Set(instance->Get()); +} +#endif // USE_V8_ENGINE + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/jsview/js_grid.h b/frameworks/bridge/declarative_frontend/jsview/js_grid.h new file mode 100644 index 00000000..a3761327 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_grid.h @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_GRID_H +#define FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_GRID_H + +#include "frameworks/bridge/declarative_frontend/jsview/js_container_base.h" +#include "frameworks/core/components/grid_layout/grid_layout_component.h" + +namespace OHOS::Ace::Framework { + +class JSGrid : public JSContainerBase { + DECLARE_ACE_TYPE(JSGrid, JSContainerBase); + +public: + JSGrid() = delete; +#ifdef USE_QUICKJS_ENGINE + JSGrid(const std::list& children, std::list jsChildren); +#else + JSGrid(const std::list& children, + std::list>> jsChildren); +#endif + ~JSGrid(); + + virtual RefPtr CreateSpecializedComponent() override; + std::vector> CreateInteractableComponents() override; + static void JSBind(BindingTarget globalObj); + +#ifdef USE_QUICKJS_ENGINE + virtual void MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc) override; + virtual void ReleaseRT(JSRuntime* rt) override; + + static JSValue ConstructorCallback(JSContext* ctx, JSValueConst new_target, int argc, JSValueConst* argv); + static void QjsDestructor(JSRuntime* rt, JSGrid* ptr); + static void QjsGcMark(JSRuntime* rt, JSValueConst val, JS_MarkFunc* markFunc); + + static JSValue JsColumnsTemplate(JSContext* ctx, JSValueConst this_val, int argc, JSValueConst* argv); + static JSValue JsColumnsGap(JSContext* ctx, JSValueConst this_val, int argc, JSValueConst* argv); + static JSValue JsRowsTemplate(JSContext* ctx, JSValueConst this_val, int argc, JSValueConst* argv); + static JSValue JsRowsGap(JSContext* ctx, JSValueConst this_val, int argc, JSValueConst* argv); +#endif + +#ifdef USE_V8_ENGINE + static void ConstructorCallback(const v8::FunctionCallbackInfo& args); +#endif + +protected: + void SetColumnsTemplate(std::string value); + void SetRowsTemplate(std::string value); + void SetColumnsGap(double value); + void SetRowsGap(double value); + +private: + std::string columnsTemplate_; + std::string rowsTemplate_; + double columnsGap_ = 0.0; + double rowsGap_ = 0.0; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_GRID_H diff --git a/frameworks/bridge/declarative_frontend/jsview/js_grid_item.cpp b/frameworks/bridge/declarative_frontend/jsview/js_grid_item.cpp new file mode 100644 index 00000000..14b71a72 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_grid_item.cpp @@ -0,0 +1,164 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/declarative_frontend/jsview/js_grid_item.h" + +namespace OHOS::Ace::Framework { + +#ifdef USE_QUICKJS_ENGINE +JSGridItem::JSGridItem(const std::list& children, std::list jsChildren) + : JSContainerBase(children, jsChildren) +#else +JSGridItem::JSGridItem(const std::list& children, + std::list>> jsChildren) + : JSContainerBase(children, jsChildren) +#endif +{ + LOGD("JSGridItem"); +} + +JSGridItem::~JSGridItem() +{ + LOGD("Destroy: JSGridItem"); +}; + +RefPtr JSGridItem::CreateSpecializedComponent() +{ + LOGD("Create component: GridItem"); + if (children_.empty()) { + return nullptr; + } + + auto child = children_.front(); + if (!child) { + LOGE("grid item has no child"); + return nullptr; + } + auto component = child->CreateComponent(); + auto itemComponent = AceType::MakeRefPtr(component); + itemComponent->SetRowIndex(rowStart_); + itemComponent->SetColumnIndex(columnStart_); + itemComponent->SetRowSpan(rowEnd_ - rowStart_ + 1); + itemComponent->SetColumnSpan(columnEnd_ - columnStart_ + 1); + + return itemComponent; +} + +std::vector> JSGridItem::CreateInteractableComponents() +{ + return JSInteractableView::CreateComponents(); +} + +void JSGridItem::SetColumnStart(int32_t columnStart) +{ + columnStart_ = columnStart; +} + +void JSGridItem::SetColumnEnd(int32_t columnEnd) +{ + columnEnd_ = columnEnd; +} + +void JSGridItem::SetRowStart(int32_t rowStart) +{ + rowStart_ = rowStart; +} + +void JSGridItem::SetRowEnd(int32_t rowEnd) +{ + rowEnd_ = rowEnd; +} + +#ifdef USE_QUICKJS_ENGINE +void JSGridItem::MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc) +{ + LOGD("JSGridItem => MarkGC: Mark value for GC start"); + JSContainerBase::MarkGC(rt, markFunc); + LOGD("JSGridItem => MarkGC: Mark value for GC end"); +} + +void JSGridItem::ReleaseRT(JSRuntime* rt) +{ + LOGD("JSGridItem => release start"); + JSContainerBase::ReleaseRT(rt); + LOGD("JSGridItem => release end"); +} + +// STATIC qjs_class_bindings +JSValue JSGridItem::ConstructorCallback(JSContext* ctx, JSValueConst new_target, int argc, JSValueConst* argv) +{ + ACE_SCOPED_TRACE("JSGrid::ConstructorCallback"); + QJSContext::Scope scope(ctx); + auto [children, jsChildren] = JsChildrenFromArgs(ctx, argc, argv); + JSGridItem* item = new JSGridItem(children, jsChildren); + return Wrap(new_target, item); +} + +void JSGridItem::QjsDestructor(JSRuntime* rt, JSGridItem* view) +{ + LOGD("JSGridItem(QjsDestructor) start"); + + if (!view) { + return; + } + + view->ReleaseRT(rt); + delete view; + view = nullptr; + LOGD("JSGridItem(QjsDestructor) end"); +} + +void JSGridItem::QjsGcMark(JSRuntime* rt, JSValueConst val, JS_MarkFunc* markFunc) +{ + LOGD("JSGridItem(QjsGcMark) start"); + + JSGridItem* item = Unwrap(val); + if (!item) { + return; + } + + item->MarkGC(rt, markFunc); + LOGD("JSGridItem(QjsGcMark) end"); +} +#endif // USE_QUICKJS_ENGINE + +#ifdef USE_V8_ENGINE +void JSGridItem::ConstructorCallback(const v8::FunctionCallbackInfo& args) +{ + LOGD("GridItem:ConstructorCallback"); + std::list children; + std::list>> jsChildren; + V8ChildrenFromArgs(args, children, jsChildren); + auto instance = V8Object::New(args.This(), children, jsChildren); + args.GetReturnValue().Set(instance->Get()); +} +#endif // USE_V8_ENGINE + +void JSGridItem::JSBind(BindingTarget globalObj) +{ + LOGD("GridItem:JSBind"); + JSClass::Declare("GridItem"); + JSClass::Inherit(); + MethodOptions opt = MethodOptions::RETURN_SELF; + JSClass::Method("columnStart", &JSGridItem::SetColumnStart, opt); + JSClass::Method("columnEnd", &JSGridItem::SetColumnEnd, opt); + JSClass::Method("rowStart", &JSGridItem::SetRowStart, opt); + JSClass::Method("rowEnd", &JSGridItem::SetRowEnd, opt); + JSClass::CustomMethod("onClick", &JSInteractableView::JsOnClick); + JSClass::CustomMethod("onTouch", &JSInteractableView::JsOnTouch); + JSClass::Bind(globalObj, ConstructorCallback); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/jsview/js_grid_item.h b/frameworks/bridge/declarative_frontend/jsview/js_grid_item.h new file mode 100644 index 00000000..5c2b4dea --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_grid_item.h @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_GRID_ITEM_H +#define FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_GRID_ITEM_H + +#include "core/components/touch_listener/touch_listener_component.h" +#include "core/event/ace_event_handler.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_container_base.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_interactable_view.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_view_abstract.h" +#include "frameworks/core/components/grid_layout/grid_layout_item_component.h" + +namespace OHOS::Ace::Framework { + +class JSGridItem : public JSContainerBase { + DECLARE_ACE_TYPE(JSGridItem, JSContainerBase); + +public: + JSGridItem() = delete; +#ifdef USE_QUICKJS_ENGINE + JSGridItem(const std::list& children, std::list jsChildren); +#else + JSGridItem(const std::list& children, + std::list>> jsChildren); +#endif + ~JSGridItem(); + + virtual RefPtr CreateSpecializedComponent() override; + virtual std::vector> CreateInteractableComponents() override; + + static void JSBind(BindingTarget globalObj); + +#ifdef USE_QUICKJS_ENGINE + virtual void MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc) override; + virtual void ReleaseRT(JSRuntime* rt) override; + + static JSValue ConstructorCallback(JSContext* ctx, JSValueConst new_target, int argc, JSValueConst* argv); + static void QjsDestructor(JSRuntime* rt, JSGridItem* ptr); + static void QjsGcMark(JSRuntime* rt, JSValueConst val, JS_MarkFunc* markFunc); +#endif + +#ifdef USE_V8_ENGINE + static void ConstructorCallback(const v8::FunctionCallbackInfo& args); +#endif + +protected: + void SetColumnStart(int32_t columnStart); + void SetColumnEnd(int32_t columnEnd); + void SetRowStart(int32_t rowStart); + void SetRowEnd(int32_t rowEnd); + +private: + int32_t columnStart_ = -1; + int32_t columnEnd_ = -1; + int32_t rowStart_ = -1; + int32_t rowEnd_ = -1; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_GRID_ITEM_H diff --git a/frameworks/bridge/declarative_frontend/jsview/js_image.cpp b/frameworks/bridge/declarative_frontend/jsview/js_image.cpp new file mode 100644 index 00000000..0f503e11 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_image.cpp @@ -0,0 +1,255 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/declarative_frontend/jsview/js_image.h" + +#include "base/log/ace_trace.h" + +namespace OHOS::Ace::Framework { + +#ifdef USE_QUICKJS_ENGINE +JSValue LoadImageSuccEventToJSValue(const LoadImageSuccessEvent& eventInfo, JSContext* ctx) +{ + JSValue eventObj = JS_NewObject(ctx); + JS_SetPropertyStr(ctx, eventObj, "width", JS_NewFloat64(ctx, eventInfo.GetWidth())); + JS_SetPropertyStr(ctx, eventObj, "height", JS_NewFloat64(ctx, eventInfo.GetHeight())); + return eventObj; +} + +JSValue LoadImageFailEventToJSValue(const LoadImageFailEvent& eventInfo, JSContext* ctx) +{ + return JS_NewObject(ctx); +} +#endif + +#ifdef USE_V8_ENGINE +v8::Local LoadImageSuccEventToJSValue(const LoadImageSuccessEvent& eventInfo, v8::Isolate* isolate) +{ + ACE_DCHECK(isolate); + auto context = isolate->GetCurrentContext(); + v8::Local obj = v8::Object::New(isolate); + obj->Set(context, v8::String::NewFromUtf8(isolate, "width").ToLocalChecked(), + v8::Number::New(isolate, eventInfo.GetWidth())) + .ToChecked(); + obj->Set(context, v8::String::NewFromUtf8(isolate, "height").ToLocalChecked(), + v8::Number::New(isolate, eventInfo.GetHeight())) + .ToChecked(); + return v8::Local(obj); +} + +v8::Local LoadImageFailEventToJSValue(const LoadImageFailEvent& eventInfo, v8::Isolate* isolate) +{ + return v8::Local(v8::Object::New(isolate)); +} +#endif + +JSImage::~JSImage() +{ + LOGD("Destroy: JSImage"); +} + +RefPtr JSImage::CreateSpecializedComponent() +{ + LOGD("Create component: Image"); + auto imageComponent = AceType::MakeRefPtr(src_); + imageComponent->SetAlt(alt_); + imageComponent->SetImageFit(objectFit_); + imageComponent->SetMatchTextDirection(matchTextDirection_); + imageComponent->SetFitMaxSize(!fitOriginalSize_); + if (jsLoadSuccFunc_) { + imageComponent->SetLoadSuccessEventId( + EventMarker([func = std::move(jsLoadSuccFunc_)](const BaseEventInfo* info) { + auto eventInfo = TypeInfoHelper::DynamicCast(info); + func->execute(*eventInfo); + })); + } + if (jsLoadFailFunc_) { + imageComponent->SetLoadFailEventId(EventMarker([func = std::move(jsLoadFailFunc_)](const BaseEventInfo* info) { + LOGD("HandleLoadImageFail"); + auto eventInfo = TypeInfoHelper::DynamicCast(info); + func->execute(*eventInfo); + })); + } + if (boxComponent_) { + auto backDecoration = boxComponent_->GetBackDecoration(); + if (backDecoration) { + Border border = backDecoration->GetBorder(); + if (border.TopLeftRadius().IsValid() && border.TopRightRadius().IsValid() && + border.BottomLeftRadius().IsValid() && border.BottomRightRadius().IsValid()) { + imageComponent->SetBorder(border); + } + } + } + return imageComponent; +} + +std::vector> JSImage::CreateInteractableComponents() +{ + return JSInteractableView::CreateComponents(); +} + +void JSImage::SetAlt(std::string& value) +{ + alt_ = value; +} + +void JSImage::SetObjectFit(int32_t value) +{ + objectFit_ = static_cast(value); +} + +void JSImage::SetMatchTextDirection(bool value) +{ + matchTextDirection_ = value; +} + +void JSImage::SetFitOriginalSize(bool value) +{ + fitOriginalSize_ = value; +} + +#ifdef USE_QUICKJS_ENGINE +JSValue JSImage::QjsOnComplete(JSContext* ctx, JSValueConst jsObject, int argc, JSValueConst* argv) +{ + if ((argc != 1) || !JS_IsFunction(ctx, argv[0])) { + LOGE("OnComplete expects a function as parameter. Throwing exception."); + return JS_EXCEPTION; + } + QJSContext::Scope scope(ctx); + JSImage* jsImage = Unwrap(jsObject); + + if (jsImage == nullptr) { + LOGE("OnComplete must be called on a JSImage. Throwing exception."); + return JS_EXCEPTION; + } + auto loadSuccHandler = + new QJSEventFunction(ctx, JS_DupValue(ctx, argv[0]), LoadImageSuccEventToJSValue); + jsLoadSuccFunc_ = loadSuccHandler; + return JS_DupValue(ctx, jsObject); // for call chain +} + +JSValue JSImage::QjsOnError(JSContext* ctx, JSValueConst jsObject, int argc, JSValueConst* argv) +{ + if ((argc != 1) || !JS_IsFunction(ctx, argv[0])) { + LOGE("OnError expects a function as parameter. Throwing exception."); + return JS_EXCEPTION; + } + QJSContext::Scope scope(ctx); + JSImage* jsImage = Unwrap(jsObject); + + if (jsImage == nullptr) { + LOGE("OnError must be called on a JSImage. Throwing exception."); + return JS_EXCEPTION; + } + auto loadFailHandler = + new QJSEventFunction(ctx, JS_DupValue(ctx, argv[0]), LoadImageFailEventToJSValue); + jsLoadFailFunc_ = loadFailHandler; + return JS_DupValue(ctx, jsObject); +} + +void JSImage::MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc) +{ + LOGD("JSImage => MarkGC: Mark value for GC start"); + JSInteractableView::MarkGC(rt, markFunc); + LOGD("JSImage => MarkGC: Mark value for GC end"); +} + +void JSImage::ReleaseRT(JSRuntime* rt) +{ + LOGD("JSImage => release start"); + JSInteractableView::ReleaseRT(rt); + LOGD("JSImage => release end"); +} + +void JSImage::QjsDestructor(JSRuntime* rt, JSImage* view) +{ + LOGD("JSImage(QjsDestructor) start"); + if (!view) + return; + + view->ReleaseRT(rt); + delete view; + LOGD("JSImage(QjsDestructor) end"); +} + +void JSImage::QjsGcMark(JSRuntime* rt, JSValueConst val, JS_MarkFunc* markFunc) +{ + LOGD("JSImage(QjsGcMark) start"); + + JSImage* view = Unwrap(val); + if (!view) + return; + + view->MarkGC(rt, markFunc); + LOGD("JSImage(QjsGcMark) end"); +} +#endif // USE_QUICKJS_ENGINE + +#ifdef USE_V8_ENGINE +void JSImage::V8OnComplete(const v8::FunctionCallbackInfo& args) +{ + LOGD("JSImage V8OnComplete"); + auto isolate = args.GetIsolate(); + v8::HandleScope handleScope(isolate); + if (args[0]->IsFunction()) { + v8::Local loadSuccFunction = v8::Local::Cast(args[0]); + jsLoadSuccFunc_ = AceType::MakeRefPtr>( + loadSuccFunction, LoadImageSuccEventToJSValue); + } else { + LOGE("args not function"); + } + args.GetReturnValue().Set(args.This()); +} + +void JSImage::V8OnError(const v8::FunctionCallbackInfo& args) +{ + LOGD("JSImage V8OnError"); + auto isolate = args.GetIsolate(); + v8::HandleScope scp(isolate); + if (args[0]->IsFunction()) { + v8::Local loadErrorFunction = v8::Local::Cast(args[0]); + jsLoadFailFunc_ = + AceType::MakeRefPtr>(loadErrorFunction, LoadImageFailEventToJSValue); + } else { + LOGE("args not function"); + } + args.GetReturnValue().Set(args.This()); +} + +#endif // USE_V8_ENGINE + +void JSImage::JSBind(BindingTarget globalObj) +{ + JSClass::Declare("Image"); + JSClass::Inherit(); + JSClass::CustomMethod("onTouch", &JSInteractableView::JsOnTouch); + JSClass::CustomMethod("onClick", &JSInteractableView::JsOnClick); + MethodOptions opt = MethodOptions::RETURN_SELF; + JSClass::Method("alt", &JSImage::SetAlt, opt); + JSClass::Method("objectFit", &JSImage::SetObjectFit, opt); + JSClass::Method("matchTextDirection", &JSImage::SetMatchTextDirection, opt); + JSClass::Method("fitOriginalSize", &JSImage::SetFitOriginalSize, opt); +#ifdef USE_QUICKJS_ENGINE + JSClass::CustomMethod("onComplete", &JSImage::QjsOnComplete); + JSClass::CustomMethod("onError", &JSImage::QjsOnError); +#endif +#ifdef USE_V8_ENGINE + JSClass::CustomMethod("onComplete", &JSImage::V8OnComplete); + JSClass::CustomMethod("onError", &JSImage::V8OnError); +#endif + JSClass::Bind(globalObj); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/jsview/js_image.h b/frameworks/bridge/declarative_frontend/jsview/js_image.h new file mode 100644 index 00000000..101350d7 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_image.h @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_IMAGE_H +#define FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_IMAGE_H + +#include "core/components/image/image_component.h" +#include "core/components/image/image_event.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_interactable_view.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_view_abstract.h" + +#ifdef USE_QUICKJS_ENGINE +#ifdef __cplusplus +extern "C" { +#endif +#include "third_party/quickjs/quickjs.h" +#ifdef __cplusplus +} +#endif +#endif + +namespace OHOS::Ace::Framework { + +class JSImage : public JSViewAbstract, public JSInteractableView { + DECLARE_ACE_TYPE(JSImage, JSViewAbstract); + +public: + JSImage() = delete; + JSImage(const std::string& src) : src_(src) {} + ~JSImage(); + + RefPtr CreateSpecializedComponent() override; + std::vector> CreateInteractableComponents() override; + void HandleLoadImageSuccess(const BaseEventInfo& param); + void HandleLoadImageFail(const BaseEventInfo& param); + void SetAlt(std::string& value); + void SetObjectFit(int32_t value); + void SetMatchTextDirection(bool value); + void SetFitOriginalSize(bool value); + +#ifdef USE_QUICKJS_ENGINE + void MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc) override; + void ReleaseRT(JSRuntime* rt) override; + JSValue QjsOnComplete(JSContext* ctx, JSValueConst jsObject, int argc, JSValueConst* argv); + JSValue QjsOnError(JSContext* ctx, JSValueConst jsObject, int argc, JSValueConst* argv); +#endif // USE_QUICKJS_ENGINE + +#ifdef USE_V8_ENGINE + void V8OnComplete(const v8::FunctionCallbackInfo& args); + void V8OnError(const v8::FunctionCallbackInfo& args); +#endif // USE_V8_ENGINE + +public: + static void JSBind(BindingTarget globalObj); + +#ifdef USE_QUICKJS_ENGINE + static void QjsDestructor(JSRuntime* rt, JSImage* ptr); + static void QjsGcMark(JSRuntime* rt, JSValueConst val, JS_MarkFunc* markFunc); +#endif // USE_QUICKJS_ENGINE + +private: + const std::string src_; + std::string alt_; + ImageFit objectFit_ = ImageFit::COVER; + bool matchTextDirection_ = false; + bool fitOriginalSize_ = false; + +#ifdef USE_QUICKJS_ENGINE + RefPtr> jsLoadSuccFunc_; + RefPtr> jsLoadFailFunc_; +#endif // USE_QUICKJS_ENGINE + +#ifdef USE_V8_ENGINE + RefPtr> jsLoadSuccFunc_; + RefPtr> jsLoadFailFunc_; +#endif // USE_V8_ENGINE +}; + +} // namespace OHOS::Ace::Framework + +#endif // FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_IMAGE_H diff --git a/frameworks/bridge/declarative_frontend/jsview/js_interactable_view.cpp b/frameworks/bridge/declarative_frontend/jsview/js_interactable_view.cpp new file mode 100644 index 00000000..90d603da --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_interactable_view.cpp @@ -0,0 +1,181 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/declarative_frontend/jsview/js_interactable_view.h" + +#include "core/components/gesture_listener/gesture_listener_component.h" +#include "core/gestures/click_recognizer.h" +#include "core/pipeline/base/single_child.h" + +namespace OHOS::Ace::Framework { +JSInteractableView::~JSInteractableView() +{ + LOGD("Destroy: JSInteractableView"); +} + +std::vector> JSInteractableView::CreateComponents() +{ + std::vector> result; + if (jsOnTouchFunc_) { + auto onTouchId = EventMarker( + [func = std::move(jsOnTouchFunc_)](const BaseEventInfo* info) { + const TouchCallBackInfo* touchInfo = static_cast(info); + if (!touchInfo) { + LOGE("Error processing event. Not an instance of TouchCallBackInfo"); + return; + } + func->execute(*touchInfo); + }, + "onTouch", 0); + auto touchComponent = AceType::MakeRefPtr(); + touchComponent->SetOnTouchId(onTouchId); + result.emplace_back(touchComponent); + } + if (panHandler_) { + result.emplace_back(panHandler_->CreateComponent()); + } + if (onClickFunc_) { + auto onClickId = EventMarker([func = std::move(onClickFunc_)](const BaseEventInfo* info) { + LOGD("About to call onclick method on js"); +#ifdef USE_QUICKJS_ENGINE + func->execute(); +#elif USE_V8_ENGINE + auto clickInfo = TypeInfoHelper::DynamicCast(info); + func->execute(*clickInfo); +#endif + }); + auto clickHandler = AceType::MakeRefPtr(); + clickHandler->SetOnClickId(onClickId); + result.emplace_back(std::move(clickHandler)); + } + return result; +} + +void JSInteractableView::SetTouchHandler(JSTouchHandler* touchHandler) +{ + LOGD("JSInteractableView setTouchHandler"); + touchHandler_ = touchHandler; +} + +void JSInteractableView::SetPanHandler(JSPanHandler* panHandler) +{ + LOGD("JSInteractableView setPanHandler"); + panHandler_ = panHandler; +} + +void JSInteractableView::SetClickHandler(RefPtr& clickHandler) +{ + onClickFunc_ = clickHandler; +} + +#ifdef USE_QUICKJS_ENGINE +void JSInteractableView::AttachJSTouchHandler(JSValueConst jsHandler) +{ + jsHandler_ = jsHandler; +} + +void JSInteractableView::MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc) +{ + LOGD("JSInteractableView => MarkGC: Mark value for GC start"); + if (!JS_IsNull(jsHandler_)) { + JS_MarkValue(rt, jsHandler_, markFunc); + } + LOGD("JSInteractableView => MarkGC: Mark value for GC end"); +} + +void JSInteractableView::ReleaseRT(JSRuntime* rt) +{ + LOGD("JSInteractableView => release start"); + if (!JS_IsNull(jsHandler_)) { + JS_FreeValueRT(rt, jsHandler_); + } + + LOGD("JSInteractableView => release end"); +} + +JSValue JSInteractableView::JsOnTouch(JSContext* ctx, JSValueConst this_value, int32_t argc, JSValueConst* argv) +{ + if ((argc != 1) || !JS_IsObject(argv[0])) { + return JS_ThrowSyntaxError(ctx, "touch() expects a TouchHandler object as parameter. Throwing exception."); + } + + JSTouchHandler* handler = Unwrap(argv[0]); + if (!handler) { + return JS_ThrowSyntaxError(ctx, "touch() expects a TouchHandler object as parameter. Throwing exception."); + } + + SetTouchHandler(handler); + AttachJSTouchHandler(JS_DupValue(ctx, argv[0])); + return JS_DupValue(ctx, this_value); // chaining +} + +JSValue JSInteractableView::JsOnClick(JSContext* ctx, JSValueConst this_value, int32_t argc, JSValueConst* argv) +{ + if ((argc != 1) || !JS_IsFunction(ctx, argv[0])) { + LOGE("onCick expects a function as parameter. Throwing exception."); + return JS_ThrowSyntaxError(ctx, "onClick() expect a function parameter. Throwing exception"); + } + + QJSContext::Scope scope(ctx); + + // Dup and Free shoulj happen inside the QJSClickFunction + RefPtr clickHandler = AceType::MakeRefPtr(ctx, JS_DupValue(ctx, argv[0])); + SetClickHandler(clickHandler); + return JS_DupValue(ctx, this_value); // for call chaining +} + +#endif + +#ifdef USE_V8_ENGINE +void JSInteractableView::JsOnTouch(const v8::FunctionCallbackInfo& args) +{ + auto isolate = args.GetIsolate(); + v8::HandleScope scp(isolate); + if (args.Length() > 0 && args[0]->IsFunction()) { + v8::Local jsFunction = v8::Local::Cast(args[0]); + jsOnTouchFunc_ = AceType::MakeRefPtr(jsFunction); + } + args.GetReturnValue().Set(args.This()); +} + +void JSInteractableView::JsOnPan(const v8::FunctionCallbackInfo& args) +{ + auto isolate = args.GetIsolate(); + v8::HandleScope scp(isolate); + auto context = isolate->GetCurrentContext(); + + LOGD("JSInteractableView JsOnPan"); + if (args[0]->IsObject()) { + v8::Local obj = args[0]->ToObject(context).ToLocalChecked(); + JSPanHandler* handler = static_cast(obj->GetAlignedPointerFromInternalField(0)); + SetPanHandler(handler); + } + args.GetReturnValue().Set(args.This()); +} + +void JSInteractableView::JsOnClick(const v8::FunctionCallbackInfo& info) +{ + auto isolate = info.GetIsolate(); + v8::HandleScope scp(isolate); + LOGD("JSInteractableView JsOnClick"); + if (info[0]->IsFunction()) { + v8::Local clickFunction = v8::Local::Cast(info[0]); + RefPtr jsOnClickFunc = AceType::MakeRefPtr(clickFunction); + SetClickHandler(jsOnClickFunc); + } + info.GetReturnValue().Set(info.This()); +} +#endif +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/jsview/js_interactable_view.h b/frameworks/bridge/declarative_frontend/jsview/js_interactable_view.h new file mode 100644 index 00000000..49e63727 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_interactable_view.h @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_INTERACTABLE_VIEW_H +#define FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_INTERACTABLE_VIEW_H + +#include "frameworks/bridge/declarative_frontend/jsview/js_pan_handler.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_touch_handler.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_view_abstract.h" +#include "frameworks/core/pipeline/base/component.h" + +#ifdef USE_QUICKJS_ENGINE +#include "frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_click_function.h" +#include "frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_function.h" +#elif USE_V8_ENGINE +#include "frameworks/bridge/declarative_frontend/engine/v8/functions/v8_click_function.h" +#endif + +namespace OHOS::Ace::Framework { +class JSInteractableView { +public: +#ifdef USE_QUICKJS_ENGINE + using ClickFunction = QJSClickFunction; + using TouchFunction = QJSTouchFunction; +#elif USE_V8_ENGINE + using ClickFunction = V8ClickFunction; + using TouchFunction = V8TouchFunction; +#endif + + JSInteractableView() = default; + ~JSInteractableView(); + + std::vector> CreateComponents(); + +#ifdef USE_QUICKJS_ENGINE + void MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc); + void ReleaseRT(JSRuntime* rt); + + void AttachJSTouchHandler(JSValueConst jsHandler); +#endif + void SetTouchHandler(JSTouchHandler* handler); + void SetPanHandler(JSPanHandler* handler); + void SetClickHandler(RefPtr& clickHandler); + +#ifdef USE_QUICKJS_ENGINE + virtual JSValue JsOnTouch(JSContext* ctx, JSValueConst this_value, int32_t argc, JSValueConst* argv); + virtual JSValue JsOnClick(JSContext* ctx, JSValueConst this_value, int32_t argc, JSValueConst* argv); +#elif USE_V8_ENGINE + virtual void JsOnTouch(const v8::FunctionCallbackInfo& args); + virtual void JsOnPan(const v8::FunctionCallbackInfo& args); + virtual void JsOnClick(const v8::FunctionCallbackInfo& args); +#endif + +protected: + JSTouchHandler* touchHandler_ = nullptr; + JSPanHandler* panHandler_ = nullptr; + RefPtr onClickFunc_; + RefPtr jsOnTouchFunc_; + +#ifdef USE_QUICKJS_ENGINE + JSValue jsHandler_ = JS_NULL; +#endif +}; // class JSInteractableView +} // namespace OHOS::Ace::Framework +#endif // FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_INTERACTABLE_VIEW_H diff --git a/frameworks/bridge/declarative_frontend/jsview/js_list.cpp b/frameworks/bridge/declarative_frontend/jsview/js_list.cpp new file mode 100644 index 00000000..5da5ca45 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_list.cpp @@ -0,0 +1,550 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/declarative_frontend/jsview/js_list.h" + +#include "base/log/ace_trace.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_interactable_view.h" +#include "frameworks/core/components/foreach/foreach_component.h" +#include "frameworks/core/components/scroll/scroll_bar_theme.h" +#include "frameworks/core/components/scroll/scroll_fade_effect.h" +#include "frameworks/core/components/scroll/scroll_spring_effect.h" + +namespace OHOS::Ace::Framework { + +#ifdef USE_V8_ENGINE +v8::Local ScrollEventInfoToJSValue(const ScrollEventInfo& eventInfo, v8::Isolate* isolate) +{ + ACE_DCHECK(isolate); + auto context = isolate->GetCurrentContext(); + v8::Local obj = v8::Object::New(isolate); + + double scrollOffset = NearZero(eventInfo.GetScrollX()) ? eventInfo.GetScrollY() : eventInfo.GetScrollX(); + obj->Set(context, v8::String::NewFromUtf8(isolate, "scrollOffset").ToLocalChecked(), + v8::Number::New(isolate, scrollOffset)) + .ToChecked(); + obj->Set(context, v8::String::NewFromUtf8(isolate, "scrollState").ToLocalChecked(), + v8::Number::New(isolate, eventInfo.GetScrollState())) + .ToChecked(); + return v8::Local(obj); +} +#elif USE_QUICKJS_ENGINE +JSValue ScrollEventInfoToJSValue(const ScrollEventInfo& eventInfo, JSContext* ctx) +{ + JSValue sizeObj = JS_NewObject(ctx); + double scrollOffset = NearZero(eventInfo.GetScrollX()) ? eventInfo.GetScrollY() : eventInfo.GetScrollX(); + JS_SetPropertyStr(ctx, sizeObj, "scrollOffset", JS_NewFloat64(ctx, scrollOffset)); + JS_SetPropertyStr(ctx, sizeObj, "scrollState", JS_NewInt32(ctx, eventInfo.GetScrollState())); + return sizeObj; +} +#endif + +#ifdef USE_QUICKJS_ENGINE +JSList::JSList(const std::list& children, std::list jsChildren) + : JSContainerBase(children, jsChildren), onScrollFunc_(nullptr), onReachStartFunc_(nullptr), + onReachEndFunc_(nullptr), onScrollStopFunc_(nullptr) +#elif USE_V8_ENGINE +JSList::JSList(const std::list& children, + std::list>> jsChildren) + : JSContainerBase(children, jsChildren) +#endif +{ + LOGD("List, children size is : %{public}lu)", children_.size()); +} + +JSList::~JSList() +{ + LOGD("Destroy: JSList"); +}; + +RefPtr JSList::CreateSpecializedComponent() +{ + LOGD("Create component: List, childSize %lu", children_.size()); + std::list> componentChildren; + + RefPtr listComponent = AceType::MakeRefPtr(componentChildren); + for (const auto& jsViewChild : children_) { + if (!jsViewChild) { + continue; + } + auto component = jsViewChild->CreateComponent(); + if (AceType::TypeName() == AceType::TypeName(component)) { + auto children = AceType::DynamicCast(component)->GetChildren(); + for (const auto& childComponent : children) { + listComponent->AppendChild(childComponent); + InitDivider(childComponent); + } + } else { + InitDivider(component); + listComponent->AppendChild(component); + } + } + + listComponent->SetDirection(flexDirection_); + + if (onScrollFunc_) { + auto onScroll = EventMarker( + [func = std::move(onScrollFunc_)](const BaseEventInfo* info) { + auto eventInfo = TypeInfoHelper::DynamicCast(info); + if (!eventInfo) { + LOGE("HandleScrollEvent, param is not ScrollEventInfo"); + return; + } + LOGD("onScrollFunc_ execute"); + func->execute(*eventInfo); + }, + "scroll", 0); + listComponent->SetOnScroll(onScroll); + } + if (onScrollStopFunc_) { + auto onScrollStop = EventMarker([func = std::move(onScrollStopFunc_)] { func->execute(); }, "scrollStop", 0); + listComponent->SetOnScrollEnd(onScrollStop); + } + if (onReachStartFunc_) { + auto onReachStart = EventMarker([func = std::move(onReachStartFunc_)] { func->execute(); }, "reachStart", 0); + listComponent->SetOnScrollTop(onReachStart); + } + if (onReachEndFunc_) { + auto onReachEnd = EventMarker([func = std::move(onReachEndFunc_)] { func->execute(); }, "reachEnd", 0); + listComponent->SetOnScrollBottom(onReachEnd); + } + + if (edgeEffect_ == EdgeEffect::SPRING) { + listComponent->SetScrollEffect(AceType::MakeRefPtr()); + } else if (edgeEffect_ == EdgeEffect::FADE) { + listComponent->SetScrollEffect(AceType::MakeRefPtr()); + } else { + listComponent->SetScrollEffect(AceType::MakeRefPtr(EdgeEffect::NONE)); + } + + if (!listComponent->GetPositionController()) { + listComponent->SetPositionController(AceType::MakeRefPtr()); + } + listComponent->GetPositionController()->SetInitialIndex(initialIndex_); + + if (displayMode_ == DisplayMode::ON || displayMode_ == DisplayMode::AUTO) { + scrollBar_ = AceType::MakeRefPtr(displayMode_, ShapeMode::RECT); + InitScrollBarTheme(); + } else { + scrollBar_ = AceType::MakeRefPtr(DisplayMode::OFF, ShapeMode::DEFAULT); + } + listComponent->SetScrollBar(scrollBar_); + + return listComponent; +} + +std::vector> JSList::CreateInteractableComponents() +{ + return JSInteractableView::CreateComponents(); +} + +void JSList::SetFlexDirection(int32_t flexDirection) +{ + LOGD("JSList SetFlexDirection is %{public}d", flexDirection); + if (static_cast(Direction::COLUMN) == flexDirection) { + flexDirection_ = FlexDirection::COLUMN; + } else if (static_cast(Direction::ROW) == flexDirection) { + flexDirection_ = FlexDirection::ROW; + } else { + flexDirection_ = FlexDirection::COLUMN; + } +} + +void JSList::SetScrollBarState(int32_t state) +{ + if (static_cast(DisplayMode::OFF) == state) { + displayMode_ = DisplayMode::OFF; + } else if (static_cast(DisplayMode::AUTO) == state) { + displayMode_ = DisplayMode::AUTO; + } else if (static_cast(DisplayMode::ON) == state) { + displayMode_ = DisplayMode::ON; + } else { + displayMode_ = DisplayMode::OFF; + } +} + +void JSList::SetScrollEffect(int32_t scrollEffect) +{ + LOGD("JSList SetScrollEffect is %{public}d", scrollEffect); + if (static_cast(EdgeEffect::SPRING) == scrollEffect) { + edgeEffect_ = EdgeEffect::SPRING; + } else if (static_cast(EdgeEffect::FADE) == scrollEffect) { + edgeEffect_ = EdgeEffect::FADE; + } else if (static_cast(EdgeEffect::NONE) == scrollEffect) { + edgeEffect_ = EdgeEffect::NONE; + } else { + edgeEffect_ = EdgeEffect::SPRING; + } +} + +void JSList::SetInitialIndex(int32_t initialIndex) +{ + initialIndex_ = initialIndex; +} + +void JSList::InitDivider(const RefPtr& child) +{ + auto item = ListItemComponent::GetListItem(child); + if (!item) { + LOGW("InitDivider: no list item in child"); + return; + } + if (needDivider_) { + item->MarkNeedDivider(needDivider_); + item->SetDividerColor(dividerColor_); + item->SetDividerHeight(dividerHeight_); + item->SetDividerLength(dividerLength_); + item->SetDividerOrigin(dividerOffset_); + LOGD("divider: height(%{public}lf), length(%{public}lf), Origin(%{public}lf), color(%{public}x)", + dividerHeight_.Value(), dividerLength_.Value(), dividerOffset_.Value(), dividerColor_.GetValue()); + } +} + +void JSList::InitScrollBarTheme() +{ + if (!scrollBar_ || displayMode_ == DisplayMode::OFF) { + LOGD("ScrollBar is Off, no need set this"); + return; + } + + // Set scrollBar theme + RefPtr scrollBarTheme = GetTheme(); + if (scrollBarTheme) { + if (scrollBar_->GetShapeMode() == ShapeMode::DEFAULT) { + scrollBar_->SetShapeMode(scrollBarTheme->GetShapeMode()); + } + scrollBar_->SetInactiveWidth(scrollBarTheme->GetNormalWidth()); + scrollBar_->SetNormalWidth(scrollBarTheme->GetNormalWidth()); + scrollBar_->SetActiveWidth(scrollBarTheme->GetActiveWidth()); + scrollBar_->SetMinHeight(scrollBarTheme->GetMinHeight()); + scrollBar_->SetMinDynamicHeight(scrollBarTheme->GetMinDynamicHeight()); + scrollBar_->SetReservedHeight(scrollBarTheme->GetReservedHeight()); + scrollBar_->SetTouchWidth(scrollBarTheme->GetTouchWidth()); + scrollBar_->SetBackgroundColor(scrollBarTheme->GetBackgroundColor()); + scrollBar_->SetForegroundColor(scrollBarTheme->GetForegroundColor()); + scrollBar_->SetPadding(scrollBarTheme->GetPadding()); + } +} + +void JSList::JSBind(BindingTarget globalObj) +{ + JSClass::Declare("List"); + JSClass::Inherit(); + + MethodOptions opt = MethodOptions::RETURN_SELF; + // Bind the method here + LOGD("JSList V8Bind start."); + JSClass::Method("listDirection", &JSList::SetFlexDirection, opt); + JSClass::Method("scrollBar", &JSList::SetScrollBarState, opt); + JSClass::Method("scrollEffect", &JSList::SetScrollEffect, opt); + JSClass::Method("initialIndex", &JSList::SetInitialIndex, opt); + JSClass::CustomMethod("divider", &JSList::SetDivider); + JSClass::CustomMethod("onScroll", &JSList::ScrollCallback); + JSClass::CustomMethod("onReachStart", &JSList::ReachStartCallback); + JSClass::CustomMethod("onReachEnd", &JSList::ReachEndCallback); + JSClass::CustomMethod("onScrollStop", &JSList::ScrollStopCallback); + JSClass::CustomMethod("onClick", &JSInteractableView::JsOnClick); + JSClass::CustomMethod("onTouch", &JSInteractableView::JsOnTouch); + JSClass::Bind(globalObj, ConstructorCallback); + LOGD("JSList V8Bind end."); +} + +#ifdef USE_QUICKJS_ENGINE +void JSList::MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc) +{ + LOGD("JSList => MarkGC: start"); + JSContainerBase::MarkGC(rt, markFunc); + LOGD("JSList => MarkGC: end"); +} + +void JSList::ReleaseRT(JSRuntime* rt) +{ + LOGD("JSList => release children: start"); + JSContainerBase::ReleaseRT(rt); + LOGD("JSList => release children: end"); +} + +// STATIC qjs_class_bindings +JSValue JSList::ConstructorCallback(JSContext* ctx, JSValueConst new_target, int argc, JSValueConst* argv) +{ + ACE_SCOPED_TRACE("JSList::ConstructorCallback"); + QJSContext::Scope scope(ctx); + auto [children, jsChildren] = JsChildrenFromArgs(ctx, argc, argv); + JSList* list = new JSList(children, jsChildren); + return Wrap(new_target, list); +} + +void JSList::QjsDestructor(JSRuntime* rt, JSList* view) +{ + LOGD("JSList(QjsDestructor) start"); + if (!view) { + return; + } + + view->ReleaseRT(rt); + delete view; + view = nullptr; + LOGD("JSList(QjsDestructor) end"); +} + +void JSList::QjsGcMark(JSRuntime* rt, JSValueConst val, JS_MarkFunc* markFunc) +{ + LOGD("JSList(QjsGcMark) start"); + JSList* view = Unwrap(val); + if (!view) { + return; + } + + view->MarkGC(rt, markFunc); + LOGD("JSList(QjsGcMark) end"); +} + +JSValue JSList::SetDivider(JSContext* ctx, JSValueConst jsList, int argc, JSValueConst* argv) +{ + if ((argc != 1) || !JS_IsObject(argv[0]) || JS_IsArray(ctx, argv[0]) || JS_IsFunction(ctx, argv[0])) { + LOGE("divider expects a object as parameter. Throwing exception."); + return JS_ThrowSyntaxError(ctx, "divider expects a object as parameter"); + } + JSList* list = Unwrap(jsList); + + if (list == nullptr) { + LOGE("divider must be called on a JSList. Throwing exception."); + return JS_ThrowSyntaxError(ctx, "divider must be called on a JSList"); + } + + JSValue jsHeight = JS_GetPropertyStr(ctx, argv[0], "height"); + JSValue jsLength = JS_GetPropertyStr(ctx, argv[0], "length"); + JSValue jsOffset = JS_GetPropertyStr(ctx, argv[0], "offset"); + JSValue jsColor = JS_GetPropertyStr(ctx, argv[0], "color"); + if (JS_IsNumber(jsHeight)) { + double height = 0.0; + JS_ToFloat64(ctx, &height, jsHeight); + list->dividerHeight_ = Dimension(height); + list->needDivider_ = true; + } + if (JS_IsNumber(jsLength)) { + double length = 0.0; + JS_ToFloat64(ctx, &length, jsLength); + list->dividerLength_ = Dimension(length); + list->needDivider_ = true; + } + if (JS_IsNumber(jsOffset)) { + double offset = 0.0; + JS_ToFloat64(ctx, &offset, jsOffset); + list->dividerOffset_ = Dimension(offset); + list->needDivider_ = true; + } + + if (JS_IsString(jsColor)) { + const char* jsColorStr = JS_ToCString(ctx, JS_ToString(ctx, jsColor)); + if (jsColorStr) { + std::string color(jsColorStr); + list->dividerColor_ = Color::FromString(color); + list->needDivider_ = true; + } + auto listTheme = list->GetTheme(); + if (list->dividerColor_ == Color::TRANSPARENT && listTheme) { + LOGD("Use the color of the theme"); + list->dividerColor_ = listTheme->GetDividerColor(); + } + } + JS_FreeValue(ctx, jsHeight); + JS_FreeValue(ctx, jsLength); + JS_FreeValue(ctx, jsOffset); + JS_FreeValue(ctx, jsColor); + return JS_DupValue(ctx, jsList); +} + +JSValue JSList::ScrollCallback(JSContext* ctx, JSValueConst jsList, int argc, JSValueConst* argv) +{ + if ((argc != 1) || !JS_IsFunction(ctx, argv[0])) { + LOGE("scrollCallback expects a function as parameter. Throwing exception."); + return JS_ThrowSyntaxError(ctx, "scrollCallback expects a function as parameter"); + } + QJSContext::Scope scope(ctx); + JSList* list = Unwrap(jsList); + + if (list == nullptr) { + LOGE("scrollCallback must be called on a JSList. Throwing exception."); + return JS_ThrowSyntaxError(ctx, "scrollCallback must be called on a JSList"); + } + + list->onScrollFunc_ = AceType::MakeRefPtr>( + ctx, JS_DupValue(ctx, argv[0]), ScrollEventInfoToJSValue); + return JS_DupValue(ctx, jsList); +} + +JSValue JSList::ReachStartCallback(JSContext* ctx, JSValueConst jsList, int argc, JSValueConst* argv) +{ + if ((argc != 1) || !JS_IsFunction(ctx, argv[0])) { + LOGE("reachStart expects a function as parameter. Throwing exception."); + return JS_ThrowSyntaxError(ctx, "reachStart expects a function as parameter"); + } + QJSContext::Scope scope(ctx); + JSList* list = Unwrap(jsList); + + if (list == nullptr) { + LOGE("reachStart must be called on a JSList. Throwing exception."); + return JS_ThrowSyntaxError(ctx, "reachStart must be called on a JSList"); + } + + list->onReachStartFunc_ = AceType::MakeRefPtr>( + ctx, JS_DupValue(ctx, argv[0]), ScrollEventInfoToJSValue); + return JS_DupValue(ctx, jsList); +} + +JSValue JSList::ReachEndCallback(JSContext* ctx, JSValueConst jsList, int argc, JSValueConst* argv) +{ + if ((argc != 1) || !JS_IsFunction(ctx, argv[0])) { + LOGE("reachEnd expects a function as parameter. Throwing exception."); + return JS_ThrowSyntaxError(ctx, "reachEnd expects a function as parameter"); + } + QJSContext::Scope scope(ctx); + JSList* list = Unwrap(jsList); + + if (list == nullptr) { + LOGE("reachEnd must be called on a JSList. Throwing exception."); + return JS_ThrowSyntaxError(ctx, "reachEnd must be called on a JSList"); + } + + list->onReachEndFunc_ = AceType::MakeRefPtr>( + ctx, JS_DupValue(ctx, argv[0]), ScrollEventInfoToJSValue); + return JS_DupValue(ctx, jsList); +} + +JSValue JSList::ScrollStopCallback(JSContext* ctx, JSValueConst jsList, int argc, JSValueConst* argv) +{ + if ((argc != 1) || !JS_IsFunction(ctx, argv[0])) { + LOGE("scrollStop expects a function as parameter. Throwing exception."); + return JS_ThrowSyntaxError(ctx, "scrollStop expects a function as parameter"); + } + QJSContext::Scope scope(ctx); + JSList* list = Unwrap(jsList); + + if (list == nullptr) { + LOGE("scrollStop must be called on a JSList. Throwing exception."); + return JS_ThrowSyntaxError(ctx, "scrollStop must be called on a JSList"); + } + + list->onScrollStopFunc_ = AceType::MakeRefPtr>( + ctx, JS_DupValue(ctx, argv[0]), ScrollEventInfoToJSValue); + return JS_DupValue(ctx, jsList); +} +#elif USE_V8_ENGINE +void JSList::ConstructorCallback(const v8::FunctionCallbackInfo& args) +{ + LOGD("ConstructorCallback"); + std::list children; + std::list>> jsChildren; + V8ChildrenFromArgs(args, children, jsChildren); + auto instance = V8Object::New(args.This(), children, jsChildren); + LOGD("ConstructorCallback children size %{public}lu", children.size()); + args.GetReturnValue().Set(instance->Get()); +} + +void JSList::SetDivider(const v8::FunctionCallbackInfo& info) +{ + LOGD("V8 set divider"); + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + ACE_DCHECK(isolate); + v8::Local context = isolate->GetCurrentContext(); + if (context.IsEmpty()) { + LOGE("Context Is Empty"); + return; + } + if (info[0]->IsObject()) { + LOGD("V8 need divider"); + needDivider_ = true; + v8::Local obj = info[0]->ToObject(context).ToLocalChecked(); + v8::MaybeLocal lengthValue = + obj->Get(context, v8::String::NewFromUtf8(isolate, "length").ToLocalChecked()); + v8::MaybeLocal heightValue = + obj->Get(context, v8::String::NewFromUtf8(isolate, "height").ToLocalChecked()); + v8::MaybeLocal offsetValue = + obj->Get(context, v8::String::NewFromUtf8(isolate, "offset").ToLocalChecked()); + v8::MaybeLocal colorValue = + obj->Get(context, v8::String::NewFromUtf8(isolate, "color").ToLocalChecked()); + + if (heightValue.ToLocalChecked()->IsNumber()) { + double height = V8ValueConvertor::fromV8Value(heightValue.ToLocalChecked()); + dividerHeight_ = Dimension(height); + } + if (lengthValue.ToLocalChecked()->IsNumber()) { + double length = V8ValueConvertor::fromV8Value(lengthValue.ToLocalChecked()); + dividerLength_ = Dimension(length); + } + if (offsetValue.ToLocalChecked()->IsNumber()) { + double offset = V8ValueConvertor::fromV8Value(offsetValue.ToLocalChecked()); + dividerOffset_ = Dimension(offset); + } + if (!colorValue.ToLocalChecked()->IsNumber()) { + std::string color = V8ValueConvertor::fromV8Value(colorValue.ToLocalChecked()); + dividerColor_ = Color::FromString(color); + } + RefPtr listTheme = GetTheme(); + if (dividerColor_ == Color::TRANSPARENT && listTheme) { + LOGD("Use the color of the theme"); + dividerColor_ = listTheme->GetDividerColor(); + } + } + info.GetReturnValue().Set(info.This()); +} + +void JSList::ScrollCallback(const v8::FunctionCallbackInfo& args) +{ + auto isolate = args.GetIsolate(); + v8::HandleScope scp(isolate); + if (args[0]->IsFunction()) { + onScrollFunc_ = AceType::MakeRefPtr>( + v8::Local::Cast(args[0]), ScrollEventInfoToJSValue); + } + args.GetReturnValue().Set(args.This()); +} + +void JSList::ReachStartCallback(const v8::FunctionCallbackInfo& args) +{ + auto isolate = args.GetIsolate(); + v8::HandleScope scp(isolate); + if (args[0]->IsFunction()) { + onReachStartFunc_ = AceType::MakeRefPtr>( + v8::Local::Cast(args[0]), ScrollEventInfoToJSValue); + } + args.GetReturnValue().Set(args.This()); +} + +void JSList::ReachEndCallback(const v8::FunctionCallbackInfo& args) +{ + auto isolate = args.GetIsolate(); + v8::HandleScope scp(isolate); + if (args[0]->IsFunction()) { + onReachEndFunc_ = AceType::MakeRefPtr>( + v8::Local::Cast(args[0]), ScrollEventInfoToJSValue); + } + args.GetReturnValue().Set(args.This()); +} + +void JSList::ScrollStopCallback(const v8::FunctionCallbackInfo& args) +{ + auto isolate = args.GetIsolate(); + v8::HandleScope scp(isolate); + if (args[0]->IsFunction()) { + onScrollStopFunc_ = AceType::MakeRefPtr>( + v8::Local::Cast(args[0]), ScrollEventInfoToJSValue); + } + args.GetReturnValue().Set(args.This()); +} +#endif + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/jsview/js_list.h b/frameworks/bridge/declarative_frontend/jsview/js_list.h new file mode 100644 index 00000000..43bc3ebd --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_list.h @@ -0,0 +1,130 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_LIST_H +#define FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_LIST_H + +#include "base/json/json_util.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_container_base.h" +#include "frameworks/core/components/list/list_component.h" +#ifdef USE_QUICKJS_ENGINE +#include "frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_function.h" +#endif + +#ifdef USE_V8_ENGINE +#include "frameworks/bridge/declarative_frontend/engine/v8/functions/v8_function.h" +#endif + +namespace OHOS::Ace::Framework { + +enum class Direction { + COLUMN = 0, + ROW, +}; + +class JSList : public JSContainerBase { + DECLARE_ACE_TYPE(JSList, JSContainerBase); + +public: + JSList() = delete; +#ifdef USE_QUICKJS_ENGINE + JSList(const std::list& children, std::list jsChildren); +#else + JSList(const std::list& children, + std::list>> jsChildren); +#endif + ~JSList(); + +public: + static void JSBind(BindingTarget globalObj); + RefPtr CreateSpecializedComponent() override; + std::vector> CreateInteractableComponents() override; + +#ifdef USE_V8_ENGINE + static void ConstructorCallback(const v8::FunctionCallbackInfo& args); +#elif USE_QUICKJS_ENGINE + static JSValue ConstructorCallback(JSContext* ctx, JSValueConst new_target, int argc, JSValueConst* argv); + static void QjsDestructor(JSRuntime* rt, JSList* ptr); + static void QjsGcMark(JSRuntime* rt, JSValueConst val, JS_MarkFunc* markFunc); + virtual void MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc) override; + virtual void ReleaseRT(JSRuntime* rt) override; +#endif + +#ifdef USE_V8_ENGINE + // Functions called from JS to register List callback function for event with v8 engine. + void ScrollCallback(const v8::FunctionCallbackInfo& args); + void ReachStartCallback(const v8::FunctionCallbackInfo& args); + void ReachEndCallback(const v8::FunctionCallbackInfo& args); + void ScrollStopCallback(const v8::FunctionCallbackInfo& args); + + // Functions called from JS to register List callback function for divider attributes with v8 engine. + void SetDivider(const v8::FunctionCallbackInfo& info); +#elif USE_QUICKJS_ENGINE + // Functions called from JS to register List callback function for event with qjs engine. + JSValue ScrollCallback(JSContext* ctx, JSValueConst jsList, int argc, JSValueConst* argv); + JSValue ReachStartCallback(JSContext* ctx, JSValueConst jsList, int argc, JSValueConst* argv); + JSValue ReachEndCallback(JSContext* ctx, JSValueConst jsList, int argc, JSValueConst* argv); + JSValue ScrollStopCallback(JSContext* ctx, JSValueConst jsList, int argc, JSValueConst* argv); + + // Functions called from JS to register List callback function for divider attributes with qjs engine. + JSValue SetDivider(JSContext* ctx, JSValueConst jsList, int argc, JSValueConst* argv); +#endif + +protected: + void SetFlexDirection(int32_t flexDirection); + void SetScrollBarState(int32_t state); + void SetScrollEffect(int32_t scrollEffect); + void SetInitialIndex(int32_t initialIndex); + void HandleScrollEvent(const BaseEventInfo& param); + +private: + void InitScrollBarTheme(); + void InitDivider(const RefPtr& child); + + FlexDirection flexDirection_ { FlexDirection::COLUMN }; + + // List scrollBar, on or off or auto + RefPtr scrollBar_; + DisplayMode displayMode_ = DisplayMode::OFF; + + // List edgeEffect, spring or fade or none + EdgeEffect edgeEffect_ = EdgeEffect::SPRING; + + // List initialIndex + int32_t initialIndex_ = 0; + + // List divider + bool needDivider_ = false; + Dimension dividerHeight_ = DIVIDER_DEFAULT_HEIGHT; + Dimension dividerLength_; + Dimension dividerOffset_; + Color dividerColor_ = Color::BLACK; + +#ifdef USE_V8_ENGINE + RefPtr> onScrollFunc_; + RefPtr> onReachStartFunc_; + RefPtr> onReachEndFunc_; + RefPtr> onScrollStopFunc_; +#elif USE_QUICKJS_ENGINE + RefPtr> onScrollFunc_; + RefPtr> onReachStartFunc_; + RefPtr> onReachEndFunc_; + RefPtr> onScrollStopFunc_; +#endif +}; + +} // namespace OHOS::Ace::Framework + +#endif // FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_LIST_H diff --git a/frameworks/bridge/declarative_frontend/jsview/js_list_item.cpp b/frameworks/bridge/declarative_frontend/jsview/js_list_item.cpp new file mode 100644 index 00000000..138f97bc --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_list_item.cpp @@ -0,0 +1,140 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/declarative_frontend/jsview/js_list_item.h" + +#include "core/components/box/box_base_component.h" +#include "core/components/flex/flex_component.h" + +namespace OHOS::Ace::Framework { + +#ifdef USE_QUICKJS_ENGINE +JSListItem::JSListItem(const std::list& children, std::list jsChildren) + : JSContainerBase(children, jsChildren) +#else +JSListItem::JSListItem(const std::list& children, + std::list>> jsChildren) + : JSContainerBase(children, jsChildren) +#endif +{ + LOGD("JSListItem, children size is %{public}lu", children_.size()); +} + +JSListItem::~JSListItem() +{ + LOGI("Destroy: JSListItem"); +}; + +RefPtr JSListItem::CreateSpecializedComponent() +{ + LOGD("Create component: ListItem"); + auto child = children_.front(); + if (!child) { + LOGE("ListItem children is null"); + return nullptr; + } + auto component = child->CreateComponent(); + RefPtr listItemComponent = + AceType::MakeRefPtr("default", RefPtr()); + RefPtr flexComponent = AceType::MakeRefPtr( + FlexDirection::COLUMN, FlexAlign::FLEX_START, FlexAlign::FLEX_START, std::list>()); + flexComponent->AppendChild(component); + listItemComponent->SetChild(flexComponent); + listItemComponent->SetSupportClick(false); + return AceType::MakeRefPtr(GetUniqueKey(), "wrapper", std::move(listItemComponent)); +} + +std::vector> JSListItem::CreateInteractableComponents() +{ + return JSInteractableView::CreateComponents(); +} + +#ifdef USE_QUICKJS_ENGINE + +void JSListItem::MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc) +{ + LOGD("JSListItem => MarkGC: Mark value for GC start"); + JSContainerBase::MarkGC(rt, markFunc); + LOGD("JSListItem => MarkGC: Mark value for GC end"); +} + +void JSListItem::ReleaseRT(JSRuntime* rt) +{ + LOGD("JSListItem => release start"); + for (JSValue const& jsChild : jsChildren_) { + JS_FreeValueRT(rt, jsChild); + } + jsChildren_.clear(); + LOGD("JSListItem => release end"); +} + +// STATIC qjs_class_bindings +JSValue JSListItem::ConstructorCallback(JSContext* ctx, JSValueConst new_target, int argc, JSValueConst* argv) +{ + ACE_SCOPED_TRACE("JSList::ConstructorCallback"); + QJSContext::Scope scope(ctx); + auto [children, jsChildren] = JsChildrenFromArgs(ctx, argc, argv); + JSListItem* item = new JSListItem(children, jsChildren); + return Wrap(new_target, item); +} + +void JSListItem::QjsDestructor(JSRuntime* rt, JSListItem* view) +{ + LOGD("JSListItem(QjsDestructor) start"); + if (!view) { + return; + } + view->ReleaseRT(rt); + delete view; + view = nullptr; + LOGD("JSListItem(QjsDestructor) end"); +} + +void JSListItem::QjsGcMark(JSRuntime* rt, JSValueConst val, JS_MarkFunc* markFunc) +{ + LOGD("JSListItem(QjsGcMark) start"); + JSListItem* item = Unwrap(val); + if (!item) { + return; + } + item->MarkGC(rt, markFunc); + LOGD("JSListItem(QjsGcMark) end"); +} + +#endif // USE_QUICKJS_ENGINE + +void JSListItem::JSBind(BindingTarget globalObj) +{ + JSClass::Declare("ListItem"); + JSClass::Inherit(); + JSClass::CustomMethod("onClick", &JSInteractableView::JsOnClick); + JSClass::CustomMethod("onTouch", &JSInteractableView::JsOnTouch); + JSClass::Bind(globalObj, ConstructorCallback); +} + +#ifdef USE_V8_ENGINE +void JSListItem::ConstructorCallback(const v8::FunctionCallbackInfo& args) +{ + LOGD("ConstructorCallback"); + std::list children; + std::list>> jsChildren; + V8ChildrenFromArgs(args, children, jsChildren); + auto instance = V8Object::New(args.This(), children, jsChildren); + args.GetReturnValue().Set(instance->Get()); +} + +#endif + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/jsview/js_list_item.h b/frameworks/bridge/declarative_frontend/jsview/js_list_item.h new file mode 100644 index 00000000..a9ba1e55 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_list_item.h @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_LIST_ITEM_H +#define FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_LIST_ITEM_H + +#include "frameworks/bridge/declarative_frontend/jsview/js_container_base.h" +#include "frameworks/core/components/list/list_item_component.h" + +namespace OHOS::Ace::Framework { + +class JSListItem : public JSContainerBase { + DECLARE_ACE_TYPE(JSListItem, JSContainerBase); + +public: + JSListItem() = delete; +#ifdef USE_QUICKJS_ENGINE + JSListItem(const std::list& children, std::list jsChildren); +#else + JSListItem(const std::list& children, + std::list>> jsChildren); +#endif + ~JSListItem(); + + virtual RefPtr CreateSpecializedComponent() override; + std::vector> CreateInteractableComponents() override; + + static void JSBind(BindingTarget globalObj); + +#ifdef USE_QUICKJS_ENGINE + virtual void MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc) override; + virtual void ReleaseRT(JSRuntime* rt) override; + + static JSValue ConstructorCallback(JSContext* ctx, JSValueConst new_target, int argc, JSValueConst* argv); + static void QjsBind(); + static void QjsDestructor(JSRuntime* rt, JSListItem* ptr); + static void QjsGcMark(JSRuntime* rt, JSValueConst val, JS_MarkFunc* markFunc); +#endif + +#ifdef USE_V8_ENGINE + static void ConstructorCallback(const v8::FunctionCallbackInfo& args); +#endif +}; + +} // namespace OHOS::Ace::Framework + +#endif // FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_LIST_ITEM_H diff --git a/frameworks/bridge/declarative_frontend/jsview/js_navigator.cpp b/frameworks/bridge/declarative_frontend/jsview/js_navigator.cpp new file mode 100644 index 00000000..47e2d11e --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_navigator.cpp @@ -0,0 +1,126 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/declarative_frontend/jsview/js_navigator.h" + +namespace OHOS::Ace::Framework { + +#ifdef USE_QUICKJS_ENGINE +JSNavigator::JSNavigator(const std::list& children, std::list jsChildren) + : JSContainerBase(children, jsChildren) +#else +JSNavigator::JSNavigator(const std::list& children, + std::list>> jsChildren) + : JSContainerBase(children, jsChildren) +#endif +{} + +RefPtr JSNavigator::CreateSpecializedComponent() +{ + LOGD("Create component: JSNavigator"); + auto child = children_.front(); + if (!child) { + LOGE("JSNavigator children is null"); + return nullptr; + } + auto component = child->CreateComponent(); + auto navigatorComponent = AceType::MakeRefPtr(component); + + navigatorComponent->SetUri(uri_); + navigatorComponent->SetType(type_); + navigatorComponent->SetActive(active_); + + return navigatorComponent; +} + +void JSNavigator::JSBind(BindingTarget globalObj) +{ + JSClass::Declare("Navigator"); + JSClass::Inherit(); + MethodOptions opt = MethodOptions::RETURN_SELF; + JSClass::Method("target", &JSNavigator::SetUri, opt); + JSClass::Method("type", &JSNavigator::SetType, opt); + JSClass::Method("active", &JSNavigator::SetActive, opt); + JSClass::CustomMethod("onTouch", &JSInteractableView::JsOnTouch); + JSClass::CustomMethod("onClick", &JSInteractableView::JsOnClick); + JSClass::Bind(globalObj, ConstructorCallback); +} + +#ifdef USE_QUICKJS_ENGINE +void JSNavigator::MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc) +{ + LOGD("JSNavigator => MarkGC: start"); + JSContainerBase::MarkGC(rt, markFunc); + JSInteractableView::MarkGC(rt, markFunc); + LOGD("JSNavigator => MarkGC: end"); +} + +void JSNavigator::ReleaseRT(JSRuntime* rt) +{ + LOGD("JSNavigator => release children: start"); + JSContainerBase::ReleaseRT(rt); + JSInteractableView::ReleaseRT(rt); + LOGD("JSNavigator => release children: end"); +} + +void JSNavigator::QjsDestructor(JSRuntime* rt, JSNavigator* view) +{ + LOGD("JSNavigator(QjsDestructor) start"); + if (!view) { + return; + } + + view->ReleaseRT(rt); + delete view; + view = nullptr; + LOGD("JSNavigator(QjsDestructor) end"); +} + +void JSNavigator::QjsGcMark(JSRuntime* rt, JSValueConst val, JS_MarkFunc* markFunc) +{ + LOGD("JSNavigator(QjsGcMark) start"); + JSNavigator* view = Unwrap(val); + if (!view) { + return; + } + + view->MarkGC(rt, markFunc); + LOGD("JSNavigator(QjsGcMark) end"); +} + +// STATIC qjs_class_bindings +JSValue JSNavigator::ConstructorCallback(JSContext* ctx, JSValueConst new_target, int argc, JSValueConst* argv) +{ + ACE_SCOPED_TRACE("JSNavigator::ConstructorCallback"); + QJSContext::Scope scope(ctx); + auto [children, jsChildren] = JsChildrenFromArgs(ctx, argc, argv); + JSNavigator* navigator = new JSNavigator(children, jsChildren); + return Wrap(new_target, navigator); +} +#endif + +#ifdef USE_V8_ENGINE +void JSNavigator::ConstructorCallback(const v8::FunctionCallbackInfo& args) +{ + LOGD("ConstructorCallback"); + std::list children; + std::list>> jsChildren; + V8ChildrenFromArgs(args, children, jsChildren); + auto instance = V8Object::New(args.This(), children, jsChildren); + args.GetReturnValue().Set(instance->Get()); +} +#endif + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/jsview/js_navigator.h b/frameworks/bridge/declarative_frontend/jsview/js_navigator.h new file mode 100644 index 00000000..43cf2a03 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_navigator.h @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_NAVIGATOR_H +#define FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_NAVIGATOR_H + +#include "core/components/navigator/navigator_component.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_container_base.h" + +namespace OHOS::Ace::Framework { + +class JSNavigator : public JSContainerBase { + DECLARE_ACE_TYPE(JSNavigator, JSContainerBase); + +public: + JSNavigator() = delete; +#ifdef USE_QUICKJS_ENGINE + JSNavigator(const std::list& children, std::list jsChildren); +#else + JSNavigator(const std::list& children, + std::list>> jsChildren); +#endif + ~JSNavigator() {}; + + virtual RefPtr CreateSpecializedComponent() override; + + static void JSBind(BindingTarget globalObj); + + void SetUri(const std::string& uri) + { + uri_ = uri; + if (type_ == NavigatorType::DEFAULT) { + // default type is page push + type_ = NavigatorType::PUSH; + } + } + + void SetType(uint8_t type) + { + type_ = NavigatorType(type); + } + + void SetActive(bool active) + { + active_ = active; + } + +#ifdef USE_QUICKJS_ENGINE + virtual void MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc) override; + virtual void ReleaseRT(JSRuntime* rt) override; + + static void QjsDestructor(JSRuntime* rt, JSNavigator* ptr); + static void QjsGcMark(JSRuntime* rt, JSValueConst val, JS_MarkFunc* markFunc); + + static JSValue ConstructorCallback(JSContext* ctx, JSValueConst new_target, int argc, JSValueConst* argv); +#endif + +#ifdef USE_V8_ENGINE + static void ConstructorCallback(const v8::FunctionCallbackInfo& args); +#endif + +private: + std::string uri_ = ""; + NavigatorType type_ = NavigatorType::DEFAULT; + bool active_ = false; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_NAVIGATOR_H diff --git a/frameworks/bridge/declarative_frontend/jsview/js_pan_handler.cpp b/frameworks/bridge/declarative_frontend/jsview/js_pan_handler.cpp new file mode 100644 index 00000000..86c0ff92 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_pan_handler.cpp @@ -0,0 +1,229 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/declarative_frontend/jsview/js_pan_handler.h" + +namespace OHOS::Ace::Framework { + +RefPtr JSPanHandler::CreateComponent() +{ + LOGD("JSPanHandler wrapComponent"); + auto gestureComponent = AceType::MakeRefPtr(); + + if (jsOnStartFunc_) { + auto dragStartId = EventMarker( + [func = std::move(jsOnStartFunc_)](const BaseEventInfo* info) { + const DragStartInfo* dragStartInfo = static_cast(info); + + if (!dragStartInfo) { + LOGE("Error processing event. Not an instance of DragStartInfo"); + return; + } + func->execute(*dragStartInfo); + }, + "dragStart", 0); + gestureComponent->SetOnVerticalDragStartId(dragStartId); + } + + if (jsOnUpdateFunc_) { + auto dragUpdateId = EventMarker( + [func = std::move(jsOnUpdateFunc_)](const BaseEventInfo* info) { + const DragUpdateInfo* dragUpdateInfo = static_cast(info); + + if (!dragUpdateInfo) { + LOGE("Error processing event. Not an instance of DragUpdateInfo"); + return; + } + func->execute(*dragUpdateInfo); + }, + "dragUpdate", 0); + gestureComponent->SetOnVerticalDragUpdateId(dragUpdateId); + } + + if (jsOnEndFunc_) { + auto dragEndId = EventMarker( + [func = std::move(jsOnEndFunc_)](const BaseEventInfo* info) { + const DragEndInfo* dragEndInfo = static_cast(info); + + if (!dragEndInfo) { + LOGE("Error processing event. Not an instance of DragEndInfo"); + return; + } + func->execute(*dragEndInfo); + }, + "dragEnd", 0); + gestureComponent->SetOnVerticalDragEndId(dragEndId); + } + + if (jsOnCancelFunc_) { + auto dragCancelId = EventMarker( + [func = std::move(jsOnCancelFunc_)](const BaseEventInfo* info) { func->execute(); }, "dragCancel", 0); + gestureComponent->SetOnVerticalDragCancelId(dragCancelId); + } + + return gestureComponent; +} + +#ifdef USE_QUICKJS_ENGINE +void JSPanHandler::MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc) +{ + LOGD("JSPanHandler => MarkGC: start"); + LOGD("JSPanHandler => MarkGC: end"); +} + +void JSPanHandler::ReleaseRT(JSRuntime* rt) +{ + LOGD("JSPanHandler => release: start"); + LOGD("JSPanHandler => release: end"); +} + +// STATIC + +JSValue JSPanHandler::JsHandlerOnTouch( + PanEvent action, JSContext* ctx, JSValueConst jsObj, int argc, JSValueConst* argv) +{ + if ((argc != 1) || !JS_IsFunction(ctx, argv[0])) { + LOGE("onCick expects a function as parameter. Throwing exception."); + return JS_EXCEPTION; + } + + QJSContext::Scope scope(ctx); + // Dup and Free shoulj happen inside the QJSTouchFunction + RefPtr handlerFunc = AceType::MakeRefPtr(ctx, JS_DupValue(ctx, argv[0])); + + // TODO: Release previously allocated functions here + switch (action) { + case PanEvent::DOWN: + jsOnStartFunc_ = handlerFunc; + break; + case TouchEvent::UP: + jsOnUpdateFunc_ = handlerFunc; + break; + case TouchEvent::MOVE: + jsOnEndFunc_ = handlerFunc; + break; + case TouchEvent::CANCEL: + jsOnCancelFunc_ = handlerFunc; + break; + } + return JS_DupValue(ctx, jsObj); // for call chaining +} + +JSValue JSPanHandler::JsHandlerOnDown(JSContext* ctx, JSValueConst jsObj, int argc, JSValueConst* argv) +{ + return JSPanHandler::JsHandlerOnTouch(TouchEvent::DOWN, ctx, jsObj, argc, argv); +} + +JSValue JSPanHandler::JsHandlerOnUp(JSContext* ctx, JSValueConst jsObj, int argc, JSValueConst* argv) +{ + return JSPanHandler::JsHandlerOnTouch(PanEvent::UP, ctx, jsObj, argc, argv); +} + +JSValue JSPanHandler::JsHandlerOnMove(JSContext* ctx, JSValueConst jsObj, int argc, JSValueConst* argv) +{ + return JSPanHandler::JsHandlerOnTouch(PanEvent::MOVE, ctx, jsObj, argc, argv); +} + +JSValue JSPanHandler::JsHandlerOnCancel(JSContext* ctx, JSValueConst jsObj, int argc, JSValueConst* argv) +{ + return JSPanHandler::JsHandlerOnTouch(PanEvent::CANCEL, ctx, jsObj, argc, argv); +} + +// STATIC + +void JSPanHandler::QjsDestructor(JSRuntime* rt, JSPanHandler* handler) +{ + LOGD("JSPanHandler(QjsDestructor) start"); + + if (!handler) + return; + + handler->ReleaseRT(rt); + delete handler; + LOGD("JSPanHandler(QjsDestructor) end"); +} + +void JSPanHandler::QjsGcMark(JSRuntime* rt, JSValueConst val, JS_MarkFunc* markFunc) +{ + LOGD("JSPanHandler(QjsGcMark) start"); + + JSPanHandler* handler = Unwrap(val); + if (!handler) + return; + + handler->MarkGC(rt, markFunc); + LOGD("JSPanHandler(QjsGcMark) end"); +} +#endif + +#ifdef USE_V8_ENGINE + +void JSPanHandler::JsHandlerOnPan(PanEvent action, const v8::FunctionCallbackInfo& args) +{ + auto isolate = args.GetIsolate(); + v8::HandleScope scp(isolate); + LOGD("JSPanHandler JsHandlerOnPan"); + if (args[0]->IsFunction()) { + v8::Local jsFunction = v8::Local::Cast(args[0]); + RefPtr handlerFunc = AceType::MakeRefPtr(jsFunction); + switch (action) { + case PanEvent::START: + jsOnStartFunc_ = handlerFunc; + break; + case PanEvent::UPDATE: + jsOnUpdateFunc_ = handlerFunc; + break; + case PanEvent::END: + jsOnEndFunc_ = handlerFunc; + break; + case PanEvent::CANCEL: + jsOnCancelFunc_ = handlerFunc; + break; + } + } + args.GetReturnValue().Set(args.This()); +} + +void JSPanHandler::JsHandlerOnStart(const v8::FunctionCallbackInfo& args) +{ + JSPanHandler::JsHandlerOnPan(PanEvent::START, args); +} + +void JSPanHandler::JsHandlerOnUpdate(const v8::FunctionCallbackInfo& args) +{ + JSPanHandler::JsHandlerOnPan(PanEvent::UPDATE, args); +} + +void JSPanHandler::JsHandlerOnEnd(const v8::FunctionCallbackInfo& args) +{ + JSPanHandler::JsHandlerOnPan(PanEvent::END, args); +} + +void JSPanHandler::JsHandlerOnCancel(const v8::FunctionCallbackInfo& args) +{ + JSPanHandler::JsHandlerOnPan(PanEvent::CANCEL, args); +} + +#endif +void JSPanHandler::JSBind(BindingTarget globalObj) +{ + JSClass::Declare("PanHandler"); + JSClass::CustomMethod("onStart", &JSPanHandler::JsHandlerOnStart); + JSClass::CustomMethod("onUpdate", &JSPanHandler::JsHandlerOnUpdate); + JSClass::CustomMethod("onEnd", &JSPanHandler::JsHandlerOnEnd); + JSClass::CustomMethod("onCancel", &JSPanHandler::JsHandlerOnCancel); + JSClass::Bind<>(globalObj); +} +}; // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/jsview/js_pan_handler.h b/frameworks/bridge/declarative_frontend/jsview/js_pan_handler.h new file mode 100644 index 00000000..c0ef8d21 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_pan_handler.h @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_ACE_ENGINE_FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JSVIEW_JS_PAN_HANDLER_H +#define FOUNDATION_ACE_ACE_ENGINE_FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JSVIEW_JS_PAN_HANDLER_H + +#include "core/components/gesture_listener/gesture_listener_component.h" +#include "core/event/ace_event_handler.h" +#ifdef USE_QUICKJS_ENGINE +#include "frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_touch_function.h" +#endif + +#ifdef USE_V8_ENGINE +#include "frameworks/bridge/declarative_frontend/engine/v8/functions/v8_pan_function.h" +#endif + +#include "frameworks/bridge/declarative_frontend/jsview/js_view_abstract.h" + +namespace OHOS::Ace::Framework { + +class JSPanHandler { +private: + enum class PanEvent { START, UPDATE, END, CANCEL }; + +private: + RefPtr component_; +#ifdef USE_QUICKJS_ENGINE + RefPtr jsOnStartFunc_; + RefPtr jsOnUpdateFunc_; + RefPtr jsOnEndFunc_; + RefPtr jsOnCancelFunc_; +#elif USE_V8_ENGINE + RefPtr jsOnStartFunc_; + RefPtr jsOnUpdateFunc_; + RefPtr jsOnEndFunc_; + RefPtr jsOnCancelFunc_; +#endif + +public: + JSPanHandler() = default; + virtual ~JSPanHandler() + { + LOGD("Destroy: JSPanHandler"); + } + + virtual RefPtr CreateComponent(); + + static void JSBind(BindingTarget globalObj); + +#ifdef USE_QUICKJS_ENGINE + virtual void MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc); + virtual void ReleaseRT(JSRuntime* rt); + + JSValue JsHandlerOnTouch(PanEvent action, JSContext* ctx, JSValueConst jsObj, int argc, JSValueConst* argv); + JSValue JsHandlerOnDown(JSContext* ctx, JSValueConst jsObj, int argc, JSValueConst* argv); + JSValue JsHandlerOnUp(JSContext* ctx, JSValueConst jsObj, int argc, JSValueConst* argv); + JSValue JsHandlerOnMove(JSContext* ctx, JSValueConst jsObj, int argc, JSValueConst* argv); + JSValue JsHandlerOnCancel(JSContext* ctx, JSValueConst jsObj, int argc, JSValueConst* argv); + + static void QjsDestructor(JSRuntime* rt, JSPanHandler* ptr); + static void QjsGcMark(JSRuntime* rt, JSValueConst val, JS_MarkFunc* markFunc); +#elif USE_V8_ENGINE + void JsHandlerOnPan(PanEvent action, const v8::FunctionCallbackInfo& args); + void JsHandlerOnStart(const v8::FunctionCallbackInfo& args); + void JsHandlerOnUpdate(const v8::FunctionCallbackInfo& args); + void JsHandlerOnEnd(const v8::FunctionCallbackInfo& args); + void JsHandlerOnCancel(const v8::FunctionCallbackInfo& args); +#endif + +}; // JSPanHandler + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_ACE_ENGINE_FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JSVIEW_JS_PAN_HANDLER_H diff --git a/frameworks/bridge/declarative_frontend/jsview/js_row.cpp b/frameworks/bridge/declarative_frontend/jsview/js_row.cpp new file mode 100644 index 00000000..3486bd9e --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_row.cpp @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/declarative_frontend/jsview/js_row.h" + +#include "base/log/ace_trace.h" + +namespace OHOS::Ace::Framework { + +template<> +RefPtr JSFlex::ComponentForType( + FlexAlign mainAxisAlign, FlexAlign crossAxisAlign, const std::list>& children) +{ + auto rowComponent = AceType::MakeRefPtr(mainAxisAlign, crossAxisAlign, children); + if (rowComponent && GetIsDefHeight()) { + rowComponent->SetCrossAxisSize(CrossAxisSize::MAX); + } + return rowComponent; +} + +bool JSRow::IsHorizontal() const +{ + return true; +} + +void JSRow::Destroy(JSViewAbstract* parentCustomView) +{ + LOGD("JSRow::Destroy start"); + JSContainerBase::Destroy(parentCustomView); + LOGD("JSRow::Destroy end"); +} + +#ifdef USE_QUICKJS_ENGINE +// STATIC qjs_class_bindings +JSValue JSRow::ConstructorCallback(JSContext* ctx, JSValueConst new_target, int argc, JSValueConst* argv) +{ + ACE_SCOPED_TRACE("JSRow::ConstructorCallback"); + auto flex = [](std::list children, std::list jsChildren) { + return new JSRow(children, jsChildren); + }; + return JSFlex::JsFlexConstructorInternal(ctx, new_target, argc, argv, flex); +} + +void JSRow::QjsDestructor(JSRuntime* rt, JSRow* view) +{ + LOGD("JSRow(QjsDestructor) start"); + if (!view) + return; + view->ReleaseRT(rt); + delete view; + LOGD("JSRow(QjsDestructor) end"); +} + +void JSRow::QjsGcMark(JSRuntime* rt, JSValueConst val, JS_MarkFunc* markFunc) +{ + LOGD("JSRow(QjsGcMark) start"); + JSRow* view = Unwrap(val); + if (!view) + return; + + view->MarkGC(rt, markFunc); + LOGD("JSRow(QjsGcMark) end"); +} +#endif // USE_QUICKJS_ENGINE + +void JSRow::JSBind(BindingTarget globalObj) +{ + JSClass::Declare("Row"); + JSClass::Inherit(); + + MethodOptions opt = MethodOptions::RETURN_SELF; + JSClass::Method("fillParent", &JSFlex::SetFillParent, opt); + JSClass::Method("wrapContent", &JSFlex::SetWrapContent, opt); + JSClass::Method("justifyContent", &JSFlex::SetJustifyContent, opt); + JSClass::Method("alignItems", &JSFlex::SetAlignItems, opt); + JSClass::Method("wrap", &JSFlex::SetWrap, opt); + JSClass::Method("alignContent", &JSFlex::SetAlignContent, opt); + JSClass::CustomMethod("onTouch", &JSInteractableView::JsOnTouch); + JSClass::CustomMethod("onClick", &JSInteractableView::JsOnClick); + JSClass::Bind(globalObj, ConstructorCallback); +} + +#ifdef USE_V8_ENGINE +void JSRow::ConstructorCallback(const v8::FunctionCallbackInfo& args) +{ + LOGD("ConstructorCallback"); + std::list children; + std::list>> jsChildren; + V8FlexConstructorInternal(args, children, jsChildren); + auto instance = V8Object::New(args.This(), children, jsChildren); + args.GetReturnValue().Set(instance->Get()); +} + +#endif + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/jsview/js_row.h b/frameworks/bridge/declarative_frontend/jsview/js_row.h new file mode 100644 index 00000000..437f5299 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_row.h @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_ROW_H +#define FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_ROW_H + +#include "frameworks/bridge/declarative_frontend/jsview/js_flex.h" + +namespace OHOS::Ace::Framework { + +class JSRow : public JSFlex { + DECLARE_ACE_TYPE(JSRow, JSContainerBase); + +public: + JSRow() = delete; +#ifdef USE_V8_ENGINE + JSRow(const std::list& children, + std::list>> jsChildren) +#else + JSRow(const std::list& children, std::list jsChildren) +#endif + : JSFlex(children, jsChildren) {}; + + ~JSRow() + { + LOGD("Destroy: JSRow"); + }; + + virtual void Destroy(JSViewAbstract* parentCustomView) override; + +protected: + bool IsHorizontal() const override; + +public: + static void JSBind(BindingTarget globalObj); + +#ifdef USE_QUICKJS_ENGINE + static JSValue ConstructorCallback(JSContext* ctx, JSValueConst new_target, int argc, JSValueConst* argv); + static void QjsDestructor(JSRuntime* rt, JSRow* ptr); + static void QjsGcMark(JSRuntime* rt, JSValueConst val, JS_MarkFunc* markFunc); +#elif USE_V8_ENGINE + static void ConstructorCallback(const v8::FunctionCallbackInfo& args); +#endif +}; + +} // namespace OHOS::Ace::Framework + +#endif // FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_ROW_H diff --git a/frameworks/bridge/declarative_frontend/jsview/js_sliding_panel.cpp b/frameworks/bridge/declarative_frontend/jsview/js_sliding_panel.cpp new file mode 100644 index 00000000..e1cc893a --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_sliding_panel.cpp @@ -0,0 +1,338 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/declarative_frontend/jsview/js_sliding_panel.h" + +#include +#include + +#include "core/components/foreach/foreach_component.h" +#include "core/components/panel/sliding_panel_component.h" + +namespace OHOS::Ace::Framework { +namespace { + +#ifdef USE_QUICKJS_ENGINE +JSValue SlidingPanelSizeChangeEventToJSValue(const SlidingPanelSizeChangeEvent& eventInfo, JSContext* ctx) +{ + JSValue eventObj = JS_NewObject(ctx); + JS_SetPropertyStr(ctx, eventObj, "width", JS_NewFloat64(ctx, eventInfo.GetWidth())); + JS_SetPropertyStr(ctx, eventObj, "height", JS_NewFloat64(ctx, eventInfo.GetHeight())); + + const PanelMode& mode = eventInfo.GetMode(); + if (mode == PanelMode::FULL) { + JS_SetPropertyStr(ctx, eventObj, "mode", JS_NewString(ctx, "full")); + } else if (mode == PanelMode::MINI) { + JS_SetPropertyStr(ctx, eventObj, "mode", JS_NewString(ctx, "mini")); + } else { + JS_SetPropertyStr(ctx, eventObj, "mode", JS_NewString(ctx, "half")); + } + return eventObj; +} +#elif USE_V8_ENGINE +v8::Local SlidingPanelSizeChangeEventToJSValue( + const SlidingPanelSizeChangeEvent& eventInfo, v8::Isolate* isolate) +{ + ACE_DCHECK(isolate); + auto context = isolate->GetCurrentContext(); + v8::Local obj = v8::Object::New(isolate); + std::string modeStr = "half"; + const PanelMode& mode = eventInfo.GetMode(); + if (mode == PanelMode::FULL) { + modeStr = "full"; + } else if (mode == PanelMode::MINI) { + modeStr = "mini"; + } + obj->Set(context, v8::String::NewFromUtf8(isolate, "mode").ToLocalChecked(), + v8::String::NewFromUtf8(isolate, modeStr.c_str()).ToLocalChecked()) + .ToChecked(); + obj->Set(context, v8::String::NewFromUtf8(isolate, "width").ToLocalChecked(), + v8::Number::New(isolate, eventInfo.GetWidth())) + .ToChecked(); + obj->Set(context, v8::String::NewFromUtf8(isolate, "height").ToLocalChecked(), + v8::Number::New(isolate, eventInfo.GetHeight())) + .ToChecked(); + return v8::Local(obj); +} +#endif + +} // namespace + +#ifdef USE_QUICKJS_ENGINE +JSSlidingPanel::JSSlidingPanel(const std::list& children, std::list jsChildren) + : JSContainerBase(children, jsChildren) +{ + LOGD("JSSlidingPanel(children: [%lu])", children_.size()); +} +#elif USE_V8_ENGINE +JSSlidingPanel::JSSlidingPanel(const std::list& children, + std::list>> jsChildren) + : JSContainerBase(children, jsChildren) +{ + LOGD("JSSlidingPanel(children: [%lu])", children_.size()); +} +#endif + +JSSlidingPanel::~JSSlidingPanel() +{ + LOGD("Destroy: JSSlidingPanel"); +}; + +void JSSlidingPanel::Destroy(JSViewAbstract* parentCustomView) +{ + LOGD("JSSlidingPanel::Destroy start"); + JSContainerBase::Destroy(parentCustomView); + LOGD("JSSlidingPanel::Destroy end"); +} + +RefPtr JSSlidingPanel::CreateSpecializedComponent() +{ + std::list> componentChildren; + for (const auto& jsViewChild : children_) { + if (!jsViewChild) { + continue; + } + auto component = jsViewChild->CreateComponent(); + if (AceType::TypeName() == AceType::TypeName(component)) { + auto children = AceType::DynamicCast(component)->GetChildren(); + std::copy(children.begin(), children.end(), std::back_insert_iterator(componentChildren)); + } else { + componentChildren.emplace_back(component); + } + } + // support only one child + RefPtr child; + if (!componentChildren.empty()) { + child = componentChildren.front(); + } + RefPtr panelComponent = + AceType::MakeRefPtr("PanelComponent", "Wrapper", child); + PreparePanelComponent(panelComponent); + + return SlidingPanelComponent::Create(panelComponent); +} + +std::vector> JSSlidingPanel::CreateInteractableComponents() +{ + return JSInteractableView::CreateComponents(); +} + +void JSSlidingPanel::JSBind(BindingTarget globalObj) +{ + JSClass::Declare("Panel"); + JSClass::Inherit(); + MethodOptions opt = MethodOptions::RETURN_SELF; + JSClass::Method("dragBar", &JSSlidingPanel::SetHasDragBar, opt); + JSClass::Method("show", &JSSlidingPanel::SetShow, opt); + JSClass::Method("mode", &JSSlidingPanel::SetPanelMode, opt); + JSClass::Method("type", &JSSlidingPanel::SetPanelType, opt); + JSClass::Method("fullHeight", &JSSlidingPanel::SetFullHeight, opt); + JSClass::Method("halfHeight", &JSSlidingPanel::SetHalfHeight, opt); + JSClass::Method("miniHeight", &JSSlidingPanel::SetMiniHeight, opt); + JSClass::CustomMethod("onTouch", &JSInteractableView::JsOnTouch); + JSClass::CustomMethod("onClick", &JSInteractableView::JsOnClick); + JSClass::CustomMethod("onChange", &JSSlidingPanel::SetOnSizeChange); + JSClass::Bind(globalObj, ConstructorCallback); +} + +#ifdef USE_V8_ENGINE +void JSSlidingPanel::ConstructorCallback(const v8::FunctionCallbackInfo& args) +{ + LOGD("ConstructorCallback"); + std::list children; + std::list>> jsChildren; + V8ChildrenFromArgs(args, children, jsChildren); + auto instance = V8Object::New(args.This(), children, jsChildren); + args.GetReturnValue().Set(instance->Get()); +} + +void JSSlidingPanel::SetOnSizeChange(const v8::FunctionCallbackInfo& args) +{ + auto isolate = args.GetIsolate(); + v8::HandleScope scp(isolate); + if (args[0]->IsFunction()) { + onSizeChangeFunc_ = AceType::MakeRefPtr>( + v8::Local::Cast(args[0]), SlidingPanelSizeChangeEventToJSValue); + } + args.GetReturnValue().Set(args.This()); +} +#elif USE_QUICKJS_ENGINE +void JSSlidingPanel::MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc) +{ + LOGD("JSSlidingPanel => MarkGC: start"); + JSContainerBase::MarkGC(rt, markFunc); + + LOGD("JSSlidingPanel => MarkGC: end"); +} + +void JSSlidingPanel::ReleaseRT(JSRuntime* rt) +{ + LOGD("JSSlidingPanel => release children: start"); + JSContainerBase::ReleaseRT(rt); + + LOGD("JSSlidingPanel => release children: end"); +} + +// STATIC qjs_class_bindings +JSValue JSSlidingPanel::ConstructorCallback(JSContext* ctx, JSValueConst new_target, int argc, JSValueConst* argv) +{ + ACE_SCOPED_TRACE("JSSlidingPanel::ConstructorCallback"); + + QJSContext::Scope scope(ctx); + + auto [children, jsChildren] = JsChildrenFromArgs(ctx, argc, argv); + + JSSlidingPanel* panel = new JSSlidingPanel(children, jsChildren); + + return Wrap(new_target, panel); +} + +void JSSlidingPanel::QjsDestructor(JSRuntime* rt, JSSlidingPanel* view) +{ + LOGD("JSSlidingPanel(QjsDestructor) start"); + if (!view) { + return; + } + + view->ReleaseRT(rt); + delete view; + LOGD("JSSlidingPanel(QjsDestructor) end"); +} + +void JSSlidingPanel::QjsGcMark(JSRuntime* rt, JSValueConst val, JS_MarkFunc* markFunc) +{ + LOGD("JSSlidingPanel(QjsGcMark) start"); + JSSlidingPanel* view = Unwrap(val); + if (!view) { + return; + } + + view->MarkGC(rt, markFunc); + LOGD("JSSlidingPanel(QjsGcMark) end"); +} + +JSValue JSSlidingPanel::SetOnSizeChange(JSContext* ctx, JSValue this_value, int32_t argc, JSValue* argv) +{ + if ((argc != 1) || !JS_IsFunction(ctx, argv[0])) { + LOGE("sizeChange expects a function as parameter. Throwing exception."); + return JS_ThrowSyntaxError(ctx, "sizeChange() expect a function parameter. Throwing exception"); + } + + QJSContext::Scope scope(ctx); + // Dup and Free shoulj happen inside the QJSClickFunction + + onSizeChangeFunc_ = AceType::MakeRefPtr>( + ctx, JS_DupValue(ctx, argv[0]), SlidingPanelSizeChangeEventToJSValue); + + return JS_DupValue(ctx, this_value); // for call chaining +} + +#endif + +void JSSlidingPanel::PreparePanelComponent(RefPtr& panelComponent) +{ + // adjust panel mode + if (type_ == PanelType::TEMP_DISPLAY && mode_ == PanelMode::MINI) { + mode_ = PanelMode::HALF; + } else if (type_ == PanelType::MINI_BAR && mode_ == PanelMode::HALF) { + mode_ = PanelMode::MINI; + } + panelComponent->SetPanelMode(mode_); + panelComponent->SetPanelType(type_); + panelComponent->SetHasDragBar(hasDragBar_); + panelComponent->SetMiniHeight(miniHeight_); + panelComponent->SetHalfHeight(halfHeight_); + panelComponent->SetFullHeight(fullHeight_); + + if (!displayComponent_) { + displayComponent_ = AceType::MakeRefPtr(); + } + displayComponent_->SetVisible(isShow_ ? VisibleType::VISIBLE : VisibleType::GONE); + + if (onSizeChangeFunc_) { + auto onSizeChange = EventMarker([func = std::move(onSizeChangeFunc_)](const BaseEventInfo* param) { + auto sizeChange = TypeInfoHelper::DynamicCast(param); + if (!sizeChange) { + LOGE("HandleSizeChangeEvent, sizeChange == nullptr"); + return; + } + func->execute(*sizeChange); + }); + panelComponent->SetOnSizeChanged(onSizeChange); + } + + if (boxComponent_) { + panelComponent->SetHasBoxStyle(true); + panelComponent->SetHasDecorationStyle(true); + panelComponent->SetHasBackgroundColor(true); + panelComponent->SetHasBorderStyle(true); + panelComponent->SetBoxStyle(boxComponent_); + boxComponent_ = nullptr; + } else { + panelComponent->SetBoxStyle(AceType::MakeRefPtr()); + } +} + +void JSSlidingPanel::SetHasDragBar(bool hasDragBar) +{ + hasDragBar_ = hasDragBar; +} + +void JSSlidingPanel::SetShow(bool isShow) +{ + isShow_ = isShow; +} + +void JSSlidingPanel::SetPanelMode(int32_t mode) +{ + if (static_cast(PanelMode::HALF) == mode) { + mode_ = PanelMode::HALF; + } else if (static_cast(PanelMode::MINI) == mode) { + mode_ = PanelMode::MINI; + } else { + mode_ = PanelMode::FULL; + } +} + +void JSSlidingPanel::SetPanelType(int32_t type) +{ + if (static_cast(PanelType::MINI_BAR) == type) { + type_ = PanelType::MINI_BAR; + } else if (static_cast(PanelType::TEMP_DISPLAY) == type) { + type_ = PanelType::TEMP_DISPLAY; + } else { + type_ = PanelType::FOLDABLE_BAR; + } +} + +void JSSlidingPanel::SetMiniHeight(const std::string& height) +{ + miniHeight_.first = StringUtils::StringToDimension(height, true); + miniHeight_.second = true; +} + +void JSSlidingPanel::SetHalfHeight(const std::string& height) +{ + halfHeight_.first = StringUtils::StringToDimension(height, true); + halfHeight_.second = true; +} + +void JSSlidingPanel::SetFullHeight(const std::string& height) +{ + fullHeight_.first = StringUtils::StringToDimension(height, true); + fullHeight_.second = true; +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/jsview/js_sliding_panel.h b/frameworks/bridge/declarative_frontend/jsview/js_sliding_panel.h new file mode 100644 index 00000000..6d9fd32f --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_sliding_panel.h @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_SLIDING_PANEL_H +#define FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_SLIDING_PANEL_H + +#include + +#include "core/components/panel/panel_component.h" +#include "core/components/panel/render_sliding_panel.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_container_base.h" + +namespace OHOS::Ace::Framework { + +class JSSlidingPanel : public JSContainerBase { + DECLARE_ACE_TYPE(JSSlidingPanel, JSContainerBase); + +public: + JSSlidingPanel() = delete; +#ifdef USE_QUICKJS_ENGINE + JSSlidingPanel(const std::list& children, std::list jsChildren); +#elif USE_V8_ENGINE + JSSlidingPanel(const std::list& children, + std::list>> jsChildren); +#endif + virtual ~JSSlidingPanel(); + virtual void Destroy(JSViewAbstract* parentCustomView) override; + + static void JSBind(BindingTarget globalObj); + +#ifdef USE_QUICKJS_ENGINE + void MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc) override; + void ReleaseRT(JSRuntime* rt) override; + static JSValue ConstructorCallback(JSContext* ctx, JSValueConst new_target, int argc, JSValueConst* argv); + static void QjsDestructor(JSRuntime* rt, JSSlidingPanel* ptr); + static void QjsGcMark(JSRuntime* rt, JSValueConst val, JS_MarkFunc* markFunc); +#elif USE_V8_ENGINE + static void ConstructorCallback(const v8::FunctionCallbackInfo& args); +#endif + +protected: + RefPtr CreateSpecializedComponent() override; + std::vector> CreateInteractableComponents() override; + void SetHasDragBar(bool hasDragBar); + void SetShow(bool isShow); + void SetPanelMode(int32_t mode); + void SetPanelType(int32_t type); + void SetMiniHeight(const std::string& height); + void SetHalfHeight(const std::string& height); + void SetFullHeight(const std::string& height); +#ifdef USE_V8_ENGINE + void SetOnSizeChange(const v8::FunctionCallbackInfo& args); +#elif USE_QUICKJS_ENGINE + JSValue SetOnSizeChange(JSContext* ctx, JSValueConst this_value, int32_t argc, JSValueConst* argv); +#endif + +private: + void PreparePanelComponent(RefPtr& panelComponent); + + bool hasDragBar_ = true; + bool isShow_ = true; + PanelMode mode_ = PanelMode::FULL; + PanelType type_ = PanelType::FOLDABLE_BAR; + std::pair miniHeight_ = { 0.0_px, false }; + std::pair halfHeight_ = { 0.0_px, false }; + std::pair fullHeight_ = { 0.0_px, false }; +#ifdef USE_V8_ENGINE + RefPtr> onSizeChangeFunc_; +#elif USE_QUICKJS_ENGINE + RefPtr> onSizeChangeFunc_; +#endif +}; + +} // namespace OHOS::Ace::Framework + +#endif // FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_SLIDING_PANEL_H diff --git a/frameworks/bridge/declarative_frontend/jsview/js_stack.cpp b/frameworks/bridge/declarative_frontend/jsview/js_stack.cpp new file mode 100644 index 00000000..4c3a450d --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_stack.cpp @@ -0,0 +1,224 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/declarative_frontend/jsview/js_stack.h" + +#include "base/log/ace_trace.h" +#include "core/components/foreach/foreach_component.h" + +namespace OHOS::Ace::Framework { + +#ifdef USE_QUICKJS_ENGINE +JSStack::JSStack(const std::list& children, std::list jsChildren) + : JSContainerBase(children, jsChildren) +{ + LOGD("Stack(children: [%lu])", children_.size()); +} +#else +JSStack::JSStack(const std::list& children, + std::list>> jsChildren) + : JSContainerBase(children, jsChildren) +{ + LOGD("Stack(children: [%lu])", children_.size()); +} +#endif + +JSStack::~JSStack() +{ + LOGD("Destroy: JSStack"); +}; + +RefPtr JSStack::CreateSpecializedComponent() +{ + LOGD("Create with align: %s", alignment_.ToString().c_str()); + + std::list> componentChildren; + + for (auto jsViewChild : children_) { + auto component = jsViewChild->CreateComponent(); + if (AceType::TypeName() == AceType::TypeName(component)) { + auto children = AceType::DynamicCast(component)->GetChildren(); + for (auto childComponent : children) { + componentChildren.emplace_back(childComponent); + } + } else { + componentChildren.emplace_back(component); + } + } + + LOGD("Create component: Stack"); + RefPtr component = + AceType::MakeRefPtr(alignment_, stackFit_, overflow_, componentChildren); + + // Refresh component + component->SetAlignment(alignment_); + component->SetStackFit(stackFit_); + component->SetOverflow(overflow_); + + return component; +} + +std::vector> JSStack::CreateInteractableComponents() +{ + return JSInteractableView::CreateComponents(); +} + +void JSStack::Destroy(JSViewAbstract* parentCustomView) +{ + LOGD("JSStack::Destroy start"); + JSContainerBase::Destroy(parentCustomView); + LOGD("JSStack::Destroy end"); +} + +#ifdef USE_QUICKJS_ENGINE +void JSStack::MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc) +{ + LOGD("JSStack => MarkGC: start"); + JSContainerBase::MarkGC(rt, markFunc); + LOGD("JSStack => MarkGC: end"); +} + +void JSStack::ReleaseRT(JSRuntime* rt) +{ + LOGD("JSStack => release children: start"); + JSContainerBase::ReleaseRT(rt); + LOGD("JSStack => release children: end"); +} + +// STATIC qjs_class_bindings +JSValue JSStack::ConstructorCallback(JSContext* ctx, JSValueConst new_target, int argc, JSValueConst* argv) +{ + ACE_SCOPED_TRACE("JSStack::ConstructorCallback"); + + QJSContext::Scope scope(ctx); + + auto [children, jsChildren] = JsChildrenFromArgs(ctx, argc, argv); + + JSStack* stack = new JSStack(children, jsChildren); + + return Wrap(new_target, stack); +} + +void JSStack::QjsDestructor(JSRuntime* rt, JSStack* view) +{ + LOGD("JSStack(QjsDestructor) start"); + if (!view) { + return; + } + + view->ReleaseRT(rt); + delete view; + LOGD("JSStack(QjsDestructor) end"); +} + +void JSStack::QjsGcMark(JSRuntime* rt, JSValueConst val, JS_MarkFunc* markFunc) +{ + LOGD("JSStack(QjsGcMark) start"); + JSStack* view = Unwrap(val); + if (!view) { + return; + } + + view->MarkGC(rt, markFunc); + LOGD("JSStack(QjsGcMark) end"); +} +#endif + +void JSStack::SetStackFit(int value) +{ + if (value >= (int)StackFit::KEEP && value <= (int)StackFit::FIRST_CHILD) { + stackFit_ = (StackFit)value; + } else { + LOGE("Invaild value for stackfit"); + } +} + +void JSStack::SetOverflow(int value) +{ + if (value >= (int)Overflow::CLIP && value <= (int)Overflow::OBSERVABLE) { + overflow_ = (Overflow)value; + } else { + LOGE("Invaild value for overflow"); + } +} + +void JSStack::SetAlignment(int value) +{ + Alignment alignment = Alignment::TOP_LEFT; + + switch (value) { + case 0: + alignment = Alignment::TOP_LEFT; + break; + case 1: + alignment = Alignment::TOP_CENTER; + break; + case 2: + alignment = Alignment::TOP_RIGHT; + break; + case 3: + alignment = Alignment::CENTER_LEFT; + break; + case 4: + alignment = Alignment::CENTER; + break; + case 5: + alignment = Alignment::CENTER_RIGHT; + break; + case 6: + alignment = Alignment::BOTTOM_LEFT; + break; + case 7: + alignment = Alignment::BOTTOM_CENTER; + break; + case 8: + alignment = Alignment::BOTTOM_RIGHT; + break; + default: + LOGE("Invaild value for alignment"); + return; + } + + alignment_ = alignment; +} + +void JSStack::JSBind(BindingTarget globalObj) +{ + JSClass::Declare("Stack"); + JSClass::Inherit(); + + MethodOptions opt = MethodOptions::RETURN_SELF; + JSClass::Method("stackFit", &JSStack::SetStackFit, opt); + JSClass::Method("overflow", &JSStack::SetOverflow, opt); + JSClass::Method("alignment", &JSStack::SetAlignment, opt); + JSClass::CustomMethod("onTouch", &JSInteractableView::JsOnTouch); + JSClass::CustomMethod("onClick", &JSInteractableView::JsOnClick); + JSClass::Bind(globalObj, ConstructorCallback); +} + +#ifdef USE_V8_ENGINE +void JSStack::ConstructorCallback(const v8::FunctionCallbackInfo& args) +{ + LOGD("ConstructorCallback"); + std::list children; + std::list>> jsChildren; + V8ChildrenFromArgs(args, children, jsChildren); + auto instance = V8Object::New(args.This(), children, jsChildren); + args.GetReturnValue().Set(instance->Get()); +} + +#endif + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/jsview/js_stack.h b/frameworks/bridge/declarative_frontend/jsview/js_stack.h new file mode 100644 index 00000000..be6b87c5 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_stack.h @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORK_JAVASCRIPT_BRIDGE_JS_VIEW_JS_STACK_H +#define FOUNDATION_ACE_FRAMEWORK_JAVASCRIPT_BRIDGE_JS_VIEW_JS_STACK_H + +#include "frameworks/bridge/declarative_frontend/jsview/js_container_base.h" +#include "frameworks/core/components/stack/stack_component.h" + +namespace OHOS::Ace::Framework { + +class JSStack : public JSContainerBase { + DECLARE_ACE_TYPE(JSStack, JSContainerBase); + +public: + JSStack() = delete; +#ifdef USE_QUICKJS_ENGINE + JSStack(const std::list& children, std::list jsChildren); +#else + JSStack(const std::list& children, + std::list>> jsChildren); +#endif + ~JSStack(); + + RefPtr CreateSpecializedComponent() override; + std::vector> CreateInteractableComponents() override; + virtual void Destroy(JSViewAbstract* parentCustomView) override; + + static void JSBind(BindingTarget globalObj); +#ifdef USE_QUICKJS_ENGINE + void MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc) override; + void ReleaseRT(JSRuntime* rt) override; +#endif + +public: +#ifdef USE_QUICKJS_ENGINE + static JSValue ConstructorCallback(JSContext* ctx, JSValueConst new_target, int argc, JSValueConst* argv); + static void QjsDestructor(JSRuntime* rt, JSStack* ptr); + static void QjsGcMark(JSRuntime* rt, JSValueConst val, JS_MarkFunc* markFunc); +#elif USE_V8_ENGINE + static void ConstructorCallback(const v8::FunctionCallbackInfo& args); +#endif + +protected: + void SetStackFit(int value); + void SetOverflow(int value); + void SetAlignment(int value); + + StackFit stackFit_ = StackFit::INHERIT; + Overflow overflow_ = Overflow::OBSERVABLE; + Alignment alignment_ = Alignment::CENTER; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORK_JAVASCRIPT_BRIDGE_JS_VIEW_JS_STACK_H diff --git a/frameworks/bridge/declarative_frontend/jsview/js_swiper.cpp b/frameworks/bridge/declarative_frontend/jsview/js_swiper.cpp new file mode 100644 index 00000000..943896ae --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_swiper.cpp @@ -0,0 +1,441 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/declarative_frontend/jsview/js_swiper.h" + +#include +#include + +#include "core/components/foreach/foreach_component.h" + +namespace OHOS::Ace::Framework { +namespace { + +#ifdef USE_QUICKJS_ENGINE +JSValue SwiperChangeEventToJSValue(const SwiperChangeEvent& eventInfo, JSContext* ctx) +{ + JSValue eventObj = JS_NewObject(ctx); + JS_SetPropertyStr(ctx, eventObj, "index", JS_NewInt32(ctx, eventInfo.GetIndex())); + return eventObj; +} +#elif USE_V8_ENGINE +v8::Local SwiperChangeEventToJSValue(const SwiperChangeEvent& eventInfo, v8::Isolate* isolate) +{ + ACE_DCHECK(isolate); + auto context = isolate->GetCurrentContext(); + v8::Local obj = v8::Object::New(isolate); + obj->Set(context, v8::String::NewFromUtf8(isolate, "index").ToLocalChecked(), + v8::Number::New(isolate, eventInfo.GetIndex())) + .ToChecked(); + return v8::Local(obj); +} +#endif +} // namespace + +#ifdef USE_QUICKJS_ENGINE +JSSwiper::JSSwiper(const std::list& children, std::list jsChildren) + : JSContainerBase(children, jsChildren) +{ + LOGD("Swiper(children: [%lu])", children.size()); +} +#else +JSSwiper::JSSwiper(const std::list& children, + std::list>> jsChildren) + : JSContainerBase(children, jsChildren) +{ + LOGD("Swiper(children: [%lu])", children_.size()); +} +#endif + +JSSwiper::~JSSwiper() +{ + LOGD("Destroy: JSSwiper"); +} + +RefPtr JSSwiper::CreateSpecializedComponent() +{ + std::list> componentChildren; + + for (const auto& jsViewChild : children_) { + if (!jsViewChild) { + continue; + } + auto component = jsViewChild->CreateComponent(); + if (AceType::TypeName() == AceType::TypeName(component)) { + auto children = AceType::DynamicCast(component)->GetChildren(); + std::copy(children.begin(), children.end(), std::back_insert_iterator(componentChildren)); + } else { + componentChildren.emplace_back(component); + } + } + RefPtr component = AceType::MakeRefPtr(componentChildren); + component->SetAutoPlay(autoPlay_); + component->SetDigitalIndicator(digitalIndicator_); + component->SetDuration(duration_); + component->SetIndex(index_); + component->SetAutoPlayInterval(autoPlayInterval_); + component->SetLoop(loop_); + component->SetAxis(axis_); + if (onChangeFunc_) { + auto onChange = EventMarker([func = std::move(onChangeFunc_)](const BaseEventInfo* info) { + auto swiperInfo = TypeInfoHelper::DynamicCast(info); + if (!swiperInfo) { + LOGE("HandleChangeEvent swiperInfo == nullptr"); + return; + } + func->execute(*swiperInfo); + }); + component->SetChangeEventId(onChange); + } + if (!indicator_) { + InitIndicatorStyle(); + } + component->SetIndicator(showIndicator_ ? indicator_ : nullptr); + + return component; +} + +std::vector> JSSwiper::CreateInteractableComponents() +{ + return JSInteractableView::CreateComponents(); +} + +void JSSwiper::Destroy(JSViewAbstract* parentCustomView) +{ + LOGD("JSSwiper::Destroy start"); + JSContainerBase::Destroy(parentCustomView); + LOGD("JSSwiper::Destroy end"); +} + +void JSSwiper::JSBind(BindingTarget globalObj) +{ + JSClass::Declare("Swiper"); + JSClass::Inherit(); + MethodOptions opt = MethodOptions::RETURN_SELF; + JSClass::Method("autoPlay", &JSSwiper::SetAutoplay, opt); + JSClass::Method("digital", &JSSwiper::SetDigital, opt); + JSClass::Method("duration", &JSSwiper::SetDuration, opt); + JSClass::Method("index", &JSSwiper::SetIndex, opt); + JSClass::Method("interval", &JSSwiper::SetInterval, opt); + JSClass::Method("loop", &JSSwiper::SetLoop, opt); + JSClass::Method("vertical", &JSSwiper::SetVertical, opt); + JSClass::Method("indicator", &JSSwiper::SetIndicator, opt); + JSClass::CustomMethod("onChange", &JSSwiper::SetOnChange); + JSClass::CustomMethod("onTouch", &JSInteractableView::JsOnTouch); + JSClass::CustomMethod("onClick", &JSInteractableView::JsOnClick); + JSClass::CustomMethod("indicatorStyle", &JSSwiper::SetIndicatorStyle); + JSClass::Bind(globalObj, ConstructorCallback); +} + +void JSSwiper::SetAutoplay(bool autoPlay) +{ + autoPlay_ = autoPlay; +} + +void JSSwiper::SetDigital(bool digitalIndicator) +{ + digitalIndicator_ = digitalIndicator; +} + +void JSSwiper::SetDuration(double duration) +{ + duration_ = duration; +} + +void JSSwiper::SetIndex(uint32_t index) +{ + index_ = index; +} + +void JSSwiper::SetInterval(double interval) +{ + autoPlayInterval_ = interval; +} + +void JSSwiper::SetLoop(bool loop) +{ + loop_ = loop; +} + +void JSSwiper::SetVertical(bool isVertical) +{ + axis_ = isVertical ? Axis::VERTICAL : Axis::HORIZONTAL; +} + +void JSSwiper::SetIndicator(bool showIndicator) +{ + showIndicator_ = showIndicator; +} + +#ifdef USE_QUICKJS_ENGINE +void JSSwiper::MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc) +{ + LOGD("JSSwiper => MarkGC: start"); + JSContainerBase::MarkGC(rt, markFunc); + LOGD("JSSwiper => MarkGC: end"); +} + +void JSSwiper::ReleaseRT(JSRuntime* rt) +{ + LOGD("JSSwiper => release children: start"); + JSContainerBase::ReleaseRT(rt); + LOGD("JSSwiper => release children: end"); +} + +JSValue JSSwiper::ConstructorCallback(JSContext* ctx, JSValueConst new_target, int argc, JSValueConst* argv) +{ + ACE_SCOPED_TRACE("JSSwiper::QjsConstructor"); + + QJSContext::Scope scope(ctx); + + auto [children, jsChildren] = JsChildrenFromArgs(ctx, argc, argv); + + JSSwiper* stack = new JSSwiper(children, jsChildren); + + return Wrap(stack); +} + +JSValue JSSwiper::SetIndicatorStyle(JSContext* ctx, JSValue jsSwiper, int argc, JSValue* argv) +{ + if ((argc != 1) || !JS_IsObject(argv[0]) || JS_IsArray(ctx, argv[0]) || JS_IsFunction(ctx, argv[0])) { + LOGE("indicatorStyle expects a object as parameter. Throwing exception."); + return JS_ThrowSyntaxError(ctx, "indicatorStyle expects a object as parameter"); + } + JSSwiper* swiper = Unwrap(jsSwiper); + + if (swiper == nullptr) { + LOGE("indicatorStyle must be called on a JSSwiper. Throwing exception."); + return JS_ThrowSyntaxError(ctx, "indicatorStyle must be called on a JSSwiper"); + } + + if (swiper->indicator_ == nullptr) { + swiper->InitIndicatorStyle(); + } + + JSValue leftValue = JS_GetPropertyStr(ctx, argv[0], "left"); + JSValue rightValue = JS_GetPropertyStr(ctx, argv[0], "right"); + JSValue topValue = JS_GetPropertyStr(ctx, argv[0], "top"); + JSValue bottomValue = JS_GetPropertyStr(ctx, argv[0], "bottom"); + JSValue sizeValue = JS_GetPropertyStr(ctx, argv[0], "size"); + JSValue maskValue = JS_GetPropertyStr(ctx, argv[0], "mask"); + JSValue colorValue = JS_GetPropertyStr(ctx, argv[0], "color"); + JSValue selectedColorValue = JS_GetPropertyStr(ctx, argv[0], "selectedColor"); + + if (JS_IsNumber(leftValue)) { + double left = 0.0; + JS_ToFloat64(ctx, &left, leftValue); + swiper->indicator_->SetLeft(Dimension(left)); + } + + if (JS_IsNumber(rightValue)) { + double right = 0.0; + JS_ToFloat64(ctx, &right, rightValue); + swiper->indicator_->SetRight(Dimension(right)); + } + + if (JS_IsNumber(topValue)) { + double top = 0.0; + JS_ToFloat64(ctx, &top, topValue); + swiper->indicator_->SetTop(Dimension(top)); + } + + if (JS_IsNumber(bottomValue)) { + double bottom = 0.0; + JS_ToFloat64(ctx, &bottom, bottomValue); + swiper->indicator_->SetBottom(Dimension(bottom)); + } + + if (JS_IsNumber(sizeValue)) { + double size = 0.0; + JS_ToFloat64(ctx, &size, sizeValue); + swiper->indicator_->SetSize(Dimension(size)); + } + + if (JS_IsBool(maskValue)) { + bool mask = JS_ToBool(ctx, maskValue) == 1 ? true : false; + swiper->indicator_->SetIndicatorMask(mask); + } + + if (JS_IsString(colorValue)) { + const char* colorStr = JS_ToCString(ctx, JS_ToString(ctx, colorValue)); + if (colorStr != nullptr) { + std::string color(colorStr); + swiper->indicator_->SetColor(Color::FromString(color)); + } + } + + if (JS_IsString(selectedColorValue)) { + const char* colorStr = JS_ToCString(ctx, JS_ToString(ctx, selectedColorValue)); + if (colorStr != nullptr) { + std::string color(colorStr); + swiper->indicator_->SetSelectedColor(Color::FromString(color)); + } + } + + JS_FreeValue(ctx, leftValue); + JS_FreeValue(ctx, rightValue); + JS_FreeValue(ctx, bottomValue); + JS_FreeValue(ctx, topValue); + JS_FreeValue(ctx, sizeValue); + JS_FreeValue(ctx, maskValue); + JS_FreeValue(ctx, colorValue); + JS_FreeValue(ctx, selectedColorValue); + return JS_DupValue(ctx, jsSwiper); +} + +void JSSwiper::QjsDestructor(JSRuntime* rt, JSSwiper* ptr) +{ + LOGD("JSSwiper(QjsDestructor) start"); + if (!ptr) { + return; + } + + ptr->ReleaseRT(rt); + delete ptr; + LOGD("JSSwiper(QjsDestructor) end"); +} + +void JSSwiper::QjsGcMark(JSRuntime* rt, JSValueConst val, JS_MarkFunc* markFunc) +{ + LOGD("JSStack(QjsGcMark) start"); + JSSwiper* view = Unwrap(val); + if (!view) { + return; + } + + view->MarkGC(rt, markFunc); + LOGD("JSStack(QjsGcMark) end"); +} + +JSValue JSSwiper::SetOnChange(JSContext* ctx, JSValue this_value, int32_t argc, JSValue* argv) +{ + if ((argc != 1) || !JS_IsFunction(ctx, argv[0])) { + LOGE("change expects a function as parameter. Throwing exception."); + return JS_ThrowSyntaxError(ctx, "change() expect a function parameter. Throwing exception"); + } + + QJSContext::Scope scope(ctx); + // Dup and Free shoulj happen inside the QJSClickFunction + + auto changeHandler = AceType::MakeRefPtr>( + ctx, JS_DupValue(ctx, argv[0]), SwiperChangeEventToJSValue); + + onChangeFunc_ = changeHandler; + + return JS_DupValue(ctx, this_value); // for call chaining +} +#elif USE_V8_ENGINE +void JSSwiper::ConstructorCallback(const v8::FunctionCallbackInfo& args) +{ + LOGD("ConstructorCallback"); + std::list children; + std::list>> jsChildren; + V8ChildrenFromArgs(args, children, jsChildren); + auto instance = V8Object::New(args.This(), children, jsChildren); + args.GetReturnValue().Set(instance->Get()); +} + +void JSSwiper::SetIndicatorStyle(const v8::FunctionCallbackInfo& info) +{ + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + ACE_DCHECK(isolate); + v8::Local context = isolate->GetCurrentContext(); + if (context.IsEmpty()) { + LOGE("Context Is Empty"); + return; + } + + if (!indicator_) { + InitIndicatorStyle(); + } + if (info[0]->IsObject()) { + v8::Local obj = info[0]->ToObject(context).ToLocalChecked(); + v8::MaybeLocal leftValue = + obj->Get(context, v8::String::NewFromUtf8(isolate, "left").ToLocalChecked()); + v8::MaybeLocal topValue = + obj->Get(context, v8::String::NewFromUtf8(isolate, "top").ToLocalChecked()); + v8::MaybeLocal rightValue = + obj->Get(context, v8::String::NewFromUtf8(isolate, "right").ToLocalChecked()); + v8::MaybeLocal bottomValue = + obj->Get(context, v8::String::NewFromUtf8(isolate, "bottom").ToLocalChecked()); + v8::MaybeLocal sizeValue = + obj->Get(context, v8::String::NewFromUtf8(isolate, "size").ToLocalChecked()); + v8::MaybeLocal maskValue = + obj->Get(context, v8::String::NewFromUtf8(isolate, "mask").ToLocalChecked()); + v8::MaybeLocal colorValue = + obj->Get(context, v8::String::NewFromUtf8(isolate, "color").ToLocalChecked()); + v8::MaybeLocal selectedColorValue = + obj->Get(context, v8::String::NewFromUtf8(isolate, "selectedColor").ToLocalChecked()); + + if (leftValue.ToLocalChecked()->IsNumber()) { + auto left = V8ValueConvertor::fromV8Value(leftValue.ToLocalChecked()); + indicator_->SetLeft(Dimension(left)); + } + if (topValue.ToLocalChecked()->IsNumber()) { + auto top = V8ValueConvertor::fromV8Value(topValue.ToLocalChecked()); + indicator_->SetTop(Dimension(top)); + } + if (rightValue.ToLocalChecked()->IsNumber()) { + auto right = V8ValueConvertor::fromV8Value(rightValue.ToLocalChecked()); + indicator_->SetRight(Dimension(right)); + } + if (bottomValue.ToLocalChecked()->IsNumber()) { + auto bottom = V8ValueConvertor::fromV8Value(bottomValue.ToLocalChecked()); + indicator_->SetBottom(Dimension(bottom)); + } + if (sizeValue.ToLocalChecked()->IsNumber()) { + auto size = V8ValueConvertor::fromV8Value(sizeValue.ToLocalChecked()); + indicator_->SetSize(Dimension(size)); + } + if (maskValue.ToLocalChecked()->IsBoolean()) { + auto mask = V8ValueConvertor::fromV8Value(maskValue.ToLocalChecked()); + indicator_->SetIndicatorMask(mask); + } + if (colorValue.ToLocalChecked()->IsString()) { + auto colorString = V8ValueConvertor::fromV8Value(colorValue.ToLocalChecked()); + indicator_->SetColor(Color::FromString(colorString)); + } + if (selectedColorValue.ToLocalChecked()->IsString()) { + auto selectedColorString = V8ValueConvertor::fromV8Value(selectedColorValue.ToLocalChecked()); + indicator_->SetSelectedColor(Color::FromString(selectedColorString)); + } + } + info.GetReturnValue().Set(info.This()); +} + +void JSSwiper::SetOnChange(const v8::FunctionCallbackInfo& args) +{ + auto isolate = args.GetIsolate(); + v8::HandleScope scp(isolate); + if (args[0]->IsFunction()) { + onChangeFunc_ = AceType::MakeRefPtr>( + v8::Local::Cast(args[0]), SwiperChangeEventToJSValue); + } + args.GetReturnValue().Set(args.This()); +} +#endif + +void JSSwiper::InitIndicatorStyle() +{ + if (!indicator_) { + indicator_ = AceType::MakeRefPtr(); + auto indicatorTheme = GetTheme(); + if (indicatorTheme) { + indicator_->InitStyle(indicatorTheme); + } + } +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/jsview/js_swiper.h b/frameworks/bridge/declarative_frontend/jsview/js_swiper.h new file mode 100644 index 00000000..8e2d843a --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_swiper.h @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_SWIPER_H +#define FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_SWIPER_H + +#include "core/components/swiper/swiper_component.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_container_base.h" + +namespace OHOS::Ace::Framework { + +class JSSwiper : public JSContainerBase { + DECLARE_ACE_TYPE(JSSwiper, JSContainerBase); + +public: + JSSwiper() = delete; +#ifdef USE_QUICKJS_ENGINE + JSSwiper(const std::list& children, std::list jsChildren); +#elif USE_V8_ENGINE + JSSwiper(const std::list& children, + std::list>> jsChildren); +#endif + + ~JSSwiper(); + virtual void Destroy(JSViewAbstract* parentCustomView) override; + static void JSBind(BindingTarget globalObj); + +#ifdef USE_QUICKJS_ENGINE + static JSValue ConstructorCallback(JSContext* ctx, JSValueConst new_target, int argc, JSValueConst* argv); + static void QjsDestructor(JSRuntime* rt, JSSwiper* ptr); + static void QjsGcMark(JSRuntime* rt, JSValueConst val, JS_MarkFunc* markFunc); + static JSValue SetIndicatorStyle(JSContext* ctx, JSValueConst jsSwiper, int argc, JSValueConst* argv); + void MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc) override; + void ReleaseRT(JSRuntime* rt) override; +#elif USE_V8_ENGINE + static void ConstructorCallback(const v8::FunctionCallbackInfo& args); +#endif + +protected: + RefPtr CreateSpecializedComponent() override; + std::vector> CreateInteractableComponents() override; + void SetAutoplay(bool autoPlay); + void SetDigital(bool digitalIndicator); + void SetDuration(double duration); + void SetIndex(uint32_t index); + void SetInterval(double interval); + void SetLoop(bool loop); + void SetVertical(bool isVertical); + void SetIndicator(bool showIndicator); +#ifdef USE_V8_ENGINE + void SetIndicatorStyle(const v8::FunctionCallbackInfo& info); + void SetOnChange(const v8::FunctionCallbackInfo& args); +#elif USE_QUICKJS_ENGINE + JSValue SetOnChange(JSContext* ctx, JSValueConst this_value, int32_t argc, JSValueConst* argv); +#endif + +private: + void InitIndicatorStyle(); + void HandleChangeEvent(const BaseEventInfo& param); + + uint32_t index_ = DEFAULT_SWIPER_CURRENT_INDEX; + double duration_ = DEFAULT_SWIPER_ANIMATION_DURATION; + double autoPlayInterval_ = DEFAULT_SWIPER_AUTOPLAY_INTERVAL; + bool autoPlay_ = false; + bool digitalIndicator_ = false; + bool loop_ = true; + bool showIndicator_ = true; + Axis axis_ = Axis::HORIZONTAL; + // indicator + RefPtr indicator_; +#ifdef USE_V8_ENGINE + RefPtr> onChangeFunc_; +#elif USE_QUICKJS_ENGINE + RefPtr> onChangeFunc_; +#endif +}; + +} // namespace OHOS::Ace::Framework + +#endif // FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_SWIPER_H diff --git a/frameworks/bridge/declarative_frontend/jsview/js_text.cpp b/frameworks/bridge/declarative_frontend/jsview/js_text.cpp new file mode 100644 index 00000000..ffd4ba1c --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_text.cpp @@ -0,0 +1,288 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/declarative_frontend/jsview/js_text.h" + +#include +#include +#include + +#include "base/geometry/dimension.h" +#include "base/log/ace_trace.h" + +namespace OHOS::Ace::Framework { + +const std::map textOverflowEnumMapping = { + { 0, TextOverflow::CLIP }, + { 1, TextOverflow::ELLIPSIS }, + { 2, TextOverflow::NONE }, +}; + +const std::map textAlignEnumMapping = { + { 0, TextAlign::LEFT }, + { 1, TextAlign::RIGHT }, + { 2, TextAlign::CENTER }, + { 3, TextAlign::JUSTIFY }, + { 4, TextAlign::START }, + { 5, TextAlign::END }, +}; + +const std::map fontStyleEnumMapping = { + { 0, FontStyle::NORMAL }, + { 1, FontStyle::ITALIC }, +}; + +JSText::JSText(const std::string& text) +{ + textComponent_ = AceType::MakeRefPtr(text); +} + +RefPtr JSText::CreateSpecializedComponent() +{ + LOGD("Create component: Text"); + return textComponent_; +} + +std::vector> JSText::CreateInteractableComponents() +{ + return JSInteractableView::CreateComponents(); +} + +#ifdef USE_QUICKJS_ENGINE +void JSText::MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc) +{ + LOGD("JSText => MarkGC: Mark value for GC start"); + JSInteractableView::MarkGC(rt, markFunc); + LOGD("JSText => MarkGC: Mark value for GC end"); +} + +void JSText::ReleaseRT(JSRuntime* rt) +{ + LOGD("JSText => release start"); + JSInteractableView::ReleaseRT(rt); + LOGD("JSText => release text: %s", textComponent_->GetData().c_str()); + LOGD("JSText => release end"); +} +#endif + +void JSText::SetFontSize(const std::string& value) +{ + Dimension dimension = TextAttr2Dimension(value, true); + if (GreatNotEqual(dimension.Value(), 0.0)) { + auto textStyle = GetTextStyle(); + textStyle.SetFontSize(dimension); + SetTextStyle(std::move(textStyle)); + } else { + LOGE("value %s is not positive", value.c_str()); + } +} + +void JSText::SetFontWeight(const std::string& value) +{ + auto textStyle = GetTextStyle(); + textStyle.SetFontWeight(ConvertStrToFontWeight(value)); + SetTextStyle(std::move(textStyle)); +} + +void JSText::SetTextColor(const std::string& value) +{ + auto textStyle = GetTextStyle(); + textStyle.SetTextColor(Color::FromString(value)); + SetTextStyle(std::move(textStyle)); +} + +void JSText::SetTextOverflow(int value) +{ + auto iter = textOverflowEnumMapping.find(value); + if (iter != textOverflowEnumMapping.end()) { + auto textStyle = GetTextStyle(); + textStyle.SetTextOverflow(iter->second); + SetTextStyle(std::move(textStyle)); + } else { + LOGE("Text: textOverflow(%d) illegal value", value); + } +} + +void JSText::SetMaxLines(int value) +{ + if (value > 0) { + auto textStyle = GetTextStyle(); + textStyle.SetMaxLines(value); + SetTextStyle(std::move(textStyle)); + } else { + LOGE("Text: maxLines(%d) expected positive number", value); + } +} + +void JSText::SetFontStyle(int value) +{ + auto iter = fontStyleEnumMapping.find(value); + if (iter != fontStyleEnumMapping.end()) { + auto textStyle = GetTextStyle(); + textStyle.SetFontStyle(FontStyle(value)); + SetTextStyle(std::move(textStyle)); + } else { + LOGE("Text fontStyle(%d) illega value", value); + } +} + +void JSText::SetTextAlign(int value) +{ + auto iter = textAlignEnumMapping.find(value); + if (iter != textAlignEnumMapping.end()) { + auto textStyle = GetTextStyle(); + textStyle.SetTextAlign(iter->second); + SetTextStyle(std::move(textStyle)); + } else { + LOGE("Text: TextAlign(%d) expected positive number", value); + } +} + +void JSText::SetLineHeight(const std::string& value) +{ + Dimension dimension = TextAttr2Dimension(value, true); + if (GreatNotEqual(dimension.Value(), 0.0)) { + auto textStyle = GetTextStyle(); + textStyle.SetLineHeight(dimension); + SetTextStyle(std::move(textStyle)); + } else { + LOGE("value %s is not positive", value.c_str()); + } +} + +void JSText::SetFontFamily(const std::string& fontFamiliy) +{ + std::vector fontFamilies = ParseFontFamilies(fontFamiliy); + auto textStyle = GetTextStyle(); + textStyle.SetFontFamilies(fontFamilies); + SetTextStyle(std::move(textStyle)); +} + +void JSText::SetMinFontSize(const std::string& value) +{ + Dimension dimension = TextAttr2Dimension(value, true); + if (GreatNotEqual(dimension.Value(), 0.0)) { + auto textStyle = GetTextStyle(); + textStyle.SetAdaptMinFontSize(dimension); + SetTextStyle(std::move(textStyle)); + } else { + LOGE("value %s is not positive", value.c_str()); + } +} + +void JSText::SetMaxFontSize(const std::string& value) +{ + Dimension dimension = TextAttr2Dimension(value, true); + if (GreatNotEqual(dimension.Value(), 0.0)) { + auto textStyle = GetTextStyle(); + textStyle.SetAdaptMaxFontSize(dimension); + SetTextStyle(std::move(textStyle)); + } else { + LOGE("value %s is not positive", value.c_str()); + } +} + +std::vector JSText::ParseFontFamilies(const std::string& value) const +{ + std::vector fontFamilies; + std::stringstream stream(value); + std::string fontFamily; + while (getline(stream, fontFamily, ',')) { + fontFamilies.push_back(fontFamily); + } + return fontFamilies; +} + +Dimension JSText::TextAttr2Dimension(const std::string& value, bool usefp) +{ + errno = 0; + char* pEnd = nullptr; + double result = std::strtod(value.c_str(), &pEnd); + if (pEnd == value.c_str() || errno == ERANGE) { + return Dimension(0.0, DimensionUnit::PX); + } else { + if ((pEnd) && (std::strcmp(pEnd, "%") == 0)) { + // Parse percent, transfer from [0, 100] to [0`, 1] + return Dimension(result / 100.0, DimensionUnit::PERCENT); + } else if ((pEnd) && (std::strcmp(pEnd, "px") == 0)) { + return Dimension(result, DimensionUnit::PX); + } else if ((pEnd) && (std::strcmp(pEnd, "vp") == 0)) { + return Dimension(result, DimensionUnit::VP); + } else if ((pEnd) && (std::strcmp(pEnd, "fp") == 0)) { + return Dimension(result, DimensionUnit::FP); + } + return Dimension(result, usefp ? DimensionUnit::FP : DimensionUnit::PX); + } +} + +#ifdef USE_QUICKJS_ENGINE + +void JSText::QjsDestructor(JSRuntime* rt, JSText* view) +{ + LOGD("JSText(QjsDestructor) start"); + if (!view) + return; + + view->ReleaseRT(rt); + delete view; + LOGD("JSText(QjsDestructor) end"); +} + +void JSText::QjsGcMark(JSRuntime* rt, JSValueConst val, JS_MarkFunc* markFunc) +{ + LOGD("JSText(QjsGcMark) start"); + + JSText* view = Unwrap(val); + if (!view) + return; + + view->MarkGC(rt, markFunc); + LOGD("JSText(QjsGcMark) end"); +} +#endif + +void JSText::JSBind(BindingTarget globalObj) +{ + JSClass::Declare("Text"); + JSClass::Inherit(); + + MethodOptions opt = MethodOptions::RETURN_SELF; + JSClass::Method("color", &JSText::SetTextColor, opt); + JSClass::Method("fontSize", &JSText::SetFontSize, opt); + JSClass::Method("fontWeight", &JSText::SetFontWeight, opt); + JSClass::Method("maxLines", &JSText::SetMaxLines, opt); + JSClass::Method("textOverflow", &JSText::SetTextOverflow, opt); + JSClass::Method("fontStyle", &JSText::SetFontStyle, opt); + JSClass::Method("textAlign", &JSText::SetTextAlign, opt); + JSClass::Method("lineHeight", &JSText::SetLineHeight, opt); + JSClass::Method("fontFamily", &JSText::SetFontFamily, opt); + JSClass::Method("minFontSize", &JSText::SetMinFontSize, opt); + JSClass::Method("maxFontSize", &JSText::SetMaxFontSize, opt); + JSClass::CustomMethod("onTouch", &JSInteractableView::JsOnTouch); + JSClass::CustomMethod("onClick", &JSInteractableView::JsOnClick); + JSClass::Bind(globalObj); +} + +TextStyle JSText::GetTextStyle() const +{ + return textComponent_->GetTextStyle(); +} + +void JSText::SetTextStyle(TextStyle style) +{ + textComponent_->SetTextStyle(std::move(style)); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/jsview/js_text.h b/frameworks/bridge/declarative_frontend/jsview/js_text.h new file mode 100644 index 00000000..bae2e601 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_text.h @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_TEXT_H +#define FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_TEXT_H + +#include "core/components/text/text_component.h" +#include "core/components/text/text_theme.h" +#include "core/event/ace_event_handler.h" +#include "frameworks/bridge/common/utils/utils.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_interactable_view.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_view_abstract.h" + +namespace OHOS::Ace::Framework { + +class JSText : public JSViewAbstract, public JSInteractableView { + DECLARE_ACE_TYPE(JSText, JSViewAbstract); + +public: + JSText() = delete; + JSText(const std::string& text); + + ~JSText() + { + LOGD("Destroy: JSText"); + }; + + virtual RefPtr CreateSpecializedComponent() override; + virtual std::vector> CreateInteractableComponents() override; + +#ifdef USE_QUICKJS_ENGINE + virtual void MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc) override; + virtual void ReleaseRT(JSRuntime* rt) override; + + static void QjsDestructor(JSRuntime* rt, JSText* ptr); + static void QjsGcMark(JSRuntime* rt, JSValueConst val, JS_MarkFunc* markFunc); +#endif + + static void JSBind(BindingTarget globalObj); + +protected: + void SetFontSize(const std::string& value); + void SetFontWeight(const std::string& value); + void SetTextColor(const std::string& value); + void SetTextOverflow(int value); + void SetMaxLines(int value); + void SetFontStyle(int value); + void SetTextAlign(int value); + void SetLineHeight(const std::string& value); + void SetFontFamily(const std::string& fontFamiliy); + void SetMinFontSize(const std::string& value); + void SetMaxFontSize(const std::string& value); + std::vector ParseFontFamilies(const std::string& value) const; + Dimension TextAttr2Dimension(const std::string& value, bool usefp); + + TextStyle GetTextStyle() const; + void SetTextStyle(TextStyle); + +private: + RefPtr textComponent_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_TEXT_H diff --git a/frameworks/bridge/declarative_frontend/jsview/js_touch_handler.cpp b/frameworks/bridge/declarative_frontend/jsview/js_touch_handler.cpp new file mode 100644 index 00000000..cf7bdfc7 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_touch_handler.cpp @@ -0,0 +1,177 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/declarative_frontend/jsview/js_touch_handler.h" + +namespace OHOS::Ace::Framework { + +RefPtr JSTouchHandler::CreateComponent() +{ + LOGD("JSTouchHandler wrapComponent"); + auto touchComponent = AceType::MakeRefPtr(); + return touchComponent; +} + +#ifdef USE_QUICKJS_ENGINE +void JSTouchHandler::MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc) +{ + LOGD("JSTouchHandler => MarkGC: start"); + LOGD("JSTouchHandler => MarkGC: end"); +} + +void JSTouchHandler::ReleaseRT(JSRuntime* rt) +{ + LOGD("JSTouchHandler => release: start"); + LOGD("JSTouchHandler => release: end"); +} + +// STATIC + +JSValue JSTouchHandler::JsHandlerOnTouch( + TouchEvent action, JSContext* ctx, JSValueConst jsObj, int argc, JSValueConst* argv) +{ + if ((argc != 1) || !JS_IsFunction(ctx, argv[0])) { + LOGE("onCick expects a function as parameter. Throwing exception."); + return JS_EXCEPTION; + } + + QJSContext::Scope scope(ctx); + // Dup and Free shoulj happen inside the QJSTouchFunction + RefPtr handlerFunc = AceType::MakeRefPtr(ctx, JS_DupValue(ctx, argv[0])); + + // TODO: Release previously allocated functions here + switch (action) { + case TouchEvent::DOWN: + jsOnDownFunc_ = handlerFunc; + break; + case TouchEvent::UP: + jsOnUpFunc_ = handlerFunc; + break; + case TouchEvent::MOVE: + jsOnMoveFunc_ = handlerFunc; + break; + case TouchEvent::CANCEL: + jsOnCancelFunc_ = handlerFunc; + break; + } + return JS_DupValue(ctx, jsObj); // for call chaining +} + +JSValue JSTouchHandler::JsHandlerOnDown(JSContext* ctx, JSValueConst jsObj, int argc, JSValueConst* argv) +{ + return JSTouchHandler::JsHandlerOnTouch(TouchEvent::DOWN, ctx, jsObj, argc, argv); +} + +JSValue JSTouchHandler::JsHandlerOnUp(JSContext* ctx, JSValueConst jsObj, int argc, JSValueConst* argv) +{ + return JSTouchHandler::JsHandlerOnTouch(TouchEvent::UP, ctx, jsObj, argc, argv); +} + +JSValue JSTouchHandler::JsHandlerOnMove(JSContext* ctx, JSValueConst jsObj, int argc, JSValueConst* argv) +{ + return JSTouchHandler::JsHandlerOnTouch(TouchEvent::MOVE, ctx, jsObj, argc, argv); +} + +JSValue JSTouchHandler::JsHandlerOnCancel(JSContext* ctx, JSValueConst jsObj, int argc, JSValueConst* argv) +{ + return JSTouchHandler::JsHandlerOnTouch(TouchEvent::CANCEL, ctx, jsObj, argc, argv); +} + +// STATIC + +void JSTouchHandler::QjsDestructor(JSRuntime* rt, JSTouchHandler* handler) +{ + LOGD("JSTouchHandler(QjsDestructor) start"); + + if (!handler) + return; + + handler->ReleaseRT(rt); + delete handler; + LOGD("JSTouchHandler(QjsDestructor) end"); +} + +void JSTouchHandler::QjsGcMark(JSRuntime* rt, JSValueConst val, JS_MarkFunc* markFunc) +{ + LOGD("JSTouchHandler(QjsGcMark) start"); + + JSTouchHandler* handler = Unwrap(val); + if (!handler) + return; + + handler->MarkGC(rt, markFunc); + LOGD("JSTouchHandler(QjsGcMark) end"); +} +#endif + +#ifdef USE_V8_ENGINE + +void JSTouchHandler::JsHandlerOnTouch(TouchEvent action, const v8::FunctionCallbackInfo& args) +{ + auto isolate = args.GetIsolate(); + v8::HandleScope scp(isolate); + LOGD("JSTouchHandler JsHandlerOnTouch"); + if (args[0]->IsFunction()) { + v8::Local jsFunction = v8::Local::Cast(args[0]); + RefPtr handlerFunc = AceType::MakeRefPtr(jsFunction); + switch (action) { + case TouchEvent::DOWN: + jsOnDownFunc_ = handlerFunc; + break; + case TouchEvent::UP: + jsOnUpFunc_ = handlerFunc; + break; + case TouchEvent::MOVE: + jsOnMoveFunc_ = handlerFunc; + break; + case TouchEvent::CANCEL: + jsOnCancelFunc_ = handlerFunc; + break; + } + } + args.GetReturnValue().Set(args.This()); +} + +void JSTouchHandler::JsHandlerOnDown(const v8::FunctionCallbackInfo& args) +{ + JSTouchHandler::JsHandlerOnTouch(TouchEvent::DOWN, args); +} + +void JSTouchHandler::JsHandlerOnUp(const v8::FunctionCallbackInfo& args) +{ + JSTouchHandler::JsHandlerOnTouch(TouchEvent::UP, args); +} + +void JSTouchHandler::JsHandlerOnMove(const v8::FunctionCallbackInfo& args) +{ + JSTouchHandler::JsHandlerOnTouch(TouchEvent::MOVE, args); +} + +void JSTouchHandler::JsHandlerOnCancel(const v8::FunctionCallbackInfo& args) +{ + JSTouchHandler::JsHandlerOnTouch(TouchEvent::CANCEL, args); +} + +#endif +void JSTouchHandler::JSBind(BindingTarget globalObj) +{ + JSClass::Declare("TouchHandler"); + JSClass::CustomMethod("onDown", &JSTouchHandler::JsHandlerOnDown); + JSClass::CustomMethod("onUp", &JSTouchHandler::JsHandlerOnUp); + JSClass::CustomMethod("onMove", &JSTouchHandler::JsHandlerOnMove); + JSClass::CustomMethod("onCancel", &JSTouchHandler::JsHandlerOnCancel); + JSClass::Bind<>(globalObj); +} +}; // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/jsview/js_touch_handler.h b/frameworks/bridge/declarative_frontend/jsview/js_touch_handler.h new file mode 100644 index 00000000..41788990 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_touch_handler.h @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_TOUCH_HANDLER_H +#define FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_TOUCH_HANDLER_H + +#include "core/components/touch_listener/touch_listener_component.h" +#include "core/event/ace_event_handler.h" +#ifdef USE_QUICKJS_ENGINE +#include "frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_touch_function.h" +#endif + +#ifdef USE_V8_ENGINE +#include "frameworks/bridge/declarative_frontend/engine/v8/functions/v8_touch_function.h" +#endif + +#include "frameworks/bridge/declarative_frontend/jsview/js_view_abstract.h" + +namespace OHOS::Ace::Framework { + +class JSTouchHandler { +private: + enum TouchEvent { DOWN, UP, MOVE, CANCEL }; + +private: + RefPtr component_; +#ifdef USE_QUICKJS_ENGINE + RefPtr jsOnDownFunc_; + RefPtr jsOnUpFunc_; + RefPtr jsOnMoveFunc_; + RefPtr jsOnCancelFunc_; +#elif USE_V8_ENGINE + RefPtr jsOnDownFunc_; + RefPtr jsOnUpFunc_; + RefPtr jsOnMoveFunc_; + RefPtr jsOnCancelFunc_; +#endif + +public: + JSTouchHandler() = default; + virtual ~JSTouchHandler() + { + LOGD("Destroy: JSTouchHandler"); + } + + virtual RefPtr CreateComponent(); + + static void JSBind(BindingTarget globalObj); + +#ifdef USE_QUICKJS_ENGINE + virtual void MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc); + virtual void ReleaseRT(JSRuntime* rt); + + JSValue JsHandlerOnTouch(TouchEvent action, JSContext* ctx, JSValueConst jsObj, int argc, JSValueConst* argv); + JSValue JsHandlerOnDown(JSContext* ctx, JSValueConst jsObj, int argc, JSValueConst* argv); + JSValue JsHandlerOnUp(JSContext* ctx, JSValueConst jsObj, int argc, JSValueConst* argv); + JSValue JsHandlerOnMove(JSContext* ctx, JSValueConst jsObj, int argc, JSValueConst* argv); + JSValue JsHandlerOnCancel(JSContext* ctx, JSValueConst jsObj, int argc, JSValueConst* argv); + + static void QjsDestructor(JSRuntime* rt, JSTouchHandler* ptr); + static void QjsGcMark(JSRuntime* rt, JSValueConst val, JS_MarkFunc* markFunc); +#elif USE_V8_ENGINE + void JsHandlerOnTouch(TouchEvent action, const v8::FunctionCallbackInfo& args); + void JsHandlerOnDown(const v8::FunctionCallbackInfo& args); + void JsHandlerOnUp(const v8::FunctionCallbackInfo& args); + void JsHandlerOnMove(const v8::FunctionCallbackInfo& args); + void JsHandlerOnCancel(const v8::FunctionCallbackInfo& args); + +#endif + +}; // JSTouchHandler + +} // namespace OHOS::Ace::Framework + +#endif // FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_TOUCH_HANDLER_H diff --git a/frameworks/bridge/declarative_frontend/jsview/js_view.cpp b/frameworks/bridge/declarative_frontend/jsview/js_view.cpp new file mode 100644 index 00000000..04244a6a --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_view.cpp @@ -0,0 +1,306 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/declarative_frontend/jsview/js_view.h" + +#include "base/log/ace_trace.h" +#include "core/pipeline/base/composed_element.h" + +#ifdef USE_V8_ENGINE +#include "frameworks/bridge/declarative_frontend/engine/v8/v8_utils.h" +#endif + +namespace OHOS::Ace::Framework { + +#ifdef USE_QUICKJS_ENGINE +JSView::JSView(JSContext* ctx, JSValue jsObject, JSValue jsRenderFunction) +{ + jsViewFunction_ = AceType::MakeRefPtr(ctx, jsObject, jsRenderFunction); + LOGD("JSView constructor"); +} +#endif +#ifdef USE_V8_ENGINE +JSView::JSView(v8::Local jsObject, v8::Local jsRenderFunction) : JSCustomViewBase() +{ + jsViewFunction_ = AceType::MakeRefPtr(jsObject, jsRenderFunction); + LOGD("JSView constructor"); +}; +#endif + +JSView::~JSView() +{ + jsViewFunction_.Reset(); + LOGD("DestroyJSView"); +}; + +RefPtr JSView::CreateSpecializedComponent() +{ + ACE_SCOPED_TRACE("JSView::CreateSpecializedComponent"); + LOGD("Create component: View -> create composed component"); + // create component, return new something, need to set proper ID + auto composedComponent = + AceType::MakeRefPtr(HasUniqueKey() ? GetUniqueKey() : std::string(""), "view"); + + // add callback for element creation to component, and get pointer reference + // to the element on creation. When state of this view changes, mark the + // element to dirty. + + auto renderFunction = [&]() -> RefPtr { return internalRender(); }; + + auto elementFunction = [&, renderFunction](OHOS::Ace::ComposedElement* element) { + if (!element_) { + jsViewFunction_->executeAppear(); + } + element_ = element; + // add render function callback to element. when the element rebuilds due + // to state update it will call this callback to get the new child component. + element_->SetRenderFunction(std::move(renderFunction)); + }; + + composedComponent->SetElementFunction(std::move(elementFunction)); + + if (IsStatic()) { + LOGD("will mark composedComponent as static"); + composedComponent->SetStatic(); + } + return composedComponent; +} + +RefPtr JSView::internalRender() +{ + LOGD("JSView: internalRender"); + needsUpdate_ = false; + jsViewFunction_->executeAboutToRender(); + auto childView = jsViewFunction_->executeRender(); + + if (childView) { + auto component = childView->CreateComponent(); + jsViewFunction_->executeOnRenderDone(); + JSCustomViewBase::CleanUpAbandonedChild(); + jsViewFunction_->Destroy(this); + LOGD("JSView: internalRender end"); + return component; + } + + jsViewFunction_->executeOnRenderDone(); + return nullptr; +} + +/** + * marks the JSView's composed component as needing update / rerender + */ +void JSView::MarkNeedUpdate() +{ + ACE_DCHECK((getElement() != nullptr) && "JSView's ComposedElement must be created before requesting an update"); + ACE_SCOPED_TRACE("JSView::MarkNeedUpdate"); + LOGD("JSView View(%d) has just been marked to need update", getViewId()); + getElement()->MarkDirty(); + needsUpdate_ = true; +} + +void JSView::Destroy(JSViewAbstract* parentCustomView) +{ + LOGD("JSView::Destroy start"); + JSCustomViewBase::Destroy(parentCustomView); + jsViewFunction_->executeDisappear(); + jsViewFunction_.Reset(); + LOGD("JSView::Destroy end"); +} + +void JSView::JSBind(BindingTarget object) +{ + JSClass::Declare("NativeView"); + JSClass::Inherit(); + JSClass::Bind(object, ConstructorCallback); +} + +#ifdef USE_V8_ENGINE +void JSView::ConstructorCallback(const v8::FunctionCallbackInfo& info) +{ + auto isolate = info.GetIsolate(); + v8::HandleScope scp(isolate); + auto context = isolate->GetCurrentContext(); + + v8::Local renderFunc = + info.This()->Get(context, V8ValueConvertor::toV8Value("render")).ToLocalChecked(); + + if (!renderFunc->IsFunction()) { + V8Utils ::ThrowException("View derived classes must provide render(){...} function"); + return; + } + + int argc = info.Length(); + if (argc > 1 && (info[0]->IsNumber() || info[0]->IsString())) { + V8Utils::ScopedString viewId(info[0]); + if (!info[1]->IsUndefined() && info[1]->IsObject()) { + v8::Local parentObj = info[1]->ToObject(context).ToLocalChecked(); + JSView* parentView = static_cast(parentObj->GetAlignedPointerFromInternalField(0)); + auto shouldRecycle = parentView->FindChildById(viewId); + if (shouldRecycle) { + auto [view, jsView] = parentView->GetChildById(viewId); + info.GetReturnValue().Set(jsView); + if (!view->NeedsUpdate()) { + view->MarkStatic(); + } + } else { + auto instance = + V8Object::New(info.This(), info.This(), v8::Local::Cast(renderFunc)); + info.GetReturnValue().Set(instance->Get()); + + JSViewAbstract* view = + static_cast(instance->Get()->GetAlignedPointerFromInternalField(0)); + parentView->AddChildById(viewId, view, instance->Get()); + } + return; + } + auto instance = V8Object::New(info.This(), info.This(), v8::Local::Cast(renderFunc)); + info.GetReturnValue().Set(instance->Get()); + } else { + LOGE("JSView creation with invalid arguments."); + V8Utils ::ThrowException("JSView creation with invalid arguments."); + } +} +#endif // USE_V8_ENGINE + +#ifdef USE_QUICKJS_ENGINE +void JSView::MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc) +{ + LOGD("JSView => MarkGC: start"); + // this should always be true + if (jsViewFunction_) { + jsViewFunction_->MarkGC(rt, markFunc); + } + LOGD("JSView => MarkGC: end"); +} + +void JSView::ReleaseRT(JSRuntime* rt) +{ + LOGD("JSView => release: start"); + // this should always be true + if (jsViewFunction_) { + jsViewFunction_->ReleaseRT(rt); + } + + LOGD("JSView => release: end"); +} + +// STATIC qjs_class_binding +JSValue JSView::ConstructorCallback(JSContext* ctx, JSValueConst new_target, int argc, JSValueConst* argv) +{ + ACE_SCOPED_TRACE("JSView::QjsConstructor"); + JSValue jsObject = JS_UNDEFINED; + JSAtom renderProp = JS_NewAtom(ctx, "render"); + JSValue jsRenderFunction; + JSView* view = nullptr; + + QJSContext::Scope scope(ctx); + + if (JS_IsUndefined(new_target)) { + return JS_ThrowSyntaxError(ctx, "View called without 'new'!"); + } + + auto proto = JS_GetPropertyStr(ctx, new_target, "prototype"); + if (JS_IsException(proto)) { + LOGE("Can not find prototype of JS View"); + JS_FreeValue(ctx, jsObject); + JS_FreeAtom(ctx, renderProp); + return proto; + } + + if (argc > 1 && (JS_IsNumber(argv[0]) || JS_IsString(argv[0]))) { + ScopedString viewId(argv[0]); + + JSView* parentView = nullptr; + if (!JS_IsUndefined(argv[1]) && JS_IsObject(argv[1])) { + parentView = static_cast(UnwrapAny(argv[1])); + } + + if (parentView && parentView->FindChildById(viewId)) { + auto [recycleView, jsView] = parentView->GetChildById(viewId); + if (!recycleView->NeedsUpdate()) { + recycleView->MarkStatic(); + } + JS_FreeAtom(ctx, renderProp); + JS_FreeValue(ctx, proto); + return jsView; + } else { + // Merge properties defined in JS file with inherited properties - set as new prototype + jsObject = QJSKlass::NewObjectProtoClass(proto); + + LOGD("before JS_GetPropertyNoMagic"); + // this does nto work because jsObject is exotic: JS_GetProperty(ctx, jsObject, renderProp); + // JS_GetPropertyNoMagic is a new function we added to QuickJS. + // It seves a very special purpose just for this one case here: + // the JS render() function is part of the JS object prototype. + // Since the object is a magic one a regular JS_GetProperty can not read + // it (instead the request for the property is to ExoitcGet) + // JS_GetPropertyNoMagic reads the function from the object's prototype + // so that it store in JSRenderFunction. + // use JS_GetPropertyNoMagic instead?; + jsRenderFunction = JS_GetProperty(ctx, jsObject, renderProp); + LOGD("after JS_GetPropertyNoMagic"); + + if (!JS_IsFunction(ctx, jsRenderFunction)) { + LOGE("View derived classes must provide render(){...} function"); + JS_FreeValue(ctx, jsObject); + JS_FreeAtom(ctx, renderProp); + return JS_ThrowSyntaxError(ctx, "View derived classes must provide render(){...} function"); + } + view = new JSView(ctx, jsObject, jsRenderFunction); + if (parentView) { + parentView->AddChildById(viewId, view, jsObject); + } + } + } else { + JS_FreeValue(ctx, jsObject); + JS_FreeAtom(ctx, renderProp); + return JS_ThrowSyntaxError(ctx, "JSView 2 creation with invalid arguments."); + } + + JS_FreeAtom(ctx, renderProp); + JS_FreeValue(ctx, jsRenderFunction); + JS_FreeValue(ctx, proto); + + JS_SetOpaque(jsObject, view); + + return jsObject; +} + +void JSView::QjsDestructor(JSRuntime* rt, JSView* view) +{ + LOGD("JSView(QjsDestructor) start"); + if (!view) + return; + + view->ReleaseRT(rt); + delete view; + LOGD("JSView(QjsDestructor) end"); +} + +void JSView::QjsGcMark(JSRuntime* rt, JSValueConst val, JS_MarkFunc* markFunc) +{ + LOGD("JSView(QjsGcMark) start"); + + JSView* view = Unwrap(val); + if (!view) { + LOGE("Failed to unwrap JSView!"); + return; + } + view->MarkGC(rt, markFunc); + LOGD("JSView(QjsGcMark) end"); +} +#endif + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/jsview/js_view.h b/frameworks/bridge/declarative_frontend/jsview/js_view.h new file mode 100644 index 00000000..c9366edd --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_view.h @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_VIEW_H +#define FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_VIEW_H + +#include + +#include "core/pipeline/base/composed_component.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_customview_base.h" + +#ifdef USE_QUICKJS_ENGINE +#include "frameworks/bridge/declarative_frontend/engine/quickjs/functions/qjs_view_function.h" +#endif + +#ifdef USE_V8_ENGINE +#include "frameworks/bridge/declarative_frontend/engine/v8/functions/v8_view_function.h" +#endif + +namespace OHOS::Ace { + +class ComposedElement; + +} +namespace OHOS::Ace::Framework { + +class JSView : public JSCustomViewBase { + DECLARE_ACE_TYPE(JSView, JSCustomViewBase); + +public: +#ifdef USE_QUICKJS_ENGINE + JSView(JSContext* ctx, JSValue jsObject, JSValue jsRenderFunction); +#endif +#ifdef USE_V8_ENGINE + JSView(v8::Local jsObject, v8::Local jsRenderFunction); +#endif + ~JSView(); + + RefPtr internalRender(); + virtual void MarkNeedUpdate() override; + virtual bool NeedsUpdate() override + { + return needsUpdate_; + } + + OHOS::Ace::ComposedElement* getElement() + { + return element_; + } + + virtual void Destroy(JSViewAbstract* parentCustomView) override; + + static void JSBind(BindingTarget globalObj); +#ifdef USE_V8_ENGINE + static void ConstructorCallback(const v8::FunctionCallbackInfo& args); +#endif + +#ifdef USE_QUICKJS_ENGINE + void MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc) override; + void ReleaseRT(JSRuntime* rt) override; + + static JSValue ConstructorCallback(JSContext* ctx, JSValueConst new_target, int argc, JSValueConst* argv); + static void QjsDestructor(JSRuntime* rt, JSView* ptr); + static void QjsGcMark(JSRuntime* rt, JSValueConst val, JS_MarkFunc* markFunc); +#endif +protected: + virtual RefPtr CreateSpecializedComponent() override; +#ifdef USE_QUICKJS_ENGINE + RefPtr jsViewFunction_; +#endif +#ifdef USE_V8_ENGINE + RefPtr jsViewFunction_; +#endif + OHOS::Ace::ComposedElement* element_ = nullptr; + bool needsUpdate_ = false; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_VIEW_H diff --git a/frameworks/bridge/declarative_frontend/jsview/js_view_abstract.cpp b/frameworks/bridge/declarative_frontend/jsview/js_view_abstract.cpp new file mode 100644 index 00000000..470a1f14 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_view_abstract.cpp @@ -0,0 +1,1741 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/declarative_frontend/jsview/js_view_abstract.h" + +#include "base/json/json_util.h" +#include "frameworks/bridge/common/utils/utils.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_animation.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_view_register.h" +#include "frameworks/core/animation/keyframe.h" +#include "frameworks/core/animation/keyframe_animation.h" + +namespace OHOS::Ace::Framework { + +namespace { +constexpr uint32_t COLOR_ALPHA_OFFSET = 24; +constexpr uint32_t COLOR_ALPHA_VALUE = 0xFF000000; +} // namespace + +static std::atomic g_nextUnusedViewId = { 0 }; + +uint32_t ColorAlphaAdapt(uint32_t origin) +{ + uint32_t result = origin; + if (origin >> COLOR_ALPHA_OFFSET == 0) { + result = origin | COLOR_ALPHA_VALUE; + } + return result; +} + +JSViewAbstract ::JSViewAbstract() : viewId_(++g_nextUnusedViewId), uniqueKey_() +{ + tweenOption_ = TweenOption(); +} + +void JSViewAbstract::Destroy(JSViewAbstract* parentCustomView) +{ + LOGD("JSViewAbstract::Destroy start"); + RemoveViewById(viewId_); + LOGD("JSViewAbstract::Destroy end"); +} + +void JSViewAbstract::CleanPendingAnimation() +{ + if (tweenOption_.IsValid()) { + auto& colorAnimation = tweenOption_.GetColorAnimation(); + if (colorAnimation) { + if (!boxComponent_) { + boxComponent_ = AceType::MakeRefPtr(); + } + boxComponent_->SetColor(colorAnimation->GetEndValue()); + } + + auto& propertyFloatMap = tweenOption_.GetFloatPropertyAnimation(); + if (!propertyFloatMap.empty()) { + if (!boxComponent_) { + boxComponent_ = AceType::MakeRefPtr(); + } + for (auto&& [property, animation] : propertyFloatMap) { + if (property == PropertyAnimatableType::PROPERTY_WIDTH) { + boxComponent_->SetWidth(animation->GetEndValue()); + } else if (property == PropertyAnimatableType::PROPERTY_HEIGHT) { + boxComponent_->SetHeight(animation->GetEndValue()); + } + } + } + + if (tweenOption_.HasTransformFloatChanged()) { + if (!transformComponent_) { + transformComponent_ = AceType::MakeRefPtr(); + } + + for (auto& [type, animation] : tweenOption_.GetTransformFloatAnimation()) { + if (type == AnimationType::SCALE) { + transformComponent_->Scale(animation->GetEndValue()); + } else if (type == AnimationType::ROTATE_Z) { + transformComponent_->RotateZ(animation->GetEndValue()); + } + } + } + + if (tweenOption_.HasTransformOffsetChanged()) { + if (!transformComponent_) { + transformComponent_ = AceType::MakeRefPtr(); + } + for (auto& [type, animation] : tweenOption_.GetTranslateAnimations()) { + if (type == AnimationType::TRANSLATE) { + auto endValue = animation->GetEndValue(); + transformComponent_->Translate(endValue.GetX(), endValue.GetY()); + } + } + } + + auto& opacityAnimation = tweenOption_.GetOpacityAnimation(); + if (opacityAnimation) { + displayComponent_ = AceType::MakeRefPtr(); + displayComponent_->SetOpacity(opacityAnimation->GetEndValue()); + } + } +} + +void JSViewAbstract::ProcessAnimation() +{ + if (animationInitialized_ && tweenOption_.IsValid()) { + transformComponent_ = AceType::MakeRefPtr(); + displayComponent_ = AceType::MakeRefPtr(); + tweenComponent_ = AceType::MakeRefPtr(HasUniqueKey() ? GetUniqueKey() : "Wrapped", "Tween"); + tweenComponent_->SetTweenOption(tweenOption_); + tweenComponent_->MarkDeclarativeAniamtion(); + tweenComponent_->SetTweenOperation(TweenOperation::PLAY); + tweenComponent_->SetIsFirstFrameShow(false); + return; + } + CleanPendingAnimation(); +} + +RefPtr JSViewAbstract::CreateComponent() +{ + auto specializedComponent = CreateSpecializedComponent(); + + if (IsCustomView() || IsForEachView()) { + if (IsStatic()) { + specializedComponent->SetStatic(); + } + return specializedComponent; + } + + ProcessAnimation(); + + std::vector> components; + if (tweenComponent_) { + components.emplace_back(std::move(tweenComponent_)); + } else if (HasUniqueKey()) { + components.emplace_back(AceType::MakeRefPtr(GetUniqueKey(), "Wrapped")); + } + + if (displayComponent_) { + components.emplace_back(std::move(displayComponent_)); + } + + if (transformComponent_) { + components.emplace_back(std::move(transformComponent_)); + } + + for (auto&& component : CreateInteractableComponents()) { + components.emplace_back(std::move(component)); + } + + if (boxComponent_) { + components.emplace_back(std::move(boxComponent_)); + } + + // First, composite all components. + for (int32_t idx = static_cast(components.size()) - 1; idx - 1 >= 0; --idx) { + components[idx - 1]->SetChild(DynamicCast(components[idx])); + } + + if (components.empty()) { + if (IsStatic()) { + specializedComponent->SetStatic(); + } + return specializedComponent; + } + + const auto& parent = components.back(); + if (parent) { + parent->SetChild(specializedComponent); + } + + auto component = AceType::DynamicCast(components.front()); + if (IsStatic()) { + component->SetStatic(); + } + return component; +} + +void JSViewAbstract::CreateAnimation(JSAnimation* animation) +{ + if (animation) { + tweenOption_.SetDuration(animation->GetDuration()); + tweenOption_.SetDelay(animation->GetDelay()); + tweenOption_.SetCurve(CreateCurve(animation->GetAnimationCurve())); + LOGD("CreateAnimation: duration: %{public}d", animation->GetDuration()); + } else { + // Use default options. + LOGW("CreateAnimation: animation object is not provided. Using default options."); + tweenOption_.SetDuration(500); + tweenOption_.SetDelay(0); + tweenOption_.SetCurve(CreateCurve("linear")); + } + tweenOption_.SetIteration(1); + tweenOption_.SetFillMode(FillMode::FORWARDS); + + if (animation && animation->GetNone()) { + LOGD("CreateAnimation: animation.none()"); + animationInitialized_ = false; + tweenOption_.SkipAllPendingAnimation(); + } else { + animationInitialized_ = true; + } +} + +void JSViewAbstract::SetScale(double endScale) +{ + LOGD("CreateScaleAnimation()"); + auto scaleAnimation = AceType::MakeRefPtr>(); + auto keyframe = AceType::MakeRefPtr>(1.0f, endScale); + scaleAnimation->AddKeyframe(keyframe); + scaleAnimation->SetDeclarativeAnimation(true); + tweenOption_.SetTransformFloatAnimation(AnimationType::SCALE, scaleAnimation); +} + +void JSViewAbstract::SetOpacity(double endOpacity) +{ + LOGD("CreateOpacityAnimation()"); + auto opacityAnimation = AceType::MakeRefPtr>(); + auto keyframe1 = AceType::MakeRefPtr>(1.0f, endOpacity); + opacityAnimation->AddKeyframe(keyframe1); + opacityAnimation->SetDeclarativeAnimation(true); + tweenOption_.SetOpacityAnimation(opacityAnimation); +} + +void JSViewAbstract::SetTranslate(double deltaX, double deltaY) +{ + // 'VP' (Density independent pixels) is the default. + auto translate = AceType::MakeRefPtr>(DimensionOffset(Dimension(), Dimension()), + DimensionOffset(Dimension(deltaX, DimensionUnit::VP), Dimension(deltaY, DimensionUnit::VP)), Curves::LINEAR); + + translate->SetDeclarativeAnimation(true); + tweenOption_.SetTranslateAnimations(AnimationType::TRANSLATE, translate); +} + +void JSViewAbstract::SetRotate(double angle) +{ + auto rotate = AceType::MakeRefPtr>(0.0f, angle, Curves::LINEAR); + rotate->SetDeclarativeAnimation(true); + tweenOption_.SetTransformFloatAnimation(AnimationType::ROTATE_Z, rotate); +} + +#ifdef USE_QUICKJS_ENGINE +JSValue JSViewAbstract::JsSetUniqueKey(JSContext* ctx, JSValueConst thisValue, int argc, JSValueConst* argv) +{ + return JsSetSingleString( + ctx, thisValue, argc, argv, [](JSViewAbstract* view, std::string value) { view->setUniqueKey(value); }, + "setUniqueKey"); +} + +JSValue JSViewAbstract::JsMarkStaticView(JSContext* ctx, JSValueConst thisValue, int argc, JSValueConst* argv) +{ + if (JS_IsNull(thisValue)) { + LOGD("thisValue is null, exisitng"); + return thisValue; + } + + if (!JS_IsObject(thisValue)) { + LOGD("thisValue is NOT an object, exisitng"); + return thisValue; + } + + JSViewAbstract* view = static_cast(UnwrapAny(thisValue)); + if (!view) { + LOGE("view is null!"); + return thisValue; + } + view->MarkStatic(); + return JS_DupValue(ctx, thisValue); // for call chaining? +} + +JSValue JSViewAbstract::JsAnimate(JSContext* ctx, JSValueConst thisValue, int32_t argc, JSValueConst* argv) +{ + LOGD("--> JsAnimate"); + JSViewAbstract* view = static_cast(UnwrapAny(thisValue)); + if (!view) { + LOGE("JsAnimate: view is null!"); + return thisValue; + } + + if (argv == nullptr) { + LOGE("JsAnimate: argv error."); + return thisValue; + } + + if (argc == 0) { + LOGW("JsAnimate: No Animation object is provided. Using default animation options."); + view->CreateAnimation(nullptr); + return JS_DupValue(ctx, thisValue); + } + if (argc != 1) { + LOGE("JsAnimate: The arg is wrong, it is supposed to have 1 or 0 arguments."); + return thisValue; + } + if (!JS_IsObject(argv[0])) { + LOGE("JsAnimate: argv[] is not object."); + return thisValue; + } + + QJSContext::Scope scope(ctx); + JSAnimation* animationObj = Unwrap(argv[0]); + if (!animationObj) { + LOGE("JsAnimate: Animation object is null!"); + return thisValue; + } + + view->CreateAnimation(animationObj); + LOGD("<-- JsAnimate"); + return JS_DupValue(ctx, thisValue); +} + +JSValue JSViewAbstract::JsScale(JSContext* ctx, JSValueConst thisValue, int32_t argc, JSValueConst* argv) +{ + LOGD("js_scale_effect"); + if ((argv == nullptr) || (argc < 1)) { + LOGE("argv or argc error, argc = %{private}d", argc); + return thisValue; + } + if (!JS_IsNumber(argv[0])) { + LOGE("argv[] is not object."); + return thisValue; + } + + if (argc == 2 && JS_IsObject(argv[1])) { + JsAnimate(ctx, thisValue, 1, &argv[1]); + JS_FreeValue(ctx, thisValue); + } + + JSViewAbstract* view = static_cast(UnwrapAny(thisValue)); + if (!view) { + LOGE("view is null!"); + return thisValue; + } + + QJSContext::Scope scope(ctx); + double value = 0.0; + JS_ToFloat64(ctx, &value, argv[0]); + view->SetScale(value); + return JS_DupValue(ctx, thisValue); +} + +JSValue JSViewAbstract::JsOpacity(JSContext* ctx, JSValueConst thisValue, int32_t argc, JSValueConst* argv) +{ + LOGD("js_opacity"); + if ((argv == nullptr) || (argc < 1)) { + LOGE("argv or argc error, argc = %{private}d", argc); + return thisValue; + } + if (!JS_IsNumber(argv[0])) { + LOGE("argv[] is not a number."); + return thisValue; + } + + if (argc == 2 && JS_IsObject(argv[1])) { + JsAnimate(ctx, thisValue, 1, &argv[1]); + JS_FreeValue(ctx, thisValue); + } + + JSViewAbstract* view = static_cast(UnwrapAny(thisValue)); + if (!view) { + LOGE("view is null!"); + return thisValue; + } + + QJSContext::Scope scope(ctx); + double value = 0.0; + JS_ToFloat64(ctx, &value, argv[0]); + + view->SetOpacity(value); + return JS_DupValue(ctx, thisValue); +} + +JSValue JSViewAbstract::JsTranslate(JSContext* ctx, JSValueConst thisValue, int32_t argc, JSValueConst* argv) +{ + LOGD("js_translate"); + if ((argv == nullptr) || (argc < 1)) { + LOGE("argv or argc error, argc = %{private}d", argc); + return thisValue; + } + if (!JS_IsNumber(argv[0])) { + LOGE("argv[] is not a number."); + return thisValue; + } + + if (argc == 2 && JS_IsObject(argv[1])) { + JsAnimate(ctx, thisValue, 1, &argv[1]); + JS_FreeValue(ctx, thisValue); + } + + JSViewAbstract* view = static_cast(UnwrapAny(thisValue)); + if (!view) { + LOGE("view is null!"); + return thisValue; + } + + QJSContext::Scope scope(ctx); + double value = 0.0; + JS_ToFloat64(ctx, &value, argv[0]); + + view->SetTranslate(value, value); + return JS_DupValue(ctx, thisValue); +} + +JSValue JSViewAbstract::JsTranslateX(JSContext* ctx, JSValueConst thisValue, int32_t argc, JSValueConst* argv) +{ + LOGD("js_translate"); + if ((argv == nullptr) || (argc < 1)) { + LOGE("argv or argc error, argc = %{private}d", argc); + return thisValue; + } + if (!JS_IsNumber(argv[0])) { + LOGE("argv[] is not a number."); + return thisValue; + } + + if (argc == 2 && JS_IsObject(argv[1])) { + JsAnimate(ctx, thisValue, 1, &argv[1]); + JS_FreeValue(ctx, thisValue); + } + + JSViewAbstract* view = static_cast(UnwrapAny(thisValue)); + if (!view) { + LOGE("view is null!"); + return thisValue; + } + + QJSContext::Scope scope(ctx); + double value = 0.0; + JS_ToFloat64(ctx, &value, argv[0]); + + view->SetTranslate(value, 0.0f); + return JS_DupValue(ctx, thisValue); +} + +JSValue JSViewAbstract::JsTranslateY(JSContext* ctx, JSValueConst thisValue, int32_t argc, JSValueConst* argv) +{ + LOGD("js_translate"); + if ((argv == nullptr) || (argc < 1)) { + LOGE("argv or argc error, argc = %{private}d", argc); + return thisValue; + } + if (!JS_IsNumber(argv[0])) { + LOGE("argv[] is not a number."); + return thisValue; + } + + if (argc == 2 && JS_IsObject(argv[1])) { + JsAnimate(ctx, thisValue, 1, &argv[1]); + JS_FreeValue(ctx, thisValue); + } + + JSViewAbstract* view = static_cast(UnwrapAny(thisValue)); + if (!view) { + LOGE("view is null!"); + return thisValue; + } + + QJSContext::Scope scope(ctx); + double value = 0.0; + JS_ToFloat64(ctx, &value, argv[0]); + + view->SetTranslate(0.0f, value); + return JS_DupValue(ctx, thisValue); +} + +JSValue JSViewAbstract::JsRotate(JSContext* ctx, JSValueConst thisValue, int32_t argc, JSValueConst* argv) +{ + LOGD("js_translate"); + if ((argv == nullptr) || (argc < 1)) { + LOGE("argv or argc error, argc = %{private}d", argc); + return thisValue; + } + if (!JS_IsNumber(argv[0])) { + LOGE("argv[] is not a number."); + return thisValue; + } + + if (argc == 2 && JS_IsObject(argv[1])) { + JsAnimate(ctx, thisValue, 1, &argv[1]); + JS_FreeValue(ctx, thisValue); + } + + JSViewAbstract* view = static_cast(UnwrapAny(thisValue)); + if (!view) { + LOGE("view is null!"); + return thisValue; + } + + QJSContext::Scope scope(ctx); + double value = 0.0; + JS_ToFloat64(ctx, &value, argv[0]); + + view->SetRotate(value); + return JS_DupValue(ctx, thisValue); +} + +JSValue JSViewAbstract::JsWidth(JSContext* ctx, JSValueConst thisValue, int32_t argc, JSValueConst* argv) +{ + if ((argv == nullptr) || (argc < 1)) { + return JS_ThrowSyntaxError(ctx, "js_width: one parameter of type number expected"); + } + if (!JS_IsNumber(argv[0]) && !JS_IsString(argv[0])) { + return JS_ThrowSyntaxError(ctx, "js_width: parameter of type number or string expected"); + } + + if (!JS_IsObject(thisValue)) { + return JS_ThrowInternalError(ctx, "js_width: Failed to unwrap JS object to C++ JSView! this is not an object!"); + } + + if (argc == 2 && JS_IsObject(argv[1])) { + JsAnimate(ctx, thisValue, 1, &argv[1]); + JS_FreeValue(ctx, thisValue); + } + + QJSContext::Scope scope(ctx); + JSViewAbstract* view = static_cast(UnwrapAny(thisValue)); + if (!view) { + return JS_ThrowInternalError(ctx, "js_width: Failed to unwrap JS object to C++ JSView!"); + } + + Dimension value; + if (JS_IsNumber(argv[0])) { + double length = 0.0; + JS_ToFloat64(ctx, &length, argv[0]); + value = Dimension(length, DimensionUnit::VP); + } else { + value = StringUtils::StringToDimension(ScopedString(argv[0]).str(), true); + } + view->SetWidth(value); + return JS_DupValue(ctx, thisValue); +} + +JSValue JSViewAbstract::JsHeight(JSContext* ctx, JSValueConst thisValue, int32_t argc, JSValueConst* argv) +{ + if ((argv == nullptr) || (argc < 1)) { + return JS_ThrowSyntaxError(ctx, "js_height: one parameter of type number expected"); + } + if (!JS_IsNumber(argv[0]) && !JS_IsString(argv[0])) { + return JS_ThrowSyntaxError(ctx, "js_height: parameter of type number expected"); + } + + if (!JS_IsObject(thisValue)) { + return JS_ThrowInternalError( + ctx, "js_height: Failed to unwrap JS object to C++ JSView! this is not an object!"); + } + + if (argc == 2 && JS_IsObject(argv[1])) { + JsAnimate(ctx, thisValue, 1, &argv[1]); + JS_FreeValue(ctx, thisValue); + } + + QJSContext::Scope scope(ctx); + JSViewAbstract* view = static_cast(UnwrapAny(thisValue)); + if (!view) { + return JS_ThrowInternalError(ctx, "js_height: Failed to unwrap JS object to C++ JSView!"); + } + + Dimension value; + if (JS_IsNumber(argv[0])) { + double length = 0.0; + JS_ToFloat64(ctx, &length, argv[0]); + value = Dimension(length, DimensionUnit::VP); + } else { + value = StringUtils::StringToDimension(ScopedString(argv[0]).str(), true); + } + view->SetHeight(value); + return JS_DupValue(ctx, thisValue); +} + +JSValue JSViewAbstract::JsBackgroundColor(JSContext* ctx, JSValueConst thisValue, int32_t argc, JSValueConst* argv) +{ + if ((argv == nullptr) || (argc < 1)) { + return JS_ThrowSyntaxError(ctx, "js_background_color: one parameter of type string expected"); + } + if (!JS_IsString(argv[0]) && !JS_IsNumber(argv[0])) { + return JS_ThrowSyntaxError(ctx, "js_background_color: parameter of type string or number expected"); + } + + if (argc == 2 && JS_IsObject(argv[1])) { + JsAnimate(ctx, thisValue, 1, &argv[1]); + JS_FreeValue(ctx, thisValue); + } + + QJSContext::Scope scope(ctx); + JSViewAbstract* view = static_cast(UnwrapAny(thisValue)); + if (!view) { + return JS_ThrowInternalError(ctx, "js_background_color: Failed to unwrap JS object to C++ JSView!"); + } + + Color color; + if (JS_IsString(argv[0])) { + color = Color::FromString(ScopedString(argv[0]).str()); + } else if (JS_IsNumber(argv[0])) { + uint32_t colorValue; + JS_ToUint32(ctx, &colorValue, argv[0]); + color = Color(ColorAlphaAdapt(colorValue)); + } + view->SetBackgroundColor(color); + return JS_DupValue(ctx, thisValue); +} + +JSValue JSViewAbstract::JsBorderColor(JSContext* ctx, JSValueConst thisValue, int32_t argc, JSValueConst* argv) +{ + if ((argv == nullptr) || (argc < 1)) { + return JS_ThrowSyntaxError(ctx, "JsBorderColor: one parameter of type string expected"); + } + if (!JS_IsString(argv[0]) && !JS_IsNumber(argv[0])) { + return JS_ThrowSyntaxError(ctx, "JsBorderColor: parameter of type string or number expected"); + } + + if (argc == 2 && JS_IsObject(argv[1])) { + JsAnimate(ctx, thisValue, 1, &argv[1]); + JS_FreeValue(ctx, thisValue); + } + + QJSContext::Scope scope(ctx); + JSViewAbstract* view = static_cast(UnwrapAny(thisValue)); + if (!view) { + return JS_ThrowInternalError(ctx, "JsBorderColor: Failed to unwrap JS object to C++ JSView!"); + } + + Color color; + if (JS_IsString(argv[0])) { + color = Color::FromString(ScopedString(argv[0]).str()); + } else if (JS_IsNumber(argv[0])) { + uint32_t colorValue; + JS_ToUint32(ctx, &colorValue, argv[0]); + color = Color(ColorAlphaAdapt(colorValue)); + } + view->SetBorderColor(color); + return JS_DupValue(ctx, thisValue); +} + +JSValue JSViewAbstract::JsPadding(JSContext* ctx, JSValueConst thisValue, int32_t argc, JSValueConst* argv) +{ + return ParseMarginOrPadding(ctx, thisValue, argc, argv, false); +} + +JSValue JSViewAbstract::JsMargin(JSContext* ctx, JSValueConst thisValue, int32_t argc, JSValueConst* argv) +{ + return ParseMarginOrPadding(ctx, thisValue, argc, argv, true); +} + +JSValue JSViewAbstract::ParseMarginOrPadding( + JSContext* ctx, JSValueConst thisValue, int32_t argc, JSValueConst* argv, bool isMargin) +{ + if ((argv == nullptr) || (argc < 1)) { + return JS_ThrowSyntaxError(ctx, "Less than one parameter"); + } + if (!JS_IsString(argv[0]) && !JS_IsNumber(argv[0]) && !JS_IsObject(argv[0])) { + return JS_ThrowSyntaxError(ctx, "Parameter of type string or number or object expected"); + } + QJSContext::Scope scope(ctx); + JSViewAbstract* view = static_cast(UnwrapAny(thisValue)); + if (!view) { + return JS_ThrowInternalError(ctx, "Failed to unwrap JS object to C++ JSView!"); + } + + if (JS_IsObject(argv[0])) { + auto argsPtrItem = JsonUtil::ParseJsonString(ScopedString::Stringify(argv[0])); + if (!argsPtrItem) { + LOGE("Js Parse object failed. argsPtr is null. %s", ScopedString::Stringify(argv[0]).c_str()); + return thisValue; + } + if (argsPtrItem->IsNull()) { + LOGE("Js Parse failed. argsPtr is null. %s", ScopedString::Stringify(argv[0]).c_str()); + return thisValue; + } + Dimension topDimen = view->GetDimension("top", argsPtrItem); + Dimension bottomDimen = view->GetDimension("bottom", argsPtrItem); + Dimension leftDimen = view->GetDimension("left", argsPtrItem); + Dimension rightDimen = view->GetDimension("right", argsPtrItem); + if (isMargin) { + view->SetMargins(topDimen, bottomDimen, leftDimen, rightDimen); + } else { + view->SetPaddings(topDimen, bottomDimen, leftDimen, rightDimen); + } + } else if (JS_IsString(argv[0])) { + if (isMargin) { + view->SetMargin(StringUtils::StringToDimension(ScopedString(argv[0]).str(), true)); + } else { + view->SetPadding(StringUtils::StringToDimension(ScopedString(argv[0]).str(), true)); + } + } else if (JS_IsNumber(argv[0])) { + double length = 0.0; + JS_ToFloat64(ctx, &length, argv[0]); + if (isMargin) { + view->SetMargin(Dimension(length, DimensionUnit::VP)); + } else { + view->SetPadding(Dimension(length, DimensionUnit::VP)); + } + } + return JS_DupValue(ctx, thisValue); +} + +JSValue JSViewAbstract::JsBorder(JSContext* ctx, JSValueConst thisValue, int32_t argc, JSValueConst* argv) +{ + if ((argv == nullptr) || (argc < 1)) { + return JS_ThrowSyntaxError(ctx, "JsBorder: less than one parameter"); + } + if (!JS_IsObject(argv[0])) { + return JS_ThrowSyntaxError(ctx, "JsBorder: parameter of type object expected"); + } + QJSContext::Scope scope(ctx); + JSViewAbstract* view = static_cast(UnwrapAny(thisValue)); + if (!view) { + return JS_ThrowInternalError(ctx, "JsBorder: Failed to unwrap JS object to C++ JSView!"); + } + auto argsPtrItem = JsonUtil::ParseJsonString(ScopedString::Stringify(argv[0])); + if (!argsPtrItem) { + LOGE("Js Parse Border failed. argsPtr is null. %s", ScopedString::Stringify(argv[0]).c_str()); + return thisValue; + } + if (argsPtrItem->IsNull()) { + LOGE("Js Parse Border failed. argsPtr is null. %s", ScopedString::Stringify(argv[0]).c_str()); + return thisValue; + } + + Dimension width = view->GetDimension("width", argsPtrItem); + Dimension radius = view->GetDimension("radius", argsPtrItem); + auto borderStyle = argsPtrItem->GetInt("style", static_cast(BorderStyle::SOLID)); + std::unique_ptr colorValue = argsPtrItem->GetValue("color"); + Color color; + if (colorValue->IsString()) { + color = Color::FromString(colorValue->GetString()); + } else if (colorValue->IsNumber()) { + color = Color(ColorAlphaAdapt(colorValue->GetUInt())); + } + LOGD("JsBorder width = %lf unit = %d, radius = %lf unit = %d, borderStyle = %d, color = %x", width.Value(), + width.Unit(), radius.Value(), radius.Unit(), borderStyle, color.GetValue()); + view->SetBorderStyle(borderStyle); + view->SetBorderColor(color); + view->SetBorderWidth(width); + view->SetBorderRadius(radius); + return JS_DupValue(ctx, thisValue); +} + +JSValue JSViewAbstract::JsBorderWidth(JSContext* ctx, JSValueConst thisValue, int32_t argc, JSValueConst* argv) +{ + JSViewAbstract* view = static_cast(UnwrapAny(thisValue)); + if (!view) { + return JS_ThrowInternalError(ctx, "JsBorder: Failed to unwrap JS object to C++ JSView!"); + } + Dimension borderWidth; + JSValue result = ParseDimension(ctx, thisValue, argc, argv, borderWidth); + LOGD("borderWidth = %lf unit = %d", borderWidth.Value(), borderWidth.Unit()); + view->SetBorderWidth(borderWidth); + return result; +} + +JSValue JSViewAbstract::JsBorderRadius(JSContext* ctx, JSValueConst thisValue, int32_t argc, JSValueConst* argv) +{ + JSViewAbstract* view = static_cast(UnwrapAny(thisValue)); + if (!view) { + return JS_ThrowInternalError(ctx, "JsBorder: Failed to unwrap JS object to C++ JSView!"); + } + Dimension borderRadius; + JSValue result = ParseDimension(ctx, thisValue, argc, argv, borderRadius); + view->SetBorderRadius(borderRadius); + LOGD("borderRadius = %lf unit = %d", borderRadius.Value(), borderRadius.Unit()); + return result; +} + +JSValue JSViewAbstract::ParseDimension( + JSContext* ctx, JSValueConst thisValue, int32_t argc, JSValueConst* argv, Dimension& result) +{ + if ((argv == nullptr) || (argc < 1)) { + LOGE("At least one parameter expected"); + return JS_ThrowSyntaxError(ctx, "At least one parameter expected"); + } + if (!JS_IsNumber(argv[0]) && !JS_IsString(argv[0])) { + return JS_ThrowSyntaxError(ctx, "Parameter of type number or string expected"); + } + if (!JS_IsObject(thisValue)) { + return JS_ThrowInternalError(ctx, "Failed to unwrap JS object to C++ JSView! this is not an object!"); + } + QJSContext::Scope scope(ctx); + JSViewAbstract* view = static_cast(UnwrapAny(thisValue)); + if (!view) { + return JS_ThrowInternalError(ctx, "Failed to unwrap JS object to C++ JSView!"); + } + + if (JS_IsNumber(argv[0])) { + double length = 0.0; + JS_ToFloat64(ctx, &length, argv[0]); + result = Dimension(length, DimensionUnit::VP); + } else { + result = StringUtils::StringToDimension(ScopedString(argv[0]).str(), true); + } + return JS_DupValue(ctx, thisValue); +} +#endif // USE_QUICKJS_ENGINE + +#ifdef USE_V8_ENGINE +void JSViewAbstract::JsAnimate(const v8::FunctionCallbackInfo& info) +{ + LOGD("--> JsAnimate"); + auto isolate = info.GetIsolate(); + v8::HandleScope scp(isolate); + auto context = isolate->GetCurrentContext(); + + JSViewAbstract* view = static_cast(info.This()->GetAlignedPointerFromInternalField(0)); + if (!view) { + LOGE("view is null!"); + return; + } + + if (info.Length() == 0) { + LOGW("JsAnimate: No Animation object is provided. Using default animation options."); + view->CreateAnimation(nullptr); + info.GetReturnValue().Set(info.This()); + return; + } + + if (info.Length() != 1) { + LOGE("JsAnimate: The arg is wrong, it is supposed to have 1 or 0 arguments."); + return; + } + if (!info[0]->IsObject()) { + LOGE("JsAnimate: arg is not object."); + return; + } + + v8::Local obj = info[0]->ToObject(context).ToLocalChecked(); + JSAnimation* animationObj = static_cast(obj->GetAlignedPointerFromInternalField(0)); + if (!animationObj) { + LOGE("JsAnimate: Animation object is null!"); + info.GetReturnValue().Set(info.This()); + return; + } + + view->CreateAnimation(animationObj); + info.GetReturnValue().Set(info.This()); + LOGD("<-- JsAnimate"); +} + +void JSViewAbstract::JsScale(const v8::FunctionCallbackInfo& info) +{ + LOGD("js_scale"); + auto isolate = info.GetIsolate(); + v8::HandleScope scp(isolate); + auto context = isolate->GetCurrentContext(); + + if (info.Length() < 1) { + LOGE("The arg is wrong, it is supposed to have atleast 1 arguments"); + return; + } + + if (!info[0]->IsNumber()) { + LOGE("arg is not Number."); + return; + } + + if (info.Length() == 2 && info[1]->IsObject()) { + JsAnimate(info); + } + + JSViewAbstract* view = static_cast(info.This()->GetAlignedPointerFromInternalField(0)); + if (!view) { + LOGE("view is null!"); + return; + } + + view->SetScale(info[0]->NumberValue(context).ToChecked()); + info.GetReturnValue().Set(info.This()); +} + +void JSViewAbstract::JsOpacity(const v8::FunctionCallbackInfo& info) +{ + LOGD("js_opacity"); + auto isolate = info.GetIsolate(); + v8::HandleScope scp(isolate); + auto context = isolate->GetCurrentContext(); + + if (info.Length() < 1) { + LOGE("The arg is wrong, it is supposed to have atleast 1 arguments"); + return; + } + + if (!info[0]->IsNumber()) { + LOGE("arg is not Number."); + return; + } + + if (info.Length() == 2 && info[1]->IsObject()) { + JsAnimate(info); + } + + JSViewAbstract* view = static_cast(info.This()->GetAlignedPointerFromInternalField(0)); + if (!view) { + LOGE("view is null!"); + return; + } + + view->SetOpacity(info[0]->NumberValue(context).ToChecked()); + info.GetReturnValue().Set(info.This()); +} + +void JSViewAbstract::JsTranslate(const v8::FunctionCallbackInfo& info) +{ + LOGD("js_translate"); + auto isolate = info.GetIsolate(); + v8::HandleScope scp(isolate); + auto context = isolate->GetCurrentContext(); + + if (info.Length() < 1) { + LOGE("The arg is wrong, it is supposed to have atleast 1 arguments"); + return; + } + + if (!info[0]->IsNumber()) { + LOGE("arg is not Number."); + return; + } + + if (info.Length() == 2 && info[1]->IsObject()) { + JsAnimate(info); + } + + JSViewAbstract* view = static_cast(info.This()->GetAlignedPointerFromInternalField(0)); + if (!view) { + LOGE("view is null!"); + return; + } + + view->SetTranslate(info[0]->NumberValue(context).ToChecked(), info[0]->NumberValue(context).ToChecked()); + info.GetReturnValue().Set(info.This()); +} + +void JSViewAbstract::JsTranslateX(const v8::FunctionCallbackInfo& info) +{ + LOGD("JsTranslateX"); + auto isolate = info.GetIsolate(); + v8::HandleScope scp(isolate); + auto context = isolate->GetCurrentContext(); + + if (info.Length() < 1) { + LOGE("The arg is wrong, it is supposed to have atleast 1 arguments"); + return; + } + + if (!info[0]->IsNumber()) { + LOGE("arg is not Number."); + return; + } + + if (info.Length() == 2 && info[1]->IsObject()) { + JsAnimate(info); + } + + JSViewAbstract* view = static_cast(info.This()->GetAlignedPointerFromInternalField(0)); + if (!view) { + LOGE("view is null!"); + return; + } + + view->SetTranslate(info[0]->NumberValue(context).ToChecked(), 0.0); + info.GetReturnValue().Set(info.This()); +} + +void JSViewAbstract::JsTranslateY(const v8::FunctionCallbackInfo& info) +{ + LOGD("JsTranslateY"); + auto isolate = info.GetIsolate(); + v8::HandleScope scp(isolate); + auto context = isolate->GetCurrentContext(); + + if (info.Length() < 1) { + LOGE("The arg is wrong, it is supposed to have atleast 1 arguments"); + return; + } + + if (!info[0]->IsNumber()) { + LOGE("arg is not Number."); + return; + } + + if (info.Length() == 2 && info[1]->IsObject()) { + JsAnimate(info); + } + + JSViewAbstract* view = static_cast(info.This()->GetAlignedPointerFromInternalField(0)); + if (!view) { + LOGE("view is null!"); + return; + } + + view->SetTranslate(0.0, info[0]->NumberValue(context).ToChecked()); + info.GetReturnValue().Set(info.This()); +} + +void JSViewAbstract::JsRotate(const v8::FunctionCallbackInfo& info) +{ + LOGD("js_translate"); + auto isolate = info.GetIsolate(); + v8::HandleScope scp(isolate); + auto context = isolate->GetCurrentContext(); + + if (info.Length() < 1) { + LOGE("The arg is wrong, it is supposed to have atleast 1 arguments"); + return; + } + + if (!info[0]->IsNumber()) { + LOGE("arg is not Number."); + return; + } + + if (info.Length() == 2 && info[1]->IsObject()) { + JsAnimate(info); + } + + JSViewAbstract* view = static_cast(info.This()->GetAlignedPointerFromInternalField(0)); + if (!view) { + LOGE("view is null!"); + return; + } + + view->SetRotate(info[0]->NumberValue(context).ToChecked()); + info.GetReturnValue().Set(info.This()); +} + +void JSViewAbstract::JsWidth(const v8::FunctionCallbackInfo& info) +{ + auto isolate = info.GetIsolate(); + v8::HandleScope scp(isolate); + auto context = isolate->GetCurrentContext(); + + if (info.Length() < 1) { + LOGE("The arg is wrong, it is supposed to have atleast 1 arguments"); + return; + } + + if (!info[0]->IsNumber() && !info[0]->IsString()) { + LOGE("arg is not Number or String."); + return; + } + + if (info.Length() == 2 && info[1]->IsObject()) { + JsAnimate(info); + } + + JSViewAbstract* view = static_cast(info.This()->GetAlignedPointerFromInternalField(0)); + if (!view) { + LOGE("view is null!"); + return; + } + Dimension value; + if (info[0]->IsNumber()) { + value = Dimension(info[0]->NumberValue(context).ToChecked(), DimensionUnit::VP); + } else { + value = StringUtils::StringToDimension(V8Utils::ScopedString(info[0]).get(), true); + } + view->SetWidth(value); + info.GetReturnValue().Set(info.This()); +} + +void JSViewAbstract::JsHeight(const v8::FunctionCallbackInfo& info) +{ + auto isolate = info.GetIsolate(); + v8::HandleScope scp(isolate); + auto context = isolate->GetCurrentContext(); + + if (info.Length() < 1) { + LOGE("The arg is wrong, it is supposed to have atleast 1 arguments"); + return; + } + + if (!info[0]->IsNumber() && !info[0]->IsString()) { + LOGE("arg is not Number or String."); + return; + } + + if (info.Length() == 2 && info[1]->IsObject()) { + JsAnimate(info); + } + + JSViewAbstract* view = static_cast(info.This()->GetAlignedPointerFromInternalField(0)); + if (!view) { + LOGE("view is null!"); + return; + } + + Dimension value; + if (info[0]->IsNumber()) { + value = Dimension(info[0]->NumberValue(context).ToChecked(), DimensionUnit::VP); + } else { + value = StringUtils::StringToDimension(V8Utils::ScopedString(info[0]).get(), true); + } + view->SetHeight(value); + info.GetReturnValue().Set(info.This()); +} + +void JSViewAbstract::JsBorderColor(const v8::FunctionCallbackInfo& info) +{ + auto isolate = info.GetIsolate(); + v8::HandleScope scp(isolate); + auto context = isolate->GetCurrentContext(); + + if (info.Length() < 1) { + LOGE("The arg is wrong, it is supposed to have atleast 1 arguments"); + return; + } + + if (!info[0]->IsString() && !info[0]->IsNumber()) { + LOGE("arg is not a string or number."); + return; + } + JSViewAbstract* view = static_cast(info.This()->GetAlignedPointerFromInternalField(0)); + if (!view) { + LOGE("view is null!"); + return; + } + Color color; + if (info[0]->IsString()) { + color = Color::FromString(V8Utils::ScopedString(info[0]).get()); + } else if (info[0]->IsNumber()) { + color = Color(ColorAlphaAdapt((uint32_t)info[0]->NumberValue(context).ToChecked())); + } + view->SetBorderColor(color); + info.GetReturnValue().Set(info.This()); +} + +void JSViewAbstract::JsBackgroundColor(const v8::FunctionCallbackInfo& info) +{ + auto isolate = info.GetIsolate(); + v8::HandleScope scp(isolate); + auto context = isolate->GetCurrentContext(); + + if (info.Length() < 1) { + LOGE("The arg is wrong, it is supposed to have atleast 1 arguments"); + return; + } + + if (!info[0]->IsString() && !info[0]->IsNumber()) { + LOGE("arg is not a string or number."); + return; + } + + if (info.Length() == 2 && info[1]->IsObject()) { + JsAnimate(info); + } + + JSViewAbstract* view = static_cast(info.This()->GetAlignedPointerFromInternalField(0)); + if (!view) { + LOGE("view is null!"); + return; + } + + Color color; + if (info[0]->IsString()) { + color = Color::FromString(V8Utils::ScopedString(info[0]).get()); + } else if (info[0]->IsNumber()) { + color = Color(ColorAlphaAdapt((uint32_t)info[0]->NumberValue(context).ToChecked())); + } + view->SetBackgroundColor(color); + info.GetReturnValue().Set(info.This()); +} + +void JSViewAbstract::JsPadding(const v8::FunctionCallbackInfo& info) +{ + ParseMarginOrPadding(info, false); +} + +void JSViewAbstract::JsMargin(const v8::FunctionCallbackInfo& info) +{ + ParseMarginOrPadding(info, true); +} +void JSViewAbstract::ParseMarginOrPadding(const v8::FunctionCallbackInfo& info, bool isMargin) +{ + auto isolate = info.GetIsolate(); + v8::HandleScope scp(isolate); + auto context = isolate->GetCurrentContext(); + if (info.Length() < 1) { + LOGE("The arg is wrong, it is supposed to have atleast 1 arguments"); + return; + } + if (!info[0]->IsString() && !info[0]->IsNumber() && !info[0]->IsObject()) { + LOGE("arg is not a string, number or object."); + return; + } + JSViewAbstract* view = static_cast(info.This()->GetAlignedPointerFromInternalField(0)); + if (!view) { + LOGE("view is null!"); + return; + } + if (info[0]->IsObject()) { + auto argsPtrItem = JsonUtil::ParseJsonString( + V8Utils::ScopedString(v8::JSON::Stringify(context, info[0]).ToLocalChecked()).get()); + if (!argsPtrItem) { + LOGE("Js Parse object failed. argsPtr is null. %s", V8Utils::ScopedString(info[0]).get()); + info.GetReturnValue().Set(info.This()); + return; + } + if (argsPtrItem->IsNull()) { + info.GetReturnValue().Set(info.This()); + return; + } + Dimension topDimen = view->GetDimension("top", argsPtrItem); + Dimension bottomDimen = view->GetDimension("bottom", argsPtrItem); + Dimension leftDimen = view->GetDimension("left", argsPtrItem); + Dimension rightDimen = view->GetDimension("right", argsPtrItem); + if (isMargin) { + view->SetMargins(topDimen, bottomDimen, leftDimen, rightDimen); + } else { + view->SetPaddings(topDimen, bottomDimen, leftDimen, rightDimen); + } + } else if (info[0]->IsString()) { + Dimension length = StringUtils::StringToDimension(V8Utils::ScopedString(info[0]).get(), true); + if (isMargin) { + view->SetMargin(length); + } else { + view->SetPadding(length); + } + } else if (info[0]->IsNumber()) { + Dimension length = Dimension(info[0]->NumberValue(context).ToChecked(), DimensionUnit::VP); + if (isMargin) { + view->SetMargin(length); + } else { + view->SetPadding(length); + } + } + info.GetReturnValue().Set(info.This()); +} +void JSViewAbstract::JsBorder(const v8::FunctionCallbackInfo& info) +{ + auto isolate = info.GetIsolate(); + v8::HandleScope scp(isolate); + auto context = isolate->GetCurrentContext(); + if (info.Length() < 1) { + LOGE("The arg is wrong, it is supposed to have atleast 1 arguments"); + return; + } + if (!info[0]->IsObject()) { + LOGE("arg is not a object."); + return; + } + JSViewAbstract* view = static_cast(info.This()->GetAlignedPointerFromInternalField(0)); + if (!view) { + LOGE("view is null!"); + return; + } + auto argsPtrItem = + JsonUtil::ParseJsonString(V8Utils::ScopedString(v8::JSON::Stringify(context, info[0]).ToLocalChecked()).get()); + if (!argsPtrItem || argsPtrItem->IsNull()) { + LOGE("Js Parse object failed. argsPtr is null. %s", V8Utils::ScopedString(info[0]).get()); + info.GetReturnValue().Set(info.This()); + return; + } + Dimension width = view->GetDimension("width", argsPtrItem); + Dimension radius = view->GetDimension("radius", argsPtrItem); + auto borderStyle = argsPtrItem->GetInt("style", static_cast(BorderStyle::SOLID)); + std::unique_ptr colorValue = argsPtrItem->GetValue("color"); + Color color; + if (colorValue->IsString()) { + color = Color::FromString(colorValue->GetString()); + } else if (colorValue->IsNumber()) { + color = Color(ColorAlphaAdapt(colorValue->GetUInt())); + } + LOGD("JsBorder width = %lf unit = %d, radius = %lf unit = %d, borderStyle = %d, color = %x", width.Value(), + width.Unit(), radius.Value(), radius.Unit(), borderStyle, color.GetValue()); + view->SetBorderColor(color); + view->SetBorderStyle(borderStyle); + view->SetBorderWidth(width); + view->SetBorderRadius(radius); + info.GetReturnValue().Set(info.This()); +} + +void JSViewAbstract::JsBorderWidth(const v8::FunctionCallbackInfo& info) +{ + JSViewAbstract* view = static_cast(info.This()->GetAlignedPointerFromInternalField(0)); + if (!view) { + LOGE("view is null!"); + return; + } + view->SetBorderWidth(ParseDimension(info)); + info.GetReturnValue().Set(info.This()); +} + +void JSViewAbstract::JsBorderRadius(const v8::FunctionCallbackInfo& info) +{ + JSViewAbstract* view = static_cast(info.This()->GetAlignedPointerFromInternalField(0)); + if (!view) { + LOGE("view is null!"); + return; + } + view->SetBorderRadius(ParseDimension(info)); + info.GetReturnValue().Set(info.This()); +} + +Dimension JSViewAbstract::ParseDimension(const v8::FunctionCallbackInfo& info) +{ + auto isolate = info.GetIsolate(); + v8::HandleScope scp(isolate); + auto context = isolate->GetCurrentContext(); + Dimension DEFAULT_DIMENSION = Dimension(0.0, DimensionUnit::VP); + if (info.Length() < 1) { + LOGE("The arg is wrong, it is supposed to have atleast 1 arguments"); + return DEFAULT_DIMENSION; + } + if (!info[0]->IsNumber() && !info[0]->IsString()) { + LOGE("arg is not Number or String."); + return DEFAULT_DIMENSION; + } + JSViewAbstract* view = static_cast(info.This()->GetAlignedPointerFromInternalField(0)); + if (!view) { + LOGE("view is null!"); + return DEFAULT_DIMENSION; + } + Dimension value; + if (info[0]->IsNumber()) { + value = Dimension(info[0]->NumberValue(context).ToChecked(), DimensionUnit::VP); + } else { + value = StringUtils::StringToDimension(V8Utils::ScopedString(info[0]).get(), true); + } + return value; +} +#endif + +void JSViewAbstract::JSBind() +{ + MethodOptions opt = MethodOptions::RETURN_SELF; + JSClass::Declare("JSViewAbstract"); + JSClass::Method("borderStyle", &JSViewAbstract::SetBorderStyle, opt); + JSClass::Method("marginTop", &JSViewAbstract::SetMarginTop, opt); + JSClass::Method("marginBottom", &JSViewAbstract::SetMarginBottom, opt); + JSClass::Method("marginLeft", &JSViewAbstract::SetMarginLeft, opt); + JSClass::Method("marginRight", &JSViewAbstract::SetMarginRight, opt); + JSClass::Method("markNeedUpdate", &JSViewAbstract::MarkNeedUpdate); + JSClass::Method("setUniqueKey", &JSViewAbstract::setUniqueKey, opt); + JSClass::Method("markStatic", &JSViewAbstract::MarkStatic, opt); + JSClass::Method("getViewId", &JSViewAbstract::getViewId, opt); + JSClass::Method("paddingTop", &JSViewAbstract::SetPaddingTop, opt); + JSClass::Method("paddingBottom", &JSViewAbstract::SetPaddingBottom, opt); + JSClass::Method("paddingLeft", &JSViewAbstract::SetPaddingLeft, opt); + JSClass::Method("paddingRight", &JSViewAbstract::SetPaddingRight, opt); + + JSClass::CustomMethod("width", JsWidth); + JSClass::CustomMethod("height", JsHeight); + JSClass::CustomMethod("backgroundColor", JsBackgroundColor); + JSClass::CustomMethod("borderColor", JsBorderColor); + JSClass::CustomMethod("animate", JsAnimate); + JSClass::CustomMethod("scale", JsScale); + JSClass::CustomMethod("opacity", JsOpacity); + JSClass::CustomMethod("rotate", JsRotate); + JSClass::CustomMethod("translate", JsTranslate); + JSClass::CustomMethod("translateX", JsTranslateX); + JSClass::CustomMethod("translateY", JsTranslateY); + JSClass::CustomMethod("padding", &JSViewAbstract::JsPadding); + JSClass::CustomMethod("margin", &JSViewAbstract::JsMargin); + JSClass::CustomMethod("border", JsBorder); + JSClass::CustomMethod("borderWidth", JsBorderWidth); + JSClass::CustomMethod("borderRadius", JsBorderRadius); +} + +Dimension JSViewAbstract::ViewWidth() const +{ + if (!tweenOption_.IsValid()) { + return Dimension(); + } + + auto& propertyFloatMap = const_cast(tweenOption_).GetFloatPropertyAnimation(); + auto i = propertyFloatMap.find(PropertyAnimatableType::PROPERTY_WIDTH); + if (i != propertyFloatMap.end()) { + return Dimension(i->second->GetEndValue(), DimensionUnit::PX); + } + + return Dimension(); +} + +Dimension JSViewAbstract::ViewHeight() const +{ + if (!tweenOption_.IsValid()) { + return Dimension(); + } + + auto& propertyFloatMap = const_cast(tweenOption_).GetFloatPropertyAnimation(); + auto i = propertyFloatMap.find(PropertyAnimatableType::PROPERTY_HEIGHT); + if (i != propertyFloatMap.end()) { + return Dimension(i->second->GetEndValue(), DimensionUnit::PX); + } + + return Dimension(); +} + +const Dimension& JSViewAbstract::ViewRadius() const +{ + // TODO: radii specified per corner and x/y bases, thus we assume they are all the same. + return GetBorder().TopLeftRadius().GetX(); +} + +RefPtr JSViewAbstract::GetOrMakeBoxComponent() const +{ + if (!boxComponent_) { + boxComponent_ = AceType::MakeRefPtr(); + } + + return boxComponent_; +} + +RefPtr JSViewAbstract::GetBackDecoration() const +{ + auto box = GetOrMakeBoxComponent(); + + auto decoration = box->GetBackDecoration(); + if (!decoration) { + decoration = MakeRefPtr(); + box->SetBackDecoration(decoration); + } + + return decoration; +} + +const Border& JSViewAbstract::GetBorder() const +{ + return GetBackDecoration()->GetBorder(); +} + +BorderEdge JSViewAbstract::GetLeftBorderEdge() +{ + return GetBorder().Left(); +} + +BorderEdge JSViewAbstract::GetTopBorderEdge() +{ + return GetBorder().Top(); +} + +BorderEdge JSViewAbstract::GetRightBorderEdge() +{ + return GetBorder().Right(); +} + +BorderEdge JSViewAbstract::GetBottomBorderEdge() +{ + return GetBorder().Bottom(); +} + +void JSViewAbstract::SetBorderEdge(const BorderEdge& edge) +{ + Border border = GetBorder(); + border.SetBorderEdge(edge); + SetBorder(border); +} + +void JSViewAbstract::SetLeftBorderEdge(const BorderEdge& edge) +{ + Border border = GetBorder(); + border.SetLeftEdge(edge); + SetBorder(border); +} + +void JSViewAbstract::SetTopBorderEdge(const BorderEdge& edge) +{ + Border border = GetBorder(); + border.SetTopEdge(edge); + SetBorder(border); +} + +void JSViewAbstract::SetRightBorderEdge(const BorderEdge& edge) +{ + Border border = GetBorder(); + border.SetRightEdge(edge); + SetBorder(border); +} + +void JSViewAbstract::SetBottomBorderEdge(const BorderEdge& edge) +{ + Border border = GetBorder(); + border.SetBottomEdge(edge); + SetBorder(border); +} + +void JSViewAbstract::SetBorder(const Border& border) +{ + GetBackDecoration()->SetBorder(border); +} + +void JSViewAbstract::SetBorderRadius(const Dimension& value) +{ + Border border = GetBorder(); + border.SetBorderRadius(Radius(value)); + SetBorder(border); +} + +void JSViewAbstract::SetBorderStyle(int32_t style) +{ + BorderStyle borderStyle = BorderStyle::SOLID; + + if (static_cast(BorderStyle::SOLID) == style) { + borderStyle = BorderStyle::SOLID; + } else if (static_cast(BorderStyle::DASHED) == style) { + borderStyle = BorderStyle::DASHED; + } else if (static_cast(BorderStyle::DOTTED) == style) { + borderStyle = BorderStyle::DOTTED; + } else { + borderStyle = BorderStyle::NONE; + } + + BorderEdge edge = GetLeftBorderEdge(); + edge.SetStyle(borderStyle); + SetBorderEdge(edge); +} + +void JSViewAbstract::SetBorderColor(const Color& color) +{ + SetLeftBorderColor(color); + SetTopBorderColor(color); + SetRightBorderColor(color); + SetBottomBorderColor(color); +} + +void JSViewAbstract::SetLeftBorderColor(const Color& color) +{ + BorderEdge edge = GetLeftBorderEdge(); + edge.SetColor(color); + SetLeftBorderEdge(edge); +} + +void JSViewAbstract::SetTopBorderColor(const Color& color) +{ + BorderEdge edge = GetTopBorderEdge(); + edge.SetColor(color); + SetTopBorderEdge(edge); +} + +void JSViewAbstract::SetRightBorderColor(const Color& color) +{ + BorderEdge edge = GetRightBorderEdge(); + edge.SetColor(color); + SetRightBorderEdge(edge); +} + +void JSViewAbstract::SetBottomBorderColor(const Color& color) +{ + BorderEdge edge = GetBottomBorderEdge(); + edge.SetColor(color); + SetBottomBorderEdge(edge); +} + +void JSViewAbstract::SetBorderWidth(const Dimension& value) +{ + SetLeftBorderWidth(value); + SetTopBorderWidth(value); + SetRightBorderWidth(value); + SetBottomBorderWidth(value); +} + +void JSViewAbstract::SetLeftBorderWidth(const Dimension& value) +{ + BorderEdge edge = GetLeftBorderEdge(); + edge.SetWidth(Dimension(value)); + SetLeftBorderEdge(edge); +} + +void JSViewAbstract::SetTopBorderWidth(const Dimension& value) +{ + BorderEdge edge = GetTopBorderEdge(); + edge.SetWidth(Dimension(value)); + SetTopBorderEdge(edge); +} + +void JSViewAbstract::SetRightBorderWidth(const Dimension& value) +{ + BorderEdge edge = GetRightBorderEdge(); + edge.SetWidth(Dimension(value)); + SetRightBorderEdge(edge); +} + +void JSViewAbstract::SetBottomBorderWidth(const Dimension& value) +{ + BorderEdge edge = GetBottomBorderEdge(); + edge.SetWidth(Dimension(value)); + SetBottomBorderEdge(edge); +} + +void JSViewAbstract::SetMarginTop(const std::string& value) +{ + auto box = GetOrMakeBoxComponent(); + Edge margin = box->GetMargin(); + margin.SetTop(StringUtils::StringToDimension(value, true)); + box->SetMargin(margin); +} + +void JSViewAbstract::SetMarginBottom(const std::string& value) +{ + auto box = GetOrMakeBoxComponent(); + Edge margin = box->GetMargin(); + margin.SetBottom(StringUtils::StringToDimension(value, true)); + box->SetMargin(margin); +} + +void JSViewAbstract::SetMarginLeft(const std::string& value) +{ + auto box = GetOrMakeBoxComponent(); + Edge margin = box->GetMargin(); + margin.SetLeft(StringUtils::StringToDimension(value, true)); + box->SetMargin(margin); +} + +void JSViewAbstract::SetMarginRight(const std::string& value) +{ + auto box = GetOrMakeBoxComponent(); + Edge margin = box->GetMargin(); + margin.SetRight(StringUtils::StringToDimension(value, true)); + box->SetMargin(margin); +} + +void JSViewAbstract::SetMargin(const std::string& value) +{ + Dimension dimen = StringUtils::StringToDimension(value, true); + SetMargins(dimen, dimen, dimen, dimen); +} + +void JSViewAbstract::SetMargins( + const Dimension& top, const Dimension& bottom, const Dimension& left, const Dimension& right) +{ + auto box = GetOrMakeBoxComponent(); + Edge margin(left, top, right, bottom); + box->SetMargin(margin); +} + +void JSViewAbstract::SetBackgroundColor(const Color& color) +{ + userDefColor_ = true; + backGroundColor_ = color; + ProcessBackgroundColor(); +} + +void JSViewAbstract::ProcessBackgroundColor() +{ + if (!boxComponent_) { + boxComponent_ = AceType::MakeRefPtr(); + } + auto colorAnimation = AceType::MakeRefPtr>(); + auto keyframe1 = AceType::MakeRefPtr>(1.0f, backGroundColor_); + colorAnimation->AddKeyframe(keyframe1); + colorAnimation->SetEvaluator(AceType::MakeRefPtr()); + colorAnimation->SetDeclarativeAnimation(true); + tweenOption_.SetColorAnimation(colorAnimation); +} + +void JSViewAbstract::SetWidth(const Dimension& width) +{ + isDefWidth_ = true; + if (!boxComponent_) { + boxComponent_ = AceType::MakeRefPtr(); + } + auto wCurve = AceType::MakeRefPtr>( + -1.0, width.ConvertToPx(SystemProperties::GetResolution()), Curves::LINEAR); + wCurve->SetDeclarativeAnimation(true); + tweenOption_.SetPropertyAnimationFloat(PropertyAnimatableType::PROPERTY_WIDTH, wCurve); +} + +void JSViewAbstract::SetHeight(const Dimension& height) +{ + isDefHeight_ = true; + if (!boxComponent_) { + boxComponent_ = AceType::MakeRefPtr(); + } + auto hCurve = AceType::MakeRefPtr>( + -1.0, height.ConvertToPx(SystemProperties::GetResolution()), Curves::LINEAR); + hCurve->SetDeclarativeAnimation(true); + tweenOption_.SetPropertyAnimationFloat(PropertyAnimatableType::PROPERTY_HEIGHT, hCurve); +} + +void JSViewAbstract::SetPaddingTop(const std::string& value) +{ + auto box = GetOrMakeBoxComponent(); + Edge padding = box->GetPadding(); + padding.SetTop(StringUtils::StringToDimension(value, true)); + box->SetPadding(padding); +} + +void JSViewAbstract::SetPaddingBottom(const std::string& value) +{ + auto box = GetOrMakeBoxComponent(); + Edge padding = box->GetPadding(); + padding.SetBottom(StringUtils::StringToDimension(value, true)); + box->SetPadding(padding); +} + +void JSViewAbstract::SetPaddingLeft(const std::string& value) +{ + auto box = GetOrMakeBoxComponent(); + Edge padding = box->GetPadding(); + padding.SetLeft(StringUtils::StringToDimension(value, true)); + box->SetPadding(padding); +} + +void JSViewAbstract::SetPaddingRight(const std::string& value) +{ + auto box = GetOrMakeBoxComponent(); + Edge padding = box->GetPadding(); + padding.SetRight(StringUtils::StringToDimension(value, true)); + box->SetPadding(padding); +} + +void JSViewAbstract::SetPadding(const Dimension& value) +{ + SetPaddings(value, value, value, value); +} + +void JSViewAbstract::SetPaddings( + const Dimension& top, const Dimension& bottom, const Dimension& left, const Dimension& right) +{ + auto box = GetOrMakeBoxComponent(); + Edge padding(left, top, right, bottom); + box->SetPadding(padding); +} + +void JSViewAbstract::SetMargin(const Dimension& value) +{ + SetMargins(value, value, value, value); +} + +Dimension JSViewAbstract::GetDimension(const std::string& key, const std::unique_ptr& jsonValue) +{ + Dimension dimen; + auto value = jsonValue->GetValue(key); + if (value && value->IsString()) { + dimen = StringUtils::StringToDimension(value->GetString(), true); + } else if (value && value->IsNumber()) { + dimen = Dimension(value->GetDouble(), DimensionUnit::VP); + } else { + LOGE("Invalid value type"); + dimen = Dimension(0.0, DimensionUnit::VP); + } + return dimen; +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/jsview/js_view_abstract.h b/frameworks/bridge/declarative_frontend/jsview/js_view_abstract.h new file mode 100644 index 00000000..63da3610 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_view_abstract.h @@ -0,0 +1,342 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_VIEW_ABSTRACT_H +#define FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_VIEW_ABSTRACT_H + +#include + +#include "base/json/json_util.h" +#include "base/log/ace_trace.h" +#include "base/log/log.h" +#include "core/animation/curve_animation.h" +#include "core/animation/keyframe_animation.h" +#include "core/components/common/properties/tween_option.h" +#include "core/pipeline/base/component.h" +#include "frameworks/core/components/box/box_component.h" +#include "frameworks/core/components/theme/theme_manager.h" +#include "frameworks/core/components/transform/transform_component.h" +#include "frameworks/core/components/tween/tween_component.h" + +#ifdef USE_QUICKJS_ENGINE +#ifdef __cplusplus +extern "C" { +#endif +#include "third_party/quickjs/quickjs.h" +#ifdef __cplusplus +} +#endif + +#include "frameworks/bridge/declarative_frontend/engine/bindings.h" +#include "frameworks/bridge/js_frontend/engine/quickjs/qjs_utils.h" +#endif // USE_QUICKJS_ENGINE + +#ifdef USE_V8_ENGINE +#include "third_party/v8/include/v8.h" + +#include "frameworks/bridge/declarative_frontend/engine/bindings.h" +#include "frameworks/bridge/declarative_frontend/engine/v8/v8_bindings.h" +#include "frameworks/bridge/declarative_frontend/engine/v8/v8_utils.h" +#endif + +namespace OHOS::Ace::Framework { +using ViewId = uint32_t; +class JSAnimation; + +class JSViewAbstract : public virtual AceType { + DECLARE_ACE_TYPE(JSViewAbstract, AceType); + +public: + JSViewAbstract(); + ~JSViewAbstract() = default; + + /** + * This implements the composition of the specialized and generic components + * such as box, tween, transform, display etc. + */ + RefPtr CreateComponent(); + + /** + * Subclasses which are custom view should implement this interface to mark + * the view need update upon state changes. + * For Example JSView and JSForEach are custom view and should implement. + */ + virtual void MarkNeedUpdate() {} + virtual bool NeedsUpdate() + { + return false; + } + + /** + * All Subclasses should implement this. + * Should take care of releasing the handles of js objects + */ + virtual void Destroy(JSViewAbstract* parentCustomView); + + /** + * Subclasses which are custom view should implement this interface and return true. + * For Example JSView and JSForEach are custom view and should return true. + */ + virtual bool IsCustomView() + { + return false; + } + + /** + * Subclasses which are custom view should implement this interface and return true. + * For Example JSView and JSForEach are custom view and should return true. + */ + virtual bool IsForEachView() + { + return false; + } + + /** + * Views which do not have a state can mark static. + * The element will be reused and re-render will be skipped. + */ + void MarkStatic() + { + isStatic_ = true; + } + + void SetPadding(const Dimension& value); + void SetPaddings(const Dimension& top, const Dimension& bottom, const Dimension& left, const Dimension& right); + void SetMargin(const Dimension& value); + void SetMargins(const Dimension& top, const Dimension& bottom, const Dimension& left, const Dimension& right); + void SetBorderWidth(const Dimension& value); + void SetLeftBorderWidth(const Dimension& value); + void SetTopBorderWidth(const Dimension& value); + void SetRightBorderWidth(const Dimension& value); + void SetBottomBorderWidth(const Dimension& value); + void SetBorderRadius(const Dimension& value); + Dimension GetDimension(const std::string& key, const std::unique_ptr& jsonValue); + +#ifdef USE_QUICKJS_ENGINE + virtual void MarkGC(JSRuntime* rt, JS_MarkFunc* markFunc) {} + virtual void ReleaseRT(JSRuntime* rt) {} + + static JSValue JsSetUniqueKey(JSContext* ctx, JSValueConst this_value, int argc, JSValueConst* argv); + static JSValue JsMarkStaticView(JSContext* ctx, JSValueConst this_value, int argc, JSValueConst* argv); + + static JSValue JsAnimate(JSContext* ctx, JSValueConst this_value, int32_t argc, JSValueConst* argv); + static JSValue JsScale(JSContext* ctx, JSValueConst this_value, int32_t argc, JSValueConst* argv); + static JSValue JsOpacity(JSContext* ctx, JSValueConst this_value, int32_t argc, JSValueConst* argv); + static JSValue JsTranslate(JSContext* ctx, JSValueConst this_value, int32_t argc, JSValueConst* argv); + static JSValue JsTranslateX(JSContext* ctx, JSValueConst this_value, int32_t argc, JSValueConst* argv); + static JSValue JsTranslateY(JSContext* ctx, JSValueConst this_value, int32_t argc, JSValueConst* argv); + static JSValue JsRotate(JSContext* ctx, JSValueConst this_value, int32_t argc, JSValueConst* argv); + static JSValue JsWidth(JSContext* ctx, JSValueConst this_value, int32_t argc, JSValueConst* argv); + static JSValue JsHeight(JSContext* ctx, JSValueConst this_value, int32_t argc, JSValueConst* argv); + static JSValue JsBackgroundColor(JSContext* ctx, JSValueConst this_value, int32_t argc, JSValueConst* argv); + static JSValue JsBorderColor(JSContext* ctx, JSValueConst this_value, int32_t argc, JSValueConst* argv); + static JSValue JsPadding(JSContext* ctx, JSValueConst this_value, int32_t argc, JSValueConst* argv); + static JSValue JsMargin(JSContext* ctx, JSValueConst this_value, int32_t argc, JSValueConst* argv); + static JSValue ParseMarginOrPadding( + JSContext* ctx, JSValueConst this_value, int32_t argc, JSValueConst* argv, bool isMargin); + static JSValue JsBorder(JSContext* ctx, JSValueConst this_value, int32_t argc, JSValueConst* argv); + static JSValue JsBorderWidth(JSContext* ctx, JSValueConst this_value, int32_t argc, JSValueConst* argv); + static JSValue JsBorderRadius(JSContext* ctx, JSValueConst this_value, int32_t argc, JSValueConst* argv); + static JSValue ParseDimension( + JSContext* ctx, JSValueConst this_value, int32_t argc, JSValueConst* argv, Dimension& result); +#endif // USE_QUICKJS_ENGINE + +#ifdef USE_V8_ENGINE + static void JsAnimate(const v8::FunctionCallbackInfo& info); + static void JsScale(const v8::FunctionCallbackInfo& info); + static void JsOpacity(const v8::FunctionCallbackInfo& info); + static void JsTranslate(const v8::FunctionCallbackInfo& info); + static void JsTranslateX(const v8::FunctionCallbackInfo& info); + static void JsTranslateY(const v8::FunctionCallbackInfo& info); + static void JsRotate(const v8::FunctionCallbackInfo& info); + static void JsWidth(const v8::FunctionCallbackInfo& info); + static void JsHeight(const v8::FunctionCallbackInfo& info); + static void JsBackgroundColor(const v8::FunctionCallbackInfo& info); + static void JsBorderColor(const v8::FunctionCallbackInfo& info); + static void JsPadding(const v8::FunctionCallbackInfo& info); + static void JsMargin(const v8::FunctionCallbackInfo& info); + static void ParseMarginOrPadding(const v8::FunctionCallbackInfo& info, bool isMargin); + static void JsBorder(const v8::FunctionCallbackInfo& info); + static void JsBorderWidth(const v8::FunctionCallbackInfo& info); + static void JsBorderRadius(const v8::FunctionCallbackInfo& info); + static Dimension ParseDimension(const v8::FunctionCallbackInfo& info); +#endif + + template + RefPtr GetTheme() const + { + RefPtr themeManager = AceType::MakeRefPtr(); + return themeManager->GetTheme(); + } + + /** + * Binds the native methods to the the js object + */ + static void JSBind(); + +protected: + /** + * Subclasses need to implement this interface to return their specialized components, + * Which will be added to the last node of the component tree. + * For Ex- JSText should return TextComponent + */ + virtual RefPtr CreateSpecializedComponent() = 0; + + /** + * The results of this function will be combined with ther results of the + * CreateSpecializedComponent in CreateComponent. The specialized + * component will be put inside of the containers created by this method. + * Components will be reparented so that front container will be the + * outermost and last will be the innermost. + */ + virtual std::vector> CreateInteractableComponents() + { + return {}; + } + + bool IsStatic() + { + return isStatic_; + } + + bool HasUniqueKey() + { + return !uniqueKey_.empty(); + } + + std::string GetUniqueKey() + { + return uniqueKey_; + } + + /** + * The Below getters are used by JSButton + */ + Dimension ViewWidth() const; + Dimension ViewHeight() const; + + const Color& BackGroundColor() const + { + return backGroundColor_; + } + const Dimension& ViewRadius() const; + + bool GetUserDefColor() const + { + return userDefColor_; + } + + bool GetIsDefHeight() const + { + return isDefHeight_; + } + + bool GetIsDefWidth() const + { + return isDefWidth_; + } + +#ifdef USE_QUICKJS_ENGINE + // STATIC QuickJS functions + template + static JSValue JsSetSingleString(JSContext* ctx, JSValueConst this_value, int32_t argc, JSValueConst* argv, + std::function setterFunc, const char* debugInfo); +#endif + + RefPtr GetOrMakeBoxComponent() const; + RefPtr GetBackDecoration() const; + const Border& GetBorder() const; + BorderEdge GetLeftBorderEdge(); + BorderEdge GetTopBorderEdge(); + BorderEdge GetRightBorderEdge(); + BorderEdge GetBottomBorderEdge(); + + void SetBorderEdge(const BorderEdge& edge); + void SetLeftBorderEdge(const BorderEdge& edge); + void SetTopBorderEdge(const BorderEdge& edge); + void SetRightBorderEdge(const BorderEdge& edge); + void SetBottomBorderEdge(const BorderEdge& edge); + void SetBorder(const Border& border); + + mutable RefPtr boxComponent_; + RefPtr displayComponent_; + + ViewId getViewId() + { + return viewId_; + } + +private: + + void setUniqueKey(std::string key) + { + uniqueKey_ = std::string(key); + } + + /** + * box properties setter + */ + void SetWidth(const Dimension& width); + void SetHeight(const Dimension& height); + void SetMarginTop(const std::string& value); + void SetMarginBottom(const std::string& value); + void SetMarginLeft(const std::string& value); + void SetMarginRight(const std::string& value); + void SetMargin(const std::string& value); + void SetPaddingTop(const std::string& value); + void SetPaddingBottom(const std::string& value); + void SetPaddingLeft(const std::string& value); + void SetPaddingRight(const std::string& value); + void SetPadding(const std::string& value); + void SetBackgroundColor(const Color& color); + void ProcessBackgroundColor(); + void SetBorderStyle(int32_t style); + void SetBorderColor(const Color& color); + void SetLeftBorderColor(const Color& color); + void SetTopBorderColor(const Color& color); + void SetRightBorderColor(const Color& color); + void SetBottomBorderColor(const Color& color); + + /** + * Animation and transform + */ + void ProcessAnimation(); + void CleanPendingAnimation(); + void CreateAnimation(JSAnimation* animation); + void SetScale(double endScale); + void SetOpacity(double endOpacity); + void SetTranslate(double deltaX, double deltaY); + void SetRotate(double degree); + + RefPtr tweenComponent_; + RefPtr transformComponent_; + + ViewId viewId_; + std::string uniqueKey_; + Color backGroundColor_; + bool userDefColor_ = false; + bool isDefHeight_ = false; + bool isDefWidth_ = false; + TweenOption tweenOption_; + + bool isStatic_ = false; + bool animationInitialized_ = false; +}; + +} // namespace OHOS::Ace::Framework + +#include "frameworks/bridge/declarative_frontend/jsview/js_view_abstract.inl" + +#endif // JS_VIEW_ABSTRACT_H diff --git a/frameworks/bridge/declarative_frontend/jsview/js_view_abstract.inl b/frameworks/bridge/declarative_frontend/jsview/js_view_abstract.inl new file mode 100644 index 00000000..cd0ab6e5 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_view_abstract.inl @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/declarative_frontend/jsview/js_view_abstract.h" + +namespace OHOS::Ace::Framework { + +#ifdef USE_QUICKJS_ENGINE + +template +JSValue JSViewAbstract::JsSetSingleString(JSContext* ctx, JSValueConst this_value, int32_t argc, JSValueConst* argv, + std::function setterFunc, const char* debugInfo) +{ + if ((argv == nullptr) || (argc != 1)) { + return JS_ThrowSyntaxError(ctx, "%s: one parameter of type string expected", debugInfo); + } + if (!JS_IsString(argv[0])) { + return JS_ThrowSyntaxError(ctx, "%s: parameter of type string expected", debugInfo); + } + + QJSContext::Scope scope(ctx); + T* view = static_cast(UnwrapAny(this_value)); + if (!view) { + return JS_ThrowInternalError(ctx, "%s: Failed to unwrap JS object to C++ JSView!", debugInfo); + } + + LOGD("%s(%s)", debugInfo, ScopedString(argv[0]).get()); + setterFunc(view, ScopedString(argv[0]).str()); + return JS_DupValue(ctx, this_value); +} + +#endif // USE_QUICKJS_ENGINE + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/declarative_frontend/jsview/js_view_register.h b/frameworks/bridge/declarative_frontend/jsview/js_view_register.h new file mode 100644 index 00000000..fd491b85 --- /dev/null +++ b/frameworks/bridge/declarative_frontend/jsview/js_view_register.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_VIEW_REGISTER_H +#define FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_VIEW_REGISTER_H + +#include "frameworks/bridge/declarative_frontend/engine/bindings_defines.h" +#include "frameworks/bridge/declarative_frontend/jsview/js_view_abstract.h" + +#ifdef USE_QUICKJS_ENGINE +#ifdef __cplusplus +extern "C" { +#endif +#include "third_party/quickjs/quickjs.h" +#ifdef __cplusplus +} +#endif + +#include "frameworks/bridge/declarative_frontend/engine/js_object_template.h" + +#endif + +namespace OHOS::Ace::Framework { + +void RemoveViewById(ViewId viewId); + +/** + * register C++ classes that are to be exposed to JS + */ +void JsRegisterViews(BindingTarget globalObj); + +} // namespace OHOS::Ace::Framework + +#endif // FRAMEWORKS_BRIDGE_DECLARATIVE_FRONTEND_JS_VIEW_JS_VIEW_REGISTER_H diff --git a/frameworks/bridge/js_frontend/engine/common/base_animation_bridge.cpp b/frameworks/bridge/js_frontend/engine/common/base_animation_bridge.cpp new file mode 100644 index 00000000..7445eec9 --- /dev/null +++ b/frameworks/bridge/js_frontend/engine/common/base_animation_bridge.cpp @@ -0,0 +1,500 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/js_frontend/engine/common/base_animation_bridge.h" + +#include "base/json/json_util.h" +#include "base/utils/linear_map.h" +#include "base/utils/string_utils.h" +#include "base/utils/utils.h" +#include "core/animation/keyframe_animation.h" +#include "frameworks/bridge/common/dom/dom_type.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { +namespace { + +constexpr double PI = 3.14; +constexpr double RAD_CONVERT = 180.0; +constexpr int32_t MIN_SIZE = 2; +constexpr Dimension HALF = 0.5_pct; +constexpr Dimension FULL = 1.0_pct; +constexpr Dimension ZERO = 0.0_pct; +const char ROTATE_RAD[] = "rad"; + +RefPtr> CreateFloatAnimation(const std::string& type, const RefPtr& curve, + const std::vector>& animationFrames) +{ + RefPtr> floatAnimation; + for (const auto& frame : animationFrames) { + std::string floatString; + std::string offsetString; + auto floatValue = frame.find(type); + auto offset = frame.find(DOM_ANIMATION_OFFSET); + if (floatValue != frame.end()) { + floatString = floatValue->second; + } + if (offset != frame.end()) { + offsetString = offset->second; + } + if (!floatString.empty() && !offsetString.empty()) { + if (!floatAnimation) { + floatAnimation = AceType::MakeRefPtr>(); + } + double keyValue = 0.0; + if (floatString.find(ROTATE_RAD) != std::string::npos) { + keyValue = RAD_CONVERT * StringToDouble(floatString) / PI; + } else { + keyValue = StringToDouble(floatString); + } + + auto keyframe = AceType::MakeRefPtr>(StringToDouble(offsetString), keyValue); + keyframe->SetCurve(curve); + floatAnimation->AddKeyframe(keyframe); + } + } + return floatAnimation; +} + +RefPtr> CreateBackgroundPositionAnimation( + const RefPtr& curve, const std::vector>& animationFrames) +{ + RefPtr> animation; + for (const auto& frame : animationFrames) { + std::string backgroundImageString; + std::string offsetString; + auto backgroundImage = frame.find(DOM_BACKGROUND_IMAGE_POSITION); + auto offset = frame.find(DOM_ANIMATION_OFFSET); + if (backgroundImage != frame.end()) { + backgroundImageString = backgroundImage->second; + } + if (offset != frame.end()) { + offsetString = offset->second; + } + if (!backgroundImageString.empty() && !offsetString.empty()) { + BackgroundImagePosition backgroundImagePosition; + if (!ParseBackgroundImagePosition(backgroundImageString, backgroundImagePosition)) { + LOGW("parse frame failed."); + continue; + } + if (!animation) { + animation = AceType::MakeRefPtr>(); + } + auto keyframe = AceType::MakeRefPtr>( + StringToDouble(offsetString), backgroundImagePosition); + keyframe->SetCurve(curve); + animation->AddKeyframe(keyframe); + } + } + return animation; +} + +DimensionOffset ParseTranslateProperties(const std::string& type, const std::string& translateString) +{ + if (type == TRANSLATE) { + std::vector values; + StringUtils::StringSpliter(translateString, ' ', values); + if (values.empty() || values.size() > OFFSET_VALUE_NUMBER) { + return DimensionOffset(); + } else if (values.size() == OFFSET_VALUE_NUMBER) { + return DimensionOffset(StringToDimension(values.front()), StringToDimension(values.back())); + } else { + return DimensionOffset(StringToDimension(translateString), ZERO); + } + } else if (type == DOM_TRANSLATE_X) { + return DimensionOffset(StringToDimension(translateString), ZERO); + } else if (type == DOM_TRANSLATE_Y) { + return DimensionOffset(ZERO, StringToDimension(translateString)); + } + return DimensionOffset(); +} + +RefPtr> CreateTranslateAnimation(const std::string& type, const RefPtr& curve, + const std::vector>& animationFrames) +{ + RefPtr> translateAnimation; + for (const auto& frame : animationFrames) { + std::string translateString; + std::string offsetString; + auto translate = frame.find(type); + auto offset = frame.find(DOM_ANIMATION_OFFSET); + if (translate != frame.end()) { + translateString = translate->second; + } + if (offset != frame.end()) { + offsetString = offset->second; + } + if (!translateString.empty() && !offsetString.empty()) { + if (!translateAnimation) { + translateAnimation = AceType::MakeRefPtr>(); + } + DimensionOffset keyValue = ParseTranslateProperties(type, translateString); + auto keyframe = AceType::MakeRefPtr>(StringToDouble(offsetString), keyValue); + keyframe->SetCurve(curve); + translateAnimation->AddKeyframe(keyframe); + } + } + return translateAnimation; +} + +RefPtr> CreateColorAnimation( + const RefPtr& curve, const std::vector>& animationFrames) +{ + RefPtr> colorAnimation; + for (const auto& frame : animationFrames) { + std::string colorString; + std::string offsetString; + auto color = frame.find(DOM_ANIMATION_COLOR); + auto offset = frame.find(DOM_ANIMATION_OFFSET); + if (color != frame.end()) { + colorString = color->second; + } + if (offset != frame.end()) { + offsetString = offset->second; + } + if (!colorString.empty() && !offsetString.empty()) { + if (!colorAnimation) { + colorAnimation = AceType::MakeRefPtr>(); + colorAnimation->SetEvaluator(AceType::MakeRefPtr()); + } + auto keyframe = + AceType::MakeRefPtr>(StringToDouble(offsetString), Color::FromString(colorString)); + keyframe->SetCurve(curve); + colorAnimation->AddKeyframe(keyframe); + } + } + return colorAnimation; +} + +void SetScaleAnimation(TweenOption& tweenOption, const RefPtr& curve, + const std::vector>& animationFrames) +{ + RefPtr> scaleXAnimation; + RefPtr> scaleYAnimation; + bool sameScale = true; + for (const auto& frame : animationFrames) { + std::string scaleValue; + std::string offsetString; + auto floatValue = frame.find(SCALE); + auto offset = frame.find(DOM_ANIMATION_OFFSET); + if (floatValue != frame.end()) { + scaleValue = floatValue->second; + } + if (offset != frame.end()) { + offsetString = offset->second; + } + if (scaleValue.empty() || offsetString.empty()) { + continue; + } + std::vector values; + StringUtils::StringSpliter(scaleValue, ' ', values); + if (values.empty() || values.size() > OFFSET_VALUE_NUMBER) { + continue; + } + + if (!scaleXAnimation) { + scaleXAnimation = AceType::MakeRefPtr>(); + scaleYAnimation = AceType::MakeRefPtr>(); + } + + double keyValueX = StringToDouble(values.front()); + double keyValueY = StringToDouble(values.back()); + if (!NearEqual(keyValueX, keyValueY)) { + sameScale = false; + } + auto scaleXKeyframe = AceType::MakeRefPtr>(StringToDouble(offsetString), keyValueX); + scaleXKeyframe->SetCurve(curve); + auto scaleYKeyframe = AceType::MakeRefPtr>(StringToDouble(offsetString), keyValueY); + scaleYKeyframe->SetCurve(curve); + scaleXAnimation->AddKeyframe(scaleXKeyframe); + scaleYAnimation->AddKeyframe(scaleYKeyframe); + } + if (scaleXAnimation) { + if (sameScale) { + tweenOption.SetTransformFloatAnimation(AnimationType::SCALE, scaleXAnimation); + } else { + tweenOption.SetTransformFloatAnimation(AnimationType::SCALE_X, scaleXAnimation); + tweenOption.SetTransformFloatAnimation(AnimationType::SCALE_Y, scaleYAnimation); + } + } +} + +void SetFramesFloatAnimation(TweenOption& tweenOption, const RefPtr& curve, + const std::vector>& animationFrames) +{ + static const LinearMapNode floatTransformAnimations[] = { + { DOM_ROTATE, AnimationType::ROTATE_Z }, + { DOM_ROTATE_X, AnimationType::ROTATE_X }, + { DOM_ROTATE_Y, AnimationType::ROTATE_Y }, + { DOM_SCALE, AnimationType::SCALE }, + { DOM_SCALE_X, AnimationType::SCALE_X }, + { DOM_SCALE_Y, AnimationType::SCALE_Y }, + }; + for (size_t idx = 0; idx < ArraySize(floatTransformAnimations); ++idx) { + if (strcmp(floatTransformAnimations[idx].key, SCALE) == 0) { + SetScaleAnimation(tweenOption, curve, animationFrames); + } else { + auto transformAnimation = CreateFloatAnimation(floatTransformAnimations[idx].key, curve, animationFrames); + if (transformAnimation) { + tweenOption.SetTransformFloatAnimation(floatTransformAnimations[idx].value, transformAnimation); + } + } + } + static const char* floatAnimations[] = { DOM_ANIMATION_WIDTH, DOM_ANIMATION_HEIGHT, DOM_ANIMATION_OPACITY }; + for (size_t idx = 0; idx < ArraySize(floatAnimations); ++idx) { + auto floatAnimation = CreateFloatAnimation(floatAnimations[idx], curve, animationFrames); + if (!floatAnimation) { + continue; + } + if (strcmp(floatAnimations[idx], DOM_ANIMATION_WIDTH) == 0) { + tweenOption.SetPropertyAnimationFloat(PropertyAnimatableType::PROPERTY_WIDTH, floatAnimation); + } else if (strcmp(floatAnimations[idx], DOM_ANIMATION_HEIGHT) == 0) { + tweenOption.SetPropertyAnimationFloat(PropertyAnimatableType::PROPERTY_HEIGHT, floatAnimation); + } else if (strcmp(floatAnimations[idx], DOM_ANIMATION_OPACITY) == 0) { + tweenOption.SetOpacityAnimation(floatAnimation); + } + } +} + +void SetFramesTranslateAnimation(TweenOption& tweenOption, const RefPtr& curve, + const std::vector>& animationFrames) +{ + static const LinearMapNode translateAnimations[] = { + { DOM_TRANSLATE, AnimationType::TRANSLATE }, + { DOM_TRANSLATE_X, AnimationType::TRANSLATE_X }, + { DOM_TRANSLATE_Y, AnimationType::TRANSLATE_Y }, + }; + for (size_t idx = 0; idx < ArraySize(translateAnimations); ++idx) { + auto translateAnimation = CreateTranslateAnimation(translateAnimations[idx].key, curve, animationFrames); + if (translateAnimation) { + tweenOption.SetTranslateAnimations(translateAnimations[idx].value, translateAnimation); + } + } +} + +void JsParseAnimationTransformInternal( + const std::unique_ptr& argsPtrTransform, std::unordered_map& animationFrames) +{ + static const char* transformValue[] = { + DOM_SCALE, + DOM_SCALE_X, + DOM_SCALE_Y, + DOM_TRANSLATE, + DOM_TRANSLATE_X, + DOM_TRANSLATE_Y, + DOM_ROTATE, + DOM_ROTATE_X, + DOM_ROTATE_Y, + }; + + for (size_t idx = 0; idx < ArraySize(transformValue); ++idx) { + auto argsPtrTransformValue = argsPtrTransform->GetValue(transformValue[idx]); + if (argsPtrTransformValue) { + animationFrames[transformValue[idx]] = argsPtrTransformValue->GetString(); + } + } +} + +void JsParseAnimationFramesInternal( + const std::unique_ptr& argsPtrAnimation, std::unordered_map& animationFrames) +{ + static const char* framesValue[] = { + DOM_TRANSFORM, + DOM_ANIMATION_WIDTH, + DOM_ANIMATION_HEIGHT, + DOM_ANIMATION_COLOR, + DOM_ANIMATION_OPACITY, + DOM_TRANSFORM_ORIGIN, + DOM_BACKGROUND_IMAGE_POSITION, + DOM_ANIMATION_OFFSET, + }; + + for (size_t idx = 0; idx < ArraySize(framesValue); ++idx) { + if (strcmp(framesValue[idx], TRANSFORM) == 0) { + auto argsPtrTransform = argsPtrAnimation->GetValue(framesValue[idx]); + if (argsPtrTransform) { + JsParseAnimationTransformInternal(argsPtrTransform, animationFrames); + } + } else { + auto value = argsPtrAnimation->GetValue(framesValue[idx]); + if (value) { + animationFrames[framesValue[idx]] = value->IsString() ? value->GetString() : value->ToString(); + } + } + } +} + +} // namespace + +std::vector BaseAnimationBridgeUtils::HandleTransformOrigin( + const std::vector>& animationFrames) +{ + std::string transformOrigin; + if (animationFrames.size() >= MIN_SIZE) { + auto iterFrom = animationFrames.front().find(DOM_TRANSFORM_ORIGIN); + if (iterFrom != animationFrames.front().end()) { + transformOrigin = iterFrom->second; + } + if (transformOrigin.empty()) { + auto iterTo = animationFrames.back().find(DOM_TRANSFORM_ORIGIN); + if (iterTo != animationFrames.back().end()) { + transformOrigin = iterTo->second; + } + } + } + + std::vector transformOriginValue; + if (transformOrigin.empty()) { + return transformOriginValue; + } + + static const LinearMapNode> transformOriginMap[] = { + { DOM_TRANSFORM_ORIGIN_CENTER_BOTTOM, { HALF, FULL } }, + { DOM_TRANSFORM_ORIGIN_CENTER_CENTER, { HALF, HALF } }, + { DOM_TRANSFORM_ORIGIN_CENTER_TOP, { HALF, ZERO } }, + { DOM_TRANSFORM_ORIGIN_LEFT_BOTTOM, { ZERO, FULL } }, + { DOM_TRANSFORM_ORIGIN_LEFT_CENTER, { ZERO, HALF } }, + { DOM_TRANSFORM_ORIGIN_LEFT_TOP, { ZERO, ZERO } }, + { DOM_TRANSFORM_ORIGIN_RIGHT_BOTTOM, { FULL, FULL } }, + { DOM_TRANSFORM_ORIGIN_RIGHT_CENTER, { FULL, HALF } }, + { DOM_TRANSFORM_ORIGIN_RIGHT_TOP, { FULL, ZERO } }, + }; + + int64_t idx = BinarySearchFindIndex(transformOriginMap, ArraySize(transformOriginMap), transformOrigin.c_str()); + if (idx < 0) { + auto pos = transformOrigin.find(' ', 0); + if (pos != std::string::npos) { + transformOriginValue.emplace_back(StringToDimension(transformOrigin.substr(0, pos))); + transformOriginValue.emplace_back(StringToDimension(transformOrigin.substr(pos + 1))); + } + } else { + transformOriginValue = transformOriginMap[idx].value; + } + return transformOriginValue; +} + +void BaseAnimationBridgeUtils::SetTweenComponentParams(const RefPtr& curve, + const std::vector>& animationFrames, + RefPtr& tweenComponent, TweenOption& tweenOption) +{ + SetFramesFloatAnimation(tweenOption, curve, animationFrames); + SetFramesTranslateAnimation(tweenOption, curve, animationFrames); + + auto colorAnimation = CreateColorAnimation(curve, animationFrames); + if (colorAnimation) { + tweenOption.SetColorAnimation(colorAnimation); + } + + auto backgroundPositionAnimation = CreateBackgroundPositionAnimation(curve, animationFrames); + if (backgroundPositionAnimation) { + tweenOption.SetBackgroundPositionAnimation(backgroundPositionAnimation); + } + tweenComponent->SetCustomTweenOption(tweenOption); + tweenComponent->SetCustomTweenOperation(TweenOperation::NONE); +} + +void BaseAnimationBridgeUtils::JsParseAnimationFrames( + const std::string& content, std::vector>& animationFrames) +{ + auto argsPtr = JsonUtil::ParseJsonString(content); + if (!argsPtr) { + return; + } + auto argsPtrItem = argsPtr->GetArrayItem(0); + if (!argsPtrItem) { + LOGE("Animation frames are null."); + return; + } + + // Parse the arguments to each item in the frame + for (int32_t idx = 0; idx < argsPtrItem->GetArraySize(); ++idx) { + auto argsPtrAnimation = argsPtrItem->GetArrayItem(idx); + if (!argsPtrAnimation) { + continue; + } + std::unordered_map animationFrame; + JsParseAnimationFramesInternal(argsPtrAnimation, animationFrame); + if (idx == 0) { + animationFrame[DOM_ANIMATION_OFFSET] = BaseAnimationBridgeUtils::ANIMATION_FROM; + } + if (idx == (argsPtrItem->GetArraySize() - 1)) { + animationFrame[DOM_ANIMATION_OFFSET] = BaseAnimationBridgeUtils::ANIMATION_TO; + } + animationFrames.emplace_back(animationFrame); + } +} + +void BaseAnimationBridgeUtils::JsParseAnimationOptions(const std::string& content, int32_t& iterations, + std::unordered_map& animationDoubleOptions, + std::unordered_map& animationStringOptions) +{ + auto argsPtr = JsonUtil::ParseJsonString(content); + if (!argsPtr) { + LOGE("Js Parse AnimationOption failed. argsPtr is null."); + return; + } + + auto argsPtrItem = argsPtr->GetArrayItem(1); + if (!argsPtrItem) { + LOGE("Js Parse AnimationOption failed. argsPtrItem is null."); + return; + } + + auto argsPtrItemIterations = argsPtrItem->GetValue(DOM_ANIMATION_ITERATIONS); + auto argsPtrItemDelay = argsPtrItem->GetValue(DOM_ANIMATION_DELAY_API); + auto argsPtrItemDuration = argsPtrItem->GetValue(DOM_ANIMATION_DURATION_API); + auto argsPtrItemEasing = argsPtrItem->GetValue(DOM_ANIMATION_EASING); + auto argsPtrItemFill = argsPtrItem->GetValue(DOM_ANIMATION_FILL); + + if (argsPtrItemIterations) { + if (argsPtrItemIterations->IsString()) { + std::string iterationsString = argsPtrItemIterations->GetString(); + if (iterationsString == BaseAnimationBridgeUtils::ITERATIONS_INFINITY) { + iterations = ANIMATION_REPEAT_INFINITE; + } else { + iterations = StringToInt(iterationsString); + } + } else if (argsPtrItemIterations->IsNumber()) { + iterations = argsPtrItemIterations->GetInt(); + } else { + iterations = 1; + } + } + if (argsPtrItemDelay) { + double delay = 0.0; + if (argsPtrItemDelay->IsString()) { + delay = StringToDouble(argsPtrItemDelay->GetString()); + } else { + delay = argsPtrItemDelay->GetDouble(); + } + animationDoubleOptions[DOM_ANIMATION_DELAY_API] = delay; + } + if (argsPtrItemDuration) { + double duration = 0.0; + if (argsPtrItemDuration->IsString()) { + duration = StringToDouble(argsPtrItemDuration->GetString()); + } else { + duration = argsPtrItemDuration->GetDouble(); + } + animationDoubleOptions[DOM_ANIMATION_DURATION_API] = duration; + } + if (argsPtrItemEasing) { + animationStringOptions[DOM_ANIMATION_EASING] = argsPtrItemEasing->GetString(); + } + if (argsPtrItemFill) { + animationStringOptions[DOM_ANIMATION_FILL] = argsPtrItemFill->GetString(); + } +} +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/js_frontend/engine/common/base_animation_bridge.h b/frameworks/bridge/js_frontend/engine/common/base_animation_bridge.h new file mode 100644 index 00000000..7107a3a7 --- /dev/null +++ b/frameworks/bridge/js_frontend/engine/common/base_animation_bridge.h @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_COMMON_BASE_ANIMATION_BRIDGE_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_COMMON_BASE_ANIMATION_BRIDGE_H + +#include +#include + +#include "base/geometry/dimension.h" +#include "core/components/tween/tween_component.h" + +namespace OHOS::Ace::Framework { + +class ACE_EXPORT BaseAnimationBridgeUtils { +public: + static constexpr int32_t TRANSFORM_ORIGIN_DEFAULT_SIZE = 2; + static constexpr const char PLAYSTATE_IDLE[] = "idle"; + static constexpr const char PLAYSTATE_RUNNING[] = "running"; + static constexpr const char PLAYSTATE_PAUSED[] = "paused"; + static constexpr const char PLAYSTATE_FINISHED[] = "finished"; + static constexpr const char ITERATIONS_INFINITY[] = "Infinity"; + static constexpr const char ANIMATION_FROM[] = "0.0"; + static constexpr const char ANIMATION_TO[] = "1.0"; + // prefix id of TweenComponent, for differentiation from id of ComposedComponent + static constexpr const char COMPONENT_PREFIX[] = "FrontendTween"; + + static std::vector HandleTransformOrigin( + const std::vector>& animationFrames); + + static void SetTweenComponentParams(const RefPtr& curve, + const std::vector>& animationFrames, + RefPtr& tweenComponent, TweenOption& tweenOption); + static void JsParseAnimationFrames( + const std::string& content, std::vector>& animationFrames); + + static void JsParseAnimationOptions(const std::string& content, int32_t& iterations, + std::unordered_map& animationDoubleOptions, + std::unordered_map& animationStringOptions); +}; + +class BaseAnimationBridge : public virtual AceType { + DECLARE_ACE_TYPE(BaseAnimationBridge, AceType); +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_COMMON_BASE_ANIMATION_BRIDGE_H diff --git a/frameworks/bridge/js_frontend/engine/common/base_canvas_bridge.h b/frameworks/bridge/js_frontend/engine/common/base_canvas_bridge.h new file mode 100644 index 00000000..ce2f21b9 --- /dev/null +++ b/frameworks/bridge/js_frontend/engine/common/base_canvas_bridge.h @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_COMMON_BASE_CANVAS_BRIDGE_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_COMMON_BASE_CANVAS_BRIDGE_H + +#include "base/memory/ace_type.h" + +namespace OHOS::Ace::Framework { +class BaseCanvasBridge : public virtual AceType { + DECLARE_ACE_TYPE(BaseCanvasBridge, AceType); +}; +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_COMMON_BASE_CANVAS_BRIDGE_H diff --git a/frameworks/bridge/js_frontend/engine/common/group_js_bridge.h b/frameworks/bridge/js_frontend/engine/common/group_js_bridge.h new file mode 100644 index 00000000..2c4e6886 --- /dev/null +++ b/frameworks/bridge/js_frontend/engine/common/group_js_bridge.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_COMMON_GROUP_JS_BRIDGE_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_COMMON_GROUP_JS_BRIDGE_H + +#include +#include + +#include "base/memory/ace_type.h" + +namespace OHOS::Ace { + +class GroupJsBridge : public virtual AceType { + DECLARE_ACE_TYPE(GroupJsBridge, AceType) +public: + virtual void TriggerModuleJsCallback(int32_t callbackId, int32_t code, + std::vector&& messageData) = 0; + + virtual void TriggerModulePluginGetErrorCallback( + int32_t callbackId, int32_t errorCode, std::string&& errorMessage) = 0; + + virtual void TriggerEventJsCallback(int32_t callbackId, int32_t code, std::vector&& eventData) = 0; + + virtual void LoadPluginJsCode(std::string&& jsCode) {} + + virtual void Destroy() {} +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_COMMON_GROUP_JS_BRIDGE_H diff --git a/frameworks/bridge/js_frontend/engine/common/js_api_perf.cpp b/frameworks/bridge/js_frontend/engine/common/js_api_perf.cpp new file mode 100644 index 00000000..fe68793b --- /dev/null +++ b/frameworks/bridge/js_frontend/engine/common/js_api_perf.cpp @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/js_frontend/engine/common/js_api_perf.h" + +#include "base/utils/time_util.h" + +namespace OHOS::Ace::Framework { + +void JsApiPerf::InsertJsBeginLog(const std::string& functionName, int64_t timeStamp) +{ + TimeStamp stamp = { + .name = functionName, + .startTime = timeStamp != 0 ? timeStamp : GetMicroTickCount(), + }; + startTimeData_.push(stamp); +} + +void JsApiPerf::InsertJsEndLog(const std::string& functionName, int64_t timeStamp) +{ + if (startTimeData_.empty()) { + return; + } + const std::string& itemName = startTimeData_.top().name; + if (itemName == functionName) { + int64_t now = timeStamp != 0 ? timeStamp : GetMicroTickCount(); + int64_t diff = now - startTimeData_.top().startTime; + InsertPerfLog(functionName, diff); + startTimeData_.pop(); + } +} + +void JsApiPerf::InsertPerfLog(const std::string& functionName, int64_t timeConsumed) +{ + data_[functionName].emplace_back(timeConsumed); +} + +std::string JsApiPerf::PrintToLogs() const +{ + std::string result; + for (const auto& item : data_) { + int64_t sum = 0; + result.append(item.first); + result.append("#"); + for (int64_t value : item.second) { + sum += value; + result.append(std::to_string(value)); + result.append("#"); + } + result.append("average#"); + result.append(std::to_string(sum / item.second.size())); + result.append("\n"); + } + + return result; +} + +JsApiPerf JsApiPerf::instance_; + +JsApiPerf& JsApiPerf::GetInstance() +{ + return instance_; +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/js_frontend/engine/common/js_api_perf.h b/frameworks/bridge/js_frontend/engine/common/js_api_perf.h new file mode 100644 index 00000000..edfdbb82 --- /dev/null +++ b/frameworks/bridge/js_frontend/engine/common/js_api_perf.h @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_COMMON_JS_API_PERF_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_COMMON_JS_API_PERF_H + +#include +#include +#include +#include + +#include "base/utils/macros.h" +#include "base/utils/noncopyable.h" + +namespace OHOS::Ace::Framework { + +struct TimeStamp { + std::string name; + int64_t startTime = 0; +}; + +class ACE_EXPORT JsApiPerf : public NonCopyable { +public: + static JsApiPerf& GetInstance(); + + void InsertJsBeginLog(const std::string& functionName, int64_t timeStamp = 0); + void InsertJsEndLog(const std::string& functionName, int64_t timeStamp = 0); + + std::string PrintToLogs() const; + +private: + void InsertPerfLog(const std::string& functionName, int64_t timeConsumed); + + std::map> data_; + std::stack startTimeData_; + static JsApiPerf instance_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_COMMON_JS_API_PERF_H diff --git a/frameworks/bridge/js_frontend/engine/common/js_constants.cpp b/frameworks/bridge/js_frontend/engine/common/js_constants.cpp new file mode 100644 index 00000000..4bb514fc --- /dev/null +++ b/frameworks/bridge/js_frontend/engine/common/js_constants.cpp @@ -0,0 +1,105 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/js_frontend/engine/common/js_constants.h" + +namespace OHOS::Ace::Framework { + +const int32_t JS_CALL_FAIL = -1; +const int32_t JS_CALL_SUCCESS = 0; +// To solve the problem of stack overflow when qjs runs JS_Eval() after the context is generated. +const int32_t MAX_STACK_SIZE = -1; + +// for pc preview +#if defined(WINDOWS_PLATFORM) || defined(MAC_PLATFORM) +const char PC_PREVIEW[] = "enable"; +#else +const char PC_PREVIEW[] = "disable"; +#endif + +// for common +const char COMMON_SUCCESS[] = "success"; +const char COMMON_FAIL[] = "fail"; +const char COMMON_COMPLETE[] = "complete"; +const char COMMON_CANCEL[] = "cancel"; + +// for page route +const char ROUTE_PAGE_PUSH[] = "push"; +const char ROUTE_PAGE_REPLACE[] = "replace"; +const char ROUTE_PAGE_BACK[] = "back"; +const char ROUTE_PAGE_CLEAR[] = "clear"; +const char ROUTE_PAGE_GET_LENGTH[] = "getLength"; +const char ROUTE_PAGE_GET_STATE[] = "getState"; +const char ROUTE_KEY_URI[] = "uri"; +const char ROUTE_KEY_PATH[] = "path"; +const char ROUTE_KEY_PARAMS[] = "params"; + +// for prompt +const char PROMPT_SHOW_TOAST[] = "showToast"; +const char PROMPT_KEY_MESSAGE[] = "message"; +const char PROMPT_KEY_DURATION[] = "duration"; +const char PROMPT_KEY_BOTTOM[] = "bottom"; +const char PROMPT_SHOW_DIALOG[] = "showDialog"; +const char PROMPT_KEY_TITLE[] = "title"; +const char PROMPT_KEY_BUTTONS[] = "buttons"; +const char PROMPT_DIALOG_AUTO_CANCEL[] = "autocancel"; + +// for callback +const char APP_DESTROY_FINISH[] = "appDestroyFinish"; +const char CALLBACK_NATIVE[] = "callbackNative"; +const char KEY_STEPPER_PENDING_INDEX[] = "pendingIndex"; + +// for configuration +const char CONFIGURATION_GET_LOCALE[] = "getLocale"; +const char CONFIGURATION_SET_LOCALE[] = "setLocale"; +const char LOCALE_LANGUAGE[] = "language"; +const char LOCALE_COUNTRY_OR_REGION[] = "countryOrRegion"; +const char LOCALE_UNICODE_SETTING[] = "unicodeSetting"; +const char LOCALE_TEXT_DIR[] = "dir"; +const char LOCALE_TEXT_DIR_LTR[] = "ltr"; +const char LOCALE_TEXT_DIR_RTL[] = "rtl"; + +// for mediaquery +const char ADD_LISTENER[] = "addListener"; +const char GET_DEVICE_TYPE[] = "getDeviceType"; + +// for timer +const char SET_TIMEOUT[] = "setTimeout"; +const char CLEAR_TIMEOUT[] = "clearTimeout"; +const char CLEAR_INTERVAL[] = "clearInterval"; +const char SET_INTERVAL[] = "setInterval"; + +// for app +const char APP_GET_INFO[] = "getInfo"; +const char APP_TERMINATE[] = "terminate"; +const char APP_GET_PACKAGE_INFO[] = "getPackageInfo"; +const char APP_PACKAGE_NAME[] = "packageName"; +const char APP_REQUEST_FULL_WINDOW[] = "requestFullWindow"; +const char APP_SCREEN_ON_VISIBLE[] = "screenOnVisible"; +const char APP_SET_SWIPE_TO_DISMISS[] = "setSwipeToDismiss"; +const char APP_REQUEST_FULL_WINDOW_DUATION[] = "duration"; +const char APP_SCREEN_ON_VISIBLE_FLAG[] = "visible"; + +// for animation +const char ANIMATION_REQUEST_ANIMATION_FRAME[] = "requestAnimationFrame"; +const char ANIMATION_CANCEL_ANIMATION_FRAME[] = "cancelAnimationFrame"; + +// for grid +const char GRID_GET_SYSTEM_LAYOUT_INFO[] = "getSystemLayoutInfo"; +// for plugin +const int32_t PLUGIN_REQUEST_SUCCESS = 0; +const int32_t PLUGIN_REQUEST_FAIL = 200; +const int32_t PLUGIN_CALLBACK_DESTROY = 3; +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/js_frontend/engine/common/js_constants.h b/frameworks/bridge/js_frontend/engine/common/js_constants.h new file mode 100644 index 00000000..c91e1eaf --- /dev/null +++ b/frameworks/bridge/js_frontend/engine/common/js_constants.h @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include "base/utils/macros.h" + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_COMMON_JS_CONSTANTS_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_COMMON_JS_CONSTANTS_H + +namespace OHOS::Ace::Framework { + +ACE_EXPORT extern const int32_t JS_CALL_FAIL; +ACE_EXPORT extern const int32_t JS_CALL_SUCCESS; +ACE_EXPORT extern const int32_t MAX_STACK_SIZE; + +// for pcPreview +ACE_EXPORT extern const char PC_PREVIEW[]; + +// for common +ACE_EXPORT extern const char COMMON_SUCCESS[]; +ACE_EXPORT extern const char COMMON_FAIL[]; +ACE_EXPORT extern const char COMMON_COMPLETE[]; +ACE_EXPORT extern const char COMMON_CANCEL[]; + +// for page route +ACE_EXPORT extern const char ROUTE_PAGE_PUSH[]; +ACE_EXPORT extern const char ROUTE_PAGE_REPLACE[]; +ACE_EXPORT extern const char ROUTE_PAGE_BACK[]; +ACE_EXPORT extern const char ROUTE_PAGE_CLEAR[]; +ACE_EXPORT extern const char ROUTE_PAGE_GET_LENGTH[]; +ACE_EXPORT extern const char ROUTE_PAGE_GET_STATE[]; +ACE_EXPORT extern const char ROUTE_KEY_URI[]; +ACE_EXPORT extern const char ROUTE_KEY_PATH[]; +ACE_EXPORT extern const char ROUTE_KEY_PARAMS[]; + +// for prompt +ACE_EXPORT extern const char PROMPT_SHOW_TOAST[]; +ACE_EXPORT extern const char PROMPT_KEY_MESSAGE[]; +ACE_EXPORT extern const char PROMPT_KEY_DURATION[]; +ACE_EXPORT extern const char PROMPT_KEY_BOTTOM[]; +ACE_EXPORT extern const char PROMPT_SHOW_DIALOG[]; +ACE_EXPORT extern const char PROMPT_KEY_TITLE[]; +ACE_EXPORT extern const char PROMPT_KEY_BUTTONS[]; +ACE_EXPORT extern const char PROMPT_DIALOG_AUTO_CANCEL[]; + +// for callback +ACE_EXPORT extern const char APP_DESTROY_FINISH[]; +ACE_EXPORT extern const char CALLBACK_NATIVE[]; +ACE_EXPORT extern const char KEY_STEPPER_PENDING_INDEX[]; + +// for configuration +ACE_EXPORT extern const char CONFIGURATION_GET_LOCALE[]; +ACE_EXPORT extern const char CONFIGURATION_SET_LOCALE[]; +ACE_EXPORT extern const char LOCALE_LANGUAGE[]; +ACE_EXPORT extern const char LOCALE_COUNTRY_OR_REGION[]; +ACE_EXPORT extern const char LOCALE_UNICODE_SETTING[]; +ACE_EXPORT extern const char LOCALE_TEXT_DIR[]; +ACE_EXPORT extern const char LOCALE_TEXT_DIR_LTR[]; +ACE_EXPORT extern const char LOCALE_TEXT_DIR_RTL[]; + +// for mediaquery +ACE_EXPORT extern const char ADD_LISTENER[]; +ACE_EXPORT extern const char GET_DEVICE_TYPE[]; + +// for timer +ACE_EXPORT extern const char SET_TIMEOUT[]; +ACE_EXPORT extern const char CLEAR_TIMEOUT[]; +ACE_EXPORT extern const char CLEAR_INTERVAL[]; +ACE_EXPORT extern const char SET_INTERVAL[]; + +// for app +ACE_EXPORT extern const char APP_GET_INFO[]; +ACE_EXPORT extern const char APP_TERMINATE[]; +ACE_EXPORT extern const char APP_GET_PACKAGE_INFO[]; +ACE_EXPORT extern const char APP_PACKAGE_NAME[]; +ACE_EXPORT extern const char APP_REQUEST_FULL_WINDOW[]; +ACE_EXPORT extern const char APP_SCREEN_ON_VISIBLE[]; +ACE_EXPORT extern const char APP_SET_SWIPE_TO_DISMISS[]; +ACE_EXPORT extern const char APP_REQUEST_FULL_WINDOW_DUATION[]; +ACE_EXPORT extern const char APP_SCREEN_ON_VISIBLE_FLAG[]; + +// for animation +ACE_EXPORT extern const char ANIMATION_REQUEST_ANIMATION_FRAME[]; +ACE_EXPORT extern const char ANIMATION_CANCEL_ANIMATION_FRAME[]; + +// for grid +ACE_EXPORT extern const char GRID_GET_SYSTEM_LAYOUT_INFO[]; + +// for plugin +ACE_EXPORT extern const int32_t PLUGIN_REQUEST_SUCCESS; +ACE_EXPORT extern const int32_t PLUGIN_REQUEST_FAIL; +ACE_EXPORT extern const int32_t PLUGIN_CALLBACK_DESTROY; +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_COMMON_JS_CONSTANTS_H diff --git a/frameworks/bridge/js_frontend/engine/common/js_engine copy.h b/frameworks/bridge/js_frontend/engine/common/js_engine copy.h new file mode 100644 index 00000000..c79f10c0 --- /dev/null +++ b/frameworks/bridge/js_frontend/engine/common/js_engine copy.h @@ -0,0 +1,151 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_COMMON_JS_ENGINE_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_COMMON_JS_ENGINE_H + +#include + +#include "core/common/js_message_dispatcher.h" +#include "frameworks/bridge/js_frontend/frontend_delegate.h" +#include "frameworks/bridge/js_frontend/js_ace_page.h" + +namespace OHOS::Ace::Framework { +struct JsModule { + const std::string moduleName; + const std::string methods; +}; + +struct JsComponent { + const std::string componentName; + const std::string methods; +}; + +class JsEngineInstance { +public: + JsEngineInstance() = default; + virtual ~JsEngineInstance() = default; + + void InitModulesAndComponents(void* context); + virtual void FlushCommandBuffer(void* context, const std::string& command); + +private: + void RegisterSingleComponent(std::string& command, const std::string& componentName, const std::string& methods); + + void RegisterModules(std::string& command); + + void RegisterCommonComponents(std::string& command); + + void RegisterComponents(std::string& command); +}; + +class JsEngine : public AceType { + DECLARE_ACE_TYPE(JsEngine, AceType); + +public: + JsEngine() = default; + virtual ~JsEngine() = default; + + void RegisterSingleComponent(std::string& command, const std::string& componentName, const std::string& methods); + + void RegisterSingleModule(std::string& command, const std::string& moduleName, const std::string& methods); + + void RegisterModules(std::string& command); + + void RegisterComponents(std::string& command); + + // Initialize the JS engine. + virtual bool Initialize(const RefPtr& delegate) = 0; + + // Load script in JS engine, and execute in corresponding context. + virtual void LoadJs(const std::string& url, const RefPtr& page, bool isMainPage) = 0; + + // Update running page + virtual void UpdateRunningPage(const RefPtr& page) = 0; + + // Update staging page + virtual void UpdateStagingPage(const RefPtr& page) = 0; + + // Reset loading page + virtual void ResetStagingPage() = 0; + + virtual void SetJsMessageDispatcher(const RefPtr& dispatcher) = 0; + + // Fire AsyncEvent on JS + virtual void FireAsyncEvent(const std::string& eventId, const std::string& param) = 0; + + // Fire SyncEvent on JS + virtual void FireSyncEvent(const std::string& eventId, const std::string& param) = 0; + + // Timer callback on JS + virtual void TimerCallback(const std::string& callbackId, const std::string& delay, bool isInterval) = 0; + + // Destroy page instance on JS + virtual void DestroyPageInstance(int32_t pageId) = 0; + + // destroy application instance according packageName + virtual void DestroyApplication(const std::string& packageName) = 0; + + virtual void MediaQueryCallback(const std::string& callbackId, const std::string& args) = 0; + + virtual void RequestAnimationCallback(const std::string& callbackId, uint64_t timeStamp) = 0; + + virtual void JsCallback(const std::string& callbackId, const std::string& args) = 0; + + virtual void RunGarbageCollection() = 0; + + virtual RefPtr GetGroupJsBridge() = 0; + + bool IsDebugVersion() const + { + return isDebugVersion_; + } + + void SetDebugVersion(bool value) + { + isDebugVersion_ = value; + } + + bool NeedDebugBreakPoint() const + { + return needDebugBreakPoint_; + } + + void SetNeedDebugBreakPoint(bool value) + { + needDebugBreakPoint_ = value; + } + + const std::string& GetInstanceName() const + { + return instanceName_; + } + + void SetInstanceName(const std::string& name) + { + instanceName_ = name; + } + +private: + // weather the app has debugger.so. + bool isDebugVersion_ = false; + + // if debug, '-D' means need debug breakpoint, by default, do not enter breakpoint. + bool needDebugBreakPoint_ = false; + + std::string instanceName_; +}; +} // namespace OHOS::Ace::Framework +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_COMMON_JS_ENGINE_H diff --git a/frameworks/bridge/js_frontend/engine/common/js_engine.h b/frameworks/bridge/js_frontend/engine/common/js_engine.h new file mode 100644 index 00000000..d9bba449 --- /dev/null +++ b/frameworks/bridge/js_frontend/engine/common/js_engine.h @@ -0,0 +1,140 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_COMMON_JS_ENGINE_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_COMMON_JS_ENGINE_H + +#include + +#include "core/common/js_message_dispatcher.h" +#include "frameworks/bridge/js_frontend/frontend_delegate.h" +#include "frameworks/bridge/js_frontend/js_ace_page.h" + +namespace OHOS::Ace::Framework { +struct JsModule { + const std::string moduleName; + const std::string methods; +}; + +struct JsComponent { + const std::string componentName; + const std::string methods; +}; + +class JsEngineInstance { +public: + JsEngineInstance() = default; + virtual ~JsEngineInstance() = default; + virtual void FlushCommandBuffer(void* context, const std::string& command); +}; + +class JsEngine : public AceType { + DECLARE_ACE_TYPE(JsEngine, AceType); + +public: + JsEngine() = default; + virtual ~JsEngine() = default; + + void RegisterSingleComponent(std::string& command, const std::string& componentName, const std::string& methods); + + void RegisterSingleModule(std::string& command, const std::string& moduleName, const std::string& methods); + + void RegisterModules(std::string& command); + + void RegisterComponents(std::string& command); + + // Initialize the JS engine. + virtual bool Initialize(const RefPtr& delegate) = 0; + + // Load script in JS engine, and execute in corresponding context. + virtual void LoadJs(const std::string& url, const RefPtr& page, bool isMainPage) = 0; + + // Update running page + virtual void UpdateRunningPage(const RefPtr& page) = 0; + + // Update staging page + virtual void UpdateStagingPage(const RefPtr& page) = 0; + + // Reset loading page + virtual void ResetStagingPage() = 0; + + virtual void SetJsMessageDispatcher(const RefPtr& dispatcher) = 0; + + // Fire AsyncEvent on JS + virtual void FireAsyncEvent(const std::string& eventId, const std::string& param) = 0; + + // Fire SyncEvent on JS + virtual void FireSyncEvent(const std::string& eventId, const std::string& param) = 0; + + // Timer callback on JS + virtual void TimerCallback(const std::string& callbackId, const std::string& delay, bool isInterval) = 0; + + // Destroy page instance on JS + virtual void DestroyPageInstance(int32_t pageId) = 0; + + // destroy application instance according packageName + virtual void DestroyApplication(const std::string& packageName) = 0; + + virtual void MediaQueryCallback(const std::string& callbackId, const std::string& args) = 0; + + virtual void RequestAnimationCallback(const std::string& callbackId, uint64_t timeStamp) = 0; + + virtual void JsCallback(const std::string& callbackId, const std::string& args) = 0; + + virtual void RunGarbageCollection() = 0; + + virtual RefPtr GetGroupJsBridge() = 0; + + bool IsDebugVersion() const + { + return isDebugVersion_; + } + + void SetDebugVersion(bool value) + { + isDebugVersion_ = value; + } + + bool NeedDebugBreakPoint() const + { + return needDebugBreakPoint_; + } + + void SetNeedDebugBreakPoint(bool value) + { + needDebugBreakPoint_ = value; + } + + const std::string& GetInstanceName() const + { + return instanceName_; + } + + void SetInstanceName(const std::string& name) + { + instanceName_ = name; + } + +private: + // weather the app has debugger.so. + bool isDebugVersion_ = false; + + // if debug, '-D' means need debug breakpoint, by default, do not enter breakpoint. + bool needDebugBreakPoint_ = false; + + std::string instanceName_; +}; +} // namespace OHOS::Ace::Framework +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_COMMON_JS_ENGINE_H diff --git a/frameworks/bridge/js_frontend/engine/common/js_engine_loader.cpp b/frameworks/bridge/js_frontend/engine/common/js_engine_loader.cpp new file mode 100644 index 00000000..ed3dc772 --- /dev/null +++ b/frameworks/bridge/js_frontend/engine/common/js_engine_loader.cpp @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/js_frontend/engine/common/js_engine_loader.h" + +#include + +#include "base/log/log.h" +#include "base/utils/singleton.h" +#include "base/utils/system_properties.h" +#include "core/common/ace_application_info.h" + +namespace OHOS::Ace::Framework { +namespace { + +constexpr char JS_ENGINE_ENTRY[] = "OHOS_ACE_GetJsEngineLoader"; + +constexpr char QUICK_JS_ENGINE_SHARED_LIB[] = "libace_engine_qjs.z.so"; +constexpr char QJS_DECLARATIVE_JS_ENGINE_SHARED_LIB[] = "libace_engine_declarative_qjs.z.so"; + +using DynamicEntry = void* (*)(); + +class DummyJsEngineLoader final : public JsEngineLoader, public Singleton { + DECLARE_SINGLETON(DummyJsEngineLoader); + +public: + RefPtr CreateJsEngine(int32_t instanceId) const override + { + return nullptr; + } + + RefPtr CreateCanvasBridge() const override + { + return nullptr; + } +}; + +DummyJsEngineLoader::DummyJsEngineLoader() = default; +DummyJsEngineLoader::~DummyJsEngineLoader() = default; + +const char* GetSharedLibrary() +{ + return QUICK_JS_ENGINE_SHARED_LIB; +} + +JsEngineLoader& GetJsEngineLoader(const char* sharedLibrary) +{ + void* handle = dlopen(sharedLibrary, RTLD_LAZY); + if (handle == nullptr) { + LOGE("Failed to open shared library %{public}s, reason: %{public}sn", sharedLibrary, dlerror()); + return DummyJsEngineLoader::GetInstance(); + } + + auto entry = reinterpret_cast(dlsym(handle, JS_ENGINE_ENTRY)); + if (entry == nullptr) { + dlclose(handle); + LOGE("Failed to get symbol %{public}s in %{public}s", JS_ENGINE_ENTRY, sharedLibrary); + return DummyJsEngineLoader::GetInstance(); + } + + auto loader = reinterpret_cast(entry()); + if (loader == nullptr) { + dlclose(handle); + LOGE("Failed to get js engine loader in %{public}s", sharedLibrary); + return DummyJsEngineLoader::GetInstance(); + } + + return *loader; +} + +} // namespace + +JsEngineLoader& JsEngineLoader::Get() +{ + static JsEngineLoader& instance = GetJsEngineLoader(GetSharedLibrary()); + return instance; +} + +JsEngineLoader& JsEngineLoader::GetDeclarative() +{ + static JsEngineLoader& instance = GetJsEngineLoader(QJS_DECLARATIVE_JS_ENGINE_SHARED_LIB); + return instance; +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/js_frontend/engine/common/js_engine_loader.h b/frameworks/bridge/js_frontend/engine/common/js_engine_loader.h new file mode 100644 index 00000000..dc8a0975 --- /dev/null +++ b/frameworks/bridge/js_frontend/engine/common/js_engine_loader.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_COMMON_JS_ENGINE_LOADER_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_COMMON_JS_ENGINE_LOADER_H + +#include "frameworks/bridge/js_frontend/engine/common/base_canvas_bridge.h" +#include "frameworks/bridge/js_frontend/engine/common/js_engine.h" + +namespace OHOS::Ace::Framework { + +class JsEngineLoader { +public: + virtual ~JsEngineLoader() = default; + + static JsEngineLoader& Get(); + static JsEngineLoader& GetDeclarative(); + + virtual RefPtr CreateJsEngine(int32_t instanceId) const = 0; + virtual RefPtr CreateCanvasBridge() const = 0; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_COMMON_JS_ENGINE_LOADER_H diff --git a/frameworks/bridge/js_frontend/engine/common/qjs_group_js_bridge.cpp b/frameworks/bridge/js_frontend/engine/common/qjs_group_js_bridge.cpp new file mode 100644 index 00000000..3ac209df --- /dev/null +++ b/frameworks/bridge/js_frontend/engine/common/qjs_group_js_bridge.cpp @@ -0,0 +1,573 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/js_frontend/engine/quickjs/qjs_group_js_bridge.h" + +#include "base/json/json_util.h" +#include "base/log/ace_trace.h" +#include "base/log/event_report.h" +#include "base/log/log.h" +#include "frameworks/bridge/codec/function_call.h" +#include "frameworks/bridge/codec/standard_function_codec.h" +#include "frameworks/bridge/js_frontend/engine/common/js_constants.h" +#include "frameworks/bridge/js_frontend/engine/quickjs/qjs_engine.h" + +namespace OHOS::Ace::Framework { +namespace { + +const int32_t PLUGIN_REQUEST_MIN_ARGC_NUM = 4; +const int32_t PLUGIN_REQUEST_ARG_RESOLVE_INDEX = 0; +const int32_t PLUGIN_REQUEST_ARG_REJECT_INDEX = 1; +const int32_t PLUGIN_REQUEST_ARG_GROUP_NAME_INDEX = 2; +const int32_t PLUGIN_REQUEST_ARG_FUNCTION_NAME_INDEX = 3; +const int32_t PLUGIN_REQUEST_ARG_APP_PARAMS_INDEX = 4; + +} // namespace + +int32_t QuickJsGroupJsBridge::InitializeGroupJsBridge(JSContext* jsContext) +{ + if (nullptr == jsContext) { + LOGE("jsContext is null"); + EventReport::SendAPIChannelException(APIChannelExcepType::JS_BRIDGE_INIT_ERR); + return JS_CALL_FAIL; + } + + context_ = jsContext; + + if (JS_CALL_SUCCESS != LoadJsBridgeFunction()) { + LOGE("Load JSBridge function failed!"); + EventReport::SendAPIChannelException(APIChannelExcepType::JS_BRIDGE_INIT_ERR); + return JS_CALL_FAIL; + } + + eventCallBackFuncs_.clear(); + moduleCallBackFuncs_.clear(); + requestIdCallbackIdMap_.clear(); + pendingCallbackId_ = 1; + + return JS_CALL_SUCCESS; +} + +void QuickJsGroupJsBridge::Uninitialize() +{ + if (!context_) { + LOGE("qjs context is null"); + return; + } + + for (auto& cb : eventCallBackFuncs_) { + JS_FreeValue(context_, cb.second); + } + eventCallBackFuncs_.clear(); + + for (auto& cb : moduleCallBackFuncs_) { + JS_FreeValue(context_, cb.second.resolveCallback); + JS_FreeValue(context_, cb.second.rejectCallback); + } + moduleCallBackFuncs_.clear(); +} + +int32_t QuickJsGroupJsBridge::LoadJsBridgeFunction() +{ + JSValue group = JS_NewObject(context_); + // 3 means parameter number + int32_t ret = JS_SetPropertyStr( + context_, group, "sendGroupMessage", JS_NewCFunction(context_, ProcessJsRequest, "sendGroupMessage", 3)); + if (ret < 0) { + LOGE("set sendGroupMessage mapping failed!"); + EventReport::SendAPIChannelException(APIChannelExcepType::SET_FUNCTION_ERR); + JS_FreeValue(context_, group); + return JS_CALL_FAIL; + } + + JSValue globalObj = JS_GetGlobalObject(context_); + ret = JS_SetPropertyStr(context_, globalObj, "group", group); + if (ret < 0) { + LOGE("set globalObj group mapping failed!"); + EventReport::SendAPIChannelException(APIChannelExcepType::SET_FUNCTION_ERR); + JS_FreeValue(context_, group); + JS_FreeValue(context_, globalObj); + return JS_CALL_FAIL; + } + + JS_FreeValue(context_, globalObj); + return JS_CALL_SUCCESS; +} + +void QuickJsGroupJsBridge::LoadPluginJsCode(std::string&& jsCode) +{ + LOGI("Load Plugin Js Code, code len:%{public}d", static_cast(jsCode.length())); + if (JS_CALL_SUCCESS != CallEvalBuf(context_, jsCode.c_str(), jsCode.length(), "", JS_EVAL_TYPE_MODULE)) { + LOGE("CallEvalBuf failed!"); + } +} + +void QuickJsGroupJsBridge::LoadPluginJsByteCode(std::vector&& jsCode, std::vector&& jsCodeLen) +{ + LOGW("Qjs do not support load js bytecode now."); +} + +void QuickJsGroupJsBridge::QuickJsPrintException(JSContext* context, int32_t expLine, int32_t line) +{ + std::string expMsg = "Unknown"; + QjsHandleScope handleScope(context); + JSValue jsExp = JS_GetException(context); + JSValue jsMsg = QjsUtils::GetPropertyStr(context, jsExp, "message"); + if (JS_IsString(jsMsg)) { + size_t msgLen = 0; + const char* msg = JS_ToCStringLen(context, &msgLen, jsMsg); + if (msg == NULL) { + JS_FreeValue(context, JS_GetException(context)); + } else { + expMsg.assign(msg, msgLen); + JS_FreeCString(context, msg); + } + } + + JS_FreeValue(context, jsExp); + + LOGE("Exception at line %{private}d: %{private}s at line %{private}d", line, expMsg.c_str(), expLine); +} + +bool QuickJsGroupJsBridge::QuickJsCheckException(JSContext* context, JSValueConst object, int32_t line) +{ + if (JS_IsException(object)) { + QuickJsPrintException(context, JS_VALUE_GET_INT(object), line); + return true; + } + return false; +} + +#define QUICK_JS_PRINT_EXCEPTION(ctx) QuickJsGroupJsBridge::QuickJsPrintException(ctx, 0, __LINE__) +#define QUICK_JS_CHECK_EXCEPTION(ctx, obj) QuickJsGroupJsBridge::QuickJsCheckException(ctx, obj, __LINE__) + +int32_t QuickJsGroupJsBridge::QuickJsGetLengthIfObjectIsArray(JSContext* ctx, JSValueConst obj) +{ + int32_t result = JS_IsArray(ctx, obj); + if (result < 0) { + QUICK_JS_PRINT_EXCEPTION(ctx); + return -1; + } + if (!result) { + return -1; + } + QjsHandleScope handleScope(ctx); + JSValue valLen = QjsUtils::GetPropertyStr(ctx, obj, "length"); + int32_t length = -1; + if ((JS_IsInteger(valLen)) && (JS_ToInt32(ctx, &length, valLen)) < 0) { + QUICK_JS_PRINT_EXCEPTION(ctx); + return -1; + } + return length; +} + +std::string QuickJsGroupJsBridge::SerializationObjectToString(JSContext* ctx, JSValue& val) +{ + JSValue strValue = JS_UNDEFINED; + JSValue global = JS_UNDEFINED; + JSValue json = JS_UNDEFINED; + JSValue func = JS_UNDEFINED; + + QjsHandleScope handleScope(ctx); + do { + global = JS_GetGlobalObject(ctx); + json = QjsUtils::GetPropertyStr(ctx, global, "JSON"); + if (!JS_IsObject(json)) { + break; + } + func = QjsUtils::GetPropertyStr(ctx, json, "stringify"); + if (!JS_IsFunction(ctx, func)) { + break; + } + } while (false); + + JS_FreeValue(ctx, global); + + strValue = QjsUtils::Call(ctx, func, json, 1, &(val)); + if (QUICK_JS_CHECK_EXCEPTION(ctx, strValue)) { + LOGE("SerializationObjectToString error"); + return ""; + } else { + JSValue tempString = JS_ToString(ctx, strValue); + ScopedString para(ctx, tempString); + std::string functionPara(para.get()); + JS_FreeValue(ctx, tempString); + return functionPara; + } +} + +ParseJsDataResult QuickJsGroupJsBridge::ParseJsPara(JSContext* ctx, int32_t argc, + JSValueConst* argv, std::vector& args, int32_t requestId) +{ + if (argc < PLUGIN_REQUEST_ARG_APP_PARAMS_INDEX) { + return ParseJsDataResult::PARSE_JS_SUCCESS; + } + + for (int32_t i = PLUGIN_REQUEST_ARG_APP_PARAMS_INDEX; i < argc; i++) { + JSValue val = argv[i]; + if (JS_IsString(val)) { + ScopedString para(ctx, val); + std::string functionPara(para.get()); + CodecData arg(functionPara); + args.push_back(arg); + } else if (JS_IsNumber(val)) { + if (JS_IsInteger(val)) { + int32_t valInt = 0; + JS_ToInt32(ctx, &valInt, val); + CodecData arg(valInt); + args.push_back(arg); + LOGD("Process callNative para type:Int"); + } else { + double valDouble; + JS_ToFloat64(ctx, &valDouble, val); + CodecData arg(valDouble); + args.push_back(arg); + LOGD("Process callNative para type:Double"); + } + } else if (JS_IsBool(val)) { + bool valBool = JS_ToBool(ctx, val); + CodecData arg(valBool); + args.push_back(arg); + LOGD("Process callNative para type:bool"); + } else if (JS_IsNull(val)) { + CodecData argNull; + args.push_back(argNull); + LOGD("Process callNative para type:null"); + } else if (JS_IsFunction(ctx, val)) { + int32_t functionId = GetPendingCallbackIdAndIncrement(); + CodecData arg(functionId, BufferDataType::TYPE_FUNCTION); + args.push_back(arg); + SetEventGroupCallBackFuncs(ctx, val, functionId, requestId); + } else if (JS_IsArray(ctx, val) || JS_IsObject(val)) { + std::string objStr = SerializationObjectToString(ctx, val); + if (objStr.empty()) { + return ParseJsDataResult::PARSE_JS_ERR_UNSUPPORTED_TYPE; + } + CodecData arg(objStr, BufferDataType::TYPE_OBJECT); + args.push_back(arg); + } else if (JS_IsUndefined(val)) { + LOGD("Process callNative para type:undefined"); + } else { + LOGE("Process callNative para type: unsupported type"); + JS_FreeValue(ctx, val); + return ParseJsDataResult::PARSE_JS_ERR_UNSUPPORTED_TYPE; + } + } + return ParseJsDataResult::PARSE_JS_SUCCESS; +} + +bool QuickJsGroupJsBridge::SetModuleGroupCallbackFuncs( + JSContext* ctx, const JSValue& resolveCallback, const JSValue& rejectCallback, int32_t callbackId) +{ + if (!JS_IsFunction(ctx, resolveCallback) || JS_IsNull(resolveCallback) || !JS_IsFunction(ctx, rejectCallback) || + JS_IsNull(rejectCallback)) { + LOGE("resolve or reject callback function is invalid"); + return false; + } + + PromiseCallback promiseCallJsFunc; + promiseCallJsFunc.resolveCallback = resolveCallback; + promiseCallJsFunc.rejectCallback = rejectCallback; + + auto result = moduleCallBackFuncs_.try_emplace(callbackId, promiseCallJsFunc); + if (!result.second) { + LOGE("module callback function has been existed!"); + return false; + } else { + JS_DupValue(ctx, promiseCallJsFunc.resolveCallback); + JS_DupValue(ctx, promiseCallJsFunc.rejectCallback); + } + + return true; +} + +bool QuickJsGroupJsBridge::SetEventGroupCallBackFuncs( + JSContext* ctx, const JSValue& eventCallbackFunc, int32_t callbackId, int32_t requestId) +{ + if (JS_IsNull(eventCallbackFunc) || !JS_IsFunction(ctx, eventCallbackFunc)) { + LOGE("callback function is invalid!"); + return false; + } + + LOGI("record event callback, requestId:%{private}d, callbackId:%{private}d", requestId, callbackId); + auto result = eventCallBackFuncs_.try_emplace(callbackId, eventCallbackFunc); + if (result.second) { + JS_DupValue(ctx, eventCallbackFunc); + } else { + JS_FreeValue(ctx, result.first->second); + result.first->second = JS_DupValue(ctx, eventCallbackFunc); + } + + AddRequestIdCallbackIdRelation(callbackId, requestId); + + return true; +} + +void QuickJsGroupJsBridge::RemoveEventGroupCallBackFuncs(int32_t callbackId) +{ + LOGI("remove event callback, callbackId:%{private}d", callbackId); + auto itFunc = eventCallBackFuncs_.find(callbackId); + if (itFunc != eventCallBackFuncs_.end()) { + JS_FreeValue(context_, itFunc->second); + eventCallBackFuncs_.erase(callbackId); + } +} + +void QuickJsGroupJsBridge::AddRequestIdCallbackIdRelation(int32_t eventId, int32_t requestId) +{ + auto result = requestIdCallbackIdMap_.try_emplace(requestId, eventId); + if (!result.second) { + result.first->second = eventId; + } +} + +void QuickJsGroupJsBridge::RemoveRequestIdCallbackIdRelation(int32_t requestId, bool removeEventCallback) +{ + auto eventId = requestIdCallbackIdMap_.find(requestId); + if (eventId != requestIdCallbackIdMap_.end()) { + if (removeEventCallback) { + RemoveEventGroupCallBackFuncs(eventId->second); + } + requestIdCallbackIdMap_.erase(requestId); + } +} + +JSValue QuickJsGroupJsBridge::ProcessJsRequest(JSContext* ctx, JSValueConst thisVal, int32_t argc, JSValueConst* argv) +{ + ACE_SCOPED_TRACE("ProcessJsRequest"); + QjsEngineInstance* instance = static_cast(JS_GetContextOpaque(ctx)); + if (instance == nullptr) { + LOGE("invalid args, failed to get QjsEngineInstance from the JSContext"); + return JS_EXCEPTION; + } + + auto groupJsBridge = AceType::DynamicCast(instance->GetDelegate()->GetGroupJsBridge()); + if (groupJsBridge == nullptr) { + LOGE("invalid args, failed to get GroupJsBridge from the JSContext"); + return JS_EXCEPTION; + } + + // Should have at least 4 parameters + if (argv == nullptr || argc < PLUGIN_REQUEST_MIN_ARGC_NUM) { + LOGE("invalid args number:%{public}d", argc); + return JS_EXCEPTION; + } + + int32_t callbackId = groupJsBridge->GetPendingCallbackIdAndIncrement(); + if (!groupJsBridge->SetModuleGroupCallbackFuncs(ctx, argv[PLUGIN_REQUEST_ARG_RESOLVE_INDEX], + argv[PLUGIN_REQUEST_ARG_REJECT_INDEX], callbackId)) { + LOGE("set module callback function failed!"); + return JS_EXCEPTION; + } + ScopedString groupName(ctx, argv[PLUGIN_REQUEST_ARG_GROUP_NAME_INDEX]); + if (groupName.get() == nullptr) { + LOGE("invalid paras, groupName:%{private}s", groupName.get()); + return JS_EXCEPTION; + } + std::string strGroupName(groupName.get()); + LOGI("send message, groupName: %{private}s, callbackId: %{private}d", strGroupName.c_str(), callbackId); + + ScopedString functionName(ctx, argv[PLUGIN_REQUEST_ARG_FUNCTION_NAME_INDEX]); + std::string strFunctionName(functionName.get()); + + std::vector args; + ParseJsDataResult parseJsResult = groupJsBridge->ParseJsPara(ctx, argc, argv, args, callbackId); + if (parseJsResult != ParseJsDataResult::PARSE_JS_SUCCESS) { + ProcessParseJsError(parseJsResult, ctx, callbackId); + return JS_NULL; + } + + FunctionCall functionCall(strFunctionName, args); + StandardFunctionCodec codec; + std::vector encodeBuf; + if (!codec.EncodeFunctionCall(functionCall, encodeBuf)) { + groupJsBridge->TriggerModulePluginGetErrorCallback(callbackId, PLUGIN_REQUEST_FAIL, + "encode request message failed"); + return JS_NULL; + } + + if (!instance->CallPlatformFunction(strGroupName, std::move(encodeBuf), callbackId)) { + LOGE("CallPlatformFunction fail"); + groupJsBridge->TriggerModulePluginGetErrorCallback(callbackId, PLUGIN_REQUEST_FAIL, "send message failed"); + return JS_NULL; + } + + return JS_NULL; +} + +int32_t QuickJsGroupJsBridge::CallEvalBuf( + JSContext* ctx, const char* buf, size_t bufLen, const char* filename, int32_t evalFlags) +{ + int32_t ret = JS_CALL_SUCCESS; + JSValue val = JS_Eval(ctx, buf, bufLen, filename, evalFlags); + if (QUICK_JS_CHECK_EXCEPTION(ctx, val)) { + LOGE("EvalBuf failed!"); + ret = JS_CALL_FAIL; + } + JS_FreeValue(ctx, val); + return ret; +} + +void QuickJsGroupJsBridge::ProcessParseJsError(ParseJsDataResult errorType, JSContext* ctx, int32_t callbackId) +{ + QjsEngineInstance* instance = static_cast(JS_GetContextOpaque(ctx)); + if (instance == nullptr) { + LOGE("get quick js engine instance failed!"); + return; + } + + std::string errMessage; + switch (errorType) { + case ParseJsDataResult::PARSE_JS_ERR_UNSUPPORTED_TYPE: + errMessage = "unsupporteded js parameter type"; + instance->PluginErrorCallback(callbackId, + static_cast(ParseJsDataResult::PARSE_JS_ERR_UNSUPPORTED_TYPE), std::move(errMessage)); + break; + case ParseJsDataResult::PARSE_JS_ERR_TOO_MANY_PARAM: + errMessage = "the number of parameters exceeds 255"; + instance->PluginErrorCallback(callbackId, + static_cast(ParseJsDataResult::PARSE_JS_ERR_TOO_MANY_PARAM), std::move(errMessage)); + break; + default: + break; + } +} + +void QuickJsGroupJsBridge::TriggerModuleJsCallback(int32_t callbackId, int32_t code, std::vector&& messageData) +{ + JSValue callBackResult = JS_NULL; + CodecData codecResult; + StandardFunctionCodec codec; + if (codec.DecodePlatformMessage(messageData, codecResult)) { + std::string resultString = codecResult.GetStringValue(); + if (resultString.empty()) { + callBackResult = JS_NULL; + } else { + callBackResult = JS_NewString(context_, resultString.c_str()); + } + } else { + LOGE("trigger JS result function error, decode message fail, callbackId:%{private}d", + callbackId); + code = PLUGIN_REQUEST_FAIL; + callBackResult = JS_NewString(context_, std::string("{\"code\":").append(std::to_string(code)).append(",") + .append("\"data\":\"invalid response data\"}").c_str()); + } + + CallModuleJsCallback(callbackId, code, callBackResult); + + messageData.clear(); +} + +void QuickJsGroupJsBridge::CallModuleJsCallback(int32_t callbackId, int32_t code, JSValue callBackResult) +{ + RemoveRequestIdCallbackIdRelation(callbackId, code != PLUGIN_REQUEST_SUCCESS); + + auto itFunc = moduleCallBackFuncs_.find(callbackId); + if (itFunc != moduleCallBackFuncs_.end()) { + PromiseCallback callback = itFunc->second; + JSValue jsFunc = (code == PLUGIN_REQUEST_SUCCESS ? callback.resolveCallback : callback.rejectCallback); + if (!JS_IsFunction(context_, jsFunc) || JS_IsNull(jsFunc)) { + LOGE("trigger JS result function error, it is not a function, callbackId:%{private}d", + callbackId); + return; + } + + // Pass only 1 parameter, call promise resolve call back. + JS_Call(context_, jsFunc, JS_UNDEFINED, 1, &callBackResult); + js_std_loop(context_); + JS_FreeValue(context_, callback.resolveCallback); + JS_FreeValue(context_, callback.rejectCallback); + JS_FreeValue(context_, callBackResult); + moduleCallBackFuncs_.erase(itFunc); + LOGI("trigger JS result function success, callbackId:%{private}d, code:%{private}d", callbackId, code); + } else { + LOGE("trigger JS result function is not exists, callbackId:%{private}d, code:%{private}d", callbackId, code); + } +} + +void QuickJsGroupJsBridge::TriggerModulePluginGetErrorCallback( + int32_t callbackId, int32_t errorCode, std::string&& errorMessage) +{ + RemoveRequestIdCallbackIdRelation(callbackId, true); + + auto itFunc = moduleCallBackFuncs_.find(callbackId); + if (itFunc != moduleCallBackFuncs_.end()) { + PromiseCallback jsCallbackFunc = itFunc->second; + if (!JS_IsFunction(context_, jsCallbackFunc.rejectCallback) || JS_IsNull(jsCallbackFunc.rejectCallback)) { + LOGE("trigger JS result function error, reject is not a function, callbackId:%{private}d", + callbackId); + return; + } + + auto resultJson = JsonUtil::Create(true); + resultJson->Put(std::string("code").c_str(), errorCode); + resultJson->Put(std::string("data").c_str(), errorMessage.c_str()); + + JSValue emptyReplyCallBack = JS_NewString(context_, resultJson->ToString().c_str()); + // Pass only 1 parameter, call promise reject call back for error get in plugin. + JS_Call(context_, jsCallbackFunc.rejectCallback, JS_UNDEFINED, 1, &emptyReplyCallBack); + js_std_loop(context_); + JS_FreeValue(context_, jsCallbackFunc.resolveCallback); + JS_FreeValue(context_, jsCallbackFunc.rejectCallback); + JS_FreeValue(context_, emptyReplyCallBack); + moduleCallBackFuncs_.erase(itFunc); + } +} + +void QuickJsGroupJsBridge::CallEventJsCallback(int32_t callbackId, std::vector&& eventData) +{ + JSValue callBackEvent = JS_NULL; + CodecData codecEvent; + StandardFunctionCodec codec; + if (codec.DecodePlatformMessage(eventData, codecEvent)) { + std::string eventString = codecEvent.GetStringValue(); + if (eventString.empty()) { + callBackEvent = JS_NULL; + } else { + callBackEvent = JS_NewString(context_, eventString.c_str()); + } + } else { + LOGE("trigger JS callback function error, decode message fail, callbackId:%{private}d", callbackId); + callBackEvent = JS_NULL; + } + + auto itFunc = eventCallBackFuncs_.find(callbackId); + if (itFunc != eventCallBackFuncs_.end()) { + JSValue jsEventCallbackFunc = itFunc->second; + if (!JS_IsFunction(context_, jsEventCallbackFunc) || JS_IsNull(jsEventCallbackFunc)) { + LOGE("trigger JS callback function error, callback is not a function, " + "callbackId:%{private}d", callbackId); + return; + } + + // Pass only 1 parameter + JS_Call(context_, jsEventCallbackFunc, JS_UNDEFINED, 1, &callBackEvent); + js_std_loop(context_); + JS_FreeValue(context_, callBackEvent); + } else { + LOGE("trigger JS callback function error, it is not exists, callbackId:%{private}d", callbackId); + } + eventData.clear(); +} + +void QuickJsGroupJsBridge::TriggerEventJsCallback(int32_t callbackId, int32_t code, std::vector&& eventData) +{ + if (code == PLUGIN_CALLBACK_DESTROY) { + RemoveEventGroupCallBackFuncs(callbackId); + } else { + CallEventJsCallback(callbackId, std::move(eventData)); + } +} +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/js_frontend/engine/common/runtime_constants.h b/frameworks/bridge/js_frontend/engine/common/runtime_constants.h new file mode 100644 index 00000000..3a78e11a --- /dev/null +++ b/frameworks/bridge/js_frontend/engine/common/runtime_constants.h @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_COMMON_RUNTIME_CONSTANTS_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_COMMON_RUNTIME_CONSTANTS_H + +#include + +namespace OHOS::Ace::Framework { + +constexpr int32_t DEFAULT_APP_ID = 10002; +constexpr int32_t FRAGMENT_SIZE = 100; + +#if defined(WINDOWS_PLATFORM) || defined(MAC_PLATFORM) +constexpr char JS_LOG_TAG[] = "Console"; +#else +constexpr char JS_LOG_TAG[] = "JSApp"; +#endif + +enum class JsLogLevel : int32_t { + DEBUG = 0, + INFO, + WARNING, + ERROR, +}; + +// JsHandleCallback index +constexpr uint32_t PROPERTIES_ARGS_LEN = 2; +constexpr uint32_t PROPERTIES_ARGS_CBID_IDX = 0; +constexpr uint32_t PROPERTIES_ARGS_RST_IDX = 1; + +// JsDomCreateBody index +constexpr uint32_t CREATE_BODY_ARGS_LEN = 5; +constexpr uint32_t CREATE_BODY_TAG_IDX = 1; +constexpr uint32_t CREATE_BODY_ATTR_IDX = 2; +constexpr uint32_t CREATE_BODY_STYLE_IDX = 3; +constexpr uint32_t CREATE_BODY_EVENT_IDX = 4; + +// JsDomAddElement index +constexpr uint32_t ADD_ELEMENT_ARGS_LEN = 9; +constexpr uint32_t ADD_ELEMENT_PARID_IDX = 0; +constexpr uint32_t ADD_ELEMENT_NODEID_IDX = 1; +constexpr uint32_t ADD_ELEMENT_TAG_IDX = 2; +constexpr uint32_t ADD_ELEMENT_ATTR_IDX = 3; +constexpr uint32_t ADD_ELEMENT_STYLE_IDX = 4; +constexpr uint32_t ADD_ELEMENT_EVENT_INDEX = 5; +constexpr uint32_t ADD_ELEMENT_CUSTOM_INDEX = 6; +constexpr uint32_t ADD_ELEMENT_ITEM_INDEX = 7; +constexpr uint32_t ADD_ELEMENT_INSTANCE_ID = 8; + +// JsUpdateElement index +constexpr uint32_t UPLOAD_ELEMENT_ARGS_LEN = 3; +constexpr uint32_t UPLOAD_ELEMENT_NID_IDX = 0; +constexpr uint32_t UPLOAD_ELEMENT_DOM_IDX = 1; +constexpr uint32_t UPLOAD_ELEMENT_INSTANCE_ID = 2; + +// JsRemoveElement index +constexpr uint32_t REMOVE_ELEMENT_ARGS_LEN = 2; +constexpr uint32_t REMOVE_ELEMENT_ID_IDX = 0; +constexpr uint32_t REMOVE_ELEMENT_INSTANCE_ID = 1; + +// JsCallNative index +constexpr uint32_t NATIVE_ARGS_LEN = 2; +constexpr uint32_t NATIVE_ARGS_METHOD_IDX = 0; +constexpr uint32_t NATIVE_ARGS_IDX = 1; + +// JsCallComponent index +constexpr uint32_t COMPONENT_ARGS_LEN = 3; +constexpr uint32_t COMPONENT_ARGS_ID_IDX = 0; +constexpr uint32_t COMPONENT_ARGS_METHOD_IDX = 1; +constexpr uint32_t COMPONENT_ARGS_IDX = 2; + +// JsPerf index +constexpr uint32_t PERF_ARGS_LEN = 1; +constexpr uint32_t PERF_ARGS_MRTHOD_IDX = 0; + +// JsHiViewReport index +constexpr uint32_t HIVIEW_ARGS_LEN = 2; +constexpr uint32_t HIVIEW_ARGS_ID_IDX = 0; +constexpr uint32_t HIVIEW_ARGS_JSON_IDX = 1; + +// GetPackageInfo index +constexpr uint32_t PAG_INFO_ARGS_LEN = 2; +constexpr uint32_t PAG_INFO_ARGS_MSG_IDX = 0; +constexpr uint32_t PAG_INFO_ARGS_ID_IDX = 1; + +constexpr uint32_t URL_SOURCE_START_IDX = 5; +constexpr uint32_t URL_SOURCE_SUFFIX_LEN = 7; +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_COMMON_RUNTIME_CONSTANTS_H diff --git a/frameworks/bridge/js_frontend/engine/quickjs/animation_bridge.cpp b/frameworks/bridge/js_frontend/engine/quickjs/animation_bridge.cpp new file mode 100644 index 00000000..0737e895 --- /dev/null +++ b/frameworks/bridge/js_frontend/engine/quickjs/animation_bridge.cpp @@ -0,0 +1,598 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/js_frontend/engine/quickjs/animation_bridge.h" + +#include + +#include "base/utils/string_utils.h" +#include "frameworks/bridge/common/utils/utils.h" +#include "frameworks/bridge/js_frontend/engine/quickjs/qjs_engine.h" +#include "frameworks/bridge/js_frontend/engine/quickjs/qjs_group_js_bridge.h" + +namespace OHOS::Ace::Framework { + +namespace { + +RefPtr GetPageById(QjsEngineInstance* instance, int32_t pageId) +{ + LOGD("Enter GetPageById"); + if (instance == nullptr) { + LOGE("instance is null."); + return nullptr; + } + auto delegate = instance->GetDelegate(); + if (delegate == nullptr) { + LOGE("delegate is null."); + return nullptr; + } + return delegate->GetPage(pageId); +} + +inline int32_t GetJsInt32Val(JSContext* ctx, JSValueConst value) +{ + int32_t val = 0; + if (JS_IsNumber(value) && (JS_ToInt32(ctx, &val, value)) < 0) { + val = 0; + } + return val; +} + +void HandleJsAnimationContext(JSContext* ctx, int32_t pageId, int32_t nodeId, TweenOperation operation) +{ + auto instance = static_cast(JS_GetContextOpaque(ctx)); + auto page = GetPageById(instance, pageId); + if (page == nullptr) { + LOGE("no page found for nodeId: %{public}d", nodeId); + return; + } + auto task = AceType::MakeRefPtr(operation); + page->PushCommand(AceType::MakeRefPtr(nodeId, task)); + if (page->CheckPageCreated()) { + instance->GetDelegate()->TriggerPageUpdate(page->GetPageId()); + } +} + +const JSCFunctionListEntry JS_ANIMATION_FUNCS[] = { + JS_CGETSET_DEF( + "playState", AnimationBridgeUtils::JsAnimationPlayStateGet, AnimationBridgeUtils::JsAnimationPlayStateSet), + JS_CGETSET_DEF( + "startTime", AnimationBridgeUtils::JsAnimationStartTimeGet, AnimationBridgeUtils::JsAnimationStartTimeSet), + JS_CGETSET_DEF("pending", AnimationBridgeUtils::JsAnimationPendingGet, AnimationBridgeUtils::JsAnimationPendingSet), +}; + +void AddListenerForEventCallback(const WeakPtr& bridgeWeak, + const RefPtr& animator, JSContext* ctx) +{ + animator->AddStopListener([ctx, bridgeWeak] { + auto instance = static_cast(JS_GetContextOpaque(ctx)); + auto jsTaskExecutor = instance->GetDelegate()->GetAnimationJsTask(); + jsTaskExecutor.PostTask([bridgeWeak, instance]() mutable { + auto bridge = bridgeWeak.Upgrade(); + if (!bridge) { + return; + } + LOGI("call animation onfinish event"); + instance->CallAnimationFinishJs(bridge->GetJsObject()); + }); + }); + animator->AddIdleListener([ctx, bridgeWeak] { + auto instance = static_cast(JS_GetContextOpaque(ctx)); + auto jsTaskExecutor = instance->GetDelegate()->GetAnimationJsTask(); + jsTaskExecutor.PostTask([bridgeWeak, instance]() mutable { + auto bridge = bridgeWeak.Upgrade(); + if (!bridge) { + return; + } + LOGI("call animation oncancel event"); + instance->CallAnimationCancelJs(bridge->GetJsObject()); + }); + }); + animator->AddRepeatListener([ctx, bridgeWeak] { + auto instance = static_cast(JS_GetContextOpaque(ctx)); + auto jsTaskExecutor = instance->GetDelegate()->GetAnimationJsTask(); + jsTaskExecutor.PostTask([bridgeWeak, instance]() mutable { + auto bridge = bridgeWeak.Upgrade(); + if (!bridge) { + return; + } + LOGI("call animation onrepeat event"); + instance->CallAnimationRepeatJs(bridge->GetJsObject()); + }); + }); +} + +} // namespace + +AnimationBridge::AnimationBridge(JSContext* ctx, JSValue animationContext, NodeId nodeId) + : ctx_(ctx), animationContext_(JS_DupValue(ctx, animationContext)), nodeId_(nodeId) +{ + if (ctx_ == nullptr) { + return; + } + auto instance = static_cast(JS_GetContextOpaque(ctx_)); + if (instance == nullptr) { + return; + } + delegateWeak_ = instance->GetDelegate(); +} + +AnimationBridge::~AnimationBridge() +{ + // when last page exit, js engine will destruct first, so do not free JSObject again. + auto ref = delegateWeak_.Upgrade(); + if (!ref) { + return; + } + LOGI("Destruct AnimationBridge, nodeId: %{public}d", nodeId_); + JS_FreeValue(ctx_, animationContext_); + QjsEngineInstance* instance = static_cast(JS_GetContextOpaque(ctx_)); + if (instance == nullptr) { + LOGE("qjs engine instance is null."); + } else { + instance->RemoveAnimationBridge(); + } +} + +void AnimationBridge::Uninitialize() +{ + auto ref = delegateWeak_.Upgrade(); + if (!ref) { + return; + } + LOGI("Destruct AnimationBridge, nodeId: %{public}d", nodeId_); + JS_FreeValue(ctx_, animationContext_); +} + +JSValue AnimationBridgeUtils::JsAnimationStartTimeGet(JSContext* ctx, JSValueConst value) +{ + QjsHandleScope handleScope(ctx); + int32_t nodeId = GetJsInt32Val(ctx, QjsUtils::GetPropertyStr(ctx, value, "__nodeId")); + int32_t pageId = GetJsInt32Val(ctx, QjsUtils::GetPropertyStr(ctx, value, "__pageId")); + auto instance = static_cast(JS_GetContextOpaque(ctx)); + if (instance == nullptr) { + LOGE("QjsEngineInstance is null. nodeId is: %{public}d", nodeId); + return JS_NULL; + } + auto page = GetPageById(instance, pageId); + if (page == nullptr) { + LOGE("no page found for nodeId: %{public}d", nodeId); + return JS_NULL; + } + auto domDocument = page->GetDomDocument(); + if (domDocument == nullptr) { + LOGE("JsAnimationStartTimeGet failed, DomDocument is null."); + return JS_NULL; + } + auto domNode = domDocument->GetDOMNodeById(nodeId); + if (domNode == nullptr) { + LOGE("JsAnimationStartTimeGet failed, DomNode is null."); + return JS_NULL; + } + auto tweenComponent = domNode->GetTweenComponent(); + if (tweenComponent) { + auto option = tweenComponent->GetCustomTweenOption(); + auto startTime = option.GetDelay(); + JS_SetPropertyStr(ctx, value, "__startTime", JS_NewInt32(ctx, startTime)); + } + return JS_GetPropertyStr(ctx, value, "__startTime"); +} + +JSValue AnimationBridgeUtils::JsAnimationStartTimeSet(JSContext* ctx, JSValueConst value, JSValueConst startTime) +{ + QjsHandleScope handleScope(ctx); + int32_t startDelay = 0; + JS_ToInt32(ctx, &startDelay, startTime); + int32_t nodeId = GetJsInt32Val(ctx, QjsUtils::GetPropertyStr(ctx, value, "__nodeId")); + auto instance = static_cast(JS_GetContextOpaque(ctx)); + if (instance == nullptr) { + LOGE("QjsEngineInstance is null. nodeID is: %{public}d", nodeId); + return JS_NULL; + } + int32_t pageId = GetJsInt32Val(ctx, QjsUtils::GetPropertyStr(ctx, value, "__pageId")); + auto page = GetPageById(instance, pageId); + if (page == nullptr) { + LOGE("no page found for nodeId: %{public}d", nodeId); + return JS_NULL; + } + auto task = AceType::MakeRefPtr(startDelay); + page->PushCommand(AceType::MakeRefPtr(nodeId, task)); + return JS_NULL; +} + +JSValue AnimationBridgeUtils::JsAnimationPendingGet(JSContext* ctx, JSValueConst value) +{ + QjsHandleScope handleScope(ctx); + int32_t nodeId = GetJsInt32Val(ctx, QjsUtils::GetPropertyStr(ctx, value, "__nodeId")); + auto instance = static_cast(JS_GetContextOpaque(ctx)); + if (instance == nullptr) { + LOGE("QjsEngineInstance is null. nodeID is: %{public}d", nodeId); + return JS_NULL; + } + int32_t pageId = GetJsInt32Val(ctx, QjsUtils::GetPropertyStr(ctx, value, "__pageId")); + auto page = GetPageById(instance, pageId); + if (page == nullptr) { + LOGE("no page found for nodeId: %{public}d", nodeId); + return JS_NULL; + } + auto domDocument = page->GetDomDocument(); + if (domDocument == nullptr) { + LOGE("JsAnimationPendingGet failed, DomDocument is null."); + return JS_NULL; + } + auto domNode = domDocument->GetDOMNodeById(nodeId); + if (domNode == nullptr) { + LOGE("JsAnimationPendingGet failed, DomNode is null."); + return JS_NULL; + } + auto tweenComponent = domNode->GetTweenComponent(); + RefPtr animator; + if (tweenComponent) { + animator = tweenComponent->GetAnimator(); + } + if (animator) { + JS_SetPropertyStr(ctx, value, "__pending", JS_NewBool(ctx, animator->IsPending())); + } + return JS_GetPropertyStr(ctx, value, "__pending"); +} + +JSValue AnimationBridgeUtils::JsAnimationPendingSet(JSContext* ctx, JSValueConst value, JSValueConst pending) +{ + return JS_NULL; +} + +JSValue AnimationBridgeUtils::JsAnimationPlayStateGet(JSContext* ctx, JSValueConst value) +{ + return JS_GetPropertyStr(ctx, value, "__playState"); +} + +JSValue AnimationBridgeUtils::JsAnimationPlayStateSet(JSContext* ctx, JSValueConst value, JSValueConst proto) +{ + ScopedString playState(ctx, proto); + TweenOperation operation = TweenOperation::NONE; + if (std::strcmp(playState.get(), BaseAnimationBridgeUtils::PLAYSTATE_IDLE) == 0) { + operation = TweenOperation::CANCEL; + } else if (std::strcmp(playState.get(), BaseAnimationBridgeUtils::PLAYSTATE_RUNNING) == 0) { + operation = TweenOperation::PLAY; + } else if (std::strcmp(playState.get(), BaseAnimationBridgeUtils::PLAYSTATE_PAUSED) == 0) { + operation = TweenOperation::PAUSE; + } else if (std::strcmp(playState.get(), BaseAnimationBridgeUtils::PLAYSTATE_FINISHED) == 0) { + operation = TweenOperation::FINISH; + } else { + operation = TweenOperation::NONE; + } + + QjsHandleScope handleScope(ctx); + int32_t nodeId = GetJsInt32Val(ctx, QjsUtils::GetPropertyStr(ctx, value, "__nodeId")); + auto instance = static_cast(JS_GetContextOpaque(ctx)); + int32_t pageId = GetJsInt32Val(ctx, QjsUtils::GetPropertyStr(ctx, value, "__pageId")); + auto page = GetPageById(instance, pageId); + if (page == nullptr) { + LOGE("no page found for nodeId: %{public}d", nodeId); + return JS_NULL; + } + auto task = AceType::MakeRefPtr(operation); + page->PushCommand(AceType::MakeRefPtr(nodeId, task)); + return JS_NULL; +} + +void AnimationBridge::JsCreateAnimation(const RefPtr& page, const std::string& param) +{ + std::vector> animationFrames; + std::unordered_map animationDoubleOptions; + std::unordered_map animationStringOptions; + int32_t iterations = 0; + BaseAnimationBridgeUtils::JsParseAnimationFrames(param, animationFrames); + BaseAnimationBridgeUtils::JsParseAnimationOptions( + param, iterations, animationDoubleOptions, animationStringOptions); + auto tweenOption = TweenOption(); + RefPtr curve; + std::string curveString; + auto iterEasing = animationStringOptions.find(DOM_ANIMATION_EASING); + if (iterEasing != animationStringOptions.end()) { + curveString = iterEasing->second; + } + curve = CreateCurve(curveString); + std::vector transformOrigin = BaseAnimationBridgeUtils::HandleTransformOrigin(animationFrames); + if (transformOrigin.size() == BaseAnimationBridgeUtils::TRANSFORM_ORIGIN_DEFAULT_SIZE) { + tweenOption.SetTransformOrigin(transformOrigin.front(), transformOrigin.back()); + } + auto iterDuration = animationDoubleOptions.find(DOM_ANIMATION_DURATION_API); + if (iterDuration != animationDoubleOptions.end()) { + tweenOption.SetDuration(iterDuration->second); + } + auto iterFill = animationStringOptions.find(DOM_ANIMATION_FILL); + if (iterFill != animationStringOptions.end()) { + tweenOption.SetFillMode(StringToFillMode(iterFill->second)); + } + auto iterDelay = animationDoubleOptions.find(DOM_ANIMATION_DELAY_API); + if (iterDelay != animationDoubleOptions.end()) { + tweenOption.SetDelay(iterDelay->second); + } + tweenOption.SetIteration(iterations); + if (page == nullptr) { + LOGE("JsCreateAnimation failed, Page is null."); + return; + } + auto domDocument = page->GetDomDocument(); + if (domDocument == nullptr) { + LOGE("JsCreateAnimation failed, DomDocument is null."); + return; + } + auto domNode = domDocument->GetDOMNodeById(nodeId_); + if (domNode == nullptr) { + LOGE("JsCreateAnimation failed, DomNode is null."); + return; + } + RefPtr animator = AceType::MakeRefPtr(); + auto tweenComponent = domNode->GetTweenComponent(); + if (!tweenComponent) { + tweenComponent = AceType::MakeRefPtr( + BaseAnimationBridgeUtils::COMPONENT_PREFIX + std::to_string(nodeId_), domNode->GetTag()); + domNode->SetTweenComponent(tweenComponent); + } + LOGD("parse animate parameters for nodeId: %d", nodeId_); + tweenComponent->SetAnimator(animator); + BaseAnimationBridgeUtils::SetTweenComponentParams(curve, animationFrames, tweenComponent, tweenOption); + AddListenerForEventCallback(AceType::WeakClaim(this), animator, ctx_); + domNode->GenerateComponentNode(); + page->PushDirtyNode(nodeId_); +} + +void AnimationBridge::SetPlayStateCallbacksWithListenerId(RefPtr& animator) +{ + if (animator == nullptr) { + LOGE("Set PlayState callbacks failed. animator is null."); + return; + } + WeakPtr bridgeWeak = AceType::WeakClaim(this); + auto instance = static_cast(JS_GetContextOpaque(ctx_)); + animator->RemoveStopListener(finishListenerId_); + finishListenerId_ = animator->AddStopListener([ctx = ctx_, bridgeWeak, instance] { + auto jsTaskExecutor = instance->GetDelegate()->GetAnimationJsTask(); + jsTaskExecutor.PostTask([ctx, bridgeWeak, instance]() mutable { + auto bridge = bridgeWeak.Upgrade(); + if (!bridge) { + return; + } + JS_SetPropertyStr(ctx, bridge->GetJsObject(), "__playState", + JS_NewString(ctx, BaseAnimationBridgeUtils::PLAYSTATE_FINISHED)); + }); + }); + animator->RemoveIdleListener(idleListenerId_); + idleListenerId_ = animator->AddIdleListener([ctx = ctx_, bridgeWeak, instance] { + auto jsTaskExecutor = instance->GetDelegate()->GetAnimationJsTask(); + jsTaskExecutor.PostTask([ctx, bridgeWeak, instance]() mutable { + auto bridge = bridgeWeak.Upgrade(); + if (!bridge) { + return; + } + JS_SetPropertyStr( + ctx, bridge->GetJsObject(), "__playState", JS_NewString(ctx, BaseAnimationBridgeUtils::PLAYSTATE_IDLE)); + }); + }); +} + +void AnimationBridge::SetPlayStateCallbacks(RefPtr& animator) +{ + if (animator == nullptr) { + LOGE("Set PlayState callbacks failed. animator is null."); + return; + } + WeakPtr bridgeWeak = AceType::WeakClaim(this); + auto instance = static_cast(JS_GetContextOpaque(ctx_)); + SetPlayStateCallbacksWithListenerId(animator); + animator->ClearPauseListeners(); + animator->AddPauseListener([ctx = ctx_, bridgeWeak, instance] { + auto jsTaskExecutor = instance->GetDelegate()->GetAnimationJsTask(); + jsTaskExecutor.PostTask([ctx, bridgeWeak, instance]() mutable { + auto bridge = bridgeWeak.Upgrade(); + if (!bridge) { + return; + } + JS_SetPropertyStr(ctx, bridge->GetJsObject(), "__playState", + JS_NewString(ctx, BaseAnimationBridgeUtils::PLAYSTATE_PAUSED)); + }); + }); + animator->ClearStartListeners(); + animator->AddStartListener([ctx = ctx_, bridgeWeak, instance] { + auto jsTaskExecutor = instance->GetDelegate()->GetAnimationJsTask(); + jsTaskExecutor.PostTask([ctx, bridgeWeak, instance]() mutable { + auto bridge = bridgeWeak.Upgrade(); + if (!bridge) { + return; + } + JS_SetPropertyStr(ctx, bridge->GetJsObject(), "__playState", + JS_NewString(ctx, BaseAnimationBridgeUtils::PLAYSTATE_RUNNING)); + }); + }); + animator->ClearResumeListeners(); + animator->AddResumeListener([ctx = ctx_, bridgeWeak, instance] { + auto jsTaskExecutor = instance->GetDelegate()->GetAnimationJsTask(); + jsTaskExecutor.PostTask([ctx, bridgeWeak, instance]() mutable { + auto bridge = bridgeWeak.Upgrade(); + if (!bridge) { + return; + } + JS_SetPropertyStr(ctx, bridge->GetJsObject(), "__playState", + JS_NewString(ctx, BaseAnimationBridgeUtils::PLAYSTATE_RUNNING)); + }); + }); +} + +JSValue AnimationBridgeUtils::JsAnimationPlay(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + if ((!argv) || (argc != 0)) { + LOGE("argc error, argc = %{private}d", argc); + return JS_NULL; + } + + QjsHandleScope handleScope(ctx); + int32_t nodeId = GetJsInt32Val(ctx, QjsUtils::GetPropertyStr(ctx, value, "__nodeId")); + int32_t pageId = GetJsInt32Val(ctx, QjsUtils::GetPropertyStr(ctx, value, "__pageId")); + HandleJsAnimationContext(ctx, pageId, nodeId, TweenOperation::PLAY); + return JS_NULL; +} + +JSValue AnimationBridgeUtils::JsAnimationFinish(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + if ((!argv) || (argc != 0)) { + LOGE("argc error, argc = %{private}d", argc); + return JS_NULL; + } + + QjsHandleScope handleScope(ctx); + int32_t nodeId = GetJsInt32Val(ctx, QjsUtils::GetPropertyStr(ctx, value, "__nodeId")); + int32_t pageId = GetJsInt32Val(ctx, QjsUtils::GetPropertyStr(ctx, value, "__pageId")); + HandleJsAnimationContext(ctx, pageId, nodeId, TweenOperation::FINISH); + return JS_NULL; +} + +JSValue AnimationBridgeUtils::JsAnimationPause(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + if ((!argv) || (argc != 0)) { + LOGE("argc error, argc = %{private}d", argc); + return JS_NULL; + } + + QjsHandleScope handleScope(ctx); + int32_t nodeId = GetJsInt32Val(ctx, QjsUtils::GetPropertyStr(ctx, value, "__nodeId")); + int32_t pageId = GetJsInt32Val(ctx, QjsUtils::GetPropertyStr(ctx, value, "__pageId")); + HandleJsAnimationContext(ctx, pageId, nodeId, TweenOperation::PAUSE); + return JS_NULL; +} + +JSValue AnimationBridgeUtils::JsAnimationCancel(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + if ((!argv) || (argc != 0)) { + LOGE("argc error, argc = %{private}d", argc); + return JS_NULL; + } + + QjsHandleScope handleScope(ctx); + int32_t nodeId = GetJsInt32Val(ctx, QjsUtils::GetPropertyStr(ctx, value, "__nodeId")); + int32_t pageId = GetJsInt32Val(ctx, QjsUtils::GetPropertyStr(ctx, value, "__pageId")); + HandleJsAnimationContext(ctx, pageId, nodeId, TweenOperation::CANCEL); + return JS_NULL; +} + +JSValue AnimationBridgeUtils::JsAnimationReverse(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + if ((!argv) || (argc != 0)) { + LOGE("argc error, argc = %{private}d", argc); + return JS_NULL; + } + + QjsHandleScope handleScope(ctx); + int32_t nodeId = GetJsInt32Val(ctx, QjsUtils::GetPropertyStr(ctx, value, "__nodeId")); + int32_t pageId = GetJsInt32Val(ctx, QjsUtils::GetPropertyStr(ctx, value, "__pageId")); + HandleJsAnimationContext(ctx, pageId, nodeId, TweenOperation::REVERSE); + return JS_NULL; +} + +JSValue AnimationBridgeUtils::CreateAnimationContext(JSContext* ctx, int32_t pageId, NodeId nodeId) +{ + auto animationContext = JS_NewObject(ctx); + JS_SetPropertyStr(ctx, animationContext, "play", JS_NewCFunction(ctx, JsAnimationPlay, "play", 4)); + JS_SetPropertyStr(ctx, animationContext, "finish", JS_NewCFunction(ctx, JsAnimationFinish, "finish", 4)); + JS_SetPropertyStr(ctx, animationContext, "pause", JS_NewCFunction(ctx, JsAnimationPause, "pause", 4)); + JS_SetPropertyStr(ctx, animationContext, "cancel", JS_NewCFunction(ctx, JsAnimationCancel, "cancel", 4)); + JS_SetPropertyStr(ctx, animationContext, "reverse", JS_NewCFunction(ctx, JsAnimationReverse, "reverse", 4)); + JS_SetPropertyStr(ctx, animationContext, "__pageId", JS_NewInt32(ctx, pageId)); + JS_SetPropertyStr(ctx, animationContext, "__nodeId", JS_NewInt32(ctx, nodeId)); + JS_SetPropertyStr( + ctx, animationContext, "__playState", JS_NewString(ctx, BaseAnimationBridgeUtils::PLAYSTATE_IDLE)); + JS_SetPropertyStr(ctx, animationContext, "finished", JS_NewBool(ctx, 0)); + JS_SetPropertyFunctionList(ctx, animationContext, JS_ANIMATION_FUNCS, countof(JS_ANIMATION_FUNCS)); + return animationContext; +} + +AnimationBridgeTaskCreate::AnimationBridgeTaskCreate(const RefPtr& animationBridge, std::string param) + : animationBridge_(animationBridge), param_(std::move(param)) +{} + +void AnimationBridgeTaskCreate::AnimationBridgeTaskFunc(const RefPtr& page, NodeId nodeId) +{ + if (page == nullptr) { + LOGE("the page is nullptr"); + return; + } + page->RemoveAnimationBridge(nodeId); + animationBridge_->JsCreateAnimation(page, param_); + page->AddAnimationBridge(nodeId, animationBridge_); +} + +void AnimationBridgeTaskOperation::AnimationBridgeTaskFunc(const RefPtr& page, NodeId nodeId) +{ + if (page == nullptr) { + LOGE("the page is nullptr"); + return; + } + auto animationBridge = AceType::DynamicCast(page->GetAnimationBridge(nodeId)); + if (!animationBridge) { + LOGE("no animation bridge found for nodeId: %{public}d", nodeId); + return; + } + auto domDocument = page->GetDomDocument(); + if (domDocument == nullptr) { + LOGE("Animation operation failed, DomDocument is null."); + return; + } + auto domNode = domDocument->GetDOMNodeById(nodeId); + if (domNode == nullptr) { + LOGE("Animation operation failed, DomNode is null."); + return; + } + auto tweenComponent = domNode->GetTweenComponent(); + if (tweenComponent) { + tweenComponent->SetCustomTweenOperation(operation_); + } + + RefPtr animator; + if (tweenComponent) { + animator = tweenComponent->GetAnimator(); + } + if (animator) { + animationBridge->SetPlayStateCallbacks(animator); + } + domNode->GenerateComponentNode(); + page->PushDirtyNode(nodeId); +} + +void AnimationBridgeTaskStartTime::AnimationBridgeTaskFunc(const RefPtr& page, NodeId nodeId) +{ + if (page == nullptr) { + LOGE("Get page is error"); + return; + } + auto domDocument = page->GetDomDocument(); + if (domDocument == nullptr) { + LOGE("AnimationBridgeTaskStartTime failed, DomDocument is null."); + return; + } + auto domNode = domDocument->GetDOMNodeById(nodeId); + if (domNode == nullptr) { + LOGE("AnimationBridgeTaskStartTime failed, DomNode is null."); + return; + } + auto tweenComponent = domNode->GetTweenComponent(); + if (tweenComponent) { + auto option = tweenComponent->GetCustomTweenOption(); + option.SetDelay(startTime_); + tweenComponent->SetCustomTweenOption(option); + } +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/js_frontend/engine/quickjs/animation_bridge.h b/frameworks/bridge/js_frontend/engine/quickjs/animation_bridge.h new file mode 100644 index 00000000..243987b4 --- /dev/null +++ b/frameworks/bridge/js_frontend/engine/quickjs/animation_bridge.h @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_QUICKJS_ANIMATION_BRIDGE_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_QUICKJS_ANIMATION_BRIDGE_H + +#include +#include + +#include "frameworks/bridge/common/dom/dom_node.h" +#include "frameworks/bridge/js_frontend/engine/common/base_animation_bridge.h" +#include "frameworks/bridge/js_frontend/engine/quickjs/qjs_utils.h" +#include "frameworks/bridge/js_frontend/frontend_delegate.h" +#include "frameworks/bridge/js_frontend/js_command.h" + +namespace OHOS::Ace::Framework { + +class JsAcePage; + +class AnimationBridgeUtils { +public: + static JSValue CreateAnimationContext(JSContext* ctx, int32_t pageId, NodeId nodeId); + static JSValue JsAnimationPlay(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + static JSValue JsAnimationFinish(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + static JSValue JsAnimationPause(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + static JSValue JsAnimationCancel(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + static JSValue JsAnimationReverse(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + static JSValue JsAnimationPlayStateGet(JSContext* ctx, JSValueConst value); + static JSValue JsAnimationStartTimeGet(JSContext* ctx, JSValueConst value); + static JSValue JsAnimationPendingGet(JSContext* ctx, JSValueConst value); + static JSValue JsAnimationPlayStateSet(JSContext* ctx, JSValueConst value, JSValueConst proto); + static JSValue JsAnimationStartTimeSet(JSContext* ctx, JSValueConst value, JSValueConst startTime); + static JSValue JsAnimationPendingSet(JSContext* ctx, JSValueConst value, JSValueConst pending); +}; + +class AnimationBridge : public BaseAnimationBridge { + DECLARE_ACE_TYPE(AnimationBridge, BaseAnimationBridge) + +public: + AnimationBridge(JSContext* ctx, JSValue animationContext, NodeId nodeId); + ~AnimationBridge() override; + void Uninitialize(); + JSValue GetJsObject() + { + return animationContext_; + } + + void JsCreateAnimation(const RefPtr& page, const std::string& param); + void SetPlayStateCallbacks(RefPtr& animator); + void SetPlayStateCallbacksWithListenerId(RefPtr& animator); + +private: + JSContext* ctx_ = nullptr; + JSValue animationContext_; + NodeId nodeId_ = -1; + IdType finishListenerId_ = 0; + IdType idleListenerId_ = 0; + WeakPtr delegateWeak_; +}; + +class AnimationBridgeTaskCreate : public AnimationBridgeTask { + DECLARE_ACE_TYPE(AnimationBridgeTaskCreate, AnimationBridgeTask) +public: + AnimationBridgeTaskCreate(const RefPtr& animationBridge, std::string param); + ~AnimationBridgeTaskCreate() override = default; + void AnimationBridgeTaskFunc(const RefPtr& page, NodeId nodeId) override; + +private: + RefPtr animationBridge_; + std::string param_; +}; + +class AnimationBridgeTaskOperation : public AnimationBridgeTask { + DECLARE_ACE_TYPE(AnimationBridgeTaskOperation, AnimationBridgeTask) +public: + explicit AnimationBridgeTaskOperation(TweenOperation operation) : operation_(operation) {}; + ~AnimationBridgeTaskOperation() override = default; + void AnimationBridgeTaskFunc(const RefPtr& page, NodeId nodeId) override; + +private: + TweenOperation operation_ = TweenOperation::NONE; +}; + +class AnimationBridgeTaskStartTime : public AnimationBridgeTask { + DECLARE_ACE_TYPE(AnimationBridgeTaskStartTime, AnimationBridgeTask) +public: + explicit AnimationBridgeTaskStartTime(int32_t startTime) : startTime_(startTime) {} + ~AnimationBridgeTaskStartTime() override = default; + void AnimationBridgeTaskFunc(const RefPtr& page, NodeId nodeId) override; + +private: + int32_t startTime_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_QUICKJS_ANIMATION_BRIDGE_H diff --git a/frameworks/bridge/js_frontend/engine/quickjs/badge_bridge.cpp b/frameworks/bridge/js_frontend/engine/quickjs/badge_bridge.cpp new file mode 100644 index 00000000..70232941 --- /dev/null +++ b/frameworks/bridge/js_frontend/engine/quickjs/badge_bridge.cpp @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/js_frontend/engine/quickjs/badge_bridge.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { + +void BadgeBridge::ParseBadgeConfig(JSContext* ctx, JSValue valObject) +{ + // TODO: these codes are duplicate, need to refactor. + JSPropertyEnum* pTab = nullptr; + uint32_t len = 0; + if (!CheckAndGetJsProperty(ctx, valObject, &pTab, &len)) { + return; + } + for (uint32_t i = 0; i < len; i++) { + const char* key = JS_AtomToCString(ctx, pTab[i].atom); + if (key == nullptr) { + JS_FreeAtom(ctx, pTab[i].atom); + LOGW("key is null. Ignoring!"); + continue; + } + JSValue val = JS_GetProperty(ctx, valObject, pTab[i].atom); + if (JS_IsString(val) || JS_IsNumber(val)) { + ScopedString styleVal(ctx, val); + const char* valStr = styleVal.get(); + // static linear map must be sorted by key. + static const LinearMapNode badgeConfigOperators[] = { + { DOM_BADGE_COLOR, + [](const char* valStr, BadgeBridge& badgeBridge) { + badgeBridge.badgeConfig_.badgeColor = { Color::FromString(valStr), true }; + } }, + { DOM_BADGE_CIRCLE_SIZE, + [](const char* valStr, BadgeBridge& badgeBridge) { + badgeBridge.badgeConfig_.badgeSize = { StringToDimension(valStr), true }; + } }, + { DOM_BADGE_TEXT_COLOR, + [](const char* valStr, BadgeBridge& badgeBridge) { + badgeBridge.badgeConfig_.textColor = { Color::FromString(valStr), true }; + } }, + { DOM_BADGE_TEXT_FONT_SIZE, + [](const char* valStr, BadgeBridge& badgeBridge) { + badgeBridge.badgeConfig_.textSize = { StringToDimension(valStr), true }; + } } + }; + auto operatorIter = BinarySearchFindIndex(badgeConfigOperators, ArraySize(badgeConfigOperators), key); + if (operatorIter != -1) { + badgeConfigOperators[operatorIter].value(valStr, *this); + } else { + LOGD("key : %{public}s unsupported. Ignoring!", key); + } + } else { + LOGD("value of unsupported type. Ignoring!"); + } + JS_FreeAtom(ctx, pTab[i].atom); + JS_FreeCString(ctx, key); + JS_FreeValue(ctx, val); + } + js_free(ctx, pTab); +} + +} // namespace OHOS::Ace::Framework \ No newline at end of file diff --git a/frameworks/bridge/js_frontend/engine/quickjs/badge_bridge.h b/frameworks/bridge/js_frontend/engine/quickjs/badge_bridge.h new file mode 100644 index 00000000..305be476 --- /dev/null +++ b/frameworks/bridge/js_frontend/engine/quickjs/badge_bridge.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_QUICKJS_BADGE_BRIDGE_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_QUICKJS_BADGE_BRIDGE_H + +#include "frameworks/bridge/common/dom/dom_badge.h" +#include "frameworks/bridge/js_frontend/engine/quickjs/qjs_utils.h" + +namespace OHOS::Ace::Framework { + +class BadgeBridge : public virtual AceType { + DECLARE_ACE_TYPE(BadgeBridge, AceType) + +public: + void ParseBadgeConfig(JSContext* ctx, JSValueConst valObject); + + const BadgeConfig& GetBadgeConfig() const + { + return badgeConfig_; + } + +private: + BadgeConfig badgeConfig_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_QUICKJS_BADGE_BRIDGE_H diff --git a/frameworks/bridge/js_frontend/engine/quickjs/canvas_bridge.cpp b/frameworks/bridge/js_frontend/engine/quickjs/canvas_bridge.cpp new file mode 100644 index 00000000..5b0ee313 --- /dev/null +++ b/frameworks/bridge/js_frontend/engine/quickjs/canvas_bridge.cpp @@ -0,0 +1,1882 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/js_frontend/engine/quickjs/canvas_bridge.h" + +#include "base/utils/linear_map.h" +#include "frameworks/bridge/common/utils/utils.h" +#include "frameworks/bridge/js_frontend/engine/quickjs/qjs_engine.h" + +namespace OHOS::Ace::Framework { + +namespace { + +constexpr char IMAGE_SRC[] = "src"; +constexpr char IMAGE_WIDTH[] = "width"; +constexpr char IMAGE_HEIGHT[] = "height"; + +template +inline T ConvertStrToEnum(const char* key, const LinearMapNode* map, size_t length, T defaultValue) +{ + int64_t index = BinarySearchFindIndex(map, length, key); + return index != -1 ? map[index].value : defaultValue; +} + +const LinearMapNode BASELINE_TABLE[] = { + { "alphabetic", TextBaseline::ALPHABETIC }, + { "bottom", TextBaseline::BOTTOM }, + { "hanging", TextBaseline::HANGING }, + { "ideographic", TextBaseline::IDEOGRAPHIC }, + { "middle", TextBaseline::MIDDLE }, + { "top", TextBaseline::TOP }, +}; + +const std::set FONT_WEIGHTS = { "normal", "bold", "lighter", "bolder", + "100", "200", "300", "400", "500", "600", "700", "800", "900" }; +const std::set FONT_STYLES = { "italic", "oblique", "normal" }; +const std::set FONT_FAMILIES = { "sans-serif", "serif", "monospace" }; +const std::set QUALITY_TYPE = { "low", "medium", "high" }; // Defaulte value is low. + +inline double GetJsDoubleVal(JSContext* ctx, JSValueConst value) +{ + // use ScopedString to parse double + ScopedString scopedVal(ctx, value); + auto jsonVal = JsonUtil::ParseJsonData(scopedVal.get()); + if (jsonVal && jsonVal->IsNumber()) { + return jsonVal->GetDouble(); + } + return 0.0; +} + +inline std::vector GetJsDashValue(JSContext* ctx, JSValueConst value) +{ + ScopedString scopedString(ctx, value); + std::vector props; + StringUtils::StringSpliter(scopedString.get(), ',', props); + std::vector segments; + + for (const auto& prop : props) { + auto val = StringToDouble(prop); + // if there only exists 0 in props, it means that there is no dash style + if (NearZero(val) && props.size() == 1) { + return segments; + } + segments.emplace_back(val); + } + // if segment size is odd, copy one more to even + if (segments.size() % 2 != 0) { + segments.insert(segments.end(), segments.begin(), segments.end()); + } + return segments; +} + +inline Rect GetJsRectParam(JSContext* ctx, int32_t argc, JSValueConst* argv) +{ + // 4 parameters: rect(x, y, width, height) + if ((!argv) || (argc != 4)) { + LOGE("argc error, argc = %{private}d", argc); + return Rect(); + } + double x = GetJsDoubleVal(ctx, argv[0]); + double y = GetJsDoubleVal(ctx, argv[1]); + double width = GetJsDoubleVal(ctx, argv[2]); + double height = GetJsDoubleVal(ctx, argv[3]); + Rect rect = Rect(x, y, width, height); + return rect; +} + +inline NodeId GetCurrentNodeId(JSContext* ctx, JSValueConst value) +{ + NodeId id = 0; + JSValue nodeId = JS_GetPropertyStr(ctx, value, "__nodeId"); + if (JS_IsInteger(nodeId) && (JS_ToInt32(ctx, &id, nodeId)) < 0) { + id = 0; + } + JS_FreeValue(ctx, nodeId); + return id; +} + +void PushTaskToPage(JSContext* ctx, JSValueConst value, const std::function&)>& task) +{ + // get node id + NodeId id = GetCurrentNodeId(ctx, value); + auto command = Referenced::MakeRefPtr(id, task); + // push command + auto instance = static_cast(JS_GetContextOpaque(ctx)); + ACE_DCHECK(instance); + auto page = instance->GetRunningPage(); + if (!page) { + return; + } + page->PushCommand(command); + if (page->CheckPageCreated()) { + instance->GetDelegate()->TriggerPageUpdate(page->GetPageId()); + } +} + +inline PaintState JsParseTextState(JSContext* ctx, JSValue value) +{ + PaintState state; + JSValue fontStyle = JS_GetPropertyStr(ctx, value, "font"); + JSValue textAlign = JS_GetPropertyStr(ctx, value, "textAlign"); + JSValue textBaseline = JS_GetPropertyStr(ctx, value, "textBaseline"); + + // parse font styles + ScopedString alignStr(ctx, textAlign); + ScopedString baselineStr(ctx, textBaseline); + state.SetTextAlign(ConvertStrToTextAlign(alignStr.get())); + TextStyle style; + style.SetTextBaseline( + ConvertStrToEnum(baselineStr.get(), BASELINE_TABLE, ArraySize(BASELINE_TABLE), TextBaseline::ALPHABETIC)); + ScopedString font(ctx, fontStyle); + std::vector fontProps; + StringUtils::StringSpliter(font.get(), ' ', fontProps); + for (const auto& fontProp : fontProps) { + if (FONT_WEIGHTS.find(fontProp) != FONT_WEIGHTS.end()) { + style.SetFontWeight(ConvertStrToFontWeight(fontProp)); + } else if (FONT_STYLES.find(fontProp) != FONT_STYLES.end()) { + style.SetFontStyle(ConvertStrToFontStyle(fontProp)); + } else if (FONT_FAMILIES.find(fontProp) != FONT_FAMILIES.end()) { + style.SetFontFamilies(ConvertStrToFontFamilies(fontProp)); + } else if (fontProp.find("px") != std::string::npos) { + std::string fontSize = fontProp.substr(0, fontProp.size() - 2); + style.SetFontSize(Dimension(StringToDouble(fontProp))); + } else { + LOGW("parse text error"); + } + } + state.SetTextStyle(style); + JS_FreeValue(ctx, fontStyle); + JS_FreeValue(ctx, textAlign); + JS_FreeValue(ctx, textBaseline); + + return state; +} + +} // namespace + +int32_t CanvasBridge::gradientCount_ = 0; +int32_t CanvasBridge::patternCount_ = 0; +int32_t CanvasBridge::path2dCount_ = 0; +std::unordered_map CanvasBridge::pattern_; +std::unordered_map CanvasBridge::gradientColors_; +std::unordered_map> CanvasBridge::path2Ds_; + +const JSCFunctionListEntry JS_ANIMATION_FUNCS[] = { + JS_CGETSET_DEF("fillStyle", CanvasBridge::JsFillStyleGetter, CanvasBridge::JsFillStyleSetter), + JS_CGETSET_DEF("strokeStyle", CanvasBridge::JsStrokeStyleGetter, CanvasBridge::JsStrokeStyleSetter), + JS_CGETSET_DEF("lineCap", CanvasBridge::JsLineCapGetter, CanvasBridge::JsLineCapSetter), + JS_CGETSET_DEF("lineJoin", CanvasBridge::JsLineJoinGetter, CanvasBridge::JsLineJoinSetter), + JS_CGETSET_DEF("miterLimit", CanvasBridge::JsMiterLimitGetter, CanvasBridge::JsMiterLimitSetter), + JS_CGETSET_DEF("lineWidth", CanvasBridge::JsLineWidthGetter, CanvasBridge::JsLineWidthSetter), + JS_CGETSET_DEF("textAlign", CanvasBridge::JsTextAlignGetter, CanvasBridge::JsTextAlignSetter), + JS_CGETSET_DEF("textBaseline", CanvasBridge::JsTextBaselineGetter, CanvasBridge::JsTextBaselineSetter), + JS_CGETSET_DEF("font", CanvasBridge::JsFontGetter, CanvasBridge::JsFontSetter), + JS_CGETSET_DEF("globalAlpha", CanvasBridge::JsAlphaGetter, CanvasBridge::JsAlphaSetter), + JS_CGETSET_DEF("globalCompositeOperation", + CanvasBridge::JsCompositeOperationGetter, CanvasBridge::JsCompositeOperationSetter), + JS_CGETSET_DEF("lineDashOffset", CanvasBridge::JsLineDashOffsetGetter, CanvasBridge::JsLineDashOffsetSetter), + JS_CGETSET_DEF("shadowBlur", CanvasBridge::JsShadowBlurGetter, CanvasBridge::JsShadowBlurSetter), + JS_CGETSET_DEF("shadowColor", CanvasBridge::JsShadowColorGetter, CanvasBridge::JsShadowColorSetter), + JS_CGETSET_DEF("shadowOffsetX", CanvasBridge::JsShadowOffsetXGetter, CanvasBridge::JsShadowOffsetXSetter), + JS_CGETSET_DEF("shadowOffsetY", CanvasBridge::JsShadowOffsetYGetter, CanvasBridge::JsShadowOffsetYSetter), + JS_CGETSET_DEF("imageSmoothingEnabled", + CanvasBridge::JsSmoothingEnabledGetter, CanvasBridge::JsSmoothingEnabledSetter), + JS_CGETSET_DEF("imageSmoothingQuality", + CanvasBridge::JsSmoothingQualityGetter, CanvasBridge::JsSmoothingQualitySetter), +}; + +void CanvasBridge::HandleJsContext(JSContext* ctx, NodeId id, const std::string& args) +{ + LOGD("CanvasBridge::HandleJsContext"); + renderContext_ = JS_NewObject(ctx); + const std::vector> contextTable = { + { "__nodeId", JS_NewInt32(ctx, id) }, + { "createLinearGradient", JS_NewCFunction(ctx, JsCreateLinearGradient, "createLinearGradient", 4) }, + { "createRadialGradient", JS_NewCFunction(ctx, JsCreateRadialGradient, "createRadialGradient", 6) }, + { "fillRect", JS_NewCFunction(ctx, JsFillRect, "fillRect", 4) }, + { "strokeRect", JS_NewCFunction(ctx, JsStrokeRect, "strokeRect", 4) }, + { "clearRect", JS_NewCFunction(ctx, JsClearRect, "clearRect", 4) }, + { "fillText", JS_NewCFunction(ctx, JsFillText, "fillText", 3) }, + { "strokeText", JS_NewCFunction(ctx, JsStrokeText, "strokeText", 3) }, + { "measureText", JS_NewCFunction(ctx, JsMeasureText, "measureText", 1) }, + { "moveTo", JS_NewCFunction(ctx, JsMoveTo, "moveTo", 2) }, + { "lineTo", JS_NewCFunction(ctx, JsLineTo, "lineTo", 2) }, + { "bezierCurveTo", JS_NewCFunction(ctx, JsBezierCurveTo, "bezierCurveTo", 6) }, + { "quadraticCurveTo", JS_NewCFunction(ctx, JsQuadraticCurveTo, "quadraticCurveTo", 4) }, + { "arcTo", JS_NewCFunction(ctx, JsArcTo, "arcTo", 5) }, + { "arc", JS_NewCFunction(ctx, JsArc, "arc", 6) }, + { "ellipse", JS_NewCFunction(ctx, JsEllipse, "ellipse", 4) }, + { "fill", JS_NewCFunction(ctx, JsFill, "fill", 0) }, + { "stroke", JS_NewCFunction(ctx, JsStroke, "stroke", 0) }, + { "clip", JS_NewCFunction(ctx, JsClip, "clip", 0) }, + { "rect", JS_NewCFunction(ctx, JsRect, "rect", 4) }, + { "beginPath", JS_NewCFunction(ctx, JsBeginPath, "beginPath", 0) }, + { "closePath", JS_NewCFunction(ctx, JsClosePath, "closePath", 0) }, + { "restore", JS_NewCFunction(ctx, JsRestore, "restore", 0) }, + { "save", JS_NewCFunction(ctx, JsSave, "save", 0) }, + { "rotate", JS_NewCFunction(ctx, JsRotate, "rotate", 1) }, + { "scale", JS_NewCFunction(ctx, JsScale, "scale", 2) }, + { "setTransform", JS_NewCFunction(ctx, JsSetTransform, "setTransform", 6) }, + { "transform", JS_NewCFunction(ctx, JsTransform, "transform", 6) }, + { "translate", JS_NewCFunction(ctx, JsTranslate, "translate", 2) }, + { "getLineDash", JS_NewCFunction(ctx, JsGetLineDash, "getLineDash", 0) }, + { "setLineDash", JS_NewCFunction(ctx, JsSetLineDash, "setLineDash", 1) }, + { "drawImage", JS_NewCFunction(ctx, JsDrawImage, "drawImage", 9) }, + { "createPath2D", JS_NewCFunction(ctx, JsCreatePath2D, "createPath2D", 0) }, + { "createPattern", JS_NewCFunction(ctx, JsCreatePattern, "createPattern", 2) }, + { "createImageData", JS_NewCFunction(ctx, JsCreateImageData, "createImageData", 2) }, + { "putImageData", JS_NewCFunction(ctx, JsPutImageData, "putImageData", 7) }, + { "getImageData", JS_NewCFunction(ctx, JsGetImageData, "getImageData", 4) }, + }; + + for (const auto& iter : contextTable) { + JS_SetPropertyStr(ctx, renderContext_, iter.first, iter.second); + } + // getter and setter + JS_SetPropertyFunctionList(ctx, renderContext_, JS_ANIMATION_FUNCS, countof(JS_ANIMATION_FUNCS)); + JsSetAntiAlias(ctx, id, args); +} + +void CanvasBridge::HandleToDataURL(JSContext* ctx, NodeId id, const std::string& args) +{ + auto instance = static_cast(JS_GetContextOpaque(ctx)); + auto page = instance->GetRunningPage(); + if (!page) { + LOGE("ToDataURL failed, page is null."); + return; + } + std::string dataUrl; + auto task = [id, page, args, &dataUrl]() { + auto canvas = AceType::DynamicCast(page->GetDomDocument()->GetDOMNodeById(id)); + if (!canvas) { + LOGE("ToDataURL failed, DOMCanvas is null."); + return; + } + auto paintChild = AceType::DynamicCast(canvas->GetSpecializedComponent()); + auto pool = paintChild->GetTaskPool(); + if (!pool) { + LOGE("ToDataURL failed, TaskPool is null."); + return; + } + dataUrl = pool->ToDataURL(args); + }; + instance->GetDelegate()->PostSyncTaskToPage(task); + dataURL_ = JS_NewString(ctx, dataUrl.c_str()); +} + +void CanvasBridge::JsSetAntiAlias(JSContext* ctx, NodeId id, const std::string& args) +{ + bool isEnabled = args.find("\"antialias\":true") != std::string::npos; + auto task = [isEnabled](const RefPtr& pool) { pool->SetAntiAlias(isEnabled); }; + auto command = Referenced::MakeRefPtr(id, task); + auto instance = static_cast(JS_GetContextOpaque(ctx)); + if (instance == nullptr) { + return; + } + auto page = instance->GetRunningPage(); + if (!page) { + return; + } + page->PushCommand(command); + if (page->CheckPageCreated()) { + instance->GetDelegate()->TriggerPageUpdate(page->GetPageId()); + } +} + +JSValue CanvasBridge::JsCreateLinearGradient(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + LOGD("CanvasBridge::JsCreateLinearGradient"); + // 4 parameters: createLinearGradient(x0, y0, x1, y1) + if ((!argv) || (argc != 4)) { + LOGE("argc error, argc = %{private}d", argc); + return JS_NULL; + } + JSValue gradient = JS_NewObject(ctx); + JS_SetPropertyStr(ctx, gradient, "__type", JS_NewString(ctx, "gradient")); + JS_SetPropertyStr(ctx, gradient, "__id", JS_NewInt32(ctx, gradientCount_)); // global linear gradients + JS_SetPropertyStr(ctx, gradient, "addColorStop", JS_NewCFunction(ctx, JsAddColorStop, "addColorStop", 2)); + Offset beginOffset = Offset(GetJsDoubleVal(ctx, argv[0]), GetJsDoubleVal(ctx, argv[1])); + Offset endOffset = Offset(GetJsDoubleVal(ctx, argv[2]), GetJsDoubleVal(ctx, argv[3])); + gradientColors_[gradientCount_].SetType(GradientType::LINEAR); + gradientColors_[gradientCount_].SetBeginOffset(beginOffset); + gradientColors_[gradientCount_].SetEndOffset(endOffset); + ++gradientCount_; + return gradient; +} + +JSValue CanvasBridge::JsCreateRadialGradient(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + LOGD("CanvasBridge::JsCreateRadialGradient"); + // 6 parameters: createRadialGradient(x0, y0, r0, x1, y1, r1) + if ((!argv) || (argc != 6)) { + LOGE("argc error, argc = %{private}d", argc); + return JS_NULL; + } + JSValue gradient = JS_NewObject(ctx); + JS_SetPropertyStr(ctx, gradient, "__type", JS_NewString(ctx, "gradient")); + JS_SetPropertyStr(ctx, gradient, "__id", JS_NewInt32(ctx, gradientCount_)); // global linear gradients + JS_SetPropertyStr(ctx, gradient, "addColorStop", JS_NewCFunction(ctx, JsAddColorStop, "addColorStop", 2)); + Offset innerCenter = Offset(GetJsDoubleVal(ctx, argv[0]), GetJsDoubleVal(ctx, argv[1])); + Offset outerCenter = Offset(GetJsDoubleVal(ctx, argv[3]), GetJsDoubleVal(ctx, argv[4])); + double innerRadius = GetJsDoubleVal(ctx, argv[2]); + double outerRadius = GetJsDoubleVal(ctx, argv[5]); + gradientColors_[gradientCount_].SetType(GradientType::RADIAL); + gradientColors_[gradientCount_].SetBeginOffset(innerCenter); + gradientColors_[gradientCount_].SetEndOffset(outerCenter); + gradientColors_[gradientCount_].SetInnerRadius(innerRadius); + gradientColors_[gradientCount_].SetOuterRadius(outerRadius); + ++gradientCount_; + return gradient; +} + +JSValue CanvasBridge::JsAddColorStop(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + // 2 parameters: addColorStop(offset, color) + if ((!argv) || (argc != 2)) { + LOGE("argc error, argc = %{private}d", argc); + return JS_NULL; + } + + GradientColor color; + auto jsColor = JS_ToCString(ctx, argv[1]); + color.SetColor(Color::FromString(jsColor)); + color.SetDimension(GetJsDoubleVal(ctx, argv[0])); + int32_t id = 0; + JSValue nodeId = JS_GetPropertyStr(ctx, value, "__id"); + if (JS_IsInteger(nodeId) && JS_ToInt32(ctx, &id, nodeId) >= 0) { + gradientColors_[id].AddColor(color); + } + JS_FreeValue(ctx, nodeId); + JS_FreeCString(ctx, jsColor); + return JS_NULL; +} + +Gradient CanvasBridge::GetGradient(JSContext* ctx, JSValueConst value) +{ + int32_t id = 0; + JSValue nodeId = JS_GetPropertyStr(ctx, value, "__id"); + if (JS_IsInteger(nodeId) && (JS_ToInt32(ctx, &id, nodeId)) < 0) { + JS_FreeValue(ctx, nodeId); + return Gradient(); + } + JS_FreeValue(ctx, nodeId); + return gradientColors_[id]; +} + +JSValue CanvasBridge::JsHandleRect( + JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv, FunctionCode functionCode) +{ + LOGD("CanvasBridge::JsHandleRect function code: %{public}d", functionCode); + // 4 parameters: rect(x, y, width, height) + if ((!argv) || (argc != 4)) { + LOGE("argc error, argc = %{private}d", argc); + return JS_NULL; + } + Rect rect = GetJsRectParam(ctx, argc, argv); + auto task = [rect, functionCode](const RefPtr& pool) { + if (functionCode == FunctionCode::FILL_RECT) { + pool->FillRect(rect); + } else if (functionCode == FunctionCode::STROKE_RECT) { + pool->StrokeRect(rect); + } else if (functionCode == FunctionCode::CLEAR_RECT) { + pool->ClearRect(rect); + } else { + LOGE("not supported"); + } + }; + PushTaskToPage(ctx, value, std::move(task)); + return JS_NULL; +} + +JSValue CanvasBridge::JsFillRect(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + return JsHandleRect(ctx, value, argc, argv, FunctionCode::FILL_RECT); +} + +JSValue CanvasBridge::JsStrokeRect(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + return JsHandleRect(ctx, value, argc, argv, FunctionCode::STROKE_RECT); +} + +JSValue CanvasBridge::JsClearRect(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + return JsHandleRect(ctx, value, argc, argv, FunctionCode::CLEAR_RECT); +} + +JSValue CanvasBridge::JsHandleText( + JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv, FunctionCode functionCode) +{ + LOGD("CanvasBridge::JsHandleText function code: %{public}d", functionCode); + // 3 parameters: fillText(text, x, y, [maxWidth]) + if ((!argv) || (argc != 3)) { + LOGE("argc error, argc = %{private}d", argc); + return JS_NULL; + } + ScopedString arg(ctx, argv[0]); + if (!arg.get()) { + return JS_NULL; + } + std::string text = arg.get(); + double x = GetJsDoubleVal(ctx, argv[1]); + double y = GetJsDoubleVal(ctx, argv[2]); + auto task = [text, x, y, functionCode](const RefPtr& pool) { + if (functionCode == FunctionCode::FILL_TEXT) { + pool->FillText(text, Offset(x, y)); + } else if (functionCode == FunctionCode::STROKE_TEXT) { + pool->StrokeText(text, Offset(x, y)); + } else { + LOGE("not supported"); + } + }; + PushTaskToPage(ctx, value, task); + return JS_NULL; +} + +JSValue CanvasBridge::JsFillText(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + return JsHandleText(ctx, value, argc, argv, FunctionCode::FILL_TEXT); +} + +JSValue CanvasBridge::JsStrokeText(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + return JsHandleText(ctx, value, argc, argv, FunctionCode::STROKE_TEXT); +} + +JSValue CanvasBridge::JsMeasureText(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + // this func should return TextMetrics, including the width of the text + LOGD("Js Measure Text"); + // 1 parameter: measureText(text) + if ((!argv) || (argc != 1)) { + LOGE("argc error, argc = %{private}d", argc); + return JS_NULL; + } + ScopedString arg(ctx, argv[0]); + if (!arg.get()) { + LOGW("no value for text"); + return JS_NULL; + } + std::string text = arg.get(); + auto textState = JsParseTextState(ctx, value); + NodeId id = GetCurrentNodeId(ctx, value); + auto instance = static_cast(JS_GetContextOpaque(ctx)); + auto page = instance->GetRunningPage(); + if (!page) { + return JS_NULL; + } + double width = 0.0; + auto task = [&text, &textState, id, page, &width]() { + auto canvas = AceType::DynamicCast(page->GetDomDocument()->GetDOMNodeById(id)); + if (!canvas) { + return; + } + auto paintChild = AceType::DynamicCast(canvas->GetSpecializedComponent()); + auto canvasTask = paintChild->GetTaskPool(); + if (!canvasTask) { + return; + } + width = canvasTask->MeasureText(text, textState); + }; + instance->GetDelegate()->PostSyncTaskToPage(task); + JSValue textMetrics = JS_NewObject(ctx); + JS_SetPropertyStr(ctx, textMetrics, "width", JS_NewFloat64(ctx, width)); + return textMetrics; +} + +JSValue CanvasBridge::JsBeginPath(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + LOGD("Js Begin path"); + // 0 parameter: beginPath() + if ((!argv) || (argc != 0)) { + LOGE("argc error, argc = %{private}d", argc); + return JS_NULL; + } + auto task = [](const RefPtr& pool) { pool->BeginPath(); }; + PushTaskToPage(ctx, value, task); + return JS_NULL; +} + +JSValue CanvasBridge::JsClosePath(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + LOGD("js close path"); + // 0 parameter: closePath() + if ((!argv) || (argc != 0)) { + LOGE("argc error, argc = %{private}d", argc); + return JS_NULL; + } + auto task = [](const RefPtr& pool) { pool->ClosePath(); }; + PushTaskToPage(ctx, value, task); + return JS_NULL; +} + +JSValue CanvasBridge::JsMoveTo(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + LOGD("CanvasBridge::JsMoveTo"); + // 2 parameters: moveTo(x, y) + if ((!argv) || (argc != 2)) { + LOGE("argc error, argc = %{private}d", argc); + return JS_NULL; + } + double x = GetJsDoubleVal(ctx, argv[0]); + double y = GetJsDoubleVal(ctx, argv[1]); + auto task = [x, y](const RefPtr& pool) { pool->MoveTo(x, y); }; + PushTaskToPage(ctx, value, task); + return JS_NULL; +} + +JSValue CanvasBridge::JsLineTo(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + LOGD("CanvasBridge::JsLineTo"); + // 2 parameters: lineTo(x, y) + if ((!argv) || (argc != 2)) { + LOGE("argc error, argc = %{private}d", argc); + return JS_NULL; + } + double x = GetJsDoubleVal(ctx, argv[0]); + double y = GetJsDoubleVal(ctx, argv[1]); + auto task = [x, y](const RefPtr& pool) { pool->LineTo(x, y); }; + PushTaskToPage(ctx, value, task); + return JS_NULL; +} + +JSValue CanvasBridge::JsBezierCurveTo(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + LOGD("JsBezierCurveTo"); + // 6 parameters: bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) + if ((!argv) || (argc != 6)) { + LOGE("argc error, argc = %{private}d", argc); + return JS_NULL; + } + BezierCurveParam param; + param.cp1x = GetJsDoubleVal(ctx, argv[0]); + param.cp1y = GetJsDoubleVal(ctx, argv[1]); + param.cp2x = GetJsDoubleVal(ctx, argv[2]); + param.cp2y = GetJsDoubleVal(ctx, argv[3]); + param.x = GetJsDoubleVal(ctx, argv[4]); + param.y = GetJsDoubleVal(ctx, argv[5]); + auto task = [param](const RefPtr& pool) { pool->BezierCurveTo(param); }; + PushTaskToPage(ctx, value, task); + return JS_NULL; +} + +JSValue CanvasBridge::JsQuadraticCurveTo(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + LOGD("JsQuadraticCurveTo"); + // 4 parameters: quadraticCurveTo(cpx, cpy, x, y) + if ((!argv) || (argc != 4)) { + LOGE("argc error, argc = %{private}d", argc); + return JS_NULL; + } + QuadraticCurveParam param; + param.cpx = GetJsDoubleVal(ctx, argv[0]); + param.cpy = GetJsDoubleVal(ctx, argv[1]); + param.x = GetJsDoubleVal(ctx, argv[2]); + param.y = GetJsDoubleVal(ctx, argv[3]); + auto task = [param](const RefPtr& pool) { pool->QuadraticCurveTo(param); }; + PushTaskToPage(ctx, value, task); + return JS_NULL; +} + +JSValue CanvasBridge::JsArc(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + LOGD("JsArc"); + // 5 or 6 parameters: arc(x, y, radius, startAngle, endAngle, anticlockwise?) + if ((!argv) || (argc < 5 || argc > 6)) { + LOGE("argc error, argc = %{private}d", argc); + return JS_NULL; + } + ArcParam param; + param.x = GetJsDoubleVal(ctx, argv[0]); + param.y = GetJsDoubleVal(ctx, argv[1]); + param.radius = GetJsDoubleVal(ctx, argv[2]); + param.startAngle = GetJsDoubleVal(ctx, argv[3]); + param.endAngle = GetJsDoubleVal(ctx, argv[4]); + if (argc == 6) { + ScopedString arg(ctx, argv[5]); + if (!arg.get()) { + LOGW("no value"); + return JS_NULL; + } + std::unique_ptr argPtr = JsonUtil::ParseJsonString(arg.get()); + if (argPtr && argPtr->IsBool()) { + param.anticlockwise = argPtr->GetBool(); + } + } + auto task = [param](const RefPtr& pool) { pool->Arc(param); }; + PushTaskToPage(ctx, value, task); + return JS_NULL; +} + +JSValue CanvasBridge::JsArcTo(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + LOGD("JsArcTo"); + // 5 parameters: arcTo(x1, y1, x2, y2, radius) + if ((!argv) || (argc != 5)) { + LOGE("argc error, argc = %{private}d", argc); + return JS_NULL; + } + ArcToParam param; + param.x1 = GetJsDoubleVal(ctx, argv[0]); + param.y1 = GetJsDoubleVal(ctx, argv[1]); + param.x2 = GetJsDoubleVal(ctx, argv[2]); + param.y2 = GetJsDoubleVal(ctx, argv[3]); + param.radius = GetJsDoubleVal(ctx, argv[4]); + auto task = [param](const RefPtr& pool) { pool->ArcTo(param); }; + PushTaskToPage(ctx, value, task); + return JS_NULL; +} + +JSValue CanvasBridge::JsEllipse(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + LOGD("JsEllipse"); + // 7 or 8 parameters: ellipse(x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise?) + if ((!argv) || (argc < 7 || argc > 8)) { + LOGE("argc error, argc = %{private}d", argc); + return JS_NULL; + } + EllipseParam param; + param.x = GetJsDoubleVal(ctx, argv[0]); + param.y = GetJsDoubleVal(ctx, argv[1]); + param.radiusX = GetJsDoubleVal(ctx, argv[2]); + param.radiusY = GetJsDoubleVal(ctx, argv[3]); + param.rotation = GetJsDoubleVal(ctx, argv[4]); + param.startAngle = GetJsDoubleVal(ctx, argv[5]); + param.endAngle = GetJsDoubleVal(ctx, argv[6]); + if (argc == 8) { + int32_t anti = static_cast(GetJsDoubleVal(ctx, argv[7])); + param.anticlockwise = (anti == 1); + } + auto task = [param](const RefPtr& pool) { pool->Ellipse(param); }; + PushTaskToPage(ctx, value, task); + return JS_NULL; +} + +JSValue CanvasBridge::JsRect(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + LOGD("JsRect"); + Rect rect = GetJsRectParam(ctx, argc, argv); + auto task = [rect](const RefPtr& pool) { pool->AddRect(rect); }; + PushTaskToPage(ctx, value, std::move(task)); + return JS_NULL; +} + +JSValue CanvasBridge::JsFill(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + LOGD("JsFill"); + auto task = [](const RefPtr& pool) { pool->Fill(); }; + PushTaskToPage(ctx, value, task); + return JS_NULL; +} + +JSValue CanvasBridge::JsStroke(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + LOGD("JsStroke"); + // 0 or 1 parameter: ctx.stroke() / ctx.stroke(path) + if (argv != nullptr && argc == 1) { + JSValue typeVal = JS_GetPropertyStr(ctx, argv[0], "__type"); + ScopedString type(ctx, typeVal); + if (std::strcmp(type.get(), "path2d") != 0) { + LOGE("Stroke Path2D fialed, target is not path."); + return JS_NULL; + } + auto path = GetPath2D(ctx, argv[0]); + if (path == nullptr) { + LOGE("Stroke Path2D fialed, target path is null."); + return JS_NULL; + } + auto task = [path](const RefPtr& pool) { pool->Stroke(path); }; + PushTaskToPage(ctx, value, task); + return JS_NULL; + } + auto task = [](const RefPtr& pool) { pool->Stroke(); }; + PushTaskToPage(ctx, value, task); + return JS_NULL; +} + +JSValue CanvasBridge::JsClip(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + LOGD("JsClip"); + auto task = [](const RefPtr& pool) { pool->Clip(); }; + PushTaskToPage(ctx, value, task); + return JS_NULL; +} + +JSValue CanvasBridge::JsRestore(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + LOGD("CanvasBridge::JsRestore"); + // 0 parameter: restore() + if ((!argv) || (argc != 0)) { + LOGE("argc error, argc = %{private}d", argc); + return JS_NULL; + } + auto task = [](const RefPtr& pool) { pool->Restore(); }; + PushTaskToPage(ctx, value, task); + return JS_NULL; +} + +JSValue CanvasBridge::JsSave(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + // 0 parameter: save() + if ((!argv) || (argc != 0)) { + LOGE("argc error, argc = %{private}d", argc); + return JS_NULL; + } + auto task = [](const RefPtr& pool) { pool->Save(); }; + PushTaskToPage(ctx, value, task); + return JS_NULL; +} + +JSValue CanvasBridge::JsRotate(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + LOGD("CanvasBridge::JsRotate"); + // 1 parameter: rotate(angle) + if ((!argv) || (argc != 1)) { + LOGE("argc error, argc = %{private}d", argc); + return JS_NULL; + } + double angle = GetJsDoubleVal(ctx, argv[0]); + auto task = [angle](const RefPtr& pool) { pool->Rotate(angle); }; + PushTaskToPage(ctx, value, task); + return JS_NULL; +} + +JSValue CanvasBridge::JsScale(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + LOGD("CanvasBridge::JsScale"); + // 2 parameters: scale(x, y) + if ((!argv) || (argc != 2)) { + LOGE("argc error, argc = %{private}d", argc); + return JS_NULL; + } + double x = GetJsDoubleVal(ctx, argv[0]); + double y = GetJsDoubleVal(ctx, argv[1]); + auto task = [x, y](const RefPtr& pool) { pool->Scale(x, y); }; + PushTaskToPage(ctx, value, task); + return JS_NULL; +} + +JSValue CanvasBridge::JsSetTransform(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + LOGD("CanvasBridge::JsSetTransform"); + // 6 parameters: setTransform(a, b, c, d, e, f) + if ((!argv) || (argc != 6)) { + LOGE("argc error, argc = %{private}d", argc); + return JS_NULL; + } + TransformParam param; + param.scaleX = GetJsDoubleVal(ctx, argv[0]); + param.skewX = GetJsDoubleVal(ctx, argv[1]); + param.skewY = GetJsDoubleVal(ctx, argv[2]); + param.scaleY = GetJsDoubleVal(ctx, argv[3]); + param.translateX = GetJsDoubleVal(ctx, argv[4]); + param.translateY = GetJsDoubleVal(ctx, argv[5]); + auto task = [param](const RefPtr& pool) { pool->SetTransform(param); }; + PushTaskToPage(ctx, value, task); + return JS_NULL; +} + +JSValue CanvasBridge::JsTransform(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + LOGD("CanvasBridge::JsTransform"); + // 6 parameters: transform(a, b, c, d, e, f) + if ((!argv) || (argc != 6)) { + LOGE("argc error, argc = %{private}d", argc); + return JS_NULL; + } + TransformParam param; + param.scaleX = GetJsDoubleVal(ctx, argv[0]); + param.skewX = GetJsDoubleVal(ctx, argv[1]); + param.skewY = GetJsDoubleVal(ctx, argv[2]); + param.scaleY = GetJsDoubleVal(ctx, argv[3]); + param.translateX = GetJsDoubleVal(ctx, argv[4]); + param.translateY = GetJsDoubleVal(ctx, argv[5]); + auto task = [param](const RefPtr& pool) { pool->Transform(param); }; + PushTaskToPage(ctx, value, task); + return JS_NULL; +} + +JSValue CanvasBridge::JsTranslate(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + LOGD("CanvasBridge::JsTranslate"); + // 2 parameters: translate(x, y) + if ((!argv) || (argc != 2)) { + LOGE("argc error, argc = %{private}d", argc); + return JS_NULL; + } + double x = GetJsDoubleVal(ctx, argv[0]); + double y = GetJsDoubleVal(ctx, argv[1]); + auto task = [x, y](const RefPtr& pool) { pool->Translate(x, y); }; + PushTaskToPage(ctx, value, task); + return JS_NULL; +} + +JSValue CanvasBridge::JsSetLineDash(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + LOGD("CanvasBridge::JsSetLineDash"); + // 1 parameter: setLineDash(segments) + if ((!argv) || (argc != 1)) { + LOGE("argc error, argc = %{private}d", argc); + return JS_NULL; + } + ScopedString dash(ctx, argv[0]); + JS_SetPropertyStr(ctx, value, "lineDash", JS_NewString(ctx, dash.get())); + auto segments = GetJsDashValue(ctx, argv[0]); + auto task = [segments](const RefPtr& pool) { pool->UpdateLineDash(segments); }; + PushTaskToPage(ctx, value, task); + return JS_NULL; +} + +JSValue CanvasBridge::JsGetLineDash(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + // 0 parameter: getLineDash() + if ((!argv) || (argc != 0)) { + LOGE("argc error, argc = %{private}d", argc); + return JS_NULL; + } + auto val = JS_GetPropertyStr(ctx, value, "lineDash"); + return val; +} + +void CanvasBridge::ParseDomImage(JSContext* ctx, JSValueConst value, double& width, double& height, std::string& src) +{ + auto jsAttr = JS_GetPropertyStr(ctx, value, "attr"); + auto jsSrc = JS_GetPropertyStr(ctx, jsAttr, IMAGE_SRC); + auto imgSrc = JS_ToCString(ctx, jsSrc); + src = imgSrc; + + auto jsStyle = JS_GetPropertyStr(ctx, value, "style"); + auto jsWidth = JS_GetPropertyStr(ctx, jsStyle, IMAGE_WIDTH); + auto jsHeight = JS_GetPropertyStr(ctx, jsStyle, IMAGE_HEIGHT); + auto cWidth = JS_ToCString(ctx, jsWidth); + auto cHeight = JS_ToCString(ctx, jsHeight); + std::string strWidth = cWidth; + std::string strHeight = cHeight; + width = StringToDouble(strWidth); + height = StringToDouble(strHeight); + + if (NearZero(width)) { + width = StringToDouble(strWidth.substr(0, strWidth.size() - 2)); // remove px units + } + if (NearZero(height)) { + height = StringToDouble(strHeight.substr(0, strHeight.size() - 2)); + } + + JS_FreeValue(ctx, jsAttr); + JS_FreeValue(ctx, jsSrc); + JS_FreeValue(ctx, jsStyle); + JS_FreeValue(ctx, jsWidth); + JS_FreeValue(ctx, jsHeight); + JS_FreeCString(ctx, cWidth); + JS_FreeCString(ctx, cHeight); + JS_FreeCString(ctx, imgSrc); +} + +JSValue CanvasBridge::JsDrawImage(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + if (!argv || !JS_IsObject(argv[0])) { + return JS_NULL; + } + + CanvasImage image; + double width = 0.0; + double height = 0.0; + auto src = JS_GetPropertyStr(ctx, argv[0], IMAGE_SRC); + + if (!JS_ToBool(ctx, src)) { + ParseDomImage(ctx, argv[0], width, height, image.src); + } else { + auto imgSrc = JS_ToCString(ctx, src); + image.src = imgSrc; + auto jsWidth = JS_GetPropertyStr(ctx, argv[0], IMAGE_WIDTH); + auto jsHeight = JS_GetPropertyStr(ctx, argv[0], IMAGE_HEIGHT); + JS_ToFloat64(ctx, &width, jsWidth); + JS_ToFloat64(ctx, &height, jsHeight); + JS_FreeValue(ctx, jsWidth); + JS_FreeValue(ctx, jsHeight); + JS_FreeCString(ctx, imgSrc); + } + switch (argc) { + // 3 parameters: drawImage(image, dx, dy) + case 3: + image.flag = 0; + image.dx = GetJsDoubleVal(ctx, argv[1]); + image.dy = GetJsDoubleVal(ctx, argv[2]); + break; + // 5 parameters: drawImage(image, dx, dy, dWidth, dHeight) + case 5: + image.flag = 1; + image.dx = GetJsDoubleVal(ctx, argv[1]); + image.dy = GetJsDoubleVal(ctx, argv[2]); + image.dWidth = GetJsDoubleVal(ctx, argv[3]); + image.dHeight = GetJsDoubleVal(ctx, argv[4]); + break; + // 9 parameters: drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight) + case 9: + image.flag = 2; + image.sx = GetJsDoubleVal(ctx, argv[1]); + image.sy = GetJsDoubleVal(ctx, argv[2]); + image.sWidth = GetJsDoubleVal(ctx, argv[3]); + image.sHeight = GetJsDoubleVal(ctx, argv[4]); + image.dx = GetJsDoubleVal(ctx, argv[5]); + image.dy = GetJsDoubleVal(ctx, argv[6]); + image.dWidth = GetJsDoubleVal(ctx, argv[7]); + image.dHeight = GetJsDoubleVal(ctx, argv[8]); + break; + default: + break; + } + auto task = [image, width, height](const RefPtr& pool) { pool->DrawImage(image, width, height); }; + PushTaskToPage(ctx, value, task); + + JS_FreeValue(ctx, src); + return JS_NULL; +} + +JSValue CanvasBridge::JsCreatePath2D(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + JSValue path2D = JS_NewObject(ctx); + JS_SetPropertyStr(ctx, path2D, "__type", JS_NewString(ctx, "path2d")); + JS_SetPropertyStr(ctx, path2D, "__id", JS_NewInt32(ctx, path2dCount_)); + JS_SetPropertyStr(ctx, path2D, "addPath", JS_NewCFunction(ctx, JsPath2DAddPath, "addPath", 1)); + JS_SetPropertyStr(ctx, path2D, "setTransform", JS_NewCFunction(ctx, JsPath2DSetTransform, "setTransform", 6)); + JS_SetPropertyStr(ctx, path2D, "moveTo", JS_NewCFunction(ctx, JsPath2DMoveTo, "moveTo", 2)); + JS_SetPropertyStr(ctx, path2D, "lineTo", JS_NewCFunction(ctx, JsPath2DLineTo, "addColorStop", 2)); + JS_SetPropertyStr(ctx, path2D, "arc", JS_NewCFunction(ctx, JsPath2DArc, "arc", 6)); + JS_SetPropertyStr(ctx, path2D, "arcTo", JS_NewCFunction(ctx, JsPath2DArcTo, "arcTo", 5)); + JS_SetPropertyStr(ctx, path2D, "quadraticCurveTo", + JS_NewCFunction(ctx, JsPath2DQuadraticCurveTo, "quadraticCurveTo", 4)); + JS_SetPropertyStr(ctx, path2D, "bezierCurveTo", JS_NewCFunction(ctx, JsPath2DBezierCurveTo, "bezierCurveTo", 6)); + JS_SetPropertyStr(ctx, path2D, "ellipse", JS_NewCFunction(ctx, JsPath2DEllipse, "ellipse", 8)); + JS_SetPropertyStr(ctx, path2D, "rect", JS_NewCFunction(ctx, JsPath2DRect, "rect", 4)); + JS_SetPropertyStr(ctx, path2D, "closePath", JS_NewCFunction(ctx, JsPath2DClosePath, "closePath", 0)); + path2Ds_[path2dCount_] = JsMakePath2D(ctx, value, argc, argv); + ++path2dCount_; + return path2D; +} + +JSValue CanvasBridge::JsPath2DAddPath(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + // 1 parameter: addPath(path) + if ((!argv) || (argc != 1)) { + LOGE("AddPath to Path2D fialed, invalid args."); + return JS_NULL; + } + int32_t id = 0; + JSValue nodeId = JS_GetPropertyStr(ctx, value, "__id"); + if (JS_IsInteger(nodeId) && JS_ToInt32(ctx, &id, nodeId) < 0) { + LOGE("AddPath to Path2D fialed, unknown holder path."); + return JS_NULL; + } + auto holderPath = path2Ds_[id]; + if (holderPath == nullptr) { + LOGE("AddPath to Path2D fialed, holderPath is null."); + return JS_NULL; + } + JSValue typeVal = JS_GetPropertyStr(ctx, argv[0], "__type"); + ScopedString type(ctx, typeVal); + if (std::strcmp(type.get(), "path2d") != 0) { + LOGE("AddPath to Path2D fialed, to be added is not path."); + return JS_NULL; + } + auto toBeAdd = GetPath2D(ctx, argv[0]); + if (toBeAdd == nullptr) { + LOGE("AddPath to Path2D fialed, to be added path is null."); + return JS_NULL; + } + holderPath->AddPath(toBeAdd); + return JS_NULL; +} + +JSValue CanvasBridge::JsPath2DSetTransform(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + // 6 parameters: setTransform(a, b, c, d, e, f) + if ((!argv) || (argc != 6)) { + LOGE("Call Path2D SetTransform fialed, invalid agrs."); + return JS_NULL; + } + int32_t id = 0; + JSValue nodeId = JS_GetPropertyStr(ctx, value, "__id"); + if (JS_IsInteger(nodeId) && JS_ToInt32(ctx, &id, nodeId) < 0) { + LOGE("Call Path2D SetTransform fialed, unknown holder path."); + return JS_NULL; + } + auto holderPath = path2Ds_[id]; + if (holderPath == nullptr) { + LOGE("Call Path2D SetTransform fialed, holderPath is null."); + return JS_NULL; + } + holderPath->SetTransform(GetJsDoubleVal(ctx, argv[0]), GetJsDoubleVal(ctx, argv[1]), + GetJsDoubleVal(ctx, argv[2]), GetJsDoubleVal(ctx, argv[3]), + GetJsDoubleVal(ctx, argv[4]), GetJsDoubleVal(ctx, argv[5])); + return JS_NULL; +} + +JSValue CanvasBridge::JsPath2DMoveTo(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + // 2 parameters: moveTo(x, y) + if ((!argv) || (argc != 2)) { + LOGE("Call Path2D Arc MoveTo, invalid agrs."); + return JS_NULL; + } + int32_t id = 0; + JSValue nodeId = JS_GetPropertyStr(ctx, value, "__id"); + if (JS_IsInteger(nodeId) && JS_ToInt32(ctx, &id, nodeId) < 0) { + LOGE("Call Path2D MoveTo fialed, unknown holder path."); + return JS_NULL; + } + auto holderPath = path2Ds_[id]; + if (holderPath == nullptr) { + LOGE("Call Path2D MoveTo fialed, holderPath is null."); + return JS_NULL; + } + holderPath->MoveTo(GetJsDoubleVal(ctx, argv[0]), GetJsDoubleVal(ctx, argv[1])); + return JS_NULL; +} + +JSValue CanvasBridge::JsPath2DLineTo(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + // 2 parameters: lineTo(x, y) + if ((!argv) || (argc != 2)) { + LOGE("Call Path2D LineTo fialed, invalid agrs."); + return JS_NULL; + } + int32_t id = 0; + JSValue nodeId = JS_GetPropertyStr(ctx, value, "__id"); + if (JS_IsInteger(nodeId) && JS_ToInt32(ctx, &id, nodeId) < 0) { + LOGE("Call Path2D LineTo fialed, unknown holder path."); + return JS_NULL; + } + auto holderPath = path2Ds_[id]; + if (holderPath == nullptr) { + LOGE("Call Path2D LineTo fialed, holderPath is null."); + return JS_NULL; + } + holderPath->LineTo(GetJsDoubleVal(ctx, argv[0]), GetJsDoubleVal(ctx, argv[1])); + return JS_NULL; +} + +JSValue CanvasBridge::JsPath2DArc(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + // 5 or 6 parameters: arc(x, y, radius, startAngle, endAngle, anticlockwise?) + if ((!argv) || (argc < 5) || (argc > 6)) { + LOGE("Call Path2D Arc fialed, invalid agrs."); + return JS_NULL; + } + int32_t id = 0; + JSValue nodeId = JS_GetPropertyStr(ctx, value, "__id"); + if (JS_IsInteger(nodeId) && JS_ToInt32(ctx, &id, nodeId) < 0) { + LOGE("Call Path2D Arc fialed, unknown holder path."); + return JS_NULL; + } + auto holderPath = path2Ds_[id]; + if (holderPath == nullptr) { + LOGE("Call Path2D Arc fialed, holderPath is null."); + return JS_NULL; + } + bool anticlockwise = false; + if (argc == 6) { + int32_t anti = static_cast(GetJsDoubleVal(ctx, argv[7])); + anticlockwise = (anti == 1); + } + holderPath->Arc(GetJsDoubleVal(ctx, argv[0]), GetJsDoubleVal(ctx, argv[1]), + GetJsDoubleVal(ctx, argv[2]), GetJsDoubleVal(ctx, argv[3]), + GetJsDoubleVal(ctx, argv[4]), anticlockwise); + return JS_NULL; +} + +JSValue CanvasBridge::JsPath2DArcTo(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + // 5 parameters: arcTo(x1, y1, x2, y2, radius) + if ((!argv) || (argc != 5)) { + LOGE("Call Path2D ArcTo fialed, invalid agrs."); + return JS_NULL; + } + int32_t id = 0; + JSValue nodeId = JS_GetPropertyStr(ctx, value, "__id"); + if (JS_IsInteger(nodeId) && JS_ToInt32(ctx, &id, nodeId) < 0) { + LOGE("Call Path2D ArcTo fialed, unknown holder path."); + return JS_NULL; + } + auto holderPath = path2Ds_[id]; + if (holderPath == nullptr) { + LOGE("Call Path2D ArcTo fialed, holderPath is null."); + return JS_NULL; + } + holderPath->ArcTo(GetJsDoubleVal(ctx, argv[0]), GetJsDoubleVal(ctx, argv[1]), GetJsDoubleVal(ctx, argv[2]), + GetJsDoubleVal(ctx, argv[3]), GetJsDoubleVal(ctx, argv[4])); + return JS_NULL; +} + +JSValue CanvasBridge::JsPath2DQuadraticCurveTo(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + // 4 parameters: quadraticCurveTo(cpx, cpy, x, y) + if ((!argv) || (argc != 4)) { + LOGE("Call Path2D QuadraticCurveTo fialed, invalid agrs."); + return JS_NULL; + } + int32_t id = 0; + JSValue nodeId = JS_GetPropertyStr(ctx, value, "__id"); + if (JS_IsInteger(nodeId) && JS_ToInt32(ctx, &id, nodeId) < 0) { + LOGE("Call Path2D QuadraticCurveTo fialed, unknown holder path."); + return JS_NULL; + } + auto holderPath = path2Ds_[id]; + if (holderPath == nullptr) { + LOGE("Call Path2D QuadraticCurveTo fialed, holderPath is null."); + return JS_NULL; + } + holderPath->QuadraticCurveTo(GetJsDoubleVal(ctx, argv[0]), GetJsDoubleVal(ctx, argv[1]), + GetJsDoubleVal(ctx, argv[2]), GetJsDoubleVal(ctx, argv[3])); + return JS_NULL; +} + +JSValue CanvasBridge::JsPath2DBezierCurveTo(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + // 6 parameters: bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) + if ((!argv) || (argc != 6)) { + LOGE("Call Path2D BezierCurveTo fialed, invalid agrs."); + return JS_NULL; + } + int32_t id = 0; + JSValue nodeId = JS_GetPropertyStr(ctx, value, "__id"); + if (JS_IsInteger(nodeId) && JS_ToInt32(ctx, &id, nodeId) < 0) { + LOGE("Call Path2D BezierCurveTo fialed, unknown holder path."); + return JS_NULL; + } + auto holderPath = path2Ds_[id]; + if (holderPath == nullptr) { + LOGE("Call Path2D BezierCurveTo fialed, holderPath is null."); + return JS_NULL; + } + holderPath->BezierCurveTo(GetJsDoubleVal(ctx, argv[0]), GetJsDoubleVal(ctx, argv[1]), + GetJsDoubleVal(ctx, argv[2]), GetJsDoubleVal(ctx, argv[3]), + GetJsDoubleVal(ctx, argv[4]), GetJsDoubleVal(ctx, argv[5])); + return JS_NULL; +} + +JSValue CanvasBridge::JsPath2DEllipse(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + // 7 or 8 parameters: ellipse(x, y, radiusX, radiusY, rotation, startAngle, endAngle, anticlockwise?) + if ((!argv) || (argc < 7) || (argc > 8)) { + LOGE("Call Path2D Ellipse fialed, invalid agrs."); + return JS_NULL; + } + int32_t id = 0; + JSValue nodeId = JS_GetPropertyStr(ctx, value, "__id"); + if (JS_IsInteger(nodeId) && JS_ToInt32(ctx, &id, nodeId) < 0) { + LOGE("Call Path2D Ellipse fialed, unknown holder path."); + return JS_NULL; + } + auto holderPath = path2Ds_[id]; + if (holderPath == nullptr) { + LOGE("Call Path2D Ellipse fialed, holderPath is null."); + return JS_NULL; + } + bool anticlockwise = false; + if (argc == 8) { + int32_t anti = static_cast(GetJsDoubleVal(ctx, argv[7])); + anticlockwise = (anti == 1); + } + holderPath->Ellipse(GetJsDoubleVal(ctx, argv[0]), GetJsDoubleVal(ctx, argv[1]), + GetJsDoubleVal(ctx, argv[2]), GetJsDoubleVal(ctx, argv[3]), + GetJsDoubleVal(ctx, argv[4]), GetJsDoubleVal(ctx, argv[5]), + GetJsDoubleVal(ctx, argv[6]), anticlockwise); + return JS_NULL; +} + +JSValue CanvasBridge::JsPath2DRect(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + // 4 parameters: rect(x, y, width, height) + if ((!argv) || (argc != 4)) { + LOGE("Call Path2D Rect fialed, invalid agrs."); + return JS_NULL; + } + int32_t id = 0; + JSValue nodeId = JS_GetPropertyStr(ctx, value, "__id"); + if (JS_IsInteger(nodeId) && JS_ToInt32(ctx, &id, nodeId) < 0) { + LOGE("Call Path2D Rect fialed, unknown holder path."); + return JS_NULL; + } + auto holderPath = path2Ds_[id]; + if (holderPath == nullptr) { + LOGE("Call Path2D Rect fialed, holderPath is null."); + return JS_NULL; + } + holderPath->Rect(GetJsDoubleVal(ctx, argv[0]), GetJsDoubleVal(ctx, argv[1]), + GetJsDoubleVal(ctx, argv[2]), GetJsDoubleVal(ctx, argv[3])); + return JS_NULL; +} + +JSValue CanvasBridge::JsPath2DClosePath(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + int32_t id = 0; + JSValue nodeId = JS_GetPropertyStr(ctx, value, "__id"); + if (JS_IsInteger(nodeId) && JS_ToInt32(ctx, &id, nodeId) < 0) { + LOGE("Call Path2D ClosePath fialed, unknown holder path."); + return JS_NULL; + } + auto holderPath = path2Ds_[id]; + if (holderPath == nullptr) { + LOGE("Call Path2D ClosePath fialed, holderPath is null."); + return JS_NULL; + } + holderPath->ClosePath(); + return JS_NULL; +} + +RefPtr CanvasBridge::JsMakePath2D(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + if (argv != nullptr && argc == 1) { + if (JS_IsString(argv[0])) { + // Example: ctx.createPath2D("M250 150 L150 350 L350 350 Z") + return AceType::MakeRefPtr(JS_ToCString(ctx, argv[0])); + } else { + JSValue typeVal = JS_GetPropertyStr(ctx, argv[0], "__type"); + ScopedString type(ctx, typeVal); + if (std::strcmp(type.get(), "path2d") == 0) { + // Example: ctx.createPath2D(path1) + return AceType::MakeRefPtr(GetPath2D(ctx, argv[0])); + } + } + } + // Example: ctx.createPath2D() + return AceType::MakeRefPtr(); +} + +RefPtr CanvasBridge::GetPath2D(JSContext* ctx, JSValueConst value) +{ + int32_t id = 0; + JSValue nodeId = JS_GetPropertyStr(ctx, value, "__id"); + if (JS_IsInteger(nodeId) && (JS_ToInt32(ctx, &id, nodeId)) < 0) { + return nullptr; + } + JS_FreeValue(ctx, nodeId); + return path2Ds_[id]; +} + +JSValue CanvasBridge::JsCreatePattern(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + LOGD("CanvasBridge::JsCreatePattern"); + // 2 parameters: createPattern(image, repetition) + if ((!argv) || (argc != 2)) { + LOGE("argc error, argc = %{private}d", argc); + return JS_NULL; + } + + JSValue pattern = JS_NewObject(ctx); + JS_SetPropertyStr(ctx, pattern, "__id", JS_NewFloat64(ctx, patternCount_)); + JS_SetPropertyStr(ctx, pattern, "__type", JS_NewString(ctx, "pattern")); + + if (!JS_IsObject(argv[0])) { + return JS_NULL; + } + double width = 0.0; + double height = 0.0; + std::string imageSrc; + auto jsSrc = JS_GetPropertyStr(ctx, argv[0], IMAGE_SRC); + if (!JS_ToBool(ctx, jsSrc)) { + ParseDomImage(ctx, argv[0], width, height, imageSrc); + } else { + auto jsWidth = JS_GetPropertyStr(ctx, argv[0], IMAGE_WIDTH); + auto jsHeight = JS_GetPropertyStr(ctx, argv[0], IMAGE_HEIGHT); + auto cImageSrc = JS_ToCString(ctx, jsSrc); + imageSrc = cImageSrc; + JS_ToFloat64(ctx, &width, jsWidth); + JS_ToFloat64(ctx, &height, jsHeight); + JS_FreeValue(ctx, jsWidth); + JS_FreeValue(ctx, jsHeight); + JS_FreeCString(ctx, cImageSrc); + } + auto repeat = JS_ToCString(ctx, argv[1]); + pattern_[patternCount_].SetImgSrc(imageSrc); + pattern_[patternCount_].SetImageWidth(width); + pattern_[patternCount_].SetImageHeight(height); + pattern_[patternCount_].SetRepetition(repeat); + ++patternCount_; + + JS_FreeValue(ctx, jsSrc); + JS_FreeCString(ctx, repeat); + return pattern; +} + +Pattern CanvasBridge::GetPattern(JSContext* ctx, JSValueConst value) +{ + int32_t id = 0; + JSValue nodeId = JS_GetPropertyStr(ctx, value, "__id"); + if (JS_IsInteger(nodeId) && (JS_ToInt32(ctx, &id, nodeId)) < 0) { + return Pattern(); + } + JS_FreeValue(ctx, nodeId); + return pattern_[id]; +} + +JSValue CanvasBridge::JsCreateImageData(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + if (!argv) { + return JS_NULL; + } + + // 1 or 2 parameters: createImageData(imagedata) / createImageData(width, height) + if (argc != 1 && argc != 2) { + return JS_NULL; + } + + JSValue imageData = JS_NewObject(ctx); + int32_t width = 0; + int32_t height = 0; + + if (argc == 2) { + JS_ToInt32(ctx, &width, argv[0]); + JS_ToInt32(ctx, &height, argv[1]); + } + + if (argc == 1 && JS_IsObject(argv[0])) { + auto jsWidth = JS_GetPropertyStr(ctx, argv[0], "width"); + auto jsHeight = JS_GetPropertyStr(ctx, argv[0], "height"); + JS_ToInt32(ctx, &width, jsWidth); + JS_ToInt32(ctx, &height, jsHeight); + JS_FreeValue(ctx, jsWidth); + JS_FreeValue(ctx, jsHeight); + } + + JSValue colorArray = JS_NewArray(ctx); + uint32_t count = 0; + for (auto i = 0; i < width; i++) { + for (auto j = 0; j < height; j++) { + JS_SetPropertyUint32(ctx, colorArray, count, JS_NewInt32(ctx, 255)); + JS_SetPropertyUint32(ctx, colorArray, count + 1, JS_NewInt32(ctx, 255)); + JS_SetPropertyUint32(ctx, colorArray, count + 2, JS_NewInt32(ctx, 255)); + JS_SetPropertyUint32(ctx, colorArray, count + 3, JS_NewInt32(ctx, 255)); + count += 4; + } + } + + JS_SetPropertyStr(ctx, imageData, "width", JS_NewInt32(ctx, width)); + JS_SetPropertyStr(ctx, imageData, "height", JS_NewInt32(ctx, height)); + JS_SetPropertyStr(ctx, imageData, "data", colorArray); + return imageData; +} + +JSValue CanvasBridge::JsPutImageData(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + if (!argv) { + return JS_NULL; + } + + // 3 or 7 parameters: putImageData(data, dx, dy) / putImageData(data, dx, dy, dirtyX, dirtyY, dirtyW, dirtyH) + if (argc != 3 && argc != 7 && !JS_IsObject(argv[0])) { + return JS_NULL; + } + + int32_t width = 0; + int32_t height = 0; + auto jsWidth = JS_GetPropertyStr(ctx, argv[0], "width"); + auto jsHeight = JS_GetPropertyStr(ctx, argv[0], "height"); + JS_ToInt32(ctx, &width, jsWidth); + JS_ToInt32(ctx, &height, jsHeight); + ImageData imageData; + std::vector array; + ParseImageData(ctx, argv, argc, array, imageData); + + int64_t num = 0; + for (int32_t i = 0; i < height; ++i) { + for (int32_t j = 0; j < width; ++j) { + if ((i >= imageData.dirtyY) && (i - imageData.dirtyY < imageData.dirtyHeight) && (j >= imageData.dirtyX) && + (j - imageData.dirtyX < imageData.dirtyWidth)) { + int32_t flag = j + width * i; + if (array.size() > static_cast(4 * flag + 3)) { + auto red = StringUtils::StringToInt(array[4 * flag]); + auto green = StringUtils::StringToInt(array[4 * flag + 1]); + auto blue = StringUtils::StringToInt(array[4 * flag + 2]); + auto alpha = StringUtils::StringToInt(array[4 * flag + 3]); + if (num < imageData.dirtyWidth * imageData.dirtyHeight) { + imageData.data.emplace_back(Color::FromARGB(alpha, red, green, blue)); + } + num++; + } + } + } + } + + auto task = [imageData](const RefPtr& pool) { pool->PutImageData(imageData); }; + PushTaskToPage(ctx, value, task); + + JS_FreeValue(ctx, jsWidth); + JS_FreeValue(ctx, jsHeight); + return JS_NULL; +} + +void CanvasBridge::ParseImageData( + JSContext* ctx, JSValueConst* argv, int32_t argc, std::vector& array, ImageData& imageData) +{ + int32_t width = 0; + int32_t height = 0; + auto jsWidth = JS_GetPropertyStr(ctx, argv[0], "width"); + auto jsHeight = JS_GetPropertyStr(ctx, argv[0], "height"); + auto jsData = JS_GetPropertyStr(ctx, argv[0], "data"); + JS_ToInt32(ctx, &width, jsWidth); + JS_ToInt32(ctx, &height, jsHeight); + ScopedString scopedString(ctx, jsData); + StringUtils::StringSpliter(scopedString.get(), ',', array); + + JS_ToInt32(ctx, &imageData.x, argv[1]); + JS_ToInt32(ctx, &imageData.y, argv[2]); + imageData.dirtyWidth = width; + imageData.dirtyHeight = height; + + if (argc == 7) { + JS_ToInt32(ctx, &imageData.dirtyX, argv[3]); + JS_ToInt32(ctx, &imageData.dirtyY, argv[4]); + JS_ToInt32(ctx, &imageData.dirtyWidth, argv[5]); + JS_ToInt32(ctx, &imageData.dirtyHeight, argv[6]); + } + + imageData.dirtyWidth = imageData.dirtyX < 0 ? std::min(imageData.dirtyX + imageData.dirtyWidth, width) + : std::min(width - imageData.dirtyX, imageData.dirtyWidth); + imageData.dirtyHeight = imageData.dirtyY < 0 ? std::min(imageData.dirtyY + imageData.dirtyHeight, height) + : std::min(height - imageData.dirtyY, imageData.dirtyHeight); + + JS_FreeValue(ctx, jsWidth); + JS_FreeValue(ctx, jsHeight); + JS_FreeValue(ctx, jsData); +} + +JSValue CanvasBridge::JsGetImageData(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + // 4 parameters: getImageData(sx, sy, sw, sh) + if (!argv || (argc != 4)) { + return JS_NULL; + } + Rect rect = GetJsRectParam(ctx, argc, argv); + NodeId id = GetCurrentNodeId(ctx, value); + auto instance = static_cast(JS_GetContextOpaque(ctx)); + auto page = instance->GetRunningPage(); + if (!page) { + return JS_NULL; + } + std::unique_ptr data; + auto task = [id, page, &rect, &data]() { + auto canvas = AceType::DynamicCast(page->GetDomDocument()->GetDOMNodeById(id)); + if (!canvas) { + return; + } + auto paintChild = AceType::DynamicCast(canvas->GetSpecializedComponent()); + auto canvasTask = paintChild->GetTaskPool(); + if (!canvasTask) { + return; + } + data = canvasTask->GetImageData(rect.Left(), rect.Top(), rect.Width(), rect.Height()); + }; + instance->GetDelegate()->PostSyncTaskToPage(task); + + JSValue imageData = JS_NewObject(ctx); + JS_SetPropertyStr(ctx, imageData, "width", JS_NewInt32(ctx, data->dirtyWidth)); + JS_SetPropertyStr(ctx, imageData, "height", JS_NewInt32(ctx, data->dirtyHeight)); + JSValue colorArray = JS_NewArray(ctx); + uint32_t count = 0; + // travel data + for (auto i = 0; i < data->dirtyHeight; i++) { + for (auto j = 0; j < data->dirtyWidth; j++) { + // a pixel includes 4 data: red/green/blue/alpha + int32_t idx = i * data->dirtyWidth + j; + auto pixel = data->data[idx]; + JS_SetPropertyUint32(ctx, colorArray, count, JS_NewInt32(ctx, pixel.GetRed())); + JS_SetPropertyUint32(ctx, colorArray, count + 1, JS_NewInt32(ctx, pixel.GetGreen())); + JS_SetPropertyUint32(ctx, colorArray, count + 2, JS_NewInt32(ctx, pixel.GetBlue())); + JS_SetPropertyUint32(ctx, colorArray, count + 3, JS_NewInt32(ctx, pixel.GetAlpha())); + count += 4; + } + } + JS_SetPropertyStr(ctx, imageData, "data", colorArray); + return imageData; +} + +JSValue CanvasBridge::JsFillStyleGetter(JSContext* ctx, JSValueConst value) +{ + return JS_GetPropertyStr(ctx, value, "__fillStyle"); +} + +JSValue CanvasBridge::JsHandleStyleSetter( + JSContext* ctx, JSValueConst value, JSValueConst proto, FunctionCode functionCode) +{ + if (JS_IsString(proto)) { + auto colorStr = JS_ToCString(ctx, proto); + auto color = Color::FromString(colorStr); + auto task = [color, functionCode](const RefPtr& pool) { + if (functionCode == FunctionCode::STROKE_STYLE_SETTER) { + pool->UpdateStrokeColor(color); + } else if (functionCode == FunctionCode::FILL_STYLE_SETTER) { + pool->UpdateFillColor(color); + } else { + LOGW("unsupported function for update color."); + } + }; + PushTaskToPage(ctx, value, task); + JS_FreeCString(ctx, colorStr); + } else { + JSValue typeVal = JS_GetPropertyStr(ctx, proto, "__type"); + ScopedString type(ctx, typeVal); + if (std::strcmp(type.get(), "gradient") == 0) { + auto gradient = GetGradient(ctx, proto); + auto task = [gradient, functionCode](const RefPtr& pool) { + if (functionCode == FunctionCode::STROKE_STYLE_SETTER) { + pool->UpdateStrokeGradient(gradient); + } else if (functionCode == FunctionCode::FILL_STYLE_SETTER) { + pool->UpdateFillGradient(gradient); + } else { + LOGW("unsupported function for update gradient."); + } + }; + PushTaskToPage(ctx, value, task); + } else if (std::strcmp(type.get(), "pattern") == 0) { + auto pattern = GetPattern(ctx, proto); + auto task = [pattern, functionCode](const RefPtr& pool) { + if (functionCode == FunctionCode::STROKE_STYLE_SETTER) { + pool->UpdateStrokePattern(pattern); + } else if (functionCode == FunctionCode::FILL_STYLE_SETTER) { + pool->UpdateFillPattern(pattern); + } else { + LOGW("No such type for update pattern."); + } + }; + PushTaskToPage(ctx, value, task); + } else { + LOGW("unsupported function for stroke style."); + } + } + + if (functionCode == FunctionCode::STROKE_STYLE_SETTER) { + JS_SetPropertyStr(ctx, value, "__strokeStyle", JS_DupValue(ctx, proto)); + } else if (functionCode == FunctionCode::FILL_STYLE_SETTER) { + JS_SetPropertyStr(ctx, value, "__fillStyle", JS_DupValue(ctx, proto)); + } else { + LOGW("No such type for set property."); + } + return JS_NULL; +} + +JSValue CanvasBridge::JsFillStyleSetter(JSContext* ctx, JSValueConst value, JSValueConst proto) +{ + return JsHandleStyleSetter(ctx, value, proto, FunctionCode::FILL_STYLE_SETTER); +} + +JSValue CanvasBridge::JsStrokeStyleGetter(JSContext* ctx, JSValueConst value) +{ + return JS_GetPropertyStr(ctx, value, "__strokeStyle"); +} + +JSValue CanvasBridge::JsStrokeStyleSetter(JSContext* ctx, JSValueConst value, JSValueConst proto) +{ + return JsHandleStyleSetter(ctx, value, proto, FunctionCode::STROKE_STYLE_SETTER); +} + +JSValue CanvasBridge::JsLineCapGetter(JSContext* ctx, JSValueConst value) +{ + return JS_GetPropertyStr(ctx, value, "__lineCap"); +} + +JSValue CanvasBridge::JsLineCapSetter(JSContext* ctx, JSValueConst value, JSValueConst proto) +{ + ScopedString capStr(ctx, proto); + static const LinearMapNode lineCapTable[] = { + { "butt", LineCapStyle::BUTT }, + { "round", LineCapStyle::ROUND }, + { "square", LineCapStyle::SQUARE }, + }; + auto lineCap = ConvertStrToEnum(capStr.get(), lineCapTable, ArraySize(lineCapTable), LineCapStyle::BUTT); + auto task = [lineCap](const RefPtr& pool) { pool->UpdateLineCap(lineCap); }; + PushTaskToPage(ctx, value, task); + JS_SetPropertyStr(ctx, value, "__lineCap", JS_DupValue(ctx, proto)); + return JS_NULL; +} + +JSValue CanvasBridge::JsLineJoinGetter(JSContext* ctx, JSValueConst value) +{ + return JS_GetPropertyStr(ctx, value, "__lineJoin"); +} + +JSValue CanvasBridge::JsLineJoinSetter(JSContext* ctx, JSValueConst value, JSValueConst proto) +{ + ScopedString joinStr(ctx, proto); + static const LinearMapNode lineJoinTable[3] = { + { "bevel", LineJoinStyle::BEVEL }, + { "miter", LineJoinStyle::MITER }, + { "round", LineJoinStyle::ROUND }, + }; + auto lineJoin = ConvertStrToEnum(joinStr.get(), lineJoinTable, ArraySize(lineJoinTable), LineJoinStyle::MITER); + auto task = [lineJoin](const RefPtr& pool) { pool->UpdateLineJoin(lineJoin); }; + PushTaskToPage(ctx, value, task); + JS_SetPropertyStr(ctx, value, "__lineJoin", JS_DupValue(ctx, proto)); + return JS_NULL; +} + +JSValue CanvasBridge::JsMiterLimitGetter(JSContext* ctx, JSValueConst value) +{ + return JS_GetPropertyStr(ctx, value, "__miterLimit"); +} + +JSValue CanvasBridge::JsMiterLimitSetter(JSContext* ctx, JSValueConst value, JSValueConst proto) +{ + double limit = GetJsDoubleVal(ctx, proto); + auto task = [limit](const RefPtr& pool) { pool->UpdateMiterLimit(limit); }; + PushTaskToPage(ctx, value, task); + JS_SetPropertyStr(ctx, value, "__miterLimit", JS_DupValue(ctx, proto)); + return JS_NULL; +} + +JSValue CanvasBridge::JsLineWidthGetter(JSContext* ctx, JSValueConst value) +{ + return JS_GetPropertyStr(ctx, value, "__lineWidth"); +} + +JSValue CanvasBridge::JsLineWidthSetter(JSContext* ctx, JSValueConst value, JSValueConst proto) +{ + double lineWidth = GetJsDoubleVal(ctx, proto); + auto task = [lineWidth](const RefPtr& pool) { pool->UpdateLineWidth(lineWidth); }; + PushTaskToPage(ctx, value, task); + JS_SetPropertyStr(ctx, value, "__lineWidth", JS_DupValue(ctx, proto)); + return JS_NULL; +} + +JSValue CanvasBridge::JsTextAlignGetter(JSContext* ctx, JSValueConst value) +{ + return JS_GetPropertyStr(ctx, value, "__textAlign"); +} + +JSValue CanvasBridge::JsTextAlignSetter(JSContext* ctx, JSValueConst value, JSValueConst proto) +{ + ScopedString alignStr(ctx, proto); + auto align = ConvertStrToTextAlign(alignStr.get()); + auto task = [align](const RefPtr& pool) { pool->UpdateTextAlign(align); }; + PushTaskToPage(ctx, value, task); + JS_SetPropertyStr(ctx, value, "__textAlign", JS_DupValue(ctx, proto)); + return JS_NULL; +} + +JSValue CanvasBridge::JsTextBaselineGetter(JSContext* ctx, JSValueConst value) +{ + return JS_GetPropertyStr(ctx, value, "__textBaseline"); +} + +JSValue CanvasBridge::JsTextBaselineSetter(JSContext* ctx, JSValueConst value, JSValueConst proto) +{ + ScopedString baselineStr(ctx, proto); + auto baseline = + ConvertStrToEnum(baselineStr.get(), BASELINE_TABLE, ArraySize(BASELINE_TABLE), TextBaseline::ALPHABETIC); + auto task = [baseline](const RefPtr& pool) { pool->UpdateTextBaseline(baseline); }; + PushTaskToPage(ctx, value, task); + JS_SetPropertyStr(ctx, value, "__textBaseline", JS_DupValue(ctx, proto)); + return JS_NULL; +} + +JSValue CanvasBridge::JsFontGetter(JSContext* ctx, JSValueConst value) +{ + return JS_GetPropertyStr(ctx, value, "__font"); +} + +JSValue CanvasBridge::JsFontSetter(JSContext* ctx, JSValueConst value, JSValueConst proto) +{ + ScopedString fontStr(ctx, proto); + std::vector fontProps; + StringUtils::StringSpliter(fontStr.get(), ' ', fontProps); + bool updateFontStyle = false; + for (const auto& fontProp : fontProps) { + if (FONT_WEIGHTS.find(fontProp) != FONT_WEIGHTS.end()) { + auto weight = ConvertStrToFontWeight(fontProp); + auto task = [weight](const RefPtr& pool) { pool->UpdateFontWeight(weight); }; + PushTaskToPage(ctx, value, task); + } else if (FONT_STYLES.find(fontProp) != FONT_STYLES.end()) { + updateFontStyle = true; + auto fontStyle = ConvertStrToFontStyle(fontProp); + auto task = [fontStyle](const RefPtr& pool) { pool->UpdateFontStyle(fontStyle); }; + PushTaskToPage(ctx, value, task); + } else if (FONT_FAMILIES.find(fontProp) != FONT_FAMILIES.end()) { + auto families = ConvertStrToFontFamilies(fontProp); + auto task = [families](const RefPtr& pool) { pool->UpdateFontFamilies(families); }; + PushTaskToPage(ctx, value, task); + } else if (fontProp.find("px") != std::string::npos) { + std::string fontSize = fontProp.substr(0, fontProp.size() - 2); + auto size = Dimension(StringToDouble(fontProp)); + auto task = [size](const RefPtr& pool) { pool->UpdateFontSize(size); }; + PushTaskToPage(ctx, value, task); + } else { + LOGW("parse text error"); + } + } + if (!updateFontStyle) { + auto task = [](const RefPtr& pool) { pool->UpdateFontStyle(FontStyle::NORMAL); }; + PushTaskToPage(ctx, value, task); + } + JS_SetPropertyStr(ctx, value, "__font", JS_DupValue(ctx, proto)); + return JS_UNDEFINED; +} + +JSValue CanvasBridge::JsAlphaGetter(JSContext* ctx, JSValueConst value) +{ + return JS_GetPropertyStr(ctx, value, "__globalAlpha"); +} + +JSValue CanvasBridge::JsAlphaSetter(JSContext* ctx, JSValueConst value, JSValueConst proto) +{ + double alpha = GetJsDoubleVal(ctx, proto); + auto task = [alpha](const RefPtr& pool) { pool->UpdateGlobalAlpha(alpha); }; + PushTaskToPage(ctx, value, task); + JS_SetPropertyStr(ctx, value, "__globalAlpha", JS_DupValue(ctx, proto)); + return JS_NULL; +} + +JSValue CanvasBridge::JsCompositeOperationGetter(JSContext* ctx, JSValueConst value) +{ + return JS_GetPropertyStr(ctx, value, "__globalCompositeOperation"); +} + +JSValue CanvasBridge::JsCompositeOperationSetter(JSContext* ctx, JSValueConst value, JSValueConst proto) +{ + ScopedString typeStr(ctx, proto); + // this map must be sorted by key. + static const LinearMapNode compositeOperationTable[] = { + { "copy", CompositeOperation::COPY }, + { "destination-atop", CompositeOperation::DESTINATION_ATOP }, + { "destination-in", CompositeOperation::DESTINATION_IN }, + { "destination-out", CompositeOperation::DESTINATION_OUT }, + { "destination-over", CompositeOperation::DESTINATION_OVER }, + { "lighter", CompositeOperation::LIGHTER }, + { "source-atop", CompositeOperation::SOURCE_ATOP }, + + { "source-in", CompositeOperation::SOURCE_IN }, + { "source-out", CompositeOperation::SOURCE_OUT }, + { "source-over", CompositeOperation::SOURCE_OVER }, + { "xor", CompositeOperation::XOR }, + }; + auto type = ConvertStrToEnum( + typeStr.get(), compositeOperationTable, ArraySize(compositeOperationTable), CompositeOperation::SOURCE_OVER); + auto task = [type](const RefPtr& pool) { pool->UpdateCompositeOperation(type); }; + PushTaskToPage(ctx, value, task); + JS_SetPropertyStr(ctx, value, "__globalCompositeOperation", JS_DupValue(ctx, proto)); + return JS_NULL; +} + +JSValue CanvasBridge::JsLineDashOffsetGetter(JSContext* ctx, JSValueConst value) +{ + return JS_GetPropertyStr(ctx, value, "__lineDash"); +} + +JSValue CanvasBridge::JsLineDashOffsetSetter(JSContext* ctx, JSValueConst value, JSValueConst proto) +{ + double dashoffset = GetJsDoubleVal(ctx, proto); + auto task = [dashoffset](const RefPtr& pool) { pool->UpdateLineDashOffset(dashoffset); }; + PushTaskToPage(ctx, value, task); + JS_SetPropertyStr(ctx, value, "__lineDash", JS_DupValue(ctx, proto)); + return JS_NULL; +} + +JSValue CanvasBridge::JsShadowBlurGetter(JSContext* ctx, JSValueConst value) +{ + return JS_GetPropertyStr(ctx, value, "__shadowBlur"); +} + +JSValue CanvasBridge::JsShadowBlurSetter(JSContext* ctx, JSValueConst value, JSValueConst proto) +{ + double blur = GetJsDoubleVal(ctx, proto); + auto task = [blur](const RefPtr& pool) { pool->UpdateShadowBlur(blur); }; + PushTaskToPage(ctx, value, task); + JS_SetPropertyStr(ctx, value, "__shadowBlur", JS_DupValue(ctx, proto)); + return JS_NULL; +} + +JSValue CanvasBridge::JsShadowColorGetter(JSContext* ctx, JSValueConst value) +{ + return JS_GetPropertyStr(ctx, value, "__shadowColor"); +} + +JSValue CanvasBridge::JsShadowColorSetter(JSContext* ctx, JSValueConst value, JSValueConst proto) +{ + ScopedString colorStr(ctx, proto); + auto color = Color::FromString(colorStr.get()); + auto task = [color](const RefPtr& pool) { pool->UpdateShadowColor(color); }; + PushTaskToPage(ctx, value, task); + JS_SetPropertyStr(ctx, value, "__shadowColor", JS_DupValue(ctx, proto)); + return JS_NULL; +} + +JSValue CanvasBridge::JsShadowOffsetXGetter(JSContext* ctx, JSValueConst value) +{ + return JS_GetPropertyStr(ctx, value, "__shadowOffsetX"); +} + +JSValue CanvasBridge::JsShadowOffsetXSetter(JSContext* ctx, JSValueConst value, JSValueConst proto) +{ + double offsetX = GetJsDoubleVal(ctx, proto); + auto task = [offsetX](const RefPtr& pool) { pool->UpdateShadowOffsetX(offsetX); }; + PushTaskToPage(ctx, value, task); + JS_SetPropertyStr(ctx, value, "__shadowOffsetX", JS_DupValue(ctx, proto)); + return JS_NULL; +} + +JSValue CanvasBridge::JsShadowOffsetYGetter(JSContext* ctx, JSValueConst value) +{ + return JS_GetPropertyStr(ctx, value, "__shadowOffsetY"); +} + +JSValue CanvasBridge::JsShadowOffsetYSetter(JSContext* ctx, JSValueConst value, JSValueConst proto) +{ + double offsetY = GetJsDoubleVal(ctx, proto); + auto task = [offsetY](const RefPtr& pool) { pool->UpdateShadowOffsetY(offsetY); }; + PushTaskToPage(ctx, value, task); + JS_SetPropertyStr(ctx, value, "__shadowOffsetY", JS_DupValue(ctx, proto)); + return JS_NULL; +} + +JSValue CanvasBridge::JsSmoothingEnabledGetter(JSContext* ctx, JSValueConst value) +{ + return JS_GetPropertyStr(ctx, value, "__imageSmoothingEnabled"); +} + +JSValue CanvasBridge::JsSmoothingEnabledSetter(JSContext* ctx, JSValueConst value, JSValueConst proto) +{ + ScopedString enabledStr(ctx, proto); + if (!enabledStr.get()) { + return JS_NULL; + } + bool enabled = std::string(enabledStr.get()) == "true"; + auto task = [enabled](const RefPtr& pool) { pool->UpdateSmoothingEnabled(enabled); }; + PushTaskToPage(ctx, value, task); + JS_SetPropertyStr(ctx, value, "__imageSmoothingEnabled", JS_DupValue(ctx, proto)); + return JS_NULL; +} + +JSValue CanvasBridge::JsSmoothingQualityGetter(JSContext* ctx, JSValueConst value) +{ + return JS_GetPropertyStr(ctx, value, "__imageSmoothingQuality"); +} + +JSValue CanvasBridge::JsSmoothingQualitySetter(JSContext* ctx, JSValueConst value, JSValueConst proto) +{ + ScopedString qualityStr(ctx, proto); + if (!qualityStr.get()) { + return JS_NULL; + } + std::string quality = qualityStr.get(); + if (QUALITY_TYPE.find(quality) == QUALITY_TYPE.end()) { + return JS_NULL; + } + auto task = [quality](const RefPtr& pool) { pool->UpdateSmoothingQuality(quality); }; + PushTaskToPage(ctx, value, task); + JS_SetPropertyStr(ctx, value, "__imageSmoothingQuality", JS_DupValue(ctx, proto)); + return JS_NULL; +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/js_frontend/engine/quickjs/canvas_bridge.h b/frameworks/bridge/js_frontend/engine/quickjs/canvas_bridge.h new file mode 100644 index 00000000..e0019a9b --- /dev/null +++ b/frameworks/bridge/js_frontend/engine/quickjs/canvas_bridge.h @@ -0,0 +1,180 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_QUICKJS_CANVAS_BRIDGE_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_QUICKJS_CANVAS_BRIDGE_H + +#include +#include + +#include "frameworks/bridge/common/dom/dom_canvas.h" +#include "frameworks/bridge/js_frontend/engine/common/base_canvas_bridge.h" +#include "frameworks/bridge/js_frontend/engine/quickjs/qjs_utils.h" + +namespace OHOS::Ace::Framework { + +class CanvasBridge : public BaseCanvasBridge { + DECLARE_ACE_TYPE(CanvasBridge, BaseCanvasBridge) + +public: + void HandleJsContext(JSContext* ctx, NodeId id, const std::string& args); + void HandleToDataURL(JSContext* ctx, NodeId id, const std::string& args); + + JSValue GetRenderContext() const + { + return renderContext_; + } + + JSValue GetDataURL() const + { + return dataURL_; + } + + static JSValue JsCreateLinearGradient(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + static JSValue JsCreateRadialGradient(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + static JSValue JsAddColorStop(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + + // rect bridge + static JSValue JsFillRect(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + static JSValue JsStrokeRect(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + static JSValue JsClearRect(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + + // text bridge + static JSValue JsFillText(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + static JSValue JsStrokeText(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + static JSValue JsMeasureText(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + + // path bridge + static JSValue JsBeginPath(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + static JSValue JsClosePath(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + static JSValue JsMoveTo(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + static JSValue JsLineTo(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + static JSValue JsBezierCurveTo(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + static JSValue JsQuadraticCurveTo(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + static JSValue JsArc(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + static JSValue JsArcTo(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + static JSValue JsEllipse(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + + static JSValue JsRect(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + static JSValue JsFill(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + static JSValue JsStroke(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + static JSValue JsClip(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + + static JSValue JsSave(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + static JSValue JsRestore(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + + static JSValue JsRotate(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + static JSValue JsScale(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + static JSValue JsSetTransform(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + static JSValue JsTransform(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + static JSValue JsTranslate(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + static JSValue JsGetLineDash(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + static JSValue JsSetLineDash(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + static JSValue JsDrawImage(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + static JSValue JsCreatePath2D(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + static JSValue JsCreatePattern(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + static JSValue JsCreateImageData(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + static JSValue JsPutImageData(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + static JSValue JsGetImageData(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + + // getter and setter + static JSValue JsFillStyleGetter(JSContext* ctx, JSValueConst value); + static JSValue JsFillStyleSetter(JSContext* ctx, JSValueConst value, JSValueConst proto); + static JSValue JsStrokeStyleGetter(JSContext* ctx, JSValueConst value); + static JSValue JsStrokeStyleSetter(JSContext* ctx, JSValueConst value, JSValueConst proto); + static JSValue JsLineCapGetter(JSContext* ctx, JSValueConst value); + static JSValue JsLineCapSetter(JSContext* ctx, JSValueConst value, JSValueConst proto); + static JSValue JsLineJoinGetter(JSContext* ctx, JSValueConst value); + static JSValue JsLineJoinSetter(JSContext* ctx, JSValueConst value, JSValueConst proto); + static JSValue JsMiterLimitGetter(JSContext* ctx, JSValueConst value); + static JSValue JsMiterLimitSetter(JSContext* ctx, JSValueConst value, JSValueConst proto); + static JSValue JsLineWidthGetter(JSContext* ctx, JSValueConst value); + static JSValue JsLineWidthSetter(JSContext* ctx, JSValueConst value, JSValueConst proto); + static JSValue JsTextAlignGetter(JSContext* ctx, JSValueConst value); + static JSValue JsTextAlignSetter(JSContext* ctx, JSValueConst value, JSValueConst proto); + static JSValue JsTextBaselineGetter(JSContext* ctx, JSValueConst value); + static JSValue JsTextBaselineSetter(JSContext* ctx, JSValueConst value, JSValueConst proto); + static JSValue JsFontGetter(JSContext* ctx, JSValueConst value); + static JSValue JsFontSetter(JSContext* ctx, JSValueConst value, JSValueConst proto); + static JSValue JsAlphaGetter(JSContext* ctx, JSValueConst value); + static JSValue JsAlphaSetter(JSContext* ctx, JSValueConst value, JSValueConst proto); + static JSValue JsCompositeOperationGetter(JSContext* ctx, JSValueConst value); + static JSValue JsCompositeOperationSetter(JSContext* ctx, JSValueConst value, JSValueConst proto); + static JSValue JsLineDashOffsetGetter(JSContext* ctx, JSValueConst value); + static JSValue JsLineDashOffsetSetter(JSContext* ctx, JSValueConst value, JSValueConst proto); + static JSValue JsShadowBlurGetter(JSContext* ctx, JSValueConst value); + static JSValue JsShadowBlurSetter(JSContext* ctx, JSValueConst value, JSValueConst proto); + static JSValue JsShadowColorGetter(JSContext* ctx, JSValueConst value); + static JSValue JsShadowColorSetter(JSContext* ctx, JSValueConst value, JSValueConst proto); + static JSValue JsShadowOffsetXGetter(JSContext* ctx, JSValueConst value); + static JSValue JsShadowOffsetXSetter(JSContext* ctx, JSValueConst value, JSValueConst proto); + static JSValue JsShadowOffsetYGetter(JSContext* ctx, JSValueConst value); + static JSValue JsShadowOffsetYSetter(JSContext* ctx, JSValueConst value, JSValueConst proto); + static JSValue JsSmoothingEnabledGetter(JSContext* ctx, JSValueConst value); + static JSValue JsSmoothingEnabledSetter(JSContext* ctx, JSValueConst value, JSValueConst proto); + static JSValue JsSmoothingQualityGetter(JSContext* ctx, JSValueConst value); + static JSValue JsSmoothingQualitySetter(JSContext* ctx, JSValueConst value, JSValueConst proto); + + static JSValue JsPath2DAddPath(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + static JSValue JsPath2DSetTransform(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + static JSValue JsPath2DMoveTo(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + static JSValue JsPath2DLineTo(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + static JSValue JsPath2DArc(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + static JSValue JsPath2DArcTo(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + static JSValue JsPath2DQuadraticCurveTo(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + static JSValue JsPath2DBezierCurveTo(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + static JSValue JsPath2DEllipse(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + static JSValue JsPath2DRect(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + static JSValue JsPath2DClosePath(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + static RefPtr JsMakePath2D(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv); + +private: + enum class FunctionCode { + FILL_RECT = 0, + STROKE_RECT, + CLEAR_RECT, + FILL_TEXT, + STROKE_TEXT, + FILL_STYLE_SETTER, + STROKE_STYLE_SETTER, + }; + static Gradient GetGradient(JSContext* ctx, JSValueConst value); + static Pattern GetPattern(JSContext* ctx, JSValueConst value); + static RefPtr GetPath2D(JSContext* ctx, JSValueConst value); + static void ParseDomImage(JSContext* ctx, JSValueConst value, double& width, double& height, std::string& src); + static void ParseImageData( + JSContext* ctx, JSValueConst* argv, int32_t argc, std::vector& array, ImageData& imageData); + static JSValue JsHandleRect( + JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv, FunctionCode functionCode); + static JSValue JsHandleText( + JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv, FunctionCode functionCode); + static JSValue JsHandleStyleSetter( + JSContext* ctx, JSValueConst value, JSValueConst proto, FunctionCode functionCode); + static void JsSetAntiAlias(JSContext* ctx, NodeId id, const std::string& args); + + JSValue renderContext_; + JSValue dataURL_; + + static int32_t gradientCount_; + static int32_t patternCount_; + static int32_t path2dCount_; + static std::unordered_map gradientColors_; + static std::unordered_map pattern_; + static std::unordered_map> path2Ds_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_QUICKJS_CANVAS_BRIDGE_H diff --git a/frameworks/bridge/js_frontend/engine/quickjs/chart_bridge.cpp b/frameworks/bridge/js_frontend/engine/quickjs/chart_bridge.cpp new file mode 100644 index 00000000..59b0e4f1 --- /dev/null +++ b/frameworks/bridge/js_frontend/engine/quickjs/chart_bridge.cpp @@ -0,0 +1,601 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/js_frontend/engine/quickjs/chart_bridge.h" + +#include "base/utils/linear_map.h" +#include "base/utils/utils.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { + +namespace { + +constexpr int32_t VALID_ARRAY_LENGTH = 2; +constexpr uint32_t ARRAY_X_VALUE = 0; +constexpr uint32_t ARRAY_Y_VALUE = 1; + +void GetAttrOptionsAxis(JSContext* ctx, JSValueConst valObject, AxisOption& axisOption) +{ + JSPropertyEnum* pTab = nullptr; + uint32_t len = 0; + if (!CheckAndGetJsProperty(ctx, valObject, &pTab, &len)) { + return; + } + JS_GetOwnPropertyNames(ctx, &pTab, &len, valObject, JS_GPN_STRING_MASK); + for (uint32_t i = 0; i < len; i++) { + const char* key = JS_AtomToCString(ctx, pTab[i].atom); + if (key == nullptr) { + JS_FreeAtom(ctx, pTab[i].atom); + LOGW("key is null. Ignoring!"); + continue; + } + JSValue val = JS_GetProperty(ctx, valObject, pTab[i].atom); + if (JS_IsNumber(val) || JS_IsBool(val) || JS_IsString(val)) { + // must sorted by key. + static const LinearMapNode chartOptionsAxisMap[] = { + { "axisTick", + [](const char* valStr, AxisOption& axis) { + axis.tickNumber = StringUtils::StringToInt(valStr); + } }, + { "color", + [](const char* valStr, AxisOption& axis) { + axis.color = Color::FromString(valStr); + } }, + { "display", + [](const char* valStr, AxisOption& axis) { + axis.display = StringToBool(valStr); + } }, + { "max", + [](const char* valStr, AxisOption& axis) { + axis.max = StringToDouble(valStr); + } }, + { "min", + [](const char* valStr, AxisOption& axis) { + axis.min = StringToDouble(valStr); + } }, + }; + auto iter = BinarySearchFindIndex(chartOptionsAxisMap, ArraySize(chartOptionsAxisMap), key); + if (iter != -1) { + ScopedString styleVal(ctx, val); + chartOptionsAxisMap[iter].value(styleVal.get(), axisOption); + } else { + LOGD("key : %{public}s unsupported. Ignoring!", key); + } + } else { + LOGD("key : %{public}s, value of unsupported type. Ignoring!", key); + } + JS_FreeAtom(ctx, pTab[i].atom); + JS_FreeCString(ctx, key); + JS_FreeValue(ctx, val); + } + js_free(ctx, pTab); +} + +void GetAttrOptionsSeriesPoint(JSContext* ctx, JSValueConst valObject, PointInfo& pointInfo) +{ + JSPropertyEnum* pTab = nullptr; + uint32_t len = 0; + if (!CheckAndGetJsProperty(ctx, valObject, &pTab, &len)) { + return; + } + pointInfo.SetDisplay(true); + for (uint32_t i = 0; i < len; i++) { + const char* key = JS_AtomToCString(ctx, pTab[i].atom); + if (key == nullptr) { + JS_FreeAtom(ctx, pTab[i].atom); + LOGW("key is null. Ignoring!"); + continue; + } + JSValue val = JS_GetProperty(ctx, valObject, pTab[i].atom); + if (JS_IsString(val) || JS_IsNumber(val) || JS_IsBool(val)) { + static const LinearMapNode chartOptionsPointMap[] = { + { "display", + [](const char* valStr, PointInfo& pointInfo) { + pointInfo.SetDisplay(StringToBool(valStr)); + } }, + { "fillColor", + [](const char* valStr, PointInfo& pointInfo) { + pointInfo.SetFillColor(Color::FromString(valStr)); + } }, + { "shape", + [](const char* valStr, PointInfo& pointInfo) { + PointShape shape = + (strcmp(valStr, "circle") == 0) + ? PointShape::CIRCLE + : (strcmp(valStr, "square") == 0) ? PointShape::SQUARE : PointShape::TRIANGLE; + pointInfo.SetPointShape(shape); + } }, + { "size", + [](const char* valStr, PointInfo& pointInfo) { + pointInfo.SetPointSize(StringToDimension(valStr)); + } }, + { "strokeColor", + [](const char* valStr, PointInfo& pointInfo) { + pointInfo.SetStrokeColor(Color::FromString(valStr)); + } }, + { "strokeWidth", + [](const char* valStr, PointInfo& pointInfo) { + pointInfo.SetPointStrokeWidth(StringToDimension(valStr)); + } }, + }; + auto iter = BinarySearchFindIndex(chartOptionsPointMap, ArraySize(chartOptionsPointMap), key); + if (iter != -1) { + ScopedString styleVal(ctx, val); + chartOptionsPointMap[iter].value(styleVal.get(), pointInfo); + } else { + LOGD("key : %{public}s unsupported. Ignoring!", key); + } + } else { + LOGD("key : %{public}s, value of unsupported type. Ignoring!", key); + } + JS_FreeAtom(ctx, pTab[i].atom); + JS_FreeCString(ctx, key); + JS_FreeValue(ctx, val); + } + js_free(ctx, pTab); +} + +void GetChartAttrOptionsSeriesLineStyle(JSContext* ctx, JSValueConst valObject, ChartOptions& chartOptions) +{ + JSPropertyEnum* pTab = nullptr; + uint32_t len = 0; + if (!CheckAndGetJsProperty(ctx, valObject, &pTab, &len)) { + return; + } + for (uint32_t i = 0; i < len; i++) { + const char* key = JS_AtomToCString(ctx, pTab[i].atom); + if (key == nullptr) { + JS_FreeAtom(ctx, pTab[i].atom); + LOGW("key is null. Ignoring!"); + continue; + } + JSValue val = JS_GetProperty(ctx, valObject, pTab[i].atom); + if (JS_IsString(val) || JS_IsBool(val) || JS_IsNumber(val)) { + static const LinearMapNode + chartOptionsSeriesLinestyleMap[] = { + { "smooth", + [](const char* valStr, ChartOptions& chartOptions) { + chartOptions.SetSmoothFlag(StringToBool(valStr)); + } }, + { "width", + [](const char* valStr, ChartOptions& chartOptions) { + chartOptions.SetLineWidth(StringToDouble(valStr)); + } }, + }; + auto iter = + BinarySearchFindIndex(chartOptionsSeriesLinestyleMap, ArraySize(chartOptionsSeriesLinestyleMap), key); + if (iter != -1) { + ScopedString styleVal(ctx, val); + chartOptionsSeriesLinestyleMap[iter].value(styleVal.get(), chartOptions); + } else { + LOGD("key : %{public}s unsupported. Ignoring!", key); + } + } else { + LOGD("value of unsupported type. Ignoring!"); + } + JS_FreeAtom(ctx, pTab[i].atom); + JS_FreeCString(ctx, key); + JS_FreeValue(ctx, val); + } + js_free(ctx, pTab); +} + +void GetChartAttrOptionsSeriesLoop(JSContext* ctx, JSValueConst valObject, ChartOptions& chartOptions) +{ + JSPropertyEnum* pTab = nullptr; + uint32_t len = 0; + if (!CheckAndGetJsProperty(ctx, valObject, &pTab, &len)) { + return; + } + chartOptions.SetLoop(true); + for (uint32_t i = 0; i < len; i++) { + const char* key = JS_AtomToCString(ctx, pTab[i].atom); + if (key == nullptr) { + JS_FreeAtom(ctx, pTab[i].atom); + LOGW("key is null. Ignoring!"); + continue; + } + JSValue val = JS_GetProperty(ctx, valObject, pTab[i].atom); + if (JS_IsString(val) || JS_IsBool(val) || JS_IsNumber(val)) { + static const LinearMapNode + chartOptionsSeriesLoopMap[] = { + { "gradient", + [](const char* valStr, ChartOptions& chartOptions) { + chartOptions.SetLineGradient(StringToBool(valStr)); + } }, + { "margin", + [](const char* valStr, ChartOptions& chartOptions) { + chartOptions.SetErasePointNumber(StringUtils::StringToInt(valStr)); + } }, + }; + auto iter = BinarySearchFindIndex(chartOptionsSeriesLoopMap, ArraySize(chartOptionsSeriesLoopMap), key); + if (iter != -1) { + ScopedString styleVal(ctx, val); + chartOptionsSeriesLoopMap[iter].value(styleVal.get(), chartOptions); + } else { + LOGD("key : %{public}s unsupported. Ignoring!", key); + } + } else { + LOGD("value of unsupported type. Ignoring!"); + } + JS_FreeAtom(ctx, pTab[i].atom); + JS_FreeCString(ctx, key); + JS_FreeValue(ctx, val); + } + js_free(ctx, pTab); +} + +void GetChartAttrOptionsSeries(JSContext* ctx, JSValueConst valObject, ChartOptions& chartOptions) +{ + JSPropertyEnum* pTab = nullptr; + uint32_t len = 0; + if (!CheckAndGetJsProperty(ctx, valObject, &pTab, &len)) { + return; + } + for (uint32_t i = 0; i < len; i++) { + const char* key = JS_AtomToCString(ctx, pTab[i].atom); + if (key == nullptr) { + JS_FreeAtom(ctx, pTab[i].atom); + LOGW("key is null. Ignoring!"); + continue; + } + JSValue val = JS_GetProperty(ctx, valObject, pTab[i].atom); + if (JS_IsObject(val)) { + static const LinearMapNode chartOptionsSeriesMap[] = { + { "bottomPoint", + [](JSContext* ctx, JSValueConst valObject, ChartOptions& chartOptions) { + PointInfo pointInfo; + GetAttrOptionsSeriesPoint(ctx, valObject, pointInfo); + chartOptions.SetBottomPoint(pointInfo); + } }, + { "headPoint", + [](JSContext* ctx, JSValueConst valObject, ChartOptions& chartOptions) { + PointInfo pointInfo; + GetAttrOptionsSeriesPoint(ctx, valObject, pointInfo); + chartOptions.SetHeadPoint(pointInfo); + } }, + { "lineStyle", + [](JSContext* ctx, JSValueConst valObject, ChartOptions& chartOptions) { + GetChartAttrOptionsSeriesLineStyle(ctx, valObject, chartOptions); + } }, + { "loop", + [](JSContext* ctx, JSValueConst valObject, ChartOptions& chartOptions) { + GetChartAttrOptionsSeriesLoop(ctx, valObject, chartOptions); + } }, + + { "topPoint", + [](JSContext* ctx, JSValueConst valObject, ChartOptions& chartOptions) { + PointInfo pointInfo; + GetAttrOptionsSeriesPoint(ctx, valObject, pointInfo); + chartOptions.SetTopPoint(pointInfo); + } }, + }; + auto iter = BinarySearchFindIndex(chartOptionsSeriesMap, ArraySize(chartOptionsSeriesMap), key); + if (iter != -1) { + chartOptionsSeriesMap[iter].value(ctx, val, chartOptions); + } else { + LOGD("key : %{public}s unsupported. Ignoring!", key); + } + } else { + LOGD("value of unsupported type. Ignoring!"); + } + JS_FreeAtom(ctx, pTab[i].atom); + JS_FreeCString(ctx, key); + JS_FreeValue(ctx, val); + } + js_free(ctx, pTab); +} + +void ParseTextInfoAndSegmentInfo( + JSContext* ctx, JSValue val, const char* key, TextInfo& textInfo, SegmentInfo& segmentInfo) +{ + ScopedString stringVal(ctx, val); + const char* convertedVal = stringVal.get(); + if (strcmp(key, "description") == 0) { + textInfo.SetTextValue(convertedVal); + } else if (strcmp(key, "textLocation") == 0) { + if (strcmp(convertedVal, "top") == 0) { + textInfo.SetPlacement(Placement::TOP); + } else if (strcmp(convertedVal, "bottom") == 0) { + textInfo.SetPlacement(Placement::BOTTOM); + } else if (strcmp(convertedVal, "none") == 0) { + textInfo.SetPlacement(Placement::NONE); + } + } else if (strcmp(key, "lineDash") == 0) { + std::vector dash; + StringUtils::StringSpliter(convertedVal, ',', dash); + if (dash.size() > 0) { + segmentInfo.SetLineType(dash[0] == "dashed" ? LineType::DASHED : LineType::SOLID); + } + if (dash.size() > 1) { + segmentInfo.SetSolidWidth(StringToDouble(dash[1])); + } + if (dash.size() > 2) { + segmentInfo.SetSpaceWidth(StringToDouble(dash[2])); + } + } else if (strcmp(key, "lineColor") == 0) { + segmentInfo.SetSegmentColor(Color::FromString(convertedVal)); + } else if (strcmp(key, "textColor") == 0) { + textInfo.SetColor(Color::FromString(convertedVal)); + } else { + LOGW("key is %{public}s. Ignoring!", key); + } +} + +void ParseAttrDataStyle(JSContext* ctx, JSValueConst valObject, LineInfo& line, double index) +{ + JSPropertyEnum* pTab = nullptr; + uint32_t len = 0; + PointInfo pointInfo; + TextInfo textInfo; + SegmentInfo segmentInfo; + if (!CheckAndGetJsProperty(ctx, valObject, &pTab, &len)) { + return; + } + for (uint32_t i = 0; i < len; i++) { + const char* key = JS_AtomToCString(ctx, pTab[i].atom); + if (key == nullptr) { + JS_FreeAtom(ctx, pTab[i].atom); + LOGW("key is null. Ignoring!"); + continue; + } + JSValue val = JS_GetProperty(ctx, valObject, pTab[i].atom); + if (JS_IsString(val)) { + ParseTextInfoAndSegmentInfo(ctx, val, key, textInfo, segmentInfo); + } else if (JS_IsObject(val)) { + if (strcmp(key, "pointStyle") == 0) { + GetAttrOptionsSeriesPoint(ctx, val, pointInfo); + } + } else if (JS_IsNumber(val)) { + if (strcmp(key, "value") == 0) { + ScopedString onlyYStringVal(ctx, val); + const char* onlyY = onlyYStringVal.get(); + pointInfo.SetX(static_cast(index)); + pointInfo.SetY(StringToDouble(onlyY)); + } + } else { + LOGW("key is %{public}s. Ignoring!", key); + } + line.SetPointInfo(pointInfo); + line.SetTextInfo(textInfo); + line.SetSegmentInfo(segmentInfo); + JS_FreeAtom(ctx, pTab[i].atom); + JS_FreeCString(ctx, key); + JS_FreeValue(ctx, val); + } + js_free(ctx, pTab); +} + +void GetAttrDataSetData(JSContext* ctx, JSValueConst dataArrayVal, MainChart& dataSet) +{ + int32_t length = QjsUtils::JsGetArrayLength(ctx, dataArrayVal); + std::vector line; + for (int32_t j = 0; j < length; ++j) { + JSValue dataArrayItemVal = JS_GetPropertyUint32(ctx, dataArrayVal, j); + LineInfo lineInfo; + PointInfo pointInfo; + if (JS_IsArray(ctx, dataArrayItemVal)) { // Coordinates are two-dimensional arrays + int32_t dataArrayIterLen = QjsUtils::JsGetArrayLength(ctx, dataArrayItemVal); + if (dataArrayIterLen != VALID_ARRAY_LENGTH) { // Check coordinates are not two-dimensional arrays + LOGW("Attr Datasets data type unsupported!"); + JS_FreeValue(ctx, dataArrayItemVal); + continue; + } + JSValue xVal = JS_GetPropertyUint32(ctx, dataArrayItemVal, ARRAY_X_VALUE); + ScopedString xStringVal(ctx, xVal); + const char* x = xStringVal.get(); + pointInfo.SetX(StringToDouble(x)); + + JSValue yVal = JS_GetPropertyUint32(ctx, dataArrayItemVal, ARRAY_Y_VALUE); + ScopedString yStringVal(ctx, yVal); + const char* y = yStringVal.get(); + pointInfo.SetY(StringToDouble(y)); + lineInfo.SetPointInfo(pointInfo); + JS_FreeValue(ctx, xVal); + JS_FreeValue(ctx, yVal); + } else if (JS_IsNumber(dataArrayItemVal)) { // Coordinates as a one-dimensional array + ScopedString onlyYStringVal(ctx, dataArrayItemVal); + const char* onlyY = onlyYStringVal.get(); + // When only the Y value is passed in, the X value is sequentially +1 + pointInfo.SetX(static_cast(j)); + pointInfo.SetY(StringToDouble(onlyY)); + lineInfo.SetPointInfo(pointInfo); + } else if (JS_IsObject(dataArrayItemVal)) { + ParseAttrDataStyle(ctx, dataArrayItemVal, lineInfo, j); + } else { + LOGW("value of unsupported type. Ignoring!"); + JS_FreeValue(ctx, dataArrayItemVal); + continue; + } + line.push_back(lineInfo); + JS_FreeValue(ctx, dataArrayItemVal); + } + dataSet.SetData(line); +} + +void GetAttrDataset(JSContext* ctx, JSValueConst valObject, MainChart& dataSet) +{ + JSPropertyEnum* pTab = nullptr; + uint32_t len = 0; + if (!CheckAndGetJsProperty(ctx, valObject, &pTab, &len)) { + return; + } + for (uint32_t i = 0; i < len; i++) { + const char* key = JS_AtomToCString(ctx, pTab[i].atom); + if (key == nullptr) { + JS_FreeAtom(ctx, pTab[i].atom); + LOGW("key is null. Ignoring!"); + continue; + } + JSValue val = JS_GetProperty(ctx, valObject, pTab[i].atom); + if (JS_IsNumber(val) || JS_IsBool(val) || JS_IsString(val)) { + ScopedString styleVal(ctx, val); + const char* valStr = styleVal.get(); + if (strcmp(key, "gradient") == 0) { + dataSet.SetGradient(StringToBool(valStr)); + } else if (strcmp(key, "strokeColor") == 0) { + dataSet.SetStrokeColor(Color::FromString(valStr)); + } else if (strcmp(key, "fillColor") == 0) { + dataSet.SetFillColor(Color::FromString(valStr)); + } else { + LOGD("key : %{public}s unsupported. Ignoring!", key); + } + } else if (JS_IsArray(ctx, val) && strcmp(key, "data") == 0) { + GetAttrDataSetData(ctx, val, dataSet); + } else { + LOGD("value of unsupported type. Ignoring!"); + } + JS_FreeAtom(ctx, pTab[i].atom); + JS_FreeCString(ctx, key); + JS_FreeValue(ctx, val); + } + js_free(ctx, pTab); +} + +void ParseAttrSegment(JSContext* ctx, JSValue valObject, Segment& segment) +{ + JSPropertyEnum* pTab = nullptr; + uint32_t len = 0; + if (!CheckAndGetJsProperty(ctx, valObject, &pTab, &len)) { + return; + } + for (uint32_t i = 0; i < len; i++) { + const char* key = JS_AtomToCString(ctx, pTab[i].atom); + if (key == nullptr) { + JS_FreeAtom(ctx, pTab[i].atom); + LOGW("key is null. Ignoring!"); + continue; + } + JSValue val = JS_GetProperty(ctx, valObject, pTab[i].atom); + if (JS_IsNumber(val) || JS_IsString(val)) { + ScopedString styleVal(ctx, val); + const char* valStr = styleVal.get(); + if (strcmp(key, "value") == 0) { + segment.SetValue(StringToDouble(valStr)); + } else if (strcmp(key, "startColor") == 0) { + segment.SetStartColor(Color::FromString(valStr)); + segment.SetColorType(SegmentStyleType::USE_COLOR); + } else if (strcmp(key, "endColor") == 0) { + segment.SetEndColor(Color::FromString(valStr)); + segment.SetColorType(SegmentStyleType::USE_COLOR); + } else if (strcmp(key, "name") == 0) { + segment.SetSegmentName(valStr); + } else { + LOGD("key : %{public}s unsupported. Ignoring!", key); + } + } else { + LOGD("value of unsupported type. Ignoring!"); + } + JS_FreeAtom(ctx, pTab[i].atom); + JS_FreeCString(ctx, key); + JS_FreeValue(ctx, val); + } + js_free(ctx, pTab); +} + +} // namespace + +void ChartBridge::GetAttrOptionsObject(JSContext* ctx, JSValueConst valObject) +{ + JSPropertyEnum* pTab = nullptr; + uint32_t len = 0; + if (!CheckAndGetJsProperty(ctx, valObject, &pTab, &len)) { + return; + } + for (uint32_t i = 0; i < len; i++) { + const char* key = JS_AtomToCString(ctx, pTab[i].atom); + if (key == nullptr) { + JS_FreeAtom(ctx, pTab[i].atom); + LOGW("key is null. Ignoring!"); + continue; + } + JSValue val = JS_GetProperty(ctx, valObject, pTab[i].atom); + if (JS_IsObject(val) || JS_IsString(val) || JS_IsBool(val) || JS_IsNumber(val)) { + static const LinearMapNode chartOptionsMap[] = { + { "series", + [](JSContext* ctx, JSValueConst valObject, ChartOptions& chartOptions) { + GetChartAttrOptionsSeries(ctx, valObject, chartOptions); + } }, + { "xAxis", + [](JSContext* ctx, JSValueConst valObject, ChartOptions& chartOptions) { + AxisOption xAxis; + GetAttrOptionsAxis(ctx, valObject, xAxis); + chartOptions.SetXAxis(xAxis); + } }, + { "yAxis", + [](JSContext* ctx, JSValueConst valObject, ChartOptions& chartOptions) { + AxisOption yAxis; + GetAttrOptionsAxis(ctx, valObject, yAxis); + chartOptions.SetYAxis(yAxis); + } }, + }; + auto iter = BinarySearchFindIndex(chartOptionsMap, ArraySize(chartOptionsMap), key); + if (iter != -1) { + chartOptionsMap[iter].value(ctx, val, chartOptions_); + } else { + LOGD("key : %{public}s unsupported. Ignoring!", key); + } + } else { + LOGD("value of unsupported type. Ignoring!"); + } + JS_FreeAtom(ctx, pTab[i].atom); + JS_FreeCString(ctx, key); + JS_FreeValue(ctx, val); + } + js_free(ctx, pTab); +} + +void ChartBridge::GetAttrDatasets(JSContext* ctx, JSValueConst valArray) +{ + int32_t len = QjsUtils::JsGetArrayLength(ctx, valArray); + for (int32_t i = 0; i < len; ++i) { + JSValue itemVal = JS_GetPropertyUint32(ctx, valArray, i); + MainChart chart; + if (JS_IsObject(itemVal)) { + GetAttrDataset(ctx, itemVal, chart); + datasets_.push_back(chart); + } + JS_FreeValue(ctx, itemVal); + } +} + +void ChartBridge::ParseAttrSegmentArray(JSContext* ctx, JSValueConst valArray) +{ + int32_t len = QjsUtils::JsGetArrayLength(ctx, valArray); + for (int32_t i = 0; i < len; ++i) { + JSValue itemVal = JS_GetPropertyUint32(ctx, valArray, i); + if (JS_IsObject(itemVal)) { + Segment segment; + ParseAttrSegment(ctx, itemVal, segment); + segments_.emplace_back(std::move(segment)); + } + JS_FreeValue(ctx, itemVal); + } +} + +void ChartBridge::ParseAttrSingleSegment(JSContext* ctx, JSValueConst valObject) +{ + if (!JS_IsObject(valObject)) { + LOGW("fail to parse segment, because it is not an object"); + return; + } + segments_.clear(); + Segment segment; + ParseAttrSegment(ctx, valObject, segment); + segments_.emplace_back(std::move(segment)); +} + +} // namespace OHOS::Ace::Framework \ No newline at end of file diff --git a/frameworks/bridge/js_frontend/engine/quickjs/chart_bridge.h b/frameworks/bridge/js_frontend/engine/quickjs/chart_bridge.h new file mode 100644 index 00000000..bc61009d --- /dev/null +++ b/frameworks/bridge/js_frontend/engine/quickjs/chart_bridge.h @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_QUICKJS_CHART_BRIDGE_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_QUICKJS_CHART_BRIDGE_H + +#include "frameworks/bridge/common/dom/dom_chart.h" +#include "frameworks/bridge/js_frontend/engine/quickjs/qjs_utils.h" + +namespace OHOS::Ace::Framework { + +class ChartBridge : virtual public AceType { + DECLARE_ACE_TYPE(ChartBridge, AceType) + +public: + void GetAttrOptionsObject(JSContext* ctx, JSValueConst valObject); + + void ParseAttrSegmentArray(JSContext* ctx, JSValueConst valArray); + + void ParseAttrSingleSegment(JSContext* ctx, JSValueConst valArray); + + void GetAttrDatasets(JSContext* ctx, JSValueConst valArray); + + void ParseAttrDataStyle(JSContext* ctx, JSValueConst valObject, LineInfo& line, double index); + + const ChartOptions& GetChartOptions() const + { + return chartOptions_; + } + + const std::vector& GetDatasets() const + { + return datasets_; + } + + const std::vector& GetSegments() const + { + return segments_; + } + +private: + ChartOptions chartOptions_; + std::vector segments_; + std::vector datasets_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_QUICKJS_CHART_BRIDGE_H diff --git a/frameworks/bridge/js_frontend/engine/quickjs/clock_bridge.cpp b/frameworks/bridge/js_frontend/engine/quickjs/clock_bridge.cpp new file mode 100644 index 00000000..d93407c2 --- /dev/null +++ b/frameworks/bridge/js_frontend/engine/quickjs/clock_bridge.cpp @@ -0,0 +1,105 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/js_frontend/engine/quickjs/clock_bridge.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { + +void ClockBridge::ParseClockConfig(JSContext* ctx, JSValueConst valObject) +{ + JSPropertyEnum* pTab = nullptr; + uint32_t len = 0; + if (!CheckAndGetJsProperty(ctx, valObject, &pTab, &len)) { + return; + } + for (uint32_t i = 0; i < len; i++) { + const char* key = JS_AtomToCString(ctx, pTab[i].atom); + if (key == nullptr) { + JS_FreeAtom(ctx, pTab[i].atom); + LOGW("key is null. Ignoring!"); + continue; + } + JSValue val = JS_GetProperty(ctx, valObject, pTab[i].atom); + if (JS_IsString(val) || JS_IsNumber(val)) { + ScopedString styleVal(ctx, val); + const char* valStr = styleVal.get(); + // static linear map must be sorted by key. + static const LinearMapNode clockConfigOperators[] = { + { DOM_DIGIT_COLOR, + [](const char* valStr, ClockBridge& clockBridge) { + clockBridge.clockConfig_.digitColor_ = Color::FromString(valStr); + } }, + { DOM_DIGIT_COLOR_NIGHT, + [](const char* valStr, ClockBridge& clockBridge) { + clockBridge.clockConfig_.digitColorNight_ = Color::FromString(valStr); + } }, + { DOM_DIGIT_RADIUS_RATIO, + [](const char* valStr, ClockBridge& clockBridge) { + clockBridge.clockConfig_.digitRadiusRatio_ = StringToDouble(valStr); + } }, + { DOM_DIGIT_SIZE_RATIO, + [](const char* valStr, ClockBridge& clockBridge) { + clockBridge.clockConfig_.digitSizeRatio_ = StringToDouble(valStr); + } }, + { DOM_CLOCK_FACE_SOURCE, + [](const char* valStr, ClockBridge& clockBridge) { + clockBridge.clockConfig_.clockFaceSrc_ = valStr; + } }, + { DOM_CLOCK_FACE_SOURCE_NIGHT, + [](const char* valStr, ClockBridge& clockBridge) { + clockBridge.clockConfig_.clockFaceNightSrc_ = valStr; + } }, + { DOM_HOUR_HAND_SOURCE, [](const char* valStr, + ClockBridge& clockBridge) { clockBridge.clockConfig_.hourHandSrc_ = valStr; } }, + { DOM_HOUR_HAND_SOURCE_NIGHT, + [](const char* valStr, ClockBridge& clockBridge) { + clockBridge.clockConfig_.hourHandNightSrc_ = valStr; + } }, + { DOM_MINUTE_HAND_SOURCE, + [](const char* valStr, ClockBridge& clockBridge) { + clockBridge.clockConfig_.minuteHandSrc_ = valStr; + } }, + { DOM_MINUTE_HAND_SOURCE_NIGHT, + [](const char* valStr, ClockBridge& clockBridge) { + clockBridge.clockConfig_.minuteHandNightSrc_ = valStr; + } }, + { DOM_SECOND_HAND_SOURCE, + [](const char* valStr, ClockBridge& clockBridge) { + clockBridge.clockConfig_.secondHandSrc_ = valStr; + } }, + { DOM_SECOND_HAND_SOURCE_NIGHT, + [](const char* valStr, ClockBridge& clockBridge) { + clockBridge.clockConfig_.secondHandNightSrc_ = valStr; + } }, + }; + auto operatorIter = BinarySearchFindIndex(clockConfigOperators, ArraySize(clockConfigOperators), key); + if (operatorIter != -1) { + clockConfigOperators[operatorIter].value(valStr, *this); + } else { + LOGD("key : %{public}s unsupported. Ignoring!", key); + } + } else { + LOGD("value of unsupported type. Ignoring!"); + } + JS_FreeAtom(ctx, pTab[i].atom); + JS_FreeCString(ctx, key); + JS_FreeValue(ctx, val); + } + js_free(ctx, pTab); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/js_frontend/engine/quickjs/clock_bridge.h b/frameworks/bridge/js_frontend/engine/quickjs/clock_bridge.h new file mode 100644 index 00000000..c1aa582e --- /dev/null +++ b/frameworks/bridge/js_frontend/engine/quickjs/clock_bridge.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_QUICKJS_CLOCK_BRIDGE_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_QUICKJS_CLOCK_BRIDGE_H + +#include "frameworks/bridge/common/dom/dom_clock.h" +#include "frameworks/bridge/js_frontend/engine/quickjs/qjs_utils.h" + +namespace OHOS::Ace::Framework { + +class ClockBridge : virtual public AceType { + DECLARE_ACE_TYPE(ClockBridge, AceType) + +public: + void ParseClockConfig(JSContext* ctx, JSValueConst valObject); + + const ClockConfig& GetClockConfig() const + { + return clockConfig_; + } + +private: + ClockConfig clockConfig_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_QUICKJS_CLOCK_BRIDGE_H diff --git a/frameworks/bridge/js_frontend/engine/quickjs/component_api_bridge.cpp b/frameworks/bridge/js_frontend/engine/quickjs/component_api_bridge.cpp new file mode 100644 index 00000000..87c14dbc --- /dev/null +++ b/frameworks/bridge/js_frontend/engine/quickjs/component_api_bridge.cpp @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/js_frontend/engine/quickjs/component_api_bridge.h" + +#include "frameworks/bridge/common/dom/dom_div.h" +#include "frameworks/bridge/common/dom/dom_list.h" +#include "frameworks/bridge/common/dom/dom_stack.h" + +namespace OHOS::Ace::Framework { + +JSValue CompoentApiBridge::JsGetScrollOffset(JSContext* ctx, NodeId nodeId) +{ + auto instance = static_cast(JS_GetContextOpaque(ctx)); + if (instance == nullptr) { + return JS_NULL; + } + auto page = instance->GetRunningPage(); + if (!page) { + return JS_NULL; + } + Offset offset; + auto task = [nodeId, page, &offset]() { + auto domDoc = page->GetDomDocument(); + if (!domDoc) { + return; + } + + auto domNode = domDoc->GetDOMNodeById(nodeId); + if (!domNode) { + return; + } + auto domList = AceType::DynamicCast(domNode); + if (domList) { + offset = domList->GetCurrentOffset(); + return; + } + + auto scrollComponent = domNode->GetScrollComponent(); + if (!scrollComponent) { + return; + } + auto controller = scrollComponent->GetScrollPositionController(); + if (!controller) { + return; + } + offset = controller->GetCurrentOffset(); + }; + auto delegate = instance->GetDelegate(); + if (!delegate) { + return JS_NULL; + } + delegate->PostSyncTaskToPage(task); + JSValue offsetContext = JS_NewObject(ctx); + JS_SetPropertyStr(ctx, offsetContext, "x", JS_NewFloat64(ctx, offset.GetX())); + JS_SetPropertyStr(ctx, offsetContext, "y", JS_NewFloat64(ctx, offset.GetY())); + return offsetContext; +} + +JSValue CompoentApiBridge::JsGetBoundingRect(JSContext* ctx, NodeId nodeId) +{ + auto instance = static_cast(JS_GetContextOpaque(ctx)); + if (instance == nullptr) { + return JS_NULL; + } + auto delegate = instance->GetDelegate(); + if (!delegate) { + return JS_NULL; + } + Rect boundingRect = delegate->GetBoundingRectData(nodeId); + JSValue rectContext = JS_NewObject(ctx); + JS_SetPropertyStr(ctx, rectContext, "width", JS_NewFloat64(ctx, boundingRect.Width())); + JS_SetPropertyStr(ctx, rectContext, "height", JS_NewFloat64(ctx, boundingRect.Height())); + JS_SetPropertyStr(ctx, rectContext, "top", JS_NewFloat64(ctx, boundingRect.Top())); + JS_SetPropertyStr(ctx, rectContext, "left", JS_NewFloat64(ctx, boundingRect.Left())); + return rectContext; +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/js_frontend/engine/quickjs/component_api_bridge.h b/frameworks/bridge/js_frontend/engine/quickjs/component_api_bridge.h new file mode 100644 index 00000000..b619499b --- /dev/null +++ b/frameworks/bridge/js_frontend/engine/quickjs/component_api_bridge.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_QUICKJS_SCROLL_VIEW_BRIDGE_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_QUICKJS_SCROLL_VIEW_BRIDGE_H + +#include "frameworks/bridge/common/dom/dom_node.h" +#include "frameworks/bridge/js_frontend/engine/quickjs/qjs_engine.h" +#include "frameworks/bridge/js_frontend/engine/quickjs/qjs_utils.h" + +namespace OHOS::Ace::Framework { + +class CompoentApiBridge : virtual public AceType { + DECLARE_ACE_TYPE(CompoentApiBridge, AceType) + +public: + static JSValue JsGetScrollOffset(JSContext* ctx, NodeId nodeId); + static JSValue JsGetBoundingRect(JSContext* ctx, NodeId nodeId); +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_QUICKJS_SCROLL_VIEW_BRIDGE_H diff --git a/frameworks/bridge/js_frontend/engine/quickjs/image_animator_bridge.cpp b/frameworks/bridge/js_frontend/engine/quickjs/image_animator_bridge.cpp new file mode 100644 index 00000000..ef25c3e2 --- /dev/null +++ b/frameworks/bridge/js_frontend/engine/quickjs/image_animator_bridge.cpp @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/js_frontend/engine/quickjs/image_animator_bridge.h" + +#include "frameworks/bridge/common/dom/dom_image_animator.h" +#include "frameworks/bridge/js_frontend/engine/quickjs/qjs_engine.h" + +namespace OHOS::Ace::Framework { + +JSValue ImageAnimatorBridge::JsGetState(JSContext* ctx, NodeId nodeId) +{ + auto instance = static_cast(JS_GetContextOpaque(ctx)); + if (instance == nullptr) { + return JS_NULL; + } + auto page = instance->GetRunningPage(); + if (!page) { + return JS_NULL; + } + const char* state = ""; + auto task = [nodeId, page, &state]() { + auto domDoc = page->GetDomDocument(); + if (!domDoc) { + return; + } + auto domImageAnimator = AceType::DynamicCast(domDoc->GetDOMNodeById(nodeId)); + if (!domImageAnimator) { + return; + } + state = domImageAnimator->GetState(); + }; + instance->GetDelegate()->PostSyncTaskToPage(task); + return JS_NewString(ctx, state); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/js_frontend/engine/quickjs/image_animator_bridge.h b/frameworks/bridge/js_frontend/engine/quickjs/image_animator_bridge.h new file mode 100644 index 00000000..c7655c31 --- /dev/null +++ b/frameworks/bridge/js_frontend/engine/quickjs/image_animator_bridge.h @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_QUICKJS_IMAGE_ANIMATOR_BRIDGE_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_QUICKJS_IMAGE_ANIMATOR_BRIDGE_H + +#include "frameworks/bridge/common/dom/dom_node.h" +#include "frameworks/bridge/js_frontend/engine/quickjs/qjs_utils.h" + +namespace OHOS::Ace::Framework { + +class JsAcePage; + +class ImageAnimatorBridge { +public: + static JSValue JsGetState(JSContext* ctx, NodeId nodeId); +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_QUICKJS_IMAGE_ANIMATOR_BRIDGE_H diff --git a/frameworks/bridge/js_frontend/engine/quickjs/intl/intl.h b/frameworks/bridge/js_frontend/engine/quickjs/intl/intl.h new file mode 100644 index 00000000..28267c30 --- /dev/null +++ b/frameworks/bridge/js_frontend/engine/quickjs/intl/intl.h @@ -0,0 +1,8768 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +const uint32_t js_intl_support_size = 69968; + +const uint8_t js_intl_support[69968] = { + 0x01, 0xac, 0x0a, 0x02, 0x65, 0x02, 0x72, 0x02, + 0x74, 0x02, 0x6e, 0x02, 0x61, 0x02, 0x69, 0x02, + 0x6f, 0x02, 0x6c, 0x02, 0x73, 0x02, 0x75, 0x02, + 0x63, 0x0c, 0x77, 0x69, 0x6e, 0x64, 0x6f, 0x77, + 0x08, 0x73, 0x65, 0x6c, 0x66, 0x08, 0x70, 0x61, + 0x74, 0x68, 0x0e, 0x65, 0x78, 0x70, 0x6f, 0x72, + 0x74, 0x73, 0x0e, 0x72, 0x65, 0x71, 0x75, 0x69, + 0x72, 0x65, 0x18, 0x49, 0x6e, 0x74, 0x6c, 0x50, + 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, 0x08, + 0x49, 0x6e, 0x74, 0x6c, 0x40, 0x5f, 0x5f, 0x61, + 0x70, 0x70, 0x6c, 0x79, 0x4c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x53, 0x65, 0x6e, 0x73, 0x69, 0x74, + 0x69, 0x76, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x74, 0x79, 0x70, 0x65, 0x73, 0x30, 0x5f, 0x5f, + 0x61, 0x64, 0x64, 0x41, 0x76, 0x61, 0x69, 0x6c, + 0x61, 0x62, 0x6c, 0x65, 0x4c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x04, 0x65, + 0x6e, 0x04, 0x61, 0x72, 0x04, 0x61, 0x7a, 0x04, + 0x62, 0x65, 0x04, 0x62, 0x67, 0x04, 0x62, 0x6e, + 0x0a, 0x62, 0x6f, 0x2d, 0x43, 0x4e, 0x04, 0x62, + 0x73, 0x04, 0x63, 0x61, 0x04, 0x63, 0x73, 0x04, + 0x64, 0x61, 0x04, 0x64, 0x65, 0x04, 0x65, 0x6c, + 0x0a, 0x65, 0x6e, 0x2d, 0x47, 0x42, 0x04, 0x65, + 0x73, 0x0a, 0x65, 0x73, 0x2d, 0x55, 0x53, 0x04, + 0x65, 0x74, 0x04, 0x65, 0x75, 0x04, 0x66, 0x61, + 0x04, 0x66, 0x69, 0x04, 0x66, 0x72, 0x04, 0x67, + 0x6c, 0x04, 0x68, 0x69, 0x04, 0x68, 0x72, 0x04, + 0x68, 0x75, 0x04, 0x69, 0x74, 0x04, 0x6a, 0x61, + 0x04, 0x6b, 0x61, 0x04, 0x6b, 0x6b, 0x04, 0x6b, + 0x6d, 0x04, 0x6b, 0x6f, 0x04, 0x6c, 0x6f, 0x04, + 0x6c, 0x74, 0x04, 0x6c, 0x76, 0x04, 0x6d, 0x6b, + 0x04, 0x6d, 0x73, 0x0a, 0x6d, 0x79, 0x2d, 0x4d, + 0x4d, 0x04, 0x6e, 0x62, 0x04, 0x6e, 0x65, 0x04, + 0x6e, 0x6c, 0x04, 0x70, 0x6c, 0x04, 0x70, 0x74, + 0x0a, 0x70, 0x74, 0x2d, 0x50, 0x54, 0x04, 0x72, + 0x6f, 0x04, 0x72, 0x75, 0x04, 0x73, 0x69, 0x04, + 0x73, 0x6b, 0x04, 0x73, 0x6c, 0x04, 0x73, 0x72, + 0x04, 0x73, 0x76, 0x04, 0x74, 0x68, 0x04, 0x74, + 0x72, 0x04, 0x75, 0x6b, 0x04, 0x75, 0x72, 0x04, + 0x75, 0x7a, 0x04, 0x76, 0x69, 0x04, 0x7a, 0x68, + 0x14, 0x7a, 0x68, 0x2d, 0x48, 0x61, 0x6e, 0x73, + 0x2d, 0x48, 0x4b, 0x14, 0x7a, 0x68, 0x2d, 0x48, + 0x61, 0x6e, 0x74, 0x2d, 0x54, 0x57, 0x04, 0x6d, + 0x6e, 0x04, 0x73, 0x77, 0x04, 0x61, 0x6d, 0x04, + 0x6f, 0x72, 0x04, 0x70, 0x61, 0x04, 0x74, 0x61, + 0x04, 0x6d, 0x6c, 0x04, 0x6b, 0x6e, 0x04, 0x67, + 0x75, 0x04, 0x6d, 0x72, 0x04, 0x74, 0x65, 0x14, + 0x7a, 0x68, 0x2d, 0x48, 0x61, 0x6e, 0x73, 0x2d, + 0x43, 0x4e, 0x0a, 0x65, 0x6e, 0x2d, 0x55, 0x53, + 0x0a, 0x64, 0x65, 0x2d, 0x44, 0x45, 0x0a, 0x6a, + 0x61, 0x2d, 0x4a, 0x50, 0x2c, 0x5f, 0x5f, 0x64, + 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, + 0x67, 0x45, 0x78, 0x70, 0x52, 0x65, 0x73, 0x74, + 0x6f, 0x72, 0x65, 0x04, 0x61, 0x66, 0x04, 0x61, + 0x6b, 0x06, 0x61, 0x73, 0x74, 0x04, 0x62, 0x6d, + 0x04, 0x62, 0x72, 0x04, 0x63, 0x79, 0x06, 0x64, + 0x73, 0x62, 0x04, 0x66, 0x66, 0x06, 0x66, 0x69, + 0x6c, 0x04, 0x67, 0x61, 0x04, 0x67, 0x64, 0x04, + 0x67, 0x76, 0x04, 0x68, 0x65, 0x04, 0x69, 0x73, + 0x04, 0x69, 0x75, 0x06, 0x6b, 0x73, 0x68, 0x06, + 0x6c, 0x61, 0x67, 0x04, 0x6d, 0x6f, 0x04, 0x6d, + 0x74, 0x06, 0x73, 0x68, 0x69, 0x06, 0x74, 0x7a, + 0x6d, 0x06, 0x61, 0x72, 0x73, 0x06, 0x61, 0x73, + 0x61, 0x06, 0x62, 0x65, 0x6d, 0x06, 0x62, 0x65, + 0x7a, 0x04, 0x62, 0x68, 0x04, 0x62, 0x6f, 0x06, + 0x62, 0x72, 0x78, 0x04, 0x63, 0x65, 0x06, 0x63, + 0x67, 0x67, 0x06, 0x63, 0x68, 0x72, 0x06, 0x63, + 0x6b, 0x62, 0x04, 0x64, 0x76, 0x04, 0x64, 0x7a, + 0x04, 0x65, 0x65, 0x04, 0x65, 0x6f, 0x04, 0x66, + 0x6f, 0x06, 0x66, 0x75, 0x72, 0x04, 0x66, 0x79, + 0x06, 0x67, 0x73, 0x77, 0x06, 0x67, 0x75, 0x77, + 0x04, 0x68, 0x61, 0x06, 0x68, 0x61, 0x77, 0x06, + 0x68, 0x73, 0x62, 0x04, 0x68, 0x79, 0x04, 0x69, + 0x61, 0x04, 0x69, 0x64, 0x04, 0x69, 0x67, 0x04, + 0x69, 0x69, 0x04, 0x69, 0x6f, 0x04, 0x69, 0x77, + 0x06, 0x6a, 0x62, 0x6f, 0x06, 0x6a, 0x67, 0x6f, + 0x04, 0x6a, 0x69, 0x06, 0x6a, 0x6d, 0x63, 0x04, + 0x6a, 0x76, 0x04, 0x6a, 0x77, 0x06, 0x6b, 0x61, + 0x62, 0x06, 0x6b, 0x61, 0x6a, 0x06, 0x6b, 0x63, + 0x67, 0x06, 0x6b, 0x64, 0x65, 0x06, 0x6b, 0x65, + 0x61, 0x06, 0x6b, 0x6b, 0x6a, 0x04, 0x6b, 0x6c, + 0x04, 0x6b, 0x73, 0x06, 0x6b, 0x73, 0x62, 0x04, + 0x6b, 0x75, 0x04, 0x6b, 0x77, 0x04, 0x6b, 0x79, + 0x04, 0x6c, 0x62, 0x04, 0x6c, 0x67, 0x06, 0x6c, + 0x6b, 0x74, 0x04, 0x6c, 0x6e, 0x06, 0x6d, 0x61, + 0x73, 0x04, 0x6d, 0x67, 0x06, 0x6d, 0x67, 0x6f, + 0x04, 0x6d, 0x79, 0x06, 0x6e, 0x61, 0x68, 0x06, + 0x6e, 0x61, 0x71, 0x04, 0x6e, 0x64, 0x04, 0x6e, + 0x6e, 0x06, 0x6e, 0x6e, 0x68, 0x04, 0x6e, 0x6f, + 0x06, 0x6e, 0x71, 0x6f, 0x04, 0x6e, 0x72, 0x06, + 0x6e, 0x73, 0x6f, 0x04, 0x6e, 0x79, 0x06, 0x6e, + 0x79, 0x6e, 0x04, 0x6f, 0x6d, 0x04, 0x6f, 0x73, + 0x06, 0x70, 0x61, 0x70, 0x06, 0x70, 0x72, 0x67, + 0x04, 0x70, 0x73, 0x04, 0x72, 0x6d, 0x06, 0x72, + 0x6f, 0x66, 0x08, 0x72, 0x6f, 0x6f, 0x74, 0x06, + 0x72, 0x77, 0x6b, 0x06, 0x73, 0x61, 0x68, 0x06, + 0x73, 0x61, 0x71, 0x04, 0x73, 0x63, 0x06, 0x73, + 0x63, 0x6e, 0x04, 0x73, 0x64, 0x06, 0x73, 0x64, + 0x68, 0x04, 0x73, 0x65, 0x06, 0x73, 0x65, 0x68, + 0x06, 0x73, 0x65, 0x73, 0x04, 0x73, 0x67, 0x04, + 0x73, 0x68, 0x06, 0x73, 0x6d, 0x61, 0x06, 0x73, + 0x6d, 0x69, 0x06, 0x73, 0x6d, 0x6a, 0x06, 0x73, + 0x6d, 0x6e, 0x06, 0x73, 0x6d, 0x73, 0x04, 0x73, + 0x6e, 0x04, 0x73, 0x6f, 0x04, 0x73, 0x71, 0x04, + 0x73, 0x73, 0x06, 0x73, 0x73, 0x79, 0x04, 0x73, + 0x74, 0x06, 0x73, 0x79, 0x72, 0x06, 0x74, 0x65, + 0x6f, 0x04, 0x74, 0x69, 0x06, 0x74, 0x69, 0x67, + 0x04, 0x74, 0x6b, 0x04, 0x74, 0x6c, 0x04, 0x74, + 0x6e, 0x04, 0x74, 0x6f, 0x04, 0x74, 0x73, 0x04, + 0x75, 0x67, 0x04, 0x76, 0x65, 0x04, 0x76, 0x6f, + 0x06, 0x76, 0x75, 0x6e, 0x04, 0x77, 0x61, 0x06, + 0x77, 0x61, 0x65, 0x04, 0x77, 0x6f, 0x04, 0x78, + 0x68, 0x06, 0x78, 0x6f, 0x67, 0x04, 0x79, 0x69, + 0x04, 0x79, 0x6f, 0x06, 0x79, 0x75, 0x65, 0x04, + 0x7a, 0x75, 0x24, 0x52, 0x65, 0x6c, 0x61, 0x74, + 0x69, 0x76, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x16, 0x50, 0x6c, + 0x75, 0x72, 0x61, 0x6c, 0x52, 0x75, 0x6c, 0x65, + 0x73, 0x1c, 0x69, 0x6e, 0x74, 0x6c, 0x2d, 0x62, + 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x2e, 0x6a, 0x73, + 0x02, 0x66, 0x02, 0x6d, 0x02, 0x67, 0x02, 0x68, + 0x02, 0x76, 0x02, 0x70, 0x02, 0x64, 0x02, 0x79, + 0x02, 0x62, 0x02, 0x77, 0x02, 0x6b, 0x02, 0x78, + 0x02, 0x53, 0x02, 0x6a, 0x02, 0x7a, 0x02, 0x4f, + 0x02, 0x44, 0x02, 0x54, 0x02, 0x45, 0x02, 0x46, + 0x02, 0x4e, 0x02, 0x4c, 0x02, 0x50, 0x02, 0x49, + 0x02, 0x52, 0x02, 0x5f, 0x02, 0x4d, 0x02, 0x41, + 0x02, 0x71, 0x02, 0x43, 0x02, 0x47, 0x02, 0x55, + 0x02, 0x48, 0x02, 0x42, 0x02, 0x5a, 0x02, 0x4b, + 0x02, 0x24, 0x02, 0x57, 0x02, 0x59, 0x02, 0x4a, + 0x02, 0x56, 0x02, 0x58, 0x02, 0x51, 0x04, 0x72, + 0x65, 0x04, 0x61, 0x65, 0x04, 0x69, 0x65, 0x04, + 0x6f, 0x65, 0x04, 0x6c, 0x65, 0x04, 0x75, 0x65, + 0x04, 0x66, 0x65, 0x04, 0x6d, 0x65, 0x04, 0x67, + 0x65, 0x04, 0x70, 0x65, 0x04, 0x79, 0x65, 0x04, + 0x77, 0x65, 0x04, 0x6b, 0x65, 0x04, 0x78, 0x65, + 0x04, 0x53, 0x65, 0x04, 0x6a, 0x65, 0x04, 0x7a, + 0x65, 0x04, 0x4f, 0x65, 0x04, 0x44, 0x65, 0x04, + 0x54, 0x65, 0x04, 0x45, 0x65, 0x04, 0x46, 0x65, + 0x04, 0x4e, 0x65, 0x04, 0x4c, 0x65, 0x04, 0x50, + 0x65, 0x04, 0x49, 0x65, 0x04, 0x52, 0x65, 0x10, + 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, + 0x1a, 0x72, 0x65, 0x61, 0x63, 0x74, 0x2e, 0x65, + 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x0c, 0x61, + 0x73, 0x73, 0x69, 0x67, 0x6e, 0x0c, 0x66, 0x72, + 0x65, 0x65, 0x7a, 0x65, 0x06, 0x6a, 0x73, 0x78, + 0x20, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x54, 0x6f, + 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x6f, + 0x72, 0x1c, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x43, + 0x61, 0x6c, 0x6c, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x16, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, + 0x6c, 0x61, 0x73, 0x73, 0x34, 0x64, 0x65, 0x66, + 0x69, 0x6e, 0x65, 0x45, 0x6e, 0x75, 0x6d, 0x65, + 0x72, 0x61, 0x62, 0x6c, 0x65, 0x50, 0x72, 0x6f, + 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x10, + 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, + 0x10, 0x69, 0x6e, 0x68, 0x65, 0x72, 0x69, 0x74, + 0x73, 0x2a, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6f, + 0x70, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, + 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x2c, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6f, 0x70, 0x52, + 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x57, 0x69, + 0x6c, 0x64, 0x63, 0x61, 0x72, 0x64, 0x1a, 0x6e, + 0x65, 0x77, 0x41, 0x72, 0x72, 0x6f, 0x77, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x30, 0x6f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x44, 0x65, 0x73, 0x74, 0x72, + 0x75, 0x63, 0x74, 0x75, 0x72, 0x69, 0x6e, 0x67, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x6f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x57, 0x69, 0x74, 0x68, + 0x6f, 0x75, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x65, + 0x72, 0x74, 0x69, 0x65, 0x73, 0x32, 0x70, 0x6f, + 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x43, 0x6f, + 0x6e, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, + 0x72, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x14, + 0x73, 0x65, 0x6c, 0x66, 0x47, 0x6c, 0x6f, 0x62, + 0x61, 0x6c, 0x1a, 0x73, 0x6c, 0x69, 0x63, 0x65, + 0x64, 0x54, 0x6f, 0x41, 0x72, 0x72, 0x61, 0x79, + 0x24, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x64, 0x54, + 0x6f, 0x41, 0x72, 0x72, 0x61, 0x79, 0x4c, 0x6f, + 0x6f, 0x73, 0x65, 0x2a, 0x74, 0x61, 0x67, 0x67, + 0x65, 0x64, 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, + 0x74, 0x65, 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, + 0x6c, 0x34, 0x74, 0x61, 0x67, 0x67, 0x65, 0x64, + 0x54, 0x65, 0x6d, 0x70, 0x6c, 0x61, 0x74, 0x65, + 0x4c, 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x4c, + 0x6f, 0x6f, 0x73, 0x65, 0x16, 0x74, 0x65, 0x6d, + 0x70, 0x6f, 0x72, 0x61, 0x6c, 0x52, 0x65, 0x66, + 0x22, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, + 0x6c, 0x55, 0x6e, 0x64, 0x65, 0x66, 0x69, 0x6e, + 0x65, 0x64, 0x0e, 0x74, 0x6f, 0x41, 0x72, 0x72, + 0x61, 0x79, 0x22, 0x74, 0x6f, 0x43, 0x6f, 0x6e, + 0x73, 0x75, 0x6d, 0x61, 0x62, 0x6c, 0x65, 0x41, + 0x72, 0x72, 0x61, 0x79, 0x20, 0x5f, 0x5f, 0x64, + 0x65, 0x66, 0x69, 0x6e, 0x65, 0x47, 0x65, 0x74, + 0x74, 0x65, 0x72, 0x5f, 0x5f, 0x1c, 0x68, 0x61, + 0x73, 0x4f, 0x77, 0x6e, 0x50, 0x72, 0x6f, 0x70, + 0x65, 0x72, 0x74, 0x79, 0x0e, 0x69, 0x6e, 0x64, + 0x65, 0x78, 0x4f, 0x66, 0x0c, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x0a, 0x73, 0x6c, 0x69, 0x63, + 0x65, 0x08, 0x70, 0x75, 0x73, 0x68, 0x0a, 0x73, + 0x68, 0x69, 0x66, 0x74, 0x08, 0x62, 0x69, 0x6e, + 0x64, 0x0c, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, + 0x3e, 0x28, 0x3f, 0x3a, 0x5b, 0x61, 0x2d, 0x7a, + 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x35, 0x2c, 0x38, + 0x7d, 0x7c, 0x5c, 0x64, 0x5b, 0x61, 0x2d, 0x7a, + 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x33, 0x7d, 0x29, + 0x16, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x77, + 0x79, 0x2d, 0x7a, 0x5d, 0x26, 0x28, 0x3f, 0x3a, + 0x2d, 0x5b, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, + 0x5d, 0x7b, 0x32, 0x2c, 0x38, 0x7d, 0x29, 0x2b, + 0x28, 0x78, 0x28, 0x3f, 0x3a, 0x2d, 0x5b, 0x61, + 0x2d, 0x7a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x31, + 0x2c, 0x38, 0x7d, 0x29, 0x2b, 0xa0, 0x03, 0x5e, + 0x28, 0x3f, 0x3a, 0x28, 0x3f, 0x3a, 0x5b, 0x61, + 0x2d, 0x7a, 0x5d, 0x7b, 0x32, 0x2c, 0x33, 0x7d, + 0x28, 0x3f, 0x3a, 0x2d, 0x5b, 0x61, 0x2d, 0x7a, + 0x5d, 0x7b, 0x33, 0x7d, 0x28, 0x3f, 0x3a, 0x2d, + 0x5b, 0x61, 0x2d, 0x7a, 0x5d, 0x7b, 0x33, 0x7d, + 0x29, 0x7b, 0x30, 0x2c, 0x32, 0x7d, 0x29, 0x3f, + 0x7c, 0x5b, 0x61, 0x2d, 0x7a, 0x5d, 0x7b, 0x34, + 0x7d, 0x7c, 0x5b, 0x61, 0x2d, 0x7a, 0x5d, 0x7b, + 0x35, 0x2c, 0x38, 0x7d, 0x29, 0x28, 0x3f, 0x3a, + 0x2d, 0x5b, 0x61, 0x2d, 0x7a, 0x5d, 0x7b, 0x34, + 0x7d, 0x29, 0x3f, 0x28, 0x3f, 0x3a, 0x2d, 0x28, + 0x3f, 0x3a, 0x5b, 0x61, 0x2d, 0x7a, 0x5d, 0x7b, + 0x32, 0x7d, 0x7c, 0x5c, 0x64, 0x7b, 0x33, 0x7d, + 0x29, 0x29, 0x3f, 0x28, 0x3f, 0x3a, 0x2d, 0x28, + 0x3f, 0x3a, 0x5b, 0x61, 0x2d, 0x7a, 0x30, 0x2d, + 0x39, 0x5d, 0x7b, 0x35, 0x2c, 0x38, 0x7d, 0x7c, + 0x5c, 0x64, 0x5b, 0x61, 0x2d, 0x7a, 0x30, 0x2d, + 0x39, 0x5d, 0x7b, 0x33, 0x7d, 0x29, 0x29, 0x2a, + 0x28, 0x3f, 0x3a, 0x2d, 0x5b, 0x30, 0x2d, 0x39, + 0x61, 0x2d, 0x77, 0x79, 0x2d, 0x7a, 0x5d, 0x28, + 0x3f, 0x3a, 0x2d, 0x5b, 0x61, 0x2d, 0x7a, 0x30, + 0x2d, 0x39, 0x5d, 0x7b, 0x32, 0x2c, 0x38, 0x7d, + 0x29, 0x2b, 0x29, 0x2a, 0x28, 0x3f, 0x3a, 0x2d, + 0x78, 0x28, 0x3f, 0x3a, 0x2d, 0x5b, 0x61, 0x2d, + 0x7a, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x31, 0x2c, + 0x38, 0x7d, 0x29, 0x2b, 0x29, 0x3f, 0x7c, 0x90, + 0x03, 0x7c, 0x28, 0x3f, 0x3a, 0x28, 0x3f, 0x3a, + 0x65, 0x6e, 0x2d, 0x47, 0x42, 0x2d, 0x6f, 0x65, + 0x64, 0x7c, 0x69, 0x2d, 0x28, 0x3f, 0x3a, 0x61, + 0x6d, 0x69, 0x7c, 0x62, 0x6e, 0x6e, 0x7c, 0x64, + 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x7c, 0x65, + 0x6e, 0x6f, 0x63, 0x68, 0x69, 0x61, 0x6e, 0x7c, + 0x68, 0x61, 0x6b, 0x7c, 0x6b, 0x6c, 0x69, 0x6e, + 0x67, 0x6f, 0x6e, 0x7c, 0x6c, 0x75, 0x78, 0x7c, + 0x6d, 0x69, 0x6e, 0x67, 0x6f, 0x7c, 0x6e, 0x61, + 0x76, 0x61, 0x6a, 0x6f, 0x7c, 0x70, 0x77, 0x6e, + 0x7c, 0x74, 0x61, 0x6f, 0x7c, 0x74, 0x61, 0x79, + 0x7c, 0x74, 0x73, 0x75, 0x29, 0x7c, 0x73, 0x67, + 0x6e, 0x2d, 0x28, 0x3f, 0x3a, 0x42, 0x45, 0x2d, + 0x46, 0x52, 0x7c, 0x42, 0x45, 0x2d, 0x4e, 0x4c, + 0x7c, 0x43, 0x48, 0x2d, 0x44, 0x45, 0x29, 0x29, + 0x7c, 0x28, 0x3f, 0x3a, 0x61, 0x72, 0x74, 0x2d, + 0x6c, 0x6f, 0x6a, 0x62, 0x61, 0x6e, 0x7c, 0x63, + 0x65, 0x6c, 0x2d, 0x67, 0x61, 0x75, 0x6c, 0x69, + 0x73, 0x68, 0x7c, 0x6e, 0x6f, 0x2d, 0x62, 0x6f, + 0x6b, 0x7c, 0x6e, 0x6f, 0x2d, 0x6e, 0x79, 0x6e, + 0x7c, 0x7a, 0x68, 0x2d, 0x28, 0x3f, 0x3a, 0x67, + 0x75, 0x6f, 0x79, 0x75, 0x7c, 0x68, 0x61, 0x6b, + 0x6b, 0x61, 0x7c, 0x6d, 0x69, 0x6e, 0x7c, 0x6d, + 0x69, 0x6e, 0x2d, 0x6e, 0x61, 0x6e, 0x7c, 0x78, + 0x69, 0x61, 0x6e, 0x67, 0x29, 0x29, 0x29, 0x29, + 0x24, 0x16, 0x5e, 0x28, 0x3f, 0x21, 0x78, 0x29, + 0x2e, 0x2a, 0x3f, 0x2d, 0x28, 0x32, 0x29, 0x2d, + 0x28, 0x3f, 0x3a, 0x5c, 0x77, 0x7b, 0x34, 0x2c, + 0x38, 0x7d, 0x2d, 0x28, 0x3f, 0x21, 0x78, 0x2d, + 0x29, 0x29, 0x2a, 0x5c, 0x31, 0x5c, 0x62, 0x56, + 0x5e, 0x28, 0x3f, 0x21, 0x78, 0x29, 0x2e, 0x2a, + 0x3f, 0x2d, 0x28, 0x5b, 0x30, 0x2d, 0x39, 0x61, + 0x2d, 0x77, 0x79, 0x2d, 0x7a, 0x5d, 0x29, 0x2d, + 0x28, 0x3f, 0x3a, 0x5c, 0x77, 0x2b, 0x2d, 0x28, + 0x3f, 0x21, 0x78, 0x2d, 0x29, 0x29, 0x2a, 0x5c, + 0x31, 0x5c, 0x62, 0x02, 0x2d, 0x14, 0x61, 0x72, + 0x74, 0x2d, 0x6c, 0x6f, 0x6a, 0x62, 0x61, 0x6e, + 0x06, 0x61, 0x6d, 0x69, 0x0a, 0x69, 0x2d, 0x61, + 0x6d, 0x69, 0x06, 0x62, 0x6e, 0x6e, 0x0a, 0x69, + 0x2d, 0x62, 0x6e, 0x6e, 0x06, 0x68, 0x61, 0x6b, + 0x0a, 0x69, 0x2d, 0x68, 0x61, 0x6b, 0x06, 0x74, + 0x6c, 0x68, 0x12, 0x69, 0x2d, 0x6b, 0x6c, 0x69, + 0x6e, 0x67, 0x6f, 0x6e, 0x0a, 0x69, 0x2d, 0x6c, + 0x75, 0x78, 0x04, 0x6e, 0x76, 0x10, 0x69, 0x2d, + 0x6e, 0x61, 0x76, 0x61, 0x6a, 0x6f, 0x06, 0x70, + 0x77, 0x6e, 0x0a, 0x69, 0x2d, 0x70, 0x77, 0x6e, + 0x06, 0x74, 0x61, 0x6f, 0x0a, 0x69, 0x2d, 0x74, + 0x61, 0x6f, 0x06, 0x74, 0x61, 0x79, 0x0a, 0x69, + 0x2d, 0x74, 0x61, 0x79, 0x06, 0x74, 0x73, 0x75, + 0x0a, 0x69, 0x2d, 0x74, 0x73, 0x75, 0x0c, 0x6e, + 0x6f, 0x2d, 0x62, 0x6f, 0x6b, 0x0c, 0x6e, 0x6f, + 0x2d, 0x6e, 0x79, 0x6e, 0x06, 0x73, 0x66, 0x62, + 0x12, 0x73, 0x67, 0x6e, 0x2d, 0x42, 0x45, 0x2d, + 0x46, 0x52, 0x06, 0x76, 0x67, 0x74, 0x12, 0x73, + 0x67, 0x6e, 0x2d, 0x42, 0x45, 0x2d, 0x4e, 0x4c, + 0x06, 0x73, 0x67, 0x67, 0x12, 0x73, 0x67, 0x6e, + 0x2d, 0x43, 0x48, 0x2d, 0x44, 0x45, 0x06, 0x63, + 0x6d, 0x6e, 0x10, 0x7a, 0x68, 0x2d, 0x67, 0x75, + 0x6f, 0x79, 0x75, 0x10, 0x7a, 0x68, 0x2d, 0x68, + 0x61, 0x6b, 0x6b, 0x61, 0x06, 0x6e, 0x61, 0x6e, + 0x14, 0x7a, 0x68, 0x2d, 0x6d, 0x69, 0x6e, 0x2d, + 0x6e, 0x61, 0x6e, 0x06, 0x68, 0x73, 0x6e, 0x10, + 0x7a, 0x68, 0x2d, 0x78, 0x69, 0x61, 0x6e, 0x67, + 0x06, 0x62, 0x7a, 0x73, 0x0c, 0x73, 0x67, 0x6e, + 0x2d, 0x42, 0x52, 0x06, 0x63, 0x73, 0x6e, 0x0c, + 0x73, 0x67, 0x6e, 0x2d, 0x43, 0x4f, 0x06, 0x67, + 0x73, 0x67, 0x0c, 0x73, 0x67, 0x6e, 0x2d, 0x44, + 0x45, 0x06, 0x64, 0x73, 0x6c, 0x0c, 0x73, 0x67, + 0x6e, 0x2d, 0x44, 0x4b, 0x06, 0x73, 0x73, 0x70, + 0x0c, 0x73, 0x67, 0x6e, 0x2d, 0x45, 0x53, 0x06, + 0x66, 0x73, 0x6c, 0x0c, 0x73, 0x67, 0x6e, 0x2d, + 0x46, 0x52, 0x06, 0x62, 0x66, 0x69, 0x0c, 0x73, + 0x67, 0x6e, 0x2d, 0x47, 0x42, 0x06, 0x67, 0x73, + 0x73, 0x0c, 0x73, 0x67, 0x6e, 0x2d, 0x47, 0x52, + 0x06, 0x69, 0x73, 0x67, 0x0c, 0x73, 0x67, 0x6e, + 0x2d, 0x49, 0x45, 0x06, 0x69, 0x73, 0x65, 0x0c, + 0x73, 0x67, 0x6e, 0x2d, 0x49, 0x54, 0x06, 0x6a, + 0x73, 0x6c, 0x0c, 0x73, 0x67, 0x6e, 0x2d, 0x4a, + 0x50, 0x06, 0x6d, 0x66, 0x73, 0x0c, 0x73, 0x67, + 0x6e, 0x2d, 0x4d, 0x58, 0x06, 0x6e, 0x63, 0x73, + 0x0c, 0x73, 0x67, 0x6e, 0x2d, 0x4e, 0x49, 0x06, + 0x64, 0x73, 0x65, 0x0c, 0x73, 0x67, 0x6e, 0x2d, + 0x4e, 0x4c, 0x06, 0x6e, 0x73, 0x6c, 0x0c, 0x73, + 0x67, 0x6e, 0x2d, 0x4e, 0x4f, 0x06, 0x70, 0x73, + 0x72, 0x0c, 0x73, 0x67, 0x6e, 0x2d, 0x50, 0x54, + 0x06, 0x73, 0x77, 0x6c, 0x0c, 0x73, 0x67, 0x6e, + 0x2d, 0x53, 0x45, 0x06, 0x61, 0x73, 0x65, 0x0c, + 0x73, 0x67, 0x6e, 0x2d, 0x55, 0x53, 0x06, 0x73, + 0x66, 0x73, 0x0c, 0x73, 0x67, 0x6e, 0x2d, 0x5a, + 0x41, 0x0c, 0x7a, 0x68, 0x2d, 0x63, 0x6d, 0x6e, + 0x10, 0x63, 0x6d, 0x6e, 0x2d, 0x48, 0x61, 0x6e, + 0x73, 0x16, 0x7a, 0x68, 0x2d, 0x63, 0x6d, 0x6e, + 0x2d, 0x48, 0x61, 0x6e, 0x73, 0x10, 0x63, 0x6d, + 0x6e, 0x2d, 0x48, 0x61, 0x6e, 0x74, 0x16, 0x7a, + 0x68, 0x2d, 0x63, 0x6d, 0x6e, 0x2d, 0x48, 0x61, + 0x6e, 0x74, 0x06, 0x67, 0x61, 0x6e, 0x0c, 0x7a, + 0x68, 0x2d, 0x67, 0x61, 0x6e, 0x06, 0x77, 0x75, + 0x75, 0x0c, 0x7a, 0x68, 0x2d, 0x77, 0x75, 0x75, + 0x0c, 0x7a, 0x68, 0x2d, 0x79, 0x75, 0x65, 0x08, + 0x74, 0x61, 0x67, 0x73, 0x04, 0x4d, 0x4d, 0x04, + 0x42, 0x55, 0x04, 0x44, 0x45, 0x04, 0x44, 0x44, + 0x04, 0x46, 0x52, 0x04, 0x46, 0x58, 0x04, 0x54, + 0x4c, 0x04, 0x54, 0x50, 0x04, 0x59, 0x45, 0x04, + 0x59, 0x44, 0x04, 0x43, 0x44, 0x04, 0x5a, 0x52, + 0x0e, 0x61, 0x6c, 0x61, 0x6c, 0x63, 0x39, 0x37, + 0x0c, 0x68, 0x65, 0x70, 0x6c, 0x6f, 0x63, 0x06, + 0x6e, 0x75, 0x6e, 0x06, 0x61, 0x79, 0x78, 0x06, + 0x64, 0x72, 0x6c, 0x06, 0x62, 0x6a, 0x64, 0x06, + 0x72, 0x6b, 0x69, 0x06, 0x63, 0x63, 0x71, 0x06, + 0x6d, 0x6f, 0x6d, 0x06, 0x63, 0x6a, 0x72, 0x06, + 0x63, 0x6d, 0x72, 0x06, 0x63, 0x6b, 0x61, 0x06, + 0x78, 0x63, 0x68, 0x06, 0x63, 0x6d, 0x6b, 0x06, + 0x6b, 0x68, 0x6b, 0x06, 0x64, 0x72, 0x68, 0x06, + 0x70, 0x72, 0x73, 0x06, 0x64, 0x72, 0x77, 0x06, + 0x64, 0x65, 0x76, 0x06, 0x67, 0x61, 0x76, 0x06, + 0x6a, 0x61, 0x6c, 0x06, 0x68, 0x72, 0x72, 0x06, + 0x6f, 0x70, 0x61, 0x06, 0x69, 0x62, 0x69, 0x06, + 0x6b, 0x6d, 0x6c, 0x06, 0x6b, 0x67, 0x68, 0x06, + 0x70, 0x70, 0x72, 0x06, 0x6c, 0x63, 0x71, 0x06, + 0x6d, 0x72, 0x79, 0x06, 0x6d, 0x73, 0x74, 0x06, + 0x6d, 0x79, 0x74, 0x06, 0x68, 0x6c, 0x65, 0x06, + 0x73, 0x63, 0x61, 0x06, 0x72, 0x61, 0x73, 0x06, + 0x74, 0x69, 0x65, 0x06, 0x74, 0x77, 0x6d, 0x06, + 0x74, 0x6b, 0x6b, 0x06, 0x77, 0x65, 0x6f, 0x06, + 0x74, 0x6c, 0x77, 0x06, 0x74, 0x6e, 0x66, 0x06, + 0x79, 0x62, 0x64, 0x06, 0x6c, 0x72, 0x72, 0x06, + 0x79, 0x6d, 0x61, 0x0e, 0x73, 0x75, 0x62, 0x74, + 0x61, 0x67, 0x73, 0x06, 0x61, 0x61, 0x6f, 0x06, + 0x61, 0x62, 0x68, 0x06, 0x61, 0x62, 0x76, 0x06, + 0x61, 0x63, 0x6d, 0x06, 0x61, 0x63, 0x71, 0x06, + 0x61, 0x63, 0x77, 0x06, 0x61, 0x63, 0x78, 0x06, + 0x61, 0x63, 0x79, 0x06, 0x61, 0x64, 0x66, 0x06, + 0x61, 0x64, 0x73, 0x06, 0x73, 0x67, 0x6e, 0x06, + 0x61, 0x65, 0x62, 0x06, 0x61, 0x65, 0x63, 0x06, + 0x61, 0x65, 0x64, 0x06, 0x61, 0x65, 0x6e, 0x06, + 0x61, 0x66, 0x62, 0x06, 0x61, 0x66, 0x67, 0x06, + 0x61, 0x6a, 0x70, 0x06, 0x61, 0x70, 0x63, 0x06, + 0x61, 0x70, 0x64, 0x06, 0x61, 0x72, 0x62, 0x06, + 0x61, 0x72, 0x71, 0x06, 0x61, 0x72, 0x79, 0x06, + 0x61, 0x72, 0x7a, 0x06, 0x61, 0x73, 0x66, 0x06, + 0x61, 0x73, 0x70, 0x06, 0x61, 0x73, 0x71, 0x06, + 0x61, 0x73, 0x77, 0x06, 0x61, 0x75, 0x7a, 0x06, + 0x61, 0x76, 0x6c, 0x06, 0x61, 0x79, 0x68, 0x06, + 0x61, 0x79, 0x6c, 0x06, 0x61, 0x79, 0x6e, 0x06, + 0x61, 0x79, 0x70, 0x06, 0x62, 0x62, 0x7a, 0x06, + 0x62, 0x66, 0x6b, 0x06, 0x62, 0x6a, 0x6e, 0x06, + 0x62, 0x6f, 0x67, 0x06, 0x62, 0x71, 0x6e, 0x06, + 0x62, 0x71, 0x79, 0x06, 0x62, 0x74, 0x6a, 0x06, + 0x62, 0x76, 0x65, 0x06, 0x62, 0x76, 0x6c, 0x06, + 0x62, 0x76, 0x75, 0x06, 0x63, 0x64, 0x6f, 0x06, + 0x63, 0x64, 0x73, 0x06, 0x63, 0x6a, 0x79, 0x06, + 0x63, 0x6f, 0x61, 0x06, 0x63, 0x70, 0x78, 0x06, + 0x63, 0x73, 0x63, 0x06, 0x63, 0x73, 0x64, 0x06, + 0x63, 0x73, 0x65, 0x06, 0x63, 0x73, 0x66, 0x06, + 0x63, 0x73, 0x67, 0x06, 0x63, 0x73, 0x6c, 0x06, + 0x63, 0x73, 0x71, 0x06, 0x63, 0x73, 0x72, 0x06, + 0x63, 0x7a, 0x68, 0x06, 0x63, 0x7a, 0x6f, 0x06, + 0x64, 0x6f, 0x71, 0x06, 0x64, 0x75, 0x70, 0x06, + 0x65, 0x63, 0x73, 0x06, 0x65, 0x73, 0x6c, 0x06, + 0x65, 0x73, 0x6e, 0x06, 0x65, 0x73, 0x6f, 0x06, + 0x65, 0x74, 0x68, 0x06, 0x66, 0x63, 0x73, 0x06, + 0x66, 0x73, 0x65, 0x06, 0x66, 0x73, 0x73, 0x06, + 0x67, 0x64, 0x73, 0x06, 0x67, 0x6f, 0x6d, 0x06, + 0x6b, 0x6f, 0x6b, 0x06, 0x67, 0x73, 0x65, 0x06, + 0x67, 0x73, 0x6d, 0x06, 0x67, 0x75, 0x73, 0x06, + 0x68, 0x61, 0x62, 0x06, 0x68, 0x61, 0x66, 0x06, + 0x68, 0x64, 0x73, 0x06, 0x68, 0x6a, 0x69, 0x06, + 0x68, 0x6b, 0x73, 0x06, 0x68, 0x6f, 0x73, 0x06, + 0x68, 0x70, 0x73, 0x06, 0x68, 0x73, 0x68, 0x06, + 0x68, 0x73, 0x6c, 0x06, 0x69, 0x63, 0x6c, 0x06, + 0x69, 0x6c, 0x73, 0x06, 0x69, 0x6e, 0x6c, 0x06, + 0x69, 0x6e, 0x73, 0x06, 0x69, 0x73, 0x72, 0x06, + 0x6a, 0x61, 0x6b, 0x06, 0x6a, 0x61, 0x78, 0x06, + 0x6a, 0x63, 0x73, 0x06, 0x6a, 0x68, 0x73, 0x06, + 0x6a, 0x6c, 0x73, 0x06, 0x6a, 0x6f, 0x73, 0x06, + 0x6a, 0x75, 0x73, 0x06, 0x6b, 0x67, 0x69, 0x06, + 0x6b, 0x6e, 0x6e, 0x06, 0x6b, 0x76, 0x62, 0x06, + 0x6b, 0x76, 0x6b, 0x06, 0x6b, 0x76, 0x72, 0x06, + 0x6b, 0x78, 0x64, 0x06, 0x6c, 0x62, 0x73, 0x06, + 0x6c, 0x63, 0x65, 0x06, 0x6c, 0x63, 0x66, 0x06, + 0x6c, 0x69, 0x77, 0x06, 0x6c, 0x6c, 0x73, 0x06, + 0x6c, 0x73, 0x67, 0x06, 0x6c, 0x73, 0x6c, 0x06, + 0x6c, 0x73, 0x6f, 0x06, 0x6c, 0x73, 0x70, 0x06, + 0x6c, 0x73, 0x74, 0x06, 0x6c, 0x73, 0x79, 0x06, + 0x6c, 0x74, 0x67, 0x06, 0x6c, 0x76, 0x73, 0x06, + 0x6c, 0x7a, 0x68, 0x06, 0x6d, 0x61, 0x78, 0x06, + 0x6d, 0x64, 0x6c, 0x06, 0x6d, 0x65, 0x6f, 0x06, + 0x6d, 0x66, 0x61, 0x06, 0x6d, 0x66, 0x62, 0x06, + 0x6d, 0x69, 0x6e, 0x06, 0x6d, 0x6e, 0x70, 0x06, + 0x6d, 0x71, 0x67, 0x06, 0x6d, 0x72, 0x65, 0x06, + 0x6d, 0x73, 0x64, 0x06, 0x6d, 0x73, 0x69, 0x06, + 0x6d, 0x73, 0x72, 0x06, 0x6d, 0x75, 0x69, 0x06, + 0x6d, 0x7a, 0x63, 0x06, 0x6d, 0x7a, 0x67, 0x06, + 0x6d, 0x7a, 0x79, 0x06, 0x6e, 0x62, 0x73, 0x06, + 0x6e, 0x73, 0x69, 0x06, 0x6e, 0x73, 0x70, 0x06, + 0x6e, 0x73, 0x72, 0x06, 0x6e, 0x7a, 0x73, 0x06, + 0x6f, 0x6b, 0x6c, 0x06, 0x6f, 0x72, 0x6e, 0x06, + 0x6f, 0x72, 0x73, 0x06, 0x70, 0x65, 0x6c, 0x06, + 0x70, 0x67, 0x61, 0x06, 0x70, 0x6b, 0x73, 0x06, + 0x70, 0x72, 0x6c, 0x06, 0x70, 0x72, 0x7a, 0x06, + 0x70, 0x73, 0x63, 0x06, 0x70, 0x73, 0x64, 0x06, + 0x70, 0x73, 0x65, 0x06, 0x70, 0x73, 0x67, 0x06, + 0x70, 0x73, 0x6c, 0x06, 0x70, 0x73, 0x6f, 0x06, + 0x70, 0x73, 0x70, 0x06, 0x70, 0x79, 0x73, 0x06, + 0x72, 0x6d, 0x73, 0x06, 0x72, 0x73, 0x69, 0x06, + 0x72, 0x73, 0x6c, 0x06, 0x73, 0x64, 0x6c, 0x06, + 0x73, 0x67, 0x78, 0x06, 0x73, 0x68, 0x75, 0x06, + 0x73, 0x6c, 0x66, 0x06, 0x73, 0x6c, 0x73, 0x06, + 0x73, 0x71, 0x6b, 0x06, 0x73, 0x71, 0x73, 0x06, + 0x73, 0x73, 0x68, 0x06, 0x73, 0x73, 0x72, 0x06, + 0x73, 0x76, 0x6b, 0x06, 0x73, 0x77, 0x63, 0x06, + 0x73, 0x77, 0x68, 0x06, 0x73, 0x79, 0x79, 0x06, + 0x74, 0x6d, 0x77, 0x06, 0x74, 0x73, 0x65, 0x06, + 0x74, 0x73, 0x6d, 0x06, 0x74, 0x73, 0x71, 0x06, + 0x74, 0x73, 0x73, 0x06, 0x74, 0x73, 0x79, 0x06, + 0x74, 0x7a, 0x61, 0x06, 0x75, 0x67, 0x6e, 0x06, + 0x75, 0x67, 0x79, 0x06, 0x75, 0x6b, 0x6c, 0x06, + 0x75, 0x6b, 0x73, 0x06, 0x75, 0x72, 0x6b, 0x06, + 0x75, 0x7a, 0x6e, 0x06, 0x75, 0x7a, 0x73, 0x06, + 0x76, 0x6b, 0x6b, 0x06, 0x76, 0x6b, 0x74, 0x06, + 0x76, 0x73, 0x69, 0x06, 0x76, 0x73, 0x6c, 0x06, + 0x76, 0x73, 0x76, 0x06, 0x78, 0x6b, 0x69, 0x06, + 0x78, 0x6d, 0x6c, 0x06, 0x78, 0x6d, 0x6d, 0x06, + 0x78, 0x6d, 0x73, 0x06, 0x79, 0x64, 0x73, 0x06, + 0x79, 0x73, 0x6c, 0x06, 0x7a, 0x69, 0x62, 0x06, + 0x7a, 0x6c, 0x6d, 0x06, 0x7a, 0x6d, 0x69, 0x06, + 0x7a, 0x73, 0x6c, 0x06, 0x7a, 0x73, 0x6d, 0x0e, + 0x65, 0x78, 0x74, 0x4c, 0x61, 0x6e, 0x67, 0x26, + 0x67, 0x65, 0x74, 0x43, 0x61, 0x6e, 0x6f, 0x6e, + 0x69, 0x63, 0x61, 0x6c, 0x4c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x73, 0x06, 0x42, 0x48, 0x44, 0x06, + 0x42, 0x59, 0x52, 0x06, 0x58, 0x4f, 0x46, 0x06, + 0x42, 0x49, 0x46, 0x06, 0x58, 0x41, 0x46, 0x06, + 0x43, 0x4c, 0x46, 0x06, 0x43, 0x4c, 0x50, 0x06, + 0x4b, 0x4d, 0x46, 0x06, 0x44, 0x4a, 0x46, 0x06, + 0x58, 0x50, 0x46, 0x06, 0x47, 0x4e, 0x46, 0x06, + 0x49, 0x53, 0x4b, 0x06, 0x49, 0x51, 0x44, 0x06, + 0x4a, 0x50, 0x59, 0x06, 0x4a, 0x4f, 0x44, 0x06, + 0x4b, 0x52, 0x57, 0x06, 0x4b, 0x57, 0x44, 0x06, + 0x4c, 0x59, 0x44, 0x06, 0x4f, 0x4d, 0x52, 0x06, + 0x50, 0x59, 0x47, 0x06, 0x52, 0x57, 0x46, 0x06, + 0x54, 0x4e, 0x44, 0x06, 0x55, 0x47, 0x58, 0x06, + 0x55, 0x59, 0x49, 0x06, 0x56, 0x55, 0x56, 0x06, + 0x56, 0x4e, 0x44, 0x18, 0x4e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x28, 0x5b, 0x5b, 0x61, 0x76, 0x61, 0x69, 0x6c, + 0x61, 0x62, 0x6c, 0x65, 0x4c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x73, 0x5d, 0x5d, 0x04, 0x6e, 0x75, + 0x32, 0x5b, 0x5b, 0x72, 0x65, 0x6c, 0x65, 0x76, + 0x61, 0x6e, 0x74, 0x45, 0x78, 0x74, 0x65, 0x6e, + 0x73, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x73, + 0x5d, 0x5d, 0x1c, 0x5b, 0x5b, 0x6c, 0x6f, 0x63, + 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x5d, + 0x5d, 0x24, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, + 0x74, 0x65, 0x64, 0x4c, 0x6f, 0x63, 0x61, 0x6c, + 0x65, 0x73, 0x4f, 0x66, 0x08, 0x63, 0x61, 0x6c, + 0x6c, 0x0c, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x1a, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x54, + 0x6f, 0x50, 0x61, 0x72, 0x74, 0x73, 0x03, 0x60, + 0x06, 0x03, 0x61, 0x06, 0x03, 0x62, 0x06, 0x03, + 0x63, 0x06, 0x03, 0x64, 0x06, 0x03, 0x65, 0x06, + 0x03, 0x66, 0x06, 0x03, 0x67, 0x06, 0x03, 0x68, + 0x06, 0x03, 0x69, 0x06, 0x08, 0x61, 0x72, 0x61, + 0x62, 0x03, 0xf0, 0x06, 0x03, 0xf1, 0x06, 0x03, + 0xf2, 0x06, 0x03, 0xf3, 0x06, 0x03, 0xf4, 0x06, + 0x03, 0xf5, 0x06, 0x03, 0xf6, 0x06, 0x03, 0xf7, + 0x06, 0x03, 0xf8, 0x06, 0x03, 0xf9, 0x06, 0x0e, + 0x61, 0x72, 0x61, 0x62, 0x65, 0x78, 0x74, 0x03, + 0x50, 0x1b, 0x03, 0x51, 0x1b, 0x03, 0x52, 0x1b, + 0x03, 0x53, 0x1b, 0x03, 0x54, 0x1b, 0x03, 0x55, + 0x1b, 0x03, 0x56, 0x1b, 0x03, 0x57, 0x1b, 0x03, + 0x58, 0x1b, 0x03, 0x59, 0x1b, 0x08, 0x62, 0x61, + 0x6c, 0x69, 0x03, 0xe6, 0x09, 0x03, 0xe7, 0x09, + 0x03, 0xe8, 0x09, 0x03, 0xe9, 0x09, 0x03, 0xea, + 0x09, 0x03, 0xeb, 0x09, 0x03, 0xec, 0x09, 0x03, + 0xed, 0x09, 0x03, 0xee, 0x09, 0x03, 0xef, 0x09, + 0x08, 0x62, 0x65, 0x6e, 0x67, 0x03, 0x66, 0x09, + 0x03, 0x67, 0x09, 0x03, 0x68, 0x09, 0x03, 0x69, + 0x09, 0x03, 0x6a, 0x09, 0x03, 0x6b, 0x09, 0x03, + 0x6c, 0x09, 0x03, 0x6d, 0x09, 0x03, 0x6e, 0x09, + 0x03, 0x6f, 0x09, 0x08, 0x64, 0x65, 0x76, 0x61, + 0x03, 0x10, 0xff, 0x03, 0x11, 0xff, 0x03, 0x12, + 0xff, 0x03, 0x13, 0xff, 0x03, 0x14, 0xff, 0x03, + 0x15, 0xff, 0x03, 0x16, 0xff, 0x03, 0x17, 0xff, + 0x03, 0x18, 0xff, 0x03, 0x19, 0xff, 0x10, 0x66, + 0x75, 0x6c, 0x6c, 0x77, 0x69, 0x64, 0x65, 0x03, + 0xe6, 0x0a, 0x03, 0xe7, 0x0a, 0x03, 0xe8, 0x0a, + 0x03, 0xe9, 0x0a, 0x03, 0xea, 0x0a, 0x03, 0xeb, + 0x0a, 0x03, 0xec, 0x0a, 0x03, 0xed, 0x0a, 0x03, + 0xee, 0x0a, 0x03, 0xef, 0x0a, 0x08, 0x67, 0x75, + 0x6a, 0x72, 0x03, 0x66, 0x0a, 0x03, 0x67, 0x0a, + 0x03, 0x68, 0x0a, 0x03, 0x69, 0x0a, 0x03, 0x6a, + 0x0a, 0x03, 0x6b, 0x0a, 0x03, 0x6c, 0x0a, 0x03, + 0x6d, 0x0a, 0x03, 0x6e, 0x0a, 0x03, 0x6f, 0x0a, + 0x08, 0x67, 0x75, 0x72, 0x75, 0x03, 0x07, 0x30, + 0x03, 0x00, 0x4e, 0x03, 0x8c, 0x4e, 0x03, 0x09, + 0x4e, 0x03, 0xdb, 0x56, 0x03, 0x94, 0x4e, 0x03, + 0x6d, 0x51, 0x03, 0x03, 0x4e, 0x03, 0x6b, 0x51, + 0x03, 0x5d, 0x4e, 0x0e, 0x68, 0x61, 0x6e, 0x69, + 0x64, 0x65, 0x63, 0x03, 0xe0, 0x17, 0x03, 0xe1, + 0x17, 0x03, 0xe2, 0x17, 0x03, 0xe3, 0x17, 0x03, + 0xe4, 0x17, 0x03, 0xe5, 0x17, 0x03, 0xe6, 0x17, + 0x03, 0xe7, 0x17, 0x03, 0xe8, 0x17, 0x03, 0xe9, + 0x17, 0x08, 0x6b, 0x68, 0x6d, 0x72, 0x03, 0xe6, + 0x0c, 0x03, 0xe7, 0x0c, 0x03, 0xe8, 0x0c, 0x03, + 0xe9, 0x0c, 0x03, 0xea, 0x0c, 0x03, 0xeb, 0x0c, + 0x03, 0xec, 0x0c, 0x03, 0xed, 0x0c, 0x03, 0xee, + 0x0c, 0x03, 0xef, 0x0c, 0x08, 0x6b, 0x6e, 0x64, + 0x61, 0x03, 0xd0, 0x0e, 0x03, 0xd1, 0x0e, 0x03, + 0xd2, 0x0e, 0x03, 0xd3, 0x0e, 0x03, 0xd4, 0x0e, + 0x03, 0xd5, 0x0e, 0x03, 0xd6, 0x0e, 0x03, 0xd7, + 0x0e, 0x03, 0xd8, 0x0e, 0x03, 0xd9, 0x0e, 0x08, + 0x6c, 0x61, 0x6f, 0x6f, 0x08, 0x6c, 0x61, 0x74, + 0x6e, 0x03, 0x46, 0x19, 0x03, 0x47, 0x19, 0x03, + 0x48, 0x19, 0x03, 0x49, 0x19, 0x03, 0x4a, 0x19, + 0x03, 0x4b, 0x19, 0x03, 0x4c, 0x19, 0x03, 0x4d, + 0x19, 0x03, 0x4e, 0x19, 0x03, 0x4f, 0x19, 0x08, + 0x6c, 0x69, 0x6d, 0x62, 0x03, 0x66, 0x0d, 0x03, + 0x67, 0x0d, 0x03, 0x68, 0x0d, 0x03, 0x69, 0x0d, + 0x03, 0x6a, 0x0d, 0x03, 0x6b, 0x0d, 0x03, 0x6c, + 0x0d, 0x03, 0x6d, 0x0d, 0x03, 0x6e, 0x0d, 0x03, + 0x6f, 0x0d, 0x08, 0x6d, 0x6c, 0x79, 0x6d, 0x03, + 0x10, 0x18, 0x03, 0x11, 0x18, 0x03, 0x12, 0x18, + 0x03, 0x13, 0x18, 0x03, 0x14, 0x18, 0x03, 0x15, + 0x18, 0x03, 0x16, 0x18, 0x03, 0x17, 0x18, 0x03, + 0x18, 0x18, 0x03, 0x19, 0x18, 0x08, 0x6d, 0x6f, + 0x6e, 0x67, 0x03, 0x40, 0x10, 0x03, 0x41, 0x10, + 0x03, 0x42, 0x10, 0x03, 0x43, 0x10, 0x03, 0x44, + 0x10, 0x03, 0x45, 0x10, 0x03, 0x46, 0x10, 0x03, + 0x47, 0x10, 0x03, 0x48, 0x10, 0x03, 0x49, 0x10, + 0x08, 0x6d, 0x79, 0x6d, 0x72, 0x03, 0x66, 0x0b, + 0x03, 0x67, 0x0b, 0x03, 0x68, 0x0b, 0x03, 0x69, + 0x0b, 0x03, 0x6a, 0x0b, 0x03, 0x6b, 0x0b, 0x03, + 0x6c, 0x0b, 0x03, 0x6d, 0x0b, 0x03, 0x6e, 0x0b, + 0x03, 0x6f, 0x0b, 0x08, 0x6f, 0x72, 0x79, 0x61, + 0x03, 0xe6, 0x0b, 0x03, 0xe7, 0x0b, 0x03, 0xe8, + 0x0b, 0x03, 0xe9, 0x0b, 0x03, 0xea, 0x0b, 0x03, + 0xeb, 0x0b, 0x03, 0xec, 0x0b, 0x03, 0xed, 0x0b, + 0x03, 0xee, 0x0b, 0x03, 0xef, 0x0b, 0x0e, 0x74, + 0x61, 0x6d, 0x6c, 0x64, 0x65, 0x63, 0x03, 0x66, + 0x0c, 0x03, 0x67, 0x0c, 0x03, 0x68, 0x0c, 0x03, + 0x69, 0x0c, 0x03, 0x6a, 0x0c, 0x03, 0x6b, 0x0c, + 0x03, 0x6c, 0x0c, 0x03, 0x6d, 0x0c, 0x03, 0x6e, + 0x0c, 0x03, 0x6f, 0x0c, 0x08, 0x74, 0x65, 0x6c, + 0x75, 0x03, 0x50, 0x0e, 0x03, 0x51, 0x0e, 0x03, + 0x52, 0x0e, 0x03, 0x53, 0x0e, 0x03, 0x54, 0x0e, + 0x03, 0x55, 0x0e, 0x03, 0x56, 0x0e, 0x03, 0x57, + 0x0e, 0x03, 0x58, 0x0e, 0x03, 0x59, 0x0e, 0x08, + 0x74, 0x68, 0x61, 0x69, 0x03, 0x20, 0x0f, 0x03, + 0x21, 0x0f, 0x03, 0x22, 0x0f, 0x03, 0x23, 0x0f, + 0x03, 0x24, 0x0f, 0x03, 0x25, 0x0f, 0x03, 0x26, + 0x0f, 0x03, 0x27, 0x0f, 0x03, 0x28, 0x0f, 0x03, + 0x29, 0x0f, 0x08, 0x74, 0x69, 0x62, 0x74, 0x1e, + 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, + 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x06, + 0x65, 0x72, 0x61, 0x08, 0x79, 0x65, 0x61, 0x72, + 0x0a, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x06, 0x64, + 0x61, 0x79, 0x0e, 0x77, 0x65, 0x65, 0x6b, 0x64, + 0x61, 0x79, 0x0e, 0x71, 0x75, 0x61, 0x72, 0x74, + 0x65, 0x72, 0x08, 0x68, 0x6f, 0x75, 0x72, 0x0c, + 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x0c, 0x73, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x0c, 0x68, 0x6f, + 0x75, 0x72, 0x31, 0x32, 0x18, 0x74, 0x69, 0x6d, + 0x65, 0x5a, 0x6f, 0x6e, 0x65, 0x4e, 0x61, 0x6d, + 0x65, 0x0e, 0x6e, 0x75, 0x6d, 0x65, 0x72, 0x69, + 0x63, 0x0e, 0x32, 0x2d, 0x64, 0x69, 0x67, 0x69, + 0x74, 0x04, 0x6d, 0x6d, 0x04, 0x79, 0x79, 0x04, + 0x64, 0x64, 0x04, 0x4c, 0x4c, 0x0a, 0x4c, 0x4c, + 0x4c, 0x4c, 0x4c, 0x0c, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x06, 0x4c, 0x4c, 0x4c, 0x0a, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x08, 0x4c, 0x4c, 0x4c, + 0x4c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x0a, 0x63, + 0x63, 0x63, 0x63, 0x63, 0x06, 0x63, 0x63, 0x63, + 0x08, 0x63, 0x63, 0x63, 0x63, 0x1c, 0x44, 0x61, + 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x2e, 0x5f, 0x5f, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x53, 0x65, 0x6e, + 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x50, 0x72, + 0x6f, 0x74, 0x6f, 0x73, 0x24, 0x74, 0x6f, 0x4c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, + 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x24, + 0x74, 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x18, 0x64, 0x65, 0x66, 0x61, 0x75, + 0x6c, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x73, 0x10, + 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, + 0x10, 0x24, 0x24, 0x74, 0x79, 0x70, 0x65, 0x6f, + 0x66, 0x08, 0x74, 0x79, 0x70, 0x65, 0x06, 0x6b, + 0x65, 0x79, 0x06, 0x72, 0x65, 0x66, 0x0a, 0x70, + 0x72, 0x6f, 0x70, 0x73, 0x0c, 0x5f, 0x6f, 0x77, + 0x6e, 0x65, 0x72, 0x0e, 0x69, 0x73, 0x41, 0x72, + 0x72, 0x61, 0x79, 0x68, 0x49, 0x6e, 0x76, 0x61, + 0x6c, 0x69, 0x64, 0x20, 0x61, 0x74, 0x74, 0x65, + 0x6d, 0x70, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x64, + 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, + 0x72, 0x65, 0x20, 0x6e, 0x6f, 0x6e, 0x2d, 0x69, + 0x74, 0x65, 0x72, 0x61, 0x62, 0x6c, 0x65, 0x20, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x42, 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x20, + 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x61, 0x20, 0x63, + 0x6c, 0x61, 0x73, 0x73, 0x20, 0x61, 0x73, 0x20, + 0x61, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x26, 0x67, 0x65, 0x74, 0x4f, 0x77, + 0x6e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, + 0x79, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x53, + 0x75, 0x70, 0x65, 0x72, 0x20, 0x65, 0x78, 0x70, + 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, + 0x6d, 0x75, 0x73, 0x74, 0x20, 0x65, 0x69, 0x74, + 0x68, 0x65, 0x72, 0x20, 0x62, 0x65, 0x20, 0x6e, + 0x75, 0x6c, 0x6c, 0x20, 0x6f, 0x72, 0x20, 0x61, + 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x2c, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x14, + 0x5f, 0x5f, 0x65, 0x73, 0x4d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x48, 0x43, 0x61, 0x6e, 0x6e, 0x6f, + 0x74, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x74, 0x69, 0x61, 0x74, 0x65, 0x20, 0x61, 0x6e, + 0x20, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x20, 0x66, + 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x38, + 0x43, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x20, 0x64, + 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, + 0x72, 0x65, 0x20, 0x75, 0x6e, 0x64, 0x65, 0x66, + 0x69, 0x6e, 0x65, 0x64, 0x72, 0x74, 0x68, 0x69, + 0x73, 0x20, 0x68, 0x61, 0x73, 0x6e, 0x27, 0x74, + 0x20, 0x62, 0x65, 0x65, 0x6e, 0x20, 0x69, 0x6e, + 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x73, 0x65, + 0x64, 0x20, 0x2d, 0x20, 0x73, 0x75, 0x70, 0x65, + 0x72, 0x28, 0x29, 0x20, 0x68, 0x61, 0x73, 0x6e, + 0x27, 0x74, 0x20, 0x62, 0x65, 0x65, 0x6e, 0x20, + 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x48, 0x20, + 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x64, + 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x2d, + 0x20, 0x74, 0x65, 0x6d, 0x70, 0x6f, 0x72, 0x61, + 0x6c, 0x20, 0x64, 0x65, 0x61, 0x64, 0x20, 0x7a, + 0x6f, 0x6e, 0x65, 0x16, 0x68, 0x61, 0x73, 0x49, + 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x28, + 0x64, 0x69, 0x73, 0x61, 0x62, 0x6c, 0x65, 0x52, + 0x65, 0x67, 0x45, 0x78, 0x70, 0x52, 0x65, 0x73, + 0x74, 0x6f, 0x72, 0x65, 0x12, 0x6c, 0x61, 0x73, + 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x16, 0x6c, + 0x65, 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, + 0x78, 0x74, 0x12, 0x6d, 0x75, 0x6c, 0x74, 0x69, + 0x6c, 0x69, 0x6e, 0x65, 0x0e, 0x72, 0x65, 0x70, + 0x6c, 0x61, 0x63, 0x65, 0x06, 0x5c, 0x24, 0x26, + 0x02, 0x28, 0x02, 0x29, 0x04, 0x28, 0x29, 0x04, + 0x67, 0x6d, 0x0e, 0x5b, 0x5c, 0x73, 0x5c, 0x53, + 0x5d, 0x7b, 0x02, 0x5c, 0x02, 0x7d, 0x54, 0x43, + 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x20, 0x63, 0x6f, + 0x6e, 0x76, 0x65, 0x72, 0x74, 0x20, 0x6e, 0x75, + 0x6c, 0x6c, 0x20, 0x6f, 0x72, 0x20, 0x75, 0x6e, + 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, + 0x74, 0x6f, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x06, 0x70, 0x6f, 0x77, 0x0a, 0x69, 0x73, + 0x4e, 0x61, 0x4e, 0x0a, 0x66, 0x6c, 0x6f, 0x6f, + 0x72, 0x06, 0x61, 0x62, 0x73, 0x2e, 0x5f, 0x5f, + 0x67, 0x65, 0x74, 0x49, 0x6e, 0x74, 0x65, 0x72, + 0x6e, 0x61, 0x6c, 0x50, 0x72, 0x6f, 0x70, 0x65, + 0x72, 0x74, 0x69, 0x65, 0x73, 0x0c, 0x63, 0x68, + 0x61, 0x72, 0x41, 0x74, 0x16, 0x74, 0x6f, 0x55, + 0x70, 0x70, 0x65, 0x72, 0x43, 0x61, 0x73, 0x65, + 0x08, 0x74, 0x65, 0x73, 0x74, 0x16, 0x74, 0x6f, + 0x4c, 0x6f, 0x77, 0x65, 0x72, 0x43, 0x61, 0x73, + 0x65, 0x0a, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x08, + 0x73, 0x6f, 0x72, 0x74, 0x06, 0x28, 0x3f, 0x3a, + 0x04, 0x29, 0x2b, 0x3c, 0x53, 0x74, 0x72, 0x69, + 0x6e, 0x67, 0x20, 0x6f, 0x72, 0x20, 0x4f, 0x62, + 0x6a, 0x65, 0x63, 0x74, 0x20, 0x74, 0x79, 0x70, + 0x65, 0x20, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, + 0x65, 0x64, 0x02, 0x27, 0x54, 0x27, 0x20, 0x69, + 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x20, + 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x75, 0x72, + 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x76, 0x61, 0x6c, + 0x69, 0x64, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x75, + 0x61, 0x67, 0x65, 0x20, 0x74, 0x61, 0x67, 0x16, + 0x6c, 0x61, 0x73, 0x74, 0x49, 0x6e, 0x64, 0x65, + 0x78, 0x4f, 0x66, 0x12, 0x73, 0x75, 0x62, 0x73, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x14, 0x5b, 0x5b, + 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x5d, 0x5d, + 0x06, 0x2d, 0x75, 0x2d, 0x1a, 0x5b, 0x5b, 0x65, + 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, + 0x5d, 0x5d, 0x24, 0x5b, 0x5b, 0x65, 0x78, 0x74, + 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, + 0x64, 0x65, 0x78, 0x5d, 0x5d, 0x6a, 0x4e, 0x6f, + 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x20, + 0x64, 0x61, 0x74, 0x61, 0x20, 0x68, 0x61, 0x73, + 0x20, 0x62, 0x65, 0x65, 0x6e, 0x20, 0x70, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x64, 0x20, 0x66, + 0x6f, 0x72, 0x20, 0x74, 0x68, 0x69, 0x73, 0x20, + 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x79, + 0x65, 0x74, 0x2e, 0x0c, 0x6c, 0x6f, 0x6f, 0x6b, + 0x75, 0x70, 0x22, 0x5b, 0x5b, 0x6c, 0x6f, 0x63, + 0x61, 0x6c, 0x65, 0x4d, 0x61, 0x74, 0x63, 0x68, + 0x65, 0x72, 0x5d, 0x5d, 0x06, 0x61, 0x63, 0x65, + 0x1c, 0x6c, 0x6f, 0x61, 0x64, 0x4c, 0x6f, 0x63, + 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x08, + 0x69, 0x6e, 0x74, 0x6c, 0x1c, 0x5b, 0x5b, 0x64, + 0x61, 0x74, 0x61, 0x4c, 0x6f, 0x63, 0x61, 0x6c, + 0x65, 0x5d, 0x5d, 0x04, 0x2d, 0x75, 0x04, 0x5b, + 0x5b, 0x04, 0x5d, 0x5d, 0x06, 0x2d, 0x78, 0x2d, + 0x1a, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x4d, + 0x61, 0x74, 0x63, 0x68, 0x65, 0x72, 0x10, 0x62, + 0x65, 0x73, 0x74, 0x20, 0x66, 0x69, 0x74, 0x50, + 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x72, 0x20, + 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x62, + 0x65, 0x20, 0x22, 0x6c, 0x6f, 0x6f, 0x6b, 0x75, + 0x70, 0x22, 0x20, 0x6f, 0x72, 0x20, 0x22, 0x62, + 0x65, 0x73, 0x74, 0x20, 0x66, 0x69, 0x74, 0x22, + 0x3e, 0x27, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, + 0x74, 0x20, 0x61, 0x6e, 0x20, 0x61, 0x6c, 0x6c, + 0x6f, 0x77, 0x65, 0x64, 0x20, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x60, + 0x02, 0x60, 0x5e, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, + 0x61, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x20, 0x6f, 0x72, 0x20, 0x6f, 0x75, 0x74, 0x73, + 0x69, 0x64, 0x65, 0x20, 0x61, 0x63, 0x63, 0x65, + 0x70, 0x74, 0x65, 0x64, 0x20, 0x72, 0x61, 0x6e, + 0x67, 0x65, 0x32, 0x5b, 0x5b, 0x69, 0x6e, 0x69, + 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, + 0x49, 0x6e, 0x74, 0x6c, 0x4f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x5d, 0x5d, 0x78, 0x60, 0x74, 0x68, + 0x69, 0x73, 0x60, 0x20, 0x6f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x20, 0x68, 0x61, 0x73, 0x20, 0x61, + 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x20, 0x62, + 0x65, 0x65, 0x6e, 0x20, 0x69, 0x6e, 0x69, 0x74, + 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, + 0x61, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x49, 0x6e, + 0x74, 0x6c, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x26, 0x5b, 0x5b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x69, 0x6e, 0x67, 0x53, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x5d, 0x5d, 0x0c, 0x5b, 0x5b, + 0x6e, 0x75, 0x5d, 0x5d, 0x0a, 0x73, 0x74, 0x79, + 0x6c, 0x65, 0x0e, 0x64, 0x65, 0x63, 0x69, 0x6d, + 0x61, 0x6c, 0x0e, 0x70, 0x65, 0x72, 0x63, 0x65, + 0x6e, 0x74, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x63, 0x79, 0x12, 0x5b, 0x5b, 0x73, 0x74, + 0x79, 0x6c, 0x65, 0x5d, 0x5d, 0x3c, 0x27, 0x20, + 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, + 0x20, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x20, + 0x63, 0x6f, 0x64, 0x65, 0x60, 0x43, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x63, 0x79, 0x20, 0x63, 0x6f, + 0x64, 0x65, 0x20, 0x69, 0x73, 0x20, 0x72, 0x65, + 0x71, 0x75, 0x69, 0x72, 0x65, 0x64, 0x20, 0x77, + 0x68, 0x65, 0x6e, 0x20, 0x73, 0x74, 0x79, 0x6c, + 0x65, 0x20, 0x69, 0x73, 0x20, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x5b, 0x5b, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, + 0x5d, 0x5d, 0x1e, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x63, 0x79, 0x44, 0x69, 0x73, 0x70, 0x6c, + 0x61, 0x79, 0x08, 0x63, 0x6f, 0x64, 0x65, 0x26, + 0x5b, 0x5b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x79, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, + 0x79, 0x5d, 0x5d, 0x28, 0x6d, 0x69, 0x6e, 0x69, + 0x6d, 0x75, 0x6d, 0x49, 0x6e, 0x74, 0x65, 0x67, + 0x65, 0x72, 0x44, 0x69, 0x67, 0x69, 0x74, 0x73, + 0x30, 0x5b, 0x5b, 0x6d, 0x69, 0x6e, 0x69, 0x6d, + 0x75, 0x6d, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x65, + 0x72, 0x44, 0x69, 0x67, 0x69, 0x74, 0x73, 0x5d, + 0x5d, 0x2a, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, + 0x6d, 0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x44, 0x69, 0x67, 0x69, 0x74, 0x73, 0x32, + 0x5b, 0x5b, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, + 0x6d, 0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x44, 0x69, 0x67, 0x69, 0x74, 0x73, 0x5d, + 0x5d, 0x2a, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, + 0x6d, 0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x44, 0x69, 0x67, 0x69, 0x74, 0x73, 0x32, + 0x5b, 0x5b, 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, + 0x6d, 0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x44, 0x69, 0x67, 0x69, 0x74, 0x73, 0x5d, + 0x5d, 0x30, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, + 0x6d, 0x53, 0x69, 0x67, 0x6e, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x6e, 0x74, 0x44, 0x69, 0x67, 0x69, + 0x74, 0x73, 0x30, 0x6d, 0x61, 0x78, 0x69, 0x6d, + 0x75, 0x6d, 0x53, 0x69, 0x67, 0x6e, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x6e, 0x74, 0x44, 0x69, 0x67, + 0x69, 0x74, 0x73, 0x38, 0x5b, 0x5b, 0x6d, 0x69, + 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x53, 0x69, 0x67, + 0x6e, 0x69, 0x66, 0x69, 0x63, 0x61, 0x6e, 0x74, + 0x44, 0x69, 0x67, 0x69, 0x74, 0x73, 0x5d, 0x5d, + 0x38, 0x5b, 0x5b, 0x6d, 0x61, 0x78, 0x69, 0x6d, + 0x75, 0x6d, 0x53, 0x69, 0x67, 0x6e, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x6e, 0x74, 0x44, 0x69, 0x67, + 0x69, 0x74, 0x73, 0x5d, 0x5d, 0x16, 0x75, 0x73, + 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x69, 0x6e, + 0x67, 0x1e, 0x5b, 0x5b, 0x75, 0x73, 0x65, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x69, 0x6e, 0x67, 0x5d, + 0x5d, 0x10, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, + 0x6e, 0x73, 0x26, 0x5b, 0x5b, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, + 0x74, 0x65, 0x72, 0x6e, 0x5d, 0x5d, 0x1e, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x50, + 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x26, 0x5b, + 0x5b, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, + 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, + 0x5d, 0x5d, 0x1e, 0x6e, 0x65, 0x67, 0x61, 0x74, + 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, + 0x72, 0x6e, 0x1e, 0x5b, 0x5b, 0x62, 0x6f, 0x75, + 0x6e, 0x64, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x5d, 0x5d, 0x36, 0x5b, 0x5b, 0x69, 0x6e, 0x69, + 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, + 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x46, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x5d, 0x5d, 0x92, 0x01, + 0x60, 0x74, 0x68, 0x69, 0x73, 0x60, 0x20, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x20, 0x66, 0x6f, 0x72, + 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, + 0x29, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, + 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x69, 0x74, + 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, + 0x49, 0x6e, 0x74, 0x6c, 0x2e, 0x4e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x46, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x2e, 0x10, 0x5b, 0x5b, 0x74, 0x79, 0x70, 0x65, + 0x5d, 0x5d, 0x12, 0x5b, 0x5b, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x5d, 0x5d, 0x0e, 0x73, 0x79, 0x6d, + 0x62, 0x6f, 0x6c, 0x73, 0x02, 0x7b, 0x0e, 0x6c, + 0x69, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x10, 0x69, + 0x73, 0x46, 0x69, 0x6e, 0x69, 0x74, 0x65, 0x02, + 0x2e, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x20, + 0x70, 0x72, 0x69, 0x6d, 0x61, 0x72, 0x79, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x53, 0x69, 0x7a, 0x65, + 0x24, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, + 0x72, 0x79, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, + 0x69, 0x7a, 0x65, 0x10, 0x66, 0x72, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x10, 0x69, 0x6e, 0x66, + 0x69, 0x6e, 0x69, 0x74, 0x79, 0x10, 0x70, 0x6c, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x12, 0x6d, + 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x16, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, + 0x53, 0x69, 0x67, 0x6e, 0x14, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x0a, + 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x06, 0x65, 0x78, + 0x70, 0x08, 0x4c, 0x4e, 0x31, 0x30, 0x04, 0x30, + 0x2e, 0x0a, 0x6c, 0x6f, 0x67, 0x31, 0x30, 0x06, + 0x6c, 0x6f, 0x67, 0x0c, 0x4c, 0x4f, 0x47, 0x31, + 0x30, 0x45, 0x04, 0x31, 0x65, 0x0e, 0x74, 0x6f, + 0x46, 0x69, 0x78, 0x65, 0x64, 0x52, 0x73, 0x75, + 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x4c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x73, 0x4f, 0x66, + 0x28, 0x29, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, + 0x74, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6e, 0x73, + 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0xa0, + 0x01, 0x60, 0x74, 0x68, 0x69, 0x73, 0x60, 0x20, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x66, 0x6f, + 0x72, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x54, 0x6f, 0x50, 0x61, 0x72, 0x74, 0x73, 0x28, + 0x29, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, + 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x69, 0x74, + 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, + 0x49, 0x6e, 0x74, 0x6c, 0x2e, 0x4e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x46, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x2e, 0x0c, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, + 0x1e, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x69, + 0x6e, 0x67, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0xa4, 0x01, 0x60, 0x74, 0x68, 0x69, 0x73, 0x60, + 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x66, + 0x6f, 0x72, 0x20, 0x72, 0x65, 0x73, 0x6f, 0x6c, + 0x76, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x28, 0x29, 0x20, 0x69, 0x73, 0x20, + 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x6e, 0x20, 0x69, + 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, + 0x65, 0x64, 0x20, 0x49, 0x6e, 0x74, 0x6c, 0x2e, + 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x46, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x20, 0x6f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x2e, 0x1e, 0x65, 0x78, 0x74, + 0x65, 0x6e, 0x64, 0x65, 0x64, 0x50, 0x61, 0x74, + 0x74, 0x65, 0x72, 0x6e, 0x12, 0x70, 0x61, 0x74, + 0x74, 0x65, 0x72, 0x6e, 0x31, 0x32, 0x0c, 0x7b, + 0x61, 0x6d, 0x70, 0x6d, 0x7d, 0x0e, 0x70, 0x61, + 0x74, 0x74, 0x65, 0x72, 0x6e, 0x0a, 0x7b, 0x65, + 0x72, 0x61, 0x7d, 0x0c, 0x7b, 0x79, 0x65, 0x61, + 0x72, 0x7d, 0x12, 0x7b, 0x71, 0x75, 0x61, 0x72, + 0x74, 0x65, 0x72, 0x7d, 0x0e, 0x7b, 0x6d, 0x6f, + 0x6e, 0x74, 0x68, 0x7d, 0x08, 0x77, 0x65, 0x65, + 0x6b, 0x12, 0x7b, 0x77, 0x65, 0x65, 0x6b, 0x64, + 0x61, 0x79, 0x7d, 0x0a, 0x7b, 0x64, 0x61, 0x79, + 0x7d, 0x0c, 0x7b, 0x68, 0x6f, 0x75, 0x72, 0x7d, + 0x10, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, + 0x7d, 0x10, 0x7b, 0x73, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x7d, 0x1c, 0x7b, 0x74, 0x69, 0x6d, 0x65, + 0x5a, 0x6f, 0x6e, 0x65, 0x4e, 0x61, 0x6d, 0x65, + 0x7d, 0x1e, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, + 0x61, 0x6c, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, + 0x6e, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, 0x72, + 0x79, 0x06, 0x61, 0x6e, 0x79, 0x08, 0x64, 0x61, + 0x74, 0x65, 0x18, 0x5b, 0x5b, 0x63, 0x61, 0x6c, + 0x65, 0x6e, 0x64, 0x61, 0x72, 0x5d, 0x5d, 0x0c, + 0x5b, 0x5b, 0x63, 0x61, 0x5d, 0x5d, 0x10, 0x74, + 0x69, 0x6d, 0x65, 0x5a, 0x6f, 0x6e, 0x65, 0x06, + 0x55, 0x54, 0x43, 0x34, 0x74, 0x69, 0x6d, 0x65, + 0x5a, 0x6f, 0x6e, 0x65, 0x20, 0x69, 0x73, 0x20, + 0x6e, 0x6f, 0x74, 0x20, 0x73, 0x75, 0x70, 0x70, + 0x6f, 0x72, 0x74, 0x65, 0x64, 0x2e, 0x18, 0x5b, + 0x5b, 0x74, 0x69, 0x6d, 0x65, 0x5a, 0x6f, 0x6e, + 0x65, 0x5d, 0x5d, 0x0e, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x73, 0x1a, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x65, + 0x72, 0x0a, 0x62, 0x61, 0x73, 0x69, 0x63, 0x10, + 0x5b, 0x5b, 0x68, 0x6f, 0x75, 0x72, 0x5d, 0x5d, + 0x14, 0x5b, 0x5b, 0x68, 0x6f, 0x75, 0x72, 0x31, + 0x32, 0x5d, 0x5d, 0x0e, 0x68, 0x6f, 0x75, 0x72, + 0x4e, 0x6f, 0x30, 0x16, 0x5b, 0x5b, 0x68, 0x6f, + 0x75, 0x72, 0x4e, 0x6f, 0x30, 0x5d, 0x5d, 0x16, + 0x5b, 0x5b, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, + 0x6e, 0x5d, 0x5d, 0x3a, 0x5b, 0x5b, 0x69, 0x6e, + 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, + 0x64, 0x44, 0x61, 0x74, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x5d, + 0x5d, 0x1c, 0x5b, 0x6f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x20, 0x41, 0x72, 0x72, 0x61, 0x79, 0x5d, + 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, + 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x73, 0x16, 0x74, 0x69, 0x6d, 0x65, 0x46, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x73, 0x16, 0x64, 0x61, + 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x73, 0x08, 0x66, 0x75, 0x6c, 0x6c, 0x0c, 0x6d, + 0x65, 0x64, 0x69, 0x75, 0x6d, 0x06, 0x7b, 0x30, + 0x7d, 0x06, 0x7b, 0x31, 0x7d, 0x08, 0x74, 0x69, + 0x6d, 0x65, 0x06, 0x61, 0x6c, 0x6c, 0x96, 0x01, + 0x60, 0x74, 0x68, 0x69, 0x73, 0x60, 0x20, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x20, 0x66, 0x6f, 0x72, + 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x28, + 0x29, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, + 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x69, 0x74, + 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, + 0x49, 0x6e, 0x74, 0x6c, 0x2e, 0x44, 0x61, 0x74, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x20, 0x6f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x2e, 0x06, 0x6e, 0x6f, 0x77, 0x46, + 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, + 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x64, 0x61, + 0x74, 0x65, 0x20, 0x70, 0x61, 0x73, 0x73, 0x65, + 0x64, 0x20, 0x74, 0x6f, 0x20, 0x66, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x06, 0x44, 0x61, 0x79, 0x16, + 0x5b, 0x5b, 0x77, 0x65, 0x65, 0x6b, 0x64, 0x61, + 0x79, 0x5d, 0x5d, 0x10, 0x46, 0x75, 0x6c, 0x6c, + 0x59, 0x65, 0x61, 0x72, 0x0e, 0x5b, 0x5b, 0x65, + 0x72, 0x61, 0x5d, 0x5d, 0x10, 0x5b, 0x5b, 0x79, + 0x65, 0x61, 0x72, 0x5d, 0x5d, 0x0a, 0x4d, 0x6f, + 0x6e, 0x74, 0x68, 0x12, 0x5b, 0x5b, 0x6d, 0x6f, + 0x6e, 0x74, 0x68, 0x5d, 0x5d, 0x0e, 0x5b, 0x5b, + 0x64, 0x61, 0x79, 0x5d, 0x5d, 0x0a, 0x48, 0x6f, + 0x75, 0x72, 0x73, 0x0e, 0x4d, 0x69, 0x6e, 0x75, + 0x74, 0x65, 0x73, 0x14, 0x5b, 0x5b, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x65, 0x5d, 0x5d, 0x0e, 0x53, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x14, 0x5b, + 0x5b, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x5d, + 0x5d, 0x12, 0x5b, 0x5b, 0x69, 0x6e, 0x44, 0x53, + 0x54, 0x5d, 0x5d, 0x12, 0x63, 0x61, 0x6c, 0x65, + 0x6e, 0x64, 0x61, 0x72, 0x73, 0x20, 0x55, 0x6e, + 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x64, 0x20, 0x70, + 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x0c, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x73, 0x08, 0x64, 0x61, + 0x79, 0x73, 0x4e, 0x43, 0x6f, 0x75, 0x6c, 0x64, + 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x66, 0x69, 0x6e, + 0x64, 0x20, 0x77, 0x65, 0x65, 0x6b, 0x64, 0x61, + 0x79, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, 0x66, + 0x6f, 0x72, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x65, 0x20, 0x08, 0x65, 0x72, 0x61, 0x73, 0x46, + 0x43, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, + 0x74, 0x20, 0x66, 0x69, 0x6e, 0x64, 0x20, 0x65, + 0x72, 0x61, 0x20, 0x64, 0x61, 0x74, 0x61, 0x20, + 0x66, 0x6f, 0x72, 0x20, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x20, 0x08, 0x61, 0x6d, 0x70, 0x6d, + 0x14, 0x64, 0x61, 0x79, 0x50, 0x65, 0x72, 0x69, + 0x6f, 0x64, 0x73, 0x04, 0x70, 0x6d, 0x12, 0x64, + 0x61, 0x79, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, + 0x0c, 0x73, 0x75, 0x62, 0x73, 0x74, 0x72, 0xa4, + 0x01, 0x60, 0x74, 0x68, 0x69, 0x73, 0x60, 0x20, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x66, 0x6f, + 0x72, 0x20, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x54, 0x6f, 0x50, 0x61, 0x72, 0x74, 0x73, 0x28, + 0x29, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, + 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x69, 0x74, + 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, + 0x49, 0x6e, 0x74, 0x6c, 0x2e, 0x44, 0x61, 0x74, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x20, 0x6f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x2e, 0x10, 0x63, 0x61, 0x6c, 0x65, + 0x6e, 0x64, 0x61, 0x72, 0xa8, 0x01, 0x60, 0x74, + 0x68, 0x69, 0x73, 0x60, 0x20, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x72, + 0x65, 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x4f, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x28, 0x29, + 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, + 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x69, 0x74, 0x69, + 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x20, 0x49, + 0x6e, 0x74, 0x6c, 0x2e, 0x44, 0x61, 0x74, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x2e, 0x1e, 0x5b, 0x6f, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x20, 0x4e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x5d, 0x86, 0x01, 0x60, 0x74, 0x68, 0x69, + 0x73, 0x60, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, + 0x20, 0x61, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x4e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x74, + 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x53, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x29, 0x1a, + 0x5b, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, + 0x44, 0x61, 0x74, 0x65, 0x5d, 0x90, 0x01, 0x60, + 0x74, 0x68, 0x69, 0x73, 0x60, 0x20, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, + 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x44, 0x61, + 0x74, 0x65, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, + 0x44, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x74, + 0x6f, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x53, + 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x29, 0x18, + 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, + 0x44, 0x61, 0x74, 0x65, 0x98, 0x01, 0x60, 0x74, + 0x68, 0x69, 0x73, 0x60, 0x20, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, + 0x62, 0x65, 0x20, 0x61, 0x20, 0x44, 0x61, 0x74, + 0x65, 0x20, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x44, + 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x74, 0x6f, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x65, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x28, 0x29, 0x98, 0x01, 0x60, 0x74, 0x68, 0x69, + 0x73, 0x60, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, + 0x20, 0x61, 0x20, 0x44, 0x61, 0x74, 0x65, 0x20, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x20, 0x66, 0x6f, 0x72, 0x20, 0x44, 0x61, 0x74, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x74, + 0x79, 0x70, 0x65, 0x2e, 0x74, 0x6f, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x54, 0x69, 0x6d, 0x65, + 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x29, + 0x7e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, + 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x20, 0x64, + 0x6f, 0x65, 0x73, 0x6e, 0x27, 0x74, 0x20, 0x69, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x79, 0x20, + 0x69, 0x74, 0x73, 0x65, 0x6c, 0x66, 0x20, 0x77, + 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x76, 0x61, + 0x6c, 0x69, 0x64, 0x20, 0x6c, 0x61, 0x6e, 0x67, + 0x75, 0x61, 0x67, 0x65, 0x20, 0x74, 0x61, 0x67, + 0x7e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, + 0x70, 0x61, 0x73, 0x73, 0x65, 0x64, 0x20, 0x64, + 0x6f, 0x65, 0x73, 0x6e, 0x27, 0x74, 0x20, 0x63, + 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x20, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x20, 0x64, 0x61, + 0x74, 0x61, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x49, + 0x6e, 0x74, 0x6c, 0x2e, 0x4e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x8e, 0x01, 0x44, 0x79, 0x6e, 0x61, 0x6d, 0x69, + 0x63, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, + 0x65, 0x73, 0x20, 0x61, 0x72, 0x65, 0x20, 0x6e, + 0x6f, 0x74, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x74, 0x6c, 0x79, 0x20, 0x73, 0x75, 0x70, + 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x62, + 0x79, 0x20, 0x40, 0x72, 0x6f, 0x6c, 0x6c, 0x75, + 0x70, 0x2f, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, + 0x2d, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x6a, + 0x73, 0x06, 0x6f, 0x6e, 0x65, 0x0a, 0x6f, 0x74, + 0x68, 0x65, 0x72, 0x08, 0x7a, 0x65, 0x72, 0x6f, + 0x06, 0x74, 0x77, 0x6f, 0x06, 0x66, 0x65, 0x77, + 0x08, 0x6d, 0x61, 0x6e, 0x79, 0x20, 0x49, 0x6e, + 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x3a, 0x20, 0x0c, 0x73, + 0x65, 0x6c, 0x65, 0x63, 0x74, 0x10, 0x63, 0x61, + 0x72, 0x64, 0x69, 0x6e, 0x61, 0x6c, 0x0e, 0x6f, + 0x72, 0x64, 0x69, 0x6e, 0x61, 0x6c, 0x36, 0x55, + 0x6e, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, + 0x65, 0x64, 0x20, 0x22, 0x74, 0x79, 0x70, 0x65, + 0x22, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x3a, 0x20, 0x28, 0x55, 0x6e, 0x73, 0x75, 0x70, + 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x3a, 0x20, 0x10, + 0x71, 0x75, 0x61, 0x6e, 0x74, 0x69, 0x66, 0x79, + 0x0c, 0x66, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x1a, + 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x18, 0x73, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x1a, 0x6d, 0x69, 0x6e, 0x75, 0x74, + 0x65, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x18, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, 0x68, 0x6f, + 0x75, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x14, 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x14, 0x64, 0x61, 0x79, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x12, + 0x64, 0x61, 0x79, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x16, 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x14, 0x77, 0x65, + 0x65, 0x6b, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x18, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x16, 0x6d, 0x6f, + 0x6e, 0x74, 0x68, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x1c, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, + 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x1a, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, 0x79, + 0x65, 0x61, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x14, 0x79, 0x65, 0x61, 0x72, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x2a, 0x72, 0x65, + 0x6c, 0x65, 0x76, 0x61, 0x6e, 0x74, 0x45, 0x78, + 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x4b, + 0x65, 0x79, 0x73, 0x14, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x20, 0x61, + 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x73, 0x0a, + 0x65, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x41, 0x72, + 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x42, + 0x20, 0x63, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x20, + 0x62, 0x65, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, + 0x72, 0x74, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, + 0x61, 0x6e, 0x20, 0x4f, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x6a, 0x43, 0x6f, 0x75, 0x6c, 0x64, 0x20, + 0x6e, 0x6f, 0x74, 0x20, 0x67, 0x65, 0x74, 0x20, + 0x55, 0x6e, 0x69, 0x63, 0x6f, 0x64, 0x65, 0x45, + 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x20, 0x54, + 0x68, 0x65, 0x20, 0x67, 0x69, 0x76, 0x65, 0x6e, + 0x20, 0x6b, 0x65, 0x79, 0x3a, 0x20, 0x27, 0x32, + 0x27, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x68, + 0x61, 0x76, 0x65, 0x20, 0x61, 0x20, 0x6c, 0x65, + 0x6e, 0x67, 0x74, 0x68, 0x20, 0x6f, 0x66, 0x20, + 0x32, 0x10, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, + 0x65, 0x73, 0x20, 0x72, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x65, 0x64, 0x4c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x73, 0x12, 0x65, 0x78, 0x74, 0x65, + 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x82, 0x01, 0x43, + 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, + 0x20, 0x64, 0x65, 0x74, 0x65, 0x72, 0x6d, 0x69, + 0x6e, 0x65, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x65, 0x3a, 0x20, 0x4e, 0x6f, 0x20, 0x64, 0x65, + 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x20, 0x68, 0x61, 0x73, + 0x20, 0x62, 0x65, 0x65, 0x6e, 0x20, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x64, + 0x1e, 0x5b, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x20, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5d, + 0x4e, 0x46, 0x69, 0x72, 0x73, 0x74, 0x20, 0x61, + 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, + 0x27, 0x78, 0x27, 0x20, 0x6d, 0x75, 0x73, 0x74, + 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x62, 0x65, 0x20, + 0x61, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x56, 0x54, 0x68, 0x65, 0x20, 0x67, 0x69, 0x76, + 0x65, 0x6e, 0x20, 0x61, 0x72, 0x67, 0x75, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x20, 0x6d, 0x75, 0x73, + 0x74, 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x74, + 0x68, 0x65, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, + 0x74, 0x79, 0x70, 0x65, 0x14, 0x64, 0x61, 0x74, + 0x61, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x32, + 0x69, 0x6e, 0x74, 0x6c, 0x2d, 0x72, 0x65, 0x6c, + 0x61, 0x74, 0x69, 0x76, 0x65, 0x2d, 0x74, 0x69, + 0x6d, 0x65, 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x30, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, + 0x44, 0x61, 0x74, 0x61, 0x20, 0x66, 0x6f, 0x72, + 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x3a, + 0x20, 0x27, 0x26, 0x27, 0x20, 0x6d, 0x75, 0x73, + 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x6e, 0x20, + 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x0c, 0x6b, + 0x65, 0x79, 0x3a, 0x20, 0x27, 0x3a, 0x27, 0x20, + 0x69, 0x6e, 0x20, 0x4c, 0x6f, 0x63, 0x61, 0x6c, + 0x65, 0x44, 0x61, 0x74, 0x61, 0x20, 0x66, 0x6f, + 0x72, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, + 0x3a, 0x20, 0x27, 0x26, 0x27, 0x20, 0x6d, 0x75, + 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x61, 0x62, 0x6c, 0x65, 0x10, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x20, 0x27, + 0x18, 0x27, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6b, + 0x65, 0x79, 0x3a, 0x20, 0x27, 0x34, 0x27, 0x20, + 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, + 0x61, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x20, 0x6f, 0x72, 0x20, 0x6e, 0x75, 0x6c, 0x6c, + 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x20, + 0x27, 0x4c, 0x27, 0x20, 0x6d, 0x75, 0x73, 0x74, + 0x20, 0x62, 0x65, 0x20, 0x61, 0x20, 0x73, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x2c, 0x20, 0x75, 0x6e, + 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x2c, + 0x20, 0x6f, 0x72, 0x20, 0x6e, 0x75, 0x6c, 0x6c, + 0xa2, 0x01, 0x4e, 0x6f, 0x20, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x6c, + 0x6f, 0x74, 0x73, 0x20, 0x68, 0x61, 0x73, 0x20, + 0x62, 0x65, 0x65, 0x6e, 0x20, 0x61, 0x6c, 0x6c, + 0x6f, 0x63, 0x61, 0x74, 0x65, 0x64, 0x20, 0x66, + 0x6f, 0x72, 0x20, 0x74, 0x68, 0x65, 0x20, 0x67, + 0x69, 0x76, 0x65, 0x6e, 0x20, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x6f, 0x66, + 0x20, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x3a, 0x69, 0x6e, 0x69, 0x74, + 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x52, + 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x54, + 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x20, 0x63, 0x61, 0x6c, 0x6c, + 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x69, 0x6e, + 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, + 0x6c, 0x65, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, + 0x76, 0x65, 0x72, 0x20, 0x44, 0x41, 0x72, 0x67, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x3a, 0x20, 0x27, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x27, 0x20, 0x6d, + 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, + 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x42, + 0x41, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, + 0x3a, 0x20, 0x27, 0x75, 0x6e, 0x69, 0x74, 0x27, + 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, + 0x20, 0x61, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x3c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, + 0x6e, 0x65, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, + 0x62, 0x65, 0x20, 0x66, 0x69, 0x6e, 0x69, 0x74, + 0x65, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x0c, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x0c, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0e, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x30, 0x43, + 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, 0x74, + 0x20, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x20, 0x65, + 0x6e, 0x74, 0x72, 0x79, 0x3a, 0x20, 0x27, 0x3a, + 0x27, 0x20, 0x69, 0x6e, 0x73, 0x69, 0x64, 0x65, + 0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x20, + 0x66, 0x6f, 0x72, 0x20, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x3a, 0x20, 0x27, 0x08, 0x61, 0x75, + 0x74, 0x6f, 0x08, 0x70, 0x61, 0x73, 0x74, 0x0c, + 0x66, 0x75, 0x74, 0x75, 0x72, 0x65, 0x0e, 0x75, + 0x6e, 0x69, 0x74, 0x3a, 0x20, 0x27, 0x24, 0x27, + 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, + 0x20, 0x61, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, + 0x67, 0x0e, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, + 0x73, 0x0e, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, + 0x73, 0x0a, 0x68, 0x6f, 0x75, 0x72, 0x73, 0x0a, + 0x77, 0x65, 0x65, 0x6b, 0x73, 0x10, 0x71, 0x75, + 0x61, 0x72, 0x74, 0x65, 0x72, 0x73, 0x0a, 0x79, + 0x65, 0x61, 0x72, 0x73, 0x08, 0x73, 0x6f, 0x6d, + 0x65, 0x0e, 0x55, 0x6e, 0x69, 0x74, 0x3a, 0x20, + 0x27, 0x24, 0x27, 0x20, 0x6d, 0x75, 0x73, 0x74, + 0x20, 0x62, 0x65, 0x20, 0x6f, 0x6e, 0x65, 0x20, + 0x6f, 0x66, 0x3a, 0x20, 0x06, 0x6d, 0x61, 0x70, + 0x04, 0x2c, 0x20, 0x02, 0x22, 0x18, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x10, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0x14, 0x65, 0x6e, 0x64, 0x49, + 0x6e, 0x64, 0x65, 0x78, 0x3a, 0x20, 0x44, 0x20, + 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, + 0x67, 0x72, 0x65, 0x61, 0x74, 0x65, 0x72, 0x20, + 0x74, 0x68, 0x61, 0x6e, 0x20, 0x62, 0x65, 0x67, + 0x69, 0x6e, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x3a, + 0x20, 0x1c, 0x54, 0x68, 0x65, 0x20, 0x70, 0x61, + 0x74, 0x74, 0x65, 0x72, 0x6e, 0x3a, 0x20, 0x27, + 0x1c, 0x27, 0x20, 0x69, 0x73, 0x20, 0x6d, 0x61, + 0x6c, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x12, + 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, + 0x20, 0x14, 0x20, 0x74, 0x6f, 0x20, 0x62, 0x65, + 0x20, 0x22, 0x30, 0x22, 0x08, 0x75, 0x6e, 0x69, + 0x74, 0x16, 0x70, 0x6c, 0x75, 0x72, 0x61, 0x6c, + 0x52, 0x75, 0x6c, 0x65, 0x73, 0xc4, 0x01, 0x47, + 0x69, 0x76, 0x65, 0x6e, 0x20, 0x69, 0x6e, 0x73, + 0x74, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x6f, 0x66, + 0x20, 0x6f, 0x66, 0x20, 0x49, 0x6e, 0x74, 0x6c, + 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x20, 0x6d, 0x75, 0x73, 0x74, + 0x20, 0x68, 0x61, 0x76, 0x65, 0x20, 0x61, 0x6e, + 0x20, 0x5b, 0x5b, 0x49, 0x6e, 0x69, 0x74, 0x69, + 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x50, 0x6c, + 0x75, 0x72, 0x61, 0x6c, 0x52, 0x75, 0x6c, 0x65, + 0x73, 0x5d, 0x5d, 0x20, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x20, 0x73, 0x6c, 0x6f, + 0x74, 0x3a, 0x41, 0x72, 0x67, 0x75, 0x6d, 0x65, + 0x6e, 0x74, 0x20, 0x27, 0x6e, 0x27, 0x20, 0x6d, + 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, + 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x16, + 0x74, 0x6f, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, + 0x54, 0x61, 0x67, 0x2e, 0x49, 0x6e, 0x74, 0x6c, + 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x64, 0x43, 0x6f, 0x6e, 0x73, + 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x20, + 0x49, 0x6e, 0x74, 0x6c, 0x2e, 0x52, 0x65, 0x6c, + 0x61, 0x74, 0x69, 0x76, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x20, + 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, + 0x20, 0x27, 0x6e, 0x65, 0x77, 0x27, 0x54, 0x45, + 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x20, + 0x74, 0x68, 0x65, 0x20, 0x4c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, 0x45, 0x6e, + 0x74, 0x72, 0x79, 0x20, 0x66, 0x6f, 0x72, 0x20, + 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x3a, 0x20, + 0x27, 0x22, 0x27, 0x20, 0x74, 0x6f, 0x20, 0x62, + 0x65, 0x20, 0x61, 0x6e, 0x20, 0x4f, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x08, 0x64, 0x61, 0x74, 0x61, + 0xa0, 0x01, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, + 0x20, 0x49, 0x6e, 0x74, 0x6c, 0x2e, 0x52, 0x65, + 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x54, 0x69, + 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x74, 0x79, + 0x70, 0x65, 0x2e, 0x66, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, + 0x20, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x63, 0x6f, + 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, + 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, + 0x72, 0x20, 0xae, 0x01, 0x4d, 0x65, 0x74, 0x68, + 0x6f, 0x64, 0x20, 0x49, 0x6e, 0x74, 0x6c, 0x2e, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x74, 0x79, 0x70, 0x65, 0x2e, 0x66, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x54, 0x6f, 0x50, 0x61, 0x72, + 0x74, 0x73, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x65, + 0x64, 0x20, 0x6f, 0x6e, 0x20, 0x69, 0x6e, 0x63, + 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, + 0x65, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, + 0x65, 0x72, 0x20, 0xb2, 0x01, 0x4d, 0x65, 0x74, + 0x68, 0x6f, 0x64, 0x20, 0x49, 0x6e, 0x74, 0x6c, + 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x74, 0x79, 0x70, 0x65, 0x2e, 0x72, 0x65, + 0x73, 0x6f, 0x6c, 0x76, 0x65, 0x64, 0x4f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x63, 0x61, + 0x6c, 0x6c, 0x65, 0x64, 0x20, 0x6f, 0x6e, 0x20, + 0x69, 0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, + 0x69, 0x62, 0x6c, 0x65, 0x20, 0x72, 0x65, 0x63, + 0x65, 0x69, 0x76, 0x65, 0x72, 0x20, 0x8a, 0x03, + 0x43, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x6e, 0x6f, + 0x74, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, + 0x20, 0x49, 0x6e, 0x74, 0x6c, 0x2e, 0x52, 0x65, + 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x54, 0x69, + 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x3a, 0x20, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, + 0x65, 0x64, 0x20, 0x27, 0x49, 0x6e, 0x74, 0x6c, + 0x27, 0x20, 0x74, 0x6f, 0x20, 0x65, 0x78, 0x69, + 0x73, 0x74, 0x2e, 0x20, 0x52, 0x65, 0x6d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x20, 0x74, 0x6f, 0x20, + 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, + 0x70, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x73, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x49, 0x6e, + 0x74, 0x6c, 0x2e, 0x4e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2c, + 0x20, 0x49, 0x6e, 0x74, 0x6c, 0x2e, 0x67, 0x65, + 0x74, 0x43, 0x61, 0x6e, 0x6f, 0x6e, 0x69, 0x63, + 0x61, 0x6c, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, + 0x73, 0x2c, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x49, + 0x6e, 0x74, 0x6c, 0x2e, 0x50, 0x6c, 0x75, 0x72, + 0x61, 0x6c, 0x52, 0x75, 0x6c, 0x65, 0x73, 0x20, + 0x62, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x61, + 0x70, 0x70, 0x6c, 0x79, 0x69, 0x6e, 0x67, 0x20, + 0x74, 0x68, 0x69, 0x73, 0x20, 0x70, 0x6f, 0x6c, + 0x79, 0x66, 0x69, 0x6c, 0x6c, 0x0d, 0x00, 0x06, + 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, 0x22, 0x00, + 0x42, 0xfd, 0x38, 0x01, 0xa0, 0x01, 0x00, 0x00, + 0x00, 0x40, 0xd0, 0x00, 0x00, 0x00, 0x00, 0x40, + 0xd1, 0x00, 0x00, 0x00, 0x00, 0x40, 0xd2, 0x00, + 0x00, 0x00, 0x00, 0x40, 0xd3, 0x00, 0x00, 0x00, + 0x00, 0x40, 0xd4, 0x00, 0x00, 0x00, 0x00, 0x40, + 0xd5, 0x00, 0x00, 0x00, 0x00, 0x40, 0xd6, 0x00, + 0x00, 0x00, 0x40, 0x40, 0xd7, 0x00, 0x00, 0x00, + 0x00, 0x40, 0xd8, 0x00, 0x00, 0x00, 0x40, 0x40, + 0xd9, 0x00, 0x00, 0x00, 0x40, 0x40, 0xda, 0x00, + 0x00, 0x00, 0x00, 0x3f, 0xd0, 0x00, 0x00, 0x00, + 0x00, 0x3f, 0xd1, 0x00, 0x00, 0x00, 0x00, 0x3f, + 0xd2, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xd3, 0x00, + 0x00, 0x00, 0x00, 0x3f, 0xd4, 0x00, 0x00, 0x00, + 0x00, 0x3f, 0xd5, 0x00, 0x00, 0x00, 0x00, 0xbf, + 0x3b, 0x41, 0xd6, 0x00, 0x00, 0x00, 0x00, 0x3f, + 0xd7, 0x00, 0x00, 0x00, 0x00, 0xbf, 0x3e, 0x41, + 0xd8, 0x00, 0x00, 0x00, 0x00, 0xbf, 0x3f, 0x41, + 0xd9, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xda, 0x00, + 0x00, 0x00, 0x00, 0x04, 0x44, 0x00, 0x00, 0x00, + 0x38, 0x88, 0x00, 0x00, 0x00, 0x99, 0xac, 0xe9, + 0x08, 0x39, 0x88, 0x00, 0x00, 0x00, 0xeb, 0x41, + 0x04, 0x44, 0x00, 0x00, 0x00, 0x38, 0xdb, 0x00, + 0x00, 0x00, 0x99, 0xac, 0xe9, 0x08, 0x39, 0xdb, + 0x00, 0x00, 0x00, 0xeb, 0x2c, 0x04, 0x44, 0x00, + 0x00, 0x00, 0x38, 0x6c, 0x00, 0x00, 0x00, 0x99, + 0xac, 0xe9, 0x08, 0x39, 0x6c, 0x00, 0x00, 0x00, + 0xeb, 0x17, 0x04, 0x44, 0x00, 0x00, 0x00, 0x38, + 0xdc, 0x00, 0x00, 0x00, 0x99, 0xac, 0xe9, 0x08, + 0x39, 0xdc, 0x00, 0x00, 0x00, 0xeb, 0x02, 0x0b, + 0x11, 0x3a, 0xd0, 0x00, 0x00, 0x00, 0x0e, 0xbf, + 0x00, 0x0b, 0x39, 0xd1, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0xbf, 0x01, 0x4e, 0xdf, 0x00, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x11, 0x3a, + 0xd2, 0x00, 0x00, 0x00, 0x39, 0xd2, 0x00, 0x00, + 0x00, 0x42, 0xde, 0x00, 0x00, 0x00, 0xef, 0x0e, + 0x39, 0xd2, 0x00, 0x00, 0x00, 0x42, 0xde, 0x00, + 0x00, 0x00, 0x11, 0x3a, 0xd3, 0x00, 0x00, 0x00, + 0x0e, 0x39, 0xd0, 0x00, 0x00, 0x00, 0x39, 0xd3, + 0x00, 0x00, 0x00, 0x44, 0xe0, 0x00, 0x00, 0x00, + 0x39, 0xd0, 0x00, 0x00, 0x00, 0x42, 0xe1, 0x00, + 0x00, 0x00, 0x11, 0xea, 0x28, 0x0e, 0x39, 0xd0, + 0x00, 0x00, 0x00, 0x39, 0xd0, 0x00, 0x00, 0x00, + 0x42, 0xe0, 0x00, 0x00, 0x00, 0x44, 0xe1, 0x00, + 0x00, 0x00, 0x39, 0xd0, 0x00, 0x00, 0x00, 0x42, + 0xe0, 0x00, 0x00, 0x00, 0x43, 0xe2, 0x00, 0x00, + 0x00, 0x24, 0x00, 0x00, 0xc8, 0x39, 0xd0, 0x00, + 0x00, 0x00, 0x42, 0xe0, 0x00, 0x00, 0x00, 0x43, + 0xe3, 0x00, 0x00, 0x00, 0x04, 0xe4, 0x00, 0x00, + 0x00, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x04, 0xe6, + 0x00, 0x00, 0x00, 0x04, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xe8, 0x00, 0x00, 0x00, 0x04, 0xe9, 0x00, + 0x00, 0x00, 0x04, 0xea, 0x00, 0x00, 0x00, 0x04, + 0xeb, 0x00, 0x00, 0x00, 0x04, 0xec, 0x00, 0x00, + 0x00, 0x04, 0xed, 0x00, 0x00, 0x00, 0x04, 0xee, + 0x00, 0x00, 0x00, 0x04, 0xef, 0x00, 0x00, 0x00, + 0x04, 0xf0, 0x00, 0x00, 0x00, 0x04, 0xf1, 0x00, + 0x00, 0x00, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x04, + 0xf3, 0x00, 0x00, 0x00, 0x04, 0xf4, 0x00, 0x00, + 0x00, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x04, 0xf6, + 0x00, 0x00, 0x00, 0x04, 0xf7, 0x00, 0x00, 0x00, + 0x04, 0xf8, 0x00, 0x00, 0x00, 0x04, 0xf9, 0x00, + 0x00, 0x00, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x04, + 0xfb, 0x00, 0x00, 0x00, 0x04, 0xfc, 0x00, 0x00, + 0x00, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x04, 0xfe, + 0x00, 0x00, 0x00, 0x04, 0xff, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x01, 0x00, 0x00, 0x04, 0x01, 0x01, + 0x00, 0x00, 0x04, 0x02, 0x01, 0x00, 0x00, 0x04, + 0x03, 0x01, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, + 0x04, 0x01, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, + 0x80, 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, 0x21, + 0x00, 0x00, 0x80, 0x04, 0x06, 0x01, 0x00, 0x00, + 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0x07, 0x01, + 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, + 0x08, 0x01, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, + 0x80, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0x25, + 0x00, 0x00, 0x80, 0x04, 0x0a, 0x01, 0x00, 0x00, + 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0x0b, 0x01, + 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, + 0x0c, 0x01, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, + 0x80, 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, 0x29, + 0x00, 0x00, 0x80, 0x04, 0x0e, 0x01, 0x00, 0x00, + 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x01, + 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, + 0x10, 0x01, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, + 0x80, 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, 0x2d, + 0x00, 0x00, 0x80, 0x04, 0x12, 0x01, 0x00, 0x00, + 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x13, 0x01, + 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, + 0x14, 0x01, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, + 0x80, 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, 0x31, + 0x00, 0x00, 0x80, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x17, 0x01, + 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, + 0x18, 0x01, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, + 0x80, 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, 0x35, + 0x00, 0x00, 0x80, 0x04, 0x1a, 0x01, 0x00, 0x00, + 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x01, + 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, + 0x1c, 0x01, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, + 0x80, 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, 0x39, + 0x00, 0x00, 0x80, 0x04, 0x1e, 0x01, 0x00, 0x00, + 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x01, + 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, + 0x20, 0x01, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, + 0x80, 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, 0x3d, + 0x00, 0x00, 0x80, 0x04, 0x22, 0x01, 0x00, 0x00, + 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x77, 0x00, + 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, + 0x23, 0x01, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, + 0x80, 0x04, 0x24, 0x01, 0x00, 0x00, 0x4d, 0x41, + 0x00, 0x00, 0x80, 0x04, 0x25, 0x01, 0x00, 0x00, + 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x26, 0x01, + 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, + 0x27, 0x01, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, + 0x80, 0x04, 0x28, 0x01, 0x00, 0x00, 0x4d, 0x45, + 0x00, 0x00, 0x80, 0x04, 0x29, 0x01, 0x00, 0x00, + 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x01, + 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, + 0x2b, 0x01, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, + 0x80, 0x04, 0x2c, 0x01, 0x00, 0x00, 0x4d, 0x49, + 0x00, 0x00, 0x80, 0x04, 0x2d, 0x01, 0x00, 0x00, + 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x24, 0x01, 0x00, + 0x0e, 0x39, 0xd0, 0x00, 0x00, 0x00, 0x42, 0xe0, + 0x00, 0x00, 0x00, 0x43, 0x2e, 0x01, 0x00, 0x00, + 0x24, 0x00, 0x00, 0xc8, 0x0b, 0xbf, 0x02, 0x4e, + 0x2f, 0x01, 0x00, 0x00, 0x4d, 0x2f, 0x01, 0x00, + 0x00, 0xbf, 0x03, 0x4e, 0x30, 0x01, 0x00, 0x00, + 0x4d, 0x30, 0x01, 0x00, 0x00, 0xbf, 0x04, 0x4e, + 0x21, 0x01, 0x00, 0x00, 0x4d, 0x21, 0x01, 0x00, + 0x00, 0xbf, 0x05, 0x4e, 0xe5, 0x00, 0x00, 0x00, + 0x4d, 0xe5, 0x00, 0x00, 0x00, 0xbf, 0x06, 0x4e, + 0x31, 0x01, 0x00, 0x00, 0x4d, 0x31, 0x01, 0x00, + 0x00, 0xbf, 0x07, 0x4e, 0xe7, 0x00, 0x00, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0xbf, 0x08, 0x4e, + 0x32, 0x01, 0x00, 0x00, 0x4d, 0x32, 0x01, 0x00, + 0x00, 0xbf, 0x09, 0x4e, 0x33, 0x01, 0x00, 0x00, + 0x4d, 0x33, 0x01, 0x00, 0x00, 0xbf, 0x0a, 0x4e, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0xbf, 0x0b, 0x4e, 0xed, 0x00, 0x00, 0x00, + 0x4d, 0xed, 0x00, 0x00, 0x00, 0xbf, 0x0c, 0x4e, + 0x34, 0x01, 0x00, 0x00, 0x4d, 0x34, 0x01, 0x00, + 0x00, 0xbf, 0x0d, 0x4e, 0xee, 0x00, 0x00, 0x00, + 0x4d, 0xee, 0x00, 0x00, 0x00, 0xbf, 0x0e, 0x4e, + 0x35, 0x01, 0x00, 0x00, 0x4d, 0x35, 0x01, 0x00, + 0x00, 0xbf, 0x0f, 0x4e, 0x36, 0x01, 0x00, 0x00, + 0x4d, 0x36, 0x01, 0x00, 0x00, 0xbf, 0x10, 0x4e, + 0x37, 0x01, 0x00, 0x00, 0x4d, 0x37, 0x01, 0x00, + 0x00, 0xbf, 0x11, 0x4e, 0x38, 0x01, 0x00, 0x00, + 0x4d, 0x38, 0x01, 0x00, 0x00, 0xbf, 0x12, 0x4e, + 0x39, 0x01, 0x00, 0x00, 0x4d, 0x39, 0x01, 0x00, + 0x00, 0xbf, 0x13, 0x4e, 0x3a, 0x01, 0x00, 0x00, + 0x4d, 0x3a, 0x01, 0x00, 0x00, 0xbf, 0x14, 0x4e, + 0x3b, 0x01, 0x00, 0x00, 0x4d, 0x3b, 0x01, 0x00, + 0x00, 0xbf, 0x15, 0x4e, 0x3c, 0x01, 0x00, 0x00, + 0x4d, 0x3c, 0x01, 0x00, 0x00, 0xbf, 0x16, 0x4e, + 0x3d, 0x01, 0x00, 0x00, 0x4d, 0x3d, 0x01, 0x00, + 0x00, 0xbf, 0x17, 0x4e, 0x3e, 0x01, 0x00, 0x00, + 0x4d, 0x3e, 0x01, 0x00, 0x00, 0xbf, 0x18, 0x4e, + 0x3f, 0x01, 0x00, 0x00, 0x4d, 0x3f, 0x01, 0x00, + 0x00, 0xbf, 0x19, 0x4e, 0x04, 0x01, 0x00, 0x00, + 0x4d, 0x04, 0x01, 0x00, 0x00, 0xbf, 0x1a, 0x4e, + 0x05, 0x01, 0x00, 0x00, 0x4d, 0x05, 0x01, 0x00, + 0x00, 0xbf, 0x1b, 0x4e, 0x06, 0x01, 0x00, 0x00, + 0x4d, 0x06, 0x01, 0x00, 0x00, 0xbf, 0x1c, 0x4e, + 0x40, 0x01, 0x00, 0x00, 0x4d, 0x40, 0x01, 0x00, + 0x00, 0xbf, 0x1d, 0x4e, 0x41, 0x01, 0x00, 0x00, + 0x4d, 0x41, 0x01, 0x00, 0x00, 0xbf, 0x1e, 0x4e, + 0x0c, 0x01, 0x00, 0x00, 0x4d, 0x0c, 0x01, 0x00, + 0x00, 0xbf, 0x1f, 0x4e, 0x0d, 0x01, 0x00, 0x00, + 0x4d, 0x0d, 0x01, 0x00, 0x00, 0xbf, 0x20, 0x4e, + 0x10, 0x01, 0x00, 0x00, 0x4d, 0x10, 0x01, 0x00, + 0x00, 0xbf, 0x21, 0x4e, 0x42, 0x01, 0x00, 0x00, + 0x4d, 0x42, 0x01, 0x00, 0x00, 0xbf, 0x22, 0x4e, + 0x11, 0x01, 0x00, 0x00, 0x4d, 0x11, 0x01, 0x00, + 0x00, 0xbf, 0x23, 0x4e, 0x13, 0x01, 0x00, 0x00, + 0x4d, 0x13, 0x01, 0x00, 0x00, 0xbf, 0x24, 0x4e, + 0x43, 0x01, 0x00, 0x00, 0x4d, 0x43, 0x01, 0x00, + 0x00, 0x11, 0x3a, 0xd4, 0x00, 0x00, 0x00, 0x0e, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0xe5, 0x00, 0x00, 0x00, 0x44, + 0x44, 0x01, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x21, + 0x01, 0x00, 0x00, 0x44, 0x77, 0x00, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x45, 0x01, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0xe6, 0x00, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x46, 0x01, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0x47, 0x01, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0xe8, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x30, + 0x01, 0x00, 0x00, 0x44, 0x48, 0x01, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x21, 0x01, 0x00, 0x00, 0x44, + 0xe9, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x32, + 0x01, 0x00, 0x00, 0x44, 0x49, 0x01, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x4a, 0x01, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x31, + 0x01, 0x00, 0x00, 0x44, 0xec, 0x00, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x4b, 0x01, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0x4c, 0x01, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x4d, 0x01, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0x4e, 0x01, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x31, 0x01, 0x00, 0x00, 0x44, + 0xef, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0x4f, 0x01, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x32, 0x01, 0x00, 0x00, 0x44, + 0x50, 0x01, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0x51, 0x01, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0xf0, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x31, + 0x01, 0x00, 0x00, 0x44, 0xe4, 0x00, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x52, 0x01, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0xf2, 0x00, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x31, 0x01, 0x00, 0x00, 0x44, + 0xf4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0xf5, 0x00, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x21, 0x01, 0x00, 0x00, 0x44, + 0xf6, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x31, + 0x01, 0x00, 0x00, 0x44, 0xf7, 0x00, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x53, 0x01, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x36, + 0x01, 0x00, 0x00, 0x44, 0xf8, 0x00, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x54, 0x01, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x31, + 0x01, 0x00, 0x00, 0x44, 0x55, 0x01, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x31, 0x01, 0x00, 0x00, 0x44, + 0xf9, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0x56, 0x01, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x21, 0x01, 0x00, 0x00, 0x44, + 0x27, 0x01, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x30, + 0x01, 0x00, 0x00, 0x44, 0x57, 0x01, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x58, 0x01, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0x59, 0x01, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x21, 0x01, 0x00, 0x00, 0x44, + 0xfa, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0xeb, + 0x00, 0x00, 0x00, 0x44, 0xfb, 0x00, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x35, 0x01, 0x00, 0x00, 0x44, + 0x5a, 0x01, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0xfc, 0x00, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x36, 0x01, 0x00, 0x00, 0x44, + 0x5b, 0x01, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x31, + 0x01, 0x00, 0x00, 0x44, 0x5c, 0x01, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x32, 0x01, 0x00, 0x00, 0x44, + 0x5d, 0x01, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x32, + 0x01, 0x00, 0x00, 0x44, 0x5e, 0x01, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x32, 0x01, 0x00, 0x00, 0x44, + 0x5f, 0x01, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x32, + 0x01, 0x00, 0x00, 0x44, 0x0d, 0x00, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x31, 0x01, 0x00, 0x00, 0x44, + 0x60, 0x01, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x31, + 0x01, 0x00, 0x00, 0x44, 0xfd, 0x00, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x3b, 0x01, 0x00, 0x00, 0x44, + 0x61, 0x01, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x32, + 0x01, 0x00, 0x00, 0x44, 0xfe, 0x00, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x32, 0x01, 0x00, 0x00, 0x44, + 0x62, 0x01, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0x63, 0x01, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x31, 0x01, 0x00, 0x00, 0x44, + 0x64, 0x01, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0x65, 0x01, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x32, 0x01, 0x00, 0x00, 0x44, + 0x66, 0x01, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x32, + 0x01, 0x00, 0x00, 0x44, 0x67, 0x01, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0xff, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x36, + 0x01, 0x00, 0x00, 0x44, 0x68, 0x01, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x69, 0x01, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0x6a, 0x01, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x32, 0x01, 0x00, 0x00, 0x44, + 0x6b, 0x01, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x32, + 0x01, 0x00, 0x00, 0x44, 0x6c, 0x01, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x00, 0x01, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0x6d, 0x01, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x6e, 0x01, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x32, + 0x01, 0x00, 0x00, 0x44, 0x01, 0x01, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x21, 0x01, 0x00, 0x00, 0x44, + 0x26, 0x01, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x32, + 0x01, 0x00, 0x00, 0x44, 0x02, 0x01, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x6f, 0x01, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0x70, 0x01, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x71, 0x01, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x3d, + 0x01, 0x00, 0x00, 0x44, 0x72, 0x01, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x73, 0x01, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0x74, 0x01, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x75, 0x01, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x32, + 0x01, 0x00, 0x00, 0x44, 0x76, 0x01, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x30, 0x01, 0x00, 0x00, 0x44, + 0x77, 0x01, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x32, + 0x01, 0x00, 0x00, 0x44, 0x03, 0x01, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x78, 0x01, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x30, + 0x01, 0x00, 0x00, 0x44, 0x79, 0x01, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x7a, 0x01, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0x25, 0x01, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x1f, 0x01, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x21, + 0x01, 0x00, 0x00, 0x44, 0x28, 0x01, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x32, 0x01, 0x00, 0x00, 0x44, + 0x07, 0x01, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x32, + 0x01, 0x00, 0x00, 0x44, 0x7b, 0x01, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x7c, 0x01, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x3d, + 0x01, 0x00, 0x00, 0x44, 0x7d, 0x01, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x09, 0x01, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0x7e, 0x01, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x0a, 0x01, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x31, + 0x01, 0x00, 0x00, 0x44, 0x0b, 0x01, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x7f, 0x01, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0x80, 0x01, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x81, 0x01, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x32, + 0x01, 0x00, 0x00, 0x44, 0x82, 0x01, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x83, 0x01, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x30, + 0x01, 0x00, 0x00, 0x44, 0x84, 0x01, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x85, 0x01, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0x86, 0x01, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x87, 0x01, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0x22, 0x01, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x88, 0x01, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x30, + 0x01, 0x00, 0x00, 0x44, 0x23, 0x01, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x89, 0x01, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x42, 0x05, + 0x01, 0x00, 0x00, 0x44, 0x8a, 0x01, 0x00, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x8b, 0x01, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, + 0x00, 0x04, 0x0e, 0x01, 0x00, 0x00, 0x72, 0x39, + 0xd4, 0x00, 0x00, 0x00, 0x42, 0x31, 0x01, 0x00, + 0x00, 0x4a, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, + 0xd4, 0x00, 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, + 0x00, 0x44, 0x8c, 0x01, 0x00, 0x00, 0x39, 0xd4, + 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, + 0x42, 0x40, 0x01, 0x00, 0x00, 0x44, 0x0f, 0x01, + 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, + 0xd4, 0x00, 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, + 0x00, 0x44, 0x8d, 0x01, 0x00, 0x00, 0x39, 0xd4, + 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, + 0x42, 0x32, 0x01, 0x00, 0x00, 0x44, 0x8e, 0x01, + 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, + 0xd4, 0x00, 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, + 0x00, 0x44, 0x8f, 0x01, 0x00, 0x00, 0x39, 0xd4, + 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, + 0x42, 0x32, 0x01, 0x00, 0x00, 0x44, 0x90, 0x01, + 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, + 0xd4, 0x00, 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, + 0x00, 0x44, 0x91, 0x01, 0x00, 0x00, 0x39, 0xd4, + 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, + 0x42, 0x31, 0x01, 0x00, 0x00, 0x44, 0x92, 0x01, + 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, + 0xd4, 0x00, 0x00, 0x00, 0x42, 0x31, 0x01, 0x00, + 0x00, 0x44, 0x93, 0x01, 0x00, 0x00, 0x39, 0xd4, + 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, + 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, 0x94, 0x01, + 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, + 0xd4, 0x00, 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, + 0x00, 0x44, 0x95, 0x01, 0x00, 0x00, 0x39, 0xd4, + 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, + 0x42, 0x3d, 0x01, 0x00, 0x00, 0x44, 0x96, 0x01, + 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, + 0xd4, 0x00, 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, + 0x00, 0x44, 0x97, 0x01, 0x00, 0x00, 0x39, 0xd4, + 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, + 0x42, 0x32, 0x01, 0x00, 0x00, 0x44, 0x98, 0x01, + 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, + 0xd4, 0x00, 0x00, 0x00, 0x42, 0x32, 0x01, 0x00, + 0x00, 0x44, 0x99, 0x01, 0x00, 0x00, 0x39, 0xd4, + 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, + 0x42, 0xeb, 0x00, 0x00, 0x00, 0x44, 0x9a, 0x01, + 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, + 0xd4, 0x00, 0x00, 0x00, 0x42, 0xed, 0x00, 0x00, + 0x00, 0x44, 0x12, 0x01, 0x00, 0x00, 0x39, 0xd4, + 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, + 0x42, 0x3d, 0x01, 0x00, 0x00, 0x44, 0x9b, 0x01, + 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, + 0xd4, 0x00, 0x00, 0x00, 0x42, 0x3d, 0x01, 0x00, + 0x00, 0x44, 0x9c, 0x01, 0x00, 0x00, 0x39, 0xd4, + 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, + 0x42, 0x3d, 0x01, 0x00, 0x00, 0x44, 0x9d, 0x01, + 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, + 0xd4, 0x00, 0x00, 0x00, 0x42, 0x3d, 0x01, 0x00, + 0x00, 0x44, 0x9e, 0x01, 0x00, 0x00, 0x39, 0xd4, + 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, + 0x42, 0x3d, 0x01, 0x00, 0x00, 0x44, 0x9f, 0x01, + 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, + 0xd4, 0x00, 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, + 0x00, 0x44, 0xa0, 0x01, 0x00, 0x00, 0x39, 0xd4, + 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, + 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, 0xa1, 0x01, + 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, + 0xd4, 0x00, 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, + 0x00, 0x44, 0xa2, 0x01, 0x00, 0x00, 0x39, 0xd4, + 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, + 0x42, 0xeb, 0x00, 0x00, 0x00, 0x44, 0x14, 0x01, + 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, + 0xd4, 0x00, 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, + 0x00, 0x44, 0xa3, 0x01, 0x00, 0x00, 0x39, 0xd4, + 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, + 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, 0xa4, 0x01, + 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, + 0xd4, 0x00, 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, + 0x00, 0x44, 0xa5, 0x01, 0x00, 0x00, 0x39, 0xd4, + 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, + 0x42, 0x31, 0x01, 0x00, 0x00, 0x44, 0x15, 0x01, + 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, + 0xd4, 0x00, 0x00, 0x00, 0x42, 0x31, 0x01, 0x00, + 0x00, 0x44, 0x20, 0x01, 0x00, 0x00, 0x39, 0xd4, + 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, + 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, 0xa6, 0x01, + 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, + 0xd4, 0x00, 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, + 0x00, 0x44, 0x24, 0x01, 0x00, 0x00, 0x39, 0xd4, + 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, + 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, 0x29, 0x01, + 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, + 0xd4, 0x00, 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, + 0x00, 0x44, 0xa7, 0x01, 0x00, 0x00, 0x39, 0xd4, + 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, + 0x42, 0x32, 0x01, 0x00, 0x00, 0x44, 0x16, 0x01, + 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, + 0xd4, 0x00, 0x00, 0x00, 0x42, 0x30, 0x01, 0x00, + 0x00, 0x44, 0xa8, 0x01, 0x00, 0x00, 0x39, 0xd4, + 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, + 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, 0xa9, 0x01, + 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, + 0xd4, 0x00, 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, + 0x00, 0x44, 0xaa, 0x01, 0x00, 0x00, 0x39, 0xd4, + 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, + 0x42, 0x37, 0x01, 0x00, 0x00, 0x44, 0xab, 0x01, + 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, + 0xd4, 0x00, 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, + 0x00, 0x44, 0xac, 0x01, 0x00, 0x00, 0x39, 0xd4, + 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, + 0x42, 0x32, 0x01, 0x00, 0x00, 0x44, 0xad, 0x01, + 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, + 0xd4, 0x00, 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, + 0x00, 0x44, 0x17, 0x01, 0x00, 0x00, 0x39, 0xd4, + 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, + 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, 0xae, 0x01, + 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, + 0xd4, 0x00, 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, + 0x00, 0x44, 0xaf, 0x01, 0x00, 0x00, 0x39, 0xd4, + 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, + 0x42, 0x10, 0x01, 0x00, 0x00, 0x44, 0x18, 0x01, + 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, + 0xd4, 0x00, 0x00, 0x00, 0x42, 0x31, 0x01, 0x00, + 0x00, 0x44, 0x19, 0x01, 0x00, 0x00, 0x39, 0xd4, + 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, + 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, 0x1a, 0x01, + 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, + 0xd4, 0x00, 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, + 0x00, 0x44, 0xb0, 0x01, 0x00, 0x00, 0x39, 0xd4, + 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, + 0x42, 0x32, 0x01, 0x00, 0x00, 0x44, 0x1b, 0x01, + 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, + 0xd4, 0x00, 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, + 0x00, 0x44, 0xb1, 0x01, 0x00, 0x00, 0x39, 0xd4, + 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, + 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, 0xb2, 0x01, + 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, + 0xd4, 0x00, 0x00, 0x00, 0x42, 0x30, 0x01, 0x00, + 0x00, 0x44, 0xb3, 0x01, 0x00, 0x00, 0x39, 0xd4, + 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, + 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, 0xb4, 0x01, + 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, + 0xd4, 0x00, 0x00, 0x00, 0x42, 0x32, 0x01, 0x00, + 0x00, 0x44, 0xb5, 0x01, 0x00, 0x00, 0x39, 0xd4, + 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, + 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, 0xb6, 0x01, + 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, + 0xd4, 0x00, 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, + 0x00, 0x44, 0xb7, 0x01, 0x00, 0x00, 0x39, 0xd4, + 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, + 0x42, 0x31, 0x01, 0x00, 0x00, 0x44, 0xb8, 0x01, + 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, + 0xd4, 0x00, 0x00, 0x00, 0x42, 0x32, 0x01, 0x00, + 0x00, 0x44, 0xb9, 0x01, 0x00, 0x00, 0x39, 0xd4, + 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, + 0x42, 0x32, 0x01, 0x00, 0x00, 0x44, 0xba, 0x01, + 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, + 0xd4, 0x00, 0x00, 0x00, 0x42, 0x32, 0x01, 0x00, + 0x00, 0x44, 0x1c, 0x01, 0x00, 0x00, 0x39, 0xd4, + 0x00, 0x00, 0x00, 0x39, 0xd4, 0x00, 0x00, 0x00, + 0x42, 0x21, 0x01, 0x00, 0x00, 0x15, 0x44, 0xbb, + 0x01, 0x00, 0x00, 0xc8, 0x0b, 0xbf, 0x25, 0x4e, + 0x2f, 0x01, 0x00, 0x00, 0x4d, 0x2f, 0x01, 0x00, + 0x00, 0xbf, 0x26, 0x4e, 0x77, 0x00, 0x00, 0x00, + 0x4d, 0x77, 0x00, 0x00, 0x00, 0xbf, 0x27, 0x4e, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x00, 0xbf, 0x28, 0x4e, 0xe7, 0x00, 0x00, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0xbf, 0x29, 0x4e, + 0xec, 0x00, 0x00, 0x00, 0x4d, 0xec, 0x00, 0x00, + 0x00, 0xbf, 0x2a, 0x4e, 0x34, 0x01, 0x00, 0x00, + 0x4d, 0x34, 0x01, 0x00, 0x00, 0xbf, 0x2b, 0x4e, + 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, + 0x00, 0xbf, 0x2c, 0x4e, 0x37, 0x01, 0x00, 0x00, + 0x4d, 0x37, 0x01, 0x00, 0x00, 0xbf, 0x2d, 0x4e, + 0x39, 0x01, 0x00, 0x00, 0x4d, 0x39, 0x01, 0x00, + 0x00, 0xbf, 0x2e, 0x4e, 0x27, 0x01, 0x00, 0x00, + 0x4d, 0x27, 0x01, 0x00, 0x00, 0xbf, 0x2f, 0x4e, + 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xfc, 0x00, 0x00, + 0x00, 0xbf, 0x30, 0x4e, 0xfd, 0x00, 0x00, 0x00, + 0x4d, 0xfd, 0x00, 0x00, 0x00, 0xbf, 0x31, 0x4e, + 0xff, 0x00, 0x00, 0x00, 0x4d, 0xff, 0x00, 0x00, + 0x00, 0xbf, 0x32, 0x4e, 0x00, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x01, 0x00, 0x00, 0xbf, 0x33, 0x4e, + 0x06, 0x01, 0x00, 0x00, 0x4d, 0x06, 0x01, 0x00, + 0x00, 0xbf, 0x34, 0x4e, 0x28, 0x01, 0x00, 0x00, + 0x4d, 0x28, 0x01, 0x00, 0x00, 0xbf, 0x35, 0x4e, + 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x0a, 0x01, 0x00, + 0x00, 0xbf, 0x36, 0x4e, 0x22, 0x01, 0x00, 0x00, + 0x4d, 0x22, 0x01, 0x00, 0x00, 0xbf, 0x37, 0x4e, + 0xa2, 0x01, 0x00, 0x00, 0x4d, 0xa2, 0x01, 0x00, + 0x00, 0xbf, 0x38, 0x4e, 0x15, 0x01, 0x00, 0x00, + 0x4d, 0x15, 0x01, 0x00, 0x00, 0xbf, 0x39, 0x4e, + 0xaa, 0x01, 0x00, 0x00, 0x4d, 0xaa, 0x01, 0x00, + 0x00, 0xbf, 0x3a, 0x4e, 0x18, 0x01, 0x00, 0x00, + 0x4d, 0x18, 0x01, 0x00, 0x00, 0x11, 0x3a, 0xd5, + 0x00, 0x00, 0x00, 0x0e, 0x39, 0xd5, 0x00, 0x00, + 0x00, 0x39, 0xd5, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0x21, 0x01, 0x00, 0x00, + 0x39, 0xd5, 0x00, 0x00, 0x00, 0x39, 0xd5, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0xe5, 0x00, 0x00, 0x00, 0x39, 0xd5, 0x00, 0x00, + 0x00, 0x39, 0xd5, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0xe8, 0x00, 0x00, 0x00, + 0x39, 0xd5, 0x00, 0x00, 0x00, 0x39, 0xd5, 0x00, + 0x00, 0x00, 0x42, 0x77, 0x00, 0x00, 0x00, 0x44, + 0xe9, 0x00, 0x00, 0x00, 0x39, 0xd5, 0x00, 0x00, + 0x00, 0x39, 0xd5, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0xeb, 0x00, 0x00, 0x00, + 0x39, 0xd5, 0x00, 0x00, 0x00, 0x39, 0xd5, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x4b, 0x01, 0x00, 0x00, 0x39, 0xd5, 0x00, 0x00, + 0x00, 0x39, 0xd5, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0xed, 0x00, 0x00, 0x00, + 0x39, 0xd5, 0x00, 0x00, 0x00, 0x39, 0xd5, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0xee, 0x00, 0x00, 0x00, 0x39, 0xd5, 0x00, 0x00, + 0x00, 0x39, 0xd5, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0xef, 0x00, 0x00, 0x00, + 0x39, 0xd5, 0x00, 0x00, 0x00, 0x39, 0xd5, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x35, 0x01, 0x00, 0x00, 0x39, 0xd5, 0x00, 0x00, + 0x00, 0x39, 0xd5, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0xf0, 0x00, 0x00, 0x00, + 0x39, 0xd5, 0x00, 0x00, 0x00, 0x39, 0xd5, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0xf2, 0x00, 0x00, 0x00, 0x39, 0xd5, 0x00, 0x00, + 0x00, 0x39, 0xd5, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0xf4, 0x00, 0x00, 0x00, + 0x39, 0xd5, 0x00, 0x00, 0x00, 0x39, 0xd5, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0xf5, 0x00, 0x00, 0x00, 0x39, 0xd5, 0x00, 0x00, + 0x00, 0x39, 0xd5, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0xf6, 0x00, 0x00, 0x00, + 0x39, 0xd5, 0x00, 0x00, 0x00, 0x39, 0xd5, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0xf7, 0x00, 0x00, 0x00, 0x39, 0xd5, 0x00, 0x00, + 0x00, 0x39, 0xd5, 0x00, 0x00, 0x00, 0x42, 0x37, + 0x01, 0x00, 0x00, 0x44, 0xf8, 0x00, 0x00, 0x00, + 0x39, 0xd5, 0x00, 0x00, 0x00, 0x39, 0xd5, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x55, 0x01, 0x00, 0x00, 0x39, 0xd5, 0x00, 0x00, + 0x00, 0x39, 0xd5, 0x00, 0x00, 0x00, 0x42, 0x37, + 0x01, 0x00, 0x00, 0x44, 0x38, 0x01, 0x00, 0x00, + 0x39, 0xd5, 0x00, 0x00, 0x00, 0x39, 0xd5, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0xf9, 0x00, 0x00, 0x00, 0x39, 0xd5, 0x00, 0x00, + 0x00, 0x39, 0xd5, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0x56, 0x01, 0x00, 0x00, + 0x39, 0xd5, 0x00, 0x00, 0x00, 0x39, 0xd5, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x3b, 0x01, 0x00, 0x00, 0x39, 0xd5, 0x00, 0x00, + 0x00, 0x39, 0xd5, 0x00, 0x00, 0x00, 0x42, 0x27, + 0x01, 0x00, 0x00, 0x44, 0xfa, 0x00, 0x00, 0x00, + 0x39, 0xd5, 0x00, 0x00, 0x00, 0x39, 0xd5, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0xfb, 0x00, 0x00, 0x00, 0x39, 0xd5, 0x00, 0x00, + 0x00, 0x39, 0xd5, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0x5a, 0x01, 0x00, 0x00, + 0x39, 0xd5, 0x00, 0x00, 0x00, 0x39, 0xd5, 0x00, + 0x00, 0x00, 0x42, 0x37, 0x01, 0x00, 0x00, 0x44, + 0x5b, 0x01, 0x00, 0x00, 0x39, 0xd5, 0x00, 0x00, + 0x00, 0x39, 0xd5, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0x5c, 0x01, 0x00, 0x00, + 0x39, 0xd5, 0x00, 0x00, 0x00, 0x39, 0xd5, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x5d, 0x01, 0x00, 0x00, 0x39, 0xd5, 0x00, 0x00, + 0x00, 0x39, 0xd5, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0x0d, 0x00, 0x00, 0x00, + 0x39, 0xd5, 0x00, 0x00, 0x00, 0x39, 0xd5, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x3c, 0x01, 0x00, 0x00, 0x39, 0xd5, 0x00, 0x00, + 0x00, 0x39, 0xd5, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0x61, 0x01, 0x00, 0x00, + 0x39, 0xd5, 0x00, 0x00, 0x00, 0x39, 0xd5, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0xfe, 0x00, 0x00, 0x00, 0x39, 0xd5, 0x00, 0x00, + 0x00, 0x39, 0xd5, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0x01, 0x01, 0x00, 0x00, + 0x39, 0xd5, 0x00, 0x00, 0x00, 0x39, 0xd5, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x26, 0x01, 0x00, 0x00, 0x39, 0xd5, 0x00, 0x00, + 0x00, 0x39, 0xd5, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0x02, 0x01, 0x00, 0x00, + 0x39, 0xd5, 0x00, 0x00, 0x00, 0x39, 0xd5, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x73, 0x01, 0x00, 0x00, 0x39, 0xd5, 0x00, 0x00, + 0x00, 0x39, 0xd5, 0x00, 0x00, 0x00, 0x42, 0x37, + 0x01, 0x00, 0x00, 0x44, 0x03, 0x01, 0x00, 0x00, + 0x39, 0xd5, 0x00, 0x00, 0x00, 0x39, 0xd5, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x04, 0x01, 0x00, 0x00, 0x39, 0xd5, 0x00, 0x00, + 0x00, 0x39, 0xd5, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0x05, 0x01, 0x00, 0x00, + 0x39, 0xd5, 0x00, 0x00, 0x00, 0x39, 0xd5, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x25, 0x01, 0x00, 0x00, 0x39, 0xd5, 0x00, 0x00, + 0x00, 0x39, 0xd5, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0x1f, 0x01, 0x00, 0x00, + 0x39, 0xd5, 0x00, 0x00, 0x00, 0x39, 0xd5, 0x00, + 0x00, 0x00, 0x42, 0x37, 0x01, 0x00, 0x00, 0x44, + 0x40, 0x01, 0x00, 0x00, 0x39, 0xd5, 0x00, 0x00, + 0x00, 0x39, 0xd5, 0x00, 0x00, 0x00, 0x42, 0x37, + 0x01, 0x00, 0x00, 0x44, 0x07, 0x01, 0x00, 0x00, + 0x39, 0xd5, 0x00, 0x00, 0x00, 0x39, 0xd5, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x7b, 0x01, 0x00, 0x00, 0x39, 0xd5, 0x00, 0x00, + 0x00, 0x39, 0xd5, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0x09, 0x01, 0x00, 0x00, + 0x39, 0xd5, 0x00, 0x00, 0x00, 0x39, 0xd5, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x0b, 0x01, 0x00, 0x00, 0x39, 0xd5, 0x00, 0x00, + 0x00, 0x39, 0xd5, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0x23, 0x01, 0x00, 0x00, + 0x39, 0xd5, 0x00, 0x00, 0x00, 0x39, 0xd5, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x0c, 0x01, 0x00, 0x00, 0x39, 0xd5, 0x00, 0x00, + 0x00, 0x39, 0xd5, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0x8a, 0x01, 0x00, 0x00, + 0x39, 0xd5, 0x00, 0x00, 0x00, 0x39, 0xd5, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x8b, 0x01, 0x00, 0x00, 0x39, 0xd5, 0x00, 0x00, + 0x00, 0x39, 0xd5, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0x0d, 0x01, 0x00, 0x00, + 0x39, 0xd5, 0x00, 0x00, 0x00, 0x39, 0xd5, 0x00, + 0x00, 0x00, 0x42, 0x37, 0x01, 0x00, 0x00, 0x44, + 0x0f, 0x01, 0x00, 0x00, 0x39, 0xd5, 0x00, 0x00, + 0x00, 0x39, 0xd5, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0x8e, 0x01, 0x00, 0x00, + 0x39, 0xd5, 0x00, 0x00, 0x00, 0x39, 0xd5, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x10, 0x01, 0x00, 0x00, 0x39, 0xd5, 0x00, 0x00, + 0x00, 0x39, 0xd5, 0x00, 0x00, 0x00, 0x42, 0xfd, + 0x00, 0x00, 0x00, 0x44, 0x92, 0x01, 0x00, 0x00, + 0x39, 0xd5, 0x00, 0x00, 0x00, 0x39, 0xd5, 0x00, + 0x00, 0x00, 0x42, 0xfd, 0x00, 0x00, 0x00, 0x44, + 0x93, 0x01, 0x00, 0x00, 0x39, 0xd5, 0x00, 0x00, + 0x00, 0x39, 0xd5, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0x94, 0x01, 0x00, 0x00, + 0x39, 0xd5, 0x00, 0x00, 0x00, 0x39, 0xd5, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x9a, 0x01, 0x00, 0x00, 0x39, 0xd5, 0x00, 0x00, + 0x00, 0x39, 0xd5, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0x11, 0x01, 0x00, 0x00, + 0x39, 0xd5, 0x00, 0x00, 0x00, 0x39, 0xd5, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x12, 0x01, 0x00, 0x00, 0x39, 0xd5, 0x00, 0x00, + 0x00, 0x39, 0xd5, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0x13, 0x01, 0x00, 0x00, + 0x39, 0xd5, 0x00, 0x00, 0x00, 0x39, 0xd5, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x14, 0x01, 0x00, 0x00, 0x39, 0xd5, 0x00, 0x00, + 0x00, 0x39, 0xd5, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0x20, 0x01, 0x00, 0x00, + 0x39, 0xd5, 0x00, 0x00, 0x00, 0x39, 0xd5, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x24, 0x01, 0x00, 0x00, 0x39, 0xd5, 0x00, 0x00, + 0x00, 0x39, 0xd5, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0x29, 0x01, 0x00, 0x00, + 0x39, 0xd5, 0x00, 0x00, 0x00, 0x39, 0xd5, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x16, 0x01, 0x00, 0x00, 0x39, 0xd5, 0x00, 0x00, + 0x00, 0x39, 0xd5, 0x00, 0x00, 0x00, 0x42, 0x37, + 0x01, 0x00, 0x00, 0x44, 0xab, 0x01, 0x00, 0x00, + 0x39, 0xd5, 0x00, 0x00, 0x00, 0x39, 0xd5, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x17, 0x01, 0x00, 0x00, 0x39, 0xd5, 0x00, 0x00, + 0x00, 0x39, 0xd5, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0x19, 0x01, 0x00, 0x00, + 0x39, 0xd5, 0x00, 0x00, 0x00, 0x39, 0xd5, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0x1a, 0x01, 0x00, 0x00, 0x39, 0xd5, 0x00, 0x00, + 0x00, 0x39, 0xd5, 0x00, 0x00, 0x00, 0x42, 0x37, + 0x01, 0x00, 0x00, 0x44, 0x1b, 0x01, 0x00, 0x00, + 0x39, 0xd5, 0x00, 0x00, 0x00, 0x39, 0xd5, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x44, + 0xba, 0x01, 0x00, 0x00, 0x39, 0xd5, 0x00, 0x00, + 0x00, 0x39, 0xd5, 0x00, 0x00, 0x00, 0x42, 0x2f, + 0x01, 0x00, 0x00, 0x44, 0x1c, 0x01, 0x00, 0x00, + 0x39, 0xd5, 0x00, 0x00, 0x00, 0x39, 0xd5, 0x00, + 0x00, 0x00, 0x42, 0x2f, 0x01, 0x00, 0x00, 0x15, + 0x44, 0xbb, 0x01, 0x00, 0x00, 0xc8, 0xbe, 0x3c, + 0xbe, 0x3d, 0x33, 0x11, 0x3a, 0xd7, 0x00, 0x00, + 0x00, 0x0e, 0xbf, 0x40, 0xed, 0x11, 0x3a, 0xda, + 0x00, 0x00, 0x00, 0x0e, 0xbf, 0x41, 0xed, 0x98, + 0xc8, 0x39, 0xe1, 0x00, 0x00, 0x00, 0x42, 0xbc, + 0x01, 0x00, 0x00, 0x43, 0xe3, 0x00, 0x00, 0x00, + 0x04, 0xe4, 0x00, 0x00, 0x00, 0x04, 0xe5, 0x00, + 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x04, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe8, 0x00, 0x00, + 0x00, 0x04, 0xe9, 0x00, 0x00, 0x00, 0x04, 0xea, + 0x00, 0x00, 0x00, 0x04, 0xeb, 0x00, 0x00, 0x00, + 0x04, 0xec, 0x00, 0x00, 0x00, 0x04, 0xed, 0x00, + 0x00, 0x00, 0x04, 0xee, 0x00, 0x00, 0x00, 0x04, + 0xef, 0x00, 0x00, 0x00, 0x04, 0xf0, 0x00, 0x00, + 0x00, 0x04, 0xf1, 0x00, 0x00, 0x00, 0x04, 0xf2, + 0x00, 0x00, 0x00, 0x04, 0xf3, 0x00, 0x00, 0x00, + 0x04, 0xf4, 0x00, 0x00, 0x00, 0x04, 0xf5, 0x00, + 0x00, 0x00, 0x04, 0xf6, 0x00, 0x00, 0x00, 0x04, + 0xf7, 0x00, 0x00, 0x00, 0x04, 0xf8, 0x00, 0x00, + 0x00, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x04, 0xfa, + 0x00, 0x00, 0x00, 0x04, 0xfb, 0x00, 0x00, 0x00, + 0x04, 0xfc, 0x00, 0x00, 0x00, 0x04, 0xfd, 0x00, + 0x00, 0x00, 0x04, 0xfe, 0x00, 0x00, 0x00, 0x04, + 0xff, 0x00, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, + 0x00, 0x04, 0x01, 0x01, 0x00, 0x00, 0x04, 0x02, + 0x01, 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, 0x00, + 0x26, 0x20, 0x00, 0x04, 0x04, 0x01, 0x00, 0x00, + 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0x05, 0x01, + 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, + 0x06, 0x01, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, + 0x80, 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0x23, + 0x00, 0x00, 0x80, 0x04, 0x08, 0x01, 0x00, 0x00, + 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x09, 0x01, + 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, + 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, + 0x80, 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, 0x27, + 0x00, 0x00, 0x80, 0x04, 0x0c, 0x01, 0x00, 0x00, + 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x0d, 0x01, + 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, + 0x0e, 0x01, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, + 0x80, 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, 0x2b, + 0x00, 0x00, 0x80, 0x04, 0x10, 0x01, 0x00, 0x00, + 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x11, 0x01, + 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, + 0x12, 0x01, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, + 0x80, 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, 0x2f, + 0x00, 0x00, 0x80, 0x04, 0x14, 0x01, 0x00, 0x00, + 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, + 0x80, 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, 0x33, + 0x00, 0x00, 0x80, 0x04, 0x18, 0x01, 0x00, 0x00, + 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x19, 0x01, + 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, + 0x1a, 0x01, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, + 0x80, 0x04, 0x1b, 0x01, 0x00, 0x00, 0x4d, 0x37, + 0x00, 0x00, 0x80, 0x04, 0x1c, 0x01, 0x00, 0x00, + 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x1d, 0x01, + 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, + 0x1e, 0x01, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, + 0x80, 0x04, 0x1f, 0x01, 0x00, 0x00, 0x4d, 0x3b, + 0x00, 0x00, 0x80, 0x04, 0x20, 0x01, 0x00, 0x00, + 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x21, 0x01, + 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, + 0x22, 0x01, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, + 0x80, 0x04, 0x77, 0x00, 0x00, 0x00, 0x4d, 0x3f, + 0x00, 0x00, 0x80, 0x04, 0x23, 0x01, 0x00, 0x00, + 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x24, 0x01, + 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, + 0x25, 0x01, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, + 0x80, 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, 0x43, + 0x00, 0x00, 0x80, 0x04, 0x27, 0x01, 0x00, 0x00, + 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x28, 0x01, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, + 0x29, 0x01, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, + 0x80, 0x04, 0x2a, 0x01, 0x00, 0x00, 0x4d, 0x47, + 0x00, 0x00, 0x80, 0x04, 0x2b, 0x01, 0x00, 0x00, + 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x01, + 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, + 0x2d, 0x01, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, + 0x80, 0x04, 0x2d, 0x01, 0x00, 0x00, 0x4d, 0x4b, + 0x00, 0x00, 0x80, 0x24, 0x01, 0x00, 0x0e, 0x39, + 0x88, 0x00, 0x00, 0x00, 0x42, 0xe1, 0x00, 0x00, + 0x00, 0x39, 0xda, 0x00, 0x00, 0x00, 0x15, 0x44, + 0xbd, 0x01, 0x00, 0x00, 0xcc, 0x28, 0xfc, 0x06, + 0x01, 0x0a, 0x00, 0x42, 0x01, 0x00, 0x48, 0x02, + 0x00, 0xe9, 0x32, 0x1c, 0x0d, 0x43, 0x06, 0x00, + 0x00, 0x01, 0x58, 0x01, 0x0b, 0x00, 0x6c, 0xe1, + 0x43, 0x59, 0xa2, 0x03, 0x00, 0x01, 0x00, 0xa4, + 0x03, 0x00, 0x00, 0x80, 0xa6, 0x03, 0x00, 0x01, + 0x00, 0xa8, 0x03, 0x00, 0x02, 0x00, 0xaa, 0x03, + 0x00, 0x03, 0x00, 0xac, 0x03, 0x00, 0x04, 0x80, + 0xae, 0x03, 0x00, 0x05, 0x00, 0xb0, 0x03, 0x00, + 0x06, 0x00, 0xb2, 0x03, 0x00, 0x07, 0x00, 0xb4, + 0x03, 0x00, 0x08, 0x80, 0xfe, 0x06, 0x00, 0x09, + 0x00, 0x80, 0x07, 0x00, 0x0a, 0x80, 0x82, 0x07, + 0x00, 0x0b, 0x80, 0x84, 0x07, 0x00, 0x0c, 0x80, + 0x86, 0x07, 0x00, 0x0d, 0x80, 0x88, 0x07, 0x00, + 0x0e, 0x80, 0x8a, 0x07, 0x00, 0x0f, 0x80, 0x8c, + 0x07, 0x00, 0x10, 0x80, 0x8e, 0x07, 0x00, 0x11, + 0x80, 0x90, 0x07, 0x00, 0x12, 0x80, 0x92, 0x07, + 0x00, 0x13, 0x80, 0x94, 0x07, 0x00, 0x14, 0x80, + 0x96, 0x07, 0x00, 0x15, 0x80, 0x98, 0x07, 0x00, + 0x16, 0x80, 0x9a, 0x07, 0x00, 0x17, 0x80, 0x9c, + 0x07, 0x00, 0x18, 0x80, 0x9e, 0x07, 0x00, 0x19, + 0x80, 0xa0, 0x07, 0x00, 0x1a, 0x80, 0xa2, 0x07, + 0x00, 0x1b, 0x80, 0xa4, 0x07, 0x00, 0x1c, 0x80, + 0xa6, 0x07, 0x00, 0x1d, 0x80, 0xa8, 0x07, 0x00, + 0x1e, 0x00, 0xaa, 0x07, 0x00, 0x1f, 0x00, 0xac, + 0x07, 0x00, 0x20, 0x00, 0xae, 0x07, 0x00, 0x21, + 0x00, 0xb0, 0x07, 0x00, 0x22, 0x80, 0xb2, 0x07, + 0x00, 0x23, 0x80, 0xb4, 0x07, 0x00, 0x24, 0x80, + 0xb6, 0x07, 0x00, 0x25, 0x80, 0xb8, 0x07, 0x00, + 0x26, 0x80, 0xba, 0x07, 0x00, 0x27, 0x80, 0xbc, + 0x07, 0x00, 0x28, 0x80, 0xbe, 0x07, 0x00, 0x29, + 0x80, 0xc0, 0x07, 0x00, 0x2a, 0x80, 0xc2, 0x07, + 0x00, 0x2b, 0x80, 0xc4, 0x07, 0x00, 0x2c, 0x80, + 0xc6, 0x07, 0x00, 0x2d, 0x80, 0xc8, 0x07, 0x00, + 0x2e, 0x80, 0xca, 0x07, 0x00, 0x2f, 0x80, 0xcc, + 0x07, 0x00, 0x30, 0x80, 0xce, 0x07, 0x00, 0x31, + 0x80, 0xd0, 0x07, 0x00, 0x32, 0x80, 0xd2, 0x07, + 0x00, 0x33, 0x80, 0xa2, 0x05, 0x00, 0x34, 0x80, + 0xd4, 0x07, 0x00, 0x35, 0x80, 0xd2, 0x04, 0x00, + 0x36, 0x80, 0x94, 0x04, 0x00, 0x37, 0x80, 0xd6, + 0x07, 0x00, 0x38, 0x80, 0xd8, 0x07, 0x00, 0x39, + 0x80, 0xda, 0x07, 0x00, 0x3a, 0x80, 0xdc, 0x07, + 0x00, 0x3b, 0x80, 0xac, 0x06, 0x00, 0x3c, 0x80, + 0xde, 0x07, 0x00, 0x3d, 0x80, 0x96, 0x05, 0x00, + 0x3e, 0x80, 0xe0, 0x07, 0x00, 0x3f, 0x80, 0xe2, + 0x07, 0x00, 0x40, 0x80, 0xe4, 0x07, 0x00, 0x41, + 0x80, 0xf6, 0x04, 0x00, 0x42, 0x80, 0xe0, 0x06, + 0x00, 0x43, 0x80, 0xe6, 0x07, 0x00, 0x44, 0x80, + 0xde, 0x03, 0x00, 0x45, 0x80, 0xe8, 0x07, 0x00, + 0x46, 0x80, 0xce, 0x03, 0x00, 0x47, 0x80, 0xea, + 0x07, 0x00, 0x48, 0x80, 0xec, 0x07, 0x00, 0x49, + 0x80, 0xee, 0x07, 0x00, 0x4a, 0x80, 0xf0, 0x07, + 0x00, 0x4b, 0x80, 0xf2, 0x07, 0x00, 0x4c, 0x80, + 0xf4, 0x07, 0x00, 0x4d, 0x80, 0xf6, 0x07, 0x00, + 0x4e, 0x80, 0xf8, 0x07, 0x00, 0x4f, 0x80, 0xfa, + 0x07, 0x00, 0x50, 0x80, 0xfc, 0x07, 0x00, 0x51, + 0x80, 0xfe, 0x07, 0x00, 0x52, 0x80, 0x80, 0x08, + 0x00, 0x53, 0x80, 0x82, 0x08, 0x00, 0x54, 0x80, + 0x84, 0x08, 0x00, 0x55, 0x80, 0x86, 0x08, 0x00, + 0x56, 0x80, 0x88, 0x08, 0x00, 0x57, 0x80, 0xbf, + 0x20, 0xc2, 0x17, 0xbf, 0x21, 0xc2, 0x18, 0xbf, + 0x22, 0xc2, 0x19, 0xbf, 0x23, 0xc2, 0x1a, 0xbf, + 0x24, 0xc2, 0x1b, 0xbf, 0x25, 0xc2, 0x1c, 0xbf, + 0x26, 0xc2, 0x1d, 0xbf, 0x27, 0xc2, 0x27, 0xbf, + 0x28, 0xc2, 0x29, 0xbf, 0x29, 0xc2, 0x2a, 0xbf, + 0x2a, 0xc2, 0x2b, 0xbf, 0x2f, 0xc2, 0x2e, 0xbf, + 0x30, 0xc2, 0x2f, 0xbf, 0x31, 0xc2, 0x30, 0xbf, + 0x32, 0xc2, 0x31, 0xbf, 0x33, 0xc2, 0x32, 0xbf, + 0x34, 0xc2, 0x33, 0xbf, 0x35, 0xc2, 0x34, 0xbf, + 0x36, 0xc2, 0x35, 0xbf, 0x38, 0xc2, 0x38, 0xbf, + 0x39, 0xc2, 0x39, 0xbf, 0x3a, 0xc2, 0x3a, 0xbf, + 0x3b, 0xc2, 0x3b, 0xbf, 0x3c, 0xc2, 0x3c, 0xbf, + 0x3d, 0xc2, 0x3d, 0xbf, 0x3e, 0xc2, 0x3e, 0xbf, + 0x3f, 0xc2, 0x3f, 0xbf, 0x53, 0xc2, 0x46, 0xbf, + 0x54, 0xc2, 0x47, 0xbf, 0x55, 0xc2, 0x48, 0xbf, + 0x56, 0xc2, 0x49, 0xbf, 0x57, 0xc2, 0x4a, 0xbf, + 0x58, 0xc2, 0x4b, 0xbf, 0x59, 0xc2, 0x4e, 0xbf, + 0x5a, 0xc2, 0x4f, 0xbf, 0x5b, 0xc2, 0x50, 0xbf, + 0x5c, 0xc2, 0x52, 0xbf, 0x5d, 0xc2, 0x53, 0xbf, + 0x5e, 0xc2, 0x54, 0xbf, 0x5f, 0xc2, 0x55, 0xbf, + 0x60, 0xc2, 0x56, 0x04, 0x1b, 0x00, 0x00, 0x00, + 0x38, 0x93, 0x00, 0x00, 0x00, 0x99, 0xab, 0xe9, + 0x18, 0x04, 0x49, 0x00, 0x00, 0x00, 0x39, 0x93, + 0x00, 0x00, 0x00, 0x42, 0x05, 0x02, 0x00, 0x00, + 0x99, 0xab, 0xe9, 0x05, 0xbf, 0x00, 0xeb, 0x03, + 0xbf, 0x01, 0xc9, 0x04, 0x1b, 0x00, 0x00, 0x00, + 0x38, 0x93, 0x00, 0x00, 0x00, 0x99, 0xab, 0x11, + 0xe9, 0x22, 0x0e, 0x39, 0x93, 0x00, 0x00, 0x00, + 0x42, 0x11, 0x00, 0x00, 0x00, 0x11, 0xe9, 0x14, + 0x0e, 0x39, 0x93, 0x00, 0x00, 0x00, 0x43, 0x11, + 0x00, 0x00, 0x00, 0x04, 0x06, 0x02, 0x00, 0x00, + 0x24, 0x01, 0x00, 0x11, 0xea, 0x07, 0x0e, 0x01, + 0xc7, 0xea, 0x00, 0x00, 0xc8, 0xbf, 0x02, 0xca, + 0xbf, 0x03, 0xed, 0xcb, 0xbf, 0x04, 0x4e, 0xd6, + 0x00, 0x00, 0x00, 0xc2, 0x04, 0x39, 0x8d, 0x00, + 0x00, 0x00, 0x42, 0x07, 0x02, 0x00, 0x00, 0x11, + 0xea, 0x04, 0x0e, 0xbf, 0x05, 0xc2, 0x05, 0x06, + 0x39, 0xd0, 0x00, 0x00, 0x00, 0xad, 0xe9, 0x08, + 0x39, 0xdc, 0x00, 0x00, 0x00, 0xeb, 0x06, 0x39, + 0xd0, 0x00, 0x00, 0x00, 0xc2, 0x06, 0xbf, 0x06, + 0x4e, 0xd9, 0x00, 0x00, 0x00, 0xc2, 0x07, 0x39, + 0x8d, 0x00, 0x00, 0x00, 0x43, 0x08, 0x02, 0x00, + 0x00, 0x0b, 0xc6, 0x4d, 0x09, 0x02, 0x00, 0x00, + 0xbf, 0x07, 0x4e, 0x0a, 0x02, 0x00, 0x00, 0x4d, + 0x0a, 0x02, 0x00, 0x00, 0xbf, 0x08, 0x4e, 0x0b, + 0x02, 0x00, 0x00, 0x4d, 0x0b, 0x02, 0x00, 0x00, + 0xc7, 0x4d, 0x0c, 0x02, 0x00, 0x00, 0xbf, 0x09, + 0x4e, 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x0d, 0x02, + 0x00, 0x00, 0xbf, 0x0a, 0x4e, 0x0e, 0x02, 0x00, + 0x00, 0x4d, 0x0e, 0x02, 0x00, 0x00, 0xc1, 0x04, + 0x4d, 0x63, 0x00, 0x00, 0x00, 0xbf, 0x0b, 0x4d, + 0x40, 0x00, 0x00, 0x00, 0xbf, 0x0c, 0x4e, 0x0f, + 0x02, 0x00, 0x00, 0x4d, 0x0f, 0x02, 0x00, 0x00, + 0xbf, 0x0d, 0x4e, 0x10, 0x02, 0x00, 0x00, 0x4d, + 0x10, 0x02, 0x00, 0x00, 0xbf, 0x0e, 0x4e, 0x11, + 0x02, 0x00, 0x00, 0x4d, 0x11, 0x02, 0x00, 0x00, + 0xbf, 0x0f, 0x4e, 0x12, 0x02, 0x00, 0x00, 0x4d, + 0x12, 0x02, 0x00, 0x00, 0xbf, 0x10, 0x4e, 0x13, + 0x02, 0x00, 0x00, 0x4d, 0x13, 0x02, 0x00, 0x00, + 0xbf, 0x11, 0x4e, 0x14, 0x02, 0x00, 0x00, 0x4d, + 0x14, 0x02, 0x00, 0x00, 0xbf, 0x12, 0x4e, 0x15, + 0x02, 0x00, 0x00, 0x4d, 0x15, 0x02, 0x00, 0x00, + 0xc1, 0x06, 0x4d, 0x16, 0x02, 0x00, 0x00, 0xbf, + 0x13, 0x4d, 0x41, 0x00, 0x00, 0x00, 0xc1, 0x07, + 0x4d, 0x17, 0x02, 0x00, 0x00, 0xbf, 0x14, 0x4e, + 0x18, 0x02, 0x00, 0x00, 0x4d, 0x18, 0x02, 0x00, + 0x00, 0xbf, 0x15, 0x4e, 0x19, 0x02, 0x00, 0x00, + 0x4d, 0x19, 0x02, 0x00, 0x00, 0xbf, 0x16, 0x4e, + 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x1a, 0x02, 0x00, + 0x00, 0xbf, 0x17, 0x4e, 0x1b, 0x02, 0x00, 0x00, + 0x4d, 0x1b, 0x02, 0x00, 0x00, 0x0b, 0x4d, 0x1c, + 0x02, 0x00, 0x00, 0xbf, 0x18, 0x4e, 0x1d, 0x02, + 0x00, 0x00, 0x4d, 0x1d, 0x02, 0x00, 0x00, 0xbf, + 0x19, 0x4e, 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x1e, + 0x02, 0x00, 0x00, 0xc5, 0x4d, 0x0b, 0x00, 0x00, + 0x00, 0xc1, 0x05, 0x4d, 0x22, 0x00, 0x00, 0x00, + 0xbf, 0x1a, 0x4e, 0x0e, 0x00, 0x00, 0x00, 0x4d, + 0x0e, 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, 0xc2, + 0x08, 0xbf, 0x1b, 0xed, 0xc3, 0x09, 0x98, 0x11, + 0xe9, 0x12, 0x0e, 0x39, 0x8d, 0x00, 0x00, 0x00, + 0x42, 0x3a, 0x00, 0x00, 0x00, 0x42, 0x1f, 0x02, + 0x00, 0x00, 0x98, 0xc2, 0x0a, 0x39, 0x8d, 0x00, + 0x00, 0x00, 0x42, 0x3a, 0x00, 0x00, 0x00, 0x42, + 0x20, 0x02, 0x00, 0x00, 0xc2, 0x0b, 0xc1, 0x09, + 0xe9, 0x0d, 0x39, 0x8d, 0x00, 0x00, 0x00, 0x42, + 0x63, 0x00, 0x00, 0x00, 0xeb, 0x03, 0xbf, 0x1c, + 0xc2, 0x0c, 0x39, 0x8e, 0x00, 0x00, 0x00, 0x42, + 0x3a, 0x00, 0x00, 0x00, 0x42, 0x21, 0x02, 0x00, + 0x00, 0x11, 0xea, 0x04, 0x0e, 0xbf, 0x1d, 0xc2, + 0x0d, 0x39, 0x8d, 0x00, 0x00, 0x00, 0x42, 0x22, + 0x02, 0x00, 0x00, 0x11, 0xea, 0x04, 0x0e, 0xbf, + 0x1e, 0xc2, 0x0e, 0x39, 0x8e, 0x00, 0x00, 0x00, + 0x42, 0x3a, 0x00, 0x00, 0x00, 0x42, 0x23, 0x02, + 0x00, 0x00, 0xc2, 0x0f, 0x39, 0x8e, 0x00, 0x00, + 0x00, 0x42, 0x3a, 0x00, 0x00, 0x00, 0x42, 0x5a, + 0x00, 0x00, 0x00, 0xc2, 0x10, 0x39, 0x8e, 0x00, + 0x00, 0x00, 0x42, 0x3a, 0x00, 0x00, 0x00, 0x42, + 0x24, 0x02, 0x00, 0x00, 0xc2, 0x11, 0x39, 0x8e, + 0x00, 0x00, 0x00, 0x42, 0x3a, 0x00, 0x00, 0x00, + 0x42, 0x59, 0x00, 0x00, 0x00, 0xc2, 0x12, 0x39, + 0x8e, 0x00, 0x00, 0x00, 0x42, 0x3a, 0x00, 0x00, + 0x00, 0x42, 0x25, 0x02, 0x00, 0x00, 0xc2, 0x13, + 0x39, 0x98, 0x00, 0x00, 0x00, 0x42, 0x3a, 0x00, + 0x00, 0x00, 0x42, 0x26, 0x02, 0x00, 0x00, 0x11, + 0xea, 0x04, 0x0e, 0xbf, 0x1f, 0xc2, 0x14, 0xc1, + 0x0e, 0x07, 0xee, 0xc2, 0x15, 0x39, 0x95, 0x00, + 0x00, 0x00, 0x43, 0x27, 0x02, 0x00, 0x00, 0x24, + 0x00, 0x00, 0xc2, 0x16, 0xc1, 0x17, 0xc1, 0x0e, + 0x07, 0xee, 0x44, 0x3a, 0x00, 0x00, 0x00, 0xc1, + 0x18, 0xc1, 0x0e, 0x07, 0xee, 0x44, 0x3a, 0x00, + 0x00, 0x00, 0x04, 0x28, 0x02, 0x00, 0x00, 0xc2, + 0x1e, 0x04, 0x29, 0x02, 0x00, 0x00, 0xc3, 0x1f, + 0x04, 0x2a, 0x02, 0x00, 0x00, 0x9f, 0xc2, 0x20, + 0x04, 0x2b, 0x02, 0x00, 0x00, 0xc2, 0x21, 0x39, + 0x9b, 0x00, 0x00, 0x00, 0x04, 0x2c, 0x02, 0x00, + 0x00, 0xc1, 0x21, 0x9f, 0x04, 0x2d, 0x02, 0x00, + 0x00, 0x9f, 0x04, 0xd5, 0x00, 0x00, 0x00, 0xef, + 0xc2, 0x22, 0x39, 0x9b, 0x00, 0x00, 0x00, 0x04, + 0x2e, 0x02, 0x00, 0x00, 0xc1, 0x1e, 0x9f, 0x04, + 0x2f, 0x02, 0x00, 0x00, 0x9f, 0x04, 0xd5, 0x00, + 0x00, 0x00, 0xef, 0xc2, 0x23, 0x39, 0x9b, 0x00, + 0x00, 0x00, 0x04, 0x30, 0x02, 0x00, 0x00, 0x04, + 0xd5, 0x00, 0x00, 0x00, 0xef, 0xc2, 0x24, 0x39, + 0x9b, 0x00, 0x00, 0x00, 0x04, 0x31, 0x02, 0x00, + 0x00, 0xc1, 0x20, 0x9f, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0xef, 0xc2, 0x25, 0x06, 0xc2, 0x26, 0x0b, + 0x0b, 0x04, 0x62, 0x01, 0x00, 0x00, 0x4d, 0x32, + 0x02, 0x00, 0x00, 0x04, 0x33, 0x02, 0x00, 0x00, + 0x4d, 0x34, 0x02, 0x00, 0x00, 0x04, 0x35, 0x02, + 0x00, 0x00, 0x4d, 0x36, 0x02, 0x00, 0x00, 0x04, + 0x37, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x02, 0x00, + 0x00, 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, 0x3a, + 0x02, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x4d, 0x3b, 0x02, 0x00, 0x00, 0x04, 0x3c, 0x02, + 0x00, 0x00, 0x4d, 0x3d, 0x02, 0x00, 0x00, 0x04, + 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x02, 0x00, + 0x00, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x41, + 0x02, 0x00, 0x00, 0x04, 0x42, 0x02, 0x00, 0x00, + 0x4d, 0x43, 0x02, 0x00, 0x00, 0x04, 0x44, 0x02, + 0x00, 0x00, 0x4d, 0x45, 0x02, 0x00, 0x00, 0x04, + 0x09, 0x01, 0x00, 0x00, 0x4d, 0x46, 0x02, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x4d, 0x47, + 0x02, 0x00, 0x00, 0x04, 0x48, 0x02, 0x00, 0x00, + 0x4d, 0x49, 0x02, 0x00, 0x00, 0x04, 0x4a, 0x02, + 0x00, 0x00, 0x4d, 0x4b, 0x02, 0x00, 0x00, 0x04, + 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x02, 0x00, + 0x00, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x4f, + 0x02, 0x00, 0x00, 0x04, 0x37, 0x02, 0x00, 0x00, + 0x4d, 0x50, 0x02, 0x00, 0x00, 0x04, 0x51, 0x02, + 0x00, 0x00, 0x4d, 0x52, 0x02, 0x00, 0x00, 0x04, + 0x53, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x02, 0x00, + 0x00, 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, 0x56, + 0x02, 0x00, 0x00, 0x04, 0x57, 0x02, 0x00, 0x00, + 0x4d, 0x58, 0x02, 0x00, 0x00, 0x04, 0x59, 0x02, + 0x00, 0x00, 0x4d, 0x5a, 0x02, 0x00, 0x00, 0x04, + 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x02, 0x00, + 0x00, 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x5e, + 0x02, 0x00, 0x00, 0x04, 0x5f, 0x02, 0x00, 0x00, + 0x4d, 0x60, 0x02, 0x00, 0x00, 0x04, 0x61, 0x02, + 0x00, 0x00, 0x4d, 0x62, 0x02, 0x00, 0x00, 0x04, + 0x63, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x02, 0x00, + 0x00, 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, 0x66, + 0x02, 0x00, 0x00, 0x04, 0x67, 0x02, 0x00, 0x00, + 0x4d, 0x68, 0x02, 0x00, 0x00, 0x04, 0x69, 0x02, + 0x00, 0x00, 0x4d, 0x6a, 0x02, 0x00, 0x00, 0x04, + 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x02, 0x00, + 0x00, 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x6e, + 0x02, 0x00, 0x00, 0x04, 0x6f, 0x02, 0x00, 0x00, + 0x4d, 0x70, 0x02, 0x00, 0x00, 0x04, 0x71, 0x02, + 0x00, 0x00, 0x4d, 0x72, 0x02, 0x00, 0x00, 0x04, + 0x73, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x02, 0x00, + 0x00, 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, 0x76, + 0x02, 0x00, 0x00, 0x04, 0x77, 0x02, 0x00, 0x00, + 0x4d, 0x78, 0x02, 0x00, 0x00, 0x04, 0x79, 0x02, + 0x00, 0x00, 0x4d, 0x7a, 0x02, 0x00, 0x00, 0x04, + 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x02, 0x00, + 0x00, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x7d, + 0x02, 0x00, 0x00, 0x04, 0x7e, 0x02, 0x00, 0x00, + 0x4d, 0x7f, 0x02, 0x00, 0x00, 0x04, 0x80, 0x02, + 0x00, 0x00, 0x4d, 0x81, 0x02, 0x00, 0x00, 0x04, + 0x82, 0x02, 0x00, 0x00, 0x4d, 0x83, 0x02, 0x00, + 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, 0x4d, 0x84, + 0x02, 0x00, 0x00, 0x4d, 0x85, 0x02, 0x00, 0x00, + 0x0b, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0x87, + 0x02, 0x00, 0x00, 0x04, 0x88, 0x02, 0x00, 0x00, + 0x4d, 0x89, 0x02, 0x00, 0x00, 0x04, 0x8a, 0x02, + 0x00, 0x00, 0x4d, 0x8b, 0x02, 0x00, 0x00, 0x04, + 0x8c, 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x02, 0x00, + 0x00, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0x8f, + 0x02, 0x00, 0x00, 0x04, 0x90, 0x02, 0x00, 0x00, + 0x4d, 0x91, 0x02, 0x00, 0x00, 0x04, 0x92, 0x02, + 0x00, 0x00, 0x4d, 0x93, 0x02, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x4d, 0x0d, 0x00, 0x00, + 0x00, 0x04, 0x3b, 0x01, 0x00, 0x00, 0x4d, 0x61, + 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, + 0x4d, 0x64, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x4d, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x0f, 0x01, 0x00, 0x00, 0x4d, 0x40, 0x01, 0x00, + 0x00, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0x95, + 0x02, 0x00, 0x00, 0x04, 0x96, 0x02, 0x00, 0x00, + 0x4d, 0x97, 0x02, 0x00, 0x00, 0x04, 0x98, 0x02, + 0x00, 0x00, 0x4d, 0x99, 0x02, 0x00, 0x00, 0x04, + 0x9a, 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x02, 0x00, + 0x00, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0x9d, + 0x02, 0x00, 0x00, 0x04, 0x9e, 0x02, 0x00, 0x00, + 0x4d, 0x9f, 0x02, 0x00, 0x00, 0x04, 0xa0, 0x02, + 0x00, 0x00, 0x4d, 0xa1, 0x02, 0x00, 0x00, 0x04, + 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x02, 0x00, + 0x00, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xa5, + 0x02, 0x00, 0x00, 0x04, 0xa6, 0x02, 0x00, 0x00, + 0x4d, 0xa7, 0x02, 0x00, 0x00, 0x04, 0xa8, 0x02, + 0x00, 0x00, 0x4d, 0xa9, 0x02, 0x00, 0x00, 0x04, + 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xab, 0x02, 0x00, + 0x00, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xad, + 0x02, 0x00, 0x00, 0x04, 0xae, 0x02, 0x00, 0x00, + 0x4d, 0xaf, 0x02, 0x00, 0x00, 0x04, 0xae, 0x02, + 0x00, 0x00, 0x4d, 0xb0, 0x02, 0x00, 0x00, 0x04, + 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x02, 0x00, + 0x00, 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xb4, + 0x02, 0x00, 0x00, 0x04, 0xb5, 0x02, 0x00, 0x00, + 0x4d, 0xb6, 0x02, 0x00, 0x00, 0x04, 0xb7, 0x02, + 0x00, 0x00, 0x4d, 0xb8, 0x02, 0x00, 0x00, 0x04, + 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x02, 0x00, + 0x00, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xba, + 0x02, 0x00, 0x00, 0x04, 0xbb, 0x02, 0x00, 0x00, + 0x4d, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x02, + 0x00, 0x00, 0x0b, 0x04, 0xbe, 0x02, 0x00, 0x00, + 0x04, 0xe5, 0x00, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xbe, 0x02, 0x00, 0x00, 0x04, 0xbf, 0x02, + 0x00, 0x00, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xbf, 0x02, 0x00, 0x00, 0x04, + 0xc0, 0x02, 0x00, 0x00, 0x04, 0xe5, 0x00, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xc0, 0x02, 0x00, + 0x00, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x04, 0xe5, + 0x00, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xc1, + 0x02, 0x00, 0x00, 0x04, 0xc2, 0x02, 0x00, 0x00, + 0x04, 0xe5, 0x00, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xc2, 0x02, 0x00, 0x00, 0x04, 0xc3, 0x02, + 0x00, 0x00, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xc3, 0x02, 0x00, 0x00, 0x04, + 0xc4, 0x02, 0x00, 0x00, 0x04, 0xe5, 0x00, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xc4, 0x02, 0x00, + 0x00, 0x04, 0xc5, 0x02, 0x00, 0x00, 0x04, 0xe5, + 0x00, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xc5, + 0x02, 0x00, 0x00, 0x04, 0xc6, 0x02, 0x00, 0x00, + 0x04, 0xe5, 0x00, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xc6, 0x02, 0x00, 0x00, 0x04, 0xc7, 0x02, + 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xc7, 0x02, 0x00, 0x00, 0x04, + 0xc9, 0x02, 0x00, 0x00, 0x04, 0xe5, 0x00, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xc9, 0x02, 0x00, + 0x00, 0x04, 0xca, 0x02, 0x00, 0x00, 0x04, 0xe5, + 0x00, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xca, + 0x02, 0x00, 0x00, 0x04, 0xcb, 0x02, 0x00, 0x00, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xcb, 0x02, 0x00, 0x00, 0x04, 0xcc, 0x02, + 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xcc, 0x02, 0x00, 0x00, 0x04, + 0xcd, 0x02, 0x00, 0x00, 0x04, 0xe5, 0x00, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xcd, 0x02, 0x00, + 0x00, 0x04, 0xce, 0x02, 0x00, 0x00, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xce, + 0x02, 0x00, 0x00, 0x04, 0xcf, 0x02, 0x00, 0x00, + 0x04, 0xe5, 0x00, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xcf, 0x02, 0x00, 0x00, 0x04, 0xd0, 0x02, + 0x00, 0x00, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xd0, 0x02, 0x00, 0x00, 0x04, + 0xd1, 0x02, 0x00, 0x00, 0x04, 0xe5, 0x00, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xd1, 0x02, 0x00, + 0x00, 0x04, 0xd2, 0x02, 0x00, 0x00, 0x04, 0xe5, + 0x00, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xd2, + 0x02, 0x00, 0x00, 0x04, 0xd3, 0x02, 0x00, 0x00, + 0x04, 0xe5, 0x00, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xd3, 0x02, 0x00, 0x00, 0x04, 0x44, 0x01, + 0x00, 0x00, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x44, 0x01, 0x00, 0x00, 0x04, + 0xd4, 0x02, 0x00, 0x00, 0x04, 0xe5, 0x00, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xd4, 0x02, 0x00, + 0x00, 0x04, 0xd5, 0x02, 0x00, 0x00, 0x04, 0xe5, + 0x00, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xd5, + 0x02, 0x00, 0x00, 0x04, 0x77, 0x02, 0x00, 0x00, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x77, 0x02, 0x00, 0x00, 0x04, 0xd6, 0x02, + 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xd6, 0x02, 0x00, 0x00, 0x04, + 0xd7, 0x02, 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xd7, 0x02, 0x00, + 0x00, 0x04, 0xd8, 0x02, 0x00, 0x00, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xd8, + 0x02, 0x00, 0x00, 0x04, 0xd9, 0x02, 0x00, 0x00, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xd9, 0x02, 0x00, 0x00, 0x04, 0xda, 0x02, + 0x00, 0x00, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xda, 0x02, 0x00, 0x00, 0x04, + 0xdb, 0x02, 0x00, 0x00, 0x04, 0xe5, 0x00, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xdb, 0x02, 0x00, + 0x00, 0x04, 0xdc, 0x02, 0x00, 0x00, 0x04, 0xe5, + 0x00, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xdc, + 0x02, 0x00, 0x00, 0x04, 0xdd, 0x02, 0x00, 0x00, + 0x04, 0xe5, 0x00, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xdd, 0x02, 0x00, 0x00, 0x04, 0xde, 0x02, + 0x00, 0x00, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xde, 0x02, 0x00, 0x00, 0x04, + 0xdf, 0x02, 0x00, 0x00, 0x04, 0xe5, 0x00, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xdf, 0x02, 0x00, + 0x00, 0x04, 0xe0, 0x02, 0x00, 0x00, 0x04, 0xe5, + 0x00, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe0, + 0x02, 0x00, 0x00, 0x04, 0x61, 0x02, 0x00, 0x00, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x61, 0x02, 0x00, 0x00, 0x04, 0xe1, 0x02, + 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xe1, 0x02, 0x00, 0x00, 0x04, + 0xe2, 0x02, 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe2, 0x02, 0x00, + 0x00, 0x04, 0xe3, 0x02, 0x00, 0x00, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe3, + 0x02, 0x00, 0x00, 0x04, 0xe4, 0x02, 0x00, 0x00, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xe4, 0x02, 0x00, 0x00, 0x04, 0xe5, 0x02, + 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xe5, 0x02, 0x00, 0x00, 0x04, + 0xe6, 0x02, 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe6, 0x02, 0x00, + 0x00, 0x04, 0xe7, 0x02, 0x00, 0x00, 0x04, 0x07, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, + 0x02, 0x00, 0x00, 0x04, 0xe8, 0x02, 0x00, 0x00, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xe8, 0x02, 0x00, 0x00, 0x04, 0xe9, 0x02, + 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xe9, 0x02, 0x00, 0x00, 0x04, + 0x55, 0x02, 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x55, 0x02, 0x00, + 0x00, 0x04, 0xea, 0x02, 0x00, 0x00, 0x04, 0x1c, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, + 0x02, 0x00, 0x00, 0x04, 0xeb, 0x02, 0x00, 0x00, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xeb, 0x02, 0x00, 0x00, 0x04, 0xec, 0x02, + 0x00, 0x00, 0x04, 0x1c, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xec, 0x02, 0x00, 0x00, 0x04, + 0x4e, 0x02, 0x00, 0x00, 0x04, 0x1c, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4e, 0x02, 0x00, + 0x00, 0x04, 0xed, 0x02, 0x00, 0x00, 0x04, 0x07, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xed, + 0x02, 0x00, 0x00, 0x04, 0xee, 0x02, 0x00, 0x00, + 0x04, 0x1c, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xee, 0x02, 0x00, 0x00, 0x04, 0xef, 0x02, + 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xef, 0x02, 0x00, 0x00, 0x04, + 0xf0, 0x02, 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xf0, 0x02, 0x00, + 0x00, 0x04, 0xf1, 0x02, 0x00, 0x00, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xf1, + 0x02, 0x00, 0x00, 0x04, 0xf2, 0x02, 0x00, 0x00, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xf2, 0x02, 0x00, 0x00, 0x04, 0xf3, 0x02, + 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xf3, 0x02, 0x00, 0x00, 0x04, + 0xf4, 0x02, 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xf4, 0x02, 0x00, + 0x00, 0x04, 0x57, 0x02, 0x00, 0x00, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x57, + 0x02, 0x00, 0x00, 0x04, 0xf5, 0x02, 0x00, 0x00, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xf5, 0x02, 0x00, 0x00, 0x04, 0xf6, 0x02, + 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xf6, 0x02, 0x00, 0x00, 0x04, + 0xf7, 0x02, 0x00, 0x00, 0x04, 0x1c, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xf7, 0x02, 0x00, + 0x00, 0x04, 0xf8, 0x02, 0x00, 0x00, 0x04, 0x1c, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xf8, + 0x02, 0x00, 0x00, 0x04, 0xf9, 0x02, 0x00, 0x00, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xf9, 0x02, 0x00, 0x00, 0x04, 0x6f, 0x02, + 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x6f, 0x02, 0x00, 0x00, 0x04, + 0x5b, 0x02, 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x5b, 0x02, 0x00, + 0x00, 0x04, 0xfa, 0x02, 0x00, 0x00, 0x04, 0x07, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xfa, + 0x02, 0x00, 0x00, 0x04, 0xfb, 0x02, 0x00, 0x00, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xfb, 0x02, 0x00, 0x00, 0x04, 0xfc, 0x02, + 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xfc, 0x02, 0x00, 0x00, 0x04, + 0xfd, 0x02, 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xfd, 0x02, 0x00, + 0x00, 0x04, 0xfe, 0x02, 0x00, 0x00, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xfe, + 0x02, 0x00, 0x00, 0x04, 0xff, 0x02, 0x00, 0x00, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xff, 0x02, 0x00, 0x00, 0x04, 0x00, 0x03, + 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x00, 0x03, 0x00, 0x00, 0x04, + 0x01, 0x03, 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x01, 0x03, 0x00, + 0x00, 0x04, 0x5f, 0x02, 0x00, 0x00, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x5f, + 0x02, 0x00, 0x00, 0x04, 0x02, 0x03, 0x00, 0x00, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x02, 0x03, 0x00, 0x00, 0x04, 0x80, 0x02, + 0x00, 0x00, 0x04, 0x1c, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x80, 0x02, 0x00, 0x00, 0x04, + 0x03, 0x03, 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x03, 0x03, 0x00, + 0x00, 0x04, 0x04, 0x03, 0x00, 0x00, 0x04, 0x05, + 0x03, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x04, + 0x03, 0x00, 0x00, 0x04, 0x06, 0x03, 0x00, 0x00, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x06, 0x03, 0x00, 0x00, 0x04, 0x59, 0x02, + 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x59, 0x02, 0x00, 0x00, 0x04, + 0x07, 0x03, 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x07, 0x03, 0x00, + 0x00, 0x04, 0x63, 0x02, 0x00, 0x00, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x63, + 0x02, 0x00, 0x00, 0x04, 0x08, 0x03, 0x00, 0x00, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x08, 0x03, 0x00, 0x00, 0x04, 0x09, 0x03, + 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x09, 0x03, 0x00, 0x00, 0x04, + 0x0a, 0x03, 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x0a, 0x03, 0x00, + 0x00, 0x04, 0x37, 0x02, 0x00, 0x00, 0x04, 0x1c, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x37, + 0x02, 0x00, 0x00, 0x04, 0x0b, 0x03, 0x00, 0x00, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x0b, 0x03, 0x00, 0x00, 0x04, 0x0c, 0x03, + 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x0c, 0x03, 0x00, 0x00, 0x04, + 0x0d, 0x03, 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x0d, 0x03, 0x00, + 0x00, 0x04, 0x0e, 0x03, 0x00, 0x00, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x0e, + 0x03, 0x00, 0x00, 0x04, 0x0f, 0x03, 0x00, 0x00, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x0f, 0x03, 0x00, 0x00, 0x04, 0x10, 0x03, + 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x10, 0x03, 0x00, 0x00, 0x04, + 0x11, 0x03, 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x11, 0x03, 0x00, + 0x00, 0x04, 0x53, 0x02, 0x00, 0x00, 0x04, 0x1c, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x53, + 0x02, 0x00, 0x00, 0x04, 0x12, 0x03, 0x00, 0x00, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x12, 0x03, 0x00, 0x00, 0x04, 0x13, 0x03, + 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x13, 0x03, 0x00, 0x00, 0x04, + 0x14, 0x03, 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x14, 0x03, 0x00, + 0x00, 0x04, 0x15, 0x03, 0x00, 0x00, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x15, + 0x03, 0x00, 0x00, 0x04, 0x67, 0x02, 0x00, 0x00, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x67, 0x02, 0x00, 0x00, 0x04, 0x65, 0x02, + 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x65, 0x02, 0x00, 0x00, 0x04, + 0x16, 0x03, 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x16, 0x03, 0x00, + 0x00, 0x04, 0x17, 0x03, 0x00, 0x00, 0x04, 0x07, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x17, + 0x03, 0x00, 0x00, 0x04, 0x18, 0x03, 0x00, 0x00, + 0x04, 0x07, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x18, 0x03, 0x00, 0x00, 0x04, 0x19, 0x03, + 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x19, 0x03, 0x00, 0x00, 0x04, + 0x1a, 0x03, 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x1a, 0x03, 0x00, + 0x00, 0x04, 0x1b, 0x03, 0x00, 0x00, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x1b, + 0x03, 0x00, 0x00, 0x04, 0x1c, 0x03, 0x00, 0x00, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x1c, 0x03, 0x00, 0x00, 0x04, 0x69, 0x02, + 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x69, 0x02, 0x00, 0x00, 0x04, + 0x1d, 0x03, 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x1d, 0x03, 0x00, + 0x00, 0x04, 0x1e, 0x03, 0x00, 0x00, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x1e, + 0x03, 0x00, 0x00, 0x04, 0x1f, 0x03, 0x00, 0x00, + 0x04, 0x05, 0x03, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x1f, 0x03, 0x00, 0x00, 0x04, 0x20, 0x03, + 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x20, 0x03, 0x00, 0x00, 0x04, + 0x21, 0x03, 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x21, 0x03, 0x00, + 0x00, 0x04, 0x22, 0x03, 0x00, 0x00, 0x04, 0x07, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x22, + 0x03, 0x00, 0x00, 0x04, 0x23, 0x03, 0x00, 0x00, + 0x04, 0x07, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x23, 0x03, 0x00, 0x00, 0x04, 0x24, 0x03, + 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x24, 0x03, 0x00, 0x00, 0x04, + 0x25, 0x03, 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x25, 0x03, 0x00, + 0x00, 0x04, 0x26, 0x03, 0x00, 0x00, 0x04, 0x07, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x26, + 0x03, 0x00, 0x00, 0x04, 0x27, 0x03, 0x00, 0x00, + 0x04, 0x07, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x27, 0x03, 0x00, 0x00, 0x04, 0x28, 0x03, + 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x28, 0x03, 0x00, 0x00, 0x04, + 0x29, 0x03, 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x29, 0x03, 0x00, + 0x00, 0x04, 0x2a, 0x03, 0x00, 0x00, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x2a, + 0x03, 0x00, 0x00, 0x04, 0x2b, 0x03, 0x00, 0x00, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x2b, 0x03, 0x00, 0x00, 0x04, 0x2c, 0x03, + 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x2c, 0x03, 0x00, 0x00, 0x04, + 0x2d, 0x03, 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x2d, 0x03, 0x00, + 0x00, 0x04, 0x2e, 0x03, 0x00, 0x00, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x2e, + 0x03, 0x00, 0x00, 0x04, 0x2f, 0x03, 0x00, 0x00, + 0x04, 0x05, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x2f, 0x03, 0x00, 0x00, 0x04, 0x30, 0x03, + 0x00, 0x00, 0x04, 0x05, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x30, 0x03, 0x00, 0x00, 0x04, + 0x31, 0x03, 0x00, 0x00, 0x04, 0x1c, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x31, 0x03, 0x00, + 0x00, 0x04, 0x32, 0x03, 0x00, 0x00, 0x04, 0x07, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x32, + 0x03, 0x00, 0x00, 0x04, 0x33, 0x03, 0x00, 0x00, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x33, 0x03, 0x00, 0x00, 0x04, 0x34, 0x03, + 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x34, 0x03, 0x00, 0x00, 0x04, + 0x35, 0x03, 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x35, 0x03, 0x00, + 0x00, 0x04, 0x36, 0x03, 0x00, 0x00, 0x04, 0x07, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x36, + 0x03, 0x00, 0x00, 0x04, 0x6b, 0x02, 0x00, 0x00, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x6b, 0x02, 0x00, 0x00, 0x04, 0x37, 0x03, + 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x37, 0x03, 0x00, 0x00, 0x04, + 0x38, 0x03, 0x00, 0x00, 0x04, 0x1c, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x38, 0x03, 0x00, + 0x00, 0x04, 0x39, 0x03, 0x00, 0x00, 0x04, 0x07, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x39, + 0x03, 0x00, 0x00, 0x04, 0x3a, 0x03, 0x00, 0x00, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x3a, 0x03, 0x00, 0x00, 0x04, 0x3b, 0x03, + 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x3b, 0x03, 0x00, 0x00, 0x04, + 0x3c, 0x03, 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x3c, 0x03, 0x00, + 0x00, 0x04, 0x3d, 0x03, 0x00, 0x00, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x3d, + 0x03, 0x00, 0x00, 0x04, 0x3e, 0x03, 0x00, 0x00, + 0x04, 0x07, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x3e, 0x03, 0x00, 0x00, 0x04, 0x3f, 0x03, + 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x3f, 0x03, 0x00, 0x00, 0x04, + 0x40, 0x03, 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x40, 0x03, 0x00, + 0x00, 0x04, 0x41, 0x03, 0x00, 0x00, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x41, + 0x03, 0x00, 0x00, 0x04, 0x51, 0x02, 0x00, 0x00, + 0x04, 0x1c, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x51, 0x02, 0x00, 0x00, 0x04, 0x42, 0x03, + 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x42, 0x03, 0x00, 0x00, 0x04, + 0x6d, 0x02, 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x6d, 0x02, 0x00, + 0x00, 0x04, 0x43, 0x03, 0x00, 0x00, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x43, + 0x03, 0x00, 0x00, 0x04, 0x71, 0x02, 0x00, 0x00, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x71, 0x02, 0x00, 0x00, 0x04, 0x44, 0x03, + 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x44, 0x03, 0x00, 0x00, 0x04, + 0x45, 0x03, 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x45, 0x03, 0x00, + 0x00, 0x04, 0x46, 0x03, 0x00, 0x00, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x46, + 0x03, 0x00, 0x00, 0x04, 0x47, 0x03, 0x00, 0x00, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x47, 0x03, 0x00, 0x00, 0x04, 0x48, 0x03, + 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x48, 0x03, 0x00, 0x00, 0x04, + 0x49, 0x03, 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x49, 0x03, 0x00, + 0x00, 0x04, 0x4a, 0x03, 0x00, 0x00, 0x04, 0x07, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4a, + 0x03, 0x00, 0x00, 0x04, 0x4b, 0x03, 0x00, 0x00, + 0x04, 0xe5, 0x00, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x4b, 0x03, 0x00, 0x00, 0x04, 0x4c, 0x03, + 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x4c, 0x03, 0x00, 0x00, 0x04, + 0x4d, 0x03, 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4d, 0x03, 0x00, + 0x00, 0x04, 0x4e, 0x03, 0x00, 0x00, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4e, + 0x03, 0x00, 0x00, 0x04, 0x4f, 0x03, 0x00, 0x00, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x4f, 0x03, 0x00, 0x00, 0x04, 0x50, 0x03, + 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x50, 0x03, 0x00, 0x00, 0x04, + 0x51, 0x03, 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x51, 0x03, 0x00, + 0x00, 0x04, 0x52, 0x03, 0x00, 0x00, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x52, + 0x03, 0x00, 0x00, 0x04, 0x53, 0x03, 0x00, 0x00, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x53, 0x03, 0x00, 0x00, 0x04, 0x54, 0x03, + 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x54, 0x03, 0x00, 0x00, 0x04, + 0x55, 0x03, 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x55, 0x03, 0x00, + 0x00, 0x04, 0x73, 0x02, 0x00, 0x00, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x73, + 0x02, 0x00, 0x00, 0x04, 0x56, 0x03, 0x00, 0x00, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x56, 0x03, 0x00, 0x00, 0x04, 0x57, 0x03, + 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x57, 0x03, 0x00, 0x00, 0x04, + 0x58, 0x03, 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x58, 0x03, 0x00, + 0x00, 0x04, 0x59, 0x03, 0x00, 0x00, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x59, + 0x03, 0x00, 0x00, 0x04, 0x5a, 0x03, 0x00, 0x00, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x5a, 0x03, 0x00, 0x00, 0x04, 0x48, 0x02, + 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x48, 0x02, 0x00, 0x00, 0x04, + 0x79, 0x02, 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x79, 0x02, 0x00, + 0x00, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4c, + 0x02, 0x00, 0x00, 0x04, 0x5b, 0x03, 0x00, 0x00, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x5b, 0x03, 0x00, 0x00, 0x04, 0x5c, 0x03, + 0x00, 0x00, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x5c, 0x03, 0x00, 0x00, 0x04, + 0x5d, 0x03, 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x5d, 0x03, 0x00, + 0x00, 0x04, 0x5e, 0x03, 0x00, 0x00, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x5e, + 0x03, 0x00, 0x00, 0x04, 0x5f, 0x03, 0x00, 0x00, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x5f, 0x03, 0x00, 0x00, 0x04, 0x60, 0x03, + 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x60, 0x03, 0x00, 0x00, 0x04, + 0x61, 0x03, 0x00, 0x00, 0x04, 0xe5, 0x00, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x61, 0x03, 0x00, + 0x00, 0x04, 0x5d, 0x02, 0x00, 0x00, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x5d, + 0x02, 0x00, 0x00, 0x04, 0x62, 0x03, 0x00, 0x00, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x62, 0x03, 0x00, 0x00, 0x04, 0x63, 0x03, + 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x63, 0x03, 0x00, 0x00, 0x04, + 0x64, 0x03, 0x00, 0x00, 0x04, 0x20, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x64, 0x03, 0x00, + 0x00, 0x04, 0x65, 0x03, 0x00, 0x00, 0x04, 0x20, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x65, + 0x03, 0x00, 0x00, 0x04, 0x75, 0x02, 0x00, 0x00, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x75, 0x02, 0x00, 0x00, 0x04, 0x66, 0x03, + 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x66, 0x03, 0x00, 0x00, 0x04, + 0x67, 0x03, 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x67, 0x03, 0x00, + 0x00, 0x04, 0x68, 0x03, 0x00, 0x00, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x68, + 0x03, 0x00, 0x00, 0x04, 0x69, 0x03, 0x00, 0x00, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x69, 0x03, 0x00, 0x00, 0x04, 0x6a, 0x03, + 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x6a, 0x03, 0x00, 0x00, 0x04, + 0x6b, 0x03, 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x6b, 0x03, 0x00, + 0x00, 0x04, 0x6c, 0x03, 0x00, 0x00, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x6c, + 0x03, 0x00, 0x00, 0x04, 0x6d, 0x03, 0x00, 0x00, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x6d, 0x03, 0x00, 0x00, 0x04, 0x6e, 0x03, + 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x6e, 0x03, 0x00, 0x00, 0x04, + 0x6f, 0x03, 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x6f, 0x03, 0x00, + 0x00, 0x04, 0x70, 0x03, 0x00, 0x00, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x70, + 0x03, 0x00, 0x00, 0x04, 0x71, 0x03, 0x00, 0x00, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x71, 0x03, 0x00, 0x00, 0x04, 0x72, 0x03, + 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x72, 0x03, 0x00, 0x00, 0x04, + 0x73, 0x03, 0x00, 0x00, 0x04, 0x1a, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x73, 0x03, 0x00, + 0x00, 0x04, 0x74, 0x03, 0x00, 0x00, 0x04, 0x1a, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x74, + 0x03, 0x00, 0x00, 0x04, 0x4a, 0x02, 0x00, 0x00, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x4a, 0x02, 0x00, 0x00, 0x04, 0x75, 0x03, + 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x75, 0x03, 0x00, 0x00, 0x04, + 0x76, 0x03, 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x76, 0x03, 0x00, + 0x00, 0x04, 0x77, 0x03, 0x00, 0x00, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x77, + 0x03, 0x00, 0x00, 0x04, 0x78, 0x03, 0x00, 0x00, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x78, 0x03, 0x00, 0x00, 0x04, 0x79, 0x03, + 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x79, 0x03, 0x00, 0x00, 0x04, + 0x82, 0x02, 0x00, 0x00, 0x04, 0x1c, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x82, 0x02, 0x00, + 0x00, 0x04, 0x7a, 0x03, 0x00, 0x00, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x7a, + 0x03, 0x00, 0x00, 0x04, 0x7b, 0x03, 0x00, 0x00, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x7b, 0x03, 0x00, 0x00, 0x04, 0x7c, 0x03, + 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x7c, 0x03, 0x00, 0x00, 0x04, + 0x7d, 0x03, 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x7d, 0x03, 0x00, + 0x00, 0x04, 0x7e, 0x03, 0x00, 0x00, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x7e, + 0x03, 0x00, 0x00, 0x04, 0x7f, 0x03, 0x00, 0x00, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x7f, 0x03, 0x00, 0x00, 0x04, 0xba, 0x01, + 0x00, 0x00, 0x04, 0x1c, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xba, 0x01, 0x00, 0x00, 0x04, + 0x80, 0x03, 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x80, 0x03, 0x00, + 0x00, 0x04, 0x81, 0x03, 0x00, 0x00, 0x04, 0x07, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x81, + 0x03, 0x00, 0x00, 0x04, 0x82, 0x03, 0x00, 0x00, + 0x04, 0x07, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x82, 0x03, 0x00, 0x00, 0x04, 0x83, 0x03, + 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x83, 0x03, 0x00, 0x00, 0x04, + 0x84, 0x03, 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x84, 0x03, 0x00, + 0x00, 0x4d, 0x85, 0x03, 0x00, 0x00, 0xc2, 0x28, + 0xbe, 0x2b, 0xbe, 0x2c, 0x33, 0xc2, 0x2c, 0xbe, + 0x2d, 0xbe, 0x2e, 0x33, 0xc2, 0x2d, 0x0b, 0xc2, + 0x36, 0x39, 0x8d, 0x00, 0x00, 0x00, 0x43, 0x63, + 0x00, 0x00, 0x00, 0xc1, 0x36, 0x04, 0x86, 0x03, + 0x00, 0x00, 0x0b, 0xb5, 0x98, 0x4d, 0x3e, 0x00, + 0x00, 0x00, 0xb4, 0x98, 0x4d, 0x3c, 0x00, 0x00, + 0x00, 0xb4, 0x98, 0x4d, 0x3d, 0x00, 0x00, 0x00, + 0xbf, 0x37, 0x4e, 0x3f, 0x00, 0x00, 0x00, 0x4d, + 0x3f, 0x00, 0x00, 0x00, 0x24, 0x03, 0x00, 0x0e, + 0x0b, 0xb7, 0x4d, 0x87, 0x03, 0x00, 0x00, 0xb4, + 0x4d, 0x88, 0x03, 0x00, 0x00, 0xb4, 0x4d, 0x89, + 0x03, 0x00, 0x00, 0xb4, 0x4d, 0x8a, 0x03, 0x00, + 0x00, 0xb4, 0x4d, 0x8b, 0x03, 0x00, 0x00, 0xb8, + 0x4d, 0x8c, 0x03, 0x00, 0x00, 0xb4, 0x4d, 0x8d, + 0x03, 0x00, 0x00, 0xb4, 0x4d, 0x8e, 0x03, 0x00, + 0x00, 0xb4, 0x4d, 0x8f, 0x03, 0x00, 0x00, 0xb4, + 0x4d, 0x90, 0x03, 0x00, 0x00, 0xb4, 0x4d, 0x91, + 0x03, 0x00, 0x00, 0xb4, 0x4d, 0x92, 0x03, 0x00, + 0x00, 0xb7, 0x4d, 0x93, 0x03, 0x00, 0x00, 0xb4, + 0x4d, 0x94, 0x03, 0x00, 0x00, 0xb7, 0x4d, 0x95, + 0x03, 0x00, 0x00, 0xb4, 0x4d, 0x96, 0x03, 0x00, + 0x00, 0xb7, 0x4d, 0x97, 0x03, 0x00, 0x00, 0xb7, + 0x4d, 0x98, 0x03, 0x00, 0x00, 0xb7, 0x4d, 0x99, + 0x03, 0x00, 0x00, 0xb4, 0x4d, 0x9a, 0x03, 0x00, + 0x00, 0xb4, 0x4d, 0x9b, 0x03, 0x00, 0x00, 0xb7, + 0x4d, 0x9c, 0x03, 0x00, 0x00, 0xb4, 0x4d, 0x9d, + 0x03, 0x00, 0x00, 0xb4, 0x4d, 0x9e, 0x03, 0x00, + 0x00, 0xb4, 0x4d, 0x9f, 0x03, 0x00, 0x00, 0xb4, + 0x4d, 0xa0, 0x03, 0x00, 0x00, 0xc2, 0x37, 0xc1, + 0x0c, 0xc1, 0x36, 0x04, 0xa1, 0x03, 0x00, 0x00, + 0x0b, 0xb4, 0x98, 0x4d, 0x3c, 0x00, 0x00, 0x00, + 0xb4, 0x98, 0x4d, 0x3d, 0x00, 0x00, 0x00, 0xc1, + 0x38, 0x4d, 0x3f, 0x00, 0x00, 0x00, 0xf0, 0x0e, + 0xc1, 0x0c, 0xc1, 0x36, 0x42, 0xa1, 0x03, 0x00, + 0x00, 0x04, 0x3a, 0x00, 0x00, 0x00, 0x0b, 0xb5, + 0x98, 0x4d, 0x3d, 0x00, 0x00, 0x00, 0xf0, 0x0e, + 0xc1, 0x15, 0x0b, 0x26, 0x00, 0x00, 0x4d, 0xa2, + 0x03, 0x00, 0x00, 0x04, 0xa3, 0x03, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xa4, 0x03, 0x00, 0x00, + 0x0b, 0x4d, 0xa5, 0x03, 0x00, 0x00, 0x44, 0xa1, + 0x03, 0x00, 0x00, 0xc1, 0x0c, 0xc1, 0x36, 0x42, + 0xa1, 0x03, 0x00, 0x00, 0x04, 0xa6, 0x03, 0x00, + 0x00, 0x0b, 0xb4, 0x98, 0x4d, 0x3c, 0x00, 0x00, + 0x00, 0xb4, 0x98, 0x4d, 0x3d, 0x00, 0x00, 0x00, + 0xc1, 0x14, 0x43, 0xa7, 0x03, 0x00, 0x00, 0xbf, + 0x40, 0xc1, 0x15, 0x42, 0xa1, 0x03, 0x00, 0x00, + 0x24, 0x02, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x00, + 0xf0, 0x0e, 0xc1, 0x0c, 0xc1, 0x36, 0x42, 0xa1, + 0x03, 0x00, 0x00, 0x42, 0x3a, 0x00, 0x00, 0x00, + 0x04, 0xa8, 0x03, 0x00, 0x00, 0x0b, 0xb4, 0x98, + 0x4d, 0x3c, 0x00, 0x00, 0x00, 0xc1, 0x3a, 0x4d, + 0x40, 0x00, 0x00, 0x00, 0xf0, 0x0e, 0x39, 0x8d, + 0x00, 0x00, 0x00, 0x43, 0x63, 0x00, 0x00, 0x00, + 0xc1, 0x36, 0x42, 0xa1, 0x03, 0x00, 0x00, 0x42, + 0x3a, 0x00, 0x00, 0x00, 0x04, 0xa9, 0x03, 0x00, + 0x00, 0x0b, 0xb4, 0x98, 0x4d, 0x3c, 0x00, 0x00, + 0x00, 0xb5, 0x98, 0x4d, 0x3e, 0x00, 0x00, 0x00, + 0xb4, 0x98, 0x4d, 0x3d, 0x00, 0x00, 0x00, 0xbf, + 0x41, 0x4e, 0x3f, 0x00, 0x00, 0x00, 0x4d, 0x3f, + 0x00, 0x00, 0x00, 0x24, 0x03, 0x00, 0x0e, 0x0b, + 0x04, 0xaa, 0x03, 0x00, 0x00, 0x04, 0xab, 0x03, + 0x00, 0x00, 0x04, 0xac, 0x03, 0x00, 0x00, 0x04, + 0xad, 0x03, 0x00, 0x00, 0x04, 0xae, 0x03, 0x00, + 0x00, 0x04, 0xaf, 0x03, 0x00, 0x00, 0x04, 0xb0, + 0x03, 0x00, 0x00, 0x04, 0xb1, 0x03, 0x00, 0x00, + 0x04, 0xb2, 0x03, 0x00, 0x00, 0x04, 0xb3, 0x03, + 0x00, 0x00, 0x26, 0x0a, 0x00, 0x4d, 0xb4, 0x03, + 0x00, 0x00, 0x04, 0xb5, 0x03, 0x00, 0x00, 0x04, + 0xb6, 0x03, 0x00, 0x00, 0x04, 0xb7, 0x03, 0x00, + 0x00, 0x04, 0xb8, 0x03, 0x00, 0x00, 0x04, 0xb9, + 0x03, 0x00, 0x00, 0x04, 0xba, 0x03, 0x00, 0x00, + 0x04, 0xbb, 0x03, 0x00, 0x00, 0x04, 0xbc, 0x03, + 0x00, 0x00, 0x04, 0xbd, 0x03, 0x00, 0x00, 0x04, + 0xbe, 0x03, 0x00, 0x00, 0x26, 0x0a, 0x00, 0x4d, + 0xbf, 0x03, 0x00, 0x00, 0x04, 0xc0, 0x03, 0x00, + 0x00, 0x04, 0xc1, 0x03, 0x00, 0x00, 0x04, 0xc2, + 0x03, 0x00, 0x00, 0x04, 0xc3, 0x03, 0x00, 0x00, + 0x04, 0xc4, 0x03, 0x00, 0x00, 0x04, 0xc5, 0x03, + 0x00, 0x00, 0x04, 0xc6, 0x03, 0x00, 0x00, 0x04, + 0xc7, 0x03, 0x00, 0x00, 0x04, 0xc8, 0x03, 0x00, + 0x00, 0x04, 0xc9, 0x03, 0x00, 0x00, 0x26, 0x0a, + 0x00, 0x4d, 0xca, 0x03, 0x00, 0x00, 0x04, 0xcb, + 0x03, 0x00, 0x00, 0x04, 0xcc, 0x03, 0x00, 0x00, + 0x04, 0xcd, 0x03, 0x00, 0x00, 0x04, 0xce, 0x03, + 0x00, 0x00, 0x04, 0xcf, 0x03, 0x00, 0x00, 0x04, + 0xd0, 0x03, 0x00, 0x00, 0x04, 0xd1, 0x03, 0x00, + 0x00, 0x04, 0xd2, 0x03, 0x00, 0x00, 0x04, 0xd3, + 0x03, 0x00, 0x00, 0x04, 0xd4, 0x03, 0x00, 0x00, + 0x26, 0x0a, 0x00, 0x4d, 0xd5, 0x03, 0x00, 0x00, + 0x04, 0xd6, 0x03, 0x00, 0x00, 0x04, 0xd7, 0x03, + 0x00, 0x00, 0x04, 0xd8, 0x03, 0x00, 0x00, 0x04, + 0xd9, 0x03, 0x00, 0x00, 0x04, 0xda, 0x03, 0x00, + 0x00, 0x04, 0xdb, 0x03, 0x00, 0x00, 0x04, 0xdc, + 0x03, 0x00, 0x00, 0x04, 0xdd, 0x03, 0x00, 0x00, + 0x04, 0xde, 0x03, 0x00, 0x00, 0x04, 0xdf, 0x03, + 0x00, 0x00, 0x26, 0x0a, 0x00, 0x4d, 0xe0, 0x03, + 0x00, 0x00, 0x04, 0xe1, 0x03, 0x00, 0x00, 0x04, + 0xe2, 0x03, 0x00, 0x00, 0x04, 0xe3, 0x03, 0x00, + 0x00, 0x04, 0xe4, 0x03, 0x00, 0x00, 0x04, 0xe5, + 0x03, 0x00, 0x00, 0x04, 0xe6, 0x03, 0x00, 0x00, + 0x04, 0xe7, 0x03, 0x00, 0x00, 0x04, 0xe8, 0x03, + 0x00, 0x00, 0x04, 0xe9, 0x03, 0x00, 0x00, 0x04, + 0xea, 0x03, 0x00, 0x00, 0x26, 0x0a, 0x00, 0x4d, + 0xeb, 0x03, 0x00, 0x00, 0x04, 0xec, 0x03, 0x00, + 0x00, 0x04, 0xed, 0x03, 0x00, 0x00, 0x04, 0xee, + 0x03, 0x00, 0x00, 0x04, 0xef, 0x03, 0x00, 0x00, + 0x04, 0xf0, 0x03, 0x00, 0x00, 0x04, 0xf1, 0x03, + 0x00, 0x00, 0x04, 0xf2, 0x03, 0x00, 0x00, 0x04, + 0xf3, 0x03, 0x00, 0x00, 0x04, 0xf4, 0x03, 0x00, + 0x00, 0x04, 0xf5, 0x03, 0x00, 0x00, 0x26, 0x0a, + 0x00, 0x4d, 0xf6, 0x03, 0x00, 0x00, 0x04, 0xf7, + 0x03, 0x00, 0x00, 0x04, 0xf8, 0x03, 0x00, 0x00, + 0x04, 0xf9, 0x03, 0x00, 0x00, 0x04, 0xfa, 0x03, + 0x00, 0x00, 0x04, 0xfb, 0x03, 0x00, 0x00, 0x04, + 0xfc, 0x03, 0x00, 0x00, 0x04, 0xfd, 0x03, 0x00, + 0x00, 0x04, 0xfe, 0x03, 0x00, 0x00, 0x04, 0xff, + 0x03, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, + 0x26, 0x0a, 0x00, 0x4d, 0x01, 0x04, 0x00, 0x00, + 0x04, 0x02, 0x04, 0x00, 0x00, 0x04, 0x03, 0x04, + 0x00, 0x00, 0x04, 0x04, 0x04, 0x00, 0x00, 0x04, + 0x05, 0x04, 0x00, 0x00, 0x04, 0x06, 0x04, 0x00, + 0x00, 0x04, 0x07, 0x04, 0x00, 0x00, 0x04, 0x08, + 0x04, 0x00, 0x00, 0x04, 0x09, 0x04, 0x00, 0x00, + 0x04, 0x0a, 0x04, 0x00, 0x00, 0x04, 0x0b, 0x04, + 0x00, 0x00, 0x26, 0x0a, 0x00, 0x4d, 0x0c, 0x04, + 0x00, 0x00, 0x04, 0x0d, 0x04, 0x00, 0x00, 0x04, + 0x0e, 0x04, 0x00, 0x00, 0x04, 0x0f, 0x04, 0x00, + 0x00, 0x04, 0x10, 0x04, 0x00, 0x00, 0x04, 0x11, + 0x04, 0x00, 0x00, 0x04, 0x12, 0x04, 0x00, 0x00, + 0x04, 0x13, 0x04, 0x00, 0x00, 0x04, 0x14, 0x04, + 0x00, 0x00, 0x04, 0x15, 0x04, 0x00, 0x00, 0x04, + 0x16, 0x04, 0x00, 0x00, 0x26, 0x0a, 0x00, 0x4d, + 0x17, 0x04, 0x00, 0x00, 0x04, 0x18, 0x04, 0x00, + 0x00, 0x04, 0x19, 0x04, 0x00, 0x00, 0x04, 0x1a, + 0x04, 0x00, 0x00, 0x04, 0x1b, 0x04, 0x00, 0x00, + 0x04, 0x1c, 0x04, 0x00, 0x00, 0x04, 0x1d, 0x04, + 0x00, 0x00, 0x04, 0x1e, 0x04, 0x00, 0x00, 0x04, + 0x1f, 0x04, 0x00, 0x00, 0x04, 0x20, 0x04, 0x00, + 0x00, 0x04, 0x21, 0x04, 0x00, 0x00, 0x26, 0x0a, + 0x00, 0x4d, 0x22, 0x04, 0x00, 0x00, 0x04, 0x23, + 0x04, 0x00, 0x00, 0x04, 0x24, 0x04, 0x00, 0x00, + 0x04, 0x25, 0x04, 0x00, 0x00, 0x04, 0x26, 0x04, + 0x00, 0x00, 0x04, 0x27, 0x04, 0x00, 0x00, 0x04, + 0x28, 0x04, 0x00, 0x00, 0x04, 0x29, 0x04, 0x00, + 0x00, 0x04, 0x2a, 0x04, 0x00, 0x00, 0x04, 0x2b, + 0x04, 0x00, 0x00, 0x04, 0x2c, 0x04, 0x00, 0x00, + 0x26, 0x0a, 0x00, 0x4d, 0x2d, 0x04, 0x00, 0x00, + 0xbe, 0x42, 0xbe, 0x43, 0xbe, 0x44, 0xbe, 0x45, + 0xbe, 0x46, 0xbe, 0x47, 0xbe, 0x48, 0xbe, 0x49, + 0xbe, 0x4a, 0xbe, 0x4b, 0x26, 0x0a, 0x00, 0x4d, + 0x2e, 0x04, 0x00, 0x00, 0x04, 0x2f, 0x04, 0x00, + 0x00, 0x04, 0x30, 0x04, 0x00, 0x00, 0x04, 0x31, + 0x04, 0x00, 0x00, 0x04, 0x32, 0x04, 0x00, 0x00, + 0x04, 0x33, 0x04, 0x00, 0x00, 0x04, 0x34, 0x04, + 0x00, 0x00, 0x04, 0x35, 0x04, 0x00, 0x00, 0x04, + 0x36, 0x04, 0x00, 0x00, 0x04, 0x37, 0x04, 0x00, + 0x00, 0x04, 0x38, 0x04, 0x00, 0x00, 0x26, 0x0a, + 0x00, 0x4d, 0x39, 0x04, 0x00, 0x00, 0x04, 0x3a, + 0x04, 0x00, 0x00, 0x04, 0x3b, 0x04, 0x00, 0x00, + 0x04, 0x3c, 0x04, 0x00, 0x00, 0x04, 0x3d, 0x04, + 0x00, 0x00, 0x04, 0x3e, 0x04, 0x00, 0x00, 0x04, + 0x3f, 0x04, 0x00, 0x00, 0x04, 0x40, 0x04, 0x00, + 0x00, 0x04, 0x41, 0x04, 0x00, 0x00, 0x04, 0x42, + 0x04, 0x00, 0x00, 0x04, 0x43, 0x04, 0x00, 0x00, + 0x26, 0x0a, 0x00, 0x4d, 0x44, 0x04, 0x00, 0x00, + 0x04, 0x45, 0x04, 0x00, 0x00, 0x04, 0x46, 0x04, + 0x00, 0x00, 0x04, 0x47, 0x04, 0x00, 0x00, 0x04, + 0x48, 0x04, 0x00, 0x00, 0x04, 0x49, 0x04, 0x00, + 0x00, 0x04, 0x4a, 0x04, 0x00, 0x00, 0x04, 0x4b, + 0x04, 0x00, 0x00, 0x04, 0x4c, 0x04, 0x00, 0x00, + 0x04, 0x4d, 0x04, 0x00, 0x00, 0x04, 0x4e, 0x04, + 0x00, 0x00, 0x26, 0x0a, 0x00, 0x4d, 0x4f, 0x04, + 0x00, 0x00, 0x04, 0x50, 0x04, 0x00, 0x00, 0x04, + 0x51, 0x04, 0x00, 0x00, 0x04, 0x52, 0x04, 0x00, + 0x00, 0x04, 0x53, 0x04, 0x00, 0x00, 0x04, 0x54, + 0x04, 0x00, 0x00, 0x04, 0x55, 0x04, 0x00, 0x00, + 0x04, 0x56, 0x04, 0x00, 0x00, 0x04, 0x57, 0x04, + 0x00, 0x00, 0x04, 0x58, 0x04, 0x00, 0x00, 0x04, + 0x59, 0x04, 0x00, 0x00, 0x26, 0x0a, 0x00, 0x4d, + 0x5a, 0x04, 0x00, 0x00, 0x04, 0x5b, 0x04, 0x00, + 0x00, 0x04, 0x5c, 0x04, 0x00, 0x00, 0x04, 0x5d, + 0x04, 0x00, 0x00, 0x04, 0x5e, 0x04, 0x00, 0x00, + 0x04, 0x5f, 0x04, 0x00, 0x00, 0x04, 0x60, 0x04, + 0x00, 0x00, 0x04, 0x61, 0x04, 0x00, 0x00, 0x04, + 0x62, 0x04, 0x00, 0x00, 0x04, 0x63, 0x04, 0x00, + 0x00, 0x04, 0x64, 0x04, 0x00, 0x00, 0x26, 0x0a, + 0x00, 0x4d, 0x65, 0x04, 0x00, 0x00, 0x04, 0x66, + 0x04, 0x00, 0x00, 0x04, 0x67, 0x04, 0x00, 0x00, + 0x04, 0x68, 0x04, 0x00, 0x00, 0x04, 0x69, 0x04, + 0x00, 0x00, 0x04, 0x6a, 0x04, 0x00, 0x00, 0x04, + 0x6b, 0x04, 0x00, 0x00, 0x04, 0x6c, 0x04, 0x00, + 0x00, 0x04, 0x6d, 0x04, 0x00, 0x00, 0x04, 0x6e, + 0x04, 0x00, 0x00, 0x04, 0x6f, 0x04, 0x00, 0x00, + 0x26, 0x0a, 0x00, 0x4d, 0x70, 0x04, 0x00, 0x00, + 0x04, 0x71, 0x04, 0x00, 0x00, 0x04, 0x72, 0x04, + 0x00, 0x00, 0x04, 0x73, 0x04, 0x00, 0x00, 0x04, + 0x74, 0x04, 0x00, 0x00, 0x04, 0x75, 0x04, 0x00, + 0x00, 0x04, 0x76, 0x04, 0x00, 0x00, 0x04, 0x77, + 0x04, 0x00, 0x00, 0x04, 0x78, 0x04, 0x00, 0x00, + 0x04, 0x79, 0x04, 0x00, 0x00, 0x04, 0x7a, 0x04, + 0x00, 0x00, 0x26, 0x0a, 0x00, 0x4d, 0x7b, 0x04, + 0x00, 0x00, 0x04, 0x7c, 0x04, 0x00, 0x00, 0x04, + 0x7d, 0x04, 0x00, 0x00, 0x04, 0x7e, 0x04, 0x00, + 0x00, 0x04, 0x7f, 0x04, 0x00, 0x00, 0x04, 0x80, + 0x04, 0x00, 0x00, 0x04, 0x81, 0x04, 0x00, 0x00, + 0x04, 0x82, 0x04, 0x00, 0x00, 0x04, 0x83, 0x04, + 0x00, 0x00, 0x04, 0x84, 0x04, 0x00, 0x00, 0x04, + 0x85, 0x04, 0x00, 0x00, 0x26, 0x0a, 0x00, 0x4d, + 0x86, 0x04, 0x00, 0x00, 0x04, 0x87, 0x04, 0x00, + 0x00, 0x04, 0x88, 0x04, 0x00, 0x00, 0x04, 0x89, + 0x04, 0x00, 0x00, 0x04, 0x8a, 0x04, 0x00, 0x00, + 0x04, 0x8b, 0x04, 0x00, 0x00, 0x04, 0x8c, 0x04, + 0x00, 0x00, 0x04, 0x8d, 0x04, 0x00, 0x00, 0x04, + 0x8e, 0x04, 0x00, 0x00, 0x04, 0x8f, 0x04, 0x00, + 0x00, 0x04, 0x90, 0x04, 0x00, 0x00, 0x26, 0x0a, + 0x00, 0x4d, 0x91, 0x04, 0x00, 0x00, 0xc2, 0x40, + 0xc1, 0x0c, 0xc1, 0x36, 0x42, 0xa1, 0x03, 0x00, + 0x00, 0x42, 0x3a, 0x00, 0x00, 0x00, 0x04, 0x92, + 0x04, 0x00, 0x00, 0x0b, 0xb4, 0x98, 0x4d, 0x3c, + 0x00, 0x00, 0x00, 0xb4, 0x98, 0x4d, 0x3d, 0x00, + 0x00, 0x00, 0xbf, 0x4c, 0x4e, 0x3f, 0x00, 0x00, + 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x00, 0xf0, 0x0e, + 0xbe, 0x4d, 0xbe, 0x4e, 0x33, 0xc2, 0x41, 0xbe, + 0x4f, 0xbe, 0x50, 0x33, 0xc2, 0x42, 0xbe, 0x51, + 0xbe, 0x52, 0x33, 0xc2, 0x43, 0x04, 0x93, 0x04, + 0x00, 0x00, 0x04, 0x94, 0x04, 0x00, 0x00, 0x04, + 0x95, 0x04, 0x00, 0x00, 0x04, 0x96, 0x04, 0x00, + 0x00, 0x04, 0x97, 0x04, 0x00, 0x00, 0x04, 0x98, + 0x04, 0x00, 0x00, 0x26, 0x06, 0x00, 0xc2, 0x44, + 0x04, 0x99, 0x04, 0x00, 0x00, 0x04, 0x9a, 0x04, + 0x00, 0x00, 0x04, 0x9b, 0x04, 0x00, 0x00, 0x04, + 0x9c, 0x04, 0x00, 0x00, 0x04, 0x9d, 0x04, 0x00, + 0x00, 0x26, 0x05, 0x00, 0xc2, 0x45, 0x0b, 0x0b, + 0x04, 0xd8, 0x00, 0x00, 0x00, 0x4d, 0x9e, 0x04, + 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x4d, + 0x9f, 0x04, 0x00, 0x00, 0x4d, 0x9b, 0x04, 0x00, + 0x00, 0x0b, 0x04, 0xc0, 0x01, 0x00, 0x00, 0x4d, + 0x9e, 0x04, 0x00, 0x00, 0x04, 0xa0, 0x04, 0x00, + 0x00, 0x4d, 0x9f, 0x04, 0x00, 0x00, 0x4d, 0x9a, + 0x04, 0x00, 0x00, 0x0b, 0x04, 0xc6, 0x01, 0x00, + 0x00, 0x4d, 0x9e, 0x04, 0x00, 0x00, 0x04, 0xa1, + 0x04, 0x00, 0x00, 0x4d, 0x9f, 0x04, 0x00, 0x00, + 0x4d, 0x94, 0x04, 0x00, 0x00, 0x0b, 0x04, 0xc5, + 0x01, 0x00, 0x00, 0x4d, 0x9e, 0x04, 0x00, 0x00, + 0x04, 0xa2, 0x04, 0x00, 0x00, 0x4d, 0x9f, 0x04, + 0x00, 0x00, 0x4d, 0x96, 0x04, 0x00, 0x00, 0x0b, + 0x04, 0xd4, 0x01, 0x00, 0x00, 0x4d, 0x9e, 0x04, + 0x00, 0x00, 0x04, 0xa3, 0x04, 0x00, 0x00, 0x4d, + 0x9f, 0x04, 0x00, 0x00, 0x04, 0xa4, 0x04, 0x00, + 0x00, 0x4d, 0xa5, 0x04, 0x00, 0x00, 0x04, 0xa6, + 0x04, 0x00, 0x00, 0x4d, 0xa7, 0x04, 0x00, 0x00, + 0x04, 0xa8, 0x04, 0x00, 0x00, 0x4d, 0xa9, 0x04, + 0x00, 0x00, 0x4d, 0x95, 0x04, 0x00, 0x00, 0x0b, + 0x04, 0xaa, 0x04, 0x00, 0x00, 0x4d, 0xa5, 0x04, + 0x00, 0x00, 0x04, 0xab, 0x04, 0x00, 0x00, 0x4d, + 0xa7, 0x04, 0x00, 0x00, 0x04, 0xac, 0x04, 0x00, + 0x00, 0x4d, 0xa9, 0x04, 0x00, 0x00, 0x4d, 0x97, + 0x04, 0x00, 0x00, 0xc2, 0x4c, 0xc1, 0x0e, 0x07, + 0x0b, 0x0b, 0x4d, 0xa5, 0x04, 0x00, 0x00, 0x0b, + 0x4d, 0xa7, 0x04, 0x00, 0x00, 0x0b, 0x4d, 0xa9, + 0x04, 0x00, 0x00, 0xef, 0xc2, 0x4d, 0xc1, 0x0c, + 0xc1, 0x36, 0x04, 0xad, 0x04, 0x00, 0x00, 0x0b, + 0xb4, 0x98, 0x4d, 0x3c, 0x00, 0x00, 0x00, 0xb4, + 0x98, 0x4d, 0x3d, 0x00, 0x00, 0x00, 0xc1, 0x4f, + 0x4d, 0x3f, 0x00, 0x00, 0x00, 0xf0, 0x0e, 0xc1, + 0x0c, 0xc1, 0x4f, 0x04, 0x3a, 0x00, 0x00, 0x00, + 0x0b, 0xb5, 0x98, 0x4d, 0x3d, 0x00, 0x00, 0x00, + 0xf0, 0x0e, 0x0b, 0x04, 0xa5, 0x04, 0x00, 0x00, + 0x04, 0xa7, 0x04, 0x00, 0x00, 0x04, 0xa9, 0x04, + 0x00, 0x00, 0x26, 0x03, 0x00, 0x4d, 0x97, 0x04, + 0x00, 0x00, 0x04, 0xa5, 0x04, 0x00, 0x00, 0x04, + 0xa7, 0x04, 0x00, 0x00, 0x04, 0xa9, 0x04, 0x00, + 0x00, 0x26, 0x03, 0x00, 0x4d, 0x93, 0x04, 0x00, + 0x00, 0x04, 0x9f, 0x04, 0x00, 0x00, 0x04, 0x9e, + 0x04, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x94, + 0x04, 0x00, 0x00, 0x04, 0x9f, 0x04, 0x00, 0x00, + 0x04, 0x9e, 0x04, 0x00, 0x00, 0x04, 0xa5, 0x04, + 0x00, 0x00, 0x04, 0xa7, 0x04, 0x00, 0x00, 0x04, + 0xa9, 0x04, 0x00, 0x00, 0x26, 0x05, 0x00, 0x4d, + 0x95, 0x04, 0x00, 0x00, 0x04, 0x9f, 0x04, 0x00, + 0x00, 0x04, 0x9e, 0x04, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0x96, 0x04, 0x00, 0x00, 0x04, 0x9f, + 0x04, 0x00, 0x00, 0x04, 0x9e, 0x04, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0x99, 0x04, 0x00, 0x00, + 0x04, 0x9f, 0x04, 0x00, 0x00, 0x04, 0x9e, 0x04, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x9a, 0x04, + 0x00, 0x00, 0x04, 0x9f, 0x04, 0x00, 0x00, 0x04, + 0x9e, 0x04, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0x9b, 0x04, 0x00, 0x00, 0x04, 0xa7, 0x04, 0x00, + 0x00, 0x04, 0xa9, 0x04, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0x9d, 0x04, 0x00, 0x00, 0xc2, 0x51, + 0xc1, 0x15, 0x0b, 0x26, 0x00, 0x00, 0x4d, 0xa2, + 0x03, 0x00, 0x00, 0x04, 0xec, 0x00, 0x00, 0x00, + 0x04, 0xa3, 0x03, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xa4, 0x03, 0x00, 0x00, 0x0b, 0x4d, 0xa5, + 0x03, 0x00, 0x00, 0x44, 0xad, 0x04, 0x00, 0x00, + 0xc1, 0x0c, 0xc1, 0x36, 0x42, 0xad, 0x04, 0x00, + 0x00, 0x04, 0xa6, 0x03, 0x00, 0x00, 0x0b, 0xb4, + 0x98, 0x4d, 0x3c, 0x00, 0x00, 0x00, 0xb4, 0x98, + 0x4d, 0x3d, 0x00, 0x00, 0x00, 0xc1, 0x14, 0x43, + 0xa7, 0x03, 0x00, 0x00, 0xbf, 0x61, 0xc1, 0x15, + 0x42, 0xa1, 0x03, 0x00, 0x00, 0x24, 0x02, 0x00, + 0x4d, 0x3f, 0x00, 0x00, 0x00, 0xf0, 0x0e, 0xc1, + 0x0c, 0xc1, 0x36, 0x42, 0xad, 0x04, 0x00, 0x00, + 0x42, 0x3a, 0x00, 0x00, 0x00, 0x04, 0xa8, 0x03, + 0x00, 0x00, 0x0b, 0xb4, 0x98, 0x4d, 0x3c, 0x00, + 0x00, 0x00, 0xc1, 0x53, 0x4d, 0x40, 0x00, 0x00, + 0x00, 0xf0, 0x0e, 0x39, 0x8d, 0x00, 0x00, 0x00, + 0x43, 0x63, 0x00, 0x00, 0x00, 0xc1, 0x36, 0x42, + 0xad, 0x04, 0x00, 0x00, 0x42, 0x3a, 0x00, 0x00, + 0x00, 0x04, 0xa9, 0x03, 0x00, 0x00, 0x0b, 0xb5, + 0x98, 0x4d, 0x3e, 0x00, 0x00, 0x00, 0xb4, 0x98, + 0x4d, 0x3d, 0x00, 0x00, 0x00, 0xb4, 0x98, 0x4d, + 0x3c, 0x00, 0x00, 0x00, 0xbf, 0x62, 0x4e, 0x3f, + 0x00, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x00, + 0x24, 0x03, 0x00, 0x0e, 0xc1, 0x0c, 0xc1, 0x36, + 0x42, 0xad, 0x04, 0x00, 0x00, 0x42, 0x3a, 0x00, + 0x00, 0x00, 0x04, 0x92, 0x04, 0x00, 0x00, 0x0b, + 0xb4, 0x98, 0x4d, 0x3d, 0x00, 0x00, 0x00, 0xb4, + 0x98, 0x4d, 0x3c, 0x00, 0x00, 0x00, 0xbf, 0x63, + 0x4e, 0x3f, 0x00, 0x00, 0x00, 0x4d, 0x3f, 0x00, + 0x00, 0x00, 0xf0, 0x0e, 0xc1, 0x36, 0x0b, 0x0b, + 0x4d, 0x90, 0x00, 0x00, 0x00, 0x0b, 0x4d, 0x97, + 0x00, 0x00, 0x00, 0x15, 0x44, 0xae, 0x04, 0x00, + 0x00, 0xc3, 0x57, 0x42, 0x90, 0x00, 0x00, 0x00, + 0xbf, 0x64, 0x44, 0x37, 0x00, 0x00, 0x00, 0xc1, + 0x57, 0x42, 0x97, 0x00, 0x00, 0x00, 0xbf, 0x65, + 0x44, 0x37, 0x00, 0x00, 0x00, 0xc1, 0x57, 0x42, + 0x97, 0x00, 0x00, 0x00, 0xbf, 0x66, 0x44, 0xaf, + 0x04, 0x00, 0x00, 0xc1, 0x57, 0x42, 0x97, 0x00, + 0x00, 0x00, 0xbf, 0x67, 0x44, 0xb0, 0x04, 0x00, + 0x00, 0xc1, 0x0c, 0xc1, 0x36, 0x04, 0xe2, 0x00, + 0x00, 0x00, 0x0b, 0xb4, 0x98, 0x4d, 0x3d, 0x00, + 0x00, 0x00, 0xb4, 0x98, 0x4d, 0x3c, 0x00, 0x00, + 0x00, 0xbf, 0x68, 0x4e, 0x3f, 0x00, 0x00, 0x00, + 0x4d, 0x3f, 0x00, 0x00, 0x00, 0xf0, 0x0e, 0xc1, + 0x0c, 0xc1, 0x36, 0x04, 0xb1, 0x04, 0x00, 0x00, + 0x0b, 0xbf, 0x69, 0x4e, 0x3f, 0x00, 0x00, 0x00, + 0x4d, 0x3f, 0x00, 0x00, 0x00, 0xf0, 0x0e, 0xc1, + 0x0c, 0xc1, 0x36, 0x04, 0xe3, 0x00, 0x00, 0x00, + 0x0b, 0xbf, 0x6a, 0x4e, 0x3f, 0x00, 0x00, 0x00, + 0x4d, 0x3f, 0x00, 0x00, 0x00, 0xf0, 0x0e, 0xc1, + 0x0c, 0xc1, 0x36, 0x04, 0x2e, 0x01, 0x00, 0x00, + 0x0b, 0xbf, 0x6b, 0x4e, 0x3f, 0x00, 0x00, 0x00, + 0x4d, 0x3f, 0x00, 0x00, 0x00, 0xf0, 0x0e, 0xd0, + 0xc1, 0x36, 0x44, 0xde, 0x00, 0x00, 0x00, 0x29, + 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, + 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x03, + 0x01, 0xa0, 0x03, 0x00, 0x01, 0x00, 0xd0, 0x99, + 0x28, 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, + 0x00, 0x00, 0x01, 0x00, 0x01, 0x02, 0x00, 0x00, + 0x28, 0x01, 0xa0, 0x03, 0x00, 0x01, 0x00, 0xd0, + 0xe9, 0x23, 0x04, 0x1b, 0x00, 0x00, 0x00, 0x38, + 0x93, 0x00, 0x00, 0x00, 0x99, 0xab, 0xe9, 0x15, + 0xd0, 0x42, 0x3b, 0x00, 0x00, 0x00, 0x39, 0x93, + 0x00, 0x00, 0x00, 0xad, 0xe9, 0x07, 0x04, 0x49, + 0x00, 0x00, 0x00, 0x28, 0xd0, 0x99, 0x28, 0xfc, + 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, + 0x04, 0x06, 0x04, 0x05, 0x01, 0x00, 0xc1, 0x01, + 0x0a, 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, + 0x00, 0x01, 0x00, 0xa6, 0x03, 0x00, 0x01, 0x00, + 0xa8, 0x03, 0x00, 0x01, 0x00, 0xaa, 0x03, 0x00, + 0x00, 0x00, 0xac, 0x03, 0x00, 0x01, 0x00, 0xae, + 0x03, 0x00, 0x02, 0x00, 0xb0, 0x03, 0x00, 0x03, + 0x00, 0xb2, 0x03, 0x00, 0x04, 0x00, 0x98, 0x01, + 0x00, 0x01, 0x00, 0xa4, 0x03, 0x00, 0x01, 0x0c, + 0x01, 0xc2, 0x05, 0xd0, 0x11, 0xe9, 0x08, 0x0e, + 0xd0, 0x42, 0xb2, 0x04, 0x00, 0x00, 0xc8, 0xc1, + 0x05, 0xe8, 0xb7, 0xa0, 0xc9, 0xd1, 0x11, 0xea, + 0x0b, 0x0e, 0xb4, 0xc5, 0xad, 0x11, 0xea, 0x04, + 0x0e, 0x0b, 0xd9, 0x0e, 0xd1, 0xe9, 0x22, 0xc4, + 0xe9, 0x1f, 0xc4, 0x7d, 0xeb, 0x14, 0xca, 0x06, + 0xd1, 0xc6, 0x48, 0xad, 0x11, 0xe9, 0x0a, 0x0e, + 0xd1, 0xc6, 0x72, 0xc4, 0xc6, 0x48, 0x16, 0x4a, + 0x0e, 0x80, 0xe9, 0xeb, 0x0e, 0x0e, 0xeb, 0x0e, + 0xd1, 0x11, 0xea, 0x09, 0x0e, 0xc4, 0x11, 0xea, + 0x03, 0x0e, 0x0b, 0xd9, 0x0e, 0xb5, 0xc5, 0xad, + 0xe9, 0x0a, 0xd1, 0xd3, 0x44, 0xb3, 0x04, 0x00, + 0x00, 0xeb, 0x2e, 0xc5, 0xb5, 0xa7, 0xe9, 0x29, + 0x39, 0x8e, 0x00, 0x00, 0x00, 0xc5, 0xee, 0xcb, + 0xb4, 0xc2, 0x04, 0xc1, 0x04, 0xc5, 0xa5, 0xe9, + 0x11, 0xc7, 0xc1, 0x04, 0x72, 0xc1, 0x05, 0xc1, + 0x04, 0xb7, 0x9f, 0x48, 0x4a, 0x95, 0x04, 0xeb, + 0xeb, 0xd1, 0xc7, 0x44, 0xb3, 0x04, 0x00, 0x00, + 0x0b, 0xdc, 0x4d, 0xb4, 0x04, 0x00, 0x00, 0xd0, + 0x4d, 0xb5, 0x04, 0x00, 0x00, 0x06, 0xd2, 0xad, + 0xe9, 0x04, 0x07, 0xeb, 0x04, 0xc0, 0xd2, 0x9f, + 0x4d, 0xb6, 0x04, 0x00, 0x00, 0x07, 0x4d, 0xb7, + 0x04, 0x00, 0x00, 0xd1, 0x4d, 0xb8, 0x04, 0x00, + 0x00, 0x07, 0x4d, 0xb9, 0x04, 0x00, 0x00, 0x28, + 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0x06, + 0x01, 0xa0, 0x03, 0x00, 0x00, 0x80, 0xbf, 0x00, + 0xc8, 0xbf, 0x01, 0x28, 0xfc, 0x06, 0x01, 0x00, + 0x0d, 0x43, 0x06, 0x00, 0xa0, 0x03, 0x02, 0x02, + 0x02, 0x05, 0x00, 0x00, 0x55, 0x04, 0xa0, 0x03, + 0x00, 0x01, 0x00, 0xa2, 0x03, 0x00, 0x01, 0x00, + 0xa4, 0x03, 0x00, 0x00, 0x00, 0xa6, 0x03, 0x00, + 0x01, 0x00, 0xb4, 0xc8, 0xc4, 0xd1, 0xe8, 0xa5, + 0xe9, 0x4d, 0xd1, 0xc4, 0x48, 0xcd, 0xc5, 0x42, + 0x3e, 0x00, 0x00, 0x00, 0x11, 0xea, 0x04, 0x0e, + 0xb5, 0x98, 0x44, 0x3e, 0x00, 0x00, 0x00, 0xc5, + 0xb4, 0x98, 0x44, 0x3c, 0x00, 0x00, 0x00, 0x04, + 0x3f, 0x00, 0x00, 0x00, 0xc5, 0xaa, 0x11, 0xe9, + 0x0b, 0x0e, 0xc5, 0xb4, 0x98, 0x15, 0x44, 0x3d, + 0x00, 0x00, 0x00, 0x0e, 0x39, 0x8d, 0x00, 0x00, + 0x00, 0x43, 0x63, 0x00, 0x00, 0x00, 0xd0, 0xc5, + 0x42, 0xb6, 0x04, 0x00, 0x00, 0xc5, 0x24, 0x03, + 0x00, 0x0e, 0x95, 0x00, 0xeb, 0xaf, 0x29, 0xfc, + 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, + 0x03, 0x00, 0x03, 0x03, 0x01, 0x00, 0x1b, 0x03, + 0xa2, 0x03, 0x00, 0x01, 0x00, 0xa4, 0x03, 0x00, + 0x01, 0x00, 0xa6, 0x03, 0x00, 0x01, 0x00, 0xa0, + 0x03, 0x00, 0x01, 0xd1, 0x11, 0xe9, 0x0b, 0x0e, + 0xdc, 0xd0, 0x42, 0x3a, 0x00, 0x00, 0x00, 0xd1, + 0xef, 0x0e, 0xd2, 0x11, 0xe9, 0x06, 0x0e, 0xdc, + 0xd0, 0xd2, 0xef, 0x0e, 0xd0, 0x28, 0xfc, 0x06, + 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, 0x03, + 0x00, 0x03, 0x06, 0x00, 0x00, 0x3b, 0x03, 0xa0, + 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, 0x00, 0x01, + 0x00, 0xa4, 0x03, 0x00, 0x01, 0x00, 0xd1, 0xd0, + 0xaa, 0xe9, 0x2e, 0x39, 0x8d, 0x00, 0x00, 0x00, + 0x43, 0x63, 0x00, 0x00, 0x00, 0xd0, 0xd1, 0x0b, + 0xd2, 0x4d, 0x3f, 0x00, 0x00, 0x00, 0xb4, 0x98, + 0x4d, 0x3e, 0x00, 0x00, 0x00, 0xb4, 0x98, 0x4d, + 0x3c, 0x00, 0x00, 0x00, 0xb4, 0x98, 0x4d, 0x3d, + 0x00, 0x00, 0x00, 0x24, 0x03, 0x00, 0xeb, 0x07, + 0xd0, 0xd1, 0x72, 0xd2, 0x16, 0x4a, 0x0e, 0xd0, + 0x28, 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, + 0x00, 0x00, 0x01, 0x04, 0x01, 0x05, 0x00, 0x00, + 0x45, 0x05, 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, + 0x03, 0x00, 0x00, 0x00, 0xa4, 0x03, 0x00, 0x01, + 0x00, 0xa6, 0x03, 0x00, 0x02, 0x00, 0x98, 0x01, + 0x00, 0x01, 0x00, 0x0c, 0x01, 0xcb, 0xb5, 0xc8, + 0xc4, 0xc7, 0xe8, 0xa5, 0xe9, 0x39, 0xc7, 0xc4, + 0x48, 0xc9, 0xc5, 0x7d, 0xeb, 0x28, 0xca, 0x39, + 0x8d, 0x00, 0x00, 0x00, 0x42, 0x3a, 0x00, 0x00, + 0x00, 0x42, 0x20, 0x02, 0x00, 0x00, 0x43, 0xa7, + 0x03, 0x00, 0x00, 0xc5, 0xc6, 0x24, 0x02, 0x00, + 0x11, 0xe9, 0x0a, 0x0e, 0xd0, 0xc6, 0x72, 0xc5, + 0xc6, 0x48, 0x16, 0x4a, 0x0e, 0x80, 0xe9, 0xd7, + 0x0e, 0x0e, 0x95, 0x00, 0xeb, 0xc3, 0xd0, 0x28, + 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, + 0x00, 0x02, 0x00, 0x02, 0x03, 0x00, 0x01, 0x3c, + 0x02, 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, + 0x00, 0x01, 0x00, 0x39, 0x8e, 0x00, 0x00, 0x00, + 0x43, 0xba, 0x04, 0x00, 0x00, 0xd0, 0x24, 0x01, + 0x00, 0xe9, 0x03, 0xd0, 0x28, 0x39, 0x93, 0x00, + 0x00, 0x00, 0x42, 0x05, 0x02, 0x00, 0x00, 0x39, + 0x8d, 0x00, 0x00, 0x00, 0xd0, 0xee, 0xaa, 0xe9, + 0x08, 0xbf, 0x00, 0xd0, 0xd1, 0x23, 0x02, 0x00, + 0x39, 0xbf, 0x00, 0x00, 0x00, 0x11, 0x04, 0xbb, + 0x04, 0x00, 0x00, 0x21, 0x01, 0x00, 0x2f, 0xfc, + 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, + 0x02, 0x07, 0x02, 0x05, 0x00, 0x00, 0xba, 0x01, + 0x09, 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, + 0x00, 0x01, 0x00, 0xa4, 0x03, 0x00, 0x00, 0x00, + 0xa6, 0x03, 0x00, 0x01, 0x00, 0xa8, 0x03, 0x00, + 0x02, 0x00, 0xaa, 0x03, 0x00, 0x03, 0x00, 0xac, + 0x03, 0x00, 0x04, 0x00, 0xae, 0x03, 0x00, 0x05, + 0x00, 0xa0, 0x03, 0x04, 0x00, 0x03, 0x26, 0x00, + 0x00, 0xc8, 0xb4, 0x98, 0xc9, 0xb5, 0x98, 0xca, + 0x06, 0xcb, 0x6d, 0x56, 0x00, 0x00, 0x00, 0xd0, + 0x39, 0x93, 0x00, 0x00, 0x00, 0x42, 0x05, 0x02, + 0x00, 0x00, 0x49, 0x24, 0x00, 0x00, 0xc2, 0x05, + 0xc1, 0x05, 0x43, 0x68, 0x00, 0x00, 0x00, 0x24, + 0x00, 0x00, 0xc3, 0x04, 0x42, 0x67, 0x00, 0x00, + 0x00, 0xcd, 0x98, 0xe9, 0x23, 0xc4, 0x43, 0x24, + 0x02, 0x00, 0x00, 0xc1, 0x04, 0x42, 0x3f, 0x00, + 0x00, 0x00, 0x24, 0x01, 0x00, 0x0e, 0xd1, 0x98, + 0x11, 0xea, 0x06, 0x0e, 0xc4, 0xe8, 0xd1, 0xae, + 0xe9, 0x06, 0xb4, 0x98, 0xc9, 0xeb, 0xca, 0x0e, + 0x06, 0x6e, 0x24, 0x00, 0x00, 0x00, 0x0e, 0xeb, + 0x56, 0xc2, 0x06, 0x6d, 0x14, 0x00, 0x00, 0x00, + 0xb4, 0x98, 0xca, 0xc1, 0x06, 0xcb, 0x0e, 0x06, + 0x6e, 0x0d, 0x00, 0x00, 0x00, 0x0e, 0xeb, 0x3f, + 0x6e, 0x05, 0x00, 0x00, 0x00, 0x2f, 0x6d, 0x2a, + 0x00, 0x00, 0x00, 0xc5, 0x98, 0x11, 0xe9, 0x17, + 0x0e, 0xc1, 0x05, 0x42, 0x06, 0x00, 0x00, 0x00, + 0x11, 0xe9, 0x0c, 0x0e, 0xc1, 0x05, 0x43, 0x06, + 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x0e, 0x0e, + 0x06, 0x6e, 0x0d, 0x00, 0x00, 0x00, 0x0e, 0xeb, + 0x0d, 0x6e, 0x05, 0x00, 0x00, 0x00, 0x2f, 0xc6, + 0xe9, 0x03, 0xc7, 0x2f, 0x6f, 0x6f, 0xc4, 0x28, + 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, + 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x03, + 0x01, 0xa0, 0x03, 0x00, 0x01, 0x80, 0xbf, 0x00, + 0x28, 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, + 0x00, 0x00, 0x00, 0x03, 0x00, 0x04, 0x01, 0x01, + 0x1d, 0x03, 0xa2, 0x03, 0x00, 0x00, 0x80, 0x10, + 0x00, 0x01, 0x00, 0x98, 0x01, 0x00, 0x01, 0x00, + 0xa0, 0x03, 0x00, 0x03, 0x08, 0xc9, 0x0c, 0x01, + 0xca, 0xdc, 0x43, 0x58, 0x00, 0x00, 0x00, 0xc5, + 0xc6, 0x24, 0x02, 0x00, 0xc8, 0x39, 0xb3, 0x00, + 0x00, 0x00, 0x11, 0xbf, 0x00, 0x21, 0x01, 0x00, + 0x28, 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, + 0x00, 0x00, 0x02, 0x00, 0x02, 0x02, 0x01, 0x01, + 0x0a, 0x02, 0xa0, 0x03, 0x00, 0x01, 0x80, 0xa4, + 0x03, 0x00, 0x01, 0x80, 0xa2, 0x03, 0x00, 0x01, + 0xbf, 0x00, 0x04, 0x68, 0x00, 0x00, 0x00, 0x23, + 0x01, 0x00, 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, + 0x06, 0x00, 0xa6, 0x03, 0x02, 0x04, 0x02, 0x04, + 0x03, 0x02, 0x4e, 0x06, 0xa8, 0x03, 0x00, 0x01, + 0x00, 0xaa, 0x03, 0x00, 0x01, 0x00, 0xac, 0x03, + 0x00, 0x00, 0x00, 0xae, 0x03, 0x00, 0x01, 0x00, + 0xa0, 0x03, 0x03, 0x00, 0x03, 0xa6, 0x03, 0x00, + 0x01, 0x90, 0xa2, 0x03, 0x00, 0x00, 0xa4, 0x03, + 0x01, 0x03, 0xa0, 0x03, 0x00, 0x03, 0x0c, 0x02, + 0xcb, 0x6d, 0x15, 0x00, 0x00, 0x00, 0xdc, 0xd0, + 0x49, 0xd1, 0x24, 0x01, 0x00, 0xcc, 0x42, 0x3f, + 0x00, 0x00, 0x00, 0xc9, 0x0e, 0xeb, 0x0f, 0xca, + 0x6d, 0x0b, 0x00, 0x00, 0x00, 0xdd, 0xc6, 0xee, + 0x0e, 0x06, 0x0f, 0x28, 0x2f, 0xc4, 0x42, 0x67, + 0x00, 0x00, 0x00, 0x98, 0xe9, 0x1b, 0x39, 0xb3, + 0x00, 0x00, 0x00, 0x43, 0x7e, 0x00, 0x00, 0x00, + 0xc5, 0x24, 0x01, 0x00, 0x43, 0x7d, 0x00, 0x00, + 0x00, 0xbf, 0x00, 0xbf, 0x01, 0x25, 0x02, 0x00, + 0xde, 0xc5, 0xee, 0x29, 0xfc, 0x06, 0x01, 0x00, + 0x0d, 0x43, 0x06, 0x00, 0x00, 0x01, 0x00, 0x01, + 0x03, 0x01, 0x00, 0x0a, 0x01, 0xa0, 0x03, 0x00, + 0x01, 0x00, 0xa6, 0x03, 0x03, 0x01, 0xdc, 0x04, + 0x68, 0x00, 0x00, 0x00, 0xd0, 0x23, 0x02, 0x00, + 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, + 0x00, 0x01, 0x00, 0x01, 0x03, 0x01, 0x00, 0x0a, + 0x01, 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa6, 0x03, + 0x03, 0x01, 0xdc, 0x04, 0x17, 0x00, 0x00, 0x00, + 0xd0, 0x23, 0x02, 0x00, 0xfc, 0x06, 0x01, 0x00, + 0x0d, 0x43, 0x06, 0x00, 0x00, 0x02, 0x00, 0x02, + 0x03, 0x00, 0x00, 0x16, 0x02, 0xa0, 0x03, 0x00, + 0x01, 0x00, 0xa2, 0x03, 0x00, 0x01, 0x00, 0xd0, + 0xd1, 0xa9, 0x98, 0xe9, 0x10, 0x39, 0xbf, 0x00, + 0x00, 0x00, 0x11, 0x04, 0xbc, 0x04, 0x00, 0x00, + 0x21, 0x01, 0x00, 0x2f, 0x29, 0xfc, 0x06, 0x01, + 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, 0x02, 0x02, + 0x02, 0x06, 0x00, 0x00, 0x44, 0x04, 0xa0, 0x03, + 0x00, 0x01, 0x00, 0xa2, 0x03, 0x00, 0x01, 0x00, + 0xa4, 0x03, 0x00, 0x00, 0x00, 0xa6, 0x03, 0x00, + 0x01, 0x00, 0xd1, 0x7d, 0xeb, 0x3a, 0xc8, 0xd1, + 0xc4, 0x48, 0xcd, 0xc5, 0xb4, 0x98, 0x15, 0x44, + 0x3e, 0x00, 0x00, 0x00, 0x44, 0x3c, 0x00, 0x00, + 0x00, 0x04, 0x3f, 0x00, 0x00, 0x00, 0xc5, 0xaa, + 0x11, 0xe9, 0x0b, 0x0e, 0xc5, 0xb4, 0x98, 0x15, + 0x44, 0x3d, 0x00, 0x00, 0x00, 0x0e, 0x39, 0x8d, + 0x00, 0x00, 0x00, 0x43, 0x63, 0x00, 0x00, 0x00, + 0xd0, 0xc4, 0xc5, 0x24, 0x03, 0x00, 0x0e, 0x80, + 0xe9, 0xc5, 0x0e, 0x0e, 0xd0, 0x28, 0xfc, 0x06, + 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, 0x02, + 0x04, 0x02, 0x05, 0x00, 0x00, 0x59, 0x06, 0xa0, + 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, 0x00, 0x01, + 0x00, 0xa4, 0x03, 0x00, 0x00, 0x00, 0xa6, 0x03, + 0x00, 0x01, 0x00, 0xa8, 0x03, 0x00, 0x02, 0x00, + 0xaa, 0x03, 0x00, 0x03, 0x00, 0x39, 0x8d, 0x00, + 0x00, 0x00, 0x43, 0xbd, 0x04, 0x00, 0x00, 0xd1, + 0x24, 0x01, 0x00, 0xc8, 0xb4, 0xc9, 0xc5, 0xc4, + 0xe8, 0xa5, 0xe9, 0x41, 0xc4, 0xc5, 0x48, 0xca, + 0x39, 0x8d, 0x00, 0x00, 0x00, 0x43, 0x64, 0x00, + 0x00, 0x00, 0xd1, 0xc6, 0x24, 0x02, 0x00, 0xcf, + 0x11, 0xe9, 0x25, 0x0e, 0xc7, 0x42, 0x3c, 0x00, + 0x00, 0x00, 0x11, 0xe9, 0x1b, 0x0e, 0x06, 0xd0, + 0xc6, 0x48, 0xad, 0x11, 0xe9, 0x12, 0x0e, 0x39, + 0x8d, 0x00, 0x00, 0x00, 0x43, 0x63, 0x00, 0x00, + 0x00, 0xd0, 0xc6, 0xc7, 0x24, 0x03, 0x00, 0x0e, + 0x95, 0x01, 0xeb, 0xbb, 0xd0, 0x28, 0xfc, 0x06, + 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0xa0, 0x03, + 0x03, 0x04, 0x03, 0x04, 0x00, 0x00, 0x70, 0x07, + 0xa2, 0x03, 0x00, 0x01, 0x00, 0xa4, 0x03, 0x00, + 0x01, 0x00, 0xa6, 0x03, 0x00, 0x01, 0x00, 0xa8, + 0x03, 0x00, 0x00, 0x00, 0xaa, 0x03, 0x00, 0x01, + 0x00, 0xac, 0x03, 0x00, 0x02, 0x00, 0xa0, 0x03, + 0x00, 0x01, 0x10, 0x0c, 0x02, 0xcb, 0x07, 0xd0, + 0xad, 0x11, 0xe9, 0x0d, 0x0e, 0x39, 0x98, 0x00, + 0x00, 0x00, 0x42, 0x3a, 0x00, 0x00, 0x00, 0xd8, + 0x0e, 0x39, 0x8d, 0x00, 0x00, 0x00, 0x43, 0x64, + 0x00, 0x00, 0x00, 0xd0, 0xd1, 0x24, 0x02, 0x00, + 0xc8, 0x06, 0xc4, 0xad, 0xe9, 0x1d, 0x39, 0x8d, + 0x00, 0x00, 0x00, 0x43, 0x5d, 0x00, 0x00, 0x00, + 0xd0, 0x24, 0x01, 0x00, 0xc9, 0x07, 0xc5, 0xad, + 0xe9, 0x03, 0x06, 0x28, 0xc7, 0xc5, 0xd1, 0xd2, + 0xf0, 0x28, 0x04, 0x3f, 0x00, 0x00, 0x00, 0xc4, + 0xaa, 0xe9, 0x08, 0xc4, 0x42, 0x3f, 0x00, 0x00, + 0x00, 0x28, 0xc4, 0x42, 0x40, 0x00, 0x00, 0x00, + 0xca, 0x06, 0xc6, 0xae, 0xe9, 0x0c, 0xc6, 0x43, + 0xa7, 0x03, 0x00, 0x00, 0xd2, 0x24, 0x01, 0x00, + 0x28, 0x06, 0x28, 0xfc, 0x06, 0x01, 0x00, 0x0d, + 0x43, 0x06, 0x00, 0x00, 0x02, 0x00, 0x02, 0x07, + 0x00, 0x00, 0x8b, 0x01, 0x02, 0xa0, 0x03, 0x00, + 0x01, 0x00, 0xa2, 0x03, 0x00, 0x01, 0x00, 0x04, + 0x1b, 0x00, 0x00, 0x00, 0xd1, 0x99, 0xac, 0xe9, + 0x18, 0x07, 0xd1, 0xae, 0xe9, 0x13, 0x39, 0xbf, + 0x00, 0x00, 0x00, 0x11, 0x04, 0xbe, 0x04, 0x00, + 0x00, 0xd1, 0x99, 0x9f, 0x21, 0x01, 0x00, 0x2f, + 0xd0, 0x39, 0x8d, 0x00, 0x00, 0x00, 0x43, 0x22, + 0x02, 0x00, 0x00, 0xd1, 0x11, 0xe9, 0x08, 0x0e, + 0xd1, 0x42, 0x3a, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xd0, 0x4d, 0x3f, 0x00, 0x00, 0x00, 0xb5, 0x98, + 0x4d, 0x3e, 0x00, 0x00, 0x00, 0xb4, 0x98, 0x4d, + 0x3d, 0x00, 0x00, 0x00, 0xb4, 0x98, 0x4d, 0x3c, + 0x00, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x00, + 0x24, 0x02, 0x00, 0x44, 0x3a, 0x00, 0x00, 0x00, + 0xd1, 0x11, 0xe9, 0x26, 0x0e, 0x39, 0x8d, 0x00, + 0x00, 0x00, 0x42, 0x5e, 0x00, 0x00, 0x00, 0xe9, + 0x11, 0x39, 0x8d, 0x00, 0x00, 0x00, 0x43, 0x5e, + 0x00, 0x00, 0x00, 0xd0, 0xd1, 0x24, 0x02, 0x00, + 0x29, 0xd0, 0xd1, 0x15, 0x44, 0x43, 0x00, 0x00, + 0x00, 0x29, 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, + 0x06, 0x00, 0x00, 0x01, 0x00, 0x01, 0x02, 0x00, + 0x00, 0x15, 0x01, 0xa0, 0x03, 0x00, 0x01, 0x00, + 0xd0, 0xe9, 0x0b, 0xd0, 0x42, 0xbf, 0x04, 0x00, + 0x00, 0xe9, 0x03, 0xd0, 0x28, 0x0b, 0xd0, 0x4d, + 0x16, 0x00, 0x00, 0x00, 0x28, 0xfc, 0x06, 0x01, + 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, 0x01, 0x02, + 0x01, 0x05, 0x00, 0x00, 0x4d, 0x03, 0xa0, 0x03, + 0x00, 0x01, 0x00, 0xa2, 0x03, 0x00, 0x00, 0x00, + 0xa4, 0x03, 0x00, 0x01, 0x00, 0xd0, 0xe9, 0x0b, + 0xd0, 0x42, 0xbf, 0x04, 0x00, 0x00, 0xe9, 0x03, + 0xd0, 0x28, 0x0b, 0xc8, 0x07, 0xd0, 0xac, 0xe9, + 0x31, 0xd0, 0x7d, 0xeb, 0x28, 0xc9, 0x39, 0x8d, + 0x00, 0x00, 0x00, 0x42, 0x3a, 0x00, 0x00, 0x00, + 0x42, 0x20, 0x02, 0x00, 0x00, 0x43, 0xa7, 0x03, + 0x00, 0x00, 0xd0, 0xc5, 0x24, 0x02, 0x00, 0x11, + 0xe9, 0x0a, 0x0e, 0xc4, 0xc5, 0x72, 0xd0, 0xc5, + 0x48, 0x16, 0x4a, 0x0e, 0x80, 0xe9, 0xd7, 0x0e, + 0x0e, 0xc4, 0xd0, 0x44, 0x16, 0x00, 0x00, 0x00, + 0xc4, 0x28, 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, + 0x06, 0x00, 0x00, 0x02, 0x00, 0x02, 0x03, 0x00, + 0x00, 0x15, 0x02, 0xa0, 0x03, 0x00, 0x01, 0x00, + 0xa2, 0x03, 0x00, 0x01, 0x00, 0xd0, 0xd1, 0xae, + 0xe9, 0x10, 0x39, 0xbf, 0x00, 0x00, 0x00, 0x11, + 0x04, 0xc0, 0x04, 0x00, 0x00, 0x21, 0x01, 0x00, + 0x2f, 0x29, 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, + 0x06, 0x00, 0x00, 0x01, 0x00, 0x01, 0x03, 0x00, + 0x00, 0x15, 0x01, 0xa0, 0x03, 0x00, 0x01, 0x00, + 0x07, 0xd0, 0xab, 0xe9, 0x10, 0x39, 0xbf, 0x00, + 0x00, 0x00, 0x11, 0x04, 0xc1, 0x04, 0x00, 0x00, + 0x21, 0x01, 0x00, 0x2f, 0x29, 0xfc, 0x06, 0x01, + 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, 0x02, 0x02, + 0x02, 0x05, 0x00, 0x00, 0x44, 0x04, 0xa0, 0x03, + 0x00, 0x01, 0x00, 0xa2, 0x03, 0x00, 0x01, 0x00, + 0xa4, 0x03, 0x00, 0x00, 0x00, 0xa6, 0x03, 0x00, + 0x01, 0x00, 0x0b, 0xc8, 0xd0, 0x7d, 0xeb, 0x38, + 0xc9, 0xd1, 0x43, 0x21, 0x02, 0x00, 0x00, 0xc5, + 0x24, 0x01, 0x00, 0xb4, 0xa8, 0x11, 0xea, 0x27, + 0x0e, 0x39, 0x8d, 0x00, 0x00, 0x00, 0x42, 0x3a, + 0x00, 0x00, 0x00, 0x42, 0x20, 0x02, 0x00, 0x00, + 0x43, 0xa7, 0x03, 0x00, 0x00, 0xd0, 0xc5, 0x24, + 0x02, 0x00, 0x11, 0xe9, 0x0a, 0x0e, 0xc4, 0xc5, + 0x72, 0xd0, 0xc5, 0x48, 0x16, 0x4a, 0x0e, 0x80, + 0xe9, 0xc7, 0x0e, 0x0e, 0xc4, 0x28, 0xfc, 0x06, + 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, 0x02, + 0x00, 0x02, 0x03, 0x00, 0x00, 0x31, 0x02, 0xa0, + 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, 0x00, 0x01, + 0x00, 0xd0, 0x98, 0xe9, 0x10, 0x39, 0xbd, 0x00, + 0x00, 0x00, 0x11, 0x04, 0xc2, 0x04, 0x00, 0x00, + 0x21, 0x01, 0x00, 0x2f, 0xd1, 0x98, 0x11, 0xea, + 0x14, 0x0e, 0x04, 0x48, 0x00, 0x00, 0x00, 0xd1, + 0x99, 0xac, 0xe9, 0x0d, 0x04, 0x1b, 0x00, 0x00, + 0x00, 0xd1, 0x99, 0xac, 0xe9, 0x03, 0xd0, 0x28, + 0xd1, 0x28, 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, + 0x06, 0x00, 0xa0, 0x03, 0x04, 0x04, 0x04, 0x05, + 0x00, 0x00, 0x6f, 0x08, 0xa2, 0x03, 0x00, 0x01, + 0x00, 0xa4, 0x03, 0x00, 0x01, 0x00, 0xa6, 0x03, + 0x00, 0x01, 0x00, 0xa8, 0x03, 0x00, 0x01, 0x00, + 0xaa, 0x03, 0x00, 0x00, 0x00, 0xac, 0x03, 0x00, + 0x01, 0x00, 0xae, 0x03, 0x00, 0x02, 0x00, 0xa0, + 0x03, 0x00, 0x01, 0x10, 0x0c, 0x02, 0xcb, 0x39, + 0x8d, 0x00, 0x00, 0x00, 0x43, 0x64, 0x00, 0x00, + 0x00, 0xd0, 0xd1, 0x24, 0x02, 0x00, 0xc8, 0x06, + 0xc4, 0xad, 0xe9, 0x22, 0x39, 0x8d, 0x00, 0x00, + 0x00, 0x43, 0x5d, 0x00, 0x00, 0x00, 0xd0, 0x24, + 0x01, 0x00, 0xc9, 0x07, 0xc5, 0xae, 0x11, 0xe9, + 0x0a, 0x0e, 0xc7, 0xc5, 0xd1, 0xd2, 0xd3, 0x22, + 0x04, 0x00, 0x0e, 0xeb, 0x35, 0x04, 0x3f, 0x00, + 0x00, 0x00, 0xc4, 0xaa, 0xe9, 0x12, 0xc4, 0x42, + 0x3d, 0x00, 0x00, 0x00, 0xe9, 0x0a, 0xc4, 0xd2, + 0x44, 0x3f, 0x00, 0x00, 0x00, 0xeb, 0x1b, 0xc4, + 0x42, 0x41, 0x00, 0x00, 0x00, 0xca, 0x06, 0xc6, + 0xae, 0x11, 0xe9, 0x0d, 0x0e, 0xc6, 0x43, 0xa7, + 0x03, 0x00, 0x00, 0xd3, 0xd2, 0x24, 0x02, 0x00, + 0x0e, 0xd2, 0x28, 0xfc, 0x06, 0x01, 0x00, 0x0d, + 0x43, 0x06, 0x00, 0x00, 0x02, 0x03, 0x02, 0x03, + 0x00, 0x00, 0x7b, 0x05, 0xa0, 0x03, 0x00, 0x01, + 0x00, 0xa2, 0x03, 0x00, 0x01, 0x00, 0xa4, 0x03, + 0x00, 0x00, 0x00, 0xa6, 0x03, 0x00, 0x01, 0x00, + 0xa8, 0x03, 0x00, 0x02, 0x00, 0x39, 0x8e, 0x00, + 0x00, 0x00, 0x43, 0xba, 0x04, 0x00, 0x00, 0xd0, + 0x24, 0x01, 0x00, 0xe9, 0x03, 0xd0, 0x28, 0x39, + 0x93, 0x00, 0x00, 0x00, 0x42, 0x05, 0x02, 0x00, + 0x00, 0x39, 0x8d, 0x00, 0x00, 0x00, 0xd0, 0xee, + 0xaa, 0xe9, 0x47, 0x26, 0x00, 0x00, 0xc9, 0xd0, + 0x39, 0x93, 0x00, 0x00, 0x00, 0x42, 0x05, 0x02, + 0x00, 0x00, 0x49, 0x24, 0x00, 0x00, 0xca, 0xc6, + 0x43, 0x68, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, + 0xcc, 0x42, 0x67, 0x00, 0x00, 0x00, 0x98, 0xe9, + 0x1f, 0xc5, 0x43, 0x24, 0x02, 0x00, 0x00, 0xc4, + 0x42, 0x3f, 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, + 0x0e, 0xd1, 0x98, 0x11, 0xea, 0x06, 0x0e, 0xc5, + 0xe8, 0xd1, 0xae, 0xe9, 0x03, 0xeb, 0xd1, 0xc5, + 0x28, 0x39, 0xbf, 0x00, 0x00, 0x00, 0x11, 0x04, + 0xbb, 0x04, 0x00, 0x00, 0x21, 0x01, 0x00, 0x2f, + 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, + 0x00, 0x02, 0x00, 0x02, 0x0a, 0x00, 0x00, 0x35, + 0x02, 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, + 0x00, 0x01, 0x00, 0x39, 0x8d, 0x00, 0x00, 0x00, + 0x43, 0x08, 0x02, 0x00, 0x00, 0x39, 0x8d, 0x00, + 0x00, 0x00, 0x43, 0x57, 0x00, 0x00, 0x00, 0xd0, + 0x0b, 0x0b, 0x39, 0x8d, 0x00, 0x00, 0x00, 0x43, + 0x08, 0x02, 0x00, 0x00, 0xd1, 0x24, 0x01, 0x00, + 0x4d, 0x3f, 0x00, 0x00, 0x00, 0x4d, 0x6e, 0x00, + 0x00, 0x00, 0x24, 0x02, 0x00, 0x25, 0x01, 0x00, + 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, + 0x00, 0x02, 0x00, 0x02, 0x02, 0x00, 0x00, 0x09, + 0x02, 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, + 0x00, 0x01, 0x00, 0xd0, 0xd1, 0x44, 0x6e, 0x00, + 0x00, 0x00, 0xd0, 0x28, 0xfc, 0x06, 0x01, 0x00, + 0x0d, 0x43, 0x06, 0x00, 0x00, 0x03, 0x00, 0x03, + 0x04, 0x00, 0x00, 0x18, 0x03, 0xa0, 0x03, 0x00, + 0x01, 0x00, 0xa2, 0x03, 0x00, 0x01, 0x00, 0xa4, + 0x03, 0x00, 0x01, 0x00, 0xd0, 0xd2, 0xad, 0xe9, + 0x12, 0x39, 0xbd, 0x00, 0x00, 0x00, 0x11, 0xd1, + 0x04, 0xc3, 0x04, 0x00, 0x00, 0x9f, 0x21, 0x01, + 0x00, 0x2f, 0xd0, 0x28, 0xfc, 0x06, 0x01, 0x00, + 0x0d, 0x43, 0x06, 0x00, 0x00, 0x01, 0x00, 0x01, + 0x03, 0x00, 0x00, 0x21, 0x01, 0xa0, 0x03, 0x00, + 0x01, 0x00, 0x39, 0x8e, 0x00, 0x00, 0x00, 0x43, + 0xba, 0x04, 0x00, 0x00, 0xd0, 0x24, 0x01, 0x00, + 0xe9, 0x03, 0xd0, 0x28, 0x39, 0x8e, 0x00, 0x00, + 0x00, 0x43, 0x78, 0x00, 0x00, 0x00, 0xd0, 0x24, + 0x01, 0x00, 0x28, 0xfc, 0x06, 0x01, 0x00, 0x0d, + 0x43, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, 0x04, + 0x00, 0x00, 0x3c, 0x03, 0xa0, 0x03, 0x00, 0x01, + 0x00, 0xa2, 0x03, 0x00, 0x00, 0x00, 0xa4, 0x03, + 0x00, 0x01, 0x00, 0x39, 0x8e, 0x00, 0x00, 0x00, + 0x43, 0xba, 0x04, 0x00, 0x00, 0xd0, 0x24, 0x01, + 0x00, 0xe9, 0x1f, 0xb4, 0xc8, 0x39, 0x8e, 0x00, + 0x00, 0x00, 0xd0, 0xe8, 0xee, 0xc9, 0xc4, 0xd0, + 0xe8, 0xa5, 0xe9, 0x0c, 0xc5, 0xc4, 0x72, 0xd0, + 0xc4, 0x48, 0x4a, 0x95, 0x00, 0xeb, 0xf0, 0xc5, + 0x28, 0x39, 0x8e, 0x00, 0x00, 0x00, 0x43, 0x78, + 0x00, 0x00, 0x00, 0xd0, 0x25, 0x01, 0x00, 0xfc, + 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, + 0x02, 0x00, 0x02, 0x03, 0x00, 0x00, 0x36, 0x02, + 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, 0x00, + 0x01, 0x00, 0x07, 0xd1, 0xac, 0xe9, 0x2e, 0x04, + 0x44, 0x00, 0x00, 0x00, 0x38, 0x93, 0x00, 0x00, + 0x00, 0x99, 0xac, 0xe9, 0x20, 0xd1, 0x39, 0x93, + 0x00, 0x00, 0x00, 0x42, 0xc4, 0x04, 0x00, 0x00, + 0x48, 0xe9, 0x12, 0xd1, 0x39, 0x93, 0x00, 0x00, + 0x00, 0x42, 0xc4, 0x04, 0x00, 0x00, 0x49, 0xd0, + 0x24, 0x01, 0x00, 0x28, 0xd0, 0xd1, 0xa9, 0x28, + 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x07, 0x00, 0x02, 0x6f, + 0x02, 0xa0, 0x03, 0x00, 0x00, 0x00, 0xa0, 0x03, + 0x03, 0x00, 0x03, 0xbf, 0x00, 0x4e, 0xd0, 0x00, + 0x00, 0x00, 0xc8, 0x6d, 0x5b, 0x00, 0x00, 0x00, + 0x39, 0x8d, 0x00, 0x00, 0x00, 0x43, 0x63, 0x00, + 0x00, 0x00, 0xc4, 0x04, 0xd4, 0x00, 0x00, 0x00, + 0x0b, 0xbf, 0x01, 0x4e, 0x40, 0x00, 0x00, 0x00, + 0x4d, 0x40, 0x00, 0x00, 0x00, 0x24, 0x03, 0x00, + 0x0e, 0x39, 0x8d, 0x00, 0x00, 0x00, 0x43, 0x63, + 0x00, 0x00, 0x00, 0xc4, 0x04, 0x3a, 0x00, 0x00, + 0x00, 0x0b, 0xb5, 0x98, 0x4d, 0x3d, 0x00, 0x00, + 0x00, 0x24, 0x03, 0x00, 0x0e, 0xb5, 0xc4, 0x42, + 0xd4, 0x00, 0x00, 0x00, 0xad, 0x11, 0xe9, 0x0e, + 0x0e, 0xc4, 0x42, 0x3a, 0x00, 0x00, 0x00, 0x39, + 0x8d, 0x00, 0x00, 0x00, 0xa9, 0x0f, 0x28, 0xc9, + 0x6d, 0x08, 0x00, 0x00, 0x00, 0xb5, 0x98, 0x0f, + 0x28, 0x2f, 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, + 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x29, 0xfc, 0x06, 0x01, 0x00, + 0x0d, 0x43, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x02, 0x00, 0xb5, 0x28, 0xfc, + 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, + 0x03, 0x00, 0x03, 0x04, 0x01, 0x00, 0x49, 0x03, + 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, 0x00, + 0x01, 0x00, 0xa4, 0x03, 0x00, 0x01, 0x00, 0x82, + 0x07, 0x0b, 0x01, 0x04, 0x40, 0x00, 0x00, 0x00, + 0xd2, 0xaa, 0xe9, 0x1a, 0xd0, 0x42, 0x1f, 0x02, + 0x00, 0x00, 0xe9, 0x12, 0xd0, 0x43, 0x1f, 0x02, + 0x00, 0x00, 0xd1, 0xd2, 0x42, 0x40, 0x00, 0x00, + 0x00, 0x24, 0x02, 0x00, 0x29, 0xdc, 0x43, 0xa7, + 0x03, 0x00, 0x00, 0xd0, 0xd1, 0x24, 0x02, 0x00, + 0x11, 0xe9, 0x0a, 0x0e, 0x04, 0x3f, 0x00, 0x00, + 0x00, 0xd2, 0xaa, 0x98, 0x11, 0xea, 0x0d, 0x0e, + 0xd0, 0xd1, 0x72, 0xd2, 0x42, 0x3f, 0x00, 0x00, + 0x00, 0x16, 0x4a, 0x29, 0xfc, 0x06, 0x01, 0x00, + 0x0d, 0x43, 0x06, 0x00, 0x00, 0x01, 0x05, 0x01, + 0x02, 0x00, 0x00, 0x2f, 0x06, 0xa0, 0x03, 0x00, + 0x01, 0x00, 0xa2, 0x03, 0x00, 0x00, 0x00, 0xa4, + 0x03, 0x00, 0x01, 0x00, 0xa6, 0x03, 0x00, 0x02, + 0x00, 0x10, 0x00, 0x01, 0x00, 0x98, 0x01, 0x00, + 0x01, 0x00, 0x08, 0xcb, 0x0c, 0x01, 0xc2, 0x04, + 0xc7, 0xcc, 0xe8, 0x98, 0xe9, 0x03, 0xb3, 0x28, + 0xc1, 0x04, 0xb5, 0x48, 0x11, 0xea, 0x03, 0x0e, + 0xb4, 0xc9, 0xc4, 0xe8, 0xca, 0xc5, 0xc6, 0xa5, + 0xe9, 0x0e, 0xc4, 0xc5, 0x48, 0xd0, 0xad, 0xe9, + 0x03, 0xc5, 0x28, 0x95, 0x01, 0xeb, 0xef, 0xb3, + 0x28, 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, + 0x00, 0x00, 0x02, 0x03, 0x02, 0x06, 0x02, 0x01, + 0x33, 0x05, 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, + 0x03, 0x00, 0x01, 0x00, 0xa4, 0x03, 0x00, 0x00, + 0x00, 0xa6, 0x03, 0x00, 0x01, 0x00, 0xa8, 0x03, + 0x00, 0x02, 0x00, 0x82, 0x07, 0x0b, 0x01, 0x84, + 0x07, 0x0c, 0x01, 0xbf, 0x00, 0xc9, 0xc5, 0xd0, + 0x44, 0x3a, 0x00, 0x00, 0x00, 0xc5, 0x11, 0x21, + 0x00, 0x00, 0xc8, 0xd1, 0x7d, 0xeb, 0x19, 0xca, + 0xdc, 0x43, 0xa7, 0x03, 0x00, 0x00, 0xd1, 0xc6, + 0x24, 0x02, 0x00, 0x11, 0xe9, 0x09, 0x0e, 0xdd, + 0xc4, 0xc6, 0xd1, 0xc6, 0x48, 0xf0, 0x0e, 0x80, + 0xe9, 0xe6, 0x0e, 0x0e, 0xc4, 0x28, 0xfc, 0x06, + 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0xa6, 0x03, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x29, 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, + 0x00, 0x00, 0x01, 0x04, 0x01, 0x04, 0x02, 0x01, + 0x19, 0x05, 0xa0, 0x03, 0x00, 0x01, 0x80, 0xa2, + 0x03, 0x00, 0x00, 0x80, 0xa4, 0x03, 0x00, 0x01, + 0x80, 0x10, 0x00, 0x01, 0x00, 0x98, 0x01, 0x00, + 0x01, 0x00, 0x8c, 0x07, 0x10, 0x01, 0x8a, 0x07, + 0x0f, 0x01, 0x08, 0xca, 0x0c, 0x01, 0xcb, 0xc6, + 0xc8, 0xdd, 0x43, 0xa7, 0x03, 0x00, 0x00, 0xc7, + 0xb5, 0x24, 0x02, 0x00, 0xc9, 0xc4, 0xe8, 0x0e, + 0xbf, 0x00, 0x28, 0xfc, 0x06, 0x01, 0x00, 0x0d, + 0x43, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x09, + 0x05, 0x00, 0x23, 0x01, 0x98, 0x01, 0x00, 0x01, + 0x00, 0xa2, 0x03, 0x00, 0x01, 0xa0, 0x03, 0x00, + 0x03, 0x8c, 0x07, 0x00, 0x00, 0xa4, 0x03, 0x01, + 0x01, 0x8a, 0x07, 0x01, 0x00, 0x0c, 0x01, 0xc8, + 0xdc, 0x43, 0x58, 0x00, 0x00, 0x00, 0xdd, 0xde, + 0x43, 0xa7, 0x03, 0x00, 0x00, 0xdf, 0x5f, 0x04, + 0x00, 0x43, 0xa7, 0x03, 0x00, 0x00, 0xc4, 0x24, + 0x01, 0x00, 0x24, 0x02, 0x00, 0x25, 0x02, 0x00, + 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, + 0x9a, 0x07, 0x01, 0x02, 0x01, 0x07, 0x03, 0x00, + 0x45, 0x03, 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, + 0x03, 0x00, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, + 0x9a, 0x07, 0x17, 0x01, 0x82, 0x07, 0x0b, 0x01, + 0x84, 0x07, 0x0c, 0x01, 0x08, 0xc9, 0xd0, 0x7d, + 0xeb, 0x3b, 0xc8, 0xd0, 0xdc, 0xa9, 0x11, 0xea, + 0x0d, 0x0e, 0xdd, 0x43, 0xa7, 0x03, 0x00, 0x00, + 0xd0, 0xc4, 0x24, 0x02, 0x00, 0x11, 0xe9, 0x24, + 0x0e, 0xde, 0xc5, 0xc4, 0x0b, 0xd0, 0xc4, 0x48, + 0x4d, 0x3f, 0x00, 0x00, 0x00, 0xb4, 0x98, 0x4d, + 0x3e, 0x00, 0x00, 0x00, 0xb4, 0x98, 0x4d, 0x3d, + 0x00, 0x00, 0x00, 0xb4, 0x98, 0x4d, 0x3c, 0x00, + 0x00, 0x00, 0xf0, 0x0e, 0x80, 0xe9, 0xc4, 0x0e, + 0x29, 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, + 0x00, 0x9c, 0x07, 0x00, 0x02, 0x00, 0x06, 0x03, + 0x00, 0x37, 0x02, 0x10, 0x00, 0x01, 0x00, 0x98, + 0x01, 0x00, 0x01, 0x00, 0x84, 0x07, 0x0c, 0x01, + 0x8e, 0x07, 0x11, 0x01, 0x8a, 0x07, 0x0f, 0x01, + 0x08, 0xc8, 0x0c, 0x01, 0xc9, 0xdc, 0xc4, 0x04, + 0x30, 0x00, 0x00, 0x00, 0x0b, 0xb4, 0x98, 0x4d, + 0x3d, 0x00, 0x00, 0x00, 0xb4, 0x4d, 0x3f, 0x00, + 0x00, 0x00, 0xf0, 0x0e, 0xc5, 0xe8, 0x11, 0xe9, + 0x16, 0x0e, 0xdd, 0x43, 0x58, 0x00, 0x00, 0x00, + 0xc4, 0xde, 0x43, 0xa7, 0x03, 0x00, 0x00, 0xc5, + 0x24, 0x01, 0x00, 0x24, 0x02, 0x00, 0x29, 0xfc, + 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0x9e, + 0x07, 0x00, 0x03, 0x00, 0x05, 0x04, 0x02, 0x7e, + 0x03, 0xa0, 0x03, 0x00, 0x00, 0x80, 0xa2, 0x03, + 0x00, 0x01, 0x80, 0xa4, 0x03, 0x00, 0x02, 0x00, + 0x9c, 0x07, 0x18, 0x01, 0x8e, 0x07, 0x11, 0x01, + 0x90, 0x07, 0x12, 0x01, 0x96, 0x07, 0x15, 0x01, + 0xdf, 0x42, 0xc5, 0x04, 0x00, 0x00, 0xe9, 0x04, + 0xbf, 0x00, 0x28, 0x0b, 0x39, 0x9b, 0x00, 0x00, + 0x00, 0x42, 0xc6, 0x04, 0x00, 0x00, 0x11, 0xea, + 0x03, 0x0e, 0xc0, 0x4d, 0xc6, 0x04, 0x00, 0x00, + 0x39, 0x9b, 0x00, 0x00, 0x00, 0x42, 0xc7, 0x04, + 0x00, 0x00, 0x4d, 0xc7, 0x04, 0x00, 0x00, 0x39, + 0x9b, 0x00, 0x00, 0x00, 0x42, 0xc8, 0x04, 0x00, + 0x00, 0x4d, 0xc8, 0x04, 0x00, 0x00, 0x39, 0x9b, + 0x00, 0x00, 0x00, 0x42, 0x56, 0x00, 0x00, 0x00, + 0x4d, 0x56, 0x00, 0x00, 0x00, 0xc8, 0xb5, 0x98, + 0xc9, 0xb5, 0xca, 0xc6, 0xbc, 0x09, 0xa6, 0xe9, + 0x23, 0xc4, 0x04, 0xe3, 0x01, 0x00, 0x00, 0xc6, + 0x9f, 0x72, 0x39, 0x9b, 0x00, 0x00, 0x00, 0x04, + 0xe3, 0x01, 0x00, 0x00, 0xc6, 0x9f, 0x48, 0x16, + 0x4a, 0x11, 0xea, 0x03, 0x0e, 0xc5, 0xc9, 0x95, + 0x02, 0xeb, 0xd9, 0xbf, 0x01, 0x28, 0xfc, 0x06, + 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x29, + 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x09, 0x05, 0x05, 0x9a, + 0x02, 0x07, 0xa4, 0x03, 0x00, 0x00, 0x00, 0xa6, + 0x03, 0x00, 0x01, 0x00, 0xa8, 0x03, 0x00, 0x02, + 0x00, 0xaa, 0x03, 0x00, 0x03, 0x00, 0xac, 0x03, + 0x00, 0x04, 0x00, 0xae, 0x03, 0x00, 0x05, 0x00, + 0xb0, 0x03, 0x00, 0x06, 0x00, 0xa0, 0x03, 0x00, + 0x01, 0x9c, 0x07, 0x00, 0x00, 0xa2, 0x03, 0x01, + 0x01, 0x8e, 0x07, 0x01, 0x00, 0x90, 0x07, 0x02, + 0x00, 0xbe, 0x00, 0xbe, 0x01, 0x33, 0xc8, 0xdc, + 0x42, 0xc6, 0x04, 0x00, 0x00, 0x43, 0xc9, 0x04, + 0x00, 0x00, 0xc4, 0x04, 0xca, 0x04, 0x00, 0x00, + 0x24, 0x02, 0x00, 0xc9, 0xdd, 0x11, 0x21, 0x00, + 0x00, 0xca, 0xde, 0x6a, 0x97, 0x00, 0x00, 0x00, + 0xb5, 0xcb, 0xc7, 0xbc, 0x09, 0xa6, 0x6a, 0x8c, + 0x00, 0x00, 0x00, 0xdc, 0x04, 0xe3, 0x01, 0x00, + 0x00, 0xc7, 0x9f, 0x48, 0xc3, 0x04, 0xe9, 0x2f, + 0xc1, 0x04, 0x43, 0xc9, 0x04, 0x00, 0x00, 0xc4, + 0x04, 0xca, 0x04, 0x00, 0x00, 0x24, 0x02, 0x00, + 0xc2, 0x04, 0xc5, 0x43, 0xc9, 0x04, 0x00, 0x00, + 0xc1, 0x04, 0x04, 0xcb, 0x04, 0x00, 0x00, 0xc1, + 0x04, 0x9f, 0x04, 0xcc, 0x04, 0x00, 0x00, 0x9f, + 0x24, 0x02, 0x00, 0xcd, 0xeb, 0x09, 0x04, 0xcd, + 0x04, 0x00, 0x00, 0xc5, 0x9f, 0xcd, 0x0e, 0xdf, + 0x43, 0xa7, 0x03, 0x00, 0x00, 0xc6, 0xc5, 0x43, + 0x23, 0x02, 0x00, 0x00, 0xb4, 0xc5, 0x43, 0x21, + 0x02, 0x00, 0x00, 0x04, 0xcb, 0x04, 0x00, 0x00, + 0x24, 0x01, 0x00, 0xb5, 0x9f, 0x24, 0x02, 0x00, + 0x24, 0x02, 0x00, 0x0e, 0xc5, 0x43, 0x23, 0x02, + 0x00, 0x00, 0xc5, 0x43, 0x21, 0x02, 0x00, 0x00, + 0x04, 0xcb, 0x04, 0x00, 0x00, 0x24, 0x01, 0x00, + 0xb5, 0x9f, 0x24, 0x01, 0x00, 0xc9, 0x95, 0x03, + 0xec, 0x71, 0xff, 0x5f, 0x04, 0x00, 0x43, 0xa7, + 0x03, 0x00, 0x00, 0xc6, 0xc0, 0x24, 0x02, 0x00, + 0xc5, 0x9f, 0xc3, 0x05, 0x43, 0xc9, 0x04, 0x00, + 0x00, 0xbe, 0x02, 0xbe, 0x03, 0x33, 0xbf, 0x04, + 0x24, 0x02, 0x00, 0xc2, 0x05, 0x39, 0x9b, 0x00, + 0x00, 0x00, 0x11, 0xc1, 0x05, 0xdc, 0x42, 0xc8, + 0x04, 0x00, 0x00, 0xe9, 0x08, 0x04, 0xce, 0x04, + 0x00, 0x00, 0xeb, 0x06, 0x04, 0xc1, 0x01, 0x00, + 0x00, 0x21, 0x02, 0x00, 0xc3, 0x06, 0xdc, 0x42, + 0xc7, 0x04, 0x00, 0x00, 0xe8, 0x44, 0x53, 0x00, + 0x00, 0x00, 0xc1, 0x06, 0x43, 0x84, 0x00, 0x00, + 0x00, 0xdc, 0x42, 0x56, 0x00, 0x00, 0x00, 0x24, + 0x01, 0x00, 0x29, 0xfc, 0x06, 0x01, 0x00, 0x07, + 0x26, 0x5b, 0x2e, 0x3f, 0x2a, 0x2b, 0x5e, 0x24, + 0x5b, 0x5c, 0x5d, 0x5c, 0x5c, 0x28, 0x29, 0x7b, + 0x7d, 0x7c, 0x2d, 0x5d, 0x07, 0x64, 0x01, 0x01, + 0x00, 0x2b, 0x00, 0x00, 0x00, 0x08, 0x06, 0x00, + 0x00, 0x00, 0x04, 0x07, 0xf5, 0xff, 0xff, 0xff, + 0x0b, 0x00, 0x15, 0x06, 0x00, 0x24, 0x00, 0x24, + 0x00, 0x28, 0x00, 0x2b, 0x00, 0x2d, 0x00, 0x2e, + 0x00, 0x3f, 0x00, 0x3f, 0x00, 0x5b, 0x00, 0x5e, + 0x00, 0x7b, 0x00, 0x7d, 0x00, 0x0c, 0x00, 0x0a, + 0x07, 0x24, 0x28, 0x5c, 0x5c, 0x5c, 0x28, 0x7c, + 0x5c, 0x5c, 0x5c, 0x29, 0x7c, 0x5b, 0x5e, 0x28, + 0x29, 0x5d, 0x29, 0x2b, 0x07, 0x80, 0x02, 0x01, + 0x02, 0x01, 0x79, 0x00, 0x00, 0x00, 0x08, 0x06, + 0x00, 0x00, 0x00, 0x04, 0x07, 0xf5, 0xff, 0xff, + 0xff, 0x0b, 0x00, 0x0b, 0x01, 0x09, 0x1b, 0x00, + 0x00, 0x00, 0x09, 0x0b, 0x00, 0x00, 0x00, 0x01, + 0x5c, 0x00, 0x01, 0x28, 0x00, 0x07, 0x06, 0x00, + 0x00, 0x00, 0x01, 0x5c, 0x00, 0x01, 0x29, 0x00, + 0x07, 0x0b, 0x00, 0x00, 0x00, 0x15, 0x02, 0x00, + 0x00, 0x00, 0x27, 0x00, 0x2a, 0x00, 0xff, 0xff, + 0x0c, 0x01, 0x09, 0x35, 0x00, 0x00, 0x00, 0x19, + 0x0b, 0x01, 0x09, 0x1b, 0x00, 0x00, 0x00, 0x09, + 0x0b, 0x00, 0x00, 0x00, 0x01, 0x5c, 0x00, 0x01, + 0x28, 0x00, 0x07, 0x06, 0x00, 0x00, 0x00, 0x01, + 0x5c, 0x00, 0x01, 0x29, 0x00, 0x07, 0x0b, 0x00, + 0x00, 0x00, 0x15, 0x02, 0x00, 0x00, 0x00, 0x27, + 0x00, 0x2a, 0x00, 0xff, 0xff, 0x0c, 0x01, 0x1a, + 0xc6, 0xff, 0xff, 0xff, 0x0c, 0x00, 0x0a, 0x0d, + 0x43, 0x06, 0x00, 0x00, 0x01, 0x00, 0x01, 0x05, + 0x00, 0x00, 0x1d, 0x01, 0xa0, 0x03, 0x00, 0x01, + 0x00, 0x04, 0xcf, 0x04, 0x00, 0x00, 0xd0, 0x43, + 0xc9, 0x04, 0x00, 0x00, 0x04, 0xd0, 0x04, 0x00, + 0x00, 0xc0, 0x24, 0x02, 0x00, 0xe8, 0x9f, 0x04, + 0xd1, 0x04, 0x00, 0x00, 0x9f, 0x28, 0xfc, 0x06, + 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0xa0, 0x07, + 0x01, 0x00, 0x01, 0x04, 0x01, 0x00, 0x3c, 0x01, + 0xa0, 0x03, 0x00, 0x01, 0x00, 0xb4, 0x03, 0x08, + 0x01, 0x07, 0xd0, 0xad, 0xe9, 0x10, 0x39, 0xbf, + 0x00, 0x00, 0x00, 0x11, 0x04, 0xd2, 0x04, 0x00, + 0x00, 0x21, 0x01, 0x00, 0x2f, 0x04, 0x48, 0x00, + 0x00, 0x00, 0x06, 0xd0, 0xad, 0xe9, 0x08, 0x04, + 0x44, 0x00, 0x00, 0x00, 0xeb, 0x0b, 0xdc, 0x43, + 0x0b, 0x00, 0x00, 0x00, 0xd0, 0x24, 0x01, 0x00, + 0xad, 0xe9, 0x03, 0xd0, 0x28, 0x39, 0x8d, 0x00, + 0x00, 0x00, 0xd0, 0xee, 0x28, 0xfc, 0x06, 0x01, + 0x00, 0x0d, 0x43, 0x06, 0x00, 0xa2, 0x07, 0x01, + 0x00, 0x01, 0x02, 0x00, 0x00, 0x14, 0x01, 0xa0, + 0x03, 0x00, 0x01, 0x00, 0x04, 0x45, 0x00, 0x00, + 0x00, 0xd0, 0x99, 0xab, 0xe9, 0x03, 0xd0, 0x28, + 0x39, 0x90, 0x00, 0x00, 0x00, 0xd0, 0xee, 0x28, + 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, + 0xa4, 0x07, 0x01, 0x01, 0x01, 0x07, 0x01, 0x01, + 0x46, 0x02, 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, + 0x03, 0x00, 0x00, 0x00, 0xa2, 0x07, 0x1b, 0x01, + 0xbf, 0x00, 0xd0, 0xee, 0xcc, 0xb4, 0xa6, 0xe9, + 0x03, 0xb4, 0x28, 0xc4, 0xb5, 0xb4, 0x9d, 0xad, + 0xe9, 0x14, 0x39, 0x95, 0x00, 0x00, 0x00, 0x43, + 0xd3, 0x04, 0x00, 0x00, 0xb6, 0xbc, 0x35, 0x24, + 0x02, 0x00, 0xb5, 0xa0, 0x28, 0x39, 0x95, 0x00, + 0x00, 0x00, 0x43, 0x37, 0x03, 0x00, 0x00, 0xc4, + 0x39, 0x95, 0x00, 0x00, 0x00, 0x43, 0xd3, 0x04, + 0x00, 0x00, 0xb6, 0xbc, 0x35, 0x24, 0x02, 0x00, + 0xb5, 0xa0, 0x24, 0x02, 0x00, 0x28, 0xfc, 0x06, + 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, 0x01, + 0x01, 0x01, 0x06, 0x01, 0x00, 0x6f, 0x02, 0xa0, + 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, 0x00, 0x00, + 0x00, 0xa2, 0x07, 0x00, 0x00, 0xdc, 0xd0, 0xee, + 0xc8, 0x39, 0xd4, 0x04, 0x00, 0x00, 0xc4, 0xee, + 0xe9, 0x03, 0xb4, 0x28, 0xb4, 0xc4, 0xad, 0x11, + 0xea, 0x18, 0x0e, 0xb4, 0x8e, 0xc4, 0xad, 0x11, + 0xea, 0x10, 0x0e, 0xc4, 0xb5, 0xb4, 0x9d, 0xad, + 0x11, 0xea, 0x07, 0x0e, 0xc4, 0xb3, 0xb4, 0x9d, + 0xad, 0xe9, 0x03, 0xc4, 0x28, 0xc4, 0xb4, 0xa5, + 0xe9, 0x1f, 0xb3, 0x39, 0x95, 0x00, 0x00, 0x00, + 0x43, 0xd5, 0x04, 0x00, 0x00, 0x39, 0x95, 0x00, + 0x00, 0x00, 0x43, 0xd6, 0x04, 0x00, 0x00, 0xc4, + 0x24, 0x01, 0x00, 0x24, 0x01, 0x00, 0x9c, 0x28, + 0x39, 0x95, 0x00, 0x00, 0x00, 0x43, 0xd5, 0x04, + 0x00, 0x00, 0x39, 0x95, 0x00, 0x00, 0x00, 0x43, + 0xd6, 0x04, 0x00, 0x00, 0xc4, 0x24, 0x01, 0x00, + 0x24, 0x01, 0x00, 0x28, 0xfc, 0x06, 0x01, 0x00, + 0x0d, 0x43, 0x06, 0x00, 0xa6, 0x07, 0x01, 0x00, + 0x01, 0x04, 0x03, 0x00, 0x20, 0x01, 0xa0, 0x03, + 0x00, 0x01, 0x00, 0x82, 0x07, 0x0b, 0x01, 0x98, + 0x07, 0x16, 0x01, 0x88, 0x07, 0x0e, 0x01, 0xdc, + 0x43, 0xa7, 0x03, 0x00, 0x00, 0xd0, 0x04, 0xd7, + 0x04, 0x00, 0x00, 0x24, 0x02, 0x00, 0xe9, 0x0c, + 0xd0, 0x43, 0xd7, 0x04, 0x00, 0x00, 0xdd, 0x24, + 0x01, 0x00, 0x28, 0xde, 0x07, 0xee, 0x28, 0xfc, + 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0xba, + 0x07, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x03, + 0x01, 0xa0, 0x03, 0x00, 0x01, 0x00, 0xb8, 0x07, + 0x26, 0x01, 0xd0, 0xe0, 0x29, 0xfc, 0x06, 0x01, + 0x00, 0x0d, 0x43, 0x06, 0x00, 0xbe, 0x07, 0x01, + 0x02, 0x01, 0x05, 0x00, 0x00, 0x50, 0x03, 0xa0, + 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, 0x00, 0x00, + 0x00, 0xa4, 0x03, 0x00, 0x01, 0x00, 0xd0, 0xe8, + 0xc8, 0xc4, 0x92, 0xc8, 0xe9, 0x47, 0xd0, 0x43, + 0xd8, 0x04, 0x00, 0x00, 0xc4, 0x24, 0x01, 0x00, + 0xcd, 0x04, 0xd4, 0x00, 0x00, 0x00, 0xa8, 0x11, + 0xe9, 0x30, 0x0e, 0xc5, 0x04, 0xcd, 0x01, 0x00, + 0x00, 0xa6, 0x11, 0xe9, 0x25, 0x0e, 0xd0, 0x43, + 0x23, 0x02, 0x00, 0x00, 0xb4, 0xc4, 0x24, 0x02, + 0x00, 0xc5, 0x43, 0xd9, 0x04, 0x00, 0x00, 0x24, + 0x00, 0x00, 0x9f, 0xd0, 0x43, 0x23, 0x02, 0x00, + 0x00, 0xc4, 0xb5, 0x9f, 0x24, 0x01, 0x00, 0x9f, + 0xd8, 0x0e, 0xeb, 0xb6, 0xd0, 0x28, 0xfc, 0x06, + 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0xc0, 0x07, + 0x01, 0x00, 0x01, 0x03, 0x03, 0x00, 0x2b, 0x01, + 0xa0, 0x03, 0x00, 0x01, 0x00, 0xb0, 0x07, 0x22, + 0x01, 0xb2, 0x07, 0x23, 0x01, 0xb4, 0x07, 0x24, + 0x01, 0xdc, 0x43, 0xda, 0x04, 0x00, 0x00, 0xd0, + 0x24, 0x01, 0x00, 0x98, 0x98, 0x11, 0xe9, 0x1c, + 0x0e, 0xdd, 0x43, 0xda, 0x04, 0x00, 0x00, 0xd0, + 0x24, 0x01, 0x00, 0x98, 0x11, 0xe9, 0x0d, 0x0e, + 0xde, 0x43, 0xda, 0x04, 0x00, 0x00, 0xd0, 0x24, + 0x01, 0x00, 0x98, 0x28, 0xfc, 0x06, 0x01, 0x00, + 0x0d, 0x43, 0x06, 0x00, 0xc2, 0x07, 0x01, 0x06, + 0x01, 0x07, 0x05, 0x00, 0xbe, 0x03, 0x07, 0xa0, + 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, 0x00, 0x00, + 0x00, 0xa4, 0x03, 0x00, 0x01, 0x00, 0xa6, 0x03, + 0x00, 0x02, 0x00, 0xa8, 0x03, 0x00, 0x03, 0x00, + 0xaa, 0x03, 0x00, 0x04, 0x00, 0xac, 0x03, 0x00, + 0x05, 0x00, 0x90, 0x07, 0x12, 0x01, 0xb6, 0x07, + 0x25, 0x01, 0x82, 0x07, 0x0b, 0x01, 0xbc, 0x07, + 0x28, 0x01, 0x8a, 0x07, 0x0f, 0x01, 0x06, 0xc8, + 0x06, 0xc9, 0xb5, 0xca, 0xd0, 0x43, 0xdb, 0x04, + 0x00, 0x00, 0x24, 0x00, 0x00, 0xd8, 0x43, 0x5b, + 0x00, 0x00, 0x00, 0x04, 0x31, 0x02, 0x00, 0x00, + 0x24, 0x01, 0x00, 0xcd, 0xe8, 0xcb, 0xc6, 0xc7, + 0xa5, 0xe9, 0x60, 0xb6, 0xc5, 0xc6, 0x48, 0xe8, + 0xad, 0xe9, 0x12, 0xc5, 0xc6, 0x72, 0xc5, 0xc6, + 0x48, 0x43, 0xd9, 0x04, 0x00, 0x00, 0x24, 0x00, + 0x00, 0x4a, 0xeb, 0x43, 0xb8, 0xc5, 0xc6, 0x48, + 0xe8, 0xad, 0xe9, 0x28, 0xc5, 0xc6, 0x72, 0xc5, + 0xc6, 0x48, 0x43, 0xd8, 0x04, 0x00, 0x00, 0xb4, + 0x24, 0x01, 0x00, 0x43, 0xd9, 0x04, 0x00, 0x00, + 0x24, 0x00, 0x00, 0xc5, 0xc6, 0x48, 0x43, 0x23, + 0x02, 0x00, 0x00, 0xb5, 0x24, 0x01, 0x00, 0x9f, + 0x4a, 0xeb, 0x14, 0xb5, 0xc5, 0xc6, 0x48, 0xe8, + 0xad, 0xe9, 0x0c, 0x04, 0xca, 0x01, 0x00, 0x00, + 0xc5, 0xc6, 0x48, 0xae, 0xea, 0x05, 0x95, 0x02, + 0xeb, 0x9d, 0xdc, 0x43, 0xa7, 0x03, 0x00, 0x00, + 0xc5, 0x04, 0x31, 0x02, 0x00, 0x00, 0x24, 0x02, + 0x00, 0xd8, 0x43, 0xdc, 0x04, 0x00, 0x00, 0xdd, + 0x24, 0x01, 0x00, 0xcc, 0x11, 0xe9, 0x46, 0x0e, + 0xc4, 0xe8, 0xb5, 0xa7, 0x11, 0xe9, 0x3e, 0x0e, + 0xc4, 0x43, 0xdd, 0x04, 0x00, 0x00, 0x24, 0x00, + 0x00, 0x0e, 0xd0, 0x43, 0xc9, 0x04, 0x00, 0x00, + 0x39, 0x9b, 0x00, 0x00, 0x00, 0x04, 0xde, 0x04, + 0x00, 0x00, 0xdd, 0x42, 0x6a, 0x00, 0x00, 0x00, + 0x9f, 0x04, 0xdf, 0x04, 0x00, 0x00, 0x9f, 0x04, + 0xd5, 0x00, 0x00, 0x00, 0xef, 0xdc, 0x43, 0xa7, + 0x03, 0x00, 0x00, 0xc4, 0xc0, 0x24, 0x02, 0x00, + 0x24, 0x02, 0x00, 0xd8, 0x0e, 0xde, 0x43, 0xa7, + 0x03, 0x00, 0x00, 0xdf, 0x42, 0x85, 0x02, 0x00, + 0x00, 0xd0, 0x24, 0x02, 0x00, 0x11, 0xe9, 0x0b, + 0x0e, 0xdf, 0x42, 0x85, 0x02, 0x00, 0x00, 0xd0, + 0x48, 0xd8, 0x0e, 0xb5, 0xc2, 0x04, 0xd0, 0x43, + 0x5b, 0x00, 0x00, 0x00, 0x04, 0x31, 0x02, 0x00, + 0x00, 0x24, 0x01, 0x00, 0xcd, 0xe8, 0xc2, 0x05, + 0xc1, 0x04, 0xc1, 0x05, 0xa5, 0x6a, 0x8f, 0x00, + 0x00, 0x00, 0xde, 0x43, 0xa7, 0x03, 0x00, 0x00, + 0xdf, 0x42, 0xbd, 0x02, 0x00, 0x00, 0xc5, 0xc1, + 0x04, 0x48, 0x24, 0x02, 0x00, 0xe9, 0x14, 0xc5, + 0xc1, 0x04, 0x72, 0xdf, 0x42, 0xbd, 0x02, 0x00, + 0x00, 0xc5, 0xc1, 0x04, 0x48, 0x48, 0x16, 0x4a, + 0xeb, 0x5e, 0xde, 0x43, 0xa7, 0x03, 0x00, 0x00, + 0xdf, 0x42, 0x85, 0x03, 0x00, 0x00, 0xc5, 0xc1, + 0x04, 0x48, 0x24, 0x02, 0x00, 0x11, 0xe9, 0x48, + 0x0e, 0xc5, 0xc1, 0x04, 0x72, 0xdf, 0x42, 0x85, + 0x03, 0x00, 0x00, 0xc5, 0xc1, 0x04, 0x48, 0x48, + 0xb4, 0x48, 0x4a, 0xb5, 0xc1, 0x04, 0xad, 0x11, + 0xe9, 0x2e, 0x0e, 0xdf, 0x42, 0x85, 0x03, 0x00, + 0x00, 0xc5, 0xb5, 0x48, 0x48, 0xb5, 0x48, 0xc5, + 0xb4, 0x48, 0xad, 0x11, 0xe9, 0x1a, 0x0e, 0x5f, + 0x04, 0x00, 0x43, 0xa7, 0x03, 0x00, 0x00, 0xc5, + 0xc1, 0x04, 0x93, 0xc2, 0x04, 0x24, 0x02, 0x00, + 0xc9, 0xc1, 0x05, 0xb5, 0xa0, 0xc3, 0x05, 0x0e, + 0x95, 0x04, 0xec, 0x6d, 0xff, 0xdc, 0x43, 0xa7, + 0x03, 0x00, 0x00, 0xc5, 0x04, 0x31, 0x02, 0x00, + 0x00, 0x25, 0x02, 0x00, 0xfc, 0x06, 0x01, 0x00, + 0x07, 0x14, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x5d, + 0x7b, 0x33, 0x7d, 0x24, 0x07, 0x64, 0x00, 0x01, + 0x00, 0x2b, 0x00, 0x00, 0x00, 0x08, 0x06, 0x00, + 0x00, 0x00, 0x04, 0x07, 0xf5, 0xff, 0xff, 0xff, + 0x0b, 0x00, 0x05, 0x1c, 0x08, 0x00, 0x00, 0x00, + 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x15, 0x01, 0x00, 0x41, + 0x00, 0x5a, 0x00, 0x0a, 0x06, 0x0c, 0x00, 0x0a, + 0x07, 0x2a, 0x2d, 0x75, 0x28, 0x3f, 0x3a, 0x2d, + 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x7a, 0x5d, + 0x7b, 0x32, 0x2c, 0x38, 0x7d, 0x29, 0x2b, 0x07, + 0x8c, 0x01, 0x03, 0x01, 0x00, 0x3f, 0x00, 0x00, + 0x00, 0x08, 0x06, 0x00, 0x00, 0x00, 0x04, 0x07, + 0xf5, 0xff, 0xff, 0xff, 0x0b, 0x00, 0x01, 0x2d, + 0x00, 0x01, 0x55, 0x00, 0x01, 0x2d, 0x00, 0x1c, + 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x15, 0x03, 0x00, 0x30, 0x00, 0x39, 0x00, 0x41, + 0x00, 0x5a, 0x00, 0x61, 0x00, 0x7a, 0x00, 0x0a, + 0x08, 0xd7, 0xff, 0xff, 0xff, 0x0c, 0x00, 0x0a, + 0x0d, 0x43, 0x06, 0x00, 0xc8, 0x07, 0x01, 0x07, + 0x01, 0x05, 0x08, 0x00, 0xea, 0x01, 0x08, 0xa0, + 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, 0x00, 0x00, + 0x00, 0xa4, 0x03, 0x00, 0x01, 0x00, 0xa6, 0x03, + 0x00, 0x02, 0x00, 0xa8, 0x03, 0x00, 0x03, 0x00, + 0xaa, 0x03, 0x00, 0x04, 0x00, 0xac, 0x03, 0x00, + 0x05, 0x00, 0xae, 0x03, 0x00, 0x06, 0x00, 0x9c, + 0x07, 0x18, 0x01, 0xa0, 0x07, 0x1a, 0x01, 0xa4, + 0x07, 0x1c, 0x01, 0xb4, 0x03, 0x08, 0x01, 0xc0, + 0x07, 0x2a, 0x01, 0xc2, 0x07, 0x2b, 0x01, 0x86, + 0x07, 0x0d, 0x01, 0x8e, 0x07, 0x11, 0x01, 0x06, + 0xd0, 0xad, 0xe9, 0x07, 0xdc, 0x11, 0x21, 0x00, + 0x00, 0x28, 0xdc, 0x11, 0x21, 0x00, 0x00, 0xc8, + 0xdd, 0x04, 0x47, 0x00, 0x00, 0x00, 0xd0, 0x99, + 0xab, 0xe9, 0x07, 0xd0, 0x26, 0x01, 0x00, 0xeb, + 0x02, 0xd0, 0xd8, 0xee, 0xc9, 0xde, 0xc5, 0xe8, + 0xee, 0xca, 0xb4, 0xcb, 0xc7, 0xc6, 0xa5, 0x6a, + 0xb7, 0x00, 0x00, 0x00, 0x39, 0x91, 0x00, 0x00, + 0x00, 0xc7, 0xee, 0xc3, 0x04, 0xc5, 0xaa, 0x6a, + 0xa2, 0x00, 0x00, 0x00, 0xc5, 0xc1, 0x04, 0x48, + 0xc2, 0x05, 0x07, 0xc1, 0x05, 0xad, 0x11, 0xea, + 0x2b, 0x0e, 0x04, 0x47, 0x00, 0x00, 0x00, 0xc1, + 0x05, 0x99, 0xac, 0xe9, 0x30, 0x04, 0x48, 0x00, + 0x00, 0x00, 0x06, 0xc1, 0x05, 0xad, 0xe9, 0x08, + 0x04, 0x44, 0x00, 0x00, 0x00, 0xeb, 0x0c, 0xdf, + 0x43, 0x0b, 0x00, 0x00, 0x00, 0xc1, 0x05, 0x24, + 0x01, 0x00, 0xae, 0xe9, 0x10, 0x39, 0xbf, 0x00, + 0x00, 0x00, 0x11, 0x04, 0xe0, 0x04, 0x00, 0x00, + 0x21, 0x01, 0x00, 0x2f, 0x39, 0x91, 0x00, 0x00, + 0x00, 0xc1, 0x05, 0xee, 0xc2, 0x06, 0x5f, 0x04, + 0x00, 0xc1, 0x06, 0xee, 0x98, 0xe9, 0x19, 0x39, + 0xbc, 0x00, 0x00, 0x00, 0x11, 0x04, 0xe1, 0x04, + 0x00, 0x00, 0xc1, 0x06, 0x9f, 0x04, 0xe2, 0x04, + 0x00, 0x00, 0x9f, 0x21, 0x01, 0x00, 0x2f, 0x5f, + 0x05, 0x00, 0xc1, 0x06, 0xee, 0xc2, 0x06, 0xb3, + 0x5f, 0x06, 0x00, 0x43, 0xa7, 0x03, 0x00, 0x00, + 0xc4, 0xc1, 0x06, 0x24, 0x02, 0x00, 0xad, 0x11, + 0xe9, 0x10, 0x0e, 0x5f, 0x07, 0x00, 0x43, 0xa7, + 0x03, 0x00, 0x00, 0xc4, 0xc1, 0x06, 0x24, 0x02, + 0x00, 0x0e, 0x95, 0x03, 0xec, 0x47, 0xff, 0xc4, + 0x28, 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, + 0x00, 0xca, 0x07, 0x02, 0x02, 0x02, 0x05, 0x01, + 0x00, 0x5b, 0x04, 0xa0, 0x03, 0x00, 0x01, 0x00, + 0xa2, 0x03, 0x00, 0x01, 0x00, 0xa4, 0x03, 0x00, + 0x00, 0x00, 0xa6, 0x03, 0x00, 0x01, 0x00, 0x86, + 0x07, 0x0d, 0x01, 0xd1, 0xc8, 0xc4, 0xe9, 0x56, + 0xdc, 0x43, 0xa7, 0x03, 0x00, 0x00, 0xd0, 0xc4, + 0x24, 0x02, 0x00, 0xb3, 0xa7, 0xe9, 0x03, 0xc4, + 0x28, 0xc4, 0x43, 0xe3, 0x04, 0x00, 0x00, 0x04, + 0x31, 0x02, 0x00, 0x00, 0x24, 0x01, 0x00, 0xcd, + 0xb4, 0xa5, 0xe9, 0x02, 0x29, 0xc5, 0xb6, 0xa8, + 0x11, 0xe9, 0x1c, 0x0e, 0x04, 0x31, 0x02, 0x00, + 0x00, 0xc4, 0x43, 0xd8, 0x04, 0x00, 0x00, 0xc5, + 0xb6, 0xa0, 0x24, 0x01, 0x00, 0xad, 0x11, 0xe9, + 0x06, 0x0e, 0xc5, 0xb6, 0xa0, 0xcd, 0x0e, 0xc4, + 0x43, 0xe4, 0x04, 0x00, 0x00, 0xb4, 0xc5, 0x24, + 0x02, 0x00, 0xc8, 0xeb, 0xa9, 0x29, 0xfc, 0x06, + 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0xcc, 0x07, + 0x02, 0x08, 0x02, 0x06, 0x04, 0x00, 0x9b, 0x01, + 0x0a, 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, + 0x00, 0x01, 0x00, 0xa4, 0x03, 0x00, 0x00, 0x00, + 0xa6, 0x03, 0x00, 0x01, 0x00, 0xa8, 0x03, 0x00, + 0x02, 0x00, 0xaa, 0x03, 0x00, 0x03, 0x00, 0xac, + 0x03, 0x00, 0x04, 0x00, 0xae, 0x03, 0x00, 0x05, + 0x00, 0xb0, 0x03, 0x00, 0x06, 0x00, 0xb2, 0x03, + 0x00, 0x07, 0x00, 0xca, 0x07, 0x2f, 0x01, 0xc6, + 0x07, 0x2d, 0x01, 0x9a, 0x07, 0x17, 0x01, 0xb8, + 0x07, 0x26, 0x01, 0xb4, 0xc8, 0xd1, 0xe8, 0xc9, + 0x06, 0xca, 0x06, 0xcb, 0x06, 0xc2, 0x04, 0xc4, + 0xc5, 0xa5, 0xe9, 0x24, 0xc6, 0x98, 0xe9, 0x20, + 0xd1, 0xc4, 0x48, 0xcb, 0xdc, 0xd0, 0x39, 0x91, + 0x00, 0x00, 0x00, 0xc7, 0xee, 0x43, 0xc9, 0x04, + 0x00, 0x00, 0xdd, 0xc0, 0x24, 0x02, 0x00, 0xc3, + 0x04, 0xef, 0xca, 0x95, 0x00, 0xeb, 0xd9, 0xde, + 0x11, 0x21, 0x00, 0x00, 0xc2, 0x05, 0x06, 0xc6, + 0xae, 0xe9, 0x50, 0xc1, 0x05, 0x04, 0xe5, 0x04, + 0x00, 0x00, 0xc6, 0x4a, 0x39, 0x91, 0x00, 0x00, + 0x00, 0xc7, 0xee, 0x39, 0x91, 0x00, 0x00, 0x00, + 0xc1, 0x04, 0xee, 0xae, 0xe9, 0x3e, 0xc7, 0x43, + 0xdc, 0x04, 0x00, 0x00, 0xdd, 0x24, 0x01, 0x00, + 0xb4, 0x48, 0xc2, 0x06, 0xc7, 0x43, 0x21, 0x02, + 0x00, 0x00, 0x04, 0xe6, 0x04, 0x00, 0x00, 0x24, + 0x01, 0x00, 0xc2, 0x07, 0xc1, 0x05, 0x04, 0xe7, + 0x04, 0x00, 0x00, 0xc1, 0x06, 0x4a, 0xc1, 0x05, + 0x04, 0xe8, 0x04, 0x00, 0x00, 0xc1, 0x07, 0x4a, + 0xeb, 0x0a, 0xc1, 0x05, 0x04, 0xe5, 0x04, 0x00, + 0x00, 0xdf, 0x4a, 0xc1, 0x05, 0x28, 0xfc, 0x06, + 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0xce, 0x07, + 0x06, 0x14, 0x06, 0x05, 0x06, 0x01, 0xc8, 0x04, + 0x1a, 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, + 0x00, 0x01, 0x00, 0xa4, 0x03, 0x00, 0x01, 0x00, + 0xa6, 0x03, 0x00, 0x01, 0x00, 0xa8, 0x03, 0x00, + 0x01, 0x00, 0xaa, 0x03, 0x00, 0x01, 0x00, 0xac, + 0x03, 0x00, 0x00, 0x00, 0xae, 0x03, 0x00, 0x01, + 0x00, 0xb0, 0x03, 0x00, 0x02, 0x00, 0xb2, 0x03, + 0x00, 0x03, 0x00, 0xb4, 0x03, 0x00, 0x04, 0x00, + 0xfe, 0x06, 0x00, 0x05, 0x00, 0x80, 0x07, 0x00, + 0x06, 0x00, 0x84, 0x07, 0x00, 0x07, 0x00, 0x88, + 0x07, 0x00, 0x08, 0x00, 0x8a, 0x07, 0x00, 0x09, + 0x00, 0x8c, 0x07, 0x00, 0x0a, 0x00, 0x8e, 0x07, + 0x00, 0x0b, 0x00, 0x90, 0x07, 0x00, 0x0c, 0x00, + 0x92, 0x07, 0x00, 0x0d, 0x00, 0x94, 0x07, 0x00, + 0x0e, 0x00, 0x98, 0x07, 0x00, 0x0f, 0x00, 0x9c, + 0x07, 0x00, 0x10, 0x00, 0x9e, 0x07, 0x00, 0x11, + 0x00, 0xa0, 0x07, 0x00, 0x12, 0x00, 0xa2, 0x07, + 0x00, 0x13, 0x00, 0xcc, 0x07, 0x30, 0x01, 0x96, + 0x07, 0x15, 0x01, 0x82, 0x07, 0x0b, 0x01, 0x9a, + 0x07, 0x17, 0x01, 0x86, 0x07, 0x0d, 0x01, 0xc2, + 0x07, 0x2b, 0x01, 0xb4, 0xd0, 0xe8, 0xad, 0xe9, + 0x10, 0x39, 0xbd, 0x00, 0x00, 0x00, 0x11, 0x04, + 0xe9, 0x04, 0x00, 0x00, 0x21, 0x01, 0x00, 0x2f, + 0x06, 0xc8, 0x04, 0xea, 0x04, 0x00, 0x00, 0xd2, + 0x04, 0xeb, 0x04, 0x00, 0x00, 0x48, 0xad, 0xe9, + 0x07, 0xdc, 0xd0, 0xd1, 0xef, 0xeb, 0x06, 0xbf, + 0x00, 0xd0, 0xd1, 0xef, 0xcc, 0x04, 0xe5, 0x04, + 0x00, 0x00, 0x48, 0xc9, 0xdd, 0x42, 0xa1, 0x03, + 0x00, 0x00, 0x04, 0xa5, 0x03, 0x00, 0x00, 0x48, + 0x43, 0x20, 0x02, 0x00, 0x00, 0xc5, 0x24, 0x01, + 0x00, 0x11, 0xea, 0x15, 0x0e, 0x39, 0xec, 0x04, + 0x00, 0x00, 0x43, 0xed, 0x04, 0x00, 0x00, 0x04, + 0xee, 0x04, 0x00, 0x00, 0xc5, 0x24, 0x02, 0x00, + 0x0e, 0x5c, 0x05, 0x00, 0xe9, 0x0f, 0xdd, 0x42, + 0xa1, 0x03, 0x00, 0x00, 0x04, 0xa5, 0x03, 0x00, + 0x00, 0x48, 0xeb, 0x0d, 0xdd, 0x42, 0xad, 0x04, + 0x00, 0x00, 0x04, 0xa5, 0x03, 0x00, 0x00, 0x48, + 0x5d, 0x04, 0x00, 0x06, 0xca, 0x06, 0xcb, 0xde, + 0x43, 0xa7, 0x03, 0x00, 0x00, 0xc4, 0x04, 0xe7, + 0x04, 0x00, 0x00, 0x24, 0x02, 0x00, 0xe9, 0x2b, + 0xc4, 0x04, 0xe7, 0x04, 0x00, 0x00, 0x48, 0xc2, + 0x04, 0x39, 0x91, 0x00, 0x00, 0x00, 0x42, 0x3a, + 0x00, 0x00, 0x00, 0x42, 0x5b, 0x00, 0x00, 0x00, + 0x43, 0xa7, 0x03, 0x00, 0x00, 0xc1, 0x04, 0x04, + 0x31, 0x02, 0x00, 0x00, 0x24, 0x02, 0x00, 0xce, + 0xe8, 0xcb, 0xdf, 0x11, 0x21, 0x00, 0x00, 0xc3, + 0x05, 0x04, 0xef, 0x04, 0x00, 0x00, 0xc5, 0x4a, + 0x04, 0xf0, 0x04, 0x00, 0x00, 0xc2, 0x06, 0xb4, + 0xc2, 0x07, 0xd3, 0xe8, 0xc2, 0x08, 0xc1, 0x07, + 0xc1, 0x08, 0xa5, 0x6a, 0x06, 0x01, 0x00, 0x00, + 0xd3, 0xc1, 0x07, 0x48, 0xc2, 0x09, 0x5c, 0x04, + 0x00, 0xc5, 0x48, 0xc1, 0x09, 0x48, 0xc3, 0x0a, + 0xb4, 0x48, 0xc2, 0x0b, 0xc0, 0xc2, 0x0c, 0x5f, + 0x04, 0x00, 0xc2, 0x0d, 0x06, 0xc6, 0xae, 0xe9, + 0x75, 0xc1, 0x0d, 0x43, 0xa7, 0x03, 0x00, 0x00, + 0xc6, 0xc1, 0x09, 0x24, 0x02, 0x00, 0xc2, 0x0e, + 0xb3, 0xc1, 0x0e, 0xae, 0xe9, 0x60, 0xc1, 0x0e, + 0xb5, 0x9f, 0xc7, 0xa5, 0xe9, 0x40, 0xc6, 0xc1, + 0x0e, 0xb5, 0x9f, 0x48, 0xe8, 0xb6, 0xa7, 0xe9, + 0x35, 0xc6, 0xc1, 0x0e, 0xb5, 0x9f, 0x48, 0xc2, + 0x0f, 0xb3, 0xc1, 0x0d, 0x43, 0xa7, 0x03, 0x00, + 0x00, 0xc1, 0x0a, 0xc1, 0x0f, 0x24, 0x02, 0x00, + 0xae, 0x11, 0xe9, 0x17, 0x0e, 0x04, 0x31, 0x02, + 0x00, 0x00, 0xc1, 0x09, 0x9f, 0x04, 0x31, 0x02, + 0x00, 0x00, 0x9f, 0xc1, 0x0f, 0xc3, 0x0b, 0x9f, + 0xc3, 0x0c, 0x0e, 0xeb, 0x19, 0xb3, 0xc1, 0x0d, + 0xc1, 0x0a, 0x04, 0x03, 0x00, 0x00, 0x00, 0xef, + 0xae, 0x11, 0xe9, 0x09, 0x0e, 0x04, 0x03, 0x00, + 0x00, 0x00, 0xc3, 0x0b, 0x0e, 0xde, 0x43, 0xa7, + 0x03, 0x00, 0x00, 0xd2, 0x04, 0xf1, 0x04, 0x00, + 0x00, 0xc1, 0x09, 0x9f, 0x04, 0xf2, 0x04, 0x00, + 0x00, 0x9f, 0x24, 0x02, 0x00, 0xe9, 0x38, 0xd2, + 0x04, 0xf1, 0x04, 0x00, 0x00, 0xc1, 0x09, 0x9f, + 0x04, 0xf2, 0x04, 0x00, 0x00, 0x9f, 0x48, 0xc2, + 0x10, 0xb3, 0xc1, 0x0d, 0x43, 0xa7, 0x03, 0x00, + 0x00, 0xc1, 0x0a, 0xc1, 0x10, 0x24, 0x02, 0x00, + 0xae, 0x11, 0xe9, 0x12, 0x0e, 0xc1, 0x10, 0xc1, + 0x0b, 0xae, 0x11, 0xe9, 0x09, 0x0e, 0xc1, 0x10, + 0xc2, 0x0b, 0xc0, 0xc3, 0x0c, 0x0e, 0xc1, 0x05, + 0x04, 0xf1, 0x04, 0x00, 0x00, 0xc1, 0x09, 0x9f, + 0x04, 0xf2, 0x04, 0x00, 0x00, 0x9f, 0xc1, 0x0b, + 0x4a, 0xc1, 0x0c, 0x96, 0x06, 0x95, 0x07, 0xec, + 0xf6, 0xfe, 0xc1, 0x06, 0xe8, 0xb6, 0xa7, 0xe9, + 0x47, 0xc5, 0x43, 0x21, 0x02, 0x00, 0x00, 0x04, + 0xf3, 0x04, 0x00, 0x00, 0x24, 0x01, 0x00, 0xc2, + 0x11, 0xb3, 0xc1, 0x11, 0xad, 0xe9, 0x07, 0xc1, + 0x06, 0x96, 0x01, 0xeb, 0x25, 0xc5, 0x43, 0xe4, + 0x04, 0x00, 0x00, 0xb4, 0xc1, 0x11, 0x24, 0x02, + 0x00, 0xc2, 0x12, 0xc5, 0x43, 0xe4, 0x04, 0x00, + 0x00, 0xc1, 0x11, 0x24, 0x01, 0x00, 0xc2, 0x13, + 0xc1, 0x12, 0xc1, 0x06, 0x9f, 0xc1, 0x13, 0x9f, + 0xc9, 0x5f, 0x05, 0x00, 0xc5, 0xee, 0xc9, 0xc1, + 0x05, 0x04, 0xe5, 0x04, 0x00, 0x00, 0xc5, 0x4a, + 0xc1, 0x05, 0x28, 0xfc, 0x06, 0x01, 0x00, 0x0d, + 0x43, 0x06, 0x00, 0x00, 0x02, 0x00, 0x02, 0x03, + 0x01, 0x00, 0x06, 0x02, 0xa0, 0x03, 0x00, 0x01, + 0x00, 0xa2, 0x03, 0x00, 0x01, 0x00, 0xcc, 0x07, + 0x00, 0x00, 0xdc, 0xd0, 0xd1, 0x23, 0x02, 0x00, + 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, + 0xd0, 0x07, 0x02, 0x04, 0x02, 0x07, 0x05, 0x00, + 0x4a, 0x06, 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, + 0x03, 0x00, 0x01, 0x00, 0xa4, 0x03, 0x00, 0x00, + 0x00, 0xa6, 0x03, 0x00, 0x01, 0x00, 0xa8, 0x03, + 0x00, 0x02, 0x00, 0xaa, 0x03, 0x00, 0x03, 0x00, + 0x9c, 0x07, 0x18, 0x01, 0xca, 0x07, 0x2f, 0x01, + 0xc6, 0x07, 0x2d, 0x01, 0x8e, 0x07, 0x11, 0x01, + 0x8a, 0x07, 0x0f, 0x01, 0xd1, 0xe8, 0xc8, 0xdc, + 0x11, 0x21, 0x00, 0x00, 0xc9, 0xb4, 0xca, 0xc6, + 0xc4, 0xa5, 0xe9, 0x2f, 0xd1, 0xc6, 0x48, 0xcb, + 0x06, 0xdd, 0xd0, 0x39, 0x91, 0x00, 0x00, 0x00, + 0xc7, 0xee, 0x43, 0xc9, 0x04, 0x00, 0x00, 0xde, + 0xc0, 0x24, 0x02, 0x00, 0xef, 0xae, 0x11, 0xe9, + 0x0d, 0x0e, 0xdf, 0x43, 0xa7, 0x03, 0x00, 0x00, + 0xc5, 0xc7, 0x24, 0x02, 0x00, 0x0e, 0x95, 0x02, + 0xeb, 0xce, 0x5f, 0x04, 0x00, 0x43, 0xa7, 0x03, + 0x00, 0x00, 0xc5, 0x25, 0x01, 0x00, 0xfc, 0x06, + 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0xd2, 0x07, + 0x03, 0x03, 0x03, 0x07, 0x05, 0x01, 0xab, 0x01, + 0x06, 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, + 0x00, 0x01, 0x00, 0xa4, 0x03, 0x00, 0x01, 0x00, + 0xa6, 0x03, 0x00, 0x00, 0x00, 0xa8, 0x03, 0x00, + 0x01, 0x00, 0xaa, 0x03, 0x00, 0x02, 0x00, 0xd0, + 0x07, 0x32, 0x01, 0x9a, 0x07, 0x17, 0x01, 0xa0, + 0x07, 0x1a, 0x01, 0x82, 0x07, 0x0b, 0x01, 0x84, + 0x07, 0x0c, 0x01, 0x06, 0xc8, 0x06, 0xc9, 0x06, + 0xd2, 0xae, 0xe9, 0x3c, 0x06, 0xdd, 0x11, 0xde, + 0xd2, 0xee, 0x21, 0x01, 0x00, 0xda, 0x42, 0xf4, + 0x04, 0x00, 0x00, 0xcc, 0xae, 0xe9, 0x29, 0x04, + 0xea, 0x04, 0x00, 0x00, 0x39, 0x91, 0x00, 0x00, + 0x00, 0xc4, 0xee, 0xcc, 0xae, 0xe9, 0x19, 0x04, + 0xf5, 0x04, 0x00, 0x00, 0xc4, 0xae, 0xe9, 0x10, + 0x39, 0xbc, 0x00, 0x00, 0x00, 0x11, 0x04, 0xf6, + 0x04, 0x00, 0x00, 0x21, 0x01, 0x00, 0x2f, 0x06, + 0xc4, 0xad, 0x11, 0xea, 0x09, 0x0e, 0x04, 0xf5, + 0x04, 0x00, 0x00, 0xc4, 0xad, 0xe9, 0x08, 0xbf, + 0x00, 0xd0, 0xd1, 0xef, 0xeb, 0x05, 0xdc, 0xd0, + 0xd1, 0xef, 0xcd, 0x7d, 0xeb, 0x2f, 0xca, 0xdf, + 0x43, 0xa7, 0x03, 0x00, 0x00, 0xc5, 0xc6, 0x24, + 0x02, 0x00, 0x11, 0xe9, 0x1f, 0x0e, 0x5f, 0x04, + 0x00, 0xc5, 0xc6, 0x0b, 0xb5, 0x98, 0x4d, 0x3d, + 0x00, 0x00, 0x00, 0xb5, 0x98, 0x4d, 0x3c, 0x00, + 0x00, 0x00, 0xc5, 0xc6, 0x48, 0x4d, 0x3f, 0x00, + 0x00, 0x00, 0xf0, 0x0e, 0x80, 0xe9, 0xd0, 0x0e, + 0x0e, 0x5f, 0x04, 0x00, 0xc5, 0x04, 0x30, 0x00, + 0x00, 0x00, 0x0b, 0xb5, 0x98, 0x4d, 0x3d, 0x00, + 0x00, 0x00, 0xf0, 0x0e, 0xc5, 0x28, 0xfc, 0x06, + 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, 0x02, + 0x00, 0x02, 0x03, 0x01, 0x00, 0x06, 0x02, 0xa0, + 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, 0x00, 0x01, + 0x00, 0xd0, 0x07, 0x00, 0x00, 0xdc, 0xd0, 0xd1, + 0x23, 0x02, 0x00, 0xfc, 0x06, 0x01, 0x00, 0x0d, + 0x43, 0x06, 0x00, 0xa2, 0x05, 0x05, 0x01, 0x05, + 0x05, 0x01, 0x00, 0x68, 0x06, 0xa0, 0x03, 0x00, + 0x01, 0x00, 0xa2, 0x03, 0x00, 0x01, 0x00, 0xa4, + 0x03, 0x00, 0x01, 0x00, 0xa6, 0x03, 0x00, 0x01, + 0x00, 0xa8, 0x03, 0x00, 0x01, 0x00, 0xaa, 0x03, + 0x00, 0x00, 0x00, 0x86, 0x07, 0x0d, 0x01, 0xd0, + 0xd1, 0x48, 0xc8, 0x06, 0xc4, 0xae, 0xe9, 0x5c, + 0x04, 0x46, 0x00, 0x00, 0x00, 0xd2, 0xad, 0xe9, + 0x0a, 0x39, 0x92, 0x00, 0x00, 0x00, 0xc4, 0xee, + 0xeb, 0x14, 0x04, 0x47, 0x00, 0x00, 0x00, 0xd2, + 0xad, 0xe9, 0x0a, 0x39, 0x91, 0x00, 0x00, 0x00, + 0xc4, 0xee, 0xeb, 0x02, 0xc4, 0xc8, 0x06, 0xd3, + 0xae, 0xe9, 0x2f, 0xb3, 0xdc, 0x43, 0xa7, 0x03, + 0x00, 0x00, 0xd3, 0xc4, 0x24, 0x02, 0x00, 0xad, + 0xe9, 0x20, 0x39, 0xbc, 0x00, 0x00, 0x00, 0x11, + 0x04, 0xe1, 0x04, 0x00, 0x00, 0xc4, 0x9f, 0x04, + 0xf7, 0x04, 0x00, 0x00, 0x9f, 0xd1, 0x9f, 0x04, + 0xf8, 0x04, 0x00, 0x00, 0x9f, 0x21, 0x01, 0x00, + 0x2f, 0xc4, 0x28, 0x5c, 0x04, 0x00, 0x28, 0xfc, + 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0xd4, + 0x07, 0x05, 0x01, 0x05, 0x03, 0x00, 0x00, 0x49, + 0x06, 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, + 0x00, 0x01, 0x00, 0xa4, 0x03, 0x00, 0x01, 0x00, + 0xa6, 0x03, 0x00, 0x01, 0x00, 0xa8, 0x03, 0x00, + 0x01, 0x00, 0xaa, 0x03, 0x00, 0x00, 0x00, 0xd0, + 0xd1, 0x48, 0xc8, 0x06, 0xc4, 0xae, 0xe9, 0x3d, + 0x39, 0x90, 0x00, 0x00, 0x00, 0xc4, 0xee, 0xc8, + 0x39, 0xd4, 0x04, 0x00, 0x00, 0xc4, 0xee, 0x11, + 0xea, 0x0c, 0x0e, 0xc4, 0xd2, 0xa5, 0x11, 0xea, + 0x05, 0x0e, 0xc4, 0xd3, 0xa7, 0xe9, 0x10, 0x39, + 0xbc, 0x00, 0x00, 0x00, 0x11, 0x04, 0xf9, 0x04, + 0x00, 0x00, 0x21, 0x01, 0x00, 0x2f, 0x39, 0x95, + 0x00, 0x00, 0x00, 0x43, 0xd5, 0x04, 0x00, 0x00, + 0xc4, 0x25, 0x01, 0x00, 0x5c, 0x04, 0x00, 0x28, + 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, + 0x00, 0x01, 0x04, 0x01, 0x04, 0x01, 0x00, 0x1f, + 0x05, 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, + 0x00, 0x00, 0x00, 0xa4, 0x03, 0x00, 0x01, 0x00, + 0xa6, 0x03, 0x00, 0x02, 0x00, 0xa8, 0x03, 0x00, + 0x03, 0x00, 0xc8, 0x07, 0x2e, 0x01, 0xdc, 0xd0, + 0xee, 0xc8, 0x26, 0x00, 0x00, 0xc9, 0xc4, 0xe8, + 0xca, 0xb4, 0xcb, 0xc7, 0xc6, 0xa5, 0xe9, 0x0c, + 0xc5, 0xc7, 0x72, 0xc4, 0xc7, 0x48, 0x4a, 0x95, + 0x03, 0xeb, 0xf1, 0xc5, 0x28, 0xfc, 0x06, 0x01, + 0x00, 0x0d, 0x43, 0x06, 0x00, 0xd6, 0x07, 0x00, + 0x04, 0x00, 0x04, 0x03, 0x00, 0x2a, 0x04, 0xa0, + 0x03, 0x00, 0x00, 0x00, 0xa2, 0x03, 0x00, 0x01, + 0x00, 0x98, 0x01, 0x00, 0x01, 0x00, 0x10, 0x00, + 0x01, 0x00, 0xd2, 0x04, 0x36, 0x01, 0xd8, 0x07, + 0x39, 0x01, 0xa0, 0x07, 0x1a, 0x01, 0x08, 0xcb, + 0x0c, 0x01, 0xca, 0xc6, 0xb4, 0x48, 0xc8, 0xc6, + 0xb5, 0x48, 0xc9, 0xc7, 0xe9, 0x0e, 0xc7, 0xdc, + 0xae, 0xe9, 0x09, 0xdd, 0xde, 0xc7, 0xee, 0xc4, + 0xc5, 0xf0, 0x28, 0xdc, 0x42, 0xa1, 0x03, 0x00, + 0x00, 0x11, 0xc4, 0xc5, 0x21, 0x02, 0x00, 0x28, + 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, + 0xd8, 0x07, 0x03, 0x14, 0x03, 0x09, 0x11, 0x02, + 0x9f, 0x07, 0x17, 0xa0, 0x03, 0x00, 0x01, 0x00, + 0xa2, 0x03, 0x00, 0x01, 0x00, 0xa4, 0x03, 0x00, + 0x01, 0x00, 0xa6, 0x03, 0x00, 0x00, 0x80, 0xa8, + 0x03, 0x00, 0x01, 0x00, 0xaa, 0x03, 0x00, 0x02, + 0x00, 0xac, 0x03, 0x00, 0x03, 0x00, 0xae, 0x03, + 0x00, 0x04, 0x00, 0xb0, 0x03, 0x00, 0x05, 0x00, + 0xb2, 0x03, 0x00, 0x06, 0x00, 0xb4, 0x03, 0x00, + 0x07, 0x00, 0xfe, 0x06, 0x00, 0x08, 0x00, 0x82, + 0x07, 0x00, 0x09, 0x00, 0x86, 0x07, 0x00, 0x0a, + 0x00, 0x88, 0x07, 0x00, 0x0b, 0x00, 0x8a, 0x07, + 0x00, 0x0c, 0x00, 0x8c, 0x07, 0x00, 0x0d, 0x00, + 0x8e, 0x07, 0x00, 0x0e, 0x00, 0x90, 0x07, 0x00, + 0x0f, 0x00, 0x92, 0x07, 0x00, 0x10, 0x00, 0x94, + 0x07, 0x00, 0x11, 0x00, 0xa2, 0x07, 0x00, 0x12, + 0x00, 0xa4, 0x07, 0x00, 0x13, 0x00, 0x98, 0x07, + 0x16, 0x01, 0x94, 0x04, 0x37, 0x01, 0xa6, 0x07, + 0x1d, 0x01, 0x9e, 0x07, 0x19, 0x01, 0x84, 0x07, + 0x0c, 0x01, 0xc8, 0x07, 0x2e, 0x01, 0xa0, 0x07, + 0x1a, 0x01, 0x9a, 0x07, 0x17, 0x01, 0xa2, 0x05, + 0x34, 0x01, 0x9c, 0x07, 0x18, 0x01, 0x96, 0x07, + 0x15, 0x01, 0xce, 0x07, 0x31, 0x01, 0xbe, 0x07, + 0x29, 0x01, 0xc4, 0x07, 0x2c, 0x01, 0xd4, 0x07, + 0x35, 0x01, 0x80, 0x07, 0x0a, 0x01, 0xda, 0x07, + 0x3a, 0x01, 0xde, 0xd0, 0xee, 0xc8, 0xdf, 0xed, + 0xc9, 0xb4, 0x98, 0xc4, 0x04, 0xfa, 0x04, 0x00, + 0x00, 0x48, 0xad, 0xe9, 0x10, 0x39, 0xbf, 0x00, + 0x00, 0x00, 0x11, 0x04, 0xfb, 0x04, 0x00, 0x00, + 0x21, 0x01, 0x00, 0x2f, 0x5f, 0x04, 0x00, 0xd0, + 0x04, 0xd7, 0x04, 0x00, 0x00, 0x0b, 0xbf, 0x00, + 0x4e, 0x3f, 0x00, 0x00, 0x00, 0x4d, 0x3f, 0x00, + 0x00, 0x00, 0xf0, 0x0e, 0xc4, 0x04, 0xfa, 0x04, + 0x00, 0x00, 0x72, 0xb4, 0x98, 0x4a, 0x5f, 0x05, + 0x00, 0xd1, 0xee, 0xca, 0x06, 0xd2, 0xad, 0xe9, + 0x04, 0x0b, 0xeb, 0x06, 0x5f, 0x06, 0x00, 0xd2, + 0xee, 0xd6, 0x5f, 0x07, 0x00, 0x11, 0x21, 0x00, + 0x00, 0xcb, 0x5f, 0x08, 0x00, 0xd2, 0x04, 0xf4, + 0x04, 0x00, 0x00, 0x04, 0x47, 0x00, 0x00, 0x00, + 0x5f, 0x09, 0x00, 0x11, 0x04, 0xea, 0x04, 0x00, + 0x00, 0x04, 0xf5, 0x04, 0x00, 0x00, 0x21, 0x02, + 0x00, 0x04, 0xf5, 0x04, 0x00, 0x00, 0x22, 0x05, + 0x00, 0xc2, 0x04, 0xc7, 0x04, 0xeb, 0x04, 0x00, + 0x00, 0xc1, 0x04, 0x4a, 0x5f, 0x0a, 0x00, 0x42, + 0xa1, 0x03, 0x00, 0x00, 0x04, 0xa5, 0x03, 0x00, + 0x00, 0x48, 0xc2, 0x05, 0x5f, 0x0b, 0x00, 0x5f, + 0x0a, 0x00, 0x42, 0xa1, 0x03, 0x00, 0x00, 0x04, + 0xa2, 0x03, 0x00, 0x00, 0x48, 0xc6, 0xc7, 0x5f, + 0x0a, 0x00, 0x42, 0xa1, 0x03, 0x00, 0x00, 0x04, + 0xa4, 0x03, 0x00, 0x00, 0x48, 0xc1, 0x05, 0xb4, + 0x98, 0x22, 0x06, 0x00, 0xc2, 0x06, 0xc4, 0x04, + 0xe5, 0x04, 0x00, 0x00, 0x72, 0xc1, 0x06, 0x04, + 0xe5, 0x04, 0x00, 0x00, 0x48, 0x4a, 0xc4, 0x04, + 0xfc, 0x04, 0x00, 0x00, 0x72, 0xc1, 0x06, 0x04, + 0xfd, 0x04, 0x00, 0x00, 0x48, 0x4a, 0xc4, 0x04, + 0xef, 0x04, 0x00, 0x00, 0x72, 0xc1, 0x06, 0x04, + 0xef, 0x04, 0x00, 0x00, 0x48, 0x4a, 0xc1, 0x06, + 0x04, 0xef, 0x04, 0x00, 0x00, 0x48, 0xc2, 0x07, + 0x5f, 0x08, 0x00, 0xd2, 0x04, 0xfe, 0x04, 0x00, + 0x00, 0x04, 0x47, 0x00, 0x00, 0x00, 0x5f, 0x09, + 0x00, 0x11, 0x04, 0xff, 0x04, 0x00, 0x00, 0x04, + 0x00, 0x05, 0x00, 0x00, 0x04, 0x01, 0x05, 0x00, + 0x00, 0x21, 0x03, 0x00, 0x04, 0xff, 0x04, 0x00, + 0x00, 0x22, 0x05, 0x00, 0xc2, 0x08, 0xc4, 0x04, + 0x02, 0x05, 0x00, 0x00, 0xc1, 0x08, 0x4a, 0x5f, + 0x08, 0x00, 0xd2, 0x04, 0x01, 0x05, 0x00, 0x00, + 0x04, 0x47, 0x00, 0x00, 0x00, 0xf0, 0xc2, 0x0a, + 0x06, 0xc1, 0x0a, 0xae, 0xe9, 0x39, 0x5f, 0x0c, + 0x00, 0x39, 0x91, 0x00, 0x00, 0x00, 0xc1, 0x0a, + 0xee, 0xee, 0xc2, 0x09, 0xb5, 0x98, 0x5f, 0x0d, + 0x00, 0x43, 0xda, 0x04, 0x00, 0x00, 0xc1, 0x09, + 0x24, 0x01, 0x00, 0xad, 0xe9, 0x19, 0x39, 0xbc, + 0x00, 0x00, 0x00, 0x11, 0x04, 0xe1, 0x04, 0x00, + 0x00, 0xc1, 0x0a, 0x9f, 0x04, 0x03, 0x05, 0x00, + 0x00, 0x9f, 0x21, 0x01, 0x00, 0x2f, 0x04, 0x01, + 0x05, 0x00, 0x00, 0xc1, 0x08, 0xad, 0xe9, 0x16, + 0x06, 0xc1, 0x0a, 0xad, 0xe9, 0x10, 0x39, 0xbf, + 0x00, 0x00, 0x00, 0x11, 0x04, 0x04, 0x05, 0x00, + 0x00, 0x21, 0x01, 0x00, 0x2f, 0x06, 0xc2, 0x0b, + 0x04, 0x01, 0x05, 0x00, 0x00, 0xc1, 0x08, 0xad, + 0x11, 0xe9, 0x1e, 0x0e, 0xc1, 0x0a, 0x43, 0xd9, + 0x04, 0x00, 0x00, 0x24, 0x00, 0x00, 0xc2, 0x0a, + 0xc4, 0x04, 0x05, 0x05, 0x00, 0x00, 0xc1, 0x0a, + 0x4a, 0xbf, 0x01, 0xc1, 0x0a, 0xee, 0xc3, 0x0b, + 0x0e, 0x5f, 0x08, 0x00, 0xd2, 0x04, 0x06, 0x05, + 0x00, 0x00, 0x04, 0x47, 0x00, 0x00, 0x00, 0x5f, + 0x09, 0x00, 0x11, 0x04, 0x07, 0x05, 0x00, 0x00, + 0x04, 0x49, 0x00, 0x00, 0x00, 0x04, 0x35, 0x00, + 0x00, 0x00, 0x21, 0x03, 0x00, 0x04, 0x49, 0x00, + 0x00, 0x00, 0x22, 0x05, 0x00, 0xc2, 0x0c, 0x04, + 0x01, 0x05, 0x00, 0x00, 0xc1, 0x08, 0xad, 0x11, + 0xe9, 0x0d, 0x0e, 0xc4, 0x04, 0x08, 0x05, 0x00, + 0x00, 0x72, 0xc1, 0x0c, 0x16, 0x4a, 0x0e, 0x5f, + 0x0e, 0x00, 0xd2, 0x04, 0x09, 0x05, 0x00, 0x00, + 0xb5, 0xbc, 0x15, 0xb5, 0x22, 0x05, 0x00, 0xc2, + 0x0d, 0xc4, 0x04, 0x0a, 0x05, 0x00, 0x00, 0xc1, + 0x0d, 0x4a, 0x5f, 0x0e, 0x00, 0xd2, 0x04, 0x0b, + 0x05, 0x00, 0x00, 0xb4, 0xbc, 0x14, 0x04, 0x01, + 0x05, 0x00, 0x00, 0xc1, 0x08, 0xad, 0xe9, 0x05, + 0xc1, 0x0b, 0xeb, 0x02, 0xb4, 0x22, 0x05, 0x00, + 0xc2, 0x0e, 0xc4, 0x04, 0x0c, 0x05, 0x00, 0x00, + 0xc1, 0x0e, 0x4a, 0x5f, 0x0e, 0x00, 0xd2, 0x04, + 0x0d, 0x05, 0x00, 0x00, 0xc1, 0x0e, 0xbc, 0x14, + 0x04, 0x01, 0x05, 0x00, 0x00, 0xc1, 0x08, 0xad, + 0xe9, 0x14, 0x39, 0x95, 0x00, 0x00, 0x00, 0x43, + 0x32, 0x03, 0x00, 0x00, 0xc1, 0x0e, 0xc1, 0x0b, + 0x24, 0x02, 0x00, 0xeb, 0x2d, 0x04, 0x00, 0x05, + 0x00, 0x00, 0xc1, 0x08, 0xad, 0xe9, 0x13, 0x39, + 0x95, 0x00, 0x00, 0x00, 0x43, 0x32, 0x03, 0x00, + 0x00, 0xc1, 0x0e, 0xb4, 0x24, 0x02, 0x00, 0xeb, + 0x11, 0x39, 0x95, 0x00, 0x00, 0x00, 0x43, 0x32, + 0x03, 0x00, 0x00, 0xc1, 0x0e, 0xb7, 0x24, 0x02, + 0x00, 0x22, 0x05, 0x00, 0xc2, 0x0f, 0xc4, 0x04, + 0x0e, 0x05, 0x00, 0x00, 0xc1, 0x0f, 0x4a, 0xd2, + 0x42, 0x0f, 0x05, 0x00, 0x00, 0xc2, 0x10, 0xd2, + 0x42, 0x10, 0x05, 0x00, 0x00, 0xc2, 0x11, 0x06, + 0xc1, 0x10, 0xad, 0x11, 0xe9, 0x06, 0x0e, 0x06, + 0xc1, 0x11, 0xad, 0x11, 0xea, 0x3c, 0x0e, 0x5f, + 0x0e, 0x00, 0xd2, 0x04, 0x0f, 0x05, 0x00, 0x00, + 0xb5, 0xbc, 0x15, 0xb5, 0x22, 0x05, 0x00, 0xc2, + 0x10, 0x5f, 0x0e, 0x00, 0xd2, 0x04, 0x10, 0x05, + 0x00, 0x00, 0xc1, 0x10, 0xbc, 0x15, 0xbc, 0x15, + 0x22, 0x05, 0x00, 0xc2, 0x11, 0xc4, 0x04, 0x11, + 0x05, 0x00, 0x00, 0xc1, 0x10, 0x4a, 0xc4, 0x04, + 0x12, 0x05, 0x00, 0x00, 0x72, 0xc1, 0x11, 0x16, + 0x4a, 0x0e, 0x5f, 0x08, 0x00, 0xd2, 0x04, 0x13, + 0x05, 0x00, 0x00, 0x04, 0x46, 0x00, 0x00, 0x00, + 0x06, 0xb4, 0x98, 0x22, 0x05, 0x00, 0xc2, 0x12, + 0xc4, 0x04, 0x14, 0x05, 0x00, 0x00, 0xc1, 0x12, + 0x4a, 0xc1, 0x05, 0xc1, 0x07, 0x48, 0x42, 0x15, + 0x05, 0x00, 0x00, 0xc1, 0x08, 0x48, 0xc2, 0x13, + 0xc4, 0x04, 0x16, 0x05, 0x00, 0x00, 0x72, 0xc1, + 0x13, 0x42, 0x17, 0x05, 0x00, 0x00, 0x4a, 0xc4, + 0x04, 0x18, 0x05, 0x00, 0x00, 0x72, 0xc1, 0x13, + 0x42, 0x19, 0x05, 0x00, 0x00, 0x4a, 0xc4, 0x04, + 0x1a, 0x05, 0x00, 0x00, 0x72, 0x06, 0x4a, 0xc4, + 0x04, 0x1b, 0x05, 0x00, 0x00, 0x72, 0xb4, 0x98, + 0x4a, 0x5f, 0x0f, 0x00, 0x11, 0xe9, 0x15, 0x0e, + 0xd0, 0x5f, 0x10, 0x00, 0x43, 0xa7, 0x03, 0x00, + 0x00, 0xd0, 0x24, 0x01, 0x00, 0x15, 0x44, 0xa8, + 0x03, 0x00, 0x00, 0x0e, 0xc5, 0xed, 0x0e, 0xd0, + 0x28, 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x02, 0x00, + 0x0d, 0x01, 0x98, 0x01, 0x00, 0x01, 0x00, 0x98, + 0x07, 0x00, 0x00, 0xa6, 0x03, 0x00, 0x01, 0x0c, + 0x01, 0xc8, 0xc4, 0xb4, 0x48, 0xdc, 0xad, 0xe9, + 0x03, 0xdd, 0x28, 0x29, 0xfc, 0x06, 0x01, 0x00, + 0x0d, 0x43, 0x06, 0x00, 0x00, 0x01, 0x00, 0x01, + 0x03, 0x01, 0x00, 0x0d, 0x01, 0xa0, 0x03, 0x00, + 0x01, 0x00, 0x94, 0x04, 0x01, 0x00, 0x06, 0xdc, + 0xd0, 0x48, 0xae, 0xe9, 0x05, 0xdc, 0xd0, 0x48, + 0x28, 0xb6, 0x28, 0xfc, 0x06, 0x01, 0x00, 0x0d, + 0x43, 0x06, 0x00, 0xda, 0x07, 0x00, 0x03, 0x00, + 0x04, 0x04, 0x01, 0x67, 0x03, 0xa0, 0x03, 0x00, + 0x00, 0x00, 0xa2, 0x03, 0x00, 0x01, 0x00, 0x10, + 0x00, 0x01, 0x00, 0xde, 0x07, 0x3d, 0x01, 0xb4, + 0x03, 0x08, 0x01, 0xa6, 0x07, 0x1d, 0x01, 0x94, + 0x07, 0x14, 0x01, 0x08, 0xca, 0x07, 0xc6, 0xae, + 0x11, 0xe9, 0x19, 0x0e, 0x04, 0x48, 0x00, 0x00, + 0x00, 0xdd, 0x43, 0x0b, 0x00, 0x00, 0x00, 0xc6, + 0x24, 0x01, 0x00, 0xad, 0x11, 0xe9, 0x05, 0x0e, + 0xde, 0xc6, 0xee, 0xcc, 0x98, 0x11, 0xea, 0x0a, + 0x0e, 0xc4, 0x04, 0x1b, 0x05, 0x00, 0x00, 0x48, + 0x98, 0xe9, 0x10, 0x39, 0xbf, 0x00, 0x00, 0x00, + 0x11, 0x04, 0x1c, 0x05, 0x00, 0x00, 0x21, 0x01, + 0x00, 0x2f, 0x06, 0xc4, 0x04, 0x1a, 0x05, 0x00, + 0x00, 0x48, 0xad, 0xe9, 0x16, 0xdf, 0x43, 0xa7, + 0x03, 0x00, 0x00, 0xbf, 0x00, 0xc6, 0x24, 0x02, + 0x00, 0xc9, 0xc4, 0x04, 0x1a, 0x05, 0x00, 0x00, + 0xc5, 0x4a, 0xc4, 0x04, 0x1a, 0x05, 0x00, 0x00, + 0x48, 0x28, 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, + 0x06, 0x00, 0x00, 0x01, 0x01, 0x01, 0x04, 0x01, + 0x00, 0x0e, 0x02, 0xa0, 0x03, 0x00, 0x01, 0x00, + 0x10, 0x00, 0x01, 0x00, 0xde, 0x07, 0x00, 0x00, + 0x08, 0xc8, 0xdc, 0xc4, 0x39, 0x90, 0x00, 0x00, + 0x00, 0xd0, 0xee, 0x23, 0x02, 0x00, 0xfc, 0x06, + 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0xdc, 0x07, + 0x02, 0x06, 0x02, 0x03, 0x01, 0x00, 0x45, 0x08, + 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, 0x00, + 0x01, 0x00, 0xa4, 0x03, 0x00, 0x00, 0x00, 0xa6, + 0x03, 0x00, 0x01, 0x00, 0xa8, 0x03, 0x00, 0x02, + 0x00, 0xaa, 0x03, 0x00, 0x03, 0x00, 0xac, 0x03, + 0x00, 0x04, 0x00, 0xae, 0x03, 0x00, 0x05, 0x00, + 0xac, 0x06, 0x3c, 0x01, 0xdc, 0xd0, 0xd1, 0xef, + 0xc8, 0x26, 0x00, 0x00, 0xc9, 0xb4, 0xca, 0xb4, + 0xcb, 0xc4, 0xe8, 0xc7, 0xa7, 0xe9, 0x31, 0xc4, + 0xc7, 0x48, 0xc2, 0x04, 0x0b, 0xc3, 0x05, 0xc1, + 0x04, 0x04, 0x1d, 0x05, 0x00, 0x00, 0x48, 0x44, + 0xb5, 0x04, 0x00, 0x00, 0xc1, 0x05, 0xc1, 0x04, + 0x04, 0x1e, 0x05, 0x00, 0x00, 0x48, 0x44, 0x3f, + 0x00, 0x00, 0x00, 0xc5, 0xc6, 0xc1, 0x05, 0x4a, + 0xb5, 0x96, 0x02, 0x95, 0x03, 0xeb, 0xcb, 0xc5, + 0x28, 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, + 0x00, 0xac, 0x06, 0x02, 0x23, 0x02, 0x08, 0x09, + 0x01, 0xde, 0x0b, 0x25, 0xa0, 0x03, 0x00, 0x01, + 0x00, 0xa2, 0x03, 0x00, 0x01, 0x00, 0xa4, 0x03, + 0x00, 0x00, 0x00, 0xa6, 0x03, 0x00, 0x01, 0x00, + 0xa8, 0x03, 0x00, 0x02, 0x80, 0xaa, 0x03, 0x00, + 0x03, 0x00, 0xac, 0x03, 0x00, 0x04, 0x00, 0xae, + 0x03, 0x00, 0x05, 0x00, 0xb0, 0x03, 0x00, 0x06, + 0x00, 0xb2, 0x03, 0x00, 0x07, 0x00, 0xb4, 0x03, + 0x00, 0x08, 0x00, 0xfe, 0x06, 0x00, 0x09, 0x00, + 0x80, 0x07, 0x00, 0x0a, 0x00, 0x84, 0x07, 0x00, + 0x0b, 0x00, 0x86, 0x07, 0x00, 0x0c, 0x00, 0x88, + 0x07, 0x00, 0x0d, 0x00, 0x8a, 0x07, 0x00, 0x0e, + 0x80, 0x8c, 0x07, 0x00, 0x0f, 0x00, 0x90, 0x07, + 0x00, 0x10, 0x00, 0x94, 0x07, 0x00, 0x11, 0x00, + 0x98, 0x07, 0x00, 0x12, 0x00, 0x9a, 0x07, 0x00, + 0x13, 0x00, 0x9e, 0x07, 0x00, 0x14, 0x00, 0xa0, + 0x07, 0x00, 0x15, 0x00, 0xa2, 0x07, 0x00, 0x16, + 0x00, 0xa4, 0x07, 0x00, 0x17, 0x00, 0xa8, 0x07, + 0x00, 0x18, 0x00, 0xaa, 0x07, 0x00, 0x19, 0x00, + 0xac, 0x07, 0x00, 0x1a, 0x00, 0xae, 0x07, 0x00, + 0x1b, 0x00, 0xb0, 0x07, 0x00, 0x1c, 0x00, 0xb2, + 0x07, 0x00, 0x1d, 0x00, 0xb4, 0x07, 0x00, 0x1e, + 0x00, 0xb6, 0x07, 0x00, 0x1f, 0x00, 0xb8, 0x07, + 0x00, 0x20, 0x00, 0xba, 0x07, 0x00, 0x21, 0x00, + 0xbc, 0x07, 0x00, 0x22, 0x00, 0xe2, 0x07, 0x40, + 0x01, 0xa6, 0x07, 0x1d, 0x01, 0x96, 0x07, 0x15, + 0x01, 0x9c, 0x07, 0x18, 0x01, 0x8e, 0x07, 0x11, + 0x01, 0x82, 0x07, 0x0b, 0x01, 0x96, 0x05, 0x3e, + 0x01, 0xe0, 0x07, 0x3f, 0x01, 0x92, 0x07, 0x13, + 0x01, 0xdd, 0xd0, 0xee, 0xcc, 0x04, 0xef, 0x04, + 0x00, 0x00, 0x48, 0xc9, 0xc4, 0x04, 0xfc, 0x04, + 0x00, 0x00, 0x48, 0xca, 0xde, 0x42, 0xa1, 0x03, + 0x00, 0x00, 0x04, 0xa5, 0x03, 0x00, 0x00, 0x48, + 0xc5, 0x48, 0xcf, 0x42, 0x1f, 0x05, 0x00, 0x00, + 0xc6, 0x48, 0x11, 0xea, 0x0d, 0x0e, 0xc7, 0x42, + 0x1f, 0x05, 0x00, 0x00, 0x42, 0x2e, 0x04, 0x00, + 0x00, 0xc2, 0x04, 0x06, 0xc2, 0x05, 0x39, 0xd4, + 0x04, 0x00, 0x00, 0xd1, 0xee, 0x98, 0xe9, 0x14, + 0xd1, 0xb4, 0xa5, 0xe9, 0x0f, 0xd1, 0x8e, 0xd5, + 0xc4, 0x04, 0x18, 0x05, 0x00, 0x00, 0x48, 0xc3, + 0x05, 0xeb, 0x0a, 0xc4, 0x04, 0x16, 0x05, 0x00, + 0x00, 0x48, 0xc3, 0x05, 0x0e, 0xdf, 0x11, 0x21, + 0x00, 0x00, 0xc2, 0x06, 0xc1, 0x05, 0x43, 0x21, + 0x02, 0x00, 0x00, 0x04, 0x20, 0x05, 0x00, 0x00, + 0xb4, 0x24, 0x02, 0x00, 0xc2, 0x07, 0xb4, 0xc2, + 0x08, 0xb4, 0xc2, 0x09, 0xc1, 0x05, 0xe8, 0xc2, + 0x0a, 0xc1, 0x07, 0xb3, 0xa7, 0x6a, 0x17, 0x05, + 0x00, 0x00, 0xc1, 0x07, 0xc1, 0x0a, 0xa5, 0x6a, + 0x0d, 0x05, 0x00, 0x00, 0xb3, 0xc1, 0x05, 0x43, + 0x21, 0x02, 0x00, 0x00, 0x04, 0xd1, 0x04, 0x00, + 0x00, 0xc1, 0x07, 0x24, 0x02, 0x00, 0xc3, 0x08, + 0xad, 0xe9, 0x0b, 0x39, 0x8f, 0x00, 0x00, 0x00, + 0x11, 0x21, 0x00, 0x00, 0x2f, 0xc1, 0x07, 0xc1, + 0x09, 0xa7, 0xe9, 0x31, 0xc1, 0x05, 0x43, 0xe4, + 0x04, 0x00, 0x00, 0xc1, 0x09, 0xc1, 0x07, 0x24, + 0x02, 0x00, 0xc2, 0x0b, 0x5f, 0x04, 0x00, 0x43, + 0xa7, 0x03, 0x00, 0x00, 0xc1, 0x06, 0x0b, 0x04, + 0x21, 0x05, 0x00, 0x00, 0x4d, 0x1d, 0x05, 0x00, + 0x00, 0xc1, 0x0b, 0x4d, 0x1e, 0x05, 0x00, 0x00, + 0x24, 0x02, 0x00, 0x0e, 0xc1, 0x05, 0x43, 0xe4, + 0x04, 0x00, 0x00, 0xc1, 0x07, 0xb5, 0x9f, 0xc1, + 0x08, 0x24, 0x02, 0x00, 0xc2, 0x0c, 0x04, 0x45, + 0x00, 0x00, 0x00, 0xc1, 0x0c, 0xad, 0x6a, 0x02, + 0x03, 0x00, 0x00, 0x39, 0xd4, 0x04, 0x00, 0x00, + 0xd1, 0xee, 0xe9, 0x2d, 0xc1, 0x04, 0x42, 0x51, + 0x02, 0x00, 0x00, 0xc2, 0x0d, 0x5f, 0x04, 0x00, + 0x43, 0xa7, 0x03, 0x00, 0x00, 0xc1, 0x06, 0x0b, + 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, 0x1d, 0x05, + 0x00, 0x00, 0xc1, 0x0d, 0x4d, 0x1e, 0x05, 0x00, + 0x00, 0x24, 0x02, 0x00, 0x0e, 0xec, 0x43, 0x04, + 0x39, 0x22, 0x05, 0x00, 0x00, 0xd1, 0xee, 0x6a, + 0x95, 0x02, 0x00, 0x00, 0x04, 0x00, 0x05, 0x00, + 0x00, 0xc4, 0x04, 0x02, 0x05, 0x00, 0x00, 0x48, + 0xad, 0x11, 0xe9, 0x12, 0x0e, 0x39, 0x22, 0x05, + 0x00, 0x00, 0xd1, 0xee, 0x11, 0xe9, 0x07, 0x0e, + 0xd1, 0xbc, 0x64, 0x9c, 0xd9, 0x0e, 0x06, 0xc2, + 0x0e, 0x5f, 0x05, 0x00, 0x43, 0xa7, 0x03, 0x00, + 0x00, 0xc4, 0x04, 0x11, 0x05, 0x00, 0x00, 0x24, + 0x02, 0x00, 0xe9, 0x29, 0x5f, 0x05, 0x00, 0x43, + 0xa7, 0x03, 0x00, 0x00, 0xc4, 0x04, 0x12, 0x05, + 0x00, 0x00, 0x24, 0x02, 0x00, 0xe9, 0x16, 0x5f, + 0x06, 0x00, 0xd1, 0xc4, 0x04, 0x11, 0x05, 0x00, + 0x00, 0x48, 0xc4, 0x04, 0x12, 0x05, 0x00, 0x00, + 0x48, 0xf0, 0xeb, 0x1d, 0x5f, 0x07, 0x00, 0xd1, + 0xc4, 0x04, 0x0a, 0x05, 0x00, 0x00, 0x48, 0xc4, + 0x04, 0x0c, 0x05, 0x00, 0x00, 0x48, 0xc4, 0x04, + 0x0e, 0x05, 0x00, 0x00, 0x48, 0x22, 0x04, 0x00, + 0xc2, 0x0e, 0xdc, 0xc6, 0x48, 0xe9, 0x06, 0xbf, + 0x00, 0xed, 0xeb, 0x0b, 0x39, 0x91, 0x00, 0x00, + 0x00, 0xc1, 0x0e, 0xee, 0xc3, 0x0e, 0x0e, 0x06, + 0xc2, 0x0f, 0x06, 0xc2, 0x10, 0xc1, 0x0e, 0x43, + 0x21, 0x02, 0x00, 0x00, 0x04, 0x23, 0x05, 0x00, + 0x00, 0xb4, 0x24, 0x02, 0x00, 0xc3, 0x11, 0xb4, + 0xa7, 0xe9, 0x25, 0xc1, 0x0e, 0x43, 0xe4, 0x04, + 0x00, 0x00, 0xb4, 0xc1, 0x11, 0x24, 0x02, 0x00, + 0xc2, 0x0f, 0xc1, 0x0e, 0x43, 0xe4, 0x04, 0x00, + 0x00, 0xc1, 0x11, 0xb5, 0x9f, 0xc1, 0x11, 0xe8, + 0x24, 0x02, 0x00, 0xc3, 0x10, 0xeb, 0x08, 0xc1, + 0x0e, 0xc2, 0x0f, 0x06, 0xc3, 0x10, 0x0e, 0xb4, + 0x98, 0xc4, 0x04, 0x14, 0x05, 0x00, 0x00, 0x48, + 0xad, 0x6a, 0x36, 0x01, 0x00, 0x00, 0xc1, 0x04, + 0x42, 0x24, 0x05, 0x00, 0x00, 0xc2, 0x12, 0x26, + 0x00, 0x00, 0xc2, 0x13, 0xc7, 0x42, 0x15, 0x05, + 0x00, 0x00, 0x42, 0x25, 0x05, 0x00, 0x00, 0x11, + 0xea, 0x03, 0x0e, 0xb7, 0xc2, 0x14, 0xc7, 0x42, + 0x15, 0x05, 0x00, 0x00, 0x42, 0x26, 0x05, 0x00, + 0x00, 0x11, 0xea, 0x04, 0x0e, 0xc1, 0x14, 0xc2, + 0x15, 0xc1, 0x0f, 0xe8, 0xc1, 0x14, 0xa7, 0xe9, + 0x7a, 0xc1, 0x0f, 0xe8, 0xc1, 0x14, 0xa0, 0xc3, + 0x16, 0xc1, 0x15, 0x9e, 0xc2, 0x17, 0xc1, 0x0f, + 0x43, 0x23, 0x02, 0x00, 0x00, 0xb4, 0xc1, 0x17, + 0x24, 0x02, 0x00, 0xc3, 0x18, 0xe8, 0x11, 0xe9, + 0x11, 0x0e, 0x5f, 0x04, 0x00, 0x43, 0xa7, 0x03, + 0x00, 0x00, 0xc1, 0x13, 0xc1, 0x18, 0x24, 0x02, + 0x00, 0x0e, 0xc1, 0x17, 0xc1, 0x16, 0xa5, 0xe9, + 0x26, 0x5f, 0x04, 0x00, 0x43, 0xa7, 0x03, 0x00, + 0x00, 0xc1, 0x13, 0xc1, 0x0f, 0x43, 0x23, 0x02, + 0x00, 0x00, 0xc1, 0x17, 0xc1, 0x17, 0xc1, 0x15, + 0x9f, 0x24, 0x02, 0x00, 0x24, 0x02, 0x00, 0x0e, + 0xc1, 0x15, 0x96, 0x17, 0xeb, 0xd5, 0x5f, 0x04, + 0x00, 0x43, 0xa7, 0x03, 0x00, 0x00, 0xc1, 0x13, + 0xc1, 0x0f, 0x43, 0x23, 0x02, 0x00, 0x00, 0xc1, + 0x16, 0x24, 0x01, 0x00, 0x24, 0x02, 0x00, 0x0e, + 0xeb, 0x11, 0x5f, 0x04, 0x00, 0x43, 0xa7, 0x03, + 0x00, 0x00, 0xc1, 0x13, 0xc1, 0x0f, 0x24, 0x02, + 0x00, 0x0e, 0xb4, 0xc1, 0x13, 0xe8, 0xad, 0xe9, + 0x0b, 0x39, 0x8f, 0x00, 0x00, 0x00, 0x11, 0x21, + 0x00, 0x00, 0x2f, 0xc1, 0x13, 0xe8, 0xe9, 0x79, + 0x5f, 0x08, 0x00, 0x43, 0xa7, 0x03, 0x00, 0x00, + 0xc1, 0x13, 0x24, 0x01, 0x00, 0xc2, 0x19, 0x5f, + 0x04, 0x00, 0x43, 0xa7, 0x03, 0x00, 0x00, 0xc1, + 0x06, 0x0b, 0x04, 0x4a, 0x00, 0x00, 0x00, 0x4d, + 0x1d, 0x05, 0x00, 0x00, 0xc1, 0x19, 0x4d, 0x1e, + 0x05, 0x00, 0x00, 0x24, 0x02, 0x00, 0x0e, 0xc1, + 0x13, 0xe8, 0x11, 0xe9, 0x21, 0x0e, 0x5f, 0x04, + 0x00, 0x43, 0xa7, 0x03, 0x00, 0x00, 0xc1, 0x06, + 0x0b, 0x04, 0x24, 0x05, 0x00, 0x00, 0x4d, 0x1d, + 0x05, 0x00, 0x00, 0xc1, 0x12, 0x4d, 0x1e, 0x05, + 0x00, 0x00, 0x24, 0x02, 0x00, 0x0e, 0xeb, 0xa4, + 0x5f, 0x04, 0x00, 0x43, 0xa7, 0x03, 0x00, 0x00, + 0xc1, 0x06, 0x0b, 0x04, 0x4a, 0x00, 0x00, 0x00, + 0x4d, 0x1d, 0x05, 0x00, 0x00, 0xc1, 0x0f, 0x4d, + 0x1e, 0x05, 0x00, 0x00, 0x24, 0x02, 0x00, 0x0e, + 0x06, 0xc1, 0x10, 0xae, 0x6a, 0xf4, 0x01, 0x00, + 0x00, 0xc1, 0x04, 0x42, 0xff, 0x04, 0x00, 0x00, + 0xc2, 0x1a, 0x5f, 0x04, 0x00, 0x43, 0xa7, 0x03, + 0x00, 0x00, 0xc1, 0x06, 0x0b, 0x04, 0xff, 0x04, + 0x00, 0x00, 0x4d, 0x1d, 0x05, 0x00, 0x00, 0xc1, + 0x1a, 0x4d, 0x1e, 0x05, 0x00, 0x00, 0x24, 0x02, + 0x00, 0x0e, 0x5f, 0x04, 0x00, 0x43, 0xa7, 0x03, + 0x00, 0x00, 0xc1, 0x06, 0x0b, 0x04, 0x27, 0x05, + 0x00, 0x00, 0x4d, 0x1d, 0x05, 0x00, 0x00, 0xc1, + 0x10, 0x4d, 0x1e, 0x05, 0x00, 0x00, 0x24, 0x02, + 0x00, 0x0e, 0xec, 0xa6, 0x01, 0xc1, 0x04, 0x42, + 0x28, 0x05, 0x00, 0x00, 0xc2, 0x1b, 0x5f, 0x04, + 0x00, 0x43, 0xa7, 0x03, 0x00, 0x00, 0xc1, 0x06, + 0x0b, 0x04, 0x28, 0x05, 0x00, 0x00, 0x4d, 0x1d, + 0x05, 0x00, 0x00, 0xc1, 0x1b, 0x4d, 0x1e, 0x05, + 0x00, 0x00, 0x24, 0x02, 0x00, 0x0e, 0xec, 0x7a, + 0x01, 0x04, 0x29, 0x05, 0x00, 0x00, 0xc1, 0x0c, + 0xad, 0xe9, 0x2d, 0xc1, 0x04, 0x42, 0x29, 0x05, + 0x00, 0x00, 0xc2, 0x1c, 0x5f, 0x04, 0x00, 0x43, + 0xa7, 0x03, 0x00, 0x00, 0xc1, 0x06, 0x0b, 0x04, + 0x29, 0x05, 0x00, 0x00, 0x4d, 0x1d, 0x05, 0x00, + 0x00, 0xc1, 0x1c, 0x4d, 0x1e, 0x05, 0x00, 0x00, + 0x24, 0x02, 0x00, 0x0e, 0xec, 0x44, 0x01, 0x04, + 0x2a, 0x05, 0x00, 0x00, 0xc1, 0x0c, 0xad, 0xe9, + 0x2d, 0xc1, 0x04, 0x42, 0x2a, 0x05, 0x00, 0x00, + 0xc2, 0x1d, 0x5f, 0x04, 0x00, 0x43, 0xa7, 0x03, + 0x00, 0x00, 0xc1, 0x06, 0x0b, 0x04, 0x2a, 0x05, + 0x00, 0x00, 0x4d, 0x1d, 0x05, 0x00, 0x00, 0xc1, + 0x1d, 0x4d, 0x1e, 0x05, 0x00, 0x00, 0x24, 0x02, + 0x00, 0x0e, 0xec, 0x0e, 0x01, 0x04, 0x2b, 0x05, + 0x00, 0x00, 0xc1, 0x0c, 0xad, 0xe9, 0x3c, 0x04, + 0x00, 0x05, 0x00, 0x00, 0xc4, 0x04, 0x02, 0x05, + 0x00, 0x00, 0x48, 0xad, 0xe9, 0x2d, 0xc1, 0x04, + 0x42, 0x2b, 0x05, 0x00, 0x00, 0xc2, 0x1e, 0x5f, + 0x04, 0x00, 0x43, 0xa7, 0x03, 0x00, 0x00, 0xc1, + 0x06, 0x0b, 0x04, 0x21, 0x05, 0x00, 0x00, 0x4d, + 0x1d, 0x05, 0x00, 0x00, 0xc1, 0x1e, 0x4d, 0x1e, + 0x05, 0x00, 0x00, 0x24, 0x02, 0x00, 0x0e, 0xec, + 0xc9, 0x00, 0x04, 0x01, 0x05, 0x00, 0x00, 0xc1, + 0x0c, 0xad, 0x6a, 0x8e, 0x00, 0x00, 0x00, 0x04, + 0x01, 0x05, 0x00, 0x00, 0xc4, 0x04, 0x02, 0x05, + 0x00, 0x00, 0x48, 0xad, 0xe9, 0x7c, 0xc4, 0x04, + 0x05, 0x05, 0x00, 0x00, 0x48, 0xc2, 0x1f, 0x06, + 0xc2, 0x20, 0x04, 0x07, 0x05, 0x00, 0x00, 0xc4, + 0x04, 0x08, 0x05, 0x00, 0x00, 0x48, 0xad, 0xe9, + 0x07, 0xc1, 0x1f, 0xc3, 0x20, 0xeb, 0x38, 0x04, + 0x49, 0x00, 0x00, 0x00, 0xc4, 0x04, 0x08, 0x05, + 0x00, 0x00, 0x48, 0xad, 0xe9, 0x14, 0xc7, 0x42, + 0x2c, 0x05, 0x00, 0x00, 0xc1, 0x1f, 0x48, 0x11, + 0xea, 0x04, 0x0e, 0xc1, 0x1f, 0xc3, 0x20, 0xeb, + 0x16, 0x04, 0x35, 0x00, 0x00, 0x00, 0xc4, 0x04, + 0x08, 0x05, 0x00, 0x00, 0x48, 0xad, 0x11, 0xe9, + 0x06, 0x0e, 0xc1, 0x1f, 0xc3, 0x20, 0x0e, 0x5f, + 0x04, 0x00, 0x43, 0xa7, 0x03, 0x00, 0x00, 0xc1, + 0x06, 0x0b, 0x04, 0x01, 0x05, 0x00, 0x00, 0x4d, + 0x1d, 0x05, 0x00, 0x00, 0xc1, 0x20, 0x4d, 0x1e, + 0x05, 0x00, 0x00, 0x24, 0x02, 0x00, 0x0e, 0xeb, + 0x31, 0xc1, 0x05, 0x43, 0xe4, 0x04, 0x00, 0x00, + 0xc1, 0x07, 0xc1, 0x08, 0x24, 0x02, 0x00, 0xc2, + 0x21, 0x5f, 0x04, 0x00, 0x43, 0xa7, 0x03, 0x00, + 0x00, 0xc1, 0x06, 0x0b, 0x04, 0x21, 0x05, 0x00, + 0x00, 0x4d, 0x1d, 0x05, 0x00, 0x00, 0xc1, 0x21, + 0x4d, 0x1e, 0x05, 0x00, 0x00, 0x24, 0x02, 0x00, + 0x0e, 0xc1, 0x08, 0xb5, 0x9f, 0xc2, 0x09, 0xc1, + 0x05, 0x43, 0x21, 0x02, 0x00, 0x00, 0x04, 0x20, + 0x05, 0x00, 0x00, 0xc1, 0x09, 0x24, 0x02, 0x00, + 0xc2, 0x07, 0xec, 0xe6, 0xfa, 0xc1, 0x09, 0xc1, + 0x0a, 0xa5, 0xe9, 0x31, 0xc1, 0x05, 0x43, 0xe4, + 0x04, 0x00, 0x00, 0xc1, 0x09, 0xc1, 0x0a, 0x24, + 0x02, 0x00, 0xc2, 0x22, 0x5f, 0x04, 0x00, 0x43, + 0xa7, 0x03, 0x00, 0x00, 0xc1, 0x06, 0x0b, 0x04, + 0x21, 0x05, 0x00, 0x00, 0x4d, 0x1d, 0x05, 0x00, + 0x00, 0xc1, 0x22, 0x4d, 0x1e, 0x05, 0x00, 0x00, + 0x24, 0x02, 0x00, 0x0e, 0xc1, 0x06, 0x28, 0xfc, + 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x04, 0x03, 0x03, 0x1c, 0x01, + 0xa0, 0x03, 0x00, 0x00, 0x80, 0xe2, 0x07, 0x00, + 0x00, 0xa8, 0x03, 0x02, 0x01, 0x8a, 0x07, 0x0e, + 0x01, 0xdc, 0xdd, 0x48, 0xc8, 0x39, 0x91, 0x00, + 0x00, 0x00, 0xde, 0xee, 0x43, 0xc9, 0x04, 0x00, + 0x00, 0xbe, 0x00, 0xbe, 0x01, 0x33, 0xbf, 0x02, + 0x24, 0x02, 0x00, 0xe2, 0x29, 0xfc, 0x06, 0x01, + 0x00, 0x07, 0x04, 0x5c, 0x64, 0x07, 0x3c, 0x01, + 0x01, 0x00, 0x17, 0x00, 0x00, 0x00, 0x08, 0x06, + 0x00, 0x00, 0x00, 0x04, 0x07, 0xf5, 0xff, 0xff, + 0xff, 0x0b, 0x00, 0x15, 0x01, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x0c, 0x00, 0x0a, 0x0d, 0x43, 0x06, + 0x00, 0x00, 0x01, 0x00, 0x01, 0x02, 0x01, 0x00, + 0x04, 0x01, 0xa2, 0x03, 0x00, 0x01, 0x00, 0xa0, + 0x03, 0x00, 0x01, 0xdc, 0xd0, 0x48, 0x28, 0xfc, + 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0xde, + 0x07, 0x02, 0x03, 0x02, 0x03, 0x01, 0x00, 0x21, + 0x05, 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, + 0x00, 0x01, 0x00, 0xa4, 0x03, 0x00, 0x00, 0x00, + 0xa6, 0x03, 0x00, 0x01, 0x00, 0xa8, 0x03, 0x00, + 0x02, 0x00, 0xac, 0x06, 0x3c, 0x01, 0xdc, 0xd0, + 0xd1, 0xef, 0xc8, 0xc0, 0xc9, 0xb4, 0xca, 0xc4, + 0xe8, 0xc6, 0xa7, 0xe9, 0x11, 0xc5, 0xc4, 0xc6, + 0x48, 0x04, 0x1e, 0x05, 0x00, 0x00, 0x48, 0x9f, + 0xc9, 0x95, 0x02, 0xeb, 0xeb, 0xc5, 0x28, 0xfc, + 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0x96, + 0x05, 0x03, 0x05, 0x03, 0x08, 0x01, 0x05, 0xf5, + 0x02, 0x08, 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, + 0x03, 0x00, 0x01, 0x00, 0xa4, 0x03, 0x00, 0x01, + 0x00, 0xa6, 0x03, 0x00, 0x00, 0x00, 0xa8, 0x03, + 0x00, 0x01, 0x00, 0xaa, 0x03, 0x00, 0x02, 0x00, + 0xac, 0x03, 0x00, 0x03, 0x00, 0xae, 0x03, 0x00, + 0x04, 0x00, 0x90, 0x07, 0x12, 0x01, 0xd2, 0xc8, + 0x06, 0xc9, 0x06, 0xca, 0xb4, 0xd0, 0xad, 0xe9, + 0x1a, 0xdc, 0x43, 0xa7, 0x03, 0x00, 0x00, 0x39, + 0x8e, 0x00, 0x00, 0x00, 0xc4, 0xb5, 0x9f, 0xee, + 0xbe, 0x00, 0x24, 0x02, 0x00, 0xc9, 0xb4, 0xca, + 0xeb, 0x70, 0xbf, 0x01, 0x39, 0x95, 0x00, 0x00, + 0x00, 0x43, 0xd6, 0x04, 0x00, 0x00, 0xd0, 0x24, + 0x01, 0x00, 0xee, 0xca, 0x39, 0x95, 0x00, 0x00, + 0x00, 0x43, 0x2d, 0x05, 0x00, 0x00, 0x39, 0x95, + 0x00, 0x00, 0x00, 0x43, 0x2e, 0x05, 0x00, 0x00, + 0x39, 0x95, 0x00, 0x00, 0x00, 0x43, 0xd6, 0x04, + 0x00, 0x00, 0xc6, 0xc4, 0xa0, 0xb5, 0x9f, 0x24, + 0x01, 0x00, 0x39, 0x95, 0x00, 0x00, 0x00, 0x42, + 0x2f, 0x05, 0x00, 0x00, 0x9c, 0x24, 0x01, 0x00, + 0x24, 0x01, 0x00, 0xcb, 0x39, 0x91, 0x00, 0x00, + 0x00, 0x39, 0x95, 0x00, 0x00, 0x00, 0x43, 0x2d, + 0x05, 0x00, 0x00, 0xc6, 0xc4, 0xa0, 0xb5, 0x9f, + 0xb4, 0xa5, 0xe9, 0x06, 0xd0, 0xc7, 0x9c, 0xeb, + 0x04, 0xd0, 0xc7, 0x9d, 0x24, 0x01, 0x00, 0xee, + 0xc9, 0xc6, 0xc4, 0xa8, 0xe9, 0x1c, 0xc5, 0xdc, + 0x43, 0xa7, 0x03, 0x00, 0x00, 0x39, 0x8e, 0x00, + 0x00, 0x00, 0xc6, 0xc4, 0xa0, 0xb5, 0x9f, 0xb5, + 0x9f, 0xee, 0xbe, 0x02, 0x24, 0x02, 0x00, 0x9f, + 0x28, 0xc6, 0xc4, 0xb5, 0xa0, 0xad, 0xe9, 0x03, + 0xc5, 0x28, 0xc6, 0xb4, 0xa8, 0xe9, 0x24, 0xc5, + 0x43, 0x23, 0x02, 0x00, 0x00, 0xb4, 0xc6, 0xb5, + 0x9f, 0x24, 0x02, 0x00, 0x04, 0x23, 0x05, 0x00, + 0x00, 0x9f, 0xc5, 0x43, 0x23, 0x02, 0x00, 0x00, + 0xc6, 0xb5, 0x9f, 0x24, 0x01, 0x00, 0x9f, 0xcd, + 0xeb, 0x27, 0xc6, 0xb4, 0xa5, 0x11, 0xe9, 0x21, + 0x0e, 0x04, 0x30, 0x05, 0x00, 0x00, 0xdc, 0x43, + 0xa7, 0x03, 0x00, 0x00, 0x39, 0x8e, 0x00, 0x00, + 0x00, 0xb5, 0xc6, 0xb5, 0x9f, 0xa0, 0xee, 0xbe, + 0x03, 0x24, 0x02, 0x00, 0x9f, 0xc5, 0x9f, 0xcd, + 0x0e, 0xc5, 0x43, 0x21, 0x02, 0x00, 0x00, 0x04, + 0x23, 0x05, 0x00, 0x00, 0x24, 0x01, 0x00, 0xb4, + 0xa8, 0xe9, 0x57, 0xd2, 0xd1, 0xa7, 0xe9, 0x52, + 0xd2, 0xd1, 0xa0, 0xc2, 0x04, 0xc1, 0x04, 0xb4, + 0xa7, 0xe9, 0x23, 0xbe, 0x04, 0xc5, 0x43, 0xd8, + 0x04, 0x00, 0x00, 0xc5, 0xe8, 0xb5, 0xa0, 0x24, + 0x01, 0x00, 0xad, 0xe9, 0x11, 0xc5, 0x43, 0x23, + 0x02, 0x00, 0x00, 0xb4, 0xb3, 0x24, 0x02, 0x00, + 0xc9, 0x94, 0x04, 0xeb, 0xd9, 0x04, 0x23, 0x05, + 0x00, 0x00, 0xc5, 0x43, 0xd8, 0x04, 0x00, 0x00, + 0xc5, 0xe8, 0xb5, 0xa0, 0x24, 0x01, 0x00, 0xad, + 0x11, 0xe9, 0x0e, 0x0e, 0xc5, 0x43, 0x23, 0x02, + 0x00, 0x00, 0xb4, 0xb3, 0x24, 0x02, 0x00, 0xcd, + 0x0e, 0xc5, 0x28, 0xfc, 0x06, 0x01, 0x00, 0x07, + 0x02, 0x30, 0x0d, 0x43, 0x06, 0x00, 0x00, 0x01, + 0x01, 0x01, 0x05, 0x00, 0x00, 0x66, 0x02, 0xa0, + 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, 0x00, 0x00, + 0x00, 0x04, 0x1b, 0x00, 0x00, 0x00, 0x39, 0x95, + 0x00, 0x00, 0x00, 0x42, 0x31, 0x05, 0x00, 0x00, + 0x99, 0xab, 0xe9, 0x1c, 0x39, 0x95, 0x00, 0x00, + 0x00, 0x43, 0xd5, 0x04, 0x00, 0x00, 0x39, 0x95, + 0x00, 0x00, 0x00, 0x43, 0x31, 0x05, 0x00, 0x00, + 0xd0, 0x24, 0x01, 0x00, 0x25, 0x01, 0x00, 0x39, + 0x95, 0x00, 0x00, 0x00, 0x43, 0x2d, 0x05, 0x00, + 0x00, 0x39, 0x95, 0x00, 0x00, 0x00, 0x43, 0x32, + 0x05, 0x00, 0x00, 0xd0, 0x24, 0x01, 0x00, 0x39, + 0x95, 0x00, 0x00, 0x00, 0x42, 0x33, 0x05, 0x00, + 0x00, 0x9c, 0x24, 0x01, 0x00, 0xcc, 0x39, 0x90, + 0x00, 0x00, 0x00, 0x04, 0x34, 0x05, 0x00, 0x00, + 0xc4, 0x9f, 0xee, 0xd0, 0xa7, 0xa0, 0x28, 0xfc, + 0x06, 0x01, 0x00, 0x07, 0x02, 0x30, 0x07, 0x02, + 0x30, 0x07, 0x02, 0x30, 0x0d, 0x43, 0x06, 0x00, + 0xe0, 0x07, 0x04, 0x0a, 0x04, 0x07, 0x01, 0x05, + 0xe3, 0x02, 0x0e, 0xa0, 0x03, 0x00, 0x01, 0x00, + 0xa2, 0x03, 0x00, 0x01, 0x00, 0xa4, 0x03, 0x00, + 0x01, 0x00, 0xa6, 0x03, 0x00, 0x01, 0x00, 0xa8, + 0x03, 0x00, 0x00, 0x00, 0xaa, 0x03, 0x00, 0x01, + 0x00, 0xac, 0x03, 0x00, 0x02, 0x00, 0xae, 0x03, + 0x00, 0x03, 0x00, 0xb0, 0x03, 0x00, 0x04, 0x00, + 0xb2, 0x03, 0x00, 0x05, 0x00, 0xb4, 0x03, 0x00, + 0x06, 0x00, 0xfe, 0x06, 0x00, 0x07, 0x00, 0x80, + 0x07, 0x00, 0x08, 0x00, 0x82, 0x07, 0x00, 0x09, + 0x00, 0x90, 0x07, 0x12, 0x01, 0xd3, 0xc9, 0x39, + 0x95, 0x00, 0x00, 0x00, 0x43, 0xd3, 0x04, 0x00, + 0x00, 0xbc, 0x0a, 0xc5, 0x24, 0x02, 0x00, 0xd0, + 0x9c, 0xca, 0xb4, 0xc6, 0xad, 0xe9, 0x05, 0xbe, + 0x00, 0xeb, 0x0b, 0xc6, 0x43, 0x35, 0x05, 0x00, + 0x00, 0xb4, 0x24, 0x01, 0x00, 0xcf, 0x43, 0x21, + 0x02, 0x00, 0x00, 0x04, 0xd0, 0x00, 0x00, 0x00, + 0x24, 0x01, 0x00, 0xcc, 0xb3, 0xa7, 0xe9, 0x0f, + 0xc7, 0x43, 0x23, 0x02, 0x00, 0x00, 0xc4, 0xb5, + 0x9f, 0x24, 0x01, 0x00, 0xeb, 0x02, 0xb4, 0xc3, + 0x04, 0x11, 0xe9, 0x38, 0x0e, 0xc7, 0x43, 0x23, + 0x02, 0x00, 0x00, 0xb4, 0xc4, 0x24, 0x02, 0x00, + 0x43, 0xc9, 0x04, 0x00, 0x00, 0x04, 0x23, 0x05, + 0x00, 0x00, 0xc0, 0x24, 0x02, 0x00, 0xcf, 0xdc, + 0x43, 0xa7, 0x03, 0x00, 0x00, 0x39, 0x8e, 0x00, + 0x00, 0x00, 0xc1, 0x04, 0xc7, 0xe8, 0xb5, 0xa0, + 0xa0, 0xb5, 0x9f, 0xee, 0xbe, 0x01, 0x24, 0x02, + 0x00, 0x9f, 0xcf, 0x0e, 0x06, 0xc2, 0x05, 0xb4, + 0xc5, 0xae, 0xe9, 0x61, 0xc7, 0xe8, 0xc3, 0x06, + 0xc5, 0xa6, 0x11, 0xe9, 0x23, 0x0e, 0xdc, 0x43, + 0xa7, 0x03, 0x00, 0x00, 0x39, 0x8e, 0x00, 0x00, + 0x00, 0xc5, 0xb5, 0x9f, 0xc1, 0x06, 0xa0, 0xb5, + 0x9f, 0xee, 0xbe, 0x02, 0x24, 0x02, 0x00, 0xc7, + 0x9f, 0xcb, 0xc5, 0xb5, 0x9f, 0xc3, 0x06, 0x0e, + 0xc7, 0x43, 0xe4, 0x04, 0x00, 0x00, 0xb4, 0xc1, + 0x06, 0xc5, 0xa0, 0x24, 0x02, 0x00, 0xc2, 0x07, + 0xc7, 0x43, 0xe4, 0x04, 0x00, 0x00, 0xc1, 0x06, + 0xc5, 0xa0, 0xc7, 0xe8, 0x24, 0x02, 0x00, 0xc2, + 0x08, 0xc1, 0x07, 0x04, 0x23, 0x05, 0x00, 0x00, + 0x9f, 0xc1, 0x08, 0x9f, 0xcb, 0xc1, 0x07, 0xe8, + 0xc2, 0x05, 0xeb, 0x05, 0xc7, 0xe8, 0xc2, 0x05, + 0xd3, 0xd2, 0xa0, 0xc2, 0x09, 0xc1, 0x09, 0xb4, + 0xa7, 0xe9, 0x20, 0xbe, 0x03, 0xc7, 0x43, 0x23, + 0x02, 0x00, 0x00, 0xb3, 0x24, 0x01, 0x00, 0xad, + 0xe9, 0x11, 0xc7, 0x43, 0x23, 0x02, 0x00, 0x00, + 0xb4, 0xb3, 0x24, 0x02, 0x00, 0xcb, 0x94, 0x09, + 0xeb, 0xdc, 0x04, 0x23, 0x05, 0x00, 0x00, 0xc7, + 0x43, 0x23, 0x02, 0x00, 0x00, 0xb3, 0x24, 0x01, + 0x00, 0xad, 0x11, 0xe9, 0x0e, 0x0e, 0xc7, 0x43, + 0x23, 0x02, 0x00, 0x00, 0xb4, 0xb3, 0x24, 0x02, + 0x00, 0xcf, 0x0e, 0xc1, 0x05, 0xd1, 0xa5, 0x11, + 0xe9, 0x1c, 0x0e, 0xdc, 0x43, 0xa7, 0x03, 0x00, + 0x00, 0x39, 0x8e, 0x00, 0x00, 0x00, 0xd1, 0xc1, + 0x05, 0xa0, 0xb5, 0x9f, 0xee, 0xbe, 0x04, 0x24, + 0x02, 0x00, 0xc7, 0x9f, 0xcf, 0x0e, 0xc7, 0x28, + 0xfc, 0x06, 0x01, 0x00, 0x07, 0x02, 0x30, 0x07, + 0x02, 0x30, 0x07, 0x02, 0x30, 0x07, 0x02, 0x30, + 0x07, 0x02, 0x30, 0x0d, 0x43, 0x06, 0x00, 0x00, + 0x01, 0x06, 0x01, 0x04, 0x04, 0x00, 0x48, 0x07, + 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, 0x00, + 0x00, 0x00, 0xa4, 0x03, 0x00, 0x01, 0x00, 0xa6, + 0x03, 0x00, 0x02, 0x00, 0xa8, 0x03, 0x00, 0x03, + 0x00, 0x10, 0x00, 0x01, 0x00, 0x98, 0x01, 0x00, + 0x01, 0x00, 0x82, 0x07, 0x0b, 0x01, 0x9e, 0x07, + 0x19, 0x01, 0xc8, 0x07, 0x2e, 0x01, 0xd2, 0x07, + 0x33, 0x01, 0x08, 0xc2, 0x04, 0x0c, 0x01, 0xc2, + 0x05, 0xdc, 0x43, 0xa7, 0x03, 0x00, 0x00, 0xc1, + 0x04, 0x04, 0xa2, 0x03, 0x00, 0x00, 0x24, 0x02, + 0x00, 0x98, 0xe9, 0x10, 0x39, 0xbf, 0x00, 0x00, + 0x00, 0x11, 0x04, 0x36, 0x05, 0x00, 0x00, 0x21, + 0x01, 0x00, 0x2f, 0xdd, 0xed, 0xc8, 0xc1, 0x05, + 0xb5, 0x48, 0xc9, 0xc1, 0x04, 0x04, 0xa2, 0x03, + 0x00, 0x00, 0x48, 0xca, 0xde, 0xd0, 0xee, 0xcb, + 0xc4, 0xed, 0x0e, 0xdf, 0xc6, 0xc7, 0xc5, 0x23, + 0x03, 0x00, 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, + 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x04, 0x03, + 0x00, 0x6b, 0x05, 0xa0, 0x03, 0x00, 0x00, 0x00, + 0xa2, 0x03, 0x00, 0x01, 0x00, 0xa4, 0x03, 0x00, + 0x02, 0x00, 0x98, 0x01, 0x00, 0x01, 0x00, 0x10, + 0x00, 0x01, 0x00, 0xb4, 0x03, 0x08, 0x01, 0xa6, + 0x07, 0x1d, 0x01, 0xdc, 0x07, 0x3b, 0x01, 0x08, + 0xc2, 0x04, 0x0c, 0x01, 0xcb, 0xc7, 0xe8, 0xb4, + 0xa6, 0x11, 0xea, 0x07, 0x0e, 0x06, 0xc7, 0xb4, + 0x48, 0xad, 0xe9, 0x04, 0x06, 0xeb, 0x04, 0xc7, + 0xb4, 0x48, 0xc8, 0x07, 0xc1, 0x04, 0xae, 0x11, + 0xe9, 0x1b, 0x0e, 0x04, 0x48, 0x00, 0x00, 0x00, + 0xdc, 0x43, 0x0b, 0x00, 0x00, 0x00, 0xc1, 0x04, + 0x24, 0x01, 0x00, 0xad, 0x11, 0xe9, 0x06, 0x0e, + 0xdd, 0xc1, 0x04, 0xee, 0xcd, 0x98, 0x11, 0xea, + 0x0a, 0x0e, 0xc5, 0x04, 0x1b, 0x05, 0x00, 0x00, + 0x48, 0x98, 0xe9, 0x10, 0x39, 0xbf, 0x00, 0x00, + 0x00, 0x11, 0x04, 0x37, 0x05, 0x00, 0x00, 0x21, + 0x01, 0x00, 0x2f, 0x39, 0x90, 0x00, 0x00, 0x00, + 0xc4, 0xee, 0xca, 0xde, 0xc1, 0x04, 0xc6, 0x23, + 0x02, 0x00, 0xfc, 0x06, 0x01, 0x00, 0x07, 0x02, + 0x30, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x0d, 0x43, 0x06, 0x00, + 0x00, 0x00, 0x07, 0x00, 0x0b, 0x05, 0x00, 0xe6, + 0x01, 0x07, 0xa0, 0x03, 0x00, 0x00, 0x00, 0xa2, + 0x03, 0x00, 0x01, 0x00, 0xa4, 0x03, 0x00, 0x02, + 0x00, 0xa6, 0x03, 0x00, 0x03, 0x00, 0xa8, 0x03, + 0x00, 0x04, 0x00, 0xaa, 0x03, 0x00, 0x05, 0x00, + 0x10, 0x00, 0x01, 0x00, 0x9a, 0x07, 0x17, 0x01, + 0xb4, 0x03, 0x08, 0x01, 0xa6, 0x07, 0x1d, 0x01, + 0x82, 0x07, 0x0b, 0x01, 0x88, 0x07, 0x0e, 0x01, + 0x08, 0xc2, 0x06, 0x06, 0xc8, 0xdc, 0x11, 0x21, + 0x00, 0x00, 0xc9, 0x04, 0x38, 0x05, 0x00, 0x00, + 0x04, 0x39, 0x05, 0x00, 0x00, 0x04, 0xfe, 0x04, + 0x00, 0x00, 0x04, 0x01, 0x05, 0x00, 0x00, 0x04, + 0x06, 0x05, 0x00, 0x00, 0x04, 0x09, 0x05, 0x00, + 0x00, 0x04, 0x0b, 0x05, 0x00, 0x00, 0x04, 0x0d, + 0x05, 0x00, 0x00, 0x04, 0x0f, 0x05, 0x00, 0x00, + 0x04, 0x10, 0x05, 0x00, 0x00, 0x04, 0x13, 0x05, + 0x00, 0x00, 0x26, 0x0b, 0x00, 0xca, 0x07, 0xc1, + 0x06, 0xae, 0x11, 0xe9, 0x1b, 0x0e, 0x04, 0x48, + 0x00, 0x00, 0x00, 0xdd, 0x43, 0x0b, 0x00, 0x00, + 0x00, 0xc1, 0x06, 0x24, 0x01, 0x00, 0xad, 0x11, + 0xe9, 0x06, 0x0e, 0xde, 0xc1, 0x06, 0xee, 0xcf, + 0x98, 0x11, 0xea, 0x0a, 0x0e, 0xc7, 0x04, 0x1b, + 0x05, 0x00, 0x00, 0x48, 0x98, 0xe9, 0x10, 0x39, + 0xbf, 0x00, 0x00, 0x00, 0x11, 0x04, 0x3a, 0x05, + 0x00, 0x00, 0x21, 0x01, 0x00, 0x2f, 0xb4, 0xc2, + 0x04, 0xc6, 0xe8, 0xc2, 0x05, 0xc1, 0x04, 0xc1, + 0x05, 0xa5, 0xe9, 0x4b, 0xdf, 0x43, 0xa7, 0x03, + 0x00, 0x00, 0xc7, 0x04, 0xf1, 0x04, 0x00, 0x00, + 0xc6, 0xc1, 0x04, 0x48, 0x9f, 0x04, 0xf2, 0x04, + 0x00, 0x00, 0x9f, 0xcc, 0x24, 0x02, 0x00, 0x11, + 0xe9, 0x28, 0x0e, 0xc5, 0xc6, 0xc1, 0x04, 0x48, + 0x72, 0x0b, 0xc7, 0xc4, 0x48, 0x4d, 0x3f, 0x00, + 0x00, 0x00, 0xb4, 0x98, 0x4d, 0x3d, 0x00, 0x00, + 0x00, 0xb4, 0x98, 0x4d, 0x3c, 0x00, 0x00, 0x00, + 0xb4, 0x98, 0x4d, 0x3e, 0x00, 0x00, 0x00, 0x16, + 0x4a, 0x0e, 0x95, 0x04, 0xeb, 0xb0, 0x5f, 0x04, + 0x00, 0x0b, 0xc5, 0x23, 0x02, 0x00, 0xfc, 0x06, + 0x01, 0x00, 0x07, 0xd0, 0x02, 0x28, 0x3f, 0x3a, + 0x5b, 0x45, 0x65, 0x63, 0x5d, 0x7b, 0x31, 0x2c, + 0x36, 0x7d, 0x7c, 0x47, 0x7b, 0x31, 0x2c, 0x35, + 0x7d, 0x7c, 0x5b, 0x51, 0x71, 0x5d, 0x7b, 0x31, + 0x2c, 0x35, 0x7d, 0x7c, 0x28, 0x3f, 0x3a, 0x5b, + 0x79, 0x59, 0x75, 0x72, 0x5d, 0x2b, 0x7c, 0x55, + 0x7b, 0x31, 0x2c, 0x35, 0x7d, 0x29, 0x7c, 0x5b, + 0x4d, 0x4c, 0x5d, 0x7b, 0x31, 0x2c, 0x35, 0x7d, + 0x7c, 0x64, 0x7b, 0x31, 0x2c, 0x32, 0x7d, 0x7c, + 0x44, 0x7b, 0x31, 0x2c, 0x33, 0x7d, 0x7c, 0x46, + 0x7b, 0x31, 0x7d, 0x7c, 0x5b, 0x61, 0x62, 0x42, + 0x5d, 0x7b, 0x31, 0x2c, 0x35, 0x7d, 0x7c, 0x5b, + 0x68, 0x6b, 0x48, 0x4b, 0x5d, 0x7b, 0x31, 0x2c, + 0x32, 0x7d, 0x7c, 0x77, 0x7b, 0x31, 0x2c, 0x32, + 0x7d, 0x7c, 0x57, 0x7b, 0x31, 0x7d, 0x7c, 0x6d, + 0x7b, 0x31, 0x2c, 0x32, 0x7d, 0x7c, 0x73, 0x7b, + 0x31, 0x2c, 0x32, 0x7d, 0x7c, 0x5b, 0x7a, 0x5a, + 0x4f, 0x76, 0x56, 0x78, 0x58, 0x5d, 0x7b, 0x31, + 0x2c, 0x34, 0x7d, 0x29, 0x28, 0x3f, 0x3d, 0x28, + 0x5b, 0x5e, 0x27, 0x5d, 0x2a, 0x27, 0x5b, 0x5e, + 0x27, 0x5d, 0x2a, 0x27, 0x29, 0x2a, 0x5b, 0x5e, + 0x27, 0x5d, 0x2a, 0x24, 0x29, 0x07, 0x9e, 0x0b, + 0x01, 0x02, 0x01, 0xc8, 0x02, 0x00, 0x00, 0x08, + 0x06, 0x00, 0x00, 0x00, 0x04, 0x07, 0xf5, 0xff, + 0xff, 0xff, 0x0b, 0x00, 0x09, 0x0c, 0x02, 0x00, + 0x00, 0x09, 0xed, 0x01, 0x00, 0x00, 0x09, 0xce, + 0x01, 0x00, 0x00, 0x09, 0xaf, 0x01, 0x00, 0x00, + 0x09, 0x90, 0x01, 0x00, 0x00, 0x09, 0x61, 0x01, + 0x00, 0x00, 0x09, 0x3a, 0x01, 0x00, 0x00, 0x09, + 0x1b, 0x01, 0x00, 0x00, 0x09, 0xfc, 0x00, 0x00, + 0x00, 0x09, 0xdd, 0x00, 0x00, 0x00, 0x09, 0xba, + 0x00, 0x00, 0x00, 0x09, 0x6c, 0x00, 0x00, 0x00, + 0x09, 0x45, 0x00, 0x00, 0x00, 0x09, 0x26, 0x00, + 0x00, 0x00, 0x1c, 0x10, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x15, 0x03, 0x00, 0x45, 0x00, + 0x45, 0x00, 0x63, 0x00, 0x63, 0x00, 0x65, 0x00, + 0x65, 0x00, 0x0a, 0x07, 0x15, 0x00, 0x00, 0x00, + 0x1c, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x01, 0x47, 0x00, 0x0a, 0x07, 0x1d, 0x00, + 0x00, 0x00, 0x1c, 0x0c, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x15, 0x02, 0x00, 0x51, 0x00, + 0x51, 0x00, 0x71, 0x00, 0x71, 0x00, 0x0a, 0x07, + 0x44, 0x00, 0x00, 0x00, 0x09, 0x2a, 0x00, 0x00, + 0x00, 0x1c, 0x14, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0x7f, 0x01, 0x00, + 0x00, 0x00, 0x15, 0x04, 0x00, 0x59, 0x00, 0x59, + 0x00, 0x72, 0x00, 0x72, 0x00, 0x75, 0x00, 0x75, + 0x00, 0x79, 0x00, 0x79, 0x00, 0x0a, 0x07, 0x15, + 0x00, 0x00, 0x00, 0x1c, 0x04, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x55, 0x00, 0x0a, + 0x07, 0x19, 0x00, 0x00, 0x00, 0x1c, 0x08, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x15, 0x01, + 0x00, 0x4c, 0x00, 0x4d, 0x00, 0x0a, 0x07, 0x15, + 0x00, 0x00, 0x00, 0x1c, 0x04, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x64, 0x00, 0x0a, + 0x07, 0x15, 0x00, 0x00, 0x00, 0x1c, 0x04, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x44, + 0x00, 0x0a, 0x07, 0x15, 0x00, 0x00, 0x00, 0x1c, + 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x46, 0x00, 0x0a, 0x07, 0x1d, 0x00, 0x00, + 0x00, 0x1c, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x15, 0x02, 0x00, 0x42, 0x00, 0x42, + 0x00, 0x61, 0x00, 0x62, 0x00, 0x0a, 0x07, 0x25, + 0x00, 0x00, 0x00, 0x1c, 0x14, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x15, 0x04, 0x00, 0x48, + 0x00, 0x48, 0x00, 0x4b, 0x00, 0x4b, 0x00, 0x68, + 0x00, 0x68, 0x00, 0x6b, 0x00, 0x6b, 0x00, 0x0a, + 0x07, 0x15, 0x00, 0x00, 0x00, 0x1c, 0x04, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x77, + 0x00, 0x0a, 0x07, 0x15, 0x00, 0x00, 0x00, 0x1c, + 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x57, 0x00, 0x0a, 0x07, 0x15, 0x00, 0x00, + 0x00, 0x1c, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x01, 0x6d, 0x00, 0x0a, 0x07, 0x15, + 0x00, 0x00, 0x00, 0x1c, 0x04, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x73, 0x00, 0x0a, + 0x07, 0x31, 0x00, 0x00, 0x00, 0x1c, 0x20, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x15, 0x07, + 0x00, 0x4f, 0x00, 0x4f, 0x00, 0x56, 0x00, 0x56, + 0x00, 0x58, 0x00, 0x58, 0x00, 0x5a, 0x00, 0x5a, + 0x00, 0x76, 0x00, 0x76, 0x00, 0x78, 0x00, 0x78, + 0x00, 0x7a, 0x00, 0x7a, 0x00, 0x0a, 0x17, 0x71, + 0x00, 0x00, 0x00, 0x0d, 0x01, 0x01, 0x09, 0x4a, + 0x00, 0x00, 0x00, 0x19, 0x0b, 0x01, 0x1c, 0x0c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, + 0xff, 0xff, 0x7f, 0x01, 0x00, 0x00, 0x00, 0x15, + 0x02, 0x00, 0x00, 0x00, 0x26, 0x00, 0x28, 0x00, + 0xff, 0xff, 0x0a, 0x01, 0x27, 0x00, 0x1c, 0x0c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, + 0xff, 0xff, 0x7f, 0x01, 0x00, 0x00, 0x00, 0x15, + 0x02, 0x00, 0x00, 0x00, 0x26, 0x00, 0x28, 0x00, + 0xff, 0xff, 0x0a, 0x01, 0x27, 0x00, 0x0c, 0x01, + 0x1a, 0xb1, 0xff, 0xff, 0xff, 0x1c, 0x0c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0x7f, 0x01, 0x00, 0x00, 0x00, 0x15, 0x02, + 0x00, 0x00, 0x00, 0x26, 0x00, 0x28, 0x00, 0xff, + 0xff, 0x0a, 0x06, 0x0a, 0x0c, 0x00, 0x0a, 0x07, + 0x42, 0x5e, 0x5b, 0x5c, 0x73, 0x5c, 0x75, 0x46, + 0x45, 0x46, 0x46, 0x5c, 0x78, 0x41, 0x30, 0x5d, + 0x2b, 0x7c, 0x5b, 0x5c, 0x73, 0x5c, 0x75, 0x46, + 0x45, 0x46, 0x46, 0x5c, 0x78, 0x41, 0x30, 0x5d, + 0x2b, 0x24, 0x07, 0xba, 0x02, 0x01, 0x01, 0x00, + 0x96, 0x00, 0x00, 0x00, 0x08, 0x06, 0x00, 0x00, + 0x00, 0x04, 0x07, 0xf5, 0xff, 0xff, 0xff, 0x0b, + 0x00, 0x09, 0x43, 0x00, 0x00, 0x00, 0x05, 0x1c, + 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xff, 0xff, 0xff, 0x7f, 0x01, 0x00, 0x00, 0x00, + 0x15, 0x0a, 0x00, 0x09, 0x00, 0x0d, 0x00, 0x20, + 0x00, 0x20, 0x00, 0xa0, 0x00, 0xa0, 0x00, 0x80, + 0x16, 0x80, 0x16, 0x00, 0x20, 0x0a, 0x20, 0x28, + 0x20, 0x29, 0x20, 0x2f, 0x20, 0x2f, 0x20, 0x5f, + 0x20, 0x5f, 0x20, 0x00, 0x30, 0x00, 0x30, 0xff, + 0xfe, 0xff, 0xfe, 0x0a, 0x07, 0x3e, 0x00, 0x00, + 0x00, 0x1c, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xff, 0x7f, 0x01, 0x00, + 0x00, 0x00, 0x15, 0x0a, 0x00, 0x09, 0x00, 0x0d, + 0x00, 0x20, 0x00, 0x20, 0x00, 0xa0, 0x00, 0xa0, + 0x00, 0x80, 0x16, 0x80, 0x16, 0x00, 0x20, 0x0a, + 0x20, 0x28, 0x20, 0x29, 0x20, 0x2f, 0x20, 0x2f, + 0x20, 0x5f, 0x20, 0x5f, 0x20, 0x00, 0x30, 0x00, + 0x30, 0xff, 0xfe, 0xff, 0xfe, 0x0a, 0x06, 0x0c, + 0x00, 0x0a, 0x07, 0x1e, 0x5b, 0x72, 0x71, 0x51, + 0x41, 0x53, 0x6a, 0x4a, 0x67, 0x77, 0x57, 0x49, + 0x51, 0x71, 0x5d, 0x07, 0x7c, 0x00, 0x01, 0x00, + 0x37, 0x00, 0x00, 0x00, 0x08, 0x06, 0x00, 0x00, + 0x00, 0x04, 0x07, 0xf5, 0xff, 0xff, 0xff, 0x0b, + 0x00, 0x15, 0x09, 0x00, 0x41, 0x00, 0x41, 0x00, + 0x49, 0x00, 0x4a, 0x00, 0x51, 0x00, 0x51, 0x00, + 0x53, 0x00, 0x53, 0x00, 0x57, 0x00, 0x57, 0x00, + 0x67, 0x00, 0x67, 0x00, 0x6a, 0x00, 0x6a, 0x00, + 0x71, 0x00, 0x72, 0x00, 0x77, 0x00, 0x77, 0x00, + 0x0c, 0x00, 0x0a, 0x0d, 0x43, 0x06, 0x00, 0xe8, + 0x07, 0x01, 0x01, 0x01, 0x04, 0x01, 0x00, 0x21, + 0x02, 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, + 0x00, 0x00, 0x00, 0xde, 0x03, 0x45, 0x01, 0xb4, + 0xc8, 0xc4, 0xdc, 0xe8, 0xa5, 0xe9, 0x17, 0xd0, + 0x43, 0x20, 0x02, 0x00, 0x00, 0xdc, 0xc4, 0x48, + 0x24, 0x01, 0x00, 0xe9, 0x04, 0xb5, 0x98, 0x28, + 0xb5, 0x96, 0x00, 0xeb, 0xe5, 0xb4, 0x98, 0x28, + 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, + 0xce, 0x03, 0x01, 0x01, 0x01, 0x04, 0x01, 0x00, + 0x21, 0x02, 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, + 0x03, 0x00, 0x00, 0x00, 0xe6, 0x07, 0x44, 0x01, + 0xb4, 0xc8, 0xc4, 0xdc, 0xe8, 0xa5, 0xe9, 0x17, + 0xd0, 0x43, 0x20, 0x02, 0x00, 0x00, 0xdc, 0xc4, + 0x48, 0x24, 0x01, 0x00, 0xe9, 0x04, 0xb5, 0x98, + 0x28, 0xb5, 0x96, 0x00, 0xeb, 0xe5, 0xb4, 0x98, + 0x28, 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, + 0x00, 0xea, 0x07, 0x02, 0x03, 0x02, 0x05, 0x02, + 0x00, 0x9a, 0x01, 0x05, 0xa0, 0x03, 0x00, 0x01, + 0x00, 0xa2, 0x03, 0x00, 0x01, 0x00, 0xa4, 0x03, + 0x00, 0x00, 0x00, 0xa6, 0x03, 0x00, 0x01, 0x00, + 0xa8, 0x03, 0x00, 0x02, 0x00, 0xe6, 0x07, 0x44, + 0x01, 0xde, 0x03, 0x45, 0x01, 0x0b, 0x0b, 0x4d, + 0xd8, 0x01, 0x00, 0x00, 0xc8, 0xb4, 0xc9, 0xc5, + 0xdc, 0xe8, 0xa5, 0xe9, 0x41, 0xd0, 0xdc, 0xc5, + 0x48, 0x48, 0x11, 0xe9, 0x0e, 0x0e, 0xc4, 0xdc, + 0xc5, 0x48, 0x72, 0xd0, 0xdc, 0xc5, 0x48, 0x48, + 0x16, 0x4a, 0x0e, 0xd0, 0x42, 0xd8, 0x01, 0x00, + 0x00, 0xdc, 0xc5, 0x48, 0x48, 0x11, 0xe9, 0x18, + 0x0e, 0xc4, 0x42, 0xd8, 0x01, 0x00, 0x00, 0xdc, + 0xc5, 0x48, 0x72, 0xd0, 0x42, 0xd8, 0x01, 0x00, + 0x00, 0xdc, 0xc5, 0x48, 0x48, 0x16, 0x4a, 0x0e, + 0xb5, 0x96, 0x01, 0xeb, 0xbb, 0xb4, 0xca, 0xc6, + 0xdd, 0xe8, 0xa5, 0xe9, 0x41, 0xd1, 0xdd, 0xc6, + 0x48, 0x48, 0x11, 0xe9, 0x0e, 0x0e, 0xc4, 0xdd, + 0xc6, 0x48, 0x72, 0xd1, 0xdd, 0xc6, 0x48, 0x48, + 0x16, 0x4a, 0x0e, 0xd1, 0x42, 0xd8, 0x01, 0x00, + 0x00, 0xdd, 0xc6, 0x48, 0x48, 0x11, 0xe9, 0x18, + 0x0e, 0xc4, 0x42, 0xd8, 0x01, 0x00, 0x00, 0xdd, + 0xc6, 0x48, 0x72, 0xd1, 0x42, 0xd8, 0x01, 0x00, + 0x00, 0xdd, 0xc6, 0x48, 0x48, 0x16, 0x4a, 0x0e, + 0xb5, 0x96, 0x02, 0xeb, 0xbb, 0xc4, 0x28, 0xfc, + 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0xec, + 0x07, 0x01, 0x00, 0x01, 0x05, 0x01, 0x03, 0x41, + 0x01, 0xa0, 0x03, 0x00, 0x01, 0x00, 0xf6, 0x04, + 0x42, 0x01, 0xd0, 0xd0, 0x42, 0x3b, 0x05, 0x00, + 0x00, 0x43, 0xc9, 0x04, 0x00, 0x00, 0xbe, 0x00, + 0xbe, 0x01, 0x33, 0xbf, 0x02, 0x24, 0x02, 0x00, + 0x44, 0x3c, 0x05, 0x00, 0x00, 0xd0, 0xd0, 0x42, + 0x3c, 0x05, 0x00, 0x00, 0x43, 0xc9, 0x04, 0x00, + 0x00, 0x04, 0x3d, 0x05, 0x00, 0x00, 0xc0, 0x24, + 0x02, 0x00, 0x43, 0xc9, 0x04, 0x00, 0x00, 0xdc, + 0xc0, 0x24, 0x02, 0x00, 0x44, 0x3e, 0x05, 0x00, + 0x00, 0xd0, 0x28, 0xfc, 0x06, 0x01, 0x00, 0x07, + 0x12, 0x27, 0x28, 0x5b, 0x5e, 0x27, 0x5d, 0x2a, + 0x29, 0x27, 0x07, 0x7c, 0x01, 0x02, 0x00, 0x37, + 0x00, 0x00, 0x00, 0x08, 0x06, 0x00, 0x00, 0x00, + 0x04, 0x07, 0xf5, 0xff, 0xff, 0xff, 0x0b, 0x00, + 0x01, 0x27, 0x00, 0x0b, 0x01, 0x1c, 0x0c, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xff, 0x7f, 0x01, 0x00, 0x00, 0x00, 0x15, 0x02, + 0x00, 0x00, 0x00, 0x26, 0x00, 0x28, 0x00, 0xff, + 0xff, 0x0a, 0x0c, 0x01, 0x01, 0x27, 0x00, 0x0c, + 0x00, 0x0a, 0x0d, 0x43, 0x06, 0x00, 0x00, 0x02, + 0x00, 0x02, 0x02, 0x00, 0x00, 0x0b, 0x02, 0xa0, + 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, 0x00, 0x01, + 0x00, 0xd1, 0x11, 0xea, 0x07, 0x0e, 0x04, 0xe1, + 0x04, 0x00, 0x00, 0x28, 0xfc, 0x06, 0x01, 0x00, + 0x0d, 0x43, 0x06, 0x00, 0xee, 0x07, 0x02, 0x00, + 0x02, 0x08, 0x00, 0x00, 0xaa, 0x07, 0x02, 0xa0, + 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, 0x00, 0x01, + 0x00, 0xd0, 0x43, 0xd8, 0x04, 0x00, 0x00, 0xb4, + 0x24, 0x01, 0x00, 0x11, 0x04, 0xdd, 0x01, 0x00, + 0x00, 0xad, 0xe9, 0x2e, 0xd1, 0x04, 0xa7, 0x04, + 0x00, 0x00, 0x04, 0xa7, 0x04, 0x00, 0x00, 0x04, + 0xa7, 0x04, 0x00, 0x00, 0x04, 0xa9, 0x04, 0x00, + 0x00, 0x04, 0xa5, 0x04, 0x00, 0x00, 0x26, 0x05, + 0x00, 0xd0, 0xe8, 0xb5, 0xa0, 0x48, 0x44, 0x93, + 0x04, 0x00, 0x00, 0x04, 0x3f, 0x05, 0x00, 0x00, + 0x28, 0x11, 0x04, 0xc6, 0x01, 0x00, 0x00, 0xad, + 0xea, 0x25, 0x11, 0x04, 0xe5, 0x01, 0x00, 0x00, + 0xad, 0xea, 0x1c, 0x11, 0x04, 0xd9, 0x00, 0x00, + 0x00, 0xad, 0xea, 0x13, 0x11, 0x04, 0xde, 0x01, + 0x00, 0x00, 0xad, 0xea, 0x0a, 0x11, 0x04, 0xd1, + 0x00, 0x00, 0x00, 0xad, 0xe9, 0x1f, 0xd1, 0xb6, + 0xd0, 0xe8, 0xad, 0xe9, 0x08, 0x04, 0x9f, 0x04, + 0x00, 0x00, 0xeb, 0x06, 0x04, 0x9e, 0x04, 0x00, + 0x00, 0x44, 0x94, 0x04, 0x00, 0x00, 0x04, 0x40, + 0x05, 0x00, 0x00, 0x28, 0x11, 0x04, 0xe9, 0x01, + 0x00, 0x00, 0xad, 0xea, 0x0a, 0x11, 0x04, 0xdb, + 0x01, 0x00, 0x00, 0xad, 0xe9, 0x2e, 0xd1, 0x04, + 0x9e, 0x04, 0x00, 0x00, 0x04, 0x9f, 0x04, 0x00, + 0x00, 0x04, 0xa7, 0x04, 0x00, 0x00, 0x04, 0xa9, + 0x04, 0x00, 0x00, 0x04, 0xa5, 0x04, 0x00, 0x00, + 0x26, 0x05, 0x00, 0xd0, 0xe8, 0xb5, 0xa0, 0x48, + 0x44, 0x98, 0x04, 0x00, 0x00, 0x04, 0x41, 0x05, + 0x00, 0x00, 0x28, 0x11, 0x04, 0xd9, 0x01, 0x00, + 0x00, 0xad, 0xea, 0x0a, 0x11, 0x04, 0xd4, 0x01, + 0x00, 0x00, 0xad, 0xe9, 0x2e, 0xd1, 0x04, 0x9e, + 0x04, 0x00, 0x00, 0x04, 0x9f, 0x04, 0x00, 0x00, + 0x04, 0xa7, 0x04, 0x00, 0x00, 0x04, 0xa9, 0x04, + 0x00, 0x00, 0x04, 0xa5, 0x04, 0x00, 0x00, 0x26, + 0x05, 0x00, 0xd0, 0xe8, 0xb5, 0xa0, 0x48, 0x44, + 0x95, 0x04, 0x00, 0x00, 0x04, 0x42, 0x05, 0x00, + 0x00, 0x28, 0x11, 0x04, 0xc8, 0x01, 0x00, 0x00, + 0xad, 0xe9, 0x1f, 0xd1, 0xb6, 0xd0, 0xe8, 0xad, + 0xe9, 0x08, 0x04, 0x9f, 0x04, 0x00, 0x00, 0xeb, + 0x06, 0x04, 0x9e, 0x04, 0x00, 0x00, 0x44, 0x43, + 0x05, 0x00, 0x00, 0x04, 0x44, 0x05, 0x00, 0x00, + 0x28, 0x11, 0x04, 0xe4, 0x01, 0x00, 0x00, 0xad, + 0xe9, 0x12, 0xd1, 0x04, 0x9e, 0x04, 0x00, 0x00, + 0x44, 0x43, 0x05, 0x00, 0x00, 0x04, 0x44, 0x05, + 0x00, 0x00, 0x28, 0x11, 0x04, 0xc5, 0x01, 0x00, + 0x00, 0xad, 0xe9, 0x1f, 0xd1, 0xb6, 0xd0, 0xe8, + 0xad, 0xe9, 0x08, 0x04, 0x9f, 0x04, 0x00, 0x00, + 0xeb, 0x06, 0x04, 0x9e, 0x04, 0x00, 0x00, 0x44, + 0x96, 0x04, 0x00, 0x00, 0x04, 0x45, 0x05, 0x00, + 0x00, 0x28, 0x11, 0x04, 0xcf, 0x01, 0x00, 0x00, + 0xad, 0xea, 0x13, 0x11, 0x04, 0xd2, 0x01, 0x00, + 0x00, 0xad, 0xea, 0x0a, 0x11, 0x04, 0xc1, 0x01, + 0x00, 0x00, 0xad, 0xe9, 0x12, 0xd1, 0x04, 0x9e, + 0x04, 0x00, 0x00, 0x44, 0x96, 0x04, 0x00, 0x00, + 0x04, 0x45, 0x05, 0x00, 0x00, 0x28, 0x11, 0x04, + 0xd1, 0x01, 0x00, 0x00, 0xad, 0xe9, 0x33, 0xd1, + 0x04, 0xa7, 0x04, 0x00, 0x00, 0x04, 0xa7, 0x04, + 0x00, 0x00, 0x04, 0xa7, 0x04, 0x00, 0x00, 0x04, + 0xa9, 0x04, 0x00, 0x00, 0x04, 0xa5, 0x04, 0x00, + 0x00, 0x04, 0xa7, 0x04, 0x00, 0x00, 0x26, 0x06, + 0x00, 0xd0, 0xe8, 0xb5, 0xa0, 0x48, 0x44, 0x97, + 0x04, 0x00, 0x00, 0x04, 0x44, 0x05, 0x00, 0x00, + 0x28, 0x11, 0x04, 0xd0, 0x00, 0x00, 0x00, 0xad, + 0xe9, 0x33, 0xd1, 0x04, 0x9e, 0x04, 0x00, 0x00, + 0x04, 0x9f, 0x04, 0x00, 0x00, 0x04, 0xa7, 0x04, + 0x00, 0x00, 0x04, 0xa9, 0x04, 0x00, 0x00, 0x04, + 0xa5, 0x04, 0x00, 0x00, 0x04, 0xa7, 0x04, 0x00, + 0x00, 0x26, 0x06, 0x00, 0xd0, 0xe8, 0xb5, 0xa0, + 0x48, 0x44, 0x97, 0x04, 0x00, 0x00, 0x04, 0x44, + 0x05, 0x00, 0x00, 0x28, 0x11, 0x04, 0xda, 0x00, + 0x00, 0x00, 0xad, 0xe9, 0x2f, 0xd1, 0x04, 0x9e, + 0x04, 0x00, 0x00, 0x06, 0x04, 0xa7, 0x04, 0x00, + 0x00, 0x04, 0xa9, 0x04, 0x00, 0x00, 0x04, 0xa5, + 0x04, 0x00, 0x00, 0x04, 0xa7, 0x04, 0x00, 0x00, + 0x26, 0x06, 0x00, 0xd0, 0xe8, 0xb5, 0xa0, 0x48, + 0x44, 0x97, 0x04, 0x00, 0x00, 0x04, 0x44, 0x05, + 0x00, 0x00, 0x28, 0x11, 0x04, 0xd4, 0x00, 0x00, + 0x00, 0xad, 0xea, 0x13, 0x11, 0x04, 0xc7, 0x01, + 0x00, 0x00, 0xad, 0xea, 0x0a, 0x11, 0x04, 0xe0, + 0x01, 0x00, 0x00, 0xad, 0xe9, 0x0f, 0xd1, 0xb4, + 0x98, 0x44, 0x9c, 0x04, 0x00, 0x00, 0x04, 0x3d, + 0x05, 0x00, 0x00, 0x28, 0x11, 0x04, 0xc2, 0x01, + 0x00, 0x00, 0xad, 0xea, 0x0a, 0x11, 0x04, 0xdf, + 0x01, 0x00, 0x00, 0xad, 0xe9, 0x1f, 0xd1, 0xb6, + 0xd0, 0xe8, 0xad, 0xe9, 0x08, 0x04, 0x9f, 0x04, + 0x00, 0x00, 0xeb, 0x06, 0x04, 0x9e, 0x04, 0x00, + 0x00, 0x44, 0x99, 0x04, 0x00, 0x00, 0x04, 0x46, + 0x05, 0x00, 0x00, 0x28, 0x11, 0x04, 0xc9, 0x01, + 0x00, 0x00, 0xad, 0xea, 0x0a, 0x11, 0x04, 0xe2, + 0x01, 0x00, 0x00, 0xad, 0xe9, 0x27, 0xd1, 0xb4, + 0x98, 0x44, 0x9c, 0x04, 0x00, 0x00, 0xd1, 0xb6, + 0xd0, 0xe8, 0xad, 0xe9, 0x08, 0x04, 0x9f, 0x04, + 0x00, 0x00, 0xeb, 0x06, 0x04, 0x9e, 0x04, 0x00, + 0x00, 0x44, 0x99, 0x04, 0x00, 0x00, 0x04, 0x46, + 0x05, 0x00, 0x00, 0x28, 0x11, 0x04, 0xc0, 0x01, + 0x00, 0x00, 0xad, 0xe9, 0x1f, 0xd1, 0xb6, 0xd0, + 0xe8, 0xad, 0xe9, 0x08, 0x04, 0x9f, 0x04, 0x00, + 0x00, 0xeb, 0x06, 0x04, 0x9e, 0x04, 0x00, 0x00, + 0x44, 0x9a, 0x04, 0x00, 0x00, 0x04, 0x47, 0x05, + 0x00, 0x00, 0x28, 0x11, 0x04, 0xd8, 0x00, 0x00, + 0x00, 0xad, 0xe9, 0x1f, 0xd1, 0xb6, 0xd0, 0xe8, + 0xad, 0xe9, 0x08, 0x04, 0x9f, 0x04, 0x00, 0x00, + 0xeb, 0x06, 0x04, 0x9e, 0x04, 0x00, 0x00, 0x44, + 0x9b, 0x04, 0x00, 0x00, 0x04, 0x48, 0x05, 0x00, + 0x00, 0x28, 0x11, 0x04, 0xcb, 0x01, 0x00, 0x00, + 0xad, 0xea, 0x0a, 0x11, 0x04, 0xda, 0x01, 0x00, + 0x00, 0xad, 0xe9, 0x12, 0xd1, 0x04, 0x9e, 0x04, + 0x00, 0x00, 0x44, 0x9b, 0x04, 0x00, 0x00, 0x04, + 0x48, 0x05, 0x00, 0x00, 0x28, 0x11, 0x04, 0xcd, + 0x01, 0x00, 0x00, 0xad, 0xea, 0x37, 0x11, 0x04, + 0xe1, 0x01, 0x00, 0x00, 0xad, 0xea, 0x2e, 0x11, + 0x04, 0xce, 0x01, 0x00, 0x00, 0xad, 0xea, 0x25, + 0x11, 0x04, 0xc3, 0x01, 0x00, 0x00, 0xad, 0xea, + 0x1c, 0x11, 0x04, 0xe7, 0x01, 0x00, 0x00, 0xad, + 0xea, 0x13, 0x11, 0x04, 0xe8, 0x01, 0x00, 0x00, + 0xad, 0xea, 0x0a, 0x11, 0x04, 0xca, 0x01, 0x00, + 0x00, 0xad, 0xe9, 0x1f, 0xd1, 0xd0, 0xe8, 0xb8, + 0xa5, 0xe9, 0x08, 0x04, 0xa7, 0x04, 0x00, 0x00, + 0xeb, 0x06, 0x04, 0xa9, 0x04, 0x00, 0x00, 0x44, + 0x9d, 0x04, 0x00, 0x00, 0x04, 0x49, 0x05, 0x00, + 0x00, 0x28, 0x29, 0xfc, 0x06, 0x01, 0x00, 0x0d, + 0x43, 0x06, 0x00, 0xf0, 0x07, 0x02, 0x01, 0x02, + 0x05, 0x04, 0x02, 0x3f, 0x03, 0xa0, 0x03, 0x00, + 0x01, 0x00, 0xa2, 0x03, 0x00, 0x01, 0x00, 0xa4, + 0x03, 0x00, 0x00, 0x80, 0xee, 0x07, 0x4a, 0x01, + 0xe0, 0x06, 0x43, 0x01, 0xe4, 0x07, 0x41, 0x01, + 0xec, 0x07, 0x49, 0x01, 0xdd, 0x43, 0xda, 0x04, + 0x00, 0x00, 0xd1, 0x24, 0x01, 0x00, 0x98, 0xe9, + 0x32, 0x0b, 0xd1, 0x4d, 0x4a, 0x05, 0x00, 0x00, + 0x0b, 0x4d, 0xd8, 0x01, 0x00, 0x00, 0xcc, 0xd1, + 0x43, 0xc9, 0x04, 0x00, 0x00, 0xde, 0xbf, 0x00, + 0x24, 0x02, 0x00, 0x44, 0x3b, 0x05, 0x00, 0x00, + 0xd0, 0x43, 0xc9, 0x04, 0x00, 0x00, 0xde, 0xbf, + 0x01, 0x24, 0x02, 0x00, 0x0e, 0xdf, 0xc4, 0x23, + 0x01, 0x00, 0x29, 0xfc, 0x06, 0x01, 0x00, 0x0d, + 0x43, 0x06, 0x00, 0x00, 0x01, 0x00, 0x01, 0x03, + 0x02, 0x00, 0x0b, 0x01, 0xa0, 0x03, 0x00, 0x01, + 0x00, 0xee, 0x07, 0x00, 0x00, 0xa4, 0x03, 0x00, + 0x01, 0xdc, 0xd0, 0xdd, 0x42, 0xd8, 0x01, 0x00, + 0x00, 0x23, 0x02, 0x00, 0xfc, 0x06, 0x01, 0x00, + 0x0d, 0x43, 0x06, 0x00, 0x00, 0x01, 0x00, 0x01, + 0x03, 0x02, 0x00, 0x06, 0x01, 0xa0, 0x03, 0x00, + 0x01, 0x00, 0xee, 0x07, 0x00, 0x00, 0xa4, 0x03, + 0x00, 0x01, 0xdc, 0xd0, 0xdd, 0x23, 0x02, 0x00, + 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, + 0xf6, 0x07, 0x05, 0x03, 0x05, 0x05, 0x01, 0x00, + 0x97, 0x01, 0x08, 0xa0, 0x03, 0x00, 0x01, 0x00, + 0xa2, 0x03, 0x00, 0x01, 0x00, 0xa4, 0x03, 0x00, + 0x01, 0x00, 0xa6, 0x03, 0x00, 0x01, 0x00, 0xa8, + 0x03, 0x00, 0x01, 0x00, 0xaa, 0x03, 0x00, 0x00, + 0x00, 0xac, 0x03, 0x00, 0x01, 0x00, 0xae, 0x03, + 0x00, 0x02, 0x00, 0x82, 0x07, 0x0b, 0x01, 0xd0, + 0xd1, 0x48, 0xe9, 0x0f, 0xd0, 0xd1, 0x48, 0xd2, + 0x48, 0xe9, 0x08, 0xd0, 0xd1, 0x48, 0xd2, 0x48, + 0xeb, 0x09, 0xd0, 0x42, 0x4b, 0x05, 0x00, 0x00, + 0xd2, 0x48, 0xc8, 0x0b, 0x04, 0xa7, 0x04, 0x00, + 0x00, 0x04, 0xa9, 0x04, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xa5, 0x04, 0x00, 0x00, 0x04, 0xa9, + 0x04, 0x00, 0x00, 0x04, 0xa5, 0x04, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xa7, 0x04, 0x00, 0x00, + 0x04, 0xa7, 0x04, 0x00, 0x00, 0x04, 0xa5, 0x04, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xa9, 0x04, + 0x00, 0x00, 0xc9, 0xdc, 0x43, 0xa7, 0x03, 0x00, + 0x00, 0xc4, 0xd3, 0x24, 0x02, 0x00, 0xe9, 0x06, + 0xc4, 0xd3, 0x48, 0xeb, 0x22, 0xdc, 0x43, 0xa7, + 0x03, 0x00, 0x00, 0xc4, 0xc5, 0xd3, 0x48, 0xb4, + 0x48, 0x24, 0x02, 0x00, 0xe9, 0x0a, 0xc4, 0xc5, + 0xd3, 0x48, 0xb4, 0x48, 0x48, 0xeb, 0x08, 0xc4, + 0xc5, 0xd3, 0x48, 0xb5, 0x48, 0x48, 0xca, 0x07, + 0x5c, 0x04, 0x00, 0xae, 0xe9, 0x07, 0xc6, 0x5c, + 0x04, 0x00, 0x48, 0x28, 0xc6, 0x28, 0xfc, 0x06, + 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0xf8, 0x07, + 0x00, 0x04, 0x00, 0x04, 0x03, 0x00, 0x2a, 0x04, + 0xa0, 0x03, 0x00, 0x00, 0x00, 0xa2, 0x03, 0x00, + 0x01, 0x00, 0x98, 0x01, 0x00, 0x01, 0x00, 0x10, + 0x00, 0x01, 0x00, 0xd2, 0x04, 0x36, 0x01, 0xfa, + 0x07, 0x50, 0x01, 0xa0, 0x07, 0x1a, 0x01, 0x08, + 0xcb, 0x0c, 0x01, 0xca, 0xc6, 0xb4, 0x48, 0xc8, + 0xc6, 0xb5, 0x48, 0xc9, 0xc7, 0xe9, 0x0e, 0xc7, + 0xdc, 0xae, 0xe9, 0x09, 0xdd, 0xde, 0xc7, 0xee, + 0xc4, 0xc5, 0xf0, 0x28, 0xdc, 0x42, 0xad, 0x04, + 0x00, 0x00, 0x11, 0xc4, 0xc5, 0x21, 0x02, 0x00, + 0x28, 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, + 0x00, 0xfa, 0x07, 0x03, 0x15, 0x03, 0x08, 0x18, + 0x04, 0xc8, 0x06, 0x18, 0xa0, 0x03, 0x00, 0x01, + 0x00, 0xa2, 0x03, 0x00, 0x01, 0x00, 0xa4, 0x03, + 0x00, 0x01, 0x00, 0xa6, 0x03, 0x00, 0x00, 0x80, + 0xa8, 0x03, 0x00, 0x01, 0x00, 0xaa, 0x03, 0x00, + 0x02, 0x00, 0xae, 0x03, 0x00, 0x03, 0x00, 0xb0, + 0x03, 0x00, 0x04, 0x00, 0xb2, 0x03, 0x00, 0x05, + 0x00, 0xb4, 0x03, 0x00, 0x06, 0x00, 0xfe, 0x06, + 0x00, 0x07, 0x00, 0x88, 0x07, 0x00, 0x08, 0x00, + 0x8a, 0x07, 0x00, 0x09, 0x00, 0x8c, 0x07, 0x00, + 0x0a, 0x00, 0x8e, 0x07, 0x00, 0x0b, 0x00, 0x90, + 0x07, 0x00, 0x0c, 0x00, 0x92, 0x07, 0x00, 0x0d, + 0x00, 0x94, 0x07, 0x00, 0x0e, 0x00, 0xa0, 0x07, + 0x00, 0x0f, 0x00, 0xa2, 0x07, 0x00, 0x10, 0x00, + 0xa4, 0x07, 0x00, 0x11, 0x00, 0xa8, 0x07, 0x00, + 0x12, 0x00, 0xaa, 0x07, 0x00, 0x13, 0x00, 0xac, + 0x07, 0x00, 0x14, 0x00, 0x98, 0x07, 0x16, 0x01, + 0xf0, 0x07, 0x4b, 0x01, 0xe8, 0x07, 0x46, 0x01, + 0xce, 0x03, 0x47, 0x01, 0xea, 0x07, 0x48, 0x01, + 0xec, 0x07, 0x49, 0x01, 0xfc, 0x07, 0x51, 0x01, + 0x82, 0x07, 0x0b, 0x01, 0x86, 0x07, 0x0d, 0x01, + 0xf2, 0x07, 0x4c, 0x01, 0xac, 0x03, 0x04, 0x01, + 0xa6, 0x07, 0x1d, 0x01, 0x9e, 0x07, 0x19, 0x01, + 0x84, 0x07, 0x0c, 0x01, 0xc8, 0x07, 0x2e, 0x01, + 0xfe, 0x07, 0x52, 0x01, 0x9a, 0x07, 0x17, 0x01, + 0xa2, 0x05, 0x34, 0x01, 0x9c, 0x07, 0x18, 0x01, + 0x96, 0x07, 0x15, 0x01, 0xce, 0x07, 0x31, 0x01, + 0xbe, 0x07, 0x29, 0x01, 0x80, 0x07, 0x0a, 0x01, + 0x80, 0x08, 0x53, 0x01, 0x5f, 0x0b, 0x00, 0xd0, + 0xee, 0xc8, 0x5f, 0x0c, 0x00, 0xed, 0xc9, 0xb4, + 0x98, 0xc4, 0x04, 0xfa, 0x04, 0x00, 0x00, 0x48, + 0xad, 0xe9, 0x10, 0x39, 0xbf, 0x00, 0x00, 0x00, + 0x11, 0x04, 0xfb, 0x04, 0x00, 0x00, 0x21, 0x01, + 0x00, 0x2f, 0x5f, 0x0d, 0x00, 0xd0, 0x04, 0xd7, + 0x04, 0x00, 0x00, 0x0b, 0xbf, 0x00, 0x4e, 0x3f, + 0x00, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x00, + 0xf0, 0x0e, 0xc4, 0x04, 0xfa, 0x04, 0x00, 0x00, + 0x72, 0xb4, 0x98, 0x4a, 0x5f, 0x0e, 0x00, 0xd1, + 0xee, 0xca, 0x5f, 0x0f, 0x00, 0xd2, 0x04, 0x4c, + 0x05, 0x00, 0x00, 0x04, 0x4d, 0x05, 0x00, 0x00, + 0xf0, 0xd6, 0x5f, 0x10, 0x00, 0x11, 0x21, 0x00, + 0x00, 0xcb, 0x5f, 0x11, 0x00, 0xd2, 0x04, 0xf4, + 0x04, 0x00, 0x00, 0x04, 0x47, 0x00, 0x00, 0x00, + 0x5f, 0x12, 0x00, 0x11, 0x04, 0xea, 0x04, 0x00, + 0x00, 0x04, 0xf5, 0x04, 0x00, 0x00, 0x21, 0x02, + 0x00, 0x04, 0xf5, 0x04, 0x00, 0x00, 0x22, 0x05, + 0x00, 0xc2, 0x04, 0xc7, 0x04, 0xeb, 0x04, 0x00, + 0x00, 0xc1, 0x04, 0x4a, 0x5f, 0x13, 0x00, 0x42, + 0xad, 0x04, 0x00, 0x00, 0xc3, 0x05, 0x04, 0xa5, + 0x03, 0x00, 0x00, 0x48, 0xc2, 0x06, 0x5f, 0x14, + 0x00, 0xc1, 0x05, 0x04, 0xa2, 0x03, 0x00, 0x00, + 0x48, 0xc6, 0xc7, 0xc1, 0x05, 0x04, 0xa4, 0x03, + 0x00, 0x00, 0x48, 0xc1, 0x06, 0xb5, 0x98, 0x22, + 0x06, 0x00, 0xc2, 0x07, 0xc4, 0x04, 0xe5, 0x04, + 0x00, 0x00, 0x72, 0xc1, 0x07, 0x04, 0xe5, 0x04, + 0x00, 0x00, 0x48, 0x4a, 0xc4, 0x04, 0x4e, 0x05, + 0x00, 0x00, 0x72, 0xc1, 0x07, 0x04, 0x4f, 0x05, + 0x00, 0x00, 0x48, 0x4a, 0xc4, 0x04, 0xfc, 0x04, + 0x00, 0x00, 0x72, 0xc1, 0x07, 0x04, 0xfd, 0x04, + 0x00, 0x00, 0x48, 0x4a, 0xc4, 0x04, 0xef, 0x04, + 0x00, 0x00, 0x72, 0xc1, 0x07, 0x04, 0xef, 0x04, + 0x00, 0x00, 0x48, 0x4a, 0xc1, 0x07, 0x04, 0xef, + 0x04, 0x00, 0x00, 0x48, 0xc2, 0x08, 0xd2, 0x42, + 0x50, 0x05, 0x00, 0x00, 0xc2, 0x09, 0x06, 0xc1, + 0x09, 0xae, 0xe9, 0x20, 0x04, 0x51, 0x05, 0x00, + 0x00, 0x5f, 0x15, 0x00, 0xc1, 0x09, 0xee, 0xc3, + 0x09, 0xae, 0xe9, 0x10, 0x39, 0xbc, 0x00, 0x00, + 0x00, 0x11, 0x04, 0x52, 0x05, 0x00, 0x00, 0x21, + 0x01, 0x00, 0x2f, 0xc4, 0x04, 0x53, 0x05, 0x00, + 0x00, 0xc1, 0x09, 0x4a, 0x5f, 0x10, 0x00, 0x11, + 0x21, 0x00, 0x00, 0xcb, 0x5f, 0x06, 0x00, 0x7d, + 0xeb, 0x3d, 0xc2, 0x0a, 0x5f, 0x07, 0x00, 0x43, + 0xa7, 0x03, 0x00, 0x00, 0x5f, 0x06, 0x00, 0xc1, + 0x0a, 0x24, 0x02, 0x00, 0xe9, 0x29, 0x5f, 0x11, + 0x00, 0xd2, 0xc1, 0x0a, 0x04, 0x47, 0x00, 0x00, + 0x00, 0x5f, 0x06, 0x00, 0xc1, 0x0a, 0x48, 0x22, + 0x04, 0x00, 0xc2, 0x0b, 0xc7, 0x04, 0xf1, 0x04, + 0x00, 0x00, 0xc1, 0x0a, 0x9f, 0x04, 0xf2, 0x04, + 0x00, 0x00, 0x9f, 0xc1, 0x0b, 0x4a, 0x80, 0xe9, + 0xc2, 0x0e, 0x0e, 0x06, 0xc2, 0x0c, 0xc1, 0x06, + 0xc1, 0x08, 0x48, 0xc2, 0x0d, 0xbf, 0x01, 0xc1, + 0x0d, 0x42, 0x54, 0x05, 0x00, 0x00, 0xee, 0xc2, + 0x0e, 0x5f, 0x11, 0x00, 0xd2, 0x04, 0x55, 0x05, + 0x00, 0x00, 0x04, 0x47, 0x00, 0x00, 0x00, 0x5f, + 0x12, 0x00, 0x11, 0x04, 0x56, 0x05, 0x00, 0x00, + 0x04, 0xf5, 0x04, 0x00, 0x00, 0x21, 0x02, 0x00, + 0x04, 0xf5, 0x04, 0x00, 0x00, 0x22, 0x05, 0x00, + 0xc2, 0x04, 0xc1, 0x0d, 0xc1, 0x0e, 0x44, 0x54, + 0x05, 0x00, 0x00, 0x04, 0x56, 0x05, 0x00, 0x00, + 0xc1, 0x04, 0xad, 0xe9, 0x0b, 0xbf, 0x02, 0xc7, + 0xc1, 0x0e, 0xef, 0xc2, 0x0c, 0xeb, 0x31, 0x5f, + 0x11, 0x00, 0xd2, 0x04, 0x9c, 0x04, 0x00, 0x00, + 0x04, 0x46, 0x00, 0x00, 0x00, 0xf0, 0xc2, 0x0f, + 0xc7, 0x06, 0xc1, 0x0f, 0xad, 0xe9, 0x0a, 0xc1, + 0x0d, 0x42, 0x9c, 0x04, 0x00, 0x00, 0xeb, 0x03, + 0xc1, 0x0f, 0x44, 0x9c, 0x04, 0x00, 0x00, 0xbf, + 0x03, 0xc7, 0xc1, 0x0e, 0xef, 0xc2, 0x0c, 0x5f, + 0x06, 0x00, 0x7d, 0xeb, 0x6e, 0xc2, 0x10, 0x5f, + 0x07, 0x00, 0x43, 0xa7, 0x03, 0x00, 0x00, 0x5f, + 0x06, 0x00, 0xc1, 0x10, 0x24, 0x02, 0x00, 0xe9, + 0x5a, 0x5f, 0x07, 0x00, 0x43, 0xa7, 0x03, 0x00, + 0x00, 0xc1, 0x0c, 0xc1, 0x10, 0x24, 0x02, 0x00, + 0xe9, 0x49, 0xc1, 0x0c, 0xc1, 0x10, 0x48, 0xc2, + 0x11, 0xc1, 0x0c, 0x42, 0xd8, 0x01, 0x00, 0x00, + 0xe9, 0x23, 0x5f, 0x07, 0x00, 0x43, 0xa7, 0x03, + 0x00, 0x00, 0xc1, 0x0c, 0x42, 0xd8, 0x01, 0x00, + 0x00, 0xc1, 0x10, 0x24, 0x02, 0x00, 0xe9, 0x0d, + 0xc1, 0x0c, 0x42, 0xd8, 0x01, 0x00, 0x00, 0xc1, + 0x10, 0x48, 0xeb, 0x03, 0xc1, 0x11, 0xc2, 0x11, + 0xc4, 0x04, 0xf1, 0x04, 0x00, 0x00, 0xc1, 0x10, + 0x9f, 0x04, 0xf2, 0x04, 0x00, 0x00, 0x9f, 0xc1, + 0x11, 0x4a, 0x80, 0xe9, 0x91, 0x0e, 0x0e, 0x06, + 0xc2, 0x12, 0x5f, 0x11, 0x00, 0xd2, 0x04, 0x9c, + 0x04, 0x00, 0x00, 0x04, 0x46, 0x00, 0x00, 0x00, + 0xf0, 0xc2, 0x13, 0xc4, 0x04, 0x57, 0x05, 0x00, + 0x00, 0x48, 0xe9, 0x4c, 0x06, 0xc1, 0x13, 0xad, + 0xe9, 0x0a, 0xc1, 0x0d, 0x42, 0x9c, 0x04, 0x00, + 0x00, 0xeb, 0x03, 0xc1, 0x13, 0xc2, 0x13, 0xc4, + 0x04, 0x58, 0x05, 0x00, 0x00, 0xc1, 0x13, 0x4a, + 0xb4, 0x98, 0xc1, 0x13, 0xad, 0xe9, 0x1e, 0xc1, + 0x0d, 0x42, 0x59, 0x05, 0x00, 0x00, 0xc2, 0x14, + 0xc4, 0x04, 0x5a, 0x05, 0x00, 0x00, 0xc1, 0x14, + 0x4a, 0xc1, 0x0c, 0x42, 0x3c, 0x05, 0x00, 0x00, + 0xc2, 0x12, 0xeb, 0x15, 0xc1, 0x0c, 0x42, 0x3e, + 0x05, 0x00, 0x00, 0xc2, 0x12, 0xeb, 0x0a, 0xc1, + 0x0c, 0x42, 0x3e, 0x05, 0x00, 0x00, 0xc2, 0x12, + 0xc4, 0x04, 0x5b, 0x05, 0x00, 0x00, 0xc1, 0x12, + 0x4a, 0xc4, 0x04, 0x1a, 0x05, 0x00, 0x00, 0x72, + 0x06, 0x4a, 0xc4, 0x04, 0x5c, 0x05, 0x00, 0x00, + 0x72, 0xb4, 0x98, 0x4a, 0x5f, 0x16, 0x00, 0x11, + 0xe9, 0x15, 0x0e, 0xd0, 0x5f, 0x17, 0x00, 0x43, + 0xa7, 0x03, 0x00, 0x00, 0xd0, 0x24, 0x01, 0x00, + 0x15, 0x44, 0xa8, 0x03, 0x00, 0x00, 0x0e, 0xc5, + 0xed, 0x0e, 0xd0, 0x28, 0xfc, 0x06, 0x01, 0x00, + 0x0d, 0x43, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x02, 0x02, 0x00, 0x0d, 0x01, 0x98, 0x01, 0x00, + 0x01, 0x00, 0x98, 0x07, 0x00, 0x00, 0xa6, 0x03, + 0x00, 0x01, 0x0c, 0x01, 0xc8, 0xc4, 0xb4, 0x48, + 0xdc, 0xad, 0xe9, 0x03, 0xdd, 0x28, 0x29, 0xfc, + 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, + 0x01, 0x00, 0x01, 0x04, 0x05, 0x01, 0x27, 0x01, + 0xa0, 0x03, 0x00, 0x01, 0x00, 0xf0, 0x07, 0x01, + 0x00, 0xe8, 0x07, 0x02, 0x00, 0xce, 0x03, 0x03, + 0x00, 0xea, 0x07, 0x04, 0x00, 0xec, 0x07, 0x05, + 0x00, 0x04, 0x5d, 0x05, 0x00, 0x00, 0x39, 0x8d, + 0x00, 0x00, 0x00, 0x42, 0x3a, 0x00, 0x00, 0x00, + 0x42, 0x36, 0x00, 0x00, 0x00, 0x43, 0xa7, 0x03, + 0x00, 0x00, 0xd0, 0x24, 0x01, 0x00, 0xad, 0xe9, + 0x03, 0xd0, 0x28, 0xbf, 0x00, 0xd0, 0xee, 0x28, + 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, + 0x00, 0x01, 0x0b, 0x01, 0x06, 0x05, 0x02, 0x90, + 0x04, 0x0c, 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, + 0x03, 0x00, 0x00, 0x00, 0xa4, 0x03, 0x00, 0x01, + 0x00, 0xa6, 0x03, 0x00, 0x02, 0x00, 0xa8, 0x03, + 0x00, 0x03, 0x00, 0xaa, 0x03, 0x00, 0x04, 0x00, + 0xac, 0x03, 0x00, 0x05, 0x00, 0xae, 0x03, 0x00, + 0x06, 0x00, 0xb0, 0x03, 0x00, 0x07, 0x00, 0xb2, + 0x03, 0x00, 0x08, 0x00, 0xb4, 0x03, 0x00, 0x09, + 0x00, 0xfe, 0x06, 0x00, 0x0a, 0x00, 0xf0, 0x07, + 0x00, 0x00, 0xe8, 0x07, 0x01, 0x00, 0xce, 0x03, + 0x02, 0x00, 0xea, 0x07, 0x03, 0x00, 0xec, 0x07, + 0x04, 0x00, 0xd0, 0x42, 0x5e, 0x05, 0x00, 0x00, + 0xc8, 0xd0, 0x42, 0x5f, 0x05, 0x00, 0x00, 0xc9, + 0xd0, 0x42, 0x60, 0x05, 0x00, 0x00, 0xca, 0x26, + 0x00, 0x00, 0xcb, 0x06, 0xc2, 0x04, 0x06, 0xc2, + 0x05, 0x06, 0xc2, 0x06, 0x06, 0xc2, 0x07, 0x06, + 0xc2, 0x08, 0x26, 0x00, 0x00, 0xc2, 0x09, 0x26, + 0x00, 0x00, 0xc2, 0x0a, 0xc4, 0x7d, 0xeb, 0x5e, + 0x79, 0xd5, 0x00, 0x00, 0x00, 0x04, 0x00, 0x1d, + 0x3e, 0xc4, 0x43, 0x20, 0x02, 0x00, 0x00, 0xc1, + 0x04, 0x24, 0x01, 0x00, 0x11, 0xe9, 0x46, 0x0e, + 0xdc, 0xc1, 0x04, 0xc4, 0xc1, 0x04, 0x48, 0xc3, + 0x05, 0xef, 0xc3, 0x06, 0x11, 0xe9, 0x36, 0x0e, + 0xc7, 0x43, 0x24, 0x02, 0x00, 0x00, 0xc1, 0x06, + 0x24, 0x01, 0x00, 0x0e, 0xdd, 0xc1, 0x06, 0xee, + 0xe9, 0x0f, 0xc1, 0x0a, 0x43, 0x24, 0x02, 0x00, + 0x00, 0xc1, 0x06, 0x24, 0x01, 0x00, 0xeb, 0x15, + 0xde, 0xc1, 0x06, 0xee, 0x11, 0xe9, 0x0e, 0x0e, + 0xc1, 0x09, 0x43, 0x24, 0x02, 0x00, 0x00, 0xc1, + 0x06, 0x24, 0x01, 0x00, 0x0e, 0x80, 0xe9, 0xa1, + 0x0e, 0x0e, 0xc5, 0x7d, 0xeb, 0x42, 0x79, 0xd5, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x1d, 0x3e, 0xc5, + 0x43, 0x20, 0x02, 0x00, 0x00, 0xc1, 0x04, 0x24, + 0x01, 0x00, 0x11, 0xe9, 0x2a, 0x0e, 0xdc, 0xc1, + 0x04, 0xc5, 0xc1, 0x04, 0x48, 0xc3, 0x05, 0xef, + 0xc3, 0x06, 0x11, 0xe9, 0x1a, 0x0e, 0xc7, 0x43, + 0x24, 0x02, 0x00, 0x00, 0xc1, 0x06, 0x24, 0x01, + 0x00, 0x0e, 0xc1, 0x09, 0x43, 0x24, 0x02, 0x00, + 0x00, 0xc1, 0x06, 0x24, 0x01, 0x00, 0x0e, 0x80, + 0xe9, 0xbd, 0x0e, 0x0e, 0xc6, 0x7d, 0xeb, 0x42, + 0x79, 0xd5, 0x00, 0x00, 0x00, 0x04, 0x00, 0x1d, + 0x3e, 0xc6, 0x43, 0x20, 0x02, 0x00, 0x00, 0xc1, + 0x04, 0x24, 0x01, 0x00, 0x11, 0xe9, 0x2a, 0x0e, + 0xdc, 0xc1, 0x04, 0xc6, 0xc1, 0x04, 0x48, 0xc3, + 0x05, 0xef, 0xc3, 0x06, 0x11, 0xe9, 0x1a, 0x0e, + 0xc7, 0x43, 0x24, 0x02, 0x00, 0x00, 0xc1, 0x06, + 0x24, 0x01, 0x00, 0x0e, 0xc1, 0x0a, 0x43, 0x24, + 0x02, 0x00, 0x00, 0xc1, 0x06, 0x24, 0x01, 0x00, + 0x0e, 0x80, 0xe9, 0xbd, 0x0e, 0x0e, 0xb4, 0xc2, + 0x07, 0xc1, 0x07, 0xc1, 0x09, 0xe8, 0xa5, 0x6a, + 0xd8, 0x00, 0x00, 0x00, 0xb4, 0xc2, 0x08, 0xc1, + 0x08, 0xc1, 0x0a, 0xe8, 0xa5, 0x6a, 0xc4, 0x00, + 0x00, 0x00, 0x04, 0xa9, 0x04, 0x00, 0x00, 0xc1, + 0x0a, 0xc1, 0x08, 0x48, 0x42, 0x95, 0x04, 0x00, + 0x00, 0xad, 0xe9, 0x1d, 0xc1, 0x0a, 0xc1, 0x08, + 0x48, 0x42, 0x97, 0x04, 0x00, 0x00, 0xe9, 0x09, + 0xd0, 0x42, 0x61, 0x05, 0x00, 0x00, 0xeb, 0x29, + 0xd0, 0x42, 0xa9, 0x04, 0x00, 0x00, 0xeb, 0x21, + 0x04, 0xa7, 0x04, 0x00, 0x00, 0xc1, 0x0a, 0xc1, + 0x08, 0x48, 0x42, 0x95, 0x04, 0x00, 0x00, 0xad, + 0xe9, 0x09, 0xd0, 0x42, 0x62, 0x05, 0x00, 0x00, + 0xeb, 0x07, 0xd0, 0x42, 0xa7, 0x04, 0x00, 0x00, + 0xc2, 0x05, 0xdf, 0xc1, 0x0a, 0xc1, 0x08, 0x48, + 0xc1, 0x09, 0xc1, 0x07, 0x48, 0xef, 0xc3, 0x06, + 0xc1, 0x05, 0x44, 0x4a, 0x05, 0x00, 0x00, 0xc1, + 0x06, 0xc1, 0x05, 0x43, 0xc9, 0x04, 0x00, 0x00, + 0x04, 0x63, 0x05, 0x00, 0x00, 0xc1, 0x09, 0xc1, + 0x07, 0x48, 0x42, 0x3b, 0x05, 0x00, 0x00, 0x24, + 0x02, 0x00, 0x43, 0xc9, 0x04, 0x00, 0x00, 0x04, + 0x64, 0x05, 0x00, 0x00, 0xc1, 0x0a, 0xc1, 0x08, + 0x48, 0x42, 0x3b, 0x05, 0x00, 0x00, 0x24, 0x02, + 0x00, 0x43, 0xc9, 0x04, 0x00, 0x00, 0xbe, 0x00, + 0xbe, 0x01, 0x33, 0xc0, 0x24, 0x02, 0x00, 0x44, + 0x3b, 0x05, 0x00, 0x00, 0xc7, 0x43, 0x24, 0x02, + 0x00, 0x00, 0x5f, 0x04, 0x00, 0xc1, 0x06, 0xee, + 0x24, 0x01, 0x00, 0x0e, 0xb5, 0x96, 0x08, 0xec, + 0x37, 0xff, 0xb5, 0x96, 0x07, 0xec, 0x23, 0xff, + 0xc7, 0x28, 0xfc, 0x06, 0x01, 0x00, 0x07, 0x1e, + 0x5e, 0x5b, 0x2c, 0x5c, 0x73, 0x5d, 0x2b, 0x7c, + 0x5b, 0x2c, 0x5c, 0x73, 0x5d, 0x2b, 0x24, 0x07, + 0xca, 0x02, 0x03, 0x01, 0x00, 0x9e, 0x00, 0x00, + 0x00, 0x08, 0x06, 0x00, 0x00, 0x00, 0x04, 0x07, + 0xf5, 0xff, 0xff, 0xff, 0x0b, 0x00, 0x09, 0x47, + 0x00, 0x00, 0x00, 0x05, 0x1c, 0x30, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, + 0x7f, 0x01, 0x00, 0x00, 0x00, 0x15, 0x0b, 0x00, + 0x09, 0x00, 0x0d, 0x00, 0x20, 0x00, 0x20, 0x00, + 0x2c, 0x00, 0x2c, 0x00, 0xa0, 0x00, 0xa0, 0x00, + 0x80, 0x16, 0x80, 0x16, 0x00, 0x20, 0x0a, 0x20, + 0x28, 0x20, 0x29, 0x20, 0x2f, 0x20, 0x2f, 0x20, + 0x5f, 0x20, 0x5f, 0x20, 0x00, 0x30, 0x00, 0x30, + 0xff, 0xfe, 0xff, 0xfe, 0x0a, 0x07, 0x42, 0x00, + 0x00, 0x00, 0x1c, 0x30, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x7f, 0x01, + 0x00, 0x00, 0x00, 0x15, 0x0b, 0x00, 0x09, 0x00, + 0x0d, 0x00, 0x20, 0x00, 0x20, 0x00, 0x2c, 0x00, + 0x2c, 0x00, 0xa0, 0x00, 0xa0, 0x00, 0x80, 0x16, + 0x80, 0x16, 0x00, 0x20, 0x0a, 0x20, 0x28, 0x20, + 0x29, 0x20, 0x2f, 0x20, 0x2f, 0x20, 0x5f, 0x20, + 0x5f, 0x20, 0x00, 0x30, 0x00, 0x30, 0xff, 0xfe, + 0xff, 0xfe, 0x0a, 0x06, 0x0c, 0x00, 0x0a, 0x0d, + 0x43, 0x06, 0x00, 0x00, 0x02, 0x13, 0x02, 0x07, + 0x03, 0x00, 0xde, 0x02, 0x15, 0xa0, 0x03, 0x00, + 0x01, 0x00, 0xa2, 0x03, 0x00, 0x01, 0x00, 0xa4, + 0x03, 0x00, 0x00, 0x00, 0xa6, 0x03, 0x00, 0x01, + 0x00, 0xa8, 0x03, 0x00, 0x02, 0x00, 0xaa, 0x03, + 0x00, 0x03, 0x00, 0xac, 0x03, 0x00, 0x04, 0x00, + 0xae, 0x03, 0x00, 0x05, 0x00, 0xb0, 0x03, 0x00, + 0x06, 0x00, 0xb2, 0x03, 0x00, 0x07, 0x00, 0xb4, + 0x03, 0x00, 0x08, 0x00, 0xfe, 0x06, 0x00, 0x09, + 0x00, 0x80, 0x07, 0x00, 0x0a, 0x00, 0x84, 0x07, + 0x00, 0x0b, 0x00, 0x88, 0x07, 0x00, 0x0c, 0x00, + 0x8a, 0x07, 0x00, 0x0d, 0x00, 0x8c, 0x07, 0x00, + 0x0e, 0x00, 0x8e, 0x07, 0x00, 0x0f, 0x00, 0x90, + 0x07, 0x00, 0x10, 0x00, 0x92, 0x07, 0x00, 0x11, + 0x00, 0x94, 0x07, 0x00, 0x12, 0x00, 0xfc, 0x07, + 0x06, 0x00, 0x82, 0x07, 0x07, 0x00, 0x86, 0x07, + 0x08, 0x00, 0xbc, 0x78, 0xc8, 0xbc, 0x14, 0xc9, + 0xbc, 0x08, 0xca, 0xba, 0xcb, 0xba, 0xc2, 0x04, + 0xb7, 0xc2, 0x05, 0xb3, 0xb4, 0x9d, 0xc2, 0x06, + 0x06, 0xc2, 0x07, 0xb4, 0xc2, 0x08, 0xd1, 0xe8, + 0xc2, 0x09, 0xc1, 0x08, 0xc1, 0x09, 0xa5, 0x6a, + 0x35, 0x01, 0x00, 0x00, 0xd1, 0xc1, 0x08, 0x48, + 0xc2, 0x0a, 0xb4, 0xc2, 0x0b, 0xdc, 0x7d, 0xec, + 0x06, 0x01, 0xc2, 0x0c, 0xdd, 0x43, 0xa7, 0x03, + 0x00, 0x00, 0xdc, 0xc1, 0x0c, 0x24, 0x02, 0x00, + 0x6a, 0xf5, 0x00, 0x00, 0x00, 0xd0, 0x04, 0xf1, + 0x04, 0x00, 0x00, 0xc1, 0x0c, 0x9f, 0x04, 0xf2, + 0x04, 0x00, 0x00, 0x9f, 0x48, 0xc2, 0x0d, 0xdd, + 0x43, 0xa7, 0x03, 0x00, 0x00, 0xc1, 0x0a, 0xc1, + 0x0c, 0x24, 0x02, 0x00, 0xe9, 0x08, 0xc1, 0x0a, + 0xc1, 0x0c, 0x48, 0xeb, 0x02, 0x06, 0xc2, 0x0e, + 0x06, 0xc1, 0x0d, 0xad, 0xe9, 0x10, 0x06, 0xc1, + 0x0e, 0xae, 0xe9, 0x0a, 0xc1, 0x0b, 0xc5, 0xa0, + 0xc2, 0x0b, 0xec, 0xb3, 0x00, 0x06, 0xc1, 0x0d, + 0xae, 0xe9, 0x10, 0x06, 0xc1, 0x0e, 0xad, 0xe9, + 0x0a, 0xc1, 0x0b, 0xc4, 0xa0, 0xc2, 0x0b, 0xec, + 0x9e, 0x00, 0x04, 0x9f, 0x04, 0x00, 0x00, 0x04, + 0x9e, 0x04, 0x00, 0x00, 0x04, 0xa5, 0x04, 0x00, + 0x00, 0x04, 0xa7, 0x04, 0x00, 0x00, 0x04, 0xa9, + 0x04, 0x00, 0x00, 0x26, 0x05, 0x00, 0xc2, 0x0f, + 0xde, 0x43, 0xa7, 0x03, 0x00, 0x00, 0xc1, 0x0f, + 0xc1, 0x0d, 0x24, 0x02, 0x00, 0xc2, 0x10, 0xde, + 0x43, 0xa7, 0x03, 0x00, 0x00, 0xc1, 0x0f, 0xc1, + 0x0e, 0x24, 0x02, 0x00, 0xc2, 0x11, 0x39, 0x95, + 0x00, 0x00, 0x00, 0x43, 0x32, 0x03, 0x00, 0x00, + 0x39, 0x95, 0x00, 0x00, 0x00, 0x43, 0x37, 0x03, + 0x00, 0x00, 0xc1, 0x11, 0xc1, 0x10, 0xa0, 0xb6, + 0x24, 0x02, 0x00, 0xbc, 0xfe, 0x24, 0x02, 0x00, + 0xc2, 0x12, 0xb6, 0xc1, 0x12, 0xad, 0xe9, 0x09, + 0xc1, 0x0b, 0xc7, 0xa0, 0xc3, 0x0b, 0xeb, 0x2e, + 0xb5, 0xc1, 0x12, 0xad, 0xe9, 0x0a, 0xc1, 0x0b, + 0xc1, 0x05, 0xa0, 0xc3, 0x0b, 0xeb, 0x1f, 0xb3, + 0xc1, 0x12, 0xad, 0xe9, 0x0a, 0xc1, 0x0b, 0xc1, + 0x04, 0xa0, 0xc3, 0x0b, 0xeb, 0x10, 0xbc, 0xfe, + 0xc1, 0x12, 0xad, 0x11, 0xe9, 0x08, 0x0e, 0xc1, + 0x0b, 0xc6, 0xa0, 0xc3, 0x0b, 0x0e, 0x80, 0x6a, + 0xfa, 0xfe, 0xff, 0xff, 0x0e, 0x0e, 0xc1, 0x0b, + 0xc1, 0x06, 0xa7, 0x11, 0xe9, 0x0a, 0x0e, 0xc1, + 0x0b, 0xc2, 0x06, 0xc1, 0x0a, 0xc3, 0x07, 0x0e, + 0x95, 0x08, 0xec, 0xc7, 0xfe, 0xc1, 0x07, 0x28, + 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, + 0x00, 0x02, 0x18, 0x02, 0x07, 0x05, 0x01, 0xb9, + 0x04, 0x1a, 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, + 0x03, 0x00, 0x01, 0x00, 0xa4, 0x03, 0x00, 0x00, + 0x00, 0xa6, 0x03, 0x00, 0x01, 0x00, 0xa8, 0x03, + 0x00, 0x02, 0x00, 0xaa, 0x03, 0x00, 0x03, 0x00, + 0xae, 0x03, 0x00, 0x04, 0x00, 0xb0, 0x03, 0x00, + 0x05, 0x00, 0xb2, 0x03, 0x00, 0x06, 0x00, 0xb4, + 0x03, 0x00, 0x07, 0x00, 0xfe, 0x06, 0x00, 0x08, + 0x00, 0x80, 0x07, 0x00, 0x09, 0x00, 0x84, 0x07, + 0x00, 0x0a, 0x00, 0x88, 0x07, 0x00, 0x0b, 0x00, + 0x8a, 0x07, 0x00, 0x0c, 0x00, 0x8c, 0x07, 0x00, + 0x0d, 0x00, 0x8e, 0x07, 0x00, 0x0e, 0x00, 0x90, + 0x07, 0x00, 0x0f, 0x00, 0x92, 0x07, 0x00, 0x10, + 0x00, 0x94, 0x07, 0x00, 0x11, 0x00, 0x96, 0x07, + 0x00, 0x12, 0x00, 0x98, 0x07, 0x00, 0x13, 0x00, + 0x9a, 0x07, 0x00, 0x14, 0x00, 0x9c, 0x07, 0x00, + 0x15, 0x00, 0x9e, 0x07, 0x00, 0x16, 0x00, 0xa0, + 0x07, 0x00, 0x17, 0x00, 0xf2, 0x07, 0x09, 0x00, + 0xac, 0x03, 0x0a, 0x00, 0xfc, 0x07, 0x06, 0x00, + 0x82, 0x07, 0x07, 0x00, 0x86, 0x07, 0x08, 0x00, + 0x26, 0x00, 0x00, 0xc8, 0xde, 0x7d, 0xeb, 0x31, + 0xc9, 0xdf, 0x43, 0xa7, 0x03, 0x00, 0x00, 0xde, + 0xc5, 0x24, 0x02, 0x00, 0x11, 0xe9, 0x21, 0x0e, + 0x06, 0xd0, 0x04, 0xf1, 0x04, 0x00, 0x00, 0xc5, + 0x9f, 0x04, 0xf2, 0x04, 0x00, 0x00, 0x9f, 0x48, + 0xae, 0x11, 0xe9, 0x0c, 0x0e, 0xc4, 0x43, 0x24, + 0x02, 0x00, 0x00, 0xc5, 0x24, 0x01, 0x00, 0x0e, + 0x80, 0xe9, 0xce, 0x0e, 0x0e, 0xb5, 0xc4, 0xe8, + 0xad, 0xe9, 0x1d, 0xbf, 0x00, 0xc4, 0xb4, 0x48, + 0xd0, 0x04, 0xf1, 0x04, 0x00, 0x00, 0xc4, 0xb4, + 0x48, 0x9f, 0x04, 0xf2, 0x04, 0x00, 0x00, 0x9f, + 0x48, 0xef, 0xce, 0xe9, 0x03, 0xc6, 0x28, 0xbc, + 0x78, 0xcb, 0xbc, 0x14, 0xc2, 0x04, 0xbc, 0x08, + 0xc2, 0x05, 0xba, 0xc2, 0x06, 0xba, 0xc2, 0x07, + 0xb7, 0xc2, 0x08, 0xb6, 0xc2, 0x09, 0xb5, 0xc2, + 0x0a, 0xb3, 0xb4, 0x9d, 0xc2, 0x0b, 0x06, 0xc2, + 0x0c, 0xb4, 0xc2, 0x0d, 0xd1, 0xe8, 0xc2, 0x0e, + 0xc1, 0x0d, 0xc1, 0x0e, 0xa5, 0x6a, 0xa8, 0x01, + 0x00, 0x00, 0xd1, 0xc1, 0x0d, 0x48, 0xc2, 0x0f, + 0xb4, 0xc2, 0x10, 0xde, 0x7d, 0xec, 0x5a, 0x01, + 0xc2, 0x11, 0xdf, 0x43, 0xa7, 0x03, 0x00, 0x00, + 0xde, 0xc1, 0x11, 0x24, 0x02, 0x00, 0x6a, 0x49, + 0x01, 0x00, 0x00, 0xd0, 0x04, 0xf1, 0x04, 0x00, + 0x00, 0xc1, 0x11, 0x9f, 0x04, 0xf2, 0x04, 0x00, + 0x00, 0x9f, 0x48, 0xc2, 0x12, 0xdf, 0x43, 0xa7, + 0x03, 0x00, 0x00, 0xc1, 0x0f, 0xc1, 0x11, 0x24, + 0x02, 0x00, 0xe9, 0x08, 0xc1, 0x0f, 0xc1, 0x11, + 0x48, 0xeb, 0x02, 0x06, 0xc2, 0x13, 0xc1, 0x12, + 0xdf, 0x43, 0xa7, 0x03, 0x00, 0x00, 0xc1, 0x0f, + 0x42, 0xd8, 0x01, 0x00, 0x00, 0xc1, 0x11, 0x24, + 0x02, 0x00, 0xe9, 0x0d, 0xc1, 0x0f, 0x42, 0xd8, + 0x01, 0x00, 0x00, 0xc1, 0x11, 0x48, 0xeb, 0x02, + 0x06, 0xae, 0x11, 0xe9, 0x09, 0x0e, 0xc1, 0x10, + 0xc1, 0x09, 0xa0, 0xc3, 0x10, 0x0e, 0x06, 0xc1, + 0x12, 0xad, 0xe9, 0x11, 0x06, 0xc1, 0x13, 0xae, + 0xe9, 0x0b, 0xc1, 0x10, 0xc1, 0x04, 0xa0, 0xc2, + 0x10, 0xec, 0xd6, 0x00, 0x06, 0xc1, 0x12, 0xae, + 0xe9, 0x10, 0x06, 0xc1, 0x13, 0xad, 0xe9, 0x0a, + 0xc1, 0x10, 0xc7, 0xa0, 0xc2, 0x10, 0xec, 0xc1, + 0x00, 0x04, 0x9f, 0x04, 0x00, 0x00, 0x04, 0x9e, + 0x04, 0x00, 0x00, 0x04, 0xa5, 0x04, 0x00, 0x00, + 0x04, 0xa7, 0x04, 0x00, 0x00, 0x04, 0xa9, 0x04, + 0x00, 0x00, 0x26, 0x05, 0x00, 0xc2, 0x14, 0x5f, + 0x04, 0x00, 0x43, 0xa7, 0x03, 0x00, 0x00, 0xc1, + 0x14, 0xc1, 0x12, 0x24, 0x02, 0x00, 0xc2, 0x15, + 0x5f, 0x04, 0x00, 0x43, 0xa7, 0x03, 0x00, 0x00, + 0xc1, 0x14, 0xc1, 0x13, 0x24, 0x02, 0x00, 0xc2, + 0x16, 0x39, 0x95, 0x00, 0x00, 0x00, 0x43, 0x32, + 0x03, 0x00, 0x00, 0x39, 0x95, 0x00, 0x00, 0x00, + 0x43, 0x37, 0x03, 0x00, 0x00, 0xc1, 0x16, 0xc1, + 0x15, 0xa0, 0xb6, 0x24, 0x02, 0x00, 0xbc, 0xfe, + 0x24, 0x02, 0x00, 0xc2, 0x17, 0xc1, 0x16, 0xb5, + 0xa6, 0x11, 0xe9, 0x06, 0x0e, 0xc1, 0x15, 0xb6, + 0xa8, 0x11, 0xea, 0x0c, 0x0e, 0xc1, 0x16, 0xb6, + 0xa8, 0xe9, 0x27, 0xc1, 0x15, 0xb5, 0xa6, 0xe9, + 0x21, 0xc1, 0x17, 0xb4, 0xa7, 0xe9, 0x0a, 0xc1, + 0x10, 0xc1, 0x06, 0xa0, 0xc3, 0x10, 0xeb, 0x30, + 0xc1, 0x17, 0xb4, 0xa5, 0x11, 0xe9, 0x29, 0x0e, + 0xc1, 0x10, 0xc1, 0x05, 0xa0, 0xc3, 0x10, 0xeb, + 0x1f, 0xc1, 0x17, 0xb5, 0xa7, 0xe9, 0x0a, 0xc1, + 0x10, 0xc1, 0x08, 0xa0, 0xc3, 0x10, 0xeb, 0x10, + 0xc1, 0x17, 0xb3, 0xa5, 0x11, 0xe9, 0x09, 0x0e, + 0xc1, 0x10, 0xc1, 0x07, 0xa0, 0xc3, 0x10, 0x0e, + 0x80, 0x6a, 0xa6, 0xfe, 0xff, 0xff, 0x0e, 0x0e, + 0xc1, 0x0f, 0x42, 0xd8, 0x01, 0x00, 0x00, 0x42, + 0x9c, 0x04, 0x00, 0x00, 0xd0, 0x42, 0x9c, 0x04, + 0x00, 0x00, 0xae, 0x11, 0xe9, 0x09, 0x0e, 0xc1, + 0x10, 0xc1, 0x0a, 0xa0, 0xc3, 0x10, 0x0e, 0xc1, + 0x10, 0xc1, 0x0b, 0xa7, 0x11, 0xe9, 0x0a, 0x0e, + 0xc1, 0x10, 0xc2, 0x0b, 0xc1, 0x0f, 0xc3, 0x0c, + 0x0e, 0x95, 0x0d, 0xec, 0x54, 0xfe, 0xc1, 0x0c, + 0x28, 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, + 0x00, 0x00, 0x02, 0x01, 0x02, 0x05, 0x02, 0x00, + 0x69, 0x03, 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, + 0x03, 0x00, 0x01, 0x00, 0xa4, 0x03, 0x00, 0x00, + 0x00, 0xf2, 0x07, 0x00, 0x00, 0xac, 0x03, 0x01, + 0x00, 0xdc, 0xd0, 0x48, 0xe9, 0x64, 0xdc, 0xd0, + 0x48, 0xd1, 0x48, 0xe9, 0x5d, 0x0b, 0xdc, 0xd0, + 0x48, 0xd1, 0x48, 0x4d, 0x4a, 0x05, 0x00, 0x00, + 0xdd, 0x0b, 0xd0, 0xd1, 0xf0, 0x4d, 0xd8, 0x01, + 0x00, 0x00, 0x04, 0x20, 0x05, 0x00, 0x00, 0xd0, + 0x9f, 0x04, 0xd1, 0x04, 0x00, 0x00, 0x9f, 0x4d, + 0x3b, 0x05, 0x00, 0x00, 0xc8, 0xdd, 0xc4, 0xd0, + 0xd1, 0xf0, 0x0e, 0xdd, 0xc4, 0x04, 0x3c, 0x05, + 0x00, 0x00, 0x04, 0x20, 0x05, 0x00, 0x00, 0xd0, + 0x9f, 0x04, 0xd1, 0x04, 0x00, 0x00, 0x9f, 0xf0, + 0x0e, 0xdd, 0xc4, 0x04, 0x3e, 0x05, 0x00, 0x00, + 0x04, 0x20, 0x05, 0x00, 0x00, 0xd0, 0x9f, 0x04, + 0xd1, 0x04, 0x00, 0x00, 0x9f, 0xf0, 0x0e, 0xc4, + 0x28, 0x29, 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, + 0x06, 0x00, 0xfe, 0x07, 0x03, 0x03, 0x03, 0x05, + 0x03, 0x00, 0xa3, 0x02, 0x06, 0xa0, 0x03, 0x00, + 0x01, 0x00, 0xa2, 0x03, 0x00, 0x01, 0x00, 0xa4, + 0x03, 0x00, 0x01, 0x00, 0xa6, 0x03, 0x00, 0x00, + 0x00, 0xa8, 0x03, 0x00, 0x01, 0x00, 0xaa, 0x03, + 0x00, 0x02, 0x00, 0xa0, 0x07, 0x1a, 0x01, 0x9a, + 0x07, 0x17, 0x01, 0x88, 0x07, 0x0e, 0x01, 0x06, + 0xd0, 0xad, 0xe9, 0x05, 0x07, 0xd4, 0xeb, 0x1c, + 0xdc, 0xd0, 0xee, 0xc8, 0xdd, 0x11, 0x21, 0x00, + 0x00, 0xd4, 0xc4, 0x7d, 0xeb, 0x09, 0xc9, 0xd0, + 0xc5, 0x72, 0xc4, 0xc5, 0x48, 0x4a, 0x80, 0xe9, + 0xf6, 0x0e, 0x0e, 0xde, 0xd0, 0xee, 0xd4, 0xb4, + 0x98, 0xca, 0x04, 0x4d, 0x05, 0x00, 0x00, 0xd1, + 0xae, 0x11, 0xe9, 0x09, 0x0e, 0x04, 0x4c, 0x05, + 0x00, 0x00, 0xd1, 0xae, 0x11, 0xea, 0x35, 0x0e, + 0x06, 0xd0, 0x42, 0x97, 0x04, 0x00, 0x00, 0xad, + 0x11, 0xe9, 0x22, 0x0e, 0x06, 0xd0, 0x42, 0x94, + 0x04, 0x00, 0x00, 0xad, 0x11, 0xe9, 0x16, 0x0e, + 0x06, 0xd0, 0x42, 0x95, 0x04, 0x00, 0x00, 0xad, + 0x11, 0xe9, 0x0a, 0x0e, 0x06, 0xd0, 0x42, 0x96, + 0x04, 0x00, 0x00, 0xad, 0x11, 0xea, 0x05, 0x0e, + 0xb5, 0x98, 0xce, 0x0e, 0x04, 0x65, 0x05, 0x00, + 0x00, 0xd1, 0xae, 0x11, 0xe9, 0x09, 0x0e, 0x04, + 0x4c, 0x05, 0x00, 0x00, 0xd1, 0xae, 0x11, 0xea, + 0x29, 0x0e, 0x06, 0xd0, 0x42, 0x99, 0x04, 0x00, + 0x00, 0xad, 0x11, 0xe9, 0x16, 0x0e, 0x06, 0xd0, + 0x42, 0x9a, 0x04, 0x00, 0x00, 0xad, 0x11, 0xe9, + 0x0a, 0x0e, 0x06, 0xd0, 0x42, 0x9b, 0x04, 0x00, + 0x00, 0xad, 0x11, 0xea, 0x05, 0x0e, 0xb5, 0x98, + 0xce, 0x0e, 0xc6, 0x98, 0x11, 0xea, 0x32, 0x0e, + 0x04, 0x4d, 0x05, 0x00, 0x00, 0xd2, 0xae, 0x11, + 0xe9, 0x09, 0x0e, 0x04, 0x66, 0x05, 0x00, 0x00, + 0xd2, 0xae, 0x11, 0xea, 0x1c, 0x0e, 0xd0, 0xd0, + 0xd0, 0x04, 0x9e, 0x04, 0x00, 0x00, 0x15, 0x44, + 0x96, 0x04, 0x00, 0x00, 0x15, 0x44, 0x95, 0x04, + 0x00, 0x00, 0x15, 0x44, 0x94, 0x04, 0x00, 0x00, + 0x0e, 0xc6, 0x98, 0x11, 0xea, 0x32, 0x0e, 0x04, + 0x65, 0x05, 0x00, 0x00, 0xd2, 0xae, 0x11, 0xe9, + 0x09, 0x0e, 0x04, 0x66, 0x05, 0x00, 0x00, 0xd2, + 0xae, 0x11, 0xea, 0x1c, 0x0e, 0xd0, 0xd0, 0xd0, + 0x04, 0x9e, 0x04, 0x00, 0x00, 0x15, 0x44, 0x9b, + 0x04, 0x00, 0x00, 0x15, 0x44, 0x9a, 0x04, 0x00, + 0x00, 0x15, 0x44, 0x99, 0x04, 0x00, 0x00, 0x0e, + 0xd0, 0x28, 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, + 0x06, 0x00, 0x80, 0x08, 0x00, 0x03, 0x00, 0x04, + 0x05, 0x01, 0x69, 0x03, 0xa0, 0x03, 0x00, 0x00, + 0x00, 0xa2, 0x03, 0x00, 0x01, 0x00, 0x10, 0x00, + 0x01, 0x00, 0xa2, 0x07, 0x1b, 0x01, 0x84, 0x08, + 0x55, 0x01, 0xb4, 0x03, 0x08, 0x01, 0xa6, 0x07, + 0x1d, 0x01, 0x94, 0x07, 0x14, 0x01, 0x08, 0xca, + 0x07, 0xc6, 0xae, 0x11, 0xe9, 0x19, 0x0e, 0x04, + 0x48, 0x00, 0x00, 0x00, 0xde, 0x43, 0x0b, 0x00, + 0x00, 0x00, 0xc6, 0x24, 0x01, 0x00, 0xad, 0x11, + 0xe9, 0x05, 0x0e, 0xdf, 0xc6, 0xee, 0xcc, 0x98, + 0x11, 0xea, 0x0a, 0x0e, 0xc4, 0x04, 0x5c, 0x05, + 0x00, 0x00, 0x48, 0x98, 0xe9, 0x10, 0x39, 0xbf, + 0x00, 0x00, 0x00, 0x11, 0x04, 0x67, 0x05, 0x00, + 0x00, 0x21, 0x01, 0x00, 0x2f, 0x06, 0xc4, 0x04, + 0x1a, 0x05, 0x00, 0x00, 0x48, 0xad, 0xe9, 0x18, + 0x5f, 0x04, 0x00, 0x43, 0xa7, 0x03, 0x00, 0x00, + 0xbf, 0x00, 0xc6, 0x24, 0x02, 0x00, 0xc9, 0xc4, + 0x04, 0x1a, 0x05, 0x00, 0x00, 0xc5, 0x4a, 0xc4, + 0x04, 0x1a, 0x05, 0x00, 0x00, 0x48, 0x28, 0xfc, + 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x03, 0x02, 0x00, 0x39, 0x04, + 0xa0, 0x03, 0x00, 0x00, 0x00, 0xa2, 0x03, 0x00, + 0x01, 0x00, 0x98, 0x01, 0x00, 0x01, 0x00, 0x10, + 0x00, 0x01, 0x00, 0xa2, 0x07, 0x00, 0x00, 0x84, + 0x08, 0x01, 0x00, 0x08, 0xcb, 0x0c, 0x01, 0xca, + 0xc6, 0xe8, 0xb4, 0xa6, 0x11, 0xea, 0x07, 0x0e, + 0x06, 0xc6, 0xb4, 0x48, 0xad, 0xe9, 0x04, 0x06, + 0xeb, 0x04, 0xc6, 0xb4, 0x48, 0xc8, 0x06, 0xc4, + 0xad, 0xe9, 0x10, 0x39, 0x97, 0x00, 0x00, 0x00, + 0x43, 0x68, 0x05, 0x00, 0x00, 0x24, 0x00, 0x00, + 0xeb, 0x04, 0xdc, 0xc4, 0xee, 0xc9, 0xdd, 0xc7, + 0xc5, 0x23, 0x02, 0x00, 0xfc, 0x06, 0x01, 0x00, + 0x0d, 0x43, 0x06, 0x00, 0x82, 0x08, 0x02, 0x17, + 0x02, 0x0a, 0x0b, 0x00, 0xd5, 0x09, 0x19, 0xa0, + 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, 0x00, 0x01, + 0x00, 0xa4, 0x03, 0x00, 0x00, 0x00, 0xa6, 0x03, + 0x00, 0x01, 0x00, 0xa8, 0x03, 0x00, 0x02, 0x00, + 0xaa, 0x03, 0x00, 0x03, 0x00, 0xac, 0x03, 0x00, + 0x04, 0x00, 0xae, 0x03, 0x00, 0x05, 0x00, 0xb0, + 0x03, 0x00, 0x06, 0x00, 0xb2, 0x03, 0x00, 0x07, + 0x00, 0xb4, 0x03, 0x00, 0x08, 0x00, 0xfe, 0x06, + 0x00, 0x09, 0x00, 0x80, 0x07, 0x00, 0x0a, 0x00, + 0x82, 0x07, 0x00, 0x0b, 0x00, 0x84, 0x07, 0x00, + 0x0c, 0x00, 0x86, 0x07, 0x00, 0x0d, 0x00, 0x88, + 0x07, 0x00, 0x0e, 0x00, 0x8a, 0x07, 0x00, 0x0f, + 0x00, 0x8c, 0x07, 0x00, 0x10, 0x00, 0x90, 0x07, + 0x00, 0x11, 0x00, 0x92, 0x07, 0x00, 0x12, 0x00, + 0x94, 0x07, 0x00, 0x13, 0x00, 0xa0, 0x07, 0x00, + 0x14, 0x00, 0xa0, 0x03, 0x0d, 0x00, 0x03, 0xa0, + 0x03, 0x11, 0x00, 0x03, 0x98, 0x07, 0x16, 0x01, + 0x9e, 0x07, 0x19, 0x01, 0xd2, 0x04, 0x36, 0x01, + 0x9a, 0x07, 0x17, 0x01, 0x9c, 0x07, 0x18, 0x01, + 0x96, 0x07, 0x15, 0x01, 0x8e, 0x07, 0x11, 0x01, + 0xfc, 0x07, 0x51, 0x01, 0xde, 0x07, 0x3d, 0x01, + 0xf4, 0x07, 0x4d, 0x01, 0xf6, 0x07, 0x4e, 0x01, + 0x39, 0x22, 0x05, 0x00, 0x00, 0xd1, 0xee, 0x98, + 0xe9, 0x10, 0x39, 0xbc, 0x00, 0x00, 0x00, 0x11, + 0x04, 0x69, 0x05, 0x00, 0x00, 0x21, 0x01, 0x00, + 0x2f, 0xd0, 0x43, 0xd7, 0x04, 0x00, 0x00, 0xdc, + 0x24, 0x01, 0x00, 0xc8, 0xdd, 0xed, 0x0e, 0xc4, + 0x04, 0xe5, 0x04, 0x00, 0x00, 0x48, 0xc2, 0x05, + 0xde, 0x42, 0xa1, 0x03, 0x00, 0x00, 0x11, 0xc1, + 0x05, 0x26, 0x01, 0x00, 0x0b, 0xb5, 0x98, 0x4d, + 0x13, 0x05, 0x00, 0x00, 0x21, 0x02, 0x00, 0xc2, + 0x06, 0xde, 0x42, 0xa1, 0x03, 0x00, 0x00, 0x11, + 0xc1, 0x05, 0x26, 0x01, 0x00, 0x0b, 0xb6, 0x4d, + 0x09, 0x05, 0x00, 0x00, 0xb5, 0x98, 0x4d, 0x13, + 0x05, 0x00, 0x00, 0x21, 0x02, 0x00, 0xc2, 0x07, + 0xd1, 0xc9, 0xc4, 0x04, 0x4e, 0x05, 0x00, 0x00, + 0x48, 0x0e, 0xc4, 0x04, 0x53, 0x05, 0x00, 0x00, + 0x48, 0xca, 0xdf, 0x11, 0x0b, 0x39, 0x97, 0x00, + 0x00, 0x00, 0x11, 0xc5, 0x21, 0x01, 0x00, 0xcf, + 0x04, 0x40, 0x00, 0x00, 0x00, 0xc6, 0x11, 0xea, + 0x03, 0x0e, 0xc0, 0x9f, 0xc3, 0x04, 0x04, 0x6a, + 0x05, 0x00, 0x00, 0x9f, 0x49, 0x24, 0x00, 0x00, + 0x4d, 0x6b, 0x05, 0x00, 0x00, 0xc7, 0xc1, 0x04, + 0x04, 0x6c, 0x05, 0x00, 0x00, 0x9f, 0x49, 0x24, + 0x00, 0x00, 0xb4, 0xa8, 0x8f, 0x4d, 0x6d, 0x05, + 0x00, 0x00, 0xc7, 0xc1, 0x04, 0x04, 0x6c, 0x05, + 0x00, 0x00, 0x9f, 0x49, 0x24, 0x00, 0x00, 0x4d, + 0x6e, 0x05, 0x00, 0x00, 0xc7, 0xc1, 0x04, 0x04, + 0x6f, 0x05, 0x00, 0x00, 0x9f, 0x49, 0x24, 0x00, + 0x00, 0x4d, 0x70, 0x05, 0x00, 0x00, 0xc7, 0xc1, + 0x04, 0x04, 0x97, 0x00, 0x00, 0x00, 0x9f, 0x49, + 0x24, 0x00, 0x00, 0x4d, 0x71, 0x05, 0x00, 0x00, + 0xc7, 0xc1, 0x04, 0x04, 0x72, 0x05, 0x00, 0x00, + 0x9f, 0x49, 0x24, 0x00, 0x00, 0x4d, 0x57, 0x05, + 0x00, 0x00, 0xc7, 0xc1, 0x04, 0x04, 0x73, 0x05, + 0x00, 0x00, 0x9f, 0x49, 0x24, 0x00, 0x00, 0x4d, + 0x74, 0x05, 0x00, 0x00, 0xc7, 0xc1, 0x04, 0x04, + 0x75, 0x05, 0x00, 0x00, 0x9f, 0x49, 0x24, 0x00, + 0x00, 0x4d, 0x76, 0x05, 0x00, 0x00, 0xb5, 0x98, + 0x4d, 0x77, 0x05, 0x00, 0x00, 0x21, 0x01, 0x00, + 0xc2, 0x08, 0xc4, 0x04, 0x5b, 0x05, 0x00, 0x00, + 0x48, 0xc2, 0x09, 0x5f, 0x04, 0x00, 0x11, 0x21, + 0x00, 0x00, 0xc2, 0x0a, 0xb4, 0xc2, 0x0b, 0xc1, + 0x09, 0x43, 0x21, 0x02, 0x00, 0x00, 0x04, 0x20, + 0x05, 0x00, 0x00, 0x24, 0x01, 0x00, 0xc2, 0x0c, + 0xb4, 0xc2, 0x0d, 0xc4, 0x04, 0xef, 0x04, 0x00, + 0x00, 0x48, 0xc2, 0x0e, 0x5f, 0x05, 0x00, 0x42, + 0xad, 0x04, 0x00, 0x00, 0x04, 0xa5, 0x03, 0x00, + 0x00, 0x48, 0xc1, 0x0e, 0x48, 0x42, 0x78, 0x05, + 0x00, 0x00, 0xc2, 0x0f, 0xc4, 0x04, 0x4e, 0x05, + 0x00, 0x00, 0x48, 0xc2, 0x10, 0xb3, 0xc1, 0x0c, + 0xae, 0x6a, 0x10, 0x03, 0x00, 0x00, 0x06, 0xc2, + 0x11, 0xb3, 0xc1, 0x09, 0x43, 0x21, 0x02, 0x00, + 0x00, 0x04, 0xd1, 0x04, 0x00, 0x00, 0xc1, 0x0c, + 0x24, 0x02, 0x00, 0xc3, 0x0d, 0xad, 0xe9, 0x10, + 0x39, 0x8f, 0x00, 0x00, 0x00, 0x11, 0x04, 0x79, + 0x05, 0x00, 0x00, 0x21, 0x01, 0x00, 0x2f, 0xc1, + 0x0c, 0xc1, 0x0b, 0xa7, 0x11, 0xe9, 0x2d, 0x0e, + 0x5f, 0x06, 0x00, 0x43, 0xa7, 0x03, 0x00, 0x00, + 0xc1, 0x0a, 0x0b, 0x04, 0x21, 0x05, 0x00, 0x00, + 0x4d, 0xb5, 0x04, 0x00, 0x00, 0xc1, 0x09, 0x43, + 0xe4, 0x04, 0x00, 0x00, 0xc1, 0x0b, 0xc1, 0x0c, + 0x24, 0x02, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x00, + 0x24, 0x02, 0x00, 0x0e, 0xc1, 0x09, 0x43, 0xe4, + 0x04, 0x00, 0x00, 0xc1, 0x0c, 0xb5, 0x9f, 0xc1, + 0x0d, 0x24, 0x02, 0x00, 0xc2, 0x12, 0x5f, 0x07, + 0x00, 0x43, 0x20, 0x02, 0x00, 0x00, 0xc1, 0x12, + 0x24, 0x01, 0x00, 0x6a, 0xee, 0x01, 0x00, 0x00, + 0xc4, 0x04, 0xf1, 0x04, 0x00, 0x00, 0xc1, 0x12, + 0x9f, 0x04, 0xf2, 0x04, 0x00, 0x00, 0x9f, 0x48, + 0xc2, 0x13, 0xc1, 0x08, 0x04, 0xf1, 0x04, 0x00, + 0x00, 0xc1, 0x12, 0x9f, 0x04, 0xf2, 0x04, 0x00, + 0x00, 0x9f, 0x48, 0xc2, 0x14, 0x04, 0x94, 0x04, + 0x00, 0x00, 0xc1, 0x12, 0xad, 0xe9, 0x0f, 0xc1, + 0x14, 0xb4, 0xa6, 0xe9, 0x09, 0xb5, 0xc1, 0x14, + 0xa0, 0xc3, 0x14, 0xeb, 0x4b, 0x04, 0x95, 0x04, + 0x00, 0x00, 0xc1, 0x12, 0xad, 0xe9, 0x08, 0xc1, + 0x14, 0x93, 0xc2, 0x14, 0xeb, 0x3a, 0x04, 0x99, + 0x04, 0x00, 0x00, 0xc1, 0x12, 0xad, 0x11, 0xe9, + 0x2f, 0x0e, 0xb4, 0x98, 0xc4, 0x04, 0x58, 0x05, + 0x00, 0x00, 0x48, 0xad, 0x11, 0xe9, 0x21, 0x0e, + 0xb4, 0xc1, 0x14, 0xbc, 0x0c, 0x9e, 0xc3, 0x14, + 0xab, 0x11, 0xe9, 0x14, 0x0e, 0xb4, 0x98, 0xc4, + 0x04, 0x5a, 0x05, 0x00, 0x00, 0x48, 0xad, 0x11, + 0xe9, 0x06, 0x0e, 0xbc, 0x0c, 0xc3, 0x14, 0x0e, + 0x04, 0x9e, 0x04, 0x00, 0x00, 0xc1, 0x13, 0xad, + 0xe9, 0x0e, 0x5f, 0x08, 0x00, 0xc1, 0x06, 0xc1, + 0x14, 0xef, 0xc2, 0x11, 0xec, 0x2d, 0x01, 0x04, + 0x9f, 0x04, 0x00, 0x00, 0xc1, 0x13, 0xad, 0xe9, + 0x24, 0x5f, 0x08, 0x00, 0xc1, 0x07, 0xc1, 0x14, + 0xef, 0xc3, 0x11, 0xe8, 0xb6, 0xa7, 0x11, 0xe9, + 0x10, 0x0e, 0xc1, 0x11, 0x43, 0x23, 0x02, 0x00, + 0x00, 0xbc, 0xfe, 0x24, 0x01, 0x00, 0xc3, 0x11, + 0x0e, 0xec, 0x00, 0x01, 0xc1, 0x13, 0x5f, 0x09, + 0x00, 0xaa, 0x6a, 0xf7, 0x00, 0x00, 0x00, 0xc1, + 0x12, 0x11, 0x04, 0x95, 0x04, 0x00, 0x00, 0xad, + 0xe9, 0x28, 0x5f, 0x0a, 0x00, 0xc1, 0x0f, 0xc1, + 0x10, 0x04, 0x7a, 0x05, 0x00, 0x00, 0xc1, 0x13, + 0xc1, 0x08, 0x04, 0xf1, 0x04, 0x00, 0x00, 0xc1, + 0x12, 0x9f, 0x04, 0xf2, 0x04, 0x00, 0x00, 0x9f, + 0x48, 0x22, 0x05, 0x00, 0xc2, 0x11, 0xec, 0xc2, + 0x00, 0x11, 0x04, 0x97, 0x04, 0x00, 0x00, 0xad, + 0xe9, 0x48, 0x6d, 0x2c, 0x00, 0x00, 0x00, 0x5f, + 0x0a, 0x00, 0xc1, 0x0f, 0xc1, 0x10, 0x04, 0x7b, + 0x05, 0x00, 0x00, 0xc1, 0x13, 0xc1, 0x08, 0x04, + 0xf1, 0x04, 0x00, 0x00, 0xc1, 0x12, 0x9f, 0x04, + 0xf2, 0x04, 0x00, 0x00, 0x9f, 0x48, 0x22, 0x05, + 0x00, 0xc2, 0x11, 0x0e, 0xec, 0x8c, 0x00, 0xc2, + 0x15, 0x6d, 0x16, 0x00, 0x00, 0x00, 0x39, 0x8f, + 0x00, 0x00, 0x00, 0x11, 0x04, 0x7c, 0x05, 0x00, + 0x00, 0xc1, 0x05, 0x9f, 0x21, 0x01, 0x00, 0x2f, + 0x2f, 0x11, 0x04, 0x9d, 0x04, 0x00, 0x00, 0xad, + 0xe9, 0x06, 0xc0, 0xc2, 0x11, 0xeb, 0x63, 0x11, + 0x04, 0x93, 0x04, 0x00, 0x00, 0xad, 0xe9, 0x47, + 0x6d, 0x2b, 0x00, 0x00, 0x00, 0x5f, 0x0a, 0x00, + 0xc1, 0x0f, 0xc1, 0x10, 0x04, 0x7d, 0x05, 0x00, + 0x00, 0xc1, 0x13, 0xc1, 0x08, 0x04, 0xf1, 0x04, + 0x00, 0x00, 0xc1, 0x12, 0x9f, 0x04, 0xf2, 0x04, + 0x00, 0x00, 0x9f, 0x48, 0x22, 0x05, 0x00, 0xc2, + 0x11, 0x0e, 0xeb, 0x2e, 0xc2, 0x16, 0x6d, 0x16, + 0x00, 0x00, 0x00, 0x39, 0x8f, 0x00, 0x00, 0x00, + 0x11, 0x04, 0x7e, 0x05, 0x00, 0x00, 0xc1, 0x05, + 0x9f, 0x21, 0x01, 0x00, 0x2f, 0x2f, 0xc1, 0x08, + 0x04, 0xf1, 0x04, 0x00, 0x00, 0xc1, 0x12, 0x9f, + 0x04, 0xf2, 0x04, 0x00, 0x00, 0x9f, 0x48, 0xc2, + 0x11, 0x0e, 0x5f, 0x06, 0x00, 0x43, 0xa7, 0x03, + 0x00, 0x00, 0xc1, 0x0a, 0x0b, 0xc1, 0x12, 0x4d, + 0xb5, 0x04, 0x00, 0x00, 0xc1, 0x11, 0x4d, 0x3f, + 0x00, 0x00, 0x00, 0x24, 0x02, 0x00, 0x0e, 0xec, + 0x86, 0x00, 0x04, 0x7f, 0x05, 0x00, 0x00, 0xc1, + 0x12, 0xad, 0xe9, 0x4d, 0x5f, 0x0a, 0x00, 0xc1, + 0x0f, 0xc1, 0x10, 0x04, 0x80, 0x05, 0x00, 0x00, + 0xc1, 0x08, 0x04, 0x57, 0x05, 0x00, 0x00, 0x48, + 0xbc, 0x0b, 0xa7, 0xe9, 0x08, 0x04, 0x81, 0x05, + 0x00, 0x00, 0xeb, 0x06, 0x04, 0x21, 0x01, 0x00, + 0x00, 0x07, 0x22, 0x05, 0x00, 0xc2, 0x11, 0x5f, + 0x06, 0x00, 0x43, 0xa7, 0x03, 0x00, 0x00, 0xc1, + 0x0a, 0x0b, 0x04, 0x82, 0x05, 0x00, 0x00, 0x4d, + 0xb5, 0x04, 0x00, 0x00, 0xc1, 0x11, 0x4d, 0x3f, + 0x00, 0x00, 0x00, 0x24, 0x02, 0x00, 0xeb, 0x2e, + 0x5f, 0x06, 0x00, 0x43, 0xa7, 0x03, 0x00, 0x00, + 0xc1, 0x0a, 0x0b, 0x04, 0x21, 0x05, 0x00, 0x00, + 0x4d, 0xb5, 0x04, 0x00, 0x00, 0xc1, 0x09, 0x43, + 0xe4, 0x04, 0x00, 0x00, 0xc1, 0x0c, 0xc1, 0x0d, + 0xb5, 0x9f, 0x24, 0x02, 0x00, 0x4d, 0x3f, 0x00, + 0x00, 0x00, 0x24, 0x02, 0x00, 0x0e, 0xc1, 0x0d, + 0xb5, 0x9f, 0xc2, 0x0b, 0xc1, 0x09, 0x43, 0x21, + 0x02, 0x00, 0x00, 0x04, 0x20, 0x05, 0x00, 0x00, + 0xc1, 0x0b, 0x24, 0x02, 0x00, 0xc2, 0x0c, 0xec, + 0xed, 0xfc, 0xc1, 0x0d, 0xc1, 0x09, 0xe8, 0xb5, + 0xa0, 0xa5, 0x11, 0xe9, 0x2d, 0x0e, 0x5f, 0x06, + 0x00, 0x43, 0xa7, 0x03, 0x00, 0x00, 0xc1, 0x0a, + 0x0b, 0x04, 0x21, 0x05, 0x00, 0x00, 0x4d, 0xb5, + 0x04, 0x00, 0x00, 0xc1, 0x09, 0x43, 0x83, 0x05, + 0x00, 0x00, 0xc1, 0x0d, 0xb5, 0x9f, 0x24, 0x01, + 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x00, 0x24, 0x02, + 0x00, 0x0e, 0xc1, 0x0a, 0x28, 0xfc, 0x06, 0x01, + 0x00, 0x0d, 0x43, 0x06, 0x00, 0x84, 0x08, 0x02, + 0x03, 0x02, 0x03, 0x01, 0x00, 0x20, 0x05, 0xa0, + 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, 0x00, 0x01, + 0x00, 0xa4, 0x03, 0x00, 0x00, 0x00, 0xa6, 0x03, + 0x00, 0x01, 0x00, 0xa8, 0x03, 0x00, 0x02, 0x00, + 0x82, 0x08, 0x54, 0x01, 0xdc, 0xd0, 0xd1, 0xef, + 0xc8, 0xc0, 0xc9, 0xb4, 0xca, 0xc4, 0xe8, 0xc6, + 0xa7, 0xe9, 0x10, 0xc5, 0xc4, 0xc6, 0x48, 0x42, + 0x3f, 0x00, 0x00, 0x00, 0x9f, 0xc9, 0x95, 0x02, + 0xeb, 0xec, 0xc5, 0x28, 0xfc, 0x06, 0x01, 0x00, + 0x0d, 0x43, 0x06, 0x00, 0x86, 0x08, 0x02, 0x04, + 0x02, 0x04, 0x01, 0x00, 0x3c, 0x06, 0xa0, 0x03, + 0x00, 0x01, 0x00, 0xa2, 0x03, 0x00, 0x01, 0x00, + 0xa4, 0x03, 0x00, 0x00, 0x00, 0xa6, 0x03, 0x00, + 0x01, 0x00, 0xa8, 0x03, 0x00, 0x02, 0x00, 0xaa, + 0x03, 0x00, 0x03, 0x00, 0x82, 0x08, 0x54, 0x01, + 0xdc, 0xd0, 0xd1, 0xef, 0xc8, 0x26, 0x00, 0x00, + 0xc9, 0xb4, 0xca, 0xc4, 0xe8, 0xc6, 0xa7, 0xe9, + 0x2a, 0xc4, 0xc6, 0x48, 0xcb, 0xc5, 0x43, 0x24, + 0x02, 0x00, 0x00, 0x0b, 0xc7, 0x42, 0xb5, 0x04, + 0x00, 0x00, 0x4d, 0xb5, 0x04, 0x00, 0x00, 0xc7, + 0x42, 0x3f, 0x00, 0x00, 0x00, 0x4d, 0x3f, 0x00, + 0x00, 0x00, 0x24, 0x01, 0x00, 0x0e, 0x95, 0x02, + 0xeb, 0xd2, 0xc5, 0x28, 0xfc, 0x06, 0x01, 0x00, + 0x0d, 0x43, 0x06, 0x00, 0x00, 0x01, 0x06, 0x01, + 0x04, 0x04, 0x00, 0x48, 0x07, 0xa0, 0x03, 0x00, + 0x01, 0x00, 0xa2, 0x03, 0x00, 0x00, 0x00, 0xa4, + 0x03, 0x00, 0x01, 0x00, 0xa6, 0x03, 0x00, 0x02, + 0x00, 0xa8, 0x03, 0x00, 0x03, 0x00, 0x10, 0x00, + 0x01, 0x00, 0x98, 0x01, 0x00, 0x01, 0x00, 0x82, + 0x07, 0x0b, 0x01, 0x9e, 0x07, 0x19, 0x01, 0xc8, + 0x07, 0x2e, 0x01, 0xd2, 0x07, 0x33, 0x01, 0x08, + 0xc2, 0x04, 0x0c, 0x01, 0xc2, 0x05, 0xdc, 0x43, + 0xa7, 0x03, 0x00, 0x00, 0xc1, 0x04, 0x04, 0xa2, + 0x03, 0x00, 0x00, 0x24, 0x02, 0x00, 0x98, 0xe9, + 0x10, 0x39, 0xbf, 0x00, 0x00, 0x00, 0x11, 0x04, + 0x36, 0x05, 0x00, 0x00, 0x21, 0x01, 0x00, 0x2f, + 0xdd, 0xed, 0xc8, 0xc1, 0x05, 0xb5, 0x48, 0xc9, + 0xc1, 0x04, 0x04, 0xa2, 0x03, 0x00, 0x00, 0x48, + 0xca, 0xde, 0xd0, 0xee, 0xcb, 0xc4, 0xed, 0x0e, + 0xdf, 0xc6, 0xc7, 0xc5, 0x23, 0x03, 0x00, 0xfc, + 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, + 0x00, 0x05, 0x00, 0x04, 0x04, 0x00, 0x7b, 0x05, + 0xa0, 0x03, 0x00, 0x00, 0x00, 0xa2, 0x03, 0x00, + 0x01, 0x00, 0xa4, 0x03, 0x00, 0x02, 0x00, 0x98, + 0x01, 0x00, 0x01, 0x00, 0x10, 0x00, 0x01, 0x00, + 0xb4, 0x03, 0x08, 0x01, 0xa6, 0x07, 0x1d, 0x01, + 0xa2, 0x07, 0x1b, 0x01, 0x86, 0x08, 0x56, 0x01, + 0x08, 0xc2, 0x04, 0x0c, 0x01, 0xcb, 0xc7, 0xe8, + 0xb4, 0xa6, 0x11, 0xea, 0x07, 0x0e, 0x06, 0xc7, + 0xb4, 0x48, 0xad, 0xe9, 0x04, 0x06, 0xeb, 0x04, + 0xc7, 0xb4, 0x48, 0xc8, 0x07, 0xc1, 0x04, 0xae, + 0x11, 0xe9, 0x1b, 0x0e, 0x04, 0x48, 0x00, 0x00, + 0x00, 0xdc, 0x43, 0x0b, 0x00, 0x00, 0x00, 0xc1, + 0x04, 0x24, 0x01, 0x00, 0xad, 0x11, 0xe9, 0x06, + 0x0e, 0xdd, 0xc1, 0x04, 0xee, 0xcd, 0x98, 0x11, + 0xea, 0x0a, 0x0e, 0xc5, 0x04, 0x5c, 0x05, 0x00, + 0x00, 0x48, 0x98, 0xe9, 0x10, 0x39, 0xbf, 0x00, + 0x00, 0x00, 0x11, 0x04, 0x84, 0x05, 0x00, 0x00, + 0x21, 0x01, 0x00, 0x2f, 0x06, 0xc4, 0xad, 0xe9, + 0x10, 0x39, 0x97, 0x00, 0x00, 0x00, 0x43, 0x68, + 0x05, 0x00, 0x00, 0x24, 0x00, 0x00, 0xeb, 0x04, + 0xde, 0xc4, 0xee, 0xca, 0xdf, 0xc1, 0x04, 0xc6, + 0x23, 0x02, 0x00, 0xfc, 0x06, 0x01, 0x00, 0x0d, + 0x43, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x0e, + 0x05, 0x00, 0xf5, 0x01, 0x07, 0xa0, 0x03, 0x00, + 0x00, 0x00, 0xa2, 0x03, 0x00, 0x01, 0x00, 0xa4, + 0x03, 0x00, 0x02, 0x00, 0xa6, 0x03, 0x00, 0x03, + 0x00, 0xa8, 0x03, 0x00, 0x04, 0x00, 0xaa, 0x03, + 0x00, 0x05, 0x00, 0x10, 0x00, 0x01, 0x00, 0x9a, + 0x07, 0x17, 0x01, 0xb4, 0x03, 0x08, 0x01, 0xa6, + 0x07, 0x1d, 0x01, 0x82, 0x07, 0x0b, 0x01, 0x88, + 0x07, 0x0e, 0x01, 0x08, 0xc2, 0x06, 0x06, 0xc8, + 0xdc, 0x11, 0x21, 0x00, 0x00, 0xc9, 0x04, 0x38, + 0x05, 0x00, 0x00, 0x04, 0x85, 0x05, 0x00, 0x00, + 0x04, 0x39, 0x05, 0x00, 0x00, 0x04, 0x50, 0x05, + 0x00, 0x00, 0x04, 0x9c, 0x04, 0x00, 0x00, 0x04, + 0x97, 0x04, 0x00, 0x00, 0x04, 0x93, 0x04, 0x00, + 0x00, 0x04, 0x94, 0x04, 0x00, 0x00, 0x04, 0x95, + 0x04, 0x00, 0x00, 0x04, 0x96, 0x04, 0x00, 0x00, + 0x04, 0x99, 0x04, 0x00, 0x00, 0x04, 0x9a, 0x04, + 0x00, 0x00, 0x04, 0x9b, 0x04, 0x00, 0x00, 0x04, + 0x9d, 0x04, 0x00, 0x00, 0x26, 0x0e, 0x00, 0xca, + 0x07, 0xc1, 0x06, 0xae, 0x11, 0xe9, 0x1b, 0x0e, + 0x04, 0x48, 0x00, 0x00, 0x00, 0xdd, 0x43, 0x0b, + 0x00, 0x00, 0x00, 0xc1, 0x06, 0x24, 0x01, 0x00, + 0xad, 0x11, 0xe9, 0x06, 0x0e, 0xde, 0xc1, 0x06, + 0xee, 0xcf, 0x98, 0x11, 0xea, 0x0a, 0x0e, 0xc7, + 0x04, 0x5c, 0x05, 0x00, 0x00, 0x48, 0x98, 0xe9, + 0x10, 0x39, 0xbf, 0x00, 0x00, 0x00, 0x11, 0x04, + 0x86, 0x05, 0x00, 0x00, 0x21, 0x01, 0x00, 0x2f, + 0xb4, 0xc2, 0x04, 0xc6, 0xe8, 0xc2, 0x05, 0xc1, + 0x04, 0xc1, 0x05, 0xa5, 0xe9, 0x4b, 0xdf, 0x43, + 0xa7, 0x03, 0x00, 0x00, 0xc7, 0x04, 0xf1, 0x04, + 0x00, 0x00, 0xc6, 0xc1, 0x04, 0x48, 0x9f, 0x04, + 0xf2, 0x04, 0x00, 0x00, 0x9f, 0xcc, 0x24, 0x02, + 0x00, 0x11, 0xe9, 0x28, 0x0e, 0xc5, 0xc6, 0xc1, + 0x04, 0x48, 0x72, 0x0b, 0xc7, 0xc4, 0x48, 0x4d, + 0x3f, 0x00, 0x00, 0x00, 0xb4, 0x98, 0x4d, 0x3d, + 0x00, 0x00, 0x00, 0xb4, 0x98, 0x4d, 0x3c, 0x00, + 0x00, 0x00, 0xb4, 0x98, 0x4d, 0x3e, 0x00, 0x00, + 0x00, 0x16, 0x4a, 0x0e, 0x95, 0x04, 0xeb, 0xb0, + 0x5f, 0x04, 0x00, 0x0b, 0xc5, 0x23, 0x02, 0x00, + 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, + 0x00, 0x00, 0x02, 0x00, 0x06, 0x02, 0x00, 0x44, + 0x02, 0x10, 0x00, 0x01, 0x00, 0x98, 0x01, 0x00, + 0x01, 0x00, 0xde, 0x07, 0x3d, 0x01, 0xd6, 0x07, + 0x38, 0x01, 0x08, 0xc8, 0x0c, 0x01, 0xc9, 0x04, + 0x87, 0x05, 0x00, 0x00, 0x39, 0x8d, 0x00, 0x00, + 0x00, 0x42, 0x3a, 0x00, 0x00, 0x00, 0x42, 0x36, + 0x00, 0x00, 0x00, 0x43, 0xa7, 0x03, 0x00, 0x00, + 0xc4, 0x24, 0x01, 0x00, 0xae, 0xe9, 0x10, 0x39, + 0xbf, 0x00, 0x00, 0x00, 0x11, 0x04, 0x88, 0x05, + 0x00, 0x00, 0x21, 0x01, 0x00, 0x2f, 0xdc, 0xdd, + 0x11, 0xc5, 0xb4, 0x48, 0xc5, 0xb5, 0x48, 0x21, + 0x02, 0x00, 0xc4, 0x23, 0x02, 0x00, 0xfc, 0x06, + 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, 0x00, + 0x06, 0x00, 0x07, 0x03, 0x00, 0x6f, 0x06, 0xa0, + 0x03, 0x00, 0x00, 0x00, 0xa2, 0x03, 0x00, 0x01, + 0x00, 0xa4, 0x03, 0x00, 0x02, 0x00, 0xa6, 0x03, + 0x00, 0x03, 0x00, 0x10, 0x00, 0x01, 0x00, 0x98, + 0x01, 0x00, 0x01, 0x00, 0xf8, 0x07, 0x4f, 0x01, + 0xfe, 0x07, 0x52, 0x01, 0x84, 0x08, 0x55, 0x01, + 0x08, 0xc2, 0x04, 0x0c, 0x01, 0xc2, 0x05, 0x04, + 0x89, 0x05, 0x00, 0x00, 0x39, 0x8d, 0x00, 0x00, + 0x00, 0x42, 0x3a, 0x00, 0x00, 0x00, 0x42, 0x36, + 0x00, 0x00, 0x00, 0x43, 0xa7, 0x03, 0x00, 0x00, + 0xc1, 0x04, 0x24, 0x01, 0x00, 0xae, 0xe9, 0x10, + 0x39, 0xbf, 0x00, 0x00, 0x00, 0x11, 0x04, 0x8a, + 0x05, 0x00, 0x00, 0x21, 0x01, 0x00, 0x2f, 0xc1, + 0x04, 0x8f, 0xc8, 0x39, 0xd4, 0x04, 0x00, 0x00, + 0xc4, 0xee, 0xe9, 0x07, 0x04, 0x8b, 0x05, 0x00, + 0x00, 0x28, 0xc1, 0x05, 0xb4, 0x48, 0xc9, 0xc1, + 0x05, 0xb5, 0x48, 0xca, 0xdc, 0x11, 0xc5, 0xdd, + 0xc6, 0x04, 0x4c, 0x05, 0x00, 0x00, 0x04, 0x66, + 0x05, 0x00, 0x00, 0xf0, 0xce, 0x21, 0x02, 0x00, + 0xcb, 0xde, 0xc7, 0xc4, 0x23, 0x02, 0x00, 0xfc, + 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, + 0x00, 0x06, 0x00, 0x07, 0x03, 0x00, 0x6f, 0x06, + 0xa0, 0x03, 0x00, 0x00, 0x00, 0xa2, 0x03, 0x00, + 0x01, 0x00, 0xa4, 0x03, 0x00, 0x02, 0x00, 0xa6, + 0x03, 0x00, 0x03, 0x00, 0x10, 0x00, 0x01, 0x00, + 0x98, 0x01, 0x00, 0x01, 0x00, 0xf8, 0x07, 0x4f, + 0x01, 0xfe, 0x07, 0x52, 0x01, 0x84, 0x08, 0x55, + 0x01, 0x08, 0xc2, 0x04, 0x0c, 0x01, 0xc2, 0x05, + 0x04, 0x89, 0x05, 0x00, 0x00, 0x39, 0x8d, 0x00, + 0x00, 0x00, 0x42, 0x3a, 0x00, 0x00, 0x00, 0x42, + 0x36, 0x00, 0x00, 0x00, 0x43, 0xa7, 0x03, 0x00, + 0x00, 0xc1, 0x04, 0x24, 0x01, 0x00, 0xae, 0xe9, + 0x10, 0x39, 0xbf, 0x00, 0x00, 0x00, 0x11, 0x04, + 0x8c, 0x05, 0x00, 0x00, 0x21, 0x01, 0x00, 0x2f, + 0xc1, 0x04, 0x8f, 0xc8, 0x39, 0xd4, 0x04, 0x00, + 0x00, 0xc4, 0xee, 0xe9, 0x07, 0x04, 0x8b, 0x05, + 0x00, 0x00, 0x28, 0xc1, 0x05, 0xb4, 0x48, 0xc9, + 0xc1, 0x05, 0xb5, 0x48, 0xca, 0xdc, 0x11, 0xc5, + 0xdd, 0xc6, 0x04, 0x4d, 0x05, 0x00, 0x00, 0x04, + 0x4d, 0x05, 0x00, 0x00, 0xf0, 0xce, 0x21, 0x02, + 0x00, 0xcb, 0xde, 0xc7, 0xc4, 0x23, 0x02, 0x00, + 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, + 0x00, 0x00, 0x06, 0x00, 0x07, 0x03, 0x00, 0x6f, + 0x06, 0xa0, 0x03, 0x00, 0x00, 0x00, 0xa2, 0x03, + 0x00, 0x01, 0x00, 0xa4, 0x03, 0x00, 0x02, 0x00, + 0xa6, 0x03, 0x00, 0x03, 0x00, 0x10, 0x00, 0x01, + 0x00, 0x98, 0x01, 0x00, 0x01, 0x00, 0xf8, 0x07, + 0x4f, 0x01, 0xfe, 0x07, 0x52, 0x01, 0x84, 0x08, + 0x55, 0x01, 0x08, 0xc2, 0x04, 0x0c, 0x01, 0xc2, + 0x05, 0x04, 0x89, 0x05, 0x00, 0x00, 0x39, 0x8d, + 0x00, 0x00, 0x00, 0x42, 0x3a, 0x00, 0x00, 0x00, + 0x42, 0x36, 0x00, 0x00, 0x00, 0x43, 0xa7, 0x03, + 0x00, 0x00, 0xc1, 0x04, 0x24, 0x01, 0x00, 0xae, + 0xe9, 0x10, 0x39, 0xbf, 0x00, 0x00, 0x00, 0x11, + 0x04, 0x8d, 0x05, 0x00, 0x00, 0x21, 0x01, 0x00, + 0x2f, 0xc1, 0x04, 0x8f, 0xc8, 0x39, 0xd4, 0x04, + 0x00, 0x00, 0xc4, 0xee, 0xe9, 0x07, 0x04, 0x8b, + 0x05, 0x00, 0x00, 0x28, 0xc1, 0x05, 0xb4, 0x48, + 0xc9, 0xc1, 0x05, 0xb5, 0x48, 0xca, 0xdc, 0x11, + 0xc5, 0xdd, 0xc6, 0x04, 0x65, 0x05, 0x00, 0x00, + 0x04, 0x65, 0x05, 0x00, 0x00, 0xf0, 0xce, 0x21, + 0x02, 0x00, 0xcb, 0xde, 0xc7, 0xc4, 0x23, 0x02, + 0x00, 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x07, 0x03, 0x00, + 0xaf, 0x01, 0x01, 0xa0, 0x03, 0x00, 0x00, 0x00, + 0x84, 0x07, 0x0c, 0x01, 0x88, 0x08, 0x57, 0x01, + 0x82, 0x07, 0x0b, 0x01, 0xdc, 0x39, 0x90, 0x00, + 0x00, 0x00, 0x42, 0x3a, 0x00, 0x00, 0x00, 0x04, + 0x37, 0x00, 0x00, 0x00, 0x0b, 0xb4, 0x98, 0x4d, + 0x3d, 0x00, 0x00, 0x00, 0xb4, 0x98, 0x4d, 0x3c, + 0x00, 0x00, 0x00, 0xdd, 0x42, 0x90, 0x00, 0x00, + 0x00, 0x42, 0x37, 0x00, 0x00, 0x00, 0x4d, 0x3f, + 0x00, 0x00, 0x00, 0xf0, 0x0e, 0xdc, 0x39, 0x97, + 0x00, 0x00, 0x00, 0x42, 0x3a, 0x00, 0x00, 0x00, + 0x04, 0x37, 0x00, 0x00, 0x00, 0x0b, 0xb4, 0x98, + 0x4d, 0x3d, 0x00, 0x00, 0x00, 0xb4, 0x98, 0x4d, + 0x3c, 0x00, 0x00, 0x00, 0xdd, 0x42, 0x97, 0x00, + 0x00, 0x00, 0x42, 0x37, 0x00, 0x00, 0x00, 0x4d, + 0x3f, 0x00, 0x00, 0x00, 0xf0, 0x0e, 0xdd, 0x42, + 0x97, 0x00, 0x00, 0x00, 0x7d, 0xeb, 0x40, 0xc8, + 0xde, 0x43, 0xa7, 0x03, 0x00, 0x00, 0xdd, 0x42, + 0x97, 0x00, 0x00, 0x00, 0xc4, 0x24, 0x02, 0x00, + 0x11, 0xe9, 0x2b, 0x0e, 0xdc, 0x39, 0x97, 0x00, + 0x00, 0x00, 0x42, 0x3a, 0x00, 0x00, 0x00, 0xc4, + 0x0b, 0xb4, 0x98, 0x4d, 0x3d, 0x00, 0x00, 0x00, + 0xb4, 0x98, 0x4d, 0x3c, 0x00, 0x00, 0x00, 0xdd, + 0x42, 0x97, 0x00, 0x00, 0x00, 0xc4, 0x48, 0x4d, + 0x3f, 0x00, 0x00, 0x00, 0xf0, 0x0e, 0x80, 0xe9, + 0xbf, 0x0e, 0x29, 0xfc, 0x06, 0x01, 0x00, 0x0d, + 0x43, 0x06, 0x00, 0x00, 0x01, 0x00, 0x01, 0x03, + 0x06, 0x01, 0x28, 0x01, 0xa0, 0x03, 0x00, 0x01, + 0x00, 0x8e, 0x07, 0x11, 0x01, 0x92, 0x07, 0x13, + 0x01, 0x96, 0x07, 0x15, 0x01, 0xb8, 0x07, 0x26, + 0x01, 0xba, 0x07, 0x27, 0x01, 0xc0, 0x07, 0x2a, + 0x01, 0x5f, 0x05, 0x00, 0xd0, 0x42, 0x38, 0x05, + 0x00, 0x00, 0xee, 0x98, 0xe9, 0x10, 0x39, 0x8f, + 0x00, 0x00, 0x00, 0x11, 0x04, 0x8e, 0x05, 0x00, + 0x00, 0x21, 0x01, 0x00, 0x2f, 0xbf, 0x00, 0xd0, + 0xd0, 0x42, 0x38, 0x05, 0x00, 0x00, 0xef, 0x98, + 0x29, 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, + 0x00, 0x00, 0x02, 0x03, 0x02, 0x06, 0x05, 0x00, + 0xee, 0x01, 0x05, 0xa0, 0x03, 0x00, 0x01, 0x00, + 0xa2, 0x03, 0x00, 0x01, 0x00, 0xa4, 0x03, 0x00, + 0x00, 0x00, 0xa6, 0x03, 0x00, 0x01, 0x00, 0xa8, + 0x03, 0x00, 0x02, 0x00, 0x8e, 0x07, 0x00, 0x00, + 0x92, 0x07, 0x01, 0x00, 0x96, 0x07, 0x02, 0x00, + 0xb8, 0x07, 0x03, 0x00, 0xba, 0x07, 0x04, 0x00, + 0xd0, 0x42, 0x45, 0x00, 0x00, 0x00, 0x98, 0xe9, + 0x10, 0x39, 0x8f, 0x00, 0x00, 0x00, 0x11, 0x04, + 0x8f, 0x05, 0x00, 0x00, 0x21, 0x01, 0x00, 0x2f, + 0x06, 0xc8, 0xd1, 0x26, 0x01, 0x00, 0xc9, 0xd1, + 0x43, 0x5b, 0x00, 0x00, 0x00, 0x04, 0x31, 0x02, + 0x00, 0x00, 0x24, 0x01, 0x00, 0xce, 0xe8, 0xb6, + 0xa7, 0x11, 0xe9, 0x23, 0x0e, 0xb8, 0xc6, 0xb5, + 0x48, 0xe8, 0xad, 0x11, 0xe9, 0x19, 0x0e, 0xdc, + 0x43, 0xa7, 0x03, 0x00, 0x00, 0xc5, 0xc6, 0xb4, + 0x48, 0x04, 0x31, 0x02, 0x00, 0x00, 0x9f, 0xc6, + 0xb6, 0x48, 0x9f, 0x24, 0x02, 0x00, 0x0e, 0xdd, + 0x43, 0xa7, 0x03, 0x00, 0x00, 0xc5, 0x24, 0x01, + 0x00, 0xcc, 0xe9, 0x7e, 0xdc, 0x43, 0xa7, 0x03, + 0x00, 0x00, 0xde, 0x42, 0xa1, 0x03, 0x00, 0x00, + 0x04, 0xa2, 0x03, 0x00, 0x00, 0x48, 0xc4, 0x24, + 0x02, 0x00, 0x0e, 0xde, 0x42, 0xa1, 0x03, 0x00, + 0x00, 0x04, 0xa5, 0x03, 0x00, 0x00, 0x48, 0xc4, + 0x72, 0xd0, 0x42, 0x45, 0x00, 0x00, 0x00, 0x4a, + 0xd0, 0x42, 0x4d, 0x05, 0x00, 0x00, 0x11, 0xe9, + 0x45, 0x0e, 0xd0, 0x42, 0x4d, 0x05, 0x00, 0x00, + 0xd0, 0x42, 0x45, 0x00, 0x00, 0x00, 0x42, 0xa3, + 0x03, 0x00, 0x00, 0x44, 0xa3, 0x03, 0x00, 0x00, + 0xdc, 0x43, 0xa7, 0x03, 0x00, 0x00, 0xde, 0x42, + 0xad, 0x04, 0x00, 0x00, 0x04, 0xa2, 0x03, 0x00, + 0x00, 0x48, 0xc4, 0x24, 0x02, 0x00, 0x0e, 0xde, + 0x42, 0xad, 0x04, 0x00, 0x00, 0x04, 0xa5, 0x03, + 0x00, 0x00, 0x48, 0xc4, 0x72, 0xd0, 0x42, 0x4d, + 0x05, 0x00, 0x00, 0x16, 0x4a, 0x0e, 0xec, 0x78, + 0xff, 0x06, 0xdf, 0xad, 0x11, 0xe9, 0x07, 0x0e, + 0x5f, 0x04, 0x00, 0xd1, 0xee, 0x29, 0xfc, 0x06, + 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, 0x01, + 0x00, 0x01, 0x03, 0x03, 0x00, 0x29, 0x01, 0xa0, + 0x03, 0x00, 0x01, 0x00, 0x96, 0x07, 0x15, 0x01, + 0xb8, 0x07, 0x26, 0x01, 0xba, 0x07, 0x27, 0x01, + 0xdc, 0x42, 0xa1, 0x03, 0x00, 0x00, 0x04, 0xa2, + 0x03, 0x00, 0x00, 0xd0, 0x4a, 0xdc, 0x42, 0xad, + 0x04, 0x00, 0x00, 0x04, 0xa2, 0x03, 0x00, 0x00, + 0xd0, 0x4a, 0x06, 0xdd, 0xad, 0x11, 0xe9, 0x09, + 0x0e, 0xde, 0x04, 0xe4, 0x00, 0x00, 0x00, 0xee, + 0x29, 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, + 0x09, 0x00, 0x96, 0x07, 0x15, 0x01, 0xdc, 0xb4, + 0x98, 0x44, 0xc5, 0x04, 0x00, 0x00, 0x29, 0xfc, + 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, + 0x02, 0x00, 0x02, 0x03, 0x00, 0x01, 0x16, 0x02, + 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, 0x00, + 0x01, 0x00, 0xbf, 0x00, 0x07, 0xd1, 0xab, 0x11, + 0xe9, 0x0c, 0x0e, 0x39, 0xd2, 0x00, 0x00, 0x00, + 0x42, 0xdd, 0x00, 0x00, 0x00, 0x23, 0x01, 0x00, + 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x0f, + 0x00, 0x39, 0x8f, 0x00, 0x00, 0x00, 0x11, 0x04, + 0x90, 0x05, 0x00, 0x00, 0x21, 0x01, 0x00, 0x2f, + 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, + 0x00, 0x01, 0x00, 0x01, 0x02, 0x00, 0x00, 0x11, + 0x01, 0xa0, 0x03, 0x00, 0x01, 0x00, 0xb5, 0xd0, + 0xab, 0xe9, 0x07, 0x04, 0x91, 0x05, 0x00, 0x00, + 0x28, 0x04, 0x92, 0x05, 0x00, 0x00, 0x28, 0xfc, + 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, + 0x01, 0x00, 0x01, 0x02, 0x00, 0x00, 0x18, 0x01, + 0xa0, 0x03, 0x00, 0x01, 0x00, 0xb4, 0xd0, 0xab, + 0x11, 0xea, 0x05, 0x0e, 0xb5, 0xd0, 0xab, 0xe9, + 0x07, 0x04, 0x91, 0x05, 0x00, 0x00, 0x28, 0x04, + 0x92, 0x05, 0x00, 0x00, 0x28, 0xfc, 0x06, 0x01, + 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, 0x01, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x16, 0x01, 0xa0, 0x03, + 0x00, 0x01, 0x00, 0xd0, 0xb4, 0xa8, 0xe9, 0x0c, + 0xd0, 0xb5, 0xa6, 0xe9, 0x07, 0x04, 0x91, 0x05, + 0x00, 0x00, 0x28, 0x04, 0x92, 0x05, 0x00, 0x00, + 0x28, 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, + 0x00, 0x00, 0x01, 0x02, 0x01, 0x03, 0x00, 0x00, + 0x7c, 0x03, 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, + 0x03, 0x00, 0x00, 0x00, 0xa4, 0x03, 0x00, 0x01, + 0x00, 0x39, 0x91, 0x00, 0x00, 0x00, 0xd0, 0xee, + 0x43, 0x5b, 0x00, 0x00, 0x00, 0x04, 0x23, 0x05, + 0x00, 0x00, 0x24, 0x01, 0x00, 0xc8, 0x39, 0x90, + 0x00, 0x00, 0x00, 0xc4, 0xb4, 0x48, 0xee, 0xd0, + 0xab, 0x11, 0xe9, 0x0f, 0x0e, 0xc4, 0xb4, 0x48, + 0x43, 0x23, 0x02, 0x00, 0x00, 0xbc, 0xfe, 0x24, + 0x01, 0x00, 0xc9, 0xb4, 0xd0, 0xab, 0xe9, 0x07, + 0x04, 0x93, 0x05, 0x00, 0x00, 0x28, 0xb5, 0xd0, + 0xab, 0xe9, 0x07, 0x04, 0x91, 0x05, 0x00, 0x00, + 0x28, 0xb6, 0xd0, 0xab, 0xe9, 0x07, 0x04, 0x94, + 0x05, 0x00, 0x00, 0x28, 0xc5, 0xb7, 0xa8, 0xe9, + 0x0d, 0xc5, 0xbc, 0x0a, 0xa6, 0xe9, 0x07, 0x04, + 0x95, 0x05, 0x00, 0x00, 0x28, 0xc5, 0xbc, 0x0b, + 0xa8, 0xe9, 0x0d, 0xc5, 0xbc, 0x63, 0xa6, 0xe9, + 0x07, 0x04, 0x96, 0x05, 0x00, 0x00, 0x28, 0x04, + 0x92, 0x05, 0x00, 0x00, 0x28, 0xfc, 0x06, 0x01, + 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x03, 0x00, 0x00, 0x2c, 0x02, 0xa0, 0x03, + 0x00, 0x01, 0x00, 0xa2, 0x03, 0x00, 0x00, 0x00, + 0x39, 0x91, 0x00, 0x00, 0x00, 0xd0, 0xee, 0x43, + 0x5b, 0x00, 0x00, 0x00, 0x04, 0x23, 0x05, 0x00, + 0x00, 0x24, 0x01, 0x00, 0xb5, 0x48, 0x98, 0xc8, + 0xb5, 0xd0, 0xab, 0xe9, 0x0a, 0xc4, 0xe9, 0x07, + 0x04, 0x91, 0x05, 0x00, 0x00, 0x28, 0x04, 0x92, + 0x05, 0x00, 0x00, 0x28, 0xfc, 0x06, 0x01, 0x00, + 0x0d, 0x43, 0x06, 0x00, 0x00, 0x01, 0x04, 0x01, + 0x03, 0x00, 0x00, 0xa7, 0x01, 0x05, 0xa0, 0x03, + 0x00, 0x01, 0x00, 0xa2, 0x03, 0x00, 0x00, 0x00, + 0xa4, 0x03, 0x00, 0x01, 0x00, 0xa6, 0x03, 0x00, + 0x02, 0x00, 0xa8, 0x03, 0x00, 0x03, 0x00, 0x39, + 0x91, 0x00, 0x00, 0x00, 0xd0, 0xee, 0x43, 0x5b, + 0x00, 0x00, 0x00, 0x04, 0x23, 0x05, 0x00, 0x00, + 0x24, 0x01, 0x00, 0xc8, 0x39, 0x90, 0x00, 0x00, + 0x00, 0xc4, 0xb4, 0x48, 0xee, 0xd0, 0xab, 0xcd, + 0x11, 0xe9, 0x0e, 0x0e, 0xc4, 0xb4, 0x48, 0x43, + 0x23, 0x02, 0x00, 0x00, 0xb3, 0x24, 0x01, 0x00, + 0xca, 0xc5, 0x11, 0xe9, 0x0f, 0x0e, 0xc4, 0xb4, + 0x48, 0x43, 0x23, 0x02, 0x00, 0x00, 0xbc, 0xfe, + 0x24, 0x01, 0x00, 0xcb, 0xb5, 0xc6, 0xab, 0xe9, + 0x0d, 0xbc, 0x0b, 0xc7, 0xac, 0xe9, 0x07, 0x04, + 0x91, 0x05, 0x00, 0x00, 0x28, 0xc6, 0xb6, 0xa8, + 0xe9, 0x1a, 0xc6, 0xb8, 0xa6, 0xe9, 0x15, 0xc7, + 0xbc, 0x0c, 0xa5, 0x11, 0xea, 0x06, 0x0e, 0xc7, + 0xbc, 0x0e, 0xa7, 0xe9, 0x07, 0x04, 0x95, 0x05, + 0x00, 0x00, 0x28, 0xc5, 0x11, 0xe9, 0x05, 0x0e, + 0xb4, 0xc6, 0xab, 0x11, 0xea, 0x1b, 0x0e, 0xc6, + 0xb9, 0xa8, 0x11, 0xe9, 0x06, 0x0e, 0xc6, 0xbc, + 0x09, 0xa6, 0x11, 0xea, 0x0c, 0x0e, 0xc7, 0xbc, + 0x0b, 0xa8, 0xe9, 0x0d, 0xc7, 0xbc, 0x0e, 0xa6, + 0xe9, 0x07, 0x04, 0x96, 0x05, 0x00, 0x00, 0x28, + 0x04, 0x92, 0x05, 0x00, 0x00, 0x28, 0xfc, 0x06, + 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, 0x01, + 0x00, 0x01, 0x01, 0x00, 0x00, 0x06, 0x01, 0xa0, + 0x03, 0x00, 0x01, 0x00, 0x04, 0x92, 0x05, 0x00, + 0x00, 0x28, 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, + 0x06, 0x00, 0x00, 0x01, 0x05, 0x01, 0x03, 0x00, + 0x00, 0xf1, 0x01, 0x06, 0xa0, 0x03, 0x00, 0x01, + 0x00, 0xa2, 0x03, 0x00, 0x00, 0x00, 0xa4, 0x03, + 0x00, 0x01, 0x00, 0xa6, 0x03, 0x00, 0x02, 0x00, + 0xa8, 0x03, 0x00, 0x03, 0x00, 0xaa, 0x03, 0x00, + 0x04, 0x00, 0x39, 0x91, 0x00, 0x00, 0x00, 0xd0, + 0xee, 0x43, 0x5b, 0x00, 0x00, 0x00, 0x04, 0x23, + 0x05, 0x00, 0x00, 0x24, 0x01, 0x00, 0xc8, 0x39, + 0x90, 0x00, 0x00, 0x00, 0xc4, 0xb4, 0x48, 0xee, + 0xd0, 0xab, 0xcd, 0x11, 0xe9, 0x0e, 0x0e, 0xc4, + 0xb4, 0x48, 0x43, 0x23, 0x02, 0x00, 0x00, 0xb3, + 0x24, 0x01, 0x00, 0xca, 0xc5, 0x11, 0xe9, 0x0f, + 0x0e, 0xc4, 0xb4, 0x48, 0x43, 0x23, 0x02, 0x00, + 0x00, 0xbc, 0xfe, 0x24, 0x01, 0x00, 0xcb, 0xc5, + 0x11, 0xe9, 0x0f, 0x0e, 0xc4, 0xb4, 0x48, 0x43, + 0x23, 0x02, 0x00, 0x00, 0xbc, 0xfa, 0x24, 0x01, + 0x00, 0xc2, 0x04, 0xb5, 0xc6, 0xab, 0xe9, 0x19, + 0xbc, 0x0b, 0xc7, 0xac, 0xe9, 0x13, 0xbc, 0x47, + 0xc7, 0xac, 0xe9, 0x0d, 0xbc, 0x5b, 0xc7, 0xac, + 0xe9, 0x07, 0x04, 0x91, 0x05, 0x00, 0x00, 0x28, + 0xb6, 0xc6, 0xab, 0xe9, 0x19, 0xbc, 0x0c, 0xc7, + 0xac, 0xe9, 0x13, 0xbc, 0x48, 0xc7, 0xac, 0xe9, + 0x0d, 0xbc, 0x5c, 0xc7, 0xac, 0xe9, 0x07, 0x04, + 0x94, 0x05, 0x00, 0x00, 0x28, 0xb7, 0xc6, 0xab, + 0x11, 0xea, 0x0d, 0x0e, 0xb8, 0xc6, 0xab, 0x11, + 0xea, 0x06, 0x0e, 0xbc, 0x09, 0xc6, 0xab, 0xe9, + 0x31, 0xc7, 0xbc, 0x0a, 0xa5, 0x11, 0xea, 0x06, + 0x0e, 0xc7, 0xbc, 0x13, 0xa7, 0xe9, 0x23, 0xc7, + 0xbc, 0x46, 0xa5, 0x11, 0xea, 0x06, 0x0e, 0xc7, + 0xbc, 0x4f, 0xa7, 0xe9, 0x15, 0xc7, 0xbc, 0x5a, + 0xa5, 0x11, 0xea, 0x06, 0x0e, 0xc7, 0xbc, 0x63, + 0xa7, 0xe9, 0x07, 0x04, 0x95, 0x05, 0x00, 0x00, + 0x28, 0xb4, 0xd0, 0xac, 0xe9, 0x10, 0xc5, 0xe9, + 0x0d, 0xb4, 0xc1, 0x04, 0xab, 0xe9, 0x07, 0x04, + 0x96, 0x05, 0x00, 0x00, 0x28, 0x04, 0x92, 0x05, + 0x00, 0x00, 0x28, 0xfc, 0x06, 0x01, 0x00, 0x0d, + 0x43, 0x06, 0x00, 0x00, 0x01, 0x08, 0x01, 0x03, + 0x00, 0x00, 0xd0, 0x01, 0x09, 0xa0, 0x03, 0x00, + 0x01, 0x00, 0xa2, 0x03, 0x00, 0x00, 0x00, 0xa4, + 0x03, 0x00, 0x01, 0x00, 0xa6, 0x03, 0x00, 0x02, + 0x00, 0xa8, 0x03, 0x00, 0x03, 0x00, 0xaa, 0x03, + 0x00, 0x04, 0x00, 0xac, 0x03, 0x00, 0x05, 0x00, + 0xae, 0x03, 0x00, 0x06, 0x00, 0xb0, 0x03, 0x00, + 0x07, 0x00, 0x39, 0x91, 0x00, 0x00, 0x00, 0xd0, + 0xee, 0x43, 0x5b, 0x00, 0x00, 0x00, 0x04, 0x23, + 0x05, 0x00, 0x00, 0x24, 0x01, 0x00, 0xcc, 0xb4, + 0x48, 0xc9, 0xc4, 0xb5, 0x48, 0x11, 0xea, 0x03, + 0x0e, 0xc0, 0xca, 0xc4, 0xb5, 0x48, 0x98, 0xcb, + 0xc5, 0x43, 0x23, 0x02, 0x00, 0x00, 0xb3, 0x24, + 0x01, 0x00, 0xc2, 0x04, 0xc5, 0x43, 0x23, 0x02, + 0x00, 0x00, 0xbc, 0xfe, 0x24, 0x01, 0x00, 0xc2, + 0x05, 0xc6, 0x43, 0x23, 0x02, 0x00, 0x00, 0xb3, + 0x24, 0x01, 0x00, 0xc2, 0x06, 0xc6, 0x43, 0x23, + 0x02, 0x00, 0x00, 0xbc, 0xfe, 0x24, 0x01, 0x00, + 0xc2, 0x07, 0xc7, 0x11, 0xe9, 0x0f, 0x0e, 0xb5, + 0xc1, 0x04, 0xab, 0x11, 0xe9, 0x07, 0x0e, 0xbc, + 0x0b, 0xc1, 0x05, 0xac, 0x11, 0xea, 0x0d, 0x0e, + 0xb5, 0xc1, 0x06, 0xab, 0xe9, 0x0e, 0xbc, 0x0b, + 0xc1, 0x07, 0xac, 0xe9, 0x07, 0x04, 0x91, 0x05, + 0x00, 0x00, 0x28, 0xc7, 0x11, 0xe9, 0x20, 0x0e, + 0xc1, 0x04, 0xb6, 0xa8, 0x11, 0xe9, 0x18, 0x0e, + 0xc1, 0x04, 0xb8, 0xa6, 0x11, 0xe9, 0x10, 0x0e, + 0xc1, 0x05, 0xbc, 0x0c, 0xa5, 0x11, 0xea, 0x07, + 0x0e, 0xc1, 0x05, 0xbc, 0x0e, 0xa7, 0x11, 0xea, + 0x1c, 0x0e, 0xc1, 0x06, 0xb6, 0xa8, 0xe9, 0x1d, + 0xc1, 0x06, 0xb8, 0xa6, 0xe9, 0x17, 0xc1, 0x07, + 0xbc, 0x0c, 0xa5, 0x11, 0xea, 0x07, 0x0e, 0xc1, + 0x07, 0xbc, 0x0e, 0xa7, 0xe9, 0x07, 0x04, 0x95, + 0x05, 0x00, 0x00, 0x28, 0x04, 0x92, 0x05, 0x00, + 0x00, 0x28, 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, + 0x06, 0x00, 0x00, 0x01, 0x03, 0x01, 0x03, 0x00, + 0x00, 0x4d, 0x04, 0xa0, 0x03, 0x00, 0x01, 0x00, + 0xa2, 0x03, 0x00, 0x00, 0x00, 0xa4, 0x03, 0x00, + 0x01, 0x00, 0xa6, 0x03, 0x00, 0x02, 0x00, 0x39, + 0x91, 0x00, 0x00, 0x00, 0xd0, 0xee, 0x43, 0x5b, + 0x00, 0x00, 0x00, 0x04, 0x23, 0x05, 0x00, 0x00, + 0x24, 0x01, 0x00, 0xcc, 0xb4, 0x48, 0xc9, 0xc4, + 0xb5, 0x48, 0x98, 0xca, 0xb5, 0xd0, 0xab, 0xe9, + 0x0a, 0xc6, 0xe9, 0x07, 0x04, 0x91, 0x05, 0x00, + 0x00, 0x28, 0xc5, 0xb6, 0xa8, 0xe9, 0x0f, 0xc5, + 0xb8, 0xa6, 0xe9, 0x0a, 0xc6, 0xe9, 0x07, 0x04, + 0x95, 0x05, 0x00, 0x00, 0x28, 0xc6, 0xe9, 0x07, + 0x04, 0x92, 0x05, 0x00, 0x00, 0x28, 0x04, 0x96, + 0x05, 0x00, 0x00, 0x28, 0xfc, 0x06, 0x01, 0x00, + 0x0d, 0x43, 0x06, 0x00, 0x00, 0x01, 0x00, 0x01, + 0x02, 0x00, 0x00, 0x3d, 0x01, 0xa0, 0x03, 0x00, + 0x01, 0x00, 0xb4, 0xd0, 0xab, 0xe9, 0x07, 0x04, + 0x93, 0x05, 0x00, 0x00, 0x28, 0xb5, 0xd0, 0xab, + 0xe9, 0x07, 0x04, 0x91, 0x05, 0x00, 0x00, 0x28, + 0xb6, 0xd0, 0xab, 0xe9, 0x07, 0x04, 0x94, 0x05, + 0x00, 0x00, 0x28, 0xb7, 0xd0, 0xab, 0xe9, 0x07, + 0x04, 0x95, 0x05, 0x00, 0x00, 0x28, 0xba, 0xd0, + 0xab, 0xe9, 0x07, 0x04, 0x96, 0x05, 0x00, 0x00, + 0x28, 0x04, 0x92, 0x05, 0x00, 0x00, 0x28, 0xfc, + 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, + 0x01, 0x03, 0x01, 0x03, 0x00, 0x00, 0x44, 0x04, + 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, 0x00, + 0x00, 0x00, 0xa4, 0x03, 0x00, 0x01, 0x00, 0xa6, + 0x03, 0x00, 0x02, 0x00, 0x39, 0x91, 0x00, 0x00, + 0x00, 0xd0, 0xee, 0x43, 0x5b, 0x00, 0x00, 0x00, + 0x04, 0x23, 0x05, 0x00, 0x00, 0x24, 0x01, 0x00, + 0xcc, 0xb4, 0x48, 0xc9, 0x39, 0x90, 0x00, 0x00, + 0x00, 0xc4, 0xb4, 0x48, 0xee, 0xd0, 0xab, 0xca, + 0xb5, 0xd0, 0xac, 0xe9, 0x16, 0xc6, 0x11, 0xea, + 0x0a, 0x0e, 0xb4, 0xc5, 0xac, 0xe9, 0x0c, 0xb5, + 0xc5, 0xac, 0xe9, 0x07, 0x04, 0x92, 0x05, 0x00, + 0x00, 0x28, 0x04, 0x91, 0x05, 0x00, 0x00, 0x28, + 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, + 0x00, 0x01, 0x06, 0x01, 0x03, 0x00, 0x00, 0xa1, + 0x01, 0x07, 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, + 0x03, 0x00, 0x00, 0x00, 0xa4, 0x03, 0x00, 0x01, + 0x00, 0xa6, 0x03, 0x00, 0x02, 0x00, 0xa8, 0x03, + 0x00, 0x03, 0x00, 0xaa, 0x03, 0x00, 0x04, 0x00, + 0xac, 0x03, 0x00, 0x05, 0x00, 0x39, 0x91, 0x00, + 0x00, 0x00, 0xd0, 0xee, 0x43, 0x5b, 0x00, 0x00, + 0x00, 0x04, 0x23, 0x05, 0x00, 0x00, 0x24, 0x01, + 0x00, 0xcc, 0xb4, 0x48, 0xc9, 0xc4, 0xb5, 0x48, + 0x11, 0xea, 0x03, 0x0e, 0xc0, 0xca, 0xc4, 0xb5, + 0x48, 0x98, 0xcb, 0xc5, 0x43, 0x23, 0x02, 0x00, + 0x00, 0xbc, 0xfe, 0x24, 0x01, 0x00, 0xc2, 0x04, + 0xc6, 0x43, 0x23, 0x02, 0x00, 0x00, 0xbc, 0xfe, + 0x24, 0x01, 0x00, 0xc2, 0x05, 0xc7, 0x11, 0xe9, + 0x06, 0x0e, 0xb5, 0xc1, 0x04, 0xab, 0x11, 0xea, + 0x06, 0x0e, 0xb5, 0xc1, 0x05, 0xab, 0xe9, 0x07, + 0x04, 0x91, 0x05, 0x00, 0x00, 0x28, 0xc7, 0x11, + 0xe9, 0x06, 0x0e, 0xb6, 0xc1, 0x04, 0xab, 0x11, + 0xea, 0x06, 0x0e, 0xb6, 0xc1, 0x05, 0xab, 0xe9, + 0x07, 0x04, 0x94, 0x05, 0x00, 0x00, 0x28, 0xc7, + 0x11, 0xe9, 0x0e, 0x0e, 0xb7, 0xc1, 0x04, 0xab, + 0x11, 0xea, 0x06, 0x0e, 0xb8, 0xc1, 0x04, 0xab, + 0x11, 0xea, 0x0e, 0x0e, 0xb7, 0xc1, 0x05, 0xab, + 0x11, 0xea, 0x06, 0x0e, 0xb8, 0xc1, 0x05, 0xab, + 0xe9, 0x07, 0x04, 0x95, 0x05, 0x00, 0x00, 0x28, + 0x04, 0x92, 0x05, 0x00, 0x00, 0x28, 0xfc, 0x06, + 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, 0x01, + 0x00, 0x01, 0x02, 0x00, 0x00, 0x16, 0x01, 0xa0, + 0x03, 0x00, 0x01, 0x00, 0xd0, 0xb4, 0xa8, 0xe9, + 0x0c, 0xd0, 0xb6, 0xa5, 0xe9, 0x07, 0x04, 0x91, + 0x05, 0x00, 0x00, 0x28, 0x04, 0x92, 0x05, 0x00, + 0x00, 0x28, 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, + 0x06, 0x00, 0x00, 0x01, 0x06, 0x01, 0x03, 0x00, + 0x00, 0x99, 0x01, 0x07, 0xa0, 0x03, 0x00, 0x01, + 0x00, 0xa2, 0x03, 0x00, 0x00, 0x00, 0xa4, 0x03, + 0x00, 0x01, 0x00, 0xa6, 0x03, 0x00, 0x02, 0x00, + 0xa8, 0x03, 0x00, 0x03, 0x00, 0xaa, 0x03, 0x00, + 0x04, 0x00, 0xac, 0x03, 0x00, 0x05, 0x00, 0x39, + 0x91, 0x00, 0x00, 0x00, 0xd0, 0xee, 0x43, 0x5b, + 0x00, 0x00, 0x00, 0x04, 0x23, 0x05, 0x00, 0x00, + 0x24, 0x01, 0x00, 0xcc, 0xb4, 0x48, 0xc9, 0xc4, + 0xb5, 0x48, 0x11, 0xea, 0x03, 0x0e, 0xc0, 0xca, + 0xc4, 0xb5, 0x48, 0x98, 0xcb, 0xc5, 0x43, 0x23, + 0x02, 0x00, 0x00, 0xb3, 0x24, 0x01, 0x00, 0xc2, + 0x04, 0xc6, 0x43, 0x23, 0x02, 0x00, 0x00, 0xb3, + 0x24, 0x01, 0x00, 0xc2, 0x05, 0xc7, 0x11, 0xe9, + 0x13, 0x0e, 0xb5, 0xc5, 0xab, 0x11, 0xea, 0x0c, + 0x0e, 0xb6, 0xc5, 0xab, 0x11, 0xea, 0x05, 0x0e, + 0xb7, 0xc5, 0xab, 0x11, 0xea, 0x35, 0x0e, 0xc7, + 0x11, 0xe9, 0x17, 0x0e, 0xb8, 0xc1, 0x04, 0xac, + 0x11, 0xe9, 0x0f, 0x0e, 0xba, 0xc1, 0x04, 0xac, + 0x11, 0xe9, 0x07, 0x0e, 0xbc, 0x09, 0xc1, 0x04, + 0xac, 0x11, 0xea, 0x17, 0x0e, 0xc7, 0x98, 0xe9, + 0x1a, 0xb8, 0xc1, 0x05, 0xac, 0xe9, 0x14, 0xba, + 0xc1, 0x05, 0xac, 0xe9, 0x0e, 0xbc, 0x09, 0xc1, + 0x05, 0xac, 0xe9, 0x07, 0x04, 0x91, 0x05, 0x00, + 0x00, 0x28, 0x04, 0x92, 0x05, 0x00, 0x00, 0x28, + 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, + 0x00, 0x01, 0x02, 0x01, 0x03, 0x00, 0x00, 0x64, + 0x03, 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, + 0x00, 0x00, 0x00, 0xa4, 0x03, 0x00, 0x01, 0x00, + 0x39, 0x91, 0x00, 0x00, 0x00, 0xd0, 0xee, 0x43, + 0x5b, 0x00, 0x00, 0x00, 0x04, 0x23, 0x05, 0x00, + 0x00, 0x24, 0x01, 0x00, 0xc8, 0x39, 0x90, 0x00, + 0x00, 0x00, 0xc4, 0xb4, 0x48, 0xee, 0xd0, 0xab, + 0xc9, 0xb5, 0xd0, 0xab, 0xe9, 0x07, 0x04, 0x91, + 0x05, 0x00, 0x00, 0x28, 0xb6, 0xd0, 0xab, 0xe9, + 0x07, 0x04, 0x94, 0x05, 0x00, 0x00, 0x28, 0xc5, + 0xe9, 0x11, 0xd0, 0xb7, 0xa8, 0xe9, 0x0c, 0xd0, + 0xba, 0xa6, 0xe9, 0x07, 0x04, 0x95, 0x05, 0x00, + 0x00, 0x28, 0xc5, 0xe9, 0x12, 0xd0, 0xbb, 0xa8, + 0xe9, 0x0d, 0xd0, 0xbc, 0x0a, 0xa6, 0xe9, 0x07, + 0x04, 0x96, 0x05, 0x00, 0x00, 0x28, 0x04, 0x92, + 0x05, 0x00, 0x00, 0x28, 0xfc, 0x06, 0x01, 0x00, + 0x0d, 0x43, 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, + 0x03, 0x00, 0x00, 0x76, 0x03, 0xa0, 0x03, 0x00, + 0x01, 0x00, 0xa2, 0x03, 0x00, 0x00, 0x00, 0xa4, + 0x03, 0x00, 0x01, 0x00, 0x39, 0x91, 0x00, 0x00, + 0x00, 0xd0, 0xee, 0x43, 0x5b, 0x00, 0x00, 0x00, + 0x04, 0x23, 0x05, 0x00, 0x00, 0x24, 0x01, 0x00, + 0xc8, 0x39, 0x90, 0x00, 0x00, 0x00, 0xc4, 0xb4, + 0x48, 0xee, 0xd0, 0xab, 0xc9, 0xb5, 0xd0, 0xab, + 0x11, 0xea, 0x06, 0x0e, 0xbc, 0x0b, 0xd0, 0xab, + 0xe9, 0x07, 0x04, 0x91, 0x05, 0x00, 0x00, 0x28, + 0xb6, 0xd0, 0xab, 0x11, 0xea, 0x06, 0x0e, 0xbc, + 0x0c, 0xd0, 0xab, 0xe9, 0x07, 0x04, 0x94, 0x05, + 0x00, 0x00, 0x28, 0xc5, 0x11, 0xe9, 0x0d, 0x0e, + 0xd0, 0xb7, 0xa8, 0x11, 0xe9, 0x06, 0x0e, 0xd0, + 0xbc, 0x0a, 0xa6, 0x11, 0xea, 0x0f, 0x0e, 0xc5, + 0xe9, 0x13, 0xd0, 0xbc, 0x0d, 0xa8, 0xe9, 0x0d, + 0xd0, 0xbc, 0x13, 0xa6, 0xe9, 0x07, 0x04, 0x95, + 0x05, 0x00, 0x00, 0x28, 0x04, 0x92, 0x05, 0x00, + 0x00, 0x28, 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, + 0x06, 0x00, 0x00, 0x01, 0x05, 0x01, 0x03, 0x00, + 0x00, 0x8e, 0x01, 0x06, 0xa0, 0x03, 0x00, 0x01, + 0x00, 0xa2, 0x03, 0x00, 0x00, 0x00, 0xa4, 0x03, + 0x00, 0x01, 0x00, 0xa6, 0x03, 0x00, 0x02, 0x00, + 0xa8, 0x03, 0x00, 0x03, 0x00, 0xaa, 0x03, 0x00, + 0x04, 0x00, 0x39, 0x91, 0x00, 0x00, 0x00, 0xd0, + 0xee, 0x43, 0x5b, 0x00, 0x00, 0x00, 0x04, 0x23, + 0x05, 0x00, 0x00, 0x24, 0x01, 0x00, 0xcc, 0xb4, + 0x48, 0xc9, 0xc4, 0xb5, 0x48, 0x98, 0xca, 0xc5, + 0x43, 0x23, 0x02, 0x00, 0x00, 0xb3, 0x24, 0x01, + 0x00, 0xcb, 0xc5, 0x43, 0x23, 0x02, 0x00, 0x00, + 0xbc, 0xfe, 0x24, 0x01, 0x00, 0xc2, 0x04, 0xc6, + 0xe9, 0x0c, 0xb5, 0xc7, 0xab, 0xe9, 0x07, 0x04, + 0x91, 0x05, 0x00, 0x00, 0x28, 0xc6, 0xe9, 0x0c, + 0xb6, 0xc7, 0xab, 0xe9, 0x07, 0x04, 0x94, 0x05, + 0x00, 0x00, 0x28, 0xc6, 0x98, 0x11, 0xea, 0x22, + 0x0e, 0xb4, 0xc1, 0x04, 0xac, 0xe9, 0x2c, 0xbc, + 0x14, 0xc1, 0x04, 0xac, 0xe9, 0x25, 0xbc, 0x28, + 0xc1, 0x04, 0xac, 0xe9, 0x1e, 0xbc, 0x3c, 0xc1, + 0x04, 0xac, 0xe9, 0x17, 0xbc, 0x50, 0xc1, 0x04, + 0xac, 0xe9, 0x10, 0xc6, 0xe9, 0x07, 0x04, 0x92, + 0x05, 0x00, 0x00, 0x28, 0x04, 0x96, 0x05, 0x00, + 0x00, 0x28, 0x04, 0x95, 0x05, 0x00, 0x00, 0x28, + 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, + 0x00, 0x01, 0x05, 0x01, 0x03, 0x00, 0x00, 0x7c, + 0x06, 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, + 0x00, 0x00, 0x00, 0xa4, 0x03, 0x00, 0x01, 0x00, + 0xa6, 0x03, 0x00, 0x02, 0x00, 0xa8, 0x03, 0x00, + 0x03, 0x00, 0xaa, 0x03, 0x00, 0x04, 0x00, 0x39, + 0x91, 0x00, 0x00, 0x00, 0xd0, 0xee, 0x43, 0x5b, + 0x00, 0x00, 0x00, 0x04, 0x23, 0x05, 0x00, 0x00, + 0x24, 0x01, 0x00, 0xcc, 0xb4, 0x48, 0xc9, 0xc4, + 0xb5, 0x48, 0x98, 0xca, 0x39, 0x90, 0x00, 0x00, + 0x00, 0xc4, 0xb4, 0x48, 0xee, 0xd0, 0xab, 0xcf, + 0x11, 0xe9, 0x0e, 0x0e, 0xc4, 0xb4, 0x48, 0x43, + 0x23, 0x02, 0x00, 0x00, 0xb3, 0x24, 0x01, 0x00, + 0xc2, 0x04, 0xb5, 0xd0, 0xab, 0xe9, 0x0a, 0xc6, + 0xe9, 0x07, 0x04, 0x91, 0x05, 0x00, 0x00, 0x28, + 0xb6, 0xc5, 0xab, 0xe9, 0x0a, 0xc6, 0xe9, 0x07, + 0x04, 0x94, 0x05, 0x00, 0x00, 0x28, 0xc6, 0xe9, + 0x1d, 0xd0, 0xb4, 0xa5, 0x11, 0xea, 0x06, 0x0e, + 0xd0, 0xbc, 0x0a, 0xa7, 0xe9, 0x10, 0xc7, 0xe9, + 0x0d, 0xb4, 0xc1, 0x04, 0xab, 0xe9, 0x07, 0x04, + 0x96, 0x05, 0x00, 0x00, 0x28, 0x04, 0x92, 0x05, + 0x00, 0x00, 0x28, 0xfc, 0x06, 0x01, 0x00, 0x0d, + 0x43, 0x06, 0x00, 0x00, 0x01, 0x05, 0x01, 0x03, + 0x00, 0x00, 0x61, 0x06, 0xa0, 0x03, 0x00, 0x01, + 0x00, 0xa2, 0x03, 0x00, 0x00, 0x00, 0xa4, 0x03, + 0x00, 0x01, 0x00, 0xa6, 0x03, 0x00, 0x02, 0x00, + 0xa8, 0x03, 0x00, 0x03, 0x00, 0xaa, 0x03, 0x00, + 0x04, 0x00, 0x39, 0x91, 0x00, 0x00, 0x00, 0xd0, + 0xee, 0x43, 0x5b, 0x00, 0x00, 0x00, 0x04, 0x23, + 0x05, 0x00, 0x00, 0x24, 0x01, 0x00, 0xcc, 0xb4, + 0x48, 0xc9, 0x39, 0x90, 0x00, 0x00, 0x00, 0xc4, + 0xb4, 0x48, 0xee, 0xd0, 0xab, 0xca, 0xc5, 0x43, + 0x23, 0x02, 0x00, 0x00, 0xb3, 0x24, 0x01, 0x00, + 0xcb, 0xc5, 0x43, 0x23, 0x02, 0x00, 0x00, 0xbc, + 0xfe, 0x24, 0x01, 0x00, 0xc2, 0x04, 0xc6, 0x11, + 0xe9, 0x0e, 0x0e, 0xb5, 0xc7, 0xab, 0x11, 0xe9, + 0x07, 0x0e, 0xbc, 0x0b, 0xc1, 0x04, 0xac, 0x11, + 0xea, 0x04, 0x0e, 0xc6, 0x98, 0xe9, 0x07, 0x04, + 0x91, 0x05, 0x00, 0x00, 0x28, 0x04, 0x92, 0x05, + 0x00, 0x00, 0x28, 0xfc, 0x06, 0x01, 0x00, 0x0d, + 0x43, 0x06, 0x00, 0x00, 0x01, 0x00, 0x01, 0x02, + 0x00, 0x00, 0x1c, 0x01, 0xa0, 0x03, 0x00, 0x01, + 0x00, 0xb5, 0xd0, 0xab, 0xe9, 0x07, 0x04, 0x91, + 0x05, 0x00, 0x00, 0x28, 0xb6, 0xd0, 0xab, 0xe9, + 0x07, 0x04, 0x94, 0x05, 0x00, 0x00, 0x28, 0x04, + 0x92, 0x05, 0x00, 0x00, 0x28, 0xfc, 0x06, 0x01, + 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, 0x01, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x1c, 0x01, 0xa0, 0x03, + 0x00, 0x01, 0x00, 0xb4, 0xd0, 0xab, 0xe9, 0x07, + 0x04, 0x93, 0x05, 0x00, 0x00, 0x28, 0xb5, 0xd0, + 0xab, 0xe9, 0x07, 0x04, 0x91, 0x05, 0x00, 0x00, + 0x28, 0x04, 0x92, 0x05, 0x00, 0x00, 0x28, 0xfc, + 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, + 0x01, 0x01, 0x01, 0x03, 0x00, 0x00, 0x41, 0x02, + 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, 0x00, + 0x00, 0x00, 0x39, 0x91, 0x00, 0x00, 0x00, 0xd0, + 0xee, 0x43, 0x5b, 0x00, 0x00, 0x00, 0x04, 0x23, + 0x05, 0x00, 0x00, 0x24, 0x01, 0x00, 0xb4, 0x48, + 0xc8, 0xb4, 0xd0, 0xab, 0xe9, 0x07, 0x04, 0x93, + 0x05, 0x00, 0x00, 0x28, 0xb4, 0xc4, 0xac, 0x11, + 0xe9, 0x05, 0x0e, 0xb5, 0xc4, 0xac, 0x11, 0xea, + 0x05, 0x0e, 0xb4, 0xd0, 0xab, 0xe9, 0x07, 0x04, + 0x92, 0x05, 0x00, 0x00, 0x28, 0x04, 0x91, 0x05, + 0x00, 0x00, 0x28, 0xfc, 0x06, 0x01, 0x00, 0x0d, + 0x43, 0x06, 0x00, 0x00, 0x01, 0x05, 0x01, 0x03, + 0x00, 0x00, 0x9b, 0x01, 0x06, 0xa0, 0x03, 0x00, + 0x01, 0x00, 0xa2, 0x03, 0x00, 0x00, 0x00, 0xa4, + 0x03, 0x00, 0x01, 0x00, 0xa6, 0x03, 0x00, 0x02, + 0x00, 0xa8, 0x03, 0x00, 0x03, 0x00, 0xaa, 0x03, + 0x00, 0x04, 0x00, 0x39, 0x91, 0x00, 0x00, 0x00, + 0xd0, 0xee, 0x43, 0x5b, 0x00, 0x00, 0x00, 0x04, + 0x23, 0x05, 0x00, 0x00, 0x24, 0x01, 0x00, 0xcc, + 0xb5, 0x48, 0x11, 0xea, 0x03, 0x0e, 0xc0, 0xc9, + 0x39, 0x90, 0x00, 0x00, 0x00, 0xc4, 0xb4, 0x48, + 0xee, 0xd0, 0xab, 0xce, 0x11, 0xe9, 0x0e, 0x0e, + 0xc4, 0xb4, 0x48, 0x43, 0x23, 0x02, 0x00, 0x00, + 0xb3, 0x24, 0x01, 0x00, 0xcb, 0xc6, 0x11, 0xe9, + 0x0f, 0x0e, 0xc4, 0xb4, 0x48, 0x43, 0x23, 0x02, + 0x00, 0x00, 0xbc, 0xfe, 0x24, 0x01, 0x00, 0xc2, + 0x04, 0xb5, 0xc7, 0xab, 0xe9, 0x17, 0xc1, 0x04, + 0xbc, 0x0b, 0xa5, 0x11, 0xea, 0x07, 0x0e, 0xc1, + 0x04, 0xbc, 0x13, 0xa7, 0xe9, 0x07, 0x04, 0x91, + 0x05, 0x00, 0x00, 0x28, 0xc7, 0xb6, 0xa8, 0xe9, + 0x1d, 0xc7, 0xbc, 0x09, 0xa6, 0xe9, 0x17, 0xc1, + 0x04, 0xbc, 0x0b, 0xa5, 0x11, 0xea, 0x07, 0x0e, + 0xc1, 0x04, 0xbc, 0x13, 0xa7, 0xe9, 0x07, 0x04, + 0x95, 0x05, 0x00, 0x00, 0x28, 0xb4, 0xc5, 0xac, + 0xe9, 0x07, 0x04, 0x96, 0x05, 0x00, 0x00, 0x28, + 0x04, 0x92, 0x05, 0x00, 0x00, 0x28, 0xfc, 0x06, + 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, 0x01, + 0x08, 0x01, 0x03, 0x00, 0x00, 0xe2, 0x01, 0x09, + 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, 0x00, + 0x00, 0x00, 0xa4, 0x03, 0x00, 0x01, 0x00, 0xa6, + 0x03, 0x00, 0x02, 0x00, 0xa8, 0x03, 0x00, 0x03, + 0x00, 0xaa, 0x03, 0x00, 0x04, 0x00, 0xac, 0x03, + 0x00, 0x05, 0x00, 0xae, 0x03, 0x00, 0x06, 0x00, + 0xb0, 0x03, 0x00, 0x07, 0x00, 0x39, 0x91, 0x00, + 0x00, 0x00, 0xd0, 0xee, 0x43, 0x5b, 0x00, 0x00, + 0x00, 0x04, 0x23, 0x05, 0x00, 0x00, 0x24, 0x01, + 0x00, 0xcc, 0xb5, 0x48, 0x11, 0xea, 0x03, 0x0e, + 0xc0, 0xcd, 0xe8, 0xca, 0x39, 0x90, 0x00, 0x00, + 0x00, 0xc4, 0xb4, 0x48, 0xee, 0xd0, 0xab, 0xcf, + 0x11, 0xe9, 0x0e, 0x0e, 0xc4, 0xb4, 0x48, 0x43, + 0x23, 0x02, 0x00, 0x00, 0xb3, 0x24, 0x01, 0x00, + 0xc2, 0x04, 0xc7, 0x11, 0xe9, 0x0f, 0x0e, 0xc4, + 0xb4, 0x48, 0x43, 0x23, 0x02, 0x00, 0x00, 0xbc, + 0xfe, 0x24, 0x01, 0x00, 0xc2, 0x05, 0xc5, 0x43, + 0x23, 0x02, 0x00, 0x00, 0xbc, 0xfe, 0x24, 0x01, + 0x00, 0xc2, 0x06, 0xc5, 0x43, 0x23, 0x02, 0x00, + 0x00, 0xb3, 0x24, 0x01, 0x00, 0xc2, 0x07, 0xc7, + 0x11, 0xe9, 0x06, 0x0e, 0xb4, 0xc1, 0x04, 0xab, + 0x11, 0xea, 0x25, 0x0e, 0xc1, 0x05, 0xbc, 0x0b, + 0xa8, 0x11, 0xe9, 0x07, 0x0e, 0xc1, 0x05, 0xbc, + 0x13, 0xa6, 0x11, 0xea, 0x13, 0x0e, 0xb6, 0xc6, + 0xab, 0xe9, 0x15, 0xc1, 0x06, 0xbc, 0x0b, 0xa8, + 0xe9, 0x0e, 0xc1, 0x06, 0xbc, 0x13, 0xa6, 0xe9, + 0x07, 0x04, 0x93, 0x05, 0x00, 0x00, 0x28, 0xb5, + 0xc1, 0x04, 0xab, 0x11, 0xe9, 0x07, 0x0e, 0xbc, + 0x0b, 0xc1, 0x05, 0xac, 0x11, 0xea, 0x23, 0x0e, + 0xb6, 0xc6, 0xab, 0x11, 0xe9, 0x0f, 0x0e, 0xb5, + 0xc1, 0x07, 0xab, 0x11, 0xe9, 0x07, 0x0e, 0xbc, + 0x0b, 0xc1, 0x06, 0xac, 0x11, 0xea, 0x0b, 0x0e, + 0xb6, 0xc6, 0xac, 0xe9, 0x0d, 0xb5, 0xc1, 0x07, + 0xab, 0xe9, 0x07, 0x04, 0x91, 0x05, 0x00, 0x00, + 0x28, 0x04, 0x92, 0x05, 0x00, 0x00, 0x28, 0xfc, + 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, + 0x01, 0x08, 0x01, 0x03, 0x00, 0x00, 0x87, 0x01, + 0x09, 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, + 0x00, 0x00, 0x00, 0xa4, 0x03, 0x00, 0x01, 0x00, + 0xa6, 0x03, 0x00, 0x02, 0x00, 0xa8, 0x03, 0x00, + 0x03, 0x00, 0xaa, 0x03, 0x00, 0x04, 0x00, 0xac, + 0x03, 0x00, 0x05, 0x00, 0xae, 0x03, 0x00, 0x06, + 0x00, 0xb0, 0x03, 0x00, 0x07, 0x00, 0x39, 0x91, + 0x00, 0x00, 0x00, 0xd0, 0xee, 0x43, 0x5b, 0x00, + 0x00, 0x00, 0x04, 0x23, 0x05, 0x00, 0x00, 0x24, + 0x01, 0x00, 0xcc, 0xb4, 0x48, 0xc9, 0xc4, 0xb5, + 0x48, 0x11, 0xea, 0x03, 0x0e, 0xc0, 0xca, 0xc4, + 0xb5, 0x48, 0x98, 0xcb, 0xc5, 0x43, 0x23, 0x02, + 0x00, 0x00, 0xb3, 0x24, 0x01, 0x00, 0xc2, 0x04, + 0xc5, 0x43, 0x23, 0x02, 0x00, 0x00, 0xbc, 0xfe, + 0x24, 0x01, 0x00, 0xc2, 0x05, 0xc6, 0x43, 0x23, + 0x02, 0x00, 0x00, 0xb3, 0x24, 0x01, 0x00, 0xc2, + 0x06, 0xc6, 0x43, 0x23, 0x02, 0x00, 0x00, 0xbc, + 0xfe, 0x24, 0x01, 0x00, 0xc2, 0x07, 0xc7, 0x11, + 0xe9, 0x0f, 0x0e, 0xb5, 0xc1, 0x04, 0xab, 0x11, + 0xe9, 0x07, 0x0e, 0xbc, 0x0b, 0xc1, 0x05, 0xac, + 0x11, 0xea, 0x0d, 0x0e, 0xb5, 0xc1, 0x06, 0xab, + 0xe9, 0x0e, 0xbc, 0x0b, 0xc1, 0x07, 0xac, 0xe9, + 0x07, 0x04, 0x91, 0x05, 0x00, 0x00, 0x28, 0x04, + 0x92, 0x05, 0x00, 0x00, 0x28, 0xfc, 0x06, 0x01, + 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, 0x01, 0x03, + 0x01, 0x03, 0x00, 0x00, 0x6d, 0x04, 0xa0, 0x03, + 0x00, 0x01, 0x00, 0xa2, 0x03, 0x00, 0x00, 0x00, + 0xa4, 0x03, 0x00, 0x01, 0x00, 0xa6, 0x03, 0x00, + 0x02, 0x00, 0x39, 0x91, 0x00, 0x00, 0x00, 0xd0, + 0xee, 0x43, 0x5b, 0x00, 0x00, 0x00, 0x04, 0x23, + 0x05, 0x00, 0x00, 0x24, 0x01, 0x00, 0xcc, 0xb5, + 0x48, 0x98, 0xc9, 0x39, 0x90, 0x00, 0x00, 0x00, + 0xc4, 0xb4, 0x48, 0xee, 0xd0, 0xab, 0x11, 0xe9, + 0x0f, 0x0e, 0xc4, 0xb4, 0x48, 0x43, 0x23, 0x02, + 0x00, 0x00, 0xbc, 0xfe, 0x24, 0x01, 0x00, 0xca, + 0xb5, 0xd0, 0xab, 0xe9, 0x0a, 0xc5, 0xe9, 0x07, + 0x04, 0x91, 0x05, 0x00, 0x00, 0x28, 0xc5, 0x98, + 0x11, 0xea, 0x17, 0x0e, 0xb4, 0xd0, 0xab, 0x11, + 0xea, 0x10, 0x0e, 0xb5, 0xd0, 0xac, 0xe9, 0x12, + 0xc6, 0xb5, 0xa8, 0xe9, 0x0d, 0xc6, 0xbc, 0x13, + 0xa6, 0xe9, 0x07, 0x04, 0x95, 0x05, 0x00, 0x00, + 0x28, 0x04, 0x92, 0x05, 0x00, 0x00, 0x28, 0xfc, + 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, + 0x01, 0x02, 0x01, 0x03, 0x00, 0x00, 0x6d, 0x03, + 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, 0x00, + 0x00, 0x00, 0xa4, 0x03, 0x00, 0x01, 0x00, 0x39, + 0x91, 0x00, 0x00, 0x00, 0xd0, 0xee, 0x43, 0x5b, + 0x00, 0x00, 0x00, 0x04, 0x23, 0x05, 0x00, 0x00, + 0x24, 0x01, 0x00, 0xc8, 0x39, 0x90, 0x00, 0x00, + 0x00, 0xc4, 0xb4, 0x48, 0xee, 0xd0, 0xab, 0x11, + 0xe9, 0x0f, 0x0e, 0xc4, 0xb4, 0x48, 0x43, 0x23, + 0x02, 0x00, 0x00, 0xbc, 0xfe, 0x24, 0x01, 0x00, + 0xc9, 0xb5, 0xd0, 0xab, 0xe9, 0x07, 0x04, 0x91, + 0x05, 0x00, 0x00, 0x28, 0xb4, 0xd0, 0xab, 0x11, + 0xea, 0x0b, 0x0e, 0xc5, 0xb6, 0xa8, 0xe9, 0x0d, + 0xc5, 0xbc, 0x0a, 0xa6, 0xe9, 0x07, 0x04, 0x95, + 0x05, 0x00, 0x00, 0x28, 0xc5, 0xbc, 0x0b, 0xa8, + 0xe9, 0x0d, 0xc5, 0xbc, 0x13, 0xa6, 0xe9, 0x07, + 0x04, 0x96, 0x05, 0x00, 0x00, 0x28, 0x04, 0x92, + 0x05, 0x00, 0x00, 0x28, 0xfc, 0x06, 0x01, 0x00, + 0x0d, 0x43, 0x06, 0x00, 0x00, 0x01, 0x05, 0x01, + 0x03, 0x00, 0x00, 0xb1, 0x01, 0x06, 0xa0, 0x03, + 0x00, 0x01, 0x00, 0xa2, 0x03, 0x00, 0x00, 0x00, + 0xa4, 0x03, 0x00, 0x01, 0x00, 0xa6, 0x03, 0x00, + 0x02, 0x00, 0xa8, 0x03, 0x00, 0x03, 0x00, 0xaa, + 0x03, 0x00, 0x04, 0x00, 0x39, 0x91, 0x00, 0x00, + 0x00, 0xd0, 0xee, 0x43, 0x5b, 0x00, 0x00, 0x00, + 0x04, 0x23, 0x05, 0x00, 0x00, 0x24, 0x01, 0x00, + 0xcc, 0xb4, 0x48, 0xc9, 0xc4, 0xb5, 0x48, 0x98, + 0xca, 0xc5, 0x43, 0x23, 0x02, 0x00, 0x00, 0xb3, + 0x24, 0x01, 0x00, 0xcb, 0xc5, 0x43, 0x23, 0x02, + 0x00, 0x00, 0xbc, 0xfe, 0x24, 0x01, 0x00, 0xc2, + 0x04, 0xb5, 0xd0, 0xab, 0xe9, 0x0a, 0xc6, 0xe9, + 0x07, 0x04, 0x91, 0x05, 0x00, 0x00, 0x28, 0xc6, + 0xe9, 0x21, 0xc7, 0xb6, 0xa8, 0xe9, 0x1c, 0xc7, + 0xb8, 0xa6, 0xe9, 0x17, 0xc1, 0x04, 0xbc, 0x0c, + 0xa5, 0x11, 0xea, 0x07, 0x0e, 0xc1, 0x04, 0xbc, + 0x0e, 0xa7, 0xe9, 0x07, 0x04, 0x95, 0x05, 0x00, + 0x00, 0x28, 0xc6, 0x11, 0xe9, 0x13, 0x0e, 0xb5, + 0xc5, 0xac, 0x11, 0xe9, 0x0c, 0x0e, 0xb4, 0xc7, + 0xab, 0x11, 0xea, 0x05, 0x0e, 0xb5, 0xc7, 0xab, + 0x11, 0xea, 0x25, 0x0e, 0xc6, 0x11, 0xe9, 0x0d, + 0x0e, 0xc7, 0xb9, 0xa8, 0x11, 0xe9, 0x06, 0x0e, + 0xc7, 0xbc, 0x09, 0xa6, 0x11, 0xea, 0x11, 0x0e, + 0xc6, 0xe9, 0x15, 0xc1, 0x04, 0xbc, 0x0c, 0xa8, + 0xe9, 0x0e, 0xc1, 0x04, 0xbc, 0x0e, 0xa6, 0xe9, + 0x07, 0x04, 0x96, 0x05, 0x00, 0x00, 0x28, 0x04, + 0x92, 0x05, 0x00, 0x00, 0x28, 0xfc, 0x06, 0x01, + 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, 0x01, 0x01, + 0x01, 0x03, 0x00, 0x00, 0x2f, 0x02, 0xa0, 0x03, + 0x00, 0x01, 0x00, 0xa2, 0x03, 0x00, 0x00, 0x00, + 0x39, 0x91, 0x00, 0x00, 0x00, 0xd0, 0xee, 0x43, + 0x5b, 0x00, 0x00, 0x00, 0x04, 0x23, 0x05, 0x00, + 0x00, 0x24, 0x01, 0x00, 0xb4, 0x48, 0xc8, 0xb4, + 0xc4, 0xab, 0x11, 0xea, 0x05, 0x0e, 0xb5, 0xc4, + 0xab, 0xe9, 0x07, 0x04, 0x91, 0x05, 0x00, 0x00, + 0x28, 0x04, 0x92, 0x05, 0x00, 0x00, 0x28, 0xfc, + 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, + 0x01, 0x05, 0x01, 0x03, 0x00, 0x00, 0xaa, 0x01, + 0x06, 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, + 0x00, 0x00, 0x00, 0xa4, 0x03, 0x00, 0x01, 0x00, + 0xa6, 0x03, 0x00, 0x02, 0x00, 0xa8, 0x03, 0x00, + 0x03, 0x00, 0xaa, 0x03, 0x00, 0x04, 0x00, 0x39, + 0x91, 0x00, 0x00, 0x00, 0xd0, 0xee, 0x43, 0x5b, + 0x00, 0x00, 0x00, 0x04, 0x23, 0x05, 0x00, 0x00, + 0x24, 0x01, 0x00, 0xcc, 0xb4, 0x48, 0xc9, 0xc4, + 0xb5, 0x48, 0x98, 0xca, 0xc5, 0x43, 0x23, 0x02, + 0x00, 0x00, 0xb3, 0x24, 0x01, 0x00, 0xcb, 0xc5, + 0x43, 0x23, 0x02, 0x00, 0x00, 0xbc, 0xfe, 0x24, + 0x01, 0x00, 0xc2, 0x04, 0xc6, 0xe9, 0x13, 0xb5, + 0xc7, 0xab, 0xe9, 0x0e, 0xbc, 0x0b, 0xc1, 0x04, + 0xac, 0xe9, 0x07, 0x04, 0x91, 0x05, 0x00, 0x00, + 0x28, 0xc6, 0xe9, 0x21, 0xc7, 0xb6, 0xa8, 0xe9, + 0x1c, 0xc7, 0xb8, 0xa6, 0xe9, 0x17, 0xc1, 0x04, + 0xbc, 0x0c, 0xa5, 0x11, 0xea, 0x07, 0x0e, 0xc1, + 0x04, 0xbc, 0x0e, 0xa7, 0xe9, 0x07, 0x04, 0x95, + 0x05, 0x00, 0x00, 0x28, 0xc6, 0x11, 0xe9, 0x05, + 0x0e, 0xb4, 0xc7, 0xab, 0x11, 0xea, 0x25, 0x0e, + 0xc6, 0x11, 0xe9, 0x0d, 0x0e, 0xc7, 0xb9, 0xa8, + 0x11, 0xe9, 0x06, 0x0e, 0xc7, 0xbc, 0x09, 0xa6, + 0x11, 0xea, 0x11, 0x0e, 0xc6, 0xe9, 0x15, 0xc1, + 0x04, 0xbc, 0x0b, 0xa8, 0xe9, 0x0e, 0xc1, 0x04, + 0xbc, 0x0e, 0xa6, 0xe9, 0x07, 0x04, 0x96, 0x05, + 0x00, 0x00, 0x28, 0x04, 0x92, 0x05, 0x00, 0x00, + 0x28, 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, + 0x00, 0x00, 0x01, 0x02, 0x01, 0x03, 0x00, 0x00, + 0x4b, 0x03, 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, + 0x03, 0x00, 0x00, 0x00, 0xa4, 0x03, 0x00, 0x01, + 0x00, 0x39, 0x91, 0x00, 0x00, 0x00, 0xd0, 0xee, + 0x43, 0x5b, 0x00, 0x00, 0x00, 0x04, 0x23, 0x05, + 0x00, 0x00, 0x24, 0x01, 0x00, 0xc8, 0x39, 0x90, + 0x00, 0x00, 0x00, 0xc4, 0xb4, 0x48, 0xee, 0xd0, + 0xab, 0xc9, 0xd0, 0xb4, 0xa8, 0xe9, 0x0c, 0xd0, + 0xb5, 0xa6, 0xe9, 0x07, 0x04, 0x91, 0x05, 0x00, + 0x00, 0x28, 0xc5, 0xe9, 0x12, 0xd0, 0xb6, 0xa8, + 0xe9, 0x0d, 0xd0, 0xbc, 0x0a, 0xa6, 0xe9, 0x07, + 0x04, 0x95, 0x05, 0x00, 0x00, 0x28, 0x04, 0x92, + 0x05, 0x00, 0x00, 0x28, 0xfc, 0x06, 0x01, 0x00, + 0x0d, 0x43, 0x06, 0x00, 0x00, 0x01, 0x03, 0x01, + 0x03, 0x00, 0x00, 0x45, 0x04, 0xa0, 0x03, 0x00, + 0x01, 0x00, 0xa2, 0x03, 0x00, 0x00, 0x00, 0xa4, + 0x03, 0x00, 0x01, 0x00, 0xa6, 0x03, 0x00, 0x02, + 0x00, 0x39, 0x91, 0x00, 0x00, 0x00, 0xd0, 0xee, + 0x43, 0x5b, 0x00, 0x00, 0x00, 0x04, 0x23, 0x05, + 0x00, 0x00, 0x24, 0x01, 0x00, 0xcc, 0xb4, 0x48, + 0xc9, 0xc4, 0xb5, 0x48, 0x11, 0xea, 0x03, 0x0e, + 0xc0, 0xca, 0xb4, 0xd0, 0xab, 0x11, 0xea, 0x11, + 0x0e, 0xb5, 0xd0, 0xab, 0x11, 0xea, 0x0a, 0x0e, + 0xb4, 0xc5, 0xab, 0xe9, 0x0c, 0xb5, 0xc6, 0xab, + 0xe9, 0x07, 0x04, 0x91, 0x05, 0x00, 0x00, 0x28, + 0x04, 0x92, 0x05, 0x00, 0x00, 0x28, 0xfc, 0x06, + 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, 0x01, + 0x04, 0x01, 0x03, 0x00, 0x00, 0x68, 0x05, 0xa0, + 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, 0x00, 0x00, + 0x00, 0xa4, 0x03, 0x00, 0x01, 0x00, 0xa6, 0x03, + 0x00, 0x02, 0x00, 0xa8, 0x03, 0x00, 0x03, 0x00, + 0x39, 0x91, 0x00, 0x00, 0x00, 0xd0, 0xee, 0x43, + 0x5b, 0x00, 0x00, 0x00, 0x04, 0x23, 0x05, 0x00, + 0x00, 0x24, 0x01, 0x00, 0xcc, 0xb4, 0x48, 0xc9, + 0xc4, 0xb5, 0x48, 0x98, 0xca, 0xc5, 0x43, 0x23, + 0x02, 0x00, 0x00, 0xbc, 0xfe, 0x24, 0x01, 0x00, + 0xcb, 0xc6, 0xe9, 0x0c, 0xb5, 0xc7, 0xab, 0xe9, + 0x07, 0x04, 0x91, 0x05, 0x00, 0x00, 0x28, 0xc6, + 0xe9, 0x0c, 0xb6, 0xc7, 0xab, 0xe9, 0x07, 0x04, + 0x94, 0x05, 0x00, 0x00, 0x28, 0xc6, 0x11, 0xe9, + 0x0c, 0x0e, 0xb7, 0xc7, 0xab, 0x11, 0xea, 0x05, + 0x0e, 0xb8, 0xc7, 0xab, 0x11, 0xea, 0x04, 0x0e, + 0xc6, 0x98, 0xe9, 0x07, 0x04, 0x95, 0x05, 0x00, + 0x00, 0x28, 0x04, 0x92, 0x05, 0x00, 0x00, 0x28, + 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, + 0x00, 0x01, 0x02, 0x01, 0x03, 0x00, 0x00, 0x4a, + 0x03, 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, + 0x00, 0x00, 0x00, 0xa4, 0x03, 0x00, 0x01, 0x00, + 0x39, 0x91, 0x00, 0x00, 0x00, 0xd0, 0xee, 0x43, + 0x5b, 0x00, 0x00, 0x00, 0x04, 0x23, 0x05, 0x00, + 0x00, 0x24, 0x01, 0x00, 0xc8, 0x39, 0x90, 0x00, + 0x00, 0x00, 0xc4, 0xb4, 0x48, 0xee, 0xd0, 0xab, + 0xc9, 0xb4, 0xd0, 0xab, 0x11, 0xea, 0x16, 0x0e, + 0xb5, 0xd0, 0xab, 0x11, 0xea, 0x0f, 0x0e, 0xc5, + 0xe9, 0x13, 0xd0, 0xbc, 0x0b, 0xa8, 0xe9, 0x0d, + 0xd0, 0xbc, 0x63, 0xa6, 0xe9, 0x07, 0x04, 0x91, + 0x05, 0x00, 0x00, 0x28, 0x04, 0x92, 0x05, 0x00, + 0x00, 0x28, 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, + 0x06, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, + 0x00, 0x06, 0x01, 0xa0, 0x03, 0x00, 0x01, 0x00, + 0x04, 0x92, 0x05, 0x00, 0x00, 0x28, 0xfc, 0x06, + 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, 0x01, + 0x00, 0x01, 0x02, 0x00, 0x00, 0x5f, 0x01, 0xa0, + 0x03, 0x00, 0x01, 0x00, 0xb5, 0xd0, 0xab, 0x11, + 0xea, 0x24, 0x0e, 0xb9, 0xd0, 0xab, 0x11, 0xea, + 0x1d, 0x0e, 0xbb, 0xd0, 0xab, 0x11, 0xea, 0x16, + 0x0e, 0xbc, 0x08, 0xd0, 0xab, 0x11, 0xea, 0x0e, + 0x0e, 0xbc, 0x09, 0xd0, 0xab, 0x11, 0xea, 0x06, + 0x0e, 0xbc, 0x0a, 0xd0, 0xab, 0xe9, 0x07, 0x04, + 0x91, 0x05, 0x00, 0x00, 0x28, 0xb6, 0xd0, 0xab, + 0x11, 0xea, 0x05, 0x0e, 0xb7, 0xd0, 0xab, 0xe9, + 0x07, 0x04, 0x94, 0x05, 0x00, 0x00, 0x28, 0xb8, + 0xd0, 0xab, 0xe9, 0x07, 0x04, 0x95, 0x05, 0x00, + 0x00, 0x28, 0xba, 0xd0, 0xab, 0xe9, 0x07, 0x04, + 0x96, 0x05, 0x00, 0x00, 0x28, 0x04, 0x92, 0x05, + 0x00, 0x00, 0x28, 0xfc, 0x06, 0x01, 0x00, 0x0d, + 0x43, 0x06, 0x00, 0x00, 0x01, 0x04, 0x01, 0x03, + 0x00, 0x00, 0x93, 0x02, 0x05, 0xa0, 0x03, 0x00, + 0x01, 0x00, 0xa2, 0x03, 0x00, 0x00, 0x00, 0xa4, + 0x03, 0x00, 0x01, 0x00, 0xa6, 0x03, 0x00, 0x02, + 0x00, 0xa8, 0x03, 0x00, 0x03, 0x00, 0x39, 0x91, + 0x00, 0x00, 0x00, 0xd0, 0xee, 0x43, 0x5b, 0x00, + 0x00, 0x00, 0x04, 0x23, 0x05, 0x00, 0x00, 0x24, + 0x01, 0x00, 0xb4, 0x48, 0xcc, 0x43, 0x23, 0x02, + 0x00, 0x00, 0xb3, 0x24, 0x01, 0x00, 0xc9, 0xc4, + 0x43, 0x23, 0x02, 0x00, 0x00, 0xbc, 0xfe, 0x24, + 0x01, 0x00, 0xca, 0xc4, 0x43, 0x23, 0x02, 0x00, + 0x00, 0xbc, 0xfd, 0x24, 0x01, 0x00, 0xcb, 0xb5, + 0xc5, 0xab, 0x11, 0xea, 0x3b, 0x0e, 0xb6, 0xc5, + 0xab, 0x11, 0xea, 0x34, 0x0e, 0xb9, 0xc5, 0xab, + 0x11, 0xea, 0x2d, 0x0e, 0xbb, 0xc5, 0xab, 0x11, + 0xea, 0x26, 0x0e, 0xbc, 0x08, 0xc5, 0xab, 0x11, + 0xea, 0x1e, 0x0e, 0xbc, 0x14, 0xc6, 0xab, 0x11, + 0xea, 0x16, 0x0e, 0xbc, 0x32, 0xc6, 0xab, 0x11, + 0xea, 0x0e, 0x0e, 0xbc, 0x46, 0xc6, 0xab, 0x11, + 0xea, 0x06, 0x0e, 0xbc, 0x50, 0xc6, 0xab, 0xe9, + 0x07, 0x04, 0x91, 0x05, 0x00, 0x00, 0x28, 0xb7, + 0xc5, 0xab, 0x11, 0xea, 0x55, 0x0e, 0xb8, 0xc5, + 0xab, 0x11, 0xea, 0x4e, 0x0e, 0xbc, 0x64, 0xc7, + 0xab, 0x11, 0xea, 0x46, 0x0e, 0xbd, 0xc8, 0x00, + 0xc7, 0xab, 0x11, 0xea, 0x3d, 0x0e, 0xbd, 0x2c, + 0x01, 0xc7, 0xab, 0x11, 0xea, 0x34, 0x0e, 0xbd, + 0x90, 0x01, 0xc7, 0xab, 0x11, 0xea, 0x2b, 0x0e, + 0xbd, 0xf4, 0x01, 0xc7, 0xab, 0x11, 0xea, 0x22, + 0x0e, 0xbd, 0x58, 0x02, 0xc7, 0xab, 0x11, 0xea, + 0x19, 0x0e, 0xbd, 0xbc, 0x02, 0xc7, 0xab, 0x11, + 0xea, 0x10, 0x0e, 0xbd, 0x20, 0x03, 0xc7, 0xab, + 0x11, 0xea, 0x07, 0x0e, 0xbd, 0x84, 0x03, 0xc7, + 0xab, 0xe9, 0x07, 0x04, 0x95, 0x05, 0x00, 0x00, + 0x28, 0xb4, 0xc4, 0xab, 0x11, 0xea, 0x1d, 0x0e, + 0xba, 0xc5, 0xab, 0x11, 0xea, 0x16, 0x0e, 0xbc, + 0x28, 0xc6, 0xab, 0x11, 0xea, 0x0e, 0x0e, 0xbc, + 0x3c, 0xc6, 0xab, 0x11, 0xea, 0x06, 0x0e, 0xbc, + 0x5a, 0xc6, 0xab, 0xe9, 0x07, 0x04, 0x96, 0x05, + 0x00, 0x00, 0x28, 0x04, 0x92, 0x05, 0x00, 0x00, + 0x28, 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, + 0x00, 0x00, 0x01, 0x04, 0x01, 0x03, 0x00, 0x00, + 0x6d, 0x05, 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, + 0x03, 0x00, 0x00, 0x00, 0xa4, 0x03, 0x00, 0x01, + 0x00, 0xa6, 0x03, 0x00, 0x02, 0x00, 0xa8, 0x03, + 0x00, 0x03, 0x00, 0x39, 0x91, 0x00, 0x00, 0x00, + 0xd0, 0xee, 0x43, 0x5b, 0x00, 0x00, 0x00, 0x04, + 0x23, 0x05, 0x00, 0x00, 0x24, 0x01, 0x00, 0xc8, + 0x39, 0x90, 0x00, 0x00, 0x00, 0xc4, 0xb4, 0x48, + 0xee, 0xd0, 0xab, 0xcd, 0x11, 0xe9, 0x0e, 0x0e, + 0xc4, 0xb4, 0x48, 0x43, 0x23, 0x02, 0x00, 0x00, + 0xb3, 0x24, 0x01, 0x00, 0xca, 0xc5, 0x11, 0xe9, + 0x0f, 0x0e, 0xc4, 0xb4, 0x48, 0x43, 0x23, 0x02, + 0x00, 0x00, 0xbc, 0xfe, 0x24, 0x01, 0x00, 0xcb, + 0xb6, 0xc6, 0xac, 0x11, 0xe9, 0x05, 0x0e, 0xb7, + 0xc6, 0xac, 0x11, 0xea, 0x0e, 0x0e, 0xbc, 0x0c, + 0xc7, 0xab, 0x11, 0xea, 0x06, 0x0e, 0xbc, 0x0d, + 0xc7, 0xab, 0xe9, 0x07, 0x04, 0x92, 0x05, 0x00, + 0x00, 0x28, 0x04, 0x95, 0x05, 0x00, 0x00, 0x28, + 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, + 0x00, 0x01, 0x00, 0x01, 0x02, 0x00, 0x00, 0x2e, + 0x01, 0xa0, 0x03, 0x00, 0x01, 0x00, 0xb5, 0xd0, + 0xab, 0x11, 0xea, 0x05, 0x0e, 0xb7, 0xd0, 0xab, + 0xe9, 0x07, 0x04, 0x91, 0x05, 0x00, 0x00, 0x28, + 0xb6, 0xd0, 0xab, 0xe9, 0x07, 0x04, 0x94, 0x05, + 0x00, 0x00, 0x28, 0xb8, 0xd0, 0xab, 0xe9, 0x07, + 0x04, 0x95, 0x05, 0x00, 0x00, 0x28, 0x04, 0x92, + 0x05, 0x00, 0x00, 0x28, 0xfc, 0x06, 0x01, 0x00, + 0x0d, 0x43, 0x06, 0x00, 0x00, 0x01, 0x00, 0x01, + 0x02, 0x00, 0x00, 0x62, 0x01, 0xa0, 0x03, 0x00, + 0x01, 0x00, 0xb4, 0xd0, 0xab, 0x11, 0xea, 0x15, + 0x0e, 0xbb, 0xd0, 0xab, 0x11, 0xea, 0x0e, 0x0e, + 0xbc, 0x08, 0xd0, 0xab, 0x11, 0xea, 0x06, 0x0e, + 0xbc, 0x09, 0xd0, 0xab, 0xe9, 0x07, 0x04, 0x93, + 0x05, 0x00, 0x00, 0x28, 0xb5, 0xd0, 0xab, 0xe9, + 0x07, 0x04, 0x91, 0x05, 0x00, 0x00, 0x28, 0xb6, + 0xd0, 0xab, 0xe9, 0x07, 0x04, 0x94, 0x05, 0x00, + 0x00, 0x28, 0xb7, 0xd0, 0xab, 0x11, 0xea, 0x05, + 0x0e, 0xb8, 0xd0, 0xab, 0xe9, 0x07, 0x04, 0x95, + 0x05, 0x00, 0x00, 0x28, 0xb9, 0xd0, 0xab, 0x11, + 0xea, 0x05, 0x0e, 0xba, 0xd0, 0xab, 0xe9, 0x07, + 0x04, 0x96, 0x05, 0x00, 0x00, 0x28, 0x04, 0x92, + 0x05, 0x00, 0x00, 0x28, 0xfc, 0x06, 0x01, 0x00, + 0x0d, 0x43, 0x06, 0x00, 0x00, 0x01, 0x04, 0x01, + 0x03, 0x00, 0x00, 0x7e, 0x05, 0xa0, 0x03, 0x00, + 0x01, 0x00, 0xa2, 0x03, 0x00, 0x00, 0x00, 0xa4, + 0x03, 0x00, 0x01, 0x00, 0xa6, 0x03, 0x00, 0x02, + 0x00, 0xa8, 0x03, 0x00, 0x03, 0x00, 0x39, 0x91, + 0x00, 0x00, 0x00, 0xd0, 0xee, 0x43, 0x5b, 0x00, + 0x00, 0x00, 0x04, 0x23, 0x05, 0x00, 0x00, 0x24, + 0x01, 0x00, 0xc8, 0x39, 0x90, 0x00, 0x00, 0x00, + 0xc4, 0xb4, 0x48, 0xee, 0xd0, 0xab, 0xcd, 0x11, + 0xe9, 0x0e, 0x0e, 0xc4, 0xb4, 0x48, 0x43, 0x23, + 0x02, 0x00, 0x00, 0xb3, 0x24, 0x01, 0x00, 0xca, + 0xc5, 0x11, 0xe9, 0x0f, 0x0e, 0xc4, 0xb4, 0x48, + 0x43, 0x23, 0x02, 0x00, 0x00, 0xbc, 0xfe, 0x24, + 0x01, 0x00, 0xcb, 0xb5, 0xc6, 0xab, 0xe9, 0x0d, + 0xbc, 0x0b, 0xc7, 0xac, 0xe9, 0x07, 0x04, 0x91, + 0x05, 0x00, 0x00, 0x28, 0xb6, 0xc6, 0xab, 0xe9, + 0x0d, 0xbc, 0x0c, 0xc7, 0xac, 0xe9, 0x07, 0x04, + 0x94, 0x05, 0x00, 0x00, 0x28, 0xb7, 0xc6, 0xab, + 0xe9, 0x0d, 0xbc, 0x0d, 0xc7, 0xac, 0xe9, 0x07, + 0x04, 0x95, 0x05, 0x00, 0x00, 0x28, 0x04, 0x92, + 0x05, 0x00, 0x00, 0x28, 0xfc, 0x06, 0x01, 0x00, + 0x0d, 0x43, 0x06, 0x00, 0x00, 0x01, 0x00, 0x01, + 0x02, 0x00, 0x00, 0x11, 0x01, 0xa0, 0x03, 0x00, + 0x01, 0x00, 0xb5, 0xd0, 0xab, 0xe9, 0x07, 0x04, + 0x91, 0x05, 0x00, 0x00, 0x28, 0x04, 0x92, 0x05, + 0x00, 0x00, 0x28, 0xfc, 0x06, 0x01, 0x00, 0x0d, + 0x43, 0x06, 0x00, 0x00, 0x01, 0x00, 0x01, 0x02, + 0x00, 0x00, 0x3f, 0x01, 0xa0, 0x03, 0x00, 0x01, + 0x00, 0xb5, 0xd0, 0xab, 0x11, 0xea, 0x06, 0x0e, + 0xbc, 0x0b, 0xd0, 0xab, 0xe9, 0x07, 0x04, 0x91, + 0x05, 0x00, 0x00, 0x28, 0xb6, 0xd0, 0xab, 0x11, + 0xea, 0x06, 0x0e, 0xbc, 0x0c, 0xd0, 0xab, 0xe9, + 0x07, 0x04, 0x94, 0x05, 0x00, 0x00, 0x28, 0xb7, + 0xd0, 0xab, 0x11, 0xea, 0x06, 0x0e, 0xbc, 0x0d, + 0xd0, 0xab, 0xe9, 0x07, 0x04, 0x95, 0x05, 0x00, + 0x00, 0x28, 0x04, 0x92, 0x05, 0x00, 0x00, 0x28, + 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, + 0x00, 0x01, 0x00, 0x01, 0x02, 0x00, 0x00, 0x39, + 0x01, 0xa0, 0x03, 0x00, 0x01, 0x00, 0xb5, 0xd0, + 0xab, 0xe9, 0x07, 0x04, 0x91, 0x05, 0x00, 0x00, + 0x28, 0xb6, 0xd0, 0xab, 0x11, 0xea, 0x05, 0x0e, + 0xb7, 0xd0, 0xab, 0xe9, 0x07, 0x04, 0x94, 0x05, + 0x00, 0x00, 0x28, 0xb8, 0xd0, 0xab, 0xe9, 0x07, + 0x04, 0x95, 0x05, 0x00, 0x00, 0x28, 0xba, 0xd0, + 0xab, 0xe9, 0x07, 0x04, 0x96, 0x05, 0x00, 0x00, + 0x28, 0x04, 0x92, 0x05, 0x00, 0x00, 0x28, 0xfc, + 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, + 0x01, 0x00, 0x01, 0x02, 0x00, 0x00, 0x18, 0x01, + 0xa0, 0x03, 0x00, 0x01, 0x00, 0xb5, 0xd0, 0xab, + 0x11, 0xea, 0x05, 0x0e, 0xb9, 0xd0, 0xab, 0xe9, + 0x07, 0x04, 0x91, 0x05, 0x00, 0x00, 0x28, 0x04, + 0x92, 0x05, 0x00, 0x00, 0x28, 0xfc, 0x06, 0x01, + 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, 0x01, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x2b, 0x01, 0xa0, 0x03, + 0x00, 0x01, 0x00, 0xbc, 0x0b, 0xd0, 0xab, 0x11, + 0xea, 0x17, 0x0e, 0xbc, 0x08, 0xd0, 0xab, 0x11, + 0xea, 0x0f, 0x0e, 0xbc, 0x50, 0xd0, 0xab, 0x11, + 0xea, 0x07, 0x0e, 0xbd, 0x20, 0x03, 0xd0, 0xab, + 0xe9, 0x07, 0x04, 0x96, 0x05, 0x00, 0x00, 0x28, + 0x04, 0x92, 0x05, 0x00, 0x00, 0x28, 0xfc, 0x06, + 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, 0x01, + 0x02, 0x01, 0x03, 0x00, 0x00, 0x65, 0x03, 0xa0, + 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, 0x00, 0x00, + 0x00, 0xa4, 0x03, 0x00, 0x01, 0x00, 0x39, 0x91, + 0x00, 0x00, 0x00, 0xd0, 0xee, 0x43, 0x5b, 0x00, + 0x00, 0x00, 0x04, 0x23, 0x05, 0x00, 0x00, 0x24, + 0x01, 0x00, 0xb4, 0x48, 0xcc, 0x43, 0x23, 0x02, + 0x00, 0x00, 0xbc, 0xfe, 0x24, 0x01, 0x00, 0xc9, + 0xb5, 0xc4, 0xab, 0xe9, 0x07, 0x04, 0x91, 0x05, + 0x00, 0x00, 0x28, 0xb4, 0xc4, 0xab, 0x11, 0xea, + 0x25, 0x0e, 0xc5, 0xb6, 0xa8, 0x11, 0xe9, 0x06, + 0x0e, 0xc5, 0xbc, 0x14, 0xa6, 0x11, 0xea, 0x16, + 0x0e, 0xbc, 0x28, 0xc5, 0xab, 0x11, 0xea, 0x0e, + 0x0e, 0xbc, 0x3c, 0xc5, 0xab, 0x11, 0xea, 0x06, + 0x0e, 0xbc, 0x50, 0xc5, 0xab, 0xe9, 0x07, 0x04, + 0x96, 0x05, 0x00, 0x00, 0x28, 0x04, 0x92, 0x05, + 0x00, 0x00, 0x28, 0xfc, 0x06, 0x01, 0x00, 0x0d, + 0x43, 0x06, 0x00, 0x00, 0x01, 0x03, 0x01, 0x03, + 0x00, 0x00, 0x5a, 0x04, 0xa0, 0x03, 0x00, 0x01, + 0x00, 0xa2, 0x03, 0x00, 0x00, 0x00, 0xa4, 0x03, + 0x00, 0x01, 0x00, 0xa6, 0x03, 0x00, 0x02, 0x00, + 0x39, 0x91, 0x00, 0x00, 0x00, 0xd0, 0xee, 0x43, + 0x5b, 0x00, 0x00, 0x00, 0x04, 0x23, 0x05, 0x00, + 0x00, 0x24, 0x01, 0x00, 0xc8, 0x39, 0x90, 0x00, + 0x00, 0x00, 0xc4, 0xb4, 0x48, 0xee, 0xd0, 0xab, + 0xcd, 0x11, 0xe9, 0x0e, 0x0e, 0xc4, 0xb4, 0x48, + 0x43, 0x23, 0x02, 0x00, 0x00, 0xb3, 0x24, 0x01, + 0x00, 0xca, 0xba, 0xc6, 0xab, 0x11, 0xea, 0x15, + 0x0e, 0xbc, 0x09, 0xc6, 0xab, 0x11, 0xea, 0x0d, + 0x0e, 0xc5, 0xe9, 0x11, 0xb4, 0xc6, 0xab, 0xe9, + 0x0c, 0xb4, 0xd0, 0xac, 0xe9, 0x07, 0x04, 0x96, + 0x05, 0x00, 0x00, 0x28, 0x04, 0x92, 0x05, 0x00, + 0x00, 0x28, 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, + 0x06, 0x00, 0x00, 0x01, 0x03, 0x01, 0x03, 0x00, + 0x00, 0x78, 0x04, 0xa0, 0x03, 0x00, 0x01, 0x00, + 0xa2, 0x03, 0x00, 0x00, 0x00, 0xa4, 0x03, 0x00, + 0x01, 0x00, 0xa6, 0x03, 0x00, 0x02, 0x00, 0x39, + 0x91, 0x00, 0x00, 0x00, 0xd0, 0xee, 0x43, 0x5b, + 0x00, 0x00, 0x00, 0x04, 0x23, 0x05, 0x00, 0x00, + 0x24, 0x01, 0x00, 0xb4, 0x48, 0xcc, 0x43, 0x23, + 0x02, 0x00, 0x00, 0xb3, 0x24, 0x01, 0x00, 0xc9, + 0xc4, 0x43, 0x23, 0x02, 0x00, 0x00, 0xbc, 0xfe, + 0x24, 0x01, 0x00, 0xca, 0xb5, 0xc5, 0xab, 0xe9, + 0x0d, 0xbc, 0x0b, 0xc6, 0xac, 0xe9, 0x07, 0x04, + 0x91, 0x05, 0x00, 0x00, 0x28, 0xb6, 0xc5, 0xab, + 0xe9, 0x0d, 0xbc, 0x0c, 0xc6, 0xac, 0xe9, 0x07, + 0x04, 0x94, 0x05, 0x00, 0x00, 0x28, 0xbb, 0xc5, + 0xac, 0x11, 0xe9, 0x06, 0x0e, 0xbc, 0x08, 0xc5, + 0xac, 0x11, 0xea, 0x0e, 0x0e, 0xbc, 0x11, 0xc6, + 0xab, 0x11, 0xea, 0x06, 0x0e, 0xbc, 0x12, 0xc6, + 0xab, 0xe9, 0x07, 0x04, 0x92, 0x05, 0x00, 0x00, + 0x28, 0x04, 0x96, 0x05, 0x00, 0x00, 0x28, 0xfc, + 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, + 0x01, 0x00, 0x01, 0x02, 0x00, 0x00, 0x2e, 0x01, + 0xa0, 0x03, 0x00, 0x01, 0x00, 0xb5, 0xd0, 0xab, + 0xe9, 0x07, 0x04, 0x91, 0x05, 0x00, 0x00, 0x28, + 0xb6, 0xd0, 0xab, 0x11, 0xea, 0x05, 0x0e, 0xb7, + 0xd0, 0xab, 0xe9, 0x07, 0x04, 0x94, 0x05, 0x00, + 0x00, 0x28, 0xb8, 0xd0, 0xab, 0xe9, 0x07, 0x04, + 0x95, 0x05, 0x00, 0x00, 0x28, 0x04, 0x92, 0x05, + 0x00, 0x00, 0x28, 0xfc, 0x06, 0x01, 0x00, 0x0d, + 0x43, 0x06, 0x00, 0x00, 0x01, 0x01, 0x01, 0x03, + 0x00, 0x00, 0x38, 0x02, 0xa0, 0x03, 0x00, 0x01, + 0x00, 0xa2, 0x03, 0x00, 0x00, 0x00, 0x39, 0x91, + 0x00, 0x00, 0x00, 0xd0, 0xee, 0x43, 0x5b, 0x00, + 0x00, 0x00, 0x04, 0x23, 0x05, 0x00, 0x00, 0x24, + 0x01, 0x00, 0xc8, 0x39, 0x90, 0x00, 0x00, 0x00, + 0xc4, 0xb4, 0x48, 0xee, 0xd0, 0xab, 0xe9, 0x11, + 0xd0, 0xb5, 0xa8, 0xe9, 0x0c, 0xd0, 0xb8, 0xa6, + 0xe9, 0x07, 0x04, 0x91, 0x05, 0x00, 0x00, 0x28, + 0x04, 0x92, 0x05, 0x00, 0x00, 0x28, 0xfc, 0x06, + 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, 0x01, + 0x02, 0x01, 0x03, 0x00, 0x00, 0x71, 0x03, 0xa0, + 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, 0x00, 0x00, + 0x00, 0xa4, 0x03, 0x00, 0x01, 0x00, 0x39, 0x91, + 0x00, 0x00, 0x00, 0xd0, 0xee, 0x43, 0x5b, 0x00, + 0x00, 0x00, 0x04, 0x23, 0x05, 0x00, 0x00, 0x24, + 0x01, 0x00, 0xc8, 0x39, 0x90, 0x00, 0x00, 0x00, + 0xc4, 0xb4, 0x48, 0xee, 0xd0, 0xab, 0xc9, 0xb5, + 0xd0, 0xab, 0x11, 0xea, 0x15, 0x0e, 0xb9, 0xd0, + 0xab, 0x11, 0xea, 0x0e, 0x0e, 0xc5, 0xe9, 0x12, + 0xd0, 0xbb, 0xa8, 0xe9, 0x0d, 0xd0, 0xbc, 0x09, + 0xa6, 0xe9, 0x07, 0x04, 0x91, 0x05, 0x00, 0x00, + 0x28, 0xb6, 0xd0, 0xab, 0x11, 0xea, 0x05, 0x0e, + 0xb7, 0xd0, 0xab, 0xe9, 0x07, 0x04, 0x94, 0x05, + 0x00, 0x00, 0x28, 0xb8, 0xd0, 0xab, 0xe9, 0x07, + 0x04, 0x95, 0x05, 0x00, 0x00, 0x28, 0xba, 0xd0, + 0xab, 0xe9, 0x07, 0x04, 0x96, 0x05, 0x00, 0x00, + 0x28, 0x04, 0x92, 0x05, 0x00, 0x00, 0x28, 0xfc, + 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, + 0x01, 0x04, 0x01, 0x03, 0x00, 0x00, 0x67, 0x05, + 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, 0x00, + 0x00, 0x00, 0xa4, 0x03, 0x00, 0x01, 0x00, 0xa6, + 0x03, 0x00, 0x02, 0x00, 0xa8, 0x03, 0x00, 0x03, + 0x00, 0x39, 0x91, 0x00, 0x00, 0x00, 0xd0, 0xee, + 0x43, 0x5b, 0x00, 0x00, 0x00, 0x04, 0x23, 0x05, + 0x00, 0x00, 0x24, 0x01, 0x00, 0xc8, 0x39, 0x90, + 0x00, 0x00, 0x00, 0xc4, 0xb4, 0x48, 0xee, 0xd0, + 0xab, 0xcd, 0x11, 0xe9, 0x0e, 0x0e, 0xc4, 0xb4, + 0x48, 0x43, 0x23, 0x02, 0x00, 0x00, 0xb3, 0x24, + 0x01, 0x00, 0xca, 0xc5, 0x11, 0xe9, 0x0f, 0x0e, + 0xc4, 0xb4, 0x48, 0x43, 0x23, 0x02, 0x00, 0x00, + 0xbc, 0xfe, 0x24, 0x01, 0x00, 0xcb, 0xb5, 0xd0, + 0xab, 0xe9, 0x07, 0x04, 0x91, 0x05, 0x00, 0x00, + 0x28, 0xb8, 0xc6, 0xab, 0xe9, 0x0d, 0xbc, 0x0e, + 0xc7, 0xac, 0xe9, 0x07, 0x04, 0x96, 0x05, 0x00, + 0x00, 0x28, 0x04, 0x92, 0x05, 0x00, 0x00, 0x28, + 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, + 0x00, 0x01, 0x04, 0x01, 0x03, 0x00, 0x00, 0x6d, + 0x05, 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, + 0x00, 0x00, 0x00, 0xa4, 0x03, 0x00, 0x01, 0x00, + 0xa6, 0x03, 0x00, 0x02, 0x00, 0xa8, 0x03, 0x00, + 0x03, 0x00, 0x39, 0x91, 0x00, 0x00, 0x00, 0xd0, + 0xee, 0x43, 0x5b, 0x00, 0x00, 0x00, 0x04, 0x23, + 0x05, 0x00, 0x00, 0x24, 0x01, 0x00, 0xc8, 0x39, + 0x90, 0x00, 0x00, 0x00, 0xc4, 0xb4, 0x48, 0xee, + 0xd0, 0xab, 0xcd, 0x11, 0xe9, 0x0e, 0x0e, 0xc4, + 0xb4, 0x48, 0x43, 0x23, 0x02, 0x00, 0x00, 0xb3, + 0x24, 0x01, 0x00, 0xca, 0xc5, 0x11, 0xe9, 0x0f, + 0x0e, 0xc4, 0xb4, 0x48, 0x43, 0x23, 0x02, 0x00, + 0x00, 0xbc, 0xfe, 0x24, 0x01, 0x00, 0xcb, 0xb5, + 0xc6, 0xac, 0x11, 0xe9, 0x05, 0x0e, 0xb6, 0xc6, + 0xac, 0x11, 0xea, 0x0e, 0x0e, 0xbc, 0x0b, 0xc7, + 0xab, 0x11, 0xea, 0x06, 0x0e, 0xbc, 0x0c, 0xc7, + 0xab, 0xe9, 0x07, 0x04, 0x92, 0x05, 0x00, 0x00, + 0x28, 0x04, 0x91, 0x05, 0x00, 0x00, 0x28, 0xfc, + 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, + 0x01, 0x02, 0x01, 0x03, 0x00, 0x00, 0x52, 0x03, + 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, 0x00, + 0x00, 0x00, 0xa4, 0x03, 0x00, 0x01, 0x00, 0x39, + 0x91, 0x00, 0x00, 0x00, 0xd0, 0xee, 0x43, 0x5b, + 0x00, 0x00, 0x00, 0x04, 0x23, 0x05, 0x00, 0x00, + 0x24, 0x01, 0x00, 0xc8, 0x39, 0x90, 0x00, 0x00, + 0x00, 0xc4, 0xb4, 0x48, 0xee, 0xd0, 0xab, 0x11, + 0xe9, 0x0e, 0x0e, 0xc4, 0xb4, 0x48, 0x43, 0x23, + 0x02, 0x00, 0x00, 0xb3, 0x24, 0x01, 0x00, 0xc9, + 0xba, 0xc5, 0xab, 0x11, 0xea, 0x0e, 0x0e, 0xbc, + 0x09, 0xc5, 0xab, 0x11, 0xea, 0x06, 0x0e, 0xbc, + 0x0a, 0xd0, 0xab, 0xe9, 0x07, 0x04, 0x95, 0x05, + 0x00, 0x00, 0x28, 0x04, 0x92, 0x05, 0x00, 0x00, + 0x28, 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, + 0x00, 0x00, 0x01, 0x04, 0x01, 0x03, 0x00, 0x00, + 0x5c, 0x05, 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, + 0x03, 0x00, 0x00, 0x00, 0xa4, 0x03, 0x00, 0x01, + 0x00, 0xa6, 0x03, 0x00, 0x02, 0x00, 0xa8, 0x03, + 0x00, 0x03, 0x00, 0x39, 0x91, 0x00, 0x00, 0x00, + 0xd0, 0xee, 0x43, 0x5b, 0x00, 0x00, 0x00, 0x04, + 0x23, 0x05, 0x00, 0x00, 0x24, 0x01, 0x00, 0xc8, + 0x39, 0x90, 0x00, 0x00, 0x00, 0xc4, 0xb4, 0x48, + 0xee, 0xd0, 0xab, 0xcd, 0x11, 0xe9, 0x0e, 0x0e, + 0xc4, 0xb4, 0x48, 0x43, 0x23, 0x02, 0x00, 0x00, + 0xb3, 0x24, 0x01, 0x00, 0xca, 0xc5, 0x11, 0xe9, + 0x0f, 0x0e, 0xc4, 0xb4, 0x48, 0x43, 0x23, 0x02, + 0x00, 0x00, 0xbc, 0xfe, 0x24, 0x01, 0x00, 0xcb, + 0xb7, 0xc6, 0xab, 0xe9, 0x0d, 0xbc, 0x0d, 0xc7, + 0xac, 0xe9, 0x07, 0x04, 0x95, 0x05, 0x00, 0x00, + 0x28, 0x04, 0x92, 0x05, 0x00, 0x00, 0x28, 0xfc, + 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0xac, + 0x03, 0x02, 0x00, 0x02, 0x02, 0x00, 0x01, 0x15, + 0x02, 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, + 0x00, 0x01, 0x00, 0xd1, 0x11, 0xea, 0x09, 0x0e, + 0x04, 0x0e, 0x01, 0x00, 0x00, 0xd0, 0xae, 0xe9, + 0x06, 0xbf, 0x00, 0xd0, 0xee, 0x28, 0xd0, 0x28, + 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, + 0x00, 0x01, 0x01, 0x01, 0x05, 0x00, 0x00, 0x2e, + 0x02, 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, + 0x00, 0x00, 0x00, 0xd0, 0x43, 0xdc, 0x04, 0x00, + 0x00, 0x39, 0xd7, 0x00, 0x00, 0x00, 0x24, 0x01, + 0x00, 0xcc, 0x98, 0xe9, 0x19, 0x39, 0xbf, 0x00, + 0x00, 0x00, 0x11, 0x04, 0x97, 0x05, 0x00, 0x00, + 0x43, 0x5a, 0x00, 0x00, 0x00, 0xd0, 0x24, 0x01, + 0x00, 0x21, 0x01, 0x00, 0x2f, 0xc4, 0xb5, 0x48, + 0x28, 0xfc, 0x06, 0x01, 0x00, 0x07, 0x18, 0x5e, + 0x28, 0x5b, 0x61, 0x2d, 0x7a, 0x30, 0x2d, 0x39, + 0x5d, 0x2b, 0x29, 0x07, 0x7a, 0x02, 0x02, 0x00, + 0x36, 0x00, 0x00, 0x00, 0x08, 0x06, 0x00, 0x00, + 0x00, 0x04, 0x07, 0xf5, 0xff, 0xff, 0xff, 0x0b, + 0x00, 0x05, 0x0b, 0x01, 0x1c, 0x10, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, + 0x7f, 0x01, 0x00, 0x00, 0x00, 0x15, 0x03, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x41, 0x00, 0x5a, 0x00, + 0x61, 0x00, 0x7a, 0x00, 0x0a, 0x0c, 0x01, 0x0c, + 0x00, 0x0a, 0x0d, 0x43, 0x06, 0x00, 0xb0, 0x03, + 0x02, 0x00, 0x02, 0x03, 0x00, 0x00, 0x16, 0x02, + 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, 0x00, + 0x01, 0x00, 0xd0, 0xd1, 0xa9, 0x98, 0xe9, 0x10, + 0x39, 0xbf, 0x00, 0x00, 0x00, 0x11, 0x04, 0xbc, + 0x04, 0x00, 0x00, 0x21, 0x01, 0x00, 0x2f, 0x29, + 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, + 0xb2, 0x03, 0x02, 0x02, 0x02, 0x05, 0x00, 0x00, + 0x55, 0x04, 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, + 0x03, 0x00, 0x01, 0x00, 0xa4, 0x03, 0x00, 0x00, + 0x00, 0xa6, 0x03, 0x00, 0x01, 0x00, 0xb4, 0xc8, + 0xc4, 0xd1, 0xe8, 0xa5, 0xe9, 0x4d, 0xd1, 0xc4, + 0x48, 0xcd, 0xc5, 0x42, 0x3e, 0x00, 0x00, 0x00, + 0x11, 0xea, 0x04, 0x0e, 0xb5, 0x98, 0x44, 0x3e, + 0x00, 0x00, 0x00, 0xc5, 0xb4, 0x98, 0x44, 0x3c, + 0x00, 0x00, 0x00, 0x04, 0x3f, 0x00, 0x00, 0x00, + 0xc5, 0xaa, 0x11, 0xe9, 0x0b, 0x0e, 0xc5, 0xb4, + 0x98, 0x15, 0x44, 0x3d, 0x00, 0x00, 0x00, 0x0e, + 0x39, 0x8d, 0x00, 0x00, 0x00, 0x43, 0x63, 0x00, + 0x00, 0x00, 0xd0, 0xc5, 0x42, 0xb6, 0x04, 0x00, + 0x00, 0xc5, 0x24, 0x03, 0x00, 0x0e, 0x95, 0x00, + 0xeb, 0xaf, 0x29, 0xfc, 0x06, 0x01, 0x00, 0x0d, + 0x43, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x03, + 0x00, 0x04, 0x73, 0x04, 0xa0, 0x03, 0x00, 0x00, + 0x80, 0xa2, 0x03, 0x00, 0x01, 0x00, 0xa4, 0x03, + 0x00, 0x02, 0x00, 0xa6, 0x03, 0x00, 0x03, 0x00, + 0xbf, 0x00, 0xcc, 0xc9, 0x0b, 0x04, 0xa6, 0x03, + 0x00, 0x00, 0x4d, 0xb6, 0x04, 0x00, 0x00, 0xbf, + 0x01, 0x4e, 0x3f, 0x00, 0x00, 0x00, 0x4d, 0x3f, + 0x00, 0x00, 0x00, 0x26, 0x01, 0x00, 0xcb, 0x0b, + 0x04, 0x98, 0x05, 0x00, 0x00, 0x4d, 0xb6, 0x04, + 0x00, 0x00, 0xbf, 0x02, 0x4e, 0x3f, 0x00, 0x00, + 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x92, 0x04, 0x00, 0x00, 0x4d, 0xb6, 0x04, 0x00, + 0x00, 0xbf, 0x03, 0x4e, 0x3f, 0x00, 0x00, 0x00, + 0x4d, 0x3f, 0x00, 0x00, 0x00, 0x26, 0x02, 0x00, + 0xce, 0x11, 0xe9, 0x0f, 0x0e, 0x39, 0xd9, 0x00, + 0x00, 0x00, 0xc5, 0x42, 0x3a, 0x00, 0x00, 0x00, + 0xc6, 0xef, 0x0e, 0xc7, 0x11, 0xe9, 0x0a, 0x0e, + 0x39, 0xd9, 0x00, 0x00, 0x00, 0xc5, 0xc7, 0xef, + 0x0e, 0xc4, 0x28, 0xfc, 0x06, 0x01, 0x00, 0x0d, + 0x43, 0x06, 0x00, 0xa0, 0x03, 0x01, 0x06, 0x01, + 0x05, 0x01, 0x01, 0xe4, 0x01, 0x07, 0xa2, 0x03, + 0x00, 0x01, 0x00, 0xa4, 0x03, 0x00, 0x00, 0x00, + 0xa6, 0x03, 0x00, 0x01, 0x00, 0xae, 0x03, 0x00, + 0x02, 0x00, 0xb2, 0x03, 0x00, 0x03, 0x00, 0x98, + 0x01, 0x00, 0x01, 0x00, 0x10, 0x00, 0x01, 0x00, + 0xa0, 0x03, 0x00, 0x01, 0x08, 0xc2, 0x05, 0x0c, + 0x01, 0xc2, 0x04, 0xc1, 0x04, 0xe8, 0xb5, 0xa7, + 0xe9, 0x0f, 0x06, 0xc1, 0x04, 0xb5, 0x48, 0xae, + 0xe9, 0x07, 0xc1, 0x04, 0xb5, 0x48, 0xeb, 0x02, + 0x0b, 0xc8, 0x39, 0xd8, 0x00, 0x00, 0x00, 0xc1, + 0x05, 0xdc, 0xef, 0x0e, 0xc4, 0x42, 0xb5, 0x04, + 0x00, 0x00, 0xca, 0x06, 0xc6, 0xad, 0x11, 0xea, + 0x09, 0x0e, 0x04, 0x99, 0x05, 0x00, 0x00, 0xc6, + 0xad, 0xe9, 0x0f, 0xc1, 0x05, 0x04, 0x99, 0x05, + 0x00, 0x00, 0x44, 0xb5, 0x04, 0x00, 0x00, 0xeb, + 0x31, 0x04, 0x9a, 0x05, 0x00, 0x00, 0xc6, 0xae, + 0xe9, 0x19, 0x39, 0xbc, 0x00, 0x00, 0x00, 0x11, + 0x04, 0x9b, 0x05, 0x00, 0x00, 0x43, 0x5a, 0x00, + 0x00, 0x00, 0xc6, 0x24, 0x01, 0x00, 0x21, 0x01, + 0x00, 0x2f, 0xc1, 0x05, 0x04, 0x9a, 0x05, 0x00, + 0x00, 0x44, 0xb5, 0x04, 0x00, 0x00, 0xb4, 0x98, + 0xc9, 0xdc, 0x43, 0xa6, 0x03, 0x00, 0x00, 0xd0, + 0x24, 0x01, 0x00, 0xcb, 0xb4, 0xc7, 0xe8, 0xad, + 0xe9, 0x19, 0x39, 0xbc, 0x00, 0x00, 0x00, 0x11, + 0x04, 0x9c, 0x05, 0x00, 0x00, 0x43, 0x5a, 0x00, + 0x00, 0x00, 0xd0, 0x24, 0x01, 0x00, 0x21, 0x01, + 0x00, 0x2f, 0xc1, 0x05, 0x39, 0xd6, 0x00, 0x00, + 0x00, 0xc7, 0xb4, 0x48, 0xc5, 0xef, 0x44, 0x38, + 0x05, 0x00, 0x00, 0xc1, 0x05, 0xc5, 0xe9, 0x16, + 0x39, 0xd5, 0x00, 0x00, 0x00, 0xc1, 0x05, 0x42, + 0x38, 0x05, 0x00, 0x00, 0x48, 0x11, 0xea, 0x13, + 0x0e, 0xbf, 0x00, 0xeb, 0x0e, 0x39, 0xd4, 0x00, + 0x00, 0x00, 0xc1, 0x05, 0x42, 0x38, 0x05, 0x00, + 0x00, 0x48, 0x44, 0x9d, 0x05, 0x00, 0x00, 0x29, + 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x06, + 0x00, 0x04, 0x92, 0x05, 0x00, 0x00, 0x28, 0xfc, + 0x06, 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, + 0x01, 0x00, 0x01, 0x03, 0x00, 0x01, 0x1d, 0x01, + 0xa0, 0x03, 0x00, 0x01, 0x00, 0x04, 0x47, 0x00, + 0x00, 0x00, 0xd0, 0x99, 0xab, 0x11, 0xe9, 0x07, + 0x0e, 0xd0, 0x26, 0x01, 0x00, 0xd8, 0x0e, 0xd0, + 0x43, 0x9e, 0x05, 0x00, 0x00, 0xbf, 0x00, 0x25, + 0x01, 0x00, 0xfc, 0x06, 0x01, 0x00, 0x0d, 0x43, + 0x06, 0x00, 0x00, 0x01, 0x00, 0x01, 0x03, 0x00, + 0x00, 0x0e, 0x01, 0xa0, 0x03, 0x00, 0x01, 0x00, + 0x39, 0xd4, 0x00, 0x00, 0x00, 0x39, 0xd6, 0x00, + 0x00, 0x00, 0xd0, 0xee, 0x48, 0x28, 0xfc, 0x06, + 0x01, 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, 0x01, + 0x01, 0x01, 0x03, 0x00, 0x00, 0x0c, 0x02, 0xa0, + 0x03, 0x00, 0x01, 0x00, 0x10, 0x00, 0x01, 0x00, + 0x08, 0xc8, 0xc4, 0x43, 0x9d, 0x05, 0x00, 0x00, + 0xd0, 0x25, 0x01, 0x00, 0xfc, 0x06, 0x01, 0x00, + 0x0d, 0x43, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x02, 0x00, 0x00, 0x1a, 0x01, 0x10, 0x00, 0x01, + 0x00, 0x08, 0xc8, 0x0b, 0xc4, 0x42, 0x38, 0x05, + 0x00, 0x00, 0x4d, 0x38, 0x05, 0x00, 0x00, 0xc4, + 0x42, 0xb5, 0x04, 0x00, 0x00, 0x4d, 0xb5, 0x04, + 0x00, 0x00, 0x28, 0xfc, 0x06, 0x01, 0x00, 0x0d, + 0x43, 0x06, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x12, + 0x00, 0x22, 0x83, 0x0c, 0x1c, 0xa0, 0x03, 0x00, + 0x00, 0x00, 0xa2, 0x03, 0x00, 0x01, 0x80, 0xa4, + 0x03, 0x00, 0x02, 0x80, 0xa6, 0x03, 0x00, 0x03, + 0x80, 0xa8, 0x03, 0x00, 0x04, 0x80, 0xaa, 0x03, + 0x00, 0x05, 0x80, 0xac, 0x03, 0x00, 0x06, 0x80, + 0xae, 0x03, 0x00, 0x07, 0x80, 0xb0, 0x03, 0x00, + 0x08, 0x80, 0xb2, 0x03, 0x00, 0x09, 0x80, 0xb4, + 0x03, 0x00, 0x0a, 0x80, 0xfe, 0x06, 0x00, 0x0b, + 0x80, 0x80, 0x07, 0x00, 0x0c, 0x80, 0x82, 0x07, + 0x00, 0x0d, 0x80, 0x84, 0x07, 0x00, 0x0e, 0x80, + 0x86, 0x07, 0x00, 0x0f, 0x80, 0x88, 0x07, 0x00, + 0x10, 0x80, 0x8a, 0x07, 0x00, 0x11, 0x80, 0x8c, + 0x07, 0x00, 0x12, 0x80, 0x8e, 0x07, 0x00, 0x13, + 0x80, 0x90, 0x07, 0x00, 0x14, 0x80, 0x92, 0x07, + 0x00, 0x15, 0x80, 0x94, 0x07, 0x00, 0x16, 0x80, + 0x96, 0x07, 0x00, 0x17, 0x80, 0x98, 0x07, 0x00, + 0x18, 0x80, 0x9a, 0x07, 0x00, 0x19, 0x80, 0x9c, + 0x07, 0x00, 0x1a, 0x80, 0x9e, 0x07, 0x00, 0x1b, + 0x80, 0xbf, 0x01, 0xca, 0xbf, 0x02, 0xcb, 0xbf, + 0x03, 0xc2, 0x04, 0xbf, 0x04, 0xc2, 0x06, 0xbf, + 0x07, 0xc2, 0x09, 0xbf, 0x08, 0xc2, 0x0a, 0xbf, + 0x09, 0xc2, 0x0b, 0xbf, 0x0a, 0xc2, 0x0c, 0xbf, + 0x0b, 0xc2, 0x0d, 0xbf, 0x0c, 0xc2, 0x0e, 0xbf, + 0x0d, 0xc2, 0x0f, 0xbf, 0x0e, 0xc2, 0x10, 0xbf, + 0x0f, 0xc2, 0x11, 0xbf, 0x10, 0xc2, 0x12, 0xbf, + 0x11, 0xc2, 0x13, 0xbf, 0x12, 0xc2, 0x16, 0xbf, + 0x13, 0xc2, 0x17, 0xbf, 0x14, 0xc2, 0x18, 0xbf, + 0x1f, 0xc2, 0x1a, 0x04, 0xbc, 0x01, 0x00, 0x00, + 0x39, 0xe1, 0x00, 0x00, 0x00, 0xaa, 0xc8, 0xbf, + 0x00, 0x4e, 0xd1, 0x00, 0x00, 0x00, 0xc9, 0x04, + 0x9b, 0x04, 0x00, 0x00, 0x04, 0x9a, 0x04, 0x00, + 0x00, 0x04, 0x99, 0x04, 0x00, 0x00, 0x04, 0x96, + 0x04, 0x00, 0x00, 0x04, 0x43, 0x05, 0x00, 0x00, + 0x04, 0x95, 0x04, 0x00, 0x00, 0x04, 0x98, 0x04, + 0x00, 0x00, 0x04, 0x94, 0x04, 0x00, 0x00, 0x26, + 0x08, 0x00, 0xc2, 0x05, 0xc1, 0x04, 0xc1, 0x05, + 0x04, 0x9f, 0x05, 0x00, 0x00, 0x04, 0xa0, 0x05, + 0x00, 0x00, 0x04, 0xa1, 0x05, 0x00, 0x00, 0x04, + 0xa2, 0x05, 0x00, 0x00, 0x04, 0xa3, 0x05, 0x00, + 0x00, 0x04, 0xa4, 0x05, 0x00, 0x00, 0x04, 0xa5, + 0x05, 0x00, 0x00, 0x04, 0xa6, 0x05, 0x00, 0x00, + 0x04, 0xa7, 0x05, 0x00, 0x00, 0x04, 0xa8, 0x05, + 0x00, 0x00, 0x04, 0xa9, 0x05, 0x00, 0x00, 0x04, + 0xaa, 0x05, 0x00, 0x00, 0x04, 0xab, 0x05, 0x00, + 0x00, 0x04, 0xac, 0x05, 0x00, 0x00, 0x04, 0xad, + 0x05, 0x00, 0x00, 0x04, 0xae, 0x05, 0x00, 0x00, + 0x26, 0x10, 0x00, 0xef, 0x0e, 0xbe, 0x05, 0xbe, + 0x06, 0x33, 0xc2, 0x08, 0x39, 0xaa, 0x00, 0x00, + 0x00, 0x11, 0x21, 0x00, 0x00, 0xc2, 0x14, 0x0b, + 0x04, 0xa3, 0x03, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xaf, 0x05, 0x00, 0x00, 0x0b, 0x4d, 0xb0, + 0x05, 0x00, 0x00, 0x26, 0x00, 0x00, 0x4d, 0xb1, + 0x05, 0x00, 0x00, 0xc2, 0x15, 0x0b, 0x04, 0xaa, + 0x03, 0x00, 0x00, 0x04, 0xab, 0x03, 0x00, 0x00, + 0x04, 0xac, 0x03, 0x00, 0x00, 0x04, 0xad, 0x03, + 0x00, 0x00, 0x04, 0xae, 0x03, 0x00, 0x00, 0x04, + 0xaf, 0x03, 0x00, 0x00, 0x04, 0xb0, 0x03, 0x00, + 0x00, 0x04, 0xb1, 0x03, 0x00, 0x00, 0x04, 0xb2, + 0x03, 0x00, 0x00, 0x04, 0xb3, 0x03, 0x00, 0x00, + 0x26, 0x0a, 0x00, 0x4d, 0xb4, 0x03, 0x00, 0x00, + 0x04, 0xb5, 0x03, 0x00, 0x00, 0x04, 0xb6, 0x03, + 0x00, 0x00, 0x04, 0xb7, 0x03, 0x00, 0x00, 0x04, + 0xb8, 0x03, 0x00, 0x00, 0x04, 0xb9, 0x03, 0x00, + 0x00, 0x04, 0xba, 0x03, 0x00, 0x00, 0x04, 0xbb, + 0x03, 0x00, 0x00, 0x04, 0xbc, 0x03, 0x00, 0x00, + 0x04, 0xbd, 0x03, 0x00, 0x00, 0x04, 0xbe, 0x03, + 0x00, 0x00, 0x26, 0x0a, 0x00, 0x4d, 0xbf, 0x03, + 0x00, 0x00, 0x04, 0xc0, 0x03, 0x00, 0x00, 0x04, + 0xc1, 0x03, 0x00, 0x00, 0x04, 0xc2, 0x03, 0x00, + 0x00, 0x04, 0xc3, 0x03, 0x00, 0x00, 0x04, 0xc4, + 0x03, 0x00, 0x00, 0x04, 0xc5, 0x03, 0x00, 0x00, + 0x04, 0xc6, 0x03, 0x00, 0x00, 0x04, 0xc7, 0x03, + 0x00, 0x00, 0x04, 0xc8, 0x03, 0x00, 0x00, 0x04, + 0xc9, 0x03, 0x00, 0x00, 0x26, 0x0a, 0x00, 0x4d, + 0xca, 0x03, 0x00, 0x00, 0x04, 0xcb, 0x03, 0x00, + 0x00, 0x04, 0xcc, 0x03, 0x00, 0x00, 0x04, 0xcd, + 0x03, 0x00, 0x00, 0x04, 0xce, 0x03, 0x00, 0x00, + 0x04, 0xcf, 0x03, 0x00, 0x00, 0x04, 0xd0, 0x03, + 0x00, 0x00, 0x04, 0xd1, 0x03, 0x00, 0x00, 0x04, + 0xd2, 0x03, 0x00, 0x00, 0x04, 0xd3, 0x03, 0x00, + 0x00, 0x04, 0xd4, 0x03, 0x00, 0x00, 0x26, 0x0a, + 0x00, 0x4d, 0xd5, 0x03, 0x00, 0x00, 0x04, 0xd6, + 0x03, 0x00, 0x00, 0x04, 0xd7, 0x03, 0x00, 0x00, + 0x04, 0xd8, 0x03, 0x00, 0x00, 0x04, 0xd9, 0x03, + 0x00, 0x00, 0x04, 0xda, 0x03, 0x00, 0x00, 0x04, + 0xdb, 0x03, 0x00, 0x00, 0x04, 0xdc, 0x03, 0x00, + 0x00, 0x04, 0xdd, 0x03, 0x00, 0x00, 0x04, 0xde, + 0x03, 0x00, 0x00, 0x04, 0xdf, 0x03, 0x00, 0x00, + 0x26, 0x0a, 0x00, 0x4d, 0xe0, 0x03, 0x00, 0x00, + 0x04, 0xe1, 0x03, 0x00, 0x00, 0x04, 0xe2, 0x03, + 0x00, 0x00, 0x04, 0xe3, 0x03, 0x00, 0x00, 0x04, + 0xe4, 0x03, 0x00, 0x00, 0x04, 0xe5, 0x03, 0x00, + 0x00, 0x04, 0xe6, 0x03, 0x00, 0x00, 0x04, 0xe7, + 0x03, 0x00, 0x00, 0x04, 0xe8, 0x03, 0x00, 0x00, + 0x04, 0xe9, 0x03, 0x00, 0x00, 0x04, 0xea, 0x03, + 0x00, 0x00, 0x26, 0x0a, 0x00, 0x4d, 0xeb, 0x03, + 0x00, 0x00, 0x04, 0xec, 0x03, 0x00, 0x00, 0x04, + 0xed, 0x03, 0x00, 0x00, 0x04, 0xee, 0x03, 0x00, + 0x00, 0x04, 0xef, 0x03, 0x00, 0x00, 0x04, 0xf0, + 0x03, 0x00, 0x00, 0x04, 0xf1, 0x03, 0x00, 0x00, + 0x04, 0xf2, 0x03, 0x00, 0x00, 0x04, 0xf3, 0x03, + 0x00, 0x00, 0x04, 0xf4, 0x03, 0x00, 0x00, 0x04, + 0xf5, 0x03, 0x00, 0x00, 0x26, 0x0a, 0x00, 0x4d, + 0xf6, 0x03, 0x00, 0x00, 0x04, 0xf7, 0x03, 0x00, + 0x00, 0x04, 0xf8, 0x03, 0x00, 0x00, 0x04, 0xf9, + 0x03, 0x00, 0x00, 0x04, 0xfa, 0x03, 0x00, 0x00, + 0x04, 0xfb, 0x03, 0x00, 0x00, 0x04, 0xfc, 0x03, + 0x00, 0x00, 0x04, 0xfd, 0x03, 0x00, 0x00, 0x04, + 0xfe, 0x03, 0x00, 0x00, 0x04, 0xff, 0x03, 0x00, + 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x26, 0x0a, + 0x00, 0x4d, 0x01, 0x04, 0x00, 0x00, 0x04, 0x02, + 0x04, 0x00, 0x00, 0x04, 0x03, 0x04, 0x00, 0x00, + 0x04, 0x04, 0x04, 0x00, 0x00, 0x04, 0x05, 0x04, + 0x00, 0x00, 0x04, 0x06, 0x04, 0x00, 0x00, 0x04, + 0x07, 0x04, 0x00, 0x00, 0x04, 0x08, 0x04, 0x00, + 0x00, 0x04, 0x09, 0x04, 0x00, 0x00, 0x04, 0x0a, + 0x04, 0x00, 0x00, 0x04, 0x0b, 0x04, 0x00, 0x00, + 0x26, 0x0a, 0x00, 0x4d, 0x0c, 0x04, 0x00, 0x00, + 0x04, 0x0d, 0x04, 0x00, 0x00, 0x04, 0x0e, 0x04, + 0x00, 0x00, 0x04, 0x0f, 0x04, 0x00, 0x00, 0x04, + 0x10, 0x04, 0x00, 0x00, 0x04, 0x11, 0x04, 0x00, + 0x00, 0x04, 0x12, 0x04, 0x00, 0x00, 0x04, 0x13, + 0x04, 0x00, 0x00, 0x04, 0x14, 0x04, 0x00, 0x00, + 0x04, 0x15, 0x04, 0x00, 0x00, 0x04, 0x16, 0x04, + 0x00, 0x00, 0x26, 0x0a, 0x00, 0x4d, 0x17, 0x04, + 0x00, 0x00, 0x04, 0x18, 0x04, 0x00, 0x00, 0x04, + 0x19, 0x04, 0x00, 0x00, 0x04, 0x1a, 0x04, 0x00, + 0x00, 0x04, 0x1b, 0x04, 0x00, 0x00, 0x04, 0x1c, + 0x04, 0x00, 0x00, 0x04, 0x1d, 0x04, 0x00, 0x00, + 0x04, 0x1e, 0x04, 0x00, 0x00, 0x04, 0x1f, 0x04, + 0x00, 0x00, 0x04, 0x20, 0x04, 0x00, 0x00, 0x04, + 0x21, 0x04, 0x00, 0x00, 0x26, 0x0a, 0x00, 0x4d, + 0x22, 0x04, 0x00, 0x00, 0x04, 0x23, 0x04, 0x00, + 0x00, 0x04, 0x24, 0x04, 0x00, 0x00, 0x04, 0x25, + 0x04, 0x00, 0x00, 0x04, 0x26, 0x04, 0x00, 0x00, + 0x04, 0x27, 0x04, 0x00, 0x00, 0x04, 0x28, 0x04, + 0x00, 0x00, 0x04, 0x29, 0x04, 0x00, 0x00, 0x04, + 0x2a, 0x04, 0x00, 0x00, 0x04, 0x2b, 0x04, 0x00, + 0x00, 0x04, 0x2c, 0x04, 0x00, 0x00, 0x26, 0x0a, + 0x00, 0x4d, 0x2d, 0x04, 0x00, 0x00, 0xbe, 0x15, + 0xbe, 0x16, 0xbe, 0x17, 0xbe, 0x18, 0xbe, 0x19, + 0xbe, 0x1a, 0xbe, 0x1b, 0xbe, 0x1c, 0xbe, 0x1d, + 0xbe, 0x1e, 0x26, 0x0a, 0x00, 0x4d, 0x2e, 0x04, + 0x00, 0x00, 0x04, 0x2f, 0x04, 0x00, 0x00, 0x04, + 0x30, 0x04, 0x00, 0x00, 0x04, 0x31, 0x04, 0x00, + 0x00, 0x04, 0x32, 0x04, 0x00, 0x00, 0x04, 0x33, + 0x04, 0x00, 0x00, 0x04, 0x34, 0x04, 0x00, 0x00, + 0x04, 0x35, 0x04, 0x00, 0x00, 0x04, 0x36, 0x04, + 0x00, 0x00, 0x04, 0x37, 0x04, 0x00, 0x00, 0x04, + 0x38, 0x04, 0x00, 0x00, 0x26, 0x0a, 0x00, 0x4d, + 0x39, 0x04, 0x00, 0x00, 0x04, 0x3a, 0x04, 0x00, + 0x00, 0x04, 0x3b, 0x04, 0x00, 0x00, 0x04, 0x3c, + 0x04, 0x00, 0x00, 0x04, 0x3d, 0x04, 0x00, 0x00, + 0x04, 0x3e, 0x04, 0x00, 0x00, 0x04, 0x3f, 0x04, + 0x00, 0x00, 0x04, 0x40, 0x04, 0x00, 0x00, 0x04, + 0x41, 0x04, 0x00, 0x00, 0x04, 0x42, 0x04, 0x00, + 0x00, 0x04, 0x43, 0x04, 0x00, 0x00, 0x26, 0x0a, + 0x00, 0x4d, 0x44, 0x04, 0x00, 0x00, 0x04, 0x45, + 0x04, 0x00, 0x00, 0x04, 0x46, 0x04, 0x00, 0x00, + 0x04, 0x47, 0x04, 0x00, 0x00, 0x04, 0x48, 0x04, + 0x00, 0x00, 0x04, 0x49, 0x04, 0x00, 0x00, 0x04, + 0x4a, 0x04, 0x00, 0x00, 0x04, 0x4b, 0x04, 0x00, + 0x00, 0x04, 0x4c, 0x04, 0x00, 0x00, 0x04, 0x4d, + 0x04, 0x00, 0x00, 0x04, 0x4e, 0x04, 0x00, 0x00, + 0x26, 0x0a, 0x00, 0x4d, 0x4f, 0x04, 0x00, 0x00, + 0x04, 0x50, 0x04, 0x00, 0x00, 0x04, 0x51, 0x04, + 0x00, 0x00, 0x04, 0x52, 0x04, 0x00, 0x00, 0x04, + 0x53, 0x04, 0x00, 0x00, 0x04, 0x54, 0x04, 0x00, + 0x00, 0x04, 0x55, 0x04, 0x00, 0x00, 0x04, 0x56, + 0x04, 0x00, 0x00, 0x04, 0x57, 0x04, 0x00, 0x00, + 0x04, 0x58, 0x04, 0x00, 0x00, 0x04, 0x59, 0x04, + 0x00, 0x00, 0x26, 0x0a, 0x00, 0x4d, 0x5a, 0x04, + 0x00, 0x00, 0x04, 0x5b, 0x04, 0x00, 0x00, 0x04, + 0x5c, 0x04, 0x00, 0x00, 0x04, 0x5d, 0x04, 0x00, + 0x00, 0x04, 0x5e, 0x04, 0x00, 0x00, 0x04, 0x5f, + 0x04, 0x00, 0x00, 0x04, 0x60, 0x04, 0x00, 0x00, + 0x04, 0x61, 0x04, 0x00, 0x00, 0x04, 0x62, 0x04, + 0x00, 0x00, 0x04, 0x63, 0x04, 0x00, 0x00, 0x04, + 0x64, 0x04, 0x00, 0x00, 0x26, 0x0a, 0x00, 0x4d, + 0x65, 0x04, 0x00, 0x00, 0x04, 0x66, 0x04, 0x00, + 0x00, 0x04, 0x67, 0x04, 0x00, 0x00, 0x04, 0x68, + 0x04, 0x00, 0x00, 0x04, 0x69, 0x04, 0x00, 0x00, + 0x04, 0x6a, 0x04, 0x00, 0x00, 0x04, 0x6b, 0x04, + 0x00, 0x00, 0x04, 0x6c, 0x04, 0x00, 0x00, 0x04, + 0x6d, 0x04, 0x00, 0x00, 0x04, 0x6e, 0x04, 0x00, + 0x00, 0x04, 0x6f, 0x04, 0x00, 0x00, 0x26, 0x0a, + 0x00, 0x4d, 0x70, 0x04, 0x00, 0x00, 0x04, 0x71, + 0x04, 0x00, 0x00, 0x04, 0x72, 0x04, 0x00, 0x00, + 0x04, 0x73, 0x04, 0x00, 0x00, 0x04, 0x74, 0x04, + 0x00, 0x00, 0x04, 0x75, 0x04, 0x00, 0x00, 0x04, + 0x76, 0x04, 0x00, 0x00, 0x04, 0x77, 0x04, 0x00, + 0x00, 0x04, 0x78, 0x04, 0x00, 0x00, 0x04, 0x79, + 0x04, 0x00, 0x00, 0x04, 0x7a, 0x04, 0x00, 0x00, + 0x26, 0x0a, 0x00, 0x4d, 0x7b, 0x04, 0x00, 0x00, + 0x04, 0x7c, 0x04, 0x00, 0x00, 0x04, 0x7d, 0x04, + 0x00, 0x00, 0x04, 0x7e, 0x04, 0x00, 0x00, 0x04, + 0x7f, 0x04, 0x00, 0x00, 0x04, 0x80, 0x04, 0x00, + 0x00, 0x04, 0x81, 0x04, 0x00, 0x00, 0x04, 0x82, + 0x04, 0x00, 0x00, 0x04, 0x83, 0x04, 0x00, 0x00, + 0x04, 0x84, 0x04, 0x00, 0x00, 0x04, 0x85, 0x04, + 0x00, 0x00, 0x26, 0x0a, 0x00, 0x4d, 0x86, 0x04, + 0x00, 0x00, 0x04, 0x87, 0x04, 0x00, 0x00, 0x04, + 0x88, 0x04, 0x00, 0x00, 0x04, 0x89, 0x04, 0x00, + 0x00, 0x04, 0x8a, 0x04, 0x00, 0x00, 0x04, 0x8b, + 0x04, 0x00, 0x00, 0x04, 0x8c, 0x04, 0x00, 0x00, + 0x04, 0x8d, 0x04, 0x00, 0x00, 0x04, 0x8e, 0x04, + 0x00, 0x00, 0x04, 0x8f, 0x04, 0x00, 0x00, 0x04, + 0x90, 0x04, 0x00, 0x00, 0x26, 0x0a, 0x00, 0x4d, + 0x91, 0x04, 0x00, 0x00, 0xc2, 0x19, 0xbf, 0x20, + 0xed, 0xc2, 0x1b, 0xc4, 0x11, 0xea, 0x05, 0x0e, + 0xbf, 0x21, 0xed, 0x29, 0xfc, 0x06, 0x01, 0x03, + 0x00, 0x5e, 0x1c, 0x0d, 0x43, 0x06, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x04, 0x01, 0x01, 0x20, 0x02, + 0x10, 0x00, 0x01, 0x00, 0x98, 0x01, 0x00, 0x01, + 0x00, 0xa2, 0x03, 0x01, 0x01, 0x08, 0xc8, 0x0c, + 0x01, 0xc9, 0x39, 0x8d, 0x00, 0x00, 0x00, 0x42, + 0x07, 0x02, 0x00, 0x00, 0x11, 0xea, 0x04, 0x0e, + 0xbf, 0x00, 0xe4, 0x43, 0x58, 0x00, 0x00, 0x00, + 0xc4, 0xc5, 0x25, 0x02, 0x00, 0xfc, 0x06, 0x01, + 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, 0x01, 0x05, + 0x01, 0x05, 0x00, 0x00, 0x49, 0x06, 0xa0, 0x03, + 0x00, 0x01, 0x00, 0xa2, 0x03, 0x00, 0x00, 0x00, + 0xa4, 0x03, 0x00, 0x01, 0x00, 0xa6, 0x03, 0x00, + 0x02, 0x00, 0xa8, 0x03, 0x00, 0x03, 0x00, 0x98, + 0x01, 0x00, 0x01, 0x00, 0x0c, 0x01, 0xc2, 0x04, + 0xb5, 0xc9, 0xc1, 0x04, 0xe8, 0xca, 0xc5, 0xc6, + 0xa5, 0xe9, 0x39, 0xc1, 0x04, 0xc5, 0x48, 0xcc, + 0x7d, 0xeb, 0x28, 0xcb, 0x39, 0x8d, 0x00, 0x00, + 0x00, 0x42, 0x3a, 0x00, 0x00, 0x00, 0x42, 0x20, + 0x02, 0x00, 0x00, 0x43, 0xa7, 0x03, 0x00, 0x00, + 0xc4, 0xc7, 0x24, 0x02, 0x00, 0x11, 0xe9, 0x0a, + 0x0e, 0xd0, 0xc7, 0x72, 0xc4, 0xc7, 0x48, 0x16, + 0x4a, 0x0e, 0x80, 0xe9, 0xd7, 0x0e, 0x0e, 0x95, + 0x01, 0xeb, 0xc4, 0xd0, 0x28, 0xfc, 0x06, 0x01, + 0x00, 0x0d, 0x43, 0x06, 0x00, 0xa4, 0x03, 0x01, + 0x02, 0x01, 0x03, 0x00, 0x01, 0x3b, 0x03, 0xa0, + 0x03, 0x00, 0x01, 0x80, 0xa2, 0x03, 0x00, 0x00, + 0x00, 0xa4, 0x03, 0x00, 0x01, 0x80, 0x04, 0x1b, + 0x00, 0x00, 0x00, 0x38, 0x93, 0x00, 0x00, 0x00, + 0x99, 0xab, 0x11, 0xe9, 0x0e, 0x0e, 0xd0, 0x39, + 0x93, 0x00, 0x00, 0x00, 0x42, 0x05, 0x02, 0x00, + 0x00, 0x48, 0xc8, 0xb4, 0xc9, 0xc4, 0xe9, 0x0c, + 0xc4, 0x43, 0xa7, 0x03, 0x00, 0x00, 0xd0, 0x24, + 0x01, 0x00, 0x28, 0x0b, 0xbf, 0x00, 0x4e, 0x68, + 0x00, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, 0x00, + 0x28, 0xfc, 0x06, 0x0f, 0x00, 0x0d, 0x43, 0x06, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x02, 0x00, + 0x28, 0x00, 0xa0, 0x03, 0x00, 0x03, 0xa4, 0x03, + 0x01, 0x01, 0xdc, 0x11, 0xe9, 0x0c, 0x0e, 0xdd, + 0xdc, 0xe8, 0xa8, 0x11, 0xe9, 0x04, 0x0e, 0x06, + 0xe4, 0x0e, 0x0b, 0xdc, 0x11, 0xe9, 0x07, 0x0e, + 0xdc, 0xdd, 0x93, 0xe1, 0x48, 0x4d, 0x3f, 0x00, + 0x00, 0x00, 0xdc, 0x98, 0x4d, 0x67, 0x00, 0x00, + 0x00, 0x28, 0xfc, 0x06, 0x0f, 0x00, 0x0d, 0x43, + 0x06, 0x00, 0xa6, 0x03, 0x02, 0x06, 0x02, 0x06, + 0x00, 0x00, 0xde, 0x01, 0x08, 0xa0, 0x03, 0x00, + 0x01, 0x00, 0xa2, 0x03, 0x00, 0x01, 0x00, 0xa4, + 0x03, 0x00, 0x00, 0x00, 0xa6, 0x03, 0x00, 0x01, + 0x00, 0xa8, 0x03, 0x00, 0x02, 0x00, 0xaa, 0x03, + 0x00, 0x03, 0x00, 0xac, 0x03, 0x00, 0x04, 0x00, + 0xa0, 0x03, 0x05, 0x00, 0x03, 0x04, 0x1b, 0x00, + 0x00, 0x00, 0x38, 0x93, 0x00, 0x00, 0x00, 0x99, + 0xab, 0x11, 0xe9, 0x0e, 0x0e, 0xd0, 0x39, 0x93, + 0x00, 0x00, 0x00, 0x42, 0x05, 0x02, 0x00, 0x00, + 0x48, 0xcc, 0x98, 0xe9, 0x03, 0xd0, 0x28, 0xc4, + 0x43, 0xa7, 0x03, 0x00, 0x00, 0xd0, 0x24, 0x01, + 0x00, 0xcb, 0x26, 0x00, 0x00, 0xc2, 0x04, 0x6d, + 0x41, 0x00, 0x00, 0x00, 0x06, 0xd1, 0xad, 0x11, + 0xea, 0x07, 0x0e, 0xd1, 0x92, 0xd5, 0xb4, 0xa7, + 0xe9, 0x26, 0xc7, 0x43, 0x68, 0x00, 0x00, 0x00, + 0x24, 0x00, 0x00, 0xcd, 0x42, 0x67, 0x00, 0x00, + 0x00, 0x98, 0xe9, 0x14, 0xc1, 0x04, 0x43, 0x24, + 0x02, 0x00, 0x00, 0xc5, 0x42, 0x3f, 0x00, 0x00, + 0x00, 0x24, 0x01, 0x00, 0x0e, 0xeb, 0xce, 0x0e, + 0x06, 0x6e, 0x27, 0x00, 0x00, 0x00, 0x0e, 0xeb, + 0x68, 0xc2, 0x05, 0x6d, 0x17, 0x00, 0x00, 0x00, + 0x0b, 0xc1, 0x05, 0x4d, 0xb2, 0x05, 0x00, 0x00, + 0xca, 0x0e, 0x06, 0x6e, 0x0d, 0x00, 0x00, 0x00, + 0x0e, 0xeb, 0x4e, 0x6e, 0x05, 0x00, 0x00, 0x00, + 0x2f, 0x6d, 0x34, 0x00, 0x00, 0x00, 0xc5, 0x11, + 0xe9, 0x22, 0x0e, 0xc5, 0x42, 0x67, 0x00, 0x00, + 0x00, 0x98, 0x11, 0xe9, 0x17, 0x0e, 0xc7, 0x42, + 0x06, 0x00, 0x00, 0x00, 0xcc, 0x11, 0xe9, 0x0c, + 0x0e, 0xc4, 0x43, 0xa7, 0x03, 0x00, 0x00, 0xc7, + 0x24, 0x01, 0x00, 0x0e, 0x0e, 0x06, 0x6e, 0x0d, + 0x00, 0x00, 0x00, 0x0e, 0xeb, 0x12, 0x6e, 0x05, + 0x00, 0x00, 0x00, 0x2f, 0xc6, 0xe9, 0x08, 0xc6, + 0x42, 0xb2, 0x05, 0x00, 0x00, 0x2f, 0x6f, 0x6f, + 0xc1, 0x04, 0x28, 0xfc, 0x06, 0x0f, 0x00, 0x0d, + 0x43, 0x06, 0x00, 0xa8, 0x03, 0x00, 0x03, 0x00, + 0x05, 0x01, 0x00, 0x24, 0x03, 0xa0, 0x03, 0x00, + 0x00, 0x00, 0xa2, 0x03, 0x00, 0x01, 0x00, 0x98, + 0x01, 0x00, 0x01, 0x00, 0xa6, 0x03, 0x03, 0x01, + 0x0c, 0x01, 0xca, 0x26, 0x00, 0x00, 0xc8, 0xb4, + 0xc9, 0xc5, 0xc6, 0xe8, 0xa5, 0xe9, 0x14, 0xc4, + 0x43, 0x5a, 0x00, 0x00, 0x00, 0xdc, 0xc6, 0xc5, + 0x48, 0xee, 0x24, 0x01, 0x00, 0xc8, 0x95, 0x01, + 0xeb, 0xe8, 0xc4, 0x28, 0xfc, 0x06, 0x0f, 0x00, + 0x0d, 0x43, 0x06, 0x00, 0xac, 0x03, 0x01, 0x00, + 0x01, 0x04, 0x00, 0x00, 0x72, 0x01, 0xa0, 0x03, + 0x00, 0x01, 0x00, 0x07, 0xd0, 0xab, 0xe9, 0x18, + 0x39, 0xbf, 0x00, 0x00, 0x00, 0x11, 0x04, 0xb3, + 0x05, 0x00, 0x00, 0xd0, 0x9f, 0x04, 0xb4, 0x05, + 0x00, 0x00, 0x9f, 0x21, 0x01, 0x00, 0x2f, 0x04, + 0x46, 0x00, 0x00, 0x00, 0xd0, 0x99, 0xab, 0xe9, + 0x0c, 0x39, 0x92, 0x00, 0x00, 0x00, 0x11, 0xd0, + 0x21, 0x01, 0x00, 0x28, 0x04, 0x45, 0x00, 0x00, + 0x00, 0xd0, 0x99, 0xab, 0xe9, 0x0c, 0x39, 0x90, + 0x00, 0x00, 0x00, 0x11, 0xd0, 0x21, 0x01, 0x00, + 0x28, 0x04, 0x47, 0x00, 0x00, 0x00, 0xd0, 0x99, + 0xab, 0xe9, 0x0c, 0x39, 0x91, 0x00, 0x00, 0x00, + 0x11, 0xd0, 0x21, 0x01, 0x00, 0x28, 0x04, 0x49, + 0x00, 0x00, 0x00, 0xd0, 0x99, 0xab, 0xe9, 0x0c, + 0x39, 0x8d, 0x00, 0x00, 0x00, 0x11, 0xd0, 0x21, + 0x01, 0x00, 0x28, 0xd0, 0x28, 0xfc, 0x06, 0x0f, + 0x00, 0x07, 0x2a, 0x2d, 0x75, 0x28, 0x3f, 0x3a, + 0x2d, 0x5b, 0x30, 0x2d, 0x39, 0x61, 0x2d, 0x7a, + 0x5d, 0x7b, 0x32, 0x2c, 0x38, 0x7d, 0x29, 0x2b, + 0x07, 0x8c, 0x01, 0x03, 0x01, 0x00, 0x3f, 0x00, + 0x00, 0x00, 0x08, 0x06, 0x00, 0x00, 0x00, 0x04, + 0x07, 0xf5, 0xff, 0xff, 0xff, 0x0b, 0x00, 0x01, + 0x2d, 0x00, 0x01, 0x55, 0x00, 0x01, 0x2d, 0x00, + 0x1c, 0x10, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x15, 0x03, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x41, 0x00, 0x5a, 0x00, 0x61, 0x00, 0x7a, 0x00, + 0x0a, 0x08, 0xd7, 0xff, 0xff, 0xff, 0x0c, 0x00, + 0x0a, 0x0d, 0x43, 0x06, 0x00, 0xb2, 0x03, 0x01, + 0x00, 0x01, 0x04, 0x01, 0x00, 0x0b, 0x01, 0xa0, + 0x03, 0x00, 0x01, 0x00, 0xb0, 0x03, 0x08, 0x01, + 0xd0, 0x43, 0xc9, 0x04, 0x00, 0x00, 0xdc, 0xc0, + 0x25, 0x02, 0x00, 0xfc, 0x06, 0x0f, 0x00, 0x0d, + 0x43, 0x06, 0x00, 0xb4, 0x03, 0x02, 0x08, 0x02, + 0x05, 0x00, 0x00, 0xf3, 0x01, 0x0a, 0xa0, 0x03, + 0x00, 0x01, 0x00, 0xa2, 0x03, 0x00, 0x01, 0x00, + 0xa4, 0x03, 0x00, 0x00, 0x00, 0xa6, 0x03, 0x00, + 0x01, 0x00, 0xa8, 0x03, 0x00, 0x02, 0x00, 0xaa, + 0x03, 0x00, 0x03, 0x00, 0xac, 0x03, 0x00, 0x04, + 0x00, 0xae, 0x03, 0x00, 0x05, 0x00, 0xb0, 0x03, + 0x00, 0x06, 0x00, 0xb2, 0x03, 0x00, 0x07, 0x00, + 0xb6, 0xd1, 0xe8, 0xae, 0xe9, 0x18, 0x39, 0xbf, + 0x00, 0x00, 0x00, 0x11, 0x04, 0xb5, 0x05, 0x00, + 0x00, 0xd1, 0x9f, 0x04, 0xb6, 0x05, 0x00, 0x00, + 0x9f, 0x21, 0x01, 0x00, 0x2f, 0xd1, 0xe8, 0xc8, + 0x04, 0x31, 0x02, 0x00, 0x00, 0xd1, 0x9f, 0x04, + 0x31, 0x02, 0x00, 0x00, 0x9f, 0xc9, 0x39, 0x91, + 0x00, 0x00, 0x00, 0x42, 0x3a, 0x00, 0x00, 0x00, + 0x42, 0x21, 0x02, 0x00, 0x00, 0x43, 0xa7, 0x03, + 0x00, 0x00, 0xd0, 0xc5, 0x24, 0x02, 0x00, 0xca, + 0xb3, 0xc6, 0xae, 0xe9, 0x77, 0xc6, 0xb8, 0x9f, + 0xcf, 0xc2, 0x04, 0xc7, 0xc2, 0x05, 0xb5, 0x98, + 0xc2, 0x06, 0xc1, 0x06, 0x98, 0xe9, 0x59, 0x39, + 0x91, 0x00, 0x00, 0x00, 0x42, 0x3a, 0x00, 0x00, + 0x00, 0x42, 0x21, 0x02, 0x00, 0x00, 0x43, 0xa7, + 0x03, 0x00, 0x00, 0xd0, 0x04, 0x31, 0x02, 0x00, + 0x00, 0xc1, 0x05, 0x24, 0x03, 0x00, 0xc2, 0x07, + 0xb6, 0xb3, 0xc1, 0x07, 0xad, 0xe9, 0x07, 0xc4, + 0xc1, 0x05, 0xa0, 0xeb, 0x06, 0xc1, 0x07, 0xc1, + 0x05, 0xa0, 0xad, 0xe9, 0x07, 0xb4, 0x98, 0xc3, + 0x06, 0xeb, 0x1a, 0xb3, 0xc1, 0x07, 0xad, 0xe9, + 0x0a, 0xc4, 0xc2, 0x04, 0xb4, 0x98, 0xc3, 0x06, + 0xeb, 0x0b, 0xc1, 0x07, 0xc2, 0x04, 0xc1, 0x07, + 0xb5, 0x9f, 0xc3, 0x05, 0x0e, 0xeb, 0xa4, 0xd0, + 0x43, 0x23, 0x02, 0x00, 0x00, 0xc7, 0xc1, 0x04, + 0x25, 0x02, 0x00, 0x04, 0x31, 0x02, 0x00, 0x00, + 0xd1, 0x9f, 0xc9, 0xb3, 0x39, 0x91, 0x00, 0x00, + 0x00, 0x42, 0x3a, 0x00, 0x00, 0x00, 0x42, 0x21, + 0x02, 0x00, 0x00, 0x43, 0xa7, 0x03, 0x00, 0x00, + 0xd0, 0xc5, 0x24, 0x02, 0x00, 0xce, 0xae, 0xe9, + 0x0a, 0xc6, 0xb7, 0x9f, 0xc4, 0xad, 0xe9, 0x03, + 0xc0, 0x28, 0x29, 0xfc, 0x06, 0x0f, 0x00, 0x0d, + 0x43, 0x06, 0x00, 0xfe, 0x06, 0x02, 0x02, 0x02, + 0x05, 0x00, 0x00, 0x55, 0x04, 0xa0, 0x03, 0x00, + 0x01, 0x00, 0xa2, 0x03, 0x00, 0x01, 0x00, 0xa4, + 0x03, 0x00, 0x00, 0x00, 0xa6, 0x03, 0x00, 0x01, + 0x00, 0xd1, 0xc8, 0xd0, 0x43, 0xb7, 0x05, 0x00, + 0x00, 0xc4, 0x24, 0x01, 0x00, 0xe9, 0x03, 0xc4, + 0x28, 0xc4, 0x43, 0xe3, 0x04, 0x00, 0x00, 0x04, + 0x31, 0x02, 0x00, 0x00, 0x24, 0x01, 0x00, 0xc9, + 0xb3, 0xc5, 0xad, 0xe9, 0x02, 0x29, 0xc5, 0xb6, + 0xa8, 0x11, 0xe9, 0x1c, 0x0e, 0x04, 0x31, 0x02, + 0x00, 0x00, 0xc4, 0x43, 0xd8, 0x04, 0x00, 0x00, + 0xc5, 0xb6, 0xa0, 0x24, 0x01, 0x00, 0xad, 0x11, + 0xe9, 0x06, 0x0e, 0xc5, 0xb6, 0xa0, 0xcd, 0x0e, + 0xc4, 0x43, 0x23, 0x02, 0x00, 0x00, 0xb4, 0xc5, + 0x24, 0x02, 0x00, 0xc8, 0xeb, 0xae, 0xfc, 0x06, + 0x0f, 0x00, 0x0d, 0x43, 0x06, 0x00, 0x80, 0x07, + 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x03, 0x01, + 0xa0, 0x03, 0x00, 0x01, 0x00, 0xae, 0x03, 0x07, + 0x01, 0xd0, 0xe0, 0x29, 0xfc, 0x06, 0x0f, 0x00, + 0x0d, 0x43, 0x06, 0x00, 0x82, 0x07, 0x00, 0x00, + 0x00, 0x01, 0x01, 0x00, 0x02, 0x00, 0xae, 0x03, + 0x07, 0x01, 0xdc, 0x28, 0xfc, 0x06, 0x0f, 0x00, + 0x0d, 0x43, 0x06, 0x00, 0x84, 0x07, 0x01, 0x0d, + 0x01, 0x06, 0x05, 0x01, 0x9b, 0x02, 0x0e, 0xa0, + 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, 0x00, 0x00, + 0x00, 0xa6, 0x03, 0x00, 0x01, 0x00, 0xa8, 0x03, + 0x00, 0x02, 0x00, 0xaa, 0x03, 0x00, 0x03, 0x00, + 0xac, 0x03, 0x00, 0x04, 0x00, 0xb4, 0x03, 0x00, + 0x05, 0x00, 0x80, 0x07, 0x00, 0x06, 0x00, 0x82, + 0x07, 0x00, 0x07, 0x00, 0x84, 0x07, 0x00, 0x08, + 0x00, 0x86, 0x07, 0x00, 0x09, 0x00, 0x88, 0x07, + 0x00, 0x0a, 0x00, 0xa0, 0x03, 0x09, 0x00, 0x03, + 0x8a, 0x07, 0x00, 0x0b, 0x00, 0xae, 0x03, 0x07, + 0x01, 0xa4, 0x03, 0x02, 0x01, 0xb2, 0x03, 0x09, + 0x01, 0xfe, 0x06, 0x0b, 0x01, 0xb0, 0x03, 0x08, + 0x01, 0xd0, 0x42, 0xb1, 0x05, 0x00, 0x00, 0xca, + 0xd0, 0x42, 0xb8, 0x05, 0x00, 0x00, 0xcb, 0x0b, + 0xc2, 0x04, 0x6d, 0x8d, 0x00, 0x00, 0x00, 0xdd, + 0xc7, 0xee, 0xc3, 0x05, 0x43, 0x68, 0x00, 0x00, + 0x00, 0x24, 0x00, 0x00, 0xc2, 0x06, 0xc1, 0x06, + 0x42, 0x67, 0x00, 0x00, 0x00, 0x98, 0xe9, 0x67, + 0xc1, 0x06, 0x42, 0x3f, 0x00, 0x00, 0x00, 0xc2, + 0x07, 0xde, 0xc1, 0x07, 0xee, 0xc2, 0x08, 0xdf, + 0xc6, 0xc1, 0x08, 0xef, 0xc2, 0x09, 0x06, 0xc1, + 0x09, 0xae, 0xe9, 0x3d, 0xc1, 0x04, 0xc1, 0x09, + 0x44, 0x38, 0x05, 0x00, 0x00, 0xc1, 0x07, 0xc1, + 0x08, 0xae, 0xe9, 0x24, 0xc1, 0x07, 0x43, 0xdc, + 0x04, 0x00, 0x00, 0x5f, 0x04, 0x00, 0x24, 0x01, + 0x00, 0xc2, 0x0a, 0xc1, 0x04, 0x07, 0xc1, 0x0a, + 0xab, 0xe9, 0x04, 0xc0, 0xeb, 0x05, 0xc1, 0x0a, + 0xb4, 0x48, 0x44, 0xb9, 0x05, 0x00, 0x00, 0xc1, + 0x04, 0x0f, 0x6e, 0x3d, 0x00, 0x00, 0x00, 0x28, + 0xc1, 0x05, 0x43, 0x68, 0x00, 0x00, 0x00, 0x24, + 0x00, 0x00, 0xc2, 0x06, 0xeb, 0x91, 0x0e, 0x06, + 0x6e, 0x27, 0x00, 0x00, 0x00, 0x0e, 0xeb, 0x6c, + 0xc2, 0x0b, 0x6d, 0x17, 0x00, 0x00, 0x00, 0x0b, + 0xc1, 0x0b, 0x4d, 0xb2, 0x05, 0x00, 0x00, 0xc8, + 0x0e, 0x06, 0x6e, 0x0d, 0x00, 0x00, 0x00, 0x0e, + 0xeb, 0x52, 0x6e, 0x05, 0x00, 0x00, 0x00, 0x2f, + 0x6d, 0x38, 0x00, 0x00, 0x00, 0xc1, 0x06, 0x11, + 0xe9, 0x25, 0x0e, 0xc1, 0x06, 0x42, 0x67, 0x00, + 0x00, 0x00, 0x98, 0x11, 0xe9, 0x19, 0x0e, 0xc1, + 0x05, 0x42, 0x06, 0x00, 0x00, 0x00, 0xcd, 0x11, + 0xe9, 0x0d, 0x0e, 0xc5, 0x43, 0xa7, 0x03, 0x00, + 0x00, 0xc1, 0x05, 0x24, 0x01, 0x00, 0x0e, 0x0e, + 0x06, 0x6e, 0x0d, 0x00, 0x00, 0x00, 0x0e, 0xeb, + 0x12, 0x6e, 0x05, 0x00, 0x00, 0x00, 0x2f, 0xc4, + 0xe9, 0x08, 0xc4, 0x42, 0xb2, 0x05, 0x00, 0x00, + 0x2f, 0x6f, 0x6f, 0xbf, 0x00, 0xed, 0xc2, 0x0c, + 0xc1, 0x04, 0xc1, 0x0c, 0x44, 0x38, 0x05, 0x00, + 0x00, 0xc1, 0x04, 0x28, 0xfc, 0x06, 0x0f, 0x00, + 0x0d, 0x43, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x03, 0x01, 0x00, 0x16, 0x00, 0xae, 0x03, 0x00, + 0x00, 0x07, 0xdc, 0xab, 0xe9, 0x10, 0x39, 0xbd, + 0x00, 0x00, 0x00, 0x11, 0x04, 0xba, 0x05, 0x00, + 0x00, 0x21, 0x01, 0x00, 0x2f, 0xdc, 0x28, 0xfc, + 0x06, 0x0f, 0x00, 0x0d, 0x43, 0x06, 0x00, 0x86, + 0x07, 0x01, 0x00, 0x01, 0x04, 0x00, 0x00, 0x1f, + 0x01, 0xa0, 0x03, 0x00, 0x01, 0x00, 0x04, 0xbb, + 0x05, 0x00, 0x00, 0x39, 0x8d, 0x00, 0x00, 0x00, + 0x42, 0x3a, 0x00, 0x00, 0x00, 0x42, 0x36, 0x00, + 0x00, 0x00, 0x43, 0xa7, 0x03, 0x00, 0x00, 0xd0, + 0x24, 0x01, 0x00, 0xad, 0x28, 0xfc, 0x06, 0x0f, + 0x00, 0x0d, 0x43, 0x06, 0x00, 0x88, 0x07, 0x02, + 0x00, 0x02, 0x04, 0x00, 0x01, 0x5f, 0x02, 0xa0, + 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, 0x00, 0x01, + 0x00, 0xd0, 0x99, 0xd1, 0x99, 0xab, 0x11, 0xe9, + 0x57, 0x0e, 0x04, 0x45, 0x00, 0x00, 0x00, 0xd0, + 0x99, 0xab, 0xe9, 0x47, 0x39, 0xd4, 0x04, 0x00, + 0x00, 0xd0, 0xee, 0x98, 0x11, 0xea, 0x0a, 0x0e, + 0x39, 0xd4, 0x04, 0x00, 0x00, 0xd1, 0xee, 0x98, + 0x98, 0x11, 0xea, 0x34, 0x0e, 0x39, 0x8d, 0x00, + 0x00, 0x00, 0x43, 0x3c, 0x01, 0x00, 0x00, 0xd0, + 0xb4, 0x24, 0x02, 0x00, 0x98, 0x11, 0xea, 0x13, + 0x0e, 0x39, 0x8d, 0x00, 0x00, 0x00, 0x43, 0x3c, + 0x01, 0x00, 0x00, 0xd1, 0xb4, 0x8e, 0x24, 0x02, + 0x00, 0x98, 0x11, 0xe9, 0x0b, 0x0e, 0xd0, 0xd1, + 0xad, 0x28, 0xbf, 0x00, 0xd0, 0xd1, 0xef, 0x28, + 0xfc, 0x06, 0x0f, 0x00, 0x0d, 0x43, 0x06, 0x00, + 0x00, 0x02, 0x00, 0x02, 0x03, 0x00, 0x00, 0x72, + 0x02, 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, + 0x00, 0x01, 0x00, 0x04, 0x45, 0x00, 0x00, 0x00, + 0xd0, 0x99, 0xab, 0xe9, 0x10, 0x39, 0xbf, 0x00, + 0x00, 0x00, 0x11, 0x04, 0xbc, 0x05, 0x00, 0x00, + 0x21, 0x01, 0x00, 0x2f, 0xd0, 0x99, 0xd1, 0x99, + 0xac, 0xe9, 0x10, 0x39, 0xbf, 0x00, 0x00, 0x00, + 0x11, 0x04, 0xbd, 0x05, 0x00, 0x00, 0x21, 0x01, + 0x00, 0x2f, 0x07, 0xd0, 0xab, 0x11, 0xea, 0x3d, + 0x0e, 0x04, 0x47, 0x00, 0x00, 0x00, 0xd0, 0x99, + 0xab, 0x11, 0xea, 0x0a, 0x0e, 0x04, 0x46, 0x00, + 0x00, 0x00, 0xd0, 0x99, 0xab, 0xe9, 0x05, 0xd0, + 0xd1, 0xad, 0x28, 0x04, 0x49, 0x00, 0x00, 0x00, + 0xd0, 0x99, 0xab, 0xe9, 0x15, 0xd0, 0x43, 0x38, + 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0xd1, 0x43, + 0x38, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0xad, + 0x28, 0xd0, 0xd1, 0xad, 0x28, 0xfc, 0x06, 0x0f, + 0x00, 0x0d, 0x43, 0x06, 0x00, 0x8a, 0x07, 0x05, + 0x14, 0x05, 0x06, 0x06, 0x01, 0x9d, 0x06, 0x19, + 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, 0x00, + 0x01, 0x00, 0xa6, 0x03, 0x00, 0x01, 0x00, 0xa8, + 0x03, 0x00, 0x01, 0x00, 0xaa, 0x03, 0x00, 0x01, + 0x00, 0xac, 0x03, 0x00, 0x00, 0x00, 0xae, 0x03, + 0x00, 0x01, 0x00, 0xb0, 0x03, 0x00, 0x02, 0x00, + 0xb2, 0x03, 0x00, 0x03, 0x00, 0xfe, 0x06, 0x00, + 0x04, 0x00, 0x80, 0x07, 0x00, 0x05, 0x00, 0x82, + 0x07, 0x00, 0x06, 0x00, 0x8a, 0x07, 0x00, 0x07, + 0x00, 0x8c, 0x07, 0x00, 0x08, 0x00, 0x8e, 0x07, + 0x00, 0x09, 0x00, 0x90, 0x07, 0x00, 0x0a, 0x00, + 0x94, 0x07, 0x00, 0x0b, 0x00, 0x96, 0x07, 0x00, + 0x0c, 0x00, 0x98, 0x07, 0x00, 0x0d, 0x00, 0x9a, + 0x07, 0x00, 0x0e, 0x00, 0x9c, 0x07, 0x00, 0x0f, + 0x00, 0xa0, 0x03, 0x0d, 0x00, 0x03, 0x9e, 0x07, + 0x00, 0x10, 0x00, 0xa0, 0x07, 0x00, 0x12, 0x00, + 0xa2, 0x07, 0x00, 0x13, 0x00, 0x84, 0x07, 0x0e, + 0x01, 0x92, 0x07, 0x15, 0x01, 0xa4, 0x03, 0x02, + 0x01, 0x86, 0x07, 0x0f, 0x01, 0xb4, 0x03, 0x0a, + 0x01, 0x88, 0x07, 0x10, 0x01, 0x04, 0xea, 0x04, + 0x00, 0x00, 0xd2, 0x42, 0xf4, 0x04, 0x00, 0x00, + 0xad, 0xe9, 0x12, 0xdc, 0x0b, 0xd0, 0x4d, 0xb1, + 0x05, 0x00, 0x00, 0xd1, 0x4d, 0xb8, 0x05, 0x00, + 0x00, 0xee, 0xeb, 0x11, 0xbf, 0x00, 0x0b, 0xd0, + 0x4d, 0xb1, 0x05, 0x00, 0x00, 0xd1, 0x4d, 0xb8, + 0x05, 0x00, 0x00, 0xee, 0xce, 0x42, 0x38, 0x05, + 0x00, 0x00, 0xcb, 0x0b, 0xc3, 0x04, 0xc7, 0x44, + 0xbe, 0x05, 0x00, 0x00, 0xdd, 0x42, 0xb0, 0x05, + 0x00, 0x00, 0x43, 0x20, 0x02, 0x00, 0x00, 0xc7, + 0x24, 0x01, 0x00, 0x11, 0xea, 0x15, 0x0e, 0x39, + 0xec, 0x04, 0x00, 0x00, 0x43, 0xed, 0x04, 0x00, + 0x00, 0x04, 0xbf, 0x05, 0x00, 0x00, 0xc7, 0x24, + 0x02, 0x00, 0x0e, 0xdd, 0x42, 0xb0, 0x05, 0x00, + 0x00, 0x5d, 0x04, 0x00, 0x04, 0xf0, 0x04, 0x00, + 0x00, 0xc2, 0x06, 0x6d, 0xc4, 0x01, 0x00, 0x00, + 0xde, 0xd3, 0xee, 0xc3, 0x07, 0x43, 0x68, 0x00, + 0x00, 0x00, 0x24, 0x00, 0x00, 0xc2, 0x08, 0xc1, + 0x08, 0x42, 0x67, 0x00, 0x00, 0x00, 0x98, 0x6a, + 0x9e, 0x01, 0x00, 0x00, 0xc1, 0x08, 0x42, 0x3f, + 0x00, 0x00, 0x00, 0xc2, 0x09, 0x5c, 0x04, 0x00, + 0xc7, 0x48, 0xc2, 0x0a, 0xdf, 0xc1, 0x0a, 0xee, + 0x98, 0xe9, 0x18, 0x39, 0xbf, 0x00, 0x00, 0x00, + 0x11, 0x04, 0xc0, 0x05, 0x00, 0x00, 0xc7, 0x9f, + 0x04, 0xc1, 0x05, 0x00, 0x00, 0x9f, 0x21, 0x01, + 0x00, 0x2f, 0xc1, 0x0a, 0xc1, 0x09, 0x48, 0xc3, + 0x0b, 0xc2, 0x05, 0x39, 0x8e, 0x00, 0x00, 0x00, + 0x43, 0xba, 0x04, 0x00, 0x00, 0xc1, 0x05, 0x24, + 0x01, 0x00, 0x98, 0xe9, 0x28, 0xdf, 0xc1, 0x05, + 0xee, 0x98, 0xe9, 0x21, 0x39, 0xbf, 0x00, 0x00, + 0x00, 0x11, 0x04, 0xc2, 0x05, 0x00, 0x00, 0xc1, + 0x09, 0x9f, 0x04, 0xc3, 0x05, 0x00, 0x00, 0x9f, + 0xc7, 0x9f, 0x04, 0xc4, 0x05, 0x00, 0x00, 0x9f, + 0x21, 0x01, 0x00, 0x2f, 0xc1, 0x0b, 0xb4, 0x48, + 0xc2, 0x0c, 0x04, 0x47, 0x00, 0x00, 0x00, 0xc1, + 0x0c, 0x99, 0xac, 0xe9, 0x30, 0x07, 0xc1, 0x0c, + 0xae, 0xe9, 0x2a, 0x39, 0xbf, 0x00, 0x00, 0x00, + 0x11, 0x04, 0xc5, 0x05, 0x00, 0x00, 0xc1, 0x0c, + 0x9f, 0x04, 0xc6, 0x05, 0x00, 0x00, 0x9f, 0xc1, + 0x09, 0x9f, 0x04, 0xc3, 0x05, 0x00, 0x00, 0x9f, + 0xc7, 0x9f, 0x04, 0xc7, 0x05, 0x00, 0x00, 0x9f, + 0x21, 0x01, 0x00, 0x2f, 0xc0, 0xc2, 0x0d, 0x04, + 0xb9, 0x05, 0x00, 0x00, 0xc6, 0xaa, 0xe9, 0x5f, + 0x5f, 0x04, 0x00, 0xc6, 0x42, 0xb9, 0x05, 0x00, + 0x00, 0xc1, 0x09, 0xef, 0xc2, 0x0e, 0x06, 0xc1, + 0x0e, 0xae, 0x11, 0xe9, 0x49, 0x0e, 0xc0, 0xc1, + 0x0e, 0xae, 0xe9, 0x28, 0xc1, 0x0b, 0x43, 0xb7, + 0x05, 0x00, 0x00, 0xc1, 0x0e, 0x24, 0x01, 0x00, + 0x11, 0xe9, 0x33, 0x0e, 0x04, 0x31, 0x02, 0x00, + 0x00, 0xc1, 0x09, 0x9f, 0x04, 0x31, 0x02, 0x00, + 0x00, 0x9f, 0xc1, 0x0e, 0xc3, 0x0c, 0x9f, 0xc3, + 0x0d, 0xeb, 0x1b, 0xc1, 0x0b, 0x43, 0xb7, 0x05, + 0x00, 0x00, 0x04, 0x03, 0x00, 0x00, 0x00, 0x24, + 0x01, 0x00, 0x11, 0xe9, 0x09, 0x0e, 0x04, 0x03, + 0x00, 0x00, 0x00, 0xc3, 0x0c, 0x0e, 0x04, 0xb6, + 0x04, 0x00, 0x00, 0xd2, 0xaa, 0xe9, 0x5e, 0xd2, + 0x42, 0xb6, 0x04, 0x00, 0x00, 0xc2, 0x0f, 0x04, + 0x47, 0x00, 0x00, 0x00, 0xc1, 0x0f, 0x99, 0xac, + 0xe9, 0x1f, 0x07, 0xc1, 0x0f, 0xac, 0xe9, 0x19, + 0x39, 0xbf, 0x00, 0x00, 0x00, 0x11, 0x04, 0xc8, + 0x05, 0x00, 0x00, 0xc1, 0x0f, 0x9f, 0x04, 0xc9, + 0x05, 0x00, 0x00, 0x9f, 0x21, 0x01, 0x00, 0x2f, + 0x06, 0xc1, 0x0f, 0xae, 0x11, 0xe9, 0x25, 0x0e, + 0xc1, 0x0b, 0x43, 0xb7, 0x05, 0x00, 0x00, 0xc1, + 0x0f, 0x24, 0x01, 0x00, 0x11, 0xe9, 0x15, 0x0e, + 0x5f, 0x05, 0x00, 0xc1, 0x0f, 0xc1, 0x0c, 0xef, + 0x11, 0xea, 0x09, 0x0e, 0xc1, 0x0f, 0xc2, 0x0c, + 0xc0, 0xc3, 0x0d, 0x0e, 0xc1, 0x04, 0xc1, 0x09, + 0xc1, 0x0c, 0x4a, 0xc1, 0x0d, 0x96, 0x06, 0xc1, + 0x07, 0x43, 0x68, 0x00, 0x00, 0x00, 0x24, 0x00, + 0x00, 0xc2, 0x08, 0xec, 0x5b, 0xfe, 0x0e, 0x06, + 0x6e, 0x27, 0x00, 0x00, 0x00, 0x0e, 0xeb, 0x6c, + 0xc2, 0x10, 0x6d, 0x17, 0x00, 0x00, 0x00, 0x0b, + 0xc1, 0x10, 0x4d, 0xb2, 0x05, 0x00, 0x00, 0xc8, + 0x0e, 0x06, 0x6e, 0x0d, 0x00, 0x00, 0x00, 0x0e, + 0xeb, 0x52, 0x6e, 0x05, 0x00, 0x00, 0x00, 0x2f, + 0x6d, 0x38, 0x00, 0x00, 0x00, 0xc1, 0x08, 0x11, + 0xe9, 0x25, 0x0e, 0xc1, 0x08, 0x42, 0x67, 0x00, + 0x00, 0x00, 0x98, 0x11, 0xe9, 0x19, 0x0e, 0xc1, + 0x07, 0x42, 0x06, 0x00, 0x00, 0x00, 0xcd, 0x11, + 0xe9, 0x0d, 0x0e, 0xc5, 0x43, 0xa7, 0x03, 0x00, + 0x00, 0xc1, 0x07, 0x24, 0x01, 0x00, 0x0e, 0x0e, + 0x06, 0x6e, 0x0d, 0x00, 0x00, 0x00, 0x0e, 0xeb, + 0x12, 0x6e, 0x05, 0x00, 0x00, 0x00, 0x2f, 0xc4, + 0xe9, 0x08, 0xc4, 0x42, 0xb2, 0x05, 0x00, 0x00, + 0x2f, 0x6f, 0x6f, 0xc1, 0x06, 0xe8, 0xb6, 0xa7, + 0xe9, 0x66, 0x39, 0x91, 0x00, 0x00, 0x00, 0x42, + 0x3a, 0x00, 0x00, 0x00, 0x42, 0x21, 0x02, 0x00, + 0x00, 0x43, 0xa7, 0x03, 0x00, 0x00, 0xc7, 0x04, + 0xf3, 0x04, 0x00, 0x00, 0x24, 0x02, 0x00, 0xc2, + 0x11, 0xb3, 0xc1, 0x11, 0xad, 0xe9, 0x0a, 0xc0, + 0xc7, 0x9f, 0xc1, 0x06, 0x9f, 0xcb, 0xeb, 0x27, + 0xc7, 0x43, 0x23, 0x02, 0x00, 0x00, 0xb4, 0xc1, + 0x11, 0x24, 0x02, 0x00, 0xc2, 0x12, 0xc7, 0x43, + 0x23, 0x02, 0x00, 0x00, 0xc1, 0x11, 0x24, 0x01, + 0x00, 0xc2, 0x13, 0xc0, 0xc1, 0x12, 0x9f, 0xc1, + 0x06, 0x9f, 0xc1, 0x13, 0x9f, 0xcb, 0x39, 0xe1, + 0x00, 0x00, 0x00, 0x43, 0x86, 0x03, 0x00, 0x00, + 0xc7, 0x24, 0x01, 0x00, 0xb4, 0x48, 0xcb, 0xc1, + 0x04, 0xc7, 0x44, 0x38, 0x05, 0x00, 0x00, 0xc1, + 0x04, 0x28, 0xfc, 0x06, 0x0f, 0x00, 0x0d, 0x43, + 0x06, 0x00, 0x00, 0x01, 0x00, 0x01, 0x02, 0x01, + 0x00, 0x05, 0x01, 0xa0, 0x03, 0x00, 0x01, 0x00, + 0x84, 0x07, 0x00, 0x00, 0xdc, 0xd0, 0x23, 0x01, + 0x00, 0xfc, 0x06, 0x0f, 0x00, 0x0d, 0x43, 0x06, + 0x00, 0x8c, 0x07, 0x02, 0x07, 0x02, 0x06, 0x03, + 0x00, 0xc5, 0x01, 0x09, 0xa0, 0x03, 0x00, 0x01, + 0x00, 0xa2, 0x03, 0x00, 0x01, 0x00, 0xa6, 0x03, + 0x00, 0x00, 0x00, 0xa8, 0x03, 0x00, 0x01, 0x00, + 0xaa, 0x03, 0x00, 0x02, 0x00, 0xac, 0x03, 0x00, + 0x03, 0x00, 0xae, 0x03, 0x00, 0x04, 0x00, 0xb0, + 0x03, 0x00, 0x05, 0x00, 0xa0, 0x03, 0x05, 0x00, + 0x03, 0xa4, 0x03, 0x02, 0x01, 0xfe, 0x06, 0x0b, + 0x01, 0xb2, 0x03, 0x09, 0x01, 0x26, 0x00, 0x00, + 0xca, 0x6d, 0x55, 0x00, 0x00, 0x00, 0xdc, 0xd1, + 0xee, 0xcf, 0x43, 0x68, 0x00, 0x00, 0x00, 0x24, + 0x00, 0x00, 0xc2, 0x04, 0xc1, 0x04, 0x42, 0x67, + 0x00, 0x00, 0x00, 0x98, 0xe9, 0x30, 0xc1, 0x04, + 0x42, 0x3f, 0x00, 0x00, 0x00, 0xc2, 0x05, 0x06, + 0xdd, 0xd0, 0xde, 0xc1, 0x05, 0xee, 0xef, 0xae, + 0x11, 0xe9, 0x0d, 0x0e, 0xc6, 0x43, 0x24, 0x02, + 0x00, 0x00, 0xc1, 0x05, 0x24, 0x01, 0x00, 0x0e, + 0xc7, 0x43, 0x68, 0x00, 0x00, 0x00, 0x24, 0x00, + 0x00, 0xc2, 0x04, 0xeb, 0xc8, 0x0e, 0x06, 0x6e, + 0x27, 0x00, 0x00, 0x00, 0x0e, 0xeb, 0x6a, 0xc2, + 0x06, 0x6d, 0x17, 0x00, 0x00, 0x00, 0x0b, 0xc1, + 0x06, 0x4d, 0xb2, 0x05, 0x00, 0x00, 0xc8, 0x0e, + 0x06, 0x6e, 0x0d, 0x00, 0x00, 0x00, 0x0e, 0xeb, + 0x50, 0x6e, 0x05, 0x00, 0x00, 0x00, 0x2f, 0x6d, + 0x36, 0x00, 0x00, 0x00, 0xc1, 0x04, 0x11, 0xe9, + 0x23, 0x0e, 0xc1, 0x04, 0x42, 0x67, 0x00, 0x00, + 0x00, 0x98, 0x11, 0xe9, 0x17, 0x0e, 0xc7, 0x42, + 0x06, 0x00, 0x00, 0x00, 0xcd, 0x11, 0xe9, 0x0c, + 0x0e, 0xc5, 0x43, 0xa7, 0x03, 0x00, 0x00, 0xc7, + 0x24, 0x01, 0x00, 0x0e, 0x0e, 0x06, 0x6e, 0x0d, + 0x00, 0x00, 0x00, 0x0e, 0xeb, 0x12, 0x6e, 0x05, + 0x00, 0x00, 0x00, 0x2f, 0xc4, 0xe9, 0x08, 0xc4, + 0x42, 0xb2, 0x05, 0x00, 0x00, 0x2f, 0x6f, 0x6f, + 0xc6, 0x28, 0xfc, 0x06, 0x0f, 0x00, 0x0d, 0x43, + 0x06, 0x00, 0x8e, 0x07, 0x03, 0x00, 0x03, 0x03, + 0x02, 0x01, 0x3b, 0x03, 0xa0, 0x03, 0x00, 0x01, + 0x00, 0xa2, 0x03, 0x00, 0x01, 0x00, 0xa4, 0x03, + 0x00, 0x01, 0x00, 0x8c, 0x07, 0x12, 0x01, 0xac, + 0x03, 0x06, 0x01, 0x06, 0xd2, 0xae, 0x11, 0xe9, + 0x06, 0x0e, 0xdd, 0xd2, 0xee, 0xda, 0x0e, 0x04, + 0xf5, 0x04, 0x00, 0x00, 0x06, 0xd2, 0xae, 0xe9, + 0x13, 0x07, 0xd2, 0x42, 0xf4, 0x04, 0x00, 0x00, + 0xac, 0xe9, 0x09, 0xd2, 0x42, 0xf4, 0x04, 0x00, + 0x00, 0xeb, 0x06, 0x04, 0xf5, 0x04, 0x00, 0x00, + 0xad, 0xe9, 0x07, 0xbf, 0x00, 0xd0, 0xd1, 0xef, + 0x28, 0xdc, 0xd0, 0xd1, 0xef, 0x28, 0xfc, 0x06, + 0x0f, 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, 0x02, + 0x00, 0x02, 0x03, 0x01, 0x00, 0x06, 0x02, 0xa0, + 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, 0x00, 0x01, + 0x00, 0x8c, 0x07, 0x00, 0x00, 0xdc, 0xd0, 0xd1, + 0x23, 0x02, 0x00, 0xfc, 0x06, 0x0f, 0x00, 0x0d, + 0x43, 0x06, 0x00, 0x94, 0x07, 0x03, 0x01, 0x03, + 0x04, 0x01, 0x00, 0x25, 0x04, 0xa0, 0x03, 0x00, + 0x01, 0x00, 0xa2, 0x03, 0x00, 0x01, 0x00, 0xa4, + 0x03, 0x00, 0x01, 0x00, 0xa6, 0x03, 0x00, 0x00, + 0x00, 0x90, 0x07, 0x14, 0x01, 0xdc, 0x43, 0x40, + 0x00, 0x00, 0x00, 0xd0, 0x24, 0x01, 0x00, 0xc8, + 0x07, 0xc4, 0xab, 0x11, 0xe9, 0x0f, 0x0e, 0x0b, + 0xc8, 0xdc, 0x43, 0x41, 0x00, 0x00, 0x00, 0xd0, + 0xc4, 0x24, 0x02, 0x00, 0x0e, 0xc4, 0xd1, 0xd2, + 0x4a, 0x29, 0xfc, 0x06, 0x0f, 0x00, 0x0d, 0x43, + 0x06, 0x00, 0x96, 0x07, 0x02, 0x01, 0x02, 0x03, + 0x01, 0x00, 0x23, 0x03, 0xa0, 0x03, 0x00, 0x01, + 0x00, 0xa2, 0x03, 0x00, 0x01, 0x00, 0xa4, 0x03, + 0x00, 0x00, 0x00, 0x90, 0x07, 0x14, 0x01, 0xdc, + 0x43, 0x40, 0x00, 0x00, 0x00, 0xd0, 0x24, 0x01, + 0x00, 0xc8, 0x07, 0xc4, 0xab, 0xe9, 0x10, 0x39, + 0xbd, 0x00, 0x00, 0x00, 0x11, 0x04, 0xca, 0x05, + 0x00, 0x00, 0x21, 0x01, 0x00, 0x2f, 0xc4, 0xd1, + 0x48, 0x28, 0xfc, 0x06, 0x0f, 0x00, 0x0d, 0x43, + 0x06, 0x00, 0x98, 0x07, 0x02, 0x01, 0x02, 0x03, + 0x01, 0x00, 0x16, 0x03, 0xa0, 0x03, 0x00, 0x01, + 0x00, 0xa2, 0x03, 0x00, 0x01, 0x00, 0xa4, 0x03, + 0x00, 0x00, 0x00, 0x90, 0x07, 0x14, 0x01, 0xdc, + 0x43, 0x40, 0x00, 0x00, 0x00, 0xd0, 0x24, 0x01, + 0x00, 0xc8, 0x07, 0xc4, 0xac, 0x11, 0xe9, 0x05, + 0x0e, 0xd1, 0xc4, 0xaa, 0x28, 0xfc, 0x06, 0x0f, + 0x00, 0x07, 0x02, 0x30, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x0d, + 0x43, 0x06, 0x00, 0x9c, 0x07, 0x03, 0x07, 0x03, + 0x06, 0x07, 0x04, 0xf6, 0x02, 0x0a, 0xa0, 0x03, + 0x00, 0x01, 0x00, 0xa6, 0x03, 0x00, 0x01, 0x00, + 0xac, 0x03, 0x00, 0x01, 0x00, 0xae, 0x03, 0x00, + 0x00, 0x00, 0xb0, 0x03, 0x00, 0x01, 0x00, 0xb2, + 0x03, 0x00, 0x02, 0x00, 0xb4, 0x03, 0x00, 0x03, + 0x00, 0xfe, 0x06, 0x00, 0x04, 0x00, 0x80, 0x07, + 0x00, 0x05, 0x00, 0x82, 0x07, 0x00, 0x06, 0x00, + 0xaa, 0x03, 0x05, 0x01, 0x9a, 0x07, 0x19, 0x01, + 0xa8, 0x03, 0x04, 0x01, 0x96, 0x07, 0x17, 0x01, + 0xa4, 0x03, 0x02, 0x01, 0xa2, 0x03, 0x01, 0x01, + 0x98, 0x07, 0x18, 0x01, 0x5f, 0x06, 0x00, 0xd0, + 0x04, 0xcb, 0x05, 0x00, 0x00, 0xef, 0x98, 0xe9, + 0x1a, 0x39, 0xbf, 0x00, 0x00, 0x00, 0x11, 0x04, + 0xcc, 0x05, 0x00, 0x00, 0xd0, 0x43, 0x36, 0x00, + 0x00, 0x00, 0x24, 0x00, 0x00, 0x9f, 0x21, 0x01, + 0x00, 0x2f, 0x04, 0x45, 0x00, 0x00, 0x00, 0xd1, + 0x99, 0xac, 0xe9, 0x10, 0x39, 0xbf, 0x00, 0x00, + 0x00, 0x11, 0x04, 0xcd, 0x05, 0x00, 0x00, 0x21, + 0x01, 0x00, 0x2f, 0x04, 0x47, 0x00, 0x00, 0x00, + 0xd2, 0x99, 0xac, 0xe9, 0x10, 0x39, 0xbf, 0x00, + 0x00, 0x00, 0x11, 0x04, 0xce, 0x05, 0x00, 0x00, + 0x21, 0x01, 0x00, 0x2f, 0x39, 0xd4, 0x04, 0x00, + 0x00, 0xd1, 0xee, 0x11, 0xea, 0x10, 0x0e, 0xd1, + 0xb5, 0xb4, 0x9d, 0xad, 0x11, 0xea, 0x07, 0x0e, + 0xd1, 0xb3, 0xb4, 0x9d, 0xad, 0xe9, 0x10, 0x39, + 0xbc, 0x00, 0x00, 0x00, 0x11, 0x04, 0xcf, 0x05, + 0x00, 0x00, 0x21, 0x01, 0x00, 0x2f, 0xbf, 0x00, + 0xd2, 0xee, 0xd6, 0xdf, 0xd0, 0x04, 0xd0, 0x05, + 0x00, 0x00, 0xef, 0xc8, 0xdf, 0xd0, 0x04, 0xfe, + 0x04, 0x00, 0x00, 0xef, 0xc9, 0x04, 0xa7, 0x04, + 0x00, 0x00, 0xc5, 0xad, 0xe9, 0x0a, 0xd2, 0x04, + 0xd1, 0x05, 0x00, 0x00, 0x9f, 0xeb, 0x14, 0x04, + 0xa5, 0x04, 0x00, 0x00, 0xc5, 0xad, 0xe9, 0x0a, + 0xd2, 0x04, 0xd2, 0x05, 0x00, 0x00, 0x9f, 0xeb, + 0x02, 0xd2, 0xce, 0xc4, 0xaa, 0xcf, 0x11, 0xea, + 0x04, 0x0e, 0xd2, 0xce, 0x0e, 0xc4, 0xc6, 0x48, + 0xc2, 0x04, 0x07, 0xc1, 0x04, 0xab, 0xe9, 0x27, + 0x39, 0xbf, 0x00, 0x00, 0x00, 0x11, 0x04, 0xd3, + 0x05, 0x00, 0x00, 0xc6, 0x9f, 0x04, 0xd4, 0x05, + 0x00, 0x00, 0x9f, 0xdf, 0xd0, 0x04, 0x38, 0x05, + 0x00, 0x00, 0xef, 0x9f, 0x04, 0xe1, 0x04, 0x00, + 0x00, 0x9f, 0x21, 0x01, 0x00, 0x2f, 0x04, 0xd5, + 0x05, 0x00, 0x00, 0xdf, 0xd0, 0x04, 0x9e, 0x04, + 0x00, 0x00, 0xef, 0xad, 0xe9, 0x2c, 0x39, 0x91, + 0x00, 0x00, 0x00, 0xd1, 0xee, 0xc1, 0x04, 0xaa, + 0xcf, 0xe9, 0x1f, 0x0b, 0x04, 0x21, 0x05, 0x00, + 0x00, 0x4d, 0xb5, 0x04, 0x00, 0x00, 0xc1, 0x04, + 0x39, 0x91, 0x00, 0x00, 0x00, 0xd1, 0xee, 0x48, + 0x4d, 0x3f, 0x00, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x28, 0xc1, 0x04, 0x39, 0x8d, 0x00, 0x00, 0x00, + 0x43, 0x3c, 0x01, 0x00, 0x00, 0xd1, 0xb4, 0x8e, + 0x24, 0x02, 0x00, 0x11, 0xea, 0x05, 0x0e, 0xd1, + 0xb4, 0xa5, 0xe9, 0x08, 0x04, 0xd6, 0x05, 0x00, + 0x00, 0xeb, 0x06, 0x04, 0xd7, 0x05, 0x00, 0x00, + 0x48, 0xc2, 0x05, 0xbf, 0x01, 0xd0, 0xd1, 0xef, + 0xc2, 0x06, 0xbf, 0x02, 0xc1, 0x05, 0xbf, 0x03, + 0xd0, 0xd1, 0xef, 0x48, 0xd2, 0xc1, 0x06, 0x23, + 0x03, 0x00, 0xfc, 0x06, 0x0f, 0x00, 0x0d, 0x43, + 0x06, 0x00, 0x00, 0x01, 0x00, 0x01, 0x06, 0x01, + 0x02, 0xd9, 0x01, 0x01, 0xa0, 0x03, 0x00, 0x01, + 0x80, 0xaa, 0x03, 0x00, 0x00, 0x04, 0x47, 0x00, + 0x00, 0x00, 0xd0, 0x99, 0xac, 0xe9, 0x18, 0x39, + 0xbf, 0x00, 0x00, 0x00, 0x11, 0x04, 0xd8, 0x05, + 0x00, 0x00, 0xd0, 0x9f, 0x04, 0xd9, 0x05, 0x00, + 0x00, 0x9f, 0x21, 0x01, 0x00, 0x2f, 0x04, 0xda, + 0x05, 0x00, 0x00, 0xd0, 0xad, 0xe9, 0x07, 0x04, + 0x9b, 0x04, 0x00, 0x00, 0x28, 0x04, 0xdb, 0x05, + 0x00, 0x00, 0xd0, 0xad, 0xe9, 0x07, 0x04, 0x9a, + 0x04, 0x00, 0x00, 0x28, 0x04, 0xdc, 0x05, 0x00, + 0x00, 0xd0, 0xad, 0xe9, 0x07, 0x04, 0x99, 0x04, + 0x00, 0x00, 0x28, 0x04, 0x7b, 0x05, 0x00, 0x00, + 0xd0, 0xad, 0xe9, 0x07, 0x04, 0x96, 0x04, 0x00, + 0x00, 0x28, 0x04, 0xdd, 0x05, 0x00, 0x00, 0xd0, + 0xad, 0xe9, 0x07, 0x04, 0x43, 0x05, 0x00, 0x00, + 0x28, 0x04, 0x7a, 0x05, 0x00, 0x00, 0xd0, 0xad, + 0xe9, 0x07, 0x04, 0x95, 0x04, 0x00, 0x00, 0x28, + 0x04, 0xde, 0x05, 0x00, 0x00, 0xd0, 0xad, 0xe9, + 0x07, 0x04, 0x98, 0x04, 0x00, 0x00, 0x28, 0x04, + 0xdf, 0x05, 0x00, 0x00, 0xd0, 0xad, 0xe9, 0x07, + 0x04, 0x94, 0x04, 0x00, 0x00, 0x28, 0xdc, 0x43, + 0xe0, 0x05, 0x00, 0x00, 0xbf, 0x00, 0x24, 0x01, + 0x00, 0x98, 0xe9, 0x31, 0x39, 0xbc, 0x00, 0x00, + 0x00, 0x11, 0x04, 0xe1, 0x05, 0x00, 0x00, 0xd0, + 0x9f, 0x04, 0xe2, 0x05, 0x00, 0x00, 0x9f, 0xdc, + 0x43, 0xe3, 0x05, 0x00, 0x00, 0xbf, 0x01, 0x24, + 0x01, 0x00, 0x43, 0x59, 0x00, 0x00, 0x00, 0x04, + 0xe4, 0x05, 0x00, 0x00, 0x24, 0x01, 0x00, 0x9f, + 0x21, 0x01, 0x00, 0x2f, 0xd0, 0x28, 0xfc, 0x06, + 0x0f, 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, 0x01, + 0x00, 0x01, 0x02, 0x01, 0x00, 0x04, 0x01, 0xa2, + 0x03, 0x00, 0x01, 0x00, 0xa0, 0x03, 0x00, 0x03, + 0xd0, 0xdc, 0xad, 0x28, 0xfc, 0x06, 0x0f, 0x00, + 0x0d, 0x43, 0x06, 0x00, 0x00, 0x01, 0x00, 0x01, + 0x02, 0x00, 0x00, 0x0e, 0x01, 0xa0, 0x03, 0x00, + 0x01, 0x00, 0x04, 0xe5, 0x05, 0x00, 0x00, 0xd0, + 0x9f, 0x04, 0xe5, 0x05, 0x00, 0x00, 0x9f, 0x28, + 0xfc, 0x06, 0x0f, 0x00, 0x0d, 0x43, 0x06, 0x00, + 0x00, 0x02, 0x0b, 0x02, 0x05, 0x03, 0x01, 0xd2, + 0x01, 0x0d, 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, + 0x03, 0x00, 0x01, 0x80, 0xa4, 0x03, 0x00, 0x00, + 0x80, 0xa6, 0x03, 0x00, 0x01, 0x80, 0xaa, 0x03, + 0x00, 0x02, 0x80, 0xac, 0x03, 0x00, 0x03, 0x80, + 0xae, 0x03, 0x00, 0x04, 0x80, 0xb0, 0x03, 0x00, + 0x05, 0x80, 0xb2, 0x03, 0x00, 0x06, 0x80, 0xb4, + 0x03, 0x00, 0x07, 0x80, 0xfe, 0x06, 0x00, 0x08, + 0x00, 0x80, 0x07, 0x00, 0x09, 0x00, 0x82, 0x07, + 0x00, 0x0a, 0x00, 0x9a, 0x07, 0x01, 0x00, 0xa8, + 0x03, 0x02, 0x00, 0x96, 0x07, 0x03, 0x00, 0xde, + 0xd0, 0x04, 0x38, 0x05, 0x00, 0x00, 0xef, 0xc9, + 0xde, 0xd0, 0x04, 0xe6, 0x05, 0x00, 0x00, 0xef, + 0xca, 0xd0, 0x43, 0x92, 0x04, 0x00, 0x00, 0x24, + 0x00, 0x00, 0x42, 0x39, 0x05, 0x00, 0x00, 0xcb, + 0x39, 0xd4, 0x04, 0x00, 0x00, 0xd1, 0xee, 0x98, + 0xe9, 0x25, 0xd1, 0xb4, 0xa5, 0x11, 0xea, 0x12, + 0x0e, 0x39, 0x8d, 0x00, 0x00, 0x00, 0x43, 0x3c, + 0x01, 0x00, 0x00, 0xd1, 0xb4, 0x8e, 0x24, 0x02, + 0x00, 0xe9, 0x0c, 0xd1, 0x8e, 0xd5, 0x04, 0xe7, + 0x05, 0x00, 0x00, 0xcc, 0xeb, 0x07, 0x04, 0xe7, + 0x05, 0x00, 0x00, 0xcc, 0x0e, 0x26, 0x00, 0x00, + 0xc2, 0x04, 0x39, 0x91, 0x00, 0x00, 0x00, 0x42, + 0x3a, 0x00, 0x00, 0x00, 0x42, 0x21, 0x02, 0x00, + 0x00, 0x43, 0xa7, 0x03, 0x00, 0x00, 0xc4, 0x04, + 0x20, 0x05, 0x00, 0x00, 0xb4, 0x24, 0x03, 0x00, + 0xc2, 0x05, 0xb4, 0xc2, 0x06, 0xb4, 0xc2, 0x07, + 0xc4, 0xe8, 0xc2, 0x08, 0xbf, 0x00, 0x4e, 0xc0, + 0x01, 0x00, 0x00, 0xc2, 0x09, 0x06, 0xc4, 0xc1, + 0x05, 0x48, 0xae, 0xe9, 0x07, 0xc1, 0x09, 0xed, + 0x0e, 0xeb, 0xf3, 0xc1, 0x07, 0xc1, 0x08, 0xa5, + 0xe9, 0x2d, 0xc4, 0x43, 0x23, 0x02, 0x00, 0x00, + 0xc1, 0x07, 0xc1, 0x08, 0x24, 0x02, 0x00, 0xc2, + 0x0a, 0xc1, 0x04, 0x43, 0x24, 0x02, 0x00, 0x00, + 0x0b, 0x04, 0x21, 0x05, 0x00, 0x00, 0x4d, 0xb5, + 0x04, 0x00, 0x00, 0xc1, 0x0a, 0x4d, 0x3f, 0x00, + 0x00, 0x00, 0x24, 0x01, 0x00, 0x0e, 0xc1, 0x04, + 0x28, 0xfc, 0x06, 0x0f, 0x00, 0x0d, 0x43, 0x06, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x05, 0x0b, 0x03, + 0xf9, 0x01, 0x04, 0xa0, 0x03, 0x00, 0x00, 0x00, + 0xfe, 0x06, 0x00, 0x01, 0x00, 0x80, 0x07, 0x00, + 0x02, 0x80, 0x82, 0x07, 0x00, 0x03, 0x00, 0xb2, + 0x03, 0x06, 0x01, 0xa4, 0x03, 0x00, 0x01, 0xb0, + 0x03, 0x05, 0x01, 0xb4, 0x03, 0x07, 0x01, 0xae, + 0x03, 0x04, 0x01, 0xa2, 0x03, 0x01, 0x03, 0xa6, + 0x03, 0x01, 0x01, 0xaa, 0x03, 0x02, 0x01, 0x9a, + 0x07, 0x00, 0x00, 0xac, 0x03, 0x03, 0x01, 0xa8, + 0x03, 0x01, 0x00, 0x39, 0x91, 0x00, 0x00, 0x00, + 0x42, 0x3a, 0x00, 0x00, 0x00, 0x42, 0x21, 0x02, + 0x00, 0x00, 0x43, 0xa7, 0x03, 0x00, 0x00, 0xdd, + 0x04, 0xd1, 0x04, 0x00, 0x00, 0xde, 0x24, 0x03, + 0x00, 0xe4, 0xde, 0xa6, 0xe9, 0x1a, 0x39, 0xbf, + 0x00, 0x00, 0x00, 0x11, 0x04, 0xe8, 0x05, 0x00, + 0x00, 0xdc, 0x9f, 0x04, 0xe9, 0x05, 0x00, 0x00, + 0x9f, 0xde, 0x9f, 0x21, 0x01, 0x00, 0x2f, 0xde, + 0xdf, 0xa7, 0xe9, 0x2a, 0xdd, 0x43, 0x23, 0x02, + 0x00, 0x00, 0xdf, 0xde, 0x24, 0x02, 0x00, 0xc8, + 0x5f, 0x04, 0x00, 0x43, 0x24, 0x02, 0x00, 0x00, + 0x0b, 0x04, 0x21, 0x05, 0x00, 0x00, 0x4d, 0xb5, + 0x04, 0x00, 0x00, 0xc4, 0x4d, 0x3f, 0x00, 0x00, + 0x00, 0x24, 0x01, 0x00, 0x0e, 0x5f, 0x05, 0x00, + 0x43, 0x37, 0x00, 0x00, 0x00, 0x5f, 0x06, 0x00, + 0x5f, 0x07, 0x00, 0x43, 0x92, 0x04, 0x00, 0x00, + 0x24, 0x00, 0x00, 0x24, 0x02, 0x00, 0xc9, 0x07, + 0x5f, 0x08, 0x00, 0x5f, 0x09, 0x00, 0x48, 0xac, + 0xe9, 0x20, 0x5f, 0x0a, 0x00, 0x5f, 0x08, 0x00, + 0x5f, 0x09, 0x00, 0x48, 0xee, 0xca, 0xc5, 0x43, + 0xc9, 0x04, 0x00, 0x00, 0xbe, 0x00, 0xbe, 0x01, + 0x33, 0xbf, 0x02, 0x24, 0x02, 0x00, 0xc9, 0xeb, + 0x09, 0x39, 0x91, 0x00, 0x00, 0x00, 0xc5, 0xee, + 0xc9, 0xc5, 0xcb, 0x5f, 0x04, 0x00, 0x43, 0x24, + 0x02, 0x00, 0x00, 0x0b, 0x04, 0x4a, 0x00, 0x00, + 0x00, 0x4d, 0xb5, 0x04, 0x00, 0x00, 0xc7, 0x4d, + 0x3f, 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, 0x0e, + 0xdc, 0xb5, 0x9f, 0xe3, 0x39, 0x91, 0x00, 0x00, + 0x00, 0x42, 0x3a, 0x00, 0x00, 0x00, 0x42, 0x21, + 0x02, 0x00, 0x00, 0x43, 0xa7, 0x03, 0x00, 0x00, + 0xdd, 0x04, 0x20, 0x05, 0x00, 0x00, 0xdf, 0x24, + 0x03, 0x00, 0xe2, 0x29, 0xfc, 0x06, 0x0f, 0x00, + 0x07, 0x04, 0x5c, 0x64, 0x07, 0x3c, 0x01, 0x01, + 0x00, 0x17, 0x00, 0x00, 0x00, 0x08, 0x06, 0x00, + 0x00, 0x00, 0x04, 0x07, 0xf5, 0xff, 0xff, 0xff, + 0x0b, 0x00, 0x15, 0x01, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x0c, 0x00, 0x0a, 0x0d, 0x43, 0x06, 0x00, + 0x00, 0x01, 0x00, 0x01, 0x02, 0x01, 0x00, 0x04, + 0x01, 0xa0, 0x03, 0x00, 0x01, 0x00, 0x80, 0x07, + 0x02, 0x01, 0xdc, 0xd0, 0x48, 0x28, 0xfc, 0x06, + 0x0f, 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, 0x03, + 0x0d, 0x03, 0x08, 0x02, 0x01, 0x8f, 0x04, 0x10, + 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa6, 0x03, 0x00, + 0x01, 0x00, 0xa8, 0x03, 0x00, 0x01, 0x00, 0xaa, + 0x03, 0x00, 0x00, 0x00, 0xac, 0x03, 0x00, 0x01, + 0x00, 0xae, 0x03, 0x00, 0x02, 0x00, 0xb0, 0x03, + 0x00, 0x03, 0x00, 0xb2, 0x03, 0x00, 0x04, 0x00, + 0xb4, 0x03, 0x00, 0x05, 0x00, 0xfe, 0x06, 0x00, + 0x06, 0x00, 0x80, 0x07, 0x00, 0x07, 0x00, 0x82, + 0x07, 0x00, 0x08, 0x00, 0x84, 0x07, 0x00, 0x09, + 0x00, 0x86, 0x07, 0x00, 0x0a, 0x00, 0x88, 0x07, + 0x00, 0x0b, 0x00, 0xa0, 0x03, 0x0b, 0x00, 0x03, + 0xa4, 0x03, 0x04, 0x00, 0xa2, 0x03, 0x05, 0x00, + 0x26, 0x00, 0x00, 0xca, 0x39, 0x91, 0x00, 0x00, + 0x00, 0x42, 0x3a, 0x00, 0x00, 0x00, 0x42, 0x21, + 0x02, 0x00, 0x00, 0x43, 0xa7, 0x03, 0x00, 0x00, + 0xd0, 0x04, 0x20, 0x05, 0x00, 0x00, 0xb4, 0x24, + 0x03, 0x00, 0xcb, 0xb4, 0xc2, 0x04, 0xb4, 0xc2, + 0x05, 0xd0, 0xe8, 0xc2, 0x06, 0x06, 0xd0, 0xc7, + 0x48, 0xae, 0x6a, 0xa6, 0x01, 0x00, 0x00, 0xb3, + 0x39, 0x91, 0x00, 0x00, 0x00, 0x42, 0x3a, 0x00, + 0x00, 0x00, 0x42, 0x21, 0x02, 0x00, 0x00, 0x43, + 0xa7, 0x03, 0x00, 0x00, 0xd0, 0x04, 0xd1, 0x04, + 0x00, 0x00, 0xc7, 0x24, 0x03, 0x00, 0xc3, 0x04, + 0xad, 0xe9, 0x18, 0x39, 0xbc, 0x00, 0x00, 0x00, + 0x11, 0x04, 0xea, 0x05, 0x00, 0x00, 0xd0, 0x9f, + 0x04, 0xeb, 0x05, 0x00, 0x00, 0x9f, 0x21, 0x01, + 0x00, 0x2f, 0xc7, 0xc1, 0x05, 0xa7, 0xe9, 0x2b, + 0xd0, 0x43, 0x23, 0x02, 0x00, 0x00, 0xc1, 0x05, + 0xc7, 0x24, 0x02, 0x00, 0xc2, 0x07, 0xc6, 0x43, + 0x24, 0x02, 0x00, 0x00, 0x0b, 0x04, 0x21, 0x05, + 0x00, 0x00, 0x4d, 0xb5, 0x04, 0x00, 0x00, 0xc1, + 0x07, 0x4d, 0x3f, 0x00, 0x00, 0x00, 0x24, 0x01, + 0x00, 0x0e, 0xd0, 0x43, 0x23, 0x02, 0x00, 0x00, + 0xc7, 0xb5, 0x9f, 0xc1, 0x04, 0x24, 0x02, 0x00, + 0xc2, 0x08, 0xbe, 0x00, 0xc1, 0x08, 0xae, 0xe9, + 0x19, 0x39, 0xbf, 0x00, 0x00, 0x00, 0x11, 0x04, + 0xec, 0x05, 0x00, 0x00, 0xc1, 0x08, 0x9f, 0x04, + 0xed, 0x05, 0x00, 0x00, 0x9f, 0x21, 0x01, 0x00, + 0x2f, 0x6d, 0x73, 0x00, 0x00, 0x00, 0xdc, 0xd2, + 0xee, 0xc3, 0x09, 0x43, 0x68, 0x00, 0x00, 0x00, + 0x24, 0x00, 0x00, 0xc2, 0x0a, 0xc1, 0x0a, 0x42, + 0x67, 0x00, 0x00, 0x00, 0x98, 0xe9, 0x4d, 0xc1, + 0x0a, 0x42, 0x3f, 0x00, 0x00, 0x00, 0xc2, 0x0b, + 0x04, 0x21, 0x05, 0x00, 0x00, 0xc1, 0x0b, 0x42, + 0xb5, 0x04, 0x00, 0x00, 0xad, 0xe9, 0x11, 0xc6, + 0x43, 0x24, 0x02, 0x00, 0x00, 0xdd, 0x0b, 0xc1, + 0x0b, 0xef, 0x24, 0x01, 0x00, 0xeb, 0x16, 0xc6, + 0x43, 0x24, 0x02, 0x00, 0x00, 0xdd, 0x0b, 0xc1, + 0x0b, 0x0b, 0xd1, 0x4d, 0xee, 0x05, 0x00, 0x00, + 0xf0, 0x24, 0x01, 0x00, 0x0e, 0xc1, 0x09, 0x43, + 0x68, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0xc2, + 0x0a, 0xeb, 0xab, 0x0e, 0x06, 0x6e, 0x27, 0x00, + 0x00, 0x00, 0x0e, 0xeb, 0x6c, 0xc2, 0x0c, 0x6d, + 0x17, 0x00, 0x00, 0x00, 0x0b, 0xc1, 0x0c, 0x4d, + 0xb2, 0x05, 0x00, 0x00, 0xc8, 0x0e, 0x06, 0x6e, + 0x0d, 0x00, 0x00, 0x00, 0x0e, 0xeb, 0x52, 0x6e, + 0x05, 0x00, 0x00, 0x00, 0x2f, 0x6d, 0x38, 0x00, + 0x00, 0x00, 0xc1, 0x0a, 0x11, 0xe9, 0x25, 0x0e, + 0xc1, 0x0a, 0x42, 0x67, 0x00, 0x00, 0x00, 0x98, + 0x11, 0xe9, 0x19, 0x0e, 0xc1, 0x09, 0x42, 0x06, + 0x00, 0x00, 0x00, 0xcd, 0x11, 0xe9, 0x0d, 0x0e, + 0xc5, 0x43, 0xa7, 0x03, 0x00, 0x00, 0xc1, 0x09, + 0x24, 0x01, 0x00, 0x0e, 0x0e, 0x06, 0x6e, 0x0d, + 0x00, 0x00, 0x00, 0x0e, 0xeb, 0x12, 0x6e, 0x05, + 0x00, 0x00, 0x00, 0x2f, 0xc4, 0xe9, 0x08, 0xc4, + 0x42, 0xb2, 0x05, 0x00, 0x00, 0x2f, 0x6f, 0x6f, + 0xc1, 0x04, 0xb5, 0x9f, 0xc2, 0x05, 0x39, 0x91, + 0x00, 0x00, 0x00, 0x42, 0x3a, 0x00, 0x00, 0x00, + 0x42, 0x21, 0x02, 0x00, 0x00, 0x43, 0xa7, 0x03, + 0x00, 0x00, 0xd0, 0x04, 0x20, 0x05, 0x00, 0x00, + 0xc1, 0x05, 0x24, 0x03, 0x00, 0xcb, 0xec, 0x56, + 0xfe, 0xc1, 0x05, 0xc1, 0x06, 0xa5, 0x11, 0xe9, + 0x2c, 0x0e, 0xd0, 0x43, 0x23, 0x02, 0x00, 0x00, + 0xc1, 0x05, 0xc1, 0x06, 0x24, 0x02, 0x00, 0xc2, + 0x07, 0xc6, 0x43, 0x24, 0x02, 0x00, 0x00, 0x0b, + 0x04, 0x21, 0x05, 0x00, 0x00, 0x4d, 0xb5, 0x04, + 0x00, 0x00, 0xc1, 0x07, 0x4d, 0x3f, 0x00, 0x00, + 0x00, 0x24, 0x01, 0x00, 0x0e, 0xc6, 0x28, 0xfc, + 0x06, 0x0f, 0x00, 0x07, 0x02, 0x30, 0x0d, 0x43, + 0x06, 0x00, 0x00, 0x02, 0x00, 0x02, 0x03, 0x02, + 0x00, 0x54, 0x02, 0xa0, 0x03, 0x00, 0x01, 0x00, + 0xa2, 0x03, 0x00, 0x01, 0x00, 0x98, 0x07, 0x06, + 0x00, 0x96, 0x07, 0x03, 0x00, 0xdc, 0xd0, 0x04, + 0xef, 0x05, 0x00, 0x00, 0xef, 0x98, 0xe9, 0x10, + 0x39, 0xbf, 0x00, 0x00, 0x00, 0x11, 0x04, 0xf0, + 0x05, 0x00, 0x00, 0x21, 0x01, 0x00, 0x2f, 0x04, + 0x45, 0x00, 0x00, 0x00, 0xd1, 0x99, 0xac, 0xe9, + 0x10, 0x39, 0xbf, 0x00, 0x00, 0x00, 0x11, 0x04, + 0xf1, 0x05, 0x00, 0x00, 0x21, 0x01, 0x00, 0x2f, + 0x39, 0x22, 0x05, 0x00, 0x00, 0xd1, 0xee, 0xe9, + 0x13, 0xdd, 0xd0, 0x04, 0xef, 0x05, 0x00, 0x00, + 0xef, 0x43, 0x98, 0x05, 0x00, 0x00, 0xd1, 0x24, + 0x01, 0x00, 0x28, 0x04, 0x92, 0x05, 0x00, 0x00, + 0x28, 0xfc, 0x06, 0x0f, 0x00, 0x0d, 0x43, 0x06, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x0b, 0x07, + 0x43, 0x01, 0xa0, 0x03, 0x00, 0x00, 0x00, 0xac, + 0x03, 0x06, 0x01, 0x92, 0x07, 0x15, 0x01, 0x8a, + 0x07, 0x11, 0x01, 0x94, 0x07, 0x16, 0x01, 0x8e, + 0x07, 0x13, 0x01, 0x82, 0x07, 0x0d, 0x01, 0x80, + 0x07, 0x0c, 0x01, 0x9c, 0x07, 0x1a, 0x01, 0xa4, + 0x03, 0x02, 0x01, 0x98, 0x07, 0x18, 0x01, 0x96, + 0x07, 0x17, 0x01, 0xbf, 0x00, 0xcc, 0xbf, 0x01, + 0x44, 0xa6, 0x03, 0x00, 0x00, 0xc4, 0xbf, 0x02, + 0x44, 0xb1, 0x04, 0x00, 0x00, 0xc4, 0xbf, 0x03, + 0x44, 0xe3, 0x00, 0x00, 0x00, 0xc4, 0x42, 0x3a, + 0x00, 0x00, 0x00, 0xbf, 0x04, 0x44, 0xa8, 0x03, + 0x00, 0x00, 0xc4, 0x42, 0x3a, 0x00, 0x00, 0x00, + 0xbf, 0x05, 0x44, 0xa9, 0x03, 0x00, 0x00, 0xc4, + 0x42, 0x3a, 0x00, 0x00, 0x00, 0xbf, 0x06, 0x44, + 0x92, 0x04, 0x00, 0x00, 0xc4, 0x28, 0xfc, 0x06, + 0x0f, 0x00, 0x0d, 0x43, 0x06, 0x00, 0xa0, 0x03, + 0x02, 0x0a, 0x02, 0x06, 0x04, 0x00, 0xfa, 0x02, + 0x0c, 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, + 0x00, 0x01, 0x00, 0xa4, 0x03, 0x00, 0x00, 0x00, + 0xa6, 0x03, 0x00, 0x01, 0x00, 0xa8, 0x03, 0x00, + 0x02, 0x00, 0xaa, 0x03, 0x00, 0x03, 0x00, 0xae, + 0x03, 0x00, 0x04, 0x00, 0xb0, 0x03, 0x00, 0x05, + 0x00, 0xb2, 0x03, 0x00, 0x06, 0x00, 0xb4, 0x03, + 0x00, 0x07, 0x00, 0xfe, 0x06, 0x00, 0x08, 0x00, + 0x10, 0x00, 0x01, 0x00, 0xac, 0x03, 0x00, 0x00, + 0x92, 0x07, 0x01, 0x00, 0x8a, 0x07, 0x02, 0x00, + 0x94, 0x07, 0x03, 0x00, 0x08, 0xc2, 0x09, 0xc1, + 0x09, 0x42, 0x3b, 0x00, 0x00, 0x00, 0xc8, 0xc1, + 0x09, 0x39, 0x93, 0x00, 0x00, 0x00, 0x42, 0xf2, + 0x05, 0x00, 0x00, 0x04, 0xf3, 0x05, 0x00, 0x00, + 0x4a, 0x06, 0xc4, 0xad, 0xe9, 0x10, 0x39, 0xbf, + 0x00, 0x00, 0x00, 0x11, 0x04, 0xf4, 0x05, 0x00, + 0x00, 0x21, 0x01, 0x00, 0x2f, 0x39, 0xe1, 0x00, + 0x00, 0x00, 0x43, 0x86, 0x03, 0x00, 0x00, 0xd0, + 0x24, 0x01, 0x00, 0xc9, 0x0b, 0xca, 0x07, 0x06, + 0xd1, 0xad, 0xe9, 0x11, 0x39, 0x8d, 0x00, 0x00, + 0x00, 0x43, 0x22, 0x02, 0x00, 0x00, 0x07, 0x24, + 0x01, 0x00, 0xeb, 0x04, 0xdc, 0xd1, 0xee, 0xd9, + 0x42, 0xf4, 0x04, 0x00, 0x00, 0xac, 0xe9, 0x09, + 0xd1, 0x42, 0xf4, 0x04, 0x00, 0x00, 0xeb, 0x06, + 0x04, 0xf5, 0x04, 0x00, 0x00, 0xcb, 0xc6, 0xc7, + 0x44, 0xf4, 0x04, 0x00, 0x00, 0xdd, 0x42, 0xb0, + 0x05, 0x00, 0x00, 0xc2, 0x04, 0xde, 0xdd, 0x42, + 0xb1, 0x05, 0x00, 0x00, 0xc5, 0xc6, 0xdd, 0x42, + 0xaf, 0x05, 0x00, 0x00, 0xc1, 0x04, 0x22, 0x05, + 0x00, 0xc3, 0x05, 0x42, 0x38, 0x05, 0x00, 0x00, + 0xc2, 0x06, 0xdf, 0xc1, 0x09, 0x04, 0x38, 0x05, + 0x00, 0x00, 0xc1, 0x06, 0xf0, 0x0e, 0xdf, 0xc1, + 0x09, 0x04, 0x39, 0x05, 0x00, 0x00, 0xc1, 0x05, + 0x42, 0xa3, 0x03, 0x00, 0x00, 0xf0, 0x0e, 0xc1, + 0x05, 0x42, 0xbe, 0x05, 0x00, 0x00, 0xc2, 0x07, + 0xdf, 0xc1, 0x09, 0x04, 0xfe, 0x04, 0x00, 0x00, + 0x07, 0xd1, 0x42, 0xfe, 0x04, 0x00, 0x00, 0xac, + 0xe9, 0x09, 0xd1, 0x42, 0xfe, 0x04, 0x00, 0x00, + 0xeb, 0x06, 0x04, 0xa9, 0x04, 0x00, 0x00, 0xf0, + 0x0e, 0xdf, 0xc1, 0x09, 0x04, 0x9e, 0x04, 0x00, + 0x00, 0x07, 0xd1, 0x42, 0x9e, 0x04, 0x00, 0x00, + 0xac, 0xe9, 0x09, 0xd1, 0x42, 0x9e, 0x04, 0x00, + 0x00, 0xeb, 0x06, 0x04, 0xd5, 0x05, 0x00, 0x00, + 0xf0, 0x0e, 0xc1, 0x04, 0xc1, 0x07, 0x48, 0xc3, + 0x08, 0x39, 0x8d, 0x00, 0x00, 0x00, 0xa9, 0x98, + 0xe9, 0x19, 0x39, 0xbf, 0x00, 0x00, 0x00, 0x11, + 0x04, 0xf5, 0x05, 0x00, 0x00, 0xc1, 0x07, 0x9f, + 0x04, 0xf6, 0x05, 0x00, 0x00, 0x9f, 0x21, 0x01, + 0x00, 0x2f, 0xdf, 0xc1, 0x09, 0x04, 0xd0, 0x05, + 0x00, 0x00, 0xc1, 0x08, 0xf0, 0x0e, 0xdf, 0xc1, + 0x09, 0x04, 0xe6, 0x05, 0x00, 0x00, 0x39, 0xe1, + 0x00, 0x00, 0x00, 0x42, 0xa1, 0x03, 0x00, 0x00, + 0x11, 0xc1, 0x06, 0x21, 0x01, 0x00, 0xf0, 0x0e, + 0xdf, 0xc1, 0x09, 0x04, 0xef, 0x05, 0x00, 0x00, + 0x39, 0xe1, 0x00, 0x00, 0x00, 0x42, 0xbd, 0x01, + 0x00, 0x00, 0x11, 0xc1, 0x06, 0x21, 0x01, 0x00, + 0xf0, 0x0e, 0xdf, 0xc1, 0x09, 0x04, 0xcb, 0x05, + 0x00, 0x00, 0xc1, 0x09, 0xf0, 0x29, 0xfc, 0x06, + 0x0f, 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, 0x02, + 0x00, 0x02, 0x05, 0x02, 0x00, 0x19, 0x02, 0xa0, + 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, 0x00, 0x01, + 0x00, 0x8e, 0x07, 0x04, 0x00, 0x92, 0x07, 0x01, + 0x00, 0xdc, 0xdd, 0x42, 0xb1, 0x05, 0x00, 0x00, + 0x39, 0xe1, 0x00, 0x00, 0x00, 0x43, 0x86, 0x03, + 0x00, 0x00, 0xd0, 0x24, 0x01, 0x00, 0xd1, 0x23, + 0x03, 0x00, 0xfc, 0x06, 0x0f, 0x00, 0x0d, 0x43, + 0x06, 0x00, 0x00, 0x01, 0x02, 0x01, 0x03, 0x03, + 0x00, 0x46, 0x03, 0xa0, 0x03, 0x00, 0x01, 0x00, + 0xa2, 0x03, 0x00, 0x00, 0x00, 0xa4, 0x03, 0x00, + 0x01, 0x00, 0x82, 0x07, 0x05, 0x00, 0x80, 0x07, + 0x06, 0x00, 0x92, 0x07, 0x01, 0x00, 0xd0, 0x42, + 0xf7, 0x05, 0x00, 0x00, 0xc8, 0xd0, 0x42, 0x38, + 0x05, 0x00, 0x00, 0xc9, 0x07, 0xdc, 0xed, 0xab, + 0x11, 0xe9, 0x05, 0x0e, 0xdd, 0xc5, 0xee, 0x0e, + 0xde, 0x42, 0xb0, 0x05, 0x00, 0x00, 0xc5, 0xc4, + 0x4a, 0xde, 0x42, 0xb1, 0x05, 0x00, 0x00, 0x43, + 0xb7, 0x05, 0x00, 0x00, 0xc5, 0x24, 0x01, 0x00, + 0x11, 0xea, 0x11, 0x0e, 0xde, 0x42, 0xb1, 0x05, + 0x00, 0x00, 0x43, 0x24, 0x02, 0x00, 0x00, 0xc5, + 0x24, 0x01, 0x00, 0x29, 0xfc, 0x06, 0x0f, 0x00, + 0x0d, 0x43, 0x06, 0x00, 0x00, 0x01, 0x00, 0x01, + 0x02, 0x03, 0x00, 0x17, 0x01, 0xa0, 0x03, 0x00, + 0x01, 0x00, 0x92, 0x07, 0x01, 0x00, 0x82, 0x07, + 0x05, 0x00, 0x80, 0x07, 0x06, 0x00, 0xdc, 0xd0, + 0x44, 0xb1, 0x05, 0x00, 0x00, 0x07, 0xdd, 0xed, + 0xab, 0x11, 0xe9, 0x09, 0x0e, 0xde, 0x04, 0xe4, + 0x00, 0x00, 0x00, 0xee, 0x29, 0xfc, 0x06, 0x0f, + 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, 0x02, 0x02, + 0x02, 0x05, 0x03, 0x01, 0x60, 0x04, 0xa0, 0x03, + 0x00, 0x01, 0x00, 0xa2, 0x03, 0x00, 0x01, 0x00, + 0xa6, 0x03, 0x00, 0x00, 0x00, 0x10, 0x00, 0x01, + 0x00, 0x9c, 0x07, 0x07, 0x00, 0xa4, 0x03, 0x08, + 0x00, 0x98, 0x07, 0x09, 0x00, 0x08, 0xc9, 0xc5, + 0xcc, 0x39, 0x8d, 0x00, 0x00, 0x00, 0xa9, 0x98, + 0xe9, 0x1a, 0x39, 0xbf, 0x00, 0x00, 0x00, 0x11, + 0x04, 0xf8, 0x05, 0x00, 0x00, 0xc5, 0x43, 0x36, + 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x9f, 0x21, + 0x01, 0x00, 0x2f, 0xde, 0xc4, 0x04, 0xcb, 0x05, + 0x00, 0x00, 0xef, 0x98, 0xe9, 0x1a, 0x39, 0xbf, + 0x00, 0x00, 0x00, 0x11, 0x04, 0xf8, 0x05, 0x00, + 0x00, 0xc5, 0x43, 0x36, 0x00, 0x00, 0x00, 0x24, + 0x00, 0x00, 0x9f, 0x21, 0x01, 0x00, 0x2f, 0xbf, + 0x00, 0xc4, 0x39, 0x90, 0x00, 0x00, 0x00, 0xd0, + 0xee, 0xd8, 0x39, 0x91, 0x00, 0x00, 0x00, 0xd1, + 0xee, 0xd9, 0x23, 0x03, 0x00, 0xfc, 0x06, 0x0f, + 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, 0x03, 0x07, + 0x03, 0x06, 0x02, 0x00, 0xba, 0x01, 0x0a, 0xa0, + 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, 0x00, 0x01, + 0x00, 0xa6, 0x03, 0x00, 0x01, 0x00, 0xa8, 0x03, + 0x00, 0x00, 0x00, 0xaa, 0x03, 0x00, 0x01, 0x00, + 0xac, 0x03, 0x00, 0x02, 0x00, 0xae, 0x03, 0x00, + 0x03, 0x00, 0xb0, 0x03, 0x00, 0x04, 0x00, 0xb2, + 0x03, 0x00, 0x05, 0x00, 0xa0, 0x03, 0x04, 0x00, + 0x03, 0x9c, 0x07, 0x00, 0x00, 0xa4, 0x03, 0x01, + 0x00, 0xdc, 0xd0, 0xd1, 0xd2, 0xf0, 0xca, 0xc0, + 0xcb, 0x6d, 0x44, 0x00, 0x00, 0x00, 0xdd, 0xc6, + 0xee, 0xc3, 0x04, 0x43, 0x68, 0x00, 0x00, 0x00, + 0x24, 0x00, 0x00, 0xc2, 0x05, 0xc1, 0x05, 0x42, + 0x67, 0x00, 0x00, 0x00, 0x98, 0xe9, 0x1e, 0xc7, + 0xc1, 0x05, 0x42, 0x3f, 0x00, 0x00, 0x00, 0x42, + 0x3f, 0x00, 0x00, 0x00, 0x9f, 0xcb, 0xc1, 0x04, + 0x43, 0x68, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, + 0xc2, 0x05, 0xeb, 0xda, 0x0e, 0x06, 0x6e, 0x27, + 0x00, 0x00, 0x00, 0x0e, 0xeb, 0x6c, 0xc2, 0x06, + 0x6d, 0x17, 0x00, 0x00, 0x00, 0x0b, 0xc1, 0x06, + 0x4d, 0xb2, 0x05, 0x00, 0x00, 0xc8, 0x0e, 0x06, + 0x6e, 0x0d, 0x00, 0x00, 0x00, 0x0e, 0xeb, 0x52, + 0x6e, 0x05, 0x00, 0x00, 0x00, 0x2f, 0x6d, 0x38, + 0x00, 0x00, 0x00, 0xc1, 0x05, 0x11, 0xe9, 0x25, + 0x0e, 0xc1, 0x05, 0x42, 0x67, 0x00, 0x00, 0x00, + 0x98, 0x11, 0xe9, 0x19, 0x0e, 0xc1, 0x04, 0x42, + 0x06, 0x00, 0x00, 0x00, 0xcd, 0x11, 0xe9, 0x0d, + 0x0e, 0xc5, 0x43, 0xa7, 0x03, 0x00, 0x00, 0xc1, + 0x04, 0x24, 0x01, 0x00, 0x0e, 0x0e, 0x06, 0x6e, + 0x0d, 0x00, 0x00, 0x00, 0x0e, 0xeb, 0x12, 0x6e, + 0x05, 0x00, 0x00, 0x00, 0x2f, 0xc4, 0xe9, 0x08, + 0xc4, 0x42, 0xb2, 0x05, 0x00, 0x00, 0x2f, 0x6f, + 0x6f, 0xc7, 0x28, 0xfc, 0x06, 0x0f, 0x00, 0x0d, + 0x43, 0x06, 0x00, 0x00, 0x02, 0x02, 0x02, 0x05, + 0x02, 0x01, 0x60, 0x04, 0xa0, 0x03, 0x00, 0x01, + 0x00, 0xa2, 0x03, 0x00, 0x01, 0x00, 0xa4, 0x03, + 0x00, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x9c, + 0x07, 0x07, 0x00, 0x98, 0x07, 0x09, 0x00, 0x08, + 0xc9, 0xc5, 0xcc, 0x39, 0x8d, 0x00, 0x00, 0x00, + 0xa9, 0x98, 0xe9, 0x1a, 0x39, 0xbf, 0x00, 0x00, + 0x00, 0x11, 0x04, 0xf9, 0x05, 0x00, 0x00, 0xc5, + 0x43, 0x36, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, + 0x9f, 0x21, 0x01, 0x00, 0x2f, 0xdd, 0xc4, 0x04, + 0xcb, 0x05, 0x00, 0x00, 0xef, 0x98, 0xe9, 0x1a, + 0x39, 0xbf, 0x00, 0x00, 0x00, 0x11, 0x04, 0xf9, + 0x05, 0x00, 0x00, 0xc5, 0x43, 0x36, 0x00, 0x00, + 0x00, 0x24, 0x00, 0x00, 0x9f, 0x21, 0x01, 0x00, + 0x2f, 0xbf, 0x00, 0xc4, 0x39, 0x90, 0x00, 0x00, + 0x00, 0xd0, 0xee, 0xd8, 0x39, 0x91, 0x00, 0x00, + 0x00, 0xd1, 0xee, 0xd9, 0x23, 0x03, 0x00, 0xfc, + 0x06, 0x0f, 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, + 0x03, 0x00, 0x03, 0x04, 0x01, 0x00, 0x07, 0x03, + 0xa0, 0x03, 0x00, 0x01, 0x00, 0xa2, 0x03, 0x00, + 0x01, 0x00, 0xa4, 0x03, 0x00, 0x01, 0x00, 0x9c, + 0x07, 0x00, 0x00, 0xdc, 0xd0, 0xd1, 0xd2, 0x23, + 0x03, 0x00, 0xfc, 0x06, 0x0f, 0x00, 0x0d, 0x43, + 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x05, 0x02, + 0x00, 0x7f, 0x01, 0x10, 0x00, 0x01, 0x00, 0x98, + 0x07, 0x09, 0x00, 0x96, 0x07, 0x0a, 0x00, 0x08, + 0xc8, 0xc4, 0x39, 0x8d, 0x00, 0x00, 0x00, 0xa9, + 0x98, 0xe9, 0x1a, 0x39, 0xbf, 0x00, 0x00, 0x00, + 0x11, 0x04, 0xfa, 0x05, 0x00, 0x00, 0xc4, 0x43, + 0x36, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x9f, + 0x21, 0x01, 0x00, 0x2f, 0xdc, 0xc4, 0x04, 0xcb, + 0x05, 0x00, 0x00, 0xef, 0x98, 0xe9, 0x1a, 0x39, + 0xbf, 0x00, 0x00, 0x00, 0x11, 0x04, 0xfa, 0x05, + 0x00, 0x00, 0xc4, 0x43, 0x36, 0x00, 0x00, 0x00, + 0x24, 0x00, 0x00, 0x9f, 0x21, 0x01, 0x00, 0x2f, + 0x0b, 0xdd, 0xc4, 0x04, 0x38, 0x05, 0x00, 0x00, + 0xef, 0x4d, 0x38, 0x05, 0x00, 0x00, 0xdd, 0xc4, + 0x04, 0x39, 0x05, 0x00, 0x00, 0xef, 0x4d, 0x39, + 0x05, 0x00, 0x00, 0xdd, 0xc4, 0x04, 0xfe, 0x04, + 0x00, 0x00, 0xef, 0x4d, 0xfe, 0x04, 0x00, 0x00, + 0xdd, 0xc4, 0x04, 0x9e, 0x04, 0x00, 0x00, 0xef, + 0x4d, 0x9e, 0x04, 0x00, 0x00, 0x28, 0xfc, 0x06, + 0x0f, 0x00, 0x0d, 0x43, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x03, 0x01, 0x00, 0x29, 0x00, 0x9e, + 0x07, 0x1b, 0x01, 0x04, 0x44, 0x00, 0x00, 0x00, + 0x38, 0xe1, 0x00, 0x00, 0x00, 0x99, 0xab, 0xe9, + 0x10, 0x39, 0xbf, 0x00, 0x00, 0x00, 0x11, 0x04, + 0xfb, 0x05, 0x00, 0x00, 0x21, 0x01, 0x00, 0x2f, + 0x39, 0xe1, 0x00, 0x00, 0x00, 0xdc, 0x44, 0xbc, + 0x01, 0x00, 0x00, 0x29, 0xfc, 0x06, 0x0f, 0x00, +}; + diff --git a/frameworks/bridge/js_frontend/engine/quickjs/intl/intl_locales.h b/frameworks/bridge/js_frontend/engine/quickjs/intl/intl_locales.h new file mode 100644 index 00000000..3ff7875a --- /dev/null +++ b/frameworks/bridge/js_frontend/engine/quickjs/intl/intl_locales.h @@ -0,0 +1,282364 @@ +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_am_size = 24861; + +const uint8_t intl_am[24861] = { + 0x01, 0xd6, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x61, 0x6d, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x0e, + 0x7b, 0x31, 0x7d, 0x20, 0x7b, 0x30, 0x7d, 0x0a, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, 0x65, + 0x64, 0x69, 0x75, 0x6d, 0x08, 0x66, 0x75, 0x6c, + 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x02, 0x64, + 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, 0x06, 0x45, + 0x20, 0x64, 0x04, 0x45, 0x64, 0x10, 0x45, 0x20, + 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x06, 0x45, + 0x68, 0x6d, 0x0e, 0x45, 0x20, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x06, 0x45, 0x48, 0x6d, 0x16, 0x45, + 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x61, 0x08, 0x45, 0x68, 0x6d, 0x73, 0x14, + 0x45, 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x08, 0x45, 0x48, 0x6d, 0x73, 0x06, + 0x79, 0x20, 0x47, 0x04, 0x47, 0x79, 0x0e, 0x4d, + 0x4d, 0x4d, 0x20, 0x79, 0x20, 0x47, 0x0a, 0x47, + 0x79, 0x4d, 0x4d, 0x4d, 0x15, 0x4d, 0x00, 0x4d, + 0x00, 0x4d, 0x00, 0x20, 0x00, 0x64, 0x00, 0x63, + 0x13, 0x20, 0x00, 0x79, 0x00, 0x20, 0x00, 0x47, + 0x00, 0x0c, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x64, + 0x1b, 0x45, 0x00, 0x63, 0x13, 0x20, 0x00, 0x4d, + 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x20, 0x00, 0x64, + 0x00, 0x63, 0x13, 0x20, 0x00, 0x79, 0x00, 0x20, + 0x00, 0x47, 0x00, 0x0e, 0x47, 0x79, 0x4d, 0x4d, + 0x4d, 0x45, 0x64, 0x06, 0x68, 0x20, 0x61, 0x02, + 0x68, 0x02, 0x48, 0x0c, 0x68, 0x3a, 0x6d, 0x6d, + 0x20, 0x61, 0x04, 0x68, 0x6d, 0x0a, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x04, 0x48, 0x6d, 0x12, 0x68, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, + 0x06, 0x68, 0x6d, 0x73, 0x10, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x06, 0x48, 0x6d, + 0x73, 0x16, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x61, 0x20, 0x76, 0x08, 0x68, 0x6d, + 0x73, 0x76, 0x14, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x76, 0x08, 0x48, 0x6d, + 0x73, 0x76, 0x10, 0x68, 0x3a, 0x6d, 0x6d, 0x20, + 0x61, 0x20, 0x76, 0x06, 0x68, 0x6d, 0x76, 0x0e, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x20, 0x76, 0x06, + 0x48, 0x6d, 0x76, 0x02, 0x4c, 0x02, 0x4d, 0x06, + 0x4d, 0x2f, 0x64, 0x04, 0x4d, 0x64, 0x0d, 0x45, + 0x00, 0x63, 0x13, 0x20, 0x00, 0x4d, 0x00, 0x2f, + 0x00, 0x64, 0x00, 0x06, 0x4d, 0x45, 0x64, 0x06, + 0x4c, 0x4c, 0x4c, 0x06, 0x4d, 0x4d, 0x4d, 0x0a, + 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x08, 0x4d, 0x4d, + 0x4d, 0x64, 0x11, 0x45, 0x00, 0x63, 0x13, 0x20, + 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x20, + 0x00, 0x64, 0x00, 0x0a, 0x4d, 0x4d, 0x4d, 0x45, + 0x64, 0x0c, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x64, + 0x0a, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x13, 0x45, + 0x00, 0x63, 0x13, 0x20, 0x00, 0x4d, 0x00, 0x4d, + 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x20, 0x00, 0x64, + 0x00, 0x0c, 0x4d, 0x4d, 0x4d, 0x4d, 0x45, 0x64, + 0x0a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x04, 0x6d, + 0x73, 0x02, 0x79, 0x06, 0x4d, 0x2f, 0x79, 0x04, + 0x79, 0x4d, 0x0a, 0x64, 0x2f, 0x4d, 0x2f, 0x79, + 0x06, 0x79, 0x4d, 0x64, 0x11, 0x45, 0x00, 0x63, + 0x13, 0x20, 0x00, 0x64, 0x00, 0x2f, 0x00, 0x4d, + 0x00, 0x2f, 0x00, 0x79, 0x00, 0x08, 0x79, 0x4d, + 0x45, 0x64, 0x0a, 0x4d, 0x4d, 0x4d, 0x20, 0x79, + 0x08, 0x79, 0x4d, 0x4d, 0x4d, 0x0e, 0x64, 0x20, + 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0a, 0x79, 0x4d, + 0x4d, 0x4d, 0x64, 0x15, 0x45, 0x00, 0x63, 0x13, + 0x20, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, + 0x20, 0x00, 0x64, 0x00, 0x20, 0x00, 0x79, 0x00, + 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0c, + 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0a, 0x79, + 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, 0x51, 0x51, 0x51, + 0x20, 0x79, 0x08, 0x79, 0x51, 0x51, 0x51, 0x0c, + 0x51, 0x51, 0x51, 0x51, 0x20, 0x79, 0x0a, 0x79, + 0x51, 0x51, 0x51, 0x51, 0x20, 0x61, 0x76, 0x61, + 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x73, 0x1d, 0x45, 0x00, + 0x45, 0x00, 0x45, 0x00, 0x45, 0x00, 0x20, 0x00, + 0x63, 0x13, 0x64, 0x00, 0x20, 0x00, 0x4d, 0x00, + 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x20, 0x00, + 0x79, 0x00, 0x14, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, + 0x45, 0x45, 0x45, 0x45, 0x64, 0x10, 0x64, 0x20, + 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0c, 0x79, + 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x0e, 0x64, 0x64, + 0x2f, 0x4d, 0x4d, 0x2f, 0x79, 0x16, 0x64, 0x61, + 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x73, 0x1c, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x61, 0x20, 0x7a, 0x7a, 0x7a, 0x7a, + 0x12, 0x68, 0x6d, 0x6d, 0x73, 0x73, 0x7a, 0x7a, + 0x7a, 0x7a, 0x16, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x20, 0x61, 0x20, 0x7a, 0x08, 0x68, + 0x6d, 0x73, 0x7a, 0x16, 0x74, 0x69, 0x6d, 0x65, + 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x0e, + 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x03, + 0x03, 0x13, 0x03, 0x4c, 0x13, 0x03, 0x1b, 0x12, + 0x03, 0xa4, 0x12, 0x03, 0x1c, 0x12, 0x03, 0x01, + 0x13, 0x03, 0xa6, 0x12, 0x03, 0x34, 0x12, 0x03, + 0x96, 0x12, 0x03, 0xf2, 0x12, 0x0c, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x07, 0x03, 0x13, 0x95, + 0x12, 0xe9, 0x12, 0x07, 0x4c, 0x13, 0x65, 0x12, + 0x29, 0x12, 0x07, 0x1b, 0x12, 0x2d, 0x12, 0x7d, + 0x12, 0x07, 0xa4, 0x12, 0x55, 0x13, 0x2a, 0x12, + 0x05, 0x1c, 0x12, 0xed, 0x12, 0x05, 0x01, 0x13, + 0x95, 0x12, 0x07, 0x01, 0x13, 0x0b, 0x12, 0xed, + 0x12, 0x07, 0xa6, 0x12, 0x08, 0x13, 0x35, 0x12, + 0x07, 0x34, 0x12, 0x55, 0x13, 0x74, 0x12, 0x07, + 0xa6, 0x12, 0xad, 0x12, 0x76, 0x12, 0x07, 0x96, + 0x12, 0x6c, 0x12, 0x1d, 0x12, 0x07, 0xf2, 0x12, + 0x34, 0x12, 0x1d, 0x12, 0x0b, 0x03, 0x13, 0x95, + 0x12, 0xe9, 0x12, 0xc8, 0x12, 0x2a, 0x12, 0x0b, + 0x4c, 0x13, 0x65, 0x12, 0x29, 0x12, 0xc8, 0x12, + 0x2a, 0x12, 0x09, 0xa4, 0x12, 0x55, 0x13, 0x2a, + 0x12, 0x0d, 0x12, 0x09, 0xa6, 0x12, 0x08, 0x13, + 0x35, 0x12, 0x75, 0x12, 0x0d, 0x34, 0x12, 0x55, + 0x13, 0x74, 0x12, 0x1d, 0x12, 0x60, 0x12, 0x2d, + 0x12, 0x0b, 0xa6, 0x12, 0xad, 0x12, 0x76, 0x12, + 0x60, 0x12, 0x2d, 0x12, 0x0b, 0x96, 0x12, 0x6c, + 0x12, 0x1d, 0x12, 0x60, 0x12, 0x2d, 0x12, 0x0b, + 0xf2, 0x12, 0x34, 0x12, 0x1d, 0x12, 0x60, 0x12, + 0x2d, 0x12, 0x0c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, + 0x73, 0x03, 0xa5, 0x12, 0x03, 0x30, 0x12, 0x03, + 0x28, 0x12, 0x03, 0x10, 0x12, 0x03, 0xd3, 0x12, + 0x03, 0x45, 0x12, 0x07, 0xa5, 0x12, 0x11, 0x12, + 0xf5, 0x12, 0x05, 0x30, 0x12, 0x9e, 0x12, 0x07, + 0x1b, 0x12, 0xad, 0x12, 0x30, 0x12, 0x07, 0x28, + 0x12, 0x61, 0x12, 0xd5, 0x12, 0x07, 0x10, 0x12, + 0x19, 0x12, 0x35, 0x12, 0x07, 0xd3, 0x12, 0x2d, + 0x12, 0x65, 0x12, 0x07, 0x45, 0x12, 0xf3, 0x12, + 0x1c, 0x12, 0x09, 0x1b, 0x12, 0xad, 0x12, 0x30, + 0x12, 0x9e, 0x12, 0x08, 0x64, 0x61, 0x79, 0x73, + 0x04, 0x42, 0x45, 0x08, 0x65, 0x72, 0x61, 0x73, + 0x07, 0x25, 0x13, 0xcb, 0x12, 0x75, 0x12, 0x09, + 0xa8, 0x12, 0x30, 0x12, 0xd3, 0x12, 0x75, 0x12, + 0x04, 0x70, 0x6d, 0x14, 0x64, 0x61, 0x79, 0x50, + 0x65, 0x72, 0x69, 0x6f, 0x64, 0x73, 0x06, 0x4d, + 0x30, 0x31, 0x06, 0x4d, 0x30, 0x32, 0x06, 0x4d, + 0x30, 0x33, 0x06, 0x4d, 0x30, 0x34, 0x06, 0x4d, + 0x30, 0x35, 0x06, 0x4d, 0x30, 0x36, 0x06, 0x4d, + 0x30, 0x37, 0x06, 0x4d, 0x30, 0x38, 0x06, 0x4d, + 0x30, 0x39, 0x06, 0x4d, 0x31, 0x30, 0x06, 0x4d, + 0x31, 0x31, 0x06, 0x4d, 0x31, 0x32, 0x08, 0x54, + 0x6f, 0x75, 0x74, 0x08, 0x42, 0x61, 0x62, 0x61, + 0x0a, 0x48, 0x61, 0x74, 0x6f, 0x72, 0x0a, 0x4b, + 0x69, 0x61, 0x68, 0x6b, 0x08, 0x54, 0x6f, 0x62, + 0x61, 0x0c, 0x41, 0x6d, 0x73, 0x68, 0x69, 0x72, + 0x10, 0x42, 0x61, 0x72, 0x61, 0x6d, 0x68, 0x61, + 0x74, 0x12, 0x42, 0x61, 0x72, 0x61, 0x6d, 0x6f, + 0x75, 0x64, 0x61, 0x0e, 0x42, 0x61, 0x73, 0x68, + 0x61, 0x6e, 0x73, 0x0a, 0x50, 0x61, 0x6f, 0x6e, + 0x61, 0x08, 0x45, 0x70, 0x65, 0x70, 0x0a, 0x4d, + 0x65, 0x73, 0x72, 0x61, 0x0a, 0x4e, 0x61, 0x73, + 0x69, 0x65, 0x08, 0x45, 0x52, 0x41, 0x30, 0x08, + 0x45, 0x52, 0x41, 0x31, 0x0b, 0x18, 0x12, 0x35, + 0x12, 0xa8, 0x12, 0x28, 0x12, 0x1d, 0x12, 0x09, + 0x25, 0x13, 0x45, 0x12, 0x1d, 0x12, 0x75, 0x12, + 0x07, 0x85, 0x12, 0xf3, 0x12, 0x2d, 0x12, 0x09, + 0x73, 0x12, 0x85, 0x12, 0x23, 0x12, 0x25, 0x12, + 0x05, 0x25, 0x13, 0x2d, 0x12, 0x09, 0xe8, 0x12, + 0xab, 0x12, 0x72, 0x12, 0x75, 0x12, 0x09, 0x18, + 0x12, 0x0b, 0x13, 0x62, 0x12, 0x75, 0x12, 0x09, + 0x1a, 0x12, 0xeb, 0x12, 0xdd, 0x12, 0xeb, 0x12, + 0x09, 0x0d, 0x13, 0x95, 0x12, 0x66, 0x12, 0x75, + 0x12, 0x05, 0x30, 0x12, 0x94, 0x12, 0x07, 0x10, + 0x12, 0x1d, 0x12, 0x0c, 0x12, 0x07, 0x90, 0x12, + 0x10, 0x12, 0x34, 0x12, 0x09, 0x33, 0x13, 0x09, + 0x13, 0x1c, 0x12, 0x95, 0x12, 0x07, 0xd3, 0x12, + 0x2f, 0x00, 0xd3, 0x12, 0x07, 0xd3, 0x12, 0x2f, + 0x00, 0x1d, 0x12, 0x06, 0x42, 0x43, 0x45, 0x04, + 0x43, 0x45, 0x0f, 0xd3, 0x12, 0x18, 0x12, 0x70, + 0x12, 0x20, 0x00, 0xd3, 0x12, 0x08, 0x12, 0x1d, + 0x12, 0x11, 0xd3, 0x12, 0x18, 0x12, 0x70, 0x12, + 0x20, 0x00, 0x1d, 0x12, 0x15, 0x12, 0x28, 0x12, + 0x75, 0x12, 0x0c, 0x54, 0x69, 0x73, 0x68, 0x72, + 0x69, 0x0e, 0x48, 0x65, 0x73, 0x68, 0x76, 0x61, + 0x6e, 0x0c, 0x4b, 0x69, 0x73, 0x6c, 0x65, 0x76, + 0x0a, 0x54, 0x65, 0x76, 0x65, 0x74, 0x0c, 0x53, + 0x68, 0x65, 0x76, 0x61, 0x74, 0x0c, 0x41, 0x64, + 0x61, 0x72, 0x20, 0x49, 0x08, 0x41, 0x64, 0x61, + 0x72, 0x0a, 0x4e, 0x69, 0x73, 0x61, 0x6e, 0x08, + 0x49, 0x79, 0x61, 0x72, 0x0a, 0x53, 0x69, 0x76, + 0x61, 0x6e, 0x0a, 0x54, 0x61, 0x6d, 0x75, 0x7a, + 0x04, 0x41, 0x76, 0x08, 0x45, 0x6c, 0x75, 0x6c, + 0x0e, 0x41, 0x64, 0x61, 0x72, 0x20, 0x49, 0x49, + 0x04, 0x41, 0x4d, 0x0e, 0x43, 0x68, 0x61, 0x69, + 0x74, 0x72, 0x61, 0x10, 0x56, 0x61, 0x69, 0x73, + 0x61, 0x6b, 0x68, 0x61, 0x10, 0x4a, 0x79, 0x61, + 0x69, 0x73, 0x74, 0x68, 0x61, 0x0c, 0x41, 0x73, + 0x61, 0x64, 0x68, 0x61, 0x0e, 0x53, 0x72, 0x61, + 0x76, 0x61, 0x6e, 0x61, 0x0c, 0x42, 0x68, 0x61, + 0x64, 0x72, 0x61, 0x0c, 0x41, 0x73, 0x76, 0x69, + 0x6e, 0x61, 0x0e, 0x4b, 0x61, 0x72, 0x74, 0x69, + 0x6b, 0x61, 0x14, 0x41, 0x67, 0x72, 0x61, 0x68, + 0x61, 0x79, 0x61, 0x6e, 0x61, 0x0a, 0x50, 0x61, + 0x75, 0x73, 0x61, 0x0a, 0x4d, 0x61, 0x67, 0x68, + 0x61, 0x10, 0x50, 0x68, 0x61, 0x6c, 0x67, 0x75, + 0x6e, 0x61, 0x08, 0x53, 0x61, 0x6b, 0x61, 0x08, + 0x4d, 0x75, 0x68, 0x2e, 0x08, 0x53, 0x61, 0x66, + 0x2e, 0x0c, 0x52, 0x61, 0x62, 0x2e, 0x20, 0x49, + 0x0e, 0x52, 0x61, 0x62, 0x2e, 0x20, 0x49, 0x49, + 0x0c, 0x4a, 0x75, 0x6d, 0x2e, 0x20, 0x49, 0x0e, + 0x4a, 0x75, 0x6d, 0x2e, 0x20, 0x49, 0x49, 0x08, + 0x52, 0x61, 0x6a, 0x2e, 0x08, 0x53, 0x68, 0x61, + 0x2e, 0x08, 0x52, 0x61, 0x6d, 0x2e, 0x0a, 0x53, + 0x68, 0x61, 0x77, 0x2e, 0x11, 0x44, 0x00, 0x68, + 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, + 0x00, 0x51, 0x00, 0x2e, 0x00, 0x11, 0x44, 0x00, + 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, + 0x2d, 0x00, 0x48, 0x00, 0x2e, 0x00, 0x10, 0x4d, + 0x75, 0x68, 0x61, 0x72, 0x72, 0x61, 0x6d, 0x0a, + 0x53, 0x61, 0x66, 0x61, 0x72, 0x0f, 0x52, 0x00, + 0x61, 0x00, 0x62, 0x00, 0x69, 0x00, 0xbb, 0x02, + 0x20, 0x00, 0x49, 0x00, 0x11, 0x52, 0x00, 0x61, + 0x00, 0x62, 0x00, 0x69, 0x00, 0xbb, 0x02, 0x20, + 0x00, 0x49, 0x00, 0x49, 0x00, 0x10, 0x4a, 0x75, + 0x6d, 0x61, 0x64, 0x61, 0x20, 0x49, 0x12, 0x4a, + 0x75, 0x6d, 0x61, 0x64, 0x61, 0x20, 0x49, 0x49, + 0x0a, 0x52, 0x61, 0x6a, 0x61, 0x62, 0x0f, 0x53, + 0x00, 0x68, 0x00, 0x61, 0x00, 0xbb, 0x02, 0x62, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x0e, 0x52, 0x61, + 0x6d, 0x61, 0x64, 0x61, 0x6e, 0x0e, 0x53, 0x68, + 0x61, 0x77, 0x77, 0x61, 0x6c, 0x19, 0x44, 0x00, + 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, + 0x2d, 0x00, 0x51, 0x00, 0x69, 0x00, 0xbb, 0x02, + 0x64, 0x00, 0x61, 0x00, 0x68, 0x00, 0x19, 0x44, + 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, + 0x00, 0x2d, 0x00, 0x48, 0x00, 0x69, 0x00, 0x6a, + 0x00, 0x6a, 0x00, 0x61, 0x00, 0x68, 0x00, 0x04, + 0x41, 0x48, 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x36, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x36, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, + 0x68, 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x54, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x1d, 0x57, 0x00, 0x61, + 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x1f, 0x52, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x1d, 0x59, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x37, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x2d, 0x00, 0x6b, 0x00, 0x61, 0x00, + 0x6d, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x2d, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x2b, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x2d, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, 0x2a, + 0x4a, 0x69, 0x6e, 0x67, 0x6f, 0x2d, 0x6b, 0x65, + 0x69, 0x75, 0x6e, 0x20, 0x28, 0x37, 0x36, 0x37, + 0x2d, 0x37, 0x37, 0x30, 0x29, 0x1d, 0x48, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x1f, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x2d, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x2d, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x38, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x1f, 0x44, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1d, 0x4a, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x1d, 0x4b, 0x00, 0x61, 0x00, 0x6a, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1f, 0x53, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x20, 0x54, 0x65, 0x6e, 0x2d, + 0x61, 0x6e, 0x20, 0x28, 0x38, 0x35, 0x37, 0x2d, + 0x38, 0x35, 0x39, 0x29, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x74, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x1f, 0x45, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1b, 0x4c, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x1d, 0x41, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x1f, 0x45, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x1d, 0x45, 0x00, 0x69, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, + 0x69, 0x00, 0x73, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x39, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4a, + 0x00, 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x35, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, 0x4a, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x29, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4c, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x4a, + 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, 0x24, + 0x54, 0x65, 0x6e, 0x2d, 0x65, 0x69, 0x20, 0x28, + 0x31, 0x31, 0x31, 0x30, 0x2d, 0x31, 0x31, 0x31, + 0x33, 0x29, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x44, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x48, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x48, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x27, 0x45, 0x00, 0x69, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x68, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x6d, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x61, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x69, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x59, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x21, 0x4a, 0x00, 0x75, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x29, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x29, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, + 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x41, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, + 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x29, 0x00, 0x27, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x75, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x29, 0x52, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x4e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x4c, 0x01, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6d, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, + 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, + 0x4c, 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x74, + 0x00, 0x73, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x27, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x21, 0x4c, 0x01, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, + 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x21, 0x4d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, + 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x72, 0x00, + 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4d, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, 0x45, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, + 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x48, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x65, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, + 0x41, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x02, 0x54, 0x02, + 0x53, 0x0a, 0x4d, 0x65, 0x69, 0x6a, 0x69, 0x0d, + 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x0b, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x0c, + 0x48, 0x65, 0x69, 0x73, 0x65, 0x69, 0x12, 0x46, + 0x61, 0x72, 0x76, 0x61, 0x72, 0x64, 0x69, 0x6e, + 0x16, 0x4f, 0x72, 0x64, 0x69, 0x62, 0x65, 0x68, + 0x65, 0x73, 0x68, 0x74, 0x0e, 0x4b, 0x68, 0x6f, + 0x72, 0x64, 0x61, 0x64, 0x06, 0x54, 0x69, 0x72, + 0x0c, 0x4d, 0x6f, 0x72, 0x64, 0x61, 0x64, 0x12, + 0x53, 0x68, 0x61, 0x68, 0x72, 0x69, 0x76, 0x61, + 0x72, 0x08, 0x4d, 0x65, 0x68, 0x72, 0x08, 0x41, + 0x62, 0x61, 0x6e, 0x08, 0x41, 0x7a, 0x61, 0x72, + 0x06, 0x44, 0x65, 0x79, 0x0c, 0x42, 0x61, 0x68, + 0x6d, 0x61, 0x6e, 0x0c, 0x45, 0x73, 0x66, 0x61, + 0x6e, 0x64, 0x04, 0x41, 0x50, 0x1a, 0x42, 0x65, + 0x66, 0x6f, 0x72, 0x65, 0x20, 0x52, 0x2e, 0x4f, + 0x2e, 0x43, 0x2e, 0x0c, 0x52, 0x2e, 0x4f, 0x2e, + 0x43, 0x2e, 0x12, 0x63, 0x61, 0x6c, 0x65, 0x6e, + 0x64, 0x61, 0x72, 0x73, 0x08, 0x64, 0x61, 0x74, + 0x65, 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, + 0x75, 0x10, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0x1e, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, + 0x72, 0x6e, 0x26, 0x7b, 0x6d, 0x69, 0x6e, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x6e, + 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, + 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x0e, 0x64, + 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x24, 0x7b, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, + 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0x3a, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x10, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, + 0x2a, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, + 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x40, 0x7b, + 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, + 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x0e, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x10, + 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, + 0x02, 0x2e, 0x02, 0x2c, 0x0a, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x06, 0x4e, 0x61, 0x4e, 0x06, 0x6e, + 0x61, 0x6e, 0x02, 0x2b, 0x10, 0x70, 0x6c, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, 0x2d, 0x12, + 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x02, 0x25, 0x16, 0x70, 0x65, 0x72, 0x63, + 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x03, + 0x1e, 0x22, 0x10, 0x69, 0x6e, 0x66, 0x69, 0x6e, + 0x69, 0x74, 0x79, 0x0e, 0x73, 0x79, 0x6d, 0x62, + 0x6f, 0x6c, 0x73, 0x06, 0x41, 0x55, 0x24, 0x06, + 0x41, 0x55, 0x44, 0x04, 0x52, 0x24, 0x06, 0x42, + 0x52, 0x4c, 0x06, 0x43, 0x41, 0x24, 0x06, 0x43, + 0x41, 0x44, 0x06, 0x43, 0x4e, 0xa5, 0x06, 0x43, + 0x4e, 0x59, 0x05, 0x65, 0x12, 0x2d, 0x12, 0x06, + 0x45, 0x54, 0x42, 0x03, 0xac, 0x20, 0x06, 0x45, + 0x55, 0x52, 0x02, 0xa3, 0x06, 0x47, 0x42, 0x50, + 0x06, 0x48, 0x4b, 0x24, 0x06, 0x48, 0x4b, 0x44, + 0x03, 0xaa, 0x20, 0x06, 0x49, 0x4c, 0x53, 0x03, + 0xb9, 0x20, 0x06, 0x49, 0x4e, 0x52, 0x06, 0x4a, + 0x50, 0xa5, 0x06, 0x4a, 0x50, 0x59, 0x03, 0xa9, + 0x20, 0x06, 0x4b, 0x52, 0x57, 0x06, 0x4d, 0x58, + 0x24, 0x06, 0x4d, 0x58, 0x4e, 0x06, 0x4e, 0x5a, + 0x24, 0x06, 0x4e, 0x5a, 0x44, 0x03, 0x3f, 0x0e, + 0x06, 0x54, 0x48, 0x42, 0x06, 0x4e, 0x54, 0x24, + 0x06, 0x54, 0x57, 0x44, 0x06, 0x55, 0x53, 0x24, + 0x06, 0x55, 0x53, 0x44, 0x03, 0xab, 0x20, 0x06, + 0x56, 0x4e, 0x44, 0x08, 0x46, 0x43, 0x46, 0x41, + 0x06, 0x58, 0x41, 0x46, 0x06, 0x45, 0x43, 0x24, + 0x06, 0x58, 0x43, 0x44, 0x06, 0x43, 0x46, 0x41, + 0x06, 0x58, 0x4f, 0x46, 0x08, 0x43, 0x46, 0x50, + 0x46, 0x06, 0x58, 0x50, 0x46, 0x14, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, + 0x52, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, + 0x74, 0x6c, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x6a, + 0x73, 0x6f, 0x6e, 0x70, 0x2f, 0x61, 0x6d, 0x2e, + 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, + 0x00, 0x01, 0x00, 0x27, 0x00, 0x89, 0x01, 0xf2, + 0x6a, 0x01, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x39, + 0xd0, 0x00, 0x00, 0x00, 0x43, 0xd1, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd2, 0x00, 0x00, 0x00, 0x4d, + 0xd3, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd4, 0x00, + 0x00, 0x00, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x04, + 0xd6, 0x00, 0x00, 0x00, 0x04, 0xd7, 0x00, 0x00, + 0x00, 0x04, 0xd8, 0x00, 0x00, 0x00, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x04, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdb, 0x00, 0x00, 0x00, 0x04, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x04, + 0xde, 0x00, 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, + 0x00, 0x04, 0xe0, 0x00, 0x00, 0x00, 0x04, 0xe1, + 0x00, 0x00, 0x00, 0x04, 0xe2, 0x00, 0x00, 0x00, + 0x26, 0x0f, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, + 0x0a, 0x4d, 0xe4, 0x00, 0x00, 0x00, 0x0a, 0x4d, + 0xe5, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, + 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe9, + 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0xed, 0x00, + 0x00, 0x00, 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, + 0xef, 0x00, 0x00, 0x00, 0x04, 0xf0, 0x00, 0x00, + 0x00, 0x4d, 0xf1, 0x00, 0x00, 0x00, 0x04, 0xf2, + 0x00, 0x00, 0x00, 0x4d, 0xf3, 0x00, 0x00, 0x00, + 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xf5, 0x00, + 0x00, 0x00, 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, + 0xf7, 0x00, 0x00, 0x00, 0x04, 0xf8, 0x00, 0x00, + 0x00, 0x4d, 0xf9, 0x00, 0x00, 0x00, 0x04, 0xfa, + 0x00, 0x00, 0x00, 0x4d, 0xfb, 0x00, 0x00, 0x00, + 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xfd, 0x00, + 0x00, 0x00, 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, + 0xff, 0x00, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, + 0x00, 0x4d, 0x01, 0x01, 0x00, 0x00, 0x04, 0x02, + 0x01, 0x00, 0x00, 0x4d, 0x02, 0x01, 0x00, 0x00, + 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0x04, 0x01, + 0x00, 0x00, 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, + 0x06, 0x01, 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, + 0x00, 0x4d, 0x08, 0x01, 0x00, 0x00, 0x04, 0x09, + 0x01, 0x00, 0x00, 0x4d, 0x0a, 0x01, 0x00, 0x00, + 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, 0x0c, 0x01, + 0x00, 0x00, 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, + 0x0e, 0x01, 0x00, 0x00, 0x04, 0x0f, 0x01, 0x00, + 0x00, 0x4d, 0x10, 0x01, 0x00, 0x00, 0x04, 0x11, + 0x01, 0x00, 0x00, 0x4d, 0x12, 0x01, 0x00, 0x00, + 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, 0x14, 0x01, + 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, + 0x16, 0x01, 0x00, 0x00, 0x04, 0x17, 0x01, 0x00, + 0x00, 0x4d, 0x18, 0x01, 0x00, 0x00, 0x04, 0x19, + 0x01, 0x00, 0x00, 0x4d, 0x1a, 0x01, 0x00, 0x00, + 0x04, 0x1b, 0x01, 0x00, 0x00, 0x4d, 0x1c, 0x01, + 0x00, 0x00, 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, + 0x1e, 0x01, 0x00, 0x00, 0x04, 0x1f, 0x01, 0x00, + 0x00, 0x4d, 0x20, 0x01, 0x00, 0x00, 0x04, 0x21, + 0x01, 0x00, 0x00, 0x4d, 0x22, 0x01, 0x00, 0x00, + 0x04, 0x23, 0x01, 0x00, 0x00, 0x4d, 0x24, 0x01, + 0x00, 0x00, 0x04, 0x25, 0x01, 0x00, 0x00, 0x4d, + 0x25, 0x01, 0x00, 0x00, 0x04, 0x26, 0x01, 0x00, + 0x00, 0x4d, 0x27, 0x01, 0x00, 0x00, 0x04, 0x28, + 0x01, 0x00, 0x00, 0x4d, 0x29, 0x01, 0x00, 0x00, + 0x04, 0x2a, 0x01, 0x00, 0x00, 0x4d, 0x2b, 0x01, + 0x00, 0x00, 0x04, 0x2c, 0x01, 0x00, 0x00, 0x4d, + 0x2d, 0x01, 0x00, 0x00, 0x04, 0x2e, 0x01, 0x00, + 0x00, 0x4d, 0x2f, 0x01, 0x00, 0x00, 0x04, 0x30, + 0x01, 0x00, 0x00, 0x4d, 0x31, 0x01, 0x00, 0x00, + 0x04, 0x32, 0x01, 0x00, 0x00, 0x4d, 0x33, 0x01, + 0x00, 0x00, 0x04, 0x34, 0x01, 0x00, 0x00, 0x4d, + 0x35, 0x01, 0x00, 0x00, 0x04, 0x36, 0x01, 0x00, + 0x00, 0x4d, 0x37, 0x01, 0x00, 0x00, 0x4d, 0x38, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x39, 0x01, 0x00, + 0x00, 0x4d, 0x3a, 0x01, 0x00, 0x00, 0x04, 0x3b, + 0x01, 0x00, 0x00, 0x4d, 0x3c, 0x01, 0x00, 0x00, + 0x04, 0x2e, 0x01, 0x00, 0x00, 0x4d, 0x2f, 0x01, + 0x00, 0x00, 0x04, 0x3d, 0x01, 0x00, 0x00, 0x4d, + 0x29, 0x01, 0x00, 0x00, 0x4d, 0x3e, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x3f, 0x01, 0x00, 0x00, 0x4d, + 0x40, 0x01, 0x00, 0x00, 0x04, 0x41, 0x01, 0x00, + 0x00, 0x4d, 0x42, 0x01, 0x00, 0x00, 0x04, 0x07, + 0x01, 0x00, 0x00, 0x4d, 0x08, 0x01, 0x00, 0x00, + 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0x04, 0x01, + 0x00, 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x4d, + 0x44, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x0b, 0x04, + 0x45, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x73, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x75, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, + 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, 0xd5, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x00, 0xbe, + 0x01, 0xbe, 0x02, 0xbe, 0x03, 0xbe, 0x04, 0xbe, + 0x05, 0xbe, 0x06, 0xbe, 0x07, 0xbe, 0x08, 0xbe, + 0x09, 0xbe, 0x0a, 0xbe, 0x0b, 0x26, 0x0c, 0x00, + 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, + 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, + 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, + 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, + 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, + 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, + 0x04, 0x85, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x73, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x76, 0x01, 0x00, 0x00, 0x4d, + 0xd2, 0x00, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, + 0x01, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x0c, 0xbe, 0x0d, 0xbe, 0x0e, + 0xbe, 0x0f, 0xbe, 0x10, 0xbe, 0x11, 0xbe, 0x12, + 0xbe, 0x13, 0xbe, 0x14, 0xbe, 0x15, 0xbe, 0x16, + 0xbe, 0x17, 0xbe, 0x18, 0x26, 0x0d, 0x00, 0x4d, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, + 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, + 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, + 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, + 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, + 0x04, 0x92, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x86, 0x01, + 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, + 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, + 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, + 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, + 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, + 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, + 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, + 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, 0x26, 0x0d, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x64, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x73, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x93, 0x01, 0x00, 0x00, + 0x04, 0x94, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, + 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, + 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, + 0x4d, 0xd7, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x19, 0xbe, 0x1a, 0xbe, 0x1b, 0xbe, 0x1c, 0xbe, + 0x1d, 0xbe, 0x1e, 0xbe, 0x1f, 0xbe, 0x20, 0xbe, + 0x21, 0xbe, 0x22, 0xbe, 0x23, 0xbe, 0x24, 0x26, + 0x0c, 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, + 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, + 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, + 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x64, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x73, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, + 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x25, 0xbe, 0x26, + 0xbe, 0x27, 0xbe, 0x28, 0xbe, 0x29, 0xbe, 0x2a, + 0xbe, 0x2b, 0xbe, 0x2c, 0xbe, 0x2d, 0xbe, 0x2e, + 0xbe, 0x2f, 0xbe, 0x30, 0xbe, 0x31, 0x26, 0x0d, + 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x95, + 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, + 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, + 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, + 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, + 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, + 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, + 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, + 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, + 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, + 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, + 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, + 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, + 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, + 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, + 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x64, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x73, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x93, 0x01, + 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x76, 0x01, 0x00, 0x00, 0x4d, 0xd2, + 0x00, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x4d, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x32, 0xbe, 0x33, 0xbe, 0x34, 0xbe, + 0x35, 0xbe, 0x36, 0xbe, 0x37, 0xbe, 0x38, 0xbe, + 0x39, 0xbe, 0x3a, 0xbe, 0x3b, 0xbe, 0x3c, 0xbe, + 0x3d, 0xbe, 0x3e, 0x26, 0x0d, 0x00, 0x4d, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, + 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, + 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, + 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, + 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, + 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, + 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, + 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, + 0xa1, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, + 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, + 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, + 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, + 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, + 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, + 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, + 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, + 0x04, 0xa1, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x73, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x93, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x93, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, + 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, + 0x4d, 0xd9, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x3f, 0xbe, 0x40, 0xbe, 0x41, 0xbe, 0x42, 0xbe, + 0x43, 0xbe, 0x44, 0xbe, 0x45, 0xbe, 0x46, 0xbe, + 0x47, 0xbe, 0x48, 0xbe, 0x49, 0xbe, 0x4a, 0x26, + 0x0c, 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, + 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, + 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, + 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x64, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x73, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x93, 0x01, 0x00, + 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x93, + 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x4d, 0xd2, 0x00, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, + 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x73, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, + 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, + 0x04, 0xa5, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, + 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, + 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, + 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, + 0x00, 0x26, 0x04, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, + 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, + 0x04, 0xa3, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x4d, 0xd2, 0x00, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x4d, + 0x79, 0x01, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x4b, 0xbe, 0x4c, 0xbe, + 0x4d, 0xbe, 0x4e, 0xbe, 0x4f, 0xbe, 0x50, 0xbe, + 0x51, 0xbe, 0x52, 0xbe, 0x53, 0xbe, 0x54, 0xbe, + 0x55, 0xbe, 0x56, 0xbe, 0x57, 0xbe, 0x58, 0x26, + 0x0e, 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, + 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, + 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, + 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, + 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, + 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, + 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, 0xb3, + 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, 0x00, + 0x04, 0xb5, 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa8, 0x01, + 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, + 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, + 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, + 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, + 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, + 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, 0x04, + 0xb2, 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, + 0x00, 0x04, 0xb4, 0x01, 0x00, 0x00, 0x04, 0xb5, + 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x73, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xb6, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, 0xb6, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x75, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, + 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x59, 0xbe, + 0x5a, 0xbe, 0x5b, 0xbe, 0x5c, 0xbe, 0x5d, 0xbe, + 0x5e, 0xbe, 0x5f, 0xbe, 0x60, 0xbe, 0x61, 0xbe, + 0x62, 0xbe, 0x63, 0xbe, 0x64, 0x26, 0x0c, 0x00, + 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, + 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, 0x04, + 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, + 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, + 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, + 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, + 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, 0x04, + 0xc1, 0x01, 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, + 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, + 0x04, 0xba, 0x01, 0x00, 0x00, 0x04, 0xbb, 0x01, + 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, 0x04, + 0xbd, 0x01, 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, + 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, 0x04, 0xc0, + 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, + 0x04, 0xc2, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x73, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xc3, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0xc3, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, + 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x65, 0xbe, 0x66, 0xbe, 0x67, 0xbe, 0x68, 0xbe, + 0x69, 0xbe, 0x6a, 0xbe, 0x6b, 0xbe, 0x6c, 0xbe, + 0x6d, 0xbe, 0x6e, 0xbe, 0x6f, 0xbe, 0x70, 0x26, + 0x0c, 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0xc4, 0x01, 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, + 0x00, 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, 0xc7, + 0x01, 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, + 0x04, 0xc9, 0x01, 0x00, 0x00, 0x04, 0xca, 0x01, + 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, 0x04, + 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, + 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, 0x04, 0xcf, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, + 0x04, 0xd1, 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, + 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, + 0xd4, 0x01, 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, + 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, + 0x01, 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, + 0x04, 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, + 0x00, 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x64, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x73, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xdc, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xdc, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x76, 0x01, 0x00, 0x00, 0x4d, 0xd2, + 0x00, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x4d, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x71, 0xbe, 0x72, 0xbe, 0x73, 0xbe, + 0x74, 0xbe, 0x75, 0xbe, 0x76, 0xbe, 0x77, 0xbe, + 0x78, 0xbe, 0x79, 0xbe, 0x7a, 0xbe, 0x7b, 0xbe, + 0x7c, 0x26, 0x0c, 0x00, 0x4d, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, 0x04, 0xc5, + 0x01, 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, 0x00, + 0x04, 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, 0x01, + 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, 0x04, + 0xca, 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, + 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, + 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, + 0x04, 0xcf, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd0, 0x01, + 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, 0x04, + 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, + 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, 0xd5, + 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, + 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, 0xd8, 0x01, + 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, 0x04, + 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x73, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xdc, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xdc, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x4d, 0xd2, 0x00, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x4d, + 0x79, 0x01, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x45, 0x01, 0x00, 0x00, + 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x64, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x73, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xdd, 0x01, 0x00, + 0x00, 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, + 0x01, 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, + 0x04, 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, + 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, + 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, + 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, + 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, + 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, + 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, + 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, + 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, + 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, + 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, + 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, + 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, + 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, + 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, + 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, + 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, + 0xfc, 0x01, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, + 0xfd, 0x01, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, + 0x80, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x4d, 0x21, + 0x00, 0x00, 0x80, 0x04, 0xff, 0x01, 0x00, 0x00, + 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0x00, 0x02, + 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, + 0x01, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, + 0x80, 0x04, 0x02, 0x02, 0x00, 0x00, 0x4d, 0x25, + 0x00, 0x00, 0x80, 0x04, 0x03, 0x02, 0x00, 0x00, + 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0x04, 0x02, + 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, + 0x05, 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, + 0x80, 0x04, 0x06, 0x02, 0x00, 0x00, 0x4d, 0x29, + 0x00, 0x00, 0x80, 0x04, 0x07, 0x02, 0x00, 0x00, + 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x08, 0x02, + 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, + 0x09, 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, + 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x4d, 0x2d, + 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, 0x00, 0x00, + 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, + 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, + 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, + 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x31, + 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, + 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, + 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, + 0x11, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, + 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, 0x35, + 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, + 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, + 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, + 0x15, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, + 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, 0x39, + 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, + 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, + 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, + 0x19, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, + 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x3d, + 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, + 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, + 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, + 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, + 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x41, + 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, + 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, + 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, + 0x21, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, + 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x45, + 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, + 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, + 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, + 0x25, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, + 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x49, + 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, + 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, + 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, + 0x29, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, + 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x4d, + 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, + 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, + 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, + 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, + 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x51, + 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, + 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, + 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, + 0x31, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, + 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x55, + 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, + 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, + 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, + 0x35, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, + 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, 0x59, + 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, + 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, + 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, + 0x39, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, + 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x5d, + 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, + 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, + 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, + 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, + 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x61, + 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, + 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, + 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, + 0x41, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, + 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, 0x65, + 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, + 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, + 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, + 0x45, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, + 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x69, + 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, + 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, + 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, + 0x49, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, + 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x6d, + 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, + 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, + 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, + 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, + 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x71, + 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, + 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, + 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, + 0x51, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, + 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x75, + 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, + 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, + 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, + 0x55, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, + 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, 0x79, + 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, + 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, + 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, + 0x59, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, + 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x7d, + 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, + 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, + 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, + 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, + 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x81, + 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, + 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, + 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, + 0x61, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, + 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x85, + 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, + 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, + 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, + 0x65, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, + 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x89, + 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, + 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, + 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, + 0x69, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, + 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x8d, + 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, + 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, + 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, + 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, + 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x91, + 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, + 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, + 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, + 0x71, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, + 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0x95, + 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, + 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, + 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, + 0x75, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, + 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0x99, + 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, + 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, + 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, + 0x79, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, + 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x9d, + 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, + 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, + 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, + 0x7d, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, + 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, 0xa1, + 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, + 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, + 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, + 0x81, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, + 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0xa5, + 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, + 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, + 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, + 0x85, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, + 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0xa9, + 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, + 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, + 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, + 0x89, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, + 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0xad, + 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, + 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, + 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, + 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, + 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xb1, + 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, + 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, + 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, + 0x91, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, + 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0xb5, + 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, + 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, + 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, + 0x95, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, + 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0xb9, + 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, + 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, + 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, + 0x99, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, + 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xbd, + 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, + 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, + 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, + 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, + 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xc1, + 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, + 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, + 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, + 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, + 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xc5, + 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, + 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, + 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, + 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, + 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xc9, + 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, + 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, + 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, + 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, + 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xcd, + 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, + 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, + 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, + 0xad, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, + 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0xd1, + 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, + 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, + 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, + 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, + 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xd5, + 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, + 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, + 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, + 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xd9, + 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, + 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, + 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, + 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, + 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, + 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xe5, + 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, + 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, + 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, + 0x14, 0x01, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, + 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xe9, + 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0x02, 0x01, + 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, + 0x00, 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, + 0x01, 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, + 0x04, 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, + 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, + 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, + 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, + 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, + 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, + 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, + 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, + 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, + 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, + 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, + 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, + 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, + 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, + 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, + 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, + 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, + 0xfc, 0x01, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, + 0xfd, 0x01, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, + 0x80, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x4d, 0x21, + 0x00, 0x00, 0x80, 0x04, 0xff, 0x01, 0x00, 0x00, + 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0x00, 0x02, + 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, + 0x01, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, + 0x80, 0x04, 0x02, 0x02, 0x00, 0x00, 0x4d, 0x25, + 0x00, 0x00, 0x80, 0x04, 0x03, 0x02, 0x00, 0x00, + 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0x04, 0x02, + 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, + 0x05, 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, + 0x80, 0x04, 0x06, 0x02, 0x00, 0x00, 0x4d, 0x29, + 0x00, 0x00, 0x80, 0x04, 0x07, 0x02, 0x00, 0x00, + 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x08, 0x02, + 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, + 0x09, 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, + 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x4d, 0x2d, + 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, 0x00, 0x00, + 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, + 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, + 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, + 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x31, + 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, + 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, + 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, + 0x11, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, + 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, 0x35, + 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, + 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, + 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, + 0x15, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, + 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, 0x39, + 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, + 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, + 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, + 0x19, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, + 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x3d, + 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, + 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, + 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, + 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, + 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x41, + 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, + 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, + 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, + 0x21, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, + 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x45, + 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, + 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, + 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, + 0x25, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, + 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x49, + 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, + 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, + 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, + 0x29, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, + 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x4d, + 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, + 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, + 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, + 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, + 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x51, + 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, + 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, + 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, + 0x31, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, + 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x55, + 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, + 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, + 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, + 0x35, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, + 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, 0x59, + 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, + 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, + 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, + 0x39, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, + 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x5d, + 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, + 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, + 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, + 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, + 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x61, + 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, + 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, + 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, + 0x41, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, + 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, 0x65, + 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, + 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, + 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, + 0x45, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, + 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x69, + 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, + 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, + 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, + 0x49, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, + 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x6d, + 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, + 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, + 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, + 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, + 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x71, + 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, + 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, + 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, + 0x51, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, + 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x75, + 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, + 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, + 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, + 0x55, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, + 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, 0x79, + 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, + 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, + 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, + 0x59, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, + 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x7d, + 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, + 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, + 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, + 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, + 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x81, + 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, + 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, + 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, + 0x61, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, + 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x85, + 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, + 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, + 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, + 0x65, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, + 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x89, + 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, + 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, + 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, + 0x69, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, + 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x8d, + 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, + 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, + 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, + 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, + 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x91, + 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, + 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, + 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, + 0x71, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, + 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0x95, + 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, + 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, + 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, + 0x75, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, + 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0x99, + 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, + 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, + 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, + 0x79, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, + 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x9d, + 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, + 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, + 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, + 0x7d, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, + 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, 0xa1, + 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, + 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, + 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, + 0x81, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, + 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0xa5, + 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, + 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, + 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, + 0x85, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, + 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0xa9, + 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, + 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, + 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, + 0x89, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, + 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0xad, + 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, + 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, + 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, + 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, + 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xb1, + 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, + 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, + 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, + 0x91, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, + 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0xb5, + 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, + 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, + 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, + 0x95, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, + 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0xb9, + 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, + 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, + 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, + 0x99, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, + 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xbd, + 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, + 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, + 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, + 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, + 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xc1, + 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, + 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, + 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, + 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, + 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xc5, + 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, + 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, + 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, + 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, + 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xc9, + 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, + 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, + 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, + 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, + 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xcd, + 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, + 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, + 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, + 0xad, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, + 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0xd1, + 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, + 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, + 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, + 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, + 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xd5, + 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, + 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, + 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, + 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xd9, + 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, + 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, + 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, + 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, + 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, + 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xe5, + 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, + 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, + 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, + 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, + 0x80, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xe9, + 0x00, 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, + 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, + 0x00, 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, + 0x01, 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, + 0x04, 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, + 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, + 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, + 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, + 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, + 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, + 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, + 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, + 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, + 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, + 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, + 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, + 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, + 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, + 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, + 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, + 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, + 0xfc, 0x01, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, + 0xfd, 0x01, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, + 0x80, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x4d, 0x21, + 0x00, 0x00, 0x80, 0x04, 0xff, 0x01, 0x00, 0x00, + 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0x00, 0x02, + 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, + 0x01, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, + 0x80, 0x04, 0x02, 0x02, 0x00, 0x00, 0x4d, 0x25, + 0x00, 0x00, 0x80, 0x04, 0x03, 0x02, 0x00, 0x00, + 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0x04, 0x02, + 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, + 0x05, 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, + 0x80, 0x04, 0x06, 0x02, 0x00, 0x00, 0x4d, 0x29, + 0x00, 0x00, 0x80, 0x04, 0x07, 0x02, 0x00, 0x00, + 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x08, 0x02, + 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, + 0x09, 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, + 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x4d, 0x2d, + 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, 0x00, 0x00, + 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, + 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, + 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, + 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x31, + 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, + 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, + 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, + 0x11, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, + 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, 0x35, + 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, + 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, + 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, + 0x15, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, + 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, 0x39, + 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, + 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, + 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, + 0x19, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, + 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x3d, + 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, + 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, + 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, + 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, + 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x41, + 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, + 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, + 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, + 0x21, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, + 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x45, + 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, + 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, + 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, + 0x25, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, + 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x49, + 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, + 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, + 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, + 0x29, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, + 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x4d, + 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, + 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, + 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, + 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, + 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x51, + 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, + 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, + 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, + 0x31, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, + 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x55, + 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, + 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, + 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, + 0x35, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, + 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, 0x59, + 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, + 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, + 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, + 0x39, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, + 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x5d, + 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, + 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, + 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, + 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, + 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x61, + 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, + 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, + 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, + 0x41, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, + 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, 0x65, + 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, + 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, + 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, + 0x45, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, + 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x69, + 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, + 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, + 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, + 0x49, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, + 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x6d, + 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, + 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, + 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, + 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, + 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x71, + 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, + 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, + 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, + 0x51, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, + 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x75, + 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, + 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, + 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, + 0x55, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, + 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, 0x79, + 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, + 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, + 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, + 0x59, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, + 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x7d, + 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, + 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, + 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, + 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, + 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x81, + 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, + 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, + 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, + 0x61, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, + 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x85, + 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, + 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, + 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, + 0x65, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, + 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x89, + 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, + 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, + 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, + 0x69, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, + 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x8d, + 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, + 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, + 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, + 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, + 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x91, + 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, + 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, + 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, + 0x71, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, + 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0x95, + 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, + 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, + 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, + 0x75, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, + 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0x99, + 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, + 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, + 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, + 0x79, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, + 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x9d, + 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, + 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, + 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, + 0x7d, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, + 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, 0xa1, + 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, + 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, + 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, + 0x81, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, + 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0xa5, + 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, + 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, + 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, + 0x85, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, + 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0xa9, + 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, + 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, + 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, + 0x89, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, + 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0xad, + 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, + 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, + 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, + 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, + 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xb1, + 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, + 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, + 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, + 0x91, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, + 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0xb5, + 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, + 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, + 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, + 0x95, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, + 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0xb9, + 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, + 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, + 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, + 0x99, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, + 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xbd, + 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, + 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, + 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, + 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, + 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xc1, + 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, + 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, + 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, + 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, + 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xc5, + 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, + 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, + 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, + 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, + 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xc9, + 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, + 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, + 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, + 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, + 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xcd, + 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, + 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, + 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, + 0xad, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, + 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0xd1, + 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, + 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, + 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, + 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, + 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xd5, + 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, + 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, + 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, + 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xd9, + 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, + 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, + 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, + 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, + 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, + 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xe5, + 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, + 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, + 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, + 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, + 0x80, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xe9, + 0x00, 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, + 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x76, 0x01, 0x00, 0x00, 0x4d, + 0xd2, 0x00, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, + 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x7d, 0xbe, 0x7e, 0xbe, 0x7f, + 0xbe, 0x80, 0xbe, 0x81, 0xbe, 0x82, 0xbe, 0x83, + 0xbe, 0x84, 0xbe, 0x85, 0xbe, 0x86, 0xbe, 0x87, + 0xbe, 0x88, 0x26, 0x0c, 0x00, 0x4d, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0xcb, 0x02, 0x00, 0x00, 0x04, + 0xcc, 0x02, 0x00, 0x00, 0x04, 0xcd, 0x02, 0x00, + 0x00, 0x04, 0xce, 0x02, 0x00, 0x00, 0x04, 0xcf, + 0x02, 0x00, 0x00, 0x04, 0xd0, 0x02, 0x00, 0x00, + 0x04, 0xd1, 0x02, 0x00, 0x00, 0x04, 0xd2, 0x02, + 0x00, 0x00, 0x04, 0xd3, 0x02, 0x00, 0x00, 0x04, + 0xd4, 0x02, 0x00, 0x00, 0x04, 0xd5, 0x02, 0x00, + 0x00, 0x04, 0xd6, 0x02, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xcb, + 0x02, 0x00, 0x00, 0x04, 0xcc, 0x02, 0x00, 0x00, + 0x04, 0xcd, 0x02, 0x00, 0x00, 0x04, 0xce, 0x02, + 0x00, 0x00, 0x04, 0xcf, 0x02, 0x00, 0x00, 0x04, + 0xd0, 0x02, 0x00, 0x00, 0x04, 0xd1, 0x02, 0x00, + 0x00, 0x04, 0xd2, 0x02, 0x00, 0x00, 0x04, 0xd3, + 0x02, 0x00, 0x00, 0x04, 0xd4, 0x02, 0x00, 0x00, + 0x04, 0xd5, 0x02, 0x00, 0x00, 0x04, 0xd6, 0x02, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x73, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xd7, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0xd7, 0x02, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xd7, 0x02, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x75, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, + 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x45, 0x01, 0x00, + 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x64, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x73, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xd8, 0x02, + 0x00, 0x00, 0x04, 0xd9, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0xd8, 0x02, 0x00, 0x00, 0x04, 0xd9, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xd8, 0x02, 0x00, 0x00, 0x04, 0xd9, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x76, 0x01, 0x00, 0x00, 0x4d, 0xd2, + 0x00, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x4d, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, + 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x02, 0x00, + 0x00, 0x0b, 0x04, 0xdc, 0x02, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xdd, 0x02, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0xde, 0x02, 0x00, 0x00, 0x4d, 0xdf, + 0x02, 0x00, 0x00, 0x04, 0xe0, 0x02, 0x00, 0x00, + 0x4d, 0xe1, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x02, + 0x00, 0x00, 0x0b, 0x04, 0xe3, 0x02, 0x00, 0x00, + 0x4d, 0xdf, 0x02, 0x00, 0x00, 0x04, 0xe4, 0x02, + 0x00, 0x00, 0x4d, 0xe1, 0x02, 0x00, 0x00, 0x4d, + 0xe5, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x02, + 0x00, 0x00, 0x4d, 0xdf, 0x02, 0x00, 0x00, 0x04, + 0xe7, 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x02, 0x00, + 0x00, 0x4d, 0xe8, 0x02, 0x00, 0x00, 0x4d, 0xe9, + 0x02, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xea, 0x02, + 0x00, 0x00, 0x4d, 0xe2, 0x02, 0x00, 0x00, 0x04, + 0xeb, 0x02, 0x00, 0x00, 0x4d, 0xec, 0x02, 0x00, + 0x00, 0x04, 0xed, 0x02, 0x00, 0x00, 0x4d, 0xee, + 0x02, 0x00, 0x00, 0x04, 0xef, 0x02, 0x00, 0x00, + 0x4d, 0xf0, 0x02, 0x00, 0x00, 0x04, 0xf1, 0x02, + 0x00, 0x00, 0x4d, 0xf2, 0x02, 0x00, 0x00, 0x04, + 0xf3, 0x02, 0x00, 0x00, 0x4d, 0xf4, 0x02, 0x00, + 0x00, 0x04, 0xf5, 0x02, 0x00, 0x00, 0x4d, 0xf6, + 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x02, 0x00, 0x00, + 0x4d, 0xf7, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xf8, + 0x02, 0x00, 0x00, 0x4d, 0xf9, 0x02, 0x00, 0x00, + 0x04, 0xfa, 0x02, 0x00, 0x00, 0x4d, 0xfb, 0x02, + 0x00, 0x00, 0x04, 0xfc, 0x02, 0x00, 0x00, 0x4d, + 0xfd, 0x02, 0x00, 0x00, 0x04, 0xfe, 0x02, 0x00, + 0x00, 0x4d, 0xff, 0x02, 0x00, 0x00, 0x04, 0x00, + 0x03, 0x00, 0x00, 0x4d, 0x01, 0x03, 0x00, 0x00, + 0x04, 0x02, 0x03, 0x00, 0x00, 0x4d, 0x03, 0x03, + 0x00, 0x00, 0x04, 0x04, 0x03, 0x00, 0x00, 0x4d, + 0x05, 0x03, 0x00, 0x00, 0x04, 0x06, 0x03, 0x00, + 0x00, 0x4d, 0x07, 0x03, 0x00, 0x00, 0x04, 0x08, + 0x03, 0x00, 0x00, 0x4d, 0x09, 0x03, 0x00, 0x00, + 0x04, 0x0a, 0x03, 0x00, 0x00, 0x4d, 0x0b, 0x03, + 0x00, 0x00, 0x04, 0x0c, 0x03, 0x00, 0x00, 0x4d, + 0x0d, 0x03, 0x00, 0x00, 0x04, 0x0e, 0x03, 0x00, + 0x00, 0x4d, 0x0f, 0x03, 0x00, 0x00, 0x04, 0x10, + 0x03, 0x00, 0x00, 0x4d, 0x11, 0x03, 0x00, 0x00, + 0x04, 0x12, 0x03, 0x00, 0x00, 0x4d, 0x13, 0x03, + 0x00, 0x00, 0x04, 0x14, 0x03, 0x00, 0x00, 0x4d, + 0x15, 0x03, 0x00, 0x00, 0x04, 0x16, 0x03, 0x00, + 0x00, 0x4d, 0x17, 0x03, 0x00, 0x00, 0x04, 0x18, + 0x03, 0x00, 0x00, 0x4d, 0x19, 0x03, 0x00, 0x00, + 0x04, 0x1a, 0x03, 0x00, 0x00, 0x4d, 0x1b, 0x03, + 0x00, 0x00, 0x04, 0x1c, 0x03, 0x00, 0x00, 0x4d, + 0x1d, 0x03, 0x00, 0x00, 0x04, 0x1e, 0x03, 0x00, + 0x00, 0x4d, 0x1f, 0x03, 0x00, 0x00, 0x04, 0x20, + 0x03, 0x00, 0x00, 0x4d, 0x21, 0x03, 0x00, 0x00, + 0x04, 0x22, 0x03, 0x00, 0x00, 0x4d, 0x23, 0x03, + 0x00, 0x00, 0x4d, 0x24, 0x03, 0x00, 0x00, 0x4d, + 0x45, 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, 0xcc, + 0x28, 0xca, 0x0c, 0x01, 0x00, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, + 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_ar_size = 29266; + +const uint8_t intl_ar[29266] = { + 0x01, 0xf4, 0x06, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x61, 0x72, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x0e, + 0x7b, 0x31, 0x7d, 0x20, 0x7b, 0x30, 0x7d, 0x0a, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, 0x65, + 0x64, 0x69, 0x75, 0x6d, 0x08, 0x66, 0x75, 0x6c, + 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x02, 0x64, + 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, 0x09, 0x45, + 0x00, 0x0c, 0x06, 0x20, 0x00, 0x64, 0x00, 0x04, + 0x45, 0x64, 0x10, 0x45, 0x20, 0x68, 0x3a, 0x6d, + 0x6d, 0x20, 0x61, 0x06, 0x45, 0x68, 0x6d, 0x0e, + 0x45, 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x06, + 0x45, 0x48, 0x6d, 0x16, 0x45, 0x20, 0x68, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x08, + 0x45, 0x68, 0x6d, 0x73, 0x14, 0x45, 0x20, 0x48, + 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x08, + 0x45, 0x48, 0x6d, 0x73, 0x06, 0x79, 0x20, 0x47, + 0x04, 0x47, 0x79, 0x0e, 0x4d, 0x4d, 0x4d, 0x20, + 0x79, 0x20, 0x47, 0x0a, 0x47, 0x79, 0x4d, 0x4d, + 0x4d, 0x15, 0x64, 0x00, 0x20, 0x00, 0x4d, 0x00, + 0x4d, 0x00, 0x4d, 0x00, 0x0c, 0x06, 0x20, 0x00, + 0x79, 0x00, 0x20, 0x00, 0x47, 0x00, 0x0c, 0x47, + 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x1b, 0x45, 0x00, + 0x0c, 0x06, 0x20, 0x00, 0x64, 0x00, 0x20, 0x00, + 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x0c, 0x06, + 0x20, 0x00, 0x79, 0x00, 0x20, 0x00, 0x47, 0x00, + 0x0e, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, + 0x06, 0x68, 0x20, 0x61, 0x02, 0x68, 0x04, 0x48, + 0x48, 0x02, 0x48, 0x0c, 0x68, 0x3a, 0x6d, 0x6d, + 0x20, 0x61, 0x04, 0x68, 0x6d, 0x0a, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x04, 0x48, 0x6d, 0x12, 0x68, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, + 0x06, 0x68, 0x6d, 0x73, 0x10, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x06, 0x48, 0x6d, + 0x73, 0x16, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x61, 0x20, 0x76, 0x08, 0x68, 0x6d, + 0x73, 0x76, 0x14, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x76, 0x08, 0x48, 0x6d, + 0x73, 0x76, 0x10, 0x68, 0x3a, 0x6d, 0x6d, 0x20, + 0x61, 0x20, 0x76, 0x06, 0x68, 0x6d, 0x76, 0x0e, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x20, 0x76, 0x06, + 0x48, 0x6d, 0x76, 0x02, 0x4c, 0x02, 0x4d, 0x09, + 0x64, 0x00, 0x2f, 0x00, 0x0f, 0x20, 0x4d, 0x00, + 0x04, 0x4d, 0x64, 0x0d, 0x45, 0x00, 0x0c, 0x06, + 0x20, 0x00, 0x64, 0x00, 0x2f, 0x00, 0x4d, 0x00, + 0x06, 0x4d, 0x45, 0x64, 0x0d, 0x64, 0x00, 0x64, + 0x00, 0x0f, 0x20, 0x2f, 0x00, 0x4d, 0x00, 0x4d, + 0x00, 0x08, 0x4d, 0x4d, 0x64, 0x64, 0x06, 0x4c, + 0x4c, 0x4c, 0x06, 0x4d, 0x4d, 0x4d, 0x0a, 0x64, + 0x20, 0x4d, 0x4d, 0x4d, 0x08, 0x4d, 0x4d, 0x4d, + 0x64, 0x11, 0x45, 0x00, 0x0c, 0x06, 0x20, 0x00, + 0x64, 0x00, 0x20, 0x00, 0x4d, 0x00, 0x4d, 0x00, + 0x4d, 0x00, 0x0a, 0x4d, 0x4d, 0x4d, 0x45, 0x64, + 0x0c, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, + 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x13, 0x45, 0x00, + 0x0c, 0x06, 0x20, 0x00, 0x64, 0x00, 0x20, 0x00, + 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, + 0x0c, 0x4d, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x04, 0x6d, 0x73, + 0x02, 0x79, 0x09, 0x4d, 0x00, 0x0f, 0x20, 0x2f, + 0x00, 0x79, 0x00, 0x04, 0x79, 0x4d, 0x0f, 0x64, + 0x00, 0x0f, 0x20, 0x2f, 0x00, 0x4d, 0x00, 0x0f, + 0x20, 0x2f, 0x00, 0x79, 0x00, 0x06, 0x79, 0x4d, + 0x64, 0x15, 0x45, 0x00, 0x0c, 0x06, 0x20, 0x00, + 0x64, 0x00, 0x2f, 0x00, 0x0f, 0x20, 0x4d, 0x00, + 0x2f, 0x00, 0x0f, 0x20, 0x79, 0x00, 0x08, 0x79, + 0x4d, 0x45, 0x64, 0x0b, 0x4d, 0x00, 0x4d, 0x00, + 0x0f, 0x20, 0x2f, 0x00, 0x79, 0x00, 0x06, 0x79, + 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x20, 0x79, + 0x08, 0x79, 0x4d, 0x4d, 0x4d, 0x11, 0x64, 0x00, + 0x20, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, + 0x0c, 0x06, 0x20, 0x00, 0x79, 0x00, 0x0a, 0x79, + 0x4d, 0x4d, 0x4d, 0x64, 0x17, 0x45, 0x00, 0x0c, + 0x06, 0x20, 0x00, 0x64, 0x00, 0x20, 0x00, 0x4d, + 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x0c, 0x06, 0x20, + 0x00, 0x79, 0x00, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, + 0x45, 0x64, 0x0c, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, + 0x79, 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, + 0x51, 0x51, 0x51, 0x20, 0x79, 0x08, 0x79, 0x51, + 0x51, 0x51, 0x0c, 0x51, 0x51, 0x51, 0x51, 0x20, + 0x79, 0x0a, 0x79, 0x51, 0x51, 0x51, 0x51, 0x20, + 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, + 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, + 0x1f, 0x45, 0x00, 0x45, 0x00, 0x45, 0x00, 0x45, + 0x00, 0x0c, 0x06, 0x20, 0x00, 0x64, 0x00, 0x20, + 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x4d, + 0x00, 0x0c, 0x06, 0x20, 0x00, 0x79, 0x00, 0x14, + 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x45, 0x45, 0x45, + 0x45, 0x64, 0x13, 0x64, 0x00, 0x20, 0x00, 0x4d, + 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x0c, + 0x06, 0x20, 0x00, 0x79, 0x00, 0x0c, 0x79, 0x4d, + 0x4d, 0x4d, 0x4d, 0x64, 0x13, 0x64, 0x00, 0x64, + 0x00, 0x0f, 0x20, 0x2f, 0x00, 0x4d, 0x00, 0x4d, + 0x00, 0x0f, 0x20, 0x2f, 0x00, 0x79, 0x00, 0x16, + 0x64, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x73, 0x1c, 0x68, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x61, 0x20, 0x7a, 0x7a, + 0x7a, 0x7a, 0x12, 0x68, 0x6d, 0x6d, 0x73, 0x73, + 0x7a, 0x7a, 0x7a, 0x7a, 0x16, 0x68, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x20, 0x7a, + 0x08, 0x68, 0x6d, 0x73, 0x7a, 0x16, 0x74, 0x69, + 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x73, 0x0e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x73, 0x03, 0x4a, 0x06, 0x03, 0x41, 0x06, 0x03, + 0x45, 0x06, 0x03, 0x23, 0x06, 0x03, 0x48, 0x06, + 0x03, 0x46, 0x06, 0x03, 0x44, 0x06, 0x03, 0x3a, + 0x06, 0x03, 0x33, 0x06, 0x03, 0x43, 0x06, 0x03, + 0x28, 0x06, 0x03, 0x2f, 0x06, 0x0c, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x0b, 0x4a, 0x06, 0x46, + 0x06, 0x27, 0x06, 0x4a, 0x06, 0x31, 0x06, 0x0d, + 0x41, 0x06, 0x28, 0x06, 0x31, 0x06, 0x27, 0x06, + 0x4a, 0x06, 0x31, 0x06, 0x09, 0x45, 0x06, 0x27, + 0x06, 0x31, 0x06, 0x33, 0x06, 0x0b, 0x23, 0x06, + 0x28, 0x06, 0x31, 0x06, 0x4a, 0x06, 0x44, 0x06, + 0x09, 0x45, 0x06, 0x27, 0x06, 0x4a, 0x06, 0x48, + 0x06, 0x0b, 0x4a, 0x06, 0x48, 0x06, 0x46, 0x06, + 0x4a, 0x06, 0x48, 0x06, 0x0b, 0x4a, 0x06, 0x48, + 0x06, 0x44, 0x06, 0x4a, 0x06, 0x48, 0x06, 0x0b, + 0x23, 0x06, 0x3a, 0x06, 0x33, 0x06, 0x37, 0x06, + 0x33, 0x06, 0x0d, 0x33, 0x06, 0x28, 0x06, 0x2a, + 0x06, 0x45, 0x06, 0x28, 0x06, 0x31, 0x06, 0x0d, + 0x23, 0x06, 0x43, 0x06, 0x2a, 0x06, 0x48, 0x06, + 0x28, 0x06, 0x31, 0x06, 0x0d, 0x46, 0x06, 0x48, + 0x06, 0x41, 0x06, 0x45, 0x06, 0x28, 0x06, 0x31, + 0x06, 0x0d, 0x2f, 0x06, 0x4a, 0x06, 0x33, 0x06, + 0x45, 0x06, 0x28, 0x06, 0x31, 0x06, 0x0c, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x73, 0x03, 0x2d, 0x06, + 0x03, 0x2b, 0x06, 0x03, 0x31, 0x06, 0x03, 0x2e, + 0x06, 0x03, 0x2c, 0x06, 0x0b, 0x27, 0x06, 0x44, + 0x06, 0x23, 0x06, 0x2d, 0x06, 0x2f, 0x06, 0x0f, + 0x27, 0x06, 0x44, 0x06, 0x27, 0x06, 0x2b, 0x06, + 0x46, 0x06, 0x4a, 0x06, 0x46, 0x06, 0x11, 0x27, + 0x06, 0x44, 0x06, 0x2b, 0x06, 0x44, 0x06, 0x27, + 0x06, 0x2b, 0x06, 0x27, 0x06, 0x21, 0x06, 0x11, + 0x27, 0x06, 0x44, 0x06, 0x23, 0x06, 0x31, 0x06, + 0x28, 0x06, 0x39, 0x06, 0x27, 0x06, 0x21, 0x06, + 0x0d, 0x27, 0x06, 0x44, 0x06, 0x2e, 0x06, 0x45, + 0x06, 0x4a, 0x06, 0x33, 0x06, 0x0d, 0x27, 0x06, + 0x44, 0x06, 0x2c, 0x06, 0x45, 0x06, 0x39, 0x06, + 0x29, 0x06, 0x0b, 0x27, 0x06, 0x44, 0x06, 0x33, + 0x06, 0x28, 0x06, 0x2a, 0x06, 0x08, 0x64, 0x61, + 0x79, 0x73, 0x04, 0x42, 0x45, 0x1d, 0x27, 0x06, + 0x44, 0x06, 0x2a, 0x06, 0x42, 0x06, 0x48, 0x06, + 0x4a, 0x06, 0x45, 0x06, 0x20, 0x00, 0x27, 0x06, + 0x44, 0x06, 0x28, 0x06, 0x48, 0x06, 0x30, 0x06, + 0x4a, 0x06, 0x08, 0x65, 0x72, 0x61, 0x73, 0x03, + 0x35, 0x06, 0x04, 0x61, 0x6d, 0x04, 0x70, 0x6d, + 0x14, 0x64, 0x61, 0x79, 0x50, 0x65, 0x72, 0x69, + 0x6f, 0x64, 0x73, 0x06, 0x4d, 0x30, 0x31, 0x06, + 0x4d, 0x30, 0x32, 0x06, 0x4d, 0x30, 0x33, 0x06, + 0x4d, 0x30, 0x34, 0x06, 0x4d, 0x30, 0x35, 0x06, + 0x4d, 0x30, 0x36, 0x06, 0x4d, 0x30, 0x37, 0x06, + 0x4d, 0x30, 0x38, 0x06, 0x4d, 0x30, 0x39, 0x06, + 0x4d, 0x31, 0x30, 0x06, 0x4d, 0x31, 0x31, 0x06, + 0x4d, 0x31, 0x32, 0x03, 0x61, 0x06, 0x03, 0x62, + 0x06, 0x03, 0x63, 0x06, 0x03, 0x64, 0x06, 0x03, + 0x65, 0x06, 0x03, 0x66, 0x06, 0x03, 0x67, 0x06, + 0x03, 0x68, 0x06, 0x03, 0x69, 0x06, 0x05, 0x61, + 0x06, 0x60, 0x06, 0x05, 0x61, 0x06, 0x61, 0x06, + 0x05, 0x61, 0x06, 0x62, 0x06, 0x05, 0x61, 0x06, + 0x63, 0x06, 0x07, 0x2a, 0x06, 0x48, 0x06, 0x2a, + 0x06, 0x09, 0x28, 0x06, 0x27, 0x06, 0x28, 0x06, + 0x47, 0x06, 0x0b, 0x47, 0x06, 0x27, 0x06, 0x2a, + 0x06, 0x48, 0x06, 0x31, 0x06, 0x09, 0x43, 0x06, + 0x4a, 0x06, 0x47, 0x06, 0x43, 0x06, 0x09, 0x37, + 0x06, 0x48, 0x06, 0x28, 0x06, 0x29, 0x06, 0x0b, + 0x23, 0x06, 0x45, 0x06, 0x34, 0x06, 0x4a, 0x06, + 0x31, 0x06, 0x0d, 0x28, 0x06, 0x31, 0x06, 0x45, + 0x06, 0x47, 0x06, 0x27, 0x06, 0x2a, 0x06, 0x0d, + 0x28, 0x06, 0x31, 0x06, 0x45, 0x06, 0x48, 0x06, + 0x2f, 0x06, 0x29, 0x06, 0x09, 0x28, 0x06, 0x34, + 0x06, 0x46, 0x06, 0x33, 0x06, 0x0b, 0x28, 0x06, + 0x24, 0x06, 0x48, 0x06, 0x46, 0x06, 0x29, 0x06, + 0x09, 0x23, 0x06, 0x28, 0x06, 0x4a, 0x06, 0x28, + 0x06, 0x09, 0x45, 0x06, 0x33, 0x06, 0x31, 0x06, + 0x49, 0x06, 0x09, 0x46, 0x06, 0x33, 0x06, 0x4a, + 0x06, 0x26, 0x06, 0x08, 0x45, 0x52, 0x41, 0x30, + 0x08, 0x45, 0x52, 0x41, 0x31, 0x0d, 0x45, 0x06, + 0x33, 0x06, 0x43, 0x06, 0x31, 0x06, 0x4a, 0x06, + 0x45, 0x06, 0x09, 0x2a, 0x06, 0x43, 0x06, 0x45, + 0x06, 0x2a, 0x06, 0x09, 0x47, 0x06, 0x2f, 0x06, + 0x27, 0x06, 0x31, 0x06, 0x0b, 0x2a, 0x06, 0x47, + 0x06, 0x33, 0x06, 0x27, 0x06, 0x33, 0x06, 0x05, + 0x2a, 0x06, 0x31, 0x06, 0x09, 0x4a, 0x06, 0x43, + 0x06, 0x2a, 0x06, 0x2a, 0x06, 0x0d, 0x45, 0x06, + 0x2c, 0x06, 0x27, 0x06, 0x28, 0x06, 0x4a, 0x06, + 0x2a, 0x06, 0x0d, 0x45, 0x06, 0x4a, 0x06, 0x27, + 0x06, 0x32, 0x06, 0x4a, 0x06, 0x27, 0x06, 0x09, + 0x2c, 0x06, 0x46, 0x06, 0x28, 0x06, 0x2a, 0x06, + 0x07, 0x33, 0x06, 0x4a, 0x06, 0x46, 0x06, 0x09, + 0x47, 0x06, 0x27, 0x06, 0x45, 0x06, 0x44, 0x06, + 0x09, 0x46, 0x06, 0x47, 0x06, 0x27, 0x06, 0x33, + 0x06, 0x0b, 0x28, 0x06, 0x27, 0x06, 0x2c, 0x06, + 0x45, 0x06, 0x46, 0x06, 0x07, 0x42, 0x06, 0x2e, + 0x00, 0x45, 0x06, 0x06, 0x42, 0x43, 0x45, 0x07, + 0x28, 0x06, 0x2e, 0x00, 0x45, 0x06, 0x17, 0x42, + 0x06, 0x28, 0x06, 0x44, 0x06, 0x20, 0x00, 0x27, + 0x06, 0x44, 0x06, 0x45, 0x06, 0x4a, 0x06, 0x44, + 0x06, 0x27, 0x06, 0x2f, 0x06, 0x0d, 0x45, 0x06, + 0x4a, 0x06, 0x44, 0x06, 0x27, 0x06, 0x2f, 0x06, + 0x4a, 0x06, 0x17, 0x28, 0x06, 0x39, 0x06, 0x2f, + 0x06, 0x20, 0x00, 0x27, 0x06, 0x44, 0x06, 0x45, + 0x06, 0x4a, 0x06, 0x44, 0x06, 0x27, 0x06, 0x2f, + 0x06, 0x09, 0x2a, 0x06, 0x34, 0x06, 0x31, 0x06, + 0x4a, 0x06, 0x0f, 0x45, 0x06, 0x31, 0x06, 0x2d, + 0x06, 0x34, 0x06, 0x48, 0x06, 0x27, 0x06, 0x46, + 0x06, 0x0b, 0x43, 0x06, 0x4a, 0x06, 0x33, 0x06, + 0x44, 0x06, 0x48, 0x06, 0x09, 0x37, 0x06, 0x4a, + 0x06, 0x41, 0x06, 0x2a, 0x06, 0x09, 0x34, 0x06, + 0x28, 0x06, 0x27, 0x06, 0x37, 0x06, 0x15, 0x22, + 0x06, 0x30, 0x06, 0x27, 0x06, 0x31, 0x06, 0x20, + 0x00, 0x27, 0x06, 0x44, 0x06, 0x23, 0x06, 0x48, + 0x06, 0x44, 0x06, 0x09, 0x22, 0x06, 0x30, 0x06, + 0x27, 0x06, 0x31, 0x06, 0x0b, 0x46, 0x06, 0x4a, + 0x06, 0x33, 0x06, 0x27, 0x06, 0x46, 0x06, 0x09, + 0x23, 0x06, 0x4a, 0x06, 0x27, 0x06, 0x31, 0x06, + 0x0b, 0x33, 0x06, 0x4a, 0x06, 0x41, 0x06, 0x27, + 0x06, 0x46, 0x06, 0x09, 0x2a, 0x06, 0x45, 0x06, + 0x48, 0x06, 0x32, 0x06, 0x05, 0x22, 0x06, 0x28, + 0x06, 0x0b, 0x23, 0x06, 0x4a, 0x06, 0x44, 0x06, + 0x48, 0x06, 0x44, 0x06, 0x17, 0x22, 0x06, 0x30, + 0x06, 0x27, 0x06, 0x31, 0x06, 0x20, 0x00, 0x27, + 0x06, 0x44, 0x06, 0x2b, 0x06, 0x27, 0x06, 0x46, + 0x06, 0x4a, 0x06, 0x0e, 0x43, 0x68, 0x61, 0x69, + 0x74, 0x72, 0x61, 0x10, 0x56, 0x61, 0x69, 0x73, + 0x61, 0x6b, 0x68, 0x61, 0x10, 0x4a, 0x79, 0x61, + 0x69, 0x73, 0x74, 0x68, 0x61, 0x0c, 0x41, 0x73, + 0x61, 0x64, 0x68, 0x61, 0x0e, 0x53, 0x72, 0x61, + 0x76, 0x61, 0x6e, 0x61, 0x0c, 0x42, 0x68, 0x61, + 0x64, 0x72, 0x61, 0x0c, 0x41, 0x73, 0x76, 0x69, + 0x6e, 0x61, 0x0e, 0x4b, 0x61, 0x72, 0x74, 0x69, + 0x6b, 0x61, 0x14, 0x41, 0x67, 0x72, 0x61, 0x68, + 0x61, 0x79, 0x61, 0x6e, 0x61, 0x0a, 0x50, 0x61, + 0x75, 0x73, 0x61, 0x0a, 0x4d, 0x61, 0x67, 0x68, + 0x61, 0x10, 0x50, 0x68, 0x61, 0x6c, 0x67, 0x75, + 0x6e, 0x61, 0x08, 0x53, 0x61, 0x6b, 0x61, 0x09, + 0x45, 0x06, 0x2d, 0x06, 0x31, 0x06, 0x45, 0x06, + 0x07, 0x35, 0x06, 0x41, 0x06, 0x31, 0x06, 0x15, + 0x31, 0x06, 0x28, 0x06, 0x4a, 0x06, 0x39, 0x06, + 0x20, 0x00, 0x27, 0x06, 0x44, 0x06, 0x23, 0x06, + 0x48, 0x06, 0x44, 0x06, 0x15, 0x31, 0x06, 0x28, + 0x06, 0x4a, 0x06, 0x39, 0x06, 0x20, 0x00, 0x27, + 0x06, 0x44, 0x06, 0x22, 0x06, 0x2e, 0x06, 0x31, + 0x06, 0x19, 0x2c, 0x06, 0x45, 0x06, 0x27, 0x06, + 0x2f, 0x06, 0x49, 0x06, 0x20, 0x00, 0x27, 0x06, + 0x44, 0x06, 0x23, 0x06, 0x48, 0x06, 0x44, 0x06, + 0x49, 0x06, 0x19, 0x2c, 0x06, 0x45, 0x06, 0x27, + 0x06, 0x2f, 0x06, 0x49, 0x06, 0x20, 0x00, 0x27, + 0x06, 0x44, 0x06, 0x22, 0x06, 0x2e, 0x06, 0x31, + 0x06, 0x29, 0x06, 0x07, 0x31, 0x06, 0x2c, 0x06, + 0x28, 0x06, 0x0b, 0x34, 0x06, 0x39, 0x06, 0x28, + 0x06, 0x27, 0x06, 0x46, 0x06, 0x0b, 0x31, 0x06, + 0x45, 0x06, 0x36, 0x06, 0x27, 0x06, 0x46, 0x06, + 0x09, 0x34, 0x06, 0x48, 0x06, 0x27, 0x06, 0x44, + 0x06, 0x13, 0x30, 0x06, 0x48, 0x06, 0x20, 0x00, + 0x27, 0x06, 0x44, 0x06, 0x42, 0x06, 0x39, 0x06, + 0x2f, 0x06, 0x29, 0x06, 0x11, 0x30, 0x06, 0x48, + 0x06, 0x20, 0x00, 0x27, 0x06, 0x44, 0x06, 0x2d, + 0x06, 0x2c, 0x06, 0x29, 0x06, 0x05, 0x47, 0x06, + 0x40, 0x06, 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x36, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x36, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, + 0x68, 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x54, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x1d, 0x57, 0x00, 0x61, + 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x1f, 0x52, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x1d, 0x59, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x37, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x2d, 0x00, 0x6b, 0x00, 0x61, 0x00, + 0x6d, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x2d, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x2b, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x2d, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, 0x2a, + 0x4a, 0x69, 0x6e, 0x67, 0x6f, 0x2d, 0x6b, 0x65, + 0x69, 0x75, 0x6e, 0x20, 0x28, 0x37, 0x36, 0x37, + 0x2d, 0x37, 0x37, 0x30, 0x29, 0x1d, 0x48, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x1f, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x2d, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x2d, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x38, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x1f, 0x44, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1d, 0x4a, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x1d, 0x4b, 0x00, 0x61, 0x00, 0x6a, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1f, 0x53, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x20, 0x54, 0x65, 0x6e, 0x2d, + 0x61, 0x6e, 0x20, 0x28, 0x38, 0x35, 0x37, 0x2d, + 0x38, 0x35, 0x39, 0x29, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x74, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x1f, 0x45, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1b, 0x4c, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x1d, 0x41, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x1f, 0x45, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x1d, 0x45, 0x00, 0x69, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, + 0x69, 0x00, 0x73, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x39, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4a, + 0x00, 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x35, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, 0x4a, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x29, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4c, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x4a, + 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, 0x24, + 0x54, 0x65, 0x6e, 0x2d, 0x65, 0x69, 0x20, 0x28, + 0x31, 0x31, 0x31, 0x30, 0x2d, 0x31, 0x31, 0x31, + 0x33, 0x29, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x44, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x48, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x48, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x27, 0x45, 0x00, 0x69, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x68, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x6d, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x61, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x69, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x59, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x21, 0x4a, 0x00, 0x75, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x29, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x29, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, + 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x41, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, + 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x29, 0x00, 0x27, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x75, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x29, 0x52, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x4e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x4c, 0x01, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6d, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, + 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, + 0x4c, 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x74, + 0x00, 0x73, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x27, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x21, 0x4c, 0x01, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, + 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x21, 0x4d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, + 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x72, 0x00, + 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4d, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, 0x45, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, + 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x48, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x65, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, + 0x41, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x02, 0x54, 0x02, + 0x53, 0x09, 0x2a, 0x06, 0x4a, 0x06, 0x43, 0x06, + 0x27, 0x06, 0x0d, 0x47, 0x06, 0x27, 0x06, 0x43, + 0x06, 0x2a, 0x06, 0x34, 0x06, 0x4a, 0x06, 0x0b, + 0x47, 0x06, 0x27, 0x06, 0x43, 0x06, 0x47, 0x06, + 0x48, 0x06, 0x09, 0x34, 0x06, 0x2a, 0x06, 0x34, + 0x06, 0x48, 0x06, 0x09, 0x2a, 0x06, 0x4a, 0x06, + 0x47, 0x06, 0x48, 0x06, 0x09, 0x43, 0x06, 0x4a, + 0x06, 0x4a, 0x06, 0x46, 0x06, 0x09, 0x48, 0x06, + 0x27, 0x06, 0x2f, 0x06, 0x48, 0x06, 0x0b, 0x31, + 0x06, 0x4a, 0x06, 0x4a, 0x06, 0x43, 0x06, 0x4a, + 0x06, 0x09, 0x4a, 0x06, 0x48, 0x06, 0x31, 0x06, + 0x48, 0x06, 0x0b, 0x2c, 0x06, 0x4a, 0x06, 0x46, + 0x06, 0x43, 0x06, 0x4a, 0x06, 0x0b, 0x2a, 0x06, + 0x45, 0x06, 0x28, 0x06, 0x4a, 0x06, 0x48, 0x06, + 0x17, 0x2a, 0x06, 0x45, 0x06, 0x28, 0x06, 0x4a, + 0x06, 0x48, 0x06, 0x2d, 0x00, 0x43, 0x06, 0x27, + 0x06, 0x45, 0x06, 0x28, 0x06, 0x48, 0x06, 0x15, + 0x2a, 0x06, 0x45, 0x06, 0x28, 0x06, 0x4a, 0x06, + 0x48, 0x06, 0x2d, 0x00, 0x34, 0x06, 0x48, 0x06, + 0x47, 0x06, 0x48, 0x06, 0x15, 0x2a, 0x06, 0x45, + 0x06, 0x28, 0x06, 0x4a, 0x06, 0x48, 0x06, 0x2d, + 0x00, 0x47, 0x06, 0x48, 0x06, 0x2c, 0x06, 0x4a, + 0x06, 0x15, 0x2a, 0x06, 0x45, 0x06, 0x41, 0x06, + 0x48, 0x06, 0x2d, 0x00, 0x2c, 0x06, 0x4a, 0x06, + 0x46, 0x06, 0x2c, 0x06, 0x48, 0x06, 0x15, 0x2c, + 0x06, 0x4a, 0x06, 0x46, 0x06, 0x2c, 0x06, 0x48, + 0x06, 0x2d, 0x00, 0x43, 0x06, 0x4a, 0x06, 0x4a, + 0x06, 0x46, 0x06, 0x09, 0x47, 0x06, 0x48, 0x06, + 0x43, 0x06, 0x4a, 0x06, 0x0b, 0x2a, 0x06, 0x46, + 0x06, 0x2d, 0x00, 0x23, 0x06, 0x48, 0x06, 0x0f, + 0x25, 0x06, 0x46, 0x06, 0x31, 0x06, 0x4a, 0x06, + 0x27, 0x06, 0x43, 0x06, 0x48, 0x06, 0x09, 0x2f, + 0x06, 0x4a, 0x06, 0x2f, 0x06, 0x48, 0x06, 0x0b, + 0x43, 0x06, 0x48, 0x06, 0x46, 0x06, 0x4a, 0x06, + 0x46, 0x06, 0x0b, 0x2a, 0x06, 0x46, 0x06, 0x2a, + 0x06, 0x34, 0x06, 0x48, 0x06, 0x1f, 0x34, 0x06, + 0x48, 0x06, 0x48, 0x06, 0x27, 0x06, 0x20, 0x00, + 0x28, 0x00, 0x68, 0x06, 0x63, 0x06, 0x64, 0x06, + 0x13, 0x20, 0x68, 0x06, 0x64, 0x06, 0x68, 0x06, + 0x29, 0x00, 0x0f, 0x20, 0x09, 0x43, 0x06, 0x27, + 0x06, 0x2c, 0x06, 0x48, 0x06, 0x0b, 0x46, 0x06, + 0x4a, 0x06, 0x46, 0x06, 0x2c, 0x06, 0x48, 0x06, + 0x09, 0x33, 0x06, 0x4a, 0x06, 0x43, 0x06, 0x48, + 0x06, 0x09, 0x2a, 0x06, 0x46, 0x06, 0x27, 0x06, + 0x46, 0x06, 0x0b, 0x2c, 0x06, 0x48, 0x06, 0x2c, + 0x06, 0x27, 0x06, 0x46, 0x06, 0x0d, 0x2c, 0x06, + 0x4a, 0x06, 0x46, 0x06, 0x43, 0x06, 0x4a, 0x06, + 0x4a, 0x06, 0x09, 0x46, 0x06, 0x4a, 0x06, 0x46, + 0x06, 0x27, 0x06, 0x0d, 0x43, 0x06, 0x27, 0x06, + 0x45, 0x06, 0x28, 0x06, 0x4a, 0x06, 0x48, 0x06, + 0x0b, 0x34, 0x06, 0x48, 0x06, 0x2a, 0x06, 0x27, + 0x06, 0x4a, 0x06, 0x09, 0x27, 0x06, 0x46, 0x06, + 0x2c, 0x06, 0x4a, 0x06, 0x0b, 0x27, 0x06, 0x46, + 0x06, 0x2a, 0x06, 0x34, 0x06, 0x48, 0x06, 0x0b, + 0x34, 0x06, 0x48, 0x06, 0x47, 0x06, 0x4a, 0x06, + 0x4a, 0x06, 0x0b, 0x2a, 0x06, 0x46, 0x06, 0x2c, + 0x06, 0x4a, 0x06, 0x48, 0x06, 0x0f, 0x2a, 0x06, + 0x46, 0x06, 0x31, 0x06, 0x4a, 0x06, 0x27, 0x06, + 0x43, 0x06, 0x48, 0x06, 0x0d, 0x2a, 0x06, 0x46, + 0x06, 0x2a, 0x06, 0x48, 0x06, 0x43, 0x06, 0x48, + 0x06, 0x09, 0x23, 0x06, 0x48, 0x06, 0x48, 0x06, + 0x27, 0x06, 0x09, 0x43, 0x06, 0x48, 0x06, 0x47, + 0x06, 0x48, 0x06, 0x07, 0x22, 0x06, 0x46, 0x06, + 0x27, 0x06, 0x0f, 0x2a, 0x06, 0x4a, 0x06, 0x46, + 0x06, 0x31, 0x06, 0x48, 0x06, 0x43, 0x06, 0x48, + 0x06, 0x0b, 0x2a, 0x06, 0x46, 0x06, 0x2d, 0x00, + 0x46, 0x06, 0x46, 0x06, 0x09, 0x2c, 0x06, 0x48, + 0x06, 0x2c, 0x06, 0x46, 0x06, 0x09, 0x2a, 0x06, + 0x46, 0x06, 0x2c, 0x06, 0x46, 0x06, 0x0b, 0x25, + 0x06, 0x4a, 0x06, 0x43, 0x06, 0x27, 0x06, 0x46, + 0x06, 0x09, 0x43, 0x06, 0x27, 0x06, 0x46, 0x06, + 0x27, 0x06, 0x0b, 0x27, 0x06, 0x4a, 0x06, 0x2d, + 0x00, 0x27, 0x06, 0x46, 0x06, 0x09, 0x27, 0x06, + 0x4a, 0x06, 0x33, 0x06, 0x48, 0x06, 0x25, 0x34, + 0x06, 0x48, 0x06, 0x31, 0x06, 0x4a, 0x06, 0x27, + 0x06, 0x43, 0x06, 0x48, 0x06, 0x20, 0x00, 0x28, + 0x00, 0x69, 0x06, 0x69, 0x06, 0x60, 0x06, 0x13, + 0x20, 0x69, 0x06, 0x69, 0x06, 0x65, 0x06, 0x29, + 0x00, 0x0f, 0x20, 0x0f, 0x2a, 0x06, 0x34, 0x06, + 0x48, 0x06, 0x2a, 0x06, 0x48, 0x06, 0x43, 0x06, + 0x48, 0x06, 0x0b, 0x2a, 0x06, 0x34, 0x06, 0x48, + 0x06, 0x47, 0x06, 0x48, 0x06, 0x0b, 0x43, 0x06, + 0x27, 0x06, 0x46, 0x06, 0x43, 0x06, 0x48, 0x06, + 0x0b, 0x2a, 0x06, 0x34, 0x06, 0x48, 0x06, 0x48, + 0x06, 0x27, 0x06, 0x0b, 0x43, 0x06, 0x27, 0x06, + 0x46, 0x06, 0x4a, 0x06, 0x46, 0x06, 0x09, 0x2c, + 0x06, 0x27, 0x06, 0x4a, 0x06, 0x46, 0x06, 0x0b, + 0x45, 0x06, 0x27, 0x06, 0x46, 0x06, 0x2c, 0x06, + 0x48, 0x06, 0x0d, 0x2a, 0x06, 0x34, 0x06, 0x48, + 0x06, 0x2c, 0x06, 0x4a, 0x06, 0x46, 0x06, 0x11, + 0x2a, 0x06, 0x34, 0x06, 0x48, 0x06, 0x31, 0x06, + 0x4a, 0x06, 0x27, 0x06, 0x43, 0x06, 0x48, 0x06, + 0x27, 0x2a, 0x06, 0x34, 0x06, 0x48, 0x06, 0x43, + 0x06, 0x4a, 0x06, 0x48, 0x06, 0x20, 0x00, 0x28, + 0x00, 0x61, 0x06, 0x60, 0x06, 0x64, 0x06, 0x60, + 0x06, 0x13, 0x20, 0x61, 0x06, 0x60, 0x06, 0x64, + 0x06, 0x64, 0x06, 0x29, 0x00, 0x0f, 0x20, 0x0f, + 0x43, 0x06, 0x27, 0x06, 0x46, 0x06, 0x2a, 0x06, + 0x48, 0x06, 0x43, 0x06, 0x48, 0x06, 0x23, 0x27, + 0x06, 0x4a, 0x06, 0x34, 0x06, 0x48, 0x06, 0x20, + 0x00, 0x28, 0x00, 0x61, 0x06, 0x60, 0x06, 0x64, + 0x06, 0x66, 0x06, 0x13, 0x20, 0x61, 0x06, 0x60, + 0x06, 0x65, 0x06, 0x63, 0x06, 0x29, 0x00, 0x0f, + 0x20, 0x0b, 0x2a, 0x06, 0x4a, 0x06, 0x46, 0x06, + 0x2c, 0x06, 0x4a, 0x06, 0x0b, 0x43, 0x06, 0x48, + 0x06, 0x47, 0x06, 0x4a, 0x06, 0x4a, 0x06, 0x0f, + 0x2c, 0x06, 0x4a, 0x06, 0x31, 0x06, 0x4a, 0x06, + 0x27, 0x06, 0x43, 0x06, 0x48, 0x06, 0x25, 0x27, + 0x06, 0x46, 0x06, 0x43, 0x06, 0x4a, 0x06, 0x48, + 0x06, 0x20, 0x00, 0x28, 0x00, 0x61, 0x06, 0x60, + 0x06, 0x66, 0x06, 0x69, 0x06, 0x13, 0x20, 0x61, + 0x06, 0x60, 0x06, 0x67, 0x06, 0x64, 0x06, 0x29, + 0x00, 0x0f, 0x20, 0x23, 0x34, 0x06, 0x48, 0x06, + 0x47, 0x06, 0x48, 0x06, 0x20, 0x00, 0x28, 0x00, + 0x61, 0x06, 0x60, 0x06, 0x67, 0x06, 0x64, 0x06, + 0x13, 0x20, 0x61, 0x06, 0x60, 0x06, 0x67, 0x06, + 0x67, 0x06, 0x29, 0x00, 0x0f, 0x20, 0x29, 0x34, + 0x06, 0x48, 0x06, 0x31, 0x06, 0x4a, 0x06, 0x27, + 0x06, 0x43, 0x06, 0x48, 0x06, 0x20, 0x00, 0x28, + 0x00, 0x61, 0x06, 0x60, 0x06, 0x67, 0x06, 0x67, + 0x06, 0x13, 0x20, 0x61, 0x06, 0x60, 0x06, 0x68, + 0x06, 0x61, 0x06, 0x29, 0x00, 0x0f, 0x20, 0x09, + 0x27, 0x06, 0x4a, 0x06, 0x47, 0x06, 0x48, 0x06, + 0x0d, 0x23, 0x06, 0x48, 0x06, 0x2a, 0x06, 0x48, + 0x06, 0x43, 0x06, 0x48, 0x06, 0x0b, 0x43, 0x06, + 0x27, 0x06, 0x46, 0x06, 0x2c, 0x06, 0x4a, 0x06, + 0x09, 0x43, 0x06, 0x27, 0x06, 0x47, 0x06, 0x48, + 0x06, 0x0b, 0x27, 0x06, 0x4a, 0x06, 0x2a, 0x06, + 0x34, 0x06, 0x48, 0x06, 0x0d, 0x34, 0x06, 0x48, + 0x06, 0x2a, 0x06, 0x48, 0x06, 0x43, 0x06, 0x48, + 0x06, 0x23, 0x43, 0x06, 0x48, 0x06, 0x48, 0x06, + 0x27, 0x06, 0x20, 0x00, 0x28, 0x00, 0x61, 0x06, + 0x60, 0x06, 0x69, 0x06, 0x69, 0x06, 0x13, 0x20, + 0x61, 0x06, 0x61, 0x06, 0x60, 0x06, 0x64, 0x06, + 0x29, 0x00, 0x0f, 0x20, 0x0b, 0x2a, 0x06, 0x34, + 0x06, 0x48, 0x06, 0x2c, 0x06, 0x4a, 0x06, 0x09, + 0x43, 0x06, 0x27, 0x06, 0x34, 0x06, 0x48, 0x06, + 0x09, 0x2a, 0x06, 0x46, 0x06, 0x4a, 0x06, 0x46, + 0x06, 0x0b, 0x2a, 0x06, 0x46, 0x06, 0x2d, 0x00, + 0x27, 0x06, 0x4a, 0x06, 0x25, 0x27, 0x06, 0x4a, + 0x06, 0x43, 0x06, 0x4a, 0x06, 0x48, 0x06, 0x20, + 0x00, 0x28, 0x00, 0x61, 0x06, 0x61, 0x06, 0x61, + 0x06, 0x63, 0x06, 0x13, 0x20, 0x61, 0x06, 0x61, + 0x06, 0x61, 0x06, 0x68, 0x06, 0x29, 0x00, 0x0f, + 0x20, 0x0b, 0x2c, 0x06, 0x46, 0x06, 0x2d, 0x00, + 0x27, 0x06, 0x4a, 0x06, 0x09, 0x47, 0x06, 0x48, + 0x06, 0x27, 0x06, 0x46, 0x06, 0x09, 0x2a, 0x06, + 0x46, 0x06, 0x2c, 0x06, 0x4a, 0x06, 0x09, 0x2f, + 0x06, 0x4a, 0x06, 0x2c, 0x06, 0x4a, 0x06, 0x23, + 0x2a, 0x06, 0x46, 0x06, 0x34, 0x06, 0x48, 0x06, + 0x20, 0x00, 0x28, 0x00, 0x61, 0x06, 0x61, 0x06, + 0x63, 0x06, 0x61, 0x06, 0x13, 0x20, 0x61, 0x06, + 0x61, 0x06, 0x63, 0x06, 0x62, 0x06, 0x29, 0x00, + 0x0f, 0x20, 0x0b, 0x2a, 0x06, 0x34, 0x06, 0x48, + 0x06, 0x34, 0x06, 0x48, 0x06, 0x09, 0x47, 0x06, + 0x48, 0x06, 0x4a, 0x06, 0x46, 0x06, 0x09, 0x27, + 0x06, 0x4a, 0x06, 0x2c, 0x06, 0x4a, 0x06, 0x23, + 0x43, 0x06, 0x48, 0x06, 0x2c, 0x06, 0x4a, 0x06, + 0x20, 0x00, 0x28, 0x00, 0x61, 0x06, 0x61, 0x06, + 0x64, 0x06, 0x62, 0x06, 0x13, 0x20, 0x61, 0x06, + 0x61, 0x06, 0x64, 0x06, 0x64, 0x06, 0x29, 0x00, + 0x0f, 0x20, 0x09, 0x2a, 0x06, 0x46, 0x06, 0x4a, + 0x06, 0x48, 0x06, 0x0b, 0x43, 0x06, 0x4a, 0x06, + 0x48, 0x06, 0x27, 0x06, 0x46, 0x06, 0x0d, 0x46, + 0x06, 0x4a, 0x06, 0x46, 0x06, 0x28, 0x06, 0x4a, + 0x06, 0x4a, 0x06, 0x0b, 0x43, 0x06, 0x4a, 0x06, + 0x48, 0x06, 0x2c, 0x06, 0x48, 0x06, 0x09, 0x47, + 0x06, 0x2c, 0x06, 0x4a, 0x06, 0x46, 0x06, 0x09, + 0x47, 0x06, 0x4a, 0x06, 0x2c, 0x06, 0x4a, 0x06, + 0x0f, 0x27, 0x06, 0x4a, 0x06, 0x31, 0x06, 0x4a, + 0x06, 0x27, 0x06, 0x43, 0x06, 0x48, 0x06, 0x09, + 0x23, 0x06, 0x48, 0x06, 0x47, 0x06, 0x48, 0x06, + 0x0d, 0x2a, 0x06, 0x34, 0x06, 0x48, 0x06, 0x43, + 0x06, 0x27, 0x06, 0x46, 0x06, 0x0b, 0x27, 0x06, + 0x4a, 0x06, 0x45, 0x06, 0x27, 0x06, 0x46, 0x06, + 0x0d, 0x46, 0x06, 0x4a, 0x06, 0x46, 0x06, 0x2d, + 0x00, 0x27, 0x06, 0x46, 0x06, 0x07, 0x43, 0x06, + 0x27, 0x06, 0x48, 0x06, 0x07, 0x34, 0x06, 0x48, + 0x06, 0x46, 0x06, 0x0b, 0x23, 0x06, 0x46, 0x06, + 0x2c, 0x06, 0x4a, 0x06, 0x46, 0x06, 0x09, 0x2c, + 0x06, 0x4a, 0x06, 0x34, 0x06, 0x48, 0x06, 0x09, + 0x4a, 0x06, 0x48, 0x06, 0x48, 0x06, 0x27, 0x06, + 0x07, 0x2c, 0x06, 0x4a, 0x06, 0x4a, 0x06, 0x0f, + 0x2c, 0x06, 0x46, 0x06, 0x31, 0x06, 0x4a, 0x06, + 0x48, 0x06, 0x43, 0x06, 0x48, 0x06, 0x09, 0x28, + 0x06, 0x46, 0x06, 0x2c, 0x06, 0x4a, 0x06, 0x0b, + 0x43, 0x06, 0x46, 0x06, 0x43, 0x06, 0x4a, 0x06, + 0x48, 0x06, 0x09, 0x34, 0x06, 0x48, 0x06, 0x2c, + 0x06, 0x4a, 0x06, 0x09, 0x43, 0x06, 0x46, 0x06, + 0x4a, 0x06, 0x46, 0x06, 0x25, 0x2c, 0x06, 0x46, + 0x06, 0x43, 0x06, 0x4a, 0x06, 0x48, 0x06, 0x20, + 0x00, 0x28, 0x00, 0x61, 0x06, 0x62, 0x06, 0x60, + 0x06, 0x64, 0x06, 0x13, 0x20, 0x61, 0x06, 0x62, + 0x06, 0x60, 0x06, 0x66, 0x06, 0x29, 0x00, 0x0f, + 0x20, 0x0b, 0x43, 0x06, 0x46, 0x06, 0x2d, 0x00, + 0x27, 0x06, 0x4a, 0x06, 0x23, 0x34, 0x06, 0x48, + 0x06, 0x2c, 0x06, 0x46, 0x06, 0x20, 0x00, 0x28, + 0x00, 0x61, 0x06, 0x62, 0x06, 0x60, 0x06, 0x67, + 0x06, 0x13, 0x20, 0x61, 0x06, 0x62, 0x06, 0x61, + 0x06, 0x61, 0x06, 0x29, 0x00, 0x0f, 0x20, 0x0f, + 0x43, 0x06, 0x46, 0x06, 0x31, 0x06, 0x4a, 0x06, + 0x27, 0x06, 0x43, 0x06, 0x48, 0x06, 0x23, 0x43, + 0x06, 0x46, 0x06, 0x28, 0x06, 0x48, 0x06, 0x20, + 0x00, 0x28, 0x00, 0x61, 0x06, 0x62, 0x06, 0x61, + 0x06, 0x63, 0x06, 0x13, 0x20, 0x61, 0x06, 0x62, + 0x06, 0x61, 0x06, 0x69, 0x06, 0x29, 0x00, 0x0f, + 0x20, 0x0b, 0x34, 0x06, 0x48, 0x06, 0x43, 0x06, + 0x4a, 0x06, 0x48, 0x06, 0x05, 0x2c, 0x06, 0x48, + 0x06, 0x0d, 0x2c, 0x06, 0x4a, 0x06, 0x46, 0x06, + 0x46, 0x06, 0x4a, 0x06, 0x46, 0x06, 0x0b, 0x43, + 0x06, 0x31, 0x06, 0x48, 0x06, 0x43, 0x06, 0x48, + 0x06, 0x0b, 0x23, 0x06, 0x46, 0x06, 0x2a, 0x06, + 0x4a, 0x06, 0x4a, 0x06, 0x09, 0x43, 0x06, 0x46, + 0x06, 0x43, 0x06, 0x4a, 0x06, 0x09, 0x2c, 0x06, + 0x48, 0x06, 0x4a, 0x06, 0x4a, 0x06, 0x0b, 0x2a, + 0x06, 0x45, 0x06, 0x28, 0x06, 0x43, 0x06, 0x48, + 0x06, 0x0f, 0x28, 0x06, 0x46, 0x06, 0x31, 0x06, + 0x4a, 0x06, 0x27, 0x06, 0x43, 0x06, 0x48, 0x06, + 0x0b, 0x43, 0x06, 0x27, 0x06, 0x2a, 0x06, 0x4a, + 0x06, 0x4a, 0x06, 0x0f, 0x31, 0x06, 0x4a, 0x06, + 0x27, 0x06, 0x43, 0x06, 0x46, 0x06, 0x4a, 0x06, + 0x46, 0x06, 0x0b, 0x27, 0x06, 0x46, 0x06, 0x2d, + 0x00, 0x23, 0x06, 0x48, 0x06, 0x0b, 0x46, 0x06, + 0x4a, 0x06, 0x46, 0x06, 0x2c, 0x06, 0x4a, 0x06, + 0x0b, 0x43, 0x06, 0x46, 0x06, 0x2c, 0x06, 0x4a, + 0x06, 0x46, 0x06, 0x09, 0x47, 0x06, 0x48, 0x06, + 0x2c, 0x06, 0x4a, 0x06, 0x0b, 0x43, 0x06, 0x46, + 0x06, 0x2a, 0x06, 0x34, 0x06, 0x48, 0x06, 0x09, + 0x43, 0x06, 0x48, 0x06, 0x2c, 0x06, 0x46, 0x06, + 0x09, 0x34, 0x06, 0x48, 0x06, 0x43, 0x06, 0x27, + 0x06, 0x23, 0x34, 0x06, 0x48, 0x06, 0x2c, 0x06, + 0x46, 0x06, 0x20, 0x00, 0x28, 0x00, 0x61, 0x06, + 0x62, 0x06, 0x65, 0x06, 0x69, 0x06, 0x13, 0x20, + 0x61, 0x06, 0x62, 0x06, 0x66, 0x06, 0x60, 0x06, + 0x29, 0x00, 0x0f, 0x20, 0x0b, 0x28, 0x06, 0x46, + 0x06, 0x2d, 0x00, 0x23, 0x06, 0x48, 0x06, 0x0b, + 0x43, 0x06, 0x48, 0x06, 0x2a, 0x06, 0x34, 0x06, + 0x48, 0x06, 0x0b, 0x28, 0x06, 0x46, 0x06, 0x2d, + 0x00, 0x27, 0x06, 0x4a, 0x06, 0x09, 0x43, 0x06, + 0x46, 0x06, 0x2c, 0x06, 0x4a, 0x06, 0x09, 0x43, + 0x06, 0x48, 0x06, 0x27, 0x06, 0x46, 0x06, 0x21, + 0x34, 0x06, 0x48, 0x06, 0x48, 0x06, 0x20, 0x00, + 0x28, 0x00, 0x61, 0x06, 0x62, 0x06, 0x68, 0x06, + 0x68, 0x06, 0x13, 0x20, 0x61, 0x06, 0x62, 0x06, + 0x69, 0x06, 0x63, 0x06, 0x29, 0x00, 0x0f, 0x20, + 0x0b, 0x27, 0x06, 0x4a, 0x06, 0x46, 0x06, 0x4a, + 0x06, 0x46, 0x06, 0x09, 0x34, 0x06, 0x48, 0x06, + 0x27, 0x06, 0x46, 0x06, 0x09, 0x43, 0x06, 0x46, + 0x06, 0x2c, 0x06, 0x46, 0x06, 0x07, 0x43, 0x06, + 0x2c, 0x06, 0x46, 0x06, 0x0b, 0x2a, 0x06, 0x48, + 0x06, 0x43, 0x06, 0x2c, 0x06, 0x4a, 0x06, 0x09, + 0x27, 0x06, 0x46, 0x06, 0x43, 0x06, 0x4a, 0x06, + 0x0b, 0x23, 0x06, 0x48, 0x06, 0x2a, 0x06, 0x34, + 0x06, 0x48, 0x06, 0x23, 0x34, 0x06, 0x48, 0x06, + 0x48, 0x06, 0x27, 0x06, 0x20, 0x00, 0x28, 0x00, + 0x61, 0x06, 0x63, 0x06, 0x61, 0x06, 0x62, 0x06, + 0x13, 0x20, 0x61, 0x06, 0x63, 0x06, 0x61, 0x06, + 0x67, 0x06, 0x29, 0x00, 0x0f, 0x20, 0x09, 0x28, + 0x06, 0x46, 0x06, 0x28, 0x06, 0x48, 0x06, 0x07, + 0x2c, 0x06, 0x46, 0x06, 0x48, 0x06, 0x25, 0x2c, + 0x06, 0x46, 0x06, 0x43, 0x06, 0x4a, 0x06, 0x48, + 0x06, 0x20, 0x00, 0x28, 0x00, 0x61, 0x06, 0x63, + 0x06, 0x62, 0x06, 0x61, 0x06, 0x13, 0x20, 0x61, + 0x06, 0x63, 0x06, 0x62, 0x06, 0x64, 0x06, 0x29, + 0x00, 0x0f, 0x20, 0x25, 0x34, 0x06, 0x48, 0x06, + 0x2a, 0x06, 0x34, 0x06, 0x48, 0x06, 0x20, 0x00, + 0x28, 0x00, 0x61, 0x06, 0x63, 0x06, 0x62, 0x06, + 0x64, 0x06, 0x13, 0x20, 0x61, 0x06, 0x63, 0x06, + 0x62, 0x06, 0x66, 0x06, 0x29, 0x00, 0x0f, 0x20, + 0x0b, 0x43, 0x06, 0x31, 0x06, 0x4a, 0x06, 0x43, + 0x06, 0x4a, 0x06, 0x0b, 0x2c, 0x06, 0x46, 0x06, + 0x2a, 0x06, 0x43, 0x06, 0x48, 0x06, 0x09, 0x2c, + 0x06, 0x46, 0x06, 0x43, 0x06, 0x48, 0x06, 0x07, + 0x43, 0x06, 0x45, 0x06, 0x48, 0x06, 0x09, 0x25, + 0x06, 0x46, 0x06, 0x2c, 0x06, 0x46, 0x06, 0x0b, + 0x43, 0x06, 0x48, 0x06, 0x43, 0x06, 0x43, 0x06, + 0x48, 0x06, 0x09, 0x34, 0x06, 0x48, 0x06, 0x47, + 0x06, 0x4a, 0x06, 0x0b, 0x43, 0x06, 0x46, 0x06, + 0x2a, 0x06, 0x43, 0x06, 0x48, 0x06, 0x0b, 0x28, + 0x06, 0x46, 0x06, 0x2a, 0x06, 0x34, 0x06, 0x48, + 0x06, 0x09, 0x2a, 0x06, 0x46, 0x06, 0x2c, 0x06, + 0x48, 0x06, 0x0f, 0x43, 0x06, 0x48, 0x06, 0x31, + 0x06, 0x4a, 0x06, 0x27, 0x06, 0x43, 0x06, 0x48, + 0x06, 0x23, 0x43, 0x06, 0x48, 0x06, 0x48, 0x06, + 0x27, 0x06, 0x20, 0x00, 0x28, 0x00, 0x61, 0x06, + 0x63, 0x06, 0x68, 0x06, 0x61, 0x06, 0x13, 0x20, + 0x61, 0x06, 0x63, 0x06, 0x68, 0x06, 0x64, 0x06, + 0x29, 0x00, 0x0f, 0x20, 0x0b, 0x2c, 0x06, 0x46, + 0x06, 0x2a, 0x06, 0x34, 0x06, 0x48, 0x06, 0x27, + 0x45, 0x06, 0x4a, 0x06, 0x4a, 0x06, 0x2a, 0x06, + 0x43, 0x06, 0x48, 0x06, 0x20, 0x00, 0x28, 0x00, + 0x61, 0x06, 0x63, 0x06, 0x68, 0x06, 0x64, 0x06, + 0x13, 0x20, 0x61, 0x06, 0x63, 0x06, 0x68, 0x06, + 0x67, 0x06, 0x29, 0x00, 0x0f, 0x20, 0x09, 0x43, + 0x06, 0x27, 0x06, 0x43, 0x06, 0x4a, 0x06, 0x05, + 0x43, 0x06, 0x48, 0x06, 0x27, 0x45, 0x06, 0x4a, + 0x06, 0x4a, 0x06, 0x2a, 0x06, 0x43, 0x06, 0x48, + 0x06, 0x20, 0x00, 0x28, 0x00, 0x61, 0x06, 0x63, + 0x06, 0x69, 0x06, 0x60, 0x06, 0x13, 0x20, 0x61, + 0x06, 0x63, 0x06, 0x69, 0x06, 0x64, 0x06, 0x29, + 0x00, 0x0f, 0x20, 0x09, 0x23, 0x06, 0x48, 0x06, + 0x4a, 0x06, 0x4a, 0x06, 0x25, 0x34, 0x06, 0x48, + 0x06, 0x2a, 0x06, 0x34, 0x06, 0x48, 0x06, 0x20, + 0x00, 0x28, 0x00, 0x61, 0x06, 0x64, 0x06, 0x62, + 0x06, 0x68, 0x06, 0x13, 0x20, 0x61, 0x06, 0x64, + 0x06, 0x62, 0x06, 0x69, 0x06, 0x29, 0x00, 0x0f, + 0x20, 0x25, 0x27, 0x06, 0x4a, 0x06, 0x43, 0x06, + 0x4a, 0x06, 0x48, 0x06, 0x20, 0x00, 0x28, 0x00, + 0x61, 0x06, 0x64, 0x06, 0x62, 0x06, 0x69, 0x06, + 0x13, 0x20, 0x61, 0x06, 0x64, 0x06, 0x64, 0x06, + 0x61, 0x06, 0x29, 0x00, 0x0f, 0x20, 0x0d, 0x43, + 0x06, 0x43, 0x06, 0x4a, 0x06, 0x2a, 0x06, 0x33, + 0x06, 0x48, 0x06, 0x0b, 0x28, 0x06, 0x46, 0x06, + 0x2d, 0x00, 0x23, 0x06, 0x46, 0x06, 0x0b, 0x47, + 0x06, 0x48, 0x06, 0x2a, 0x06, 0x43, 0x06, 0x48, + 0x06, 0x0d, 0x43, 0x06, 0x4a, 0x06, 0x48, 0x06, + 0x2a, 0x06, 0x43, 0x06, 0x48, 0x06, 0x09, 0x43, + 0x06, 0x48, 0x06, 0x34, 0x06, 0x48, 0x06, 0x0d, + 0x2a, 0x06, 0x34, 0x06, 0x48, 0x06, 0x31, 0x06, + 0x43, 0x06, 0x48, 0x06, 0x09, 0x43, 0x06, 0x46, + 0x06, 0x34, 0x06, 0x48, 0x06, 0x09, 0x28, 0x06, + 0x46, 0x06, 0x34, 0x06, 0x48, 0x06, 0x0b, 0x23, + 0x06, 0x48, 0x06, 0x46, 0x06, 0x4a, 0x06, 0x46, + 0x06, 0x09, 0x28, 0x06, 0x46, 0x06, 0x45, 0x06, + 0x4a, 0x06, 0x27, 0x2a, 0x06, 0x34, 0x06, 0x48, + 0x06, 0x43, 0x06, 0x4a, 0x06, 0x48, 0x06, 0x20, + 0x00, 0x28, 0x00, 0x61, 0x06, 0x64, 0x06, 0x68, + 0x06, 0x67, 0x06, 0x13, 0x20, 0x61, 0x06, 0x64, + 0x06, 0x68, 0x06, 0x69, 0x06, 0x29, 0x00, 0x0f, + 0x20, 0x0b, 0x27, 0x06, 0x46, 0x06, 0x2a, 0x06, + 0x43, 0x06, 0x48, 0x06, 0x07, 0x45, 0x06, 0x4a, + 0x06, 0x48, 0x06, 0x09, 0x28, 0x06, 0x46, 0x06, + 0x43, 0x06, 0x4a, 0x06, 0x23, 0x27, 0x06, 0x4a, + 0x06, 0x34, 0x06, 0x48, 0x06, 0x20, 0x00, 0x28, + 0x00, 0x61, 0x06, 0x65, 0x06, 0x60, 0x06, 0x64, + 0x06, 0x13, 0x20, 0x61, 0x06, 0x65, 0x06, 0x62, + 0x06, 0x61, 0x06, 0x29, 0x00, 0x0f, 0x20, 0x09, + 0x2a, 0x06, 0x4a, 0x06, 0x4a, 0x06, 0x4a, 0x06, + 0x0d, 0x43, 0x06, 0x4a, 0x06, 0x48, 0x06, 0x31, + 0x06, 0x43, 0x06, 0x48, 0x06, 0x09, 0x2a, 0x06, + 0x46, 0x06, 0x45, 0x06, 0x46, 0x06, 0x23, 0x43, + 0x06, 0x48, 0x06, 0x2c, 0x06, 0x4a, 0x06, 0x20, + 0x00, 0x28, 0x00, 0x61, 0x06, 0x65, 0x06, 0x65, + 0x06, 0x65, 0x06, 0x13, 0x20, 0x61, 0x06, 0x65, + 0x06, 0x65, 0x06, 0x68, 0x06, 0x29, 0x00, 0x0f, + 0x20, 0x0b, 0x27, 0x06, 0x4a, 0x06, 0x31, 0x06, + 0x43, 0x06, 0x48, 0x06, 0x09, 0x2c, 0x06, 0x46, + 0x06, 0x43, 0x06, 0x4a, 0x06, 0x23, 0x2a, 0x06, + 0x46, 0x06, 0x34, 0x06, 0x48, 0x06, 0x20, 0x00, + 0x28, 0x00, 0x61, 0x06, 0x65, 0x06, 0x67, 0x06, + 0x63, 0x06, 0x13, 0x20, 0x61, 0x06, 0x65, 0x06, + 0x69, 0x06, 0x62, 0x06, 0x29, 0x00, 0x0f, 0x20, + 0x0b, 0x28, 0x06, 0x46, 0x06, 0x31, 0x06, 0x43, + 0x06, 0x48, 0x06, 0x0b, 0x43, 0x06, 0x4a, 0x06, + 0x2a, 0x06, 0x34, 0x06, 0x48, 0x06, 0x09, 0x2c, + 0x06, 0x46, 0x06, 0x48, 0x06, 0x27, 0x06, 0x0d, + 0x43, 0x06, 0x27, 0x06, 0x46, 0x06, 0x2d, 0x00, + 0x27, 0x06, 0x4a, 0x06, 0x23, 0x34, 0x06, 0x48, + 0x06, 0x47, 0x06, 0x48, 0x06, 0x20, 0x00, 0x28, + 0x00, 0x61, 0x06, 0x66, 0x06, 0x64, 0x06, 0x64, + 0x06, 0x13, 0x20, 0x61, 0x06, 0x66, 0x06, 0x64, + 0x06, 0x68, 0x06, 0x29, 0x00, 0x0f, 0x20, 0x09, + 0x43, 0x06, 0x4a, 0x06, 0x27, 0x06, 0x46, 0x06, + 0x21, 0x34, 0x06, 0x48, 0x06, 0x48, 0x06, 0x20, + 0x00, 0x28, 0x00, 0x61, 0x06, 0x66, 0x06, 0x65, + 0x06, 0x62, 0x06, 0x13, 0x20, 0x61, 0x06, 0x66, + 0x06, 0x65, 0x06, 0x65, 0x06, 0x29, 0x00, 0x0f, + 0x20, 0x0f, 0x45, 0x06, 0x4a, 0x06, 0x31, 0x06, + 0x4a, 0x06, 0x27, 0x06, 0x43, 0x06, 0x48, 0x06, + 0x09, 0x45, 0x06, 0x46, 0x06, 0x2c, 0x06, 0x4a, + 0x06, 0x09, 0x43, 0x06, 0x46, 0x06, 0x28, 0x06, + 0x46, 0x06, 0x09, 0x27, 0x06, 0x46, 0x06, 0x28, + 0x06, 0x48, 0x06, 0x09, 0x2a, 0x06, 0x46, 0x06, + 0x48, 0x06, 0x27, 0x06, 0x0b, 0x2c, 0x06, 0x48, + 0x06, 0x43, 0x06, 0x4a, 0x06, 0x48, 0x06, 0x0b, + 0x2c, 0x06, 0x46, 0x06, 0x31, 0x06, 0x43, 0x06, + 0x48, 0x06, 0x09, 0x47, 0x06, 0x48, 0x06, 0x4a, + 0x06, 0x4a, 0x06, 0x0b, 0x34, 0x06, 0x48, 0x06, + 0x2a, 0x06, 0x43, 0x06, 0x48, 0x06, 0x0b, 0x43, + 0x06, 0x4a, 0x06, 0x48, 0x06, 0x47, 0x06, 0x48, + 0x06, 0x09, 0x2c, 0x06, 0x46, 0x06, 0x28, 0x06, + 0x46, 0x06, 0x23, 0x43, 0x06, 0x46, 0x06, 0x28, + 0x06, 0x48, 0x06, 0x20, 0x00, 0x28, 0x00, 0x61, + 0x06, 0x67, 0x06, 0x64, 0x06, 0x61, 0x06, 0x13, + 0x20, 0x61, 0x06, 0x67, 0x06, 0x64, 0x06, 0x64, + 0x06, 0x29, 0x00, 0x0f, 0x20, 0x25, 0x27, 0x06, + 0x46, 0x06, 0x43, 0x06, 0x4a, 0x06, 0x48, 0x06, + 0x20, 0x00, 0x28, 0x00, 0x61, 0x06, 0x67, 0x06, + 0x64, 0x06, 0x64, 0x06, 0x13, 0x20, 0x61, 0x06, + 0x67, 0x06, 0x64, 0x06, 0x68, 0x06, 0x29, 0x00, + 0x0f, 0x20, 0x0d, 0x43, 0x06, 0x27, 0x06, 0x46, + 0x06, 0x2d, 0x00, 0x27, 0x06, 0x46, 0x06, 0x0f, + 0x47, 0x06, 0x48, 0x06, 0x31, 0x06, 0x4a, 0x06, + 0x27, 0x06, 0x43, 0x06, 0x48, 0x06, 0x0b, 0x45, + 0x06, 0x4a, 0x06, 0x4a, 0x06, 0x48, 0x06, 0x27, + 0x06, 0x0b, 0x27, 0x06, 0x46, 0x06, 0x2d, 0x00, + 0x27, 0x06, 0x4a, 0x06, 0x09, 0x2a, 0x06, 0x46, + 0x06, 0x45, 0x06, 0x4a, 0x06, 0x09, 0x43, 0x06, + 0x46, 0x06, 0x33, 0x06, 0x4a, 0x06, 0x0b, 0x43, + 0x06, 0x4a, 0x06, 0x48, 0x06, 0x48, 0x06, 0x27, + 0x06, 0x09, 0x28, 0x06, 0x46, 0x06, 0x43, 0x06, + 0x27, 0x06, 0x09, 0x28, 0x06, 0x46, 0x06, 0x33, + 0x06, 0x4a, 0x06, 0x09, 0x2a, 0x06, 0x46, 0x06, + 0x28, 0x06, 0x48, 0x06, 0x09, 0x43, 0x06, 0x48, + 0x06, 0x43, 0x06, 0x27, 0x06, 0x07, 0x43, 0x06, + 0x27, 0x06, 0x4a, 0x06, 0x09, 0x23, 0x06, 0x46, + 0x06, 0x33, 0x06, 0x4a, 0x06, 0x0b, 0x45, 0x06, + 0x46, 0x06, 0x2d, 0x00, 0x27, 0x06, 0x46, 0x06, + 0x0b, 0x28, 0x06, 0x46, 0x06, 0x43, 0x06, 0x4a, + 0x06, 0x48, 0x06, 0x09, 0x2c, 0x06, 0x46, 0x06, + 0x2c, 0x06, 0x4a, 0x06, 0x07, 0x43, 0x06, 0x4a, + 0x06, 0x48, 0x06, 0x09, 0x45, 0x06, 0x4a, 0x06, + 0x2c, 0x06, 0x4a, 0x06, 0x09, 0x2a, 0x06, 0x4a, + 0x06, 0x34, 0x06, 0x48, 0x06, 0x09, 0x34, 0x06, + 0x48, 0x06, 0x48, 0x06, 0x27, 0x06, 0x09, 0x47, + 0x06, 0x4a, 0x06, 0x33, 0x06, 0x4a, 0x06, 0x0d, + 0x41, 0x06, 0x31, 0x06, 0x41, 0x06, 0x31, 0x06, + 0x2f, 0x06, 0x46, 0x06, 0x11, 0x23, 0x06, 0x30, + 0x06, 0x31, 0x06, 0x28, 0x06, 0x4a, 0x06, 0x47, + 0x06, 0x34, 0x06, 0x2a, 0x06, 0x0b, 0x2e, 0x06, + 0x31, 0x06, 0x2f, 0x06, 0x27, 0x06, 0x2f, 0x06, + 0x07, 0x2a, 0x06, 0x27, 0x06, 0x31, 0x06, 0x0b, + 0x45, 0x06, 0x31, 0x06, 0x2f, 0x06, 0x27, 0x06, + 0x2f, 0x06, 0x0d, 0x34, 0x06, 0x47, 0x06, 0x31, + 0x06, 0x41, 0x06, 0x27, 0x06, 0x31, 0x06, 0x07, + 0x45, 0x06, 0x47, 0x06, 0x31, 0x06, 0x09, 0x22, + 0x06, 0x4a, 0x06, 0x27, 0x06, 0x46, 0x06, 0x07, + 0x22, 0x06, 0x30, 0x06, 0x31, 0x06, 0x05, 0x2f, + 0x06, 0x4a, 0x06, 0x09, 0x28, 0x06, 0x47, 0x06, + 0x45, 0x06, 0x46, 0x06, 0x0f, 0x27, 0x06, 0x33, + 0x06, 0x41, 0x06, 0x46, 0x06, 0x2f, 0x06, 0x27, + 0x06, 0x31, 0x06, 0x09, 0x47, 0x06, 0x0d, 0x20, + 0x2e, 0x00, 0x34, 0x06, 0x1a, 0x42, 0x65, 0x66, + 0x6f, 0x72, 0x65, 0x20, 0x52, 0x2e, 0x4f, 0x2e, + 0x43, 0x2e, 0x19, 0x2c, 0x06, 0x45, 0x06, 0x47, + 0x06, 0x48, 0x06, 0x31, 0x06, 0x4a, 0x06, 0x29, + 0x06, 0x20, 0x00, 0x27, 0x06, 0x44, 0x06, 0x35, + 0x06, 0x4a, 0x06, 0x12, 0x63, 0x61, 0x6c, 0x65, + 0x6e, 0x64, 0x61, 0x72, 0x73, 0x08, 0x64, 0x61, + 0x74, 0x65, 0x08, 0x61, 0x72, 0x61, 0x62, 0x08, + 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, 0x75, 0x10, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0x1e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, + 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, + 0x26, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x6e, 0x65, 0x67, + 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, + 0x74, 0x65, 0x72, 0x6e, 0x0e, 0x64, 0x65, 0x63, + 0x69, 0x6d, 0x61, 0x6c, 0x26, 0x7b, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, 0xa0, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0x3c, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, 0xa0, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x10, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, + 0x2a, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, + 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x40, 0x7b, + 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, + 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x0e, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x10, + 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, + 0x03, 0x6b, 0x06, 0x03, 0x6c, 0x06, 0x0a, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x0f, 0x44, 0x06, 0x4a, + 0x06, 0x33, 0x06, 0xa0, 0x00, 0x31, 0x06, 0x42, + 0x06, 0x45, 0x06, 0x06, 0x6e, 0x61, 0x6e, 0x05, + 0x0f, 0x20, 0x2b, 0x00, 0x10, 0x70, 0x6c, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x05, 0x0f, 0x20, + 0x2d, 0x00, 0x12, 0x6d, 0x69, 0x6e, 0x75, 0x73, + 0x53, 0x69, 0x67, 0x6e, 0x03, 0x6a, 0x06, 0x16, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, + 0x69, 0x67, 0x6e, 0x03, 0x1e, 0x22, 0x10, 0x69, + 0x6e, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x02, + 0x2e, 0x02, 0x2c, 0x13, 0x44, 0x06, 0x4a, 0x06, + 0x33, 0x06, 0xa0, 0x00, 0x31, 0x06, 0x42, 0x06, + 0x45, 0x06, 0x4b, 0x06, 0x27, 0x06, 0x05, 0x0e, + 0x20, 0x2b, 0x00, 0x05, 0x0e, 0x20, 0x2d, 0x00, + 0x0e, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, + 0x0b, 0x2f, 0x06, 0x2e, 0x00, 0x25, 0x06, 0x2e, + 0x00, 0x0f, 0x20, 0x06, 0x41, 0x45, 0x44, 0x06, + 0x41, 0x55, 0x24, 0x06, 0x41, 0x55, 0x44, 0x0b, + 0x2f, 0x06, 0x2e, 0x00, 0x28, 0x06, 0x2e, 0x00, + 0x0f, 0x20, 0x06, 0x42, 0x48, 0x44, 0x04, 0x52, + 0x24, 0x06, 0x42, 0x52, 0x4c, 0x06, 0x43, 0x41, + 0x24, 0x06, 0x43, 0x41, 0x44, 0x06, 0x43, 0x4e, + 0xa5, 0x06, 0x43, 0x4e, 0x59, 0x0b, 0x2f, 0x06, + 0x2e, 0x00, 0x2c, 0x06, 0x2e, 0x00, 0x0f, 0x20, + 0x06, 0x44, 0x5a, 0x44, 0x0b, 0x2c, 0x06, 0x2e, + 0x00, 0x45, 0x06, 0x2e, 0x00, 0x0f, 0x20, 0x06, + 0x45, 0x47, 0x50, 0x03, 0xac, 0x20, 0x06, 0x45, + 0x55, 0x52, 0x02, 0xa3, 0x06, 0x47, 0x42, 0x50, + 0x06, 0x48, 0x4b, 0x24, 0x06, 0x48, 0x4b, 0x44, + 0x0b, 0x31, 0x06, 0x2e, 0x00, 0x25, 0x06, 0x46, + 0x06, 0x2e, 0x00, 0x06, 0x49, 0x44, 0x52, 0x03, + 0xaa, 0x20, 0x06, 0x49, 0x4c, 0x53, 0x03, 0xb9, + 0x20, 0x06, 0x49, 0x4e, 0x52, 0x0b, 0x2f, 0x06, + 0x2e, 0x00, 0x39, 0x06, 0x2e, 0x00, 0x0f, 0x20, + 0x06, 0x49, 0x51, 0x44, 0x09, 0x31, 0x06, 0x2e, + 0x00, 0x25, 0x06, 0x2e, 0x00, 0x06, 0x49, 0x52, + 0x52, 0x0b, 0x2f, 0x06, 0x2e, 0x00, 0x23, 0x06, + 0x2e, 0x00, 0x0f, 0x20, 0x06, 0x4a, 0x4f, 0x44, + 0x06, 0x4a, 0x50, 0xa5, 0x06, 0x4a, 0x50, 0x59, + 0x0f, 0x41, 0x06, 0x2e, 0x00, 0x2c, 0x06, 0x2e, + 0x00, 0x42, 0x06, 0x2e, 0x00, 0x0f, 0x20, 0x06, + 0x4b, 0x4d, 0x46, 0x03, 0xa9, 0x20, 0x06, 0x4b, + 0x52, 0x57, 0x0b, 0x2f, 0x06, 0x2e, 0x00, 0x43, + 0x06, 0x2e, 0x00, 0x0f, 0x20, 0x06, 0x4b, 0x57, + 0x44, 0x0b, 0x44, 0x06, 0x2e, 0x00, 0x44, 0x06, + 0x2e, 0x00, 0x0f, 0x20, 0x06, 0x4c, 0x42, 0x50, + 0x0b, 0x2f, 0x06, 0x2e, 0x00, 0x44, 0x06, 0x2e, + 0x00, 0x0f, 0x20, 0x06, 0x4c, 0x59, 0x44, 0x0b, + 0x2f, 0x06, 0x2e, 0x00, 0x45, 0x06, 0x2e, 0x00, + 0x0f, 0x20, 0x06, 0x4d, 0x41, 0x44, 0x0b, 0x23, + 0x06, 0x2e, 0x00, 0x45, 0x06, 0x2e, 0x00, 0x0f, + 0x20, 0x06, 0x4d, 0x52, 0x4f, 0x06, 0x4d, 0x58, + 0x24, 0x06, 0x4d, 0x58, 0x4e, 0x06, 0x4e, 0x5a, + 0x24, 0x06, 0x4e, 0x5a, 0x44, 0x0b, 0x31, 0x06, + 0x2e, 0x00, 0x39, 0x06, 0x2e, 0x00, 0x0f, 0x20, + 0x06, 0x4f, 0x4d, 0x52, 0x09, 0x31, 0x06, 0x2e, + 0x00, 0x28, 0x06, 0x2e, 0x00, 0x06, 0x50, 0x4b, + 0x52, 0x0b, 0x31, 0x06, 0x2e, 0x00, 0x42, 0x06, + 0x2e, 0x00, 0x0f, 0x20, 0x06, 0x51, 0x41, 0x52, + 0x0b, 0x31, 0x06, 0x2e, 0x00, 0x33, 0x06, 0x2e, + 0x00, 0x0f, 0x20, 0x06, 0x53, 0x41, 0x52, 0x0b, + 0x2f, 0x06, 0x2e, 0x00, 0x33, 0x06, 0x2e, 0x00, + 0x0f, 0x20, 0x06, 0x53, 0x44, 0x44, 0x09, 0x2c, + 0x06, 0x2e, 0x00, 0x33, 0x06, 0x2e, 0x00, 0x06, + 0x53, 0x44, 0x47, 0x0d, 0x2c, 0x06, 0x2e, 0x00, + 0x2c, 0x06, 0x2e, 0x00, 0x33, 0x06, 0x2e, 0x00, + 0x06, 0x53, 0x53, 0x50, 0x0b, 0x44, 0x06, 0x2e, + 0x00, 0x33, 0x06, 0x2e, 0x00, 0x0f, 0x20, 0x06, + 0x53, 0x59, 0x50, 0x03, 0x3f, 0x0e, 0x06, 0x54, + 0x48, 0x42, 0x0b, 0x2f, 0x06, 0x2e, 0x00, 0x2a, + 0x06, 0x2e, 0x00, 0x0f, 0x20, 0x06, 0x54, 0x4e, + 0x44, 0x09, 0x44, 0x06, 0x2e, 0x00, 0x2a, 0x06, + 0x2e, 0x00, 0x06, 0x54, 0x52, 0x59, 0x06, 0x4e, + 0x54, 0x24, 0x06, 0x54, 0x57, 0x44, 0x06, 0x55, + 0x53, 0x24, 0x06, 0x55, 0x53, 0x44, 0x03, 0xab, + 0x20, 0x06, 0x56, 0x4e, 0x44, 0x08, 0x46, 0x43, + 0x46, 0x41, 0x06, 0x58, 0x41, 0x46, 0x06, 0x45, + 0x43, 0x24, 0x06, 0x58, 0x43, 0x44, 0x06, 0x43, + 0x46, 0x41, 0x06, 0x58, 0x4f, 0x46, 0x08, 0x43, + 0x46, 0x50, 0x46, 0x06, 0x58, 0x50, 0x46, 0x06, + 0x2a, 0x2a, 0x2a, 0x06, 0x58, 0x58, 0x58, 0x0b, + 0x31, 0x06, 0x2e, 0x00, 0x4a, 0x06, 0x2e, 0x00, + 0x0f, 0x20, 0x06, 0x59, 0x45, 0x52, 0x14, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, + 0x73, 0x52, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, + 0x6e, 0x74, 0x6c, 0x2f, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, + 0x6a, 0x73, 0x6f, 0x6e, 0x70, 0x2f, 0x61, 0x72, + 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, + 0x01, 0x00, 0x01, 0x00, 0x27, 0x00, 0x64, 0xc0, + 0x6e, 0x01, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x39, + 0xd0, 0x00, 0x00, 0x00, 0x43, 0xd1, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd2, 0x00, 0x00, 0x00, 0x4d, + 0xd3, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd4, 0x00, + 0x00, 0x00, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x04, + 0xd6, 0x00, 0x00, 0x00, 0x04, 0xd7, 0x00, 0x00, + 0x00, 0x04, 0xd8, 0x00, 0x00, 0x00, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x04, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdb, 0x00, 0x00, 0x00, 0x04, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x04, + 0xde, 0x00, 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, + 0x00, 0x04, 0xe0, 0x00, 0x00, 0x00, 0x04, 0xe1, + 0x00, 0x00, 0x00, 0x04, 0xe2, 0x00, 0x00, 0x00, + 0x26, 0x0f, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, + 0x0a, 0x4d, 0xe4, 0x00, 0x00, 0x00, 0x0a, 0x4d, + 0xe5, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, + 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe9, + 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0xed, 0x00, + 0x00, 0x00, 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, + 0xef, 0x00, 0x00, 0x00, 0x04, 0xf0, 0x00, 0x00, + 0x00, 0x4d, 0xf1, 0x00, 0x00, 0x00, 0x04, 0xf2, + 0x00, 0x00, 0x00, 0x4d, 0xf3, 0x00, 0x00, 0x00, + 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xf5, 0x00, + 0x00, 0x00, 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, + 0xf7, 0x00, 0x00, 0x00, 0x04, 0xf8, 0x00, 0x00, + 0x00, 0x4d, 0xf9, 0x00, 0x00, 0x00, 0x04, 0xfa, + 0x00, 0x00, 0x00, 0x4d, 0xfb, 0x00, 0x00, 0x00, + 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xfd, 0x00, + 0x00, 0x00, 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, + 0xff, 0x00, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, + 0x00, 0x4d, 0x01, 0x01, 0x00, 0x00, 0x04, 0x02, + 0x01, 0x00, 0x00, 0x4d, 0x03, 0x01, 0x00, 0x00, + 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0x05, 0x01, + 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, + 0x07, 0x01, 0x00, 0x00, 0x04, 0x08, 0x01, 0x00, + 0x00, 0x4d, 0x09, 0x01, 0x00, 0x00, 0x04, 0x0a, + 0x01, 0x00, 0x00, 0x4d, 0x0b, 0x01, 0x00, 0x00, + 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, 0x0d, 0x01, + 0x00, 0x00, 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, + 0x0f, 0x01, 0x00, 0x00, 0x04, 0x10, 0x01, 0x00, + 0x00, 0x4d, 0x11, 0x01, 0x00, 0x00, 0x04, 0x12, + 0x01, 0x00, 0x00, 0x4d, 0x13, 0x01, 0x00, 0x00, + 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, 0x15, 0x01, + 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, + 0x17, 0x01, 0x00, 0x00, 0x04, 0x18, 0x01, 0x00, + 0x00, 0x4d, 0x19, 0x01, 0x00, 0x00, 0x04, 0x1a, + 0x01, 0x00, 0x00, 0x4d, 0x1b, 0x01, 0x00, 0x00, + 0x04, 0x1c, 0x01, 0x00, 0x00, 0x4d, 0x1d, 0x01, + 0x00, 0x00, 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, + 0x1f, 0x01, 0x00, 0x00, 0x04, 0x20, 0x01, 0x00, + 0x00, 0x4d, 0x21, 0x01, 0x00, 0x00, 0x04, 0x22, + 0x01, 0x00, 0x00, 0x4d, 0x23, 0x01, 0x00, 0x00, + 0x04, 0x24, 0x01, 0x00, 0x00, 0x4d, 0x25, 0x01, + 0x00, 0x00, 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, + 0x27, 0x01, 0x00, 0x00, 0x04, 0x28, 0x01, 0x00, + 0x00, 0x4d, 0x28, 0x01, 0x00, 0x00, 0x04, 0x29, + 0x01, 0x00, 0x00, 0x4d, 0x2a, 0x01, 0x00, 0x00, + 0x04, 0x2b, 0x01, 0x00, 0x00, 0x4d, 0x2c, 0x01, + 0x00, 0x00, 0x04, 0x2d, 0x01, 0x00, 0x00, 0x4d, + 0x2e, 0x01, 0x00, 0x00, 0x04, 0x2f, 0x01, 0x00, + 0x00, 0x4d, 0x30, 0x01, 0x00, 0x00, 0x04, 0x31, + 0x01, 0x00, 0x00, 0x4d, 0x32, 0x01, 0x00, 0x00, + 0x04, 0x33, 0x01, 0x00, 0x00, 0x4d, 0x34, 0x01, + 0x00, 0x00, 0x04, 0x35, 0x01, 0x00, 0x00, 0x4d, + 0x36, 0x01, 0x00, 0x00, 0x04, 0x37, 0x01, 0x00, + 0x00, 0x4d, 0x38, 0x01, 0x00, 0x00, 0x04, 0x39, + 0x01, 0x00, 0x00, 0x4d, 0x3a, 0x01, 0x00, 0x00, + 0x04, 0x3b, 0x01, 0x00, 0x00, 0x4d, 0x3c, 0x01, + 0x00, 0x00, 0x4d, 0x3d, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x3e, 0x01, 0x00, 0x00, 0x4d, 0x3f, 0x01, + 0x00, 0x00, 0x04, 0x40, 0x01, 0x00, 0x00, 0x4d, + 0x41, 0x01, 0x00, 0x00, 0x04, 0x42, 0x01, 0x00, + 0x00, 0x4d, 0x34, 0x01, 0x00, 0x00, 0x04, 0x2b, + 0x01, 0x00, 0x00, 0x4d, 0x2c, 0x01, 0x00, 0x00, + 0x4d, 0x43, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x44, + 0x01, 0x00, 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, + 0x04, 0x46, 0x01, 0x00, 0x00, 0x4d, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, + 0x09, 0x01, 0x00, 0x00, 0x04, 0x04, 0x01, 0x00, + 0x00, 0x4d, 0x05, 0x01, 0x00, 0x00, 0x4d, 0x48, + 0x01, 0x00, 0x00, 0x4d, 0x49, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x0b, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x63, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x70, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x73, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x74, 0x01, 0x00, 0x00, 0x4d, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x4d, 0x76, 0x01, 0x00, 0x00, 0x4d, 0x77, 0x01, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x00, 0xbe, 0x01, 0xbe, 0x02, 0xbe, + 0x03, 0xbe, 0x04, 0xbe, 0x05, 0xbe, 0x06, 0xbe, + 0x07, 0xbe, 0x08, 0xbe, 0x09, 0xbe, 0x0a, 0xbe, + 0x0b, 0x26, 0x0c, 0x00, 0x4d, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, + 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x63, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x70, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, + 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x4d, + 0xd6, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x84, + 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, + 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, + 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, + 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, + 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, + 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, + 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, + 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, + 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, + 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, + 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, + 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, + 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, + 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, + 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, + 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, + 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, + 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, + 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x63, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x70, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x9e, + 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, + 0x9f, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x73, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x74, 0x01, 0x00, 0x00, 0x4d, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x4d, 0x77, + 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x0c, 0xbe, 0x0d, 0xbe, 0x0e, + 0xbe, 0x0f, 0xbe, 0x10, 0xbe, 0x11, 0xbe, 0x12, + 0xbe, 0x13, 0xbe, 0x14, 0xbe, 0x15, 0xbe, 0x16, + 0xbe, 0x17, 0x26, 0x0c, 0x00, 0x4d, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, + 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, + 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x63, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x70, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x4d, 0x76, + 0x01, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x18, 0xbe, 0x19, 0xbe, 0x1a, 0xbe, 0x1b, 0xbe, + 0x1c, 0xbe, 0x1d, 0xbe, 0x1e, 0xbe, 0x1f, 0xbe, + 0x20, 0xbe, 0x21, 0xbe, 0x22, 0xbe, 0x23, 0xbe, + 0x24, 0x26, 0x0d, 0x00, 0x4d, 0x56, 0x01, 0x00, + 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, + 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, + 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, + 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, + 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, + 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, + 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, + 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, + 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, + 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, + 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, + 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, + 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, + 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, + 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x63, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x70, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, + 0x9f, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, + 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x73, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, + 0x4d, 0x77, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x25, 0xbe, 0x26, + 0xbe, 0x27, 0xbe, 0x28, 0xbe, 0x29, 0xbe, 0x2a, + 0xbe, 0x2b, 0xbe, 0x2c, 0xbe, 0x2d, 0xbe, 0x2e, + 0xbe, 0x2f, 0xbe, 0x30, 0xbe, 0x31, 0x26, 0x0d, + 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0xa0, + 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, + 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, + 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, + 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, + 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, + 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, + 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, + 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, + 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, + 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, + 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, + 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, + 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, + 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, + 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x63, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x70, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x9e, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x9e, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x73, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x74, 0x01, 0x00, 0x00, 0x4d, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x4d, 0x77, + 0x01, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x32, 0xbe, 0x33, 0xbe, 0x34, + 0xbe, 0x35, 0xbe, 0x36, 0xbe, 0x37, 0xbe, 0x38, + 0xbe, 0x39, 0xbe, 0x3a, 0xbe, 0x3b, 0xbe, 0x3c, + 0xbe, 0x3d, 0x26, 0x0c, 0x00, 0x4d, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, + 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, + 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x63, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x70, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, + 0x04, 0x9f, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x73, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x4d, 0x75, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x4d, + 0x77, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x63, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x70, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xad, 0x01, 0x00, + 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0xae, + 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, + 0x26, 0x04, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, + 0xaf, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, + 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, 0x04, 0xae, + 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, + 0x26, 0x04, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x73, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, + 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x3e, + 0xbe, 0x3f, 0xbe, 0x40, 0xbe, 0x41, 0xbe, 0x42, + 0xbe, 0x43, 0xbe, 0x44, 0xbe, 0x45, 0xbe, 0x46, + 0xbe, 0x47, 0xbe, 0x48, 0xbe, 0x49, 0xbe, 0x4a, + 0xbe, 0x4b, 0x26, 0x0e, 0x00, 0x4d, 0x56, 0x01, + 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, 0x04, + 0xb4, 0x01, 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, + 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb7, + 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, + 0x04, 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, + 0x00, 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, + 0xbc, 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, + 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, + 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, + 0x26, 0x0e, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, + 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, 0x04, + 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, + 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, 0x04, 0xb9, + 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, + 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, 0x01, + 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, 0x04, + 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, 0x00, + 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, 0x26, 0x0e, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x63, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x70, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x73, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x4d, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x4d, + 0x76, 0x01, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x4c, 0xbe, 0x4d, 0xbe, 0x4e, 0xbe, 0x4f, + 0xbe, 0x50, 0xbe, 0x51, 0xbe, 0x52, 0xbe, 0x53, + 0xbe, 0x54, 0xbe, 0x55, 0xbe, 0x56, 0xbe, 0x57, + 0x26, 0x0c, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0xc1, 0x01, 0x00, 0x00, 0x04, 0xc2, 0x01, + 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, 0x04, + 0xc4, 0x01, 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, + 0x00, 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, 0xc7, + 0x01, 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, + 0x04, 0xc9, 0x01, 0x00, 0x00, 0x04, 0xca, 0x01, + 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, 0x04, + 0xcc, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, + 0x00, 0x04, 0xc2, 0x01, 0x00, 0x00, 0x04, 0xc3, + 0x01, 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, + 0x04, 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, 0x01, + 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, 0x04, + 0xc8, 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, + 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, 0x04, 0xcb, + 0x01, 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x63, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x70, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xcd, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x56, 0x01, + 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xcd, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x73, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x74, 0x01, 0x00, 0x00, 0x4d, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x4d, 0x77, + 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, + 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, + 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, + 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0xce, + 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, + 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, + 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, + 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, + 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, + 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, + 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, 0x04, + 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, + 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, 0x04, 0xd2, + 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, + 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, 0xd5, 0x01, + 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, 0x04, + 0xd7, 0x01, 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, + 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x63, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x70, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xda, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0xda, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xda, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x73, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x4d, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x4d, + 0x76, 0x01, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, + 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, + 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, + 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, + 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, + 0x8f, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0x56, 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, + 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, + 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, + 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, + 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, + 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, + 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, 0xd8, + 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xce, 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, + 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, + 0xd1, 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, + 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, + 0x01, 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, + 0x04, 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, + 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, + 0xd9, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x63, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x70, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xda, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0xda, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x73, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, + 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x63, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x70, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, + 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, + 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, + 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, + 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, + 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, + 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, + 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, + 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, + 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, + 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, + 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, + 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, + 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, + 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, + 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, + 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, + 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, + 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, + 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x26, + 0x20, 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, 0x4d, + 0x20, 0x00, 0x00, 0x80, 0x04, 0xfc, 0x01, 0x00, + 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0xfd, + 0x01, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, + 0x04, 0xfe, 0x01, 0x00, 0x00, 0x4d, 0x23, 0x00, + 0x00, 0x80, 0x04, 0xff, 0x01, 0x00, 0x00, 0x4d, + 0x24, 0x00, 0x00, 0x80, 0x04, 0x00, 0x02, 0x00, + 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0x01, + 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, + 0x04, 0x02, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, + 0x00, 0x80, 0x04, 0x03, 0x02, 0x00, 0x00, 0x4d, + 0x28, 0x00, 0x00, 0x80, 0x04, 0x04, 0x02, 0x00, + 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0x05, + 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, + 0x04, 0x06, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, + 0x00, 0x80, 0x04, 0x07, 0x02, 0x00, 0x00, 0x4d, + 0x2c, 0x00, 0x00, 0x80, 0x04, 0x08, 0x02, 0x00, + 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0x09, + 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, + 0x04, 0x0a, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, + 0x00, 0x80, 0x04, 0x0b, 0x02, 0x00, 0x00, 0x4d, + 0x30, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, 0x00, + 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0x0d, + 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, + 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, + 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, 0x4d, + 0x34, 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, 0x00, + 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0x11, + 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, + 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, + 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, 0x4d, + 0x38, 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, 0x00, + 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0x15, + 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, + 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, + 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, 0x4d, + 0x3c, 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, 0x00, + 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x19, + 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, + 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, + 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, + 0x40, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, + 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x1d, + 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, + 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, + 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, + 0x44, 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, + 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x21, + 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, + 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, + 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, + 0x48, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, + 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x25, + 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, + 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, + 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, + 0x4c, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, + 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x29, + 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, + 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, + 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, + 0x50, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, + 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x2d, + 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, + 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, + 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, + 0x54, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, + 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x31, + 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, + 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, + 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, + 0x58, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, + 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x35, + 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, + 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, + 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, + 0x5c, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, + 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x39, + 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, + 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, + 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, + 0x60, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, + 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x3d, + 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, + 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, + 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, + 0x64, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, + 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x41, + 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, + 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, + 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, + 0x68, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, + 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x45, + 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, + 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, + 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, + 0x6c, 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, + 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x49, + 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, + 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, + 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, + 0x70, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, + 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x4d, + 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, + 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, + 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, + 0x74, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, + 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x51, + 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, + 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, + 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, + 0x78, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, + 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x55, + 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, + 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, + 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, + 0x7c, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, + 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x59, + 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, + 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, + 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, + 0x80, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, + 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x5d, + 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, + 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, + 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, + 0x84, 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, + 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x61, + 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, + 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, + 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, + 0x88, 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, + 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x65, + 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, + 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, + 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, + 0x8c, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, + 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x69, + 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, + 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, + 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, + 0x90, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, + 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x6d, + 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, + 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, + 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, + 0x94, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, + 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x71, + 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, + 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, + 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, + 0x98, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, + 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x75, + 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, + 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, + 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, + 0x9c, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, + 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x79, + 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, + 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, + 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, + 0xa0, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, + 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x7d, + 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, + 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, + 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, + 0xa4, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, + 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x81, + 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, + 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, + 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, + 0xa8, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, + 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x85, + 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, + 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, + 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, + 0xac, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, + 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0x89, + 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, + 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, + 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, + 0xb0, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, + 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0x8d, + 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, + 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, + 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, + 0xb4, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, + 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0x91, + 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, + 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, + 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, + 0xb8, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, + 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0x95, + 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, + 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, + 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, + 0xbc, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, + 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0x99, + 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, + 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, + 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, + 0xc0, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, + 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0x9d, + 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, + 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, + 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, + 0xc4, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, + 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0xa1, + 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, + 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, + 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, + 0xc8, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, + 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0xa5, + 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, + 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, + 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, + 0xcc, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, + 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0xa9, + 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, + 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, + 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, + 0xd0, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, + 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0xad, + 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, + 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, + 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, + 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0xb1, + 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, + 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, + 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0xb5, + 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, + 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xb9, + 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, + 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xbd, + 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, + 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, + 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, + 0xe4, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, + 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0xc1, + 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, + 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x80, 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, + 0xe8, 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, + 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0xc4, + 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, + 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x80, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, + 0xc5, 0x02, 0x00, 0x00, 0x04, 0xc6, 0x02, 0x00, + 0x00, 0x04, 0xc7, 0x02, 0x00, 0x00, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x04, 0xc9, 0x02, 0x00, 0x00, + 0x04, 0xca, 0x02, 0x00, 0x00, 0x04, 0xcb, 0x02, + 0x00, 0x00, 0x04, 0xcc, 0x02, 0x00, 0x00, 0x04, + 0xcd, 0x02, 0x00, 0x00, 0x04, 0xce, 0x02, 0x00, + 0x00, 0x04, 0xcf, 0x02, 0x00, 0x00, 0x04, 0xd0, + 0x02, 0x00, 0x00, 0x04, 0xd1, 0x02, 0x00, 0x00, + 0x04, 0xd2, 0x02, 0x00, 0x00, 0x04, 0xd3, 0x02, + 0x00, 0x00, 0x04, 0xd4, 0x02, 0x00, 0x00, 0x04, + 0xd5, 0x02, 0x00, 0x00, 0x04, 0xd6, 0x02, 0x00, + 0x00, 0x04, 0xd7, 0x02, 0x00, 0x00, 0x04, 0xd8, + 0x02, 0x00, 0x00, 0x04, 0xd9, 0x02, 0x00, 0x00, + 0x04, 0xda, 0x02, 0x00, 0x00, 0x04, 0xdb, 0x02, + 0x00, 0x00, 0x04, 0xdc, 0x02, 0x00, 0x00, 0x04, + 0xdd, 0x02, 0x00, 0x00, 0x04, 0xde, 0x02, 0x00, + 0x00, 0x04, 0xdf, 0x02, 0x00, 0x00, 0x04, 0xe0, + 0x02, 0x00, 0x00, 0x04, 0xe1, 0x02, 0x00, 0x00, + 0x04, 0xe2, 0x02, 0x00, 0x00, 0x04, 0xe3, 0x02, + 0x00, 0x00, 0x04, 0xe4, 0x02, 0x00, 0x00, 0x26, + 0x20, 0x00, 0x04, 0xe5, 0x02, 0x00, 0x00, 0x4d, + 0x20, 0x00, 0x00, 0x80, 0x04, 0xe6, 0x02, 0x00, + 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0xe7, + 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, + 0x04, 0xe8, 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, + 0x00, 0x80, 0x04, 0xe9, 0x02, 0x00, 0x00, 0x4d, + 0x24, 0x00, 0x00, 0x80, 0x04, 0xea, 0x02, 0x00, + 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0xeb, + 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, + 0x04, 0xec, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, + 0x00, 0x80, 0x04, 0xed, 0x02, 0x00, 0x00, 0x4d, + 0x28, 0x00, 0x00, 0x80, 0x04, 0xee, 0x02, 0x00, + 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0xef, + 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, + 0x04, 0xf0, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, + 0x00, 0x80, 0x04, 0xf1, 0x02, 0x00, 0x00, 0x4d, + 0x2c, 0x00, 0x00, 0x80, 0x04, 0xf2, 0x02, 0x00, + 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0xf3, + 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, + 0x04, 0xf4, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, + 0x00, 0x80, 0x04, 0xf5, 0x02, 0x00, 0x00, 0x4d, + 0x30, 0x00, 0x00, 0x80, 0x04, 0xf6, 0x02, 0x00, + 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0xf7, + 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, + 0x04, 0xf8, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, + 0x00, 0x80, 0x04, 0xf9, 0x02, 0x00, 0x00, 0x4d, + 0x34, 0x00, 0x00, 0x80, 0x04, 0xfa, 0x02, 0x00, + 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0xfb, + 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, + 0x04, 0xfc, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, + 0x00, 0x80, 0x04, 0xfd, 0x02, 0x00, 0x00, 0x4d, + 0x38, 0x00, 0x00, 0x80, 0x04, 0xfe, 0x02, 0x00, + 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0xff, + 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, + 0x04, 0x00, 0x03, 0x00, 0x00, 0x4d, 0x3b, 0x00, + 0x00, 0x80, 0x04, 0x01, 0x03, 0x00, 0x00, 0x4d, + 0x3c, 0x00, 0x00, 0x80, 0x04, 0x02, 0x03, 0x00, + 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x03, + 0x03, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, + 0x04, 0x04, 0x03, 0x00, 0x00, 0x4d, 0x3f, 0x00, + 0x00, 0x80, 0x04, 0x05, 0x03, 0x00, 0x00, 0x4d, + 0x40, 0x00, 0x00, 0x80, 0x04, 0x06, 0x03, 0x00, + 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x07, + 0x03, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, + 0x04, 0x08, 0x03, 0x00, 0x00, 0x4d, 0x43, 0x00, + 0x00, 0x80, 0x04, 0x09, 0x03, 0x00, 0x00, 0x4d, + 0x44, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x03, 0x00, + 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x0b, + 0x03, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, + 0x04, 0x0c, 0x03, 0x00, 0x00, 0x4d, 0x47, 0x00, + 0x00, 0x80, 0x04, 0x0d, 0x03, 0x00, 0x00, 0x4d, + 0x48, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x03, 0x00, + 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x0f, + 0x03, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, + 0x04, 0x10, 0x03, 0x00, 0x00, 0x4d, 0x4b, 0x00, + 0x00, 0x80, 0x04, 0x11, 0x03, 0x00, 0x00, 0x4d, + 0x4c, 0x00, 0x00, 0x80, 0x04, 0x12, 0x03, 0x00, + 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x13, + 0x03, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, + 0x04, 0x14, 0x03, 0x00, 0x00, 0x4d, 0x4f, 0x00, + 0x00, 0x80, 0x04, 0x15, 0x03, 0x00, 0x00, 0x4d, + 0x50, 0x00, 0x00, 0x80, 0x04, 0x16, 0x03, 0x00, + 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x17, + 0x03, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, + 0x04, 0x18, 0x03, 0x00, 0x00, 0x4d, 0x53, 0x00, + 0x00, 0x80, 0x04, 0x19, 0x03, 0x00, 0x00, 0x4d, + 0x54, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x03, 0x00, + 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x1b, + 0x03, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, + 0x04, 0x1c, 0x03, 0x00, 0x00, 0x4d, 0x57, 0x00, + 0x00, 0x80, 0x04, 0x1d, 0x03, 0x00, 0x00, 0x4d, + 0x58, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x03, 0x00, + 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x1f, + 0x03, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, + 0x04, 0x20, 0x03, 0x00, 0x00, 0x4d, 0x5b, 0x00, + 0x00, 0x80, 0x04, 0x21, 0x03, 0x00, 0x00, 0x4d, + 0x5c, 0x00, 0x00, 0x80, 0x04, 0x22, 0x03, 0x00, + 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x23, + 0x03, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, + 0x04, 0x24, 0x03, 0x00, 0x00, 0x4d, 0x5f, 0x00, + 0x00, 0x80, 0x04, 0x25, 0x03, 0x00, 0x00, 0x4d, + 0x60, 0x00, 0x00, 0x80, 0x04, 0x26, 0x03, 0x00, + 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x27, + 0x03, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, + 0x04, 0x28, 0x03, 0x00, 0x00, 0x4d, 0x63, 0x00, + 0x00, 0x80, 0x04, 0x29, 0x03, 0x00, 0x00, 0x4d, + 0x64, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x03, 0x00, + 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x2b, + 0x03, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, + 0x04, 0x2c, 0x03, 0x00, 0x00, 0x4d, 0x67, 0x00, + 0x00, 0x80, 0x04, 0x2d, 0x03, 0x00, 0x00, 0x4d, + 0x68, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x03, 0x00, + 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x2f, + 0x03, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, + 0x04, 0x30, 0x03, 0x00, 0x00, 0x4d, 0x6b, 0x00, + 0x00, 0x80, 0x04, 0x31, 0x03, 0x00, 0x00, 0x4d, + 0x6c, 0x00, 0x00, 0x80, 0x04, 0x32, 0x03, 0x00, + 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x33, + 0x03, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, + 0x04, 0x34, 0x03, 0x00, 0x00, 0x4d, 0x6f, 0x00, + 0x00, 0x80, 0x04, 0x35, 0x03, 0x00, 0x00, 0x4d, + 0x70, 0x00, 0x00, 0x80, 0x04, 0x36, 0x03, 0x00, + 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x37, + 0x03, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, + 0x04, 0x38, 0x03, 0x00, 0x00, 0x4d, 0x73, 0x00, + 0x00, 0x80, 0x04, 0x39, 0x03, 0x00, 0x00, 0x4d, + 0x74, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x03, 0x00, + 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x3b, + 0x03, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, + 0x04, 0x3c, 0x03, 0x00, 0x00, 0x4d, 0x77, 0x00, + 0x00, 0x80, 0x04, 0x3d, 0x03, 0x00, 0x00, 0x4d, + 0x78, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x03, 0x00, + 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x3f, + 0x03, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, + 0x04, 0x40, 0x03, 0x00, 0x00, 0x4d, 0x7b, 0x00, + 0x00, 0x80, 0x04, 0x41, 0x03, 0x00, 0x00, 0x4d, + 0x7c, 0x00, 0x00, 0x80, 0x04, 0x42, 0x03, 0x00, + 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x43, + 0x03, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, + 0x04, 0x44, 0x03, 0x00, 0x00, 0x4d, 0x7f, 0x00, + 0x00, 0x80, 0x04, 0x45, 0x03, 0x00, 0x00, 0x4d, + 0x80, 0x00, 0x00, 0x80, 0x04, 0x46, 0x03, 0x00, + 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x47, + 0x03, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, + 0x04, 0x48, 0x03, 0x00, 0x00, 0x4d, 0x83, 0x00, + 0x00, 0x80, 0x04, 0x49, 0x03, 0x00, 0x00, 0x4d, + 0x84, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x03, 0x00, + 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x4b, + 0x03, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, + 0x04, 0x4c, 0x03, 0x00, 0x00, 0x4d, 0x87, 0x00, + 0x00, 0x80, 0x04, 0x4d, 0x03, 0x00, 0x00, 0x4d, + 0x88, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x03, 0x00, + 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x4f, + 0x03, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, + 0x04, 0x50, 0x03, 0x00, 0x00, 0x4d, 0x8b, 0x00, + 0x00, 0x80, 0x04, 0x51, 0x03, 0x00, 0x00, 0x4d, + 0x8c, 0x00, 0x00, 0x80, 0x04, 0x52, 0x03, 0x00, + 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x53, + 0x03, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, + 0x04, 0x54, 0x03, 0x00, 0x00, 0x4d, 0x8f, 0x00, + 0x00, 0x80, 0x04, 0x55, 0x03, 0x00, 0x00, 0x4d, + 0x90, 0x00, 0x00, 0x80, 0x04, 0x56, 0x03, 0x00, + 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x57, + 0x03, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, + 0x04, 0x58, 0x03, 0x00, 0x00, 0x4d, 0x93, 0x00, + 0x00, 0x80, 0x04, 0x59, 0x03, 0x00, 0x00, 0x4d, + 0x94, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x03, 0x00, + 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x5b, + 0x03, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, + 0x04, 0x5c, 0x03, 0x00, 0x00, 0x4d, 0x97, 0x00, + 0x00, 0x80, 0x04, 0x5d, 0x03, 0x00, 0x00, 0x4d, + 0x98, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x03, 0x00, + 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x5f, + 0x03, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, + 0x04, 0x60, 0x03, 0x00, 0x00, 0x4d, 0x9b, 0x00, + 0x00, 0x80, 0x04, 0x61, 0x03, 0x00, 0x00, 0x4d, + 0x9c, 0x00, 0x00, 0x80, 0x04, 0x62, 0x03, 0x00, + 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x63, + 0x03, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, + 0x04, 0x64, 0x03, 0x00, 0x00, 0x4d, 0x9f, 0x00, + 0x00, 0x80, 0x04, 0x65, 0x03, 0x00, 0x00, 0x4d, + 0xa0, 0x00, 0x00, 0x80, 0x04, 0x66, 0x03, 0x00, + 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x67, + 0x03, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, + 0x04, 0x68, 0x03, 0x00, 0x00, 0x4d, 0xa3, 0x00, + 0x00, 0x80, 0x04, 0x69, 0x03, 0x00, 0x00, 0x4d, + 0xa4, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x03, 0x00, + 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x6b, + 0x03, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, + 0x04, 0x6c, 0x03, 0x00, 0x00, 0x4d, 0xa7, 0x00, + 0x00, 0x80, 0x04, 0x6d, 0x03, 0x00, 0x00, 0x4d, + 0xa8, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x03, 0x00, + 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x6f, + 0x03, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, + 0x04, 0x70, 0x03, 0x00, 0x00, 0x4d, 0xab, 0x00, + 0x00, 0x80, 0x04, 0x71, 0x03, 0x00, 0x00, 0x4d, + 0xac, 0x00, 0x00, 0x80, 0x04, 0x72, 0x03, 0x00, + 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0x73, + 0x03, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, + 0x04, 0x74, 0x03, 0x00, 0x00, 0x4d, 0xaf, 0x00, + 0x00, 0x80, 0x04, 0x75, 0x03, 0x00, 0x00, 0x4d, + 0xb0, 0x00, 0x00, 0x80, 0x04, 0x76, 0x03, 0x00, + 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0x77, + 0x03, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, + 0x04, 0x78, 0x03, 0x00, 0x00, 0x4d, 0xb3, 0x00, + 0x00, 0x80, 0x04, 0x79, 0x03, 0x00, 0x00, 0x4d, + 0xb4, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x03, 0x00, + 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0x7b, + 0x03, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, + 0x04, 0x7c, 0x03, 0x00, 0x00, 0x4d, 0xb7, 0x00, + 0x00, 0x80, 0x04, 0x7d, 0x03, 0x00, 0x00, 0x4d, + 0xb8, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x03, 0x00, + 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0x7f, + 0x03, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, + 0x04, 0x80, 0x03, 0x00, 0x00, 0x4d, 0xbb, 0x00, + 0x00, 0x80, 0x04, 0x81, 0x03, 0x00, 0x00, 0x4d, + 0xbc, 0x00, 0x00, 0x80, 0x04, 0x82, 0x03, 0x00, + 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0x83, + 0x03, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, + 0x04, 0x84, 0x03, 0x00, 0x00, 0x4d, 0xbf, 0x00, + 0x00, 0x80, 0x04, 0x85, 0x03, 0x00, 0x00, 0x4d, + 0xc0, 0x00, 0x00, 0x80, 0x04, 0x86, 0x03, 0x00, + 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0x87, + 0x03, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, + 0x04, 0x88, 0x03, 0x00, 0x00, 0x4d, 0xc3, 0x00, + 0x00, 0x80, 0x04, 0x89, 0x03, 0x00, 0x00, 0x4d, + 0xc4, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x03, 0x00, + 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0x8b, + 0x03, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, + 0x04, 0x8c, 0x03, 0x00, 0x00, 0x4d, 0xc7, 0x00, + 0x00, 0x80, 0x04, 0x8d, 0x03, 0x00, 0x00, 0x4d, + 0xc8, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x03, 0x00, + 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0x8f, + 0x03, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, + 0x04, 0x90, 0x03, 0x00, 0x00, 0x4d, 0xcb, 0x00, + 0x00, 0x80, 0x04, 0x91, 0x03, 0x00, 0x00, 0x4d, + 0xcc, 0x00, 0x00, 0x80, 0x04, 0x92, 0x03, 0x00, + 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0x93, + 0x03, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, + 0x04, 0x94, 0x03, 0x00, 0x00, 0x4d, 0xcf, 0x00, + 0x00, 0x80, 0x04, 0x95, 0x03, 0x00, 0x00, 0x4d, + 0xd0, 0x00, 0x00, 0x80, 0x04, 0x96, 0x03, 0x00, + 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0x97, + 0x03, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, + 0x04, 0x98, 0x03, 0x00, 0x00, 0x4d, 0xd3, 0x00, + 0x00, 0x80, 0x04, 0x99, 0x03, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x03, 0x00, + 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0x9b, + 0x03, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, + 0x04, 0x9c, 0x03, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x80, 0x04, 0x9d, 0x03, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x03, 0x00, + 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0x9f, + 0x03, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, + 0x04, 0xa0, 0x03, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x80, 0x04, 0xa1, 0x03, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x03, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xa3, + 0x03, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, + 0x04, 0xa4, 0x03, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x80, 0x04, 0xa5, 0x03, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x03, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xa7, + 0x03, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, + 0x04, 0xa8, 0x03, 0x00, 0x00, 0x4d, 0xe3, 0x00, + 0x00, 0x80, 0x04, 0xa9, 0x03, 0x00, 0x00, 0x4d, + 0xe4, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x03, 0x00, + 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0xab, + 0x03, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, + 0x04, 0xac, 0x03, 0x00, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x80, 0x04, 0xad, 0x03, 0x00, 0x00, 0x4d, + 0xe8, 0x00, 0x00, 0x80, 0x04, 0xae, 0x03, 0x00, + 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0xaf, + 0x03, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, + 0x04, 0xb0, 0x03, 0x00, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x80, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xc5, 0x02, 0x00, 0x00, 0x04, 0xc6, 0x02, 0x00, + 0x00, 0x04, 0xc7, 0x02, 0x00, 0x00, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x04, 0xc9, 0x02, 0x00, 0x00, + 0x04, 0xca, 0x02, 0x00, 0x00, 0x04, 0xcb, 0x02, + 0x00, 0x00, 0x04, 0xcc, 0x02, 0x00, 0x00, 0x04, + 0xcd, 0x02, 0x00, 0x00, 0x04, 0xce, 0x02, 0x00, + 0x00, 0x04, 0xcf, 0x02, 0x00, 0x00, 0x04, 0xd0, + 0x02, 0x00, 0x00, 0x04, 0xd1, 0x02, 0x00, 0x00, + 0x04, 0xd2, 0x02, 0x00, 0x00, 0x04, 0xd3, 0x02, + 0x00, 0x00, 0x04, 0xd4, 0x02, 0x00, 0x00, 0x04, + 0xd5, 0x02, 0x00, 0x00, 0x04, 0xd6, 0x02, 0x00, + 0x00, 0x04, 0xd7, 0x02, 0x00, 0x00, 0x04, 0xd8, + 0x02, 0x00, 0x00, 0x04, 0xd9, 0x02, 0x00, 0x00, + 0x04, 0xda, 0x02, 0x00, 0x00, 0x04, 0xdb, 0x02, + 0x00, 0x00, 0x04, 0xdc, 0x02, 0x00, 0x00, 0x04, + 0xdd, 0x02, 0x00, 0x00, 0x04, 0xde, 0x02, 0x00, + 0x00, 0x04, 0xdf, 0x02, 0x00, 0x00, 0x04, 0xe0, + 0x02, 0x00, 0x00, 0x04, 0xe1, 0x02, 0x00, 0x00, + 0x04, 0xe2, 0x02, 0x00, 0x00, 0x04, 0xe3, 0x02, + 0x00, 0x00, 0x04, 0xe4, 0x02, 0x00, 0x00, 0x26, + 0x20, 0x00, 0x04, 0xe5, 0x02, 0x00, 0x00, 0x4d, + 0x20, 0x00, 0x00, 0x80, 0x04, 0xe6, 0x02, 0x00, + 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0xe7, + 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, + 0x04, 0xe8, 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, + 0x00, 0x80, 0x04, 0xe9, 0x02, 0x00, 0x00, 0x4d, + 0x24, 0x00, 0x00, 0x80, 0x04, 0xea, 0x02, 0x00, + 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0xeb, + 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, + 0x04, 0xec, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, + 0x00, 0x80, 0x04, 0xed, 0x02, 0x00, 0x00, 0x4d, + 0x28, 0x00, 0x00, 0x80, 0x04, 0xee, 0x02, 0x00, + 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0xef, + 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, + 0x04, 0xf0, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, + 0x00, 0x80, 0x04, 0xf1, 0x02, 0x00, 0x00, 0x4d, + 0x2c, 0x00, 0x00, 0x80, 0x04, 0xf2, 0x02, 0x00, + 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0xf3, + 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, + 0x04, 0xf4, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, + 0x00, 0x80, 0x04, 0xf5, 0x02, 0x00, 0x00, 0x4d, + 0x30, 0x00, 0x00, 0x80, 0x04, 0xf6, 0x02, 0x00, + 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0xf7, + 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, + 0x04, 0xf8, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, + 0x00, 0x80, 0x04, 0xf9, 0x02, 0x00, 0x00, 0x4d, + 0x34, 0x00, 0x00, 0x80, 0x04, 0xfa, 0x02, 0x00, + 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0xfb, + 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, + 0x04, 0xfc, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, + 0x00, 0x80, 0x04, 0xfd, 0x02, 0x00, 0x00, 0x4d, + 0x38, 0x00, 0x00, 0x80, 0x04, 0xfe, 0x02, 0x00, + 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0xff, + 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, + 0x04, 0x00, 0x03, 0x00, 0x00, 0x4d, 0x3b, 0x00, + 0x00, 0x80, 0x04, 0x01, 0x03, 0x00, 0x00, 0x4d, + 0x3c, 0x00, 0x00, 0x80, 0x04, 0x02, 0x03, 0x00, + 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x03, + 0x03, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, + 0x04, 0x04, 0x03, 0x00, 0x00, 0x4d, 0x3f, 0x00, + 0x00, 0x80, 0x04, 0x05, 0x03, 0x00, 0x00, 0x4d, + 0x40, 0x00, 0x00, 0x80, 0x04, 0x06, 0x03, 0x00, + 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x07, + 0x03, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, + 0x04, 0x08, 0x03, 0x00, 0x00, 0x4d, 0x43, 0x00, + 0x00, 0x80, 0x04, 0x09, 0x03, 0x00, 0x00, 0x4d, + 0x44, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x03, 0x00, + 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x0b, + 0x03, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, + 0x04, 0x0c, 0x03, 0x00, 0x00, 0x4d, 0x47, 0x00, + 0x00, 0x80, 0x04, 0x0d, 0x03, 0x00, 0x00, 0x4d, + 0x48, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x03, 0x00, + 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x0f, + 0x03, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, + 0x04, 0x10, 0x03, 0x00, 0x00, 0x4d, 0x4b, 0x00, + 0x00, 0x80, 0x04, 0x11, 0x03, 0x00, 0x00, 0x4d, + 0x4c, 0x00, 0x00, 0x80, 0x04, 0x12, 0x03, 0x00, + 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x13, + 0x03, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, + 0x04, 0x14, 0x03, 0x00, 0x00, 0x4d, 0x4f, 0x00, + 0x00, 0x80, 0x04, 0x15, 0x03, 0x00, 0x00, 0x4d, + 0x50, 0x00, 0x00, 0x80, 0x04, 0x16, 0x03, 0x00, + 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x17, + 0x03, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, + 0x04, 0x18, 0x03, 0x00, 0x00, 0x4d, 0x53, 0x00, + 0x00, 0x80, 0x04, 0x19, 0x03, 0x00, 0x00, 0x4d, + 0x54, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x03, 0x00, + 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x1b, + 0x03, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, + 0x04, 0x1c, 0x03, 0x00, 0x00, 0x4d, 0x57, 0x00, + 0x00, 0x80, 0x04, 0x1d, 0x03, 0x00, 0x00, 0x4d, + 0x58, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x03, 0x00, + 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x1f, + 0x03, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, + 0x04, 0x20, 0x03, 0x00, 0x00, 0x4d, 0x5b, 0x00, + 0x00, 0x80, 0x04, 0x21, 0x03, 0x00, 0x00, 0x4d, + 0x5c, 0x00, 0x00, 0x80, 0x04, 0x22, 0x03, 0x00, + 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x23, + 0x03, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, + 0x04, 0x24, 0x03, 0x00, 0x00, 0x4d, 0x5f, 0x00, + 0x00, 0x80, 0x04, 0x25, 0x03, 0x00, 0x00, 0x4d, + 0x60, 0x00, 0x00, 0x80, 0x04, 0x26, 0x03, 0x00, + 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x27, + 0x03, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, + 0x04, 0x28, 0x03, 0x00, 0x00, 0x4d, 0x63, 0x00, + 0x00, 0x80, 0x04, 0x29, 0x03, 0x00, 0x00, 0x4d, + 0x64, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x03, 0x00, + 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x2b, + 0x03, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, + 0x04, 0x2c, 0x03, 0x00, 0x00, 0x4d, 0x67, 0x00, + 0x00, 0x80, 0x04, 0x2d, 0x03, 0x00, 0x00, 0x4d, + 0x68, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x03, 0x00, + 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x2f, + 0x03, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, + 0x04, 0x30, 0x03, 0x00, 0x00, 0x4d, 0x6b, 0x00, + 0x00, 0x80, 0x04, 0x31, 0x03, 0x00, 0x00, 0x4d, + 0x6c, 0x00, 0x00, 0x80, 0x04, 0x32, 0x03, 0x00, + 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x33, + 0x03, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, + 0x04, 0x34, 0x03, 0x00, 0x00, 0x4d, 0x6f, 0x00, + 0x00, 0x80, 0x04, 0x35, 0x03, 0x00, 0x00, 0x4d, + 0x70, 0x00, 0x00, 0x80, 0x04, 0x36, 0x03, 0x00, + 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x37, + 0x03, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, + 0x04, 0x38, 0x03, 0x00, 0x00, 0x4d, 0x73, 0x00, + 0x00, 0x80, 0x04, 0x39, 0x03, 0x00, 0x00, 0x4d, + 0x74, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x03, 0x00, + 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x3b, + 0x03, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, + 0x04, 0x3c, 0x03, 0x00, 0x00, 0x4d, 0x77, 0x00, + 0x00, 0x80, 0x04, 0x3d, 0x03, 0x00, 0x00, 0x4d, + 0x78, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x03, 0x00, + 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x3f, + 0x03, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, + 0x04, 0x40, 0x03, 0x00, 0x00, 0x4d, 0x7b, 0x00, + 0x00, 0x80, 0x04, 0x41, 0x03, 0x00, 0x00, 0x4d, + 0x7c, 0x00, 0x00, 0x80, 0x04, 0x42, 0x03, 0x00, + 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x43, + 0x03, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, + 0x04, 0x44, 0x03, 0x00, 0x00, 0x4d, 0x7f, 0x00, + 0x00, 0x80, 0x04, 0x45, 0x03, 0x00, 0x00, 0x4d, + 0x80, 0x00, 0x00, 0x80, 0x04, 0x46, 0x03, 0x00, + 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x47, + 0x03, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, + 0x04, 0x48, 0x03, 0x00, 0x00, 0x4d, 0x83, 0x00, + 0x00, 0x80, 0x04, 0x49, 0x03, 0x00, 0x00, 0x4d, + 0x84, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x03, 0x00, + 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x4b, + 0x03, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, + 0x04, 0x4c, 0x03, 0x00, 0x00, 0x4d, 0x87, 0x00, + 0x00, 0x80, 0x04, 0x4d, 0x03, 0x00, 0x00, 0x4d, + 0x88, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x03, 0x00, + 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x4f, + 0x03, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, + 0x04, 0x50, 0x03, 0x00, 0x00, 0x4d, 0x8b, 0x00, + 0x00, 0x80, 0x04, 0x51, 0x03, 0x00, 0x00, 0x4d, + 0x8c, 0x00, 0x00, 0x80, 0x04, 0x52, 0x03, 0x00, + 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x53, + 0x03, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, + 0x04, 0x54, 0x03, 0x00, 0x00, 0x4d, 0x8f, 0x00, + 0x00, 0x80, 0x04, 0x55, 0x03, 0x00, 0x00, 0x4d, + 0x90, 0x00, 0x00, 0x80, 0x04, 0x56, 0x03, 0x00, + 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x57, + 0x03, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, + 0x04, 0x58, 0x03, 0x00, 0x00, 0x4d, 0x93, 0x00, + 0x00, 0x80, 0x04, 0x59, 0x03, 0x00, 0x00, 0x4d, + 0x94, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x03, 0x00, + 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x5b, + 0x03, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, + 0x04, 0x5c, 0x03, 0x00, 0x00, 0x4d, 0x97, 0x00, + 0x00, 0x80, 0x04, 0x5d, 0x03, 0x00, 0x00, 0x4d, + 0x98, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x03, 0x00, + 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x5f, + 0x03, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, + 0x04, 0x60, 0x03, 0x00, 0x00, 0x4d, 0x9b, 0x00, + 0x00, 0x80, 0x04, 0x61, 0x03, 0x00, 0x00, 0x4d, + 0x9c, 0x00, 0x00, 0x80, 0x04, 0x62, 0x03, 0x00, + 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x63, + 0x03, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, + 0x04, 0x64, 0x03, 0x00, 0x00, 0x4d, 0x9f, 0x00, + 0x00, 0x80, 0x04, 0x65, 0x03, 0x00, 0x00, 0x4d, + 0xa0, 0x00, 0x00, 0x80, 0x04, 0x66, 0x03, 0x00, + 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x67, + 0x03, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, + 0x04, 0x68, 0x03, 0x00, 0x00, 0x4d, 0xa3, 0x00, + 0x00, 0x80, 0x04, 0x69, 0x03, 0x00, 0x00, 0x4d, + 0xa4, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x03, 0x00, + 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x6b, + 0x03, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, + 0x04, 0x6c, 0x03, 0x00, 0x00, 0x4d, 0xa7, 0x00, + 0x00, 0x80, 0x04, 0x6d, 0x03, 0x00, 0x00, 0x4d, + 0xa8, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x03, 0x00, + 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x6f, + 0x03, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, + 0x04, 0x70, 0x03, 0x00, 0x00, 0x4d, 0xab, 0x00, + 0x00, 0x80, 0x04, 0x71, 0x03, 0x00, 0x00, 0x4d, + 0xac, 0x00, 0x00, 0x80, 0x04, 0x72, 0x03, 0x00, + 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0x73, + 0x03, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, + 0x04, 0x74, 0x03, 0x00, 0x00, 0x4d, 0xaf, 0x00, + 0x00, 0x80, 0x04, 0x75, 0x03, 0x00, 0x00, 0x4d, + 0xb0, 0x00, 0x00, 0x80, 0x04, 0x76, 0x03, 0x00, + 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0x77, + 0x03, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, + 0x04, 0x78, 0x03, 0x00, 0x00, 0x4d, 0xb3, 0x00, + 0x00, 0x80, 0x04, 0x79, 0x03, 0x00, 0x00, 0x4d, + 0xb4, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x03, 0x00, + 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0x7b, + 0x03, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, + 0x04, 0x7c, 0x03, 0x00, 0x00, 0x4d, 0xb7, 0x00, + 0x00, 0x80, 0x04, 0x7d, 0x03, 0x00, 0x00, 0x4d, + 0xb8, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x03, 0x00, + 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0x7f, + 0x03, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, + 0x04, 0x80, 0x03, 0x00, 0x00, 0x4d, 0xbb, 0x00, + 0x00, 0x80, 0x04, 0x81, 0x03, 0x00, 0x00, 0x4d, + 0xbc, 0x00, 0x00, 0x80, 0x04, 0x82, 0x03, 0x00, + 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0x83, + 0x03, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, + 0x04, 0x84, 0x03, 0x00, 0x00, 0x4d, 0xbf, 0x00, + 0x00, 0x80, 0x04, 0x85, 0x03, 0x00, 0x00, 0x4d, + 0xc0, 0x00, 0x00, 0x80, 0x04, 0x86, 0x03, 0x00, + 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0x87, + 0x03, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, + 0x04, 0x88, 0x03, 0x00, 0x00, 0x4d, 0xc3, 0x00, + 0x00, 0x80, 0x04, 0x89, 0x03, 0x00, 0x00, 0x4d, + 0xc4, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x03, 0x00, + 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0x8b, + 0x03, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, + 0x04, 0x8c, 0x03, 0x00, 0x00, 0x4d, 0xc7, 0x00, + 0x00, 0x80, 0x04, 0x8d, 0x03, 0x00, 0x00, 0x4d, + 0xc8, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x03, 0x00, + 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0x8f, + 0x03, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, + 0x04, 0x90, 0x03, 0x00, 0x00, 0x4d, 0xcb, 0x00, + 0x00, 0x80, 0x04, 0x91, 0x03, 0x00, 0x00, 0x4d, + 0xcc, 0x00, 0x00, 0x80, 0x04, 0x92, 0x03, 0x00, + 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0x93, + 0x03, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, + 0x04, 0x94, 0x03, 0x00, 0x00, 0x4d, 0xcf, 0x00, + 0x00, 0x80, 0x04, 0x95, 0x03, 0x00, 0x00, 0x4d, + 0xd0, 0x00, 0x00, 0x80, 0x04, 0x96, 0x03, 0x00, + 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0x97, + 0x03, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, + 0x04, 0x98, 0x03, 0x00, 0x00, 0x4d, 0xd3, 0x00, + 0x00, 0x80, 0x04, 0x99, 0x03, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x03, 0x00, + 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0x9b, + 0x03, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, + 0x04, 0x9c, 0x03, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x80, 0x04, 0x9d, 0x03, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x03, 0x00, + 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0x9f, + 0x03, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, + 0x04, 0xa0, 0x03, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x80, 0x04, 0xa1, 0x03, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x03, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xa3, + 0x03, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, + 0x04, 0xa4, 0x03, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x80, 0x04, 0xa5, 0x03, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x03, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xa7, + 0x03, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, + 0x04, 0xa8, 0x03, 0x00, 0x00, 0x4d, 0xe3, 0x00, + 0x00, 0x80, 0x04, 0xa9, 0x03, 0x00, 0x00, 0x4d, + 0xe4, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x03, 0x00, + 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0xab, + 0x03, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, + 0x04, 0xac, 0x03, 0x00, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x80, 0x04, 0xad, 0x03, 0x00, 0x00, 0x4d, + 0xe8, 0x00, 0x00, 0x80, 0x04, 0xae, 0x03, 0x00, + 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0xaf, + 0x03, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, + 0x04, 0xb0, 0x03, 0x00, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x80, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x73, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, + 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x58, 0xbe, + 0x59, 0xbe, 0x5a, 0xbe, 0x5b, 0xbe, 0x5c, 0xbe, + 0x5d, 0xbe, 0x5e, 0xbe, 0x5f, 0xbe, 0x60, 0xbe, + 0x61, 0xbe, 0x62, 0xbe, 0x63, 0x26, 0x0c, 0x00, + 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0xb1, 0x03, + 0x00, 0x00, 0x04, 0xb2, 0x03, 0x00, 0x00, 0x04, + 0xb3, 0x03, 0x00, 0x00, 0x04, 0xb4, 0x03, 0x00, + 0x00, 0x04, 0xb5, 0x03, 0x00, 0x00, 0x04, 0xb6, + 0x03, 0x00, 0x00, 0x04, 0xb7, 0x03, 0x00, 0x00, + 0x04, 0xb8, 0x03, 0x00, 0x00, 0x04, 0xb9, 0x03, + 0x00, 0x00, 0x04, 0xba, 0x03, 0x00, 0x00, 0x04, + 0xbb, 0x03, 0x00, 0x00, 0x04, 0xbc, 0x03, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xb1, 0x03, 0x00, 0x00, 0x04, 0xb2, + 0x03, 0x00, 0x00, 0x04, 0xb3, 0x03, 0x00, 0x00, + 0x04, 0xb4, 0x03, 0x00, 0x00, 0x04, 0xb5, 0x03, + 0x00, 0x00, 0x04, 0xb6, 0x03, 0x00, 0x00, 0x04, + 0xb7, 0x03, 0x00, 0x00, 0x04, 0xb8, 0x03, 0x00, + 0x00, 0x04, 0xb9, 0x03, 0x00, 0x00, 0x04, 0xba, + 0x03, 0x00, 0x00, 0x04, 0xbb, 0x03, 0x00, 0x00, + 0x04, 0xbc, 0x03, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x63, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x70, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xbd, 0x03, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, + 0xbd, 0x03, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xbd, 0x03, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x73, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x4d, 0x76, + 0x01, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, + 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x63, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x70, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xbe, 0x03, 0x00, 0x00, 0x04, 0xbf, 0x03, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x56, 0x01, + 0x00, 0x00, 0x04, 0xbe, 0x03, 0x00, 0x00, 0x04, + 0xbf, 0x03, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xbe, 0x03, 0x00, + 0x00, 0x04, 0xbf, 0x03, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x73, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, + 0x4d, 0x77, 0x01, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x00, 0x4d, 0xc0, 0x03, 0x00, 0x00, 0x4d, + 0xc1, 0x03, 0x00, 0x00, 0x0b, 0x04, 0xc2, 0x03, + 0x00, 0x00, 0x04, 0xc3, 0x03, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xc4, 0x03, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0xc5, 0x03, 0x00, 0x00, 0x4d, 0xc6, + 0x03, 0x00, 0x00, 0x04, 0xc7, 0x03, 0x00, 0x00, + 0x4d, 0xc8, 0x03, 0x00, 0x00, 0x4d, 0xc9, 0x03, + 0x00, 0x00, 0x0b, 0x04, 0xca, 0x03, 0x00, 0x00, + 0x4d, 0xc6, 0x03, 0x00, 0x00, 0x04, 0xcb, 0x03, + 0x00, 0x00, 0x4d, 0xc8, 0x03, 0x00, 0x00, 0x4d, + 0xcc, 0x03, 0x00, 0x00, 0x0b, 0x04, 0xcd, 0x03, + 0x00, 0x00, 0x4d, 0xc6, 0x03, 0x00, 0x00, 0x04, + 0xce, 0x03, 0x00, 0x00, 0x4d, 0xc8, 0x03, 0x00, + 0x00, 0x4d, 0xcf, 0x03, 0x00, 0x00, 0x4d, 0xd0, + 0x03, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xd1, 0x03, + 0x00, 0x00, 0x4d, 0xc9, 0x03, 0x00, 0x00, 0x04, + 0xd2, 0x03, 0x00, 0x00, 0x4d, 0xd3, 0x03, 0x00, + 0x00, 0x04, 0xd4, 0x03, 0x00, 0x00, 0x4d, 0xd5, + 0x03, 0x00, 0x00, 0x04, 0xd6, 0x03, 0x00, 0x00, + 0x4d, 0xd7, 0x03, 0x00, 0x00, 0x04, 0xd8, 0x03, + 0x00, 0x00, 0x4d, 0xd9, 0x03, 0x00, 0x00, 0x04, + 0xda, 0x03, 0x00, 0x00, 0x4d, 0xdb, 0x03, 0x00, + 0x00, 0x04, 0xdc, 0x03, 0x00, 0x00, 0x4d, 0xdd, + 0x03, 0x00, 0x00, 0x4d, 0xc2, 0x03, 0x00, 0x00, + 0x0b, 0x04, 0xde, 0x03, 0x00, 0x00, 0x4d, 0xc9, + 0x03, 0x00, 0x00, 0x04, 0xdf, 0x03, 0x00, 0x00, + 0x4d, 0xd3, 0x03, 0x00, 0x00, 0x04, 0xe0, 0x03, + 0x00, 0x00, 0x4d, 0xd5, 0x03, 0x00, 0x00, 0x04, + 0xe1, 0x03, 0x00, 0x00, 0x4d, 0xd7, 0x03, 0x00, + 0x00, 0x04, 0xe2, 0x03, 0x00, 0x00, 0x4d, 0xd9, + 0x03, 0x00, 0x00, 0x04, 0xda, 0x03, 0x00, 0x00, + 0x4d, 0xdb, 0x03, 0x00, 0x00, 0x04, 0xdc, 0x03, + 0x00, 0x00, 0x4d, 0xdd, 0x03, 0x00, 0x00, 0x4d, + 0xc3, 0x03, 0x00, 0x00, 0x4d, 0xe3, 0x03, 0x00, + 0x00, 0x0b, 0x04, 0xe4, 0x03, 0x00, 0x00, 0x4d, + 0xe5, 0x03, 0x00, 0x00, 0x04, 0xe6, 0x03, 0x00, + 0x00, 0x4d, 0xe7, 0x03, 0x00, 0x00, 0x04, 0xe8, + 0x03, 0x00, 0x00, 0x4d, 0xe9, 0x03, 0x00, 0x00, + 0x04, 0xea, 0x03, 0x00, 0x00, 0x4d, 0xeb, 0x03, + 0x00, 0x00, 0x04, 0xec, 0x03, 0x00, 0x00, 0x4d, + 0xed, 0x03, 0x00, 0x00, 0x04, 0xee, 0x03, 0x00, + 0x00, 0x4d, 0xef, 0x03, 0x00, 0x00, 0x04, 0xf0, + 0x03, 0x00, 0x00, 0x4d, 0xf1, 0x03, 0x00, 0x00, + 0x04, 0xf2, 0x03, 0x00, 0x00, 0x4d, 0xf3, 0x03, + 0x00, 0x00, 0x04, 0xf4, 0x03, 0x00, 0x00, 0x4d, + 0xf5, 0x03, 0x00, 0x00, 0x04, 0xf6, 0x03, 0x00, + 0x00, 0x4d, 0xf7, 0x03, 0x00, 0x00, 0x04, 0xf8, + 0x03, 0x00, 0x00, 0x4d, 0xf9, 0x03, 0x00, 0x00, + 0x04, 0xfa, 0x03, 0x00, 0x00, 0x4d, 0xfb, 0x03, + 0x00, 0x00, 0x04, 0xfc, 0x03, 0x00, 0x00, 0x4d, + 0xfd, 0x03, 0x00, 0x00, 0x04, 0xfe, 0x03, 0x00, + 0x00, 0x4d, 0xff, 0x03, 0x00, 0x00, 0x04, 0x00, + 0x04, 0x00, 0x00, 0x4d, 0x01, 0x04, 0x00, 0x00, + 0x04, 0x02, 0x04, 0x00, 0x00, 0x4d, 0x03, 0x04, + 0x00, 0x00, 0x04, 0x04, 0x04, 0x00, 0x00, 0x4d, + 0x05, 0x04, 0x00, 0x00, 0x04, 0x06, 0x04, 0x00, + 0x00, 0x4d, 0x07, 0x04, 0x00, 0x00, 0x04, 0x08, + 0x04, 0x00, 0x00, 0x4d, 0x09, 0x04, 0x00, 0x00, + 0x04, 0x0a, 0x04, 0x00, 0x00, 0x4d, 0x0b, 0x04, + 0x00, 0x00, 0x04, 0x0c, 0x04, 0x00, 0x00, 0x4d, + 0x0d, 0x04, 0x00, 0x00, 0x04, 0x0e, 0x04, 0x00, + 0x00, 0x4d, 0x0f, 0x04, 0x00, 0x00, 0x04, 0x10, + 0x04, 0x00, 0x00, 0x4d, 0x11, 0x04, 0x00, 0x00, + 0x04, 0x12, 0x04, 0x00, 0x00, 0x4d, 0x13, 0x04, + 0x00, 0x00, 0x04, 0x14, 0x04, 0x00, 0x00, 0x4d, + 0x15, 0x04, 0x00, 0x00, 0x04, 0x16, 0x04, 0x00, + 0x00, 0x4d, 0x17, 0x04, 0x00, 0x00, 0x04, 0x18, + 0x04, 0x00, 0x00, 0x4d, 0x19, 0x04, 0x00, 0x00, + 0x04, 0x1a, 0x04, 0x00, 0x00, 0x4d, 0x1b, 0x04, + 0x00, 0x00, 0x04, 0x1c, 0x04, 0x00, 0x00, 0x4d, + 0x1d, 0x04, 0x00, 0x00, 0x04, 0x1e, 0x04, 0x00, + 0x00, 0x4d, 0x1f, 0x04, 0x00, 0x00, 0x04, 0x20, + 0x04, 0x00, 0x00, 0x4d, 0x21, 0x04, 0x00, 0x00, + 0x04, 0x22, 0x04, 0x00, 0x00, 0x4d, 0x23, 0x04, + 0x00, 0x00, 0x04, 0x24, 0x04, 0x00, 0x00, 0x4d, + 0x25, 0x04, 0x00, 0x00, 0x04, 0x26, 0x04, 0x00, + 0x00, 0x4d, 0x27, 0x04, 0x00, 0x00, 0x04, 0x28, + 0x04, 0x00, 0x00, 0x4d, 0x29, 0x04, 0x00, 0x00, + 0x04, 0x2a, 0x04, 0x00, 0x00, 0x4d, 0x2b, 0x04, + 0x00, 0x00, 0x04, 0x2c, 0x04, 0x00, 0x00, 0x4d, + 0x2d, 0x04, 0x00, 0x00, 0x04, 0x2e, 0x04, 0x00, + 0x00, 0x4d, 0x2f, 0x04, 0x00, 0x00, 0x04, 0x30, + 0x04, 0x00, 0x00, 0x4d, 0x31, 0x04, 0x00, 0x00, + 0x04, 0x32, 0x04, 0x00, 0x00, 0x4d, 0x33, 0x04, + 0x00, 0x00, 0x04, 0x34, 0x04, 0x00, 0x00, 0x4d, + 0x35, 0x04, 0x00, 0x00, 0x04, 0x36, 0x04, 0x00, + 0x00, 0x4d, 0x37, 0x04, 0x00, 0x00, 0x04, 0x38, + 0x04, 0x00, 0x00, 0x4d, 0x39, 0x04, 0x00, 0x00, + 0x04, 0x3a, 0x04, 0x00, 0x00, 0x4d, 0x3b, 0x04, + 0x00, 0x00, 0x04, 0x3c, 0x04, 0x00, 0x00, 0x4d, + 0x3d, 0x04, 0x00, 0x00, 0x04, 0x3e, 0x04, 0x00, + 0x00, 0x4d, 0x3f, 0x04, 0x00, 0x00, 0x04, 0x40, + 0x04, 0x00, 0x00, 0x4d, 0x41, 0x04, 0x00, 0x00, + 0x4d, 0x42, 0x04, 0x00, 0x00, 0x4d, 0x45, 0x00, + 0x00, 0x00, 0x24, 0x01, 0x00, 0xcc, 0x28, 0x86, + 0x11, 0x01, 0x00, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, + 0x33, 0x07, 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_as_size = 24941; + +const uint8_t intl_as[24941] = { + 0x01, 0xc5, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x0c, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x0e, + 0x67, 0x72, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x10, + 0x62, 0x75, 0x64, 0x64, 0x68, 0x69, 0x73, 0x74, + 0x0e, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x73, 0x65, + 0x0c, 0x63, 0x6f, 0x70, 0x74, 0x69, 0x63, 0x0a, + 0x64, 0x61, 0x6e, 0x67, 0x69, 0x0e, 0x65, 0x74, + 0x68, 0x69, 0x6f, 0x61, 0x61, 0x10, 0x65, 0x74, + 0x68, 0x69, 0x6f, 0x70, 0x69, 0x63, 0x0e, 0x67, + 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x0c, 0x68, + 0x65, 0x62, 0x72, 0x65, 0x77, 0x0c, 0x69, 0x6e, + 0x64, 0x69, 0x61, 0x6e, 0x0e, 0x69, 0x73, 0x6c, + 0x61, 0x6d, 0x69, 0x63, 0x10, 0x69, 0x73, 0x6c, + 0x61, 0x6d, 0x69, 0x63, 0x63, 0x10, 0x6a, 0x61, + 0x70, 0x61, 0x6e, 0x65, 0x73, 0x65, 0x0e, 0x70, + 0x65, 0x72, 0x73, 0x69, 0x61, 0x6e, 0x06, 0x72, + 0x6f, 0x63, 0x04, 0x63, 0x61, 0x0e, 0x68, 0x6f, + 0x75, 0x72, 0x4e, 0x6f, 0x30, 0x0c, 0x68, 0x6f, + 0x75, 0x72, 0x31, 0x32, 0x0e, 0x7b, 0x31, 0x7d, + 0x20, 0x7b, 0x30, 0x7d, 0x0a, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x0c, 0x6d, 0x65, 0x64, 0x69, 0x75, + 0x6d, 0x08, 0x66, 0x75, 0x6c, 0x6c, 0x08, 0x6c, + 0x6f, 0x6e, 0x67, 0x02, 0x64, 0x06, 0x63, 0x63, + 0x63, 0x02, 0x45, 0x08, 0x64, 0x2c, 0x20, 0x45, + 0x04, 0x45, 0x64, 0x10, 0x45, 0x20, 0x68, 0x3a, + 0x6d, 0x6d, 0x20, 0x61, 0x06, 0x45, 0x68, 0x6d, + 0x0e, 0x45, 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x06, 0x45, 0x48, 0x6d, 0x16, 0x45, 0x20, 0x68, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, + 0x08, 0x45, 0x68, 0x6d, 0x73, 0x14, 0x45, 0x20, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x08, 0x45, 0x48, 0x6d, 0x73, 0x06, 0x47, 0x20, + 0x79, 0x04, 0x47, 0x79, 0x0e, 0x47, 0x20, 0x79, + 0x20, 0x4d, 0x4d, 0x4d, 0x0a, 0x47, 0x79, 0x4d, + 0x4d, 0x4d, 0x12, 0x47, 0x20, 0x79, 0x20, 0x4d, + 0x4d, 0x4d, 0x20, 0x64, 0x0c, 0x47, 0x79, 0x4d, + 0x4d, 0x4d, 0x64, 0x18, 0x47, 0x20, 0x79, 0x20, + 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x2c, 0x20, 0x45, + 0x0e, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, + 0x06, 0x68, 0x20, 0x61, 0x02, 0x68, 0x04, 0x48, + 0x48, 0x02, 0x48, 0x0c, 0x68, 0x3a, 0x6d, 0x6d, + 0x20, 0x61, 0x04, 0x68, 0x6d, 0x0a, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x04, 0x48, 0x6d, 0x12, 0x68, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, + 0x06, 0x68, 0x6d, 0x73, 0x10, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x06, 0x48, 0x6d, + 0x73, 0x16, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x61, 0x20, 0x76, 0x08, 0x68, 0x6d, + 0x73, 0x76, 0x14, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x76, 0x08, 0x48, 0x6d, + 0x73, 0x76, 0x10, 0x68, 0x3a, 0x6d, 0x6d, 0x20, + 0x61, 0x20, 0x76, 0x06, 0x68, 0x6d, 0x76, 0x0e, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x20, 0x76, 0x06, + 0x48, 0x6d, 0x76, 0x02, 0x4c, 0x02, 0x4d, 0x0a, + 0x4d, 0x4d, 0x2d, 0x64, 0x64, 0x04, 0x4d, 0x64, + 0x10, 0x4d, 0x4d, 0x2d, 0x64, 0x64, 0x2c, 0x20, + 0x45, 0x06, 0x4d, 0x45, 0x64, 0x06, 0x4c, 0x4c, + 0x4c, 0x06, 0x4d, 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, + 0x4d, 0x20, 0x64, 0x08, 0x4d, 0x4d, 0x4d, 0x64, + 0x10, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x2c, 0x20, + 0x45, 0x0a, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0c, + 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x0a, 0x4d, + 0x4d, 0x4d, 0x4d, 0x64, 0x0a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x04, 0x6d, 0x73, 0x02, 0x79, 0x08, + 0x79, 0x2d, 0x4d, 0x4d, 0x04, 0x79, 0x4d, 0x0e, + 0x79, 0x2d, 0x4d, 0x4d, 0x2d, 0x64, 0x64, 0x06, + 0x79, 0x4d, 0x64, 0x14, 0x79, 0x2d, 0x4d, 0x4d, + 0x2d, 0x64, 0x64, 0x2c, 0x20, 0x45, 0x08, 0x79, + 0x4d, 0x45, 0x64, 0x0a, 0x79, 0x20, 0x4d, 0x4d, + 0x4d, 0x08, 0x79, 0x4d, 0x4d, 0x4d, 0x0e, 0x79, + 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x0a, 0x79, + 0x4d, 0x4d, 0x4d, 0x64, 0x14, 0x79, 0x20, 0x4d, + 0x4d, 0x4d, 0x20, 0x64, 0x2c, 0x20, 0x45, 0x0c, + 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0c, 0x79, + 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, 0x79, 0x4d, + 0x4d, 0x4d, 0x4d, 0x0a, 0x79, 0x20, 0x51, 0x51, + 0x51, 0x08, 0x79, 0x51, 0x51, 0x51, 0x0c, 0x79, + 0x20, 0x51, 0x51, 0x51, 0x51, 0x0a, 0x79, 0x51, + 0x51, 0x51, 0x51, 0x20, 0x61, 0x76, 0x61, 0x69, + 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x73, 0x1c, 0x79, 0x20, 0x4d, + 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x2c, 0x20, 0x45, + 0x45, 0x45, 0x45, 0x14, 0x79, 0x4d, 0x4d, 0x4d, + 0x4d, 0x45, 0x45, 0x45, 0x45, 0x64, 0x10, 0x79, + 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x0c, + 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x16, 0x64, + 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x73, 0x1a, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x7a, 0x7a, 0x7a, 0x7a, + 0x12, 0x68, 0x6d, 0x6d, 0x73, 0x73, 0x7a, 0x7a, + 0x7a, 0x7a, 0x14, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x7a, 0x08, 0x68, 0x6d, + 0x73, 0x7a, 0x16, 0x74, 0x69, 0x6d, 0x65, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x0e, 0x66, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x0c, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x09, 0x9c, 0x09, + 0xbe, 0x09, 0xa8, 0x09, 0xc1, 0x09, 0x0d, 0xab, + 0x09, 0xc7, 0x09, 0xac, 0x09, 0xcd, 0x09, 0xf0, + 0x09, 0xc1, 0x09, 0x0b, 0xae, 0x09, 0xbe, 0x09, + 0xf0, 0x09, 0xcd, 0x09, 0x9a, 0x09, 0x0d, 0x8f, + 0x09, 0xaa, 0x09, 0xcd, 0x09, 0xf0, 0x09, 0xbf, + 0x09, 0xb2, 0x09, 0x05, 0xae, 0x09, 0xc7, 0x09, + 0x07, 0x9c, 0x09, 0xc1, 0x09, 0xa8, 0x09, 0x0b, + 0x9c, 0x09, 0xc1, 0x09, 0xb2, 0x09, 0xbe, 0x09, + 0x87, 0x09, 0x05, 0x86, 0x09, 0x97, 0x09, 0x0b, + 0xb8, 0x09, 0xc7, 0x09, 0xaa, 0x09, 0xcd, 0x09, + 0x9f, 0x09, 0x0b, 0x85, 0x09, 0x95, 0x09, 0xcd, + 0x09, 0x9f, 0x09, 0xcb, 0x09, 0x07, 0xa8, 0x09, + 0xad, 0x09, 0xc7, 0x09, 0x09, 0xa1, 0x09, 0xbf, + 0x09, 0xb8, 0x09, 0xc7, 0x09, 0x11, 0x9c, 0x09, + 0xbe, 0x09, 0xa8, 0x09, 0xc1, 0x09, 0xf1, 0x09, + 0xbe, 0x09, 0xf0, 0x09, 0xc0, 0x09, 0x15, 0xab, + 0x09, 0xc7, 0x09, 0xac, 0x09, 0xcd, 0x09, 0xf0, + 0x09, 0xc1, 0x09, 0xf1, 0x09, 0xbe, 0x09, 0xf0, + 0x09, 0xc0, 0x09, 0x0b, 0x86, 0x09, 0x97, 0x09, + 0xb7, 0x09, 0xcd, 0x09, 0x9f, 0x09, 0x15, 0x9b, + 0x09, 0xc7, 0x09, 0xaa, 0x09, 0xcd, 0x09, 0xa4, + 0x09, 0xc7, 0x09, 0xae, 0x09, 0xcd, 0x09, 0xac, + 0x09, 0xf0, 0x09, 0x0f, 0x85, 0x09, 0x95, 0x09, + 0xcd, 0x09, 0x9f, 0x09, 0xcb, 0x09, 0xac, 0x09, + 0xf0, 0x09, 0x0f, 0xa8, 0x09, 0xf1, 0x09, 0xc7, + 0x09, 0xae, 0x09, 0xcd, 0x09, 0xac, 0x09, 0xf0, + 0x09, 0x11, 0xa1, 0x09, 0xbf, 0x09, 0x9a, 0x09, + 0xc7, 0x09, 0xae, 0x09, 0xcd, 0x09, 0xac, 0x09, + 0xf0, 0x09, 0x0c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, + 0x73, 0x02, 0x53, 0x02, 0x54, 0x02, 0x57, 0x02, + 0x46, 0x07, 0xf0, 0x09, 0xac, 0x09, 0xbf, 0x09, + 0x07, 0xb8, 0x09, 0xcb, 0x09, 0xae, 0x09, 0x0b, + 0xae, 0x09, 0x99, 0x09, 0xcd, 0x09, 0x97, 0x09, + 0xb2, 0x09, 0x07, 0xac, 0x09, 0xc1, 0x09, 0xa7, + 0x09, 0x11, 0xac, 0x09, 0xc3, 0x09, 0xb9, 0x09, + 0xb7, 0x09, 0xcd, 0x09, 0xaa, 0x09, 0xa4, 0x09, + 0xbf, 0x09, 0x0b, 0xb6, 0x09, 0xc1, 0x09, 0x95, + 0x09, 0xcd, 0x09, 0xf0, 0x09, 0x07, 0xb6, 0x09, + 0xa8, 0x09, 0xbf, 0x09, 0x0d, 0xa6, 0x09, 0xc7, + 0x09, 0x93, 0x09, 0xac, 0x09, 0xbe, 0x09, 0xf0, + 0x09, 0x0d, 0xb8, 0x09, 0xcb, 0x09, 0xae, 0x09, + 0xac, 0x09, 0xbe, 0x09, 0xf0, 0x09, 0x11, 0xae, + 0x09, 0x99, 0x09, 0xcd, 0x09, 0x97, 0x09, 0xb2, + 0x09, 0xac, 0x09, 0xbe, 0x09, 0xf0, 0x09, 0x0d, + 0xac, 0x09, 0xc1, 0x09, 0xa7, 0x09, 0xac, 0x09, + 0xbe, 0x09, 0xf0, 0x09, 0x17, 0xac, 0x09, 0xc3, + 0x09, 0xb9, 0x09, 0xb7, 0x09, 0xcd, 0x09, 0xaa, + 0x09, 0xa4, 0x09, 0xbf, 0x09, 0xac, 0x09, 0xbe, + 0x09, 0xf0, 0x09, 0x11, 0xb6, 0x09, 0xc1, 0x09, + 0x95, 0x09, 0xcd, 0x09, 0xf0, 0x09, 0xac, 0x09, + 0xbe, 0x09, 0xf0, 0x09, 0x0d, 0xb6, 0x09, 0xa8, + 0x09, 0xbf, 0x09, 0xac, 0x09, 0xbe, 0x09, 0xf0, + 0x09, 0x08, 0x64, 0x61, 0x79, 0x73, 0x04, 0x42, + 0x45, 0x08, 0x65, 0x72, 0x61, 0x73, 0x13, 0xaa, + 0x09, 0xc2, 0x09, 0xf0, 0x09, 0xcd, 0x09, 0xac, + 0x09, 0xbe, 0x09, 0xb9, 0x09, 0xcd, 0x09, 0xa3, + 0x09, 0x04, 0x61, 0x6d, 0x0f, 0x85, 0x09, 0xaa, + 0x09, 0xf0, 0x09, 0xbe, 0x09, 0xb9, 0x09, 0xcd, + 0x09, 0xa3, 0x09, 0x04, 0x70, 0x6d, 0x14, 0x64, + 0x61, 0x79, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, + 0x73, 0x06, 0x4d, 0x30, 0x31, 0x06, 0x4d, 0x30, + 0x32, 0x06, 0x4d, 0x30, 0x33, 0x06, 0x4d, 0x30, + 0x34, 0x06, 0x4d, 0x30, 0x35, 0x06, 0x4d, 0x30, + 0x36, 0x06, 0x4d, 0x30, 0x37, 0x06, 0x4d, 0x30, + 0x38, 0x06, 0x4d, 0x30, 0x39, 0x06, 0x4d, 0x31, + 0x30, 0x06, 0x4d, 0x31, 0x31, 0x06, 0x4d, 0x31, + 0x32, 0x08, 0x54, 0x6f, 0x75, 0x74, 0x08, 0x42, + 0x61, 0x62, 0x61, 0x0a, 0x48, 0x61, 0x74, 0x6f, + 0x72, 0x0a, 0x4b, 0x69, 0x61, 0x68, 0x6b, 0x08, + 0x54, 0x6f, 0x62, 0x61, 0x0c, 0x41, 0x6d, 0x73, + 0x68, 0x69, 0x72, 0x10, 0x42, 0x61, 0x72, 0x61, + 0x6d, 0x68, 0x61, 0x74, 0x12, 0x42, 0x61, 0x72, + 0x61, 0x6d, 0x6f, 0x75, 0x64, 0x61, 0x0e, 0x42, + 0x61, 0x73, 0x68, 0x61, 0x6e, 0x73, 0x0a, 0x50, + 0x61, 0x6f, 0x6e, 0x61, 0x08, 0x45, 0x70, 0x65, + 0x70, 0x0a, 0x4d, 0x65, 0x73, 0x72, 0x61, 0x0a, + 0x4e, 0x61, 0x73, 0x69, 0x65, 0x08, 0x45, 0x52, + 0x41, 0x30, 0x08, 0x45, 0x52, 0x41, 0x31, 0x10, + 0x4d, 0x65, 0x73, 0x6b, 0x65, 0x72, 0x65, 0x6d, + 0x0c, 0x54, 0x65, 0x6b, 0x65, 0x6d, 0x74, 0x0a, + 0x48, 0x65, 0x64, 0x61, 0x72, 0x0c, 0x54, 0x61, + 0x68, 0x73, 0x61, 0x73, 0x06, 0x54, 0x65, 0x72, + 0x0e, 0x59, 0x65, 0x6b, 0x61, 0x74, 0x69, 0x74, + 0x0e, 0x4d, 0x65, 0x67, 0x61, 0x62, 0x69, 0x74, + 0x0c, 0x4d, 0x69, 0x61, 0x7a, 0x69, 0x61, 0x0c, + 0x47, 0x65, 0x6e, 0x62, 0x6f, 0x74, 0x08, 0x53, + 0x65, 0x6e, 0x65, 0x0a, 0x48, 0x61, 0x6d, 0x6c, + 0x65, 0x0e, 0x4e, 0x65, 0x68, 0x61, 0x73, 0x73, + 0x65, 0x0e, 0x50, 0x61, 0x67, 0x75, 0x6d, 0x65, + 0x6e, 0x06, 0x42, 0x43, 0x45, 0x04, 0x43, 0x45, + 0x0c, 0x54, 0x69, 0x73, 0x68, 0x72, 0x69, 0x0e, + 0x48, 0x65, 0x73, 0x68, 0x76, 0x61, 0x6e, 0x0c, + 0x4b, 0x69, 0x73, 0x6c, 0x65, 0x76, 0x0a, 0x54, + 0x65, 0x76, 0x65, 0x74, 0x0c, 0x53, 0x68, 0x65, + 0x76, 0x61, 0x74, 0x0c, 0x41, 0x64, 0x61, 0x72, + 0x20, 0x49, 0x08, 0x41, 0x64, 0x61, 0x72, 0x0a, + 0x4e, 0x69, 0x73, 0x61, 0x6e, 0x08, 0x49, 0x79, + 0x61, 0x72, 0x0a, 0x53, 0x69, 0x76, 0x61, 0x6e, + 0x0a, 0x54, 0x61, 0x6d, 0x75, 0x7a, 0x04, 0x41, + 0x76, 0x08, 0x45, 0x6c, 0x75, 0x6c, 0x0e, 0x41, + 0x64, 0x61, 0x72, 0x20, 0x49, 0x49, 0x04, 0x41, + 0x4d, 0x0e, 0x43, 0x68, 0x61, 0x69, 0x74, 0x72, + 0x61, 0x10, 0x56, 0x61, 0x69, 0x73, 0x61, 0x6b, + 0x68, 0x61, 0x10, 0x4a, 0x79, 0x61, 0x69, 0x73, + 0x74, 0x68, 0x61, 0x0c, 0x41, 0x73, 0x61, 0x64, + 0x68, 0x61, 0x0e, 0x53, 0x72, 0x61, 0x76, 0x61, + 0x6e, 0x61, 0x0c, 0x42, 0x68, 0x61, 0x64, 0x72, + 0x61, 0x0c, 0x41, 0x73, 0x76, 0x69, 0x6e, 0x61, + 0x0e, 0x4b, 0x61, 0x72, 0x74, 0x69, 0x6b, 0x61, + 0x14, 0x41, 0x67, 0x72, 0x61, 0x68, 0x61, 0x79, + 0x61, 0x6e, 0x61, 0x0a, 0x50, 0x61, 0x75, 0x73, + 0x61, 0x0a, 0x4d, 0x61, 0x67, 0x68, 0x61, 0x10, + 0x50, 0x68, 0x61, 0x6c, 0x67, 0x75, 0x6e, 0x61, + 0x08, 0x53, 0x61, 0x6b, 0x61, 0x08, 0x4d, 0x75, + 0x68, 0x2e, 0x08, 0x53, 0x61, 0x66, 0x2e, 0x0c, + 0x52, 0x61, 0x62, 0x2e, 0x20, 0x49, 0x0e, 0x52, + 0x61, 0x62, 0x2e, 0x20, 0x49, 0x49, 0x0c, 0x4a, + 0x75, 0x6d, 0x2e, 0x20, 0x49, 0x0e, 0x4a, 0x75, + 0x6d, 0x2e, 0x20, 0x49, 0x49, 0x08, 0x52, 0x61, + 0x6a, 0x2e, 0x08, 0x53, 0x68, 0x61, 0x2e, 0x08, + 0x52, 0x61, 0x6d, 0x2e, 0x0a, 0x53, 0x68, 0x61, + 0x77, 0x2e, 0x11, 0x44, 0x00, 0x68, 0x00, 0x75, + 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x51, + 0x00, 0x2e, 0x00, 0x11, 0x44, 0x00, 0x68, 0x00, + 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, + 0x48, 0x00, 0x2e, 0x00, 0x10, 0x4d, 0x75, 0x68, + 0x61, 0x72, 0x72, 0x61, 0x6d, 0x0a, 0x53, 0x61, + 0x66, 0x61, 0x72, 0x0f, 0x52, 0x00, 0x61, 0x00, + 0x62, 0x00, 0x69, 0x00, 0xbb, 0x02, 0x20, 0x00, + 0x49, 0x00, 0x11, 0x52, 0x00, 0x61, 0x00, 0x62, + 0x00, 0x69, 0x00, 0xbb, 0x02, 0x20, 0x00, 0x49, + 0x00, 0x49, 0x00, 0x10, 0x4a, 0x75, 0x6d, 0x61, + 0x64, 0x61, 0x20, 0x49, 0x12, 0x4a, 0x75, 0x6d, + 0x61, 0x64, 0x61, 0x20, 0x49, 0x49, 0x0a, 0x52, + 0x61, 0x6a, 0x61, 0x62, 0x0f, 0x53, 0x00, 0x68, + 0x00, 0x61, 0x00, 0xbb, 0x02, 0x62, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x0e, 0x52, 0x61, 0x6d, 0x61, + 0x64, 0x61, 0x6e, 0x0e, 0x53, 0x68, 0x61, 0x77, + 0x77, 0x61, 0x6c, 0x19, 0x44, 0x00, 0x68, 0x00, + 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, + 0x51, 0x00, 0x69, 0x00, 0xbb, 0x02, 0x64, 0x00, + 0x61, 0x00, 0x68, 0x00, 0x19, 0x44, 0x00, 0x68, + 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, + 0x00, 0x48, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x6a, + 0x00, 0x61, 0x00, 0x68, 0x00, 0x04, 0x41, 0x48, + 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, 0x36, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x36, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x48, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x36, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x36, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, + 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x1d, 0x57, 0x00, 0x61, 0x00, 0x64, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, + 0x52, 0x00, 0x65, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, 0x59, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x2d, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6d, 0x00, + 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x2b, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x2d, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, 0x2d, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x2a, 0x4a, 0x69, + 0x6e, 0x67, 0x6f, 0x2d, 0x6b, 0x65, 0x69, 0x75, + 0x6e, 0x20, 0x28, 0x37, 0x36, 0x37, 0x2d, 0x37, + 0x37, 0x30, 0x29, 0x1d, 0x48, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x38, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x1f, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x2d, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x1f, 0x44, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1d, 0x4a, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x4b, + 0x00, 0x61, 0x00, 0x6a, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1f, 0x53, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x20, 0x54, 0x65, 0x6e, 0x2d, 0x61, 0x6e, + 0x20, 0x28, 0x38, 0x35, 0x37, 0x2d, 0x38, 0x35, + 0x39, 0x29, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x21, 0x47, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x61, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x1f, 0x45, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, + 0x4a, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1b, + 0x4c, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, + 0x41, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x1f, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, 0x45, + 0x00, 0x69, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, + 0x73, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x69, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x27, 0x4a, 0x00, 0x69, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x29, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4c, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x61, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x25, 0x4a, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x24, 0x54, 0x65, + 0x6e, 0x2d, 0x65, 0x69, 0x20, 0x28, 0x31, 0x31, + 0x31, 0x30, 0x2d, 0x31, 0x31, 0x31, 0x33, 0x29, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x21, 0x48, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x44, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x48, 0x00, 0x65, 0x00, 0x69, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x27, 0x45, 0x00, 0x69, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1f, 0x4c, 0x01, 0x68, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x61, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x41, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x4a, 0x00, 0x69, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x59, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, + 0x00, 0x75, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x29, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, + 0x6e, 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x4d, 0x01, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x27, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x75, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x29, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, 0x29, + 0x52, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x45, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x4c, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x61, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6d, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x74, 0x00, 0x73, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x48, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, + 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x27, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x21, 0x4c, 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x21, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, + 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x27, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, + 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x72, 0x00, 0x65, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x62, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x27, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4d, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x0a, 0x4d, 0x65, 0x69, 0x6a, + 0x69, 0x0d, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x0b, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x0c, 0x48, 0x65, 0x69, 0x73, 0x65, 0x69, + 0x12, 0x46, 0x61, 0x72, 0x76, 0x61, 0x72, 0x64, + 0x69, 0x6e, 0x16, 0x4f, 0x72, 0x64, 0x69, 0x62, + 0x65, 0x68, 0x65, 0x73, 0x68, 0x74, 0x0e, 0x4b, + 0x68, 0x6f, 0x72, 0x64, 0x61, 0x64, 0x06, 0x54, + 0x69, 0x72, 0x0c, 0x4d, 0x6f, 0x72, 0x64, 0x61, + 0x64, 0x12, 0x53, 0x68, 0x61, 0x68, 0x72, 0x69, + 0x76, 0x61, 0x72, 0x08, 0x4d, 0x65, 0x68, 0x72, + 0x08, 0x41, 0x62, 0x61, 0x6e, 0x08, 0x41, 0x7a, + 0x61, 0x72, 0x06, 0x44, 0x65, 0x79, 0x0c, 0x42, + 0x61, 0x68, 0x6d, 0x61, 0x6e, 0x0c, 0x45, 0x73, + 0x66, 0x61, 0x6e, 0x64, 0x04, 0x41, 0x50, 0x1a, + 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x52, + 0x2e, 0x4f, 0x2e, 0x43, 0x2e, 0x0c, 0x52, 0x2e, + 0x4f, 0x2e, 0x43, 0x2e, 0x12, 0x63, 0x61, 0x6c, + 0x65, 0x6e, 0x64, 0x61, 0x72, 0x73, 0x08, 0x64, + 0x61, 0x74, 0x65, 0x08, 0x62, 0x65, 0x6e, 0x67, + 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, 0x75, + 0x10, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0x1e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, + 0x6e, 0x26, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x6e, 0x65, + 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, + 0x74, 0x74, 0x65, 0x72, 0x6e, 0x0e, 0x64, 0x65, + 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x26, 0x7b, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, + 0xa0, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0x3c, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, 0xa0, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, + 0x79, 0x2a, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, + 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x40, + 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, + 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0x7b, 0x70, 0x65, 0x72, 0x63, + 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, + 0x0e, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, + 0x24, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, + 0x72, 0x79, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, + 0x69, 0x7a, 0x65, 0x10, 0x70, 0x61, 0x74, 0x74, + 0x65, 0x72, 0x6e, 0x73, 0x02, 0x2e, 0x02, 0x2c, + 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x06, 0x4e, + 0x61, 0x4e, 0x06, 0x6e, 0x61, 0x6e, 0x02, 0x2b, + 0x10, 0x70, 0x6c, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x02, 0x2d, 0x12, 0x6d, 0x69, 0x6e, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, 0x25, 0x16, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, + 0x69, 0x67, 0x6e, 0x03, 0x1e, 0x22, 0x10, 0x69, + 0x6e, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x0e, + 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x04, + 0x41, 0x24, 0x06, 0x41, 0x55, 0x44, 0x04, 0x52, + 0x24, 0x06, 0x42, 0x52, 0x4c, 0x06, 0x43, 0x41, + 0x24, 0x06, 0x43, 0x41, 0x44, 0x06, 0x43, 0x4e, + 0xa5, 0x06, 0x43, 0x4e, 0x59, 0x03, 0xac, 0x20, + 0x06, 0x45, 0x55, 0x52, 0x02, 0xa3, 0x06, 0x47, + 0x42, 0x50, 0x06, 0x48, 0x4b, 0x24, 0x06, 0x48, + 0x4b, 0x44, 0x03, 0xaa, 0x20, 0x06, 0x49, 0x4c, + 0x53, 0x03, 0xb9, 0x20, 0x06, 0x49, 0x4e, 0x52, + 0x06, 0x4a, 0x50, 0xa5, 0x06, 0x4a, 0x50, 0x59, + 0x03, 0xa9, 0x20, 0x06, 0x4b, 0x52, 0x57, 0x06, + 0x4d, 0x58, 0x24, 0x06, 0x4d, 0x58, 0x4e, 0x06, + 0x4e, 0x5a, 0x24, 0x06, 0x4e, 0x5a, 0x44, 0x06, + 0x4e, 0x54, 0x24, 0x06, 0x54, 0x57, 0x44, 0x06, + 0x55, 0x53, 0x24, 0x06, 0x55, 0x53, 0x44, 0x03, + 0xab, 0x20, 0x06, 0x56, 0x4e, 0x44, 0x08, 0x46, + 0x43, 0x46, 0x41, 0x06, 0x58, 0x41, 0x46, 0x06, + 0x45, 0x43, 0x24, 0x06, 0x58, 0x43, 0x44, 0x06, + 0x43, 0x46, 0x41, 0x06, 0x58, 0x4f, 0x46, 0x08, + 0x43, 0x46, 0x50, 0x46, 0x06, 0x58, 0x50, 0x46, + 0x14, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, + 0x69, 0x65, 0x73, 0x52, 0x6e, 0x6f, 0x64, 0x65, + 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, + 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2f, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, + 0x61, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x70, 0x2f, + 0x61, 0x73, 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, + 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, 0x27, 0x00, + 0xb9, 0x01, 0x9b, 0x6a, 0x01, 0xa0, 0x01, 0x00, + 0x00, 0x00, 0x39, 0xd0, 0x00, 0x00, 0x00, 0x43, + 0xd1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x77, 0x00, + 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd3, 0x00, 0x00, 0x00, 0x04, 0xd4, 0x00, + 0x00, 0x00, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x04, + 0xd6, 0x00, 0x00, 0x00, 0x04, 0xd7, 0x00, 0x00, + 0x00, 0x04, 0xd8, 0x00, 0x00, 0x00, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x04, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdb, 0x00, 0x00, 0x00, 0x04, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x04, + 0xde, 0x00, 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, + 0x00, 0x04, 0xe0, 0x00, 0x00, 0x00, 0x04, 0xe1, + 0x00, 0x00, 0x00, 0x26, 0x0f, 0x00, 0x4d, 0xe2, + 0x00, 0x00, 0x00, 0x0a, 0x4d, 0xe3, 0x00, 0x00, + 0x00, 0x09, 0x4d, 0xe4, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0xe6, 0x00, + 0x00, 0x00, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x04, 0xe5, + 0x00, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xea, 0x00, 0x00, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x04, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0xec, 0x00, 0x00, 0x00, 0x04, 0xed, 0x00, + 0x00, 0x00, 0x4d, 0xee, 0x00, 0x00, 0x00, 0x04, + 0xef, 0x00, 0x00, 0x00, 0x4d, 0xf0, 0x00, 0x00, + 0x00, 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, 0xf2, + 0x00, 0x00, 0x00, 0x04, 0xf3, 0x00, 0x00, 0x00, + 0x4d, 0xf4, 0x00, 0x00, 0x00, 0x04, 0xf5, 0x00, + 0x00, 0x00, 0x4d, 0xf6, 0x00, 0x00, 0x00, 0x04, + 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xf8, 0x00, 0x00, + 0x00, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0xfa, + 0x00, 0x00, 0x00, 0x04, 0xfb, 0x00, 0x00, 0x00, + 0x4d, 0xfc, 0x00, 0x00, 0x00, 0x04, 0xfd, 0x00, + 0x00, 0x00, 0x4d, 0xfe, 0x00, 0x00, 0x00, 0x04, + 0xff, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x01, 0x00, + 0x00, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0x02, + 0x01, 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, 0x00, + 0x4d, 0x04, 0x01, 0x00, 0x00, 0x04, 0x05, 0x01, + 0x00, 0x00, 0x4d, 0x06, 0x01, 0x00, 0x00, 0x04, + 0x07, 0x01, 0x00, 0x00, 0x4d, 0x08, 0x01, 0x00, + 0x00, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0x0a, + 0x01, 0x00, 0x00, 0x04, 0x0b, 0x01, 0x00, 0x00, + 0x4d, 0x0c, 0x01, 0x00, 0x00, 0x04, 0x0d, 0x01, + 0x00, 0x00, 0x4d, 0x0e, 0x01, 0x00, 0x00, 0x04, + 0x0f, 0x01, 0x00, 0x00, 0x4d, 0x10, 0x01, 0x00, + 0x00, 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, 0x12, + 0x01, 0x00, 0x00, 0x04, 0x13, 0x01, 0x00, 0x00, + 0x4d, 0x14, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x4d, 0x16, 0x01, 0x00, 0x00, 0x04, + 0x17, 0x01, 0x00, 0x00, 0x4d, 0x18, 0x01, 0x00, + 0x00, 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, 0x1a, + 0x01, 0x00, 0x00, 0x04, 0x1b, 0x01, 0x00, 0x00, + 0x4d, 0x1c, 0x01, 0x00, 0x00, 0x04, 0x1d, 0x01, + 0x00, 0x00, 0x4d, 0x1e, 0x01, 0x00, 0x00, 0x04, + 0x1f, 0x01, 0x00, 0x00, 0x4d, 0x20, 0x01, 0x00, + 0x00, 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, 0x22, + 0x01, 0x00, 0x00, 0x04, 0x23, 0x01, 0x00, 0x00, + 0x4d, 0x23, 0x01, 0x00, 0x00, 0x04, 0x24, 0x01, + 0x00, 0x00, 0x4d, 0x25, 0x01, 0x00, 0x00, 0x04, + 0x26, 0x01, 0x00, 0x00, 0x4d, 0x27, 0x01, 0x00, + 0x00, 0x04, 0x28, 0x01, 0x00, 0x00, 0x4d, 0x29, + 0x01, 0x00, 0x00, 0x04, 0x2a, 0x01, 0x00, 0x00, + 0x4d, 0x2b, 0x01, 0x00, 0x00, 0x04, 0x2c, 0x01, + 0x00, 0x00, 0x4d, 0x2d, 0x01, 0x00, 0x00, 0x04, + 0x2e, 0x01, 0x00, 0x00, 0x4d, 0x2f, 0x01, 0x00, + 0x00, 0x04, 0x30, 0x01, 0x00, 0x00, 0x4d, 0x31, + 0x01, 0x00, 0x00, 0x04, 0x32, 0x01, 0x00, 0x00, + 0x4d, 0x33, 0x01, 0x00, 0x00, 0x04, 0x34, 0x01, + 0x00, 0x00, 0x4d, 0x35, 0x01, 0x00, 0x00, 0x4d, + 0x36, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x37, 0x01, + 0x00, 0x00, 0x4d, 0x38, 0x01, 0x00, 0x00, 0x04, + 0x39, 0x01, 0x00, 0x00, 0x4d, 0x3a, 0x01, 0x00, + 0x00, 0x04, 0x2c, 0x01, 0x00, 0x00, 0x4d, 0x2d, + 0x01, 0x00, 0x00, 0x04, 0x26, 0x01, 0x00, 0x00, + 0x4d, 0x27, 0x01, 0x00, 0x00, 0x4d, 0x3b, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x3c, 0x01, 0x00, 0x00, + 0x4d, 0x3d, 0x01, 0x00, 0x00, 0x04, 0x3e, 0x01, + 0x00, 0x00, 0x4d, 0x3f, 0x01, 0x00, 0x00, 0x04, + 0x09, 0x01, 0x00, 0x00, 0x4d, 0x08, 0x01, 0x00, + 0x00, 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, 0x04, + 0x01, 0x00, 0x00, 0x4d, 0x40, 0x01, 0x00, 0x00, + 0x4d, 0x41, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x0b, + 0xbe, 0x00, 0xbe, 0x01, 0xbe, 0x02, 0xbe, 0x03, + 0xbe, 0x04, 0xbe, 0x05, 0xbe, 0x06, 0xbe, 0x07, + 0xbe, 0x08, 0xbe, 0x09, 0xbe, 0x0a, 0xbe, 0x0b, + 0x26, 0x0c, 0x00, 0x4d, 0x42, 0x01, 0x00, 0x00, + 0x04, 0x43, 0x01, 0x00, 0x00, 0x04, 0x44, 0x01, + 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, + 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x45, + 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x00, + 0x4d, 0x56, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x42, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x00, 0x4d, + 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x42, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe9, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x4d, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x4d, 0x70, + 0x01, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x0c, 0xbe, 0x0d, 0xbe, 0x0e, + 0xbe, 0x0f, 0xbe, 0x10, 0xbe, 0x11, 0xbe, 0x12, + 0xbe, 0x13, 0xbe, 0x14, 0xbe, 0x15, 0xbe, 0x16, + 0xbe, 0x17, 0x26, 0x0c, 0x00, 0x4d, 0x42, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe9, 0x00, + 0x00, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x42, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe9, 0x00, 0x00, + 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x4d, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x4d, 0x6f, + 0x01, 0x00, 0x00, 0x4d, 0x70, 0x01, 0x00, 0x00, + 0x4d, 0xd5, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x18, 0xbe, 0x19, 0xbe, 0x1a, 0xbe, 0x1b, 0xbe, + 0x1c, 0xbe, 0x1d, 0xbe, 0x1e, 0xbe, 0x1f, 0xbe, + 0x20, 0xbe, 0x21, 0xbe, 0x22, 0xbe, 0x23, 0xbe, + 0x24, 0x26, 0x0d, 0x00, 0x4d, 0x42, 0x01, 0x00, + 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, + 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, + 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, + 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, + 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, + 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe6, 0x00, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, + 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, + 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, + 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe9, + 0x00, 0x00, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x14, + 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x42, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe9, 0x00, + 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x42, 0x01, + 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, + 0x8b, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0x6b, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x4d, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, + 0x4d, 0x70, 0x01, 0x00, 0x00, 0x4d, 0xd6, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x25, 0xbe, 0x26, + 0xbe, 0x27, 0xbe, 0x28, 0xbe, 0x29, 0xbe, 0x2a, + 0xbe, 0x2b, 0xbe, 0x2c, 0xbe, 0x2d, 0xbe, 0x2e, + 0xbe, 0x2f, 0xbe, 0x30, 0x26, 0x0c, 0x00, 0x4d, + 0x42, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe9, 0x00, 0x00, 0x00, 0x4d, 0x56, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x14, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x42, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe9, + 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x4d, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x4d, 0x70, 0x01, + 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x31, 0xbe, 0x32, 0xbe, 0x33, 0xbe, + 0x34, 0xbe, 0x35, 0xbe, 0x36, 0xbe, 0x37, 0xbe, + 0x38, 0xbe, 0x39, 0xbe, 0x3a, 0xbe, 0x3b, 0xbe, + 0x3c, 0xbe, 0x3d, 0x26, 0x0d, 0x00, 0x4d, 0x42, + 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, + 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, + 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, + 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, + 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, + 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, + 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, + 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, + 0x98, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, + 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, + 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, + 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, + 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, + 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, + 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, + 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, + 0x04, 0x98, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0x56, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x14, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x42, 0x01, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe9, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, + 0x8b, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0x42, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x04, 0x8a, + 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x00, + 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x4d, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x4d, 0x6f, 0x01, + 0x00, 0x00, 0x4d, 0x70, 0x01, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x3e, + 0xbe, 0x3f, 0xbe, 0x40, 0xbe, 0x41, 0xbe, 0x42, + 0xbe, 0x43, 0xbe, 0x44, 0xbe, 0x45, 0xbe, 0x46, + 0xbe, 0x47, 0xbe, 0x48, 0xbe, 0x49, 0xbe, 0x4a, + 0x26, 0x0d, 0x00, 0x4d, 0x42, 0x01, 0x00, 0x00, + 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, + 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, + 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, + 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, + 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, + 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, + 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, + 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, + 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, + 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, + 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, + 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, + 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, + 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, + 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe9, 0x00, + 0x00, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x42, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe9, 0x00, 0x00, + 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x8a, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x42, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0x6b, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x4d, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, + 0x4d, 0x70, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x4b, 0xbe, 0x4c, + 0xbe, 0x4d, 0xbe, 0x4e, 0xbe, 0x4f, 0xbe, 0x50, + 0xbe, 0x51, 0xbe, 0x52, 0xbe, 0x53, 0xbe, 0x54, + 0xbe, 0x55, 0xbe, 0x56, 0x26, 0x0c, 0x00, 0x4d, + 0x42, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe9, 0x00, 0x00, 0x00, 0x4d, 0x56, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x14, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x42, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe9, + 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x42, + 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, + 0x04, 0x8b, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x04, 0x8a, 0x01, + 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x00, 0x4d, + 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x4d, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, + 0x00, 0x4d, 0x70, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x57, 0xbe, + 0x58, 0xbe, 0x59, 0xbe, 0x5a, 0xbe, 0x5b, 0xbe, + 0x5c, 0xbe, 0x5d, 0xbe, 0x5e, 0xbe, 0x5f, 0xbe, + 0x60, 0xbe, 0x61, 0xbe, 0x62, 0x26, 0x0c, 0x00, + 0x4d, 0x42, 0x01, 0x00, 0x00, 0x04, 0x43, 0x01, + 0x00, 0x00, 0x04, 0x44, 0x01, 0x00, 0x00, 0x04, + 0x45, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, + 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0x56, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x14, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x42, 0x01, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe9, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, + 0x9a, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, + 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x26, 0x04, + 0x00, 0x4d, 0x42, 0x01, 0x00, 0x00, 0x04, 0x99, + 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, + 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, + 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, 0xe6, 0x00, + 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, + 0x9a, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, + 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x26, 0x04, + 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0x6b, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x4d, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, + 0x4d, 0x70, 0x01, 0x00, 0x00, 0x4d, 0xd3, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x63, 0xbe, 0x64, + 0xbe, 0x65, 0xbe, 0x66, 0xbe, 0x67, 0xbe, 0x68, + 0xbe, 0x69, 0xbe, 0x6a, 0xbe, 0x6b, 0xbe, 0x6c, + 0xbe, 0x6d, 0xbe, 0x6e, 0xbe, 0x6f, 0xbe, 0x70, + 0x26, 0x0e, 0x00, 0x4d, 0x42, 0x01, 0x00, 0x00, + 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, + 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, + 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, + 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, + 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, + 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, + 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, + 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, + 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x26, 0x0e, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x04, 0x9b, + 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, + 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, + 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, + 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, + 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, + 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, + 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, + 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, + 0xa8, 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, 0x4d, + 0xe9, 0x00, 0x00, 0x00, 0x4d, 0x56, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x14, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x42, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe9, + 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x42, 0x01, 0x00, 0x00, 0x04, 0xa9, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe6, + 0x00, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x00, + 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x4d, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x4d, 0x6f, 0x01, + 0x00, 0x00, 0x4d, 0x70, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x71, + 0xbe, 0x72, 0xbe, 0x73, 0xbe, 0x74, 0xbe, 0x75, + 0xbe, 0x76, 0xbe, 0x77, 0xbe, 0x78, 0xbe, 0x79, + 0xbe, 0x7a, 0xbe, 0x7b, 0xbe, 0x7c, 0x26, 0x0c, + 0x00, 0x4d, 0x42, 0x01, 0x00, 0x00, 0x04, 0xaa, + 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, + 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, + 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, + 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, + 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, + 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, + 0x04, 0xb4, 0x01, 0x00, 0x00, 0x04, 0xb5, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe6, 0x00, + 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, + 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, + 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, 0xae, + 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, + 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, + 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, + 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, + 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0x56, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x42, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe6, 0x00, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xb6, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x42, 0x01, 0x00, 0x00, + 0x04, 0xb6, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x04, 0xb6, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe9, 0x00, + 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x4d, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x4d, + 0x6f, 0x01, 0x00, 0x00, 0x4d, 0x70, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x7d, 0xbe, 0x7e, 0xbe, 0x7f, 0xbe, 0x80, + 0xbe, 0x81, 0xbe, 0x82, 0xbe, 0x83, 0xbe, 0x84, + 0xbe, 0x85, 0xbe, 0x86, 0xbe, 0x87, 0xbe, 0x88, + 0x26, 0x0c, 0x00, 0x4d, 0x42, 0x01, 0x00, 0x00, + 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, + 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, 0x04, + 0xba, 0x01, 0x00, 0x00, 0x04, 0xbb, 0x01, 0x00, + 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, 0x04, 0xbd, + 0x01, 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, + 0x04, 0xbf, 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, + 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, 0x04, + 0xc2, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, + 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, 0x04, 0xc5, + 0x01, 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, 0x00, + 0x04, 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, 0x01, + 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, 0x04, + 0xca, 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, + 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, + 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x00, + 0x4d, 0x56, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x42, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x00, 0x4d, + 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xcf, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x42, 0x01, + 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x04, + 0xcf, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe9, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x4d, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x4d, 0x70, + 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x89, 0xbe, 0x8a, 0xbe, 0x8b, + 0xbe, 0x8c, 0xbe, 0x8d, 0xbe, 0x8e, 0xbe, 0x8f, + 0xbe, 0x90, 0xbe, 0x91, 0xbe, 0x92, 0xbe, 0x93, + 0xbe, 0x94, 0x26, 0x0c, 0x00, 0x4d, 0x42, 0x01, + 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, + 0xb8, 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, + 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, 0x04, 0xbb, + 0x01, 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, + 0x04, 0xbd, 0x01, 0x00, 0x00, 0x04, 0xbe, 0x01, + 0x00, 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, 0x04, + 0xc0, 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, + 0x00, 0x04, 0xc2, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x04, 0xc3, + 0x01, 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, + 0x04, 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, 0x01, + 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, 0x04, + 0xc8, 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, + 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, 0x04, 0xcb, + 0x01, 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, + 0x04, 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe9, 0x00, + 0x00, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x42, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe9, 0x00, 0x00, + 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xcf, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x42, 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0x6b, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x4d, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, + 0x4d, 0x70, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x95, 0xbe, 0x96, + 0xbe, 0x97, 0xbe, 0x98, 0xbe, 0x99, 0xbe, 0x9a, + 0xbe, 0x9b, 0xbe, 0x9c, 0xbe, 0x9d, 0xbe, 0x9e, + 0xbe, 0x9f, 0xbe, 0xa0, 0x26, 0x0c, 0x00, 0x4d, + 0x42, 0x01, 0x00, 0x00, 0x04, 0x43, 0x01, 0x00, + 0x00, 0x04, 0x44, 0x01, 0x00, 0x00, 0x04, 0x45, + 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, + 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe9, 0x00, 0x00, 0x00, 0x4d, 0x56, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x14, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x42, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe9, + 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, 0xd1, + 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, + 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, + 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, + 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, + 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, + 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, + 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, + 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, + 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, + 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, + 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, + 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, + 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, + 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, + 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, + 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, + 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, + 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, + 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, + 0x00, 0x26, 0x20, 0x00, 0x04, 0xf0, 0x01, 0x00, + 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0xf1, + 0x01, 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, + 0x04, 0xf2, 0x01, 0x00, 0x00, 0x4d, 0x22, 0x00, + 0x00, 0x80, 0x04, 0xf3, 0x01, 0x00, 0x00, 0x4d, + 0x23, 0x00, 0x00, 0x80, 0x04, 0xf4, 0x01, 0x00, + 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0xf5, + 0x01, 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, + 0x04, 0xf6, 0x01, 0x00, 0x00, 0x4d, 0x26, 0x00, + 0x00, 0x80, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x4d, + 0x27, 0x00, 0x00, 0x80, 0x04, 0xf8, 0x01, 0x00, + 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0xf9, + 0x01, 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, + 0x04, 0xfa, 0x01, 0x00, 0x00, 0x4d, 0x2a, 0x00, + 0x00, 0x80, 0x04, 0xfb, 0x01, 0x00, 0x00, 0x4d, + 0x2b, 0x00, 0x00, 0x80, 0x04, 0xfc, 0x01, 0x00, + 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0xfd, + 0x01, 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, + 0x04, 0xfe, 0x01, 0x00, 0x00, 0x4d, 0x2e, 0x00, + 0x00, 0x80, 0x04, 0xff, 0x01, 0x00, 0x00, 0x4d, + 0x2f, 0x00, 0x00, 0x80, 0x04, 0x00, 0x02, 0x00, + 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x01, + 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, + 0x04, 0x02, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, + 0x00, 0x80, 0x04, 0x03, 0x02, 0x00, 0x00, 0x4d, + 0x33, 0x00, 0x00, 0x80, 0x04, 0x04, 0x02, 0x00, + 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x05, + 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, + 0x04, 0x06, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, + 0x00, 0x80, 0x04, 0x07, 0x02, 0x00, 0x00, 0x4d, + 0x37, 0x00, 0x00, 0x80, 0x04, 0x08, 0x02, 0x00, + 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x09, + 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, + 0x04, 0x0a, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, + 0x00, 0x80, 0x04, 0x0b, 0x02, 0x00, 0x00, 0x4d, + 0x3b, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, 0x00, + 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x0d, + 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, + 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, + 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, 0x4d, + 0x3f, 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, 0x00, + 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x11, + 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, + 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, + 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, 0x4d, + 0x43, 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, 0x00, + 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x15, + 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, + 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, + 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, 0x4d, + 0x47, 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, 0x00, + 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x19, + 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, + 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, + 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, + 0x4b, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, + 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x1d, + 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, + 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, + 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, + 0x4f, 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, + 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x21, + 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, + 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, + 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, + 0x53, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, + 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x25, + 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, + 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, + 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, + 0x57, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, + 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x29, + 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, + 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, + 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, + 0x5b, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, + 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x2d, + 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, + 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, + 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, + 0x5f, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, + 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x31, + 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, + 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, + 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, + 0x63, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, + 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x35, + 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, + 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, + 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, + 0x67, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, + 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x39, + 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, + 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, + 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, + 0x6b, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, + 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x3d, + 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, + 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, + 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, + 0x6f, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, + 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x41, + 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, + 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, + 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, + 0x73, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, + 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x45, + 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, + 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, + 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, + 0x77, 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, + 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x49, + 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, + 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, + 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, + 0x7b, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, + 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x4d, + 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, + 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, + 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, + 0x7f, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, + 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x51, + 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, + 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, + 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, + 0x83, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, + 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x55, + 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, + 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, + 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, + 0x87, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, + 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x59, + 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, + 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, + 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, + 0x8b, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, + 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x5d, + 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, + 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, + 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, + 0x8f, 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, + 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x61, + 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, + 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, + 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, + 0x93, 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, + 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x65, + 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, + 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, + 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, + 0x97, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, + 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x69, + 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, + 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, + 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, + 0x9b, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, + 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x6d, + 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, + 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, + 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, + 0x9f, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, + 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x71, + 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, + 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, + 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, + 0xa3, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, + 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x75, + 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, + 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, + 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, + 0xa7, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, + 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x79, + 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, + 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, + 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, + 0xab, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, + 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x7d, + 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, + 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, + 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, + 0xaf, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, + 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x81, + 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, + 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, + 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, + 0xb3, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, + 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0x85, + 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, + 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, + 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, + 0xb7, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, + 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0x89, + 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, + 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, + 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, + 0xbb, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, + 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0x8d, + 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, + 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, + 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, + 0xbf, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, + 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0x91, + 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, + 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, + 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, + 0xc3, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, + 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0x95, + 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, + 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, + 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, + 0xc7, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, + 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0x99, + 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, + 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, + 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, + 0xcb, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, + 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0x9d, + 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, + 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, + 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, + 0xcf, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, + 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xa1, + 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, + 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, + 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, + 0xd3, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, + 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xa5, + 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, + 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, + 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, + 0xd7, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xa9, + 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, + 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xad, + 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, + 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xb1, + 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, + 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, + 0xe3, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, + 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xb5, + 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, + 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, + 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x80, 0x04, 0x14, 0x01, 0x00, + 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x80, 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x80, 0x4d, 0x42, 0x01, 0x00, + 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, 0xd1, + 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, + 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, + 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, + 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, + 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, + 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, + 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, + 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, + 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, + 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, + 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, + 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, + 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, + 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, + 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, + 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, + 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, + 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, + 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, + 0x00, 0x26, 0x20, 0x00, 0x04, 0xf0, 0x01, 0x00, + 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0xf1, + 0x01, 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, + 0x04, 0xf2, 0x01, 0x00, 0x00, 0x4d, 0x22, 0x00, + 0x00, 0x80, 0x04, 0xf3, 0x01, 0x00, 0x00, 0x4d, + 0x23, 0x00, 0x00, 0x80, 0x04, 0xf4, 0x01, 0x00, + 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0xf5, + 0x01, 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, + 0x04, 0xf6, 0x01, 0x00, 0x00, 0x4d, 0x26, 0x00, + 0x00, 0x80, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x4d, + 0x27, 0x00, 0x00, 0x80, 0x04, 0xf8, 0x01, 0x00, + 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0xf9, + 0x01, 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, + 0x04, 0xfa, 0x01, 0x00, 0x00, 0x4d, 0x2a, 0x00, + 0x00, 0x80, 0x04, 0xfb, 0x01, 0x00, 0x00, 0x4d, + 0x2b, 0x00, 0x00, 0x80, 0x04, 0xfc, 0x01, 0x00, + 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0xfd, + 0x01, 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, + 0x04, 0xfe, 0x01, 0x00, 0x00, 0x4d, 0x2e, 0x00, + 0x00, 0x80, 0x04, 0xff, 0x01, 0x00, 0x00, 0x4d, + 0x2f, 0x00, 0x00, 0x80, 0x04, 0x00, 0x02, 0x00, + 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x01, + 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, + 0x04, 0x02, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, + 0x00, 0x80, 0x04, 0x03, 0x02, 0x00, 0x00, 0x4d, + 0x33, 0x00, 0x00, 0x80, 0x04, 0x04, 0x02, 0x00, + 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x05, + 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, + 0x04, 0x06, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, + 0x00, 0x80, 0x04, 0x07, 0x02, 0x00, 0x00, 0x4d, + 0x37, 0x00, 0x00, 0x80, 0x04, 0x08, 0x02, 0x00, + 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x09, + 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, + 0x04, 0x0a, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, + 0x00, 0x80, 0x04, 0x0b, 0x02, 0x00, 0x00, 0x4d, + 0x3b, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, 0x00, + 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x0d, + 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, + 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, + 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, 0x4d, + 0x3f, 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, 0x00, + 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x11, + 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, + 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, + 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, 0x4d, + 0x43, 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, 0x00, + 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x15, + 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, + 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, + 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, 0x4d, + 0x47, 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, 0x00, + 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x19, + 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, + 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, + 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, + 0x4b, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, + 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x1d, + 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, + 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, + 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, + 0x4f, 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, + 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x21, + 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, + 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, + 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, + 0x53, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, + 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x25, + 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, + 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, + 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, + 0x57, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, + 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x29, + 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, + 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, + 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, + 0x5b, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, + 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x2d, + 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, + 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, + 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, + 0x5f, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, + 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x31, + 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, + 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, + 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, + 0x63, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, + 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x35, + 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, + 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, + 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, + 0x67, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, + 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x39, + 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, + 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, + 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, + 0x6b, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, + 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x3d, + 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, + 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, + 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, + 0x6f, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, + 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x41, + 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, + 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, + 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, + 0x73, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, + 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x45, + 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, + 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, + 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, + 0x77, 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, + 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x49, + 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, + 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, + 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, + 0x7b, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, + 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x4d, + 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, + 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, + 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, + 0x7f, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, + 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x51, + 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, + 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, + 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, + 0x83, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, + 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x55, + 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, + 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, + 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, + 0x87, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, + 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x59, + 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, + 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, + 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, + 0x8b, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, + 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x5d, + 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, + 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, + 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, + 0x8f, 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, + 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x61, + 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, + 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, + 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, + 0x93, 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, + 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x65, + 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, + 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, + 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, + 0x97, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, + 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x69, + 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, + 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, + 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, + 0x9b, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, + 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x6d, + 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, + 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, + 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, + 0x9f, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, + 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x71, + 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, + 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, + 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, + 0xa3, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, + 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x75, + 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, + 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, + 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, + 0xa7, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, + 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x79, + 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, + 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, + 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, + 0xab, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, + 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x7d, + 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, + 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, + 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, + 0xaf, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, + 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x81, + 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, + 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, + 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, + 0xb3, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, + 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0x85, + 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, + 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, + 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, + 0xb7, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, + 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0x89, + 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, + 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, + 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, + 0xbb, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, + 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0x8d, + 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, + 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, + 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, + 0xbf, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, + 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0x91, + 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, + 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, + 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, + 0xc3, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, + 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0x95, + 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, + 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, + 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, + 0xc7, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, + 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0x99, + 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, + 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, + 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, + 0xcb, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, + 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0x9d, + 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, + 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, + 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, + 0xcf, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, + 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xa1, + 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, + 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, + 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, + 0xd3, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, + 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xa5, + 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, + 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, + 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, + 0xd7, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xa9, + 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, + 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xad, + 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, + 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xb1, + 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, + 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, + 0xe3, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, + 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xb5, + 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, + 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, + 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, + 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xb9, + 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, + 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x80, 0x4d, 0xe6, 0x00, 0x00, + 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, 0xd1, + 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, + 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, + 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, + 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, + 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, + 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, + 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, + 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, + 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, + 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, + 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, + 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, + 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, + 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, + 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, + 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, + 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, + 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, + 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, + 0x00, 0x26, 0x20, 0x00, 0x04, 0xf0, 0x01, 0x00, + 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0xf1, + 0x01, 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, + 0x04, 0xf2, 0x01, 0x00, 0x00, 0x4d, 0x22, 0x00, + 0x00, 0x80, 0x04, 0xf3, 0x01, 0x00, 0x00, 0x4d, + 0x23, 0x00, 0x00, 0x80, 0x04, 0xf4, 0x01, 0x00, + 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0xf5, + 0x01, 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, + 0x04, 0xf6, 0x01, 0x00, 0x00, 0x4d, 0x26, 0x00, + 0x00, 0x80, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x4d, + 0x27, 0x00, 0x00, 0x80, 0x04, 0xf8, 0x01, 0x00, + 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0xf9, + 0x01, 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, + 0x04, 0xfa, 0x01, 0x00, 0x00, 0x4d, 0x2a, 0x00, + 0x00, 0x80, 0x04, 0xfb, 0x01, 0x00, 0x00, 0x4d, + 0x2b, 0x00, 0x00, 0x80, 0x04, 0xfc, 0x01, 0x00, + 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0xfd, + 0x01, 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, + 0x04, 0xfe, 0x01, 0x00, 0x00, 0x4d, 0x2e, 0x00, + 0x00, 0x80, 0x04, 0xff, 0x01, 0x00, 0x00, 0x4d, + 0x2f, 0x00, 0x00, 0x80, 0x04, 0x00, 0x02, 0x00, + 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x01, + 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, + 0x04, 0x02, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, + 0x00, 0x80, 0x04, 0x03, 0x02, 0x00, 0x00, 0x4d, + 0x33, 0x00, 0x00, 0x80, 0x04, 0x04, 0x02, 0x00, + 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x05, + 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, + 0x04, 0x06, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, + 0x00, 0x80, 0x04, 0x07, 0x02, 0x00, 0x00, 0x4d, + 0x37, 0x00, 0x00, 0x80, 0x04, 0x08, 0x02, 0x00, + 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x09, + 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, + 0x04, 0x0a, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, + 0x00, 0x80, 0x04, 0x0b, 0x02, 0x00, 0x00, 0x4d, + 0x3b, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, 0x00, + 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x0d, + 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, + 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, + 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, 0x4d, + 0x3f, 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, 0x00, + 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x11, + 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, + 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, + 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, 0x4d, + 0x43, 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, 0x00, + 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x15, + 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, + 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, + 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, 0x4d, + 0x47, 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, 0x00, + 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x19, + 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, + 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, + 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, + 0x4b, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, + 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x1d, + 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, + 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, + 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, + 0x4f, 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, + 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x21, + 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, + 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, + 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, + 0x53, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, + 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x25, + 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, + 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, + 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, + 0x57, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, + 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x29, + 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, + 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, + 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, + 0x5b, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, + 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x2d, + 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, + 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, + 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, + 0x5f, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, + 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x31, + 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, + 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, + 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, + 0x63, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, + 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x35, + 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, + 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, + 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, + 0x67, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, + 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x39, + 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, + 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, + 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, + 0x6b, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, + 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x3d, + 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, + 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, + 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, + 0x6f, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, + 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x41, + 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, + 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, + 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, + 0x73, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, + 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x45, + 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, + 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, + 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, + 0x77, 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, + 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x49, + 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, + 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, + 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, + 0x7b, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, + 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x4d, + 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, + 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, + 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, + 0x7f, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, + 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x51, + 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, + 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, + 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, + 0x83, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, + 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x55, + 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, + 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, + 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, + 0x87, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, + 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x59, + 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, + 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, + 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, + 0x8b, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, + 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x5d, + 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, + 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, + 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, + 0x8f, 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, + 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x61, + 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, + 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, + 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, + 0x93, 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, + 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x65, + 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, + 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, + 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, + 0x97, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, + 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x69, + 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, + 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, + 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, + 0x9b, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, + 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x6d, + 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, + 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, + 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, + 0x9f, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, + 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x71, + 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, + 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, + 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, + 0xa3, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, + 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x75, + 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, + 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, + 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, + 0xa7, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, + 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x79, + 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, + 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, + 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, + 0xab, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, + 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x7d, + 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, + 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, + 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, + 0xaf, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, + 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x81, + 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, + 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, + 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, + 0xb3, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, + 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0x85, + 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, + 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, + 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, + 0xb7, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, + 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0x89, + 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, + 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, + 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, + 0xbb, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, + 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0x8d, + 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, + 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, + 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, + 0xbf, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, + 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0x91, + 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, + 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, + 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, + 0xc3, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, + 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0x95, + 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, + 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, + 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, + 0xc7, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, + 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0x99, + 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, + 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, + 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, + 0xcb, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, + 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0x9d, + 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, + 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, + 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, + 0xcf, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, + 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xa1, + 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, + 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, + 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, + 0xd3, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, + 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xa5, + 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, + 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, + 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, + 0xd7, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xa9, + 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, + 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xad, + 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, + 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xb1, + 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, + 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, + 0xe3, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, + 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xb5, + 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, + 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, + 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, + 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xb9, + 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, + 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x80, 0x4d, 0xe9, 0x00, 0x00, + 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x4d, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x4d, 0x6f, + 0x01, 0x00, 0x00, 0x4d, 0x70, 0x01, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0xa1, 0xbe, 0xa2, 0xbe, 0xa3, 0xbe, 0xa4, 0xbe, + 0xa5, 0xbe, 0xa6, 0xbe, 0xa7, 0xbe, 0xa8, 0xbe, + 0xa9, 0xbe, 0xaa, 0xbe, 0xab, 0xbe, 0xac, 0x26, + 0x0c, 0x00, 0x4d, 0x42, 0x01, 0x00, 0x00, 0x04, + 0xbc, 0x02, 0x00, 0x00, 0x04, 0xbd, 0x02, 0x00, + 0x00, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x04, 0xbf, + 0x02, 0x00, 0x00, 0x04, 0xc0, 0x02, 0x00, 0x00, + 0x04, 0xc1, 0x02, 0x00, 0x00, 0x04, 0xc2, 0x02, + 0x00, 0x00, 0x04, 0xc3, 0x02, 0x00, 0x00, 0x04, + 0xc4, 0x02, 0x00, 0x00, 0x04, 0xc5, 0x02, 0x00, + 0x00, 0x04, 0xc6, 0x02, 0x00, 0x00, 0x04, 0xc7, + 0x02, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe6, + 0x00, 0x00, 0x00, 0x04, 0xbc, 0x02, 0x00, 0x00, + 0x04, 0xbd, 0x02, 0x00, 0x00, 0x04, 0xbe, 0x02, + 0x00, 0x00, 0x04, 0xbf, 0x02, 0x00, 0x00, 0x04, + 0xc0, 0x02, 0x00, 0x00, 0x04, 0xc1, 0x02, 0x00, + 0x00, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x04, 0xc3, + 0x02, 0x00, 0x00, 0x04, 0xc4, 0x02, 0x00, 0x00, + 0x04, 0xc5, 0x02, 0x00, 0x00, 0x04, 0xc6, 0x02, + 0x00, 0x00, 0x04, 0xc7, 0x02, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x00, 0x4d, + 0x56, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x42, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe6, + 0x00, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0x69, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x42, 0x01, 0x00, + 0x00, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe9, + 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x4d, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x4d, 0x70, 0x01, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0xad, 0xbe, 0xae, 0xbe, 0xaf, 0xbe, + 0xb0, 0xbe, 0xb1, 0xbe, 0xb2, 0xbe, 0xb3, 0xbe, + 0xb4, 0xbe, 0xb5, 0xbe, 0xb6, 0xbe, 0xb7, 0xbe, + 0xb8, 0x26, 0x0c, 0x00, 0x4d, 0x42, 0x01, 0x00, + 0x00, 0x04, 0x43, 0x01, 0x00, 0x00, 0x04, 0x44, + 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, + 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x45, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe9, 0x00, 0x00, + 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x42, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x00, + 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xc9, + 0x02, 0x00, 0x00, 0x04, 0xca, 0x02, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0x42, 0x01, 0x00, 0x00, + 0x04, 0xc9, 0x02, 0x00, 0x00, 0x04, 0xca, 0x02, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe6, 0x00, + 0x00, 0x00, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x04, + 0xca, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe9, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x4d, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x4d, 0x70, + 0x01, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x4d, 0xcb, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x02, + 0x00, 0x00, 0x0b, 0x04, 0xcd, 0x02, 0x00, 0x00, + 0x04, 0xce, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xcf, 0x02, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0xd0, 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x02, 0x00, + 0x00, 0x04, 0xd2, 0x02, 0x00, 0x00, 0x4d, 0xd3, + 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x02, 0x00, 0x00, + 0x0b, 0x04, 0xd5, 0x02, 0x00, 0x00, 0x4d, 0xd1, + 0x02, 0x00, 0x00, 0x04, 0xd6, 0x02, 0x00, 0x00, + 0x4d, 0xd3, 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x02, + 0x00, 0x00, 0x0b, 0x04, 0xd8, 0x02, 0x00, 0x00, + 0x4d, 0xd1, 0x02, 0x00, 0x00, 0x04, 0xd9, 0x02, + 0x00, 0x00, 0x4d, 0xd3, 0x02, 0x00, 0x00, 0x4d, + 0xda, 0x02, 0x00, 0x00, 0xb6, 0x4d, 0xdb, 0x02, + 0x00, 0x00, 0x4d, 0xdc, 0x02, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0xdd, 0x02, 0x00, 0x00, 0x4d, 0xd4, + 0x02, 0x00, 0x00, 0x04, 0xde, 0x02, 0x00, 0x00, + 0x4d, 0xdf, 0x02, 0x00, 0x00, 0x04, 0xe0, 0x02, + 0x00, 0x00, 0x4d, 0xe1, 0x02, 0x00, 0x00, 0x04, + 0xe2, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x02, 0x00, + 0x00, 0x04, 0xe4, 0x02, 0x00, 0x00, 0x4d, 0xe5, + 0x02, 0x00, 0x00, 0x04, 0xe6, 0x02, 0x00, 0x00, + 0x4d, 0xe7, 0x02, 0x00, 0x00, 0x04, 0xe8, 0x02, + 0x00, 0x00, 0x4d, 0xe9, 0x02, 0x00, 0x00, 0x4d, + 0xcd, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xdd, 0x02, + 0x00, 0x00, 0x4d, 0xd4, 0x02, 0x00, 0x00, 0x04, + 0xde, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x02, 0x00, + 0x00, 0x04, 0xe0, 0x02, 0x00, 0x00, 0x4d, 0xe1, + 0x02, 0x00, 0x00, 0x04, 0xe2, 0x02, 0x00, 0x00, + 0x4d, 0xe3, 0x02, 0x00, 0x00, 0x04, 0xe4, 0x02, + 0x00, 0x00, 0x4d, 0xe5, 0x02, 0x00, 0x00, 0x04, + 0xe6, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x02, 0x00, + 0x00, 0x04, 0xe8, 0x02, 0x00, 0x00, 0x4d, 0xe9, + 0x02, 0x00, 0x00, 0x4d, 0xce, 0x02, 0x00, 0x00, + 0x4d, 0xea, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xeb, + 0x02, 0x00, 0x00, 0x4d, 0xec, 0x02, 0x00, 0x00, + 0x04, 0xed, 0x02, 0x00, 0x00, 0x4d, 0xee, 0x02, + 0x00, 0x00, 0x04, 0xef, 0x02, 0x00, 0x00, 0x4d, + 0xf0, 0x02, 0x00, 0x00, 0x04, 0xf1, 0x02, 0x00, + 0x00, 0x4d, 0xf2, 0x02, 0x00, 0x00, 0x04, 0xf3, + 0x02, 0x00, 0x00, 0x4d, 0xf4, 0x02, 0x00, 0x00, + 0x04, 0xf5, 0x02, 0x00, 0x00, 0x4d, 0xf6, 0x02, + 0x00, 0x00, 0x04, 0xf7, 0x02, 0x00, 0x00, 0x4d, + 0xf8, 0x02, 0x00, 0x00, 0x04, 0xf9, 0x02, 0x00, + 0x00, 0x4d, 0xfa, 0x02, 0x00, 0x00, 0x04, 0xfb, + 0x02, 0x00, 0x00, 0x4d, 0xfc, 0x02, 0x00, 0x00, + 0x04, 0xfd, 0x02, 0x00, 0x00, 0x4d, 0xfe, 0x02, + 0x00, 0x00, 0x04, 0xff, 0x02, 0x00, 0x00, 0x4d, + 0x00, 0x03, 0x00, 0x00, 0x04, 0x01, 0x03, 0x00, + 0x00, 0x4d, 0x02, 0x03, 0x00, 0x00, 0x04, 0x03, + 0x03, 0x00, 0x00, 0x4d, 0x04, 0x03, 0x00, 0x00, + 0x04, 0x05, 0x03, 0x00, 0x00, 0x4d, 0x06, 0x03, + 0x00, 0x00, 0x04, 0x07, 0x03, 0x00, 0x00, 0x4d, + 0x08, 0x03, 0x00, 0x00, 0x04, 0x09, 0x03, 0x00, + 0x00, 0x4d, 0x0a, 0x03, 0x00, 0x00, 0x04, 0x0b, + 0x03, 0x00, 0x00, 0x4d, 0x0c, 0x03, 0x00, 0x00, + 0x04, 0x0d, 0x03, 0x00, 0x00, 0x4d, 0x0e, 0x03, + 0x00, 0x00, 0x04, 0x0f, 0x03, 0x00, 0x00, 0x4d, + 0x10, 0x03, 0x00, 0x00, 0x04, 0x11, 0x03, 0x00, + 0x00, 0x4d, 0x12, 0x03, 0x00, 0x00, 0x4d, 0x13, + 0x03, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x00, + 0x24, 0x01, 0x00, 0xcc, 0x28, 0xa8, 0x0c, 0x01, + 0x00, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, + 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_az_size = 24917; + +const uint8_t intl_az[24917] = { + 0x01, 0xd0, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x61, 0x7a, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x0e, + 0x7b, 0x31, 0x7d, 0x20, 0x7b, 0x30, 0x7d, 0x0a, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, 0x65, + 0x64, 0x69, 0x75, 0x6d, 0x08, 0x66, 0x75, 0x6c, + 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x02, 0x64, + 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, 0x06, 0x64, + 0x20, 0x45, 0x04, 0x45, 0x64, 0x10, 0x45, 0x20, + 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x06, 0x45, + 0x68, 0x6d, 0x0e, 0x45, 0x20, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x06, 0x45, 0x48, 0x6d, 0x16, 0x45, + 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x61, 0x08, 0x45, 0x68, 0x6d, 0x73, 0x14, + 0x45, 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x08, 0x45, 0x48, 0x6d, 0x73, 0x06, + 0x47, 0x20, 0x79, 0x04, 0x47, 0x79, 0x0e, 0x47, + 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0a, 0x47, + 0x79, 0x4d, 0x4d, 0x4d, 0x12, 0x47, 0x20, 0x64, + 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0c, 0x47, + 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x18, 0x47, 0x20, + 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x2c, + 0x20, 0x45, 0x0e, 0x47, 0x79, 0x4d, 0x4d, 0x4d, + 0x45, 0x64, 0x06, 0x68, 0x20, 0x61, 0x02, 0x68, + 0x04, 0x48, 0x48, 0x02, 0x48, 0x0c, 0x68, 0x3a, + 0x6d, 0x6d, 0x20, 0x61, 0x04, 0x68, 0x6d, 0x0a, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x04, 0x48, 0x6d, + 0x12, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x61, 0x06, 0x68, 0x6d, 0x73, 0x10, 0x48, + 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x06, + 0x48, 0x6d, 0x73, 0x16, 0x68, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x61, 0x20, 0x76, 0x08, + 0x68, 0x6d, 0x73, 0x76, 0x14, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x76, 0x08, + 0x48, 0x6d, 0x73, 0x76, 0x10, 0x68, 0x3a, 0x6d, + 0x6d, 0x20, 0x61, 0x20, 0x76, 0x06, 0x68, 0x6d, + 0x76, 0x0e, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x20, + 0x76, 0x06, 0x48, 0x6d, 0x76, 0x02, 0x4c, 0x02, + 0x4d, 0x0a, 0x64, 0x64, 0x2e, 0x4d, 0x4d, 0x04, + 0x4d, 0x64, 0x10, 0x64, 0x64, 0x2e, 0x4d, 0x4d, + 0x2c, 0x20, 0x45, 0x06, 0x4d, 0x45, 0x64, 0x06, + 0x4c, 0x4c, 0x4c, 0x06, 0x4d, 0x4d, 0x4d, 0x0a, + 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x08, 0x4d, 0x4d, + 0x4d, 0x64, 0x10, 0x64, 0x20, 0x4d, 0x4d, 0x4d, + 0x2c, 0x20, 0x45, 0x0a, 0x4d, 0x4d, 0x4d, 0x45, + 0x64, 0x0c, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x64, + 0x0a, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x0a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x04, 0x6d, 0x73, 0x02, + 0x79, 0x08, 0x4d, 0x4d, 0x2e, 0x79, 0x04, 0x79, + 0x4d, 0x0e, 0x64, 0x64, 0x2e, 0x4d, 0x4d, 0x2e, + 0x79, 0x06, 0x79, 0x4d, 0x64, 0x14, 0x64, 0x64, + 0x2e, 0x4d, 0x4d, 0x2e, 0x79, 0x2c, 0x20, 0x45, + 0x08, 0x79, 0x4d, 0x45, 0x64, 0x0a, 0x4d, 0x4d, + 0x4d, 0x20, 0x79, 0x08, 0x79, 0x4d, 0x4d, 0x4d, + 0x0e, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, + 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x14, 0x64, + 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x2c, 0x20, + 0x45, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, + 0x0c, 0x79, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, + 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, 0x79, 0x20, + 0x51, 0x51, 0x51, 0x08, 0x79, 0x51, 0x51, 0x51, + 0x0c, 0x79, 0x20, 0x51, 0x51, 0x51, 0x51, 0x0a, + 0x79, 0x51, 0x51, 0x51, 0x51, 0x20, 0x61, 0x76, + 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x1c, 0x64, + 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x2c, + 0x20, 0x45, 0x45, 0x45, 0x45, 0x14, 0x79, 0x4d, + 0x4d, 0x4d, 0x4d, 0x45, 0x45, 0x45, 0x45, 0x64, + 0x10, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, + 0x79, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, + 0x10, 0x64, 0x64, 0x2e, 0x4d, 0x4d, 0x2e, 0x79, + 0x79, 0x16, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x73, 0x1a, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x7a, + 0x7a, 0x7a, 0x7a, 0x12, 0x68, 0x6d, 0x6d, 0x73, + 0x73, 0x7a, 0x7a, 0x7a, 0x7a, 0x14, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x7a, + 0x08, 0x68, 0x6d, 0x73, 0x7a, 0x16, 0x74, 0x69, + 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x73, 0x0e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x73, 0x0c, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x06, 0x79, 0x61, 0x6e, 0x06, 0x66, 0x65, 0x76, + 0x06, 0x6d, 0x61, 0x72, 0x06, 0x61, 0x70, 0x72, + 0x06, 0x6d, 0x61, 0x79, 0x06, 0x69, 0x79, 0x6e, + 0x06, 0x69, 0x79, 0x6c, 0x06, 0x61, 0x76, 0x71, + 0x06, 0x73, 0x65, 0x6e, 0x06, 0x6f, 0x6b, 0x74, + 0x06, 0x6e, 0x6f, 0x79, 0x06, 0x64, 0x65, 0x6b, + 0x0c, 0x79, 0x61, 0x6e, 0x76, 0x61, 0x72, 0x0c, + 0x66, 0x65, 0x76, 0x72, 0x61, 0x6c, 0x08, 0x6d, + 0x61, 0x72, 0x74, 0x0a, 0x61, 0x70, 0x72, 0x65, + 0x6c, 0x08, 0x69, 0x79, 0x75, 0x6e, 0x08, 0x69, + 0x79, 0x75, 0x6c, 0x0c, 0x61, 0x76, 0x71, 0x75, + 0x73, 0x74, 0x10, 0x73, 0x65, 0x6e, 0x74, 0x79, + 0x61, 0x62, 0x72, 0x0e, 0x6f, 0x6b, 0x74, 0x79, + 0x61, 0x62, 0x72, 0x0c, 0x6e, 0x6f, 0x79, 0x61, + 0x62, 0x72, 0x0c, 0x64, 0x65, 0x6b, 0x61, 0x62, + 0x72, 0x0c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x73, + 0x04, 0x42, 0x2e, 0x08, 0x42, 0x2e, 0x45, 0x2e, + 0x08, 0xc7, 0x2e, 0x41, 0x2e, 0x04, 0xc7, 0x2e, + 0x08, 0x43, 0x2e, 0x41, 0x2e, 0x04, 0x43, 0x2e, + 0x05, 0x5e, 0x01, 0x2e, 0x00, 0x0a, 0x62, 0x61, + 0x7a, 0x61, 0x72, 0x19, 0x62, 0x00, 0x61, 0x00, + 0x7a, 0x00, 0x61, 0x00, 0x72, 0x00, 0x20, 0x00, + 0x65, 0x00, 0x72, 0x00, 0x74, 0x00, 0x59, 0x02, + 0x73, 0x00, 0x69, 0x00, 0x1f, 0xe7, 0x00, 0x59, + 0x02, 0x72, 0x00, 0x5f, 0x01, 0x59, 0x02, 0x6e, + 0x00, 0x62, 0x00, 0x59, 0x02, 0x20, 0x00, 0x61, + 0x00, 0x78, 0x00, 0x5f, 0x01, 0x61, 0x00, 0x6d, + 0x00, 0x31, 0x01, 0x11, 0xe7, 0x00, 0x59, 0x02, + 0x72, 0x00, 0x5f, 0x01, 0x59, 0x02, 0x6e, 0x00, + 0x62, 0x00, 0x59, 0x02, 0x17, 0x63, 0x00, 0xfc, + 0x00, 0x6d, 0x00, 0x59, 0x02, 0x20, 0x00, 0x61, + 0x00, 0x78, 0x00, 0x5f, 0x01, 0x61, 0x00, 0x6d, + 0x00, 0x31, 0x01, 0x09, 0x63, 0x00, 0xfc, 0x00, + 0x6d, 0x00, 0x59, 0x02, 0x0b, 0x5f, 0x01, 0x59, + 0x02, 0x6e, 0x00, 0x62, 0x00, 0x59, 0x02, 0x08, + 0x64, 0x61, 0x79, 0x73, 0x04, 0x42, 0x45, 0x08, + 0x65, 0x72, 0x61, 0x73, 0x04, 0x41, 0x4d, 0x04, + 0x61, 0x6d, 0x04, 0x50, 0x4d, 0x04, 0x70, 0x6d, + 0x14, 0x64, 0x61, 0x79, 0x50, 0x65, 0x72, 0x69, + 0x6f, 0x64, 0x73, 0x06, 0x4d, 0x30, 0x31, 0x06, + 0x4d, 0x30, 0x32, 0x06, 0x4d, 0x30, 0x33, 0x06, + 0x4d, 0x30, 0x34, 0x06, 0x4d, 0x30, 0x35, 0x06, + 0x4d, 0x30, 0x36, 0x06, 0x4d, 0x30, 0x37, 0x06, + 0x4d, 0x30, 0x38, 0x06, 0x4d, 0x30, 0x39, 0x06, + 0x4d, 0x31, 0x30, 0x06, 0x4d, 0x31, 0x31, 0x06, + 0x4d, 0x31, 0x32, 0x08, 0x54, 0x6f, 0x75, 0x74, + 0x08, 0x42, 0x61, 0x62, 0x61, 0x0a, 0x48, 0x61, + 0x74, 0x6f, 0x72, 0x0a, 0x4b, 0x69, 0x61, 0x68, + 0x6b, 0x08, 0x54, 0x6f, 0x62, 0x61, 0x0c, 0x41, + 0x6d, 0x73, 0x68, 0x69, 0x72, 0x10, 0x42, 0x61, + 0x72, 0x61, 0x6d, 0x68, 0x61, 0x74, 0x12, 0x42, + 0x61, 0x72, 0x61, 0x6d, 0x6f, 0x75, 0x64, 0x61, + 0x0e, 0x42, 0x61, 0x73, 0x68, 0x61, 0x6e, 0x73, + 0x0a, 0x50, 0x61, 0x6f, 0x6e, 0x61, 0x08, 0x45, + 0x70, 0x65, 0x70, 0x0a, 0x4d, 0x65, 0x73, 0x72, + 0x61, 0x0a, 0x4e, 0x61, 0x73, 0x69, 0x65, 0x08, + 0x45, 0x52, 0x41, 0x30, 0x08, 0x45, 0x52, 0x41, + 0x31, 0x10, 0x4d, 0x65, 0x73, 0x6b, 0x65, 0x72, + 0x65, 0x6d, 0x0c, 0x54, 0x65, 0x6b, 0x65, 0x6d, + 0x74, 0x0a, 0x48, 0x65, 0x64, 0x61, 0x72, 0x0c, + 0x54, 0x61, 0x68, 0x73, 0x61, 0x73, 0x06, 0x54, + 0x65, 0x72, 0x0e, 0x59, 0x65, 0x6b, 0x61, 0x74, + 0x69, 0x74, 0x0e, 0x4d, 0x65, 0x67, 0x61, 0x62, + 0x69, 0x74, 0x0c, 0x4d, 0x69, 0x61, 0x7a, 0x69, + 0x61, 0x0c, 0x47, 0x65, 0x6e, 0x62, 0x6f, 0x74, + 0x08, 0x53, 0x65, 0x6e, 0x65, 0x0a, 0x48, 0x61, + 0x6d, 0x6c, 0x65, 0x0e, 0x4e, 0x65, 0x68, 0x61, + 0x73, 0x73, 0x65, 0x0e, 0x50, 0x61, 0x67, 0x75, + 0x6d, 0x65, 0x6e, 0x09, 0x65, 0x00, 0x2e, 0x00, + 0x59, 0x02, 0x2e, 0x00, 0x08, 0x62, 0x2e, 0x65, + 0x2e, 0x0c, 0xfc, 0x2e, 0x65, 0x2e, 0xf6, 0x2e, + 0x08, 0xfc, 0x2e, 0x65, 0x2e, 0x1f, 0x65, 0x00, + 0x72, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x31, 0x01, + 0x7a, 0x00, 0x64, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x59, 0x02, 0x76, 0x00, 0x76, 0x00, + 0x59, 0x02, 0x6c, 0x00, 0x0d, 0x65, 0x00, 0x72, + 0x00, 0x61, 0x00, 0x6d, 0x00, 0x31, 0x01, 0x7a, + 0x00, 0x23, 0xfc, 0x00, 0x6d, 0x00, 0x75, 0x00, + 0x6d, 0x00, 0x69, 0x00, 0x20, 0x00, 0x65, 0x00, + 0x72, 0x00, 0x61, 0x00, 0x64, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0xf6, 0x00, 0x6e, 0x00, + 0x63, 0x00, 0x59, 0x02, 0x12, 0xfc, 0x6d, 0x75, + 0x6d, 0x69, 0x20, 0x65, 0x72, 0x61, 0x0c, 0x54, + 0x69, 0x73, 0x68, 0x72, 0x69, 0x0e, 0x48, 0x65, + 0x73, 0x68, 0x76, 0x61, 0x6e, 0x0c, 0x4b, 0x69, + 0x73, 0x6c, 0x65, 0x76, 0x0a, 0x54, 0x65, 0x76, + 0x65, 0x74, 0x0c, 0x53, 0x68, 0x65, 0x76, 0x61, + 0x74, 0x0c, 0x41, 0x64, 0x61, 0x72, 0x20, 0x49, + 0x08, 0x41, 0x64, 0x61, 0x72, 0x0a, 0x4e, 0x69, + 0x73, 0x61, 0x6e, 0x08, 0x49, 0x79, 0x61, 0x72, + 0x0a, 0x53, 0x69, 0x76, 0x61, 0x6e, 0x0a, 0x54, + 0x61, 0x6d, 0x75, 0x7a, 0x04, 0x41, 0x76, 0x08, + 0x45, 0x6c, 0x75, 0x6c, 0x0e, 0x41, 0x64, 0x61, + 0x72, 0x20, 0x49, 0x49, 0x0e, 0x43, 0x68, 0x61, + 0x69, 0x74, 0x72, 0x61, 0x10, 0x56, 0x61, 0x69, + 0x73, 0x61, 0x6b, 0x68, 0x61, 0x10, 0x4a, 0x79, + 0x61, 0x69, 0x73, 0x74, 0x68, 0x61, 0x0c, 0x41, + 0x73, 0x61, 0x64, 0x68, 0x61, 0x0e, 0x53, 0x72, + 0x61, 0x76, 0x61, 0x6e, 0x61, 0x0c, 0x42, 0x68, + 0x61, 0x64, 0x72, 0x61, 0x0c, 0x41, 0x73, 0x76, + 0x69, 0x6e, 0x61, 0x0e, 0x4b, 0x61, 0x72, 0x74, + 0x69, 0x6b, 0x61, 0x14, 0x41, 0x67, 0x72, 0x61, + 0x68, 0x61, 0x79, 0x61, 0x6e, 0x61, 0x0a, 0x50, + 0x61, 0x75, 0x73, 0x61, 0x0a, 0x4d, 0x61, 0x67, + 0x68, 0x61, 0x10, 0x50, 0x68, 0x61, 0x6c, 0x67, + 0x75, 0x6e, 0x61, 0x08, 0x53, 0x61, 0x6b, 0x61, + 0x08, 0x4d, 0x75, 0x68, 0x2e, 0x08, 0x53, 0x61, + 0x66, 0x2e, 0x0c, 0x52, 0x61, 0x62, 0x2e, 0x20, + 0x49, 0x0e, 0x52, 0x61, 0x62, 0x2e, 0x20, 0x49, + 0x49, 0x0c, 0x4a, 0x75, 0x6d, 0x2e, 0x20, 0x49, + 0x0e, 0x4a, 0x75, 0x6d, 0x2e, 0x20, 0x49, 0x49, + 0x08, 0x52, 0x61, 0x6a, 0x2e, 0x08, 0x53, 0x68, + 0x61, 0x2e, 0x08, 0x52, 0x61, 0x6d, 0x2e, 0x0a, + 0x53, 0x68, 0x61, 0x77, 0x2e, 0x11, 0x44, 0x00, + 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, + 0x2d, 0x00, 0x51, 0x00, 0x2e, 0x00, 0x11, 0x44, + 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, + 0x00, 0x2d, 0x00, 0x48, 0x00, 0x2e, 0x00, 0x10, + 0x4d, 0x75, 0x68, 0x61, 0x72, 0x72, 0x61, 0x6d, + 0x0a, 0x53, 0x61, 0x66, 0x61, 0x72, 0x0f, 0x52, + 0x00, 0x61, 0x00, 0x62, 0x00, 0x69, 0x00, 0xbb, + 0x02, 0x20, 0x00, 0x49, 0x00, 0x11, 0x52, 0x00, + 0x61, 0x00, 0x62, 0x00, 0x69, 0x00, 0xbb, 0x02, + 0x20, 0x00, 0x49, 0x00, 0x49, 0x00, 0x10, 0x4a, + 0x75, 0x6d, 0x61, 0x64, 0x61, 0x20, 0x49, 0x12, + 0x4a, 0x75, 0x6d, 0x61, 0x64, 0x61, 0x20, 0x49, + 0x49, 0x0a, 0x52, 0x61, 0x6a, 0x61, 0x62, 0x0f, + 0x53, 0x00, 0x68, 0x00, 0x61, 0x00, 0xbb, 0x02, + 0x62, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x0e, 0x52, + 0x61, 0x6d, 0x61, 0x64, 0x61, 0x6e, 0x0e, 0x53, + 0x68, 0x61, 0x77, 0x77, 0x61, 0x6c, 0x19, 0x44, + 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, + 0x00, 0x2d, 0x00, 0x51, 0x00, 0x69, 0x00, 0xbb, + 0x02, 0x64, 0x00, 0x61, 0x00, 0x68, 0x00, 0x19, + 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, + 0x6c, 0x00, 0x2d, 0x00, 0x48, 0x00, 0x69, 0x00, + 0x6a, 0x00, 0x6a, 0x00, 0x61, 0x00, 0x68, 0x00, + 0x04, 0x41, 0x48, 0x1f, 0x54, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x36, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x48, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x36, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x36, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x29, 0x00, 0x21, 0x53, + 0x00, 0x68, 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, + 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4b, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x57, 0x00, + 0x61, 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x1f, 0x52, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x1d, 0x59, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4a, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6b, 0x00, 0x61, + 0x00, 0x6d, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x2d, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x2b, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x2d, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, 0x2d, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x2a, 0x4a, 0x69, 0x6e, 0x67, 0x6f, 0x2d, 0x6b, + 0x65, 0x69, 0x75, 0x6e, 0x20, 0x28, 0x37, 0x36, + 0x37, 0x2d, 0x37, 0x37, 0x30, 0x29, 0x1d, 0x48, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x2d, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x2d, 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x38, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, 0x44, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x64, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x38, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, + 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4a, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x1d, 0x4b, 0x00, 0x61, 0x00, 0x6a, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x53, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x20, 0x54, 0x65, 0x6e, + 0x2d, 0x61, 0x6e, 0x20, 0x28, 0x38, 0x35, 0x37, + 0x2d, 0x38, 0x35, 0x39, 0x29, 0x1f, 0x4a, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, 0x45, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, 0x6e, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1b, 0x4c, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x1d, 0x41, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, 0x69, 0x00, + 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1d, 0x45, + 0x00, 0x69, 0x00, 0x73, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x4a, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x29, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, 0x4a, + 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x29, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4c, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, + 0x4a, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x24, 0x54, 0x65, 0x6e, 0x2d, 0x65, 0x69, 0x20, + 0x28, 0x31, 0x31, 0x31, 0x30, 0x2d, 0x31, 0x31, + 0x31, 0x33, 0x29, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, + 0x01, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, + 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x6a, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x48, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x48, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x45, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x68, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x6d, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, + 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x59, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x21, 0x4a, 0x00, 0x75, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x29, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x29, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1f, + 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x41, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, + 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x29, 0x00, 0x27, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x75, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x29, 0x52, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x4e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1f, 0x4c, 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x74, 0x00, 0x73, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x27, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x45, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x21, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x45, 0x00, 0x69, 0x00, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x72, + 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, + 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, + 0x45, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, + 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x48, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x65, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x23, 0x41, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, 0x02, 0x54, + 0x02, 0x53, 0x0a, 0x4d, 0x65, 0x69, 0x6a, 0x69, + 0x0d, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x0b, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x0c, 0x48, 0x65, 0x69, 0x73, 0x65, 0x69, 0x12, + 0x46, 0x61, 0x72, 0x76, 0x61, 0x72, 0x64, 0x69, + 0x6e, 0x16, 0x4f, 0x72, 0x64, 0x69, 0x62, 0x65, + 0x68, 0x65, 0x73, 0x68, 0x74, 0x0e, 0x4b, 0x68, + 0x6f, 0x72, 0x64, 0x61, 0x64, 0x06, 0x54, 0x69, + 0x72, 0x0c, 0x4d, 0x6f, 0x72, 0x64, 0x61, 0x64, + 0x12, 0x53, 0x68, 0x61, 0x68, 0x72, 0x69, 0x76, + 0x61, 0x72, 0x08, 0x4d, 0x65, 0x68, 0x72, 0x08, + 0x41, 0x62, 0x61, 0x6e, 0x08, 0x41, 0x7a, 0x61, + 0x72, 0x06, 0x44, 0x65, 0x79, 0x0c, 0x42, 0x61, + 0x68, 0x6d, 0x61, 0x6e, 0x0c, 0x45, 0x73, 0x66, + 0x61, 0x6e, 0x64, 0x04, 0x41, 0x50, 0x1a, 0x42, + 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x52, 0x2e, + 0x4f, 0x2e, 0x43, 0x2e, 0x0c, 0x52, 0x2e, 0x4f, + 0x2e, 0x43, 0x2e, 0x12, 0x63, 0x61, 0x6c, 0x65, + 0x6e, 0x64, 0x61, 0x72, 0x73, 0x08, 0x64, 0x61, + 0x74, 0x65, 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, + 0x6e, 0x75, 0x10, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0x1e, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, + 0x65, 0x72, 0x6e, 0x26, 0x7b, 0x6d, 0x69, 0x6e, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, + 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x0e, + 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x26, + 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, + 0x79, 0x7d, 0xa0, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0x3c, 0x7b, 0x6d, 0x69, 0x6e, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, + 0x7d, 0xa0, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x63, 0x79, 0x2a, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0x7b, 0x70, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, + 0x7d, 0x40, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x7b, 0x70, 0x65, + 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, + 0x6e, 0x7d, 0x0e, 0x70, 0x65, 0x72, 0x63, 0x65, + 0x6e, 0x74, 0x10, 0x70, 0x61, 0x74, 0x74, 0x65, + 0x72, 0x6e, 0x73, 0x02, 0x2c, 0x02, 0x2e, 0x0a, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x06, 0x4e, 0x61, + 0x4e, 0x06, 0x6e, 0x61, 0x6e, 0x02, 0x2b, 0x10, + 0x70, 0x6c, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x02, 0x2d, 0x12, 0x6d, 0x69, 0x6e, 0x75, 0x73, + 0x53, 0x69, 0x67, 0x6e, 0x02, 0x25, 0x16, 0x70, + 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, + 0x67, 0x6e, 0x03, 0x1e, 0x22, 0x10, 0x69, 0x6e, + 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x0e, 0x73, + 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x04, 0x41, + 0x24, 0x06, 0x41, 0x55, 0x44, 0x03, 0xbc, 0x20, + 0x06, 0x41, 0x5a, 0x4e, 0x04, 0x52, 0x24, 0x06, + 0x42, 0x52, 0x4c, 0x06, 0x43, 0x41, 0x24, 0x06, + 0x43, 0x41, 0x44, 0x06, 0x43, 0x4e, 0xa5, 0x06, + 0x43, 0x4e, 0x59, 0x03, 0xac, 0x20, 0x06, 0x45, + 0x55, 0x52, 0x02, 0xa3, 0x06, 0x47, 0x42, 0x50, + 0x06, 0x48, 0x4b, 0x24, 0x06, 0x48, 0x4b, 0x44, + 0x03, 0xaa, 0x20, 0x06, 0x49, 0x4c, 0x53, 0x03, + 0xb9, 0x20, 0x06, 0x49, 0x4e, 0x52, 0x06, 0x4a, + 0x50, 0xa5, 0x06, 0x4a, 0x50, 0x59, 0x03, 0xa9, + 0x20, 0x06, 0x4b, 0x52, 0x57, 0x06, 0x4d, 0x58, + 0x24, 0x06, 0x4d, 0x58, 0x4e, 0x06, 0x4e, 0x5a, + 0x24, 0x06, 0x4e, 0x5a, 0x44, 0x03, 0x3f, 0x0e, + 0x06, 0x54, 0x48, 0x42, 0x06, 0x4e, 0x54, 0x24, + 0x06, 0x54, 0x57, 0x44, 0x06, 0x55, 0x53, 0x24, + 0x06, 0x55, 0x53, 0x44, 0x03, 0xab, 0x20, 0x06, + 0x56, 0x4e, 0x44, 0x08, 0x46, 0x43, 0x46, 0x41, + 0x06, 0x58, 0x41, 0x46, 0x06, 0x45, 0x43, 0x24, + 0x06, 0x58, 0x43, 0x44, 0x06, 0x43, 0x46, 0x41, + 0x06, 0x58, 0x4f, 0x46, 0x08, 0x43, 0x46, 0x50, + 0x46, 0x06, 0x58, 0x50, 0x46, 0x14, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, + 0x52, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, + 0x74, 0x6c, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x6a, + 0x73, 0x6f, 0x6e, 0x70, 0x2f, 0x61, 0x7a, 0x2e, + 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, + 0x00, 0x01, 0x00, 0x27, 0x00, 0xa2, 0x02, 0x83, + 0x68, 0x01, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x39, + 0xd0, 0x00, 0x00, 0x00, 0x43, 0xd1, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd2, 0x00, 0x00, 0x00, 0x4d, + 0xd3, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd4, 0x00, + 0x00, 0x00, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x04, + 0xd6, 0x00, 0x00, 0x00, 0x04, 0xd7, 0x00, 0x00, + 0x00, 0x04, 0xd8, 0x00, 0x00, 0x00, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x04, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdb, 0x00, 0x00, 0x00, 0x04, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x04, + 0xde, 0x00, 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, + 0x00, 0x04, 0xe0, 0x00, 0x00, 0x00, 0x04, 0xe1, + 0x00, 0x00, 0x00, 0x04, 0xe2, 0x00, 0x00, 0x00, + 0x26, 0x0f, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, + 0x0a, 0x4d, 0xe4, 0x00, 0x00, 0x00, 0x09, 0x4d, + 0xe5, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, + 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe9, + 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0xed, 0x00, + 0x00, 0x00, 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, + 0xef, 0x00, 0x00, 0x00, 0x04, 0xf0, 0x00, 0x00, + 0x00, 0x4d, 0xf1, 0x00, 0x00, 0x00, 0x04, 0xf2, + 0x00, 0x00, 0x00, 0x4d, 0xf3, 0x00, 0x00, 0x00, + 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xf5, 0x00, + 0x00, 0x00, 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, + 0xf7, 0x00, 0x00, 0x00, 0x04, 0xf8, 0x00, 0x00, + 0x00, 0x4d, 0xf9, 0x00, 0x00, 0x00, 0x04, 0xfa, + 0x00, 0x00, 0x00, 0x4d, 0xfb, 0x00, 0x00, 0x00, + 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xfd, 0x00, + 0x00, 0x00, 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, + 0xff, 0x00, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, + 0x00, 0x4d, 0x01, 0x01, 0x00, 0x00, 0x04, 0x02, + 0x01, 0x00, 0x00, 0x4d, 0x03, 0x01, 0x00, 0x00, + 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0x05, 0x01, + 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, + 0x07, 0x01, 0x00, 0x00, 0x04, 0x08, 0x01, 0x00, + 0x00, 0x4d, 0x09, 0x01, 0x00, 0x00, 0x04, 0x0a, + 0x01, 0x00, 0x00, 0x4d, 0x0b, 0x01, 0x00, 0x00, + 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, 0x0d, 0x01, + 0x00, 0x00, 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, + 0x0f, 0x01, 0x00, 0x00, 0x04, 0x10, 0x01, 0x00, + 0x00, 0x4d, 0x11, 0x01, 0x00, 0x00, 0x04, 0x12, + 0x01, 0x00, 0x00, 0x4d, 0x13, 0x01, 0x00, 0x00, + 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, 0x15, 0x01, + 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, + 0x17, 0x01, 0x00, 0x00, 0x04, 0x18, 0x01, 0x00, + 0x00, 0x4d, 0x19, 0x01, 0x00, 0x00, 0x04, 0x1a, + 0x01, 0x00, 0x00, 0x4d, 0x1b, 0x01, 0x00, 0x00, + 0x04, 0x1c, 0x01, 0x00, 0x00, 0x4d, 0x1d, 0x01, + 0x00, 0x00, 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, + 0x1f, 0x01, 0x00, 0x00, 0x04, 0x20, 0x01, 0x00, + 0x00, 0x4d, 0x21, 0x01, 0x00, 0x00, 0x04, 0x22, + 0x01, 0x00, 0x00, 0x4d, 0x23, 0x01, 0x00, 0x00, + 0x04, 0x24, 0x01, 0x00, 0x00, 0x4d, 0x24, 0x01, + 0x00, 0x00, 0x04, 0x25, 0x01, 0x00, 0x00, 0x4d, + 0x26, 0x01, 0x00, 0x00, 0x04, 0x27, 0x01, 0x00, + 0x00, 0x4d, 0x28, 0x01, 0x00, 0x00, 0x04, 0x29, + 0x01, 0x00, 0x00, 0x4d, 0x2a, 0x01, 0x00, 0x00, + 0x04, 0x2b, 0x01, 0x00, 0x00, 0x4d, 0x2c, 0x01, + 0x00, 0x00, 0x04, 0x2d, 0x01, 0x00, 0x00, 0x4d, + 0x2e, 0x01, 0x00, 0x00, 0x04, 0x2f, 0x01, 0x00, + 0x00, 0x4d, 0x30, 0x01, 0x00, 0x00, 0x04, 0x31, + 0x01, 0x00, 0x00, 0x4d, 0x32, 0x01, 0x00, 0x00, + 0x04, 0x33, 0x01, 0x00, 0x00, 0x4d, 0x34, 0x01, + 0x00, 0x00, 0x04, 0x35, 0x01, 0x00, 0x00, 0x4d, + 0x36, 0x01, 0x00, 0x00, 0x4d, 0x37, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x38, 0x01, 0x00, 0x00, 0x4d, + 0x39, 0x01, 0x00, 0x00, 0x04, 0x3a, 0x01, 0x00, + 0x00, 0x4d, 0x3b, 0x01, 0x00, 0x00, 0x04, 0x2d, + 0x01, 0x00, 0x00, 0x4d, 0x2e, 0x01, 0x00, 0x00, + 0x04, 0x3c, 0x01, 0x00, 0x00, 0x4d, 0x28, 0x01, + 0x00, 0x00, 0x4d, 0x3d, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x3e, 0x01, 0x00, 0x00, 0x4d, 0x3f, 0x01, + 0x00, 0x00, 0x04, 0x40, 0x01, 0x00, 0x00, 0x4d, + 0x41, 0x01, 0x00, 0x00, 0x04, 0x0a, 0x01, 0x00, + 0x00, 0x4d, 0x09, 0x01, 0x00, 0x00, 0x04, 0x06, + 0x01, 0x00, 0x00, 0x4d, 0x05, 0x01, 0x00, 0x00, + 0x4d, 0x42, 0x01, 0x00, 0x00, 0x4d, 0x43, 0x01, + 0x00, 0x00, 0x0b, 0x0b, 0x0b, 0xbe, 0x00, 0xbe, + 0x01, 0xbe, 0x02, 0xbe, 0x03, 0xbe, 0x04, 0xbe, + 0x05, 0xbe, 0x06, 0xbe, 0x07, 0xbe, 0x08, 0xbe, + 0x09, 0xbe, 0x0a, 0xbe, 0x0b, 0x26, 0x0c, 0x00, + 0x4d, 0x44, 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, + 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x5c, 0x01, + 0x00, 0x00, 0x0b, 0xbe, 0x0c, 0xbe, 0x0d, 0xbe, + 0x0e, 0xbe, 0x0f, 0xbe, 0x10, 0xbe, 0x11, 0xbe, + 0x12, 0x26, 0x07, 0x00, 0x4d, 0x44, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x44, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6d, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x4d, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x4d, 0x71, 0x01, 0x00, 0x00, 0x4d, 0x72, + 0x01, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x13, 0xbe, 0x14, 0xbe, 0x15, + 0xbe, 0x16, 0xbe, 0x17, 0xbe, 0x18, 0xbe, 0x19, + 0xbe, 0x1a, 0xbe, 0x1b, 0xbe, 0x1c, 0xbe, 0x1d, + 0xbe, 0x1e, 0x26, 0x0c, 0x00, 0x4d, 0x44, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x0b, + 0xbe, 0x1f, 0xbe, 0x20, 0xbe, 0x21, 0xbe, 0x22, + 0xbe, 0x23, 0xbe, 0x24, 0xbe, 0x25, 0x26, 0x07, + 0x00, 0x4d, 0x44, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x4d, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x4d, 0x71, 0x01, 0x00, 0x00, 0x4d, 0x72, + 0x01, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x26, 0xbe, 0x27, 0xbe, 0x28, + 0xbe, 0x29, 0xbe, 0x2a, 0xbe, 0x2b, 0xbe, 0x2c, + 0xbe, 0x2d, 0xbe, 0x2e, 0xbe, 0x2f, 0xbe, 0x30, + 0xbe, 0x31, 0xbe, 0x32, 0x26, 0x0d, 0x00, 0x4d, + 0x44, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, + 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, + 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, + 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, + 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, + 0x04, 0x8b, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, + 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, + 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, + 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x26, 0x0d, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x5c, + 0x01, 0x00, 0x00, 0x0b, 0xbe, 0x33, 0xbe, 0x34, + 0xbe, 0x35, 0xbe, 0x36, 0xbe, 0x37, 0xbe, 0x38, + 0xbe, 0x39, 0x26, 0x07, 0x00, 0x4d, 0x44, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x8c, + 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0x44, 0x01, 0x00, 0x00, + 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, + 0x8d, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6d, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x4d, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x4d, 0x71, 0x01, 0x00, 0x00, 0x4d, 0x72, + 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x3a, 0xbe, 0x3b, 0xbe, 0x3c, + 0xbe, 0x3d, 0xbe, 0x3e, 0xbe, 0x3f, 0xbe, 0x40, + 0xbe, 0x41, 0xbe, 0x42, 0xbe, 0x43, 0xbe, 0x44, + 0xbe, 0x45, 0x26, 0x0c, 0x00, 0x4d, 0x44, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x0b, + 0xbe, 0x46, 0xbe, 0x47, 0xbe, 0x48, 0xbe, 0x49, + 0xbe, 0x4a, 0xbe, 0x4b, 0xbe, 0x4c, 0x26, 0x07, + 0x00, 0x4d, 0x44, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x4d, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x4d, 0x71, 0x01, 0x00, 0x00, 0x4d, 0x72, + 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x4d, 0xbe, 0x4e, 0xbe, 0x4f, + 0xbe, 0x50, 0xbe, 0x51, 0xbe, 0x52, 0xbe, 0x53, + 0xbe, 0x54, 0xbe, 0x55, 0xbe, 0x56, 0xbe, 0x57, + 0xbe, 0x58, 0xbe, 0x59, 0x26, 0x0d, 0x00, 0x4d, + 0x44, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, + 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, + 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, + 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, + 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, + 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, + 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, + 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, + 0x04, 0x9a, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x8e, 0x01, + 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, + 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, + 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, + 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, + 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, + 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, + 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, + 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x26, 0x0d, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x5c, + 0x01, 0x00, 0x00, 0x0b, 0xbe, 0x5a, 0xbe, 0x5b, + 0xbe, 0x5c, 0xbe, 0x5d, 0xbe, 0x5e, 0xbe, 0x5f, + 0xbe, 0x60, 0x26, 0x07, 0x00, 0x4d, 0x44, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x8c, + 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0x44, 0x01, 0x00, 0x00, + 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, + 0x8d, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6d, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x4d, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x4d, 0x71, 0x01, 0x00, 0x00, 0x4d, 0x72, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x61, 0xbe, 0x62, 0xbe, 0x63, + 0xbe, 0x64, 0xbe, 0x65, 0xbe, 0x66, 0xbe, 0x67, + 0xbe, 0x68, 0xbe, 0x69, 0xbe, 0x6a, 0xbe, 0x6b, + 0xbe, 0x6c, 0xbe, 0x6d, 0x26, 0x0d, 0x00, 0x4d, + 0x44, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, + 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, + 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, + 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, + 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, + 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, + 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, + 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, + 0x04, 0x9a, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x8e, 0x01, + 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, + 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, + 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, + 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, + 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, + 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, + 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, + 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x26, 0x0d, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x5c, + 0x01, 0x00, 0x00, 0x0b, 0xbe, 0x6e, 0xbe, 0x6f, + 0xbe, 0x70, 0xbe, 0x71, 0xbe, 0x72, 0xbe, 0x73, + 0xbe, 0x74, 0x26, 0x07, 0x00, 0x4d, 0x44, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x8c, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x44, + 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x8c, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6d, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x4d, 0x71, 0x01, 0x00, 0x00, 0x4d, + 0x72, 0x01, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x75, 0xbe, 0x76, 0xbe, + 0x77, 0xbe, 0x78, 0xbe, 0x79, 0xbe, 0x7a, 0xbe, + 0x7b, 0xbe, 0x7c, 0xbe, 0x7d, 0xbe, 0x7e, 0xbe, + 0x7f, 0xbe, 0x80, 0x26, 0x0c, 0x00, 0x4d, 0x44, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, + 0x0b, 0xbe, 0x81, 0xbe, 0x82, 0xbe, 0x83, 0xbe, + 0x84, 0xbe, 0x85, 0xbe, 0x86, 0xbe, 0x87, 0x26, + 0x07, 0x00, 0x4d, 0x44, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x8c, 0x01, 0x00, 0x00, + 0x04, 0x8d, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x44, 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, + 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x6d, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x4d, 0x71, + 0x01, 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x88, 0xbe, 0x89, 0xbe, 0x8a, 0xbe, 0x8b, 0xbe, + 0x8c, 0xbe, 0x8d, 0xbe, 0x8e, 0xbe, 0x8f, 0xbe, + 0x90, 0xbe, 0x91, 0xbe, 0x92, 0xbe, 0x93, 0x26, + 0x0c, 0x00, 0x4d, 0x44, 0x01, 0x00, 0x00, 0x04, + 0x45, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x5c, 0x01, 0x00, 0x00, 0x0b, 0xbe, 0x94, 0xbe, + 0x95, 0xbe, 0x96, 0xbe, 0x97, 0xbe, 0x98, 0xbe, + 0x99, 0xbe, 0x9a, 0x26, 0x07, 0x00, 0x4d, 0x44, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, + 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, + 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, 0x44, + 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, + 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, + 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x26, + 0x04, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, + 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, + 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x6d, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x4d, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x4d, 0x71, 0x01, 0x00, 0x00, 0x4d, 0x72, 0x01, + 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x9b, 0xbe, 0x9c, 0xbe, 0x9d, 0xbe, + 0x9e, 0xbe, 0x9f, 0xbe, 0xa0, 0xbe, 0xa1, 0xbe, + 0xa2, 0xbe, 0xa3, 0xbe, 0xa4, 0xbe, 0xa5, 0xbe, + 0xa6, 0xbe, 0xa7, 0xbe, 0xa8, 0x26, 0x0e, 0x00, + 0x4d, 0x44, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, + 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, + 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, + 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, + 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, + 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, + 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, + 0xad, 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, + 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, + 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, + 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, + 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, + 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, + 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, + 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, + 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, + 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, + 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, + 0x00, 0x26, 0x0e, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x0b, 0xbe, + 0xa9, 0xbe, 0xaa, 0xbe, 0xab, 0xbe, 0xac, 0xbe, + 0xad, 0xbe, 0xae, 0xbe, 0xaf, 0x26, 0x07, 0x00, + 0x4d, 0x44, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x44, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x6d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x4d, 0x71, 0x01, + 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0xb0, + 0xbe, 0xb1, 0xbe, 0xb2, 0xbe, 0xb3, 0xbe, 0xb4, + 0xbe, 0xb5, 0xbe, 0xb6, 0xbe, 0xb7, 0xbe, 0xb8, + 0xbe, 0xb9, 0xbe, 0xba, 0xbe, 0xbb, 0x26, 0x0c, + 0x00, 0x4d, 0x44, 0x01, 0x00, 0x00, 0x04, 0xb1, + 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, + 0x04, 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, + 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, 0x04, + 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, + 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, 0x04, 0xb9, + 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, + 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, 0x04, + 0xb2, 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, + 0x00, 0x04, 0xb4, 0x01, 0x00, 0x00, 0x04, 0xb5, + 0x01, 0x00, 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, + 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, + 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, 0x04, + 0xba, 0x01, 0x00, 0x00, 0x04, 0xbb, 0x01, 0x00, + 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x5c, + 0x01, 0x00, 0x00, 0x0b, 0xbe, 0xbc, 0xbe, 0xbd, + 0xbe, 0xbe, 0xbe, 0xbf, 0xbe, 0xc0, 0xbe, 0xc1, + 0xbe, 0xc2, 0x26, 0x07, 0x00, 0x4d, 0x44, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xbd, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x44, + 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xbd, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6d, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x4d, 0x71, 0x01, 0x00, 0x00, 0x4d, + 0x72, 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0xc3, 0xbe, 0xc4, 0xbe, + 0xc5, 0xbe, 0xc6, 0xbe, 0xc7, 0xbe, 0xc8, 0xbe, + 0xc9, 0xbe, 0xca, 0xbe, 0xcb, 0xbe, 0xcc, 0xbe, + 0xcd, 0xbe, 0xce, 0x26, 0x0c, 0x00, 0x4d, 0x44, + 0x01, 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, + 0x04, 0xbf, 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, + 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, 0x04, + 0xc2, 0x01, 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, + 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, 0x04, 0xc5, + 0x01, 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, 0x00, + 0x04, 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, 0x01, + 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xca, 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, + 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, + 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, + 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, 0x01, + 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, 0x04, + 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, + 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, 0xd5, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, + 0x0b, 0xbe, 0xcf, 0xbe, 0xd0, 0xbe, 0xd1, 0xbe, + 0xd2, 0xbe, 0xd3, 0xbe, 0xd4, 0xbe, 0xd5, 0x26, + 0x07, 0x00, 0x4d, 0x44, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xd6, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x44, 0x01, 0x00, 0x00, + 0x04, 0xd6, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd6, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x6d, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x4d, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x4d, + 0x71, 0x01, 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0xd6, 0xbe, 0xd7, 0xbe, 0xd8, 0xbe, 0xd9, + 0xbe, 0xda, 0xbe, 0xdb, 0xbe, 0xdc, 0xbe, 0xdd, + 0xbe, 0xde, 0xbe, 0xdf, 0xbe, 0xe0, 0xbe, 0xe1, + 0x26, 0x0c, 0x00, 0x4d, 0x44, 0x01, 0x00, 0x00, + 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, + 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, 0x04, + 0xc1, 0x01, 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, + 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, 0x04, 0xc4, + 0x01, 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, + 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, + 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, + 0xc9, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, + 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, + 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, + 0x04, 0xce, 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, + 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, + 0xd1, 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, + 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, + 0x01, 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x0b, 0xbe, 0xe2, + 0xbe, 0xe3, 0xbe, 0xe4, 0xbe, 0xe5, 0xbe, 0xe6, + 0xbe, 0xe7, 0xbe, 0xe8, 0x26, 0x07, 0x00, 0x4d, + 0x44, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xd6, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x44, 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x6d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x4d, 0x71, 0x01, 0x00, + 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0xe9, 0xbe, + 0xea, 0xbe, 0xeb, 0xbe, 0xec, 0xbe, 0xed, 0xbe, + 0xee, 0xbe, 0xef, 0xbe, 0xf0, 0xbe, 0xf1, 0xbe, + 0xf2, 0xbe, 0xf3, 0xbe, 0xf4, 0x26, 0x0c, 0x00, + 0x4d, 0x44, 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, + 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x5c, 0x01, + 0x00, 0x00, 0x0b, 0xbe, 0xf5, 0xbe, 0xf6, 0xbe, + 0xf7, 0xbe, 0xf8, 0xbe, 0xf9, 0xbe, 0xfa, 0xbe, + 0xfb, 0x26, 0x07, 0x00, 0x4d, 0x44, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xd7, 0x01, + 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, + 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, + 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, + 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, + 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, + 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, + 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, + 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, + 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, + 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, + 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, + 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, + 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, + 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, + 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, + 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, + 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, + 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, + 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, + 0x04, 0xf6, 0x01, 0x00, 0x00, 0x26, 0x20, 0x00, + 0x04, 0xf7, 0x01, 0x00, 0x00, 0x4d, 0x20, 0x00, + 0x00, 0x80, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x4d, + 0x21, 0x00, 0x00, 0x80, 0x04, 0xf9, 0x01, 0x00, + 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0xfa, + 0x01, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, + 0x04, 0xfb, 0x01, 0x00, 0x00, 0x4d, 0x24, 0x00, + 0x00, 0x80, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x4d, + 0x25, 0x00, 0x00, 0x80, 0x04, 0xfd, 0x01, 0x00, + 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0xfe, + 0x01, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, + 0x04, 0xff, 0x01, 0x00, 0x00, 0x4d, 0x28, 0x00, + 0x00, 0x80, 0x04, 0x00, 0x02, 0x00, 0x00, 0x4d, + 0x29, 0x00, 0x00, 0x80, 0x04, 0x01, 0x02, 0x00, + 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x02, + 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, + 0x04, 0x03, 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, + 0x00, 0x80, 0x04, 0x04, 0x02, 0x00, 0x00, 0x4d, + 0x2d, 0x00, 0x00, 0x80, 0x04, 0x05, 0x02, 0x00, + 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x06, + 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, + 0x04, 0x07, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, + 0x00, 0x80, 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, + 0x31, 0x00, 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, + 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x0a, + 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, + 0x04, 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, + 0x00, 0x80, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, + 0x35, 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, + 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x0e, + 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, + 0x04, 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, + 0x00, 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, + 0x39, 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, + 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x12, + 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, + 0x04, 0x13, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, + 0x00, 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, + 0x3d, 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, + 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x16, + 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, + 0x04, 0x17, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, + 0x00, 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, + 0x41, 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, + 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x1a, + 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, + 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, + 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, + 0x45, 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, + 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x1e, + 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, + 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, + 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, + 0x49, 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, + 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x22, + 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, + 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, + 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, + 0x4d, 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, + 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x26, + 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, + 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, + 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, + 0x51, 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, + 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x2a, + 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, + 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, + 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, + 0x55, 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, + 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x2e, + 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, + 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, + 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, + 0x59, 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, + 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x32, + 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, + 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, + 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, + 0x5d, 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, + 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x36, + 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, + 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, + 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, + 0x61, 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, + 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x3a, + 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, + 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, + 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, + 0x65, 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, + 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x3e, + 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, + 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, + 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, + 0x69, 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, + 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x42, + 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, + 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, + 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, + 0x6d, 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, + 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x46, + 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, + 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, + 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, + 0x71, 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, + 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x4a, + 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, + 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, + 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, + 0x75, 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, + 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x4e, + 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, + 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, + 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, + 0x79, 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, + 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x52, + 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, + 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, + 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, + 0x7d, 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, + 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x56, + 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, + 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, + 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, + 0x81, 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, + 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x5a, + 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, + 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, + 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, + 0x85, 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, + 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x5e, + 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, + 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, + 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, + 0x89, 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, + 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x62, + 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, + 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, + 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, + 0x8d, 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, + 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x66, + 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, + 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, + 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, + 0x91, 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, + 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x6a, + 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, + 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, + 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, + 0x95, 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, + 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x6e, + 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, + 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, + 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, + 0x99, 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, + 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x72, + 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, + 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, + 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, + 0x9d, 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, + 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x76, + 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, + 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, + 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, + 0xa1, 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, + 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x7a, + 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, + 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, + 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, + 0xa5, 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, + 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x7e, + 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, + 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, + 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, + 0xa9, 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, + 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x82, + 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, + 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, + 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, + 0xad, 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, + 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x86, + 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, + 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, + 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, + 0xb1, 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, + 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0x8a, + 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, + 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, + 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, + 0xb5, 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, + 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0x8e, + 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, + 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, + 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, + 0xb9, 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, + 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0x92, + 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, + 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, + 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, + 0xbd, 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, + 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0x96, + 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, + 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, + 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, + 0xc1, 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, + 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0x9a, + 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, + 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, + 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, + 0xc5, 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, + 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0x9e, + 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, + 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, + 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, + 0xc9, 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, + 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xa2, + 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, + 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, + 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, + 0xcd, 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, + 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xa6, + 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, + 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, + 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, + 0xd1, 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, + 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xaa, + 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, + 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, + 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, + 0xd5, 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xae, + 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, + 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xb2, + 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, + 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xb6, + 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, + 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xba, + 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, + 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, + 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, + 0xe5, 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xbe, + 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, 0xe8, 0x00, + 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, + 0xe9, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0x03, + 0x01, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, + 0x4d, 0x44, 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, + 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, + 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, + 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, + 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, + 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, + 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, + 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, + 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, + 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, + 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, + 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, + 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, + 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, + 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, + 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, + 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, + 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, + 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, + 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, + 0x04, 0xf6, 0x01, 0x00, 0x00, 0x26, 0x20, 0x00, + 0x04, 0xf7, 0x01, 0x00, 0x00, 0x4d, 0x20, 0x00, + 0x00, 0x80, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x4d, + 0x21, 0x00, 0x00, 0x80, 0x04, 0xf9, 0x01, 0x00, + 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0xfa, + 0x01, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, + 0x04, 0xfb, 0x01, 0x00, 0x00, 0x4d, 0x24, 0x00, + 0x00, 0x80, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x4d, + 0x25, 0x00, 0x00, 0x80, 0x04, 0xfd, 0x01, 0x00, + 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0xfe, + 0x01, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, + 0x04, 0xff, 0x01, 0x00, 0x00, 0x4d, 0x28, 0x00, + 0x00, 0x80, 0x04, 0x00, 0x02, 0x00, 0x00, 0x4d, + 0x29, 0x00, 0x00, 0x80, 0x04, 0x01, 0x02, 0x00, + 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x02, + 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, + 0x04, 0x03, 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, + 0x00, 0x80, 0x04, 0x04, 0x02, 0x00, 0x00, 0x4d, + 0x2d, 0x00, 0x00, 0x80, 0x04, 0x05, 0x02, 0x00, + 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x06, + 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, + 0x04, 0x07, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, + 0x00, 0x80, 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, + 0x31, 0x00, 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, + 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x0a, + 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, + 0x04, 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, + 0x00, 0x80, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, + 0x35, 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, + 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x0e, + 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, + 0x04, 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, + 0x00, 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, + 0x39, 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, + 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x12, + 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, + 0x04, 0x13, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, + 0x00, 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, + 0x3d, 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, + 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x16, + 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, + 0x04, 0x17, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, + 0x00, 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, + 0x41, 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, + 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x1a, + 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, + 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, + 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, + 0x45, 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, + 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x1e, + 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, + 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, + 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, + 0x49, 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, + 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x22, + 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, + 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, + 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, + 0x4d, 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, + 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x26, + 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, + 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, + 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, + 0x51, 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, + 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x2a, + 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, + 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, + 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, + 0x55, 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, + 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x2e, + 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, + 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, + 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, + 0x59, 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, + 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x32, + 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, + 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, + 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, + 0x5d, 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, + 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x36, + 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, + 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, + 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, + 0x61, 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, + 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x3a, + 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, + 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, + 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, + 0x65, 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, + 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x3e, + 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, + 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, + 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, + 0x69, 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, + 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x42, + 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, + 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, + 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, + 0x6d, 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, + 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x46, + 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, + 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, + 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, + 0x71, 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, + 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x4a, + 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, + 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, + 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, + 0x75, 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, + 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x4e, + 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, + 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, + 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, + 0x79, 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, + 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x52, + 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, + 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, + 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, + 0x7d, 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, + 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x56, + 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, + 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, + 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, + 0x81, 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, + 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x5a, + 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, + 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, + 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, + 0x85, 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, + 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x5e, + 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, + 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, + 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, + 0x89, 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, + 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x62, + 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, + 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, + 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, + 0x8d, 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, + 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x66, + 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, + 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, + 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, + 0x91, 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, + 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x6a, + 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, + 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, + 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, + 0x95, 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, + 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x6e, + 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, + 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, + 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, + 0x99, 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, + 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x72, + 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, + 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, + 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, + 0x9d, 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, + 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x76, + 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, + 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, + 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, + 0xa1, 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, + 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x7a, + 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, + 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, + 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, + 0xa5, 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, + 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x7e, + 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, + 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, + 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, + 0xa9, 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, + 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x82, + 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, + 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, + 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, + 0xad, 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, + 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x86, + 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, + 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, + 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, + 0xb1, 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, + 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0x8a, + 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, + 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, + 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, + 0xb5, 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, + 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0x8e, + 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, + 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, + 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, + 0xb9, 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, + 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0x92, + 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, + 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, + 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, + 0xbd, 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, + 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0x96, + 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, + 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, + 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, + 0xc1, 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, + 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0x9a, + 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, + 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, + 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, + 0xc5, 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, + 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0x9e, + 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, + 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, + 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, + 0xc9, 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, + 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xa2, + 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, + 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, + 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, + 0xcd, 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, + 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xa6, + 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, + 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, + 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, + 0xd1, 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, + 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xaa, + 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, + 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, + 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, + 0xd5, 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xae, + 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, + 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xb2, + 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, + 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xb6, + 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, + 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xba, + 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, + 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, + 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, + 0xe5, 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xbe, + 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, + 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x00, + 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, + 0xe9, 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0xc4, + 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd7, 0x01, + 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, + 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, + 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, + 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, + 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, + 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, + 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, + 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, + 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, + 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, + 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, + 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, + 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, + 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, + 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, + 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, + 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, + 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, + 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, + 0x04, 0xf6, 0x01, 0x00, 0x00, 0x26, 0x20, 0x00, + 0x04, 0xf7, 0x01, 0x00, 0x00, 0x4d, 0x20, 0x00, + 0x00, 0x80, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x4d, + 0x21, 0x00, 0x00, 0x80, 0x04, 0xf9, 0x01, 0x00, + 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0xfa, + 0x01, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, + 0x04, 0xfb, 0x01, 0x00, 0x00, 0x4d, 0x24, 0x00, + 0x00, 0x80, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x4d, + 0x25, 0x00, 0x00, 0x80, 0x04, 0xfd, 0x01, 0x00, + 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0xfe, + 0x01, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, + 0x04, 0xff, 0x01, 0x00, 0x00, 0x4d, 0x28, 0x00, + 0x00, 0x80, 0x04, 0x00, 0x02, 0x00, 0x00, 0x4d, + 0x29, 0x00, 0x00, 0x80, 0x04, 0x01, 0x02, 0x00, + 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x02, + 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, + 0x04, 0x03, 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, + 0x00, 0x80, 0x04, 0x04, 0x02, 0x00, 0x00, 0x4d, + 0x2d, 0x00, 0x00, 0x80, 0x04, 0x05, 0x02, 0x00, + 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x06, + 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, + 0x04, 0x07, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, + 0x00, 0x80, 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, + 0x31, 0x00, 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, + 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x0a, + 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, + 0x04, 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, + 0x00, 0x80, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, + 0x35, 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, + 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x0e, + 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, + 0x04, 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, + 0x00, 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, + 0x39, 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, + 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x12, + 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, + 0x04, 0x13, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, + 0x00, 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, + 0x3d, 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, + 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x16, + 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, + 0x04, 0x17, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, + 0x00, 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, + 0x41, 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, + 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x1a, + 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, + 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, + 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, + 0x45, 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, + 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x1e, + 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, + 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, + 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, + 0x49, 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, + 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x22, + 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, + 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, + 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, + 0x4d, 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, + 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x26, + 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, + 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, + 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, + 0x51, 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, + 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x2a, + 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, + 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, + 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, + 0x55, 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, + 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x2e, + 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, + 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, + 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, + 0x59, 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, + 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x32, + 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, + 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, + 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, + 0x5d, 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, + 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x36, + 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, + 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, + 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, + 0x61, 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, + 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x3a, + 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, + 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, + 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, + 0x65, 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, + 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x3e, + 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, + 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, + 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, + 0x69, 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, + 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x42, + 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, + 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, + 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, + 0x6d, 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, + 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x46, + 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, + 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, + 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, + 0x71, 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, + 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x4a, + 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, + 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, + 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, + 0x75, 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, + 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x4e, + 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, + 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, + 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, + 0x79, 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, + 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x52, + 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, + 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, + 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, + 0x7d, 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, + 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x56, + 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, + 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, + 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, + 0x81, 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, + 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x5a, + 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, + 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, + 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, + 0x85, 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, + 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x5e, + 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, + 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, + 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, + 0x89, 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, + 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x62, + 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, + 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, + 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, + 0x8d, 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, + 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x66, + 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, + 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, + 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, + 0x91, 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, + 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x6a, + 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, + 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, + 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, + 0x95, 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, + 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x6e, + 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, + 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, + 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, + 0x99, 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, + 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x72, + 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, + 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, + 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, + 0x9d, 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, + 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x76, + 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, + 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, + 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, + 0xa1, 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, + 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x7a, + 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, + 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, + 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, + 0xa5, 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, + 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x7e, + 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, + 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, + 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, + 0xa9, 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, + 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x82, + 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, + 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, + 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, + 0xad, 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, + 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x86, + 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, + 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, + 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, + 0xb1, 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, + 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0x8a, + 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, + 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, + 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, + 0xb5, 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, + 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0x8e, + 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, + 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, + 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, + 0xb9, 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, + 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0x92, + 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, + 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, + 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, + 0xbd, 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, + 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0x96, + 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, + 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, + 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, + 0xc1, 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, + 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0x9a, + 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, + 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, + 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, + 0xc5, 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, + 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0x9e, + 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, + 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, + 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, + 0xc9, 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, + 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xa2, + 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, + 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, + 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, + 0xcd, 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, + 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xa6, + 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, + 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, + 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, + 0xd1, 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, + 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xaa, + 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, + 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, + 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, + 0xd5, 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xae, + 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, + 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xb2, + 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, + 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xb6, + 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, + 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xba, + 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, + 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, + 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, + 0xe5, 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xbe, + 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, + 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x00, + 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, + 0xe9, 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0xc4, + 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6d, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x4d, 0x71, 0x01, 0x00, 0x00, 0x4d, + 0x72, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0xfc, 0xbe, 0xfd, 0xbe, + 0xfe, 0xbe, 0xff, 0x02, 0x00, 0x01, 0x00, 0x00, + 0x02, 0x01, 0x01, 0x00, 0x00, 0x02, 0x02, 0x01, + 0x00, 0x00, 0x02, 0x03, 0x01, 0x00, 0x00, 0x02, + 0x04, 0x01, 0x00, 0x00, 0x02, 0x05, 0x01, 0x00, + 0x00, 0x02, 0x06, 0x01, 0x00, 0x00, 0x02, 0x07, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x44, + 0x01, 0x00, 0x00, 0x04, 0xc5, 0x02, 0x00, 0x00, + 0x04, 0xc6, 0x02, 0x00, 0x00, 0x04, 0xc7, 0x02, + 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x04, + 0xc9, 0x02, 0x00, 0x00, 0x04, 0xca, 0x02, 0x00, + 0x00, 0x04, 0xcb, 0x02, 0x00, 0x00, 0x04, 0xcc, + 0x02, 0x00, 0x00, 0x04, 0xcd, 0x02, 0x00, 0x00, + 0x04, 0xce, 0x02, 0x00, 0x00, 0x04, 0xcf, 0x02, + 0x00, 0x00, 0x04, 0xd0, 0x02, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xc5, 0x02, 0x00, 0x00, 0x04, 0xc6, 0x02, 0x00, + 0x00, 0x04, 0xc7, 0x02, 0x00, 0x00, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x04, 0xc9, 0x02, 0x00, 0x00, + 0x04, 0xca, 0x02, 0x00, 0x00, 0x04, 0xcb, 0x02, + 0x00, 0x00, 0x04, 0xcc, 0x02, 0x00, 0x00, 0x04, + 0xcd, 0x02, 0x00, 0x00, 0x04, 0xce, 0x02, 0x00, + 0x00, 0x04, 0xcf, 0x02, 0x00, 0x00, 0x04, 0xd0, + 0x02, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, + 0x0b, 0x02, 0x08, 0x01, 0x00, 0x00, 0x02, 0x09, + 0x01, 0x00, 0x00, 0x02, 0x0a, 0x01, 0x00, 0x00, + 0x02, 0x0b, 0x01, 0x00, 0x00, 0x02, 0x0c, 0x01, + 0x00, 0x00, 0x02, 0x0d, 0x01, 0x00, 0x00, 0x02, + 0x0e, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x44, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xd1, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x44, 0x01, 0x00, 0x00, 0x04, 0xd1, 0x02, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xd1, 0x02, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x6d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x4d, 0x71, 0x01, 0x00, + 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x02, 0x0f, 0x01, + 0x00, 0x00, 0x02, 0x10, 0x01, 0x00, 0x00, 0x02, + 0x11, 0x01, 0x00, 0x00, 0x02, 0x12, 0x01, 0x00, + 0x00, 0x02, 0x13, 0x01, 0x00, 0x00, 0x02, 0x14, + 0x01, 0x00, 0x00, 0x02, 0x15, 0x01, 0x00, 0x00, + 0x02, 0x16, 0x01, 0x00, 0x00, 0x02, 0x17, 0x01, + 0x00, 0x00, 0x02, 0x18, 0x01, 0x00, 0x00, 0x02, + 0x19, 0x01, 0x00, 0x00, 0x02, 0x1a, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x44, 0x01, 0x00, + 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, 0x46, + 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x0b, 0x02, + 0x1b, 0x01, 0x00, 0x00, 0x02, 0x1c, 0x01, 0x00, + 0x00, 0x02, 0x1d, 0x01, 0x00, 0x00, 0x02, 0x1e, + 0x01, 0x00, 0x00, 0x02, 0x1f, 0x01, 0x00, 0x00, + 0x02, 0x20, 0x01, 0x00, 0x00, 0x02, 0x21, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x44, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xd2, + 0x02, 0x00, 0x00, 0x04, 0xd3, 0x02, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0x44, 0x01, 0x00, 0x00, + 0x04, 0xd2, 0x02, 0x00, 0x00, 0x04, 0xd3, 0x02, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xd2, 0x02, 0x00, 0x00, 0x04, + 0xd3, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6d, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x4d, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x4d, 0x71, 0x01, 0x00, 0x00, 0x4d, 0x72, + 0x01, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, + 0x4d, 0xd4, 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x02, + 0x00, 0x00, 0x0b, 0x04, 0xd6, 0x02, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xd7, 0x02, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0xd8, 0x02, 0x00, 0x00, 0x4d, + 0xd9, 0x02, 0x00, 0x00, 0x04, 0xda, 0x02, 0x00, + 0x00, 0x4d, 0xdb, 0x02, 0x00, 0x00, 0x4d, 0xdc, + 0x02, 0x00, 0x00, 0x0b, 0x04, 0xdd, 0x02, 0x00, + 0x00, 0x4d, 0xd9, 0x02, 0x00, 0x00, 0x04, 0xde, + 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x02, 0x00, 0x00, + 0x4d, 0xdf, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xe0, + 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x02, 0x00, 0x00, + 0x04, 0xe1, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x02, + 0x00, 0x00, 0x4d, 0xe2, 0x02, 0x00, 0x00, 0x4d, + 0xe3, 0x02, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xe4, + 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x02, 0x00, 0x00, + 0x04, 0xe5, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x02, + 0x00, 0x00, 0x04, 0xe7, 0x02, 0x00, 0x00, 0x4d, + 0xe8, 0x02, 0x00, 0x00, 0x04, 0xe9, 0x02, 0x00, + 0x00, 0x4d, 0xea, 0x02, 0x00, 0x00, 0x04, 0xeb, + 0x02, 0x00, 0x00, 0x4d, 0xec, 0x02, 0x00, 0x00, + 0x04, 0xed, 0x02, 0x00, 0x00, 0x4d, 0xee, 0x02, + 0x00, 0x00, 0x04, 0xef, 0x02, 0x00, 0x00, 0x4d, + 0xf0, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x02, 0x00, + 0x00, 0x4d, 0xf1, 0x02, 0x00, 0x00, 0x0b, 0x04, + 0xf2, 0x02, 0x00, 0x00, 0x4d, 0xf3, 0x02, 0x00, + 0x00, 0x04, 0xf4, 0x02, 0x00, 0x00, 0x4d, 0xf5, + 0x02, 0x00, 0x00, 0x04, 0xf6, 0x02, 0x00, 0x00, + 0x4d, 0xf7, 0x02, 0x00, 0x00, 0x04, 0xf8, 0x02, + 0x00, 0x00, 0x4d, 0xf9, 0x02, 0x00, 0x00, 0x04, + 0xfa, 0x02, 0x00, 0x00, 0x4d, 0xfb, 0x02, 0x00, + 0x00, 0x04, 0xfc, 0x02, 0x00, 0x00, 0x4d, 0xfd, + 0x02, 0x00, 0x00, 0x04, 0xfe, 0x02, 0x00, 0x00, + 0x4d, 0xff, 0x02, 0x00, 0x00, 0x04, 0x00, 0x03, + 0x00, 0x00, 0x4d, 0x01, 0x03, 0x00, 0x00, 0x04, + 0x02, 0x03, 0x00, 0x00, 0x4d, 0x03, 0x03, 0x00, + 0x00, 0x04, 0x04, 0x03, 0x00, 0x00, 0x4d, 0x05, + 0x03, 0x00, 0x00, 0x04, 0x06, 0x03, 0x00, 0x00, + 0x4d, 0x07, 0x03, 0x00, 0x00, 0x04, 0x08, 0x03, + 0x00, 0x00, 0x4d, 0x09, 0x03, 0x00, 0x00, 0x04, + 0x0a, 0x03, 0x00, 0x00, 0x4d, 0x0b, 0x03, 0x00, + 0x00, 0x04, 0x0c, 0x03, 0x00, 0x00, 0x4d, 0x0d, + 0x03, 0x00, 0x00, 0x04, 0x0e, 0x03, 0x00, 0x00, + 0x4d, 0x0f, 0x03, 0x00, 0x00, 0x04, 0x10, 0x03, + 0x00, 0x00, 0x4d, 0x11, 0x03, 0x00, 0x00, 0x04, + 0x12, 0x03, 0x00, 0x00, 0x4d, 0x13, 0x03, 0x00, + 0x00, 0x04, 0x14, 0x03, 0x00, 0x00, 0x4d, 0x15, + 0x03, 0x00, 0x00, 0x04, 0x16, 0x03, 0x00, 0x00, + 0x4d, 0x17, 0x03, 0x00, 0x00, 0x04, 0x18, 0x03, + 0x00, 0x00, 0x4d, 0x19, 0x03, 0x00, 0x00, 0x04, + 0x1a, 0x03, 0x00, 0x00, 0x4d, 0x1b, 0x03, 0x00, + 0x00, 0x04, 0x1c, 0x03, 0x00, 0x00, 0x4d, 0x1d, + 0x03, 0x00, 0x00, 0x4d, 0x1e, 0x03, 0x00, 0x00, + 0x4d, 0x45, 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, + 0xcc, 0x28, 0xbe, 0x0c, 0x01, 0x00, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, + 0x33, 0x07, 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_be_size = 24975; + +const uint8_t intl_be[24975] = { + 0x01, 0xd7, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x62, 0x65, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x10, + 0x7b, 0x31, 0x7d, 0x2c, 0x20, 0x7b, 0x30, 0x7d, + 0x0a, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, + 0x65, 0x64, 0x69, 0x75, 0x6d, 0x17, 0x7b, 0x00, + 0x31, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x27, 0x00, + 0x43, 0x04, 0x27, 0x00, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x08, 0x66, 0x75, 0x6c, + 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x02, 0x64, + 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, 0x08, 0x64, + 0x2c, 0x20, 0x45, 0x04, 0x45, 0x64, 0x12, 0x45, + 0x20, 0x68, 0x68, 0x2e, 0x6d, 0x6d, 0x20, 0x61, + 0x06, 0x45, 0x68, 0x6d, 0x0e, 0x45, 0x20, 0x48, + 0x48, 0x2e, 0x6d, 0x6d, 0x06, 0x45, 0x48, 0x6d, + 0x18, 0x45, 0x20, 0x68, 0x68, 0x2e, 0x6d, 0x6d, + 0x2e, 0x73, 0x73, 0x20, 0x61, 0x08, 0x45, 0x68, + 0x6d, 0x73, 0x14, 0x45, 0x20, 0x48, 0x48, 0x2e, + 0x6d, 0x6d, 0x2e, 0x73, 0x73, 0x08, 0x45, 0x48, + 0x6d, 0x73, 0x06, 0x79, 0x20, 0x47, 0x04, 0x47, + 0x79, 0x0e, 0x4c, 0x4c, 0x4c, 0x20, 0x79, 0x20, + 0x47, 0x0a, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x12, + 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x20, + 0x47, 0x0c, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x64, + 0x18, 0x45, 0x2c, 0x20, 0x64, 0x20, 0x4d, 0x4d, + 0x4d, 0x20, 0x79, 0x20, 0x47, 0x0e, 0x47, 0x79, + 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x08, 0x68, 0x68, + 0x20, 0x61, 0x02, 0x68, 0x04, 0x48, 0x48, 0x02, + 0x48, 0x0e, 0x68, 0x68, 0x2e, 0x6d, 0x6d, 0x20, + 0x61, 0x04, 0x68, 0x6d, 0x0a, 0x48, 0x48, 0x2e, + 0x6d, 0x6d, 0x04, 0x48, 0x6d, 0x14, 0x68, 0x68, + 0x2e, 0x6d, 0x6d, 0x2e, 0x73, 0x73, 0x20, 0x61, + 0x06, 0x68, 0x6d, 0x73, 0x10, 0x48, 0x48, 0x2e, + 0x6d, 0x6d, 0x2e, 0x73, 0x73, 0x06, 0x48, 0x6d, + 0x73, 0x18, 0x68, 0x68, 0x2e, 0x6d, 0x6d, 0x2e, + 0x73, 0x73, 0x20, 0x61, 0x20, 0x76, 0x08, 0x68, + 0x6d, 0x73, 0x76, 0x14, 0x48, 0x48, 0x2e, 0x6d, + 0x6d, 0x2e, 0x73, 0x73, 0x20, 0x76, 0x08, 0x48, + 0x6d, 0x73, 0x76, 0x12, 0x68, 0x68, 0x2e, 0x6d, + 0x6d, 0x20, 0x61, 0x20, 0x76, 0x06, 0x68, 0x6d, + 0x76, 0x0e, 0x48, 0x48, 0x2e, 0x6d, 0x6d, 0x20, + 0x76, 0x06, 0x48, 0x6d, 0x76, 0x02, 0x4c, 0x02, + 0x4d, 0x06, 0x64, 0x2e, 0x4d, 0x04, 0x4d, 0x64, + 0x0c, 0x45, 0x2c, 0x20, 0x64, 0x2e, 0x4d, 0x06, + 0x4d, 0x45, 0x64, 0x06, 0x4c, 0x4c, 0x4c, 0x06, + 0x4d, 0x4d, 0x4d, 0x0a, 0x64, 0x20, 0x4d, 0x4d, + 0x4d, 0x08, 0x4d, 0x4d, 0x4d, 0x64, 0x10, 0x45, + 0x2c, 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x0a, + 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0c, 0x64, 0x20, + 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, + 0x4d, 0x64, 0x12, 0x45, 0x2c, 0x20, 0x64, 0x20, + 0x4d, 0x4d, 0x4d, 0x4d, 0x0c, 0x4d, 0x4d, 0x4d, + 0x4d, 0x45, 0x64, 0x0a, 0x6d, 0x6d, 0x2e, 0x73, + 0x73, 0x04, 0x6d, 0x73, 0x02, 0x79, 0x06, 0x4d, + 0x2e, 0x79, 0x04, 0x79, 0x4d, 0x0a, 0x64, 0x2e, + 0x4d, 0x2e, 0x79, 0x06, 0x79, 0x4d, 0x64, 0x10, + 0x45, 0x2c, 0x20, 0x64, 0x2e, 0x4d, 0x2e, 0x79, + 0x08, 0x79, 0x4d, 0x45, 0x64, 0x0a, 0x4c, 0x4c, + 0x4c, 0x20, 0x79, 0x08, 0x79, 0x4d, 0x4d, 0x4d, + 0x0e, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, + 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x14, 0x45, + 0x2c, 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x20, + 0x79, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, + 0x0c, 0x4c, 0x4c, 0x4c, 0x4c, 0x20, 0x79, 0x0a, + 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, 0x51, 0x51, + 0x51, 0x20, 0x79, 0x08, 0x79, 0x51, 0x51, 0x51, + 0x0c, 0x51, 0x51, 0x51, 0x51, 0x20, 0x79, 0x0a, + 0x79, 0x51, 0x51, 0x51, 0x51, 0x20, 0x61, 0x76, + 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x1c, 0x45, + 0x45, 0x45, 0x45, 0x2c, 0x20, 0x64, 0x20, 0x4d, + 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x14, 0x79, 0x4d, + 0x4d, 0x4d, 0x4d, 0x45, 0x45, 0x45, 0x45, 0x64, + 0x10, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, + 0x79, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, + 0x0c, 0x64, 0x2e, 0x4d, 0x2e, 0x79, 0x79, 0x16, + 0x64, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x73, 0x1a, 0x48, 0x48, 0x2e, 0x6d, + 0x6d, 0x2e, 0x73, 0x73, 0x20, 0x7a, 0x7a, 0x7a, + 0x7a, 0x12, 0x68, 0x6d, 0x6d, 0x73, 0x73, 0x7a, + 0x7a, 0x7a, 0x7a, 0x14, 0x48, 0x48, 0x2e, 0x6d, + 0x6d, 0x2e, 0x73, 0x73, 0x20, 0x7a, 0x08, 0x68, + 0x6d, 0x73, 0x7a, 0x16, 0x74, 0x69, 0x6d, 0x65, + 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x0e, + 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x03, + 0x41, 0x04, 0x03, 0x3b, 0x04, 0x03, 0x3a, 0x04, + 0x03, 0x3c, 0x04, 0x03, 0x47, 0x04, 0x03, 0x36, + 0x04, 0x03, 0x32, 0x04, 0x0c, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x07, 0x41, 0x04, 0x42, 0x04, + 0x43, 0x04, 0x07, 0x3b, 0x04, 0x4e, 0x04, 0x42, + 0x04, 0x07, 0x41, 0x04, 0x30, 0x04, 0x3a, 0x04, + 0x07, 0x3a, 0x04, 0x40, 0x04, 0x30, 0x04, 0x07, + 0x3c, 0x04, 0x30, 0x04, 0x4f, 0x04, 0x07, 0x47, + 0x04, 0x4d, 0x04, 0x40, 0x04, 0x07, 0x3b, 0x04, + 0x56, 0x04, 0x3f, 0x04, 0x07, 0x36, 0x04, 0x3d, + 0x04, 0x56, 0x04, 0x07, 0x32, 0x04, 0x35, 0x04, + 0x40, 0x04, 0x07, 0x3a, 0x04, 0x30, 0x04, 0x41, + 0x04, 0x07, 0x3b, 0x04, 0x56, 0x04, 0x41, 0x04, + 0x07, 0x41, 0x04, 0x3d, 0x04, 0x35, 0x04, 0x11, + 0x41, 0x04, 0x42, 0x04, 0x43, 0x04, 0x34, 0x04, + 0x37, 0x04, 0x35, 0x04, 0x3d, 0x04, 0x4f, 0x04, + 0x0d, 0x3b, 0x04, 0x4e, 0x04, 0x42, 0x04, 0x30, + 0x04, 0x33, 0x04, 0x30, 0x04, 0x11, 0x41, 0x04, + 0x30, 0x04, 0x3a, 0x04, 0x30, 0x04, 0x32, 0x04, + 0x56, 0x04, 0x3a, 0x04, 0x30, 0x04, 0x13, 0x3a, + 0x04, 0x40, 0x04, 0x30, 0x04, 0x41, 0x04, 0x30, + 0x04, 0x32, 0x04, 0x56, 0x04, 0x3a, 0x04, 0x30, + 0x04, 0x0f, 0x47, 0x04, 0x4d, 0x04, 0x40, 0x04, + 0x32, 0x04, 0x35, 0x04, 0x3d, 0x04, 0x4f, 0x04, + 0x0d, 0x3b, 0x04, 0x56, 0x04, 0x3f, 0x04, 0x35, + 0x04, 0x3d, 0x04, 0x4f, 0x04, 0x0d, 0x36, 0x04, + 0x3d, 0x04, 0x56, 0x04, 0x5e, 0x04, 0x3d, 0x04, + 0x4f, 0x04, 0x0f, 0x32, 0x04, 0x35, 0x04, 0x40, + 0x04, 0x30, 0x04, 0x41, 0x04, 0x3d, 0x04, 0x4f, + 0x04, 0x17, 0x3a, 0x04, 0x30, 0x04, 0x41, 0x04, + 0x42, 0x04, 0x40, 0x04, 0x4b, 0x04, 0x47, 0x04, + 0x3d, 0x04, 0x56, 0x04, 0x3a, 0x04, 0x30, 0x04, + 0x13, 0x3b, 0x04, 0x56, 0x04, 0x41, 0x04, 0x42, + 0x04, 0x30, 0x04, 0x3f, 0x04, 0x30, 0x04, 0x34, + 0x04, 0x30, 0x04, 0x0d, 0x41, 0x04, 0x3d, 0x04, + 0x35, 0x04, 0x36, 0x04, 0x3d, 0x04, 0x4f, 0x04, + 0x0c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x73, 0x03, + 0x3d, 0x04, 0x03, 0x3f, 0x04, 0x03, 0x30, 0x04, + 0x05, 0x3d, 0x04, 0x34, 0x04, 0x05, 0x3f, 0x04, + 0x3d, 0x04, 0x05, 0x30, 0x04, 0x5e, 0x04, 0x05, + 0x41, 0x04, 0x40, 0x04, 0x05, 0x47, 0x04, 0x46, + 0x04, 0x05, 0x3f, 0x04, 0x42, 0x04, 0x05, 0x41, + 0x04, 0x31, 0x04, 0x0f, 0x3d, 0x04, 0x4f, 0x04, + 0x34, 0x04, 0x37, 0x04, 0x35, 0x04, 0x3b, 0x04, + 0x4f, 0x04, 0x15, 0x3f, 0x04, 0x30, 0x04, 0x3d, + 0x04, 0x4f, 0x04, 0x34, 0x04, 0x37, 0x04, 0x35, + 0x04, 0x3b, 0x04, 0x30, 0x04, 0x3a, 0x04, 0x0f, + 0x30, 0x04, 0x5e, 0x04, 0x42, 0x04, 0x3e, 0x04, + 0x40, 0x04, 0x30, 0x04, 0x3a, 0x04, 0x0d, 0x41, + 0x04, 0x35, 0x04, 0x40, 0x04, 0x30, 0x04, 0x34, + 0x04, 0x30, 0x04, 0x0d, 0x47, 0x04, 0x30, 0x04, + 0x46, 0x04, 0x32, 0x04, 0x35, 0x04, 0x40, 0x04, + 0x0f, 0x3f, 0x04, 0x4f, 0x04, 0x42, 0x04, 0x3d, + 0x04, 0x56, 0x04, 0x46, 0x04, 0x30, 0x04, 0x0d, + 0x41, 0x04, 0x43, 0x04, 0x31, 0x04, 0x3e, 0x04, + 0x42, 0x04, 0x30, 0x04, 0x08, 0x64, 0x61, 0x79, + 0x73, 0x04, 0x42, 0x45, 0x08, 0x65, 0x72, 0x61, + 0x73, 0x13, 0x34, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x3f, 0x04, 0x30, 0x04, 0x5e, 0x04, 0x34, 0x04, + 0x3d, 0x04, 0x4f, 0x04, 0x04, 0x61, 0x6d, 0x19, + 0x3f, 0x04, 0x30, 0x04, 0x41, 0x04, 0x3b, 0x04, + 0x4f, 0x04, 0x20, 0x00, 0x3f, 0x04, 0x30, 0x04, + 0x5e, 0x04, 0x34, 0x04, 0x3d, 0x04, 0x4f, 0x04, + 0x04, 0x70, 0x6d, 0x14, 0x64, 0x61, 0x79, 0x50, + 0x65, 0x72, 0x69, 0x6f, 0x64, 0x73, 0x06, 0x4d, + 0x30, 0x31, 0x06, 0x4d, 0x30, 0x32, 0x06, 0x4d, + 0x30, 0x33, 0x06, 0x4d, 0x30, 0x34, 0x06, 0x4d, + 0x30, 0x35, 0x06, 0x4d, 0x30, 0x36, 0x06, 0x4d, + 0x30, 0x37, 0x06, 0x4d, 0x30, 0x38, 0x06, 0x4d, + 0x30, 0x39, 0x06, 0x4d, 0x31, 0x30, 0x06, 0x4d, + 0x31, 0x31, 0x06, 0x4d, 0x31, 0x32, 0x08, 0x54, + 0x6f, 0x75, 0x74, 0x08, 0x42, 0x61, 0x62, 0x61, + 0x0a, 0x48, 0x61, 0x74, 0x6f, 0x72, 0x0a, 0x4b, + 0x69, 0x61, 0x68, 0x6b, 0x08, 0x54, 0x6f, 0x62, + 0x61, 0x0c, 0x41, 0x6d, 0x73, 0x68, 0x69, 0x72, + 0x10, 0x42, 0x61, 0x72, 0x61, 0x6d, 0x68, 0x61, + 0x74, 0x12, 0x42, 0x61, 0x72, 0x61, 0x6d, 0x6f, + 0x75, 0x64, 0x61, 0x0e, 0x42, 0x61, 0x73, 0x68, + 0x61, 0x6e, 0x73, 0x0a, 0x50, 0x61, 0x6f, 0x6e, + 0x61, 0x08, 0x45, 0x70, 0x65, 0x70, 0x0a, 0x4d, + 0x65, 0x73, 0x72, 0x61, 0x0a, 0x4e, 0x61, 0x73, + 0x69, 0x65, 0x08, 0x45, 0x52, 0x41, 0x30, 0x08, + 0x45, 0x52, 0x41, 0x31, 0x10, 0x4d, 0x65, 0x73, + 0x6b, 0x65, 0x72, 0x65, 0x6d, 0x0c, 0x54, 0x65, + 0x6b, 0x65, 0x6d, 0x74, 0x0a, 0x48, 0x65, 0x64, + 0x61, 0x72, 0x0c, 0x54, 0x61, 0x68, 0x73, 0x61, + 0x73, 0x06, 0x54, 0x65, 0x72, 0x0e, 0x59, 0x65, + 0x6b, 0x61, 0x74, 0x69, 0x74, 0x0e, 0x4d, 0x65, + 0x67, 0x61, 0x62, 0x69, 0x74, 0x0c, 0x4d, 0x69, + 0x61, 0x7a, 0x69, 0x61, 0x0c, 0x47, 0x65, 0x6e, + 0x62, 0x6f, 0x74, 0x08, 0x53, 0x65, 0x6e, 0x65, + 0x0a, 0x48, 0x61, 0x6d, 0x6c, 0x65, 0x0e, 0x4e, + 0x65, 0x68, 0x61, 0x73, 0x73, 0x65, 0x0e, 0x50, + 0x61, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x0f, 0x34, + 0x04, 0x30, 0x04, 0x20, 0x00, 0x3d, 0x04, 0x2e, + 0x00, 0x4d, 0x04, 0x2e, 0x00, 0x09, 0x3d, 0x04, + 0x2e, 0x00, 0x4d, 0x04, 0x2e, 0x00, 0x06, 0x42, + 0x43, 0x45, 0x04, 0x43, 0x45, 0x19, 0x34, 0x04, + 0x30, 0x04, 0x20, 0x00, 0x3d, 0x04, 0x30, 0x04, + 0x48, 0x04, 0x30, 0x04, 0x39, 0x04, 0x20, 0x00, + 0x4d, 0x04, 0x40, 0x04, 0x4b, 0x04, 0x13, 0x3d, + 0x04, 0x30, 0x04, 0x48, 0x04, 0x30, 0x04, 0x39, + 0x04, 0x20, 0x00, 0x4d, 0x04, 0x40, 0x04, 0x4b, + 0x04, 0x11, 0x3d, 0x04, 0x30, 0x04, 0x48, 0x04, + 0x30, 0x04, 0x20, 0x00, 0x4d, 0x04, 0x40, 0x04, + 0x30, 0x04, 0x0c, 0x54, 0x69, 0x73, 0x68, 0x72, + 0x69, 0x0e, 0x48, 0x65, 0x73, 0x68, 0x76, 0x61, + 0x6e, 0x0c, 0x4b, 0x69, 0x73, 0x6c, 0x65, 0x76, + 0x0a, 0x54, 0x65, 0x76, 0x65, 0x74, 0x0c, 0x53, + 0x68, 0x65, 0x76, 0x61, 0x74, 0x0c, 0x41, 0x64, + 0x61, 0x72, 0x20, 0x49, 0x08, 0x41, 0x64, 0x61, + 0x72, 0x0a, 0x4e, 0x69, 0x73, 0x61, 0x6e, 0x08, + 0x49, 0x79, 0x61, 0x72, 0x0a, 0x53, 0x69, 0x76, + 0x61, 0x6e, 0x0a, 0x54, 0x61, 0x6d, 0x75, 0x7a, + 0x04, 0x41, 0x76, 0x08, 0x45, 0x6c, 0x75, 0x6c, + 0x0e, 0x41, 0x64, 0x61, 0x72, 0x20, 0x49, 0x49, + 0x04, 0x41, 0x4d, 0x0e, 0x43, 0x68, 0x61, 0x69, + 0x74, 0x72, 0x61, 0x10, 0x56, 0x61, 0x69, 0x73, + 0x61, 0x6b, 0x68, 0x61, 0x10, 0x4a, 0x79, 0x61, + 0x69, 0x73, 0x74, 0x68, 0x61, 0x0c, 0x41, 0x73, + 0x61, 0x64, 0x68, 0x61, 0x0e, 0x53, 0x72, 0x61, + 0x76, 0x61, 0x6e, 0x61, 0x0c, 0x42, 0x68, 0x61, + 0x64, 0x72, 0x61, 0x0c, 0x41, 0x73, 0x76, 0x69, + 0x6e, 0x61, 0x0e, 0x4b, 0x61, 0x72, 0x74, 0x69, + 0x6b, 0x61, 0x14, 0x41, 0x67, 0x72, 0x61, 0x68, + 0x61, 0x79, 0x61, 0x6e, 0x61, 0x0a, 0x50, 0x61, + 0x75, 0x73, 0x61, 0x0a, 0x4d, 0x61, 0x67, 0x68, + 0x61, 0x10, 0x50, 0x68, 0x61, 0x6c, 0x67, 0x75, + 0x6e, 0x61, 0x08, 0x53, 0x61, 0x6b, 0x61, 0x08, + 0x4d, 0x75, 0x68, 0x2e, 0x08, 0x53, 0x61, 0x66, + 0x2e, 0x0c, 0x52, 0x61, 0x62, 0x2e, 0x20, 0x49, + 0x0e, 0x52, 0x61, 0x62, 0x2e, 0x20, 0x49, 0x49, + 0x0c, 0x4a, 0x75, 0x6d, 0x2e, 0x20, 0x49, 0x0e, + 0x4a, 0x75, 0x6d, 0x2e, 0x20, 0x49, 0x49, 0x08, + 0x52, 0x61, 0x6a, 0x2e, 0x08, 0x53, 0x68, 0x61, + 0x2e, 0x08, 0x52, 0x61, 0x6d, 0x2e, 0x0a, 0x53, + 0x68, 0x61, 0x77, 0x2e, 0x11, 0x44, 0x00, 0x68, + 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, + 0x00, 0x51, 0x00, 0x2e, 0x00, 0x11, 0x44, 0x00, + 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, + 0x2d, 0x00, 0x48, 0x00, 0x2e, 0x00, 0x10, 0x4d, + 0x75, 0x68, 0x61, 0x72, 0x72, 0x61, 0x6d, 0x0a, + 0x53, 0x61, 0x66, 0x61, 0x72, 0x0f, 0x52, 0x00, + 0x61, 0x00, 0x62, 0x00, 0x69, 0x00, 0xbb, 0x02, + 0x20, 0x00, 0x49, 0x00, 0x11, 0x52, 0x00, 0x61, + 0x00, 0x62, 0x00, 0x69, 0x00, 0xbb, 0x02, 0x20, + 0x00, 0x49, 0x00, 0x49, 0x00, 0x10, 0x4a, 0x75, + 0x6d, 0x61, 0x64, 0x61, 0x20, 0x49, 0x12, 0x4a, + 0x75, 0x6d, 0x61, 0x64, 0x61, 0x20, 0x49, 0x49, + 0x0a, 0x52, 0x61, 0x6a, 0x61, 0x62, 0x0f, 0x53, + 0x00, 0x68, 0x00, 0x61, 0x00, 0xbb, 0x02, 0x62, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x0e, 0x52, 0x61, + 0x6d, 0x61, 0x64, 0x61, 0x6e, 0x0e, 0x53, 0x68, + 0x61, 0x77, 0x77, 0x61, 0x6c, 0x19, 0x44, 0x00, + 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, + 0x2d, 0x00, 0x51, 0x00, 0x69, 0x00, 0xbb, 0x02, + 0x64, 0x00, 0x61, 0x00, 0x68, 0x00, 0x19, 0x44, + 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, + 0x00, 0x2d, 0x00, 0x48, 0x00, 0x69, 0x00, 0x6a, + 0x00, 0x6a, 0x00, 0x61, 0x00, 0x68, 0x00, 0x04, + 0x41, 0x48, 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x36, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x36, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, + 0x68, 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x54, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x1d, 0x57, 0x00, 0x61, + 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x1f, 0x52, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x1d, 0x59, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x37, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x2d, 0x00, 0x6b, 0x00, 0x61, 0x00, + 0x6d, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x2d, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x2b, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x2d, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, 0x2a, + 0x4a, 0x69, 0x6e, 0x67, 0x6f, 0x2d, 0x6b, 0x65, + 0x69, 0x75, 0x6e, 0x20, 0x28, 0x37, 0x36, 0x37, + 0x2d, 0x37, 0x37, 0x30, 0x29, 0x1d, 0x48, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x1f, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x2d, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x2d, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x38, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x1f, 0x44, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1d, 0x4a, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x1d, 0x4b, 0x00, 0x61, 0x00, 0x6a, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1f, 0x53, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x20, 0x54, 0x65, 0x6e, 0x2d, + 0x61, 0x6e, 0x20, 0x28, 0x38, 0x35, 0x37, 0x2d, + 0x38, 0x35, 0x39, 0x29, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x74, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x1f, 0x45, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1b, 0x4c, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x1d, 0x41, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x1f, 0x45, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x1d, 0x45, 0x00, 0x69, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, + 0x69, 0x00, 0x73, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x39, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4a, + 0x00, 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x35, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, 0x4a, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x29, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4c, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x4a, + 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, 0x24, + 0x54, 0x65, 0x6e, 0x2d, 0x65, 0x69, 0x20, 0x28, + 0x31, 0x31, 0x31, 0x30, 0x2d, 0x31, 0x31, 0x31, + 0x33, 0x29, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x44, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x48, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x48, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x27, 0x45, 0x00, 0x69, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x68, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x6d, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x61, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x69, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x59, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x21, 0x4a, 0x00, 0x75, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x29, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x29, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, + 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x41, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, + 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x29, 0x00, 0x27, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x75, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x29, 0x52, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x4e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x4c, 0x01, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6d, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, + 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, + 0x4c, 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x74, + 0x00, 0x73, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x27, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x21, 0x4c, 0x01, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, + 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x21, 0x4d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, + 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x72, 0x00, + 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4d, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, 0x45, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, + 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x48, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x65, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, + 0x41, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x02, 0x54, 0x02, + 0x53, 0x0a, 0x4d, 0x65, 0x69, 0x6a, 0x69, 0x0d, + 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x0b, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x0c, + 0x48, 0x65, 0x69, 0x73, 0x65, 0x69, 0x12, 0x46, + 0x61, 0x72, 0x76, 0x61, 0x72, 0x64, 0x69, 0x6e, + 0x16, 0x4f, 0x72, 0x64, 0x69, 0x62, 0x65, 0x68, + 0x65, 0x73, 0x68, 0x74, 0x0e, 0x4b, 0x68, 0x6f, + 0x72, 0x64, 0x61, 0x64, 0x06, 0x54, 0x69, 0x72, + 0x0c, 0x4d, 0x6f, 0x72, 0x64, 0x61, 0x64, 0x12, + 0x53, 0x68, 0x61, 0x68, 0x72, 0x69, 0x76, 0x61, + 0x72, 0x08, 0x4d, 0x65, 0x68, 0x72, 0x08, 0x41, + 0x62, 0x61, 0x6e, 0x08, 0x41, 0x7a, 0x61, 0x72, + 0x06, 0x44, 0x65, 0x79, 0x0c, 0x42, 0x61, 0x68, + 0x6d, 0x61, 0x6e, 0x0c, 0x45, 0x73, 0x66, 0x61, + 0x6e, 0x64, 0x04, 0x41, 0x50, 0x1a, 0x42, 0x65, + 0x66, 0x6f, 0x72, 0x65, 0x20, 0x52, 0x2e, 0x4f, + 0x2e, 0x43, 0x2e, 0x0c, 0x52, 0x2e, 0x4f, 0x2e, + 0x43, 0x2e, 0x12, 0x63, 0x61, 0x6c, 0x65, 0x6e, + 0x64, 0x61, 0x72, 0x73, 0x08, 0x64, 0x61, 0x74, + 0x65, 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, + 0x75, 0x10, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0x1e, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, + 0x72, 0x6e, 0x26, 0x7b, 0x6d, 0x69, 0x6e, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x6e, + 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, + 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x0e, 0x64, + 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x26, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0xa0, + 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, + 0x79, 0x7d, 0x3c, 0x7b, 0x6d, 0x69, 0x6e, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0xa0, 0x7b, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, + 0x7d, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x79, 0x2c, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0xa0, 0x7b, 0x70, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, + 0x7d, 0x42, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0xa0, 0x7b, 0x70, + 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, + 0x67, 0x6e, 0x7d, 0x0e, 0x70, 0x65, 0x72, 0x63, + 0x65, 0x6e, 0x74, 0x10, 0x70, 0x61, 0x74, 0x74, + 0x65, 0x72, 0x6e, 0x73, 0x02, 0x2c, 0x02, 0xa0, + 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x06, 0x4e, + 0x61, 0x4e, 0x06, 0x6e, 0x61, 0x6e, 0x02, 0x2b, + 0x10, 0x70, 0x6c, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x02, 0x2d, 0x12, 0x6d, 0x69, 0x6e, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, 0x25, 0x16, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, + 0x69, 0x67, 0x6e, 0x03, 0x1e, 0x22, 0x10, 0x69, + 0x6e, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x0e, + 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x04, + 0x41, 0x24, 0x06, 0x41, 0x55, 0x44, 0x05, 0x40, + 0x04, 0x2e, 0x00, 0x06, 0x42, 0x59, 0x52, 0x06, + 0x43, 0x4e, 0xa5, 0x06, 0x43, 0x4e, 0x59, 0x03, + 0xac, 0x20, 0x06, 0x45, 0x55, 0x52, 0x02, 0xa3, + 0x06, 0x47, 0x42, 0x50, 0x06, 0x48, 0x4b, 0x24, + 0x06, 0x48, 0x4b, 0x44, 0x03, 0xaa, 0x20, 0x06, + 0x49, 0x4c, 0x53, 0x03, 0xb9, 0x20, 0x06, 0x49, + 0x4e, 0x52, 0x02, 0xa5, 0x06, 0x4a, 0x50, 0x59, + 0x03, 0xa9, 0x20, 0x06, 0x4b, 0x52, 0x57, 0x06, + 0x4d, 0x58, 0x24, 0x06, 0x4d, 0x58, 0x4e, 0x03, + 0xbd, 0x20, 0x06, 0x52, 0x55, 0x42, 0x06, 0x4e, + 0x54, 0x24, 0x06, 0x54, 0x57, 0x44, 0x02, 0x24, + 0x06, 0x55, 0x53, 0x44, 0x03, 0xab, 0x20, 0x06, + 0x56, 0x4e, 0x44, 0x08, 0x46, 0x43, 0x46, 0x41, + 0x06, 0x58, 0x41, 0x46, 0x06, 0x45, 0x43, 0x24, + 0x06, 0x58, 0x43, 0x44, 0x06, 0x43, 0x46, 0x41, + 0x06, 0x58, 0x4f, 0x46, 0x08, 0x43, 0x46, 0x50, + 0x46, 0x06, 0x58, 0x50, 0x46, 0x14, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, + 0x52, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, + 0x74, 0x6c, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x6a, + 0x73, 0x6f, 0x6e, 0x70, 0x2f, 0x62, 0x65, 0x2e, + 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, + 0x00, 0x01, 0x00, 0x27, 0x00, 0x89, 0x01, 0xd4, + 0x6a, 0x01, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x39, + 0xd0, 0x00, 0x00, 0x00, 0x43, 0xd1, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd2, 0x00, 0x00, 0x00, 0x4d, + 0xd3, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd4, 0x00, + 0x00, 0x00, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x04, + 0xd6, 0x00, 0x00, 0x00, 0x04, 0xd7, 0x00, 0x00, + 0x00, 0x04, 0xd8, 0x00, 0x00, 0x00, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x04, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdb, 0x00, 0x00, 0x00, 0x04, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x04, + 0xde, 0x00, 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, + 0x00, 0x04, 0xe0, 0x00, 0x00, 0x00, 0x04, 0xe1, + 0x00, 0x00, 0x00, 0x04, 0xe2, 0x00, 0x00, 0x00, + 0x26, 0x0f, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, + 0x0a, 0x4d, 0xe4, 0x00, 0x00, 0x00, 0x09, 0x4d, + 0xe5, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, + 0x00, 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x04, 0xe9, 0x00, 0x00, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xec, + 0x00, 0x00, 0x00, 0x4d, 0xec, 0x00, 0x00, 0x00, + 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, 0xee, 0x00, + 0x00, 0x00, 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, + 0xf0, 0x00, 0x00, 0x00, 0x04, 0xf1, 0x00, 0x00, + 0x00, 0x4d, 0xf2, 0x00, 0x00, 0x00, 0x04, 0xf3, + 0x00, 0x00, 0x00, 0x4d, 0xf4, 0x00, 0x00, 0x00, + 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0xf6, 0x00, + 0x00, 0x00, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, + 0xf8, 0x00, 0x00, 0x00, 0x04, 0xf9, 0x00, 0x00, + 0x00, 0x4d, 0xfa, 0x00, 0x00, 0x00, 0x04, 0xfb, + 0x00, 0x00, 0x00, 0x4d, 0xfc, 0x00, 0x00, 0x00, + 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, 0xfe, 0x00, + 0x00, 0x00, 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x01, 0x00, 0x00, 0x04, 0x01, 0x01, 0x00, + 0x00, 0x4d, 0x02, 0x01, 0x00, 0x00, 0x04, 0x03, + 0x01, 0x00, 0x00, 0x4d, 0x04, 0x01, 0x00, 0x00, + 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, 0x06, 0x01, + 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, + 0x08, 0x01, 0x00, 0x00, 0x04, 0x09, 0x01, 0x00, + 0x00, 0x4d, 0x0a, 0x01, 0x00, 0x00, 0x04, 0x0b, + 0x01, 0x00, 0x00, 0x4d, 0x0c, 0x01, 0x00, 0x00, + 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, 0x0e, 0x01, + 0x00, 0x00, 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, + 0x10, 0x01, 0x00, 0x00, 0x04, 0x11, 0x01, 0x00, + 0x00, 0x4d, 0x12, 0x01, 0x00, 0x00, 0x04, 0x13, + 0x01, 0x00, 0x00, 0x4d, 0x14, 0x01, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, 0x16, 0x01, + 0x00, 0x00, 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, + 0x18, 0x01, 0x00, 0x00, 0x04, 0x19, 0x01, 0x00, + 0x00, 0x4d, 0x1a, 0x01, 0x00, 0x00, 0x04, 0x1b, + 0x01, 0x00, 0x00, 0x4d, 0x1c, 0x01, 0x00, 0x00, + 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, 0x1e, 0x01, + 0x00, 0x00, 0x04, 0x1f, 0x01, 0x00, 0x00, 0x4d, + 0x20, 0x01, 0x00, 0x00, 0x04, 0x21, 0x01, 0x00, + 0x00, 0x4d, 0x22, 0x01, 0x00, 0x00, 0x04, 0x23, + 0x01, 0x00, 0x00, 0x4d, 0x24, 0x01, 0x00, 0x00, + 0x04, 0x25, 0x01, 0x00, 0x00, 0x4d, 0x26, 0x01, + 0x00, 0x00, 0x04, 0x27, 0x01, 0x00, 0x00, 0x4d, + 0x27, 0x01, 0x00, 0x00, 0x04, 0x28, 0x01, 0x00, + 0x00, 0x4d, 0x29, 0x01, 0x00, 0x00, 0x04, 0x2a, + 0x01, 0x00, 0x00, 0x4d, 0x2b, 0x01, 0x00, 0x00, + 0x04, 0x2c, 0x01, 0x00, 0x00, 0x4d, 0x2d, 0x01, + 0x00, 0x00, 0x04, 0x2e, 0x01, 0x00, 0x00, 0x4d, + 0x2f, 0x01, 0x00, 0x00, 0x04, 0x30, 0x01, 0x00, + 0x00, 0x4d, 0x31, 0x01, 0x00, 0x00, 0x04, 0x32, + 0x01, 0x00, 0x00, 0x4d, 0x33, 0x01, 0x00, 0x00, + 0x04, 0x34, 0x01, 0x00, 0x00, 0x4d, 0x35, 0x01, + 0x00, 0x00, 0x04, 0x36, 0x01, 0x00, 0x00, 0x4d, + 0x37, 0x01, 0x00, 0x00, 0x04, 0x38, 0x01, 0x00, + 0x00, 0x4d, 0x39, 0x01, 0x00, 0x00, 0x4d, 0x3a, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x3b, 0x01, 0x00, + 0x00, 0x4d, 0x3c, 0x01, 0x00, 0x00, 0x04, 0x3d, + 0x01, 0x00, 0x00, 0x4d, 0x3e, 0x01, 0x00, 0x00, + 0x04, 0x2a, 0x01, 0x00, 0x00, 0x4d, 0x31, 0x01, + 0x00, 0x00, 0x04, 0x3f, 0x01, 0x00, 0x00, 0x4d, + 0x2b, 0x01, 0x00, 0x00, 0x4d, 0x40, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x41, 0x01, 0x00, 0x00, 0x4d, + 0x42, 0x01, 0x00, 0x00, 0x04, 0x43, 0x01, 0x00, + 0x00, 0x4d, 0x44, 0x01, 0x00, 0x00, 0x04, 0x0b, + 0x01, 0x00, 0x00, 0x4d, 0x0a, 0x01, 0x00, 0x00, + 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0x06, 0x01, + 0x00, 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, 0x4d, + 0x46, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x0b, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x49, + 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x66, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x7a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x04, + 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, + 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x4d, 0xd5, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x00, 0xbe, + 0x01, 0xbe, 0x02, 0xbe, 0x03, 0xbe, 0x04, 0xbe, + 0x05, 0xbe, 0x06, 0xbe, 0x07, 0xbe, 0x08, 0xbe, + 0x09, 0xbe, 0x0a, 0xbe, 0x0b, 0x26, 0x0c, 0x00, + 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, + 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, + 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, + 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, + 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, + 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, + 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, + 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, + 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, + 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, + 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, + 0x04, 0x8b, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x66, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x4d, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, + 0x01, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x0c, 0xbe, 0x0d, 0xbe, 0x0e, + 0xbe, 0x0f, 0xbe, 0x10, 0xbe, 0x11, 0xbe, 0x12, + 0xbe, 0x13, 0xbe, 0x14, 0xbe, 0x15, 0xbe, 0x16, + 0xbe, 0x17, 0xbe, 0x18, 0x26, 0x0d, 0x00, 0x4d, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, + 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, + 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, + 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, + 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, + 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, + 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, + 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, + 0x04, 0x98, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x8c, 0x01, + 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, + 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, + 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, + 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, + 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, + 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, + 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, + 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x26, 0x0d, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x66, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x78, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x99, 0x01, 0x00, 0x00, + 0x04, 0x9a, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, + 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, + 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, + 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, + 0x4d, 0xd7, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x19, 0xbe, 0x1a, 0xbe, 0x1b, 0xbe, 0x1c, 0xbe, + 0x1d, 0xbe, 0x1e, 0xbe, 0x1f, 0xbe, 0x20, 0xbe, + 0x21, 0xbe, 0x22, 0xbe, 0x23, 0xbe, 0x24, 0x26, + 0x0c, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, + 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, + 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, + 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, + 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, + 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, + 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, + 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, + 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, + 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, + 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, + 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, + 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x66, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x78, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, + 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x25, 0xbe, 0x26, + 0xbe, 0x27, 0xbe, 0x28, 0xbe, 0x29, 0xbe, 0x2a, + 0xbe, 0x2b, 0xbe, 0x2c, 0xbe, 0x2d, 0xbe, 0x2e, + 0xbe, 0x2f, 0xbe, 0x30, 0xbe, 0x31, 0x26, 0x0d, + 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x9b, + 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, + 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, + 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, + 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, + 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, + 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, + 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, + 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, + 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, + 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, + 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, + 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, + 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, + 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, + 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x66, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x78, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x99, 0x01, + 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, + 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x32, 0xbe, 0x33, 0xbe, 0x34, 0xbe, + 0x35, 0xbe, 0x36, 0xbe, 0x37, 0xbe, 0x38, 0xbe, + 0x39, 0xbe, 0x3a, 0xbe, 0x3b, 0xbe, 0x3c, 0xbe, + 0x3d, 0xbe, 0x3e, 0x26, 0x0d, 0x00, 0x4d, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, + 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, + 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, + 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, + 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, + 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, + 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, + 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, + 0xa7, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, + 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, + 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, + 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, + 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, + 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, + 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, + 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, + 0x04, 0xa7, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x66, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x99, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x99, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, + 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, + 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, + 0x4d, 0xd9, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x3f, 0xbe, 0x40, 0xbe, 0x41, 0xbe, 0x42, 0xbe, + 0x43, 0xbe, 0x44, 0xbe, 0x45, 0xbe, 0x46, 0xbe, + 0x47, 0xbe, 0x48, 0xbe, 0x49, 0xbe, 0x4a, 0x26, + 0x0c, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, + 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, + 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, + 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, + 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, + 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, + 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, + 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, + 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, + 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, + 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, + 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, + 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x66, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x78, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x99, 0x01, 0x00, + 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x99, + 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x4d, + 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x66, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, + 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, + 0x04, 0xab, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, + 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, + 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, + 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, + 0x00, 0x26, 0x04, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, + 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, + 0x04, 0xae, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7a, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x4d, + 0x7f, 0x01, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x4b, 0xbe, 0x4c, 0xbe, + 0x4d, 0xbe, 0x4e, 0xbe, 0x4f, 0xbe, 0x50, 0xbe, + 0x51, 0xbe, 0x52, 0xbe, 0x53, 0xbe, 0x54, 0xbe, + 0x55, 0xbe, 0x56, 0xbe, 0x57, 0xbe, 0x58, 0x26, + 0x0e, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, + 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, + 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, + 0x04, 0xb4, 0x01, 0x00, 0x00, 0x04, 0xb5, 0x01, + 0x00, 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, 0x04, + 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, + 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, + 0x01, 0x00, 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, + 0x04, 0xbc, 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xaf, 0x01, + 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, + 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, + 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, + 0x01, 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, + 0x04, 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, + 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, 0x04, + 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, + 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, + 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x66, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xbd, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x7a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x04, + 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, + 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x59, 0xbe, + 0x5a, 0xbe, 0x5b, 0xbe, 0x5c, 0xbe, 0x5d, 0xbe, + 0x5e, 0xbe, 0x5f, 0xbe, 0x60, 0xbe, 0x61, 0xbe, + 0x62, 0xbe, 0x63, 0xbe, 0x64, 0x26, 0x0c, 0x00, + 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0xbe, 0x01, + 0x00, 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, 0x04, + 0xc0, 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, + 0x00, 0x04, 0xc2, 0x01, 0x00, 0x00, 0x04, 0xc3, + 0x01, 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, + 0x04, 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, 0x01, + 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, 0x04, + 0xc8, 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, + 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, + 0x04, 0xc1, 0x01, 0x00, 0x00, 0x04, 0xc2, 0x01, + 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, 0x04, + 0xc4, 0x01, 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, + 0x00, 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, 0xc7, + 0x01, 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, + 0x04, 0xc9, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x66, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xca, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0xca, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, + 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, + 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x65, 0xbe, 0x66, 0xbe, 0x67, 0xbe, 0x68, 0xbe, + 0x69, 0xbe, 0x6a, 0xbe, 0x6b, 0xbe, 0x6c, 0xbe, + 0x6d, 0xbe, 0x6e, 0xbe, 0x6f, 0xbe, 0x70, 0x26, + 0x0c, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, + 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, + 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, + 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, + 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, + 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, + 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, + 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, + 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, + 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, + 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, + 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, + 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, + 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x66, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x78, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xe3, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe3, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, + 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x71, 0xbe, 0x72, 0xbe, 0x73, 0xbe, + 0x74, 0xbe, 0x75, 0xbe, 0x76, 0xbe, 0x77, 0xbe, + 0x78, 0xbe, 0x79, 0xbe, 0x7a, 0xbe, 0x7b, 0xbe, + 0x7c, 0x26, 0x0c, 0x00, 0x4d, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, + 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, + 0x04, 0xce, 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, + 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, + 0xd1, 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, + 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, + 0x01, 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, + 0x04, 0xd6, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd7, 0x01, + 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, + 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, + 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, + 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, + 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, + 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, + 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x66, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x78, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xe3, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xe3, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7a, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x4d, + 0x7f, 0x01, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x66, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x78, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xe4, 0x01, 0x00, + 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, + 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, + 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, + 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, + 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, + 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, + 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, + 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, + 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, + 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, + 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, + 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, + 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, + 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, + 0xfb, 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, + 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, + 0x01, 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, + 0x04, 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, + 0x00, 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, 0x04, + 0x03, 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, + 0x04, 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, + 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, 0x4d, 0x21, + 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, 0x00, 0x00, + 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0x07, 0x02, + 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, + 0x08, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, + 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, 0x25, + 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, + 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, + 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, + 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, + 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x29, + 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, + 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, + 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, + 0x10, 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, + 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, 0x2d, + 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, + 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, + 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, + 0x14, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, + 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, 0x31, + 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, + 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, + 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, + 0x18, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, + 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, 0x35, + 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, + 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, + 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, + 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, + 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x39, + 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, + 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, + 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, + 0x20, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, + 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, 0x3d, + 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, + 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, + 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, + 0x24, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, + 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, 0x41, + 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, + 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, + 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, + 0x28, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, + 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, 0x45, + 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, + 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, + 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, + 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, + 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x49, + 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, + 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, + 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, + 0x30, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, + 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, 0x4d, + 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, + 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, + 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, + 0x34, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, + 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, 0x51, + 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, + 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, + 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, + 0x38, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, + 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, 0x55, + 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, + 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, + 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, + 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, + 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x59, + 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, + 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, + 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, + 0x40, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, + 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, 0x5d, + 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, + 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, + 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, + 0x44, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, + 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, 0x61, + 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, + 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, + 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, + 0x48, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, + 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, 0x65, + 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, + 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, + 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, + 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, + 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x69, + 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, + 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, + 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, + 0x50, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, + 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, 0x6d, + 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, + 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, + 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, + 0x54, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, + 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, 0x71, + 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, + 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, + 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, + 0x58, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, + 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, 0x75, + 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, + 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, + 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, + 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, + 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x79, + 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, + 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, + 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, + 0x60, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, + 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, 0x7d, + 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, + 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, + 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, + 0x64, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, + 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, 0x81, + 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, + 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, + 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, + 0x68, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, + 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, 0x85, + 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, + 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, + 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, + 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, + 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x89, + 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, + 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, + 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, + 0x70, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, + 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, 0x8d, + 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, + 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, + 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, + 0x74, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, + 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, 0x91, + 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, + 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, + 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, + 0x78, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, + 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, 0x95, + 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, + 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, + 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, + 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, + 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x99, + 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, + 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, + 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, + 0x80, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, + 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, 0x9d, + 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, + 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, + 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, + 0x84, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, + 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, 0xa1, + 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, + 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, + 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, + 0x88, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, + 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, 0xa5, + 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, + 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, + 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, + 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, + 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xa9, + 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, + 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, + 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, + 0x90, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, + 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, 0xad, + 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, + 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, + 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, + 0x94, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, + 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, 0xb1, + 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, + 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, + 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, + 0x98, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, + 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, 0xb5, + 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, + 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, + 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, + 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, + 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xb9, + 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, + 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, + 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, + 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, + 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xbd, + 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, + 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, + 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, + 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, + 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xc1, + 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, + 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, + 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, + 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, + 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xc5, + 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, + 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, + 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, + 0xac, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, + 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0xc9, + 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, + 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, + 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, + 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, + 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xcd, + 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, + 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, + 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, + 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, + 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xd1, + 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, + 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, + 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, + 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, + 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xd5, + 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, + 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, + 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, + 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xd9, + 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, + 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, + 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, + 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, + 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, + 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xe5, + 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, + 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xcb, 0x02, + 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, + 0x80, 0x04, 0xcc, 0x02, 0x00, 0x00, 0x4d, 0xe9, + 0x00, 0x00, 0x80, 0x04, 0xcd, 0x02, 0x00, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0x04, 0x01, + 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, + 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, + 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, + 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, + 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, + 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, + 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, + 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, + 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, + 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, + 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, + 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, + 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, + 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, + 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, + 0xfb, 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, + 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, + 0x01, 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, + 0x04, 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, + 0x00, 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, 0x04, + 0x03, 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, + 0x04, 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, + 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, 0x4d, 0x21, + 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, 0x00, 0x00, + 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0x07, 0x02, + 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, + 0x08, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, + 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, 0x25, + 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, + 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, + 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, + 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, + 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x29, + 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, + 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, + 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, + 0x10, 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, + 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, 0x2d, + 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, + 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, + 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, + 0x14, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, + 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, 0x31, + 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, + 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, + 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, + 0x18, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, + 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, 0x35, + 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, + 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, + 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, + 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, + 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x39, + 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, + 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, + 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, + 0x20, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, + 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, 0x3d, + 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, + 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, + 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, + 0x24, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, + 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, 0x41, + 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, + 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, + 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, + 0x28, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, + 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, 0x45, + 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, + 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, + 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, + 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, + 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x49, + 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, + 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, + 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, + 0x30, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, + 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, 0x4d, + 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, + 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, + 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, + 0x34, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, + 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, 0x51, + 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, + 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, + 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, + 0x38, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, + 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, 0x55, + 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, + 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, + 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, + 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, + 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x59, + 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, + 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, + 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, + 0x40, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, + 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, 0x5d, + 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, + 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, + 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, + 0x44, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, + 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, 0x61, + 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, + 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, + 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, + 0x48, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, + 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, 0x65, + 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, + 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, + 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, + 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, + 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x69, + 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, + 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, + 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, + 0x50, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, + 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, 0x6d, + 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, + 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, + 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, + 0x54, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, + 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, 0x71, + 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, + 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, + 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, + 0x58, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, + 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, 0x75, + 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, + 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, + 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, + 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, + 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x79, + 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, + 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, + 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, + 0x60, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, + 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, 0x7d, + 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, + 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, + 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, + 0x64, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, + 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, 0x81, + 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, + 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, + 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, + 0x68, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, + 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, 0x85, + 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, + 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, + 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, + 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, + 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x89, + 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, + 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, + 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, + 0x70, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, + 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, 0x8d, + 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, + 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, + 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, + 0x74, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, + 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, 0x91, + 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, + 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, + 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, + 0x78, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, + 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, 0x95, + 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, + 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, + 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, + 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, + 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x99, + 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, + 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, + 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, + 0x80, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, + 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, 0x9d, + 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, + 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, + 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, + 0x84, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, + 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, 0xa1, + 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, + 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, + 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, + 0x88, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, + 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, 0xa5, + 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, + 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, + 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, + 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, + 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xa9, + 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, + 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, + 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, + 0x90, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, + 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, 0xad, + 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, + 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, + 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, + 0x94, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, + 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, 0xb1, + 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, + 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, + 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, + 0x98, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, + 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, 0xb5, + 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, + 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, + 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, + 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, + 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xb9, + 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, + 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, + 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, + 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, + 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xbd, + 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, + 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, + 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, + 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, + 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xc1, + 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, + 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, + 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, + 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, + 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xc5, + 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, + 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, + 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, + 0xac, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, + 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0xc9, + 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, + 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, + 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, + 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, + 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xcd, + 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, + 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, + 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, + 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, + 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xd1, + 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, + 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, + 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, + 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, + 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xd5, + 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, + 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, + 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, + 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xd9, + 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, + 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, + 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, + 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, + 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, + 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xe5, + 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, + 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xcb, 0x02, + 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, + 0xce, 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, + 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, 0x4d, 0xe9, + 0x00, 0x00, 0x80, 0x04, 0xd0, 0x02, 0x00, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0xd1, 0x02, + 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, + 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, + 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, + 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, + 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, + 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, + 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, + 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, + 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, + 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, + 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, + 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, + 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, + 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, + 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, + 0xfb, 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, + 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, + 0x01, 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, + 0x04, 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, + 0x00, 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, 0x04, + 0x03, 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, + 0x04, 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, + 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, 0x4d, 0x21, + 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, 0x00, 0x00, + 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0x07, 0x02, + 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, + 0x08, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, + 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, 0x25, + 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, + 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, + 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, + 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, + 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x29, + 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, + 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, + 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, + 0x10, 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, + 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, 0x2d, + 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, + 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, + 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, + 0x14, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, + 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, 0x31, + 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, + 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, + 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, + 0x18, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, + 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, 0x35, + 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, + 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, + 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, + 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, + 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x39, + 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, + 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, + 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, + 0x20, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, + 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, 0x3d, + 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, + 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, + 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, + 0x24, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, + 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, 0x41, + 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, + 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, + 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, + 0x28, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, + 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, 0x45, + 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, + 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, + 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, + 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, + 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x49, + 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, + 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, + 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, + 0x30, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, + 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, 0x4d, + 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, + 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, + 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, + 0x34, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, + 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, 0x51, + 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, + 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, + 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, + 0x38, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, + 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, 0x55, + 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, + 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, + 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, + 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, + 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x59, + 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, + 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, + 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, + 0x40, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, + 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, 0x5d, + 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, + 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, + 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, + 0x44, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, + 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, 0x61, + 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, + 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, + 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, + 0x48, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, + 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, 0x65, + 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, + 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, + 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, + 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, + 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x69, + 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, + 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, + 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, + 0x50, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, + 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, 0x6d, + 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, + 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, + 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, + 0x54, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, + 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, 0x71, + 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, + 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, + 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, + 0x58, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, + 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, 0x75, + 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, + 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, + 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, + 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, + 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x79, + 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, + 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, + 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, + 0x60, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, + 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, 0x7d, + 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, + 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, + 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, + 0x64, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, + 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, 0x81, + 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, + 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, + 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, + 0x68, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, + 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, 0x85, + 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, + 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, + 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, + 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, + 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x89, + 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, + 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, + 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, + 0x70, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, + 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, 0x8d, + 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, + 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, + 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, + 0x74, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, + 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, 0x91, + 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, + 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, + 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, + 0x78, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, + 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, 0x95, + 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, + 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, + 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, + 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, + 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x99, + 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, + 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, + 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, + 0x80, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, + 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, 0x9d, + 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, + 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, + 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, + 0x84, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, + 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, 0xa1, + 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, + 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, + 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, + 0x88, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, + 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, 0xa5, + 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, + 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, + 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, + 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, + 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xa9, + 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, + 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, + 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, + 0x90, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, + 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, 0xad, + 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, + 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, + 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, + 0x94, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, + 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, 0xb1, + 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, + 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, + 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, + 0x98, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, + 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, 0xb5, + 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, + 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, + 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, + 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, + 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xb9, + 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, + 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, + 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, + 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, + 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xbd, + 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, + 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, + 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, + 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, + 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xc1, + 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, + 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, + 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, + 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, + 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xc5, + 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, + 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, + 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, + 0xac, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, + 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0xc9, + 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, + 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, + 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, + 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, + 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xcd, + 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, + 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, + 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, + 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, + 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xd1, + 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, + 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, + 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, + 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, + 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xd5, + 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, + 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, + 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, + 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xd9, + 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, + 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, + 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, + 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, + 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, + 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xe5, + 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, + 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xcb, 0x02, + 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, + 0xce, 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, + 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, 0x4d, 0xe9, + 0x00, 0x00, 0x80, 0x04, 0xd0, 0x02, 0x00, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0xd1, 0x02, + 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x4d, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, + 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x7d, 0xbe, 0x7e, 0xbe, 0x7f, + 0xbe, 0x80, 0xbe, 0x81, 0xbe, 0x82, 0xbe, 0x83, + 0xbe, 0x84, 0xbe, 0x85, 0xbe, 0x86, 0xbe, 0x87, + 0xbe, 0x88, 0x26, 0x0c, 0x00, 0x4d, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0xd2, 0x02, 0x00, 0x00, 0x04, + 0xd3, 0x02, 0x00, 0x00, 0x04, 0xd4, 0x02, 0x00, + 0x00, 0x04, 0xd5, 0x02, 0x00, 0x00, 0x04, 0xd6, + 0x02, 0x00, 0x00, 0x04, 0xd7, 0x02, 0x00, 0x00, + 0x04, 0xd8, 0x02, 0x00, 0x00, 0x04, 0xd9, 0x02, + 0x00, 0x00, 0x04, 0xda, 0x02, 0x00, 0x00, 0x04, + 0xdb, 0x02, 0x00, 0x00, 0x04, 0xdc, 0x02, 0x00, + 0x00, 0x04, 0xdd, 0x02, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd2, + 0x02, 0x00, 0x00, 0x04, 0xd3, 0x02, 0x00, 0x00, + 0x04, 0xd4, 0x02, 0x00, 0x00, 0x04, 0xd5, 0x02, + 0x00, 0x00, 0x04, 0xd6, 0x02, 0x00, 0x00, 0x04, + 0xd7, 0x02, 0x00, 0x00, 0x04, 0xd8, 0x02, 0x00, + 0x00, 0x04, 0xd9, 0x02, 0x00, 0x00, 0x04, 0xda, + 0x02, 0x00, 0x00, 0x04, 0xdb, 0x02, 0x00, 0x00, + 0x04, 0xdc, 0x02, 0x00, 0x00, 0x04, 0xdd, 0x02, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x66, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xde, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0xde, 0x02, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xde, 0x02, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7a, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, + 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, + 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x66, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x78, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xdf, 0x02, + 0x00, 0x00, 0x04, 0xe0, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0xdf, 0x02, 0x00, 0x00, 0x04, 0xe0, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xdf, 0x02, 0x00, 0x00, 0x04, 0xe0, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, + 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, + 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x4d, + 0xe1, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x02, 0x00, + 0x00, 0x0b, 0x04, 0xe3, 0x02, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe4, 0x02, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0xe5, 0x02, 0x00, 0x00, 0x4d, 0xe6, + 0x02, 0x00, 0x00, 0x04, 0xe7, 0x02, 0x00, 0x00, + 0x4d, 0xe8, 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x02, + 0x00, 0x00, 0x0b, 0x04, 0xea, 0x02, 0x00, 0x00, + 0x4d, 0xe6, 0x02, 0x00, 0x00, 0x04, 0xeb, 0x02, + 0x00, 0x00, 0x4d, 0xe8, 0x02, 0x00, 0x00, 0x4d, + 0xec, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xed, 0x02, + 0x00, 0x00, 0x4d, 0xe6, 0x02, 0x00, 0x00, 0x04, + 0xee, 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x02, 0x00, + 0x00, 0x4d, 0xef, 0x02, 0x00, 0x00, 0x4d, 0xf0, + 0x02, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xf1, 0x02, + 0x00, 0x00, 0x4d, 0xe9, 0x02, 0x00, 0x00, 0x04, + 0xf2, 0x02, 0x00, 0x00, 0x4d, 0xf3, 0x02, 0x00, + 0x00, 0x04, 0xf4, 0x02, 0x00, 0x00, 0x4d, 0xf5, + 0x02, 0x00, 0x00, 0x04, 0xf6, 0x02, 0x00, 0x00, + 0x4d, 0xf7, 0x02, 0x00, 0x00, 0x04, 0xf8, 0x02, + 0x00, 0x00, 0x4d, 0xf9, 0x02, 0x00, 0x00, 0x04, + 0xfa, 0x02, 0x00, 0x00, 0x4d, 0xfb, 0x02, 0x00, + 0x00, 0x04, 0xfc, 0x02, 0x00, 0x00, 0x4d, 0xfd, + 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x02, 0x00, 0x00, + 0x4d, 0xfe, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xff, + 0x02, 0x00, 0x00, 0x4d, 0x00, 0x03, 0x00, 0x00, + 0x04, 0x01, 0x03, 0x00, 0x00, 0x4d, 0x02, 0x03, + 0x00, 0x00, 0x04, 0x03, 0x03, 0x00, 0x00, 0x4d, + 0x04, 0x03, 0x00, 0x00, 0x04, 0x05, 0x03, 0x00, + 0x00, 0x4d, 0x06, 0x03, 0x00, 0x00, 0x04, 0x07, + 0x03, 0x00, 0x00, 0x4d, 0x08, 0x03, 0x00, 0x00, + 0x04, 0x09, 0x03, 0x00, 0x00, 0x4d, 0x0a, 0x03, + 0x00, 0x00, 0x04, 0x0b, 0x03, 0x00, 0x00, 0x4d, + 0x0c, 0x03, 0x00, 0x00, 0x04, 0x0d, 0x03, 0x00, + 0x00, 0x4d, 0x0e, 0x03, 0x00, 0x00, 0x04, 0x0f, + 0x03, 0x00, 0x00, 0x4d, 0x10, 0x03, 0x00, 0x00, + 0x04, 0x11, 0x03, 0x00, 0x00, 0x4d, 0x12, 0x03, + 0x00, 0x00, 0x04, 0x13, 0x03, 0x00, 0x00, 0x4d, + 0x14, 0x03, 0x00, 0x00, 0x04, 0x15, 0x03, 0x00, + 0x00, 0x4d, 0x16, 0x03, 0x00, 0x00, 0x04, 0x17, + 0x03, 0x00, 0x00, 0x4d, 0x18, 0x03, 0x00, 0x00, + 0x04, 0x19, 0x03, 0x00, 0x00, 0x4d, 0x1a, 0x03, + 0x00, 0x00, 0x04, 0x1b, 0x03, 0x00, 0x00, 0x4d, + 0x1c, 0x03, 0x00, 0x00, 0x04, 0x1d, 0x03, 0x00, + 0x00, 0x4d, 0x1e, 0x03, 0x00, 0x00, 0x04, 0x1f, + 0x03, 0x00, 0x00, 0x4d, 0x20, 0x03, 0x00, 0x00, + 0x04, 0x21, 0x03, 0x00, 0x00, 0x4d, 0x22, 0x03, + 0x00, 0x00, 0x04, 0x23, 0x03, 0x00, 0x00, 0x4d, + 0x24, 0x03, 0x00, 0x00, 0x4d, 0x25, 0x03, 0x00, + 0x00, 0x4d, 0x45, 0x00, 0x00, 0x00, 0x24, 0x01, + 0x00, 0xcc, 0x28, 0xcc, 0x0c, 0x01, 0x00, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, + 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_bg_size = 25366; + +const uint8_t intl_bg[25366] = { + 0x01, 0xc3, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x62, 0x67, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x10, + 0x7b, 0x31, 0x7d, 0x2c, 0x20, 0x7b, 0x30, 0x7d, + 0x0a, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, + 0x65, 0x64, 0x69, 0x75, 0x6d, 0x08, 0x66, 0x75, + 0x6c, 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x02, + 0x64, 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, 0x08, + 0x45, 0x2c, 0x20, 0x64, 0x04, 0x45, 0x64, 0x12, + 0x45, 0x2c, 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x20, + 0x61, 0x06, 0x45, 0x68, 0x6d, 0x10, 0x45, 0x2c, + 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x06, 0x45, + 0x48, 0x6d, 0x18, 0x45, 0x2c, 0x20, 0x68, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x08, + 0x45, 0x68, 0x6d, 0x73, 0x14, 0x45, 0x2c, 0x20, + 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x08, + 0x45, 0x48, 0x6d, 0x73, 0x11, 0x79, 0x00, 0x20, + 0x00, 0x27, 0x00, 0x33, 0x04, 0x27, 0x00, 0x2e, + 0x00, 0x20, 0x00, 0x47, 0x00, 0x04, 0x47, 0x79, + 0x17, 0x4d, 0x00, 0x4d, 0x00, 0x2e, 0x00, 0x79, + 0x00, 0x20, 0x00, 0x27, 0x00, 0x33, 0x04, 0x27, + 0x00, 0x2e, 0x00, 0x20, 0x00, 0x47, 0x00, 0x0a, + 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x1b, 0x64, 0x00, + 0x2e, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x2e, 0x00, + 0x79, 0x00, 0x20, 0x00, 0x27, 0x00, 0x33, 0x04, + 0x27, 0x00, 0x2e, 0x00, 0x20, 0x00, 0x47, 0x00, + 0x0c, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x21, + 0x45, 0x00, 0x2c, 0x00, 0x20, 0x00, 0x64, 0x00, + 0x2e, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x2e, 0x00, + 0x79, 0x00, 0x20, 0x00, 0x27, 0x00, 0x33, 0x04, + 0x27, 0x00, 0x2e, 0x00, 0x20, 0x00, 0x47, 0x00, + 0x0e, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, + 0x1b, 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x4d, + 0x00, 0x20, 0x00, 0x79, 0x00, 0x20, 0x00, 0x27, + 0x00, 0x33, 0x04, 0x27, 0x00, 0x2e, 0x00, 0x20, + 0x00, 0x47, 0x00, 0x0c, 0x47, 0x79, 0x4d, 0x4d, + 0x4d, 0x4d, 0x1f, 0x64, 0x00, 0x20, 0x00, 0x4d, + 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x20, + 0x00, 0x79, 0x00, 0x20, 0x00, 0x27, 0x00, 0x33, + 0x04, 0x27, 0x00, 0x2e, 0x00, 0x20, 0x00, 0x47, + 0x00, 0x0e, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, + 0x64, 0x25, 0x45, 0x00, 0x2c, 0x00, 0x20, 0x00, + 0x64, 0x00, 0x20, 0x00, 0x4d, 0x00, 0x4d, 0x00, + 0x4d, 0x00, 0x4d, 0x00, 0x20, 0x00, 0x79, 0x00, + 0x20, 0x00, 0x27, 0x00, 0x33, 0x04, 0x27, 0x00, + 0x2e, 0x00, 0x20, 0x00, 0x47, 0x00, 0x10, 0x47, + 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x06, + 0x68, 0x20, 0x61, 0x02, 0x68, 0x02, 0x48, 0x0c, + 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x04, 0x68, + 0x6d, 0x08, 0x48, 0x3a, 0x6d, 0x6d, 0x04, 0x48, + 0x6d, 0x12, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x61, 0x06, 0x68, 0x6d, 0x73, 0x0e, + 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x06, + 0x48, 0x6d, 0x73, 0x16, 0x68, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x61, 0x20, 0x76, 0x08, + 0x68, 0x6d, 0x73, 0x76, 0x14, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x76, 0x08, + 0x48, 0x6d, 0x73, 0x76, 0x10, 0x68, 0x3a, 0x6d, + 0x6d, 0x20, 0x61, 0x20, 0x76, 0x06, 0x68, 0x6d, + 0x76, 0x0e, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x20, + 0x76, 0x06, 0x48, 0x6d, 0x76, 0x02, 0x4c, 0x02, + 0x4d, 0x08, 0x64, 0x2e, 0x4d, 0x4d, 0x04, 0x4d, + 0x64, 0x0e, 0x45, 0x2c, 0x20, 0x64, 0x2e, 0x4d, + 0x4d, 0x06, 0x4d, 0x45, 0x64, 0x04, 0x4d, 0x4d, + 0x06, 0x4d, 0x4d, 0x4d, 0x08, 0x4d, 0x4d, 0x4d, + 0x64, 0x0a, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x08, + 0x4c, 0x4c, 0x4c, 0x4c, 0x08, 0x4d, 0x4d, 0x4d, + 0x4d, 0x0c, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, + 0x0a, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x0c, 0x4d, + 0x4d, 0x4d, 0x4d, 0x64, 0x64, 0x12, 0x45, 0x2c, + 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x0c, + 0x4d, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x08, 0x6d, + 0x3a, 0x73, 0x73, 0x04, 0x6d, 0x73, 0x0d, 0x79, + 0x00, 0x20, 0x00, 0x27, 0x00, 0x33, 0x04, 0x27, + 0x00, 0x2e, 0x00, 0x02, 0x79, 0x11, 0x4d, 0x00, + 0x2e, 0x00, 0x79, 0x00, 0x20, 0x00, 0x27, 0x00, + 0x33, 0x04, 0x27, 0x00, 0x2e, 0x00, 0x04, 0x79, + 0x4d, 0x17, 0x64, 0x00, 0x2e, 0x00, 0x4d, 0x00, + 0x4d, 0x00, 0x2e, 0x00, 0x79, 0x00, 0x20, 0x00, + 0x27, 0x00, 0x33, 0x04, 0x27, 0x00, 0x2e, 0x00, + 0x06, 0x79, 0x4d, 0x64, 0x1d, 0x45, 0x00, 0x2c, + 0x00, 0x20, 0x00, 0x64, 0x00, 0x2e, 0x00, 0x4d, + 0x00, 0x4d, 0x00, 0x2e, 0x00, 0x79, 0x00, 0x20, + 0x00, 0x27, 0x00, 0x33, 0x04, 0x27, 0x00, 0x2e, + 0x00, 0x08, 0x79, 0x4d, 0x45, 0x64, 0x13, 0x4d, + 0x00, 0x4d, 0x00, 0x2e, 0x00, 0x79, 0x00, 0x20, + 0x00, 0x27, 0x00, 0x33, 0x04, 0x27, 0x00, 0x2e, + 0x00, 0x08, 0x79, 0x4d, 0x4d, 0x4d, 0x0a, 0x79, + 0x4d, 0x4d, 0x4d, 0x64, 0x0c, 0x79, 0x4d, 0x4d, + 0x4d, 0x45, 0x64, 0x17, 0x4d, 0x00, 0x4d, 0x00, + 0x4d, 0x00, 0x4d, 0x00, 0x20, 0x00, 0x79, 0x00, + 0x20, 0x00, 0x27, 0x00, 0x33, 0x04, 0x27, 0x00, + 0x2e, 0x00, 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, + 0x1b, 0x64, 0x00, 0x20, 0x00, 0x4d, 0x00, 0x4d, + 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x20, 0x00, 0x79, + 0x00, 0x20, 0x00, 0x27, 0x00, 0x33, 0x04, 0x27, + 0x00, 0x2e, 0x00, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, + 0x4d, 0x64, 0x21, 0x45, 0x00, 0x2c, 0x00, 0x20, + 0x00, 0x64, 0x00, 0x20, 0x00, 0x4d, 0x00, 0x4d, + 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x20, 0x00, 0x79, + 0x00, 0x20, 0x00, 0x27, 0x00, 0x33, 0x04, 0x27, + 0x00, 0x2e, 0x00, 0x0e, 0x79, 0x4d, 0x4d, 0x4d, + 0x4d, 0x45, 0x64, 0x15, 0x51, 0x00, 0x51, 0x00, + 0x51, 0x00, 0x20, 0x00, 0x79, 0x00, 0x20, 0x00, + 0x27, 0x00, 0x33, 0x04, 0x27, 0x00, 0x2e, 0x00, + 0x08, 0x79, 0x51, 0x51, 0x51, 0x17, 0x51, 0x00, + 0x51, 0x00, 0x51, 0x00, 0x51, 0x00, 0x20, 0x00, + 0x79, 0x00, 0x20, 0x00, 0x27, 0x00, 0x33, 0x04, + 0x27, 0x00, 0x2e, 0x00, 0x0a, 0x79, 0x51, 0x51, + 0x51, 0x51, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, + 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x73, 0x27, 0x45, 0x00, 0x45, 0x00, + 0x45, 0x00, 0x45, 0x00, 0x2c, 0x00, 0x20, 0x00, + 0x64, 0x00, 0x20, 0x00, 0x4d, 0x00, 0x4d, 0x00, + 0x4d, 0x00, 0x4d, 0x00, 0x20, 0x00, 0x79, 0x00, + 0x20, 0x00, 0x27, 0x00, 0x33, 0x04, 0x27, 0x00, + 0x2e, 0x00, 0x14, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, + 0x45, 0x45, 0x45, 0x45, 0x64, 0x19, 0x64, 0x00, + 0x2e, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x2e, 0x00, + 0x79, 0x00, 0x79, 0x00, 0x20, 0x00, 0x27, 0x00, + 0x33, 0x04, 0x27, 0x00, 0x2e, 0x00, 0x16, 0x64, + 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x73, 0x18, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x20, 0x7a, 0x7a, 0x7a, 0x7a, 0x12, + 0x68, 0x6d, 0x6d, 0x73, 0x73, 0x7a, 0x7a, 0x7a, + 0x7a, 0x12, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x7a, 0x08, 0x68, 0x6d, 0x73, 0x7a, + 0x16, 0x74, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x73, 0x0e, 0x66, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x73, 0x03, 0x4f, 0x04, 0x03, + 0x44, 0x04, 0x03, 0x3c, 0x04, 0x03, 0x30, 0x04, + 0x03, 0x4e, 0x04, 0x03, 0x41, 0x04, 0x03, 0x3e, + 0x04, 0x03, 0x3d, 0x04, 0x03, 0x34, 0x04, 0x0c, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x07, 0x4f, + 0x04, 0x3d, 0x04, 0x43, 0x04, 0x07, 0x44, 0x04, + 0x35, 0x04, 0x32, 0x04, 0x09, 0x3c, 0x04, 0x30, + 0x04, 0x40, 0x04, 0x42, 0x04, 0x07, 0x30, 0x04, + 0x3f, 0x04, 0x40, 0x04, 0x07, 0x3c, 0x04, 0x30, + 0x04, 0x39, 0x04, 0x07, 0x4e, 0x04, 0x3d, 0x04, + 0x38, 0x04, 0x07, 0x4e, 0x04, 0x3b, 0x04, 0x38, + 0x04, 0x07, 0x30, 0x04, 0x32, 0x04, 0x33, 0x04, + 0x07, 0x41, 0x04, 0x35, 0x04, 0x3f, 0x04, 0x07, + 0x3e, 0x04, 0x3a, 0x04, 0x42, 0x04, 0x07, 0x3d, + 0x04, 0x3e, 0x04, 0x35, 0x04, 0x07, 0x34, 0x04, + 0x35, 0x04, 0x3a, 0x04, 0x0d, 0x4f, 0x04, 0x3d, + 0x04, 0x43, 0x04, 0x30, 0x04, 0x40, 0x04, 0x38, + 0x04, 0x11, 0x44, 0x04, 0x35, 0x04, 0x32, 0x04, + 0x40, 0x04, 0x43, 0x04, 0x30, 0x04, 0x40, 0x04, + 0x38, 0x04, 0x0b, 0x30, 0x04, 0x3f, 0x04, 0x40, + 0x04, 0x38, 0x04, 0x3b, 0x04, 0x0d, 0x30, 0x04, + 0x32, 0x04, 0x33, 0x04, 0x43, 0x04, 0x41, 0x04, + 0x42, 0x04, 0x13, 0x41, 0x04, 0x35, 0x04, 0x3f, + 0x04, 0x42, 0x04, 0x35, 0x04, 0x3c, 0x04, 0x32, + 0x04, 0x40, 0x04, 0x38, 0x04, 0x11, 0x3e, 0x04, + 0x3a, 0x04, 0x42, 0x04, 0x3e, 0x04, 0x3c, 0x04, + 0x32, 0x04, 0x40, 0x04, 0x38, 0x04, 0x0f, 0x3d, + 0x04, 0x3e, 0x04, 0x35, 0x04, 0x3c, 0x04, 0x32, + 0x04, 0x40, 0x04, 0x38, 0x04, 0x11, 0x34, 0x04, + 0x35, 0x04, 0x3a, 0x04, 0x35, 0x04, 0x3c, 0x04, + 0x32, 0x04, 0x40, 0x04, 0x38, 0x04, 0x0c, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x73, 0x03, 0x3f, 0x04, + 0x03, 0x32, 0x04, 0x03, 0x47, 0x04, 0x05, 0x3d, + 0x04, 0x34, 0x04, 0x05, 0x3f, 0x04, 0x3d, 0x04, + 0x05, 0x32, 0x04, 0x42, 0x04, 0x05, 0x41, 0x04, + 0x40, 0x04, 0x05, 0x47, 0x04, 0x42, 0x04, 0x05, + 0x3f, 0x04, 0x42, 0x04, 0x05, 0x41, 0x04, 0x31, + 0x04, 0x0d, 0x3d, 0x04, 0x35, 0x04, 0x34, 0x04, + 0x35, 0x04, 0x3b, 0x04, 0x4f, 0x04, 0x15, 0x3f, + 0x04, 0x3e, 0x04, 0x3d, 0x04, 0x35, 0x04, 0x34, + 0x04, 0x35, 0x04, 0x3b, 0x04, 0x3d, 0x04, 0x38, + 0x04, 0x3a, 0x04, 0x0f, 0x32, 0x04, 0x42, 0x04, + 0x3e, 0x04, 0x40, 0x04, 0x3d, 0x04, 0x38, 0x04, + 0x3a, 0x04, 0x0b, 0x41, 0x04, 0x40, 0x04, 0x4f, + 0x04, 0x34, 0x04, 0x30, 0x04, 0x13, 0x47, 0x04, + 0x35, 0x04, 0x42, 0x04, 0x32, 0x04, 0x4a, 0x04, + 0x40, 0x04, 0x42, 0x04, 0x4a, 0x04, 0x3a, 0x04, + 0x0b, 0x3f, 0x04, 0x35, 0x04, 0x42, 0x04, 0x4a, + 0x04, 0x3a, 0x04, 0x0d, 0x41, 0x04, 0x4a, 0x04, + 0x31, 0x04, 0x3e, 0x04, 0x42, 0x04, 0x30, 0x04, + 0x08, 0x64, 0x61, 0x79, 0x73, 0x04, 0x42, 0x45, + 0x08, 0x65, 0x72, 0x61, 0x73, 0x0d, 0x3f, 0x04, + 0x40, 0x04, 0x2e, 0x00, 0x3e, 0x04, 0x31, 0x04, + 0x2e, 0x00, 0x04, 0x61, 0x6d, 0x0d, 0x41, 0x04, + 0x3b, 0x04, 0x2e, 0x00, 0x3e, 0x04, 0x31, 0x04, + 0x2e, 0x00, 0x04, 0x70, 0x6d, 0x14, 0x64, 0x61, + 0x79, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x73, + 0x06, 0x4d, 0x30, 0x31, 0x06, 0x4d, 0x30, 0x32, + 0x06, 0x4d, 0x30, 0x33, 0x06, 0x4d, 0x30, 0x34, + 0x06, 0x4d, 0x30, 0x35, 0x06, 0x4d, 0x30, 0x36, + 0x06, 0x4d, 0x30, 0x37, 0x06, 0x4d, 0x30, 0x38, + 0x06, 0x4d, 0x30, 0x39, 0x06, 0x4d, 0x31, 0x30, + 0x06, 0x4d, 0x31, 0x31, 0x06, 0x4d, 0x31, 0x32, + 0x08, 0x54, 0x6f, 0x75, 0x74, 0x08, 0x42, 0x61, + 0x62, 0x61, 0x0a, 0x48, 0x61, 0x74, 0x6f, 0x72, + 0x0a, 0x4b, 0x69, 0x61, 0x68, 0x6b, 0x08, 0x54, + 0x6f, 0x62, 0x61, 0x0c, 0x41, 0x6d, 0x73, 0x68, + 0x69, 0x72, 0x10, 0x42, 0x61, 0x72, 0x61, 0x6d, + 0x68, 0x61, 0x74, 0x12, 0x42, 0x61, 0x72, 0x61, + 0x6d, 0x6f, 0x75, 0x64, 0x61, 0x0e, 0x42, 0x61, + 0x73, 0x68, 0x61, 0x6e, 0x73, 0x0a, 0x50, 0x61, + 0x6f, 0x6e, 0x61, 0x08, 0x45, 0x70, 0x65, 0x70, + 0x0a, 0x4d, 0x65, 0x73, 0x72, 0x61, 0x0a, 0x4e, + 0x61, 0x73, 0x69, 0x65, 0x08, 0x45, 0x52, 0x41, + 0x30, 0x08, 0x45, 0x52, 0x41, 0x31, 0x10, 0x4d, + 0x65, 0x73, 0x6b, 0x65, 0x72, 0x65, 0x6d, 0x0c, + 0x54, 0x65, 0x6b, 0x65, 0x6d, 0x74, 0x0a, 0x48, + 0x65, 0x64, 0x61, 0x72, 0x0c, 0x54, 0x61, 0x68, + 0x73, 0x61, 0x73, 0x06, 0x54, 0x65, 0x72, 0x0e, + 0x59, 0x65, 0x6b, 0x61, 0x74, 0x69, 0x74, 0x0e, + 0x4d, 0x65, 0x67, 0x61, 0x62, 0x69, 0x74, 0x0c, + 0x4d, 0x69, 0x61, 0x7a, 0x69, 0x61, 0x0c, 0x47, + 0x65, 0x6e, 0x62, 0x6f, 0x74, 0x08, 0x53, 0x65, + 0x6e, 0x65, 0x0a, 0x48, 0x61, 0x6d, 0x6c, 0x65, + 0x0e, 0x4e, 0x65, 0x68, 0x61, 0x73, 0x73, 0x65, + 0x0e, 0x50, 0x61, 0x67, 0x75, 0x6d, 0x65, 0x6e, + 0x0d, 0x3f, 0x04, 0x40, 0x04, 0x2e, 0x00, 0x25, + 0x04, 0x40, 0x04, 0x2e, 0x00, 0x0d, 0x41, 0x04, + 0x3b, 0x04, 0x2e, 0x00, 0x25, 0x04, 0x40, 0x04, + 0x2e, 0x00, 0x0f, 0x3f, 0x04, 0x40, 0x04, 0x2e, + 0x00, 0x3d, 0x04, 0x2e, 0x00, 0x35, 0x04, 0x2e, + 0x00, 0x0f, 0x41, 0x04, 0x3b, 0x04, 0x2e, 0x00, + 0x3d, 0x04, 0x2e, 0x00, 0x35, 0x04, 0x2e, 0x00, + 0x19, 0x3f, 0x04, 0x40, 0x04, 0x35, 0x04, 0x34, + 0x04, 0x38, 0x04, 0x20, 0x00, 0x25, 0x04, 0x40, + 0x04, 0x38, 0x04, 0x41, 0x04, 0x42, 0x04, 0x30, + 0x04, 0x17, 0x41, 0x04, 0x3b, 0x04, 0x35, 0x04, + 0x34, 0x04, 0x20, 0x00, 0x25, 0x04, 0x40, 0x04, + 0x38, 0x04, 0x41, 0x04, 0x42, 0x04, 0x30, 0x04, + 0x21, 0x3f, 0x04, 0x40, 0x04, 0x35, 0x04, 0x34, + 0x04, 0x38, 0x04, 0x20, 0x00, 0x3d, 0x04, 0x3e, + 0x04, 0x32, 0x04, 0x30, 0x04, 0x42, 0x04, 0x30, + 0x04, 0x20, 0x00, 0x35, 0x04, 0x40, 0x04, 0x30, + 0x04, 0x1f, 0x41, 0x04, 0x3b, 0x04, 0x35, 0x04, + 0x34, 0x04, 0x20, 0x00, 0x3d, 0x04, 0x3e, 0x04, + 0x32, 0x04, 0x30, 0x04, 0x42, 0x04, 0x30, 0x04, + 0x20, 0x00, 0x35, 0x04, 0x40, 0x04, 0x30, 0x04, + 0x0b, 0x42, 0x04, 0x38, 0x04, 0x48, 0x04, 0x40, + 0x04, 0x38, 0x04, 0x0d, 0x45, 0x04, 0x35, 0x04, + 0x48, 0x04, 0x32, 0x04, 0x30, 0x04, 0x3d, 0x04, + 0x0d, 0x3a, 0x04, 0x38, 0x04, 0x41, 0x04, 0x3b, + 0x04, 0x35, 0x04, 0x32, 0x04, 0x0b, 0x42, 0x04, + 0x35, 0x04, 0x31, 0x04, 0x35, 0x04, 0x42, 0x04, + 0x0b, 0x48, 0x04, 0x35, 0x04, 0x31, 0x04, 0x30, + 0x04, 0x42, 0x04, 0x0d, 0x30, 0x04, 0x34, 0x04, + 0x30, 0x04, 0x40, 0x04, 0x20, 0x00, 0x49, 0x00, + 0x09, 0x30, 0x04, 0x34, 0x04, 0x30, 0x04, 0x40, + 0x04, 0x0b, 0x3d, 0x04, 0x38, 0x04, 0x41, 0x04, + 0x30, 0x04, 0x3d, 0x04, 0x07, 0x38, 0x04, 0x30, + 0x04, 0x40, 0x04, 0x0b, 0x41, 0x04, 0x38, 0x04, + 0x32, 0x04, 0x30, 0x04, 0x3d, 0x04, 0x0b, 0x42, + 0x04, 0x30, 0x04, 0x3c, 0x04, 0x43, 0x04, 0x37, + 0x04, 0x05, 0x30, 0x04, 0x32, 0x04, 0x09, 0x35, + 0x04, 0x3b, 0x04, 0x43, 0x04, 0x3b, 0x04, 0x0f, + 0x30, 0x04, 0x34, 0x04, 0x30, 0x04, 0x40, 0x04, + 0x20, 0x00, 0x49, 0x00, 0x49, 0x00, 0x04, 0x41, + 0x4d, 0x0d, 0x47, 0x04, 0x30, 0x04, 0x39, 0x04, + 0x42, 0x04, 0x40, 0x04, 0x30, 0x04, 0x11, 0x32, + 0x04, 0x30, 0x04, 0x39, 0x04, 0x41, 0x04, 0x30, + 0x04, 0x3a, 0x04, 0x45, 0x04, 0x30, 0x04, 0x11, + 0x34, 0x04, 0x36, 0x04, 0x30, 0x04, 0x38, 0x04, + 0x3d, 0x04, 0x42, 0x04, 0x45, 0x04, 0x30, 0x04, + 0x0d, 0x30, 0x04, 0x41, 0x04, 0x30, 0x04, 0x34, + 0x04, 0x45, 0x04, 0x30, 0x04, 0x0f, 0x41, 0x04, + 0x40, 0x04, 0x30, 0x04, 0x32, 0x04, 0x30, 0x04, + 0x3d, 0x04, 0x30, 0x04, 0x0b, 0x31, 0x04, 0x45, + 0x04, 0x30, 0x04, 0x34, 0x04, 0x30, 0x04, 0x0d, + 0x30, 0x04, 0x37, 0x04, 0x32, 0x04, 0x38, 0x04, + 0x3d, 0x04, 0x30, 0x04, 0x0f, 0x3a, 0x04, 0x30, + 0x04, 0x40, 0x04, 0x42, 0x04, 0x38, 0x04, 0x3a, + 0x04, 0x30, 0x04, 0x15, 0x30, 0x04, 0x33, 0x04, + 0x40, 0x04, 0x30, 0x04, 0x45, 0x04, 0x30, 0x04, + 0x39, 0x04, 0x30, 0x04, 0x3d, 0x04, 0x30, 0x04, + 0x0b, 0x3f, 0x04, 0x30, 0x04, 0x43, 0x04, 0x37, + 0x04, 0x30, 0x04, 0x0b, 0x3c, 0x04, 0x30, 0x04, + 0x33, 0x04, 0x45, 0x04, 0x30, 0x04, 0x11, 0x3f, + 0x04, 0x45, 0x04, 0x30, 0x04, 0x3b, 0x04, 0x33, + 0x04, 0x43, 0x04, 0x3d, 0x04, 0x30, 0x04, 0x08, + 0x53, 0x61, 0x6b, 0x61, 0x08, 0x4d, 0x75, 0x68, + 0x2e, 0x08, 0x53, 0x61, 0x66, 0x2e, 0x0c, 0x52, + 0x61, 0x62, 0x2e, 0x20, 0x49, 0x0e, 0x52, 0x61, + 0x62, 0x2e, 0x20, 0x49, 0x49, 0x0c, 0x4a, 0x75, + 0x6d, 0x2e, 0x20, 0x49, 0x0e, 0x4a, 0x75, 0x6d, + 0x2e, 0x20, 0x49, 0x49, 0x08, 0x52, 0x61, 0x6a, + 0x2e, 0x08, 0x53, 0x68, 0x61, 0x2e, 0x08, 0x52, + 0x61, 0x6d, 0x2e, 0x0a, 0x53, 0x68, 0x61, 0x77, + 0x2e, 0x11, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, + 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x51, 0x00, + 0x2e, 0x00, 0x11, 0x44, 0x00, 0x68, 0x00, 0x75, + 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x48, + 0x00, 0x2e, 0x00, 0x0f, 0x3c, 0x04, 0x43, 0x04, + 0x45, 0x04, 0x30, 0x04, 0x40, 0x04, 0x30, 0x04, + 0x3c, 0x04, 0x0b, 0x41, 0x04, 0x30, 0x04, 0x44, + 0x04, 0x30, 0x04, 0x40, 0x04, 0x0d, 0x40, 0x04, + 0x30, 0x04, 0x31, 0x04, 0x38, 0x04, 0x2d, 0x00, + 0x31, 0x00, 0x0d, 0x40, 0x04, 0x30, 0x04, 0x31, + 0x04, 0x38, 0x04, 0x2d, 0x00, 0x32, 0x00, 0x13, + 0x34, 0x04, 0x36, 0x04, 0x43, 0x04, 0x3c, 0x04, + 0x30, 0x04, 0x34, 0x04, 0x30, 0x04, 0x2d, 0x00, + 0x31, 0x00, 0x13, 0x34, 0x04, 0x36, 0x04, 0x43, + 0x04, 0x3c, 0x04, 0x30, 0x04, 0x34, 0x04, 0x30, + 0x04, 0x2d, 0x00, 0x32, 0x00, 0x0d, 0x40, 0x04, + 0x30, 0x04, 0x34, 0x04, 0x36, 0x04, 0x30, 0x04, + 0x31, 0x04, 0x0b, 0x48, 0x04, 0x30, 0x04, 0x31, + 0x04, 0x30, 0x04, 0x3d, 0x04, 0x0f, 0x40, 0x04, + 0x30, 0x04, 0x3c, 0x04, 0x30, 0x04, 0x37, 0x04, + 0x30, 0x04, 0x3d, 0x04, 0x0b, 0x28, 0x04, 0x30, + 0x04, 0x32, 0x04, 0x30, 0x04, 0x3b, 0x04, 0x15, + 0x14, 0x04, 0x45, 0x04, 0x43, 0x04, 0x3b, 0x04, + 0x2d, 0x00, 0x1a, 0x04, 0x30, 0x04, 0x30, 0x04, + 0x34, 0x04, 0x30, 0x04, 0x15, 0x14, 0x04, 0x45, + 0x04, 0x43, 0x04, 0x3b, 0x04, 0x2d, 0x00, 0x45, + 0x04, 0x38, 0x04, 0x34, 0x04, 0x36, 0x04, 0x30, + 0x04, 0x04, 0x41, 0x48, 0x1f, 0x54, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x36, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x36, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x13, 0x20, 0x36, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x36, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x29, 0x00, 0x21, + 0x53, 0x00, 0x68, 0x00, 0x75, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x57, + 0x00, 0x61, 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x1f, 0x52, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x1d, 0x59, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, + 0x4a, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6b, 0x00, + 0x61, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x2d, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x2d, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x2b, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x2d, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, 0x2d, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x2a, 0x4a, 0x69, 0x6e, 0x67, 0x6f, 0x2d, + 0x6b, 0x65, 0x69, 0x75, 0x6e, 0x20, 0x28, 0x37, + 0x36, 0x37, 0x2d, 0x37, 0x37, 0x30, 0x29, 0x1d, + 0x48, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x37, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, 0x44, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x64, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x38, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x4d, 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x38, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4a, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x61, 0x00, 0x6a, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, + 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x53, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x20, 0x54, 0x65, + 0x6e, 0x2d, 0x61, 0x6e, 0x20, 0x28, 0x38, 0x35, + 0x37, 0x2d, 0x38, 0x35, 0x39, 0x29, 0x1f, 0x4a, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, + 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, 0x6e, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x34, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1b, 0x4c, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4b, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x1d, 0x41, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1d, + 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x4a, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x29, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, + 0x4a, 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x29, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, + 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4c, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x25, 0x4a, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x24, 0x54, 0x65, 0x6e, 0x2d, 0x65, 0x69, + 0x20, 0x28, 0x31, 0x31, 0x31, 0x30, 0x2d, 0x31, + 0x31, 0x31, 0x33, 0x29, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, + 0x4d, 0x01, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, + 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x6a, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x48, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x45, + 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, + 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6d, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4a, + 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x59, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x21, 0x4a, 0x00, 0x75, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x29, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4a, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x29, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, + 0x4a, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x27, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x75, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x29, 0x52, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x4e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, + 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, 0x00, + 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1f, 0x4c, 0x01, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x74, 0x00, 0x73, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x27, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x45, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x21, 0x4d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, 0x69, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x27, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x21, 0x45, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x61, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x41, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, 0x02, + 0x54, 0x02, 0x53, 0x0a, 0x4d, 0x65, 0x69, 0x6a, + 0x69, 0x0d, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x0b, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x0c, 0x48, 0x65, 0x69, 0x73, 0x65, 0x69, + 0x12, 0x46, 0x61, 0x72, 0x76, 0x61, 0x72, 0x64, + 0x69, 0x6e, 0x16, 0x4f, 0x72, 0x64, 0x69, 0x62, + 0x65, 0x68, 0x65, 0x73, 0x68, 0x74, 0x0e, 0x4b, + 0x68, 0x6f, 0x72, 0x64, 0x61, 0x64, 0x06, 0x54, + 0x69, 0x72, 0x0c, 0x4d, 0x6f, 0x72, 0x64, 0x61, + 0x64, 0x12, 0x53, 0x68, 0x61, 0x68, 0x72, 0x69, + 0x76, 0x61, 0x72, 0x08, 0x4d, 0x65, 0x68, 0x72, + 0x08, 0x41, 0x62, 0x61, 0x6e, 0x08, 0x41, 0x7a, + 0x61, 0x72, 0x06, 0x44, 0x65, 0x79, 0x0c, 0x42, + 0x61, 0x68, 0x6d, 0x61, 0x6e, 0x0c, 0x45, 0x73, + 0x66, 0x61, 0x6e, 0x64, 0x04, 0x41, 0x50, 0x1a, + 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x52, + 0x2e, 0x4f, 0x2e, 0x43, 0x2e, 0x0c, 0x52, 0x2e, + 0x4f, 0x2e, 0x43, 0x2e, 0x12, 0x63, 0x61, 0x6c, + 0x65, 0x6e, 0x64, 0x61, 0x72, 0x73, 0x08, 0x64, + 0x61, 0x74, 0x65, 0x08, 0x6c, 0x61, 0x74, 0x6e, + 0x04, 0x6e, 0x75, 0x10, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, + 0x74, 0x65, 0x72, 0x6e, 0x26, 0x7b, 0x6d, 0x69, + 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0x1e, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, + 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, + 0x0e, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, + 0x26, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0xa0, 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x63, 0x79, 0x7d, 0x3c, 0x7b, 0x6d, 0x69, + 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0xa0, 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x79, 0x7d, 0x10, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x63, 0x79, 0x2a, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x7b, 0x70, 0x65, + 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, + 0x6e, 0x7d, 0x40, 0x7b, 0x6d, 0x69, 0x6e, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x7b, 0x70, + 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, + 0x67, 0x6e, 0x7d, 0x0e, 0x70, 0x65, 0x72, 0x63, + 0x65, 0x6e, 0x74, 0x10, 0x70, 0x61, 0x74, 0x74, + 0x65, 0x72, 0x6e, 0x73, 0x02, 0x2c, 0x02, 0xa0, + 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x06, 0x4e, + 0x61, 0x4e, 0x06, 0x6e, 0x61, 0x6e, 0x02, 0x2b, + 0x10, 0x70, 0x6c, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x02, 0x2d, 0x12, 0x6d, 0x69, 0x6e, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, 0x25, 0x16, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, + 0x69, 0x67, 0x6e, 0x03, 0x1e, 0x22, 0x10, 0x69, + 0x6e, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x0e, + 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x07, + 0x3b, 0x04, 0x32, 0x04, 0x2e, 0x00, 0x06, 0x42, + 0x47, 0x4e, 0x03, 0xac, 0x20, 0x06, 0x45, 0x55, + 0x52, 0x09, 0x49, 0x04, 0x2e, 0x00, 0x34, 0x04, + 0x2e, 0x00, 0x06, 0x55, 0x53, 0x44, 0x08, 0x46, + 0x43, 0x46, 0x41, 0x06, 0x58, 0x41, 0x46, 0x06, + 0x43, 0x46, 0x41, 0x06, 0x58, 0x4f, 0x46, 0x08, + 0x43, 0x46, 0x50, 0x46, 0x06, 0x58, 0x50, 0x46, + 0x14, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, + 0x69, 0x65, 0x73, 0x52, 0x6e, 0x6f, 0x64, 0x65, + 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, + 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2f, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, + 0x61, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x70, 0x2f, + 0x62, 0x67, 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, + 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, 0x27, 0x00, + 0x89, 0x01, 0x98, 0x6a, 0x01, 0xa0, 0x01, 0x00, + 0x00, 0x00, 0x39, 0xd0, 0x00, 0x00, 0x00, 0x43, + 0xd1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd2, 0x00, + 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd4, 0x00, 0x00, 0x00, 0x04, 0xd5, 0x00, + 0x00, 0x00, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x04, + 0xd7, 0x00, 0x00, 0x00, 0x04, 0xd8, 0x00, 0x00, + 0x00, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x04, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xdb, 0x00, 0x00, 0x00, + 0x04, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xdd, 0x00, + 0x00, 0x00, 0x04, 0xde, 0x00, 0x00, 0x00, 0x04, + 0xdf, 0x00, 0x00, 0x00, 0x04, 0xe0, 0x00, 0x00, + 0x00, 0x04, 0xe1, 0x00, 0x00, 0x00, 0x04, 0xe2, + 0x00, 0x00, 0x00, 0x26, 0x0f, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x00, 0x0a, 0x4d, 0xe4, 0x00, 0x00, + 0x00, 0x09, 0x4d, 0xe5, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, + 0xe8, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, + 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x00, 0x04, 0xe6, + 0x00, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x04, 0xec, 0x00, 0x00, 0x00, + 0x4d, 0xed, 0x00, 0x00, 0x00, 0x04, 0xee, 0x00, + 0x00, 0x00, 0x4d, 0xef, 0x00, 0x00, 0x00, 0x04, + 0xf0, 0x00, 0x00, 0x00, 0x4d, 0xf1, 0x00, 0x00, + 0x00, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xf3, + 0x00, 0x00, 0x00, 0x04, 0xf4, 0x00, 0x00, 0x00, + 0x4d, 0xf5, 0x00, 0x00, 0x00, 0x04, 0xf6, 0x00, + 0x00, 0x00, 0x4d, 0xf7, 0x00, 0x00, 0x00, 0x04, + 0xf8, 0x00, 0x00, 0x00, 0x4d, 0xf9, 0x00, 0x00, + 0x00, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xfb, + 0x00, 0x00, 0x00, 0x04, 0xfc, 0x00, 0x00, 0x00, + 0x4d, 0xfd, 0x00, 0x00, 0x00, 0x04, 0xfe, 0x00, + 0x00, 0x00, 0x4d, 0xff, 0x00, 0x00, 0x00, 0x04, + 0x00, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x01, 0x00, + 0x00, 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, 0x03, + 0x01, 0x00, 0x00, 0x04, 0x04, 0x01, 0x00, 0x00, + 0x4d, 0x05, 0x01, 0x00, 0x00, 0x04, 0x06, 0x01, + 0x00, 0x00, 0x4d, 0x07, 0x01, 0x00, 0x00, 0x04, + 0x08, 0x01, 0x00, 0x00, 0x4d, 0x08, 0x01, 0x00, + 0x00, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0x0a, + 0x01, 0x00, 0x00, 0x04, 0x0b, 0x01, 0x00, 0x00, + 0x4d, 0x0c, 0x01, 0x00, 0x00, 0x04, 0x0d, 0x01, + 0x00, 0x00, 0x4d, 0x0e, 0x01, 0x00, 0x00, 0x04, + 0x0f, 0x01, 0x00, 0x00, 0x4d, 0x10, 0x01, 0x00, + 0x00, 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, 0x12, + 0x01, 0x00, 0x00, 0x04, 0x13, 0x01, 0x00, 0x00, + 0x4d, 0x14, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x4d, 0x16, 0x01, 0x00, 0x00, 0x04, + 0x17, 0x01, 0x00, 0x00, 0x4d, 0x18, 0x01, 0x00, + 0x00, 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, 0x1a, + 0x01, 0x00, 0x00, 0x04, 0x1b, 0x01, 0x00, 0x00, + 0x4d, 0x1c, 0x01, 0x00, 0x00, 0x04, 0x1d, 0x01, + 0x00, 0x00, 0x4d, 0x1e, 0x01, 0x00, 0x00, 0x04, + 0x1f, 0x01, 0x00, 0x00, 0x4d, 0x20, 0x01, 0x00, + 0x00, 0x04, 0x1b, 0x01, 0x00, 0x00, 0x4d, 0x21, + 0x01, 0x00, 0x00, 0x04, 0x1d, 0x01, 0x00, 0x00, + 0x4d, 0x22, 0x01, 0x00, 0x00, 0x04, 0x23, 0x01, + 0x00, 0x00, 0x4d, 0x24, 0x01, 0x00, 0x00, 0x04, + 0x25, 0x01, 0x00, 0x00, 0x4d, 0x26, 0x01, 0x00, + 0x00, 0x04, 0x25, 0x01, 0x00, 0x00, 0x4d, 0x27, + 0x01, 0x00, 0x00, 0x04, 0x28, 0x01, 0x00, 0x00, + 0x4d, 0x29, 0x01, 0x00, 0x00, 0x04, 0x2a, 0x01, + 0x00, 0x00, 0x4d, 0x2b, 0x01, 0x00, 0x00, 0x04, + 0x2c, 0x01, 0x00, 0x00, 0x4d, 0x2d, 0x01, 0x00, + 0x00, 0x04, 0x2e, 0x01, 0x00, 0x00, 0x4d, 0x2f, + 0x01, 0x00, 0x00, 0x04, 0x30, 0x01, 0x00, 0x00, + 0x4d, 0x31, 0x01, 0x00, 0x00, 0x04, 0x32, 0x01, + 0x00, 0x00, 0x4d, 0x33, 0x01, 0x00, 0x00, 0x04, + 0x34, 0x01, 0x00, 0x00, 0x4d, 0x35, 0x01, 0x00, + 0x00, 0x04, 0x30, 0x01, 0x00, 0x00, 0x4d, 0x36, + 0x01, 0x00, 0x00, 0x04, 0x32, 0x01, 0x00, 0x00, + 0x4d, 0x37, 0x01, 0x00, 0x00, 0x04, 0x38, 0x01, + 0x00, 0x00, 0x4d, 0x39, 0x01, 0x00, 0x00, 0x04, + 0x3a, 0x01, 0x00, 0x00, 0x4d, 0x3b, 0x01, 0x00, + 0x00, 0x04, 0x3c, 0x01, 0x00, 0x00, 0x4d, 0x3d, + 0x01, 0x00, 0x00, 0x04, 0x3e, 0x01, 0x00, 0x00, + 0x4d, 0x3f, 0x01, 0x00, 0x00, 0x04, 0x40, 0x01, + 0x00, 0x00, 0x4d, 0x41, 0x01, 0x00, 0x00, 0x4d, + 0x42, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x43, 0x01, + 0x00, 0x00, 0x4d, 0x44, 0x01, 0x00, 0x00, 0x04, + 0x3a, 0x01, 0x00, 0x00, 0x4d, 0x3b, 0x01, 0x00, + 0x00, 0x04, 0x30, 0x01, 0x00, 0x00, 0x4d, 0x36, + 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, + 0x4d, 0x31, 0x01, 0x00, 0x00, 0x4d, 0x46, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x4d, 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x0f, 0x01, 0x00, 0x00, 0x4d, 0x0e, 0x01, 0x00, + 0x00, 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, 0x0a, + 0x01, 0x00, 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, + 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x0b, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0x7e, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x4d, 0x83, 0x01, + 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, 0x4d, + 0xd5, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x00, + 0xbe, 0x01, 0xbe, 0x02, 0xbe, 0x03, 0xbe, 0x04, + 0xbe, 0x05, 0xbe, 0x06, 0xbe, 0x07, 0xbe, 0x08, + 0xbe, 0x09, 0xbe, 0x0a, 0xbe, 0x0b, 0x26, 0x0c, + 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0x85, + 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, + 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, + 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, + 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, + 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, + 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, + 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, + 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, + 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, + 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, + 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, + 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, + 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, + 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6b, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7d, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x4d, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, + 0x00, 0x00, 0x4d, 0x83, 0x01, 0x00, 0x00, 0x4d, + 0x84, 0x01, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x0c, 0xbe, 0x0d, 0xbe, + 0x0e, 0xbe, 0x0f, 0xbe, 0x10, 0xbe, 0x11, 0xbe, + 0x12, 0xbe, 0x13, 0xbe, 0x14, 0xbe, 0x15, 0xbe, + 0x16, 0xbe, 0x17, 0xbe, 0x18, 0x26, 0x0d, 0x00, + 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, + 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, + 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, + 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, + 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, + 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, + 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, + 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, + 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x26, 0x0d, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x91, + 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, + 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, + 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, + 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, + 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, + 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, + 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, + 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7d, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x9e, 0x01, 0x00, + 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0x9e, + 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, + 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x4d, + 0x83, 0x01, 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, + 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x19, 0xbe, 0x1a, 0xbe, 0x1b, 0xbe, 0x1c, + 0xbe, 0x1d, 0xbe, 0x1e, 0xbe, 0x1f, 0xbe, 0x20, + 0xbe, 0x21, 0xbe, 0x22, 0xbe, 0x23, 0xbe, 0x24, + 0x26, 0x0c, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, + 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, + 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, + 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, + 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, + 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, + 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, + 0x90, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, + 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, + 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, + 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, + 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, + 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, + 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, + 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x7d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x04, + 0x82, 0x01, 0x00, 0x00, 0x4d, 0x83, 0x01, 0x00, + 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x25, 0xbe, + 0x26, 0xbe, 0x27, 0xbe, 0x28, 0xbe, 0x29, 0xbe, + 0x2a, 0xbe, 0x2b, 0xbe, 0x2c, 0xbe, 0x2d, 0xbe, + 0x2e, 0xbe, 0x2f, 0xbe, 0x30, 0xbe, 0x31, 0x26, + 0x0d, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, + 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, + 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, + 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, + 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, + 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, + 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, + 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, + 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, + 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, + 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, + 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, + 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, + 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, + 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, + 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x9e, + 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, + 0x9f, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x80, 0x01, 0x00, 0x00, 0x4d, + 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, + 0x00, 0x4d, 0x83, 0x01, 0x00, 0x00, 0x4d, 0x84, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x32, 0xbe, 0x33, 0xbe, 0x34, + 0xbe, 0x35, 0xbe, 0x36, 0xbe, 0x37, 0xbe, 0x38, + 0xbe, 0x39, 0xbe, 0x3a, 0xbe, 0x3b, 0xbe, 0x3c, + 0xbe, 0x3d, 0xbe, 0x3e, 0x26, 0x0d, 0x00, 0x4d, + 0x56, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, + 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, + 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, + 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, + 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, + 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, + 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, + 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, + 0x04, 0xac, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa0, 0x01, + 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, + 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, + 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, + 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, + 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, + 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, + 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, + 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, 0x26, 0x0d, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6b, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7d, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x9e, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x9e, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x9e, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, + 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x4d, + 0x83, 0x01, 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, + 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x3f, 0xbe, 0x40, 0xbe, 0x41, 0xbe, 0x42, + 0xbe, 0x43, 0xbe, 0x44, 0xbe, 0x45, 0xbe, 0x46, + 0xbe, 0x47, 0xbe, 0x48, 0xbe, 0x49, 0xbe, 0x4a, + 0x26, 0x0c, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, + 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, + 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, + 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, + 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, + 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, + 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, + 0x90, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, + 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, + 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, + 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, + 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, + 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, + 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, + 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x7d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x9e, 0x01, + 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, + 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, + 0x4d, 0x83, 0x01, 0x00, 0x00, 0x4d, 0x84, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, + 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, + 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, 0x26, 0x04, + 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0xad, + 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, + 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, + 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, 0x04, + 0xb2, 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, + 0x00, 0x04, 0xb4, 0x01, 0x00, 0x00, 0x26, 0x04, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7f, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x4d, 0x83, 0x01, 0x00, 0x00, + 0x4d, 0x84, 0x01, 0x00, 0x00, 0x4d, 0xd4, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x4b, 0xbe, 0x4c, + 0xbe, 0x4d, 0xbe, 0x4e, 0xbe, 0x4f, 0xbe, 0x50, + 0xbe, 0x51, 0xbe, 0x52, 0xbe, 0x53, 0xbe, 0x54, + 0xbe, 0x55, 0xbe, 0x56, 0xbe, 0x57, 0xbe, 0x58, + 0x26, 0x0e, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0xb5, 0x01, 0x00, 0x00, 0x04, 0xb6, 0x01, + 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, + 0xb8, 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, + 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, 0x04, 0xbb, + 0x01, 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, + 0x04, 0xbd, 0x01, 0x00, 0x00, 0x04, 0xbe, 0x01, + 0x00, 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, 0x04, + 0xc0, 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, + 0x00, 0x04, 0xc2, 0x01, 0x00, 0x00, 0x26, 0x0e, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xb5, + 0x01, 0x00, 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, + 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, + 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, 0x04, + 0xba, 0x01, 0x00, 0x00, 0x04, 0xbb, 0x01, 0x00, + 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, 0x04, 0xbd, + 0x01, 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, + 0x04, 0xbf, 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, + 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, 0x04, + 0xc2, 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xc3, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0xc3, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x4d, 0x83, 0x01, + 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x59, + 0xbe, 0x5a, 0xbe, 0x5b, 0xbe, 0x5c, 0xbe, 0x5d, + 0xbe, 0x5e, 0xbe, 0x5f, 0xbe, 0x60, 0xbe, 0x61, + 0xbe, 0x62, 0xbe, 0x63, 0xbe, 0x64, 0x26, 0x0c, + 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0xc4, + 0x01, 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, + 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, + 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, + 0xc9, 0x01, 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, + 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, + 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, + 0x04, 0xce, 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, 0x04, + 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, + 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, + 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, + 0x04, 0xca, 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, + 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, + 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, + 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6b, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7d, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xd0, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0xd0, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd0, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, + 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x4d, + 0x83, 0x01, 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x65, 0xbe, 0x66, 0xbe, 0x67, 0xbe, 0x68, + 0xbe, 0x69, 0xbe, 0x6a, 0xbe, 0x6b, 0xbe, 0x6c, + 0xbe, 0x6d, 0xbe, 0x6e, 0xbe, 0x6f, 0xbe, 0x70, + 0x26, 0x0c, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0xd1, 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, + 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, + 0xd4, 0x01, 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, + 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, + 0x01, 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, + 0x04, 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, + 0x00, 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, + 0xdc, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, + 0x00, 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, + 0x01, 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, + 0x04, 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, + 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, + 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, + 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, + 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x7d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xe9, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x56, 0x01, + 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xe9, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x80, 0x01, 0x00, 0x00, 0x4d, + 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, + 0x00, 0x4d, 0x83, 0x01, 0x00, 0x00, 0x4d, 0x84, + 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x71, 0xbe, 0x72, 0xbe, 0x73, + 0xbe, 0x74, 0xbe, 0x75, 0xbe, 0x76, 0xbe, 0x77, + 0xbe, 0x78, 0xbe, 0x79, 0xbe, 0x7a, 0xbe, 0x7b, + 0xbe, 0x7c, 0x26, 0x0c, 0x00, 0x4d, 0x56, 0x01, + 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, 0x04, + 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, + 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, 0xd5, + 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, + 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, 0xd8, 0x01, + 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, 0x04, + 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, 0x00, + 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xdd, + 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, 0x00, + 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, 0xe0, 0x01, + 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, 0x00, 0x04, + 0xe2, 0x01, 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, + 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, + 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, + 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xe9, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x56, 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7f, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x4d, 0x83, 0x01, 0x00, 0x00, + 0x4d, 0x84, 0x01, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x7d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xea, 0x01, + 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, + 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, + 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, + 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, + 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, + 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, + 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, + 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, + 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, + 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, + 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, + 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, 0x01, 0x00, + 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x04, 0xff, + 0x01, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, + 0x04, 0x01, 0x02, 0x00, 0x00, 0x04, 0x02, 0x02, + 0x00, 0x00, 0x04, 0x03, 0x02, 0x00, 0x00, 0x04, + 0x04, 0x02, 0x00, 0x00, 0x04, 0x05, 0x02, 0x00, + 0x00, 0x04, 0x06, 0x02, 0x00, 0x00, 0x04, 0x07, + 0x02, 0x00, 0x00, 0x04, 0x08, 0x02, 0x00, 0x00, + 0x04, 0x09, 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, + 0x04, 0x0a, 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, + 0x00, 0x80, 0x04, 0x0b, 0x02, 0x00, 0x00, 0x4d, + 0x21, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, 0x00, + 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0x0d, + 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, + 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, + 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, 0x4d, + 0x25, 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, 0x00, + 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0x11, + 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, + 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, + 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, 0x4d, + 0x29, 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, 0x00, + 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x15, + 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, + 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, + 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, 0x4d, + 0x2d, 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, 0x00, + 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x19, + 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, + 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, + 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, + 0x31, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, + 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x1d, + 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, + 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, + 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, + 0x35, 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, + 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x21, + 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, + 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, + 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, + 0x39, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, + 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x25, + 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, + 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, + 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, + 0x3d, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, + 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x29, + 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, + 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, + 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, + 0x41, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, + 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x2d, + 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, + 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, + 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, + 0x45, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, + 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x31, + 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, + 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, + 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, + 0x49, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, + 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x35, + 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, + 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, + 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, + 0x4d, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, + 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x39, + 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, + 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, + 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, + 0x51, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, + 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x3d, + 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, + 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, + 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, + 0x55, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, + 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x41, + 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, + 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, + 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, + 0x59, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, + 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x45, + 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, + 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, + 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, + 0x5d, 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, + 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x49, + 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, + 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, + 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, + 0x61, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, + 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x4d, + 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, + 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, + 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, + 0x65, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, + 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x51, + 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, + 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, + 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, + 0x69, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, + 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x55, + 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, + 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, + 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, + 0x6d, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, + 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x59, + 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, + 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, + 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, + 0x71, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, + 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x5d, + 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, + 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, + 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, + 0x75, 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, + 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x61, + 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, + 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, + 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, + 0x79, 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, + 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x65, + 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, + 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, + 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, + 0x7d, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, + 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x69, + 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, + 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, + 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, + 0x81, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, + 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x6d, + 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, + 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, + 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, + 0x85, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, + 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x71, + 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, + 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, + 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, + 0x89, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, + 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x75, + 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, + 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, + 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, + 0x8d, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, + 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x79, + 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, + 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, + 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, + 0x91, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, + 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x7d, + 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, + 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, + 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, + 0x95, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, + 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x81, + 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, + 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, + 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, + 0x99, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, + 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x85, + 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, + 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, + 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, + 0x9d, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, + 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x89, + 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, + 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, + 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, + 0xa1, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, + 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x8d, + 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, + 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, + 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, + 0xa5, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, + 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x91, + 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, + 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, + 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, + 0xa9, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, + 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x95, + 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, + 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, + 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, + 0xad, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, + 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x99, + 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, + 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, + 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, + 0xb1, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, + 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0x9d, + 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, + 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, + 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, + 0xb5, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, + 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0xa1, + 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, + 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, + 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, + 0xb9, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, + 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0xa5, + 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, + 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, + 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, + 0xbd, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, + 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0xa9, + 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, + 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, + 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, + 0xc1, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, + 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0xad, + 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, + 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, + 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, + 0xc5, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, + 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0xb1, + 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, + 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, + 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, + 0xc9, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, + 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xb5, + 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, + 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, + 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, + 0xcd, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, + 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xb9, + 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, + 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, + 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, + 0xd1, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, + 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xbd, + 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, + 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, + 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, + 0xd5, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xc1, + 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, + 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xc5, + 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, + 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xc9, + 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, + 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xcd, + 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, + 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, + 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, 0x4d, + 0xe5, 0x00, 0x00, 0x80, 0x04, 0xd0, 0x02, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xd1, + 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, + 0x04, 0x1a, 0x01, 0x00, 0x00, 0x4d, 0xe8, 0x00, + 0x00, 0x80, 0x04, 0xd2, 0x02, 0x00, 0x00, 0x4d, + 0xe9, 0x00, 0x00, 0x80, 0x04, 0xd3, 0x02, 0x00, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0x08, + 0x01, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, + 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, + 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, + 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, + 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, + 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, + 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, + 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, + 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, + 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, + 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, + 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, + 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, + 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, 0x01, 0x00, + 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x04, 0xff, + 0x01, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, + 0x04, 0x01, 0x02, 0x00, 0x00, 0x04, 0x02, 0x02, + 0x00, 0x00, 0x04, 0x03, 0x02, 0x00, 0x00, 0x04, + 0x04, 0x02, 0x00, 0x00, 0x04, 0x05, 0x02, 0x00, + 0x00, 0x04, 0x06, 0x02, 0x00, 0x00, 0x04, 0x07, + 0x02, 0x00, 0x00, 0x04, 0x08, 0x02, 0x00, 0x00, + 0x04, 0x09, 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, + 0x04, 0x0a, 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, + 0x00, 0x80, 0x04, 0x0b, 0x02, 0x00, 0x00, 0x4d, + 0x21, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, 0x00, + 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0x0d, + 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, + 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, + 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, 0x4d, + 0x25, 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, 0x00, + 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0x11, + 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, + 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, + 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, 0x4d, + 0x29, 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, 0x00, + 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x15, + 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, + 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, + 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, 0x4d, + 0x2d, 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, 0x00, + 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x19, + 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, + 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, + 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, + 0x31, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, + 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x1d, + 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, + 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, + 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, + 0x35, 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, + 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x21, + 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, + 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, + 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, + 0x39, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, + 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x25, + 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, + 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, + 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, + 0x3d, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, + 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x29, + 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, + 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, + 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, + 0x41, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, + 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x2d, + 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, + 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, + 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, + 0x45, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, + 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x31, + 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, + 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, + 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, + 0x49, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, + 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x35, + 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, + 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, + 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, + 0x4d, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, + 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x39, + 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, + 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, + 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, + 0x51, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, + 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x3d, + 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, + 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, + 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, + 0x55, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, + 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x41, + 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, + 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, + 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, + 0x59, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, + 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x45, + 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, + 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, + 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, + 0x5d, 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, + 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x49, + 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, + 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, + 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, + 0x61, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, + 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x4d, + 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, + 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, + 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, + 0x65, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, + 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x51, + 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, + 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, + 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, + 0x69, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, + 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x55, + 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, + 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, + 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, + 0x6d, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, + 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x59, + 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, + 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, + 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, + 0x71, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, + 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x5d, + 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, + 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, + 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, + 0x75, 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, + 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x61, + 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, + 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, + 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, + 0x79, 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, + 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x65, + 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, + 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, + 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, + 0x7d, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, + 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x69, + 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, + 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, + 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, + 0x81, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, + 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x6d, + 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, + 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, + 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, + 0x85, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, + 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x71, + 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, + 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, + 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, + 0x89, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, + 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x75, + 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, + 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, + 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, + 0x8d, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, + 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x79, + 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, + 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, + 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, + 0x91, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, + 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x7d, + 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, + 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, + 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, + 0x95, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, + 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x81, + 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, + 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, + 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, + 0x99, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, + 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x85, + 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, + 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, + 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, + 0x9d, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, + 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x89, + 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, + 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, + 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, + 0xa1, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, + 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x8d, + 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, + 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, + 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, + 0xa5, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, + 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x91, + 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, + 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, + 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, + 0xa9, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, + 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x95, + 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, + 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, + 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, + 0xad, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, + 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x99, + 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, + 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, + 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, + 0xb1, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, + 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0x9d, + 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, + 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, + 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, + 0xb5, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, + 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0xa1, + 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, + 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, + 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, + 0xb9, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, + 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0xa5, + 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, + 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, + 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, + 0xbd, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, + 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0xa9, + 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, + 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, + 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, + 0xc1, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, + 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0xad, + 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, + 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, + 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, + 0xc5, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, + 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0xb1, + 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, + 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, + 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, + 0xc9, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, + 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xb5, + 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, + 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, + 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, + 0xcd, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, + 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xb9, + 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, + 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, + 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, + 0xd1, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, + 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xbd, + 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, + 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, + 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, + 0xd5, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xc1, + 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, + 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xc5, + 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, + 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xc9, + 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, + 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xcd, + 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, + 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, + 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, 0x4d, + 0xe5, 0x00, 0x00, 0x80, 0x04, 0xd0, 0x02, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xd1, + 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, + 0x04, 0xd4, 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x00, + 0x00, 0x80, 0x04, 0xd5, 0x02, 0x00, 0x00, 0x4d, + 0xe9, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x02, 0x00, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0xd7, + 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xea, 0x01, + 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, + 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, + 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, + 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, + 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, + 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, + 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, + 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, + 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, + 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, + 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, + 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, 0x01, 0x00, + 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x04, 0xff, + 0x01, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, + 0x04, 0x01, 0x02, 0x00, 0x00, 0x04, 0x02, 0x02, + 0x00, 0x00, 0x04, 0x03, 0x02, 0x00, 0x00, 0x04, + 0x04, 0x02, 0x00, 0x00, 0x04, 0x05, 0x02, 0x00, + 0x00, 0x04, 0x06, 0x02, 0x00, 0x00, 0x04, 0x07, + 0x02, 0x00, 0x00, 0x04, 0x08, 0x02, 0x00, 0x00, + 0x04, 0x09, 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, + 0x04, 0x0a, 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, + 0x00, 0x80, 0x04, 0x0b, 0x02, 0x00, 0x00, 0x4d, + 0x21, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, 0x00, + 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0x0d, + 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, + 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, + 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, 0x4d, + 0x25, 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, 0x00, + 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0x11, + 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, + 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, + 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, 0x4d, + 0x29, 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, 0x00, + 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x15, + 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, + 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, + 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, 0x4d, + 0x2d, 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, 0x00, + 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x19, + 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, + 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, + 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, + 0x31, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, + 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x1d, + 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, + 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, + 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, + 0x35, 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, + 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x21, + 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, + 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, + 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, + 0x39, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, + 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x25, + 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, + 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, + 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, + 0x3d, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, + 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x29, + 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, + 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, + 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, + 0x41, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, + 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x2d, + 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, + 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, + 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, + 0x45, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, + 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x31, + 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, + 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, + 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, + 0x49, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, + 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x35, + 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, + 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, + 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, + 0x4d, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, + 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x39, + 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, + 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, + 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, + 0x51, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, + 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x3d, + 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, + 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, + 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, + 0x55, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, + 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x41, + 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, + 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, + 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, + 0x59, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, + 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x45, + 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, + 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, + 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, + 0x5d, 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, + 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x49, + 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, + 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, + 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, + 0x61, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, + 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x4d, + 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, + 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, + 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, + 0x65, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, + 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x51, + 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, + 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, + 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, + 0x69, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, + 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x55, + 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, + 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, + 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, + 0x6d, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, + 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x59, + 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, + 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, + 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, + 0x71, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, + 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x5d, + 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, + 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, + 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, + 0x75, 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, + 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x61, + 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, + 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, + 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, + 0x79, 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, + 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x65, + 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, + 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, + 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, + 0x7d, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, + 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x69, + 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, + 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, + 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, + 0x81, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, + 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x6d, + 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, + 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, + 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, + 0x85, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, + 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x71, + 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, + 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, + 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, + 0x89, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, + 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x75, + 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, + 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, + 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, + 0x8d, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, + 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x79, + 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, + 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, + 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, + 0x91, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, + 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x7d, + 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, + 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, + 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, + 0x95, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, + 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x81, + 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, + 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, + 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, + 0x99, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, + 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x85, + 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, + 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, + 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, + 0x9d, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, + 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x89, + 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, + 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, + 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, + 0xa1, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, + 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x8d, + 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, + 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, + 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, + 0xa5, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, + 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x91, + 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, + 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, + 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, + 0xa9, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, + 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x95, + 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, + 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, + 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, + 0xad, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, + 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x99, + 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, + 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, + 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, + 0xb1, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, + 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0x9d, + 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, + 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, + 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, + 0xb5, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, + 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0xa1, + 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, + 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, + 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, + 0xb9, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, + 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0xa5, + 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, + 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, + 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, + 0xbd, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, + 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0xa9, + 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, + 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, + 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, + 0xc1, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, + 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0xad, + 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, + 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, + 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, + 0xc5, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, + 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0xb1, + 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, + 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, + 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, + 0xc9, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, + 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xb5, + 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, + 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, + 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, + 0xcd, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, + 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xb9, + 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, + 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, + 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, + 0xd1, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, + 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xbd, + 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, + 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, + 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, + 0xd5, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xc1, + 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, + 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xc5, + 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, + 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xc9, + 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, + 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xcd, + 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, + 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, + 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, 0x4d, + 0xe5, 0x00, 0x00, 0x80, 0x04, 0xd0, 0x02, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xd1, + 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, + 0x04, 0xd4, 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x00, + 0x00, 0x80, 0x04, 0xd5, 0x02, 0x00, 0x00, 0x4d, + 0xe9, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x02, 0x00, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0xd7, + 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7f, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x4d, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, + 0x00, 0x00, 0x4d, 0x83, 0x01, 0x00, 0x00, 0x4d, + 0x84, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x7d, 0xbe, 0x7e, 0xbe, + 0x7f, 0xbe, 0x80, 0xbe, 0x81, 0xbe, 0x82, 0xbe, + 0x83, 0xbe, 0x84, 0xbe, 0x85, 0xbe, 0x86, 0xbe, + 0x87, 0xbe, 0x88, 0x26, 0x0c, 0x00, 0x4d, 0x56, + 0x01, 0x00, 0x00, 0x04, 0xd8, 0x02, 0x00, 0x00, + 0x04, 0xd9, 0x02, 0x00, 0x00, 0x04, 0xda, 0x02, + 0x00, 0x00, 0x04, 0xdb, 0x02, 0x00, 0x00, 0x04, + 0xdc, 0x02, 0x00, 0x00, 0x04, 0xdd, 0x02, 0x00, + 0x00, 0x04, 0xde, 0x02, 0x00, 0x00, 0x04, 0xdf, + 0x02, 0x00, 0x00, 0x04, 0xe0, 0x02, 0x00, 0x00, + 0x04, 0xe1, 0x02, 0x00, 0x00, 0x04, 0xe2, 0x02, + 0x00, 0x00, 0x04, 0xe3, 0x02, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xd8, 0x02, 0x00, 0x00, 0x04, 0xd9, 0x02, 0x00, + 0x00, 0x04, 0xda, 0x02, 0x00, 0x00, 0x04, 0xdb, + 0x02, 0x00, 0x00, 0x04, 0xdc, 0x02, 0x00, 0x00, + 0x04, 0xdd, 0x02, 0x00, 0x00, 0x04, 0xde, 0x02, + 0x00, 0x00, 0x04, 0xdf, 0x02, 0x00, 0x00, 0x04, + 0xe0, 0x02, 0x00, 0x00, 0x04, 0xe1, 0x02, 0x00, + 0x00, 0x04, 0xe2, 0x02, 0x00, 0x00, 0x04, 0xe3, + 0x02, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xe4, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0xe4, 0x02, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xe4, 0x02, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x7f, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x04, + 0x82, 0x01, 0x00, 0x00, 0x4d, 0x83, 0x01, 0x00, + 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xe5, + 0x02, 0x00, 0x00, 0x04, 0xe6, 0x02, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0xe5, 0x02, 0x00, 0x00, 0x04, 0xe6, 0x02, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xe5, 0x02, 0x00, 0x00, 0x04, + 0xe6, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x80, 0x01, 0x00, 0x00, 0x4d, + 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, + 0x00, 0x4d, 0x83, 0x01, 0x00, 0x00, 0x4d, 0x84, + 0x01, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, + 0x4d, 0xe7, 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x02, + 0x00, 0x00, 0x0b, 0x04, 0xe9, 0x02, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xea, 0x02, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0xeb, 0x02, 0x00, 0x00, 0x4d, + 0xec, 0x02, 0x00, 0x00, 0x04, 0xed, 0x02, 0x00, + 0x00, 0x4d, 0xee, 0x02, 0x00, 0x00, 0x4d, 0xef, + 0x02, 0x00, 0x00, 0x0b, 0x04, 0xf0, 0x02, 0x00, + 0x00, 0x4d, 0xec, 0x02, 0x00, 0x00, 0x04, 0xf1, + 0x02, 0x00, 0x00, 0x4d, 0xee, 0x02, 0x00, 0x00, + 0x4d, 0xf2, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xf3, + 0x02, 0x00, 0x00, 0x4d, 0xec, 0x02, 0x00, 0x00, + 0x04, 0xf4, 0x02, 0x00, 0x00, 0x4d, 0xee, 0x02, + 0x00, 0x00, 0x4d, 0xf5, 0x02, 0x00, 0x00, 0x4d, + 0xf6, 0x02, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xf7, + 0x02, 0x00, 0x00, 0x4d, 0xef, 0x02, 0x00, 0x00, + 0x04, 0xf8, 0x02, 0x00, 0x00, 0x4d, 0xf9, 0x02, + 0x00, 0x00, 0x04, 0xfa, 0x02, 0x00, 0x00, 0x4d, + 0xfb, 0x02, 0x00, 0x00, 0x04, 0xfc, 0x02, 0x00, + 0x00, 0x4d, 0xfd, 0x02, 0x00, 0x00, 0x04, 0xfe, + 0x02, 0x00, 0x00, 0x4d, 0xff, 0x02, 0x00, 0x00, + 0x04, 0x00, 0x03, 0x00, 0x00, 0x4d, 0x01, 0x03, + 0x00, 0x00, 0x04, 0x02, 0x03, 0x00, 0x00, 0x4d, + 0x03, 0x03, 0x00, 0x00, 0x4d, 0xe9, 0x02, 0x00, + 0x00, 0x4d, 0x04, 0x03, 0x00, 0x00, 0x0b, 0x04, + 0x05, 0x03, 0x00, 0x00, 0x4d, 0x06, 0x03, 0x00, + 0x00, 0x04, 0x07, 0x03, 0x00, 0x00, 0x4d, 0x08, + 0x03, 0x00, 0x00, 0x04, 0x09, 0x03, 0x00, 0x00, + 0x4d, 0x0a, 0x03, 0x00, 0x00, 0x04, 0x0b, 0x03, + 0x00, 0x00, 0x4d, 0x0c, 0x03, 0x00, 0x00, 0x04, + 0x0d, 0x03, 0x00, 0x00, 0x4d, 0x0e, 0x03, 0x00, + 0x00, 0x04, 0x0f, 0x03, 0x00, 0x00, 0x4d, 0x10, + 0x03, 0x00, 0x00, 0x4d, 0x11, 0x03, 0x00, 0x00, + 0x4d, 0x45, 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, + 0xcc, 0x28, 0xa4, 0x0c, 0x01, 0x00, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, + 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_bn_size = 25269; + +const uint8_t intl_bn[25269] = { + 0x01, 0xe7, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x62, 0x6e, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x0e, + 0x7b, 0x31, 0x7d, 0x20, 0x7b, 0x30, 0x7d, 0x0a, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, 0x65, + 0x64, 0x69, 0x75, 0x6d, 0x08, 0x66, 0x75, 0x6c, + 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x02, 0x64, + 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, 0x06, 0x64, + 0x20, 0x45, 0x04, 0x45, 0x64, 0x10, 0x45, 0x20, + 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x06, 0x45, + 0x68, 0x6d, 0x0e, 0x45, 0x20, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x06, 0x45, 0x48, 0x6d, 0x16, 0x45, + 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x61, 0x08, 0x45, 0x68, 0x6d, 0x73, 0x14, + 0x45, 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x08, 0x45, 0x48, 0x6d, 0x73, 0x06, + 0x79, 0x20, 0x47, 0x04, 0x47, 0x79, 0x0e, 0x4d, + 0x4d, 0x4d, 0x20, 0x79, 0x20, 0x47, 0x0a, 0x47, + 0x79, 0x4d, 0x4d, 0x4d, 0x14, 0x64, 0x20, 0x4d, + 0x4d, 0x4d, 0x2c, 0x20, 0x79, 0x20, 0x47, 0x0c, + 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x1a, 0x45, + 0x2c, 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x2c, + 0x20, 0x79, 0x20, 0x47, 0x0e, 0x47, 0x79, 0x4d, + 0x4d, 0x4d, 0x45, 0x64, 0x06, 0x68, 0x20, 0x61, + 0x02, 0x68, 0x04, 0x48, 0x48, 0x02, 0x48, 0x0c, + 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x04, 0x68, + 0x6d, 0x0a, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x04, + 0x48, 0x6d, 0x12, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x20, 0x61, 0x06, 0x68, 0x6d, 0x73, + 0x10, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x06, 0x48, 0x6d, 0x73, 0x16, 0x68, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x20, + 0x76, 0x08, 0x68, 0x6d, 0x73, 0x76, 0x14, 0x48, + 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, + 0x76, 0x08, 0x48, 0x6d, 0x73, 0x76, 0x10, 0x68, + 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x20, 0x76, 0x06, + 0x68, 0x6d, 0x76, 0x0e, 0x48, 0x48, 0x3a, 0x6d, + 0x6d, 0x20, 0x76, 0x06, 0x48, 0x6d, 0x76, 0x02, + 0x4c, 0x02, 0x4d, 0x06, 0x64, 0x2f, 0x4d, 0x04, + 0x4d, 0x64, 0x0c, 0x45, 0x2c, 0x20, 0x64, 0x2d, + 0x4d, 0x06, 0x4d, 0x45, 0x64, 0x0a, 0x64, 0x64, + 0x2d, 0x4d, 0x4d, 0x08, 0x4d, 0x4d, 0x64, 0x64, + 0x06, 0x4c, 0x4c, 0x4c, 0x06, 0x4d, 0x4d, 0x4d, + 0x0a, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x08, 0x4d, + 0x4d, 0x4d, 0x64, 0x0e, 0x45, 0x20, 0x64, 0x20, + 0x4d, 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x45, + 0x64, 0x0c, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, + 0x0a, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x10, 0x45, + 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x0c, + 0x4d, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x04, 0x6d, 0x73, 0x02, + 0x79, 0x06, 0x4d, 0x2f, 0x79, 0x04, 0x79, 0x4d, + 0x0a, 0x64, 0x2f, 0x4d, 0x2f, 0x79, 0x06, 0x79, + 0x4d, 0x64, 0x10, 0x45, 0x2c, 0x20, 0x64, 0x2f, + 0x4d, 0x2f, 0x79, 0x08, 0x79, 0x4d, 0x45, 0x64, + 0x08, 0x4d, 0x4d, 0x2d, 0x79, 0x06, 0x79, 0x4d, + 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x08, + 0x79, 0x4d, 0x4d, 0x4d, 0x10, 0x64, 0x20, 0x4d, + 0x4d, 0x4d, 0x2c, 0x20, 0x79, 0x0a, 0x79, 0x4d, + 0x4d, 0x4d, 0x64, 0x16, 0x45, 0x2c, 0x20, 0x64, + 0x20, 0x4d, 0x4d, 0x4d, 0x2c, 0x20, 0x79, 0x0c, + 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0c, 0x4d, + 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0a, 0x79, 0x4d, + 0x4d, 0x4d, 0x4d, 0x0a, 0x51, 0x51, 0x51, 0x20, + 0x79, 0x08, 0x79, 0x51, 0x51, 0x51, 0x0c, 0x51, + 0x51, 0x51, 0x51, 0x20, 0x79, 0x0a, 0x79, 0x51, + 0x51, 0x51, 0x51, 0x20, 0x61, 0x76, 0x61, 0x69, + 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x73, 0x1e, 0x45, 0x45, 0x45, + 0x45, 0x2c, 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, + 0x4d, 0x2c, 0x20, 0x79, 0x14, 0x79, 0x4d, 0x4d, + 0x4d, 0x4d, 0x45, 0x45, 0x45, 0x45, 0x64, 0x12, + 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x2c, 0x20, + 0x79, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, + 0x0c, 0x64, 0x2f, 0x4d, 0x2f, 0x79, 0x79, 0x16, + 0x64, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x73, 0x1c, 0x68, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x61, 0x20, 0x7a, 0x7a, + 0x7a, 0x7a, 0x12, 0x68, 0x6d, 0x6d, 0x73, 0x73, + 0x7a, 0x7a, 0x7a, 0x7a, 0x16, 0x68, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x20, 0x7a, + 0x08, 0x68, 0x6d, 0x73, 0x7a, 0x16, 0x74, 0x69, + 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x73, 0x0e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x73, 0x05, 0x9c, 0x09, 0xbe, 0x09, 0x05, 0xab, + 0x09, 0xc7, 0x09, 0x05, 0xae, 0x09, 0xbe, 0x09, + 0x03, 0x8f, 0x09, 0x05, 0xae, 0x09, 0xc7, 0x09, + 0x07, 0x9c, 0x09, 0xc1, 0x09, 0xa8, 0x09, 0x05, + 0x9c, 0x09, 0xc1, 0x09, 0x03, 0x86, 0x09, 0x05, + 0xb8, 0x09, 0xc7, 0x09, 0x03, 0x85, 0x09, 0x03, + 0xa8, 0x09, 0x05, 0xa1, 0x09, 0xbf, 0x09, 0x0c, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x13, 0x9c, + 0x09, 0xbe, 0x09, 0xa8, 0x09, 0xc1, 0x09, 0xaf, + 0x09, 0xbc, 0x09, 0xbe, 0x09, 0xb0, 0x09, 0xc0, + 0x09, 0x17, 0xab, 0x09, 0xc7, 0x09, 0xac, 0x09, + 0xcd, 0x09, 0xb0, 0x09, 0xc1, 0x09, 0xaf, 0x09, + 0xbc, 0x09, 0xbe, 0x09, 0xb0, 0x09, 0xc0, 0x09, + 0x0b, 0xae, 0x09, 0xbe, 0x09, 0xb0, 0x09, 0xcd, + 0x09, 0x9a, 0x09, 0x0d, 0x8f, 0x09, 0xaa, 0x09, + 0xcd, 0x09, 0xb0, 0x09, 0xbf, 0x09, 0xb2, 0x09, + 0x0b, 0x9c, 0x09, 0xc1, 0x09, 0xb2, 0x09, 0xbe, + 0x09, 0x87, 0x09, 0x0b, 0x86, 0x09, 0x97, 0x09, + 0xb8, 0x09, 0xcd, 0x09, 0x9f, 0x09, 0x15, 0xb8, + 0x09, 0xc7, 0x09, 0xaa, 0x09, 0xcd, 0x09, 0x9f, + 0x09, 0xc7, 0x09, 0xae, 0x09, 0xcd, 0x09, 0xac, + 0x09, 0xb0, 0x09, 0x0f, 0x85, 0x09, 0x95, 0x09, + 0xcd, 0x09, 0x9f, 0x09, 0xcb, 0x09, 0xac, 0x09, + 0xb0, 0x09, 0x0f, 0xa8, 0x09, 0xad, 0x09, 0xc7, + 0x09, 0xae, 0x09, 0xcd, 0x09, 0xac, 0x09, 0xb0, + 0x09, 0x11, 0xa1, 0x09, 0xbf, 0x09, 0xb8, 0x09, + 0xc7, 0x09, 0xae, 0x09, 0xcd, 0x09, 0xac, 0x09, + 0xb0, 0x09, 0x0c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, + 0x73, 0x03, 0xb0, 0x09, 0x05, 0xb8, 0x09, 0xcb, + 0x09, 0x03, 0xae, 0x09, 0x05, 0xac, 0x09, 0xc1, + 0x09, 0x05, 0xac, 0x09, 0xc3, 0x09, 0x05, 0xb6, + 0x09, 0xc1, 0x09, 0x03, 0xb6, 0x09, 0x07, 0xb0, + 0x09, 0xac, 0x09, 0xbf, 0x09, 0x07, 0xb8, 0x09, + 0xcb, 0x09, 0xae, 0x09, 0x0b, 0xae, 0x09, 0x99, + 0x09, 0xcd, 0x09, 0x97, 0x09, 0xb2, 0x09, 0x07, + 0xac, 0x09, 0xc1, 0x09, 0xa7, 0x09, 0x11, 0xac, + 0x09, 0xc3, 0x09, 0xb9, 0x09, 0xb8, 0x09, 0xcd, + 0x09, 0xaa, 0x09, 0xa4, 0x09, 0xbf, 0x09, 0x0b, + 0xb6, 0x09, 0xc1, 0x09, 0x95, 0x09, 0xcd, 0x09, + 0xb0, 0x09, 0x07, 0xb6, 0x09, 0xa8, 0x09, 0xbf, + 0x09, 0x0d, 0xb0, 0x09, 0xac, 0x09, 0xbf, 0x09, + 0xac, 0x09, 0xbe, 0x09, 0xb0, 0x09, 0x0d, 0xb8, + 0x09, 0xcb, 0x09, 0xae, 0x09, 0xac, 0x09, 0xbe, + 0x09, 0xb0, 0x09, 0x11, 0xae, 0x09, 0x99, 0x09, + 0xcd, 0x09, 0x97, 0x09, 0xb2, 0x09, 0xac, 0x09, + 0xbe, 0x09, 0xb0, 0x09, 0x0d, 0xac, 0x09, 0xc1, + 0x09, 0xa7, 0x09, 0xac, 0x09, 0xbe, 0x09, 0xb0, + 0x09, 0x17, 0xac, 0x09, 0xc3, 0x09, 0xb9, 0x09, + 0xb8, 0x09, 0xcd, 0x09, 0xaa, 0x09, 0xa4, 0x09, + 0xbf, 0x09, 0xac, 0x09, 0xbe, 0x09, 0xb0, 0x09, + 0x11, 0xb6, 0x09, 0xc1, 0x09, 0x95, 0x09, 0xcd, + 0x09, 0xb0, 0x09, 0xac, 0x09, 0xbe, 0x09, 0xb0, + 0x09, 0x0d, 0xb6, 0x09, 0xa8, 0x09, 0xbf, 0x09, + 0xac, 0x09, 0xbe, 0x09, 0xb0, 0x09, 0x08, 0x64, + 0x61, 0x79, 0x73, 0x04, 0x42, 0x45, 0x08, 0x65, + 0x72, 0x61, 0x73, 0x04, 0x41, 0x4d, 0x04, 0x61, + 0x6d, 0x0f, 0x85, 0x09, 0xaa, 0x09, 0xb0, 0x09, + 0xbe, 0x09, 0xb9, 0x09, 0xcd, 0x09, 0xa3, 0x09, + 0x04, 0x70, 0x6d, 0x14, 0x64, 0x61, 0x79, 0x50, + 0x65, 0x72, 0x69, 0x6f, 0x64, 0x73, 0x06, 0x4d, + 0x30, 0x31, 0x06, 0x4d, 0x30, 0x32, 0x06, 0x4d, + 0x30, 0x33, 0x06, 0x4d, 0x30, 0x34, 0x06, 0x4d, + 0x30, 0x35, 0x06, 0x4d, 0x30, 0x36, 0x06, 0x4d, + 0x30, 0x37, 0x06, 0x4d, 0x30, 0x38, 0x06, 0x4d, + 0x30, 0x39, 0x06, 0x4d, 0x31, 0x30, 0x06, 0x4d, + 0x31, 0x31, 0x06, 0x4d, 0x31, 0x32, 0x08, 0x54, + 0x6f, 0x75, 0x74, 0x08, 0x42, 0x61, 0x62, 0x61, + 0x0a, 0x48, 0x61, 0x74, 0x6f, 0x72, 0x0a, 0x4b, + 0x69, 0x61, 0x68, 0x6b, 0x08, 0x54, 0x6f, 0x62, + 0x61, 0x0c, 0x41, 0x6d, 0x73, 0x68, 0x69, 0x72, + 0x10, 0x42, 0x61, 0x72, 0x61, 0x6d, 0x68, 0x61, + 0x74, 0x12, 0x42, 0x61, 0x72, 0x61, 0x6d, 0x6f, + 0x75, 0x64, 0x61, 0x0e, 0x42, 0x61, 0x73, 0x68, + 0x61, 0x6e, 0x73, 0x0a, 0x50, 0x61, 0x6f, 0x6e, + 0x61, 0x08, 0x45, 0x70, 0x65, 0x70, 0x0a, 0x4d, + 0x65, 0x73, 0x72, 0x61, 0x0a, 0x4e, 0x61, 0x73, + 0x69, 0x65, 0x08, 0x45, 0x52, 0x41, 0x30, 0x08, + 0x45, 0x52, 0x41, 0x31, 0x10, 0x4d, 0x65, 0x73, + 0x6b, 0x65, 0x72, 0x65, 0x6d, 0x0c, 0x54, 0x65, + 0x6b, 0x65, 0x6d, 0x74, 0x0a, 0x48, 0x65, 0x64, + 0x61, 0x72, 0x0c, 0x54, 0x61, 0x68, 0x73, 0x61, + 0x73, 0x06, 0x54, 0x65, 0x72, 0x0e, 0x59, 0x65, + 0x6b, 0x61, 0x74, 0x69, 0x74, 0x0e, 0x4d, 0x65, + 0x67, 0x61, 0x62, 0x69, 0x74, 0x0c, 0x4d, 0x69, + 0x61, 0x7a, 0x69, 0x61, 0x0c, 0x47, 0x65, 0x6e, + 0x62, 0x6f, 0x74, 0x08, 0x53, 0x65, 0x6e, 0x65, + 0x0a, 0x48, 0x61, 0x6d, 0x6c, 0x65, 0x0e, 0x4e, + 0x65, 0x68, 0x61, 0x73, 0x73, 0x65, 0x0e, 0x50, + 0x61, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x19, 0x96, + 0x09, 0xcd, 0x09, 0xb0, 0x09, 0xbf, 0x09, 0xb8, + 0x09, 0xcd, 0x09, 0x9f, 0x09, 0xaa, 0x09, 0xc2, + 0x09, 0xb0, 0x09, 0xcd, 0x09, 0xac, 0x09, 0x13, + 0x96, 0x09, 0xc3, 0x09, 0xb7, 0x09, 0xcd, 0x09, + 0x9f, 0x09, 0xbe, 0x09, 0xac, 0x09, 0xcd, 0x09, + 0xa6, 0x09, 0x21, 0x96, 0x09, 0xcd, 0x09, 0xb0, + 0x09, 0xbf, 0x09, 0xb7, 0x09, 0xcd, 0x09, 0x9f, + 0x09, 0xaa, 0x09, 0xc2, 0x09, 0xb0, 0x09, 0xcd, + 0x09, 0xac, 0x09, 0xbe, 0x09, 0xac, 0x09, 0xcd, + 0x09, 0xa6, 0x09, 0x17, 0x96, 0x09, 0xcd, 0x09, + 0xb0, 0x09, 0xbf, 0x09, 0xb7, 0x09, 0xcd, 0x09, + 0x9f, 0x09, 0xbe, 0x09, 0xac, 0x09, 0xcd, 0x09, + 0xa6, 0x09, 0x0c, 0x54, 0x69, 0x73, 0x68, 0x72, + 0x69, 0x0e, 0x48, 0x65, 0x73, 0x68, 0x76, 0x61, + 0x6e, 0x0c, 0x4b, 0x69, 0x73, 0x6c, 0x65, 0x76, + 0x0a, 0x54, 0x65, 0x76, 0x65, 0x74, 0x0c, 0x53, + 0x68, 0x65, 0x76, 0x61, 0x74, 0x0c, 0x41, 0x64, + 0x61, 0x72, 0x20, 0x49, 0x08, 0x41, 0x64, 0x61, + 0x72, 0x0a, 0x4e, 0x69, 0x73, 0x61, 0x6e, 0x08, + 0x49, 0x79, 0x61, 0x72, 0x0a, 0x53, 0x69, 0x76, + 0x61, 0x6e, 0x0a, 0x54, 0x61, 0x6d, 0x75, 0x7a, + 0x04, 0x41, 0x76, 0x08, 0x45, 0x6c, 0x75, 0x6c, + 0x0e, 0x41, 0x64, 0x61, 0x72, 0x20, 0x49, 0x49, + 0x03, 0xe7, 0x09, 0x03, 0xe8, 0x09, 0x03, 0xe9, + 0x09, 0x03, 0xea, 0x09, 0x03, 0xeb, 0x09, 0x03, + 0xec, 0x09, 0x03, 0xed, 0x09, 0x03, 0xee, 0x09, + 0x03, 0xef, 0x09, 0x05, 0xe7, 0x09, 0xe6, 0x09, + 0x05, 0xe7, 0x09, 0xe7, 0x09, 0x05, 0xe7, 0x09, + 0xe8, 0x09, 0x0b, 0x9a, 0x09, 0xc8, 0x09, 0xa4, + 0x09, 0xcd, 0x09, 0xb0, 0x09, 0x0b, 0xac, 0x09, + 0xc8, 0x09, 0xb6, 0x09, 0xbe, 0x09, 0x96, 0x09, + 0x0f, 0x9c, 0x09, 0xc8, 0x09, 0xb7, 0x09, 0xcd, + 0x09, 0xa0, 0x09, 0xcd, 0x09, 0xaf, 0x09, 0x0b, + 0x86, 0x09, 0xb7, 0x09, 0xbe, 0x09, 0xa2, 0x09, + 0xbc, 0x09, 0x0d, 0xb6, 0x09, 0xcd, 0x09, 0xb0, + 0x09, 0xbe, 0x09, 0xac, 0x09, 0xa3, 0x09, 0x0b, + 0xad, 0x09, 0xbe, 0x09, 0xa6, 0x09, 0xcd, 0x09, + 0xb0, 0x09, 0x0d, 0x86, 0x09, 0xb6, 0x09, 0xcd, + 0x09, 0xac, 0x09, 0xbf, 0x09, 0xa8, 0x09, 0x0f, + 0x95, 0x09, 0xbe, 0x09, 0xb0, 0x09, 0xcd, 0x09, + 0xa4, 0x09, 0xbf, 0x09, 0x95, 0x09, 0x13, 0x85, + 0x09, 0x97, 0x09, 0xcd, 0x09, 0xb0, 0x09, 0xb9, + 0x09, 0xbe, 0x09, 0xaf, 0x09, 0xbc, 0x09, 0xa3, + 0x09, 0x07, 0xaa, 0x09, 0xcc, 0x09, 0xb7, 0x09, + 0x07, 0xae, 0x09, 0xbe, 0x09, 0x98, 0x09, 0x0f, + 0xab, 0x09, 0xbe, 0x09, 0xb2, 0x09, 0xcd, 0x09, + 0x97, 0x09, 0xc1, 0x09, 0xa8, 0x09, 0x07, 0xb8, + 0x09, 0xbe, 0x09, 0xb2, 0x09, 0x08, 0x4d, 0x75, + 0x68, 0x2e, 0x08, 0x53, 0x61, 0x66, 0x2e, 0x0c, + 0x52, 0x61, 0x62, 0x2e, 0x20, 0x49, 0x0e, 0x52, + 0x61, 0x62, 0x2e, 0x20, 0x49, 0x49, 0x0c, 0x4a, + 0x75, 0x6d, 0x2e, 0x20, 0x49, 0x0e, 0x4a, 0x75, + 0x6d, 0x2e, 0x20, 0x49, 0x49, 0x08, 0x52, 0x61, + 0x6a, 0x2e, 0x08, 0x53, 0x68, 0x61, 0x2e, 0x08, + 0x52, 0x61, 0x6d, 0x2e, 0x0a, 0x53, 0x68, 0x61, + 0x77, 0x2e, 0x11, 0x44, 0x00, 0x68, 0x00, 0x75, + 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x51, + 0x00, 0x2e, 0x00, 0x11, 0x44, 0x00, 0x68, 0x00, + 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, + 0x48, 0x00, 0x2e, 0x00, 0x0b, 0xae, 0x09, 0xb9, + 0x09, 0xb0, 0x09, 0xb0, 0x09, 0xae, 0x09, 0x07, + 0xb8, 0x09, 0xab, 0x09, 0xb0, 0x09, 0x19, 0xb0, + 0x09, 0xac, 0x09, 0xbf, 0x09, 0x89, 0x09, 0xb2, + 0x09, 0x20, 0x00, 0x86, 0x09, 0x89, 0x09, 0xaf, + 0x09, 0xbc, 0x09, 0xbe, 0x09, 0xb2, 0x09, 0x15, + 0xb0, 0x09, 0xac, 0x09, 0xbf, 0x09, 0x89, 0x09, + 0xb8, 0x09, 0x20, 0x00, 0xb8, 0x09, 0xbe, 0x09, + 0xa8, 0x09, 0xbf, 0x09, 0x1d, 0x9c, 0x09, 0xae, + 0x09, 0xbe, 0x09, 0xa6, 0x09, 0xbf, 0x09, 0x89, + 0x09, 0xb2, 0x09, 0x20, 0x00, 0x86, 0x09, 0x89, + 0x09, 0xaf, 0x09, 0xbc, 0x09, 0xbe, 0x09, 0xb2, + 0x09, 0x19, 0x9c, 0x09, 0xae, 0x09, 0xbe, 0x09, + 0xa6, 0x09, 0xbf, 0x09, 0x89, 0x09, 0xb8, 0x09, + 0x20, 0x00, 0xb8, 0x09, 0xbe, 0x09, 0xa8, 0x09, + 0xbf, 0x09, 0x07, 0xb0, 0x09, 0x9c, 0x09, 0xac, + 0x09, 0x0d, 0xb6, 0x09, 0xbe, 0x09, 0x18, 0x20, + 0xac, 0x09, 0xbe, 0x09, 0xa8, 0x09, 0x0b, 0xb0, + 0x09, 0xae, 0x09, 0x9c, 0x09, 0xbe, 0x09, 0xa8, + 0x09, 0x0f, 0xb6, 0x09, 0xbe, 0x09, 0x93, 0x09, + 0xaf, 0x09, 0xbc, 0x09, 0xbe, 0x09, 0xb2, 0x09, + 0x0f, 0x9c, 0x09, 0xcd, 0x09, 0xac, 0x09, 0xbf, + 0x09, 0xb2, 0x09, 0x95, 0x09, 0xa6, 0x09, 0x13, + 0x9c, 0x09, 0xcd, 0x09, 0xac, 0x09, 0xbf, 0x09, + 0xb2, 0x09, 0xb9, 0x09, 0x9c, 0x09, 0xcd, 0x09, + 0x9c, 0x09, 0x07, 0xaf, 0x09, 0xc1, 0x09, 0x97, + 0x09, 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x36, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x36, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x36, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, + 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x1d, 0x57, 0x00, 0x61, 0x00, + 0x64, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x1f, 0x52, 0x00, 0x65, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, + 0x59, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x37, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x2d, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6d, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x2d, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x2b, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, 0x2d, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, 0x2a, 0x4a, + 0x69, 0x6e, 0x67, 0x6f, 0x2d, 0x6b, 0x65, 0x69, + 0x75, 0x6e, 0x20, 0x28, 0x37, 0x36, 0x37, 0x2d, + 0x37, 0x37, 0x30, 0x29, 0x1d, 0x48, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x38, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x1f, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x2d, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x2d, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x1f, 0x44, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1d, 0x4a, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, + 0x4b, 0x00, 0x61, 0x00, 0x6a, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1f, 0x53, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x20, 0x54, 0x65, 0x6e, 0x2d, 0x61, + 0x6e, 0x20, 0x28, 0x38, 0x35, 0x37, 0x2d, 0x38, + 0x35, 0x39, 0x29, 0x1f, 0x4a, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x21, 0x47, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x1f, 0x45, 0x00, 0x6e, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1b, 0x4c, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x1d, 0x41, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x1f, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, + 0x45, 0x00, 0x69, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, + 0x00, 0x73, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x39, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, + 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4d, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x35, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x27, 0x4a, 0x00, 0x69, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x29, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4c, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x4a, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, 0x24, 0x54, + 0x65, 0x6e, 0x2d, 0x65, 0x69, 0x20, 0x28, 0x31, + 0x31, 0x31, 0x30, 0x2d, 0x31, 0x31, 0x31, 0x33, + 0x29, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x44, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x48, 0x00, 0x65, 0x00, 0x69, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x27, 0x45, 0x00, 0x69, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x68, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, + 0x00, 0x61, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x41, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x69, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x59, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, + 0x4a, 0x00, 0x75, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x29, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x29, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, + 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x41, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x4d, + 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x27, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x75, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x29, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x29, 0x52, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x4e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x4c, 0x01, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6d, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x1f, 0x4b, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, + 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4c, + 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x74, 0x00, + 0x73, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x4d, 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x27, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x21, 0x4c, 0x01, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x21, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1f, + 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x72, 0x00, 0x65, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x62, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x27, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x48, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x65, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x41, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4d, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x02, 0x54, 0x02, 0x53, + 0x0a, 0x4d, 0x65, 0x69, 0x6a, 0x69, 0x0d, 0x54, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x0b, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x0c, 0x48, + 0x65, 0x69, 0x73, 0x65, 0x69, 0x12, 0x46, 0x61, + 0x72, 0x76, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x16, + 0x4f, 0x72, 0x64, 0x69, 0x62, 0x65, 0x68, 0x65, + 0x73, 0x68, 0x74, 0x0e, 0x4b, 0x68, 0x6f, 0x72, + 0x64, 0x61, 0x64, 0x06, 0x54, 0x69, 0x72, 0x0c, + 0x4d, 0x6f, 0x72, 0x64, 0x61, 0x64, 0x12, 0x53, + 0x68, 0x61, 0x68, 0x72, 0x69, 0x76, 0x61, 0x72, + 0x08, 0x4d, 0x65, 0x68, 0x72, 0x08, 0x41, 0x62, + 0x61, 0x6e, 0x08, 0x41, 0x7a, 0x61, 0x72, 0x06, + 0x44, 0x65, 0x79, 0x0c, 0x42, 0x61, 0x68, 0x6d, + 0x61, 0x6e, 0x0c, 0x45, 0x73, 0x66, 0x61, 0x6e, + 0x64, 0x04, 0x41, 0x50, 0x1a, 0x42, 0x65, 0x66, + 0x6f, 0x72, 0x65, 0x20, 0x52, 0x2e, 0x4f, 0x2e, + 0x43, 0x2e, 0x0c, 0x52, 0x2e, 0x4f, 0x2e, 0x43, + 0x2e, 0x12, 0x63, 0x61, 0x6c, 0x65, 0x6e, 0x64, + 0x61, 0x72, 0x73, 0x08, 0x64, 0x61, 0x74, 0x65, + 0x08, 0x62, 0x65, 0x6e, 0x67, 0x08, 0x6c, 0x61, + 0x74, 0x6e, 0x04, 0x6e, 0x75, 0x10, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x50, + 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x26, 0x7b, + 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0x1e, 0x6e, 0x65, 0x67, 0x61, 0x74, + 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, + 0x72, 0x6e, 0x0e, 0x64, 0x65, 0x63, 0x69, 0x6d, + 0x61, 0x6c, 0x24, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0x7b, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x63, 0x79, 0x7d, 0x3a, 0x7b, 0x6d, + 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x79, 0x7d, 0x10, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x63, 0x79, 0x2a, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x7b, 0x70, 0x65, + 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, + 0x6e, 0x7d, 0x40, 0x7b, 0x6d, 0x69, 0x6e, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x7b, 0x70, + 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, + 0x67, 0x6e, 0x7d, 0x0e, 0x70, 0x65, 0x72, 0x63, + 0x65, 0x6e, 0x74, 0x24, 0x73, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x61, 0x72, 0x79, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x53, 0x69, 0x7a, 0x65, 0x10, 0x70, + 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x02, + 0x2e, 0x02, 0x2c, 0x0a, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x13, 0xb8, 0x09, 0x82, 0x09, 0x96, 0x09, + 0xcd, 0x09, 0xaf, 0x09, 0xbe, 0x09, 0xa0, 0x00, + 0xa8, 0x09, 0xbe, 0x09, 0x06, 0x6e, 0x61, 0x6e, + 0x02, 0x2b, 0x10, 0x70, 0x6c, 0x75, 0x73, 0x53, + 0x69, 0x67, 0x6e, 0x02, 0x2d, 0x12, 0x6d, 0x69, + 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, + 0x25, 0x16, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, + 0x74, 0x53, 0x69, 0x67, 0x6e, 0x03, 0x1e, 0x22, + 0x10, 0x69, 0x6e, 0x66, 0x69, 0x6e, 0x69, 0x74, + 0x79, 0x06, 0x4e, 0x61, 0x4e, 0x0e, 0x73, 0x79, + 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x04, 0x41, 0x24, + 0x06, 0x41, 0x55, 0x44, 0x03, 0xf3, 0x09, 0x06, + 0x42, 0x44, 0x54, 0x04, 0x52, 0x24, 0x06, 0x42, + 0x52, 0x4c, 0x06, 0x43, 0x41, 0x24, 0x06, 0x43, + 0x41, 0x44, 0x06, 0x43, 0x4e, 0xa5, 0x06, 0x43, + 0x4e, 0x59, 0x03, 0xac, 0x20, 0x06, 0x45, 0x55, + 0x52, 0x02, 0xa3, 0x06, 0x47, 0x42, 0x50, 0x06, + 0x48, 0x4b, 0x24, 0x06, 0x48, 0x4b, 0x44, 0x03, + 0xaa, 0x20, 0x06, 0x49, 0x4c, 0x53, 0x03, 0xb9, + 0x20, 0x06, 0x49, 0x4e, 0x52, 0x06, 0x4a, 0x50, + 0xa5, 0x06, 0x4a, 0x50, 0x59, 0x03, 0xa9, 0x20, + 0x06, 0x4b, 0x52, 0x57, 0x06, 0x4d, 0x58, 0x24, + 0x06, 0x4d, 0x58, 0x4e, 0x06, 0x4e, 0x5a, 0x24, + 0x06, 0x4e, 0x5a, 0x44, 0x03, 0x3f, 0x0e, 0x06, + 0x54, 0x48, 0x42, 0x06, 0x4e, 0x54, 0x24, 0x06, + 0x54, 0x57, 0x44, 0x06, 0x55, 0x53, 0x24, 0x06, + 0x55, 0x53, 0x44, 0x03, 0xab, 0x20, 0x06, 0x56, + 0x4e, 0x44, 0x08, 0x46, 0x43, 0x46, 0x41, 0x06, + 0x58, 0x41, 0x46, 0x06, 0x45, 0x43, 0x24, 0x06, + 0x58, 0x43, 0x44, 0x06, 0x43, 0x46, 0x41, 0x06, + 0x58, 0x4f, 0x46, 0x08, 0x43, 0x46, 0x50, 0x46, + 0x06, 0x58, 0x50, 0x46, 0x14, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x52, + 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, + 0x6c, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, + 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x6a, 0x73, + 0x6f, 0x6e, 0x70, 0x2f, 0x62, 0x6e, 0x2e, 0x6a, + 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, + 0x01, 0x00, 0x27, 0x00, 0x65, 0xc9, 0x6c, 0x01, + 0xa0, 0x01, 0x00, 0x00, 0x00, 0x39, 0xd0, 0x00, + 0x00, 0x00, 0x43, 0xd1, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd2, 0x00, 0x00, 0x00, 0x4d, 0xd3, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd4, 0x00, 0x00, 0x00, + 0x04, 0xd5, 0x00, 0x00, 0x00, 0x04, 0xd6, 0x00, + 0x00, 0x00, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x04, + 0xd8, 0x00, 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, + 0x00, 0x04, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdb, + 0x00, 0x00, 0x00, 0x04, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0xdd, 0x00, 0x00, 0x00, 0x04, 0xde, 0x00, + 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, 0x04, + 0xe0, 0x00, 0x00, 0x00, 0x04, 0xe1, 0x00, 0x00, + 0x00, 0x04, 0xe2, 0x00, 0x00, 0x00, 0x26, 0x0f, + 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x0a, 0x4d, + 0xe4, 0x00, 0x00, 0x00, 0x0a, 0x4d, 0xe5, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, + 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x04, 0xec, + 0x00, 0x00, 0x00, 0x4d, 0xed, 0x00, 0x00, 0x00, + 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, 0xef, 0x00, + 0x00, 0x00, 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, + 0xf1, 0x00, 0x00, 0x00, 0x04, 0xf2, 0x00, 0x00, + 0x00, 0x4d, 0xf3, 0x00, 0x00, 0x00, 0x04, 0xf4, + 0x00, 0x00, 0x00, 0x4d, 0xf5, 0x00, 0x00, 0x00, + 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, 0xf7, 0x00, + 0x00, 0x00, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, + 0xf9, 0x00, 0x00, 0x00, 0x04, 0xfa, 0x00, 0x00, + 0x00, 0x4d, 0xfb, 0x00, 0x00, 0x00, 0x04, 0xfc, + 0x00, 0x00, 0x00, 0x4d, 0xfd, 0x00, 0x00, 0x00, + 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, 0xff, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, + 0x01, 0x01, 0x00, 0x00, 0x04, 0x02, 0x01, 0x00, + 0x00, 0x4d, 0x03, 0x01, 0x00, 0x00, 0x04, 0x04, + 0x01, 0x00, 0x00, 0x4d, 0x05, 0x01, 0x00, 0x00, + 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, 0x07, 0x01, + 0x00, 0x00, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, + 0x09, 0x01, 0x00, 0x00, 0x04, 0x0a, 0x01, 0x00, + 0x00, 0x4d, 0x0b, 0x01, 0x00, 0x00, 0x04, 0x0c, + 0x01, 0x00, 0x00, 0x4d, 0x0d, 0x01, 0x00, 0x00, + 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, 0x0f, 0x01, + 0x00, 0x00, 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, + 0x11, 0x01, 0x00, 0x00, 0x04, 0x12, 0x01, 0x00, + 0x00, 0x4d, 0x13, 0x01, 0x00, 0x00, 0x04, 0x14, + 0x01, 0x00, 0x00, 0x4d, 0x15, 0x01, 0x00, 0x00, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, 0x17, 0x01, + 0x00, 0x00, 0x04, 0x18, 0x01, 0x00, 0x00, 0x4d, + 0x19, 0x01, 0x00, 0x00, 0x04, 0x1a, 0x01, 0x00, + 0x00, 0x4d, 0x1b, 0x01, 0x00, 0x00, 0x04, 0x1c, + 0x01, 0x00, 0x00, 0x4d, 0x1d, 0x01, 0x00, 0x00, + 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, 0x1f, 0x01, + 0x00, 0x00, 0x04, 0x20, 0x01, 0x00, 0x00, 0x4d, + 0x21, 0x01, 0x00, 0x00, 0x04, 0x22, 0x01, 0x00, + 0x00, 0x4d, 0x23, 0x01, 0x00, 0x00, 0x04, 0x24, + 0x01, 0x00, 0x00, 0x4d, 0x25, 0x01, 0x00, 0x00, + 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, 0x27, 0x01, + 0x00, 0x00, 0x04, 0x28, 0x01, 0x00, 0x00, 0x4d, + 0x28, 0x01, 0x00, 0x00, 0x04, 0x29, 0x01, 0x00, + 0x00, 0x4d, 0x2a, 0x01, 0x00, 0x00, 0x04, 0x2b, + 0x01, 0x00, 0x00, 0x4d, 0x2c, 0x01, 0x00, 0x00, + 0x04, 0x2d, 0x01, 0x00, 0x00, 0x4d, 0x2e, 0x01, + 0x00, 0x00, 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, + 0x30, 0x01, 0x00, 0x00, 0x04, 0x31, 0x01, 0x00, + 0x00, 0x4d, 0x32, 0x01, 0x00, 0x00, 0x04, 0x33, + 0x01, 0x00, 0x00, 0x4d, 0x34, 0x01, 0x00, 0x00, + 0x04, 0x35, 0x01, 0x00, 0x00, 0x4d, 0x36, 0x01, + 0x00, 0x00, 0x04, 0x37, 0x01, 0x00, 0x00, 0x4d, + 0x38, 0x01, 0x00, 0x00, 0x04, 0x39, 0x01, 0x00, + 0x00, 0x4d, 0x3a, 0x01, 0x00, 0x00, 0x04, 0x3b, + 0x01, 0x00, 0x00, 0x4d, 0x3c, 0x01, 0x00, 0x00, + 0x4d, 0x3d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x3e, + 0x01, 0x00, 0x00, 0x4d, 0x3f, 0x01, 0x00, 0x00, + 0x04, 0x40, 0x01, 0x00, 0x00, 0x4d, 0x41, 0x01, + 0x00, 0x00, 0x04, 0x33, 0x01, 0x00, 0x00, 0x4d, + 0x34, 0x01, 0x00, 0x00, 0x04, 0x42, 0x01, 0x00, + 0x00, 0x4d, 0x2c, 0x01, 0x00, 0x00, 0x4d, 0x43, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x44, 0x01, 0x00, + 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, 0x04, 0x46, + 0x01, 0x00, 0x00, 0x4d, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, 0x09, 0x01, + 0x00, 0x00, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, + 0x05, 0x01, 0x00, 0x00, 0x4d, 0x48, 0x01, 0x00, + 0x00, 0x4d, 0x49, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x0b, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x61, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x78, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, + 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, + 0x4d, 0xd5, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x00, 0xbe, 0x01, 0xbe, 0x02, 0xbe, 0x03, 0xbe, + 0x04, 0xbe, 0x05, 0xbe, 0x06, 0xbe, 0x07, 0xbe, + 0x08, 0xbe, 0x09, 0xbe, 0x0a, 0xbe, 0x0b, 0x26, + 0x0c, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, + 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, + 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, + 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, + 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, + 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, + 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x61, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x77, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, + 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0xd6, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x0c, 0xbe, 0x0d, + 0xbe, 0x0e, 0xbe, 0x0f, 0xbe, 0x10, 0xbe, 0x11, + 0xbe, 0x12, 0xbe, 0x13, 0xbe, 0x14, 0xbe, 0x15, + 0xbe, 0x16, 0xbe, 0x17, 0xbe, 0x18, 0x26, 0x0d, + 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0x8b, + 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, + 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, + 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, + 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, + 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, + 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, + 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, + 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, + 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, + 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, + 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, + 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, + 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, + 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, + 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x61, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x98, 0x01, + 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, + 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x19, 0xbe, 0x1a, 0xbe, 0x1b, 0xbe, + 0x1c, 0xbe, 0x1d, 0xbe, 0x1e, 0xbe, 0x1f, 0xbe, + 0x20, 0xbe, 0x21, 0xbe, 0x22, 0xbe, 0x23, 0xbe, + 0x24, 0x26, 0x0c, 0x00, 0x4d, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, + 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, + 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, + 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x61, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, + 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x25, + 0xbe, 0x26, 0xbe, 0x27, 0xbe, 0x28, 0xbe, 0x29, + 0xbe, 0x2a, 0xbe, 0x2b, 0xbe, 0x2c, 0xbe, 0x2d, + 0xbe, 0x2e, 0xbe, 0x2f, 0xbe, 0x30, 0xbe, 0x31, + 0x26, 0x0d, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, + 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, + 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, + 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, + 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, + 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, + 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, + 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, + 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, + 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, + 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, + 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, + 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, + 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, + 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x61, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, + 0x04, 0x99, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x79, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, + 0x7e, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x32, 0xbe, 0x33, 0xbe, + 0x34, 0xbe, 0x35, 0xbe, 0x36, 0xbe, 0x37, 0xbe, + 0x38, 0xbe, 0x39, 0xbe, 0x3a, 0xbe, 0x3b, 0xbe, + 0x3c, 0xbe, 0x3d, 0xbe, 0x3e, 0x26, 0x0d, 0x00, + 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, + 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, + 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, + 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, + 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, + 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, + 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, + 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, + 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x26, 0x0d, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x9a, + 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, + 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, + 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, + 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, + 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, + 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, + 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, + 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x61, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x77, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x98, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x98, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x3f, 0xbe, 0x40, 0xbe, 0x41, 0xbe, + 0x42, 0xbe, 0x43, 0xbe, 0x44, 0xbe, 0x45, 0xbe, + 0x46, 0xbe, 0x47, 0xbe, 0x48, 0xbe, 0x49, 0xbe, + 0x4a, 0x26, 0x0c, 0x00, 0x4d, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, + 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, + 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, + 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x61, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x98, + 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, + 0x99, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x4d, + 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x61, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x77, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xa7, 0x01, 0x00, 0x00, + 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, + 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x26, + 0x04, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, + 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, + 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, + 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, + 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, + 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x26, + 0x04, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x79, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, + 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0xd4, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x4b, 0xbe, + 0x4c, 0xbe, 0x4d, 0xbe, 0x4e, 0xbe, 0x4f, 0xbe, + 0x50, 0xbe, 0x51, 0xbe, 0x52, 0xbe, 0x53, 0xbe, + 0x54, 0xbe, 0x55, 0xbe, 0x56, 0xbe, 0x57, 0xbe, + 0x58, 0x26, 0x0e, 0x00, 0x4d, 0x56, 0x01, 0x00, + 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, + 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, + 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, + 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, + 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, + 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, + 0x01, 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, + 0x04, 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, + 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, 0x26, + 0x0e, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, + 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, 0xae, + 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, + 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, + 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, + 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, + 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, 0x04, 0xb6, + 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, + 0x04, 0xb8, 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x61, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, + 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, + 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, + 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, + 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, + 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, 0x04, + 0xc1, 0x01, 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, + 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, 0x04, 0xc4, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x56, + 0x01, 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, + 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, + 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, + 0xc9, 0x01, 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, + 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, + 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, + 0x04, 0xce, 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, + 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, + 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, + 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, + 0x04, 0xca, 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, + 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, + 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, + 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x61, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xd1, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x79, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, + 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xb9, 0x01, + 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, 0x04, + 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, + 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, 0x04, 0xbe, + 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, + 0x04, 0xc0, 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, + 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, 0x00, 0x04, + 0xc3, 0x01, 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x56, 0x01, 0x00, + 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, + 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, + 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, + 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, + 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, + 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, + 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, + 0x04, 0xdd, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xde, 0x01, + 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, + 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, + 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, 0xe3, + 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, + 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, + 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, + 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x61, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xea, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x56, + 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xea, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x79, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, + 0x7e, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0xb9, 0x01, 0x00, 0x00, + 0x04, 0xba, 0x01, 0x00, 0x00, 0x04, 0xbb, 0x01, + 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, 0x04, + 0xbd, 0x01, 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, + 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, 0x04, 0xc0, + 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, + 0x04, 0xc2, 0x01, 0x00, 0x00, 0x04, 0xc3, 0x01, + 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, + 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, + 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, 0xd5, + 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, + 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, 0xd8, 0x01, + 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, 0x04, + 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, 0x00, + 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, 0x04, 0xdd, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, 0x00, + 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, 0xe0, 0x01, + 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, 0x00, 0x04, + 0xe2, 0x01, 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, + 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, + 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, + 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, + 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x61, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x77, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xea, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x56, 0x01, 0x00, + 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xea, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x61, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, + 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, + 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, + 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, + 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, + 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, + 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, + 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, + 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, + 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, + 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, + 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, 0x01, 0x00, + 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x04, 0xff, + 0x01, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, + 0x04, 0x01, 0x02, 0x00, 0x00, 0x04, 0x02, 0x02, + 0x00, 0x00, 0x04, 0x03, 0x02, 0x00, 0x00, 0x04, + 0x04, 0x02, 0x00, 0x00, 0x04, 0x05, 0x02, 0x00, + 0x00, 0x04, 0x06, 0x02, 0x00, 0x00, 0x04, 0x07, + 0x02, 0x00, 0x00, 0x04, 0x08, 0x02, 0x00, 0x00, + 0x04, 0x09, 0x02, 0x00, 0x00, 0x04, 0x0a, 0x02, + 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, 0x0b, 0x02, + 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, + 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, + 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x22, + 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, + 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, + 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, + 0x10, 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, + 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, 0x26, + 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, + 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, + 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, + 0x14, 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, + 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, 0x2a, + 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, + 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, + 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, + 0x18, 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, + 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, 0x2e, + 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, + 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, + 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, + 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, + 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x32, + 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, + 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, + 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, + 0x20, 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, + 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, 0x36, + 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, + 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, + 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, + 0x24, 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, + 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, 0x3a, + 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, + 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, + 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, + 0x28, 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, + 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, 0x3e, + 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, + 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, + 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, + 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, + 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x42, + 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, + 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, + 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, + 0x30, 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, + 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, 0x46, + 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, + 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, + 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, + 0x34, 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, + 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, 0x4a, + 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, + 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, + 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, + 0x38, 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, + 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, 0x4e, + 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, + 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, + 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, + 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, + 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x52, + 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, + 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, + 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, + 0x40, 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, + 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, 0x56, + 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, + 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, + 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, + 0x44, 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, + 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, 0x5a, + 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, + 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, + 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, + 0x48, 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, + 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, 0x5e, + 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, + 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, + 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, + 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, + 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x62, + 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, + 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, + 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, + 0x50, 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, + 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, 0x66, + 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, + 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, + 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, + 0x54, 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, + 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, 0x6a, + 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, + 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, + 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, + 0x58, 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, + 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, 0x6e, + 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, + 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, + 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, + 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, + 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x72, + 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, + 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, + 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, + 0x60, 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, + 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, 0x76, + 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, + 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, + 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, + 0x64, 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, + 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, 0x7a, + 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, + 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, + 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, + 0x68, 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, + 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, 0x7e, + 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, + 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, + 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, + 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, + 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x82, + 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, + 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, + 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, + 0x70, 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, + 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, 0x86, + 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, + 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, + 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, + 0x74, 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, + 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, 0x8a, + 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, + 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, + 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, + 0x78, 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, + 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, 0x8e, + 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, + 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, + 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, + 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, + 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x92, + 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, + 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, + 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, + 0x80, 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, + 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, 0x96, + 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, + 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, + 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, + 0x84, 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, + 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, 0x9a, + 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, + 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, + 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, + 0x88, 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, + 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, 0x9e, + 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, + 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, + 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, + 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, + 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xa2, + 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, + 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, + 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, + 0x90, 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, + 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, 0xa6, + 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, + 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, + 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, + 0x94, 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, + 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, 0xaa, + 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, + 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, + 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, + 0x98, 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, + 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, 0xae, + 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, + 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, + 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, + 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, + 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xb2, + 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, + 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, + 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, + 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, + 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xb6, + 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, + 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, + 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, + 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, + 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xba, + 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, + 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, + 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, + 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, + 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xbe, + 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, + 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, + 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, + 0xac, 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, + 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0xc2, + 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, + 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, + 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, + 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, + 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xc6, + 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, + 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, + 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, + 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, + 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xca, + 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, + 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, + 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, + 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, + 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xce, + 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, + 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, + 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, + 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, + 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xd2, + 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, + 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, + 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, + 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, + 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xd6, + 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, + 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, + 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, + 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, + 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, 0xcb, 0x02, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, + 0xcc, 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, + 0x80, 0x04, 0xcd, 0x02, 0x00, 0x00, 0x4d, 0xe2, + 0x00, 0x00, 0x80, 0x04, 0xce, 0x02, 0x00, 0x00, + 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, 0xcf, 0x02, + 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, + 0xd0, 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x80, 0x04, 0xd1, 0x02, 0x00, 0x00, 0x4d, 0xe6, + 0x00, 0x00, 0x80, 0x04, 0xd2, 0x02, 0x00, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, + 0xd3, 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, + 0x80, 0x04, 0xd4, 0x02, 0x00, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x80, 0x04, 0x03, 0x01, 0x00, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, 0x56, 0x01, + 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, + 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, + 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, + 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, + 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, + 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, + 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, + 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, + 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, + 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, + 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, + 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, 0x01, 0x00, + 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x04, 0xff, + 0x01, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, + 0x04, 0x01, 0x02, 0x00, 0x00, 0x04, 0x02, 0x02, + 0x00, 0x00, 0x04, 0x03, 0x02, 0x00, 0x00, 0x04, + 0x04, 0x02, 0x00, 0x00, 0x04, 0x05, 0x02, 0x00, + 0x00, 0x04, 0x06, 0x02, 0x00, 0x00, 0x04, 0x07, + 0x02, 0x00, 0x00, 0x04, 0x08, 0x02, 0x00, 0x00, + 0x04, 0x09, 0x02, 0x00, 0x00, 0x04, 0x0a, 0x02, + 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, 0x0b, 0x02, + 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, + 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, + 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x22, + 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, + 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, + 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, + 0x10, 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, + 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, 0x26, + 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, + 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, + 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, + 0x14, 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, + 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, 0x2a, + 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, + 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, + 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, + 0x18, 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, + 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, 0x2e, + 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, + 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, + 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, + 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, + 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x32, + 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, + 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, + 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, + 0x20, 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, + 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, 0x36, + 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, + 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, + 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, + 0x24, 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, + 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, 0x3a, + 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, + 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, + 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, + 0x28, 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, + 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, 0x3e, + 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, + 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, + 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, + 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, + 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x42, + 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, + 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, + 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, + 0x30, 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, + 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, 0x46, + 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, + 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, + 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, + 0x34, 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, + 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, 0x4a, + 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, + 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, + 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, + 0x38, 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, + 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, 0x4e, + 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, + 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, + 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, + 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, + 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x52, + 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, + 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, + 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, + 0x40, 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, + 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, 0x56, + 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, + 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, + 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, + 0x44, 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, + 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, 0x5a, + 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, + 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, + 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, + 0x48, 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, + 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, 0x5e, + 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, + 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, + 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, + 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, + 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x62, + 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, + 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, + 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, + 0x50, 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, + 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, 0x66, + 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, + 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, + 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, + 0x54, 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, + 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, 0x6a, + 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, + 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, + 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, + 0x58, 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, + 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, 0x6e, + 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, + 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, + 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, + 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, + 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x72, + 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, + 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, + 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, + 0x60, 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, + 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, 0x76, + 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, + 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, + 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, + 0x64, 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, + 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, 0x7a, + 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, + 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, + 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, + 0x68, 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, + 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, 0x7e, + 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, + 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, + 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, + 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, + 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x82, + 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, + 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, + 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, + 0x70, 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, + 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, 0x86, + 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, + 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, + 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, + 0x74, 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, + 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, 0x8a, + 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, + 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, + 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, + 0x78, 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, + 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, 0x8e, + 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, + 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, + 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, + 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, + 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x92, + 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, + 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, + 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, + 0x80, 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, + 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, 0x96, + 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, + 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, + 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, + 0x84, 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, + 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, 0x9a, + 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, + 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, + 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, + 0x88, 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, + 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, 0x9e, + 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, + 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, + 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, + 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, + 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xa2, + 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, + 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, + 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, + 0x90, 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, + 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, 0xa6, + 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, + 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, + 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, + 0x94, 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, + 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, 0xaa, + 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, + 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, + 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, + 0x98, 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, + 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, 0xae, + 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, + 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, + 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, + 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, + 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xb2, + 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, + 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, + 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, + 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, + 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xb6, + 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, + 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, + 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, + 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, + 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xba, + 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, + 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, + 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, + 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, + 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xbe, + 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, + 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, + 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, + 0xac, 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, + 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0xc2, + 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, + 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, + 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, + 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, + 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xc6, + 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, + 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, + 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, + 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, + 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xca, + 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, + 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, + 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, + 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, + 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xce, + 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, + 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, + 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, + 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, + 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xd2, + 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, + 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, + 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, + 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, + 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xd6, + 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, + 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, + 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, + 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, + 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, 0xcb, 0x02, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, + 0xcc, 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, + 0x80, 0x04, 0xcd, 0x02, 0x00, 0x00, 0x4d, 0xe2, + 0x00, 0x00, 0x80, 0x04, 0xce, 0x02, 0x00, 0x00, + 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, 0xcf, 0x02, + 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, + 0xd0, 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x80, 0x04, 0xd1, 0x02, 0x00, 0x00, 0x4d, 0xe6, + 0x00, 0x00, 0x80, 0x04, 0xd2, 0x02, 0x00, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, 0xd5, 0x02, + 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, + 0xd6, 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, + 0x80, 0x04, 0xd7, 0x02, 0x00, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x80, 0x04, 0xd8, 0x02, 0x00, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, + 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, + 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, + 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, + 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, + 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, + 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, + 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, + 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, + 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, + 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, + 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, 0x01, 0x00, + 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x04, 0xff, + 0x01, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, + 0x04, 0x01, 0x02, 0x00, 0x00, 0x04, 0x02, 0x02, + 0x00, 0x00, 0x04, 0x03, 0x02, 0x00, 0x00, 0x04, + 0x04, 0x02, 0x00, 0x00, 0x04, 0x05, 0x02, 0x00, + 0x00, 0x04, 0x06, 0x02, 0x00, 0x00, 0x04, 0x07, + 0x02, 0x00, 0x00, 0x04, 0x08, 0x02, 0x00, 0x00, + 0x04, 0x09, 0x02, 0x00, 0x00, 0x04, 0x0a, 0x02, + 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, 0x0b, 0x02, + 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, + 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, + 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x22, + 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, + 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, + 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, + 0x10, 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, + 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, 0x26, + 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, + 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, + 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, + 0x14, 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, + 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, 0x2a, + 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, + 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, + 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, + 0x18, 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, + 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, 0x2e, + 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, + 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, + 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, + 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, + 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x32, + 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, + 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, + 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, + 0x20, 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, + 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, 0x36, + 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, + 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, + 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, + 0x24, 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, + 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, 0x3a, + 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, + 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, + 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, + 0x28, 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, + 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, 0x3e, + 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, + 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, + 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, + 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, + 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x42, + 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, + 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, + 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, + 0x30, 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, + 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, 0x46, + 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, + 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, + 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, + 0x34, 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, + 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, 0x4a, + 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, + 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, + 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, + 0x38, 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, + 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, 0x4e, + 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, + 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, + 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, + 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, + 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x52, + 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, + 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, + 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, + 0x40, 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, + 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, 0x56, + 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, + 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, + 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, + 0x44, 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, + 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, 0x5a, + 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, + 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, + 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, + 0x48, 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, + 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, 0x5e, + 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, + 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, + 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, + 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, + 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x62, + 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, + 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, + 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, + 0x50, 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, + 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, 0x66, + 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, + 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, + 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, + 0x54, 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, + 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, 0x6a, + 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, + 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, + 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, + 0x58, 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, + 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, 0x6e, + 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, + 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, + 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, + 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, + 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x72, + 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, + 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, + 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, + 0x60, 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, + 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, 0x76, + 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, + 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, + 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, + 0x64, 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, + 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, 0x7a, + 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, + 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, + 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, + 0x68, 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, + 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, 0x7e, + 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, + 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, + 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, + 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, + 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x82, + 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, + 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, + 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, + 0x70, 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, + 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, 0x86, + 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, + 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, + 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, + 0x74, 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, + 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, 0x8a, + 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, + 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, + 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, + 0x78, 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, + 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, 0x8e, + 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, + 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, + 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, + 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, + 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x92, + 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, + 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, + 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, + 0x80, 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, + 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, 0x96, + 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, + 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, + 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, + 0x84, 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, + 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, 0x9a, + 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, + 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, + 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, + 0x88, 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, + 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, 0x9e, + 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, + 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, + 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, + 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, + 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xa2, + 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, + 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, + 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, + 0x90, 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, + 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, 0xa6, + 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, + 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, + 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, + 0x94, 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, + 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, 0xaa, + 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, + 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, + 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, + 0x98, 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, + 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, 0xae, + 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, + 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, + 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, + 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, + 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xb2, + 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, + 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, + 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, + 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, + 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xb6, + 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, + 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, + 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, + 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, + 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xba, + 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, + 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, + 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, + 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, + 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xbe, + 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, + 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, + 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, + 0xac, 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, + 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0xc2, + 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, + 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, + 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, + 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, + 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xc6, + 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, + 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, + 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, + 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, + 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xca, + 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, + 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, + 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, + 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, + 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xce, + 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, + 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, + 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, + 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, + 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xd2, + 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, + 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, + 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, + 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, + 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xd6, + 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, + 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, + 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, + 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, + 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, 0xcb, 0x02, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, + 0xcc, 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, + 0x80, 0x04, 0xcd, 0x02, 0x00, 0x00, 0x4d, 0xe2, + 0x00, 0x00, 0x80, 0x04, 0xce, 0x02, 0x00, 0x00, + 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, 0xcf, 0x02, + 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, + 0xd0, 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x80, 0x04, 0xd1, 0x02, 0x00, 0x00, 0x4d, 0xe6, + 0x00, 0x00, 0x80, 0x04, 0xd2, 0x02, 0x00, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, 0xd5, 0x02, + 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, + 0xd6, 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, + 0x80, 0x04, 0xd7, 0x02, 0x00, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x80, 0x04, 0xd8, 0x02, 0x00, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x4d, + 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x59, 0xbe, 0x5a, 0xbe, 0x5b, 0xbe, 0x5c, + 0xbe, 0x5d, 0xbe, 0x5e, 0xbe, 0x5f, 0xbe, 0x60, + 0xbe, 0x61, 0xbe, 0x62, 0xbe, 0x63, 0xbe, 0x64, + 0x26, 0x0c, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0xd9, 0x02, 0x00, 0x00, 0x04, 0xda, 0x02, + 0x00, 0x00, 0x04, 0xdb, 0x02, 0x00, 0x00, 0x04, + 0xdc, 0x02, 0x00, 0x00, 0x04, 0xdd, 0x02, 0x00, + 0x00, 0x04, 0xde, 0x02, 0x00, 0x00, 0x04, 0xdf, + 0x02, 0x00, 0x00, 0x04, 0xe0, 0x02, 0x00, 0x00, + 0x04, 0xe1, 0x02, 0x00, 0x00, 0x04, 0xe2, 0x02, + 0x00, 0x00, 0x04, 0xe3, 0x02, 0x00, 0x00, 0x04, + 0xe4, 0x02, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd9, 0x02, 0x00, + 0x00, 0x04, 0xda, 0x02, 0x00, 0x00, 0x04, 0xdb, + 0x02, 0x00, 0x00, 0x04, 0xdc, 0x02, 0x00, 0x00, + 0x04, 0xdd, 0x02, 0x00, 0x00, 0x04, 0xde, 0x02, + 0x00, 0x00, 0x04, 0xdf, 0x02, 0x00, 0x00, 0x04, + 0xe0, 0x02, 0x00, 0x00, 0x04, 0xe1, 0x02, 0x00, + 0x00, 0x04, 0xe2, 0x02, 0x00, 0x00, 0x04, 0xe3, + 0x02, 0x00, 0x00, 0x04, 0xe4, 0x02, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x61, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xe5, 0x02, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x56, 0x01, + 0x00, 0x00, 0x04, 0xe5, 0x02, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xe5, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x4d, + 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, + 0x01, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x61, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x77, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x02, 0x00, 0x00, + 0x04, 0xe7, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0xe6, 0x02, + 0x00, 0x00, 0x04, 0xe7, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xe6, 0x02, 0x00, 0x00, 0x04, 0xe7, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, + 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, + 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x4d, 0xe8, 0x02, + 0x00, 0x00, 0x4d, 0xe9, 0x02, 0x00, 0x00, 0x0b, + 0x04, 0xea, 0x02, 0x00, 0x00, 0x04, 0xeb, 0x02, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xec, 0x02, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xed, 0x02, 0x00, + 0x00, 0x4d, 0xee, 0x02, 0x00, 0x00, 0x04, 0xef, + 0x02, 0x00, 0x00, 0x4d, 0xf0, 0x02, 0x00, 0x00, + 0x4d, 0xf1, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xf2, + 0x02, 0x00, 0x00, 0x4d, 0xee, 0x02, 0x00, 0x00, + 0x04, 0xf3, 0x02, 0x00, 0x00, 0x4d, 0xf0, 0x02, + 0x00, 0x00, 0x4d, 0xf4, 0x02, 0x00, 0x00, 0x0b, + 0x04, 0xf5, 0x02, 0x00, 0x00, 0x4d, 0xee, 0x02, + 0x00, 0x00, 0x04, 0xf6, 0x02, 0x00, 0x00, 0x4d, + 0xf0, 0x02, 0x00, 0x00, 0x4d, 0xf7, 0x02, 0x00, + 0x00, 0xb6, 0x4d, 0xf8, 0x02, 0x00, 0x00, 0x4d, + 0xf9, 0x02, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xfa, + 0x02, 0x00, 0x00, 0x4d, 0xf1, 0x02, 0x00, 0x00, + 0x04, 0xfb, 0x02, 0x00, 0x00, 0x4d, 0xfc, 0x02, + 0x00, 0x00, 0x04, 0xfd, 0x02, 0x00, 0x00, 0x4d, + 0xfe, 0x02, 0x00, 0x00, 0x04, 0xff, 0x02, 0x00, + 0x00, 0x4d, 0x00, 0x03, 0x00, 0x00, 0x04, 0x01, + 0x03, 0x00, 0x00, 0x4d, 0x02, 0x03, 0x00, 0x00, + 0x04, 0x03, 0x03, 0x00, 0x00, 0x4d, 0x04, 0x03, + 0x00, 0x00, 0x04, 0x05, 0x03, 0x00, 0x00, 0x4d, + 0x06, 0x03, 0x00, 0x00, 0x4d, 0xea, 0x02, 0x00, + 0x00, 0x0b, 0x04, 0xfa, 0x02, 0x00, 0x00, 0x4d, + 0xf1, 0x02, 0x00, 0x00, 0x04, 0xfb, 0x02, 0x00, + 0x00, 0x4d, 0xfc, 0x02, 0x00, 0x00, 0x04, 0x07, + 0x03, 0x00, 0x00, 0x4d, 0xfe, 0x02, 0x00, 0x00, + 0x04, 0xff, 0x02, 0x00, 0x00, 0x4d, 0x00, 0x03, + 0x00, 0x00, 0x04, 0x01, 0x03, 0x00, 0x00, 0x4d, + 0x02, 0x03, 0x00, 0x00, 0x04, 0x03, 0x03, 0x00, + 0x00, 0x4d, 0x04, 0x03, 0x00, 0x00, 0x04, 0x05, + 0x03, 0x00, 0x00, 0x4d, 0x06, 0x03, 0x00, 0x00, + 0x4d, 0xeb, 0x02, 0x00, 0x00, 0x4d, 0x08, 0x03, + 0x00, 0x00, 0x0b, 0x04, 0x09, 0x03, 0x00, 0x00, + 0x4d, 0x0a, 0x03, 0x00, 0x00, 0x04, 0x0b, 0x03, + 0x00, 0x00, 0x4d, 0x0c, 0x03, 0x00, 0x00, 0x04, + 0x0d, 0x03, 0x00, 0x00, 0x4d, 0x0e, 0x03, 0x00, + 0x00, 0x04, 0x0f, 0x03, 0x00, 0x00, 0x4d, 0x10, + 0x03, 0x00, 0x00, 0x04, 0x11, 0x03, 0x00, 0x00, + 0x4d, 0x12, 0x03, 0x00, 0x00, 0x04, 0x13, 0x03, + 0x00, 0x00, 0x4d, 0x14, 0x03, 0x00, 0x00, 0x04, + 0x15, 0x03, 0x00, 0x00, 0x4d, 0x16, 0x03, 0x00, + 0x00, 0x04, 0x17, 0x03, 0x00, 0x00, 0x4d, 0x18, + 0x03, 0x00, 0x00, 0x04, 0x19, 0x03, 0x00, 0x00, + 0x4d, 0x1a, 0x03, 0x00, 0x00, 0x04, 0x1b, 0x03, + 0x00, 0x00, 0x4d, 0x1c, 0x03, 0x00, 0x00, 0x04, + 0x1d, 0x03, 0x00, 0x00, 0x4d, 0x1e, 0x03, 0x00, + 0x00, 0x04, 0x1f, 0x03, 0x00, 0x00, 0x4d, 0x20, + 0x03, 0x00, 0x00, 0x04, 0x21, 0x03, 0x00, 0x00, + 0x4d, 0x22, 0x03, 0x00, 0x00, 0x04, 0x23, 0x03, + 0x00, 0x00, 0x4d, 0x24, 0x03, 0x00, 0x00, 0x04, + 0x25, 0x03, 0x00, 0x00, 0x4d, 0x26, 0x03, 0x00, + 0x00, 0x04, 0x27, 0x03, 0x00, 0x00, 0x4d, 0x28, + 0x03, 0x00, 0x00, 0x04, 0x29, 0x03, 0x00, 0x00, + 0x4d, 0x2a, 0x03, 0x00, 0x00, 0x04, 0x2b, 0x03, + 0x00, 0x00, 0x4d, 0x2c, 0x03, 0x00, 0x00, 0x04, + 0x2d, 0x03, 0x00, 0x00, 0x4d, 0x2e, 0x03, 0x00, + 0x00, 0x04, 0x2f, 0x03, 0x00, 0x00, 0x4d, 0x30, + 0x03, 0x00, 0x00, 0x04, 0x31, 0x03, 0x00, 0x00, + 0x4d, 0x32, 0x03, 0x00, 0x00, 0x04, 0x33, 0x03, + 0x00, 0x00, 0x4d, 0x34, 0x03, 0x00, 0x00, 0x4d, + 0x35, 0x03, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, + 0x00, 0x24, 0x01, 0x00, 0xcc, 0x28, 0xec, 0x0c, + 0x01, 0x00, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, + 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x04, 0x31, 0x33, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_bo_CN_size = 25396; + +const uint8_t intl_bo_CN[25396] = { + 0x01, 0xd2, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x0a, 0x62, 0x6f, 0x2d, 0x43, 0x4e, 0x0c, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x0e, 0x67, 0x72, + 0x65, 0x67, 0x6f, 0x72, 0x79, 0x10, 0x62, 0x75, + 0x64, 0x64, 0x68, 0x69, 0x73, 0x74, 0x0e, 0x63, + 0x68, 0x69, 0x6e, 0x65, 0x73, 0x65, 0x0c, 0x63, + 0x6f, 0x70, 0x74, 0x69, 0x63, 0x0a, 0x64, 0x61, + 0x6e, 0x67, 0x69, 0x0e, 0x65, 0x74, 0x68, 0x69, + 0x6f, 0x61, 0x61, 0x10, 0x65, 0x74, 0x68, 0x69, + 0x6f, 0x70, 0x69, 0x63, 0x0e, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x69, 0x63, 0x0c, 0x68, 0x65, 0x62, + 0x72, 0x65, 0x77, 0x0c, 0x69, 0x6e, 0x64, 0x69, + 0x61, 0x6e, 0x0e, 0x69, 0x73, 0x6c, 0x61, 0x6d, + 0x69, 0x63, 0x10, 0x69, 0x73, 0x6c, 0x61, 0x6d, + 0x69, 0x63, 0x63, 0x10, 0x6a, 0x61, 0x70, 0x61, + 0x6e, 0x65, 0x73, 0x65, 0x0e, 0x70, 0x65, 0x72, + 0x73, 0x69, 0x61, 0x6e, 0x06, 0x72, 0x6f, 0x63, + 0x04, 0x63, 0x61, 0x0e, 0x68, 0x6f, 0x75, 0x72, + 0x4e, 0x6f, 0x30, 0x0c, 0x68, 0x6f, 0x75, 0x72, + 0x31, 0x32, 0x0e, 0x7b, 0x31, 0x7d, 0x20, 0x7b, + 0x30, 0x7d, 0x0a, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x0c, 0x6d, 0x65, 0x64, 0x69, 0x75, 0x6d, 0x08, + 0x66, 0x75, 0x6c, 0x6c, 0x08, 0x6c, 0x6f, 0x6e, + 0x67, 0x02, 0x64, 0x06, 0x63, 0x63, 0x63, 0x02, + 0x45, 0x08, 0x64, 0x2c, 0x20, 0x45, 0x04, 0x45, + 0x64, 0x10, 0x45, 0x20, 0x68, 0x3a, 0x6d, 0x6d, + 0x20, 0x61, 0x06, 0x45, 0x68, 0x6d, 0x0e, 0x45, + 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x06, 0x45, + 0x48, 0x6d, 0x16, 0x45, 0x20, 0x68, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x08, 0x45, + 0x68, 0x6d, 0x73, 0x14, 0x45, 0x20, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x08, 0x45, + 0x48, 0x6d, 0x73, 0x06, 0x47, 0x20, 0x79, 0x04, + 0x47, 0x79, 0x10, 0x47, 0x20, 0x79, 0x20, 0x4c, + 0x4c, 0x4c, 0x4c, 0x0a, 0x47, 0x79, 0x4d, 0x4d, + 0x4d, 0x12, 0x47, 0x20, 0x79, 0x20, 0x4d, 0x4d, + 0x4d, 0x20, 0x64, 0x0c, 0x47, 0x79, 0x4d, 0x4d, + 0x4d, 0x64, 0x18, 0x47, 0x20, 0x79, 0x20, 0x4d, + 0x4d, 0x4d, 0x20, 0x64, 0x2c, 0x20, 0x45, 0x0e, + 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x06, + 0x68, 0x20, 0x61, 0x02, 0x68, 0x04, 0x48, 0x48, + 0x02, 0x48, 0x0c, 0x68, 0x3a, 0x6d, 0x6d, 0x20, + 0x61, 0x04, 0x68, 0x6d, 0x0a, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x04, 0x48, 0x6d, 0x12, 0x68, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x06, + 0x68, 0x6d, 0x73, 0x10, 0x48, 0x48, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x06, 0x48, 0x6d, 0x73, + 0x16, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x61, 0x20, 0x76, 0x08, 0x68, 0x6d, 0x73, + 0x76, 0x14, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x20, 0x76, 0x08, 0x48, 0x6d, 0x73, + 0x76, 0x10, 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, + 0x20, 0x76, 0x06, 0x68, 0x6d, 0x76, 0x0e, 0x48, + 0x48, 0x3a, 0x6d, 0x6d, 0x20, 0x76, 0x06, 0x48, + 0x6d, 0x76, 0x02, 0x4c, 0x02, 0x4d, 0x0a, 0x4d, + 0x4d, 0x2d, 0x64, 0x64, 0x04, 0x4d, 0x64, 0x10, + 0x4d, 0x4d, 0x2d, 0x64, 0x64, 0x2c, 0x20, 0x45, + 0x06, 0x4d, 0x45, 0x64, 0x06, 0x4c, 0x4c, 0x4c, + 0x06, 0x4d, 0x4d, 0x4d, 0x11, 0x4d, 0x00, 0x4d, + 0x00, 0x4d, 0x00, 0x5a, 0x0f, 0x7a, 0x0f, 0x66, + 0x0f, 0x0b, 0x0f, 0x64, 0x00, 0x08, 0x4d, 0x4d, + 0x4d, 0x64, 0x17, 0x4d, 0x00, 0x4d, 0x00, 0x4d, + 0x00, 0x5a, 0x0f, 0x7a, 0x0f, 0x66, 0x0f, 0x0b, + 0x0f, 0x64, 0x00, 0x2c, 0x00, 0x20, 0x00, 0x45, + 0x00, 0x0a, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x19, + 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, + 0x60, 0x0f, 0x72, 0x0f, 0x0b, 0x0f, 0x5a, 0x0f, + 0x7a, 0x0f, 0x66, 0x0f, 0x0b, 0x0f, 0x64, 0x00, + 0x0a, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x0a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x04, 0x6d, 0x73, 0x02, + 0x79, 0x08, 0x79, 0x2d, 0x4d, 0x4d, 0x04, 0x79, + 0x4d, 0x0e, 0x79, 0x2d, 0x4d, 0x4d, 0x2d, 0x64, + 0x64, 0x06, 0x79, 0x4d, 0x64, 0x14, 0x79, 0x2d, + 0x4d, 0x4d, 0x2d, 0x64, 0x64, 0x2c, 0x20, 0x45, + 0x08, 0x79, 0x4d, 0x45, 0x64, 0x0a, 0x79, 0x20, + 0x4c, 0x4c, 0x4c, 0x08, 0x79, 0x4d, 0x4d, 0x4d, + 0x1f, 0x79, 0x00, 0x20, 0x00, 0x63, 0x0f, 0x7c, + 0x0f, 0x60, 0x0f, 0x72, 0x0f, 0x0b, 0x0f, 0x4d, + 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x5a, 0x0f, 0x7a, + 0x0f, 0x66, 0x0f, 0x0b, 0x0f, 0x64, 0x00, 0x0a, + 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x14, 0x79, 0x20, + 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x2c, 0x20, 0x45, + 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0c, + 0x79, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, 0x79, + 0x4d, 0x4d, 0x4d, 0x4d, 0x2d, 0x66, 0x0f, 0xa4, + 0x0f, 0xb1, 0x0f, 0x72, 0x0f, 0x0b, 0x0f, 0x63, + 0x0f, 0x7c, 0x0f, 0x0b, 0x0f, 0x79, 0x00, 0x20, + 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x4d, + 0x00, 0x60, 0x0f, 0x72, 0x0f, 0x0b, 0x0f, 0x5a, + 0x0f, 0x7a, 0x0f, 0x66, 0x0f, 0x0b, 0x0f, 0x64, + 0x00, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, + 0x0a, 0x79, 0x20, 0x51, 0x51, 0x51, 0x08, 0x79, + 0x51, 0x51, 0x51, 0x0c, 0x79, 0x20, 0x51, 0x51, + 0x51, 0x51, 0x0a, 0x79, 0x51, 0x51, 0x51, 0x51, + 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, + 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x73, 0x29, 0x79, 0x00, 0x20, 0x00, 0x4d, 0x00, + 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x60, 0x0f, + 0x72, 0x0f, 0x0b, 0x0f, 0x5a, 0x0f, 0x7a, 0x0f, + 0x66, 0x0f, 0x0b, 0x0f, 0x64, 0x00, 0x2c, 0x00, + 0x20, 0x00, 0x45, 0x00, 0x45, 0x00, 0x45, 0x00, + 0x45, 0x00, 0x14, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, + 0x45, 0x45, 0x45, 0x45, 0x64, 0x16, 0x64, 0x61, + 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x73, 0x1c, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x61, 0x20, 0x7a, 0x7a, 0x7a, 0x7a, + 0x12, 0x68, 0x6d, 0x6d, 0x73, 0x73, 0x7a, 0x7a, + 0x7a, 0x7a, 0x16, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x20, 0x61, 0x20, 0x7a, 0x08, 0x68, + 0x6d, 0x73, 0x7a, 0x16, 0x74, 0x69, 0x6d, 0x65, + 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x0e, + 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x0c, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x09, 0x5f, + 0x0f, 0xb3, 0x0f, 0x0b, 0x0f, 0x21, 0x0f, 0x09, + 0x5f, 0x0f, 0xb3, 0x0f, 0x0b, 0x0f, 0x22, 0x0f, + 0x09, 0x5f, 0x0f, 0xb3, 0x0f, 0x0b, 0x0f, 0x23, + 0x0f, 0x09, 0x5f, 0x0f, 0xb3, 0x0f, 0x0b, 0x0f, + 0x24, 0x0f, 0x09, 0x5f, 0x0f, 0xb3, 0x0f, 0x0b, + 0x0f, 0x25, 0x0f, 0x09, 0x5f, 0x0f, 0xb3, 0x0f, + 0x0b, 0x0f, 0x26, 0x0f, 0x09, 0x5f, 0x0f, 0xb3, + 0x0f, 0x0b, 0x0f, 0x27, 0x0f, 0x09, 0x5f, 0x0f, + 0xb3, 0x0f, 0x0b, 0x0f, 0x28, 0x0f, 0x09, 0x5f, + 0x0f, 0xb3, 0x0f, 0x0b, 0x0f, 0x29, 0x0f, 0x0b, + 0x5f, 0x0f, 0xb3, 0x0f, 0x0b, 0x0f, 0x21, 0x0f, + 0x20, 0x0f, 0x0b, 0x5f, 0x0f, 0xb3, 0x0f, 0x0b, + 0x0f, 0x21, 0x0f, 0x21, 0x0f, 0x0b, 0x5f, 0x0f, + 0xb3, 0x0f, 0x0b, 0x0f, 0x21, 0x0f, 0x22, 0x0f, + 0x15, 0x5f, 0x0f, 0xb3, 0x0f, 0x0b, 0x0f, 0x56, + 0x0f, 0x0b, 0x0f, 0x51, 0x0f, 0x44, 0x0f, 0x0b, + 0x0f, 0x54, 0x0f, 0x7c, 0x0f, 0x17, 0x5f, 0x0f, + 0xb3, 0x0f, 0x0b, 0x0f, 0x56, 0x0f, 0x0b, 0x0f, + 0x42, 0x0f, 0x49, 0x0f, 0x72, 0x0f, 0x66, 0x0f, + 0x0b, 0x0f, 0x54, 0x0f, 0x17, 0x5f, 0x0f, 0xb3, + 0x0f, 0x0b, 0x0f, 0x56, 0x0f, 0x0b, 0x0f, 0x42, + 0x0f, 0x66, 0x0f, 0x74, 0x0f, 0x58, 0x0f, 0x0b, + 0x0f, 0x54, 0x0f, 0x15, 0x5f, 0x0f, 0xb3, 0x0f, + 0x0b, 0x0f, 0x56, 0x0f, 0x0b, 0x0f, 0x56, 0x0f, + 0x5e, 0x0f, 0x72, 0x0f, 0x0b, 0x0f, 0x54, 0x0f, + 0x13, 0x5f, 0x0f, 0xb3, 0x0f, 0x0b, 0x0f, 0x56, + 0x0f, 0x0b, 0x0f, 0x63, 0x0f, 0x94, 0x0f, 0x0b, + 0x0f, 0x54, 0x0f, 0x17, 0x5f, 0x0f, 0xb3, 0x0f, + 0x0b, 0x0f, 0x56, 0x0f, 0x0b, 0x0f, 0x51, 0x0f, + 0xb2, 0x0f, 0x74, 0x0f, 0x42, 0x0f, 0x0b, 0x0f, + 0x54, 0x0f, 0x17, 0x5f, 0x0f, 0xb3, 0x0f, 0x0b, + 0x0f, 0x56, 0x0f, 0x0b, 0x0f, 0x56, 0x0f, 0x51, + 0x0f, 0x74, 0x0f, 0x53, 0x0f, 0x0b, 0x0f, 0x54, + 0x0f, 0x19, 0x5f, 0x0f, 0xb3, 0x0f, 0x0b, 0x0f, + 0x56, 0x0f, 0x0b, 0x0f, 0x56, 0x0f, 0x62, 0x0f, + 0x92, 0x0f, 0xb1, 0x0f, 0x51, 0x0f, 0x0b, 0x0f, + 0x54, 0x0f, 0x15, 0x5f, 0x0f, 0xb3, 0x0f, 0x0b, + 0x0f, 0x56, 0x0f, 0x0b, 0x0f, 0x51, 0x0f, 0x42, + 0x0f, 0x74, 0x0f, 0x0b, 0x0f, 0x54, 0x0f, 0x15, + 0x5f, 0x0f, 0xb3, 0x0f, 0x0b, 0x0f, 0x56, 0x0f, + 0x0b, 0x0f, 0x56, 0x0f, 0x45, 0x0f, 0x74, 0x0f, + 0x0b, 0x0f, 0x54, 0x0f, 0x1f, 0x5f, 0x0f, 0xb3, + 0x0f, 0x0b, 0x0f, 0x56, 0x0f, 0x0b, 0x0f, 0x56, + 0x0f, 0x45, 0x0f, 0x74, 0x0f, 0x0b, 0x0f, 0x42, + 0x0f, 0x45, 0x0f, 0x72, 0x0f, 0x42, 0x0f, 0x0b, + 0x0f, 0x54, 0x0f, 0x1f, 0x5f, 0x0f, 0xb3, 0x0f, + 0x0b, 0x0f, 0x56, 0x0f, 0x0b, 0x0f, 0x56, 0x0f, + 0x45, 0x0f, 0x74, 0x0f, 0x0b, 0x0f, 0x42, 0x0f, + 0x49, 0x0f, 0x72, 0x0f, 0x66, 0x0f, 0x0b, 0x0f, + 0x54, 0x0f, 0x0c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, + 0x73, 0x05, 0x49, 0x0f, 0x72, 0x0f, 0x05, 0x5f, + 0x0f, 0xb3, 0x0f, 0x07, 0x58, 0x0f, 0x72, 0x0f, + 0x42, 0x0f, 0x07, 0x63, 0x0f, 0xb7, 0x0f, 0x42, + 0x0f, 0x07, 0x55, 0x0f, 0x74, 0x0f, 0x62, 0x0f, + 0x07, 0x66, 0x0f, 0x44, 0x0f, 0x66, 0x0f, 0x09, + 0x66, 0x0f, 0xa4, 0x0f, 0x7a, 0x0f, 0x53, 0x0f, + 0x0b, 0x49, 0x0f, 0x72, 0x0f, 0x0b, 0x0f, 0x58, + 0x0f, 0x0b, 0x0f, 0x0b, 0x5f, 0x0f, 0xb3, 0x0f, + 0x0b, 0x0f, 0x56, 0x0f, 0x0b, 0x0f, 0x11, 0x58, + 0x0f, 0x72, 0x0f, 0x42, 0x0f, 0x0b, 0x0f, 0x51, + 0x0f, 0x58, 0x0f, 0x62, 0x0f, 0x0b, 0x0f, 0x0d, + 0x63, 0x0f, 0xb7, 0x0f, 0x42, 0x0f, 0x0b, 0x0f, + 0x54, 0x0f, 0x0b, 0x0f, 0x0f, 0x55, 0x0f, 0x74, + 0x0f, 0x62, 0x0f, 0x0b, 0x0f, 0x56, 0x0f, 0x74, + 0x0f, 0x0b, 0x0f, 0x0d, 0x54, 0x0f, 0x0b, 0x0f, + 0x66, 0x0f, 0x44, 0x0f, 0x66, 0x0f, 0x0b, 0x0f, + 0x0f, 0x66, 0x0f, 0xa4, 0x0f, 0x7a, 0x0f, 0x53, + 0x0f, 0x0b, 0x0f, 0x54, 0x0f, 0x0b, 0x0f, 0x13, + 0x42, 0x0f, 0x5f, 0x0f, 0x60, 0x0f, 0x0b, 0x0f, + 0x49, 0x0f, 0x72, 0x0f, 0x0b, 0x0f, 0x58, 0x0f, + 0x0b, 0x0f, 0x13, 0x42, 0x0f, 0x5f, 0x0f, 0x60, + 0x0f, 0x0b, 0x0f, 0x5f, 0x0f, 0xb3, 0x0f, 0x0b, + 0x0f, 0x56, 0x0f, 0x0b, 0x0f, 0x19, 0x42, 0x0f, + 0x5f, 0x0f, 0x60, 0x0f, 0x0b, 0x0f, 0x58, 0x0f, + 0x72, 0x0f, 0x42, 0x0f, 0x0b, 0x0f, 0x51, 0x0f, + 0x58, 0x0f, 0x62, 0x0f, 0x0b, 0x0f, 0x15, 0x42, + 0x0f, 0x5f, 0x0f, 0x60, 0x0f, 0x0b, 0x0f, 0x63, + 0x0f, 0xb7, 0x0f, 0x42, 0x0f, 0x0b, 0x0f, 0x54, + 0x0f, 0x0b, 0x0f, 0x17, 0x42, 0x0f, 0x5f, 0x0f, + 0x60, 0x0f, 0x0b, 0x0f, 0x55, 0x0f, 0x74, 0x0f, + 0x62, 0x0f, 0x0b, 0x0f, 0x56, 0x0f, 0x74, 0x0f, + 0x0b, 0x0f, 0x15, 0x42, 0x0f, 0x5f, 0x0f, 0x60, + 0x0f, 0x0b, 0x0f, 0x54, 0x0f, 0x0b, 0x0f, 0x66, + 0x0f, 0x44, 0x0f, 0x66, 0x0f, 0x0b, 0x0f, 0x17, + 0x42, 0x0f, 0x5f, 0x0f, 0x60, 0x0f, 0x0b, 0x0f, + 0x66, 0x0f, 0xa4, 0x0f, 0x7a, 0x0f, 0x53, 0x0f, + 0x0b, 0x0f, 0x54, 0x0f, 0x0b, 0x0f, 0x08, 0x64, + 0x61, 0x79, 0x73, 0x04, 0x42, 0x45, 0x08, 0x65, + 0x72, 0x61, 0x73, 0x0f, 0x66, 0x0f, 0x94, 0x0f, + 0x0b, 0x0f, 0x51, 0x0f, 0xb2, 0x0f, 0x7c, 0x0f, + 0x0b, 0x0f, 0x04, 0x61, 0x6d, 0x11, 0x55, 0x0f, + 0xb1, 0x0f, 0x72, 0x0f, 0x0b, 0x0f, 0x51, 0x0f, + 0xb2, 0x0f, 0x7c, 0x0f, 0x0b, 0x0f, 0x04, 0x70, + 0x6d, 0x14, 0x64, 0x61, 0x79, 0x50, 0x65, 0x72, + 0x69, 0x6f, 0x64, 0x73, 0x06, 0x4d, 0x30, 0x31, + 0x06, 0x4d, 0x30, 0x32, 0x06, 0x4d, 0x30, 0x33, + 0x06, 0x4d, 0x30, 0x34, 0x06, 0x4d, 0x30, 0x35, + 0x06, 0x4d, 0x30, 0x36, 0x06, 0x4d, 0x30, 0x37, + 0x06, 0x4d, 0x30, 0x38, 0x06, 0x4d, 0x30, 0x39, + 0x06, 0x4d, 0x31, 0x30, 0x06, 0x4d, 0x31, 0x31, + 0x06, 0x4d, 0x31, 0x32, 0x08, 0x54, 0x6f, 0x75, + 0x74, 0x08, 0x42, 0x61, 0x62, 0x61, 0x0a, 0x48, + 0x61, 0x74, 0x6f, 0x72, 0x0a, 0x4b, 0x69, 0x61, + 0x68, 0x6b, 0x08, 0x54, 0x6f, 0x62, 0x61, 0x0c, + 0x41, 0x6d, 0x73, 0x68, 0x69, 0x72, 0x10, 0x42, + 0x61, 0x72, 0x61, 0x6d, 0x68, 0x61, 0x74, 0x12, + 0x42, 0x61, 0x72, 0x61, 0x6d, 0x6f, 0x75, 0x64, + 0x61, 0x0e, 0x42, 0x61, 0x73, 0x68, 0x61, 0x6e, + 0x73, 0x0a, 0x50, 0x61, 0x6f, 0x6e, 0x61, 0x08, + 0x45, 0x70, 0x65, 0x70, 0x0a, 0x4d, 0x65, 0x73, + 0x72, 0x61, 0x0a, 0x4e, 0x61, 0x73, 0x69, 0x65, + 0x08, 0x45, 0x52, 0x41, 0x30, 0x08, 0x45, 0x52, + 0x41, 0x31, 0x10, 0x4d, 0x65, 0x73, 0x6b, 0x65, + 0x72, 0x65, 0x6d, 0x0c, 0x54, 0x65, 0x6b, 0x65, + 0x6d, 0x74, 0x0a, 0x48, 0x65, 0x64, 0x61, 0x72, + 0x0c, 0x54, 0x61, 0x68, 0x73, 0x61, 0x73, 0x06, + 0x54, 0x65, 0x72, 0x0e, 0x59, 0x65, 0x6b, 0x61, + 0x74, 0x69, 0x74, 0x0e, 0x4d, 0x65, 0x67, 0x61, + 0x62, 0x69, 0x74, 0x0c, 0x4d, 0x69, 0x61, 0x7a, + 0x69, 0x61, 0x0c, 0x47, 0x65, 0x6e, 0x62, 0x6f, + 0x74, 0x08, 0x53, 0x65, 0x6e, 0x65, 0x0a, 0x48, + 0x61, 0x6d, 0x6c, 0x65, 0x0e, 0x4e, 0x65, 0x68, + 0x61, 0x73, 0x73, 0x65, 0x0e, 0x50, 0x61, 0x67, + 0x75, 0x6d, 0x65, 0x6e, 0x1b, 0x66, 0x0f, 0xa4, + 0x0f, 0xb1, 0x0f, 0x72, 0x0f, 0x0b, 0x0f, 0x63, + 0x0f, 0x7c, 0x0f, 0x0b, 0x0f, 0x66, 0x0f, 0x94, + 0x0f, 0x7c, 0x0f, 0x53, 0x0f, 0x0b, 0x0f, 0x11, + 0x66, 0x0f, 0xa4, 0x0f, 0xb1, 0x0f, 0x72, 0x0f, + 0x0b, 0x0f, 0x63, 0x0f, 0x7c, 0x0f, 0x0b, 0x0f, + 0x06, 0x42, 0x43, 0x45, 0x04, 0x43, 0x45, 0x0c, + 0x54, 0x69, 0x73, 0x68, 0x72, 0x69, 0x0e, 0x48, + 0x65, 0x73, 0x68, 0x76, 0x61, 0x6e, 0x0c, 0x4b, + 0x69, 0x73, 0x6c, 0x65, 0x76, 0x0a, 0x54, 0x65, + 0x76, 0x65, 0x74, 0x0c, 0x53, 0x68, 0x65, 0x76, + 0x61, 0x74, 0x0c, 0x41, 0x64, 0x61, 0x72, 0x20, + 0x49, 0x08, 0x41, 0x64, 0x61, 0x72, 0x0a, 0x4e, + 0x69, 0x73, 0x61, 0x6e, 0x08, 0x49, 0x79, 0x61, + 0x72, 0x0a, 0x53, 0x69, 0x76, 0x61, 0x6e, 0x0a, + 0x54, 0x61, 0x6d, 0x75, 0x7a, 0x04, 0x41, 0x76, + 0x08, 0x45, 0x6c, 0x75, 0x6c, 0x0e, 0x41, 0x64, + 0x61, 0x72, 0x20, 0x49, 0x49, 0x04, 0x41, 0x4d, + 0x0e, 0x43, 0x68, 0x61, 0x69, 0x74, 0x72, 0x61, + 0x10, 0x56, 0x61, 0x69, 0x73, 0x61, 0x6b, 0x68, + 0x61, 0x10, 0x4a, 0x79, 0x61, 0x69, 0x73, 0x74, + 0x68, 0x61, 0x0c, 0x41, 0x73, 0x61, 0x64, 0x68, + 0x61, 0x0e, 0x53, 0x72, 0x61, 0x76, 0x61, 0x6e, + 0x61, 0x0c, 0x42, 0x68, 0x61, 0x64, 0x72, 0x61, + 0x0c, 0x41, 0x73, 0x76, 0x69, 0x6e, 0x61, 0x0e, + 0x4b, 0x61, 0x72, 0x74, 0x69, 0x6b, 0x61, 0x14, + 0x41, 0x67, 0x72, 0x61, 0x68, 0x61, 0x79, 0x61, + 0x6e, 0x61, 0x0a, 0x50, 0x61, 0x75, 0x73, 0x61, + 0x0a, 0x4d, 0x61, 0x67, 0x68, 0x61, 0x10, 0x50, + 0x68, 0x61, 0x6c, 0x67, 0x75, 0x6e, 0x61, 0x08, + 0x53, 0x61, 0x6b, 0x61, 0x08, 0x4d, 0x75, 0x68, + 0x2e, 0x08, 0x53, 0x61, 0x66, 0x2e, 0x0c, 0x52, + 0x61, 0x62, 0x2e, 0x20, 0x49, 0x0e, 0x52, 0x61, + 0x62, 0x2e, 0x20, 0x49, 0x49, 0x0c, 0x4a, 0x75, + 0x6d, 0x2e, 0x20, 0x49, 0x0e, 0x4a, 0x75, 0x6d, + 0x2e, 0x20, 0x49, 0x49, 0x08, 0x52, 0x61, 0x6a, + 0x2e, 0x08, 0x53, 0x68, 0x61, 0x2e, 0x08, 0x52, + 0x61, 0x6d, 0x2e, 0x0a, 0x53, 0x68, 0x61, 0x77, + 0x2e, 0x11, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, + 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x51, 0x00, + 0x2e, 0x00, 0x11, 0x44, 0x00, 0x68, 0x00, 0x75, + 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x48, + 0x00, 0x2e, 0x00, 0x10, 0x4d, 0x75, 0x68, 0x61, + 0x72, 0x72, 0x61, 0x6d, 0x0a, 0x53, 0x61, 0x66, + 0x61, 0x72, 0x0f, 0x52, 0x00, 0x61, 0x00, 0x62, + 0x00, 0x69, 0x00, 0xbb, 0x02, 0x20, 0x00, 0x49, + 0x00, 0x11, 0x52, 0x00, 0x61, 0x00, 0x62, 0x00, + 0x69, 0x00, 0xbb, 0x02, 0x20, 0x00, 0x49, 0x00, + 0x49, 0x00, 0x10, 0x4a, 0x75, 0x6d, 0x61, 0x64, + 0x61, 0x20, 0x49, 0x12, 0x4a, 0x75, 0x6d, 0x61, + 0x64, 0x61, 0x20, 0x49, 0x49, 0x0a, 0x52, 0x61, + 0x6a, 0x61, 0x62, 0x0f, 0x53, 0x00, 0x68, 0x00, + 0x61, 0x00, 0xbb, 0x02, 0x62, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x0e, 0x52, 0x61, 0x6d, 0x61, 0x64, + 0x61, 0x6e, 0x0e, 0x53, 0x68, 0x61, 0x77, 0x77, + 0x61, 0x6c, 0x19, 0x44, 0x00, 0x68, 0x00, 0x75, + 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x51, + 0x00, 0x69, 0x00, 0xbb, 0x02, 0x64, 0x00, 0x61, + 0x00, 0x68, 0x00, 0x19, 0x44, 0x00, 0x68, 0x00, + 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, + 0x48, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x6a, 0x00, + 0x61, 0x00, 0x68, 0x00, 0x04, 0x41, 0x48, 0x1f, + 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, 0x36, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x48, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x36, 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x36, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x75, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x36, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x1d, 0x57, 0x00, 0x61, 0x00, 0x64, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x52, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, 0x59, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, + 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x2b, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x2d, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x2d, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x2d, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x2a, 0x4a, 0x69, 0x6e, + 0x67, 0x6f, 0x2d, 0x6b, 0x65, 0x69, 0x75, 0x6e, + 0x20, 0x28, 0x37, 0x36, 0x37, 0x2d, 0x37, 0x37, + 0x30, 0x29, 0x1d, 0x48, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x1f, 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x64, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x1f, 0x4b, 0x00, 0x4d, 0x01, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1d, 0x4a, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, + 0x61, 0x00, 0x6a, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1f, 0x53, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x20, 0x54, 0x65, 0x6e, 0x2d, 0x61, 0x6e, 0x20, + 0x28, 0x38, 0x35, 0x37, 0x2d, 0x38, 0x35, 0x39, + 0x29, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x21, 0x47, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x61, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1d, 0x45, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, + 0x45, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4a, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x34, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1b, 0x4c, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1d, 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x41, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, + 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x38, 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, + 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, + 0x69, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, 0x73, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x69, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x29, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x27, 0x4a, 0x00, 0x69, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x45, 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4c, 0x01, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x61, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x25, 0x4a, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x24, 0x54, 0x65, 0x6e, + 0x2d, 0x65, 0x69, 0x20, 0x28, 0x31, 0x31, 0x31, + 0x30, 0x2d, 0x31, 0x31, 0x31, 0x33, 0x29, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x44, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x6a, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x48, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x27, 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1f, 0x4c, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x6d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x41, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x4a, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x59, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, + 0x75, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x29, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x21, 0x4a, 0x00, 0x4d, 0x01, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x27, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x75, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x29, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, 0x29, 0x52, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x45, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x21, 0x48, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, + 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x4c, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x61, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, + 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x48, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x27, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, + 0x4c, 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x45, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, + 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x45, + 0x00, 0x69, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x27, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, + 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x27, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x61, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x4d, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x02, 0x54, 0x02, 0x53, 0x0a, 0x4d, + 0x65, 0x69, 0x6a, 0x69, 0x0d, 0x54, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x0b, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x0c, 0x48, 0x65, 0x69, + 0x73, 0x65, 0x69, 0x12, 0x46, 0x61, 0x72, 0x76, + 0x61, 0x72, 0x64, 0x69, 0x6e, 0x16, 0x4f, 0x72, + 0x64, 0x69, 0x62, 0x65, 0x68, 0x65, 0x73, 0x68, + 0x74, 0x0e, 0x4b, 0x68, 0x6f, 0x72, 0x64, 0x61, + 0x64, 0x06, 0x54, 0x69, 0x72, 0x0c, 0x4d, 0x6f, + 0x72, 0x64, 0x61, 0x64, 0x12, 0x53, 0x68, 0x61, + 0x68, 0x72, 0x69, 0x76, 0x61, 0x72, 0x08, 0x4d, + 0x65, 0x68, 0x72, 0x08, 0x41, 0x62, 0x61, 0x6e, + 0x08, 0x41, 0x7a, 0x61, 0x72, 0x06, 0x44, 0x65, + 0x79, 0x0c, 0x42, 0x61, 0x68, 0x6d, 0x61, 0x6e, + 0x0c, 0x45, 0x73, 0x66, 0x61, 0x6e, 0x64, 0x04, + 0x41, 0x50, 0x1a, 0x42, 0x65, 0x66, 0x6f, 0x72, + 0x65, 0x20, 0x52, 0x2e, 0x4f, 0x2e, 0x43, 0x2e, + 0x0c, 0x52, 0x2e, 0x4f, 0x2e, 0x43, 0x2e, 0x12, + 0x63, 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, + 0x73, 0x08, 0x64, 0x61, 0x74, 0x65, 0x08, 0x6c, + 0x61, 0x74, 0x6e, 0x04, 0x6e, 0x75, 0x10, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, + 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, + 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x26, + 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, + 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0x1e, 0x6e, 0x65, 0x67, 0x61, + 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, + 0x65, 0x72, 0x6e, 0x0e, 0x64, 0x65, 0x63, 0x69, + 0x6d, 0x61, 0x6c, 0x26, 0x7b, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, 0xa0, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x3c, + 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, + 0x67, 0x6e, 0x7d, 0x7b, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x63, 0x79, 0x7d, 0xa0, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x10, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x2a, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x40, 0x7b, 0x6d, + 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, + 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x0e, 0x70, + 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x10, 0x70, + 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x02, + 0x2e, 0x02, 0x2c, 0x0a, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x06, 0x4e, 0x61, 0x4e, 0x06, 0x6e, 0x61, + 0x6e, 0x02, 0x2b, 0x10, 0x70, 0x6c, 0x75, 0x73, + 0x53, 0x69, 0x67, 0x6e, 0x02, 0x2d, 0x12, 0x6d, + 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x02, 0x25, 0x16, 0x70, 0x65, 0x72, 0x63, 0x65, + 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x03, 0x1e, + 0x22, 0x10, 0x69, 0x6e, 0x66, 0x69, 0x6e, 0x69, + 0x74, 0x79, 0x0f, 0x68, 0x0f, 0x44, 0x0f, 0x0b, + 0x0f, 0x58, 0x0f, 0x7a, 0x0f, 0x53, 0x0f, 0x0b, + 0x0f, 0x08, 0x74, 0x69, 0x62, 0x74, 0x0e, 0x73, + 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x04, 0x41, + 0x24, 0x06, 0x41, 0x55, 0x44, 0x04, 0x52, 0x24, + 0x06, 0x42, 0x52, 0x4c, 0x06, 0x43, 0x41, 0x24, + 0x06, 0x43, 0x41, 0x44, 0x02, 0xa5, 0x06, 0x43, + 0x4e, 0x59, 0x03, 0xac, 0x20, 0x06, 0x45, 0x55, + 0x52, 0x02, 0xa3, 0x06, 0x47, 0x42, 0x50, 0x06, + 0x48, 0x4b, 0x24, 0x06, 0x48, 0x4b, 0x44, 0x03, + 0xaa, 0x20, 0x06, 0x49, 0x4c, 0x53, 0x03, 0xb9, + 0x20, 0x06, 0x49, 0x4e, 0x52, 0x06, 0x4a, 0x50, + 0xa5, 0x06, 0x4a, 0x50, 0x59, 0x03, 0xa9, 0x20, + 0x06, 0x4b, 0x52, 0x57, 0x06, 0x4d, 0x58, 0x24, + 0x06, 0x4d, 0x58, 0x4e, 0x06, 0x4e, 0x5a, 0x24, + 0x06, 0x4e, 0x5a, 0x44, 0x06, 0x4e, 0x54, 0x24, + 0x06, 0x54, 0x57, 0x44, 0x06, 0x55, 0x53, 0x24, + 0x06, 0x55, 0x53, 0x44, 0x03, 0xab, 0x20, 0x06, + 0x56, 0x4e, 0x44, 0x08, 0x46, 0x43, 0x46, 0x41, + 0x06, 0x58, 0x41, 0x46, 0x06, 0x45, 0x43, 0x24, + 0x06, 0x58, 0x43, 0x44, 0x06, 0x43, 0x46, 0x41, + 0x06, 0x58, 0x4f, 0x46, 0x08, 0x43, 0x46, 0x50, + 0x46, 0x06, 0x58, 0x50, 0x46, 0x14, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, + 0x58, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, + 0x74, 0x6c, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x6a, + 0x73, 0x6f, 0x6e, 0x70, 0x2f, 0x62, 0x6f, 0x2d, + 0x43, 0x4e, 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, + 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, 0x27, 0x00, + 0xb9, 0x01, 0x9a, 0x6a, 0x01, 0xa0, 0x01, 0x00, + 0x00, 0x00, 0x39, 0xd0, 0x00, 0x00, 0x00, 0x43, + 0xd1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd2, 0x00, + 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd4, 0x00, 0x00, 0x00, 0x04, 0xd5, 0x00, + 0x00, 0x00, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x04, + 0xd7, 0x00, 0x00, 0x00, 0x04, 0xd8, 0x00, 0x00, + 0x00, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x04, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xdb, 0x00, 0x00, 0x00, + 0x04, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xdd, 0x00, + 0x00, 0x00, 0x04, 0xde, 0x00, 0x00, 0x00, 0x04, + 0xdf, 0x00, 0x00, 0x00, 0x04, 0xe0, 0x00, 0x00, + 0x00, 0x04, 0xe1, 0x00, 0x00, 0x00, 0x04, 0xe2, + 0x00, 0x00, 0x00, 0x26, 0x0f, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x00, 0x0a, 0x4d, 0xe4, 0x00, 0x00, + 0x00, 0x0a, 0x4d, 0xe5, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, + 0xe8, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, + 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x00, 0x04, 0xe6, + 0x00, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x04, 0xec, 0x00, 0x00, 0x00, + 0x4d, 0xed, 0x00, 0x00, 0x00, 0x04, 0xee, 0x00, + 0x00, 0x00, 0x4d, 0xef, 0x00, 0x00, 0x00, 0x04, + 0xf0, 0x00, 0x00, 0x00, 0x4d, 0xf1, 0x00, 0x00, + 0x00, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xf3, + 0x00, 0x00, 0x00, 0x04, 0xf4, 0x00, 0x00, 0x00, + 0x4d, 0xf5, 0x00, 0x00, 0x00, 0x04, 0xf6, 0x00, + 0x00, 0x00, 0x4d, 0xf7, 0x00, 0x00, 0x00, 0x04, + 0xf8, 0x00, 0x00, 0x00, 0x4d, 0xf9, 0x00, 0x00, + 0x00, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xfb, + 0x00, 0x00, 0x00, 0x04, 0xfc, 0x00, 0x00, 0x00, + 0x4d, 0xfd, 0x00, 0x00, 0x00, 0x04, 0xfe, 0x00, + 0x00, 0x00, 0x4d, 0xff, 0x00, 0x00, 0x00, 0x04, + 0x00, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x01, 0x00, + 0x00, 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, 0x03, + 0x01, 0x00, 0x00, 0x04, 0x04, 0x01, 0x00, 0x00, + 0x4d, 0x05, 0x01, 0x00, 0x00, 0x04, 0x06, 0x01, + 0x00, 0x00, 0x4d, 0x07, 0x01, 0x00, 0x00, 0x04, + 0x08, 0x01, 0x00, 0x00, 0x4d, 0x09, 0x01, 0x00, + 0x00, 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x0b, + 0x01, 0x00, 0x00, 0x04, 0x0c, 0x01, 0x00, 0x00, + 0x4d, 0x0d, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x01, + 0x00, 0x00, 0x4d, 0x0f, 0x01, 0x00, 0x00, 0x04, + 0x10, 0x01, 0x00, 0x00, 0x4d, 0x11, 0x01, 0x00, + 0x00, 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, 0x13, + 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, + 0x4d, 0x15, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x4d, 0x17, 0x01, 0x00, 0x00, 0x04, + 0x18, 0x01, 0x00, 0x00, 0x4d, 0x19, 0x01, 0x00, + 0x00, 0x04, 0x1a, 0x01, 0x00, 0x00, 0x4d, 0x1b, + 0x01, 0x00, 0x00, 0x04, 0x1c, 0x01, 0x00, 0x00, + 0x4d, 0x1d, 0x01, 0x00, 0x00, 0x04, 0x1e, 0x01, + 0x00, 0x00, 0x4d, 0x1f, 0x01, 0x00, 0x00, 0x04, + 0x20, 0x01, 0x00, 0x00, 0x4d, 0x21, 0x01, 0x00, + 0x00, 0x04, 0x22, 0x01, 0x00, 0x00, 0x4d, 0x23, + 0x01, 0x00, 0x00, 0x04, 0x24, 0x01, 0x00, 0x00, + 0x4d, 0x24, 0x01, 0x00, 0x00, 0x04, 0x25, 0x01, + 0x00, 0x00, 0x4d, 0x26, 0x01, 0x00, 0x00, 0x04, + 0x27, 0x01, 0x00, 0x00, 0x4d, 0x28, 0x01, 0x00, + 0x00, 0x04, 0x29, 0x01, 0x00, 0x00, 0x4d, 0x2a, + 0x01, 0x00, 0x00, 0x04, 0x2b, 0x01, 0x00, 0x00, + 0x4d, 0x2c, 0x01, 0x00, 0x00, 0x04, 0x2d, 0x01, + 0x00, 0x00, 0x4d, 0x2e, 0x01, 0x00, 0x00, 0x04, + 0x2f, 0x01, 0x00, 0x00, 0x4d, 0x30, 0x01, 0x00, + 0x00, 0x04, 0x31, 0x01, 0x00, 0x00, 0x4d, 0x32, + 0x01, 0x00, 0x00, 0x04, 0x33, 0x01, 0x00, 0x00, + 0x4d, 0x34, 0x01, 0x00, 0x00, 0x04, 0x35, 0x01, + 0x00, 0x00, 0x4d, 0x36, 0x01, 0x00, 0x00, 0x04, + 0x37, 0x01, 0x00, 0x00, 0x4d, 0x38, 0x01, 0x00, + 0x00, 0x4d, 0x39, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x3a, 0x01, 0x00, 0x00, 0x4d, 0x3b, 0x01, 0x00, + 0x00, 0x04, 0x33, 0x01, 0x00, 0x00, 0x4d, 0x34, + 0x01, 0x00, 0x00, 0x04, 0x2d, 0x01, 0x00, 0x00, + 0x4d, 0x2e, 0x01, 0x00, 0x00, 0x04, 0x27, 0x01, + 0x00, 0x00, 0x4d, 0x28, 0x01, 0x00, 0x00, 0x4d, + 0x3c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x3d, 0x01, + 0x00, 0x00, 0x4d, 0x3e, 0x01, 0x00, 0x00, 0x04, + 0x3f, 0x01, 0x00, 0x00, 0x4d, 0x40, 0x01, 0x00, + 0x00, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, 0x09, + 0x01, 0x00, 0x00, 0x04, 0x04, 0x01, 0x00, 0x00, + 0x4d, 0x05, 0x01, 0x00, 0x00, 0x4d, 0x41, 0x01, + 0x00, 0x00, 0x4d, 0x42, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x0b, 0xbe, 0x00, 0xbe, 0x01, 0xbe, 0x02, + 0xbe, 0x03, 0xbe, 0x04, 0xbe, 0x05, 0xbe, 0x06, + 0xbe, 0x07, 0xbe, 0x08, 0xbe, 0x09, 0xbe, 0x0a, + 0xbe, 0x0b, 0x26, 0x0c, 0x00, 0x4d, 0x43, 0x01, + 0x00, 0x00, 0x04, 0x44, 0x01, 0x00, 0x00, 0x04, + 0x45, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x43, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x43, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x74, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, + 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, 0xd5, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x0c, 0xbe, 0x0d, + 0xbe, 0x0e, 0xbe, 0x0f, 0xbe, 0x10, 0xbe, 0x11, + 0xbe, 0x12, 0xbe, 0x13, 0xbe, 0x14, 0xbe, 0x15, + 0xbe, 0x16, 0xbe, 0x17, 0x26, 0x0c, 0x00, 0x4d, + 0x43, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, + 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, + 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, + 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x5c, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x75, 0x01, 0x00, 0x00, 0x4d, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x4d, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, + 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x18, 0xbe, 0x19, 0xbe, 0x1a, 0xbe, + 0x1b, 0xbe, 0x1c, 0xbe, 0x1d, 0xbe, 0x1e, 0xbe, + 0x1f, 0xbe, 0x20, 0xbe, 0x21, 0xbe, 0x22, 0xbe, + 0x23, 0xbe, 0x24, 0x26, 0x0d, 0x00, 0x4d, 0x43, + 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, + 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, + 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, + 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, + 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, + 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, + 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, + 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, + 0x92, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, + 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, + 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, + 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, + 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, + 0x04, 0x92, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x5c, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, + 0x94, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0x43, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, + 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x93, + 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, + 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, + 0xd7, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x25, + 0xbe, 0x26, 0xbe, 0x27, 0xbe, 0x28, 0xbe, 0x29, + 0xbe, 0x2a, 0xbe, 0x2b, 0xbe, 0x2c, 0xbe, 0x2d, + 0xbe, 0x2e, 0xbe, 0x2f, 0xbe, 0x30, 0x26, 0x0c, + 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, + 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, + 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, + 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x5c, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x72, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x4d, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x4d, + 0x79, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x31, 0xbe, 0x32, 0xbe, + 0x33, 0xbe, 0x34, 0xbe, 0x35, 0xbe, 0x36, 0xbe, + 0x37, 0xbe, 0x38, 0xbe, 0x39, 0xbe, 0x3a, 0xbe, + 0x3b, 0xbe, 0x3c, 0xbe, 0x3d, 0x26, 0x0d, 0x00, + 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, + 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, + 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, + 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, + 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, + 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, + 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, + 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, + 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x26, 0x0d, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x95, + 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, + 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, + 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, + 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, + 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, + 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, + 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, + 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x5c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x72, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x93, 0x01, 0x00, + 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, 0x93, + 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, + 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x3e, 0xbe, 0x3f, 0xbe, 0x40, 0xbe, 0x41, + 0xbe, 0x42, 0xbe, 0x43, 0xbe, 0x44, 0xbe, 0x45, + 0xbe, 0x46, 0xbe, 0x47, 0xbe, 0x48, 0xbe, 0x49, + 0xbe, 0x4a, 0x26, 0x0d, 0x00, 0x4d, 0x43, 0x01, + 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, + 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, + 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, + 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, + 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, + 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, + 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, + 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, + 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, + 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, + 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, + 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, + 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, + 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, + 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, + 0xa1, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x5c, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x93, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, 0x93, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, + 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x4b, + 0xbe, 0x4c, 0xbe, 0x4d, 0xbe, 0x4e, 0xbe, 0x4f, + 0xbe, 0x50, 0xbe, 0x51, 0xbe, 0x52, 0xbe, 0x53, + 0xbe, 0x54, 0xbe, 0x55, 0xbe, 0x56, 0x26, 0x0c, + 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, + 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, + 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, + 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x5c, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x72, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x93, 0x01, 0x00, 0x00, + 0x04, 0x94, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, + 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, + 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x57, 0xbe, 0x58, 0xbe, 0x59, 0xbe, 0x5a, 0xbe, + 0x5b, 0xbe, 0x5c, 0xbe, 0x5d, 0xbe, 0x5e, 0xbe, + 0x5f, 0xbe, 0x60, 0xbe, 0x61, 0xbe, 0x62, 0x26, + 0x0c, 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, + 0x44, 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, + 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x5c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x72, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xa2, 0x01, 0x00, + 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, + 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, + 0x26, 0x04, 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, + 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, + 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, + 0xa5, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, + 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, + 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, + 0x26, 0x04, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, + 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x63, + 0xbe, 0x64, 0xbe, 0x65, 0xbe, 0x66, 0xbe, 0x67, + 0xbe, 0x68, 0xbe, 0x69, 0xbe, 0x6a, 0xbe, 0x6b, + 0xbe, 0x6c, 0xbe, 0x6d, 0xbe, 0x6e, 0xbe, 0x6f, + 0xbe, 0x70, 0x26, 0x0e, 0x00, 0x4d, 0x43, 0x01, + 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, + 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, + 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, + 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, + 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, + 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, + 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, + 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, + 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, + 0x26, 0x0e, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, + 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, + 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, + 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, + 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, + 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, + 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, + 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, + 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, 0x26, 0x0e, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x5c, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x72, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xb4, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, + 0x04, 0xb4, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xb4, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, + 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x71, 0xbe, 0x72, 0xbe, 0x73, 0xbe, 0x74, + 0xbe, 0x75, 0xbe, 0x76, 0xbe, 0x77, 0xbe, 0x78, + 0xbe, 0x79, 0xbe, 0x7a, 0xbe, 0x7b, 0xbe, 0x7c, + 0x26, 0x0c, 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, + 0x04, 0xb5, 0x01, 0x00, 0x00, 0x04, 0xb6, 0x01, + 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, + 0xb8, 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, + 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, 0x04, 0xbb, + 0x01, 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, + 0x04, 0xbd, 0x01, 0x00, 0x00, 0x04, 0xbe, 0x01, + 0x00, 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, 0x04, + 0xc0, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, + 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb7, + 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, + 0x04, 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, + 0x00, 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, + 0xbc, 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, + 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, + 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x43, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x72, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xc1, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x43, 0x01, + 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xc1, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x75, 0x01, 0x00, 0x00, 0x4d, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, + 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x7d, 0xbe, 0x7e, 0xbe, 0x7f, + 0xbe, 0x80, 0xbe, 0x81, 0xbe, 0x82, 0xbe, 0x83, + 0xbe, 0x84, 0xbe, 0x85, 0xbe, 0x86, 0xbe, 0x87, + 0xbe, 0x88, 0x26, 0x0c, 0x00, 0x4d, 0x43, 0x01, + 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, 0x00, 0x04, + 0xc3, 0x01, 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, + 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, + 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, + 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, + 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, 0x04, + 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, + 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xce, + 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, + 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, + 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, + 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, + 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, + 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, + 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x43, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xda, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x43, 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x74, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, + 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x89, 0xbe, 0x8a, + 0xbe, 0x8b, 0xbe, 0x8c, 0xbe, 0x8d, 0xbe, 0x8e, + 0xbe, 0x8f, 0xbe, 0x90, 0xbe, 0x91, 0xbe, 0x92, + 0xbe, 0x93, 0xbe, 0x94, 0x26, 0x0c, 0x00, 0x4d, + 0x43, 0x01, 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, + 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, 0x04, 0xc4, + 0x01, 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, + 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, + 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, + 0xc9, 0x01, 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, + 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, + 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xce, 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, + 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, + 0xd1, 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, + 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, + 0x01, 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, + 0x04, 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, + 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, + 0xd9, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x5c, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xda, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, 0xda, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, + 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x95, + 0xbe, 0x96, 0xbe, 0x97, 0xbe, 0x98, 0xbe, 0x99, + 0xbe, 0x9a, 0xbe, 0x9b, 0xbe, 0x9c, 0xbe, 0x9d, + 0xbe, 0x9e, 0xbe, 0x9f, 0xbe, 0xa0, 0x26, 0x0c, + 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, 0x44, + 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, + 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x5c, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x72, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xdb, 0x01, 0x00, 0x00, + 0x04, 0xdc, 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, + 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, + 0xdf, 0x01, 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, + 0x00, 0x04, 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, + 0x01, 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, + 0x04, 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, + 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, + 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, + 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, + 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, + 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, + 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, + 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, + 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, + 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, + 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, + 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, + 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, + 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, + 0x01, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, 0xfb, + 0x01, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, + 0x04, 0xfc, 0x01, 0x00, 0x00, 0x4d, 0x21, 0x00, + 0x00, 0x80, 0x04, 0xfd, 0x01, 0x00, 0x00, 0x4d, + 0x22, 0x00, 0x00, 0x80, 0x04, 0xfe, 0x01, 0x00, + 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, 0xff, + 0x01, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, + 0x04, 0x00, 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, + 0x00, 0x80, 0x04, 0x01, 0x02, 0x00, 0x00, 0x4d, + 0x26, 0x00, 0x00, 0x80, 0x04, 0x02, 0x02, 0x00, + 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, 0x03, + 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, + 0x04, 0x04, 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, + 0x00, 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, 0x4d, + 0x2a, 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, 0x00, + 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, 0x07, + 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, + 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, + 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, + 0x2e, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, + 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, 0x0b, + 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, + 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, + 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, + 0x32, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, + 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, 0x0f, + 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, + 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, + 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, + 0x36, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, + 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, 0x13, + 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, + 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, + 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, + 0x3a, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, + 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, 0x17, + 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, + 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, + 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, + 0x3e, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, + 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, 0x1b, + 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, + 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, + 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, + 0x42, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, + 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, 0x1f, + 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, + 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, + 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, + 0x46, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, + 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, 0x23, + 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, + 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, + 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, + 0x4a, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, + 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, 0x27, + 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, + 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, + 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, + 0x4e, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, + 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, 0x2b, + 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, + 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, + 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, + 0x52, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, + 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, 0x2f, + 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, + 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, + 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, + 0x56, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, + 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, 0x33, + 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, + 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, + 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, + 0x5a, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, + 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, 0x37, + 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, + 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, + 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, + 0x5e, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, + 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, 0x3b, + 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, + 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, + 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, + 0x62, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, + 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, 0x3f, + 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, + 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, + 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, + 0x66, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, + 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, 0x43, + 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, + 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, + 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, + 0x6a, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, + 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, 0x47, + 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, + 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, + 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, + 0x6e, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, + 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, 0x4b, + 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, + 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, + 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, + 0x72, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, + 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, 0x4f, + 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, + 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, + 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, + 0x76, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, + 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, 0x53, + 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, + 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, + 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, + 0x7a, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, + 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, 0x57, + 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, + 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, + 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, + 0x7e, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, + 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, 0x5b, + 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, + 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, + 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, + 0x82, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, + 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, 0x5f, + 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, + 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, + 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, + 0x86, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, + 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, 0x63, + 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, + 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, + 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, + 0x8a, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, + 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, 0x67, + 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, + 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, + 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, + 0x8e, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, + 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, 0x6b, + 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, + 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, + 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, + 0x92, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, + 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, 0x6f, + 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, + 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, + 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, + 0x96, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, + 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, 0x73, + 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, + 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, + 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, + 0x9a, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, + 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, 0x77, + 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, + 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, + 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, + 0x9e, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, + 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, 0x7b, + 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, + 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, + 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, + 0xa2, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, + 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, 0x7f, + 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, + 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, + 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, + 0xa6, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, + 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, 0x83, + 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, + 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, + 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, + 0xaa, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, + 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, 0x87, + 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, + 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, + 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, + 0xae, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, + 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, 0x8b, + 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, + 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, + 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, + 0xb2, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, + 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, 0x8f, + 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, + 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, + 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, + 0xb6, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, + 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, 0x93, + 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, + 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, + 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, + 0xba, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, + 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, 0x97, + 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, + 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, + 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, + 0xbe, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, + 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, 0x9b, + 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, + 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, + 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, + 0xc2, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, + 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, 0x9f, + 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, + 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, + 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, + 0xc6, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, + 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, 0xa3, + 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, + 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, + 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, + 0xca, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, + 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, 0xa7, + 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, + 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, + 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, + 0xce, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, + 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, 0xab, + 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, + 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, + 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, + 0xd2, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, + 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, 0xaf, + 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, + 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, + 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, + 0xd6, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, + 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, 0xb3, + 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, + 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, + 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, 0xb7, + 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, + 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, 0xbb, + 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, + 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, + 0xe2, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, + 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, 0xbf, + 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, + 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, + 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, + 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, + 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x80, 0x04, 0x03, 0x01, 0x00, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, 0x43, + 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, + 0x04, 0xdc, 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, + 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, + 0xdf, 0x01, 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, + 0x00, 0x04, 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, + 0x01, 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, + 0x04, 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, + 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, + 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, + 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, + 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, + 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, + 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, + 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, + 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, + 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, + 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, + 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, + 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, + 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, + 0x01, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, 0xfb, + 0x01, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, + 0x04, 0xfc, 0x01, 0x00, 0x00, 0x4d, 0x21, 0x00, + 0x00, 0x80, 0x04, 0xfd, 0x01, 0x00, 0x00, 0x4d, + 0x22, 0x00, 0x00, 0x80, 0x04, 0xfe, 0x01, 0x00, + 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, 0xff, + 0x01, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, + 0x04, 0x00, 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, + 0x00, 0x80, 0x04, 0x01, 0x02, 0x00, 0x00, 0x4d, + 0x26, 0x00, 0x00, 0x80, 0x04, 0x02, 0x02, 0x00, + 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, 0x03, + 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, + 0x04, 0x04, 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, + 0x00, 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, 0x4d, + 0x2a, 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, 0x00, + 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, 0x07, + 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, + 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, + 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, + 0x2e, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, + 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, 0x0b, + 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, + 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, + 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, + 0x32, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, + 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, 0x0f, + 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, + 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, + 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, + 0x36, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, + 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, 0x13, + 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, + 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, + 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, + 0x3a, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, + 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, 0x17, + 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, + 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, + 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, + 0x3e, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, + 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, 0x1b, + 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, + 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, + 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, + 0x42, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, + 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, 0x1f, + 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, + 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, + 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, + 0x46, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, + 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, 0x23, + 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, + 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, + 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, + 0x4a, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, + 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, 0x27, + 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, + 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, + 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, + 0x4e, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, + 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, 0x2b, + 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, + 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, + 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, + 0x52, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, + 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, 0x2f, + 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, + 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, + 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, + 0x56, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, + 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, 0x33, + 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, + 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, + 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, + 0x5a, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, + 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, 0x37, + 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, + 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, + 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, + 0x5e, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, + 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, 0x3b, + 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, + 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, + 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, + 0x62, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, + 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, 0x3f, + 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, + 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, + 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, + 0x66, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, + 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, 0x43, + 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, + 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, + 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, + 0x6a, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, + 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, 0x47, + 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, + 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, + 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, + 0x6e, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, + 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, 0x4b, + 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, + 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, + 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, + 0x72, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, + 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, 0x4f, + 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, + 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, + 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, + 0x76, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, + 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, 0x53, + 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, + 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, + 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, + 0x7a, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, + 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, 0x57, + 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, + 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, + 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, + 0x7e, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, + 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, 0x5b, + 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, + 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, + 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, + 0x82, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, + 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, 0x5f, + 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, + 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, + 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, + 0x86, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, + 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, 0x63, + 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, + 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, + 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, + 0x8a, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, + 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, 0x67, + 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, + 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, + 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, + 0x8e, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, + 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, 0x6b, + 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, + 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, + 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, + 0x92, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, + 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, 0x6f, + 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, + 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, + 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, + 0x96, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, + 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, 0x73, + 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, + 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, + 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, + 0x9a, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, + 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, 0x77, + 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, + 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, + 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, + 0x9e, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, + 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, 0x7b, + 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, + 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, + 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, + 0xa2, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, + 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, 0x7f, + 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, + 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, + 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, + 0xa6, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, + 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, 0x83, + 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, + 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, + 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, + 0xaa, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, + 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, 0x87, + 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, + 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, + 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, + 0xae, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, + 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, 0x8b, + 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, + 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, + 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, + 0xb2, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, + 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, 0x8f, + 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, + 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, + 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, + 0xb6, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, + 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, 0x93, + 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, + 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, + 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, + 0xba, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, + 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, 0x97, + 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, + 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, + 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, + 0xbe, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, + 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, 0x9b, + 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, + 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, + 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, + 0xc2, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, + 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, 0x9f, + 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, + 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, + 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, + 0xc6, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, + 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, 0xa3, + 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, + 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, + 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, + 0xca, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, + 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, 0xa7, + 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, + 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, + 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, + 0xce, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, + 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, 0xab, + 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, + 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, + 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, + 0xd2, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, + 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, 0xaf, + 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, + 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, + 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, + 0xd6, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, + 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, 0xb3, + 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, + 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, + 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, 0xb7, + 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, + 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, 0xbb, + 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, + 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, + 0xe2, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, + 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, 0xbf, + 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, + 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, + 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, 0xc5, + 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, + 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, + 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, + 0x04, 0xdc, 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, + 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, + 0xdf, 0x01, 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, + 0x00, 0x04, 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, + 0x01, 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, + 0x04, 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, + 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, + 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, + 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, + 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, + 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, + 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, + 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, + 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, + 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, + 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, + 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, + 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, + 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, + 0x01, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, 0xfb, + 0x01, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, + 0x04, 0xfc, 0x01, 0x00, 0x00, 0x4d, 0x21, 0x00, + 0x00, 0x80, 0x04, 0xfd, 0x01, 0x00, 0x00, 0x4d, + 0x22, 0x00, 0x00, 0x80, 0x04, 0xfe, 0x01, 0x00, + 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, 0xff, + 0x01, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, + 0x04, 0x00, 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, + 0x00, 0x80, 0x04, 0x01, 0x02, 0x00, 0x00, 0x4d, + 0x26, 0x00, 0x00, 0x80, 0x04, 0x02, 0x02, 0x00, + 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, 0x03, + 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, + 0x04, 0x04, 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, + 0x00, 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, 0x4d, + 0x2a, 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, 0x00, + 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, 0x07, + 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, + 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, + 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, + 0x2e, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, + 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, 0x0b, + 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, + 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, + 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, + 0x32, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, + 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, 0x0f, + 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, + 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, + 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, + 0x36, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, + 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, 0x13, + 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, + 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, + 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, + 0x3a, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, + 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, 0x17, + 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, + 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, + 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, + 0x3e, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, + 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, 0x1b, + 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, + 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, + 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, + 0x42, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, + 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, 0x1f, + 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, + 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, + 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, + 0x46, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, + 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, 0x23, + 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, + 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, + 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, + 0x4a, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, + 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, 0x27, + 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, + 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, + 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, + 0x4e, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, + 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, 0x2b, + 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, + 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, + 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, + 0x52, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, + 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, 0x2f, + 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, + 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, + 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, + 0x56, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, + 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, 0x33, + 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, + 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, + 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, + 0x5a, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, + 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, 0x37, + 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, + 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, + 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, + 0x5e, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, + 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, 0x3b, + 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, + 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, + 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, + 0x62, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, + 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, 0x3f, + 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, + 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, + 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, + 0x66, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, + 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, 0x43, + 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, + 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, + 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, + 0x6a, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, + 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, 0x47, + 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, + 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, + 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, + 0x6e, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, + 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, 0x4b, + 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, + 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, + 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, + 0x72, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, + 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, 0x4f, + 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, + 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, + 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, + 0x76, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, + 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, 0x53, + 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, + 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, + 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, + 0x7a, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, + 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, 0x57, + 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, + 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, + 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, + 0x7e, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, + 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, 0x5b, + 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, + 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, + 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, + 0x82, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, + 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, 0x5f, + 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, + 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, + 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, + 0x86, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, + 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, 0x63, + 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, + 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, + 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, + 0x8a, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, + 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, 0x67, + 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, + 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, + 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, + 0x8e, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, + 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, 0x6b, + 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, + 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, + 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, + 0x92, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, + 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, 0x6f, + 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, + 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, + 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, + 0x96, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, + 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, 0x73, + 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, + 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, + 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, + 0x9a, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, + 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, 0x77, + 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, + 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, + 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, + 0x9e, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, + 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, 0x7b, + 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, + 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, + 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, + 0xa2, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, + 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, 0x7f, + 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, + 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, + 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, + 0xa6, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, + 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, 0x83, + 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, + 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, + 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, + 0xaa, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, + 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, 0x87, + 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, + 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, + 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, + 0xae, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, + 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, 0x8b, + 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, + 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, + 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, + 0xb2, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, + 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, 0x8f, + 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, + 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, + 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, + 0xb6, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, + 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, 0x93, + 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, + 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, + 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, + 0xba, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, + 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, 0x97, + 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, + 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, + 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, + 0xbe, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, + 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, 0x9b, + 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, + 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, + 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, + 0xc2, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, + 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, 0x9f, + 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, + 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, + 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, + 0xc6, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, + 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, 0xa3, + 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, + 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, + 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, + 0xca, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, + 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, 0xa7, + 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, + 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, + 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, + 0xce, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, + 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, 0xab, + 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, + 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, + 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, + 0xd2, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, + 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, 0xaf, + 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, + 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, + 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, + 0xd6, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, + 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, 0xb3, + 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, + 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, + 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, 0xb7, + 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, + 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, 0xbb, + 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, + 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, + 0xe2, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, + 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, 0xbf, + 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, + 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, + 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, 0xc5, + 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, + 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, + 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x75, 0x01, 0x00, 0x00, 0x4d, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x4d, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0xa1, 0xbe, 0xa2, 0xbe, 0xa3, 0xbe, + 0xa4, 0xbe, 0xa5, 0xbe, 0xa6, 0xbe, 0xa7, 0xbe, + 0xa8, 0xbe, 0xa9, 0xbe, 0xaa, 0xbe, 0xab, 0xbe, + 0xac, 0x26, 0x0c, 0x00, 0x4d, 0x43, 0x01, 0x00, + 0x00, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x04, 0xca, + 0x02, 0x00, 0x00, 0x04, 0xcb, 0x02, 0x00, 0x00, + 0x04, 0xcc, 0x02, 0x00, 0x00, 0x04, 0xcd, 0x02, + 0x00, 0x00, 0x04, 0xce, 0x02, 0x00, 0x00, 0x04, + 0xcf, 0x02, 0x00, 0x00, 0x04, 0xd0, 0x02, 0x00, + 0x00, 0x04, 0xd1, 0x02, 0x00, 0x00, 0x04, 0xd2, + 0x02, 0x00, 0x00, 0x04, 0xd3, 0x02, 0x00, 0x00, + 0x04, 0xd4, 0x02, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xc9, 0x02, + 0x00, 0x00, 0x04, 0xca, 0x02, 0x00, 0x00, 0x04, + 0xcb, 0x02, 0x00, 0x00, 0x04, 0xcc, 0x02, 0x00, + 0x00, 0x04, 0xcd, 0x02, 0x00, 0x00, 0x04, 0xce, + 0x02, 0x00, 0x00, 0x04, 0xcf, 0x02, 0x00, 0x00, + 0x04, 0xd0, 0x02, 0x00, 0x00, 0x04, 0xd1, 0x02, + 0x00, 0x00, 0x04, 0xd2, 0x02, 0x00, 0x00, 0x04, + 0xd3, 0x02, 0x00, 0x00, 0x04, 0xd4, 0x02, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x43, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x72, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xd5, + 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x43, + 0x01, 0x00, 0x00, 0x04, 0xd5, 0x02, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xd5, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x4d, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x4d, + 0x79, 0x01, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0xad, 0xbe, 0xae, 0xbe, + 0xaf, 0xbe, 0xb0, 0xbe, 0xb1, 0xbe, 0xb2, 0xbe, + 0xb3, 0xbe, 0xb4, 0xbe, 0xb5, 0xbe, 0xb6, 0xbe, + 0xb7, 0xbe, 0xb8, 0x26, 0x0c, 0x00, 0x4d, 0x43, + 0x01, 0x00, 0x00, 0x04, 0x44, 0x01, 0x00, 0x00, + 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x43, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xd6, 0x02, 0x00, 0x00, 0x04, 0xd7, 0x02, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x43, 0x01, + 0x00, 0x00, 0x04, 0xd6, 0x02, 0x00, 0x00, 0x04, + 0xd7, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd6, 0x02, 0x00, + 0x00, 0x04, 0xd7, 0x02, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x74, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, + 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x02, 0x00, 0x00, 0x4d, + 0xd9, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xda, 0x02, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xdb, 0x02, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xdc, 0x02, 0x00, + 0x00, 0x4d, 0xdd, 0x02, 0x00, 0x00, 0x04, 0xde, + 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x02, 0x00, 0x00, + 0x4d, 0xe0, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xe1, + 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x02, 0x00, 0x00, + 0x04, 0xe2, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x02, + 0x00, 0x00, 0x4d, 0xe3, 0x02, 0x00, 0x00, 0x0b, + 0x04, 0xe4, 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x02, + 0x00, 0x00, 0x04, 0xe5, 0x02, 0x00, 0x00, 0x4d, + 0xdf, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x02, 0x00, + 0x00, 0x4d, 0xe7, 0x02, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0xe8, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x02, + 0x00, 0x00, 0x04, 0xe9, 0x02, 0x00, 0x00, 0x4d, + 0xea, 0x02, 0x00, 0x00, 0x04, 0xeb, 0x02, 0x00, + 0x00, 0x4d, 0xec, 0x02, 0x00, 0x00, 0x04, 0xed, + 0x02, 0x00, 0x00, 0x4d, 0xee, 0x02, 0x00, 0x00, + 0x04, 0xef, 0x02, 0x00, 0x00, 0x4d, 0xf0, 0x02, + 0x00, 0x00, 0x04, 0xf1, 0x02, 0x00, 0x00, 0x4d, + 0xf2, 0x02, 0x00, 0x00, 0x04, 0xf3, 0x02, 0x00, + 0x00, 0x4d, 0xf4, 0x02, 0x00, 0x00, 0x4d, 0xda, + 0x02, 0x00, 0x00, 0x0b, 0x04, 0xe8, 0x02, 0x00, + 0x00, 0x4d, 0xe0, 0x02, 0x00, 0x00, 0x04, 0xe9, + 0x02, 0x00, 0x00, 0x4d, 0xea, 0x02, 0x00, 0x00, + 0x04, 0xf5, 0x02, 0x00, 0x00, 0x4d, 0xec, 0x02, + 0x00, 0x00, 0x04, 0xed, 0x02, 0x00, 0x00, 0x4d, + 0xee, 0x02, 0x00, 0x00, 0x04, 0xef, 0x02, 0x00, + 0x00, 0x4d, 0xf0, 0x02, 0x00, 0x00, 0x04, 0xf1, + 0x02, 0x00, 0x00, 0x4d, 0xf2, 0x02, 0x00, 0x00, + 0x04, 0xf3, 0x02, 0x00, 0x00, 0x4d, 0xf4, 0x02, + 0x00, 0x00, 0x4d, 0xf6, 0x02, 0x00, 0x00, 0x4d, + 0xf7, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xf8, 0x02, + 0x00, 0x00, 0x4d, 0xf9, 0x02, 0x00, 0x00, 0x04, + 0xfa, 0x02, 0x00, 0x00, 0x4d, 0xfb, 0x02, 0x00, + 0x00, 0x04, 0xfc, 0x02, 0x00, 0x00, 0x4d, 0xfd, + 0x02, 0x00, 0x00, 0x04, 0xfe, 0x02, 0x00, 0x00, + 0x4d, 0xff, 0x02, 0x00, 0x00, 0x04, 0x00, 0x03, + 0x00, 0x00, 0x4d, 0x01, 0x03, 0x00, 0x00, 0x04, + 0x02, 0x03, 0x00, 0x00, 0x4d, 0x03, 0x03, 0x00, + 0x00, 0x04, 0x04, 0x03, 0x00, 0x00, 0x4d, 0x05, + 0x03, 0x00, 0x00, 0x04, 0x06, 0x03, 0x00, 0x00, + 0x4d, 0x07, 0x03, 0x00, 0x00, 0x04, 0x08, 0x03, + 0x00, 0x00, 0x4d, 0x09, 0x03, 0x00, 0x00, 0x04, + 0x0a, 0x03, 0x00, 0x00, 0x4d, 0x0b, 0x03, 0x00, + 0x00, 0x04, 0x0c, 0x03, 0x00, 0x00, 0x4d, 0x0d, + 0x03, 0x00, 0x00, 0x04, 0x0e, 0x03, 0x00, 0x00, + 0x4d, 0x0f, 0x03, 0x00, 0x00, 0x04, 0x10, 0x03, + 0x00, 0x00, 0x4d, 0x11, 0x03, 0x00, 0x00, 0x04, + 0x12, 0x03, 0x00, 0x00, 0x4d, 0x13, 0x03, 0x00, + 0x00, 0x04, 0x14, 0x03, 0x00, 0x00, 0x4d, 0x15, + 0x03, 0x00, 0x00, 0x04, 0x16, 0x03, 0x00, 0x00, + 0x4d, 0x17, 0x03, 0x00, 0x00, 0x04, 0x18, 0x03, + 0x00, 0x00, 0x4d, 0x19, 0x03, 0x00, 0x00, 0x04, + 0x1a, 0x03, 0x00, 0x00, 0x4d, 0x1b, 0x03, 0x00, + 0x00, 0x04, 0x1c, 0x03, 0x00, 0x00, 0x4d, 0x1d, + 0x03, 0x00, 0x00, 0x04, 0x1e, 0x03, 0x00, 0x00, + 0x4d, 0x1f, 0x03, 0x00, 0x00, 0x4d, 0x20, 0x03, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x00, 0x24, + 0x01, 0x00, 0xcc, 0x28, 0xc2, 0x0c, 0x01, 0x00, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, + 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_bs_size = 24701; + +const uint8_t intl_bs[24701] = { + 0x01, 0xd0, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x62, 0x73, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x0e, + 0x7b, 0x31, 0x7d, 0x20, 0x7b, 0x30, 0x7d, 0x0a, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, 0x65, + 0x64, 0x69, 0x75, 0x6d, 0x16, 0x7b, 0x31, 0x7d, + 0x20, 0x27, 0x75, 0x27, 0x20, 0x7b, 0x30, 0x7d, + 0x08, 0x66, 0x75, 0x6c, 0x6c, 0x08, 0x6c, 0x6f, + 0x6e, 0x67, 0x02, 0x64, 0x06, 0x63, 0x63, 0x63, + 0x02, 0x45, 0x0c, 0x45, 0x2c, 0x20, 0x64, 0x64, + 0x2e, 0x04, 0x45, 0x64, 0x10, 0x45, 0x20, 0x68, + 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x06, 0x45, 0x68, + 0x6d, 0x0e, 0x45, 0x20, 0x48, 0x48, 0x3a, 0x6d, + 0x6d, 0x06, 0x45, 0x48, 0x6d, 0x16, 0x45, 0x20, + 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, + 0x61, 0x08, 0x45, 0x68, 0x6d, 0x73, 0x14, 0x45, + 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x08, 0x45, 0x48, 0x6d, 0x73, 0x08, 0x79, + 0x2e, 0x20, 0x47, 0x04, 0x47, 0x79, 0x10, 0x4d, + 0x4d, 0x4d, 0x20, 0x79, 0x2e, 0x20, 0x47, 0x0a, + 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x18, 0x64, 0x64, + 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x2e, + 0x20, 0x47, 0x0c, 0x47, 0x79, 0x4d, 0x4d, 0x4d, + 0x64, 0x1e, 0x45, 0x2c, 0x20, 0x64, 0x64, 0x2e, + 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x2e, 0x20, + 0x47, 0x0e, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x45, + 0x64, 0x06, 0x68, 0x20, 0x61, 0x02, 0x68, 0x04, + 0x48, 0x48, 0x02, 0x48, 0x0e, 0x68, 0x68, 0x3a, + 0x6d, 0x6d, 0x20, 0x61, 0x04, 0x68, 0x6d, 0x0a, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x04, 0x48, 0x6d, + 0x14, 0x68, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x61, 0x06, 0x68, 0x6d, 0x73, 0x10, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x06, 0x48, 0x6d, 0x73, 0x16, 0x68, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x20, 0x76, + 0x08, 0x68, 0x6d, 0x73, 0x76, 0x14, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x76, + 0x08, 0x48, 0x6d, 0x73, 0x76, 0x10, 0x68, 0x3a, + 0x6d, 0x6d, 0x20, 0x61, 0x20, 0x76, 0x06, 0x68, + 0x6d, 0x76, 0x0e, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x20, 0x76, 0x06, 0x48, 0x6d, 0x76, 0x02, 0x4c, + 0x02, 0x4d, 0x0c, 0x64, 0x64, 0x2e, 0x4d, 0x4d, + 0x2e, 0x04, 0x4d, 0x64, 0x12, 0x45, 0x2c, 0x20, + 0x64, 0x64, 0x2e, 0x4d, 0x4d, 0x2e, 0x06, 0x4d, + 0x45, 0x64, 0x0e, 0x64, 0x64, 0x2e, 0x20, 0x4d, + 0x4d, 0x2e, 0x08, 0x4d, 0x4d, 0x64, 0x64, 0x06, + 0x4c, 0x4c, 0x4c, 0x06, 0x4d, 0x4d, 0x4d, 0x0e, + 0x64, 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x08, + 0x4d, 0x4d, 0x4d, 0x64, 0x14, 0x45, 0x2c, 0x20, + 0x64, 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x0a, + 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0e, 0x64, 0x2e, + 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, + 0x4d, 0x4d, 0x64, 0x14, 0x45, 0x2c, 0x20, 0x64, + 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x0c, 0x4d, + 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x04, 0x6d, 0x73, 0x04, 0x79, + 0x2e, 0x02, 0x79, 0x0a, 0x4d, 0x4d, 0x2e, 0x79, + 0x2e, 0x04, 0x79, 0x4d, 0x10, 0x64, 0x64, 0x2e, + 0x4d, 0x4d, 0x2e, 0x79, 0x2e, 0x06, 0x79, 0x4d, + 0x64, 0x16, 0x45, 0x2c, 0x20, 0x64, 0x64, 0x2e, + 0x4d, 0x4d, 0x2e, 0x79, 0x2e, 0x08, 0x79, 0x4d, + 0x45, 0x64, 0x0c, 0x4d, 0x4d, 0x2e, 0x20, 0x79, + 0x2e, 0x06, 0x79, 0x4d, 0x4d, 0x0c, 0x4d, 0x4d, + 0x4d, 0x20, 0x79, 0x2e, 0x08, 0x79, 0x4d, 0x4d, + 0x4d, 0x14, 0x64, 0x64, 0x2e, 0x20, 0x4d, 0x4d, + 0x4d, 0x20, 0x79, 0x2e, 0x0a, 0x79, 0x4d, 0x4d, + 0x4d, 0x64, 0x1a, 0x45, 0x2c, 0x20, 0x64, 0x64, + 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x2e, + 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0e, + 0x4c, 0x4c, 0x4c, 0x4c, 0x20, 0x79, 0x2e, 0x0a, + 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, 0x79, 0x20, + 0x51, 0x51, 0x51, 0x08, 0x79, 0x51, 0x51, 0x51, + 0x0c, 0x79, 0x20, 0x51, 0x51, 0x51, 0x51, 0x0a, + 0x79, 0x51, 0x51, 0x51, 0x51, 0x20, 0x61, 0x76, + 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x22, 0x45, + 0x45, 0x45, 0x45, 0x2c, 0x20, 0x64, 0x64, 0x2e, + 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x2e, + 0x14, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x45, 0x45, + 0x45, 0x45, 0x64, 0x16, 0x64, 0x64, 0x2e, 0x20, + 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x2e, 0x0c, + 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x16, 0x64, + 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x2e, 0x20, + 0x79, 0x2e, 0x12, 0x64, 0x64, 0x2e, 0x4d, 0x4d, + 0x2e, 0x79, 0x79, 0x2e, 0x16, 0x64, 0x61, 0x74, + 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, + 0x1a, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x7a, 0x7a, 0x7a, 0x7a, 0x12, 0x68, + 0x6d, 0x6d, 0x73, 0x73, 0x7a, 0x7a, 0x7a, 0x7a, + 0x14, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x7a, 0x08, 0x68, 0x6d, 0x73, 0x7a, + 0x16, 0x74, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x73, 0x0e, 0x66, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x73, 0x02, 0x6a, 0x02, 0x66, + 0x02, 0x6d, 0x02, 0x61, 0x02, 0x73, 0x02, 0x6f, + 0x02, 0x6e, 0x0c, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x06, 0x6a, 0x61, 0x6e, 0x06, 0x66, 0x65, + 0x62, 0x06, 0x6d, 0x61, 0x72, 0x06, 0x61, 0x70, + 0x72, 0x06, 0x6d, 0x61, 0x6a, 0x06, 0x6a, 0x75, + 0x6e, 0x06, 0x6a, 0x75, 0x6c, 0x06, 0x61, 0x75, + 0x67, 0x06, 0x73, 0x65, 0x70, 0x06, 0x6f, 0x6b, + 0x74, 0x06, 0x6e, 0x6f, 0x76, 0x06, 0x64, 0x65, + 0x63, 0x0c, 0x6a, 0x61, 0x6e, 0x75, 0x61, 0x72, + 0x0e, 0x66, 0x65, 0x62, 0x72, 0x75, 0x61, 0x72, + 0x08, 0x6d, 0x61, 0x72, 0x74, 0x0a, 0x61, 0x70, + 0x72, 0x69, 0x6c, 0x08, 0x6a, 0x75, 0x6e, 0x69, + 0x08, 0x6a, 0x75, 0x6c, 0x69, 0x0c, 0x61, 0x75, + 0x67, 0x75, 0x73, 0x74, 0x12, 0x73, 0x65, 0x70, + 0x74, 0x65, 0x6d, 0x62, 0x61, 0x72, 0x0e, 0x6f, + 0x6b, 0x74, 0x6f, 0x62, 0x61, 0x72, 0x10, 0x6e, + 0x6f, 0x76, 0x65, 0x6d, 0x62, 0x61, 0x72, 0x10, + 0x64, 0x65, 0x63, 0x65, 0x6d, 0x62, 0x61, 0x72, + 0x0c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x73, 0x02, + 0x4e, 0x02, 0x50, 0x02, 0x55, 0x02, 0x53, 0x03, + 0x0c, 0x01, 0x06, 0x6e, 0x65, 0x64, 0x06, 0x70, + 0x6f, 0x6e, 0x06, 0x75, 0x74, 0x6f, 0x06, 0x73, + 0x72, 0x69, 0x07, 0x0d, 0x01, 0x65, 0x00, 0x74, + 0x00, 0x06, 0x70, 0x65, 0x74, 0x06, 0x73, 0x75, + 0x62, 0x10, 0x6e, 0x65, 0x64, 0x6a, 0x65, 0x6c, + 0x6a, 0x61, 0x16, 0x70, 0x6f, 0x6e, 0x65, 0x64, + 0x6a, 0x65, 0x6c, 0x6a, 0x61, 0x6b, 0x0c, 0x75, + 0x74, 0x6f, 0x72, 0x61, 0x6b, 0x0e, 0x73, 0x72, + 0x69, 0x6a, 0x65, 0x64, 0x61, 0x11, 0x0d, 0x01, + 0x65, 0x00, 0x74, 0x00, 0x76, 0x00, 0x72, 0x00, + 0x74, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x0a, 0x70, + 0x65, 0x74, 0x61, 0x6b, 0x0c, 0x73, 0x75, 0x62, + 0x6f, 0x74, 0x61, 0x08, 0x64, 0x61, 0x79, 0x73, + 0x04, 0x42, 0x45, 0x08, 0x65, 0x72, 0x61, 0x73, + 0x16, 0x70, 0x72, 0x69, 0x6a, 0x65, 0x20, 0x70, + 0x6f, 0x64, 0x6e, 0x65, 0x04, 0x61, 0x6d, 0x0e, + 0x70, 0x6f, 0x70, 0x6f, 0x64, 0x6e, 0x65, 0x04, + 0x70, 0x6d, 0x14, 0x64, 0x61, 0x79, 0x50, 0x65, + 0x72, 0x69, 0x6f, 0x64, 0x73, 0x06, 0x4d, 0x30, + 0x31, 0x06, 0x4d, 0x30, 0x32, 0x06, 0x4d, 0x30, + 0x33, 0x06, 0x4d, 0x30, 0x34, 0x06, 0x4d, 0x30, + 0x35, 0x06, 0x4d, 0x30, 0x36, 0x06, 0x4d, 0x30, + 0x37, 0x06, 0x4d, 0x30, 0x38, 0x06, 0x4d, 0x30, + 0x39, 0x06, 0x4d, 0x31, 0x30, 0x06, 0x4d, 0x31, + 0x31, 0x06, 0x4d, 0x31, 0x32, 0x08, 0x54, 0x6f, + 0x75, 0x74, 0x08, 0x42, 0x61, 0x62, 0x61, 0x0a, + 0x48, 0x61, 0x74, 0x6f, 0x72, 0x0a, 0x4b, 0x69, + 0x61, 0x68, 0x6b, 0x08, 0x54, 0x6f, 0x62, 0x61, + 0x0c, 0x41, 0x6d, 0x73, 0x68, 0x69, 0x72, 0x10, + 0x42, 0x61, 0x72, 0x61, 0x6d, 0x68, 0x61, 0x74, + 0x12, 0x42, 0x61, 0x72, 0x61, 0x6d, 0x6f, 0x75, + 0x64, 0x61, 0x0e, 0x42, 0x61, 0x73, 0x68, 0x61, + 0x6e, 0x73, 0x0a, 0x50, 0x61, 0x6f, 0x6e, 0x61, + 0x08, 0x45, 0x70, 0x65, 0x70, 0x0a, 0x4d, 0x65, + 0x73, 0x72, 0x61, 0x0a, 0x4e, 0x61, 0x73, 0x69, + 0x65, 0x08, 0x45, 0x52, 0x41, 0x30, 0x08, 0x45, + 0x52, 0x41, 0x31, 0x10, 0x4d, 0x65, 0x73, 0x6b, + 0x65, 0x72, 0x65, 0x6d, 0x0c, 0x54, 0x65, 0x6b, + 0x65, 0x6d, 0x74, 0x0a, 0x48, 0x65, 0x64, 0x61, + 0x72, 0x0c, 0x54, 0x61, 0x68, 0x73, 0x61, 0x73, + 0x06, 0x54, 0x65, 0x72, 0x0e, 0x59, 0x65, 0x6b, + 0x61, 0x74, 0x69, 0x74, 0x0e, 0x4d, 0x65, 0x67, + 0x61, 0x62, 0x69, 0x74, 0x0c, 0x4d, 0x69, 0x61, + 0x7a, 0x69, 0x61, 0x0c, 0x47, 0x65, 0x6e, 0x62, + 0x6f, 0x74, 0x08, 0x53, 0x65, 0x6e, 0x65, 0x0a, + 0x48, 0x61, 0x6d, 0x6c, 0x65, 0x0e, 0x4e, 0x65, + 0x68, 0x61, 0x73, 0x73, 0x65, 0x0e, 0x50, 0x61, + 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x10, 0x70, 0x2e, + 0x20, 0x6e, 0x2e, 0x20, 0x65, 0x2e, 0x0a, 0x6e, + 0x2e, 0x20, 0x65, 0x2e, 0x0e, 0x70, 0x72, 0x2e, + 0x6e, 0x2e, 0x65, 0x2e, 0x08, 0x6e, 0x2e, 0x65, + 0x2e, 0x1c, 0x50, 0x72, 0x69, 0x6a, 0x65, 0x20, + 0x6e, 0x6f, 0x76, 0x65, 0x20, 0x65, 0x72, 0x65, + 0x10, 0x4e, 0x6f, 0x76, 0x65, 0x20, 0x65, 0x72, + 0x65, 0x12, 0x70, 0x72, 0x2e, 0x20, 0x6e, 0x2e, + 0x20, 0x65, 0x2e, 0x0c, 0x54, 0x69, 0x73, 0x68, + 0x72, 0x69, 0x0e, 0x48, 0x65, 0x73, 0x68, 0x76, + 0x61, 0x6e, 0x0c, 0x4b, 0x69, 0x73, 0x6c, 0x65, + 0x76, 0x0a, 0x54, 0x65, 0x76, 0x65, 0x74, 0x0c, + 0x53, 0x68, 0x65, 0x76, 0x61, 0x74, 0x0c, 0x41, + 0x64, 0x61, 0x72, 0x20, 0x49, 0x08, 0x41, 0x64, + 0x61, 0x72, 0x0a, 0x4e, 0x69, 0x73, 0x61, 0x6e, + 0x08, 0x49, 0x79, 0x61, 0x72, 0x0a, 0x53, 0x69, + 0x76, 0x61, 0x6e, 0x0a, 0x54, 0x61, 0x6d, 0x75, + 0x7a, 0x04, 0x41, 0x76, 0x08, 0x45, 0x6c, 0x75, + 0x6c, 0x0e, 0x41, 0x64, 0x61, 0x72, 0x20, 0x49, + 0x49, 0x04, 0x41, 0x4d, 0x0e, 0x43, 0x68, 0x61, + 0x69, 0x74, 0x72, 0x61, 0x10, 0x56, 0x61, 0x69, + 0x73, 0x61, 0x6b, 0x68, 0x61, 0x10, 0x4a, 0x79, + 0x61, 0x69, 0x73, 0x74, 0x68, 0x61, 0x0c, 0x41, + 0x73, 0x61, 0x64, 0x68, 0x61, 0x0e, 0x53, 0x72, + 0x61, 0x76, 0x61, 0x6e, 0x61, 0x0c, 0x42, 0x68, + 0x61, 0x64, 0x72, 0x61, 0x0c, 0x41, 0x73, 0x76, + 0x69, 0x6e, 0x61, 0x0e, 0x4b, 0x61, 0x72, 0x74, + 0x69, 0x6b, 0x61, 0x14, 0x41, 0x67, 0x72, 0x61, + 0x68, 0x61, 0x79, 0x61, 0x6e, 0x61, 0x0a, 0x50, + 0x61, 0x75, 0x73, 0x61, 0x0a, 0x4d, 0x61, 0x67, + 0x68, 0x61, 0x10, 0x50, 0x68, 0x61, 0x6c, 0x67, + 0x75, 0x6e, 0x61, 0x08, 0x53, 0x61, 0x6b, 0x61, + 0x08, 0x4d, 0x75, 0x68, 0x2e, 0x08, 0x53, 0x61, + 0x66, 0x2e, 0x0c, 0x52, 0x61, 0x62, 0x2e, 0x20, + 0x49, 0x0e, 0x52, 0x61, 0x62, 0x2e, 0x20, 0x49, + 0x49, 0x0c, 0x4a, 0x75, 0x6d, 0x2e, 0x20, 0x49, + 0x0e, 0x4a, 0x75, 0x6d, 0x2e, 0x20, 0x49, 0x49, + 0x08, 0x52, 0x61, 0x6a, 0x2e, 0x08, 0x53, 0x68, + 0x61, 0x2e, 0x08, 0x52, 0x61, 0x6d, 0x2e, 0x0a, + 0x53, 0x68, 0x61, 0x77, 0x2e, 0x11, 0x44, 0x00, + 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, + 0x2d, 0x00, 0x51, 0x00, 0x2e, 0x00, 0x11, 0x44, + 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, + 0x00, 0x2d, 0x00, 0x48, 0x00, 0x2e, 0x00, 0x10, + 0x4d, 0x75, 0x68, 0x61, 0x72, 0x72, 0x61, 0x6d, + 0x0a, 0x53, 0x61, 0x66, 0x61, 0x72, 0x0f, 0x52, + 0x00, 0x61, 0x00, 0x62, 0x00, 0x69, 0x00, 0xbb, + 0x02, 0x20, 0x00, 0x49, 0x00, 0x11, 0x52, 0x00, + 0x61, 0x00, 0x62, 0x00, 0x69, 0x00, 0xbb, 0x02, + 0x20, 0x00, 0x49, 0x00, 0x49, 0x00, 0x10, 0x4a, + 0x75, 0x6d, 0x61, 0x64, 0x61, 0x20, 0x49, 0x12, + 0x4a, 0x75, 0x6d, 0x61, 0x64, 0x61, 0x20, 0x49, + 0x49, 0x0a, 0x52, 0x61, 0x6a, 0x61, 0x62, 0x0f, + 0x53, 0x00, 0x68, 0x00, 0x61, 0x00, 0xbb, 0x02, + 0x62, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x0e, 0x52, + 0x61, 0x6d, 0x61, 0x64, 0x61, 0x6e, 0x0e, 0x53, + 0x68, 0x61, 0x77, 0x77, 0x61, 0x6c, 0x19, 0x44, + 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, + 0x00, 0x2d, 0x00, 0x51, 0x00, 0x69, 0x00, 0xbb, + 0x02, 0x64, 0x00, 0x61, 0x00, 0x68, 0x00, 0x19, + 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, + 0x6c, 0x00, 0x2d, 0x00, 0x48, 0x00, 0x69, 0x00, + 0x6a, 0x00, 0x6a, 0x00, 0x61, 0x00, 0x68, 0x00, + 0x04, 0x41, 0x48, 0x1f, 0x54, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x36, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x48, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x36, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x36, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x29, 0x00, 0x21, 0x53, + 0x00, 0x68, 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, + 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4b, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x57, 0x00, + 0x61, 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x1f, 0x52, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x1d, 0x59, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4a, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6b, 0x00, 0x61, + 0x00, 0x6d, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x2d, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x2b, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x2d, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, 0x2d, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x2a, 0x4a, 0x69, 0x6e, 0x67, 0x6f, 0x2d, 0x6b, + 0x65, 0x69, 0x75, 0x6e, 0x20, 0x28, 0x37, 0x36, + 0x37, 0x2d, 0x37, 0x37, 0x30, 0x29, 0x1d, 0x48, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x2d, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x2d, 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x38, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, 0x44, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x64, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x38, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, + 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4a, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x1d, 0x4b, 0x00, 0x61, 0x00, 0x6a, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x53, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x20, 0x54, 0x65, 0x6e, + 0x2d, 0x61, 0x6e, 0x20, 0x28, 0x38, 0x35, 0x37, + 0x2d, 0x38, 0x35, 0x39, 0x29, 0x1f, 0x4a, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, 0x45, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, 0x6e, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1b, 0x4c, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x1d, 0x41, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, 0x69, 0x00, + 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1d, 0x45, + 0x00, 0x69, 0x00, 0x73, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x4a, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x29, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, 0x4a, + 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x29, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4c, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, + 0x4a, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x24, 0x54, 0x65, 0x6e, 0x2d, 0x65, 0x69, 0x20, + 0x28, 0x31, 0x31, 0x31, 0x30, 0x2d, 0x31, 0x31, + 0x31, 0x33, 0x29, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, + 0x01, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, + 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x6a, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x48, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x48, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x45, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x68, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x6d, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, + 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x59, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x21, 0x4a, 0x00, 0x75, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x29, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x29, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1f, + 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x41, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, + 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x29, 0x00, 0x27, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x75, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x29, 0x52, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x4e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1f, 0x4c, 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x74, 0x00, 0x73, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x27, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x45, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x21, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x45, 0x00, 0x69, 0x00, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x72, + 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, + 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, + 0x45, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, + 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x48, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x65, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x23, 0x41, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, 0x02, 0x54, + 0x0a, 0x4d, 0x65, 0x69, 0x6a, 0x69, 0x0d, 0x54, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x0b, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x0c, 0x48, + 0x65, 0x69, 0x73, 0x65, 0x69, 0x12, 0x46, 0x61, + 0x72, 0x76, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x16, + 0x4f, 0x72, 0x64, 0x69, 0x62, 0x65, 0x68, 0x65, + 0x73, 0x68, 0x74, 0x0e, 0x4b, 0x68, 0x6f, 0x72, + 0x64, 0x61, 0x64, 0x06, 0x54, 0x69, 0x72, 0x0c, + 0x4d, 0x6f, 0x72, 0x64, 0x61, 0x64, 0x12, 0x53, + 0x68, 0x61, 0x68, 0x72, 0x69, 0x76, 0x61, 0x72, + 0x08, 0x4d, 0x65, 0x68, 0x72, 0x08, 0x41, 0x62, + 0x61, 0x6e, 0x08, 0x41, 0x7a, 0x61, 0x72, 0x06, + 0x44, 0x65, 0x79, 0x0c, 0x42, 0x61, 0x68, 0x6d, + 0x61, 0x6e, 0x0c, 0x45, 0x73, 0x66, 0x61, 0x6e, + 0x64, 0x04, 0x41, 0x50, 0x1a, 0x42, 0x65, 0x66, + 0x6f, 0x72, 0x65, 0x20, 0x52, 0x2e, 0x4f, 0x2e, + 0x43, 0x2e, 0x0c, 0x52, 0x2e, 0x4f, 0x2e, 0x43, + 0x2e, 0x12, 0x63, 0x61, 0x6c, 0x65, 0x6e, 0x64, + 0x61, 0x72, 0x73, 0x08, 0x64, 0x61, 0x74, 0x65, + 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, 0x75, + 0x10, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0x1e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, + 0x6e, 0x26, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x6e, 0x65, + 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, + 0x74, 0x74, 0x65, 0x72, 0x6e, 0x0e, 0x64, 0x65, + 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x26, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0xa0, 0x7b, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, + 0x7d, 0x3c, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0xa0, 0x7b, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, + 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, + 0x79, 0x2a, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, + 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x40, + 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, + 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0x7b, 0x70, 0x65, 0x72, 0x63, + 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, + 0x0e, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, + 0x10, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, + 0x73, 0x02, 0x2c, 0x02, 0x2e, 0x0a, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x06, 0x4e, 0x61, 0x4e, 0x06, + 0x6e, 0x61, 0x6e, 0x02, 0x2b, 0x10, 0x70, 0x6c, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, 0x2d, + 0x12, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, + 0x67, 0x6e, 0x02, 0x25, 0x16, 0x70, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, + 0x03, 0x1e, 0x22, 0x10, 0x69, 0x6e, 0x66, 0x69, + 0x6e, 0x69, 0x74, 0x79, 0x0e, 0x73, 0x79, 0x6d, + 0x62, 0x6f, 0x6c, 0x73, 0x04, 0x4b, 0x4d, 0x06, + 0x42, 0x41, 0x4d, 0x03, 0xac, 0x20, 0x06, 0x45, + 0x55, 0x52, 0x04, 0x6b, 0x6e, 0x06, 0x48, 0x52, + 0x4b, 0x03, 0xb9, 0x20, 0x06, 0x49, 0x4e, 0x52, + 0x02, 0xa5, 0x06, 0x4a, 0x50, 0x59, 0x03, 0xa9, + 0x20, 0x06, 0x4b, 0x52, 0x57, 0x08, 0x64, 0x69, + 0x6e, 0x2e, 0x06, 0x52, 0x53, 0x44, 0x03, 0x3f, + 0x0e, 0x06, 0x54, 0x48, 0x42, 0x06, 0x4e, 0x54, + 0x24, 0x06, 0x54, 0x57, 0x44, 0x03, 0xab, 0x20, + 0x06, 0x56, 0x4e, 0x44, 0x08, 0x46, 0x43, 0x46, + 0x41, 0x06, 0x58, 0x41, 0x46, 0x06, 0x43, 0x46, + 0x41, 0x06, 0x58, 0x4f, 0x46, 0x14, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, + 0x52, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, + 0x74, 0x6c, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x6a, + 0x73, 0x6f, 0x6e, 0x70, 0x2f, 0x62, 0x73, 0x2e, + 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, + 0x00, 0x01, 0x00, 0x27, 0x00, 0x89, 0x01, 0xa2, + 0x6a, 0x01, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x39, + 0xd0, 0x00, 0x00, 0x00, 0x43, 0xd1, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd2, 0x00, 0x00, 0x00, 0x4d, + 0xd3, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd4, 0x00, + 0x00, 0x00, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x04, + 0xd6, 0x00, 0x00, 0x00, 0x04, 0xd7, 0x00, 0x00, + 0x00, 0x04, 0xd8, 0x00, 0x00, 0x00, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x04, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdb, 0x00, 0x00, 0x00, 0x04, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x04, + 0xde, 0x00, 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, + 0x00, 0x04, 0xe0, 0x00, 0x00, 0x00, 0x04, 0xe1, + 0x00, 0x00, 0x00, 0x04, 0xe2, 0x00, 0x00, 0x00, + 0x26, 0x0f, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, + 0x0a, 0x4d, 0xe4, 0x00, 0x00, 0x00, 0x09, 0x4d, + 0xe5, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, + 0x00, 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x04, 0xe9, 0x00, 0x00, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xec, + 0x00, 0x00, 0x00, 0x4d, 0xec, 0x00, 0x00, 0x00, + 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, 0xee, 0x00, + 0x00, 0x00, 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, + 0xf0, 0x00, 0x00, 0x00, 0x04, 0xf1, 0x00, 0x00, + 0x00, 0x4d, 0xf2, 0x00, 0x00, 0x00, 0x04, 0xf3, + 0x00, 0x00, 0x00, 0x4d, 0xf4, 0x00, 0x00, 0x00, + 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0xf6, 0x00, + 0x00, 0x00, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, + 0xf8, 0x00, 0x00, 0x00, 0x04, 0xf9, 0x00, 0x00, + 0x00, 0x4d, 0xfa, 0x00, 0x00, 0x00, 0x04, 0xfb, + 0x00, 0x00, 0x00, 0x4d, 0xfc, 0x00, 0x00, 0x00, + 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, 0xfe, 0x00, + 0x00, 0x00, 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x01, 0x00, 0x00, 0x04, 0x01, 0x01, 0x00, + 0x00, 0x4d, 0x02, 0x01, 0x00, 0x00, 0x04, 0x03, + 0x01, 0x00, 0x00, 0x4d, 0x04, 0x01, 0x00, 0x00, + 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, 0x06, 0x01, + 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, + 0x08, 0x01, 0x00, 0x00, 0x04, 0x09, 0x01, 0x00, + 0x00, 0x4d, 0x0a, 0x01, 0x00, 0x00, 0x04, 0x0b, + 0x01, 0x00, 0x00, 0x4d, 0x0c, 0x01, 0x00, 0x00, + 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, 0x0e, 0x01, + 0x00, 0x00, 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, + 0x10, 0x01, 0x00, 0x00, 0x04, 0x11, 0x01, 0x00, + 0x00, 0x4d, 0x12, 0x01, 0x00, 0x00, 0x04, 0x13, + 0x01, 0x00, 0x00, 0x4d, 0x14, 0x01, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, 0x16, 0x01, + 0x00, 0x00, 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, + 0x18, 0x01, 0x00, 0x00, 0x04, 0x19, 0x01, 0x00, + 0x00, 0x4d, 0x1a, 0x01, 0x00, 0x00, 0x04, 0x1b, + 0x01, 0x00, 0x00, 0x4d, 0x1c, 0x01, 0x00, 0x00, + 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, 0x1e, 0x01, + 0x00, 0x00, 0x04, 0x1f, 0x01, 0x00, 0x00, 0x4d, + 0x20, 0x01, 0x00, 0x00, 0x04, 0x21, 0x01, 0x00, + 0x00, 0x4d, 0x22, 0x01, 0x00, 0x00, 0x04, 0x23, + 0x01, 0x00, 0x00, 0x4d, 0x24, 0x01, 0x00, 0x00, + 0x04, 0x25, 0x01, 0x00, 0x00, 0x4d, 0x26, 0x01, + 0x00, 0x00, 0x04, 0x27, 0x01, 0x00, 0x00, 0x4d, + 0x28, 0x01, 0x00, 0x00, 0x04, 0x29, 0x01, 0x00, + 0x00, 0x4d, 0x2a, 0x01, 0x00, 0x00, 0x04, 0x2b, + 0x01, 0x00, 0x00, 0x4d, 0x2c, 0x01, 0x00, 0x00, + 0x04, 0x2d, 0x01, 0x00, 0x00, 0x4d, 0x2e, 0x01, + 0x00, 0x00, 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, + 0x30, 0x01, 0x00, 0x00, 0x04, 0x31, 0x01, 0x00, + 0x00, 0x4d, 0x32, 0x01, 0x00, 0x00, 0x04, 0x33, + 0x01, 0x00, 0x00, 0x4d, 0x34, 0x01, 0x00, 0x00, + 0x04, 0x35, 0x01, 0x00, 0x00, 0x4d, 0x36, 0x01, + 0x00, 0x00, 0x04, 0x37, 0x01, 0x00, 0x00, 0x4d, + 0x38, 0x01, 0x00, 0x00, 0x04, 0x39, 0x01, 0x00, + 0x00, 0x4d, 0x3a, 0x01, 0x00, 0x00, 0x04, 0x3b, + 0x01, 0x00, 0x00, 0x4d, 0x3c, 0x01, 0x00, 0x00, + 0x04, 0x3d, 0x01, 0x00, 0x00, 0x4d, 0x3e, 0x01, + 0x00, 0x00, 0x4d, 0x3f, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x40, 0x01, 0x00, 0x00, 0x4d, 0x41, 0x01, + 0x00, 0x00, 0x04, 0x42, 0x01, 0x00, 0x00, 0x4d, + 0x43, 0x01, 0x00, 0x00, 0x04, 0x44, 0x01, 0x00, + 0x00, 0x4d, 0x36, 0x01, 0x00, 0x00, 0x04, 0x45, + 0x01, 0x00, 0x00, 0x4d, 0x2e, 0x01, 0x00, 0x00, + 0x4d, 0x46, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x4d, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x4d, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, + 0x0a, 0x01, 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, + 0x00, 0x4d, 0x06, 0x01, 0x00, 0x00, 0x4d, 0x4b, + 0x01, 0x00, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x0b, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0xec, 0x00, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x6c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, + 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x80, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x81, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x83, 0x01, 0x00, 0x00, 0x4d, 0x84, + 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x4d, 0x86, 0x01, 0x00, 0x00, 0x4d, 0x87, 0x01, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x00, 0xbe, 0x01, 0xbe, 0x02, 0xbe, + 0x03, 0xbe, 0x04, 0xbe, 0x05, 0xbe, 0x06, 0xbe, + 0x07, 0xbe, 0x08, 0xbe, 0x09, 0xbe, 0x0a, 0xbe, + 0x0b, 0x26, 0x0c, 0x00, 0x4d, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, + 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, + 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, + 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, + 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, + 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, + 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, + 0x04, 0x93, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x88, 0x01, + 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, + 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, + 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, + 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, + 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, + 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, + 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x6c, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, + 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x80, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x83, + 0x01, 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, + 0x04, 0x85, 0x01, 0x00, 0x00, 0x4d, 0x86, 0x01, + 0x00, 0x00, 0x4d, 0x87, 0x01, 0x00, 0x00, 0x4d, + 0xd6, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x0c, + 0xbe, 0x0d, 0xbe, 0x0e, 0xbe, 0x0f, 0xbe, 0x10, + 0xbe, 0x11, 0xbe, 0x12, 0xbe, 0x13, 0xbe, 0x14, + 0xbe, 0x15, 0xbe, 0x16, 0xbe, 0x17, 0xbe, 0x18, + 0x26, 0x0d, 0x00, 0x4d, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, + 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, + 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, + 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, + 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, + 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, + 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, + 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, + 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, + 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, + 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, + 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, + 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, + 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, + 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x6c, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x54, 0x01, 0x00, + 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, + 0x04, 0xa2, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x82, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x4d, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x4d, 0x86, 0x01, 0x00, 0x00, 0x4d, + 0x87, 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x19, 0xbe, 0x1a, 0xbe, + 0x1b, 0xbe, 0x1c, 0xbe, 0x1d, 0xbe, 0x1e, 0xbe, + 0x1f, 0xbe, 0x20, 0xbe, 0x21, 0xbe, 0x22, 0xbe, + 0x23, 0xbe, 0x24, 0x26, 0x0c, 0x00, 0x4d, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, + 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, + 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, + 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, + 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, + 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, + 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, + 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, + 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, + 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, + 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, + 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, + 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, + 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x6c, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x4d, 0x84, 0x01, + 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x4d, + 0x86, 0x01, 0x00, 0x00, 0x4d, 0x87, 0x01, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x25, 0xbe, 0x26, 0xbe, 0x27, 0xbe, 0x28, + 0xbe, 0x29, 0xbe, 0x2a, 0xbe, 0x2b, 0xbe, 0x2c, + 0xbe, 0x2d, 0xbe, 0x2e, 0xbe, 0x2f, 0xbe, 0x30, + 0xbe, 0x31, 0x26, 0x0d, 0x00, 0x4d, 0x54, 0x01, + 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, + 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, + 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, + 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, + 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, + 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, + 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, + 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, + 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, + 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, + 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, + 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, + 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, + 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, + 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, + 0xaf, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6c, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x54, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x54, + 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, + 0x04, 0xa2, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa1, 0x01, + 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x82, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x4d, 0x86, 0x01, 0x00, + 0x00, 0x4d, 0x87, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x32, 0xbe, + 0x33, 0xbe, 0x34, 0xbe, 0x35, 0xbe, 0x36, 0xbe, + 0x37, 0xbe, 0x38, 0xbe, 0x39, 0xbe, 0x3a, 0xbe, + 0x3b, 0xbe, 0x3c, 0xbe, 0x3d, 0xbe, 0x3e, 0x26, + 0x0d, 0x00, 0x4d, 0x54, 0x01, 0x00, 0x00, 0x04, + 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, + 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, + 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, + 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, + 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, + 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, + 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, 0xae, + 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, + 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, + 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, + 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, + 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, + 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, + 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, + 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x6c, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, + 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x80, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xa1, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x54, + 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xa1, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x82, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x4d, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x4d, 0x86, 0x01, 0x00, 0x00, 0x4d, + 0x87, 0x01, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x3f, 0xbe, 0x40, 0xbe, + 0x41, 0xbe, 0x42, 0xbe, 0x43, 0xbe, 0x44, 0xbe, + 0x45, 0xbe, 0x46, 0xbe, 0x47, 0xbe, 0x48, 0xbe, + 0x49, 0xbe, 0x4a, 0x26, 0x0c, 0x00, 0x4d, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, + 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, + 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, + 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, + 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, + 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, + 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, + 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, + 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, + 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, + 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, + 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, + 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, + 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x6c, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x54, 0x01, + 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, + 0xa2, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, + 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x82, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x83, 0x01, 0x00, + 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, + 0x01, 0x00, 0x00, 0x4d, 0x86, 0x01, 0x00, 0x00, + 0x4d, 0x87, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0xec, 0x00, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x6c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x80, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xb0, 0x01, + 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, 0x04, + 0xb2, 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, + 0x00, 0x26, 0x04, 0x00, 0x4d, 0x54, 0x01, 0x00, + 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, + 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, + 0x04, 0xb3, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xb4, 0x01, + 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, 0x04, + 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, + 0x00, 0x26, 0x04, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, + 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x4d, 0x86, + 0x01, 0x00, 0x00, 0x4d, 0x87, 0x01, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x4b, 0xbe, 0x4c, 0xbe, 0x4d, 0xbe, 0x4e, 0xbe, + 0x4f, 0xbe, 0x50, 0xbe, 0x51, 0xbe, 0x52, 0xbe, + 0x53, 0xbe, 0x54, 0xbe, 0x55, 0xbe, 0x56, 0xbe, + 0x57, 0xbe, 0x58, 0x26, 0x0e, 0x00, 0x4d, 0x54, + 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, + 0x04, 0xb8, 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, + 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, 0x04, + 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, + 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, 0x04, 0xbe, + 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, + 0x04, 0xc0, 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, + 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, 0x00, 0x04, + 0xc3, 0x01, 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, + 0x00, 0x26, 0x0e, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, + 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, + 0x04, 0xba, 0x01, 0x00, 0x00, 0x04, 0xbb, 0x01, + 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, 0x04, + 0xbd, 0x01, 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, + 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, 0x04, 0xc0, + 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, + 0x04, 0xc2, 0x01, 0x00, 0x00, 0x04, 0xc3, 0x01, + 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, 0x26, + 0x0e, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x6c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, + 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x80, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xc5, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x54, 0x01, 0x00, + 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xc5, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x83, 0x01, 0x00, 0x00, 0x4d, 0x84, + 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x4d, 0x86, 0x01, 0x00, 0x00, 0x4d, 0x87, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x59, 0xbe, 0x5a, 0xbe, 0x5b, 0xbe, + 0x5c, 0xbe, 0x5d, 0xbe, 0x5e, 0xbe, 0x5f, 0xbe, + 0x60, 0xbe, 0x61, 0xbe, 0x62, 0xbe, 0x63, 0xbe, + 0x64, 0x26, 0x0c, 0x00, 0x4d, 0x54, 0x01, 0x00, + 0x00, 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, 0xc7, + 0x01, 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, + 0x04, 0xc9, 0x01, 0x00, 0x00, 0x04, 0xca, 0x01, + 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, 0x04, + 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, + 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, 0x04, 0xcf, + 0x01, 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, + 0x04, 0xd1, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xc6, 0x01, + 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, 0x04, + 0xc8, 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, + 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, 0x04, 0xcb, + 0x01, 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, + 0x04, 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, + 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, + 0xd0, 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x6c, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, + 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x80, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xd2, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x54, + 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xd2, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x82, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x4d, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x4d, 0x86, 0x01, 0x00, 0x00, 0x4d, + 0x87, 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x65, 0xbe, 0x66, 0xbe, + 0x67, 0xbe, 0x68, 0xbe, 0x69, 0xbe, 0x6a, 0xbe, + 0x6b, 0xbe, 0x6c, 0xbe, 0x6d, 0xbe, 0x6e, 0xbe, + 0x6f, 0xbe, 0x70, 0x26, 0x0c, 0x00, 0x4d, 0x54, + 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, + 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, 0xd5, 0x01, + 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, 0x04, + 0xd7, 0x01, 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, + 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, + 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, + 0x04, 0xdc, 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, + 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xdf, 0x01, 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, + 0x00, 0x04, 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, + 0x01, 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, + 0x04, 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, + 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, + 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, + 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x6c, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xeb, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x54, 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x82, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x4d, 0x86, 0x01, 0x00, + 0x00, 0x4d, 0x87, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x71, 0xbe, + 0x72, 0xbe, 0x73, 0xbe, 0x74, 0xbe, 0x75, 0xbe, + 0x76, 0xbe, 0x77, 0xbe, 0x78, 0xbe, 0x79, 0xbe, + 0x7a, 0xbe, 0x7b, 0xbe, 0x7c, 0x26, 0x0c, 0x00, + 0x4d, 0x54, 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, + 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, + 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, + 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, 0xd8, + 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, + 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, + 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, 0x04, + 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, 0xe0, + 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, 0x00, + 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, 0xe3, 0x01, + 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, 0x04, + 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, + 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, + 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, + 0x04, 0xea, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6c, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x54, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x54, 0x01, 0x00, 0x00, 0x04, + 0xeb, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, + 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x4d, 0x86, + 0x01, 0x00, 0x00, 0x4d, 0x87, 0x01, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0xec, + 0x00, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x6c, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, + 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, + 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, + 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, + 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, + 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, + 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, + 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, + 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, + 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, + 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, 0x01, + 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x04, + 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, + 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, 0x04, 0x02, + 0x02, 0x00, 0x00, 0x04, 0x03, 0x02, 0x00, 0x00, + 0x04, 0x04, 0x02, 0x00, 0x00, 0x04, 0x05, 0x02, + 0x00, 0x00, 0x04, 0x06, 0x02, 0x00, 0x00, 0x04, + 0x07, 0x02, 0x00, 0x00, 0x04, 0x08, 0x02, 0x00, + 0x00, 0x04, 0x09, 0x02, 0x00, 0x00, 0x04, 0x0a, + 0x02, 0x00, 0x00, 0x04, 0x0b, 0x02, 0x00, 0x00, + 0x26, 0x20, 0x00, 0x04, 0x0c, 0x02, 0x00, 0x00, + 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, + 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, + 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, + 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x23, + 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, + 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, + 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, + 0x12, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, + 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, 0x4d, 0x27, + 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, + 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, + 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, + 0x16, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, + 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, 0x4d, 0x2b, + 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, + 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, + 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, + 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, + 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x2f, + 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, + 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, + 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, + 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, + 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x33, + 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, + 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, + 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, + 0x22, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, + 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, 0x37, + 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, + 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, + 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, + 0x26, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, + 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, 0x3b, + 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, + 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, + 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, + 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, + 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x3f, + 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, + 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, + 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, + 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, + 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x43, + 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, + 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, + 0x32, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, + 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, 0x47, + 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, + 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, + 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, + 0x36, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, + 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, 0x4b, + 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, + 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, + 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, + 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, + 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x4f, + 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, + 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, + 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, + 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, + 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x53, + 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, + 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, + 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, + 0x42, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, + 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, 0x57, + 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, + 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, + 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, + 0x46, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, + 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, 0x5b, + 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, + 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, + 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, + 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, + 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x5f, + 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, + 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, + 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, + 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, + 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x63, + 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, + 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, + 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, + 0x52, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, + 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, 0x67, + 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, + 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, + 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, + 0x56, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, + 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, 0x6b, + 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, + 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, + 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, + 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, + 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x6f, + 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, + 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, + 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, + 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, + 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x73, + 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, + 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, + 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, + 0x62, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, + 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, 0x77, + 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, + 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, + 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, + 0x66, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, + 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, 0x7b, + 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, + 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, + 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, + 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, + 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x7f, + 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, + 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, + 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, + 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, + 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x83, + 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, + 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, + 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, + 0x72, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, + 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, 0x87, + 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, + 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, + 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, + 0x76, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, + 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, 0x8b, + 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, + 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, + 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, + 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, + 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x8f, + 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, + 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, + 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, + 0x7e, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, + 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, 0x93, + 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, + 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, + 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, + 0x82, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, + 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, 0x97, + 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, + 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, + 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, + 0x86, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, + 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, 0x9b, + 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, + 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, + 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, + 0x8a, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, + 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, 0x9f, + 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, + 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, + 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, + 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, + 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xa3, + 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, + 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, + 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, + 0x92, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, + 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, 0xa7, + 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, + 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, + 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, + 0x96, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, + 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, 0xab, + 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, + 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, + 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, + 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, + 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xaf, + 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, + 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, + 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, + 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, + 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xb3, + 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, + 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, + 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, + 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, + 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xb7, + 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, + 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, + 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, + 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, + 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xbb, + 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, + 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, + 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, + 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, + 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, 0xbf, + 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, + 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, + 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, + 0xae, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, + 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xc3, + 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, + 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, + 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, + 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, + 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xc7, + 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, + 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, + 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, + 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, + 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xcb, + 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, + 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, + 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, + 0xba, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, + 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xcf, + 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, + 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, + 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, + 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, + 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, + 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, + 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xc9, 0x02, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, + 0xca, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xcd, 0x02, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, + 0xce, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x80, 0x04, 0xd0, 0x02, 0x00, 0x00, + 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xd1, 0x02, + 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, + 0xd2, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x80, 0x04, 0xd3, 0x02, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x80, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xd4, 0x02, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x80, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x80, 0x4d, 0x54, 0x01, 0x00, 0x00, + 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, + 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, + 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, + 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, + 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, + 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, + 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, + 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, + 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, + 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, + 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, 0x01, + 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x04, + 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, + 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, 0x04, 0x02, + 0x02, 0x00, 0x00, 0x04, 0x03, 0x02, 0x00, 0x00, + 0x04, 0x04, 0x02, 0x00, 0x00, 0x04, 0x05, 0x02, + 0x00, 0x00, 0x04, 0x06, 0x02, 0x00, 0x00, 0x04, + 0x07, 0x02, 0x00, 0x00, 0x04, 0x08, 0x02, 0x00, + 0x00, 0x04, 0x09, 0x02, 0x00, 0x00, 0x04, 0x0a, + 0x02, 0x00, 0x00, 0x04, 0x0b, 0x02, 0x00, 0x00, + 0x26, 0x20, 0x00, 0x04, 0x0c, 0x02, 0x00, 0x00, + 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, + 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, + 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, + 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x23, + 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, + 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, + 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, + 0x12, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, + 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, 0x4d, 0x27, + 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, + 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, + 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, + 0x16, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, + 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, 0x4d, 0x2b, + 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, + 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, + 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, + 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, + 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x2f, + 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, + 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, + 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, + 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, + 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x33, + 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, + 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, + 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, + 0x22, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, + 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, 0x37, + 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, + 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, + 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, + 0x26, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, + 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, 0x3b, + 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, + 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, + 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, + 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, + 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x3f, + 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, + 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, + 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, + 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, + 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x43, + 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, + 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, + 0x32, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, + 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, 0x47, + 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, + 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, + 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, + 0x36, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, + 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, 0x4b, + 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, + 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, + 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, + 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, + 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x4f, + 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, + 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, + 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, + 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, + 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x53, + 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, + 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, + 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, + 0x42, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, + 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, 0x57, + 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, + 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, + 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, + 0x46, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, + 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, 0x5b, + 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, + 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, + 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, + 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, + 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x5f, + 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, + 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, + 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, + 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, + 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x63, + 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, + 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, + 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, + 0x52, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, + 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, 0x67, + 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, + 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, + 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, + 0x56, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, + 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, 0x6b, + 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, + 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, + 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, + 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, + 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x6f, + 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, + 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, + 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, + 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, + 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x73, + 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, + 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, + 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, + 0x62, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, + 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, 0x77, + 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, + 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, + 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, + 0x66, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, + 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, 0x7b, + 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, + 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, + 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, + 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, + 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x7f, + 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, + 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, + 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, + 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, + 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x83, + 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, + 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, + 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, + 0x72, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, + 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, 0x87, + 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, + 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, + 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, + 0x76, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, + 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, 0x8b, + 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, + 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, + 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, + 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, + 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x8f, + 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, + 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, + 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, + 0x7e, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, + 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, 0x93, + 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, + 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, + 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, + 0x82, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, + 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, 0x97, + 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, + 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, + 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, + 0x86, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, + 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, 0x9b, + 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, + 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, + 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, + 0x8a, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, + 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, 0x9f, + 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, + 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, + 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, + 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, + 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xa3, + 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, + 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, + 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, + 0x92, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, + 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, 0xa7, + 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, + 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, + 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, + 0x96, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, + 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, 0xab, + 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, + 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, + 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, + 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, + 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xaf, + 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, + 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, + 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, + 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, + 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xb3, + 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, + 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, + 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, + 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, + 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xb7, + 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, + 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, + 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, + 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, + 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xbb, + 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, + 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, + 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, + 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, + 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, 0xbf, + 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, + 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, + 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, + 0xae, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, + 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xc3, + 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, + 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, + 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, + 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, + 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xc7, + 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, + 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, + 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, + 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, + 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xcb, + 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, + 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, + 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, + 0xba, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, + 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xcf, + 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, + 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, + 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, + 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, + 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, + 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, + 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xc9, 0x02, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, + 0xca, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xcd, 0x02, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, + 0xce, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x80, 0x04, 0xd0, 0x02, 0x00, 0x00, + 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xd1, 0x02, + 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, + 0xd2, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x80, 0x04, 0xd3, 0x02, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x80, 0x04, 0xd5, 0x02, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x02, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, + 0xd7, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x80, 0x04, 0xd8, 0x02, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x80, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, + 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, + 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, + 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, + 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, + 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, + 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, + 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, + 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, + 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, + 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, 0x01, + 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x04, + 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, + 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, 0x04, 0x02, + 0x02, 0x00, 0x00, 0x04, 0x03, 0x02, 0x00, 0x00, + 0x04, 0x04, 0x02, 0x00, 0x00, 0x04, 0x05, 0x02, + 0x00, 0x00, 0x04, 0x06, 0x02, 0x00, 0x00, 0x04, + 0x07, 0x02, 0x00, 0x00, 0x04, 0x08, 0x02, 0x00, + 0x00, 0x04, 0x09, 0x02, 0x00, 0x00, 0x04, 0x0a, + 0x02, 0x00, 0x00, 0x04, 0x0b, 0x02, 0x00, 0x00, + 0x26, 0x20, 0x00, 0x04, 0x0c, 0x02, 0x00, 0x00, + 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, + 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, + 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, + 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x23, + 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, + 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, + 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, + 0x12, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, + 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, 0x4d, 0x27, + 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, + 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, + 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, + 0x16, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, + 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, 0x4d, 0x2b, + 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, + 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, + 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, + 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, + 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x2f, + 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, + 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, + 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, + 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, + 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x33, + 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, + 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, + 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, + 0x22, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, + 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, 0x37, + 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, + 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, + 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, + 0x26, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, + 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, 0x3b, + 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, + 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, + 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, + 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, + 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x3f, + 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, + 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, + 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, + 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, + 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x43, + 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, + 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, + 0x32, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, + 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, 0x47, + 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, + 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, + 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, + 0x36, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, + 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, 0x4b, + 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, + 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, + 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, + 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, + 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x4f, + 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, + 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, + 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, + 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, + 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x53, + 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, + 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, + 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, + 0x42, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, + 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, 0x57, + 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, + 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, + 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, + 0x46, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, + 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, 0x5b, + 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, + 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, + 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, + 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, + 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x5f, + 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, + 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, + 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, + 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, + 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x63, + 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, + 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, + 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, + 0x52, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, + 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, 0x67, + 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, + 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, + 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, + 0x56, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, + 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, 0x6b, + 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, + 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, + 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, + 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, + 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x6f, + 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, + 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, + 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, + 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, + 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x73, + 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, + 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, + 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, + 0x62, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, + 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, 0x77, + 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, + 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, + 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, + 0x66, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, + 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, 0x7b, + 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, + 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, + 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, + 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, + 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x7f, + 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, + 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, + 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, + 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, + 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x83, + 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, + 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, + 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, + 0x72, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, + 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, 0x87, + 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, + 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, + 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, + 0x76, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, + 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, 0x8b, + 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, + 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, + 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, + 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, + 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x8f, + 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, + 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, + 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, + 0x7e, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, + 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, 0x93, + 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, + 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, + 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, + 0x82, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, + 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, 0x97, + 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, + 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, + 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, + 0x86, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, + 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, 0x9b, + 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, + 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, + 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, + 0x8a, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, + 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, 0x9f, + 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, + 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, + 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, + 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, + 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xa3, + 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, + 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, + 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, + 0x92, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, + 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, 0xa7, + 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, + 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, + 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, + 0x96, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, + 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, 0xab, + 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, + 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, + 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, + 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, + 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xaf, + 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, + 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, + 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, + 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, + 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xb3, + 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, + 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, + 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, + 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, + 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xb7, + 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, + 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, + 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, + 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, + 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xbb, + 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, + 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, + 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, + 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, + 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, 0xbf, + 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, + 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, + 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, + 0xae, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, + 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xc3, + 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, + 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, + 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, + 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, + 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xc7, + 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, + 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, + 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, + 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, + 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xcb, + 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, + 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, + 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, + 0xba, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, + 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xcf, + 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, + 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, + 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, + 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, + 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, + 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, + 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xc9, 0x02, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, + 0xca, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xcd, 0x02, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, + 0xce, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x80, 0x04, 0xd0, 0x02, 0x00, 0x00, + 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xd1, 0x02, + 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, + 0xd2, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x80, 0x04, 0xd3, 0x02, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x80, 0x04, 0xd5, 0x02, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x02, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, + 0xd7, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x80, 0x04, 0xd8, 0x02, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x80, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x82, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x83, + 0x01, 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, + 0x04, 0x85, 0x01, 0x00, 0x00, 0x4d, 0x86, 0x01, + 0x00, 0x00, 0x4d, 0x87, 0x01, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x7d, + 0xbe, 0x7e, 0xbe, 0x7f, 0xbe, 0x80, 0xbe, 0x81, + 0xbe, 0x82, 0xbe, 0x83, 0xbe, 0x84, 0xbe, 0x85, + 0xbe, 0x86, 0xbe, 0x87, 0xbe, 0x88, 0x26, 0x0c, + 0x00, 0x4d, 0x54, 0x01, 0x00, 0x00, 0x04, 0xd9, + 0x02, 0x00, 0x00, 0x04, 0xda, 0x02, 0x00, 0x00, + 0x04, 0xdb, 0x02, 0x00, 0x00, 0x04, 0xdc, 0x02, + 0x00, 0x00, 0x04, 0xdd, 0x02, 0x00, 0x00, 0x04, + 0xde, 0x02, 0x00, 0x00, 0x04, 0xdf, 0x02, 0x00, + 0x00, 0x04, 0xe0, 0x02, 0x00, 0x00, 0x04, 0xe1, + 0x02, 0x00, 0x00, 0x04, 0xe2, 0x02, 0x00, 0x00, + 0x04, 0xe3, 0x02, 0x00, 0x00, 0x04, 0xe4, 0x02, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xd9, 0x02, 0x00, 0x00, 0x04, + 0xda, 0x02, 0x00, 0x00, 0x04, 0xdb, 0x02, 0x00, + 0x00, 0x04, 0xdc, 0x02, 0x00, 0x00, 0x04, 0xdd, + 0x02, 0x00, 0x00, 0x04, 0xde, 0x02, 0x00, 0x00, + 0x04, 0xdf, 0x02, 0x00, 0x00, 0x04, 0xe0, 0x02, + 0x00, 0x00, 0x04, 0xe1, 0x02, 0x00, 0x00, 0x04, + 0xe2, 0x02, 0x00, 0x00, 0x04, 0xe3, 0x02, 0x00, + 0x00, 0x04, 0xe4, 0x02, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6c, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x80, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xe5, 0x02, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x54, 0x01, 0x00, 0x00, + 0x04, 0xe5, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe5, 0x02, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x4d, 0x84, 0x01, + 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x4d, + 0x86, 0x01, 0x00, 0x00, 0x4d, 0x87, 0x01, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0xec, 0x00, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6c, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x54, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xe6, 0x02, 0x00, 0x00, 0x04, 0xe7, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x54, + 0x01, 0x00, 0x00, 0x04, 0xe6, 0x02, 0x00, 0x00, + 0x04, 0xe7, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x02, + 0x00, 0x00, 0x04, 0xe7, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x82, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x4d, 0x86, 0x01, 0x00, + 0x00, 0x4d, 0x87, 0x01, 0x00, 0x00, 0x4d, 0xe2, + 0x00, 0x00, 0x00, 0x4d, 0xe8, 0x02, 0x00, 0x00, + 0x4d, 0xe9, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xea, + 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, + 0x02, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xec, 0x02, + 0x00, 0x00, 0x4d, 0xed, 0x02, 0x00, 0x00, 0x04, + 0xee, 0x02, 0x00, 0x00, 0x4d, 0xef, 0x02, 0x00, + 0x00, 0x4d, 0xf0, 0x02, 0x00, 0x00, 0x0b, 0x04, + 0xf1, 0x02, 0x00, 0x00, 0x4d, 0xed, 0x02, 0x00, + 0x00, 0x04, 0xf2, 0x02, 0x00, 0x00, 0x4d, 0xef, + 0x02, 0x00, 0x00, 0x4d, 0xf3, 0x02, 0x00, 0x00, + 0x0b, 0x04, 0xf4, 0x02, 0x00, 0x00, 0x4d, 0xed, + 0x02, 0x00, 0x00, 0x04, 0xf5, 0x02, 0x00, 0x00, + 0x4d, 0xef, 0x02, 0x00, 0x00, 0x4d, 0xf6, 0x02, + 0x00, 0x00, 0x4d, 0xf7, 0x02, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0xf8, 0x02, 0x00, 0x00, 0x4d, 0xf0, + 0x02, 0x00, 0x00, 0x04, 0xf9, 0x02, 0x00, 0x00, + 0x4d, 0xfa, 0x02, 0x00, 0x00, 0x04, 0xfb, 0x02, + 0x00, 0x00, 0x4d, 0xfc, 0x02, 0x00, 0x00, 0x04, + 0xfd, 0x02, 0x00, 0x00, 0x4d, 0xfe, 0x02, 0x00, + 0x00, 0x04, 0xff, 0x02, 0x00, 0x00, 0x4d, 0x00, + 0x03, 0x00, 0x00, 0x04, 0x01, 0x03, 0x00, 0x00, + 0x4d, 0x02, 0x03, 0x00, 0x00, 0x04, 0x03, 0x03, + 0x00, 0x00, 0x4d, 0x04, 0x03, 0x00, 0x00, 0x4d, + 0xea, 0x02, 0x00, 0x00, 0x4d, 0x05, 0x03, 0x00, + 0x00, 0x0b, 0x04, 0x06, 0x03, 0x00, 0x00, 0x4d, + 0x07, 0x03, 0x00, 0x00, 0x04, 0x08, 0x03, 0x00, + 0x00, 0x4d, 0x09, 0x03, 0x00, 0x00, 0x04, 0x0a, + 0x03, 0x00, 0x00, 0x4d, 0x0b, 0x03, 0x00, 0x00, + 0x04, 0x0c, 0x03, 0x00, 0x00, 0x4d, 0x0d, 0x03, + 0x00, 0x00, 0x04, 0x0e, 0x03, 0x00, 0x00, 0x4d, + 0x0f, 0x03, 0x00, 0x00, 0x04, 0x10, 0x03, 0x00, + 0x00, 0x4d, 0x11, 0x03, 0x00, 0x00, 0x04, 0x12, + 0x03, 0x00, 0x00, 0x4d, 0x13, 0x03, 0x00, 0x00, + 0x04, 0x14, 0x03, 0x00, 0x00, 0x4d, 0x15, 0x03, + 0x00, 0x00, 0x04, 0x16, 0x03, 0x00, 0x00, 0x4d, + 0x17, 0x03, 0x00, 0x00, 0x04, 0x18, 0x03, 0x00, + 0x00, 0x4d, 0x19, 0x03, 0x00, 0x00, 0x04, 0x1a, + 0x03, 0x00, 0x00, 0x4d, 0x1b, 0x03, 0x00, 0x00, + 0x04, 0x1c, 0x03, 0x00, 0x00, 0x4d, 0x1d, 0x03, + 0x00, 0x00, 0x4d, 0x1e, 0x03, 0x00, 0x00, 0x4d, + 0x45, 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, 0xcc, + 0x28, 0xbe, 0x0c, 0x01, 0x00, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, + 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_ca_size = 25002; + +const uint8_t intl_ca[25002] = { + 0x01, 0xe7, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x63, 0x61, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x0e, 0x68, 0x6f, + 0x75, 0x72, 0x4e, 0x6f, 0x30, 0x0c, 0x68, 0x6f, + 0x75, 0x72, 0x31, 0x32, 0x0e, 0x7b, 0x31, 0x7d, + 0x20, 0x7b, 0x30, 0x7d, 0x0a, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x10, 0x7b, 0x31, 0x7d, 0x2c, 0x20, + 0x7b, 0x30, 0x7d, 0x0c, 0x6d, 0x65, 0x64, 0x69, + 0x75, 0x6d, 0x22, 0x7b, 0x31, 0x7d, 0x20, 0x27, + 0x61, 0x27, 0x20, 0x27, 0x6c, 0x65, 0x73, 0x27, + 0x20, 0x7b, 0x30, 0x7d, 0x08, 0x66, 0x75, 0x6c, + 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x02, 0x64, + 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, 0x06, 0x45, + 0x20, 0x64, 0x04, 0x45, 0x64, 0x10, 0x45, 0x20, + 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x06, 0x45, + 0x68, 0x6d, 0x0c, 0x45, 0x20, 0x48, 0x3a, 0x6d, + 0x6d, 0x06, 0x45, 0x48, 0x6d, 0x16, 0x45, 0x20, + 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, + 0x61, 0x08, 0x45, 0x68, 0x6d, 0x73, 0x12, 0x45, + 0x20, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x08, 0x45, 0x48, 0x6d, 0x73, 0x06, 0x79, 0x20, + 0x47, 0x04, 0x47, 0x79, 0x0e, 0x4c, 0x4c, 0x4c, + 0x20, 0x79, 0x20, 0x47, 0x0a, 0x47, 0x79, 0x4d, + 0x4d, 0x4d, 0x12, 0x64, 0x20, 0x4d, 0x4d, 0x4d, + 0x20, 0x79, 0x20, 0x47, 0x0c, 0x47, 0x79, 0x4d, + 0x4d, 0x4d, 0x64, 0x18, 0x45, 0x2c, 0x20, 0x64, + 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x20, 0x47, + 0x0e, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, + 0x1a, 0x4c, 0x4c, 0x4c, 0x4c, 0x20, 0x27, 0x64, + 0x65, 0x27, 0x20, 0x79, 0x20, 0x47, 0x0c, 0x47, + 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x1e, 0x64, 0x20, + 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x27, 0x64, 0x65, + 0x27, 0x20, 0x79, 0x20, 0x47, 0x0e, 0x47, 0x79, + 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x24, 0x45, 0x2c, + 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, + 0x27, 0x64, 0x65, 0x27, 0x20, 0x79, 0x20, 0x47, + 0x10, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x45, + 0x64, 0x06, 0x68, 0x20, 0x61, 0x02, 0x68, 0x02, + 0x48, 0x0c, 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, + 0x04, 0x68, 0x6d, 0x0a, 0x48, 0x48, 0x3a, 0x6d, + 0x6d, 0x04, 0x48, 0x6d, 0x12, 0x68, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x06, 0x68, + 0x6d, 0x73, 0x10, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x06, 0x48, 0x6d, 0x73, 0x16, + 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, + 0x61, 0x20, 0x76, 0x08, 0x68, 0x6d, 0x73, 0x76, + 0x14, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x76, 0x08, 0x48, 0x6d, 0x73, 0x76, + 0x10, 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x20, + 0x76, 0x06, 0x68, 0x6d, 0x76, 0x0e, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x20, 0x76, 0x06, 0x48, 0x6d, + 0x76, 0x02, 0x4c, 0x02, 0x4d, 0x06, 0x64, 0x2f, + 0x4d, 0x04, 0x4d, 0x64, 0x0a, 0x45, 0x20, 0x64, + 0x2f, 0x4d, 0x06, 0x4d, 0x45, 0x64, 0x06, 0x4c, + 0x4c, 0x4c, 0x06, 0x4d, 0x4d, 0x4d, 0x0a, 0x64, + 0x20, 0x4d, 0x4d, 0x4d, 0x08, 0x4d, 0x4d, 0x4d, + 0x64, 0x10, 0x45, 0x2c, 0x20, 0x64, 0x20, 0x4d, + 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x45, 0x64, + 0x0c, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, + 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x12, 0x45, 0x2c, + 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x0c, + 0x4d, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x04, 0x6d, 0x73, 0x02, + 0x79, 0x06, 0x4d, 0x2f, 0x79, 0x04, 0x79, 0x4d, + 0x0a, 0x64, 0x2f, 0x4d, 0x2f, 0x79, 0x06, 0x79, + 0x4d, 0x64, 0x10, 0x45, 0x2c, 0x20, 0x64, 0x2f, + 0x4d, 0x2f, 0x79, 0x08, 0x79, 0x4d, 0x45, 0x64, + 0x14, 0x4c, 0x4c, 0x4c, 0x20, 0x27, 0x64, 0x65, + 0x27, 0x20, 0x79, 0x08, 0x79, 0x4d, 0x4d, 0x4d, + 0x0e, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, + 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x14, 0x45, + 0x2c, 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x20, + 0x79, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, + 0x16, 0x4c, 0x4c, 0x4c, 0x4c, 0x20, 0x27, 0x64, + 0x65, 0x27, 0x20, 0x79, 0x0a, 0x79, 0x4d, 0x4d, + 0x4d, 0x4d, 0x1a, 0x64, 0x20, 0x4d, 0x4d, 0x4d, + 0x4d, 0x20, 0x27, 0x64, 0x65, 0x27, 0x20, 0x79, + 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x20, + 0x45, 0x2c, 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, + 0x4d, 0x20, 0x27, 0x64, 0x65, 0x27, 0x20, 0x79, + 0x0e, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x45, 0x64, + 0x0a, 0x51, 0x51, 0x51, 0x20, 0x79, 0x08, 0x79, + 0x51, 0x51, 0x51, 0x0c, 0x51, 0x51, 0x51, 0x51, + 0x20, 0x79, 0x0a, 0x79, 0x51, 0x51, 0x51, 0x51, + 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, + 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x73, 0x26, 0x45, 0x45, 0x45, 0x45, 0x2c, 0x20, + 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x27, + 0x64, 0x65, 0x27, 0x20, 0x79, 0x14, 0x79, 0x4d, + 0x4d, 0x4d, 0x4d, 0x45, 0x45, 0x45, 0x45, 0x64, + 0x0c, 0x64, 0x2f, 0x4d, 0x2f, 0x79, 0x79, 0x16, + 0x64, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x73, 0x18, 0x48, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x7a, 0x7a, 0x7a, 0x7a, + 0x12, 0x68, 0x6d, 0x6d, 0x73, 0x73, 0x7a, 0x7a, + 0x7a, 0x7a, 0x12, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x20, 0x7a, 0x08, 0x68, 0x6d, 0x73, + 0x7a, 0x0e, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x08, 0x48, 0x3a, 0x6d, 0x6d, 0x16, 0x74, + 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x73, 0x0e, 0x66, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x73, 0x04, 0x47, 0x4e, 0x04, 0x46, 0x42, + 0x04, 0x4d, 0xc7, 0x04, 0x41, 0x42, 0x04, 0x4d, + 0x47, 0x04, 0x4a, 0x4e, 0x04, 0x4a, 0x4c, 0x04, + 0x41, 0x47, 0x04, 0x53, 0x54, 0x04, 0x4f, 0x43, + 0x04, 0x4e, 0x56, 0x04, 0x44, 0x53, 0x0c, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x08, 0x67, 0x65, + 0x6e, 0x2e, 0x0a, 0x66, 0x65, 0x62, 0x72, 0x2e, + 0x08, 0x6d, 0x61, 0x72, 0xe7, 0x08, 0x61, 0x62, + 0x72, 0x2e, 0x08, 0x6d, 0x61, 0x69, 0x67, 0x08, + 0x6a, 0x75, 0x6e, 0x79, 0x08, 0x6a, 0x75, 0x6c, + 0x2e, 0x06, 0x61, 0x67, 0x2e, 0x08, 0x73, 0x65, + 0x74, 0x2e, 0x08, 0x6f, 0x63, 0x74, 0x2e, 0x08, + 0x6e, 0x6f, 0x76, 0x2e, 0x08, 0x64, 0x65, 0x73, + 0x2e, 0x10, 0x64, 0x65, 0x20, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x12, 0x64, 0x65, 0x20, 0x66, 0x65, + 0x62, 0x72, 0x65, 0x72, 0x0e, 0x64, 0x65, 0x20, + 0x6d, 0x61, 0x72, 0xe7, 0x0f, 0x64, 0x00, 0x19, + 0x20, 0x61, 0x00, 0x62, 0x00, 0x72, 0x00, 0x69, + 0x00, 0x6c, 0x00, 0x0e, 0x64, 0x65, 0x20, 0x6d, + 0x61, 0x69, 0x67, 0x0e, 0x64, 0x65, 0x20, 0x6a, + 0x75, 0x6e, 0x79, 0x12, 0x64, 0x65, 0x20, 0x6a, + 0x75, 0x6c, 0x69, 0x6f, 0x6c, 0x0f, 0x64, 0x00, + 0x19, 0x20, 0x61, 0x00, 0x67, 0x00, 0x6f, 0x00, + 0x73, 0x00, 0x74, 0x00, 0x16, 0x64, 0x65, 0x20, + 0x73, 0x65, 0x74, 0x65, 0x6d, 0x62, 0x72, 0x65, + 0x13, 0x64, 0x00, 0x19, 0x20, 0x6f, 0x00, 0x63, + 0x00, 0x74, 0x00, 0x75, 0x00, 0x62, 0x00, 0x72, + 0x00, 0x65, 0x00, 0x16, 0x64, 0x65, 0x20, 0x6e, + 0x6f, 0x76, 0x65, 0x6d, 0x62, 0x72, 0x65, 0x16, + 0x64, 0x65, 0x20, 0x64, 0x65, 0x73, 0x65, 0x6d, + 0x62, 0x72, 0x65, 0x0c, 0x6d, 0x6f, 0x6e, 0x74, + 0x68, 0x73, 0x04, 0x64, 0x67, 0x04, 0x64, 0x6c, + 0x04, 0x64, 0x74, 0x04, 0x64, 0x63, 0x04, 0x64, + 0x6a, 0x04, 0x64, 0x76, 0x04, 0x64, 0x73, 0x06, + 0x64, 0x67, 0x2e, 0x06, 0x64, 0x6c, 0x2e, 0x06, + 0x64, 0x74, 0x2e, 0x06, 0x64, 0x63, 0x2e, 0x06, + 0x64, 0x6a, 0x2e, 0x06, 0x64, 0x76, 0x2e, 0x06, + 0x64, 0x73, 0x2e, 0x10, 0x64, 0x69, 0x75, 0x6d, + 0x65, 0x6e, 0x67, 0x65, 0x0e, 0x64, 0x69, 0x6c, + 0x6c, 0x75, 0x6e, 0x73, 0x0e, 0x64, 0x69, 0x6d, + 0x61, 0x72, 0x74, 0x73, 0x10, 0x64, 0x69, 0x6d, + 0x65, 0x63, 0x72, 0x65, 0x73, 0x0c, 0x64, 0x69, + 0x6a, 0x6f, 0x75, 0x73, 0x12, 0x64, 0x69, 0x76, + 0x65, 0x6e, 0x64, 0x72, 0x65, 0x73, 0x10, 0x64, + 0x69, 0x73, 0x73, 0x61, 0x62, 0x74, 0x65, 0x08, + 0x64, 0x61, 0x79, 0x73, 0x04, 0x65, 0x42, 0x08, + 0x65, 0x72, 0x61, 0x73, 0x0a, 0x61, 0x2e, 0x20, + 0x6d, 0x2e, 0x04, 0x61, 0x6d, 0x0a, 0x70, 0x2e, + 0x20, 0x6d, 0x2e, 0x04, 0x70, 0x6d, 0x14, 0x64, + 0x61, 0x79, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, + 0x73, 0x08, 0x54, 0x6f, 0x75, 0x74, 0x08, 0x42, + 0x61, 0x62, 0x61, 0x0a, 0x48, 0x61, 0x74, 0x6f, + 0x72, 0x0a, 0x4b, 0x69, 0x61, 0x68, 0x6b, 0x08, + 0x54, 0x6f, 0x62, 0x61, 0x0c, 0x41, 0x6d, 0x73, + 0x68, 0x69, 0x72, 0x10, 0x42, 0x61, 0x72, 0x61, + 0x6d, 0x68, 0x61, 0x74, 0x12, 0x42, 0x61, 0x72, + 0x61, 0x6d, 0x6f, 0x75, 0x64, 0x61, 0x0e, 0x42, + 0x61, 0x73, 0x68, 0x61, 0x6e, 0x73, 0x0a, 0x50, + 0x61, 0x6f, 0x6e, 0x61, 0x08, 0x45, 0x70, 0x65, + 0x70, 0x0a, 0x4d, 0x65, 0x73, 0x72, 0x61, 0x0a, + 0x4e, 0x61, 0x73, 0x69, 0x65, 0x08, 0x45, 0x52, + 0x41, 0x30, 0x08, 0x45, 0x52, 0x41, 0x31, 0x10, + 0x4d, 0x65, 0x73, 0x6b, 0x65, 0x72, 0x65, 0x6d, + 0x0c, 0x54, 0x65, 0x6b, 0x65, 0x6d, 0x74, 0x0a, + 0x48, 0x65, 0x64, 0x61, 0x72, 0x0c, 0x54, 0x61, + 0x68, 0x73, 0x61, 0x73, 0x06, 0x54, 0x65, 0x72, + 0x0e, 0x59, 0x65, 0x6b, 0x61, 0x74, 0x69, 0x74, + 0x0e, 0x4d, 0x65, 0x67, 0x61, 0x62, 0x69, 0x74, + 0x0c, 0x4d, 0x69, 0x61, 0x7a, 0x69, 0x61, 0x0c, + 0x47, 0x65, 0x6e, 0x62, 0x6f, 0x74, 0x08, 0x53, + 0x65, 0x6e, 0x65, 0x0a, 0x48, 0x61, 0x6d, 0x6c, + 0x65, 0x0e, 0x4e, 0x65, 0x68, 0x61, 0x73, 0x73, + 0x65, 0x0e, 0x50, 0x61, 0x67, 0x75, 0x6d, 0x65, + 0x6e, 0x06, 0x4d, 0x30, 0x31, 0x06, 0x4d, 0x30, + 0x32, 0x06, 0x4d, 0x30, 0x33, 0x06, 0x4d, 0x30, + 0x34, 0x06, 0x4d, 0x30, 0x35, 0x06, 0x4d, 0x30, + 0x36, 0x06, 0x4d, 0x30, 0x37, 0x06, 0x4d, 0x30, + 0x38, 0x06, 0x4d, 0x30, 0x39, 0x06, 0x4d, 0x31, + 0x30, 0x06, 0x4d, 0x31, 0x31, 0x06, 0x4d, 0x31, + 0x32, 0x04, 0x61, 0x43, 0x04, 0x64, 0x43, 0x06, + 0x41, 0x45, 0x43, 0x04, 0x45, 0x43, 0x1c, 0x61, + 0x62, 0x61, 0x6e, 0x73, 0x20, 0x64, 0x65, 0x20, + 0x43, 0x72, 0x69, 0x73, 0x74, 0x20, 0x64, 0x65, + 0x73, 0x70, 0x72, 0xe9, 0x73, 0x20, 0x64, 0x65, + 0x20, 0x43, 0x72, 0x69, 0x73, 0x74, 0x2b, 0x61, + 0x00, 0x62, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x20, 0x00, 0x64, 0x00, 0x65, 0x00, 0x20, + 0x00, 0x6c, 0x00, 0x19, 0x20, 0x45, 0x00, 0x72, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x43, 0x00, 0x6f, + 0x00, 0x6d, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x14, 0x45, 0x72, 0x61, 0x20, 0x43, 0x6f, + 0x6d, 0x75, 0x6e, 0x61, 0x0c, 0x54, 0x69, 0x73, + 0x68, 0x72, 0x69, 0x0e, 0x48, 0x65, 0x73, 0x68, + 0x76, 0x61, 0x6e, 0x0c, 0x4b, 0x69, 0x73, 0x6c, + 0x65, 0x76, 0x0a, 0x54, 0x65, 0x76, 0x65, 0x74, + 0x0c, 0x53, 0x68, 0x65, 0x76, 0x61, 0x74, 0x0c, + 0x41, 0x64, 0x61, 0x72, 0x20, 0x49, 0x08, 0x41, + 0x64, 0x61, 0x72, 0x0a, 0x4e, 0x69, 0x73, 0x61, + 0x6e, 0x08, 0x49, 0x79, 0x61, 0x72, 0x0a, 0x53, + 0x69, 0x76, 0x61, 0x6e, 0x0a, 0x54, 0x61, 0x6d, + 0x75, 0x7a, 0x04, 0x41, 0x76, 0x08, 0x45, 0x6c, + 0x75, 0x6c, 0x0e, 0x41, 0x64, 0x61, 0x72, 0x20, + 0x49, 0x49, 0x04, 0x41, 0x4d, 0x0e, 0x43, 0x68, + 0x61, 0x69, 0x74, 0x72, 0x61, 0x10, 0x56, 0x61, + 0x69, 0x73, 0x61, 0x6b, 0x68, 0x61, 0x10, 0x4a, + 0x79, 0x61, 0x69, 0x73, 0x74, 0x68, 0x61, 0x0c, + 0x41, 0x73, 0x61, 0x64, 0x68, 0x61, 0x0e, 0x53, + 0x72, 0x61, 0x76, 0x61, 0x6e, 0x61, 0x0c, 0x42, + 0x68, 0x61, 0x64, 0x72, 0x61, 0x0c, 0x41, 0x73, + 0x76, 0x69, 0x6e, 0x61, 0x0e, 0x4b, 0x61, 0x72, + 0x74, 0x69, 0x6b, 0x61, 0x14, 0x41, 0x67, 0x72, + 0x61, 0x68, 0x61, 0x79, 0x61, 0x6e, 0x61, 0x0a, + 0x50, 0x61, 0x75, 0x73, 0x61, 0x0a, 0x4d, 0x61, + 0x67, 0x68, 0x61, 0x10, 0x50, 0x68, 0x61, 0x6c, + 0x67, 0x75, 0x6e, 0x61, 0x08, 0x53, 0x61, 0x6b, + 0x61, 0x08, 0x4d, 0x75, 0x68, 0x2e, 0x08, 0x53, + 0x61, 0x66, 0x2e, 0x0c, 0x52, 0x61, 0x62, 0x2e, + 0x20, 0x49, 0x0e, 0x52, 0x61, 0x62, 0x2e, 0x20, + 0x49, 0x49, 0x0c, 0x4a, 0x75, 0x6d, 0x2e, 0x20, + 0x49, 0x0e, 0x4a, 0x75, 0x6d, 0x2e, 0x20, 0x49, + 0x49, 0x08, 0x52, 0x61, 0x6a, 0x2e, 0x08, 0x53, + 0x68, 0x61, 0x2e, 0x08, 0x52, 0x61, 0x6d, 0x2e, + 0x0a, 0x53, 0x68, 0x61, 0x77, 0x2e, 0x11, 0x44, + 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, + 0x00, 0x2d, 0x00, 0x51, 0x00, 0x2e, 0x00, 0x11, + 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, + 0x6c, 0x00, 0x2d, 0x00, 0x48, 0x00, 0x2e, 0x00, + 0x10, 0x4d, 0x75, 0x68, 0x61, 0x72, 0x72, 0x61, + 0x6d, 0x0a, 0x53, 0x61, 0x66, 0x61, 0x72, 0x0f, + 0x52, 0x00, 0x61, 0x00, 0x62, 0x00, 0x69, 0x00, + 0xbb, 0x02, 0x20, 0x00, 0x49, 0x00, 0x11, 0x52, + 0x00, 0x61, 0x00, 0x62, 0x00, 0x69, 0x00, 0xbb, + 0x02, 0x20, 0x00, 0x49, 0x00, 0x49, 0x00, 0x10, + 0x4a, 0x75, 0x6d, 0x61, 0x64, 0x61, 0x20, 0x49, + 0x12, 0x4a, 0x75, 0x6d, 0x61, 0x64, 0x61, 0x20, + 0x49, 0x49, 0x0a, 0x52, 0x61, 0x6a, 0x61, 0x62, + 0x0f, 0x53, 0x00, 0x68, 0x00, 0x61, 0x00, 0xbb, + 0x02, 0x62, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x0e, + 0x52, 0x61, 0x6d, 0x61, 0x64, 0x61, 0x6e, 0x0e, + 0x53, 0x68, 0x61, 0x77, 0x77, 0x61, 0x6c, 0x19, + 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, + 0x6c, 0x00, 0x2d, 0x00, 0x51, 0x00, 0x69, 0x00, + 0xbb, 0x02, 0x64, 0x00, 0x61, 0x00, 0x68, 0x00, + 0x19, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, + 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x48, 0x00, 0x69, + 0x00, 0x6a, 0x00, 0x6a, 0x00, 0x61, 0x00, 0x68, + 0x00, 0x04, 0x41, 0x48, 0x1f, 0x54, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x36, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x36, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x13, 0x20, 0x36, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x36, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x29, 0x00, 0x21, + 0x53, 0x00, 0x68, 0x00, 0x75, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x57, + 0x00, 0x61, 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x1f, 0x52, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x1d, 0x59, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, + 0x4a, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6b, 0x00, + 0x61, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x2d, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x2d, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x2b, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x2d, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, 0x2d, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x2a, 0x4a, 0x69, 0x6e, 0x67, 0x6f, 0x2d, + 0x6b, 0x65, 0x69, 0x75, 0x6e, 0x20, 0x28, 0x37, + 0x36, 0x37, 0x2d, 0x37, 0x37, 0x30, 0x29, 0x1d, + 0x48, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x37, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, 0x44, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x64, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x38, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x4d, 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x38, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4a, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x61, 0x00, 0x6a, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, + 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x53, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x20, 0x54, 0x65, + 0x6e, 0x2d, 0x61, 0x6e, 0x20, 0x28, 0x38, 0x35, + 0x37, 0x2d, 0x38, 0x35, 0x39, 0x29, 0x1f, 0x4a, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, + 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, 0x6e, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x34, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1b, 0x4c, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4b, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x1d, 0x41, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1d, + 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x4a, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x29, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, + 0x4a, 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x29, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, + 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4c, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x25, 0x4a, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x24, 0x54, 0x65, 0x6e, 0x2d, 0x65, 0x69, + 0x20, 0x28, 0x31, 0x31, 0x31, 0x30, 0x2d, 0x31, + 0x31, 0x31, 0x33, 0x29, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, + 0x4d, 0x01, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, + 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x6a, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x48, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x45, + 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, + 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6d, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4a, + 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x59, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x21, 0x4a, 0x00, 0x75, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x29, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4a, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x29, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, + 0x4a, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x27, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x75, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x29, 0x52, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x4e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, + 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, 0x00, + 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1f, 0x4c, 0x01, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x74, 0x00, 0x73, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x27, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x45, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x21, 0x4d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, 0x69, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x27, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x21, 0x45, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x61, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x41, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, 0x02, + 0x54, 0x02, 0x53, 0x0a, 0x4d, 0x65, 0x69, 0x6a, + 0x69, 0x0d, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x0b, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x0c, 0x48, 0x65, 0x69, 0x73, 0x65, 0x69, + 0x12, 0x46, 0x61, 0x72, 0x76, 0x61, 0x72, 0x64, + 0x69, 0x6e, 0x16, 0x4f, 0x72, 0x64, 0x69, 0x62, + 0x65, 0x68, 0x65, 0x73, 0x68, 0x74, 0x0e, 0x4b, + 0x68, 0x6f, 0x72, 0x64, 0x61, 0x64, 0x06, 0x54, + 0x69, 0x72, 0x0c, 0x4d, 0x6f, 0x72, 0x64, 0x61, + 0x64, 0x12, 0x53, 0x68, 0x61, 0x68, 0x72, 0x69, + 0x76, 0x61, 0x72, 0x08, 0x4d, 0x65, 0x68, 0x72, + 0x08, 0x41, 0x62, 0x61, 0x6e, 0x08, 0x41, 0x7a, + 0x61, 0x72, 0x06, 0x44, 0x65, 0x79, 0x0c, 0x42, + 0x61, 0x68, 0x6d, 0x61, 0x6e, 0x0c, 0x45, 0x73, + 0x66, 0x61, 0x6e, 0x64, 0x04, 0x41, 0x50, 0x1a, + 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x52, + 0x2e, 0x4f, 0x2e, 0x43, 0x2e, 0x0c, 0x52, 0x2e, + 0x4f, 0x2e, 0x43, 0x2e, 0x12, 0x63, 0x61, 0x6c, + 0x65, 0x6e, 0x64, 0x61, 0x72, 0x73, 0x08, 0x64, + 0x61, 0x74, 0x65, 0x08, 0x6c, 0x61, 0x74, 0x6e, + 0x04, 0x6e, 0x75, 0x10, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, + 0x74, 0x65, 0x72, 0x6e, 0x26, 0x7b, 0x6d, 0x69, + 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0x1e, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, + 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, + 0x0e, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, + 0x26, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0xa0, 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x63, 0x79, 0x7d, 0x3c, 0x7b, 0x6d, 0x69, + 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0xa0, 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x79, 0x7d, 0x10, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x63, 0x79, 0x2a, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x7b, 0x70, 0x65, + 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, + 0x6e, 0x7d, 0x40, 0x7b, 0x6d, 0x69, 0x6e, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x7b, 0x70, + 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, + 0x67, 0x6e, 0x7d, 0x0e, 0x70, 0x65, 0x72, 0x63, + 0x65, 0x6e, 0x74, 0x10, 0x70, 0x61, 0x74, 0x74, + 0x65, 0x72, 0x6e, 0x73, 0x02, 0x2c, 0x02, 0x2e, + 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x06, 0x4e, + 0x61, 0x4e, 0x06, 0x6e, 0x61, 0x6e, 0x02, 0x2b, + 0x10, 0x70, 0x6c, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x02, 0x2d, 0x12, 0x6d, 0x69, 0x6e, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, 0x25, 0x16, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, + 0x69, 0x67, 0x6e, 0x03, 0x1e, 0x22, 0x10, 0x69, + 0x6e, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x0e, + 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x06, + 0x41, 0x55, 0x24, 0x06, 0x41, 0x55, 0x44, 0x02, + 0xa5, 0x06, 0x43, 0x4e, 0x59, 0x03, 0xa7, 0x20, + 0x06, 0x45, 0x53, 0x50, 0x03, 0xac, 0x20, 0x06, + 0x45, 0x55, 0x52, 0x02, 0xa3, 0x06, 0x47, 0x42, + 0x50, 0x06, 0x48, 0x4b, 0x24, 0x06, 0x48, 0x4b, + 0x44, 0x03, 0xaa, 0x20, 0x06, 0x49, 0x4c, 0x53, + 0x03, 0xb9, 0x20, 0x06, 0x49, 0x4e, 0x52, 0x06, + 0x4a, 0x50, 0xa5, 0x06, 0x4a, 0x50, 0x59, 0x03, + 0xa9, 0x20, 0x06, 0x4b, 0x52, 0x57, 0x06, 0x4e, + 0x5a, 0x24, 0x06, 0x4e, 0x5a, 0x44, 0x03, 0x3f, + 0x0e, 0x06, 0x54, 0x48, 0x42, 0x06, 0x4e, 0x54, + 0x24, 0x06, 0x54, 0x57, 0x44, 0x03, 0xab, 0x20, + 0x06, 0x56, 0x4e, 0x44, 0x08, 0x46, 0x43, 0x46, + 0x41, 0x06, 0x58, 0x41, 0x46, 0x06, 0x43, 0x46, + 0x41, 0x06, 0x58, 0x4f, 0x46, 0x08, 0x43, 0x46, + 0x50, 0x46, 0x06, 0x58, 0x50, 0x46, 0x14, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, + 0x73, 0x52, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, + 0x6e, 0x74, 0x6c, 0x2f, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, + 0x6a, 0x73, 0x6f, 0x6e, 0x70, 0x2f, 0x63, 0x61, + 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, + 0x01, 0x00, 0x01, 0x00, 0x27, 0x00, 0xb9, 0x01, + 0xe2, 0x69, 0x01, 0xa0, 0x01, 0x00, 0x00, 0x00, + 0x39, 0xd0, 0x00, 0x00, 0x00, 0x43, 0xd1, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd2, 0x00, 0x00, 0x00, + 0x4d, 0xd3, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd4, + 0x00, 0x00, 0x00, 0x04, 0xd5, 0x00, 0x00, 0x00, + 0x04, 0xd6, 0x00, 0x00, 0x00, 0x04, 0xd7, 0x00, + 0x00, 0x00, 0x04, 0xd8, 0x00, 0x00, 0x00, 0x04, + 0xd9, 0x00, 0x00, 0x00, 0x04, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xdb, 0x00, 0x00, 0x00, 0x04, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, + 0x04, 0xde, 0x00, 0x00, 0x00, 0x04, 0xdf, 0x00, + 0x00, 0x00, 0x04, 0xe0, 0x00, 0x00, 0x00, 0x04, + 0xe1, 0x00, 0x00, 0x00, 0x04, 0xe2, 0x00, 0x00, + 0x00, 0x26, 0x0f, 0x00, 0x4d, 0xd2, 0x00, 0x00, + 0x00, 0x0a, 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x09, + 0x4d, 0xe4, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe5, + 0x00, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, + 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, 0xe8, 0x00, + 0x00, 0x00, 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x04, 0xe7, 0x00, 0x00, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xec, 0x00, 0x00, 0x00, 0x4d, 0xec, 0x00, 0x00, + 0x00, 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, 0xee, + 0x00, 0x00, 0x00, 0x04, 0xef, 0x00, 0x00, 0x00, + 0x4d, 0xf0, 0x00, 0x00, 0x00, 0x04, 0xf1, 0x00, + 0x00, 0x00, 0x4d, 0xf2, 0x00, 0x00, 0x00, 0x04, + 0xf3, 0x00, 0x00, 0x00, 0x4d, 0xf4, 0x00, 0x00, + 0x00, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0xf6, + 0x00, 0x00, 0x00, 0x04, 0xf7, 0x00, 0x00, 0x00, + 0x4d, 0xf8, 0x00, 0x00, 0x00, 0x04, 0xf9, 0x00, + 0x00, 0x00, 0x4d, 0xfa, 0x00, 0x00, 0x00, 0x04, + 0xfb, 0x00, 0x00, 0x00, 0x4d, 0xfc, 0x00, 0x00, + 0x00, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, 0xfe, + 0x00, 0x00, 0x00, 0x04, 0xff, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x01, 0x00, 0x00, 0x04, 0x01, 0x01, + 0x00, 0x00, 0x4d, 0x02, 0x01, 0x00, 0x00, 0x04, + 0x03, 0x01, 0x00, 0x00, 0x4d, 0x04, 0x01, 0x00, + 0x00, 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, 0x06, + 0x01, 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, 0x00, + 0x4d, 0x08, 0x01, 0x00, 0x00, 0x04, 0x09, 0x01, + 0x00, 0x00, 0x4d, 0x09, 0x01, 0x00, 0x00, 0x04, + 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x0b, 0x01, 0x00, + 0x00, 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, 0x0d, + 0x01, 0x00, 0x00, 0x04, 0x0e, 0x01, 0x00, 0x00, + 0x4d, 0x0f, 0x01, 0x00, 0x00, 0x04, 0x10, 0x01, + 0x00, 0x00, 0x4d, 0x11, 0x01, 0x00, 0x00, 0x04, + 0x12, 0x01, 0x00, 0x00, 0x4d, 0x13, 0x01, 0x00, + 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, 0x15, + 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x4d, 0x17, 0x01, 0x00, 0x00, 0x04, 0x18, 0x01, + 0x00, 0x00, 0x4d, 0x19, 0x01, 0x00, 0x00, 0x04, + 0x1a, 0x01, 0x00, 0x00, 0x4d, 0x1b, 0x01, 0x00, + 0x00, 0x04, 0x1c, 0x01, 0x00, 0x00, 0x4d, 0x1d, + 0x01, 0x00, 0x00, 0x04, 0x1e, 0x01, 0x00, 0x00, + 0x4d, 0x1f, 0x01, 0x00, 0x00, 0x04, 0x20, 0x01, + 0x00, 0x00, 0x4d, 0x21, 0x01, 0x00, 0x00, 0x04, + 0x22, 0x01, 0x00, 0x00, 0x4d, 0x23, 0x01, 0x00, + 0x00, 0x04, 0x24, 0x01, 0x00, 0x00, 0x4d, 0x25, + 0x01, 0x00, 0x00, 0x04, 0x26, 0x01, 0x00, 0x00, + 0x4d, 0x27, 0x01, 0x00, 0x00, 0x04, 0x28, 0x01, + 0x00, 0x00, 0x4d, 0x29, 0x01, 0x00, 0x00, 0x04, + 0x2a, 0x01, 0x00, 0x00, 0x4d, 0x2b, 0x01, 0x00, + 0x00, 0x04, 0x2c, 0x01, 0x00, 0x00, 0x4d, 0x2c, + 0x01, 0x00, 0x00, 0x04, 0x2d, 0x01, 0x00, 0x00, + 0x4d, 0x2e, 0x01, 0x00, 0x00, 0x04, 0x2f, 0x01, + 0x00, 0x00, 0x4d, 0x30, 0x01, 0x00, 0x00, 0x04, + 0x31, 0x01, 0x00, 0x00, 0x4d, 0x32, 0x01, 0x00, + 0x00, 0x04, 0x33, 0x01, 0x00, 0x00, 0x4d, 0x34, + 0x01, 0x00, 0x00, 0x04, 0x35, 0x01, 0x00, 0x00, + 0x4d, 0x36, 0x01, 0x00, 0x00, 0x04, 0x37, 0x01, + 0x00, 0x00, 0x4d, 0x38, 0x01, 0x00, 0x00, 0x04, + 0x39, 0x01, 0x00, 0x00, 0x4d, 0x3a, 0x01, 0x00, + 0x00, 0x04, 0x3b, 0x01, 0x00, 0x00, 0x4d, 0x3c, + 0x01, 0x00, 0x00, 0x04, 0x3d, 0x01, 0x00, 0x00, + 0x4d, 0x3e, 0x01, 0x00, 0x00, 0x04, 0x3f, 0x01, + 0x00, 0x00, 0x4d, 0x40, 0x01, 0x00, 0x00, 0x04, + 0x41, 0x01, 0x00, 0x00, 0x4d, 0x42, 0x01, 0x00, + 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x44, 0x01, 0x00, 0x00, 0x4d, 0x45, 0x01, 0x00, + 0x00, 0x04, 0x3b, 0x01, 0x00, 0x00, 0x4d, 0x3c, + 0x01, 0x00, 0x00, 0x04, 0x35, 0x01, 0x00, 0x00, + 0x4d, 0x36, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x4d, 0x30, 0x01, 0x00, 0x00, 0x4d, + 0x47, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x4d, 0x49, 0x01, 0x00, 0x00, 0x04, + 0x4a, 0x01, 0x00, 0x00, 0x4d, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x4d, 0x0f, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x4d, 0x0b, 0x01, 0x00, 0x00, 0x4d, 0x4e, 0x01, + 0x00, 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x0b, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe6, 0x00, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x75, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe6, 0x00, + 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x8b, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x8c, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x8c, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x04, 0x8c, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x8d, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x8e, 0x01, 0x00, 0x00, 0x4d, 0x8f, 0x01, + 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x4d, + 0x91, 0x01, 0x00, 0x00, 0x4d, 0x92, 0x01, 0x00, + 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x00, 0xbe, 0x01, 0xbe, 0x02, 0xbe, 0x03, + 0xbe, 0x04, 0xbe, 0x05, 0xbe, 0x06, 0xbe, 0x07, + 0xbe, 0x08, 0xbe, 0x09, 0xbe, 0x0a, 0xbe, 0x0b, + 0x26, 0x0c, 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, + 0xbe, 0x0c, 0xbe, 0x0d, 0xbe, 0x0e, 0xbe, 0x0f, + 0xbe, 0x10, 0xbe, 0x11, 0xbe, 0x12, 0xbe, 0x13, + 0xbe, 0x14, 0xbe, 0x15, 0xbe, 0x16, 0xbe, 0x17, + 0x26, 0x0c, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, + 0xbe, 0x18, 0xbe, 0x19, 0xbe, 0x1a, 0xbe, 0x1b, + 0xbe, 0x1c, 0xbe, 0x1d, 0xbe, 0x1e, 0xbe, 0x1f, + 0xbe, 0x20, 0xbe, 0x21, 0xbe, 0x22, 0xbe, 0x23, + 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x75, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, + 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, + 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, + 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, + 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, + 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, + 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x8b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x8e, 0x01, + 0x00, 0x00, 0x4d, 0x8f, 0x01, 0x00, 0x00, 0x04, + 0x90, 0x01, 0x00, 0x00, 0x4d, 0x91, 0x01, 0x00, + 0x00, 0x4d, 0x92, 0x01, 0x00, 0x00, 0x4d, 0xd6, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x24, 0xbe, + 0x25, 0xbe, 0x26, 0xbe, 0x27, 0xbe, 0x28, 0xbe, + 0x29, 0xbe, 0x2a, 0xbe, 0x2b, 0xbe, 0x2c, 0xbe, + 0x2d, 0xbe, 0x2e, 0xbe, 0x2f, 0xbe, 0x30, 0x26, + 0x0d, 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, + 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, + 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, + 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, + 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, + 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, + 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, + 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, + 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, + 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, + 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, + 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, + 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, + 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, + 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, + 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x04, 0x84, 0x01, + 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, + 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, + 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, + 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x8b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xa0, + 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe6, 0x00, + 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, + 0xa1, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x8d, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x4d, + 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, + 0x00, 0x4d, 0x91, 0x01, 0x00, 0x00, 0x4d, 0x92, + 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x31, 0xbe, 0x32, 0xbe, 0x33, + 0xbe, 0x34, 0xbe, 0x35, 0xbe, 0x36, 0xbe, 0x37, + 0xbe, 0x38, 0xbe, 0x39, 0xbe, 0x3a, 0xbe, 0x3b, + 0xbe, 0x3c, 0x26, 0x0c, 0x00, 0x4d, 0x5c, 0x01, + 0x00, 0x00, 0xbe, 0x3d, 0xbe, 0x3e, 0xbe, 0x3f, + 0xbe, 0x40, 0xbe, 0x41, 0xbe, 0x42, 0xbe, 0x43, + 0xbe, 0x44, 0xbe, 0x45, 0xbe, 0x46, 0xbe, 0x47, + 0xbe, 0x48, 0x26, 0x0c, 0x00, 0x4d, 0xe6, 0x00, + 0x00, 0x00, 0xbe, 0x49, 0xbe, 0x4a, 0xbe, 0x4b, + 0xbe, 0x4c, 0xbe, 0x4d, 0xbe, 0x4e, 0xbe, 0x4f, + 0xbe, 0x50, 0xbe, 0x51, 0xbe, 0x52, 0xbe, 0x53, + 0xbe, 0x54, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, + 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x04, 0x84, + 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, + 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x8b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x8e, 0x01, 0x00, 0x00, 0x4d, 0x8f, 0x01, 0x00, + 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x4d, 0x91, + 0x01, 0x00, 0x00, 0x4d, 0x92, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x55, 0xbe, 0x56, 0xbe, 0x57, 0xbe, 0x58, 0xbe, + 0x59, 0xbe, 0x5a, 0xbe, 0x5b, 0xbe, 0x5c, 0xbe, + 0x5d, 0xbe, 0x5e, 0xbe, 0x5f, 0xbe, 0x60, 0xbe, + 0x61, 0x26, 0x0d, 0x00, 0x4d, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, + 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, + 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, + 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, + 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, + 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, + 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, + 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe6, 0x00, + 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, + 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, + 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, + 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, + 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, + 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, + 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, + 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, 0xae, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, + 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x04, + 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, + 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, + 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, + 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x8b, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, + 0xa1, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, + 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x8d, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x8e, 0x01, 0x00, + 0x00, 0x4d, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, + 0x01, 0x00, 0x00, 0x4d, 0x91, 0x01, 0x00, 0x00, + 0x4d, 0x92, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x62, 0xbe, 0x63, + 0xbe, 0x64, 0xbe, 0x65, 0xbe, 0x66, 0xbe, 0x67, + 0xbe, 0x68, 0xbe, 0x69, 0xbe, 0x6a, 0xbe, 0x6b, + 0xbe, 0x6c, 0xbe, 0x6d, 0xbe, 0x6e, 0x26, 0x0d, + 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x04, 0xa2, + 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, + 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, + 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, + 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, + 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, + 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, + 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, + 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x04, + 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, + 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, + 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, + 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, + 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, + 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, + 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, + 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x75, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, + 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, + 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, + 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, + 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, + 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, + 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x8b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xa0, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x04, + 0xa0, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x8d, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x4d, + 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, + 0x00, 0x4d, 0x91, 0x01, 0x00, 0x00, 0x4d, 0x92, + 0x01, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x6f, 0xbe, 0x70, 0xbe, 0x71, + 0xbe, 0x72, 0xbe, 0x73, 0xbe, 0x74, 0xbe, 0x75, + 0xbe, 0x76, 0xbe, 0x77, 0xbe, 0x78, 0xbe, 0x79, + 0xbe, 0x7a, 0x26, 0x0c, 0x00, 0x4d, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, + 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, + 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, 0xb3, + 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, 0x00, + 0x04, 0xb5, 0x01, 0x00, 0x00, 0x04, 0xb6, 0x01, + 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, + 0xb8, 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, + 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x04, 0xaf, + 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, + 0x04, 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, + 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, 0x04, + 0xb4, 0x01, 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, + 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb7, + 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, + 0x04, 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, + 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x04, 0x84, + 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, + 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x8b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe6, + 0x00, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, + 0x04, 0xa1, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x8d, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x8e, 0x01, 0x00, 0x00, + 0x4d, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, + 0x00, 0x00, 0x4d, 0x91, 0x01, 0x00, 0x00, 0x4d, + 0x92, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe6, + 0x00, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x75, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, + 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, + 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe6, + 0x00, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, + 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, + 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, + 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, + 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x8b, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xbb, 0x01, 0x00, + 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, 0x04, 0xbd, + 0x01, 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, + 0x26, 0x04, 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, 0x01, + 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, 0x04, + 0xbe, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x00, 0x04, 0xbf, 0x01, 0x00, + 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, 0x04, 0xc1, + 0x01, 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, 0x00, + 0x26, 0x04, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x8d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x8e, + 0x01, 0x00, 0x00, 0x4d, 0x8f, 0x01, 0x00, 0x00, + 0x04, 0x90, 0x01, 0x00, 0x00, 0x4d, 0x91, 0x01, + 0x00, 0x00, 0x4d, 0x92, 0x01, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x7b, + 0xbe, 0x7c, 0xbe, 0x7d, 0xbe, 0x7e, 0xbe, 0x7f, + 0xbe, 0x80, 0xbe, 0x81, 0xbe, 0x82, 0xbe, 0x83, + 0xbe, 0x84, 0xbe, 0x85, 0xbe, 0x86, 0xbe, 0x87, + 0xbe, 0x88, 0x26, 0x0e, 0x00, 0x4d, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, 0x04, + 0xc4, 0x01, 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, + 0x00, 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, 0xc7, + 0x01, 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, + 0x04, 0xc9, 0x01, 0x00, 0x00, 0x04, 0xca, 0x01, + 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, 0x04, + 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, + 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, 0x04, 0xcf, + 0x01, 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, + 0x26, 0x0e, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, + 0x04, 0xc3, 0x01, 0x00, 0x00, 0x04, 0xc4, 0x01, + 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, 0x04, + 0xc6, 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, + 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, 0xc9, + 0x01, 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, + 0x04, 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, 0x01, + 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, 0x04, + 0xce, 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, + 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, 0x26, 0x0e, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x75, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe6, 0x00, + 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x8b, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xd1, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0xd1, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x04, 0xd1, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x8d, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x8e, 0x01, 0x00, 0x00, 0x4d, 0x8f, 0x01, + 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x4d, + 0x91, 0x01, 0x00, 0x00, 0x4d, 0x92, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x89, 0xbe, 0x8a, 0xbe, 0x8b, 0xbe, 0x8c, + 0xbe, 0x8d, 0xbe, 0x8e, 0xbe, 0x8f, 0xbe, 0x90, + 0xbe, 0x91, 0xbe, 0x92, 0xbe, 0x93, 0xbe, 0x94, + 0x26, 0x0c, 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, + 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, + 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, + 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, 0xd8, + 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, + 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, + 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, 0x04, + 0xdd, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, + 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, + 0x01, 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, + 0x04, 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, + 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, + 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, + 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, + 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x75, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, + 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, + 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, + 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, + 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, + 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, + 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x8b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xde, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x04, + 0xde, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x8d, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x4d, + 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, + 0x00, 0x4d, 0x91, 0x01, 0x00, 0x00, 0x4d, 0x92, + 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x95, 0xbe, 0x96, 0xbe, 0x97, + 0xbe, 0x98, 0xbe, 0x99, 0xbe, 0x9a, 0xbe, 0x9b, + 0xbe, 0x9c, 0xbe, 0x9d, 0xbe, 0x9e, 0xbe, 0x9f, + 0xbe, 0xa0, 0x26, 0x0c, 0x00, 0x4d, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, + 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, + 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, 0xe3, + 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, + 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, + 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, + 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, + 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x04, 0xeb, + 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, + 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, + 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, + 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, + 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, + 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, + 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, + 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x04, 0x84, + 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, + 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x8b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xf7, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x8d, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x8e, 0x01, 0x00, + 0x00, 0x4d, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, + 0x01, 0x00, 0x00, 0x4d, 0x91, 0x01, 0x00, 0x00, + 0x4d, 0x92, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0xa1, 0xbe, 0xa2, + 0xbe, 0xa3, 0xbe, 0xa4, 0xbe, 0xa5, 0xbe, 0xa6, + 0xbe, 0xa7, 0xbe, 0xa8, 0xbe, 0xa9, 0xbe, 0xaa, + 0xbe, 0xab, 0xbe, 0xac, 0x26, 0x0c, 0x00, 0x4d, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, + 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, + 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, + 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, + 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, + 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, + 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, + 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, + 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, + 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, + 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, + 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, + 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, + 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, + 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, + 0xf6, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, + 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x8b, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x04, 0xf7, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe6, + 0x00, 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x8d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x8e, + 0x01, 0x00, 0x00, 0x4d, 0x8f, 0x01, 0x00, 0x00, + 0x04, 0x90, 0x01, 0x00, 0x00, 0x4d, 0x91, 0x01, + 0x00, 0x00, 0x4d, 0x92, 0x01, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, + 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x04, 0x84, + 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, + 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x8b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, + 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, + 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, + 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, + 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, + 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, + 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, 0x04, 0x03, + 0x02, 0x00, 0x00, 0x04, 0x04, 0x02, 0x00, 0x00, + 0x04, 0x05, 0x02, 0x00, 0x00, 0x04, 0x06, 0x02, + 0x00, 0x00, 0x04, 0x07, 0x02, 0x00, 0x00, 0x04, + 0x08, 0x02, 0x00, 0x00, 0x04, 0x09, 0x02, 0x00, + 0x00, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x04, 0x0b, + 0x02, 0x00, 0x00, 0x04, 0x0c, 0x02, 0x00, 0x00, + 0x04, 0x0d, 0x02, 0x00, 0x00, 0x04, 0x0e, 0x02, + 0x00, 0x00, 0x04, 0x0f, 0x02, 0x00, 0x00, 0x04, + 0x10, 0x02, 0x00, 0x00, 0x04, 0x11, 0x02, 0x00, + 0x00, 0x04, 0x12, 0x02, 0x00, 0x00, 0x04, 0x13, + 0x02, 0x00, 0x00, 0x04, 0x14, 0x02, 0x00, 0x00, + 0x04, 0x15, 0x02, 0x00, 0x00, 0x04, 0x16, 0x02, + 0x00, 0x00, 0x04, 0x17, 0x02, 0x00, 0x00, 0x26, + 0x20, 0x00, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, + 0x20, 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, + 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0x1a, + 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, + 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, + 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, + 0x24, 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, + 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0x1e, + 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, + 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, + 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, + 0x28, 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, + 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0x22, + 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, + 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, + 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, + 0x2c, 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, + 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0x26, + 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, + 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, + 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, + 0x30, 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, + 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0x2a, + 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, + 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, + 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, + 0x34, 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, + 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0x2e, + 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, + 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, + 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, + 0x38, 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, + 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0x32, + 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, + 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, + 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, + 0x3c, 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, + 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x36, + 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, + 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, + 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, + 0x40, 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, + 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x3a, + 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, + 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, + 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, + 0x44, 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, + 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x3e, + 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, + 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, + 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, + 0x48, 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, + 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x42, + 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, + 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, + 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, + 0x4c, 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, + 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x46, + 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, + 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, + 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, + 0x50, 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, + 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x4a, + 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, + 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, + 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, + 0x54, 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, + 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x4e, + 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, + 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, + 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, + 0x58, 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, + 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x52, + 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, + 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, + 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, + 0x5c, 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, + 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x56, + 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, + 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, + 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, + 0x60, 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, + 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x5a, + 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, + 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, + 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, + 0x64, 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, + 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x5e, + 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, + 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, + 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, + 0x68, 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, + 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x62, + 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, + 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, + 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, + 0x6c, 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, + 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x66, + 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, + 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, + 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, + 0x70, 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, + 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x6a, + 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, + 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, + 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, + 0x74, 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, + 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x6e, + 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, + 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, + 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, + 0x78, 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, + 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x72, + 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, + 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, + 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, + 0x7c, 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, + 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x76, + 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, + 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, + 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, + 0x80, 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, + 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x7a, + 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, + 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, + 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, + 0x84, 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, + 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x7e, + 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, + 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, + 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, + 0x88, 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, + 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x82, + 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, + 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, + 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, + 0x8c, 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, + 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x86, + 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, + 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, + 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, + 0x90, 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, + 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x8a, + 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, + 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, + 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, + 0x94, 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, + 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x8e, + 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, + 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, + 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, + 0x98, 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, + 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x92, + 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, + 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, + 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, + 0x9c, 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, + 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x96, + 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, + 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, + 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, + 0xa0, 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, + 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x9a, + 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, + 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, + 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, + 0xa4, 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, + 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x9e, + 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, + 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, + 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, + 0xa8, 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, + 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0xa2, + 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, + 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, + 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, + 0xac, 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, + 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0xa6, + 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, + 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, + 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, + 0xb0, 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, + 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0xaa, + 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, + 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, + 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, + 0xb4, 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, + 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0xae, + 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, + 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, + 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, + 0xb8, 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, + 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0xb2, + 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, + 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, + 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, + 0xbc, 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, + 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0xb6, + 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, + 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, + 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, + 0xc0, 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, + 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0xba, + 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, + 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, + 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, + 0xc4, 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, + 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0xbe, + 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, + 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, + 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, + 0xc8, 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, + 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0xc2, + 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, + 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, + 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, + 0xcc, 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, + 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0xc6, + 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, + 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, + 0x00, 0x80, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, + 0xd0, 0x00, 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, + 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0xca, + 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, + 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, + 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x80, 0x04, 0xcd, 0x02, 0x00, + 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0xce, + 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, + 0x04, 0xcf, 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x80, 0x04, 0xd0, 0x02, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x80, 0x04, 0xd1, 0x02, 0x00, + 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0xd2, + 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, + 0x04, 0xd3, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x80, 0x04, 0xd4, 0x02, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x80, 0x04, 0xd5, 0x02, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xd6, + 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, + 0x04, 0xd7, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x80, 0x04, 0xd8, 0x02, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x80, 0x04, 0xd9, 0x02, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xda, + 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, + 0x04, 0xdb, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, + 0x00, 0x80, 0x04, 0xdc, 0x02, 0x00, 0x00, 0x4d, + 0xe4, 0x00, 0x00, 0x80, 0x04, 0xdd, 0x02, 0x00, + 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0xde, + 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, + 0x04, 0xdf, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x80, 0x04, 0x1b, 0x01, 0x00, 0x00, 0x4d, + 0xe8, 0x00, 0x00, 0x80, 0x04, 0xe0, 0x02, 0x00, + 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0xe1, + 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, + 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x80, 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, + 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, + 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, + 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, + 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, + 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, + 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, 0x04, 0x03, + 0x02, 0x00, 0x00, 0x04, 0x04, 0x02, 0x00, 0x00, + 0x04, 0x05, 0x02, 0x00, 0x00, 0x04, 0x06, 0x02, + 0x00, 0x00, 0x04, 0x07, 0x02, 0x00, 0x00, 0x04, + 0x08, 0x02, 0x00, 0x00, 0x04, 0x09, 0x02, 0x00, + 0x00, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x04, 0x0b, + 0x02, 0x00, 0x00, 0x04, 0x0c, 0x02, 0x00, 0x00, + 0x04, 0x0d, 0x02, 0x00, 0x00, 0x04, 0x0e, 0x02, + 0x00, 0x00, 0x04, 0x0f, 0x02, 0x00, 0x00, 0x04, + 0x10, 0x02, 0x00, 0x00, 0x04, 0x11, 0x02, 0x00, + 0x00, 0x04, 0x12, 0x02, 0x00, 0x00, 0x04, 0x13, + 0x02, 0x00, 0x00, 0x04, 0x14, 0x02, 0x00, 0x00, + 0x04, 0x15, 0x02, 0x00, 0x00, 0x04, 0x16, 0x02, + 0x00, 0x00, 0x04, 0x17, 0x02, 0x00, 0x00, 0x26, + 0x20, 0x00, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, + 0x20, 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, + 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0x1a, + 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, + 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, + 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, + 0x24, 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, + 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0x1e, + 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, + 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, + 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, + 0x28, 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, + 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0x22, + 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, + 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, + 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, + 0x2c, 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, + 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0x26, + 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, + 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, + 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, + 0x30, 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, + 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0x2a, + 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, + 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, + 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, + 0x34, 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, + 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0x2e, + 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, + 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, + 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, + 0x38, 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, + 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0x32, + 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, + 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, + 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, + 0x3c, 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, + 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x36, + 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, + 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, + 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, + 0x40, 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, + 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x3a, + 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, + 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, + 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, + 0x44, 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, + 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x3e, + 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, + 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, + 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, + 0x48, 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, + 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x42, + 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, + 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, + 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, + 0x4c, 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, + 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x46, + 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, + 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, + 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, + 0x50, 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, + 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x4a, + 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, + 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, + 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, + 0x54, 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, + 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x4e, + 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, + 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, + 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, + 0x58, 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, + 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x52, + 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, + 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, + 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, + 0x5c, 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, + 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x56, + 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, + 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, + 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, + 0x60, 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, + 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x5a, + 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, + 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, + 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, + 0x64, 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, + 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x5e, + 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, + 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, + 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, + 0x68, 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, + 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x62, + 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, + 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, + 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, + 0x6c, 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, + 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x66, + 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, + 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, + 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, + 0x70, 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, + 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x6a, + 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, + 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, + 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, + 0x74, 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, + 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x6e, + 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, + 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, + 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, + 0x78, 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, + 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x72, + 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, + 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, + 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, + 0x7c, 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, + 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x76, + 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, + 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, + 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, + 0x80, 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, + 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x7a, + 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, + 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, + 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, + 0x84, 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, + 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x7e, + 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, + 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, + 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, + 0x88, 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, + 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x82, + 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, + 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, + 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, + 0x8c, 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, + 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x86, + 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, + 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, + 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, + 0x90, 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, + 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x8a, + 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, + 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, + 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, + 0x94, 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, + 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x8e, + 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, + 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, + 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, + 0x98, 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, + 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x92, + 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, + 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, + 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, + 0x9c, 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, + 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x96, + 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, + 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, + 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, + 0xa0, 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, + 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x9a, + 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, + 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, + 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, + 0xa4, 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, + 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x9e, + 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, + 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, + 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, + 0xa8, 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, + 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0xa2, + 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, + 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, + 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, + 0xac, 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, + 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0xa6, + 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, + 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, + 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, + 0xb0, 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, + 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0xaa, + 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, + 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, + 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, + 0xb4, 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, + 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0xae, + 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, + 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, + 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, + 0xb8, 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, + 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0xb2, + 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, + 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, + 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, + 0xbc, 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, + 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0xb6, + 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, + 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, + 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, + 0xc0, 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, + 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0xba, + 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, + 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, + 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, + 0xc4, 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, + 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0xbe, + 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, + 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, + 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, + 0xc8, 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, + 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0xc2, + 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, + 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, + 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, + 0xcc, 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, + 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0xc6, + 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, + 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, + 0x00, 0x80, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, + 0xd0, 0x00, 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, + 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0xca, + 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, + 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, + 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x80, 0x04, 0xcd, 0x02, 0x00, + 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0xce, + 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, + 0x04, 0xcf, 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x80, 0x04, 0xd0, 0x02, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x80, 0x04, 0xd1, 0x02, 0x00, + 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0xd2, + 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, + 0x04, 0xd3, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x80, 0x04, 0xd4, 0x02, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x80, 0x04, 0xd5, 0x02, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xd6, + 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, + 0x04, 0xd7, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x80, 0x04, 0xd8, 0x02, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x80, 0x04, 0xd9, 0x02, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xda, + 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, + 0x04, 0xdb, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, + 0x00, 0x80, 0x04, 0xdc, 0x02, 0x00, 0x00, 0x4d, + 0xe4, 0x00, 0x00, 0x80, 0x04, 0xdd, 0x02, 0x00, + 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0xde, + 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, + 0x04, 0xdf, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x80, 0x04, 0xe2, 0x02, 0x00, 0x00, 0x4d, + 0xe8, 0x00, 0x00, 0x80, 0x04, 0xe3, 0x02, 0x00, + 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0xe4, + 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, + 0x04, 0xe5, 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x80, 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x04, + 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, + 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, + 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, + 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, + 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, + 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, + 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, 0x04, 0x03, + 0x02, 0x00, 0x00, 0x04, 0x04, 0x02, 0x00, 0x00, + 0x04, 0x05, 0x02, 0x00, 0x00, 0x04, 0x06, 0x02, + 0x00, 0x00, 0x04, 0x07, 0x02, 0x00, 0x00, 0x04, + 0x08, 0x02, 0x00, 0x00, 0x04, 0x09, 0x02, 0x00, + 0x00, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x04, 0x0b, + 0x02, 0x00, 0x00, 0x04, 0x0c, 0x02, 0x00, 0x00, + 0x04, 0x0d, 0x02, 0x00, 0x00, 0x04, 0x0e, 0x02, + 0x00, 0x00, 0x04, 0x0f, 0x02, 0x00, 0x00, 0x04, + 0x10, 0x02, 0x00, 0x00, 0x04, 0x11, 0x02, 0x00, + 0x00, 0x04, 0x12, 0x02, 0x00, 0x00, 0x04, 0x13, + 0x02, 0x00, 0x00, 0x04, 0x14, 0x02, 0x00, 0x00, + 0x04, 0x15, 0x02, 0x00, 0x00, 0x04, 0x16, 0x02, + 0x00, 0x00, 0x04, 0x17, 0x02, 0x00, 0x00, 0x26, + 0x20, 0x00, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, + 0x20, 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, + 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0x1a, + 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, + 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, + 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, + 0x24, 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, + 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0x1e, + 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, + 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, + 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, + 0x28, 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, + 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0x22, + 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, + 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, + 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, + 0x2c, 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, + 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0x26, + 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, + 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, + 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, + 0x30, 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, + 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0x2a, + 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, + 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, + 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, + 0x34, 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, + 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0x2e, + 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, + 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, + 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, + 0x38, 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, + 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0x32, + 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, + 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, + 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, + 0x3c, 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, + 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x36, + 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, + 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, + 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, + 0x40, 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, + 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x3a, + 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, + 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, + 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, + 0x44, 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, + 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x3e, + 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, + 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, + 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, + 0x48, 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, + 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x42, + 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, + 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, + 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, + 0x4c, 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, + 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x46, + 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, + 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, + 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, + 0x50, 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, + 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x4a, + 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, + 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, + 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, + 0x54, 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, + 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x4e, + 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, + 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, + 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, + 0x58, 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, + 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x52, + 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, + 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, + 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, + 0x5c, 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, + 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x56, + 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, + 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, + 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, + 0x60, 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, + 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x5a, + 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, + 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, + 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, + 0x64, 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, + 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x5e, + 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, + 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, + 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, + 0x68, 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, + 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x62, + 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, + 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, + 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, + 0x6c, 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, + 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x66, + 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, + 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, + 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, + 0x70, 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, + 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x6a, + 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, + 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, + 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, + 0x74, 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, + 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x6e, + 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, + 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, + 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, + 0x78, 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, + 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x72, + 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, + 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, + 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, + 0x7c, 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, + 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x76, + 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, + 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, + 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, + 0x80, 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, + 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x7a, + 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, + 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, + 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, + 0x84, 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, + 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x7e, + 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, + 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, + 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, + 0x88, 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, + 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x82, + 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, + 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, + 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, + 0x8c, 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, + 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x86, + 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, + 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, + 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, + 0x90, 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, + 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x8a, + 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, + 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, + 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, + 0x94, 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, + 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x8e, + 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, + 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, + 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, + 0x98, 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, + 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x92, + 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, + 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, + 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, + 0x9c, 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, + 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x96, + 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, + 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, + 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, + 0xa0, 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, + 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x9a, + 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, + 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, + 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, + 0xa4, 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, + 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x9e, + 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, + 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, + 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, + 0xa8, 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, + 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0xa2, + 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, + 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, + 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, + 0xac, 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, + 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0xa6, + 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, + 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, + 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, + 0xb0, 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, + 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0xaa, + 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, + 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, + 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, + 0xb4, 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, + 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0xae, + 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, + 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, + 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, + 0xb8, 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, + 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0xb2, + 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, + 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, + 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, + 0xbc, 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, + 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0xb6, + 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, + 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, + 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, + 0xc0, 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, + 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0xba, + 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, + 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, + 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, + 0xc4, 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, + 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0xbe, + 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, + 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, + 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, + 0xc8, 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, + 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0xc2, + 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, + 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, + 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, + 0xcc, 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, + 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0xc6, + 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, + 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, + 0x00, 0x80, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, + 0xd0, 0x00, 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, + 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0xca, + 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, + 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, + 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x80, 0x04, 0xcd, 0x02, 0x00, + 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0xce, + 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, + 0x04, 0xcf, 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x80, 0x04, 0xd0, 0x02, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x80, 0x04, 0xd1, 0x02, 0x00, + 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0xd2, + 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, + 0x04, 0xd3, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x80, 0x04, 0xd4, 0x02, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x80, 0x04, 0xd5, 0x02, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xd6, + 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, + 0x04, 0xd7, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x80, 0x04, 0xd8, 0x02, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x80, 0x04, 0xd9, 0x02, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xda, + 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, + 0x04, 0xdb, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, + 0x00, 0x80, 0x04, 0xdc, 0x02, 0x00, 0x00, 0x4d, + 0xe4, 0x00, 0x00, 0x80, 0x04, 0xdd, 0x02, 0x00, + 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0xde, + 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, + 0x04, 0xdf, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x80, 0x04, 0xe2, 0x02, 0x00, 0x00, 0x4d, + 0xe8, 0x00, 0x00, 0x80, 0x04, 0xe3, 0x02, 0x00, + 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0xe4, + 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, + 0x04, 0xe5, 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x80, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x8d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x8e, 0x01, + 0x00, 0x00, 0x4d, 0x8f, 0x01, 0x00, 0x00, 0x04, + 0x90, 0x01, 0x00, 0x00, 0x4d, 0x91, 0x01, 0x00, + 0x00, 0x4d, 0x92, 0x01, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0xad, 0xbe, + 0xae, 0xbe, 0xaf, 0xbe, 0xb0, 0xbe, 0xb1, 0xbe, + 0xb2, 0xbe, 0xb3, 0xbe, 0xb4, 0xbe, 0xb5, 0xbe, + 0xb6, 0xbe, 0xb7, 0xbe, 0xb8, 0x26, 0x0c, 0x00, + 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x04, 0xe6, 0x02, + 0x00, 0x00, 0x04, 0xe7, 0x02, 0x00, 0x00, 0x04, + 0xe8, 0x02, 0x00, 0x00, 0x04, 0xe9, 0x02, 0x00, + 0x00, 0x04, 0xea, 0x02, 0x00, 0x00, 0x04, 0xeb, + 0x02, 0x00, 0x00, 0x04, 0xec, 0x02, 0x00, 0x00, + 0x04, 0xed, 0x02, 0x00, 0x00, 0x04, 0xee, 0x02, + 0x00, 0x00, 0x04, 0xef, 0x02, 0x00, 0x00, 0x04, + 0xf0, 0x02, 0x00, 0x00, 0x04, 0xf1, 0x02, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x00, 0x04, 0xe6, 0x02, 0x00, 0x00, 0x04, 0xe7, + 0x02, 0x00, 0x00, 0x04, 0xe8, 0x02, 0x00, 0x00, + 0x04, 0xe9, 0x02, 0x00, 0x00, 0x04, 0xea, 0x02, + 0x00, 0x00, 0x04, 0xeb, 0x02, 0x00, 0x00, 0x04, + 0xec, 0x02, 0x00, 0x00, 0x04, 0xed, 0x02, 0x00, + 0x00, 0x04, 0xee, 0x02, 0x00, 0x00, 0x04, 0xef, + 0x02, 0x00, 0x00, 0x04, 0xf0, 0x02, 0x00, 0x00, + 0x04, 0xf1, 0x02, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, + 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, + 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, + 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, + 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, + 0x8a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x8b, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xf2, 0x02, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0xf2, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x00, 0x04, 0xf2, 0x02, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x8d, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x8e, 0x01, 0x00, 0x00, 0x4d, 0x8f, 0x01, 0x00, + 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x4d, 0x91, + 0x01, 0x00, 0x00, 0x4d, 0x92, 0x01, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, + 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x04, + 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, + 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, + 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, + 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x8b, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xf3, 0x02, 0x00, 0x00, 0x04, 0xf4, 0x02, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0xf3, 0x02, 0x00, 0x00, 0x04, + 0xf4, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x00, 0x04, 0xf3, 0x02, 0x00, + 0x00, 0x04, 0xf4, 0x02, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x8d, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x8e, 0x01, 0x00, + 0x00, 0x4d, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, + 0x01, 0x00, 0x00, 0x4d, 0x91, 0x01, 0x00, 0x00, + 0x4d, 0x92, 0x01, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x00, 0x4d, 0xf5, 0x02, 0x00, 0x00, 0x4d, + 0xf6, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xf7, 0x02, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xf8, 0x02, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xf9, 0x02, 0x00, + 0x00, 0x4d, 0xfa, 0x02, 0x00, 0x00, 0x04, 0xfb, + 0x02, 0x00, 0x00, 0x4d, 0xfc, 0x02, 0x00, 0x00, + 0x4d, 0xfd, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xfe, + 0x02, 0x00, 0x00, 0x4d, 0xfa, 0x02, 0x00, 0x00, + 0x04, 0xff, 0x02, 0x00, 0x00, 0x4d, 0xfc, 0x02, + 0x00, 0x00, 0x4d, 0x00, 0x03, 0x00, 0x00, 0x0b, + 0x04, 0x01, 0x03, 0x00, 0x00, 0x4d, 0xfa, 0x02, + 0x00, 0x00, 0x04, 0x02, 0x03, 0x00, 0x00, 0x4d, + 0xfc, 0x02, 0x00, 0x00, 0x4d, 0x03, 0x03, 0x00, + 0x00, 0x4d, 0x04, 0x03, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x05, 0x03, 0x00, 0x00, 0x4d, 0xfd, 0x02, + 0x00, 0x00, 0x04, 0x06, 0x03, 0x00, 0x00, 0x4d, + 0x07, 0x03, 0x00, 0x00, 0x04, 0x08, 0x03, 0x00, + 0x00, 0x4d, 0x09, 0x03, 0x00, 0x00, 0x04, 0x0a, + 0x03, 0x00, 0x00, 0x4d, 0x0b, 0x03, 0x00, 0x00, + 0x04, 0x0c, 0x03, 0x00, 0x00, 0x4d, 0x0d, 0x03, + 0x00, 0x00, 0x04, 0x0e, 0x03, 0x00, 0x00, 0x4d, + 0x0f, 0x03, 0x00, 0x00, 0x04, 0x10, 0x03, 0x00, + 0x00, 0x4d, 0x11, 0x03, 0x00, 0x00, 0x4d, 0xf7, + 0x02, 0x00, 0x00, 0x4d, 0x12, 0x03, 0x00, 0x00, + 0x0b, 0x04, 0x13, 0x03, 0x00, 0x00, 0x4d, 0x14, + 0x03, 0x00, 0x00, 0x04, 0x15, 0x03, 0x00, 0x00, + 0x4d, 0x16, 0x03, 0x00, 0x00, 0x04, 0x17, 0x03, + 0x00, 0x00, 0x4d, 0x18, 0x03, 0x00, 0x00, 0x04, + 0x19, 0x03, 0x00, 0x00, 0x4d, 0x1a, 0x03, 0x00, + 0x00, 0x04, 0x1b, 0x03, 0x00, 0x00, 0x4d, 0x1c, + 0x03, 0x00, 0x00, 0x04, 0x1d, 0x03, 0x00, 0x00, + 0x4d, 0x1e, 0x03, 0x00, 0x00, 0x04, 0x1f, 0x03, + 0x00, 0x00, 0x4d, 0x20, 0x03, 0x00, 0x00, 0x04, + 0x21, 0x03, 0x00, 0x00, 0x4d, 0x22, 0x03, 0x00, + 0x00, 0x04, 0x23, 0x03, 0x00, 0x00, 0x4d, 0x24, + 0x03, 0x00, 0x00, 0x04, 0x25, 0x03, 0x00, 0x00, + 0x4d, 0x26, 0x03, 0x00, 0x00, 0x04, 0x27, 0x03, + 0x00, 0x00, 0x4d, 0x28, 0x03, 0x00, 0x00, 0x04, + 0x29, 0x03, 0x00, 0x00, 0x4d, 0x2a, 0x03, 0x00, + 0x00, 0x04, 0x2b, 0x03, 0x00, 0x00, 0x4d, 0x2c, + 0x03, 0x00, 0x00, 0x04, 0x2d, 0x03, 0x00, 0x00, + 0x4d, 0x2e, 0x03, 0x00, 0x00, 0x04, 0x2f, 0x03, + 0x00, 0x00, 0x4d, 0x30, 0x03, 0x00, 0x00, 0x04, + 0x31, 0x03, 0x00, 0x00, 0x4d, 0x32, 0x03, 0x00, + 0x00, 0x04, 0x33, 0x03, 0x00, 0x00, 0x4d, 0x34, + 0x03, 0x00, 0x00, 0x4d, 0x35, 0x03, 0x00, 0x00, + 0x4d, 0x45, 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, + 0xcc, 0x28, 0xec, 0x0c, 0x01, 0x00, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, + 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x04, 0x31, 0x33, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_cs_size = 24850; + +const uint8_t intl_cs[24850] = { + 0x01, 0xd3, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x63, 0x73, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x0e, + 0x7b, 0x31, 0x7d, 0x20, 0x7b, 0x30, 0x7d, 0x0a, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, 0x65, + 0x64, 0x69, 0x75, 0x6d, 0x08, 0x66, 0x75, 0x6c, + 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x04, 0x64, + 0x2e, 0x02, 0x64, 0x06, 0x63, 0x63, 0x63, 0x02, + 0x45, 0x08, 0x45, 0x20, 0x64, 0x2e, 0x04, 0x45, + 0x64, 0x10, 0x45, 0x20, 0x68, 0x3a, 0x6d, 0x6d, + 0x20, 0x61, 0x06, 0x45, 0x68, 0x6d, 0x0c, 0x45, + 0x20, 0x48, 0x3a, 0x6d, 0x6d, 0x06, 0x45, 0x48, + 0x6d, 0x16, 0x45, 0x20, 0x68, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x61, 0x08, 0x45, 0x68, + 0x6d, 0x73, 0x12, 0x45, 0x20, 0x48, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x08, 0x45, 0x48, 0x6d, + 0x73, 0x06, 0x79, 0x20, 0x47, 0x04, 0x47, 0x79, + 0x10, 0x4c, 0x4c, 0x4c, 0x4c, 0x20, 0x79, 0x20, + 0x47, 0x0a, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x12, + 0x64, 0x2e, 0x20, 0x4d, 0x2e, 0x20, 0x79, 0x20, + 0x47, 0x0c, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x64, + 0x16, 0x45, 0x20, 0x64, 0x2e, 0x20, 0x4d, 0x2e, + 0x20, 0x79, 0x20, 0x47, 0x0e, 0x47, 0x79, 0x4d, + 0x4d, 0x4d, 0x45, 0x64, 0x16, 0x64, 0x2e, 0x20, + 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x20, 0x47, + 0x0e, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, + 0x1a, 0x45, 0x20, 0x64, 0x2e, 0x20, 0x4d, 0x4d, + 0x4d, 0x4d, 0x20, 0x79, 0x20, 0x47, 0x10, 0x47, + 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x06, + 0x68, 0x20, 0x61, 0x02, 0x68, 0x02, 0x48, 0x0c, + 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x04, 0x68, + 0x6d, 0x08, 0x48, 0x3a, 0x6d, 0x6d, 0x04, 0x48, + 0x6d, 0x12, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x61, 0x06, 0x68, 0x6d, 0x73, 0x0e, + 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x06, + 0x48, 0x6d, 0x73, 0x16, 0x68, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x61, 0x20, 0x76, 0x08, + 0x68, 0x6d, 0x73, 0x76, 0x12, 0x48, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x76, 0x08, 0x48, + 0x6d, 0x73, 0x76, 0x10, 0x68, 0x3a, 0x6d, 0x6d, + 0x20, 0x61, 0x20, 0x76, 0x06, 0x68, 0x6d, 0x76, + 0x0c, 0x48, 0x3a, 0x6d, 0x6d, 0x20, 0x76, 0x06, + 0x48, 0x6d, 0x76, 0x02, 0x4c, 0x02, 0x4d, 0x0a, + 0x64, 0x2e, 0x20, 0x4d, 0x2e, 0x04, 0x4d, 0x64, + 0x0e, 0x45, 0x20, 0x64, 0x2e, 0x20, 0x4d, 0x2e, + 0x06, 0x4d, 0x45, 0x64, 0x06, 0x4c, 0x4c, 0x4c, + 0x06, 0x4d, 0x4d, 0x4d, 0x08, 0x4d, 0x4d, 0x4d, + 0x64, 0x0a, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0e, + 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, + 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x12, 0x45, 0x20, + 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x0c, + 0x4d, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x04, 0x6d, 0x73, 0x02, + 0x79, 0x06, 0x4d, 0x2f, 0x79, 0x04, 0x79, 0x4d, + 0x0e, 0x64, 0x2e, 0x20, 0x4d, 0x2e, 0x20, 0x79, + 0x06, 0x79, 0x4d, 0x64, 0x12, 0x45, 0x20, 0x64, + 0x2e, 0x20, 0x4d, 0x2e, 0x20, 0x79, 0x08, 0x79, + 0x4d, 0x45, 0x64, 0x0c, 0x4c, 0x4c, 0x4c, 0x4c, + 0x20, 0x79, 0x08, 0x79, 0x4d, 0x4d, 0x4d, 0x0a, + 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x0c, 0x79, 0x4d, + 0x4d, 0x4d, 0x45, 0x64, 0x0a, 0x79, 0x4d, 0x4d, + 0x4d, 0x4d, 0x12, 0x64, 0x2e, 0x20, 0x4d, 0x4d, + 0x4d, 0x4d, 0x20, 0x79, 0x0c, 0x79, 0x4d, 0x4d, + 0x4d, 0x4d, 0x64, 0x16, 0x45, 0x20, 0x64, 0x2e, + 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0e, + 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0a, + 0x51, 0x51, 0x51, 0x20, 0x79, 0x08, 0x79, 0x51, + 0x51, 0x51, 0x0c, 0x51, 0x51, 0x51, 0x51, 0x20, + 0x79, 0x0a, 0x79, 0x51, 0x51, 0x51, 0x51, 0x20, + 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, + 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, + 0x1c, 0x45, 0x45, 0x45, 0x45, 0x20, 0x64, 0x2e, + 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x14, + 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x45, 0x45, 0x45, + 0x45, 0x64, 0x10, 0x64, 0x64, 0x2e, 0x4d, 0x4d, + 0x2e, 0x79, 0x79, 0x16, 0x64, 0x61, 0x74, 0x65, + 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x18, + 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, + 0x7a, 0x7a, 0x7a, 0x7a, 0x12, 0x68, 0x6d, 0x6d, + 0x73, 0x73, 0x7a, 0x7a, 0x7a, 0x7a, 0x12, 0x48, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x7a, + 0x08, 0x68, 0x6d, 0x73, 0x7a, 0x16, 0x74, 0x69, + 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x73, 0x0e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x73, 0x0c, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x06, 0x6c, 0x65, 0x64, 0x06, 0xfa, 0x6e, 0x6f, + 0x07, 0x62, 0x00, 0x59, 0x01, 0x65, 0x00, 0x06, + 0x64, 0x75, 0x62, 0x07, 0x6b, 0x00, 0x76, 0x00, + 0x1b, 0x01, 0x07, 0x0d, 0x01, 0x76, 0x00, 0x6e, + 0x00, 0x07, 0x0d, 0x01, 0x76, 0x00, 0x63, 0x00, + 0x06, 0x73, 0x72, 0x70, 0x07, 0x7a, 0x00, 0xe1, + 0x00, 0x59, 0x01, 0x07, 0x59, 0x01, 0xed, 0x00, + 0x6a, 0x00, 0x06, 0x6c, 0x69, 0x73, 0x06, 0x70, + 0x72, 0x6f, 0x0a, 0x6c, 0x65, 0x64, 0x6e, 0x61, + 0x0a, 0xfa, 0x6e, 0x6f, 0x72, 0x61, 0x0d, 0x62, + 0x00, 0x59, 0x01, 0x65, 0x00, 0x7a, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x0a, 0x64, 0x75, 0x62, 0x6e, + 0x61, 0x0d, 0x6b, 0x00, 0x76, 0x00, 0x1b, 0x01, + 0x74, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x0d, 0x0d, + 0x01, 0x65, 0x00, 0x72, 0x00, 0x76, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x11, 0x0d, 0x01, 0x65, 0x00, + 0x72, 0x00, 0x76, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x63, 0x00, 0x65, 0x00, 0x0a, 0x73, 0x72, 0x70, + 0x6e, 0x61, 0x09, 0x7a, 0x00, 0xe1, 0x00, 0x59, + 0x01, 0xed, 0x00, 0x0b, 0x59, 0x01, 0xed, 0x00, + 0x6a, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x12, 0x6c, + 0x69, 0x73, 0x74, 0x6f, 0x70, 0x61, 0x64, 0x75, + 0x10, 0x70, 0x72, 0x6f, 0x73, 0x69, 0x6e, 0x63, + 0x65, 0x0c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x73, + 0x02, 0x4e, 0x02, 0x50, 0x02, 0xda, 0x02, 0x53, + 0x03, 0x0c, 0x01, 0x04, 0x6e, 0x65, 0x04, 0x70, + 0x6f, 0x04, 0xfa, 0x74, 0x04, 0x73, 0x74, 0x05, + 0x0d, 0x01, 0x74, 0x00, 0x04, 0x70, 0xe1, 0x04, + 0x73, 0x6f, 0x0d, 0x6e, 0x00, 0x65, 0x00, 0x64, + 0x00, 0x1b, 0x01, 0x6c, 0x00, 0x65, 0x00, 0x0f, + 0x70, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x64, 0x00, + 0x1b, 0x01, 0x6c, 0x00, 0xed, 0x00, 0x0a, 0xfa, + 0x74, 0x65, 0x72, 0xfd, 0x0d, 0x73, 0x00, 0x74, + 0x00, 0x59, 0x01, 0x65, 0x00, 0x64, 0x00, 0x61, + 0x00, 0x0f, 0x0d, 0x01, 0x74, 0x00, 0x76, 0x00, + 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6b, 0x00, + 0x0a, 0x70, 0xe1, 0x74, 0x65, 0x6b, 0x0c, 0x73, + 0x6f, 0x62, 0x6f, 0x74, 0x61, 0x08, 0x64, 0x61, + 0x79, 0x73, 0x04, 0x42, 0x45, 0x08, 0x65, 0x72, + 0x61, 0x73, 0x08, 0x64, 0x6f, 0x70, 0x2e, 0x04, + 0x61, 0x6d, 0x08, 0x6f, 0x64, 0x70, 0x2e, 0x04, + 0x70, 0x6d, 0x14, 0x64, 0x61, 0x79, 0x50, 0x65, + 0x72, 0x69, 0x6f, 0x64, 0x73, 0x06, 0x4d, 0x30, + 0x31, 0x06, 0x4d, 0x30, 0x32, 0x06, 0x4d, 0x30, + 0x33, 0x06, 0x4d, 0x30, 0x34, 0x06, 0x4d, 0x30, + 0x35, 0x06, 0x4d, 0x30, 0x36, 0x06, 0x4d, 0x30, + 0x37, 0x06, 0x4d, 0x30, 0x38, 0x06, 0x4d, 0x30, + 0x39, 0x06, 0x4d, 0x31, 0x30, 0x06, 0x4d, 0x31, + 0x31, 0x06, 0x4d, 0x31, 0x32, 0x08, 0x54, 0x6f, + 0x75, 0x74, 0x08, 0x42, 0x61, 0x62, 0x61, 0x0a, + 0x48, 0x61, 0x74, 0x6f, 0x72, 0x0a, 0x4b, 0x69, + 0x61, 0x68, 0x6b, 0x08, 0x54, 0x6f, 0x62, 0x61, + 0x0c, 0x41, 0x6d, 0x73, 0x68, 0x69, 0x72, 0x10, + 0x42, 0x61, 0x72, 0x61, 0x6d, 0x68, 0x61, 0x74, + 0x12, 0x42, 0x61, 0x72, 0x61, 0x6d, 0x6f, 0x75, + 0x64, 0x61, 0x0e, 0x42, 0x61, 0x73, 0x68, 0x61, + 0x6e, 0x73, 0x0a, 0x50, 0x61, 0x6f, 0x6e, 0x61, + 0x08, 0x45, 0x70, 0x65, 0x70, 0x0a, 0x4d, 0x65, + 0x73, 0x72, 0x61, 0x0a, 0x4e, 0x61, 0x73, 0x69, + 0x65, 0x08, 0x45, 0x52, 0x41, 0x30, 0x08, 0x45, + 0x52, 0x41, 0x31, 0x10, 0x4d, 0x65, 0x73, 0x6b, + 0x65, 0x72, 0x65, 0x6d, 0x0c, 0x54, 0x65, 0x6b, + 0x65, 0x6d, 0x74, 0x0a, 0x48, 0x65, 0x64, 0x61, + 0x72, 0x0c, 0x54, 0x61, 0x68, 0x73, 0x61, 0x73, + 0x06, 0x54, 0x65, 0x72, 0x0e, 0x59, 0x65, 0x6b, + 0x61, 0x74, 0x69, 0x74, 0x0e, 0x4d, 0x65, 0x67, + 0x61, 0x62, 0x69, 0x74, 0x0c, 0x4d, 0x69, 0x61, + 0x7a, 0x69, 0x61, 0x0c, 0x47, 0x65, 0x6e, 0x62, + 0x6f, 0x74, 0x08, 0x53, 0x65, 0x6e, 0x65, 0x0a, + 0x48, 0x61, 0x6d, 0x6c, 0x65, 0x0e, 0x4e, 0x65, + 0x68, 0x61, 0x73, 0x73, 0x65, 0x0e, 0x50, 0x61, + 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x0f, 0x70, 0x00, + 0x59, 0x01, 0x2e, 0x00, 0x6e, 0x00, 0x2e, 0x00, + 0x6c, 0x00, 0x2e, 0x00, 0x08, 0x6e, 0x2e, 0x6c, + 0x2e, 0x06, 0x42, 0x43, 0x45, 0x04, 0x43, 0x45, + 0x13, 0x70, 0x00, 0x59, 0x01, 0x2e, 0x00, 0x20, + 0x00, 0x6e, 0x00, 0x2e, 0x00, 0x20, 0x00, 0x6c, + 0x00, 0x2e, 0x00, 0x0a, 0x6e, 0x2e, 0x20, 0x6c, + 0x2e, 0x0c, 0x54, 0x69, 0x73, 0x68, 0x72, 0x69, + 0x0e, 0x48, 0x65, 0x73, 0x68, 0x76, 0x61, 0x6e, + 0x0c, 0x4b, 0x69, 0x73, 0x6c, 0x65, 0x76, 0x0a, + 0x54, 0x65, 0x76, 0x65, 0x74, 0x0c, 0x53, 0x68, + 0x65, 0x76, 0x61, 0x74, 0x0c, 0x41, 0x64, 0x61, + 0x72, 0x20, 0x49, 0x08, 0x41, 0x64, 0x61, 0x72, + 0x0a, 0x4e, 0x69, 0x73, 0x61, 0x6e, 0x08, 0x49, + 0x79, 0x61, 0x72, 0x0a, 0x53, 0x69, 0x76, 0x61, + 0x6e, 0x0a, 0x54, 0x61, 0x6d, 0x75, 0x7a, 0x04, + 0x41, 0x76, 0x08, 0x45, 0x6c, 0x75, 0x6c, 0x0e, + 0x41, 0x64, 0x61, 0x72, 0x20, 0x49, 0x49, 0x04, + 0x41, 0x4d, 0x0e, 0x43, 0x68, 0x61, 0x69, 0x74, + 0x72, 0x61, 0x10, 0x56, 0x61, 0x69, 0x73, 0x61, + 0x6b, 0x68, 0x61, 0x10, 0x4a, 0x79, 0x61, 0x69, + 0x73, 0x74, 0x68, 0x61, 0x0c, 0x41, 0x73, 0x61, + 0x64, 0x68, 0x61, 0x0e, 0x53, 0x72, 0x61, 0x76, + 0x61, 0x6e, 0x61, 0x0c, 0x42, 0x68, 0x61, 0x64, + 0x72, 0x61, 0x0c, 0x41, 0x73, 0x76, 0x69, 0x6e, + 0x61, 0x0e, 0x4b, 0x61, 0x72, 0x74, 0x69, 0x6b, + 0x61, 0x14, 0x41, 0x67, 0x72, 0x61, 0x68, 0x61, + 0x79, 0x61, 0x6e, 0x61, 0x0a, 0x50, 0x61, 0x75, + 0x73, 0x61, 0x0a, 0x4d, 0x61, 0x67, 0x68, 0x61, + 0x10, 0x50, 0x68, 0x61, 0x6c, 0x67, 0x75, 0x6e, + 0x61, 0x08, 0x53, 0x61, 0x6b, 0x61, 0x08, 0x4d, + 0x75, 0x68, 0x2e, 0x08, 0x53, 0x61, 0x66, 0x2e, + 0x0c, 0x52, 0x61, 0x62, 0x2e, 0x20, 0x49, 0x0e, + 0x52, 0x61, 0x62, 0x2e, 0x20, 0x49, 0x49, 0x0c, + 0x4a, 0x75, 0x6d, 0x2e, 0x20, 0x49, 0x0e, 0x4a, + 0x75, 0x6d, 0x2e, 0x20, 0x49, 0x49, 0x08, 0x52, + 0x61, 0x6a, 0x2e, 0x08, 0x53, 0x68, 0x61, 0x2e, + 0x08, 0x52, 0x61, 0x6d, 0x2e, 0x0a, 0x53, 0x68, + 0x61, 0x77, 0x2e, 0x11, 0x44, 0x00, 0x68, 0x00, + 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, + 0x51, 0x00, 0x2e, 0x00, 0x11, 0x44, 0x00, 0x68, + 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, + 0x00, 0x48, 0x00, 0x2e, 0x00, 0x10, 0x4d, 0x75, + 0x68, 0x61, 0x72, 0x72, 0x61, 0x6d, 0x0a, 0x53, + 0x61, 0x66, 0x61, 0x72, 0x0f, 0x52, 0x00, 0x61, + 0x00, 0x62, 0x00, 0x69, 0x00, 0xbb, 0x02, 0x20, + 0x00, 0x49, 0x00, 0x11, 0x52, 0x00, 0x61, 0x00, + 0x62, 0x00, 0x69, 0x00, 0xbb, 0x02, 0x20, 0x00, + 0x49, 0x00, 0x49, 0x00, 0x10, 0x4a, 0x75, 0x6d, + 0x61, 0x64, 0x61, 0x20, 0x49, 0x12, 0x4a, 0x75, + 0x6d, 0x61, 0x64, 0x61, 0x20, 0x49, 0x49, 0x0a, + 0x52, 0x61, 0x6a, 0x61, 0x62, 0x0f, 0x53, 0x00, + 0x68, 0x00, 0x61, 0x00, 0xbb, 0x02, 0x62, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x0e, 0x52, 0x61, 0x6d, + 0x61, 0x64, 0x61, 0x6e, 0x0e, 0x53, 0x68, 0x61, + 0x77, 0x77, 0x61, 0x6c, 0x19, 0x44, 0x00, 0x68, + 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, + 0x00, 0x51, 0x00, 0x69, 0x00, 0xbb, 0x02, 0x64, + 0x00, 0x61, 0x00, 0x68, 0x00, 0x19, 0x44, 0x00, + 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, + 0x2d, 0x00, 0x48, 0x00, 0x69, 0x00, 0x6a, 0x00, + 0x6a, 0x00, 0x61, 0x00, 0x68, 0x00, 0x04, 0x41, + 0x48, 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x36, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x36, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x36, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, + 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x1d, 0x57, 0x00, 0x61, 0x00, + 0x64, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x1f, 0x52, 0x00, 0x65, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, + 0x59, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x37, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x2d, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6d, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x2d, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x2b, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, 0x2d, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, 0x2a, 0x4a, + 0x69, 0x6e, 0x67, 0x6f, 0x2d, 0x6b, 0x65, 0x69, + 0x75, 0x6e, 0x20, 0x28, 0x37, 0x36, 0x37, 0x2d, + 0x37, 0x37, 0x30, 0x29, 0x1d, 0x48, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x38, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x1f, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x2d, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x2d, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x1f, 0x44, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1d, 0x4a, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, + 0x4b, 0x00, 0x61, 0x00, 0x6a, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1f, 0x53, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x20, 0x54, 0x65, 0x6e, 0x2d, 0x61, + 0x6e, 0x20, 0x28, 0x38, 0x35, 0x37, 0x2d, 0x38, + 0x35, 0x39, 0x29, 0x1f, 0x4a, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x21, 0x47, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x1f, 0x45, 0x00, 0x6e, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1b, 0x4c, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x1d, 0x41, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x1f, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, + 0x45, 0x00, 0x69, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, + 0x00, 0x73, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x39, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, + 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4d, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x35, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x27, 0x4a, 0x00, 0x69, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x29, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4c, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x4a, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, 0x24, 0x54, + 0x65, 0x6e, 0x2d, 0x65, 0x69, 0x20, 0x28, 0x31, + 0x31, 0x31, 0x30, 0x2d, 0x31, 0x31, 0x31, 0x33, + 0x29, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x44, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x48, 0x00, 0x65, 0x00, 0x69, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x27, 0x45, 0x00, 0x69, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x68, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, + 0x00, 0x61, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x41, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x69, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x59, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, + 0x4a, 0x00, 0x75, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x29, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x29, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, + 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x41, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x4d, + 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x27, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x75, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x29, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x29, 0x52, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x4e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x4c, 0x01, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6d, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x1f, 0x4b, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, + 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4c, + 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x74, 0x00, + 0x73, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x4d, 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x27, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x21, 0x4c, 0x01, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x21, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1f, + 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x72, 0x00, 0x65, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x62, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x27, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x48, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x65, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x41, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4d, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x02, 0x54, 0x0a, 0x4d, + 0x65, 0x69, 0x6a, 0x69, 0x0d, 0x54, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x0b, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x0c, 0x48, 0x65, 0x69, + 0x73, 0x65, 0x69, 0x12, 0x46, 0x61, 0x72, 0x76, + 0x61, 0x72, 0x64, 0x69, 0x6e, 0x16, 0x4f, 0x72, + 0x64, 0x69, 0x62, 0x65, 0x68, 0x65, 0x73, 0x68, + 0x74, 0x0e, 0x4b, 0x68, 0x6f, 0x72, 0x64, 0x61, + 0x64, 0x06, 0x54, 0x69, 0x72, 0x0c, 0x4d, 0x6f, + 0x72, 0x64, 0x61, 0x64, 0x12, 0x53, 0x68, 0x61, + 0x68, 0x72, 0x69, 0x76, 0x61, 0x72, 0x08, 0x4d, + 0x65, 0x68, 0x72, 0x08, 0x41, 0x62, 0x61, 0x6e, + 0x08, 0x41, 0x7a, 0x61, 0x72, 0x06, 0x44, 0x65, + 0x79, 0x0c, 0x42, 0x61, 0x68, 0x6d, 0x61, 0x6e, + 0x0c, 0x45, 0x73, 0x66, 0x61, 0x6e, 0x64, 0x04, + 0x41, 0x50, 0x1b, 0x50, 0x00, 0x59, 0x01, 0x65, + 0x00, 0x64, 0x00, 0x20, 0x00, 0x52, 0x00, 0x2e, + 0x00, 0x20, 0x00, 0x4f, 0x00, 0x2e, 0x00, 0x20, + 0x00, 0x43, 0x00, 0x2e, 0x00, 0x0c, 0x52, 0x2e, + 0x4f, 0x2e, 0x43, 0x2e, 0x12, 0x63, 0x61, 0x6c, + 0x65, 0x6e, 0x64, 0x61, 0x72, 0x73, 0x08, 0x64, + 0x61, 0x74, 0x65, 0x08, 0x6c, 0x61, 0x74, 0x6e, + 0x04, 0x6e, 0x75, 0x10, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, + 0x74, 0x65, 0x72, 0x6e, 0x26, 0x7b, 0x6d, 0x69, + 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0x1e, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, + 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, + 0x0e, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, + 0x26, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0xa0, 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x63, 0x79, 0x7d, 0x3c, 0x7b, 0x6d, 0x69, + 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0xa0, 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x79, 0x7d, 0x10, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x63, 0x79, 0x2c, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0xa0, 0x7b, 0x70, + 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, + 0x67, 0x6e, 0x7d, 0x42, 0x7b, 0x6d, 0x69, 0x6e, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0xa0, + 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x0e, 0x70, 0x65, + 0x72, 0x63, 0x65, 0x6e, 0x74, 0x10, 0x70, 0x61, + 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x02, 0x2c, + 0x02, 0xa0, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x06, 0x4e, 0x61, 0x4e, 0x06, 0x6e, 0x61, 0x6e, + 0x02, 0x2b, 0x10, 0x70, 0x6c, 0x75, 0x73, 0x53, + 0x69, 0x67, 0x6e, 0x02, 0x2d, 0x12, 0x6d, 0x69, + 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, + 0x25, 0x16, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, + 0x74, 0x53, 0x69, 0x67, 0x6e, 0x03, 0x1e, 0x22, + 0x10, 0x69, 0x6e, 0x66, 0x69, 0x6e, 0x69, 0x74, + 0x79, 0x0e, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, + 0x73, 0x06, 0x41, 0x55, 0x24, 0x06, 0x41, 0x55, + 0x44, 0x04, 0x52, 0x24, 0x06, 0x42, 0x52, 0x4c, + 0x06, 0x43, 0x41, 0x24, 0x06, 0x43, 0x41, 0x44, + 0x06, 0x43, 0x4e, 0xa5, 0x06, 0x43, 0x4e, 0x59, + 0x07, 0x4b, 0x00, 0x0d, 0x01, 0x73, 0x00, 0x06, + 0x43, 0x53, 0x4b, 0x05, 0x4b, 0x00, 0x0d, 0x01, + 0x06, 0x43, 0x5a, 0x4b, 0x03, 0xac, 0x20, 0x06, + 0x45, 0x55, 0x52, 0x02, 0xa3, 0x06, 0x47, 0x42, + 0x50, 0x06, 0x48, 0x4b, 0x24, 0x06, 0x48, 0x4b, + 0x44, 0x06, 0x4a, 0x50, 0xa5, 0x06, 0x4a, 0x50, + 0x59, 0x03, 0xa9, 0x20, 0x06, 0x4b, 0x52, 0x57, + 0x06, 0x4d, 0x58, 0x24, 0x06, 0x4d, 0x58, 0x4e, + 0x06, 0x4e, 0x5a, 0x24, 0x06, 0x4e, 0x5a, 0x44, + 0x06, 0x4e, 0x54, 0x24, 0x06, 0x54, 0x57, 0x44, + 0x06, 0x55, 0x53, 0x24, 0x06, 0x55, 0x53, 0x44, + 0x08, 0x46, 0x43, 0x46, 0x41, 0x06, 0x58, 0x41, + 0x46, 0x06, 0x45, 0x43, 0x24, 0x06, 0x58, 0x43, + 0x44, 0x06, 0x45, 0x43, 0x55, 0x06, 0x58, 0x45, + 0x55, 0x06, 0x43, 0x46, 0x41, 0x06, 0x58, 0x4f, + 0x46, 0x08, 0x43, 0x46, 0x50, 0x46, 0x06, 0x58, + 0x50, 0x46, 0x14, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x63, 0x69, 0x65, 0x73, 0x52, 0x6e, 0x6f, + 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2f, + 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, + 0x61, 0x74, 0x61, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, + 0x70, 0x2f, 0x63, 0x73, 0x2e, 0x6a, 0x73, 0x0d, + 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, + 0x27, 0x00, 0xb9, 0x01, 0xf6, 0x69, 0x01, 0xa0, + 0x01, 0x00, 0x00, 0x00, 0x39, 0xd0, 0x00, 0x00, + 0x00, 0x43, 0xd1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd2, 0x00, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd4, 0x00, 0x00, 0x00, 0x04, + 0xd5, 0x00, 0x00, 0x00, 0x04, 0xd6, 0x00, 0x00, + 0x00, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x04, 0xd8, + 0x00, 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, 0x00, + 0x04, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdb, 0x00, + 0x00, 0x00, 0x04, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0xdd, 0x00, 0x00, 0x00, 0x04, 0xde, 0x00, 0x00, + 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, 0x04, 0xe0, + 0x00, 0x00, 0x00, 0x04, 0xe1, 0x00, 0x00, 0x00, + 0x04, 0xe2, 0x00, 0x00, 0x00, 0x26, 0x0f, 0x00, + 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x0a, 0x4d, 0xe4, + 0x00, 0x00, 0x00, 0x09, 0x4d, 0xe5, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, + 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x04, 0xe6, + 0x00, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x00, + 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0xec, 0x00, 0x00, 0x00, 0x04, 0xed, 0x00, + 0x00, 0x00, 0x4d, 0xee, 0x00, 0x00, 0x00, 0x04, + 0xef, 0x00, 0x00, 0x00, 0x4d, 0xf0, 0x00, 0x00, + 0x00, 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, 0xf2, + 0x00, 0x00, 0x00, 0x04, 0xf3, 0x00, 0x00, 0x00, + 0x4d, 0xf4, 0x00, 0x00, 0x00, 0x04, 0xf5, 0x00, + 0x00, 0x00, 0x4d, 0xf6, 0x00, 0x00, 0x00, 0x04, + 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xf8, 0x00, 0x00, + 0x00, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0xfa, + 0x00, 0x00, 0x00, 0x04, 0xfb, 0x00, 0x00, 0x00, + 0x4d, 0xfc, 0x00, 0x00, 0x00, 0x04, 0xfd, 0x00, + 0x00, 0x00, 0x4d, 0xfe, 0x00, 0x00, 0x00, 0x04, + 0xff, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x01, 0x00, + 0x00, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0x02, + 0x01, 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, 0x00, + 0x4d, 0x04, 0x01, 0x00, 0x00, 0x04, 0x05, 0x01, + 0x00, 0x00, 0x4d, 0x06, 0x01, 0x00, 0x00, 0x04, + 0x07, 0x01, 0x00, 0x00, 0x4d, 0x07, 0x01, 0x00, + 0x00, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, 0x09, + 0x01, 0x00, 0x00, 0x04, 0x0a, 0x01, 0x00, 0x00, + 0x4d, 0x0b, 0x01, 0x00, 0x00, 0x04, 0x0c, 0x01, + 0x00, 0x00, 0x4d, 0x0d, 0x01, 0x00, 0x00, 0x04, + 0x0e, 0x01, 0x00, 0x00, 0x4d, 0x0f, 0x01, 0x00, + 0x00, 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, 0x11, + 0x01, 0x00, 0x00, 0x04, 0x12, 0x01, 0x00, 0x00, + 0x4d, 0x13, 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, + 0x00, 0x00, 0x4d, 0x15, 0x01, 0x00, 0x00, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x4d, 0x17, 0x01, 0x00, + 0x00, 0x04, 0x18, 0x01, 0x00, 0x00, 0x4d, 0x19, + 0x01, 0x00, 0x00, 0x04, 0x1a, 0x01, 0x00, 0x00, + 0x4d, 0x1b, 0x01, 0x00, 0x00, 0x04, 0x1c, 0x01, + 0x00, 0x00, 0x4d, 0x1d, 0x01, 0x00, 0x00, 0x04, + 0x1e, 0x01, 0x00, 0x00, 0x4d, 0x1f, 0x01, 0x00, + 0x00, 0x04, 0x1a, 0x01, 0x00, 0x00, 0x4d, 0x20, + 0x01, 0x00, 0x00, 0x04, 0x1c, 0x01, 0x00, 0x00, + 0x4d, 0x21, 0x01, 0x00, 0x00, 0x04, 0x22, 0x01, + 0x00, 0x00, 0x4d, 0x23, 0x01, 0x00, 0x00, 0x04, + 0x24, 0x01, 0x00, 0x00, 0x4d, 0x25, 0x01, 0x00, + 0x00, 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, 0x27, + 0x01, 0x00, 0x00, 0x04, 0x28, 0x01, 0x00, 0x00, + 0x4d, 0x28, 0x01, 0x00, 0x00, 0x04, 0x29, 0x01, + 0x00, 0x00, 0x4d, 0x2a, 0x01, 0x00, 0x00, 0x04, + 0x2b, 0x01, 0x00, 0x00, 0x4d, 0x2c, 0x01, 0x00, + 0x00, 0x04, 0x2d, 0x01, 0x00, 0x00, 0x4d, 0x2e, + 0x01, 0x00, 0x00, 0x04, 0x2f, 0x01, 0x00, 0x00, + 0x4d, 0x30, 0x01, 0x00, 0x00, 0x04, 0x2b, 0x01, + 0x00, 0x00, 0x4d, 0x31, 0x01, 0x00, 0x00, 0x04, + 0x2d, 0x01, 0x00, 0x00, 0x4d, 0x32, 0x01, 0x00, + 0x00, 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, 0x33, + 0x01, 0x00, 0x00, 0x04, 0x34, 0x01, 0x00, 0x00, + 0x4d, 0x35, 0x01, 0x00, 0x00, 0x04, 0x36, 0x01, + 0x00, 0x00, 0x4d, 0x37, 0x01, 0x00, 0x00, 0x04, + 0x38, 0x01, 0x00, 0x00, 0x4d, 0x39, 0x01, 0x00, + 0x00, 0x04, 0x3a, 0x01, 0x00, 0x00, 0x4d, 0x3b, + 0x01, 0x00, 0x00, 0x4d, 0x3c, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x3d, 0x01, 0x00, 0x00, 0x4d, 0x3e, + 0x01, 0x00, 0x00, 0x04, 0x34, 0x01, 0x00, 0x00, + 0x4d, 0x35, 0x01, 0x00, 0x00, 0x04, 0x2b, 0x01, + 0x00, 0x00, 0x4d, 0x31, 0x01, 0x00, 0x00, 0x04, + 0x3f, 0x01, 0x00, 0x00, 0x4d, 0x2c, 0x01, 0x00, + 0x00, 0x4d, 0x40, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x41, 0x01, 0x00, 0x00, 0x4d, 0x42, 0x01, 0x00, + 0x00, 0x04, 0x43, 0x01, 0x00, 0x00, 0x4d, 0x44, + 0x01, 0x00, 0x00, 0x04, 0x0e, 0x01, 0x00, 0x00, + 0x4d, 0x0d, 0x01, 0x00, 0x00, 0x04, 0x0a, 0x01, + 0x00, 0x00, 0x4d, 0x09, 0x01, 0x00, 0x00, 0x4d, + 0x45, 0x01, 0x00, 0x00, 0x4d, 0x46, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x0b, 0xbe, 0x00, 0xbe, 0x01, + 0xbe, 0x02, 0xbe, 0x03, 0xbe, 0x04, 0xbe, 0x05, + 0xbe, 0x06, 0xbe, 0x07, 0xbe, 0x08, 0xbe, 0x09, + 0xbe, 0x0a, 0xbe, 0x0b, 0x26, 0x0c, 0x00, 0x4d, + 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x60, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x47, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x75, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x47, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, + 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x4d, + 0xd5, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x0c, + 0xbe, 0x0d, 0xbe, 0x0e, 0xbe, 0x0f, 0xbe, 0x10, + 0xbe, 0x11, 0xbe, 0x12, 0xbe, 0x13, 0xbe, 0x14, + 0xbe, 0x15, 0xbe, 0x16, 0xbe, 0x17, 0x26, 0x0c, + 0x00, 0x4d, 0x47, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, + 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, + 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, + 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x60, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x4d, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x4d, + 0x7b, 0x01, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x18, 0xbe, 0x19, 0xbe, + 0x1a, 0xbe, 0x1b, 0xbe, 0x1c, 0xbe, 0x1d, 0xbe, + 0x1e, 0xbe, 0x1f, 0xbe, 0x20, 0xbe, 0x21, 0xbe, + 0x22, 0xbe, 0x23, 0xbe, 0x24, 0x26, 0x0d, 0x00, + 0x4d, 0x47, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, + 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, + 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, + 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, + 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, + 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, + 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, + 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, + 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x26, 0x0d, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, + 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, + 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, + 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, + 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, + 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, + 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x60, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x74, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x95, 0x01, 0x00, + 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0x47, 0x01, 0x00, 0x00, 0x04, 0x95, + 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, + 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, + 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x25, 0xbe, 0x26, 0xbe, 0x27, 0xbe, 0x28, + 0xbe, 0x29, 0xbe, 0x2a, 0xbe, 0x2b, 0xbe, 0x2c, + 0xbe, 0x2d, 0xbe, 0x2e, 0xbe, 0x2f, 0xbe, 0x30, + 0x26, 0x0c, 0x00, 0x4d, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, + 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, + 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, + 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, + 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x60, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, + 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x31, 0xbe, + 0x32, 0xbe, 0x33, 0xbe, 0x34, 0xbe, 0x35, 0xbe, + 0x36, 0xbe, 0x37, 0xbe, 0x38, 0xbe, 0x39, 0xbe, + 0x3a, 0xbe, 0x3b, 0xbe, 0x3c, 0xbe, 0x3d, 0x26, + 0x0d, 0x00, 0x4d, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, + 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, + 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, + 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, + 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, + 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, + 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, + 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, + 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, + 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, + 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, + 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, + 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, + 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, + 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x60, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x95, + 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, + 0x96, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x3e, 0xbe, 0x3f, 0xbe, 0x40, + 0xbe, 0x41, 0xbe, 0x42, 0xbe, 0x43, 0xbe, 0x44, + 0xbe, 0x45, 0xbe, 0x46, 0xbe, 0x47, 0xbe, 0x48, + 0xbe, 0x49, 0xbe, 0x4a, 0x26, 0x0d, 0x00, 0x4d, + 0x47, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, + 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, + 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, + 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, + 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, + 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, + 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, + 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, + 0x04, 0xa3, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x97, 0x01, + 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, + 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, + 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, + 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, + 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, + 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, + 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, + 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x26, 0x0d, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x60, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x95, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x95, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x95, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, + 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, + 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x4b, 0xbe, 0x4c, 0xbe, 0x4d, 0xbe, 0x4e, + 0xbe, 0x4f, 0xbe, 0x50, 0xbe, 0x51, 0xbe, 0x52, + 0xbe, 0x53, 0xbe, 0x54, 0xbe, 0x55, 0xbe, 0x56, + 0x26, 0x0c, 0x00, 0x4d, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, + 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, + 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, + 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, + 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x60, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x95, 0x01, + 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x57, 0xbe, 0x58, 0xbe, 0x59, 0xbe, + 0x5a, 0xbe, 0x5b, 0xbe, 0x5c, 0xbe, 0x5d, 0xbe, + 0x5e, 0xbe, 0x5f, 0xbe, 0x60, 0xbe, 0x61, 0xbe, + 0x62, 0x26, 0x0c, 0x00, 0x4d, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, + 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x53, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x60, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xa4, + 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, + 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, + 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, 0x47, 0x01, + 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, + 0xa9, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, + 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x26, 0x04, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa8, + 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, + 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, + 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, + 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, + 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x63, 0xbe, 0x64, 0xbe, 0x65, 0xbe, 0x66, + 0xbe, 0x67, 0xbe, 0x68, 0xbe, 0x69, 0xbe, 0x6a, + 0xbe, 0x6b, 0xbe, 0x6c, 0xbe, 0x6d, 0xbe, 0x6e, + 0xbe, 0x6f, 0xbe, 0x70, 0x26, 0x0e, 0x00, 0x4d, + 0x47, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, + 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, + 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, + 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, + 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, + 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, + 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, + 0x01, 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, + 0x04, 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, + 0x00, 0x00, 0x26, 0x0e, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, + 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, + 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, 0xae, + 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, + 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, + 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, + 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, + 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, 0x04, 0xb6, + 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, + 0x26, 0x0e, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x60, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xb8, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x47, 0x01, + 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xb8, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x71, 0xbe, 0x72, 0xbe, 0x73, + 0xbe, 0x74, 0xbe, 0x75, 0xbe, 0x76, 0xbe, 0x77, + 0xbe, 0x78, 0xbe, 0x79, 0xbe, 0x7a, 0xbe, 0x7b, + 0xbe, 0x7c, 0x26, 0x0c, 0x00, 0x4d, 0x47, 0x01, + 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, 0x04, + 0xba, 0x01, 0x00, 0x00, 0x04, 0xbb, 0x01, 0x00, + 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, 0x04, 0xbd, + 0x01, 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, + 0x04, 0xbf, 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, + 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, 0x04, + 0xc2, 0x01, 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, + 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xb9, + 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, + 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, 0x01, + 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, 0x04, + 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, 0x00, + 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, 0x04, 0xc1, + 0x01, 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, 0x00, + 0x04, 0xc3, 0x01, 0x00, 0x00, 0x04, 0xc4, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x60, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xc5, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x47, 0x01, 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x76, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, + 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x7d, 0xbe, 0x7e, + 0xbe, 0x7f, 0xbe, 0x80, 0xbe, 0x81, 0xbe, 0x82, + 0xbe, 0x83, 0xbe, 0x84, 0xbe, 0x85, 0xbe, 0x86, + 0xbe, 0x87, 0xbe, 0x88, 0x26, 0x0c, 0x00, 0x4d, + 0x47, 0x01, 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, + 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, + 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, + 0x04, 0xca, 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, + 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, + 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, + 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, + 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, + 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, + 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, + 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, 0xd8, + 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, + 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, + 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, 0x04, + 0xdd, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x60, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x47, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xde, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x47, 0x01, 0x00, 0x00, 0x04, 0xde, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, + 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x89, + 0xbe, 0x8a, 0xbe, 0x8b, 0xbe, 0x8c, 0xbe, 0x8d, + 0xbe, 0x8e, 0xbe, 0x8f, 0xbe, 0x90, 0xbe, 0x91, + 0xbe, 0x92, 0xbe, 0x93, 0xbe, 0x94, 0x26, 0x0c, + 0x00, 0x4d, 0x47, 0x01, 0x00, 0x00, 0x04, 0xc6, + 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, + 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, + 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, 0x04, + 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, + 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, + 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, + 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, + 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, + 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, + 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, + 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, + 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, + 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, + 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x60, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xde, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x47, 0x01, 0x00, 0x00, + 0x04, 0xde, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xde, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, + 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x95, 0xbe, 0x96, 0xbe, 0x97, 0xbe, 0x98, + 0xbe, 0x99, 0xbe, 0x9a, 0xbe, 0x9b, 0xbe, 0x9c, + 0xbe, 0x9d, 0xbe, 0x9e, 0xbe, 0x9f, 0xbe, 0xa0, + 0x26, 0x0c, 0x00, 0x4d, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x60, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xdf, 0x01, + 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, + 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, + 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, + 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, + 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, + 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, + 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, + 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, + 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, + 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, + 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, + 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, + 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, + 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, + 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, + 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, + 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, + 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, 0xfc, + 0x01, 0x00, 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, + 0x04, 0xfe, 0x01, 0x00, 0x00, 0x26, 0x20, 0x00, + 0x04, 0xff, 0x01, 0x00, 0x00, 0x4d, 0x20, 0x00, + 0x00, 0x80, 0x04, 0x00, 0x02, 0x00, 0x00, 0x4d, + 0x21, 0x00, 0x00, 0x80, 0x04, 0x01, 0x02, 0x00, + 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0x02, + 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, + 0x04, 0x03, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, + 0x00, 0x80, 0x04, 0x04, 0x02, 0x00, 0x00, 0x4d, + 0x25, 0x00, 0x00, 0x80, 0x04, 0x05, 0x02, 0x00, + 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0x06, + 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, + 0x04, 0x07, 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, + 0x00, 0x80, 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, + 0x29, 0x00, 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, + 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x0a, + 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, + 0x04, 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, + 0x00, 0x80, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, + 0x2d, 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, + 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x0e, + 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, + 0x04, 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, + 0x00, 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, + 0x31, 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, + 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x12, + 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, + 0x04, 0x13, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, + 0x00, 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, + 0x35, 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, + 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x16, + 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, + 0x04, 0x17, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, + 0x00, 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, + 0x39, 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, + 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x1a, + 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, + 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, + 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, + 0x3d, 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, + 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x1e, + 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, + 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, + 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, + 0x41, 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, + 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x22, + 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, + 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, + 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, + 0x45, 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, + 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x26, + 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, + 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, + 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, + 0x49, 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, + 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x2a, + 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, + 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, + 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, + 0x4d, 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, + 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x2e, + 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, + 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, + 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, + 0x51, 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, + 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x32, + 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, + 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, + 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, + 0x55, 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, + 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x36, + 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, + 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, + 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, + 0x59, 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, + 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x3a, + 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, + 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, + 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, + 0x5d, 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, + 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x3e, + 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, + 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, + 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, + 0x61, 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, + 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x42, + 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, + 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, + 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, + 0x65, 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, + 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x46, + 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, + 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, + 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, + 0x69, 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, + 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x4a, + 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, + 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, + 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, + 0x6d, 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, + 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x4e, + 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, + 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, + 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, + 0x71, 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, + 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x52, + 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, + 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, + 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, + 0x75, 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, + 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x56, + 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, + 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, + 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, + 0x79, 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, + 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x5a, + 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, + 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, + 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, + 0x7d, 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, + 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x5e, + 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, + 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, + 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, + 0x81, 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, + 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x62, + 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, + 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, + 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, + 0x85, 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, + 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x66, + 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, + 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, + 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, + 0x89, 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, + 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x6a, + 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, + 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, + 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, + 0x8d, 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, + 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x6e, + 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, + 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, + 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, + 0x91, 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, + 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x72, + 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, + 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, + 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, + 0x95, 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, + 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x76, + 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, + 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, + 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, + 0x99, 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, + 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x7a, + 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, + 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, + 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, + 0x9d, 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, + 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x7e, + 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, + 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, + 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, + 0xa1, 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, + 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x82, + 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, + 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, + 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, + 0xa5, 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, + 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x86, + 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, + 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, + 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, + 0xa9, 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, + 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x8a, + 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, + 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, + 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, + 0xad, 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, + 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x8e, + 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, + 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, + 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, + 0xb1, 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, + 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0x92, + 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, + 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, + 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, + 0xb5, 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, + 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0x96, + 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, + 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, + 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, + 0xb9, 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, + 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0x9a, + 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, + 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, + 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, + 0xbd, 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, + 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0x9e, + 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, + 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, + 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, + 0xc1, 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, + 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0xa2, + 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, + 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, + 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, + 0xc5, 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, + 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0xa6, + 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, + 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, + 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, + 0xc9, 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, + 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xaa, + 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, + 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, + 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, + 0xcd, 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, + 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xae, + 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, + 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, + 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, + 0xd1, 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, + 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xb2, + 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, + 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, + 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, + 0xd5, 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xb6, + 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, + 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xba, + 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, + 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xbe, + 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, + 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xc2, + 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, + 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, + 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, + 0xe5, 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xc6, + 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, + 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, 0xe8, 0x00, + 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, + 0xe9, 0x00, 0x00, 0x80, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0x07, + 0x01, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, + 0x4d, 0x47, 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, + 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, + 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, + 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, + 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, + 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, + 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, + 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, + 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, + 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, + 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, + 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, + 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, + 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, + 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, + 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, + 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, + 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, + 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, 0xfc, + 0x01, 0x00, 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, + 0x04, 0xfe, 0x01, 0x00, 0x00, 0x26, 0x20, 0x00, + 0x04, 0xff, 0x01, 0x00, 0x00, 0x4d, 0x20, 0x00, + 0x00, 0x80, 0x04, 0x00, 0x02, 0x00, 0x00, 0x4d, + 0x21, 0x00, 0x00, 0x80, 0x04, 0x01, 0x02, 0x00, + 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0x02, + 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, + 0x04, 0x03, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, + 0x00, 0x80, 0x04, 0x04, 0x02, 0x00, 0x00, 0x4d, + 0x25, 0x00, 0x00, 0x80, 0x04, 0x05, 0x02, 0x00, + 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0x06, + 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, + 0x04, 0x07, 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, + 0x00, 0x80, 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, + 0x29, 0x00, 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, + 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x0a, + 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, + 0x04, 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, + 0x00, 0x80, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, + 0x2d, 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, + 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x0e, + 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, + 0x04, 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, + 0x00, 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, + 0x31, 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, + 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x12, + 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, + 0x04, 0x13, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, + 0x00, 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, + 0x35, 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, + 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x16, + 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, + 0x04, 0x17, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, + 0x00, 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, + 0x39, 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, + 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x1a, + 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, + 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, + 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, + 0x3d, 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, + 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x1e, + 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, + 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, + 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, + 0x41, 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, + 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x22, + 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, + 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, + 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, + 0x45, 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, + 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x26, + 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, + 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, + 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, + 0x49, 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, + 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x2a, + 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, + 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, + 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, + 0x4d, 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, + 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x2e, + 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, + 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, + 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, + 0x51, 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, + 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x32, + 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, + 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, + 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, + 0x55, 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, + 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x36, + 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, + 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, + 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, + 0x59, 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, + 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x3a, + 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, + 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, + 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, + 0x5d, 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, + 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x3e, + 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, + 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, + 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, + 0x61, 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, + 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x42, + 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, + 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, + 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, + 0x65, 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, + 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x46, + 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, + 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, + 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, + 0x69, 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, + 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x4a, + 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, + 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, + 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, + 0x6d, 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, + 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x4e, + 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, + 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, + 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, + 0x71, 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, + 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x52, + 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, + 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, + 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, + 0x75, 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, + 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x56, + 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, + 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, + 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, + 0x79, 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, + 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x5a, + 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, + 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, + 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, + 0x7d, 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, + 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x5e, + 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, + 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, + 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, + 0x81, 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, + 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x62, + 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, + 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, + 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, + 0x85, 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, + 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x66, + 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, + 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, + 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, + 0x89, 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, + 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x6a, + 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, + 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, + 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, + 0x8d, 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, + 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x6e, + 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, + 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, + 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, + 0x91, 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, + 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x72, + 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, + 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, + 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, + 0x95, 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, + 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x76, + 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, + 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, + 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, + 0x99, 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, + 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x7a, + 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, + 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, + 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, + 0x9d, 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, + 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x7e, + 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, + 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, + 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, + 0xa1, 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, + 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x82, + 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, + 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, + 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, + 0xa5, 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, + 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x86, + 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, + 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, + 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, + 0xa9, 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, + 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x8a, + 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, + 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, + 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, + 0xad, 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, + 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x8e, + 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, + 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, + 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, + 0xb1, 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, + 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0x92, + 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, + 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, + 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, + 0xb5, 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, + 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0x96, + 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, + 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, + 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, + 0xb9, 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, + 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0x9a, + 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, + 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, + 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, + 0xbd, 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, + 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0x9e, + 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, + 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, + 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, + 0xc1, 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, + 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0xa2, + 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, + 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, + 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, + 0xc5, 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, + 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0xa6, + 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, + 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, + 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, + 0xc9, 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, + 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xaa, + 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, + 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, + 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, + 0xcd, 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, + 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xae, + 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, + 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, + 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, + 0xd1, 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, + 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xb2, + 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, + 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, + 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, + 0xd5, 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xb6, + 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, + 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xba, + 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, + 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xbe, + 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, + 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xc2, + 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, + 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, + 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, + 0xe5, 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xc6, + 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x00, + 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, + 0xe9, 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0xcb, + 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xdf, 0x01, + 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, + 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, + 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, + 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, + 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, + 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, + 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, + 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, + 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, + 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, + 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, + 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, + 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, + 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, + 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, + 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, + 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, + 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, 0xfc, + 0x01, 0x00, 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, + 0x04, 0xfe, 0x01, 0x00, 0x00, 0x26, 0x20, 0x00, + 0x04, 0xff, 0x01, 0x00, 0x00, 0x4d, 0x20, 0x00, + 0x00, 0x80, 0x04, 0x00, 0x02, 0x00, 0x00, 0x4d, + 0x21, 0x00, 0x00, 0x80, 0x04, 0x01, 0x02, 0x00, + 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0x02, + 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, + 0x04, 0x03, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, + 0x00, 0x80, 0x04, 0x04, 0x02, 0x00, 0x00, 0x4d, + 0x25, 0x00, 0x00, 0x80, 0x04, 0x05, 0x02, 0x00, + 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0x06, + 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, + 0x04, 0x07, 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, + 0x00, 0x80, 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, + 0x29, 0x00, 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, + 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x0a, + 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, + 0x04, 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, + 0x00, 0x80, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, + 0x2d, 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, + 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x0e, + 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, + 0x04, 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, + 0x00, 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, + 0x31, 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, + 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x12, + 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, + 0x04, 0x13, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, + 0x00, 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, + 0x35, 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, + 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x16, + 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, + 0x04, 0x17, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, + 0x00, 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, + 0x39, 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, + 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x1a, + 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, + 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, + 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, + 0x3d, 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, + 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x1e, + 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, + 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, + 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, + 0x41, 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, + 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x22, + 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, + 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, + 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, + 0x45, 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, + 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x26, + 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, + 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, + 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, + 0x49, 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, + 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x2a, + 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, + 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, + 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, + 0x4d, 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, + 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x2e, + 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, + 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, + 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, + 0x51, 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, + 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x32, + 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, + 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, + 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, + 0x55, 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, + 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x36, + 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, + 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, + 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, + 0x59, 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, + 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x3a, + 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, + 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, + 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, + 0x5d, 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, + 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x3e, + 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, + 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, + 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, + 0x61, 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, + 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x42, + 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, + 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, + 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, + 0x65, 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, + 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x46, + 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, + 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, + 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, + 0x69, 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, + 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x4a, + 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, + 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, + 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, + 0x6d, 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, + 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x4e, + 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, + 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, + 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, + 0x71, 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, + 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x52, + 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, + 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, + 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, + 0x75, 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, + 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x56, + 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, + 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, + 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, + 0x79, 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, + 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x5a, + 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, + 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, + 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, + 0x7d, 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, + 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x5e, + 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, + 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, + 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, + 0x81, 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, + 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x62, + 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, + 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, + 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, + 0x85, 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, + 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x66, + 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, + 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, + 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, + 0x89, 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, + 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x6a, + 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, + 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, + 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, + 0x8d, 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, + 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x6e, + 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, + 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, + 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, + 0x91, 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, + 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x72, + 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, + 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, + 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, + 0x95, 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, + 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x76, + 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, + 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, + 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, + 0x99, 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, + 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x7a, + 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, + 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, + 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, + 0x9d, 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, + 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x7e, + 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, + 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, + 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, + 0xa1, 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, + 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x82, + 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, + 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, + 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, + 0xa5, 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, + 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x86, + 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, + 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, + 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, + 0xa9, 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, + 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x8a, + 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, + 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, + 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, + 0xad, 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, + 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x8e, + 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, + 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, + 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, + 0xb1, 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, + 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0x92, + 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, + 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, + 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, + 0xb5, 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, + 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0x96, + 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, + 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, + 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, + 0xb9, 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, + 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0x9a, + 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, + 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, + 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, + 0xbd, 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, + 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0x9e, + 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, + 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, + 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, + 0xc1, 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, + 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0xa2, + 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, + 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, + 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, + 0xc5, 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, + 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0xa6, + 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, + 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, + 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, + 0xc9, 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, + 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xaa, + 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, + 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, + 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, + 0xcd, 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, + 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xae, + 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, + 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, + 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, + 0xd1, 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, + 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xb2, + 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, + 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, + 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, + 0xd5, 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xb6, + 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, + 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xba, + 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, + 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xbe, + 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, + 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xc2, + 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, + 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, + 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, + 0xe5, 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xc6, + 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x00, + 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, + 0xe9, 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0xcb, + 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x76, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x4d, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x4d, + 0x7b, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0xa1, 0xbe, 0xa2, 0xbe, + 0xa3, 0xbe, 0xa4, 0xbe, 0xa5, 0xbe, 0xa6, 0xbe, + 0xa7, 0xbe, 0xa8, 0xbe, 0xa9, 0xbe, 0xaa, 0xbe, + 0xab, 0xbe, 0xac, 0x26, 0x0c, 0x00, 0x4d, 0x47, + 0x01, 0x00, 0x00, 0x04, 0xcc, 0x02, 0x00, 0x00, + 0x04, 0xcd, 0x02, 0x00, 0x00, 0x04, 0xce, 0x02, + 0x00, 0x00, 0x04, 0xcf, 0x02, 0x00, 0x00, 0x04, + 0xd0, 0x02, 0x00, 0x00, 0x04, 0xd1, 0x02, 0x00, + 0x00, 0x04, 0xd2, 0x02, 0x00, 0x00, 0x04, 0xd3, + 0x02, 0x00, 0x00, 0x04, 0xd4, 0x02, 0x00, 0x00, + 0x04, 0xd5, 0x02, 0x00, 0x00, 0x04, 0xd6, 0x02, + 0x00, 0x00, 0x04, 0xd7, 0x02, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xcc, 0x02, 0x00, 0x00, 0x04, 0xcd, 0x02, 0x00, + 0x00, 0x04, 0xce, 0x02, 0x00, 0x00, 0x04, 0xcf, + 0x02, 0x00, 0x00, 0x04, 0xd0, 0x02, 0x00, 0x00, + 0x04, 0xd1, 0x02, 0x00, 0x00, 0x04, 0xd2, 0x02, + 0x00, 0x00, 0x04, 0xd3, 0x02, 0x00, 0x00, 0x04, + 0xd4, 0x02, 0x00, 0x00, 0x04, 0xd5, 0x02, 0x00, + 0x00, 0x04, 0xd6, 0x02, 0x00, 0x00, 0x04, 0xd7, + 0x02, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x60, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x47, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xd8, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x47, 0x01, 0x00, 0x00, 0x04, 0xd8, 0x02, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xd8, 0x02, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x76, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, + 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0xad, 0xbe, + 0xae, 0xbe, 0xaf, 0xbe, 0xb0, 0xbe, 0xb1, 0xbe, + 0xb2, 0xbe, 0xb3, 0xbe, 0xb4, 0xbe, 0xb5, 0xbe, + 0xb6, 0xbe, 0xb7, 0xbe, 0xb8, 0x26, 0x0c, 0x00, + 0x4d, 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x60, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x47, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xd9, 0x02, 0x00, 0x00, 0x04, + 0xda, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0x47, 0x01, 0x00, 0x00, 0x04, 0xd9, 0x02, 0x00, + 0x00, 0x04, 0xda, 0x02, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd9, + 0x02, 0x00, 0x00, 0x04, 0xda, 0x02, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, + 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x4d, + 0xe2, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x02, 0x00, + 0x00, 0x4d, 0xdc, 0x02, 0x00, 0x00, 0x0b, 0x04, + 0xdd, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xde, 0x02, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xdf, + 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x02, 0x00, 0x00, + 0x04, 0xe1, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x02, + 0x00, 0x00, 0x4d, 0xe3, 0x02, 0x00, 0x00, 0x0b, + 0x04, 0xe4, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x02, + 0x00, 0x00, 0x04, 0xe5, 0x02, 0x00, 0x00, 0x4d, + 0xe2, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x02, 0x00, + 0x00, 0x0b, 0x04, 0xe7, 0x02, 0x00, 0x00, 0x4d, + 0xe0, 0x02, 0x00, 0x00, 0x04, 0xe8, 0x02, 0x00, + 0x00, 0x4d, 0xe2, 0x02, 0x00, 0x00, 0x4d, 0xe9, + 0x02, 0x00, 0x00, 0x4d, 0xea, 0x02, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0xeb, 0x02, 0x00, 0x00, 0x4d, + 0xe3, 0x02, 0x00, 0x00, 0x04, 0xec, 0x02, 0x00, + 0x00, 0x4d, 0xed, 0x02, 0x00, 0x00, 0x04, 0xee, + 0x02, 0x00, 0x00, 0x4d, 0xef, 0x02, 0x00, 0x00, + 0x04, 0xf0, 0x02, 0x00, 0x00, 0x4d, 0xf1, 0x02, + 0x00, 0x00, 0x04, 0xf2, 0x02, 0x00, 0x00, 0x4d, + 0xf3, 0x02, 0x00, 0x00, 0x04, 0xf4, 0x02, 0x00, + 0x00, 0x4d, 0xf5, 0x02, 0x00, 0x00, 0x04, 0xf6, + 0x02, 0x00, 0x00, 0x4d, 0xf7, 0x02, 0x00, 0x00, + 0x4d, 0xdd, 0x02, 0x00, 0x00, 0x4d, 0xf8, 0x02, + 0x00, 0x00, 0x0b, 0x04, 0xf9, 0x02, 0x00, 0x00, + 0x4d, 0xfa, 0x02, 0x00, 0x00, 0x04, 0xfb, 0x02, + 0x00, 0x00, 0x4d, 0xfc, 0x02, 0x00, 0x00, 0x04, + 0xfd, 0x02, 0x00, 0x00, 0x4d, 0xfe, 0x02, 0x00, + 0x00, 0x04, 0xff, 0x02, 0x00, 0x00, 0x4d, 0x00, + 0x03, 0x00, 0x00, 0x04, 0x01, 0x03, 0x00, 0x00, + 0x4d, 0x02, 0x03, 0x00, 0x00, 0x04, 0x03, 0x03, + 0x00, 0x00, 0x4d, 0x04, 0x03, 0x00, 0x00, 0x04, + 0x05, 0x03, 0x00, 0x00, 0x4d, 0x06, 0x03, 0x00, + 0x00, 0x04, 0x07, 0x03, 0x00, 0x00, 0x4d, 0x08, + 0x03, 0x00, 0x00, 0x04, 0x09, 0x03, 0x00, 0x00, + 0x4d, 0x0a, 0x03, 0x00, 0x00, 0x04, 0x0b, 0x03, + 0x00, 0x00, 0x4d, 0x0c, 0x03, 0x00, 0x00, 0x04, + 0x0d, 0x03, 0x00, 0x00, 0x4d, 0x0e, 0x03, 0x00, + 0x00, 0x04, 0x0f, 0x03, 0x00, 0x00, 0x4d, 0x10, + 0x03, 0x00, 0x00, 0x04, 0x11, 0x03, 0x00, 0x00, + 0x4d, 0x12, 0x03, 0x00, 0x00, 0x04, 0x13, 0x03, + 0x00, 0x00, 0x4d, 0x14, 0x03, 0x00, 0x00, 0x04, + 0x15, 0x03, 0x00, 0x00, 0x4d, 0x16, 0x03, 0x00, + 0x00, 0x04, 0x17, 0x03, 0x00, 0x00, 0x4d, 0x18, + 0x03, 0x00, 0x00, 0x04, 0x19, 0x03, 0x00, 0x00, + 0x4d, 0x1a, 0x03, 0x00, 0x00, 0x04, 0x1b, 0x03, + 0x00, 0x00, 0x4d, 0x1c, 0x03, 0x00, 0x00, 0x04, + 0x1d, 0x03, 0x00, 0x00, 0x4d, 0x1e, 0x03, 0x00, + 0x00, 0x04, 0x1f, 0x03, 0x00, 0x00, 0x4d, 0x20, + 0x03, 0x00, 0x00, 0x4d, 0x21, 0x03, 0x00, 0x00, + 0x4d, 0x45, 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, + 0xcc, 0x28, 0xc4, 0x0c, 0x01, 0x00, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, + 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_da_size = 24834; + +const uint8_t intl_da[24834] = { + 0x01, 0xdf, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x64, 0x61, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x0e, + 0x7b, 0x31, 0x7d, 0x20, 0x7b, 0x30, 0x7d, 0x0a, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, 0x65, + 0x64, 0x69, 0x75, 0x6d, 0x1a, 0x7b, 0x31, 0x7d, + 0x20, 0x27, 0x6b, 0x6c, 0x27, 0x2e, 0x20, 0x7b, + 0x30, 0x7d, 0x08, 0x66, 0x75, 0x6c, 0x6c, 0x08, + 0x6c, 0x6f, 0x6e, 0x67, 0x04, 0x64, 0x2e, 0x02, + 0x64, 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, 0x14, + 0x45, 0x20, 0x27, 0x64, 0x65, 0x6e, 0x27, 0x20, + 0x64, 0x2e, 0x04, 0x45, 0x64, 0x10, 0x45, 0x20, + 0x68, 0x2e, 0x6d, 0x6d, 0x20, 0x61, 0x06, 0x45, + 0x68, 0x6d, 0x0e, 0x45, 0x20, 0x48, 0x48, 0x2e, + 0x6d, 0x6d, 0x06, 0x45, 0x48, 0x6d, 0x16, 0x45, + 0x20, 0x68, 0x2e, 0x6d, 0x6d, 0x2e, 0x73, 0x73, + 0x20, 0x61, 0x08, 0x45, 0x68, 0x6d, 0x73, 0x14, + 0x45, 0x20, 0x48, 0x48, 0x2e, 0x6d, 0x6d, 0x2e, + 0x73, 0x73, 0x08, 0x45, 0x48, 0x6d, 0x73, 0x06, + 0x79, 0x20, 0x47, 0x04, 0x47, 0x79, 0x0e, 0x4d, + 0x4d, 0x4d, 0x20, 0x79, 0x20, 0x47, 0x0a, 0x47, + 0x79, 0x4d, 0x4d, 0x4d, 0x14, 0x64, 0x2e, 0x20, + 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x20, 0x47, 0x0c, + 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x18, 0x45, + 0x20, 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x20, + 0x79, 0x20, 0x47, 0x0e, 0x47, 0x79, 0x4d, 0x4d, + 0x4d, 0x45, 0x64, 0x06, 0x68, 0x20, 0x61, 0x02, + 0x68, 0x04, 0x48, 0x48, 0x02, 0x48, 0x0c, 0x68, + 0x2e, 0x6d, 0x6d, 0x20, 0x61, 0x04, 0x68, 0x6d, + 0x0a, 0x48, 0x48, 0x2e, 0x6d, 0x6d, 0x04, 0x48, + 0x6d, 0x12, 0x68, 0x2e, 0x6d, 0x6d, 0x2e, 0x73, + 0x73, 0x20, 0x61, 0x06, 0x68, 0x6d, 0x73, 0x10, + 0x48, 0x48, 0x2e, 0x6d, 0x6d, 0x2e, 0x73, 0x73, + 0x06, 0x48, 0x6d, 0x73, 0x16, 0x68, 0x2e, 0x6d, + 0x6d, 0x2e, 0x73, 0x73, 0x20, 0x61, 0x20, 0x76, + 0x08, 0x68, 0x6d, 0x73, 0x76, 0x14, 0x48, 0x48, + 0x2e, 0x6d, 0x6d, 0x2e, 0x73, 0x73, 0x20, 0x76, + 0x08, 0x48, 0x6d, 0x73, 0x76, 0x10, 0x68, 0x2e, + 0x6d, 0x6d, 0x20, 0x61, 0x20, 0x76, 0x06, 0x68, + 0x6d, 0x76, 0x0e, 0x48, 0x48, 0x2e, 0x6d, 0x6d, + 0x20, 0x76, 0x06, 0x48, 0x6d, 0x76, 0x02, 0x4d, + 0x06, 0x64, 0x2f, 0x4d, 0x04, 0x4d, 0x64, 0x0a, + 0x45, 0x20, 0x64, 0x2f, 0x4d, 0x06, 0x4d, 0x45, + 0x64, 0x0a, 0x64, 0x64, 0x2f, 0x4d, 0x4d, 0x08, + 0x4d, 0x4d, 0x64, 0x64, 0x06, 0x4d, 0x4d, 0x4d, + 0x0c, 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x08, + 0x4d, 0x4d, 0x4d, 0x64, 0x10, 0x45, 0x20, 0x64, + 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, + 0x4d, 0x45, 0x64, 0x0e, 0x64, 0x2e, 0x20, 0x4d, + 0x4d, 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x4d, + 0x64, 0x12, 0x45, 0x20, 0x64, 0x2e, 0x20, 0x4d, + 0x4d, 0x4d, 0x4d, 0x0c, 0x4d, 0x4d, 0x4d, 0x4d, + 0x45, 0x64, 0x0a, 0x6d, 0x6d, 0x2e, 0x73, 0x73, + 0x04, 0x6d, 0x73, 0x02, 0x79, 0x06, 0x4d, 0x2f, + 0x79, 0x04, 0x79, 0x4d, 0x0a, 0x64, 0x2f, 0x4d, + 0x2f, 0x79, 0x06, 0x79, 0x4d, 0x64, 0x0e, 0x45, + 0x20, 0x64, 0x2f, 0x4d, 0x2f, 0x79, 0x08, 0x79, + 0x4d, 0x45, 0x64, 0x08, 0x4d, 0x4d, 0x2f, 0x79, + 0x06, 0x79, 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, + 0x20, 0x79, 0x08, 0x79, 0x4d, 0x4d, 0x4d, 0x10, + 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, + 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x14, 0x45, + 0x20, 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x20, + 0x79, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, + 0x0c, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0a, + 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, 0x51, 0x51, + 0x51, 0x20, 0x79, 0x08, 0x79, 0x51, 0x51, 0x51, + 0x0c, 0x51, 0x51, 0x51, 0x51, 0x20, 0x79, 0x0a, + 0x79, 0x51, 0x51, 0x51, 0x51, 0x20, 0x61, 0x76, + 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x28, 0x45, + 0x45, 0x45, 0x45, 0x20, 0x27, 0x64, 0x65, 0x6e, + 0x27, 0x20, 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, + 0x4d, 0x20, 0x79, 0x14, 0x79, 0x4d, 0x4d, 0x4d, + 0x4d, 0x45, 0x45, 0x45, 0x45, 0x64, 0x12, 0x64, + 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, + 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x0e, + 0x64, 0x64, 0x2f, 0x4d, 0x4d, 0x2f, 0x79, 0x16, + 0x64, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x73, 0x1a, 0x48, 0x48, 0x2e, 0x6d, + 0x6d, 0x2e, 0x73, 0x73, 0x20, 0x7a, 0x7a, 0x7a, + 0x7a, 0x12, 0x68, 0x6d, 0x6d, 0x73, 0x73, 0x7a, + 0x7a, 0x7a, 0x7a, 0x14, 0x48, 0x48, 0x2e, 0x6d, + 0x6d, 0x2e, 0x73, 0x73, 0x20, 0x7a, 0x08, 0x68, + 0x6d, 0x73, 0x7a, 0x16, 0x74, 0x69, 0x6d, 0x65, + 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x0e, + 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x02, + 0x4a, 0x02, 0x46, 0x02, 0x41, 0x02, 0x53, 0x02, + 0x4f, 0x02, 0x4e, 0x02, 0x44, 0x0c, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x08, 0x6a, 0x61, 0x6e, + 0x2e, 0x08, 0x66, 0x65, 0x62, 0x2e, 0x08, 0x6d, + 0x61, 0x72, 0x2e, 0x08, 0x61, 0x70, 0x72, 0x2e, + 0x06, 0x6d, 0x61, 0x6a, 0x08, 0x6a, 0x75, 0x6e, + 0x2e, 0x08, 0x6a, 0x75, 0x6c, 0x2e, 0x08, 0x61, + 0x75, 0x67, 0x2e, 0x08, 0x73, 0x65, 0x70, 0x2e, + 0x08, 0x6f, 0x6b, 0x74, 0x2e, 0x08, 0x6e, 0x6f, + 0x76, 0x2e, 0x08, 0x64, 0x65, 0x63, 0x2e, 0x0c, + 0x6a, 0x61, 0x6e, 0x75, 0x61, 0x72, 0x0e, 0x66, + 0x65, 0x62, 0x72, 0x75, 0x61, 0x72, 0x0a, 0x6d, + 0x61, 0x72, 0x74, 0x73, 0x0a, 0x61, 0x70, 0x72, + 0x69, 0x6c, 0x08, 0x6a, 0x75, 0x6e, 0x69, 0x08, + 0x6a, 0x75, 0x6c, 0x69, 0x0c, 0x61, 0x75, 0x67, + 0x75, 0x73, 0x74, 0x12, 0x73, 0x65, 0x70, 0x74, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x0e, 0x6f, 0x6b, + 0x74, 0x6f, 0x62, 0x65, 0x72, 0x10, 0x6e, 0x6f, + 0x76, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x10, 0x64, + 0x65, 0x63, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x0c, + 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x73, 0x02, 0x54, + 0x02, 0x4c, 0x08, 0x73, 0xf8, 0x6e, 0x2e, 0x08, + 0x6d, 0x61, 0x6e, 0x2e, 0x08, 0x74, 0x69, 0x72, + 0x2e, 0x08, 0x6f, 0x6e, 0x73, 0x2e, 0x08, 0x74, + 0x6f, 0x72, 0x2e, 0x08, 0x66, 0x72, 0x65, 0x2e, + 0x08, 0x6c, 0xf8, 0x72, 0x2e, 0x0c, 0x73, 0xf8, + 0x6e, 0x64, 0x61, 0x67, 0x0c, 0x6d, 0x61, 0x6e, + 0x64, 0x61, 0x67, 0x0e, 0x74, 0x69, 0x72, 0x73, + 0x64, 0x61, 0x67, 0x0c, 0x6f, 0x6e, 0x73, 0x64, + 0x61, 0x67, 0x0e, 0x74, 0x6f, 0x72, 0x73, 0x64, + 0x61, 0x67, 0x0c, 0x66, 0x72, 0x65, 0x64, 0x61, + 0x67, 0x0c, 0x6c, 0xf8, 0x72, 0x64, 0x61, 0x67, + 0x08, 0x64, 0x61, 0x79, 0x73, 0x04, 0x42, 0x45, + 0x08, 0x65, 0x72, 0x61, 0x73, 0x04, 0x41, 0x4d, + 0x04, 0x61, 0x6d, 0x04, 0x50, 0x4d, 0x04, 0x70, + 0x6d, 0x14, 0x64, 0x61, 0x79, 0x50, 0x65, 0x72, + 0x69, 0x6f, 0x64, 0x73, 0x06, 0x4d, 0x30, 0x31, + 0x06, 0x4d, 0x30, 0x32, 0x06, 0x4d, 0x30, 0x33, + 0x06, 0x4d, 0x30, 0x34, 0x06, 0x4d, 0x30, 0x35, + 0x06, 0x4d, 0x30, 0x36, 0x06, 0x4d, 0x30, 0x37, + 0x06, 0x4d, 0x30, 0x38, 0x06, 0x4d, 0x30, 0x39, + 0x06, 0x4d, 0x31, 0x30, 0x06, 0x4d, 0x31, 0x31, + 0x06, 0x4d, 0x31, 0x32, 0x08, 0x54, 0x6f, 0x75, + 0x74, 0x08, 0x42, 0x61, 0x62, 0x61, 0x0a, 0x48, + 0x61, 0x74, 0x6f, 0x72, 0x0a, 0x4b, 0x69, 0x61, + 0x68, 0x6b, 0x08, 0x54, 0x6f, 0x62, 0x61, 0x0c, + 0x41, 0x6d, 0x73, 0x68, 0x69, 0x72, 0x10, 0x42, + 0x61, 0x72, 0x61, 0x6d, 0x68, 0x61, 0x74, 0x12, + 0x42, 0x61, 0x72, 0x61, 0x6d, 0x6f, 0x75, 0x64, + 0x61, 0x0e, 0x42, 0x61, 0x73, 0x68, 0x61, 0x6e, + 0x73, 0x0a, 0x50, 0x61, 0x6f, 0x6e, 0x61, 0x08, + 0x45, 0x70, 0x65, 0x70, 0x0a, 0x4d, 0x65, 0x73, + 0x72, 0x61, 0x0a, 0x4e, 0x61, 0x73, 0x69, 0x65, + 0x08, 0x45, 0x52, 0x41, 0x30, 0x08, 0x45, 0x52, + 0x41, 0x31, 0x10, 0x4d, 0x65, 0x73, 0x6b, 0x65, + 0x72, 0x65, 0x6d, 0x0c, 0x54, 0x65, 0x6b, 0x65, + 0x6d, 0x74, 0x0a, 0x48, 0x65, 0x64, 0x61, 0x72, + 0x0c, 0x54, 0x61, 0x68, 0x73, 0x61, 0x73, 0x06, + 0x54, 0x65, 0x72, 0x0e, 0x59, 0x65, 0x6b, 0x61, + 0x74, 0x69, 0x74, 0x0e, 0x4d, 0x65, 0x67, 0x61, + 0x62, 0x69, 0x74, 0x0c, 0x4d, 0x69, 0x61, 0x7a, + 0x69, 0x61, 0x0c, 0x47, 0x65, 0x6e, 0x62, 0x6f, + 0x74, 0x08, 0x53, 0x65, 0x6e, 0x65, 0x0a, 0x48, + 0x61, 0x6d, 0x6c, 0x65, 0x0e, 0x4e, 0x65, 0x68, + 0x61, 0x73, 0x73, 0x65, 0x0e, 0x50, 0x61, 0x67, + 0x75, 0x6d, 0x65, 0x6e, 0x06, 0x66, 0x4b, 0x72, + 0x06, 0x65, 0x4b, 0x72, 0x06, 0x66, 0x76, 0x74, + 0x04, 0x76, 0x74, 0x0a, 0x66, 0x2e, 0x4b, 0x72, + 0x2e, 0x0a, 0x65, 0x2e, 0x4b, 0x72, 0x2e, 0x0c, + 0x66, 0x2e, 0x76, 0x2e, 0x74, 0x2e, 0x08, 0x76, + 0x2e, 0x74, 0x2e, 0x38, 0x66, 0xf8, 0x72, 0x20, + 0x76, 0x65, 0x73, 0x74, 0x65, 0x72, 0x6c, 0x61, + 0x6e, 0x64, 0x73, 0x6b, 0x20, 0x74, 0x69, 0x64, + 0x73, 0x72, 0x65, 0x67, 0x6e, 0x69, 0x6e, 0x67, + 0x30, 0x76, 0x65, 0x73, 0x74, 0x65, 0x72, 0x6c, + 0x61, 0x6e, 0x64, 0x73, 0x6b, 0x20, 0x74, 0x69, + 0x64, 0x73, 0x72, 0x65, 0x67, 0x6e, 0x69, 0x6e, + 0x67, 0x0c, 0x54, 0x69, 0x73, 0x68, 0x72, 0x69, + 0x0e, 0x48, 0x65, 0x73, 0x68, 0x76, 0x61, 0x6e, + 0x0c, 0x4b, 0x69, 0x73, 0x6c, 0x65, 0x76, 0x0a, + 0x54, 0x65, 0x76, 0x65, 0x74, 0x0c, 0x53, 0x68, + 0x65, 0x76, 0x61, 0x74, 0x0c, 0x41, 0x64, 0x61, + 0x72, 0x20, 0x49, 0x08, 0x41, 0x64, 0x61, 0x72, + 0x0a, 0x4e, 0x69, 0x73, 0x61, 0x6e, 0x08, 0x49, + 0x79, 0x61, 0x72, 0x0a, 0x53, 0x69, 0x76, 0x61, + 0x6e, 0x0a, 0x54, 0x61, 0x6d, 0x75, 0x7a, 0x04, + 0x41, 0x76, 0x08, 0x45, 0x6c, 0x75, 0x6c, 0x0e, + 0x41, 0x64, 0x61, 0x72, 0x20, 0x49, 0x49, 0x0e, + 0x43, 0x68, 0x61, 0x69, 0x74, 0x72, 0x61, 0x10, + 0x56, 0x61, 0x69, 0x73, 0x61, 0x6b, 0x68, 0x61, + 0x10, 0x4a, 0x79, 0x61, 0x69, 0x73, 0x74, 0x68, + 0x61, 0x0c, 0x41, 0x73, 0x61, 0x64, 0x68, 0x61, + 0x0e, 0x53, 0x72, 0x61, 0x76, 0x61, 0x6e, 0x61, + 0x0c, 0x42, 0x68, 0x61, 0x64, 0x72, 0x61, 0x0c, + 0x41, 0x73, 0x76, 0x69, 0x6e, 0x61, 0x0e, 0x4b, + 0x61, 0x72, 0x74, 0x69, 0x6b, 0x61, 0x14, 0x41, + 0x67, 0x72, 0x61, 0x68, 0x61, 0x79, 0x61, 0x6e, + 0x61, 0x0a, 0x50, 0x61, 0x75, 0x73, 0x61, 0x0a, + 0x4d, 0x61, 0x67, 0x68, 0x61, 0x10, 0x50, 0x68, + 0x61, 0x6c, 0x67, 0x75, 0x6e, 0x61, 0x08, 0x53, + 0x61, 0x6b, 0x61, 0x08, 0x4d, 0x75, 0x68, 0x2e, + 0x08, 0x53, 0x61, 0x66, 0x2e, 0x0c, 0x52, 0x61, + 0x62, 0x2e, 0x20, 0x49, 0x0e, 0x52, 0x61, 0x62, + 0x2e, 0x20, 0x49, 0x49, 0x0c, 0x4a, 0x75, 0x6d, + 0x2e, 0x20, 0x49, 0x0e, 0x4a, 0x75, 0x6d, 0x2e, + 0x20, 0x49, 0x49, 0x08, 0x52, 0x61, 0x6a, 0x2e, + 0x08, 0x53, 0x68, 0x61, 0x2e, 0x08, 0x52, 0x61, + 0x6d, 0x2e, 0x0a, 0x53, 0x68, 0x61, 0x77, 0x2e, + 0x11, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, + 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x51, 0x00, 0x2e, + 0x00, 0x11, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, + 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x48, 0x00, + 0x2e, 0x00, 0x10, 0x4d, 0x75, 0x68, 0x61, 0x72, + 0x72, 0x61, 0x6d, 0x0a, 0x53, 0x61, 0x66, 0x61, + 0x72, 0x0f, 0x52, 0x00, 0x61, 0x00, 0x62, 0x00, + 0x69, 0x00, 0xbb, 0x02, 0x20, 0x00, 0x49, 0x00, + 0x11, 0x52, 0x00, 0x61, 0x00, 0x62, 0x00, 0x69, + 0x00, 0xbb, 0x02, 0x20, 0x00, 0x49, 0x00, 0x49, + 0x00, 0x10, 0x4a, 0x75, 0x6d, 0x61, 0x64, 0x61, + 0x20, 0x49, 0x12, 0x4a, 0x75, 0x6d, 0x61, 0x64, + 0x61, 0x20, 0x49, 0x49, 0x0a, 0x52, 0x61, 0x6a, + 0x61, 0x62, 0x0f, 0x53, 0x00, 0x68, 0x00, 0x61, + 0x00, 0xbb, 0x02, 0x62, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x0e, 0x52, 0x61, 0x6d, 0x61, 0x64, 0x61, + 0x6e, 0x0e, 0x53, 0x68, 0x61, 0x77, 0x77, 0x61, + 0x6c, 0x19, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, + 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x51, 0x00, + 0x69, 0x00, 0xbb, 0x02, 0x64, 0x00, 0x61, 0x00, + 0x68, 0x00, 0x19, 0x44, 0x00, 0x68, 0x00, 0x75, + 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x48, + 0x00, 0x69, 0x00, 0x6a, 0x00, 0x6a, 0x00, 0x61, + 0x00, 0x68, 0x00, 0x04, 0x41, 0x48, 0x1f, 0x54, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x36, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x36, 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x75, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1f, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x1d, 0x57, 0x00, 0x61, 0x00, 0x64, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x52, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x1d, 0x59, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1f, 0x4a, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, + 0x6b, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x2b, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x2d, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x2d, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x2a, 0x4a, 0x69, 0x6e, 0x67, + 0x6f, 0x2d, 0x6b, 0x65, 0x69, 0x75, 0x6e, 0x20, + 0x28, 0x37, 0x36, 0x37, 0x2d, 0x37, 0x37, 0x30, + 0x29, 0x1d, 0x48, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x1f, 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, 0x64, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x4d, 0x01, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, + 0x4a, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x61, + 0x00, 0x6a, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1f, 0x53, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x20, + 0x54, 0x65, 0x6e, 0x2d, 0x61, 0x6e, 0x20, 0x28, + 0x38, 0x35, 0x37, 0x2d, 0x38, 0x35, 0x39, 0x29, + 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, + 0x47, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1d, 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, + 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x34, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1b, 0x4c, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1d, 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x41, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, 0x4a, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x4a, 0x00, 0x69, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x29, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x27, 0x4a, 0x00, 0x69, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x45, 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4c, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x61, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x25, 0x4a, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x24, 0x54, 0x65, 0x6e, 0x2d, + 0x65, 0x69, 0x20, 0x28, 0x31, 0x31, 0x31, 0x30, + 0x2d, 0x31, 0x31, 0x31, 0x33, 0x29, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x44, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x45, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x6a, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x48, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x27, 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, + 0x4c, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x6d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x4a, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x59, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x75, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x29, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x21, 0x4a, 0x00, 0x4d, 0x01, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x27, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x75, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x29, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x74, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x29, 0x52, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x45, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4c, + 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x61, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x48, + 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x27, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x4c, + 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x45, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x27, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4a, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x27, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x61, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x41, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x4d, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x0a, 0x4d, 0x65, 0x69, 0x6a, 0x69, 0x0d, + 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x0b, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x0c, + 0x48, 0x65, 0x69, 0x73, 0x65, 0x69, 0x12, 0x46, + 0x61, 0x72, 0x76, 0x61, 0x72, 0x64, 0x69, 0x6e, + 0x16, 0x4f, 0x72, 0x64, 0x69, 0x62, 0x65, 0x68, + 0x65, 0x73, 0x68, 0x74, 0x0e, 0x4b, 0x68, 0x6f, + 0x72, 0x64, 0x61, 0x64, 0x06, 0x54, 0x69, 0x72, + 0x0c, 0x4d, 0x6f, 0x72, 0x64, 0x61, 0x64, 0x12, + 0x53, 0x68, 0x61, 0x68, 0x72, 0x69, 0x76, 0x61, + 0x72, 0x08, 0x4d, 0x65, 0x68, 0x72, 0x08, 0x41, + 0x62, 0x61, 0x6e, 0x08, 0x41, 0x7a, 0x61, 0x72, + 0x06, 0x44, 0x65, 0x79, 0x0c, 0x42, 0x61, 0x68, + 0x6d, 0x61, 0x6e, 0x0c, 0x45, 0x73, 0x66, 0x61, + 0x6e, 0x64, 0x04, 0x41, 0x50, 0x1a, 0x42, 0x65, + 0x66, 0x6f, 0x72, 0x65, 0x20, 0x52, 0x2e, 0x4f, + 0x2e, 0x43, 0x2e, 0x0c, 0x4d, 0x69, 0x6e, 0x67, + 0x75, 0x6f, 0x12, 0x63, 0x61, 0x6c, 0x65, 0x6e, + 0x64, 0x61, 0x72, 0x73, 0x08, 0x64, 0x61, 0x74, + 0x65, 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, + 0x75, 0x10, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0x1e, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, + 0x72, 0x6e, 0x26, 0x7b, 0x6d, 0x69, 0x6e, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x6e, + 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, + 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x0e, 0x64, + 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x26, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0xa0, + 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, + 0x79, 0x7d, 0x3c, 0x7b, 0x6d, 0x69, 0x6e, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0xa0, 0x7b, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, + 0x7d, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x79, 0x2c, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0xa0, 0x7b, 0x70, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, + 0x7d, 0x42, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0xa0, 0x7b, 0x70, + 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, + 0x67, 0x6e, 0x7d, 0x0e, 0x70, 0x65, 0x72, 0x63, + 0x65, 0x6e, 0x74, 0x10, 0x70, 0x61, 0x74, 0x74, + 0x65, 0x72, 0x6e, 0x73, 0x02, 0x2c, 0x02, 0x2e, + 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x06, 0x4e, + 0x61, 0x4e, 0x06, 0x6e, 0x61, 0x6e, 0x02, 0x2b, + 0x10, 0x70, 0x6c, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x02, 0x2d, 0x12, 0x6d, 0x69, 0x6e, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, 0x25, 0x16, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, + 0x69, 0x67, 0x6e, 0x03, 0x1e, 0x22, 0x10, 0x69, + 0x6e, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x0e, + 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x06, + 0x41, 0x55, 0x24, 0x06, 0x41, 0x55, 0x44, 0x04, + 0x52, 0x24, 0x06, 0x42, 0x52, 0x4c, 0x06, 0x43, + 0x41, 0x24, 0x06, 0x43, 0x41, 0x44, 0x06, 0x43, + 0x4e, 0xa5, 0x06, 0x43, 0x4e, 0x59, 0x06, 0x6b, + 0x72, 0x2e, 0x06, 0x44, 0x4b, 0x4b, 0x03, 0xac, + 0x20, 0x06, 0x45, 0x55, 0x52, 0x02, 0xa3, 0x06, + 0x47, 0x42, 0x50, 0x06, 0x48, 0x4b, 0x24, 0x06, + 0x48, 0x4b, 0x44, 0x03, 0xaa, 0x20, 0x06, 0x49, + 0x4c, 0x53, 0x03, 0xb9, 0x20, 0x06, 0x49, 0x4e, + 0x52, 0x06, 0x4a, 0x50, 0xa5, 0x06, 0x4a, 0x50, + 0x59, 0x03, 0xa9, 0x20, 0x06, 0x4b, 0x52, 0x57, + 0x06, 0x4d, 0x58, 0x24, 0x06, 0x4d, 0x58, 0x4e, + 0x06, 0x4e, 0x5a, 0x24, 0x06, 0x4e, 0x5a, 0x44, + 0x03, 0x3f, 0x0e, 0x06, 0x54, 0x48, 0x42, 0x06, + 0x4e, 0x54, 0x24, 0x06, 0x54, 0x57, 0x44, 0x02, + 0x24, 0x06, 0x55, 0x53, 0x44, 0x03, 0xab, 0x20, + 0x06, 0x56, 0x4e, 0x44, 0x08, 0x46, 0x43, 0x46, + 0x41, 0x06, 0x58, 0x41, 0x46, 0x06, 0x45, 0x43, + 0x24, 0x06, 0x58, 0x43, 0x44, 0x06, 0x43, 0x46, + 0x41, 0x06, 0x58, 0x4f, 0x46, 0x08, 0x43, 0x46, + 0x50, 0x46, 0x06, 0x58, 0x50, 0x46, 0x14, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, + 0x73, 0x52, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, + 0x6e, 0x74, 0x6c, 0x2f, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, + 0x6a, 0x73, 0x6f, 0x6e, 0x70, 0x2f, 0x64, 0x61, + 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, + 0x01, 0x00, 0x01, 0x00, 0x27, 0x00, 0x89, 0x01, + 0x86, 0x6b, 0x01, 0xa0, 0x01, 0x00, 0x00, 0x00, + 0x39, 0xd0, 0x00, 0x00, 0x00, 0x43, 0xd1, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd2, 0x00, 0x00, 0x00, + 0x4d, 0xd3, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd4, + 0x00, 0x00, 0x00, 0x04, 0xd5, 0x00, 0x00, 0x00, + 0x04, 0xd6, 0x00, 0x00, 0x00, 0x04, 0xd7, 0x00, + 0x00, 0x00, 0x04, 0xd8, 0x00, 0x00, 0x00, 0x04, + 0xd9, 0x00, 0x00, 0x00, 0x04, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xdb, 0x00, 0x00, 0x00, 0x04, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, + 0x04, 0xde, 0x00, 0x00, 0x00, 0x04, 0xdf, 0x00, + 0x00, 0x00, 0x04, 0xe0, 0x00, 0x00, 0x00, 0x04, + 0xe1, 0x00, 0x00, 0x00, 0x04, 0xe2, 0x00, 0x00, + 0x00, 0x26, 0x0f, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x00, 0x0a, 0x4d, 0xe4, 0x00, 0x00, 0x00, 0x09, + 0x4d, 0xe5, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, + 0x00, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe8, 0x00, + 0x00, 0x00, 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x04, 0xe9, 0x00, 0x00, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xec, 0x00, 0x00, 0x00, 0x4d, 0xed, 0x00, 0x00, + 0x00, 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, 0xef, + 0x00, 0x00, 0x00, 0x04, 0xf0, 0x00, 0x00, 0x00, + 0x4d, 0xf1, 0x00, 0x00, 0x00, 0x04, 0xf2, 0x00, + 0x00, 0x00, 0x4d, 0xf3, 0x00, 0x00, 0x00, 0x04, + 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xf5, 0x00, 0x00, + 0x00, 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, 0xf7, + 0x00, 0x00, 0x00, 0x04, 0xf8, 0x00, 0x00, 0x00, + 0x4d, 0xf9, 0x00, 0x00, 0x00, 0x04, 0xfa, 0x00, + 0x00, 0x00, 0x4d, 0xfb, 0x00, 0x00, 0x00, 0x04, + 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xfd, 0x00, 0x00, + 0x00, 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, 0xff, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, + 0x4d, 0x01, 0x01, 0x00, 0x00, 0x04, 0x02, 0x01, + 0x00, 0x00, 0x4d, 0x03, 0x01, 0x00, 0x00, 0x04, + 0x04, 0x01, 0x00, 0x00, 0x4d, 0x05, 0x01, 0x00, + 0x00, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, 0x07, + 0x01, 0x00, 0x00, 0x04, 0x08, 0x01, 0x00, 0x00, + 0x4d, 0x09, 0x01, 0x00, 0x00, 0x04, 0x0a, 0x01, + 0x00, 0x00, 0x4d, 0x0b, 0x01, 0x00, 0x00, 0x04, + 0x0c, 0x01, 0x00, 0x00, 0x4d, 0x0d, 0x01, 0x00, + 0x00, 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, 0x0f, + 0x01, 0x00, 0x00, 0x04, 0x10, 0x01, 0x00, 0x00, + 0x4d, 0x11, 0x01, 0x00, 0x00, 0x04, 0x12, 0x01, + 0x00, 0x00, 0x4d, 0x13, 0x01, 0x00, 0x00, 0x04, + 0x14, 0x01, 0x00, 0x00, 0x4d, 0x15, 0x01, 0x00, + 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, 0x16, + 0x01, 0x00, 0x00, 0x04, 0x17, 0x01, 0x00, 0x00, + 0x4d, 0x18, 0x01, 0x00, 0x00, 0x04, 0x19, 0x01, + 0x00, 0x00, 0x4d, 0x1a, 0x01, 0x00, 0x00, 0x04, + 0x1b, 0x01, 0x00, 0x00, 0x4d, 0x1c, 0x01, 0x00, + 0x00, 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, 0x1d, + 0x01, 0x00, 0x00, 0x04, 0x1e, 0x01, 0x00, 0x00, + 0x4d, 0x1f, 0x01, 0x00, 0x00, 0x04, 0x20, 0x01, + 0x00, 0x00, 0x4d, 0x21, 0x01, 0x00, 0x00, 0x04, + 0x22, 0x01, 0x00, 0x00, 0x4d, 0x23, 0x01, 0x00, + 0x00, 0x04, 0x24, 0x01, 0x00, 0x00, 0x4d, 0x25, + 0x01, 0x00, 0x00, 0x04, 0x26, 0x01, 0x00, 0x00, + 0x4d, 0x27, 0x01, 0x00, 0x00, 0x04, 0x28, 0x01, + 0x00, 0x00, 0x4d, 0x28, 0x01, 0x00, 0x00, 0x04, + 0x29, 0x01, 0x00, 0x00, 0x4d, 0x2a, 0x01, 0x00, + 0x00, 0x04, 0x2b, 0x01, 0x00, 0x00, 0x4d, 0x2c, + 0x01, 0x00, 0x00, 0x04, 0x2d, 0x01, 0x00, 0x00, + 0x4d, 0x2e, 0x01, 0x00, 0x00, 0x04, 0x2f, 0x01, + 0x00, 0x00, 0x4d, 0x30, 0x01, 0x00, 0x00, 0x04, + 0x31, 0x01, 0x00, 0x00, 0x4d, 0x32, 0x01, 0x00, + 0x00, 0x04, 0x33, 0x01, 0x00, 0x00, 0x4d, 0x34, + 0x01, 0x00, 0x00, 0x04, 0x35, 0x01, 0x00, 0x00, + 0x4d, 0x36, 0x01, 0x00, 0x00, 0x04, 0x37, 0x01, + 0x00, 0x00, 0x4d, 0x38, 0x01, 0x00, 0x00, 0x04, + 0x39, 0x01, 0x00, 0x00, 0x4d, 0x3a, 0x01, 0x00, + 0x00, 0x04, 0x3b, 0x01, 0x00, 0x00, 0x4d, 0x3c, + 0x01, 0x00, 0x00, 0x4d, 0x3d, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x3e, 0x01, 0x00, 0x00, 0x4d, 0x3f, + 0x01, 0x00, 0x00, 0x04, 0x40, 0x01, 0x00, 0x00, + 0x4d, 0x41, 0x01, 0x00, 0x00, 0x04, 0x33, 0x01, + 0x00, 0x00, 0x4d, 0x34, 0x01, 0x00, 0x00, 0x04, + 0x42, 0x01, 0x00, 0x00, 0x4d, 0x2c, 0x01, 0x00, + 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x44, 0x01, 0x00, 0x00, 0x4d, 0x45, 0x01, 0x00, + 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x4d, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x0c, 0x01, 0x00, 0x00, + 0x4d, 0x0b, 0x01, 0x00, 0x00, 0x04, 0x08, 0x01, + 0x00, 0x00, 0x4d, 0x07, 0x01, 0x00, 0x00, 0x4d, + 0x48, 0x01, 0x00, 0x00, 0x4d, 0x49, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x0b, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x16, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x7a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x4d, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, + 0x01, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x00, 0xbe, 0x01, 0xbe, 0x02, + 0xbe, 0x03, 0xbe, 0x04, 0xbe, 0x05, 0xbe, 0x06, + 0xbe, 0x07, 0xbe, 0x08, 0xbe, 0x09, 0xbe, 0x0a, + 0xbe, 0x0b, 0x26, 0x0c, 0x00, 0x4d, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, + 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, + 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, + 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, + 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, + 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, + 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, + 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, + 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, + 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x4d, 0x80, + 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, + 0x4d, 0xd6, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x0c, 0xbe, 0x0d, 0xbe, 0x0e, 0xbe, 0x0f, 0xbe, + 0x10, 0xbe, 0x11, 0xbe, 0x12, 0xbe, 0x13, 0xbe, + 0x14, 0xbe, 0x15, 0xbe, 0x16, 0xbe, 0x17, 0xbe, + 0x18, 0x26, 0x0d, 0x00, 0x4d, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, + 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, + 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, + 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, + 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, + 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, + 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, + 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, + 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, + 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, + 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, + 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, + 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, + 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, + 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x16, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, + 0x9c, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, + 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7c, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, + 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x19, 0xbe, 0x1a, + 0xbe, 0x1b, 0xbe, 0x1c, 0xbe, 0x1d, 0xbe, 0x1e, + 0xbe, 0x1f, 0xbe, 0x20, 0xbe, 0x21, 0xbe, 0x22, + 0xbe, 0x23, 0xbe, 0x24, 0x26, 0x0c, 0x00, 0x4d, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, + 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, + 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, + 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, + 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, + 0x8d, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, + 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, + 0x4d, 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x25, 0xbe, 0x26, 0xbe, 0x27, 0xbe, + 0x28, 0xbe, 0x29, 0xbe, 0x2a, 0xbe, 0x2b, 0xbe, + 0x2c, 0xbe, 0x2d, 0xbe, 0x2e, 0xbe, 0x2f, 0xbe, + 0x30, 0xbe, 0x31, 0x26, 0x0d, 0x00, 0x4d, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, + 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, + 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, + 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, + 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, + 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, + 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, + 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, + 0xa9, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, + 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, + 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, + 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, + 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, + 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, + 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, + 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, + 0x04, 0xa9, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, + 0x9c, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, + 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x9b, + 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x4d, 0x80, 0x01, + 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x32, + 0xbe, 0x33, 0xbe, 0x34, 0xbe, 0x35, 0xbe, 0x36, + 0xbe, 0x37, 0xbe, 0x38, 0xbe, 0x39, 0xbe, 0x3a, + 0xbe, 0x3b, 0xbe, 0x3c, 0xbe, 0x3d, 0xbe, 0x3e, + 0x26, 0x0d, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, + 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, + 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, + 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, + 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, + 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, + 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, + 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, + 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, + 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, + 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, + 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, + 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, + 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, + 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x9b, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7c, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, + 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, 0xd9, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x3f, 0xbe, 0x40, + 0xbe, 0x41, 0xbe, 0x42, 0xbe, 0x43, 0xbe, 0x44, + 0xbe, 0x45, 0xbe, 0x46, 0xbe, 0x47, 0xbe, 0x48, + 0xbe, 0x49, 0xbe, 0x4a, 0x26, 0x0c, 0x00, 0x4d, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, + 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, + 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, + 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, + 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, + 0x8d, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, + 0x04, 0x9c, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x9b, 0x01, + 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x7c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, + 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xaa, + 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, + 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, + 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, 0x51, 0x01, + 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, + 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, + 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, 0x26, 0x04, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xae, + 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, + 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, + 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x4d, + 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, + 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x4b, 0xbe, 0x4c, 0xbe, 0x4d, 0xbe, 0x4e, + 0xbe, 0x4f, 0xbe, 0x50, 0xbe, 0x51, 0xbe, 0x52, + 0xbe, 0x53, 0xbe, 0x54, 0xbe, 0x55, 0xbe, 0x56, + 0xbe, 0x57, 0xbe, 0x58, 0x26, 0x0e, 0x00, 0x4d, + 0x51, 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, + 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, 0x04, 0xb6, + 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, + 0x04, 0xb8, 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, + 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, 0x04, + 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, + 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, 0x04, 0xbe, + 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, + 0x04, 0xc0, 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, + 0x00, 0x00, 0x26, 0x0e, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, 0x00, 0x04, + 0xb5, 0x01, 0x00, 0x00, 0x04, 0xb6, 0x01, 0x00, + 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, + 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, + 0x04, 0xba, 0x01, 0x00, 0x00, 0x04, 0xbb, 0x01, + 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, 0x04, + 0xbd, 0x01, 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, + 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, 0x04, 0xc0, + 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, + 0x26, 0x0e, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x7a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x7d, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x4d, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x59, 0xbe, 0x5a, 0xbe, 0x5b, + 0xbe, 0x5c, 0xbe, 0x5d, 0xbe, 0x5e, 0xbe, 0x5f, + 0xbe, 0x60, 0xbe, 0x61, 0xbe, 0x62, 0xbe, 0x63, + 0xbe, 0x64, 0x26, 0x0c, 0x00, 0x4d, 0x51, 0x01, + 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, 0x00, 0x04, + 0xc3, 0x01, 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, + 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, + 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, + 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, + 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, 0x04, + 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, + 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xc2, + 0x01, 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, + 0x04, 0xc4, 0x01, 0x00, 0x00, 0x04, 0xc5, 0x01, + 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, + 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, + 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, 0x04, 0xca, + 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, + 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xce, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x51, 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7c, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, + 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x65, 0xbe, 0x66, + 0xbe, 0x67, 0xbe, 0x68, 0xbe, 0x69, 0xbe, 0x6a, + 0xbe, 0x6b, 0xbe, 0x6c, 0xbe, 0x6d, 0xbe, 0x6e, + 0xbe, 0x6f, 0xbe, 0x70, 0x26, 0x0c, 0x00, 0x4d, + 0x51, 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, + 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, 0xd1, + 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, + 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, + 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, + 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, + 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, + 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, + 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, + 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, + 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, + 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, + 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, + 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, + 0xe6, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0xe7, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x4d, 0x80, 0x01, + 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x71, + 0xbe, 0x72, 0xbe, 0x73, 0xbe, 0x74, 0xbe, 0x75, + 0xbe, 0x76, 0xbe, 0x77, 0xbe, 0x78, 0xbe, 0x79, + 0xbe, 0x7a, 0xbe, 0x7b, 0xbe, 0x7c, 0x26, 0x0c, + 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0xcf, + 0x01, 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, + 0x04, 0xd1, 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, + 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, + 0xd4, 0x01, 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, + 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, + 0x01, 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, + 0x04, 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, + 0xdc, 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, + 0x00, 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, + 0x01, 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, + 0x04, 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, + 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, + 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, + 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x69, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7a, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xe7, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, + 0x04, 0xe7, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe7, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x4d, + 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, + 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, + 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, + 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, + 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, + 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, + 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, + 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, + 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, + 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, + 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, + 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, + 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, + 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, + 0x00, 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, + 0xfe, 0x01, 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, + 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, + 0x02, 0x00, 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, + 0x04, 0x03, 0x02, 0x00, 0x00, 0x04, 0x04, 0x02, + 0x00, 0x00, 0x04, 0x05, 0x02, 0x00, 0x00, 0x04, + 0x06, 0x02, 0x00, 0x00, 0x04, 0x07, 0x02, 0x00, + 0x00, 0x26, 0x20, 0x00, 0x04, 0x08, 0x02, 0x00, + 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0x09, + 0x02, 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, + 0x04, 0x0a, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, + 0x00, 0x80, 0x04, 0x0b, 0x02, 0x00, 0x00, 0x4d, + 0x23, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, 0x00, + 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x0d, + 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, + 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, + 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, 0x4d, + 0x27, 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, 0x00, + 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x11, + 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, + 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, + 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, 0x4d, + 0x2b, 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, 0x00, + 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x15, + 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, + 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, + 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, 0x4d, + 0x2f, 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, 0x00, + 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x19, + 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, + 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, + 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, + 0x33, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, + 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x1d, + 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, + 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, + 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, + 0x37, 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, + 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x21, + 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, + 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, + 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, + 0x3b, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, + 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x25, + 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, + 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, + 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, + 0x3f, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, + 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x29, + 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, + 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, + 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, + 0x43, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, + 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x2d, + 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, + 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, + 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, + 0x47, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, + 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x31, + 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, + 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, + 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, + 0x4b, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, + 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x35, + 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, + 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, + 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, + 0x4f, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, + 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x39, + 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, + 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, + 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, + 0x53, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, + 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x3d, + 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, + 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, + 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, + 0x57, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, + 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x41, + 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, + 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, + 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, + 0x5b, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, + 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x45, + 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, + 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, + 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, + 0x5f, 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, + 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x49, + 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, + 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, + 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, + 0x63, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, + 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x4d, + 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, + 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, + 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, + 0x67, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, + 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x51, + 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, + 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, + 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, + 0x6b, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, + 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x55, + 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, + 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, + 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, + 0x6f, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, + 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x59, + 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, + 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, + 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, + 0x73, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, + 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x5d, + 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, + 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, + 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, + 0x77, 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, + 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x61, + 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, + 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, + 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, + 0x7b, 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, + 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x65, + 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, + 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, + 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, + 0x7f, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, + 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x69, + 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, + 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, + 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, + 0x83, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, + 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x6d, + 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, + 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, + 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, + 0x87, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, + 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x71, + 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, + 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, + 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, + 0x8b, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, + 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x75, + 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, + 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, + 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, + 0x8f, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, + 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x79, + 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, + 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, + 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, + 0x93, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, + 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x7d, + 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, + 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, + 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, + 0x97, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, + 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x81, + 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, + 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, + 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, + 0x9b, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, + 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x85, + 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, + 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, + 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, + 0x9f, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, + 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x89, + 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, + 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, + 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, + 0xa3, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, + 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x8d, + 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, + 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, + 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, + 0xa7, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, + 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x91, + 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, + 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, + 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, + 0xab, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, + 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x95, + 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, + 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, + 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, + 0xaf, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, + 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x99, + 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, + 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, + 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, + 0xb3, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, + 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0x9d, + 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, + 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, + 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, + 0xb7, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, + 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0xa1, + 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, + 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, + 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, + 0xbb, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, + 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0xa5, + 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, + 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, + 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, + 0xbf, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, + 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0xa9, + 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, + 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, + 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, + 0xc3, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, + 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xad, + 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, + 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, + 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, + 0xc7, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, + 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xb1, + 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, + 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, + 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, + 0xcb, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, + 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xb5, + 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, + 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, + 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, + 0xcf, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, + 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xb9, + 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, + 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, + 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, + 0xd3, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, + 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xbd, + 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, + 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, + 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, + 0xd7, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xc1, + 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, + 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xc5, + 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, + 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xc9, + 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, + 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, + 0xe3, 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, + 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xcd, + 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, + 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, + 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x80, 0x04, 0x16, 0x01, 0x00, + 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x80, 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x80, 0x4d, 0x51, 0x01, 0x00, + 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, + 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, + 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, + 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, + 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, + 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, + 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, + 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, + 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, + 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, + 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, + 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, + 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, + 0x00, 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, + 0xfe, 0x01, 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, + 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, + 0x02, 0x00, 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, + 0x04, 0x03, 0x02, 0x00, 0x00, 0x04, 0x04, 0x02, + 0x00, 0x00, 0x04, 0x05, 0x02, 0x00, 0x00, 0x04, + 0x06, 0x02, 0x00, 0x00, 0x04, 0x07, 0x02, 0x00, + 0x00, 0x26, 0x20, 0x00, 0x04, 0x08, 0x02, 0x00, + 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0x09, + 0x02, 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, + 0x04, 0x0a, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, + 0x00, 0x80, 0x04, 0x0b, 0x02, 0x00, 0x00, 0x4d, + 0x23, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, 0x00, + 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x0d, + 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, + 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, + 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, 0x4d, + 0x27, 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, 0x00, + 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x11, + 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, + 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, + 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, 0x4d, + 0x2b, 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, 0x00, + 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x15, + 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, + 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, + 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, 0x4d, + 0x2f, 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, 0x00, + 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x19, + 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, + 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, + 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, + 0x33, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, + 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x1d, + 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, + 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, + 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, + 0x37, 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, + 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x21, + 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, + 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, + 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, + 0x3b, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, + 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x25, + 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, + 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, + 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, + 0x3f, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, + 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x29, + 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, + 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, + 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, + 0x43, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, + 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x2d, + 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, + 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, + 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, + 0x47, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, + 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x31, + 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, + 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, + 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, + 0x4b, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, + 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x35, + 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, + 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, + 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, + 0x4f, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, + 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x39, + 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, + 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, + 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, + 0x53, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, + 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x3d, + 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, + 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, + 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, + 0x57, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, + 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x41, + 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, + 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, + 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, + 0x5b, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, + 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x45, + 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, + 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, + 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, + 0x5f, 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, + 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x49, + 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, + 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, + 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, + 0x63, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, + 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x4d, + 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, + 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, + 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, + 0x67, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, + 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x51, + 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, + 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, + 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, + 0x6b, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, + 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x55, + 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, + 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, + 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, + 0x6f, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, + 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x59, + 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, + 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, + 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, + 0x73, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, + 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x5d, + 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, + 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, + 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, + 0x77, 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, + 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x61, + 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, + 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, + 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, + 0x7b, 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, + 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x65, + 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, + 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, + 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, + 0x7f, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, + 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x69, + 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, + 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, + 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, + 0x83, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, + 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x6d, + 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, + 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, + 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, + 0x87, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, + 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x71, + 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, + 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, + 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, + 0x8b, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, + 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x75, + 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, + 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, + 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, + 0x8f, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, + 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x79, + 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, + 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, + 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, + 0x93, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, + 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x7d, + 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, + 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, + 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, + 0x97, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, + 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x81, + 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, + 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, + 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, + 0x9b, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, + 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x85, + 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, + 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, + 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, + 0x9f, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, + 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x89, + 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, + 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, + 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, + 0xa3, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, + 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x8d, + 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, + 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, + 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, + 0xa7, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, + 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x91, + 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, + 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, + 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, + 0xab, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, + 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x95, + 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, + 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, + 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, + 0xaf, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, + 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x99, + 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, + 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, + 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, + 0xb3, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, + 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0x9d, + 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, + 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, + 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, + 0xb7, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, + 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0xa1, + 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, + 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, + 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, + 0xbb, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, + 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0xa5, + 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, + 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, + 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, + 0xbf, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, + 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0xa9, + 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, + 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, + 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, + 0xc3, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, + 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xad, + 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, + 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, + 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, + 0xc7, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, + 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xb1, + 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, + 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, + 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, + 0xcb, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, + 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xb5, + 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, + 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, + 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, + 0xcf, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, + 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xb9, + 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, + 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, + 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, + 0xd3, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, + 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xbd, + 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, + 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, + 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, + 0xd7, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xc1, + 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, + 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xc5, + 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, + 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xc9, + 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, + 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, + 0xe3, 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, + 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xcd, + 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, + 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, + 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x80, 0x04, 0xd0, 0x02, 0x00, + 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xd1, + 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, + 0x04, 0xd2, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x80, 0x04, 0xd3, 0x02, 0x00, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x80, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, + 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, + 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, + 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, + 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, + 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, + 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, + 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, + 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, + 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, + 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, + 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, + 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, + 0x00, 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, + 0xfe, 0x01, 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, + 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, + 0x02, 0x00, 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, + 0x04, 0x03, 0x02, 0x00, 0x00, 0x04, 0x04, 0x02, + 0x00, 0x00, 0x04, 0x05, 0x02, 0x00, 0x00, 0x04, + 0x06, 0x02, 0x00, 0x00, 0x04, 0x07, 0x02, 0x00, + 0x00, 0x26, 0x20, 0x00, 0x04, 0x08, 0x02, 0x00, + 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0x09, + 0x02, 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, + 0x04, 0x0a, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, + 0x00, 0x80, 0x04, 0x0b, 0x02, 0x00, 0x00, 0x4d, + 0x23, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, 0x00, + 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x0d, + 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, + 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, + 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, 0x4d, + 0x27, 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, 0x00, + 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x11, + 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, + 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, + 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, 0x4d, + 0x2b, 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, 0x00, + 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x15, + 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, + 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, + 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, 0x4d, + 0x2f, 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, 0x00, + 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x19, + 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, + 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, + 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, + 0x33, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, + 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x1d, + 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, + 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, + 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, + 0x37, 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, + 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x21, + 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, + 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, + 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, + 0x3b, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, + 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x25, + 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, + 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, + 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, + 0x3f, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, + 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x29, + 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, + 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, + 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, + 0x43, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, + 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x2d, + 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, + 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, + 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, + 0x47, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, + 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x31, + 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, + 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, + 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, + 0x4b, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, + 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x35, + 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, + 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, + 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, + 0x4f, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, + 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x39, + 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, + 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, + 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, + 0x53, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, + 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x3d, + 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, + 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, + 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, + 0x57, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, + 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x41, + 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, + 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, + 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, + 0x5b, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, + 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x45, + 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, + 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, + 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, + 0x5f, 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, + 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x49, + 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, + 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, + 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, + 0x63, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, + 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x4d, + 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, + 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, + 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, + 0x67, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, + 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x51, + 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, + 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, + 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, + 0x6b, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, + 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x55, + 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, + 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, + 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, + 0x6f, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, + 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x59, + 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, + 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, + 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, + 0x73, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, + 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x5d, + 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, + 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, + 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, + 0x77, 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, + 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x61, + 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, + 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, + 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, + 0x7b, 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, + 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x65, + 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, + 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, + 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, + 0x7f, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, + 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x69, + 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, + 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, + 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, + 0x83, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, + 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x6d, + 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, + 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, + 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, + 0x87, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, + 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x71, + 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, + 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, + 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, + 0x8b, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, + 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x75, + 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, + 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, + 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, + 0x8f, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, + 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x79, + 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, + 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, + 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, + 0x93, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, + 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x7d, + 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, + 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, + 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, + 0x97, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, + 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x81, + 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, + 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, + 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, + 0x9b, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, + 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x85, + 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, + 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, + 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, + 0x9f, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, + 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x89, + 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, + 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, + 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, + 0xa3, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, + 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x8d, + 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, + 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, + 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, + 0xa7, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, + 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x91, + 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, + 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, + 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, + 0xab, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, + 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x95, + 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, + 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, + 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, + 0xaf, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, + 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x99, + 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, + 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, + 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, + 0xb3, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, + 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0x9d, + 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, + 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, + 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, + 0xb7, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, + 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0xa1, + 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, + 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, + 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, + 0xbb, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, + 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0xa5, + 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, + 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, + 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, + 0xbf, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, + 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0xa9, + 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, + 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, + 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, + 0xc3, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, + 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xad, + 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, + 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, + 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, + 0xc7, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, + 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xb1, + 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, + 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, + 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, + 0xcb, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, + 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xb5, + 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, + 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, + 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, + 0xcf, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, + 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xb9, + 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, + 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, + 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, + 0xd3, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, + 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xbd, + 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, + 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, + 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, + 0xd7, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xc1, + 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, + 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xc5, + 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, + 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xc9, + 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, + 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, + 0xe3, 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, + 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xcd, + 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, + 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, + 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x80, 0x04, 0xd0, 0x02, 0x00, + 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xd1, + 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, + 0x04, 0xd2, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x80, 0x04, 0xd3, 0x02, 0x00, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x80, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x4d, 0x80, + 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x7d, 0xbe, 0x7e, 0xbe, 0x7f, 0xbe, 0x80, 0xbe, + 0x81, 0xbe, 0x82, 0xbe, 0x83, 0xbe, 0x84, 0xbe, + 0x85, 0xbe, 0x86, 0xbe, 0x87, 0xbe, 0x88, 0x26, + 0x0c, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, + 0xd4, 0x02, 0x00, 0x00, 0x04, 0xd5, 0x02, 0x00, + 0x00, 0x04, 0xd6, 0x02, 0x00, 0x00, 0x04, 0xd7, + 0x02, 0x00, 0x00, 0x04, 0xd8, 0x02, 0x00, 0x00, + 0x04, 0xd9, 0x02, 0x00, 0x00, 0x04, 0xda, 0x02, + 0x00, 0x00, 0x04, 0xdb, 0x02, 0x00, 0x00, 0x04, + 0xdc, 0x02, 0x00, 0x00, 0x04, 0xdd, 0x02, 0x00, + 0x00, 0x04, 0xde, 0x02, 0x00, 0x00, 0x04, 0xdf, + 0x02, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xd4, 0x02, 0x00, 0x00, + 0x04, 0xd5, 0x02, 0x00, 0x00, 0x04, 0xd6, 0x02, + 0x00, 0x00, 0x04, 0xd7, 0x02, 0x00, 0x00, 0x04, + 0xd8, 0x02, 0x00, 0x00, 0x04, 0xd9, 0x02, 0x00, + 0x00, 0x04, 0xda, 0x02, 0x00, 0x00, 0x04, 0xdb, + 0x02, 0x00, 0x00, 0x04, 0xdc, 0x02, 0x00, 0x00, + 0x04, 0xdd, 0x02, 0x00, 0x00, 0x04, 0xde, 0x02, + 0x00, 0x00, 0x04, 0xdf, 0x02, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7a, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xe0, 0x02, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x51, 0x01, 0x00, + 0x00, 0x04, 0xe0, 0x02, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe0, + 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, + 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, + 0x4d, 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xe1, 0x02, 0x00, 0x00, 0x04, + 0xe2, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0x51, 0x01, 0x00, 0x00, 0x04, 0xe1, 0x02, 0x00, + 0x00, 0x04, 0xe2, 0x02, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe1, + 0x02, 0x00, 0x00, 0x04, 0xe2, 0x02, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x4d, 0x80, 0x01, + 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, + 0xe2, 0x00, 0x00, 0x00, 0x4d, 0xe3, 0x02, 0x00, + 0x00, 0x4d, 0xe4, 0x02, 0x00, 0x00, 0x0b, 0x04, + 0xe5, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe6, 0x02, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xe7, + 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x02, 0x00, 0x00, + 0x04, 0xe9, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x02, + 0x00, 0x00, 0x4d, 0xeb, 0x02, 0x00, 0x00, 0x0b, + 0x04, 0xec, 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x02, + 0x00, 0x00, 0x04, 0xed, 0x02, 0x00, 0x00, 0x4d, + 0xea, 0x02, 0x00, 0x00, 0x4d, 0xee, 0x02, 0x00, + 0x00, 0x0b, 0x04, 0xef, 0x02, 0x00, 0x00, 0x4d, + 0xe8, 0x02, 0x00, 0x00, 0x04, 0xf0, 0x02, 0x00, + 0x00, 0x4d, 0xea, 0x02, 0x00, 0x00, 0x4d, 0xf1, + 0x02, 0x00, 0x00, 0x4d, 0xf2, 0x02, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0xf3, 0x02, 0x00, 0x00, 0x4d, + 0xeb, 0x02, 0x00, 0x00, 0x04, 0xf4, 0x02, 0x00, + 0x00, 0x4d, 0xf5, 0x02, 0x00, 0x00, 0x04, 0xf6, + 0x02, 0x00, 0x00, 0x4d, 0xf7, 0x02, 0x00, 0x00, + 0x04, 0xf8, 0x02, 0x00, 0x00, 0x4d, 0xf9, 0x02, + 0x00, 0x00, 0x04, 0xfa, 0x02, 0x00, 0x00, 0x4d, + 0xfb, 0x02, 0x00, 0x00, 0x04, 0xfc, 0x02, 0x00, + 0x00, 0x4d, 0xfd, 0x02, 0x00, 0x00, 0x04, 0xfe, + 0x02, 0x00, 0x00, 0x4d, 0xff, 0x02, 0x00, 0x00, + 0x4d, 0xe5, 0x02, 0x00, 0x00, 0x4d, 0x00, 0x03, + 0x00, 0x00, 0x0b, 0x04, 0x01, 0x03, 0x00, 0x00, + 0x4d, 0x02, 0x03, 0x00, 0x00, 0x04, 0x03, 0x03, + 0x00, 0x00, 0x4d, 0x04, 0x03, 0x00, 0x00, 0x04, + 0x05, 0x03, 0x00, 0x00, 0x4d, 0x06, 0x03, 0x00, + 0x00, 0x04, 0x07, 0x03, 0x00, 0x00, 0x4d, 0x08, + 0x03, 0x00, 0x00, 0x04, 0x09, 0x03, 0x00, 0x00, + 0x4d, 0x0a, 0x03, 0x00, 0x00, 0x04, 0x0b, 0x03, + 0x00, 0x00, 0x4d, 0x0c, 0x03, 0x00, 0x00, 0x04, + 0x0d, 0x03, 0x00, 0x00, 0x4d, 0x0e, 0x03, 0x00, + 0x00, 0x04, 0x0f, 0x03, 0x00, 0x00, 0x4d, 0x10, + 0x03, 0x00, 0x00, 0x04, 0x11, 0x03, 0x00, 0x00, + 0x4d, 0x12, 0x03, 0x00, 0x00, 0x04, 0x13, 0x03, + 0x00, 0x00, 0x4d, 0x14, 0x03, 0x00, 0x00, 0x04, + 0x15, 0x03, 0x00, 0x00, 0x4d, 0x16, 0x03, 0x00, + 0x00, 0x04, 0x17, 0x03, 0x00, 0x00, 0x4d, 0x18, + 0x03, 0x00, 0x00, 0x04, 0x19, 0x03, 0x00, 0x00, + 0x4d, 0x1a, 0x03, 0x00, 0x00, 0x04, 0x1b, 0x03, + 0x00, 0x00, 0x4d, 0x1c, 0x03, 0x00, 0x00, 0x04, + 0x1d, 0x03, 0x00, 0x00, 0x4d, 0x1e, 0x03, 0x00, + 0x00, 0x04, 0x1f, 0x03, 0x00, 0x00, 0x4d, 0x20, + 0x03, 0x00, 0x00, 0x04, 0x21, 0x03, 0x00, 0x00, + 0x4d, 0x22, 0x03, 0x00, 0x00, 0x04, 0x23, 0x03, + 0x00, 0x00, 0x4d, 0x24, 0x03, 0x00, 0x00, 0x04, + 0x25, 0x03, 0x00, 0x00, 0x4d, 0x26, 0x03, 0x00, + 0x00, 0x04, 0x27, 0x03, 0x00, 0x00, 0x4d, 0x28, + 0x03, 0x00, 0x00, 0x04, 0x29, 0x03, 0x00, 0x00, + 0x4d, 0x2a, 0x03, 0x00, 0x00, 0x04, 0x2b, 0x03, + 0x00, 0x00, 0x4d, 0x2c, 0x03, 0x00, 0x00, 0x4d, + 0x2d, 0x03, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, + 0x00, 0x24, 0x01, 0x00, 0xcc, 0x28, 0xdc, 0x0c, + 0x01, 0x00, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, + 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x04, 0x31, 0x33, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_de_size = 24918; + +const uint8_t intl_de[24918] = { + 0x01, 0xe3, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x64, 0x65, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x10, + 0x7b, 0x31, 0x7d, 0x2c, 0x20, 0x7b, 0x30, 0x7d, + 0x0a, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, + 0x65, 0x64, 0x69, 0x75, 0x6d, 0x18, 0x7b, 0x31, + 0x7d, 0x20, 0x27, 0x75, 0x6d, 0x27, 0x20, 0x7b, + 0x30, 0x7d, 0x08, 0x66, 0x75, 0x6c, 0x6c, 0x08, + 0x6c, 0x6f, 0x6e, 0x67, 0x02, 0x64, 0x06, 0x63, + 0x63, 0x63, 0x02, 0x45, 0x0a, 0x45, 0x2c, 0x20, + 0x64, 0x2e, 0x04, 0x45, 0x64, 0x10, 0x45, 0x20, + 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x06, 0x45, + 0x68, 0x6d, 0x10, 0x45, 0x2c, 0x20, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x06, 0x45, 0x48, 0x6d, 0x18, + 0x45, 0x2c, 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x20, 0x61, 0x08, 0x45, 0x68, 0x6d, + 0x73, 0x16, 0x45, 0x2c, 0x20, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x08, 0x45, 0x48, + 0x6d, 0x73, 0x06, 0x79, 0x20, 0x47, 0x04, 0x47, + 0x79, 0x0e, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x20, + 0x47, 0x0a, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x14, + 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, + 0x20, 0x47, 0x0c, 0x47, 0x79, 0x4d, 0x4d, 0x4d, + 0x64, 0x1a, 0x45, 0x2c, 0x20, 0x64, 0x2e, 0x20, + 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x20, 0x47, 0x0e, + 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x06, + 0x68, 0x20, 0x61, 0x02, 0x68, 0x10, 0x48, 0x48, + 0x20, 0x27, 0x55, 0x68, 0x72, 0x27, 0x02, 0x48, + 0x0c, 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x04, + 0x68, 0x6d, 0x0a, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x04, 0x48, 0x6d, 0x12, 0x68, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x61, 0x06, 0x68, 0x6d, + 0x73, 0x10, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x06, 0x48, 0x6d, 0x73, 0x16, 0x68, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, + 0x20, 0x76, 0x08, 0x68, 0x6d, 0x73, 0x76, 0x14, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x76, 0x08, 0x48, 0x6d, 0x73, 0x76, 0x10, + 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x20, 0x76, + 0x06, 0x68, 0x6d, 0x76, 0x0e, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x20, 0x76, 0x06, 0x48, 0x6d, 0x76, + 0x02, 0x4c, 0x02, 0x4d, 0x08, 0x64, 0x2e, 0x4d, + 0x2e, 0x04, 0x4d, 0x64, 0x0e, 0x45, 0x2c, 0x20, + 0x64, 0x2e, 0x4d, 0x2e, 0x06, 0x4d, 0x45, 0x64, + 0x0a, 0x64, 0x2e, 0x4d, 0x4d, 0x2e, 0x06, 0x4d, + 0x4d, 0x64, 0x0c, 0x64, 0x64, 0x2e, 0x4d, 0x4d, + 0x2e, 0x08, 0x4d, 0x4d, 0x64, 0x64, 0x06, 0x4c, + 0x4c, 0x4c, 0x06, 0x4d, 0x4d, 0x4d, 0x0c, 0x64, + 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x08, 0x4d, 0x4d, + 0x4d, 0x64, 0x12, 0x45, 0x2c, 0x20, 0x64, 0x2e, + 0x20, 0x4d, 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, + 0x45, 0x64, 0x0e, 0x64, 0x2e, 0x20, 0x4d, 0x4d, + 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, + 0x14, 0x45, 0x2c, 0x20, 0x64, 0x2e, 0x20, 0x4d, + 0x4d, 0x4d, 0x4d, 0x0c, 0x4d, 0x4d, 0x4d, 0x4d, + 0x45, 0x64, 0x0a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x04, 0x6d, 0x73, 0x02, 0x79, 0x06, 0x4d, 0x2e, + 0x79, 0x04, 0x79, 0x4d, 0x0a, 0x64, 0x2e, 0x4d, + 0x2e, 0x79, 0x06, 0x79, 0x4d, 0x64, 0x10, 0x45, + 0x2c, 0x20, 0x64, 0x2e, 0x4d, 0x2e, 0x79, 0x08, + 0x79, 0x4d, 0x45, 0x64, 0x08, 0x4d, 0x4d, 0x2e, + 0x79, 0x06, 0x79, 0x4d, 0x4d, 0x0e, 0x64, 0x64, + 0x2e, 0x4d, 0x4d, 0x2e, 0x79, 0x0a, 0x79, 0x4d, + 0x4d, 0x64, 0x64, 0x0a, 0x4d, 0x4d, 0x4d, 0x20, + 0x79, 0x08, 0x79, 0x4d, 0x4d, 0x4d, 0x10, 0x64, + 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0a, + 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x16, 0x45, 0x2c, + 0x20, 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x20, + 0x79, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, + 0x0c, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0a, + 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, 0x51, 0x51, + 0x51, 0x20, 0x79, 0x08, 0x79, 0x51, 0x51, 0x51, + 0x0c, 0x51, 0x51, 0x51, 0x51, 0x20, 0x79, 0x0a, + 0x79, 0x51, 0x51, 0x51, 0x51, 0x20, 0x61, 0x76, + 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x1e, 0x45, + 0x45, 0x45, 0x45, 0x2c, 0x20, 0x64, 0x2e, 0x20, + 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x14, 0x79, + 0x4d, 0x4d, 0x4d, 0x4d, 0x45, 0x45, 0x45, 0x45, + 0x64, 0x12, 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, + 0x4d, 0x20, 0x79, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, + 0x4d, 0x64, 0x10, 0x64, 0x64, 0x2e, 0x4d, 0x4d, + 0x2e, 0x79, 0x79, 0x16, 0x64, 0x61, 0x74, 0x65, + 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x1a, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x7a, 0x7a, 0x7a, 0x7a, 0x12, 0x68, 0x6d, + 0x6d, 0x73, 0x73, 0x7a, 0x7a, 0x7a, 0x7a, 0x14, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x7a, 0x08, 0x68, 0x6d, 0x73, 0x7a, 0x16, + 0x74, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x73, 0x0e, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x73, 0x02, 0x4a, 0x02, 0x46, 0x02, + 0x41, 0x02, 0x53, 0x02, 0x4f, 0x02, 0x4e, 0x02, + 0x44, 0x0c, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x08, 0x4a, 0x61, 0x6e, 0x2e, 0x08, 0x46, 0x65, + 0x62, 0x2e, 0x08, 0x4d, 0xe4, 0x72, 0x7a, 0x08, + 0x41, 0x70, 0x72, 0x2e, 0x06, 0x4d, 0x61, 0x69, + 0x08, 0x4a, 0x75, 0x6e, 0x69, 0x08, 0x4a, 0x75, + 0x6c, 0x69, 0x08, 0x41, 0x75, 0x67, 0x2e, 0x08, + 0x53, 0x65, 0x70, 0x2e, 0x08, 0x4f, 0x6b, 0x74, + 0x2e, 0x08, 0x4e, 0x6f, 0x76, 0x2e, 0x08, 0x44, + 0x65, 0x7a, 0x2e, 0x0c, 0x4a, 0x61, 0x6e, 0x75, + 0x61, 0x72, 0x0e, 0x46, 0x65, 0x62, 0x72, 0x75, + 0x61, 0x72, 0x0a, 0x41, 0x70, 0x72, 0x69, 0x6c, + 0x0c, 0x41, 0x75, 0x67, 0x75, 0x73, 0x74, 0x12, + 0x53, 0x65, 0x70, 0x74, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x0e, 0x4f, 0x6b, 0x74, 0x6f, 0x62, 0x65, + 0x72, 0x10, 0x4e, 0x6f, 0x76, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x10, 0x44, 0x65, 0x7a, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x0c, 0x6d, 0x6f, 0x6e, 0x74, + 0x68, 0x73, 0x06, 0x53, 0x6f, 0x2e, 0x06, 0x4d, + 0x6f, 0x2e, 0x06, 0x44, 0x69, 0x2e, 0x06, 0x4d, + 0x69, 0x2e, 0x06, 0x44, 0x6f, 0x2e, 0x06, 0x46, + 0x72, 0x2e, 0x06, 0x53, 0x61, 0x2e, 0x0e, 0x53, + 0x6f, 0x6e, 0x6e, 0x74, 0x61, 0x67, 0x0c, 0x4d, + 0x6f, 0x6e, 0x74, 0x61, 0x67, 0x10, 0x44, 0x69, + 0x65, 0x6e, 0x73, 0x74, 0x61, 0x67, 0x10, 0x4d, + 0x69, 0x74, 0x74, 0x77, 0x6f, 0x63, 0x68, 0x14, + 0x44, 0x6f, 0x6e, 0x6e, 0x65, 0x72, 0x73, 0x74, + 0x61, 0x67, 0x0e, 0x46, 0x72, 0x65, 0x69, 0x74, + 0x61, 0x67, 0x0e, 0x53, 0x61, 0x6d, 0x73, 0x74, + 0x61, 0x67, 0x08, 0x64, 0x61, 0x79, 0x73, 0x04, + 0x42, 0x45, 0x08, 0x65, 0x72, 0x61, 0x73, 0x0a, + 0x76, 0x6f, 0x72, 0x6d, 0x2e, 0x04, 0x61, 0x6d, + 0x0c, 0x6e, 0x61, 0x63, 0x68, 0x6d, 0x2e, 0x04, + 0x70, 0x6d, 0x14, 0x64, 0x61, 0x79, 0x50, 0x65, + 0x72, 0x69, 0x6f, 0x64, 0x73, 0x06, 0x4d, 0x30, + 0x31, 0x06, 0x4d, 0x30, 0x32, 0x06, 0x4d, 0x30, + 0x33, 0x06, 0x4d, 0x30, 0x34, 0x06, 0x4d, 0x30, + 0x35, 0x06, 0x4d, 0x30, 0x36, 0x06, 0x4d, 0x30, + 0x37, 0x06, 0x4d, 0x30, 0x38, 0x06, 0x4d, 0x30, + 0x39, 0x06, 0x4d, 0x31, 0x30, 0x06, 0x4d, 0x31, + 0x31, 0x06, 0x4d, 0x31, 0x32, 0x08, 0x54, 0x6f, + 0x75, 0x74, 0x08, 0x42, 0x61, 0x62, 0x61, 0x0a, + 0x48, 0x61, 0x74, 0x6f, 0x72, 0x0a, 0x4b, 0x69, + 0x61, 0x68, 0x6b, 0x08, 0x54, 0x6f, 0x62, 0x61, + 0x0c, 0x41, 0x6d, 0x73, 0x68, 0x69, 0x72, 0x10, + 0x42, 0x61, 0x72, 0x61, 0x6d, 0x68, 0x61, 0x74, + 0x12, 0x42, 0x61, 0x72, 0x61, 0x6d, 0x6f, 0x75, + 0x64, 0x61, 0x0e, 0x42, 0x61, 0x73, 0x68, 0x61, + 0x6e, 0x73, 0x0a, 0x50, 0x61, 0x6f, 0x6e, 0x61, + 0x08, 0x45, 0x70, 0x65, 0x70, 0x0a, 0x4d, 0x65, + 0x73, 0x72, 0x61, 0x0a, 0x4e, 0x61, 0x73, 0x69, + 0x65, 0x08, 0x45, 0x52, 0x41, 0x30, 0x08, 0x45, + 0x52, 0x41, 0x31, 0x10, 0x4d, 0x65, 0x73, 0x6b, + 0x65, 0x72, 0x65, 0x6d, 0x0c, 0x54, 0x65, 0x6b, + 0x65, 0x6d, 0x74, 0x0a, 0x48, 0x65, 0x64, 0x61, + 0x72, 0x0c, 0x54, 0x61, 0x68, 0x73, 0x61, 0x73, + 0x06, 0x54, 0x65, 0x72, 0x0e, 0x59, 0x65, 0x6b, + 0x61, 0x74, 0x69, 0x74, 0x0e, 0x4d, 0x65, 0x67, + 0x61, 0x62, 0x69, 0x74, 0x0c, 0x4d, 0x69, 0x61, + 0x7a, 0x69, 0x61, 0x0c, 0x47, 0x65, 0x6e, 0x62, + 0x6f, 0x74, 0x08, 0x53, 0x65, 0x6e, 0x65, 0x0a, + 0x48, 0x61, 0x6d, 0x6c, 0x65, 0x0e, 0x4e, 0x65, + 0x68, 0x61, 0x73, 0x73, 0x65, 0x0e, 0x50, 0x61, + 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x0e, 0x76, 0x2e, + 0x20, 0x43, 0x68, 0x72, 0x2e, 0x0e, 0x6e, 0x2e, + 0x20, 0x43, 0x68, 0x72, 0x2e, 0x10, 0x76, 0x2e, + 0x20, 0x75, 0x2e, 0x20, 0x5a, 0x2e, 0x0a, 0x75, + 0x2e, 0x20, 0x5a, 0x2e, 0x30, 0x76, 0x6f, 0x72, + 0x20, 0x75, 0x6e, 0x73, 0x65, 0x72, 0x65, 0x72, + 0x20, 0x5a, 0x65, 0x69, 0x74, 0x72, 0x65, 0x63, + 0x68, 0x6e, 0x75, 0x6e, 0x67, 0x28, 0x75, 0x6e, + 0x73, 0x65, 0x72, 0x65, 0x72, 0x20, 0x5a, 0x65, + 0x69, 0x74, 0x72, 0x65, 0x63, 0x68, 0x6e, 0x75, + 0x6e, 0x67, 0x0c, 0x54, 0x69, 0x73, 0x68, 0x72, + 0x69, 0x0e, 0x48, 0x65, 0x73, 0x68, 0x76, 0x61, + 0x6e, 0x0c, 0x4b, 0x69, 0x73, 0x6c, 0x65, 0x76, + 0x0a, 0x54, 0x65, 0x76, 0x65, 0x74, 0x0c, 0x53, + 0x68, 0x65, 0x76, 0x61, 0x74, 0x0c, 0x41, 0x64, + 0x61, 0x72, 0x20, 0x49, 0x08, 0x41, 0x64, 0x61, + 0x72, 0x0a, 0x4e, 0x69, 0x73, 0x61, 0x6e, 0x08, + 0x49, 0x79, 0x61, 0x72, 0x0a, 0x53, 0x69, 0x76, + 0x61, 0x6e, 0x0a, 0x54, 0x61, 0x6d, 0x75, 0x7a, + 0x04, 0x41, 0x76, 0x08, 0x45, 0x6c, 0x75, 0x6c, + 0x0e, 0x41, 0x64, 0x61, 0x72, 0x20, 0x49, 0x49, + 0x04, 0x41, 0x4d, 0x0e, 0x43, 0x68, 0x61, 0x69, + 0x74, 0x72, 0x61, 0x10, 0x56, 0x61, 0x69, 0x73, + 0x61, 0x6b, 0x68, 0x61, 0x10, 0x4a, 0x79, 0x61, + 0x69, 0x73, 0x74, 0x68, 0x61, 0x0c, 0x41, 0x73, + 0x61, 0x64, 0x68, 0x61, 0x0e, 0x53, 0x72, 0x61, + 0x76, 0x61, 0x6e, 0x61, 0x0c, 0x42, 0x68, 0x61, + 0x64, 0x72, 0x61, 0x0c, 0x41, 0x73, 0x76, 0x69, + 0x6e, 0x61, 0x0e, 0x4b, 0x61, 0x72, 0x74, 0x69, + 0x6b, 0x61, 0x14, 0x41, 0x67, 0x72, 0x61, 0x68, + 0x61, 0x79, 0x61, 0x6e, 0x61, 0x0a, 0x50, 0x61, + 0x75, 0x73, 0x61, 0x0a, 0x4d, 0x61, 0x67, 0x68, + 0x61, 0x10, 0x50, 0x68, 0x61, 0x6c, 0x67, 0x75, + 0x6e, 0x61, 0x08, 0x53, 0x61, 0x6b, 0x61, 0x08, + 0x4d, 0x75, 0x68, 0x2e, 0x08, 0x53, 0x61, 0x66, + 0x2e, 0x0c, 0x52, 0x61, 0x62, 0x2e, 0x20, 0x49, + 0x0e, 0x52, 0x61, 0x62, 0x2e, 0x20, 0x49, 0x49, + 0x0c, 0x4a, 0x75, 0x6d, 0x2e, 0x20, 0x49, 0x0e, + 0x4a, 0x75, 0x6d, 0x2e, 0x20, 0x49, 0x49, 0x08, + 0x52, 0x61, 0x6a, 0x2e, 0x08, 0x53, 0x68, 0x61, + 0x2e, 0x08, 0x52, 0x61, 0x6d, 0x2e, 0x0a, 0x53, + 0x68, 0x61, 0x77, 0x2e, 0x11, 0x44, 0x00, 0x68, + 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, + 0x00, 0x51, 0x00, 0x2e, 0x00, 0x11, 0x44, 0x00, + 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, + 0x2d, 0x00, 0x48, 0x00, 0x2e, 0x00, 0x10, 0x4d, + 0x75, 0x68, 0x61, 0x72, 0x72, 0x61, 0x6d, 0x0a, + 0x53, 0x61, 0x66, 0x61, 0x72, 0x0f, 0x52, 0x00, + 0x61, 0x00, 0x62, 0x00, 0x69, 0x00, 0xbb, 0x02, + 0x20, 0x00, 0x49, 0x00, 0x11, 0x52, 0x00, 0x61, + 0x00, 0x62, 0x00, 0x69, 0x00, 0xbb, 0x02, 0x20, + 0x00, 0x49, 0x00, 0x49, 0x00, 0x10, 0x4a, 0x75, + 0x6d, 0x61, 0x64, 0x61, 0x20, 0x49, 0x12, 0x4a, + 0x75, 0x6d, 0x61, 0x64, 0x61, 0x20, 0x49, 0x49, + 0x0a, 0x52, 0x61, 0x6a, 0x61, 0x62, 0x0f, 0x53, + 0x00, 0x68, 0x00, 0x61, 0x00, 0xbb, 0x02, 0x62, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x0e, 0x52, 0x61, + 0x6d, 0x61, 0x64, 0x61, 0x6e, 0x0e, 0x53, 0x68, + 0x61, 0x77, 0x77, 0x61, 0x6c, 0x19, 0x44, 0x00, + 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, + 0x2d, 0x00, 0x51, 0x00, 0x69, 0x00, 0xbb, 0x02, + 0x64, 0x00, 0x61, 0x00, 0x68, 0x00, 0x19, 0x44, + 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, + 0x00, 0x2d, 0x00, 0x48, 0x00, 0x69, 0x00, 0x6a, + 0x00, 0x6a, 0x00, 0x61, 0x00, 0x68, 0x00, 0x04, + 0x41, 0x48, 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x36, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x36, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, + 0x68, 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x54, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x1d, 0x57, 0x00, 0x61, + 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x1f, 0x52, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x1d, 0x59, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x37, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x2d, 0x00, 0x6b, 0x00, 0x61, 0x00, + 0x6d, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x2d, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x2b, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x2d, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, 0x2a, + 0x4a, 0x69, 0x6e, 0x67, 0x6f, 0x2d, 0x6b, 0x65, + 0x69, 0x75, 0x6e, 0x20, 0x28, 0x37, 0x36, 0x37, + 0x2d, 0x37, 0x37, 0x30, 0x29, 0x1d, 0x48, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x1f, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x2d, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x2d, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x38, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x1f, 0x44, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1d, 0x4a, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x1d, 0x4b, 0x00, 0x61, 0x00, 0x6a, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1f, 0x53, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x20, 0x54, 0x65, 0x6e, 0x2d, + 0x61, 0x6e, 0x20, 0x28, 0x38, 0x35, 0x37, 0x2d, + 0x38, 0x35, 0x39, 0x29, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x74, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x1f, 0x45, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1b, 0x4c, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x1d, 0x41, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x1f, 0x45, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x1d, 0x45, 0x00, 0x69, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, + 0x69, 0x00, 0x73, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x39, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4a, + 0x00, 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x35, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, 0x4a, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x29, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4c, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x4a, + 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, 0x24, + 0x54, 0x65, 0x6e, 0x2d, 0x65, 0x69, 0x20, 0x28, + 0x31, 0x31, 0x31, 0x30, 0x2d, 0x31, 0x31, 0x31, + 0x33, 0x29, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x44, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x48, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x48, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x27, 0x45, 0x00, 0x69, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x68, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x6d, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x61, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x69, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x59, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x21, 0x4a, 0x00, 0x75, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x29, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x29, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, + 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x41, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, + 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x29, 0x00, 0x27, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x75, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x29, 0x52, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x4e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x4c, 0x01, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6d, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, + 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, + 0x4c, 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x74, + 0x00, 0x73, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x27, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x21, 0x4c, 0x01, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, + 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x21, 0x4d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, + 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x72, 0x00, + 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4d, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, 0x45, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, + 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x48, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x65, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, + 0x41, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x02, 0x54, 0x0a, + 0x4d, 0x65, 0x69, 0x6a, 0x69, 0x0d, 0x54, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x0b, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x0c, 0x48, 0x65, + 0x69, 0x73, 0x65, 0x69, 0x12, 0x46, 0x61, 0x72, + 0x76, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x16, 0x4f, + 0x72, 0x64, 0x69, 0x62, 0x65, 0x68, 0x65, 0x73, + 0x68, 0x74, 0x0e, 0x4b, 0x68, 0x6f, 0x72, 0x64, + 0x61, 0x64, 0x06, 0x54, 0x69, 0x72, 0x0c, 0x4d, + 0x6f, 0x72, 0x64, 0x61, 0x64, 0x12, 0x53, 0x68, + 0x61, 0x68, 0x72, 0x69, 0x76, 0x61, 0x72, 0x08, + 0x4d, 0x65, 0x68, 0x72, 0x08, 0x41, 0x62, 0x61, + 0x6e, 0x08, 0x41, 0x7a, 0x61, 0x72, 0x06, 0x44, + 0x65, 0x79, 0x0c, 0x42, 0x61, 0x68, 0x6d, 0x61, + 0x6e, 0x0c, 0x45, 0x73, 0x66, 0x61, 0x6e, 0x64, + 0x04, 0x41, 0x50, 0x1a, 0x42, 0x65, 0x66, 0x6f, + 0x72, 0x65, 0x20, 0x52, 0x2e, 0x4f, 0x2e, 0x43, + 0x2e, 0x0c, 0x4d, 0x69, 0x6e, 0x67, 0x75, 0x6f, + 0x12, 0x63, 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, + 0x72, 0x73, 0x08, 0x64, 0x61, 0x74, 0x65, 0x08, + 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, 0x75, 0x10, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0x1e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, + 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, + 0x26, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x6e, 0x65, 0x67, + 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, + 0x74, 0x65, 0x72, 0x6e, 0x0e, 0x64, 0x65, 0x63, + 0x69, 0x6d, 0x61, 0x6c, 0x26, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0xa0, 0x7b, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, + 0x3c, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0xa0, 0x7b, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, 0x10, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, + 0x2c, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0xa0, 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, + 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x42, + 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, + 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0xa0, 0x7b, 0x70, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, + 0x7d, 0x0e, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, + 0x74, 0x10, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, + 0x6e, 0x73, 0x02, 0x2c, 0x02, 0x2e, 0x0a, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x06, 0x4e, 0x61, 0x4e, + 0x06, 0x6e, 0x61, 0x6e, 0x02, 0x2b, 0x10, 0x70, + 0x6c, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, + 0x2d, 0x12, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, + 0x69, 0x67, 0x6e, 0x02, 0x25, 0x16, 0x70, 0x65, + 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, + 0x6e, 0x03, 0x1e, 0x22, 0x10, 0x69, 0x6e, 0x66, + 0x69, 0x6e, 0x69, 0x74, 0x79, 0x0e, 0x73, 0x79, + 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x04, 0xf6, 0x53, + 0x06, 0x41, 0x54, 0x53, 0x06, 0x41, 0x55, 0x24, + 0x06, 0x41, 0x55, 0x44, 0x06, 0x42, 0x47, 0x4b, + 0x06, 0x42, 0x47, 0x4d, 0x06, 0x42, 0x47, 0x4a, + 0x06, 0x42, 0x47, 0x4f, 0x04, 0x52, 0x24, 0x06, + 0x42, 0x52, 0x4c, 0x06, 0x43, 0x41, 0x24, 0x06, + 0x43, 0x41, 0x44, 0x06, 0x43, 0x4e, 0xa5, 0x06, + 0x43, 0x4e, 0x59, 0x04, 0x44, 0x4d, 0x06, 0x44, + 0x45, 0x4d, 0x03, 0xac, 0x20, 0x06, 0x45, 0x55, + 0x52, 0x02, 0xa3, 0x06, 0x47, 0x42, 0x50, 0x06, + 0x48, 0x4b, 0x24, 0x06, 0x48, 0x4b, 0x44, 0x03, + 0xaa, 0x20, 0x06, 0x49, 0x4c, 0x53, 0x03, 0xb9, + 0x20, 0x06, 0x49, 0x4e, 0x52, 0x02, 0xa5, 0x06, + 0x4a, 0x50, 0x59, 0x03, 0xa9, 0x20, 0x06, 0x4b, + 0x52, 0x57, 0x06, 0x4d, 0x58, 0x24, 0x06, 0x4d, + 0x58, 0x4e, 0x06, 0x4e, 0x5a, 0x24, 0x06, 0x4e, + 0x5a, 0x44, 0x03, 0x3f, 0x0e, 0x06, 0x54, 0x48, + 0x42, 0x06, 0x4e, 0x54, 0x24, 0x06, 0x54, 0x57, + 0x44, 0x02, 0x24, 0x06, 0x55, 0x53, 0x44, 0x03, + 0xab, 0x20, 0x06, 0x56, 0x4e, 0x44, 0x08, 0x46, + 0x43, 0x46, 0x41, 0x06, 0x58, 0x41, 0x46, 0x06, + 0x45, 0x43, 0x24, 0x06, 0x58, 0x43, 0x44, 0x06, + 0x43, 0x46, 0x41, 0x06, 0x58, 0x4f, 0x46, 0x08, + 0x43, 0x46, 0x50, 0x46, 0x06, 0x58, 0x50, 0x46, + 0x14, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, + 0x69, 0x65, 0x73, 0x52, 0x6e, 0x6f, 0x64, 0x65, + 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, + 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2f, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, + 0x61, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x70, 0x2f, + 0x64, 0x65, 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, + 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, 0x27, 0x00, + 0x89, 0x01, 0xb8, 0x6b, 0x01, 0xa0, 0x01, 0x00, + 0x00, 0x00, 0x39, 0xd0, 0x00, 0x00, 0x00, 0x43, + 0xd1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd2, 0x00, + 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd4, 0x00, 0x00, 0x00, 0x04, 0xd5, 0x00, + 0x00, 0x00, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x04, + 0xd7, 0x00, 0x00, 0x00, 0x04, 0xd8, 0x00, 0x00, + 0x00, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x04, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xdb, 0x00, 0x00, 0x00, + 0x04, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xdd, 0x00, + 0x00, 0x00, 0x04, 0xde, 0x00, 0x00, 0x00, 0x04, + 0xdf, 0x00, 0x00, 0x00, 0x04, 0xe0, 0x00, 0x00, + 0x00, 0x04, 0xe1, 0x00, 0x00, 0x00, 0x04, 0xe2, + 0x00, 0x00, 0x00, 0x26, 0x0f, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x00, 0x0a, 0x4d, 0xe4, 0x00, 0x00, + 0x00, 0x09, 0x4d, 0xe5, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, + 0xe8, 0x00, 0x00, 0x00, 0x04, 0xe9, 0x00, 0x00, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x04, 0xe9, + 0x00, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0xec, + 0x00, 0x00, 0x00, 0x04, 0xed, 0x00, 0x00, 0x00, + 0x4d, 0xee, 0x00, 0x00, 0x00, 0x04, 0xef, 0x00, + 0x00, 0x00, 0x4d, 0xf0, 0x00, 0x00, 0x00, 0x04, + 0xf1, 0x00, 0x00, 0x00, 0x4d, 0xf2, 0x00, 0x00, + 0x00, 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, 0xf4, + 0x00, 0x00, 0x00, 0x04, 0xf5, 0x00, 0x00, 0x00, + 0x4d, 0xf6, 0x00, 0x00, 0x00, 0x04, 0xf7, 0x00, + 0x00, 0x00, 0x4d, 0xf8, 0x00, 0x00, 0x00, 0x04, + 0xf9, 0x00, 0x00, 0x00, 0x4d, 0xfa, 0x00, 0x00, + 0x00, 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, 0xfc, + 0x00, 0x00, 0x00, 0x04, 0xfd, 0x00, 0x00, 0x00, + 0x4d, 0xfe, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x01, 0x00, 0x00, 0x04, + 0x01, 0x01, 0x00, 0x00, 0x4d, 0x02, 0x01, 0x00, + 0x00, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0x04, + 0x01, 0x00, 0x00, 0x04, 0x05, 0x01, 0x00, 0x00, + 0x4d, 0x06, 0x01, 0x00, 0x00, 0x04, 0x07, 0x01, + 0x00, 0x00, 0x4d, 0x08, 0x01, 0x00, 0x00, 0x04, + 0x09, 0x01, 0x00, 0x00, 0x4d, 0x0a, 0x01, 0x00, + 0x00, 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, 0x0c, + 0x01, 0x00, 0x00, 0x04, 0x0d, 0x01, 0x00, 0x00, + 0x4d, 0x0e, 0x01, 0x00, 0x00, 0x04, 0x0f, 0x01, + 0x00, 0x00, 0x4d, 0x10, 0x01, 0x00, 0x00, 0x04, + 0x11, 0x01, 0x00, 0x00, 0x4d, 0x12, 0x01, 0x00, + 0x00, 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, 0x14, + 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x4d, 0x16, 0x01, 0x00, 0x00, 0x04, 0x17, 0x01, + 0x00, 0x00, 0x4d, 0x18, 0x01, 0x00, 0x00, 0x04, + 0x19, 0x01, 0x00, 0x00, 0x4d, 0x1a, 0x01, 0x00, + 0x00, 0x04, 0x1b, 0x01, 0x00, 0x00, 0x4d, 0x1c, + 0x01, 0x00, 0x00, 0x04, 0x1d, 0x01, 0x00, 0x00, + 0x4d, 0x1e, 0x01, 0x00, 0x00, 0x04, 0x1f, 0x01, + 0x00, 0x00, 0x4d, 0x20, 0x01, 0x00, 0x00, 0x04, + 0x21, 0x01, 0x00, 0x00, 0x4d, 0x22, 0x01, 0x00, + 0x00, 0x04, 0x23, 0x01, 0x00, 0x00, 0x4d, 0x24, + 0x01, 0x00, 0x00, 0x04, 0x25, 0x01, 0x00, 0x00, + 0x4d, 0x26, 0x01, 0x00, 0x00, 0x04, 0x27, 0x01, + 0x00, 0x00, 0x4d, 0x28, 0x01, 0x00, 0x00, 0x04, + 0x29, 0x01, 0x00, 0x00, 0x4d, 0x2a, 0x01, 0x00, + 0x00, 0x04, 0x2b, 0x01, 0x00, 0x00, 0x4d, 0x2b, + 0x01, 0x00, 0x00, 0x04, 0x2c, 0x01, 0x00, 0x00, + 0x4d, 0x2d, 0x01, 0x00, 0x00, 0x04, 0x2e, 0x01, + 0x00, 0x00, 0x4d, 0x2f, 0x01, 0x00, 0x00, 0x04, + 0x30, 0x01, 0x00, 0x00, 0x4d, 0x31, 0x01, 0x00, + 0x00, 0x04, 0x32, 0x01, 0x00, 0x00, 0x4d, 0x33, + 0x01, 0x00, 0x00, 0x04, 0x34, 0x01, 0x00, 0x00, + 0x4d, 0x35, 0x01, 0x00, 0x00, 0x04, 0x36, 0x01, + 0x00, 0x00, 0x4d, 0x37, 0x01, 0x00, 0x00, 0x04, + 0x38, 0x01, 0x00, 0x00, 0x4d, 0x39, 0x01, 0x00, + 0x00, 0x04, 0x3a, 0x01, 0x00, 0x00, 0x4d, 0x3b, + 0x01, 0x00, 0x00, 0x04, 0x3c, 0x01, 0x00, 0x00, + 0x4d, 0x3d, 0x01, 0x00, 0x00, 0x04, 0x3e, 0x01, + 0x00, 0x00, 0x4d, 0x3f, 0x01, 0x00, 0x00, 0x04, + 0x40, 0x01, 0x00, 0x00, 0x4d, 0x41, 0x01, 0x00, + 0x00, 0x4d, 0x42, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x43, 0x01, 0x00, 0x00, 0x4d, 0x44, 0x01, 0x00, + 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, 0x4d, 0x46, + 0x01, 0x00, 0x00, 0x04, 0x34, 0x01, 0x00, 0x00, + 0x4d, 0x39, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x4d, 0x2f, 0x01, 0x00, 0x00, 0x4d, + 0x48, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x4d, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, 0x0a, + 0x01, 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, 0x00, + 0x4d, 0x06, 0x01, 0x00, 0x00, 0x4d, 0x4d, 0x01, + 0x00, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x0b, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x16, + 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6b, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7a, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x4d, + 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, + 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x00, 0xbe, 0x01, 0xbe, 0x02, 0xbe, 0x03, + 0xbe, 0x04, 0xbe, 0x05, 0xbe, 0x06, 0xbe, 0x07, + 0xbe, 0x08, 0xbe, 0x09, 0xbe, 0x0a, 0xbe, 0x0b, + 0x26, 0x0c, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, + 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, + 0x8d, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, + 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, + 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, + 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x7a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, + 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, 0xd6, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x0c, 0xbe, + 0x0d, 0xbe, 0x0e, 0xbe, 0x0f, 0xbe, 0x10, 0xbe, + 0x11, 0xbe, 0x12, 0xbe, 0x13, 0xbe, 0x14, 0xbe, + 0x15, 0xbe, 0x16, 0xbe, 0x17, 0xbe, 0x18, 0x26, + 0x0d, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, + 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, + 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, + 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, + 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, + 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, + 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, + 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, + 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, + 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, + 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, + 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, + 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, + 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, + 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x16, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x9b, + 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, + 0x9c, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x4d, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, + 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x19, 0xbe, 0x1a, 0xbe, 0x1b, + 0xbe, 0x1c, 0xbe, 0x1d, 0xbe, 0x1e, 0xbe, 0x1f, + 0xbe, 0x20, 0xbe, 0x21, 0xbe, 0x22, 0xbe, 0x23, + 0xbe, 0x24, 0x26, 0x0c, 0x00, 0x4d, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, + 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, + 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, + 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, + 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, + 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, + 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, + 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, + 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, + 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x4d, 0x80, + 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x25, 0xbe, 0x26, 0xbe, 0x27, 0xbe, 0x28, 0xbe, + 0x29, 0xbe, 0x2a, 0xbe, 0x2b, 0xbe, 0x2c, 0xbe, + 0x2d, 0xbe, 0x2e, 0xbe, 0x2f, 0xbe, 0x30, 0xbe, + 0x31, 0x26, 0x0d, 0x00, 0x4d, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, + 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, + 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, + 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, + 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, + 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, + 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, + 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, + 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, + 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, + 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, + 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, + 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, + 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, + 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x16, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, + 0x9c, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, + 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7c, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, + 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x32, 0xbe, 0x33, + 0xbe, 0x34, 0xbe, 0x35, 0xbe, 0x36, 0xbe, 0x37, + 0xbe, 0x38, 0xbe, 0x39, 0xbe, 0x3a, 0xbe, 0x3b, + 0xbe, 0x3c, 0xbe, 0x3d, 0xbe, 0x3e, 0x26, 0x0d, + 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0x9d, + 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, + 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, + 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, + 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, + 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, + 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, + 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, + 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, + 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, + 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, + 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, + 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, + 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, + 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, + 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x7a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x9b, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x9b, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x4d, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, + 0x01, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x3f, 0xbe, 0x40, 0xbe, 0x41, + 0xbe, 0x42, 0xbe, 0x43, 0xbe, 0x44, 0xbe, 0x45, + 0xbe, 0x46, 0xbe, 0x47, 0xbe, 0x48, 0xbe, 0x49, + 0xbe, 0x4a, 0x26, 0x0c, 0x00, 0x4d, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, + 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, + 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, + 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, + 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, + 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, + 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, + 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, + 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, + 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, + 0x04, 0x9c, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7c, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, 0x4d, + 0x81, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7a, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xaa, 0x01, 0x00, + 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, + 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, + 0x26, 0x04, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, + 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, + 0xad, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, + 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, 0xae, + 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, + 0x26, 0x04, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x4d, 0x80, 0x01, + 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x4b, + 0xbe, 0x4c, 0xbe, 0x4d, 0xbe, 0x4e, 0xbe, 0x4f, + 0xbe, 0x50, 0xbe, 0x51, 0xbe, 0x52, 0xbe, 0x53, + 0xbe, 0x54, 0xbe, 0x55, 0xbe, 0x56, 0xbe, 0x57, + 0xbe, 0x58, 0x26, 0x0e, 0x00, 0x4d, 0x56, 0x01, + 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, + 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, + 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, + 0x01, 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, + 0x04, 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, + 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, 0x04, + 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, + 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, + 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, + 0x26, 0x0e, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, + 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, + 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, + 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, 0x04, 0xb6, + 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, + 0x04, 0xb8, 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, + 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, 0x04, + 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, + 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, 0x26, 0x0e, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6b, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7a, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xbe, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0xbe, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xbe, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x4d, + 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x59, 0xbe, 0x5a, 0xbe, 0x5b, 0xbe, 0x5c, + 0xbe, 0x5d, 0xbe, 0x5e, 0xbe, 0x5f, 0xbe, 0x60, + 0xbe, 0x61, 0xbe, 0x62, 0xbe, 0x63, 0xbe, 0x64, + 0x26, 0x0c, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0xbf, 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, + 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, 0x04, + 0xc2, 0x01, 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, + 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, 0x04, 0xc5, + 0x01, 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, 0x00, + 0x04, 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, 0x01, + 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, 0x04, + 0xca, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xbf, 0x01, 0x00, + 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, 0x04, 0xc1, + 0x01, 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, 0x00, + 0x04, 0xc3, 0x01, 0x00, 0x00, 0x04, 0xc4, 0x01, + 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, 0x04, + 0xc6, 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, + 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, 0xc9, + 0x01, 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x7a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xcb, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x56, 0x01, + 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xcb, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x4d, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, + 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x65, 0xbe, 0x66, 0xbe, 0x67, + 0xbe, 0x68, 0xbe, 0x69, 0xbe, 0x6a, 0xbe, 0x6b, + 0xbe, 0x6c, 0xbe, 0x6d, 0xbe, 0x6e, 0xbe, 0x6f, + 0xbe, 0x70, 0x26, 0x0c, 0x00, 0x4d, 0x56, 0x01, + 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, + 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, + 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, + 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, + 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, + 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, + 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, + 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd8, + 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, + 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, + 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, 0x04, + 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, + 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, 0xe0, + 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, 0x00, + 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, 0xe3, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xe4, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x56, 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7c, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, + 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x71, 0xbe, 0x72, + 0xbe, 0x73, 0xbe, 0x74, 0xbe, 0x75, 0xbe, 0x76, + 0xbe, 0x77, 0xbe, 0x78, 0xbe, 0x79, 0xbe, 0x7a, + 0xbe, 0x7b, 0xbe, 0x7c, 0x26, 0x0c, 0x00, 0x4d, + 0x56, 0x01, 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, + 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, + 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, + 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, + 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, + 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, + 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, + 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, + 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, + 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, + 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, + 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, + 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, + 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, + 0xe3, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xe4, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0xe4, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x4d, 0x80, 0x01, + 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, + 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, + 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, + 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, + 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, + 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, + 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, + 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, + 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, + 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, + 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, + 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, + 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, + 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, + 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, + 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, + 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, + 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, + 0x04, 0x02, 0x02, 0x00, 0x00, 0x04, 0x03, 0x02, + 0x00, 0x00, 0x04, 0x04, 0x02, 0x00, 0x00, 0x26, + 0x20, 0x00, 0x04, 0x05, 0x02, 0x00, 0x00, 0x4d, + 0x20, 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, 0x00, + 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0x07, + 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, + 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, + 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, + 0x24, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, + 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0x0b, + 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, + 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, + 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, + 0x28, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, + 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0x0f, + 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, + 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, + 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, + 0x2c, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, + 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0x13, + 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, + 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, + 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, + 0x30, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, + 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0x17, + 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, + 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, + 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, + 0x34, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, + 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0x1b, + 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, + 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, + 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, + 0x38, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, + 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0x1f, + 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, + 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, + 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, + 0x3c, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, + 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x23, + 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, + 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, + 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, + 0x40, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, + 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x27, + 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, + 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, + 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, + 0x44, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, + 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x2b, + 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, + 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, + 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, + 0x48, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, + 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x2f, + 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, + 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, + 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, + 0x4c, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, + 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x33, + 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, + 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, + 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, + 0x50, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, + 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x37, + 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, + 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, + 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, + 0x54, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, + 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x3b, + 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, + 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, + 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, + 0x58, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, + 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x3f, + 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, + 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, + 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, + 0x5c, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, + 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x43, + 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, + 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, + 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, + 0x60, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, + 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x47, + 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, + 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, + 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, + 0x64, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, + 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x4b, + 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, + 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, + 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, + 0x68, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, + 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x4f, + 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, + 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, + 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, + 0x6c, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, + 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x53, + 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, + 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, + 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, + 0x70, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, + 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x57, + 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, + 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, + 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, + 0x74, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, + 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x5b, + 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, + 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, + 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, + 0x78, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, + 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x5f, + 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, + 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, + 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, + 0x7c, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, + 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x63, + 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, + 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, + 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, + 0x80, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, + 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x67, + 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, + 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, + 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, + 0x84, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, + 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x6b, + 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, + 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, + 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, + 0x88, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, + 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x6f, + 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, + 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, + 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, + 0x8c, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, + 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x73, + 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, + 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, + 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, + 0x90, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, + 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x77, + 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, + 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, + 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, + 0x94, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, + 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x7b, + 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, + 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, + 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, + 0x98, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, + 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x7f, + 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, + 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, + 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, + 0x9c, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, + 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x83, + 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, + 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, + 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, + 0xa0, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, + 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x87, + 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, + 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, + 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, + 0xa4, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, + 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x8b, + 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, + 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, + 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, + 0xa8, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, + 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x8f, + 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, + 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, + 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, + 0xac, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, + 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0x93, + 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, + 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, + 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, + 0xb0, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, + 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0x97, + 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, + 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, + 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, + 0xb4, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, + 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0x9b, + 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, + 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, + 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, + 0xb8, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, + 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0x9f, + 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, + 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, + 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, + 0xbc, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, + 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0xa3, + 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, + 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, + 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, + 0xc0, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, + 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0xa7, + 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, + 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, + 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, + 0xc4, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, + 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0xab, + 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, + 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, + 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, + 0xc8, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, + 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0xaf, + 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, + 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, + 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, + 0xcc, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, + 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0xb3, + 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, + 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, + 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, + 0xd0, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, + 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0xb7, + 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, + 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, + 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, + 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0xbb, + 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, + 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, + 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0xbf, + 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, + 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xc3, + 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, + 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xc7, + 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, + 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, + 0xe4, 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, + 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0xcb, + 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, + 0x04, 0xcc, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x80, 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, + 0xe8, 0x00, 0x00, 0x80, 0x04, 0xcd, 0x02, 0x00, + 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, + 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x80, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, + 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, + 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, + 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, + 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, + 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, + 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, + 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, + 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, + 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, + 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, + 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, + 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, + 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, + 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, + 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, + 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, + 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, + 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, + 0x04, 0x02, 0x02, 0x00, 0x00, 0x04, 0x03, 0x02, + 0x00, 0x00, 0x04, 0x04, 0x02, 0x00, 0x00, 0x26, + 0x20, 0x00, 0x04, 0x05, 0x02, 0x00, 0x00, 0x4d, + 0x20, 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, 0x00, + 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0x07, + 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, + 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, + 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, + 0x24, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, + 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0x0b, + 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, + 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, + 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, + 0x28, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, + 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0x0f, + 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, + 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, + 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, + 0x2c, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, + 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0x13, + 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, + 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, + 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, + 0x30, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, + 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0x17, + 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, + 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, + 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, + 0x34, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, + 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0x1b, + 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, + 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, + 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, + 0x38, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, + 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0x1f, + 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, + 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, + 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, + 0x3c, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, + 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x23, + 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, + 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, + 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, + 0x40, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, + 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x27, + 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, + 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, + 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, + 0x44, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, + 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x2b, + 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, + 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, + 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, + 0x48, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, + 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x2f, + 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, + 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, + 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, + 0x4c, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, + 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x33, + 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, + 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, + 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, + 0x50, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, + 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x37, + 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, + 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, + 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, + 0x54, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, + 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x3b, + 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, + 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, + 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, + 0x58, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, + 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x3f, + 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, + 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, + 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, + 0x5c, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, + 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x43, + 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, + 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, + 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, + 0x60, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, + 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x47, + 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, + 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, + 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, + 0x64, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, + 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x4b, + 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, + 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, + 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, + 0x68, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, + 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x4f, + 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, + 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, + 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, + 0x6c, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, + 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x53, + 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, + 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, + 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, + 0x70, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, + 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x57, + 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, + 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, + 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, + 0x74, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, + 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x5b, + 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, + 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, + 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, + 0x78, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, + 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x5f, + 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, + 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, + 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, + 0x7c, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, + 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x63, + 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, + 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, + 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, + 0x80, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, + 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x67, + 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, + 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, + 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, + 0x84, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, + 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x6b, + 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, + 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, + 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, + 0x88, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, + 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x6f, + 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, + 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, + 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, + 0x8c, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, + 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x73, + 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, + 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, + 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, + 0x90, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, + 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x77, + 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, + 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, + 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, + 0x94, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, + 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x7b, + 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, + 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, + 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, + 0x98, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, + 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x7f, + 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, + 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, + 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, + 0x9c, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, + 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x83, + 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, + 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, + 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, + 0xa0, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, + 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x87, + 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, + 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, + 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, + 0xa4, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, + 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x8b, + 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, + 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, + 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, + 0xa8, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, + 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x8f, + 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, + 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, + 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, + 0xac, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, + 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0x93, + 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, + 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, + 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, + 0xb0, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, + 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0x97, + 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, + 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, + 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, + 0xb4, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, + 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0x9b, + 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, + 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, + 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, + 0xb8, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, + 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0x9f, + 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, + 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, + 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, + 0xbc, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, + 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0xa3, + 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, + 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, + 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, + 0xc0, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, + 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0xa7, + 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, + 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, + 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, + 0xc4, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, + 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0xab, + 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, + 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, + 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, + 0xc8, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, + 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0xaf, + 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, + 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, + 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, + 0xcc, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, + 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0xb3, + 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, + 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, + 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, + 0xd0, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, + 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0xb7, + 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, + 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, + 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, + 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0xbb, + 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, + 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, + 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0xbf, + 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, + 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xc3, + 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, + 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xc7, + 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, + 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, + 0xe4, 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, + 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0xcb, + 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, + 0x04, 0xcc, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x80, 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, + 0xe8, 0x00, 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, + 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0xd0, + 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, + 0x04, 0xd1, 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x80, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, + 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, + 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, + 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, + 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, + 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, + 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, + 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, + 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, + 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, + 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, + 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, + 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, + 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, + 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, + 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, + 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, + 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, + 0x04, 0x02, 0x02, 0x00, 0x00, 0x04, 0x03, 0x02, + 0x00, 0x00, 0x04, 0x04, 0x02, 0x00, 0x00, 0x26, + 0x20, 0x00, 0x04, 0x05, 0x02, 0x00, 0x00, 0x4d, + 0x20, 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, 0x00, + 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0x07, + 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, + 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, + 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, + 0x24, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, + 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0x0b, + 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, + 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, + 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, + 0x28, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, + 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0x0f, + 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, + 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, + 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, + 0x2c, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, + 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0x13, + 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, + 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, + 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, + 0x30, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, + 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0x17, + 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, + 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, + 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, + 0x34, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, + 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0x1b, + 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, + 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, + 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, + 0x38, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, + 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0x1f, + 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, + 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, + 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, + 0x3c, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, + 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x23, + 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, + 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, + 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, + 0x40, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, + 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x27, + 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, + 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, + 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, + 0x44, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, + 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x2b, + 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, + 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, + 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, + 0x48, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, + 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x2f, + 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, + 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, + 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, + 0x4c, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, + 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x33, + 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, + 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, + 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, + 0x50, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, + 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x37, + 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, + 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, + 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, + 0x54, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, + 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x3b, + 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, + 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, + 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, + 0x58, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, + 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x3f, + 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, + 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, + 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, + 0x5c, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, + 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x43, + 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, + 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, + 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, + 0x60, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, + 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x47, + 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, + 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, + 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, + 0x64, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, + 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x4b, + 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, + 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, + 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, + 0x68, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, + 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x4f, + 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, + 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, + 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, + 0x6c, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, + 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x53, + 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, + 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, + 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, + 0x70, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, + 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x57, + 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, + 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, + 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, + 0x74, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, + 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x5b, + 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, + 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, + 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, + 0x78, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, + 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x5f, + 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, + 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, + 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, + 0x7c, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, + 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x63, + 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, + 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, + 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, + 0x80, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, + 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x67, + 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, + 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, + 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, + 0x84, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, + 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x6b, + 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, + 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, + 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, + 0x88, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, + 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x6f, + 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, + 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, + 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, + 0x8c, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, + 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x73, + 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, + 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, + 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, + 0x90, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, + 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x77, + 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, + 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, + 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, + 0x94, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, + 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x7b, + 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, + 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, + 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, + 0x98, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, + 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x7f, + 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, + 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, + 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, + 0x9c, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, + 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x83, + 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, + 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, + 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, + 0xa0, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, + 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x87, + 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, + 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, + 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, + 0xa4, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, + 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x8b, + 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, + 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, + 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, + 0xa8, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, + 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x8f, + 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, + 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, + 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, + 0xac, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, + 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0x93, + 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, + 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, + 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, + 0xb0, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, + 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0x97, + 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, + 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, + 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, + 0xb4, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, + 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0x9b, + 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, + 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, + 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, + 0xb8, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, + 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0x9f, + 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, + 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, + 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, + 0xbc, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, + 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0xa3, + 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, + 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, + 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, + 0xc0, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, + 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0xa7, + 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, + 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, + 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, + 0xc4, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, + 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0xab, + 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, + 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, + 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, + 0xc8, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, + 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0xaf, + 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, + 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, + 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, + 0xcc, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, + 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0xb3, + 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, + 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, + 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, + 0xd0, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, + 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0xb7, + 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, + 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, + 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, + 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0xbb, + 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, + 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, + 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0xbf, + 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, + 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xc3, + 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, + 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xc7, + 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, + 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, + 0xe4, 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, + 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0xcb, + 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, + 0x04, 0xcc, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x80, 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, + 0xe8, 0x00, 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, + 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0xd0, + 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, + 0x04, 0xd1, 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x80, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x7c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, + 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x7d, 0xbe, + 0x7e, 0xbe, 0x7f, 0xbe, 0x80, 0xbe, 0x81, 0xbe, + 0x82, 0xbe, 0x83, 0xbe, 0x84, 0xbe, 0x85, 0xbe, + 0x86, 0xbe, 0x87, 0xbe, 0x88, 0x26, 0x0c, 0x00, + 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0xd2, 0x02, + 0x00, 0x00, 0x04, 0xd3, 0x02, 0x00, 0x00, 0x04, + 0xd4, 0x02, 0x00, 0x00, 0x04, 0xd5, 0x02, 0x00, + 0x00, 0x04, 0xd6, 0x02, 0x00, 0x00, 0x04, 0xd7, + 0x02, 0x00, 0x00, 0x04, 0xd8, 0x02, 0x00, 0x00, + 0x04, 0xd9, 0x02, 0x00, 0x00, 0x04, 0xda, 0x02, + 0x00, 0x00, 0x04, 0xdb, 0x02, 0x00, 0x00, 0x04, + 0xdc, 0x02, 0x00, 0x00, 0x04, 0xdd, 0x02, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xd2, 0x02, 0x00, 0x00, 0x04, 0xd3, + 0x02, 0x00, 0x00, 0x04, 0xd4, 0x02, 0x00, 0x00, + 0x04, 0xd5, 0x02, 0x00, 0x00, 0x04, 0xd6, 0x02, + 0x00, 0x00, 0x04, 0xd7, 0x02, 0x00, 0x00, 0x04, + 0xd8, 0x02, 0x00, 0x00, 0x04, 0xd9, 0x02, 0x00, + 0x00, 0x04, 0xda, 0x02, 0x00, 0x00, 0x04, 0xdb, + 0x02, 0x00, 0x00, 0x04, 0xdc, 0x02, 0x00, 0x00, + 0x04, 0xdd, 0x02, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xde, 0x02, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, + 0xde, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xde, 0x02, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x4d, 0x80, + 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, + 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x16, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xdf, 0x02, 0x00, 0x00, 0x04, 0xe0, 0x02, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x56, 0x01, + 0x00, 0x00, 0x04, 0xdf, 0x02, 0x00, 0x00, 0x04, + 0xe0, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xdf, 0x02, 0x00, + 0x00, 0x04, 0xe0, 0x02, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7c, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, + 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x00, 0x4d, 0xe1, 0x02, 0x00, 0x00, 0x4d, + 0xe2, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xe3, 0x02, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe4, 0x02, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xe5, 0x02, 0x00, + 0x00, 0x4d, 0xe6, 0x02, 0x00, 0x00, 0x04, 0xe7, + 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x02, 0x00, 0x00, + 0x4d, 0xe9, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xea, + 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x02, 0x00, 0x00, + 0x04, 0xeb, 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x02, + 0x00, 0x00, 0x4d, 0xec, 0x02, 0x00, 0x00, 0x0b, + 0x04, 0xed, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x02, + 0x00, 0x00, 0x04, 0xee, 0x02, 0x00, 0x00, 0x4d, + 0xe8, 0x02, 0x00, 0x00, 0x4d, 0xef, 0x02, 0x00, + 0x00, 0x4d, 0xf0, 0x02, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0xf1, 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x02, + 0x00, 0x00, 0x04, 0xf2, 0x02, 0x00, 0x00, 0x4d, + 0xf3, 0x02, 0x00, 0x00, 0x04, 0xf4, 0x02, 0x00, + 0x00, 0x4d, 0xf5, 0x02, 0x00, 0x00, 0x04, 0xf6, + 0x02, 0x00, 0x00, 0x4d, 0xf7, 0x02, 0x00, 0x00, + 0x04, 0xf8, 0x02, 0x00, 0x00, 0x4d, 0xf9, 0x02, + 0x00, 0x00, 0x04, 0xfa, 0x02, 0x00, 0x00, 0x4d, + 0xfb, 0x02, 0x00, 0x00, 0x04, 0xfc, 0x02, 0x00, + 0x00, 0x4d, 0xfd, 0x02, 0x00, 0x00, 0x4d, 0xe3, + 0x02, 0x00, 0x00, 0x4d, 0xfe, 0x02, 0x00, 0x00, + 0x0b, 0x04, 0xff, 0x02, 0x00, 0x00, 0x4d, 0x00, + 0x03, 0x00, 0x00, 0x04, 0x01, 0x03, 0x00, 0x00, + 0x4d, 0x02, 0x03, 0x00, 0x00, 0x04, 0x03, 0x03, + 0x00, 0x00, 0x4d, 0x04, 0x03, 0x00, 0x00, 0x04, + 0x05, 0x03, 0x00, 0x00, 0x4d, 0x06, 0x03, 0x00, + 0x00, 0x04, 0x07, 0x03, 0x00, 0x00, 0x4d, 0x08, + 0x03, 0x00, 0x00, 0x04, 0x09, 0x03, 0x00, 0x00, + 0x4d, 0x0a, 0x03, 0x00, 0x00, 0x04, 0x0b, 0x03, + 0x00, 0x00, 0x4d, 0x0c, 0x03, 0x00, 0x00, 0x04, + 0x0d, 0x03, 0x00, 0x00, 0x4d, 0x0e, 0x03, 0x00, + 0x00, 0x04, 0x0f, 0x03, 0x00, 0x00, 0x4d, 0x10, + 0x03, 0x00, 0x00, 0x04, 0x11, 0x03, 0x00, 0x00, + 0x4d, 0x12, 0x03, 0x00, 0x00, 0x04, 0x13, 0x03, + 0x00, 0x00, 0x4d, 0x14, 0x03, 0x00, 0x00, 0x04, + 0x15, 0x03, 0x00, 0x00, 0x4d, 0x16, 0x03, 0x00, + 0x00, 0x04, 0x17, 0x03, 0x00, 0x00, 0x4d, 0x18, + 0x03, 0x00, 0x00, 0x04, 0x19, 0x03, 0x00, 0x00, + 0x4d, 0x1a, 0x03, 0x00, 0x00, 0x04, 0x1b, 0x03, + 0x00, 0x00, 0x4d, 0x1c, 0x03, 0x00, 0x00, 0x04, + 0x1d, 0x03, 0x00, 0x00, 0x4d, 0x1e, 0x03, 0x00, + 0x00, 0x04, 0x1f, 0x03, 0x00, 0x00, 0x4d, 0x20, + 0x03, 0x00, 0x00, 0x04, 0x21, 0x03, 0x00, 0x00, + 0x4d, 0x22, 0x03, 0x00, 0x00, 0x04, 0x23, 0x03, + 0x00, 0x00, 0x4d, 0x24, 0x03, 0x00, 0x00, 0x04, + 0x25, 0x03, 0x00, 0x00, 0x4d, 0x26, 0x03, 0x00, + 0x00, 0x04, 0x27, 0x03, 0x00, 0x00, 0x4d, 0x28, + 0x03, 0x00, 0x00, 0x04, 0x29, 0x03, 0x00, 0x00, + 0x4d, 0x2a, 0x03, 0x00, 0x00, 0x04, 0x2b, 0x03, + 0x00, 0x00, 0x4d, 0x2c, 0x03, 0x00, 0x00, 0x04, + 0x2d, 0x03, 0x00, 0x00, 0x4d, 0x2e, 0x03, 0x00, + 0x00, 0x04, 0x2f, 0x03, 0x00, 0x00, 0x4d, 0x30, + 0x03, 0x00, 0x00, 0x4d, 0x31, 0x03, 0x00, 0x00, + 0x4d, 0x45, 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, + 0xcc, 0x28, 0xe4, 0x0c, 0x01, 0x00, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, + 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_de_DE_size = 24924; + +const uint8_t intl_de_DE[24924] = { + 0x01, 0xe3, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x0a, 0x64, 0x65, 0x2d, 0x44, 0x45, 0x0c, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x0e, 0x67, 0x72, + 0x65, 0x67, 0x6f, 0x72, 0x79, 0x10, 0x62, 0x75, + 0x64, 0x64, 0x68, 0x69, 0x73, 0x74, 0x0e, 0x63, + 0x68, 0x69, 0x6e, 0x65, 0x73, 0x65, 0x0c, 0x63, + 0x6f, 0x70, 0x74, 0x69, 0x63, 0x0a, 0x64, 0x61, + 0x6e, 0x67, 0x69, 0x0e, 0x65, 0x74, 0x68, 0x69, + 0x6f, 0x61, 0x61, 0x10, 0x65, 0x74, 0x68, 0x69, + 0x6f, 0x70, 0x69, 0x63, 0x0e, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x69, 0x63, 0x0c, 0x68, 0x65, 0x62, + 0x72, 0x65, 0x77, 0x0c, 0x69, 0x6e, 0x64, 0x69, + 0x61, 0x6e, 0x0e, 0x69, 0x73, 0x6c, 0x61, 0x6d, + 0x69, 0x63, 0x10, 0x69, 0x73, 0x6c, 0x61, 0x6d, + 0x69, 0x63, 0x63, 0x10, 0x6a, 0x61, 0x70, 0x61, + 0x6e, 0x65, 0x73, 0x65, 0x0e, 0x70, 0x65, 0x72, + 0x73, 0x69, 0x61, 0x6e, 0x06, 0x72, 0x6f, 0x63, + 0x04, 0x63, 0x61, 0x0e, 0x68, 0x6f, 0x75, 0x72, + 0x4e, 0x6f, 0x30, 0x0c, 0x68, 0x6f, 0x75, 0x72, + 0x31, 0x32, 0x10, 0x7b, 0x31, 0x7d, 0x2c, 0x20, + 0x7b, 0x30, 0x7d, 0x0a, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x0c, 0x6d, 0x65, 0x64, 0x69, 0x75, 0x6d, + 0x18, 0x7b, 0x31, 0x7d, 0x20, 0x27, 0x75, 0x6d, + 0x27, 0x20, 0x7b, 0x30, 0x7d, 0x08, 0x66, 0x75, + 0x6c, 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x02, + 0x64, 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, 0x0a, + 0x45, 0x2c, 0x20, 0x64, 0x2e, 0x04, 0x45, 0x64, + 0x10, 0x45, 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x20, + 0x61, 0x06, 0x45, 0x68, 0x6d, 0x10, 0x45, 0x2c, + 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x06, 0x45, + 0x48, 0x6d, 0x18, 0x45, 0x2c, 0x20, 0x68, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x08, + 0x45, 0x68, 0x6d, 0x73, 0x16, 0x45, 0x2c, 0x20, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x08, 0x45, 0x48, 0x6d, 0x73, 0x06, 0x79, 0x20, + 0x47, 0x04, 0x47, 0x79, 0x0e, 0x4d, 0x4d, 0x4d, + 0x20, 0x79, 0x20, 0x47, 0x0a, 0x47, 0x79, 0x4d, + 0x4d, 0x4d, 0x14, 0x64, 0x2e, 0x20, 0x4d, 0x4d, + 0x4d, 0x20, 0x79, 0x20, 0x47, 0x0c, 0x47, 0x79, + 0x4d, 0x4d, 0x4d, 0x64, 0x1a, 0x45, 0x2c, 0x20, + 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, + 0x20, 0x47, 0x0e, 0x47, 0x79, 0x4d, 0x4d, 0x4d, + 0x45, 0x64, 0x06, 0x68, 0x20, 0x61, 0x02, 0x68, + 0x10, 0x48, 0x48, 0x20, 0x27, 0x55, 0x68, 0x72, + 0x27, 0x02, 0x48, 0x0c, 0x68, 0x3a, 0x6d, 0x6d, + 0x20, 0x61, 0x04, 0x68, 0x6d, 0x0a, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x04, 0x48, 0x6d, 0x12, 0x68, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, + 0x06, 0x68, 0x6d, 0x73, 0x10, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x06, 0x48, 0x6d, + 0x73, 0x16, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x61, 0x20, 0x76, 0x08, 0x68, 0x6d, + 0x73, 0x76, 0x14, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x76, 0x08, 0x48, 0x6d, + 0x73, 0x76, 0x10, 0x68, 0x3a, 0x6d, 0x6d, 0x20, + 0x61, 0x20, 0x76, 0x06, 0x68, 0x6d, 0x76, 0x0e, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x20, 0x76, 0x06, + 0x48, 0x6d, 0x76, 0x02, 0x4c, 0x02, 0x4d, 0x08, + 0x64, 0x2e, 0x4d, 0x2e, 0x04, 0x4d, 0x64, 0x0e, + 0x45, 0x2c, 0x20, 0x64, 0x2e, 0x4d, 0x2e, 0x06, + 0x4d, 0x45, 0x64, 0x0a, 0x64, 0x2e, 0x4d, 0x4d, + 0x2e, 0x06, 0x4d, 0x4d, 0x64, 0x0c, 0x64, 0x64, + 0x2e, 0x4d, 0x4d, 0x2e, 0x08, 0x4d, 0x4d, 0x64, + 0x64, 0x06, 0x4c, 0x4c, 0x4c, 0x06, 0x4d, 0x4d, + 0x4d, 0x0c, 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, + 0x08, 0x4d, 0x4d, 0x4d, 0x64, 0x12, 0x45, 0x2c, + 0x20, 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x0a, + 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0e, 0x64, 0x2e, + 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, + 0x4d, 0x4d, 0x64, 0x14, 0x45, 0x2c, 0x20, 0x64, + 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x0c, 0x4d, + 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x04, 0x6d, 0x73, 0x02, 0x79, + 0x06, 0x4d, 0x2e, 0x79, 0x04, 0x79, 0x4d, 0x0a, + 0x64, 0x2e, 0x4d, 0x2e, 0x79, 0x06, 0x79, 0x4d, + 0x64, 0x10, 0x45, 0x2c, 0x20, 0x64, 0x2e, 0x4d, + 0x2e, 0x79, 0x08, 0x79, 0x4d, 0x45, 0x64, 0x08, + 0x4d, 0x4d, 0x2e, 0x79, 0x06, 0x79, 0x4d, 0x4d, + 0x0e, 0x64, 0x64, 0x2e, 0x4d, 0x4d, 0x2e, 0x79, + 0x0a, 0x79, 0x4d, 0x4d, 0x64, 0x64, 0x0a, 0x4d, + 0x4d, 0x4d, 0x20, 0x79, 0x08, 0x79, 0x4d, 0x4d, + 0x4d, 0x10, 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, + 0x20, 0x79, 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x64, + 0x16, 0x45, 0x2c, 0x20, 0x64, 0x2e, 0x20, 0x4d, + 0x4d, 0x4d, 0x20, 0x79, 0x0c, 0x79, 0x4d, 0x4d, + 0x4d, 0x45, 0x64, 0x0c, 0x4d, 0x4d, 0x4d, 0x4d, + 0x20, 0x79, 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, + 0x0a, 0x51, 0x51, 0x51, 0x20, 0x79, 0x08, 0x79, + 0x51, 0x51, 0x51, 0x0c, 0x51, 0x51, 0x51, 0x51, + 0x20, 0x79, 0x0a, 0x79, 0x51, 0x51, 0x51, 0x51, + 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, + 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x73, 0x1e, 0x45, 0x45, 0x45, 0x45, 0x2c, 0x20, + 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, + 0x79, 0x14, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x45, + 0x45, 0x45, 0x45, 0x64, 0x12, 0x64, 0x2e, 0x20, + 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0c, 0x79, + 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x10, 0x64, 0x64, + 0x2e, 0x4d, 0x4d, 0x2e, 0x79, 0x79, 0x16, 0x64, + 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x73, 0x1a, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x7a, 0x7a, 0x7a, 0x7a, + 0x12, 0x68, 0x6d, 0x6d, 0x73, 0x73, 0x7a, 0x7a, + 0x7a, 0x7a, 0x14, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x7a, 0x08, 0x68, 0x6d, + 0x73, 0x7a, 0x16, 0x74, 0x69, 0x6d, 0x65, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x0e, 0x66, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x02, 0x4a, + 0x02, 0x46, 0x02, 0x41, 0x02, 0x53, 0x02, 0x4f, + 0x02, 0x4e, 0x02, 0x44, 0x0c, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x08, 0x4a, 0x61, 0x6e, 0x2e, + 0x08, 0x46, 0x65, 0x62, 0x2e, 0x08, 0x4d, 0xe4, + 0x72, 0x7a, 0x08, 0x41, 0x70, 0x72, 0x2e, 0x06, + 0x4d, 0x61, 0x69, 0x08, 0x4a, 0x75, 0x6e, 0x69, + 0x08, 0x4a, 0x75, 0x6c, 0x69, 0x08, 0x41, 0x75, + 0x67, 0x2e, 0x08, 0x53, 0x65, 0x70, 0x2e, 0x08, + 0x4f, 0x6b, 0x74, 0x2e, 0x08, 0x4e, 0x6f, 0x76, + 0x2e, 0x08, 0x44, 0x65, 0x7a, 0x2e, 0x0c, 0x4a, + 0x61, 0x6e, 0x75, 0x61, 0x72, 0x0e, 0x46, 0x65, + 0x62, 0x72, 0x75, 0x61, 0x72, 0x0a, 0x41, 0x70, + 0x72, 0x69, 0x6c, 0x0c, 0x41, 0x75, 0x67, 0x75, + 0x73, 0x74, 0x12, 0x53, 0x65, 0x70, 0x74, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x0e, 0x4f, 0x6b, 0x74, + 0x6f, 0x62, 0x65, 0x72, 0x10, 0x4e, 0x6f, 0x76, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x10, 0x44, 0x65, + 0x7a, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x0c, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x73, 0x06, 0x53, 0x6f, + 0x2e, 0x06, 0x4d, 0x6f, 0x2e, 0x06, 0x44, 0x69, + 0x2e, 0x06, 0x4d, 0x69, 0x2e, 0x06, 0x44, 0x6f, + 0x2e, 0x06, 0x46, 0x72, 0x2e, 0x06, 0x53, 0x61, + 0x2e, 0x0e, 0x53, 0x6f, 0x6e, 0x6e, 0x74, 0x61, + 0x67, 0x0c, 0x4d, 0x6f, 0x6e, 0x74, 0x61, 0x67, + 0x10, 0x44, 0x69, 0x65, 0x6e, 0x73, 0x74, 0x61, + 0x67, 0x10, 0x4d, 0x69, 0x74, 0x74, 0x77, 0x6f, + 0x63, 0x68, 0x14, 0x44, 0x6f, 0x6e, 0x6e, 0x65, + 0x72, 0x73, 0x74, 0x61, 0x67, 0x0e, 0x46, 0x72, + 0x65, 0x69, 0x74, 0x61, 0x67, 0x0e, 0x53, 0x61, + 0x6d, 0x73, 0x74, 0x61, 0x67, 0x08, 0x64, 0x61, + 0x79, 0x73, 0x04, 0x42, 0x45, 0x08, 0x65, 0x72, + 0x61, 0x73, 0x0a, 0x76, 0x6f, 0x72, 0x6d, 0x2e, + 0x04, 0x61, 0x6d, 0x0c, 0x6e, 0x61, 0x63, 0x68, + 0x6d, 0x2e, 0x04, 0x70, 0x6d, 0x14, 0x64, 0x61, + 0x79, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x73, + 0x06, 0x4d, 0x30, 0x31, 0x06, 0x4d, 0x30, 0x32, + 0x06, 0x4d, 0x30, 0x33, 0x06, 0x4d, 0x30, 0x34, + 0x06, 0x4d, 0x30, 0x35, 0x06, 0x4d, 0x30, 0x36, + 0x06, 0x4d, 0x30, 0x37, 0x06, 0x4d, 0x30, 0x38, + 0x06, 0x4d, 0x30, 0x39, 0x06, 0x4d, 0x31, 0x30, + 0x06, 0x4d, 0x31, 0x31, 0x06, 0x4d, 0x31, 0x32, + 0x08, 0x54, 0x6f, 0x75, 0x74, 0x08, 0x42, 0x61, + 0x62, 0x61, 0x0a, 0x48, 0x61, 0x74, 0x6f, 0x72, + 0x0a, 0x4b, 0x69, 0x61, 0x68, 0x6b, 0x08, 0x54, + 0x6f, 0x62, 0x61, 0x0c, 0x41, 0x6d, 0x73, 0x68, + 0x69, 0x72, 0x10, 0x42, 0x61, 0x72, 0x61, 0x6d, + 0x68, 0x61, 0x74, 0x12, 0x42, 0x61, 0x72, 0x61, + 0x6d, 0x6f, 0x75, 0x64, 0x61, 0x0e, 0x42, 0x61, + 0x73, 0x68, 0x61, 0x6e, 0x73, 0x0a, 0x50, 0x61, + 0x6f, 0x6e, 0x61, 0x08, 0x45, 0x70, 0x65, 0x70, + 0x0a, 0x4d, 0x65, 0x73, 0x72, 0x61, 0x0a, 0x4e, + 0x61, 0x73, 0x69, 0x65, 0x08, 0x45, 0x52, 0x41, + 0x30, 0x08, 0x45, 0x52, 0x41, 0x31, 0x10, 0x4d, + 0x65, 0x73, 0x6b, 0x65, 0x72, 0x65, 0x6d, 0x0c, + 0x54, 0x65, 0x6b, 0x65, 0x6d, 0x74, 0x0a, 0x48, + 0x65, 0x64, 0x61, 0x72, 0x0c, 0x54, 0x61, 0x68, + 0x73, 0x61, 0x73, 0x06, 0x54, 0x65, 0x72, 0x0e, + 0x59, 0x65, 0x6b, 0x61, 0x74, 0x69, 0x74, 0x0e, + 0x4d, 0x65, 0x67, 0x61, 0x62, 0x69, 0x74, 0x0c, + 0x4d, 0x69, 0x61, 0x7a, 0x69, 0x61, 0x0c, 0x47, + 0x65, 0x6e, 0x62, 0x6f, 0x74, 0x08, 0x53, 0x65, + 0x6e, 0x65, 0x0a, 0x48, 0x61, 0x6d, 0x6c, 0x65, + 0x0e, 0x4e, 0x65, 0x68, 0x61, 0x73, 0x73, 0x65, + 0x0e, 0x50, 0x61, 0x67, 0x75, 0x6d, 0x65, 0x6e, + 0x0e, 0x76, 0x2e, 0x20, 0x43, 0x68, 0x72, 0x2e, + 0x0e, 0x6e, 0x2e, 0x20, 0x43, 0x68, 0x72, 0x2e, + 0x10, 0x76, 0x2e, 0x20, 0x75, 0x2e, 0x20, 0x5a, + 0x2e, 0x0a, 0x75, 0x2e, 0x20, 0x5a, 0x2e, 0x30, + 0x76, 0x6f, 0x72, 0x20, 0x75, 0x6e, 0x73, 0x65, + 0x72, 0x65, 0x72, 0x20, 0x5a, 0x65, 0x69, 0x74, + 0x72, 0x65, 0x63, 0x68, 0x6e, 0x75, 0x6e, 0x67, + 0x28, 0x75, 0x6e, 0x73, 0x65, 0x72, 0x65, 0x72, + 0x20, 0x5a, 0x65, 0x69, 0x74, 0x72, 0x65, 0x63, + 0x68, 0x6e, 0x75, 0x6e, 0x67, 0x0c, 0x54, 0x69, + 0x73, 0x68, 0x72, 0x69, 0x0e, 0x48, 0x65, 0x73, + 0x68, 0x76, 0x61, 0x6e, 0x0c, 0x4b, 0x69, 0x73, + 0x6c, 0x65, 0x76, 0x0a, 0x54, 0x65, 0x76, 0x65, + 0x74, 0x0c, 0x53, 0x68, 0x65, 0x76, 0x61, 0x74, + 0x0c, 0x41, 0x64, 0x61, 0x72, 0x20, 0x49, 0x08, + 0x41, 0x64, 0x61, 0x72, 0x0a, 0x4e, 0x69, 0x73, + 0x61, 0x6e, 0x08, 0x49, 0x79, 0x61, 0x72, 0x0a, + 0x53, 0x69, 0x76, 0x61, 0x6e, 0x0a, 0x54, 0x61, + 0x6d, 0x75, 0x7a, 0x04, 0x41, 0x76, 0x08, 0x45, + 0x6c, 0x75, 0x6c, 0x0e, 0x41, 0x64, 0x61, 0x72, + 0x20, 0x49, 0x49, 0x04, 0x41, 0x4d, 0x0e, 0x43, + 0x68, 0x61, 0x69, 0x74, 0x72, 0x61, 0x10, 0x56, + 0x61, 0x69, 0x73, 0x61, 0x6b, 0x68, 0x61, 0x10, + 0x4a, 0x79, 0x61, 0x69, 0x73, 0x74, 0x68, 0x61, + 0x0c, 0x41, 0x73, 0x61, 0x64, 0x68, 0x61, 0x0e, + 0x53, 0x72, 0x61, 0x76, 0x61, 0x6e, 0x61, 0x0c, + 0x42, 0x68, 0x61, 0x64, 0x72, 0x61, 0x0c, 0x41, + 0x73, 0x76, 0x69, 0x6e, 0x61, 0x0e, 0x4b, 0x61, + 0x72, 0x74, 0x69, 0x6b, 0x61, 0x14, 0x41, 0x67, + 0x72, 0x61, 0x68, 0x61, 0x79, 0x61, 0x6e, 0x61, + 0x0a, 0x50, 0x61, 0x75, 0x73, 0x61, 0x0a, 0x4d, + 0x61, 0x67, 0x68, 0x61, 0x10, 0x50, 0x68, 0x61, + 0x6c, 0x67, 0x75, 0x6e, 0x61, 0x08, 0x53, 0x61, + 0x6b, 0x61, 0x08, 0x4d, 0x75, 0x68, 0x2e, 0x08, + 0x53, 0x61, 0x66, 0x2e, 0x0c, 0x52, 0x61, 0x62, + 0x2e, 0x20, 0x49, 0x0e, 0x52, 0x61, 0x62, 0x2e, + 0x20, 0x49, 0x49, 0x0c, 0x4a, 0x75, 0x6d, 0x2e, + 0x20, 0x49, 0x0e, 0x4a, 0x75, 0x6d, 0x2e, 0x20, + 0x49, 0x49, 0x08, 0x52, 0x61, 0x6a, 0x2e, 0x08, + 0x53, 0x68, 0x61, 0x2e, 0x08, 0x52, 0x61, 0x6d, + 0x2e, 0x0a, 0x53, 0x68, 0x61, 0x77, 0x2e, 0x11, + 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, + 0x6c, 0x00, 0x2d, 0x00, 0x51, 0x00, 0x2e, 0x00, + 0x11, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, + 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x48, 0x00, 0x2e, + 0x00, 0x10, 0x4d, 0x75, 0x68, 0x61, 0x72, 0x72, + 0x61, 0x6d, 0x0a, 0x53, 0x61, 0x66, 0x61, 0x72, + 0x0f, 0x52, 0x00, 0x61, 0x00, 0x62, 0x00, 0x69, + 0x00, 0xbb, 0x02, 0x20, 0x00, 0x49, 0x00, 0x11, + 0x52, 0x00, 0x61, 0x00, 0x62, 0x00, 0x69, 0x00, + 0xbb, 0x02, 0x20, 0x00, 0x49, 0x00, 0x49, 0x00, + 0x10, 0x4a, 0x75, 0x6d, 0x61, 0x64, 0x61, 0x20, + 0x49, 0x12, 0x4a, 0x75, 0x6d, 0x61, 0x64, 0x61, + 0x20, 0x49, 0x49, 0x0a, 0x52, 0x61, 0x6a, 0x61, + 0x62, 0x0f, 0x53, 0x00, 0x68, 0x00, 0x61, 0x00, + 0xbb, 0x02, 0x62, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x0e, 0x52, 0x61, 0x6d, 0x61, 0x64, 0x61, 0x6e, + 0x0e, 0x53, 0x68, 0x61, 0x77, 0x77, 0x61, 0x6c, + 0x19, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, + 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x51, 0x00, 0x69, + 0x00, 0xbb, 0x02, 0x64, 0x00, 0x61, 0x00, 0x68, + 0x00, 0x19, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, + 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x48, 0x00, + 0x69, 0x00, 0x6a, 0x00, 0x6a, 0x00, 0x61, 0x00, + 0x68, 0x00, 0x04, 0x41, 0x48, 0x1f, 0x54, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x36, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x13, 0x20, 0x36, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x21, 0x53, 0x00, 0x68, 0x00, 0x75, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1f, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, + 0x57, 0x00, 0x61, 0x00, 0x64, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x1f, 0x52, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x1d, 0x59, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1f, 0x4a, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6b, + 0x00, 0x61, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x2d, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x2d, 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x2b, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x2d, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x2a, 0x4a, 0x69, 0x6e, 0x67, 0x6f, + 0x2d, 0x6b, 0x65, 0x69, 0x75, 0x6e, 0x20, 0x28, + 0x37, 0x36, 0x37, 0x2d, 0x37, 0x37, 0x30, 0x29, + 0x1d, 0x48, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x37, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, + 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, 0x64, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, 0x4b, + 0x00, 0x4d, 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x38, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4a, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x61, 0x00, + 0x6a, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, + 0x53, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x20, 0x54, + 0x65, 0x6e, 0x2d, 0x61, 0x6e, 0x20, 0x28, 0x38, + 0x35, 0x37, 0x2d, 0x38, 0x35, 0x39, 0x29, 0x1f, + 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x47, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, + 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1d, 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, + 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x34, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1b, 0x4c, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, + 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x1d, 0x41, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x1d, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x4a, 0x00, 0x69, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x29, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x27, 0x4a, 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, + 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4c, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x61, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x25, 0x4a, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x24, 0x54, 0x65, 0x6e, 0x2d, 0x65, + 0x69, 0x20, 0x28, 0x31, 0x31, 0x31, 0x30, 0x2d, + 0x31, 0x31, 0x31, 0x33, 0x29, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, + 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x4d, 0x01, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x45, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x6a, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x48, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, + 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4c, + 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6d, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x4a, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x59, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x75, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x29, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x29, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x4a, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x21, 0x4a, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x27, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x75, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x29, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x74, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x29, 0x52, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x4e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, + 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x61, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, + 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x27, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x45, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, 0x69, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x27, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x27, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x61, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x41, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x4d, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x02, 0x54, 0x0a, 0x4d, 0x65, 0x69, 0x6a, 0x69, + 0x0d, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x0b, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x0c, 0x48, 0x65, 0x69, 0x73, 0x65, 0x69, 0x12, + 0x46, 0x61, 0x72, 0x76, 0x61, 0x72, 0x64, 0x69, + 0x6e, 0x16, 0x4f, 0x72, 0x64, 0x69, 0x62, 0x65, + 0x68, 0x65, 0x73, 0x68, 0x74, 0x0e, 0x4b, 0x68, + 0x6f, 0x72, 0x64, 0x61, 0x64, 0x06, 0x54, 0x69, + 0x72, 0x0c, 0x4d, 0x6f, 0x72, 0x64, 0x61, 0x64, + 0x12, 0x53, 0x68, 0x61, 0x68, 0x72, 0x69, 0x76, + 0x61, 0x72, 0x08, 0x4d, 0x65, 0x68, 0x72, 0x08, + 0x41, 0x62, 0x61, 0x6e, 0x08, 0x41, 0x7a, 0x61, + 0x72, 0x06, 0x44, 0x65, 0x79, 0x0c, 0x42, 0x61, + 0x68, 0x6d, 0x61, 0x6e, 0x0c, 0x45, 0x73, 0x66, + 0x61, 0x6e, 0x64, 0x04, 0x41, 0x50, 0x1a, 0x42, + 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x52, 0x2e, + 0x4f, 0x2e, 0x43, 0x2e, 0x0c, 0x4d, 0x69, 0x6e, + 0x67, 0x75, 0x6f, 0x12, 0x63, 0x61, 0x6c, 0x65, + 0x6e, 0x64, 0x61, 0x72, 0x73, 0x08, 0x64, 0x61, + 0x74, 0x65, 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, + 0x6e, 0x75, 0x10, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0x1e, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, + 0x65, 0x72, 0x6e, 0x26, 0x7b, 0x6d, 0x69, 0x6e, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, + 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x0e, + 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x26, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0xa0, 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x79, 0x7d, 0x3c, 0x7b, 0x6d, 0x69, 0x6e, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0xa0, + 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, + 0x79, 0x7d, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x63, 0x79, 0x2c, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0xa0, 0x7b, 0x70, 0x65, + 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, + 0x6e, 0x7d, 0x42, 0x7b, 0x6d, 0x69, 0x6e, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0xa0, 0x7b, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x0e, 0x70, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x10, 0x70, 0x61, 0x74, + 0x74, 0x65, 0x72, 0x6e, 0x73, 0x02, 0x2c, 0x02, + 0x2e, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x06, + 0x4e, 0x61, 0x4e, 0x06, 0x6e, 0x61, 0x6e, 0x02, + 0x2b, 0x10, 0x70, 0x6c, 0x75, 0x73, 0x53, 0x69, + 0x67, 0x6e, 0x02, 0x2d, 0x12, 0x6d, 0x69, 0x6e, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, 0x25, + 0x16, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, + 0x53, 0x69, 0x67, 0x6e, 0x03, 0x1e, 0x22, 0x10, + 0x69, 0x6e, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, + 0x0e, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, + 0x04, 0xf6, 0x53, 0x06, 0x41, 0x54, 0x53, 0x06, + 0x41, 0x55, 0x24, 0x06, 0x41, 0x55, 0x44, 0x06, + 0x42, 0x47, 0x4b, 0x06, 0x42, 0x47, 0x4d, 0x06, + 0x42, 0x47, 0x4a, 0x06, 0x42, 0x47, 0x4f, 0x04, + 0x52, 0x24, 0x06, 0x42, 0x52, 0x4c, 0x06, 0x43, + 0x41, 0x24, 0x06, 0x43, 0x41, 0x44, 0x06, 0x43, + 0x4e, 0xa5, 0x06, 0x43, 0x4e, 0x59, 0x04, 0x44, + 0x4d, 0x06, 0x44, 0x45, 0x4d, 0x03, 0xac, 0x20, + 0x06, 0x45, 0x55, 0x52, 0x02, 0xa3, 0x06, 0x47, + 0x42, 0x50, 0x06, 0x48, 0x4b, 0x24, 0x06, 0x48, + 0x4b, 0x44, 0x03, 0xaa, 0x20, 0x06, 0x49, 0x4c, + 0x53, 0x03, 0xb9, 0x20, 0x06, 0x49, 0x4e, 0x52, + 0x02, 0xa5, 0x06, 0x4a, 0x50, 0x59, 0x03, 0xa9, + 0x20, 0x06, 0x4b, 0x52, 0x57, 0x06, 0x4d, 0x58, + 0x24, 0x06, 0x4d, 0x58, 0x4e, 0x06, 0x4e, 0x5a, + 0x24, 0x06, 0x4e, 0x5a, 0x44, 0x03, 0x3f, 0x0e, + 0x06, 0x54, 0x48, 0x42, 0x06, 0x4e, 0x54, 0x24, + 0x06, 0x54, 0x57, 0x44, 0x02, 0x24, 0x06, 0x55, + 0x53, 0x44, 0x03, 0xab, 0x20, 0x06, 0x56, 0x4e, + 0x44, 0x08, 0x46, 0x43, 0x46, 0x41, 0x06, 0x58, + 0x41, 0x46, 0x06, 0x45, 0x43, 0x24, 0x06, 0x58, + 0x43, 0x44, 0x06, 0x43, 0x46, 0x41, 0x06, 0x58, + 0x4f, 0x46, 0x08, 0x43, 0x46, 0x50, 0x46, 0x06, + 0x58, 0x50, 0x46, 0x14, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x58, 0x6e, + 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, + 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, + 0x64, 0x61, 0x74, 0x61, 0x2f, 0x6a, 0x73, 0x6f, + 0x6e, 0x70, 0x2f, 0x64, 0x65, 0x2d, 0x44, 0x45, + 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, + 0x01, 0x00, 0x01, 0x00, 0x27, 0x00, 0x89, 0x01, + 0xb8, 0x6b, 0x01, 0xa0, 0x01, 0x00, 0x00, 0x00, + 0x39, 0xd0, 0x00, 0x00, 0x00, 0x43, 0xd1, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd2, 0x00, 0x00, 0x00, + 0x4d, 0xd3, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd4, + 0x00, 0x00, 0x00, 0x04, 0xd5, 0x00, 0x00, 0x00, + 0x04, 0xd6, 0x00, 0x00, 0x00, 0x04, 0xd7, 0x00, + 0x00, 0x00, 0x04, 0xd8, 0x00, 0x00, 0x00, 0x04, + 0xd9, 0x00, 0x00, 0x00, 0x04, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xdb, 0x00, 0x00, 0x00, 0x04, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, + 0x04, 0xde, 0x00, 0x00, 0x00, 0x04, 0xdf, 0x00, + 0x00, 0x00, 0x04, 0xe0, 0x00, 0x00, 0x00, 0x04, + 0xe1, 0x00, 0x00, 0x00, 0x04, 0xe2, 0x00, 0x00, + 0x00, 0x26, 0x0f, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x00, 0x0a, 0x4d, 0xe4, 0x00, 0x00, 0x00, 0x09, + 0x4d, 0xe5, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, + 0x00, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe8, 0x00, + 0x00, 0x00, 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x04, 0xe9, 0x00, 0x00, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xec, 0x00, 0x00, 0x00, 0x4d, 0xec, 0x00, 0x00, + 0x00, 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, 0xee, + 0x00, 0x00, 0x00, 0x04, 0xef, 0x00, 0x00, 0x00, + 0x4d, 0xf0, 0x00, 0x00, 0x00, 0x04, 0xf1, 0x00, + 0x00, 0x00, 0x4d, 0xf2, 0x00, 0x00, 0x00, 0x04, + 0xf3, 0x00, 0x00, 0x00, 0x4d, 0xf4, 0x00, 0x00, + 0x00, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0xf6, + 0x00, 0x00, 0x00, 0x04, 0xf7, 0x00, 0x00, 0x00, + 0x4d, 0xf8, 0x00, 0x00, 0x00, 0x04, 0xf9, 0x00, + 0x00, 0x00, 0x4d, 0xfa, 0x00, 0x00, 0x00, 0x04, + 0xfb, 0x00, 0x00, 0x00, 0x4d, 0xfc, 0x00, 0x00, + 0x00, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, 0xfe, + 0x00, 0x00, 0x00, 0x04, 0xff, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x01, 0x00, 0x00, 0x04, 0x01, 0x01, + 0x00, 0x00, 0x4d, 0x02, 0x01, 0x00, 0x00, 0x04, + 0x03, 0x01, 0x00, 0x00, 0x4d, 0x04, 0x01, 0x00, + 0x00, 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, 0x06, + 0x01, 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, 0x00, + 0x4d, 0x08, 0x01, 0x00, 0x00, 0x04, 0x09, 0x01, + 0x00, 0x00, 0x4d, 0x0a, 0x01, 0x00, 0x00, 0x04, + 0x0b, 0x01, 0x00, 0x00, 0x4d, 0x0c, 0x01, 0x00, + 0x00, 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, 0x0e, + 0x01, 0x00, 0x00, 0x04, 0x0f, 0x01, 0x00, 0x00, + 0x4d, 0x10, 0x01, 0x00, 0x00, 0x04, 0x11, 0x01, + 0x00, 0x00, 0x4d, 0x12, 0x01, 0x00, 0x00, 0x04, + 0x13, 0x01, 0x00, 0x00, 0x4d, 0x14, 0x01, 0x00, + 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, 0x16, + 0x01, 0x00, 0x00, 0x04, 0x17, 0x01, 0x00, 0x00, + 0x4d, 0x18, 0x01, 0x00, 0x00, 0x04, 0x19, 0x01, + 0x00, 0x00, 0x4d, 0x1a, 0x01, 0x00, 0x00, 0x04, + 0x1b, 0x01, 0x00, 0x00, 0x4d, 0x1c, 0x01, 0x00, + 0x00, 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, 0x1e, + 0x01, 0x00, 0x00, 0x04, 0x1f, 0x01, 0x00, 0x00, + 0x4d, 0x20, 0x01, 0x00, 0x00, 0x04, 0x21, 0x01, + 0x00, 0x00, 0x4d, 0x22, 0x01, 0x00, 0x00, 0x04, + 0x23, 0x01, 0x00, 0x00, 0x4d, 0x24, 0x01, 0x00, + 0x00, 0x04, 0x25, 0x01, 0x00, 0x00, 0x4d, 0x26, + 0x01, 0x00, 0x00, 0x04, 0x27, 0x01, 0x00, 0x00, + 0x4d, 0x28, 0x01, 0x00, 0x00, 0x04, 0x29, 0x01, + 0x00, 0x00, 0x4d, 0x2a, 0x01, 0x00, 0x00, 0x04, + 0x2b, 0x01, 0x00, 0x00, 0x4d, 0x2b, 0x01, 0x00, + 0x00, 0x04, 0x2c, 0x01, 0x00, 0x00, 0x4d, 0x2d, + 0x01, 0x00, 0x00, 0x04, 0x2e, 0x01, 0x00, 0x00, + 0x4d, 0x2f, 0x01, 0x00, 0x00, 0x04, 0x30, 0x01, + 0x00, 0x00, 0x4d, 0x31, 0x01, 0x00, 0x00, 0x04, + 0x32, 0x01, 0x00, 0x00, 0x4d, 0x33, 0x01, 0x00, + 0x00, 0x04, 0x34, 0x01, 0x00, 0x00, 0x4d, 0x35, + 0x01, 0x00, 0x00, 0x04, 0x36, 0x01, 0x00, 0x00, + 0x4d, 0x37, 0x01, 0x00, 0x00, 0x04, 0x38, 0x01, + 0x00, 0x00, 0x4d, 0x39, 0x01, 0x00, 0x00, 0x04, + 0x3a, 0x01, 0x00, 0x00, 0x4d, 0x3b, 0x01, 0x00, + 0x00, 0x04, 0x3c, 0x01, 0x00, 0x00, 0x4d, 0x3d, + 0x01, 0x00, 0x00, 0x04, 0x3e, 0x01, 0x00, 0x00, + 0x4d, 0x3f, 0x01, 0x00, 0x00, 0x04, 0x40, 0x01, + 0x00, 0x00, 0x4d, 0x41, 0x01, 0x00, 0x00, 0x4d, + 0x42, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x43, 0x01, + 0x00, 0x00, 0x4d, 0x44, 0x01, 0x00, 0x00, 0x04, + 0x45, 0x01, 0x00, 0x00, 0x4d, 0x46, 0x01, 0x00, + 0x00, 0x04, 0x34, 0x01, 0x00, 0x00, 0x4d, 0x39, + 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x4d, 0x2f, 0x01, 0x00, 0x00, 0x4d, 0x48, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x0b, 0x01, 0x00, 0x00, 0x4d, 0x0a, 0x01, 0x00, + 0x00, 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0x06, + 0x01, 0x00, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, + 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x0b, + 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, + 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x4d, 0x80, 0x01, + 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, + 0xd5, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x00, + 0xbe, 0x01, 0xbe, 0x02, 0xbe, 0x03, 0xbe, 0x04, + 0xbe, 0x05, 0xbe, 0x06, 0xbe, 0x07, 0xbe, 0x08, + 0xbe, 0x09, 0xbe, 0x0a, 0xbe, 0x0b, 0x26, 0x0c, + 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, + 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, + 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, + 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, + 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, + 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, + 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, + 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, + 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, + 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6b, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7a, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, 0x4d, + 0x81, 0x01, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x0c, 0xbe, 0x0d, 0xbe, + 0x0e, 0xbe, 0x0f, 0xbe, 0x10, 0xbe, 0x11, 0xbe, + 0x12, 0xbe, 0x13, 0xbe, 0x14, 0xbe, 0x15, 0xbe, + 0x16, 0xbe, 0x17, 0xbe, 0x18, 0x26, 0x0d, 0x00, + 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, + 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, + 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, + 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, + 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, + 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, + 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, + 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, + 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x26, 0x0d, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x8e, + 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, + 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, + 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, + 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, + 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, + 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, + 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, + 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7a, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x9b, 0x01, 0x00, + 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0x9b, + 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x4d, + 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, + 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x19, 0xbe, 0x1a, 0xbe, 0x1b, 0xbe, 0x1c, + 0xbe, 0x1d, 0xbe, 0x1e, 0xbe, 0x1f, 0xbe, 0x20, + 0xbe, 0x21, 0xbe, 0x22, 0xbe, 0x23, 0xbe, 0x24, + 0x26, 0x0c, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, + 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, + 0x8d, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, + 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, + 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, + 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x7a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, + 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x25, 0xbe, + 0x26, 0xbe, 0x27, 0xbe, 0x28, 0xbe, 0x29, 0xbe, + 0x2a, 0xbe, 0x2b, 0xbe, 0x2c, 0xbe, 0x2d, 0xbe, + 0x2e, 0xbe, 0x2f, 0xbe, 0x30, 0xbe, 0x31, 0x26, + 0x0d, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, + 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, + 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, + 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, + 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, + 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, + 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, + 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, + 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, + 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, + 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, + 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, + 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, + 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, + 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x16, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x9b, + 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, + 0x9c, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x4d, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x32, 0xbe, 0x33, 0xbe, 0x34, + 0xbe, 0x35, 0xbe, 0x36, 0xbe, 0x37, 0xbe, 0x38, + 0xbe, 0x39, 0xbe, 0x3a, 0xbe, 0x3b, 0xbe, 0x3c, + 0xbe, 0x3d, 0xbe, 0x3e, 0x26, 0x0d, 0x00, 0x4d, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, + 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, + 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, + 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, + 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, + 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, + 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, + 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, + 0x04, 0xa9, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x9d, 0x01, + 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, + 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, + 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, + 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, + 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, + 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, + 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, + 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x26, 0x0d, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6b, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7a, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x9b, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x9b, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x9b, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x4d, + 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, + 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x3f, 0xbe, 0x40, 0xbe, 0x41, 0xbe, 0x42, + 0xbe, 0x43, 0xbe, 0x44, 0xbe, 0x45, 0xbe, 0x46, + 0xbe, 0x47, 0xbe, 0x48, 0xbe, 0x49, 0xbe, 0x4a, + 0x26, 0x0c, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, + 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, + 0x8d, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, + 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, + 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, + 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x7a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x9b, 0x01, + 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, + 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, + 0x4d, 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, + 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, + 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, 0x26, 0x04, + 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0xaa, + 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, + 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, + 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, + 0xab, 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, + 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, 0x26, 0x04, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7c, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, + 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, 0xd4, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x4b, 0xbe, 0x4c, + 0xbe, 0x4d, 0xbe, 0x4e, 0xbe, 0x4f, 0xbe, 0x50, + 0xbe, 0x51, 0xbe, 0x52, 0xbe, 0x53, 0xbe, 0x54, + 0xbe, 0x55, 0xbe, 0x56, 0xbe, 0x57, 0xbe, 0x58, + 0x26, 0x0e, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, + 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, + 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, + 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, 0x04, 0xb6, + 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, + 0x04, 0xb8, 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, + 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, 0x04, + 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, + 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, 0x26, 0x0e, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xb0, + 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, + 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, + 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, 0x00, 0x04, + 0xb5, 0x01, 0x00, 0x00, 0x04, 0xb6, 0x01, 0x00, + 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, + 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, + 0x04, 0xba, 0x01, 0x00, 0x00, 0x04, 0xbb, 0x01, + 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, 0x04, + 0xbd, 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xbe, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0xbe, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x4d, 0x80, 0x01, + 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x59, + 0xbe, 0x5a, 0xbe, 0x5b, 0xbe, 0x5c, 0xbe, 0x5d, + 0xbe, 0x5e, 0xbe, 0x5f, 0xbe, 0x60, 0xbe, 0x61, + 0xbe, 0x62, 0xbe, 0x63, 0xbe, 0x64, 0x26, 0x0c, + 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0xbf, + 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, + 0x04, 0xc1, 0x01, 0x00, 0x00, 0x04, 0xc2, 0x01, + 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, 0x04, + 0xc4, 0x01, 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, + 0x00, 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, 0xc7, + 0x01, 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, + 0x04, 0xc9, 0x01, 0x00, 0x00, 0x04, 0xca, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, 0x04, + 0xc0, 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, + 0x00, 0x04, 0xc2, 0x01, 0x00, 0x00, 0x04, 0xc3, + 0x01, 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, + 0x04, 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, 0x01, + 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, 0x04, + 0xc8, 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, + 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6b, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7a, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xcb, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0xcb, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xcb, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x4d, + 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x65, 0xbe, 0x66, 0xbe, 0x67, 0xbe, 0x68, + 0xbe, 0x69, 0xbe, 0x6a, 0xbe, 0x6b, 0xbe, 0x6c, + 0xbe, 0x6d, 0xbe, 0x6e, 0xbe, 0x6f, 0xbe, 0x70, + 0x26, 0x0c, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, + 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, 0x04, + 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, + 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, 0x04, 0xd2, + 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, + 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, 0xd5, 0x01, + 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, 0x04, + 0xd7, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, + 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, + 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, + 0x04, 0xdc, 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, + 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, + 0xdf, 0x01, 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, + 0x00, 0x04, 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, + 0x01, 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x7a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xe4, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x56, 0x01, + 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xe4, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x4d, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, + 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x71, 0xbe, 0x72, 0xbe, 0x73, + 0xbe, 0x74, 0xbe, 0x75, 0xbe, 0x76, 0xbe, 0x77, + 0xbe, 0x78, 0xbe, 0x79, 0xbe, 0x7a, 0xbe, 0x7b, + 0xbe, 0x7c, 0x26, 0x0c, 0x00, 0x4d, 0x56, 0x01, + 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, + 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, + 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, + 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, + 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, + 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, + 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, + 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd8, + 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, + 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, + 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, 0x04, + 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, + 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, 0xe0, + 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, 0x00, + 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, 0xe3, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xe4, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x56, 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7c, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, + 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x16, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x7a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xe5, 0x01, + 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, + 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, + 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, + 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, + 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, + 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, + 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, + 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, + 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, + 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, + 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, + 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, + 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, + 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, + 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, 0x01, + 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x04, + 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, + 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, 0x04, 0x02, + 0x02, 0x00, 0x00, 0x04, 0x03, 0x02, 0x00, 0x00, + 0x04, 0x04, 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, + 0x04, 0x05, 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, + 0x00, 0x80, 0x04, 0x06, 0x02, 0x00, 0x00, 0x4d, + 0x21, 0x00, 0x00, 0x80, 0x04, 0x07, 0x02, 0x00, + 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0x08, + 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, + 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, + 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x4d, + 0x25, 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, 0x00, + 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0x0c, + 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, + 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, + 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, + 0x29, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, + 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x10, + 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, + 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, + 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, + 0x2d, 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, + 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x14, + 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, + 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, + 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, + 0x31, 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, + 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x18, + 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, + 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, + 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, + 0x35, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, + 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x1c, + 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, + 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, + 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, + 0x39, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, + 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x20, + 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, + 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, + 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, + 0x3d, 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, + 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x24, + 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, + 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, + 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, + 0x41, 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, + 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x28, + 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, + 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, + 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, + 0x45, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, + 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x2c, + 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, + 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, + 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, + 0x49, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, + 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x30, + 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, + 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, + 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, + 0x4d, 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, + 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x34, + 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, + 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, + 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, + 0x51, 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, + 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x38, + 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, + 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, + 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, + 0x55, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, + 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x3c, + 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, + 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, + 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, + 0x59, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, + 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x40, + 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, + 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, + 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, + 0x5d, 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, + 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x44, + 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, + 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, + 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, + 0x61, 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, + 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x48, + 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, + 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, + 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, + 0x65, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, + 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x4c, + 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, + 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, + 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, + 0x69, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, + 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x50, + 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, + 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, + 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, + 0x6d, 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, + 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x54, + 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, + 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, + 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, + 0x71, 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, + 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x58, + 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, + 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, + 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, + 0x75, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, + 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x5c, + 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, + 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, + 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, + 0x79, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, + 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x60, + 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, + 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, + 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, + 0x7d, 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, + 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x64, + 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, + 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, + 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, + 0x81, 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, + 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x68, + 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, + 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, + 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, + 0x85, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, + 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x6c, + 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, + 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, + 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, + 0x89, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, + 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x70, + 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, + 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, + 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, + 0x8d, 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, + 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x74, + 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, + 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, + 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, + 0x91, 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, + 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x78, + 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, + 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, + 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, + 0x95, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, + 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x7c, + 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, + 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, + 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, + 0x99, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, + 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x80, + 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, + 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, + 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, + 0x9d, 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, + 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x84, + 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, + 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, + 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, + 0xa1, 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, + 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x88, + 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, + 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, + 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, + 0xa5, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, + 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x8c, + 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, + 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, + 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, + 0xa9, 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, + 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x90, + 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, + 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, + 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, + 0xad, 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, + 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x94, + 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, + 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, + 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, + 0xb1, 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, + 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0x98, + 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, + 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, + 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, + 0xb5, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, + 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0x9c, + 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, + 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, + 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, + 0xb9, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, + 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0xa0, + 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, + 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, + 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, + 0xbd, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, + 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0xa4, + 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, + 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, + 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, + 0xc1, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, + 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0xa8, + 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, + 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, + 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, + 0xc5, 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, + 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0xac, + 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, + 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, + 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, + 0xc9, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, + 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xb0, + 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, + 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, + 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, + 0xcd, 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, + 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xb4, + 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, + 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, + 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, + 0xd1, 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, + 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xb8, + 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, + 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, + 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, + 0xd5, 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xbc, + 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, + 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xc0, + 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, + 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xc4, + 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, + 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, + 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, + 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, + 0xe5, 0x00, 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xcc, + 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, 0xe8, 0x00, + 0x00, 0x80, 0x04, 0xcd, 0x02, 0x00, 0x00, 0x4d, + 0xe9, 0x00, 0x00, 0x80, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0x04, + 0x01, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, + 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, + 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, + 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, + 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, + 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, + 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, + 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, + 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, + 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, + 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, + 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, + 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, + 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, + 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, + 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, + 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, 0x01, + 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x04, + 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, + 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, 0x04, 0x02, + 0x02, 0x00, 0x00, 0x04, 0x03, 0x02, 0x00, 0x00, + 0x04, 0x04, 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, + 0x04, 0x05, 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, + 0x00, 0x80, 0x04, 0x06, 0x02, 0x00, 0x00, 0x4d, + 0x21, 0x00, 0x00, 0x80, 0x04, 0x07, 0x02, 0x00, + 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0x08, + 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, + 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, + 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x4d, + 0x25, 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, 0x00, + 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0x0c, + 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, + 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, + 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, + 0x29, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, + 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x10, + 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, + 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, + 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, + 0x2d, 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, + 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x14, + 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, + 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, + 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, + 0x31, 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, + 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x18, + 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, + 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, + 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, + 0x35, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, + 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x1c, + 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, + 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, + 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, + 0x39, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, + 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x20, + 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, + 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, + 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, + 0x3d, 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, + 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x24, + 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, + 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, + 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, + 0x41, 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, + 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x28, + 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, + 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, + 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, + 0x45, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, + 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x2c, + 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, + 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, + 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, + 0x49, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, + 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x30, + 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, + 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, + 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, + 0x4d, 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, + 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x34, + 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, + 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, + 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, + 0x51, 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, + 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x38, + 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, + 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, + 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, + 0x55, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, + 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x3c, + 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, + 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, + 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, + 0x59, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, + 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x40, + 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, + 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, + 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, + 0x5d, 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, + 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x44, + 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, + 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, + 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, + 0x61, 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, + 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x48, + 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, + 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, + 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, + 0x65, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, + 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x4c, + 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, + 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, + 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, + 0x69, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, + 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x50, + 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, + 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, + 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, + 0x6d, 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, + 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x54, + 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, + 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, + 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, + 0x71, 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, + 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x58, + 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, + 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, + 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, + 0x75, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, + 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x5c, + 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, + 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, + 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, + 0x79, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, + 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x60, + 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, + 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, + 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, + 0x7d, 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, + 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x64, + 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, + 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, + 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, + 0x81, 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, + 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x68, + 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, + 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, + 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, + 0x85, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, + 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x6c, + 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, + 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, + 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, + 0x89, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, + 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x70, + 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, + 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, + 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, + 0x8d, 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, + 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x74, + 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, + 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, + 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, + 0x91, 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, + 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x78, + 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, + 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, + 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, + 0x95, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, + 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x7c, + 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, + 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, + 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, + 0x99, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, + 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x80, + 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, + 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, + 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, + 0x9d, 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, + 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x84, + 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, + 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, + 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, + 0xa1, 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, + 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x88, + 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, + 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, + 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, + 0xa5, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, + 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x8c, + 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, + 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, + 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, + 0xa9, 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, + 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x90, + 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, + 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, + 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, + 0xad, 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, + 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x94, + 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, + 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, + 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, + 0xb1, 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, + 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0x98, + 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, + 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, + 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, + 0xb5, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, + 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0x9c, + 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, + 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, + 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, + 0xb9, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, + 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0xa0, + 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, + 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, + 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, + 0xbd, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, + 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0xa4, + 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, + 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, + 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, + 0xc1, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, + 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0xa8, + 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, + 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, + 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, + 0xc5, 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, + 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0xac, + 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, + 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, + 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, + 0xc9, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, + 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xb0, + 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, + 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, + 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, + 0xcd, 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, + 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xb4, + 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, + 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, + 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, + 0xd1, 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, + 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xb8, + 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, + 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, + 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, + 0xd5, 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xbc, + 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, + 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xc0, + 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, + 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xc4, + 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, + 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, + 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, + 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, + 0xe5, 0x00, 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xcc, + 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, + 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x00, + 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, 0x4d, + 0xe9, 0x00, 0x00, 0x80, 0x04, 0xd0, 0x02, 0x00, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0xd1, + 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe5, 0x01, + 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, + 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, + 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, + 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, + 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, + 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, + 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, + 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, + 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, + 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, + 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, + 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, + 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, + 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, + 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, 0x01, + 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x04, + 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, + 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, 0x04, 0x02, + 0x02, 0x00, 0x00, 0x04, 0x03, 0x02, 0x00, 0x00, + 0x04, 0x04, 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, + 0x04, 0x05, 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, + 0x00, 0x80, 0x04, 0x06, 0x02, 0x00, 0x00, 0x4d, + 0x21, 0x00, 0x00, 0x80, 0x04, 0x07, 0x02, 0x00, + 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0x08, + 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, + 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, + 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x4d, + 0x25, 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, 0x00, + 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0x0c, + 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, + 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, + 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, + 0x29, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, + 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x10, + 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, + 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, + 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, + 0x2d, 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, + 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x14, + 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, + 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, + 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, + 0x31, 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, + 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x18, + 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, + 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, + 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, + 0x35, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, + 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x1c, + 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, + 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, + 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, + 0x39, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, + 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x20, + 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, + 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, + 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, + 0x3d, 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, + 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x24, + 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, + 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, + 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, + 0x41, 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, + 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x28, + 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, + 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, + 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, + 0x45, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, + 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x2c, + 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, + 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, + 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, + 0x49, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, + 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x30, + 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, + 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, + 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, + 0x4d, 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, + 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x34, + 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, + 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, + 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, + 0x51, 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, + 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x38, + 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, + 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, + 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, + 0x55, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, + 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x3c, + 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, + 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, + 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, + 0x59, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, + 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x40, + 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, + 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, + 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, + 0x5d, 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, + 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x44, + 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, + 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, + 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, + 0x61, 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, + 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x48, + 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, + 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, + 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, + 0x65, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, + 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x4c, + 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, + 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, + 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, + 0x69, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, + 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x50, + 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, + 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, + 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, + 0x6d, 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, + 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x54, + 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, + 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, + 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, + 0x71, 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, + 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x58, + 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, + 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, + 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, + 0x75, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, + 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x5c, + 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, + 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, + 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, + 0x79, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, + 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x60, + 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, + 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, + 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, + 0x7d, 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, + 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x64, + 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, + 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, + 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, + 0x81, 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, + 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x68, + 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, + 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, + 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, + 0x85, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, + 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x6c, + 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, + 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, + 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, + 0x89, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, + 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x70, + 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, + 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, + 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, + 0x8d, 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, + 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x74, + 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, + 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, + 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, + 0x91, 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, + 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x78, + 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, + 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, + 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, + 0x95, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, + 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x7c, + 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, + 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, + 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, + 0x99, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, + 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x80, + 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, + 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, + 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, + 0x9d, 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, + 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x84, + 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, + 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, + 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, + 0xa1, 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, + 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x88, + 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, + 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, + 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, + 0xa5, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, + 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x8c, + 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, + 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, + 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, + 0xa9, 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, + 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x90, + 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, + 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, + 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, + 0xad, 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, + 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x94, + 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, + 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, + 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, + 0xb1, 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, + 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0x98, + 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, + 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, + 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, + 0xb5, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, + 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0x9c, + 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, + 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, + 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, + 0xb9, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, + 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0xa0, + 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, + 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, + 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, + 0xbd, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, + 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0xa4, + 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, + 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, + 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, + 0xc1, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, + 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0xa8, + 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, + 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, + 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, + 0xc5, 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, + 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0xac, + 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, + 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, + 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, + 0xc9, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, + 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xb0, + 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, + 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, + 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, + 0xcd, 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, + 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xb4, + 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, + 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, + 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, + 0xd1, 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, + 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xb8, + 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, + 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, + 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, + 0xd5, 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xbc, + 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, + 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xc0, + 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, + 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xc4, + 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, + 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, + 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, + 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, + 0xe5, 0x00, 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xcc, + 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, + 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x00, + 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, 0x4d, + 0xe9, 0x00, 0x00, 0x80, 0x04, 0xd0, 0x02, 0x00, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0xd1, + 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7c, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, 0x4d, + 0x81, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x7d, 0xbe, 0x7e, 0xbe, + 0x7f, 0xbe, 0x80, 0xbe, 0x81, 0xbe, 0x82, 0xbe, + 0x83, 0xbe, 0x84, 0xbe, 0x85, 0xbe, 0x86, 0xbe, + 0x87, 0xbe, 0x88, 0x26, 0x0c, 0x00, 0x4d, 0x56, + 0x01, 0x00, 0x00, 0x04, 0xd2, 0x02, 0x00, 0x00, + 0x04, 0xd3, 0x02, 0x00, 0x00, 0x04, 0xd4, 0x02, + 0x00, 0x00, 0x04, 0xd5, 0x02, 0x00, 0x00, 0x04, + 0xd6, 0x02, 0x00, 0x00, 0x04, 0xd7, 0x02, 0x00, + 0x00, 0x04, 0xd8, 0x02, 0x00, 0x00, 0x04, 0xd9, + 0x02, 0x00, 0x00, 0x04, 0xda, 0x02, 0x00, 0x00, + 0x04, 0xdb, 0x02, 0x00, 0x00, 0x04, 0xdc, 0x02, + 0x00, 0x00, 0x04, 0xdd, 0x02, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xd2, 0x02, 0x00, 0x00, 0x04, 0xd3, 0x02, 0x00, + 0x00, 0x04, 0xd4, 0x02, 0x00, 0x00, 0x04, 0xd5, + 0x02, 0x00, 0x00, 0x04, 0xd6, 0x02, 0x00, 0x00, + 0x04, 0xd7, 0x02, 0x00, 0x00, 0x04, 0xd8, 0x02, + 0x00, 0x00, 0x04, 0xd9, 0x02, 0x00, 0x00, 0x04, + 0xda, 0x02, 0x00, 0x00, 0x04, 0xdb, 0x02, 0x00, + 0x00, 0x04, 0xdc, 0x02, 0x00, 0x00, 0x04, 0xdd, + 0x02, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x16, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xde, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0xde, 0x02, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xde, 0x02, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x7c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, + 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x16, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xdf, + 0x02, 0x00, 0x00, 0x04, 0xe0, 0x02, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0xdf, 0x02, 0x00, 0x00, 0x04, 0xe0, 0x02, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xdf, 0x02, 0x00, 0x00, 0x04, + 0xe0, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x4d, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, + 0x01, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, + 0x4d, 0xe1, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x02, + 0x00, 0x00, 0x0b, 0x04, 0xe3, 0x02, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe4, 0x02, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0xe5, 0x02, 0x00, 0x00, 0x4d, + 0xe6, 0x02, 0x00, 0x00, 0x04, 0xe7, 0x02, 0x00, + 0x00, 0x4d, 0xe8, 0x02, 0x00, 0x00, 0x4d, 0xe9, + 0x02, 0x00, 0x00, 0x0b, 0x04, 0xea, 0x02, 0x00, + 0x00, 0x4d, 0xe6, 0x02, 0x00, 0x00, 0x04, 0xeb, + 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x02, 0x00, 0x00, + 0x4d, 0xec, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xed, + 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x02, 0x00, 0x00, + 0x04, 0xee, 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x02, + 0x00, 0x00, 0x4d, 0xef, 0x02, 0x00, 0x00, 0x4d, + 0xf0, 0x02, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xf1, + 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x02, 0x00, 0x00, + 0x04, 0xf2, 0x02, 0x00, 0x00, 0x4d, 0xf3, 0x02, + 0x00, 0x00, 0x04, 0xf4, 0x02, 0x00, 0x00, 0x4d, + 0xf5, 0x02, 0x00, 0x00, 0x04, 0xf6, 0x02, 0x00, + 0x00, 0x4d, 0xf7, 0x02, 0x00, 0x00, 0x04, 0xf8, + 0x02, 0x00, 0x00, 0x4d, 0xf9, 0x02, 0x00, 0x00, + 0x04, 0xfa, 0x02, 0x00, 0x00, 0x4d, 0xfb, 0x02, + 0x00, 0x00, 0x04, 0xfc, 0x02, 0x00, 0x00, 0x4d, + 0xfd, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x02, 0x00, + 0x00, 0x4d, 0xfe, 0x02, 0x00, 0x00, 0x0b, 0x04, + 0xff, 0x02, 0x00, 0x00, 0x4d, 0x00, 0x03, 0x00, + 0x00, 0x04, 0x01, 0x03, 0x00, 0x00, 0x4d, 0x02, + 0x03, 0x00, 0x00, 0x04, 0x03, 0x03, 0x00, 0x00, + 0x4d, 0x04, 0x03, 0x00, 0x00, 0x04, 0x05, 0x03, + 0x00, 0x00, 0x4d, 0x06, 0x03, 0x00, 0x00, 0x04, + 0x07, 0x03, 0x00, 0x00, 0x4d, 0x08, 0x03, 0x00, + 0x00, 0x04, 0x09, 0x03, 0x00, 0x00, 0x4d, 0x0a, + 0x03, 0x00, 0x00, 0x04, 0x0b, 0x03, 0x00, 0x00, + 0x4d, 0x0c, 0x03, 0x00, 0x00, 0x04, 0x0d, 0x03, + 0x00, 0x00, 0x4d, 0x0e, 0x03, 0x00, 0x00, 0x04, + 0x0f, 0x03, 0x00, 0x00, 0x4d, 0x10, 0x03, 0x00, + 0x00, 0x04, 0x11, 0x03, 0x00, 0x00, 0x4d, 0x12, + 0x03, 0x00, 0x00, 0x04, 0x13, 0x03, 0x00, 0x00, + 0x4d, 0x14, 0x03, 0x00, 0x00, 0x04, 0x15, 0x03, + 0x00, 0x00, 0x4d, 0x16, 0x03, 0x00, 0x00, 0x04, + 0x17, 0x03, 0x00, 0x00, 0x4d, 0x18, 0x03, 0x00, + 0x00, 0x04, 0x19, 0x03, 0x00, 0x00, 0x4d, 0x1a, + 0x03, 0x00, 0x00, 0x04, 0x1b, 0x03, 0x00, 0x00, + 0x4d, 0x1c, 0x03, 0x00, 0x00, 0x04, 0x1d, 0x03, + 0x00, 0x00, 0x4d, 0x1e, 0x03, 0x00, 0x00, 0x04, + 0x1f, 0x03, 0x00, 0x00, 0x4d, 0x20, 0x03, 0x00, + 0x00, 0x04, 0x21, 0x03, 0x00, 0x00, 0x4d, 0x22, + 0x03, 0x00, 0x00, 0x04, 0x23, 0x03, 0x00, 0x00, + 0x4d, 0x24, 0x03, 0x00, 0x00, 0x04, 0x25, 0x03, + 0x00, 0x00, 0x4d, 0x26, 0x03, 0x00, 0x00, 0x04, + 0x27, 0x03, 0x00, 0x00, 0x4d, 0x28, 0x03, 0x00, + 0x00, 0x04, 0x29, 0x03, 0x00, 0x00, 0x4d, 0x2a, + 0x03, 0x00, 0x00, 0x04, 0x2b, 0x03, 0x00, 0x00, + 0x4d, 0x2c, 0x03, 0x00, 0x00, 0x04, 0x2d, 0x03, + 0x00, 0x00, 0x4d, 0x2e, 0x03, 0x00, 0x00, 0x04, + 0x2f, 0x03, 0x00, 0x00, 0x4d, 0x30, 0x03, 0x00, + 0x00, 0x4d, 0x31, 0x03, 0x00, 0x00, 0x4d, 0x45, + 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, 0xcc, 0x28, + 0xe4, 0x0c, 0x01, 0x00, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_el_size = 25138; + +const uint8_t intl_el[25138] = { + 0x01, 0xe0, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x65, 0x6c, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x10, + 0x7b, 0x31, 0x7d, 0x2c, 0x20, 0x7b, 0x30, 0x7d, + 0x0a, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, + 0x65, 0x64, 0x69, 0x75, 0x6d, 0x12, 0x7b, 0x31, + 0x7d, 0x20, 0x2d, 0x20, 0x7b, 0x30, 0x7d, 0x08, + 0x66, 0x75, 0x6c, 0x6c, 0x08, 0x6c, 0x6f, 0x6e, + 0x67, 0x02, 0x64, 0x06, 0x63, 0x63, 0x63, 0x02, + 0x45, 0x06, 0x45, 0x20, 0x64, 0x04, 0x45, 0x64, + 0x10, 0x45, 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x20, + 0x61, 0x06, 0x45, 0x68, 0x6d, 0x0e, 0x45, 0x20, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x06, 0x45, 0x48, + 0x6d, 0x16, 0x45, 0x20, 0x68, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x61, 0x08, 0x45, 0x68, + 0x6d, 0x73, 0x14, 0x45, 0x20, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x08, 0x45, 0x48, + 0x6d, 0x73, 0x06, 0x79, 0x20, 0x47, 0x04, 0x47, + 0x79, 0x0e, 0x4c, 0x4c, 0x4c, 0x20, 0x79, 0x20, + 0x47, 0x0a, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x12, + 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x20, + 0x47, 0x0c, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x64, + 0x18, 0x45, 0x2c, 0x20, 0x64, 0x20, 0x4d, 0x4d, + 0x4d, 0x20, 0x79, 0x20, 0x47, 0x0e, 0x47, 0x79, + 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x06, 0x68, 0x20, + 0x61, 0x02, 0x68, 0x04, 0x48, 0x48, 0x02, 0x48, + 0x0c, 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x04, + 0x68, 0x6d, 0x0a, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x04, 0x48, 0x6d, 0x12, 0x68, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x61, 0x06, 0x68, 0x6d, + 0x73, 0x10, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x06, 0x48, 0x6d, 0x73, 0x16, 0x68, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, + 0x20, 0x76, 0x08, 0x68, 0x6d, 0x73, 0x76, 0x14, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x76, 0x08, 0x48, 0x6d, 0x73, 0x76, 0x10, + 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x20, 0x76, + 0x06, 0x68, 0x6d, 0x76, 0x0e, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x20, 0x76, 0x06, 0x48, 0x6d, 0x76, + 0x02, 0x4c, 0x02, 0x4d, 0x06, 0x64, 0x2f, 0x4d, + 0x04, 0x4d, 0x64, 0x0c, 0x45, 0x2c, 0x20, 0x64, + 0x2f, 0x4d, 0x06, 0x4d, 0x45, 0x64, 0x06, 0x4c, + 0x4c, 0x4c, 0x06, 0x4d, 0x4d, 0x4d, 0x0a, 0x64, + 0x20, 0x4d, 0x4d, 0x4d, 0x08, 0x4d, 0x4d, 0x4d, + 0x64, 0x10, 0x45, 0x2c, 0x20, 0x64, 0x20, 0x4d, + 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x45, 0x64, + 0x0c, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, + 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x12, 0x45, 0x2c, + 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x0c, + 0x4d, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x04, 0x6d, 0x73, 0x02, + 0x79, 0x06, 0x4d, 0x2f, 0x79, 0x04, 0x79, 0x4d, + 0x0a, 0x64, 0x2f, 0x4d, 0x2f, 0x79, 0x06, 0x79, + 0x4d, 0x64, 0x10, 0x45, 0x2c, 0x20, 0x64, 0x2f, + 0x4d, 0x2f, 0x79, 0x08, 0x79, 0x4d, 0x45, 0x64, + 0x0a, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x08, 0x79, + 0x4d, 0x4d, 0x4d, 0x0e, 0x64, 0x20, 0x4d, 0x4d, + 0x4d, 0x20, 0x79, 0x0a, 0x79, 0x4d, 0x4d, 0x4d, + 0x64, 0x14, 0x45, 0x2c, 0x20, 0x64, 0x20, 0x4d, + 0x4d, 0x4d, 0x20, 0x79, 0x0c, 0x79, 0x4d, 0x4d, + 0x4d, 0x45, 0x64, 0x0c, 0x4d, 0x4d, 0x4d, 0x4d, + 0x20, 0x79, 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, + 0x0a, 0x79, 0x20, 0x51, 0x51, 0x51, 0x08, 0x79, + 0x51, 0x51, 0x51, 0x0c, 0x79, 0x20, 0x51, 0x51, + 0x51, 0x51, 0x0a, 0x79, 0x51, 0x51, 0x51, 0x51, + 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, + 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x73, 0x1c, 0x45, 0x45, 0x45, 0x45, 0x2c, 0x20, + 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, + 0x14, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x45, 0x45, + 0x45, 0x45, 0x64, 0x10, 0x64, 0x20, 0x4d, 0x4d, + 0x4d, 0x4d, 0x20, 0x79, 0x0c, 0x79, 0x4d, 0x4d, + 0x4d, 0x4d, 0x64, 0x0c, 0x64, 0x2f, 0x4d, 0x2f, + 0x79, 0x79, 0x16, 0x64, 0x61, 0x74, 0x65, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x1c, 0x68, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, + 0x20, 0x7a, 0x7a, 0x7a, 0x7a, 0x12, 0x68, 0x6d, + 0x6d, 0x73, 0x73, 0x7a, 0x7a, 0x7a, 0x7a, 0x16, + 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, + 0x61, 0x20, 0x7a, 0x08, 0x68, 0x6d, 0x73, 0x7a, + 0x16, 0x74, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x73, 0x0e, 0x66, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x73, 0x03, 0x99, 0x03, 0x03, + 0xa6, 0x03, 0x03, 0x9c, 0x03, 0x03, 0x91, 0x03, + 0x03, 0xa3, 0x03, 0x03, 0x9f, 0x03, 0x03, 0x9d, + 0x03, 0x03, 0x94, 0x03, 0x0c, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x07, 0x99, 0x03, 0xb1, 0x03, + 0xbd, 0x03, 0x07, 0xa6, 0x03, 0xb5, 0x03, 0xb2, + 0x03, 0x07, 0x9c, 0x03, 0xb1, 0x03, 0xc1, 0x03, + 0x07, 0x91, 0x03, 0xc0, 0x03, 0xc1, 0x03, 0x07, + 0x9c, 0x03, 0xb1, 0x03, 0x90, 0x03, 0x09, 0x99, + 0x03, 0xbf, 0x03, 0xc5, 0x03, 0xbd, 0x03, 0x09, + 0x99, 0x03, 0xbf, 0x03, 0xc5, 0x03, 0xbb, 0x03, + 0x07, 0x91, 0x03, 0xc5, 0x03, 0xb3, 0x03, 0x07, + 0xa3, 0x03, 0xb5, 0x03, 0xc0, 0x03, 0x07, 0x9f, + 0x03, 0xba, 0x03, 0xc4, 0x03, 0x07, 0x9d, 0x03, + 0xbf, 0x03, 0xb5, 0x03, 0x07, 0x94, 0x03, 0xb5, + 0x03, 0xba, 0x03, 0x15, 0x99, 0x03, 0xb1, 0x03, + 0xbd, 0x03, 0xbf, 0x03, 0xc5, 0x03, 0xb1, 0x03, + 0xc1, 0x03, 0xaf, 0x03, 0xbf, 0x03, 0xc5, 0x03, + 0x17, 0xa6, 0x03, 0xb5, 0x03, 0xb2, 0x03, 0xc1, + 0x03, 0xbf, 0x03, 0xc5, 0x03, 0xb1, 0x03, 0xc1, + 0x03, 0xaf, 0x03, 0xbf, 0x03, 0xc5, 0x03, 0x0f, + 0x9c, 0x03, 0xb1, 0x03, 0xc1, 0x03, 0xc4, 0x03, + 0xaf, 0x03, 0xbf, 0x03, 0xc5, 0x03, 0x11, 0x91, + 0x03, 0xc0, 0x03, 0xc1, 0x03, 0xb9, 0x03, 0xbb, + 0x03, 0xaf, 0x03, 0xbf, 0x03, 0xc5, 0x03, 0x0b, + 0x9c, 0x03, 0xb1, 0x03, 0x90, 0x03, 0xbf, 0x03, + 0xc5, 0x03, 0x0f, 0x99, 0x03, 0xbf, 0x03, 0xc5, + 0x03, 0xbd, 0x03, 0xaf, 0x03, 0xbf, 0x03, 0xc5, + 0x03, 0x0f, 0x99, 0x03, 0xbf, 0x03, 0xc5, 0x03, + 0xbb, 0x03, 0xaf, 0x03, 0xbf, 0x03, 0xc5, 0x03, + 0x13, 0x91, 0x03, 0xc5, 0x03, 0xb3, 0x03, 0xbf, + 0x03, 0xcd, 0x03, 0xc3, 0x03, 0xc4, 0x03, 0xbf, + 0x03, 0xc5, 0x03, 0x17, 0xa3, 0x03, 0xb5, 0x03, + 0xc0, 0x03, 0xc4, 0x03, 0xb5, 0x03, 0xbc, 0x03, + 0xb2, 0x03, 0xc1, 0x03, 0xaf, 0x03, 0xbf, 0x03, + 0xc5, 0x03, 0x13, 0x9f, 0x03, 0xba, 0x03, 0xc4, + 0x03, 0xc9, 0x03, 0xb2, 0x03, 0xc1, 0x03, 0xaf, + 0x03, 0xbf, 0x03, 0xc5, 0x03, 0x13, 0x9d, 0x03, + 0xbf, 0x03, 0xb5, 0x03, 0xbc, 0x03, 0xb2, 0x03, + 0xc1, 0x03, 0xaf, 0x03, 0xbf, 0x03, 0xc5, 0x03, + 0x15, 0x94, 0x03, 0xb5, 0x03, 0xba, 0x03, 0xb5, + 0x03, 0xbc, 0x03, 0xb2, 0x03, 0xc1, 0x03, 0xaf, + 0x03, 0xbf, 0x03, 0xc5, 0x03, 0x0c, 0x6d, 0x6f, + 0x6e, 0x74, 0x68, 0x73, 0x03, 0x9a, 0x03, 0x03, + 0xa4, 0x03, 0x03, 0xa0, 0x03, 0x07, 0x9a, 0x03, + 0xc5, 0x03, 0xc1, 0x03, 0x07, 0x94, 0x03, 0xb5, + 0x03, 0xc5, 0x03, 0x07, 0xa4, 0x03, 0xc1, 0x03, + 0xaf, 0x03, 0x07, 0xa4, 0x03, 0xb5, 0x03, 0xc4, + 0x03, 0x07, 0xa0, 0x03, 0xad, 0x03, 0xbc, 0x03, + 0x07, 0xa0, 0x03, 0xb1, 0x03, 0xc1, 0x03, 0x07, + 0xa3, 0x03, 0xac, 0x03, 0xb2, 0x03, 0x0f, 0x9a, + 0x03, 0xc5, 0x03, 0xc1, 0x03, 0xb9, 0x03, 0xb1, + 0x03, 0xba, 0x03, 0xae, 0x03, 0x0f, 0x94, 0x03, + 0xb5, 0x03, 0xc5, 0x03, 0xc4, 0x03, 0xad, 0x03, + 0xc1, 0x03, 0xb1, 0x03, 0x0b, 0xa4, 0x03, 0xc1, + 0x03, 0xaf, 0x03, 0xc4, 0x03, 0xb7, 0x03, 0x0f, + 0xa4, 0x03, 0xb5, 0x03, 0xc4, 0x03, 0xac, 0x03, + 0xc1, 0x03, 0xc4, 0x03, 0xb7, 0x03, 0x0d, 0xa0, + 0x03, 0xad, 0x03, 0xbc, 0x03, 0xc0, 0x03, 0xc4, + 0x03, 0xb7, 0x03, 0x13, 0xa0, 0x03, 0xb1, 0x03, + 0xc1, 0x03, 0xb1, 0x03, 0xc3, 0x03, 0xba, 0x03, + 0xb5, 0x03, 0xc5, 0x03, 0xae, 0x03, 0x0f, 0xa3, + 0x03, 0xac, 0x03, 0xb2, 0x03, 0xb2, 0x03, 0xb1, + 0x03, 0xc4, 0x03, 0xbf, 0x03, 0x08, 0x64, 0x61, + 0x79, 0x73, 0x04, 0x42, 0x45, 0x08, 0x65, 0x72, + 0x61, 0x73, 0x09, 0xc0, 0x03, 0x2e, 0x00, 0xbc, + 0x03, 0x2e, 0x00, 0x04, 0x61, 0x6d, 0x09, 0xbc, + 0x03, 0x2e, 0x00, 0xbc, 0x03, 0x2e, 0x00, 0x04, + 0x70, 0x6d, 0x14, 0x64, 0x61, 0x79, 0x50, 0x65, + 0x72, 0x69, 0x6f, 0x64, 0x73, 0x06, 0x4d, 0x30, + 0x31, 0x06, 0x4d, 0x30, 0x32, 0x06, 0x4d, 0x30, + 0x33, 0x06, 0x4d, 0x30, 0x34, 0x06, 0x4d, 0x30, + 0x35, 0x06, 0x4d, 0x30, 0x36, 0x06, 0x4d, 0x30, + 0x37, 0x06, 0x4d, 0x30, 0x38, 0x06, 0x4d, 0x30, + 0x39, 0x06, 0x4d, 0x31, 0x30, 0x06, 0x4d, 0x31, + 0x31, 0x06, 0x4d, 0x31, 0x32, 0x08, 0x54, 0x6f, + 0x75, 0x74, 0x08, 0x42, 0x61, 0x62, 0x61, 0x0a, + 0x48, 0x61, 0x74, 0x6f, 0x72, 0x0a, 0x4b, 0x69, + 0x61, 0x68, 0x6b, 0x08, 0x54, 0x6f, 0x62, 0x61, + 0x0c, 0x41, 0x6d, 0x73, 0x68, 0x69, 0x72, 0x10, + 0x42, 0x61, 0x72, 0x61, 0x6d, 0x68, 0x61, 0x74, + 0x12, 0x42, 0x61, 0x72, 0x61, 0x6d, 0x6f, 0x75, + 0x64, 0x61, 0x0e, 0x42, 0x61, 0x73, 0x68, 0x61, + 0x6e, 0x73, 0x0a, 0x50, 0x61, 0x6f, 0x6e, 0x61, + 0x08, 0x45, 0x70, 0x65, 0x70, 0x0a, 0x4d, 0x65, + 0x73, 0x72, 0x61, 0x0a, 0x4e, 0x61, 0x73, 0x69, + 0x65, 0x08, 0x45, 0x52, 0x41, 0x30, 0x08, 0x45, + 0x52, 0x41, 0x31, 0x10, 0x4d, 0x65, 0x73, 0x6b, + 0x65, 0x72, 0x65, 0x6d, 0x0c, 0x54, 0x65, 0x6b, + 0x65, 0x6d, 0x74, 0x0a, 0x48, 0x65, 0x64, 0x61, + 0x72, 0x0c, 0x54, 0x61, 0x68, 0x73, 0x61, 0x73, + 0x06, 0x54, 0x65, 0x72, 0x0e, 0x59, 0x65, 0x6b, + 0x61, 0x74, 0x69, 0x74, 0x0e, 0x4d, 0x65, 0x67, + 0x61, 0x62, 0x69, 0x74, 0x0c, 0x4d, 0x69, 0x61, + 0x7a, 0x69, 0x61, 0x0c, 0x47, 0x65, 0x6e, 0x62, + 0x6f, 0x74, 0x08, 0x53, 0x65, 0x6e, 0x65, 0x0a, + 0x48, 0x61, 0x6d, 0x6c, 0x65, 0x0e, 0x4e, 0x65, + 0x68, 0x61, 0x73, 0x73, 0x65, 0x0e, 0x50, 0x61, + 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x09, 0xc0, 0x03, + 0x2e, 0x00, 0xa7, 0x03, 0x2e, 0x00, 0x09, 0xbc, + 0x03, 0x2e, 0x00, 0xa7, 0x03, 0x2e, 0x00, 0x0d, + 0xc0, 0x03, 0x2e, 0x00, 0x9a, 0x03, 0x2e, 0x00, + 0xa7, 0x03, 0x2e, 0x00, 0x05, 0x9a, 0x03, 0xa7, + 0x03, 0x17, 0xc0, 0x03, 0xc1, 0x03, 0xbf, 0x03, + 0x20, 0x00, 0xa7, 0x03, 0xc1, 0x03, 0xb9, 0x03, + 0xc3, 0x03, 0xc4, 0x03, 0xbf, 0x03, 0xcd, 0x03, + 0x19, 0xbc, 0x03, 0xb5, 0x03, 0xc4, 0x03, 0xac, + 0x03, 0x20, 0x00, 0xa7, 0x03, 0xc1, 0x03, 0xb9, + 0x03, 0xc3, 0x03, 0xc4, 0x03, 0xcc, 0x03, 0xbd, + 0x03, 0x3b, 0xc0, 0x03, 0xc1, 0x03, 0xb9, 0x03, + 0xbd, 0x03, 0x20, 0x00, 0xb1, 0x03, 0xc0, 0x03, + 0xcc, 0x03, 0x20, 0x00, 0xc4, 0x03, 0xb7, 0x03, + 0xbd, 0x03, 0x20, 0x00, 0x9a, 0x03, 0xbf, 0x03, + 0xb9, 0x03, 0xbd, 0x03, 0xae, 0x03, 0x20, 0x00, + 0xa7, 0x03, 0xc1, 0x03, 0xbf, 0x03, 0xbd, 0x03, + 0xbf, 0x03, 0xbb, 0x03, 0xbf, 0x03, 0xb3, 0x03, + 0xaf, 0x03, 0xb1, 0x03, 0x21, 0x9a, 0x03, 0xbf, + 0x03, 0xb9, 0x03, 0xbd, 0x03, 0xae, 0x03, 0x20, + 0x00, 0xa7, 0x03, 0xc1, 0x03, 0xbf, 0x03, 0xbd, + 0x03, 0xbf, 0x03, 0xbb, 0x03, 0xbf, 0x03, 0xb3, + 0x03, 0xaf, 0x03, 0xb1, 0x03, 0x0c, 0x54, 0x69, + 0x73, 0x68, 0x72, 0x69, 0x0e, 0x48, 0x65, 0x73, + 0x68, 0x76, 0x61, 0x6e, 0x0c, 0x4b, 0x69, 0x73, + 0x6c, 0x65, 0x76, 0x0a, 0x54, 0x65, 0x76, 0x65, + 0x74, 0x0c, 0x53, 0x68, 0x65, 0x76, 0x61, 0x74, + 0x0c, 0x41, 0x64, 0x61, 0x72, 0x20, 0x49, 0x08, + 0x41, 0x64, 0x61, 0x72, 0x0a, 0x4e, 0x69, 0x73, + 0x61, 0x6e, 0x08, 0x49, 0x79, 0x61, 0x72, 0x0a, + 0x53, 0x69, 0x76, 0x61, 0x6e, 0x0a, 0x54, 0x61, + 0x6d, 0x75, 0x7a, 0x04, 0x41, 0x76, 0x08, 0x45, + 0x6c, 0x75, 0x6c, 0x0e, 0x41, 0x64, 0x61, 0x72, + 0x20, 0x49, 0x49, 0x04, 0x41, 0x4d, 0x0e, 0x43, + 0x68, 0x61, 0x69, 0x74, 0x72, 0x61, 0x10, 0x56, + 0x61, 0x69, 0x73, 0x61, 0x6b, 0x68, 0x61, 0x10, + 0x4a, 0x79, 0x61, 0x69, 0x73, 0x74, 0x68, 0x61, + 0x0c, 0x41, 0x73, 0x61, 0x64, 0x68, 0x61, 0x0e, + 0x53, 0x72, 0x61, 0x76, 0x61, 0x6e, 0x61, 0x0c, + 0x42, 0x68, 0x61, 0x64, 0x72, 0x61, 0x0c, 0x41, + 0x73, 0x76, 0x69, 0x6e, 0x61, 0x0e, 0x4b, 0x61, + 0x72, 0x74, 0x69, 0x6b, 0x61, 0x14, 0x41, 0x67, + 0x72, 0x61, 0x68, 0x61, 0x79, 0x61, 0x6e, 0x61, + 0x0a, 0x50, 0x61, 0x75, 0x73, 0x61, 0x0a, 0x4d, + 0x61, 0x67, 0x68, 0x61, 0x10, 0x50, 0x68, 0x61, + 0x6c, 0x67, 0x75, 0x6e, 0x61, 0x08, 0x53, 0x61, + 0x6b, 0x61, 0x08, 0x4d, 0x75, 0x68, 0x2e, 0x08, + 0x53, 0x61, 0x66, 0x2e, 0x0c, 0x52, 0x61, 0x62, + 0x2e, 0x20, 0x49, 0x0e, 0x52, 0x61, 0x62, 0x2e, + 0x20, 0x49, 0x49, 0x0c, 0x4a, 0x75, 0x6d, 0x2e, + 0x20, 0x49, 0x0e, 0x4a, 0x75, 0x6d, 0x2e, 0x20, + 0x49, 0x49, 0x08, 0x52, 0x61, 0x6a, 0x2e, 0x08, + 0x53, 0x68, 0x61, 0x2e, 0x08, 0x52, 0x61, 0x6d, + 0x2e, 0x0a, 0x53, 0x68, 0x61, 0x77, 0x2e, 0x11, + 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, + 0x6c, 0x00, 0x2d, 0x00, 0x51, 0x00, 0x2e, 0x00, + 0x11, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, + 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x48, 0x00, 0x2e, + 0x00, 0x10, 0x4d, 0x75, 0x68, 0x61, 0x72, 0x72, + 0x61, 0x6d, 0x0a, 0x53, 0x61, 0x66, 0x61, 0x72, + 0x0f, 0x52, 0x00, 0x61, 0x00, 0x62, 0x00, 0x69, + 0x00, 0xbb, 0x02, 0x20, 0x00, 0x49, 0x00, 0x11, + 0x52, 0x00, 0x61, 0x00, 0x62, 0x00, 0x69, 0x00, + 0xbb, 0x02, 0x20, 0x00, 0x49, 0x00, 0x49, 0x00, + 0x10, 0x4a, 0x75, 0x6d, 0x61, 0x64, 0x61, 0x20, + 0x49, 0x12, 0x4a, 0x75, 0x6d, 0x61, 0x64, 0x61, + 0x20, 0x49, 0x49, 0x0a, 0x52, 0x61, 0x6a, 0x61, + 0x62, 0x0f, 0x53, 0x00, 0x68, 0x00, 0x61, 0x00, + 0xbb, 0x02, 0x62, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x0e, 0x52, 0x61, 0x6d, 0x61, 0x64, 0x61, 0x6e, + 0x0e, 0x53, 0x68, 0x61, 0x77, 0x77, 0x61, 0x6c, + 0x19, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, + 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x51, 0x00, 0x69, + 0x00, 0xbb, 0x02, 0x64, 0x00, 0x61, 0x00, 0x68, + 0x00, 0x19, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, + 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x48, 0x00, + 0x69, 0x00, 0x6a, 0x00, 0x6a, 0x00, 0x61, 0x00, + 0x68, 0x00, 0x04, 0x41, 0x48, 0x1f, 0x54, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x36, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x13, 0x20, 0x36, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x21, 0x53, 0x00, 0x68, 0x00, 0x75, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1f, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, + 0x57, 0x00, 0x61, 0x00, 0x64, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x1f, 0x52, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x1d, 0x59, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1f, 0x4a, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6b, + 0x00, 0x61, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x2d, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x2d, 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x2b, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x2d, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x2a, 0x4a, 0x69, 0x6e, 0x67, 0x6f, + 0x2d, 0x6b, 0x65, 0x69, 0x75, 0x6e, 0x20, 0x28, + 0x37, 0x36, 0x37, 0x2d, 0x37, 0x37, 0x30, 0x29, + 0x1d, 0x48, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x37, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, + 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, 0x64, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, 0x4b, + 0x00, 0x4d, 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x38, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4a, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x61, 0x00, + 0x6a, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, + 0x53, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x20, 0x54, + 0x65, 0x6e, 0x2d, 0x61, 0x6e, 0x20, 0x28, 0x38, + 0x35, 0x37, 0x2d, 0x38, 0x35, 0x39, 0x29, 0x1f, + 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x47, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, + 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1d, 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, + 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x34, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1b, 0x4c, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, + 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x1d, 0x41, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x1d, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x4a, 0x00, 0x69, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x29, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x27, 0x4a, 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, + 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4c, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x61, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x25, 0x4a, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x24, 0x54, 0x65, 0x6e, 0x2d, 0x65, + 0x69, 0x20, 0x28, 0x31, 0x31, 0x31, 0x30, 0x2d, + 0x31, 0x31, 0x31, 0x33, 0x29, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, + 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x4d, 0x01, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x45, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x6a, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x48, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, + 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4c, + 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6d, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x4a, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x59, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x75, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x29, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x29, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x4a, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x21, 0x4a, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x27, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x75, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x29, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x74, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x29, 0x52, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x4e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, + 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x61, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, + 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x27, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x45, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, 0x69, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x27, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x27, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x61, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x41, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x4d, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x02, 0x54, 0x02, 0x53, 0x0a, 0x4d, 0x65, 0x69, + 0x6a, 0x69, 0x0d, 0x54, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x0b, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x0c, 0x48, 0x65, 0x69, 0x73, 0x65, + 0x69, 0x12, 0x46, 0x61, 0x72, 0x76, 0x61, 0x72, + 0x64, 0x69, 0x6e, 0x16, 0x4f, 0x72, 0x64, 0x69, + 0x62, 0x65, 0x68, 0x65, 0x73, 0x68, 0x74, 0x0e, + 0x4b, 0x68, 0x6f, 0x72, 0x64, 0x61, 0x64, 0x06, + 0x54, 0x69, 0x72, 0x0c, 0x4d, 0x6f, 0x72, 0x64, + 0x61, 0x64, 0x12, 0x53, 0x68, 0x61, 0x68, 0x72, + 0x69, 0x76, 0x61, 0x72, 0x08, 0x4d, 0x65, 0x68, + 0x72, 0x08, 0x41, 0x62, 0x61, 0x6e, 0x08, 0x41, + 0x7a, 0x61, 0x72, 0x06, 0x44, 0x65, 0x79, 0x0c, + 0x42, 0x61, 0x68, 0x6d, 0x61, 0x6e, 0x0c, 0x45, + 0x73, 0x66, 0x61, 0x6e, 0x64, 0x04, 0x41, 0x50, + 0x17, 0xa0, 0x03, 0xc1, 0x03, 0xb9, 0x03, 0xbd, + 0x03, 0x20, 0x00, 0x52, 0x00, 0x2e, 0x00, 0x4f, + 0x00, 0x2e, 0x00, 0x43, 0x00, 0x2e, 0x00, 0x0c, + 0x52, 0x2e, 0x4f, 0x2e, 0x43, 0x2e, 0x12, 0x63, + 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, 0x73, + 0x08, 0x64, 0x61, 0x74, 0x65, 0x08, 0x6c, 0x61, + 0x74, 0x6e, 0x04, 0x6e, 0x75, 0x10, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x50, + 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x26, 0x7b, + 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0x1e, 0x6e, 0x65, 0x67, 0x61, 0x74, + 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, + 0x72, 0x6e, 0x0e, 0x64, 0x65, 0x63, 0x69, 0x6d, + 0x61, 0x6c, 0x26, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0xa0, 0x7b, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, 0x3c, 0x7b, + 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0xa0, 0x7b, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x63, 0x79, 0x7d, 0x10, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x2a, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x7b, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x40, 0x7b, 0x6d, 0x69, + 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x0e, 0x70, 0x65, + 0x72, 0x63, 0x65, 0x6e, 0x74, 0x10, 0x70, 0x61, + 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x02, 0x2c, + 0x02, 0x2e, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x06, 0x4e, 0x61, 0x4e, 0x06, 0x6e, 0x61, 0x6e, + 0x02, 0x2b, 0x10, 0x70, 0x6c, 0x75, 0x73, 0x53, + 0x69, 0x67, 0x6e, 0x02, 0x2d, 0x12, 0x6d, 0x69, + 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, + 0x25, 0x16, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, + 0x74, 0x53, 0x69, 0x67, 0x6e, 0x03, 0x1e, 0x22, + 0x10, 0x69, 0x6e, 0x66, 0x69, 0x6e, 0x69, 0x74, + 0x79, 0x0e, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, + 0x73, 0x04, 0x41, 0x24, 0x06, 0x41, 0x55, 0x44, + 0x04, 0x52, 0x24, 0x06, 0x42, 0x52, 0x4c, 0x06, + 0x43, 0x41, 0x24, 0x06, 0x43, 0x41, 0x44, 0x06, + 0x43, 0x4e, 0xa5, 0x06, 0x43, 0x4e, 0x59, 0x03, + 0xac, 0x20, 0x06, 0x45, 0x55, 0x52, 0x02, 0xa3, + 0x06, 0x47, 0x42, 0x50, 0x07, 0x94, 0x03, 0xc1, + 0x03, 0xc7, 0x03, 0x06, 0x47, 0x52, 0x44, 0x06, + 0x48, 0x4b, 0x24, 0x06, 0x48, 0x4b, 0x44, 0x03, + 0xaa, 0x20, 0x06, 0x49, 0x4c, 0x53, 0x03, 0xb9, + 0x20, 0x06, 0x49, 0x4e, 0x52, 0x06, 0x4a, 0x50, + 0xa5, 0x06, 0x4a, 0x50, 0x59, 0x03, 0xa9, 0x20, + 0x06, 0x4b, 0x52, 0x57, 0x06, 0x4d, 0x58, 0x24, + 0x06, 0x4d, 0x58, 0x4e, 0x06, 0x4e, 0x5a, 0x24, + 0x06, 0x4e, 0x5a, 0x44, 0x03, 0x3f, 0x0e, 0x06, + 0x54, 0x48, 0x42, 0x06, 0x4e, 0x54, 0x24, 0x06, + 0x54, 0x57, 0x44, 0x02, 0x24, 0x06, 0x55, 0x53, + 0x44, 0x03, 0xab, 0x20, 0x06, 0x56, 0x4e, 0x44, + 0x08, 0x46, 0x43, 0x46, 0x41, 0x06, 0x58, 0x41, + 0x46, 0x06, 0x45, 0x43, 0x24, 0x06, 0x58, 0x43, + 0x44, 0x06, 0x43, 0x46, 0x41, 0x06, 0x58, 0x4f, + 0x46, 0x08, 0x43, 0x46, 0x50, 0x46, 0x06, 0x58, + 0x50, 0x46, 0x14, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x63, 0x69, 0x65, 0x73, 0x52, 0x6e, 0x6f, + 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2f, + 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, + 0x61, 0x74, 0x61, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, + 0x70, 0x2f, 0x65, 0x6c, 0x2e, 0x6a, 0x73, 0x0d, + 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, + 0x27, 0x00, 0x89, 0x01, 0xf2, 0x6a, 0x01, 0xa0, + 0x01, 0x00, 0x00, 0x00, 0x39, 0xd0, 0x00, 0x00, + 0x00, 0x43, 0xd1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd2, 0x00, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd4, 0x00, 0x00, 0x00, 0x04, + 0xd5, 0x00, 0x00, 0x00, 0x04, 0xd6, 0x00, 0x00, + 0x00, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x04, 0xd8, + 0x00, 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, 0x00, + 0x04, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdb, 0x00, + 0x00, 0x00, 0x04, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0xdd, 0x00, 0x00, 0x00, 0x04, 0xde, 0x00, 0x00, + 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, 0x04, 0xe0, + 0x00, 0x00, 0x00, 0x04, 0xe1, 0x00, 0x00, 0x00, + 0x04, 0xe2, 0x00, 0x00, 0x00, 0x26, 0x0f, 0x00, + 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x0a, 0x4d, 0xe4, + 0x00, 0x00, 0x00, 0x0a, 0x4d, 0xe5, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, + 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x04, 0xe9, + 0x00, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xec, 0x00, 0x00, 0x00, + 0x4d, 0xec, 0x00, 0x00, 0x00, 0x04, 0xed, 0x00, + 0x00, 0x00, 0x4d, 0xee, 0x00, 0x00, 0x00, 0x04, + 0xef, 0x00, 0x00, 0x00, 0x4d, 0xf0, 0x00, 0x00, + 0x00, 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, 0xf2, + 0x00, 0x00, 0x00, 0x04, 0xf3, 0x00, 0x00, 0x00, + 0x4d, 0xf4, 0x00, 0x00, 0x00, 0x04, 0xf5, 0x00, + 0x00, 0x00, 0x4d, 0xf6, 0x00, 0x00, 0x00, 0x04, + 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xf8, 0x00, 0x00, + 0x00, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0xfa, + 0x00, 0x00, 0x00, 0x04, 0xfb, 0x00, 0x00, 0x00, + 0x4d, 0xfc, 0x00, 0x00, 0x00, 0x04, 0xfd, 0x00, + 0x00, 0x00, 0x4d, 0xfe, 0x00, 0x00, 0x00, 0x04, + 0xff, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x01, 0x00, + 0x00, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0x02, + 0x01, 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, 0x00, + 0x4d, 0x04, 0x01, 0x00, 0x00, 0x04, 0x05, 0x01, + 0x00, 0x00, 0x4d, 0x06, 0x01, 0x00, 0x00, 0x04, + 0x07, 0x01, 0x00, 0x00, 0x4d, 0x08, 0x01, 0x00, + 0x00, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0x0a, + 0x01, 0x00, 0x00, 0x04, 0x0b, 0x01, 0x00, 0x00, + 0x4d, 0x0c, 0x01, 0x00, 0x00, 0x04, 0x0d, 0x01, + 0x00, 0x00, 0x4d, 0x0e, 0x01, 0x00, 0x00, 0x04, + 0x0f, 0x01, 0x00, 0x00, 0x4d, 0x10, 0x01, 0x00, + 0x00, 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, 0x12, + 0x01, 0x00, 0x00, 0x04, 0x13, 0x01, 0x00, 0x00, + 0x4d, 0x14, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x4d, 0x16, 0x01, 0x00, 0x00, 0x04, + 0x17, 0x01, 0x00, 0x00, 0x4d, 0x18, 0x01, 0x00, + 0x00, 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, 0x1a, + 0x01, 0x00, 0x00, 0x04, 0x1b, 0x01, 0x00, 0x00, + 0x4d, 0x1c, 0x01, 0x00, 0x00, 0x04, 0x1d, 0x01, + 0x00, 0x00, 0x4d, 0x1e, 0x01, 0x00, 0x00, 0x04, + 0x1f, 0x01, 0x00, 0x00, 0x4d, 0x20, 0x01, 0x00, + 0x00, 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, 0x22, + 0x01, 0x00, 0x00, 0x04, 0x23, 0x01, 0x00, 0x00, + 0x4d, 0x24, 0x01, 0x00, 0x00, 0x04, 0x25, 0x01, + 0x00, 0x00, 0x4d, 0x26, 0x01, 0x00, 0x00, 0x04, + 0x27, 0x01, 0x00, 0x00, 0x4d, 0x27, 0x01, 0x00, + 0x00, 0x04, 0x28, 0x01, 0x00, 0x00, 0x4d, 0x29, + 0x01, 0x00, 0x00, 0x04, 0x2a, 0x01, 0x00, 0x00, + 0x4d, 0x2b, 0x01, 0x00, 0x00, 0x04, 0x2c, 0x01, + 0x00, 0x00, 0x4d, 0x2d, 0x01, 0x00, 0x00, 0x04, + 0x2e, 0x01, 0x00, 0x00, 0x4d, 0x2f, 0x01, 0x00, + 0x00, 0x04, 0x30, 0x01, 0x00, 0x00, 0x4d, 0x31, + 0x01, 0x00, 0x00, 0x04, 0x32, 0x01, 0x00, 0x00, + 0x4d, 0x33, 0x01, 0x00, 0x00, 0x04, 0x34, 0x01, + 0x00, 0x00, 0x4d, 0x35, 0x01, 0x00, 0x00, 0x04, + 0x36, 0x01, 0x00, 0x00, 0x4d, 0x37, 0x01, 0x00, + 0x00, 0x04, 0x38, 0x01, 0x00, 0x00, 0x4d, 0x39, + 0x01, 0x00, 0x00, 0x4d, 0x3a, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x3b, 0x01, 0x00, 0x00, 0x4d, 0x3c, + 0x01, 0x00, 0x00, 0x04, 0x3d, 0x01, 0x00, 0x00, + 0x4d, 0x3e, 0x01, 0x00, 0x00, 0x04, 0x30, 0x01, + 0x00, 0x00, 0x4d, 0x31, 0x01, 0x00, 0x00, 0x04, + 0x3f, 0x01, 0x00, 0x00, 0x4d, 0x2b, 0x01, 0x00, + 0x00, 0x4d, 0x40, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x41, 0x01, 0x00, 0x00, 0x4d, 0x42, 0x01, 0x00, + 0x00, 0x04, 0x43, 0x01, 0x00, 0x00, 0x4d, 0x44, + 0x01, 0x00, 0x00, 0x04, 0x09, 0x01, 0x00, 0x00, + 0x4d, 0x0a, 0x01, 0x00, 0x00, 0x04, 0x05, 0x01, + 0x00, 0x00, 0x4d, 0x06, 0x01, 0x00, 0x00, 0x4d, + 0x45, 0x01, 0x00, 0x00, 0x4d, 0x46, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x0b, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, + 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x68, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x7a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x4d, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, + 0x01, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x00, 0xbe, 0x01, 0xbe, 0x02, + 0xbe, 0x03, 0xbe, 0x04, 0xbe, 0x05, 0xbe, 0x06, + 0xbe, 0x07, 0xbe, 0x08, 0xbe, 0x09, 0xbe, 0x0a, + 0xbe, 0x0b, 0x26, 0x0c, 0x00, 0x4d, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, + 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, + 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, + 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, + 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, + 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, + 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, + 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, + 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, + 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x68, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x4d, 0x80, + 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, + 0x4d, 0xd6, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x0c, 0xbe, 0x0d, 0xbe, 0x0e, 0xbe, 0x0f, 0xbe, + 0x10, 0xbe, 0x11, 0xbe, 0x12, 0xbe, 0x13, 0xbe, + 0x14, 0xbe, 0x15, 0xbe, 0x16, 0xbe, 0x17, 0xbe, + 0x18, 0x26, 0x0d, 0x00, 0x4d, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, + 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, + 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, + 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, + 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, + 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, + 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, + 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, + 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, + 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, + 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, + 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, + 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, + 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, + 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x68, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, + 0x9c, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, + 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7c, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, + 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x19, 0xbe, 0x1a, + 0xbe, 0x1b, 0xbe, 0x1c, 0xbe, 0x1d, 0xbe, 0x1e, + 0xbe, 0x1f, 0xbe, 0x20, 0xbe, 0x21, 0xbe, 0x22, + 0xbe, 0x23, 0xbe, 0x24, 0x26, 0x0c, 0x00, 0x4d, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, + 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, + 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, + 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, + 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, + 0x8d, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x68, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, + 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, + 0x4d, 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x25, 0xbe, 0x26, 0xbe, 0x27, 0xbe, + 0x28, 0xbe, 0x29, 0xbe, 0x2a, 0xbe, 0x2b, 0xbe, + 0x2c, 0xbe, 0x2d, 0xbe, 0x2e, 0xbe, 0x2f, 0xbe, + 0x30, 0xbe, 0x31, 0x26, 0x0d, 0x00, 0x4d, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, + 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, + 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, + 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, + 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, + 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, + 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, + 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, + 0xa9, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, + 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, + 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, + 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, + 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, + 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, + 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, + 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, + 0x04, 0xa9, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x68, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, + 0x9c, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, + 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x9b, + 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x4d, 0x80, 0x01, + 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x32, + 0xbe, 0x33, 0xbe, 0x34, 0xbe, 0x35, 0xbe, 0x36, + 0xbe, 0x37, 0xbe, 0x38, 0xbe, 0x39, 0xbe, 0x3a, + 0xbe, 0x3b, 0xbe, 0x3c, 0xbe, 0x3d, 0xbe, 0x3e, + 0x26, 0x0d, 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, + 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, + 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, + 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, + 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, + 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, + 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, + 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, + 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, + 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, + 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, + 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, + 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, + 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, + 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x68, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x9b, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7c, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, + 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, 0xd9, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x3f, 0xbe, 0x40, + 0xbe, 0x41, 0xbe, 0x42, 0xbe, 0x43, 0xbe, 0x44, + 0xbe, 0x45, 0xbe, 0x46, 0xbe, 0x47, 0xbe, 0x48, + 0xbe, 0x49, 0xbe, 0x4a, 0x26, 0x0c, 0x00, 0x4d, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, + 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, + 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, + 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, + 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, + 0x8d, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x68, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, + 0x04, 0x9c, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x9b, 0x01, + 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x7c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, + 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x68, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xaa, + 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, + 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, + 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, + 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, + 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, 0x26, 0x04, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xae, + 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, + 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, + 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x4d, + 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, + 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x4b, 0xbe, 0x4c, 0xbe, 0x4d, 0xbe, 0x4e, + 0xbe, 0x4f, 0xbe, 0x50, 0xbe, 0x51, 0xbe, 0x52, + 0xbe, 0x53, 0xbe, 0x54, 0xbe, 0x55, 0xbe, 0x56, + 0xbe, 0x57, 0xbe, 0x58, 0x26, 0x0e, 0x00, 0x4d, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, + 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, + 0x01, 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, + 0x04, 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, + 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, 0x04, + 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, + 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, + 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, + 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, + 0x00, 0x00, 0x26, 0x0e, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, + 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, + 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, 0x04, 0xb6, + 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, + 0x04, 0xb8, 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, + 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, 0x04, + 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, + 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, 0x04, 0xbe, + 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, + 0x26, 0x0e, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x68, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x7a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xc0, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xc0, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x4d, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x59, 0xbe, 0x5a, 0xbe, 0x5b, + 0xbe, 0x5c, 0xbe, 0x5d, 0xbe, 0x5e, 0xbe, 0x5f, + 0xbe, 0x60, 0xbe, 0x61, 0xbe, 0x62, 0xbe, 0x63, + 0xbe, 0x64, 0x26, 0x0c, 0x00, 0x4d, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, 0x04, + 0xc2, 0x01, 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, + 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, 0x04, 0xc5, + 0x01, 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, 0x00, + 0x04, 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, 0x01, + 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, 0x04, + 0xca, 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, + 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xc1, + 0x01, 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, 0x00, + 0x04, 0xc3, 0x01, 0x00, 0x00, 0x04, 0xc4, 0x01, + 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, 0x04, + 0xc6, 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, + 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, 0xc9, + 0x01, 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, + 0x04, 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x68, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xcd, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7c, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, + 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x65, 0xbe, 0x66, + 0xbe, 0x67, 0xbe, 0x68, 0xbe, 0x69, 0xbe, 0x6a, + 0xbe, 0x6b, 0xbe, 0x6c, 0xbe, 0x6d, 0xbe, 0x6e, + 0xbe, 0x6f, 0xbe, 0x70, 0x26, 0x0c, 0x00, 0x4d, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, + 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, + 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, + 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, + 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, + 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, + 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, 0xd8, + 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, + 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, 0x04, + 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, + 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, 0xe0, + 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, 0x00, + 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, 0xe3, 0x01, + 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, 0x04, + 0xe5, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x68, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xe6, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, 0xe6, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x4d, 0x80, 0x01, + 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x71, + 0xbe, 0x72, 0xbe, 0x73, 0xbe, 0x74, 0xbe, 0x75, + 0xbe, 0x76, 0xbe, 0x77, 0xbe, 0x78, 0xbe, 0x79, + 0xbe, 0x7a, 0xbe, 0x7b, 0xbe, 0x7c, 0x26, 0x0c, + 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, 0xce, + 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, + 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, + 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, + 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, + 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, + 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, + 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, + 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, + 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, + 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, + 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, + 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, + 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, + 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x68, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7a, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0xe6, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x4d, + 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x68, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, + 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, + 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, + 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, + 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, + 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, + 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, + 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, + 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, + 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, + 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, + 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, + 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, + 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, + 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, + 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, + 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, + 0x04, 0x02, 0x02, 0x00, 0x00, 0x04, 0x03, 0x02, + 0x00, 0x00, 0x04, 0x04, 0x02, 0x00, 0x00, 0x04, + 0x05, 0x02, 0x00, 0x00, 0x04, 0x06, 0x02, 0x00, + 0x00, 0x26, 0x20, 0x00, 0x04, 0x07, 0x02, 0x00, + 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0x08, + 0x02, 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, + 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, + 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x4d, + 0x23, 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, 0x00, + 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x0c, + 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, + 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, + 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, + 0x27, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, + 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x10, + 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, + 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, + 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, + 0x2b, 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, + 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x14, + 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, + 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, + 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, + 0x2f, 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, + 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x18, + 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, + 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, + 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, + 0x33, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, + 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x1c, + 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, + 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, + 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, + 0x37, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, + 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x20, + 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, + 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, + 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, + 0x3b, 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, + 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x24, + 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, + 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, + 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, + 0x3f, 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, + 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x28, + 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, + 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, + 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, + 0x43, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, + 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x2c, + 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, + 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, + 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, + 0x47, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, + 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x30, + 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, + 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, + 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, + 0x4b, 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, + 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x34, + 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, + 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, + 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, + 0x4f, 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, + 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x38, + 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, + 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, + 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, + 0x53, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, + 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x3c, + 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, + 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, + 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, + 0x57, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, + 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x40, + 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, + 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, + 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, + 0x5b, 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, + 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x44, + 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, + 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, + 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, + 0x5f, 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, + 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x48, + 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, + 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, + 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, + 0x63, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, + 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x4c, + 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, + 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, + 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, + 0x67, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, + 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x50, + 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, + 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, + 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, + 0x6b, 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, + 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x54, + 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, + 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, + 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, + 0x6f, 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, + 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x58, + 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, + 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, + 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, + 0x73, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, + 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x5c, + 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, + 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, + 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, + 0x77, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, + 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x60, + 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, + 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, + 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, + 0x7b, 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, + 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x64, + 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, + 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, + 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, + 0x7f, 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, + 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x68, + 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, + 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, + 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, + 0x83, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, + 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x6c, + 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, + 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, + 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, + 0x87, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, + 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x70, + 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, + 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, + 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, + 0x8b, 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, + 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x74, + 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, + 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, + 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, + 0x8f, 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, + 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x78, + 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, + 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, + 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, + 0x93, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, + 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x7c, + 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, + 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, + 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, + 0x97, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, + 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x80, + 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, + 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, + 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, + 0x9b, 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, + 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x84, + 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, + 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, + 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, + 0x9f, 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, + 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x88, + 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, + 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, + 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, + 0xa3, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, + 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x8c, + 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, + 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, + 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, + 0xa7, 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, + 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x90, + 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, + 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, + 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, + 0xab, 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, + 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x94, + 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, + 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, + 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, + 0xaf, 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, + 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x98, + 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, + 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, + 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, + 0xb3, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, + 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0x9c, + 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, + 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, + 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, + 0xb7, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, + 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0xa0, + 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, + 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, + 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, + 0xbb, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, + 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0xa4, + 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, + 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, + 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, + 0xbf, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, + 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0xa8, + 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, + 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, + 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, + 0xc3, 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, + 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xac, + 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, + 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, + 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, + 0xc7, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, + 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xb0, + 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, + 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, + 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, + 0xcb, 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, + 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xb4, + 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, + 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, + 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, + 0xcf, 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, + 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xb8, + 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, + 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, + 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, + 0xd3, 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, + 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xbc, + 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, + 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, + 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, + 0xd7, 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xc0, + 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, + 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xc4, + 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, + 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, + 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, + 0xe3, 0x00, 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, + 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xcc, + 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, + 0x04, 0xcd, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, + 0x00, 0x80, 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x80, 0x04, 0x16, 0x01, 0x00, + 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xcf, + 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, + 0x04, 0xd0, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x80, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x80, 0x4d, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, + 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, + 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, + 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, + 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, + 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, + 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, + 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, + 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, + 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, + 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, + 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, + 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, + 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, + 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, + 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, + 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, + 0x04, 0x02, 0x02, 0x00, 0x00, 0x04, 0x03, 0x02, + 0x00, 0x00, 0x04, 0x04, 0x02, 0x00, 0x00, 0x04, + 0x05, 0x02, 0x00, 0x00, 0x04, 0x06, 0x02, 0x00, + 0x00, 0x26, 0x20, 0x00, 0x04, 0x07, 0x02, 0x00, + 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0x08, + 0x02, 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, + 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, + 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x4d, + 0x23, 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, 0x00, + 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x0c, + 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, + 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, + 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, + 0x27, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, + 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x10, + 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, + 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, + 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, + 0x2b, 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, + 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x14, + 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, + 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, + 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, + 0x2f, 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, + 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x18, + 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, + 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, + 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, + 0x33, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, + 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x1c, + 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, + 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, + 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, + 0x37, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, + 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x20, + 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, + 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, + 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, + 0x3b, 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, + 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x24, + 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, + 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, + 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, + 0x3f, 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, + 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x28, + 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, + 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, + 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, + 0x43, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, + 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x2c, + 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, + 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, + 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, + 0x47, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, + 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x30, + 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, + 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, + 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, + 0x4b, 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, + 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x34, + 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, + 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, + 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, + 0x4f, 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, + 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x38, + 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, + 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, + 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, + 0x53, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, + 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x3c, + 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, + 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, + 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, + 0x57, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, + 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x40, + 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, + 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, + 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, + 0x5b, 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, + 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x44, + 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, + 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, + 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, + 0x5f, 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, + 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x48, + 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, + 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, + 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, + 0x63, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, + 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x4c, + 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, + 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, + 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, + 0x67, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, + 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x50, + 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, + 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, + 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, + 0x6b, 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, + 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x54, + 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, + 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, + 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, + 0x6f, 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, + 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x58, + 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, + 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, + 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, + 0x73, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, + 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x5c, + 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, + 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, + 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, + 0x77, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, + 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x60, + 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, + 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, + 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, + 0x7b, 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, + 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x64, + 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, + 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, + 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, + 0x7f, 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, + 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x68, + 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, + 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, + 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, + 0x83, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, + 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x6c, + 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, + 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, + 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, + 0x87, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, + 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x70, + 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, + 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, + 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, + 0x8b, 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, + 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x74, + 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, + 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, + 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, + 0x8f, 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, + 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x78, + 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, + 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, + 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, + 0x93, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, + 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x7c, + 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, + 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, + 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, + 0x97, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, + 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x80, + 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, + 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, + 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, + 0x9b, 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, + 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x84, + 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, + 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, + 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, + 0x9f, 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, + 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x88, + 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, + 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, + 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, + 0xa3, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, + 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x8c, + 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, + 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, + 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, + 0xa7, 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, + 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x90, + 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, + 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, + 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, + 0xab, 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, + 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x94, + 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, + 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, + 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, + 0xaf, 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, + 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x98, + 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, + 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, + 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, + 0xb3, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, + 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0x9c, + 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, + 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, + 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, + 0xb7, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, + 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0xa0, + 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, + 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, + 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, + 0xbb, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, + 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0xa4, + 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, + 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, + 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, + 0xbf, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, + 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0xa8, + 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, + 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, + 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, + 0xc3, 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, + 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xac, + 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, + 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, + 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, + 0xc7, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, + 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xb0, + 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, + 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, + 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, + 0xcb, 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, + 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xb4, + 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, + 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, + 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, + 0xcf, 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, + 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xb8, + 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, + 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, + 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, + 0xd3, 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, + 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xbc, + 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, + 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, + 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, + 0xd7, 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xc0, + 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, + 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xc4, + 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, + 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, + 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, + 0xe3, 0x00, 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, + 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xcc, + 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, + 0x04, 0xcd, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, + 0x00, 0x80, 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x80, 0x04, 0xd1, 0x02, 0x00, + 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xd2, + 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, + 0x04, 0xd3, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x80, 0x04, 0xd4, 0x02, 0x00, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x80, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, + 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, + 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, + 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, + 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, + 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, + 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, + 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, + 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, + 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, + 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, + 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, + 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, + 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, + 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, + 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, + 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, + 0x04, 0x02, 0x02, 0x00, 0x00, 0x04, 0x03, 0x02, + 0x00, 0x00, 0x04, 0x04, 0x02, 0x00, 0x00, 0x04, + 0x05, 0x02, 0x00, 0x00, 0x04, 0x06, 0x02, 0x00, + 0x00, 0x26, 0x20, 0x00, 0x04, 0x07, 0x02, 0x00, + 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0x08, + 0x02, 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, + 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, + 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x4d, + 0x23, 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, 0x00, + 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x0c, + 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, + 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, + 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, + 0x27, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, + 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x10, + 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, + 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, + 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, + 0x2b, 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, + 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x14, + 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, + 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, + 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, + 0x2f, 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, + 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x18, + 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, + 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, + 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, + 0x33, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, + 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x1c, + 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, + 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, + 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, + 0x37, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, + 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x20, + 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, + 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, + 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, + 0x3b, 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, + 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x24, + 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, + 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, + 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, + 0x3f, 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, + 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x28, + 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, + 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, + 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, + 0x43, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, + 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x2c, + 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, + 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, + 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, + 0x47, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, + 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x30, + 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, + 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, + 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, + 0x4b, 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, + 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x34, + 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, + 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, + 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, + 0x4f, 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, + 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x38, + 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, + 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, + 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, + 0x53, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, + 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x3c, + 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, + 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, + 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, + 0x57, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, + 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x40, + 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, + 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, + 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, + 0x5b, 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, + 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x44, + 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, + 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, + 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, + 0x5f, 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, + 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x48, + 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, + 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, + 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, + 0x63, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, + 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x4c, + 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, + 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, + 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, + 0x67, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, + 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x50, + 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, + 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, + 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, + 0x6b, 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, + 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x54, + 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, + 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, + 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, + 0x6f, 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, + 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x58, + 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, + 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, + 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, + 0x73, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, + 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x5c, + 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, + 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, + 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, + 0x77, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, + 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x60, + 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, + 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, + 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, + 0x7b, 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, + 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x64, + 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, + 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, + 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, + 0x7f, 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, + 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x68, + 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, + 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, + 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, + 0x83, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, + 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x6c, + 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, + 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, + 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, + 0x87, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, + 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x70, + 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, + 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, + 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, + 0x8b, 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, + 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x74, + 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, + 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, + 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, + 0x8f, 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, + 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x78, + 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, + 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, + 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, + 0x93, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, + 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x7c, + 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, + 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, + 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, + 0x97, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, + 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x80, + 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, + 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, + 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, + 0x9b, 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, + 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x84, + 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, + 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, + 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, + 0x9f, 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, + 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x88, + 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, + 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, + 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, + 0xa3, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, + 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x8c, + 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, + 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, + 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, + 0xa7, 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, + 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x90, + 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, + 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, + 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, + 0xab, 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, + 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x94, + 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, + 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, + 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, + 0xaf, 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, + 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x98, + 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, + 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, + 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, + 0xb3, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, + 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0x9c, + 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, + 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, + 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, + 0xb7, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, + 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0xa0, + 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, + 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, + 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, + 0xbb, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, + 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0xa4, + 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, + 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, + 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, + 0xbf, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, + 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0xa8, + 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, + 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, + 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, + 0xc3, 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, + 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xac, + 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, + 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, + 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, + 0xc7, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, + 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xb0, + 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, + 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, + 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, + 0xcb, 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, + 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xb4, + 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, + 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, + 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, + 0xcf, 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, + 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xb8, + 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, + 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, + 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, + 0xd3, 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, + 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xbc, + 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, + 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, + 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, + 0xd7, 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xc0, + 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, + 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xc4, + 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, + 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, + 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, + 0xe3, 0x00, 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, + 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xcc, + 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, + 0x04, 0xcd, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, + 0x00, 0x80, 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x80, 0x04, 0xd1, 0x02, 0x00, + 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xd2, + 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, + 0x04, 0xd3, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x80, 0x04, 0xd4, 0x02, 0x00, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x80, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x4d, 0x80, + 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x7d, 0xbe, 0x7e, 0xbe, 0x7f, 0xbe, 0x80, 0xbe, + 0x81, 0xbe, 0x82, 0xbe, 0x83, 0xbe, 0x84, 0xbe, + 0x85, 0xbe, 0x86, 0xbe, 0x87, 0xbe, 0x88, 0x26, + 0x0c, 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0xd5, 0x02, 0x00, 0x00, 0x04, 0xd6, 0x02, 0x00, + 0x00, 0x04, 0xd7, 0x02, 0x00, 0x00, 0x04, 0xd8, + 0x02, 0x00, 0x00, 0x04, 0xd9, 0x02, 0x00, 0x00, + 0x04, 0xda, 0x02, 0x00, 0x00, 0x04, 0xdb, 0x02, + 0x00, 0x00, 0x04, 0xdc, 0x02, 0x00, 0x00, 0x04, + 0xdd, 0x02, 0x00, 0x00, 0x04, 0xde, 0x02, 0x00, + 0x00, 0x04, 0xdf, 0x02, 0x00, 0x00, 0x04, 0xe0, + 0x02, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xd5, 0x02, 0x00, 0x00, + 0x04, 0xd6, 0x02, 0x00, 0x00, 0x04, 0xd7, 0x02, + 0x00, 0x00, 0x04, 0xd8, 0x02, 0x00, 0x00, 0x04, + 0xd9, 0x02, 0x00, 0x00, 0x04, 0xda, 0x02, 0x00, + 0x00, 0x04, 0xdb, 0x02, 0x00, 0x00, 0x04, 0xdc, + 0x02, 0x00, 0x00, 0x04, 0xdd, 0x02, 0x00, 0x00, + 0x04, 0xde, 0x02, 0x00, 0x00, 0x04, 0xdf, 0x02, + 0x00, 0x00, 0x04, 0xe0, 0x02, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x68, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7a, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xe1, 0x02, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0xe1, 0x02, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe1, + 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, + 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, + 0x4d, 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, + 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x68, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xe2, 0x02, 0x00, 0x00, 0x04, + 0xe3, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x02, 0x00, + 0x00, 0x04, 0xe3, 0x02, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe2, + 0x02, 0x00, 0x00, 0x04, 0xe3, 0x02, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x4d, 0x80, 0x01, + 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, + 0xe2, 0x00, 0x00, 0x00, 0x4d, 0xe4, 0x02, 0x00, + 0x00, 0x4d, 0xe5, 0x02, 0x00, 0x00, 0x0b, 0x04, + 0xe6, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x02, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xe8, + 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x02, 0x00, 0x00, + 0x04, 0xea, 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x02, + 0x00, 0x00, 0x4d, 0xec, 0x02, 0x00, 0x00, 0x0b, + 0x04, 0xed, 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x02, + 0x00, 0x00, 0x04, 0xee, 0x02, 0x00, 0x00, 0x4d, + 0xeb, 0x02, 0x00, 0x00, 0x4d, 0xef, 0x02, 0x00, + 0x00, 0x0b, 0x04, 0xf0, 0x02, 0x00, 0x00, 0x4d, + 0xe9, 0x02, 0x00, 0x00, 0x04, 0xf1, 0x02, 0x00, + 0x00, 0x4d, 0xeb, 0x02, 0x00, 0x00, 0x4d, 0xf2, + 0x02, 0x00, 0x00, 0x4d, 0xf3, 0x02, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0xf4, 0x02, 0x00, 0x00, 0x4d, + 0xec, 0x02, 0x00, 0x00, 0x04, 0xf5, 0x02, 0x00, + 0x00, 0x4d, 0xf6, 0x02, 0x00, 0x00, 0x04, 0xf7, + 0x02, 0x00, 0x00, 0x4d, 0xf8, 0x02, 0x00, 0x00, + 0x04, 0xf9, 0x02, 0x00, 0x00, 0x4d, 0xfa, 0x02, + 0x00, 0x00, 0x04, 0xfb, 0x02, 0x00, 0x00, 0x4d, + 0xfc, 0x02, 0x00, 0x00, 0x04, 0xfd, 0x02, 0x00, + 0x00, 0x4d, 0xfe, 0x02, 0x00, 0x00, 0x04, 0xff, + 0x02, 0x00, 0x00, 0x4d, 0x00, 0x03, 0x00, 0x00, + 0x4d, 0xe6, 0x02, 0x00, 0x00, 0x4d, 0x01, 0x03, + 0x00, 0x00, 0x0b, 0x04, 0x02, 0x03, 0x00, 0x00, + 0x4d, 0x03, 0x03, 0x00, 0x00, 0x04, 0x04, 0x03, + 0x00, 0x00, 0x4d, 0x05, 0x03, 0x00, 0x00, 0x04, + 0x06, 0x03, 0x00, 0x00, 0x4d, 0x07, 0x03, 0x00, + 0x00, 0x04, 0x08, 0x03, 0x00, 0x00, 0x4d, 0x09, + 0x03, 0x00, 0x00, 0x04, 0x0a, 0x03, 0x00, 0x00, + 0x4d, 0x0b, 0x03, 0x00, 0x00, 0x04, 0x0c, 0x03, + 0x00, 0x00, 0x4d, 0x0d, 0x03, 0x00, 0x00, 0x04, + 0x0e, 0x03, 0x00, 0x00, 0x4d, 0x0f, 0x03, 0x00, + 0x00, 0x04, 0x10, 0x03, 0x00, 0x00, 0x4d, 0x11, + 0x03, 0x00, 0x00, 0x04, 0x12, 0x03, 0x00, 0x00, + 0x4d, 0x13, 0x03, 0x00, 0x00, 0x04, 0x14, 0x03, + 0x00, 0x00, 0x4d, 0x15, 0x03, 0x00, 0x00, 0x04, + 0x16, 0x03, 0x00, 0x00, 0x4d, 0x17, 0x03, 0x00, + 0x00, 0x04, 0x18, 0x03, 0x00, 0x00, 0x4d, 0x19, + 0x03, 0x00, 0x00, 0x04, 0x1a, 0x03, 0x00, 0x00, + 0x4d, 0x1b, 0x03, 0x00, 0x00, 0x04, 0x1c, 0x03, + 0x00, 0x00, 0x4d, 0x1d, 0x03, 0x00, 0x00, 0x04, + 0x1e, 0x03, 0x00, 0x00, 0x4d, 0x1f, 0x03, 0x00, + 0x00, 0x04, 0x20, 0x03, 0x00, 0x00, 0x4d, 0x21, + 0x03, 0x00, 0x00, 0x04, 0x22, 0x03, 0x00, 0x00, + 0x4d, 0x23, 0x03, 0x00, 0x00, 0x04, 0x24, 0x03, + 0x00, 0x00, 0x4d, 0x25, 0x03, 0x00, 0x00, 0x04, + 0x26, 0x03, 0x00, 0x00, 0x4d, 0x27, 0x03, 0x00, + 0x00, 0x04, 0x28, 0x03, 0x00, 0x00, 0x4d, 0x29, + 0x03, 0x00, 0x00, 0x04, 0x2a, 0x03, 0x00, 0x00, + 0x4d, 0x2b, 0x03, 0x00, 0x00, 0x04, 0x2c, 0x03, + 0x00, 0x00, 0x4d, 0x2d, 0x03, 0x00, 0x00, 0x4d, + 0x2e, 0x03, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, + 0x00, 0x24, 0x01, 0x00, 0xcc, 0x28, 0xde, 0x0c, + 0x01, 0x00, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, + 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x04, 0x31, 0x33, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_en_size = 24824; + +const uint8_t intl_en[24824] = { + 0x01, 0xed, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x65, 0x6e, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x10, + 0x7b, 0x31, 0x7d, 0x2c, 0x20, 0x7b, 0x30, 0x7d, + 0x0a, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, + 0x65, 0x64, 0x69, 0x75, 0x6d, 0x18, 0x7b, 0x31, + 0x7d, 0x20, 0x27, 0x61, 0x74, 0x27, 0x20, 0x7b, + 0x30, 0x7d, 0x08, 0x66, 0x75, 0x6c, 0x6c, 0x08, + 0x6c, 0x6f, 0x6e, 0x67, 0x02, 0x64, 0x06, 0x63, + 0x63, 0x63, 0x02, 0x45, 0x06, 0x64, 0x20, 0x45, + 0x04, 0x45, 0x64, 0x10, 0x45, 0x20, 0x68, 0x3a, + 0x6d, 0x6d, 0x20, 0x61, 0x06, 0x45, 0x68, 0x6d, + 0x0e, 0x45, 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x06, 0x45, 0x48, 0x6d, 0x16, 0x45, 0x20, 0x68, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, + 0x08, 0x45, 0x68, 0x6d, 0x73, 0x14, 0x45, 0x20, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x08, 0x45, 0x48, 0x6d, 0x73, 0x06, 0x79, 0x20, + 0x47, 0x04, 0x47, 0x79, 0x0e, 0x4d, 0x4d, 0x4d, + 0x20, 0x79, 0x20, 0x47, 0x0a, 0x47, 0x79, 0x4d, + 0x4d, 0x4d, 0x14, 0x4d, 0x4d, 0x4d, 0x20, 0x64, + 0x2c, 0x20, 0x79, 0x20, 0x47, 0x0c, 0x47, 0x79, + 0x4d, 0x4d, 0x4d, 0x64, 0x1a, 0x45, 0x2c, 0x20, + 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x2c, 0x20, 0x79, + 0x20, 0x47, 0x0e, 0x47, 0x79, 0x4d, 0x4d, 0x4d, + 0x45, 0x64, 0x06, 0x68, 0x20, 0x61, 0x02, 0x68, + 0x04, 0x48, 0x48, 0x02, 0x48, 0x0c, 0x68, 0x3a, + 0x6d, 0x6d, 0x20, 0x61, 0x04, 0x68, 0x6d, 0x0a, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x04, 0x48, 0x6d, + 0x12, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x61, 0x06, 0x68, 0x6d, 0x73, 0x10, 0x48, + 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x06, + 0x48, 0x6d, 0x73, 0x16, 0x68, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x61, 0x20, 0x76, 0x08, + 0x68, 0x6d, 0x73, 0x76, 0x14, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x76, 0x08, + 0x48, 0x6d, 0x73, 0x76, 0x10, 0x68, 0x3a, 0x6d, + 0x6d, 0x20, 0x61, 0x20, 0x76, 0x06, 0x68, 0x6d, + 0x76, 0x0e, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x20, + 0x76, 0x06, 0x48, 0x6d, 0x76, 0x02, 0x4c, 0x02, + 0x4d, 0x06, 0x4d, 0x2f, 0x64, 0x04, 0x4d, 0x64, + 0x0c, 0x45, 0x2c, 0x20, 0x4d, 0x2f, 0x64, 0x06, + 0x4d, 0x45, 0x64, 0x06, 0x4c, 0x4c, 0x4c, 0x06, + 0x4d, 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x20, + 0x64, 0x08, 0x4d, 0x4d, 0x4d, 0x64, 0x10, 0x45, + 0x2c, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x0a, + 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0c, 0x4d, 0x4d, + 0x4d, 0x4d, 0x20, 0x64, 0x0a, 0x4d, 0x4d, 0x4d, + 0x4d, 0x64, 0x0a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x04, 0x6d, 0x73, 0x02, 0x79, 0x06, 0x4d, 0x2f, + 0x79, 0x04, 0x79, 0x4d, 0x0a, 0x4d, 0x2f, 0x64, + 0x2f, 0x79, 0x06, 0x79, 0x4d, 0x64, 0x10, 0x45, + 0x2c, 0x20, 0x4d, 0x2f, 0x64, 0x2f, 0x79, 0x08, + 0x79, 0x4d, 0x45, 0x64, 0x0a, 0x4d, 0x4d, 0x4d, + 0x20, 0x79, 0x08, 0x79, 0x4d, 0x4d, 0x4d, 0x10, + 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x2c, 0x20, 0x79, + 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x16, 0x45, + 0x2c, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x2c, + 0x20, 0x79, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x45, + 0x64, 0x0c, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, + 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, 0x51, + 0x51, 0x51, 0x20, 0x79, 0x08, 0x79, 0x51, 0x51, + 0x51, 0x0c, 0x51, 0x51, 0x51, 0x51, 0x20, 0x79, + 0x0a, 0x79, 0x51, 0x51, 0x51, 0x51, 0x20, 0x61, + 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, + 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x1e, + 0x45, 0x45, 0x45, 0x45, 0x2c, 0x20, 0x4d, 0x4d, + 0x4d, 0x4d, 0x20, 0x64, 0x2c, 0x20, 0x79, 0x14, + 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x45, 0x45, 0x45, + 0x45, 0x64, 0x12, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, + 0x64, 0x2c, 0x20, 0x79, 0x0c, 0x79, 0x4d, 0x4d, + 0x4d, 0x4d, 0x64, 0x0c, 0x4d, 0x2f, 0x64, 0x2f, + 0x79, 0x79, 0x16, 0x64, 0x61, 0x74, 0x65, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x1c, 0x68, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, + 0x20, 0x7a, 0x7a, 0x7a, 0x7a, 0x12, 0x68, 0x6d, + 0x6d, 0x73, 0x73, 0x7a, 0x7a, 0x7a, 0x7a, 0x16, + 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, + 0x61, 0x20, 0x7a, 0x08, 0x68, 0x6d, 0x73, 0x7a, + 0x16, 0x74, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x73, 0x0e, 0x66, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x73, 0x02, 0x4a, 0x02, 0x46, + 0x02, 0x41, 0x02, 0x53, 0x02, 0x4f, 0x02, 0x4e, + 0x02, 0x44, 0x0c, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x06, 0x4a, 0x61, 0x6e, 0x06, 0x46, 0x65, + 0x62, 0x06, 0x4d, 0x61, 0x72, 0x06, 0x41, 0x70, + 0x72, 0x06, 0x4d, 0x61, 0x79, 0x06, 0x4a, 0x75, + 0x6e, 0x06, 0x4a, 0x75, 0x6c, 0x06, 0x41, 0x75, + 0x67, 0x06, 0x53, 0x65, 0x70, 0x06, 0x4f, 0x63, + 0x74, 0x06, 0x4e, 0x6f, 0x76, 0x06, 0x44, 0x65, + 0x63, 0x0e, 0x4a, 0x61, 0x6e, 0x75, 0x61, 0x72, + 0x79, 0x10, 0x46, 0x65, 0x62, 0x72, 0x75, 0x61, + 0x72, 0x79, 0x0a, 0x4d, 0x61, 0x72, 0x63, 0x68, + 0x0a, 0x41, 0x70, 0x72, 0x69, 0x6c, 0x08, 0x4a, + 0x75, 0x6e, 0x65, 0x08, 0x4a, 0x75, 0x6c, 0x79, + 0x0c, 0x41, 0x75, 0x67, 0x75, 0x73, 0x74, 0x12, + 0x53, 0x65, 0x70, 0x74, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x0e, 0x4f, 0x63, 0x74, 0x6f, 0x62, 0x65, + 0x72, 0x10, 0x4e, 0x6f, 0x76, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x10, 0x44, 0x65, 0x63, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x0c, 0x6d, 0x6f, 0x6e, 0x74, + 0x68, 0x73, 0x02, 0x54, 0x02, 0x57, 0x06, 0x53, + 0x75, 0x6e, 0x06, 0x4d, 0x6f, 0x6e, 0x06, 0x54, + 0x75, 0x65, 0x06, 0x57, 0x65, 0x64, 0x06, 0x54, + 0x68, 0x75, 0x06, 0x46, 0x72, 0x69, 0x06, 0x53, + 0x61, 0x74, 0x0c, 0x53, 0x75, 0x6e, 0x64, 0x61, + 0x79, 0x0c, 0x4d, 0x6f, 0x6e, 0x64, 0x61, 0x79, + 0x0e, 0x54, 0x75, 0x65, 0x73, 0x64, 0x61, 0x79, + 0x12, 0x57, 0x65, 0x64, 0x6e, 0x65, 0x73, 0x64, + 0x61, 0x79, 0x10, 0x54, 0x68, 0x75, 0x72, 0x73, + 0x64, 0x61, 0x79, 0x0c, 0x46, 0x72, 0x69, 0x64, + 0x61, 0x79, 0x10, 0x53, 0x61, 0x74, 0x75, 0x72, + 0x64, 0x61, 0x79, 0x08, 0x64, 0x61, 0x79, 0x73, + 0x04, 0x42, 0x45, 0x08, 0x65, 0x72, 0x61, 0x73, + 0x04, 0x41, 0x4d, 0x04, 0x61, 0x6d, 0x04, 0x50, + 0x4d, 0x04, 0x70, 0x6d, 0x14, 0x64, 0x61, 0x79, + 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x73, 0x06, + 0x4d, 0x6f, 0x31, 0x06, 0x4d, 0x6f, 0x32, 0x06, + 0x4d, 0x6f, 0x33, 0x06, 0x4d, 0x6f, 0x34, 0x06, + 0x4d, 0x6f, 0x35, 0x06, 0x4d, 0x6f, 0x36, 0x06, + 0x4d, 0x6f, 0x37, 0x06, 0x4d, 0x6f, 0x38, 0x06, + 0x4d, 0x6f, 0x39, 0x08, 0x4d, 0x6f, 0x31, 0x30, + 0x08, 0x4d, 0x6f, 0x31, 0x31, 0x08, 0x4d, 0x6f, + 0x31, 0x32, 0x0c, 0x4d, 0x6f, 0x6e, 0x74, 0x68, + 0x31, 0x0c, 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x32, + 0x0c, 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x33, 0x0c, + 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x34, 0x0c, 0x4d, + 0x6f, 0x6e, 0x74, 0x68, 0x35, 0x0c, 0x4d, 0x6f, + 0x6e, 0x74, 0x68, 0x36, 0x0c, 0x4d, 0x6f, 0x6e, + 0x74, 0x68, 0x37, 0x0c, 0x4d, 0x6f, 0x6e, 0x74, + 0x68, 0x38, 0x0c, 0x4d, 0x6f, 0x6e, 0x74, 0x68, + 0x39, 0x0e, 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x31, + 0x30, 0x0e, 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x31, + 0x31, 0x0e, 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x31, + 0x32, 0x08, 0x54, 0x6f, 0x75, 0x74, 0x08, 0x42, + 0x61, 0x62, 0x61, 0x0a, 0x48, 0x61, 0x74, 0x6f, + 0x72, 0x0a, 0x4b, 0x69, 0x61, 0x68, 0x6b, 0x08, + 0x54, 0x6f, 0x62, 0x61, 0x0c, 0x41, 0x6d, 0x73, + 0x68, 0x69, 0x72, 0x10, 0x42, 0x61, 0x72, 0x61, + 0x6d, 0x68, 0x61, 0x74, 0x12, 0x42, 0x61, 0x72, + 0x61, 0x6d, 0x6f, 0x75, 0x64, 0x61, 0x0e, 0x42, + 0x61, 0x73, 0x68, 0x61, 0x6e, 0x73, 0x0a, 0x50, + 0x61, 0x6f, 0x6e, 0x61, 0x08, 0x45, 0x70, 0x65, + 0x70, 0x0a, 0x4d, 0x65, 0x73, 0x72, 0x61, 0x0a, + 0x4e, 0x61, 0x73, 0x69, 0x65, 0x08, 0x45, 0x52, + 0x41, 0x30, 0x08, 0x45, 0x52, 0x41, 0x31, 0x10, + 0x4d, 0x65, 0x73, 0x6b, 0x65, 0x72, 0x65, 0x6d, + 0x0c, 0x54, 0x65, 0x6b, 0x65, 0x6d, 0x74, 0x0a, + 0x48, 0x65, 0x64, 0x61, 0x72, 0x0c, 0x54, 0x61, + 0x68, 0x73, 0x61, 0x73, 0x06, 0x54, 0x65, 0x72, + 0x0e, 0x59, 0x65, 0x6b, 0x61, 0x74, 0x69, 0x74, + 0x0e, 0x4d, 0x65, 0x67, 0x61, 0x62, 0x69, 0x74, + 0x0c, 0x4d, 0x69, 0x61, 0x7a, 0x69, 0x61, 0x0c, + 0x47, 0x65, 0x6e, 0x62, 0x6f, 0x74, 0x08, 0x53, + 0x65, 0x6e, 0x65, 0x0a, 0x48, 0x61, 0x6d, 0x6c, + 0x65, 0x0e, 0x4e, 0x65, 0x68, 0x61, 0x73, 0x73, + 0x65, 0x0e, 0x50, 0x61, 0x67, 0x75, 0x6d, 0x65, + 0x6e, 0x06, 0x4d, 0x30, 0x31, 0x06, 0x4d, 0x30, + 0x32, 0x06, 0x4d, 0x30, 0x33, 0x06, 0x4d, 0x30, + 0x34, 0x06, 0x4d, 0x30, 0x35, 0x06, 0x4d, 0x30, + 0x36, 0x06, 0x4d, 0x30, 0x37, 0x06, 0x4d, 0x30, + 0x38, 0x06, 0x4d, 0x30, 0x39, 0x06, 0x4d, 0x31, + 0x30, 0x06, 0x4d, 0x31, 0x31, 0x06, 0x4d, 0x31, + 0x32, 0x02, 0x42, 0x06, 0x42, 0x43, 0x45, 0x04, + 0x43, 0x45, 0x04, 0x42, 0x43, 0x04, 0x41, 0x44, + 0x1a, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, + 0x43, 0x68, 0x72, 0x69, 0x73, 0x74, 0x16, 0x41, + 0x6e, 0x6e, 0x6f, 0x20, 0x44, 0x6f, 0x6d, 0x69, + 0x6e, 0x69, 0x22, 0x42, 0x65, 0x66, 0x6f, 0x72, + 0x65, 0x20, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x20, 0x45, 0x72, 0x61, 0x14, 0x43, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x20, 0x45, 0x72, 0x61, 0x0c, + 0x54, 0x69, 0x73, 0x68, 0x72, 0x69, 0x0e, 0x48, + 0x65, 0x73, 0x68, 0x76, 0x61, 0x6e, 0x0c, 0x4b, + 0x69, 0x73, 0x6c, 0x65, 0x76, 0x0a, 0x54, 0x65, + 0x76, 0x65, 0x74, 0x0c, 0x53, 0x68, 0x65, 0x76, + 0x61, 0x74, 0x0c, 0x41, 0x64, 0x61, 0x72, 0x20, + 0x49, 0x08, 0x41, 0x64, 0x61, 0x72, 0x0a, 0x4e, + 0x69, 0x73, 0x61, 0x6e, 0x08, 0x49, 0x79, 0x61, + 0x72, 0x0a, 0x53, 0x69, 0x76, 0x61, 0x6e, 0x0a, + 0x54, 0x61, 0x6d, 0x75, 0x7a, 0x04, 0x41, 0x76, + 0x08, 0x45, 0x6c, 0x75, 0x6c, 0x0e, 0x41, 0x64, + 0x61, 0x72, 0x20, 0x49, 0x49, 0x0e, 0x43, 0x68, + 0x61, 0x69, 0x74, 0x72, 0x61, 0x10, 0x56, 0x61, + 0x69, 0x73, 0x61, 0x6b, 0x68, 0x61, 0x10, 0x4a, + 0x79, 0x61, 0x69, 0x73, 0x74, 0x68, 0x61, 0x0c, + 0x41, 0x73, 0x61, 0x64, 0x68, 0x61, 0x0e, 0x53, + 0x72, 0x61, 0x76, 0x61, 0x6e, 0x61, 0x0c, 0x42, + 0x68, 0x61, 0x64, 0x72, 0x61, 0x0c, 0x41, 0x73, + 0x76, 0x69, 0x6e, 0x61, 0x0e, 0x4b, 0x61, 0x72, + 0x74, 0x69, 0x6b, 0x61, 0x14, 0x41, 0x67, 0x72, + 0x61, 0x68, 0x61, 0x79, 0x61, 0x6e, 0x61, 0x0a, + 0x50, 0x61, 0x75, 0x73, 0x61, 0x0a, 0x4d, 0x61, + 0x67, 0x68, 0x61, 0x10, 0x50, 0x68, 0x61, 0x6c, + 0x67, 0x75, 0x6e, 0x61, 0x08, 0x53, 0x61, 0x6b, + 0x61, 0x08, 0x4d, 0x75, 0x68, 0x2e, 0x08, 0x53, + 0x61, 0x66, 0x2e, 0x0c, 0x52, 0x61, 0x62, 0x2e, + 0x20, 0x49, 0x0e, 0x52, 0x61, 0x62, 0x2e, 0x20, + 0x49, 0x49, 0x0c, 0x4a, 0x75, 0x6d, 0x2e, 0x20, + 0x49, 0x0e, 0x4a, 0x75, 0x6d, 0x2e, 0x20, 0x49, + 0x49, 0x08, 0x52, 0x61, 0x6a, 0x2e, 0x08, 0x53, + 0x68, 0x61, 0x2e, 0x08, 0x52, 0x61, 0x6d, 0x2e, + 0x0a, 0x53, 0x68, 0x61, 0x77, 0x2e, 0x11, 0x44, + 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, + 0x00, 0x2d, 0x00, 0x51, 0x00, 0x2e, 0x00, 0x11, + 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, + 0x6c, 0x00, 0x2d, 0x00, 0x48, 0x00, 0x2e, 0x00, + 0x10, 0x4d, 0x75, 0x68, 0x61, 0x72, 0x72, 0x61, + 0x6d, 0x0a, 0x53, 0x61, 0x66, 0x61, 0x72, 0x0f, + 0x52, 0x00, 0x61, 0x00, 0x62, 0x00, 0x69, 0x00, + 0xbb, 0x02, 0x20, 0x00, 0x49, 0x00, 0x11, 0x52, + 0x00, 0x61, 0x00, 0x62, 0x00, 0x69, 0x00, 0xbb, + 0x02, 0x20, 0x00, 0x49, 0x00, 0x49, 0x00, 0x10, + 0x4a, 0x75, 0x6d, 0x61, 0x64, 0x61, 0x20, 0x49, + 0x12, 0x4a, 0x75, 0x6d, 0x61, 0x64, 0x61, 0x20, + 0x49, 0x49, 0x0a, 0x52, 0x61, 0x6a, 0x61, 0x62, + 0x0f, 0x53, 0x00, 0x68, 0x00, 0x61, 0x00, 0xbb, + 0x02, 0x62, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x0e, + 0x52, 0x61, 0x6d, 0x61, 0x64, 0x61, 0x6e, 0x0e, + 0x53, 0x68, 0x61, 0x77, 0x77, 0x61, 0x6c, 0x19, + 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, + 0x6c, 0x00, 0x2d, 0x00, 0x51, 0x00, 0x69, 0x00, + 0xbb, 0x02, 0x64, 0x00, 0x61, 0x00, 0x68, 0x00, + 0x19, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, + 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x48, 0x00, 0x69, + 0x00, 0x6a, 0x00, 0x6a, 0x00, 0x61, 0x00, 0x68, + 0x00, 0x04, 0x41, 0x48, 0x1f, 0x54, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x36, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x36, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x13, 0x20, 0x36, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x36, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x29, 0x00, 0x21, + 0x53, 0x00, 0x68, 0x00, 0x75, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x57, + 0x00, 0x61, 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x1f, 0x52, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x1d, 0x59, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, + 0x4a, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6b, 0x00, + 0x61, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x2d, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x2d, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x2b, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x2d, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, 0x2d, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x2a, 0x4a, 0x69, 0x6e, 0x67, 0x6f, 0x2d, + 0x6b, 0x65, 0x69, 0x75, 0x6e, 0x20, 0x28, 0x37, + 0x36, 0x37, 0x2d, 0x37, 0x37, 0x30, 0x29, 0x1d, + 0x48, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x37, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, 0x44, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x64, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x38, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x4d, 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x38, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4a, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x61, 0x00, 0x6a, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, + 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x53, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x20, 0x54, 0x65, + 0x6e, 0x2d, 0x61, 0x6e, 0x20, 0x28, 0x38, 0x35, + 0x37, 0x2d, 0x38, 0x35, 0x39, 0x29, 0x1f, 0x4a, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, + 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, 0x6e, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x34, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1b, 0x4c, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4b, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x1d, 0x41, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1d, + 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x4a, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x29, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, + 0x4a, 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x29, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, + 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4c, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x25, 0x4a, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x24, 0x54, 0x65, 0x6e, 0x2d, 0x65, 0x69, + 0x20, 0x28, 0x31, 0x31, 0x31, 0x30, 0x2d, 0x31, + 0x31, 0x31, 0x33, 0x29, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, + 0x4d, 0x01, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, + 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x6a, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x48, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x45, + 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, + 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6d, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4a, + 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x59, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x21, 0x4a, 0x00, 0x75, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x29, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4a, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x29, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, + 0x4a, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x27, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x75, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x29, 0x52, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x4e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, + 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, 0x00, + 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1f, 0x4c, 0x01, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x74, 0x00, 0x73, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x27, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x45, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x21, 0x4d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, 0x69, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x27, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x21, 0x45, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x61, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x41, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, 0x0a, + 0x4d, 0x65, 0x69, 0x6a, 0x69, 0x0d, 0x54, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x0b, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x0c, 0x48, 0x65, + 0x69, 0x73, 0x65, 0x69, 0x12, 0x46, 0x61, 0x72, + 0x76, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x16, 0x4f, + 0x72, 0x64, 0x69, 0x62, 0x65, 0x68, 0x65, 0x73, + 0x68, 0x74, 0x0e, 0x4b, 0x68, 0x6f, 0x72, 0x64, + 0x61, 0x64, 0x06, 0x54, 0x69, 0x72, 0x0c, 0x4d, + 0x6f, 0x72, 0x64, 0x61, 0x64, 0x12, 0x53, 0x68, + 0x61, 0x68, 0x72, 0x69, 0x76, 0x61, 0x72, 0x08, + 0x4d, 0x65, 0x68, 0x72, 0x08, 0x41, 0x62, 0x61, + 0x6e, 0x08, 0x41, 0x7a, 0x61, 0x72, 0x06, 0x44, + 0x65, 0x79, 0x0c, 0x42, 0x61, 0x68, 0x6d, 0x61, + 0x6e, 0x0c, 0x45, 0x73, 0x66, 0x61, 0x6e, 0x64, + 0x04, 0x41, 0x50, 0x1a, 0x42, 0x65, 0x66, 0x6f, + 0x72, 0x65, 0x20, 0x52, 0x2e, 0x4f, 0x2e, 0x43, + 0x2e, 0x0c, 0x4d, 0x69, 0x6e, 0x67, 0x75, 0x6f, + 0x12, 0x63, 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, + 0x72, 0x73, 0x08, 0x64, 0x61, 0x74, 0x65, 0x08, + 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, 0x75, 0x10, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0x1e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, + 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, + 0x26, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x6e, 0x65, 0x67, + 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, + 0x74, 0x65, 0x72, 0x6e, 0x0e, 0x64, 0x65, 0x63, + 0x69, 0x6d, 0x61, 0x6c, 0x24, 0x7b, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x3a, + 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, + 0x67, 0x6e, 0x7d, 0x7b, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x63, 0x79, 0x7d, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x10, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x2a, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x7b, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x40, 0x7b, 0x6d, 0x69, + 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x0e, 0x70, 0x65, + 0x72, 0x63, 0x65, 0x6e, 0x74, 0x10, 0x70, 0x61, + 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x02, 0x2e, + 0x02, 0x2c, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x06, 0x4e, 0x61, 0x4e, 0x06, 0x6e, 0x61, 0x6e, + 0x02, 0x2b, 0x10, 0x70, 0x6c, 0x75, 0x73, 0x53, + 0x69, 0x67, 0x6e, 0x02, 0x2d, 0x12, 0x6d, 0x69, + 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, + 0x25, 0x16, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, + 0x74, 0x53, 0x69, 0x67, 0x6e, 0x03, 0x1e, 0x22, + 0x10, 0x69, 0x6e, 0x66, 0x69, 0x6e, 0x69, 0x74, + 0x79, 0x0e, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, + 0x73, 0x04, 0x41, 0x24, 0x06, 0x41, 0x55, 0x44, + 0x04, 0x52, 0x24, 0x06, 0x42, 0x52, 0x4c, 0x06, + 0x43, 0x41, 0x24, 0x06, 0x43, 0x41, 0x44, 0x06, + 0x43, 0x4e, 0xa5, 0x06, 0x43, 0x4e, 0x59, 0x03, + 0xac, 0x20, 0x06, 0x45, 0x55, 0x52, 0x02, 0xa3, + 0x06, 0x47, 0x42, 0x50, 0x06, 0x48, 0x4b, 0x24, + 0x06, 0x48, 0x4b, 0x44, 0x03, 0xaa, 0x20, 0x06, + 0x49, 0x4c, 0x53, 0x03, 0xb9, 0x20, 0x06, 0x49, + 0x4e, 0x52, 0x02, 0xa5, 0x06, 0x4a, 0x50, 0x59, + 0x03, 0xa9, 0x20, 0x06, 0x4b, 0x52, 0x57, 0x06, + 0x4d, 0x58, 0x24, 0x06, 0x4d, 0x58, 0x4e, 0x06, + 0x4e, 0x5a, 0x24, 0x06, 0x4e, 0x5a, 0x44, 0x06, + 0x4e, 0x54, 0x24, 0x06, 0x54, 0x57, 0x44, 0x02, + 0x24, 0x06, 0x55, 0x53, 0x44, 0x03, 0xab, 0x20, + 0x06, 0x56, 0x4e, 0x44, 0x08, 0x46, 0x43, 0x46, + 0x41, 0x06, 0x58, 0x41, 0x46, 0x06, 0x45, 0x43, + 0x24, 0x06, 0x58, 0x43, 0x44, 0x06, 0x43, 0x46, + 0x41, 0x06, 0x58, 0x4f, 0x46, 0x08, 0x43, 0x46, + 0x50, 0x46, 0x06, 0x58, 0x50, 0x46, 0x14, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, + 0x73, 0x52, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, + 0x6e, 0x74, 0x6c, 0x2f, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, + 0x6a, 0x73, 0x6f, 0x6e, 0x70, 0x2f, 0x65, 0x6e, + 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, + 0x01, 0x00, 0x01, 0x00, 0x27, 0x00, 0x89, 0x01, + 0xd4, 0x6a, 0x01, 0xa0, 0x01, 0x00, 0x00, 0x00, + 0x39, 0xd0, 0x00, 0x00, 0x00, 0x43, 0xd1, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd2, 0x00, 0x00, 0x00, + 0x4d, 0xd3, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd4, + 0x00, 0x00, 0x00, 0x04, 0xd5, 0x00, 0x00, 0x00, + 0x04, 0xd6, 0x00, 0x00, 0x00, 0x04, 0xd7, 0x00, + 0x00, 0x00, 0x04, 0xd8, 0x00, 0x00, 0x00, 0x04, + 0xd9, 0x00, 0x00, 0x00, 0x04, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xdb, 0x00, 0x00, 0x00, 0x04, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, + 0x04, 0xde, 0x00, 0x00, 0x00, 0x04, 0xdf, 0x00, + 0x00, 0x00, 0x04, 0xe0, 0x00, 0x00, 0x00, 0x04, + 0xe1, 0x00, 0x00, 0x00, 0x04, 0xe2, 0x00, 0x00, + 0x00, 0x26, 0x0f, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x00, 0x0a, 0x4d, 0xe4, 0x00, 0x00, 0x00, 0x0a, + 0x4d, 0xe5, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, + 0x00, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe8, 0x00, + 0x00, 0x00, 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x04, 0xe9, 0x00, 0x00, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xec, 0x00, 0x00, 0x00, 0x4d, 0xec, 0x00, 0x00, + 0x00, 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, 0xee, + 0x00, 0x00, 0x00, 0x04, 0xef, 0x00, 0x00, 0x00, + 0x4d, 0xf0, 0x00, 0x00, 0x00, 0x04, 0xf1, 0x00, + 0x00, 0x00, 0x4d, 0xf2, 0x00, 0x00, 0x00, 0x04, + 0xf3, 0x00, 0x00, 0x00, 0x4d, 0xf4, 0x00, 0x00, + 0x00, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0xf6, + 0x00, 0x00, 0x00, 0x04, 0xf7, 0x00, 0x00, 0x00, + 0x4d, 0xf8, 0x00, 0x00, 0x00, 0x04, 0xf9, 0x00, + 0x00, 0x00, 0x4d, 0xfa, 0x00, 0x00, 0x00, 0x04, + 0xfb, 0x00, 0x00, 0x00, 0x4d, 0xfc, 0x00, 0x00, + 0x00, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, 0xfe, + 0x00, 0x00, 0x00, 0x04, 0xff, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x01, 0x00, 0x00, 0x04, 0x01, 0x01, + 0x00, 0x00, 0x4d, 0x02, 0x01, 0x00, 0x00, 0x04, + 0x03, 0x01, 0x00, 0x00, 0x4d, 0x04, 0x01, 0x00, + 0x00, 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, 0x06, + 0x01, 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, 0x00, + 0x4d, 0x08, 0x01, 0x00, 0x00, 0x04, 0x09, 0x01, + 0x00, 0x00, 0x4d, 0x0a, 0x01, 0x00, 0x00, 0x04, + 0x0b, 0x01, 0x00, 0x00, 0x4d, 0x0c, 0x01, 0x00, + 0x00, 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, 0x0e, + 0x01, 0x00, 0x00, 0x04, 0x0f, 0x01, 0x00, 0x00, + 0x4d, 0x10, 0x01, 0x00, 0x00, 0x04, 0x11, 0x01, + 0x00, 0x00, 0x4d, 0x12, 0x01, 0x00, 0x00, 0x04, + 0x13, 0x01, 0x00, 0x00, 0x4d, 0x14, 0x01, 0x00, + 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, 0x16, + 0x01, 0x00, 0x00, 0x04, 0x17, 0x01, 0x00, 0x00, + 0x4d, 0x18, 0x01, 0x00, 0x00, 0x04, 0x19, 0x01, + 0x00, 0x00, 0x4d, 0x1a, 0x01, 0x00, 0x00, 0x04, + 0x1b, 0x01, 0x00, 0x00, 0x4d, 0x1c, 0x01, 0x00, + 0x00, 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, 0x1e, + 0x01, 0x00, 0x00, 0x04, 0x1f, 0x01, 0x00, 0x00, + 0x4d, 0x20, 0x01, 0x00, 0x00, 0x04, 0x21, 0x01, + 0x00, 0x00, 0x4d, 0x22, 0x01, 0x00, 0x00, 0x04, + 0x23, 0x01, 0x00, 0x00, 0x4d, 0x24, 0x01, 0x00, + 0x00, 0x04, 0x25, 0x01, 0x00, 0x00, 0x4d, 0x25, + 0x01, 0x00, 0x00, 0x04, 0x26, 0x01, 0x00, 0x00, + 0x4d, 0x27, 0x01, 0x00, 0x00, 0x04, 0x28, 0x01, + 0x00, 0x00, 0x4d, 0x29, 0x01, 0x00, 0x00, 0x04, + 0x2a, 0x01, 0x00, 0x00, 0x4d, 0x2b, 0x01, 0x00, + 0x00, 0x04, 0x2c, 0x01, 0x00, 0x00, 0x4d, 0x2d, + 0x01, 0x00, 0x00, 0x04, 0x2e, 0x01, 0x00, 0x00, + 0x4d, 0x2f, 0x01, 0x00, 0x00, 0x04, 0x30, 0x01, + 0x00, 0x00, 0x4d, 0x31, 0x01, 0x00, 0x00, 0x04, + 0x32, 0x01, 0x00, 0x00, 0x4d, 0x33, 0x01, 0x00, + 0x00, 0x04, 0x34, 0x01, 0x00, 0x00, 0x4d, 0x35, + 0x01, 0x00, 0x00, 0x04, 0x36, 0x01, 0x00, 0x00, + 0x4d, 0x37, 0x01, 0x00, 0x00, 0x4d, 0x38, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x39, 0x01, 0x00, 0x00, + 0x4d, 0x3a, 0x01, 0x00, 0x00, 0x04, 0x3b, 0x01, + 0x00, 0x00, 0x4d, 0x3c, 0x01, 0x00, 0x00, 0x04, + 0x2e, 0x01, 0x00, 0x00, 0x4d, 0x2f, 0x01, 0x00, + 0x00, 0x04, 0x3d, 0x01, 0x00, 0x00, 0x4d, 0x29, + 0x01, 0x00, 0x00, 0x4d, 0x3e, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x3f, 0x01, 0x00, 0x00, 0x4d, 0x40, + 0x01, 0x00, 0x00, 0x04, 0x41, 0x01, 0x00, 0x00, + 0x4d, 0x42, 0x01, 0x00, 0x00, 0x04, 0x09, 0x01, + 0x00, 0x00, 0x4d, 0x0a, 0x01, 0x00, 0x00, 0x04, + 0x05, 0x01, 0x00, 0x00, 0x4d, 0x06, 0x01, 0x00, + 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x4d, 0x44, + 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x0b, 0x04, 0x45, + 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, + 0x45, 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x77, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, + 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0xd5, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x00, 0xbe, 0x01, + 0xbe, 0x02, 0xbe, 0x03, 0xbe, 0x04, 0xbe, 0x05, + 0xbe, 0x06, 0xbe, 0x07, 0xbe, 0x08, 0xbe, 0x09, + 0xbe, 0x0a, 0xbe, 0x0b, 0x26, 0x0c, 0x00, 0x4d, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, + 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, + 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, + 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, + 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, + 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, + 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, + 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, + 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, + 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, + 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, + 0x94, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, + 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x0c, 0xbe, 0x0d, 0xbe, 0x0e, 0xbe, + 0x0f, 0xbe, 0x10, 0xbe, 0x11, 0xbe, 0x12, 0xbe, + 0x13, 0xbe, 0x14, 0xbe, 0x15, 0xbe, 0x16, 0xbe, + 0x17, 0xbe, 0x18, 0x26, 0x0d, 0x00, 0x4d, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, + 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, + 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, + 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, + 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, + 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, + 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, + 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, + 0xa1, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, + 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, + 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, + 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, + 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, + 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, + 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, + 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, + 0x04, 0xa1, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, + 0xa3, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, + 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa2, + 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, + 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x4d, + 0xd7, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x19, + 0xbe, 0x1a, 0xbe, 0x1b, 0xbe, 0x1c, 0xbe, 0x1d, + 0xbe, 0x1e, 0xbe, 0x1f, 0xbe, 0x20, 0xbe, 0x21, + 0xbe, 0x22, 0xbe, 0x23, 0xbe, 0x24, 0x26, 0x0c, + 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, + 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, + 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, + 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, + 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, + 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, + 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, + 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, + 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, + 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, + 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, + 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x64, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x4d, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x4d, + 0x7c, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x25, 0xbe, 0x26, 0xbe, + 0x27, 0xbe, 0x28, 0xbe, 0x29, 0xbe, 0x2a, 0xbe, + 0x2b, 0xbe, 0x2c, 0xbe, 0x2d, 0xbe, 0x2e, 0xbe, + 0x2f, 0xbe, 0x30, 0xbe, 0x31, 0x26, 0x0d, 0x00, + 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, + 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, + 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, + 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, + 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, + 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, + 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, + 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, + 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, 0x26, 0x0d, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa4, + 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, + 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, + 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, + 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, + 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, + 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, + 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, + 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x64, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x46, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x75, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xa2, 0x01, 0x00, + 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0xa2, + 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x4d, + 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x32, 0xbe, 0x33, 0xbe, 0x34, 0xbe, 0x35, + 0xbe, 0x36, 0xbe, 0x37, 0xbe, 0x38, 0xbe, 0x39, + 0xbe, 0x3a, 0xbe, 0x3b, 0xbe, 0x3c, 0xbe, 0x3d, + 0xbe, 0x3e, 0x26, 0x0d, 0x00, 0x4d, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, + 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, + 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, + 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, + 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, + 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, + 0xad, 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, + 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, + 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, + 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, + 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, + 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, + 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, + 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, + 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, + 0xb0, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0xa2, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, + 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x3f, + 0xbe, 0x40, 0xbe, 0x41, 0xbe, 0x42, 0xbe, 0x43, + 0xbe, 0x44, 0xbe, 0x45, 0xbe, 0x46, 0xbe, 0x47, + 0xbe, 0x48, 0xbe, 0x49, 0xbe, 0x4a, 0x26, 0x0c, + 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0xb1, + 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, + 0x04, 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, + 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, 0x04, + 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, + 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, 0x04, 0xb9, + 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, + 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, 0x04, + 0xb2, 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, + 0x00, 0x04, 0xb4, 0x01, 0x00, 0x00, 0x04, 0xb5, + 0x01, 0x00, 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, + 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, + 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, 0x04, + 0xba, 0x01, 0x00, 0x00, 0x04, 0xbb, 0x01, 0x00, + 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x64, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xa2, 0x01, 0x00, 0x00, + 0x04, 0xa3, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, + 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, + 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x45, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, + 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x16, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xbd, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, + 0xbf, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, + 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, 0x04, 0xbe, + 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, + 0x26, 0x04, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xc2, 0x01, 0x00, 0x00, 0x04, 0xc3, 0x01, + 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, 0x04, + 0xc5, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x78, 0x01, 0x00, 0x00, 0x4d, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, + 0x01, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x4b, 0xbe, 0x4c, 0xbe, 0x4d, + 0xbe, 0x4e, 0xbe, 0x4f, 0xbe, 0x50, 0xbe, 0x51, + 0xbe, 0x52, 0xbe, 0x53, 0xbe, 0x54, 0xbe, 0x55, + 0xbe, 0x56, 0xbe, 0x57, 0xbe, 0x58, 0x26, 0x0e, + 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0xc6, + 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, + 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, + 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, 0x04, + 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, + 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, + 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, + 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, + 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, + 0xd3, 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, + 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, + 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, + 0x04, 0xca, 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, + 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, + 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, + 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, + 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, + 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, + 0x00, 0x00, 0x26, 0x0e, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x77, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, + 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x59, 0xbe, 0x5a, + 0xbe, 0x5b, 0xbe, 0x5c, 0xbe, 0x5d, 0xbe, 0x5e, + 0xbe, 0x5f, 0xbe, 0x60, 0xbe, 0x61, 0xbe, 0x62, + 0xbe, 0x63, 0xbe, 0x64, 0x26, 0x0c, 0x00, 0x4d, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, + 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, + 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, + 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, + 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, + 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, + 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, + 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, 0xd5, 0x01, + 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, 0x04, + 0xd7, 0x01, 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, + 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, + 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, + 0x04, 0xdc, 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, + 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, + 0xdf, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xe0, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0xe0, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, + 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x65, + 0xbe, 0x66, 0xbe, 0x67, 0xbe, 0x68, 0xbe, 0x69, + 0xbe, 0x6a, 0xbe, 0x6b, 0xbe, 0x6c, 0xbe, 0x6d, + 0xbe, 0x6e, 0xbe, 0x6f, 0xbe, 0x70, 0x26, 0x0c, + 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0xe1, + 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, + 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, + 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, + 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, + 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, + 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, + 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, + 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, + 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, + 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, + 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, + 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, + 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, + 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x64, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xf9, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0xf9, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xf9, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x4d, + 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x71, 0xbe, 0x72, 0xbe, 0x73, 0xbe, 0x74, + 0xbe, 0x75, 0xbe, 0x76, 0xbe, 0x77, 0xbe, 0x78, + 0xbe, 0x79, 0xbe, 0x7a, 0xbe, 0x7b, 0xbe, 0x7c, + 0x26, 0x0c, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, + 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, + 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, + 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, + 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, + 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, + 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, + 0xec, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, + 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, + 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, + 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, + 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, + 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, + 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, + 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x64, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x75, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xf9, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xf9, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x78, 0x01, 0x00, 0x00, 0x4d, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, + 0x01, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x16, + 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, + 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, + 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x64, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xfa, 0x01, 0x00, 0x00, + 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, + 0x00, 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, + 0xfe, 0x01, 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, + 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, + 0x02, 0x00, 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, + 0x04, 0x03, 0x02, 0x00, 0x00, 0x04, 0x04, 0x02, + 0x00, 0x00, 0x04, 0x05, 0x02, 0x00, 0x00, 0x04, + 0x06, 0x02, 0x00, 0x00, 0x04, 0x07, 0x02, 0x00, + 0x00, 0x04, 0x08, 0x02, 0x00, 0x00, 0x04, 0x09, + 0x02, 0x00, 0x00, 0x04, 0x0a, 0x02, 0x00, 0x00, + 0x04, 0x0b, 0x02, 0x00, 0x00, 0x04, 0x0c, 0x02, + 0x00, 0x00, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x04, + 0x0e, 0x02, 0x00, 0x00, 0x04, 0x0f, 0x02, 0x00, + 0x00, 0x04, 0x10, 0x02, 0x00, 0x00, 0x04, 0x11, + 0x02, 0x00, 0x00, 0x04, 0x12, 0x02, 0x00, 0x00, + 0x04, 0x13, 0x02, 0x00, 0x00, 0x04, 0x14, 0x02, + 0x00, 0x00, 0x04, 0x15, 0x02, 0x00, 0x00, 0x04, + 0x16, 0x02, 0x00, 0x00, 0x04, 0x17, 0x02, 0x00, + 0x00, 0x04, 0x18, 0x02, 0x00, 0x00, 0x04, 0x19, + 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, 0x1a, + 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, + 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x21, 0x00, + 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, + 0x22, 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, + 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, 0x1e, + 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, + 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, + 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, + 0x26, 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, + 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, 0x22, + 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, + 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, + 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, + 0x2a, 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, + 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, 0x26, + 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, + 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, + 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, + 0x2e, 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, + 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, 0x2a, + 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, + 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, + 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, + 0x32, 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, + 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, 0x2e, + 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, + 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, + 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, + 0x36, 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, + 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, 0x32, + 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, + 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, + 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, + 0x3a, 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, + 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, 0x36, + 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, + 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, + 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, + 0x3e, 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, + 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, 0x3a, + 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, + 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, + 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, + 0x42, 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, + 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, 0x3e, + 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, + 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, + 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, + 0x46, 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, + 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, 0x42, + 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, + 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, + 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, + 0x4a, 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, + 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, 0x46, + 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, + 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, + 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, + 0x4e, 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, + 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, 0x4a, + 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, + 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, + 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, + 0x52, 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, + 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, 0x4e, + 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, + 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, + 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, + 0x56, 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, + 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, 0x52, + 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, + 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, + 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, + 0x5a, 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, + 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, 0x56, + 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, + 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, + 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, + 0x5e, 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, + 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, 0x5a, + 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, + 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, + 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, + 0x62, 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, + 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, 0x5e, + 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, + 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, + 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, + 0x66, 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, + 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, 0x62, + 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, + 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, + 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, + 0x6a, 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, + 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, 0x66, + 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, + 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, + 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, + 0x6e, 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, + 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, 0x6a, + 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, + 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, + 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, + 0x72, 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, + 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, 0x6e, + 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, + 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, + 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, + 0x76, 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, + 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, 0x72, + 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, + 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, + 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, + 0x7a, 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, + 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, 0x76, + 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, + 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, + 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, + 0x7e, 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, + 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, 0x7a, + 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, + 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, + 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, + 0x82, 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, + 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, 0x7e, + 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, + 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, + 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, + 0x86, 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, + 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, 0x82, + 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, + 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, + 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, + 0x8a, 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, + 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, 0x86, + 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, + 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, + 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, + 0x8e, 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, + 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, 0x8a, + 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, + 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, + 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, + 0x92, 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, + 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, 0x8e, + 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, + 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, + 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, + 0x96, 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, + 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, 0x92, + 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, + 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, + 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, + 0x9a, 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, + 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, 0x96, + 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, + 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, + 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, + 0x9e, 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, + 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, 0x9a, + 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, + 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, + 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, + 0xa2, 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, + 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, 0x9e, + 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, + 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, + 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, + 0xa6, 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, + 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, 0xa2, + 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, + 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, + 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, + 0xaa, 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, + 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, 0xa6, + 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, + 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, + 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, + 0xae, 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, + 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, 0xaa, + 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, + 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, + 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, + 0xb2, 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, + 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, 0xae, + 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, + 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, + 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, + 0xb6, 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, + 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, 0xb2, + 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, + 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, + 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, + 0xba, 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, + 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, 0xb6, + 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, + 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, + 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, + 0xbe, 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, + 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, 0xba, + 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, + 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, + 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, + 0xc2, 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, + 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, 0xbe, + 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, + 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, + 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, + 0xc6, 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, + 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, 0xc2, + 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, + 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, + 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, + 0xca, 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, + 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, 0xc6, + 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, + 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, + 0x00, 0x80, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, + 0xce, 0x00, 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, + 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, 0xca, + 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, + 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, + 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, 0x00, 0x4d, + 0xd2, 0x00, 0x00, 0x80, 0x04, 0xcd, 0x02, 0x00, + 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, 0xce, + 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, + 0x04, 0xcf, 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, + 0x00, 0x80, 0x04, 0xd0, 0x02, 0x00, 0x00, 0x4d, + 0xd6, 0x00, 0x00, 0x80, 0x04, 0xd1, 0x02, 0x00, + 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, 0xd2, + 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, + 0x04, 0xd3, 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, + 0x00, 0x80, 0x04, 0xd4, 0x02, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x80, 0x04, 0xd5, 0x02, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, 0xd6, + 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, + 0x04, 0xd7, 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x80, 0x04, 0xd8, 0x02, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x80, 0x04, 0xd9, 0x02, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, 0xda, + 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, + 0x04, 0xdb, 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x80, 0x04, 0xdc, 0x02, 0x00, 0x00, 0x4d, + 0xe2, 0x00, 0x00, 0x80, 0x04, 0xdd, 0x02, 0x00, + 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, 0xde, + 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, + 0x04, 0xdf, 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, + 0x00, 0x80, 0x04, 0xe0, 0x02, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x80, 0x04, 0xe1, 0x02, 0x00, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, 0x16, + 0x01, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x4d, 0xe9, 0x00, + 0x00, 0x80, 0x04, 0x48, 0x01, 0x00, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x80, 0x04, 0x04, 0x01, 0x00, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, + 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, + 0x00, 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, + 0xfe, 0x01, 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, + 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, + 0x02, 0x00, 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, + 0x04, 0x03, 0x02, 0x00, 0x00, 0x04, 0x04, 0x02, + 0x00, 0x00, 0x04, 0x05, 0x02, 0x00, 0x00, 0x04, + 0x06, 0x02, 0x00, 0x00, 0x04, 0x07, 0x02, 0x00, + 0x00, 0x04, 0x08, 0x02, 0x00, 0x00, 0x04, 0x09, + 0x02, 0x00, 0x00, 0x04, 0x0a, 0x02, 0x00, 0x00, + 0x04, 0x0b, 0x02, 0x00, 0x00, 0x04, 0x0c, 0x02, + 0x00, 0x00, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x04, + 0x0e, 0x02, 0x00, 0x00, 0x04, 0x0f, 0x02, 0x00, + 0x00, 0x04, 0x10, 0x02, 0x00, 0x00, 0x04, 0x11, + 0x02, 0x00, 0x00, 0x04, 0x12, 0x02, 0x00, 0x00, + 0x04, 0x13, 0x02, 0x00, 0x00, 0x04, 0x14, 0x02, + 0x00, 0x00, 0x04, 0x15, 0x02, 0x00, 0x00, 0x04, + 0x16, 0x02, 0x00, 0x00, 0x04, 0x17, 0x02, 0x00, + 0x00, 0x04, 0x18, 0x02, 0x00, 0x00, 0x04, 0x19, + 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, 0x1a, + 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, + 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x21, 0x00, + 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, + 0x22, 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, + 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, 0x1e, + 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, + 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, + 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, + 0x26, 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, + 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, 0x22, + 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, + 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, + 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, + 0x2a, 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, + 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, 0x26, + 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, + 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, + 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, + 0x2e, 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, + 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, 0x2a, + 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, + 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, + 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, + 0x32, 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, + 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, 0x2e, + 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, + 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, + 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, + 0x36, 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, + 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, 0x32, + 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, + 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, + 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, + 0x3a, 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, + 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, 0x36, + 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, + 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, + 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, + 0x3e, 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, + 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, 0x3a, + 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, + 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, + 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, + 0x42, 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, + 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, 0x3e, + 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, + 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, + 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, + 0x46, 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, + 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, 0x42, + 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, + 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, + 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, + 0x4a, 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, + 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, 0x46, + 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, + 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, + 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, + 0x4e, 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, + 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, 0x4a, + 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, + 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, + 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, + 0x52, 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, + 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, 0x4e, + 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, + 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, + 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, + 0x56, 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, + 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, 0x52, + 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, + 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, + 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, + 0x5a, 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, + 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, 0x56, + 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, + 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, + 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, + 0x5e, 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, + 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, 0x5a, + 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, + 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, + 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, + 0x62, 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, + 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, 0x5e, + 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, + 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, + 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, + 0x66, 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, + 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, 0x62, + 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, + 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, + 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, + 0x6a, 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, + 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, 0x66, + 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, + 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, + 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, + 0x6e, 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, + 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, 0x6a, + 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, + 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, + 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, + 0x72, 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, + 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, 0x6e, + 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, + 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, + 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, + 0x76, 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, + 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, 0x72, + 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, + 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, + 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, + 0x7a, 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, + 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, 0x76, + 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, + 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, + 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, + 0x7e, 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, + 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, 0x7a, + 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, + 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, + 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, + 0x82, 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, + 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, 0x7e, + 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, + 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, + 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, + 0x86, 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, + 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, 0x82, + 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, + 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, + 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, + 0x8a, 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, + 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, 0x86, + 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, + 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, + 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, + 0x8e, 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, + 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, 0x8a, + 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, + 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, + 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, + 0x92, 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, + 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, 0x8e, + 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, + 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, + 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, + 0x96, 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, + 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, 0x92, + 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, + 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, + 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, + 0x9a, 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, + 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, 0x96, + 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, + 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, + 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, + 0x9e, 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, + 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, 0x9a, + 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, + 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, + 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, + 0xa2, 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, + 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, 0x9e, + 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, + 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, + 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, + 0xa6, 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, + 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, 0xa2, + 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, + 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, + 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, + 0xaa, 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, + 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, 0xa6, + 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, + 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, + 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, + 0xae, 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, + 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, 0xaa, + 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, + 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, + 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, + 0xb2, 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, + 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, 0xae, + 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, + 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, + 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, + 0xb6, 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, + 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, 0xb2, + 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, + 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, + 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, + 0xba, 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, + 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, 0xb6, + 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, + 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, + 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, + 0xbe, 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, + 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, 0xba, + 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, + 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, + 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, + 0xc2, 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, + 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, 0xbe, + 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, + 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, + 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, + 0xc6, 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, + 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, 0xc2, + 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, + 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, + 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, + 0xca, 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, + 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, 0xc6, + 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, + 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, + 0x00, 0x80, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, + 0xce, 0x00, 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, + 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, 0xca, + 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, + 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, + 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, 0x00, 0x4d, + 0xd2, 0x00, 0x00, 0x80, 0x04, 0xcd, 0x02, 0x00, + 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, 0xce, + 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, + 0x04, 0xcf, 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, + 0x00, 0x80, 0x04, 0xd0, 0x02, 0x00, 0x00, 0x4d, + 0xd6, 0x00, 0x00, 0x80, 0x04, 0xd1, 0x02, 0x00, + 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, 0xd2, + 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, + 0x04, 0xd3, 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, + 0x00, 0x80, 0x04, 0xd4, 0x02, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x80, 0x04, 0xd5, 0x02, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, 0xd6, + 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, + 0x04, 0xd7, 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x80, 0x04, 0xd8, 0x02, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x80, 0x04, 0xd9, 0x02, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, 0xda, + 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, + 0x04, 0xdb, 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x80, 0x04, 0xdc, 0x02, 0x00, 0x00, 0x4d, + 0xe2, 0x00, 0x00, 0x80, 0x04, 0xdd, 0x02, 0x00, + 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, 0xde, + 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, + 0x04, 0xdf, 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, + 0x00, 0x80, 0x04, 0xe0, 0x02, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x80, 0x04, 0xe1, 0x02, 0x00, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, 0xe2, + 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, + 0x04, 0xe3, 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, + 0x00, 0x80, 0x04, 0xe4, 0x02, 0x00, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x80, 0x04, 0xe5, 0x02, 0x00, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, + 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, + 0x00, 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, + 0xfe, 0x01, 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, + 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, + 0x02, 0x00, 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, + 0x04, 0x03, 0x02, 0x00, 0x00, 0x04, 0x04, 0x02, + 0x00, 0x00, 0x04, 0x05, 0x02, 0x00, 0x00, 0x04, + 0x06, 0x02, 0x00, 0x00, 0x04, 0x07, 0x02, 0x00, + 0x00, 0x04, 0x08, 0x02, 0x00, 0x00, 0x04, 0x09, + 0x02, 0x00, 0x00, 0x04, 0x0a, 0x02, 0x00, 0x00, + 0x04, 0x0b, 0x02, 0x00, 0x00, 0x04, 0x0c, 0x02, + 0x00, 0x00, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x04, + 0x0e, 0x02, 0x00, 0x00, 0x04, 0x0f, 0x02, 0x00, + 0x00, 0x04, 0x10, 0x02, 0x00, 0x00, 0x04, 0x11, + 0x02, 0x00, 0x00, 0x04, 0x12, 0x02, 0x00, 0x00, + 0x04, 0x13, 0x02, 0x00, 0x00, 0x04, 0x14, 0x02, + 0x00, 0x00, 0x04, 0x15, 0x02, 0x00, 0x00, 0x04, + 0x16, 0x02, 0x00, 0x00, 0x04, 0x17, 0x02, 0x00, + 0x00, 0x04, 0x18, 0x02, 0x00, 0x00, 0x04, 0x19, + 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, 0x1a, + 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, + 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x21, 0x00, + 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, + 0x22, 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, + 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, 0x1e, + 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, + 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, + 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, + 0x26, 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, + 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, 0x22, + 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, + 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, + 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, + 0x2a, 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, + 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, 0x26, + 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, + 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, + 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, + 0x2e, 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, + 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, 0x2a, + 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, + 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, + 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, + 0x32, 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, + 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, 0x2e, + 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, + 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, + 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, + 0x36, 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, + 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, 0x32, + 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, + 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, + 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, + 0x3a, 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, + 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, 0x36, + 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, + 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, + 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, + 0x3e, 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, + 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, 0x3a, + 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, + 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, + 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, + 0x42, 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, + 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, 0x3e, + 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, + 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, + 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, + 0x46, 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, + 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, 0x42, + 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, + 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, + 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, + 0x4a, 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, + 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, 0x46, + 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, + 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, + 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, + 0x4e, 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, + 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, 0x4a, + 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, + 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, + 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, + 0x52, 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, + 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, 0x4e, + 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, + 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, + 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, + 0x56, 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, + 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, 0x52, + 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, + 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, + 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, + 0x5a, 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, + 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, 0x56, + 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, + 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, + 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, + 0x5e, 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, + 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, 0x5a, + 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, + 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, + 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, + 0x62, 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, + 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, 0x5e, + 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, + 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, + 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, + 0x66, 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, + 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, 0x62, + 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, + 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, + 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, + 0x6a, 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, + 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, 0x66, + 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, + 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, + 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, + 0x6e, 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, + 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, 0x6a, + 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, + 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, + 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, + 0x72, 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, + 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, 0x6e, + 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, + 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, + 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, + 0x76, 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, + 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, 0x72, + 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, + 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, + 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, + 0x7a, 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, + 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, 0x76, + 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, + 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, + 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, + 0x7e, 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, + 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, 0x7a, + 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, + 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, + 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, + 0x82, 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, + 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, 0x7e, + 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, + 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, + 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, + 0x86, 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, + 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, 0x82, + 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, + 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, + 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, + 0x8a, 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, + 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, 0x86, + 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, + 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, + 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, + 0x8e, 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, + 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, 0x8a, + 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, + 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, + 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, + 0x92, 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, + 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, 0x8e, + 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, + 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, + 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, + 0x96, 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, + 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, 0x92, + 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, + 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, + 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, + 0x9a, 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, + 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, 0x96, + 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, + 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, + 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, + 0x9e, 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, + 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, 0x9a, + 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, + 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, + 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, + 0xa2, 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, + 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, 0x9e, + 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, + 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, + 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, + 0xa6, 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, + 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, 0xa2, + 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, + 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, + 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, + 0xaa, 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, + 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, 0xa6, + 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, + 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, + 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, + 0xae, 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, + 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, 0xaa, + 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, + 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, + 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, + 0xb2, 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, + 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, 0xae, + 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, + 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, + 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, + 0xb6, 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, + 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, 0xb2, + 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, + 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, + 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, + 0xba, 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, + 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, 0xb6, + 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, + 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, + 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, + 0xbe, 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, + 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, 0xba, + 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, + 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, + 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, + 0xc2, 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, + 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, 0xbe, + 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, + 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, + 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, + 0xc6, 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, + 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, 0xc2, + 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, + 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, + 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, + 0xca, 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, + 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, 0xc6, + 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, + 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, + 0x00, 0x80, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, + 0xce, 0x00, 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, + 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, 0xca, + 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, + 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, + 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, 0x00, 0x4d, + 0xd2, 0x00, 0x00, 0x80, 0x04, 0xcd, 0x02, 0x00, + 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, 0xce, + 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, + 0x04, 0xcf, 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, + 0x00, 0x80, 0x04, 0xd0, 0x02, 0x00, 0x00, 0x4d, + 0xd6, 0x00, 0x00, 0x80, 0x04, 0xd1, 0x02, 0x00, + 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, 0xd2, + 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, + 0x04, 0xd3, 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, + 0x00, 0x80, 0x04, 0xd4, 0x02, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x80, 0x04, 0xd5, 0x02, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, 0xd6, + 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, + 0x04, 0xd7, 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x80, 0x04, 0xd8, 0x02, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x80, 0x04, 0xd9, 0x02, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, 0xda, + 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, + 0x04, 0xdb, 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x80, 0x04, 0xdc, 0x02, 0x00, 0x00, 0x4d, + 0xe2, 0x00, 0x00, 0x80, 0x04, 0xdd, 0x02, 0x00, + 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, 0xde, + 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, + 0x04, 0xdf, 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, + 0x00, 0x80, 0x04, 0xe0, 0x02, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x80, 0x04, 0xe1, 0x02, 0x00, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, 0xe2, + 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, + 0x04, 0xe3, 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, + 0x00, 0x80, 0x04, 0xe4, 0x02, 0x00, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x80, 0x04, 0xe5, 0x02, 0x00, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x7d, 0xbe, 0x7e, 0xbe, 0x7f, 0xbe, + 0x80, 0xbe, 0x81, 0xbe, 0x82, 0xbe, 0x83, 0xbe, + 0x84, 0xbe, 0x85, 0xbe, 0x86, 0xbe, 0x87, 0xbe, + 0x88, 0x26, 0x0c, 0x00, 0x4d, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0xe6, 0x02, 0x00, 0x00, 0x04, 0xe7, + 0x02, 0x00, 0x00, 0x04, 0xe8, 0x02, 0x00, 0x00, + 0x04, 0xe9, 0x02, 0x00, 0x00, 0x04, 0xea, 0x02, + 0x00, 0x00, 0x04, 0xeb, 0x02, 0x00, 0x00, 0x04, + 0xec, 0x02, 0x00, 0x00, 0x04, 0xed, 0x02, 0x00, + 0x00, 0x04, 0xee, 0x02, 0x00, 0x00, 0x04, 0xef, + 0x02, 0x00, 0x00, 0x04, 0xf0, 0x02, 0x00, 0x00, + 0x04, 0xf1, 0x02, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x02, + 0x00, 0x00, 0x04, 0xe7, 0x02, 0x00, 0x00, 0x04, + 0xe8, 0x02, 0x00, 0x00, 0x04, 0xe9, 0x02, 0x00, + 0x00, 0x04, 0xea, 0x02, 0x00, 0x00, 0x04, 0xeb, + 0x02, 0x00, 0x00, 0x04, 0xec, 0x02, 0x00, 0x00, + 0x04, 0xed, 0x02, 0x00, 0x00, 0x04, 0xee, 0x02, + 0x00, 0x00, 0x04, 0xef, 0x02, 0x00, 0x00, 0x04, + 0xf0, 0x02, 0x00, 0x00, 0x04, 0xf1, 0x02, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x75, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xf2, + 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0xf2, 0x02, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xf2, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x77, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x4d, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x4d, + 0x7c, 0x01, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x45, 0x01, 0x00, 0x00, + 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, + 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x64, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x46, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x75, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xf3, 0x02, 0x00, + 0x00, 0x04, 0xf4, 0x02, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0xf3, + 0x02, 0x00, 0x00, 0x04, 0xf4, 0x02, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xf3, 0x02, 0x00, 0x00, 0x04, 0xf4, 0x02, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x4d, + 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x4d, 0xf5, + 0x02, 0x00, 0x00, 0x4d, 0xf6, 0x02, 0x00, 0x00, + 0x0b, 0x04, 0xf7, 0x02, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xf8, 0x02, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0xf9, 0x02, 0x00, 0x00, 0x4d, 0xfa, 0x02, + 0x00, 0x00, 0x04, 0xfb, 0x02, 0x00, 0x00, 0x4d, + 0xfc, 0x02, 0x00, 0x00, 0x4d, 0xfd, 0x02, 0x00, + 0x00, 0x0b, 0x04, 0xfe, 0x02, 0x00, 0x00, 0x4d, + 0xfa, 0x02, 0x00, 0x00, 0x04, 0xff, 0x02, 0x00, + 0x00, 0x4d, 0xfc, 0x02, 0x00, 0x00, 0x4d, 0x00, + 0x03, 0x00, 0x00, 0x0b, 0x04, 0x01, 0x03, 0x00, + 0x00, 0x4d, 0xfa, 0x02, 0x00, 0x00, 0x04, 0x02, + 0x03, 0x00, 0x00, 0x4d, 0xfc, 0x02, 0x00, 0x00, + 0x4d, 0x03, 0x03, 0x00, 0x00, 0x4d, 0x04, 0x03, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x05, 0x03, 0x00, + 0x00, 0x4d, 0xfd, 0x02, 0x00, 0x00, 0x04, 0x06, + 0x03, 0x00, 0x00, 0x4d, 0x07, 0x03, 0x00, 0x00, + 0x04, 0x08, 0x03, 0x00, 0x00, 0x4d, 0x09, 0x03, + 0x00, 0x00, 0x04, 0x0a, 0x03, 0x00, 0x00, 0x4d, + 0x0b, 0x03, 0x00, 0x00, 0x04, 0x0c, 0x03, 0x00, + 0x00, 0x4d, 0x0d, 0x03, 0x00, 0x00, 0x04, 0x0e, + 0x03, 0x00, 0x00, 0x4d, 0x0f, 0x03, 0x00, 0x00, + 0x04, 0x10, 0x03, 0x00, 0x00, 0x4d, 0x11, 0x03, + 0x00, 0x00, 0x4d, 0xf7, 0x02, 0x00, 0x00, 0x4d, + 0x12, 0x03, 0x00, 0x00, 0x0b, 0x04, 0x13, 0x03, + 0x00, 0x00, 0x4d, 0x14, 0x03, 0x00, 0x00, 0x04, + 0x15, 0x03, 0x00, 0x00, 0x4d, 0x16, 0x03, 0x00, + 0x00, 0x04, 0x17, 0x03, 0x00, 0x00, 0x4d, 0x18, + 0x03, 0x00, 0x00, 0x04, 0x19, 0x03, 0x00, 0x00, + 0x4d, 0x1a, 0x03, 0x00, 0x00, 0x04, 0x1b, 0x03, + 0x00, 0x00, 0x4d, 0x1c, 0x03, 0x00, 0x00, 0x04, + 0x1d, 0x03, 0x00, 0x00, 0x4d, 0x1e, 0x03, 0x00, + 0x00, 0x04, 0x1f, 0x03, 0x00, 0x00, 0x4d, 0x20, + 0x03, 0x00, 0x00, 0x04, 0x21, 0x03, 0x00, 0x00, + 0x4d, 0x22, 0x03, 0x00, 0x00, 0x04, 0x23, 0x03, + 0x00, 0x00, 0x4d, 0x24, 0x03, 0x00, 0x00, 0x04, + 0x25, 0x03, 0x00, 0x00, 0x4d, 0x26, 0x03, 0x00, + 0x00, 0x04, 0x27, 0x03, 0x00, 0x00, 0x4d, 0x28, + 0x03, 0x00, 0x00, 0x04, 0x29, 0x03, 0x00, 0x00, + 0x4d, 0x2a, 0x03, 0x00, 0x00, 0x04, 0x2b, 0x03, + 0x00, 0x00, 0x4d, 0x2c, 0x03, 0x00, 0x00, 0x04, + 0x2d, 0x03, 0x00, 0x00, 0x4d, 0x2e, 0x03, 0x00, + 0x00, 0x04, 0x2f, 0x03, 0x00, 0x00, 0x4d, 0x30, + 0x03, 0x00, 0x00, 0x04, 0x31, 0x03, 0x00, 0x00, + 0x4d, 0x32, 0x03, 0x00, 0x00, 0x04, 0x33, 0x03, + 0x00, 0x00, 0x4d, 0x34, 0x03, 0x00, 0x00, 0x04, + 0x35, 0x03, 0x00, 0x00, 0x4d, 0x36, 0x03, 0x00, + 0x00, 0x04, 0x37, 0x03, 0x00, 0x00, 0x4d, 0x38, + 0x03, 0x00, 0x00, 0x04, 0x39, 0x03, 0x00, 0x00, + 0x4d, 0x3a, 0x03, 0x00, 0x00, 0x4d, 0x3b, 0x03, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x00, 0x24, + 0x01, 0x00, 0xcc, 0x28, 0xf8, 0x0c, 0x01, 0x00, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, + 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, + 0x33, 0x07, 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_en_GB_size = 24840; + +const uint8_t intl_en_GB[24840] = { + 0x01, 0xec, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x0a, 0x65, 0x6e, 0x2d, 0x47, 0x42, 0x0c, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x0e, 0x67, 0x72, + 0x65, 0x67, 0x6f, 0x72, 0x79, 0x10, 0x62, 0x75, + 0x64, 0x64, 0x68, 0x69, 0x73, 0x74, 0x0e, 0x63, + 0x68, 0x69, 0x6e, 0x65, 0x73, 0x65, 0x0c, 0x63, + 0x6f, 0x70, 0x74, 0x69, 0x63, 0x0a, 0x64, 0x61, + 0x6e, 0x67, 0x69, 0x0e, 0x65, 0x74, 0x68, 0x69, + 0x6f, 0x61, 0x61, 0x10, 0x65, 0x74, 0x68, 0x69, + 0x6f, 0x70, 0x69, 0x63, 0x0e, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x69, 0x63, 0x0c, 0x68, 0x65, 0x62, + 0x72, 0x65, 0x77, 0x0c, 0x69, 0x6e, 0x64, 0x69, + 0x61, 0x6e, 0x0e, 0x69, 0x73, 0x6c, 0x61, 0x6d, + 0x69, 0x63, 0x10, 0x69, 0x73, 0x6c, 0x61, 0x6d, + 0x69, 0x63, 0x63, 0x10, 0x6a, 0x61, 0x70, 0x61, + 0x6e, 0x65, 0x73, 0x65, 0x0e, 0x70, 0x65, 0x72, + 0x73, 0x69, 0x61, 0x6e, 0x06, 0x72, 0x6f, 0x63, + 0x04, 0x63, 0x61, 0x0e, 0x68, 0x6f, 0x75, 0x72, + 0x4e, 0x6f, 0x30, 0x0c, 0x68, 0x6f, 0x75, 0x72, + 0x31, 0x32, 0x10, 0x7b, 0x31, 0x7d, 0x2c, 0x20, + 0x7b, 0x30, 0x7d, 0x0a, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x0c, 0x6d, 0x65, 0x64, 0x69, 0x75, 0x6d, + 0x18, 0x7b, 0x31, 0x7d, 0x20, 0x27, 0x61, 0x74, + 0x27, 0x20, 0x7b, 0x30, 0x7d, 0x08, 0x66, 0x75, + 0x6c, 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x02, + 0x64, 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, 0x06, + 0x45, 0x20, 0x64, 0x04, 0x45, 0x64, 0x10, 0x45, + 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x06, + 0x45, 0x68, 0x6d, 0x0e, 0x45, 0x20, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x06, 0x45, 0x48, 0x6d, 0x16, + 0x45, 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x61, 0x08, 0x45, 0x68, 0x6d, 0x73, + 0x14, 0x45, 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x08, 0x45, 0x48, 0x6d, 0x73, + 0x06, 0x79, 0x20, 0x47, 0x04, 0x47, 0x79, 0x0e, + 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x20, 0x47, 0x0a, + 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x12, 0x64, 0x20, + 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x20, 0x47, 0x0c, + 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x18, 0x45, + 0x2c, 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x20, + 0x79, 0x20, 0x47, 0x0e, 0x47, 0x79, 0x4d, 0x4d, + 0x4d, 0x45, 0x64, 0x06, 0x68, 0x20, 0x61, 0x02, + 0x68, 0x04, 0x48, 0x48, 0x02, 0x48, 0x0c, 0x68, + 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x04, 0x68, 0x6d, + 0x0a, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x04, 0x48, + 0x6d, 0x12, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x61, 0x06, 0x68, 0x6d, 0x73, 0x10, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x06, 0x48, 0x6d, 0x73, 0x16, 0x68, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x20, 0x76, + 0x08, 0x68, 0x6d, 0x73, 0x76, 0x14, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x76, + 0x08, 0x48, 0x6d, 0x73, 0x76, 0x10, 0x68, 0x3a, + 0x6d, 0x6d, 0x20, 0x61, 0x20, 0x76, 0x06, 0x68, + 0x6d, 0x76, 0x0e, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x20, 0x76, 0x06, 0x48, 0x6d, 0x76, 0x02, 0x4c, + 0x02, 0x4d, 0x0a, 0x64, 0x64, 0x2f, 0x4d, 0x4d, + 0x04, 0x4d, 0x64, 0x10, 0x45, 0x2c, 0x20, 0x64, + 0x64, 0x2f, 0x4d, 0x4d, 0x06, 0x4d, 0x45, 0x64, + 0x08, 0x4d, 0x4d, 0x64, 0x64, 0x06, 0x4c, 0x4c, + 0x4c, 0x06, 0x4d, 0x4d, 0x4d, 0x0a, 0x64, 0x20, + 0x4d, 0x4d, 0x4d, 0x08, 0x4d, 0x4d, 0x4d, 0x64, + 0x10, 0x45, 0x2c, 0x20, 0x64, 0x20, 0x4d, 0x4d, + 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0c, + 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, 0x4d, + 0x4d, 0x4d, 0x4d, 0x64, 0x0a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x04, 0x6d, 0x73, 0x02, 0x79, 0x08, + 0x4d, 0x4d, 0x2f, 0x79, 0x04, 0x79, 0x4d, 0x0e, + 0x64, 0x64, 0x2f, 0x4d, 0x4d, 0x2f, 0x79, 0x06, + 0x79, 0x4d, 0x64, 0x14, 0x45, 0x2c, 0x20, 0x64, + 0x64, 0x2f, 0x4d, 0x4d, 0x2f, 0x79, 0x08, 0x79, + 0x4d, 0x45, 0x64, 0x0a, 0x4d, 0x4d, 0x4d, 0x20, + 0x79, 0x08, 0x79, 0x4d, 0x4d, 0x4d, 0x0e, 0x64, + 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0a, 0x79, + 0x4d, 0x4d, 0x4d, 0x64, 0x14, 0x45, 0x2c, 0x20, + 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0c, + 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0c, 0x4d, + 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0a, 0x79, 0x4d, + 0x4d, 0x4d, 0x4d, 0x0a, 0x51, 0x51, 0x51, 0x20, + 0x79, 0x08, 0x79, 0x51, 0x51, 0x51, 0x0c, 0x51, + 0x51, 0x51, 0x51, 0x20, 0x79, 0x0a, 0x79, 0x51, + 0x51, 0x51, 0x51, 0x20, 0x61, 0x76, 0x61, 0x69, + 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x73, 0x1c, 0x45, 0x45, 0x45, + 0x45, 0x2c, 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, + 0x4d, 0x20, 0x79, 0x14, 0x79, 0x4d, 0x4d, 0x4d, + 0x4d, 0x45, 0x45, 0x45, 0x45, 0x64, 0x10, 0x64, + 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0c, + 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x16, 0x64, + 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x73, 0x1a, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x7a, 0x7a, 0x7a, 0x7a, + 0x12, 0x68, 0x6d, 0x6d, 0x73, 0x73, 0x7a, 0x7a, + 0x7a, 0x7a, 0x14, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x7a, 0x08, 0x68, 0x6d, + 0x73, 0x7a, 0x16, 0x74, 0x69, 0x6d, 0x65, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x0e, 0x66, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x02, 0x4a, + 0x02, 0x46, 0x02, 0x41, 0x02, 0x53, 0x02, 0x4f, + 0x02, 0x4e, 0x02, 0x44, 0x0c, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x06, 0x4a, 0x61, 0x6e, 0x06, + 0x46, 0x65, 0x62, 0x06, 0x4d, 0x61, 0x72, 0x06, + 0x41, 0x70, 0x72, 0x06, 0x4d, 0x61, 0x79, 0x06, + 0x4a, 0x75, 0x6e, 0x06, 0x4a, 0x75, 0x6c, 0x06, + 0x41, 0x75, 0x67, 0x06, 0x53, 0x65, 0x70, 0x06, + 0x4f, 0x63, 0x74, 0x06, 0x4e, 0x6f, 0x76, 0x06, + 0x44, 0x65, 0x63, 0x0e, 0x4a, 0x61, 0x6e, 0x75, + 0x61, 0x72, 0x79, 0x10, 0x46, 0x65, 0x62, 0x72, + 0x75, 0x61, 0x72, 0x79, 0x0a, 0x4d, 0x61, 0x72, + 0x63, 0x68, 0x0a, 0x41, 0x70, 0x72, 0x69, 0x6c, + 0x08, 0x4a, 0x75, 0x6e, 0x65, 0x08, 0x4a, 0x75, + 0x6c, 0x79, 0x0c, 0x41, 0x75, 0x67, 0x75, 0x73, + 0x74, 0x12, 0x53, 0x65, 0x70, 0x74, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x0e, 0x4f, 0x63, 0x74, 0x6f, + 0x62, 0x65, 0x72, 0x10, 0x4e, 0x6f, 0x76, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x10, 0x44, 0x65, 0x63, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x0c, 0x6d, 0x6f, + 0x6e, 0x74, 0x68, 0x73, 0x02, 0x54, 0x02, 0x57, + 0x06, 0x53, 0x75, 0x6e, 0x06, 0x4d, 0x6f, 0x6e, + 0x06, 0x54, 0x75, 0x65, 0x06, 0x57, 0x65, 0x64, + 0x06, 0x54, 0x68, 0x75, 0x06, 0x46, 0x72, 0x69, + 0x06, 0x53, 0x61, 0x74, 0x0c, 0x53, 0x75, 0x6e, + 0x64, 0x61, 0x79, 0x0c, 0x4d, 0x6f, 0x6e, 0x64, + 0x61, 0x79, 0x0e, 0x54, 0x75, 0x65, 0x73, 0x64, + 0x61, 0x79, 0x12, 0x57, 0x65, 0x64, 0x6e, 0x65, + 0x73, 0x64, 0x61, 0x79, 0x10, 0x54, 0x68, 0x75, + 0x72, 0x73, 0x64, 0x61, 0x79, 0x0c, 0x46, 0x72, + 0x69, 0x64, 0x61, 0x79, 0x10, 0x53, 0x61, 0x74, + 0x75, 0x72, 0x64, 0x61, 0x79, 0x08, 0x64, 0x61, + 0x79, 0x73, 0x04, 0x42, 0x45, 0x08, 0x65, 0x72, + 0x61, 0x73, 0x04, 0x61, 0x6d, 0x04, 0x70, 0x6d, + 0x14, 0x64, 0x61, 0x79, 0x50, 0x65, 0x72, 0x69, + 0x6f, 0x64, 0x73, 0x06, 0x4d, 0x6f, 0x31, 0x06, + 0x4d, 0x6f, 0x32, 0x06, 0x4d, 0x6f, 0x33, 0x06, + 0x4d, 0x6f, 0x34, 0x06, 0x4d, 0x6f, 0x35, 0x06, + 0x4d, 0x6f, 0x36, 0x06, 0x4d, 0x6f, 0x37, 0x06, + 0x4d, 0x6f, 0x38, 0x06, 0x4d, 0x6f, 0x39, 0x08, + 0x4d, 0x6f, 0x31, 0x30, 0x08, 0x4d, 0x6f, 0x31, + 0x31, 0x08, 0x4d, 0x6f, 0x31, 0x32, 0x0c, 0x4d, + 0x6f, 0x6e, 0x74, 0x68, 0x31, 0x0c, 0x4d, 0x6f, + 0x6e, 0x74, 0x68, 0x32, 0x0c, 0x4d, 0x6f, 0x6e, + 0x74, 0x68, 0x33, 0x0c, 0x4d, 0x6f, 0x6e, 0x74, + 0x68, 0x34, 0x0c, 0x4d, 0x6f, 0x6e, 0x74, 0x68, + 0x35, 0x0c, 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x36, + 0x0c, 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x37, 0x0c, + 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x38, 0x0c, 0x4d, + 0x6f, 0x6e, 0x74, 0x68, 0x39, 0x0e, 0x4d, 0x6f, + 0x6e, 0x74, 0x68, 0x31, 0x30, 0x0e, 0x4d, 0x6f, + 0x6e, 0x74, 0x68, 0x31, 0x31, 0x0e, 0x4d, 0x6f, + 0x6e, 0x74, 0x68, 0x31, 0x32, 0x08, 0x54, 0x6f, + 0x75, 0x74, 0x08, 0x42, 0x61, 0x62, 0x61, 0x0a, + 0x48, 0x61, 0x74, 0x6f, 0x72, 0x0a, 0x4b, 0x69, + 0x61, 0x68, 0x6b, 0x08, 0x54, 0x6f, 0x62, 0x61, + 0x0c, 0x41, 0x6d, 0x73, 0x68, 0x69, 0x72, 0x10, + 0x42, 0x61, 0x72, 0x61, 0x6d, 0x68, 0x61, 0x74, + 0x12, 0x42, 0x61, 0x72, 0x61, 0x6d, 0x6f, 0x75, + 0x64, 0x61, 0x0e, 0x42, 0x61, 0x73, 0x68, 0x61, + 0x6e, 0x73, 0x0a, 0x50, 0x61, 0x6f, 0x6e, 0x61, + 0x08, 0x45, 0x70, 0x65, 0x70, 0x0a, 0x4d, 0x65, + 0x73, 0x72, 0x61, 0x0a, 0x4e, 0x61, 0x73, 0x69, + 0x65, 0x08, 0x45, 0x52, 0x41, 0x30, 0x08, 0x45, + 0x52, 0x41, 0x31, 0x10, 0x4d, 0x65, 0x73, 0x6b, + 0x65, 0x72, 0x65, 0x6d, 0x0c, 0x54, 0x65, 0x6b, + 0x65, 0x6d, 0x74, 0x0a, 0x48, 0x65, 0x64, 0x61, + 0x72, 0x0c, 0x54, 0x61, 0x68, 0x73, 0x61, 0x73, + 0x06, 0x54, 0x65, 0x72, 0x0e, 0x59, 0x65, 0x6b, + 0x61, 0x74, 0x69, 0x74, 0x0e, 0x4d, 0x65, 0x67, + 0x61, 0x62, 0x69, 0x74, 0x0c, 0x4d, 0x69, 0x61, + 0x7a, 0x69, 0x61, 0x0c, 0x47, 0x65, 0x6e, 0x62, + 0x6f, 0x74, 0x08, 0x53, 0x65, 0x6e, 0x65, 0x0a, + 0x48, 0x61, 0x6d, 0x6c, 0x65, 0x0e, 0x4e, 0x65, + 0x68, 0x61, 0x73, 0x73, 0x65, 0x0e, 0x50, 0x61, + 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x06, 0x4d, 0x30, + 0x31, 0x06, 0x4d, 0x30, 0x32, 0x06, 0x4d, 0x30, + 0x33, 0x06, 0x4d, 0x30, 0x34, 0x06, 0x4d, 0x30, + 0x35, 0x06, 0x4d, 0x30, 0x36, 0x06, 0x4d, 0x30, + 0x37, 0x06, 0x4d, 0x30, 0x38, 0x06, 0x4d, 0x30, + 0x39, 0x06, 0x4d, 0x31, 0x30, 0x06, 0x4d, 0x31, + 0x31, 0x06, 0x4d, 0x31, 0x32, 0x02, 0x42, 0x06, + 0x42, 0x43, 0x45, 0x04, 0x43, 0x45, 0x04, 0x42, + 0x43, 0x04, 0x41, 0x44, 0x1a, 0x42, 0x65, 0x66, + 0x6f, 0x72, 0x65, 0x20, 0x43, 0x68, 0x72, 0x69, + 0x73, 0x74, 0x16, 0x41, 0x6e, 0x6e, 0x6f, 0x20, + 0x44, 0x6f, 0x6d, 0x69, 0x6e, 0x69, 0x22, 0x42, + 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x43, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x20, 0x45, 0x72, 0x61, + 0x14, 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x20, + 0x45, 0x72, 0x61, 0x0c, 0x54, 0x69, 0x73, 0x68, + 0x72, 0x69, 0x0e, 0x48, 0x65, 0x73, 0x68, 0x76, + 0x61, 0x6e, 0x0c, 0x4b, 0x69, 0x73, 0x6c, 0x65, + 0x76, 0x0a, 0x54, 0x65, 0x76, 0x65, 0x74, 0x0c, + 0x53, 0x68, 0x65, 0x76, 0x61, 0x74, 0x0c, 0x41, + 0x64, 0x61, 0x72, 0x20, 0x49, 0x08, 0x41, 0x64, + 0x61, 0x72, 0x0a, 0x4e, 0x69, 0x73, 0x61, 0x6e, + 0x08, 0x49, 0x79, 0x61, 0x72, 0x0a, 0x53, 0x69, + 0x76, 0x61, 0x6e, 0x0a, 0x54, 0x61, 0x6d, 0x75, + 0x7a, 0x04, 0x41, 0x76, 0x08, 0x45, 0x6c, 0x75, + 0x6c, 0x0e, 0x41, 0x64, 0x61, 0x72, 0x20, 0x49, + 0x49, 0x04, 0x41, 0x4d, 0x0e, 0x43, 0x68, 0x61, + 0x69, 0x74, 0x72, 0x61, 0x10, 0x56, 0x61, 0x69, + 0x73, 0x61, 0x6b, 0x68, 0x61, 0x10, 0x4a, 0x79, + 0x61, 0x69, 0x73, 0x74, 0x68, 0x61, 0x0c, 0x41, + 0x73, 0x61, 0x64, 0x68, 0x61, 0x0e, 0x53, 0x72, + 0x61, 0x76, 0x61, 0x6e, 0x61, 0x0c, 0x42, 0x68, + 0x61, 0x64, 0x72, 0x61, 0x0c, 0x41, 0x73, 0x76, + 0x69, 0x6e, 0x61, 0x0e, 0x4b, 0x61, 0x72, 0x74, + 0x69, 0x6b, 0x61, 0x14, 0x41, 0x67, 0x72, 0x61, + 0x68, 0x61, 0x79, 0x61, 0x6e, 0x61, 0x0a, 0x50, + 0x61, 0x75, 0x73, 0x61, 0x0a, 0x4d, 0x61, 0x67, + 0x68, 0x61, 0x10, 0x50, 0x68, 0x61, 0x6c, 0x67, + 0x75, 0x6e, 0x61, 0x08, 0x53, 0x61, 0x6b, 0x61, + 0x08, 0x4d, 0x75, 0x68, 0x2e, 0x08, 0x53, 0x61, + 0x66, 0x2e, 0x0c, 0x52, 0x61, 0x62, 0x2e, 0x20, + 0x49, 0x0e, 0x52, 0x61, 0x62, 0x2e, 0x20, 0x49, + 0x49, 0x0c, 0x4a, 0x75, 0x6d, 0x2e, 0x20, 0x49, + 0x0e, 0x4a, 0x75, 0x6d, 0x2e, 0x20, 0x49, 0x49, + 0x08, 0x52, 0x61, 0x6a, 0x2e, 0x08, 0x53, 0x68, + 0x61, 0x2e, 0x08, 0x52, 0x61, 0x6d, 0x2e, 0x0a, + 0x53, 0x68, 0x61, 0x77, 0x2e, 0x11, 0x44, 0x00, + 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, + 0x2d, 0x00, 0x51, 0x00, 0x2e, 0x00, 0x11, 0x44, + 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, + 0x00, 0x2d, 0x00, 0x48, 0x00, 0x2e, 0x00, 0x10, + 0x4d, 0x75, 0x68, 0x61, 0x72, 0x72, 0x61, 0x6d, + 0x0a, 0x53, 0x61, 0x66, 0x61, 0x72, 0x0f, 0x52, + 0x00, 0x61, 0x00, 0x62, 0x00, 0x69, 0x00, 0xbb, + 0x02, 0x20, 0x00, 0x49, 0x00, 0x11, 0x52, 0x00, + 0x61, 0x00, 0x62, 0x00, 0x69, 0x00, 0xbb, 0x02, + 0x20, 0x00, 0x49, 0x00, 0x49, 0x00, 0x10, 0x4a, + 0x75, 0x6d, 0x61, 0x64, 0x61, 0x20, 0x49, 0x12, + 0x4a, 0x75, 0x6d, 0x61, 0x64, 0x61, 0x20, 0x49, + 0x49, 0x0a, 0x52, 0x61, 0x6a, 0x61, 0x62, 0x0f, + 0x53, 0x00, 0x68, 0x00, 0x61, 0x00, 0xbb, 0x02, + 0x62, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x0e, 0x52, + 0x61, 0x6d, 0x61, 0x64, 0x61, 0x6e, 0x0e, 0x53, + 0x68, 0x61, 0x77, 0x77, 0x61, 0x6c, 0x19, 0x44, + 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, + 0x00, 0x2d, 0x00, 0x51, 0x00, 0x69, 0x00, 0xbb, + 0x02, 0x64, 0x00, 0x61, 0x00, 0x68, 0x00, 0x19, + 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, + 0x6c, 0x00, 0x2d, 0x00, 0x48, 0x00, 0x69, 0x00, + 0x6a, 0x00, 0x6a, 0x00, 0x61, 0x00, 0x68, 0x00, + 0x04, 0x41, 0x48, 0x1f, 0x54, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x36, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x48, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x36, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x36, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x29, 0x00, 0x21, 0x53, + 0x00, 0x68, 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, + 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4b, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x57, 0x00, + 0x61, 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x1f, 0x52, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x1d, 0x59, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4a, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6b, 0x00, 0x61, + 0x00, 0x6d, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x2d, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x2b, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x2d, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, 0x2d, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x2a, 0x4a, 0x69, 0x6e, 0x67, 0x6f, 0x2d, 0x6b, + 0x65, 0x69, 0x75, 0x6e, 0x20, 0x28, 0x37, 0x36, + 0x37, 0x2d, 0x37, 0x37, 0x30, 0x29, 0x1d, 0x48, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x2d, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x2d, 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x38, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, 0x44, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x64, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x38, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, + 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4a, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x1d, 0x4b, 0x00, 0x61, 0x00, 0x6a, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x53, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x20, 0x54, 0x65, 0x6e, + 0x2d, 0x61, 0x6e, 0x20, 0x28, 0x38, 0x35, 0x37, + 0x2d, 0x38, 0x35, 0x39, 0x29, 0x1f, 0x4a, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, 0x45, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, 0x6e, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1b, 0x4c, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x1d, 0x41, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, 0x69, 0x00, + 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1d, 0x45, + 0x00, 0x69, 0x00, 0x73, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x4a, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x29, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, 0x4a, + 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x29, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4c, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, + 0x4a, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x24, 0x54, 0x65, 0x6e, 0x2d, 0x65, 0x69, 0x20, + 0x28, 0x31, 0x31, 0x31, 0x30, 0x2d, 0x31, 0x31, + 0x31, 0x33, 0x29, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, + 0x01, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, + 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x6a, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x48, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x48, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x45, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x68, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x6d, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, + 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x59, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x21, 0x4a, 0x00, 0x75, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x29, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x29, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1f, + 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x41, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, + 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x29, 0x00, 0x27, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x75, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x29, 0x52, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x4e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1f, 0x4c, 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x74, 0x00, 0x73, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x27, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x45, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x21, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x45, 0x00, 0x69, 0x00, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x72, + 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, + 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, + 0x45, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, + 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x48, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x65, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x23, 0x41, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, 0x0a, 0x4d, + 0x65, 0x69, 0x6a, 0x69, 0x0d, 0x54, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x0b, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x0c, 0x48, 0x65, 0x69, + 0x73, 0x65, 0x69, 0x12, 0x46, 0x61, 0x72, 0x76, + 0x61, 0x72, 0x64, 0x69, 0x6e, 0x16, 0x4f, 0x72, + 0x64, 0x69, 0x62, 0x65, 0x68, 0x65, 0x73, 0x68, + 0x74, 0x0e, 0x4b, 0x68, 0x6f, 0x72, 0x64, 0x61, + 0x64, 0x06, 0x54, 0x69, 0x72, 0x0c, 0x4d, 0x6f, + 0x72, 0x64, 0x61, 0x64, 0x12, 0x53, 0x68, 0x61, + 0x68, 0x72, 0x69, 0x76, 0x61, 0x72, 0x08, 0x4d, + 0x65, 0x68, 0x72, 0x08, 0x41, 0x62, 0x61, 0x6e, + 0x08, 0x41, 0x7a, 0x61, 0x72, 0x06, 0x44, 0x65, + 0x79, 0x0c, 0x42, 0x61, 0x68, 0x6d, 0x61, 0x6e, + 0x0c, 0x45, 0x73, 0x66, 0x61, 0x6e, 0x64, 0x04, + 0x41, 0x50, 0x1a, 0x42, 0x65, 0x66, 0x6f, 0x72, + 0x65, 0x20, 0x52, 0x2e, 0x4f, 0x2e, 0x43, 0x2e, + 0x0c, 0x4d, 0x69, 0x6e, 0x67, 0x75, 0x6f, 0x12, + 0x63, 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, + 0x73, 0x08, 0x64, 0x61, 0x74, 0x65, 0x08, 0x6c, + 0x61, 0x74, 0x6e, 0x04, 0x6e, 0x75, 0x10, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, + 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, + 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x26, + 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, + 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0x1e, 0x6e, 0x65, 0x67, 0x61, + 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, + 0x65, 0x72, 0x6e, 0x0e, 0x64, 0x65, 0x63, 0x69, + 0x6d, 0x61, 0x6c, 0x24, 0x7b, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x3a, 0x7b, + 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x7d, 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x63, 0x79, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0x10, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x63, 0x79, 0x2a, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x7b, 0x70, + 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, + 0x67, 0x6e, 0x7d, 0x40, 0x7b, 0x6d, 0x69, 0x6e, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x7b, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x0e, 0x70, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x10, 0x70, 0x61, 0x74, + 0x74, 0x65, 0x72, 0x6e, 0x73, 0x02, 0x2e, 0x02, + 0x2c, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x06, + 0x4e, 0x61, 0x4e, 0x06, 0x6e, 0x61, 0x6e, 0x02, + 0x2b, 0x10, 0x70, 0x6c, 0x75, 0x73, 0x53, 0x69, + 0x67, 0x6e, 0x02, 0x2d, 0x12, 0x6d, 0x69, 0x6e, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, 0x25, + 0x16, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, + 0x53, 0x69, 0x67, 0x6e, 0x03, 0x1e, 0x22, 0x10, + 0x69, 0x6e, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, + 0x0e, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, + 0x04, 0x41, 0x24, 0x06, 0x41, 0x55, 0x44, 0x04, + 0x52, 0x24, 0x06, 0x42, 0x52, 0x4c, 0x06, 0x43, + 0x41, 0x24, 0x06, 0x43, 0x41, 0x44, 0x06, 0x43, + 0x4e, 0xa5, 0x06, 0x43, 0x4e, 0x59, 0x03, 0xac, + 0x20, 0x06, 0x45, 0x55, 0x52, 0x02, 0xa3, 0x06, + 0x47, 0x42, 0x50, 0x06, 0x48, 0x4b, 0x24, 0x06, + 0x48, 0x4b, 0x44, 0x03, 0xaa, 0x20, 0x06, 0x49, + 0x4c, 0x53, 0x03, 0xb9, 0x20, 0x06, 0x49, 0x4e, + 0x52, 0x06, 0x4a, 0x50, 0xa5, 0x06, 0x4a, 0x50, + 0x59, 0x03, 0xa9, 0x20, 0x06, 0x4b, 0x52, 0x57, + 0x06, 0x4d, 0x58, 0x24, 0x06, 0x4d, 0x58, 0x4e, + 0x06, 0x4e, 0x5a, 0x24, 0x06, 0x4e, 0x5a, 0x44, + 0x06, 0x4e, 0x54, 0x24, 0x06, 0x54, 0x57, 0x44, + 0x06, 0x55, 0x53, 0x24, 0x06, 0x55, 0x53, 0x44, + 0x03, 0xab, 0x20, 0x06, 0x56, 0x4e, 0x44, 0x08, + 0x46, 0x43, 0x46, 0x41, 0x06, 0x58, 0x41, 0x46, + 0x06, 0x45, 0x43, 0x24, 0x06, 0x58, 0x43, 0x44, + 0x06, 0x43, 0x46, 0x41, 0x06, 0x58, 0x4f, 0x46, + 0x08, 0x43, 0x46, 0x50, 0x46, 0x06, 0x58, 0x50, + 0x46, 0x14, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x69, 0x65, 0x73, 0x58, 0x6e, 0x6f, 0x64, + 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, + 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2f, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, + 0x74, 0x61, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x70, + 0x2f, 0x65, 0x6e, 0x2d, 0x47, 0x42, 0x2e, 0x6a, + 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, + 0x01, 0x00, 0x27, 0x00, 0x89, 0x01, 0xde, 0x6a, + 0x01, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x39, 0xd0, + 0x00, 0x00, 0x00, 0x43, 0xd1, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xd2, 0x00, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd4, 0x00, 0x00, + 0x00, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x04, 0xd6, + 0x00, 0x00, 0x00, 0x04, 0xd7, 0x00, 0x00, 0x00, + 0x04, 0xd8, 0x00, 0x00, 0x00, 0x04, 0xd9, 0x00, + 0x00, 0x00, 0x04, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xdb, 0x00, 0x00, 0x00, 0x04, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x04, 0xde, + 0x00, 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, + 0x04, 0xe0, 0x00, 0x00, 0x00, 0x04, 0xe1, 0x00, + 0x00, 0x00, 0x04, 0xe2, 0x00, 0x00, 0x00, 0x26, + 0x0f, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x0a, + 0x4d, 0xe4, 0x00, 0x00, 0x00, 0x09, 0x4d, 0xe5, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, 0x00, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe6, + 0x00, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x00, + 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xec, 0x00, + 0x00, 0x00, 0x4d, 0xec, 0x00, 0x00, 0x00, 0x04, + 0xed, 0x00, 0x00, 0x00, 0x4d, 0xee, 0x00, 0x00, + 0x00, 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, 0xf0, + 0x00, 0x00, 0x00, 0x04, 0xf1, 0x00, 0x00, 0x00, + 0x4d, 0xf2, 0x00, 0x00, 0x00, 0x04, 0xf3, 0x00, + 0x00, 0x00, 0x4d, 0xf4, 0x00, 0x00, 0x00, 0x04, + 0xf5, 0x00, 0x00, 0x00, 0x4d, 0xf6, 0x00, 0x00, + 0x00, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xf8, + 0x00, 0x00, 0x00, 0x04, 0xf9, 0x00, 0x00, 0x00, + 0x4d, 0xfa, 0x00, 0x00, 0x00, 0x04, 0xfb, 0x00, + 0x00, 0x00, 0x4d, 0xfc, 0x00, 0x00, 0x00, 0x04, + 0xfd, 0x00, 0x00, 0x00, 0x4d, 0xfe, 0x00, 0x00, + 0x00, 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x01, 0x00, 0x00, 0x04, 0x01, 0x01, 0x00, 0x00, + 0x4d, 0x02, 0x01, 0x00, 0x00, 0x04, 0x03, 0x01, + 0x00, 0x00, 0x4d, 0x04, 0x01, 0x00, 0x00, 0x04, + 0x05, 0x01, 0x00, 0x00, 0x4d, 0x06, 0x01, 0x00, + 0x00, 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0x08, + 0x01, 0x00, 0x00, 0x04, 0x09, 0x01, 0x00, 0x00, + 0x4d, 0x0a, 0x01, 0x00, 0x00, 0x04, 0x0b, 0x01, + 0x00, 0x00, 0x4d, 0x0c, 0x01, 0x00, 0x00, 0x04, + 0x0d, 0x01, 0x00, 0x00, 0x4d, 0x0e, 0x01, 0x00, + 0x00, 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, 0x10, + 0x01, 0x00, 0x00, 0x04, 0x11, 0x01, 0x00, 0x00, + 0x4d, 0x12, 0x01, 0x00, 0x00, 0x04, 0x13, 0x01, + 0x00, 0x00, 0x4d, 0x14, 0x01, 0x00, 0x00, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x4d, 0x16, 0x01, 0x00, + 0x00, 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, 0x18, + 0x01, 0x00, 0x00, 0x04, 0x19, 0x01, 0x00, 0x00, + 0x4d, 0x1a, 0x01, 0x00, 0x00, 0x04, 0x17, 0x01, + 0x00, 0x00, 0x4d, 0x1b, 0x01, 0x00, 0x00, 0x04, + 0x1c, 0x01, 0x00, 0x00, 0x4d, 0x1d, 0x01, 0x00, + 0x00, 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, 0x1f, + 0x01, 0x00, 0x00, 0x04, 0x20, 0x01, 0x00, 0x00, + 0x4d, 0x21, 0x01, 0x00, 0x00, 0x04, 0x22, 0x01, + 0x00, 0x00, 0x4d, 0x23, 0x01, 0x00, 0x00, 0x04, + 0x24, 0x01, 0x00, 0x00, 0x4d, 0x25, 0x01, 0x00, + 0x00, 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, 0x26, + 0x01, 0x00, 0x00, 0x04, 0x27, 0x01, 0x00, 0x00, + 0x4d, 0x28, 0x01, 0x00, 0x00, 0x04, 0x29, 0x01, + 0x00, 0x00, 0x4d, 0x2a, 0x01, 0x00, 0x00, 0x04, + 0x2b, 0x01, 0x00, 0x00, 0x4d, 0x2c, 0x01, 0x00, + 0x00, 0x04, 0x2d, 0x01, 0x00, 0x00, 0x4d, 0x2e, + 0x01, 0x00, 0x00, 0x04, 0x2f, 0x01, 0x00, 0x00, + 0x4d, 0x30, 0x01, 0x00, 0x00, 0x04, 0x31, 0x01, + 0x00, 0x00, 0x4d, 0x32, 0x01, 0x00, 0x00, 0x04, + 0x33, 0x01, 0x00, 0x00, 0x4d, 0x34, 0x01, 0x00, + 0x00, 0x04, 0x35, 0x01, 0x00, 0x00, 0x4d, 0x36, + 0x01, 0x00, 0x00, 0x04, 0x37, 0x01, 0x00, 0x00, + 0x4d, 0x38, 0x01, 0x00, 0x00, 0x4d, 0x39, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x3a, 0x01, 0x00, 0x00, + 0x4d, 0x3b, 0x01, 0x00, 0x00, 0x04, 0x3c, 0x01, + 0x00, 0x00, 0x4d, 0x3d, 0x01, 0x00, 0x00, 0x04, + 0x2f, 0x01, 0x00, 0x00, 0x4d, 0x30, 0x01, 0x00, + 0x00, 0x04, 0x29, 0x01, 0x00, 0x00, 0x4d, 0x2a, + 0x01, 0x00, 0x00, 0x4d, 0x3e, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x3f, 0x01, 0x00, 0x00, 0x4d, 0x40, + 0x01, 0x00, 0x00, 0x04, 0x41, 0x01, 0x00, 0x00, + 0x4d, 0x42, 0x01, 0x00, 0x00, 0x04, 0x0b, 0x01, + 0x00, 0x00, 0x4d, 0x0a, 0x01, 0x00, 0x00, 0x04, + 0x07, 0x01, 0x00, 0x00, 0x4d, 0x06, 0x01, 0x00, + 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x4d, 0x44, + 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x0b, 0x04, 0x45, + 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, + 0x45, 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x77, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, + 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0xd5, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x00, 0xbe, 0x01, + 0xbe, 0x02, 0xbe, 0x03, 0xbe, 0x04, 0xbe, 0x05, + 0xbe, 0x06, 0xbe, 0x07, 0xbe, 0x08, 0xbe, 0x09, + 0xbe, 0x0a, 0xbe, 0x0b, 0x26, 0x0c, 0x00, 0x4d, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, + 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, + 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, + 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, + 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, + 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, + 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, + 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, + 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, + 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, + 0x92, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, + 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x0c, 0xbe, 0x0d, 0xbe, 0x0e, 0xbe, + 0x0f, 0xbe, 0x10, 0xbe, 0x11, 0xbe, 0x12, 0xbe, + 0x13, 0xbe, 0x14, 0xbe, 0x15, 0xbe, 0x16, 0xbe, + 0x17, 0xbe, 0x18, 0x26, 0x0d, 0x00, 0x4d, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, + 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, + 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, + 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, + 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, + 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, + 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, + 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, + 0x9f, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, + 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, + 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, + 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, + 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, + 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, + 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, + 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, + 0x04, 0x9f, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, + 0xa1, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, + 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa0, + 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, + 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x4d, + 0xd7, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x19, + 0xbe, 0x1a, 0xbe, 0x1b, 0xbe, 0x1c, 0xbe, 0x1d, + 0xbe, 0x1e, 0xbe, 0x1f, 0xbe, 0x20, 0xbe, 0x21, + 0xbe, 0x22, 0xbe, 0x23, 0xbe, 0x24, 0x26, 0x0c, + 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, + 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, + 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, + 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, + 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, + 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, + 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, + 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, + 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, + 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, + 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, + 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x64, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x4d, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, + 0x7a, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x25, 0xbe, 0x26, 0xbe, + 0x27, 0xbe, 0x28, 0xbe, 0x29, 0xbe, 0x2a, 0xbe, + 0x2b, 0xbe, 0x2c, 0xbe, 0x2d, 0xbe, 0x2e, 0xbe, + 0x2f, 0xbe, 0x30, 0xbe, 0x31, 0x26, 0x0d, 0x00, + 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, + 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, + 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, + 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, + 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, + 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, + 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, + 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, + 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, 0x26, 0x0d, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa2, + 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, + 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, + 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, + 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, + 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, + 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, + 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, + 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x64, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x46, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x75, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xa0, 0x01, 0x00, + 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0xa0, + 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, + 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x32, 0xbe, 0x33, 0xbe, 0x34, 0xbe, 0x35, + 0xbe, 0x36, 0xbe, 0x37, 0xbe, 0x38, 0xbe, 0x39, + 0xbe, 0x3a, 0xbe, 0x3b, 0xbe, 0x3c, 0xbe, 0x3d, + 0xbe, 0x3e, 0x26, 0x0d, 0x00, 0x4d, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, + 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, + 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, + 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, + 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, + 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, + 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, + 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, 0xae, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, + 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, + 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, + 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, + 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, + 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, + 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, + 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, + 0xae, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0xa0, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, + 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x3f, + 0xbe, 0x40, 0xbe, 0x41, 0xbe, 0x42, 0xbe, 0x43, + 0xbe, 0x44, 0xbe, 0x45, 0xbe, 0x46, 0xbe, 0x47, + 0xbe, 0x48, 0xbe, 0x49, 0xbe, 0x4a, 0x26, 0x0c, + 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0xaf, + 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, + 0x04, 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, + 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, 0x04, + 0xb4, 0x01, 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, + 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb7, + 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, + 0x04, 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, + 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, + 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, 0xb3, + 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, 0x00, + 0x04, 0xb5, 0x01, 0x00, 0x00, 0x04, 0xb6, 0x01, + 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, + 0xb8, 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, + 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x64, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xa0, 0x01, 0x00, 0x00, + 0x04, 0xa1, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, + 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, 0x79, + 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x45, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, + 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x16, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, 0x04, + 0xbd, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, + 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, 0x04, 0xbc, + 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, + 0x26, 0x04, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xc0, 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, + 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, 0x00, 0x04, + 0xc3, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x78, 0x01, 0x00, 0x00, 0x4d, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, + 0x01, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x4b, 0xbe, 0x4c, 0xbe, 0x4d, + 0xbe, 0x4e, 0xbe, 0x4f, 0xbe, 0x50, 0xbe, 0x51, + 0xbe, 0x52, 0xbe, 0x53, 0xbe, 0x54, 0xbe, 0x55, + 0xbe, 0x56, 0xbe, 0x57, 0xbe, 0x58, 0x26, 0x0e, + 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0xc4, + 0x01, 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, + 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, + 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, + 0xc9, 0x01, 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, + 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, + 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, + 0x04, 0xce, 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, + 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, + 0xd1, 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, + 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, + 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, + 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, + 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, 0x04, + 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, + 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, + 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, + 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, + 0x00, 0x00, 0x26, 0x0e, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xd2, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x77, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, + 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x59, 0xbe, 0x5a, + 0xbe, 0x5b, 0xbe, 0x5c, 0xbe, 0x5d, 0xbe, 0x5e, + 0xbe, 0x5f, 0xbe, 0x60, 0xbe, 0x61, 0xbe, 0x62, + 0xbe, 0x63, 0xbe, 0x64, 0x26, 0x0c, 0x00, 0x4d, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, + 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, 0xd5, + 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, + 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, 0xd8, 0x01, + 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, 0x04, + 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, 0x00, + 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, 0x04, 0xdd, + 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, + 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, + 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, + 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, + 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, + 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, + 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, + 0xde, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0xdf, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, + 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x65, + 0xbe, 0x66, 0xbe, 0x67, 0xbe, 0x68, 0xbe, 0x69, + 0xbe, 0x6a, 0xbe, 0x6b, 0xbe, 0x6c, 0xbe, 0x6d, + 0xbe, 0x6e, 0xbe, 0x6f, 0xbe, 0x70, 0x26, 0x0c, + 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0xe0, + 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, 0x00, + 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, 0xe3, 0x01, + 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, 0x04, + 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, + 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, + 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, + 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, + 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, + 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, + 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, + 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, + 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, + 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, + 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x64, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xf8, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0xf8, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xf8, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, + 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x71, 0xbe, 0x72, 0xbe, 0x73, 0xbe, 0x74, + 0xbe, 0x75, 0xbe, 0x76, 0xbe, 0x77, 0xbe, 0x78, + 0xbe, 0x79, 0xbe, 0x7a, 0xbe, 0x7b, 0xbe, 0x7c, + 0x26, 0x0c, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, + 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, + 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, + 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, + 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, + 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, + 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, + 0xeb, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, + 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, + 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, + 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, + 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, + 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, + 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, + 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x64, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x75, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xf8, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xf8, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x78, 0x01, 0x00, 0x00, 0x4d, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, + 0x01, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x16, + 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, + 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, + 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x64, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xf9, 0x01, 0x00, 0x00, + 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, + 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, + 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, + 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, + 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, + 0x04, 0x02, 0x02, 0x00, 0x00, 0x04, 0x03, 0x02, + 0x00, 0x00, 0x04, 0x04, 0x02, 0x00, 0x00, 0x04, + 0x05, 0x02, 0x00, 0x00, 0x04, 0x06, 0x02, 0x00, + 0x00, 0x04, 0x07, 0x02, 0x00, 0x00, 0x04, 0x08, + 0x02, 0x00, 0x00, 0x04, 0x09, 0x02, 0x00, 0x00, + 0x04, 0x0a, 0x02, 0x00, 0x00, 0x04, 0x0b, 0x02, + 0x00, 0x00, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x04, + 0x0d, 0x02, 0x00, 0x00, 0x04, 0x0e, 0x02, 0x00, + 0x00, 0x04, 0x0f, 0x02, 0x00, 0x00, 0x04, 0x10, + 0x02, 0x00, 0x00, 0x04, 0x11, 0x02, 0x00, 0x00, + 0x04, 0x12, 0x02, 0x00, 0x00, 0x04, 0x13, 0x02, + 0x00, 0x00, 0x04, 0x14, 0x02, 0x00, 0x00, 0x04, + 0x15, 0x02, 0x00, 0x00, 0x04, 0x16, 0x02, 0x00, + 0x00, 0x04, 0x17, 0x02, 0x00, 0x00, 0x04, 0x18, + 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, 0x19, + 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, + 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x21, 0x00, + 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, + 0x22, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, + 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, 0x1d, + 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, + 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, + 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, + 0x26, 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, + 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, 0x21, + 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, + 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, + 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, + 0x2a, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, + 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, 0x25, + 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, + 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, + 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, + 0x2e, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, + 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, 0x29, + 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, + 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, + 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, + 0x32, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, + 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, 0x2d, + 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, + 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, + 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, + 0x36, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, + 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, 0x31, + 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, + 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, + 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, + 0x3a, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, + 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, 0x35, + 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, + 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, + 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, + 0x3e, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, + 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, 0x39, + 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, + 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, + 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, + 0x42, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, + 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, 0x3d, + 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, + 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, + 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, + 0x46, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, + 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, 0x41, + 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, + 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, + 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, + 0x4a, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, + 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, 0x45, + 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, + 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, + 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, + 0x4e, 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, + 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, 0x49, + 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, + 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, + 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, + 0x52, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, + 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, 0x4d, + 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, + 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, + 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, + 0x56, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, + 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, 0x51, + 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, + 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, + 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, + 0x5a, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, + 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, 0x55, + 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, + 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, + 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, + 0x5e, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, + 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, 0x59, + 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, + 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, + 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, + 0x62, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, + 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, 0x5d, + 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, + 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, + 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, + 0x66, 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, + 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, 0x61, + 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, + 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, + 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, + 0x6a, 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, + 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, 0x65, + 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, + 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, + 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, + 0x6e, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, + 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, 0x69, + 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, + 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, + 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, + 0x72, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, + 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, 0x6d, + 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, + 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, + 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, + 0x76, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, + 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, 0x71, + 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, + 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, + 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, + 0x7a, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, + 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, 0x75, + 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, + 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, + 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, + 0x7e, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, + 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, 0x79, + 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, + 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, + 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, + 0x82, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, + 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, 0x7d, + 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, + 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, + 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, + 0x86, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, + 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, 0x81, + 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, + 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, + 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, + 0x8a, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, + 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, 0x85, + 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, + 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, + 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, + 0x8e, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, + 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, 0x89, + 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, + 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, + 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, + 0x92, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, + 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, 0x8d, + 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, + 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, + 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, + 0x96, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, + 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, 0x91, + 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, + 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, + 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, + 0x9a, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, + 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, 0x95, + 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, + 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, + 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, + 0x9e, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, + 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, 0x99, + 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, + 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, + 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, + 0xa2, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, + 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, 0x9d, + 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, + 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, + 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, + 0xa6, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, + 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, 0xa1, + 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, + 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, + 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, + 0xaa, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, + 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, 0xa5, + 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, + 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, + 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, + 0xae, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, + 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, 0xa9, + 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, + 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, + 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, + 0xb2, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, + 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, 0xad, + 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, + 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, + 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, + 0xb6, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, + 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, 0xb1, + 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, + 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, + 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, + 0xba, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, + 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, 0xb5, + 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, + 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, + 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, + 0xbe, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, + 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, 0xb9, + 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, + 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, + 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, + 0xc2, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, + 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, 0xbd, + 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, + 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, + 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, + 0xc6, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, + 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, 0xc1, + 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, + 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, + 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, + 0xca, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, + 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, 0xc5, + 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, + 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, + 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, + 0xce, 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, 0xc9, + 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, + 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, + 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, + 0xd2, 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, + 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, 0xcd, + 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, + 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, + 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, 0x4d, + 0xd6, 0x00, 0x00, 0x80, 0x04, 0xd0, 0x02, 0x00, + 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, 0xd1, + 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, + 0x04, 0xd2, 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, + 0x00, 0x80, 0x04, 0xd3, 0x02, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x80, 0x04, 0xd4, 0x02, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, 0xd5, + 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, + 0x04, 0xd6, 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x80, 0x04, 0xd7, 0x02, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x80, 0x04, 0xd8, 0x02, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, 0xd9, + 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, + 0x04, 0xda, 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x80, 0x04, 0xdb, 0x02, 0x00, 0x00, 0x4d, + 0xe2, 0x00, 0x00, 0x80, 0x04, 0xdc, 0x02, 0x00, + 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, 0xdd, + 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, + 0x04, 0xde, 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, + 0x00, 0x80, 0x04, 0xdf, 0x02, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x80, 0x04, 0xe0, 0x02, 0x00, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, 0x16, + 0x01, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x4d, 0xe9, 0x00, + 0x00, 0x80, 0x04, 0x48, 0x01, 0x00, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x80, 0x04, 0x04, 0x01, 0x00, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, + 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, + 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, + 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, + 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, + 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, + 0x04, 0x02, 0x02, 0x00, 0x00, 0x04, 0x03, 0x02, + 0x00, 0x00, 0x04, 0x04, 0x02, 0x00, 0x00, 0x04, + 0x05, 0x02, 0x00, 0x00, 0x04, 0x06, 0x02, 0x00, + 0x00, 0x04, 0x07, 0x02, 0x00, 0x00, 0x04, 0x08, + 0x02, 0x00, 0x00, 0x04, 0x09, 0x02, 0x00, 0x00, + 0x04, 0x0a, 0x02, 0x00, 0x00, 0x04, 0x0b, 0x02, + 0x00, 0x00, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x04, + 0x0d, 0x02, 0x00, 0x00, 0x04, 0x0e, 0x02, 0x00, + 0x00, 0x04, 0x0f, 0x02, 0x00, 0x00, 0x04, 0x10, + 0x02, 0x00, 0x00, 0x04, 0x11, 0x02, 0x00, 0x00, + 0x04, 0x12, 0x02, 0x00, 0x00, 0x04, 0x13, 0x02, + 0x00, 0x00, 0x04, 0x14, 0x02, 0x00, 0x00, 0x04, + 0x15, 0x02, 0x00, 0x00, 0x04, 0x16, 0x02, 0x00, + 0x00, 0x04, 0x17, 0x02, 0x00, 0x00, 0x04, 0x18, + 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, 0x19, + 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, + 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x21, 0x00, + 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, + 0x22, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, + 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, 0x1d, + 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, + 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, + 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, + 0x26, 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, + 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, 0x21, + 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, + 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, + 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, + 0x2a, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, + 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, 0x25, + 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, + 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, + 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, + 0x2e, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, + 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, 0x29, + 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, + 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, + 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, + 0x32, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, + 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, 0x2d, + 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, + 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, + 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, + 0x36, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, + 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, 0x31, + 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, + 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, + 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, + 0x3a, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, + 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, 0x35, + 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, + 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, + 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, + 0x3e, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, + 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, 0x39, + 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, + 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, + 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, + 0x42, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, + 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, 0x3d, + 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, + 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, + 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, + 0x46, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, + 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, 0x41, + 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, + 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, + 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, + 0x4a, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, + 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, 0x45, + 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, + 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, + 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, + 0x4e, 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, + 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, 0x49, + 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, + 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, + 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, + 0x52, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, + 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, 0x4d, + 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, + 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, + 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, + 0x56, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, + 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, 0x51, + 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, + 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, + 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, + 0x5a, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, + 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, 0x55, + 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, + 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, + 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, + 0x5e, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, + 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, 0x59, + 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, + 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, + 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, + 0x62, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, + 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, 0x5d, + 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, + 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, + 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, + 0x66, 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, + 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, 0x61, + 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, + 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, + 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, + 0x6a, 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, + 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, 0x65, + 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, + 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, + 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, + 0x6e, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, + 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, 0x69, + 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, + 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, + 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, + 0x72, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, + 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, 0x6d, + 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, + 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, + 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, + 0x76, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, + 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, 0x71, + 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, + 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, + 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, + 0x7a, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, + 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, 0x75, + 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, + 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, + 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, + 0x7e, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, + 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, 0x79, + 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, + 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, + 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, + 0x82, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, + 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, 0x7d, + 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, + 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, + 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, + 0x86, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, + 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, 0x81, + 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, + 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, + 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, + 0x8a, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, + 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, 0x85, + 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, + 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, + 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, + 0x8e, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, + 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, 0x89, + 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, + 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, + 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, + 0x92, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, + 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, 0x8d, + 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, + 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, + 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, + 0x96, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, + 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, 0x91, + 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, + 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, + 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, + 0x9a, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, + 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, 0x95, + 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, + 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, + 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, + 0x9e, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, + 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, 0x99, + 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, + 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, + 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, + 0xa2, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, + 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, 0x9d, + 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, + 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, + 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, + 0xa6, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, + 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, 0xa1, + 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, + 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, + 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, + 0xaa, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, + 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, 0xa5, + 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, + 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, + 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, + 0xae, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, + 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, 0xa9, + 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, + 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, + 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, + 0xb2, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, + 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, 0xad, + 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, + 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, + 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, + 0xb6, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, + 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, 0xb1, + 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, + 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, + 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, + 0xba, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, + 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, 0xb5, + 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, + 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, + 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, + 0xbe, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, + 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, 0xb9, + 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, + 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, + 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, + 0xc2, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, + 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, 0xbd, + 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, + 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, + 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, + 0xc6, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, + 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, 0xc1, + 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, + 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, + 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, + 0xca, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, + 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, 0xc5, + 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, + 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, + 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, + 0xce, 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, 0xc9, + 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, + 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, + 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, + 0xd2, 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, + 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, 0xcd, + 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, + 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, + 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, 0x4d, + 0xd6, 0x00, 0x00, 0x80, 0x04, 0xd0, 0x02, 0x00, + 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, 0xd1, + 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, + 0x04, 0xd2, 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, + 0x00, 0x80, 0x04, 0xd3, 0x02, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x80, 0x04, 0xd4, 0x02, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, 0xd5, + 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, + 0x04, 0xd6, 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x80, 0x04, 0xd7, 0x02, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x80, 0x04, 0xd8, 0x02, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, 0xd9, + 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, + 0x04, 0xda, 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x80, 0x04, 0xdb, 0x02, 0x00, 0x00, 0x4d, + 0xe2, 0x00, 0x00, 0x80, 0x04, 0xdc, 0x02, 0x00, + 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, 0xdd, + 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, + 0x04, 0xde, 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, + 0x00, 0x80, 0x04, 0xdf, 0x02, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x80, 0x04, 0xe0, 0x02, 0x00, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, 0xe1, + 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, + 0x04, 0xe2, 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, + 0x00, 0x80, 0x04, 0xe3, 0x02, 0x00, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x80, 0x04, 0xe4, 0x02, 0x00, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, + 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, + 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, + 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, + 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, + 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, + 0x04, 0x02, 0x02, 0x00, 0x00, 0x04, 0x03, 0x02, + 0x00, 0x00, 0x04, 0x04, 0x02, 0x00, 0x00, 0x04, + 0x05, 0x02, 0x00, 0x00, 0x04, 0x06, 0x02, 0x00, + 0x00, 0x04, 0x07, 0x02, 0x00, 0x00, 0x04, 0x08, + 0x02, 0x00, 0x00, 0x04, 0x09, 0x02, 0x00, 0x00, + 0x04, 0x0a, 0x02, 0x00, 0x00, 0x04, 0x0b, 0x02, + 0x00, 0x00, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x04, + 0x0d, 0x02, 0x00, 0x00, 0x04, 0x0e, 0x02, 0x00, + 0x00, 0x04, 0x0f, 0x02, 0x00, 0x00, 0x04, 0x10, + 0x02, 0x00, 0x00, 0x04, 0x11, 0x02, 0x00, 0x00, + 0x04, 0x12, 0x02, 0x00, 0x00, 0x04, 0x13, 0x02, + 0x00, 0x00, 0x04, 0x14, 0x02, 0x00, 0x00, 0x04, + 0x15, 0x02, 0x00, 0x00, 0x04, 0x16, 0x02, 0x00, + 0x00, 0x04, 0x17, 0x02, 0x00, 0x00, 0x04, 0x18, + 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, 0x19, + 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, + 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x21, 0x00, + 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, + 0x22, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, + 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, 0x1d, + 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, + 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, + 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, + 0x26, 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, + 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, 0x21, + 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, + 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, + 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, + 0x2a, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, + 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, 0x25, + 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, + 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, + 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, + 0x2e, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, + 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, 0x29, + 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, + 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, + 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, + 0x32, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, + 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, 0x2d, + 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, + 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, + 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, + 0x36, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, + 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, 0x31, + 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, + 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, + 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, + 0x3a, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, + 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, 0x35, + 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, + 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, + 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, + 0x3e, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, + 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, 0x39, + 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, + 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, + 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, + 0x42, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, + 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, 0x3d, + 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, + 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, + 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, + 0x46, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, + 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, 0x41, + 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, + 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, + 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, + 0x4a, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, + 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, 0x45, + 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, + 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, + 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, + 0x4e, 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, + 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, 0x49, + 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, + 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, + 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, + 0x52, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, + 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, 0x4d, + 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, + 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, + 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, + 0x56, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, + 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, 0x51, + 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, + 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, + 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, + 0x5a, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, + 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, 0x55, + 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, + 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, + 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, + 0x5e, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, + 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, 0x59, + 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, + 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, + 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, + 0x62, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, + 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, 0x5d, + 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, + 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, + 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, + 0x66, 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, + 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, 0x61, + 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, + 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, + 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, + 0x6a, 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, + 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, 0x65, + 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, + 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, + 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, + 0x6e, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, + 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, 0x69, + 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, + 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, + 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, + 0x72, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, + 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, 0x6d, + 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, + 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, + 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, + 0x76, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, + 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, 0x71, + 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, + 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, + 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, + 0x7a, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, + 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, 0x75, + 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, + 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, + 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, + 0x7e, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, + 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, 0x79, + 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, + 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, + 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, + 0x82, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, + 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, 0x7d, + 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, + 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, + 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, + 0x86, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, + 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, 0x81, + 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, + 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, + 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, + 0x8a, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, + 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, 0x85, + 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, + 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, + 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, + 0x8e, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, + 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, 0x89, + 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, + 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, + 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, + 0x92, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, + 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, 0x8d, + 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, + 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, + 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, + 0x96, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, + 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, 0x91, + 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, + 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, + 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, + 0x9a, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, + 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, 0x95, + 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, + 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, + 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, + 0x9e, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, + 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, 0x99, + 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, + 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, + 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, + 0xa2, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, + 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, 0x9d, + 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, + 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, + 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, + 0xa6, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, + 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, 0xa1, + 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, + 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, + 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, + 0xaa, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, + 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, 0xa5, + 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, + 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, + 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, + 0xae, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, + 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, 0xa9, + 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, + 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, + 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, + 0xb2, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, + 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, 0xad, + 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, + 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, + 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, + 0xb6, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, + 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, 0xb1, + 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, + 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, + 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, + 0xba, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, + 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, 0xb5, + 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, + 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, + 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, + 0xbe, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, + 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, 0xb9, + 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, + 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, + 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, + 0xc2, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, + 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, 0xbd, + 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, + 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, + 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, + 0xc6, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, + 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, 0xc1, + 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, + 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, + 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, + 0xca, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, + 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, 0xc5, + 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, + 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, + 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, + 0xce, 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, 0xc9, + 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, + 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, + 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, + 0xd2, 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, + 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, 0xcd, + 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, + 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, + 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, 0x4d, + 0xd6, 0x00, 0x00, 0x80, 0x04, 0xd0, 0x02, 0x00, + 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, 0xd1, + 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, + 0x04, 0xd2, 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, + 0x00, 0x80, 0x04, 0xd3, 0x02, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x80, 0x04, 0xd4, 0x02, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, 0xd5, + 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, + 0x04, 0xd6, 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x80, 0x04, 0xd7, 0x02, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x80, 0x04, 0xd8, 0x02, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, 0xd9, + 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, + 0x04, 0xda, 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x80, 0x04, 0xdb, 0x02, 0x00, 0x00, 0x4d, + 0xe2, 0x00, 0x00, 0x80, 0x04, 0xdc, 0x02, 0x00, + 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, 0xdd, + 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, + 0x04, 0xde, 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, + 0x00, 0x80, 0x04, 0xdf, 0x02, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x80, 0x04, 0xe0, 0x02, 0x00, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, 0xe1, + 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, + 0x04, 0xe2, 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, + 0x00, 0x80, 0x04, 0xe3, 0x02, 0x00, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x80, 0x04, 0xe4, 0x02, 0x00, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x7d, 0xbe, 0x7e, 0xbe, 0x7f, 0xbe, + 0x80, 0xbe, 0x81, 0xbe, 0x82, 0xbe, 0x83, 0xbe, + 0x84, 0xbe, 0x85, 0xbe, 0x86, 0xbe, 0x87, 0xbe, + 0x88, 0x26, 0x0c, 0x00, 0x4d, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0xe5, 0x02, 0x00, 0x00, 0x04, 0xe6, + 0x02, 0x00, 0x00, 0x04, 0xe7, 0x02, 0x00, 0x00, + 0x04, 0xe8, 0x02, 0x00, 0x00, 0x04, 0xe9, 0x02, + 0x00, 0x00, 0x04, 0xea, 0x02, 0x00, 0x00, 0x04, + 0xeb, 0x02, 0x00, 0x00, 0x04, 0xec, 0x02, 0x00, + 0x00, 0x04, 0xed, 0x02, 0x00, 0x00, 0x04, 0xee, + 0x02, 0x00, 0x00, 0x04, 0xef, 0x02, 0x00, 0x00, + 0x04, 0xf0, 0x02, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe5, 0x02, + 0x00, 0x00, 0x04, 0xe6, 0x02, 0x00, 0x00, 0x04, + 0xe7, 0x02, 0x00, 0x00, 0x04, 0xe8, 0x02, 0x00, + 0x00, 0x04, 0xe9, 0x02, 0x00, 0x00, 0x04, 0xea, + 0x02, 0x00, 0x00, 0x04, 0xeb, 0x02, 0x00, 0x00, + 0x04, 0xec, 0x02, 0x00, 0x00, 0x04, 0xed, 0x02, + 0x00, 0x00, 0x04, 0xee, 0x02, 0x00, 0x00, 0x04, + 0xef, 0x02, 0x00, 0x00, 0x04, 0xf0, 0x02, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x75, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xf1, + 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0xf1, 0x02, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xf1, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x77, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x4d, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, + 0x7a, 0x01, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x45, 0x01, 0x00, 0x00, + 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, + 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x64, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x46, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x75, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xf2, 0x02, 0x00, + 0x00, 0x04, 0xf3, 0x02, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0xf2, + 0x02, 0x00, 0x00, 0x04, 0xf3, 0x02, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xf2, 0x02, 0x00, 0x00, 0x04, 0xf3, 0x02, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, + 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x4d, 0xf4, + 0x02, 0x00, 0x00, 0x4d, 0xf5, 0x02, 0x00, 0x00, + 0x0b, 0x04, 0xf6, 0x02, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xf7, 0x02, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0xf8, 0x02, 0x00, 0x00, 0x4d, 0xf9, 0x02, + 0x00, 0x00, 0x04, 0xfa, 0x02, 0x00, 0x00, 0x4d, + 0xfb, 0x02, 0x00, 0x00, 0x4d, 0xfc, 0x02, 0x00, + 0x00, 0x0b, 0x04, 0xfd, 0x02, 0x00, 0x00, 0x4d, + 0xf9, 0x02, 0x00, 0x00, 0x04, 0xfe, 0x02, 0x00, + 0x00, 0x4d, 0xfb, 0x02, 0x00, 0x00, 0x4d, 0xff, + 0x02, 0x00, 0x00, 0x0b, 0x04, 0x00, 0x03, 0x00, + 0x00, 0x4d, 0xf9, 0x02, 0x00, 0x00, 0x04, 0x01, + 0x03, 0x00, 0x00, 0x4d, 0xfb, 0x02, 0x00, 0x00, + 0x4d, 0x02, 0x03, 0x00, 0x00, 0x4d, 0x03, 0x03, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x04, 0x03, 0x00, + 0x00, 0x4d, 0xfc, 0x02, 0x00, 0x00, 0x04, 0x05, + 0x03, 0x00, 0x00, 0x4d, 0x06, 0x03, 0x00, 0x00, + 0x04, 0x07, 0x03, 0x00, 0x00, 0x4d, 0x08, 0x03, + 0x00, 0x00, 0x04, 0x09, 0x03, 0x00, 0x00, 0x4d, + 0x0a, 0x03, 0x00, 0x00, 0x04, 0x0b, 0x03, 0x00, + 0x00, 0x4d, 0x0c, 0x03, 0x00, 0x00, 0x04, 0x0d, + 0x03, 0x00, 0x00, 0x4d, 0x0e, 0x03, 0x00, 0x00, + 0x04, 0x0f, 0x03, 0x00, 0x00, 0x4d, 0x10, 0x03, + 0x00, 0x00, 0x4d, 0xf6, 0x02, 0x00, 0x00, 0x4d, + 0x11, 0x03, 0x00, 0x00, 0x0b, 0x04, 0x12, 0x03, + 0x00, 0x00, 0x4d, 0x13, 0x03, 0x00, 0x00, 0x04, + 0x14, 0x03, 0x00, 0x00, 0x4d, 0x15, 0x03, 0x00, + 0x00, 0x04, 0x16, 0x03, 0x00, 0x00, 0x4d, 0x17, + 0x03, 0x00, 0x00, 0x04, 0x18, 0x03, 0x00, 0x00, + 0x4d, 0x19, 0x03, 0x00, 0x00, 0x04, 0x1a, 0x03, + 0x00, 0x00, 0x4d, 0x1b, 0x03, 0x00, 0x00, 0x04, + 0x1c, 0x03, 0x00, 0x00, 0x4d, 0x1d, 0x03, 0x00, + 0x00, 0x04, 0x1e, 0x03, 0x00, 0x00, 0x4d, 0x1f, + 0x03, 0x00, 0x00, 0x04, 0x20, 0x03, 0x00, 0x00, + 0x4d, 0x21, 0x03, 0x00, 0x00, 0x04, 0x22, 0x03, + 0x00, 0x00, 0x4d, 0x23, 0x03, 0x00, 0x00, 0x04, + 0x24, 0x03, 0x00, 0x00, 0x4d, 0x25, 0x03, 0x00, + 0x00, 0x04, 0x26, 0x03, 0x00, 0x00, 0x4d, 0x27, + 0x03, 0x00, 0x00, 0x04, 0x28, 0x03, 0x00, 0x00, + 0x4d, 0x29, 0x03, 0x00, 0x00, 0x04, 0x2a, 0x03, + 0x00, 0x00, 0x4d, 0x2b, 0x03, 0x00, 0x00, 0x04, + 0x2c, 0x03, 0x00, 0x00, 0x4d, 0x2d, 0x03, 0x00, + 0x00, 0x04, 0x2e, 0x03, 0x00, 0x00, 0x4d, 0x2f, + 0x03, 0x00, 0x00, 0x04, 0x30, 0x03, 0x00, 0x00, + 0x4d, 0x31, 0x03, 0x00, 0x00, 0x04, 0x32, 0x03, + 0x00, 0x00, 0x4d, 0x33, 0x03, 0x00, 0x00, 0x04, + 0x34, 0x03, 0x00, 0x00, 0x4d, 0x35, 0x03, 0x00, + 0x00, 0x04, 0x36, 0x03, 0x00, 0x00, 0x4d, 0x37, + 0x03, 0x00, 0x00, 0x04, 0x38, 0x03, 0x00, 0x00, + 0x4d, 0x39, 0x03, 0x00, 0x00, 0x4d, 0x3a, 0x03, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x00, 0x24, + 0x01, 0x00, 0xcc, 0x28, 0xf6, 0x0c, 0x01, 0x00, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, + 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, + 0x33, 0x07, 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_en_US_size = 24830; + +const uint8_t intl_en_US[24830] = { + 0x01, 0xed, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x0a, 0x65, 0x6e, 0x2d, 0x55, 0x53, 0x0c, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x0e, 0x67, 0x72, + 0x65, 0x67, 0x6f, 0x72, 0x79, 0x10, 0x62, 0x75, + 0x64, 0x64, 0x68, 0x69, 0x73, 0x74, 0x0e, 0x63, + 0x68, 0x69, 0x6e, 0x65, 0x73, 0x65, 0x0c, 0x63, + 0x6f, 0x70, 0x74, 0x69, 0x63, 0x0a, 0x64, 0x61, + 0x6e, 0x67, 0x69, 0x0e, 0x65, 0x74, 0x68, 0x69, + 0x6f, 0x61, 0x61, 0x10, 0x65, 0x74, 0x68, 0x69, + 0x6f, 0x70, 0x69, 0x63, 0x0e, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x69, 0x63, 0x0c, 0x68, 0x65, 0x62, + 0x72, 0x65, 0x77, 0x0c, 0x69, 0x6e, 0x64, 0x69, + 0x61, 0x6e, 0x0e, 0x69, 0x73, 0x6c, 0x61, 0x6d, + 0x69, 0x63, 0x10, 0x69, 0x73, 0x6c, 0x61, 0x6d, + 0x69, 0x63, 0x63, 0x10, 0x6a, 0x61, 0x70, 0x61, + 0x6e, 0x65, 0x73, 0x65, 0x0e, 0x70, 0x65, 0x72, + 0x73, 0x69, 0x61, 0x6e, 0x06, 0x72, 0x6f, 0x63, + 0x04, 0x63, 0x61, 0x0e, 0x68, 0x6f, 0x75, 0x72, + 0x4e, 0x6f, 0x30, 0x0c, 0x68, 0x6f, 0x75, 0x72, + 0x31, 0x32, 0x10, 0x7b, 0x31, 0x7d, 0x2c, 0x20, + 0x7b, 0x30, 0x7d, 0x0a, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x0c, 0x6d, 0x65, 0x64, 0x69, 0x75, 0x6d, + 0x18, 0x7b, 0x31, 0x7d, 0x20, 0x27, 0x61, 0x74, + 0x27, 0x20, 0x7b, 0x30, 0x7d, 0x08, 0x66, 0x75, + 0x6c, 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x02, + 0x64, 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, 0x06, + 0x64, 0x20, 0x45, 0x04, 0x45, 0x64, 0x10, 0x45, + 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x06, + 0x45, 0x68, 0x6d, 0x0e, 0x45, 0x20, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x06, 0x45, 0x48, 0x6d, 0x16, + 0x45, 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x61, 0x08, 0x45, 0x68, 0x6d, 0x73, + 0x14, 0x45, 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x08, 0x45, 0x48, 0x6d, 0x73, + 0x06, 0x79, 0x20, 0x47, 0x04, 0x47, 0x79, 0x0e, + 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x20, 0x47, 0x0a, + 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x14, 0x4d, 0x4d, + 0x4d, 0x20, 0x64, 0x2c, 0x20, 0x79, 0x20, 0x47, + 0x0c, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x1a, + 0x45, 0x2c, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x64, + 0x2c, 0x20, 0x79, 0x20, 0x47, 0x0e, 0x47, 0x79, + 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x06, 0x68, 0x20, + 0x61, 0x02, 0x68, 0x04, 0x48, 0x48, 0x02, 0x48, + 0x0c, 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x04, + 0x68, 0x6d, 0x0a, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x04, 0x48, 0x6d, 0x12, 0x68, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x61, 0x06, 0x68, 0x6d, + 0x73, 0x10, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x06, 0x48, 0x6d, 0x73, 0x16, 0x68, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, + 0x20, 0x76, 0x08, 0x68, 0x6d, 0x73, 0x76, 0x14, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x76, 0x08, 0x48, 0x6d, 0x73, 0x76, 0x10, + 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x20, 0x76, + 0x06, 0x68, 0x6d, 0x76, 0x0e, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x20, 0x76, 0x06, 0x48, 0x6d, 0x76, + 0x02, 0x4c, 0x02, 0x4d, 0x06, 0x4d, 0x2f, 0x64, + 0x04, 0x4d, 0x64, 0x0c, 0x45, 0x2c, 0x20, 0x4d, + 0x2f, 0x64, 0x06, 0x4d, 0x45, 0x64, 0x06, 0x4c, + 0x4c, 0x4c, 0x06, 0x4d, 0x4d, 0x4d, 0x0a, 0x4d, + 0x4d, 0x4d, 0x20, 0x64, 0x08, 0x4d, 0x4d, 0x4d, + 0x64, 0x10, 0x45, 0x2c, 0x20, 0x4d, 0x4d, 0x4d, + 0x20, 0x64, 0x0a, 0x4d, 0x4d, 0x4d, 0x45, 0x64, + 0x0c, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x0a, + 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x0a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x04, 0x6d, 0x73, 0x02, 0x79, + 0x06, 0x4d, 0x2f, 0x79, 0x04, 0x79, 0x4d, 0x0a, + 0x4d, 0x2f, 0x64, 0x2f, 0x79, 0x06, 0x79, 0x4d, + 0x64, 0x10, 0x45, 0x2c, 0x20, 0x4d, 0x2f, 0x64, + 0x2f, 0x79, 0x08, 0x79, 0x4d, 0x45, 0x64, 0x0a, + 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x08, 0x79, 0x4d, + 0x4d, 0x4d, 0x10, 0x4d, 0x4d, 0x4d, 0x20, 0x64, + 0x2c, 0x20, 0x79, 0x0a, 0x79, 0x4d, 0x4d, 0x4d, + 0x64, 0x16, 0x45, 0x2c, 0x20, 0x4d, 0x4d, 0x4d, + 0x20, 0x64, 0x2c, 0x20, 0x79, 0x0c, 0x79, 0x4d, + 0x4d, 0x4d, 0x45, 0x64, 0x0c, 0x4d, 0x4d, 0x4d, + 0x4d, 0x20, 0x79, 0x0a, 0x79, 0x4d, 0x4d, 0x4d, + 0x4d, 0x0a, 0x51, 0x51, 0x51, 0x20, 0x79, 0x08, + 0x79, 0x51, 0x51, 0x51, 0x0c, 0x51, 0x51, 0x51, + 0x51, 0x20, 0x79, 0x0a, 0x79, 0x51, 0x51, 0x51, + 0x51, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x73, 0x1e, 0x45, 0x45, 0x45, 0x45, 0x2c, + 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x2c, + 0x20, 0x79, 0x14, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, + 0x45, 0x45, 0x45, 0x45, 0x64, 0x12, 0x4d, 0x4d, + 0x4d, 0x4d, 0x20, 0x64, 0x2c, 0x20, 0x79, 0x0c, + 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x0c, 0x4d, + 0x2f, 0x64, 0x2f, 0x79, 0x79, 0x16, 0x64, 0x61, + 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x73, 0x1c, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x61, 0x20, 0x7a, 0x7a, 0x7a, 0x7a, + 0x12, 0x68, 0x6d, 0x6d, 0x73, 0x73, 0x7a, 0x7a, + 0x7a, 0x7a, 0x16, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x20, 0x61, 0x20, 0x7a, 0x08, 0x68, + 0x6d, 0x73, 0x7a, 0x16, 0x74, 0x69, 0x6d, 0x65, + 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x0e, + 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x02, + 0x4a, 0x02, 0x46, 0x02, 0x41, 0x02, 0x53, 0x02, + 0x4f, 0x02, 0x4e, 0x02, 0x44, 0x0c, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x06, 0x4a, 0x61, 0x6e, + 0x06, 0x46, 0x65, 0x62, 0x06, 0x4d, 0x61, 0x72, + 0x06, 0x41, 0x70, 0x72, 0x06, 0x4d, 0x61, 0x79, + 0x06, 0x4a, 0x75, 0x6e, 0x06, 0x4a, 0x75, 0x6c, + 0x06, 0x41, 0x75, 0x67, 0x06, 0x53, 0x65, 0x70, + 0x06, 0x4f, 0x63, 0x74, 0x06, 0x4e, 0x6f, 0x76, + 0x06, 0x44, 0x65, 0x63, 0x0e, 0x4a, 0x61, 0x6e, + 0x75, 0x61, 0x72, 0x79, 0x10, 0x46, 0x65, 0x62, + 0x72, 0x75, 0x61, 0x72, 0x79, 0x0a, 0x4d, 0x61, + 0x72, 0x63, 0x68, 0x0a, 0x41, 0x70, 0x72, 0x69, + 0x6c, 0x08, 0x4a, 0x75, 0x6e, 0x65, 0x08, 0x4a, + 0x75, 0x6c, 0x79, 0x0c, 0x41, 0x75, 0x67, 0x75, + 0x73, 0x74, 0x12, 0x53, 0x65, 0x70, 0x74, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x0e, 0x4f, 0x63, 0x74, + 0x6f, 0x62, 0x65, 0x72, 0x10, 0x4e, 0x6f, 0x76, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x10, 0x44, 0x65, + 0x63, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x0c, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x73, 0x02, 0x54, 0x02, + 0x57, 0x06, 0x53, 0x75, 0x6e, 0x06, 0x4d, 0x6f, + 0x6e, 0x06, 0x54, 0x75, 0x65, 0x06, 0x57, 0x65, + 0x64, 0x06, 0x54, 0x68, 0x75, 0x06, 0x46, 0x72, + 0x69, 0x06, 0x53, 0x61, 0x74, 0x0c, 0x53, 0x75, + 0x6e, 0x64, 0x61, 0x79, 0x0c, 0x4d, 0x6f, 0x6e, + 0x64, 0x61, 0x79, 0x0e, 0x54, 0x75, 0x65, 0x73, + 0x64, 0x61, 0x79, 0x12, 0x57, 0x65, 0x64, 0x6e, + 0x65, 0x73, 0x64, 0x61, 0x79, 0x10, 0x54, 0x68, + 0x75, 0x72, 0x73, 0x64, 0x61, 0x79, 0x0c, 0x46, + 0x72, 0x69, 0x64, 0x61, 0x79, 0x10, 0x53, 0x61, + 0x74, 0x75, 0x72, 0x64, 0x61, 0x79, 0x08, 0x64, + 0x61, 0x79, 0x73, 0x04, 0x42, 0x45, 0x08, 0x65, + 0x72, 0x61, 0x73, 0x04, 0x41, 0x4d, 0x04, 0x61, + 0x6d, 0x04, 0x50, 0x4d, 0x04, 0x70, 0x6d, 0x14, + 0x64, 0x61, 0x79, 0x50, 0x65, 0x72, 0x69, 0x6f, + 0x64, 0x73, 0x06, 0x4d, 0x6f, 0x31, 0x06, 0x4d, + 0x6f, 0x32, 0x06, 0x4d, 0x6f, 0x33, 0x06, 0x4d, + 0x6f, 0x34, 0x06, 0x4d, 0x6f, 0x35, 0x06, 0x4d, + 0x6f, 0x36, 0x06, 0x4d, 0x6f, 0x37, 0x06, 0x4d, + 0x6f, 0x38, 0x06, 0x4d, 0x6f, 0x39, 0x08, 0x4d, + 0x6f, 0x31, 0x30, 0x08, 0x4d, 0x6f, 0x31, 0x31, + 0x08, 0x4d, 0x6f, 0x31, 0x32, 0x0c, 0x4d, 0x6f, + 0x6e, 0x74, 0x68, 0x31, 0x0c, 0x4d, 0x6f, 0x6e, + 0x74, 0x68, 0x32, 0x0c, 0x4d, 0x6f, 0x6e, 0x74, + 0x68, 0x33, 0x0c, 0x4d, 0x6f, 0x6e, 0x74, 0x68, + 0x34, 0x0c, 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x35, + 0x0c, 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x36, 0x0c, + 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x37, 0x0c, 0x4d, + 0x6f, 0x6e, 0x74, 0x68, 0x38, 0x0c, 0x4d, 0x6f, + 0x6e, 0x74, 0x68, 0x39, 0x0e, 0x4d, 0x6f, 0x6e, + 0x74, 0x68, 0x31, 0x30, 0x0e, 0x4d, 0x6f, 0x6e, + 0x74, 0x68, 0x31, 0x31, 0x0e, 0x4d, 0x6f, 0x6e, + 0x74, 0x68, 0x31, 0x32, 0x08, 0x54, 0x6f, 0x75, + 0x74, 0x08, 0x42, 0x61, 0x62, 0x61, 0x0a, 0x48, + 0x61, 0x74, 0x6f, 0x72, 0x0a, 0x4b, 0x69, 0x61, + 0x68, 0x6b, 0x08, 0x54, 0x6f, 0x62, 0x61, 0x0c, + 0x41, 0x6d, 0x73, 0x68, 0x69, 0x72, 0x10, 0x42, + 0x61, 0x72, 0x61, 0x6d, 0x68, 0x61, 0x74, 0x12, + 0x42, 0x61, 0x72, 0x61, 0x6d, 0x6f, 0x75, 0x64, + 0x61, 0x0e, 0x42, 0x61, 0x73, 0x68, 0x61, 0x6e, + 0x73, 0x0a, 0x50, 0x61, 0x6f, 0x6e, 0x61, 0x08, + 0x45, 0x70, 0x65, 0x70, 0x0a, 0x4d, 0x65, 0x73, + 0x72, 0x61, 0x0a, 0x4e, 0x61, 0x73, 0x69, 0x65, + 0x08, 0x45, 0x52, 0x41, 0x30, 0x08, 0x45, 0x52, + 0x41, 0x31, 0x10, 0x4d, 0x65, 0x73, 0x6b, 0x65, + 0x72, 0x65, 0x6d, 0x0c, 0x54, 0x65, 0x6b, 0x65, + 0x6d, 0x74, 0x0a, 0x48, 0x65, 0x64, 0x61, 0x72, + 0x0c, 0x54, 0x61, 0x68, 0x73, 0x61, 0x73, 0x06, + 0x54, 0x65, 0x72, 0x0e, 0x59, 0x65, 0x6b, 0x61, + 0x74, 0x69, 0x74, 0x0e, 0x4d, 0x65, 0x67, 0x61, + 0x62, 0x69, 0x74, 0x0c, 0x4d, 0x69, 0x61, 0x7a, + 0x69, 0x61, 0x0c, 0x47, 0x65, 0x6e, 0x62, 0x6f, + 0x74, 0x08, 0x53, 0x65, 0x6e, 0x65, 0x0a, 0x48, + 0x61, 0x6d, 0x6c, 0x65, 0x0e, 0x4e, 0x65, 0x68, + 0x61, 0x73, 0x73, 0x65, 0x0e, 0x50, 0x61, 0x67, + 0x75, 0x6d, 0x65, 0x6e, 0x06, 0x4d, 0x30, 0x31, + 0x06, 0x4d, 0x30, 0x32, 0x06, 0x4d, 0x30, 0x33, + 0x06, 0x4d, 0x30, 0x34, 0x06, 0x4d, 0x30, 0x35, + 0x06, 0x4d, 0x30, 0x36, 0x06, 0x4d, 0x30, 0x37, + 0x06, 0x4d, 0x30, 0x38, 0x06, 0x4d, 0x30, 0x39, + 0x06, 0x4d, 0x31, 0x30, 0x06, 0x4d, 0x31, 0x31, + 0x06, 0x4d, 0x31, 0x32, 0x02, 0x42, 0x06, 0x42, + 0x43, 0x45, 0x04, 0x43, 0x45, 0x04, 0x42, 0x43, + 0x04, 0x41, 0x44, 0x1a, 0x42, 0x65, 0x66, 0x6f, + 0x72, 0x65, 0x20, 0x43, 0x68, 0x72, 0x69, 0x73, + 0x74, 0x16, 0x41, 0x6e, 0x6e, 0x6f, 0x20, 0x44, + 0x6f, 0x6d, 0x69, 0x6e, 0x69, 0x22, 0x42, 0x65, + 0x66, 0x6f, 0x72, 0x65, 0x20, 0x43, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x20, 0x45, 0x72, 0x61, 0x14, + 0x43, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x20, 0x45, + 0x72, 0x61, 0x0c, 0x54, 0x69, 0x73, 0x68, 0x72, + 0x69, 0x0e, 0x48, 0x65, 0x73, 0x68, 0x76, 0x61, + 0x6e, 0x0c, 0x4b, 0x69, 0x73, 0x6c, 0x65, 0x76, + 0x0a, 0x54, 0x65, 0x76, 0x65, 0x74, 0x0c, 0x53, + 0x68, 0x65, 0x76, 0x61, 0x74, 0x0c, 0x41, 0x64, + 0x61, 0x72, 0x20, 0x49, 0x08, 0x41, 0x64, 0x61, + 0x72, 0x0a, 0x4e, 0x69, 0x73, 0x61, 0x6e, 0x08, + 0x49, 0x79, 0x61, 0x72, 0x0a, 0x53, 0x69, 0x76, + 0x61, 0x6e, 0x0a, 0x54, 0x61, 0x6d, 0x75, 0x7a, + 0x04, 0x41, 0x76, 0x08, 0x45, 0x6c, 0x75, 0x6c, + 0x0e, 0x41, 0x64, 0x61, 0x72, 0x20, 0x49, 0x49, + 0x0e, 0x43, 0x68, 0x61, 0x69, 0x74, 0x72, 0x61, + 0x10, 0x56, 0x61, 0x69, 0x73, 0x61, 0x6b, 0x68, + 0x61, 0x10, 0x4a, 0x79, 0x61, 0x69, 0x73, 0x74, + 0x68, 0x61, 0x0c, 0x41, 0x73, 0x61, 0x64, 0x68, + 0x61, 0x0e, 0x53, 0x72, 0x61, 0x76, 0x61, 0x6e, + 0x61, 0x0c, 0x42, 0x68, 0x61, 0x64, 0x72, 0x61, + 0x0c, 0x41, 0x73, 0x76, 0x69, 0x6e, 0x61, 0x0e, + 0x4b, 0x61, 0x72, 0x74, 0x69, 0x6b, 0x61, 0x14, + 0x41, 0x67, 0x72, 0x61, 0x68, 0x61, 0x79, 0x61, + 0x6e, 0x61, 0x0a, 0x50, 0x61, 0x75, 0x73, 0x61, + 0x0a, 0x4d, 0x61, 0x67, 0x68, 0x61, 0x10, 0x50, + 0x68, 0x61, 0x6c, 0x67, 0x75, 0x6e, 0x61, 0x08, + 0x53, 0x61, 0x6b, 0x61, 0x08, 0x4d, 0x75, 0x68, + 0x2e, 0x08, 0x53, 0x61, 0x66, 0x2e, 0x0c, 0x52, + 0x61, 0x62, 0x2e, 0x20, 0x49, 0x0e, 0x52, 0x61, + 0x62, 0x2e, 0x20, 0x49, 0x49, 0x0c, 0x4a, 0x75, + 0x6d, 0x2e, 0x20, 0x49, 0x0e, 0x4a, 0x75, 0x6d, + 0x2e, 0x20, 0x49, 0x49, 0x08, 0x52, 0x61, 0x6a, + 0x2e, 0x08, 0x53, 0x68, 0x61, 0x2e, 0x08, 0x52, + 0x61, 0x6d, 0x2e, 0x0a, 0x53, 0x68, 0x61, 0x77, + 0x2e, 0x11, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, + 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x51, 0x00, + 0x2e, 0x00, 0x11, 0x44, 0x00, 0x68, 0x00, 0x75, + 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x48, + 0x00, 0x2e, 0x00, 0x10, 0x4d, 0x75, 0x68, 0x61, + 0x72, 0x72, 0x61, 0x6d, 0x0a, 0x53, 0x61, 0x66, + 0x61, 0x72, 0x0f, 0x52, 0x00, 0x61, 0x00, 0x62, + 0x00, 0x69, 0x00, 0xbb, 0x02, 0x20, 0x00, 0x49, + 0x00, 0x11, 0x52, 0x00, 0x61, 0x00, 0x62, 0x00, + 0x69, 0x00, 0xbb, 0x02, 0x20, 0x00, 0x49, 0x00, + 0x49, 0x00, 0x10, 0x4a, 0x75, 0x6d, 0x61, 0x64, + 0x61, 0x20, 0x49, 0x12, 0x4a, 0x75, 0x6d, 0x61, + 0x64, 0x61, 0x20, 0x49, 0x49, 0x0a, 0x52, 0x61, + 0x6a, 0x61, 0x62, 0x0f, 0x53, 0x00, 0x68, 0x00, + 0x61, 0x00, 0xbb, 0x02, 0x62, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x0e, 0x52, 0x61, 0x6d, 0x61, 0x64, + 0x61, 0x6e, 0x0e, 0x53, 0x68, 0x61, 0x77, 0x77, + 0x61, 0x6c, 0x19, 0x44, 0x00, 0x68, 0x00, 0x75, + 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x51, + 0x00, 0x69, 0x00, 0xbb, 0x02, 0x64, 0x00, 0x61, + 0x00, 0x68, 0x00, 0x19, 0x44, 0x00, 0x68, 0x00, + 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, + 0x48, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x6a, 0x00, + 0x61, 0x00, 0x68, 0x00, 0x04, 0x41, 0x48, 0x1f, + 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, 0x36, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x48, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x36, 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x36, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x75, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x36, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x1d, 0x57, 0x00, 0x61, 0x00, 0x64, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x52, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, 0x59, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, + 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x2b, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x2d, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x2d, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x2d, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x2a, 0x4a, 0x69, 0x6e, + 0x67, 0x6f, 0x2d, 0x6b, 0x65, 0x69, 0x75, 0x6e, + 0x20, 0x28, 0x37, 0x36, 0x37, 0x2d, 0x37, 0x37, + 0x30, 0x29, 0x1d, 0x48, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x1f, 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x64, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x1f, 0x4b, 0x00, 0x4d, 0x01, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1d, 0x4a, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, + 0x61, 0x00, 0x6a, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1f, 0x53, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x20, 0x54, 0x65, 0x6e, 0x2d, 0x61, 0x6e, 0x20, + 0x28, 0x38, 0x35, 0x37, 0x2d, 0x38, 0x35, 0x39, + 0x29, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x21, 0x47, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x61, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1d, 0x45, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, + 0x45, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4a, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x34, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1b, 0x4c, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1d, 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x41, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, + 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x38, 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, + 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, + 0x69, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, 0x73, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x69, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x29, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x27, 0x4a, 0x00, 0x69, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x45, 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4c, 0x01, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x61, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x25, 0x4a, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x24, 0x54, 0x65, 0x6e, + 0x2d, 0x65, 0x69, 0x20, 0x28, 0x31, 0x31, 0x31, + 0x30, 0x2d, 0x31, 0x31, 0x31, 0x33, 0x29, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x44, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x6a, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x48, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x27, 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1f, 0x4c, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x6d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x41, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x4a, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x59, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, + 0x75, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x29, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x21, 0x4a, 0x00, 0x4d, 0x01, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x27, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x75, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x29, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, 0x29, 0x52, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x45, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x21, 0x48, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, + 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x4c, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x61, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, + 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x48, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x27, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, + 0x4c, 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x45, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, + 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x45, + 0x00, 0x69, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x27, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, + 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x27, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x61, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x4d, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x0a, 0x4d, 0x65, 0x69, 0x6a, 0x69, + 0x0d, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x0b, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x0c, 0x48, 0x65, 0x69, 0x73, 0x65, 0x69, 0x12, + 0x46, 0x61, 0x72, 0x76, 0x61, 0x72, 0x64, 0x69, + 0x6e, 0x16, 0x4f, 0x72, 0x64, 0x69, 0x62, 0x65, + 0x68, 0x65, 0x73, 0x68, 0x74, 0x0e, 0x4b, 0x68, + 0x6f, 0x72, 0x64, 0x61, 0x64, 0x06, 0x54, 0x69, + 0x72, 0x0c, 0x4d, 0x6f, 0x72, 0x64, 0x61, 0x64, + 0x12, 0x53, 0x68, 0x61, 0x68, 0x72, 0x69, 0x76, + 0x61, 0x72, 0x08, 0x4d, 0x65, 0x68, 0x72, 0x08, + 0x41, 0x62, 0x61, 0x6e, 0x08, 0x41, 0x7a, 0x61, + 0x72, 0x06, 0x44, 0x65, 0x79, 0x0c, 0x42, 0x61, + 0x68, 0x6d, 0x61, 0x6e, 0x0c, 0x45, 0x73, 0x66, + 0x61, 0x6e, 0x64, 0x04, 0x41, 0x50, 0x1a, 0x42, + 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x52, 0x2e, + 0x4f, 0x2e, 0x43, 0x2e, 0x0c, 0x4d, 0x69, 0x6e, + 0x67, 0x75, 0x6f, 0x12, 0x63, 0x61, 0x6c, 0x65, + 0x6e, 0x64, 0x61, 0x72, 0x73, 0x08, 0x64, 0x61, + 0x74, 0x65, 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, + 0x6e, 0x75, 0x10, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0x1e, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, + 0x65, 0x72, 0x6e, 0x26, 0x7b, 0x6d, 0x69, 0x6e, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, + 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x0e, + 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x24, + 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, + 0x79, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0x3a, 0x7b, 0x6d, 0x69, 0x6e, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, + 0x79, 0x2a, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, + 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x40, + 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, + 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0x7b, 0x70, 0x65, 0x72, 0x63, + 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, + 0x0e, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, + 0x10, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, + 0x73, 0x02, 0x2e, 0x02, 0x2c, 0x0a, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x06, 0x4e, 0x61, 0x4e, 0x06, + 0x6e, 0x61, 0x6e, 0x02, 0x2b, 0x10, 0x70, 0x6c, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, 0x2d, + 0x12, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, + 0x67, 0x6e, 0x02, 0x25, 0x16, 0x70, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, + 0x03, 0x1e, 0x22, 0x10, 0x69, 0x6e, 0x66, 0x69, + 0x6e, 0x69, 0x74, 0x79, 0x0e, 0x73, 0x79, 0x6d, + 0x62, 0x6f, 0x6c, 0x73, 0x04, 0x41, 0x24, 0x06, + 0x41, 0x55, 0x44, 0x04, 0x52, 0x24, 0x06, 0x42, + 0x52, 0x4c, 0x06, 0x43, 0x41, 0x24, 0x06, 0x43, + 0x41, 0x44, 0x06, 0x43, 0x4e, 0xa5, 0x06, 0x43, + 0x4e, 0x59, 0x03, 0xac, 0x20, 0x06, 0x45, 0x55, + 0x52, 0x02, 0xa3, 0x06, 0x47, 0x42, 0x50, 0x06, + 0x48, 0x4b, 0x24, 0x06, 0x48, 0x4b, 0x44, 0x03, + 0xaa, 0x20, 0x06, 0x49, 0x4c, 0x53, 0x03, 0xb9, + 0x20, 0x06, 0x49, 0x4e, 0x52, 0x02, 0xa5, 0x06, + 0x4a, 0x50, 0x59, 0x03, 0xa9, 0x20, 0x06, 0x4b, + 0x52, 0x57, 0x06, 0x4d, 0x58, 0x24, 0x06, 0x4d, + 0x58, 0x4e, 0x06, 0x4e, 0x5a, 0x24, 0x06, 0x4e, + 0x5a, 0x44, 0x06, 0x4e, 0x54, 0x24, 0x06, 0x54, + 0x57, 0x44, 0x02, 0x24, 0x06, 0x55, 0x53, 0x44, + 0x03, 0xab, 0x20, 0x06, 0x56, 0x4e, 0x44, 0x08, + 0x46, 0x43, 0x46, 0x41, 0x06, 0x58, 0x41, 0x46, + 0x06, 0x45, 0x43, 0x24, 0x06, 0x58, 0x43, 0x44, + 0x06, 0x43, 0x46, 0x41, 0x06, 0x58, 0x4f, 0x46, + 0x08, 0x43, 0x46, 0x50, 0x46, 0x06, 0x58, 0x50, + 0x46, 0x14, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x69, 0x65, 0x73, 0x58, 0x6e, 0x6f, 0x64, + 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, + 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2f, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, + 0x74, 0x61, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x70, + 0x2f, 0x65, 0x6e, 0x2d, 0x55, 0x53, 0x2e, 0x6a, + 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, + 0x01, 0x00, 0x27, 0x00, 0x89, 0x01, 0xd4, 0x6a, + 0x01, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x39, 0xd0, + 0x00, 0x00, 0x00, 0x43, 0xd1, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xd2, 0x00, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd4, 0x00, 0x00, + 0x00, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x04, 0xd6, + 0x00, 0x00, 0x00, 0x04, 0xd7, 0x00, 0x00, 0x00, + 0x04, 0xd8, 0x00, 0x00, 0x00, 0x04, 0xd9, 0x00, + 0x00, 0x00, 0x04, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xdb, 0x00, 0x00, 0x00, 0x04, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x04, 0xde, + 0x00, 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, + 0x04, 0xe0, 0x00, 0x00, 0x00, 0x04, 0xe1, 0x00, + 0x00, 0x00, 0x04, 0xe2, 0x00, 0x00, 0x00, 0x26, + 0x0f, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x0a, + 0x4d, 0xe4, 0x00, 0x00, 0x00, 0x0a, 0x4d, 0xe5, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, 0x00, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe6, + 0x00, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x00, + 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xec, 0x00, + 0x00, 0x00, 0x4d, 0xec, 0x00, 0x00, 0x00, 0x04, + 0xed, 0x00, 0x00, 0x00, 0x4d, 0xee, 0x00, 0x00, + 0x00, 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, 0xf0, + 0x00, 0x00, 0x00, 0x04, 0xf1, 0x00, 0x00, 0x00, + 0x4d, 0xf2, 0x00, 0x00, 0x00, 0x04, 0xf3, 0x00, + 0x00, 0x00, 0x4d, 0xf4, 0x00, 0x00, 0x00, 0x04, + 0xf5, 0x00, 0x00, 0x00, 0x4d, 0xf6, 0x00, 0x00, + 0x00, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xf8, + 0x00, 0x00, 0x00, 0x04, 0xf9, 0x00, 0x00, 0x00, + 0x4d, 0xfa, 0x00, 0x00, 0x00, 0x04, 0xfb, 0x00, + 0x00, 0x00, 0x4d, 0xfc, 0x00, 0x00, 0x00, 0x04, + 0xfd, 0x00, 0x00, 0x00, 0x4d, 0xfe, 0x00, 0x00, + 0x00, 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x01, 0x00, 0x00, 0x04, 0x01, 0x01, 0x00, 0x00, + 0x4d, 0x02, 0x01, 0x00, 0x00, 0x04, 0x03, 0x01, + 0x00, 0x00, 0x4d, 0x04, 0x01, 0x00, 0x00, 0x04, + 0x05, 0x01, 0x00, 0x00, 0x4d, 0x06, 0x01, 0x00, + 0x00, 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0x08, + 0x01, 0x00, 0x00, 0x04, 0x09, 0x01, 0x00, 0x00, + 0x4d, 0x0a, 0x01, 0x00, 0x00, 0x04, 0x0b, 0x01, + 0x00, 0x00, 0x4d, 0x0c, 0x01, 0x00, 0x00, 0x04, + 0x0d, 0x01, 0x00, 0x00, 0x4d, 0x0e, 0x01, 0x00, + 0x00, 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, 0x10, + 0x01, 0x00, 0x00, 0x04, 0x11, 0x01, 0x00, 0x00, + 0x4d, 0x12, 0x01, 0x00, 0x00, 0x04, 0x13, 0x01, + 0x00, 0x00, 0x4d, 0x14, 0x01, 0x00, 0x00, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x4d, 0x16, 0x01, 0x00, + 0x00, 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, 0x18, + 0x01, 0x00, 0x00, 0x04, 0x19, 0x01, 0x00, 0x00, + 0x4d, 0x1a, 0x01, 0x00, 0x00, 0x04, 0x1b, 0x01, + 0x00, 0x00, 0x4d, 0x1c, 0x01, 0x00, 0x00, 0x04, + 0x1d, 0x01, 0x00, 0x00, 0x4d, 0x1e, 0x01, 0x00, + 0x00, 0x04, 0x1f, 0x01, 0x00, 0x00, 0x4d, 0x20, + 0x01, 0x00, 0x00, 0x04, 0x21, 0x01, 0x00, 0x00, + 0x4d, 0x22, 0x01, 0x00, 0x00, 0x04, 0x23, 0x01, + 0x00, 0x00, 0x4d, 0x24, 0x01, 0x00, 0x00, 0x04, + 0x25, 0x01, 0x00, 0x00, 0x4d, 0x25, 0x01, 0x00, + 0x00, 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, 0x27, + 0x01, 0x00, 0x00, 0x04, 0x28, 0x01, 0x00, 0x00, + 0x4d, 0x29, 0x01, 0x00, 0x00, 0x04, 0x2a, 0x01, + 0x00, 0x00, 0x4d, 0x2b, 0x01, 0x00, 0x00, 0x04, + 0x2c, 0x01, 0x00, 0x00, 0x4d, 0x2d, 0x01, 0x00, + 0x00, 0x04, 0x2e, 0x01, 0x00, 0x00, 0x4d, 0x2f, + 0x01, 0x00, 0x00, 0x04, 0x30, 0x01, 0x00, 0x00, + 0x4d, 0x31, 0x01, 0x00, 0x00, 0x04, 0x32, 0x01, + 0x00, 0x00, 0x4d, 0x33, 0x01, 0x00, 0x00, 0x04, + 0x34, 0x01, 0x00, 0x00, 0x4d, 0x35, 0x01, 0x00, + 0x00, 0x04, 0x36, 0x01, 0x00, 0x00, 0x4d, 0x37, + 0x01, 0x00, 0x00, 0x4d, 0x38, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x39, 0x01, 0x00, 0x00, 0x4d, 0x3a, + 0x01, 0x00, 0x00, 0x04, 0x3b, 0x01, 0x00, 0x00, + 0x4d, 0x3c, 0x01, 0x00, 0x00, 0x04, 0x2e, 0x01, + 0x00, 0x00, 0x4d, 0x2f, 0x01, 0x00, 0x00, 0x04, + 0x3d, 0x01, 0x00, 0x00, 0x4d, 0x29, 0x01, 0x00, + 0x00, 0x4d, 0x3e, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x3f, 0x01, 0x00, 0x00, 0x4d, 0x40, 0x01, 0x00, + 0x00, 0x04, 0x41, 0x01, 0x00, 0x00, 0x4d, 0x42, + 0x01, 0x00, 0x00, 0x04, 0x09, 0x01, 0x00, 0x00, + 0x4d, 0x0a, 0x01, 0x00, 0x00, 0x04, 0x05, 0x01, + 0x00, 0x00, 0x4d, 0x06, 0x01, 0x00, 0x00, 0x4d, + 0x43, 0x01, 0x00, 0x00, 0x4d, 0x44, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x0b, 0x04, 0x45, 0x01, 0x00, + 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x16, + 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, + 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x64, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x75, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x78, 0x01, 0x00, 0x00, 0x4d, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, + 0x01, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x00, 0xbe, 0x01, 0xbe, 0x02, + 0xbe, 0x03, 0xbe, 0x04, 0xbe, 0x05, 0xbe, 0x06, + 0xbe, 0x07, 0xbe, 0x08, 0xbe, 0x09, 0xbe, 0x0a, + 0xbe, 0x0b, 0x26, 0x0c, 0x00, 0x4d, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, + 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, + 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, + 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x89, + 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, + 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, + 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, + 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, + 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, + 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, + 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, + 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, + 0x4d, 0xd6, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x0c, 0xbe, 0x0d, 0xbe, 0x0e, 0xbe, 0x0f, 0xbe, + 0x10, 0xbe, 0x11, 0xbe, 0x12, 0xbe, 0x13, 0xbe, + 0x14, 0xbe, 0x15, 0xbe, 0x16, 0xbe, 0x17, 0xbe, + 0x18, 0x26, 0x0d, 0x00, 0x4d, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, + 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, + 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, + 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, + 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, + 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, + 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, + 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, + 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, + 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, + 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, + 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, + 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, + 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, + 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x16, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, + 0xa3, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, + 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x77, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, + 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x19, 0xbe, 0x1a, + 0xbe, 0x1b, 0xbe, 0x1c, 0xbe, 0x1d, 0xbe, 0x1e, + 0xbe, 0x1f, 0xbe, 0x20, 0xbe, 0x21, 0xbe, 0x22, + 0xbe, 0x23, 0xbe, 0x24, 0x26, 0x0c, 0x00, 0x4d, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, + 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, + 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, + 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, + 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, + 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, + 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, + 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, + 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, + 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, + 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, + 0x94, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x25, 0xbe, 0x26, 0xbe, 0x27, 0xbe, + 0x28, 0xbe, 0x29, 0xbe, 0x2a, 0xbe, 0x2b, 0xbe, + 0x2c, 0xbe, 0x2d, 0xbe, 0x2e, 0xbe, 0x2f, 0xbe, + 0x30, 0xbe, 0x31, 0x26, 0x0d, 0x00, 0x4d, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, + 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, + 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, + 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, + 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, + 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, + 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, + 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, + 0xb0, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, + 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, + 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, + 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, + 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, + 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, + 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, 0xae, + 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, + 0x04, 0xb0, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, + 0xa3, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, + 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa2, + 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, + 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x32, + 0xbe, 0x33, 0xbe, 0x34, 0xbe, 0x35, 0xbe, 0x36, + 0xbe, 0x37, 0xbe, 0x38, 0xbe, 0x39, 0xbe, 0x3a, + 0xbe, 0x3b, 0xbe, 0x3c, 0xbe, 0x3d, 0xbe, 0x3e, + 0x26, 0x0d, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, + 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, + 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, + 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, + 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, + 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, + 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, + 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, + 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, + 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, + 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, + 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, + 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, + 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, + 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xa2, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x77, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, + 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0xd9, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x3f, 0xbe, 0x40, + 0xbe, 0x41, 0xbe, 0x42, 0xbe, 0x43, 0xbe, 0x44, + 0xbe, 0x45, 0xbe, 0x46, 0xbe, 0x47, 0xbe, 0x48, + 0xbe, 0x49, 0xbe, 0x4a, 0x26, 0x0c, 0x00, 0x4d, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, + 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, 0xb3, + 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, 0x00, + 0x04, 0xb5, 0x01, 0x00, 0x00, 0x04, 0xb6, 0x01, + 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, + 0xb8, 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, + 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, 0x04, 0xbb, + 0x01, 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, + 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, 0x04, + 0xb4, 0x01, 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, + 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb7, + 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, + 0x04, 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, + 0x00, 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, + 0xbc, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, + 0x04, 0xa3, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa2, 0x01, + 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, + 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x45, 0x01, + 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x45, + 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x75, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xbd, + 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, + 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, 0x04, + 0xc1, 0x01, 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, + 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, 0x26, 0x04, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xc2, + 0x01, 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, + 0x04, 0xc4, 0x01, 0x00, 0x00, 0x04, 0xc5, 0x01, + 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x4d, + 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, + 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x4b, 0xbe, 0x4c, 0xbe, 0x4d, 0xbe, 0x4e, + 0xbe, 0x4f, 0xbe, 0x50, 0xbe, 0x51, 0xbe, 0x52, + 0xbe, 0x53, 0xbe, 0x54, 0xbe, 0x55, 0xbe, 0x56, + 0xbe, 0x57, 0xbe, 0x58, 0x26, 0x0e, 0x00, 0x4d, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, + 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, + 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, + 0x04, 0xca, 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, + 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, + 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, + 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, + 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, + 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, + 0x00, 0x00, 0x26, 0x0e, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, + 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, + 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, 0x04, 0xca, + 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, + 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, + 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, 0x04, + 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, + 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, 0x04, 0xd2, + 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, + 0x26, 0x0e, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x64, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x75, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x78, 0x01, 0x00, 0x00, 0x4d, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x59, 0xbe, 0x5a, 0xbe, 0x5b, + 0xbe, 0x5c, 0xbe, 0x5d, 0xbe, 0x5e, 0xbe, 0x5f, + 0xbe, 0x60, 0xbe, 0x61, 0xbe, 0x62, 0xbe, 0x63, + 0xbe, 0x64, 0x26, 0x0c, 0x00, 0x4d, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, + 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, + 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, 0xd8, + 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, + 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, + 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, 0x04, + 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, + 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd4, + 0x01, 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, + 0x04, 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, + 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, + 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, + 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, + 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, + 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xe0, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x77, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, + 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x65, 0xbe, 0x66, + 0xbe, 0x67, 0xbe, 0x68, 0xbe, 0x69, 0xbe, 0x6a, + 0xbe, 0x6b, 0xbe, 0x6c, 0xbe, 0x6d, 0xbe, 0x6e, + 0xbe, 0x6f, 0xbe, 0x70, 0x26, 0x0c, 0x00, 0x4d, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, + 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, 0xe3, + 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, + 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, + 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, + 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, + 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, + 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, + 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, + 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, + 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, + 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, + 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, + 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, + 0xf8, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xf9, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0xf9, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, + 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x71, + 0xbe, 0x72, 0xbe, 0x73, 0xbe, 0x74, 0xbe, 0x75, + 0xbe, 0x76, 0xbe, 0x77, 0xbe, 0x78, 0xbe, 0x79, + 0xbe, 0x7a, 0xbe, 0x7b, 0xbe, 0x7c, 0x26, 0x0c, + 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0xe1, + 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, + 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, + 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, + 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, + 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, + 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, + 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, + 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, + 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, + 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, + 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, + 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, + 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, + 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x64, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xf9, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0xf9, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xf9, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x4d, + 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, + 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, 0x45, + 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, + 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, + 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, + 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, + 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, + 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, 0x04, 0x03, + 0x02, 0x00, 0x00, 0x04, 0x04, 0x02, 0x00, 0x00, + 0x04, 0x05, 0x02, 0x00, 0x00, 0x04, 0x06, 0x02, + 0x00, 0x00, 0x04, 0x07, 0x02, 0x00, 0x00, 0x04, + 0x08, 0x02, 0x00, 0x00, 0x04, 0x09, 0x02, 0x00, + 0x00, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x04, 0x0b, + 0x02, 0x00, 0x00, 0x04, 0x0c, 0x02, 0x00, 0x00, + 0x04, 0x0d, 0x02, 0x00, 0x00, 0x04, 0x0e, 0x02, + 0x00, 0x00, 0x04, 0x0f, 0x02, 0x00, 0x00, 0x04, + 0x10, 0x02, 0x00, 0x00, 0x04, 0x11, 0x02, 0x00, + 0x00, 0x04, 0x12, 0x02, 0x00, 0x00, 0x04, 0x13, + 0x02, 0x00, 0x00, 0x04, 0x14, 0x02, 0x00, 0x00, + 0x04, 0x15, 0x02, 0x00, 0x00, 0x04, 0x16, 0x02, + 0x00, 0x00, 0x04, 0x17, 0x02, 0x00, 0x00, 0x04, + 0x18, 0x02, 0x00, 0x00, 0x04, 0x19, 0x02, 0x00, + 0x00, 0x26, 0x20, 0x00, 0x04, 0x1a, 0x02, 0x00, + 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0x1b, + 0x02, 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, + 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, + 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, + 0x23, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, + 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x1f, + 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, + 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, + 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, + 0x27, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, + 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x23, + 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, + 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, + 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, + 0x2b, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, + 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x27, + 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, + 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, + 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, + 0x2f, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, + 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x2b, + 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, + 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, + 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, + 0x33, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, + 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x2f, + 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, + 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, + 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, + 0x37, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, + 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x33, + 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, + 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, + 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, + 0x3b, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, + 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x37, + 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, + 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, + 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, + 0x3f, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, + 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x3b, + 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, + 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, + 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, + 0x43, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, + 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x3f, + 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, + 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, + 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, + 0x47, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, + 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x43, + 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, + 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, + 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, + 0x4b, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, + 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x47, + 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, + 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, + 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, + 0x4f, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, + 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x4b, + 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, + 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, + 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, + 0x53, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, + 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x4f, + 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, + 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, + 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, + 0x57, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, + 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x53, + 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, + 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, + 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, + 0x5b, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, + 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x57, + 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, + 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, + 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, + 0x5f, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, + 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x5b, + 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, + 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, + 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, + 0x63, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, + 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x5f, + 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, + 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, + 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, + 0x67, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, + 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x63, + 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, + 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, + 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, + 0x6b, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, + 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x67, + 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, + 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, + 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, + 0x6f, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, + 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x6b, + 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, + 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, + 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, + 0x73, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, + 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x6f, + 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, + 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, + 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, + 0x77, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, + 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x73, + 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, + 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, + 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, + 0x7b, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, + 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x77, + 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, + 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, + 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, + 0x7f, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, + 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x7b, + 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, + 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, + 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, + 0x83, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, + 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x7f, + 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, + 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, + 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, + 0x87, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, + 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x83, + 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, + 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, + 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, + 0x8b, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, + 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x87, + 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, + 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, + 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, + 0x8f, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, + 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x8b, + 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, + 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, + 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, + 0x93, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, + 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x8f, + 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, + 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, + 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, + 0x97, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, + 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x93, + 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, + 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, + 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, + 0x9b, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, + 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x97, + 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, + 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, + 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, + 0x9f, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, + 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x9b, + 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, + 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, + 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, + 0xa3, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, + 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x9f, + 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, + 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, + 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, + 0xa7, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, + 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0xa3, + 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, + 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, + 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, + 0xab, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, + 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0xa7, + 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, + 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, + 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, + 0xaf, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, + 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0xab, + 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, + 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, + 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, + 0xb3, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, + 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0xaf, + 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, + 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, + 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, + 0xb7, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, + 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0xb3, + 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, + 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, + 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, + 0xbb, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, + 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0xb7, + 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, + 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, + 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, + 0xbf, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, + 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0xbb, + 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, + 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, + 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, + 0xc3, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, + 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xbf, + 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, + 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, + 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, + 0xc7, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, + 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xc3, + 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, + 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, + 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, + 0xcb, 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, + 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xc7, + 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, + 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, + 0xcf, 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, + 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xcb, + 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, + 0x04, 0xcc, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, + 0x00, 0x80, 0x04, 0xcd, 0x02, 0x00, 0x00, 0x4d, + 0xd3, 0x00, 0x00, 0x80, 0x04, 0xce, 0x02, 0x00, + 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xcf, + 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, + 0x04, 0xd0, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, + 0x00, 0x80, 0x04, 0xd1, 0x02, 0x00, 0x00, 0x4d, + 0xd7, 0x00, 0x00, 0x80, 0x04, 0xd2, 0x02, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xd3, + 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, + 0x04, 0xd4, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x80, 0x04, 0xd5, 0x02, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x02, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xd7, + 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, + 0x04, 0xd8, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x80, 0x04, 0xd9, 0x02, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x80, 0x04, 0xda, 0x02, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xdb, + 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, + 0x04, 0xdc, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x80, 0x04, 0xdd, 0x02, 0x00, 0x00, 0x4d, + 0xe3, 0x00, 0x00, 0x80, 0x04, 0xde, 0x02, 0x00, + 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xdf, + 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, + 0x04, 0xe0, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, + 0x00, 0x80, 0x04, 0xe1, 0x02, 0x00, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x80, 0x04, 0x16, 0x01, 0x00, + 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x80, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x80, 0x4d, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, + 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, + 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, + 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, + 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, + 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, 0x04, 0x03, + 0x02, 0x00, 0x00, 0x04, 0x04, 0x02, 0x00, 0x00, + 0x04, 0x05, 0x02, 0x00, 0x00, 0x04, 0x06, 0x02, + 0x00, 0x00, 0x04, 0x07, 0x02, 0x00, 0x00, 0x04, + 0x08, 0x02, 0x00, 0x00, 0x04, 0x09, 0x02, 0x00, + 0x00, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x04, 0x0b, + 0x02, 0x00, 0x00, 0x04, 0x0c, 0x02, 0x00, 0x00, + 0x04, 0x0d, 0x02, 0x00, 0x00, 0x04, 0x0e, 0x02, + 0x00, 0x00, 0x04, 0x0f, 0x02, 0x00, 0x00, 0x04, + 0x10, 0x02, 0x00, 0x00, 0x04, 0x11, 0x02, 0x00, + 0x00, 0x04, 0x12, 0x02, 0x00, 0x00, 0x04, 0x13, + 0x02, 0x00, 0x00, 0x04, 0x14, 0x02, 0x00, 0x00, + 0x04, 0x15, 0x02, 0x00, 0x00, 0x04, 0x16, 0x02, + 0x00, 0x00, 0x04, 0x17, 0x02, 0x00, 0x00, 0x04, + 0x18, 0x02, 0x00, 0x00, 0x04, 0x19, 0x02, 0x00, + 0x00, 0x26, 0x20, 0x00, 0x04, 0x1a, 0x02, 0x00, + 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0x1b, + 0x02, 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, + 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, + 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, + 0x23, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, + 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x1f, + 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, + 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, + 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, + 0x27, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, + 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x23, + 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, + 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, + 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, + 0x2b, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, + 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x27, + 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, + 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, + 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, + 0x2f, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, + 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x2b, + 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, + 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, + 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, + 0x33, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, + 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x2f, + 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, + 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, + 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, + 0x37, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, + 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x33, + 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, + 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, + 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, + 0x3b, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, + 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x37, + 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, + 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, + 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, + 0x3f, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, + 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x3b, + 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, + 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, + 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, + 0x43, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, + 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x3f, + 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, + 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, + 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, + 0x47, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, + 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x43, + 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, + 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, + 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, + 0x4b, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, + 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x47, + 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, + 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, + 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, + 0x4f, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, + 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x4b, + 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, + 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, + 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, + 0x53, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, + 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x4f, + 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, + 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, + 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, + 0x57, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, + 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x53, + 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, + 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, + 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, + 0x5b, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, + 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x57, + 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, + 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, + 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, + 0x5f, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, + 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x5b, + 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, + 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, + 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, + 0x63, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, + 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x5f, + 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, + 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, + 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, + 0x67, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, + 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x63, + 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, + 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, + 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, + 0x6b, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, + 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x67, + 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, + 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, + 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, + 0x6f, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, + 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x6b, + 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, + 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, + 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, + 0x73, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, + 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x6f, + 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, + 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, + 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, + 0x77, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, + 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x73, + 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, + 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, + 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, + 0x7b, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, + 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x77, + 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, + 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, + 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, + 0x7f, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, + 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x7b, + 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, + 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, + 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, + 0x83, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, + 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x7f, + 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, + 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, + 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, + 0x87, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, + 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x83, + 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, + 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, + 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, + 0x8b, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, + 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x87, + 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, + 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, + 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, + 0x8f, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, + 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x8b, + 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, + 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, + 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, + 0x93, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, + 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x8f, + 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, + 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, + 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, + 0x97, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, + 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x93, + 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, + 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, + 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, + 0x9b, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, + 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x97, + 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, + 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, + 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, + 0x9f, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, + 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x9b, + 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, + 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, + 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, + 0xa3, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, + 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x9f, + 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, + 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, + 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, + 0xa7, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, + 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0xa3, + 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, + 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, + 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, + 0xab, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, + 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0xa7, + 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, + 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, + 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, + 0xaf, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, + 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0xab, + 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, + 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, + 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, + 0xb3, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, + 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0xaf, + 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, + 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, + 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, + 0xb7, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, + 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0xb3, + 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, + 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, + 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, + 0xbb, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, + 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0xb7, + 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, + 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, + 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, + 0xbf, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, + 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0xbb, + 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, + 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, + 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, + 0xc3, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, + 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xbf, + 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, + 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, + 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, + 0xc7, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, + 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xc3, + 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, + 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, + 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, + 0xcb, 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, + 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xc7, + 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, + 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, + 0xcf, 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, + 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xcb, + 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, + 0x04, 0xcc, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, + 0x00, 0x80, 0x04, 0xcd, 0x02, 0x00, 0x00, 0x4d, + 0xd3, 0x00, 0x00, 0x80, 0x04, 0xce, 0x02, 0x00, + 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xcf, + 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, + 0x04, 0xd0, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, + 0x00, 0x80, 0x04, 0xd1, 0x02, 0x00, 0x00, 0x4d, + 0xd7, 0x00, 0x00, 0x80, 0x04, 0xd2, 0x02, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xd3, + 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, + 0x04, 0xd4, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x80, 0x04, 0xd5, 0x02, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x02, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xd7, + 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, + 0x04, 0xd8, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x80, 0x04, 0xd9, 0x02, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x80, 0x04, 0xda, 0x02, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xdb, + 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, + 0x04, 0xdc, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x80, 0x04, 0xdd, 0x02, 0x00, 0x00, 0x4d, + 0xe3, 0x00, 0x00, 0x80, 0x04, 0xde, 0x02, 0x00, + 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xdf, + 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, + 0x04, 0xe0, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, + 0x00, 0x80, 0x04, 0xe1, 0x02, 0x00, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x80, 0x04, 0xe2, 0x02, 0x00, + 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xe3, + 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, + 0x04, 0xe4, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x80, 0x04, 0xe5, 0x02, 0x00, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x80, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, + 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, + 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, + 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, + 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, + 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, 0x04, 0x03, + 0x02, 0x00, 0x00, 0x04, 0x04, 0x02, 0x00, 0x00, + 0x04, 0x05, 0x02, 0x00, 0x00, 0x04, 0x06, 0x02, + 0x00, 0x00, 0x04, 0x07, 0x02, 0x00, 0x00, 0x04, + 0x08, 0x02, 0x00, 0x00, 0x04, 0x09, 0x02, 0x00, + 0x00, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x04, 0x0b, + 0x02, 0x00, 0x00, 0x04, 0x0c, 0x02, 0x00, 0x00, + 0x04, 0x0d, 0x02, 0x00, 0x00, 0x04, 0x0e, 0x02, + 0x00, 0x00, 0x04, 0x0f, 0x02, 0x00, 0x00, 0x04, + 0x10, 0x02, 0x00, 0x00, 0x04, 0x11, 0x02, 0x00, + 0x00, 0x04, 0x12, 0x02, 0x00, 0x00, 0x04, 0x13, + 0x02, 0x00, 0x00, 0x04, 0x14, 0x02, 0x00, 0x00, + 0x04, 0x15, 0x02, 0x00, 0x00, 0x04, 0x16, 0x02, + 0x00, 0x00, 0x04, 0x17, 0x02, 0x00, 0x00, 0x04, + 0x18, 0x02, 0x00, 0x00, 0x04, 0x19, 0x02, 0x00, + 0x00, 0x26, 0x20, 0x00, 0x04, 0x1a, 0x02, 0x00, + 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0x1b, + 0x02, 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, + 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, + 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, + 0x23, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, + 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x1f, + 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, + 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, + 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, + 0x27, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, + 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x23, + 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, + 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, + 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, + 0x2b, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, + 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x27, + 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, + 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, + 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, + 0x2f, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, + 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x2b, + 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, + 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, + 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, + 0x33, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, + 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x2f, + 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, + 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, + 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, + 0x37, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, + 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x33, + 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, + 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, + 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, + 0x3b, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, + 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x37, + 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, + 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, + 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, + 0x3f, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, + 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x3b, + 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, + 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, + 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, + 0x43, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, + 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x3f, + 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, + 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, + 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, + 0x47, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, + 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x43, + 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, + 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, + 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, + 0x4b, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, + 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x47, + 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, + 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, + 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, + 0x4f, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, + 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x4b, + 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, + 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, + 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, + 0x53, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, + 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x4f, + 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, + 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, + 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, + 0x57, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, + 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x53, + 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, + 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, + 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, + 0x5b, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, + 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x57, + 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, + 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, + 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, + 0x5f, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, + 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x5b, + 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, + 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, + 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, + 0x63, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, + 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x5f, + 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, + 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, + 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, + 0x67, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, + 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x63, + 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, + 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, + 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, + 0x6b, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, + 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x67, + 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, + 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, + 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, + 0x6f, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, + 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x6b, + 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, + 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, + 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, + 0x73, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, + 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x6f, + 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, + 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, + 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, + 0x77, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, + 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x73, + 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, + 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, + 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, + 0x7b, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, + 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x77, + 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, + 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, + 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, + 0x7f, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, + 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x7b, + 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, + 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, + 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, + 0x83, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, + 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x7f, + 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, + 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, + 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, + 0x87, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, + 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x83, + 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, + 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, + 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, + 0x8b, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, + 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x87, + 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, + 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, + 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, + 0x8f, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, + 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x8b, + 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, + 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, + 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, + 0x93, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, + 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x8f, + 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, + 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, + 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, + 0x97, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, + 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x93, + 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, + 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, + 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, + 0x9b, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, + 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x97, + 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, + 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, + 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, + 0x9f, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, + 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x9b, + 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, + 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, + 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, + 0xa3, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, + 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x9f, + 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, + 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, + 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, + 0xa7, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, + 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0xa3, + 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, + 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, + 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, + 0xab, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, + 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0xa7, + 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, + 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, + 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, + 0xaf, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, + 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0xab, + 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, + 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, + 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, + 0xb3, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, + 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0xaf, + 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, + 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, + 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, + 0xb7, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, + 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0xb3, + 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, + 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, + 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, + 0xbb, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, + 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0xb7, + 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, + 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, + 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, + 0xbf, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, + 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0xbb, + 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, + 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, + 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, + 0xc3, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, + 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xbf, + 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, + 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, + 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, + 0xc7, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, + 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xc3, + 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, + 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, + 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, + 0xcb, 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, + 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xc7, + 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, + 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, + 0xcf, 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, + 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xcb, + 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, + 0x04, 0xcc, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, + 0x00, 0x80, 0x04, 0xcd, 0x02, 0x00, 0x00, 0x4d, + 0xd3, 0x00, 0x00, 0x80, 0x04, 0xce, 0x02, 0x00, + 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xcf, + 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, + 0x04, 0xd0, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, + 0x00, 0x80, 0x04, 0xd1, 0x02, 0x00, 0x00, 0x4d, + 0xd7, 0x00, 0x00, 0x80, 0x04, 0xd2, 0x02, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xd3, + 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, + 0x04, 0xd4, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x80, 0x04, 0xd5, 0x02, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x02, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xd7, + 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, + 0x04, 0xd8, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x80, 0x04, 0xd9, 0x02, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x80, 0x04, 0xda, 0x02, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xdb, + 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, + 0x04, 0xdc, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x80, 0x04, 0xdd, 0x02, 0x00, 0x00, 0x4d, + 0xe3, 0x00, 0x00, 0x80, 0x04, 0xde, 0x02, 0x00, + 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xdf, + 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, + 0x04, 0xe0, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, + 0x00, 0x80, 0x04, 0xe1, 0x02, 0x00, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x80, 0x04, 0xe2, 0x02, 0x00, + 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xe3, + 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, + 0x04, 0xe4, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x80, 0x04, 0xe5, 0x02, 0x00, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x80, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, + 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x7d, 0xbe, 0x7e, 0xbe, 0x7f, 0xbe, 0x80, 0xbe, + 0x81, 0xbe, 0x82, 0xbe, 0x83, 0xbe, 0x84, 0xbe, + 0x85, 0xbe, 0x86, 0xbe, 0x87, 0xbe, 0x88, 0x26, + 0x0c, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0xe6, 0x02, 0x00, 0x00, 0x04, 0xe7, 0x02, 0x00, + 0x00, 0x04, 0xe8, 0x02, 0x00, 0x00, 0x04, 0xe9, + 0x02, 0x00, 0x00, 0x04, 0xea, 0x02, 0x00, 0x00, + 0x04, 0xeb, 0x02, 0x00, 0x00, 0x04, 0xec, 0x02, + 0x00, 0x00, 0x04, 0xed, 0x02, 0x00, 0x00, 0x04, + 0xee, 0x02, 0x00, 0x00, 0x04, 0xef, 0x02, 0x00, + 0x00, 0x04, 0xf0, 0x02, 0x00, 0x00, 0x04, 0xf1, + 0x02, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xe6, 0x02, 0x00, 0x00, + 0x04, 0xe7, 0x02, 0x00, 0x00, 0x04, 0xe8, 0x02, + 0x00, 0x00, 0x04, 0xe9, 0x02, 0x00, 0x00, 0x04, + 0xea, 0x02, 0x00, 0x00, 0x04, 0xeb, 0x02, 0x00, + 0x00, 0x04, 0xec, 0x02, 0x00, 0x00, 0x04, 0xed, + 0x02, 0x00, 0x00, 0x04, 0xee, 0x02, 0x00, 0x00, + 0x04, 0xef, 0x02, 0x00, 0x00, 0x04, 0xf0, 0x02, + 0x00, 0x00, 0x04, 0xf1, 0x02, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x64, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x46, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x75, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xf2, 0x02, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0xf2, 0x02, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xf2, + 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, 0x46, + 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, + 0x45, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, + 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xf3, 0x02, 0x00, 0x00, 0x04, + 0xf4, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0xf3, 0x02, 0x00, + 0x00, 0x04, 0xf4, 0x02, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xf3, + 0x02, 0x00, 0x00, 0x04, 0xf4, 0x02, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, + 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x4d, + 0xe2, 0x00, 0x00, 0x00, 0x4d, 0xf5, 0x02, 0x00, + 0x00, 0x4d, 0xf6, 0x02, 0x00, 0x00, 0x0b, 0x04, + 0xf7, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xf8, 0x02, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xf9, + 0x02, 0x00, 0x00, 0x4d, 0xfa, 0x02, 0x00, 0x00, + 0x04, 0xfb, 0x02, 0x00, 0x00, 0x4d, 0xfc, 0x02, + 0x00, 0x00, 0x4d, 0xfd, 0x02, 0x00, 0x00, 0x0b, + 0x04, 0xfe, 0x02, 0x00, 0x00, 0x4d, 0xfa, 0x02, + 0x00, 0x00, 0x04, 0xff, 0x02, 0x00, 0x00, 0x4d, + 0xfc, 0x02, 0x00, 0x00, 0x4d, 0x00, 0x03, 0x00, + 0x00, 0x0b, 0x04, 0x01, 0x03, 0x00, 0x00, 0x4d, + 0xfa, 0x02, 0x00, 0x00, 0x04, 0x02, 0x03, 0x00, + 0x00, 0x4d, 0xfc, 0x02, 0x00, 0x00, 0x4d, 0x03, + 0x03, 0x00, 0x00, 0x4d, 0x04, 0x03, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x05, 0x03, 0x00, 0x00, 0x4d, + 0xfd, 0x02, 0x00, 0x00, 0x04, 0x06, 0x03, 0x00, + 0x00, 0x4d, 0x07, 0x03, 0x00, 0x00, 0x04, 0x08, + 0x03, 0x00, 0x00, 0x4d, 0x09, 0x03, 0x00, 0x00, + 0x04, 0x0a, 0x03, 0x00, 0x00, 0x4d, 0x0b, 0x03, + 0x00, 0x00, 0x04, 0x0c, 0x03, 0x00, 0x00, 0x4d, + 0x0d, 0x03, 0x00, 0x00, 0x04, 0x0e, 0x03, 0x00, + 0x00, 0x4d, 0x0f, 0x03, 0x00, 0x00, 0x04, 0x10, + 0x03, 0x00, 0x00, 0x4d, 0x11, 0x03, 0x00, 0x00, + 0x4d, 0xf7, 0x02, 0x00, 0x00, 0x4d, 0x12, 0x03, + 0x00, 0x00, 0x0b, 0x04, 0x13, 0x03, 0x00, 0x00, + 0x4d, 0x14, 0x03, 0x00, 0x00, 0x04, 0x15, 0x03, + 0x00, 0x00, 0x4d, 0x16, 0x03, 0x00, 0x00, 0x04, + 0x17, 0x03, 0x00, 0x00, 0x4d, 0x18, 0x03, 0x00, + 0x00, 0x04, 0x19, 0x03, 0x00, 0x00, 0x4d, 0x1a, + 0x03, 0x00, 0x00, 0x04, 0x1b, 0x03, 0x00, 0x00, + 0x4d, 0x1c, 0x03, 0x00, 0x00, 0x04, 0x1d, 0x03, + 0x00, 0x00, 0x4d, 0x1e, 0x03, 0x00, 0x00, 0x04, + 0x1f, 0x03, 0x00, 0x00, 0x4d, 0x20, 0x03, 0x00, + 0x00, 0x04, 0x21, 0x03, 0x00, 0x00, 0x4d, 0x22, + 0x03, 0x00, 0x00, 0x04, 0x23, 0x03, 0x00, 0x00, + 0x4d, 0x24, 0x03, 0x00, 0x00, 0x04, 0x25, 0x03, + 0x00, 0x00, 0x4d, 0x26, 0x03, 0x00, 0x00, 0x04, + 0x27, 0x03, 0x00, 0x00, 0x4d, 0x28, 0x03, 0x00, + 0x00, 0x04, 0x29, 0x03, 0x00, 0x00, 0x4d, 0x2a, + 0x03, 0x00, 0x00, 0x04, 0x2b, 0x03, 0x00, 0x00, + 0x4d, 0x2c, 0x03, 0x00, 0x00, 0x04, 0x2d, 0x03, + 0x00, 0x00, 0x4d, 0x2e, 0x03, 0x00, 0x00, 0x04, + 0x2f, 0x03, 0x00, 0x00, 0x4d, 0x30, 0x03, 0x00, + 0x00, 0x04, 0x31, 0x03, 0x00, 0x00, 0x4d, 0x32, + 0x03, 0x00, 0x00, 0x04, 0x33, 0x03, 0x00, 0x00, + 0x4d, 0x34, 0x03, 0x00, 0x00, 0x04, 0x35, 0x03, + 0x00, 0x00, 0x4d, 0x36, 0x03, 0x00, 0x00, 0x04, + 0x37, 0x03, 0x00, 0x00, 0x4d, 0x38, 0x03, 0x00, + 0x00, 0x04, 0x39, 0x03, 0x00, 0x00, 0x4d, 0x3a, + 0x03, 0x00, 0x00, 0x4d, 0x3b, 0x03, 0x00, 0x00, + 0x4d, 0x45, 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, + 0xcc, 0x28, 0xf8, 0x0c, 0x01, 0x00, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, + 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_es_size = 24845; + +const uint8_t intl_es[24845] = { + 0x01, 0xcc, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x65, 0x73, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x0e, + 0x7b, 0x31, 0x7d, 0x20, 0x7b, 0x30, 0x7d, 0x0a, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, 0x65, + 0x64, 0x69, 0x75, 0x6d, 0x10, 0x7b, 0x31, 0x7d, + 0x2c, 0x20, 0x7b, 0x30, 0x7d, 0x08, 0x66, 0x75, + 0x6c, 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x02, + 0x64, 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, 0x06, + 0x45, 0x20, 0x64, 0x04, 0x45, 0x64, 0x12, 0x45, + 0x2c, 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, + 0x06, 0x45, 0x68, 0x6d, 0x0e, 0x45, 0x2c, 0x20, + 0x48, 0x3a, 0x6d, 0x6d, 0x06, 0x45, 0x48, 0x6d, + 0x18, 0x45, 0x2c, 0x20, 0x68, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x61, 0x08, 0x45, 0x68, + 0x6d, 0x73, 0x14, 0x45, 0x2c, 0x20, 0x48, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x08, 0x45, 0x48, + 0x6d, 0x73, 0x06, 0x79, 0x20, 0x47, 0x04, 0x47, + 0x79, 0x0e, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x20, + 0x47, 0x0a, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x12, + 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x20, + 0x47, 0x0c, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x64, + 0x18, 0x45, 0x2c, 0x20, 0x64, 0x20, 0x4d, 0x4d, + 0x4d, 0x20, 0x79, 0x20, 0x47, 0x0e, 0x47, 0x79, + 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x1a, 0x4d, 0x4d, + 0x4d, 0x4d, 0x20, 0x27, 0x64, 0x65, 0x27, 0x20, + 0x79, 0x20, 0x47, 0x0c, 0x47, 0x79, 0x4d, 0x4d, + 0x4d, 0x4d, 0x28, 0x64, 0x20, 0x27, 0x64, 0x65, + 0x27, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x27, + 0x64, 0x65, 0x27, 0x20, 0x79, 0x20, 0x47, 0x0e, + 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x2e, + 0x45, 0x2c, 0x20, 0x64, 0x20, 0x27, 0x64, 0x65, + 0x27, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x27, + 0x64, 0x65, 0x27, 0x20, 0x79, 0x20, 0x47, 0x10, + 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x45, 0x64, + 0x06, 0x68, 0x20, 0x61, 0x02, 0x68, 0x02, 0x48, + 0x0c, 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x04, + 0x68, 0x6d, 0x08, 0x48, 0x3a, 0x6d, 0x6d, 0x04, + 0x48, 0x6d, 0x12, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x20, 0x61, 0x06, 0x68, 0x6d, 0x73, + 0x0e, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x06, 0x48, 0x6d, 0x73, 0x16, 0x68, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x20, 0x76, + 0x08, 0x68, 0x6d, 0x73, 0x76, 0x12, 0x48, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x76, 0x08, + 0x48, 0x6d, 0x73, 0x76, 0x20, 0x68, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x20, 0x28, + 0x76, 0x76, 0x76, 0x76, 0x29, 0x0e, 0x68, 0x6d, + 0x73, 0x76, 0x76, 0x76, 0x76, 0x1c, 0x48, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x28, 0x76, + 0x76, 0x76, 0x76, 0x29, 0x0e, 0x48, 0x6d, 0x73, + 0x76, 0x76, 0x76, 0x76, 0x10, 0x68, 0x3a, 0x6d, + 0x6d, 0x20, 0x61, 0x20, 0x76, 0x06, 0x68, 0x6d, + 0x76, 0x0c, 0x48, 0x3a, 0x6d, 0x6d, 0x20, 0x76, + 0x06, 0x48, 0x6d, 0x76, 0x02, 0x4c, 0x02, 0x4d, + 0x06, 0x64, 0x2f, 0x4d, 0x04, 0x4d, 0x64, 0x0c, + 0x45, 0x2c, 0x20, 0x64, 0x2f, 0x4d, 0x06, 0x4d, + 0x45, 0x64, 0x06, 0x4d, 0x4d, 0x64, 0x08, 0x4d, + 0x4d, 0x64, 0x64, 0x06, 0x4c, 0x4c, 0x4c, 0x06, + 0x4d, 0x4d, 0x4d, 0x0a, 0x64, 0x20, 0x4d, 0x4d, + 0x4d, 0x08, 0x4d, 0x4d, 0x4d, 0x64, 0x10, 0x45, + 0x2c, 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x0a, + 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x16, 0x64, 0x20, + 0x27, 0x64, 0x65, 0x27, 0x20, 0x4d, 0x4d, 0x4d, + 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x1c, + 0x45, 0x2c, 0x20, 0x64, 0x20, 0x27, 0x64, 0x65, + 0x27, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x0c, 0x4d, + 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x04, 0x6d, 0x73, 0x02, 0x79, + 0x06, 0x4d, 0x2f, 0x79, 0x04, 0x79, 0x4d, 0x0a, + 0x64, 0x2f, 0x4d, 0x2f, 0x79, 0x06, 0x79, 0x4d, + 0x64, 0x14, 0x45, 0x45, 0x45, 0x2c, 0x20, 0x64, + 0x2f, 0x4d, 0x2f, 0x79, 0x08, 0x79, 0x4d, 0x45, + 0x64, 0x06, 0x79, 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, + 0x4d, 0x20, 0x79, 0x08, 0x79, 0x4d, 0x4d, 0x4d, + 0x0e, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, + 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x18, 0x45, + 0x45, 0x45, 0x2c, 0x20, 0x64, 0x20, 0x4d, 0x4d, + 0x4d, 0x20, 0x79, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, + 0x45, 0x64, 0x16, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, + 0x27, 0x64, 0x65, 0x27, 0x20, 0x79, 0x0a, 0x79, + 0x4d, 0x4d, 0x4d, 0x4d, 0x24, 0x64, 0x20, 0x27, + 0x64, 0x65, 0x27, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, + 0x20, 0x27, 0x64, 0x65, 0x27, 0x20, 0x79, 0x0c, + 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x2e, 0x45, + 0x45, 0x45, 0x2c, 0x20, 0x64, 0x20, 0x27, 0x64, + 0x65, 0x27, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, + 0x27, 0x64, 0x65, 0x27, 0x20, 0x79, 0x0e, 0x79, + 0x4d, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0a, 0x51, + 0x51, 0x51, 0x20, 0x79, 0x08, 0x79, 0x51, 0x51, + 0x51, 0x16, 0x51, 0x51, 0x51, 0x51, 0x20, 0x27, + 0x64, 0x65, 0x27, 0x20, 0x79, 0x0a, 0x79, 0x51, + 0x51, 0x51, 0x51, 0x20, 0x61, 0x76, 0x61, 0x69, + 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x73, 0x30, 0x45, 0x45, 0x45, + 0x45, 0x2c, 0x20, 0x64, 0x20, 0x27, 0x64, 0x65, + 0x27, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x27, + 0x64, 0x65, 0x27, 0x20, 0x79, 0x14, 0x79, 0x4d, + 0x4d, 0x4d, 0x4d, 0x45, 0x45, 0x45, 0x45, 0x64, + 0x0c, 0x64, 0x2f, 0x4d, 0x2f, 0x79, 0x79, 0x16, + 0x64, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x73, 0x1c, 0x48, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x28, 0x7a, 0x7a, 0x7a, + 0x7a, 0x29, 0x12, 0x68, 0x6d, 0x6d, 0x73, 0x73, + 0x7a, 0x7a, 0x7a, 0x7a, 0x12, 0x48, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x7a, 0x08, 0x68, + 0x6d, 0x73, 0x7a, 0x16, 0x74, 0x69, 0x6d, 0x65, + 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x0e, + 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x02, + 0x46, 0x02, 0x41, 0x02, 0x4a, 0x02, 0x53, 0x02, + 0x4f, 0x02, 0x4e, 0x02, 0x44, 0x0c, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x08, 0x65, 0x6e, 0x65, + 0x2e, 0x08, 0x66, 0x65, 0x62, 0x2e, 0x08, 0x6d, + 0x61, 0x72, 0x2e, 0x08, 0x61, 0x62, 0x72, 0x2e, + 0x08, 0x6d, 0x61, 0x79, 0x2e, 0x08, 0x6a, 0x75, + 0x6e, 0x2e, 0x08, 0x6a, 0x75, 0x6c, 0x2e, 0x08, + 0x61, 0x67, 0x6f, 0x2e, 0x0a, 0x73, 0x65, 0x70, + 0x74, 0x2e, 0x08, 0x6f, 0x63, 0x74, 0x2e, 0x08, + 0x6e, 0x6f, 0x76, 0x2e, 0x08, 0x64, 0x69, 0x63, + 0x2e, 0x0a, 0x65, 0x6e, 0x65, 0x72, 0x6f, 0x0e, + 0x66, 0x65, 0x62, 0x72, 0x65, 0x72, 0x6f, 0x0a, + 0x6d, 0x61, 0x72, 0x7a, 0x6f, 0x0a, 0x61, 0x62, + 0x72, 0x69, 0x6c, 0x08, 0x6d, 0x61, 0x79, 0x6f, + 0x0a, 0x6a, 0x75, 0x6e, 0x69, 0x6f, 0x0a, 0x6a, + 0x75, 0x6c, 0x69, 0x6f, 0x0c, 0x61, 0x67, 0x6f, + 0x73, 0x74, 0x6f, 0x14, 0x73, 0x65, 0x70, 0x74, + 0x69, 0x65, 0x6d, 0x62, 0x72, 0x65, 0x0e, 0x6f, + 0x63, 0x74, 0x75, 0x62, 0x72, 0x65, 0x12, 0x6e, + 0x6f, 0x76, 0x69, 0x65, 0x6d, 0x62, 0x72, 0x65, + 0x12, 0x64, 0x69, 0x63, 0x69, 0x65, 0x6d, 0x62, + 0x72, 0x65, 0x0c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, + 0x73, 0x02, 0x58, 0x02, 0x56, 0x08, 0x64, 0x6f, + 0x6d, 0x2e, 0x08, 0x6c, 0x75, 0x6e, 0x2e, 0x08, + 0x6d, 0x69, 0xe9, 0x2e, 0x08, 0x6a, 0x75, 0x65, + 0x2e, 0x08, 0x76, 0x69, 0x65, 0x2e, 0x08, 0x73, + 0xe1, 0x62, 0x2e, 0x0e, 0x64, 0x6f, 0x6d, 0x69, + 0x6e, 0x67, 0x6f, 0x0a, 0x6c, 0x75, 0x6e, 0x65, + 0x73, 0x0c, 0x6d, 0x61, 0x72, 0x74, 0x65, 0x73, + 0x12, 0x6d, 0x69, 0xe9, 0x72, 0x63, 0x6f, 0x6c, + 0x65, 0x73, 0x0c, 0x6a, 0x75, 0x65, 0x76, 0x65, + 0x73, 0x0e, 0x76, 0x69, 0x65, 0x72, 0x6e, 0x65, + 0x73, 0x0c, 0x73, 0xe1, 0x62, 0x61, 0x64, 0x6f, + 0x08, 0x64, 0x61, 0x79, 0x73, 0x04, 0x42, 0x45, + 0x08, 0x65, 0x72, 0x61, 0x73, 0x0a, 0x61, 0x2e, + 0x20, 0x6d, 0x2e, 0x04, 0x61, 0x6d, 0x0a, 0x70, + 0x2e, 0x20, 0x6d, 0x2e, 0x04, 0x70, 0x6d, 0x14, + 0x64, 0x61, 0x79, 0x50, 0x65, 0x72, 0x69, 0x6f, + 0x64, 0x73, 0x06, 0x4d, 0x30, 0x31, 0x06, 0x4d, + 0x30, 0x32, 0x06, 0x4d, 0x30, 0x33, 0x06, 0x4d, + 0x30, 0x34, 0x06, 0x4d, 0x30, 0x35, 0x06, 0x4d, + 0x30, 0x36, 0x06, 0x4d, 0x30, 0x37, 0x06, 0x4d, + 0x30, 0x38, 0x06, 0x4d, 0x30, 0x39, 0x06, 0x4d, + 0x31, 0x30, 0x06, 0x4d, 0x31, 0x31, 0x06, 0x4d, + 0x31, 0x32, 0x08, 0x54, 0x6f, 0x75, 0x74, 0x08, + 0x42, 0x61, 0x62, 0x61, 0x0a, 0x48, 0x61, 0x74, + 0x6f, 0x72, 0x0a, 0x4b, 0x69, 0x61, 0x68, 0x6b, + 0x08, 0x54, 0x6f, 0x62, 0x61, 0x0c, 0x41, 0x6d, + 0x73, 0x68, 0x69, 0x72, 0x10, 0x42, 0x61, 0x72, + 0x61, 0x6d, 0x68, 0x61, 0x74, 0x12, 0x42, 0x61, + 0x72, 0x61, 0x6d, 0x6f, 0x75, 0x64, 0x61, 0x0e, + 0x42, 0x61, 0x73, 0x68, 0x61, 0x6e, 0x73, 0x0a, + 0x50, 0x61, 0x6f, 0x6e, 0x61, 0x08, 0x45, 0x70, + 0x65, 0x70, 0x0a, 0x4d, 0x65, 0x73, 0x72, 0x61, + 0x0a, 0x4e, 0x61, 0x73, 0x69, 0x65, 0x08, 0x45, + 0x52, 0x41, 0x30, 0x08, 0x45, 0x52, 0x41, 0x31, + 0x10, 0x4d, 0x65, 0x73, 0x6b, 0x65, 0x72, 0x65, + 0x6d, 0x0c, 0x54, 0x65, 0x6b, 0x65, 0x6d, 0x74, + 0x0a, 0x48, 0x65, 0x64, 0x61, 0x72, 0x0c, 0x54, + 0x61, 0x68, 0x73, 0x61, 0x73, 0x06, 0x54, 0x65, + 0x72, 0x0e, 0x59, 0x65, 0x6b, 0x61, 0x74, 0x69, + 0x74, 0x0e, 0x4d, 0x65, 0x67, 0x61, 0x62, 0x69, + 0x74, 0x0c, 0x4d, 0x69, 0x61, 0x7a, 0x69, 0x61, + 0x0c, 0x47, 0x65, 0x6e, 0x62, 0x6f, 0x74, 0x08, + 0x53, 0x65, 0x6e, 0x65, 0x0a, 0x48, 0x61, 0x6d, + 0x6c, 0x65, 0x0e, 0x4e, 0x65, 0x68, 0x61, 0x73, + 0x73, 0x65, 0x0e, 0x50, 0x61, 0x67, 0x75, 0x6d, + 0x65, 0x6e, 0x0a, 0x61, 0x2e, 0x20, 0x43, 0x2e, + 0x0a, 0x64, 0x2e, 0x20, 0x43, 0x2e, 0x10, 0x61, + 0x2e, 0x20, 0x65, 0x2e, 0x20, 0x63, 0x2e, 0x0a, + 0x65, 0x2e, 0x20, 0x63, 0x2e, 0x1e, 0x61, 0x6e, + 0x74, 0x65, 0x73, 0x20, 0x64, 0x65, 0x20, 0x43, + 0x72, 0x69, 0x73, 0x74, 0x6f, 0x22, 0x64, 0x65, + 0x73, 0x70, 0x75, 0xe9, 0x73, 0x20, 0x64, 0x65, + 0x20, 0x43, 0x72, 0x69, 0x73, 0x74, 0x6f, 0x2a, + 0x61, 0x6e, 0x74, 0x65, 0x73, 0x20, 0x64, 0x65, + 0x20, 0x6c, 0x61, 0x20, 0x65, 0x72, 0x61, 0x20, + 0x63, 0x6f, 0x6d, 0xfa, 0x6e, 0x12, 0x65, 0x72, + 0x61, 0x20, 0x63, 0x6f, 0x6d, 0xfa, 0x6e, 0x0c, + 0x54, 0x69, 0x73, 0x68, 0x72, 0x69, 0x0e, 0x48, + 0x65, 0x73, 0x68, 0x76, 0x61, 0x6e, 0x0c, 0x4b, + 0x69, 0x73, 0x6c, 0x65, 0x76, 0x0a, 0x54, 0x65, + 0x76, 0x65, 0x74, 0x0c, 0x53, 0x68, 0x65, 0x76, + 0x61, 0x74, 0x0c, 0x41, 0x64, 0x61, 0x72, 0x20, + 0x49, 0x08, 0x41, 0x64, 0x61, 0x72, 0x0a, 0x4e, + 0x69, 0x73, 0x61, 0x6e, 0x08, 0x49, 0x79, 0x61, + 0x72, 0x0a, 0x53, 0x69, 0x76, 0x61, 0x6e, 0x0a, + 0x54, 0x61, 0x6d, 0x75, 0x7a, 0x04, 0x41, 0x76, + 0x08, 0x45, 0x6c, 0x75, 0x6c, 0x0e, 0x41, 0x64, + 0x61, 0x72, 0x20, 0x49, 0x49, 0x04, 0x41, 0x4d, + 0x0e, 0x43, 0x68, 0x61, 0x69, 0x74, 0x72, 0x61, + 0x10, 0x56, 0x61, 0x69, 0x73, 0x61, 0x6b, 0x68, + 0x61, 0x10, 0x4a, 0x79, 0x61, 0x69, 0x73, 0x74, + 0x68, 0x61, 0x0c, 0x41, 0x73, 0x61, 0x64, 0x68, + 0x61, 0x0e, 0x53, 0x72, 0x61, 0x76, 0x61, 0x6e, + 0x61, 0x0c, 0x42, 0x68, 0x61, 0x64, 0x72, 0x61, + 0x0c, 0x41, 0x73, 0x76, 0x69, 0x6e, 0x61, 0x0e, + 0x4b, 0x61, 0x72, 0x74, 0x69, 0x6b, 0x61, 0x14, + 0x41, 0x67, 0x72, 0x61, 0x68, 0x61, 0x79, 0x61, + 0x6e, 0x61, 0x0a, 0x50, 0x61, 0x75, 0x73, 0x61, + 0x0a, 0x4d, 0x61, 0x67, 0x68, 0x61, 0x10, 0x50, + 0x68, 0x61, 0x6c, 0x67, 0x75, 0x6e, 0x61, 0x08, + 0x53, 0x61, 0x6b, 0x61, 0x08, 0x4d, 0x75, 0x68, + 0x2e, 0x08, 0x53, 0x61, 0x66, 0x2e, 0x0c, 0x52, + 0x61, 0x62, 0x2e, 0x20, 0x49, 0x0e, 0x52, 0x61, + 0x62, 0x2e, 0x20, 0x49, 0x49, 0x0c, 0x4a, 0x75, + 0x6d, 0x2e, 0x20, 0x49, 0x0e, 0x4a, 0x75, 0x6d, + 0x2e, 0x20, 0x49, 0x49, 0x08, 0x52, 0x61, 0x6a, + 0x2e, 0x08, 0x53, 0x68, 0x61, 0x2e, 0x08, 0x52, + 0x61, 0x6d, 0x2e, 0x0a, 0x53, 0x68, 0x61, 0x77, + 0x2e, 0x11, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, + 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x51, 0x00, + 0x2e, 0x00, 0x11, 0x44, 0x00, 0x68, 0x00, 0x75, + 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x48, + 0x00, 0x2e, 0x00, 0x10, 0x4d, 0x75, 0x68, 0x61, + 0x72, 0x72, 0x61, 0x6d, 0x0a, 0x53, 0x61, 0x66, + 0x61, 0x72, 0x0f, 0x52, 0x00, 0x61, 0x00, 0x62, + 0x00, 0x69, 0x00, 0xbb, 0x02, 0x20, 0x00, 0x49, + 0x00, 0x11, 0x52, 0x00, 0x61, 0x00, 0x62, 0x00, + 0x69, 0x00, 0xbb, 0x02, 0x20, 0x00, 0x49, 0x00, + 0x49, 0x00, 0x10, 0x4a, 0x75, 0x6d, 0x61, 0x64, + 0x61, 0x20, 0x49, 0x12, 0x4a, 0x75, 0x6d, 0x61, + 0x64, 0x61, 0x20, 0x49, 0x49, 0x0a, 0x52, 0x61, + 0x6a, 0x61, 0x62, 0x0f, 0x53, 0x00, 0x68, 0x00, + 0x61, 0x00, 0xbb, 0x02, 0x62, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x0e, 0x52, 0x61, 0x6d, 0x61, 0x64, + 0x61, 0x6e, 0x0e, 0x53, 0x68, 0x61, 0x77, 0x77, + 0x61, 0x6c, 0x19, 0x44, 0x00, 0x68, 0x00, 0x75, + 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x51, + 0x00, 0x69, 0x00, 0xbb, 0x02, 0x64, 0x00, 0x61, + 0x00, 0x68, 0x00, 0x19, 0x44, 0x00, 0x68, 0x00, + 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, + 0x48, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x6a, 0x00, + 0x61, 0x00, 0x68, 0x00, 0x04, 0x41, 0x48, 0x1f, + 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, 0x36, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x48, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x36, 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x36, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x75, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x36, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x1d, 0x57, 0x00, 0x61, 0x00, 0x64, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x52, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, 0x59, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, + 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x2b, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x2d, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x2d, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x2d, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x2a, 0x4a, 0x69, 0x6e, + 0x67, 0x6f, 0x2d, 0x6b, 0x65, 0x69, 0x75, 0x6e, + 0x20, 0x28, 0x37, 0x36, 0x37, 0x2d, 0x37, 0x37, + 0x30, 0x29, 0x1d, 0x48, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x1f, 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x64, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x1f, 0x4b, 0x00, 0x4d, 0x01, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1d, 0x4a, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, + 0x61, 0x00, 0x6a, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1f, 0x53, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x20, 0x54, 0x65, 0x6e, 0x2d, 0x61, 0x6e, 0x20, + 0x28, 0x38, 0x35, 0x37, 0x2d, 0x38, 0x35, 0x39, + 0x29, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x21, 0x47, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x61, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1d, 0x45, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, + 0x45, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4a, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x34, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1b, 0x4c, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1d, 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x41, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, + 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x38, 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, + 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, + 0x69, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, 0x73, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x69, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x29, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x27, 0x4a, 0x00, 0x69, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x45, 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4c, 0x01, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x61, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x25, 0x4a, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x24, 0x54, 0x65, 0x6e, + 0x2d, 0x65, 0x69, 0x20, 0x28, 0x31, 0x31, 0x31, + 0x30, 0x2d, 0x31, 0x31, 0x31, 0x33, 0x29, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x44, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x6a, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x48, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x27, 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1f, 0x4c, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x6d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x41, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x4a, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x59, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, + 0x75, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x29, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x21, 0x4a, 0x00, 0x4d, 0x01, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x27, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x75, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x29, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, 0x29, 0x52, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x45, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x21, 0x48, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, + 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x4c, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x61, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, + 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x48, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x27, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, + 0x4c, 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x45, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, + 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x45, + 0x00, 0x69, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x27, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, + 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x27, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x61, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x4d, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x02, 0x54, 0x0a, 0x4d, 0x65, 0x69, + 0x6a, 0x69, 0x0d, 0x54, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x0b, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x0c, 0x48, 0x65, 0x69, 0x73, 0x65, + 0x69, 0x12, 0x46, 0x61, 0x72, 0x76, 0x61, 0x72, + 0x64, 0x69, 0x6e, 0x16, 0x4f, 0x72, 0x64, 0x69, + 0x62, 0x65, 0x68, 0x65, 0x73, 0x68, 0x74, 0x0e, + 0x4b, 0x68, 0x6f, 0x72, 0x64, 0x61, 0x64, 0x06, + 0x54, 0x69, 0x72, 0x0c, 0x4d, 0x6f, 0x72, 0x64, + 0x61, 0x64, 0x12, 0x53, 0x68, 0x61, 0x68, 0x72, + 0x69, 0x76, 0x61, 0x72, 0x08, 0x4d, 0x65, 0x68, + 0x72, 0x08, 0x41, 0x62, 0x61, 0x6e, 0x08, 0x41, + 0x7a, 0x61, 0x72, 0x06, 0x44, 0x65, 0x79, 0x0c, + 0x42, 0x61, 0x68, 0x6d, 0x61, 0x6e, 0x0c, 0x45, + 0x73, 0x66, 0x61, 0x6e, 0x64, 0x04, 0x41, 0x50, + 0x1e, 0x61, 0x6e, 0x74, 0x65, 0x73, 0x20, 0x64, + 0x65, 0x20, 0x52, 0x2e, 0x4f, 0x2e, 0x43, 0x2e, + 0x0c, 0x52, 0x2e, 0x4f, 0x2e, 0x43, 0x2e, 0x12, + 0x63, 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, + 0x73, 0x08, 0x64, 0x61, 0x74, 0x65, 0x08, 0x6c, + 0x61, 0x74, 0x6e, 0x04, 0x6e, 0x75, 0x10, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, + 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, + 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x26, + 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, + 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0x1e, 0x6e, 0x65, 0x67, 0x61, + 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, + 0x65, 0x72, 0x6e, 0x0e, 0x64, 0x65, 0x63, 0x69, + 0x6d, 0x61, 0x6c, 0x26, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0xa0, 0x7b, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, 0x3c, + 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, + 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0xa0, 0x7b, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, 0x10, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x2c, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0xa0, 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, + 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x42, 0x7b, + 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0xa0, 0x7b, 0x70, 0x65, 0x72, 0x63, + 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, + 0x0e, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, + 0x10, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, + 0x73, 0x02, 0x2c, 0x02, 0x2e, 0x0a, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x06, 0x4e, 0x61, 0x4e, 0x06, + 0x6e, 0x61, 0x6e, 0x02, 0x2b, 0x10, 0x70, 0x6c, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, 0x2d, + 0x12, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, + 0x67, 0x6e, 0x02, 0x25, 0x16, 0x70, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, + 0x03, 0x1e, 0x22, 0x10, 0x69, 0x6e, 0x66, 0x69, + 0x6e, 0x69, 0x74, 0x79, 0x0e, 0x73, 0x79, 0x6d, + 0x62, 0x6f, 0x6c, 0x73, 0x06, 0x43, 0x41, 0x24, + 0x06, 0x43, 0x41, 0x44, 0x03, 0xa7, 0x20, 0x06, + 0x45, 0x53, 0x50, 0x03, 0xac, 0x20, 0x06, 0x45, + 0x55, 0x52, 0x03, 0x3f, 0x0e, 0x06, 0x54, 0x48, + 0x42, 0x02, 0x24, 0x06, 0x55, 0x53, 0x44, 0x03, + 0xab, 0x20, 0x06, 0x56, 0x4e, 0x44, 0x08, 0x43, + 0x46, 0x50, 0x46, 0x06, 0x58, 0x50, 0x46, 0x14, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, + 0x65, 0x73, 0x52, 0x6e, 0x6f, 0x64, 0x65, 0x5f, + 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, + 0x69, 0x6e, 0x74, 0x6c, 0x2f, 0x6c, 0x6f, 0x63, + 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, + 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x70, 0x2f, 0x65, + 0x73, 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, + 0x9e, 0x01, 0x00, 0x01, 0x00, 0x27, 0x00, 0x89, + 0x01, 0xc0, 0x6a, 0x01, 0xa0, 0x01, 0x00, 0x00, + 0x00, 0x39, 0xd0, 0x00, 0x00, 0x00, 0x43, 0xd1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd2, 0x00, 0x00, + 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd4, 0x00, 0x00, 0x00, 0x04, 0xd5, 0x00, 0x00, + 0x00, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x04, 0xd7, + 0x00, 0x00, 0x00, 0x04, 0xd8, 0x00, 0x00, 0x00, + 0x04, 0xd9, 0x00, 0x00, 0x00, 0x04, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xdb, 0x00, 0x00, 0x00, 0x04, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, + 0x00, 0x04, 0xde, 0x00, 0x00, 0x00, 0x04, 0xdf, + 0x00, 0x00, 0x00, 0x04, 0xe0, 0x00, 0x00, 0x00, + 0x04, 0xe1, 0x00, 0x00, 0x00, 0x04, 0xe2, 0x00, + 0x00, 0x00, 0x26, 0x0f, 0x00, 0x4d, 0xe3, 0x00, + 0x00, 0x00, 0x0a, 0x4d, 0xe4, 0x00, 0x00, 0x00, + 0x09, 0x4d, 0xe5, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x00, 0x04, 0xe9, 0x00, 0x00, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x04, 0xe9, 0x00, + 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0xec, 0x00, + 0x00, 0x00, 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, + 0xee, 0x00, 0x00, 0x00, 0x04, 0xef, 0x00, 0x00, + 0x00, 0x4d, 0xf0, 0x00, 0x00, 0x00, 0x04, 0xf1, + 0x00, 0x00, 0x00, 0x4d, 0xf2, 0x00, 0x00, 0x00, + 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, 0xf4, 0x00, + 0x00, 0x00, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, + 0xf6, 0x00, 0x00, 0x00, 0x04, 0xf7, 0x00, 0x00, + 0x00, 0x4d, 0xf8, 0x00, 0x00, 0x00, 0x04, 0xf9, + 0x00, 0x00, 0x00, 0x4d, 0xfa, 0x00, 0x00, 0x00, + 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, 0xfc, 0x00, + 0x00, 0x00, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, + 0xfe, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x01, 0x00, 0x00, 0x04, 0x01, + 0x01, 0x00, 0x00, 0x4d, 0x02, 0x01, 0x00, 0x00, + 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0x04, 0x01, + 0x00, 0x00, 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, + 0x06, 0x01, 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, + 0x00, 0x4d, 0x08, 0x01, 0x00, 0x00, 0x04, 0x09, + 0x01, 0x00, 0x00, 0x4d, 0x09, 0x01, 0x00, 0x00, + 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x0b, 0x01, + 0x00, 0x00, 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, + 0x0d, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x01, 0x00, + 0x00, 0x4d, 0x0f, 0x01, 0x00, 0x00, 0x04, 0x10, + 0x01, 0x00, 0x00, 0x4d, 0x11, 0x01, 0x00, 0x00, + 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, 0x13, 0x01, + 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, + 0x15, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, + 0x00, 0x4d, 0x17, 0x01, 0x00, 0x00, 0x04, 0x18, + 0x01, 0x00, 0x00, 0x4d, 0x19, 0x01, 0x00, 0x00, + 0x04, 0x1a, 0x01, 0x00, 0x00, 0x4d, 0x1b, 0x01, + 0x00, 0x00, 0x04, 0x1c, 0x01, 0x00, 0x00, 0x4d, + 0x1d, 0x01, 0x00, 0x00, 0x04, 0x1e, 0x01, 0x00, + 0x00, 0x4d, 0x1f, 0x01, 0x00, 0x00, 0x04, 0x20, + 0x01, 0x00, 0x00, 0x4d, 0x21, 0x01, 0x00, 0x00, + 0x04, 0x22, 0x01, 0x00, 0x00, 0x4d, 0x23, 0x01, + 0x00, 0x00, 0x04, 0x20, 0x01, 0x00, 0x00, 0x4d, + 0x24, 0x01, 0x00, 0x00, 0x04, 0x20, 0x01, 0x00, + 0x00, 0x4d, 0x25, 0x01, 0x00, 0x00, 0x04, 0x26, + 0x01, 0x00, 0x00, 0x4d, 0x27, 0x01, 0x00, 0x00, + 0x04, 0x28, 0x01, 0x00, 0x00, 0x4d, 0x29, 0x01, + 0x00, 0x00, 0x04, 0x2a, 0x01, 0x00, 0x00, 0x4d, + 0x2b, 0x01, 0x00, 0x00, 0x04, 0x2c, 0x01, 0x00, + 0x00, 0x4d, 0x2d, 0x01, 0x00, 0x00, 0x04, 0x2e, + 0x01, 0x00, 0x00, 0x4d, 0x2f, 0x01, 0x00, 0x00, + 0x04, 0x30, 0x01, 0x00, 0x00, 0x4d, 0x31, 0x01, + 0x00, 0x00, 0x04, 0x32, 0x01, 0x00, 0x00, 0x4d, + 0x32, 0x01, 0x00, 0x00, 0x04, 0x33, 0x01, 0x00, + 0x00, 0x4d, 0x34, 0x01, 0x00, 0x00, 0x04, 0x35, + 0x01, 0x00, 0x00, 0x4d, 0x36, 0x01, 0x00, 0x00, + 0x04, 0x37, 0x01, 0x00, 0x00, 0x4d, 0x38, 0x01, + 0x00, 0x00, 0x04, 0x33, 0x01, 0x00, 0x00, 0x4d, + 0x39, 0x01, 0x00, 0x00, 0x04, 0x3a, 0x01, 0x00, + 0x00, 0x4d, 0x3b, 0x01, 0x00, 0x00, 0x04, 0x3c, + 0x01, 0x00, 0x00, 0x4d, 0x3d, 0x01, 0x00, 0x00, + 0x04, 0x3e, 0x01, 0x00, 0x00, 0x4d, 0x3f, 0x01, + 0x00, 0x00, 0x04, 0x40, 0x01, 0x00, 0x00, 0x4d, + 0x41, 0x01, 0x00, 0x00, 0x04, 0x42, 0x01, 0x00, + 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, 0x44, + 0x01, 0x00, 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, + 0x04, 0x46, 0x01, 0x00, 0x00, 0x4d, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x4d, + 0x49, 0x01, 0x00, 0x00, 0x4d, 0x4a, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x4d, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x42, 0x01, 0x00, + 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, 0x3c, + 0x01, 0x00, 0x00, 0x4d, 0x3d, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x4d, 0x36, 0x01, + 0x00, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x4f, 0x01, 0x00, 0x00, 0x4d, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x4d, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x10, 0x01, 0x00, + 0x00, 0x4d, 0x0f, 0x01, 0x00, 0x00, 0x04, 0x0c, + 0x01, 0x00, 0x00, 0x4d, 0x0b, 0x01, 0x00, 0x00, + 0x4d, 0x53, 0x01, 0x00, 0x00, 0x4d, 0x54, 0x01, + 0x00, 0x00, 0x0b, 0x0b, 0x0b, 0x04, 0xee, 0x00, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x1f, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x1f, 0x01, 0x00, 0x00, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x1e, 0x01, 0x00, + 0x00, 0x04, 0x1f, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, + 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, + 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, + 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x85, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x86, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x87, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x88, 0x01, 0x00, 0x00, + 0x4d, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, + 0x00, 0x00, 0x4d, 0x8b, 0x01, 0x00, 0x00, 0x4d, + 0x8c, 0x01, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x00, 0xbe, 0x01, 0xbe, + 0x02, 0xbe, 0x03, 0xbe, 0x04, 0xbe, 0x05, 0xbe, + 0x06, 0xbe, 0x07, 0xbe, 0x08, 0xbe, 0x09, 0xbe, + 0x0a, 0xbe, 0x0b, 0x26, 0x0c, 0x00, 0x4d, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, + 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, + 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, + 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, + 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, + 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, + 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, + 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, + 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, + 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, + 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, + 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, + 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, + 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x1e, + 0x01, 0x00, 0x00, 0x04, 0x1f, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x85, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x88, 0x01, 0x00, 0x00, 0x4d, 0x89, 0x01, + 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x4d, + 0x8b, 0x01, 0x00, 0x00, 0x4d, 0x8c, 0x01, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x0c, 0xbe, 0x0d, 0xbe, 0x0e, 0xbe, 0x0f, + 0xbe, 0x10, 0xbe, 0x11, 0xbe, 0x12, 0xbe, 0x13, + 0xbe, 0x14, 0xbe, 0x15, 0xbe, 0x16, 0xbe, 0x17, + 0xbe, 0x18, 0x26, 0x0d, 0x00, 0x4d, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, + 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, + 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, + 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, + 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, + 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, + 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, + 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, + 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, + 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, + 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, + 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, + 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, + 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, + 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, + 0xa5, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x1e, 0x01, 0x00, 0x00, 0x04, 0x1f, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, + 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x85, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, + 0x04, 0xa7, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa6, 0x01, + 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x87, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x88, 0x01, + 0x00, 0x00, 0x4d, 0x89, 0x01, 0x00, 0x00, 0x04, + 0x8a, 0x01, 0x00, 0x00, 0x4d, 0x8b, 0x01, 0x00, + 0x00, 0x4d, 0x8c, 0x01, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x19, 0xbe, + 0x1a, 0xbe, 0x1b, 0xbe, 0x1c, 0xbe, 0x1d, 0xbe, + 0x1e, 0xbe, 0x1f, 0xbe, 0x20, 0xbe, 0x21, 0xbe, + 0x22, 0xbe, 0x23, 0xbe, 0x24, 0x26, 0x0c, 0x00, + 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, + 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, + 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, + 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, + 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, + 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, + 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, + 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, + 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, + 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, + 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, + 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, + 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, + 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, + 0x04, 0x98, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x1e, 0x01, 0x00, 0x00, 0x04, 0x1f, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, + 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, + 0x84, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x85, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x88, 0x01, 0x00, 0x00, 0x4d, + 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x4d, 0x8b, 0x01, 0x00, 0x00, 0x4d, 0x8c, + 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x25, 0xbe, 0x26, 0xbe, 0x27, + 0xbe, 0x28, 0xbe, 0x29, 0xbe, 0x2a, 0xbe, 0x2b, + 0xbe, 0x2c, 0xbe, 0x2d, 0xbe, 0x2e, 0xbe, 0x2f, + 0xbe, 0x30, 0xbe, 0x31, 0x26, 0x0d, 0x00, 0x4d, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, + 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, + 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, + 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, + 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, + 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, + 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, + 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, + 0x04, 0xb4, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa8, 0x01, + 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, + 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, + 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, + 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, + 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, + 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, 0x04, + 0xb2, 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, + 0x00, 0x04, 0xb4, 0x01, 0x00, 0x00, 0x26, 0x0d, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x75, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x1e, 0x01, 0x00, 0x00, 0x04, 0x1f, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x85, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xa6, 0x01, 0x00, 0x00, + 0x04, 0xa7, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, + 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x87, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x88, 0x01, 0x00, 0x00, 0x4d, 0x89, 0x01, 0x00, + 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x4d, 0x8b, + 0x01, 0x00, 0x00, 0x4d, 0x8c, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x32, 0xbe, 0x33, 0xbe, 0x34, 0xbe, 0x35, 0xbe, + 0x36, 0xbe, 0x37, 0xbe, 0x38, 0xbe, 0x39, 0xbe, + 0x3a, 0xbe, 0x3b, 0xbe, 0x3c, 0xbe, 0x3d, 0xbe, + 0x3e, 0x26, 0x0d, 0x00, 0x4d, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, + 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, + 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, + 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, + 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, + 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, + 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, + 0x04, 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, + 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, + 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, + 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, + 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, + 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, + 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, + 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x1e, + 0x01, 0x00, 0x00, 0x04, 0x1f, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x85, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xa6, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x87, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x88, 0x01, + 0x00, 0x00, 0x4d, 0x89, 0x01, 0x00, 0x00, 0x04, + 0x8a, 0x01, 0x00, 0x00, 0x4d, 0x8b, 0x01, 0x00, + 0x00, 0x4d, 0x8c, 0x01, 0x00, 0x00, 0x4d, 0xd9, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x3f, 0xbe, + 0x40, 0xbe, 0x41, 0xbe, 0x42, 0xbe, 0x43, 0xbe, + 0x44, 0xbe, 0x45, 0xbe, 0x46, 0xbe, 0x47, 0xbe, + 0x48, 0xbe, 0x49, 0xbe, 0x4a, 0x26, 0x0c, 0x00, + 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, + 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, + 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, + 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, + 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, + 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, + 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, + 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, + 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, + 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, + 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, + 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, + 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, + 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, + 0x04, 0x98, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x1e, 0x01, 0x00, 0x00, 0x04, 0x1f, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, + 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, + 0x84, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x85, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, + 0xa7, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, + 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa6, + 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x87, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x4d, 0x89, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x4d, 0x8b, 0x01, + 0x00, 0x00, 0x4d, 0x8c, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xee, + 0x00, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x1f, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x1f, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x1e, 0x01, + 0x00, 0x00, 0x04, 0x1f, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7e, + 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, + 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x85, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xb5, 0x01, 0x00, 0x00, 0x04, 0xb6, 0x01, 0x00, + 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, + 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, + 0x04, 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, + 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, 0x26, + 0x04, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, + 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, + 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x87, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x88, 0x01, 0x00, 0x00, 0x4d, 0x89, + 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, + 0x4d, 0x8b, 0x01, 0x00, 0x00, 0x4d, 0x8c, 0x01, + 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x4b, 0xbe, 0x4c, 0xbe, 0x4d, 0xbe, + 0x4e, 0xbe, 0x4f, 0xbe, 0x50, 0xbe, 0x51, 0xbe, + 0x52, 0xbe, 0x53, 0xbe, 0x54, 0xbe, 0x55, 0xbe, + 0x56, 0xbe, 0x57, 0xbe, 0x58, 0x26, 0x0e, 0x00, + 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, + 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, + 0xbf, 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, + 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, 0x04, 0xc2, + 0x01, 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, + 0x04, 0xc4, 0x01, 0x00, 0x00, 0x04, 0xc5, 0x01, + 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, + 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, + 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, 0x04, 0xca, + 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, + 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, + 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, 0x04, + 0xc1, 0x01, 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, + 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, 0x04, 0xc4, + 0x01, 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, + 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, + 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, + 0xc9, 0x01, 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, + 0x00, 0x26, 0x0e, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x1e, 0x01, 0x00, + 0x00, 0x04, 0x1f, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, + 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, + 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, + 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x85, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xcb, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xcb, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x87, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x88, 0x01, 0x00, 0x00, + 0x4d, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, + 0x00, 0x00, 0x4d, 0x8b, 0x01, 0x00, 0x00, 0x4d, + 0x8c, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x59, 0xbe, 0x5a, 0xbe, + 0x5b, 0xbe, 0x5c, 0xbe, 0x5d, 0xbe, 0x5e, 0xbe, + 0x5f, 0xbe, 0x60, 0xbe, 0x61, 0xbe, 0x62, 0xbe, + 0x63, 0xbe, 0x64, 0x26, 0x0c, 0x00, 0x4d, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, + 0x04, 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, + 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, + 0xd0, 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, + 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, + 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, + 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, + 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, + 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, 0x04, 0xcf, + 0x01, 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, + 0x04, 0xd1, 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, + 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, + 0xd4, 0x01, 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, + 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x1e, + 0x01, 0x00, 0x00, 0x04, 0x1f, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x85, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xd8, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x04, 0xd8, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x87, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x88, 0x01, + 0x00, 0x00, 0x4d, 0x89, 0x01, 0x00, 0x00, 0x04, + 0x8a, 0x01, 0x00, 0x00, 0x4d, 0x8b, 0x01, 0x00, + 0x00, 0x4d, 0x8c, 0x01, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x65, 0xbe, + 0x66, 0xbe, 0x67, 0xbe, 0x68, 0xbe, 0x69, 0xbe, + 0x6a, 0xbe, 0x6b, 0xbe, 0x6c, 0xbe, 0x6d, 0xbe, + 0x6e, 0xbe, 0x6f, 0xbe, 0x70, 0x26, 0x0c, 0x00, + 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, + 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, + 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, + 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, + 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, + 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, + 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, + 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, + 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, + 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, + 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, + 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, + 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, + 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, + 0x04, 0xf0, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x1e, 0x01, 0x00, 0x00, 0x04, 0x1f, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, + 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, + 0x84, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x85, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xf1, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0xf1, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x87, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x88, 0x01, 0x00, 0x00, 0x4d, 0x89, 0x01, 0x00, + 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x4d, 0x8b, + 0x01, 0x00, 0x00, 0x4d, 0x8c, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x71, 0xbe, 0x72, 0xbe, 0x73, 0xbe, 0x74, 0xbe, + 0x75, 0xbe, 0x76, 0xbe, 0x77, 0xbe, 0x78, 0xbe, + 0x79, 0xbe, 0x7a, 0xbe, 0x7b, 0xbe, 0x7c, 0x26, + 0x0c, 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, + 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, + 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, + 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, + 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, + 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, + 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, + 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, + 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, + 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, + 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, + 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, + 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, + 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x75, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x1e, 0x01, 0x00, 0x00, 0x04, + 0x1f, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, + 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, + 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x85, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xf1, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xf1, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x87, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x88, 0x01, 0x00, 0x00, 0x4d, 0x89, + 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, + 0x4d, 0x8b, 0x01, 0x00, 0x00, 0x4d, 0x8c, 0x01, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0xee, 0x00, 0x00, 0x00, 0x04, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x1f, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x1f, 0x01, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x1e, 0x01, 0x00, 0x00, 0x04, 0x1f, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, + 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, + 0x84, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x85, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, + 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, + 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, + 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, + 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, + 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, + 0xfb, 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, + 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, + 0x01, 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, + 0x04, 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, + 0x00, 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, 0x04, + 0x03, 0x02, 0x00, 0x00, 0x04, 0x04, 0x02, 0x00, + 0x00, 0x04, 0x05, 0x02, 0x00, 0x00, 0x04, 0x06, + 0x02, 0x00, 0x00, 0x04, 0x07, 0x02, 0x00, 0x00, + 0x04, 0x08, 0x02, 0x00, 0x00, 0x04, 0x09, 0x02, + 0x00, 0x00, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x04, + 0x0b, 0x02, 0x00, 0x00, 0x04, 0x0c, 0x02, 0x00, + 0x00, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x04, 0x0e, + 0x02, 0x00, 0x00, 0x04, 0x0f, 0x02, 0x00, 0x00, + 0x04, 0x10, 0x02, 0x00, 0x00, 0x04, 0x11, 0x02, + 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, 0x12, 0x02, + 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, + 0x13, 0x02, 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, + 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x22, + 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, + 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, + 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, + 0x17, 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, + 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x26, + 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, + 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, + 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, + 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, + 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x2a, + 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, + 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, + 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, + 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, + 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x2e, + 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, + 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, + 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, + 0x23, 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, + 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x32, + 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, + 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, + 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, + 0x27, 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, + 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x36, + 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, + 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, + 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, + 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, + 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x3a, + 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, + 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, + 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, + 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, + 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x3e, + 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, + 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, + 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, + 0x33, 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, + 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x42, + 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, + 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, + 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, + 0x37, 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, + 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x46, + 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, + 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, + 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, + 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, + 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x4a, + 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, + 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, + 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, + 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, + 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x4e, + 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, + 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, + 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, + 0x43, 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, + 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x52, + 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, + 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, + 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, + 0x47, 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, + 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x56, + 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, + 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, + 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, + 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, + 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x5a, + 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, + 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, + 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, + 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, + 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x5e, + 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, + 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, + 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, + 0x53, 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, + 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x62, + 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, + 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, + 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, + 0x57, 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, + 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x66, + 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, + 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, + 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, + 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, + 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x6a, + 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, + 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, + 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, + 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, + 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x6e, + 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, + 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, + 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, + 0x63, 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, + 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x72, + 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, + 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, + 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, + 0x67, 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, + 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x76, + 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, + 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, + 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, + 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, + 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x7a, + 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, + 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, + 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, + 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, + 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x7e, + 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, + 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, + 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, + 0x73, 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, + 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x82, + 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, + 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, + 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, + 0x77, 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, + 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x86, + 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, + 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, + 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, + 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, + 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x8a, + 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, + 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, + 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, + 0x7f, 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, + 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0x8e, + 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, + 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, + 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, + 0x83, 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, + 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0x92, + 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, + 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, + 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, + 0x87, 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, + 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0x96, + 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, + 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, + 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, + 0x8b, 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, + 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0x9a, + 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, + 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, + 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, + 0x8f, 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, + 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0x9e, + 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, + 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, + 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, + 0x93, 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, + 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xa2, + 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, + 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, + 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, + 0x97, 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, + 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xa6, + 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, + 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, + 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, + 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, + 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xaa, + 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, + 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, + 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, + 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, + 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xae, + 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, + 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, + 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, + 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, + 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xb2, + 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, + 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, + 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, + 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, + 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xb6, + 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, + 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, + 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, + 0xab, 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, + 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xba, + 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, + 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, + 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, + 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, + 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xbe, + 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, + 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, + 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, + 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, + 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xc2, + 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, + 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, + 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, + 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, + 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xc6, + 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, + 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, + 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, + 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, + 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xca, + 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, + 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, + 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, + 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, + 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xce, + 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, + 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, + 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, + 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, + 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xd2, + 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, + 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, + 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, + 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, + 0x80, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xd6, + 0x00, 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, + 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, + 0xcb, 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, + 0x80, 0x04, 0xcc, 0x02, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x80, 0x04, 0xcd, 0x02, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, 0xce, 0x02, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, + 0xcf, 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x80, 0x04, 0xd0, 0x02, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x80, 0x04, 0xd1, 0x02, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, 0xd2, 0x02, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, + 0xd3, 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, + 0x80, 0x04, 0xd4, 0x02, 0x00, 0x00, 0x4d, 0xe2, + 0x00, 0x00, 0x80, 0x04, 0xd5, 0x02, 0x00, 0x00, + 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x02, + 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, + 0xd7, 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x80, 0x04, 0xd8, 0x02, 0x00, 0x00, 0x4d, 0xe6, + 0x00, 0x00, 0x80, 0x04, 0xd9, 0x02, 0x00, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x01, + 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, + 0xda, 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, + 0x80, 0x04, 0x58, 0x01, 0x00, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x80, 0x04, 0x09, 0x01, 0x00, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, + 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, + 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, + 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, + 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, + 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, + 0xfb, 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, + 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, + 0x01, 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, + 0x04, 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, + 0x00, 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, 0x04, + 0x03, 0x02, 0x00, 0x00, 0x04, 0x04, 0x02, 0x00, + 0x00, 0x04, 0x05, 0x02, 0x00, 0x00, 0x04, 0x06, + 0x02, 0x00, 0x00, 0x04, 0x07, 0x02, 0x00, 0x00, + 0x04, 0x08, 0x02, 0x00, 0x00, 0x04, 0x09, 0x02, + 0x00, 0x00, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x04, + 0x0b, 0x02, 0x00, 0x00, 0x04, 0x0c, 0x02, 0x00, + 0x00, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x04, 0x0e, + 0x02, 0x00, 0x00, 0x04, 0x0f, 0x02, 0x00, 0x00, + 0x04, 0x10, 0x02, 0x00, 0x00, 0x04, 0x11, 0x02, + 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, 0x12, 0x02, + 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, + 0x13, 0x02, 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, + 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x22, + 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, + 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, + 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, + 0x17, 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, + 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x26, + 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, + 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, + 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, + 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, + 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x2a, + 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, + 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, + 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, + 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, + 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x2e, + 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, + 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, + 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, + 0x23, 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, + 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x32, + 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, + 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, + 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, + 0x27, 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, + 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x36, + 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, + 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, + 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, + 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, + 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x3a, + 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, + 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, + 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, + 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, + 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x3e, + 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, + 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, + 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, + 0x33, 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, + 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x42, + 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, + 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, + 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, + 0x37, 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, + 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x46, + 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, + 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, + 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, + 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, + 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x4a, + 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, + 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, + 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, + 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, + 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x4e, + 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, + 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, + 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, + 0x43, 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, + 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x52, + 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, + 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, + 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, + 0x47, 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, + 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x56, + 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, + 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, + 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, + 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, + 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x5a, + 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, + 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, + 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, + 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, + 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x5e, + 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, + 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, + 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, + 0x53, 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, + 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x62, + 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, + 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, + 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, + 0x57, 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, + 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x66, + 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, + 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, + 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, + 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, + 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x6a, + 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, + 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, + 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, + 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, + 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x6e, + 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, + 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, + 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, + 0x63, 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, + 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x72, + 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, + 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, + 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, + 0x67, 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, + 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x76, + 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, + 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, + 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, + 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, + 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x7a, + 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, + 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, + 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, + 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, + 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x7e, + 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, + 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, + 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, + 0x73, 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, + 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x82, + 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, + 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, + 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, + 0x77, 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, + 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x86, + 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, + 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, + 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, + 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, + 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x8a, + 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, + 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, + 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, + 0x7f, 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, + 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0x8e, + 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, + 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, + 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, + 0x83, 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, + 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0x92, + 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, + 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, + 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, + 0x87, 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, + 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0x96, + 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, + 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, + 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, + 0x8b, 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, + 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0x9a, + 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, + 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, + 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, + 0x8f, 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, + 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0x9e, + 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, + 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, + 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, + 0x93, 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, + 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xa2, + 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, + 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, + 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, + 0x97, 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, + 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xa6, + 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, + 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, + 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, + 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, + 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xaa, + 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, + 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, + 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, + 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, + 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xae, + 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, + 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, + 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, + 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, + 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xb2, + 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, + 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, + 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, + 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, + 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xb6, + 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, + 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, + 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, + 0xab, 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, + 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xba, + 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, + 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, + 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, + 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, + 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xbe, + 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, + 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, + 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, + 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, + 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xc2, + 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, + 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, + 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, + 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, + 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xc6, + 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, + 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, + 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, + 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, + 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xca, + 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, + 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, + 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, + 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, + 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xce, + 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, + 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, + 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, + 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, + 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xd2, + 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, + 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, + 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, + 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, + 0x80, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xd6, + 0x00, 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, + 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, + 0xcb, 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, + 0x80, 0x04, 0xcc, 0x02, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x80, 0x04, 0xcd, 0x02, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, 0xce, 0x02, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, + 0xcf, 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x80, 0x04, 0xd0, 0x02, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x80, 0x04, 0xd1, 0x02, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, 0xd2, 0x02, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, + 0xd3, 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, + 0x80, 0x04, 0xd4, 0x02, 0x00, 0x00, 0x4d, 0xe2, + 0x00, 0x00, 0x80, 0x04, 0xd5, 0x02, 0x00, 0x00, + 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x02, + 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, + 0xd7, 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x80, 0x04, 0xd8, 0x02, 0x00, 0x00, 0x4d, 0xe6, + 0x00, 0x00, 0x80, 0x04, 0xd9, 0x02, 0x00, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, 0xdb, 0x02, + 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, + 0xdc, 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, + 0x80, 0x04, 0xdd, 0x02, 0x00, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x80, 0x04, 0xde, 0x02, 0x00, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, + 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, + 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, + 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, + 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, + 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, + 0xfb, 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, + 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, + 0x01, 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, + 0x04, 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, + 0x00, 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, 0x04, + 0x03, 0x02, 0x00, 0x00, 0x04, 0x04, 0x02, 0x00, + 0x00, 0x04, 0x05, 0x02, 0x00, 0x00, 0x04, 0x06, + 0x02, 0x00, 0x00, 0x04, 0x07, 0x02, 0x00, 0x00, + 0x04, 0x08, 0x02, 0x00, 0x00, 0x04, 0x09, 0x02, + 0x00, 0x00, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x04, + 0x0b, 0x02, 0x00, 0x00, 0x04, 0x0c, 0x02, 0x00, + 0x00, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x04, 0x0e, + 0x02, 0x00, 0x00, 0x04, 0x0f, 0x02, 0x00, 0x00, + 0x04, 0x10, 0x02, 0x00, 0x00, 0x04, 0x11, 0x02, + 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, 0x12, 0x02, + 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, + 0x13, 0x02, 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, + 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x22, + 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, + 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, + 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, + 0x17, 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, + 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x26, + 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, + 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, + 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, + 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, + 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x2a, + 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, + 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, + 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, + 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, + 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x2e, + 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, + 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, + 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, + 0x23, 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, + 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x32, + 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, + 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, + 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, + 0x27, 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, + 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x36, + 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, + 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, + 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, + 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, + 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x3a, + 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, + 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, + 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, + 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, + 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x3e, + 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, + 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, + 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, + 0x33, 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, + 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x42, + 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, + 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, + 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, + 0x37, 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, + 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x46, + 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, + 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, + 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, + 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, + 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x4a, + 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, + 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, + 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, + 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, + 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x4e, + 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, + 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, + 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, + 0x43, 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, + 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x52, + 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, + 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, + 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, + 0x47, 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, + 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x56, + 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, + 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, + 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, + 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, + 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x5a, + 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, + 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, + 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, + 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, + 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x5e, + 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, + 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, + 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, + 0x53, 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, + 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x62, + 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, + 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, + 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, + 0x57, 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, + 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x66, + 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, + 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, + 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, + 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, + 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x6a, + 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, + 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, + 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, + 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, + 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x6e, + 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, + 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, + 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, + 0x63, 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, + 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x72, + 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, + 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, + 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, + 0x67, 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, + 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x76, + 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, + 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, + 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, + 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, + 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x7a, + 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, + 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, + 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, + 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, + 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x7e, + 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, + 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, + 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, + 0x73, 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, + 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x82, + 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, + 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, + 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, + 0x77, 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, + 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x86, + 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, + 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, + 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, + 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, + 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x8a, + 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, + 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, + 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, + 0x7f, 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, + 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0x8e, + 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, + 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, + 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, + 0x83, 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, + 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0x92, + 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, + 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, + 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, + 0x87, 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, + 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0x96, + 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, + 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, + 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, + 0x8b, 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, + 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0x9a, + 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, + 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, + 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, + 0x8f, 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, + 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0x9e, + 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, + 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, + 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, + 0x93, 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, + 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xa2, + 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, + 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, + 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, + 0x97, 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, + 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xa6, + 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, + 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, + 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, + 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, + 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xaa, + 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, + 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, + 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, + 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, + 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xae, + 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, + 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, + 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, + 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, + 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xb2, + 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, + 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, + 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, + 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, + 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xb6, + 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, + 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, + 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, + 0xab, 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, + 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xba, + 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, + 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, + 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, + 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, + 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xbe, + 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, + 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, + 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, + 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, + 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xc2, + 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, + 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, + 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, + 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, + 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xc6, + 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, + 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, + 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, + 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, + 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xca, + 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, + 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, + 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, + 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, + 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xce, + 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, + 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, + 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, + 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, + 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xd2, + 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, + 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, + 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, + 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, + 0x80, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xd6, + 0x00, 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, + 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, + 0xcb, 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, + 0x80, 0x04, 0xcc, 0x02, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x80, 0x04, 0xcd, 0x02, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, 0xce, 0x02, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, + 0xcf, 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x80, 0x04, 0xd0, 0x02, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x80, 0x04, 0xd1, 0x02, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, 0xd2, 0x02, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, + 0xd3, 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, + 0x80, 0x04, 0xd4, 0x02, 0x00, 0x00, 0x4d, 0xe2, + 0x00, 0x00, 0x80, 0x04, 0xd5, 0x02, 0x00, 0x00, + 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x02, + 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, + 0xd7, 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x80, 0x04, 0xd8, 0x02, 0x00, 0x00, 0x4d, 0xe6, + 0x00, 0x00, 0x80, 0x04, 0xd9, 0x02, 0x00, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, 0xdb, 0x02, + 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, + 0xdc, 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, + 0x80, 0x04, 0xdd, 0x02, 0x00, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x80, 0x04, 0xde, 0x02, 0x00, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x87, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x88, 0x01, 0x00, 0x00, 0x4d, 0x89, 0x01, + 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x4d, + 0x8b, 0x01, 0x00, 0x00, 0x4d, 0x8c, 0x01, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x7d, 0xbe, 0x7e, 0xbe, 0x7f, 0xbe, 0x80, + 0xbe, 0x81, 0xbe, 0x82, 0xbe, 0x83, 0xbe, 0x84, + 0xbe, 0x85, 0xbe, 0x86, 0xbe, 0x87, 0xbe, 0x88, + 0x26, 0x0c, 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0xdf, 0x02, 0x00, 0x00, 0x04, 0xe0, 0x02, + 0x00, 0x00, 0x04, 0xe1, 0x02, 0x00, 0x00, 0x04, + 0xe2, 0x02, 0x00, 0x00, 0x04, 0xe3, 0x02, 0x00, + 0x00, 0x04, 0xe4, 0x02, 0x00, 0x00, 0x04, 0xe5, + 0x02, 0x00, 0x00, 0x04, 0xe6, 0x02, 0x00, 0x00, + 0x04, 0xe7, 0x02, 0x00, 0x00, 0x04, 0xe8, 0x02, + 0x00, 0x00, 0x04, 0xe9, 0x02, 0x00, 0x00, 0x04, + 0xea, 0x02, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xdf, 0x02, 0x00, + 0x00, 0x04, 0xe0, 0x02, 0x00, 0x00, 0x04, 0xe1, + 0x02, 0x00, 0x00, 0x04, 0xe2, 0x02, 0x00, 0x00, + 0x04, 0xe3, 0x02, 0x00, 0x00, 0x04, 0xe4, 0x02, + 0x00, 0x00, 0x04, 0xe5, 0x02, 0x00, 0x00, 0x04, + 0xe6, 0x02, 0x00, 0x00, 0x04, 0xe7, 0x02, 0x00, + 0x00, 0x04, 0xe8, 0x02, 0x00, 0x00, 0x04, 0xe9, + 0x02, 0x00, 0x00, 0x04, 0xea, 0x02, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x75, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x04, 0x1e, 0x01, 0x00, 0x00, + 0x04, 0x1f, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, + 0x7d, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x85, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xeb, 0x02, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0xeb, 0x02, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xeb, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x87, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x88, 0x01, 0x00, 0x00, 0x4d, + 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x4d, 0x8b, 0x01, 0x00, 0x00, 0x4d, 0x8c, + 0x01, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0xee, 0x00, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x1f, 0x01, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x1f, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x75, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x1e, 0x01, 0x00, 0x00, 0x04, 0x1f, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x85, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xec, 0x02, 0x00, 0x00, + 0x04, 0xed, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x04, 0xec, 0x02, + 0x00, 0x00, 0x04, 0xed, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xec, 0x02, 0x00, 0x00, 0x04, 0xed, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x87, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x88, 0x01, 0x00, 0x00, 0x4d, 0x89, 0x01, 0x00, + 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x4d, 0x8b, + 0x01, 0x00, 0x00, 0x4d, 0x8c, 0x01, 0x00, 0x00, + 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x4d, 0xee, 0x02, + 0x00, 0x00, 0x4d, 0xef, 0x02, 0x00, 0x00, 0x0b, + 0x04, 0xf0, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xf1, 0x02, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0xf2, 0x02, 0x00, 0x00, 0x4d, 0xf3, 0x02, 0x00, + 0x00, 0x04, 0xf4, 0x02, 0x00, 0x00, 0x4d, 0xf5, + 0x02, 0x00, 0x00, 0x4d, 0xf6, 0x02, 0x00, 0x00, + 0x0b, 0x04, 0xf7, 0x02, 0x00, 0x00, 0x4d, 0xf3, + 0x02, 0x00, 0x00, 0x04, 0xf8, 0x02, 0x00, 0x00, + 0x4d, 0xf5, 0x02, 0x00, 0x00, 0x4d, 0xf9, 0x02, + 0x00, 0x00, 0x0b, 0x04, 0xfa, 0x02, 0x00, 0x00, + 0x4d, 0xf3, 0x02, 0x00, 0x00, 0x04, 0xfb, 0x02, + 0x00, 0x00, 0x4d, 0xf5, 0x02, 0x00, 0x00, 0x4d, + 0xfc, 0x02, 0x00, 0x00, 0x4d, 0xfd, 0x02, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0xfe, 0x02, 0x00, 0x00, + 0x4d, 0xf6, 0x02, 0x00, 0x00, 0x04, 0xff, 0x02, + 0x00, 0x00, 0x4d, 0x00, 0x03, 0x00, 0x00, 0x04, + 0x01, 0x03, 0x00, 0x00, 0x4d, 0x02, 0x03, 0x00, + 0x00, 0x04, 0x03, 0x03, 0x00, 0x00, 0x4d, 0x04, + 0x03, 0x00, 0x00, 0x04, 0x05, 0x03, 0x00, 0x00, + 0x4d, 0x06, 0x03, 0x00, 0x00, 0x04, 0x07, 0x03, + 0x00, 0x00, 0x4d, 0x08, 0x03, 0x00, 0x00, 0x04, + 0x09, 0x03, 0x00, 0x00, 0x4d, 0x0a, 0x03, 0x00, + 0x00, 0x4d, 0xf0, 0x02, 0x00, 0x00, 0x4d, 0x0b, + 0x03, 0x00, 0x00, 0x0b, 0x04, 0x0c, 0x03, 0x00, + 0x00, 0x4d, 0x0d, 0x03, 0x00, 0x00, 0x04, 0x0e, + 0x03, 0x00, 0x00, 0x4d, 0x0f, 0x03, 0x00, 0x00, + 0x04, 0x10, 0x03, 0x00, 0x00, 0x4d, 0x11, 0x03, + 0x00, 0x00, 0x04, 0x12, 0x03, 0x00, 0x00, 0x4d, + 0x13, 0x03, 0x00, 0x00, 0x04, 0x14, 0x03, 0x00, + 0x00, 0x4d, 0x15, 0x03, 0x00, 0x00, 0x04, 0x16, + 0x03, 0x00, 0x00, 0x4d, 0x17, 0x03, 0x00, 0x00, + 0x04, 0x18, 0x03, 0x00, 0x00, 0x4d, 0x19, 0x03, + 0x00, 0x00, 0x4d, 0x1a, 0x03, 0x00, 0x00, 0x4d, + 0x45, 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, 0xcc, + 0x28, 0xb6, 0x0c, 0x01, 0x00, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, + 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_es_US_size = 24836; + +const uint8_t intl_es_US[24836] = { + 0x01, 0xc9, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x0a, 0x65, 0x73, 0x2d, 0x55, 0x53, 0x0c, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x0e, 0x67, 0x72, + 0x65, 0x67, 0x6f, 0x72, 0x79, 0x10, 0x62, 0x75, + 0x64, 0x64, 0x68, 0x69, 0x73, 0x74, 0x0e, 0x63, + 0x68, 0x69, 0x6e, 0x65, 0x73, 0x65, 0x0c, 0x63, + 0x6f, 0x70, 0x74, 0x69, 0x63, 0x0a, 0x64, 0x61, + 0x6e, 0x67, 0x69, 0x0e, 0x65, 0x74, 0x68, 0x69, + 0x6f, 0x61, 0x61, 0x10, 0x65, 0x74, 0x68, 0x69, + 0x6f, 0x70, 0x69, 0x63, 0x0e, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x69, 0x63, 0x0c, 0x68, 0x65, 0x62, + 0x72, 0x65, 0x77, 0x0c, 0x69, 0x6e, 0x64, 0x69, + 0x61, 0x6e, 0x0e, 0x69, 0x73, 0x6c, 0x61, 0x6d, + 0x69, 0x63, 0x10, 0x69, 0x73, 0x6c, 0x61, 0x6d, + 0x69, 0x63, 0x63, 0x10, 0x6a, 0x61, 0x70, 0x61, + 0x6e, 0x65, 0x73, 0x65, 0x0e, 0x70, 0x65, 0x72, + 0x73, 0x69, 0x61, 0x6e, 0x06, 0x72, 0x6f, 0x63, + 0x04, 0x63, 0x61, 0x0e, 0x68, 0x6f, 0x75, 0x72, + 0x4e, 0x6f, 0x30, 0x0c, 0x68, 0x6f, 0x75, 0x72, + 0x31, 0x32, 0x0e, 0x7b, 0x31, 0x7d, 0x20, 0x7b, + 0x30, 0x7d, 0x0a, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x0c, 0x6d, 0x65, 0x64, 0x69, 0x75, 0x6d, 0x10, + 0x7b, 0x31, 0x7d, 0x2c, 0x20, 0x7b, 0x30, 0x7d, + 0x08, 0x66, 0x75, 0x6c, 0x6c, 0x08, 0x6c, 0x6f, + 0x6e, 0x67, 0x02, 0x64, 0x06, 0x63, 0x63, 0x63, + 0x02, 0x45, 0x06, 0x45, 0x20, 0x64, 0x04, 0x45, + 0x64, 0x12, 0x45, 0x2c, 0x20, 0x68, 0x3a, 0x6d, + 0x6d, 0x20, 0x61, 0x06, 0x45, 0x68, 0x6d, 0x10, + 0x45, 0x2c, 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x06, 0x45, 0x48, 0x6d, 0x18, 0x45, 0x2c, 0x20, + 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, + 0x61, 0x08, 0x45, 0x68, 0x6d, 0x73, 0x16, 0x45, + 0x2c, 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x08, 0x45, 0x48, 0x6d, 0x73, 0x06, + 0x79, 0x20, 0x47, 0x04, 0x47, 0x79, 0x0e, 0x4d, + 0x4d, 0x4d, 0x20, 0x79, 0x20, 0x47, 0x0a, 0x47, + 0x79, 0x4d, 0x4d, 0x4d, 0x26, 0x64, 0x20, 0x27, + 0x64, 0x65, 0x27, 0x20, 0x4d, 0x4d, 0x4d, 0x20, + 0x27, 0x64, 0x65, 0x27, 0x20, 0x79, 0x20, 0x47, + 0x0c, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x18, + 0x45, 0x2c, 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, + 0x20, 0x79, 0x20, 0x47, 0x0e, 0x47, 0x79, 0x4d, + 0x4d, 0x4d, 0x45, 0x64, 0x1a, 0x4d, 0x4d, 0x4d, + 0x4d, 0x20, 0x27, 0x64, 0x65, 0x27, 0x20, 0x79, + 0x20, 0x47, 0x0c, 0x47, 0x79, 0x4d, 0x4d, 0x4d, + 0x4d, 0x28, 0x64, 0x20, 0x27, 0x64, 0x65, 0x27, + 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x27, 0x64, + 0x65, 0x27, 0x20, 0x79, 0x20, 0x47, 0x0e, 0x47, + 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x2e, 0x45, + 0x2c, 0x20, 0x64, 0x20, 0x27, 0x64, 0x65, 0x27, + 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x27, 0x64, + 0x65, 0x27, 0x20, 0x79, 0x20, 0x47, 0x10, 0x47, + 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x06, + 0x68, 0x20, 0x61, 0x02, 0x68, 0x04, 0x48, 0x48, + 0x02, 0x48, 0x0c, 0x68, 0x3a, 0x6d, 0x6d, 0x20, + 0x61, 0x04, 0x68, 0x6d, 0x0a, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x04, 0x48, 0x6d, 0x12, 0x68, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x06, + 0x68, 0x6d, 0x73, 0x10, 0x48, 0x48, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x06, 0x48, 0x6d, 0x73, + 0x16, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x61, 0x20, 0x76, 0x08, 0x68, 0x6d, 0x73, + 0x76, 0x12, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x76, 0x08, 0x48, 0x6d, 0x73, 0x76, + 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x61, 0x20, 0x28, 0x76, 0x76, 0x76, 0x76, + 0x29, 0x0e, 0x68, 0x6d, 0x73, 0x76, 0x76, 0x76, + 0x76, 0x1c, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x28, 0x76, 0x76, 0x76, 0x76, 0x29, + 0x0e, 0x48, 0x6d, 0x73, 0x76, 0x76, 0x76, 0x76, + 0x10, 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x20, + 0x76, 0x06, 0x68, 0x6d, 0x76, 0x0c, 0x48, 0x3a, + 0x6d, 0x6d, 0x20, 0x76, 0x06, 0x48, 0x6d, 0x76, + 0x02, 0x4c, 0x02, 0x4d, 0x06, 0x64, 0x2f, 0x4d, + 0x04, 0x4d, 0x64, 0x0c, 0x45, 0x2c, 0x20, 0x64, + 0x2f, 0x4d, 0x06, 0x4d, 0x45, 0x64, 0x06, 0x4d, + 0x4d, 0x64, 0x08, 0x4d, 0x4d, 0x64, 0x64, 0x06, + 0x4c, 0x4c, 0x4c, 0x06, 0x4d, 0x4d, 0x4d, 0x0a, + 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x08, 0x4d, 0x4d, + 0x4d, 0x64, 0x0c, 0x64, 0x64, 0x2d, 0x4d, 0x4d, + 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x64, 0x64, 0x10, + 0x45, 0x2c, 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, + 0x0a, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x16, 0x64, + 0x20, 0x27, 0x64, 0x65, 0x27, 0x20, 0x4d, 0x4d, + 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, + 0x1c, 0x45, 0x2c, 0x20, 0x64, 0x20, 0x27, 0x64, + 0x65, 0x27, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x0c, + 0x4d, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x04, 0x6d, 0x73, 0x02, + 0x79, 0x06, 0x4d, 0x2f, 0x79, 0x04, 0x79, 0x4d, + 0x0a, 0x64, 0x2f, 0x4d, 0x2f, 0x79, 0x06, 0x79, + 0x4d, 0x64, 0x0e, 0x45, 0x20, 0x64, 0x2f, 0x4d, + 0x2f, 0x79, 0x08, 0x79, 0x4d, 0x45, 0x64, 0x06, + 0x79, 0x4d, 0x4d, 0x16, 0x4d, 0x4d, 0x4d, 0x4d, + 0x20, 0x27, 0x64, 0x65, 0x27, 0x20, 0x79, 0x08, + 0x79, 0x4d, 0x4d, 0x4d, 0x24, 0x64, 0x20, 0x27, + 0x64, 0x65, 0x27, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, + 0x20, 0x27, 0x64, 0x65, 0x27, 0x20, 0x79, 0x0a, + 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x28, 0x45, 0x2c, + 0x20, 0x64, 0x20, 0x27, 0x64, 0x65, 0x27, 0x20, + 0x4d, 0x4d, 0x4d, 0x20, 0x27, 0x64, 0x65, 0x27, + 0x20, 0x79, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x45, + 0x64, 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x0c, + 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x2e, 0x45, + 0x45, 0x45, 0x2c, 0x20, 0x64, 0x20, 0x27, 0x64, + 0x65, 0x27, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, + 0x27, 0x64, 0x65, 0x27, 0x20, 0x79, 0x0e, 0x79, + 0x4d, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x14, 0x51, + 0x51, 0x51, 0x20, 0x27, 0x64, 0x65, 0x27, 0x20, + 0x79, 0x08, 0x79, 0x51, 0x51, 0x51, 0x16, 0x51, + 0x51, 0x51, 0x51, 0x20, 0x27, 0x64, 0x65, 0x27, + 0x20, 0x79, 0x0a, 0x79, 0x51, 0x51, 0x51, 0x51, + 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, + 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x73, 0x30, 0x45, 0x45, 0x45, 0x45, 0x2c, 0x20, + 0x64, 0x20, 0x27, 0x64, 0x65, 0x27, 0x20, 0x4d, + 0x4d, 0x4d, 0x4d, 0x20, 0x27, 0x64, 0x65, 0x27, + 0x20, 0x79, 0x14, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, + 0x45, 0x45, 0x45, 0x45, 0x64, 0x0e, 0x64, 0x20, + 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0c, 0x64, 0x2f, + 0x4d, 0x2f, 0x79, 0x79, 0x16, 0x64, 0x61, 0x74, + 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, + 0x1c, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x61, 0x20, 0x7a, 0x7a, 0x7a, 0x7a, 0x12, + 0x68, 0x6d, 0x6d, 0x73, 0x73, 0x7a, 0x7a, 0x7a, + 0x7a, 0x16, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x61, 0x20, 0x7a, 0x08, 0x68, 0x6d, + 0x73, 0x7a, 0x16, 0x74, 0x69, 0x6d, 0x65, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x0e, 0x66, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x02, 0x65, + 0x02, 0x66, 0x02, 0x6d, 0x02, 0x61, 0x02, 0x6a, + 0x02, 0x73, 0x02, 0x6f, 0x02, 0x6e, 0x0c, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x08, 0x65, 0x6e, + 0x65, 0x2e, 0x08, 0x66, 0x65, 0x62, 0x2e, 0x08, + 0x6d, 0x61, 0x72, 0x2e, 0x08, 0x61, 0x62, 0x72, + 0x2e, 0x08, 0x6d, 0x61, 0x79, 0x2e, 0x08, 0x6a, + 0x75, 0x6e, 0x2e, 0x08, 0x6a, 0x75, 0x6c, 0x2e, + 0x08, 0x61, 0x67, 0x6f, 0x2e, 0x08, 0x73, 0x65, + 0x70, 0x2e, 0x08, 0x6f, 0x63, 0x74, 0x2e, 0x08, + 0x6e, 0x6f, 0x76, 0x2e, 0x08, 0x64, 0x69, 0x63, + 0x2e, 0x0a, 0x65, 0x6e, 0x65, 0x72, 0x6f, 0x0e, + 0x66, 0x65, 0x62, 0x72, 0x65, 0x72, 0x6f, 0x0a, + 0x6d, 0x61, 0x72, 0x7a, 0x6f, 0x0a, 0x61, 0x62, + 0x72, 0x69, 0x6c, 0x08, 0x6d, 0x61, 0x79, 0x6f, + 0x0a, 0x6a, 0x75, 0x6e, 0x69, 0x6f, 0x0a, 0x6a, + 0x75, 0x6c, 0x69, 0x6f, 0x0c, 0x61, 0x67, 0x6f, + 0x73, 0x74, 0x6f, 0x14, 0x73, 0x65, 0x70, 0x74, + 0x69, 0x65, 0x6d, 0x62, 0x72, 0x65, 0x0e, 0x6f, + 0x63, 0x74, 0x75, 0x62, 0x72, 0x65, 0x12, 0x6e, + 0x6f, 0x76, 0x69, 0x65, 0x6d, 0x62, 0x72, 0x65, + 0x12, 0x64, 0x69, 0x63, 0x69, 0x65, 0x6d, 0x62, + 0x72, 0x65, 0x0c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, + 0x73, 0x02, 0x6c, 0x02, 0x76, 0x08, 0x64, 0x6f, + 0x6d, 0x2e, 0x08, 0x6c, 0x75, 0x6e, 0x2e, 0x08, + 0x6d, 0x69, 0xe9, 0x2e, 0x08, 0x6a, 0x75, 0x65, + 0x2e, 0x08, 0x76, 0x69, 0x65, 0x2e, 0x08, 0x73, + 0xe1, 0x62, 0x2e, 0x0e, 0x64, 0x6f, 0x6d, 0x69, + 0x6e, 0x67, 0x6f, 0x0a, 0x6c, 0x75, 0x6e, 0x65, + 0x73, 0x0c, 0x6d, 0x61, 0x72, 0x74, 0x65, 0x73, + 0x12, 0x6d, 0x69, 0xe9, 0x72, 0x63, 0x6f, 0x6c, + 0x65, 0x73, 0x0c, 0x6a, 0x75, 0x65, 0x76, 0x65, + 0x73, 0x0e, 0x76, 0x69, 0x65, 0x72, 0x6e, 0x65, + 0x73, 0x0c, 0x73, 0xe1, 0x62, 0x61, 0x64, 0x6f, + 0x08, 0x64, 0x61, 0x79, 0x73, 0x04, 0x42, 0x45, + 0x08, 0x65, 0x72, 0x61, 0x73, 0x04, 0x41, 0x4d, + 0x04, 0x61, 0x6d, 0x04, 0x50, 0x4d, 0x04, 0x70, + 0x6d, 0x14, 0x64, 0x61, 0x79, 0x50, 0x65, 0x72, + 0x69, 0x6f, 0x64, 0x73, 0x06, 0x4d, 0x30, 0x31, + 0x06, 0x4d, 0x30, 0x32, 0x06, 0x4d, 0x30, 0x33, + 0x06, 0x4d, 0x30, 0x34, 0x06, 0x4d, 0x30, 0x35, + 0x06, 0x4d, 0x30, 0x36, 0x06, 0x4d, 0x30, 0x37, + 0x06, 0x4d, 0x30, 0x38, 0x06, 0x4d, 0x30, 0x39, + 0x06, 0x4d, 0x31, 0x30, 0x06, 0x4d, 0x31, 0x31, + 0x06, 0x4d, 0x31, 0x32, 0x08, 0x54, 0x6f, 0x75, + 0x74, 0x08, 0x42, 0x61, 0x62, 0x61, 0x0a, 0x48, + 0x61, 0x74, 0x6f, 0x72, 0x0a, 0x4b, 0x69, 0x61, + 0x68, 0x6b, 0x08, 0x54, 0x6f, 0x62, 0x61, 0x0c, + 0x41, 0x6d, 0x73, 0x68, 0x69, 0x72, 0x10, 0x42, + 0x61, 0x72, 0x61, 0x6d, 0x68, 0x61, 0x74, 0x12, + 0x42, 0x61, 0x72, 0x61, 0x6d, 0x6f, 0x75, 0x64, + 0x61, 0x0e, 0x42, 0x61, 0x73, 0x68, 0x61, 0x6e, + 0x73, 0x0a, 0x50, 0x61, 0x6f, 0x6e, 0x61, 0x08, + 0x45, 0x70, 0x65, 0x70, 0x0a, 0x4d, 0x65, 0x73, + 0x72, 0x61, 0x0a, 0x4e, 0x61, 0x73, 0x69, 0x65, + 0x08, 0x45, 0x52, 0x41, 0x30, 0x08, 0x45, 0x52, + 0x41, 0x31, 0x10, 0x4d, 0x65, 0x73, 0x6b, 0x65, + 0x72, 0x65, 0x6d, 0x0c, 0x54, 0x65, 0x6b, 0x65, + 0x6d, 0x74, 0x0a, 0x48, 0x65, 0x64, 0x61, 0x72, + 0x0c, 0x54, 0x61, 0x68, 0x73, 0x61, 0x73, 0x06, + 0x54, 0x65, 0x72, 0x0e, 0x59, 0x65, 0x6b, 0x61, + 0x74, 0x69, 0x74, 0x0e, 0x4d, 0x65, 0x67, 0x61, + 0x62, 0x69, 0x74, 0x0c, 0x4d, 0x69, 0x61, 0x7a, + 0x69, 0x61, 0x0c, 0x47, 0x65, 0x6e, 0x62, 0x6f, + 0x74, 0x08, 0x53, 0x65, 0x6e, 0x65, 0x0a, 0x48, + 0x61, 0x6d, 0x6c, 0x65, 0x0e, 0x4e, 0x65, 0x68, + 0x61, 0x73, 0x73, 0x65, 0x0e, 0x50, 0x61, 0x67, + 0x75, 0x6d, 0x65, 0x6e, 0x0a, 0x61, 0x2e, 0x20, + 0x43, 0x2e, 0x0a, 0x64, 0x2e, 0x20, 0x43, 0x2e, + 0x10, 0x61, 0x2e, 0x20, 0x65, 0x2e, 0x20, 0x63, + 0x2e, 0x0a, 0x65, 0x2e, 0x20, 0x63, 0x2e, 0x1e, + 0x61, 0x6e, 0x74, 0x65, 0x73, 0x20, 0x64, 0x65, + 0x20, 0x43, 0x72, 0x69, 0x73, 0x74, 0x6f, 0x22, + 0x64, 0x65, 0x73, 0x70, 0x75, 0xe9, 0x73, 0x20, + 0x64, 0x65, 0x20, 0x43, 0x72, 0x69, 0x73, 0x74, + 0x6f, 0x2a, 0x61, 0x6e, 0x74, 0x65, 0x73, 0x20, + 0x64, 0x65, 0x20, 0x6c, 0x61, 0x20, 0x65, 0x72, + 0x61, 0x20, 0x63, 0x6f, 0x6d, 0xfa, 0x6e, 0x12, + 0x65, 0x72, 0x61, 0x20, 0x63, 0x6f, 0x6d, 0xfa, + 0x6e, 0x0c, 0x54, 0x69, 0x73, 0x68, 0x72, 0x69, + 0x0e, 0x48, 0x65, 0x73, 0x68, 0x76, 0x61, 0x6e, + 0x0c, 0x4b, 0x69, 0x73, 0x6c, 0x65, 0x76, 0x0a, + 0x54, 0x65, 0x76, 0x65, 0x74, 0x0c, 0x53, 0x68, + 0x65, 0x76, 0x61, 0x74, 0x0c, 0x41, 0x64, 0x61, + 0x72, 0x20, 0x49, 0x08, 0x41, 0x64, 0x61, 0x72, + 0x0a, 0x4e, 0x69, 0x73, 0x61, 0x6e, 0x08, 0x49, + 0x79, 0x61, 0x72, 0x0a, 0x53, 0x69, 0x76, 0x61, + 0x6e, 0x0a, 0x54, 0x61, 0x6d, 0x75, 0x7a, 0x04, + 0x41, 0x76, 0x08, 0x45, 0x6c, 0x75, 0x6c, 0x0e, + 0x41, 0x64, 0x61, 0x72, 0x20, 0x49, 0x49, 0x0e, + 0x43, 0x68, 0x61, 0x69, 0x74, 0x72, 0x61, 0x10, + 0x56, 0x61, 0x69, 0x73, 0x61, 0x6b, 0x68, 0x61, + 0x10, 0x4a, 0x79, 0x61, 0x69, 0x73, 0x74, 0x68, + 0x61, 0x0c, 0x41, 0x73, 0x61, 0x64, 0x68, 0x61, + 0x0e, 0x53, 0x72, 0x61, 0x76, 0x61, 0x6e, 0x61, + 0x0c, 0x42, 0x68, 0x61, 0x64, 0x72, 0x61, 0x0c, + 0x41, 0x73, 0x76, 0x69, 0x6e, 0x61, 0x0e, 0x4b, + 0x61, 0x72, 0x74, 0x69, 0x6b, 0x61, 0x14, 0x41, + 0x67, 0x72, 0x61, 0x68, 0x61, 0x79, 0x61, 0x6e, + 0x61, 0x0a, 0x50, 0x61, 0x75, 0x73, 0x61, 0x0a, + 0x4d, 0x61, 0x67, 0x68, 0x61, 0x10, 0x50, 0x68, + 0x61, 0x6c, 0x67, 0x75, 0x6e, 0x61, 0x08, 0x53, + 0x61, 0x6b, 0x61, 0x08, 0x4d, 0x75, 0x68, 0x2e, + 0x08, 0x53, 0x61, 0x66, 0x2e, 0x0c, 0x52, 0x61, + 0x62, 0x2e, 0x20, 0x49, 0x0e, 0x52, 0x61, 0x62, + 0x2e, 0x20, 0x49, 0x49, 0x0c, 0x4a, 0x75, 0x6d, + 0x2e, 0x20, 0x49, 0x0e, 0x4a, 0x75, 0x6d, 0x2e, + 0x20, 0x49, 0x49, 0x08, 0x52, 0x61, 0x6a, 0x2e, + 0x08, 0x53, 0x68, 0x61, 0x2e, 0x08, 0x52, 0x61, + 0x6d, 0x2e, 0x0a, 0x53, 0x68, 0x61, 0x77, 0x2e, + 0x11, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, + 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x51, 0x00, 0x2e, + 0x00, 0x11, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, + 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x48, 0x00, + 0x2e, 0x00, 0x10, 0x4d, 0x75, 0x68, 0x61, 0x72, + 0x72, 0x61, 0x6d, 0x0a, 0x53, 0x61, 0x66, 0x61, + 0x72, 0x0f, 0x52, 0x00, 0x61, 0x00, 0x62, 0x00, + 0x69, 0x00, 0xbb, 0x02, 0x20, 0x00, 0x49, 0x00, + 0x11, 0x52, 0x00, 0x61, 0x00, 0x62, 0x00, 0x69, + 0x00, 0xbb, 0x02, 0x20, 0x00, 0x49, 0x00, 0x49, + 0x00, 0x10, 0x4a, 0x75, 0x6d, 0x61, 0x64, 0x61, + 0x20, 0x49, 0x12, 0x4a, 0x75, 0x6d, 0x61, 0x64, + 0x61, 0x20, 0x49, 0x49, 0x0a, 0x52, 0x61, 0x6a, + 0x61, 0x62, 0x0f, 0x53, 0x00, 0x68, 0x00, 0x61, + 0x00, 0xbb, 0x02, 0x62, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x0e, 0x52, 0x61, 0x6d, 0x61, 0x64, 0x61, + 0x6e, 0x0e, 0x53, 0x68, 0x61, 0x77, 0x77, 0x61, + 0x6c, 0x19, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, + 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x51, 0x00, + 0x69, 0x00, 0xbb, 0x02, 0x64, 0x00, 0x61, 0x00, + 0x68, 0x00, 0x19, 0x44, 0x00, 0x68, 0x00, 0x75, + 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x48, + 0x00, 0x69, 0x00, 0x6a, 0x00, 0x6a, 0x00, 0x61, + 0x00, 0x68, 0x00, 0x04, 0x41, 0x48, 0x1f, 0x54, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x36, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x36, 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x75, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1f, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x1d, 0x57, 0x00, 0x61, 0x00, 0x64, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x52, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x1d, 0x59, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1f, 0x4a, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, + 0x6b, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x2b, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x2d, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x2d, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x2a, 0x4a, 0x69, 0x6e, 0x67, + 0x6f, 0x2d, 0x6b, 0x65, 0x69, 0x75, 0x6e, 0x20, + 0x28, 0x37, 0x36, 0x37, 0x2d, 0x37, 0x37, 0x30, + 0x29, 0x1d, 0x48, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x1f, 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, 0x64, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x4d, 0x01, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, + 0x4a, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x61, + 0x00, 0x6a, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1f, 0x53, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x20, + 0x54, 0x65, 0x6e, 0x2d, 0x61, 0x6e, 0x20, 0x28, + 0x38, 0x35, 0x37, 0x2d, 0x38, 0x35, 0x39, 0x29, + 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, + 0x47, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1d, 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, + 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x34, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1b, 0x4c, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1d, 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x41, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, 0x4a, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x4a, 0x00, 0x69, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x29, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x27, 0x4a, 0x00, 0x69, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x45, 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4c, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x61, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x25, 0x4a, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x24, 0x54, 0x65, 0x6e, 0x2d, + 0x65, 0x69, 0x20, 0x28, 0x31, 0x31, 0x31, 0x30, + 0x2d, 0x31, 0x31, 0x31, 0x33, 0x29, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x44, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x45, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x6a, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x48, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x27, 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, + 0x4c, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x6d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x4a, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x59, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x75, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x29, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x21, 0x4a, 0x00, 0x4d, 0x01, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x27, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x75, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x29, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x74, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x29, 0x52, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x45, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4c, + 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x61, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x48, + 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x27, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x4c, + 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x45, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x27, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4a, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x27, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x61, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x41, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x4d, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x02, 0x54, 0x02, 0x53, 0x0a, 0x4d, 0x65, + 0x69, 0x6a, 0x69, 0x0d, 0x54, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x0b, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x0c, 0x48, 0x65, 0x69, 0x73, + 0x65, 0x69, 0x12, 0x46, 0x61, 0x72, 0x76, 0x61, + 0x72, 0x64, 0x69, 0x6e, 0x16, 0x4f, 0x72, 0x64, + 0x69, 0x62, 0x65, 0x68, 0x65, 0x73, 0x68, 0x74, + 0x0e, 0x4b, 0x68, 0x6f, 0x72, 0x64, 0x61, 0x64, + 0x06, 0x54, 0x69, 0x72, 0x0c, 0x4d, 0x6f, 0x72, + 0x64, 0x61, 0x64, 0x12, 0x53, 0x68, 0x61, 0x68, + 0x72, 0x69, 0x76, 0x61, 0x72, 0x08, 0x4d, 0x65, + 0x68, 0x72, 0x08, 0x41, 0x62, 0x61, 0x6e, 0x08, + 0x41, 0x7a, 0x61, 0x72, 0x06, 0x44, 0x65, 0x79, + 0x0c, 0x42, 0x61, 0x68, 0x6d, 0x61, 0x6e, 0x0c, + 0x45, 0x73, 0x66, 0x61, 0x6e, 0x64, 0x04, 0x41, + 0x50, 0x1e, 0x61, 0x6e, 0x74, 0x65, 0x73, 0x20, + 0x64, 0x65, 0x20, 0x52, 0x2e, 0x4f, 0x2e, 0x43, + 0x2e, 0x0c, 0x52, 0x2e, 0x4f, 0x2e, 0x43, 0x2e, + 0x12, 0x63, 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, + 0x72, 0x73, 0x08, 0x64, 0x61, 0x74, 0x65, 0x08, + 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, 0x75, 0x10, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0x1e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, + 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, + 0x26, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x6e, 0x65, 0x67, + 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, + 0x74, 0x65, 0x72, 0x6e, 0x0e, 0x64, 0x65, 0x63, + 0x69, 0x6d, 0x61, 0x6c, 0x24, 0x7b, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x3a, + 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, + 0x67, 0x6e, 0x7d, 0x7b, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x63, 0x79, 0x7d, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x10, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x2c, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0xa0, + 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x42, 0x7b, 0x6d, + 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0xa0, 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, + 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x0e, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x10, + 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, + 0x02, 0x2e, 0x02, 0x2c, 0x0a, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x06, 0x4e, 0x61, 0x4e, 0x06, 0x6e, + 0x61, 0x6e, 0x02, 0x2b, 0x10, 0x70, 0x6c, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, 0x2d, 0x12, + 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x02, 0x25, 0x16, 0x70, 0x65, 0x72, 0x63, + 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x03, + 0x1e, 0x22, 0x10, 0x69, 0x6e, 0x66, 0x69, 0x6e, + 0x69, 0x74, 0x79, 0x0e, 0x73, 0x79, 0x6d, 0x62, + 0x6f, 0x6c, 0x73, 0x03, 0xa7, 0x20, 0x06, 0x45, + 0x53, 0x50, 0x02, 0xa5, 0x06, 0x4a, 0x50, 0x59, + 0x02, 0x24, 0x06, 0x55, 0x53, 0x44, 0x08, 0x43, + 0x46, 0x50, 0x46, 0x06, 0x58, 0x50, 0x46, 0x14, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, + 0x65, 0x73, 0x58, 0x6e, 0x6f, 0x64, 0x65, 0x5f, + 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, + 0x69, 0x6e, 0x74, 0x6c, 0x2f, 0x6c, 0x6f, 0x63, + 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, + 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x70, 0x2f, 0x65, + 0x73, 0x2d, 0x55, 0x53, 0x2e, 0x6a, 0x73, 0x0d, + 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, + 0x27, 0x00, 0x89, 0x01, 0xac, 0x6a, 0x01, 0xa0, + 0x01, 0x00, 0x00, 0x00, 0x39, 0xd0, 0x00, 0x00, + 0x00, 0x43, 0xd1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd2, 0x00, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd4, 0x00, 0x00, 0x00, 0x04, + 0xd5, 0x00, 0x00, 0x00, 0x04, 0xd6, 0x00, 0x00, + 0x00, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x04, 0xd8, + 0x00, 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, 0x00, + 0x04, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdb, 0x00, + 0x00, 0x00, 0x04, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0xdd, 0x00, 0x00, 0x00, 0x04, 0xde, 0x00, 0x00, + 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, 0x04, 0xe0, + 0x00, 0x00, 0x00, 0x04, 0xe1, 0x00, 0x00, 0x00, + 0x04, 0xe2, 0x00, 0x00, 0x00, 0x26, 0x0f, 0x00, + 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x0a, 0x4d, 0xe4, + 0x00, 0x00, 0x00, 0x0a, 0x4d, 0xe5, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, + 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x04, 0xe9, + 0x00, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xec, 0x00, 0x00, 0x00, + 0x4d, 0xec, 0x00, 0x00, 0x00, 0x04, 0xed, 0x00, + 0x00, 0x00, 0x4d, 0xee, 0x00, 0x00, 0x00, 0x04, + 0xef, 0x00, 0x00, 0x00, 0x4d, 0xf0, 0x00, 0x00, + 0x00, 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, 0xf2, + 0x00, 0x00, 0x00, 0x04, 0xf3, 0x00, 0x00, 0x00, + 0x4d, 0xf4, 0x00, 0x00, 0x00, 0x04, 0xf5, 0x00, + 0x00, 0x00, 0x4d, 0xf6, 0x00, 0x00, 0x00, 0x04, + 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xf8, 0x00, 0x00, + 0x00, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0xfa, + 0x00, 0x00, 0x00, 0x04, 0xfb, 0x00, 0x00, 0x00, + 0x4d, 0xfc, 0x00, 0x00, 0x00, 0x04, 0xfd, 0x00, + 0x00, 0x00, 0x4d, 0xfe, 0x00, 0x00, 0x00, 0x04, + 0xff, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x01, 0x00, + 0x00, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0x02, + 0x01, 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, 0x00, + 0x4d, 0x04, 0x01, 0x00, 0x00, 0x04, 0x05, 0x01, + 0x00, 0x00, 0x4d, 0x06, 0x01, 0x00, 0x00, 0x04, + 0x07, 0x01, 0x00, 0x00, 0x4d, 0x08, 0x01, 0x00, + 0x00, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0x0a, + 0x01, 0x00, 0x00, 0x04, 0x0b, 0x01, 0x00, 0x00, + 0x4d, 0x0c, 0x01, 0x00, 0x00, 0x04, 0x0d, 0x01, + 0x00, 0x00, 0x4d, 0x0e, 0x01, 0x00, 0x00, 0x04, + 0x0f, 0x01, 0x00, 0x00, 0x4d, 0x10, 0x01, 0x00, + 0x00, 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, 0x12, + 0x01, 0x00, 0x00, 0x04, 0x13, 0x01, 0x00, 0x00, + 0x4d, 0x14, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x4d, 0x16, 0x01, 0x00, 0x00, 0x04, + 0x17, 0x01, 0x00, 0x00, 0x4d, 0x18, 0x01, 0x00, + 0x00, 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, 0x1a, + 0x01, 0x00, 0x00, 0x04, 0x1b, 0x01, 0x00, 0x00, + 0x4d, 0x1c, 0x01, 0x00, 0x00, 0x04, 0x1d, 0x01, + 0x00, 0x00, 0x4d, 0x1e, 0x01, 0x00, 0x00, 0x04, + 0x1f, 0x01, 0x00, 0x00, 0x4d, 0x20, 0x01, 0x00, + 0x00, 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, 0x22, + 0x01, 0x00, 0x00, 0x04, 0x23, 0x01, 0x00, 0x00, + 0x4d, 0x24, 0x01, 0x00, 0x00, 0x04, 0x21, 0x01, + 0x00, 0x00, 0x4d, 0x25, 0x01, 0x00, 0x00, 0x04, + 0x21, 0x01, 0x00, 0x00, 0x4d, 0x26, 0x01, 0x00, + 0x00, 0x04, 0x27, 0x01, 0x00, 0x00, 0x4d, 0x28, + 0x01, 0x00, 0x00, 0x04, 0x29, 0x01, 0x00, 0x00, + 0x4d, 0x2a, 0x01, 0x00, 0x00, 0x04, 0x2b, 0x01, + 0x00, 0x00, 0x4d, 0x2c, 0x01, 0x00, 0x00, 0x04, + 0x2d, 0x01, 0x00, 0x00, 0x4d, 0x2e, 0x01, 0x00, + 0x00, 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, 0x30, + 0x01, 0x00, 0x00, 0x04, 0x31, 0x01, 0x00, 0x00, + 0x4d, 0x32, 0x01, 0x00, 0x00, 0x04, 0x33, 0x01, + 0x00, 0x00, 0x4d, 0x34, 0x01, 0x00, 0x00, 0x04, + 0x35, 0x01, 0x00, 0x00, 0x4d, 0x35, 0x01, 0x00, + 0x00, 0x04, 0x36, 0x01, 0x00, 0x00, 0x4d, 0x37, + 0x01, 0x00, 0x00, 0x04, 0x38, 0x01, 0x00, 0x00, + 0x4d, 0x39, 0x01, 0x00, 0x00, 0x04, 0x3a, 0x01, + 0x00, 0x00, 0x4d, 0x3b, 0x01, 0x00, 0x00, 0x04, + 0x36, 0x01, 0x00, 0x00, 0x4d, 0x3c, 0x01, 0x00, + 0x00, 0x04, 0x3d, 0x01, 0x00, 0x00, 0x4d, 0x3e, + 0x01, 0x00, 0x00, 0x04, 0x3f, 0x01, 0x00, 0x00, + 0x4d, 0x40, 0x01, 0x00, 0x00, 0x04, 0x41, 0x01, + 0x00, 0x00, 0x4d, 0x42, 0x01, 0x00, 0x00, 0x04, + 0x3d, 0x01, 0x00, 0x00, 0x4d, 0x43, 0x01, 0x00, + 0x00, 0x04, 0x3f, 0x01, 0x00, 0x00, 0x4d, 0x44, + 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, + 0x4d, 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x4d, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x4d, 0x4a, 0x01, 0x00, + 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x4d, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x3f, 0x01, 0x00, 0x00, 0x4d, 0x44, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x4d, 0x40, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x4d, 0x39, 0x01, 0x00, 0x00, 0x4d, + 0x50, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x4d, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, 0x10, + 0x01, 0x00, 0x00, 0x04, 0x0b, 0x01, 0x00, 0x00, + 0x4d, 0x0c, 0x01, 0x00, 0x00, 0x4d, 0x55, 0x01, + 0x00, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x0b, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0xec, 0x00, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x78, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xec, 0x00, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, + 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, + 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, + 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, + 0x04, 0x87, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x88, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x89, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x89, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x89, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x8a, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x8b, 0x01, 0x00, 0x00, 0x4d, 0x8c, 0x01, + 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x4d, + 0x8e, 0x01, 0x00, 0x00, 0x4d, 0x8f, 0x01, 0x00, + 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x00, 0xbe, 0x01, 0xbe, 0x02, 0xbe, 0x03, + 0xbe, 0x04, 0xbe, 0x05, 0xbe, 0x06, 0xbe, 0x07, + 0xbe, 0x08, 0xbe, 0x09, 0xbe, 0x0a, 0xbe, 0x0b, + 0x26, 0x0c, 0x00, 0x4d, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, + 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, + 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, + 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, + 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, + 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, + 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, + 0x9b, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, + 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, + 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, + 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, + 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, + 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, + 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, + 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x78, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xec, + 0x00, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, + 0x80, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, + 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, + 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, + 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, + 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x88, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x8b, 0x01, + 0x00, 0x00, 0x4d, 0x8c, 0x01, 0x00, 0x00, 0x04, + 0x8d, 0x01, 0x00, 0x00, 0x4d, 0x8e, 0x01, 0x00, + 0x00, 0x4d, 0x8f, 0x01, 0x00, 0x00, 0x4d, 0xd6, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x0c, 0xbe, + 0x0d, 0xbe, 0x0e, 0xbe, 0x0f, 0xbe, 0x10, 0xbe, + 0x11, 0xbe, 0x12, 0xbe, 0x13, 0xbe, 0x14, 0xbe, + 0x15, 0xbe, 0x16, 0xbe, 0x17, 0xbe, 0x18, 0x26, + 0x0d, 0x00, 0x4d, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, + 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, + 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, + 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, + 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, + 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, + 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, + 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, + 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, + 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, + 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, + 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, + 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, + 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, + 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xec, 0x00, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, + 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x81, 0x01, + 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, + 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, + 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x88, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xa9, + 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, + 0xaa, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x8a, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x4d, + 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, + 0x00, 0x4d, 0x8e, 0x01, 0x00, 0x00, 0x4d, 0x8f, + 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x19, 0xbe, 0x1a, 0xbe, 0x1b, + 0xbe, 0x1c, 0xbe, 0x1d, 0xbe, 0x1e, 0xbe, 0x1f, + 0xbe, 0x20, 0xbe, 0x21, 0xbe, 0x22, 0xbe, 0x23, + 0xbe, 0x24, 0x26, 0x0c, 0x00, 0x4d, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, + 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, + 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, + 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, + 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, + 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, + 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, + 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x90, + 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, + 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, + 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, + 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, + 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, + 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, + 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xec, 0x00, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, + 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, + 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x88, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x8b, 0x01, 0x00, 0x00, 0x4d, 0x8c, 0x01, 0x00, + 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x4d, 0x8e, + 0x01, 0x00, 0x00, 0x4d, 0x8f, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x25, 0xbe, 0x26, 0xbe, 0x27, 0xbe, 0x28, 0xbe, + 0x29, 0xbe, 0x2a, 0xbe, 0x2b, 0xbe, 0x2c, 0xbe, + 0x2d, 0xbe, 0x2e, 0xbe, 0x2f, 0xbe, 0x30, 0xbe, + 0x31, 0x26, 0x0d, 0x00, 0x4d, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, + 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, + 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, + 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, + 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, + 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, + 0x01, 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, + 0x04, 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, + 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, + 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, + 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, + 0x04, 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, + 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, 0x04, + 0xb4, 0x01, 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, + 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb7, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xec, 0x00, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, + 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x88, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, + 0xaa, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, + 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x8a, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x8b, 0x01, 0x00, + 0x00, 0x4d, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, + 0x01, 0x00, 0x00, 0x4d, 0x8e, 0x01, 0x00, 0x00, + 0x4d, 0x8f, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x32, 0xbe, 0x33, + 0xbe, 0x34, 0xbe, 0x35, 0xbe, 0x36, 0xbe, 0x37, + 0xbe, 0x38, 0xbe, 0x39, 0xbe, 0x3a, 0xbe, 0x3b, + 0xbe, 0x3c, 0xbe, 0x3d, 0xbe, 0x3e, 0x26, 0x0d, + 0x00, 0x4d, 0x5f, 0x01, 0x00, 0x00, 0x04, 0xab, + 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, + 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, + 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, + 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, + 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, 0xb3, + 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, 0x00, + 0x04, 0xb5, 0x01, 0x00, 0x00, 0x04, 0xb6, 0x01, + 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, + 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, 0xae, + 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, + 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, + 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, + 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, + 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, 0x04, 0xb6, + 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x78, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xec, + 0x00, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, + 0x80, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, + 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, + 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, + 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, + 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x88, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xa9, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xa9, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x8a, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x4d, + 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, + 0x00, 0x4d, 0x8e, 0x01, 0x00, 0x00, 0x4d, 0x8f, + 0x01, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x3f, 0xbe, 0x40, 0xbe, 0x41, + 0xbe, 0x42, 0xbe, 0x43, 0xbe, 0x44, 0xbe, 0x45, + 0xbe, 0x46, 0xbe, 0x47, 0xbe, 0x48, 0xbe, 0x49, + 0xbe, 0x4a, 0x26, 0x0c, 0x00, 0x4d, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, + 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, + 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, + 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, + 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, + 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, + 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, + 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x90, + 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, + 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, + 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, + 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, + 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, + 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, + 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xec, 0x00, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, + 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, + 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x88, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, + 0x04, 0xaa, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x8a, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x8b, 0x01, 0x00, 0x00, + 0x4d, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, + 0x00, 0x00, 0x4d, 0x8e, 0x01, 0x00, 0x00, 0x4d, + 0x8f, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0xec, 0x00, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x78, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xec, 0x00, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x88, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xb8, 0x01, 0x00, + 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, + 0x01, 0x00, 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, + 0x26, 0x04, 0x00, 0x4d, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0xb8, 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, + 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, 0x04, + 0xbb, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, + 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, 0x04, 0xbe, + 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, + 0x26, 0x04, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x8a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x8b, + 0x01, 0x00, 0x00, 0x4d, 0x8c, 0x01, 0x00, 0x00, + 0x04, 0x8d, 0x01, 0x00, 0x00, 0x4d, 0x8e, 0x01, + 0x00, 0x00, 0x4d, 0x8f, 0x01, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x4b, + 0xbe, 0x4c, 0xbe, 0x4d, 0xbe, 0x4e, 0xbe, 0x4f, + 0xbe, 0x50, 0xbe, 0x51, 0xbe, 0x52, 0xbe, 0x53, + 0xbe, 0x54, 0xbe, 0x55, 0xbe, 0x56, 0xbe, 0x57, + 0xbe, 0x58, 0x26, 0x0e, 0x00, 0x4d, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, 0x04, + 0xc1, 0x01, 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, + 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, 0x04, 0xc4, + 0x01, 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, + 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, + 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, + 0xc9, 0x01, 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, + 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, + 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, + 0x26, 0x0e, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xc0, 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, + 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, 0x00, 0x04, + 0xc3, 0x01, 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, + 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, + 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, + 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, + 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, 0x04, + 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, + 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, 0x26, 0x0e, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x78, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xec, 0x00, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, + 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, + 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, + 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, + 0x04, 0x87, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x88, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x8b, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x8b, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x8b, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x8a, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x8b, 0x01, 0x00, 0x00, 0x4d, 0x8c, 0x01, + 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x4d, + 0x8e, 0x01, 0x00, 0x00, 0x4d, 0x8f, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x59, 0xbe, 0x5a, 0xbe, 0x5b, 0xbe, 0x5c, + 0xbe, 0x5d, 0xbe, 0x5e, 0xbe, 0x5f, 0xbe, 0x60, + 0xbe, 0x61, 0xbe, 0x62, 0xbe, 0x63, 0xbe, 0x64, + 0x26, 0x0c, 0x00, 0x4d, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0xce, 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, + 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, + 0xd1, 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, + 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, + 0x01, 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, + 0x04, 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, + 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, + 0xd9, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, + 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, + 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, + 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, + 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, + 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, + 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, 0xd8, + 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x78, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xec, + 0x00, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, + 0x80, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, + 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, + 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, + 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, + 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x88, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xda, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xda, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x8a, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x4d, + 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, + 0x00, 0x4d, 0x8e, 0x01, 0x00, 0x00, 0x4d, 0x8f, + 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x65, 0xbe, 0x66, 0xbe, 0x67, + 0xbe, 0x68, 0xbe, 0x69, 0xbe, 0x6a, 0xbe, 0x6b, + 0xbe, 0x6c, 0xbe, 0x6d, 0xbe, 0x6e, 0xbe, 0x6f, + 0xbe, 0x70, 0x26, 0x0c, 0x00, 0x4d, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, + 0xdc, 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, + 0x00, 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, + 0x01, 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, + 0x04, 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, + 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, + 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, + 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe7, + 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, + 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, + 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, + 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, + 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, + 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, + 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xec, 0x00, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, + 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, + 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x88, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xf3, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x8a, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x8b, 0x01, 0x00, + 0x00, 0x4d, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, + 0x01, 0x00, 0x00, 0x4d, 0x8e, 0x01, 0x00, 0x00, + 0x4d, 0x8f, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x71, 0xbe, 0x72, + 0xbe, 0x73, 0xbe, 0x74, 0xbe, 0x75, 0xbe, 0x76, + 0xbe, 0x77, 0xbe, 0x78, 0xbe, 0x79, 0xbe, 0x7a, + 0xbe, 0x7b, 0xbe, 0x7c, 0x26, 0x0c, 0x00, 0x4d, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, 0x00, + 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, 0x04, 0xdd, + 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, 0x00, + 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, 0xe0, 0x01, + 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, 0x00, 0x04, + 0xe2, 0x01, 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, + 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, + 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, + 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, + 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, + 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, + 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, + 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, + 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, + 0xf2, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xec, 0x00, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, + 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, + 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, + 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x88, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xf3, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x5f, 0x01, 0x00, 0x00, 0x04, 0xf3, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x8a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x8b, + 0x01, 0x00, 0x00, 0x4d, 0x8c, 0x01, 0x00, 0x00, + 0x04, 0x8d, 0x01, 0x00, 0x00, 0x4d, 0x8e, 0x01, + 0x00, 0x00, 0x4d, 0x8f, 0x01, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0xec, 0x00, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xec, 0x00, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, + 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, + 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x88, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, + 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, + 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, + 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, + 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, + 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, 0x01, 0x00, + 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x04, 0xff, + 0x01, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, + 0x04, 0x01, 0x02, 0x00, 0x00, 0x04, 0x02, 0x02, + 0x00, 0x00, 0x04, 0x03, 0x02, 0x00, 0x00, 0x04, + 0x04, 0x02, 0x00, 0x00, 0x04, 0x05, 0x02, 0x00, + 0x00, 0x04, 0x06, 0x02, 0x00, 0x00, 0x04, 0x07, + 0x02, 0x00, 0x00, 0x04, 0x08, 0x02, 0x00, 0x00, + 0x04, 0x09, 0x02, 0x00, 0x00, 0x04, 0x0a, 0x02, + 0x00, 0x00, 0x04, 0x0b, 0x02, 0x00, 0x00, 0x04, + 0x0c, 0x02, 0x00, 0x00, 0x04, 0x0d, 0x02, 0x00, + 0x00, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x04, 0x0f, + 0x02, 0x00, 0x00, 0x04, 0x10, 0x02, 0x00, 0x00, + 0x04, 0x11, 0x02, 0x00, 0x00, 0x04, 0x12, 0x02, + 0x00, 0x00, 0x04, 0x13, 0x02, 0x00, 0x00, 0x26, + 0x20, 0x00, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, + 0x20, 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, + 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0x16, + 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, + 0x04, 0x17, 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, + 0x00, 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, + 0x24, 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, + 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0x1a, + 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, + 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, + 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, + 0x28, 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, + 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0x1e, + 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, + 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, + 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, + 0x2c, 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, + 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0x22, + 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, + 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, + 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, + 0x30, 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, + 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0x26, + 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, + 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, + 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, + 0x34, 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, + 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0x2a, + 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, + 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, + 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, + 0x38, 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, + 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0x2e, + 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, + 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, + 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, + 0x3c, 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, + 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x32, + 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, + 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, + 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, + 0x40, 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, + 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x36, + 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, + 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, + 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, + 0x44, 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, + 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x3a, + 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, + 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, + 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, + 0x48, 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, + 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x3e, + 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, + 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, + 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, + 0x4c, 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, + 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x42, + 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, + 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, + 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, + 0x50, 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, + 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x46, + 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, + 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, + 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, + 0x54, 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, + 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x4a, + 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, + 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, + 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, + 0x58, 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, + 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x4e, + 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, + 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, + 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, + 0x5c, 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, + 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x52, + 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, + 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, + 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, + 0x60, 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, + 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x56, + 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, + 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, + 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, + 0x64, 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, + 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x5a, + 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, + 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, + 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, + 0x68, 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, + 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x5e, + 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, + 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, + 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, + 0x6c, 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, + 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x62, + 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, + 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, + 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, + 0x70, 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, + 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x66, + 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, + 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, + 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, + 0x74, 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, + 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x6a, + 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, + 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, + 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, + 0x78, 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, + 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x6e, + 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, + 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, + 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, + 0x7c, 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, + 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x72, + 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, + 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, + 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, + 0x80, 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, + 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x76, + 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, + 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, + 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, + 0x84, 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, + 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x7a, + 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, + 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, + 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, + 0x88, 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, + 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x7e, + 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, + 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, + 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, + 0x8c, 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, + 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x82, + 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, + 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, + 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, + 0x90, 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, + 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x86, + 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, + 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, + 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, + 0x94, 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, + 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x8a, + 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, + 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, + 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, + 0x98, 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, + 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x8e, + 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, + 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, + 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, + 0x9c, 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, + 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x92, + 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, + 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, + 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, + 0xa0, 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, + 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x96, + 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, + 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, + 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, + 0xa4, 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, + 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x9a, + 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, + 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, + 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, + 0xa8, 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, + 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x9e, + 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, + 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, + 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, + 0xac, 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, + 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0xa2, + 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, + 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, + 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, + 0xb0, 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, + 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0xa6, + 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, + 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, + 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, + 0xb4, 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, + 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0xaa, + 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, + 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, + 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, + 0xb8, 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, + 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0xae, + 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, + 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, + 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, + 0xbc, 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, + 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0xb2, + 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, + 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, + 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, + 0xc0, 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, + 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0xb6, + 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, + 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, + 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, + 0xc4, 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, + 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0xba, + 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, + 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, + 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, + 0xc8, 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, + 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0xbe, + 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, + 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, + 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, + 0xcc, 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, + 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0xc2, + 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, + 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, + 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, + 0xd0, 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, + 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0xc6, + 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, + 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, + 0x00, 0x80, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, + 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0xca, + 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, + 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x80, 0x04, 0xcd, 0x02, 0x00, + 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0xce, + 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, + 0x04, 0xcf, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x80, 0x04, 0xd0, 0x02, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x80, 0x04, 0xd1, 0x02, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xd2, + 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, + 0x04, 0xd3, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x80, 0x04, 0xd4, 0x02, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x80, 0x04, 0xd5, 0x02, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xd6, + 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, + 0x04, 0xd7, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, + 0x00, 0x80, 0x04, 0xd8, 0x02, 0x00, 0x00, 0x4d, + 0xe4, 0x00, 0x00, 0x80, 0x04, 0xd9, 0x02, 0x00, + 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0xda, + 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, + 0x04, 0xdb, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x80, 0x04, 0x20, 0x01, 0x00, 0x00, 0x4d, + 0xe8, 0x00, 0x00, 0x80, 0x04, 0xdc, 0x02, 0x00, + 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0xdd, + 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, + 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x80, 0x4d, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, + 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, + 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, + 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, + 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, + 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, 0x01, 0x00, + 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x04, 0xff, + 0x01, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, + 0x04, 0x01, 0x02, 0x00, 0x00, 0x04, 0x02, 0x02, + 0x00, 0x00, 0x04, 0x03, 0x02, 0x00, 0x00, 0x04, + 0x04, 0x02, 0x00, 0x00, 0x04, 0x05, 0x02, 0x00, + 0x00, 0x04, 0x06, 0x02, 0x00, 0x00, 0x04, 0x07, + 0x02, 0x00, 0x00, 0x04, 0x08, 0x02, 0x00, 0x00, + 0x04, 0x09, 0x02, 0x00, 0x00, 0x04, 0x0a, 0x02, + 0x00, 0x00, 0x04, 0x0b, 0x02, 0x00, 0x00, 0x04, + 0x0c, 0x02, 0x00, 0x00, 0x04, 0x0d, 0x02, 0x00, + 0x00, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x04, 0x0f, + 0x02, 0x00, 0x00, 0x04, 0x10, 0x02, 0x00, 0x00, + 0x04, 0x11, 0x02, 0x00, 0x00, 0x04, 0x12, 0x02, + 0x00, 0x00, 0x04, 0x13, 0x02, 0x00, 0x00, 0x26, + 0x20, 0x00, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, + 0x20, 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, + 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0x16, + 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, + 0x04, 0x17, 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, + 0x00, 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, + 0x24, 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, + 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0x1a, + 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, + 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, + 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, + 0x28, 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, + 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0x1e, + 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, + 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, + 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, + 0x2c, 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, + 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0x22, + 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, + 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, + 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, + 0x30, 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, + 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0x26, + 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, + 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, + 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, + 0x34, 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, + 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0x2a, + 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, + 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, + 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, + 0x38, 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, + 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0x2e, + 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, + 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, + 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, + 0x3c, 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, + 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x32, + 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, + 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, + 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, + 0x40, 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, + 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x36, + 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, + 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, + 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, + 0x44, 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, + 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x3a, + 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, + 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, + 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, + 0x48, 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, + 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x3e, + 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, + 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, + 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, + 0x4c, 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, + 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x42, + 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, + 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, + 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, + 0x50, 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, + 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x46, + 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, + 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, + 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, + 0x54, 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, + 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x4a, + 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, + 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, + 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, + 0x58, 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, + 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x4e, + 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, + 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, + 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, + 0x5c, 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, + 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x52, + 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, + 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, + 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, + 0x60, 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, + 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x56, + 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, + 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, + 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, + 0x64, 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, + 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x5a, + 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, + 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, + 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, + 0x68, 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, + 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x5e, + 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, + 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, + 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, + 0x6c, 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, + 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x62, + 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, + 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, + 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, + 0x70, 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, + 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x66, + 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, + 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, + 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, + 0x74, 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, + 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x6a, + 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, + 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, + 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, + 0x78, 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, + 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x6e, + 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, + 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, + 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, + 0x7c, 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, + 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x72, + 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, + 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, + 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, + 0x80, 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, + 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x76, + 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, + 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, + 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, + 0x84, 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, + 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x7a, + 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, + 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, + 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, + 0x88, 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, + 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x7e, + 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, + 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, + 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, + 0x8c, 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, + 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x82, + 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, + 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, + 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, + 0x90, 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, + 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x86, + 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, + 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, + 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, + 0x94, 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, + 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x8a, + 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, + 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, + 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, + 0x98, 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, + 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x8e, + 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, + 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, + 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, + 0x9c, 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, + 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x92, + 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, + 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, + 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, + 0xa0, 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, + 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x96, + 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, + 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, + 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, + 0xa4, 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, + 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x9a, + 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, + 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, + 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, + 0xa8, 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, + 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x9e, + 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, + 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, + 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, + 0xac, 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, + 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0xa2, + 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, + 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, + 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, + 0xb0, 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, + 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0xa6, + 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, + 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, + 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, + 0xb4, 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, + 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0xaa, + 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, + 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, + 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, + 0xb8, 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, + 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0xae, + 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, + 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, + 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, + 0xbc, 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, + 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0xb2, + 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, + 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, + 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, + 0xc0, 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, + 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0xb6, + 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, + 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, + 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, + 0xc4, 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, + 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0xba, + 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, + 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, + 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, + 0xc8, 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, + 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0xbe, + 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, + 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, + 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, + 0xcc, 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, + 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0xc2, + 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, + 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, + 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, + 0xd0, 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, + 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0xc6, + 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, + 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, + 0x00, 0x80, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, + 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0xca, + 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, + 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x80, 0x04, 0xcd, 0x02, 0x00, + 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0xce, + 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, + 0x04, 0xcf, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x80, 0x04, 0xd0, 0x02, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x80, 0x04, 0xd1, 0x02, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xd2, + 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, + 0x04, 0xd3, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x80, 0x04, 0xd4, 0x02, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x80, 0x04, 0xd5, 0x02, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xd6, + 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, + 0x04, 0xd7, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, + 0x00, 0x80, 0x04, 0xd8, 0x02, 0x00, 0x00, 0x4d, + 0xe4, 0x00, 0x00, 0x80, 0x04, 0xd9, 0x02, 0x00, + 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0xda, + 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, + 0x04, 0xdb, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x80, 0x04, 0xde, 0x02, 0x00, 0x00, 0x4d, + 0xe8, 0x00, 0x00, 0x80, 0x04, 0xdf, 0x02, 0x00, + 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0xe0, + 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, + 0x04, 0xe1, 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x80, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, + 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, + 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, + 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, + 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, + 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, 0x01, 0x00, + 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x04, 0xff, + 0x01, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, + 0x04, 0x01, 0x02, 0x00, 0x00, 0x04, 0x02, 0x02, + 0x00, 0x00, 0x04, 0x03, 0x02, 0x00, 0x00, 0x04, + 0x04, 0x02, 0x00, 0x00, 0x04, 0x05, 0x02, 0x00, + 0x00, 0x04, 0x06, 0x02, 0x00, 0x00, 0x04, 0x07, + 0x02, 0x00, 0x00, 0x04, 0x08, 0x02, 0x00, 0x00, + 0x04, 0x09, 0x02, 0x00, 0x00, 0x04, 0x0a, 0x02, + 0x00, 0x00, 0x04, 0x0b, 0x02, 0x00, 0x00, 0x04, + 0x0c, 0x02, 0x00, 0x00, 0x04, 0x0d, 0x02, 0x00, + 0x00, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x04, 0x0f, + 0x02, 0x00, 0x00, 0x04, 0x10, 0x02, 0x00, 0x00, + 0x04, 0x11, 0x02, 0x00, 0x00, 0x04, 0x12, 0x02, + 0x00, 0x00, 0x04, 0x13, 0x02, 0x00, 0x00, 0x26, + 0x20, 0x00, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, + 0x20, 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, + 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0x16, + 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, + 0x04, 0x17, 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, + 0x00, 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, + 0x24, 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, + 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0x1a, + 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, + 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, + 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, + 0x28, 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, + 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0x1e, + 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, + 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, + 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, + 0x2c, 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, + 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0x22, + 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, + 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, + 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, + 0x30, 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, + 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0x26, + 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, + 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, + 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, + 0x34, 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, + 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0x2a, + 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, + 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, + 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, + 0x38, 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, + 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0x2e, + 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, + 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, + 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, + 0x3c, 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, + 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x32, + 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, + 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, + 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, + 0x40, 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, + 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x36, + 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, + 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, + 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, + 0x44, 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, + 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x3a, + 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, + 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, + 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, + 0x48, 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, + 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x3e, + 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, + 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, + 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, + 0x4c, 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, + 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x42, + 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, + 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, + 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, + 0x50, 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, + 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x46, + 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, + 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, + 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, + 0x54, 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, + 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x4a, + 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, + 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, + 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, + 0x58, 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, + 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x4e, + 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, + 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, + 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, + 0x5c, 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, + 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x52, + 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, + 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, + 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, + 0x60, 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, + 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x56, + 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, + 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, + 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, + 0x64, 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, + 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x5a, + 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, + 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, + 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, + 0x68, 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, + 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x5e, + 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, + 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, + 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, + 0x6c, 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, + 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x62, + 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, + 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, + 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, + 0x70, 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, + 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x66, + 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, + 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, + 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, + 0x74, 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, + 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x6a, + 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, + 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, + 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, + 0x78, 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, + 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x6e, + 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, + 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, + 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, + 0x7c, 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, + 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x72, + 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, + 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, + 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, + 0x80, 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, + 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x76, + 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, + 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, + 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, + 0x84, 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, + 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x7a, + 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, + 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, + 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, + 0x88, 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, + 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x7e, + 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, + 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, + 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, + 0x8c, 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, + 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x82, + 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, + 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, + 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, + 0x90, 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, + 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x86, + 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, + 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, + 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, + 0x94, 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, + 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x8a, + 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, + 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, + 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, + 0x98, 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, + 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x8e, + 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, + 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, + 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, + 0x9c, 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, + 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x92, + 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, + 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, + 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, + 0xa0, 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, + 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x96, + 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, + 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, + 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, + 0xa4, 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, + 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x9a, + 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, + 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, + 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, + 0xa8, 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, + 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x9e, + 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, + 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, + 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, + 0xac, 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, + 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0xa2, + 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, + 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, + 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, + 0xb0, 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, + 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0xa6, + 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, + 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, + 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, + 0xb4, 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, + 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0xaa, + 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, + 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, + 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, + 0xb8, 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, + 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0xae, + 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, + 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, + 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, + 0xbc, 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, + 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0xb2, + 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, + 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, + 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, + 0xc0, 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, + 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0xb6, + 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, + 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, + 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, + 0xc4, 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, + 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0xba, + 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, + 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, + 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, + 0xc8, 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, + 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0xbe, + 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, + 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, + 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, + 0xcc, 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, + 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0xc2, + 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, + 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, + 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, + 0xd0, 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, + 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0xc6, + 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, + 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, + 0x00, 0x80, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, + 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0xca, + 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, + 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x80, 0x04, 0xcd, 0x02, 0x00, + 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0xce, + 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, + 0x04, 0xcf, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x80, 0x04, 0xd0, 0x02, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x80, 0x04, 0xd1, 0x02, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xd2, + 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, + 0x04, 0xd3, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x80, 0x04, 0xd4, 0x02, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x80, 0x04, 0xd5, 0x02, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xd6, + 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, + 0x04, 0xd7, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, + 0x00, 0x80, 0x04, 0xd8, 0x02, 0x00, 0x00, 0x4d, + 0xe4, 0x00, 0x00, 0x80, 0x04, 0xd9, 0x02, 0x00, + 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0xda, + 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, + 0x04, 0xdb, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x80, 0x04, 0xde, 0x02, 0x00, 0x00, 0x4d, + 0xe8, 0x00, 0x00, 0x80, 0x04, 0xdf, 0x02, 0x00, + 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0xe0, + 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, + 0x04, 0xe1, 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x80, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x8a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x8b, 0x01, + 0x00, 0x00, 0x4d, 0x8c, 0x01, 0x00, 0x00, 0x04, + 0x8d, 0x01, 0x00, 0x00, 0x4d, 0x8e, 0x01, 0x00, + 0x00, 0x4d, 0x8f, 0x01, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x7d, 0xbe, + 0x7e, 0xbe, 0x7f, 0xbe, 0x80, 0xbe, 0x81, 0xbe, + 0x82, 0xbe, 0x83, 0xbe, 0x84, 0xbe, 0x85, 0xbe, + 0x86, 0xbe, 0x87, 0xbe, 0x88, 0x26, 0x0c, 0x00, + 0x4d, 0x5f, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x02, + 0x00, 0x00, 0x04, 0xe3, 0x02, 0x00, 0x00, 0x04, + 0xe4, 0x02, 0x00, 0x00, 0x04, 0xe5, 0x02, 0x00, + 0x00, 0x04, 0xe6, 0x02, 0x00, 0x00, 0x04, 0xe7, + 0x02, 0x00, 0x00, 0x04, 0xe8, 0x02, 0x00, 0x00, + 0x04, 0xe9, 0x02, 0x00, 0x00, 0x04, 0xea, 0x02, + 0x00, 0x00, 0x04, 0xeb, 0x02, 0x00, 0x00, 0x04, + 0xec, 0x02, 0x00, 0x00, 0x04, 0xed, 0x02, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xe2, 0x02, 0x00, 0x00, 0x04, 0xe3, + 0x02, 0x00, 0x00, 0x04, 0xe4, 0x02, 0x00, 0x00, + 0x04, 0xe5, 0x02, 0x00, 0x00, 0x04, 0xe6, 0x02, + 0x00, 0x00, 0x04, 0xe7, 0x02, 0x00, 0x00, 0x04, + 0xe8, 0x02, 0x00, 0x00, 0x04, 0xe9, 0x02, 0x00, + 0x00, 0x04, 0xea, 0x02, 0x00, 0x00, 0x04, 0xeb, + 0x02, 0x00, 0x00, 0x04, 0xec, 0x02, 0x00, 0x00, + 0x04, 0xed, 0x02, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x78, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xec, 0x00, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x88, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xee, 0x02, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0xee, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xee, 0x02, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x8a, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x8b, 0x01, 0x00, 0x00, 0x4d, 0x8c, 0x01, 0x00, + 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x4d, 0x8e, + 0x01, 0x00, 0x00, 0x4d, 0x8f, 0x01, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0xec, + 0x00, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xec, 0x00, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, + 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x88, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xef, 0x02, 0x00, 0x00, 0x04, 0xf0, 0x02, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0xef, 0x02, 0x00, 0x00, 0x04, + 0xf0, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xef, 0x02, 0x00, + 0x00, 0x04, 0xf0, 0x02, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x8a, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x8b, 0x01, 0x00, + 0x00, 0x4d, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, + 0x01, 0x00, 0x00, 0x4d, 0x8e, 0x01, 0x00, 0x00, + 0x4d, 0x8f, 0x01, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x00, 0x4d, 0xf1, 0x02, 0x00, 0x00, 0x4d, + 0xf2, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xf3, 0x02, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xf4, 0x02, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xf5, 0x02, 0x00, + 0x00, 0x4d, 0xf6, 0x02, 0x00, 0x00, 0x04, 0xf7, + 0x02, 0x00, 0x00, 0x4d, 0xf8, 0x02, 0x00, 0x00, + 0x4d, 0xf9, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xfa, + 0x02, 0x00, 0x00, 0x4d, 0xf6, 0x02, 0x00, 0x00, + 0x04, 0xfb, 0x02, 0x00, 0x00, 0x4d, 0xf8, 0x02, + 0x00, 0x00, 0x4d, 0xfc, 0x02, 0x00, 0x00, 0x0b, + 0x04, 0xfd, 0x02, 0x00, 0x00, 0x4d, 0xf6, 0x02, + 0x00, 0x00, 0x04, 0xfe, 0x02, 0x00, 0x00, 0x4d, + 0xf8, 0x02, 0x00, 0x00, 0x4d, 0xff, 0x02, 0x00, + 0x00, 0x4d, 0x00, 0x03, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x01, 0x03, 0x00, 0x00, 0x4d, 0xf9, 0x02, + 0x00, 0x00, 0x04, 0x02, 0x03, 0x00, 0x00, 0x4d, + 0x03, 0x03, 0x00, 0x00, 0x04, 0x04, 0x03, 0x00, + 0x00, 0x4d, 0x05, 0x03, 0x00, 0x00, 0x04, 0x06, + 0x03, 0x00, 0x00, 0x4d, 0x07, 0x03, 0x00, 0x00, + 0x04, 0x08, 0x03, 0x00, 0x00, 0x4d, 0x09, 0x03, + 0x00, 0x00, 0x04, 0x0a, 0x03, 0x00, 0x00, 0x4d, + 0x0b, 0x03, 0x00, 0x00, 0x04, 0x0c, 0x03, 0x00, + 0x00, 0x4d, 0x0d, 0x03, 0x00, 0x00, 0x4d, 0xf3, + 0x02, 0x00, 0x00, 0x4d, 0x0e, 0x03, 0x00, 0x00, + 0x0b, 0x04, 0x0f, 0x03, 0x00, 0x00, 0x4d, 0x10, + 0x03, 0x00, 0x00, 0x04, 0x11, 0x03, 0x00, 0x00, + 0x4d, 0x12, 0x03, 0x00, 0x00, 0x04, 0x13, 0x03, + 0x00, 0x00, 0x4d, 0x14, 0x03, 0x00, 0x00, 0x04, + 0x15, 0x03, 0x00, 0x00, 0x4d, 0x16, 0x03, 0x00, + 0x00, 0x4d, 0x17, 0x03, 0x00, 0x00, 0x4d, 0x45, + 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, 0xcc, 0x28, + 0xb0, 0x0c, 0x01, 0x00, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_et_size = 24767; + +const uint8_t intl_et[24767] = { + 0x01, 0xd3, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x65, 0x74, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x0e, + 0x7b, 0x31, 0x7d, 0x20, 0x7b, 0x30, 0x7d, 0x0a, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, 0x65, + 0x64, 0x69, 0x75, 0x6d, 0x08, 0x66, 0x75, 0x6c, + 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x02, 0x64, + 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, 0x08, 0x45, + 0x2c, 0x20, 0x64, 0x04, 0x45, 0x64, 0x10, 0x45, + 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x06, + 0x45, 0x68, 0x6d, 0x0e, 0x45, 0x20, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x06, 0x45, 0x48, 0x6d, 0x16, + 0x45, 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x2e, 0x73, + 0x73, 0x20, 0x61, 0x08, 0x45, 0x68, 0x6d, 0x73, + 0x14, 0x45, 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x2e, 0x73, 0x73, 0x08, 0x45, 0x48, 0x6d, 0x73, + 0x06, 0x79, 0x20, 0x47, 0x04, 0x47, 0x79, 0x0e, + 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x20, 0x47, 0x0a, + 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x14, 0x64, 0x2e, + 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x20, 0x47, + 0x0c, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x1c, + 0x45, 0x2c, 0x20, 0x64, 0x2e, 0x20, 0x4d, 0x4d, + 0x4d, 0x4d, 0x20, 0x79, 0x20, 0x47, 0x0e, 0x47, + 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x06, 0x68, + 0x20, 0x61, 0x02, 0x68, 0x04, 0x48, 0x48, 0x02, + 0x48, 0x0c, 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, + 0x04, 0x68, 0x6d, 0x0a, 0x48, 0x48, 0x3a, 0x6d, + 0x6d, 0x04, 0x48, 0x6d, 0x12, 0x68, 0x3a, 0x6d, + 0x6d, 0x2e, 0x73, 0x73, 0x20, 0x61, 0x06, 0x68, + 0x6d, 0x73, 0x0e, 0x48, 0x3a, 0x6d, 0x6d, 0x2e, + 0x73, 0x73, 0x06, 0x48, 0x6d, 0x73, 0x16, 0x68, + 0x3a, 0x6d, 0x6d, 0x2e, 0x73, 0x73, 0x20, 0x61, + 0x20, 0x76, 0x08, 0x68, 0x6d, 0x73, 0x76, 0x14, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x2e, 0x73, 0x73, + 0x20, 0x76, 0x08, 0x48, 0x6d, 0x73, 0x76, 0x10, + 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x20, 0x76, + 0x06, 0x68, 0x6d, 0x76, 0x0e, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x20, 0x76, 0x06, 0x48, 0x6d, 0x76, + 0x02, 0x4d, 0x06, 0x64, 0x2e, 0x4d, 0x04, 0x4d, + 0x64, 0x0c, 0x45, 0x2c, 0x20, 0x64, 0x2e, 0x4d, + 0x06, 0x4d, 0x45, 0x64, 0x08, 0x4d, 0x4d, 0x4d, + 0x4d, 0x06, 0x4d, 0x4d, 0x4d, 0x0c, 0x64, 0x2e, + 0x20, 0x4d, 0x4d, 0x4d, 0x08, 0x4d, 0x4d, 0x4d, + 0x64, 0x12, 0x45, 0x2c, 0x20, 0x64, 0x2e, 0x20, + 0x4d, 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x45, + 0x64, 0x0e, 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, + 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x14, + 0x45, 0x2c, 0x20, 0x64, 0x2e, 0x20, 0x4d, 0x4d, + 0x4d, 0x4d, 0x0c, 0x4d, 0x4d, 0x4d, 0x4d, 0x45, + 0x64, 0x0a, 0x6d, 0x6d, 0x2e, 0x73, 0x73, 0x08, + 0x6d, 0x6d, 0x73, 0x73, 0x04, 0x6d, 0x73, 0x02, + 0x79, 0x06, 0x4d, 0x2e, 0x79, 0x04, 0x79, 0x4d, + 0x0a, 0x64, 0x2e, 0x4d, 0x2e, 0x79, 0x06, 0x79, + 0x4d, 0x64, 0x10, 0x45, 0x2c, 0x20, 0x64, 0x2e, + 0x4d, 0x2e, 0x79, 0x08, 0x79, 0x4d, 0x45, 0x64, + 0x0a, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x08, 0x79, + 0x4d, 0x4d, 0x4d, 0x10, 0x64, 0x2e, 0x20, 0x4d, + 0x4d, 0x4d, 0x20, 0x79, 0x0a, 0x79, 0x4d, 0x4d, + 0x4d, 0x64, 0x18, 0x45, 0x2c, 0x20, 0x64, 0x2e, + 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0c, + 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0c, 0x4d, + 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0a, 0x79, 0x4d, + 0x4d, 0x4d, 0x4d, 0x0a, 0x51, 0x51, 0x51, 0x20, + 0x79, 0x08, 0x79, 0x51, 0x51, 0x51, 0x0c, 0x51, + 0x51, 0x51, 0x51, 0x20, 0x79, 0x0a, 0x79, 0x51, + 0x51, 0x51, 0x51, 0x20, 0x61, 0x76, 0x61, 0x69, + 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x73, 0x1e, 0x45, 0x45, 0x45, + 0x45, 0x2c, 0x20, 0x64, 0x2e, 0x20, 0x4d, 0x4d, + 0x4d, 0x4d, 0x20, 0x79, 0x14, 0x79, 0x4d, 0x4d, + 0x4d, 0x4d, 0x45, 0x45, 0x45, 0x45, 0x64, 0x12, + 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, + 0x79, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, + 0x10, 0x64, 0x64, 0x2e, 0x4d, 0x4d, 0x2e, 0x79, + 0x79, 0x16, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x73, 0x18, 0x48, 0x3a, + 0x6d, 0x6d, 0x2e, 0x73, 0x73, 0x20, 0x7a, 0x7a, + 0x7a, 0x7a, 0x12, 0x68, 0x6d, 0x6d, 0x73, 0x73, + 0x7a, 0x7a, 0x7a, 0x7a, 0x12, 0x48, 0x3a, 0x6d, + 0x6d, 0x2e, 0x73, 0x73, 0x20, 0x7a, 0x08, 0x68, + 0x6d, 0x73, 0x7a, 0x08, 0x48, 0x3a, 0x6d, 0x6d, + 0x16, 0x74, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x73, 0x0e, 0x66, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x73, 0x02, 0x4a, 0x02, 0x56, + 0x02, 0x41, 0x02, 0x53, 0x02, 0x4f, 0x02, 0x4e, + 0x02, 0x44, 0x0c, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x08, 0x6a, 0x61, 0x61, 0x6e, 0x0a, 0x76, + 0x65, 0x65, 0x62, 0x72, 0x0a, 0x6d, 0xe4, 0x72, + 0x74, 0x73, 0x06, 0x61, 0x70, 0x72, 0x06, 0x6d, + 0x61, 0x69, 0x0a, 0x6a, 0x75, 0x75, 0x6e, 0x69, + 0x0a, 0x6a, 0x75, 0x75, 0x6c, 0x69, 0x06, 0x61, + 0x75, 0x67, 0x08, 0x73, 0x65, 0x70, 0x74, 0x06, + 0x6f, 0x6b, 0x74, 0x06, 0x6e, 0x6f, 0x76, 0x08, + 0x64, 0x65, 0x74, 0x73, 0x0e, 0x6a, 0x61, 0x61, + 0x6e, 0x75, 0x61, 0x72, 0x10, 0x76, 0x65, 0x65, + 0x62, 0x72, 0x75, 0x61, 0x72, 0x0c, 0x61, 0x70, + 0x72, 0x69, 0x6c, 0x6c, 0x0c, 0x61, 0x75, 0x67, + 0x75, 0x73, 0x74, 0x12, 0x73, 0x65, 0x70, 0x74, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x10, 0x6f, 0x6b, + 0x74, 0x6f, 0x6f, 0x62, 0x65, 0x72, 0x10, 0x6e, + 0x6f, 0x76, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, + 0x64, 0x65, 0x74, 0x73, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x0c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x73, + 0x02, 0x50, 0x02, 0x54, 0x02, 0x4b, 0x02, 0x52, + 0x02, 0x4c, 0x10, 0x70, 0xfc, 0x68, 0x61, 0x70, + 0xe4, 0x65, 0x76, 0x12, 0x65, 0x73, 0x6d, 0x61, + 0x73, 0x70, 0xe4, 0x65, 0x76, 0x12, 0x74, 0x65, + 0x69, 0x73, 0x69, 0x70, 0xe4, 0x65, 0x76, 0x12, + 0x6b, 0x6f, 0x6c, 0x6d, 0x61, 0x70, 0xe4, 0x65, + 0x76, 0x12, 0x6e, 0x65, 0x6c, 0x6a, 0x61, 0x70, + 0xe4, 0x65, 0x76, 0x0a, 0x72, 0x65, 0x65, 0x64, + 0x65, 0x0e, 0x6c, 0x61, 0x75, 0x70, 0xe4, 0x65, + 0x76, 0x08, 0x64, 0x61, 0x79, 0x73, 0x04, 0x42, + 0x45, 0x08, 0x65, 0x72, 0x61, 0x73, 0x04, 0x41, + 0x4d, 0x04, 0x61, 0x6d, 0x04, 0x50, 0x4d, 0x04, + 0x70, 0x6d, 0x14, 0x64, 0x61, 0x79, 0x50, 0x65, + 0x72, 0x69, 0x6f, 0x64, 0x73, 0x06, 0x4d, 0x30, + 0x31, 0x06, 0x4d, 0x30, 0x32, 0x06, 0x4d, 0x30, + 0x33, 0x06, 0x4d, 0x30, 0x34, 0x06, 0x4d, 0x30, + 0x35, 0x06, 0x4d, 0x30, 0x36, 0x06, 0x4d, 0x30, + 0x37, 0x06, 0x4d, 0x30, 0x38, 0x06, 0x4d, 0x30, + 0x39, 0x06, 0x4d, 0x31, 0x30, 0x06, 0x4d, 0x31, + 0x31, 0x06, 0x4d, 0x31, 0x32, 0x08, 0x54, 0x6f, + 0x75, 0x74, 0x08, 0x42, 0x61, 0x62, 0x61, 0x0a, + 0x48, 0x61, 0x74, 0x6f, 0x72, 0x0a, 0x4b, 0x69, + 0x61, 0x68, 0x6b, 0x08, 0x54, 0x6f, 0x62, 0x61, + 0x0c, 0x41, 0x6d, 0x73, 0x68, 0x69, 0x72, 0x10, + 0x42, 0x61, 0x72, 0x61, 0x6d, 0x68, 0x61, 0x74, + 0x12, 0x42, 0x61, 0x72, 0x61, 0x6d, 0x6f, 0x75, + 0x64, 0x61, 0x0e, 0x42, 0x61, 0x73, 0x68, 0x61, + 0x6e, 0x73, 0x0a, 0x50, 0x61, 0x6f, 0x6e, 0x61, + 0x08, 0x45, 0x70, 0x65, 0x70, 0x0a, 0x4d, 0x65, + 0x73, 0x72, 0x61, 0x0a, 0x4e, 0x61, 0x73, 0x69, + 0x65, 0x08, 0x45, 0x52, 0x41, 0x30, 0x08, 0x45, + 0x52, 0x41, 0x31, 0x10, 0x4d, 0x65, 0x73, 0x6b, + 0x65, 0x72, 0x65, 0x6d, 0x0c, 0x54, 0x65, 0x6b, + 0x65, 0x6d, 0x74, 0x0a, 0x48, 0x65, 0x64, 0x61, + 0x72, 0x0c, 0x54, 0x61, 0x68, 0x73, 0x61, 0x73, + 0x06, 0x54, 0x65, 0x72, 0x0e, 0x59, 0x65, 0x6b, + 0x61, 0x74, 0x69, 0x74, 0x0e, 0x4d, 0x65, 0x67, + 0x61, 0x62, 0x69, 0x74, 0x0c, 0x4d, 0x69, 0x61, + 0x7a, 0x69, 0x61, 0x0c, 0x47, 0x65, 0x6e, 0x62, + 0x6f, 0x74, 0x08, 0x53, 0x65, 0x6e, 0x65, 0x0a, + 0x48, 0x61, 0x6d, 0x6c, 0x65, 0x0e, 0x4e, 0x65, + 0x68, 0x61, 0x73, 0x73, 0x65, 0x0e, 0x50, 0x61, + 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x06, 0x65, 0x4b, + 0x72, 0x06, 0x70, 0x4b, 0x72, 0x0a, 0x65, 0x2e, + 0x6d, 0x2e, 0x61, 0x0a, 0x6d, 0x2e, 0x61, 0x2e, + 0x6a, 0x1a, 0x65, 0x6e, 0x6e, 0x65, 0x20, 0x4b, + 0x72, 0x69, 0x73, 0x74, 0x75, 0x73, 0x74, 0x1e, + 0x70, 0xe4, 0x72, 0x61, 0x73, 0x74, 0x20, 0x4b, + 0x72, 0x69, 0x73, 0x74, 0x75, 0x73, 0x74, 0x2a, + 0x65, 0x6e, 0x6e, 0x65, 0x20, 0x6d, 0x65, 0x69, + 0x65, 0x20, 0x61, 0x6a, 0x61, 0x61, 0x72, 0x76, + 0x61, 0x6d, 0x69, 0x73, 0x74, 0x2c, 0x6d, 0x65, + 0x69, 0x65, 0x20, 0x61, 0x6a, 0x61, 0x61, 0x72, + 0x76, 0x61, 0x6d, 0x69, 0x73, 0x65, 0x20, 0x6a, + 0xe4, 0x72, 0x67, 0x69, 0x0c, 0x54, 0x69, 0x73, + 0x68, 0x72, 0x69, 0x0e, 0x48, 0x65, 0x73, 0x68, + 0x76, 0x61, 0x6e, 0x0c, 0x4b, 0x69, 0x73, 0x6c, + 0x65, 0x76, 0x0a, 0x54, 0x65, 0x76, 0x65, 0x74, + 0x0c, 0x53, 0x68, 0x65, 0x76, 0x61, 0x74, 0x0c, + 0x41, 0x64, 0x61, 0x72, 0x20, 0x49, 0x08, 0x41, + 0x64, 0x61, 0x72, 0x0a, 0x4e, 0x69, 0x73, 0x61, + 0x6e, 0x08, 0x49, 0x79, 0x61, 0x72, 0x0a, 0x53, + 0x69, 0x76, 0x61, 0x6e, 0x0a, 0x54, 0x61, 0x6d, + 0x75, 0x7a, 0x04, 0x41, 0x76, 0x08, 0x45, 0x6c, + 0x75, 0x6c, 0x0e, 0x41, 0x64, 0x61, 0x72, 0x20, + 0x49, 0x49, 0x0e, 0x43, 0x68, 0x61, 0x69, 0x74, + 0x72, 0x61, 0x10, 0x56, 0x61, 0x69, 0x73, 0x61, + 0x6b, 0x68, 0x61, 0x10, 0x4a, 0x79, 0x61, 0x69, + 0x73, 0x74, 0x68, 0x61, 0x0c, 0x41, 0x73, 0x61, + 0x64, 0x68, 0x61, 0x0e, 0x53, 0x72, 0x61, 0x76, + 0x61, 0x6e, 0x61, 0x0c, 0x42, 0x68, 0x61, 0x64, + 0x72, 0x61, 0x0c, 0x41, 0x73, 0x76, 0x69, 0x6e, + 0x61, 0x0e, 0x4b, 0x61, 0x72, 0x74, 0x69, 0x6b, + 0x61, 0x14, 0x41, 0x67, 0x72, 0x61, 0x68, 0x61, + 0x79, 0x61, 0x6e, 0x61, 0x0a, 0x50, 0x61, 0x75, + 0x73, 0x61, 0x0a, 0x4d, 0x61, 0x67, 0x68, 0x61, + 0x10, 0x50, 0x68, 0x61, 0x6c, 0x67, 0x75, 0x6e, + 0x61, 0x08, 0x53, 0x61, 0x6b, 0x61, 0x08, 0x4d, + 0x75, 0x68, 0x2e, 0x08, 0x53, 0x61, 0x66, 0x2e, + 0x0c, 0x52, 0x61, 0x62, 0x2e, 0x20, 0x49, 0x0e, + 0x52, 0x61, 0x62, 0x2e, 0x20, 0x49, 0x49, 0x0c, + 0x4a, 0x75, 0x6d, 0x2e, 0x20, 0x49, 0x0e, 0x4a, + 0x75, 0x6d, 0x2e, 0x20, 0x49, 0x49, 0x08, 0x52, + 0x61, 0x6a, 0x2e, 0x08, 0x53, 0x68, 0x61, 0x2e, + 0x08, 0x52, 0x61, 0x6d, 0x2e, 0x0a, 0x53, 0x68, + 0x61, 0x77, 0x2e, 0x11, 0x44, 0x00, 0x68, 0x00, + 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, + 0x51, 0x00, 0x2e, 0x00, 0x11, 0x44, 0x00, 0x68, + 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, + 0x00, 0x48, 0x00, 0x2e, 0x00, 0x10, 0x4d, 0x75, + 0x68, 0x61, 0x72, 0x72, 0x61, 0x6d, 0x0a, 0x53, + 0x61, 0x66, 0x61, 0x72, 0x0f, 0x52, 0x00, 0x61, + 0x00, 0x62, 0x00, 0x69, 0x00, 0xbb, 0x02, 0x20, + 0x00, 0x49, 0x00, 0x11, 0x52, 0x00, 0x61, 0x00, + 0x62, 0x00, 0x69, 0x00, 0xbb, 0x02, 0x20, 0x00, + 0x49, 0x00, 0x49, 0x00, 0x10, 0x4a, 0x75, 0x6d, + 0x61, 0x64, 0x61, 0x20, 0x49, 0x12, 0x4a, 0x75, + 0x6d, 0x61, 0x64, 0x61, 0x20, 0x49, 0x49, 0x0a, + 0x52, 0x61, 0x6a, 0x61, 0x62, 0x0f, 0x53, 0x00, + 0x68, 0x00, 0x61, 0x00, 0xbb, 0x02, 0x62, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x0e, 0x52, 0x61, 0x6d, + 0x61, 0x64, 0x61, 0x6e, 0x0e, 0x53, 0x68, 0x61, + 0x77, 0x77, 0x61, 0x6c, 0x19, 0x44, 0x00, 0x68, + 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, + 0x00, 0x51, 0x00, 0x69, 0x00, 0xbb, 0x02, 0x64, + 0x00, 0x61, 0x00, 0x68, 0x00, 0x19, 0x44, 0x00, + 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, + 0x2d, 0x00, 0x48, 0x00, 0x69, 0x00, 0x6a, 0x00, + 0x6a, 0x00, 0x61, 0x00, 0x68, 0x00, 0x04, 0x41, + 0x48, 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x36, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x36, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x36, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, + 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x1d, 0x57, 0x00, 0x61, 0x00, + 0x64, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x1f, 0x52, 0x00, 0x65, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, + 0x59, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x37, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x2d, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6d, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x2d, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x2b, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, 0x2d, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, 0x2a, 0x4a, + 0x69, 0x6e, 0x67, 0x6f, 0x2d, 0x6b, 0x65, 0x69, + 0x75, 0x6e, 0x20, 0x28, 0x37, 0x36, 0x37, 0x2d, + 0x37, 0x37, 0x30, 0x29, 0x1d, 0x48, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x38, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x1f, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x2d, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x2d, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x1f, 0x44, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1d, 0x4a, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, + 0x4b, 0x00, 0x61, 0x00, 0x6a, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1f, 0x53, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x20, 0x54, 0x65, 0x6e, 0x2d, 0x61, + 0x6e, 0x20, 0x28, 0x38, 0x35, 0x37, 0x2d, 0x38, + 0x35, 0x39, 0x29, 0x1f, 0x4a, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x21, 0x47, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x1f, 0x45, 0x00, 0x6e, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1b, 0x4c, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x1d, 0x41, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x1f, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, + 0x45, 0x00, 0x69, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, + 0x00, 0x73, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x39, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, + 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4d, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x35, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x27, 0x4a, 0x00, 0x69, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x29, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4c, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x4a, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, 0x24, 0x54, + 0x65, 0x6e, 0x2d, 0x65, 0x69, 0x20, 0x28, 0x31, + 0x31, 0x31, 0x30, 0x2d, 0x31, 0x31, 0x31, 0x33, + 0x29, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x44, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x48, 0x00, 0x65, 0x00, 0x69, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x27, 0x45, 0x00, 0x69, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x68, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, + 0x00, 0x61, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x41, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x69, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x59, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, + 0x4a, 0x00, 0x75, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x29, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x29, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, + 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x41, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x4d, + 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x27, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x75, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x29, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x29, 0x52, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x4e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x4c, 0x01, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6d, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x1f, 0x4b, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, + 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4c, + 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x74, 0x00, + 0x73, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x4d, 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x27, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x21, 0x4c, 0x01, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x21, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1f, + 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x72, 0x00, 0x65, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x62, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x27, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x48, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x65, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x41, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4d, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x0a, 0x4d, 0x65, 0x69, + 0x6a, 0x69, 0x0d, 0x54, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x0b, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x0c, 0x48, 0x65, 0x69, 0x73, 0x65, + 0x69, 0x12, 0x46, 0x61, 0x72, 0x76, 0x61, 0x72, + 0x64, 0x69, 0x6e, 0x16, 0x4f, 0x72, 0x64, 0x69, + 0x62, 0x65, 0x68, 0x65, 0x73, 0x68, 0x74, 0x0e, + 0x4b, 0x68, 0x6f, 0x72, 0x64, 0x61, 0x64, 0x06, + 0x54, 0x69, 0x72, 0x0c, 0x4d, 0x6f, 0x72, 0x64, + 0x61, 0x64, 0x12, 0x53, 0x68, 0x61, 0x68, 0x72, + 0x69, 0x76, 0x61, 0x72, 0x08, 0x4d, 0x65, 0x68, + 0x72, 0x08, 0x41, 0x62, 0x61, 0x6e, 0x08, 0x41, + 0x7a, 0x61, 0x72, 0x06, 0x44, 0x65, 0x79, 0x0c, + 0x42, 0x61, 0x68, 0x6d, 0x61, 0x6e, 0x0c, 0x45, + 0x73, 0x66, 0x61, 0x6e, 0x64, 0x04, 0x41, 0x50, + 0x1a, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, + 0x52, 0x2e, 0x4f, 0x2e, 0x43, 0x2e, 0x0c, 0x52, + 0x2e, 0x4f, 0x2e, 0x43, 0x2e, 0x12, 0x63, 0x61, + 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, 0x73, 0x08, + 0x64, 0x61, 0x74, 0x65, 0x08, 0x6c, 0x61, 0x74, + 0x6e, 0x04, 0x6e, 0x75, 0x10, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, + 0x74, 0x74, 0x65, 0x72, 0x6e, 0x26, 0x7b, 0x6d, + 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0x1e, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, + 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, + 0x6e, 0x0e, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, + 0x6c, 0x26, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0xa0, 0x7b, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x63, 0x79, 0x7d, 0x3c, 0x7b, 0x6d, + 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0xa0, 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x63, 0x79, 0x7d, 0x10, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x63, 0x79, 0x2a, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x7b, 0x70, + 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, + 0x67, 0x6e, 0x7d, 0x40, 0x7b, 0x6d, 0x69, 0x6e, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x7b, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x0e, 0x70, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x10, 0x70, 0x61, 0x74, + 0x74, 0x65, 0x72, 0x6e, 0x73, 0x02, 0x2c, 0x02, + 0xa0, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x06, + 0x4e, 0x61, 0x4e, 0x06, 0x6e, 0x61, 0x6e, 0x02, + 0x2b, 0x10, 0x70, 0x6c, 0x75, 0x73, 0x53, 0x69, + 0x67, 0x6e, 0x03, 0x12, 0x22, 0x12, 0x6d, 0x69, + 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, + 0x25, 0x16, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, + 0x74, 0x53, 0x69, 0x67, 0x6e, 0x03, 0x1e, 0x22, + 0x10, 0x69, 0x6e, 0x66, 0x69, 0x6e, 0x69, 0x74, + 0x79, 0x0e, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, + 0x73, 0x06, 0x41, 0x55, 0x24, 0x06, 0x41, 0x55, + 0x44, 0x04, 0x52, 0x24, 0x06, 0x42, 0x52, 0x4c, + 0x06, 0x43, 0x41, 0x24, 0x06, 0x43, 0x41, 0x44, + 0x06, 0x43, 0x4e, 0xa5, 0x06, 0x43, 0x4e, 0x59, + 0x04, 0x6b, 0x72, 0x06, 0x45, 0x45, 0x4b, 0x03, + 0xac, 0x20, 0x06, 0x45, 0x55, 0x52, 0x02, 0xa3, + 0x06, 0x47, 0x42, 0x50, 0x06, 0x48, 0x4b, 0x24, + 0x06, 0x48, 0x4b, 0x44, 0x03, 0xaa, 0x20, 0x06, + 0x49, 0x4c, 0x53, 0x03, 0xb9, 0x20, 0x06, 0x49, + 0x4e, 0x52, 0x02, 0xa5, 0x06, 0x4a, 0x50, 0x59, + 0x03, 0xa9, 0x20, 0x06, 0x4b, 0x52, 0x57, 0x06, + 0x4d, 0x58, 0x24, 0x06, 0x4d, 0x58, 0x4e, 0x06, + 0x4e, 0x5a, 0x24, 0x06, 0x4e, 0x5a, 0x44, 0x03, + 0x3f, 0x0e, 0x06, 0x54, 0x48, 0x42, 0x06, 0x4e, + 0x54, 0x24, 0x06, 0x54, 0x57, 0x44, 0x02, 0x24, + 0x06, 0x55, 0x53, 0x44, 0x03, 0xab, 0x20, 0x06, + 0x56, 0x4e, 0x44, 0x08, 0x46, 0x43, 0x46, 0x41, + 0x06, 0x58, 0x41, 0x46, 0x06, 0x45, 0x43, 0x24, + 0x06, 0x58, 0x43, 0x44, 0x06, 0x43, 0x46, 0x41, + 0x06, 0x58, 0x4f, 0x46, 0x08, 0x43, 0x46, 0x50, + 0x46, 0x06, 0x58, 0x50, 0x46, 0x14, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, + 0x52, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, + 0x74, 0x6c, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x6a, + 0x73, 0x6f, 0x6e, 0x70, 0x2f, 0x65, 0x74, 0x2e, + 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, + 0x00, 0x01, 0x00, 0x27, 0x00, 0x89, 0x01, 0xfc, + 0x6a, 0x01, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x39, + 0xd0, 0x00, 0x00, 0x00, 0x43, 0xd1, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd2, 0x00, 0x00, 0x00, 0x4d, + 0xd3, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd4, 0x00, + 0x00, 0x00, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x04, + 0xd6, 0x00, 0x00, 0x00, 0x04, 0xd7, 0x00, 0x00, + 0x00, 0x04, 0xd8, 0x00, 0x00, 0x00, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x04, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdb, 0x00, 0x00, 0x00, 0x04, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x04, + 0xde, 0x00, 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, + 0x00, 0x04, 0xe0, 0x00, 0x00, 0x00, 0x04, 0xe1, + 0x00, 0x00, 0x00, 0x04, 0xe2, 0x00, 0x00, 0x00, + 0x26, 0x0f, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, + 0x0a, 0x4d, 0xe4, 0x00, 0x00, 0x00, 0x09, 0x4d, + 0xe5, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, + 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe9, + 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0xed, 0x00, + 0x00, 0x00, 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, + 0xef, 0x00, 0x00, 0x00, 0x04, 0xf0, 0x00, 0x00, + 0x00, 0x4d, 0xf1, 0x00, 0x00, 0x00, 0x04, 0xf2, + 0x00, 0x00, 0x00, 0x4d, 0xf3, 0x00, 0x00, 0x00, + 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xf5, 0x00, + 0x00, 0x00, 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, + 0xf7, 0x00, 0x00, 0x00, 0x04, 0xf8, 0x00, 0x00, + 0x00, 0x4d, 0xf9, 0x00, 0x00, 0x00, 0x04, 0xfa, + 0x00, 0x00, 0x00, 0x4d, 0xfb, 0x00, 0x00, 0x00, + 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xfd, 0x00, + 0x00, 0x00, 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, + 0xff, 0x00, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, + 0x00, 0x4d, 0x01, 0x01, 0x00, 0x00, 0x04, 0x02, + 0x01, 0x00, 0x00, 0x4d, 0x03, 0x01, 0x00, 0x00, + 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0x05, 0x01, + 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, + 0x07, 0x01, 0x00, 0x00, 0x04, 0x08, 0x01, 0x00, + 0x00, 0x4d, 0x09, 0x01, 0x00, 0x00, 0x04, 0x0a, + 0x01, 0x00, 0x00, 0x4d, 0x0b, 0x01, 0x00, 0x00, + 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, 0x0d, 0x01, + 0x00, 0x00, 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, + 0x0f, 0x01, 0x00, 0x00, 0x04, 0x10, 0x01, 0x00, + 0x00, 0x4d, 0x11, 0x01, 0x00, 0x00, 0x04, 0x12, + 0x01, 0x00, 0x00, 0x4d, 0x13, 0x01, 0x00, 0x00, + 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, 0x14, 0x01, + 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, + 0x16, 0x01, 0x00, 0x00, 0x04, 0x17, 0x01, 0x00, + 0x00, 0x4d, 0x18, 0x01, 0x00, 0x00, 0x04, 0x19, + 0x01, 0x00, 0x00, 0x4d, 0x1a, 0x01, 0x00, 0x00, + 0x04, 0x1b, 0x01, 0x00, 0x00, 0x4d, 0x1c, 0x01, + 0x00, 0x00, 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, + 0x1e, 0x01, 0x00, 0x00, 0x04, 0x1f, 0x01, 0x00, + 0x00, 0x4d, 0x20, 0x01, 0x00, 0x00, 0x04, 0x21, + 0x01, 0x00, 0x00, 0x4d, 0x22, 0x01, 0x00, 0x00, + 0x04, 0x23, 0x01, 0x00, 0x00, 0x4d, 0x24, 0x01, + 0x00, 0x00, 0x04, 0x23, 0x01, 0x00, 0x00, 0x4d, + 0x25, 0x01, 0x00, 0x00, 0x04, 0x26, 0x01, 0x00, + 0x00, 0x4d, 0x26, 0x01, 0x00, 0x00, 0x04, 0x27, + 0x01, 0x00, 0x00, 0x4d, 0x28, 0x01, 0x00, 0x00, + 0x04, 0x29, 0x01, 0x00, 0x00, 0x4d, 0x2a, 0x01, + 0x00, 0x00, 0x04, 0x2b, 0x01, 0x00, 0x00, 0x4d, + 0x2c, 0x01, 0x00, 0x00, 0x04, 0x2d, 0x01, 0x00, + 0x00, 0x4d, 0x2e, 0x01, 0x00, 0x00, 0x04, 0x2f, + 0x01, 0x00, 0x00, 0x4d, 0x30, 0x01, 0x00, 0x00, + 0x04, 0x31, 0x01, 0x00, 0x00, 0x4d, 0x32, 0x01, + 0x00, 0x00, 0x04, 0x33, 0x01, 0x00, 0x00, 0x4d, + 0x34, 0x01, 0x00, 0x00, 0x04, 0x35, 0x01, 0x00, + 0x00, 0x4d, 0x36, 0x01, 0x00, 0x00, 0x04, 0x37, + 0x01, 0x00, 0x00, 0x4d, 0x38, 0x01, 0x00, 0x00, + 0x4d, 0x39, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x3a, + 0x01, 0x00, 0x00, 0x4d, 0x3b, 0x01, 0x00, 0x00, + 0x04, 0x3c, 0x01, 0x00, 0x00, 0x4d, 0x3d, 0x01, + 0x00, 0x00, 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, + 0x30, 0x01, 0x00, 0x00, 0x04, 0x3e, 0x01, 0x00, + 0x00, 0x4d, 0x2a, 0x01, 0x00, 0x00, 0x4d, 0x3f, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x40, 0x01, 0x00, + 0x00, 0x4d, 0x41, 0x01, 0x00, 0x00, 0x04, 0x42, + 0x01, 0x00, 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, + 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x09, 0x01, + 0x00, 0x00, 0x04, 0x44, 0x01, 0x00, 0x00, 0x4d, + 0x05, 0x01, 0x00, 0x00, 0x4d, 0x45, 0x01, 0x00, + 0x00, 0x4d, 0x46, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x0b, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x63, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0xed, 0x00, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0xed, 0x00, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x70, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x71, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x4d, 0x76, + 0x01, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, + 0x4d, 0xd5, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x00, 0xbe, 0x01, 0xbe, 0x02, 0xbe, 0x03, 0xbe, + 0x04, 0xbe, 0x05, 0xbe, 0x06, 0xbe, 0x07, 0xbe, + 0x08, 0xbe, 0x09, 0xbe, 0x0a, 0xbe, 0x0b, 0x26, + 0x0c, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, + 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, + 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, + 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x63, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0xed, 0x00, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0xed, 0x00, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x70, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, + 0x4d, 0x77, 0x01, 0x00, 0x00, 0x4d, 0xd6, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x0c, 0xbe, 0x0d, + 0xbe, 0x0e, 0xbe, 0x0f, 0xbe, 0x10, 0xbe, 0x11, + 0xbe, 0x12, 0xbe, 0x13, 0xbe, 0x14, 0xbe, 0x15, + 0xbe, 0x16, 0xbe, 0x17, 0xbe, 0x18, 0x26, 0x0d, + 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x84, + 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, + 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, + 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, + 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, + 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, + 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, + 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, + 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, + 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, + 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, + 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, + 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x63, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0xed, 0x00, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0xed, + 0x00, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x70, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x91, 0x01, + 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x73, 0x01, 0x00, 0x00, 0x4d, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x4d, 0x76, 0x01, 0x00, 0x00, 0x4d, 0x77, 0x01, + 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x19, 0xbe, 0x1a, 0xbe, 0x1b, 0xbe, + 0x1c, 0xbe, 0x1d, 0xbe, 0x1e, 0xbe, 0x1f, 0xbe, + 0x20, 0xbe, 0x21, 0xbe, 0x22, 0xbe, 0x23, 0xbe, + 0x24, 0x26, 0x0c, 0x00, 0x4d, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, + 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x63, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0xed, 0x00, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0xed, 0x00, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x70, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, + 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x25, + 0xbe, 0x26, 0xbe, 0x27, 0xbe, 0x28, 0xbe, 0x29, + 0xbe, 0x2a, 0xbe, 0x2b, 0xbe, 0x2c, 0xbe, 0x2d, + 0xbe, 0x2e, 0xbe, 0x2f, 0xbe, 0x30, 0xbe, 0x31, + 0x26, 0x0d, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, + 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, + 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, + 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, + 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, + 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, + 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, + 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, + 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, + 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, + 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, + 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, + 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, + 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, + 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x63, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0xed, 0x00, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0xed, 0x00, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x70, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, + 0x04, 0x92, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x72, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x4d, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x4d, + 0x77, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x32, 0xbe, 0x33, 0xbe, + 0x34, 0xbe, 0x35, 0xbe, 0x36, 0xbe, 0x37, 0xbe, + 0x38, 0xbe, 0x39, 0xbe, 0x3a, 0xbe, 0x3b, 0xbe, + 0x3c, 0xbe, 0x3d, 0xbe, 0x3e, 0x26, 0x0d, 0x00, + 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, + 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, + 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, + 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, + 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, + 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, + 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, + 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, + 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x26, 0x0d, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x93, + 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, + 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, + 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, + 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, + 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, + 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, + 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, + 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x63, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0xed, 0x00, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0xed, 0x00, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x70, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x91, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x91, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x73, 0x01, 0x00, 0x00, 0x4d, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x4d, 0x76, 0x01, 0x00, 0x00, 0x4d, 0x77, 0x01, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x3f, 0xbe, 0x40, 0xbe, 0x41, 0xbe, + 0x42, 0xbe, 0x43, 0xbe, 0x44, 0xbe, 0x45, 0xbe, + 0x46, 0xbe, 0x47, 0xbe, 0x48, 0xbe, 0x49, 0xbe, + 0x4a, 0x26, 0x0c, 0x00, 0x4d, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, + 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x63, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0xed, 0x00, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0xed, 0x00, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x70, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x91, + 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, + 0x92, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x73, 0x01, 0x00, 0x00, 0x4d, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x4d, 0x77, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x14, + 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x63, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0xed, 0x00, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0xed, 0x00, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x70, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xa0, 0x01, 0x00, 0x00, + 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, + 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x26, + 0x04, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, + 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, + 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, + 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, + 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x26, + 0x04, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x72, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, + 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x4d, 0xd4, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x4b, 0xbe, + 0x4c, 0xbe, 0x4d, 0xbe, 0x4e, 0xbe, 0x4f, 0xbe, + 0x50, 0xbe, 0x51, 0xbe, 0x52, 0xbe, 0x53, 0xbe, + 0x54, 0xbe, 0x55, 0xbe, 0x56, 0xbe, 0x57, 0xbe, + 0x58, 0x26, 0x0e, 0x00, 0x4d, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, + 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, + 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, + 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, + 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, + 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, + 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, + 0x04, 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, + 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, 0x26, + 0x0e, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, + 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, + 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, + 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, + 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, + 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, + 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, 0xb3, + 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, 0x00, + 0x04, 0xb5, 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x63, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0xed, 0x00, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0xed, 0x00, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x70, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x4d, 0x76, + 0x01, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x59, 0xbe, 0x5a, 0xbe, 0x5b, 0xbe, 0x5c, 0xbe, + 0x5d, 0xbe, 0x5e, 0xbe, 0x5f, 0xbe, 0x60, 0xbe, + 0x61, 0xbe, 0x62, 0xbe, 0x63, 0xbe, 0x64, 0x26, + 0x0c, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, + 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, 0x04, 0xb9, + 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, + 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, 0x01, + 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, 0x04, + 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, 0x00, + 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, 0x04, 0xc1, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, + 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, + 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, 0x04, + 0xba, 0x01, 0x00, 0x00, 0x04, 0xbb, 0x01, 0x00, + 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, 0x04, 0xbd, + 0x01, 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, + 0x04, 0xbf, 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, + 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x63, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0xed, 0x00, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0xed, 0x00, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x70, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xc2, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0xc2, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xc2, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x73, 0x01, 0x00, 0x00, 0x4d, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x4d, 0x76, 0x01, 0x00, 0x00, 0x4d, 0x77, 0x01, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x65, 0xbe, 0x66, 0xbe, 0x67, 0xbe, + 0x68, 0xbe, 0x69, 0xbe, 0x6a, 0xbe, 0x6b, 0xbe, + 0x6c, 0xbe, 0x6d, 0xbe, 0x6e, 0xbe, 0x6f, 0xbe, + 0x70, 0x26, 0x0c, 0x00, 0x4d, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, 0x04, 0xc4, + 0x01, 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, + 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, + 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, + 0xc9, 0x01, 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, + 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, + 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, + 0x04, 0xce, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xcf, 0x01, + 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, + 0xd1, 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, + 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, + 0x01, 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, + 0x04, 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, + 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, + 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x63, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0xed, 0x00, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0xed, 0x00, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x70, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xdb, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xdb, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x72, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x4d, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x4d, + 0x77, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x71, 0xbe, 0x72, 0xbe, + 0x73, 0xbe, 0x74, 0xbe, 0x75, 0xbe, 0x76, 0xbe, + 0x77, 0xbe, 0x78, 0xbe, 0x79, 0xbe, 0x7a, 0xbe, + 0x7b, 0xbe, 0x7c, 0x26, 0x0c, 0x00, 0x4d, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, + 0x04, 0xc4, 0x01, 0x00, 0x00, 0x04, 0xc5, 0x01, + 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, + 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, + 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, 0x04, 0xca, + 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, + 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, + 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, + 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, 0x04, 0xd2, + 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, + 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, 0xd5, 0x01, + 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, 0x04, + 0xd7, 0x01, 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, + 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x63, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0xed, + 0x00, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0xed, 0x00, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x70, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xdb, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x72, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, + 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x14, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x63, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0xed, 0x00, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0xed, 0x00, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x70, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xdc, + 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, + 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, + 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, + 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, + 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, + 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, + 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, + 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, + 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, + 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, + 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, + 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, + 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, + 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, + 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, + 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, + 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, + 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, + 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, + 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, 0x26, 0x20, + 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x4d, 0x20, + 0x00, 0x00, 0x80, 0x04, 0xfd, 0x01, 0x00, 0x00, + 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0xfe, 0x01, + 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, + 0xff, 0x01, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, + 0x80, 0x04, 0x00, 0x02, 0x00, 0x00, 0x4d, 0x24, + 0x00, 0x00, 0x80, 0x04, 0x01, 0x02, 0x00, 0x00, + 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0x02, 0x02, + 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, + 0x03, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, + 0x80, 0x04, 0x04, 0x02, 0x00, 0x00, 0x4d, 0x28, + 0x00, 0x00, 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, + 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, + 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, + 0x07, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, + 0x80, 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, 0x2c, + 0x00, 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, + 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, + 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, + 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, + 0x80, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x30, + 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, + 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, + 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, + 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, + 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x34, + 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, + 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, + 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, + 0x13, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, + 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x38, + 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, + 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, + 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, + 0x17, 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, + 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x3c, + 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, + 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, + 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, + 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, + 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x40, + 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, + 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, + 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, + 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, + 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x44, + 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, + 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, + 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, + 0x23, 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, + 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x48, + 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, + 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, + 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, + 0x27, 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, + 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x4c, + 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, + 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, + 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, + 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, + 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x50, + 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, + 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, + 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, + 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, + 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x54, + 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, + 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, + 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, + 0x33, 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, + 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x58, + 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, + 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, + 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, + 0x37, 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, + 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x5c, + 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, + 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, + 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, + 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, + 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x60, + 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, + 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, + 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, + 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, + 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x64, + 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, + 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, + 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, + 0x43, 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, + 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x68, + 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, + 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, + 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, + 0x47, 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, + 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x6c, + 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, + 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, + 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, + 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, + 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x70, + 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, + 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, + 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, + 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, + 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x74, + 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, + 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, + 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, + 0x53, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, + 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x78, + 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, + 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, + 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, + 0x57, 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, + 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x7c, + 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, + 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, + 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, + 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, + 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x80, + 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, + 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, + 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, + 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, + 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x84, + 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, + 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, + 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, + 0x63, 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, + 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x88, + 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, + 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, + 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, + 0x67, 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, + 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x8c, + 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, + 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, + 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, + 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, + 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x90, + 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, + 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, + 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, + 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, + 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x94, + 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, + 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, + 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, + 0x73, 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, + 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x98, + 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, + 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, + 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, + 0x77, 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, + 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x9c, + 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, + 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, + 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, + 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, + 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0xa0, + 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, + 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, + 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, + 0x7f, 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, + 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0xa4, + 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, + 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, + 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, + 0x83, 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, + 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0xa8, + 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, + 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, + 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, + 0x87, 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, + 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0xac, + 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, + 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, + 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, + 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, + 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xb0, + 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, + 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, + 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, + 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, + 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xb4, + 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, + 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, + 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, + 0x93, 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, + 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xb8, + 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, + 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, + 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, + 0x97, 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, + 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xbc, + 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, + 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, + 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, + 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, + 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xc0, + 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, + 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, + 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, + 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, + 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xc4, + 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, + 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, + 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, + 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, + 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xc8, + 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, + 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, + 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, + 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, + 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xcc, + 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, + 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, + 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, + 0xab, 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, + 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xd0, + 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, + 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, + 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, + 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, + 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xd4, + 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, + 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, + 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, + 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, + 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, + 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, + 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, + 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, + 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, + 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xe4, + 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, + 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, + 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, + 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x80, 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x80, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, + 0x03, 0x01, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x80, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0xdc, + 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, + 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, + 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, + 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, + 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, + 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, + 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, + 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, + 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, + 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, + 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, + 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, + 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, + 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, + 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, + 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, + 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, + 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, + 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, + 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, 0x26, 0x20, + 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x4d, 0x20, + 0x00, 0x00, 0x80, 0x04, 0xfd, 0x01, 0x00, 0x00, + 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0xfe, 0x01, + 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, + 0xff, 0x01, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, + 0x80, 0x04, 0x00, 0x02, 0x00, 0x00, 0x4d, 0x24, + 0x00, 0x00, 0x80, 0x04, 0x01, 0x02, 0x00, 0x00, + 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0x02, 0x02, + 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, + 0x03, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, + 0x80, 0x04, 0x04, 0x02, 0x00, 0x00, 0x4d, 0x28, + 0x00, 0x00, 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, + 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, + 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, + 0x07, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, + 0x80, 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, 0x2c, + 0x00, 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, + 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, + 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, + 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, + 0x80, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x30, + 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, + 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, + 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, + 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, + 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x34, + 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, + 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, + 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, + 0x13, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, + 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x38, + 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, + 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, + 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, + 0x17, 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, + 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x3c, + 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, + 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, + 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, + 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, + 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x40, + 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, + 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, + 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, + 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, + 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x44, + 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, + 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, + 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, + 0x23, 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, + 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x48, + 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, + 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, + 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, + 0x27, 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, + 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x4c, + 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, + 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, + 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, + 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, + 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x50, + 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, + 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, + 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, + 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, + 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x54, + 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, + 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, + 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, + 0x33, 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, + 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x58, + 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, + 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, + 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, + 0x37, 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, + 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x5c, + 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, + 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, + 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, + 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, + 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x60, + 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, + 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, + 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, + 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, + 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x64, + 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, + 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, + 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, + 0x43, 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, + 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x68, + 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, + 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, + 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, + 0x47, 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, + 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x6c, + 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, + 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, + 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, + 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, + 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x70, + 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, + 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, + 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, + 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, + 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x74, + 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, + 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, + 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, + 0x53, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, + 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x78, + 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, + 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, + 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, + 0x57, 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, + 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x7c, + 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, + 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, + 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, + 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, + 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x80, + 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, + 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, + 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, + 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, + 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x84, + 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, + 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, + 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, + 0x63, 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, + 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x88, + 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, + 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, + 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, + 0x67, 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, + 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x8c, + 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, + 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, + 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, + 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, + 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x90, + 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, + 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, + 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, + 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, + 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x94, + 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, + 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, + 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, + 0x73, 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, + 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x98, + 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, + 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, + 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, + 0x77, 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, + 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x9c, + 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, + 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, + 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, + 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, + 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0xa0, + 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, + 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, + 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, + 0x7f, 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, + 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0xa4, + 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, + 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, + 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, + 0x83, 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, + 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0xa8, + 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, + 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, + 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, + 0x87, 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, + 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0xac, + 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, + 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, + 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, + 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, + 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xb0, + 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, + 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, + 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, + 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, + 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xb4, + 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, + 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, + 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, + 0x93, 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, + 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xb8, + 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, + 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, + 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, + 0x97, 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, + 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xbc, + 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, + 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, + 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, + 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, + 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xc0, + 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, + 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, + 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, + 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, + 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xc4, + 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, + 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, + 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, + 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, + 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xc8, + 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, + 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, + 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, + 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, + 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xcc, + 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, + 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, + 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, + 0xab, 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, + 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xd0, + 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, + 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, + 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, + 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, + 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xd4, + 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, + 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, + 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, + 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, + 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, + 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, + 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, + 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, + 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, + 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xe4, + 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, + 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, + 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, + 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, + 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, + 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, + 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x80, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xdc, + 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, + 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, + 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, + 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, + 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, + 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, + 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, + 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, + 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, + 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, + 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, + 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, + 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, + 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, + 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, + 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, + 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, + 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, + 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, + 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, 0x26, 0x20, + 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x4d, 0x20, + 0x00, 0x00, 0x80, 0x04, 0xfd, 0x01, 0x00, 0x00, + 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0xfe, 0x01, + 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, + 0xff, 0x01, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, + 0x80, 0x04, 0x00, 0x02, 0x00, 0x00, 0x4d, 0x24, + 0x00, 0x00, 0x80, 0x04, 0x01, 0x02, 0x00, 0x00, + 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0x02, 0x02, + 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, + 0x03, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, + 0x80, 0x04, 0x04, 0x02, 0x00, 0x00, 0x4d, 0x28, + 0x00, 0x00, 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, + 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, + 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, + 0x07, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, + 0x80, 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, 0x2c, + 0x00, 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, + 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, + 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, + 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, + 0x80, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x30, + 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, + 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, + 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, + 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, + 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x34, + 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, + 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, + 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, + 0x13, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, + 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x38, + 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, + 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, + 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, + 0x17, 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, + 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x3c, + 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, + 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, + 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, + 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, + 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x40, + 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, + 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, + 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, + 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, + 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x44, + 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, + 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, + 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, + 0x23, 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, + 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x48, + 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, + 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, + 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, + 0x27, 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, + 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x4c, + 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, + 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, + 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, + 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, + 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x50, + 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, + 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, + 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, + 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, + 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x54, + 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, + 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, + 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, + 0x33, 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, + 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x58, + 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, + 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, + 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, + 0x37, 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, + 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x5c, + 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, + 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, + 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, + 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, + 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x60, + 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, + 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, + 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, + 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, + 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x64, + 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, + 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, + 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, + 0x43, 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, + 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x68, + 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, + 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, + 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, + 0x47, 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, + 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x6c, + 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, + 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, + 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, + 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, + 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x70, + 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, + 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, + 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, + 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, + 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x74, + 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, + 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, + 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, + 0x53, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, + 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x78, + 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, + 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, + 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, + 0x57, 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, + 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x7c, + 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, + 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, + 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, + 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, + 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x80, + 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, + 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, + 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, + 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, + 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x84, + 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, + 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, + 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, + 0x63, 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, + 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x88, + 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, + 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, + 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, + 0x67, 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, + 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x8c, + 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, + 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, + 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, + 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, + 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x90, + 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, + 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, + 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, + 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, + 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x94, + 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, + 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, + 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, + 0x73, 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, + 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x98, + 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, + 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, + 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, + 0x77, 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, + 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x9c, + 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, + 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, + 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, + 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, + 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0xa0, + 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, + 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, + 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, + 0x7f, 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, + 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0xa4, + 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, + 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, + 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, + 0x83, 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, + 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0xa8, + 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, + 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, + 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, + 0x87, 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, + 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0xac, + 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, + 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, + 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, + 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, + 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xb0, + 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, + 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, + 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, + 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, + 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xb4, + 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, + 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, + 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, + 0x93, 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, + 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xb8, + 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, + 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, + 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, + 0x97, 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, + 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xbc, + 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, + 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, + 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, + 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, + 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xc0, + 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, + 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, + 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, + 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, + 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xc4, + 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, + 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, + 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, + 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, + 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xc8, + 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, + 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, + 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, + 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, + 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xcc, + 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, + 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, + 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, + 0xab, 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, + 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xd0, + 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, + 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, + 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, + 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, + 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xd4, + 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, + 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, + 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, + 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, + 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, + 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, + 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, + 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, + 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, + 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xe4, + 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, + 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, + 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, + 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, + 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, + 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, + 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x80, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x72, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, + 0x4d, 0x77, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x7d, 0xbe, 0x7e, + 0xbe, 0x7f, 0xbe, 0x80, 0xbe, 0x81, 0xbe, 0x82, + 0xbe, 0x83, 0xbe, 0x84, 0xbe, 0x85, 0xbe, 0x86, + 0xbe, 0x87, 0xbe, 0x88, 0x26, 0x0c, 0x00, 0x4d, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x04, 0xca, + 0x02, 0x00, 0x00, 0x04, 0xcb, 0x02, 0x00, 0x00, + 0x04, 0xcc, 0x02, 0x00, 0x00, 0x04, 0xcd, 0x02, + 0x00, 0x00, 0x04, 0xce, 0x02, 0x00, 0x00, 0x04, + 0xcf, 0x02, 0x00, 0x00, 0x04, 0xd0, 0x02, 0x00, + 0x00, 0x04, 0xd1, 0x02, 0x00, 0x00, 0x04, 0xd2, + 0x02, 0x00, 0x00, 0x04, 0xd3, 0x02, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x04, 0xc9, 0x02, + 0x00, 0x00, 0x04, 0xca, 0x02, 0x00, 0x00, 0x04, + 0xcb, 0x02, 0x00, 0x00, 0x04, 0xcc, 0x02, 0x00, + 0x00, 0x04, 0xcd, 0x02, 0x00, 0x00, 0x04, 0xce, + 0x02, 0x00, 0x00, 0x04, 0xcf, 0x02, 0x00, 0x00, + 0x04, 0xd0, 0x02, 0x00, 0x00, 0x04, 0xd1, 0x02, + 0x00, 0x00, 0x04, 0xd2, 0x02, 0x00, 0x00, 0x04, + 0xd3, 0x02, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x63, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0xed, 0x00, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0xed, 0x00, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x70, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xd4, 0x02, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0xd4, + 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xd4, 0x02, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x72, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, + 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x14, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x63, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0xed, 0x00, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0xed, 0x00, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x70, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xd5, 0x02, 0x00, 0x00, 0x04, 0xd6, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0xd5, 0x02, 0x00, 0x00, 0x04, 0xd6, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xd5, 0x02, 0x00, 0x00, + 0x04, 0xd6, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x72, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x4d, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x4d, + 0x77, 0x01, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x00, 0x4d, 0xd7, 0x02, 0x00, 0x00, 0x4d, 0xd8, + 0x02, 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x02, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xda, 0x02, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0xdb, 0x02, 0x00, 0x00, + 0x4d, 0xdc, 0x02, 0x00, 0x00, 0x04, 0xdd, 0x02, + 0x00, 0x00, 0x4d, 0xde, 0x02, 0x00, 0x00, 0x4d, + 0xdf, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xe0, 0x02, + 0x00, 0x00, 0x4d, 0xdc, 0x02, 0x00, 0x00, 0x04, + 0xe1, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x02, 0x00, + 0x00, 0x4d, 0xe2, 0x02, 0x00, 0x00, 0x0b, 0x04, + 0xe3, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x02, 0x00, + 0x00, 0x04, 0xe4, 0x02, 0x00, 0x00, 0x4d, 0xde, + 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x02, 0x00, 0x00, + 0x4d, 0xe6, 0x02, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0xe7, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x02, 0x00, + 0x00, 0x04, 0xe8, 0x02, 0x00, 0x00, 0x4d, 0xe9, + 0x02, 0x00, 0x00, 0x04, 0xea, 0x02, 0x00, 0x00, + 0x4d, 0xeb, 0x02, 0x00, 0x00, 0x04, 0xec, 0x02, + 0x00, 0x00, 0x4d, 0xed, 0x02, 0x00, 0x00, 0x04, + 0xee, 0x02, 0x00, 0x00, 0x4d, 0xef, 0x02, 0x00, + 0x00, 0x04, 0xf0, 0x02, 0x00, 0x00, 0x4d, 0xf1, + 0x02, 0x00, 0x00, 0x04, 0xf2, 0x02, 0x00, 0x00, + 0x4d, 0xf3, 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x02, + 0x00, 0x00, 0x4d, 0xf4, 0x02, 0x00, 0x00, 0x0b, + 0x04, 0xf5, 0x02, 0x00, 0x00, 0x4d, 0xf6, 0x02, + 0x00, 0x00, 0x04, 0xf7, 0x02, 0x00, 0x00, 0x4d, + 0xf8, 0x02, 0x00, 0x00, 0x04, 0xf9, 0x02, 0x00, + 0x00, 0x4d, 0xfa, 0x02, 0x00, 0x00, 0x04, 0xfb, + 0x02, 0x00, 0x00, 0x4d, 0xfc, 0x02, 0x00, 0x00, + 0x04, 0xfd, 0x02, 0x00, 0x00, 0x4d, 0xfe, 0x02, + 0x00, 0x00, 0x04, 0xff, 0x02, 0x00, 0x00, 0x4d, + 0x00, 0x03, 0x00, 0x00, 0x04, 0x01, 0x03, 0x00, + 0x00, 0x4d, 0x02, 0x03, 0x00, 0x00, 0x04, 0x03, + 0x03, 0x00, 0x00, 0x4d, 0x04, 0x03, 0x00, 0x00, + 0x04, 0x05, 0x03, 0x00, 0x00, 0x4d, 0x06, 0x03, + 0x00, 0x00, 0x04, 0x07, 0x03, 0x00, 0x00, 0x4d, + 0x08, 0x03, 0x00, 0x00, 0x04, 0x09, 0x03, 0x00, + 0x00, 0x4d, 0x0a, 0x03, 0x00, 0x00, 0x04, 0x0b, + 0x03, 0x00, 0x00, 0x4d, 0x0c, 0x03, 0x00, 0x00, + 0x04, 0x0d, 0x03, 0x00, 0x00, 0x4d, 0x0e, 0x03, + 0x00, 0x00, 0x04, 0x0f, 0x03, 0x00, 0x00, 0x4d, + 0x10, 0x03, 0x00, 0x00, 0x04, 0x11, 0x03, 0x00, + 0x00, 0x4d, 0x12, 0x03, 0x00, 0x00, 0x04, 0x13, + 0x03, 0x00, 0x00, 0x4d, 0x14, 0x03, 0x00, 0x00, + 0x04, 0x15, 0x03, 0x00, 0x00, 0x4d, 0x16, 0x03, + 0x00, 0x00, 0x04, 0x17, 0x03, 0x00, 0x00, 0x4d, + 0x18, 0x03, 0x00, 0x00, 0x04, 0x19, 0x03, 0x00, + 0x00, 0x4d, 0x1a, 0x03, 0x00, 0x00, 0x04, 0x1b, + 0x03, 0x00, 0x00, 0x4d, 0x1c, 0x03, 0x00, 0x00, + 0x04, 0x1d, 0x03, 0x00, 0x00, 0x4d, 0x1e, 0x03, + 0x00, 0x00, 0x04, 0x1f, 0x03, 0x00, 0x00, 0x4d, + 0x20, 0x03, 0x00, 0x00, 0x4d, 0x21, 0x03, 0x00, + 0x00, 0x4d, 0x45, 0x00, 0x00, 0x00, 0x24, 0x01, + 0x00, 0xcc, 0x28, 0xc4, 0x0c, 0x01, 0x00, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, + 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_eu_size = 24825; + +const uint8_t intl_eu[24825] = { + 0x01, 0xd3, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x65, 0x75, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x0e, + 0x7b, 0x31, 0x7d, 0x20, 0x7b, 0x30, 0x7d, 0x0a, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, 0x65, + 0x64, 0x69, 0x75, 0x6d, 0x08, 0x66, 0x75, 0x6c, + 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x02, 0x64, + 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, 0x08, 0x64, + 0x2c, 0x20, 0x45, 0x04, 0x45, 0x64, 0x10, 0x45, + 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x06, + 0x45, 0x68, 0x6d, 0x0e, 0x45, 0x20, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x06, 0x45, 0x48, 0x6d, 0x16, + 0x45, 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x61, 0x08, 0x45, 0x68, 0x6d, 0x73, + 0x14, 0x45, 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x08, 0x45, 0x48, 0x6d, 0x73, + 0x06, 0x47, 0x20, 0x79, 0x04, 0x47, 0x79, 0x22, + 0x47, 0x20, 0x79, 0x2e, 0x20, 0x27, 0x75, 0x72, + 0x74, 0x65, 0x6b, 0x6f, 0x27, 0x20, 0x4d, 0x4d, + 0x4d, 0x0a, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x26, + 0x47, 0x20, 0x79, 0x2e, 0x20, 0x27, 0x75, 0x72, + 0x74, 0x65, 0x6b, 0x6f, 0x27, 0x20, 0x4d, 0x4d, + 0x4d, 0x20, 0x64, 0x0c, 0x47, 0x79, 0x4d, 0x4d, + 0x4d, 0x64, 0x2c, 0x47, 0x20, 0x79, 0x2e, 0x20, + 0x27, 0x75, 0x72, 0x74, 0x65, 0x6b, 0x6f, 0x27, + 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x2c, 0x20, + 0x45, 0x0e, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x45, + 0x64, 0x06, 0x68, 0x20, 0x61, 0x02, 0x68, 0x04, + 0x48, 0x48, 0x02, 0x48, 0x0c, 0x68, 0x3a, 0x6d, + 0x6d, 0x20, 0x61, 0x04, 0x68, 0x6d, 0x0a, 0x48, + 0x48, 0x3a, 0x6d, 0x6d, 0x04, 0x48, 0x6d, 0x12, + 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, + 0x61, 0x06, 0x68, 0x6d, 0x73, 0x10, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x06, 0x48, + 0x6d, 0x73, 0x16, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x20, 0x61, 0x20, 0x76, 0x08, 0x68, + 0x6d, 0x73, 0x76, 0x14, 0x48, 0x48, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x76, 0x08, 0x48, + 0x6d, 0x73, 0x76, 0x10, 0x68, 0x3a, 0x6d, 0x6d, + 0x20, 0x61, 0x20, 0x76, 0x06, 0x68, 0x6d, 0x76, + 0x0e, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x20, 0x76, + 0x06, 0x48, 0x6d, 0x76, 0x02, 0x4c, 0x02, 0x4d, + 0x06, 0x4d, 0x2f, 0x64, 0x04, 0x4d, 0x64, 0x0c, + 0x4d, 0x2f, 0x64, 0x2c, 0x20, 0x45, 0x06, 0x4d, + 0x45, 0x64, 0x06, 0x4c, 0x4c, 0x4c, 0x06, 0x4d, + 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x20, 0x64, + 0x08, 0x4d, 0x4d, 0x4d, 0x64, 0x10, 0x4d, 0x4d, + 0x4d, 0x20, 0x64, 0x2c, 0x20, 0x45, 0x0a, 0x4d, + 0x4d, 0x4d, 0x45, 0x64, 0x0c, 0x4d, 0x4d, 0x4d, + 0x4d, 0x20, 0x64, 0x0a, 0x4d, 0x4d, 0x4d, 0x4d, + 0x64, 0x0a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x04, + 0x6d, 0x73, 0x02, 0x79, 0x06, 0x79, 0x2f, 0x4d, + 0x04, 0x79, 0x4d, 0x0a, 0x79, 0x2f, 0x4d, 0x2f, + 0x64, 0x06, 0x79, 0x4d, 0x64, 0x10, 0x79, 0x2f, + 0x4d, 0x2f, 0x64, 0x2c, 0x20, 0x45, 0x08, 0x79, + 0x4d, 0x45, 0x64, 0x0a, 0x79, 0x20, 0x4d, 0x4d, + 0x4d, 0x08, 0x79, 0x4d, 0x4d, 0x4d, 0x0e, 0x79, + 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x0a, 0x79, + 0x4d, 0x4d, 0x4d, 0x64, 0x14, 0x79, 0x20, 0x4d, + 0x4d, 0x4d, 0x20, 0x64, 0x2c, 0x20, 0x45, 0x0c, + 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x1e, 0x79, + 0x28, 0x27, 0x65, 0x27, 0x29, 0x27, 0x6b, 0x6f, + 0x27, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, 0x79, + 0x4d, 0x4d, 0x4d, 0x4d, 0x22, 0x79, 0x28, 0x27, + 0x65, 0x27, 0x29, 0x27, 0x6b, 0x6f, 0x27, 0x20, + 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x0c, 0x79, + 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x28, 0x79, 0x28, + 0x27, 0x65, 0x27, 0x29, 0x27, 0x6b, 0x6f, 0x27, + 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x2c, + 0x20, 0x45, 0x0e, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, + 0x45, 0x64, 0x1c, 0x79, 0x28, 0x27, 0x65, 0x27, + 0x29, 0x27, 0x6b, 0x6f, 0x27, 0x20, 0x51, 0x51, + 0x51, 0x08, 0x79, 0x51, 0x51, 0x51, 0x1e, 0x79, + 0x28, 0x27, 0x65, 0x27, 0x29, 0x27, 0x6b, 0x6f, + 0x27, 0x20, 0x51, 0x51, 0x51, 0x51, 0x0a, 0x79, + 0x51, 0x51, 0x51, 0x51, 0x20, 0x61, 0x76, 0x61, + 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x73, 0x2e, 0x79, 0x28, + 0x27, 0x65, 0x27, 0x29, 0x27, 0x6b, 0x6f, 0x27, + 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x2c, + 0x20, 0x45, 0x45, 0x45, 0x45, 0x14, 0x79, 0x4d, + 0x4d, 0x4d, 0x4d, 0x45, 0x45, 0x45, 0x45, 0x64, + 0x0e, 0x79, 0x2f, 0x4d, 0x4d, 0x2f, 0x64, 0x64, + 0x16, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x73, 0x1e, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x28, 0x7a, + 0x7a, 0x7a, 0x7a, 0x29, 0x12, 0x68, 0x6d, 0x6d, + 0x73, 0x73, 0x7a, 0x7a, 0x7a, 0x7a, 0x18, 0x48, + 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, + 0x28, 0x7a, 0x29, 0x08, 0x68, 0x6d, 0x73, 0x7a, + 0x16, 0x74, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x73, 0x0e, 0x66, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x73, 0x02, 0x55, 0x02, 0x4f, + 0x02, 0x41, 0x02, 0x49, 0x0c, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x08, 0x75, 0x72, 0x74, 0x2e, + 0x08, 0x6f, 0x74, 0x73, 0x2e, 0x08, 0x6d, 0x61, + 0x72, 0x2e, 0x08, 0x61, 0x70, 0x69, 0x2e, 0x08, + 0x6d, 0x61, 0x69, 0x2e, 0x08, 0x65, 0x6b, 0x61, + 0x2e, 0x08, 0x75, 0x7a, 0x74, 0x2e, 0x08, 0x61, + 0x62, 0x75, 0x2e, 0x08, 0x69, 0x72, 0x61, 0x2e, + 0x08, 0x75, 0x72, 0x72, 0x2e, 0x08, 0x61, 0x7a, + 0x61, 0x2e, 0x08, 0x61, 0x62, 0x65, 0x2e, 0x14, + 0x75, 0x72, 0x74, 0x61, 0x72, 0x72, 0x69, 0x6c, + 0x61, 0x6b, 0x10, 0x6f, 0x74, 0x73, 0x61, 0x69, + 0x6c, 0x61, 0x6b, 0x10, 0x6d, 0x61, 0x72, 0x74, + 0x78, 0x6f, 0x61, 0x6b, 0x10, 0x61, 0x70, 0x69, + 0x72, 0x69, 0x6c, 0x61, 0x6b, 0x10, 0x6d, 0x61, + 0x69, 0x61, 0x74, 0x7a, 0x61, 0x6b, 0x0e, 0x65, + 0x6b, 0x61, 0x69, 0x6e, 0x61, 0x6b, 0x10, 0x75, + 0x7a, 0x74, 0x61, 0x69, 0x6c, 0x61, 0x6b, 0x10, + 0x61, 0x62, 0x75, 0x7a, 0x74, 0x75, 0x61, 0x6b, + 0x0e, 0x69, 0x72, 0x61, 0x69, 0x6c, 0x61, 0x6b, + 0x0c, 0x75, 0x72, 0x72, 0x69, 0x61, 0x6b, 0x0e, + 0x61, 0x7a, 0x61, 0x72, 0x6f, 0x61, 0x6b, 0x10, + 0x61, 0x62, 0x65, 0x6e, 0x64, 0x75, 0x61, 0x6b, + 0x0c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x73, 0x06, + 0x69, 0x67, 0x2e, 0x06, 0x61, 0x6c, 0x2e, 0x06, + 0x61, 0x72, 0x2e, 0x06, 0x61, 0x7a, 0x2e, 0x06, + 0x6f, 0x67, 0x2e, 0x06, 0x6f, 0x72, 0x2e, 0x06, + 0x6c, 0x72, 0x2e, 0x0e, 0x69, 0x67, 0x61, 0x6e, + 0x64, 0x65, 0x61, 0x14, 0x61, 0x73, 0x74, 0x65, + 0x6c, 0x65, 0x68, 0x65, 0x6e, 0x61, 0x12, 0x61, + 0x73, 0x74, 0x65, 0x61, 0x72, 0x74, 0x65, 0x61, + 0x14, 0x61, 0x73, 0x74, 0x65, 0x61, 0x7a, 0x6b, + 0x65, 0x6e, 0x61, 0x10, 0x6f, 0x73, 0x74, 0x65, + 0x67, 0x75, 0x6e, 0x61, 0x10, 0x6f, 0x73, 0x74, + 0x69, 0x72, 0x61, 0x6c, 0x61, 0x12, 0x6c, 0x61, + 0x72, 0x75, 0x6e, 0x62, 0x61, 0x74, 0x61, 0x08, + 0x64, 0x61, 0x79, 0x73, 0x04, 0x42, 0x47, 0x08, + 0x65, 0x72, 0x61, 0x73, 0x04, 0x41, 0x4d, 0x04, + 0x61, 0x6d, 0x04, 0x50, 0x4d, 0x04, 0x70, 0x6d, + 0x14, 0x64, 0x61, 0x79, 0x50, 0x65, 0x72, 0x69, + 0x6f, 0x64, 0x73, 0x06, 0x4d, 0x30, 0x31, 0x06, + 0x4d, 0x30, 0x32, 0x06, 0x4d, 0x30, 0x33, 0x06, + 0x4d, 0x30, 0x34, 0x06, 0x4d, 0x30, 0x35, 0x06, + 0x4d, 0x30, 0x36, 0x06, 0x4d, 0x30, 0x37, 0x06, + 0x4d, 0x30, 0x38, 0x06, 0x4d, 0x30, 0x39, 0x06, + 0x4d, 0x31, 0x30, 0x06, 0x4d, 0x31, 0x31, 0x06, + 0x4d, 0x31, 0x32, 0x08, 0x54, 0x6f, 0x75, 0x74, + 0x08, 0x42, 0x61, 0x62, 0x61, 0x0a, 0x48, 0x61, + 0x74, 0x6f, 0x72, 0x0a, 0x4b, 0x69, 0x61, 0x68, + 0x6b, 0x08, 0x54, 0x6f, 0x62, 0x61, 0x0c, 0x41, + 0x6d, 0x73, 0x68, 0x69, 0x72, 0x10, 0x42, 0x61, + 0x72, 0x61, 0x6d, 0x68, 0x61, 0x74, 0x12, 0x42, + 0x61, 0x72, 0x61, 0x6d, 0x6f, 0x75, 0x64, 0x61, + 0x0e, 0x42, 0x61, 0x73, 0x68, 0x61, 0x6e, 0x73, + 0x0a, 0x50, 0x61, 0x6f, 0x6e, 0x61, 0x08, 0x45, + 0x70, 0x65, 0x70, 0x0a, 0x4d, 0x65, 0x73, 0x72, + 0x61, 0x0a, 0x4e, 0x61, 0x73, 0x69, 0x65, 0x08, + 0x45, 0x52, 0x41, 0x30, 0x08, 0x45, 0x52, 0x41, + 0x31, 0x10, 0x4d, 0x65, 0x73, 0x6b, 0x65, 0x72, + 0x65, 0x6d, 0x0c, 0x54, 0x65, 0x6b, 0x65, 0x6d, + 0x74, 0x0a, 0x48, 0x65, 0x64, 0x61, 0x72, 0x0c, + 0x54, 0x61, 0x68, 0x73, 0x61, 0x73, 0x06, 0x54, + 0x65, 0x72, 0x0e, 0x59, 0x65, 0x6b, 0x61, 0x74, + 0x69, 0x74, 0x0e, 0x4d, 0x65, 0x67, 0x61, 0x62, + 0x69, 0x74, 0x0c, 0x4d, 0x69, 0x61, 0x7a, 0x69, + 0x61, 0x0c, 0x47, 0x65, 0x6e, 0x62, 0x6f, 0x74, + 0x08, 0x53, 0x65, 0x6e, 0x65, 0x0a, 0x48, 0x61, + 0x6d, 0x6c, 0x65, 0x0e, 0x4e, 0x65, 0x68, 0x61, + 0x73, 0x73, 0x65, 0x0e, 0x50, 0x61, 0x67, 0x75, + 0x6d, 0x65, 0x6e, 0x08, 0x4b, 0x2e, 0x61, 0x2e, + 0x08, 0x4b, 0x2e, 0x6f, 0x2e, 0x06, 0x42, 0x43, + 0x45, 0x04, 0x43, 0x45, 0x0c, 0x54, 0x69, 0x73, + 0x68, 0x72, 0x69, 0x0e, 0x48, 0x65, 0x73, 0x68, + 0x76, 0x61, 0x6e, 0x0c, 0x4b, 0x69, 0x73, 0x6c, + 0x65, 0x76, 0x0a, 0x54, 0x65, 0x76, 0x65, 0x74, + 0x0c, 0x53, 0x68, 0x65, 0x76, 0x61, 0x74, 0x0c, + 0x41, 0x64, 0x61, 0x72, 0x20, 0x49, 0x08, 0x41, + 0x64, 0x61, 0x72, 0x0a, 0x4e, 0x69, 0x73, 0x61, + 0x6e, 0x08, 0x49, 0x79, 0x61, 0x72, 0x0a, 0x53, + 0x69, 0x76, 0x61, 0x6e, 0x0a, 0x54, 0x61, 0x6d, + 0x75, 0x7a, 0x04, 0x41, 0x76, 0x08, 0x45, 0x6c, + 0x75, 0x6c, 0x0e, 0x41, 0x64, 0x61, 0x72, 0x20, + 0x49, 0x49, 0x0e, 0x43, 0x68, 0x61, 0x69, 0x74, + 0x72, 0x61, 0x10, 0x56, 0x61, 0x69, 0x73, 0x61, + 0x6b, 0x68, 0x61, 0x10, 0x4a, 0x79, 0x61, 0x69, + 0x73, 0x74, 0x68, 0x61, 0x0c, 0x41, 0x73, 0x61, + 0x64, 0x68, 0x61, 0x0e, 0x53, 0x72, 0x61, 0x76, + 0x61, 0x6e, 0x61, 0x0c, 0x42, 0x68, 0x61, 0x64, + 0x72, 0x61, 0x0c, 0x41, 0x73, 0x76, 0x69, 0x6e, + 0x61, 0x0e, 0x4b, 0x61, 0x72, 0x74, 0x69, 0x6b, + 0x61, 0x14, 0x41, 0x67, 0x72, 0x61, 0x68, 0x61, + 0x79, 0x61, 0x6e, 0x61, 0x0a, 0x50, 0x61, 0x75, + 0x73, 0x61, 0x0a, 0x4d, 0x61, 0x67, 0x68, 0x61, + 0x10, 0x50, 0x68, 0x61, 0x6c, 0x67, 0x75, 0x6e, + 0x61, 0x08, 0x53, 0x61, 0x6b, 0x61, 0x08, 0x4d, + 0x75, 0x68, 0x2e, 0x08, 0x53, 0x61, 0x66, 0x2e, + 0x0c, 0x52, 0x61, 0x62, 0x2e, 0x20, 0x49, 0x0e, + 0x52, 0x61, 0x62, 0x2e, 0x20, 0x49, 0x49, 0x0c, + 0x4a, 0x75, 0x6d, 0x2e, 0x20, 0x49, 0x0e, 0x4a, + 0x75, 0x6d, 0x2e, 0x20, 0x49, 0x49, 0x08, 0x52, + 0x61, 0x6a, 0x2e, 0x08, 0x53, 0x68, 0x61, 0x2e, + 0x08, 0x52, 0x61, 0x6d, 0x2e, 0x0a, 0x53, 0x68, + 0x61, 0x77, 0x2e, 0x11, 0x44, 0x00, 0x68, 0x00, + 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, + 0x51, 0x00, 0x2e, 0x00, 0x11, 0x44, 0x00, 0x68, + 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, + 0x00, 0x48, 0x00, 0x2e, 0x00, 0x10, 0x4d, 0x75, + 0x68, 0x61, 0x72, 0x72, 0x61, 0x6d, 0x0a, 0x53, + 0x61, 0x66, 0x61, 0x72, 0x0f, 0x52, 0x00, 0x61, + 0x00, 0x62, 0x00, 0x69, 0x00, 0xbb, 0x02, 0x20, + 0x00, 0x49, 0x00, 0x11, 0x52, 0x00, 0x61, 0x00, + 0x62, 0x00, 0x69, 0x00, 0xbb, 0x02, 0x20, 0x00, + 0x49, 0x00, 0x49, 0x00, 0x10, 0x4a, 0x75, 0x6d, + 0x61, 0x64, 0x61, 0x20, 0x49, 0x12, 0x4a, 0x75, + 0x6d, 0x61, 0x64, 0x61, 0x20, 0x49, 0x49, 0x0a, + 0x52, 0x61, 0x6a, 0x61, 0x62, 0x0f, 0x53, 0x00, + 0x68, 0x00, 0x61, 0x00, 0xbb, 0x02, 0x62, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x0e, 0x52, 0x61, 0x6d, + 0x61, 0x64, 0x61, 0x6e, 0x0e, 0x53, 0x68, 0x61, + 0x77, 0x77, 0x61, 0x6c, 0x19, 0x44, 0x00, 0x68, + 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, + 0x00, 0x51, 0x00, 0x69, 0x00, 0xbb, 0x02, 0x64, + 0x00, 0x61, 0x00, 0x68, 0x00, 0x19, 0x44, 0x00, + 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, + 0x2d, 0x00, 0x48, 0x00, 0x69, 0x00, 0x6a, 0x00, + 0x6a, 0x00, 0x61, 0x00, 0x68, 0x00, 0x04, 0x41, + 0x48, 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x36, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x36, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x36, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, + 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x1d, 0x57, 0x00, 0x61, 0x00, + 0x64, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x1f, 0x52, 0x00, 0x65, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, + 0x59, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x37, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x2d, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6d, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x2d, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x2b, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, 0x2d, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, 0x2a, 0x4a, + 0x69, 0x6e, 0x67, 0x6f, 0x2d, 0x6b, 0x65, 0x69, + 0x75, 0x6e, 0x20, 0x28, 0x37, 0x36, 0x37, 0x2d, + 0x37, 0x37, 0x30, 0x29, 0x1d, 0x48, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x38, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x1f, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x2d, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x2d, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x1f, 0x44, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1d, 0x4a, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, + 0x4b, 0x00, 0x61, 0x00, 0x6a, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1f, 0x53, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x20, 0x54, 0x65, 0x6e, 0x2d, 0x61, + 0x6e, 0x20, 0x28, 0x38, 0x35, 0x37, 0x2d, 0x38, + 0x35, 0x39, 0x29, 0x1f, 0x4a, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x21, 0x47, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x1f, 0x45, 0x00, 0x6e, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1b, 0x4c, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x1d, 0x41, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x1f, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, + 0x45, 0x00, 0x69, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, + 0x00, 0x73, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x39, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, + 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4d, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x35, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x27, 0x4a, 0x00, 0x69, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x29, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4c, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x4a, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, 0x24, 0x54, + 0x65, 0x6e, 0x2d, 0x65, 0x69, 0x20, 0x28, 0x31, + 0x31, 0x31, 0x30, 0x2d, 0x31, 0x31, 0x31, 0x33, + 0x29, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x44, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x48, 0x00, 0x65, 0x00, 0x69, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x27, 0x45, 0x00, 0x69, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x68, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, + 0x00, 0x61, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x41, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x69, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x59, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, + 0x4a, 0x00, 0x75, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x29, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x29, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, + 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x41, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x4d, + 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x27, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x75, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x29, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x29, 0x52, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x4e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x4c, 0x01, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6d, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x1f, 0x4b, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, + 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4c, + 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x74, 0x00, + 0x73, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x4d, 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x27, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x21, 0x4c, 0x01, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x21, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1f, + 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x72, 0x00, 0x65, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x62, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x27, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x48, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x65, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x41, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4d, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x02, 0x54, 0x02, 0x53, + 0x0a, 0x4d, 0x65, 0x69, 0x6a, 0x69, 0x0d, 0x54, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x0b, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x0c, 0x48, + 0x65, 0x69, 0x73, 0x65, 0x69, 0x12, 0x46, 0x61, + 0x72, 0x76, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x16, + 0x4f, 0x72, 0x64, 0x69, 0x62, 0x65, 0x68, 0x65, + 0x73, 0x68, 0x74, 0x0e, 0x4b, 0x68, 0x6f, 0x72, + 0x64, 0x61, 0x64, 0x06, 0x54, 0x69, 0x72, 0x0c, + 0x4d, 0x6f, 0x72, 0x64, 0x61, 0x64, 0x12, 0x53, + 0x68, 0x61, 0x68, 0x72, 0x69, 0x76, 0x61, 0x72, + 0x08, 0x4d, 0x65, 0x68, 0x72, 0x08, 0x41, 0x62, + 0x61, 0x6e, 0x08, 0x41, 0x7a, 0x61, 0x72, 0x06, + 0x44, 0x65, 0x79, 0x0c, 0x42, 0x61, 0x68, 0x6d, + 0x61, 0x6e, 0x0c, 0x45, 0x73, 0x66, 0x61, 0x6e, + 0x64, 0x04, 0x41, 0x50, 0x1e, 0x52, 0x2e, 0x4f, + 0x2e, 0x43, 0x2e, 0x20, 0x61, 0x75, 0x72, 0x72, + 0x65, 0x74, 0x69, 0x6b, 0x0c, 0x52, 0x2e, 0x4f, + 0x2e, 0x43, 0x2e, 0x12, 0x63, 0x61, 0x6c, 0x65, + 0x6e, 0x64, 0x61, 0x72, 0x73, 0x08, 0x64, 0x61, + 0x74, 0x65, 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, + 0x6e, 0x75, 0x10, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0x1e, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, + 0x65, 0x72, 0x6e, 0x26, 0x7b, 0x6d, 0x69, 0x6e, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, + 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x0e, + 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x26, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0xa0, 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x79, 0x7d, 0x3c, 0x7b, 0x6d, 0x69, 0x6e, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0xa0, + 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, + 0x79, 0x7d, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x63, 0x79, 0x2c, 0x7b, 0x70, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, + 0x7d, 0xa0, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0x42, 0x7b, 0x6d, 0x69, 0x6e, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x70, + 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, + 0x67, 0x6e, 0x7d, 0xa0, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0x0e, 0x70, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x10, 0x70, 0x61, 0x74, + 0x74, 0x65, 0x72, 0x6e, 0x73, 0x02, 0x2c, 0x02, + 0x2e, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x06, + 0x4e, 0x61, 0x4e, 0x06, 0x6e, 0x61, 0x6e, 0x02, + 0x2b, 0x10, 0x70, 0x6c, 0x75, 0x73, 0x53, 0x69, + 0x67, 0x6e, 0x02, 0x2d, 0x12, 0x6d, 0x69, 0x6e, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, 0x25, + 0x16, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, + 0x53, 0x69, 0x67, 0x6e, 0x03, 0x1e, 0x22, 0x10, + 0x69, 0x6e, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, + 0x0e, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, + 0x04, 0x41, 0x24, 0x06, 0x41, 0x55, 0x44, 0x04, + 0x52, 0x24, 0x06, 0x42, 0x52, 0x4c, 0x06, 0x43, + 0x41, 0x24, 0x06, 0x43, 0x41, 0x44, 0x06, 0x43, + 0x4e, 0xa5, 0x06, 0x43, 0x4e, 0x59, 0x03, 0xa7, + 0x20, 0x06, 0x45, 0x53, 0x50, 0x03, 0xac, 0x20, + 0x06, 0x45, 0x55, 0x52, 0x02, 0xa3, 0x06, 0x47, + 0x42, 0x50, 0x06, 0x48, 0x4b, 0x24, 0x06, 0x48, + 0x4b, 0x44, 0x03, 0xaa, 0x20, 0x06, 0x49, 0x4c, + 0x53, 0x03, 0xb9, 0x20, 0x06, 0x49, 0x4e, 0x52, + 0x06, 0x4a, 0x50, 0xa5, 0x06, 0x4a, 0x50, 0x59, + 0x03, 0xa9, 0x20, 0x06, 0x4b, 0x52, 0x57, 0x06, + 0x4d, 0x58, 0x24, 0x06, 0x4d, 0x58, 0x4e, 0x06, + 0x4e, 0x5a, 0x24, 0x06, 0x4e, 0x5a, 0x44, 0x03, + 0x3f, 0x0e, 0x06, 0x54, 0x48, 0x42, 0x06, 0x4e, + 0x54, 0x24, 0x06, 0x54, 0x57, 0x44, 0x06, 0x55, + 0x53, 0x24, 0x06, 0x55, 0x53, 0x44, 0x03, 0xab, + 0x20, 0x06, 0x56, 0x4e, 0x44, 0x08, 0x46, 0x43, + 0x46, 0x41, 0x06, 0x58, 0x41, 0x46, 0x06, 0x45, + 0x43, 0x24, 0x06, 0x58, 0x43, 0x44, 0x06, 0x43, + 0x46, 0x41, 0x06, 0x58, 0x4f, 0x46, 0x08, 0x43, + 0x46, 0x50, 0x46, 0x06, 0x58, 0x50, 0x46, 0x14, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, + 0x65, 0x73, 0x52, 0x6e, 0x6f, 0x64, 0x65, 0x5f, + 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, + 0x69, 0x6e, 0x74, 0x6c, 0x2f, 0x6c, 0x6f, 0x63, + 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, + 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x70, 0x2f, 0x65, + 0x75, 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, + 0x9e, 0x01, 0x00, 0x01, 0x00, 0x27, 0x00, 0x89, + 0x01, 0xfc, 0x6a, 0x01, 0xa0, 0x01, 0x00, 0x00, + 0x00, 0x39, 0xd0, 0x00, 0x00, 0x00, 0x43, 0xd1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd2, 0x00, 0x00, + 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd4, 0x00, 0x00, 0x00, 0x04, 0xd5, 0x00, 0x00, + 0x00, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x04, 0xd7, + 0x00, 0x00, 0x00, 0x04, 0xd8, 0x00, 0x00, 0x00, + 0x04, 0xd9, 0x00, 0x00, 0x00, 0x04, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xdb, 0x00, 0x00, 0x00, 0x04, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, + 0x00, 0x04, 0xde, 0x00, 0x00, 0x00, 0x04, 0xdf, + 0x00, 0x00, 0x00, 0x04, 0xe0, 0x00, 0x00, 0x00, + 0x04, 0xe1, 0x00, 0x00, 0x00, 0x04, 0xe2, 0x00, + 0x00, 0x00, 0x26, 0x0f, 0x00, 0x4d, 0xe3, 0x00, + 0x00, 0x00, 0x0a, 0x4d, 0xe4, 0x00, 0x00, 0x00, + 0x09, 0x4d, 0xe5, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xe9, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, + 0xed, 0x00, 0x00, 0x00, 0x04, 0xee, 0x00, 0x00, + 0x00, 0x4d, 0xef, 0x00, 0x00, 0x00, 0x04, 0xf0, + 0x00, 0x00, 0x00, 0x4d, 0xf1, 0x00, 0x00, 0x00, + 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xf3, 0x00, + 0x00, 0x00, 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, + 0xf5, 0x00, 0x00, 0x00, 0x04, 0xf6, 0x00, 0x00, + 0x00, 0x4d, 0xf7, 0x00, 0x00, 0x00, 0x04, 0xf8, + 0x00, 0x00, 0x00, 0x4d, 0xf9, 0x00, 0x00, 0x00, + 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xfb, 0x00, + 0x00, 0x00, 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, + 0xfd, 0x00, 0x00, 0x00, 0x04, 0xfe, 0x00, 0x00, + 0x00, 0x4d, 0xff, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x01, 0x00, 0x00, 0x4d, 0x01, 0x01, 0x00, 0x00, + 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, 0x03, 0x01, + 0x00, 0x00, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, + 0x05, 0x01, 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, + 0x00, 0x4d, 0x07, 0x01, 0x00, 0x00, 0x04, 0x08, + 0x01, 0x00, 0x00, 0x4d, 0x09, 0x01, 0x00, 0x00, + 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x0b, 0x01, + 0x00, 0x00, 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, + 0x0d, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x01, 0x00, + 0x00, 0x4d, 0x0f, 0x01, 0x00, 0x00, 0x04, 0x10, + 0x01, 0x00, 0x00, 0x4d, 0x11, 0x01, 0x00, 0x00, + 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, 0x13, 0x01, + 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, + 0x15, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, + 0x00, 0x4d, 0x17, 0x01, 0x00, 0x00, 0x04, 0x18, + 0x01, 0x00, 0x00, 0x4d, 0x19, 0x01, 0x00, 0x00, + 0x04, 0x1a, 0x01, 0x00, 0x00, 0x4d, 0x1b, 0x01, + 0x00, 0x00, 0x04, 0x1c, 0x01, 0x00, 0x00, 0x4d, + 0x1d, 0x01, 0x00, 0x00, 0x04, 0x1e, 0x01, 0x00, + 0x00, 0x4d, 0x1f, 0x01, 0x00, 0x00, 0x04, 0x20, + 0x01, 0x00, 0x00, 0x4d, 0x21, 0x01, 0x00, 0x00, + 0x04, 0x22, 0x01, 0x00, 0x00, 0x4d, 0x23, 0x01, + 0x00, 0x00, 0x04, 0x24, 0x01, 0x00, 0x00, 0x4d, + 0x24, 0x01, 0x00, 0x00, 0x04, 0x25, 0x01, 0x00, + 0x00, 0x4d, 0x26, 0x01, 0x00, 0x00, 0x04, 0x27, + 0x01, 0x00, 0x00, 0x4d, 0x28, 0x01, 0x00, 0x00, + 0x04, 0x29, 0x01, 0x00, 0x00, 0x4d, 0x2a, 0x01, + 0x00, 0x00, 0x04, 0x2b, 0x01, 0x00, 0x00, 0x4d, + 0x2c, 0x01, 0x00, 0x00, 0x04, 0x2d, 0x01, 0x00, + 0x00, 0x4d, 0x2e, 0x01, 0x00, 0x00, 0x04, 0x2f, + 0x01, 0x00, 0x00, 0x4d, 0x30, 0x01, 0x00, 0x00, + 0x04, 0x31, 0x01, 0x00, 0x00, 0x4d, 0x32, 0x01, + 0x00, 0x00, 0x04, 0x33, 0x01, 0x00, 0x00, 0x4d, + 0x34, 0x01, 0x00, 0x00, 0x04, 0x35, 0x01, 0x00, + 0x00, 0x4d, 0x36, 0x01, 0x00, 0x00, 0x04, 0x37, + 0x01, 0x00, 0x00, 0x4d, 0x38, 0x01, 0x00, 0x00, + 0x04, 0x39, 0x01, 0x00, 0x00, 0x4d, 0x3a, 0x01, + 0x00, 0x00, 0x4d, 0x3b, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x3c, 0x01, 0x00, 0x00, 0x4d, 0x3d, 0x01, + 0x00, 0x00, 0x04, 0x33, 0x01, 0x00, 0x00, 0x4d, + 0x34, 0x01, 0x00, 0x00, 0x04, 0x2d, 0x01, 0x00, + 0x00, 0x4d, 0x2e, 0x01, 0x00, 0x00, 0x04, 0x3e, + 0x01, 0x00, 0x00, 0x4d, 0x28, 0x01, 0x00, 0x00, + 0x4d, 0x3f, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x40, + 0x01, 0x00, 0x00, 0x4d, 0x41, 0x01, 0x00, 0x00, + 0x04, 0x42, 0x01, 0x00, 0x00, 0x4d, 0x43, 0x01, + 0x00, 0x00, 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, + 0x09, 0x01, 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, + 0x00, 0x4d, 0x05, 0x01, 0x00, 0x00, 0x4d, 0x44, + 0x01, 0x00, 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x0b, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x04, 0xed, 0x00, 0x00, + 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x63, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x72, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x75, 0x01, 0x00, 0x00, 0x4d, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x4d, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x00, 0xbe, 0x01, 0xbe, 0x02, 0xbe, + 0x03, 0xbe, 0x04, 0xbe, 0x05, 0xbe, 0x06, 0xbe, + 0x07, 0xbe, 0x08, 0xbe, 0x09, 0xbe, 0x0a, 0xbe, + 0x0b, 0x26, 0x0c, 0x00, 0x4d, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, + 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, + 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, + 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, + 0x04, 0x85, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, + 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, + 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x63, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x72, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, + 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, + 0xd6, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x0c, + 0xbe, 0x0d, 0xbe, 0x0e, 0xbe, 0x0f, 0xbe, 0x10, + 0xbe, 0x11, 0xbe, 0x12, 0xbe, 0x13, 0xbe, 0x14, + 0xbe, 0x15, 0xbe, 0x16, 0xbe, 0x17, 0xbe, 0x18, + 0x26, 0x0d, 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, + 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, + 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, + 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, + 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, + 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, + 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, + 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, + 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, + 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, + 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, + 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, + 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x63, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x14, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, + 0x04, 0x94, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x4d, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x4d, + 0x79, 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x19, 0xbe, 0x1a, 0xbe, + 0x1b, 0xbe, 0x1c, 0xbe, 0x1d, 0xbe, 0x1e, 0xbe, + 0x1f, 0xbe, 0x20, 0xbe, 0x21, 0xbe, 0x22, 0xbe, + 0x23, 0xbe, 0x24, 0x26, 0x0c, 0x00, 0x4d, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, + 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, + 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, + 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x63, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x14, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, + 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x25, 0xbe, 0x26, 0xbe, 0x27, 0xbe, 0x28, + 0xbe, 0x29, 0xbe, 0x2a, 0xbe, 0x2b, 0xbe, 0x2c, + 0xbe, 0x2d, 0xbe, 0x2e, 0xbe, 0x2f, 0xbe, 0x30, + 0xbe, 0x31, 0x26, 0x0d, 0x00, 0x4d, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, + 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, + 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, + 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, + 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, + 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, + 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, + 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, + 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, + 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, + 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, + 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, + 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, + 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, + 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, + 0xa1, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x63, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x14, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, + 0x04, 0x94, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x93, 0x01, + 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, + 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x32, 0xbe, + 0x33, 0xbe, 0x34, 0xbe, 0x35, 0xbe, 0x36, 0xbe, + 0x37, 0xbe, 0x38, 0xbe, 0x39, 0xbe, 0x3a, 0xbe, + 0x3b, 0xbe, 0x3c, 0xbe, 0x3d, 0xbe, 0x3e, 0x26, + 0x0d, 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, + 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, + 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, + 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, + 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, + 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, + 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, + 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, + 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, + 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, + 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, + 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, + 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, + 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, + 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x63, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x72, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x93, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x93, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x4d, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x4d, + 0x79, 0x01, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x3f, 0xbe, 0x40, 0xbe, + 0x41, 0xbe, 0x42, 0xbe, 0x43, 0xbe, 0x44, 0xbe, + 0x45, 0xbe, 0x46, 0xbe, 0x47, 0xbe, 0x48, 0xbe, + 0x49, 0xbe, 0x4a, 0x26, 0x0c, 0x00, 0x4d, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, + 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, + 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, + 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x63, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x14, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, + 0x94, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, + 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x74, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, + 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x46, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0xed, 0x00, + 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x63, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x49, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x72, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xa2, 0x01, + 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, + 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, + 0x00, 0x26, 0x04, 0x00, 0x4d, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, + 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, + 0x04, 0xa5, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa2, 0x01, + 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, + 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, + 0x00, 0x26, 0x04, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, + 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x4b, 0xbe, 0x4c, 0xbe, 0x4d, 0xbe, 0x4e, 0xbe, + 0x4f, 0xbe, 0x50, 0xbe, 0x51, 0xbe, 0x52, 0xbe, + 0x53, 0xbe, 0x54, 0xbe, 0x55, 0xbe, 0x56, 0xbe, + 0x57, 0xbe, 0x58, 0x26, 0x0e, 0x00, 0x4d, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, + 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, + 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, + 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, + 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, + 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, + 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, + 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, 0x04, + 0xb2, 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, + 0x00, 0x26, 0x0e, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, + 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, + 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, + 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, + 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, + 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, + 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, + 0x04, 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, + 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, 0x26, + 0x0e, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x63, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x72, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x75, 0x01, 0x00, 0x00, 0x4d, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x4d, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x59, 0xbe, 0x5a, 0xbe, 0x5b, 0xbe, + 0x5c, 0xbe, 0x5d, 0xbe, 0x5e, 0xbe, 0x5f, 0xbe, + 0x60, 0xbe, 0x61, 0xbe, 0x62, 0xbe, 0x63, 0xbe, + 0x64, 0x26, 0x0c, 0x00, 0x4d, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0xb4, 0x01, 0x00, 0x00, 0x04, 0xb5, + 0x01, 0x00, 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, + 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, + 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, 0x04, + 0xba, 0x01, 0x00, 0x00, 0x04, 0xbb, 0x01, 0x00, + 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, 0x04, 0xbd, + 0x01, 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, + 0x04, 0xbf, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xb4, 0x01, + 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, 0x04, + 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, + 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, 0x04, 0xb9, + 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, + 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, 0x01, + 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, 0x04, + 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x63, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x72, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xc0, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xc0, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x4d, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x4d, + 0x79, 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x65, 0xbe, 0x66, 0xbe, + 0x67, 0xbe, 0x68, 0xbe, 0x69, 0xbe, 0x6a, 0xbe, + 0x6b, 0xbe, 0x6c, 0xbe, 0x6d, 0xbe, 0x6e, 0xbe, + 0x6f, 0xbe, 0x70, 0x26, 0x0c, 0x00, 0x4d, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, + 0x04, 0xc2, 0x01, 0x00, 0x00, 0x04, 0xc3, 0x01, + 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, 0x04, + 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, + 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, + 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, + 0x04, 0xca, 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, + 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, + 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, + 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, + 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, + 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, + 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, + 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, 0xd8, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x63, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x14, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xd9, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, + 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x71, 0xbe, + 0x72, 0xbe, 0x73, 0xbe, 0x74, 0xbe, 0x75, 0xbe, + 0x76, 0xbe, 0x77, 0xbe, 0x78, 0xbe, 0x79, 0xbe, + 0x7a, 0xbe, 0x7b, 0xbe, 0x7c, 0x26, 0x0c, 0x00, + 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, + 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, 0x00, 0x04, + 0xc3, 0x01, 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, + 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, + 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, + 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, + 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, 0x04, + 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, + 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, + 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, + 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, + 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, + 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, + 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, + 0x04, 0xd8, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x63, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xd9, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0xd9, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, + 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x04, 0xed, 0x00, 0x00, 0x00, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x63, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x14, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, + 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, 0x04, + 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, + 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, 0xe0, + 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, 0x00, + 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, 0xe3, 0x01, + 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, 0x04, + 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, + 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, + 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, + 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, + 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, + 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, + 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, + 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, + 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, + 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, + 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, + 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, + 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, + 0x26, 0x20, 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, + 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0xfb, 0x01, + 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, + 0xfc, 0x01, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, + 0x80, 0x04, 0xfd, 0x01, 0x00, 0x00, 0x4d, 0x23, + 0x00, 0x00, 0x80, 0x04, 0xfe, 0x01, 0x00, 0x00, + 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0xff, 0x01, + 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, + 0x00, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, + 0x80, 0x04, 0x01, 0x02, 0x00, 0x00, 0x4d, 0x27, + 0x00, 0x00, 0x80, 0x04, 0x02, 0x02, 0x00, 0x00, + 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x03, 0x02, + 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, + 0x04, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, + 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, 0x4d, 0x2b, + 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, 0x00, 0x00, + 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x07, 0x02, + 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, + 0x08, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, + 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, 0x2f, + 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, + 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, + 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, + 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, + 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x33, + 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, + 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, + 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, + 0x10, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, + 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, 0x37, + 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, + 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, + 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, + 0x14, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, + 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, 0x3b, + 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, + 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, + 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, + 0x18, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, + 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, 0x3f, + 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, + 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, + 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, + 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, + 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x43, + 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, + 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, + 0x20, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, + 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, 0x47, + 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, + 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, + 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, + 0x24, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, + 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, 0x4b, + 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, + 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, + 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, + 0x28, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, + 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, 0x4f, + 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, + 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, + 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, + 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, + 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x53, + 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, + 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, + 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, + 0x30, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, + 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, 0x57, + 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, + 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, + 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, + 0x34, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, + 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, 0x5b, + 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, + 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, + 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, + 0x38, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, + 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, 0x5f, + 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, + 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, + 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, + 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, + 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x63, + 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, + 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, + 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, + 0x40, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, + 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, 0x67, + 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, + 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, + 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, + 0x44, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, + 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, 0x6b, + 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, + 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, + 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, + 0x48, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, + 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, 0x6f, + 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, + 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, + 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, + 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, + 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x73, + 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, + 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, + 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, + 0x50, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, + 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, 0x77, + 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, + 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, + 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, + 0x54, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, + 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, 0x7b, + 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, + 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, + 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, + 0x58, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, + 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, 0x7f, + 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, + 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, + 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, + 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, + 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x83, + 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, + 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, + 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, + 0x60, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, + 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, 0x87, + 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, + 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, + 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, + 0x64, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, + 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, 0x8b, + 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, + 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, + 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, + 0x68, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, + 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, 0x8f, + 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, + 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, + 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, + 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, + 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x93, + 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, + 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, + 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, + 0x70, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, + 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, 0x97, + 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, + 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, + 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, + 0x74, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, + 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, 0x9b, + 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, + 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, + 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, + 0x78, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, + 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, 0x9f, + 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, + 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, + 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, + 0x7c, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, + 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, 0xa3, + 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, + 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, + 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, + 0x80, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, + 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, 0xa7, + 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, + 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, + 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, + 0x84, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, + 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, 0xab, + 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, + 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, + 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, + 0x88, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, + 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, 0xaf, + 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, + 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, + 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, + 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, + 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xb3, + 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, + 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, + 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, + 0x90, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, + 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, 0xb7, + 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, + 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, + 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, + 0x94, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, + 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, 0xbb, + 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, + 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, + 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, + 0x98, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, + 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, 0xbf, + 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, + 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, + 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, + 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, + 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xc3, + 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, + 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, + 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, + 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, + 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xc7, + 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, + 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, + 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, + 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, + 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xcb, + 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, + 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, + 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, + 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, + 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xcf, + 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, + 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, + 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, + 0xac, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, + 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, + 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, + 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, + 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, + 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, + 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, + 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, + 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x80, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, + 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x80, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x80, 0x4d, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, + 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, 0x04, + 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, + 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, 0xe0, + 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, 0x00, + 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, 0xe3, 0x01, + 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, 0x04, + 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, + 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, + 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, + 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, + 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, + 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, + 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, + 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, + 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, + 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, + 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, + 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, + 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, + 0x26, 0x20, 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, + 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0xfb, 0x01, + 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, + 0xfc, 0x01, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, + 0x80, 0x04, 0xfd, 0x01, 0x00, 0x00, 0x4d, 0x23, + 0x00, 0x00, 0x80, 0x04, 0xfe, 0x01, 0x00, 0x00, + 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0xff, 0x01, + 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, + 0x00, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, + 0x80, 0x04, 0x01, 0x02, 0x00, 0x00, 0x4d, 0x27, + 0x00, 0x00, 0x80, 0x04, 0x02, 0x02, 0x00, 0x00, + 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x03, 0x02, + 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, + 0x04, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, + 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, 0x4d, 0x2b, + 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, 0x00, 0x00, + 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x07, 0x02, + 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, + 0x08, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, + 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, 0x2f, + 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, + 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, + 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, + 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, + 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x33, + 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, + 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, + 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, + 0x10, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, + 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, 0x37, + 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, + 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, + 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, + 0x14, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, + 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, 0x3b, + 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, + 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, + 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, + 0x18, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, + 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, 0x3f, + 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, + 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, + 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, + 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, + 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x43, + 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, + 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, + 0x20, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, + 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, 0x47, + 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, + 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, + 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, + 0x24, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, + 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, 0x4b, + 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, + 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, + 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, + 0x28, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, + 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, 0x4f, + 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, + 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, + 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, + 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, + 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x53, + 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, + 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, + 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, + 0x30, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, + 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, 0x57, + 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, + 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, + 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, + 0x34, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, + 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, 0x5b, + 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, + 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, + 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, + 0x38, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, + 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, 0x5f, + 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, + 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, + 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, + 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, + 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x63, + 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, + 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, + 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, + 0x40, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, + 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, 0x67, + 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, + 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, + 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, + 0x44, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, + 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, 0x6b, + 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, + 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, + 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, + 0x48, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, + 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, 0x6f, + 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, + 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, + 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, + 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, + 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x73, + 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, + 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, + 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, + 0x50, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, + 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, 0x77, + 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, + 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, + 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, + 0x54, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, + 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, 0x7b, + 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, + 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, + 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, + 0x58, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, + 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, 0x7f, + 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, + 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, + 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, + 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, + 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x83, + 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, + 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, + 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, + 0x60, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, + 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, 0x87, + 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, + 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, + 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, + 0x64, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, + 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, 0x8b, + 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, + 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, + 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, + 0x68, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, + 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, 0x8f, + 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, + 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, + 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, + 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, + 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x93, + 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, + 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, + 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, + 0x70, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, + 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, 0x97, + 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, + 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, + 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, + 0x74, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, + 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, 0x9b, + 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, + 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, + 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, + 0x78, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, + 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, 0x9f, + 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, + 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, + 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, + 0x7c, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, + 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, 0xa3, + 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, + 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, + 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, + 0x80, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, + 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, 0xa7, + 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, + 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, + 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, + 0x84, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, + 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, 0xab, + 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, + 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, + 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, + 0x88, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, + 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, 0xaf, + 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, + 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, + 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, + 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, + 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xb3, + 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, + 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, + 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, + 0x90, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, + 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, 0xb7, + 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, + 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, + 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, + 0x94, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, + 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, 0xbb, + 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, + 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, + 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, + 0x98, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, + 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, 0xbf, + 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, + 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, + 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, + 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, + 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xc3, + 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, + 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, + 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, + 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, + 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xc7, + 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, + 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, + 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, + 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, + 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xcb, + 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, + 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, + 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, + 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, + 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xcf, + 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, + 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, + 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, + 0xac, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, + 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, + 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, + 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, + 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, + 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, + 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, + 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, + 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, + 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x80, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, + 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, 0x04, + 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, + 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, 0xe0, + 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, 0x00, + 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, 0xe3, 0x01, + 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, 0x04, + 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, + 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, + 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, + 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, + 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, + 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, + 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, + 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, + 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, + 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, + 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, + 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, + 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, + 0x26, 0x20, 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, + 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0xfb, 0x01, + 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, + 0xfc, 0x01, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, + 0x80, 0x04, 0xfd, 0x01, 0x00, 0x00, 0x4d, 0x23, + 0x00, 0x00, 0x80, 0x04, 0xfe, 0x01, 0x00, 0x00, + 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0xff, 0x01, + 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, + 0x00, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, + 0x80, 0x04, 0x01, 0x02, 0x00, 0x00, 0x4d, 0x27, + 0x00, 0x00, 0x80, 0x04, 0x02, 0x02, 0x00, 0x00, + 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x03, 0x02, + 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, + 0x04, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, + 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, 0x4d, 0x2b, + 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, 0x00, 0x00, + 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x07, 0x02, + 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, + 0x08, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, + 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, 0x2f, + 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, + 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, + 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, + 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, + 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x33, + 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, + 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, + 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, + 0x10, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, + 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, 0x37, + 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, + 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, + 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, + 0x14, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, + 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, 0x3b, + 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, + 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, + 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, + 0x18, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, + 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, 0x3f, + 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, + 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, + 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, + 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, + 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x43, + 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, + 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, + 0x20, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, + 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, 0x47, + 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, + 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, + 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, + 0x24, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, + 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, 0x4b, + 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, + 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, + 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, + 0x28, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, + 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, 0x4f, + 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, + 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, + 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, + 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, + 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x53, + 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, + 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, + 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, + 0x30, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, + 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, 0x57, + 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, + 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, + 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, + 0x34, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, + 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, 0x5b, + 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, + 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, + 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, + 0x38, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, + 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, 0x5f, + 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, + 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, + 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, + 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, + 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x63, + 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, + 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, + 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, + 0x40, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, + 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, 0x67, + 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, + 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, + 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, + 0x44, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, + 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, 0x6b, + 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, + 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, + 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, + 0x48, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, + 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, 0x6f, + 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, + 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, + 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, + 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, + 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x73, + 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, + 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, + 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, + 0x50, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, + 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, 0x77, + 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, + 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, + 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, + 0x54, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, + 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, 0x7b, + 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, + 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, + 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, + 0x58, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, + 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, 0x7f, + 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, + 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, + 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, + 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, + 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x83, + 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, + 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, + 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, + 0x60, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, + 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, 0x87, + 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, + 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, + 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, + 0x64, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, + 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, 0x8b, + 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, + 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, + 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, + 0x68, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, + 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, 0x8f, + 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, + 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, + 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, + 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, + 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x93, + 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, + 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, + 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, + 0x70, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, + 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, 0x97, + 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, + 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, + 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, + 0x74, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, + 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, 0x9b, + 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, + 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, + 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, + 0x78, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, + 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, 0x9f, + 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, + 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, + 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, + 0x7c, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, + 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, 0xa3, + 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, + 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, + 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, + 0x80, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, + 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, 0xa7, + 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, + 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, + 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, + 0x84, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, + 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, 0xab, + 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, + 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, + 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, + 0x88, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, + 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, 0xaf, + 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, + 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, + 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, + 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, + 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xb3, + 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, + 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, + 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, + 0x90, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, + 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, 0xb7, + 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, + 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, + 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, + 0x94, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, + 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, 0xbb, + 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, + 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, + 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, + 0x98, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, + 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, 0xbf, + 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, + 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, + 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, + 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, + 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xc3, + 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, + 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, + 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, + 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, + 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xc7, + 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, + 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, + 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, + 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, + 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xcb, + 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, + 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, + 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, + 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, + 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xcf, + 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, + 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, + 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, + 0xac, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, + 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, + 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, + 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, + 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, + 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, + 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, + 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, + 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, + 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x80, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, + 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x7d, + 0xbe, 0x7e, 0xbe, 0x7f, 0xbe, 0x80, 0xbe, 0x81, + 0xbe, 0x82, 0xbe, 0x83, 0xbe, 0x84, 0xbe, 0x85, + 0xbe, 0x86, 0xbe, 0x87, 0xbe, 0x88, 0x26, 0x0c, + 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x04, 0xc9, 0x02, 0x00, 0x00, + 0x04, 0xca, 0x02, 0x00, 0x00, 0x04, 0xcb, 0x02, + 0x00, 0x00, 0x04, 0xcc, 0x02, 0x00, 0x00, 0x04, + 0xcd, 0x02, 0x00, 0x00, 0x04, 0xce, 0x02, 0x00, + 0x00, 0x04, 0xcf, 0x02, 0x00, 0x00, 0x04, 0xd0, + 0x02, 0x00, 0x00, 0x04, 0xd1, 0x02, 0x00, 0x00, + 0x04, 0xd2, 0x02, 0x00, 0x00, 0x04, 0xd3, 0x02, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x04, + 0xc9, 0x02, 0x00, 0x00, 0x04, 0xca, 0x02, 0x00, + 0x00, 0x04, 0xcb, 0x02, 0x00, 0x00, 0x04, 0xcc, + 0x02, 0x00, 0x00, 0x04, 0xcd, 0x02, 0x00, 0x00, + 0x04, 0xce, 0x02, 0x00, 0x00, 0x04, 0xcf, 0x02, + 0x00, 0x00, 0x04, 0xd0, 0x02, 0x00, 0x00, 0x04, + 0xd1, 0x02, 0x00, 0x00, 0x04, 0xd2, 0x02, 0x00, + 0x00, 0x04, 0xd3, 0x02, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x63, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x72, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xd4, 0x02, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0xd4, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd4, 0x02, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, + 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x04, 0xed, 0x00, 0x00, 0x00, 0x04, 0x46, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, + 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x63, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x14, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xd5, 0x02, 0x00, 0x00, 0x04, 0xd6, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0xd5, 0x02, 0x00, 0x00, + 0x04, 0xd6, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd5, 0x02, + 0x00, 0x00, 0x04, 0xd6, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, + 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, 0xe2, + 0x00, 0x00, 0x00, 0x4d, 0xd7, 0x02, 0x00, 0x00, + 0x4d, 0xd8, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xd9, + 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xda, + 0x02, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xdb, 0x02, + 0x00, 0x00, 0x4d, 0xdc, 0x02, 0x00, 0x00, 0x04, + 0xdd, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x02, 0x00, + 0x00, 0x4d, 0xdf, 0x02, 0x00, 0x00, 0x0b, 0x04, + 0xe0, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x02, 0x00, + 0x00, 0x04, 0xe1, 0x02, 0x00, 0x00, 0x4d, 0xde, + 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x02, 0x00, 0x00, + 0x0b, 0x04, 0xe3, 0x02, 0x00, 0x00, 0x4d, 0xdc, + 0x02, 0x00, 0x00, 0x04, 0xe4, 0x02, 0x00, 0x00, + 0x4d, 0xde, 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x02, + 0x00, 0x00, 0x4d, 0xe6, 0x02, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0xe7, 0x02, 0x00, 0x00, 0x4d, 0xdf, + 0x02, 0x00, 0x00, 0x04, 0xe8, 0x02, 0x00, 0x00, + 0x4d, 0xe9, 0x02, 0x00, 0x00, 0x04, 0xea, 0x02, + 0x00, 0x00, 0x4d, 0xeb, 0x02, 0x00, 0x00, 0x04, + 0xec, 0x02, 0x00, 0x00, 0x4d, 0xed, 0x02, 0x00, + 0x00, 0x04, 0xee, 0x02, 0x00, 0x00, 0x4d, 0xef, + 0x02, 0x00, 0x00, 0x04, 0xf0, 0x02, 0x00, 0x00, + 0x4d, 0xf1, 0x02, 0x00, 0x00, 0x04, 0xf2, 0x02, + 0x00, 0x00, 0x4d, 0xf3, 0x02, 0x00, 0x00, 0x4d, + 0xd9, 0x02, 0x00, 0x00, 0x4d, 0xf4, 0x02, 0x00, + 0x00, 0x0b, 0x04, 0xf5, 0x02, 0x00, 0x00, 0x4d, + 0xf6, 0x02, 0x00, 0x00, 0x04, 0xf7, 0x02, 0x00, + 0x00, 0x4d, 0xf8, 0x02, 0x00, 0x00, 0x04, 0xf9, + 0x02, 0x00, 0x00, 0x4d, 0xfa, 0x02, 0x00, 0x00, + 0x04, 0xfb, 0x02, 0x00, 0x00, 0x4d, 0xfc, 0x02, + 0x00, 0x00, 0x04, 0xfd, 0x02, 0x00, 0x00, 0x4d, + 0xfe, 0x02, 0x00, 0x00, 0x04, 0xff, 0x02, 0x00, + 0x00, 0x4d, 0x00, 0x03, 0x00, 0x00, 0x04, 0x01, + 0x03, 0x00, 0x00, 0x4d, 0x02, 0x03, 0x00, 0x00, + 0x04, 0x03, 0x03, 0x00, 0x00, 0x4d, 0x04, 0x03, + 0x00, 0x00, 0x04, 0x05, 0x03, 0x00, 0x00, 0x4d, + 0x06, 0x03, 0x00, 0x00, 0x04, 0x07, 0x03, 0x00, + 0x00, 0x4d, 0x08, 0x03, 0x00, 0x00, 0x04, 0x09, + 0x03, 0x00, 0x00, 0x4d, 0x0a, 0x03, 0x00, 0x00, + 0x04, 0x0b, 0x03, 0x00, 0x00, 0x4d, 0x0c, 0x03, + 0x00, 0x00, 0x04, 0x0d, 0x03, 0x00, 0x00, 0x4d, + 0x0e, 0x03, 0x00, 0x00, 0x04, 0x0f, 0x03, 0x00, + 0x00, 0x4d, 0x10, 0x03, 0x00, 0x00, 0x04, 0x11, + 0x03, 0x00, 0x00, 0x4d, 0x12, 0x03, 0x00, 0x00, + 0x04, 0x13, 0x03, 0x00, 0x00, 0x4d, 0x14, 0x03, + 0x00, 0x00, 0x04, 0x15, 0x03, 0x00, 0x00, 0x4d, + 0x16, 0x03, 0x00, 0x00, 0x04, 0x17, 0x03, 0x00, + 0x00, 0x4d, 0x18, 0x03, 0x00, 0x00, 0x04, 0x19, + 0x03, 0x00, 0x00, 0x4d, 0x1a, 0x03, 0x00, 0x00, + 0x04, 0x1b, 0x03, 0x00, 0x00, 0x4d, 0x1c, 0x03, + 0x00, 0x00, 0x04, 0x1d, 0x03, 0x00, 0x00, 0x4d, + 0x1e, 0x03, 0x00, 0x00, 0x04, 0x1f, 0x03, 0x00, + 0x00, 0x4d, 0x20, 0x03, 0x00, 0x00, 0x4d, 0x21, + 0x03, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x00, + 0x24, 0x01, 0x00, 0xcc, 0x28, 0xc4, 0x0c, 0x01, + 0x00, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, + 0x31, 0x33, 0x07, 0x02, 0x37, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_fa_size = 25207; + +const uint8_t intl_fa[25207] = { + 0x01, 0xd4, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x66, 0x61, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x13, + 0x7b, 0x00, 0x31, 0x00, 0x7d, 0x00, 0x0c, 0x06, + 0x0f, 0x20, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x0a, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x0c, 0x6d, 0x65, 0x64, 0x69, 0x75, 0x6d, 0x1b, + 0x7b, 0x00, 0x31, 0x00, 0x7d, 0x00, 0x0c, 0x06, + 0x20, 0x00, 0x33, 0x06, 0x27, 0x06, 0x39, 0x06, + 0x2a, 0x06, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x08, 0x66, 0x75, 0x6c, 0x6c, 0x08, + 0x6c, 0x6f, 0x6e, 0x67, 0x02, 0x64, 0x06, 0x63, + 0x63, 0x63, 0x02, 0x45, 0x06, 0x45, 0x20, 0x64, + 0x04, 0x45, 0x64, 0x10, 0x45, 0x20, 0x68, 0x3a, + 0x6d, 0x6d, 0x20, 0x61, 0x06, 0x45, 0x68, 0x6d, + 0x0c, 0x45, 0x20, 0x48, 0x3a, 0x6d, 0x6d, 0x06, + 0x45, 0x48, 0x6d, 0x16, 0x45, 0x20, 0x68, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x08, + 0x45, 0x68, 0x6d, 0x73, 0x12, 0x45, 0x20, 0x48, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x08, 0x45, + 0x48, 0x6d, 0x73, 0x06, 0x79, 0x20, 0x47, 0x04, + 0x47, 0x79, 0x0e, 0x4d, 0x4d, 0x4d, 0x20, 0x79, + 0x20, 0x47, 0x0a, 0x47, 0x79, 0x4d, 0x4d, 0x4d, + 0x12, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, + 0x20, 0x47, 0x0c, 0x47, 0x79, 0x4d, 0x4d, 0x4d, + 0x64, 0x16, 0x45, 0x20, 0x64, 0x20, 0x4d, 0x4d, + 0x4d, 0x20, 0x79, 0x20, 0x47, 0x0e, 0x47, 0x79, + 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x06, 0x68, 0x20, + 0x61, 0x02, 0x68, 0x02, 0x48, 0x12, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x20, 0x28, 0x5a, 0x29, 0x0a, + 0x48, 0x48, 0x6d, 0x6d, 0x5a, 0x0c, 0x68, 0x3a, + 0x6d, 0x6d, 0x20, 0x61, 0x04, 0x68, 0x6d, 0x08, + 0x48, 0x3a, 0x6d, 0x6d, 0x04, 0x48, 0x6d, 0x12, + 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, + 0x61, 0x06, 0x68, 0x6d, 0x73, 0x0e, 0x48, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x06, 0x48, 0x6d, + 0x73, 0x16, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x61, 0x20, 0x76, 0x08, 0x68, 0x6d, + 0x73, 0x76, 0x14, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x76, 0x08, 0x48, 0x6d, + 0x73, 0x76, 0x10, 0x68, 0x3a, 0x6d, 0x6d, 0x20, + 0x61, 0x20, 0x76, 0x06, 0x68, 0x6d, 0x76, 0x0e, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x20, 0x76, 0x06, + 0x48, 0x6d, 0x76, 0x02, 0x4c, 0x02, 0x4d, 0x06, + 0x4d, 0x2f, 0x64, 0x04, 0x4d, 0x64, 0x0a, 0x45, + 0x20, 0x4d, 0x2f, 0x64, 0x06, 0x4d, 0x45, 0x64, + 0x06, 0x4c, 0x4c, 0x4c, 0x06, 0x4d, 0x4d, 0x4d, + 0x0a, 0x64, 0x20, 0x4c, 0x4c, 0x4c, 0x08, 0x4d, + 0x4d, 0x4d, 0x64, 0x0e, 0x45, 0x20, 0x64, 0x20, + 0x4c, 0x4c, 0x4c, 0x0a, 0x4d, 0x4d, 0x4d, 0x45, + 0x64, 0x0c, 0x64, 0x20, 0x4c, 0x4c, 0x4c, 0x4c, + 0x0a, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x10, 0x45, + 0x20, 0x64, 0x20, 0x4c, 0x4c, 0x4c, 0x4c, 0x0c, + 0x4d, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x08, 0x6d, 0x6d, 0x73, + 0x73, 0x04, 0x6d, 0x73, 0x02, 0x79, 0x06, 0x79, + 0x2f, 0x4d, 0x04, 0x79, 0x4d, 0x0a, 0x79, 0x2f, + 0x4d, 0x2f, 0x64, 0x06, 0x79, 0x4d, 0x64, 0x0e, + 0x45, 0x20, 0x79, 0x2f, 0x4d, 0x2f, 0x64, 0x08, + 0x79, 0x4d, 0x45, 0x64, 0x0a, 0x4d, 0x4d, 0x4d, + 0x20, 0x79, 0x08, 0x79, 0x4d, 0x4d, 0x4d, 0x0e, + 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0a, + 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x12, 0x45, 0x20, + 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0c, + 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0c, 0x4d, + 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0a, 0x79, 0x4d, + 0x4d, 0x4d, 0x4d, 0x1a, 0x45, 0x45, 0x45, 0x45, + 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, + 0x79, 0x14, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x45, + 0x45, 0x45, 0x45, 0x64, 0x0c, 0x51, 0x51, 0x51, + 0x51, 0x20, 0x79, 0x08, 0x79, 0x51, 0x51, 0x51, + 0x0a, 0x79, 0x51, 0x51, 0x51, 0x51, 0x20, 0x61, + 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, + 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x10, + 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, + 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x16, + 0x64, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x73, 0x1c, 0x48, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x28, 0x7a, 0x7a, 0x7a, + 0x7a, 0x29, 0x12, 0x68, 0x6d, 0x6d, 0x73, 0x73, + 0x7a, 0x7a, 0x7a, 0x7a, 0x16, 0x48, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x28, 0x7a, 0x29, + 0x08, 0x68, 0x6d, 0x73, 0x7a, 0x16, 0x74, 0x69, + 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x73, 0x0e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x73, 0x03, 0x98, 0x06, 0x03, 0x41, 0x06, 0x03, + 0x45, 0x06, 0x03, 0x22, 0x06, 0x03, 0x27, 0x06, + 0x03, 0x33, 0x06, 0x03, 0x46, 0x06, 0x03, 0x2f, + 0x06, 0x0c, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x0f, 0x98, 0x06, 0x27, 0x06, 0x46, 0x06, 0x48, + 0x06, 0xcc, 0x06, 0x47, 0x06, 0x54, 0x06, 0x0d, + 0x41, 0x06, 0x48, 0x06, 0x31, 0x06, 0xcc, 0x06, + 0x47, 0x06, 0x54, 0x06, 0x09, 0x45, 0x06, 0x27, + 0x06, 0x31, 0x06, 0x33, 0x06, 0x0b, 0x22, 0x06, + 0x48, 0x06, 0x31, 0x06, 0xcc, 0x06, 0x44, 0x06, + 0x07, 0x45, 0x06, 0x47, 0x06, 0x54, 0x06, 0x09, + 0x98, 0x06, 0x48, 0x06, 0x26, 0x06, 0x46, 0x06, + 0x0d, 0x98, 0x06, 0x48, 0x06, 0x26, 0x06, 0xcc, + 0x06, 0x47, 0x06, 0x54, 0x06, 0x07, 0x27, 0x06, + 0x48, 0x06, 0x2a, 0x06, 0x0f, 0x33, 0x06, 0x7e, + 0x06, 0x2a, 0x06, 0x27, 0x06, 0x45, 0x06, 0x28, + 0x06, 0x31, 0x06, 0x0b, 0x27, 0x06, 0xa9, 0x06, + 0x2a, 0x06, 0x28, 0x06, 0x31, 0x06, 0x0d, 0x46, + 0x06, 0x48, 0x06, 0x27, 0x06, 0x45, 0x06, 0x28, + 0x06, 0x31, 0x06, 0x0d, 0x2f, 0x06, 0x33, 0x06, + 0x27, 0x06, 0x45, 0x06, 0x28, 0x06, 0x31, 0x06, + 0x0c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x73, 0x03, + 0xcc, 0x06, 0x03, 0x86, 0x06, 0x03, 0x7e, 0x06, + 0x03, 0x2c, 0x06, 0x03, 0x34, 0x06, 0x0d, 0xcc, + 0x06, 0xa9, 0x06, 0x34, 0x06, 0x46, 0x06, 0x28, + 0x06, 0x47, 0x06, 0x0d, 0x2f, 0x06, 0x48, 0x06, + 0x34, 0x06, 0x46, 0x06, 0x28, 0x06, 0x47, 0x06, + 0x0f, 0x33, 0x06, 0x47, 0x06, 0x0c, 0x20, 0x34, + 0x06, 0x46, 0x06, 0x28, 0x06, 0x47, 0x06, 0x11, + 0x86, 0x06, 0x47, 0x06, 0x27, 0x06, 0x31, 0x06, + 0x34, 0x06, 0x46, 0x06, 0x28, 0x06, 0x47, 0x06, + 0x0f, 0x7e, 0x06, 0x46, 0x06, 0x2c, 0x06, 0x34, + 0x06, 0x46, 0x06, 0x28, 0x06, 0x47, 0x06, 0x09, + 0x2c, 0x06, 0x45, 0x06, 0x39, 0x06, 0x47, 0x06, + 0x09, 0x34, 0x06, 0x46, 0x06, 0x28, 0x06, 0x47, + 0x06, 0x08, 0x64, 0x61, 0x79, 0x73, 0x04, 0x42, + 0x45, 0x08, 0x65, 0x72, 0x61, 0x73, 0x13, 0x42, + 0x06, 0x28, 0x06, 0x44, 0x06, 0x0c, 0x20, 0x27, + 0x06, 0x32, 0x06, 0x38, 0x06, 0x47, 0x06, 0x31, + 0x06, 0x04, 0x61, 0x6d, 0x11, 0x28, 0x06, 0x39, + 0x06, 0x2f, 0x06, 0x27, 0x06, 0x32, 0x06, 0x38, + 0x06, 0x47, 0x06, 0x31, 0x06, 0x04, 0x70, 0x6d, + 0x14, 0x64, 0x61, 0x79, 0x50, 0x65, 0x72, 0x69, + 0x6f, 0x64, 0x73, 0x06, 0x4d, 0x30, 0x31, 0x06, + 0x4d, 0x30, 0x32, 0x06, 0x4d, 0x30, 0x33, 0x06, + 0x4d, 0x30, 0x34, 0x06, 0x4d, 0x30, 0x35, 0x06, + 0x4d, 0x30, 0x36, 0x06, 0x4d, 0x30, 0x37, 0x06, + 0x4d, 0x30, 0x38, 0x06, 0x4d, 0x30, 0x39, 0x06, + 0x4d, 0x31, 0x30, 0x06, 0x4d, 0x31, 0x31, 0x06, + 0x4d, 0x31, 0x32, 0x08, 0x54, 0x6f, 0x75, 0x74, + 0x08, 0x42, 0x61, 0x62, 0x61, 0x0a, 0x48, 0x61, + 0x74, 0x6f, 0x72, 0x0a, 0x4b, 0x69, 0x61, 0x68, + 0x6b, 0x08, 0x54, 0x6f, 0x62, 0x61, 0x0c, 0x41, + 0x6d, 0x73, 0x68, 0x69, 0x72, 0x10, 0x42, 0x61, + 0x72, 0x61, 0x6d, 0x68, 0x61, 0x74, 0x12, 0x42, + 0x61, 0x72, 0x61, 0x6d, 0x6f, 0x75, 0x64, 0x61, + 0x0e, 0x42, 0x61, 0x73, 0x68, 0x61, 0x6e, 0x73, + 0x0a, 0x50, 0x61, 0x6f, 0x6e, 0x61, 0x08, 0x45, + 0x70, 0x65, 0x70, 0x0a, 0x4d, 0x65, 0x73, 0x72, + 0x61, 0x0a, 0x4e, 0x61, 0x73, 0x69, 0x65, 0x08, + 0x45, 0x52, 0x41, 0x30, 0x08, 0x45, 0x52, 0x41, + 0x31, 0x10, 0x4d, 0x65, 0x73, 0x6b, 0x65, 0x72, + 0x65, 0x6d, 0x0c, 0x54, 0x65, 0x6b, 0x65, 0x6d, + 0x74, 0x0a, 0x48, 0x65, 0x64, 0x61, 0x72, 0x0c, + 0x54, 0x61, 0x68, 0x73, 0x61, 0x73, 0x06, 0x54, + 0x65, 0x72, 0x0e, 0x59, 0x65, 0x6b, 0x61, 0x74, + 0x69, 0x74, 0x0e, 0x4d, 0x65, 0x67, 0x61, 0x62, + 0x69, 0x74, 0x0c, 0x4d, 0x69, 0x61, 0x7a, 0x69, + 0x61, 0x0c, 0x47, 0x65, 0x6e, 0x62, 0x6f, 0x74, + 0x08, 0x53, 0x65, 0x6e, 0x65, 0x0a, 0x48, 0x61, + 0x6d, 0x6c, 0x65, 0x0e, 0x4e, 0x65, 0x68, 0x61, + 0x73, 0x73, 0x65, 0x0e, 0x50, 0x61, 0x67, 0x75, + 0x6d, 0x65, 0x6e, 0x03, 0x42, 0x06, 0x0b, 0x42, + 0x06, 0x2e, 0x00, 0x2f, 0x06, 0x2e, 0x00, 0x45, + 0x06, 0x09, 0x2f, 0x06, 0x2e, 0x00, 0x45, 0x06, + 0x2e, 0x00, 0x09, 0x42, 0x06, 0x2e, 0x00, 0x45, + 0x06, 0x2e, 0x00, 0x05, 0x45, 0x06, 0x2e, 0x00, + 0x19, 0x42, 0x06, 0x28, 0x06, 0x44, 0x06, 0x20, + 0x00, 0x27, 0x06, 0x32, 0x06, 0x20, 0x00, 0x45, + 0x06, 0xcc, 0x06, 0x44, 0x06, 0x27, 0x06, 0x2f, + 0x06, 0x0d, 0x45, 0x06, 0xcc, 0x06, 0x44, 0x06, + 0x27, 0x06, 0x2f, 0x06, 0xcc, 0x06, 0x25, 0x42, + 0x06, 0x28, 0x06, 0x44, 0x06, 0x20, 0x00, 0x27, + 0x06, 0x32, 0x06, 0x20, 0x00, 0x2f, 0x06, 0x48, + 0x06, 0x31, 0x06, 0x27, 0x06, 0x46, 0x06, 0x20, + 0x00, 0x45, 0x06, 0x34, 0x06, 0x2a, 0x06, 0x31, + 0x06, 0xa9, 0x06, 0x17, 0x2f, 0x06, 0x48, 0x06, + 0x31, 0x06, 0x27, 0x06, 0x46, 0x06, 0x20, 0x00, + 0x45, 0x06, 0x34, 0x06, 0x2a, 0x06, 0x31, 0x06, + 0xa9, 0x06, 0x03, 0x2a, 0x06, 0x03, 0x2d, 0x06, + 0x03, 0xa9, 0x06, 0x03, 0x37, 0x06, 0x03, 0x48, + 0x06, 0x09, 0x2a, 0x06, 0x34, 0x06, 0x31, 0x06, + 0xcc, 0x06, 0x0b, 0x2d, 0x06, 0x34, 0x06, 0x48, + 0x06, 0x27, 0x06, 0x46, 0x06, 0x09, 0xa9, 0x06, + 0x33, 0x06, 0x44, 0x06, 0x48, 0x06, 0x07, 0x37, + 0x06, 0x48, 0x06, 0x2a, 0x06, 0x09, 0x34, 0x06, + 0x28, 0x06, 0x27, 0x06, 0x37, 0x06, 0x09, 0x22, + 0x06, 0x30, 0x06, 0x27, 0x06, 0x31, 0x06, 0x0b, + 0x48, 0x06, 0x27, 0x06, 0x30, 0x06, 0x27, 0x06, + 0x31, 0x06, 0x0b, 0x46, 0x06, 0xcc, 0x06, 0x33, + 0x06, 0x27, 0x06, 0x46, 0x06, 0x09, 0x27, 0x06, + 0xcc, 0x06, 0x27, 0x06, 0x31, 0x06, 0x0b, 0x33, + 0x06, 0xcc, 0x06, 0x48, 0x06, 0x27, 0x06, 0x46, + 0x06, 0x09, 0x2a, 0x06, 0x45, 0x06, 0x48, 0x06, + 0x32, 0x06, 0x05, 0x22, 0x06, 0x28, 0x06, 0x0b, + 0x27, 0x06, 0xcc, 0x06, 0x44, 0x06, 0x48, 0x06, + 0x44, 0x06, 0x19, 0x48, 0x06, 0x27, 0x06, 0x30, + 0x06, 0x27, 0x06, 0x31, 0x06, 0x20, 0x00, 0x27, + 0x06, 0x44, 0x06, 0x2b, 0x06, 0x27, 0x06, 0x46, + 0x06, 0xcc, 0x06, 0x04, 0x41, 0x4d, 0x0e, 0x43, + 0x68, 0x61, 0x69, 0x74, 0x72, 0x61, 0x10, 0x56, + 0x61, 0x69, 0x73, 0x61, 0x6b, 0x68, 0x61, 0x10, + 0x4a, 0x79, 0x61, 0x69, 0x73, 0x74, 0x68, 0x61, + 0x0c, 0x41, 0x73, 0x61, 0x64, 0x68, 0x61, 0x0e, + 0x53, 0x72, 0x61, 0x76, 0x61, 0x6e, 0x61, 0x0c, + 0x42, 0x68, 0x61, 0x64, 0x72, 0x61, 0x0c, 0x41, + 0x73, 0x76, 0x69, 0x6e, 0x61, 0x0e, 0x4b, 0x61, + 0x72, 0x74, 0x69, 0x6b, 0x61, 0x14, 0x41, 0x67, + 0x72, 0x61, 0x68, 0x61, 0x79, 0x61, 0x6e, 0x61, + 0x0a, 0x50, 0x61, 0x75, 0x73, 0x61, 0x0a, 0x4d, + 0x61, 0x67, 0x68, 0x61, 0x10, 0x50, 0x68, 0x61, + 0x6c, 0x67, 0x75, 0x6e, 0x61, 0x08, 0x53, 0x61, + 0x6b, 0x61, 0x09, 0x45, 0x06, 0x2d, 0x06, 0x31, + 0x06, 0x45, 0x06, 0x07, 0x35, 0x06, 0x41, 0x06, + 0x31, 0x06, 0x15, 0x31, 0x06, 0x28, 0x06, 0xcc, + 0x06, 0x39, 0x06, 0x20, 0x00, 0x27, 0x06, 0x44, + 0x06, 0x27, 0x06, 0x48, 0x06, 0x44, 0x06, 0x17, + 0x31, 0x06, 0x28, 0x06, 0xcc, 0x06, 0x39, 0x06, + 0x20, 0x00, 0x27, 0x06, 0x44, 0x06, 0x2b, 0x06, + 0x27, 0x06, 0x46, 0x06, 0xcc, 0x06, 0x17, 0x2c, + 0x06, 0x45, 0x06, 0x27, 0x06, 0x2f, 0x06, 0xcc, + 0x06, 0x20, 0x00, 0x27, 0x06, 0x44, 0x06, 0x27, + 0x06, 0x48, 0x06, 0x44, 0x06, 0x19, 0x2c, 0x06, + 0x45, 0x06, 0x27, 0x06, 0x2f, 0x06, 0xcc, 0x06, + 0x20, 0x00, 0x27, 0x06, 0x44, 0x06, 0x2b, 0x06, + 0x27, 0x06, 0x46, 0x06, 0xcc, 0x06, 0x07, 0x31, + 0x06, 0x2c, 0x06, 0x28, 0x06, 0x0b, 0x34, 0x06, + 0x39, 0x06, 0x28, 0x06, 0x27, 0x06, 0x46, 0x06, + 0x0b, 0x31, 0x06, 0x45, 0x06, 0x36, 0x06, 0x27, + 0x06, 0x46, 0x06, 0x09, 0x34, 0x06, 0x48, 0x06, + 0x27, 0x06, 0x44, 0x06, 0x0f, 0x30, 0x06, 0xcc, + 0x06, 0x42, 0x06, 0x39, 0x06, 0x2f, 0x06, 0x47, + 0x06, 0x54, 0x06, 0x0d, 0x30, 0x06, 0xcc, 0x06, + 0x2d, 0x06, 0x2c, 0x06, 0x47, 0x06, 0x54, 0x06, + 0x0b, 0x47, 0x06, 0x0d, 0x20, 0x2e, 0x00, 0x42, + 0x06, 0x2e, 0x00, 0x13, 0x47, 0x06, 0x2c, 0x06, + 0x31, 0x06, 0xcc, 0x06, 0x20, 0x00, 0x42, 0x06, + 0x45, 0x06, 0x31, 0x06, 0xcc, 0x06, 0x1f, 0x54, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x36, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x36, 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x75, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1f, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x1d, 0x57, 0x00, 0x61, 0x00, 0x64, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x52, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x1d, 0x59, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1f, 0x4a, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, + 0x6b, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x2b, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x2d, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x2d, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x2a, 0x4a, 0x69, 0x6e, 0x67, + 0x6f, 0x2d, 0x6b, 0x65, 0x69, 0x75, 0x6e, 0x20, + 0x28, 0x37, 0x36, 0x37, 0x2d, 0x37, 0x37, 0x30, + 0x29, 0x1d, 0x48, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x1f, 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, 0x64, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x4d, 0x01, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, + 0x4a, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x61, + 0x00, 0x6a, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1f, 0x53, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x20, + 0x54, 0x65, 0x6e, 0x2d, 0x61, 0x6e, 0x20, 0x28, + 0x38, 0x35, 0x37, 0x2d, 0x38, 0x35, 0x39, 0x29, + 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, + 0x47, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1d, 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, + 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x34, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1b, 0x4c, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1d, 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x41, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, 0x4a, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x4a, 0x00, 0x69, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x29, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x27, 0x4a, 0x00, 0x69, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x45, 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4c, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x61, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x25, 0x4a, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x24, 0x54, 0x65, 0x6e, 0x2d, + 0x65, 0x69, 0x20, 0x28, 0x31, 0x31, 0x31, 0x30, + 0x2d, 0x31, 0x31, 0x31, 0x33, 0x29, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x44, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x45, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x6a, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x48, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x27, 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, + 0x4c, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x6d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x4a, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x59, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x75, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x29, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x21, 0x4a, 0x00, 0x4d, 0x01, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x27, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x75, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x29, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x74, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x29, 0x52, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x45, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4c, + 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x61, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x48, + 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x27, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x4c, + 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x45, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x27, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4a, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x27, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x61, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x41, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x4d, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x02, 0x54, 0x02, 0x53, 0x0a, 0x4d, 0x65, + 0x69, 0x6a, 0x69, 0x0d, 0x54, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x0b, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x0c, 0x48, 0x65, 0x69, 0x73, + 0x65, 0x69, 0x03, 0x2e, 0x06, 0x03, 0x28, 0x06, + 0x0f, 0x41, 0x06, 0x31, 0x06, 0x48, 0x06, 0x31, + 0x06, 0x2f, 0x06, 0xcc, 0x06, 0x46, 0x06, 0x11, + 0x27, 0x06, 0x31, 0x06, 0x2f, 0x06, 0xcc, 0x06, + 0x28, 0x06, 0x47, 0x06, 0x34, 0x06, 0x2a, 0x06, + 0x0b, 0x2e, 0x06, 0x31, 0x06, 0x2f, 0x06, 0x27, + 0x06, 0x2f, 0x06, 0x07, 0x2a, 0x06, 0xcc, 0x06, + 0x31, 0x06, 0x0b, 0x45, 0x06, 0x31, 0x06, 0x2f, + 0x06, 0x27, 0x06, 0x2f, 0x06, 0x0d, 0x34, 0x06, + 0x47, 0x06, 0x31, 0x06, 0xcc, 0x06, 0x48, 0x06, + 0x31, 0x06, 0x07, 0x45, 0x06, 0x47, 0x06, 0x31, + 0x06, 0x09, 0x22, 0x06, 0x28, 0x06, 0x27, 0x06, + 0x46, 0x06, 0x07, 0x22, 0x06, 0x30, 0x06, 0x31, + 0x06, 0x05, 0x2f, 0x06, 0xcc, 0x06, 0x09, 0x28, + 0x06, 0x47, 0x06, 0x45, 0x06, 0x46, 0x06, 0x0b, + 0x27, 0x06, 0x33, 0x06, 0x41, 0x06, 0x46, 0x06, + 0x2f, 0x06, 0x0b, 0x47, 0x06, 0x0d, 0x20, 0x2e, + 0x00, 0x34, 0x06, 0x2e, 0x00, 0x13, 0x47, 0x06, + 0x2c, 0x06, 0x31, 0x06, 0xcc, 0x06, 0x20, 0x00, + 0x34, 0x06, 0x45, 0x06, 0x33, 0x06, 0xcc, 0x06, + 0x1a, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, + 0x52, 0x2e, 0x4f, 0x2e, 0x43, 0x2e, 0x0c, 0x52, + 0x2e, 0x4f, 0x2e, 0x43, 0x2e, 0x12, 0x63, 0x61, + 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, 0x73, 0x08, + 0x64, 0x61, 0x74, 0x65, 0x0e, 0x61, 0x72, 0x61, + 0x62, 0x65, 0x78, 0x74, 0x08, 0x6c, 0x61, 0x74, + 0x6e, 0x04, 0x6e, 0x75, 0x10, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, + 0x74, 0x74, 0x65, 0x72, 0x6e, 0x26, 0x7b, 0x6d, + 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0x1e, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, + 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, + 0x6e, 0x0e, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, + 0x6c, 0x27, 0x0e, 0x20, 0x7b, 0x00, 0x63, 0x00, + 0x75, 0x00, 0x72, 0x00, 0x72, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x63, 0x00, 0x79, 0x00, 0x7d, 0x00, + 0x7b, 0x00, 0x6e, 0x00, 0x75, 0x00, 0x6d, 0x00, + 0x62, 0x00, 0x65, 0x00, 0x72, 0x00, 0x7d, 0x00, + 0x3d, 0x7b, 0x00, 0x6d, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x75, 0x00, 0x73, 0x00, 0x53, 0x00, 0x69, + 0x00, 0x67, 0x00, 0x6e, 0x00, 0x7d, 0x00, 0x0e, + 0x20, 0x7b, 0x00, 0x63, 0x00, 0x75, 0x00, 0x72, + 0x00, 0x72, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x79, 0x00, 0x7d, 0x00, 0x7b, 0x00, 0x6e, + 0x00, 0x75, 0x00, 0x6d, 0x00, 0x62, 0x00, 0x65, + 0x00, 0x72, 0x00, 0x7d, 0x00, 0x10, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x2a, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x7b, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x40, 0x7b, 0x6d, 0x69, + 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x0e, 0x70, 0x65, + 0x72, 0x63, 0x65, 0x6e, 0x74, 0x10, 0x70, 0x61, + 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x03, 0x6b, + 0x06, 0x03, 0x6c, 0x06, 0x0a, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x0b, 0x46, 0x06, 0x27, 0x06, 0x39, + 0x06, 0x2f, 0x06, 0x2f, 0x06, 0x06, 0x6e, 0x61, + 0x6e, 0x07, 0x0e, 0x20, 0x2b, 0x00, 0x0e, 0x20, + 0x10, 0x70, 0x6c, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x05, 0x0e, 0x20, 0x12, 0x22, 0x12, 0x6d, + 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x03, 0x6a, 0x06, 0x16, 0x70, 0x65, 0x72, 0x63, + 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x03, + 0x1e, 0x22, 0x10, 0x69, 0x6e, 0x66, 0x69, 0x6e, + 0x69, 0x74, 0x79, 0x02, 0x2e, 0x02, 0x2c, 0x05, + 0x0e, 0x20, 0x2b, 0x00, 0x02, 0x25, 0x0e, 0x73, + 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x03, 0x0b, + 0x06, 0x06, 0x41, 0x46, 0x4e, 0x04, 0x41, 0x24, + 0x06, 0x41, 0x55, 0x44, 0x04, 0x52, 0x24, 0x06, + 0x42, 0x52, 0x4c, 0x06, 0x24, 0x43, 0x41, 0x06, + 0x43, 0x41, 0x44, 0x06, 0xa5, 0x43, 0x4e, 0x06, + 0x43, 0x4e, 0x59, 0x03, 0xac, 0x20, 0x06, 0x45, + 0x55, 0x52, 0x02, 0xa3, 0x06, 0x47, 0x42, 0x50, + 0x06, 0x24, 0x48, 0x4b, 0x06, 0x48, 0x4b, 0x44, + 0x03, 0xaa, 0x20, 0x06, 0x49, 0x4c, 0x53, 0x03, + 0xb9, 0x20, 0x06, 0x49, 0x4e, 0x52, 0x09, 0x31, + 0x06, 0xcc, 0x06, 0x27, 0x06, 0x44, 0x06, 0x06, + 0x49, 0x52, 0x52, 0x02, 0xa5, 0x06, 0x4a, 0x50, + 0x59, 0x03, 0xa9, 0x20, 0x06, 0x4b, 0x52, 0x57, + 0x06, 0x24, 0x4d, 0x58, 0x06, 0x4d, 0x58, 0x4e, + 0x06, 0x24, 0x4e, 0x5a, 0x06, 0x4e, 0x5a, 0x44, + 0x03, 0x3f, 0x0e, 0x06, 0x54, 0x48, 0x42, 0x06, + 0x4e, 0x54, 0x24, 0x06, 0x54, 0x57, 0x44, 0x02, + 0x24, 0x06, 0x55, 0x53, 0x44, 0x03, 0xab, 0x20, + 0x06, 0x56, 0x4e, 0x44, 0x08, 0x46, 0x43, 0x46, + 0x41, 0x06, 0x58, 0x41, 0x46, 0x06, 0x24, 0x45, + 0x43, 0x06, 0x58, 0x43, 0x44, 0x06, 0x43, 0x46, + 0x41, 0x06, 0x58, 0x4f, 0x46, 0x08, 0x43, 0x46, + 0x50, 0x46, 0x06, 0x58, 0x50, 0x46, 0x14, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, + 0x73, 0x52, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, + 0x6e, 0x74, 0x6c, 0x2f, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, + 0x6a, 0x73, 0x6f, 0x6e, 0x70, 0x2f, 0x66, 0x61, + 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, + 0x01, 0x00, 0x01, 0x00, 0x27, 0x00, 0x6f, 0xb9, + 0x6c, 0x01, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x39, + 0xd0, 0x00, 0x00, 0x00, 0x43, 0xd1, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd2, 0x00, 0x00, 0x00, 0x4d, + 0xd3, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd4, 0x00, + 0x00, 0x00, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x04, + 0xd6, 0x00, 0x00, 0x00, 0x04, 0xd7, 0x00, 0x00, + 0x00, 0x04, 0xd8, 0x00, 0x00, 0x00, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x04, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdb, 0x00, 0x00, 0x00, 0x04, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x04, + 0xde, 0x00, 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, + 0x00, 0x04, 0xe0, 0x00, 0x00, 0x00, 0x04, 0xe1, + 0x00, 0x00, 0x00, 0x04, 0xe2, 0x00, 0x00, 0x00, + 0x26, 0x0f, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, + 0x0a, 0x4d, 0xe4, 0x00, 0x00, 0x00, 0x09, 0x4d, + 0xe5, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, + 0x00, 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x04, 0xe9, 0x00, 0x00, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xec, + 0x00, 0x00, 0x00, 0x4d, 0xec, 0x00, 0x00, 0x00, + 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, 0xee, 0x00, + 0x00, 0x00, 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, + 0xf0, 0x00, 0x00, 0x00, 0x04, 0xf1, 0x00, 0x00, + 0x00, 0x4d, 0xf2, 0x00, 0x00, 0x00, 0x04, 0xf3, + 0x00, 0x00, 0x00, 0x4d, 0xf4, 0x00, 0x00, 0x00, + 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0xf6, 0x00, + 0x00, 0x00, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, + 0xf8, 0x00, 0x00, 0x00, 0x04, 0xf9, 0x00, 0x00, + 0x00, 0x4d, 0xfa, 0x00, 0x00, 0x00, 0x04, 0xfb, + 0x00, 0x00, 0x00, 0x4d, 0xfc, 0x00, 0x00, 0x00, + 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, 0xfe, 0x00, + 0x00, 0x00, 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x01, 0x00, 0x00, 0x04, 0x01, 0x01, 0x00, + 0x00, 0x4d, 0x02, 0x01, 0x00, 0x00, 0x04, 0x03, + 0x01, 0x00, 0x00, 0x4d, 0x03, 0x01, 0x00, 0x00, + 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0x05, 0x01, + 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, + 0x07, 0x01, 0x00, 0x00, 0x04, 0x08, 0x01, 0x00, + 0x00, 0x4d, 0x09, 0x01, 0x00, 0x00, 0x04, 0x0a, + 0x01, 0x00, 0x00, 0x4d, 0x0b, 0x01, 0x00, 0x00, + 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, 0x0d, 0x01, + 0x00, 0x00, 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, + 0x0f, 0x01, 0x00, 0x00, 0x04, 0x10, 0x01, 0x00, + 0x00, 0x4d, 0x11, 0x01, 0x00, 0x00, 0x04, 0x12, + 0x01, 0x00, 0x00, 0x4d, 0x13, 0x01, 0x00, 0x00, + 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, 0x15, 0x01, + 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, + 0x17, 0x01, 0x00, 0x00, 0x04, 0x18, 0x01, 0x00, + 0x00, 0x4d, 0x19, 0x01, 0x00, 0x00, 0x04, 0x1a, + 0x01, 0x00, 0x00, 0x4d, 0x1b, 0x01, 0x00, 0x00, + 0x04, 0x1c, 0x01, 0x00, 0x00, 0x4d, 0x1d, 0x01, + 0x00, 0x00, 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, + 0x1f, 0x01, 0x00, 0x00, 0x04, 0x20, 0x01, 0x00, + 0x00, 0x4d, 0x21, 0x01, 0x00, 0x00, 0x04, 0x22, + 0x01, 0x00, 0x00, 0x4d, 0x23, 0x01, 0x00, 0x00, + 0x04, 0x24, 0x01, 0x00, 0x00, 0x4d, 0x25, 0x01, + 0x00, 0x00, 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, + 0x27, 0x01, 0x00, 0x00, 0x04, 0x26, 0x01, 0x00, + 0x00, 0x4d, 0x28, 0x01, 0x00, 0x00, 0x04, 0x29, + 0x01, 0x00, 0x00, 0x4d, 0x29, 0x01, 0x00, 0x00, + 0x04, 0x2a, 0x01, 0x00, 0x00, 0x4d, 0x2b, 0x01, + 0x00, 0x00, 0x04, 0x2c, 0x01, 0x00, 0x00, 0x4d, + 0x2d, 0x01, 0x00, 0x00, 0x04, 0x2e, 0x01, 0x00, + 0x00, 0x4d, 0x2f, 0x01, 0x00, 0x00, 0x04, 0x30, + 0x01, 0x00, 0x00, 0x4d, 0x31, 0x01, 0x00, 0x00, + 0x04, 0x32, 0x01, 0x00, 0x00, 0x4d, 0x33, 0x01, + 0x00, 0x00, 0x04, 0x34, 0x01, 0x00, 0x00, 0x4d, + 0x35, 0x01, 0x00, 0x00, 0x04, 0x36, 0x01, 0x00, + 0x00, 0x4d, 0x37, 0x01, 0x00, 0x00, 0x04, 0x38, + 0x01, 0x00, 0x00, 0x4d, 0x39, 0x01, 0x00, 0x00, + 0x04, 0x3a, 0x01, 0x00, 0x00, 0x4d, 0x3b, 0x01, + 0x00, 0x00, 0x04, 0x3a, 0x01, 0x00, 0x00, 0x4d, + 0x3c, 0x01, 0x00, 0x00, 0x4d, 0x3d, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x38, 0x01, 0x00, 0x00, 0x4d, + 0x39, 0x01, 0x00, 0x00, 0x04, 0x3e, 0x01, 0x00, + 0x00, 0x4d, 0x3f, 0x01, 0x00, 0x00, 0x04, 0x32, + 0x01, 0x00, 0x00, 0x4d, 0x33, 0x01, 0x00, 0x00, + 0x04, 0x2c, 0x01, 0x00, 0x00, 0x4d, 0x2d, 0x01, + 0x00, 0x00, 0x4d, 0x40, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x41, 0x01, 0x00, 0x00, 0x4d, 0x42, 0x01, + 0x00, 0x00, 0x04, 0x43, 0x01, 0x00, 0x00, 0x4d, + 0x44, 0x01, 0x00, 0x00, 0x04, 0x0c, 0x01, 0x00, + 0x00, 0x4d, 0x0b, 0x01, 0x00, 0x00, 0x04, 0x08, + 0x01, 0x00, 0x00, 0x4d, 0x07, 0x01, 0x00, 0x00, + 0x4d, 0x45, 0x01, 0x00, 0x00, 0x4d, 0x46, 0x01, + 0x00, 0x00, 0x0b, 0x0b, 0x0b, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, + 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x4d, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x4d, + 0x70, 0x01, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x00, 0xbe, 0x01, 0xbe, + 0x02, 0xbe, 0x03, 0xbe, 0x04, 0xbe, 0x05, 0xbe, + 0x06, 0xbe, 0x07, 0xbe, 0x08, 0xbe, 0x09, 0xbe, + 0x0a, 0xbe, 0x0b, 0x26, 0x0c, 0x00, 0x4d, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x4d, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x4d, + 0x6f, 0x01, 0x00, 0x00, 0x4d, 0x70, 0x01, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x0c, 0xbe, 0x0d, 0xbe, 0x0e, 0xbe, 0x0f, + 0xbe, 0x10, 0xbe, 0x11, 0xbe, 0x12, 0xbe, 0x13, + 0xbe, 0x14, 0xbe, 0x15, 0xbe, 0x16, 0xbe, 0x17, + 0xbe, 0x18, 0x26, 0x0d, 0x00, 0x4d, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, + 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, + 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, + 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, + 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, + 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, + 0x89, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x5c, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, + 0x04, 0x8b, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x8a, 0x01, + 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x4d, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, + 0x00, 0x4d, 0x70, 0x01, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x19, 0xbe, + 0x1a, 0xbe, 0x1b, 0xbe, 0x1c, 0xbe, 0x1d, 0xbe, + 0x1e, 0xbe, 0x1f, 0xbe, 0x20, 0xbe, 0x21, 0xbe, + 0x22, 0xbe, 0x23, 0xbe, 0x24, 0x26, 0x0c, 0x00, + 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x5c, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x4d, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x4d, 0x70, + 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x25, 0xbe, 0x26, 0xbe, 0x27, + 0xbe, 0x28, 0xbe, 0x29, 0xbe, 0x2a, 0xbe, 0x2b, + 0xbe, 0x2c, 0xbe, 0x2d, 0xbe, 0x2e, 0xbe, 0x2f, + 0xbe, 0x30, 0xbe, 0x31, 0x26, 0x0d, 0x00, 0x4d, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, + 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, + 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, + 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, + 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, + 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, + 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, + 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, + 0x04, 0x98, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x8c, 0x01, + 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, + 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, + 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, + 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, + 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, + 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, + 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, + 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x26, 0x0d, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x5c, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x8a, 0x01, 0x00, 0x00, + 0x04, 0x8b, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, + 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x4d, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x4d, 0x6f, + 0x01, 0x00, 0x00, 0x4d, 0x70, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x32, 0xbe, 0x33, 0xbe, 0x34, 0xbe, 0x35, 0xbe, + 0x36, 0xbe, 0x37, 0xbe, 0x38, 0xbe, 0x39, 0xbe, + 0x3a, 0xbe, 0x3b, 0xbe, 0x3c, 0xbe, 0x3d, 0xbe, + 0x3e, 0x26, 0x0d, 0x00, 0x4d, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, + 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, + 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, + 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, + 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, + 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, + 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, + 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, + 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, + 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, + 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, + 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, + 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, + 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, + 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x4d, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, + 0x00, 0x4d, 0x70, 0x01, 0x00, 0x00, 0x4d, 0xd9, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x3f, 0xbe, + 0x40, 0xbe, 0x41, 0xbe, 0x42, 0xbe, 0x43, 0xbe, + 0x44, 0xbe, 0x45, 0xbe, 0x46, 0xbe, 0x47, 0xbe, + 0x48, 0xbe, 0x49, 0xbe, 0x4a, 0x26, 0x0c, 0x00, + 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x5c, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, + 0x8b, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x8a, + 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x4d, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x4d, 0x6f, 0x01, + 0x00, 0x00, 0x4d, 0x70, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x99, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, + 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, + 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, + 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x26, + 0x04, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, + 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, + 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x4d, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x4d, 0x70, 0x01, + 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, + 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, + 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0xa6, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x26, + 0x0e, 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, + 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, + 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, + 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, + 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, + 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, + 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, + 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, + 0x04, 0xb4, 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa7, 0x01, + 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, + 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, + 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, + 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, + 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, + 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, + 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, + 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, + 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xb5, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, 0xb5, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x4d, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, + 0x00, 0x4d, 0x70, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x4b, 0xbe, + 0x4c, 0xbe, 0x4d, 0xbe, 0x4e, 0xbe, 0x4f, 0xbe, + 0x50, 0xbe, 0x51, 0xbe, 0x52, 0xbe, 0x53, 0xbe, + 0x54, 0xbe, 0x55, 0xbe, 0x56, 0x26, 0x0c, 0x00, + 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, 0xb6, 0x01, + 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, + 0xb8, 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, + 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, 0x04, 0xbb, + 0x01, 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, + 0x04, 0xbd, 0x01, 0x00, 0x00, 0x04, 0xbe, 0x01, + 0x00, 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, 0x04, + 0xc0, 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb7, + 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, + 0x04, 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, + 0x00, 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, + 0xbc, 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, + 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, + 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, + 0x04, 0xc1, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x5c, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xc2, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0xc2, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x4d, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x4d, 0x6f, + 0x01, 0x00, 0x00, 0x4d, 0x70, 0x01, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x57, 0xbe, 0x58, 0xbe, 0x59, 0xbe, 0x5a, 0xbe, + 0x5b, 0xbe, 0x5c, 0xbe, 0x5d, 0xbe, 0x5e, 0xbe, + 0x5f, 0xbe, 0x60, 0xbe, 0x61, 0xbe, 0x62, 0x26, + 0x0c, 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0xc3, 0x01, 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, + 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, + 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, + 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, + 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, 0x04, + 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, + 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, + 0x04, 0xc4, 0x01, 0x00, 0x00, 0x04, 0xc5, 0x01, + 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, + 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, + 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, 0x04, 0xca, + 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, + 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, + 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x5c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x69, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xcf, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd0, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x4d, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x4d, 0x70, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x63, 0xbe, 0x64, 0xbe, 0x65, 0xbe, + 0x66, 0xbe, 0x67, 0xbe, 0x68, 0xbe, 0x69, 0xbe, + 0x6a, 0xbe, 0x6b, 0xbe, 0x6c, 0xbe, 0x6d, 0xbe, + 0x6e, 0x26, 0x0c, 0x00, 0x4d, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, 0x04, 0xc4, + 0x01, 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, + 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, + 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, + 0xc9, 0x01, 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, + 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, + 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, + 0x04, 0xce, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xc3, 0x01, + 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, 0x04, + 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, + 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, + 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, + 0x04, 0xca, 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, + 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, + 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xcf, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xd0, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x4d, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x4d, + 0x70, 0x01, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x5c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x69, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xd1, 0x01, 0x00, + 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, + 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, + 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, + 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, + 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, + 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, + 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, + 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, + 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, + 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, + 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, 0xe3, + 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, + 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, + 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, + 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, + 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, + 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, + 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, + 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, + 0xf0, 0x01, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, + 0xf1, 0x01, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, + 0x80, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x4d, 0x21, + 0x00, 0x00, 0x80, 0x04, 0xf3, 0x01, 0x00, 0x00, + 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0xf4, 0x01, + 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, + 0xf5, 0x01, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, + 0x80, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x4d, 0x25, + 0x00, 0x00, 0x80, 0x04, 0xf7, 0x01, 0x00, 0x00, + 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0xf8, 0x01, + 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, + 0xf9, 0x01, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, + 0x80, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x4d, 0x29, + 0x00, 0x00, 0x80, 0x04, 0xfb, 0x01, 0x00, 0x00, + 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0xfc, 0x01, + 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, + 0xfd, 0x01, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, + 0x80, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x4d, 0x2d, + 0x00, 0x00, 0x80, 0x04, 0xff, 0x01, 0x00, 0x00, + 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x00, 0x02, + 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, + 0x01, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, + 0x80, 0x04, 0x02, 0x02, 0x00, 0x00, 0x4d, 0x31, + 0x00, 0x00, 0x80, 0x04, 0x03, 0x02, 0x00, 0x00, + 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x04, 0x02, + 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, + 0x05, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, + 0x80, 0x04, 0x06, 0x02, 0x00, 0x00, 0x4d, 0x35, + 0x00, 0x00, 0x80, 0x04, 0x07, 0x02, 0x00, 0x00, + 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x08, 0x02, + 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, + 0x09, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, + 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x4d, 0x39, + 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, 0x00, 0x00, + 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, + 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, + 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, + 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x3d, + 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, + 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, + 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, + 0x11, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, + 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, 0x41, + 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, + 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, + 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, + 0x15, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, + 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, 0x45, + 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, + 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, + 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, + 0x19, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, + 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x49, + 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, + 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, + 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, + 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, + 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x4d, + 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, + 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, + 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, + 0x21, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, + 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x51, + 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, + 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, + 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, + 0x25, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, + 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x55, + 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, + 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, + 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, + 0x29, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, + 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x59, + 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, + 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, + 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, + 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, + 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x5d, + 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, + 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, + 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, + 0x31, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, + 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x61, + 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, + 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, + 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, + 0x35, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, + 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, 0x65, + 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, + 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, + 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, + 0x39, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, + 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x69, + 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, + 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, + 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, + 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, + 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x6d, + 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, + 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, + 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, + 0x41, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, + 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, 0x71, + 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, + 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, + 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, + 0x45, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, + 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x75, + 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, + 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, + 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, + 0x49, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, + 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x79, + 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, + 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, + 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, + 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, + 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x7d, + 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, + 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, + 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, + 0x51, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, + 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x81, + 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, + 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, + 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, + 0x55, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, + 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, 0x85, + 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, + 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, + 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, + 0x59, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, + 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x89, + 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, + 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, + 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, + 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, + 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x8d, + 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, + 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, + 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, + 0x61, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, + 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x91, + 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, + 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, + 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, + 0x65, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, + 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x95, + 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, + 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, + 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, + 0x69, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, + 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x99, + 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, + 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, + 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, + 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, + 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x9d, + 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, + 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, + 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, + 0x71, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, + 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0xa1, + 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, + 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, + 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, + 0x75, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, + 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0xa5, + 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, + 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, + 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, + 0x79, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, + 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0xa9, + 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, + 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, + 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, + 0x7d, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, + 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, 0xad, + 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, + 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, + 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, + 0x81, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, + 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0xb1, + 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, + 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, + 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, + 0x85, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, + 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0xb5, + 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, + 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, + 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, + 0x89, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, + 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0xb9, + 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, + 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, + 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, + 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, + 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xbd, + 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, + 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, + 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, + 0x91, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, + 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0xc1, + 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, + 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, + 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, + 0x95, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, + 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0xc5, + 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, + 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, + 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, + 0x99, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, + 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xc9, + 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, + 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, + 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, + 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, + 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xcd, + 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, + 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, + 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, + 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, + 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xd1, + 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, + 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, + 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, + 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, + 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xd5, + 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, + 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, + 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, + 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xd9, + 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, + 0xad, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, + 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, + 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, + 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, + 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xe5, + 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, + 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, + 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, + 0x17, 0x01, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, + 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xe9, + 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0x03, 0x01, + 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, + 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, + 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, + 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, + 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, + 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, + 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, + 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, + 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, + 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, + 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, + 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, 0xe3, + 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, + 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, + 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, + 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, + 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, + 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, + 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, + 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, + 0xf0, 0x01, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, + 0xf1, 0x01, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, + 0x80, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x4d, 0x21, + 0x00, 0x00, 0x80, 0x04, 0xf3, 0x01, 0x00, 0x00, + 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0xf4, 0x01, + 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, + 0xf5, 0x01, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, + 0x80, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x4d, 0x25, + 0x00, 0x00, 0x80, 0x04, 0xf7, 0x01, 0x00, 0x00, + 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0xf8, 0x01, + 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, + 0xf9, 0x01, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, + 0x80, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x4d, 0x29, + 0x00, 0x00, 0x80, 0x04, 0xfb, 0x01, 0x00, 0x00, + 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0xfc, 0x01, + 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, + 0xfd, 0x01, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, + 0x80, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x4d, 0x2d, + 0x00, 0x00, 0x80, 0x04, 0xff, 0x01, 0x00, 0x00, + 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x00, 0x02, + 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, + 0x01, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, + 0x80, 0x04, 0x02, 0x02, 0x00, 0x00, 0x4d, 0x31, + 0x00, 0x00, 0x80, 0x04, 0x03, 0x02, 0x00, 0x00, + 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x04, 0x02, + 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, + 0x05, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, + 0x80, 0x04, 0x06, 0x02, 0x00, 0x00, 0x4d, 0x35, + 0x00, 0x00, 0x80, 0x04, 0x07, 0x02, 0x00, 0x00, + 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x08, 0x02, + 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, + 0x09, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, + 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x4d, 0x39, + 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, 0x00, 0x00, + 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, + 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, + 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, + 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x3d, + 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, + 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, + 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, + 0x11, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, + 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, 0x41, + 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, + 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, + 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, + 0x15, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, + 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, 0x45, + 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, + 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, + 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, + 0x19, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, + 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x49, + 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, + 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, + 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, + 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, + 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x4d, + 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, + 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, + 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, + 0x21, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, + 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x51, + 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, + 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, + 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, + 0x25, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, + 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x55, + 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, + 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, + 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, + 0x29, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, + 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x59, + 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, + 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, + 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, + 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, + 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x5d, + 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, + 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, + 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, + 0x31, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, + 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x61, + 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, + 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, + 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, + 0x35, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, + 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, 0x65, + 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, + 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, + 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, + 0x39, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, + 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x69, + 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, + 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, + 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, + 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, + 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x6d, + 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, + 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, + 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, + 0x41, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, + 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, 0x71, + 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, + 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, + 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, + 0x45, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, + 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x75, + 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, + 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, + 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, + 0x49, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, + 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x79, + 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, + 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, + 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, + 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, + 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x7d, + 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, + 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, + 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, + 0x51, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, + 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x81, + 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, + 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, + 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, + 0x55, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, + 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, 0x85, + 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, + 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, + 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, + 0x59, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, + 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x89, + 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, + 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, + 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, + 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, + 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x8d, + 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, + 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, + 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, + 0x61, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, + 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x91, + 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, + 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, + 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, + 0x65, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, + 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x95, + 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, + 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, + 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, + 0x69, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, + 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x99, + 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, + 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, + 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, + 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, + 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x9d, + 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, + 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, + 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, + 0x71, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, + 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0xa1, + 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, + 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, + 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, + 0x75, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, + 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0xa5, + 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, + 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, + 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, + 0x79, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, + 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0xa9, + 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, + 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, + 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, + 0x7d, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, + 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, 0xad, + 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, + 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, + 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, + 0x81, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, + 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0xb1, + 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, + 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, + 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, + 0x85, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, + 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0xb5, + 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, + 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, + 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, + 0x89, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, + 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0xb9, + 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, + 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, + 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, + 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, + 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xbd, + 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, + 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, + 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, + 0x91, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, + 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0xc1, + 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, + 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, + 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, + 0x95, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, + 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0xc5, + 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, + 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, + 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, + 0x99, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, + 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xc9, + 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, + 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, + 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, + 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, + 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xcd, + 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, + 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, + 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, + 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, + 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xd1, + 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, + 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, + 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, + 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, + 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xd5, + 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, + 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, + 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, + 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xd9, + 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, + 0xad, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, + 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, + 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, + 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, + 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xe5, + 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, + 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, + 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, + 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, + 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xe9, + 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, + 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, + 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, + 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, + 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, + 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, + 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, + 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, + 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, + 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, + 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, + 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, + 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, 0xe3, + 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, + 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, + 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, + 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, + 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, + 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, + 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, + 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, + 0xf0, 0x01, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, + 0xf1, 0x01, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, + 0x80, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x4d, 0x21, + 0x00, 0x00, 0x80, 0x04, 0xf3, 0x01, 0x00, 0x00, + 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0xf4, 0x01, + 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, + 0xf5, 0x01, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, + 0x80, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x4d, 0x25, + 0x00, 0x00, 0x80, 0x04, 0xf7, 0x01, 0x00, 0x00, + 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0xf8, 0x01, + 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, + 0xf9, 0x01, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, + 0x80, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x4d, 0x29, + 0x00, 0x00, 0x80, 0x04, 0xfb, 0x01, 0x00, 0x00, + 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0xfc, 0x01, + 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, + 0xfd, 0x01, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, + 0x80, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x4d, 0x2d, + 0x00, 0x00, 0x80, 0x04, 0xff, 0x01, 0x00, 0x00, + 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x00, 0x02, + 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, + 0x01, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, + 0x80, 0x04, 0x02, 0x02, 0x00, 0x00, 0x4d, 0x31, + 0x00, 0x00, 0x80, 0x04, 0x03, 0x02, 0x00, 0x00, + 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x04, 0x02, + 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, + 0x05, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, + 0x80, 0x04, 0x06, 0x02, 0x00, 0x00, 0x4d, 0x35, + 0x00, 0x00, 0x80, 0x04, 0x07, 0x02, 0x00, 0x00, + 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x08, 0x02, + 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, + 0x09, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, + 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x4d, 0x39, + 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, 0x00, 0x00, + 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, + 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, + 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, + 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x3d, + 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, + 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, + 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, + 0x11, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, + 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, 0x41, + 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, + 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, + 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, + 0x15, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, + 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, 0x45, + 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, + 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, + 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, + 0x19, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, + 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x49, + 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, + 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, + 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, + 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, + 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x4d, + 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, + 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, + 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, + 0x21, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, + 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x51, + 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, + 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, + 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, + 0x25, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, + 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x55, + 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, + 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, + 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, + 0x29, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, + 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x59, + 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, + 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, + 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, + 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, + 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x5d, + 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, + 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, + 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, + 0x31, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, + 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x61, + 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, + 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, + 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, + 0x35, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, + 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, 0x65, + 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, + 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, + 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, + 0x39, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, + 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x69, + 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, + 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, + 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, + 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, + 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x6d, + 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, + 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, + 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, + 0x41, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, + 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, 0x71, + 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, + 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, + 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, + 0x45, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, + 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x75, + 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, + 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, + 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, + 0x49, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, + 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x79, + 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, + 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, + 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, + 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, + 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x7d, + 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, + 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, + 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, + 0x51, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, + 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x81, + 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, + 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, + 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, + 0x55, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, + 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, 0x85, + 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, + 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, + 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, + 0x59, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, + 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x89, + 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, + 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, + 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, + 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, + 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x8d, + 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, + 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, + 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, + 0x61, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, + 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x91, + 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, + 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, + 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, + 0x65, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, + 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x95, + 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, + 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, + 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, + 0x69, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, + 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x99, + 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, + 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, + 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, + 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, + 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x9d, + 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, + 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, + 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, + 0x71, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, + 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0xa1, + 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, + 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, + 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, + 0x75, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, + 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0xa5, + 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, + 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, + 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, + 0x79, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, + 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0xa9, + 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, + 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, + 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, + 0x7d, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, + 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, 0xad, + 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, + 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, + 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, + 0x81, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, + 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0xb1, + 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, + 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, + 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, + 0x85, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, + 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0xb5, + 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, + 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, + 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, + 0x89, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, + 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0xb9, + 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, + 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, + 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, + 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, + 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xbd, + 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, + 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, + 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, + 0x91, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, + 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0xc1, + 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, + 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, + 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, + 0x95, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, + 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0xc5, + 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, + 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, + 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, + 0x99, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, + 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xc9, + 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, + 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, + 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, + 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, + 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xcd, + 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, + 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, + 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, + 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, + 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xd1, + 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, + 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, + 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, + 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, + 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xd5, + 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, + 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, + 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, + 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xd9, + 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, + 0xad, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, + 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, + 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, + 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, + 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xe5, + 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, + 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, + 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, + 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, + 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xe9, + 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, + 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x4d, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x4d, 0x70, + 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0xbf, 0x02, 0x00, + 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0x49, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0xc0, 0x02, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, 0xc1, + 0x02, 0x00, 0x00, 0x04, 0xc2, 0x02, 0x00, 0x00, + 0x04, 0xc3, 0x02, 0x00, 0x00, 0x04, 0xc4, 0x02, + 0x00, 0x00, 0x04, 0xc5, 0x02, 0x00, 0x00, 0x04, + 0xc6, 0x02, 0x00, 0x00, 0x04, 0xc7, 0x02, 0x00, + 0x00, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x04, 0xc9, + 0x02, 0x00, 0x00, 0x04, 0xca, 0x02, 0x00, 0x00, + 0x04, 0xcb, 0x02, 0x00, 0x00, 0x04, 0xcc, 0x02, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x04, + 0xc2, 0x02, 0x00, 0x00, 0x04, 0xc3, 0x02, 0x00, + 0x00, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x04, 0xc5, + 0x02, 0x00, 0x00, 0x04, 0xc6, 0x02, 0x00, 0x00, + 0x04, 0xc7, 0x02, 0x00, 0x00, 0x04, 0xc8, 0x02, + 0x00, 0x00, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x04, + 0xca, 0x02, 0x00, 0x00, 0x04, 0xcb, 0x02, 0x00, + 0x00, 0x04, 0xcc, 0x02, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x5c, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xcd, 0x02, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0xcd, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xce, 0x02, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x4d, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x4d, + 0x6f, 0x01, 0x00, 0x00, 0x4d, 0x70, 0x01, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x5c, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xcf, 0x02, 0x00, 0x00, 0x04, 0xd0, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0xcf, 0x02, 0x00, 0x00, + 0x04, 0xd0, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xcf, 0x02, + 0x00, 0x00, 0x04, 0xd0, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x4d, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, + 0x00, 0x4d, 0x70, 0x01, 0x00, 0x00, 0x4d, 0xe2, + 0x00, 0x00, 0x00, 0x4d, 0xd1, 0x02, 0x00, 0x00, + 0x4d, 0xd2, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xd3, + 0x02, 0x00, 0x00, 0x04, 0xd4, 0x02, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xd5, 0x02, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0xd6, 0x02, 0x00, 0x00, 0x4d, + 0xd7, 0x02, 0x00, 0x00, 0x04, 0xd8, 0x02, 0x00, + 0x00, 0x4d, 0xd9, 0x02, 0x00, 0x00, 0x4d, 0xda, + 0x02, 0x00, 0x00, 0x0b, 0x04, 0xdb, 0x02, 0x00, + 0x00, 0x4d, 0xd7, 0x02, 0x00, 0x00, 0x04, 0xdc, + 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x02, 0x00, 0x00, + 0x4d, 0xdd, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xde, + 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x02, 0x00, 0x00, + 0x04, 0xdf, 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x02, + 0x00, 0x00, 0x4d, 0xe0, 0x02, 0x00, 0x00, 0x4d, + 0xe1, 0x02, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xe2, + 0x02, 0x00, 0x00, 0x4d, 0xda, 0x02, 0x00, 0x00, + 0x04, 0xe3, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x02, + 0x00, 0x00, 0x04, 0xe5, 0x02, 0x00, 0x00, 0x4d, + 0xe6, 0x02, 0x00, 0x00, 0x04, 0xe7, 0x02, 0x00, + 0x00, 0x4d, 0xe8, 0x02, 0x00, 0x00, 0x04, 0xe9, + 0x02, 0x00, 0x00, 0x4d, 0xea, 0x02, 0x00, 0x00, + 0x04, 0xeb, 0x02, 0x00, 0x00, 0x4d, 0xec, 0x02, + 0x00, 0x00, 0x04, 0xed, 0x02, 0x00, 0x00, 0x4d, + 0xee, 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x02, 0x00, + 0x00, 0x0b, 0x04, 0xef, 0x02, 0x00, 0x00, 0x4d, + 0xda, 0x02, 0x00, 0x00, 0x04, 0xf0, 0x02, 0x00, + 0x00, 0x4d, 0xe4, 0x02, 0x00, 0x00, 0x04, 0xe5, + 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x02, 0x00, 0x00, + 0x04, 0xf1, 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x02, + 0x00, 0x00, 0x04, 0xe9, 0x02, 0x00, 0x00, 0x4d, + 0xea, 0x02, 0x00, 0x00, 0x04, 0xf2, 0x02, 0x00, + 0x00, 0x4d, 0xec, 0x02, 0x00, 0x00, 0x04, 0xed, + 0x02, 0x00, 0x00, 0x4d, 0xee, 0x02, 0x00, 0x00, + 0x4d, 0xd4, 0x02, 0x00, 0x00, 0x4d, 0xf3, 0x02, + 0x00, 0x00, 0x0b, 0x04, 0xf4, 0x02, 0x00, 0x00, + 0x4d, 0xf5, 0x02, 0x00, 0x00, 0x04, 0xf6, 0x02, + 0x00, 0x00, 0x4d, 0xf7, 0x02, 0x00, 0x00, 0x04, + 0xf8, 0x02, 0x00, 0x00, 0x4d, 0xf9, 0x02, 0x00, + 0x00, 0x04, 0xfa, 0x02, 0x00, 0x00, 0x4d, 0xfb, + 0x02, 0x00, 0x00, 0x04, 0xfc, 0x02, 0x00, 0x00, + 0x4d, 0xfd, 0x02, 0x00, 0x00, 0x04, 0xfe, 0x02, + 0x00, 0x00, 0x4d, 0xff, 0x02, 0x00, 0x00, 0x04, + 0x00, 0x03, 0x00, 0x00, 0x4d, 0x01, 0x03, 0x00, + 0x00, 0x04, 0x02, 0x03, 0x00, 0x00, 0x4d, 0x03, + 0x03, 0x00, 0x00, 0x04, 0x04, 0x03, 0x00, 0x00, + 0x4d, 0x05, 0x03, 0x00, 0x00, 0x04, 0x06, 0x03, + 0x00, 0x00, 0x4d, 0x07, 0x03, 0x00, 0x00, 0x04, + 0x08, 0x03, 0x00, 0x00, 0x4d, 0x09, 0x03, 0x00, + 0x00, 0x04, 0x0a, 0x03, 0x00, 0x00, 0x4d, 0x0b, + 0x03, 0x00, 0x00, 0x04, 0x0c, 0x03, 0x00, 0x00, + 0x4d, 0x0d, 0x03, 0x00, 0x00, 0x04, 0x0e, 0x03, + 0x00, 0x00, 0x4d, 0x0f, 0x03, 0x00, 0x00, 0x04, + 0x10, 0x03, 0x00, 0x00, 0x4d, 0x11, 0x03, 0x00, + 0x00, 0x04, 0x12, 0x03, 0x00, 0x00, 0x4d, 0x13, + 0x03, 0x00, 0x00, 0x04, 0x14, 0x03, 0x00, 0x00, + 0x4d, 0x15, 0x03, 0x00, 0x00, 0x04, 0x16, 0x03, + 0x00, 0x00, 0x4d, 0x17, 0x03, 0x00, 0x00, 0x04, + 0x18, 0x03, 0x00, 0x00, 0x4d, 0x19, 0x03, 0x00, + 0x00, 0x04, 0x1a, 0x03, 0x00, 0x00, 0x4d, 0x1b, + 0x03, 0x00, 0x00, 0x04, 0x1c, 0x03, 0x00, 0x00, + 0x4d, 0x1d, 0x03, 0x00, 0x00, 0x04, 0x1e, 0x03, + 0x00, 0x00, 0x4d, 0x1f, 0x03, 0x00, 0x00, 0x04, + 0x20, 0x03, 0x00, 0x00, 0x4d, 0x21, 0x03, 0x00, + 0x00, 0x4d, 0x22, 0x03, 0x00, 0x00, 0x4d, 0x45, + 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, 0xcc, 0x28, + 0xc6, 0x0c, 0x01, 0x00, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_fi_size = 24739; + +const uint8_t intl_fi[24739] = { + 0x01, 0xb4, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x66, 0x69, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x0e, + 0x7b, 0x31, 0x7d, 0x20, 0x7b, 0x30, 0x7d, 0x0a, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x7b, 0x31, + 0x7d, 0x20, 0x27, 0x6b, 0x6c, 0x6f, 0x27, 0x20, + 0x7b, 0x30, 0x7d, 0x0c, 0x6d, 0x65, 0x64, 0x69, + 0x75, 0x6d, 0x08, 0x66, 0x75, 0x6c, 0x6c, 0x08, + 0x6c, 0x6f, 0x6e, 0x67, 0x02, 0x64, 0x06, 0x63, + 0x63, 0x63, 0x02, 0x45, 0x08, 0x45, 0x20, 0x64, + 0x2e, 0x04, 0x45, 0x64, 0x10, 0x45, 0x20, 0x68, + 0x2e, 0x6d, 0x6d, 0x20, 0x61, 0x06, 0x45, 0x68, + 0x6d, 0x0c, 0x45, 0x20, 0x48, 0x2e, 0x6d, 0x6d, + 0x06, 0x45, 0x48, 0x6d, 0x16, 0x45, 0x20, 0x68, + 0x2e, 0x6d, 0x6d, 0x2e, 0x73, 0x73, 0x20, 0x61, + 0x08, 0x45, 0x68, 0x6d, 0x73, 0x12, 0x45, 0x20, + 0x48, 0x2e, 0x6d, 0x6d, 0x2e, 0x73, 0x73, 0x08, + 0x45, 0x48, 0x6d, 0x73, 0x06, 0x79, 0x20, 0x47, + 0x04, 0x47, 0x79, 0x0e, 0x4c, 0x4c, 0x4c, 0x20, + 0x79, 0x20, 0x47, 0x0a, 0x47, 0x79, 0x4d, 0x4d, + 0x4d, 0x14, 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, + 0x20, 0x79, 0x20, 0x47, 0x0c, 0x47, 0x79, 0x4d, + 0x4d, 0x4d, 0x64, 0x18, 0x45, 0x20, 0x64, 0x2e, + 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x20, 0x47, + 0x0e, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, + 0x06, 0x68, 0x20, 0x61, 0x02, 0x68, 0x02, 0x48, + 0x0c, 0x68, 0x2e, 0x6d, 0x6d, 0x20, 0x61, 0x04, + 0x68, 0x6d, 0x08, 0x48, 0x2e, 0x6d, 0x6d, 0x04, + 0x48, 0x6d, 0x12, 0x68, 0x2e, 0x6d, 0x6d, 0x2e, + 0x73, 0x73, 0x20, 0x61, 0x06, 0x68, 0x6d, 0x73, + 0x0e, 0x48, 0x2e, 0x6d, 0x6d, 0x2e, 0x73, 0x73, + 0x06, 0x48, 0x6d, 0x73, 0x16, 0x68, 0x2e, 0x6d, + 0x6d, 0x2e, 0x73, 0x73, 0x20, 0x61, 0x20, 0x76, + 0x08, 0x68, 0x6d, 0x73, 0x76, 0x12, 0x48, 0x2e, + 0x6d, 0x6d, 0x2e, 0x73, 0x73, 0x20, 0x76, 0x08, + 0x48, 0x6d, 0x73, 0x76, 0x10, 0x68, 0x2e, 0x6d, + 0x6d, 0x20, 0x61, 0x20, 0x76, 0x06, 0x68, 0x6d, + 0x76, 0x0c, 0x48, 0x2e, 0x6d, 0x6d, 0x20, 0x76, + 0x06, 0x48, 0x6d, 0x76, 0x02, 0x4c, 0x02, 0x4d, + 0x08, 0x64, 0x2e, 0x4d, 0x2e, 0x04, 0x4d, 0x64, + 0x0c, 0x45, 0x20, 0x64, 0x2e, 0x4d, 0x2e, 0x06, + 0x4d, 0x45, 0x64, 0x06, 0x4c, 0x4c, 0x4c, 0x06, + 0x4d, 0x4d, 0x4d, 0x0c, 0x64, 0x2e, 0x20, 0x4d, + 0x4d, 0x4d, 0x08, 0x4d, 0x4d, 0x4d, 0x64, 0x14, + 0x63, 0x63, 0x63, 0x20, 0x64, 0x2e, 0x20, 0x4d, + 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x45, 0x64, + 0x0e, 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, + 0x0a, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x08, 0x6d, + 0x2e, 0x73, 0x73, 0x04, 0x6d, 0x73, 0x02, 0x79, + 0x06, 0x4c, 0x2e, 0x79, 0x04, 0x79, 0x4d, 0x0a, + 0x64, 0x2e, 0x4d, 0x2e, 0x79, 0x06, 0x79, 0x4d, + 0x64, 0x0e, 0x45, 0x20, 0x64, 0x2e, 0x4d, 0x2e, + 0x79, 0x08, 0x79, 0x4d, 0x45, 0x64, 0x06, 0x4d, + 0x2e, 0x79, 0x06, 0x79, 0x4d, 0x4d, 0x0a, 0x4c, + 0x4c, 0x4c, 0x20, 0x79, 0x08, 0x79, 0x4d, 0x4d, + 0x4d, 0x10, 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, + 0x20, 0x79, 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x64, + 0x14, 0x45, 0x20, 0x64, 0x2e, 0x20, 0x4d, 0x4d, + 0x4d, 0x20, 0x79, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, + 0x45, 0x64, 0x0c, 0x4c, 0x4c, 0x4c, 0x4c, 0x20, + 0x79, 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x1c, + 0x63, 0x63, 0x63, 0x63, 0x20, 0x64, 0x2e, 0x20, + 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x14, 0x79, + 0x4d, 0x4d, 0x4d, 0x4d, 0x63, 0x63, 0x63, 0x63, + 0x64, 0x0a, 0x51, 0x51, 0x51, 0x20, 0x79, 0x08, + 0x79, 0x51, 0x51, 0x51, 0x0c, 0x51, 0x51, 0x51, + 0x51, 0x20, 0x79, 0x0a, 0x79, 0x51, 0x51, 0x51, + 0x51, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x73, 0x14, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, + 0x45, 0x45, 0x45, 0x45, 0x64, 0x12, 0x64, 0x2e, + 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0c, + 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x16, 0x64, + 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x73, 0x18, 0x48, 0x2e, 0x6d, 0x6d, 0x2e, + 0x73, 0x73, 0x20, 0x7a, 0x7a, 0x7a, 0x7a, 0x12, + 0x68, 0x6d, 0x6d, 0x73, 0x73, 0x7a, 0x7a, 0x7a, + 0x7a, 0x12, 0x48, 0x2e, 0x6d, 0x6d, 0x2e, 0x73, + 0x73, 0x20, 0x7a, 0x08, 0x68, 0x6d, 0x73, 0x7a, + 0x16, 0x74, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x73, 0x0e, 0x66, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x73, 0x02, 0x54, 0x02, 0x4b, + 0x02, 0x53, 0x02, 0x4a, 0x0c, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x14, 0x74, 0x61, 0x6d, 0x6d, + 0x69, 0x6b, 0x75, 0x75, 0x74, 0x61, 0x14, 0x68, + 0x65, 0x6c, 0x6d, 0x69, 0x6b, 0x75, 0x75, 0x74, + 0x61, 0x16, 0x6d, 0x61, 0x61, 0x6c, 0x69, 0x73, + 0x6b, 0x75, 0x75, 0x74, 0x61, 0x14, 0x68, 0x75, + 0x68, 0x74, 0x69, 0x6b, 0x75, 0x75, 0x74, 0x61, + 0x14, 0x74, 0x6f, 0x75, 0x6b, 0x6f, 0x6b, 0x75, + 0x75, 0x74, 0x61, 0x12, 0x6b, 0x65, 0x73, 0xe4, + 0x6b, 0x75, 0x75, 0x74, 0x61, 0x14, 0x68, 0x65, + 0x69, 0x6e, 0xe4, 0x6b, 0x75, 0x75, 0x74, 0x61, + 0x10, 0x65, 0x6c, 0x6f, 0x6b, 0x75, 0x75, 0x74, + 0x61, 0x12, 0x73, 0x79, 0x79, 0x73, 0x6b, 0x75, + 0x75, 0x74, 0x61, 0x12, 0x6c, 0x6f, 0x6b, 0x61, + 0x6b, 0x75, 0x75, 0x74, 0x61, 0x16, 0x6d, 0x61, + 0x72, 0x72, 0x61, 0x73, 0x6b, 0x75, 0x75, 0x74, + 0x61, 0x14, 0x6a, 0x6f, 0x75, 0x6c, 0x75, 0x6b, + 0x75, 0x75, 0x74, 0x61, 0x0c, 0x6d, 0x6f, 0x6e, + 0x74, 0x68, 0x73, 0x02, 0x50, 0x04, 0x73, 0x75, + 0x04, 0x6d, 0x61, 0x04, 0x74, 0x69, 0x04, 0x6b, + 0x65, 0x04, 0x74, 0x6f, 0x04, 0x70, 0x65, 0x04, + 0x6c, 0x61, 0x16, 0x73, 0x75, 0x6e, 0x6e, 0x75, + 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x61, 0x16, 0x6d, + 0x61, 0x61, 0x6e, 0x61, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x61, 0x12, 0x74, 0x69, 0x69, 0x73, 0x74, + 0x61, 0x69, 0x6e, 0x61, 0x1a, 0x6b, 0x65, 0x73, + 0x6b, 0x69, 0x76, 0x69, 0x69, 0x6b, 0x6b, 0x6f, + 0x6e, 0x61, 0x12, 0x74, 0x6f, 0x72, 0x73, 0x74, + 0x61, 0x69, 0x6e, 0x61, 0x16, 0x70, 0x65, 0x72, + 0x6a, 0x61, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x61, + 0x14, 0x6c, 0x61, 0x75, 0x61, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x61, 0x08, 0x64, 0x61, 0x79, 0x73, + 0x04, 0x42, 0x45, 0x08, 0x65, 0x72, 0x61, 0x73, + 0x06, 0x61, 0x70, 0x2e, 0x04, 0x61, 0x6d, 0x06, + 0x69, 0x70, 0x2e, 0x04, 0x70, 0x6d, 0x14, 0x64, + 0x61, 0x79, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, + 0x73, 0x06, 0x4d, 0x30, 0x31, 0x06, 0x4d, 0x30, + 0x32, 0x06, 0x4d, 0x30, 0x33, 0x06, 0x4d, 0x30, + 0x34, 0x06, 0x4d, 0x30, 0x35, 0x06, 0x4d, 0x30, + 0x36, 0x06, 0x4d, 0x30, 0x37, 0x06, 0x4d, 0x30, + 0x38, 0x06, 0x4d, 0x30, 0x39, 0x06, 0x4d, 0x31, + 0x30, 0x06, 0x4d, 0x31, 0x31, 0x06, 0x4d, 0x31, + 0x32, 0x08, 0x54, 0x6f, 0x75, 0x74, 0x08, 0x42, + 0x61, 0x62, 0x61, 0x0a, 0x48, 0x61, 0x74, 0x6f, + 0x72, 0x0a, 0x4b, 0x69, 0x61, 0x68, 0x6b, 0x08, + 0x54, 0x6f, 0x62, 0x61, 0x0c, 0x41, 0x6d, 0x73, + 0x68, 0x69, 0x72, 0x10, 0x42, 0x61, 0x72, 0x61, + 0x6d, 0x68, 0x61, 0x74, 0x12, 0x42, 0x61, 0x72, + 0x61, 0x6d, 0x6f, 0x75, 0x64, 0x61, 0x0e, 0x42, + 0x61, 0x73, 0x68, 0x61, 0x6e, 0x73, 0x0a, 0x50, + 0x61, 0x6f, 0x6e, 0x61, 0x08, 0x45, 0x70, 0x65, + 0x70, 0x0a, 0x4d, 0x65, 0x73, 0x72, 0x61, 0x0a, + 0x4e, 0x61, 0x73, 0x69, 0x65, 0x08, 0x45, 0x52, + 0x41, 0x30, 0x08, 0x45, 0x52, 0x41, 0x31, 0x10, + 0x4d, 0x65, 0x73, 0x6b, 0x65, 0x72, 0x65, 0x6d, + 0x0c, 0x54, 0x65, 0x6b, 0x65, 0x6d, 0x74, 0x0a, + 0x48, 0x65, 0x64, 0x61, 0x72, 0x0c, 0x54, 0x61, + 0x68, 0x73, 0x61, 0x73, 0x06, 0x54, 0x65, 0x72, + 0x0e, 0x59, 0x65, 0x6b, 0x61, 0x74, 0x69, 0x74, + 0x0e, 0x4d, 0x65, 0x67, 0x61, 0x62, 0x69, 0x74, + 0x0c, 0x4d, 0x69, 0x61, 0x7a, 0x69, 0x61, 0x0c, + 0x47, 0x65, 0x6e, 0x62, 0x6f, 0x74, 0x08, 0x53, + 0x65, 0x6e, 0x65, 0x0a, 0x48, 0x61, 0x6d, 0x6c, + 0x65, 0x0e, 0x4e, 0x65, 0x68, 0x61, 0x73, 0x73, + 0x65, 0x0e, 0x50, 0x61, 0x67, 0x75, 0x6d, 0x65, + 0x6e, 0x04, 0x65, 0x4b, 0x04, 0x6a, 0x4b, 0x06, + 0x65, 0x61, 0x61, 0x06, 0x6a, 0x61, 0x61, 0x08, + 0x65, 0x4b, 0x72, 0x2e, 0x08, 0x6a, 0x4b, 0x72, + 0x2e, 0x08, 0x65, 0x61, 0x61, 0x2e, 0x08, 0x6a, + 0x61, 0x61, 0x2e, 0x32, 0x65, 0x6e, 0x6e, 0x65, + 0x6e, 0x20, 0x4b, 0x72, 0x69, 0x73, 0x74, 0x75, + 0x6b, 0x73, 0x65, 0x6e, 0x20, 0x73, 0x79, 0x6e, + 0x74, 0x79, 0x6d, 0xe4, 0xe4, 0x36, 0x6a, 0xe4, + 0x6c, 0x6b, 0x65, 0x65, 0x6e, 0x20, 0x4b, 0x72, + 0x69, 0x73, 0x74, 0x75, 0x6b, 0x73, 0x65, 0x6e, + 0x20, 0x73, 0x79, 0x6e, 0x74, 0x79, 0x6d, 0xe4, + 0x6e, 0x2c, 0x65, 0x6e, 0x6e, 0x65, 0x6e, 0x20, + 0x61, 0x6a, 0x61, 0x6e, 0x6c, 0x61, 0x73, 0x6b, + 0x75, 0x6e, 0x20, 0x61, 0x6c, 0x6b, 0x75, 0x61, + 0x2e, 0x6a, 0xe4, 0x6c, 0x6b, 0x65, 0x65, 0x6e, + 0x20, 0x61, 0x6a, 0x61, 0x6e, 0x6c, 0x61, 0x73, + 0x6b, 0x75, 0x6e, 0x20, 0x61, 0x6c, 0x75, 0x6e, + 0x02, 0x41, 0x02, 0x4e, 0x02, 0x49, 0x15, 0x74, + 0x00, 0x69, 0x00, 0x61, 0x01, 0x72, 0x00, 0xed, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x75, 0x00, 0x74, + 0x00, 0x61, 0x00, 0x17, 0x68, 0x00, 0x65, 0x00, + 0x61, 0x01, 0x76, 0x00, 0xe1, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x75, 0x00, 0x74, 0x00, + 0x61, 0x00, 0x16, 0x6b, 0x69, 0x73, 0x6c, 0xe9, + 0x76, 0x6b, 0x75, 0x75, 0x74, 0x61, 0x14, 0x74, + 0x65, 0x76, 0xe9, 0x74, 0x6b, 0x75, 0x75, 0x74, + 0x61, 0x15, 0x61, 0x01, 0x65, 0x00, 0x76, 0x00, + 0xe1, 0x00, 0x74, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x75, 0x00, 0x74, 0x00, 0x61, 0x00, 0x16, 0x61, + 0x64, 0xe1, 0x72, 0x6b, 0x75, 0x75, 0x74, 0x61, + 0x20, 0x49, 0x12, 0x61, 0x64, 0xe1, 0x72, 0x6b, + 0x75, 0x75, 0x74, 0x61, 0x14, 0x6e, 0x69, 0x73, + 0xe1, 0x6e, 0x6b, 0x75, 0x75, 0x74, 0x61, 0x14, + 0x69, 0x6a, 0x6a, 0xe1, 0x72, 0x6b, 0x75, 0x75, + 0x74, 0x61, 0x14, 0x73, 0x69, 0x76, 0xe1, 0x6e, + 0x6b, 0x75, 0x75, 0x74, 0x61, 0x16, 0x74, 0x61, + 0x6d, 0x6d, 0xfa, 0x7a, 0x6b, 0x75, 0x75, 0x74, + 0x61, 0x0e, 0x61, 0x62, 0x6b, 0x75, 0x75, 0x74, + 0x61, 0x12, 0x65, 0x6c, 0xfa, 0x6c, 0x6b, 0x75, + 0x75, 0x74, 0x61, 0x18, 0x61, 0x64, 0xe1, 0x72, + 0x6b, 0x75, 0x75, 0x74, 0x61, 0x20, 0x49, 0x49, + 0x04, 0x41, 0x4d, 0x0e, 0x43, 0x68, 0x61, 0x69, + 0x74, 0x72, 0x61, 0x10, 0x56, 0x61, 0x69, 0x73, + 0x61, 0x6b, 0x68, 0x61, 0x10, 0x4a, 0x79, 0x61, + 0x69, 0x73, 0x74, 0x68, 0x61, 0x0c, 0x41, 0x73, + 0x61, 0x64, 0x68, 0x61, 0x0e, 0x53, 0x72, 0x61, + 0x76, 0x61, 0x6e, 0x61, 0x0c, 0x42, 0x68, 0x61, + 0x64, 0x72, 0x61, 0x0c, 0x41, 0x73, 0x76, 0x69, + 0x6e, 0x61, 0x0e, 0x4b, 0x61, 0x72, 0x74, 0x69, + 0x6b, 0x61, 0x14, 0x41, 0x67, 0x72, 0x61, 0x68, + 0x61, 0x79, 0x61, 0x6e, 0x61, 0x0a, 0x50, 0x61, + 0x75, 0x73, 0x61, 0x0a, 0x4d, 0x61, 0x67, 0x68, + 0x61, 0x10, 0x50, 0x68, 0x61, 0x6c, 0x67, 0x75, + 0x6e, 0x61, 0x08, 0x53, 0x61, 0x6b, 0x61, 0x08, + 0x4d, 0x75, 0x68, 0x2e, 0x08, 0x53, 0x61, 0x66, + 0x2e, 0x0c, 0x52, 0x61, 0x62, 0x2e, 0x20, 0x49, + 0x0e, 0x52, 0x61, 0x62, 0x2e, 0x20, 0x49, 0x49, + 0x0c, 0x4a, 0x75, 0x6d, 0x2e, 0x20, 0x49, 0x0e, + 0x4a, 0x75, 0x6d, 0x2e, 0x20, 0x49, 0x49, 0x08, + 0x52, 0x61, 0x6a, 0x2e, 0x08, 0x53, 0x68, 0x61, + 0x2e, 0x08, 0x52, 0x61, 0x6d, 0x2e, 0x0a, 0x53, + 0x68, 0x61, 0x77, 0x2e, 0x11, 0x44, 0x00, 0x68, + 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, + 0x00, 0x51, 0x00, 0x2e, 0x00, 0x11, 0x44, 0x00, + 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, + 0x2d, 0x00, 0x48, 0x00, 0x2e, 0x00, 0x10, 0x6d, + 0x75, 0x68, 0x61, 0x72, 0x72, 0x61, 0x6d, 0x0a, + 0x73, 0x61, 0x66, 0x61, 0x72, 0x1d, 0x72, 0x00, + 0x61, 0x00, 0x62, 0x00, 0x69, 0x00, 0x19, 0x20, + 0x20, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x2d, 0x00, + 0x61, 0x00, 0x77, 0x00, 0x77, 0x00, 0x61, 0x00, + 0x6c, 0x00, 0x1d, 0x72, 0x00, 0x61, 0x00, 0x62, + 0x00, 0x69, 0x00, 0x19, 0x20, 0x20, 0x00, 0x61, + 0x00, 0x6c, 0x00, 0x2d, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x68, 0x00, 0x69, 0x00, 0x72, 0x00, 0x1b, + 0x64, 0x00, 0x7e, 0x01, 0x75, 0x00, 0x6d, 0x00, + 0x61, 0x00, 0x64, 0x00, 0x61, 0x00, 0x2d, 0x00, + 0x6c, 0x00, 0x2d, 0x00, 0x75, 0x00, 0x6c, 0x00, + 0x61, 0x00, 0x21, 0x64, 0x00, 0x7e, 0x01, 0x75, + 0x00, 0x6d, 0x00, 0x61, 0x00, 0x64, 0x00, 0x61, + 0x00, 0x2d, 0x00, 0x6c, 0x00, 0x2d, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x68, 0x00, 0x69, 0x00, 0x72, + 0x00, 0x61, 0x00, 0x0d, 0x72, 0x00, 0x61, 0x00, + 0x64, 0x00, 0x7e, 0x01, 0x61, 0x00, 0x62, 0x00, + 0x0d, 0x61, 0x01, 0x61, 0x00, 0x19, 0x20, 0x62, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x0e, 0x72, 0x61, + 0x6d, 0x61, 0x64, 0x61, 0x6e, 0x0d, 0x61, 0x01, + 0x61, 0x00, 0x77, 0x00, 0x77, 0x00, 0x61, 0x00, + 0x6c, 0x00, 0x17, 0x64, 0x00, 0x68, 0x00, 0x75, + 0x00, 0x2d, 0x00, 0x6c, 0x00, 0x2d, 0x00, 0x71, + 0x00, 0x61, 0x00, 0x19, 0x20, 0x64, 0x00, 0x61, + 0x00, 0x19, 0x64, 0x00, 0x68, 0x00, 0x75, 0x00, + 0x2d, 0x00, 0x6c, 0x00, 0x2d, 0x00, 0x68, 0x00, + 0x69, 0x00, 0x64, 0x00, 0x64, 0x00, 0x7e, 0x01, + 0x61, 0x00, 0x04, 0x41, 0x48, 0x1f, 0x54, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x36, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x13, 0x20, 0x36, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x21, 0x53, 0x00, 0x68, 0x00, 0x75, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1f, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, + 0x57, 0x00, 0x61, 0x00, 0x64, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x1f, 0x52, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x1d, 0x59, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1f, 0x4a, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6b, + 0x00, 0x61, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x2d, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x2d, 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x2b, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x2d, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x2a, 0x4a, 0x69, 0x6e, 0x67, 0x6f, + 0x2d, 0x6b, 0x65, 0x69, 0x75, 0x6e, 0x20, 0x28, + 0x37, 0x36, 0x37, 0x2d, 0x37, 0x37, 0x30, 0x29, + 0x1d, 0x48, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x37, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, + 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, 0x64, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, 0x4b, + 0x00, 0x4d, 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x38, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4a, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x61, 0x00, + 0x6a, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, + 0x53, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x20, 0x54, + 0x65, 0x6e, 0x2d, 0x61, 0x6e, 0x20, 0x28, 0x38, + 0x35, 0x37, 0x2d, 0x38, 0x35, 0x39, 0x29, 0x1f, + 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x47, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, + 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1d, 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, + 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x34, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1b, 0x4c, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, + 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x1d, 0x41, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x1d, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x4a, 0x00, 0x69, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x29, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x27, 0x4a, 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, + 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4c, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x61, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x25, 0x4a, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x24, 0x54, 0x65, 0x6e, 0x2d, 0x65, + 0x69, 0x20, 0x28, 0x31, 0x31, 0x31, 0x30, 0x2d, + 0x31, 0x31, 0x31, 0x33, 0x29, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, + 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x4d, 0x01, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x45, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x6a, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x48, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, + 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4c, + 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6d, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x4a, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x59, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x75, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x29, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x29, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x4a, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x21, 0x4a, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x27, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x75, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x29, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x74, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x29, 0x52, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x4e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, + 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x61, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, + 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x27, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x45, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, 0x69, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x27, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x27, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x61, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x41, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x4d, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x0a, 0x4d, 0x65, 0x69, 0x6a, 0x69, 0x0d, 0x54, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x0b, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x0c, 0x48, + 0x65, 0x69, 0x73, 0x65, 0x69, 0x12, 0x46, 0x61, + 0x72, 0x76, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x16, + 0x4f, 0x72, 0x64, 0x69, 0x62, 0x65, 0x68, 0x65, + 0x73, 0x68, 0x74, 0x0e, 0x4b, 0x68, 0x6f, 0x72, + 0x64, 0x61, 0x64, 0x06, 0x54, 0x69, 0x72, 0x0c, + 0x4d, 0x6f, 0x72, 0x64, 0x61, 0x64, 0x12, 0x53, + 0x68, 0x61, 0x68, 0x72, 0x69, 0x76, 0x61, 0x72, + 0x08, 0x4d, 0x65, 0x68, 0x72, 0x08, 0x41, 0x62, + 0x61, 0x6e, 0x08, 0x41, 0x7a, 0x61, 0x72, 0x06, + 0x44, 0x65, 0x79, 0x0c, 0x42, 0x61, 0x68, 0x6d, + 0x61, 0x6e, 0x0c, 0x45, 0x73, 0x66, 0x61, 0x6e, + 0x64, 0x04, 0x41, 0x50, 0x1a, 0x42, 0x65, 0x66, + 0x6f, 0x72, 0x65, 0x20, 0x52, 0x2e, 0x4f, 0x2e, + 0x43, 0x2e, 0x0c, 0x4d, 0x69, 0x6e, 0x67, 0x75, + 0x6f, 0x12, 0x63, 0x61, 0x6c, 0x65, 0x6e, 0x64, + 0x61, 0x72, 0x73, 0x08, 0x64, 0x61, 0x74, 0x65, + 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, 0x75, + 0x10, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0x1e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, + 0x6e, 0x26, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x6e, 0x65, + 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, + 0x74, 0x74, 0x65, 0x72, 0x6e, 0x0e, 0x64, 0x65, + 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x26, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0xa0, 0x7b, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, + 0x7d, 0x3c, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0xa0, 0x7b, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, + 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, + 0x79, 0x2c, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0xa0, 0x7b, 0x70, 0x65, 0x72, 0x63, + 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, + 0x42, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0xa0, 0x7b, 0x70, 0x65, + 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, + 0x6e, 0x7d, 0x0e, 0x70, 0x65, 0x72, 0x63, 0x65, + 0x6e, 0x74, 0x10, 0x70, 0x61, 0x74, 0x74, 0x65, + 0x72, 0x6e, 0x73, 0x02, 0x2c, 0x02, 0xa0, 0x0a, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x0e, 0x65, 0x70, + 0xe4, 0x6c, 0x75, 0x6b, 0x75, 0x06, 0x6e, 0x61, + 0x6e, 0x02, 0x2b, 0x10, 0x70, 0x6c, 0x75, 0x73, + 0x53, 0x69, 0x67, 0x6e, 0x03, 0x12, 0x22, 0x12, + 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x02, 0x25, 0x16, 0x70, 0x65, 0x72, 0x63, + 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x03, + 0x1e, 0x22, 0x10, 0x69, 0x6e, 0x66, 0x69, 0x6e, + 0x69, 0x74, 0x79, 0x0e, 0x73, 0x79, 0x6d, 0x62, + 0x6f, 0x6c, 0x73, 0x03, 0xac, 0x20, 0x06, 0x45, + 0x55, 0x52, 0x04, 0x6d, 0x6b, 0x06, 0x46, 0x49, + 0x4d, 0x02, 0xa3, 0x06, 0x47, 0x42, 0x50, 0x02, + 0xa5, 0x06, 0x4a, 0x50, 0x59, 0x02, 0x24, 0x06, + 0x55, 0x53, 0x44, 0x08, 0x46, 0x43, 0x46, 0x41, + 0x06, 0x58, 0x41, 0x46, 0x06, 0x43, 0x46, 0x41, + 0x06, 0x58, 0x4f, 0x46, 0x14, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x52, + 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, + 0x6c, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, + 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x6a, 0x73, + 0x6f, 0x6e, 0x70, 0x2f, 0x66, 0x69, 0x2e, 0x6a, + 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, + 0x01, 0x00, 0x27, 0x00, 0x7b, 0x90, 0x6a, 0x01, + 0xa0, 0x01, 0x00, 0x00, 0x00, 0x39, 0xd0, 0x00, + 0x00, 0x00, 0x43, 0xd1, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd2, 0x00, 0x00, 0x00, 0x4d, 0xd3, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd4, 0x00, 0x00, 0x00, + 0x04, 0xd5, 0x00, 0x00, 0x00, 0x04, 0xd6, 0x00, + 0x00, 0x00, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x04, + 0xd8, 0x00, 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, + 0x00, 0x04, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdb, + 0x00, 0x00, 0x00, 0x04, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0xdd, 0x00, 0x00, 0x00, 0x04, 0xde, 0x00, + 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, 0x04, + 0xe0, 0x00, 0x00, 0x00, 0x04, 0xe1, 0x00, 0x00, + 0x00, 0x04, 0xe2, 0x00, 0x00, 0x00, 0x26, 0x0f, + 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x0a, 0x4d, + 0xe4, 0x00, 0x00, 0x00, 0x09, 0x4d, 0xe5, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe8, 0x00, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x00, 0x04, + 0xe8, 0x00, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xec, 0x00, 0x00, + 0x00, 0x4d, 0xec, 0x00, 0x00, 0x00, 0x04, 0xed, + 0x00, 0x00, 0x00, 0x4d, 0xee, 0x00, 0x00, 0x00, + 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, 0xf0, 0x00, + 0x00, 0x00, 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, + 0xf2, 0x00, 0x00, 0x00, 0x04, 0xf3, 0x00, 0x00, + 0x00, 0x4d, 0xf4, 0x00, 0x00, 0x00, 0x04, 0xf5, + 0x00, 0x00, 0x00, 0x4d, 0xf6, 0x00, 0x00, 0x00, + 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xf8, 0x00, + 0x00, 0x00, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, + 0xfa, 0x00, 0x00, 0x00, 0x04, 0xfb, 0x00, 0x00, + 0x00, 0x4d, 0xfc, 0x00, 0x00, 0x00, 0x04, 0xfd, + 0x00, 0x00, 0x00, 0x4d, 0xfe, 0x00, 0x00, 0x00, + 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x01, + 0x00, 0x00, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, + 0x02, 0x01, 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, + 0x00, 0x4d, 0x03, 0x01, 0x00, 0x00, 0x04, 0x04, + 0x01, 0x00, 0x00, 0x4d, 0x05, 0x01, 0x00, 0x00, + 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, 0x07, 0x01, + 0x00, 0x00, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, + 0x09, 0x01, 0x00, 0x00, 0x04, 0x0a, 0x01, 0x00, + 0x00, 0x4d, 0x0b, 0x01, 0x00, 0x00, 0x04, 0x0c, + 0x01, 0x00, 0x00, 0x4d, 0x0d, 0x01, 0x00, 0x00, + 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, 0x0f, 0x01, + 0x00, 0x00, 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, + 0x11, 0x01, 0x00, 0x00, 0x04, 0x12, 0x01, 0x00, + 0x00, 0x4d, 0x13, 0x01, 0x00, 0x00, 0x04, 0x14, + 0x01, 0x00, 0x00, 0x4d, 0x15, 0x01, 0x00, 0x00, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, 0x17, 0x01, + 0x00, 0x00, 0x04, 0x18, 0x01, 0x00, 0x00, 0x4d, + 0x19, 0x01, 0x00, 0x00, 0x04, 0x1a, 0x01, 0x00, + 0x00, 0x4d, 0x1b, 0x01, 0x00, 0x00, 0x04, 0x1c, + 0x01, 0x00, 0x00, 0x4d, 0x1d, 0x01, 0x00, 0x00, + 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, 0x1f, 0x01, + 0x00, 0x00, 0x04, 0x20, 0x01, 0x00, 0x00, 0x4d, + 0x21, 0x01, 0x00, 0x00, 0x04, 0x22, 0x01, 0x00, + 0x00, 0x4d, 0x23, 0x01, 0x00, 0x00, 0x04, 0x24, + 0x01, 0x00, 0x00, 0x4d, 0x24, 0x01, 0x00, 0x00, + 0x04, 0x25, 0x01, 0x00, 0x00, 0x4d, 0x26, 0x01, + 0x00, 0x00, 0x04, 0x27, 0x01, 0x00, 0x00, 0x4d, + 0x28, 0x01, 0x00, 0x00, 0x04, 0x29, 0x01, 0x00, + 0x00, 0x4d, 0x2a, 0x01, 0x00, 0x00, 0x04, 0x2b, + 0x01, 0x00, 0x00, 0x4d, 0x2c, 0x01, 0x00, 0x00, + 0x04, 0x2d, 0x01, 0x00, 0x00, 0x4d, 0x2e, 0x01, + 0x00, 0x00, 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, + 0x30, 0x01, 0x00, 0x00, 0x04, 0x31, 0x01, 0x00, + 0x00, 0x4d, 0x32, 0x01, 0x00, 0x00, 0x04, 0x33, + 0x01, 0x00, 0x00, 0x4d, 0x34, 0x01, 0x00, 0x00, + 0x04, 0x35, 0x01, 0x00, 0x00, 0x4d, 0x36, 0x01, + 0x00, 0x00, 0x04, 0x37, 0x01, 0x00, 0x00, 0x4d, + 0x38, 0x01, 0x00, 0x00, 0x04, 0x39, 0x01, 0x00, + 0x00, 0x4d, 0x3a, 0x01, 0x00, 0x00, 0x4d, 0x3b, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x35, 0x01, 0x00, + 0x00, 0x4d, 0x3c, 0x01, 0x00, 0x00, 0x04, 0x3d, + 0x01, 0x00, 0x00, 0x4d, 0x3e, 0x01, 0x00, 0x00, + 0x04, 0x27, 0x01, 0x00, 0x00, 0x4d, 0x30, 0x01, + 0x00, 0x00, 0x04, 0x27, 0x01, 0x00, 0x00, 0x4d, + 0x28, 0x01, 0x00, 0x00, 0x4d, 0x3f, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x40, 0x01, 0x00, 0x00, 0x4d, + 0x41, 0x01, 0x00, 0x00, 0x04, 0x42, 0x01, 0x00, + 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, 0x0a, + 0x01, 0x00, 0x00, 0x4d, 0x09, 0x01, 0x00, 0x00, + 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, 0x05, 0x01, + 0x00, 0x00, 0x4d, 0x44, 0x01, 0x00, 0x00, 0x4d, + 0x45, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x0b, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, + 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x03, + 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x03, 0x01, + 0x00, 0x00, 0x04, 0xee, 0x00, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, + 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x49, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x57, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x14, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x67, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x4d, 0x6d, 0x01, 0x00, + 0x00, 0x4d, 0x6e, 0x01, 0x00, 0x00, 0x4d, 0xd5, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x00, 0xbe, + 0x01, 0xbe, 0x02, 0xbe, 0x03, 0xbe, 0x04, 0xbe, + 0x05, 0xbe, 0x06, 0xbe, 0x07, 0xbe, 0x08, 0xbe, + 0x09, 0xbe, 0x0a, 0xbe, 0x0b, 0x26, 0x0c, 0x00, + 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x57, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x67, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x4d, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x4d, 0x6d, 0x01, 0x00, 0x00, 0x4d, 0x6e, + 0x01, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x0c, 0xbe, 0x0d, 0xbe, 0x0e, + 0xbe, 0x0f, 0xbe, 0x10, 0xbe, 0x11, 0xbe, 0x12, + 0xbe, 0x13, 0xbe, 0x14, 0xbe, 0x15, 0xbe, 0x16, + 0xbe, 0x17, 0xbe, 0x18, 0x26, 0x0d, 0x00, 0x4d, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, + 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, + 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, + 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, + 0x04, 0x87, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, + 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x26, 0x0d, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x57, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x46, + 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x67, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x88, 0x01, 0x00, 0x00, + 0x04, 0x89, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, + 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x4d, 0x6d, + 0x01, 0x00, 0x00, 0x4d, 0x6e, 0x01, 0x00, 0x00, + 0x4d, 0xd7, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x19, 0xbe, 0x1a, 0xbe, 0x1b, 0xbe, 0x1c, 0xbe, + 0x1d, 0xbe, 0x1e, 0xbe, 0x1f, 0xbe, 0x20, 0xbe, + 0x21, 0xbe, 0x22, 0xbe, 0x23, 0xbe, 0x24, 0x26, + 0x0c, 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x57, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x67, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x4d, 0x6d, 0x01, 0x00, 0x00, + 0x4d, 0x6e, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x25, 0xbe, 0x26, + 0xbe, 0x27, 0xbe, 0x28, 0xbe, 0x29, 0xbe, 0x2a, + 0xbe, 0x2b, 0xbe, 0x2c, 0xbe, 0x2d, 0xbe, 0x2e, + 0xbe, 0x2f, 0xbe, 0x30, 0xbe, 0x31, 0x26, 0x0d, + 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x8a, + 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, + 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, + 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, + 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, + 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, + 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, + 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, + 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, + 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, + 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, + 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, + 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, + 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, + 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, + 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x57, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x67, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x88, 0x01, + 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x4d, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x4d, 0x6d, 0x01, 0x00, 0x00, 0x4d, 0x6e, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x32, 0xbe, 0x33, 0xbe, 0x34, 0xbe, + 0x35, 0xbe, 0x36, 0xbe, 0x37, 0xbe, 0x38, 0xbe, + 0x39, 0xbe, 0x3a, 0xbe, 0x3b, 0xbe, 0x3c, 0xbe, + 0x3d, 0xbe, 0x3e, 0x26, 0x0d, 0x00, 0x4d, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, + 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, + 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, + 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, + 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, + 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, + 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, + 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, + 0x96, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, + 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, + 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, + 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, + 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, + 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, + 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, + 0x04, 0x96, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x57, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x67, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x88, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x88, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x4d, 0x6d, + 0x01, 0x00, 0x00, 0x4d, 0x6e, 0x01, 0x00, 0x00, + 0x4d, 0xd9, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x3f, 0xbe, 0x40, 0xbe, 0x41, 0xbe, 0x42, 0xbe, + 0x43, 0xbe, 0x44, 0xbe, 0x45, 0xbe, 0x46, 0xbe, + 0x47, 0xbe, 0x48, 0xbe, 0x49, 0xbe, 0x4a, 0x26, + 0x0c, 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x57, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x67, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x88, 0x01, 0x00, + 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x4d, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x4d, + 0x6d, 0x01, 0x00, 0x00, 0x4d, 0x6e, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x03, 0x01, + 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, + 0x03, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x03, + 0x01, 0x00, 0x00, 0x04, 0xee, 0x00, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, + 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, + 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x57, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x46, + 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x04, 0x14, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x67, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, + 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, + 0x04, 0x9a, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, + 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, + 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, + 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, + 0x00, 0x26, 0x04, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, + 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, + 0x04, 0xa2, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x4d, 0x6d, 0x01, 0x00, 0x00, 0x4d, + 0x6e, 0x01, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x04, 0x03, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, + 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, + 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, + 0xee, 0x00, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, + 0x00, 0x26, 0x0e, 0x00, 0x4d, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, + 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, + 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, + 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, + 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, + 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, + 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, + 0x04, 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, + 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, 0x26, + 0x0e, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, + 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, + 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, + 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, + 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, + 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, + 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, + 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, + 0x04, 0xb3, 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x57, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x67, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xb4, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0xb4, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x4d, 0x6d, + 0x01, 0x00, 0x00, 0x4d, 0x6e, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x4b, 0xbe, 0x4c, 0xbe, 0x4d, 0xbe, 0x4e, 0xbe, + 0x4f, 0xbe, 0x50, 0xbe, 0x51, 0xbe, 0x52, 0xbe, + 0x53, 0xbe, 0x54, 0xbe, 0x55, 0xbe, 0x56, 0x26, + 0x0c, 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0xb5, 0x01, 0x00, 0x00, 0x04, 0xb6, 0x01, 0x00, + 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, + 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, + 0x04, 0xba, 0x01, 0x00, 0x00, 0x04, 0xbb, 0x01, + 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, 0x04, + 0xbd, 0x01, 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, + 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, 0x04, 0xc0, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, + 0x04, 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, + 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, 0x04, + 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, + 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, + 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, + 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, + 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x57, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x67, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xc1, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xc1, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x4d, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x4d, 0x6d, 0x01, 0x00, 0x00, 0x4d, 0x6e, 0x01, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x57, 0xbe, 0x58, 0xbe, 0x59, 0xbe, + 0x5a, 0xbe, 0x5b, 0xbe, 0x5c, 0xbe, 0x5d, 0xbe, + 0x5e, 0xbe, 0x5f, 0xbe, 0x60, 0xbe, 0x61, 0xbe, + 0x62, 0x26, 0x0c, 0x00, 0x4d, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0xc2, 0x01, 0x00, 0x00, 0x04, 0xc3, + 0x01, 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, + 0x04, 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, 0x01, + 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, 0x04, + 0xc8, 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, + 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, 0x04, 0xcb, + 0x01, 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, + 0x04, 0xcd, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xce, 0x01, + 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, + 0xd0, 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, + 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, + 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, + 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, + 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, + 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x57, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x67, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xda, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xda, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x4d, 0x6d, 0x01, 0x00, 0x00, 0x4d, + 0x6e, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x63, 0xbe, 0x64, 0xbe, + 0x65, 0xbe, 0x66, 0xbe, 0x67, 0xbe, 0x68, 0xbe, + 0x69, 0xbe, 0x6a, 0xbe, 0x6b, 0xbe, 0x6c, 0xbe, + 0x6d, 0xbe, 0x6e, 0x26, 0x0c, 0x00, 0x4d, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, 0x00, + 0x04, 0xc3, 0x01, 0x00, 0x00, 0x04, 0xc4, 0x01, + 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, 0x04, + 0xc6, 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, + 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, 0xc9, + 0x01, 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, + 0x04, 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, 0x01, + 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xce, 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, + 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, 0xd1, + 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, + 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, + 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, + 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, + 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x57, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x14, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x67, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xda, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x4d, 0x6d, 0x01, 0x00, + 0x00, 0x4d, 0x6e, 0x01, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, 0x00, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, + 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, 0x00, + 0x04, 0xee, 0x00, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x57, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x67, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xdb, + 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, + 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, + 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, + 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, + 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, 0xe3, + 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, + 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, + 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, + 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, + 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, + 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, + 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, + 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, + 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, + 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, + 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, + 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, + 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, + 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, + 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x26, 0x20, + 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, 0x4d, 0x20, + 0x00, 0x00, 0x80, 0x04, 0xfc, 0x01, 0x00, 0x00, + 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0xfd, 0x01, + 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, + 0xfe, 0x01, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, + 0x80, 0x04, 0xff, 0x01, 0x00, 0x00, 0x4d, 0x24, + 0x00, 0x00, 0x80, 0x04, 0x00, 0x02, 0x00, 0x00, + 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0x01, 0x02, + 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, + 0x02, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, + 0x80, 0x04, 0x03, 0x02, 0x00, 0x00, 0x4d, 0x28, + 0x00, 0x00, 0x80, 0x04, 0x04, 0x02, 0x00, 0x00, + 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0x05, 0x02, + 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, + 0x06, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, + 0x80, 0x04, 0x07, 0x02, 0x00, 0x00, 0x4d, 0x2c, + 0x00, 0x00, 0x80, 0x04, 0x08, 0x02, 0x00, 0x00, + 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0x09, 0x02, + 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, + 0x0a, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, + 0x80, 0x04, 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x30, + 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, 0x00, 0x00, + 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, + 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, + 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, + 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x34, + 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, + 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, + 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, + 0x12, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, + 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, 0x4d, 0x38, + 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, + 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, + 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, + 0x16, 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, + 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, 0x4d, 0x3c, + 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, + 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, + 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, + 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, + 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x40, + 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, + 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, + 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, + 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, + 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x44, + 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, + 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, + 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, + 0x22, 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, + 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, 0x48, + 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, + 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, + 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, + 0x26, 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, + 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, 0x4c, + 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, + 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, + 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, + 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, + 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x50, + 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, + 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, + 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, + 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, + 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x54, + 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, + 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, + 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, + 0x32, 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, + 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, 0x58, + 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, + 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, + 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, + 0x36, 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, + 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, 0x5c, + 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, + 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, + 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, + 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, + 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x60, + 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, + 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, + 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, + 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, + 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x64, + 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, + 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, + 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, + 0x42, 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, + 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, 0x68, + 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, + 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, + 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, + 0x46, 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, + 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, 0x6c, + 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, + 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, + 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, + 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, + 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x70, + 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, + 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, + 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, + 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, + 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x74, + 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, + 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, + 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, + 0x52, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, + 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, 0x78, + 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, + 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, + 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, + 0x56, 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, + 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, 0x7c, + 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, + 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, + 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, + 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, + 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x80, + 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, + 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, + 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, + 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, + 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x84, + 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, + 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, + 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, + 0x62, 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, + 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, 0x88, + 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, + 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, + 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, + 0x66, 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, + 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, 0x8c, + 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, + 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, + 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, + 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, + 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x90, + 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, + 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, + 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, + 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, + 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x94, + 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, + 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, + 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, + 0x72, 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, + 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, 0x98, + 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, + 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, + 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, + 0x76, 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, + 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, 0x9c, + 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, + 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, + 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, + 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, + 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, 0xa0, + 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, + 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, + 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, + 0x7e, 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, + 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, 0xa4, + 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, + 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, + 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, + 0x82, 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, + 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, 0xa8, + 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, + 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, + 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, + 0x86, 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, + 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, 0xac, + 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, + 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, + 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, + 0x8a, 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, + 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xb0, + 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, + 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, + 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, + 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, + 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xb4, + 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, + 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, + 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, + 0x92, 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, + 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, 0xb8, + 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, + 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, + 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, + 0x96, 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, + 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, 0xbc, + 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, + 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, + 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, + 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, + 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xc0, + 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, + 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, + 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, + 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, + 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xc4, + 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, + 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, + 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, + 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, + 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xc8, + 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, + 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, + 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, + 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, + 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xcc, + 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, + 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, + 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, + 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, + 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, 0xd0, + 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, + 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, + 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, + 0xae, 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, + 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xd4, + 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, + 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, + 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, + 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, + 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, + 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, + 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, + 0xba, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, + 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, + 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xe4, + 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, + 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, + 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, + 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x80, 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x80, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, + 0x03, 0x01, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x80, 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x04, 0xdb, + 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, + 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, + 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, + 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, + 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, 0xe3, + 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, + 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, + 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, + 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, + 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, + 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, + 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, + 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, + 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, + 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, + 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, + 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, + 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, + 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, + 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x26, 0x20, + 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, 0x4d, 0x20, + 0x00, 0x00, 0x80, 0x04, 0xfc, 0x01, 0x00, 0x00, + 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0xfd, 0x01, + 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, + 0xfe, 0x01, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, + 0x80, 0x04, 0xff, 0x01, 0x00, 0x00, 0x4d, 0x24, + 0x00, 0x00, 0x80, 0x04, 0x00, 0x02, 0x00, 0x00, + 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0x01, 0x02, + 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, + 0x02, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, + 0x80, 0x04, 0x03, 0x02, 0x00, 0x00, 0x4d, 0x28, + 0x00, 0x00, 0x80, 0x04, 0x04, 0x02, 0x00, 0x00, + 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0x05, 0x02, + 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, + 0x06, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, + 0x80, 0x04, 0x07, 0x02, 0x00, 0x00, 0x4d, 0x2c, + 0x00, 0x00, 0x80, 0x04, 0x08, 0x02, 0x00, 0x00, + 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0x09, 0x02, + 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, + 0x0a, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, + 0x80, 0x04, 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x30, + 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, 0x00, 0x00, + 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, + 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, + 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, + 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x34, + 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, + 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, + 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, + 0x12, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, + 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, 0x4d, 0x38, + 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, + 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, + 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, + 0x16, 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, + 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, 0x4d, 0x3c, + 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, + 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, + 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, + 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, + 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x40, + 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, + 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, + 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, + 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, + 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x44, + 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, + 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, + 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, + 0x22, 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, + 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, 0x48, + 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, + 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, + 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, + 0x26, 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, + 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, 0x4c, + 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, + 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, + 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, + 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, + 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x50, + 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, + 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, + 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, + 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, + 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x54, + 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, + 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, + 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, + 0x32, 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, + 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, 0x58, + 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, + 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, + 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, + 0x36, 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, + 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, 0x5c, + 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, + 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, + 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, + 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, + 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x60, + 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, + 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, + 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, + 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, + 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x64, + 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, + 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, + 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, + 0x42, 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, + 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, 0x68, + 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, + 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, + 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, + 0x46, 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, + 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, 0x6c, + 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, + 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, + 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, + 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, + 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x70, + 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, + 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, + 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, + 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, + 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x74, + 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, + 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, + 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, + 0x52, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, + 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, 0x78, + 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, + 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, + 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, + 0x56, 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, + 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, 0x7c, + 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, + 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, + 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, + 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, + 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x80, + 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, + 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, + 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, + 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, + 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x84, + 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, + 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, + 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, + 0x62, 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, + 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, 0x88, + 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, + 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, + 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, + 0x66, 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, + 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, 0x8c, + 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, + 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, + 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, + 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, + 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x90, + 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, + 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, + 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, + 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, + 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x94, + 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, + 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, + 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, + 0x72, 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, + 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, 0x98, + 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, + 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, + 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, + 0x76, 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, + 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, 0x9c, + 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, + 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, + 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, + 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, + 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, 0xa0, + 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, + 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, + 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, + 0x7e, 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, + 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, 0xa4, + 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, + 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, + 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, + 0x82, 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, + 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, 0xa8, + 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, + 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, + 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, + 0x86, 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, + 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, 0xac, + 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, + 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, + 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, + 0x8a, 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, + 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xb0, + 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, + 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, + 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, + 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, + 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xb4, + 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, + 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, + 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, + 0x92, 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, + 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, 0xb8, + 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, + 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, + 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, + 0x96, 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, + 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, 0xbc, + 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, + 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, + 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, + 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, + 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xc0, + 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, + 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, + 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, + 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, + 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xc4, + 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, + 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, + 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, + 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, + 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xc8, + 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, + 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, + 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, + 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, + 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xcc, + 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, + 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, + 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, + 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, + 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, 0xd0, + 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, + 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, + 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, + 0xae, 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, + 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xd4, + 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, + 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, + 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, + 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, + 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, + 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, + 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, + 0xba, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, + 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, + 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xe4, + 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, + 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, + 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, + 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, + 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, + 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, + 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x80, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xdb, + 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, + 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, + 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, + 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, + 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, 0xe3, + 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, + 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, + 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, + 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, + 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, + 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, + 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, + 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, + 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, + 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, + 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, + 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, + 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, + 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, + 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x26, 0x20, + 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, 0x4d, 0x20, + 0x00, 0x00, 0x80, 0x04, 0xfc, 0x01, 0x00, 0x00, + 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0xfd, 0x01, + 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, + 0xfe, 0x01, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, + 0x80, 0x04, 0xff, 0x01, 0x00, 0x00, 0x4d, 0x24, + 0x00, 0x00, 0x80, 0x04, 0x00, 0x02, 0x00, 0x00, + 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0x01, 0x02, + 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, + 0x02, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, + 0x80, 0x04, 0x03, 0x02, 0x00, 0x00, 0x4d, 0x28, + 0x00, 0x00, 0x80, 0x04, 0x04, 0x02, 0x00, 0x00, + 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0x05, 0x02, + 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, + 0x06, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, + 0x80, 0x04, 0x07, 0x02, 0x00, 0x00, 0x4d, 0x2c, + 0x00, 0x00, 0x80, 0x04, 0x08, 0x02, 0x00, 0x00, + 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0x09, 0x02, + 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, + 0x0a, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, + 0x80, 0x04, 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x30, + 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, 0x00, 0x00, + 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, + 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, + 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, + 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x34, + 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, + 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, + 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, + 0x12, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, + 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, 0x4d, 0x38, + 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, + 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, + 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, + 0x16, 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, + 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, 0x4d, 0x3c, + 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, + 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, + 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, + 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, + 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x40, + 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, + 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, + 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, + 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, + 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x44, + 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, + 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, + 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, + 0x22, 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, + 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, 0x48, + 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, + 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, + 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, + 0x26, 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, + 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, 0x4c, + 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, + 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, + 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, + 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, + 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x50, + 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, + 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, + 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, + 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, + 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x54, + 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, + 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, + 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, + 0x32, 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, + 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, 0x58, + 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, + 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, + 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, + 0x36, 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, + 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, 0x5c, + 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, + 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, + 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, + 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, + 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x60, + 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, + 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, + 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, + 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, + 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x64, + 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, + 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, + 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, + 0x42, 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, + 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, 0x68, + 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, + 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, + 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, + 0x46, 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, + 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, 0x6c, + 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, + 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, + 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, + 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, + 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x70, + 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, + 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, + 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, + 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, + 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x74, + 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, + 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, + 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, + 0x52, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, + 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, 0x78, + 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, + 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, + 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, + 0x56, 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, + 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, 0x7c, + 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, + 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, + 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, + 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, + 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x80, + 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, + 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, + 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, + 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, + 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x84, + 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, + 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, + 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, + 0x62, 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, + 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, 0x88, + 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, + 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, + 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, + 0x66, 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, + 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, 0x8c, + 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, + 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, + 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, + 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, + 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x90, + 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, + 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, + 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, + 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, + 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x94, + 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, + 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, + 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, + 0x72, 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, + 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, 0x98, + 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, + 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, + 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, + 0x76, 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, + 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, 0x9c, + 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, + 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, + 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, + 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, + 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, 0xa0, + 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, + 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, + 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, + 0x7e, 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, + 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, 0xa4, + 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, + 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, + 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, + 0x82, 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, + 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, 0xa8, + 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, + 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, + 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, + 0x86, 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, + 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, 0xac, + 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, + 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, + 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, + 0x8a, 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, + 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xb0, + 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, + 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, + 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, + 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, + 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xb4, + 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, + 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, + 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, + 0x92, 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, + 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, 0xb8, + 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, + 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, + 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, + 0x96, 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, + 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, 0xbc, + 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, + 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, + 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, + 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, + 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xc0, + 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, + 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, + 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, + 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, + 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xc4, + 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, + 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, + 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, + 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, + 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xc8, + 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, + 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, + 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, + 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, + 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xcc, + 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, + 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, + 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, + 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, + 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, 0xd0, + 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, + 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, + 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, + 0xae, 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, + 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xd4, + 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, + 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, + 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, + 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, + 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, + 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, + 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, + 0xba, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, + 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, + 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xe4, + 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, + 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, + 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, + 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, + 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, + 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, + 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x80, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x69, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x4d, 0x6d, 0x01, 0x00, 0x00, + 0x4d, 0x6e, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x6f, 0xbe, 0x70, + 0xbe, 0x71, 0xbe, 0x72, 0xbe, 0x73, 0xbe, 0x74, + 0xbe, 0x75, 0xbe, 0x76, 0xbe, 0x77, 0xbe, 0x78, + 0xbe, 0x79, 0xbe, 0x7a, 0x26, 0x0c, 0x00, 0x4d, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0xc7, 0x02, 0x00, + 0x00, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x04, 0xc9, + 0x02, 0x00, 0x00, 0x04, 0xca, 0x02, 0x00, 0x00, + 0x04, 0xcb, 0x02, 0x00, 0x00, 0x04, 0xcc, 0x02, + 0x00, 0x00, 0x04, 0xcd, 0x02, 0x00, 0x00, 0x04, + 0xce, 0x02, 0x00, 0x00, 0x04, 0xcf, 0x02, 0x00, + 0x00, 0x04, 0xd0, 0x02, 0x00, 0x00, 0x04, 0xd1, + 0x02, 0x00, 0x00, 0x04, 0xd2, 0x02, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xc7, 0x02, 0x00, 0x00, 0x04, 0xc8, 0x02, + 0x00, 0x00, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x04, + 0xca, 0x02, 0x00, 0x00, 0x04, 0xcb, 0x02, 0x00, + 0x00, 0x04, 0xcc, 0x02, 0x00, 0x00, 0x04, 0xcd, + 0x02, 0x00, 0x00, 0x04, 0xce, 0x02, 0x00, 0x00, + 0x04, 0xcf, 0x02, 0x00, 0x00, 0x04, 0xd0, 0x02, + 0x00, 0x00, 0x04, 0xd1, 0x02, 0x00, 0x00, 0x04, + 0xd2, 0x02, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x57, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x46, + 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x04, 0x14, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x67, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xd3, 0x02, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x04, 0xd3, + 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xd3, 0x02, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x4d, 0x6d, 0x01, + 0x00, 0x00, 0x4d, 0x6e, 0x01, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x46, + 0x01, 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x03, 0x01, + 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, + 0x00, 0x04, 0xee, 0x00, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x57, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x14, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x67, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xd4, 0x02, 0x00, 0x00, 0x04, 0xd5, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0xd4, 0x02, 0x00, 0x00, 0x04, 0xd5, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xd4, 0x02, 0x00, 0x00, + 0x04, 0xd5, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x4d, 0x6d, 0x01, 0x00, 0x00, 0x4d, + 0x6e, 0x01, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x00, 0x4d, 0xd6, 0x02, 0x00, 0x00, 0x4d, 0xd7, + 0x02, 0x00, 0x00, 0x0b, 0x04, 0xd8, 0x02, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xd9, 0x02, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0xda, 0x02, 0x00, 0x00, + 0x4d, 0xdb, 0x02, 0x00, 0x00, 0x04, 0xdc, 0x02, + 0x00, 0x00, 0x4d, 0xdd, 0x02, 0x00, 0x00, 0x4d, + 0xde, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xdf, 0x02, + 0x00, 0x00, 0x4d, 0xdb, 0x02, 0x00, 0x00, 0x04, + 0xe0, 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x02, 0x00, + 0x00, 0x4d, 0xe1, 0x02, 0x00, 0x00, 0x0b, 0x04, + 0xe2, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x02, 0x00, + 0x00, 0x04, 0xe3, 0x02, 0x00, 0x00, 0x4d, 0xdd, + 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x02, 0x00, 0x00, + 0x4d, 0xe5, 0x02, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0xe6, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x02, 0x00, + 0x00, 0x04, 0xe7, 0x02, 0x00, 0x00, 0x4d, 0xe8, + 0x02, 0x00, 0x00, 0x04, 0xe9, 0x02, 0x00, 0x00, + 0x4d, 0xea, 0x02, 0x00, 0x00, 0x04, 0xeb, 0x02, + 0x00, 0x00, 0x4d, 0xec, 0x02, 0x00, 0x00, 0x04, + 0xed, 0x02, 0x00, 0x00, 0x4d, 0xee, 0x02, 0x00, + 0x00, 0x04, 0xef, 0x02, 0x00, 0x00, 0x4d, 0xf0, + 0x02, 0x00, 0x00, 0x04, 0xf1, 0x02, 0x00, 0x00, + 0x4d, 0xf2, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x02, + 0x00, 0x00, 0x4d, 0xf3, 0x02, 0x00, 0x00, 0x0b, + 0x04, 0xf4, 0x02, 0x00, 0x00, 0x4d, 0xf5, 0x02, + 0x00, 0x00, 0x04, 0xf6, 0x02, 0x00, 0x00, 0x4d, + 0xf7, 0x02, 0x00, 0x00, 0x04, 0xf8, 0x02, 0x00, + 0x00, 0x4d, 0xf9, 0x02, 0x00, 0x00, 0x04, 0xfa, + 0x02, 0x00, 0x00, 0x4d, 0xfb, 0x02, 0x00, 0x00, + 0x04, 0xfc, 0x02, 0x00, 0x00, 0x4d, 0xfd, 0x02, + 0x00, 0x00, 0x04, 0xfe, 0x02, 0x00, 0x00, 0x4d, + 0xff, 0x02, 0x00, 0x00, 0x04, 0x00, 0x03, 0x00, + 0x00, 0x4d, 0x01, 0x03, 0x00, 0x00, 0x4d, 0x02, + 0x03, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x00, + 0x24, 0x01, 0x00, 0xcc, 0x28, 0x86, 0x0c, 0x01, + 0x00, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_fr_size = 25334; + +const uint8_t intl_fr[25334] = { + 0x01, 0x92, 0x05, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x66, 0x72, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x0e, + 0x7b, 0x31, 0x7d, 0x20, 0x7b, 0x30, 0x7d, 0x0a, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, 0x7b, 0x31, + 0x7d, 0x20, 0x27, 0xe0, 0x27, 0x20, 0x7b, 0x30, + 0x7d, 0x0c, 0x6d, 0x65, 0x64, 0x69, 0x75, 0x6d, + 0x08, 0x66, 0x75, 0x6c, 0x6c, 0x08, 0x6c, 0x6f, + 0x6e, 0x67, 0x02, 0x64, 0x02, 0x45, 0x06, 0x45, + 0x20, 0x64, 0x04, 0x45, 0x64, 0x10, 0x45, 0x20, + 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x06, 0x45, + 0x68, 0x6d, 0x0e, 0x45, 0x20, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x06, 0x45, 0x48, 0x6d, 0x16, 0x45, + 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x61, 0x08, 0x45, 0x68, 0x6d, 0x73, 0x14, + 0x45, 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x08, 0x45, 0x48, 0x6d, 0x73, 0x06, + 0x79, 0x20, 0x47, 0x04, 0x47, 0x79, 0x0e, 0x4d, + 0x4d, 0x4d, 0x20, 0x79, 0x20, 0x47, 0x0a, 0x47, + 0x79, 0x4d, 0x4d, 0x4d, 0x12, 0x64, 0x20, 0x4d, + 0x4d, 0x4d, 0x20, 0x79, 0x20, 0x47, 0x0c, 0x47, + 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x16, 0x45, 0x20, + 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x20, + 0x47, 0x0e, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x45, + 0x64, 0x06, 0x68, 0x20, 0x61, 0x02, 0x68, 0x0c, + 0x48, 0x48, 0x20, 0x27, 0x68, 0x27, 0x02, 0x48, + 0x0c, 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x04, + 0x68, 0x6d, 0x0a, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x04, 0x48, 0x6d, 0x12, 0x68, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x61, 0x06, 0x68, 0x6d, + 0x73, 0x10, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x06, 0x48, 0x6d, 0x73, 0x16, 0x68, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, + 0x20, 0x76, 0x08, 0x68, 0x6d, 0x73, 0x76, 0x14, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x76, 0x08, 0x48, 0x6d, 0x73, 0x76, 0x10, + 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x20, 0x76, + 0x06, 0x68, 0x6d, 0x76, 0x0e, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x20, 0x76, 0x06, 0x48, 0x6d, 0x76, + 0x02, 0x4c, 0x02, 0x4d, 0x0a, 0x64, 0x64, 0x2f, + 0x4d, 0x4d, 0x04, 0x4d, 0x64, 0x0e, 0x45, 0x20, + 0x64, 0x64, 0x2f, 0x4d, 0x4d, 0x06, 0x4d, 0x45, + 0x64, 0x06, 0x4c, 0x4c, 0x4c, 0x06, 0x4d, 0x4d, + 0x4d, 0x0a, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x08, + 0x4d, 0x4d, 0x4d, 0x64, 0x0e, 0x45, 0x20, 0x64, + 0x20, 0x4d, 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, + 0x45, 0x64, 0x0c, 0x64, 0x20, 0x4d, 0x4d, 0x4d, + 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x0a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x04, 0x6d, 0x73, + 0x02, 0x79, 0x08, 0x4d, 0x4d, 0x2f, 0x79, 0x04, + 0x79, 0x4d, 0x0e, 0x64, 0x64, 0x2f, 0x4d, 0x4d, + 0x2f, 0x79, 0x06, 0x79, 0x4d, 0x64, 0x12, 0x45, + 0x20, 0x64, 0x64, 0x2f, 0x4d, 0x4d, 0x2f, 0x79, + 0x08, 0x79, 0x4d, 0x45, 0x64, 0x0a, 0x4d, 0x4d, + 0x4d, 0x20, 0x79, 0x08, 0x79, 0x4d, 0x4d, 0x4d, + 0x0e, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, + 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x12, 0x45, + 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, + 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0c, + 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0a, 0x79, + 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, 0x51, 0x51, 0x51, + 0x20, 0x79, 0x08, 0x79, 0x51, 0x51, 0x51, 0x0c, + 0x51, 0x51, 0x51, 0x51, 0x20, 0x79, 0x0a, 0x79, + 0x51, 0x51, 0x51, 0x51, 0x20, 0x61, 0x76, 0x61, + 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x73, 0x1a, 0x45, 0x45, + 0x45, 0x45, 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, + 0x4d, 0x20, 0x79, 0x14, 0x79, 0x4d, 0x4d, 0x4d, + 0x4d, 0x45, 0x45, 0x45, 0x45, 0x64, 0x10, 0x64, + 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0c, + 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x16, 0x64, + 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x73, 0x1a, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x7a, 0x7a, 0x7a, 0x7a, + 0x12, 0x68, 0x6d, 0x6d, 0x73, 0x73, 0x7a, 0x7a, + 0x7a, 0x7a, 0x14, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x7a, 0x08, 0x68, 0x6d, + 0x73, 0x7a, 0x16, 0x74, 0x69, 0x6d, 0x65, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x0e, 0x66, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x02, 0x4a, + 0x02, 0x46, 0x02, 0x41, 0x02, 0x53, 0x02, 0x4f, + 0x02, 0x4e, 0x02, 0x44, 0x0c, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x0a, 0x6a, 0x61, 0x6e, 0x76, + 0x2e, 0x0a, 0x66, 0xe9, 0x76, 0x72, 0x2e, 0x08, + 0x6d, 0x61, 0x72, 0x73, 0x08, 0x61, 0x76, 0x72, + 0x2e, 0x06, 0x6d, 0x61, 0x69, 0x08, 0x6a, 0x75, + 0x69, 0x6e, 0x0a, 0x6a, 0x75, 0x69, 0x6c, 0x2e, + 0x08, 0x61, 0x6f, 0xfb, 0x74, 0x0a, 0x73, 0x65, + 0x70, 0x74, 0x2e, 0x08, 0x6f, 0x63, 0x74, 0x2e, + 0x08, 0x6e, 0x6f, 0x76, 0x2e, 0x08, 0x64, 0xe9, + 0x63, 0x2e, 0x0e, 0x6a, 0x61, 0x6e, 0x76, 0x69, + 0x65, 0x72, 0x0e, 0x66, 0xe9, 0x76, 0x72, 0x69, + 0x65, 0x72, 0x0a, 0x61, 0x76, 0x72, 0x69, 0x6c, + 0x0e, 0x6a, 0x75, 0x69, 0x6c, 0x6c, 0x65, 0x74, + 0x12, 0x73, 0x65, 0x70, 0x74, 0x65, 0x6d, 0x62, + 0x72, 0x65, 0x0e, 0x6f, 0x63, 0x74, 0x6f, 0x62, + 0x72, 0x65, 0x10, 0x6e, 0x6f, 0x76, 0x65, 0x6d, + 0x62, 0x72, 0x65, 0x10, 0x64, 0xe9, 0x63, 0x65, + 0x6d, 0x62, 0x72, 0x65, 0x0c, 0x6d, 0x6f, 0x6e, + 0x74, 0x68, 0x73, 0x02, 0x56, 0x08, 0x64, 0x69, + 0x6d, 0x2e, 0x08, 0x6c, 0x75, 0x6e, 0x2e, 0x08, + 0x6d, 0x61, 0x72, 0x2e, 0x08, 0x6d, 0x65, 0x72, + 0x2e, 0x08, 0x6a, 0x65, 0x75, 0x2e, 0x08, 0x76, + 0x65, 0x6e, 0x2e, 0x08, 0x73, 0x61, 0x6d, 0x2e, + 0x10, 0x64, 0x69, 0x6d, 0x61, 0x6e, 0x63, 0x68, + 0x65, 0x0a, 0x6c, 0x75, 0x6e, 0x64, 0x69, 0x0a, + 0x6d, 0x61, 0x72, 0x64, 0x69, 0x10, 0x6d, 0x65, + 0x72, 0x63, 0x72, 0x65, 0x64, 0x69, 0x0a, 0x6a, + 0x65, 0x75, 0x64, 0x69, 0x10, 0x76, 0x65, 0x6e, + 0x64, 0x72, 0x65, 0x64, 0x69, 0x0c, 0x73, 0x61, + 0x6d, 0x65, 0x64, 0x69, 0x08, 0x64, 0x61, 0x79, + 0x73, 0x08, 0x45, 0x2e, 0x42, 0x2e, 0x0c, 0xe8, + 0x72, 0x65, 0x20, 0x62, 0x2e, 0x1c, 0xe8, 0x72, + 0x65, 0x20, 0x62, 0x6f, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x65, 0x08, 0x65, 0x72, 0x61, + 0x73, 0x04, 0x41, 0x4d, 0x04, 0x61, 0x6d, 0x04, + 0x50, 0x4d, 0x04, 0x70, 0x6d, 0x14, 0x64, 0x61, + 0x79, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x73, + 0x08, 0x31, 0x79, 0x75, 0xe8, 0x08, 0x32, 0x79, + 0x75, 0xe8, 0x08, 0x33, 0x79, 0x75, 0xe8, 0x08, + 0x34, 0x79, 0x75, 0xe8, 0x08, 0x35, 0x79, 0x75, + 0xe8, 0x08, 0x36, 0x79, 0x75, 0xe8, 0x08, 0x37, + 0x79, 0x75, 0xe8, 0x08, 0x38, 0x79, 0x75, 0xe8, + 0x08, 0x39, 0x79, 0x75, 0xe8, 0x0a, 0x31, 0x30, + 0x79, 0x75, 0xe8, 0x0a, 0x31, 0x31, 0x79, 0x75, + 0xe8, 0x0a, 0x31, 0x32, 0x79, 0x75, 0xe8, 0x11, + 0x7a, 0x00, 0x68, 0x00, 0x13, 0x01, 0x6e, 0x00, + 0x67, 0x00, 0x79, 0x00, 0x75, 0x00, 0xe8, 0x00, + 0x0a, 0xe8, 0x72, 0x79, 0x75, 0xe8, 0x0d, 0x73, + 0x00, 0x01, 0x01, 0x6e, 0x00, 0x79, 0x00, 0x75, + 0x00, 0xe8, 0x00, 0x0a, 0x73, 0xec, 0x79, 0x75, + 0xe8, 0x0b, 0x77, 0x00, 0xd4, 0x01, 0x79, 0x00, + 0x75, 0x00, 0xe8, 0x00, 0x0c, 0x6c, 0x69, 0xf9, + 0x79, 0x75, 0xe8, 0x0b, 0x71, 0x00, 0x2b, 0x01, + 0x79, 0x00, 0x75, 0x00, 0xe8, 0x00, 0x0b, 0x62, + 0x00, 0x01, 0x01, 0x79, 0x00, 0x75, 0x00, 0xe8, + 0x00, 0x0d, 0x6a, 0x00, 0x69, 0x00, 0xd4, 0x01, + 0x79, 0x00, 0x75, 0x00, 0xe8, 0x00, 0x0c, 0x73, + 0x68, 0xed, 0x79, 0x75, 0xe8, 0x11, 0x73, 0x00, + 0x68, 0x00, 0xed, 0x00, 0x79, 0x00, 0x2b, 0x01, + 0x79, 0x00, 0x75, 0x00, 0xe8, 0x00, 0x13, 0x73, + 0x00, 0x68, 0x00, 0xed, 0x00, 0x19, 0x20, 0xe8, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x75, 0x00, 0xe8, + 0x00, 0x08, 0x54, 0x6f, 0x75, 0x74, 0x08, 0x42, + 0x61, 0x62, 0x61, 0x0a, 0x48, 0x61, 0x74, 0x6f, + 0x72, 0x0a, 0x4b, 0x69, 0x61, 0x68, 0x6b, 0x08, + 0x54, 0x6f, 0x62, 0x61, 0x0c, 0x41, 0x6d, 0x73, + 0x68, 0x69, 0x72, 0x10, 0x42, 0x61, 0x72, 0x61, + 0x6d, 0x68, 0x61, 0x74, 0x12, 0x42, 0x61, 0x72, + 0x61, 0x6d, 0x6f, 0x75, 0x64, 0x61, 0x0e, 0x42, + 0x61, 0x73, 0x68, 0x61, 0x6e, 0x73, 0x0a, 0x50, + 0x61, 0x6f, 0x6e, 0x61, 0x08, 0x45, 0x70, 0x65, + 0x70, 0x0a, 0x4d, 0x65, 0x73, 0x72, 0x61, 0x0a, + 0x4e, 0x61, 0x73, 0x69, 0x65, 0x08, 0x45, 0x52, + 0x41, 0x30, 0x08, 0x45, 0x52, 0x41, 0x31, 0x10, + 0x4d, 0x65, 0x73, 0x6b, 0x65, 0x72, 0x65, 0x6d, + 0x0c, 0x54, 0x65, 0x6b, 0x65, 0x6d, 0x74, 0x0a, + 0x48, 0x65, 0x64, 0x61, 0x72, 0x0c, 0x54, 0x61, + 0x68, 0x73, 0x61, 0x73, 0x06, 0x54, 0x65, 0x72, + 0x0e, 0x59, 0x65, 0x6b, 0x61, 0x74, 0x69, 0x74, + 0x0e, 0x4d, 0x65, 0x67, 0x61, 0x62, 0x69, 0x74, + 0x0c, 0x4d, 0x69, 0x61, 0x7a, 0x69, 0x61, 0x0c, + 0x47, 0x65, 0x6e, 0x62, 0x6f, 0x74, 0x08, 0x53, + 0x65, 0x6e, 0x65, 0x0a, 0x48, 0x61, 0x6d, 0x6c, + 0x65, 0x0e, 0x4e, 0x65, 0x68, 0x61, 0x73, 0x73, + 0x65, 0x0e, 0x50, 0x61, 0x67, 0x75, 0x6d, 0x65, + 0x6e, 0x06, 0x4d, 0x30, 0x31, 0x06, 0x4d, 0x30, + 0x32, 0x06, 0x4d, 0x30, 0x33, 0x06, 0x4d, 0x30, + 0x34, 0x06, 0x4d, 0x30, 0x35, 0x06, 0x4d, 0x30, + 0x36, 0x06, 0x4d, 0x30, 0x37, 0x06, 0x4d, 0x30, + 0x38, 0x06, 0x4d, 0x30, 0x39, 0x06, 0x4d, 0x31, + 0x30, 0x06, 0x4d, 0x31, 0x31, 0x06, 0x4d, 0x31, + 0x32, 0x12, 0x61, 0x76, 0x2e, 0x20, 0x4a, 0x2e, + 0x2d, 0x43, 0x2e, 0x12, 0x61, 0x70, 0x2e, 0x20, + 0x4a, 0x2e, 0x2d, 0x43, 0x2e, 0x06, 0x41, 0x45, + 0x43, 0x04, 0x45, 0x43, 0x24, 0x61, 0x76, 0x61, + 0x6e, 0x74, 0x20, 0x4a, 0xe9, 0x73, 0x75, 0x73, + 0x2d, 0x43, 0x68, 0x72, 0x69, 0x73, 0x74, 0x24, + 0x61, 0x70, 0x72, 0xe8, 0x73, 0x20, 0x4a, 0xe9, + 0x73, 0x75, 0x73, 0x2d, 0x43, 0x68, 0x72, 0x69, + 0x73, 0x74, 0x27, 0x61, 0x00, 0x76, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x20, 0x00, 0x6c, + 0x00, 0x19, 0x20, 0xe8, 0x00, 0x72, 0x00, 0x65, + 0x00, 0x20, 0x00, 0x63, 0x00, 0x6f, 0x00, 0x6d, + 0x00, 0x6d, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x65, + 0x00, 0x21, 0x64, 0x00, 0x65, 0x00, 0x20, 0x00, + 0x6c, 0x00, 0x19, 0x20, 0xe8, 0x00, 0x72, 0x00, + 0x65, 0x00, 0x20, 0x00, 0x63, 0x00, 0x6f, 0x00, + 0x6d, 0x00, 0x6d, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x65, 0x00, 0x0e, 0x54, 0x69, 0x73, 0x73, 0x65, + 0x72, 0x69, 0x0c, 0x48, 0x65, 0x73, 0x76, 0x61, + 0x6e, 0x0c, 0x4b, 0x69, 0x73, 0x6c, 0x65, 0x76, + 0x0c, 0x54, 0xe9, 0x62, 0x65, 0x74, 0x68, 0x0e, + 0x53, 0x63, 0x68, 0xe9, 0x62, 0x61, 0x74, 0x0c, + 0x41, 0x64, 0x61, 0x72, 0x20, 0x49, 0x08, 0x41, + 0x64, 0x61, 0x72, 0x0c, 0x4e, 0x69, 0x73, 0x73, + 0x61, 0x6e, 0x08, 0x49, 0x79, 0x61, 0x72, 0x0a, + 0x53, 0x69, 0x76, 0x61, 0x6e, 0x0c, 0x54, 0x61, + 0x6d, 0x6f, 0x75, 0x7a, 0x04, 0x41, 0x62, 0x0c, + 0x45, 0x6c, 0x6c, 0x6f, 0x75, 0x6c, 0x0e, 0x41, + 0x64, 0x61, 0x72, 0x20, 0x49, 0x49, 0x0e, 0x43, + 0x68, 0x61, 0x69, 0x74, 0x72, 0x61, 0x10, 0x56, + 0x61, 0x69, 0x73, 0x61, 0x6b, 0x68, 0x61, 0x10, + 0x4a, 0x79, 0x61, 0x69, 0x73, 0x74, 0x68, 0x61, + 0x0c, 0x41, 0x73, 0x61, 0x64, 0x68, 0x61, 0x0e, + 0x53, 0x72, 0x61, 0x76, 0x61, 0x6e, 0x61, 0x0c, + 0x42, 0x68, 0x61, 0x64, 0x72, 0x61, 0x0c, 0x41, + 0x73, 0x76, 0x69, 0x6e, 0x61, 0x0e, 0x4b, 0x61, + 0x72, 0x74, 0x69, 0x6b, 0x61, 0x14, 0x41, 0x67, + 0x72, 0x61, 0x68, 0x61, 0x79, 0x61, 0x6e, 0x61, + 0x0a, 0x50, 0x61, 0x75, 0x73, 0x61, 0x0a, 0x4d, + 0x61, 0x67, 0x68, 0x61, 0x10, 0x50, 0x68, 0x61, + 0x6c, 0x67, 0x75, 0x6e, 0x61, 0x08, 0x53, 0x61, + 0x6b, 0x61, 0x0a, 0x6d, 0x6f, 0x75, 0x68, 0x2e, + 0x08, 0x73, 0x61, 0x66, 0x2e, 0x10, 0x72, 0x61, + 0x62, 0x2e, 0x20, 0x61, 0x77, 0x2e, 0x10, 0x72, + 0x61, 0x62, 0x2e, 0x20, 0x74, 0x68, 0x2e, 0x14, + 0x6a, 0x6f, 0x75, 0x6d, 0x2e, 0x20, 0x6f, 0x75, + 0x6c, 0x2e, 0x14, 0x6a, 0x6f, 0x75, 0x6d, 0x2e, + 0x20, 0x74, 0x68, 0x61, 0x2e, 0x08, 0x72, 0x61, + 0x6a, 0x2e, 0x0a, 0x63, 0x68, 0x61, 0x61, 0x2e, + 0x08, 0x72, 0x61, 0x6d, 0x2e, 0x0a, 0x63, 0x68, + 0x61, 0x77, 0x2e, 0x10, 0x64, 0x68, 0x6f, 0x75, + 0x2e, 0x20, 0x71, 0x2e, 0x10, 0x64, 0x68, 0x6f, + 0x75, 0x2e, 0x20, 0x68, 0x2e, 0x12, 0x6d, 0x6f, + 0x75, 0x68, 0x61, 0x72, 0x72, 0x61, 0x6d, 0x0a, + 0x73, 0x61, 0x66, 0x61, 0x72, 0x1a, 0x72, 0x61, + 0x62, 0x69, 0x61, 0x20, 0x61, 0x6c, 0x20, 0x61, + 0x77, 0x61, 0x6c, 0x1e, 0x72, 0x61, 0x62, 0x69, + 0x61, 0x20, 0x61, 0x74, 0x68, 0x2d, 0x74, 0x68, + 0x61, 0x6e, 0x69, 0x1e, 0x6a, 0x6f, 0x75, 0x6d, + 0x61, 0x64, 0x61, 0x20, 0x61, 0x6c, 0x20, 0x6f, + 0x75, 0x6c, 0x61, 0x24, 0x6a, 0x6f, 0x75, 0x6d, + 0x61, 0x64, 0x61, 0x20, 0x61, 0x74, 0x68, 0x2d, + 0x74, 0x68, 0x61, 0x6e, 0x69, 0x61, 0x0a, 0x72, + 0x61, 0x6a, 0x61, 0x62, 0x10, 0x63, 0x68, 0x61, + 0x61, 0x62, 0x61, 0x6e, 0x65, 0x0e, 0x72, 0x61, + 0x6d, 0x61, 0x64, 0x61, 0x6e, 0x0e, 0x63, 0x68, + 0x61, 0x77, 0x77, 0x61, 0x6c, 0x1a, 0x64, 0x68, + 0x6f, 0x75, 0x20, 0x61, 0x6c, 0x20, 0x71, 0x69, + 0x60, 0x64, 0x61, 0x1a, 0x64, 0x68, 0x6f, 0x75, + 0x20, 0x61, 0x6c, 0x2d, 0x68, 0x69, 0x6a, 0x6a, + 0x61, 0x04, 0x41, 0x48, 0x1f, 0x54, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x36, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x36, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x13, 0x20, 0x36, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x36, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x29, 0x00, 0x21, + 0x53, 0x00, 0x68, 0x00, 0x75, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x57, + 0x00, 0x61, 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x1f, 0x52, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x1d, 0x59, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, + 0x4a, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6b, 0x00, + 0x61, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x2d, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x2d, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x2b, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x2d, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, 0x2d, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x2a, 0x4a, 0x69, 0x6e, 0x67, 0x6f, 0x2d, + 0x6b, 0x65, 0x69, 0x75, 0x6e, 0x20, 0x28, 0x37, + 0x36, 0x37, 0x2d, 0x37, 0x37, 0x30, 0x29, 0x1d, + 0x48, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x37, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, 0x44, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x64, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x38, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x4d, 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x38, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4a, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x61, 0x00, 0x6a, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, + 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x53, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x20, 0x54, 0x65, + 0x6e, 0x2d, 0x61, 0x6e, 0x20, 0x28, 0x38, 0x35, + 0x37, 0x2d, 0x38, 0x35, 0x39, 0x29, 0x1f, 0x4a, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, + 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, 0x6e, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x34, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1b, 0x4c, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4b, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x1d, 0x41, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1d, + 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x4a, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x29, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, + 0x4a, 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x29, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, + 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4c, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x25, 0x4a, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x24, 0x54, 0x65, 0x6e, 0x2d, 0x65, 0x69, + 0x20, 0x28, 0x31, 0x31, 0x31, 0x30, 0x2d, 0x31, + 0x31, 0x31, 0x33, 0x29, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, + 0x4d, 0x01, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, + 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x6a, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x48, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x45, + 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, + 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6d, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4a, + 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x59, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x21, 0x4a, 0x00, 0x75, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x29, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4a, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x29, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, + 0x4a, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x27, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x75, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x29, 0x52, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x4e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, + 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, 0x00, + 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1f, 0x4c, 0x01, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x74, 0x00, 0x73, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x27, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x45, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x21, 0x4d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, 0x69, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x27, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x21, 0x45, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x61, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x41, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, 0x02, + 0x54, 0x0a, 0x4d, 0x65, 0x69, 0x6a, 0x69, 0x0d, + 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x0b, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x0c, + 0x48, 0x65, 0x69, 0x73, 0x65, 0x69, 0x12, 0x46, + 0x61, 0x72, 0x76, 0x61, 0x72, 0x64, 0x69, 0x6e, + 0x16, 0x4f, 0x72, 0x64, 0x69, 0x62, 0x65, 0x68, + 0x65, 0x73, 0x68, 0x74, 0x0e, 0x4b, 0x68, 0x6f, + 0x72, 0x64, 0x61, 0x64, 0x06, 0x54, 0x69, 0x72, + 0x0c, 0x4d, 0x6f, 0x72, 0x64, 0x61, 0x64, 0x12, + 0x53, 0x68, 0x61, 0x68, 0x72, 0x69, 0x76, 0x61, + 0x72, 0x08, 0x4d, 0x65, 0x68, 0x72, 0x08, 0x41, + 0x62, 0x61, 0x6e, 0x08, 0x41, 0x7a, 0x61, 0x72, + 0x06, 0x44, 0x65, 0x79, 0x0c, 0x42, 0x61, 0x68, + 0x6d, 0x61, 0x6e, 0x0c, 0x45, 0x73, 0x66, 0x61, + 0x6e, 0x64, 0x04, 0x41, 0x50, 0x12, 0x61, 0x76, + 0x61, 0x6e, 0x74, 0x20, 0x52, 0x64, 0x43, 0x06, + 0x52, 0x64, 0x43, 0x12, 0x63, 0x61, 0x6c, 0x65, + 0x6e, 0x64, 0x61, 0x72, 0x73, 0x08, 0x64, 0x61, + 0x74, 0x65, 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, + 0x6e, 0x75, 0x10, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0x1e, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, + 0x65, 0x72, 0x6e, 0x26, 0x7b, 0x6d, 0x69, 0x6e, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, + 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x0e, + 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x26, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0xa0, 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x79, 0x7d, 0x3c, 0x7b, 0x6d, 0x69, 0x6e, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0xa0, + 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, + 0x79, 0x7d, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x63, 0x79, 0x2c, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0xa0, 0x7b, 0x70, 0x65, + 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, + 0x6e, 0x7d, 0x42, 0x7b, 0x6d, 0x69, 0x6e, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0xa0, 0x7b, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x0e, 0x70, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x10, 0x70, 0x61, 0x74, + 0x74, 0x65, 0x72, 0x6e, 0x73, 0x02, 0x2c, 0x02, + 0xa0, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x06, + 0x4e, 0x61, 0x4e, 0x06, 0x6e, 0x61, 0x6e, 0x02, + 0x2b, 0x10, 0x70, 0x6c, 0x75, 0x73, 0x53, 0x69, + 0x67, 0x6e, 0x02, 0x2d, 0x12, 0x6d, 0x69, 0x6e, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, 0x25, + 0x16, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, + 0x53, 0x69, 0x67, 0x6e, 0x03, 0x1e, 0x22, 0x10, + 0x69, 0x6e, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, + 0x0e, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, + 0x06, 0x24, 0x41, 0x52, 0x06, 0x41, 0x52, 0x53, + 0x06, 0x24, 0x41, 0x55, 0x06, 0x41, 0x55, 0x44, + 0x04, 0x46, 0x42, 0x06, 0x42, 0x45, 0x46, 0x06, + 0x24, 0x42, 0x4d, 0x06, 0x42, 0x4d, 0x44, 0x06, + 0x24, 0x42, 0x4e, 0x06, 0x42, 0x4e, 0x44, 0x04, + 0x52, 0x24, 0x06, 0x42, 0x52, 0x4c, 0x06, 0x24, + 0x42, 0x53, 0x06, 0x42, 0x53, 0x44, 0x06, 0x24, + 0x42, 0x5a, 0x06, 0x42, 0x5a, 0x44, 0x06, 0x24, + 0x43, 0x41, 0x06, 0x43, 0x41, 0x44, 0x06, 0x24, + 0x43, 0x4c, 0x06, 0x43, 0x4c, 0x50, 0x06, 0x24, + 0x43, 0x4f, 0x06, 0x43, 0x4f, 0x50, 0x06, 0xa3, + 0x43, 0x59, 0x06, 0x43, 0x59, 0x50, 0x03, 0xac, + 0x20, 0x06, 0x45, 0x55, 0x52, 0x06, 0x24, 0x46, + 0x4a, 0x06, 0x46, 0x4a, 0x44, 0x06, 0xa3, 0x46, + 0x4b, 0x06, 0x46, 0x4b, 0x50, 0x06, 0x46, 0x52, + 0x46, 0x06, 0xa3, 0x47, 0x42, 0x06, 0x47, 0x42, + 0x50, 0x06, 0xa3, 0x47, 0x49, 0x06, 0x47, 0x49, + 0x50, 0x06, 0xa3, 0x49, 0x45, 0x06, 0x49, 0x45, + 0x50, 0x06, 0xa3, 0x49, 0x4c, 0x06, 0x49, 0x4c, + 0x50, 0x03, 0xaa, 0x20, 0x06, 0x49, 0x4c, 0x53, + 0x03, 0xb9, 0x20, 0x06, 0x49, 0x4e, 0x52, 0x07, + 0xa4, 0x20, 0x49, 0x00, 0x54, 0x00, 0x06, 0x49, + 0x54, 0x4c, 0x03, 0xa9, 0x20, 0x06, 0x4b, 0x52, + 0x57, 0x06, 0xa3, 0x4c, 0x42, 0x06, 0x4c, 0x42, + 0x50, 0x06, 0xa3, 0x4d, 0x54, 0x06, 0x4d, 0x54, + 0x50, 0x06, 0x24, 0x4d, 0x58, 0x06, 0x4d, 0x58, + 0x4e, 0x06, 0x24, 0x4e, 0x41, 0x06, 0x4e, 0x41, + 0x44, 0x06, 0x24, 0x4e, 0x5a, 0x06, 0x4e, 0x5a, + 0x44, 0x06, 0x24, 0x52, 0x48, 0x06, 0x52, 0x48, + 0x44, 0x06, 0x24, 0x53, 0x42, 0x06, 0x53, 0x42, + 0x44, 0x06, 0x24, 0x53, 0x47, 0x06, 0x53, 0x47, + 0x44, 0x06, 0x24, 0x53, 0x52, 0x06, 0x53, 0x52, + 0x44, 0x06, 0x24, 0x54, 0x54, 0x06, 0x54, 0x54, + 0x44, 0x06, 0x24, 0x55, 0x53, 0x06, 0x55, 0x53, + 0x44, 0x06, 0x24, 0x55, 0x59, 0x06, 0x55, 0x59, + 0x55, 0x03, 0xab, 0x20, 0x06, 0x56, 0x4e, 0x44, + 0x06, 0x57, 0x53, 0x24, 0x06, 0x57, 0x53, 0x54, + 0x08, 0x46, 0x43, 0x46, 0x41, 0x06, 0x58, 0x41, + 0x46, 0x06, 0x43, 0x46, 0x41, 0x06, 0x58, 0x4f, + 0x46, 0x08, 0x46, 0x43, 0x46, 0x50, 0x06, 0x58, + 0x50, 0x46, 0x14, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x63, 0x69, 0x65, 0x73, 0x52, 0x6e, 0x6f, + 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2f, + 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, + 0x61, 0x74, 0x61, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, + 0x70, 0x2f, 0x66, 0x72, 0x2e, 0x6a, 0x73, 0x0d, + 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, + 0x27, 0x00, 0x89, 0x01, 0xa6, 0x6c, 0x01, 0xa0, + 0x01, 0x00, 0x00, 0x00, 0x39, 0xd0, 0x00, 0x00, + 0x00, 0x43, 0xd1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd2, 0x00, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd4, 0x00, 0x00, 0x00, 0x04, + 0xd5, 0x00, 0x00, 0x00, 0x04, 0xd6, 0x00, 0x00, + 0x00, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x04, 0xd8, + 0x00, 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, 0x00, + 0x04, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdb, 0x00, + 0x00, 0x00, 0x04, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0xdd, 0x00, 0x00, 0x00, 0x04, 0xde, 0x00, 0x00, + 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, 0x04, 0xe0, + 0x00, 0x00, 0x00, 0x04, 0xe1, 0x00, 0x00, 0x00, + 0x04, 0xe2, 0x00, 0x00, 0x00, 0x26, 0x0f, 0x00, + 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x0a, 0x4d, 0xe4, + 0x00, 0x00, 0x00, 0x09, 0x4d, 0xe5, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe8, 0x00, 0x00, + 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x00, 0x04, 0xe8, + 0x00, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xec, 0x00, 0x00, 0x00, + 0x4d, 0xec, 0x00, 0x00, 0x00, 0x04, 0xed, 0x00, + 0x00, 0x00, 0x4d, 0xed, 0x00, 0x00, 0x00, 0x04, + 0xee, 0x00, 0x00, 0x00, 0x4d, 0xef, 0x00, 0x00, + 0x00, 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, 0xf1, + 0x00, 0x00, 0x00, 0x04, 0xf2, 0x00, 0x00, 0x00, + 0x4d, 0xf3, 0x00, 0x00, 0x00, 0x04, 0xf4, 0x00, + 0x00, 0x00, 0x4d, 0xf5, 0x00, 0x00, 0x00, 0x04, + 0xf6, 0x00, 0x00, 0x00, 0x4d, 0xf7, 0x00, 0x00, + 0x00, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, 0xf9, + 0x00, 0x00, 0x00, 0x04, 0xfa, 0x00, 0x00, 0x00, + 0x4d, 0xfb, 0x00, 0x00, 0x00, 0x04, 0xfc, 0x00, + 0x00, 0x00, 0x4d, 0xfd, 0x00, 0x00, 0x00, 0x04, + 0xfe, 0x00, 0x00, 0x00, 0x4d, 0xff, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x01, 0x00, 0x00, 0x04, 0x02, 0x01, 0x00, 0x00, + 0x4d, 0x03, 0x01, 0x00, 0x00, 0x04, 0x04, 0x01, + 0x00, 0x00, 0x4d, 0x05, 0x01, 0x00, 0x00, 0x04, + 0x06, 0x01, 0x00, 0x00, 0x4d, 0x07, 0x01, 0x00, + 0x00, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, 0x09, + 0x01, 0x00, 0x00, 0x04, 0x0a, 0x01, 0x00, 0x00, + 0x4d, 0x0b, 0x01, 0x00, 0x00, 0x04, 0x0c, 0x01, + 0x00, 0x00, 0x4d, 0x0d, 0x01, 0x00, 0x00, 0x04, + 0x0e, 0x01, 0x00, 0x00, 0x4d, 0x0f, 0x01, 0x00, + 0x00, 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, 0x11, + 0x01, 0x00, 0x00, 0x04, 0x12, 0x01, 0x00, 0x00, + 0x4d, 0x13, 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, + 0x00, 0x00, 0x4d, 0x15, 0x01, 0x00, 0x00, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x4d, 0x17, 0x01, 0x00, + 0x00, 0x04, 0x18, 0x01, 0x00, 0x00, 0x4d, 0x19, + 0x01, 0x00, 0x00, 0x04, 0x1a, 0x01, 0x00, 0x00, + 0x4d, 0x1b, 0x01, 0x00, 0x00, 0x04, 0x1c, 0x01, + 0x00, 0x00, 0x4d, 0x1d, 0x01, 0x00, 0x00, 0x04, + 0x1e, 0x01, 0x00, 0x00, 0x4d, 0x1f, 0x01, 0x00, + 0x00, 0x04, 0x20, 0x01, 0x00, 0x00, 0x4d, 0x21, + 0x01, 0x00, 0x00, 0x04, 0x22, 0x01, 0x00, 0x00, + 0x4d, 0x23, 0x01, 0x00, 0x00, 0x04, 0x24, 0x01, + 0x00, 0x00, 0x4d, 0x24, 0x01, 0x00, 0x00, 0x04, + 0x25, 0x01, 0x00, 0x00, 0x4d, 0x26, 0x01, 0x00, + 0x00, 0x04, 0x27, 0x01, 0x00, 0x00, 0x4d, 0x28, + 0x01, 0x00, 0x00, 0x04, 0x29, 0x01, 0x00, 0x00, + 0x4d, 0x2a, 0x01, 0x00, 0x00, 0x04, 0x2b, 0x01, + 0x00, 0x00, 0x4d, 0x2c, 0x01, 0x00, 0x00, 0x04, + 0x2d, 0x01, 0x00, 0x00, 0x4d, 0x2e, 0x01, 0x00, + 0x00, 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, 0x30, + 0x01, 0x00, 0x00, 0x04, 0x31, 0x01, 0x00, 0x00, + 0x4d, 0x32, 0x01, 0x00, 0x00, 0x04, 0x33, 0x01, + 0x00, 0x00, 0x4d, 0x34, 0x01, 0x00, 0x00, 0x04, + 0x35, 0x01, 0x00, 0x00, 0x4d, 0x36, 0x01, 0x00, + 0x00, 0x4d, 0x37, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x38, 0x01, 0x00, 0x00, 0x4d, 0x39, 0x01, 0x00, + 0x00, 0x04, 0x3a, 0x01, 0x00, 0x00, 0x4d, 0x3b, + 0x01, 0x00, 0x00, 0x04, 0x2d, 0x01, 0x00, 0x00, + 0x4d, 0x2e, 0x01, 0x00, 0x00, 0x04, 0x27, 0x01, + 0x00, 0x00, 0x4d, 0x28, 0x01, 0x00, 0x00, 0x4d, + 0x3c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x3d, 0x01, + 0x00, 0x00, 0x4d, 0x3e, 0x01, 0x00, 0x00, 0x04, + 0x3f, 0x01, 0x00, 0x00, 0x4d, 0x40, 0x01, 0x00, + 0x00, 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x09, + 0x01, 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, 0x00, + 0x4d, 0x05, 0x01, 0x00, 0x00, 0x4d, 0x41, 0x01, + 0x00, 0x00, 0x4d, 0x42, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x0b, 0x04, 0x43, 0x01, 0x00, 0x00, 0x04, + 0x44, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x04, 0x43, 0x01, 0x00, 0x00, + 0x04, 0x43, 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, + 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x5f, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x04, 0x43, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x73, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x4d, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x4d, + 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, + 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x00, 0xbe, 0x01, 0xbe, 0x02, 0xbe, 0x03, + 0xbe, 0x04, 0xbe, 0x05, 0xbe, 0x06, 0xbe, 0x07, + 0xbe, 0x08, 0xbe, 0x09, 0xbe, 0x0a, 0xbe, 0x0b, + 0x26, 0x0c, 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, + 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, + 0x84, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, + 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, + 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, + 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, + 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, + 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, + 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, + 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x5f, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x49, + 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x04, 0x43, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x6f, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, + 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x4d, 0xd6, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x0c, 0xbe, + 0x0d, 0xbe, 0x0e, 0xbe, 0x0f, 0xbe, 0x10, 0xbe, + 0x11, 0xbe, 0x12, 0xbe, 0x13, 0xbe, 0x14, 0xbe, + 0x15, 0xbe, 0x16, 0xbe, 0x17, 0xbe, 0x18, 0x26, + 0x0d, 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, + 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, + 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, + 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, + 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, + 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, + 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, + 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, + 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, + 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, + 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, + 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, + 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, + 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, + 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x5f, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, + 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x04, 0x43, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x9e, + 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, + 0x9f, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x73, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x74, 0x01, 0x00, 0x00, 0x4d, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, + 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x19, 0xbe, 0x1a, 0xbe, 0x1b, + 0xbe, 0x1c, 0xbe, 0x1d, 0xbe, 0x1e, 0xbe, 0x1f, + 0xbe, 0x20, 0xbe, 0x21, 0xbe, 0x22, 0xbe, 0x23, + 0xbe, 0x24, 0x26, 0x0c, 0x00, 0x4d, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, + 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, + 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x85, + 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, + 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, + 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, + 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, + 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, + 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, + 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x5f, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, + 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x04, 0x43, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x46, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x4d, 0x77, + 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x25, 0xbe, 0x26, 0xbe, 0x27, 0xbe, 0x28, 0xbe, + 0x29, 0xbe, 0x2a, 0xbe, 0x2b, 0xbe, 0x2c, 0xbe, + 0x2d, 0xbe, 0x2e, 0xbe, 0x2f, 0xbe, 0x30, 0xbe, + 0x31, 0x26, 0x0d, 0x00, 0x4d, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, + 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, + 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, + 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, + 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, + 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, + 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, + 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, + 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, + 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, + 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, + 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, + 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, + 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, + 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x5f, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x14, + 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x43, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, + 0x9f, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, + 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x73, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, + 0x4d, 0x78, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x32, 0xbe, 0x33, + 0xbe, 0x34, 0xbe, 0x35, 0xbe, 0x36, 0xbe, 0x37, + 0xbe, 0x38, 0xbe, 0x39, 0xbe, 0x3a, 0xbe, 0x3b, + 0xbe, 0x3c, 0xbe, 0x3d, 0xbe, 0x3e, 0x26, 0x0d, + 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x04, 0xa0, + 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, + 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, + 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, + 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, + 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, + 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, + 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, + 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, + 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, + 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, + 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, + 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, + 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, + 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, + 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x5f, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x49, + 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x04, 0x43, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x6f, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x9e, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x9e, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x73, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x74, 0x01, 0x00, 0x00, 0x4d, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, + 0x01, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x3f, 0xbe, 0x40, 0xbe, 0x41, + 0xbe, 0x42, 0xbe, 0x43, 0xbe, 0x44, 0xbe, 0x45, + 0xbe, 0x46, 0xbe, 0x47, 0xbe, 0x48, 0xbe, 0x49, + 0xbe, 0x4a, 0x26, 0x0c, 0x00, 0x4d, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, + 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, + 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, + 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, + 0x04, 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, + 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, 0x04, + 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, + 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xad, + 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, + 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, + 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, 0x04, + 0xb2, 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, + 0x00, 0x04, 0xb4, 0x01, 0x00, 0x00, 0x04, 0xb5, + 0x01, 0x00, 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, + 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x5f, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, + 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x04, 0x43, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x46, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, + 0x04, 0x9f, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x73, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x4d, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x4d, + 0x78, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x43, 0x01, 0x00, 0x00, + 0x04, 0x44, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x04, 0x43, 0x01, 0x00, + 0x00, 0x04, 0x43, 0x01, 0x00, 0x00, 0x04, 0x45, + 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x5f, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x04, 0x43, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6f, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xb9, 0x01, 0x00, + 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, 0x04, 0xbb, + 0x01, 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, + 0x26, 0x04, 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, + 0x00, 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, + 0xbc, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, + 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, + 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, + 0x26, 0x04, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x73, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x4d, 0x77, 0x01, + 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x4b, + 0xbe, 0x4c, 0xbe, 0x4d, 0xbe, 0x4e, 0xbe, 0x4f, + 0xbe, 0x50, 0xbe, 0x51, 0xbe, 0x52, 0xbe, 0x53, + 0xbe, 0x54, 0xbe, 0x55, 0xbe, 0x56, 0xbe, 0x57, + 0xbe, 0x58, 0x26, 0x0e, 0x00, 0x4d, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, 0x04, + 0xc2, 0x01, 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, + 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, 0x04, 0xc5, + 0x01, 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, 0x00, + 0x04, 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, 0x01, + 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, 0x04, + 0xca, 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, + 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, + 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, + 0x26, 0x0e, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xc1, 0x01, 0x00, 0x00, 0x04, 0xc2, 0x01, + 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, 0x04, + 0xc4, 0x01, 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, + 0x00, 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, 0xc7, + 0x01, 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, + 0x04, 0xc9, 0x01, 0x00, 0x00, 0x04, 0xca, 0x01, + 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, 0x04, + 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, + 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, 0x26, 0x0e, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x5f, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x04, 0x43, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x73, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x4d, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x4d, + 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x59, 0xbe, 0x5a, 0xbe, 0x5b, 0xbe, 0x5c, + 0xbe, 0x5d, 0xbe, 0x5e, 0xbe, 0x5f, 0xbe, 0x60, + 0xbe, 0x61, 0xbe, 0x62, 0xbe, 0x63, 0xbe, 0x64, + 0x26, 0x0c, 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, 0x01, + 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, 0x04, + 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, + 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, 0xd5, + 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, + 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, 0xd8, 0x01, + 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, 0x04, + 0xda, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, + 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, 0xd1, + 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, + 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, + 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, + 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, + 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, + 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x5f, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x49, + 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x04, 0x43, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x6f, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xdb, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xdb, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x73, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x74, 0x01, 0x00, 0x00, 0x4d, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, + 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x65, 0xbe, 0x66, 0xbe, 0x67, + 0xbe, 0x68, 0xbe, 0x69, 0xbe, 0x6a, 0xbe, 0x6b, + 0xbe, 0x6c, 0xbe, 0x6d, 0xbe, 0x6e, 0xbe, 0x6f, + 0xbe, 0x70, 0x26, 0x0c, 0x00, 0x4d, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, 0x04, + 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, + 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, 0xe0, + 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, 0x00, + 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, 0xe3, 0x01, + 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, 0x04, + 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, + 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe8, + 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, + 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, + 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, + 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, + 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, + 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, + 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x5f, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, + 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x04, 0x43, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x46, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xf4, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x73, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, + 0x4d, 0x78, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x71, 0xbe, 0x72, + 0xbe, 0x73, 0xbe, 0x74, 0xbe, 0x75, 0xbe, 0x76, + 0xbe, 0x77, 0xbe, 0x78, 0xbe, 0x79, 0xbe, 0x7a, + 0xbe, 0x7b, 0xbe, 0x7c, 0x26, 0x0c, 0x00, 0x4d, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, + 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, + 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, + 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, + 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, + 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, + 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, + 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, + 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, + 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, + 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, + 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, + 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, + 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, + 0xf3, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x5f, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, + 0x14, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x43, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x46, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xf4, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x04, 0xf4, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x73, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x4d, 0x77, 0x01, + 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x43, + 0x01, 0x00, 0x00, 0x04, 0x44, 0x01, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, + 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, + 0x43, 0x01, 0x00, 0x00, 0x04, 0x43, 0x01, 0x00, + 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, 0x46, + 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x5f, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, + 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x04, 0x43, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x46, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, + 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, + 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, + 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, + 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, + 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, + 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, + 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, + 0x04, 0x02, 0x02, 0x00, 0x00, 0x04, 0x03, 0x02, + 0x00, 0x00, 0x04, 0x04, 0x02, 0x00, 0x00, 0x04, + 0x05, 0x02, 0x00, 0x00, 0x04, 0x06, 0x02, 0x00, + 0x00, 0x04, 0x07, 0x02, 0x00, 0x00, 0x04, 0x08, + 0x02, 0x00, 0x00, 0x04, 0x09, 0x02, 0x00, 0x00, + 0x04, 0x0a, 0x02, 0x00, 0x00, 0x04, 0x0b, 0x02, + 0x00, 0x00, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x04, + 0x0d, 0x02, 0x00, 0x00, 0x04, 0x0e, 0x02, 0x00, + 0x00, 0x04, 0x0f, 0x02, 0x00, 0x00, 0x04, 0x10, + 0x02, 0x00, 0x00, 0x04, 0x11, 0x02, 0x00, 0x00, + 0x04, 0x12, 0x02, 0x00, 0x00, 0x04, 0x13, 0x02, + 0x00, 0x00, 0x04, 0x14, 0x02, 0x00, 0x00, 0x26, + 0x20, 0x00, 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, + 0x20, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, + 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0x17, + 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, + 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, + 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, + 0x24, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, + 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0x1b, + 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, + 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, + 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, + 0x28, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, + 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0x1f, + 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, + 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, + 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, + 0x2c, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, + 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0x23, + 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, + 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, + 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, + 0x30, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, + 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0x27, + 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, + 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, + 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, + 0x34, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, + 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0x2b, + 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, + 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, + 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, + 0x38, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, + 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0x2f, + 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, + 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, + 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, + 0x3c, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, + 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x33, + 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, + 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, + 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, + 0x40, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, + 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x37, + 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, + 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, + 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, + 0x44, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, + 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x3b, + 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, + 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, + 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, + 0x48, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, + 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x3f, + 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, + 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, + 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, + 0x4c, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, + 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x43, + 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, + 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, + 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, + 0x50, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, + 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x47, + 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, + 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, + 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, + 0x54, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, + 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x4b, + 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, + 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, + 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, + 0x58, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, + 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x4f, + 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, + 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, + 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, + 0x5c, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, + 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x53, + 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, + 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, + 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, + 0x60, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, + 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x57, + 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, + 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, + 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, + 0x64, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, + 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x5b, + 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, + 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, + 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, + 0x68, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, + 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x5f, + 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, + 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, + 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, + 0x6c, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, + 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x63, + 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, + 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, + 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, + 0x70, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, + 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x67, + 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, + 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, + 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, + 0x74, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, + 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x6b, + 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, + 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, + 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, + 0x78, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, + 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x6f, + 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, + 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, + 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, + 0x7c, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, + 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x73, + 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, + 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, + 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, + 0x80, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, + 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x77, + 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, + 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, + 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, + 0x84, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, + 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x7b, + 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, + 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, + 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, + 0x88, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, + 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x7f, + 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, + 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, + 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, + 0x8c, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, + 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x83, + 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, + 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, + 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, + 0x90, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, + 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x87, + 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, + 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, + 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, + 0x94, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, + 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x8b, + 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, + 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, + 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, + 0x98, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, + 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x8f, + 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, + 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, + 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, + 0x9c, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, + 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x93, + 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, + 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, + 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, + 0xa0, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, + 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x97, + 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, + 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, + 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, + 0xa4, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, + 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x9b, + 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, + 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, + 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, + 0xa8, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, + 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x9f, + 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, + 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, + 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, + 0xac, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, + 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0xa3, + 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, + 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, + 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, + 0xb0, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, + 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0xa7, + 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, + 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, + 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, + 0xb4, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, + 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0xab, + 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, + 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, + 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, + 0xb8, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, + 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0xaf, + 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, + 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, + 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, + 0xbc, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, + 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0xb3, + 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, + 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, + 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, + 0xc0, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, + 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0xb7, + 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, + 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, + 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, + 0xc4, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, + 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0xbb, + 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, + 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, + 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, + 0xc8, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, + 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0xbf, + 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, + 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, + 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, + 0xcc, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, + 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0xc3, + 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, + 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, + 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, + 0xd0, 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, + 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0xc7, + 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, + 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, + 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0xcb, + 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, + 0x04, 0xcc, 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x80, 0x04, 0xcd, 0x02, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x80, 0x04, 0xce, 0x02, 0x00, + 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0xcf, + 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, + 0x04, 0xd0, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x80, 0x04, 0xd1, 0x02, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x80, 0x04, 0xd2, 0x02, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xd3, + 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, + 0x04, 0xd4, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x80, 0x04, 0xd5, 0x02, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x02, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xd7, + 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, + 0x04, 0xd8, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, + 0x00, 0x80, 0x04, 0xd9, 0x02, 0x00, 0x00, 0x4d, + 0xe4, 0x00, 0x00, 0x80, 0x04, 0xda, 0x02, 0x00, + 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0xdb, + 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, + 0x04, 0xdc, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x80, 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, + 0xe8, 0x00, 0x00, 0x80, 0x04, 0xdd, 0x02, 0x00, + 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0x46, + 0x01, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, + 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x80, 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, + 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, + 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, + 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, + 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, + 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, + 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, + 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, + 0x04, 0x02, 0x02, 0x00, 0x00, 0x04, 0x03, 0x02, + 0x00, 0x00, 0x04, 0x04, 0x02, 0x00, 0x00, 0x04, + 0x05, 0x02, 0x00, 0x00, 0x04, 0x06, 0x02, 0x00, + 0x00, 0x04, 0x07, 0x02, 0x00, 0x00, 0x04, 0x08, + 0x02, 0x00, 0x00, 0x04, 0x09, 0x02, 0x00, 0x00, + 0x04, 0x0a, 0x02, 0x00, 0x00, 0x04, 0x0b, 0x02, + 0x00, 0x00, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x04, + 0x0d, 0x02, 0x00, 0x00, 0x04, 0x0e, 0x02, 0x00, + 0x00, 0x04, 0x0f, 0x02, 0x00, 0x00, 0x04, 0x10, + 0x02, 0x00, 0x00, 0x04, 0x11, 0x02, 0x00, 0x00, + 0x04, 0x12, 0x02, 0x00, 0x00, 0x04, 0x13, 0x02, + 0x00, 0x00, 0x04, 0x14, 0x02, 0x00, 0x00, 0x26, + 0x20, 0x00, 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, + 0x20, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, + 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0x17, + 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, + 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, + 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, + 0x24, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, + 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0x1b, + 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, + 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, + 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, + 0x28, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, + 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0x1f, + 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, + 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, + 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, + 0x2c, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, + 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0x23, + 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, + 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, + 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, + 0x30, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, + 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0x27, + 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, + 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, + 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, + 0x34, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, + 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0x2b, + 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, + 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, + 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, + 0x38, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, + 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0x2f, + 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, + 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, + 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, + 0x3c, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, + 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x33, + 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, + 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, + 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, + 0x40, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, + 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x37, + 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, + 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, + 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, + 0x44, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, + 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x3b, + 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, + 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, + 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, + 0x48, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, + 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x3f, + 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, + 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, + 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, + 0x4c, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, + 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x43, + 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, + 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, + 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, + 0x50, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, + 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x47, + 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, + 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, + 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, + 0x54, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, + 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x4b, + 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, + 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, + 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, + 0x58, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, + 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x4f, + 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, + 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, + 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, + 0x5c, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, + 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x53, + 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, + 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, + 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, + 0x60, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, + 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x57, + 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, + 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, + 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, + 0x64, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, + 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x5b, + 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, + 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, + 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, + 0x68, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, + 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x5f, + 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, + 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, + 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, + 0x6c, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, + 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x63, + 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, + 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, + 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, + 0x70, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, + 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x67, + 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, + 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, + 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, + 0x74, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, + 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x6b, + 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, + 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, + 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, + 0x78, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, + 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x6f, + 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, + 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, + 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, + 0x7c, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, + 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x73, + 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, + 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, + 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, + 0x80, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, + 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x77, + 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, + 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, + 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, + 0x84, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, + 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x7b, + 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, + 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, + 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, + 0x88, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, + 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x7f, + 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, + 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, + 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, + 0x8c, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, + 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x83, + 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, + 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, + 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, + 0x90, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, + 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x87, + 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, + 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, + 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, + 0x94, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, + 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x8b, + 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, + 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, + 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, + 0x98, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, + 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x8f, + 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, + 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, + 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, + 0x9c, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, + 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x93, + 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, + 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, + 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, + 0xa0, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, + 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x97, + 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, + 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, + 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, + 0xa4, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, + 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x9b, + 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, + 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, + 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, + 0xa8, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, + 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x9f, + 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, + 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, + 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, + 0xac, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, + 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0xa3, + 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, + 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, + 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, + 0xb0, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, + 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0xa7, + 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, + 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, + 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, + 0xb4, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, + 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0xab, + 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, + 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, + 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, + 0xb8, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, + 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0xaf, + 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, + 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, + 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, + 0xbc, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, + 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0xb3, + 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, + 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, + 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, + 0xc0, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, + 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0xb7, + 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, + 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, + 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, + 0xc4, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, + 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0xbb, + 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, + 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, + 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, + 0xc8, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, + 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0xbf, + 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, + 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, + 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, + 0xcc, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, + 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0xc3, + 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, + 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, + 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, + 0xd0, 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, + 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0xc7, + 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, + 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, + 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0xcb, + 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, + 0x04, 0xcc, 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x80, 0x04, 0xcd, 0x02, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x80, 0x04, 0xce, 0x02, 0x00, + 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0xcf, + 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, + 0x04, 0xd0, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x80, 0x04, 0xd1, 0x02, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x80, 0x04, 0xd2, 0x02, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xd3, + 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, + 0x04, 0xd4, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x80, 0x04, 0xd5, 0x02, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x02, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xd7, + 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, + 0x04, 0xd8, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, + 0x00, 0x80, 0x04, 0xd9, 0x02, 0x00, 0x00, 0x4d, + 0xe4, 0x00, 0x00, 0x80, 0x04, 0xda, 0x02, 0x00, + 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0xdb, + 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, + 0x04, 0xdc, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x80, 0x04, 0xde, 0x02, 0x00, 0x00, 0x4d, + 0xe8, 0x00, 0x00, 0x80, 0x04, 0xdf, 0x02, 0x00, + 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0xe0, + 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, + 0x04, 0xe1, 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x80, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, + 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, + 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, + 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, + 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, + 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, + 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, + 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, + 0x04, 0x02, 0x02, 0x00, 0x00, 0x04, 0x03, 0x02, + 0x00, 0x00, 0x04, 0x04, 0x02, 0x00, 0x00, 0x04, + 0x05, 0x02, 0x00, 0x00, 0x04, 0x06, 0x02, 0x00, + 0x00, 0x04, 0x07, 0x02, 0x00, 0x00, 0x04, 0x08, + 0x02, 0x00, 0x00, 0x04, 0x09, 0x02, 0x00, 0x00, + 0x04, 0x0a, 0x02, 0x00, 0x00, 0x04, 0x0b, 0x02, + 0x00, 0x00, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x04, + 0x0d, 0x02, 0x00, 0x00, 0x04, 0x0e, 0x02, 0x00, + 0x00, 0x04, 0x0f, 0x02, 0x00, 0x00, 0x04, 0x10, + 0x02, 0x00, 0x00, 0x04, 0x11, 0x02, 0x00, 0x00, + 0x04, 0x12, 0x02, 0x00, 0x00, 0x04, 0x13, 0x02, + 0x00, 0x00, 0x04, 0x14, 0x02, 0x00, 0x00, 0x26, + 0x20, 0x00, 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, + 0x20, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, + 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0x17, + 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, + 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, + 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, + 0x24, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, + 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0x1b, + 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, + 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, + 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, + 0x28, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, + 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0x1f, + 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, + 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, + 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, + 0x2c, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, + 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0x23, + 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, + 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, + 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, + 0x30, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, + 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0x27, + 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, + 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, + 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, + 0x34, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, + 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0x2b, + 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, + 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, + 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, + 0x38, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, + 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0x2f, + 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, + 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, + 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, + 0x3c, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, + 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x33, + 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, + 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, + 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, + 0x40, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, + 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x37, + 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, + 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, + 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, + 0x44, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, + 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x3b, + 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, + 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, + 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, + 0x48, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, + 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x3f, + 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, + 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, + 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, + 0x4c, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, + 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x43, + 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, + 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, + 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, + 0x50, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, + 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x47, + 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, + 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, + 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, + 0x54, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, + 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x4b, + 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, + 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, + 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, + 0x58, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, + 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x4f, + 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, + 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, + 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, + 0x5c, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, + 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x53, + 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, + 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, + 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, + 0x60, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, + 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x57, + 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, + 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, + 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, + 0x64, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, + 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x5b, + 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, + 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, + 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, + 0x68, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, + 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x5f, + 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, + 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, + 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, + 0x6c, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, + 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x63, + 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, + 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, + 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, + 0x70, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, + 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x67, + 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, + 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, + 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, + 0x74, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, + 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x6b, + 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, + 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, + 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, + 0x78, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, + 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x6f, + 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, + 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, + 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, + 0x7c, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, + 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x73, + 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, + 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, + 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, + 0x80, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, + 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x77, + 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, + 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, + 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, + 0x84, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, + 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x7b, + 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, + 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, + 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, + 0x88, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, + 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x7f, + 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, + 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, + 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, + 0x8c, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, + 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x83, + 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, + 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, + 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, + 0x90, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, + 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x87, + 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, + 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, + 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, + 0x94, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, + 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x8b, + 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, + 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, + 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, + 0x98, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, + 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x8f, + 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, + 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, + 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, + 0x9c, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, + 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x93, + 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, + 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, + 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, + 0xa0, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, + 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x97, + 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, + 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, + 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, + 0xa4, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, + 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x9b, + 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, + 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, + 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, + 0xa8, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, + 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x9f, + 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, + 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, + 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, + 0xac, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, + 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0xa3, + 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, + 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, + 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, + 0xb0, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, + 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0xa7, + 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, + 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, + 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, + 0xb4, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, + 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0xab, + 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, + 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, + 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, + 0xb8, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, + 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0xaf, + 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, + 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, + 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, + 0xbc, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, + 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0xb3, + 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, + 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, + 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, + 0xc0, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, + 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0xb7, + 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, + 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, + 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, + 0xc4, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, + 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0xbb, + 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, + 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, + 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, + 0xc8, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, + 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0xbf, + 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, + 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, + 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, + 0xcc, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, + 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0xc3, + 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, + 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, + 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, + 0xd0, 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, + 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0xc7, + 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, + 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, + 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0xcb, + 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, + 0x04, 0xcc, 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x80, 0x04, 0xcd, 0x02, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x80, 0x04, 0xce, 0x02, 0x00, + 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0xcf, + 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, + 0x04, 0xd0, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x80, 0x04, 0xd1, 0x02, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x80, 0x04, 0xd2, 0x02, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xd3, + 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, + 0x04, 0xd4, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x80, 0x04, 0xd5, 0x02, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x02, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xd7, + 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, + 0x04, 0xd8, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, + 0x00, 0x80, 0x04, 0xd9, 0x02, 0x00, 0x00, 0x4d, + 0xe4, 0x00, 0x00, 0x80, 0x04, 0xda, 0x02, 0x00, + 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0xdb, + 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, + 0x04, 0xdc, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x80, 0x04, 0xde, 0x02, 0x00, 0x00, 0x4d, + 0xe8, 0x00, 0x00, 0x80, 0x04, 0xdf, 0x02, 0x00, + 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0xe0, + 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, + 0x04, 0xe1, 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x80, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x73, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, + 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x7d, 0xbe, + 0x7e, 0xbe, 0x7f, 0xbe, 0x80, 0xbe, 0x81, 0xbe, + 0x82, 0xbe, 0x83, 0xbe, 0x84, 0xbe, 0x85, 0xbe, + 0x86, 0xbe, 0x87, 0xbe, 0x88, 0x26, 0x0c, 0x00, + 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x02, + 0x00, 0x00, 0x04, 0xe3, 0x02, 0x00, 0x00, 0x04, + 0xe4, 0x02, 0x00, 0x00, 0x04, 0xe5, 0x02, 0x00, + 0x00, 0x04, 0xe6, 0x02, 0x00, 0x00, 0x04, 0xe7, + 0x02, 0x00, 0x00, 0x04, 0xe8, 0x02, 0x00, 0x00, + 0x04, 0xe9, 0x02, 0x00, 0x00, 0x04, 0xea, 0x02, + 0x00, 0x00, 0x04, 0xeb, 0x02, 0x00, 0x00, 0x04, + 0xec, 0x02, 0x00, 0x00, 0x04, 0xed, 0x02, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xe2, 0x02, 0x00, 0x00, 0x04, 0xe3, + 0x02, 0x00, 0x00, 0x04, 0xe4, 0x02, 0x00, 0x00, + 0x04, 0xe5, 0x02, 0x00, 0x00, 0x04, 0xe6, 0x02, + 0x00, 0x00, 0x04, 0xe7, 0x02, 0x00, 0x00, 0x04, + 0xe8, 0x02, 0x00, 0x00, 0x04, 0xe9, 0x02, 0x00, + 0x00, 0x04, 0xea, 0x02, 0x00, 0x00, 0x04, 0xeb, + 0x02, 0x00, 0x00, 0x04, 0xec, 0x02, 0x00, 0x00, + 0x04, 0xed, 0x02, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x5f, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x04, 0x14, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, + 0x43, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xee, 0x02, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0xee, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xee, 0x02, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x73, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x4d, 0x77, + 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x43, 0x01, 0x00, 0x00, 0x04, 0x44, 0x01, 0x00, + 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x45, + 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x04, 0x43, 0x01, 0x00, 0x00, 0x04, 0x43, 0x01, + 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x5f, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x14, + 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x43, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xef, 0x02, 0x00, 0x00, 0x04, 0xf0, 0x02, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0xef, 0x02, 0x00, 0x00, 0x04, + 0xf0, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xef, 0x02, 0x00, + 0x00, 0x04, 0xf0, 0x02, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x73, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, + 0x4d, 0x78, 0x01, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x00, 0x4d, 0xf1, 0x02, 0x00, 0x00, 0x4d, + 0xf2, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xf3, 0x02, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xf4, 0x02, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xf5, 0x02, 0x00, + 0x00, 0x4d, 0xf6, 0x02, 0x00, 0x00, 0x04, 0xf7, + 0x02, 0x00, 0x00, 0x4d, 0xf8, 0x02, 0x00, 0x00, + 0x4d, 0xf9, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xfa, + 0x02, 0x00, 0x00, 0x4d, 0xf6, 0x02, 0x00, 0x00, + 0x04, 0xfb, 0x02, 0x00, 0x00, 0x4d, 0xf8, 0x02, + 0x00, 0x00, 0x4d, 0xfc, 0x02, 0x00, 0x00, 0x0b, + 0x04, 0xfd, 0x02, 0x00, 0x00, 0x4d, 0xf6, 0x02, + 0x00, 0x00, 0x04, 0xfe, 0x02, 0x00, 0x00, 0x4d, + 0xf8, 0x02, 0x00, 0x00, 0x4d, 0xff, 0x02, 0x00, + 0x00, 0x4d, 0x00, 0x03, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x01, 0x03, 0x00, 0x00, 0x4d, 0xf9, 0x02, + 0x00, 0x00, 0x04, 0x02, 0x03, 0x00, 0x00, 0x4d, + 0x03, 0x03, 0x00, 0x00, 0x04, 0x04, 0x03, 0x00, + 0x00, 0x4d, 0x05, 0x03, 0x00, 0x00, 0x04, 0x06, + 0x03, 0x00, 0x00, 0x4d, 0x07, 0x03, 0x00, 0x00, + 0x04, 0x08, 0x03, 0x00, 0x00, 0x4d, 0x09, 0x03, + 0x00, 0x00, 0x04, 0x0a, 0x03, 0x00, 0x00, 0x4d, + 0x0b, 0x03, 0x00, 0x00, 0x04, 0x0c, 0x03, 0x00, + 0x00, 0x4d, 0x0d, 0x03, 0x00, 0x00, 0x4d, 0xf3, + 0x02, 0x00, 0x00, 0x4d, 0x0e, 0x03, 0x00, 0x00, + 0x0b, 0x04, 0x0f, 0x03, 0x00, 0x00, 0x4d, 0x10, + 0x03, 0x00, 0x00, 0x04, 0x11, 0x03, 0x00, 0x00, + 0x4d, 0x12, 0x03, 0x00, 0x00, 0x04, 0x13, 0x03, + 0x00, 0x00, 0x4d, 0x14, 0x03, 0x00, 0x00, 0x04, + 0x15, 0x03, 0x00, 0x00, 0x4d, 0x16, 0x03, 0x00, + 0x00, 0x04, 0x17, 0x03, 0x00, 0x00, 0x4d, 0x18, + 0x03, 0x00, 0x00, 0x04, 0x19, 0x03, 0x00, 0x00, + 0x4d, 0x1a, 0x03, 0x00, 0x00, 0x04, 0x1b, 0x03, + 0x00, 0x00, 0x4d, 0x1c, 0x03, 0x00, 0x00, 0x04, + 0x1d, 0x03, 0x00, 0x00, 0x4d, 0x1e, 0x03, 0x00, + 0x00, 0x04, 0x1f, 0x03, 0x00, 0x00, 0x4d, 0x20, + 0x03, 0x00, 0x00, 0x04, 0x21, 0x03, 0x00, 0x00, + 0x4d, 0x22, 0x03, 0x00, 0x00, 0x04, 0x23, 0x03, + 0x00, 0x00, 0x4d, 0x24, 0x03, 0x00, 0x00, 0x04, + 0x25, 0x03, 0x00, 0x00, 0x4d, 0x26, 0x03, 0x00, + 0x00, 0x04, 0x27, 0x03, 0x00, 0x00, 0x4d, 0x28, + 0x03, 0x00, 0x00, 0x04, 0x29, 0x03, 0x00, 0x00, + 0x4d, 0x2a, 0x03, 0x00, 0x00, 0x04, 0x2b, 0x03, + 0x00, 0x00, 0x4d, 0x2c, 0x03, 0x00, 0x00, 0x04, + 0x44, 0x01, 0x00, 0x00, 0x4d, 0x2d, 0x03, 0x00, + 0x00, 0x04, 0x2e, 0x03, 0x00, 0x00, 0x4d, 0x2f, + 0x03, 0x00, 0x00, 0x04, 0x30, 0x03, 0x00, 0x00, + 0x4d, 0x31, 0x03, 0x00, 0x00, 0x04, 0x32, 0x03, + 0x00, 0x00, 0x4d, 0x33, 0x03, 0x00, 0x00, 0x04, + 0x34, 0x03, 0x00, 0x00, 0x4d, 0x35, 0x03, 0x00, + 0x00, 0x04, 0x36, 0x03, 0x00, 0x00, 0x4d, 0x37, + 0x03, 0x00, 0x00, 0x04, 0x38, 0x03, 0x00, 0x00, + 0x4d, 0x39, 0x03, 0x00, 0x00, 0x04, 0x3a, 0x03, + 0x00, 0x00, 0x4d, 0x3b, 0x03, 0x00, 0x00, 0x04, + 0x3c, 0x03, 0x00, 0x00, 0x4d, 0x3d, 0x03, 0x00, + 0x00, 0x04, 0x3e, 0x03, 0x00, 0x00, 0x4d, 0x3f, + 0x03, 0x00, 0x00, 0x04, 0x40, 0x03, 0x00, 0x00, + 0x4d, 0x41, 0x03, 0x00, 0x00, 0x04, 0x42, 0x03, + 0x00, 0x00, 0x4d, 0x43, 0x03, 0x00, 0x00, 0x04, + 0x44, 0x03, 0x00, 0x00, 0x4d, 0x45, 0x03, 0x00, + 0x00, 0x04, 0x46, 0x03, 0x00, 0x00, 0x4d, 0x47, + 0x03, 0x00, 0x00, 0x04, 0x48, 0x03, 0x00, 0x00, + 0x4d, 0x49, 0x03, 0x00, 0x00, 0x04, 0x4a, 0x03, + 0x00, 0x00, 0x4d, 0x4b, 0x03, 0x00, 0x00, 0x04, + 0x4c, 0x03, 0x00, 0x00, 0x4d, 0x4d, 0x03, 0x00, + 0x00, 0x04, 0x4e, 0x03, 0x00, 0x00, 0x4d, 0x4f, + 0x03, 0x00, 0x00, 0x04, 0x50, 0x03, 0x00, 0x00, + 0x4d, 0x51, 0x03, 0x00, 0x00, 0x04, 0x52, 0x03, + 0x00, 0x00, 0x4d, 0x53, 0x03, 0x00, 0x00, 0x04, + 0x54, 0x03, 0x00, 0x00, 0x4d, 0x55, 0x03, 0x00, + 0x00, 0x04, 0x56, 0x03, 0x00, 0x00, 0x4d, 0x57, + 0x03, 0x00, 0x00, 0x04, 0x58, 0x03, 0x00, 0x00, + 0x4d, 0x59, 0x03, 0x00, 0x00, 0x04, 0x5a, 0x03, + 0x00, 0x00, 0x4d, 0x5b, 0x03, 0x00, 0x00, 0x04, + 0x5c, 0x03, 0x00, 0x00, 0x4d, 0x5d, 0x03, 0x00, + 0x00, 0x04, 0x5e, 0x03, 0x00, 0x00, 0x4d, 0x5f, + 0x03, 0x00, 0x00, 0x4d, 0x60, 0x03, 0x00, 0x00, + 0x4d, 0x45, 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, + 0xcc, 0x28, 0xc2, 0x0d, 0x01, 0x00, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, + 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_gl_size = 24743; + +const uint8_t intl_gl[24743] = { + 0x01, 0xda, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x67, 0x6c, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x0e, + 0x7b, 0x31, 0x7d, 0x20, 0x7b, 0x30, 0x7d, 0x0a, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, 0x65, + 0x64, 0x69, 0x75, 0x6d, 0x08, 0x66, 0x75, 0x6c, + 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x02, 0x64, + 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, 0x06, 0x64, + 0x20, 0x45, 0x04, 0x45, 0x64, 0x10, 0x45, 0x20, + 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x06, 0x45, + 0x68, 0x6d, 0x0e, 0x45, 0x20, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x06, 0x45, 0x48, 0x6d, 0x16, 0x45, + 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x61, 0x08, 0x45, 0x68, 0x6d, 0x73, 0x14, + 0x45, 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x08, 0x45, 0x48, 0x6d, 0x73, 0x06, + 0x47, 0x20, 0x79, 0x04, 0x47, 0x79, 0x0e, 0x47, + 0x20, 0x79, 0x20, 0x4d, 0x4d, 0x4d, 0x0a, 0x47, + 0x79, 0x4d, 0x4d, 0x4d, 0x12, 0x47, 0x20, 0x79, + 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x0c, 0x47, + 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x18, 0x47, 0x20, + 0x79, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x2c, + 0x20, 0x45, 0x0e, 0x47, 0x79, 0x4d, 0x4d, 0x4d, + 0x45, 0x64, 0x06, 0x68, 0x20, 0x61, 0x02, 0x68, + 0x04, 0x48, 0x48, 0x02, 0x48, 0x0c, 0x68, 0x3a, + 0x6d, 0x6d, 0x20, 0x61, 0x04, 0x68, 0x6d, 0x0a, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x04, 0x48, 0x6d, + 0x12, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x61, 0x06, 0x68, 0x6d, 0x73, 0x10, 0x48, + 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x06, + 0x48, 0x6d, 0x73, 0x16, 0x68, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x61, 0x20, 0x76, 0x08, + 0x68, 0x6d, 0x73, 0x76, 0x14, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x76, 0x08, + 0x48, 0x6d, 0x73, 0x76, 0x10, 0x68, 0x3a, 0x6d, + 0x6d, 0x20, 0x61, 0x20, 0x76, 0x06, 0x68, 0x6d, + 0x76, 0x0e, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x20, + 0x76, 0x06, 0x48, 0x6d, 0x76, 0x02, 0x4c, 0x02, + 0x4d, 0x06, 0x64, 0x2d, 0x4d, 0x04, 0x4d, 0x64, + 0x0c, 0x45, 0x2c, 0x20, 0x64, 0x2d, 0x4d, 0x06, + 0x4d, 0x45, 0x64, 0x0a, 0x64, 0x64, 0x2f, 0x4d, + 0x4d, 0x08, 0x4d, 0x4d, 0x64, 0x64, 0x06, 0x4c, + 0x4c, 0x4c, 0x06, 0x4d, 0x4d, 0x4d, 0x0a, 0x64, + 0x20, 0x4d, 0x4d, 0x4d, 0x08, 0x4d, 0x4d, 0x4d, + 0x64, 0x0e, 0x45, 0x20, 0x64, 0x20, 0x4d, 0x4d, + 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0c, + 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, 0x4d, + 0x4d, 0x4d, 0x4d, 0x64, 0x10, 0x45, 0x20, 0x64, + 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x0c, 0x4d, 0x4d, + 0x4d, 0x4d, 0x45, 0x64, 0x0a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x04, 0x6d, 0x73, 0x02, 0x79, 0x06, + 0x4d, 0x2d, 0x79, 0x04, 0x79, 0x4d, 0x0a, 0x64, + 0x2f, 0x4d, 0x2f, 0x79, 0x06, 0x79, 0x4d, 0x64, + 0x10, 0x45, 0x2c, 0x20, 0x64, 0x2f, 0x4d, 0x2f, + 0x79, 0x08, 0x79, 0x4d, 0x45, 0x64, 0x08, 0x4d, + 0x4d, 0x2f, 0x79, 0x06, 0x79, 0x4d, 0x4d, 0x0a, + 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x08, 0x79, 0x4d, + 0x4d, 0x4d, 0x10, 0x64, 0x20, 0x4d, 0x4d, 0x4d, + 0x2c, 0x20, 0x79, 0x0a, 0x79, 0x4d, 0x4d, 0x4d, + 0x64, 0x16, 0x45, 0x2c, 0x20, 0x64, 0x20, 0x4d, + 0x4d, 0x4d, 0x2c, 0x20, 0x79, 0x0c, 0x79, 0x4d, + 0x4d, 0x4d, 0x45, 0x64, 0x0c, 0x4d, 0x4d, 0x4d, + 0x4d, 0x20, 0x79, 0x0a, 0x79, 0x4d, 0x4d, 0x4d, + 0x4d, 0x0a, 0x51, 0x51, 0x51, 0x20, 0x79, 0x08, + 0x79, 0x51, 0x51, 0x51, 0x0c, 0x51, 0x51, 0x51, + 0x51, 0x20, 0x79, 0x0a, 0x79, 0x51, 0x51, 0x51, + 0x51, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x73, 0x1c, 0x45, 0x45, 0x45, 0x45, 0x20, + 0x64, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, + 0x79, 0x14, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x45, + 0x45, 0x45, 0x45, 0x64, 0x12, 0x64, 0x64, 0x20, + 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0c, 0x79, + 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x10, 0x64, 0x64, + 0x2f, 0x4d, 0x4d, 0x2f, 0x79, 0x79, 0x16, 0x64, + 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x73, 0x1a, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x7a, 0x7a, 0x7a, 0x7a, + 0x12, 0x68, 0x6d, 0x6d, 0x73, 0x73, 0x7a, 0x7a, + 0x7a, 0x7a, 0x14, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x7a, 0x08, 0x68, 0x6d, + 0x73, 0x7a, 0x16, 0x74, 0x69, 0x6d, 0x65, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x0e, 0x66, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x02, 0x58, + 0x02, 0x46, 0x02, 0x41, 0x02, 0x53, 0x02, 0x4f, + 0x02, 0x4e, 0x02, 0x44, 0x0c, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x06, 0x78, 0x61, 0x6e, 0x06, + 0x66, 0x65, 0x62, 0x06, 0x6d, 0x61, 0x72, 0x06, + 0x61, 0x62, 0x72, 0x06, 0x6d, 0x61, 0x69, 0x06, + 0x78, 0x75, 0xf1, 0x06, 0x78, 0x75, 0x6c, 0x06, + 0x61, 0x67, 0x6f, 0x06, 0x6f, 0x75, 0x74, 0x06, + 0x6e, 0x6f, 0x76, 0x06, 0x64, 0x65, 0x63, 0x0e, + 0x78, 0x61, 0x6e, 0x65, 0x69, 0x72, 0x6f, 0x10, + 0x66, 0x65, 0x62, 0x72, 0x65, 0x69, 0x72, 0x6f, + 0x0a, 0x6d, 0x61, 0x72, 0x7a, 0x6f, 0x0a, 0x61, + 0x62, 0x72, 0x69, 0x6c, 0x08, 0x6d, 0x61, 0x69, + 0x6f, 0x08, 0x78, 0x75, 0xf1, 0x6f, 0x0a, 0x78, + 0x75, 0x6c, 0x6c, 0x6f, 0x0c, 0x61, 0x67, 0x6f, + 0x73, 0x74, 0x6f, 0x10, 0x73, 0x65, 0x74, 0x65, + 0x6d, 0x62, 0x72, 0x6f, 0x0e, 0x6f, 0x75, 0x74, + 0x75, 0x62, 0x72, 0x6f, 0x10, 0x6e, 0x6f, 0x76, + 0x65, 0x6d, 0x62, 0x72, 0x6f, 0x10, 0x64, 0x65, + 0x63, 0x65, 0x6d, 0x62, 0x72, 0x6f, 0x0c, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x73, 0x02, 0x56, 0x06, + 0x64, 0x6f, 0x6d, 0x08, 0x6c, 0x75, 0x6e, 0x73, + 0x06, 0x6d, 0xe9, 0x72, 0x06, 0x78, 0x6f, 0x76, + 0x06, 0x76, 0x65, 0x6e, 0x06, 0x73, 0xe1, 0x62, + 0x0e, 0x64, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x6f, + 0x0c, 0x6d, 0x61, 0x72, 0x74, 0x65, 0x73, 0x10, + 0x6d, 0xe9, 0x72, 0x63, 0x6f, 0x72, 0x65, 0x73, + 0x0a, 0x78, 0x6f, 0x76, 0x65, 0x73, 0x0c, 0x76, + 0x65, 0x6e, 0x72, 0x65, 0x73, 0x0c, 0x73, 0xe1, + 0x62, 0x61, 0x64, 0x6f, 0x08, 0x64, 0x61, 0x79, + 0x73, 0x04, 0x42, 0x45, 0x08, 0x65, 0x72, 0x61, + 0x73, 0x08, 0x61, 0x2e, 0x6d, 0x2e, 0x04, 0x61, + 0x6d, 0x08, 0x70, 0x2e, 0x6d, 0x2e, 0x04, 0x70, + 0x6d, 0x14, 0x64, 0x61, 0x79, 0x50, 0x65, 0x72, + 0x69, 0x6f, 0x64, 0x73, 0x06, 0x4d, 0x30, 0x31, + 0x06, 0x4d, 0x30, 0x32, 0x06, 0x4d, 0x30, 0x33, + 0x06, 0x4d, 0x30, 0x34, 0x06, 0x4d, 0x30, 0x35, + 0x06, 0x4d, 0x30, 0x36, 0x06, 0x4d, 0x30, 0x37, + 0x06, 0x4d, 0x30, 0x38, 0x06, 0x4d, 0x30, 0x39, + 0x06, 0x4d, 0x31, 0x30, 0x06, 0x4d, 0x31, 0x31, + 0x06, 0x4d, 0x31, 0x32, 0x08, 0x54, 0x6f, 0x75, + 0x74, 0x08, 0x42, 0x61, 0x62, 0x61, 0x0a, 0x48, + 0x61, 0x74, 0x6f, 0x72, 0x0a, 0x4b, 0x69, 0x61, + 0x68, 0x6b, 0x08, 0x54, 0x6f, 0x62, 0x61, 0x0c, + 0x41, 0x6d, 0x73, 0x68, 0x69, 0x72, 0x10, 0x42, + 0x61, 0x72, 0x61, 0x6d, 0x68, 0x61, 0x74, 0x12, + 0x42, 0x61, 0x72, 0x61, 0x6d, 0x6f, 0x75, 0x64, + 0x61, 0x0e, 0x42, 0x61, 0x73, 0x68, 0x61, 0x6e, + 0x73, 0x0a, 0x50, 0x61, 0x6f, 0x6e, 0x61, 0x08, + 0x45, 0x70, 0x65, 0x70, 0x0a, 0x4d, 0x65, 0x73, + 0x72, 0x61, 0x0a, 0x4e, 0x61, 0x73, 0x69, 0x65, + 0x08, 0x45, 0x52, 0x41, 0x30, 0x08, 0x45, 0x52, + 0x41, 0x31, 0x10, 0x4d, 0x65, 0x73, 0x6b, 0x65, + 0x72, 0x65, 0x6d, 0x0c, 0x54, 0x65, 0x6b, 0x65, + 0x6d, 0x74, 0x0a, 0x48, 0x65, 0x64, 0x61, 0x72, + 0x0c, 0x54, 0x61, 0x68, 0x73, 0x61, 0x73, 0x06, + 0x54, 0x65, 0x72, 0x0e, 0x59, 0x65, 0x6b, 0x61, + 0x74, 0x69, 0x74, 0x0e, 0x4d, 0x65, 0x67, 0x61, + 0x62, 0x69, 0x74, 0x0c, 0x4d, 0x69, 0x61, 0x7a, + 0x69, 0x61, 0x0c, 0x47, 0x65, 0x6e, 0x62, 0x6f, + 0x74, 0x08, 0x53, 0x65, 0x6e, 0x65, 0x0a, 0x48, + 0x61, 0x6d, 0x6c, 0x65, 0x0e, 0x4e, 0x65, 0x68, + 0x61, 0x73, 0x73, 0x65, 0x0e, 0x50, 0x61, 0x67, + 0x75, 0x6d, 0x65, 0x6e, 0x08, 0x61, 0x2e, 0x43, + 0x2e, 0x08, 0x64, 0x2e, 0x43, 0x2e, 0x06, 0x42, + 0x43, 0x45, 0x04, 0x43, 0x45, 0x1e, 0x61, 0x6e, + 0x74, 0x65, 0x73, 0x20, 0x64, 0x65, 0x20, 0x43, + 0x72, 0x69, 0x73, 0x74, 0x6f, 0x22, 0x64, 0x65, + 0x73, 0x70, 0x6f, 0x69, 0x73, 0x20, 0x64, 0x65, + 0x20, 0x43, 0x72, 0x69, 0x73, 0x74, 0x6f, 0x0c, + 0x54, 0x69, 0x73, 0x68, 0x72, 0x69, 0x0e, 0x48, + 0x65, 0x73, 0x68, 0x76, 0x61, 0x6e, 0x0c, 0x4b, + 0x69, 0x73, 0x6c, 0x65, 0x76, 0x0a, 0x54, 0x65, + 0x76, 0x65, 0x74, 0x0c, 0x53, 0x68, 0x65, 0x76, + 0x61, 0x74, 0x0c, 0x41, 0x64, 0x61, 0x72, 0x20, + 0x49, 0x08, 0x41, 0x64, 0x61, 0x72, 0x0a, 0x4e, + 0x69, 0x73, 0x61, 0x6e, 0x08, 0x49, 0x79, 0x61, + 0x72, 0x0a, 0x53, 0x69, 0x76, 0x61, 0x6e, 0x0a, + 0x54, 0x61, 0x6d, 0x75, 0x7a, 0x04, 0x41, 0x76, + 0x08, 0x45, 0x6c, 0x75, 0x6c, 0x0e, 0x41, 0x64, + 0x61, 0x72, 0x20, 0x49, 0x49, 0x04, 0x41, 0x4d, + 0x0e, 0x43, 0x68, 0x61, 0x69, 0x74, 0x72, 0x61, + 0x10, 0x56, 0x61, 0x69, 0x73, 0x61, 0x6b, 0x68, + 0x61, 0x10, 0x4a, 0x79, 0x61, 0x69, 0x73, 0x74, + 0x68, 0x61, 0x0c, 0x41, 0x73, 0x61, 0x64, 0x68, + 0x61, 0x0e, 0x53, 0x72, 0x61, 0x76, 0x61, 0x6e, + 0x61, 0x0c, 0x42, 0x68, 0x61, 0x64, 0x72, 0x61, + 0x0c, 0x41, 0x73, 0x76, 0x69, 0x6e, 0x61, 0x0e, + 0x4b, 0x61, 0x72, 0x74, 0x69, 0x6b, 0x61, 0x14, + 0x41, 0x67, 0x72, 0x61, 0x68, 0x61, 0x79, 0x61, + 0x6e, 0x61, 0x0a, 0x50, 0x61, 0x75, 0x73, 0x61, + 0x0a, 0x4d, 0x61, 0x67, 0x68, 0x61, 0x10, 0x50, + 0x68, 0x61, 0x6c, 0x67, 0x75, 0x6e, 0x61, 0x08, + 0x53, 0x61, 0x6b, 0x61, 0x08, 0x4d, 0x75, 0x68, + 0x2e, 0x08, 0x53, 0x61, 0x66, 0x2e, 0x0c, 0x52, + 0x61, 0x62, 0x2e, 0x20, 0x49, 0x0e, 0x52, 0x61, + 0x62, 0x2e, 0x20, 0x49, 0x49, 0x0c, 0x4a, 0x75, + 0x6d, 0x2e, 0x20, 0x49, 0x0e, 0x4a, 0x75, 0x6d, + 0x2e, 0x20, 0x49, 0x49, 0x08, 0x52, 0x61, 0x6a, + 0x2e, 0x08, 0x53, 0x68, 0x61, 0x2e, 0x08, 0x52, + 0x61, 0x6d, 0x2e, 0x0a, 0x53, 0x68, 0x61, 0x77, + 0x2e, 0x11, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, + 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x51, 0x00, + 0x2e, 0x00, 0x11, 0x44, 0x00, 0x68, 0x00, 0x75, + 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x48, + 0x00, 0x2e, 0x00, 0x10, 0x4d, 0x75, 0x68, 0x61, + 0x72, 0x72, 0x61, 0x6d, 0x0a, 0x53, 0x61, 0x66, + 0x61, 0x72, 0x0f, 0x52, 0x00, 0x61, 0x00, 0x62, + 0x00, 0x69, 0x00, 0xbb, 0x02, 0x20, 0x00, 0x49, + 0x00, 0x11, 0x52, 0x00, 0x61, 0x00, 0x62, 0x00, + 0x69, 0x00, 0xbb, 0x02, 0x20, 0x00, 0x49, 0x00, + 0x49, 0x00, 0x10, 0x4a, 0x75, 0x6d, 0x61, 0x64, + 0x61, 0x20, 0x49, 0x12, 0x4a, 0x75, 0x6d, 0x61, + 0x64, 0x61, 0x20, 0x49, 0x49, 0x0a, 0x52, 0x61, + 0x6a, 0x61, 0x62, 0x0f, 0x53, 0x00, 0x68, 0x00, + 0x61, 0x00, 0xbb, 0x02, 0x62, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x0e, 0x52, 0x61, 0x6d, 0x61, 0x64, + 0x61, 0x6e, 0x0e, 0x53, 0x68, 0x61, 0x77, 0x77, + 0x61, 0x6c, 0x19, 0x44, 0x00, 0x68, 0x00, 0x75, + 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x51, + 0x00, 0x69, 0x00, 0xbb, 0x02, 0x64, 0x00, 0x61, + 0x00, 0x68, 0x00, 0x19, 0x44, 0x00, 0x68, 0x00, + 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, + 0x48, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x6a, 0x00, + 0x61, 0x00, 0x68, 0x00, 0x04, 0x41, 0x48, 0x1f, + 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, 0x36, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x48, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x36, 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x36, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x75, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x36, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x1d, 0x57, 0x00, 0x61, 0x00, 0x64, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x52, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, 0x59, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, + 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x2b, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x2d, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x2d, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x2d, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x2a, 0x4a, 0x69, 0x6e, + 0x67, 0x6f, 0x2d, 0x6b, 0x65, 0x69, 0x75, 0x6e, + 0x20, 0x28, 0x37, 0x36, 0x37, 0x2d, 0x37, 0x37, + 0x30, 0x29, 0x1d, 0x48, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x1f, 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x64, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x1f, 0x4b, 0x00, 0x4d, 0x01, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1d, 0x4a, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, + 0x61, 0x00, 0x6a, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1f, 0x53, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x20, 0x54, 0x65, 0x6e, 0x2d, 0x61, 0x6e, 0x20, + 0x28, 0x38, 0x35, 0x37, 0x2d, 0x38, 0x35, 0x39, + 0x29, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x21, 0x47, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x61, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1d, 0x45, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, + 0x45, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4a, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x34, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1b, 0x4c, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1d, 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x41, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, + 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x38, 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, + 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, + 0x69, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, 0x73, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x69, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x29, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x27, 0x4a, 0x00, 0x69, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x45, 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4c, 0x01, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x61, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x25, 0x4a, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x24, 0x54, 0x65, 0x6e, + 0x2d, 0x65, 0x69, 0x20, 0x28, 0x31, 0x31, 0x31, + 0x30, 0x2d, 0x31, 0x31, 0x31, 0x33, 0x29, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x44, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x6a, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x48, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x27, 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1f, 0x4c, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x6d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x41, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x4a, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x59, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, + 0x75, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x29, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x21, 0x4a, 0x00, 0x4d, 0x01, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x27, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x75, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x29, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, 0x29, 0x52, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x45, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x21, 0x48, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, + 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x4c, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x61, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, + 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x48, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x27, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, + 0x4c, 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x45, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, + 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x45, + 0x00, 0x69, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x27, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, + 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x27, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x61, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x4d, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x02, 0x54, 0x0a, 0x4d, 0x65, 0x69, + 0x6a, 0x69, 0x0d, 0x54, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x0b, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x0c, 0x48, 0x65, 0x69, 0x73, 0x65, + 0x69, 0x12, 0x46, 0x61, 0x72, 0x76, 0x61, 0x72, + 0x64, 0x69, 0x6e, 0x16, 0x4f, 0x72, 0x64, 0x69, + 0x62, 0x65, 0x68, 0x65, 0x73, 0x68, 0x74, 0x0e, + 0x4b, 0x68, 0x6f, 0x72, 0x64, 0x61, 0x64, 0x06, + 0x54, 0x69, 0x72, 0x0c, 0x4d, 0x6f, 0x72, 0x64, + 0x61, 0x64, 0x12, 0x53, 0x68, 0x61, 0x68, 0x72, + 0x69, 0x76, 0x61, 0x72, 0x08, 0x4d, 0x65, 0x68, + 0x72, 0x08, 0x41, 0x62, 0x61, 0x6e, 0x08, 0x41, + 0x7a, 0x61, 0x72, 0x06, 0x44, 0x65, 0x79, 0x0c, + 0x42, 0x61, 0x68, 0x6d, 0x61, 0x6e, 0x0c, 0x45, + 0x73, 0x66, 0x61, 0x6e, 0x64, 0x04, 0x41, 0x50, + 0x1a, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, + 0x52, 0x2e, 0x4f, 0x2e, 0x43, 0x2e, 0x0c, 0x52, + 0x2e, 0x4f, 0x2e, 0x43, 0x2e, 0x12, 0x63, 0x61, + 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, 0x73, 0x08, + 0x64, 0x61, 0x74, 0x65, 0x08, 0x6c, 0x61, 0x74, + 0x6e, 0x04, 0x6e, 0x75, 0x10, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, + 0x74, 0x74, 0x65, 0x72, 0x6e, 0x26, 0x7b, 0x6d, + 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0x1e, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, + 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, + 0x6e, 0x0e, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, + 0x6c, 0x24, 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x63, 0x79, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0x3a, 0x7b, 0x6d, 0x69, + 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, + 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, + 0x79, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x63, 0x79, 0x2a, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0x7b, 0x70, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, + 0x7d, 0x40, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x7b, 0x70, 0x65, + 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, + 0x6e, 0x7d, 0x0e, 0x70, 0x65, 0x72, 0x63, 0x65, + 0x6e, 0x74, 0x10, 0x70, 0x61, 0x74, 0x74, 0x65, + 0x72, 0x6e, 0x73, 0x02, 0x2c, 0x02, 0x2e, 0x0a, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x06, 0x4e, 0x61, + 0x4e, 0x06, 0x6e, 0x61, 0x6e, 0x02, 0x2b, 0x10, + 0x70, 0x6c, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x02, 0x2d, 0x12, 0x6d, 0x69, 0x6e, 0x75, 0x73, + 0x53, 0x69, 0x67, 0x6e, 0x02, 0x25, 0x16, 0x70, + 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, + 0x67, 0x6e, 0x03, 0x1e, 0x22, 0x10, 0x69, 0x6e, + 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x0e, 0x73, + 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x04, 0x24, + 0x41, 0x06, 0x41, 0x55, 0x44, 0x04, 0x24, 0x52, + 0x06, 0x42, 0x52, 0x4c, 0x06, 0x24, 0x43, 0x41, + 0x06, 0x43, 0x41, 0x44, 0x06, 0x43, 0x4e, 0xa5, + 0x06, 0x43, 0x4e, 0x59, 0x03, 0xa7, 0x20, 0x06, + 0x45, 0x53, 0x50, 0x03, 0xac, 0x20, 0x06, 0x45, + 0x55, 0x52, 0x02, 0xa3, 0x06, 0x47, 0x42, 0x50, + 0x06, 0x24, 0x48, 0x4b, 0x06, 0x48, 0x4b, 0x44, + 0x03, 0xaa, 0x20, 0x06, 0x49, 0x4c, 0x53, 0x03, + 0xb9, 0x20, 0x06, 0x49, 0x4e, 0x52, 0x06, 0xa5, + 0x4a, 0x50, 0x06, 0x4a, 0x50, 0x59, 0x03, 0xa9, + 0x20, 0x06, 0x4b, 0x52, 0x57, 0x06, 0x24, 0x4d, + 0x58, 0x06, 0x4d, 0x58, 0x4e, 0x06, 0x4e, 0x5a, + 0x24, 0x06, 0x4e, 0x5a, 0x44, 0x03, 0x3f, 0x0e, + 0x06, 0x54, 0x48, 0x42, 0x06, 0x24, 0x4e, 0x54, + 0x06, 0x54, 0x57, 0x44, 0x02, 0x24, 0x06, 0x55, + 0x53, 0x44, 0x03, 0xab, 0x20, 0x06, 0x56, 0x4e, + 0x44, 0x08, 0x46, 0x43, 0x46, 0x41, 0x06, 0x58, + 0x41, 0x46, 0x06, 0x45, 0x43, 0x24, 0x06, 0x58, + 0x43, 0x44, 0x06, 0x43, 0x46, 0x41, 0x06, 0x58, + 0x4f, 0x46, 0x08, 0x43, 0x46, 0x50, 0x46, 0x06, + 0x58, 0x50, 0x46, 0x14, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x52, 0x6e, + 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, + 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, + 0x64, 0x61, 0x74, 0x61, 0x2f, 0x6a, 0x73, 0x6f, + 0x6e, 0x70, 0x2f, 0x67, 0x6c, 0x2e, 0x6a, 0x73, + 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, + 0x00, 0x27, 0x00, 0x89, 0x01, 0x86, 0x6b, 0x01, + 0xa0, 0x01, 0x00, 0x00, 0x00, 0x39, 0xd0, 0x00, + 0x00, 0x00, 0x43, 0xd1, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd2, 0x00, 0x00, 0x00, 0x4d, 0xd3, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd4, 0x00, 0x00, 0x00, + 0x04, 0xd5, 0x00, 0x00, 0x00, 0x04, 0xd6, 0x00, + 0x00, 0x00, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x04, + 0xd8, 0x00, 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, + 0x00, 0x04, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdb, + 0x00, 0x00, 0x00, 0x04, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0xdd, 0x00, 0x00, 0x00, 0x04, 0xde, 0x00, + 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, 0x04, + 0xe0, 0x00, 0x00, 0x00, 0x04, 0xe1, 0x00, 0x00, + 0x00, 0x04, 0xe2, 0x00, 0x00, 0x00, 0x26, 0x0f, + 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x0a, 0x4d, + 0xe4, 0x00, 0x00, 0x00, 0x09, 0x4d, 0xe5, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, + 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x04, 0xec, + 0x00, 0x00, 0x00, 0x4d, 0xed, 0x00, 0x00, 0x00, + 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, 0xef, 0x00, + 0x00, 0x00, 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, + 0xf1, 0x00, 0x00, 0x00, 0x04, 0xf2, 0x00, 0x00, + 0x00, 0x4d, 0xf3, 0x00, 0x00, 0x00, 0x04, 0xf4, + 0x00, 0x00, 0x00, 0x4d, 0xf5, 0x00, 0x00, 0x00, + 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, 0xf7, 0x00, + 0x00, 0x00, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, + 0xf9, 0x00, 0x00, 0x00, 0x04, 0xfa, 0x00, 0x00, + 0x00, 0x4d, 0xfb, 0x00, 0x00, 0x00, 0x04, 0xfc, + 0x00, 0x00, 0x00, 0x4d, 0xfd, 0x00, 0x00, 0x00, + 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, 0xff, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, + 0x01, 0x01, 0x00, 0x00, 0x04, 0x02, 0x01, 0x00, + 0x00, 0x4d, 0x03, 0x01, 0x00, 0x00, 0x04, 0x04, + 0x01, 0x00, 0x00, 0x4d, 0x05, 0x01, 0x00, 0x00, + 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, 0x07, 0x01, + 0x00, 0x00, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, + 0x09, 0x01, 0x00, 0x00, 0x04, 0x0a, 0x01, 0x00, + 0x00, 0x4d, 0x0b, 0x01, 0x00, 0x00, 0x04, 0x0c, + 0x01, 0x00, 0x00, 0x4d, 0x0d, 0x01, 0x00, 0x00, + 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, 0x0f, 0x01, + 0x00, 0x00, 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, + 0x11, 0x01, 0x00, 0x00, 0x04, 0x12, 0x01, 0x00, + 0x00, 0x4d, 0x13, 0x01, 0x00, 0x00, 0x04, 0x14, + 0x01, 0x00, 0x00, 0x4d, 0x15, 0x01, 0x00, 0x00, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, 0x17, 0x01, + 0x00, 0x00, 0x04, 0x18, 0x01, 0x00, 0x00, 0x4d, + 0x19, 0x01, 0x00, 0x00, 0x04, 0x1a, 0x01, 0x00, + 0x00, 0x4d, 0x1b, 0x01, 0x00, 0x00, 0x04, 0x1c, + 0x01, 0x00, 0x00, 0x4d, 0x1d, 0x01, 0x00, 0x00, + 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, 0x1f, 0x01, + 0x00, 0x00, 0x04, 0x20, 0x01, 0x00, 0x00, 0x4d, + 0x21, 0x01, 0x00, 0x00, 0x04, 0x22, 0x01, 0x00, + 0x00, 0x4d, 0x23, 0x01, 0x00, 0x00, 0x04, 0x24, + 0x01, 0x00, 0x00, 0x4d, 0x25, 0x01, 0x00, 0x00, + 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, 0x27, 0x01, + 0x00, 0x00, 0x04, 0x28, 0x01, 0x00, 0x00, 0x4d, + 0x28, 0x01, 0x00, 0x00, 0x04, 0x29, 0x01, 0x00, + 0x00, 0x4d, 0x2a, 0x01, 0x00, 0x00, 0x04, 0x2b, + 0x01, 0x00, 0x00, 0x4d, 0x2c, 0x01, 0x00, 0x00, + 0x04, 0x2d, 0x01, 0x00, 0x00, 0x4d, 0x2e, 0x01, + 0x00, 0x00, 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, + 0x30, 0x01, 0x00, 0x00, 0x04, 0x31, 0x01, 0x00, + 0x00, 0x4d, 0x32, 0x01, 0x00, 0x00, 0x04, 0x33, + 0x01, 0x00, 0x00, 0x4d, 0x34, 0x01, 0x00, 0x00, + 0x04, 0x35, 0x01, 0x00, 0x00, 0x4d, 0x36, 0x01, + 0x00, 0x00, 0x04, 0x37, 0x01, 0x00, 0x00, 0x4d, + 0x38, 0x01, 0x00, 0x00, 0x04, 0x39, 0x01, 0x00, + 0x00, 0x4d, 0x3a, 0x01, 0x00, 0x00, 0x04, 0x3b, + 0x01, 0x00, 0x00, 0x4d, 0x3c, 0x01, 0x00, 0x00, + 0x4d, 0x3d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x3e, + 0x01, 0x00, 0x00, 0x4d, 0x3f, 0x01, 0x00, 0x00, + 0x04, 0x40, 0x01, 0x00, 0x00, 0x4d, 0x41, 0x01, + 0x00, 0x00, 0x04, 0x33, 0x01, 0x00, 0x00, 0x4d, + 0x34, 0x01, 0x00, 0x00, 0x04, 0x42, 0x01, 0x00, + 0x00, 0x4d, 0x2c, 0x01, 0x00, 0x00, 0x4d, 0x43, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x44, 0x01, 0x00, + 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, 0x04, 0x46, + 0x01, 0x00, 0x00, 0x4d, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x09, 0x01, + 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, + 0x05, 0x01, 0x00, 0x00, 0x4d, 0x48, 0x01, 0x00, + 0x00, 0x4d, 0x49, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x0b, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x41, 0x00, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x14, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x78, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, + 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, + 0x4d, 0xd5, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x00, 0xbe, 0x01, 0xbe, 0x02, 0xbe, 0x03, 0xbe, + 0x04, 0xbe, 0x05, 0xbe, 0x06, 0xbe, 0x07, 0xbe, + 0x08, 0xbe, 0x09, 0xbe, 0x0a, 0xbe, 0x0b, 0x26, + 0x0c, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, + 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, + 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, + 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, + 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, + 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, + 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x77, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, + 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0xd6, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x0c, 0xbe, 0x0d, + 0xbe, 0x0e, 0xbe, 0x0f, 0xbe, 0x10, 0xbe, 0x11, + 0xbe, 0x12, 0xbe, 0x13, 0xbe, 0x14, 0xbe, 0x15, + 0xbe, 0x16, 0xbe, 0x17, 0xbe, 0x18, 0x26, 0x0d, + 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0x8b, + 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, + 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, + 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, + 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, + 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, + 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, + 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, + 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, + 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, + 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, + 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, + 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, + 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, + 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, + 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x98, 0x01, + 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, + 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x19, 0xbe, 0x1a, 0xbe, 0x1b, 0xbe, + 0x1c, 0xbe, 0x1d, 0xbe, 0x1e, 0xbe, 0x1f, 0xbe, + 0x20, 0xbe, 0x21, 0xbe, 0x22, 0xbe, 0x23, 0xbe, + 0x24, 0x26, 0x0c, 0x00, 0x4d, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, + 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, + 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, + 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, + 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, + 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x25, + 0xbe, 0x26, 0xbe, 0x27, 0xbe, 0x28, 0xbe, 0x29, + 0xbe, 0x2a, 0xbe, 0x2b, 0xbe, 0x2c, 0xbe, 0x2d, + 0xbe, 0x2e, 0xbe, 0x2f, 0xbe, 0x30, 0xbe, 0x31, + 0x26, 0x0d, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, + 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, + 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, + 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, + 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, + 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, + 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, + 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, + 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, + 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, + 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, + 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, + 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, + 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, + 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, + 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, + 0x04, 0x99, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x79, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, + 0x7e, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x32, 0xbe, 0x33, 0xbe, + 0x34, 0xbe, 0x35, 0xbe, 0x36, 0xbe, 0x37, 0xbe, + 0x38, 0xbe, 0x39, 0xbe, 0x3a, 0xbe, 0x3b, 0xbe, + 0x3c, 0xbe, 0x3d, 0xbe, 0x3e, 0x26, 0x0d, 0x00, + 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, + 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, + 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, + 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, + 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, + 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, + 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, + 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, + 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x26, 0x0d, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x9a, + 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, + 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, + 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, + 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, + 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, + 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, + 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, + 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x77, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x98, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x98, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x3f, 0xbe, 0x40, 0xbe, 0x41, 0xbe, + 0x42, 0xbe, 0x43, 0xbe, 0x44, 0xbe, 0x45, 0xbe, + 0x46, 0xbe, 0x47, 0xbe, 0x48, 0xbe, 0x49, 0xbe, + 0x4a, 0x26, 0x0c, 0x00, 0x4d, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, + 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, + 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, + 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, + 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x98, + 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, + 0x99, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x4d, + 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x41, + 0x00, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x69, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x77, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xa7, 0x01, 0x00, 0x00, + 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, + 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x26, + 0x04, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, + 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, + 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, + 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, + 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, + 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x26, + 0x04, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x79, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, + 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0xd4, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x4b, 0xbe, + 0x4c, 0xbe, 0x4d, 0xbe, 0x4e, 0xbe, 0x4f, 0xbe, + 0x50, 0xbe, 0x51, 0xbe, 0x52, 0xbe, 0x53, 0xbe, + 0x54, 0xbe, 0x55, 0xbe, 0x56, 0xbe, 0x57, 0xbe, + 0x58, 0x26, 0x0e, 0x00, 0x4d, 0x51, 0x01, 0x00, + 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, 0xae, + 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, + 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, + 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, + 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, + 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, 0x04, 0xb6, + 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, + 0x04, 0xb8, 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, + 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, 0x26, + 0x0e, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xad, 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, + 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, + 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, + 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, + 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, 0x00, 0x04, + 0xb5, 0x01, 0x00, 0x00, 0x04, 0xb6, 0x01, 0x00, + 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, + 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, + 0x04, 0xba, 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x14, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xbb, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, + 0xbb, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xbb, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, + 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x59, 0xbe, 0x5a, 0xbe, 0x5b, 0xbe, 0x5c, 0xbe, + 0x5d, 0xbe, 0x5e, 0xbe, 0x5f, 0xbe, 0x60, 0xbe, + 0x61, 0xbe, 0x62, 0xbe, 0x63, 0xbe, 0x64, 0x26, + 0x0c, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, + 0xbc, 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, + 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, + 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, + 0x04, 0xc1, 0x01, 0x00, 0x00, 0x04, 0xc2, 0x01, + 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, 0x04, + 0xc4, 0x01, 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, + 0x00, 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, 0xc7, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, + 0x04, 0xbd, 0x01, 0x00, 0x00, 0x04, 0xbe, 0x01, + 0x00, 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, 0x04, + 0xc0, 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, + 0x00, 0x04, 0xc2, 0x01, 0x00, 0x00, 0x04, 0xc3, + 0x01, 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, + 0x04, 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, 0x01, + 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x77, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xc8, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x51, 0x01, 0x00, + 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xc8, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x65, 0xbe, 0x66, 0xbe, 0x67, 0xbe, + 0x68, 0xbe, 0x69, 0xbe, 0x6a, 0xbe, 0x6b, 0xbe, + 0x6c, 0xbe, 0x6d, 0xbe, 0x6e, 0xbe, 0x6f, 0xbe, + 0x70, 0x26, 0x0c, 0x00, 0x4d, 0x51, 0x01, 0x00, + 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, 0x04, 0xca, + 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, + 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, + 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, 0x04, + 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, + 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, 0x04, 0xd2, + 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, + 0x04, 0xd4, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd5, 0x01, + 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, 0x04, + 0xd7, 0x01, 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, + 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, + 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, + 0x04, 0xdc, 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, + 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, + 0xdf, 0x01, 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, + 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xe1, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x51, + 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xe1, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x79, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, + 0x7e, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x71, 0xbe, 0x72, 0xbe, + 0x73, 0xbe, 0x74, 0xbe, 0x75, 0xbe, 0x76, 0xbe, + 0x77, 0xbe, 0x78, 0xbe, 0x79, 0xbe, 0x7a, 0xbe, + 0x7b, 0xbe, 0x7c, 0x26, 0x0c, 0x00, 0x4d, 0x51, + 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, + 0x04, 0xca, 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, + 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, + 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, + 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, + 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, + 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, + 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, + 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, 0xd8, + 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, + 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, + 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, 0x04, + 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, + 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, 0xe0, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x14, + 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xe1, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x79, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, + 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x41, 0x00, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, + 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xe2, + 0x01, 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, + 0x04, 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, + 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, + 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, + 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, + 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, + 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, + 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, + 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, + 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, + 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, + 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, + 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, + 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, + 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, + 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, + 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, 0x01, + 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x04, + 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, + 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, 0x26, 0x20, + 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, 0x4d, 0x20, + 0x00, 0x00, 0x80, 0x04, 0x03, 0x02, 0x00, 0x00, + 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0x04, 0x02, + 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, + 0x05, 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, + 0x80, 0x04, 0x06, 0x02, 0x00, 0x00, 0x4d, 0x24, + 0x00, 0x00, 0x80, 0x04, 0x07, 0x02, 0x00, 0x00, + 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0x08, 0x02, + 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, + 0x09, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, + 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x4d, 0x28, + 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, 0x00, 0x00, + 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, + 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, + 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, + 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x2c, + 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, + 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, + 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, + 0x11, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, + 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, 0x30, + 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, + 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, + 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, + 0x15, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, + 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, 0x34, + 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, + 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, + 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, + 0x19, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, + 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x38, + 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, + 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, + 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, + 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, + 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x3c, + 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, + 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, + 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, + 0x21, 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, + 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x40, + 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, + 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, + 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, + 0x25, 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, + 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x44, + 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, + 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, + 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, + 0x29, 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, + 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x48, + 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, + 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, + 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, + 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, + 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x4c, + 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, + 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, + 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, + 0x31, 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, + 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x50, + 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, + 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, + 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, + 0x35, 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, + 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, 0x54, + 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, + 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, + 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, + 0x39, 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, + 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x58, + 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, + 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, + 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, + 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, + 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x5c, + 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, + 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, + 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, + 0x41, 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, + 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, 0x60, + 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, + 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, + 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, + 0x45, 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, + 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x64, + 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, + 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, + 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, + 0x49, 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, + 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x68, + 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, + 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, + 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, + 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, + 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x6c, + 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, + 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, + 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, + 0x51, 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, + 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x70, + 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, + 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, + 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, + 0x55, 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, + 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, 0x74, + 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, + 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, + 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, + 0x59, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, + 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x78, + 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, + 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, + 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, + 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, + 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x7c, + 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, + 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, + 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, + 0x61, 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, + 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x80, + 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, + 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, + 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, + 0x65, 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, + 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x84, + 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, + 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, + 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, + 0x69, 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, + 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x88, + 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, + 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, + 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, + 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, + 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x8c, + 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, + 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, + 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, + 0x71, 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, + 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0x90, + 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, + 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, + 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, + 0x75, 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, + 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0x94, + 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, + 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, + 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, + 0x79, 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, + 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x98, + 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, + 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, + 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, + 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, + 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, 0x9c, + 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, + 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, + 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, + 0x81, 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, + 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0xa0, + 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, + 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, + 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, + 0x85, 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, + 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0xa4, + 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, + 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, + 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, + 0x89, 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, + 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0xa8, + 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, + 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, + 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, + 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, + 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xac, + 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, + 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, + 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, + 0x91, 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, + 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0xb0, + 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, + 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, + 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, + 0x95, 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, + 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0xb4, + 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, + 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, + 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, + 0x99, 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, + 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xb8, + 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, + 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, + 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, + 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, + 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xbc, + 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, + 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, + 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, + 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, + 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xc0, + 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, + 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, + 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, + 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, + 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xc4, + 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, + 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, + 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, + 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, + 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xc8, + 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, + 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, + 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, + 0xad, 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, + 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0xcc, + 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, + 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, + 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, + 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, + 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xd0, + 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, + 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, + 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, + 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, + 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xd4, + 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, + 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, + 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, + 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, + 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, + 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, + 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, + 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, + 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, + 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xe4, + 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, + 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, + 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, + 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x80, 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, + 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, + 0x03, 0x01, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x80, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0xe2, + 0x01, 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, + 0x04, 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, + 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, + 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, + 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, + 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, + 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, + 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, + 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, + 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, + 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, + 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, + 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, + 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, + 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, + 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, + 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, 0x01, + 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x04, + 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, + 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, 0x26, 0x20, + 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, 0x4d, 0x20, + 0x00, 0x00, 0x80, 0x04, 0x03, 0x02, 0x00, 0x00, + 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0x04, 0x02, + 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, + 0x05, 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, + 0x80, 0x04, 0x06, 0x02, 0x00, 0x00, 0x4d, 0x24, + 0x00, 0x00, 0x80, 0x04, 0x07, 0x02, 0x00, 0x00, + 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0x08, 0x02, + 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, + 0x09, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, + 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x4d, 0x28, + 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, 0x00, 0x00, + 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, + 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, + 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, + 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x2c, + 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, + 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, + 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, + 0x11, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, + 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, 0x30, + 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, + 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, + 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, + 0x15, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, + 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, 0x34, + 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, + 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, + 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, + 0x19, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, + 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x38, + 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, + 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, + 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, + 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, + 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x3c, + 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, + 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, + 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, + 0x21, 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, + 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x40, + 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, + 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, + 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, + 0x25, 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, + 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x44, + 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, + 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, + 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, + 0x29, 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, + 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x48, + 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, + 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, + 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, + 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, + 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x4c, + 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, + 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, + 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, + 0x31, 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, + 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x50, + 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, + 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, + 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, + 0x35, 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, + 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, 0x54, + 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, + 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, + 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, + 0x39, 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, + 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x58, + 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, + 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, + 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, + 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, + 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x5c, + 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, + 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, + 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, + 0x41, 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, + 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, 0x60, + 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, + 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, + 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, + 0x45, 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, + 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x64, + 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, + 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, + 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, + 0x49, 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, + 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x68, + 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, + 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, + 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, + 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, + 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x6c, + 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, + 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, + 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, + 0x51, 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, + 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x70, + 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, + 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, + 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, + 0x55, 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, + 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, 0x74, + 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, + 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, + 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, + 0x59, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, + 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x78, + 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, + 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, + 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, + 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, + 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x7c, + 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, + 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, + 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, + 0x61, 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, + 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x80, + 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, + 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, + 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, + 0x65, 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, + 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x84, + 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, + 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, + 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, + 0x69, 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, + 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x88, + 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, + 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, + 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, + 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, + 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x8c, + 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, + 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, + 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, + 0x71, 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, + 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0x90, + 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, + 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, + 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, + 0x75, 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, + 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0x94, + 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, + 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, + 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, + 0x79, 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, + 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x98, + 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, + 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, + 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, + 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, + 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, 0x9c, + 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, + 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, + 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, + 0x81, 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, + 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0xa0, + 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, + 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, + 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, + 0x85, 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, + 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0xa4, + 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, + 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, + 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, + 0x89, 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, + 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0xa8, + 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, + 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, + 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, + 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, + 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xac, + 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, + 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, + 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, + 0x91, 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, + 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0xb0, + 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, + 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, + 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, + 0x95, 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, + 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0xb4, + 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, + 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, + 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, + 0x99, 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, + 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xb8, + 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, + 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, + 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, + 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, + 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xbc, + 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, + 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, + 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, + 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, + 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xc0, + 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, + 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, + 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, + 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, + 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xc4, + 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, + 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, + 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, + 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, + 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xc8, + 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, + 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, + 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, + 0xad, 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, + 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0xcc, + 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, + 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, + 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, + 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, + 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xd0, + 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, + 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, + 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, + 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, + 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xd4, + 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, + 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, + 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, + 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, + 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, + 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, + 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, + 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, + 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, + 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xe4, + 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, + 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, + 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, + 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, 0x00, + 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0xcd, 0x02, + 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, + 0xce, 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x80, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe2, + 0x01, 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, + 0x04, 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, + 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, + 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, + 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, + 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, + 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, + 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, + 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, + 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, + 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, + 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, + 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, + 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, + 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, + 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, + 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, 0x01, + 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x04, + 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, + 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, 0x26, 0x20, + 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, 0x4d, 0x20, + 0x00, 0x00, 0x80, 0x04, 0x03, 0x02, 0x00, 0x00, + 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0x04, 0x02, + 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, + 0x05, 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, + 0x80, 0x04, 0x06, 0x02, 0x00, 0x00, 0x4d, 0x24, + 0x00, 0x00, 0x80, 0x04, 0x07, 0x02, 0x00, 0x00, + 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0x08, 0x02, + 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, + 0x09, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, + 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x4d, 0x28, + 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, 0x00, 0x00, + 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, + 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, + 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, + 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x2c, + 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, + 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, + 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, + 0x11, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, + 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, 0x30, + 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, + 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, + 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, + 0x15, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, + 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, 0x34, + 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, + 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, + 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, + 0x19, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, + 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x38, + 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, + 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, + 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, + 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, + 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x3c, + 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, + 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, + 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, + 0x21, 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, + 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x40, + 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, + 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, + 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, + 0x25, 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, + 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x44, + 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, + 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, + 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, + 0x29, 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, + 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x48, + 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, + 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, + 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, + 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, + 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x4c, + 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, + 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, + 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, + 0x31, 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, + 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x50, + 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, + 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, + 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, + 0x35, 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, + 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, 0x54, + 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, + 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, + 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, + 0x39, 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, + 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x58, + 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, + 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, + 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, + 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, + 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x5c, + 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, + 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, + 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, + 0x41, 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, + 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, 0x60, + 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, + 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, + 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, + 0x45, 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, + 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x64, + 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, + 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, + 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, + 0x49, 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, + 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x68, + 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, + 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, + 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, + 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, + 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x6c, + 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, + 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, + 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, + 0x51, 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, + 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x70, + 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, + 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, + 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, + 0x55, 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, + 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, 0x74, + 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, + 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, + 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, + 0x59, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, + 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x78, + 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, + 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, + 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, + 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, + 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x7c, + 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, + 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, + 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, + 0x61, 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, + 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x80, + 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, + 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, + 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, + 0x65, 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, + 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x84, + 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, + 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, + 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, + 0x69, 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, + 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x88, + 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, + 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, + 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, + 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, + 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x8c, + 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, + 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, + 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, + 0x71, 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, + 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0x90, + 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, + 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, + 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, + 0x75, 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, + 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0x94, + 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, + 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, + 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, + 0x79, 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, + 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x98, + 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, + 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, + 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, + 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, + 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, 0x9c, + 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, + 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, + 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, + 0x81, 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, + 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0xa0, + 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, + 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, + 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, + 0x85, 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, + 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0xa4, + 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, + 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, + 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, + 0x89, 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, + 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0xa8, + 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, + 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, + 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, + 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, + 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xac, + 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, + 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, + 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, + 0x91, 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, + 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0xb0, + 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, + 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, + 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, + 0x95, 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, + 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0xb4, + 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, + 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, + 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, + 0x99, 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, + 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xb8, + 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, + 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, + 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, + 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, + 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xbc, + 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, + 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, + 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, + 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, + 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xc0, + 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, + 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, + 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, + 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, + 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xc4, + 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, + 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, + 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, + 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, + 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xc8, + 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, + 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, + 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, + 0xad, 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, + 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0xcc, + 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, + 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, + 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, + 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, + 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xd0, + 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, + 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, + 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, + 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, + 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xd4, + 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, + 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, + 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, + 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, + 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, + 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, + 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, + 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, + 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, + 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xe4, + 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, + 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, + 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, + 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, 0x00, + 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0xcd, 0x02, + 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, + 0xce, 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x80, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x79, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, + 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x7d, 0xbe, 0x7e, + 0xbe, 0x7f, 0xbe, 0x80, 0xbe, 0x81, 0xbe, 0x82, + 0xbe, 0x83, 0xbe, 0x84, 0xbe, 0x85, 0xbe, 0x86, + 0xbe, 0x87, 0xbe, 0x88, 0x26, 0x0c, 0x00, 0x4d, + 0x51, 0x01, 0x00, 0x00, 0x04, 0xcf, 0x02, 0x00, + 0x00, 0x04, 0xd0, 0x02, 0x00, 0x00, 0x04, 0xd1, + 0x02, 0x00, 0x00, 0x04, 0xd2, 0x02, 0x00, 0x00, + 0x04, 0xd3, 0x02, 0x00, 0x00, 0x04, 0xd4, 0x02, + 0x00, 0x00, 0x04, 0xd5, 0x02, 0x00, 0x00, 0x04, + 0xd6, 0x02, 0x00, 0x00, 0x04, 0xd7, 0x02, 0x00, + 0x00, 0x04, 0xd8, 0x02, 0x00, 0x00, 0x04, 0xd9, + 0x02, 0x00, 0x00, 0x04, 0xda, 0x02, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xcf, 0x02, 0x00, 0x00, 0x04, 0xd0, 0x02, + 0x00, 0x00, 0x04, 0xd1, 0x02, 0x00, 0x00, 0x04, + 0xd2, 0x02, 0x00, 0x00, 0x04, 0xd3, 0x02, 0x00, + 0x00, 0x04, 0xd4, 0x02, 0x00, 0x00, 0x04, 0xd5, + 0x02, 0x00, 0x00, 0x04, 0xd6, 0x02, 0x00, 0x00, + 0x04, 0xd7, 0x02, 0x00, 0x00, 0x04, 0xd8, 0x02, + 0x00, 0x00, 0x04, 0xd9, 0x02, 0x00, 0x00, 0x04, + 0xda, 0x02, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x14, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xdb, 0x02, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0xdb, + 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xdb, 0x02, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x79, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, + 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x41, 0x00, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, + 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xdc, 0x02, 0x00, 0x00, 0x04, 0xdd, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x51, 0x01, 0x00, + 0x00, 0x04, 0xdc, 0x02, 0x00, 0x00, 0x04, 0xdd, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xdc, 0x02, 0x00, 0x00, + 0x04, 0xdd, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x79, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, + 0x7e, 0x01, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x02, 0x00, 0x00, 0x4d, 0xdf, + 0x02, 0x00, 0x00, 0x0b, 0x04, 0xe0, 0x02, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe1, 0x02, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0xe2, 0x02, 0x00, 0x00, + 0x4d, 0xe3, 0x02, 0x00, 0x00, 0x04, 0xe4, 0x02, + 0x00, 0x00, 0x4d, 0xe5, 0x02, 0x00, 0x00, 0x4d, + 0xe6, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xe7, 0x02, + 0x00, 0x00, 0x4d, 0xe3, 0x02, 0x00, 0x00, 0x04, + 0xe8, 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x02, 0x00, + 0x00, 0x4d, 0xe9, 0x02, 0x00, 0x00, 0x0b, 0x04, + 0xea, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x02, 0x00, + 0x00, 0x04, 0xeb, 0x02, 0x00, 0x00, 0x4d, 0xe5, + 0x02, 0x00, 0x00, 0x4d, 0xec, 0x02, 0x00, 0x00, + 0x4d, 0xed, 0x02, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0xee, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x02, 0x00, + 0x00, 0x04, 0xef, 0x02, 0x00, 0x00, 0x4d, 0xf0, + 0x02, 0x00, 0x00, 0x04, 0xf1, 0x02, 0x00, 0x00, + 0x4d, 0xf2, 0x02, 0x00, 0x00, 0x04, 0xf3, 0x02, + 0x00, 0x00, 0x4d, 0xf4, 0x02, 0x00, 0x00, 0x04, + 0xf5, 0x02, 0x00, 0x00, 0x4d, 0xf6, 0x02, 0x00, + 0x00, 0x04, 0xf7, 0x02, 0x00, 0x00, 0x4d, 0xf8, + 0x02, 0x00, 0x00, 0x04, 0xf9, 0x02, 0x00, 0x00, + 0x4d, 0xfa, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x02, + 0x00, 0x00, 0x4d, 0xfb, 0x02, 0x00, 0x00, 0x0b, + 0x04, 0xfc, 0x02, 0x00, 0x00, 0x4d, 0xfd, 0x02, + 0x00, 0x00, 0x04, 0xfe, 0x02, 0x00, 0x00, 0x4d, + 0xff, 0x02, 0x00, 0x00, 0x04, 0x00, 0x03, 0x00, + 0x00, 0x4d, 0x01, 0x03, 0x00, 0x00, 0x04, 0x02, + 0x03, 0x00, 0x00, 0x4d, 0x03, 0x03, 0x00, 0x00, + 0x04, 0x04, 0x03, 0x00, 0x00, 0x4d, 0x05, 0x03, + 0x00, 0x00, 0x04, 0x06, 0x03, 0x00, 0x00, 0x4d, + 0x07, 0x03, 0x00, 0x00, 0x04, 0x08, 0x03, 0x00, + 0x00, 0x4d, 0x09, 0x03, 0x00, 0x00, 0x04, 0x0a, + 0x03, 0x00, 0x00, 0x4d, 0x0b, 0x03, 0x00, 0x00, + 0x04, 0x0c, 0x03, 0x00, 0x00, 0x4d, 0x0d, 0x03, + 0x00, 0x00, 0x04, 0x0e, 0x03, 0x00, 0x00, 0x4d, + 0x0f, 0x03, 0x00, 0x00, 0x04, 0x10, 0x03, 0x00, + 0x00, 0x4d, 0x11, 0x03, 0x00, 0x00, 0x04, 0x12, + 0x03, 0x00, 0x00, 0x4d, 0x13, 0x03, 0x00, 0x00, + 0x04, 0x14, 0x03, 0x00, 0x00, 0x4d, 0x15, 0x03, + 0x00, 0x00, 0x04, 0x16, 0x03, 0x00, 0x00, 0x4d, + 0x17, 0x03, 0x00, 0x00, 0x04, 0x18, 0x03, 0x00, + 0x00, 0x4d, 0x19, 0x03, 0x00, 0x00, 0x04, 0x1a, + 0x03, 0x00, 0x00, 0x4d, 0x1b, 0x03, 0x00, 0x00, + 0x04, 0x1c, 0x03, 0x00, 0x00, 0x4d, 0x1d, 0x03, + 0x00, 0x00, 0x04, 0x1e, 0x03, 0x00, 0x00, 0x4d, + 0x1f, 0x03, 0x00, 0x00, 0x04, 0x20, 0x03, 0x00, + 0x00, 0x4d, 0x21, 0x03, 0x00, 0x00, 0x04, 0x22, + 0x03, 0x00, 0x00, 0x4d, 0x23, 0x03, 0x00, 0x00, + 0x04, 0x24, 0x03, 0x00, 0x00, 0x4d, 0x25, 0x03, + 0x00, 0x00, 0x04, 0x26, 0x03, 0x00, 0x00, 0x4d, + 0x27, 0x03, 0x00, 0x00, 0x4d, 0x28, 0x03, 0x00, + 0x00, 0x4d, 0x45, 0x00, 0x00, 0x00, 0x24, 0x01, + 0x00, 0xcc, 0x28, 0xd2, 0x0c, 0x01, 0x00, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, + 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_gu_size = 25193; + +const uint8_t intl_gu[25193] = { + 0x01, 0xe4, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x67, 0x75, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x0e, + 0x7b, 0x31, 0x7d, 0x20, 0x7b, 0x30, 0x7d, 0x0a, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, 0x65, + 0x64, 0x69, 0x75, 0x6d, 0x08, 0x66, 0x75, 0x6c, + 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x02, 0x64, + 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, 0x06, 0x45, + 0x20, 0x64, 0x04, 0x45, 0x64, 0x10, 0x45, 0x20, + 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x06, 0x45, + 0x68, 0x6d, 0x0e, 0x45, 0x20, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x06, 0x45, 0x48, 0x6d, 0x16, 0x45, + 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x61, 0x08, 0x45, 0x68, 0x6d, 0x73, 0x14, + 0x45, 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x08, 0x45, 0x48, 0x6d, 0x73, 0x06, + 0x47, 0x20, 0x79, 0x04, 0x47, 0x79, 0x10, 0x4d, + 0x4d, 0x4d, 0x2c, 0x20, 0x47, 0x20, 0x79, 0x0a, + 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x14, 0x64, 0x20, + 0x4d, 0x4d, 0x4d, 0x2c, 0x20, 0x47, 0x20, 0x79, + 0x0c, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x1a, + 0x45, 0x2c, 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, + 0x2c, 0x20, 0x47, 0x20, 0x79, 0x0e, 0x47, 0x79, + 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x06, 0x68, 0x20, + 0x61, 0x02, 0x68, 0x04, 0x48, 0x48, 0x02, 0x48, + 0x0c, 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x04, + 0x68, 0x6d, 0x0a, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x04, 0x48, 0x6d, 0x12, 0x68, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x61, 0x06, 0x68, 0x6d, + 0x73, 0x10, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x06, 0x48, 0x6d, 0x73, 0x16, 0x68, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, + 0x20, 0x76, 0x08, 0x68, 0x6d, 0x73, 0x76, 0x14, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x76, 0x08, 0x48, 0x6d, 0x73, 0x76, 0x10, + 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x20, 0x76, + 0x06, 0x68, 0x6d, 0x76, 0x0e, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x20, 0x76, 0x06, 0x48, 0x6d, 0x76, + 0x02, 0x4c, 0x02, 0x4d, 0x06, 0x64, 0x2f, 0x4d, + 0x04, 0x4d, 0x64, 0x0c, 0x45, 0x2c, 0x20, 0x64, + 0x2f, 0x4d, 0x06, 0x4d, 0x45, 0x64, 0x0a, 0x64, + 0x64, 0x2d, 0x4d, 0x4d, 0x08, 0x4d, 0x4d, 0x64, + 0x64, 0x06, 0x4c, 0x4c, 0x4c, 0x06, 0x4d, 0x4d, + 0x4d, 0x0a, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x08, + 0x4d, 0x4d, 0x4d, 0x64, 0x10, 0x45, 0x2c, 0x20, + 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, + 0x4d, 0x45, 0x64, 0x0c, 0x64, 0x20, 0x4d, 0x4d, + 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, + 0x0a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x04, 0x6d, + 0x73, 0x02, 0x79, 0x06, 0x4d, 0x2f, 0x79, 0x04, + 0x79, 0x4d, 0x0a, 0x64, 0x2f, 0x4d, 0x2f, 0x79, + 0x06, 0x79, 0x4d, 0x64, 0x10, 0x45, 0x2c, 0x20, + 0x64, 0x2f, 0x4d, 0x2f, 0x79, 0x08, 0x79, 0x4d, + 0x45, 0x64, 0x08, 0x4d, 0x4d, 0x2d, 0x79, 0x06, + 0x79, 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x20, + 0x79, 0x08, 0x79, 0x4d, 0x4d, 0x4d, 0x10, 0x64, + 0x20, 0x4d, 0x4d, 0x4d, 0x2c, 0x20, 0x79, 0x0a, + 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x16, 0x45, 0x2c, + 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x2c, 0x20, + 0x79, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, + 0x0c, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0a, + 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, 0x79, 0x20, + 0x51, 0x51, 0x51, 0x08, 0x79, 0x51, 0x51, 0x51, + 0x0c, 0x79, 0x20, 0x51, 0x51, 0x51, 0x51, 0x0a, + 0x79, 0x51, 0x51, 0x51, 0x51, 0x20, 0x61, 0x76, + 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x1e, 0x45, + 0x45, 0x45, 0x45, 0x2c, 0x20, 0x64, 0x20, 0x4d, + 0x4d, 0x4d, 0x4d, 0x2c, 0x20, 0x79, 0x14, 0x79, + 0x4d, 0x4d, 0x4d, 0x4d, 0x45, 0x45, 0x45, 0x45, + 0x64, 0x12, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, + 0x2c, 0x20, 0x79, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, + 0x4d, 0x64, 0x0c, 0x64, 0x2f, 0x4d, 0x2f, 0x79, + 0x79, 0x16, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x73, 0x1e, 0x68, 0x68, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, + 0x20, 0x7a, 0x7a, 0x7a, 0x7a, 0x12, 0x68, 0x6d, + 0x6d, 0x73, 0x73, 0x7a, 0x7a, 0x7a, 0x7a, 0x18, + 0x68, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x61, 0x20, 0x7a, 0x08, 0x68, 0x6d, 0x73, + 0x7a, 0x14, 0x68, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x20, 0x61, 0x0e, 0x68, 0x68, 0x3a, + 0x6d, 0x6d, 0x20, 0x61, 0x16, 0x74, 0x69, 0x6d, + 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, + 0x0e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, + 0x05, 0x9c, 0x0a, 0xbe, 0x0a, 0x05, 0xab, 0x0a, + 0xc7, 0x0a, 0x05, 0xae, 0x0a, 0xbe, 0x0a, 0x03, + 0x8f, 0x0a, 0x05, 0xae, 0x0a, 0xc7, 0x0a, 0x05, + 0x9c, 0x0a, 0xc2, 0x0a, 0x05, 0x9c, 0x0a, 0xc1, + 0x0a, 0x03, 0x91, 0x0a, 0x03, 0xb8, 0x0a, 0x03, + 0xa8, 0x0a, 0x05, 0xa1, 0x0a, 0xbf, 0x0a, 0x0c, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0d, 0x9c, + 0x0a, 0xbe, 0x0a, 0xa8, 0x0a, 0xcd, 0x0a, 0xaf, + 0x0a, 0xc1, 0x0a, 0x0d, 0xab, 0x0a, 0xc7, 0x0a, + 0xac, 0x0a, 0xcd, 0x0a, 0xb0, 0x0a, 0xc1, 0x0a, + 0x0b, 0xae, 0x0a, 0xbe, 0x0a, 0xb0, 0x0a, 0xcd, + 0x0a, 0x9a, 0x0a, 0x0d, 0x8f, 0x0a, 0xaa, 0x0a, + 0xcd, 0x0a, 0xb0, 0x0a, 0xbf, 0x0a, 0xb2, 0x0a, + 0x07, 0x9c, 0x0a, 0xc2, 0x0a, 0xa8, 0x0a, 0x0b, + 0x9c, 0x0a, 0xc1, 0x0a, 0xb2, 0x0a, 0xbe, 0x0a, + 0x88, 0x0a, 0x0b, 0x91, 0x0a, 0x97, 0x0a, 0xb8, + 0x0a, 0xcd, 0x0a, 0x9f, 0x0a, 0x0b, 0xb8, 0x0a, + 0xaa, 0x0a, 0xcd, 0x0a, 0x9f, 0x0a, 0xc7, 0x0a, + 0x0b, 0x91, 0x0a, 0x95, 0x0a, 0xcd, 0x0a, 0x9f, + 0x0a, 0xcb, 0x0a, 0x07, 0xa8, 0x0a, 0xb5, 0x0a, + 0xc7, 0x0a, 0x09, 0xa1, 0x0a, 0xbf, 0x0a, 0xb8, + 0x0a, 0xc7, 0x0a, 0x13, 0x9c, 0x0a, 0xbe, 0x0a, + 0xa8, 0x0a, 0xcd, 0x0a, 0xaf, 0x0a, 0xc1, 0x0a, + 0x86, 0x0a, 0xb0, 0x0a, 0xc0, 0x0a, 0x13, 0xab, + 0x0a, 0xc7, 0x0a, 0xac, 0x0a, 0xcd, 0x0a, 0xb0, + 0x0a, 0xc1, 0x0a, 0x86, 0x0a, 0xb0, 0x0a, 0xc0, + 0x0a, 0x13, 0xb8, 0x0a, 0xaa, 0x0a, 0xcd, 0x0a, + 0x9f, 0x0a, 0xc7, 0x0a, 0xae, 0x0a, 0xcd, 0x0a, + 0xac, 0x0a, 0xb0, 0x0a, 0x0f, 0x91, 0x0a, 0x95, + 0x0a, 0xcd, 0x0a, 0x9f, 0x0a, 0xcb, 0x0a, 0xac, + 0x0a, 0xb0, 0x0a, 0x0f, 0xa8, 0x0a, 0xb5, 0x0a, + 0xc7, 0x0a, 0xae, 0x0a, 0xcd, 0x0a, 0xac, 0x0a, + 0xb0, 0x0a, 0x11, 0xa1, 0x0a, 0xbf, 0x0a, 0xb8, + 0x0a, 0xc7, 0x0a, 0xae, 0x0a, 0xcd, 0x0a, 0xac, + 0x0a, 0xb0, 0x0a, 0x0c, 0x6d, 0x6f, 0x6e, 0x74, + 0x68, 0x73, 0x03, 0xb0, 0x0a, 0x05, 0xb8, 0x0a, + 0xcb, 0x0a, 0x05, 0xae, 0x0a, 0x82, 0x0a, 0x05, + 0xac, 0x0a, 0xc1, 0x0a, 0x05, 0x97, 0x0a, 0xc1, + 0x0a, 0x05, 0xb6, 0x0a, 0xc1, 0x0a, 0x03, 0xb6, + 0x0a, 0x07, 0xb0, 0x0a, 0xb5, 0x0a, 0xbf, 0x0a, + 0x07, 0xb8, 0x0a, 0xcb, 0x0a, 0xae, 0x0a, 0x09, + 0xae, 0x0a, 0x82, 0x0a, 0x97, 0x0a, 0xb3, 0x0a, + 0x07, 0xac, 0x0a, 0xc1, 0x0a, 0xa7, 0x0a, 0x09, + 0x97, 0x0a, 0xc1, 0x0a, 0xb0, 0x0a, 0xc1, 0x0a, + 0x0b, 0xb6, 0x0a, 0xc1, 0x0a, 0x95, 0x0a, 0xcd, + 0x0a, 0xb0, 0x0a, 0x07, 0xb6, 0x0a, 0xa8, 0x0a, + 0xbf, 0x0a, 0x0d, 0xb0, 0x0a, 0xb5, 0x0a, 0xbf, + 0x0a, 0xb5, 0x0a, 0xbe, 0x0a, 0xb0, 0x0a, 0x0d, + 0xb8, 0x0a, 0xcb, 0x0a, 0xae, 0x0a, 0xb5, 0x0a, + 0xbe, 0x0a, 0xb0, 0x0a, 0x0f, 0xae, 0x0a, 0x82, + 0x0a, 0x97, 0x0a, 0xb3, 0x0a, 0xb5, 0x0a, 0xbe, + 0x0a, 0xb0, 0x0a, 0x0d, 0xac, 0x0a, 0xc1, 0x0a, + 0xa7, 0x0a, 0xb5, 0x0a, 0xbe, 0x0a, 0xb0, 0x0a, + 0x0f, 0x97, 0x0a, 0xc1, 0x0a, 0xb0, 0x0a, 0xc1, + 0x0a, 0xb5, 0x0a, 0xbe, 0x0a, 0xb0, 0x0a, 0x11, + 0xb6, 0x0a, 0xc1, 0x0a, 0x95, 0x0a, 0xcd, 0x0a, + 0xb0, 0x0a, 0xb5, 0x0a, 0xbe, 0x0a, 0xb0, 0x0a, + 0x0d, 0xb6, 0x0a, 0xa8, 0x0a, 0xbf, 0x0a, 0xb5, + 0x0a, 0xbe, 0x0a, 0xb0, 0x0a, 0x08, 0x64, 0x61, + 0x79, 0x73, 0x04, 0x42, 0x45, 0x08, 0x65, 0x72, + 0x61, 0x73, 0x04, 0x41, 0x4d, 0x04, 0x61, 0x6d, + 0x04, 0x50, 0x4d, 0x04, 0x70, 0x6d, 0x14, 0x64, + 0x61, 0x79, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, + 0x73, 0x06, 0x4d, 0x30, 0x31, 0x06, 0x4d, 0x30, + 0x32, 0x06, 0x4d, 0x30, 0x33, 0x06, 0x4d, 0x30, + 0x34, 0x06, 0x4d, 0x30, 0x35, 0x06, 0x4d, 0x30, + 0x36, 0x06, 0x4d, 0x30, 0x37, 0x06, 0x4d, 0x30, + 0x38, 0x06, 0x4d, 0x30, 0x39, 0x06, 0x4d, 0x31, + 0x30, 0x06, 0x4d, 0x31, 0x31, 0x06, 0x4d, 0x31, + 0x32, 0x08, 0x54, 0x6f, 0x75, 0x74, 0x08, 0x42, + 0x61, 0x62, 0x61, 0x0a, 0x48, 0x61, 0x74, 0x6f, + 0x72, 0x0a, 0x4b, 0x69, 0x61, 0x68, 0x6b, 0x08, + 0x54, 0x6f, 0x62, 0x61, 0x0c, 0x41, 0x6d, 0x73, + 0x68, 0x69, 0x72, 0x10, 0x42, 0x61, 0x72, 0x61, + 0x6d, 0x68, 0x61, 0x74, 0x12, 0x42, 0x61, 0x72, + 0x61, 0x6d, 0x6f, 0x75, 0x64, 0x61, 0x0e, 0x42, + 0x61, 0x73, 0x68, 0x61, 0x6e, 0x73, 0x0a, 0x50, + 0x61, 0x6f, 0x6e, 0x61, 0x08, 0x45, 0x70, 0x65, + 0x70, 0x0a, 0x4d, 0x65, 0x73, 0x72, 0x61, 0x0a, + 0x4e, 0x61, 0x73, 0x69, 0x65, 0x08, 0x45, 0x52, + 0x41, 0x30, 0x08, 0x45, 0x52, 0x41, 0x31, 0x10, + 0x4d, 0x65, 0x73, 0x6b, 0x65, 0x72, 0x65, 0x6d, + 0x0c, 0x54, 0x65, 0x6b, 0x65, 0x6d, 0x74, 0x0a, + 0x48, 0x65, 0x64, 0x61, 0x72, 0x0c, 0x54, 0x61, + 0x68, 0x73, 0x61, 0x73, 0x06, 0x54, 0x65, 0x72, + 0x0e, 0x59, 0x65, 0x6b, 0x61, 0x74, 0x69, 0x74, + 0x0e, 0x4d, 0x65, 0x67, 0x61, 0x62, 0x69, 0x74, + 0x0c, 0x4d, 0x69, 0x61, 0x7a, 0x69, 0x61, 0x0c, + 0x47, 0x65, 0x6e, 0x62, 0x6f, 0x74, 0x08, 0x53, + 0x65, 0x6e, 0x65, 0x0a, 0x48, 0x61, 0x6d, 0x6c, + 0x65, 0x0e, 0x4e, 0x65, 0x68, 0x61, 0x73, 0x73, + 0x65, 0x0e, 0x50, 0x61, 0x67, 0x75, 0x6d, 0x65, + 0x6e, 0x0d, 0x87, 0x0a, 0x20, 0x00, 0xb8, 0x0a, + 0x20, 0x00, 0xaa, 0x0a, 0xc1, 0x0a, 0x05, 0x87, + 0x0a, 0xb8, 0x0a, 0x11, 0xb8, 0x0a, 0xbe, 0x0a, + 0x2e, 0x00, 0xaf, 0x0a, 0xc1, 0x0a, 0x2e, 0x00, + 0xaa, 0x0a, 0x2e, 0x00, 0x0d, 0xb8, 0x0a, 0xbe, + 0x0a, 0x2e, 0x00, 0xaf, 0x0a, 0xc1, 0x0a, 0x2e, + 0x00, 0x15, 0x88, 0x0a, 0x2e, 0x00, 0xb8, 0x0a, + 0x2e, 0x00, 0xaa, 0x0a, 0xc2, 0x0a, 0xb0, 0x0a, + 0xcd, 0x0a, 0xb5, 0x0a, 0xc7, 0x0a, 0x09, 0x88, + 0x0a, 0x2e, 0x00, 0xb8, 0x0a, 0x2e, 0x00, 0x1b, + 0x88, 0x0a, 0xb8, 0x0a, 0xb5, 0x0a, 0xc0, 0x0a, + 0xb8, 0x0a, 0xa8, 0x0a, 0x20, 0x00, 0xaa, 0x0a, + 0xc2, 0x0a, 0xb0, 0x0a, 0xcd, 0x0a, 0xb5, 0x0a, + 0xc7, 0x0a, 0x0d, 0x87, 0x0a, 0xb8, 0x0a, 0xb5, + 0x0a, 0xc0, 0x0a, 0xb8, 0x0a, 0xa8, 0x0a, 0x23, + 0xb8, 0x0a, 0xbe, 0x0a, 0xae, 0x0a, 0xbe, 0x0a, + 0xa8, 0x0a, 0xcd, 0x0a, 0xaf, 0x0a, 0x20, 0x00, + 0xaf, 0x0a, 0xc1, 0x0a, 0x97, 0x0a, 0x20, 0x00, + 0xaa, 0x0a, 0xb9, 0x0a, 0xc7, 0x0a, 0xb2, 0x0a, + 0xbe, 0x0a, 0x17, 0xb8, 0x0a, 0xbe, 0x0a, 0xae, + 0x0a, 0xbe, 0x0a, 0xa8, 0x0a, 0xcd, 0x0a, 0xaf, + 0x0a, 0x20, 0x00, 0xaf, 0x0a, 0xc1, 0x0a, 0x97, + 0x0a, 0x0c, 0x54, 0x69, 0x73, 0x68, 0x72, 0x69, + 0x0e, 0x48, 0x65, 0x73, 0x68, 0x76, 0x61, 0x6e, + 0x0c, 0x4b, 0x69, 0x73, 0x6c, 0x65, 0x76, 0x0a, + 0x54, 0x65, 0x76, 0x65, 0x74, 0x0c, 0x53, 0x68, + 0x65, 0x76, 0x61, 0x74, 0x0c, 0x41, 0x64, 0x61, + 0x72, 0x20, 0x49, 0x08, 0x41, 0x64, 0x61, 0x72, + 0x0a, 0x4e, 0x69, 0x73, 0x61, 0x6e, 0x08, 0x49, + 0x79, 0x61, 0x72, 0x0a, 0x53, 0x69, 0x76, 0x61, + 0x6e, 0x0a, 0x54, 0x61, 0x6d, 0x75, 0x7a, 0x04, + 0x41, 0x76, 0x08, 0x45, 0x6c, 0x75, 0x6c, 0x0e, + 0x41, 0x64, 0x61, 0x72, 0x20, 0x49, 0x49, 0x0e, + 0x43, 0x68, 0x61, 0x69, 0x74, 0x72, 0x61, 0x10, + 0x56, 0x61, 0x69, 0x73, 0x61, 0x6b, 0x68, 0x61, + 0x10, 0x4a, 0x79, 0x61, 0x69, 0x73, 0x74, 0x68, + 0x61, 0x0c, 0x41, 0x73, 0x61, 0x64, 0x68, 0x61, + 0x0e, 0x53, 0x72, 0x61, 0x76, 0x61, 0x6e, 0x61, + 0x0c, 0x42, 0x68, 0x61, 0x64, 0x72, 0x61, 0x0c, + 0x41, 0x73, 0x76, 0x69, 0x6e, 0x61, 0x0e, 0x4b, + 0x61, 0x72, 0x74, 0x69, 0x6b, 0x61, 0x14, 0x41, + 0x67, 0x72, 0x61, 0x68, 0x61, 0x79, 0x61, 0x6e, + 0x61, 0x0a, 0x50, 0x61, 0x75, 0x73, 0x61, 0x0a, + 0x4d, 0x61, 0x67, 0x68, 0x61, 0x10, 0x50, 0x68, + 0x61, 0x6c, 0x67, 0x75, 0x6e, 0x61, 0x08, 0x53, + 0x61, 0x6b, 0x61, 0x08, 0x4d, 0x75, 0x68, 0x2e, + 0x08, 0x53, 0x61, 0x66, 0x2e, 0x0c, 0x52, 0x61, + 0x62, 0x2e, 0x20, 0x49, 0x0e, 0x52, 0x61, 0x62, + 0x2e, 0x20, 0x49, 0x49, 0x0c, 0x4a, 0x75, 0x6d, + 0x2e, 0x20, 0x49, 0x0e, 0x4a, 0x75, 0x6d, 0x2e, + 0x20, 0x49, 0x49, 0x08, 0x52, 0x61, 0x6a, 0x2e, + 0x08, 0x53, 0x68, 0x61, 0x2e, 0x08, 0x52, 0x61, + 0x6d, 0x2e, 0x0a, 0x53, 0x68, 0x61, 0x77, 0x2e, + 0x11, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, + 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x51, 0x00, 0x2e, + 0x00, 0x11, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, + 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x48, 0x00, + 0x2e, 0x00, 0x10, 0x4d, 0x75, 0x68, 0x61, 0x72, + 0x72, 0x61, 0x6d, 0x0a, 0x53, 0x61, 0x66, 0x61, + 0x72, 0x0f, 0x52, 0x00, 0x61, 0x00, 0x62, 0x00, + 0x69, 0x00, 0xbb, 0x02, 0x20, 0x00, 0x49, 0x00, + 0x11, 0x52, 0x00, 0x61, 0x00, 0x62, 0x00, 0x69, + 0x00, 0xbb, 0x02, 0x20, 0x00, 0x49, 0x00, 0x49, + 0x00, 0x10, 0x4a, 0x75, 0x6d, 0x61, 0x64, 0x61, + 0x20, 0x49, 0x12, 0x4a, 0x75, 0x6d, 0x61, 0x64, + 0x61, 0x20, 0x49, 0x49, 0x0a, 0x52, 0x61, 0x6a, + 0x61, 0x62, 0x0f, 0x53, 0x00, 0x68, 0x00, 0x61, + 0x00, 0xbb, 0x02, 0x62, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x0e, 0x52, 0x61, 0x6d, 0x61, 0x64, 0x61, + 0x6e, 0x0e, 0x53, 0x68, 0x61, 0x77, 0x77, 0x61, + 0x6c, 0x19, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, + 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x51, 0x00, + 0x69, 0x00, 0xbb, 0x02, 0x64, 0x00, 0x61, 0x00, + 0x68, 0x00, 0x19, 0x44, 0x00, 0x68, 0x00, 0x75, + 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x48, + 0x00, 0x69, 0x00, 0x6a, 0x00, 0x6a, 0x00, 0x61, + 0x00, 0x68, 0x00, 0x04, 0x41, 0x48, 0x1f, 0x54, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x36, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x36, 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x75, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1f, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x1d, 0x57, 0x00, 0x61, 0x00, 0x64, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x52, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x1d, 0x59, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1f, 0x4a, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, + 0x6b, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x2b, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x2d, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x2d, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x2a, 0x4a, 0x69, 0x6e, 0x67, + 0x6f, 0x2d, 0x6b, 0x65, 0x69, 0x75, 0x6e, 0x20, + 0x28, 0x37, 0x36, 0x37, 0x2d, 0x37, 0x37, 0x30, + 0x29, 0x1d, 0x48, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x1f, 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, 0x64, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x4d, 0x01, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, + 0x4a, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x61, + 0x00, 0x6a, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1f, 0x53, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x20, + 0x54, 0x65, 0x6e, 0x2d, 0x61, 0x6e, 0x20, 0x28, + 0x38, 0x35, 0x37, 0x2d, 0x38, 0x35, 0x39, 0x29, + 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, + 0x47, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1d, 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, + 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x34, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1b, 0x4c, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1d, 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x41, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, 0x4a, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x4a, 0x00, 0x69, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x29, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x27, 0x4a, 0x00, 0x69, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x45, 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4c, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x61, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x25, 0x4a, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x24, 0x54, 0x65, 0x6e, 0x2d, + 0x65, 0x69, 0x20, 0x28, 0x31, 0x31, 0x31, 0x30, + 0x2d, 0x31, 0x31, 0x31, 0x33, 0x29, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x44, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x45, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x6a, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x48, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x27, 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, + 0x4c, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x6d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x4a, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x59, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x75, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x29, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x21, 0x4a, 0x00, 0x4d, 0x01, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x27, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x75, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x29, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x74, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x29, 0x52, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x45, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4c, + 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x61, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x48, + 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x27, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x4c, + 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x45, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x27, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4a, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x27, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x61, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x41, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x4d, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x02, 0x54, 0x02, 0x53, 0x0a, 0x4d, 0x65, + 0x69, 0x6a, 0x69, 0x0d, 0x54, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x0b, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x0c, 0x48, 0x65, 0x69, 0x73, + 0x65, 0x69, 0x12, 0x46, 0x61, 0x72, 0x76, 0x61, + 0x72, 0x64, 0x69, 0x6e, 0x16, 0x4f, 0x72, 0x64, + 0x69, 0x62, 0x65, 0x68, 0x65, 0x73, 0x68, 0x74, + 0x0e, 0x4b, 0x68, 0x6f, 0x72, 0x64, 0x61, 0x64, + 0x06, 0x54, 0x69, 0x72, 0x0c, 0x4d, 0x6f, 0x72, + 0x64, 0x61, 0x64, 0x12, 0x53, 0x68, 0x61, 0x68, + 0x72, 0x69, 0x76, 0x61, 0x72, 0x08, 0x4d, 0x65, + 0x68, 0x72, 0x08, 0x41, 0x62, 0x61, 0x6e, 0x08, + 0x41, 0x7a, 0x61, 0x72, 0x06, 0x44, 0x65, 0x79, + 0x0c, 0x42, 0x61, 0x68, 0x6d, 0x61, 0x6e, 0x0c, + 0x45, 0x73, 0x66, 0x61, 0x6e, 0x64, 0x04, 0x41, + 0x50, 0x1a, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, + 0x20, 0x52, 0x2e, 0x4f, 0x2e, 0x43, 0x2e, 0x0c, + 0x52, 0x2e, 0x4f, 0x2e, 0x43, 0x2e, 0x12, 0x63, + 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, 0x73, + 0x08, 0x64, 0x61, 0x74, 0x65, 0x08, 0x6c, 0x61, + 0x74, 0x6e, 0x04, 0x6e, 0x75, 0x10, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x50, + 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x26, 0x7b, + 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0x1e, 0x6e, 0x65, 0x67, 0x61, 0x74, + 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, + 0x72, 0x6e, 0x0e, 0x64, 0x65, 0x63, 0x69, 0x6d, + 0x61, 0x6c, 0x24, 0x7b, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x63, 0x79, 0x7d, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x3a, 0x7b, 0x6d, + 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x7d, 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x79, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0x10, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x63, 0x79, 0x2a, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x7b, 0x70, 0x65, + 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, + 0x6e, 0x7d, 0x40, 0x7b, 0x6d, 0x69, 0x6e, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x7b, 0x70, + 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, + 0x67, 0x6e, 0x7d, 0x0e, 0x70, 0x65, 0x72, 0x63, + 0x65, 0x6e, 0x74, 0x24, 0x73, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x61, 0x72, 0x79, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x53, 0x69, 0x7a, 0x65, 0x10, 0x70, + 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x02, + 0x2e, 0x02, 0x2c, 0x0a, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x06, 0x4e, 0x61, 0x4e, 0x06, 0x6e, 0x61, + 0x6e, 0x02, 0x2b, 0x10, 0x70, 0x6c, 0x75, 0x73, + 0x53, 0x69, 0x67, 0x6e, 0x02, 0x2d, 0x12, 0x6d, + 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x02, 0x25, 0x16, 0x70, 0x65, 0x72, 0x63, 0x65, + 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x03, 0x1e, + 0x22, 0x10, 0x69, 0x6e, 0x66, 0x69, 0x6e, 0x69, + 0x74, 0x79, 0x08, 0x67, 0x75, 0x6a, 0x72, 0x0e, + 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x04, + 0x41, 0x24, 0x06, 0x41, 0x55, 0x44, 0x04, 0x52, + 0x24, 0x06, 0x42, 0x52, 0x4c, 0x06, 0x43, 0x41, + 0x24, 0x06, 0x43, 0x41, 0x44, 0x06, 0x43, 0x4e, + 0xa5, 0x06, 0x43, 0x4e, 0x59, 0x03, 0xac, 0x20, + 0x06, 0x45, 0x55, 0x52, 0x02, 0xa3, 0x06, 0x47, + 0x42, 0x50, 0x06, 0x48, 0x4b, 0x24, 0x06, 0x48, + 0x4b, 0x44, 0x03, 0xaa, 0x20, 0x06, 0x49, 0x4c, + 0x53, 0x03, 0xb9, 0x20, 0x06, 0x49, 0x4e, 0x52, + 0x06, 0x4a, 0x50, 0xa5, 0x06, 0x4a, 0x50, 0x59, + 0x03, 0xa9, 0x20, 0x06, 0x4b, 0x52, 0x57, 0x06, + 0x4d, 0x58, 0x24, 0x06, 0x4d, 0x58, 0x4e, 0x06, + 0x4e, 0x5a, 0x24, 0x06, 0x4e, 0x5a, 0x44, 0x03, + 0x3f, 0x0e, 0x06, 0x54, 0x48, 0x42, 0x06, 0x4e, + 0x54, 0x24, 0x06, 0x54, 0x57, 0x44, 0x06, 0x55, + 0x53, 0x24, 0x06, 0x55, 0x53, 0x44, 0x03, 0xab, + 0x20, 0x06, 0x56, 0x4e, 0x44, 0x08, 0x46, 0x43, + 0x46, 0x41, 0x06, 0x58, 0x41, 0x46, 0x06, 0x45, + 0x43, 0x24, 0x06, 0x58, 0x43, 0x44, 0x06, 0x43, + 0x46, 0x41, 0x06, 0x58, 0x4f, 0x46, 0x08, 0x43, + 0x46, 0x50, 0x46, 0x06, 0x58, 0x50, 0x46, 0x14, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, + 0x65, 0x73, 0x52, 0x6e, 0x6f, 0x64, 0x65, 0x5f, + 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, + 0x69, 0x6e, 0x74, 0x6c, 0x2f, 0x6c, 0x6f, 0x63, + 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, + 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x70, 0x2f, 0x67, + 0x75, 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, + 0x9e, 0x01, 0x00, 0x01, 0x00, 0x27, 0x00, 0x89, + 0x01, 0xc4, 0x6b, 0x01, 0xa0, 0x01, 0x00, 0x00, + 0x00, 0x39, 0xd0, 0x00, 0x00, 0x00, 0x43, 0xd1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd2, 0x00, 0x00, + 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd4, 0x00, 0x00, 0x00, 0x04, 0xd5, 0x00, 0x00, + 0x00, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x04, 0xd7, + 0x00, 0x00, 0x00, 0x04, 0xd8, 0x00, 0x00, 0x00, + 0x04, 0xd9, 0x00, 0x00, 0x00, 0x04, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xdb, 0x00, 0x00, 0x00, 0x04, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, + 0x00, 0x04, 0xde, 0x00, 0x00, 0x00, 0x04, 0xdf, + 0x00, 0x00, 0x00, 0x04, 0xe0, 0x00, 0x00, 0x00, + 0x04, 0xe1, 0x00, 0x00, 0x00, 0x04, 0xe2, 0x00, + 0x00, 0x00, 0x26, 0x0f, 0x00, 0x4d, 0xe3, 0x00, + 0x00, 0x00, 0x0a, 0x4d, 0xe4, 0x00, 0x00, 0x00, + 0x0a, 0x4d, 0xe5, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xe9, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, + 0xed, 0x00, 0x00, 0x00, 0x04, 0xee, 0x00, 0x00, + 0x00, 0x4d, 0xef, 0x00, 0x00, 0x00, 0x04, 0xf0, + 0x00, 0x00, 0x00, 0x4d, 0xf1, 0x00, 0x00, 0x00, + 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xf3, 0x00, + 0x00, 0x00, 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, + 0xf5, 0x00, 0x00, 0x00, 0x04, 0xf6, 0x00, 0x00, + 0x00, 0x4d, 0xf7, 0x00, 0x00, 0x00, 0x04, 0xf8, + 0x00, 0x00, 0x00, 0x4d, 0xf9, 0x00, 0x00, 0x00, + 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xfb, 0x00, + 0x00, 0x00, 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, + 0xfd, 0x00, 0x00, 0x00, 0x04, 0xfe, 0x00, 0x00, + 0x00, 0x4d, 0xff, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x01, 0x00, 0x00, 0x4d, 0x01, 0x01, 0x00, 0x00, + 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, 0x03, 0x01, + 0x00, 0x00, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, + 0x05, 0x01, 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, + 0x00, 0x4d, 0x07, 0x01, 0x00, 0x00, 0x04, 0x08, + 0x01, 0x00, 0x00, 0x4d, 0x09, 0x01, 0x00, 0x00, + 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x0b, 0x01, + 0x00, 0x00, 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, + 0x0d, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x01, 0x00, + 0x00, 0x4d, 0x0f, 0x01, 0x00, 0x00, 0x04, 0x10, + 0x01, 0x00, 0x00, 0x4d, 0x11, 0x01, 0x00, 0x00, + 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, 0x13, 0x01, + 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, + 0x15, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, + 0x00, 0x4d, 0x17, 0x01, 0x00, 0x00, 0x04, 0x18, + 0x01, 0x00, 0x00, 0x4d, 0x19, 0x01, 0x00, 0x00, + 0x04, 0x1a, 0x01, 0x00, 0x00, 0x4d, 0x1b, 0x01, + 0x00, 0x00, 0x04, 0x1c, 0x01, 0x00, 0x00, 0x4d, + 0x1d, 0x01, 0x00, 0x00, 0x04, 0x1e, 0x01, 0x00, + 0x00, 0x4d, 0x1f, 0x01, 0x00, 0x00, 0x04, 0x20, + 0x01, 0x00, 0x00, 0x4d, 0x21, 0x01, 0x00, 0x00, + 0x04, 0x22, 0x01, 0x00, 0x00, 0x4d, 0x23, 0x01, + 0x00, 0x00, 0x04, 0x24, 0x01, 0x00, 0x00, 0x4d, + 0x25, 0x01, 0x00, 0x00, 0x04, 0x26, 0x01, 0x00, + 0x00, 0x4d, 0x26, 0x01, 0x00, 0x00, 0x04, 0x27, + 0x01, 0x00, 0x00, 0x4d, 0x28, 0x01, 0x00, 0x00, + 0x04, 0x29, 0x01, 0x00, 0x00, 0x4d, 0x2a, 0x01, + 0x00, 0x00, 0x04, 0x2b, 0x01, 0x00, 0x00, 0x4d, + 0x2c, 0x01, 0x00, 0x00, 0x04, 0x2d, 0x01, 0x00, + 0x00, 0x4d, 0x2e, 0x01, 0x00, 0x00, 0x04, 0x2f, + 0x01, 0x00, 0x00, 0x4d, 0x30, 0x01, 0x00, 0x00, + 0x04, 0x31, 0x01, 0x00, 0x00, 0x4d, 0x32, 0x01, + 0x00, 0x00, 0x04, 0x33, 0x01, 0x00, 0x00, 0x4d, + 0x34, 0x01, 0x00, 0x00, 0x04, 0x35, 0x01, 0x00, + 0x00, 0x4d, 0x36, 0x01, 0x00, 0x00, 0x04, 0x37, + 0x01, 0x00, 0x00, 0x4d, 0x38, 0x01, 0x00, 0x00, + 0x04, 0x39, 0x01, 0x00, 0x00, 0x4d, 0x3a, 0x01, + 0x00, 0x00, 0x4d, 0x3b, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x3c, 0x01, 0x00, 0x00, 0x4d, 0x3d, 0x01, + 0x00, 0x00, 0x04, 0x3e, 0x01, 0x00, 0x00, 0x4d, + 0x3f, 0x01, 0x00, 0x00, 0x04, 0x31, 0x01, 0x00, + 0x00, 0x4d, 0x32, 0x01, 0x00, 0x00, 0x04, 0x40, + 0x01, 0x00, 0x00, 0x4d, 0x2a, 0x01, 0x00, 0x00, + 0x4d, 0x41, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x42, + 0x01, 0x00, 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, + 0x04, 0x44, 0x01, 0x00, 0x00, 0x4d, 0x45, 0x01, + 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x4d, + 0x09, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x4d, 0x05, 0x01, 0x00, 0x00, 0x4d, 0x48, + 0x01, 0x00, 0x00, 0x4d, 0x49, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x0b, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x67, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7d, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7e, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7e, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, + 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, + 0x4d, 0x83, 0x01, 0x00, 0x00, 0x4d, 0x84, 0x01, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x00, 0xbe, 0x01, 0xbe, 0x02, 0xbe, + 0x03, 0xbe, 0x04, 0xbe, 0x05, 0xbe, 0x06, 0xbe, + 0x07, 0xbe, 0x08, 0xbe, 0x09, 0xbe, 0x0a, 0xbe, + 0x0b, 0x26, 0x0c, 0x00, 0x4d, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, + 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, + 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, + 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, + 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, + 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, + 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, + 0x04, 0x90, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, + 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, + 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, + 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, + 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, + 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x67, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x4d, 0x83, 0x01, + 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, 0x4d, + 0xd6, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x0c, + 0xbe, 0x0d, 0xbe, 0x0e, 0xbe, 0x0f, 0xbe, 0x10, + 0xbe, 0x11, 0xbe, 0x12, 0xbe, 0x13, 0xbe, 0x14, + 0xbe, 0x15, 0xbe, 0x16, 0xbe, 0x17, 0xbe, 0x18, + 0x26, 0x0d, 0x00, 0x4d, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, + 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, + 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, + 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, + 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, + 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, + 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, + 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, + 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, + 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, + 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, + 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, + 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, + 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, + 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x67, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, + 0x04, 0x9f, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7f, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x4d, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, + 0x00, 0x00, 0x4d, 0x83, 0x01, 0x00, 0x00, 0x4d, + 0x84, 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x19, 0xbe, 0x1a, 0xbe, + 0x1b, 0xbe, 0x1c, 0xbe, 0x1d, 0xbe, 0x1e, 0xbe, + 0x1f, 0xbe, 0x20, 0xbe, 0x21, 0xbe, 0x22, 0xbe, + 0x23, 0xbe, 0x24, 0x26, 0x0c, 0x00, 0x4d, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, + 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, + 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, + 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, + 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, + 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, + 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, + 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x67, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, + 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x4d, + 0x83, 0x01, 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x25, 0xbe, 0x26, 0xbe, 0x27, 0xbe, 0x28, + 0xbe, 0x29, 0xbe, 0x2a, 0xbe, 0x2b, 0xbe, 0x2c, + 0xbe, 0x2d, 0xbe, 0x2e, 0xbe, 0x2f, 0xbe, 0x30, + 0xbe, 0x31, 0x26, 0x0d, 0x00, 0x4d, 0x55, 0x01, + 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, + 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, + 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, + 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, + 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, + 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, + 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, + 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, + 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, + 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, + 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, + 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, + 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, + 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, + 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, + 0xac, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x67, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x55, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, + 0x04, 0x9f, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x9e, 0x01, + 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x7f, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x04, + 0x82, 0x01, 0x00, 0x00, 0x4d, 0x83, 0x01, 0x00, + 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x32, 0xbe, + 0x33, 0xbe, 0x34, 0xbe, 0x35, 0xbe, 0x36, 0xbe, + 0x37, 0xbe, 0x38, 0xbe, 0x39, 0xbe, 0x3a, 0xbe, + 0x3b, 0xbe, 0x3c, 0xbe, 0x3d, 0xbe, 0x3e, 0x26, + 0x0d, 0x00, 0x4d, 0x55, 0x01, 0x00, 0x00, 0x04, + 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, + 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, + 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, + 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, + 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, + 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, + 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, + 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, + 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, + 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, + 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, + 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, + 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, + 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, + 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x67, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x9e, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x9e, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7f, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x4d, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, + 0x00, 0x00, 0x4d, 0x83, 0x01, 0x00, 0x00, 0x4d, + 0x84, 0x01, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x3f, 0xbe, 0x40, 0xbe, + 0x41, 0xbe, 0x42, 0xbe, 0x43, 0xbe, 0x44, 0xbe, + 0x45, 0xbe, 0x46, 0xbe, 0x47, 0xbe, 0x48, 0xbe, + 0x49, 0xbe, 0x4a, 0x26, 0x0c, 0x00, 0x4d, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, + 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, + 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, + 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, + 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, + 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, + 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, + 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x67, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, + 0x9f, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, + 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7f, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x4d, 0x83, 0x01, 0x00, 0x00, + 0x4d, 0x84, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x67, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x7d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xad, 0x01, + 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, + 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, + 0x00, 0x26, 0x04, 0x00, 0x4d, 0x55, 0x01, 0x00, + 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, + 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, + 0x04, 0xb0, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xb3, 0x01, + 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, 0x00, 0x04, + 0xb5, 0x01, 0x00, 0x00, 0x04, 0xb6, 0x01, 0x00, + 0x00, 0x26, 0x04, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, + 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x4d, 0x83, + 0x01, 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x4b, 0xbe, 0x4c, 0xbe, 0x4d, 0xbe, 0x4e, 0xbe, + 0x4f, 0xbe, 0x50, 0xbe, 0x51, 0xbe, 0x52, 0xbe, + 0x53, 0xbe, 0x54, 0xbe, 0x55, 0xbe, 0x56, 0xbe, + 0x57, 0xbe, 0x58, 0x26, 0x0e, 0x00, 0x4d, 0x55, + 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, + 0x04, 0xb8, 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, + 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, 0x04, + 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, + 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, 0x04, 0xbe, + 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, + 0x04, 0xc0, 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, + 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, 0x00, 0x04, + 0xc3, 0x01, 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, + 0x00, 0x26, 0x0e, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, + 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, + 0x04, 0xba, 0x01, 0x00, 0x00, 0x04, 0xbb, 0x01, + 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, 0x04, + 0xbd, 0x01, 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, + 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, 0x04, 0xc0, + 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, + 0x04, 0xc2, 0x01, 0x00, 0x00, 0x04, 0xc3, 0x01, + 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, 0x26, + 0x0e, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x67, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7d, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, + 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, + 0x4d, 0x83, 0x01, 0x00, 0x00, 0x4d, 0x84, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x59, 0xbe, 0x5a, 0xbe, 0x5b, 0xbe, + 0x5c, 0xbe, 0x5d, 0xbe, 0x5e, 0xbe, 0x5f, 0xbe, + 0x60, 0xbe, 0x61, 0xbe, 0x62, 0xbe, 0x63, 0xbe, + 0x64, 0x26, 0x0c, 0x00, 0x4d, 0x55, 0x01, 0x00, + 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, + 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, + 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, + 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, 0x04, + 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, + 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, + 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, + 0x04, 0xd0, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xc5, 0x01, + 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, + 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, + 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, 0x04, 0xca, + 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, + 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, + 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, 0x04, + 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x67, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xd1, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x55, + 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xd1, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7f, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x4d, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, + 0x00, 0x00, 0x4d, 0x83, 0x01, 0x00, 0x00, 0x4d, + 0x84, 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x65, 0xbe, 0x66, 0xbe, + 0x67, 0xbe, 0x68, 0xbe, 0x69, 0xbe, 0x6a, 0xbe, + 0x6b, 0xbe, 0x6c, 0xbe, 0x6d, 0xbe, 0x6e, 0xbe, + 0x6f, 0xbe, 0x70, 0x26, 0x0c, 0x00, 0x4d, 0x55, + 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, + 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, + 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, + 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, + 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, + 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, + 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, + 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, + 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, + 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, + 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, + 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, + 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, + 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x67, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xea, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x55, 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x7f, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x04, + 0x82, 0x01, 0x00, 0x00, 0x4d, 0x83, 0x01, 0x00, + 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x71, 0xbe, + 0x72, 0xbe, 0x73, 0xbe, 0x74, 0xbe, 0x75, 0xbe, + 0x76, 0xbe, 0x77, 0xbe, 0x78, 0xbe, 0x79, 0xbe, + 0x7a, 0xbe, 0x7b, 0xbe, 0x7c, 0x26, 0x0c, 0x00, + 0x4d, 0x55, 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, + 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, + 0xd4, 0x01, 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, + 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, + 0x01, 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, + 0x04, 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, + 0x00, 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, + 0xdc, 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, + 0x01, 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, + 0x04, 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, + 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, + 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, + 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, + 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, + 0x04, 0xe9, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x67, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x55, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xea, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x55, 0x01, 0x00, 0x00, 0x04, + 0xea, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, + 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x4d, 0x83, + 0x01, 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x67, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, + 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, + 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, + 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, + 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, + 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, + 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, + 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, + 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, + 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, + 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, + 0x00, 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, + 0xfe, 0x01, 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, + 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, + 0x02, 0x00, 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, + 0x04, 0x03, 0x02, 0x00, 0x00, 0x04, 0x04, 0x02, + 0x00, 0x00, 0x04, 0x05, 0x02, 0x00, 0x00, 0x04, + 0x06, 0x02, 0x00, 0x00, 0x04, 0x07, 0x02, 0x00, + 0x00, 0x04, 0x08, 0x02, 0x00, 0x00, 0x04, 0x09, + 0x02, 0x00, 0x00, 0x04, 0x0a, 0x02, 0x00, 0x00, + 0x26, 0x20, 0x00, 0x04, 0x0b, 0x02, 0x00, 0x00, + 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, + 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, + 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, + 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x23, + 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, + 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, + 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, + 0x11, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, + 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, 0x27, + 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, + 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, + 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, + 0x15, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, + 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, 0x2b, + 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, + 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, + 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, + 0x19, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, + 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x2f, + 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, + 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, + 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, + 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, + 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x33, + 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, + 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, + 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, + 0x21, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, + 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x37, + 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, + 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, + 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, + 0x25, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, + 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x3b, + 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, + 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, + 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, + 0x29, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, + 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x3f, + 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, + 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, + 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, + 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, + 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x43, + 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, + 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, + 0x31, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, + 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x47, + 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, + 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, + 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, + 0x35, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, + 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, 0x4b, + 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, + 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, + 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, + 0x39, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, + 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x4f, + 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, + 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, + 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, + 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, + 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x53, + 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, + 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, + 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, + 0x41, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, + 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, 0x57, + 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, + 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, + 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, + 0x45, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, + 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x5b, + 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, + 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, + 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, + 0x49, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, + 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x5f, + 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, + 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, + 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, + 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, + 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x63, + 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, + 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, + 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, + 0x51, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, + 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x67, + 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, + 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, + 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, + 0x55, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, + 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, 0x6b, + 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, + 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, + 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, + 0x59, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, + 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x6f, + 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, + 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, + 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, + 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, + 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x73, + 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, + 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, + 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, + 0x61, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, + 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x77, + 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, + 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, + 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, + 0x65, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, + 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x7b, + 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, + 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, + 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, + 0x69, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, + 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x7f, + 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, + 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, + 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, + 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, + 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x83, + 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, + 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, + 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, + 0x71, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, + 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0x87, + 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, + 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, + 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, + 0x75, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, + 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0x8b, + 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, + 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, + 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, + 0x79, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, + 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x8f, + 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, + 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, + 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, + 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, + 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, 0x93, + 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, + 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, + 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, + 0x81, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, + 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0x97, + 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, + 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, + 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, + 0x85, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, + 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0x9b, + 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, + 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, + 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, + 0x89, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, + 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0x9f, + 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, + 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, + 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, + 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, + 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xa3, + 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, + 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, + 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, + 0x91, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, + 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0xa7, + 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, + 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, + 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, + 0x95, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, + 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0xab, + 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, + 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, + 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, + 0x99, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, + 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xaf, + 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, + 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, + 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, + 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, + 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xb3, + 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, + 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, + 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, + 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, + 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xb7, + 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, + 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, + 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, + 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, + 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xbb, + 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, + 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, + 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, + 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, + 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xbf, + 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, + 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, + 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, + 0xad, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, + 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0xc3, + 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, + 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, + 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, + 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, + 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xc7, + 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, + 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, + 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, + 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, + 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xcb, + 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, + 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, + 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, + 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, + 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0xcf, + 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, + 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, + 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, + 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, + 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, + 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, + 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, + 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, + 0xcd, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x80, 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, + 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xd0, 0x02, + 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, + 0xd1, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x80, 0x04, 0xd2, 0x02, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x80, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xd3, 0x02, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, + 0xd4, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x80, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x80, 0x4d, 0x55, 0x01, 0x00, 0x00, + 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, + 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, + 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, + 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, + 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, + 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, + 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, + 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, + 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, + 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, + 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, + 0x00, 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, + 0xfe, 0x01, 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, + 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, + 0x02, 0x00, 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, + 0x04, 0x03, 0x02, 0x00, 0x00, 0x04, 0x04, 0x02, + 0x00, 0x00, 0x04, 0x05, 0x02, 0x00, 0x00, 0x04, + 0x06, 0x02, 0x00, 0x00, 0x04, 0x07, 0x02, 0x00, + 0x00, 0x04, 0x08, 0x02, 0x00, 0x00, 0x04, 0x09, + 0x02, 0x00, 0x00, 0x04, 0x0a, 0x02, 0x00, 0x00, + 0x26, 0x20, 0x00, 0x04, 0x0b, 0x02, 0x00, 0x00, + 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, + 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, + 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, + 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x23, + 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, + 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, + 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, + 0x11, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, + 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, 0x27, + 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, + 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, + 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, + 0x15, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, + 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, 0x2b, + 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, + 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, + 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, + 0x19, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, + 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x2f, + 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, + 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, + 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, + 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, + 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x33, + 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, + 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, + 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, + 0x21, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, + 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x37, + 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, + 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, + 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, + 0x25, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, + 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x3b, + 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, + 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, + 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, + 0x29, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, + 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x3f, + 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, + 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, + 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, + 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, + 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x43, + 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, + 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, + 0x31, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, + 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x47, + 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, + 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, + 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, + 0x35, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, + 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, 0x4b, + 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, + 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, + 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, + 0x39, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, + 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x4f, + 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, + 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, + 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, + 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, + 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x53, + 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, + 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, + 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, + 0x41, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, + 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, 0x57, + 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, + 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, + 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, + 0x45, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, + 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x5b, + 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, + 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, + 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, + 0x49, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, + 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x5f, + 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, + 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, + 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, + 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, + 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x63, + 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, + 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, + 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, + 0x51, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, + 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x67, + 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, + 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, + 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, + 0x55, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, + 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, 0x6b, + 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, + 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, + 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, + 0x59, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, + 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x6f, + 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, + 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, + 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, + 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, + 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x73, + 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, + 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, + 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, + 0x61, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, + 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x77, + 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, + 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, + 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, + 0x65, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, + 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x7b, + 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, + 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, + 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, + 0x69, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, + 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x7f, + 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, + 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, + 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, + 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, + 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x83, + 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, + 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, + 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, + 0x71, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, + 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0x87, + 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, + 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, + 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, + 0x75, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, + 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0x8b, + 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, + 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, + 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, + 0x79, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, + 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x8f, + 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, + 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, + 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, + 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, + 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, 0x93, + 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, + 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, + 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, + 0x81, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, + 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0x97, + 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, + 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, + 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, + 0x85, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, + 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0x9b, + 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, + 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, + 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, + 0x89, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, + 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0x9f, + 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, + 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, + 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, + 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, + 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xa3, + 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, + 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, + 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, + 0x91, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, + 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0xa7, + 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, + 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, + 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, + 0x95, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, + 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0xab, + 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, + 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, + 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, + 0x99, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, + 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xaf, + 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, + 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, + 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, + 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, + 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xb3, + 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, + 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, + 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, + 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, + 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xb7, + 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, + 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, + 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, + 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, + 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xbb, + 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, + 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, + 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, + 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, + 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xbf, + 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, + 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, + 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, + 0xad, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, + 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0xc3, + 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, + 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, + 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, + 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, + 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xc7, + 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, + 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, + 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, + 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, + 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xcb, + 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, + 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, + 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, + 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, + 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0xcf, + 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, + 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, + 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, + 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, + 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, + 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, + 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, + 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, + 0xcd, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x80, 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, + 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xd0, 0x02, + 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, + 0xd1, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x80, 0x04, 0xd2, 0x02, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x80, 0x04, 0xd5, 0x02, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x02, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, + 0xd7, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x80, 0x04, 0xd8, 0x02, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x80, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, + 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, + 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, + 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, + 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, + 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, + 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, + 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, + 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, + 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, + 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, + 0x00, 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, + 0xfe, 0x01, 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, + 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, + 0x02, 0x00, 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, + 0x04, 0x03, 0x02, 0x00, 0x00, 0x04, 0x04, 0x02, + 0x00, 0x00, 0x04, 0x05, 0x02, 0x00, 0x00, 0x04, + 0x06, 0x02, 0x00, 0x00, 0x04, 0x07, 0x02, 0x00, + 0x00, 0x04, 0x08, 0x02, 0x00, 0x00, 0x04, 0x09, + 0x02, 0x00, 0x00, 0x04, 0x0a, 0x02, 0x00, 0x00, + 0x26, 0x20, 0x00, 0x04, 0x0b, 0x02, 0x00, 0x00, + 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, + 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, + 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, + 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x23, + 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, + 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, + 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, + 0x11, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, + 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, 0x27, + 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, + 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, + 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, + 0x15, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, + 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, 0x2b, + 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, + 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, + 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, + 0x19, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, + 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x2f, + 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, + 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, + 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, + 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, + 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x33, + 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, + 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, + 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, + 0x21, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, + 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x37, + 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, + 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, + 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, + 0x25, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, + 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x3b, + 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, + 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, + 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, + 0x29, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, + 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x3f, + 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, + 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, + 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, + 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, + 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x43, + 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, + 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, + 0x31, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, + 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x47, + 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, + 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, + 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, + 0x35, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, + 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, 0x4b, + 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, + 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, + 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, + 0x39, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, + 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x4f, + 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, + 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, + 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, + 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, + 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x53, + 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, + 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, + 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, + 0x41, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, + 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, 0x57, + 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, + 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, + 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, + 0x45, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, + 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x5b, + 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, + 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, + 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, + 0x49, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, + 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x5f, + 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, + 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, + 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, + 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, + 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x63, + 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, + 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, + 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, + 0x51, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, + 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x67, + 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, + 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, + 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, + 0x55, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, + 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, 0x6b, + 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, + 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, + 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, + 0x59, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, + 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x6f, + 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, + 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, + 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, + 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, + 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x73, + 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, + 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, + 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, + 0x61, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, + 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x77, + 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, + 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, + 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, + 0x65, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, + 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x7b, + 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, + 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, + 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, + 0x69, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, + 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x7f, + 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, + 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, + 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, + 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, + 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x83, + 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, + 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, + 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, + 0x71, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, + 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0x87, + 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, + 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, + 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, + 0x75, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, + 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0x8b, + 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, + 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, + 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, + 0x79, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, + 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x8f, + 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, + 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, + 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, + 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, + 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, 0x93, + 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, + 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, + 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, + 0x81, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, + 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0x97, + 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, + 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, + 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, + 0x85, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, + 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0x9b, + 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, + 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, + 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, + 0x89, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, + 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0x9f, + 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, + 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, + 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, + 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, + 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xa3, + 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, + 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, + 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, + 0x91, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, + 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0xa7, + 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, + 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, + 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, + 0x95, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, + 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0xab, + 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, + 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, + 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, + 0x99, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, + 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xaf, + 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, + 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, + 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, + 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, + 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xb3, + 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, + 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, + 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, + 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, + 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xb7, + 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, + 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, + 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, + 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, + 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xbb, + 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, + 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, + 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, + 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, + 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xbf, + 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, + 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, + 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, + 0xad, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, + 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0xc3, + 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, + 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, + 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, + 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, + 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xc7, + 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, + 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, + 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, + 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, + 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xcb, + 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, + 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, + 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, + 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, + 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0xcf, + 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, + 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, + 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, + 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, + 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, + 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, + 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, + 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, + 0xcd, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x80, 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, + 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xd0, 0x02, + 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, + 0xd1, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x80, 0x04, 0xd2, 0x02, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x80, 0x04, 0xd5, 0x02, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x02, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, + 0xd7, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x80, 0x04, 0xd8, 0x02, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x80, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x4d, 0x83, 0x01, + 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x7d, + 0xbe, 0x7e, 0xbe, 0x7f, 0xbe, 0x80, 0xbe, 0x81, + 0xbe, 0x82, 0xbe, 0x83, 0xbe, 0x84, 0xbe, 0x85, + 0xbe, 0x86, 0xbe, 0x87, 0xbe, 0x88, 0x26, 0x0c, + 0x00, 0x4d, 0x55, 0x01, 0x00, 0x00, 0x04, 0xd9, + 0x02, 0x00, 0x00, 0x04, 0xda, 0x02, 0x00, 0x00, + 0x04, 0xdb, 0x02, 0x00, 0x00, 0x04, 0xdc, 0x02, + 0x00, 0x00, 0x04, 0xdd, 0x02, 0x00, 0x00, 0x04, + 0xde, 0x02, 0x00, 0x00, 0x04, 0xdf, 0x02, 0x00, + 0x00, 0x04, 0xe0, 0x02, 0x00, 0x00, 0x04, 0xe1, + 0x02, 0x00, 0x00, 0x04, 0xe2, 0x02, 0x00, 0x00, + 0x04, 0xe3, 0x02, 0x00, 0x00, 0x04, 0xe4, 0x02, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xd9, 0x02, 0x00, 0x00, 0x04, + 0xda, 0x02, 0x00, 0x00, 0x04, 0xdb, 0x02, 0x00, + 0x00, 0x04, 0xdc, 0x02, 0x00, 0x00, 0x04, 0xdd, + 0x02, 0x00, 0x00, 0x04, 0xde, 0x02, 0x00, 0x00, + 0x04, 0xdf, 0x02, 0x00, 0x00, 0x04, 0xe0, 0x02, + 0x00, 0x00, 0x04, 0xe1, 0x02, 0x00, 0x00, 0x04, + 0xe2, 0x02, 0x00, 0x00, 0x04, 0xe3, 0x02, 0x00, + 0x00, 0x04, 0xe4, 0x02, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x67, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7d, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xe5, 0x02, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x55, 0x01, 0x00, 0x00, + 0x04, 0xe5, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe5, 0x02, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, + 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x4d, + 0x83, 0x01, 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x67, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x55, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xe6, 0x02, 0x00, 0x00, 0x04, 0xe7, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x55, + 0x01, 0x00, 0x00, 0x04, 0xe6, 0x02, 0x00, 0x00, + 0x04, 0xe7, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x02, + 0x00, 0x00, 0x04, 0xe7, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x7f, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x04, + 0x82, 0x01, 0x00, 0x00, 0x4d, 0x83, 0x01, 0x00, + 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, 0x4d, 0xe2, + 0x00, 0x00, 0x00, 0x4d, 0xe8, 0x02, 0x00, 0x00, + 0x4d, 0xe9, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xea, + 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, + 0x02, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xec, 0x02, + 0x00, 0x00, 0x4d, 0xed, 0x02, 0x00, 0x00, 0x04, + 0xee, 0x02, 0x00, 0x00, 0x4d, 0xef, 0x02, 0x00, + 0x00, 0x4d, 0xf0, 0x02, 0x00, 0x00, 0x0b, 0x04, + 0xf1, 0x02, 0x00, 0x00, 0x4d, 0xed, 0x02, 0x00, + 0x00, 0x04, 0xf2, 0x02, 0x00, 0x00, 0x4d, 0xef, + 0x02, 0x00, 0x00, 0x4d, 0xf3, 0x02, 0x00, 0x00, + 0x0b, 0x04, 0xf4, 0x02, 0x00, 0x00, 0x4d, 0xed, + 0x02, 0x00, 0x00, 0x04, 0xf5, 0x02, 0x00, 0x00, + 0x4d, 0xef, 0x02, 0x00, 0x00, 0x4d, 0xf6, 0x02, + 0x00, 0x00, 0xb6, 0x4d, 0xf7, 0x02, 0x00, 0x00, + 0x4d, 0xf8, 0x02, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0xf9, 0x02, 0x00, 0x00, 0x4d, 0xf0, 0x02, 0x00, + 0x00, 0x04, 0xfa, 0x02, 0x00, 0x00, 0x4d, 0xfb, + 0x02, 0x00, 0x00, 0x04, 0xfc, 0x02, 0x00, 0x00, + 0x4d, 0xfd, 0x02, 0x00, 0x00, 0x04, 0xfe, 0x02, + 0x00, 0x00, 0x4d, 0xff, 0x02, 0x00, 0x00, 0x04, + 0x00, 0x03, 0x00, 0x00, 0x4d, 0x01, 0x03, 0x00, + 0x00, 0x04, 0x02, 0x03, 0x00, 0x00, 0x4d, 0x03, + 0x03, 0x00, 0x00, 0x04, 0x04, 0x03, 0x00, 0x00, + 0x4d, 0x05, 0x03, 0x00, 0x00, 0x4d, 0x06, 0x03, + 0x00, 0x00, 0x0b, 0x04, 0xf9, 0x02, 0x00, 0x00, + 0x4d, 0xf0, 0x02, 0x00, 0x00, 0x04, 0xfa, 0x02, + 0x00, 0x00, 0x4d, 0xfb, 0x02, 0x00, 0x00, 0x04, + 0xfc, 0x02, 0x00, 0x00, 0x4d, 0xfd, 0x02, 0x00, + 0x00, 0x04, 0xfe, 0x02, 0x00, 0x00, 0x4d, 0xff, + 0x02, 0x00, 0x00, 0x04, 0x00, 0x03, 0x00, 0x00, + 0x4d, 0x01, 0x03, 0x00, 0x00, 0x04, 0x02, 0x03, + 0x00, 0x00, 0x4d, 0x03, 0x03, 0x00, 0x00, 0x04, + 0x04, 0x03, 0x00, 0x00, 0x4d, 0x05, 0x03, 0x00, + 0x00, 0x4d, 0xea, 0x02, 0x00, 0x00, 0x4d, 0x07, + 0x03, 0x00, 0x00, 0x0b, 0x04, 0x08, 0x03, 0x00, + 0x00, 0x4d, 0x09, 0x03, 0x00, 0x00, 0x04, 0x0a, + 0x03, 0x00, 0x00, 0x4d, 0x0b, 0x03, 0x00, 0x00, + 0x04, 0x0c, 0x03, 0x00, 0x00, 0x4d, 0x0d, 0x03, + 0x00, 0x00, 0x04, 0x0e, 0x03, 0x00, 0x00, 0x4d, + 0x0f, 0x03, 0x00, 0x00, 0x04, 0x10, 0x03, 0x00, + 0x00, 0x4d, 0x11, 0x03, 0x00, 0x00, 0x04, 0x12, + 0x03, 0x00, 0x00, 0x4d, 0x13, 0x03, 0x00, 0x00, + 0x04, 0x14, 0x03, 0x00, 0x00, 0x4d, 0x15, 0x03, + 0x00, 0x00, 0x04, 0x16, 0x03, 0x00, 0x00, 0x4d, + 0x17, 0x03, 0x00, 0x00, 0x04, 0x18, 0x03, 0x00, + 0x00, 0x4d, 0x19, 0x03, 0x00, 0x00, 0x04, 0x1a, + 0x03, 0x00, 0x00, 0x4d, 0x1b, 0x03, 0x00, 0x00, + 0x04, 0x1c, 0x03, 0x00, 0x00, 0x4d, 0x1d, 0x03, + 0x00, 0x00, 0x04, 0x1e, 0x03, 0x00, 0x00, 0x4d, + 0x1f, 0x03, 0x00, 0x00, 0x04, 0x20, 0x03, 0x00, + 0x00, 0x4d, 0x21, 0x03, 0x00, 0x00, 0x04, 0x22, + 0x03, 0x00, 0x00, 0x4d, 0x23, 0x03, 0x00, 0x00, + 0x04, 0x24, 0x03, 0x00, 0x00, 0x4d, 0x25, 0x03, + 0x00, 0x00, 0x04, 0x26, 0x03, 0x00, 0x00, 0x4d, + 0x27, 0x03, 0x00, 0x00, 0x04, 0x28, 0x03, 0x00, + 0x00, 0x4d, 0x29, 0x03, 0x00, 0x00, 0x04, 0x2a, + 0x03, 0x00, 0x00, 0x4d, 0x2b, 0x03, 0x00, 0x00, + 0x04, 0x2c, 0x03, 0x00, 0x00, 0x4d, 0x2d, 0x03, + 0x00, 0x00, 0x04, 0x2e, 0x03, 0x00, 0x00, 0x4d, + 0x2f, 0x03, 0x00, 0x00, 0x04, 0x30, 0x03, 0x00, + 0x00, 0x4d, 0x31, 0x03, 0x00, 0x00, 0x4d, 0x32, + 0x03, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x00, + 0x24, 0x01, 0x00, 0xcc, 0x28, 0xe6, 0x0c, 0x01, + 0x00, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, + 0x31, 0x33, 0x07, 0x02, 0x37, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_hi_size = 33502; + +const uint8_t intl_hi[33502] = { + 0x01, 0xcd, 0x06, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x68, 0x69, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x10, + 0x7b, 0x31, 0x7d, 0x2c, 0x20, 0x7b, 0x30, 0x7d, + 0x0a, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, + 0x65, 0x64, 0x69, 0x75, 0x6d, 0x15, 0x7b, 0x00, + 0x31, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x15, 0x09, + 0x4b, 0x09, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x08, 0x66, 0x75, 0x6c, 0x6c, 0x08, + 0x6c, 0x6f, 0x6e, 0x67, 0x02, 0x64, 0x06, 0x63, + 0x63, 0x63, 0x02, 0x45, 0x06, 0x45, 0x20, 0x64, + 0x04, 0x45, 0x64, 0x10, 0x45, 0x20, 0x68, 0x3a, + 0x6d, 0x6d, 0x20, 0x61, 0x06, 0x45, 0x68, 0x6d, + 0x0e, 0x45, 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x06, 0x45, 0x48, 0x6d, 0x16, 0x45, 0x20, 0x68, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, + 0x08, 0x45, 0x68, 0x6d, 0x73, 0x14, 0x45, 0x20, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x08, 0x45, 0x48, 0x6d, 0x73, 0x06, 0x79, 0x20, + 0x47, 0x04, 0x47, 0x79, 0x0e, 0x4d, 0x4d, 0x4d, + 0x20, 0x47, 0x20, 0x79, 0x0a, 0x47, 0x79, 0x4d, + 0x4d, 0x4d, 0x12, 0x64, 0x20, 0x4d, 0x4d, 0x4d, + 0x20, 0x79, 0x20, 0x47, 0x0c, 0x47, 0x79, 0x4d, + 0x4d, 0x4d, 0x64, 0x18, 0x45, 0x2c, 0x20, 0x64, + 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x20, 0x47, + 0x0e, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, + 0x06, 0x68, 0x20, 0x61, 0x02, 0x68, 0x04, 0x48, + 0x48, 0x02, 0x48, 0x0c, 0x68, 0x3a, 0x6d, 0x6d, + 0x20, 0x61, 0x04, 0x68, 0x6d, 0x0a, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x04, 0x48, 0x6d, 0x12, 0x68, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, + 0x06, 0x68, 0x6d, 0x73, 0x10, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x06, 0x48, 0x6d, + 0x73, 0x16, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x61, 0x20, 0x76, 0x08, 0x68, 0x6d, + 0x73, 0x76, 0x14, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x76, 0x08, 0x48, 0x6d, + 0x73, 0x76, 0x10, 0x68, 0x3a, 0x6d, 0x6d, 0x20, + 0x61, 0x20, 0x76, 0x06, 0x68, 0x6d, 0x76, 0x0e, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x20, 0x76, 0x06, + 0x48, 0x6d, 0x76, 0x02, 0x4c, 0x02, 0x4d, 0x06, + 0x64, 0x2f, 0x4d, 0x04, 0x4d, 0x64, 0x0c, 0x45, + 0x2c, 0x20, 0x64, 0x2f, 0x4d, 0x06, 0x4d, 0x45, + 0x64, 0x0a, 0x64, 0x64, 0x2f, 0x4d, 0x4d, 0x08, + 0x4d, 0x4d, 0x64, 0x64, 0x06, 0x4c, 0x4c, 0x4c, + 0x06, 0x4d, 0x4d, 0x4d, 0x0a, 0x64, 0x20, 0x4d, + 0x4d, 0x4d, 0x08, 0x4d, 0x4d, 0x4d, 0x64, 0x10, + 0x45, 0x2c, 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, + 0x0a, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0c, 0x64, + 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, + 0x4d, 0x4d, 0x64, 0x12, 0x45, 0x2c, 0x20, 0x64, + 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x0c, 0x4d, 0x4d, + 0x4d, 0x4d, 0x45, 0x64, 0x0a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x04, 0x6d, 0x73, 0x02, 0x79, 0x06, + 0x4d, 0x2f, 0x79, 0x04, 0x79, 0x4d, 0x0a, 0x64, + 0x2f, 0x4d, 0x2f, 0x79, 0x06, 0x79, 0x4d, 0x64, + 0x10, 0x45, 0x2c, 0x20, 0x64, 0x2f, 0x4d, 0x2f, + 0x79, 0x08, 0x79, 0x4d, 0x45, 0x64, 0x08, 0x4d, + 0x4d, 0x2f, 0x79, 0x06, 0x79, 0x4d, 0x4d, 0x0e, + 0x64, 0x64, 0x2f, 0x4d, 0x4d, 0x2f, 0x79, 0x0a, + 0x79, 0x4d, 0x4d, 0x64, 0x64, 0x0a, 0x4d, 0x4d, + 0x4d, 0x20, 0x79, 0x08, 0x79, 0x4d, 0x4d, 0x4d, + 0x0e, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, + 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x14, 0x45, + 0x2c, 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x20, + 0x79, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, + 0x0c, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0a, + 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, 0x51, 0x51, + 0x51, 0x20, 0x79, 0x08, 0x79, 0x51, 0x51, 0x51, + 0x0c, 0x51, 0x51, 0x51, 0x51, 0x20, 0x79, 0x0a, + 0x79, 0x51, 0x51, 0x51, 0x51, 0x20, 0x61, 0x76, + 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x1c, 0x45, + 0x45, 0x45, 0x45, 0x2c, 0x20, 0x64, 0x20, 0x4d, + 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x14, 0x79, 0x4d, + 0x4d, 0x4d, 0x4d, 0x45, 0x45, 0x45, 0x45, 0x64, + 0x10, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, + 0x79, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, + 0x0c, 0x64, 0x2f, 0x4d, 0x2f, 0x79, 0x79, 0x16, + 0x64, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x73, 0x1c, 0x68, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x61, 0x20, 0x7a, 0x7a, + 0x7a, 0x7a, 0x12, 0x68, 0x6d, 0x6d, 0x73, 0x73, + 0x7a, 0x7a, 0x7a, 0x7a, 0x16, 0x68, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x20, 0x7a, + 0x08, 0x68, 0x6d, 0x73, 0x7a, 0x16, 0x74, 0x69, + 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x73, 0x0e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x73, 0x03, 0x1c, 0x09, 0x05, 0x2b, 0x09, 0x3c, + 0x09, 0x05, 0x2e, 0x09, 0x3e, 0x09, 0x03, 0x05, + 0x09, 0x03, 0x2e, 0x09, 0x05, 0x1c, 0x09, 0x42, + 0x09, 0x05, 0x1c, 0x09, 0x41, 0x09, 0x05, 0x38, + 0x09, 0x3f, 0x09, 0x03, 0x28, 0x09, 0x05, 0x26, + 0x09, 0x3f, 0x09, 0x0c, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x07, 0x1c, 0x09, 0x28, 0x09, 0x70, + 0x09, 0x09, 0x2b, 0x09, 0x3c, 0x09, 0x30, 0x09, + 0x70, 0x09, 0x0b, 0x2e, 0x09, 0x3e, 0x09, 0x30, + 0x09, 0x4d, 0x09, 0x1a, 0x09, 0x0d, 0x05, 0x09, + 0x2a, 0x09, 0x4d, 0x09, 0x30, 0x09, 0x48, 0x09, + 0x32, 0x09, 0x05, 0x2e, 0x09, 0x08, 0x09, 0x07, + 0x1c, 0x09, 0x42, 0x09, 0x28, 0x09, 0x09, 0x1c, + 0x09, 0x41, 0x09, 0x32, 0x09, 0x70, 0x09, 0x07, + 0x05, 0x09, 0x17, 0x09, 0x70, 0x09, 0x09, 0x38, + 0x09, 0x3f, 0x09, 0x24, 0x09, 0x70, 0x09, 0x0d, + 0x05, 0x09, 0x15, 0x09, 0x4d, 0x09, 0x24, 0x09, + 0x42, 0x09, 0x70, 0x09, 0x07, 0x28, 0x09, 0x35, + 0x09, 0x70, 0x09, 0x09, 0x26, 0x09, 0x3f, 0x09, + 0x38, 0x09, 0x70, 0x09, 0x0b, 0x1c, 0x09, 0x28, + 0x09, 0x35, 0x09, 0x30, 0x09, 0x40, 0x09, 0x0d, + 0x2b, 0x09, 0x3c, 0x09, 0x30, 0x09, 0x35, 0x09, + 0x30, 0x09, 0x40, 0x09, 0x0b, 0x1c, 0x09, 0x41, + 0x09, 0x32, 0x09, 0x3e, 0x09, 0x08, 0x09, 0x0b, + 0x05, 0x09, 0x17, 0x09, 0x38, 0x09, 0x4d, 0x09, + 0x24, 0x09, 0x0d, 0x38, 0x09, 0x3f, 0x09, 0x24, + 0x09, 0x02, 0x09, 0x2c, 0x09, 0x30, 0x09, 0x0f, + 0x05, 0x09, 0x15, 0x09, 0x4d, 0x09, 0x24, 0x09, + 0x42, 0x09, 0x2c, 0x09, 0x30, 0x09, 0x0b, 0x28, + 0x09, 0x35, 0x09, 0x02, 0x09, 0x2c, 0x09, 0x30, + 0x09, 0x0d, 0x26, 0x09, 0x3f, 0x09, 0x38, 0x09, + 0x02, 0x09, 0x2c, 0x09, 0x30, 0x09, 0x0c, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x73, 0x03, 0x30, 0x09, + 0x05, 0x38, 0x09, 0x4b, 0x09, 0x05, 0x2e, 0x09, + 0x02, 0x09, 0x05, 0x2c, 0x09, 0x41, 0x09, 0x05, + 0x17, 0x09, 0x41, 0x09, 0x05, 0x36, 0x09, 0x41, + 0x09, 0x03, 0x36, 0x09, 0x07, 0x30, 0x09, 0x35, + 0x09, 0x3f, 0x09, 0x07, 0x38, 0x09, 0x4b, 0x09, + 0x2e, 0x09, 0x09, 0x2e, 0x09, 0x02, 0x09, 0x17, + 0x09, 0x32, 0x09, 0x07, 0x2c, 0x09, 0x41, 0x09, + 0x27, 0x09, 0x09, 0x17, 0x09, 0x41, 0x09, 0x30, + 0x09, 0x41, 0x09, 0x0b, 0x36, 0x09, 0x41, 0x09, + 0x15, 0x09, 0x4d, 0x09, 0x30, 0x09, 0x07, 0x36, + 0x09, 0x28, 0x09, 0x3f, 0x09, 0x0d, 0x30, 0x09, + 0x35, 0x09, 0x3f, 0x09, 0x35, 0x09, 0x3e, 0x09, + 0x30, 0x09, 0x0d, 0x38, 0x09, 0x4b, 0x09, 0x2e, + 0x09, 0x35, 0x09, 0x3e, 0x09, 0x30, 0x09, 0x0f, + 0x2e, 0x09, 0x02, 0x09, 0x17, 0x09, 0x32, 0x09, + 0x35, 0x09, 0x3e, 0x09, 0x30, 0x09, 0x0d, 0x2c, + 0x09, 0x41, 0x09, 0x27, 0x09, 0x35, 0x09, 0x3e, + 0x09, 0x30, 0x09, 0x0f, 0x17, 0x09, 0x41, 0x09, + 0x30, 0x09, 0x41, 0x09, 0x35, 0x09, 0x3e, 0x09, + 0x30, 0x09, 0x11, 0x36, 0x09, 0x41, 0x09, 0x15, + 0x09, 0x4d, 0x09, 0x30, 0x09, 0x35, 0x09, 0x3e, + 0x09, 0x30, 0x09, 0x0d, 0x36, 0x09, 0x28, 0x09, + 0x3f, 0x09, 0x35, 0x09, 0x3e, 0x09, 0x30, 0x09, + 0x08, 0x64, 0x61, 0x79, 0x73, 0x04, 0x42, 0x45, + 0x08, 0x65, 0x72, 0x61, 0x73, 0x13, 0x2a, 0x09, + 0x42, 0x09, 0x30, 0x09, 0x4d, 0x09, 0x35, 0x09, + 0x3e, 0x09, 0x39, 0x09, 0x4d, 0x09, 0x28, 0x09, + 0x04, 0x61, 0x6d, 0x0f, 0x05, 0x09, 0x2a, 0x09, + 0x30, 0x09, 0x3e, 0x09, 0x39, 0x09, 0x4d, 0x09, + 0x28, 0x09, 0x04, 0x70, 0x6d, 0x14, 0x64, 0x61, + 0x79, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x73, + 0x06, 0x4d, 0x30, 0x31, 0x06, 0x4d, 0x30, 0x32, + 0x06, 0x4d, 0x30, 0x33, 0x06, 0x4d, 0x30, 0x34, + 0x06, 0x4d, 0x30, 0x35, 0x06, 0x4d, 0x30, 0x36, + 0x06, 0x4d, 0x30, 0x37, 0x06, 0x4d, 0x30, 0x38, + 0x06, 0x4d, 0x30, 0x39, 0x06, 0x4d, 0x31, 0x30, + 0x06, 0x4d, 0x31, 0x31, 0x06, 0x4d, 0x31, 0x32, + 0x08, 0x54, 0x6f, 0x75, 0x74, 0x08, 0x42, 0x61, + 0x62, 0x61, 0x0a, 0x48, 0x61, 0x74, 0x6f, 0x72, + 0x0a, 0x4b, 0x69, 0x61, 0x68, 0x6b, 0x08, 0x54, + 0x6f, 0x62, 0x61, 0x0c, 0x41, 0x6d, 0x73, 0x68, + 0x69, 0x72, 0x10, 0x42, 0x61, 0x72, 0x61, 0x6d, + 0x68, 0x61, 0x74, 0x12, 0x42, 0x61, 0x72, 0x61, + 0x6d, 0x6f, 0x75, 0x64, 0x61, 0x0e, 0x42, 0x61, + 0x73, 0x68, 0x61, 0x6e, 0x73, 0x0a, 0x50, 0x61, + 0x6f, 0x6e, 0x61, 0x08, 0x45, 0x70, 0x65, 0x70, + 0x0a, 0x4d, 0x65, 0x73, 0x72, 0x61, 0x0a, 0x4e, + 0x61, 0x73, 0x69, 0x65, 0x08, 0x45, 0x52, 0x41, + 0x30, 0x08, 0x45, 0x52, 0x41, 0x31, 0x11, 0x2e, + 0x09, 0x38, 0x09, 0x4d, 0x09, 0x15, 0x09, 0x47, + 0x09, 0x30, 0x09, 0x47, 0x09, 0x2e, 0x09, 0x0f, + 0x1f, 0x09, 0x47, 0x09, 0x15, 0x09, 0x47, 0x09, + 0x2e, 0x09, 0x4d, 0x09, 0x1f, 0x09, 0x09, 0x39, + 0x09, 0x47, 0x09, 0x26, 0x09, 0x30, 0x09, 0x0b, + 0x24, 0x09, 0x39, 0x09, 0x38, 0x09, 0x3e, 0x09, + 0x38, 0x09, 0x05, 0x1f, 0x09, 0x30, 0x09, 0x0f, + 0x2f, 0x09, 0x47, 0x09, 0x15, 0x09, 0x3e, 0x09, + 0x1f, 0x09, 0x3f, 0x09, 0x1f, 0x09, 0x0f, 0x2e, + 0x09, 0x47, 0x09, 0x17, 0x09, 0x3e, 0x09, 0x2c, + 0x09, 0x3f, 0x09, 0x1f, 0x09, 0x13, 0x2e, 0x09, + 0x3f, 0x09, 0x2f, 0x09, 0x3e, 0x09, 0x1c, 0x09, + 0x3c, 0x09, 0x3f, 0x09, 0x2f, 0x09, 0x3e, 0x09, + 0x0b, 0x17, 0x09, 0x28, 0x09, 0x2c, 0x09, 0x4b, + 0x09, 0x1f, 0x09, 0x07, 0x38, 0x09, 0x47, 0x09, + 0x28, 0x09, 0x0b, 0x39, 0x09, 0x2e, 0x09, 0x4d, + 0x09, 0x32, 0x09, 0x47, 0x09, 0x0d, 0x28, 0x09, + 0x47, 0x09, 0x39, 0x09, 0x3e, 0x09, 0x38, 0x09, + 0x47, 0x09, 0x0d, 0x2a, 0x09, 0x3e, 0x09, 0x17, + 0x09, 0x42, 0x09, 0x2e, 0x09, 0x28, 0x09, 0x13, + 0x08, 0x09, 0x38, 0x09, 0x3e, 0x09, 0x2d, 0x00, + 0x2a, 0x09, 0x42, 0x09, 0x30, 0x09, 0x4d, 0x09, + 0x35, 0x09, 0x0b, 0x08, 0x09, 0x38, 0x09, 0x4d, + 0x09, 0x35, 0x09, 0x40, 0x09, 0x15, 0x08, 0x09, + 0x38, 0x09, 0x35, 0x09, 0x40, 0x09, 0x20, 0x00, + 0x2a, 0x09, 0x42, 0x09, 0x30, 0x09, 0x4d, 0x09, + 0x35, 0x09, 0x09, 0x08, 0x09, 0x38, 0x09, 0x35, + 0x09, 0x40, 0x09, 0x0f, 0x08, 0x09, 0x38, 0x09, + 0x35, 0x09, 0x40, 0x09, 0x20, 0x00, 0x38, 0x09, + 0x28, 0x09, 0x0c, 0x54, 0x69, 0x73, 0x68, 0x72, + 0x69, 0x0e, 0x48, 0x65, 0x73, 0x68, 0x76, 0x61, + 0x6e, 0x0c, 0x4b, 0x69, 0x73, 0x6c, 0x65, 0x76, + 0x0a, 0x54, 0x65, 0x76, 0x65, 0x74, 0x0c, 0x53, + 0x68, 0x65, 0x76, 0x61, 0x74, 0x0c, 0x41, 0x64, + 0x61, 0x72, 0x20, 0x49, 0x08, 0x41, 0x64, 0x61, + 0x72, 0x0a, 0x4e, 0x69, 0x73, 0x61, 0x6e, 0x08, + 0x49, 0x79, 0x61, 0x72, 0x0a, 0x53, 0x69, 0x76, + 0x61, 0x6e, 0x0a, 0x54, 0x61, 0x6d, 0x75, 0x7a, + 0x04, 0x41, 0x76, 0x08, 0x45, 0x6c, 0x75, 0x6c, + 0x0e, 0x41, 0x64, 0x61, 0x72, 0x20, 0x49, 0x49, + 0x04, 0x41, 0x4d, 0x0b, 0x1a, 0x09, 0x48, 0x09, + 0x24, 0x09, 0x4d, 0x09, 0x30, 0x09, 0x0b, 0x35, + 0x09, 0x48, 0x09, 0x36, 0x09, 0x3e, 0x09, 0x16, + 0x09, 0x0f, 0x1c, 0x09, 0x4d, 0x09, 0x2f, 0x09, + 0x47, 0x09, 0x37, 0x09, 0x4d, 0x09, 0x20, 0x09, + 0x0b, 0x06, 0x09, 0x37, 0x09, 0x3e, 0x09, 0x22, + 0x09, 0x3c, 0x09, 0x0d, 0x36, 0x09, 0x4d, 0x09, + 0x30, 0x09, 0x3e, 0x09, 0x35, 0x09, 0x23, 0x09, + 0x0f, 0x2d, 0x09, 0x3e, 0x09, 0x26, 0x09, 0x4d, + 0x09, 0x30, 0x09, 0x2a, 0x09, 0x26, 0x09, 0x0d, + 0x05, 0x09, 0x36, 0x09, 0x4d, 0x09, 0x35, 0x09, + 0x3f, 0x09, 0x28, 0x09, 0x0f, 0x15, 0x09, 0x3e, + 0x09, 0x30, 0x09, 0x4d, 0x09, 0x24, 0x09, 0x3f, + 0x09, 0x15, 0x09, 0x11, 0x05, 0x09, 0x17, 0x09, + 0x4d, 0x09, 0x30, 0x09, 0x39, 0x09, 0x3e, 0x09, + 0x2f, 0x09, 0x23, 0x09, 0x07, 0x2a, 0x09, 0x4c, + 0x09, 0x37, 0x09, 0x07, 0x2e, 0x09, 0x3e, 0x09, + 0x18, 0x09, 0x0f, 0x2b, 0x09, 0x3e, 0x09, 0x32, + 0x09, 0x4d, 0x09, 0x17, 0x09, 0x41, 0x09, 0x28, + 0x09, 0x05, 0x36, 0x09, 0x15, 0x09, 0x08, 0x4d, + 0x75, 0x68, 0x2e, 0x08, 0x53, 0x61, 0x66, 0x2e, + 0x0c, 0x52, 0x61, 0x62, 0x2e, 0x20, 0x49, 0x0e, + 0x52, 0x61, 0x62, 0x2e, 0x20, 0x49, 0x49, 0x0c, + 0x4a, 0x75, 0x6d, 0x2e, 0x20, 0x49, 0x0e, 0x4a, + 0x75, 0x6d, 0x2e, 0x20, 0x49, 0x49, 0x08, 0x52, + 0x61, 0x6a, 0x2e, 0x08, 0x53, 0x68, 0x61, 0x2e, + 0x08, 0x52, 0x61, 0x6d, 0x2e, 0x0a, 0x53, 0x68, + 0x61, 0x77, 0x2e, 0x11, 0x44, 0x00, 0x68, 0x00, + 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, + 0x51, 0x00, 0x2e, 0x00, 0x11, 0x44, 0x00, 0x68, + 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, + 0x00, 0x48, 0x00, 0x2e, 0x00, 0x0f, 0x2e, 0x09, + 0x41, 0x09, 0x39, 0x09, 0x30, 0x09, 0x4d, 0x09, + 0x30, 0x09, 0x2e, 0x09, 0x07, 0x38, 0x09, 0x2b, + 0x09, 0x30, 0x09, 0x15, 0x30, 0x09, 0x3e, 0x09, + 0x2c, 0x09, 0x40, 0x09, 0x20, 0x00, 0x2a, 0x09, + 0x4d, 0x09, 0x30, 0x09, 0x25, 0x09, 0x2e, 0x09, + 0x19, 0x30, 0x09, 0x3e, 0x09, 0x2c, 0x09, 0x40, + 0x09, 0x20, 0x00, 0x26, 0x09, 0x4d, 0x09, 0x35, + 0x09, 0x3f, 0x09, 0x24, 0x09, 0x40, 0x09, 0x2f, + 0x09, 0x19, 0x1c, 0x09, 0x41, 0x09, 0x2e, 0x09, + 0x4d, 0x09, 0x21, 0x09, 0x3e, 0x09, 0x20, 0x00, + 0x2a, 0x09, 0x4d, 0x09, 0x30, 0x09, 0x25, 0x09, + 0x2e, 0x09, 0x1d, 0x1c, 0x09, 0x41, 0x09, 0x2e, + 0x09, 0x4d, 0x09, 0x21, 0x09, 0x3e, 0x09, 0x20, + 0x00, 0x26, 0x09, 0x4d, 0x09, 0x35, 0x09, 0x3f, + 0x09, 0x24, 0x09, 0x40, 0x09, 0x2f, 0x09, 0x07, + 0x30, 0x09, 0x1c, 0x09, 0x2c, 0x09, 0x09, 0x36, + 0x09, 0x3e, 0x09, 0x35, 0x09, 0x28, 0x09, 0x0b, + 0x30, 0x09, 0x2e, 0x09, 0x1c, 0x09, 0x3e, 0x09, + 0x28, 0x09, 0x0d, 0x36, 0x09, 0x35, 0x09, 0x4d, + 0x09, 0x35, 0x09, 0x4d, 0x09, 0x32, 0x09, 0x13, + 0x1c, 0x09, 0x3f, 0x09, 0x32, 0x09, 0x2d, 0x00, + 0x15, 0x09, 0x4d, 0x09, 0x26, 0x09, 0x3e, 0x09, + 0x39, 0x09, 0x19, 0x1c, 0x09, 0x3f, 0x09, 0x32, + 0x09, 0x4d, 0x09, 0x2d, 0x00, 0x39, 0x09, 0x3f, + 0x09, 0x1c, 0x09, 0x4d, 0x09, 0x1c, 0x09, 0x3e, + 0x09, 0x39, 0x09, 0x04, 0x41, 0x48, 0x1f, 0x54, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x36, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x36, 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x75, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1f, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x1d, 0x57, 0x00, 0x61, 0x00, 0x64, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x52, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x1d, 0x59, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1f, 0x4a, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, + 0x6b, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x2b, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x2d, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x2d, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x2a, 0x4a, 0x69, 0x6e, 0x67, + 0x6f, 0x2d, 0x6b, 0x65, 0x69, 0x75, 0x6e, 0x20, + 0x28, 0x37, 0x36, 0x37, 0x2d, 0x37, 0x37, 0x30, + 0x29, 0x1d, 0x48, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x1f, 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, 0x64, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x4d, 0x01, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, + 0x4a, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x61, + 0x00, 0x6a, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1f, 0x53, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x20, + 0x54, 0x65, 0x6e, 0x2d, 0x61, 0x6e, 0x20, 0x28, + 0x38, 0x35, 0x37, 0x2d, 0x38, 0x35, 0x39, 0x29, + 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, + 0x47, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1d, 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, + 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x34, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1b, 0x4c, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1d, 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x41, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, 0x4a, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x4a, 0x00, 0x69, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x29, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x27, 0x4a, 0x00, 0x69, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x45, 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4c, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x61, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x25, 0x4a, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x24, 0x54, 0x65, 0x6e, 0x2d, + 0x65, 0x69, 0x20, 0x28, 0x31, 0x31, 0x31, 0x30, + 0x2d, 0x31, 0x31, 0x31, 0x33, 0x29, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x44, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x45, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x6a, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x48, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x27, 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, + 0x4c, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x6d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x4a, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x59, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x75, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x29, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x21, 0x4a, 0x00, 0x4d, 0x01, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x27, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x75, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x29, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x74, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x29, 0x52, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x45, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4c, + 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x61, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x48, + 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x27, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x4c, + 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x45, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x27, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4a, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x27, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x61, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x41, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x4d, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x02, 0x54, 0x02, 0x53, 0x1f, 0x24, 0x09, + 0x3e, 0x09, 0x0f, 0x09, 0x15, 0x09, 0x3e, 0x09, + 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x36, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x21, 0x39, 0x09, 0x3e, + 0x09, 0x15, 0x09, 0x42, 0x09, 0x1a, 0x09, 0x40, + 0x09, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x36, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x39, 0x09, + 0x3e, 0x09, 0x15, 0x09, 0x42, 0x09, 0x39, 0x09, + 0x4b, 0x09, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x36, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1d, 0x36, + 0x09, 0x42, 0x09, 0x1a, 0x09, 0x4b, 0x09, 0x20, + 0x00, 0x28, 0x00, 0x36, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1f, 0x24, 0x09, 0x3e, 0x09, + 0x39, 0x09, 0x3f, 0x09, 0x13, 0x09, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1d, 0x15, 0x09, 0x47, 0x09, 0x09, + 0x09, 0x28, 0x09, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, + 0x35, 0x09, 0x3e, 0x09, 0x21, 0x09, 0x42, 0x09, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x1d, 0x30, 0x09, 0x48, + 0x09, 0x15, 0x09, 0x40, 0x09, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x1d, 0x2f, 0x09, 0x4b, 0x09, 0x30, 0x09, + 0x4b, 0x09, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x1c, + 0x09, 0x3f, 0x09, 0x02, 0x09, 0x15, 0x09, 0x40, + 0x09, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x1f, 0x09, + 0x47, 0x09, 0x2e, 0x09, 0x4d, 0x09, 0x2a, 0x09, + 0x4d, 0x09, 0x2f, 0x09, 0x4b, 0x09, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x33, 0x1f, 0x09, 0x47, 0x09, 0x2e, + 0x09, 0x4d, 0x09, 0x2a, 0x09, 0x4d, 0x09, 0x2f, + 0x09, 0x4b, 0x09, 0x2d, 0x00, 0x15, 0x09, 0x3e, + 0x09, 0x2e, 0x09, 0x4d, 0x09, 0x2a, 0x09, 0x4b, + 0x09, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x37, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x2f, 0x1f, 0x09, + 0x47, 0x09, 0x2e, 0x09, 0x4d, 0x09, 0x2a, 0x09, + 0x4d, 0x09, 0x2f, 0x09, 0x4b, 0x09, 0x2d, 0x00, + 0x36, 0x09, 0x4b, 0x09, 0x39, 0x09, 0x4b, 0x09, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x37, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x2f, 0x1f, 0x09, 0x47, + 0x09, 0x2e, 0x09, 0x4d, 0x09, 0x2a, 0x09, 0x4d, + 0x09, 0x2f, 0x09, 0x4b, 0x09, 0x2d, 0x00, 0x39, + 0x09, 0x4b, 0x09, 0x1c, 0x09, 0x40, 0x09, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x31, 0x1f, 0x09, 0x47, 0x09, + 0x2e, 0x09, 0x4d, 0x09, 0x2a, 0x09, 0x4d, 0x09, + 0x2f, 0x09, 0x4b, 0x09, 0x2d, 0x00, 0x1c, 0x09, + 0x3f, 0x09, 0x02, 0x09, 0x17, 0x09, 0x4b, 0x09, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x37, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x2f, 0x1f, 0x09, 0x47, + 0x09, 0x2e, 0x09, 0x4d, 0x09, 0x2a, 0x09, 0x4d, + 0x09, 0x2f, 0x09, 0x4b, 0x09, 0x2d, 0x00, 0x15, + 0x09, 0x3f, 0x09, 0x09, 0x09, 0x28, 0x09, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x1d, 0x39, 0x09, 0x4b, 0x09, + 0x15, 0x09, 0x40, 0x09, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x38, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x1d, 0x1f, 0x09, 0x47, 0x09, 0x28, 0x09, 0x4b, + 0x09, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x37, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x07, 0x09, + 0x02, 0x09, 0x30, 0x09, 0x4d, 0x09, 0x2f, 0x09, + 0x3e, 0x09, 0x15, 0x09, 0x42, 0x09, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x1f, 0x21, 0x09, 0x3e, 0x09, 0x08, + 0x09, 0x21, 0x09, 0x42, 0x09, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x21, 0x15, 0x09, 0x3c, 0x09, 0x4b, 0x09, + 0x28, 0x09, 0x3f, 0x09, 0x28, 0x09, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1f, 0x1f, 0x09, 0x47, 0x09, 0x02, + 0x09, 0x1a, 0x09, 0x4b, 0x09, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1d, 0x36, 0x09, 0x4b, 0x09, 0x35, 0x09, + 0x3e, 0x09, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x15, + 0x09, 0x3e, 0x09, 0x1c, 0x09, 0x4d, 0x09, 0x2f, + 0x09, 0x4b, 0x09, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, + 0x28, 0x09, 0x3f, 0x09, 0x02, 0x09, 0x1c, 0x09, + 0x42, 0x09, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x36, + 0x09, 0x3e, 0x09, 0x08, 0x09, 0x15, 0x09, 0x42, + 0x09, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, 0x1f, 0x09, + 0x47, 0x09, 0x28, 0x09, 0x28, 0x09, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x1f, 0x1c, 0x09, 0x4b, 0x09, 0x17, + 0x09, 0x28, 0x09, 0x4d, 0x09, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x21, 0x17, 0x09, 0x47, 0x09, 0x02, 0x09, + 0x15, 0x09, 0x47, 0x09, 0x08, 0x09, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x21, 0x28, 0x09, 0x3f, 0x09, 0x28, + 0x09, 0x4d, 0x09, 0x28, 0x09, 0x3e, 0x09, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x15, 0x09, 0x47, 0x09, + 0x2e, 0x09, 0x4d, 0x09, 0x2a, 0x09, 0x4d, 0x09, + 0x2f, 0x09, 0x4b, 0x09, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x1f, 0x36, 0x09, 0x42, 0x09, 0x24, 0x09, 0x3e, + 0x09, 0x08, 0x09, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, + 0x08, 0x09, 0x02, 0x09, 0x17, 0x09, 0x40, 0x09, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x1d, 0x08, 0x09, 0x02, + 0x09, 0x1a, 0x09, 0x4b, 0x09, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1f, 0x36, 0x09, 0x4b, 0x09, 0x39, 0x09, + 0x47, 0x09, 0x08, 0x09, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x23, 0x1f, 0x09, 0x47, 0x09, 0x02, 0x09, 0x17, + 0x09, 0x4d, 0x09, 0x2f, 0x09, 0x4b, 0x09, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x34, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x27, 0x1f, 0x09, 0x47, 0x09, + 0x02, 0x09, 0x30, 0x09, 0x4d, 0x09, 0x2f, 0x09, + 0x3e, 0x09, 0x15, 0x09, 0x42, 0x09, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x1f, 0x09, 0x47, 0x09, 0x02, + 0x09, 0x1f, 0x09, 0x42, 0x09, 0x15, 0x09, 0x42, + 0x09, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1b, 0x13, 0x09, + 0x35, 0x09, 0x3e, 0x09, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1d, 0x15, 0x09, 0x4b, 0x09, 0x39, 0x09, 0x4b, + 0x09, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x1f, 0x05, 0x09, + 0x28, 0x09, 0x4d, 0x09, 0x28, 0x09, 0x3e, 0x09, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x1f, 0x09, 0x47, + 0x09, 0x02, 0x09, 0x30, 0x09, 0x4b, 0x09, 0x15, + 0x09, 0x42, 0x09, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, + 0x1f, 0x09, 0x47, 0x09, 0x28, 0x09, 0x2d, 0x00, + 0x0f, 0x09, 0x28, 0x09, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x1f, 0x1c, 0x09, 0x4b, 0x09, 0x17, 0x09, 0x28, + 0x09, 0x4d, 0x09, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x1f, 0x09, 0x47, 0x09, 0x02, 0x09, 0x17, 0x09, + 0x47, 0x09, 0x28, 0x09, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x1d, 0x08, 0x09, 0x15, 0x09, 0x3e, 0x09, 0x28, + 0x09, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x15, 0x09, + 0x28, 0x09, 0x4d, 0x09, 0x28, 0x09, 0x3e, 0x09, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x1d, 0x08, 0x09, 0x2d, + 0x00, 0x0f, 0x09, 0x28, 0x09, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x1d, 0x0f, 0x09, 0x07, 0x09, 0x38, 0x09, + 0x4b, 0x09, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x36, + 0x09, 0x4b, 0x09, 0x30, 0x09, 0x4d, 0x09, 0x2f, + 0x09, 0x3e, 0x09, 0x15, 0x09, 0x42, 0x09, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x21, 0x1a, 0x09, 0x4b, 0x09, + 0x1f, 0x09, 0x42, 0x09, 0x15, 0x09, 0x41, 0x09, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x1f, 0x1a, 0x09, 0x4b, + 0x09, 0x39, 0x09, 0x4b, 0x09, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x21, 0x15, 0x09, 0x02, 0x09, + 0x15, 0x09, 0x4b, 0x09, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x25, 0x1a, 0x09, 0x4d, + 0x09, 0x2f, 0x09, 0x4b, 0x09, 0x35, 0x09, 0x3e, + 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x25, 0x15, 0x09, 0x28, 0x09, 0x4d, 0x09, + 0x28, 0x09, 0x3f, 0x09, 0x28, 0x09, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x1c, + 0x09, 0x3c, 0x09, 0x3f, 0x09, 0x2f, 0x09, 0x3e, + 0x09, 0x28, 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x21, 0x2e, 0x09, 0x02, 0x09, + 0x1c, 0x09, 0x42, 0x09, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x1a, 0x09, 0x4b, + 0x09, 0x17, 0x09, 0x28, 0x09, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, 0x1a, 0x09, + 0x4b, 0x09, 0x30, 0x09, 0x4d, 0x09, 0x2f, 0x09, + 0x3e, 0x09, 0x15, 0x09, 0x42, 0x09, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x1a, + 0x09, 0x4b, 0x09, 0x15, 0x09, 0x4d, 0x09, 0x2f, + 0x09, 0x41, 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x27, 0x15, 0x09, 0x3e, 0x09, + 0x02, 0x09, 0x1f, 0x09, 0x42, 0x09, 0x15, 0x09, + 0x4b, 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x1f, 0x08, 0x09, 0x36, 0x09, 0x4b, + 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x23, 0x1f, 0x09, 0x47, 0x09, 0x02, 0x09, + 0x17, 0x09, 0x40, 0x09, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x23, 0x15, 0x09, 0x4b, + 0x09, 0x39, 0x09, 0x48, 0x09, 0x07, 0x09, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x29, + 0x1c, 0x09, 0x3f, 0x09, 0x30, 0x09, 0x4d, 0x09, + 0x2f, 0x09, 0x3e, 0x09, 0x15, 0x09, 0x42, 0x09, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x08, 0x09, 0x02, 0x09, 0x15, 0x09, 0x4d, + 0x09, 0x2f, 0x09, 0x42, 0x09, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x38, 0x09, + 0x4b, 0x09, 0x39, 0x09, 0x4b, 0x09, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, 0x36, + 0x09, 0x4b, 0x09, 0x30, 0x09, 0x4d, 0x09, 0x2f, + 0x09, 0x3e, 0x09, 0x15, 0x09, 0x42, 0x09, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, + 0x08, 0x09, 0x39, 0x09, 0x4b, 0x09, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x13, + 0x09, 0x1f, 0x09, 0x42, 0x09, 0x15, 0x09, 0x4b, + 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x15, 0x09, 0x3e, 0x09, 0x02, 0x09, + 0x1c, 0x09, 0x3f, 0x09, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x21, 0x15, 0x09, 0x4b, + 0x09, 0x39, 0x09, 0x4b, 0x09, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, 0x08, 0x09, + 0x1a, 0x09, 0x4b, 0x09, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x25, 0x36, 0x09, 0x4b, + 0x09, 0x1f, 0x09, 0x42, 0x09, 0x15, 0x09, 0x4b, + 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x15, 0x09, 0x4b, 0x09, 0x35, 0x09, + 0x3e, 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x21, 0x1a, 0x09, 0x4b, 0x09, 0x1c, + 0x09, 0x40, 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x21, 0x15, 0x09, 0x3e, 0x09, + 0x36, 0x09, 0x4b, 0x09, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x27, 0x1f, 0x09, 0x47, + 0x09, 0x28, 0x09, 0x4d, 0x09, 0x28, 0x09, 0x3f, + 0x09, 0x28, 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x1f, 0x09, 0x47, 0x09, + 0x28, 0x09, 0x2d, 0x00, 0x08, 0x09, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x08, + 0x09, 0x15, 0x09, 0x4d, 0x09, 0x2f, 0x09, 0x42, + 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x23, 0x1c, 0x09, 0x47, 0x09, 0x28, 0x09, + 0x2d, 0x00, 0x08, 0x09, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x21, 0x39, 0x09, 0x4b, + 0x09, 0x06, 0x09, 0x28, 0x09, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x24, 0x09, + 0x47, 0x09, 0x02, 0x09, 0x1c, 0x09, 0x40, 0x09, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x26, 0x09, 0x3e, 0x09, 0x08, 0x09, 0x1c, + 0x09, 0x40, 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x1f, 0x09, 0x47, 0x09, + 0x02, 0x09, 0x36, 0x09, 0x4b, 0x09, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x1a, + 0x09, 0x4b, 0x09, 0x36, 0x09, 0x4b, 0x09, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, + 0x39, 0x09, 0x4b, 0x09, 0x0f, 0x09, 0x28, 0x09, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1f, 0x08, 0x09, 0x1c, 0x09, 0x40, 0x09, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, + 0x15, 0x09, 0x4b, 0x09, 0x1c, 0x09, 0x40, 0x09, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x1f, 0x09, 0x47, 0x09, 0x28, 0x09, 0x4d, + 0x09, 0x2f, 0x09, 0x4b, 0x09, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x25, 0x15, 0x09, + 0x4d, 0x09, 0x2f, 0x09, 0x42, 0x09, 0x06, 0x09, + 0x28, 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x28, 0x09, 0x3f, 0x09, 0x02, + 0x09, 0x2a, 0x09, 0x48, 0x09, 0x08, 0x09, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x15, 0x09, 0x4d, 0x09, 0x2f, 0x09, 0x4b, 0x09, + 0x1c, 0x09, 0x4b, 0x09, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x39, 0x09, 0x4b, + 0x09, 0x17, 0x09, 0x47, 0x09, 0x28, 0x09, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x39, 0x09, 0x48, 0x09, 0x1c, 0x09, 0x40, 0x09, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x27, 0x08, 0x09, 0x30, 0x09, 0x4d, 0x09, 0x2f, + 0x09, 0x3e, 0x09, 0x15, 0x09, 0x42, 0x09, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, + 0x13, 0x09, 0x39, 0x09, 0x4b, 0x09, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x1a, + 0x09, 0x4b, 0x09, 0x15, 0x09, 0x3e, 0x09, 0x28, + 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x21, 0x08, 0x09, 0x2e, 0x09, 0x3e, 0x09, + 0x28, 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x28, 0x09, 0x3f, 0x09, 0x28, + 0x09, 0x2d, 0x00, 0x06, 0x09, 0x28, 0x09, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, + 0x15, 0x09, 0x3e, 0x09, 0x13, 0x09, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x36, + 0x09, 0x4b, 0x09, 0x05, 0x09, 0x28, 0x09, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, + 0x05, 0x09, 0x02, 0x09, 0x1c, 0x09, 0x28, 0x09, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x21, 0x1c, 0x09, 0x3f, 0x09, 0x36, 0x09, 0x4b, + 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x2f, 0x09, 0x4b, 0x09, 0x35, 0x09, + 0x3e, 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x21, 0x1c, 0x09, 0x42, 0x09, 0x10, + 0x09, 0x08, 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x2b, 0x1c, 0x09, 0x47, 0x09, + 0x02, 0x09, 0x30, 0x09, 0x4d, 0x09, 0x2f, 0x09, + 0x3e, 0x09, 0x15, 0x09, 0x42, 0x09, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x2c, + 0x09, 0x42, 0x09, 0x02, 0x09, 0x1c, 0x09, 0x40, + 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x27, 0x15, 0x09, 0x47, 0x09, 0x02, 0x09, + 0x15, 0x09, 0x4d, 0x09, 0x2f, 0x09, 0x42, 0x09, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x36, 0x09, 0x4b, 0x09, 0x1c, 0x09, 0x40, + 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x27, 0x15, 0x09, 0x47, 0x09, 0x28, 0x09, + 0x4d, 0x09, 0x28, 0x09, 0x3f, 0x09, 0x28, 0x09, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x27, 0x1c, 0x09, 0x47, 0x09, 0x02, 0x09, 0x15, + 0x09, 0x4d, 0x09, 0x2f, 0x09, 0x42, 0x09, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x15, 0x09, 0x47, 0x09, 0x28, 0x09, 0x2d, 0x00, + 0x08, 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x36, 0x09, 0x4b, 0x09, 0x17, + 0x09, 0x47, 0x09, 0x28, 0x09, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x2b, 0x15, 0x09, + 0x47, 0x09, 0x02, 0x09, 0x30, 0x09, 0x4d, 0x09, + 0x2f, 0x09, 0x3e, 0x09, 0x15, 0x09, 0x42, 0x09, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x23, 0x15, 0x09, 0x47, 0x09, 0x02, 0x09, 0x2a, + 0x09, 0x4b, 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x36, 0x09, 0x4b, 0x09, + 0x15, 0x09, 0x4d, 0x09, 0x2f, 0x09, 0x42, 0x09, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x1d, 0x1c, 0x09, 0x42, 0x09, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x27, 0x1c, 0x09, + 0x47, 0x09, 0x28, 0x09, 0x4d, 0x09, 0x28, 0x09, + 0x3f, 0x09, 0x28, 0x09, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x25, 0x15, 0x09, 0x4b, + 0x09, 0x30, 0x09, 0x4b, 0x09, 0x15, 0x09, 0x42, + 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x05, 0x09, 0x02, 0x09, 0x1f, 0x09, + 0x48, 0x09, 0x07, 0x09, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x15, 0x09, 0x3e, + 0x09, 0x02, 0x09, 0x15, 0x09, 0x40, 0x09, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, + 0x1c, 0x09, 0x4b, 0x09, 0x0f, 0x09, 0x08, 0x09, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x29, 0x1f, 0x09, 0x47, 0x09, 0x2e, 0x09, 0x4d, + 0x09, 0x2a, 0x09, 0x42, 0x09, 0x15, 0x09, 0x42, + 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x2b, 0x2c, 0x09, 0x41, 0x09, 0x02, 0x09, + 0x30, 0x09, 0x4d, 0x09, 0x2f, 0x09, 0x3e, 0x09, + 0x15, 0x09, 0x42, 0x09, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x15, 0x09, 0x3e, + 0x09, 0x1f, 0x09, 0x47, 0x09, 0x08, 0x09, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, 0x2b, + 0x30, 0x09, 0x4d, 0x09, 0x2f, 0x09, 0x3e, 0x09, + 0x15, 0x09, 0x42, 0x09, 0x28, 0x09, 0x3f, 0x09, + 0x28, 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x08, 0x09, 0x28, 0x09, 0x2d, + 0x00, 0x13, 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x28, 0x09, 0x3f, 0x09, + 0x02, 0x09, 0x1c, 0x09, 0x40, 0x09, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x15, + 0x09, 0x3e, 0x09, 0x02, 0x09, 0x1c, 0x09, 0x47, + 0x09, 0x28, 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x21, 0x39, 0x09, 0x4b, 0x09, + 0x1c, 0x09, 0x40, 0x09, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x15, 0x09, 0x47, + 0x09, 0x02, 0x09, 0x1a, 0x09, 0x4b, 0x09, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x15, 0x09, 0x4b, 0x09, 0x17, 0x09, 0x47, 0x09, + 0x28, 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x21, 0x36, 0x09, 0x4b, 0x09, 0x15, + 0x09, 0x3e, 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x36, 0x09, 0x4b, 0x09, + 0x17, 0x09, 0x47, 0x09, 0x28, 0x09, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x2c, + 0x09, 0x41, 0x09, 0x28, 0x09, 0x2d, 0x00, 0x13, + 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x15, 0x09, 0x4b, 0x09, 0x1a, 0x09, + 0x4b, 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x2c, 0x09, 0x41, 0x09, 0x28, + 0x09, 0x2d, 0x00, 0x08, 0x09, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x15, 0x09, + 0x47, 0x09, 0x02, 0x09, 0x1c, 0x09, 0x40, 0x09, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x15, 0x09, 0x4b, 0x09, 0x05, 0x09, 0x28, + 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x1d, 0x36, 0x09, 0x4b, 0x09, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, 0x08, + 0x09, 0x28, 0x09, 0x3f, 0x09, 0x28, 0x09, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x36, 0x09, 0x4b, 0x09, 0x05, 0x09, 0x28, 0x09, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x25, 0x15, 0x09, 0x47, 0x09, 0x02, 0x09, 0x1c, + 0x09, 0x47, 0x09, 0x28, 0x09, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x15, 0x09, + 0x3e, 0x09, 0x1c, 0x09, 0x47, 0x09, 0x28, 0x09, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x1f, 0x09, 0x4b, 0x09, 0x15, 0x09, 0x42, + 0x09, 0x1c, 0x09, 0x40, 0x09, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x08, 0x09, + 0x02, 0x09, 0x15, 0x09, 0x47, 0x09, 0x08, 0x09, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1f, 0x13, 0x09, 0x1a, 0x09, 0x4b, 0x09, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, + 0x36, 0x09, 0x4b, 0x09, 0x35, 0x09, 0x3e, 0x09, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x2c, 0x09, 0x41, 0x09, 0x02, 0x09, 0x2a, + 0x09, 0x4b, 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x1c, 0x09, 0x47, 0x09, + 0x28, 0x09, 0x4b, 0x09, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x27, 0x1c, 0x09, 0x47, + 0x09, 0x02, 0x09, 0x15, 0x09, 0x4d, 0x09, 0x2f, + 0x09, 0x4b, 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x21, 0x36, 0x09, 0x4b, 0x09, + 0x1a, 0x09, 0x42, 0x09, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x15, 0x09, 0x3e, + 0x09, 0x30, 0x09, 0x47, 0x09, 0x15, 0x09, 0x40, + 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x27, 0x1c, 0x09, 0x47, 0x09, 0x02, 0x09, + 0x1f, 0x09, 0x4b, 0x09, 0x15, 0x09, 0x42, 0x09, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x17, 0x09, 0x47, 0x09, 0x02, 0x09, 0x15, + 0x09, 0x4b, 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x15, 0x09, 0x47, 0x09, + 0x2e, 0x09, 0x4d, 0x09, 0x2e, 0x09, 0x42, 0x09, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x08, 0x09, 0x02, 0x09, 0x1c, 0x09, 0x47, + 0x09, 0x28, 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x15, 0x09, 0x4b, 0x09, + 0x15, 0x09, 0x4b, 0x09, 0x15, 0x09, 0x42, 0x09, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x36, 0x09, 0x4b, 0x09, 0x39, 0x09, 0x47, + 0x09, 0x08, 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x27, 0x15, 0x09, 0x47, 0x09, + 0x02, 0x09, 0x1f, 0x09, 0x4b, 0x09, 0x15, 0x09, + 0x42, 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x23, 0x2c, 0x09, 0x42, 0x09, 0x02, + 0x09, 0x1a, 0x09, 0x4b, 0x09, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x1f, 0x09, + 0x47, 0x09, 0x02, 0x09, 0x1c, 0x09, 0x4b, 0x09, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x29, 0x15, 0x09, 0x4b, 0x09, 0x30, 0x09, 0x4d, + 0x09, 0x2f, 0x09, 0x3e, 0x09, 0x15, 0x09, 0x42, + 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x15, 0x09, 0x4b, 0x09, 0x35, 0x09, + 0x3e, 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x1c, 0x09, 0x47, 0x09, 0x02, + 0x09, 0x1a, 0x09, 0x42, 0x09, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x2e, 0x09, + 0x47, 0x09, 0x1f, 0x09, 0x4b, 0x09, 0x15, 0x09, + 0x42, 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x15, 0x09, 0x3e, 0x09, 0x15, + 0x09, 0x47, 0x09, 0x08, 0x09, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x1d, 0x15, 0x09, + 0x42, 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x2e, 0x09, 0x47, 0x09, 0x1f, + 0x09, 0x4b, 0x09, 0x15, 0x09, 0x42, 0x09, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, + 0x13, 0x09, 0x08, 0x09, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x36, 0x09, 0x4b, + 0x09, 0x1a, 0x09, 0x4b, 0x09, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x08, 0x09, + 0x15, 0x09, 0x4d, 0x09, 0x2f, 0x09, 0x4b, 0x09, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x29, 0x15, 0x09, 0x3e, 0x09, 0x15, 0x09, 0x40, + 0x09, 0x24, 0x09, 0x4d, 0x09, 0x38, 0x09, 0x42, + 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x2c, 0x09, 0x41, 0x09, 0x28, 0x09, + 0x2d, 0x00, 0x05, 0x09, 0x28, 0x09, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x39, + 0x09, 0x4b, 0x09, 0x1f, 0x09, 0x4b, 0x09, 0x15, + 0x09, 0x42, 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x29, 0x15, 0x09, 0x4d, 0x09, + 0x2f, 0x09, 0x4b, 0x09, 0x1f, 0x09, 0x4b, 0x09, + 0x15, 0x09, 0x42, 0x09, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x21, 0x15, 0x09, 0x4b, + 0x09, 0x36, 0x09, 0x4b, 0x09, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x1a, 0x09, + 0x4b, 0x09, 0x30, 0x09, 0x4b, 0x09, 0x15, 0x09, + 0x42, 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x15, 0x09, 0x3e, 0x09, 0x02, + 0x09, 0x36, 0x09, 0x4b, 0x09, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x2c, 0x09, + 0x41, 0x09, 0x02, 0x09, 0x36, 0x09, 0x4b, 0x09, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x21, 0x13, 0x09, 0x28, 0x09, 0x3f, 0x09, 0x28, + 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x27, 0x2c, 0x09, 0x41, 0x09, 0x28, 0x09, + 0x4d, 0x09, 0x2e, 0x09, 0x47, 0x09, 0x08, 0x09, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x25, 0x1a, 0x09, 0x4b, 0x09, 0x15, 0x09, 0x4d, + 0x09, 0x2f, 0x09, 0x4b, 0x09, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x08, 0x09, + 0x02, 0x09, 0x1f, 0x09, 0x4b, 0x09, 0x15, 0x09, + 0x42, 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x21, 0x2e, 0x09, 0x47, 0x09, 0x08, + 0x09, 0x13, 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x2c, 0x09, 0x41, 0x09, + 0x02, 0x09, 0x15, 0x09, 0x40, 0x09, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x08, + 0x09, 0x36, 0x09, 0x4b, 0x09, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x24, 0x09, + 0x3e, 0x09, 0x08, 0x09, 0x0f, 0x09, 0x08, 0x09, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x29, 0x15, 0x09, 0x4d, 0x09, 0x2f, 0x09, 0x4b, + 0x09, 0x30, 0x09, 0x4b, 0x09, 0x15, 0x09, 0x42, + 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x25, 0x1f, 0x09, 0x47, 0x09, 0x28, 0x09, + 0x4d, 0x09, 0x2e, 0x09, 0x28, 0x09, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x15, + 0x09, 0x4b, 0x09, 0x1c, 0x09, 0x40, 0x09, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, + 0x08, 0x09, 0x30, 0x09, 0x4b, 0x09, 0x15, 0x09, + 0x42, 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x1c, 0x09, 0x47, 0x09, 0x02, + 0x09, 0x15, 0x09, 0x40, 0x09, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x1f, 0x09, + 0x47, 0x09, 0x02, 0x09, 0x36, 0x09, 0x4b, 0x09, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x27, 0x2c, 0x09, 0x41, 0x09, 0x02, 0x09, 0x30, + 0x09, 0x4b, 0x09, 0x15, 0x09, 0x42, 0x09, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x15, 0x09, 0x47, 0x09, 0x08, 0x09, 0x1a, 0x09, + 0x4b, 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x1c, 0x09, 0x47, 0x09, 0x28, + 0x09, 0x35, 0x09, 0x3e, 0x09, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x15, 0x09, + 0x3e, 0x09, 0x28, 0x09, 0x2d, 0x00, 0x0f, 0x09, + 0x08, 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x21, 0x36, 0x09, 0x4b, 0x09, 0x39, + 0x09, 0x4b, 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x23, 0x15, 0x09, 0x47, 0x09, + 0x08, 0x09, 0x06, 0x09, 0x28, 0x09, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1d, 0x36, + 0x09, 0x4b, 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x2b, 0x2e, 0x09, 0x47, 0x09, + 0x08, 0x09, 0x30, 0x09, 0x4d, 0x09, 0x2f, 0x09, + 0x3e, 0x09, 0x15, 0x09, 0x42, 0x09, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x2e, + 0x09, 0x3e, 0x09, 0x28, 0x09, 0x1c, 0x09, 0x40, + 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x15, 0x09, 0x28, 0x09, 0x2c, 0x09, + 0x41, 0x09, 0x28, 0x09, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x21, 0x08, 0x09, 0x02, + 0x09, 0x2a, 0x09, 0x4b, 0x09, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x1f, 0x09, + 0x47, 0x09, 0x02, 0x09, 0x35, 0x09, 0x3e, 0x09, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x1c, 0x09, 0x4b, 0x09, 0x15, 0x09, 0x4d, + 0x09, 0x2f, 0x09, 0x4b, 0x09, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, 0x1c, 0x09, + 0x47, 0x09, 0x02, 0x09, 0x30, 0x09, 0x4b, 0x09, + 0x15, 0x09, 0x42, 0x09, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x21, 0x39, 0x09, 0x4b, + 0x09, 0x0f, 0x09, 0x08, 0x09, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x36, 0x09, + 0x4b, 0x09, 0x1f, 0x09, 0x42, 0x09, 0x15, 0x09, + 0x4b, 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x15, 0x09, 0x4d, 0x09, 0x2f, + 0x09, 0x4b, 0x09, 0x39, 0x09, 0x4b, 0x09, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x1c, 0x09, 0x47, 0x09, 0x02, 0x09, 0x2c, 0x09, + 0x41, 0x09, 0x28, 0x09, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x15, 0x09, 0x3e, + 0x09, 0x02, 0x09, 0x2a, 0x09, 0x4b, 0x09, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x07, 0x09, 0x02, 0x09, 0x15, 0x09, 0x4d, 0x09, + 0x2f, 0x09, 0x4b, 0x09, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x15, 0x09, 0x3e, + 0x09, 0x28, 0x09, 0x2d, 0x00, 0x0f, 0x09, 0x28, + 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x29, 0x39, 0x09, 0x4b, 0x09, 0x30, 0x09, + 0x4d, 0x09, 0x2f, 0x09, 0x3e, 0x09, 0x15, 0x09, + 0x42, 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x2e, 0x09, 0x47, 0x09, 0x08, + 0x09, 0x35, 0x09, 0x3e, 0x09, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x05, 0x09, + 0x28, 0x09, 0x2d, 0x00, 0x0f, 0x09, 0x08, 0x09, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x1f, 0x09, 0x47, 0x09, 0x28, 0x09, 0x2e, + 0x09, 0x47, 0x09, 0x08, 0x09, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x15, 0x09, + 0x3e, 0x09, 0x02, 0x09, 0x38, 0x09, 0x47, 0x09, + 0x08, 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x15, 0x09, 0x4d, 0x09, 0x2f, + 0x09, 0x4b, 0x09, 0x35, 0x09, 0x3e, 0x09, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x2c, 0x09, 0x41, 0x09, 0x02, 0x09, 0x15, 0x09, + 0x3e, 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x2c, 0x09, 0x41, 0x09, 0x02, + 0x09, 0x38, 0x09, 0x47, 0x09, 0x08, 0x09, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x1f, 0x09, 0x47, 0x09, 0x02, 0x09, 0x2a, 0x09, + 0x4b, 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x21, 0x15, 0x09, 0x4b, 0x09, 0x15, + 0x09, 0x3e, 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x15, 0x09, 0x3e, 0x09, + 0x08, 0x09, 0x0f, 0x09, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x05, 0x09, 0x02, + 0x09, 0x38, 0x09, 0x47, 0x09, 0x08, 0x09, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x2e, 0x09, 0x3e, 0x09, 0x28, 0x09, 0x2d, 0x00, + 0x08, 0x09, 0x28, 0x09, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x27, 0x2c, 0x09, 0x41, + 0x09, 0x02, 0x09, 0x15, 0x09, 0x4d, 0x09, 0x2f, + 0x09, 0x4c, 0x09, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x1c, 0x09, 0x47, 0x09, + 0x02, 0x09, 0x1c, 0x09, 0x40, 0x09, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x15, + 0x09, 0x47, 0x09, 0x08, 0x09, 0x13, 0x09, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, 0x09, + 0x2e, 0x09, 0x47, 0x09, 0x1c, 0x09, 0x40, 0x09, + 0x0b, 0x24, 0x09, 0x3e, 0x09, 0x08, 0x09, 0x36, + 0x09, 0x4b, 0x09, 0x09, 0x36, 0x09, 0x4b, 0x09, + 0x35, 0x09, 0x3e, 0x09, 0x0d, 0x39, 0x09, 0x47, + 0x09, 0x08, 0x09, 0x38, 0x09, 0x47, 0x09, 0x08, + 0x09, 0x11, 0x2b, 0x09, 0x30, 0x09, 0x4d, 0x09, + 0x35, 0x09, 0x3e, 0x09, 0x26, 0x09, 0x3f, 0x09, + 0x28, 0x09, 0x19, 0x13, 0x09, 0x30, 0x09, 0x4d, + 0x09, 0x26, 0x09, 0x3f, 0x09, 0x35, 0x09, 0x47, + 0x09, 0x39, 0x09, 0x47, 0x09, 0x38, 0x09, 0x4d, + 0x09, 0x1f, 0x09, 0x11, 0x16, 0x09, 0x4b, 0x09, + 0x30, 0x09, 0x30, 0x09, 0x4d, 0x09, 0x26, 0x09, + 0x3e, 0x09, 0x26, 0x09, 0x07, 0x1f, 0x09, 0x3f, + 0x09, 0x30, 0x09, 0x0d, 0x2e, 0x09, 0x4b, 0x09, + 0x30, 0x09, 0x26, 0x09, 0x3e, 0x09, 0x26, 0x09, + 0x11, 0x36, 0x09, 0x3e, 0x09, 0x39, 0x09, 0x30, + 0x09, 0x40, 0x09, 0x35, 0x09, 0x30, 0x09, 0x4d, + 0x09, 0x09, 0x2e, 0x09, 0x47, 0x09, 0x39, 0x09, + 0x30, 0x09, 0x07, 0x05, 0x09, 0x35, 0x09, 0x28, + 0x09, 0x09, 0x05, 0x09, 0x1c, 0x09, 0x3c, 0x09, + 0x30, 0x09, 0x05, 0x21, 0x09, 0x47, 0x09, 0x09, + 0x2c, 0x09, 0x39, 0x09, 0x2e, 0x09, 0x28, 0x09, + 0x11, 0x08, 0x09, 0x38, 0x09, 0x4d, 0x09, 0x2b, + 0x09, 0x28, 0x09, 0x4d, 0x09, 0x26, 0x09, 0x4d, + 0x09, 0x04, 0x41, 0x50, 0x1a, 0x42, 0x65, 0x66, + 0x6f, 0x72, 0x65, 0x20, 0x52, 0x2e, 0x4f, 0x2e, + 0x43, 0x2e, 0x0c, 0x52, 0x2e, 0x4f, 0x2e, 0x43, + 0x2e, 0x12, 0x63, 0x61, 0x6c, 0x65, 0x6e, 0x64, + 0x61, 0x72, 0x73, 0x08, 0x64, 0x61, 0x74, 0x65, + 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, 0x75, + 0x10, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0x1e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, + 0x6e, 0x26, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x6e, 0x65, + 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, + 0x74, 0x74, 0x65, 0x72, 0x6e, 0x0e, 0x64, 0x65, + 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x24, 0x7b, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0x3a, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x10, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x2a, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x40, 0x7b, 0x6d, + 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, + 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x0e, 0x70, + 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x24, 0x73, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x69, 0x7a, + 0x65, 0x10, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, + 0x6e, 0x73, 0x02, 0x2e, 0x02, 0x2c, 0x0a, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x06, 0x4e, 0x61, 0x4e, + 0x06, 0x6e, 0x61, 0x6e, 0x02, 0x2b, 0x10, 0x70, + 0x6c, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, + 0x2d, 0x12, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, + 0x69, 0x67, 0x6e, 0x02, 0x25, 0x16, 0x70, 0x65, + 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, + 0x6e, 0x03, 0x1e, 0x22, 0x10, 0x69, 0x6e, 0x66, + 0x69, 0x6e, 0x69, 0x74, 0x79, 0x08, 0x64, 0x65, + 0x76, 0x61, 0x0e, 0x73, 0x79, 0x6d, 0x62, 0x6f, + 0x6c, 0x73, 0x04, 0x41, 0x24, 0x06, 0x41, 0x55, + 0x44, 0x04, 0x52, 0x24, 0x06, 0x42, 0x52, 0x4c, + 0x06, 0x43, 0x41, 0x24, 0x06, 0x43, 0x41, 0x44, + 0x06, 0x43, 0x4e, 0xa5, 0x06, 0x43, 0x4e, 0x59, + 0x03, 0xac, 0x20, 0x06, 0x45, 0x55, 0x52, 0x02, + 0xa3, 0x06, 0x47, 0x42, 0x50, 0x06, 0x48, 0x4b, + 0x24, 0x06, 0x48, 0x4b, 0x44, 0x03, 0xaa, 0x20, + 0x06, 0x49, 0x4c, 0x53, 0x03, 0xb9, 0x20, 0x06, + 0x49, 0x4e, 0x52, 0x06, 0x4a, 0x50, 0xa5, 0x06, + 0x4a, 0x50, 0x59, 0x03, 0xa9, 0x20, 0x06, 0x4b, + 0x52, 0x57, 0x06, 0x4d, 0x58, 0x24, 0x06, 0x4d, + 0x58, 0x4e, 0x06, 0x4e, 0x5a, 0x24, 0x06, 0x4e, + 0x5a, 0x44, 0x03, 0x3f, 0x0e, 0x06, 0x54, 0x48, + 0x42, 0x06, 0x4e, 0x54, 0x24, 0x06, 0x54, 0x57, + 0x44, 0x02, 0x24, 0x06, 0x55, 0x53, 0x44, 0x03, + 0xab, 0x20, 0x06, 0x56, 0x4e, 0x44, 0x08, 0x46, + 0x43, 0x46, 0x41, 0x06, 0x58, 0x41, 0x46, 0x06, + 0x45, 0x43, 0x24, 0x06, 0x58, 0x43, 0x44, 0x06, + 0x43, 0x46, 0x41, 0x06, 0x58, 0x4f, 0x46, 0x08, + 0x43, 0x46, 0x50, 0x46, 0x06, 0x58, 0x50, 0x46, + 0x14, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, + 0x69, 0x65, 0x73, 0x52, 0x6e, 0x6f, 0x64, 0x65, + 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, + 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2f, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, + 0x61, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x70, 0x2f, + 0x68, 0x69, 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, + 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, 0x27, 0x00, + 0x89, 0x01, 0xd8, 0x6b, 0x01, 0xa0, 0x01, 0x00, + 0x00, 0x00, 0x39, 0xd0, 0x00, 0x00, 0x00, 0x43, + 0xd1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd2, 0x00, + 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd4, 0x00, 0x00, 0x00, 0x04, 0xd5, 0x00, + 0x00, 0x00, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x04, + 0xd7, 0x00, 0x00, 0x00, 0x04, 0xd8, 0x00, 0x00, + 0x00, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x04, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xdb, 0x00, 0x00, 0x00, + 0x04, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xdd, 0x00, + 0x00, 0x00, 0x04, 0xde, 0x00, 0x00, 0x00, 0x04, + 0xdf, 0x00, 0x00, 0x00, 0x04, 0xe0, 0x00, 0x00, + 0x00, 0x04, 0xe1, 0x00, 0x00, 0x00, 0x04, 0xe2, + 0x00, 0x00, 0x00, 0x26, 0x0f, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x00, 0x0a, 0x4d, 0xe4, 0x00, 0x00, + 0x00, 0x0a, 0x4d, 0xe5, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, + 0xe8, 0x00, 0x00, 0x00, 0x04, 0xe9, 0x00, 0x00, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x04, 0xe9, + 0x00, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0xec, + 0x00, 0x00, 0x00, 0x04, 0xed, 0x00, 0x00, 0x00, + 0x4d, 0xee, 0x00, 0x00, 0x00, 0x04, 0xef, 0x00, + 0x00, 0x00, 0x4d, 0xf0, 0x00, 0x00, 0x00, 0x04, + 0xf1, 0x00, 0x00, 0x00, 0x4d, 0xf2, 0x00, 0x00, + 0x00, 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, 0xf4, + 0x00, 0x00, 0x00, 0x04, 0xf5, 0x00, 0x00, 0x00, + 0x4d, 0xf6, 0x00, 0x00, 0x00, 0x04, 0xf7, 0x00, + 0x00, 0x00, 0x4d, 0xf8, 0x00, 0x00, 0x00, 0x04, + 0xf9, 0x00, 0x00, 0x00, 0x4d, 0xfa, 0x00, 0x00, + 0x00, 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, 0xfc, + 0x00, 0x00, 0x00, 0x04, 0xfd, 0x00, 0x00, 0x00, + 0x4d, 0xfe, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x01, 0x00, 0x00, 0x04, + 0x01, 0x01, 0x00, 0x00, 0x4d, 0x02, 0x01, 0x00, + 0x00, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0x04, + 0x01, 0x00, 0x00, 0x04, 0x05, 0x01, 0x00, 0x00, + 0x4d, 0x06, 0x01, 0x00, 0x00, 0x04, 0x07, 0x01, + 0x00, 0x00, 0x4d, 0x08, 0x01, 0x00, 0x00, 0x04, + 0x09, 0x01, 0x00, 0x00, 0x4d, 0x0a, 0x01, 0x00, + 0x00, 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, 0x0c, + 0x01, 0x00, 0x00, 0x04, 0x0d, 0x01, 0x00, 0x00, + 0x4d, 0x0e, 0x01, 0x00, 0x00, 0x04, 0x0f, 0x01, + 0x00, 0x00, 0x4d, 0x10, 0x01, 0x00, 0x00, 0x04, + 0x11, 0x01, 0x00, 0x00, 0x4d, 0x12, 0x01, 0x00, + 0x00, 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, 0x14, + 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x4d, 0x16, 0x01, 0x00, 0x00, 0x04, 0x17, 0x01, + 0x00, 0x00, 0x4d, 0x18, 0x01, 0x00, 0x00, 0x04, + 0x19, 0x01, 0x00, 0x00, 0x4d, 0x1a, 0x01, 0x00, + 0x00, 0x04, 0x1b, 0x01, 0x00, 0x00, 0x4d, 0x1c, + 0x01, 0x00, 0x00, 0x04, 0x1d, 0x01, 0x00, 0x00, + 0x4d, 0x1e, 0x01, 0x00, 0x00, 0x04, 0x1f, 0x01, + 0x00, 0x00, 0x4d, 0x20, 0x01, 0x00, 0x00, 0x04, + 0x21, 0x01, 0x00, 0x00, 0x4d, 0x22, 0x01, 0x00, + 0x00, 0x04, 0x23, 0x01, 0x00, 0x00, 0x4d, 0x24, + 0x01, 0x00, 0x00, 0x04, 0x25, 0x01, 0x00, 0x00, + 0x4d, 0x26, 0x01, 0x00, 0x00, 0x04, 0x27, 0x01, + 0x00, 0x00, 0x4d, 0x28, 0x01, 0x00, 0x00, 0x04, + 0x29, 0x01, 0x00, 0x00, 0x4d, 0x29, 0x01, 0x00, + 0x00, 0x04, 0x2a, 0x01, 0x00, 0x00, 0x4d, 0x2b, + 0x01, 0x00, 0x00, 0x04, 0x2c, 0x01, 0x00, 0x00, + 0x4d, 0x2d, 0x01, 0x00, 0x00, 0x04, 0x2e, 0x01, + 0x00, 0x00, 0x4d, 0x2f, 0x01, 0x00, 0x00, 0x04, + 0x30, 0x01, 0x00, 0x00, 0x4d, 0x31, 0x01, 0x00, + 0x00, 0x04, 0x32, 0x01, 0x00, 0x00, 0x4d, 0x33, + 0x01, 0x00, 0x00, 0x04, 0x34, 0x01, 0x00, 0x00, + 0x4d, 0x35, 0x01, 0x00, 0x00, 0x04, 0x36, 0x01, + 0x00, 0x00, 0x4d, 0x37, 0x01, 0x00, 0x00, 0x04, + 0x38, 0x01, 0x00, 0x00, 0x4d, 0x39, 0x01, 0x00, + 0x00, 0x04, 0x3a, 0x01, 0x00, 0x00, 0x4d, 0x3b, + 0x01, 0x00, 0x00, 0x04, 0x3c, 0x01, 0x00, 0x00, + 0x4d, 0x3d, 0x01, 0x00, 0x00, 0x04, 0x3e, 0x01, + 0x00, 0x00, 0x4d, 0x3f, 0x01, 0x00, 0x00, 0x4d, + 0x40, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x41, 0x01, + 0x00, 0x00, 0x4d, 0x42, 0x01, 0x00, 0x00, 0x04, + 0x43, 0x01, 0x00, 0x00, 0x4d, 0x44, 0x01, 0x00, + 0x00, 0x04, 0x32, 0x01, 0x00, 0x00, 0x4d, 0x37, + 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, + 0x4d, 0x2d, 0x01, 0x00, 0x00, 0x4d, 0x46, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x4d, 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x09, 0x01, 0x00, 0x00, 0x4d, 0x0a, 0x01, 0x00, + 0x00, 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, 0x06, + 0x01, 0x00, 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, + 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x0b, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6c, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x57, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x83, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x57, 0x01, 0x00, 0x00, 0x04, 0x83, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x84, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x85, + 0x01, 0x00, 0x00, 0x4d, 0x86, 0x01, 0x00, 0x00, + 0x04, 0x87, 0x01, 0x00, 0x00, 0x4d, 0x88, 0x01, + 0x00, 0x00, 0x4d, 0x89, 0x01, 0x00, 0x00, 0x4d, + 0xd5, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x00, + 0xbe, 0x01, 0xbe, 0x02, 0xbe, 0x03, 0xbe, 0x04, + 0xbe, 0x05, 0xbe, 0x06, 0xbe, 0x07, 0xbe, 0x08, + 0xbe, 0x09, 0xbe, 0x0a, 0xbe, 0x0b, 0x26, 0x0c, + 0x00, 0x4d, 0x57, 0x01, 0x00, 0x00, 0x04, 0x8a, + 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, + 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, + 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, + 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, + 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, + 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, + 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, + 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, + 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, + 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, + 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, + 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, + 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, + 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6c, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x04, 0x81, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x82, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x4d, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x4d, 0x88, 0x01, 0x00, 0x00, 0x4d, + 0x89, 0x01, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x0c, 0xbe, 0x0d, 0xbe, + 0x0e, 0xbe, 0x0f, 0xbe, 0x10, 0xbe, 0x11, 0xbe, + 0x12, 0xbe, 0x13, 0xbe, 0x14, 0xbe, 0x15, 0xbe, + 0x16, 0xbe, 0x17, 0xbe, 0x18, 0x26, 0x0d, 0x00, + 0x4d, 0x57, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, + 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, + 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, + 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, + 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, + 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, + 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, + 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, + 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x26, 0x0d, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x96, + 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, + 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, + 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, + 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, + 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, + 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, + 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, + 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x6c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x82, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xa3, 0x01, 0x00, + 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0x57, 0x01, 0x00, 0x00, 0x04, 0xa3, + 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x85, 0x01, 0x00, 0x00, 0x4d, 0x86, 0x01, + 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x4d, + 0x88, 0x01, 0x00, 0x00, 0x4d, 0x89, 0x01, 0x00, + 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x19, 0xbe, 0x1a, 0xbe, 0x1b, 0xbe, 0x1c, + 0xbe, 0x1d, 0xbe, 0x1e, 0xbe, 0x1f, 0xbe, 0x20, + 0xbe, 0x21, 0xbe, 0x22, 0xbe, 0x23, 0xbe, 0x24, + 0x26, 0x0c, 0x00, 0x4d, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, + 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, + 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, + 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, + 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, + 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, + 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, + 0x95, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, + 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, + 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, + 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, + 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, + 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, + 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x6c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x82, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x4d, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x4d, 0x88, 0x01, 0x00, + 0x00, 0x4d, 0x89, 0x01, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x25, 0xbe, + 0x26, 0xbe, 0x27, 0xbe, 0x28, 0xbe, 0x29, 0xbe, + 0x2a, 0xbe, 0x2b, 0xbe, 0x2c, 0xbe, 0x2d, 0xbe, + 0x2e, 0xbe, 0x2f, 0xbe, 0x30, 0xbe, 0x31, 0x26, + 0x0d, 0x00, 0x4d, 0x57, 0x01, 0x00, 0x00, 0x04, + 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, + 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, + 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, + 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, + 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, + 0xad, 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, + 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, + 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, + 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, + 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, + 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, + 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, + 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, + 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, + 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x6c, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, + 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x82, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xa3, + 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0x57, 0x01, 0x00, 0x00, + 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, + 0xa4, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x85, 0x01, 0x00, 0x00, 0x4d, + 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, + 0x00, 0x4d, 0x88, 0x01, 0x00, 0x00, 0x4d, 0x89, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x32, 0xbe, 0x33, 0xbe, 0x34, + 0xbe, 0x35, 0xbe, 0x36, 0xbe, 0x37, 0xbe, 0x38, + 0xbe, 0x39, 0xbe, 0x3a, 0xbe, 0x3b, 0xbe, 0x3c, + 0xbe, 0x3d, 0xbe, 0x3e, 0x26, 0x0d, 0x00, 0x4d, + 0x57, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, + 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, + 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, + 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, + 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, + 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, + 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, + 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, + 0x04, 0xb1, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa5, 0x01, + 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, + 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, + 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, + 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, + 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, + 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, + 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, + 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, 0x26, 0x0d, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6c, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x04, 0x81, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x82, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xa3, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x57, 0x01, 0x00, 0x00, + 0x04, 0xa3, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa3, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x85, 0x01, 0x00, 0x00, 0x4d, 0x86, 0x01, + 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x4d, + 0x88, 0x01, 0x00, 0x00, 0x4d, 0x89, 0x01, 0x00, + 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x3f, 0xbe, 0x40, 0xbe, 0x41, 0xbe, 0x42, + 0xbe, 0x43, 0xbe, 0x44, 0xbe, 0x45, 0xbe, 0x46, + 0xbe, 0x47, 0xbe, 0x48, 0xbe, 0x49, 0xbe, 0x4a, + 0x26, 0x0c, 0x00, 0x4d, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, + 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, + 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, + 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, + 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, + 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, + 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, + 0x95, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, + 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, + 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, + 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, + 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, + 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, + 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x6c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x82, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xa3, 0x01, + 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x57, 0x01, 0x00, 0x00, 0x04, + 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x85, 0x01, 0x00, 0x00, 0x4d, 0x86, + 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, + 0x4d, 0x88, 0x01, 0x00, 0x00, 0x4d, 0x89, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6c, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x57, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, + 0x81, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, + 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, + 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, 0x26, 0x04, + 0x00, 0x4d, 0x57, 0x01, 0x00, 0x00, 0x04, 0xb2, + 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, + 0x04, 0xb4, 0x01, 0x00, 0x00, 0x04, 0xb5, 0x01, + 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, + 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, + 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, 0x26, 0x04, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x84, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x85, 0x01, 0x00, + 0x00, 0x4d, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, + 0x01, 0x00, 0x00, 0x4d, 0x88, 0x01, 0x00, 0x00, + 0x4d, 0x89, 0x01, 0x00, 0x00, 0x4d, 0xd4, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x4b, 0xbe, 0x4c, + 0xbe, 0x4d, 0xbe, 0x4e, 0xbe, 0x4f, 0xbe, 0x50, + 0xbe, 0x51, 0xbe, 0x52, 0xbe, 0x53, 0xbe, 0x54, + 0xbe, 0x55, 0xbe, 0x56, 0xbe, 0x57, 0xbe, 0x58, + 0x26, 0x0e, 0x00, 0x4d, 0x57, 0x01, 0x00, 0x00, + 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, + 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, 0x04, + 0xba, 0x01, 0x00, 0x00, 0x04, 0xbb, 0x01, 0x00, + 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, 0x04, 0xbd, + 0x01, 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, + 0x04, 0xbf, 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, + 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, 0x04, + 0xc2, 0x01, 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, + 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, 0x26, 0x0e, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xb7, + 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, + 0x04, 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, + 0x00, 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, + 0xbc, 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, + 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, + 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, + 0x04, 0xc1, 0x01, 0x00, 0x00, 0x04, 0xc2, 0x01, + 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, 0x04, + 0xc4, 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6c, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x57, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xc5, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x57, 0x01, 0x00, 0x00, 0x04, 0xc5, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x84, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x85, + 0x01, 0x00, 0x00, 0x4d, 0x86, 0x01, 0x00, 0x00, + 0x04, 0x87, 0x01, 0x00, 0x00, 0x4d, 0x88, 0x01, + 0x00, 0x00, 0x4d, 0x89, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x59, + 0xbe, 0x5a, 0xbe, 0x5b, 0xbe, 0x5c, 0xbe, 0x5d, + 0xbe, 0x5e, 0xbe, 0x5f, 0xbe, 0x60, 0xbe, 0x61, + 0xbe, 0x62, 0xbe, 0x63, 0xbe, 0x64, 0x26, 0x0c, + 0x00, 0x4d, 0x57, 0x01, 0x00, 0x00, 0x04, 0xc6, + 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, + 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, + 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, 0x04, + 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, + 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, + 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, + 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, + 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, + 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, 0x04, 0xca, + 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, + 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, + 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, 0x04, + 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, + 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6c, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x04, 0x81, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x82, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xd2, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x57, 0x01, 0x00, 0x00, + 0x04, 0xd2, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd2, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x85, 0x01, 0x00, 0x00, 0x4d, 0x86, 0x01, + 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x4d, + 0x88, 0x01, 0x00, 0x00, 0x4d, 0x89, 0x01, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x65, 0xbe, 0x66, 0xbe, 0x67, 0xbe, 0x68, + 0xbe, 0x69, 0xbe, 0x6a, 0xbe, 0x6b, 0xbe, 0x6c, + 0xbe, 0x6d, 0xbe, 0x6e, 0xbe, 0x6f, 0xbe, 0x70, + 0x26, 0x0c, 0x00, 0x4d, 0x57, 0x01, 0x00, 0x00, + 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, + 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, + 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, + 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, + 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, + 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, + 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, + 0xde, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, + 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, + 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, + 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, + 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, + 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, + 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, + 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x6c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x82, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xeb, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x57, 0x01, + 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xeb, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x85, 0x01, 0x00, 0x00, 0x4d, + 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, + 0x00, 0x4d, 0x88, 0x01, 0x00, 0x00, 0x4d, 0x89, + 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x71, 0xbe, 0x72, 0xbe, 0x73, + 0xbe, 0x74, 0xbe, 0x75, 0xbe, 0x76, 0xbe, 0x77, + 0xbe, 0x78, 0xbe, 0x79, 0xbe, 0x7a, 0xbe, 0x7b, + 0xbe, 0x7c, 0x26, 0x0c, 0x00, 0x4d, 0x57, 0x01, + 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, + 0xd4, 0x01, 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, + 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, + 0x01, 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, + 0x04, 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, + 0x00, 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, + 0xdc, 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, + 0x00, 0x04, 0xde, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xdf, + 0x01, 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, + 0x04, 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, + 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, + 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, + 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, + 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, + 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x6c, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, + 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xeb, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x57, 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x84, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x85, 0x01, 0x00, + 0x00, 0x4d, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, + 0x01, 0x00, 0x00, 0x4d, 0x88, 0x01, 0x00, 0x00, + 0x4d, 0x89, 0x01, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x6c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x82, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xec, 0x01, + 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, + 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, + 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, + 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, + 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, + 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, + 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, + 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, + 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, + 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, + 0x00, 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, + 0xfe, 0x01, 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, + 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, + 0x02, 0x00, 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, + 0x04, 0x03, 0x02, 0x00, 0x00, 0x04, 0x04, 0x02, + 0x00, 0x00, 0x04, 0x05, 0x02, 0x00, 0x00, 0x04, + 0x06, 0x02, 0x00, 0x00, 0x04, 0x07, 0x02, 0x00, + 0x00, 0x04, 0x08, 0x02, 0x00, 0x00, 0x04, 0x09, + 0x02, 0x00, 0x00, 0x04, 0x0a, 0x02, 0x00, 0x00, + 0x04, 0x0b, 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, + 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, + 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, + 0x21, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, + 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0x0f, + 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, + 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, + 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, + 0x25, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, + 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0x13, + 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, + 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, + 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, + 0x29, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, + 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x17, + 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, + 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, + 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, + 0x2d, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, + 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x1b, + 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, + 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, + 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, + 0x31, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, + 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x1f, + 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, + 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, + 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, + 0x35, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, + 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x23, + 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, + 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, + 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, + 0x39, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, + 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x27, + 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, + 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, + 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, + 0x3d, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, + 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x2b, + 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, + 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, + 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, + 0x41, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, + 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x2f, + 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, + 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, + 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, + 0x45, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, + 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x33, + 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, + 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, + 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, + 0x49, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, + 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x37, + 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, + 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, + 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, + 0x4d, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, + 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x3b, + 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, + 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, + 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, + 0x51, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, + 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x3f, + 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, + 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, + 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, + 0x55, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, + 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x43, + 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, + 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, + 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, + 0x59, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, + 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x47, + 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, + 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, + 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, + 0x5d, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, + 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x4b, + 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, + 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, + 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, + 0x61, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, + 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x4f, + 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, + 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, + 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, + 0x65, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, + 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x53, + 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, + 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, + 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, + 0x69, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, + 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x57, + 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, + 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, + 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, + 0x6d, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, + 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x5b, + 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, + 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, + 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, + 0x71, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, + 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x5f, + 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, + 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, + 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, + 0x75, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, + 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x63, + 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, + 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, + 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, + 0x79, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, + 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x67, + 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, + 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, + 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, + 0x7d, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, + 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x6b, + 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, + 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, + 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, + 0x81, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, + 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x6f, + 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, + 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, + 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, + 0x85, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, + 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x73, + 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, + 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, + 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, + 0x89, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, + 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x77, + 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, + 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, + 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, + 0x8d, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, + 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x7b, + 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, + 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, + 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, + 0x91, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, + 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x7f, + 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, + 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, + 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, + 0x95, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, + 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x83, + 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, + 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, + 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, + 0x99, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, + 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x87, + 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, + 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, + 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, + 0x9d, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, + 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x8b, + 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, + 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, + 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, + 0xa1, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, + 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x8f, + 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, + 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, + 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, + 0xa5, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, + 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x93, + 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, + 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, + 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, + 0xa9, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, + 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x97, + 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, + 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, + 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, + 0xad, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, + 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x9b, + 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, + 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, + 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, + 0xb1, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, + 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0x9f, + 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, + 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, + 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, + 0xb5, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, + 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0xa3, + 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, + 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, + 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, + 0xb9, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, + 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0xa7, + 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, + 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, + 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, + 0xbd, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, + 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0xab, + 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, + 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, + 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, + 0xc1, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, + 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0xaf, + 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, + 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, + 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, + 0xc5, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, + 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0xb3, + 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, + 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, + 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, + 0xc9, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, + 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xb7, + 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, + 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, + 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, + 0xcd, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, + 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xbb, + 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, + 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, + 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, + 0xd1, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, + 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xbf, + 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, + 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, + 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, + 0xd5, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xc3, + 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, + 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xc7, + 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xcb, + 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, + 0x04, 0xcc, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x80, 0x04, 0xcd, 0x02, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x80, 0x04, 0xce, 0x02, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xcf, + 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, + 0x04, 0xd0, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, + 0x00, 0x80, 0x04, 0xd1, 0x02, 0x00, 0x00, 0x4d, + 0xe5, 0x00, 0x00, 0x80, 0x04, 0xd2, 0x02, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xd3, + 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, 0xe8, 0x00, + 0x00, 0x80, 0x04, 0xd4, 0x02, 0x00, 0x00, 0x4d, + 0xe9, 0x00, 0x00, 0x80, 0x04, 0xd5, 0x02, 0x00, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0x04, + 0x01, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, + 0x4d, 0x57, 0x01, 0x00, 0x00, 0x04, 0xd6, 0x02, + 0x00, 0x00, 0x04, 0xd7, 0x02, 0x00, 0x00, 0x04, + 0xd8, 0x02, 0x00, 0x00, 0x04, 0xd9, 0x02, 0x00, + 0x00, 0x04, 0xda, 0x02, 0x00, 0x00, 0x04, 0xdb, + 0x02, 0x00, 0x00, 0x04, 0xdc, 0x02, 0x00, 0x00, + 0x04, 0xdd, 0x02, 0x00, 0x00, 0x04, 0xde, 0x02, + 0x00, 0x00, 0x04, 0xdf, 0x02, 0x00, 0x00, 0x04, + 0xe0, 0x02, 0x00, 0x00, 0x04, 0xe1, 0x02, 0x00, + 0x00, 0x04, 0xe2, 0x02, 0x00, 0x00, 0x04, 0xe3, + 0x02, 0x00, 0x00, 0x04, 0xe4, 0x02, 0x00, 0x00, + 0x04, 0xe5, 0x02, 0x00, 0x00, 0x04, 0xe6, 0x02, + 0x00, 0x00, 0x04, 0xe7, 0x02, 0x00, 0x00, 0x04, + 0xe8, 0x02, 0x00, 0x00, 0x04, 0xe9, 0x02, 0x00, + 0x00, 0x04, 0xea, 0x02, 0x00, 0x00, 0x04, 0xeb, + 0x02, 0x00, 0x00, 0x04, 0xec, 0x02, 0x00, 0x00, + 0x04, 0xed, 0x02, 0x00, 0x00, 0x04, 0xee, 0x02, + 0x00, 0x00, 0x04, 0xef, 0x02, 0x00, 0x00, 0x04, + 0xf0, 0x02, 0x00, 0x00, 0x04, 0xf1, 0x02, 0x00, + 0x00, 0x04, 0xf2, 0x02, 0x00, 0x00, 0x04, 0xf3, + 0x02, 0x00, 0x00, 0x04, 0xf4, 0x02, 0x00, 0x00, + 0x04, 0xf5, 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, + 0x04, 0xf6, 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, + 0x00, 0x80, 0x04, 0xf7, 0x02, 0x00, 0x00, 0x4d, + 0x21, 0x00, 0x00, 0x80, 0x04, 0xf8, 0x02, 0x00, + 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0xf9, + 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, + 0x04, 0xfa, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, + 0x00, 0x80, 0x04, 0xfb, 0x02, 0x00, 0x00, 0x4d, + 0x25, 0x00, 0x00, 0x80, 0x04, 0xfc, 0x02, 0x00, + 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0xfd, + 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, + 0x04, 0xfe, 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, + 0x00, 0x80, 0x04, 0xff, 0x02, 0x00, 0x00, 0x4d, + 0x29, 0x00, 0x00, 0x80, 0x04, 0x00, 0x03, 0x00, + 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x01, + 0x03, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, + 0x04, 0x02, 0x03, 0x00, 0x00, 0x4d, 0x2c, 0x00, + 0x00, 0x80, 0x04, 0x03, 0x03, 0x00, 0x00, 0x4d, + 0x2d, 0x00, 0x00, 0x80, 0x04, 0x04, 0x03, 0x00, + 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x05, + 0x03, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, + 0x04, 0x06, 0x03, 0x00, 0x00, 0x4d, 0x30, 0x00, + 0x00, 0x80, 0x04, 0x07, 0x03, 0x00, 0x00, 0x4d, + 0x31, 0x00, 0x00, 0x80, 0x04, 0x08, 0x03, 0x00, + 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x09, + 0x03, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, + 0x04, 0x0a, 0x03, 0x00, 0x00, 0x4d, 0x34, 0x00, + 0x00, 0x80, 0x04, 0x0b, 0x03, 0x00, 0x00, 0x4d, + 0x35, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x03, 0x00, + 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x0d, + 0x03, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, + 0x04, 0x0e, 0x03, 0x00, 0x00, 0x4d, 0x38, 0x00, + 0x00, 0x80, 0x04, 0x0f, 0x03, 0x00, 0x00, 0x4d, + 0x39, 0x00, 0x00, 0x80, 0x04, 0x10, 0x03, 0x00, + 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x11, + 0x03, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, + 0x04, 0x12, 0x03, 0x00, 0x00, 0x4d, 0x3c, 0x00, + 0x00, 0x80, 0x04, 0x13, 0x03, 0x00, 0x00, 0x4d, + 0x3d, 0x00, 0x00, 0x80, 0x04, 0x14, 0x03, 0x00, + 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x15, + 0x03, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, + 0x04, 0x16, 0x03, 0x00, 0x00, 0x4d, 0x40, 0x00, + 0x00, 0x80, 0x04, 0x17, 0x03, 0x00, 0x00, 0x4d, + 0x41, 0x00, 0x00, 0x80, 0x04, 0x18, 0x03, 0x00, + 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x19, + 0x03, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, + 0x04, 0x1a, 0x03, 0x00, 0x00, 0x4d, 0x44, 0x00, + 0x00, 0x80, 0x04, 0x1b, 0x03, 0x00, 0x00, 0x4d, + 0x45, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x03, 0x00, + 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x1d, + 0x03, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, + 0x04, 0x1e, 0x03, 0x00, 0x00, 0x4d, 0x48, 0x00, + 0x00, 0x80, 0x04, 0x1f, 0x03, 0x00, 0x00, 0x4d, + 0x49, 0x00, 0x00, 0x80, 0x04, 0x20, 0x03, 0x00, + 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x21, + 0x03, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, + 0x04, 0x22, 0x03, 0x00, 0x00, 0x4d, 0x4c, 0x00, + 0x00, 0x80, 0x04, 0x23, 0x03, 0x00, 0x00, 0x4d, + 0x4d, 0x00, 0x00, 0x80, 0x04, 0x24, 0x03, 0x00, + 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x25, + 0x03, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, + 0x04, 0x26, 0x03, 0x00, 0x00, 0x4d, 0x50, 0x00, + 0x00, 0x80, 0x04, 0x27, 0x03, 0x00, 0x00, 0x4d, + 0x51, 0x00, 0x00, 0x80, 0x04, 0x28, 0x03, 0x00, + 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x29, + 0x03, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, + 0x04, 0x2a, 0x03, 0x00, 0x00, 0x4d, 0x54, 0x00, + 0x00, 0x80, 0x04, 0x2b, 0x03, 0x00, 0x00, 0x4d, + 0x55, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x03, 0x00, + 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x2d, + 0x03, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, + 0x04, 0x2e, 0x03, 0x00, 0x00, 0x4d, 0x58, 0x00, + 0x00, 0x80, 0x04, 0x2f, 0x03, 0x00, 0x00, 0x4d, + 0x59, 0x00, 0x00, 0x80, 0x04, 0x30, 0x03, 0x00, + 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x31, + 0x03, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, + 0x04, 0x32, 0x03, 0x00, 0x00, 0x4d, 0x5c, 0x00, + 0x00, 0x80, 0x04, 0x33, 0x03, 0x00, 0x00, 0x4d, + 0x5d, 0x00, 0x00, 0x80, 0x04, 0x34, 0x03, 0x00, + 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x35, + 0x03, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, + 0x04, 0x36, 0x03, 0x00, 0x00, 0x4d, 0x60, 0x00, + 0x00, 0x80, 0x04, 0x37, 0x03, 0x00, 0x00, 0x4d, + 0x61, 0x00, 0x00, 0x80, 0x04, 0x38, 0x03, 0x00, + 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x39, + 0x03, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, + 0x04, 0x3a, 0x03, 0x00, 0x00, 0x4d, 0x64, 0x00, + 0x00, 0x80, 0x04, 0x3b, 0x03, 0x00, 0x00, 0x4d, + 0x65, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x03, 0x00, + 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x3d, + 0x03, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, + 0x04, 0x3e, 0x03, 0x00, 0x00, 0x4d, 0x68, 0x00, + 0x00, 0x80, 0x04, 0x3f, 0x03, 0x00, 0x00, 0x4d, + 0x69, 0x00, 0x00, 0x80, 0x04, 0x40, 0x03, 0x00, + 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x41, + 0x03, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, + 0x04, 0x42, 0x03, 0x00, 0x00, 0x4d, 0x6c, 0x00, + 0x00, 0x80, 0x04, 0x43, 0x03, 0x00, 0x00, 0x4d, + 0x6d, 0x00, 0x00, 0x80, 0x04, 0x44, 0x03, 0x00, + 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x45, + 0x03, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, + 0x04, 0x46, 0x03, 0x00, 0x00, 0x4d, 0x70, 0x00, + 0x00, 0x80, 0x04, 0x47, 0x03, 0x00, 0x00, 0x4d, + 0x71, 0x00, 0x00, 0x80, 0x04, 0x48, 0x03, 0x00, + 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x49, + 0x03, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, + 0x04, 0x4a, 0x03, 0x00, 0x00, 0x4d, 0x74, 0x00, + 0x00, 0x80, 0x04, 0x4b, 0x03, 0x00, 0x00, 0x4d, + 0x75, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x03, 0x00, + 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x4d, + 0x03, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, + 0x04, 0x4e, 0x03, 0x00, 0x00, 0x4d, 0x78, 0x00, + 0x00, 0x80, 0x04, 0x4f, 0x03, 0x00, 0x00, 0x4d, + 0x79, 0x00, 0x00, 0x80, 0x04, 0x50, 0x03, 0x00, + 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x51, + 0x03, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, + 0x04, 0x52, 0x03, 0x00, 0x00, 0x4d, 0x7c, 0x00, + 0x00, 0x80, 0x04, 0x53, 0x03, 0x00, 0x00, 0x4d, + 0x7d, 0x00, 0x00, 0x80, 0x04, 0x54, 0x03, 0x00, + 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x55, + 0x03, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, + 0x04, 0x56, 0x03, 0x00, 0x00, 0x4d, 0x80, 0x00, + 0x00, 0x80, 0x04, 0x57, 0x03, 0x00, 0x00, 0x4d, + 0x81, 0x00, 0x00, 0x80, 0x04, 0x58, 0x03, 0x00, + 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x59, + 0x03, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, + 0x04, 0x5a, 0x03, 0x00, 0x00, 0x4d, 0x84, 0x00, + 0x00, 0x80, 0x04, 0x5b, 0x03, 0x00, 0x00, 0x4d, + 0x85, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x03, 0x00, + 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x5d, + 0x03, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, + 0x04, 0x5e, 0x03, 0x00, 0x00, 0x4d, 0x88, 0x00, + 0x00, 0x80, 0x04, 0x5f, 0x03, 0x00, 0x00, 0x4d, + 0x89, 0x00, 0x00, 0x80, 0x04, 0x60, 0x03, 0x00, + 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x61, + 0x03, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, + 0x04, 0x62, 0x03, 0x00, 0x00, 0x4d, 0x8c, 0x00, + 0x00, 0x80, 0x04, 0x63, 0x03, 0x00, 0x00, 0x4d, + 0x8d, 0x00, 0x00, 0x80, 0x04, 0x64, 0x03, 0x00, + 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x65, + 0x03, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, + 0x04, 0x66, 0x03, 0x00, 0x00, 0x4d, 0x90, 0x00, + 0x00, 0x80, 0x04, 0x67, 0x03, 0x00, 0x00, 0x4d, + 0x91, 0x00, 0x00, 0x80, 0x04, 0x68, 0x03, 0x00, + 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x69, + 0x03, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, + 0x04, 0x6a, 0x03, 0x00, 0x00, 0x4d, 0x94, 0x00, + 0x00, 0x80, 0x04, 0x6b, 0x03, 0x00, 0x00, 0x4d, + 0x95, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x03, 0x00, + 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x6d, + 0x03, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, + 0x04, 0x6e, 0x03, 0x00, 0x00, 0x4d, 0x98, 0x00, + 0x00, 0x80, 0x04, 0x6f, 0x03, 0x00, 0x00, 0x4d, + 0x99, 0x00, 0x00, 0x80, 0x04, 0x70, 0x03, 0x00, + 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x71, + 0x03, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, + 0x04, 0x72, 0x03, 0x00, 0x00, 0x4d, 0x9c, 0x00, + 0x00, 0x80, 0x04, 0x73, 0x03, 0x00, 0x00, 0x4d, + 0x9d, 0x00, 0x00, 0x80, 0x04, 0x74, 0x03, 0x00, + 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x75, + 0x03, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, + 0x04, 0x76, 0x03, 0x00, 0x00, 0x4d, 0xa0, 0x00, + 0x00, 0x80, 0x04, 0x77, 0x03, 0x00, 0x00, 0x4d, + 0xa1, 0x00, 0x00, 0x80, 0x04, 0x78, 0x03, 0x00, + 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x79, + 0x03, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, + 0x04, 0x7a, 0x03, 0x00, 0x00, 0x4d, 0xa4, 0x00, + 0x00, 0x80, 0x04, 0x7b, 0x03, 0x00, 0x00, 0x4d, + 0xa5, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x03, 0x00, + 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x7d, + 0x03, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, + 0x04, 0x7e, 0x03, 0x00, 0x00, 0x4d, 0xa8, 0x00, + 0x00, 0x80, 0x04, 0x7f, 0x03, 0x00, 0x00, 0x4d, + 0xa9, 0x00, 0x00, 0x80, 0x04, 0x80, 0x03, 0x00, + 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x81, + 0x03, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, + 0x04, 0x82, 0x03, 0x00, 0x00, 0x4d, 0xac, 0x00, + 0x00, 0x80, 0x04, 0x83, 0x03, 0x00, 0x00, 0x4d, + 0xad, 0x00, 0x00, 0x80, 0x04, 0x84, 0x03, 0x00, + 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x85, + 0x03, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, + 0x04, 0x86, 0x03, 0x00, 0x00, 0x4d, 0xb0, 0x00, + 0x00, 0x80, 0x04, 0x87, 0x03, 0x00, 0x00, 0x4d, + 0xb1, 0x00, 0x00, 0x80, 0x04, 0x88, 0x03, 0x00, + 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0x89, + 0x03, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, + 0x04, 0x8a, 0x03, 0x00, 0x00, 0x4d, 0xb4, 0x00, + 0x00, 0x80, 0x04, 0x8b, 0x03, 0x00, 0x00, 0x4d, + 0xb5, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x03, 0x00, + 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0x8d, + 0x03, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, + 0x04, 0x8e, 0x03, 0x00, 0x00, 0x4d, 0xb8, 0x00, + 0x00, 0x80, 0x04, 0x8f, 0x03, 0x00, 0x00, 0x4d, + 0xb9, 0x00, 0x00, 0x80, 0x04, 0x90, 0x03, 0x00, + 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0x91, + 0x03, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, + 0x04, 0x92, 0x03, 0x00, 0x00, 0x4d, 0xbc, 0x00, + 0x00, 0x80, 0x04, 0x93, 0x03, 0x00, 0x00, 0x4d, + 0xbd, 0x00, 0x00, 0x80, 0x04, 0x94, 0x03, 0x00, + 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0x95, + 0x03, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, + 0x04, 0x96, 0x03, 0x00, 0x00, 0x4d, 0xc0, 0x00, + 0x00, 0x80, 0x04, 0x97, 0x03, 0x00, 0x00, 0x4d, + 0xc1, 0x00, 0x00, 0x80, 0x04, 0x98, 0x03, 0x00, + 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0x99, + 0x03, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, + 0x04, 0x9a, 0x03, 0x00, 0x00, 0x4d, 0xc4, 0x00, + 0x00, 0x80, 0x04, 0x9b, 0x03, 0x00, 0x00, 0x4d, + 0xc5, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x03, 0x00, + 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0x9d, + 0x03, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, + 0x04, 0x9e, 0x03, 0x00, 0x00, 0x4d, 0xc8, 0x00, + 0x00, 0x80, 0x04, 0x9f, 0x03, 0x00, 0x00, 0x4d, + 0xc9, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x03, 0x00, + 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xa1, + 0x03, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, + 0x04, 0xa2, 0x03, 0x00, 0x00, 0x4d, 0xcc, 0x00, + 0x00, 0x80, 0x04, 0xa3, 0x03, 0x00, 0x00, 0x4d, + 0xcd, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x03, 0x00, + 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xa5, + 0x03, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, + 0x04, 0xa6, 0x03, 0x00, 0x00, 0x4d, 0xd0, 0x00, + 0x00, 0x80, 0x04, 0xa7, 0x03, 0x00, 0x00, 0x4d, + 0xd1, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x03, 0x00, + 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xa9, + 0x03, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, + 0x04, 0xaa, 0x03, 0x00, 0x00, 0x4d, 0xd4, 0x00, + 0x00, 0x80, 0x04, 0xab, 0x03, 0x00, 0x00, 0x4d, + 0xd5, 0x00, 0x00, 0x80, 0x04, 0xac, 0x03, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xad, + 0x03, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, + 0x04, 0xae, 0x03, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x80, 0x04, 0xaf, 0x03, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x03, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xb1, + 0x03, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, + 0x04, 0xb2, 0x03, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x80, 0x04, 0xb3, 0x03, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x03, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xb5, + 0x03, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, + 0x04, 0xb6, 0x03, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x80, 0x04, 0xb7, 0x03, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x03, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xb9, + 0x03, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, + 0x04, 0xba, 0x03, 0x00, 0x00, 0x4d, 0xe4, 0x00, + 0x00, 0x80, 0x04, 0xbb, 0x03, 0x00, 0x00, 0x4d, + 0xe5, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x03, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xbd, + 0x03, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, + 0x04, 0xbe, 0x03, 0x00, 0x00, 0x4d, 0xe8, 0x00, + 0x00, 0x80, 0x04, 0xbf, 0x03, 0x00, 0x00, 0x4d, + 0xe9, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x03, 0x00, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0xc1, + 0x03, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd6, 0x02, + 0x00, 0x00, 0x04, 0xd7, 0x02, 0x00, 0x00, 0x04, + 0xd8, 0x02, 0x00, 0x00, 0x04, 0xd9, 0x02, 0x00, + 0x00, 0x04, 0xda, 0x02, 0x00, 0x00, 0x04, 0xdb, + 0x02, 0x00, 0x00, 0x04, 0xdc, 0x02, 0x00, 0x00, + 0x04, 0xdd, 0x02, 0x00, 0x00, 0x04, 0xde, 0x02, + 0x00, 0x00, 0x04, 0xdf, 0x02, 0x00, 0x00, 0x04, + 0xe0, 0x02, 0x00, 0x00, 0x04, 0xe1, 0x02, 0x00, + 0x00, 0x04, 0xe2, 0x02, 0x00, 0x00, 0x04, 0xe3, + 0x02, 0x00, 0x00, 0x04, 0xe4, 0x02, 0x00, 0x00, + 0x04, 0xe5, 0x02, 0x00, 0x00, 0x04, 0xe6, 0x02, + 0x00, 0x00, 0x04, 0xe7, 0x02, 0x00, 0x00, 0x04, + 0xe8, 0x02, 0x00, 0x00, 0x04, 0xe9, 0x02, 0x00, + 0x00, 0x04, 0xea, 0x02, 0x00, 0x00, 0x04, 0xeb, + 0x02, 0x00, 0x00, 0x04, 0xec, 0x02, 0x00, 0x00, + 0x04, 0xed, 0x02, 0x00, 0x00, 0x04, 0xee, 0x02, + 0x00, 0x00, 0x04, 0xef, 0x02, 0x00, 0x00, 0x04, + 0xf0, 0x02, 0x00, 0x00, 0x04, 0xf1, 0x02, 0x00, + 0x00, 0x04, 0xf2, 0x02, 0x00, 0x00, 0x04, 0xf3, + 0x02, 0x00, 0x00, 0x04, 0xf4, 0x02, 0x00, 0x00, + 0x04, 0xf5, 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, + 0x04, 0xf6, 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, + 0x00, 0x80, 0x04, 0xf7, 0x02, 0x00, 0x00, 0x4d, + 0x21, 0x00, 0x00, 0x80, 0x04, 0xf8, 0x02, 0x00, + 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0xf9, + 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, + 0x04, 0xfa, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, + 0x00, 0x80, 0x04, 0xfb, 0x02, 0x00, 0x00, 0x4d, + 0x25, 0x00, 0x00, 0x80, 0x04, 0xfc, 0x02, 0x00, + 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0xfd, + 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, + 0x04, 0xfe, 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, + 0x00, 0x80, 0x04, 0xff, 0x02, 0x00, 0x00, 0x4d, + 0x29, 0x00, 0x00, 0x80, 0x04, 0x00, 0x03, 0x00, + 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x01, + 0x03, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, + 0x04, 0x02, 0x03, 0x00, 0x00, 0x4d, 0x2c, 0x00, + 0x00, 0x80, 0x04, 0x03, 0x03, 0x00, 0x00, 0x4d, + 0x2d, 0x00, 0x00, 0x80, 0x04, 0x04, 0x03, 0x00, + 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x05, + 0x03, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, + 0x04, 0x06, 0x03, 0x00, 0x00, 0x4d, 0x30, 0x00, + 0x00, 0x80, 0x04, 0x07, 0x03, 0x00, 0x00, 0x4d, + 0x31, 0x00, 0x00, 0x80, 0x04, 0x08, 0x03, 0x00, + 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x09, + 0x03, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, + 0x04, 0x0a, 0x03, 0x00, 0x00, 0x4d, 0x34, 0x00, + 0x00, 0x80, 0x04, 0x0b, 0x03, 0x00, 0x00, 0x4d, + 0x35, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x03, 0x00, + 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x0d, + 0x03, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, + 0x04, 0x0e, 0x03, 0x00, 0x00, 0x4d, 0x38, 0x00, + 0x00, 0x80, 0x04, 0x0f, 0x03, 0x00, 0x00, 0x4d, + 0x39, 0x00, 0x00, 0x80, 0x04, 0x10, 0x03, 0x00, + 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x11, + 0x03, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, + 0x04, 0x12, 0x03, 0x00, 0x00, 0x4d, 0x3c, 0x00, + 0x00, 0x80, 0x04, 0x13, 0x03, 0x00, 0x00, 0x4d, + 0x3d, 0x00, 0x00, 0x80, 0x04, 0x14, 0x03, 0x00, + 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x15, + 0x03, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, + 0x04, 0x16, 0x03, 0x00, 0x00, 0x4d, 0x40, 0x00, + 0x00, 0x80, 0x04, 0x17, 0x03, 0x00, 0x00, 0x4d, + 0x41, 0x00, 0x00, 0x80, 0x04, 0x18, 0x03, 0x00, + 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x19, + 0x03, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, + 0x04, 0x1a, 0x03, 0x00, 0x00, 0x4d, 0x44, 0x00, + 0x00, 0x80, 0x04, 0x1b, 0x03, 0x00, 0x00, 0x4d, + 0x45, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x03, 0x00, + 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x1d, + 0x03, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, + 0x04, 0x1e, 0x03, 0x00, 0x00, 0x4d, 0x48, 0x00, + 0x00, 0x80, 0x04, 0x1f, 0x03, 0x00, 0x00, 0x4d, + 0x49, 0x00, 0x00, 0x80, 0x04, 0x20, 0x03, 0x00, + 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x21, + 0x03, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, + 0x04, 0x22, 0x03, 0x00, 0x00, 0x4d, 0x4c, 0x00, + 0x00, 0x80, 0x04, 0x23, 0x03, 0x00, 0x00, 0x4d, + 0x4d, 0x00, 0x00, 0x80, 0x04, 0x24, 0x03, 0x00, + 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x25, + 0x03, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, + 0x04, 0x26, 0x03, 0x00, 0x00, 0x4d, 0x50, 0x00, + 0x00, 0x80, 0x04, 0x27, 0x03, 0x00, 0x00, 0x4d, + 0x51, 0x00, 0x00, 0x80, 0x04, 0x28, 0x03, 0x00, + 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x29, + 0x03, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, + 0x04, 0x2a, 0x03, 0x00, 0x00, 0x4d, 0x54, 0x00, + 0x00, 0x80, 0x04, 0x2b, 0x03, 0x00, 0x00, 0x4d, + 0x55, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x03, 0x00, + 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x2d, + 0x03, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, + 0x04, 0x2e, 0x03, 0x00, 0x00, 0x4d, 0x58, 0x00, + 0x00, 0x80, 0x04, 0x2f, 0x03, 0x00, 0x00, 0x4d, + 0x59, 0x00, 0x00, 0x80, 0x04, 0x30, 0x03, 0x00, + 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x31, + 0x03, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, + 0x04, 0x32, 0x03, 0x00, 0x00, 0x4d, 0x5c, 0x00, + 0x00, 0x80, 0x04, 0x33, 0x03, 0x00, 0x00, 0x4d, + 0x5d, 0x00, 0x00, 0x80, 0x04, 0x34, 0x03, 0x00, + 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x35, + 0x03, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, + 0x04, 0x36, 0x03, 0x00, 0x00, 0x4d, 0x60, 0x00, + 0x00, 0x80, 0x04, 0x37, 0x03, 0x00, 0x00, 0x4d, + 0x61, 0x00, 0x00, 0x80, 0x04, 0x38, 0x03, 0x00, + 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x39, + 0x03, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, + 0x04, 0x3a, 0x03, 0x00, 0x00, 0x4d, 0x64, 0x00, + 0x00, 0x80, 0x04, 0x3b, 0x03, 0x00, 0x00, 0x4d, + 0x65, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x03, 0x00, + 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x3d, + 0x03, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, + 0x04, 0x3e, 0x03, 0x00, 0x00, 0x4d, 0x68, 0x00, + 0x00, 0x80, 0x04, 0x3f, 0x03, 0x00, 0x00, 0x4d, + 0x69, 0x00, 0x00, 0x80, 0x04, 0x40, 0x03, 0x00, + 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x41, + 0x03, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, + 0x04, 0x42, 0x03, 0x00, 0x00, 0x4d, 0x6c, 0x00, + 0x00, 0x80, 0x04, 0x43, 0x03, 0x00, 0x00, 0x4d, + 0x6d, 0x00, 0x00, 0x80, 0x04, 0x44, 0x03, 0x00, + 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x45, + 0x03, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, + 0x04, 0x46, 0x03, 0x00, 0x00, 0x4d, 0x70, 0x00, + 0x00, 0x80, 0x04, 0x47, 0x03, 0x00, 0x00, 0x4d, + 0x71, 0x00, 0x00, 0x80, 0x04, 0x48, 0x03, 0x00, + 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x49, + 0x03, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, + 0x04, 0x4a, 0x03, 0x00, 0x00, 0x4d, 0x74, 0x00, + 0x00, 0x80, 0x04, 0x4b, 0x03, 0x00, 0x00, 0x4d, + 0x75, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x03, 0x00, + 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x4d, + 0x03, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, + 0x04, 0x4e, 0x03, 0x00, 0x00, 0x4d, 0x78, 0x00, + 0x00, 0x80, 0x04, 0x4f, 0x03, 0x00, 0x00, 0x4d, + 0x79, 0x00, 0x00, 0x80, 0x04, 0x50, 0x03, 0x00, + 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x51, + 0x03, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, + 0x04, 0x52, 0x03, 0x00, 0x00, 0x4d, 0x7c, 0x00, + 0x00, 0x80, 0x04, 0x53, 0x03, 0x00, 0x00, 0x4d, + 0x7d, 0x00, 0x00, 0x80, 0x04, 0x54, 0x03, 0x00, + 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x55, + 0x03, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, + 0x04, 0x56, 0x03, 0x00, 0x00, 0x4d, 0x80, 0x00, + 0x00, 0x80, 0x04, 0x57, 0x03, 0x00, 0x00, 0x4d, + 0x81, 0x00, 0x00, 0x80, 0x04, 0x58, 0x03, 0x00, + 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x59, + 0x03, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, + 0x04, 0x5a, 0x03, 0x00, 0x00, 0x4d, 0x84, 0x00, + 0x00, 0x80, 0x04, 0x5b, 0x03, 0x00, 0x00, 0x4d, + 0x85, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x03, 0x00, + 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x5d, + 0x03, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, + 0x04, 0x5e, 0x03, 0x00, 0x00, 0x4d, 0x88, 0x00, + 0x00, 0x80, 0x04, 0x5f, 0x03, 0x00, 0x00, 0x4d, + 0x89, 0x00, 0x00, 0x80, 0x04, 0x60, 0x03, 0x00, + 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x61, + 0x03, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, + 0x04, 0x62, 0x03, 0x00, 0x00, 0x4d, 0x8c, 0x00, + 0x00, 0x80, 0x04, 0x63, 0x03, 0x00, 0x00, 0x4d, + 0x8d, 0x00, 0x00, 0x80, 0x04, 0x64, 0x03, 0x00, + 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x65, + 0x03, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, + 0x04, 0x66, 0x03, 0x00, 0x00, 0x4d, 0x90, 0x00, + 0x00, 0x80, 0x04, 0x67, 0x03, 0x00, 0x00, 0x4d, + 0x91, 0x00, 0x00, 0x80, 0x04, 0x68, 0x03, 0x00, + 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x69, + 0x03, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, + 0x04, 0x6a, 0x03, 0x00, 0x00, 0x4d, 0x94, 0x00, + 0x00, 0x80, 0x04, 0x6b, 0x03, 0x00, 0x00, 0x4d, + 0x95, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x03, 0x00, + 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x6d, + 0x03, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, + 0x04, 0x6e, 0x03, 0x00, 0x00, 0x4d, 0x98, 0x00, + 0x00, 0x80, 0x04, 0x6f, 0x03, 0x00, 0x00, 0x4d, + 0x99, 0x00, 0x00, 0x80, 0x04, 0x70, 0x03, 0x00, + 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x71, + 0x03, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, + 0x04, 0x72, 0x03, 0x00, 0x00, 0x4d, 0x9c, 0x00, + 0x00, 0x80, 0x04, 0x73, 0x03, 0x00, 0x00, 0x4d, + 0x9d, 0x00, 0x00, 0x80, 0x04, 0x74, 0x03, 0x00, + 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x75, + 0x03, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, + 0x04, 0x76, 0x03, 0x00, 0x00, 0x4d, 0xa0, 0x00, + 0x00, 0x80, 0x04, 0x77, 0x03, 0x00, 0x00, 0x4d, + 0xa1, 0x00, 0x00, 0x80, 0x04, 0x78, 0x03, 0x00, + 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x79, + 0x03, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, + 0x04, 0x7a, 0x03, 0x00, 0x00, 0x4d, 0xa4, 0x00, + 0x00, 0x80, 0x04, 0x7b, 0x03, 0x00, 0x00, 0x4d, + 0xa5, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x03, 0x00, + 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x7d, + 0x03, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, + 0x04, 0x7e, 0x03, 0x00, 0x00, 0x4d, 0xa8, 0x00, + 0x00, 0x80, 0x04, 0x7f, 0x03, 0x00, 0x00, 0x4d, + 0xa9, 0x00, 0x00, 0x80, 0x04, 0x80, 0x03, 0x00, + 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x81, + 0x03, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, + 0x04, 0x82, 0x03, 0x00, 0x00, 0x4d, 0xac, 0x00, + 0x00, 0x80, 0x04, 0x83, 0x03, 0x00, 0x00, 0x4d, + 0xad, 0x00, 0x00, 0x80, 0x04, 0x84, 0x03, 0x00, + 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x85, + 0x03, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, + 0x04, 0x86, 0x03, 0x00, 0x00, 0x4d, 0xb0, 0x00, + 0x00, 0x80, 0x04, 0x87, 0x03, 0x00, 0x00, 0x4d, + 0xb1, 0x00, 0x00, 0x80, 0x04, 0x88, 0x03, 0x00, + 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0x89, + 0x03, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, + 0x04, 0x8a, 0x03, 0x00, 0x00, 0x4d, 0xb4, 0x00, + 0x00, 0x80, 0x04, 0x8b, 0x03, 0x00, 0x00, 0x4d, + 0xb5, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x03, 0x00, + 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0x8d, + 0x03, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, + 0x04, 0x8e, 0x03, 0x00, 0x00, 0x4d, 0xb8, 0x00, + 0x00, 0x80, 0x04, 0x8f, 0x03, 0x00, 0x00, 0x4d, + 0xb9, 0x00, 0x00, 0x80, 0x04, 0x90, 0x03, 0x00, + 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0x91, + 0x03, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, + 0x04, 0x92, 0x03, 0x00, 0x00, 0x4d, 0xbc, 0x00, + 0x00, 0x80, 0x04, 0x93, 0x03, 0x00, 0x00, 0x4d, + 0xbd, 0x00, 0x00, 0x80, 0x04, 0x94, 0x03, 0x00, + 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0x95, + 0x03, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, + 0x04, 0x96, 0x03, 0x00, 0x00, 0x4d, 0xc0, 0x00, + 0x00, 0x80, 0x04, 0x97, 0x03, 0x00, 0x00, 0x4d, + 0xc1, 0x00, 0x00, 0x80, 0x04, 0x98, 0x03, 0x00, + 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0x99, + 0x03, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, + 0x04, 0x9a, 0x03, 0x00, 0x00, 0x4d, 0xc4, 0x00, + 0x00, 0x80, 0x04, 0x9b, 0x03, 0x00, 0x00, 0x4d, + 0xc5, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x03, 0x00, + 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0x9d, + 0x03, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, + 0x04, 0x9e, 0x03, 0x00, 0x00, 0x4d, 0xc8, 0x00, + 0x00, 0x80, 0x04, 0x9f, 0x03, 0x00, 0x00, 0x4d, + 0xc9, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x03, 0x00, + 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xa1, + 0x03, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, + 0x04, 0xa2, 0x03, 0x00, 0x00, 0x4d, 0xcc, 0x00, + 0x00, 0x80, 0x04, 0xa3, 0x03, 0x00, 0x00, 0x4d, + 0xcd, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x03, 0x00, + 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xa5, + 0x03, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, + 0x04, 0xa6, 0x03, 0x00, 0x00, 0x4d, 0xd0, 0x00, + 0x00, 0x80, 0x04, 0xa7, 0x03, 0x00, 0x00, 0x4d, + 0xd1, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x03, 0x00, + 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xa9, + 0x03, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, + 0x04, 0xaa, 0x03, 0x00, 0x00, 0x4d, 0xd4, 0x00, + 0x00, 0x80, 0x04, 0xab, 0x03, 0x00, 0x00, 0x4d, + 0xd5, 0x00, 0x00, 0x80, 0x04, 0xac, 0x03, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xad, + 0x03, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, + 0x04, 0xae, 0x03, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x80, 0x04, 0xaf, 0x03, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x03, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xb1, + 0x03, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, + 0x04, 0xb2, 0x03, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x80, 0x04, 0xb3, 0x03, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x03, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xb5, + 0x03, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, + 0x04, 0xb6, 0x03, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x80, 0x04, 0xb7, 0x03, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x03, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xb9, + 0x03, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, + 0x04, 0xba, 0x03, 0x00, 0x00, 0x4d, 0xe4, 0x00, + 0x00, 0x80, 0x04, 0xbb, 0x03, 0x00, 0x00, 0x4d, + 0xe5, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x03, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xbd, + 0x03, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, + 0x04, 0xbe, 0x03, 0x00, 0x00, 0x4d, 0xe8, 0x00, + 0x00, 0x80, 0x04, 0xbf, 0x03, 0x00, 0x00, 0x4d, + 0xe9, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x03, 0x00, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0xc1, + 0x03, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x84, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x4d, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x4d, 0x88, 0x01, 0x00, 0x00, 0x4d, + 0x89, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x7d, 0xbe, 0x7e, 0xbe, + 0x7f, 0xbe, 0x80, 0xbe, 0x81, 0xbe, 0x82, 0xbe, + 0x83, 0xbe, 0x84, 0xbe, 0x85, 0xbe, 0x86, 0xbe, + 0x87, 0xbe, 0x88, 0x26, 0x0c, 0x00, 0x4d, 0x57, + 0x01, 0x00, 0x00, 0x04, 0xc2, 0x03, 0x00, 0x00, + 0x04, 0xc3, 0x03, 0x00, 0x00, 0x04, 0xc4, 0x03, + 0x00, 0x00, 0x04, 0xc5, 0x03, 0x00, 0x00, 0x04, + 0xc6, 0x03, 0x00, 0x00, 0x04, 0xc7, 0x03, 0x00, + 0x00, 0x04, 0xc8, 0x03, 0x00, 0x00, 0x04, 0xc9, + 0x03, 0x00, 0x00, 0x04, 0xca, 0x03, 0x00, 0x00, + 0x04, 0xcb, 0x03, 0x00, 0x00, 0x04, 0xcc, 0x03, + 0x00, 0x00, 0x04, 0xcd, 0x03, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xc2, 0x03, 0x00, 0x00, 0x04, 0xc3, 0x03, 0x00, + 0x00, 0x04, 0xc4, 0x03, 0x00, 0x00, 0x04, 0xc5, + 0x03, 0x00, 0x00, 0x04, 0xc6, 0x03, 0x00, 0x00, + 0x04, 0xc7, 0x03, 0x00, 0x00, 0x04, 0xc8, 0x03, + 0x00, 0x00, 0x04, 0xc9, 0x03, 0x00, 0x00, 0x04, + 0xca, 0x03, 0x00, 0x00, 0x04, 0xcb, 0x03, 0x00, + 0x00, 0x04, 0xcc, 0x03, 0x00, 0x00, 0x04, 0xcd, + 0x03, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x6c, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, + 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xce, 0x03, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x57, 0x01, 0x00, 0x00, 0x04, 0xce, 0x03, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xce, 0x03, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x84, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x4d, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x4d, 0x88, 0x01, 0x00, + 0x00, 0x4d, 0x89, 0x01, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x6c, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, + 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x82, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xcf, + 0x03, 0x00, 0x00, 0x04, 0xd0, 0x03, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0x57, 0x01, 0x00, 0x00, + 0x04, 0xcf, 0x03, 0x00, 0x00, 0x04, 0xd0, 0x03, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xcf, 0x03, 0x00, 0x00, 0x04, + 0xd0, 0x03, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x85, 0x01, 0x00, 0x00, 0x4d, + 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, + 0x00, 0x4d, 0x88, 0x01, 0x00, 0x00, 0x4d, 0x89, + 0x01, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, + 0x4d, 0xd1, 0x03, 0x00, 0x00, 0x4d, 0xd2, 0x03, + 0x00, 0x00, 0x0b, 0x04, 0xd3, 0x03, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xd4, 0x03, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0xd5, 0x03, 0x00, 0x00, 0x4d, + 0xd6, 0x03, 0x00, 0x00, 0x04, 0xd7, 0x03, 0x00, + 0x00, 0x4d, 0xd8, 0x03, 0x00, 0x00, 0x4d, 0xd9, + 0x03, 0x00, 0x00, 0x0b, 0x04, 0xda, 0x03, 0x00, + 0x00, 0x4d, 0xd6, 0x03, 0x00, 0x00, 0x04, 0xdb, + 0x03, 0x00, 0x00, 0x4d, 0xd8, 0x03, 0x00, 0x00, + 0x4d, 0xdc, 0x03, 0x00, 0x00, 0x0b, 0x04, 0xdd, + 0x03, 0x00, 0x00, 0x4d, 0xd6, 0x03, 0x00, 0x00, + 0x04, 0xde, 0x03, 0x00, 0x00, 0x4d, 0xd8, 0x03, + 0x00, 0x00, 0x4d, 0xdf, 0x03, 0x00, 0x00, 0xb6, + 0x4d, 0xe0, 0x03, 0x00, 0x00, 0x4d, 0xe1, 0x03, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xe2, 0x03, 0x00, + 0x00, 0x4d, 0xd9, 0x03, 0x00, 0x00, 0x04, 0xe3, + 0x03, 0x00, 0x00, 0x4d, 0xe4, 0x03, 0x00, 0x00, + 0x04, 0xe5, 0x03, 0x00, 0x00, 0x4d, 0xe6, 0x03, + 0x00, 0x00, 0x04, 0xe7, 0x03, 0x00, 0x00, 0x4d, + 0xe8, 0x03, 0x00, 0x00, 0x04, 0xe9, 0x03, 0x00, + 0x00, 0x4d, 0xea, 0x03, 0x00, 0x00, 0x04, 0xeb, + 0x03, 0x00, 0x00, 0x4d, 0xec, 0x03, 0x00, 0x00, + 0x04, 0xed, 0x03, 0x00, 0x00, 0x4d, 0xee, 0x03, + 0x00, 0x00, 0x4d, 0xef, 0x03, 0x00, 0x00, 0x0b, + 0x04, 0xe2, 0x03, 0x00, 0x00, 0x4d, 0xd9, 0x03, + 0x00, 0x00, 0x04, 0xe3, 0x03, 0x00, 0x00, 0x4d, + 0xe4, 0x03, 0x00, 0x00, 0x04, 0xe5, 0x03, 0x00, + 0x00, 0x4d, 0xe6, 0x03, 0x00, 0x00, 0x04, 0xe7, + 0x03, 0x00, 0x00, 0x4d, 0xe8, 0x03, 0x00, 0x00, + 0x04, 0xe9, 0x03, 0x00, 0x00, 0x4d, 0xea, 0x03, + 0x00, 0x00, 0x04, 0xeb, 0x03, 0x00, 0x00, 0x4d, + 0xec, 0x03, 0x00, 0x00, 0x04, 0xed, 0x03, 0x00, + 0x00, 0x4d, 0xee, 0x03, 0x00, 0x00, 0x4d, 0xd3, + 0x03, 0x00, 0x00, 0x4d, 0xf0, 0x03, 0x00, 0x00, + 0x0b, 0x04, 0xf1, 0x03, 0x00, 0x00, 0x4d, 0xf2, + 0x03, 0x00, 0x00, 0x04, 0xf3, 0x03, 0x00, 0x00, + 0x4d, 0xf4, 0x03, 0x00, 0x00, 0x04, 0xf5, 0x03, + 0x00, 0x00, 0x4d, 0xf6, 0x03, 0x00, 0x00, 0x04, + 0xf7, 0x03, 0x00, 0x00, 0x4d, 0xf8, 0x03, 0x00, + 0x00, 0x04, 0xf9, 0x03, 0x00, 0x00, 0x4d, 0xfa, + 0x03, 0x00, 0x00, 0x04, 0xfb, 0x03, 0x00, 0x00, + 0x4d, 0xfc, 0x03, 0x00, 0x00, 0x04, 0xfd, 0x03, + 0x00, 0x00, 0x4d, 0xfe, 0x03, 0x00, 0x00, 0x04, + 0xff, 0x03, 0x00, 0x00, 0x4d, 0x00, 0x04, 0x00, + 0x00, 0x04, 0x01, 0x04, 0x00, 0x00, 0x4d, 0x02, + 0x04, 0x00, 0x00, 0x04, 0x03, 0x04, 0x00, 0x00, + 0x4d, 0x04, 0x04, 0x00, 0x00, 0x04, 0x05, 0x04, + 0x00, 0x00, 0x4d, 0x06, 0x04, 0x00, 0x00, 0x04, + 0x07, 0x04, 0x00, 0x00, 0x4d, 0x08, 0x04, 0x00, + 0x00, 0x04, 0x09, 0x04, 0x00, 0x00, 0x4d, 0x0a, + 0x04, 0x00, 0x00, 0x04, 0x0b, 0x04, 0x00, 0x00, + 0x4d, 0x0c, 0x04, 0x00, 0x00, 0x04, 0x0d, 0x04, + 0x00, 0x00, 0x4d, 0x0e, 0x04, 0x00, 0x00, 0x04, + 0x0f, 0x04, 0x00, 0x00, 0x4d, 0x10, 0x04, 0x00, + 0x00, 0x04, 0x11, 0x04, 0x00, 0x00, 0x4d, 0x12, + 0x04, 0x00, 0x00, 0x04, 0x13, 0x04, 0x00, 0x00, + 0x4d, 0x14, 0x04, 0x00, 0x00, 0x04, 0x15, 0x04, + 0x00, 0x00, 0x4d, 0x16, 0x04, 0x00, 0x00, 0x04, + 0x17, 0x04, 0x00, 0x00, 0x4d, 0x18, 0x04, 0x00, + 0x00, 0x04, 0x19, 0x04, 0x00, 0x00, 0x4d, 0x1a, + 0x04, 0x00, 0x00, 0x4d, 0x1b, 0x04, 0x00, 0x00, + 0x4d, 0x45, 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, + 0xcc, 0x28, 0xb8, 0x10, 0x01, 0x00, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, + 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_hr_size = 31550; + +const uint8_t intl_hr[31550] = { + 0x01, 0xa9, 0x06, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x68, 0x72, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x0e, + 0x7b, 0x31, 0x7d, 0x20, 0x7b, 0x30, 0x7d, 0x0a, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, 0x65, + 0x64, 0x69, 0x75, 0x6d, 0x16, 0x7b, 0x31, 0x7d, + 0x20, 0x27, 0x75, 0x27, 0x20, 0x7b, 0x30, 0x7d, + 0x08, 0x66, 0x75, 0x6c, 0x6c, 0x08, 0x6c, 0x6f, + 0x6e, 0x67, 0x04, 0x64, 0x2e, 0x02, 0x64, 0x06, + 0x63, 0x63, 0x63, 0x02, 0x45, 0x0a, 0x45, 0x2c, + 0x20, 0x64, 0x2e, 0x04, 0x45, 0x64, 0x10, 0x45, + 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x06, + 0x45, 0x68, 0x6d, 0x0e, 0x45, 0x20, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x06, 0x45, 0x48, 0x6d, 0x16, + 0x45, 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x61, 0x08, 0x45, 0x68, 0x6d, 0x73, + 0x14, 0x45, 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x08, 0x45, 0x48, 0x6d, 0x73, + 0x08, 0x79, 0x2e, 0x20, 0x47, 0x04, 0x47, 0x79, + 0x10, 0x4c, 0x4c, 0x4c, 0x20, 0x79, 0x2e, 0x20, + 0x47, 0x0a, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x16, + 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, + 0x2e, 0x20, 0x47, 0x0c, 0x47, 0x79, 0x4d, 0x4d, + 0x4d, 0x64, 0x1c, 0x45, 0x2c, 0x20, 0x64, 0x2e, + 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x2e, 0x20, + 0x47, 0x0e, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x45, + 0x64, 0x06, 0x68, 0x20, 0x61, 0x02, 0x68, 0x04, + 0x48, 0x48, 0x02, 0x48, 0x0e, 0x68, 0x68, 0x3a, + 0x6d, 0x6d, 0x20, 0x61, 0x04, 0x68, 0x6d, 0x0a, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x04, 0x48, 0x6d, + 0x14, 0x68, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x61, 0x06, 0x68, 0x6d, 0x73, 0x10, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x06, 0x48, 0x6d, 0x73, 0x16, 0x68, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x20, 0x76, + 0x08, 0x68, 0x6d, 0x73, 0x76, 0x14, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x76, + 0x08, 0x48, 0x6d, 0x73, 0x76, 0x10, 0x68, 0x3a, + 0x6d, 0x6d, 0x20, 0x61, 0x20, 0x76, 0x06, 0x68, + 0x6d, 0x76, 0x0e, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x20, 0x76, 0x06, 0x48, 0x6d, 0x76, 0x04, 0x4c, + 0x2e, 0x02, 0x4d, 0x0c, 0x64, 0x64, 0x2e, 0x4d, + 0x4d, 0x2e, 0x04, 0x4d, 0x64, 0x12, 0x45, 0x2c, + 0x20, 0x64, 0x64, 0x2e, 0x4d, 0x4d, 0x2e, 0x06, + 0x4d, 0x45, 0x64, 0x0e, 0x64, 0x64, 0x2e, 0x20, + 0x4d, 0x4d, 0x2e, 0x08, 0x4d, 0x4d, 0x64, 0x64, + 0x06, 0x4c, 0x4c, 0x4c, 0x06, 0x4d, 0x4d, 0x4d, + 0x0c, 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x08, + 0x4d, 0x4d, 0x4d, 0x64, 0x12, 0x45, 0x2c, 0x20, + 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x0a, 0x4d, + 0x4d, 0x4d, 0x45, 0x64, 0x0e, 0x64, 0x2e, 0x20, + 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, + 0x4d, 0x64, 0x14, 0x45, 0x2c, 0x20, 0x64, 0x2e, + 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x0c, 0x4d, 0x4d, + 0x4d, 0x4d, 0x45, 0x64, 0x0a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x04, 0x6d, 0x73, 0x04, 0x79, 0x2e, + 0x02, 0x79, 0x0a, 0x4d, 0x4d, 0x2e, 0x79, 0x2e, + 0x04, 0x79, 0x4d, 0x10, 0x64, 0x64, 0x2e, 0x4d, + 0x4d, 0x2e, 0x79, 0x2e, 0x06, 0x79, 0x4d, 0x64, + 0x16, 0x45, 0x2c, 0x20, 0x64, 0x64, 0x2e, 0x4d, + 0x4d, 0x2e, 0x79, 0x2e, 0x08, 0x79, 0x4d, 0x45, + 0x64, 0x0c, 0x4d, 0x4d, 0x2e, 0x20, 0x79, 0x2e, + 0x06, 0x79, 0x4d, 0x4d, 0x0c, 0x4c, 0x4c, 0x4c, + 0x20, 0x79, 0x2e, 0x08, 0x79, 0x4d, 0x4d, 0x4d, + 0x12, 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x20, + 0x79, 0x2e, 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x64, + 0x18, 0x45, 0x2c, 0x20, 0x64, 0x2e, 0x20, 0x4d, + 0x4d, 0x4d, 0x20, 0x79, 0x2e, 0x0c, 0x79, 0x4d, + 0x4d, 0x4d, 0x45, 0x64, 0x0e, 0x4c, 0x4c, 0x4c, + 0x4c, 0x20, 0x79, 0x2e, 0x0a, 0x79, 0x4d, 0x4d, + 0x4d, 0x4d, 0x0c, 0x51, 0x51, 0x51, 0x20, 0x79, + 0x2e, 0x08, 0x79, 0x51, 0x51, 0x51, 0x0e, 0x51, + 0x51, 0x51, 0x51, 0x20, 0x79, 0x2e, 0x0a, 0x79, + 0x51, 0x51, 0x51, 0x51, 0x20, 0x61, 0x76, 0x61, + 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x73, 0x20, 0x45, 0x45, + 0x45, 0x45, 0x2c, 0x20, 0x64, 0x2e, 0x20, 0x4d, + 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x2e, 0x14, 0x79, + 0x4d, 0x4d, 0x4d, 0x4d, 0x45, 0x45, 0x45, 0x45, + 0x64, 0x14, 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, + 0x4d, 0x20, 0x79, 0x2e, 0x0c, 0x79, 0x4d, 0x4d, + 0x4d, 0x4d, 0x64, 0x16, 0x64, 0x61, 0x74, 0x65, + 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x1a, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x7a, 0x7a, 0x7a, 0x7a, 0x12, 0x68, 0x6d, + 0x6d, 0x73, 0x73, 0x7a, 0x7a, 0x7a, 0x7a, 0x14, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x7a, 0x08, 0x68, 0x6d, 0x73, 0x7a, 0x16, + 0x74, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x73, 0x0e, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x73, 0x04, 0x31, 0x2e, 0x04, 0x32, + 0x2e, 0x04, 0x33, 0x2e, 0x04, 0x34, 0x2e, 0x04, + 0x35, 0x2e, 0x04, 0x36, 0x2e, 0x04, 0x37, 0x2e, + 0x04, 0x38, 0x2e, 0x04, 0x39, 0x2e, 0x06, 0x31, + 0x30, 0x2e, 0x06, 0x31, 0x31, 0x2e, 0x06, 0x31, + 0x32, 0x2e, 0x0c, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x06, 0x73, 0x69, 0x6a, 0x08, 0x76, 0x65, + 0x6c, 0x6a, 0x07, 0x6f, 0x00, 0x7e, 0x01, 0x75, + 0x00, 0x06, 0x74, 0x72, 0x61, 0x06, 0x73, 0x76, + 0x69, 0x06, 0x6c, 0x69, 0x70, 0x06, 0x73, 0x72, + 0x70, 0x06, 0x6b, 0x6f, 0x6c, 0x06, 0x72, 0x75, + 0x6a, 0x06, 0x6c, 0x69, 0x73, 0x06, 0x73, 0x74, + 0x75, 0x06, 0x70, 0x72, 0x6f, 0x11, 0x73, 0x00, + 0x69, 0x00, 0x6a, 0x00, 0x65, 0x00, 0x0d, 0x01, + 0x6e, 0x00, 0x6a, 0x00, 0x61, 0x00, 0x0f, 0x76, + 0x00, 0x65, 0x00, 0x6c, 0x00, 0x6a, 0x00, 0x61, + 0x00, 0x0d, 0x01, 0x65, 0x00, 0x0d, 0x6f, 0x00, + 0x7e, 0x01, 0x75, 0x00, 0x6a, 0x00, 0x6b, 0x00, + 0x61, 0x00, 0x0e, 0x74, 0x72, 0x61, 0x76, 0x6e, + 0x6a, 0x61, 0x0e, 0x73, 0x76, 0x69, 0x62, 0x6e, + 0x6a, 0x61, 0x0c, 0x6c, 0x69, 0x70, 0x6e, 0x6a, + 0x61, 0x0c, 0x73, 0x72, 0x70, 0x6e, 0x6a, 0x61, + 0x10, 0x6b, 0x6f, 0x6c, 0x6f, 0x76, 0x6f, 0x7a, + 0x61, 0x0a, 0x72, 0x75, 0x6a, 0x6e, 0x61, 0x12, + 0x6c, 0x69, 0x73, 0x74, 0x6f, 0x70, 0x61, 0x64, + 0x61, 0x12, 0x73, 0x74, 0x75, 0x64, 0x65, 0x6e, + 0x6f, 0x67, 0x61, 0x10, 0x70, 0x72, 0x6f, 0x73, + 0x69, 0x6e, 0x63, 0x61, 0x0c, 0x6d, 0x6f, 0x6e, + 0x74, 0x68, 0x73, 0x02, 0x4e, 0x02, 0x50, 0x02, + 0x55, 0x02, 0x53, 0x03, 0x0c, 0x01, 0x06, 0x6e, + 0x65, 0x64, 0x06, 0x70, 0x6f, 0x6e, 0x06, 0x75, + 0x74, 0x6f, 0x06, 0x73, 0x72, 0x69, 0x07, 0x0d, + 0x01, 0x65, 0x00, 0x74, 0x00, 0x06, 0x70, 0x65, + 0x74, 0x06, 0x73, 0x75, 0x62, 0x10, 0x6e, 0x65, + 0x64, 0x6a, 0x65, 0x6c, 0x6a, 0x61, 0x16, 0x70, + 0x6f, 0x6e, 0x65, 0x64, 0x6a, 0x65, 0x6c, 0x6a, + 0x61, 0x6b, 0x0c, 0x75, 0x74, 0x6f, 0x72, 0x61, + 0x6b, 0x0e, 0x73, 0x72, 0x69, 0x6a, 0x65, 0x64, + 0x61, 0x11, 0x0d, 0x01, 0x65, 0x00, 0x74, 0x00, + 0x76, 0x00, 0x72, 0x00, 0x74, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x0a, 0x70, 0x65, 0x74, 0x61, 0x6b, + 0x0c, 0x73, 0x75, 0x62, 0x6f, 0x74, 0x61, 0x08, + 0x64, 0x61, 0x79, 0x73, 0x04, 0x42, 0x45, 0x08, + 0x65, 0x72, 0x61, 0x73, 0x04, 0x41, 0x4d, 0x04, + 0x61, 0x6d, 0x04, 0x50, 0x4d, 0x04, 0x70, 0x6d, + 0x14, 0x64, 0x61, 0x79, 0x50, 0x65, 0x72, 0x69, + 0x6f, 0x64, 0x73, 0x06, 0x4d, 0x30, 0x31, 0x06, + 0x4d, 0x30, 0x32, 0x06, 0x4d, 0x30, 0x33, 0x06, + 0x4d, 0x30, 0x34, 0x06, 0x4d, 0x30, 0x35, 0x06, + 0x4d, 0x30, 0x36, 0x06, 0x4d, 0x30, 0x37, 0x06, + 0x4d, 0x30, 0x38, 0x06, 0x4d, 0x30, 0x39, 0x06, + 0x4d, 0x31, 0x30, 0x06, 0x4d, 0x31, 0x31, 0x06, + 0x4d, 0x31, 0x32, 0x08, 0x54, 0x6f, 0x75, 0x74, + 0x08, 0x42, 0x61, 0x62, 0x61, 0x0a, 0x48, 0x61, + 0x74, 0x6f, 0x72, 0x0a, 0x4b, 0x69, 0x61, 0x68, + 0x6b, 0x08, 0x54, 0x6f, 0x62, 0x61, 0x0c, 0x41, + 0x6d, 0x73, 0x68, 0x69, 0x72, 0x10, 0x42, 0x61, + 0x72, 0x61, 0x6d, 0x68, 0x61, 0x74, 0x12, 0x42, + 0x61, 0x72, 0x61, 0x6d, 0x6f, 0x75, 0x64, 0x61, + 0x0e, 0x42, 0x61, 0x73, 0x68, 0x61, 0x6e, 0x73, + 0x0a, 0x50, 0x61, 0x6f, 0x6e, 0x61, 0x08, 0x45, + 0x70, 0x65, 0x70, 0x0a, 0x4d, 0x65, 0x73, 0x72, + 0x61, 0x0a, 0x4e, 0x61, 0x73, 0x69, 0x65, 0x08, + 0x45, 0x52, 0x41, 0x30, 0x08, 0x45, 0x52, 0x41, + 0x31, 0x10, 0x4d, 0x65, 0x73, 0x6b, 0x65, 0x72, + 0x65, 0x6d, 0x0c, 0x54, 0x65, 0x6b, 0x65, 0x6d, + 0x74, 0x0a, 0x48, 0x65, 0x64, 0x61, 0x72, 0x0c, + 0x54, 0x61, 0x68, 0x73, 0x61, 0x73, 0x06, 0x54, + 0x65, 0x72, 0x0e, 0x59, 0x65, 0x6b, 0x61, 0x74, + 0x69, 0x74, 0x0e, 0x4d, 0x65, 0x67, 0x61, 0x62, + 0x69, 0x74, 0x0c, 0x4d, 0x69, 0x61, 0x7a, 0x69, + 0x61, 0x0c, 0x47, 0x65, 0x6e, 0x62, 0x6f, 0x74, + 0x08, 0x53, 0x65, 0x6e, 0x65, 0x0a, 0x48, 0x61, + 0x6d, 0x6c, 0x65, 0x0e, 0x4e, 0x65, 0x68, 0x61, + 0x73, 0x73, 0x65, 0x0e, 0x50, 0x61, 0x67, 0x75, + 0x6d, 0x65, 0x6e, 0x0e, 0x70, 0x72, 0x2e, 0x6e, + 0x2e, 0x65, 0x2e, 0x04, 0x41, 0x44, 0x12, 0x70, + 0x72, 0x2e, 0x20, 0x6e, 0x2e, 0x20, 0x65, 0x2e, + 0x08, 0x6e, 0x2e, 0x65, 0x2e, 0x0e, 0x70, 0x72, + 0x2e, 0x20, 0x4b, 0x72, 0x2e, 0x0c, 0x70, 0x2e, + 0x20, 0x4b, 0x72, 0x2e, 0x18, 0x70, 0x72, 0x69, + 0x6a, 0x65, 0x20, 0x4b, 0x72, 0x69, 0x73, 0x74, + 0x61, 0x1c, 0x70, 0x6f, 0x73, 0x6c, 0x69, 0x6a, + 0x65, 0x20, 0x4b, 0x72, 0x69, 0x73, 0x74, 0x61, + 0x0c, 0x54, 0x69, 0x73, 0x68, 0x72, 0x69, 0x0e, + 0x48, 0x65, 0x73, 0x68, 0x76, 0x61, 0x6e, 0x0c, + 0x4b, 0x69, 0x73, 0x6c, 0x65, 0x76, 0x0a, 0x54, + 0x65, 0x76, 0x65, 0x74, 0x0c, 0x53, 0x68, 0x65, + 0x76, 0x61, 0x74, 0x0c, 0x41, 0x64, 0x61, 0x72, + 0x20, 0x49, 0x08, 0x41, 0x64, 0x61, 0x72, 0x0a, + 0x4e, 0x69, 0x73, 0x61, 0x6e, 0x08, 0x49, 0x79, + 0x61, 0x72, 0x0a, 0x53, 0x69, 0x76, 0x61, 0x6e, + 0x0a, 0x54, 0x61, 0x6d, 0x75, 0x7a, 0x04, 0x41, + 0x76, 0x08, 0x45, 0x6c, 0x75, 0x6c, 0x0e, 0x41, + 0x64, 0x61, 0x72, 0x20, 0x49, 0x49, 0x0e, 0x43, + 0x68, 0x61, 0x69, 0x74, 0x72, 0x61, 0x10, 0x56, + 0x61, 0x69, 0x73, 0x61, 0x6b, 0x68, 0x61, 0x10, + 0x4a, 0x79, 0x61, 0x69, 0x73, 0x74, 0x68, 0x61, + 0x0c, 0x41, 0x73, 0x61, 0x64, 0x68, 0x61, 0x0e, + 0x53, 0x72, 0x61, 0x76, 0x61, 0x6e, 0x61, 0x0c, + 0x42, 0x68, 0x61, 0x64, 0x72, 0x61, 0x0c, 0x41, + 0x73, 0x76, 0x69, 0x6e, 0x61, 0x0e, 0x4b, 0x61, + 0x72, 0x74, 0x69, 0x6b, 0x61, 0x14, 0x41, 0x67, + 0x72, 0x61, 0x68, 0x61, 0x79, 0x61, 0x6e, 0x61, + 0x0a, 0x50, 0x61, 0x75, 0x73, 0x61, 0x0a, 0x4d, + 0x61, 0x67, 0x68, 0x61, 0x10, 0x50, 0x68, 0x61, + 0x6c, 0x67, 0x75, 0x6e, 0x61, 0x08, 0x53, 0x61, + 0x6b, 0x61, 0x08, 0x4d, 0x75, 0x68, 0x2e, 0x08, + 0x53, 0x61, 0x66, 0x2e, 0x0c, 0x52, 0x61, 0x62, + 0x2e, 0x20, 0x49, 0x0e, 0x52, 0x61, 0x62, 0x2e, + 0x20, 0x49, 0x49, 0x0c, 0x4a, 0x75, 0x6d, 0x2e, + 0x20, 0x49, 0x0e, 0x4a, 0x75, 0x6d, 0x2e, 0x20, + 0x49, 0x49, 0x08, 0x52, 0x61, 0x6a, 0x2e, 0x08, + 0x53, 0x68, 0x61, 0x2e, 0x08, 0x52, 0x61, 0x6d, + 0x2e, 0x0a, 0x53, 0x68, 0x61, 0x77, 0x2e, 0x11, + 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, + 0x6c, 0x00, 0x2d, 0x00, 0x51, 0x00, 0x2e, 0x00, + 0x11, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, + 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x48, 0x00, 0x2e, + 0x00, 0x10, 0x4d, 0x75, 0x68, 0x61, 0x72, 0x72, + 0x61, 0x6d, 0x0a, 0x53, 0x61, 0x66, 0x61, 0x72, + 0x0f, 0x52, 0x00, 0x61, 0x00, 0x62, 0x00, 0x69, + 0x00, 0xbb, 0x02, 0x20, 0x00, 0x49, 0x00, 0x11, + 0x52, 0x00, 0x61, 0x00, 0x62, 0x00, 0x69, 0x00, + 0xbb, 0x02, 0x20, 0x00, 0x49, 0x00, 0x49, 0x00, + 0x10, 0x4a, 0x75, 0x6d, 0x61, 0x64, 0x61, 0x20, + 0x49, 0x12, 0x4a, 0x75, 0x6d, 0x61, 0x64, 0x61, + 0x20, 0x49, 0x49, 0x0a, 0x52, 0x61, 0x6a, 0x61, + 0x62, 0x0f, 0x53, 0x00, 0x68, 0x00, 0x61, 0x00, + 0xbb, 0x02, 0x62, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x0e, 0x52, 0x61, 0x6d, 0x61, 0x64, 0x61, 0x6e, + 0x0e, 0x53, 0x68, 0x61, 0x77, 0x77, 0x61, 0x6c, + 0x19, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, + 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x51, 0x00, 0x69, + 0x00, 0xbb, 0x02, 0x64, 0x00, 0x61, 0x00, 0x68, + 0x00, 0x19, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, + 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x48, 0x00, + 0x69, 0x00, 0x6a, 0x00, 0x6a, 0x00, 0x61, 0x00, + 0x68, 0x00, 0x04, 0x41, 0x48, 0x1f, 0x54, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x36, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x13, 0x20, 0x36, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x21, 0x53, 0x00, 0x68, 0x00, 0x75, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1f, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, + 0x57, 0x00, 0x61, 0x00, 0x64, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x1f, 0x52, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x1d, 0x59, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1f, 0x4a, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6b, + 0x00, 0x61, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x2d, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x2d, 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x2b, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x2d, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x2a, 0x4a, 0x69, 0x6e, 0x67, 0x6f, + 0x2d, 0x6b, 0x65, 0x69, 0x75, 0x6e, 0x20, 0x28, + 0x37, 0x36, 0x37, 0x2d, 0x37, 0x37, 0x30, 0x29, + 0x1d, 0x48, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x37, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, + 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, 0x64, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, 0x4b, + 0x00, 0x4d, 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x38, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4a, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x61, 0x00, + 0x6a, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, + 0x53, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x20, 0x54, + 0x65, 0x6e, 0x2d, 0x61, 0x6e, 0x20, 0x28, 0x38, + 0x35, 0x37, 0x2d, 0x38, 0x35, 0x39, 0x29, 0x1f, + 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x47, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, + 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1d, 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, + 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x34, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1b, 0x4c, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, + 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x1d, 0x41, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x1d, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x4a, 0x00, 0x69, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x29, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x27, 0x4a, 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, + 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4c, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x61, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x25, 0x4a, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x24, 0x54, 0x65, 0x6e, 0x2d, 0x65, + 0x69, 0x20, 0x28, 0x31, 0x31, 0x31, 0x30, 0x2d, + 0x31, 0x31, 0x31, 0x33, 0x29, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, + 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x4d, 0x01, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x45, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x6a, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x48, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, + 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4c, + 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6d, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x4a, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x59, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x75, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x29, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x29, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x4a, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x21, 0x4a, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x27, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x75, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x29, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x74, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x29, 0x52, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x4e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, + 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x61, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, + 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x27, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x45, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, 0x69, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x27, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x27, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x61, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x41, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x4d, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x02, 0x54, 0x22, 0x54, 0x61, 0x69, 0x6b, 0x61, + 0x20, 0x28, 0x36, 0x34, 0x35, 0x2e, 0x2d, 0x36, + 0x35, 0x30, 0x2e, 0x29, 0x26, 0x48, 0x61, 0x6b, + 0x75, 0x63, 0x68, 0x69, 0x20, 0x28, 0x36, 0x35, + 0x30, 0x2e, 0x2d, 0x36, 0x37, 0x31, 0x2e, 0x29, + 0x25, 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x32, 0x00, 0x2e, + 0x00, 0x2d, 0x00, 0x36, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x2e, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x2e, 0x00, 0x2d, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, 0x2e, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, 0x2e, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x2e, 0x00, 0x29, 0x00, 0x22, 0x4b, 0x65, + 0x69, 0x75, 0x6e, 0x20, 0x28, 0x37, 0x30, 0x34, + 0x2e, 0x2d, 0x37, 0x30, 0x38, 0x2e, 0x29, 0x21, + 0x57, 0x00, 0x61, 0x00, 0x64, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x2e, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x2e, 0x00, 0x29, 0x00, + 0x22, 0x52, 0x65, 0x69, 0x6b, 0x69, 0x20, 0x28, + 0x37, 0x31, 0x35, 0x2e, 0x2d, 0x37, 0x31, 0x37, + 0x2e, 0x29, 0x21, 0x59, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x2e, 0x00, 0x2d, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x2e, + 0x00, 0x29, 0x00, 0x22, 0x4a, 0x69, 0x6e, 0x6b, + 0x69, 0x20, 0x28, 0x37, 0x32, 0x34, 0x2e, 0x2d, + 0x37, 0x32, 0x39, 0x2e, 0x29, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x2e, 0x00, 0x2d, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x2e, 0x00, + 0x29, 0x00, 0x31, 0x54, 0x00, 0x65, 0x00, 0x6d, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, + 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x2e, 0x00, 0x2d, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x2e, + 0x00, 0x29, 0x00, 0x31, 0x54, 0x00, 0x65, 0x00, + 0x6d, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x2d, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x2e, 0x00, + 0x2d, 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x2e, 0x00, 0x29, 0x00, 0x2f, 0x54, 0x00, 0x65, + 0x00, 0x6d, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x2d, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x2e, 0x00, 0x2d, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, 0x2e, + 0x00, 0x29, 0x00, 0x31, 0x54, 0x00, 0x65, 0x00, + 0x6d, 0x00, 0x70, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x2d, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, 0x2e, 0x00, + 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x2e, 0x00, 0x29, 0x00, 0x2e, 0x4a, 0x69, 0x6e, + 0x67, 0x6f, 0x2d, 0x6b, 0x65, 0x69, 0x75, 0x6e, + 0x20, 0x28, 0x37, 0x36, 0x37, 0x2e, 0x2d, 0x37, + 0x37, 0x30, 0x2e, 0x29, 0x21, 0x48, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x30, 0x00, 0x2e, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x2e, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x2e, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x32, 0x00, 0x2e, 0x00, 0x29, 0x00, + 0x26, 0x45, 0x6e, 0x72, 0x79, 0x61, 0x6b, 0x75, + 0x20, 0x28, 0x37, 0x38, 0x32, 0x2e, 0x2d, 0x38, + 0x30, 0x36, 0x2e, 0x29, 0x23, 0x44, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x2e, 0x00, 0x2d, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x2e, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x4d, 0x01, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x2e, 0x00, 0x2d, 0x00, + 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, 0x2e, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x2e, 0x00, 0x2d, 0x00, 0x38, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x2e, 0x00, 0x29, 0x00, 0x21, + 0x4a, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x2e, 0x00, 0x2d, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x2e, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x61, 0x00, 0x6a, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x2e, 0x00, 0x2d, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x2e, 0x00, 0x29, + 0x00, 0x22, 0x4e, 0x69, 0x6e, 0x6a, 0x75, 0x20, + 0x28, 0x38, 0x35, 0x31, 0x2e, 0x2d, 0x38, 0x35, + 0x34, 0x2e, 0x29, 0x22, 0x53, 0x61, 0x69, 0x6b, + 0x6f, 0x20, 0x28, 0x38, 0x35, 0x34, 0x2e, 0x2d, + 0x38, 0x35, 0x37, 0x2e, 0x29, 0x24, 0x54, 0x65, + 0x6e, 0x6e, 0x61, 0x6e, 0x20, 0x28, 0x38, 0x35, + 0x37, 0x2e, 0x2d, 0x38, 0x35, 0x39, 0x2e, 0x29, + 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x2e, 0x00, 0x2d, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, 0x2e, + 0x00, 0x29, 0x00, 0x24, 0x47, 0x65, 0x6e, 0x6b, + 0x65, 0x69, 0x20, 0x28, 0x38, 0x37, 0x37, 0x2e, + 0x2d, 0x38, 0x38, 0x35, 0x2e, 0x29, 0x22, 0x4e, + 0x69, 0x6e, 0x6e, 0x61, 0x20, 0x28, 0x38, 0x38, + 0x35, 0x2e, 0x2d, 0x38, 0x38, 0x39, 0x2e, 0x29, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, 0x2e, + 0x00, 0x2d, 0x00, 0x38, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x2e, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x2e, 0x00, 0x2d, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, 0x2e, 0x00, + 0x29, 0x00, 0x20, 0x45, 0x6e, 0x67, 0x69, 0x20, + 0x28, 0x39, 0x30, 0x31, 0x2e, 0x2d, 0x39, 0x32, + 0x33, 0x2e, 0x29, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x2e, 0x00, 0x2d, 0x00, 0x39, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x2e, 0x00, 0x29, 0x00, 0x25, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x2e, 0x00, 0x2d, + 0x00, 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, 0x2e, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x2e, 0x00, 0x2d, 0x00, 0x39, 0x00, + 0x34, 0x00, 0x37, 0x00, 0x2e, 0x00, 0x29, 0x00, + 0x28, 0x54, 0x65, 0x6e, 0x72, 0x79, 0x61, 0x6b, + 0x75, 0x20, 0x28, 0x39, 0x34, 0x37, 0x2e, 0x2d, + 0x39, 0x35, 0x37, 0x2e, 0x29, 0x26, 0x54, 0x65, + 0x6e, 0x74, 0x6f, 0x6b, 0x75, 0x20, 0x28, 0x39, + 0x35, 0x37, 0x2e, 0x2d, 0x39, 0x36, 0x31, 0x2e, + 0x29, 0x1f, 0x4c, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x2e, 0x00, 0x2d, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x2e, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x2e, 0x00, 0x2d, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x2e, 0x00, 0x29, + 0x00, 0x20, 0x41, 0x6e, 0x6e, 0x61, 0x20, 0x28, + 0x39, 0x36, 0x38, 0x2e, 0x2d, 0x39, 0x37, 0x30, + 0x2e, 0x29, 0x26, 0x54, 0x65, 0x6e, 0x72, 0x6f, + 0x6b, 0x75, 0x20, 0x28, 0x39, 0x37, 0x30, 0x2e, + 0x2d, 0x39, 0x37, 0x33, 0x2e, 0x29, 0x24, 0x54, + 0x65, 0x6e, 0x2d, 0x65, 0x6e, 0x20, 0x28, 0x39, + 0x37, 0x33, 0x2e, 0x2d, 0x39, 0x37, 0x36, 0x2e, + 0x29, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, 0x2e, 0x00, + 0x2d, 0x00, 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x2e, 0x00, 0x29, 0x00, 0x24, 0x54, 0x65, 0x6e, + 0x67, 0x65, 0x6e, 0x20, 0x28, 0x39, 0x37, 0x38, + 0x2e, 0x2d, 0x39, 0x38, 0x33, 0x2e, 0x29, 0x22, + 0x45, 0x69, 0x6b, 0x61, 0x6e, 0x20, 0x28, 0x39, + 0x38, 0x33, 0x2e, 0x2d, 0x39, 0x38, 0x35, 0x2e, + 0x29, 0x22, 0x4b, 0x61, 0x6e, 0x6e, 0x61, 0x20, + 0x28, 0x39, 0x38, 0x35, 0x2e, 0x2d, 0x39, 0x38, + 0x37, 0x2e, 0x29, 0x22, 0x45, 0x69, 0x2d, 0x65, + 0x6e, 0x20, 0x28, 0x39, 0x38, 0x37, 0x2e, 0x2d, + 0x39, 0x38, 0x39, 0x2e, 0x29, 0x20, 0x45, 0x69, + 0x73, 0x6f, 0x20, 0x28, 0x39, 0x38, 0x39, 0x2e, + 0x2d, 0x39, 0x39, 0x30, 0x2e, 0x29, 0x29, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x2e, 0x00, 0x2d, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x35, 0x00, 0x2e, 0x00, 0x29, 0x00, 0x27, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, + 0x2e, 0x00, 0x2d, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x2e, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x2e, 0x00, 0x2d, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, 0x2e, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x2e, 0x00, 0x2d, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x2e, 0x00, + 0x29, 0x00, 0x27, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x2e, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x2e, 0x00, 0x29, + 0x00, 0x28, 0x4b, 0x61, 0x6e, 0x6e, 0x69, 0x6e, + 0x20, 0x28, 0x31, 0x30, 0x31, 0x37, 0x2e, 0x2d, + 0x31, 0x30, 0x32, 0x31, 0x2e, 0x29, 0x24, 0x4a, + 0x69, 0x61, 0x6e, 0x20, 0x28, 0x31, 0x30, 0x32, + 0x31, 0x2e, 0x2d, 0x31, 0x30, 0x32, 0x34, 0x2e, + 0x29, 0x26, 0x4d, 0x61, 0x6e, 0x6a, 0x75, 0x20, + 0x28, 0x31, 0x30, 0x32, 0x34, 0x2e, 0x2d, 0x31, + 0x30, 0x32, 0x38, 0x2e, 0x29, 0x29, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, 0x2e, 0x00, + 0x2d, 0x00, 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x2e, 0x00, 0x29, 0x00, 0x2d, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x2e, 0x00, 0x2d, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, 0x2e, + 0x00, 0x29, 0x00, 0x29, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x2e, 0x00, 0x2d, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x2e, 0x00, 0x29, 0x00, 0x2a, 0x4b, 0x61, 0x6e, + 0x74, 0x6f, 0x6b, 0x75, 0x20, 0x28, 0x31, 0x30, + 0x34, 0x34, 0x2e, 0x2d, 0x31, 0x30, 0x34, 0x36, + 0x2e, 0x29, 0x27, 0x45, 0x00, 0x69, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x2e, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x35, 0x00, 0x33, 0x00, 0x2e, 0x00, 0x29, + 0x00, 0x26, 0x54, 0x65, 0x6e, 0x67, 0x69, 0x20, + 0x28, 0x31, 0x30, 0x35, 0x33, 0x2e, 0x2d, 0x31, + 0x30, 0x35, 0x38, 0x2e, 0x29, 0x27, 0x4b, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x2e, 0x00, 0x2d, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x2e, 0x00, 0x29, 0x00, 0x2a, 0x4a, 0x69, 0x72, + 0x79, 0x61, 0x6b, 0x75, 0x20, 0x28, 0x31, 0x30, + 0x36, 0x35, 0x2e, 0x2d, 0x31, 0x30, 0x36, 0x39, + 0x2e, 0x29, 0x27, 0x45, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x2e, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x2e, 0x00, 0x29, + 0x00, 0x27, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x2e, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x2e, 0x00, 0x29, 0x00, + 0x2d, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x2e, 0x00, 0x2d, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x2e, 0x00, 0x29, 0x00, 0x24, 0x45, 0x69, + 0x68, 0x6f, 0x20, 0x28, 0x31, 0x30, 0x38, 0x31, + 0x2e, 0x2d, 0x31, 0x30, 0x38, 0x34, 0x2e, 0x29, + 0x27, 0x4c, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x2e, + 0x00, 0x2d, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x2e, 0x00, 0x29, 0x00, 0x26, + 0x4b, 0x61, 0x6e, 0x6a, 0x69, 0x20, 0x28, 0x31, + 0x30, 0x38, 0x37, 0x2e, 0x2d, 0x31, 0x30, 0x39, + 0x34, 0x2e, 0x29, 0x24, 0x4b, 0x61, 0x68, 0x6f, + 0x20, 0x28, 0x31, 0x30, 0x39, 0x34, 0x2e, 0x2d, + 0x31, 0x30, 0x39, 0x36, 0x2e, 0x29, 0x27, 0x45, + 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x2e, 0x00, 0x2d, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x2e, 0x00, 0x29, 0x00, 0x2b, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x2e, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x2e, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x2e, 0x00, 0x2d, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x2e, 0x00, 0x29, 0x00, 0x27, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x2e, 0x00, 0x2d, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x2e, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x2e, 0x00, 0x2d, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x2e, + 0x00, 0x29, 0x00, 0x28, 0x54, 0x65, 0x6e, 0x6e, + 0x69, 0x6e, 0x20, 0x28, 0x31, 0x31, 0x30, 0x38, + 0x2e, 0x2d, 0x31, 0x31, 0x31, 0x30, 0x2e, 0x29, + 0x28, 0x54, 0x65, 0x6e, 0x2d, 0x65, 0x69, 0x20, + 0x28, 0x31, 0x31, 0x31, 0x30, 0x2e, 0x2d, 0x31, + 0x31, 0x31, 0x33, 0x2e, 0x29, 0x27, 0x45, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x2e, 0x00, 0x2d, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x2e, 0x00, 0x29, 0x00, 0x28, 0x47, 0x65, 0x6e, + 0x2d, 0x65, 0x69, 0x20, 0x28, 0x31, 0x31, 0x31, + 0x38, 0x2e, 0x2d, 0x31, 0x31, 0x32, 0x30, 0x2e, + 0x29, 0x24, 0x48, 0x6f, 0x61, 0x6e, 0x20, 0x28, + 0x31, 0x31, 0x32, 0x30, 0x2e, 0x2d, 0x31, 0x31, + 0x32, 0x34, 0x2e, 0x29, 0x26, 0x54, 0x65, 0x6e, + 0x6a, 0x69, 0x20, 0x28, 0x31, 0x31, 0x32, 0x34, + 0x2e, 0x2d, 0x31, 0x31, 0x32, 0x36, 0x2e, 0x29, + 0x26, 0x44, 0x61, 0x69, 0x6a, 0x69, 0x20, 0x28, + 0x31, 0x31, 0x32, 0x36, 0x2e, 0x2d, 0x31, 0x31, + 0x33, 0x31, 0x2e, 0x29, 0x29, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x2e, 0x00, 0x2d, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x2e, 0x00, 0x29, 0x00, 0x29, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x2e, 0x00, + 0x2d, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x35, 0x00, 0x2e, 0x00, 0x29, 0x00, 0x24, 0x48, + 0x6f, 0x65, 0x6e, 0x20, 0x28, 0x31, 0x31, 0x33, + 0x35, 0x2e, 0x2d, 0x31, 0x31, 0x34, 0x31, 0x2e, + 0x29, 0x24, 0x45, 0x69, 0x6a, 0x69, 0x20, 0x28, + 0x31, 0x31, 0x34, 0x31, 0x2e, 0x2d, 0x31, 0x31, + 0x34, 0x32, 0x2e, 0x29, 0x25, 0x4b, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x2e, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x2e, 0x00, 0x29, + 0x00, 0x27, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x2e, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x2e, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x2e, + 0x00, 0x2d, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x2e, 0x00, 0x29, 0x00, 0x28, + 0x4e, 0x69, 0x6e, 0x70, 0x65, 0x69, 0x20, 0x28, + 0x31, 0x31, 0x35, 0x31, 0x2e, 0x2d, 0x31, 0x31, + 0x35, 0x34, 0x2e, 0x29, 0x27, 0x4b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x6a, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x2e, 0x00, 0x2d, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, 0x2e, + 0x00, 0x29, 0x00, 0x26, 0x48, 0x6f, 0x67, 0x65, + 0x6e, 0x20, 0x28, 0x31, 0x31, 0x35, 0x36, 0x2e, + 0x2d, 0x31, 0x31, 0x35, 0x39, 0x2e, 0x29, 0x26, + 0x48, 0x65, 0x69, 0x6a, 0x69, 0x20, 0x28, 0x31, + 0x31, 0x35, 0x39, 0x2e, 0x2d, 0x31, 0x31, 0x36, + 0x30, 0x2e, 0x29, 0x2a, 0x45, 0x69, 0x72, 0x79, + 0x61, 0x6b, 0x75, 0x20, 0x28, 0x31, 0x31, 0x36, + 0x30, 0x2e, 0x2d, 0x31, 0x31, 0x36, 0x31, 0x2e, + 0x29, 0x23, 0x4c, 0x01, 0x68, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x2e, 0x00, 0x2d, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, + 0x2e, 0x00, 0x29, 0x00, 0x29, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x33, 0x00, 0x2e, 0x00, 0x2d, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x2e, 0x00, 0x29, 0x00, 0x26, 0x45, 0x69, + 0x6d, 0x61, 0x6e, 0x20, 0x28, 0x31, 0x31, 0x36, + 0x35, 0x2e, 0x2d, 0x31, 0x31, 0x36, 0x36, 0x2e, + 0x29, 0x28, 0x4e, 0x69, 0x6e, 0x2d, 0x61, 0x6e, + 0x20, 0x28, 0x31, 0x31, 0x36, 0x36, 0x2e, 0x2d, + 0x31, 0x31, 0x36, 0x39, 0x2e, 0x29, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x2e, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x2e, 0x00, 0x29, + 0x00, 0x27, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x2e, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x2e, 0x00, 0x29, 0x00, + 0x26, 0x41, 0x6e, 0x67, 0x65, 0x6e, 0x20, 0x28, + 0x31, 0x31, 0x37, 0x35, 0x2e, 0x2d, 0x31, 0x31, + 0x37, 0x37, 0x2e, 0x29, 0x27, 0x4a, 0x00, 0x69, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x2e, 0x00, 0x2d, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x2e, + 0x00, 0x29, 0x00, 0x25, 0x59, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x2e, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x32, 0x00, 0x2e, 0x00, 0x29, 0x00, + 0x24, 0x4a, 0x75, 0x65, 0x69, 0x20, 0x28, 0x31, + 0x31, 0x38, 0x32, 0x2e, 0x2d, 0x31, 0x31, 0x38, + 0x34, 0x2e, 0x29, 0x2c, 0x47, 0x65, 0x6e, 0x72, + 0x79, 0x75, 0x6b, 0x75, 0x20, 0x28, 0x31, 0x31, + 0x38, 0x34, 0x2e, 0x2d, 0x31, 0x31, 0x38, 0x35, + 0x2e, 0x29, 0x26, 0x42, 0x75, 0x6e, 0x6a, 0x69, + 0x20, 0x28, 0x31, 0x31, 0x38, 0x35, 0x2e, 0x2d, + 0x31, 0x31, 0x39, 0x30, 0x2e, 0x29, 0x29, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, 0x2e, + 0x00, 0x2d, 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x2e, 0x00, 0x29, 0x00, 0x27, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, 0x2e, 0x00, + 0x2d, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x2e, 0x00, 0x29, 0x00, 0x28, 0x4b, + 0x65, 0x6e, 0x6e, 0x69, 0x6e, 0x20, 0x28, 0x31, + 0x32, 0x30, 0x31, 0x2e, 0x2d, 0x31, 0x32, 0x30, + 0x34, 0x2e, 0x29, 0x29, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x2e, 0x00, 0x2d, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x2e, 0x00, 0x29, 0x00, 0x28, 0x4b, 0x65, 0x6e, + 0x2d, 0x65, 0x69, 0x20, 0x28, 0x31, 0x32, 0x30, + 0x36, 0x2e, 0x2d, 0x31, 0x32, 0x30, 0x37, 0x2e, + 0x29, 0x29, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x2e, 0x00, 0x2d, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, 0x2e, 0x00, + 0x29, 0x00, 0x2c, 0x4b, 0x65, 0x6e, 0x72, 0x79, + 0x61, 0x6b, 0x75, 0x20, 0x28, 0x31, 0x32, 0x31, + 0x31, 0x2e, 0x2d, 0x31, 0x32, 0x31, 0x33, 0x2e, + 0x29, 0x27, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x2e, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x2e, 0x00, 0x29, 0x00, + 0x29, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x2e, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x2e, 0x00, 0x29, + 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x2e, 0x00, 0x2d, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x2e, 0x00, 0x29, 0x00, 0x28, 0x47, 0x65, 0x6e, + 0x6e, 0x69, 0x6e, 0x20, 0x28, 0x31, 0x32, 0x32, + 0x34, 0x2e, 0x2d, 0x31, 0x32, 0x32, 0x35, 0x2e, + 0x29, 0x28, 0x4b, 0x61, 0x72, 0x6f, 0x6b, 0x75, + 0x20, 0x28, 0x31, 0x32, 0x32, 0x35, 0x2e, 0x2d, + 0x31, 0x32, 0x32, 0x37, 0x2e, 0x29, 0x26, 0x41, + 0x6e, 0x74, 0x65, 0x69, 0x20, 0x28, 0x31, 0x32, + 0x32, 0x37, 0x2e, 0x2d, 0x31, 0x32, 0x32, 0x39, + 0x2e, 0x29, 0x26, 0x4b, 0x61, 0x6e, 0x6b, 0x69, + 0x20, 0x28, 0x31, 0x32, 0x32, 0x39, 0x2e, 0x2d, + 0x31, 0x32, 0x33, 0x32, 0x2e, 0x29, 0x25, 0x4a, + 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x2e, 0x00, 0x2d, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, 0x2e, + 0x00, 0x29, 0x00, 0x2a, 0x54, 0x65, 0x6d, 0x70, + 0x75, 0x6b, 0x75, 0x20, 0x28, 0x31, 0x32, 0x33, + 0x33, 0x2e, 0x2d, 0x31, 0x32, 0x33, 0x34, 0x2e, + 0x29, 0x2c, 0x42, 0x75, 0x6e, 0x72, 0x79, 0x61, + 0x6b, 0x75, 0x20, 0x28, 0x31, 0x32, 0x33, 0x34, + 0x2e, 0x2d, 0x31, 0x32, 0x33, 0x35, 0x2e, 0x29, + 0x26, 0x4b, 0x61, 0x74, 0x65, 0x69, 0x20, 0x28, + 0x31, 0x32, 0x33, 0x35, 0x2e, 0x2d, 0x31, 0x32, + 0x33, 0x38, 0x2e, 0x29, 0x2c, 0x52, 0x79, 0x61, + 0x6b, 0x75, 0x6e, 0x69, 0x6e, 0x20, 0x28, 0x31, + 0x32, 0x33, 0x38, 0x2e, 0x2d, 0x31, 0x32, 0x33, + 0x39, 0x2e, 0x29, 0x25, 0x45, 0x00, 0x6e, 0x00, + 0x2d, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x2e, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x2e, 0x00, 0x29, 0x00, + 0x26, 0x4e, 0x69, 0x6e, 0x6a, 0x69, 0x20, 0x28, + 0x31, 0x32, 0x34, 0x30, 0x2e, 0x2d, 0x31, 0x32, + 0x34, 0x33, 0x2e, 0x29, 0x28, 0x4b, 0x61, 0x6e, + 0x67, 0x65, 0x6e, 0x20, 0x28, 0x31, 0x32, 0x34, + 0x33, 0x2e, 0x2d, 0x31, 0x32, 0x34, 0x37, 0x2e, + 0x29, 0x25, 0x48, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, 0x2e, 0x00, + 0x2d, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x2e, 0x00, 0x29, 0x00, 0x29, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, 0x2e, + 0x00, 0x2d, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x36, 0x00, 0x2e, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, 0x2e, 0x00, + 0x2d, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x2e, 0x00, 0x29, 0x00, 0x27, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x2e, 0x00, 0x2d, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x2e, 0x00, 0x29, 0x00, 0x29, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, 0x2e, 0x00, + 0x2d, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x2e, 0x00, 0x29, 0x00, 0x27, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x2e, 0x00, 0x2d, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x2e, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x2e, 0x00, 0x2d, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x2e, 0x00, 0x29, 0x00, 0x28, 0x42, 0x75, 0x6e, + 0x2d, 0x65, 0x69, 0x20, 0x28, 0x31, 0x32, 0x36, + 0x34, 0x2e, 0x2d, 0x31, 0x32, 0x37, 0x35, 0x2e, + 0x29, 0x26, 0x4b, 0x65, 0x6e, 0x6a, 0x69, 0x20, + 0x28, 0x31, 0x32, 0x37, 0x35, 0x2e, 0x2d, 0x31, + 0x32, 0x37, 0x38, 0x2e, 0x29, 0x25, 0x4b, 0x00, + 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x2e, 0x00, 0x2d, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, 0x2e, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, 0x2e, + 0x00, 0x2d, 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x33, 0x00, 0x2e, 0x00, 0x29, 0x00, 0x26, + 0x45, 0x69, 0x6e, 0x69, 0x6e, 0x20, 0x28, 0x31, + 0x32, 0x39, 0x33, 0x2e, 0x2d, 0x31, 0x32, 0x39, + 0x39, 0x2e, 0x29, 0x27, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x2e, 0x00, 0x2d, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x2e, 0x00, + 0x29, 0x00, 0x28, 0x4b, 0x65, 0x6e, 0x67, 0x65, + 0x6e, 0x20, 0x28, 0x31, 0x33, 0x30, 0x32, 0x2e, + 0x2d, 0x31, 0x33, 0x30, 0x33, 0x2e, 0x29, 0x26, + 0x4b, 0x61, 0x67, 0x65, 0x6e, 0x20, 0x28, 0x31, + 0x33, 0x30, 0x33, 0x2e, 0x2d, 0x31, 0x33, 0x30, + 0x36, 0x2e, 0x29, 0x28, 0x54, 0x6f, 0x6b, 0x75, + 0x6a, 0x69, 0x20, 0x28, 0x31, 0x33, 0x30, 0x36, + 0x2e, 0x2d, 0x31, 0x33, 0x30, 0x38, 0x2e, 0x29, + 0x26, 0x45, 0x6e, 0x6b, 0x65, 0x69, 0x20, 0x28, + 0x31, 0x33, 0x30, 0x38, 0x2e, 0x2d, 0x31, 0x33, + 0x31, 0x31, 0x2e, 0x29, 0x25, 0x4c, 0x01, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x2e, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x2e, 0x00, 0x29, + 0x00, 0x27, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x2e, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x2e, 0x00, 0x29, 0x00, + 0x27, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, 0x2e, + 0x00, 0x2d, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x2e, 0x00, 0x29, 0x00, 0x25, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x2e, 0x00, 0x2d, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x2e, 0x00, 0x29, 0x00, 0x29, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x2e, 0x00, 0x2d, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x2e, 0x00, 0x29, 0x00, 0x29, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, 0x2e, 0x00, + 0x2d, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x2e, 0x00, 0x29, 0x00, 0x28, 0x4b, + 0x61, 0x72, 0x65, 0x6b, 0x69, 0x20, 0x28, 0x31, + 0x33, 0x32, 0x36, 0x2e, 0x2d, 0x31, 0x33, 0x32, + 0x39, 0x2e, 0x29, 0x2a, 0x47, 0x65, 0x6e, 0x74, + 0x6f, 0x6b, 0x75, 0x20, 0x28, 0x31, 0x33, 0x32, + 0x39, 0x2e, 0x2d, 0x31, 0x33, 0x33, 0x31, 0x2e, + 0x29, 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x2e, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x2e, 0x00, 0x29, 0x00, + 0x26, 0x4b, 0x65, 0x6d, 0x6d, 0x75, 0x20, 0x28, + 0x31, 0x33, 0x33, 0x34, 0x2e, 0x2d, 0x31, 0x33, + 0x33, 0x36, 0x2e, 0x29, 0x26, 0x45, 0x6e, 0x67, + 0x65, 0x6e, 0x20, 0x28, 0x31, 0x33, 0x33, 0x36, + 0x2e, 0x2d, 0x31, 0x33, 0x34, 0x30, 0x2e, 0x29, + 0x29, 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x2e, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x2e, 0x00, 0x29, + 0x00, 0x29, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x2e, 0x00, 0x2d, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, 0x2e, 0x00, + 0x29, 0x00, 0x2a, 0x4b, 0x65, 0x6e, 0x74, 0x6f, + 0x6b, 0x75, 0x20, 0x28, 0x31, 0x33, 0x37, 0x30, + 0x2e, 0x2d, 0x31, 0x33, 0x37, 0x32, 0x2e, 0x29, + 0x29, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x2e, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x2e, 0x00, 0x29, + 0x00, 0x26, 0x54, 0x65, 0x6e, 0x6a, 0x75, 0x20, + 0x28, 0x31, 0x33, 0x37, 0x35, 0x2e, 0x2d, 0x31, + 0x33, 0x37, 0x39, 0x2e, 0x29, 0x2b, 0x4b, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, + 0x2e, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x2e, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x2e, 0x00, 0x2d, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x2e, 0x00, 0x29, 0x00, 0x29, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x2e, 0x00, + 0x2d, 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x2e, 0x00, 0x29, 0x00, 0x2a, 0x4d, + 0x65, 0x69, 0x74, 0x6f, 0x6b, 0x75, 0x20, 0x28, + 0x31, 0x33, 0x38, 0x34, 0x2e, 0x2d, 0x31, 0x33, + 0x38, 0x37, 0x2e, 0x29, 0x26, 0x4b, 0x61, 0x6b, + 0x65, 0x69, 0x20, 0x28, 0x31, 0x33, 0x38, 0x37, + 0x2e, 0x2d, 0x31, 0x33, 0x38, 0x39, 0x2e, 0x29, + 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x2e, 0x00, 0x2d, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, 0x2e, + 0x00, 0x29, 0x00, 0x2a, 0x4d, 0x65, 0x69, 0x74, + 0x6f, 0x6b, 0x75, 0x20, 0x28, 0x31, 0x33, 0x39, + 0x30, 0x2e, 0x2d, 0x31, 0x33, 0x39, 0x34, 0x2e, + 0x29, 0x23, 0x4c, 0x01, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x2e, 0x00, 0x2d, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x2e, 0x00, 0x29, 0x00, 0x29, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x2e, 0x00, 0x2d, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x2e, 0x00, 0x29, 0x00, 0x27, 0x45, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x2e, 0x00, 0x2d, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x2e, 0x00, 0x29, 0x00, 0x2a, 0x4b, 0x61, 0x6b, + 0x69, 0x74, 0x73, 0x75, 0x20, 0x28, 0x31, 0x34, + 0x34, 0x31, 0x2e, 0x2d, 0x31, 0x34, 0x34, 0x34, + 0x2e, 0x29, 0x28, 0x42, 0x75, 0x6e, 0x2d, 0x61, + 0x6e, 0x20, 0x28, 0x31, 0x34, 0x34, 0x34, 0x2e, + 0x2d, 0x31, 0x34, 0x34, 0x39, 0x2e, 0x29, 0x29, + 0x48, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x2e, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x2e, 0x00, 0x29, 0x00, + 0x2b, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x2e, 0x00, 0x2d, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, 0x2e, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x4d, 0x01, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x2e, 0x00, 0x2d, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, 0x2e, 0x00, + 0x29, 0x00, 0x2b, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x2e, 0x00, 0x2d, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x2e, 0x00, 0x29, 0x00, 0x29, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, 0x2e, 0x00, + 0x2d, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x2e, 0x00, 0x29, 0x00, 0x29, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, 0x2e, + 0x00, 0x2d, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x2e, 0x00, 0x29, 0x00, 0x25, + 0x4c, 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x2e, 0x00, 0x2d, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x2e, 0x00, 0x29, 0x00, 0x28, 0x42, 0x75, 0x6e, + 0x6d, 0x65, 0x69, 0x20, 0x28, 0x31, 0x34, 0x36, + 0x39, 0x2e, 0x2d, 0x31, 0x34, 0x38, 0x37, 0x2e, + 0x29, 0x29, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x2e, 0x00, 0x2d, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, 0x2e, 0x00, + 0x29, 0x00, 0x28, 0x45, 0x6e, 0x74, 0x6f, 0x6b, + 0x75, 0x20, 0x28, 0x31, 0x34, 0x38, 0x39, 0x2e, + 0x2d, 0x31, 0x34, 0x39, 0x32, 0x2e, 0x29, 0x25, + 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x2e, 0x00, 0x2d, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x2e, 0x00, 0x29, 0x00, 0x26, 0x42, 0x75, 0x6e, + 0x6b, 0x69, 0x20, 0x28, 0x31, 0x35, 0x30, 0x31, + 0x2e, 0x2d, 0x31, 0x35, 0x30, 0x34, 0x2e, 0x29, + 0x27, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, 0x2e, + 0x00, 0x2d, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x2e, 0x00, 0x29, 0x00, 0x26, + 0x54, 0x61, 0x69, 0x65, 0x69, 0x20, 0x28, 0x31, + 0x35, 0x32, 0x31, 0x2e, 0x2d, 0x31, 0x35, 0x32, + 0x38, 0x2e, 0x29, 0x2b, 0x4b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, 0x2e, 0x00, + 0x2d, 0x00, 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x2e, 0x00, 0x29, 0x00, 0x28, 0x54, + 0x65, 0x6e, 0x6d, 0x6f, 0x6e, 0x20, 0x28, 0x31, + 0x35, 0x33, 0x32, 0x2e, 0x2d, 0x31, 0x35, 0x35, + 0x35, 0x2e, 0x29, 0x25, 0x4b, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x2e, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x2e, 0x00, 0x29, 0x00, + 0x28, 0x45, 0x69, 0x72, 0x6f, 0x6b, 0x75, 0x20, + 0x28, 0x31, 0x35, 0x35, 0x38, 0x2e, 0x2d, 0x31, + 0x35, 0x37, 0x30, 0x2e, 0x29, 0x26, 0x47, 0x65, + 0x6e, 0x6b, 0x69, 0x20, 0x28, 0x31, 0x35, 0x37, + 0x30, 0x2e, 0x2d, 0x31, 0x35, 0x37, 0x33, 0x2e, + 0x29, 0x29, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x2e, 0x00, 0x2d, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, 0x2e, 0x00, + 0x29, 0x00, 0x2a, 0x42, 0x75, 0x6e, 0x72, 0x6f, + 0x6b, 0x75, 0x20, 0x28, 0x31, 0x35, 0x39, 0x32, + 0x2e, 0x2d, 0x31, 0x35, 0x39, 0x36, 0x2e, 0x29, + 0x29, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x2e, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x2e, 0x00, 0x29, + 0x00, 0x26, 0x47, 0x65, 0x6e, 0x77, 0x61, 0x20, + 0x28, 0x31, 0x36, 0x31, 0x35, 0x2e, 0x2d, 0x31, + 0x36, 0x32, 0x34, 0x2e, 0x29, 0x28, 0x4b, 0x61, + 0x6e, 0x2d, 0x65, 0x69, 0x20, 0x28, 0x31, 0x36, + 0x32, 0x34, 0x2e, 0x2d, 0x31, 0x36, 0x34, 0x34, + 0x2e, 0x29, 0x27, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x2e, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x2e, 0x00, 0x29, + 0x00, 0x26, 0x4b, 0x65, 0x69, 0x61, 0x6e, 0x20, + 0x28, 0x31, 0x36, 0x34, 0x38, 0x2e, 0x2d, 0x31, + 0x36, 0x35, 0x32, 0x2e, 0x29, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x2e, 0x00, 0x2d, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, 0x2e, 0x00, + 0x29, 0x00, 0x2c, 0x4d, 0x65, 0x69, 0x72, 0x79, + 0x61, 0x6b, 0x75, 0x20, 0x28, 0x31, 0x36, 0x35, + 0x35, 0x2e, 0x2d, 0x31, 0x36, 0x35, 0x38, 0x2e, + 0x29, 0x26, 0x4d, 0x61, 0x6e, 0x6a, 0x69, 0x20, + 0x28, 0x31, 0x36, 0x35, 0x38, 0x2e, 0x2d, 0x31, + 0x36, 0x36, 0x31, 0x2e, 0x29, 0x28, 0x4b, 0x61, + 0x6e, 0x62, 0x75, 0x6e, 0x20, 0x28, 0x31, 0x36, + 0x36, 0x31, 0x2e, 0x2d, 0x31, 0x36, 0x37, 0x33, + 0x2e, 0x29, 0x25, 0x45, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x2e, + 0x00, 0x2d, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x2e, 0x00, 0x29, 0x00, 0x26, + 0x54, 0x65, 0x6e, 0x77, 0x61, 0x20, 0x28, 0x31, + 0x36, 0x38, 0x31, 0x2e, 0x2d, 0x31, 0x36, 0x38, + 0x34, 0x2e, 0x29, 0x27, 0x4a, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x2e, 0x00, 0x2d, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x2e, 0x00, + 0x29, 0x00, 0x2a, 0x47, 0x65, 0x6e, 0x72, 0x6f, + 0x6b, 0x75, 0x20, 0x28, 0x31, 0x36, 0x38, 0x38, + 0x2e, 0x2d, 0x31, 0x37, 0x30, 0x34, 0x2e, 0x29, + 0x25, 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x2e, 0x00, 0x2d, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x2e, 0x00, 0x29, 0x00, 0x2b, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x2e, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x2e, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, 0x2e, + 0x00, 0x2d, 0x00, 0x31, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x36, 0x00, 0x2e, 0x00, 0x29, 0x00, 0x28, + 0x47, 0x65, 0x6e, 0x62, 0x75, 0x6e, 0x20, 0x28, + 0x31, 0x37, 0x33, 0x36, 0x2e, 0x2d, 0x31, 0x37, + 0x34, 0x31, 0x2e, 0x29, 0x27, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x2e, 0x00, 0x2d, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, 0x2e, + 0x00, 0x29, 0x00, 0x27, 0x45, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x2e, 0x00, 0x2d, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x2e, 0x00, + 0x29, 0x00, 0x28, 0x4b, 0x61, 0x6e, 0x2d, 0x65, + 0x6e, 0x20, 0x28, 0x31, 0x37, 0x34, 0x38, 0x2e, + 0x2d, 0x31, 0x37, 0x35, 0x31, 0x2e, 0x29, 0x2b, + 0x48, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x2e, 0x00, 0x2d, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x2e, 0x00, + 0x29, 0x00, 0x26, 0x4d, 0x65, 0x69, 0x77, 0x61, + 0x20, 0x28, 0x31, 0x37, 0x36, 0x34, 0x2e, 0x2d, + 0x31, 0x37, 0x37, 0x32, 0x2e, 0x29, 0x26, 0x41, + 0x6e, 0x2d, 0x65, 0x69, 0x20, 0x28, 0x31, 0x37, + 0x37, 0x32, 0x2e, 0x2d, 0x31, 0x37, 0x38, 0x31, + 0x2e, 0x29, 0x28, 0x54, 0x65, 0x6e, 0x6d, 0x65, + 0x69, 0x20, 0x28, 0x31, 0x37, 0x38, 0x31, 0x2e, + 0x2d, 0x31, 0x37, 0x38, 0x39, 0x2e, 0x29, 0x28, + 0x4b, 0x61, 0x6e, 0x73, 0x65, 0x69, 0x20, 0x28, + 0x31, 0x37, 0x38, 0x39, 0x2e, 0x2d, 0x31, 0x38, + 0x30, 0x31, 0x2e, 0x29, 0x27, 0x4b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x2e, 0x00, 0x2d, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, 0x2e, + 0x00, 0x29, 0x00, 0x26, 0x42, 0x75, 0x6e, 0x6b, + 0x61, 0x20, 0x28, 0x31, 0x38, 0x30, 0x34, 0x2e, + 0x2d, 0x31, 0x38, 0x31, 0x38, 0x2e, 0x29, 0x28, + 0x42, 0x75, 0x6e, 0x73, 0x65, 0x69, 0x20, 0x28, + 0x31, 0x38, 0x31, 0x38, 0x2e, 0x2d, 0x31, 0x38, + 0x33, 0x30, 0x2e, 0x29, 0x27, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x2e, 0x00, 0x2d, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, 0x2e, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x2e, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x2e, 0x00, 0x29, 0x00, + 0x24, 0x4b, 0x61, 0x65, 0x69, 0x20, 0x28, 0x31, + 0x38, 0x34, 0x38, 0x2e, 0x2d, 0x31, 0x38, 0x35, + 0x34, 0x2e, 0x29, 0x26, 0x41, 0x6e, 0x73, 0x65, + 0x69, 0x20, 0x28, 0x31, 0x38, 0x35, 0x34, 0x2e, + 0x2d, 0x31, 0x38, 0x36, 0x30, 0x2e, 0x29, 0x28, + 0x4d, 0x61, 0x6e, 0x2d, 0x65, 0x6e, 0x20, 0x28, + 0x31, 0x38, 0x36, 0x30, 0x2e, 0x2d, 0x31, 0x38, + 0x36, 0x31, 0x2e, 0x29, 0x29, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x2e, 0x00, 0x2d, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x2e, 0x00, 0x29, 0x00, 0x26, 0x47, 0x65, + 0x6e, 0x6a, 0x69, 0x20, 0x28, 0x31, 0x38, 0x36, + 0x34, 0x2e, 0x2d, 0x31, 0x38, 0x36, 0x35, 0x2e, + 0x29, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, 0x2e, 0x00, + 0x2d, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x2e, 0x00, 0x29, 0x00, 0x0a, 0x4d, + 0x65, 0x69, 0x6a, 0x69, 0x0d, 0x54, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x0b, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x0c, 0x48, 0x65, 0x69, + 0x73, 0x65, 0x69, 0x12, 0x46, 0x61, 0x72, 0x76, + 0x61, 0x72, 0x64, 0x69, 0x6e, 0x16, 0x4f, 0x72, + 0x64, 0x69, 0x62, 0x65, 0x68, 0x65, 0x73, 0x68, + 0x74, 0x0e, 0x4b, 0x68, 0x6f, 0x72, 0x64, 0x61, + 0x64, 0x06, 0x54, 0x69, 0x72, 0x0c, 0x4d, 0x6f, + 0x72, 0x64, 0x61, 0x64, 0x12, 0x53, 0x68, 0x61, + 0x68, 0x72, 0x69, 0x76, 0x61, 0x72, 0x08, 0x4d, + 0x65, 0x68, 0x72, 0x08, 0x41, 0x62, 0x61, 0x6e, + 0x08, 0x41, 0x7a, 0x61, 0x72, 0x06, 0x44, 0x65, + 0x79, 0x0c, 0x42, 0x61, 0x68, 0x6d, 0x61, 0x6e, + 0x0c, 0x45, 0x73, 0x66, 0x61, 0x6e, 0x64, 0x04, + 0x41, 0x50, 0x18, 0x70, 0x72, 0x69, 0x6a, 0x65, + 0x20, 0x52, 0x2e, 0x4f, 0x2e, 0x43, 0x2e, 0x0c, + 0x52, 0x2e, 0x4f, 0x2e, 0x43, 0x2e, 0x12, 0x63, + 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, 0x73, + 0x08, 0x64, 0x61, 0x74, 0x65, 0x08, 0x6c, 0x61, + 0x74, 0x6e, 0x04, 0x6e, 0x75, 0x10, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x50, + 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x26, 0x7b, + 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0x1e, 0x6e, 0x65, 0x67, 0x61, 0x74, + 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, + 0x72, 0x6e, 0x0e, 0x64, 0x65, 0x63, 0x69, 0x6d, + 0x61, 0x6c, 0x26, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0xa0, 0x7b, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, 0x3c, 0x7b, + 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0xa0, 0x7b, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x63, 0x79, 0x7d, 0x10, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x2a, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x7b, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x40, 0x7b, 0x6d, 0x69, + 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x0e, 0x70, 0x65, + 0x72, 0x63, 0x65, 0x6e, 0x74, 0x10, 0x70, 0x61, + 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x02, 0x2c, + 0x02, 0x2e, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x06, 0x4e, 0x61, 0x4e, 0x06, 0x6e, 0x61, 0x6e, + 0x02, 0x2b, 0x10, 0x70, 0x6c, 0x75, 0x73, 0x53, + 0x69, 0x67, 0x6e, 0x02, 0x2d, 0x12, 0x6d, 0x69, + 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, + 0x25, 0x16, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, + 0x74, 0x53, 0x69, 0x67, 0x6e, 0x03, 0x1e, 0x22, + 0x10, 0x69, 0x6e, 0x66, 0x69, 0x6e, 0x69, 0x74, + 0x79, 0x0e, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, + 0x73, 0x08, 0x46, 0x43, 0x46, 0x41, 0x06, 0x58, + 0x41, 0x46, 0x06, 0x43, 0x46, 0x41, 0x06, 0x58, + 0x4f, 0x46, 0x14, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x63, 0x69, 0x65, 0x73, 0x52, 0x6e, 0x6f, + 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2f, + 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, + 0x61, 0x74, 0x61, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, + 0x70, 0x2f, 0x68, 0x72, 0x2e, 0x6a, 0x73, 0x0d, + 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, + 0x27, 0x00, 0x89, 0x01, 0xbe, 0x69, 0x01, 0xa0, + 0x01, 0x00, 0x00, 0x00, 0x39, 0xd0, 0x00, 0x00, + 0x00, 0x43, 0xd1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd2, 0x00, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd4, 0x00, 0x00, 0x00, 0x04, + 0xd5, 0x00, 0x00, 0x00, 0x04, 0xd6, 0x00, 0x00, + 0x00, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x04, 0xd8, + 0x00, 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, 0x00, + 0x04, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdb, 0x00, + 0x00, 0x00, 0x04, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0xdd, 0x00, 0x00, 0x00, 0x04, 0xde, 0x00, 0x00, + 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, 0x04, 0xe0, + 0x00, 0x00, 0x00, 0x04, 0xe1, 0x00, 0x00, 0x00, + 0x04, 0xe2, 0x00, 0x00, 0x00, 0x26, 0x0f, 0x00, + 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x0a, 0x4d, 0xe4, + 0x00, 0x00, 0x00, 0x09, 0x4d, 0xe5, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, + 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x04, 0xe9, + 0x00, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xec, 0x00, 0x00, 0x00, + 0x4d, 0xed, 0x00, 0x00, 0x00, 0x04, 0xee, 0x00, + 0x00, 0x00, 0x4d, 0xef, 0x00, 0x00, 0x00, 0x04, + 0xf0, 0x00, 0x00, 0x00, 0x4d, 0xf1, 0x00, 0x00, + 0x00, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xf3, + 0x00, 0x00, 0x00, 0x04, 0xf4, 0x00, 0x00, 0x00, + 0x4d, 0xf5, 0x00, 0x00, 0x00, 0x04, 0xf6, 0x00, + 0x00, 0x00, 0x4d, 0xf7, 0x00, 0x00, 0x00, 0x04, + 0xf8, 0x00, 0x00, 0x00, 0x4d, 0xf9, 0x00, 0x00, + 0x00, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xfb, + 0x00, 0x00, 0x00, 0x04, 0xfc, 0x00, 0x00, 0x00, + 0x4d, 0xfd, 0x00, 0x00, 0x00, 0x04, 0xfe, 0x00, + 0x00, 0x00, 0x4d, 0xff, 0x00, 0x00, 0x00, 0x04, + 0x00, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x01, 0x00, + 0x00, 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, 0x03, + 0x01, 0x00, 0x00, 0x04, 0x04, 0x01, 0x00, 0x00, + 0x4d, 0x05, 0x01, 0x00, 0x00, 0x04, 0x06, 0x01, + 0x00, 0x00, 0x4d, 0x07, 0x01, 0x00, 0x00, 0x04, + 0x08, 0x01, 0x00, 0x00, 0x4d, 0x09, 0x01, 0x00, + 0x00, 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x0b, + 0x01, 0x00, 0x00, 0x04, 0x0c, 0x01, 0x00, 0x00, + 0x4d, 0x0d, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x01, + 0x00, 0x00, 0x4d, 0x0f, 0x01, 0x00, 0x00, 0x04, + 0x10, 0x01, 0x00, 0x00, 0x4d, 0x11, 0x01, 0x00, + 0x00, 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, 0x13, + 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, + 0x4d, 0x15, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x4d, 0x17, 0x01, 0x00, 0x00, 0x04, + 0x18, 0x01, 0x00, 0x00, 0x4d, 0x19, 0x01, 0x00, + 0x00, 0x04, 0x1a, 0x01, 0x00, 0x00, 0x4d, 0x1b, + 0x01, 0x00, 0x00, 0x04, 0x1c, 0x01, 0x00, 0x00, + 0x4d, 0x1d, 0x01, 0x00, 0x00, 0x04, 0x1e, 0x01, + 0x00, 0x00, 0x4d, 0x1f, 0x01, 0x00, 0x00, 0x04, + 0x20, 0x01, 0x00, 0x00, 0x4d, 0x21, 0x01, 0x00, + 0x00, 0x04, 0x22, 0x01, 0x00, 0x00, 0x4d, 0x23, + 0x01, 0x00, 0x00, 0x04, 0x24, 0x01, 0x00, 0x00, + 0x4d, 0x25, 0x01, 0x00, 0x00, 0x04, 0x26, 0x01, + 0x00, 0x00, 0x4d, 0x27, 0x01, 0x00, 0x00, 0x04, + 0x28, 0x01, 0x00, 0x00, 0x4d, 0x29, 0x01, 0x00, + 0x00, 0x04, 0x2a, 0x01, 0x00, 0x00, 0x4d, 0x2b, + 0x01, 0x00, 0x00, 0x04, 0x2c, 0x01, 0x00, 0x00, + 0x4d, 0x2d, 0x01, 0x00, 0x00, 0x04, 0x2e, 0x01, + 0x00, 0x00, 0x4d, 0x2f, 0x01, 0x00, 0x00, 0x04, + 0x30, 0x01, 0x00, 0x00, 0x4d, 0x31, 0x01, 0x00, + 0x00, 0x04, 0x32, 0x01, 0x00, 0x00, 0x4d, 0x33, + 0x01, 0x00, 0x00, 0x04, 0x34, 0x01, 0x00, 0x00, + 0x4d, 0x35, 0x01, 0x00, 0x00, 0x04, 0x36, 0x01, + 0x00, 0x00, 0x4d, 0x37, 0x01, 0x00, 0x00, 0x04, + 0x38, 0x01, 0x00, 0x00, 0x4d, 0x39, 0x01, 0x00, + 0x00, 0x04, 0x3a, 0x01, 0x00, 0x00, 0x4d, 0x3b, + 0x01, 0x00, 0x00, 0x04, 0x3c, 0x01, 0x00, 0x00, + 0x4d, 0x3d, 0x01, 0x00, 0x00, 0x04, 0x3e, 0x01, + 0x00, 0x00, 0x4d, 0x3f, 0x01, 0x00, 0x00, 0x4d, + 0x40, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x41, 0x01, + 0x00, 0x00, 0x4d, 0x42, 0x01, 0x00, 0x00, 0x04, + 0x43, 0x01, 0x00, 0x00, 0x4d, 0x44, 0x01, 0x00, + 0x00, 0x04, 0x36, 0x01, 0x00, 0x00, 0x4d, 0x37, + 0x01, 0x00, 0x00, 0x04, 0x2e, 0x01, 0x00, 0x00, + 0x4d, 0x2f, 0x01, 0x00, 0x00, 0x4d, 0x45, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x4d, 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x4d, 0x49, 0x01, 0x00, 0x00, 0x04, + 0x0c, 0x01, 0x00, 0x00, 0x4d, 0x0b, 0x01, 0x00, + 0x00, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, 0x07, + 0x01, 0x00, 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, + 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x0b, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x71, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x58, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, + 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x85, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x86, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x58, 0x01, 0x00, 0x00, 0x04, 0x86, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x87, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x4d, 0x89, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x4d, 0x8b, 0x01, + 0x00, 0x00, 0x4d, 0x8c, 0x01, 0x00, 0x00, 0x4d, + 0xd5, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x00, + 0xbe, 0x01, 0xbe, 0x02, 0xbe, 0x03, 0xbe, 0x04, + 0xbe, 0x05, 0xbe, 0x06, 0xbe, 0x07, 0xbe, 0x08, + 0xbe, 0x09, 0xbe, 0x0a, 0xbe, 0x0b, 0x26, 0x0c, + 0x00, 0x4d, 0x58, 0x01, 0x00, 0x00, 0x04, 0x8d, + 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, + 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, + 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, + 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, + 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, + 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, + 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, + 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, + 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, + 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, + 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, + 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, + 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, + 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x71, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x85, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x88, 0x01, 0x00, 0x00, + 0x4d, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, + 0x00, 0x00, 0x4d, 0x8b, 0x01, 0x00, 0x00, 0x4d, + 0x8c, 0x01, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x0c, 0xbe, 0x0d, 0xbe, + 0x0e, 0xbe, 0x0f, 0xbe, 0x10, 0xbe, 0x11, 0xbe, + 0x12, 0xbe, 0x13, 0xbe, 0x14, 0xbe, 0x15, 0xbe, + 0x16, 0xbe, 0x17, 0xbe, 0x18, 0x26, 0x0d, 0x00, + 0x4d, 0x58, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, + 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, + 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, + 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, + 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, + 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, + 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, + 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, + 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x26, 0x0d, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x99, + 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, + 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, + 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, + 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, + 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, + 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, + 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, + 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x71, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x58, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, + 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, + 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x85, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xa6, 0x01, 0x00, + 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0x58, 0x01, 0x00, 0x00, 0x04, 0xa6, + 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x87, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x88, 0x01, 0x00, 0x00, 0x4d, 0x89, 0x01, + 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x4d, + 0x8b, 0x01, 0x00, 0x00, 0x4d, 0x8c, 0x01, 0x00, + 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x19, 0xbe, 0x1a, 0xbe, 0x1b, 0xbe, 0x1c, + 0xbe, 0x1d, 0xbe, 0x1e, 0xbe, 0x1f, 0xbe, 0x20, + 0xbe, 0x21, 0xbe, 0x22, 0xbe, 0x23, 0xbe, 0x24, + 0x26, 0x0c, 0x00, 0x4d, 0x58, 0x01, 0x00, 0x00, + 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, + 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, + 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, + 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, + 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, + 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, + 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, + 0x98, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, + 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, + 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, + 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, + 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, + 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, + 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, + 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x71, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, + 0x7d, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x85, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x88, 0x01, + 0x00, 0x00, 0x4d, 0x89, 0x01, 0x00, 0x00, 0x04, + 0x8a, 0x01, 0x00, 0x00, 0x4d, 0x8b, 0x01, 0x00, + 0x00, 0x4d, 0x8c, 0x01, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x25, 0xbe, + 0x26, 0xbe, 0x27, 0xbe, 0x28, 0xbe, 0x29, 0xbe, + 0x2a, 0xbe, 0x2b, 0xbe, 0x2c, 0xbe, 0x2d, 0xbe, + 0x2e, 0xbe, 0x2f, 0xbe, 0x30, 0xbe, 0x31, 0x26, + 0x0d, 0x00, 0x4d, 0x58, 0x01, 0x00, 0x00, 0x04, + 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, + 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, + 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, + 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, + 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, + 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, + 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, 0xb3, + 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, + 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, + 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, + 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, 0xae, + 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, + 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, + 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, + 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x71, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x58, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, + 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, + 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, + 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x85, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xa6, + 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0x58, 0x01, 0x00, 0x00, + 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, + 0xa7, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x87, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x88, 0x01, 0x00, 0x00, 0x4d, + 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x4d, 0x8b, 0x01, 0x00, 0x00, 0x4d, 0x8c, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x32, 0xbe, 0x33, 0xbe, 0x34, + 0xbe, 0x35, 0xbe, 0x36, 0xbe, 0x37, 0xbe, 0x38, + 0xbe, 0x39, 0xbe, 0x3a, 0xbe, 0x3b, 0xbe, 0x3c, + 0xbe, 0x3d, 0xbe, 0x3e, 0x26, 0x0d, 0x00, 0x4d, + 0x58, 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, + 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, + 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, + 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, + 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, + 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, + 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, + 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, + 0x04, 0xb4, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa8, 0x01, + 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, + 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, + 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, + 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, + 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, + 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, 0x04, + 0xb2, 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, + 0x00, 0x04, 0xb4, 0x01, 0x00, 0x00, 0x26, 0x0d, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x71, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x85, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xa6, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x58, 0x01, 0x00, 0x00, + 0x04, 0xa6, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa6, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x87, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x88, 0x01, 0x00, 0x00, 0x4d, 0x89, 0x01, + 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x4d, + 0x8b, 0x01, 0x00, 0x00, 0x4d, 0x8c, 0x01, 0x00, + 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x3f, 0xbe, 0x40, 0xbe, 0x41, 0xbe, 0x42, + 0xbe, 0x43, 0xbe, 0x44, 0xbe, 0x45, 0xbe, 0x46, + 0xbe, 0x47, 0xbe, 0x48, 0xbe, 0x49, 0xbe, 0x4a, + 0x26, 0x0c, 0x00, 0x4d, 0x58, 0x01, 0x00, 0x00, + 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, + 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, + 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, + 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, + 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, + 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, + 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, + 0x98, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, + 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, + 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, + 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, + 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, + 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, + 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, + 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x71, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, + 0x7d, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x85, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xa6, 0x01, + 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x58, 0x01, 0x00, 0x00, 0x04, + 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x87, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x88, 0x01, 0x00, 0x00, 0x4d, 0x89, + 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, + 0x4d, 0x8b, 0x01, 0x00, 0x00, 0x4d, 0x8c, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, + 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x71, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x58, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, + 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, + 0x84, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x85, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xb5, 0x01, 0x00, 0x00, 0x04, + 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, + 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, 0x26, 0x04, + 0x00, 0x4d, 0x58, 0x01, 0x00, 0x00, 0x04, 0xb9, + 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, + 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, + 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, + 0xbc, 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, + 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, 0x26, 0x04, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x87, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x88, 0x01, 0x00, + 0x00, 0x4d, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, + 0x01, 0x00, 0x00, 0x4d, 0x8b, 0x01, 0x00, 0x00, + 0x4d, 0x8c, 0x01, 0x00, 0x00, 0x4d, 0xd4, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x4b, 0xbe, 0x4c, + 0xbe, 0x4d, 0xbe, 0x4e, 0xbe, 0x4f, 0xbe, 0x50, + 0xbe, 0x51, 0xbe, 0x52, 0xbe, 0x53, 0xbe, 0x54, + 0xbe, 0x55, 0xbe, 0x56, 0xbe, 0x57, 0xbe, 0x58, + 0x26, 0x0e, 0x00, 0x4d, 0x58, 0x01, 0x00, 0x00, + 0x04, 0xbd, 0x01, 0x00, 0x00, 0x04, 0xbe, 0x01, + 0x00, 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, 0x04, + 0xc0, 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, + 0x00, 0x04, 0xc2, 0x01, 0x00, 0x00, 0x04, 0xc3, + 0x01, 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, + 0x04, 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, 0x01, + 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, 0x04, + 0xc8, 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, + 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, 0x26, 0x0e, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xbd, + 0x01, 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, + 0x04, 0xbf, 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, + 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, 0x04, + 0xc2, 0x01, 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, + 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, 0x04, 0xc5, + 0x01, 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, 0x00, + 0x04, 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, 0x01, + 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, 0x04, + 0xca, 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x71, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x58, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, + 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x85, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x88, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x58, 0x01, 0x00, 0x00, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x87, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x4d, 0x89, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x4d, 0x8b, 0x01, + 0x00, 0x00, 0x4d, 0x8c, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x59, + 0xbe, 0x5a, 0xbe, 0x5b, 0xbe, 0x5c, 0xbe, 0x5d, + 0xbe, 0x5e, 0xbe, 0x5f, 0xbe, 0x60, 0xbe, 0x61, + 0xbe, 0x62, 0xbe, 0x63, 0xbe, 0x64, 0x26, 0x0c, + 0x00, 0x4d, 0x58, 0x01, 0x00, 0x00, 0x04, 0xcb, + 0x01, 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, + 0x04, 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, + 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, + 0xd0, 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, + 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, + 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, + 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, 0x04, + 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, + 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, 0x04, 0xcf, + 0x01, 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, + 0x04, 0xd1, 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, + 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, + 0xd4, 0x01, 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, + 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x71, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x85, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xd7, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x58, 0x01, 0x00, 0x00, + 0x04, 0xd7, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd7, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x87, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x88, 0x01, 0x00, 0x00, 0x4d, 0x89, 0x01, + 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x4d, + 0x8b, 0x01, 0x00, 0x00, 0x4d, 0x8c, 0x01, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x65, 0xbe, 0x66, 0xbe, 0x67, 0xbe, 0x68, + 0xbe, 0x69, 0xbe, 0x6a, 0xbe, 0x6b, 0xbe, 0x6c, + 0xbe, 0x6d, 0xbe, 0x6e, 0xbe, 0x6f, 0xbe, 0x70, + 0x26, 0x0c, 0x00, 0x4d, 0x58, 0x01, 0x00, 0x00, + 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, + 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, + 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, + 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, + 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, + 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, + 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, + 0xe3, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, + 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, + 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, + 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, + 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, + 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, + 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, + 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x71, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, + 0x7d, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x85, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xf0, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x58, 0x01, + 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xf0, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x87, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x88, 0x01, 0x00, 0x00, 0x4d, + 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x4d, 0x8b, 0x01, 0x00, 0x00, 0x4d, 0x8c, + 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x71, 0xbe, 0x72, 0xbe, 0x73, + 0xbe, 0x74, 0xbe, 0x75, 0xbe, 0x76, 0xbe, 0x77, + 0xbe, 0x78, 0xbe, 0x79, 0xbe, 0x7a, 0xbe, 0x7b, + 0xbe, 0x7c, 0x26, 0x0c, 0x00, 0x4d, 0x58, 0x01, + 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, + 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, + 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, + 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, + 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, + 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, + 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, + 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe4, + 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, + 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, + 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, + 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, + 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, + 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, + 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x71, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7e, + 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, + 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x85, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xf0, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x58, 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x87, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x88, 0x01, 0x00, + 0x00, 0x4d, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, + 0x01, 0x00, 0x00, 0x4d, 0x8b, 0x01, 0x00, 0x00, + 0x4d, 0x8c, 0x01, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0x58, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x71, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, + 0x7d, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x85, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xf1, 0x01, + 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, + 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, + 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, + 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, + 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, + 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, + 0xfb, 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, + 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, + 0x01, 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, + 0x04, 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, + 0x00, 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, 0x04, + 0x03, 0x02, 0x00, 0x00, 0x04, 0x04, 0x02, 0x00, + 0x00, 0x04, 0x05, 0x02, 0x00, 0x00, 0x04, 0x06, + 0x02, 0x00, 0x00, 0x04, 0x07, 0x02, 0x00, 0x00, + 0x04, 0x08, 0x02, 0x00, 0x00, 0x04, 0x09, 0x02, + 0x00, 0x00, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x04, + 0x0b, 0x02, 0x00, 0x00, 0x04, 0x0c, 0x02, 0x00, + 0x00, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x04, 0x0e, + 0x02, 0x00, 0x00, 0x04, 0x0f, 0x02, 0x00, 0x00, + 0x04, 0x10, 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, + 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, + 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, + 0x21, 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, + 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0x14, + 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, + 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, + 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, + 0x25, 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, + 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0x18, + 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, + 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, + 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, + 0x29, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, + 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x1c, + 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, + 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, + 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, + 0x2d, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, + 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x20, + 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, + 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, + 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, + 0x31, 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, + 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x24, + 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, + 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, + 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, + 0x35, 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, + 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x28, + 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, + 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, + 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, + 0x39, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, + 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x2c, + 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, + 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, + 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, + 0x3d, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, + 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x30, + 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, + 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, + 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, + 0x41, 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, + 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x34, + 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, + 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, + 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, + 0x45, 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, + 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x38, + 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, + 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, + 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, + 0x49, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, + 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x3c, + 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, + 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, + 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, + 0x4d, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, + 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x40, + 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, + 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, + 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, + 0x51, 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, + 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x44, + 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, + 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, + 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, + 0x55, 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, + 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x48, + 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, + 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, + 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, + 0x59, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, + 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x4c, + 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, + 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, + 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, + 0x5d, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, + 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x50, + 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, + 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, + 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, + 0x61, 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, + 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x54, + 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, + 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, + 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, + 0x65, 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, + 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x58, + 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, + 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, + 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, + 0x69, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, + 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x5c, + 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, + 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, + 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, + 0x6d, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, + 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x60, + 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, + 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, + 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, + 0x71, 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, + 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x64, + 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, + 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, + 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, + 0x75, 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, + 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x68, + 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, + 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, + 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, + 0x79, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, + 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x6c, + 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, + 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, + 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, + 0x7d, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, + 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x70, + 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, + 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, + 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, + 0x81, 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, + 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x74, + 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, + 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, + 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, + 0x85, 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, + 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x78, + 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, + 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, + 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, + 0x89, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, + 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x7c, + 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, + 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, + 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, + 0x8d, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, + 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x80, + 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, + 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, + 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, + 0x91, 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, + 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x84, + 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, + 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, + 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, + 0x95, 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, + 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x88, + 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, + 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, + 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, + 0x99, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, + 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x8c, + 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, + 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, + 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, + 0x9d, 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, + 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x90, + 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, + 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, + 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, + 0xa1, 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, + 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x94, + 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, + 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, + 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, + 0xa5, 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, + 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x98, + 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, + 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, + 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, + 0xa9, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, + 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x9c, + 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, + 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, + 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, + 0xad, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, + 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0xa0, + 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, + 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, + 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, + 0xb1, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, + 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0xa4, + 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, + 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, + 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, + 0xb5, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, + 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0xa8, + 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, + 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, + 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, + 0xb9, 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, + 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0xac, + 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, + 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, + 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, + 0xbd, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, + 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0xb0, + 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, + 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, + 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, + 0xc1, 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, + 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0xb4, + 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, + 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, + 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, + 0xc5, 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, + 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0xb8, + 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, + 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, + 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, + 0xc9, 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, + 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xbc, + 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, + 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, + 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, + 0xcd, 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, + 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xc0, + 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, + 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, + 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, + 0xd1, 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, + 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xc4, + 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, + 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, + 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, + 0xd5, 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, + 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xcc, + 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, + 0x04, 0xcd, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x80, 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xd0, + 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, + 0x04, 0xd1, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x80, 0x04, 0xd2, 0x02, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x80, 0x04, 0xd3, 0x02, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xd4, + 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, + 0x04, 0xd5, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, + 0x00, 0x80, 0x04, 0xd6, 0x02, 0x00, 0x00, 0x4d, + 0xe5, 0x00, 0x00, 0x80, 0x04, 0xd7, 0x02, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xd8, + 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, + 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, 0xe8, 0x00, + 0x00, 0x80, 0x04, 0xd9, 0x02, 0x00, 0x00, 0x4d, + 0xe9, 0x00, 0x00, 0x80, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0x05, + 0x01, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, + 0x4d, 0x58, 0x01, 0x00, 0x00, 0x04, 0xda, 0x02, + 0x00, 0x00, 0x04, 0xdb, 0x02, 0x00, 0x00, 0x04, + 0xdc, 0x02, 0x00, 0x00, 0x04, 0xdd, 0x02, 0x00, + 0x00, 0x04, 0xde, 0x02, 0x00, 0x00, 0x04, 0xdf, + 0x02, 0x00, 0x00, 0x04, 0xe0, 0x02, 0x00, 0x00, + 0x04, 0xe1, 0x02, 0x00, 0x00, 0x04, 0xe2, 0x02, + 0x00, 0x00, 0x04, 0xe3, 0x02, 0x00, 0x00, 0x04, + 0xe4, 0x02, 0x00, 0x00, 0x04, 0xe5, 0x02, 0x00, + 0x00, 0x04, 0xe6, 0x02, 0x00, 0x00, 0x04, 0xe7, + 0x02, 0x00, 0x00, 0x04, 0xe8, 0x02, 0x00, 0x00, + 0x04, 0xe9, 0x02, 0x00, 0x00, 0x04, 0xea, 0x02, + 0x00, 0x00, 0x04, 0xeb, 0x02, 0x00, 0x00, 0x04, + 0xec, 0x02, 0x00, 0x00, 0x04, 0xed, 0x02, 0x00, + 0x00, 0x04, 0xee, 0x02, 0x00, 0x00, 0x04, 0xef, + 0x02, 0x00, 0x00, 0x04, 0xf0, 0x02, 0x00, 0x00, + 0x04, 0xf1, 0x02, 0x00, 0x00, 0x04, 0xf2, 0x02, + 0x00, 0x00, 0x04, 0xf3, 0x02, 0x00, 0x00, 0x04, + 0xf4, 0x02, 0x00, 0x00, 0x04, 0xf5, 0x02, 0x00, + 0x00, 0x04, 0xf6, 0x02, 0x00, 0x00, 0x04, 0xf7, + 0x02, 0x00, 0x00, 0x04, 0xf8, 0x02, 0x00, 0x00, + 0x04, 0xf9, 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, + 0x04, 0xfa, 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, + 0x00, 0x80, 0x04, 0xfb, 0x02, 0x00, 0x00, 0x4d, + 0x21, 0x00, 0x00, 0x80, 0x04, 0xfc, 0x02, 0x00, + 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0xfd, + 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, + 0x04, 0xfe, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, + 0x00, 0x80, 0x04, 0xff, 0x02, 0x00, 0x00, 0x4d, + 0x25, 0x00, 0x00, 0x80, 0x04, 0x00, 0x03, 0x00, + 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0x01, + 0x03, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, + 0x04, 0x02, 0x03, 0x00, 0x00, 0x4d, 0x28, 0x00, + 0x00, 0x80, 0x04, 0x03, 0x03, 0x00, 0x00, 0x4d, + 0x29, 0x00, 0x00, 0x80, 0x04, 0x04, 0x03, 0x00, + 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x05, + 0x03, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, + 0x04, 0x06, 0x03, 0x00, 0x00, 0x4d, 0x2c, 0x00, + 0x00, 0x80, 0x04, 0x07, 0x03, 0x00, 0x00, 0x4d, + 0x2d, 0x00, 0x00, 0x80, 0x04, 0x08, 0x03, 0x00, + 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x09, + 0x03, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, + 0x04, 0x0a, 0x03, 0x00, 0x00, 0x4d, 0x30, 0x00, + 0x00, 0x80, 0x04, 0x0b, 0x03, 0x00, 0x00, 0x4d, + 0x31, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x03, 0x00, + 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x0d, + 0x03, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, + 0x04, 0x0e, 0x03, 0x00, 0x00, 0x4d, 0x34, 0x00, + 0x00, 0x80, 0x04, 0x0f, 0x03, 0x00, 0x00, 0x4d, + 0x35, 0x00, 0x00, 0x80, 0x04, 0x10, 0x03, 0x00, + 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x11, + 0x03, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, + 0x04, 0x12, 0x03, 0x00, 0x00, 0x4d, 0x38, 0x00, + 0x00, 0x80, 0x04, 0x13, 0x03, 0x00, 0x00, 0x4d, + 0x39, 0x00, 0x00, 0x80, 0x04, 0x14, 0x03, 0x00, + 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x15, + 0x03, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, + 0x04, 0x16, 0x03, 0x00, 0x00, 0x4d, 0x3c, 0x00, + 0x00, 0x80, 0x04, 0x17, 0x03, 0x00, 0x00, 0x4d, + 0x3d, 0x00, 0x00, 0x80, 0x04, 0x18, 0x03, 0x00, + 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x19, + 0x03, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, + 0x04, 0x1a, 0x03, 0x00, 0x00, 0x4d, 0x40, 0x00, + 0x00, 0x80, 0x04, 0x1b, 0x03, 0x00, 0x00, 0x4d, + 0x41, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x03, 0x00, + 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x1d, + 0x03, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, + 0x04, 0x1e, 0x03, 0x00, 0x00, 0x4d, 0x44, 0x00, + 0x00, 0x80, 0x04, 0x1f, 0x03, 0x00, 0x00, 0x4d, + 0x45, 0x00, 0x00, 0x80, 0x04, 0x20, 0x03, 0x00, + 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x21, + 0x03, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, + 0x04, 0x22, 0x03, 0x00, 0x00, 0x4d, 0x48, 0x00, + 0x00, 0x80, 0x04, 0x23, 0x03, 0x00, 0x00, 0x4d, + 0x49, 0x00, 0x00, 0x80, 0x04, 0x24, 0x03, 0x00, + 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x25, + 0x03, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, + 0x04, 0x26, 0x03, 0x00, 0x00, 0x4d, 0x4c, 0x00, + 0x00, 0x80, 0x04, 0x27, 0x03, 0x00, 0x00, 0x4d, + 0x4d, 0x00, 0x00, 0x80, 0x04, 0x28, 0x03, 0x00, + 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x29, + 0x03, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, + 0x04, 0x2a, 0x03, 0x00, 0x00, 0x4d, 0x50, 0x00, + 0x00, 0x80, 0x04, 0x2b, 0x03, 0x00, 0x00, 0x4d, + 0x51, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x03, 0x00, + 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x2d, + 0x03, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, + 0x04, 0x2e, 0x03, 0x00, 0x00, 0x4d, 0x54, 0x00, + 0x00, 0x80, 0x04, 0x2f, 0x03, 0x00, 0x00, 0x4d, + 0x55, 0x00, 0x00, 0x80, 0x04, 0x30, 0x03, 0x00, + 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x31, + 0x03, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, + 0x04, 0x32, 0x03, 0x00, 0x00, 0x4d, 0x58, 0x00, + 0x00, 0x80, 0x04, 0x33, 0x03, 0x00, 0x00, 0x4d, + 0x59, 0x00, 0x00, 0x80, 0x04, 0x34, 0x03, 0x00, + 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x35, + 0x03, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, + 0x04, 0x36, 0x03, 0x00, 0x00, 0x4d, 0x5c, 0x00, + 0x00, 0x80, 0x04, 0x37, 0x03, 0x00, 0x00, 0x4d, + 0x5d, 0x00, 0x00, 0x80, 0x04, 0x38, 0x03, 0x00, + 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x39, + 0x03, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, + 0x04, 0x3a, 0x03, 0x00, 0x00, 0x4d, 0x60, 0x00, + 0x00, 0x80, 0x04, 0x3b, 0x03, 0x00, 0x00, 0x4d, + 0x61, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x03, 0x00, + 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x3d, + 0x03, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, + 0x04, 0x3e, 0x03, 0x00, 0x00, 0x4d, 0x64, 0x00, + 0x00, 0x80, 0x04, 0x3f, 0x03, 0x00, 0x00, 0x4d, + 0x65, 0x00, 0x00, 0x80, 0x04, 0x40, 0x03, 0x00, + 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x41, + 0x03, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, + 0x04, 0x42, 0x03, 0x00, 0x00, 0x4d, 0x68, 0x00, + 0x00, 0x80, 0x04, 0x43, 0x03, 0x00, 0x00, 0x4d, + 0x69, 0x00, 0x00, 0x80, 0x04, 0x44, 0x03, 0x00, + 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x45, + 0x03, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, + 0x04, 0x46, 0x03, 0x00, 0x00, 0x4d, 0x6c, 0x00, + 0x00, 0x80, 0x04, 0x47, 0x03, 0x00, 0x00, 0x4d, + 0x6d, 0x00, 0x00, 0x80, 0x04, 0x48, 0x03, 0x00, + 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x49, + 0x03, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, + 0x04, 0x4a, 0x03, 0x00, 0x00, 0x4d, 0x70, 0x00, + 0x00, 0x80, 0x04, 0x4b, 0x03, 0x00, 0x00, 0x4d, + 0x71, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x03, 0x00, + 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x4d, + 0x03, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, + 0x04, 0x4e, 0x03, 0x00, 0x00, 0x4d, 0x74, 0x00, + 0x00, 0x80, 0x04, 0x4f, 0x03, 0x00, 0x00, 0x4d, + 0x75, 0x00, 0x00, 0x80, 0x04, 0x50, 0x03, 0x00, + 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x51, + 0x03, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, + 0x04, 0x52, 0x03, 0x00, 0x00, 0x4d, 0x78, 0x00, + 0x00, 0x80, 0x04, 0x53, 0x03, 0x00, 0x00, 0x4d, + 0x79, 0x00, 0x00, 0x80, 0x04, 0x54, 0x03, 0x00, + 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x55, + 0x03, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, + 0x04, 0x56, 0x03, 0x00, 0x00, 0x4d, 0x7c, 0x00, + 0x00, 0x80, 0x04, 0x57, 0x03, 0x00, 0x00, 0x4d, + 0x7d, 0x00, 0x00, 0x80, 0x04, 0x58, 0x03, 0x00, + 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x59, + 0x03, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, + 0x04, 0x5a, 0x03, 0x00, 0x00, 0x4d, 0x80, 0x00, + 0x00, 0x80, 0x04, 0x5b, 0x03, 0x00, 0x00, 0x4d, + 0x81, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x03, 0x00, + 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x5d, + 0x03, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, + 0x04, 0x5e, 0x03, 0x00, 0x00, 0x4d, 0x84, 0x00, + 0x00, 0x80, 0x04, 0x5f, 0x03, 0x00, 0x00, 0x4d, + 0x85, 0x00, 0x00, 0x80, 0x04, 0x60, 0x03, 0x00, + 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x61, + 0x03, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, + 0x04, 0x62, 0x03, 0x00, 0x00, 0x4d, 0x88, 0x00, + 0x00, 0x80, 0x04, 0x63, 0x03, 0x00, 0x00, 0x4d, + 0x89, 0x00, 0x00, 0x80, 0x04, 0x64, 0x03, 0x00, + 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x65, + 0x03, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, + 0x04, 0x66, 0x03, 0x00, 0x00, 0x4d, 0x8c, 0x00, + 0x00, 0x80, 0x04, 0x67, 0x03, 0x00, 0x00, 0x4d, + 0x8d, 0x00, 0x00, 0x80, 0x04, 0x68, 0x03, 0x00, + 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x69, + 0x03, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, + 0x04, 0x6a, 0x03, 0x00, 0x00, 0x4d, 0x90, 0x00, + 0x00, 0x80, 0x04, 0x6b, 0x03, 0x00, 0x00, 0x4d, + 0x91, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x03, 0x00, + 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x6d, + 0x03, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, + 0x04, 0x6e, 0x03, 0x00, 0x00, 0x4d, 0x94, 0x00, + 0x00, 0x80, 0x04, 0x6f, 0x03, 0x00, 0x00, 0x4d, + 0x95, 0x00, 0x00, 0x80, 0x04, 0x70, 0x03, 0x00, + 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x71, + 0x03, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, + 0x04, 0x72, 0x03, 0x00, 0x00, 0x4d, 0x98, 0x00, + 0x00, 0x80, 0x04, 0x73, 0x03, 0x00, 0x00, 0x4d, + 0x99, 0x00, 0x00, 0x80, 0x04, 0x74, 0x03, 0x00, + 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x75, + 0x03, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, + 0x04, 0x76, 0x03, 0x00, 0x00, 0x4d, 0x9c, 0x00, + 0x00, 0x80, 0x04, 0x77, 0x03, 0x00, 0x00, 0x4d, + 0x9d, 0x00, 0x00, 0x80, 0x04, 0x78, 0x03, 0x00, + 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x79, + 0x03, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, + 0x04, 0x7a, 0x03, 0x00, 0x00, 0x4d, 0xa0, 0x00, + 0x00, 0x80, 0x04, 0x7b, 0x03, 0x00, 0x00, 0x4d, + 0xa1, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x03, 0x00, + 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x7d, + 0x03, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, + 0x04, 0x7e, 0x03, 0x00, 0x00, 0x4d, 0xa4, 0x00, + 0x00, 0x80, 0x04, 0x7f, 0x03, 0x00, 0x00, 0x4d, + 0xa5, 0x00, 0x00, 0x80, 0x04, 0x80, 0x03, 0x00, + 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x81, + 0x03, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, + 0x04, 0x82, 0x03, 0x00, 0x00, 0x4d, 0xa8, 0x00, + 0x00, 0x80, 0x04, 0x83, 0x03, 0x00, 0x00, 0x4d, + 0xa9, 0x00, 0x00, 0x80, 0x04, 0x84, 0x03, 0x00, + 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x85, + 0x03, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, + 0x04, 0x86, 0x03, 0x00, 0x00, 0x4d, 0xac, 0x00, + 0x00, 0x80, 0x04, 0x87, 0x03, 0x00, 0x00, 0x4d, + 0xad, 0x00, 0x00, 0x80, 0x04, 0x88, 0x03, 0x00, + 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x89, + 0x03, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, + 0x04, 0x8a, 0x03, 0x00, 0x00, 0x4d, 0xb0, 0x00, + 0x00, 0x80, 0x04, 0x8b, 0x03, 0x00, 0x00, 0x4d, + 0xb1, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x03, 0x00, + 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0x8d, + 0x03, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, + 0x04, 0x8e, 0x03, 0x00, 0x00, 0x4d, 0xb4, 0x00, + 0x00, 0x80, 0x04, 0x8f, 0x03, 0x00, 0x00, 0x4d, + 0xb5, 0x00, 0x00, 0x80, 0x04, 0x90, 0x03, 0x00, + 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0x91, + 0x03, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, + 0x04, 0x92, 0x03, 0x00, 0x00, 0x4d, 0xb8, 0x00, + 0x00, 0x80, 0x04, 0x93, 0x03, 0x00, 0x00, 0x4d, + 0xb9, 0x00, 0x00, 0x80, 0x04, 0x94, 0x03, 0x00, + 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0x95, + 0x03, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, + 0x04, 0x96, 0x03, 0x00, 0x00, 0x4d, 0xbc, 0x00, + 0x00, 0x80, 0x04, 0x97, 0x03, 0x00, 0x00, 0x4d, + 0xbd, 0x00, 0x00, 0x80, 0x04, 0x98, 0x03, 0x00, + 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0x99, + 0x03, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, + 0x04, 0x9a, 0x03, 0x00, 0x00, 0x4d, 0xc0, 0x00, + 0x00, 0x80, 0x04, 0x9b, 0x03, 0x00, 0x00, 0x4d, + 0xc1, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x03, 0x00, + 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0x9d, + 0x03, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, + 0x04, 0x9e, 0x03, 0x00, 0x00, 0x4d, 0xc4, 0x00, + 0x00, 0x80, 0x04, 0x9f, 0x03, 0x00, 0x00, 0x4d, + 0xc5, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x03, 0x00, + 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0xa1, + 0x03, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, + 0x04, 0xa2, 0x03, 0x00, 0x00, 0x4d, 0xc8, 0x00, + 0x00, 0x80, 0x04, 0xa3, 0x03, 0x00, 0x00, 0x4d, + 0xc9, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x03, 0x00, + 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xa5, + 0x03, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, + 0x04, 0xa6, 0x03, 0x00, 0x00, 0x4d, 0xcc, 0x00, + 0x00, 0x80, 0x04, 0xa7, 0x03, 0x00, 0x00, 0x4d, + 0xcd, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x03, 0x00, + 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xa9, + 0x03, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, + 0x04, 0xaa, 0x03, 0x00, 0x00, 0x4d, 0xd0, 0x00, + 0x00, 0x80, 0x04, 0xab, 0x03, 0x00, 0x00, 0x4d, + 0xd1, 0x00, 0x00, 0x80, 0x04, 0xac, 0x03, 0x00, + 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xad, + 0x03, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, + 0x04, 0xae, 0x03, 0x00, 0x00, 0x4d, 0xd4, 0x00, + 0x00, 0x80, 0x04, 0xaf, 0x03, 0x00, 0x00, 0x4d, + 0xd5, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x03, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xb1, + 0x03, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, + 0x04, 0xb2, 0x03, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x80, 0x04, 0xb3, 0x03, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x03, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xb5, + 0x03, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, + 0x04, 0xb6, 0x03, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x80, 0x04, 0xb7, 0x03, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x03, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xb9, + 0x03, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, + 0x04, 0xba, 0x03, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x80, 0x04, 0xbb, 0x03, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x03, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xbd, + 0x03, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, + 0x04, 0xbe, 0x03, 0x00, 0x00, 0x4d, 0xe4, 0x00, + 0x00, 0x80, 0x04, 0xbf, 0x03, 0x00, 0x00, 0x4d, + 0xe5, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x03, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xc1, + 0x03, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, + 0x04, 0xc2, 0x03, 0x00, 0x00, 0x4d, 0xe8, 0x00, + 0x00, 0x80, 0x04, 0xc3, 0x03, 0x00, 0x00, 0x4d, + 0xe9, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x03, 0x00, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0xc5, + 0x03, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xda, 0x02, + 0x00, 0x00, 0x04, 0xdb, 0x02, 0x00, 0x00, 0x04, + 0xdc, 0x02, 0x00, 0x00, 0x04, 0xdd, 0x02, 0x00, + 0x00, 0x04, 0xde, 0x02, 0x00, 0x00, 0x04, 0xdf, + 0x02, 0x00, 0x00, 0x04, 0xe0, 0x02, 0x00, 0x00, + 0x04, 0xe1, 0x02, 0x00, 0x00, 0x04, 0xe2, 0x02, + 0x00, 0x00, 0x04, 0xe3, 0x02, 0x00, 0x00, 0x04, + 0xe4, 0x02, 0x00, 0x00, 0x04, 0xe5, 0x02, 0x00, + 0x00, 0x04, 0xe6, 0x02, 0x00, 0x00, 0x04, 0xe7, + 0x02, 0x00, 0x00, 0x04, 0xe8, 0x02, 0x00, 0x00, + 0x04, 0xe9, 0x02, 0x00, 0x00, 0x04, 0xea, 0x02, + 0x00, 0x00, 0x04, 0xeb, 0x02, 0x00, 0x00, 0x04, + 0xec, 0x02, 0x00, 0x00, 0x04, 0xed, 0x02, 0x00, + 0x00, 0x04, 0xee, 0x02, 0x00, 0x00, 0x04, 0xef, + 0x02, 0x00, 0x00, 0x04, 0xf0, 0x02, 0x00, 0x00, + 0x04, 0xf1, 0x02, 0x00, 0x00, 0x04, 0xf2, 0x02, + 0x00, 0x00, 0x04, 0xf3, 0x02, 0x00, 0x00, 0x04, + 0xf4, 0x02, 0x00, 0x00, 0x04, 0xf5, 0x02, 0x00, + 0x00, 0x04, 0xf6, 0x02, 0x00, 0x00, 0x04, 0xf7, + 0x02, 0x00, 0x00, 0x04, 0xf8, 0x02, 0x00, 0x00, + 0x04, 0xf9, 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, + 0x04, 0xfa, 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, + 0x00, 0x80, 0x04, 0xfb, 0x02, 0x00, 0x00, 0x4d, + 0x21, 0x00, 0x00, 0x80, 0x04, 0xfc, 0x02, 0x00, + 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0xfd, + 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, + 0x04, 0xfe, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, + 0x00, 0x80, 0x04, 0xff, 0x02, 0x00, 0x00, 0x4d, + 0x25, 0x00, 0x00, 0x80, 0x04, 0x00, 0x03, 0x00, + 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0x01, + 0x03, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, + 0x04, 0x02, 0x03, 0x00, 0x00, 0x4d, 0x28, 0x00, + 0x00, 0x80, 0x04, 0x03, 0x03, 0x00, 0x00, 0x4d, + 0x29, 0x00, 0x00, 0x80, 0x04, 0x04, 0x03, 0x00, + 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x05, + 0x03, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, + 0x04, 0x06, 0x03, 0x00, 0x00, 0x4d, 0x2c, 0x00, + 0x00, 0x80, 0x04, 0x07, 0x03, 0x00, 0x00, 0x4d, + 0x2d, 0x00, 0x00, 0x80, 0x04, 0x08, 0x03, 0x00, + 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x09, + 0x03, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, + 0x04, 0x0a, 0x03, 0x00, 0x00, 0x4d, 0x30, 0x00, + 0x00, 0x80, 0x04, 0x0b, 0x03, 0x00, 0x00, 0x4d, + 0x31, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x03, 0x00, + 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x0d, + 0x03, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, + 0x04, 0x0e, 0x03, 0x00, 0x00, 0x4d, 0x34, 0x00, + 0x00, 0x80, 0x04, 0x0f, 0x03, 0x00, 0x00, 0x4d, + 0x35, 0x00, 0x00, 0x80, 0x04, 0x10, 0x03, 0x00, + 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x11, + 0x03, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, + 0x04, 0x12, 0x03, 0x00, 0x00, 0x4d, 0x38, 0x00, + 0x00, 0x80, 0x04, 0x13, 0x03, 0x00, 0x00, 0x4d, + 0x39, 0x00, 0x00, 0x80, 0x04, 0x14, 0x03, 0x00, + 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x15, + 0x03, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, + 0x04, 0x16, 0x03, 0x00, 0x00, 0x4d, 0x3c, 0x00, + 0x00, 0x80, 0x04, 0x17, 0x03, 0x00, 0x00, 0x4d, + 0x3d, 0x00, 0x00, 0x80, 0x04, 0x18, 0x03, 0x00, + 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x19, + 0x03, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, + 0x04, 0x1a, 0x03, 0x00, 0x00, 0x4d, 0x40, 0x00, + 0x00, 0x80, 0x04, 0x1b, 0x03, 0x00, 0x00, 0x4d, + 0x41, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x03, 0x00, + 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x1d, + 0x03, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, + 0x04, 0x1e, 0x03, 0x00, 0x00, 0x4d, 0x44, 0x00, + 0x00, 0x80, 0x04, 0x1f, 0x03, 0x00, 0x00, 0x4d, + 0x45, 0x00, 0x00, 0x80, 0x04, 0x20, 0x03, 0x00, + 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x21, + 0x03, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, + 0x04, 0x22, 0x03, 0x00, 0x00, 0x4d, 0x48, 0x00, + 0x00, 0x80, 0x04, 0x23, 0x03, 0x00, 0x00, 0x4d, + 0x49, 0x00, 0x00, 0x80, 0x04, 0x24, 0x03, 0x00, + 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x25, + 0x03, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, + 0x04, 0x26, 0x03, 0x00, 0x00, 0x4d, 0x4c, 0x00, + 0x00, 0x80, 0x04, 0x27, 0x03, 0x00, 0x00, 0x4d, + 0x4d, 0x00, 0x00, 0x80, 0x04, 0x28, 0x03, 0x00, + 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x29, + 0x03, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, + 0x04, 0x2a, 0x03, 0x00, 0x00, 0x4d, 0x50, 0x00, + 0x00, 0x80, 0x04, 0x2b, 0x03, 0x00, 0x00, 0x4d, + 0x51, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x03, 0x00, + 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x2d, + 0x03, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, + 0x04, 0x2e, 0x03, 0x00, 0x00, 0x4d, 0x54, 0x00, + 0x00, 0x80, 0x04, 0x2f, 0x03, 0x00, 0x00, 0x4d, + 0x55, 0x00, 0x00, 0x80, 0x04, 0x30, 0x03, 0x00, + 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x31, + 0x03, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, + 0x04, 0x32, 0x03, 0x00, 0x00, 0x4d, 0x58, 0x00, + 0x00, 0x80, 0x04, 0x33, 0x03, 0x00, 0x00, 0x4d, + 0x59, 0x00, 0x00, 0x80, 0x04, 0x34, 0x03, 0x00, + 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x35, + 0x03, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, + 0x04, 0x36, 0x03, 0x00, 0x00, 0x4d, 0x5c, 0x00, + 0x00, 0x80, 0x04, 0x37, 0x03, 0x00, 0x00, 0x4d, + 0x5d, 0x00, 0x00, 0x80, 0x04, 0x38, 0x03, 0x00, + 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x39, + 0x03, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, + 0x04, 0x3a, 0x03, 0x00, 0x00, 0x4d, 0x60, 0x00, + 0x00, 0x80, 0x04, 0x3b, 0x03, 0x00, 0x00, 0x4d, + 0x61, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x03, 0x00, + 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x3d, + 0x03, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, + 0x04, 0x3e, 0x03, 0x00, 0x00, 0x4d, 0x64, 0x00, + 0x00, 0x80, 0x04, 0x3f, 0x03, 0x00, 0x00, 0x4d, + 0x65, 0x00, 0x00, 0x80, 0x04, 0x40, 0x03, 0x00, + 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x41, + 0x03, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, + 0x04, 0x42, 0x03, 0x00, 0x00, 0x4d, 0x68, 0x00, + 0x00, 0x80, 0x04, 0x43, 0x03, 0x00, 0x00, 0x4d, + 0x69, 0x00, 0x00, 0x80, 0x04, 0x44, 0x03, 0x00, + 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x45, + 0x03, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, + 0x04, 0x46, 0x03, 0x00, 0x00, 0x4d, 0x6c, 0x00, + 0x00, 0x80, 0x04, 0x47, 0x03, 0x00, 0x00, 0x4d, + 0x6d, 0x00, 0x00, 0x80, 0x04, 0x48, 0x03, 0x00, + 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x49, + 0x03, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, + 0x04, 0x4a, 0x03, 0x00, 0x00, 0x4d, 0x70, 0x00, + 0x00, 0x80, 0x04, 0x4b, 0x03, 0x00, 0x00, 0x4d, + 0x71, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x03, 0x00, + 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x4d, + 0x03, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, + 0x04, 0x4e, 0x03, 0x00, 0x00, 0x4d, 0x74, 0x00, + 0x00, 0x80, 0x04, 0x4f, 0x03, 0x00, 0x00, 0x4d, + 0x75, 0x00, 0x00, 0x80, 0x04, 0x50, 0x03, 0x00, + 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x51, + 0x03, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, + 0x04, 0x52, 0x03, 0x00, 0x00, 0x4d, 0x78, 0x00, + 0x00, 0x80, 0x04, 0x53, 0x03, 0x00, 0x00, 0x4d, + 0x79, 0x00, 0x00, 0x80, 0x04, 0x54, 0x03, 0x00, + 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x55, + 0x03, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, + 0x04, 0x56, 0x03, 0x00, 0x00, 0x4d, 0x7c, 0x00, + 0x00, 0x80, 0x04, 0x57, 0x03, 0x00, 0x00, 0x4d, + 0x7d, 0x00, 0x00, 0x80, 0x04, 0x58, 0x03, 0x00, + 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x59, + 0x03, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, + 0x04, 0x5a, 0x03, 0x00, 0x00, 0x4d, 0x80, 0x00, + 0x00, 0x80, 0x04, 0x5b, 0x03, 0x00, 0x00, 0x4d, + 0x81, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x03, 0x00, + 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x5d, + 0x03, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, + 0x04, 0x5e, 0x03, 0x00, 0x00, 0x4d, 0x84, 0x00, + 0x00, 0x80, 0x04, 0x5f, 0x03, 0x00, 0x00, 0x4d, + 0x85, 0x00, 0x00, 0x80, 0x04, 0x60, 0x03, 0x00, + 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x61, + 0x03, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, + 0x04, 0x62, 0x03, 0x00, 0x00, 0x4d, 0x88, 0x00, + 0x00, 0x80, 0x04, 0x63, 0x03, 0x00, 0x00, 0x4d, + 0x89, 0x00, 0x00, 0x80, 0x04, 0x64, 0x03, 0x00, + 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x65, + 0x03, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, + 0x04, 0x66, 0x03, 0x00, 0x00, 0x4d, 0x8c, 0x00, + 0x00, 0x80, 0x04, 0x67, 0x03, 0x00, 0x00, 0x4d, + 0x8d, 0x00, 0x00, 0x80, 0x04, 0x68, 0x03, 0x00, + 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x69, + 0x03, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, + 0x04, 0x6a, 0x03, 0x00, 0x00, 0x4d, 0x90, 0x00, + 0x00, 0x80, 0x04, 0x6b, 0x03, 0x00, 0x00, 0x4d, + 0x91, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x03, 0x00, + 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x6d, + 0x03, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, + 0x04, 0x6e, 0x03, 0x00, 0x00, 0x4d, 0x94, 0x00, + 0x00, 0x80, 0x04, 0x6f, 0x03, 0x00, 0x00, 0x4d, + 0x95, 0x00, 0x00, 0x80, 0x04, 0x70, 0x03, 0x00, + 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x71, + 0x03, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, + 0x04, 0x72, 0x03, 0x00, 0x00, 0x4d, 0x98, 0x00, + 0x00, 0x80, 0x04, 0x73, 0x03, 0x00, 0x00, 0x4d, + 0x99, 0x00, 0x00, 0x80, 0x04, 0x74, 0x03, 0x00, + 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x75, + 0x03, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, + 0x04, 0x76, 0x03, 0x00, 0x00, 0x4d, 0x9c, 0x00, + 0x00, 0x80, 0x04, 0x77, 0x03, 0x00, 0x00, 0x4d, + 0x9d, 0x00, 0x00, 0x80, 0x04, 0x78, 0x03, 0x00, + 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x79, + 0x03, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, + 0x04, 0x7a, 0x03, 0x00, 0x00, 0x4d, 0xa0, 0x00, + 0x00, 0x80, 0x04, 0x7b, 0x03, 0x00, 0x00, 0x4d, + 0xa1, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x03, 0x00, + 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x7d, + 0x03, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, + 0x04, 0x7e, 0x03, 0x00, 0x00, 0x4d, 0xa4, 0x00, + 0x00, 0x80, 0x04, 0x7f, 0x03, 0x00, 0x00, 0x4d, + 0xa5, 0x00, 0x00, 0x80, 0x04, 0x80, 0x03, 0x00, + 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x81, + 0x03, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, + 0x04, 0x82, 0x03, 0x00, 0x00, 0x4d, 0xa8, 0x00, + 0x00, 0x80, 0x04, 0x83, 0x03, 0x00, 0x00, 0x4d, + 0xa9, 0x00, 0x00, 0x80, 0x04, 0x84, 0x03, 0x00, + 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x85, + 0x03, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, + 0x04, 0x86, 0x03, 0x00, 0x00, 0x4d, 0xac, 0x00, + 0x00, 0x80, 0x04, 0x87, 0x03, 0x00, 0x00, 0x4d, + 0xad, 0x00, 0x00, 0x80, 0x04, 0x88, 0x03, 0x00, + 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x89, + 0x03, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, + 0x04, 0x8a, 0x03, 0x00, 0x00, 0x4d, 0xb0, 0x00, + 0x00, 0x80, 0x04, 0x8b, 0x03, 0x00, 0x00, 0x4d, + 0xb1, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x03, 0x00, + 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0x8d, + 0x03, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, + 0x04, 0x8e, 0x03, 0x00, 0x00, 0x4d, 0xb4, 0x00, + 0x00, 0x80, 0x04, 0x8f, 0x03, 0x00, 0x00, 0x4d, + 0xb5, 0x00, 0x00, 0x80, 0x04, 0x90, 0x03, 0x00, + 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0x91, + 0x03, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, + 0x04, 0x92, 0x03, 0x00, 0x00, 0x4d, 0xb8, 0x00, + 0x00, 0x80, 0x04, 0x93, 0x03, 0x00, 0x00, 0x4d, + 0xb9, 0x00, 0x00, 0x80, 0x04, 0x94, 0x03, 0x00, + 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0x95, + 0x03, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, + 0x04, 0x96, 0x03, 0x00, 0x00, 0x4d, 0xbc, 0x00, + 0x00, 0x80, 0x04, 0x97, 0x03, 0x00, 0x00, 0x4d, + 0xbd, 0x00, 0x00, 0x80, 0x04, 0x98, 0x03, 0x00, + 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0x99, + 0x03, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, + 0x04, 0x9a, 0x03, 0x00, 0x00, 0x4d, 0xc0, 0x00, + 0x00, 0x80, 0x04, 0x9b, 0x03, 0x00, 0x00, 0x4d, + 0xc1, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x03, 0x00, + 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0x9d, + 0x03, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, + 0x04, 0x9e, 0x03, 0x00, 0x00, 0x4d, 0xc4, 0x00, + 0x00, 0x80, 0x04, 0x9f, 0x03, 0x00, 0x00, 0x4d, + 0xc5, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x03, 0x00, + 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0xa1, + 0x03, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, + 0x04, 0xa2, 0x03, 0x00, 0x00, 0x4d, 0xc8, 0x00, + 0x00, 0x80, 0x04, 0xa3, 0x03, 0x00, 0x00, 0x4d, + 0xc9, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x03, 0x00, + 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xa5, + 0x03, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, + 0x04, 0xa6, 0x03, 0x00, 0x00, 0x4d, 0xcc, 0x00, + 0x00, 0x80, 0x04, 0xa7, 0x03, 0x00, 0x00, 0x4d, + 0xcd, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x03, 0x00, + 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xa9, + 0x03, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, + 0x04, 0xaa, 0x03, 0x00, 0x00, 0x4d, 0xd0, 0x00, + 0x00, 0x80, 0x04, 0xab, 0x03, 0x00, 0x00, 0x4d, + 0xd1, 0x00, 0x00, 0x80, 0x04, 0xac, 0x03, 0x00, + 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xad, + 0x03, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, + 0x04, 0xae, 0x03, 0x00, 0x00, 0x4d, 0xd4, 0x00, + 0x00, 0x80, 0x04, 0xaf, 0x03, 0x00, 0x00, 0x4d, + 0xd5, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x03, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xb1, + 0x03, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, + 0x04, 0xb2, 0x03, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x80, 0x04, 0xb3, 0x03, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x03, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xb5, + 0x03, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, + 0x04, 0xb6, 0x03, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x80, 0x04, 0xb7, 0x03, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x03, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xb9, + 0x03, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, + 0x04, 0xba, 0x03, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x80, 0x04, 0xbb, 0x03, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x03, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xbd, + 0x03, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, + 0x04, 0xbe, 0x03, 0x00, 0x00, 0x4d, 0xe4, 0x00, + 0x00, 0x80, 0x04, 0xbf, 0x03, 0x00, 0x00, 0x4d, + 0xe5, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x03, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xc1, + 0x03, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, + 0x04, 0xc2, 0x03, 0x00, 0x00, 0x4d, 0xe8, 0x00, + 0x00, 0x80, 0x04, 0xc3, 0x03, 0x00, 0x00, 0x4d, + 0xe9, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x03, 0x00, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0xc5, + 0x03, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x87, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x88, 0x01, 0x00, 0x00, + 0x4d, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, + 0x00, 0x00, 0x4d, 0x8b, 0x01, 0x00, 0x00, 0x4d, + 0x8c, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x7d, 0xbe, 0x7e, 0xbe, + 0x7f, 0xbe, 0x80, 0xbe, 0x81, 0xbe, 0x82, 0xbe, + 0x83, 0xbe, 0x84, 0xbe, 0x85, 0xbe, 0x86, 0xbe, + 0x87, 0xbe, 0x88, 0x26, 0x0c, 0x00, 0x4d, 0x58, + 0x01, 0x00, 0x00, 0x04, 0xc6, 0x03, 0x00, 0x00, + 0x04, 0xc7, 0x03, 0x00, 0x00, 0x04, 0xc8, 0x03, + 0x00, 0x00, 0x04, 0xc9, 0x03, 0x00, 0x00, 0x04, + 0xca, 0x03, 0x00, 0x00, 0x04, 0xcb, 0x03, 0x00, + 0x00, 0x04, 0xcc, 0x03, 0x00, 0x00, 0x04, 0xcd, + 0x03, 0x00, 0x00, 0x04, 0xce, 0x03, 0x00, 0x00, + 0x04, 0xcf, 0x03, 0x00, 0x00, 0x04, 0xd0, 0x03, + 0x00, 0x00, 0x04, 0xd1, 0x03, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xc6, 0x03, 0x00, 0x00, 0x04, 0xc7, 0x03, 0x00, + 0x00, 0x04, 0xc8, 0x03, 0x00, 0x00, 0x04, 0xc9, + 0x03, 0x00, 0x00, 0x04, 0xca, 0x03, 0x00, 0x00, + 0x04, 0xcb, 0x03, 0x00, 0x00, 0x04, 0xcc, 0x03, + 0x00, 0x00, 0x04, 0xcd, 0x03, 0x00, 0x00, 0x04, + 0xce, 0x03, 0x00, 0x00, 0x04, 0xcf, 0x03, 0x00, + 0x00, 0x04, 0xd0, 0x03, 0x00, 0x00, 0x04, 0xd1, + 0x03, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x71, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x58, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x85, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xd2, 0x03, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x58, 0x01, 0x00, 0x00, 0x04, 0xd2, 0x03, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xd2, 0x03, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x87, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x88, 0x01, + 0x00, 0x00, 0x4d, 0x89, 0x01, 0x00, 0x00, 0x04, + 0x8a, 0x01, 0x00, 0x00, 0x4d, 0x8b, 0x01, 0x00, + 0x00, 0x4d, 0x8c, 0x01, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x71, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x58, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, + 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, + 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, + 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x85, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xd3, + 0x03, 0x00, 0x00, 0x04, 0xd4, 0x03, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0x58, 0x01, 0x00, 0x00, + 0x04, 0xd3, 0x03, 0x00, 0x00, 0x04, 0xd4, 0x03, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xd3, 0x03, 0x00, 0x00, 0x04, + 0xd4, 0x03, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x87, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x88, 0x01, 0x00, 0x00, 0x4d, + 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x4d, 0x8b, 0x01, 0x00, 0x00, 0x4d, 0x8c, + 0x01, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, + 0x4d, 0xd5, 0x03, 0x00, 0x00, 0x4d, 0xd6, 0x03, + 0x00, 0x00, 0x0b, 0x04, 0xd7, 0x03, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xd8, 0x03, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0xd9, 0x03, 0x00, 0x00, 0x4d, + 0xda, 0x03, 0x00, 0x00, 0x04, 0xdb, 0x03, 0x00, + 0x00, 0x4d, 0xdc, 0x03, 0x00, 0x00, 0x4d, 0xdd, + 0x03, 0x00, 0x00, 0x0b, 0x04, 0xde, 0x03, 0x00, + 0x00, 0x4d, 0xda, 0x03, 0x00, 0x00, 0x04, 0xdf, + 0x03, 0x00, 0x00, 0x4d, 0xdc, 0x03, 0x00, 0x00, + 0x4d, 0xe0, 0x03, 0x00, 0x00, 0x0b, 0x04, 0xe1, + 0x03, 0x00, 0x00, 0x4d, 0xda, 0x03, 0x00, 0x00, + 0x04, 0xe2, 0x03, 0x00, 0x00, 0x4d, 0xdc, 0x03, + 0x00, 0x00, 0x4d, 0xe3, 0x03, 0x00, 0x00, 0x4d, + 0xe4, 0x03, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xe5, + 0x03, 0x00, 0x00, 0x4d, 0xdd, 0x03, 0x00, 0x00, + 0x04, 0xe6, 0x03, 0x00, 0x00, 0x4d, 0xe7, 0x03, + 0x00, 0x00, 0x04, 0xe8, 0x03, 0x00, 0x00, 0x4d, + 0xe9, 0x03, 0x00, 0x00, 0x04, 0xea, 0x03, 0x00, + 0x00, 0x4d, 0xeb, 0x03, 0x00, 0x00, 0x04, 0xec, + 0x03, 0x00, 0x00, 0x4d, 0xed, 0x03, 0x00, 0x00, + 0x04, 0xee, 0x03, 0x00, 0x00, 0x4d, 0xef, 0x03, + 0x00, 0x00, 0x04, 0xf0, 0x03, 0x00, 0x00, 0x4d, + 0xf1, 0x03, 0x00, 0x00, 0x4d, 0xd7, 0x03, 0x00, + 0x00, 0x4d, 0xf2, 0x03, 0x00, 0x00, 0x0b, 0x04, + 0xf3, 0x03, 0x00, 0x00, 0x4d, 0xf4, 0x03, 0x00, + 0x00, 0x04, 0xf5, 0x03, 0x00, 0x00, 0x4d, 0xf6, + 0x03, 0x00, 0x00, 0x4d, 0xf7, 0x03, 0x00, 0x00, + 0x4d, 0x45, 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, + 0xcc, 0x28, 0xf0, 0x0f, 0x01, 0x00, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, + 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_hu_size = 24497; + +const uint8_t intl_hu[24497] = { + 0x01, 0xb7, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x68, 0x75, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x0e, + 0x7b, 0x31, 0x7d, 0x20, 0x7b, 0x30, 0x7d, 0x0a, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, 0x65, + 0x64, 0x69, 0x75, 0x6d, 0x08, 0x66, 0x75, 0x6c, + 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x02, 0x64, + 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, 0x0a, 0x64, + 0x2e, 0x2c, 0x20, 0x45, 0x04, 0x45, 0x64, 0x10, + 0x45, 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, + 0x06, 0x45, 0x68, 0x6d, 0x0e, 0x45, 0x20, 0x48, + 0x48, 0x3a, 0x6d, 0x6d, 0x06, 0x45, 0x48, 0x6d, + 0x16, 0x45, 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x20, 0x61, 0x08, 0x45, 0x68, 0x6d, + 0x73, 0x14, 0x45, 0x20, 0x48, 0x48, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x08, 0x45, 0x48, 0x6d, + 0x73, 0x08, 0x47, 0x20, 0x79, 0x2e, 0x04, 0x47, + 0x79, 0x10, 0x47, 0x20, 0x79, 0x2e, 0x20, 0x4d, + 0x4d, 0x4d, 0x0a, 0x47, 0x79, 0x4d, 0x4d, 0x4d, + 0x16, 0x47, 0x20, 0x79, 0x2e, 0x20, 0x4d, 0x4d, + 0x4d, 0x20, 0x64, 0x2e, 0x0c, 0x47, 0x79, 0x4d, + 0x4d, 0x4d, 0x64, 0x1c, 0x47, 0x20, 0x79, 0x2e, + 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x2e, 0x2c, + 0x20, 0x45, 0x0e, 0x47, 0x79, 0x4d, 0x4d, 0x4d, + 0x45, 0x64, 0x06, 0x61, 0x20, 0x68, 0x02, 0x68, + 0x02, 0x48, 0x0c, 0x61, 0x20, 0x68, 0x3a, 0x6d, + 0x6d, 0x04, 0x68, 0x6d, 0x08, 0x48, 0x3a, 0x6d, + 0x6d, 0x04, 0x48, 0x6d, 0x12, 0x61, 0x20, 0x68, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x06, 0x68, + 0x6d, 0x73, 0x0e, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x06, 0x48, 0x6d, 0x73, 0x16, 0x68, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, + 0x20, 0x76, 0x08, 0x68, 0x6d, 0x73, 0x76, 0x14, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x76, 0x08, 0x48, 0x6d, 0x73, 0x76, 0x10, + 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x20, 0x76, + 0x06, 0x68, 0x6d, 0x76, 0x0e, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x20, 0x76, 0x06, 0x48, 0x6d, 0x76, + 0x02, 0x4c, 0x02, 0x4d, 0x0a, 0x4d, 0x2e, 0x20, + 0x64, 0x2e, 0x04, 0x4d, 0x64, 0x10, 0x4d, 0x2e, + 0x20, 0x64, 0x2e, 0x2c, 0x20, 0x45, 0x06, 0x4d, + 0x45, 0x64, 0x06, 0x4c, 0x4c, 0x4c, 0x06, 0x4d, + 0x4d, 0x4d, 0x0c, 0x4d, 0x4d, 0x4d, 0x20, 0x64, + 0x2e, 0x08, 0x4d, 0x4d, 0x4d, 0x64, 0x12, 0x4d, + 0x4d, 0x4d, 0x20, 0x64, 0x2e, 0x2c, 0x20, 0x45, + 0x0a, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0e, 0x4d, + 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x2e, 0x0a, 0x4d, + 0x4d, 0x4d, 0x4d, 0x64, 0x0a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x08, 0x6d, 0x6d, 0x73, 0x73, 0x04, + 0x6d, 0x73, 0x04, 0x79, 0x2e, 0x02, 0x79, 0x0a, + 0x79, 0x2e, 0x20, 0x4d, 0x2e, 0x04, 0x79, 0x4d, + 0x14, 0x79, 0x2e, 0x20, 0x4d, 0x4d, 0x2e, 0x20, + 0x64, 0x64, 0x2e, 0x06, 0x79, 0x4d, 0x64, 0x1a, + 0x79, 0x2e, 0x20, 0x4d, 0x4d, 0x2e, 0x20, 0x64, + 0x64, 0x2e, 0x2c, 0x20, 0x45, 0x08, 0x79, 0x4d, + 0x45, 0x64, 0x0c, 0x79, 0x2e, 0x20, 0x4d, 0x4d, + 0x4d, 0x08, 0x79, 0x4d, 0x4d, 0x4d, 0x12, 0x79, + 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x2e, + 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x18, 0x79, + 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x2e, + 0x2c, 0x20, 0x45, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, + 0x45, 0x64, 0x0e, 0x79, 0x2e, 0x20, 0x4d, 0x4d, + 0x4d, 0x4d, 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, + 0x0c, 0x79, 0x2e, 0x20, 0x51, 0x51, 0x51, 0x08, + 0x79, 0x51, 0x51, 0x51, 0x0e, 0x79, 0x2e, 0x20, + 0x51, 0x51, 0x51, 0x51, 0x0a, 0x79, 0x51, 0x51, + 0x51, 0x51, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, + 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x73, 0x20, 0x79, 0x2e, 0x20, 0x4d, + 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x2e, 0x2c, 0x20, + 0x45, 0x45, 0x45, 0x45, 0x14, 0x79, 0x4d, 0x4d, + 0x4d, 0x4d, 0x45, 0x45, 0x45, 0x45, 0x64, 0x14, + 0x79, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, + 0x64, 0x2e, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, + 0x64, 0x16, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x73, 0x18, 0x48, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x7a, 0x7a, + 0x7a, 0x7a, 0x12, 0x68, 0x6d, 0x6d, 0x73, 0x73, + 0x7a, 0x7a, 0x7a, 0x7a, 0x12, 0x48, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x7a, 0x08, 0x68, + 0x6d, 0x73, 0x7a, 0x16, 0x74, 0x69, 0x6d, 0x65, + 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x0e, + 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x02, + 0x4a, 0x02, 0x46, 0x02, 0xc1, 0x02, 0x41, 0x04, + 0x53, 0x7a, 0x02, 0x4f, 0x02, 0x4e, 0x02, 0x44, + 0x0c, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x08, + 0x6a, 0x61, 0x6e, 0x2e, 0x0a, 0x66, 0x65, 0x62, + 0x72, 0x2e, 0x0a, 0x6d, 0xe1, 0x72, 0x63, 0x2e, + 0x08, 0xe1, 0x70, 0x72, 0x2e, 0x08, 0x6d, 0xe1, + 0x6a, 0x2e, 0x08, 0x6a, 0xfa, 0x6e, 0x2e, 0x08, + 0x6a, 0xfa, 0x6c, 0x2e, 0x08, 0x61, 0x75, 0x67, + 0x2e, 0x0c, 0x73, 0x7a, 0x65, 0x70, 0x74, 0x2e, + 0x08, 0x6f, 0x6b, 0x74, 0x2e, 0x08, 0x6e, 0x6f, + 0x76, 0x2e, 0x08, 0x64, 0x65, 0x63, 0x2e, 0x0c, + 0x6a, 0x61, 0x6e, 0x75, 0xe1, 0x72, 0x0e, 0x66, + 0x65, 0x62, 0x72, 0x75, 0xe1, 0x72, 0x0e, 0x6d, + 0xe1, 0x72, 0x63, 0x69, 0x75, 0x73, 0x0e, 0xe1, + 0x70, 0x72, 0x69, 0x6c, 0x69, 0x73, 0x0a, 0x6d, + 0xe1, 0x6a, 0x75, 0x73, 0x0c, 0x6a, 0xfa, 0x6e, + 0x69, 0x75, 0x73, 0x0c, 0x6a, 0xfa, 0x6c, 0x69, + 0x75, 0x73, 0x12, 0x61, 0x75, 0x67, 0x75, 0x73, + 0x7a, 0x74, 0x75, 0x73, 0x14, 0x73, 0x7a, 0x65, + 0x70, 0x74, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x0e, + 0x6f, 0x6b, 0x74, 0xf3, 0x62, 0x65, 0x72, 0x10, + 0x6e, 0x6f, 0x76, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x10, 0x64, 0x65, 0x63, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x0c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x73, + 0x02, 0x56, 0x02, 0x4b, 0x04, 0x43, 0x73, 0x02, + 0x50, 0x06, 0x53, 0x7a, 0x65, 0x06, 0x53, 0x7a, + 0x6f, 0x10, 0x76, 0x61, 0x73, 0xe1, 0x72, 0x6e, + 0x61, 0x70, 0x0b, 0x68, 0x00, 0xe9, 0x00, 0x74, + 0x00, 0x66, 0x00, 0x51, 0x01, 0x08, 0x6b, 0x65, + 0x64, 0x64, 0x0c, 0x73, 0x7a, 0x65, 0x72, 0x64, + 0x61, 0x12, 0x63, 0x73, 0xfc, 0x74, 0xf6, 0x72, + 0x74, 0xf6, 0x6b, 0x0c, 0x70, 0xe9, 0x6e, 0x74, + 0x65, 0x6b, 0x0e, 0x73, 0x7a, 0x6f, 0x6d, 0x62, + 0x61, 0x74, 0x08, 0x64, 0x61, 0x79, 0x73, 0x04, + 0x42, 0x4b, 0x08, 0x65, 0x72, 0x61, 0x73, 0x06, + 0x64, 0x65, 0x2e, 0x04, 0x61, 0x6d, 0x06, 0x64, + 0x75, 0x2e, 0x04, 0x70, 0x6d, 0x14, 0x64, 0x61, + 0x79, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x73, + 0x06, 0x4d, 0x30, 0x31, 0x06, 0x4d, 0x30, 0x32, + 0x06, 0x4d, 0x30, 0x33, 0x06, 0x4d, 0x30, 0x34, + 0x06, 0x4d, 0x30, 0x35, 0x06, 0x4d, 0x30, 0x36, + 0x06, 0x4d, 0x30, 0x37, 0x06, 0x4d, 0x30, 0x38, + 0x06, 0x4d, 0x30, 0x39, 0x06, 0x4d, 0x31, 0x30, + 0x06, 0x4d, 0x31, 0x31, 0x06, 0x4d, 0x31, 0x32, + 0x08, 0x54, 0x6f, 0x75, 0x74, 0x08, 0x42, 0x61, + 0x62, 0x61, 0x0a, 0x48, 0x61, 0x74, 0x6f, 0x72, + 0x0a, 0x4b, 0x69, 0x61, 0x68, 0x6b, 0x08, 0x54, + 0x6f, 0x62, 0x61, 0x0c, 0x41, 0x6d, 0x73, 0x68, + 0x69, 0x72, 0x10, 0x42, 0x61, 0x72, 0x61, 0x6d, + 0x68, 0x61, 0x74, 0x12, 0x42, 0x61, 0x72, 0x61, + 0x6d, 0x6f, 0x75, 0x64, 0x61, 0x0e, 0x42, 0x61, + 0x73, 0x68, 0x61, 0x6e, 0x73, 0x0a, 0x50, 0x61, + 0x6f, 0x6e, 0x61, 0x08, 0x45, 0x70, 0x65, 0x70, + 0x0a, 0x4d, 0x65, 0x73, 0x72, 0x61, 0x0a, 0x4e, + 0x61, 0x73, 0x69, 0x65, 0x08, 0x45, 0x52, 0x41, + 0x30, 0x08, 0x45, 0x52, 0x41, 0x31, 0x10, 0x4d, + 0x65, 0x73, 0x6b, 0x65, 0x72, 0x65, 0x6d, 0x0c, + 0x54, 0x65, 0x6b, 0x65, 0x6d, 0x74, 0x0a, 0x48, + 0x65, 0x64, 0x61, 0x72, 0x0c, 0x54, 0x61, 0x68, + 0x73, 0x61, 0x73, 0x06, 0x54, 0x65, 0x72, 0x0e, + 0x59, 0x65, 0x6b, 0x61, 0x74, 0x69, 0x74, 0x0e, + 0x4d, 0x65, 0x67, 0x61, 0x62, 0x69, 0x74, 0x0c, + 0x4d, 0x69, 0x61, 0x7a, 0x69, 0x61, 0x0c, 0x47, + 0x65, 0x6e, 0x62, 0x6f, 0x74, 0x08, 0x53, 0x65, + 0x6e, 0x65, 0x0a, 0x48, 0x61, 0x6d, 0x6c, 0x65, + 0x0e, 0x4e, 0x65, 0x68, 0x61, 0x73, 0x73, 0x65, + 0x0e, 0x50, 0x61, 0x67, 0x75, 0x6d, 0x65, 0x6e, + 0x06, 0x69, 0x65, 0x2e, 0x08, 0x69, 0x73, 0x7a, + 0x2e, 0x06, 0x42, 0x43, 0x45, 0x04, 0x43, 0x45, + 0x0a, 0x69, 0x2e, 0x20, 0x65, 0x2e, 0x0c, 0x69, + 0x2e, 0x20, 0x73, 0x7a, 0x2e, 0x29, 0x69, 0x00, + 0x64, 0x00, 0x51, 0x01, 0x73, 0x00, 0x7a, 0x00, + 0xe1, 0x00, 0x6d, 0x00, 0xed, 0x00, 0x74, 0x00, + 0xe1, 0x00, 0x73, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x20, 0x00, 0x65, 0x00, 0x6c, 0x00, + 0x51, 0x01, 0x74, 0x00, 0x74, 0x00, 0x2d, 0x69, + 0x00, 0x64, 0x00, 0x51, 0x01, 0x73, 0x00, 0x7a, + 0x00, 0xe1, 0x00, 0x6d, 0x00, 0xed, 0x00, 0x74, + 0x00, 0xe1, 0x00, 0x73, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x20, 0x00, 0x73, 0x00, 0x7a, + 0x00, 0x65, 0x00, 0x72, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x0a, 0x54, 0x69, 0x73, 0x72, + 0x69, 0x0c, 0x48, 0x65, 0x73, 0x76, 0xe1, 0x6e, + 0x0e, 0x4b, 0x69, 0x73, 0x7a, 0x6c, 0xe9, 0x76, + 0x0c, 0x54, 0xe9, 0x76, 0xe9, 0x73, 0x7a, 0x08, + 0x53, 0x76, 0xe1, 0x74, 0x0c, 0xc1, 0x64, 0xe1, + 0x72, 0x20, 0x49, 0x08, 0xc1, 0x64, 0xe1, 0x72, + 0x0c, 0x4e, 0x69, 0x73, 0x7a, 0xe1, 0x6e, 0x08, + 0x49, 0x6a, 0xe1, 0x72, 0x0c, 0x53, 0x7a, 0x69, + 0x76, 0xe1, 0x6e, 0x0a, 0x54, 0x61, 0x6d, 0x75, + 0x7a, 0x04, 0xc1, 0x76, 0x08, 0x45, 0x6c, 0x75, + 0x6c, 0x0e, 0xc1, 0x64, 0xe1, 0x72, 0x20, 0x49, + 0x49, 0x04, 0x54, 0xc9, 0x0e, 0x43, 0x68, 0x61, + 0x69, 0x74, 0x72, 0x61, 0x10, 0x56, 0x61, 0x69, + 0x73, 0x61, 0x6b, 0x68, 0x61, 0x10, 0x4a, 0x79, + 0x61, 0x69, 0x73, 0x74, 0x68, 0x61, 0x0c, 0x41, + 0x73, 0x61, 0x64, 0x68, 0x61, 0x0e, 0x53, 0x72, + 0x61, 0x76, 0x61, 0x6e, 0x61, 0x0c, 0x42, 0x68, + 0x61, 0x64, 0x72, 0x61, 0x0c, 0x41, 0x73, 0x76, + 0x69, 0x6e, 0x61, 0x0e, 0x4b, 0x61, 0x72, 0x74, + 0x69, 0x6b, 0x61, 0x14, 0x41, 0x67, 0x72, 0x61, + 0x68, 0x61, 0x79, 0x61, 0x6e, 0x61, 0x0a, 0x50, + 0x61, 0x75, 0x73, 0x61, 0x0a, 0x4d, 0x61, 0x67, + 0x68, 0x61, 0x10, 0x50, 0x68, 0x61, 0x6c, 0x67, + 0x75, 0x6e, 0x61, 0x08, 0x53, 0x61, 0x6b, 0x61, + 0x08, 0x4d, 0x6f, 0x68, 0x2e, 0x08, 0x53, 0x61, + 0x66, 0x2e, 0x0c, 0x52, 0xe9, 0x62, 0x2e, 0x20, + 0x31, 0x0c, 0x52, 0xe9, 0x62, 0x2e, 0x20, 0x32, + 0x0e, 0x44, 0x73, 0x65, 0x6d, 0x2e, 0x20, 0x49, + 0x10, 0x44, 0x73, 0x65, 0x6d, 0x2e, 0x20, 0x49, + 0x49, 0x08, 0x52, 0x65, 0x64, 0x2e, 0x08, 0x53, + 0x61, 0x62, 0x2e, 0x08, 0x52, 0x61, 0x6d, 0x2e, + 0x08, 0x53, 0x65, 0x76, 0x2e, 0x0e, 0x44, 0x73, + 0xfc, 0x6c, 0x20, 0x6b, 0x2e, 0x0e, 0x44, 0x73, + 0xfc, 0x6c, 0x20, 0x68, 0x2e, 0x10, 0x4d, 0x6f, + 0x68, 0x61, 0x72, 0x72, 0x65, 0x6d, 0x0a, 0x53, + 0x61, 0x66, 0x61, 0x72, 0x1a, 0x52, 0xe9, 0x62, + 0x69, 0x20, 0x65, 0x6c, 0x20, 0x61, 0x76, 0x76, + 0x65, 0x6c, 0x1c, 0x52, 0xe9, 0x62, 0x69, 0x20, + 0x65, 0x6c, 0x20, 0x61, 0x63, 0x63, 0x68, 0x65, + 0x72, 0x20, 0x44, 0x73, 0x65, 0x6d, 0xe1, 0x64, + 0x69, 0x20, 0x65, 0x6c, 0x20, 0x61, 0x76, 0x76, + 0x65, 0x6c, 0x22, 0x44, 0x73, 0x65, 0x6d, 0xe1, + 0x64, 0x69, 0x20, 0x65, 0x6c, 0x20, 0x61, 0x63, + 0x63, 0x68, 0x65, 0x72, 0x0c, 0x52, 0x65, 0x64, + 0x73, 0x65, 0x62, 0x0a, 0x53, 0x61, 0x62, 0xe1, + 0x6e, 0x0e, 0x52, 0x61, 0x6d, 0x61, 0x64, 0xe1, + 0x6e, 0x0c, 0x53, 0x65, 0x76, 0x76, 0xe1, 0x6c, + 0x12, 0x44, 0x73, 0xfc, 0x6c, 0x20, 0x6b, 0x61, + 0x64, 0x65, 0x14, 0x44, 0x73, 0xfc, 0x6c, 0x20, + 0x68, 0x65, 0x64, 0x73, 0x65, 0x04, 0x4d, 0x46, + 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, 0x36, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x36, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x48, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x36, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x36, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, + 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x1d, 0x57, 0x00, 0x61, 0x00, 0x64, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, + 0x52, 0x00, 0x65, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, 0x59, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x2d, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6d, 0x00, + 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x2b, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x2d, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, 0x2d, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x2a, 0x4a, 0x69, + 0x6e, 0x67, 0x6f, 0x2d, 0x6b, 0x65, 0x69, 0x75, + 0x6e, 0x20, 0x28, 0x37, 0x36, 0x37, 0x2d, 0x37, + 0x37, 0x30, 0x29, 0x1d, 0x48, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x38, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x1f, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x2d, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x1f, 0x44, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1d, 0x4a, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x4b, + 0x00, 0x61, 0x00, 0x6a, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1f, 0x53, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x20, 0x54, 0x65, 0x6e, 0x2d, 0x61, 0x6e, + 0x20, 0x28, 0x38, 0x35, 0x37, 0x2d, 0x38, 0x35, + 0x39, 0x29, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x21, 0x47, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x61, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x1f, 0x45, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, + 0x4a, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1b, + 0x4c, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, + 0x41, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x1f, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, 0x45, + 0x00, 0x69, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, + 0x73, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x69, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x27, 0x4a, 0x00, 0x69, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x29, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4c, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x61, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x25, 0x4a, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x24, 0x54, 0x65, + 0x6e, 0x2d, 0x65, 0x69, 0x20, 0x28, 0x31, 0x31, + 0x31, 0x30, 0x2d, 0x31, 0x31, 0x31, 0x33, 0x29, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x21, 0x48, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x44, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x48, 0x00, 0x65, 0x00, 0x69, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x27, 0x45, 0x00, 0x69, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1f, 0x4c, 0x01, 0x68, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x61, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x41, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x4a, 0x00, 0x69, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x59, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, + 0x00, 0x75, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x29, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, + 0x6e, 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x4d, 0x01, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x27, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x75, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x29, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, 0x29, + 0x52, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x45, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x4c, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x61, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6d, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x74, 0x00, 0x73, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x48, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, + 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x27, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x21, 0x4c, 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x21, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, + 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x27, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, + 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x72, 0x00, 0x65, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x62, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x27, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4d, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x02, 0x54, 0x02, 0x53, 0x0a, + 0x4d, 0x65, 0x69, 0x6a, 0x69, 0x0d, 0x54, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x0b, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x0c, 0x48, 0x65, + 0x69, 0x73, 0x65, 0x69, 0x12, 0x46, 0x61, 0x72, + 0x76, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x16, 0x4f, + 0x72, 0x64, 0x69, 0x62, 0x65, 0x68, 0x65, 0x73, + 0x68, 0x74, 0x0e, 0x4b, 0x68, 0x6f, 0x72, 0x64, + 0x61, 0x64, 0x06, 0x54, 0x69, 0x72, 0x0c, 0x4d, + 0x6f, 0x72, 0x64, 0x61, 0x64, 0x12, 0x53, 0x68, + 0x61, 0x68, 0x72, 0x69, 0x76, 0x61, 0x72, 0x08, + 0x4d, 0x65, 0x68, 0x72, 0x08, 0x41, 0x62, 0x61, + 0x6e, 0x08, 0x41, 0x7a, 0x61, 0x72, 0x06, 0x44, + 0x65, 0x79, 0x0c, 0x42, 0x61, 0x68, 0x6d, 0x61, + 0x6e, 0x0c, 0x45, 0x73, 0x66, 0x61, 0x6e, 0x64, + 0x04, 0x41, 0x50, 0x19, 0x52, 0x00, 0x2e, 0x00, + 0x4f, 0x00, 0x2e, 0x00, 0x43, 0x00, 0x2e, 0x00, + 0x20, 0x00, 0x65, 0x00, 0x6c, 0x00, 0x51, 0x01, + 0x74, 0x00, 0x74, 0x00, 0x0c, 0x52, 0x2e, 0x4f, + 0x2e, 0x43, 0x2e, 0x12, 0x63, 0x61, 0x6c, 0x65, + 0x6e, 0x64, 0x61, 0x72, 0x73, 0x08, 0x64, 0x61, + 0x74, 0x65, 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, + 0x6e, 0x75, 0x10, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0x1e, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, + 0x65, 0x72, 0x6e, 0x26, 0x7b, 0x6d, 0x69, 0x6e, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, + 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x0e, + 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x26, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0xa0, 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x79, 0x7d, 0x3c, 0x7b, 0x6d, 0x69, 0x6e, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0xa0, + 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, + 0x79, 0x7d, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x63, 0x79, 0x2a, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0x7b, 0x70, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, + 0x7d, 0x40, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x7b, 0x70, 0x65, + 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, + 0x6e, 0x7d, 0x0e, 0x70, 0x65, 0x72, 0x63, 0x65, + 0x6e, 0x74, 0x10, 0x70, 0x61, 0x74, 0x74, 0x65, + 0x72, 0x6e, 0x73, 0x02, 0x2c, 0x02, 0xa0, 0x0a, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x06, 0x4e, 0x61, + 0x4e, 0x06, 0x6e, 0x61, 0x6e, 0x02, 0x2b, 0x10, + 0x70, 0x6c, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x02, 0x2d, 0x12, 0x6d, 0x69, 0x6e, 0x75, 0x73, + 0x53, 0x69, 0x67, 0x6e, 0x02, 0x25, 0x16, 0x70, + 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, + 0x67, 0x6e, 0x03, 0x1e, 0x22, 0x10, 0x69, 0x6e, + 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x0e, 0x73, + 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x04, 0x46, + 0x74, 0x06, 0x48, 0x55, 0x46, 0x02, 0xa5, 0x06, + 0x4a, 0x50, 0x59, 0x08, 0x46, 0x43, 0x46, 0x41, + 0x06, 0x58, 0x41, 0x46, 0x06, 0x43, 0x46, 0x41, + 0x06, 0x58, 0x4f, 0x46, 0x08, 0x43, 0x46, 0x50, + 0x46, 0x06, 0x58, 0x50, 0x46, 0x14, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, + 0x52, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, + 0x74, 0x6c, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x6a, + 0x73, 0x6f, 0x6e, 0x70, 0x2f, 0x68, 0x75, 0x2e, + 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, + 0x00, 0x01, 0x00, 0x27, 0x00, 0xa1, 0x01, 0x80, + 0x69, 0x01, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x39, + 0xd0, 0x00, 0x00, 0x00, 0x43, 0xd1, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd2, 0x00, 0x00, 0x00, 0x4d, + 0xd3, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd4, 0x00, + 0x00, 0x00, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x04, + 0xd6, 0x00, 0x00, 0x00, 0x04, 0xd7, 0x00, 0x00, + 0x00, 0x04, 0xd8, 0x00, 0x00, 0x00, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x04, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdb, 0x00, 0x00, 0x00, 0x04, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x04, + 0xde, 0x00, 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, + 0x00, 0x04, 0xe0, 0x00, 0x00, 0x00, 0x04, 0xe1, + 0x00, 0x00, 0x00, 0x04, 0xe2, 0x00, 0x00, 0x00, + 0x26, 0x0f, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, + 0x0a, 0x4d, 0xe4, 0x00, 0x00, 0x00, 0x09, 0x4d, + 0xe5, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, + 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe9, + 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0xed, 0x00, + 0x00, 0x00, 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, + 0xef, 0x00, 0x00, 0x00, 0x04, 0xf0, 0x00, 0x00, + 0x00, 0x4d, 0xf1, 0x00, 0x00, 0x00, 0x04, 0xf2, + 0x00, 0x00, 0x00, 0x4d, 0xf3, 0x00, 0x00, 0x00, + 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xf5, 0x00, + 0x00, 0x00, 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, + 0xf7, 0x00, 0x00, 0x00, 0x04, 0xf8, 0x00, 0x00, + 0x00, 0x4d, 0xf9, 0x00, 0x00, 0x00, 0x04, 0xfa, + 0x00, 0x00, 0x00, 0x4d, 0xfb, 0x00, 0x00, 0x00, + 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xfd, 0x00, + 0x00, 0x00, 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, + 0xff, 0x00, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, + 0x00, 0x4d, 0x01, 0x01, 0x00, 0x00, 0x04, 0x02, + 0x01, 0x00, 0x00, 0x4d, 0x02, 0x01, 0x00, 0x00, + 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0x04, 0x01, + 0x00, 0x00, 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, + 0x06, 0x01, 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, + 0x00, 0x4d, 0x08, 0x01, 0x00, 0x00, 0x04, 0x09, + 0x01, 0x00, 0x00, 0x4d, 0x0a, 0x01, 0x00, 0x00, + 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, 0x0c, 0x01, + 0x00, 0x00, 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, + 0x0e, 0x01, 0x00, 0x00, 0x04, 0x0f, 0x01, 0x00, + 0x00, 0x4d, 0x10, 0x01, 0x00, 0x00, 0x04, 0x11, + 0x01, 0x00, 0x00, 0x4d, 0x12, 0x01, 0x00, 0x00, + 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, 0x14, 0x01, + 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, + 0x16, 0x01, 0x00, 0x00, 0x04, 0x17, 0x01, 0x00, + 0x00, 0x4d, 0x18, 0x01, 0x00, 0x00, 0x04, 0x19, + 0x01, 0x00, 0x00, 0x4d, 0x1a, 0x01, 0x00, 0x00, + 0x04, 0x1b, 0x01, 0x00, 0x00, 0x4d, 0x1c, 0x01, + 0x00, 0x00, 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, + 0x1e, 0x01, 0x00, 0x00, 0x04, 0x1f, 0x01, 0x00, + 0x00, 0x4d, 0x20, 0x01, 0x00, 0x00, 0x04, 0x21, + 0x01, 0x00, 0x00, 0x4d, 0x22, 0x01, 0x00, 0x00, + 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, 0x23, 0x01, + 0x00, 0x00, 0x04, 0x24, 0x01, 0x00, 0x00, 0x4d, + 0x25, 0x01, 0x00, 0x00, 0x04, 0x26, 0x01, 0x00, + 0x00, 0x4d, 0x27, 0x01, 0x00, 0x00, 0x04, 0x28, + 0x01, 0x00, 0x00, 0x4d, 0x29, 0x01, 0x00, 0x00, + 0x04, 0x2a, 0x01, 0x00, 0x00, 0x4d, 0x2b, 0x01, + 0x00, 0x00, 0x04, 0x2c, 0x01, 0x00, 0x00, 0x4d, + 0x2d, 0x01, 0x00, 0x00, 0x04, 0x2e, 0x01, 0x00, + 0x00, 0x4d, 0x2f, 0x01, 0x00, 0x00, 0x04, 0x30, + 0x01, 0x00, 0x00, 0x4d, 0x31, 0x01, 0x00, 0x00, + 0x04, 0x32, 0x01, 0x00, 0x00, 0x4d, 0x33, 0x01, + 0x00, 0x00, 0x04, 0x34, 0x01, 0x00, 0x00, 0x4d, + 0x35, 0x01, 0x00, 0x00, 0x04, 0x36, 0x01, 0x00, + 0x00, 0x4d, 0x37, 0x01, 0x00, 0x00, 0x4d, 0x38, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x39, 0x01, 0x00, + 0x00, 0x4d, 0x3a, 0x01, 0x00, 0x00, 0x04, 0x3b, + 0x01, 0x00, 0x00, 0x4d, 0x3c, 0x01, 0x00, 0x00, + 0x04, 0x2e, 0x01, 0x00, 0x00, 0x4d, 0x2f, 0x01, + 0x00, 0x00, 0x04, 0x28, 0x01, 0x00, 0x00, 0x4d, + 0x29, 0x01, 0x00, 0x00, 0x4d, 0x3d, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x3e, 0x01, 0x00, 0x00, 0x4d, + 0x3f, 0x01, 0x00, 0x00, 0x04, 0x40, 0x01, 0x00, + 0x00, 0x4d, 0x41, 0x01, 0x00, 0x00, 0x04, 0x09, + 0x01, 0x00, 0x00, 0x4d, 0x08, 0x01, 0x00, 0x00, + 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, 0x04, 0x01, + 0x00, 0x00, 0x4d, 0x42, 0x01, 0x00, 0x00, 0x4d, + 0x43, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x0b, 0x04, + 0x44, 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, + 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x04, 0x46, + 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, + 0x04, 0x44, 0x01, 0x00, 0x00, 0x04, 0x44, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x65, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x02, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x02, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x73, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x75, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, + 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0xd5, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x00, 0xbe, + 0x01, 0xbe, 0x02, 0xbe, 0x03, 0xbe, 0x04, 0xbe, + 0x05, 0xbe, 0x06, 0xbe, 0x07, 0xbe, 0x08, 0xbe, + 0x09, 0xbe, 0x0a, 0xbe, 0x0b, 0x26, 0x0c, 0x00, + 0x4d, 0x4c, 0x01, 0x00, 0x00, 0xbe, 0x0c, 0xbe, + 0x0d, 0xbe, 0x0e, 0xbe, 0x0f, 0xbe, 0x10, 0xbe, + 0x11, 0xbe, 0x12, 0xbe, 0x13, 0xbe, 0x14, 0xbe, + 0x15, 0xbe, 0x16, 0xbe, 0x17, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, + 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x65, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x02, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x02, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x73, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, + 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x4d, + 0xd6, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x18, + 0xbe, 0x19, 0xbe, 0x1a, 0xbe, 0x1b, 0xbe, 0x1c, + 0xbe, 0x1d, 0xbe, 0x1e, 0xbe, 0x1f, 0xbe, 0x20, + 0xbe, 0x21, 0xbe, 0x22, 0xbe, 0x23, 0xbe, 0x24, + 0x26, 0x0d, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, + 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, + 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, + 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, + 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, + 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, + 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, + 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, + 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, + 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, + 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, + 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, + 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x65, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x02, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x02, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x73, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, + 0x04, 0x95, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x4d, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, + 0x7a, 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x25, 0xbe, 0x26, 0xbe, + 0x27, 0xbe, 0x28, 0xbe, 0x29, 0xbe, 0x2a, 0xbe, + 0x2b, 0xbe, 0x2c, 0xbe, 0x2d, 0xbe, 0x2e, 0xbe, + 0x2f, 0xbe, 0x30, 0x26, 0x0c, 0x00, 0x4d, 0x4c, + 0x01, 0x00, 0x00, 0xbe, 0x31, 0xbe, 0x32, 0xbe, + 0x33, 0xbe, 0x34, 0xbe, 0x35, 0xbe, 0x36, 0xbe, + 0x37, 0xbe, 0x38, 0xbe, 0x39, 0xbe, 0x3a, 0xbe, + 0x3b, 0xbe, 0x3c, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x65, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x02, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x02, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x73, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, + 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x3d, 0xbe, 0x3e, + 0xbe, 0x3f, 0xbe, 0x40, 0xbe, 0x41, 0xbe, 0x42, + 0xbe, 0x43, 0xbe, 0x44, 0xbe, 0x45, 0xbe, 0x46, + 0xbe, 0x47, 0xbe, 0x48, 0xbe, 0x49, 0x26, 0x0d, + 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x96, + 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, + 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, + 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, + 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, + 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, + 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, + 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, + 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, + 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, + 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, + 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, + 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, + 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, + 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, + 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x65, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x02, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x02, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x73, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x94, 0x01, + 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x76, 0x01, 0x00, 0x00, 0x4d, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x4a, 0xbe, 0x4b, 0xbe, 0x4c, 0xbe, + 0x4d, 0xbe, 0x4e, 0xbe, 0x4f, 0xbe, 0x50, 0xbe, + 0x51, 0xbe, 0x52, 0xbe, 0x53, 0xbe, 0x54, 0xbe, + 0x55, 0xbe, 0x56, 0x26, 0x0d, 0x00, 0x4d, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, + 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, + 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, + 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, + 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, + 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, + 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, + 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, + 0xa2, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, + 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, + 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, + 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, + 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, + 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, + 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, + 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, + 0x04, 0xa2, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x65, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x02, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x02, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x73, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x94, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x94, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, + 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, + 0x4d, 0xd9, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x57, 0xbe, 0x58, 0xbe, 0x59, 0xbe, 0x5a, 0xbe, + 0x5b, 0xbe, 0x5c, 0xbe, 0x5d, 0xbe, 0x5e, 0xbe, + 0x5f, 0xbe, 0x60, 0xbe, 0x61, 0xbe, 0x62, 0x26, + 0x0c, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, + 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, + 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, + 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x65, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x02, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x02, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x73, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x94, 0x01, 0x00, + 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x94, + 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x4d, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x4d, + 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x44, 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, + 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, + 0x00, 0x04, 0x44, 0x01, 0x00, 0x00, 0x04, 0x44, + 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x65, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x02, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x02, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x73, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, + 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, + 0x04, 0xa6, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, + 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, + 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, + 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, + 0x00, 0x26, 0x04, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, + 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, + 0x04, 0xa8, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x4d, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, + 0x7a, 0x01, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x63, 0xbe, 0x64, 0xbe, + 0x65, 0xbe, 0x66, 0xbe, 0x67, 0xbe, 0x68, 0xbe, + 0x69, 0xbe, 0x6a, 0xbe, 0x6b, 0xbe, 0x6c, 0xbe, + 0x6d, 0xbe, 0x6e, 0xbe, 0x6f, 0xbe, 0x70, 0x26, + 0x0e, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, + 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, 0xae, + 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, + 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, + 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, + 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, + 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, 0x04, 0xb6, + 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, + 0x04, 0xb8, 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xab, 0x01, + 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, + 0xad, 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, + 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, + 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, + 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, + 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, 0x00, 0x04, + 0xb5, 0x01, 0x00, 0x00, 0x04, 0xb6, 0x01, 0x00, + 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, + 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x65, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x02, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x02, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x73, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xb9, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x75, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, + 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x71, 0xbe, + 0x72, 0xbe, 0x73, 0xbe, 0x74, 0xbe, 0x75, 0xbe, + 0x76, 0xbe, 0x77, 0xbe, 0x78, 0xbe, 0x79, 0xbe, + 0x7a, 0xbe, 0x7b, 0xbe, 0x7c, 0x26, 0x0c, 0x00, + 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, + 0x00, 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, + 0xbc, 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, + 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, + 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, + 0x04, 0xc1, 0x01, 0x00, 0x00, 0x04, 0xc2, 0x01, + 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, 0x04, + 0xc4, 0x01, 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, 0x04, 0xbb, + 0x01, 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, + 0x04, 0xbd, 0x01, 0x00, 0x00, 0x04, 0xbe, 0x01, + 0x00, 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, 0x04, + 0xc0, 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, + 0x00, 0x04, 0xc2, 0x01, 0x00, 0x00, 0x04, 0xc3, + 0x01, 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, + 0x04, 0xc5, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x65, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x02, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x02, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x73, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xc6, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0xc6, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, + 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x7d, 0xbe, 0x7e, 0xbe, 0x7f, 0xbe, 0x80, 0xbe, + 0x81, 0xbe, 0x82, 0xbe, 0x83, 0xbe, 0x84, 0xbe, + 0x85, 0xbe, 0x86, 0xbe, 0x87, 0xbe, 0x88, 0x26, + 0x0c, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, + 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, 0x04, 0xca, + 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, + 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, + 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, 0x04, + 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, + 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, 0x04, 0xd2, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, + 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, 0xd5, 0x01, + 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, 0x04, + 0xd7, 0x01, 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, + 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, + 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, + 0x04, 0xdc, 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, + 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x65, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x02, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x02, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x73, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xdf, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xdf, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x76, 0x01, 0x00, 0x00, 0x4d, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x89, 0xbe, 0x8a, 0xbe, 0x8b, 0xbe, + 0x8c, 0xbe, 0x8d, 0xbe, 0x8e, 0xbe, 0x8f, 0xbe, + 0x90, 0xbe, 0x91, 0xbe, 0x92, 0xbe, 0x93, 0xbe, + 0x94, 0x26, 0x0c, 0x00, 0x4d, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, + 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, + 0x04, 0xca, 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, + 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, + 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, + 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, + 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, + 0x04, 0xd2, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd3, 0x01, + 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, + 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, + 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, 0xd8, + 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, + 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, + 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, 0x04, + 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x65, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x02, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x02, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x73, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xdf, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xdf, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x4d, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, + 0x7a, 0x01, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x44, 0x01, 0x00, 0x00, + 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, + 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, + 0x14, 0x01, 0x00, 0x00, 0x04, 0x44, 0x01, 0x00, + 0x00, 0x04, 0x44, 0x01, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x65, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x02, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x02, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x73, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xe0, 0x01, 0x00, + 0x00, 0x04, 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, + 0x01, 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, + 0x04, 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, + 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, + 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, + 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, + 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, + 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, + 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, + 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, + 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, + 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, + 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, + 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, + 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, + 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, + 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, + 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, 0x01, + 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x04, + 0xff, 0x01, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, + 0x00, 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, + 0x80, 0x04, 0x01, 0x02, 0x00, 0x00, 0x4d, 0x21, + 0x00, 0x00, 0x80, 0x04, 0x02, 0x02, 0x00, 0x00, + 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0x03, 0x02, + 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, + 0x04, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, + 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, 0x4d, 0x25, + 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, 0x00, 0x00, + 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0x07, 0x02, + 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, + 0x08, 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, + 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, 0x29, + 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, + 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, + 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, + 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, + 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x2d, + 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, + 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, + 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, + 0x10, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, + 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, 0x31, + 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, + 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, + 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, + 0x14, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, + 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, 0x35, + 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, + 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, + 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, + 0x18, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, + 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, 0x39, + 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, + 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, + 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, + 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, + 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x3d, + 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, + 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, + 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, + 0x20, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, + 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, 0x41, + 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, + 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, + 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, + 0x24, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, + 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, 0x45, + 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, + 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, + 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, + 0x28, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, + 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, 0x49, + 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, + 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, + 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, + 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, + 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x4d, + 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, + 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, + 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, + 0x30, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, + 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, 0x51, + 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, + 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, + 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, + 0x34, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, + 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, 0x55, + 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, + 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, + 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, + 0x38, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, + 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, 0x59, + 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, + 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, + 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, + 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, + 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x5d, + 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, + 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, + 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, + 0x40, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, + 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, 0x61, + 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, + 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, + 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, + 0x44, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, + 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, 0x65, + 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, + 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, + 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, + 0x48, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, + 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, 0x69, + 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, + 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, + 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, + 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, + 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x6d, + 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, + 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, + 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, + 0x50, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, + 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, 0x71, + 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, + 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, + 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, + 0x54, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, + 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, 0x75, + 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, + 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, + 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, + 0x58, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, + 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, 0x79, + 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, + 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, + 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, + 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, + 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x7d, + 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, + 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, + 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, + 0x60, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, + 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, 0x81, + 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, + 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, + 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, + 0x64, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, + 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, 0x85, + 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, + 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, + 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, + 0x68, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, + 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, 0x89, + 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, + 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, + 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, + 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, + 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x8d, + 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, + 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, + 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, + 0x70, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, + 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, 0x91, + 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, + 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, + 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, + 0x74, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, + 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, 0x95, + 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, + 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, + 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, + 0x78, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, + 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, 0x99, + 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, + 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, + 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, + 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, + 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x9d, + 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, + 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, + 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, + 0x80, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, + 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, 0xa1, + 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, + 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, + 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, + 0x84, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, + 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, 0xa5, + 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, + 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, + 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, + 0x88, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, + 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, 0xa9, + 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, + 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, + 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, + 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, + 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xad, + 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, + 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, + 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, + 0x90, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, + 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, 0xb1, + 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, + 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, + 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, + 0x94, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, + 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, 0xb5, + 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, + 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, + 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, + 0x98, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, + 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, 0xb9, + 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, + 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, + 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, + 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, + 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xbd, + 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, + 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, + 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, + 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, + 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xc1, + 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, + 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, + 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, + 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, + 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xc5, + 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, + 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, + 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, + 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, + 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xc9, + 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, + 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, + 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, + 0xac, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, + 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0xcd, + 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, + 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, + 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, + 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, + 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xd1, + 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, + 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, + 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, + 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, + 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xd5, + 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, + 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, + 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, + 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xd9, + 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, + 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, + 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, + 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, + 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, + 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xe5, + 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, + 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, + 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, + 0x14, 0x01, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, + 0x80, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xe9, + 0x00, 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0x02, 0x01, + 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, + 0x00, 0x04, 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, + 0x01, 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, + 0x04, 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, + 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, + 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, + 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, + 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, + 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, + 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, + 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, + 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, + 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, + 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, + 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, + 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, + 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, + 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, + 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, 0x01, + 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x04, + 0xff, 0x01, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, + 0x00, 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, + 0x80, 0x04, 0x01, 0x02, 0x00, 0x00, 0x4d, 0x21, + 0x00, 0x00, 0x80, 0x04, 0x02, 0x02, 0x00, 0x00, + 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0x03, 0x02, + 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, + 0x04, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, + 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, 0x4d, 0x25, + 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, 0x00, 0x00, + 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0x07, 0x02, + 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, + 0x08, 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, + 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, 0x29, + 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, + 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, + 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, + 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, + 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x2d, + 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, + 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, + 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, + 0x10, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, + 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, 0x31, + 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, + 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, + 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, + 0x14, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, + 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, 0x35, + 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, + 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, + 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, + 0x18, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, + 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, 0x39, + 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, + 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, + 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, + 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, + 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x3d, + 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, + 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, + 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, + 0x20, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, + 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, 0x41, + 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, + 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, + 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, + 0x24, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, + 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, 0x45, + 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, + 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, + 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, + 0x28, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, + 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, 0x49, + 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, + 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, + 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, + 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, + 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x4d, + 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, + 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, + 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, + 0x30, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, + 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, 0x51, + 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, + 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, + 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, + 0x34, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, + 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, 0x55, + 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, + 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, + 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, + 0x38, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, + 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, 0x59, + 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, + 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, + 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, + 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, + 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x5d, + 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, + 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, + 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, + 0x40, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, + 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, 0x61, + 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, + 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, + 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, + 0x44, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, + 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, 0x65, + 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, + 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, + 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, + 0x48, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, + 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, 0x69, + 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, + 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, + 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, + 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, + 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x6d, + 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, + 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, + 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, + 0x50, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, + 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, 0x71, + 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, + 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, + 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, + 0x54, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, + 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, 0x75, + 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, + 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, + 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, + 0x58, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, + 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, 0x79, + 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, + 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, + 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, + 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, + 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x7d, + 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, + 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, + 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, + 0x60, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, + 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, 0x81, + 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, + 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, + 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, + 0x64, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, + 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, 0x85, + 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, + 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, + 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, + 0x68, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, + 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, 0x89, + 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, + 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, + 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, + 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, + 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x8d, + 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, + 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, + 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, + 0x70, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, + 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, 0x91, + 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, + 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, + 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, + 0x74, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, + 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, 0x95, + 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, + 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, + 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, + 0x78, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, + 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, 0x99, + 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, + 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, + 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, + 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, + 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x9d, + 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, + 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, + 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, + 0x80, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, + 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, 0xa1, + 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, + 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, + 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, + 0x84, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, + 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, 0xa5, + 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, + 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, + 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, + 0x88, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, + 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, 0xa9, + 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, + 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, + 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, + 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, + 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xad, + 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, + 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, + 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, + 0x90, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, + 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, 0xb1, + 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, + 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, + 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, + 0x94, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, + 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, 0xb5, + 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, + 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, + 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, + 0x98, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, + 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, 0xb9, + 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, + 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, + 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, + 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, + 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xbd, + 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, + 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, + 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, + 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, + 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xc1, + 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, + 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, + 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, + 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, + 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xc5, + 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, + 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, + 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, + 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, + 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xc9, + 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, + 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, + 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, + 0xac, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, + 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0xcd, + 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, + 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, + 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, + 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, + 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xd1, + 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, + 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, + 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, + 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, + 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xd5, + 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, + 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, + 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, + 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xd9, + 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, + 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, + 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, + 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, + 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, + 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xe5, + 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, + 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, + 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, + 0xca, 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, + 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, 0xe9, + 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0xcd, 0x02, + 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, + 0x00, 0x04, 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, + 0x01, 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, + 0x04, 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, + 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, + 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, + 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, + 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, + 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, + 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, + 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, + 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, + 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, + 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, + 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, + 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, + 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, + 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, + 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, 0x01, + 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x04, + 0xff, 0x01, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, + 0x00, 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, + 0x80, 0x04, 0x01, 0x02, 0x00, 0x00, 0x4d, 0x21, + 0x00, 0x00, 0x80, 0x04, 0x02, 0x02, 0x00, 0x00, + 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0x03, 0x02, + 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, + 0x04, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, + 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, 0x4d, 0x25, + 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, 0x00, 0x00, + 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0x07, 0x02, + 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, + 0x08, 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, + 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, 0x29, + 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, + 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, + 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, + 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, + 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x2d, + 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, + 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, + 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, + 0x10, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, + 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, 0x31, + 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, + 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, + 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, + 0x14, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, + 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, 0x35, + 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, + 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, + 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, + 0x18, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, + 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, 0x39, + 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, + 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, + 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, + 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, + 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x3d, + 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, + 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, + 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, + 0x20, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, + 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, 0x41, + 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, + 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, + 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, + 0x24, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, + 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, 0x45, + 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, + 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, + 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, + 0x28, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, + 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, 0x49, + 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, + 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, + 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, + 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, + 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x4d, + 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, + 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, + 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, + 0x30, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, + 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, 0x51, + 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, + 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, + 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, + 0x34, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, + 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, 0x55, + 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, + 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, + 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, + 0x38, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, + 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, 0x59, + 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, + 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, + 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, + 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, + 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x5d, + 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, + 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, + 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, + 0x40, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, + 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, 0x61, + 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, + 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, + 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, + 0x44, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, + 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, 0x65, + 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, + 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, + 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, + 0x48, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, + 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, 0x69, + 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, + 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, + 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, + 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, + 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x6d, + 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, + 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, + 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, + 0x50, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, + 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, 0x71, + 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, + 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, + 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, + 0x54, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, + 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, 0x75, + 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, + 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, + 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, + 0x58, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, + 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, 0x79, + 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, + 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, + 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, + 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, + 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x7d, + 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, + 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, + 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, + 0x60, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, + 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, 0x81, + 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, + 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, + 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, + 0x64, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, + 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, 0x85, + 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, + 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, + 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, + 0x68, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, + 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, 0x89, + 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, + 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, + 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, + 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, + 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x8d, + 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, + 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, + 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, + 0x70, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, + 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, 0x91, + 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, + 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, + 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, + 0x74, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, + 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, 0x95, + 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, + 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, + 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, + 0x78, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, + 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, 0x99, + 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, + 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, + 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, + 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, + 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x9d, + 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, + 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, + 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, + 0x80, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, + 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, 0xa1, + 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, + 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, + 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, + 0x84, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, + 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, 0xa5, + 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, + 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, + 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, + 0x88, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, + 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, 0xa9, + 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, + 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, + 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, + 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, + 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xad, + 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, + 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, + 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, + 0x90, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, + 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, 0xb1, + 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, + 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, + 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, + 0x94, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, + 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, 0xb5, + 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, + 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, + 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, + 0x98, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, + 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, 0xb9, + 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, + 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, + 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, + 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, + 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xbd, + 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, + 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, + 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, + 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, + 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xc1, + 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, + 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, + 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, + 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, + 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xc5, + 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, + 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, + 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, + 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, + 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xc9, + 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, + 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, + 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, + 0xac, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, + 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0xcd, + 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, + 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, + 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, + 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, + 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xd1, + 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, + 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, + 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, + 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, + 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xd5, + 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, + 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, + 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, + 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xd9, + 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, + 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, + 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, + 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, + 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, + 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xe5, + 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, + 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, + 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, + 0xca, 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, + 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, 0xe9, + 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0xcd, 0x02, + 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x76, 0x01, 0x00, 0x00, 0x4d, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, + 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x95, 0xbe, 0x96, 0xbe, 0x97, + 0xbe, 0x98, 0xbe, 0x99, 0xbe, 0x9a, 0xbe, 0x9b, + 0xbe, 0x9c, 0xbe, 0x9d, 0xbe, 0x9e, 0xbe, 0x9f, + 0xbe, 0xa0, 0x26, 0x0c, 0x00, 0x4d, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0xce, 0x02, 0x00, 0x00, 0x04, + 0xcf, 0x02, 0x00, 0x00, 0x04, 0xd0, 0x02, 0x00, + 0x00, 0x04, 0xd1, 0x02, 0x00, 0x00, 0x04, 0xd2, + 0x02, 0x00, 0x00, 0x04, 0xd3, 0x02, 0x00, 0x00, + 0x04, 0xd4, 0x02, 0x00, 0x00, 0x04, 0xd5, 0x02, + 0x00, 0x00, 0x04, 0xd6, 0x02, 0x00, 0x00, 0x04, + 0xd7, 0x02, 0x00, 0x00, 0x04, 0xd8, 0x02, 0x00, + 0x00, 0x04, 0xd9, 0x02, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xce, + 0x02, 0x00, 0x00, 0x04, 0xcf, 0x02, 0x00, 0x00, + 0x04, 0xd0, 0x02, 0x00, 0x00, 0x04, 0xd1, 0x02, + 0x00, 0x00, 0x04, 0xd2, 0x02, 0x00, 0x00, 0x04, + 0xd3, 0x02, 0x00, 0x00, 0x04, 0xd4, 0x02, 0x00, + 0x00, 0x04, 0xd5, 0x02, 0x00, 0x00, 0x04, 0xd6, + 0x02, 0x00, 0x00, 0x04, 0xd7, 0x02, 0x00, 0x00, + 0x04, 0xd8, 0x02, 0x00, 0x00, 0x04, 0xd9, 0x02, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x65, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x02, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x02, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x73, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xda, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0xda, 0x02, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xda, 0x02, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x75, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, + 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x44, 0x01, 0x00, + 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, 0x14, + 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x04, 0x14, 0x01, 0x00, 0x00, 0x04, 0x44, 0x01, + 0x00, 0x00, 0x04, 0x44, 0x01, 0x00, 0x00, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x65, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x02, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x02, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x73, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xdb, 0x02, + 0x00, 0x00, 0x04, 0xdc, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0xdb, 0x02, 0x00, 0x00, 0x04, 0xdc, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xdb, 0x02, 0x00, 0x00, 0x04, 0xdc, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x76, 0x01, 0x00, 0x00, 0x4d, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, + 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x02, 0x00, + 0x00, 0x0b, 0x04, 0xdf, 0x02, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe0, 0x02, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0xe1, 0x02, 0x00, 0x00, 0x4d, 0xe2, + 0x02, 0x00, 0x00, 0x04, 0xe3, 0x02, 0x00, 0x00, + 0x4d, 0xe4, 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x02, + 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x02, 0x00, 0x00, + 0x4d, 0xe2, 0x02, 0x00, 0x00, 0x04, 0xe7, 0x02, + 0x00, 0x00, 0x4d, 0xe4, 0x02, 0x00, 0x00, 0x4d, + 0xe8, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xe9, 0x02, + 0x00, 0x00, 0x4d, 0xe2, 0x02, 0x00, 0x00, 0x04, + 0xea, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x02, 0x00, + 0x00, 0x4d, 0xeb, 0x02, 0x00, 0x00, 0x4d, 0xec, + 0x02, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xed, 0x02, + 0x00, 0x00, 0x4d, 0xe5, 0x02, 0x00, 0x00, 0x04, + 0xee, 0x02, 0x00, 0x00, 0x4d, 0xef, 0x02, 0x00, + 0x00, 0x04, 0xf0, 0x02, 0x00, 0x00, 0x4d, 0xf1, + 0x02, 0x00, 0x00, 0x04, 0xf2, 0x02, 0x00, 0x00, + 0x4d, 0xf3, 0x02, 0x00, 0x00, 0x04, 0xf4, 0x02, + 0x00, 0x00, 0x4d, 0xf5, 0x02, 0x00, 0x00, 0x04, + 0xf6, 0x02, 0x00, 0x00, 0x4d, 0xf7, 0x02, 0x00, + 0x00, 0x04, 0xf8, 0x02, 0x00, 0x00, 0x4d, 0xf9, + 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x02, 0x00, 0x00, + 0x4d, 0xfa, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xfb, + 0x02, 0x00, 0x00, 0x4d, 0xfc, 0x02, 0x00, 0x00, + 0x04, 0xfd, 0x02, 0x00, 0x00, 0x4d, 0xfe, 0x02, + 0x00, 0x00, 0x04, 0xff, 0x02, 0x00, 0x00, 0x4d, + 0x00, 0x03, 0x00, 0x00, 0x04, 0x01, 0x03, 0x00, + 0x00, 0x4d, 0x02, 0x03, 0x00, 0x00, 0x04, 0x03, + 0x03, 0x00, 0x00, 0x4d, 0x04, 0x03, 0x00, 0x00, + 0x4d, 0x05, 0x03, 0x00, 0x00, 0x4d, 0x45, 0x00, + 0x00, 0x00, 0x24, 0x01, 0x00, 0xcc, 0x28, 0x8c, + 0x0c, 0x01, 0x00, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, + 0x31, 0x33, 0x07, 0x02, 0x37, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_it_size = 24597; + +const uint8_t intl_it[24597] = { + 0x01, 0xcc, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x69, 0x74, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x10, + 0x7b, 0x31, 0x7d, 0x2c, 0x20, 0x7b, 0x30, 0x7d, + 0x0a, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, + 0x65, 0x64, 0x69, 0x75, 0x6d, 0x0e, 0x7b, 0x31, + 0x7d, 0x20, 0x7b, 0x30, 0x7d, 0x08, 0x66, 0x75, + 0x6c, 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x02, + 0x64, 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, 0x06, + 0x45, 0x20, 0x64, 0x04, 0x45, 0x64, 0x10, 0x45, + 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x06, + 0x45, 0x68, 0x6d, 0x0e, 0x45, 0x20, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x06, 0x45, 0x48, 0x6d, 0x16, + 0x45, 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x61, 0x08, 0x45, 0x68, 0x6d, 0x73, + 0x14, 0x45, 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x08, 0x45, 0x48, 0x6d, 0x73, + 0x06, 0x79, 0x20, 0x47, 0x04, 0x47, 0x79, 0x0e, + 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x20, 0x47, 0x0a, + 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x12, 0x64, 0x20, + 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x20, 0x47, 0x0c, + 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x16, 0x45, + 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, + 0x20, 0x47, 0x0e, 0x47, 0x79, 0x4d, 0x4d, 0x4d, + 0x45, 0x64, 0x06, 0x68, 0x20, 0x61, 0x02, 0x68, + 0x04, 0x48, 0x48, 0x02, 0x48, 0x0c, 0x68, 0x3a, + 0x6d, 0x6d, 0x20, 0x61, 0x04, 0x68, 0x6d, 0x0a, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x04, 0x48, 0x6d, + 0x12, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x61, 0x06, 0x68, 0x6d, 0x73, 0x10, 0x48, + 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x06, + 0x48, 0x6d, 0x73, 0x16, 0x68, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x61, 0x20, 0x76, 0x08, + 0x68, 0x6d, 0x73, 0x76, 0x14, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x76, 0x08, + 0x48, 0x6d, 0x73, 0x76, 0x10, 0x68, 0x3a, 0x6d, + 0x6d, 0x20, 0x61, 0x20, 0x76, 0x06, 0x68, 0x6d, + 0x76, 0x0e, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x20, + 0x76, 0x06, 0x48, 0x6d, 0x76, 0x02, 0x4c, 0x02, + 0x4d, 0x06, 0x64, 0x2f, 0x4d, 0x04, 0x4d, 0x64, + 0x0a, 0x45, 0x20, 0x64, 0x2f, 0x4d, 0x06, 0x4d, + 0x45, 0x64, 0x06, 0x4c, 0x4c, 0x4c, 0x06, 0x4d, + 0x4d, 0x4d, 0x0a, 0x64, 0x20, 0x4d, 0x4d, 0x4d, + 0x08, 0x4d, 0x4d, 0x4d, 0x64, 0x0e, 0x45, 0x20, + 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, + 0x4d, 0x45, 0x64, 0x0c, 0x64, 0x20, 0x4d, 0x4d, + 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, + 0x0a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x04, 0x6d, + 0x73, 0x02, 0x79, 0x06, 0x4d, 0x2f, 0x79, 0x04, + 0x79, 0x4d, 0x0a, 0x64, 0x2f, 0x4d, 0x2f, 0x79, + 0x06, 0x79, 0x4d, 0x64, 0x0e, 0x45, 0x20, 0x64, + 0x2f, 0x4d, 0x2f, 0x79, 0x08, 0x79, 0x4d, 0x45, + 0x64, 0x0a, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x08, + 0x79, 0x4d, 0x4d, 0x4d, 0x0e, 0x64, 0x20, 0x4d, + 0x4d, 0x4d, 0x20, 0x79, 0x0a, 0x79, 0x4d, 0x4d, + 0x4d, 0x64, 0x12, 0x45, 0x20, 0x64, 0x20, 0x4d, + 0x4d, 0x4d, 0x20, 0x79, 0x0c, 0x79, 0x4d, 0x4d, + 0x4d, 0x45, 0x64, 0x0c, 0x4d, 0x4d, 0x4d, 0x4d, + 0x20, 0x79, 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, + 0x0a, 0x51, 0x51, 0x51, 0x20, 0x79, 0x08, 0x79, + 0x51, 0x51, 0x51, 0x0c, 0x51, 0x51, 0x51, 0x51, + 0x20, 0x79, 0x0a, 0x79, 0x51, 0x51, 0x51, 0x51, + 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, + 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x73, 0x1a, 0x45, 0x45, 0x45, 0x45, 0x20, 0x64, + 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x14, + 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x45, 0x45, 0x45, + 0x45, 0x64, 0x10, 0x64, 0x20, 0x4d, 0x4d, 0x4d, + 0x4d, 0x20, 0x79, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, + 0x4d, 0x64, 0x10, 0x64, 0x64, 0x20, 0x4d, 0x4d, + 0x4d, 0x20, 0x79, 0x10, 0x64, 0x64, 0x2f, 0x4d, + 0x4d, 0x2f, 0x79, 0x79, 0x16, 0x64, 0x61, 0x74, + 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, + 0x1a, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x7a, 0x7a, 0x7a, 0x7a, 0x12, 0x68, + 0x6d, 0x6d, 0x73, 0x73, 0x7a, 0x7a, 0x7a, 0x7a, + 0x14, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x7a, 0x08, 0x68, 0x6d, 0x73, 0x7a, + 0x16, 0x74, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x73, 0x0e, 0x66, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x73, 0x02, 0x47, 0x02, 0x46, + 0x02, 0x41, 0x02, 0x53, 0x02, 0x4f, 0x02, 0x4e, + 0x02, 0x44, 0x0c, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x06, 0x67, 0x65, 0x6e, 0x06, 0x66, 0x65, + 0x62, 0x06, 0x6d, 0x61, 0x72, 0x06, 0x61, 0x70, + 0x72, 0x06, 0x6d, 0x61, 0x67, 0x06, 0x67, 0x69, + 0x75, 0x06, 0x6c, 0x75, 0x67, 0x06, 0x61, 0x67, + 0x6f, 0x06, 0x6f, 0x74, 0x74, 0x06, 0x6e, 0x6f, + 0x76, 0x06, 0x64, 0x69, 0x63, 0x0e, 0x67, 0x65, + 0x6e, 0x6e, 0x61, 0x69, 0x6f, 0x10, 0x66, 0x65, + 0x62, 0x62, 0x72, 0x61, 0x69, 0x6f, 0x0a, 0x6d, + 0x61, 0x72, 0x7a, 0x6f, 0x0c, 0x61, 0x70, 0x72, + 0x69, 0x6c, 0x65, 0x0c, 0x6d, 0x61, 0x67, 0x67, + 0x69, 0x6f, 0x0c, 0x67, 0x69, 0x75, 0x67, 0x6e, + 0x6f, 0x0c, 0x6c, 0x75, 0x67, 0x6c, 0x69, 0x6f, + 0x0c, 0x61, 0x67, 0x6f, 0x73, 0x74, 0x6f, 0x12, + 0x73, 0x65, 0x74, 0x74, 0x65, 0x6d, 0x62, 0x72, + 0x65, 0x0e, 0x6f, 0x74, 0x74, 0x6f, 0x62, 0x72, + 0x65, 0x10, 0x6e, 0x6f, 0x76, 0x65, 0x6d, 0x62, + 0x72, 0x65, 0x10, 0x64, 0x69, 0x63, 0x65, 0x6d, + 0x62, 0x72, 0x65, 0x0c, 0x6d, 0x6f, 0x6e, 0x74, + 0x68, 0x73, 0x02, 0x56, 0x06, 0x64, 0x6f, 0x6d, + 0x06, 0x6c, 0x75, 0x6e, 0x06, 0x6d, 0x65, 0x72, + 0x06, 0x67, 0x69, 0x6f, 0x06, 0x76, 0x65, 0x6e, + 0x06, 0x73, 0x61, 0x62, 0x10, 0x64, 0x6f, 0x6d, + 0x65, 0x6e, 0x69, 0x63, 0x61, 0x0c, 0x6c, 0x75, + 0x6e, 0x65, 0x64, 0xec, 0x0e, 0x6d, 0x61, 0x72, + 0x74, 0x65, 0x64, 0xec, 0x12, 0x6d, 0x65, 0x72, + 0x63, 0x6f, 0x6c, 0x65, 0x64, 0xec, 0x0e, 0x67, + 0x69, 0x6f, 0x76, 0x65, 0x64, 0xec, 0x0e, 0x76, + 0x65, 0x6e, 0x65, 0x72, 0x64, 0xec, 0x0c, 0x73, + 0x61, 0x62, 0x61, 0x74, 0x6f, 0x08, 0x64, 0x61, + 0x79, 0x73, 0x04, 0x45, 0x42, 0x08, 0x65, 0x72, + 0x61, 0x73, 0x04, 0x41, 0x4d, 0x04, 0x61, 0x6d, + 0x04, 0x50, 0x4d, 0x04, 0x70, 0x6d, 0x14, 0x64, + 0x61, 0x79, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, + 0x73, 0x06, 0x4d, 0x30, 0x31, 0x06, 0x4d, 0x30, + 0x32, 0x06, 0x4d, 0x30, 0x33, 0x06, 0x4d, 0x30, + 0x34, 0x06, 0x4d, 0x30, 0x35, 0x06, 0x4d, 0x30, + 0x36, 0x06, 0x4d, 0x30, 0x37, 0x06, 0x4d, 0x30, + 0x38, 0x06, 0x4d, 0x30, 0x39, 0x06, 0x4d, 0x31, + 0x30, 0x06, 0x4d, 0x31, 0x31, 0x06, 0x4d, 0x31, + 0x32, 0x08, 0x54, 0x6f, 0x75, 0x74, 0x08, 0x42, + 0x61, 0x62, 0x61, 0x0a, 0x48, 0x61, 0x74, 0x6f, + 0x72, 0x0a, 0x4b, 0x69, 0x61, 0x68, 0x6b, 0x08, + 0x54, 0x6f, 0x62, 0x61, 0x0c, 0x41, 0x6d, 0x73, + 0x68, 0x69, 0x72, 0x10, 0x42, 0x61, 0x72, 0x61, + 0x6d, 0x68, 0x61, 0x74, 0x12, 0x42, 0x61, 0x72, + 0x61, 0x6d, 0x6f, 0x75, 0x64, 0x61, 0x0e, 0x42, + 0x61, 0x73, 0x68, 0x61, 0x6e, 0x73, 0x0a, 0x50, + 0x61, 0x6f, 0x6e, 0x61, 0x08, 0x45, 0x70, 0x65, + 0x70, 0x0a, 0x4d, 0x65, 0x73, 0x72, 0x61, 0x0a, + 0x4e, 0x61, 0x73, 0x69, 0x65, 0x08, 0x45, 0x52, + 0x41, 0x30, 0x08, 0x45, 0x52, 0x41, 0x31, 0x10, + 0x4d, 0x65, 0x73, 0x6b, 0x65, 0x72, 0x65, 0x6d, + 0x0c, 0x54, 0x65, 0x6b, 0x65, 0x6d, 0x74, 0x0a, + 0x48, 0x65, 0x64, 0x61, 0x72, 0x0c, 0x54, 0x61, + 0x68, 0x73, 0x61, 0x73, 0x06, 0x54, 0x65, 0x72, + 0x0e, 0x59, 0x65, 0x6b, 0x61, 0x74, 0x69, 0x74, + 0x0e, 0x4d, 0x65, 0x67, 0x61, 0x62, 0x69, 0x74, + 0x0c, 0x4d, 0x69, 0x61, 0x7a, 0x69, 0x61, 0x0c, + 0x47, 0x65, 0x6e, 0x62, 0x6f, 0x74, 0x08, 0x53, + 0x65, 0x6e, 0x65, 0x0a, 0x48, 0x61, 0x6d, 0x6c, + 0x65, 0x0e, 0x4e, 0x65, 0x68, 0x61, 0x73, 0x73, + 0x65, 0x0e, 0x50, 0x61, 0x67, 0x75, 0x6d, 0x65, + 0x6e, 0x04, 0x61, 0x43, 0x04, 0x64, 0x43, 0x06, + 0x42, 0x43, 0x45, 0x04, 0x43, 0x45, 0x08, 0x61, + 0x2e, 0x43, 0x2e, 0x08, 0x64, 0x2e, 0x43, 0x2e, + 0x0c, 0x61, 0x2e, 0x45, 0x2e, 0x56, 0x2e, 0x08, + 0x45, 0x2e, 0x56, 0x2e, 0x24, 0x61, 0x76, 0x61, + 0x6e, 0x74, 0x69, 0x20, 0x45, 0x72, 0x61, 0x20, + 0x56, 0x6f, 0x6c, 0x67, 0x61, 0x72, 0x65, 0x16, + 0x45, 0x72, 0x61, 0x20, 0x56, 0x6f, 0x6c, 0x67, + 0x61, 0x72, 0x65, 0x0c, 0x54, 0x69, 0x73, 0x68, + 0x72, 0x69, 0x0e, 0x48, 0x65, 0x73, 0x68, 0x76, + 0x61, 0x6e, 0x0c, 0x4b, 0x69, 0x73, 0x6c, 0x65, + 0x76, 0x0a, 0x54, 0x65, 0x76, 0x65, 0x74, 0x0c, + 0x53, 0x68, 0x65, 0x76, 0x61, 0x74, 0x0c, 0x41, + 0x64, 0x61, 0x72, 0x20, 0x49, 0x08, 0x41, 0x64, + 0x61, 0x72, 0x0a, 0x4e, 0x69, 0x73, 0x61, 0x6e, + 0x08, 0x49, 0x79, 0x61, 0x72, 0x0a, 0x53, 0x69, + 0x76, 0x61, 0x6e, 0x0a, 0x54, 0x61, 0x6d, 0x75, + 0x7a, 0x04, 0x41, 0x76, 0x08, 0x45, 0x6c, 0x75, + 0x6c, 0x0e, 0x41, 0x64, 0x61, 0x72, 0x20, 0x49, + 0x49, 0x0e, 0x43, 0x68, 0x61, 0x69, 0x74, 0x72, + 0x61, 0x10, 0x56, 0x61, 0x69, 0x73, 0x61, 0x6b, + 0x68, 0x61, 0x10, 0x4a, 0x79, 0x61, 0x69, 0x73, + 0x74, 0x68, 0x61, 0x0c, 0x41, 0x73, 0x61, 0x64, + 0x68, 0x61, 0x0e, 0x53, 0x72, 0x61, 0x76, 0x61, + 0x6e, 0x61, 0x0c, 0x42, 0x68, 0x61, 0x64, 0x72, + 0x61, 0x0c, 0x41, 0x73, 0x76, 0x69, 0x6e, 0x61, + 0x0e, 0x4b, 0x61, 0x72, 0x74, 0x69, 0x6b, 0x61, + 0x14, 0x41, 0x67, 0x72, 0x61, 0x68, 0x61, 0x79, + 0x61, 0x6e, 0x61, 0x0a, 0x50, 0x61, 0x75, 0x73, + 0x61, 0x0a, 0x4d, 0x61, 0x67, 0x68, 0x61, 0x10, + 0x50, 0x68, 0x61, 0x6c, 0x67, 0x75, 0x6e, 0x61, + 0x08, 0x53, 0x61, 0x6b, 0x61, 0x08, 0x4d, 0x75, + 0x68, 0x2e, 0x08, 0x53, 0x61, 0x66, 0x2e, 0x0c, + 0x52, 0x61, 0x62, 0x2e, 0x20, 0x49, 0x0e, 0x52, + 0x61, 0x62, 0x2e, 0x20, 0x49, 0x49, 0x0c, 0x4a, + 0x75, 0x6d, 0x2e, 0x20, 0x49, 0x0e, 0x4a, 0x75, + 0x6d, 0x2e, 0x20, 0x49, 0x49, 0x08, 0x52, 0x61, + 0x6a, 0x2e, 0x08, 0x53, 0x68, 0x61, 0x2e, 0x08, + 0x52, 0x61, 0x6d, 0x2e, 0x0a, 0x53, 0x68, 0x61, + 0x77, 0x2e, 0x11, 0x44, 0x00, 0x68, 0x00, 0x75, + 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x51, + 0x00, 0x2e, 0x00, 0x11, 0x44, 0x00, 0x68, 0x00, + 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, + 0x48, 0x00, 0x2e, 0x00, 0x10, 0x4d, 0x75, 0x68, + 0x61, 0x72, 0x72, 0x61, 0x6d, 0x0a, 0x53, 0x61, + 0x66, 0x61, 0x72, 0x0f, 0x52, 0x00, 0x61, 0x00, + 0x62, 0x00, 0x69, 0x00, 0xbb, 0x02, 0x20, 0x00, + 0x49, 0x00, 0x11, 0x52, 0x00, 0x61, 0x00, 0x62, + 0x00, 0x69, 0x00, 0xbb, 0x02, 0x20, 0x00, 0x49, + 0x00, 0x49, 0x00, 0x10, 0x4a, 0x75, 0x6d, 0x61, + 0x64, 0x61, 0x20, 0x49, 0x12, 0x4a, 0x75, 0x6d, + 0x61, 0x64, 0x61, 0x20, 0x49, 0x49, 0x0a, 0x52, + 0x61, 0x6a, 0x61, 0x62, 0x0f, 0x53, 0x00, 0x68, + 0x00, 0x61, 0x00, 0xbb, 0x02, 0x62, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x0e, 0x52, 0x61, 0x6d, 0x61, + 0x64, 0x61, 0x6e, 0x0e, 0x53, 0x68, 0x61, 0x77, + 0x77, 0x61, 0x6c, 0x19, 0x44, 0x00, 0x68, 0x00, + 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, + 0x51, 0x00, 0x69, 0x00, 0xbb, 0x02, 0x64, 0x00, + 0x61, 0x00, 0x68, 0x00, 0x19, 0x44, 0x00, 0x68, + 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, + 0x00, 0x48, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x6a, + 0x00, 0x61, 0x00, 0x68, 0x00, 0x04, 0x41, 0x48, + 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, 0x36, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x36, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x48, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x36, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x36, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, + 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x1d, 0x57, 0x00, 0x61, 0x00, 0x64, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, + 0x52, 0x00, 0x65, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, 0x59, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x2d, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6d, 0x00, + 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x2b, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x2d, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, 0x2d, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x2a, 0x4a, 0x69, + 0x6e, 0x67, 0x6f, 0x2d, 0x6b, 0x65, 0x69, 0x75, + 0x6e, 0x20, 0x28, 0x37, 0x36, 0x37, 0x2d, 0x37, + 0x37, 0x30, 0x29, 0x1d, 0x48, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x38, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x1f, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x2d, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x1f, 0x44, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1d, 0x4a, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x4b, + 0x00, 0x61, 0x00, 0x6a, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1f, 0x53, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x20, 0x54, 0x65, 0x6e, 0x2d, 0x61, 0x6e, + 0x20, 0x28, 0x38, 0x35, 0x37, 0x2d, 0x38, 0x35, + 0x39, 0x29, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x21, 0x47, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x61, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x1f, 0x45, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, + 0x4a, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1b, + 0x4c, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, + 0x41, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x1f, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, 0x45, + 0x00, 0x69, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, + 0x73, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x69, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x27, 0x4a, 0x00, 0x69, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x29, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4c, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x61, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x25, 0x4a, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x24, 0x54, 0x65, + 0x6e, 0x2d, 0x65, 0x69, 0x20, 0x28, 0x31, 0x31, + 0x31, 0x30, 0x2d, 0x31, 0x31, 0x31, 0x33, 0x29, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x21, 0x48, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x44, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x48, 0x00, 0x65, 0x00, 0x69, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x27, 0x45, 0x00, 0x69, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1f, 0x4c, 0x01, 0x68, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x61, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x41, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x4a, 0x00, 0x69, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x59, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, + 0x00, 0x75, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x29, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, + 0x6e, 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x4d, 0x01, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x27, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x75, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x29, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, 0x29, + 0x52, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x45, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x4c, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x61, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6d, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x74, 0x00, 0x73, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x48, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, + 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x27, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x21, 0x4c, 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x21, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, + 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x27, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, + 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x72, 0x00, 0x65, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x62, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x27, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4d, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x02, 0x54, 0x0a, 0x4d, 0x65, + 0x69, 0x6a, 0x69, 0x0d, 0x54, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x0b, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x0c, 0x48, 0x65, 0x69, 0x73, + 0x65, 0x69, 0x12, 0x46, 0x61, 0x72, 0x76, 0x61, + 0x72, 0x64, 0x69, 0x6e, 0x16, 0x4f, 0x72, 0x64, + 0x69, 0x62, 0x65, 0x68, 0x65, 0x73, 0x68, 0x74, + 0x0e, 0x4b, 0x68, 0x6f, 0x72, 0x64, 0x61, 0x64, + 0x06, 0x54, 0x69, 0x72, 0x0c, 0x4d, 0x6f, 0x72, + 0x64, 0x61, 0x64, 0x12, 0x53, 0x68, 0x61, 0x68, + 0x72, 0x69, 0x76, 0x61, 0x72, 0x08, 0x4d, 0x65, + 0x68, 0x72, 0x08, 0x41, 0x62, 0x61, 0x6e, 0x08, + 0x41, 0x7a, 0x61, 0x72, 0x06, 0x44, 0x65, 0x79, + 0x0c, 0x42, 0x61, 0x68, 0x6d, 0x61, 0x6e, 0x0c, + 0x45, 0x73, 0x66, 0x61, 0x6e, 0x64, 0x04, 0x41, + 0x50, 0x1e, 0x50, 0x72, 0x69, 0x6d, 0x61, 0x20, + 0x64, 0x69, 0x20, 0x52, 0x2e, 0x4f, 0x2e, 0x43, + 0x2e, 0x0c, 0x4d, 0x69, 0x6e, 0x67, 0x75, 0x6f, + 0x12, 0x63, 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, + 0x72, 0x73, 0x08, 0x64, 0x61, 0x74, 0x65, 0x08, + 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, 0x75, 0x10, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0x1e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, + 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, + 0x26, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x6e, 0x65, 0x67, + 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, + 0x74, 0x65, 0x72, 0x6e, 0x0e, 0x64, 0x65, 0x63, + 0x69, 0x6d, 0x61, 0x6c, 0x26, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0xa0, 0x7b, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, + 0x3c, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0xa0, 0x7b, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, 0x10, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, + 0x2a, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, + 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x40, 0x7b, + 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, + 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x0e, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x10, + 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, + 0x02, 0x2c, 0x02, 0x2e, 0x0a, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x06, 0x4e, 0x61, 0x4e, 0x06, 0x6e, + 0x61, 0x6e, 0x02, 0x2b, 0x10, 0x70, 0x6c, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, 0x2d, 0x12, + 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x02, 0x25, 0x16, 0x70, 0x65, 0x72, 0x63, + 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x03, + 0x1e, 0x22, 0x10, 0x69, 0x6e, 0x66, 0x69, 0x6e, + 0x69, 0x74, 0x79, 0x0e, 0x73, 0x79, 0x6d, 0x62, + 0x6f, 0x6c, 0x73, 0x04, 0x41, 0x24, 0x06, 0x41, + 0x55, 0x44, 0x06, 0x43, 0x41, 0x24, 0x06, 0x43, + 0x41, 0x44, 0x06, 0x43, 0x4e, 0xa5, 0x06, 0x43, + 0x4e, 0x59, 0x03, 0xac, 0x20, 0x06, 0x45, 0x55, + 0x52, 0x02, 0xa3, 0x06, 0x47, 0x42, 0x50, 0x03, + 0xaa, 0x20, 0x06, 0x49, 0x4c, 0x53, 0x03, 0xb9, + 0x20, 0x06, 0x49, 0x4e, 0x52, 0x06, 0x4e, 0x5a, + 0x24, 0x06, 0x4e, 0x5a, 0x44, 0x03, 0x3f, 0x0e, + 0x06, 0x54, 0x48, 0x42, 0x06, 0x55, 0x53, 0x24, + 0x06, 0x55, 0x53, 0x44, 0x03, 0xab, 0x20, 0x06, + 0x56, 0x4e, 0x44, 0x08, 0x46, 0x43, 0x46, 0x41, + 0x06, 0x58, 0x41, 0x46, 0x06, 0x45, 0x43, 0x24, + 0x06, 0x58, 0x43, 0x44, 0x06, 0x43, 0x46, 0x41, + 0x06, 0x58, 0x4f, 0x46, 0x08, 0x43, 0x46, 0x50, + 0x46, 0x06, 0x58, 0x50, 0x46, 0x14, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, + 0x52, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, + 0x74, 0x6c, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x6a, + 0x73, 0x6f, 0x6e, 0x70, 0x2f, 0x69, 0x74, 0x2e, + 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, + 0x00, 0x01, 0x00, 0x27, 0x00, 0x89, 0x01, 0xa2, + 0x6a, 0x01, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x39, + 0xd0, 0x00, 0x00, 0x00, 0x43, 0xd1, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd2, 0x00, 0x00, 0x00, 0x4d, + 0xd3, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd4, 0x00, + 0x00, 0x00, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x04, + 0xd6, 0x00, 0x00, 0x00, 0x04, 0xd7, 0x00, 0x00, + 0x00, 0x04, 0xd8, 0x00, 0x00, 0x00, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x04, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdb, 0x00, 0x00, 0x00, 0x04, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x04, + 0xde, 0x00, 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, + 0x00, 0x04, 0xe0, 0x00, 0x00, 0x00, 0x04, 0xe1, + 0x00, 0x00, 0x00, 0x04, 0xe2, 0x00, 0x00, 0x00, + 0x26, 0x0f, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, + 0x0a, 0x4d, 0xe4, 0x00, 0x00, 0x00, 0x09, 0x4d, + 0xe5, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, + 0x00, 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x04, 0xe9, 0x00, 0x00, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xec, + 0x00, 0x00, 0x00, 0x4d, 0xec, 0x00, 0x00, 0x00, + 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, 0xee, 0x00, + 0x00, 0x00, 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, + 0xf0, 0x00, 0x00, 0x00, 0x04, 0xf1, 0x00, 0x00, + 0x00, 0x4d, 0xf2, 0x00, 0x00, 0x00, 0x04, 0xf3, + 0x00, 0x00, 0x00, 0x4d, 0xf4, 0x00, 0x00, 0x00, + 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0xf6, 0x00, + 0x00, 0x00, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, + 0xf8, 0x00, 0x00, 0x00, 0x04, 0xf9, 0x00, 0x00, + 0x00, 0x4d, 0xfa, 0x00, 0x00, 0x00, 0x04, 0xfb, + 0x00, 0x00, 0x00, 0x4d, 0xfc, 0x00, 0x00, 0x00, + 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, 0xfe, 0x00, + 0x00, 0x00, 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x01, 0x00, 0x00, 0x04, 0x01, 0x01, 0x00, + 0x00, 0x4d, 0x02, 0x01, 0x00, 0x00, 0x04, 0x03, + 0x01, 0x00, 0x00, 0x4d, 0x04, 0x01, 0x00, 0x00, + 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, 0x06, 0x01, + 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, + 0x08, 0x01, 0x00, 0x00, 0x04, 0x09, 0x01, 0x00, + 0x00, 0x4d, 0x0a, 0x01, 0x00, 0x00, 0x04, 0x0b, + 0x01, 0x00, 0x00, 0x4d, 0x0c, 0x01, 0x00, 0x00, + 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, 0x0e, 0x01, + 0x00, 0x00, 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, + 0x10, 0x01, 0x00, 0x00, 0x04, 0x11, 0x01, 0x00, + 0x00, 0x4d, 0x12, 0x01, 0x00, 0x00, 0x04, 0x13, + 0x01, 0x00, 0x00, 0x4d, 0x14, 0x01, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, 0x16, 0x01, + 0x00, 0x00, 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, + 0x18, 0x01, 0x00, 0x00, 0x04, 0x19, 0x01, 0x00, + 0x00, 0x4d, 0x1a, 0x01, 0x00, 0x00, 0x04, 0x1b, + 0x01, 0x00, 0x00, 0x4d, 0x1c, 0x01, 0x00, 0x00, + 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, 0x1e, 0x01, + 0x00, 0x00, 0x04, 0x1f, 0x01, 0x00, 0x00, 0x4d, + 0x20, 0x01, 0x00, 0x00, 0x04, 0x21, 0x01, 0x00, + 0x00, 0x4d, 0x22, 0x01, 0x00, 0x00, 0x04, 0x23, + 0x01, 0x00, 0x00, 0x4d, 0x24, 0x01, 0x00, 0x00, + 0x04, 0x25, 0x01, 0x00, 0x00, 0x4d, 0x25, 0x01, + 0x00, 0x00, 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, + 0x27, 0x01, 0x00, 0x00, 0x04, 0x28, 0x01, 0x00, + 0x00, 0x4d, 0x29, 0x01, 0x00, 0x00, 0x04, 0x2a, + 0x01, 0x00, 0x00, 0x4d, 0x2b, 0x01, 0x00, 0x00, + 0x04, 0x2c, 0x01, 0x00, 0x00, 0x4d, 0x2d, 0x01, + 0x00, 0x00, 0x04, 0x2e, 0x01, 0x00, 0x00, 0x4d, + 0x2f, 0x01, 0x00, 0x00, 0x04, 0x30, 0x01, 0x00, + 0x00, 0x4d, 0x31, 0x01, 0x00, 0x00, 0x04, 0x32, + 0x01, 0x00, 0x00, 0x4d, 0x33, 0x01, 0x00, 0x00, + 0x04, 0x34, 0x01, 0x00, 0x00, 0x4d, 0x35, 0x01, + 0x00, 0x00, 0x04, 0x36, 0x01, 0x00, 0x00, 0x4d, + 0x37, 0x01, 0x00, 0x00, 0x4d, 0x38, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x39, 0x01, 0x00, 0x00, 0x4d, + 0x3a, 0x01, 0x00, 0x00, 0x04, 0x3b, 0x01, 0x00, + 0x00, 0x4d, 0x3c, 0x01, 0x00, 0x00, 0x04, 0x3d, + 0x01, 0x00, 0x00, 0x4d, 0x2f, 0x01, 0x00, 0x00, + 0x04, 0x3e, 0x01, 0x00, 0x00, 0x4d, 0x29, 0x01, + 0x00, 0x00, 0x4d, 0x3f, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x40, 0x01, 0x00, 0x00, 0x4d, 0x41, 0x01, + 0x00, 0x00, 0x04, 0x42, 0x01, 0x00, 0x00, 0x4d, + 0x43, 0x01, 0x00, 0x00, 0x04, 0x0b, 0x01, 0x00, + 0x00, 0x4d, 0x0a, 0x01, 0x00, 0x00, 0x04, 0x07, + 0x01, 0x00, 0x00, 0x4d, 0x06, 0x01, 0x00, 0x00, + 0x4d, 0x44, 0x01, 0x00, 0x00, 0x4d, 0x45, 0x01, + 0x00, 0x00, 0x0b, 0x0b, 0x0b, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x46, + 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x41, 0x00, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x65, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x16, + 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x76, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x4d, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x4d, + 0x7b, 0x01, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x00, 0xbe, 0x01, 0xbe, + 0x02, 0xbe, 0x03, 0xbe, 0x04, 0xbe, 0x05, 0xbe, + 0x06, 0xbe, 0x07, 0xbe, 0x08, 0xbe, 0x09, 0xbe, + 0x0a, 0xbe, 0x0b, 0x26, 0x0c, 0x00, 0x4d, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, + 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, + 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, + 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, + 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, + 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, + 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, + 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, + 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x65, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, + 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x0c, 0xbe, 0x0d, 0xbe, 0x0e, 0xbe, 0x0f, + 0xbe, 0x10, 0xbe, 0x11, 0xbe, 0x12, 0xbe, 0x13, + 0xbe, 0x14, 0xbe, 0x15, 0xbe, 0x16, 0xbe, 0x17, + 0xbe, 0x18, 0x26, 0x0d, 0x00, 0x4d, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, + 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, + 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, + 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, + 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, + 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, + 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, + 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, + 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, + 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, + 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, + 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, + 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, + 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, + 0x94, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x65, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, + 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x46, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, + 0x04, 0x96, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x95, 0x01, + 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x76, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, + 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x19, 0xbe, + 0x1a, 0xbe, 0x1b, 0xbe, 0x1c, 0xbe, 0x1d, 0xbe, + 0x1e, 0xbe, 0x1f, 0xbe, 0x20, 0xbe, 0x21, 0xbe, + 0x22, 0xbe, 0x23, 0xbe, 0x24, 0x26, 0x0c, 0x00, + 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, + 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, + 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, + 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, + 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, + 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, + 0x04, 0x87, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x65, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, + 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x25, 0xbe, 0x26, 0xbe, 0x27, + 0xbe, 0x28, 0xbe, 0x29, 0xbe, 0x2a, 0xbe, 0x2b, + 0xbe, 0x2c, 0xbe, 0x2d, 0xbe, 0x2e, 0xbe, 0x2f, + 0xbe, 0x30, 0xbe, 0x31, 0x26, 0x0d, 0x00, 0x4d, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, + 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, + 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, + 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, + 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, + 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, + 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, + 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, + 0x04, 0xa3, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x97, 0x01, + 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, + 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, + 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, + 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, + 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, + 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, + 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, + 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x26, 0x0d, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x65, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x16, + 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x95, 0x01, 0x00, 0x00, + 0x04, 0x96, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, + 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, + 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x32, 0xbe, 0x33, 0xbe, 0x34, 0xbe, 0x35, 0xbe, + 0x36, 0xbe, 0x37, 0xbe, 0x38, 0xbe, 0x39, 0xbe, + 0x3a, 0xbe, 0x3b, 0xbe, 0x3c, 0xbe, 0x3d, 0xbe, + 0x3e, 0x26, 0x0d, 0x00, 0x4d, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, + 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, + 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, + 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, + 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, + 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, + 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, + 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, + 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, + 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, + 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, + 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, + 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, + 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, + 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x65, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x95, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x76, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, + 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0xd9, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x3f, 0xbe, + 0x40, 0xbe, 0x41, 0xbe, 0x42, 0xbe, 0x43, 0xbe, + 0x44, 0xbe, 0x45, 0xbe, 0x46, 0xbe, 0x47, 0xbe, + 0x48, 0xbe, 0x49, 0xbe, 0x4a, 0x26, 0x0c, 0x00, + 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, + 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, + 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, + 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, + 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, + 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, + 0x04, 0x87, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x65, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, + 0x96, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, + 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x95, + 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, + 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x46, + 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, + 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x41, 0x00, 0x00, 0x00, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x65, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x49, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, + 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, + 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, + 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, + 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x26, + 0x04, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, + 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, + 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, + 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x4b, 0xbe, 0x4c, 0xbe, 0x4d, 0xbe, + 0x4e, 0xbe, 0x4f, 0xbe, 0x50, 0xbe, 0x51, 0xbe, + 0x52, 0xbe, 0x53, 0xbe, 0x54, 0xbe, 0x55, 0xbe, + 0x56, 0xbe, 0x57, 0xbe, 0x58, 0x26, 0x0e, 0x00, + 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, + 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, + 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, + 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, 0xb3, + 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, 0x00, + 0x04, 0xb5, 0x01, 0x00, 0x00, 0x04, 0xb6, 0x01, + 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, + 0xb8, 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, + 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, 0x04, 0xbb, + 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, + 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, + 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, 0x04, + 0xb2, 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, + 0x00, 0x04, 0xb4, 0x01, 0x00, 0x00, 0x04, 0xb5, + 0x01, 0x00, 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, + 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, + 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, 0x04, + 0xba, 0x01, 0x00, 0x00, 0x04, 0xbb, 0x01, 0x00, + 0x00, 0x26, 0x0e, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x65, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x16, + 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x76, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x4d, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x4d, + 0x7b, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x59, 0xbe, 0x5a, 0xbe, + 0x5b, 0xbe, 0x5c, 0xbe, 0x5d, 0xbe, 0x5e, 0xbe, + 0x5f, 0xbe, 0x60, 0xbe, 0x61, 0xbe, 0x62, 0xbe, + 0x63, 0xbe, 0x64, 0x26, 0x0c, 0x00, 0x4d, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, + 0x04, 0xbd, 0x01, 0x00, 0x00, 0x04, 0xbe, 0x01, + 0x00, 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, 0x04, + 0xc0, 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, + 0x00, 0x04, 0xc2, 0x01, 0x00, 0x00, 0x04, 0xc3, + 0x01, 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, + 0x04, 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, 0x01, + 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xbc, 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, + 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, + 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, + 0x04, 0xc1, 0x01, 0x00, 0x00, 0x04, 0xc2, 0x01, + 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, 0x04, + 0xc4, 0x01, 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, + 0x00, 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, 0xc7, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x65, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xc8, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0xc8, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x76, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, + 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x65, 0xbe, + 0x66, 0xbe, 0x67, 0xbe, 0x68, 0xbe, 0x69, 0xbe, + 0x6a, 0xbe, 0x6b, 0xbe, 0x6c, 0xbe, 0x6d, 0xbe, + 0x6e, 0xbe, 0x6f, 0xbe, 0x70, 0x26, 0x0c, 0x00, + 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, + 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, 0x04, + 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, + 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, + 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, + 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, + 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, + 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, + 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, + 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, + 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, + 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, + 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, + 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, + 0x04, 0xe0, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x65, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xe1, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0xe1, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, + 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x71, 0xbe, 0x72, 0xbe, 0x73, 0xbe, 0x74, 0xbe, + 0x75, 0xbe, 0x76, 0xbe, 0x77, 0xbe, 0x78, 0xbe, + 0x79, 0xbe, 0x7a, 0xbe, 0x7b, 0xbe, 0x7c, 0x26, + 0x0c, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0xc9, 0x01, 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, + 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, + 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, + 0x04, 0xce, 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, + 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, + 0xd1, 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, + 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, + 0x04, 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, + 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, + 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, + 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, + 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, + 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, + 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x65, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, + 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x74, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xe1, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0xe1, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe1, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x41, 0x00, + 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x65, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, + 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, + 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, + 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, + 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, + 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, + 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, + 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, + 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, + 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, + 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, + 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, + 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, + 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, + 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, + 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, + 0xfb, 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, + 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, + 0x01, 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, + 0x04, 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, + 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, 0x02, 0x02, + 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, + 0x03, 0x02, 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, + 0x80, 0x04, 0x04, 0x02, 0x00, 0x00, 0x4d, 0x22, + 0x00, 0x00, 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, + 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, + 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, + 0x07, 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, + 0x80, 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, 0x26, + 0x00, 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, + 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, + 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, + 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, + 0x80, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x2a, + 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, + 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, + 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, + 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, + 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x2e, + 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, + 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, + 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, + 0x13, 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, + 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x32, + 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, + 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, + 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, + 0x17, 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, + 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x36, + 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, + 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, + 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, + 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, + 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x3a, + 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, + 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, + 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, + 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, + 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x3e, + 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, + 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, + 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, + 0x23, 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, + 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x42, + 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, + 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, + 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, + 0x27, 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, + 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x46, + 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, + 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, + 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, + 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, + 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x4a, + 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, + 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, + 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, + 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, + 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x4e, + 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, + 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, + 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, + 0x33, 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, + 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x52, + 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, + 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, + 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, + 0x37, 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, + 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x56, + 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, + 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, + 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, + 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, + 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x5a, + 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, + 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, + 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, + 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, + 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x5e, + 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, + 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, + 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, + 0x43, 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, + 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x62, + 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, + 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, + 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, + 0x47, 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, + 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x66, + 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, + 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, + 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, + 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, + 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x6a, + 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, + 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, + 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, + 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, + 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x6e, + 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, + 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, + 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, + 0x53, 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, + 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x72, + 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, + 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, + 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, + 0x57, 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, + 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x76, + 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, + 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, + 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, + 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, + 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x7a, + 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, + 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, + 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, + 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, + 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x7e, + 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, + 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, + 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, + 0x63, 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, + 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x82, + 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, + 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, + 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, + 0x67, 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, + 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x86, + 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, + 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, + 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, + 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, + 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x8a, + 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, + 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, + 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, + 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, + 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x8e, + 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, + 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, + 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, + 0x73, 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, + 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x92, + 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, + 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, + 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, + 0x77, 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, + 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x96, + 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, + 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, + 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, + 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, + 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x9a, + 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, + 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, + 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, + 0x7f, 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, + 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0x9e, + 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, + 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, + 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, + 0x83, 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, + 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0xa2, + 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, + 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, + 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, + 0x87, 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, + 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0xa6, + 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, + 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, + 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, + 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, + 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xaa, + 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, + 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, + 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, + 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, + 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xae, + 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, + 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, + 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, + 0x93, 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, + 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xb2, + 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, + 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, + 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, + 0x97, 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, + 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xb6, + 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, + 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, + 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, + 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, + 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xba, + 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, + 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, + 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, + 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, + 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xbe, + 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, + 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, + 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, + 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, + 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xc2, + 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, + 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, + 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, + 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, + 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xc6, + 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, + 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, + 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, + 0xab, 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, + 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xca, + 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, + 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, + 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, + 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, + 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xce, + 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, + 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, + 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, + 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, + 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xd2, + 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, + 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, + 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, + 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, + 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xd6, + 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, + 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, + 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, + 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, + 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, + 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, + 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xe2, + 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, + 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, + 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, + 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x80, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xe6, + 0x00, 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, + 0xca, 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, + 0x80, 0x04, 0x49, 0x01, 0x00, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x80, 0x04, 0x04, 0x01, 0x00, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, + 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, + 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, + 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, + 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, + 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, + 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, + 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, + 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, + 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, + 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, + 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, + 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, + 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, + 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, + 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, + 0xfb, 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, + 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, + 0x01, 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, + 0x04, 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, + 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, 0x02, 0x02, + 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, + 0x03, 0x02, 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, + 0x80, 0x04, 0x04, 0x02, 0x00, 0x00, 0x4d, 0x22, + 0x00, 0x00, 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, + 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, + 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, + 0x07, 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, + 0x80, 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, 0x26, + 0x00, 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, + 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, + 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, + 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, + 0x80, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x2a, + 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, + 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, + 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, + 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, + 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x2e, + 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, + 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, + 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, + 0x13, 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, + 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x32, + 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, + 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, + 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, + 0x17, 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, + 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x36, + 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, + 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, + 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, + 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, + 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x3a, + 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, + 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, + 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, + 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, + 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x3e, + 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, + 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, + 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, + 0x23, 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, + 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x42, + 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, + 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, + 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, + 0x27, 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, + 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x46, + 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, + 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, + 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, + 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, + 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x4a, + 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, + 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, + 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, + 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, + 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x4e, + 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, + 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, + 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, + 0x33, 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, + 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x52, + 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, + 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, + 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, + 0x37, 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, + 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x56, + 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, + 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, + 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, + 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, + 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x5a, + 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, + 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, + 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, + 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, + 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x5e, + 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, + 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, + 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, + 0x43, 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, + 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x62, + 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, + 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, + 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, + 0x47, 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, + 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x66, + 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, + 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, + 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, + 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, + 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x6a, + 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, + 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, + 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, + 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, + 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x6e, + 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, + 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, + 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, + 0x53, 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, + 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x72, + 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, + 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, + 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, + 0x57, 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, + 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x76, + 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, + 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, + 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, + 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, + 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x7a, + 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, + 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, + 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, + 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, + 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x7e, + 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, + 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, + 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, + 0x63, 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, + 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x82, + 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, + 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, + 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, + 0x67, 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, + 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x86, + 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, + 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, + 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, + 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, + 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x8a, + 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, + 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, + 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, + 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, + 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x8e, + 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, + 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, + 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, + 0x73, 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, + 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x92, + 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, + 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, + 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, + 0x77, 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, + 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x96, + 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, + 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, + 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, + 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, + 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x9a, + 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, + 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, + 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, + 0x7f, 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, + 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0x9e, + 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, + 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, + 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, + 0x83, 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, + 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0xa2, + 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, + 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, + 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, + 0x87, 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, + 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0xa6, + 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, + 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, + 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, + 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, + 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xaa, + 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, + 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, + 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, + 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, + 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xae, + 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, + 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, + 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, + 0x93, 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, + 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xb2, + 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, + 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, + 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, + 0x97, 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, + 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xb6, + 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, + 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, + 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, + 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, + 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xba, + 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, + 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, + 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, + 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, + 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xbe, + 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, + 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, + 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, + 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, + 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xc2, + 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, + 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, + 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, + 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, + 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xc6, + 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, + 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, + 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, + 0xab, 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, + 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xca, + 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, + 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, + 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, + 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, + 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xce, + 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, + 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, + 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, + 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, + 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xd2, + 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, + 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, + 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, + 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, + 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xd6, + 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, + 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, + 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, + 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, + 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, + 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, + 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xe2, + 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, + 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, + 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, + 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x80, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xe6, + 0x00, 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, 0xcb, 0x02, + 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, + 0xcc, 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, + 0x80, 0x04, 0xcd, 0x02, 0x00, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x80, 0x04, 0xce, 0x02, 0x00, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, + 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, + 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, + 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, + 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, + 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, + 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, + 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, + 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, + 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, + 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, + 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, + 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, + 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, + 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, + 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, + 0xfb, 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, + 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, + 0x01, 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, + 0x04, 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, + 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, 0x02, 0x02, + 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, + 0x03, 0x02, 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, + 0x80, 0x04, 0x04, 0x02, 0x00, 0x00, 0x4d, 0x22, + 0x00, 0x00, 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, + 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, + 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, + 0x07, 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, + 0x80, 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, 0x26, + 0x00, 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, + 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, + 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, + 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, + 0x80, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x2a, + 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, + 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, + 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, + 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, + 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x2e, + 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, + 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, + 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, + 0x13, 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, + 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x32, + 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, + 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, + 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, + 0x17, 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, + 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x36, + 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, + 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, + 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, + 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, + 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x3a, + 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, + 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, + 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, + 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, + 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x3e, + 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, + 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, + 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, + 0x23, 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, + 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x42, + 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, + 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, + 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, + 0x27, 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, + 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x46, + 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, + 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, + 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, + 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, + 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x4a, + 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, + 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, + 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, + 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, + 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x4e, + 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, + 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, + 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, + 0x33, 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, + 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x52, + 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, + 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, + 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, + 0x37, 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, + 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x56, + 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, + 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, + 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, + 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, + 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x5a, + 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, + 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, + 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, + 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, + 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x5e, + 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, + 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, + 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, + 0x43, 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, + 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x62, + 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, + 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, + 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, + 0x47, 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, + 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x66, + 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, + 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, + 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, + 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, + 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x6a, + 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, + 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, + 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, + 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, + 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x6e, + 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, + 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, + 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, + 0x53, 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, + 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x72, + 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, + 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, + 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, + 0x57, 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, + 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x76, + 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, + 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, + 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, + 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, + 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x7a, + 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, + 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, + 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, + 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, + 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x7e, + 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, + 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, + 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, + 0x63, 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, + 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x82, + 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, + 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, + 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, + 0x67, 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, + 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x86, + 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, + 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, + 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, + 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, + 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x8a, + 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, + 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, + 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, + 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, + 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x8e, + 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, + 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, + 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, + 0x73, 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, + 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x92, + 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, + 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, + 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, + 0x77, 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, + 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x96, + 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, + 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, + 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, + 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, + 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x9a, + 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, + 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, + 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, + 0x7f, 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, + 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0x9e, + 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, + 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, + 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, + 0x83, 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, + 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0xa2, + 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, + 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, + 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, + 0x87, 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, + 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0xa6, + 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, + 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, + 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, + 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, + 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xaa, + 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, + 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, + 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, + 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, + 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xae, + 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, + 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, + 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, + 0x93, 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, + 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xb2, + 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, + 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, + 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, + 0x97, 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, + 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xb6, + 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, + 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, + 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, + 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, + 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xba, + 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, + 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, + 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, + 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, + 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xbe, + 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, + 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, + 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, + 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, + 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xc2, + 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, + 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, + 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, + 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, + 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xc6, + 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, + 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, + 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, + 0xab, 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, + 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xca, + 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, + 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, + 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, + 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, + 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xce, + 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, + 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, + 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, + 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, + 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xd2, + 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, + 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, + 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, + 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, + 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xd6, + 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, + 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, + 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, + 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, + 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, + 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, + 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xe2, + 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, + 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, + 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, + 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x80, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xe6, + 0x00, 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, 0xcb, 0x02, + 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, + 0xcc, 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, + 0x80, 0x04, 0xcd, 0x02, 0x00, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x80, 0x04, 0xce, 0x02, 0x00, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, + 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x7d, 0xbe, 0x7e, 0xbe, 0x7f, 0xbe, 0x80, + 0xbe, 0x81, 0xbe, 0x82, 0xbe, 0x83, 0xbe, 0x84, + 0xbe, 0x85, 0xbe, 0x86, 0xbe, 0x87, 0xbe, 0x88, + 0x26, 0x0c, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0xcf, 0x02, 0x00, 0x00, 0x04, 0xd0, 0x02, + 0x00, 0x00, 0x04, 0xd1, 0x02, 0x00, 0x00, 0x04, + 0xd2, 0x02, 0x00, 0x00, 0x04, 0xd3, 0x02, 0x00, + 0x00, 0x04, 0xd4, 0x02, 0x00, 0x00, 0x04, 0xd5, + 0x02, 0x00, 0x00, 0x04, 0xd6, 0x02, 0x00, 0x00, + 0x04, 0xd7, 0x02, 0x00, 0x00, 0x04, 0xd8, 0x02, + 0x00, 0x00, 0x04, 0xd9, 0x02, 0x00, 0x00, 0x04, + 0xda, 0x02, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xcf, 0x02, 0x00, + 0x00, 0x04, 0xd0, 0x02, 0x00, 0x00, 0x04, 0xd1, + 0x02, 0x00, 0x00, 0x04, 0xd2, 0x02, 0x00, 0x00, + 0x04, 0xd3, 0x02, 0x00, 0x00, 0x04, 0xd4, 0x02, + 0x00, 0x00, 0x04, 0xd5, 0x02, 0x00, 0x00, 0x04, + 0xd6, 0x02, 0x00, 0x00, 0x04, 0xd7, 0x02, 0x00, + 0x00, 0x04, 0xd8, 0x02, 0x00, 0x00, 0x04, 0xd9, + 0x02, 0x00, 0x00, 0x04, 0xda, 0x02, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x65, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xdb, 0x02, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0xdb, 0x02, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xdb, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, + 0x01, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x16, + 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x41, + 0x00, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x65, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x16, + 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xdc, 0x02, 0x00, 0x00, + 0x04, 0xdd, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0xdc, 0x02, + 0x00, 0x00, 0x04, 0xdd, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xdc, 0x02, 0x00, 0x00, 0x04, 0xdd, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, + 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, + 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x02, + 0x00, 0x00, 0x4d, 0xdf, 0x02, 0x00, 0x00, 0x0b, + 0x04, 0xe0, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe1, 0x02, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0xe2, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x02, 0x00, + 0x00, 0x04, 0xe4, 0x02, 0x00, 0x00, 0x4d, 0xe5, + 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x02, 0x00, 0x00, + 0x0b, 0x04, 0xe7, 0x02, 0x00, 0x00, 0x4d, 0xe3, + 0x02, 0x00, 0x00, 0x04, 0xe8, 0x02, 0x00, 0x00, + 0x4d, 0xe5, 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x02, + 0x00, 0x00, 0x0b, 0x04, 0xea, 0x02, 0x00, 0x00, + 0x4d, 0xe3, 0x02, 0x00, 0x00, 0x04, 0xeb, 0x02, + 0x00, 0x00, 0x4d, 0xe5, 0x02, 0x00, 0x00, 0x4d, + 0xec, 0x02, 0x00, 0x00, 0x4d, 0xed, 0x02, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0xee, 0x02, 0x00, 0x00, + 0x4d, 0xe6, 0x02, 0x00, 0x00, 0x04, 0xef, 0x02, + 0x00, 0x00, 0x4d, 0xf0, 0x02, 0x00, 0x00, 0x04, + 0xf1, 0x02, 0x00, 0x00, 0x4d, 0xf2, 0x02, 0x00, + 0x00, 0x04, 0xf3, 0x02, 0x00, 0x00, 0x4d, 0xf4, + 0x02, 0x00, 0x00, 0x04, 0xf5, 0x02, 0x00, 0x00, + 0x4d, 0xf6, 0x02, 0x00, 0x00, 0x04, 0xf7, 0x02, + 0x00, 0x00, 0x4d, 0xf8, 0x02, 0x00, 0x00, 0x04, + 0xf9, 0x02, 0x00, 0x00, 0x4d, 0xfa, 0x02, 0x00, + 0x00, 0x4d, 0xe0, 0x02, 0x00, 0x00, 0x4d, 0xfb, + 0x02, 0x00, 0x00, 0x0b, 0x04, 0xfc, 0x02, 0x00, + 0x00, 0x4d, 0xfd, 0x02, 0x00, 0x00, 0x04, 0xfe, + 0x02, 0x00, 0x00, 0x4d, 0xff, 0x02, 0x00, 0x00, + 0x04, 0x00, 0x03, 0x00, 0x00, 0x4d, 0x01, 0x03, + 0x00, 0x00, 0x04, 0x02, 0x03, 0x00, 0x00, 0x4d, + 0x03, 0x03, 0x00, 0x00, 0x04, 0x04, 0x03, 0x00, + 0x00, 0x4d, 0x05, 0x03, 0x00, 0x00, 0x04, 0x06, + 0x03, 0x00, 0x00, 0x4d, 0x07, 0x03, 0x00, 0x00, + 0x04, 0x08, 0x03, 0x00, 0x00, 0x4d, 0x09, 0x03, + 0x00, 0x00, 0x04, 0x0a, 0x03, 0x00, 0x00, 0x4d, + 0x0b, 0x03, 0x00, 0x00, 0x04, 0x0c, 0x03, 0x00, + 0x00, 0x4d, 0x0d, 0x03, 0x00, 0x00, 0x04, 0x0e, + 0x03, 0x00, 0x00, 0x4d, 0x0f, 0x03, 0x00, 0x00, + 0x04, 0x10, 0x03, 0x00, 0x00, 0x4d, 0x11, 0x03, + 0x00, 0x00, 0x04, 0x12, 0x03, 0x00, 0x00, 0x4d, + 0x13, 0x03, 0x00, 0x00, 0x04, 0x14, 0x03, 0x00, + 0x00, 0x4d, 0x15, 0x03, 0x00, 0x00, 0x04, 0x16, + 0x03, 0x00, 0x00, 0x4d, 0x17, 0x03, 0x00, 0x00, + 0x04, 0x18, 0x03, 0x00, 0x00, 0x4d, 0x19, 0x03, + 0x00, 0x00, 0x4d, 0x1a, 0x03, 0x00, 0x00, 0x4d, + 0x45, 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, 0xcc, + 0x28, 0xb6, 0x0c, 0x01, 0x00, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, + 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_ja_size = 18097; + +const uint8_t intl_ja[18097] = { + 0x01, 0xdb, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x6a, 0x61, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x0e, + 0x7b, 0x31, 0x7d, 0x20, 0x7b, 0x30, 0x7d, 0x0a, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, 0x65, + 0x64, 0x69, 0x75, 0x6d, 0x08, 0x66, 0x75, 0x6c, + 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x05, 0x64, + 0x00, 0xe5, 0x65, 0x02, 0x64, 0x06, 0x63, 0x63, + 0x63, 0x02, 0x45, 0x0b, 0x64, 0x00, 0xe5, 0x65, + 0x28, 0x00, 0x45, 0x00, 0x29, 0x00, 0x04, 0x45, + 0x64, 0x0d, 0x64, 0x00, 0xe5, 0x65, 0x45, 0x00, + 0x45, 0x00, 0x45, 0x00, 0x45, 0x00, 0x0a, 0x45, + 0x45, 0x45, 0x45, 0x64, 0x12, 0x61, 0x4b, 0x3a, + 0x6d, 0x6d, 0x20, 0x28, 0x45, 0x29, 0x06, 0x45, + 0x68, 0x6d, 0x10, 0x48, 0x3a, 0x6d, 0x6d, 0x20, + 0x28, 0x45, 0x29, 0x06, 0x45, 0x48, 0x6d, 0x18, + 0x61, 0x4b, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x28, 0x45, 0x29, 0x08, 0x45, 0x68, 0x6d, + 0x73, 0x16, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x28, 0x45, 0x29, 0x08, 0x45, 0x48, + 0x6d, 0x73, 0x07, 0x47, 0x00, 0x79, 0x00, 0x74, + 0x5e, 0x04, 0x47, 0x79, 0x0b, 0x47, 0x00, 0x79, + 0x00, 0x74, 0x5e, 0x4d, 0x00, 0x08, 0x67, 0x0a, + 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x0f, 0x47, 0x00, + 0x79, 0x00, 0x74, 0x5e, 0x4d, 0x00, 0x08, 0x67, + 0x64, 0x00, 0xe5, 0x65, 0x0c, 0x47, 0x79, 0x4d, + 0x4d, 0x4d, 0x64, 0x15, 0x47, 0x00, 0x79, 0x00, + 0x74, 0x5e, 0x4d, 0x00, 0x08, 0x67, 0x64, 0x00, + 0xe5, 0x65, 0x28, 0x00, 0x45, 0x00, 0x29, 0x00, + 0x0e, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, + 0x17, 0x47, 0x00, 0x79, 0x00, 0x74, 0x5e, 0x4d, + 0x00, 0x08, 0x67, 0x64, 0x00, 0xe5, 0x65, 0x45, + 0x00, 0x45, 0x00, 0x45, 0x00, 0x45, 0x00, 0x14, + 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x45, 0x45, + 0x45, 0x64, 0x07, 0x61, 0x00, 0x4b, 0x00, 0x42, + 0x66, 0x02, 0x68, 0x05, 0x48, 0x00, 0x42, 0x66, + 0x02, 0x48, 0x0a, 0x61, 0x4b, 0x3a, 0x6d, 0x6d, + 0x04, 0x68, 0x6d, 0x08, 0x48, 0x3a, 0x6d, 0x6d, + 0x04, 0x48, 0x6d, 0x10, 0x61, 0x4b, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x06, 0x68, 0x6d, 0x73, + 0x0e, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x06, 0x48, 0x6d, 0x73, 0x14, 0x61, 0x4b, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x76, 0x08, + 0x68, 0x6d, 0x73, 0x76, 0x12, 0x48, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x76, 0x08, 0x48, + 0x6d, 0x73, 0x76, 0x0e, 0x61, 0x4b, 0x3a, 0x6d, + 0x6d, 0x20, 0x76, 0x06, 0x68, 0x6d, 0x76, 0x0c, + 0x48, 0x3a, 0x6d, 0x6d, 0x20, 0x76, 0x06, 0x48, + 0x6d, 0x76, 0x05, 0x4d, 0x00, 0x08, 0x67, 0x02, + 0x4d, 0x06, 0x4d, 0x2f, 0x64, 0x04, 0x4d, 0x64, + 0x0c, 0x4d, 0x2f, 0x64, 0x28, 0x45, 0x29, 0x06, + 0x4d, 0x45, 0x64, 0x0e, 0x4d, 0x2f, 0x64, 0x45, + 0x45, 0x45, 0x45, 0x0c, 0x4d, 0x45, 0x45, 0x45, + 0x45, 0x64, 0x06, 0x4d, 0x4d, 0x4d, 0x09, 0x4d, + 0x00, 0x08, 0x67, 0x64, 0x00, 0xe5, 0x65, 0x08, + 0x4d, 0x4d, 0x4d, 0x64, 0x0f, 0x4d, 0x00, 0x08, + 0x67, 0x64, 0x00, 0xe5, 0x65, 0x28, 0x00, 0x45, + 0x00, 0x29, 0x00, 0x0a, 0x4d, 0x4d, 0x4d, 0x45, + 0x64, 0x11, 0x4d, 0x00, 0x08, 0x67, 0x64, 0x00, + 0xe5, 0x65, 0x45, 0x00, 0x45, 0x00, 0x45, 0x00, + 0x45, 0x00, 0x10, 0x4d, 0x4d, 0x4d, 0x45, 0x45, + 0x45, 0x45, 0x64, 0x0a, 0x4d, 0x4d, 0x4d, 0x4d, + 0x64, 0x0a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x04, + 0x6d, 0x73, 0x05, 0x79, 0x00, 0x74, 0x5e, 0x02, + 0x79, 0x06, 0x79, 0x2f, 0x4d, 0x04, 0x79, 0x4d, + 0x0a, 0x79, 0x2f, 0x4d, 0x2f, 0x64, 0x06, 0x79, + 0x4d, 0x64, 0x10, 0x79, 0x2f, 0x4d, 0x2f, 0x64, + 0x28, 0x45, 0x29, 0x08, 0x79, 0x4d, 0x45, 0x64, + 0x12, 0x79, 0x2f, 0x4d, 0x2f, 0x64, 0x45, 0x45, + 0x45, 0x45, 0x0e, 0x79, 0x4d, 0x45, 0x45, 0x45, + 0x45, 0x64, 0x08, 0x79, 0x2f, 0x4d, 0x4d, 0x06, + 0x79, 0x4d, 0x4d, 0x09, 0x79, 0x00, 0x74, 0x5e, + 0x4d, 0x00, 0x08, 0x67, 0x08, 0x79, 0x4d, 0x4d, + 0x4d, 0x0d, 0x79, 0x00, 0x74, 0x5e, 0x4d, 0x00, + 0x08, 0x67, 0x64, 0x00, 0xe5, 0x65, 0x0a, 0x79, + 0x4d, 0x4d, 0x4d, 0x64, 0x13, 0x79, 0x00, 0x74, + 0x5e, 0x4d, 0x00, 0x08, 0x67, 0x64, 0x00, 0xe5, + 0x65, 0x28, 0x00, 0x45, 0x00, 0x29, 0x00, 0x0c, + 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x15, 0x79, + 0x00, 0x74, 0x5e, 0x4d, 0x00, 0x08, 0x67, 0x64, + 0x00, 0xe5, 0x65, 0x45, 0x00, 0x45, 0x00, 0x45, + 0x00, 0x45, 0x00, 0x12, 0x79, 0x4d, 0x4d, 0x4d, + 0x45, 0x45, 0x45, 0x45, 0x64, 0x0a, 0x79, 0x4d, + 0x4d, 0x4d, 0x4d, 0x0a, 0x79, 0x2f, 0x51, 0x51, + 0x51, 0x08, 0x79, 0x51, 0x51, 0x51, 0x0a, 0x79, + 0x51, 0x51, 0x51, 0x51, 0x20, 0x61, 0x76, 0x61, + 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x73, 0x14, 0x79, 0x4d, + 0x4d, 0x4d, 0x4d, 0x45, 0x45, 0x45, 0x45, 0x64, + 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x0e, + 0x79, 0x2f, 0x4d, 0x4d, 0x2f, 0x64, 0x64, 0x16, + 0x64, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x73, 0x1b, 0x48, 0x00, 0x42, 0x66, + 0x6d, 0x00, 0x6d, 0x00, 0x06, 0x52, 0x73, 0x00, + 0x73, 0x00, 0xd2, 0x79, 0x20, 0x00, 0x7a, 0x00, + 0x7a, 0x00, 0x7a, 0x00, 0x7a, 0x00, 0x12, 0x68, + 0x6d, 0x6d, 0x73, 0x73, 0x7a, 0x7a, 0x7a, 0x7a, + 0x12, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x7a, 0x08, 0x68, 0x6d, 0x73, 0x7a, 0x16, + 0x74, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x73, 0x0e, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x73, 0x0c, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x05, 0x31, 0x00, 0x08, 0x67, 0x05, + 0x32, 0x00, 0x08, 0x67, 0x05, 0x33, 0x00, 0x08, + 0x67, 0x05, 0x34, 0x00, 0x08, 0x67, 0x05, 0x35, + 0x00, 0x08, 0x67, 0x05, 0x36, 0x00, 0x08, 0x67, + 0x05, 0x37, 0x00, 0x08, 0x67, 0x05, 0x38, 0x00, + 0x08, 0x67, 0x05, 0x39, 0x00, 0x08, 0x67, 0x07, + 0x31, 0x00, 0x30, 0x00, 0x08, 0x67, 0x07, 0x31, + 0x00, 0x31, 0x00, 0x08, 0x67, 0x07, 0x31, 0x00, + 0x32, 0x00, 0x08, 0x67, 0x0c, 0x6d, 0x6f, 0x6e, + 0x74, 0x68, 0x73, 0x03, 0xe5, 0x65, 0x03, 0x08, + 0x67, 0x03, 0x6b, 0x70, 0x03, 0x34, 0x6c, 0x03, + 0x28, 0x67, 0x03, 0xd1, 0x91, 0x03, 0x1f, 0x57, + 0x07, 0xe5, 0x65, 0xdc, 0x66, 0xe5, 0x65, 0x07, + 0x08, 0x67, 0xdc, 0x66, 0xe5, 0x65, 0x07, 0x6b, + 0x70, 0xdc, 0x66, 0xe5, 0x65, 0x07, 0x34, 0x6c, + 0xdc, 0x66, 0xe5, 0x65, 0x07, 0x28, 0x67, 0xdc, + 0x66, 0xe5, 0x65, 0x07, 0xd1, 0x91, 0xdc, 0x66, + 0xe5, 0x65, 0x07, 0x1f, 0x57, 0xdc, 0x66, 0xe5, + 0x65, 0x08, 0x64, 0x61, 0x79, 0x73, 0x04, 0x42, + 0x45, 0x05, 0xcf, 0x4e, 0xa6, 0x66, 0x08, 0x65, + 0x72, 0x61, 0x73, 0x05, 0x48, 0x53, 0x4d, 0x52, + 0x04, 0x61, 0x6d, 0x05, 0x48, 0x53, 0x8c, 0x5f, + 0x04, 0x70, 0x6d, 0x14, 0x64, 0x61, 0x79, 0x50, + 0x65, 0x72, 0x69, 0x6f, 0x64, 0x73, 0x03, 0x63, + 0x6b, 0x03, 0x8c, 0x4e, 0x03, 0x09, 0x4e, 0x03, + 0xdb, 0x56, 0x03, 0x94, 0x4e, 0x03, 0x6d, 0x51, + 0x03, 0x03, 0x4e, 0x03, 0x6b, 0x51, 0x03, 0x5d, + 0x4e, 0x03, 0x41, 0x53, 0x05, 0x41, 0x53, 0x00, + 0x4e, 0x05, 0x41, 0x53, 0x8c, 0x4e, 0x05, 0x63, + 0x6b, 0x08, 0x67, 0x05, 0x8c, 0x4e, 0x08, 0x67, + 0x05, 0x09, 0x4e, 0x08, 0x67, 0x05, 0xdb, 0x56, + 0x08, 0x67, 0x05, 0x94, 0x4e, 0x08, 0x67, 0x05, + 0x6d, 0x51, 0x08, 0x67, 0x05, 0x03, 0x4e, 0x08, + 0x67, 0x05, 0x6b, 0x51, 0x08, 0x67, 0x05, 0x5d, + 0x4e, 0x08, 0x67, 0x05, 0x41, 0x53, 0x08, 0x67, + 0x07, 0x41, 0x53, 0x00, 0x4e, 0x08, 0x67, 0x07, + 0x41, 0x53, 0x8c, 0x4e, 0x08, 0x67, 0x07, 0xc8, + 0x30, 0xa6, 0x30, 0xc8, 0x30, 0x05, 0xd0, 0x30, + 0xd0, 0x30, 0x09, 0xcf, 0x30, 0xc8, 0x30, 0xfc, + 0x30, 0xeb, 0x30, 0x09, 0xad, 0x30, 0xa2, 0x30, + 0xc3, 0x30, 0xaf, 0x30, 0x07, 0xc8, 0x30, 0xfc, + 0x30, 0xd0, 0x30, 0x0b, 0xa2, 0x30, 0xe0, 0x30, + 0xb7, 0x30, 0xfc, 0x30, 0xeb, 0x30, 0x0d, 0xd0, + 0x30, 0xe9, 0x30, 0xe0, 0x30, 0xcf, 0x30, 0xfc, + 0x30, 0xc8, 0x30, 0x0b, 0xd0, 0x30, 0xe9, 0x30, + 0xe2, 0x30, 0xa6, 0x30, 0xc0, 0x30, 0x0b, 0xd0, + 0x30, 0xb7, 0x30, 0xe3, 0x30, 0xf3, 0x30, 0xb9, + 0x30, 0x09, 0xd1, 0x30, 0xaa, 0x30, 0xfc, 0x30, + 0xca, 0x30, 0x09, 0xa8, 0x30, 0xda, 0x30, 0xfc, + 0x30, 0xd7, 0x30, 0x07, 0xe1, 0x30, 0xb9, 0x30, + 0xe9, 0x30, 0x07, 0xca, 0x30, 0xb7, 0x30, 0xa8, + 0x30, 0x08, 0x45, 0x52, 0x41, 0x30, 0x08, 0x45, + 0x52, 0x41, 0x31, 0x0b, 0xe1, 0x30, 0xb9, 0x30, + 0xb1, 0x30, 0xec, 0x30, 0xe0, 0x30, 0x09, 0xc6, + 0x30, 0xb1, 0x30, 0xe0, 0x30, 0xc8, 0x30, 0x07, + 0xd8, 0x30, 0xc0, 0x30, 0xeb, 0x30, 0x09, 0xbf, + 0x30, 0xfc, 0x30, 0xb5, 0x30, 0xb9, 0x30, 0x05, + 0xc6, 0x30, 0xeb, 0x30, 0x0d, 0xa4, 0x30, 0xa7, + 0x30, 0xab, 0x30, 0xc6, 0x30, 0xa3, 0x30, 0xc8, + 0x30, 0x09, 0xe1, 0x30, 0xac, 0x30, 0xd3, 0x30, + 0xc8, 0x30, 0x09, 0xdf, 0x30, 0xa2, 0x30, 0xb8, + 0x30, 0xa2, 0x30, 0x09, 0xb2, 0x30, 0xf3, 0x30, + 0xdc, 0x30, 0xc8, 0x30, 0x05, 0xbb, 0x30, 0xcd, + 0x30, 0x07, 0xcf, 0x30, 0xe0, 0x30, 0xec, 0x30, + 0x09, 0xcd, 0x30, 0xcf, 0x30, 0xc3, 0x30, 0xbb, + 0x30, 0x09, 0xd1, 0x30, 0xb0, 0x30, 0xe1, 0x30, + 0xf3, 0x30, 0x06, 0x4d, 0x30, 0x31, 0x06, 0x4d, + 0x30, 0x32, 0x06, 0x4d, 0x30, 0x33, 0x06, 0x4d, + 0x30, 0x34, 0x06, 0x4d, 0x30, 0x35, 0x06, 0x4d, + 0x30, 0x36, 0x06, 0x4d, 0x30, 0x37, 0x06, 0x4d, + 0x30, 0x38, 0x06, 0x4d, 0x30, 0x39, 0x06, 0x4d, + 0x31, 0x30, 0x06, 0x4d, 0x31, 0x31, 0x06, 0x4d, + 0x31, 0x32, 0x04, 0x42, 0x43, 0x04, 0x41, 0x44, + 0x06, 0x42, 0x43, 0x45, 0x04, 0x43, 0x45, 0x07, + 0x00, 0x7d, 0x43, 0x51, 0x4d, 0x52, 0x05, 0x7f, + 0x89, 0xa6, 0x66, 0x0b, 0x7f, 0x89, 0xa6, 0x66, + 0x00, 0x7d, 0x43, 0x51, 0x4d, 0x52, 0x09, 0x7f, + 0x89, 0xa6, 0x66, 0x00, 0x7d, 0x43, 0x51, 0x09, + 0xc6, 0x30, 0xa3, 0x30, 0xb9, 0x30, 0xec, 0x30, + 0x09, 0x78, 0x30, 0xb7, 0x30, 0xdc, 0x30, 0xf3, + 0x30, 0x09, 0xad, 0x30, 0xb9, 0x30, 0xec, 0x30, + 0xd6, 0x30, 0x09, 0xc6, 0x30, 0xd9, 0x30, 0xc3, + 0x30, 0xc8, 0x30, 0x09, 0xb7, 0x30, 0xd0, 0x30, + 0xc3, 0x30, 0xc8, 0x30, 0x0b, 0xa2, 0x30, 0xc0, + 0x30, 0xeb, 0x30, 0x20, 0x00, 0x49, 0x00, 0x07, + 0xa2, 0x30, 0xc0, 0x30, 0xeb, 0x30, 0x07, 0xcb, + 0x30, 0xb5, 0x30, 0xf3, 0x30, 0x07, 0xa4, 0x30, + 0xe4, 0x30, 0xeb, 0x30, 0x07, 0xb7, 0x30, 0xd0, + 0x30, 0xf3, 0x30, 0x07, 0xbf, 0x30, 0xe0, 0x30, + 0xba, 0x30, 0x05, 0xa2, 0x30, 0xf4, 0x30, 0x07, + 0xa8, 0x30, 0xeb, 0x30, 0xeb, 0x30, 0x0d, 0xa2, + 0x30, 0xc0, 0x30, 0xeb, 0x30, 0x20, 0x00, 0x49, + 0x00, 0x49, 0x00, 0x04, 0x41, 0x4d, 0x09, 0xab, + 0x30, 0xa4, 0x30, 0xc8, 0x30, 0xe9, 0x30, 0x0b, + 0xf4, 0x30, 0xa1, 0x30, 0xa4, 0x30, 0xb5, 0x30, + 0xab, 0x30, 0x0b, 0xb8, 0x30, 0xe3, 0x30, 0xa4, + 0x30, 0xb9, 0x30, 0xbf, 0x30, 0x09, 0xa2, 0x30, + 0xfc, 0x30, 0xb5, 0x30, 0xc0, 0x30, 0x09, 0xb9, + 0x30, 0xe9, 0x30, 0xd0, 0x30, 0xca, 0x30, 0x09, + 0xd0, 0x30, 0xfc, 0x30, 0xc9, 0x30, 0xe9, 0x30, + 0x09, 0xa2, 0x30, 0xb9, 0x30, 0xd3, 0x30, 0xca, + 0x30, 0x0b, 0xab, 0x30, 0xeb, 0x30, 0xc7, 0x30, + 0xa3, 0x30, 0xab, 0x30, 0x0d, 0xa2, 0x30, 0xf4, + 0x30, 0xe9, 0x30, 0xcf, 0x30, 0xe4, 0x30, 0xca, + 0x30, 0x07, 0xd1, 0x30, 0xa6, 0x30, 0xb5, 0x30, + 0x07, 0xde, 0x30, 0xfc, 0x30, 0xac, 0x30, 0x09, + 0xd1, 0x30, 0xeb, 0x30, 0xb0, 0x30, 0xca, 0x30, + 0x05, 0xb5, 0x30, 0xab, 0x30, 0x0b, 0xe0, 0x30, + 0xcf, 0x30, 0xc3, 0x30, 0xe9, 0x30, 0xe0, 0x30, + 0x09, 0xb5, 0x30, 0xd5, 0x30, 0xa2, 0x30, 0xeb, + 0x30, 0x17, 0xe9, 0x30, 0xd3, 0x30, 0xfc, 0x30, + 0xfb, 0x30, 0xa6, 0x30, 0xeb, 0x30, 0xfb, 0x30, + 0xa2, 0x30, 0xa6, 0x30, 0xef, 0x30, 0xeb, 0x30, + 0x17, 0xe9, 0x30, 0xd3, 0x30, 0xfc, 0x30, 0xfb, + 0x30, 0xa6, 0x30, 0xc3, 0x30, 0xfb, 0x30, 0xb5, + 0x30, 0xfc, 0x30, 0xcb, 0x30, 0xfc, 0x30, 0x17, + 0xb8, 0x30, 0xe5, 0x30, 0xde, 0x30, 0xfc, 0x30, + 0xc0, 0x30, 0xeb, 0x30, 0xfb, 0x30, 0xa2, 0x30, + 0xa6, 0x30, 0xef, 0x30, 0xeb, 0x30, 0x15, 0xb8, + 0x30, 0xe5, 0x30, 0xde, 0x30, 0xfc, 0x30, 0xc0, + 0x30, 0xc3, 0x30, 0xb5, 0x30, 0xfc, 0x30, 0xcb, + 0x30, 0xfc, 0x30, 0x09, 0xe9, 0x30, 0xb8, 0x30, + 0xe3, 0x30, 0xd6, 0x30, 0x0d, 0xb7, 0x30, 0xe3, + 0x30, 0xa2, 0x30, 0xd0, 0x30, 0xfc, 0x30, 0xf3, + 0x30, 0x0b, 0xe9, 0x30, 0xde, 0x30, 0xc0, 0x30, + 0xfc, 0x30, 0xf3, 0x30, 0x0d, 0xb7, 0x30, 0xe3, + 0x30, 0xa6, 0x30, 0xef, 0x30, 0xfc, 0x30, 0xeb, + 0x30, 0x0d, 0xba, 0x30, 0xeb, 0x30, 0xfb, 0x30, + 0xab, 0x30, 0xa4, 0x30, 0xc0, 0x30, 0x0f, 0xba, + 0x30, 0xeb, 0x30, 0xfb, 0x30, 0xd2, 0x30, 0xc3, + 0x30, 0xb8, 0x30, 0xe3, 0x30, 0x04, 0x41, 0x48, + 0x05, 0x27, 0x59, 0x16, 0x53, 0x05, 0x7d, 0x76, + 0xc9, 0x96, 0x05, 0x7d, 0x76, 0xef, 0x9c, 0x05, + 0x31, 0x67, 0xe5, 0x9c, 0x05, 0x27, 0x59, 0x9d, + 0x5b, 0x05, 0x76, 0x61, 0xf2, 0x96, 0x05, 0x8c, + 0x54, 0x85, 0x92, 0x05, 0x0a, 0x97, 0x80, 0x4e, + 0x05, 0x0a, 0x99, 0x01, 0x80, 0x05, 0x5e, 0x79, + 0x80, 0x4e, 0x05, 0x29, 0x59, 0x73, 0x5e, 0x09, + 0x29, 0x59, 0x73, 0x5e, 0x1f, 0x61, 0x9d, 0x5b, + 0x09, 0x29, 0x59, 0x73, 0x5e, 0xdd, 0x52, 0x9d, + 0x5b, 0x09, 0x29, 0x59, 0x73, 0x5e, 0x9d, 0x5b, + 0x57, 0x5b, 0x09, 0x29, 0x59, 0x73, 0x5e, 0x5e, + 0x79, 0x77, 0x8b, 0x09, 0x5e, 0x79, 0x77, 0x8b, + 0x6f, 0x66, 0xf2, 0x96, 0x05, 0x9d, 0x5b, 0x80, + 0x4e, 0x05, 0x29, 0x59, 0xdc, 0x5f, 0x05, 0xf6, + 0x5e, 0xa6, 0x66, 0x05, 0x27, 0x59, 0x0c, 0x54, + 0x05, 0x18, 0x5f, 0xc1, 0x4e, 0x05, 0x29, 0x59, + 0x77, 0x95, 0x05, 0x7f, 0x62, 0x8c, 0x54, 0x05, + 0x09, 0x56, 0x65, 0x79, 0x05, 0xc1, 0x4e, 0xff, + 0x5b, 0x05, 0x89, 0x65, 0x61, 0x88, 0x05, 0x29, + 0x59, 0x89, 0x5b, 0x05, 0x9e, 0x8c, 0xb3, 0x89, + 0x05, 0x43, 0x51, 0x76, 0x61, 0x05, 0xc1, 0x4e, + 0x8c, 0x54, 0x05, 0xdb, 0x5b, 0x73, 0x5e, 0x05, + 0x0c, 0x66, 0xf0, 0x6c, 0x05, 0xf6, 0x5e, 0x9c, + 0x55, 0x05, 0xf6, 0x5e, 0x77, 0x95, 0x05, 0x7f, + 0x62, 0x73, 0x5e, 0x05, 0x29, 0x59, 0x76, 0x61, + 0x05, 0x29, 0x59, 0xa6, 0x66, 0x05, 0x29, 0x59, + 0xb3, 0x5f, 0x05, 0xdc, 0x5f, 0x8c, 0x54, 0x05, + 0xb7, 0x5e, 0xdd, 0x4f, 0x05, 0x89, 0x5b, 0x8c, + 0x54, 0x05, 0x29, 0x59, 0x84, 0x79, 0x05, 0x29, + 0x59, 0xf6, 0x5e, 0x05, 0x9e, 0x8c, 0x43, 0x51, + 0x05, 0x29, 0x59, 0x43, 0x51, 0x05, 0x38, 0x6c, + 0xb3, 0x89, 0x05, 0xdb, 0x5b, 0x8c, 0x54, 0x05, + 0x38, 0x6c, 0xf6, 0x5e, 0x05, 0x38, 0x6c, 0x5a, + 0x79, 0x05, 0x63, 0x6b, 0xa6, 0x66, 0x05, 0x77, + 0x95, 0xb3, 0x5f, 0x05, 0x77, 0x95, 0xdd, 0x4f, + 0x05, 0xdb, 0x5b, 0x18, 0x5f, 0x05, 0x77, 0x95, + 0x8c, 0x54, 0x05, 0xdb, 0x5b, 0xc1, 0x4e, 0x05, + 0xbb, 0x6c, 0x89, 0x5b, 0x05, 0x07, 0x4e, 0xff, + 0x5b, 0x05, 0x77, 0x95, 0x43, 0x51, 0x05, 0x77, + 0x95, 0xa6, 0x66, 0x05, 0x77, 0x95, 0x45, 0x4e, + 0x05, 0xdb, 0x5b, 0xb3, 0x5f, 0x05, 0x38, 0x6c, + 0x7f, 0x62, 0x05, 0x29, 0x59, 0x9c, 0x55, 0x05, + 0xb7, 0x5e, 0x73, 0x5e, 0x05, 0xbb, 0x6c, 0xa6, + 0x66, 0x05, 0xf6, 0x5e, 0x45, 0x4e, 0x05, 0x7f, + 0x62, 0xdd, 0x4f, 0x05, 0x7f, 0x62, 0xa6, 0x66, + 0x05, 0x38, 0x6c, 0xdd, 0x4f, 0x05, 0xdc, 0x5f, + 0xb3, 0x5f, 0x05, 0xdb, 0x5b, 0xbb, 0x6c, 0x05, + 0x09, 0x56, 0xdd, 0x4f, 0x05, 0x38, 0x6c, 0x77, + 0x95, 0x05, 0x7f, 0x62, 0xb3, 0x5f, 0x05, 0xb7, + 0x5e, 0x8c, 0x54, 0x05, 0x77, 0x95, 0xbb, 0x6c, + 0x05, 0x09, 0x56, 0x7f, 0x62, 0x05, 0x29, 0x59, + 0xc1, 0x4e, 0x05, 0x29, 0x59, 0x38, 0x6c, 0x05, + 0x38, 0x6c, 0x45, 0x4e, 0x05, 0x43, 0x51, 0x38, + 0x6c, 0x05, 0xdd, 0x4f, 0x89, 0x5b, 0x05, 0x29, + 0x59, 0xbb, 0x6c, 0x05, 0x27, 0x59, 0xbb, 0x6c, + 0x05, 0x29, 0x59, 0x7f, 0x62, 0x05, 0x77, 0x95, + 0x7f, 0x62, 0x05, 0xdd, 0x4f, 0xf6, 0x5e, 0x05, + 0x38, 0x6c, 0xbb, 0x6c, 0x05, 0xb7, 0x5e, 0xbb, + 0x6c, 0x05, 0x29, 0x59, 0x0a, 0x99, 0x05, 0x45, + 0x4e, 0x89, 0x5b, 0x05, 0xc1, 0x4e, 0x73, 0x5e, + 0x05, 0x45, 0x4e, 0xff, 0x5b, 0x05, 0xdd, 0x4f, + 0x43, 0x51, 0x05, 0x73, 0x5e, 0xbb, 0x6c, 0x05, + 0x38, 0x6c, 0xa6, 0x66, 0x05, 0xdc, 0x5f, 0xdd, + 0x4f, 0x05, 0x77, 0x95, 0xdb, 0x5b, 0x05, 0x38, + 0x6c, 0x07, 0x4e, 0x05, 0xc1, 0x4e, 0x89, 0x5b, + 0x05, 0x09, 0x56, 0xdc, 0x5f, 0x05, 0x7f, 0x62, + 0x89, 0x5b, 0x05, 0x89, 0x5b, 0x43, 0x51, 0x05, + 0xbb, 0x6c, 0x7f, 0x62, 0x05, 0x0a, 0x99, 0x8c, + 0x54, 0x05, 0xff, 0x5b, 0x38, 0x6c, 0x05, 0x43, + 0x51, 0xa6, 0x66, 0x05, 0x87, 0x65, 0xbb, 0x6c, + 0x05, 0xfa, 0x5e, 0x45, 0x4e, 0x05, 0x63, 0x6b, + 0xbb, 0x6c, 0x05, 0xfa, 0x5e, 0xc1, 0x4e, 0x05, + 0x43, 0x51, 0x45, 0x4e, 0x05, 0xfa, 0x5e, 0x38, + 0x6c, 0x05, 0x7f, 0x62, 0x43, 0x51, 0x05, 0xfa, + 0x5e, 0xa6, 0x66, 0x05, 0xfa, 0x5e, 0xdd, 0x4f, + 0x05, 0x7f, 0x62, 0x45, 0x4e, 0x05, 0x9e, 0x8c, + 0xdc, 0x5f, 0x05, 0x43, 0x51, 0xc1, 0x4e, 0x05, + 0x09, 0x56, 0x84, 0x79, 0x05, 0x89, 0x5b, 0x9e, + 0x8c, 0x05, 0xdb, 0x5b, 0x9c, 0x55, 0x05, 0x9e, + 0x8c, 0x38, 0x6c, 0x05, 0x29, 0x59, 0x8f, 0x79, + 0x05, 0x87, 0x65, 0xa6, 0x66, 0x05, 0x09, 0x56, + 0x8e, 0x79, 0x05, 0xa6, 0x66, 0xc1, 0x4e, 0x05, + 0xf6, 0x5e, 0xdc, 0x5f, 0x05, 0xc1, 0x4e, 0xbb, + 0x6c, 0x05, 0xdb, 0x5b, 0x43, 0x51, 0x05, 0x9d, + 0x5b, 0xbb, 0x6c, 0x05, 0xfa, 0x5e, 0x77, 0x95, + 0x05, 0xb7, 0x5e, 0x43, 0x51, 0x05, 0x63, 0x6b, + 0x09, 0x56, 0x05, 0x63, 0x6b, 0x43, 0x51, 0x05, + 0x87, 0x65, 0xdc, 0x5f, 0x05, 0x18, 0x5f, 0x77, + 0x95, 0x05, 0x87, 0x65, 0x38, 0x6c, 0x05, 0xfa, + 0x5e, 0xbb, 0x6c, 0x05, 0x18, 0x5f, 0x89, 0x5b, + 0x05, 0x63, 0x6b, 0xdc, 0x5f, 0x05, 0x38, 0x6c, + 0xc1, 0x4e, 0x05, 0x63, 0x6b, 0x89, 0x5b, 0x05, + 0x7e, 0x4e, 0x43, 0x51, 0x05, 0x09, 0x56, 0x43, + 0x51, 0x05, 0xb3, 0x5f, 0xbb, 0x6c, 0x05, 0xf6, + 0x5e, 0x76, 0x61, 0x05, 0xdc, 0x5f, 0x77, 0x95, + 0x05, 0x63, 0x6b, 0x8c, 0x54, 0x05, 0x87, 0x65, + 0xdd, 0x4f, 0x05, 0x43, 0x51, 0xdc, 0x5f, 0x05, + 0x43, 0x51, 0xa8, 0x4e, 0x05, 0x63, 0x6b, 0x2d, + 0x4e, 0x05, 0x09, 0x56, 0xa6, 0x66, 0x05, 0x43, + 0x51, 0xb3, 0x5f, 0x05, 0x43, 0x51, 0x18, 0x5f, + 0x05, 0xfa, 0x5e, 0x66, 0x6b, 0x05, 0xf6, 0x5e, + 0x43, 0x51, 0x05, 0x08, 0x82, 0xfd, 0x56, 0x05, + 0x63, 0x6b, 0x73, 0x5e, 0x05, 0xfa, 0x5e, 0xb3, + 0x5f, 0x05, 0x87, 0x65, 0x2d, 0x4e, 0x05, 0x29, + 0x59, 0x88, 0x63, 0x05, 0xb7, 0x5e, 0xa6, 0x66, + 0x05, 0x18, 0x5f, 0x8c, 0x54, 0x05, 0x43, 0x51, + 0x2d, 0x4e, 0x05, 0xf3, 0x81, 0xb3, 0x5f, 0x05, + 0x09, 0x56, 0x76, 0x61, 0x05, 0xb7, 0x5e, 0xdc, + 0x5f, 0x05, 0x0e, 0x66, 0xb3, 0x5f, 0x05, 0xdc, + 0x5f, 0x38, 0x6c, 0x05, 0x63, 0x6b, 0x77, 0x95, + 0x05, 0x38, 0x6c, 0xab, 0x4e, 0x05, 0x09, 0x56, + 0x09, 0x54, 0x05, 0x87, 0x65, 0x89, 0x5b, 0x05, + 0x9d, 0x5b, 0xb3, 0x5f, 0x05, 0xab, 0x4e, 0xb3, + 0x5f, 0x05, 0xb7, 0x5e, 0x63, 0x6b, 0x05, 0x77, + 0x95, 0x84, 0x79, 0x05, 0xdb, 0x5b, 0x63, 0x6b, + 0x05, 0x87, 0x65, 0x63, 0x6b, 0x05, 0xdc, 0x5f, + 0xc1, 0x4e, 0x05, 0x87, 0x65, 0x0e, 0x66, 0x05, + 0x77, 0x95, 0xab, 0x4e, 0x05, 0xf6, 0x5e, 0xb3, + 0x5f, 0x05, 0x0e, 0x66, 0xdc, 0x5f, 0x05, 0x87, + 0x65, 0x80, 0x4e, 0x05, 0x38, 0x6c, 0x63, 0x6b, + 0x05, 0x27, 0x59, 0x38, 0x6c, 0x05, 0xab, 0x4e, + 0x84, 0x79, 0x05, 0x29, 0x59, 0x87, 0x65, 0x05, + 0x18, 0x5f, 0xbb, 0x6c, 0x05, 0x38, 0x6c, 0x84, + 0x79, 0x05, 0x43, 0x51, 0x80, 0x4e, 0x05, 0x29, + 0x59, 0x63, 0x6b, 0x05, 0x87, 0x65, 0x84, 0x79, + 0x05, 0x76, 0x61, 0x77, 0x95, 0x05, 0x43, 0x51, + 0x8c, 0x54, 0x05, 0xdb, 0x5b, 0x38, 0x6c, 0x05, + 0x63, 0x6b, 0xdd, 0x4f, 0x05, 0x76, 0x61, 0x89, + 0x5b, 0x05, 0x7f, 0x62, 0xdc, 0x5f, 0x05, 0x0e, + 0x66, 0xa6, 0x66, 0x05, 0x07, 0x4e, 0xbb, 0x6c, + 0x05, 0xdb, 0x5b, 0x87, 0x65, 0x05, 0xf6, 0x5e, + 0x9d, 0x5b, 0x05, 0x29, 0x59, 0x8c, 0x54, 0x05, + 0x9e, 0x8c, 0xab, 0x4e, 0x05, 0x43, 0x51, 0x84, + 0x79, 0x05, 0x9d, 0x5b, 0x38, 0x6c, 0x05, 0x63, + 0x6b, 0xb3, 0x5f, 0x05, 0xab, 0x4e, 0xdd, 0x4f, + 0x05, 0x43, 0x51, 0x87, 0x65, 0x05, 0xdb, 0x5b, + 0xdd, 0x4f, 0x05, 0xf6, 0x5e, 0xab, 0x4e, 0x05, + 0xdb, 0x5b, 0xf6, 0x5e, 0x05, 0x9d, 0x5b, 0xa6, + 0x66, 0x05, 0x0e, 0x66, 0x8c, 0x54, 0x05, 0x89, + 0x5b, 0x38, 0x6c, 0x05, 0x29, 0x59, 0x0e, 0x66, + 0x05, 0xdb, 0x5b, 0x3f, 0x65, 0x05, 0xab, 0x4e, + 0x8c, 0x54, 0x05, 0x87, 0x65, 0x16, 0x53, 0x05, + 0x87, 0x65, 0x3f, 0x65, 0x05, 0x29, 0x59, 0xdd, + 0x4f, 0x05, 0x18, 0x5f, 0x16, 0x53, 0x05, 0x09, + 0x56, 0x38, 0x6c, 0x05, 0x89, 0x5b, 0x3f, 0x65, + 0x05, 0x07, 0x4e, 0xf6, 0x5e, 0x05, 0x87, 0x65, + 0x45, 0x4e, 0x05, 0x43, 0x51, 0xbb, 0x6c, 0x05, + 0x76, 0x61, 0xdc, 0x5f, 0x02, 0x54, 0x02, 0x53, + 0x05, 0x0e, 0x66, 0xbb, 0x6c, 0x05, 0x27, 0x59, + 0x63, 0x6b, 0x05, 0x2d, 0x66, 0x8c, 0x54, 0x05, + 0x73, 0x5e, 0x10, 0x62, 0x15, 0xd5, 0x30, 0xa1, + 0x30, 0xeb, 0x30, 0xf4, 0x30, 0xa1, 0x30, 0xeb, + 0x30, 0xc7, 0x30, 0xa3, 0x30, 0xfc, 0x30, 0xf3, + 0x30, 0x15, 0xaa, 0x30, 0xeb, 0x30, 0xc7, 0x30, + 0xa3, 0x30, 0xfc, 0x30, 0xd9, 0x30, 0xd8, 0x30, + 0xb7, 0x30, 0xe5, 0x30, 0xc8, 0x30, 0x0b, 0xdb, + 0x30, 0xeb, 0x30, 0xc0, 0x30, 0xfc, 0x30, 0xc9, + 0x30, 0x09, 0xc6, 0x30, 0xa3, 0x30, 0xfc, 0x30, + 0xeb, 0x30, 0x0b, 0xe2, 0x30, 0xeb, 0x30, 0xc0, + 0x30, 0xfc, 0x30, 0xc9, 0x30, 0x11, 0xb7, 0x30, + 0xe3, 0x30, 0xcf, 0x30, 0xea, 0x30, 0xfc, 0x30, + 0xf4, 0x30, 0xa1, 0x30, 0xeb, 0x30, 0x07, 0xe1, + 0x30, 0xd5, 0x30, 0xeb, 0x30, 0x0b, 0xa2, 0x30, + 0xfc, 0x30, 0xd0, 0x30, 0xfc, 0x30, 0xf3, 0x30, + 0x09, 0xa2, 0x30, 0xfc, 0x30, 0xb6, 0x30, 0xeb, + 0x30, 0x05, 0xc7, 0x30, 0xa4, 0x30, 0x09, 0xd0, + 0x30, 0xd5, 0x30, 0xde, 0x30, 0xf3, 0x30, 0x0d, + 0xa8, 0x30, 0xb9, 0x30, 0xd5, 0x30, 0xa1, 0x30, + 0xf3, 0x30, 0xc9, 0x30, 0x04, 0x41, 0x50, 0x07, + 0x11, 0x6c, 0xfd, 0x56, 0x4d, 0x52, 0x05, 0x11, + 0x6c, 0xfd, 0x56, 0x12, 0x63, 0x61, 0x6c, 0x65, + 0x6e, 0x64, 0x61, 0x72, 0x73, 0x08, 0x64, 0x61, + 0x74, 0x65, 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, + 0x6e, 0x75, 0x10, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0x1e, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, + 0x65, 0x72, 0x6e, 0x26, 0x7b, 0x6d, 0x69, 0x6e, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, + 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x0e, + 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x24, + 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, + 0x79, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0x3a, 0x7b, 0x6d, 0x69, 0x6e, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, + 0x79, 0x2a, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, + 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x40, + 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, + 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0x7b, 0x70, 0x65, 0x72, 0x63, + 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, + 0x0e, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, + 0x10, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, + 0x73, 0x02, 0x2e, 0x02, 0x2c, 0x0a, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x06, 0x4e, 0x61, 0x4e, 0x06, + 0x6e, 0x61, 0x6e, 0x02, 0x2b, 0x10, 0x70, 0x6c, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, 0x2d, + 0x12, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, + 0x67, 0x6e, 0x02, 0x25, 0x16, 0x70, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, + 0x03, 0x1e, 0x22, 0x10, 0x69, 0x6e, 0x66, 0x69, + 0x6e, 0x69, 0x74, 0x79, 0x0e, 0x73, 0x79, 0x6d, + 0x62, 0x6f, 0x6c, 0x73, 0x06, 0x41, 0x55, 0x24, + 0x06, 0x41, 0x55, 0x44, 0x04, 0x52, 0x24, 0x06, + 0x42, 0x52, 0x4c, 0x06, 0x43, 0x41, 0x24, 0x06, + 0x43, 0x41, 0x44, 0x03, 0x43, 0x51, 0x06, 0x43, + 0x4e, 0x59, 0x03, 0xac, 0x20, 0x06, 0x45, 0x55, + 0x52, 0x02, 0xa3, 0x06, 0x47, 0x42, 0x50, 0x06, + 0x48, 0x4b, 0x24, 0x06, 0x48, 0x4b, 0x44, 0x03, + 0xaa, 0x20, 0x06, 0x49, 0x4c, 0x53, 0x03, 0xb9, + 0x20, 0x06, 0x49, 0x4e, 0x52, 0x03, 0xe5, 0xff, + 0x06, 0x4a, 0x50, 0x59, 0x03, 0xa9, 0x20, 0x06, + 0x4b, 0x52, 0x57, 0x06, 0x4d, 0x58, 0x24, 0x06, + 0x4d, 0x58, 0x4e, 0x06, 0x4e, 0x5a, 0x24, 0x06, + 0x4e, 0x5a, 0x44, 0x03, 0x3f, 0x0e, 0x06, 0x54, + 0x48, 0x42, 0x06, 0x4e, 0x54, 0x24, 0x06, 0x54, + 0x57, 0x44, 0x02, 0x24, 0x06, 0x55, 0x53, 0x44, + 0x03, 0xab, 0x20, 0x06, 0x56, 0x4e, 0x44, 0x08, + 0x46, 0x43, 0x46, 0x41, 0x06, 0x58, 0x41, 0x46, + 0x06, 0x45, 0x43, 0x24, 0x06, 0x58, 0x43, 0x44, + 0x06, 0x43, 0x46, 0x41, 0x06, 0x58, 0x4f, 0x46, + 0x08, 0x43, 0x46, 0x50, 0x46, 0x06, 0x58, 0x50, + 0x46, 0x14, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x69, 0x65, 0x73, 0x52, 0x6e, 0x6f, 0x64, + 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, + 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2f, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, + 0x74, 0x61, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x70, + 0x2f, 0x6a, 0x61, 0x2e, 0x6a, 0x73, 0x0d, 0x00, + 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, 0x27, + 0x00, 0xa1, 0x01, 0xdc, 0x6a, 0x01, 0xa0, 0x01, + 0x00, 0x00, 0x00, 0x39, 0xd0, 0x00, 0x00, 0x00, + 0x43, 0xd1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd2, + 0x00, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xd4, 0x00, 0x00, 0x00, 0x04, 0xd5, + 0x00, 0x00, 0x00, 0x04, 0xd6, 0x00, 0x00, 0x00, + 0x04, 0xd7, 0x00, 0x00, 0x00, 0x04, 0xd8, 0x00, + 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x04, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xdb, 0x00, 0x00, + 0x00, 0x04, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xdd, + 0x00, 0x00, 0x00, 0x04, 0xde, 0x00, 0x00, 0x00, + 0x04, 0xdf, 0x00, 0x00, 0x00, 0x04, 0xe0, 0x00, + 0x00, 0x00, 0x04, 0xe1, 0x00, 0x00, 0x00, 0x04, + 0xe2, 0x00, 0x00, 0x00, 0x26, 0x0f, 0x00, 0x4d, + 0xe3, 0x00, 0x00, 0x00, 0x09, 0x4d, 0xe4, 0x00, + 0x00, 0x00, 0x09, 0x4d, 0xe5, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x00, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0xec, 0x00, 0x00, 0x00, 0x04, 0xed, 0x00, 0x00, + 0x00, 0x4d, 0xee, 0x00, 0x00, 0x00, 0x04, 0xef, + 0x00, 0x00, 0x00, 0x4d, 0xf0, 0x00, 0x00, 0x00, + 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, 0xf2, 0x00, + 0x00, 0x00, 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, + 0xf4, 0x00, 0x00, 0x00, 0x04, 0xf5, 0x00, 0x00, + 0x00, 0x4d, 0xf6, 0x00, 0x00, 0x00, 0x04, 0xf7, + 0x00, 0x00, 0x00, 0x4d, 0xf8, 0x00, 0x00, 0x00, + 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0xfa, 0x00, + 0x00, 0x00, 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, + 0xfc, 0x00, 0x00, 0x00, 0x04, 0xfd, 0x00, 0x00, + 0x00, 0x4d, 0xfe, 0x00, 0x00, 0x00, 0x04, 0xff, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x01, 0x00, 0x00, + 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0x02, 0x01, + 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, + 0x04, 0x01, 0x00, 0x00, 0x04, 0x05, 0x01, 0x00, + 0x00, 0x4d, 0x06, 0x01, 0x00, 0x00, 0x04, 0x07, + 0x01, 0x00, 0x00, 0x4d, 0x08, 0x01, 0x00, 0x00, + 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0x0a, 0x01, + 0x00, 0x00, 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, + 0x0c, 0x01, 0x00, 0x00, 0x04, 0x0d, 0x01, 0x00, + 0x00, 0x4d, 0x0e, 0x01, 0x00, 0x00, 0x04, 0x0f, + 0x01, 0x00, 0x00, 0x4d, 0x10, 0x01, 0x00, 0x00, + 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, 0x12, 0x01, + 0x00, 0x00, 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, + 0x14, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x4d, 0x16, 0x01, 0x00, 0x00, 0x04, 0x17, + 0x01, 0x00, 0x00, 0x4d, 0x18, 0x01, 0x00, 0x00, + 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, 0x1a, 0x01, + 0x00, 0x00, 0x04, 0x1b, 0x01, 0x00, 0x00, 0x4d, + 0x1c, 0x01, 0x00, 0x00, 0x04, 0x1d, 0x01, 0x00, + 0x00, 0x4d, 0x1e, 0x01, 0x00, 0x00, 0x04, 0x1f, + 0x01, 0x00, 0x00, 0x4d, 0x20, 0x01, 0x00, 0x00, + 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, 0x21, 0x01, + 0x00, 0x00, 0x04, 0x22, 0x01, 0x00, 0x00, 0x4d, + 0x23, 0x01, 0x00, 0x00, 0x04, 0x24, 0x01, 0x00, + 0x00, 0x4d, 0x25, 0x01, 0x00, 0x00, 0x04, 0x26, + 0x01, 0x00, 0x00, 0x4d, 0x27, 0x01, 0x00, 0x00, + 0x04, 0x22, 0x01, 0x00, 0x00, 0x4d, 0x28, 0x01, + 0x00, 0x00, 0x04, 0x29, 0x01, 0x00, 0x00, 0x4d, + 0x2a, 0x01, 0x00, 0x00, 0x04, 0x2b, 0x01, 0x00, + 0x00, 0x4d, 0x2c, 0x01, 0x00, 0x00, 0x04, 0x2d, + 0x01, 0x00, 0x00, 0x4d, 0x2e, 0x01, 0x00, 0x00, + 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, 0x30, 0x01, + 0x00, 0x00, 0x04, 0x31, 0x01, 0x00, 0x00, 0x4d, + 0x32, 0x01, 0x00, 0x00, 0x04, 0x33, 0x01, 0x00, + 0x00, 0x4d, 0x34, 0x01, 0x00, 0x00, 0x04, 0x35, + 0x01, 0x00, 0x00, 0x4d, 0x36, 0x01, 0x00, 0x00, + 0x04, 0x37, 0x01, 0x00, 0x00, 0x4d, 0x38, 0x01, + 0x00, 0x00, 0x04, 0x39, 0x01, 0x00, 0x00, 0x4d, + 0x3a, 0x01, 0x00, 0x00, 0x04, 0x3b, 0x01, 0x00, + 0x00, 0x4d, 0x3c, 0x01, 0x00, 0x00, 0x04, 0x3d, + 0x01, 0x00, 0x00, 0x4d, 0x3e, 0x01, 0x00, 0x00, + 0x04, 0x37, 0x01, 0x00, 0x00, 0x4d, 0x3f, 0x01, + 0x00, 0x00, 0x04, 0x40, 0x01, 0x00, 0x00, 0x4d, + 0x41, 0x01, 0x00, 0x00, 0x04, 0x42, 0x01, 0x00, + 0x00, 0x4d, 0x42, 0x01, 0x00, 0x00, 0x4d, 0x43, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x3d, 0x01, 0x00, + 0x00, 0x4d, 0x44, 0x01, 0x00, 0x00, 0x04, 0x39, + 0x01, 0x00, 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, + 0x04, 0x46, 0x01, 0x00, 0x00, 0x4d, 0x3a, 0x01, + 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x4d, + 0x30, 0x01, 0x00, 0x00, 0x4d, 0x47, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x48, 0x01, 0x00, 0x00, 0x4d, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x0f, + 0x01, 0x00, 0x00, 0x4d, 0x0e, 0x01, 0x00, 0x00, + 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, 0x0a, 0x01, + 0x00, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x4d, + 0x4d, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x0b, 0xbe, + 0x00, 0xbe, 0x01, 0xbe, 0x02, 0xbe, 0x03, 0xbe, + 0x04, 0xbe, 0x05, 0xbe, 0x06, 0xbe, 0x07, 0xbe, + 0x08, 0xbe, 0x09, 0xbe, 0x0a, 0xbe, 0x0b, 0x26, + 0x0c, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x5b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6a, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x6d, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x4d, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x4d, 0x71, 0x01, 0x00, 0x00, 0x4d, 0x72, 0x01, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, + 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, + 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, + 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x5b, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6a, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x4d, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x4d, 0x71, 0x01, 0x00, 0x00, 0x4d, 0x72, + 0x01, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x0c, 0xbe, 0x0d, 0xbe, 0x0e, + 0xbe, 0x0f, 0xbe, 0x10, 0xbe, 0x11, 0xbe, 0x12, + 0xbe, 0x13, 0xbe, 0x14, 0xbe, 0x15, 0xbe, 0x16, + 0xbe, 0x17, 0xbe, 0x18, 0x26, 0x0d, 0x00, 0x4d, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, + 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, + 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, + 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, + 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, + 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, + 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, + 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, + 0x04, 0x97, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x8b, 0x01, + 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, + 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, + 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, + 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, + 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, + 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, + 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, + 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x26, 0x0d, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x5b, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6a, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x98, 0x01, 0x00, 0x00, + 0x04, 0x99, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, + 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x6d, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x4d, 0x71, + 0x01, 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, + 0x4d, 0xd7, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, + 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, + 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, + 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, + 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, + 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, + 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x5b, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x6a, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x4d, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x4d, + 0x71, 0x01, 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x19, 0xbe, 0x1a, 0xbe, 0x1b, 0xbe, 0x1c, + 0xbe, 0x1d, 0xbe, 0x1e, 0xbe, 0x1f, 0xbe, 0x20, + 0xbe, 0x21, 0xbe, 0x22, 0xbe, 0x23, 0xbe, 0x24, + 0xbe, 0x25, 0x26, 0x0d, 0x00, 0x4d, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, + 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, + 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, + 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, + 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, + 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, + 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, + 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, + 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, + 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, + 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, + 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, + 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, + 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, + 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, + 0xa6, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x5b, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x6a, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, + 0x04, 0x99, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x98, 0x01, + 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x6d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x4d, 0x71, 0x01, 0x00, + 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x26, 0xbe, + 0x27, 0xbe, 0x28, 0xbe, 0x29, 0xbe, 0x2a, 0xbe, + 0x2b, 0xbe, 0x2c, 0xbe, 0x2d, 0xbe, 0x2e, 0xbe, + 0x2f, 0xbe, 0x30, 0xbe, 0x31, 0xbe, 0x32, 0x26, + 0x0d, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, + 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, + 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, + 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, + 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, + 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, + 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, + 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, + 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, + 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, + 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, + 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, + 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, + 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, + 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x5b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x6a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x98, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x98, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6d, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x4d, 0x71, 0x01, 0x00, 0x00, 0x4d, + 0x72, 0x01, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x33, 0xbe, 0x34, 0xbe, + 0x35, 0xbe, 0x36, 0xbe, 0x37, 0xbe, 0x38, 0xbe, + 0x39, 0xbe, 0x3a, 0xbe, 0x3b, 0xbe, 0x3c, 0xbe, + 0x3d, 0xbe, 0x3e, 0x26, 0x0c, 0x00, 0x4d, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, + 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, + 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, + 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, + 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, 0xae, + 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, + 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, + 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, + 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, + 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, + 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, + 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, + 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, + 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x5b, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x6a, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, + 0x99, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, + 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6d, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x4d, 0x71, 0x01, 0x00, 0x00, + 0x4d, 0x72, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x3f, 0xbe, 0x40, + 0xbe, 0x41, 0xbe, 0x42, 0xbe, 0x43, 0xbe, 0x44, + 0xbe, 0x45, 0xbe, 0x46, 0xbe, 0x47, 0xbe, 0x48, + 0xbe, 0x49, 0xbe, 0x4a, 0x26, 0x0c, 0x00, 0x4d, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, + 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x5b, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x6a, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, + 0x01, 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, + 0x04, 0xb6, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, + 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, + 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, 0x04, + 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, + 0x00, 0x26, 0x04, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, + 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, + 0x04, 0xba, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6d, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x4d, 0x71, 0x01, 0x00, 0x00, 0x4d, + 0x72, 0x01, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x4b, 0xbe, 0x4c, 0xbe, + 0x4d, 0xbe, 0x4e, 0xbe, 0x4f, 0xbe, 0x50, 0xbe, + 0x51, 0xbe, 0x52, 0xbe, 0x53, 0xbe, 0x54, 0xbe, + 0x55, 0xbe, 0x56, 0xbe, 0x57, 0xbe, 0x58, 0x26, + 0x0e, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, + 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, 0x04, 0xbe, + 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, + 0x04, 0xc0, 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, + 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, 0x00, 0x04, + 0xc3, 0x01, 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, + 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, + 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, + 0x04, 0xc8, 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xbb, 0x01, + 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, 0x04, + 0xbd, 0x01, 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, + 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, 0x04, 0xc0, + 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, + 0x04, 0xc2, 0x01, 0x00, 0x00, 0x04, 0xc3, 0x01, + 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, 0x04, + 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, + 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, + 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x5b, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x6a, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xc9, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x6d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x4d, 0x71, 0x01, 0x00, + 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x59, 0xbe, + 0x5a, 0xbe, 0x5b, 0xbe, 0x5c, 0xbe, 0x5d, 0xbe, + 0x5e, 0xbe, 0x5f, 0xbe, 0x60, 0xbe, 0x61, 0xbe, + 0x62, 0xbe, 0x63, 0xbe, 0x64, 0x26, 0x0c, 0x00, + 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0xca, 0x01, + 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, 0x04, + 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, + 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, 0x04, 0xcf, + 0x01, 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, + 0x04, 0xd1, 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, + 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, + 0xd4, 0x01, 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, 0x04, 0xcb, + 0x01, 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, + 0x04, 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, + 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, + 0xd0, 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, + 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, + 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, + 0x04, 0xd5, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x5b, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6a, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xd6, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0xd6, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x6d, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x4d, 0x71, + 0x01, 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x65, 0xbe, 0x66, 0xbe, 0x67, 0xbe, 0x68, 0xbe, + 0x69, 0xbe, 0x6a, 0xbe, 0x6b, 0xbe, 0x6c, 0xbe, + 0x6d, 0xbe, 0x6e, 0xbe, 0x6f, 0xbe, 0x70, 0x26, + 0x0c, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0xd7, 0x01, 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, + 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, + 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, + 0x04, 0xdc, 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, + 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, + 0xdf, 0x01, 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, + 0x00, 0x04, 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, + 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, + 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, + 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, + 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, + 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, + 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, + 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x5b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6a, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xe3, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe3, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x6d, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x4d, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x4d, 0x71, 0x01, 0x00, 0x00, 0x4d, 0x72, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x71, 0xbe, 0x72, 0xbe, 0x73, 0xbe, + 0x74, 0xbe, 0x75, 0xbe, 0x76, 0xbe, 0x77, 0xbe, + 0x78, 0xbe, 0x79, 0xbe, 0x7a, 0xbe, 0x7b, 0xbe, + 0x7c, 0x26, 0x0c, 0x00, 0x4d, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, 0xd8, + 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, + 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, + 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, 0x04, + 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, + 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, 0xe0, + 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, 0x00, + 0x04, 0xe2, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd7, 0x01, + 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, + 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, + 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, + 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, + 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, + 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, + 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x5b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x6a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xe3, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xe3, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6d, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x4d, 0x71, 0x01, 0x00, 0x00, 0x4d, + 0x72, 0x01, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x7d, 0xbe, 0x7e, 0xbe, + 0x7f, 0xbe, 0x80, 0xbe, 0x81, 0xbe, 0x82, 0xbe, + 0x83, 0xbe, 0x84, 0xbe, 0x85, 0xbe, 0x86, 0xbe, + 0x87, 0xbe, 0x88, 0x26, 0x0c, 0x00, 0x4d, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x5b, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x6a, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, + 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, + 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, + 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, + 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, + 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, + 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, + 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, + 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, + 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, + 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, + 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, + 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, + 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, + 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, + 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, 0x01, + 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x04, + 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, + 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, 0x04, 0x02, + 0x02, 0x00, 0x00, 0x04, 0x03, 0x02, 0x00, 0x00, + 0x26, 0x20, 0x00, 0x04, 0x04, 0x02, 0x00, 0x00, + 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0x05, 0x02, + 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, + 0x06, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, + 0x80, 0x04, 0x07, 0x02, 0x00, 0x00, 0x4d, 0x23, + 0x00, 0x00, 0x80, 0x04, 0x08, 0x02, 0x00, 0x00, + 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x09, 0x02, + 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, + 0x0a, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, + 0x80, 0x04, 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x27, + 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, 0x00, 0x00, + 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, + 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, + 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, + 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x2b, + 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, + 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, + 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, + 0x12, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, + 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, 0x4d, 0x2f, + 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, + 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, + 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, + 0x16, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, + 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, 0x4d, 0x33, + 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, + 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, + 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, + 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, + 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x37, + 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, + 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, + 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, + 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, + 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x3b, + 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, + 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, + 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, + 0x22, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, + 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, 0x3f, + 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, + 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, + 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, + 0x26, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, + 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, 0x43, + 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, + 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, + 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, + 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x47, + 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, + 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, + 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, + 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, + 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x4b, + 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, + 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, + 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, + 0x32, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, + 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, 0x4f, + 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, + 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, + 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, + 0x36, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, + 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, 0x53, + 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, + 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, + 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, + 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, + 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x57, + 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, + 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, + 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, + 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, + 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x5b, + 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, + 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, + 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, + 0x42, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, + 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, 0x5f, + 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, + 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, + 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, + 0x46, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, + 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, 0x63, + 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, + 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, + 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, + 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, + 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x67, + 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, + 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, + 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, + 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, + 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x6b, + 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, + 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, + 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, + 0x52, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, + 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, 0x6f, + 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, + 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, + 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, + 0x56, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, + 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, 0x73, + 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, + 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, + 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, + 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, + 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x77, + 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, + 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, + 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, + 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, + 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x7b, + 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, + 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, + 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, + 0x62, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, + 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, 0x7f, + 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, + 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, + 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, + 0x66, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, + 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, 0x83, + 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, + 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, + 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, + 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, + 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x87, + 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, + 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, + 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, + 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, + 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x8b, + 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, + 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, + 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, + 0x72, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, + 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, 0x8f, + 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, + 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, + 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, + 0x76, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, + 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, 0x93, + 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, + 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, + 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, + 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, + 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x97, + 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, + 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, + 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, + 0x7e, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, + 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, 0x9b, + 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, + 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, + 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, + 0x82, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, + 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, 0x9f, + 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, + 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, + 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, + 0x86, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, + 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, 0xa3, + 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, + 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, + 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, + 0x8a, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, + 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xa7, + 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, + 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, + 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, + 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, + 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xab, + 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, + 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, + 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, + 0x92, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, + 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, 0xaf, + 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, + 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, + 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, + 0x96, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, + 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, 0xb3, + 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, + 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, + 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, + 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, + 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xb7, + 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, + 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, + 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, + 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, + 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xbb, + 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, + 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, + 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, + 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, + 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xbf, + 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, + 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, + 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, + 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, + 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xc3, + 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, + 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, + 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, + 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, + 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, 0xc7, + 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, + 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, + 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, + 0xae, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, + 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xcb, + 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, + 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, + 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, + 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, + 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xcf, + 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, + 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, + 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, + 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, + 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, + 0xba, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, + 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, + 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, + 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, 0x00, 0x00, + 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xc9, 0x02, + 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, + 0xca, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x80, 0x04, 0x1a, 0x01, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, + 0xcd, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x80, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x80, 0x4d, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, + 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, + 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, + 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, + 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, + 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, + 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, + 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, + 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, + 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, + 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, + 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, + 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, + 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, + 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, + 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, 0x01, + 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x04, + 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, + 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, 0x04, 0x02, + 0x02, 0x00, 0x00, 0x04, 0x03, 0x02, 0x00, 0x00, + 0x26, 0x20, 0x00, 0x04, 0x04, 0x02, 0x00, 0x00, + 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0x05, 0x02, + 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, + 0x06, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, + 0x80, 0x04, 0x07, 0x02, 0x00, 0x00, 0x4d, 0x23, + 0x00, 0x00, 0x80, 0x04, 0x08, 0x02, 0x00, 0x00, + 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x09, 0x02, + 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, + 0x0a, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, + 0x80, 0x04, 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x27, + 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, 0x00, 0x00, + 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, + 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, + 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, + 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x2b, + 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, + 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, + 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, + 0x12, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, + 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, 0x4d, 0x2f, + 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, + 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, + 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, + 0x16, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, + 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, 0x4d, 0x33, + 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, + 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, + 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, + 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, + 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x37, + 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, + 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, + 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, + 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, + 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x3b, + 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, + 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, + 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, + 0x22, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, + 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, 0x3f, + 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, + 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, + 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, + 0x26, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, + 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, 0x43, + 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, + 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, + 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, + 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x47, + 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, + 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, + 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, + 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, + 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x4b, + 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, + 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, + 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, + 0x32, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, + 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, 0x4f, + 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, + 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, + 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, + 0x36, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, + 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, 0x53, + 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, + 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, + 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, + 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, + 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x57, + 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, + 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, + 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, + 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, + 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x5b, + 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, + 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, + 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, + 0x42, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, + 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, 0x5f, + 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, + 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, + 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, + 0x46, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, + 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, 0x63, + 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, + 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, + 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, + 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, + 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x67, + 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, + 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, + 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, + 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, + 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x6b, + 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, + 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, + 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, + 0x52, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, + 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, 0x6f, + 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, + 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, + 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, + 0x56, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, + 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, 0x73, + 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, + 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, + 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, + 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, + 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x77, + 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, + 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, + 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, + 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, + 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x7b, + 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, + 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, + 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, + 0x62, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, + 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, 0x7f, + 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, + 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, + 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, + 0x66, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, + 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, 0x83, + 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, + 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, + 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, + 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, + 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x87, + 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, + 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, + 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, + 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, + 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x8b, + 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, + 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, + 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, + 0x72, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, + 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, 0x8f, + 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, + 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, + 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, + 0x76, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, + 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, 0x93, + 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, + 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, + 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, + 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, + 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x97, + 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, + 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, + 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, + 0x7e, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, + 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, 0x9b, + 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, + 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, + 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, + 0x82, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, + 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, 0x9f, + 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, + 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, + 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, + 0x86, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, + 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, 0xa3, + 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, + 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, + 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, + 0x8a, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, + 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xa7, + 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, + 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, + 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, + 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, + 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xab, + 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, + 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, + 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, + 0x92, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, + 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, 0xaf, + 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, + 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, + 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, + 0x96, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, + 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, 0xb3, + 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, + 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, + 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, + 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, + 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xb7, + 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, + 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, + 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, + 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, + 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xbb, + 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, + 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, + 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, + 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, + 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xbf, + 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, + 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, + 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, + 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, + 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xc3, + 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, + 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, + 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, + 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, + 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, 0xc7, + 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, + 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, + 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, + 0xae, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, + 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xcb, + 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, + 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, + 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, + 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, + 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xcf, + 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, + 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, + 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, + 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, + 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, + 0xba, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, + 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, + 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, + 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, 0x00, 0x00, + 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xc9, 0x02, + 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, + 0xca, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x80, 0x04, 0xce, 0x02, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xcf, 0x02, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, + 0xd0, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x80, 0x04, 0xd1, 0x02, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x80, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, + 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, + 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, + 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, + 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, + 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, + 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, + 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, + 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, + 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, + 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, + 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, + 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, + 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, + 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, + 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, 0x01, + 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x04, + 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, + 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, 0x04, 0x02, + 0x02, 0x00, 0x00, 0x04, 0x03, 0x02, 0x00, 0x00, + 0x26, 0x20, 0x00, 0x04, 0x04, 0x02, 0x00, 0x00, + 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0x05, 0x02, + 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, + 0x06, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, + 0x80, 0x04, 0x07, 0x02, 0x00, 0x00, 0x4d, 0x23, + 0x00, 0x00, 0x80, 0x04, 0x08, 0x02, 0x00, 0x00, + 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x09, 0x02, + 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, + 0x0a, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, + 0x80, 0x04, 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x27, + 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, 0x00, 0x00, + 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, + 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, + 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, + 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x2b, + 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, + 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, + 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, + 0x12, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, + 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, 0x4d, 0x2f, + 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, + 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, + 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, + 0x16, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, + 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, 0x4d, 0x33, + 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, + 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, + 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, + 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, + 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x37, + 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, + 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, + 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, + 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, + 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x3b, + 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, + 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, + 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, + 0x22, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, + 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, 0x3f, + 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, + 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, + 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, + 0x26, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, + 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, 0x43, + 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, + 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, + 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, + 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x47, + 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, + 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, + 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, + 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, + 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x4b, + 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, + 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, + 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, + 0x32, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, + 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, 0x4f, + 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, + 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, + 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, + 0x36, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, + 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, 0x53, + 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, + 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, + 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, + 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, + 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x57, + 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, + 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, + 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, + 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, + 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x5b, + 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, + 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, + 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, + 0x42, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, + 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, 0x5f, + 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, + 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, + 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, + 0x46, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, + 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, 0x63, + 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, + 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, + 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, + 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, + 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x67, + 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, + 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, + 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, + 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, + 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x6b, + 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, + 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, + 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, + 0x52, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, + 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, 0x6f, + 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, + 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, + 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, + 0x56, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, + 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, 0x73, + 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, + 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, + 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, + 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, + 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x77, + 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, + 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, + 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, + 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, + 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x7b, + 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, + 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, + 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, + 0x62, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, + 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, 0x7f, + 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, + 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, + 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, + 0x66, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, + 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, 0x83, + 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, + 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, + 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, + 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, + 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x87, + 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, + 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, + 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, + 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, + 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x8b, + 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, + 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, + 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, + 0x72, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, + 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, 0x8f, + 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, + 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, + 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, + 0x76, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, + 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, 0x93, + 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, + 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, + 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, + 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, + 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x97, + 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, + 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, + 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, + 0x7e, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, + 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, 0x9b, + 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, + 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, + 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, + 0x82, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, + 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, 0x9f, + 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, + 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, + 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, + 0x86, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, + 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, 0xa3, + 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, + 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, + 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, + 0x8a, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, + 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xa7, + 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, + 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, + 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, + 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, + 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xab, + 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, + 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, + 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, + 0x92, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, + 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, 0xaf, + 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, + 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, + 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, + 0x96, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, + 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, 0xb3, + 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, + 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, + 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, + 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, + 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xb7, + 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, + 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, + 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, + 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, + 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xbb, + 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, + 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, + 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, + 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, + 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xbf, + 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, + 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, + 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, + 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, + 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xc3, + 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, + 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, + 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, + 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, + 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, 0xc7, + 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, + 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, + 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, + 0xae, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, + 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xcb, + 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, + 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, + 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, + 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, + 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xcf, + 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, + 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, + 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, + 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, + 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, + 0xba, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, + 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, + 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, + 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, 0x00, 0x00, + 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xc9, 0x02, + 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, + 0xca, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x80, 0x04, 0xce, 0x02, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xcf, 0x02, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, + 0xd0, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x80, 0x04, 0xd1, 0x02, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x80, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x6d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x4d, 0x71, 0x01, + 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x89, + 0xbe, 0x8a, 0xbe, 0x8b, 0xbe, 0x8c, 0xbe, 0x8d, + 0xbe, 0x8e, 0xbe, 0x8f, 0xbe, 0x90, 0xbe, 0x91, + 0xbe, 0x92, 0xbe, 0x93, 0xbe, 0x94, 0x26, 0x0c, + 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0xd2, + 0x02, 0x00, 0x00, 0x04, 0xd3, 0x02, 0x00, 0x00, + 0x04, 0xd4, 0x02, 0x00, 0x00, 0x04, 0xd5, 0x02, + 0x00, 0x00, 0x04, 0xd6, 0x02, 0x00, 0x00, 0x04, + 0xd7, 0x02, 0x00, 0x00, 0x04, 0xd8, 0x02, 0x00, + 0x00, 0x04, 0xd9, 0x02, 0x00, 0x00, 0x04, 0xda, + 0x02, 0x00, 0x00, 0x04, 0xdb, 0x02, 0x00, 0x00, + 0x04, 0xdc, 0x02, 0x00, 0x00, 0x04, 0xdd, 0x02, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xd2, 0x02, 0x00, 0x00, 0x04, + 0xd3, 0x02, 0x00, 0x00, 0x04, 0xd4, 0x02, 0x00, + 0x00, 0x04, 0xd5, 0x02, 0x00, 0x00, 0x04, 0xd6, + 0x02, 0x00, 0x00, 0x04, 0xd7, 0x02, 0x00, 0x00, + 0x04, 0xd8, 0x02, 0x00, 0x00, 0x04, 0xd9, 0x02, + 0x00, 0x00, 0x04, 0xda, 0x02, 0x00, 0x00, 0x04, + 0xdb, 0x02, 0x00, 0x00, 0x04, 0xdc, 0x02, 0x00, + 0x00, 0x04, 0xdd, 0x02, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x5b, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6a, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xde, 0x02, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0xde, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xde, 0x02, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x6d, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x4d, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x4d, + 0x71, 0x01, 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x95, 0xbe, 0x96, 0xbe, 0x97, 0xbe, 0x98, + 0xbe, 0x99, 0xbe, 0x9a, 0xbe, 0x9b, 0xbe, 0x9c, + 0xbe, 0x9d, 0xbe, 0x9e, 0xbe, 0x9f, 0xbe, 0xa0, + 0x26, 0x0c, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, + 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x5b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x6a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xdf, 0x02, + 0x00, 0x00, 0x04, 0xe0, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0xdf, 0x02, 0x00, 0x00, 0x04, 0xe0, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xdf, 0x02, 0x00, 0x00, 0x04, 0xe0, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x6d, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x4d, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x4d, 0x71, 0x01, 0x00, 0x00, 0x4d, 0x72, 0x01, + 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x4d, + 0xe1, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x02, 0x00, + 0x00, 0x0b, 0x04, 0xe3, 0x02, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe4, 0x02, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0xe5, 0x02, 0x00, 0x00, 0x4d, 0xe6, + 0x02, 0x00, 0x00, 0x04, 0xe7, 0x02, 0x00, 0x00, + 0x4d, 0xe8, 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x02, + 0x00, 0x00, 0x0b, 0x04, 0xea, 0x02, 0x00, 0x00, + 0x4d, 0xe6, 0x02, 0x00, 0x00, 0x04, 0xeb, 0x02, + 0x00, 0x00, 0x4d, 0xe8, 0x02, 0x00, 0x00, 0x4d, + 0xec, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xed, 0x02, + 0x00, 0x00, 0x4d, 0xe6, 0x02, 0x00, 0x00, 0x04, + 0xee, 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x02, 0x00, + 0x00, 0x4d, 0xef, 0x02, 0x00, 0x00, 0x4d, 0xf0, + 0x02, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xf1, 0x02, + 0x00, 0x00, 0x4d, 0xe9, 0x02, 0x00, 0x00, 0x04, + 0xf2, 0x02, 0x00, 0x00, 0x4d, 0xf3, 0x02, 0x00, + 0x00, 0x04, 0xf4, 0x02, 0x00, 0x00, 0x4d, 0xf5, + 0x02, 0x00, 0x00, 0x04, 0xf6, 0x02, 0x00, 0x00, + 0x4d, 0xf7, 0x02, 0x00, 0x00, 0x04, 0xf8, 0x02, + 0x00, 0x00, 0x4d, 0xf9, 0x02, 0x00, 0x00, 0x04, + 0xfa, 0x02, 0x00, 0x00, 0x4d, 0xfb, 0x02, 0x00, + 0x00, 0x04, 0xfc, 0x02, 0x00, 0x00, 0x4d, 0xfd, + 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x02, 0x00, 0x00, + 0x4d, 0xfe, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xff, + 0x02, 0x00, 0x00, 0x4d, 0x00, 0x03, 0x00, 0x00, + 0x04, 0x01, 0x03, 0x00, 0x00, 0x4d, 0x02, 0x03, + 0x00, 0x00, 0x04, 0x03, 0x03, 0x00, 0x00, 0x4d, + 0x04, 0x03, 0x00, 0x00, 0x04, 0x05, 0x03, 0x00, + 0x00, 0x4d, 0x06, 0x03, 0x00, 0x00, 0x04, 0x07, + 0x03, 0x00, 0x00, 0x4d, 0x08, 0x03, 0x00, 0x00, + 0x04, 0x09, 0x03, 0x00, 0x00, 0x4d, 0x0a, 0x03, + 0x00, 0x00, 0x04, 0x0b, 0x03, 0x00, 0x00, 0x4d, + 0x0c, 0x03, 0x00, 0x00, 0x04, 0x0d, 0x03, 0x00, + 0x00, 0x4d, 0x0e, 0x03, 0x00, 0x00, 0x04, 0x0f, + 0x03, 0x00, 0x00, 0x4d, 0x10, 0x03, 0x00, 0x00, + 0x04, 0x11, 0x03, 0x00, 0x00, 0x4d, 0x12, 0x03, + 0x00, 0x00, 0x04, 0x13, 0x03, 0x00, 0x00, 0x4d, + 0x14, 0x03, 0x00, 0x00, 0x04, 0x15, 0x03, 0x00, + 0x00, 0x4d, 0x16, 0x03, 0x00, 0x00, 0x04, 0x17, + 0x03, 0x00, 0x00, 0x4d, 0x18, 0x03, 0x00, 0x00, + 0x04, 0x19, 0x03, 0x00, 0x00, 0x4d, 0x1a, 0x03, + 0x00, 0x00, 0x04, 0x1b, 0x03, 0x00, 0x00, 0x4d, + 0x1c, 0x03, 0x00, 0x00, 0x04, 0x1d, 0x03, 0x00, + 0x00, 0x4d, 0x1e, 0x03, 0x00, 0x00, 0x04, 0x1f, + 0x03, 0x00, 0x00, 0x4d, 0x20, 0x03, 0x00, 0x00, + 0x04, 0x21, 0x03, 0x00, 0x00, 0x4d, 0x22, 0x03, + 0x00, 0x00, 0x04, 0x23, 0x03, 0x00, 0x00, 0x4d, + 0x24, 0x03, 0x00, 0x00, 0x04, 0x25, 0x03, 0x00, + 0x00, 0x4d, 0x26, 0x03, 0x00, 0x00, 0x04, 0x27, + 0x03, 0x00, 0x00, 0x4d, 0x28, 0x03, 0x00, 0x00, + 0x4d, 0x29, 0x03, 0x00, 0x00, 0x4d, 0x45, 0x00, + 0x00, 0x00, 0x24, 0x01, 0x00, 0xcc, 0x28, 0xd4, + 0x0c, 0x01, 0x00, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_ja_JP_size = 18103; + +const uint8_t intl_ja_JP[18103] = { + 0x01, 0xdb, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x0a, 0x6a, 0x61, 0x2d, 0x4a, 0x50, 0x0c, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x0e, 0x67, 0x72, + 0x65, 0x67, 0x6f, 0x72, 0x79, 0x10, 0x62, 0x75, + 0x64, 0x64, 0x68, 0x69, 0x73, 0x74, 0x0e, 0x63, + 0x68, 0x69, 0x6e, 0x65, 0x73, 0x65, 0x0c, 0x63, + 0x6f, 0x70, 0x74, 0x69, 0x63, 0x0a, 0x64, 0x61, + 0x6e, 0x67, 0x69, 0x0e, 0x65, 0x74, 0x68, 0x69, + 0x6f, 0x61, 0x61, 0x10, 0x65, 0x74, 0x68, 0x69, + 0x6f, 0x70, 0x69, 0x63, 0x0e, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x69, 0x63, 0x0c, 0x68, 0x65, 0x62, + 0x72, 0x65, 0x77, 0x0c, 0x69, 0x6e, 0x64, 0x69, + 0x61, 0x6e, 0x0e, 0x69, 0x73, 0x6c, 0x61, 0x6d, + 0x69, 0x63, 0x10, 0x69, 0x73, 0x6c, 0x61, 0x6d, + 0x69, 0x63, 0x63, 0x10, 0x6a, 0x61, 0x70, 0x61, + 0x6e, 0x65, 0x73, 0x65, 0x0e, 0x70, 0x65, 0x72, + 0x73, 0x69, 0x61, 0x6e, 0x06, 0x72, 0x6f, 0x63, + 0x04, 0x63, 0x61, 0x0e, 0x68, 0x6f, 0x75, 0x72, + 0x4e, 0x6f, 0x30, 0x0c, 0x68, 0x6f, 0x75, 0x72, + 0x31, 0x32, 0x0e, 0x7b, 0x31, 0x7d, 0x20, 0x7b, + 0x30, 0x7d, 0x0a, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x0c, 0x6d, 0x65, 0x64, 0x69, 0x75, 0x6d, 0x08, + 0x66, 0x75, 0x6c, 0x6c, 0x08, 0x6c, 0x6f, 0x6e, + 0x67, 0x05, 0x64, 0x00, 0xe5, 0x65, 0x02, 0x64, + 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, 0x0b, 0x64, + 0x00, 0xe5, 0x65, 0x28, 0x00, 0x45, 0x00, 0x29, + 0x00, 0x04, 0x45, 0x64, 0x0d, 0x64, 0x00, 0xe5, + 0x65, 0x45, 0x00, 0x45, 0x00, 0x45, 0x00, 0x45, + 0x00, 0x0a, 0x45, 0x45, 0x45, 0x45, 0x64, 0x12, + 0x61, 0x4b, 0x3a, 0x6d, 0x6d, 0x20, 0x28, 0x45, + 0x29, 0x06, 0x45, 0x68, 0x6d, 0x10, 0x48, 0x3a, + 0x6d, 0x6d, 0x20, 0x28, 0x45, 0x29, 0x06, 0x45, + 0x48, 0x6d, 0x18, 0x61, 0x4b, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x28, 0x45, 0x29, 0x08, + 0x45, 0x68, 0x6d, 0x73, 0x16, 0x48, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x28, 0x45, 0x29, + 0x08, 0x45, 0x48, 0x6d, 0x73, 0x07, 0x47, 0x00, + 0x79, 0x00, 0x74, 0x5e, 0x04, 0x47, 0x79, 0x0b, + 0x47, 0x00, 0x79, 0x00, 0x74, 0x5e, 0x4d, 0x00, + 0x08, 0x67, 0x0a, 0x47, 0x79, 0x4d, 0x4d, 0x4d, + 0x0f, 0x47, 0x00, 0x79, 0x00, 0x74, 0x5e, 0x4d, + 0x00, 0x08, 0x67, 0x64, 0x00, 0xe5, 0x65, 0x0c, + 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x15, 0x47, + 0x00, 0x79, 0x00, 0x74, 0x5e, 0x4d, 0x00, 0x08, + 0x67, 0x64, 0x00, 0xe5, 0x65, 0x28, 0x00, 0x45, + 0x00, 0x29, 0x00, 0x0e, 0x47, 0x79, 0x4d, 0x4d, + 0x4d, 0x45, 0x64, 0x17, 0x47, 0x00, 0x79, 0x00, + 0x74, 0x5e, 0x4d, 0x00, 0x08, 0x67, 0x64, 0x00, + 0xe5, 0x65, 0x45, 0x00, 0x45, 0x00, 0x45, 0x00, + 0x45, 0x00, 0x14, 0x47, 0x79, 0x4d, 0x4d, 0x4d, + 0x45, 0x45, 0x45, 0x45, 0x64, 0x07, 0x61, 0x00, + 0x4b, 0x00, 0x42, 0x66, 0x02, 0x68, 0x05, 0x48, + 0x00, 0x42, 0x66, 0x02, 0x48, 0x0a, 0x61, 0x4b, + 0x3a, 0x6d, 0x6d, 0x04, 0x68, 0x6d, 0x08, 0x48, + 0x3a, 0x6d, 0x6d, 0x04, 0x48, 0x6d, 0x10, 0x61, + 0x4b, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x06, + 0x68, 0x6d, 0x73, 0x0e, 0x48, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x06, 0x48, 0x6d, 0x73, 0x14, + 0x61, 0x4b, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x76, 0x08, 0x68, 0x6d, 0x73, 0x76, 0x12, + 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, + 0x76, 0x08, 0x48, 0x6d, 0x73, 0x76, 0x0e, 0x61, + 0x4b, 0x3a, 0x6d, 0x6d, 0x20, 0x76, 0x06, 0x68, + 0x6d, 0x76, 0x0c, 0x48, 0x3a, 0x6d, 0x6d, 0x20, + 0x76, 0x06, 0x48, 0x6d, 0x76, 0x05, 0x4d, 0x00, + 0x08, 0x67, 0x02, 0x4d, 0x06, 0x4d, 0x2f, 0x64, + 0x04, 0x4d, 0x64, 0x0c, 0x4d, 0x2f, 0x64, 0x28, + 0x45, 0x29, 0x06, 0x4d, 0x45, 0x64, 0x0e, 0x4d, + 0x2f, 0x64, 0x45, 0x45, 0x45, 0x45, 0x0c, 0x4d, + 0x45, 0x45, 0x45, 0x45, 0x64, 0x06, 0x4d, 0x4d, + 0x4d, 0x09, 0x4d, 0x00, 0x08, 0x67, 0x64, 0x00, + 0xe5, 0x65, 0x08, 0x4d, 0x4d, 0x4d, 0x64, 0x0f, + 0x4d, 0x00, 0x08, 0x67, 0x64, 0x00, 0xe5, 0x65, + 0x28, 0x00, 0x45, 0x00, 0x29, 0x00, 0x0a, 0x4d, + 0x4d, 0x4d, 0x45, 0x64, 0x11, 0x4d, 0x00, 0x08, + 0x67, 0x64, 0x00, 0xe5, 0x65, 0x45, 0x00, 0x45, + 0x00, 0x45, 0x00, 0x45, 0x00, 0x10, 0x4d, 0x4d, + 0x4d, 0x45, 0x45, 0x45, 0x45, 0x64, 0x0a, 0x4d, + 0x4d, 0x4d, 0x4d, 0x64, 0x0a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x04, 0x6d, 0x73, 0x05, 0x79, 0x00, + 0x74, 0x5e, 0x02, 0x79, 0x06, 0x79, 0x2f, 0x4d, + 0x04, 0x79, 0x4d, 0x0a, 0x79, 0x2f, 0x4d, 0x2f, + 0x64, 0x06, 0x79, 0x4d, 0x64, 0x10, 0x79, 0x2f, + 0x4d, 0x2f, 0x64, 0x28, 0x45, 0x29, 0x08, 0x79, + 0x4d, 0x45, 0x64, 0x12, 0x79, 0x2f, 0x4d, 0x2f, + 0x64, 0x45, 0x45, 0x45, 0x45, 0x0e, 0x79, 0x4d, + 0x45, 0x45, 0x45, 0x45, 0x64, 0x08, 0x79, 0x2f, + 0x4d, 0x4d, 0x06, 0x79, 0x4d, 0x4d, 0x09, 0x79, + 0x00, 0x74, 0x5e, 0x4d, 0x00, 0x08, 0x67, 0x08, + 0x79, 0x4d, 0x4d, 0x4d, 0x0d, 0x79, 0x00, 0x74, + 0x5e, 0x4d, 0x00, 0x08, 0x67, 0x64, 0x00, 0xe5, + 0x65, 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x13, + 0x79, 0x00, 0x74, 0x5e, 0x4d, 0x00, 0x08, 0x67, + 0x64, 0x00, 0xe5, 0x65, 0x28, 0x00, 0x45, 0x00, + 0x29, 0x00, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x45, + 0x64, 0x15, 0x79, 0x00, 0x74, 0x5e, 0x4d, 0x00, + 0x08, 0x67, 0x64, 0x00, 0xe5, 0x65, 0x45, 0x00, + 0x45, 0x00, 0x45, 0x00, 0x45, 0x00, 0x12, 0x79, + 0x4d, 0x4d, 0x4d, 0x45, 0x45, 0x45, 0x45, 0x64, + 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, 0x79, + 0x2f, 0x51, 0x51, 0x51, 0x08, 0x79, 0x51, 0x51, + 0x51, 0x0a, 0x79, 0x51, 0x51, 0x51, 0x51, 0x20, + 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, + 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, + 0x14, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x45, 0x45, + 0x45, 0x45, 0x64, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, + 0x4d, 0x64, 0x0e, 0x79, 0x2f, 0x4d, 0x4d, 0x2f, + 0x64, 0x64, 0x16, 0x64, 0x61, 0x74, 0x65, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x1b, 0x48, + 0x00, 0x42, 0x66, 0x6d, 0x00, 0x6d, 0x00, 0x06, + 0x52, 0x73, 0x00, 0x73, 0x00, 0xd2, 0x79, 0x20, + 0x00, 0x7a, 0x00, 0x7a, 0x00, 0x7a, 0x00, 0x7a, + 0x00, 0x12, 0x68, 0x6d, 0x6d, 0x73, 0x73, 0x7a, + 0x7a, 0x7a, 0x7a, 0x12, 0x48, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x7a, 0x08, 0x68, 0x6d, + 0x73, 0x7a, 0x16, 0x74, 0x69, 0x6d, 0x65, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x0e, 0x66, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x0c, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x05, 0x31, 0x00, + 0x08, 0x67, 0x05, 0x32, 0x00, 0x08, 0x67, 0x05, + 0x33, 0x00, 0x08, 0x67, 0x05, 0x34, 0x00, 0x08, + 0x67, 0x05, 0x35, 0x00, 0x08, 0x67, 0x05, 0x36, + 0x00, 0x08, 0x67, 0x05, 0x37, 0x00, 0x08, 0x67, + 0x05, 0x38, 0x00, 0x08, 0x67, 0x05, 0x39, 0x00, + 0x08, 0x67, 0x07, 0x31, 0x00, 0x30, 0x00, 0x08, + 0x67, 0x07, 0x31, 0x00, 0x31, 0x00, 0x08, 0x67, + 0x07, 0x31, 0x00, 0x32, 0x00, 0x08, 0x67, 0x0c, + 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x73, 0x03, 0xe5, + 0x65, 0x03, 0x08, 0x67, 0x03, 0x6b, 0x70, 0x03, + 0x34, 0x6c, 0x03, 0x28, 0x67, 0x03, 0xd1, 0x91, + 0x03, 0x1f, 0x57, 0x07, 0xe5, 0x65, 0xdc, 0x66, + 0xe5, 0x65, 0x07, 0x08, 0x67, 0xdc, 0x66, 0xe5, + 0x65, 0x07, 0x6b, 0x70, 0xdc, 0x66, 0xe5, 0x65, + 0x07, 0x34, 0x6c, 0xdc, 0x66, 0xe5, 0x65, 0x07, + 0x28, 0x67, 0xdc, 0x66, 0xe5, 0x65, 0x07, 0xd1, + 0x91, 0xdc, 0x66, 0xe5, 0x65, 0x07, 0x1f, 0x57, + 0xdc, 0x66, 0xe5, 0x65, 0x08, 0x64, 0x61, 0x79, + 0x73, 0x04, 0x42, 0x45, 0x05, 0xcf, 0x4e, 0xa6, + 0x66, 0x08, 0x65, 0x72, 0x61, 0x73, 0x05, 0x48, + 0x53, 0x4d, 0x52, 0x04, 0x61, 0x6d, 0x05, 0x48, + 0x53, 0x8c, 0x5f, 0x04, 0x70, 0x6d, 0x14, 0x64, + 0x61, 0x79, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, + 0x73, 0x03, 0x63, 0x6b, 0x03, 0x8c, 0x4e, 0x03, + 0x09, 0x4e, 0x03, 0xdb, 0x56, 0x03, 0x94, 0x4e, + 0x03, 0x6d, 0x51, 0x03, 0x03, 0x4e, 0x03, 0x6b, + 0x51, 0x03, 0x5d, 0x4e, 0x03, 0x41, 0x53, 0x05, + 0x41, 0x53, 0x00, 0x4e, 0x05, 0x41, 0x53, 0x8c, + 0x4e, 0x05, 0x63, 0x6b, 0x08, 0x67, 0x05, 0x8c, + 0x4e, 0x08, 0x67, 0x05, 0x09, 0x4e, 0x08, 0x67, + 0x05, 0xdb, 0x56, 0x08, 0x67, 0x05, 0x94, 0x4e, + 0x08, 0x67, 0x05, 0x6d, 0x51, 0x08, 0x67, 0x05, + 0x03, 0x4e, 0x08, 0x67, 0x05, 0x6b, 0x51, 0x08, + 0x67, 0x05, 0x5d, 0x4e, 0x08, 0x67, 0x05, 0x41, + 0x53, 0x08, 0x67, 0x07, 0x41, 0x53, 0x00, 0x4e, + 0x08, 0x67, 0x07, 0x41, 0x53, 0x8c, 0x4e, 0x08, + 0x67, 0x07, 0xc8, 0x30, 0xa6, 0x30, 0xc8, 0x30, + 0x05, 0xd0, 0x30, 0xd0, 0x30, 0x09, 0xcf, 0x30, + 0xc8, 0x30, 0xfc, 0x30, 0xeb, 0x30, 0x09, 0xad, + 0x30, 0xa2, 0x30, 0xc3, 0x30, 0xaf, 0x30, 0x07, + 0xc8, 0x30, 0xfc, 0x30, 0xd0, 0x30, 0x0b, 0xa2, + 0x30, 0xe0, 0x30, 0xb7, 0x30, 0xfc, 0x30, 0xeb, + 0x30, 0x0d, 0xd0, 0x30, 0xe9, 0x30, 0xe0, 0x30, + 0xcf, 0x30, 0xfc, 0x30, 0xc8, 0x30, 0x0b, 0xd0, + 0x30, 0xe9, 0x30, 0xe2, 0x30, 0xa6, 0x30, 0xc0, + 0x30, 0x0b, 0xd0, 0x30, 0xb7, 0x30, 0xe3, 0x30, + 0xf3, 0x30, 0xb9, 0x30, 0x09, 0xd1, 0x30, 0xaa, + 0x30, 0xfc, 0x30, 0xca, 0x30, 0x09, 0xa8, 0x30, + 0xda, 0x30, 0xfc, 0x30, 0xd7, 0x30, 0x07, 0xe1, + 0x30, 0xb9, 0x30, 0xe9, 0x30, 0x07, 0xca, 0x30, + 0xb7, 0x30, 0xa8, 0x30, 0x08, 0x45, 0x52, 0x41, + 0x30, 0x08, 0x45, 0x52, 0x41, 0x31, 0x0b, 0xe1, + 0x30, 0xb9, 0x30, 0xb1, 0x30, 0xec, 0x30, 0xe0, + 0x30, 0x09, 0xc6, 0x30, 0xb1, 0x30, 0xe0, 0x30, + 0xc8, 0x30, 0x07, 0xd8, 0x30, 0xc0, 0x30, 0xeb, + 0x30, 0x09, 0xbf, 0x30, 0xfc, 0x30, 0xb5, 0x30, + 0xb9, 0x30, 0x05, 0xc6, 0x30, 0xeb, 0x30, 0x0d, + 0xa4, 0x30, 0xa7, 0x30, 0xab, 0x30, 0xc6, 0x30, + 0xa3, 0x30, 0xc8, 0x30, 0x09, 0xe1, 0x30, 0xac, + 0x30, 0xd3, 0x30, 0xc8, 0x30, 0x09, 0xdf, 0x30, + 0xa2, 0x30, 0xb8, 0x30, 0xa2, 0x30, 0x09, 0xb2, + 0x30, 0xf3, 0x30, 0xdc, 0x30, 0xc8, 0x30, 0x05, + 0xbb, 0x30, 0xcd, 0x30, 0x07, 0xcf, 0x30, 0xe0, + 0x30, 0xec, 0x30, 0x09, 0xcd, 0x30, 0xcf, 0x30, + 0xc3, 0x30, 0xbb, 0x30, 0x09, 0xd1, 0x30, 0xb0, + 0x30, 0xe1, 0x30, 0xf3, 0x30, 0x06, 0x4d, 0x30, + 0x31, 0x06, 0x4d, 0x30, 0x32, 0x06, 0x4d, 0x30, + 0x33, 0x06, 0x4d, 0x30, 0x34, 0x06, 0x4d, 0x30, + 0x35, 0x06, 0x4d, 0x30, 0x36, 0x06, 0x4d, 0x30, + 0x37, 0x06, 0x4d, 0x30, 0x38, 0x06, 0x4d, 0x30, + 0x39, 0x06, 0x4d, 0x31, 0x30, 0x06, 0x4d, 0x31, + 0x31, 0x06, 0x4d, 0x31, 0x32, 0x04, 0x42, 0x43, + 0x04, 0x41, 0x44, 0x06, 0x42, 0x43, 0x45, 0x04, + 0x43, 0x45, 0x07, 0x00, 0x7d, 0x43, 0x51, 0x4d, + 0x52, 0x05, 0x7f, 0x89, 0xa6, 0x66, 0x0b, 0x7f, + 0x89, 0xa6, 0x66, 0x00, 0x7d, 0x43, 0x51, 0x4d, + 0x52, 0x09, 0x7f, 0x89, 0xa6, 0x66, 0x00, 0x7d, + 0x43, 0x51, 0x09, 0xc6, 0x30, 0xa3, 0x30, 0xb9, + 0x30, 0xec, 0x30, 0x09, 0x78, 0x30, 0xb7, 0x30, + 0xdc, 0x30, 0xf3, 0x30, 0x09, 0xad, 0x30, 0xb9, + 0x30, 0xec, 0x30, 0xd6, 0x30, 0x09, 0xc6, 0x30, + 0xd9, 0x30, 0xc3, 0x30, 0xc8, 0x30, 0x09, 0xb7, + 0x30, 0xd0, 0x30, 0xc3, 0x30, 0xc8, 0x30, 0x0b, + 0xa2, 0x30, 0xc0, 0x30, 0xeb, 0x30, 0x20, 0x00, + 0x49, 0x00, 0x07, 0xa2, 0x30, 0xc0, 0x30, 0xeb, + 0x30, 0x07, 0xcb, 0x30, 0xb5, 0x30, 0xf3, 0x30, + 0x07, 0xa4, 0x30, 0xe4, 0x30, 0xeb, 0x30, 0x07, + 0xb7, 0x30, 0xd0, 0x30, 0xf3, 0x30, 0x07, 0xbf, + 0x30, 0xe0, 0x30, 0xba, 0x30, 0x05, 0xa2, 0x30, + 0xf4, 0x30, 0x07, 0xa8, 0x30, 0xeb, 0x30, 0xeb, + 0x30, 0x0d, 0xa2, 0x30, 0xc0, 0x30, 0xeb, 0x30, + 0x20, 0x00, 0x49, 0x00, 0x49, 0x00, 0x04, 0x41, + 0x4d, 0x09, 0xab, 0x30, 0xa4, 0x30, 0xc8, 0x30, + 0xe9, 0x30, 0x0b, 0xf4, 0x30, 0xa1, 0x30, 0xa4, + 0x30, 0xb5, 0x30, 0xab, 0x30, 0x0b, 0xb8, 0x30, + 0xe3, 0x30, 0xa4, 0x30, 0xb9, 0x30, 0xbf, 0x30, + 0x09, 0xa2, 0x30, 0xfc, 0x30, 0xb5, 0x30, 0xc0, + 0x30, 0x09, 0xb9, 0x30, 0xe9, 0x30, 0xd0, 0x30, + 0xca, 0x30, 0x09, 0xd0, 0x30, 0xfc, 0x30, 0xc9, + 0x30, 0xe9, 0x30, 0x09, 0xa2, 0x30, 0xb9, 0x30, + 0xd3, 0x30, 0xca, 0x30, 0x0b, 0xab, 0x30, 0xeb, + 0x30, 0xc7, 0x30, 0xa3, 0x30, 0xab, 0x30, 0x0d, + 0xa2, 0x30, 0xf4, 0x30, 0xe9, 0x30, 0xcf, 0x30, + 0xe4, 0x30, 0xca, 0x30, 0x07, 0xd1, 0x30, 0xa6, + 0x30, 0xb5, 0x30, 0x07, 0xde, 0x30, 0xfc, 0x30, + 0xac, 0x30, 0x09, 0xd1, 0x30, 0xeb, 0x30, 0xb0, + 0x30, 0xca, 0x30, 0x05, 0xb5, 0x30, 0xab, 0x30, + 0x0b, 0xe0, 0x30, 0xcf, 0x30, 0xc3, 0x30, 0xe9, + 0x30, 0xe0, 0x30, 0x09, 0xb5, 0x30, 0xd5, 0x30, + 0xa2, 0x30, 0xeb, 0x30, 0x17, 0xe9, 0x30, 0xd3, + 0x30, 0xfc, 0x30, 0xfb, 0x30, 0xa6, 0x30, 0xeb, + 0x30, 0xfb, 0x30, 0xa2, 0x30, 0xa6, 0x30, 0xef, + 0x30, 0xeb, 0x30, 0x17, 0xe9, 0x30, 0xd3, 0x30, + 0xfc, 0x30, 0xfb, 0x30, 0xa6, 0x30, 0xc3, 0x30, + 0xfb, 0x30, 0xb5, 0x30, 0xfc, 0x30, 0xcb, 0x30, + 0xfc, 0x30, 0x17, 0xb8, 0x30, 0xe5, 0x30, 0xde, + 0x30, 0xfc, 0x30, 0xc0, 0x30, 0xeb, 0x30, 0xfb, + 0x30, 0xa2, 0x30, 0xa6, 0x30, 0xef, 0x30, 0xeb, + 0x30, 0x15, 0xb8, 0x30, 0xe5, 0x30, 0xde, 0x30, + 0xfc, 0x30, 0xc0, 0x30, 0xc3, 0x30, 0xb5, 0x30, + 0xfc, 0x30, 0xcb, 0x30, 0xfc, 0x30, 0x09, 0xe9, + 0x30, 0xb8, 0x30, 0xe3, 0x30, 0xd6, 0x30, 0x0d, + 0xb7, 0x30, 0xe3, 0x30, 0xa2, 0x30, 0xd0, 0x30, + 0xfc, 0x30, 0xf3, 0x30, 0x0b, 0xe9, 0x30, 0xde, + 0x30, 0xc0, 0x30, 0xfc, 0x30, 0xf3, 0x30, 0x0d, + 0xb7, 0x30, 0xe3, 0x30, 0xa6, 0x30, 0xef, 0x30, + 0xfc, 0x30, 0xeb, 0x30, 0x0d, 0xba, 0x30, 0xeb, + 0x30, 0xfb, 0x30, 0xab, 0x30, 0xa4, 0x30, 0xc0, + 0x30, 0x0f, 0xba, 0x30, 0xeb, 0x30, 0xfb, 0x30, + 0xd2, 0x30, 0xc3, 0x30, 0xb8, 0x30, 0xe3, 0x30, + 0x04, 0x41, 0x48, 0x05, 0x27, 0x59, 0x16, 0x53, + 0x05, 0x7d, 0x76, 0xc9, 0x96, 0x05, 0x7d, 0x76, + 0xef, 0x9c, 0x05, 0x31, 0x67, 0xe5, 0x9c, 0x05, + 0x27, 0x59, 0x9d, 0x5b, 0x05, 0x76, 0x61, 0xf2, + 0x96, 0x05, 0x8c, 0x54, 0x85, 0x92, 0x05, 0x0a, + 0x97, 0x80, 0x4e, 0x05, 0x0a, 0x99, 0x01, 0x80, + 0x05, 0x5e, 0x79, 0x80, 0x4e, 0x05, 0x29, 0x59, + 0x73, 0x5e, 0x09, 0x29, 0x59, 0x73, 0x5e, 0x1f, + 0x61, 0x9d, 0x5b, 0x09, 0x29, 0x59, 0x73, 0x5e, + 0xdd, 0x52, 0x9d, 0x5b, 0x09, 0x29, 0x59, 0x73, + 0x5e, 0x9d, 0x5b, 0x57, 0x5b, 0x09, 0x29, 0x59, + 0x73, 0x5e, 0x5e, 0x79, 0x77, 0x8b, 0x09, 0x5e, + 0x79, 0x77, 0x8b, 0x6f, 0x66, 0xf2, 0x96, 0x05, + 0x9d, 0x5b, 0x80, 0x4e, 0x05, 0x29, 0x59, 0xdc, + 0x5f, 0x05, 0xf6, 0x5e, 0xa6, 0x66, 0x05, 0x27, + 0x59, 0x0c, 0x54, 0x05, 0x18, 0x5f, 0xc1, 0x4e, + 0x05, 0x29, 0x59, 0x77, 0x95, 0x05, 0x7f, 0x62, + 0x8c, 0x54, 0x05, 0x09, 0x56, 0x65, 0x79, 0x05, + 0xc1, 0x4e, 0xff, 0x5b, 0x05, 0x89, 0x65, 0x61, + 0x88, 0x05, 0x29, 0x59, 0x89, 0x5b, 0x05, 0x9e, + 0x8c, 0xb3, 0x89, 0x05, 0x43, 0x51, 0x76, 0x61, + 0x05, 0xc1, 0x4e, 0x8c, 0x54, 0x05, 0xdb, 0x5b, + 0x73, 0x5e, 0x05, 0x0c, 0x66, 0xf0, 0x6c, 0x05, + 0xf6, 0x5e, 0x9c, 0x55, 0x05, 0xf6, 0x5e, 0x77, + 0x95, 0x05, 0x7f, 0x62, 0x73, 0x5e, 0x05, 0x29, + 0x59, 0x76, 0x61, 0x05, 0x29, 0x59, 0xa6, 0x66, + 0x05, 0x29, 0x59, 0xb3, 0x5f, 0x05, 0xdc, 0x5f, + 0x8c, 0x54, 0x05, 0xb7, 0x5e, 0xdd, 0x4f, 0x05, + 0x89, 0x5b, 0x8c, 0x54, 0x05, 0x29, 0x59, 0x84, + 0x79, 0x05, 0x29, 0x59, 0xf6, 0x5e, 0x05, 0x9e, + 0x8c, 0x43, 0x51, 0x05, 0x29, 0x59, 0x43, 0x51, + 0x05, 0x38, 0x6c, 0xb3, 0x89, 0x05, 0xdb, 0x5b, + 0x8c, 0x54, 0x05, 0x38, 0x6c, 0xf6, 0x5e, 0x05, + 0x38, 0x6c, 0x5a, 0x79, 0x05, 0x63, 0x6b, 0xa6, + 0x66, 0x05, 0x77, 0x95, 0xb3, 0x5f, 0x05, 0x77, + 0x95, 0xdd, 0x4f, 0x05, 0xdb, 0x5b, 0x18, 0x5f, + 0x05, 0x77, 0x95, 0x8c, 0x54, 0x05, 0xdb, 0x5b, + 0xc1, 0x4e, 0x05, 0xbb, 0x6c, 0x89, 0x5b, 0x05, + 0x07, 0x4e, 0xff, 0x5b, 0x05, 0x77, 0x95, 0x43, + 0x51, 0x05, 0x77, 0x95, 0xa6, 0x66, 0x05, 0x77, + 0x95, 0x45, 0x4e, 0x05, 0xdb, 0x5b, 0xb3, 0x5f, + 0x05, 0x38, 0x6c, 0x7f, 0x62, 0x05, 0x29, 0x59, + 0x9c, 0x55, 0x05, 0xb7, 0x5e, 0x73, 0x5e, 0x05, + 0xbb, 0x6c, 0xa6, 0x66, 0x05, 0xf6, 0x5e, 0x45, + 0x4e, 0x05, 0x7f, 0x62, 0xdd, 0x4f, 0x05, 0x7f, + 0x62, 0xa6, 0x66, 0x05, 0x38, 0x6c, 0xdd, 0x4f, + 0x05, 0xdc, 0x5f, 0xb3, 0x5f, 0x05, 0xdb, 0x5b, + 0xbb, 0x6c, 0x05, 0x09, 0x56, 0xdd, 0x4f, 0x05, + 0x38, 0x6c, 0x77, 0x95, 0x05, 0x7f, 0x62, 0xb3, + 0x5f, 0x05, 0xb7, 0x5e, 0x8c, 0x54, 0x05, 0x77, + 0x95, 0xbb, 0x6c, 0x05, 0x09, 0x56, 0x7f, 0x62, + 0x05, 0x29, 0x59, 0xc1, 0x4e, 0x05, 0x29, 0x59, + 0x38, 0x6c, 0x05, 0x38, 0x6c, 0x45, 0x4e, 0x05, + 0x43, 0x51, 0x38, 0x6c, 0x05, 0xdd, 0x4f, 0x89, + 0x5b, 0x05, 0x29, 0x59, 0xbb, 0x6c, 0x05, 0x27, + 0x59, 0xbb, 0x6c, 0x05, 0x29, 0x59, 0x7f, 0x62, + 0x05, 0x77, 0x95, 0x7f, 0x62, 0x05, 0xdd, 0x4f, + 0xf6, 0x5e, 0x05, 0x38, 0x6c, 0xbb, 0x6c, 0x05, + 0xb7, 0x5e, 0xbb, 0x6c, 0x05, 0x29, 0x59, 0x0a, + 0x99, 0x05, 0x45, 0x4e, 0x89, 0x5b, 0x05, 0xc1, + 0x4e, 0x73, 0x5e, 0x05, 0x45, 0x4e, 0xff, 0x5b, + 0x05, 0xdd, 0x4f, 0x43, 0x51, 0x05, 0x73, 0x5e, + 0xbb, 0x6c, 0x05, 0x38, 0x6c, 0xa6, 0x66, 0x05, + 0xdc, 0x5f, 0xdd, 0x4f, 0x05, 0x77, 0x95, 0xdb, + 0x5b, 0x05, 0x38, 0x6c, 0x07, 0x4e, 0x05, 0xc1, + 0x4e, 0x89, 0x5b, 0x05, 0x09, 0x56, 0xdc, 0x5f, + 0x05, 0x7f, 0x62, 0x89, 0x5b, 0x05, 0x89, 0x5b, + 0x43, 0x51, 0x05, 0xbb, 0x6c, 0x7f, 0x62, 0x05, + 0x0a, 0x99, 0x8c, 0x54, 0x05, 0xff, 0x5b, 0x38, + 0x6c, 0x05, 0x43, 0x51, 0xa6, 0x66, 0x05, 0x87, + 0x65, 0xbb, 0x6c, 0x05, 0xfa, 0x5e, 0x45, 0x4e, + 0x05, 0x63, 0x6b, 0xbb, 0x6c, 0x05, 0xfa, 0x5e, + 0xc1, 0x4e, 0x05, 0x43, 0x51, 0x45, 0x4e, 0x05, + 0xfa, 0x5e, 0x38, 0x6c, 0x05, 0x7f, 0x62, 0x43, + 0x51, 0x05, 0xfa, 0x5e, 0xa6, 0x66, 0x05, 0xfa, + 0x5e, 0xdd, 0x4f, 0x05, 0x7f, 0x62, 0x45, 0x4e, + 0x05, 0x9e, 0x8c, 0xdc, 0x5f, 0x05, 0x43, 0x51, + 0xc1, 0x4e, 0x05, 0x09, 0x56, 0x84, 0x79, 0x05, + 0x89, 0x5b, 0x9e, 0x8c, 0x05, 0xdb, 0x5b, 0x9c, + 0x55, 0x05, 0x9e, 0x8c, 0x38, 0x6c, 0x05, 0x29, + 0x59, 0x8f, 0x79, 0x05, 0x87, 0x65, 0xa6, 0x66, + 0x05, 0x09, 0x56, 0x8e, 0x79, 0x05, 0xa6, 0x66, + 0xc1, 0x4e, 0x05, 0xf6, 0x5e, 0xdc, 0x5f, 0x05, + 0xc1, 0x4e, 0xbb, 0x6c, 0x05, 0xdb, 0x5b, 0x43, + 0x51, 0x05, 0x9d, 0x5b, 0xbb, 0x6c, 0x05, 0xfa, + 0x5e, 0x77, 0x95, 0x05, 0xb7, 0x5e, 0x43, 0x51, + 0x05, 0x63, 0x6b, 0x09, 0x56, 0x05, 0x63, 0x6b, + 0x43, 0x51, 0x05, 0x87, 0x65, 0xdc, 0x5f, 0x05, + 0x18, 0x5f, 0x77, 0x95, 0x05, 0x87, 0x65, 0x38, + 0x6c, 0x05, 0xfa, 0x5e, 0xbb, 0x6c, 0x05, 0x18, + 0x5f, 0x89, 0x5b, 0x05, 0x63, 0x6b, 0xdc, 0x5f, + 0x05, 0x38, 0x6c, 0xc1, 0x4e, 0x05, 0x63, 0x6b, + 0x89, 0x5b, 0x05, 0x7e, 0x4e, 0x43, 0x51, 0x05, + 0x09, 0x56, 0x43, 0x51, 0x05, 0xb3, 0x5f, 0xbb, + 0x6c, 0x05, 0xf6, 0x5e, 0x76, 0x61, 0x05, 0xdc, + 0x5f, 0x77, 0x95, 0x05, 0x63, 0x6b, 0x8c, 0x54, + 0x05, 0x87, 0x65, 0xdd, 0x4f, 0x05, 0x43, 0x51, + 0xdc, 0x5f, 0x05, 0x43, 0x51, 0xa8, 0x4e, 0x05, + 0x63, 0x6b, 0x2d, 0x4e, 0x05, 0x09, 0x56, 0xa6, + 0x66, 0x05, 0x43, 0x51, 0xb3, 0x5f, 0x05, 0x43, + 0x51, 0x18, 0x5f, 0x05, 0xfa, 0x5e, 0x66, 0x6b, + 0x05, 0xf6, 0x5e, 0x43, 0x51, 0x05, 0x08, 0x82, + 0xfd, 0x56, 0x05, 0x63, 0x6b, 0x73, 0x5e, 0x05, + 0xfa, 0x5e, 0xb3, 0x5f, 0x05, 0x87, 0x65, 0x2d, + 0x4e, 0x05, 0x29, 0x59, 0x88, 0x63, 0x05, 0xb7, + 0x5e, 0xa6, 0x66, 0x05, 0x18, 0x5f, 0x8c, 0x54, + 0x05, 0x43, 0x51, 0x2d, 0x4e, 0x05, 0xf3, 0x81, + 0xb3, 0x5f, 0x05, 0x09, 0x56, 0x76, 0x61, 0x05, + 0xb7, 0x5e, 0xdc, 0x5f, 0x05, 0x0e, 0x66, 0xb3, + 0x5f, 0x05, 0xdc, 0x5f, 0x38, 0x6c, 0x05, 0x63, + 0x6b, 0x77, 0x95, 0x05, 0x38, 0x6c, 0xab, 0x4e, + 0x05, 0x09, 0x56, 0x09, 0x54, 0x05, 0x87, 0x65, + 0x89, 0x5b, 0x05, 0x9d, 0x5b, 0xb3, 0x5f, 0x05, + 0xab, 0x4e, 0xb3, 0x5f, 0x05, 0xb7, 0x5e, 0x63, + 0x6b, 0x05, 0x77, 0x95, 0x84, 0x79, 0x05, 0xdb, + 0x5b, 0x63, 0x6b, 0x05, 0x87, 0x65, 0x63, 0x6b, + 0x05, 0xdc, 0x5f, 0xc1, 0x4e, 0x05, 0x87, 0x65, + 0x0e, 0x66, 0x05, 0x77, 0x95, 0xab, 0x4e, 0x05, + 0xf6, 0x5e, 0xb3, 0x5f, 0x05, 0x0e, 0x66, 0xdc, + 0x5f, 0x05, 0x87, 0x65, 0x80, 0x4e, 0x05, 0x38, + 0x6c, 0x63, 0x6b, 0x05, 0x27, 0x59, 0x38, 0x6c, + 0x05, 0xab, 0x4e, 0x84, 0x79, 0x05, 0x29, 0x59, + 0x87, 0x65, 0x05, 0x18, 0x5f, 0xbb, 0x6c, 0x05, + 0x38, 0x6c, 0x84, 0x79, 0x05, 0x43, 0x51, 0x80, + 0x4e, 0x05, 0x29, 0x59, 0x63, 0x6b, 0x05, 0x87, + 0x65, 0x84, 0x79, 0x05, 0x76, 0x61, 0x77, 0x95, + 0x05, 0x43, 0x51, 0x8c, 0x54, 0x05, 0xdb, 0x5b, + 0x38, 0x6c, 0x05, 0x63, 0x6b, 0xdd, 0x4f, 0x05, + 0x76, 0x61, 0x89, 0x5b, 0x05, 0x7f, 0x62, 0xdc, + 0x5f, 0x05, 0x0e, 0x66, 0xa6, 0x66, 0x05, 0x07, + 0x4e, 0xbb, 0x6c, 0x05, 0xdb, 0x5b, 0x87, 0x65, + 0x05, 0xf6, 0x5e, 0x9d, 0x5b, 0x05, 0x29, 0x59, + 0x8c, 0x54, 0x05, 0x9e, 0x8c, 0xab, 0x4e, 0x05, + 0x43, 0x51, 0x84, 0x79, 0x05, 0x9d, 0x5b, 0x38, + 0x6c, 0x05, 0x63, 0x6b, 0xb3, 0x5f, 0x05, 0xab, + 0x4e, 0xdd, 0x4f, 0x05, 0x43, 0x51, 0x87, 0x65, + 0x05, 0xdb, 0x5b, 0xdd, 0x4f, 0x05, 0xf6, 0x5e, + 0xab, 0x4e, 0x05, 0xdb, 0x5b, 0xf6, 0x5e, 0x05, + 0x9d, 0x5b, 0xa6, 0x66, 0x05, 0x0e, 0x66, 0x8c, + 0x54, 0x05, 0x89, 0x5b, 0x38, 0x6c, 0x05, 0x29, + 0x59, 0x0e, 0x66, 0x05, 0xdb, 0x5b, 0x3f, 0x65, + 0x05, 0xab, 0x4e, 0x8c, 0x54, 0x05, 0x87, 0x65, + 0x16, 0x53, 0x05, 0x87, 0x65, 0x3f, 0x65, 0x05, + 0x29, 0x59, 0xdd, 0x4f, 0x05, 0x18, 0x5f, 0x16, + 0x53, 0x05, 0x09, 0x56, 0x38, 0x6c, 0x05, 0x89, + 0x5b, 0x3f, 0x65, 0x05, 0x07, 0x4e, 0xf6, 0x5e, + 0x05, 0x87, 0x65, 0x45, 0x4e, 0x05, 0x43, 0x51, + 0xbb, 0x6c, 0x05, 0x76, 0x61, 0xdc, 0x5f, 0x02, + 0x54, 0x02, 0x53, 0x05, 0x0e, 0x66, 0xbb, 0x6c, + 0x05, 0x27, 0x59, 0x63, 0x6b, 0x05, 0x2d, 0x66, + 0x8c, 0x54, 0x05, 0x73, 0x5e, 0x10, 0x62, 0x15, + 0xd5, 0x30, 0xa1, 0x30, 0xeb, 0x30, 0xf4, 0x30, + 0xa1, 0x30, 0xeb, 0x30, 0xc7, 0x30, 0xa3, 0x30, + 0xfc, 0x30, 0xf3, 0x30, 0x15, 0xaa, 0x30, 0xeb, + 0x30, 0xc7, 0x30, 0xa3, 0x30, 0xfc, 0x30, 0xd9, + 0x30, 0xd8, 0x30, 0xb7, 0x30, 0xe5, 0x30, 0xc8, + 0x30, 0x0b, 0xdb, 0x30, 0xeb, 0x30, 0xc0, 0x30, + 0xfc, 0x30, 0xc9, 0x30, 0x09, 0xc6, 0x30, 0xa3, + 0x30, 0xfc, 0x30, 0xeb, 0x30, 0x0b, 0xe2, 0x30, + 0xeb, 0x30, 0xc0, 0x30, 0xfc, 0x30, 0xc9, 0x30, + 0x11, 0xb7, 0x30, 0xe3, 0x30, 0xcf, 0x30, 0xea, + 0x30, 0xfc, 0x30, 0xf4, 0x30, 0xa1, 0x30, 0xeb, + 0x30, 0x07, 0xe1, 0x30, 0xd5, 0x30, 0xeb, 0x30, + 0x0b, 0xa2, 0x30, 0xfc, 0x30, 0xd0, 0x30, 0xfc, + 0x30, 0xf3, 0x30, 0x09, 0xa2, 0x30, 0xfc, 0x30, + 0xb6, 0x30, 0xeb, 0x30, 0x05, 0xc7, 0x30, 0xa4, + 0x30, 0x09, 0xd0, 0x30, 0xd5, 0x30, 0xde, 0x30, + 0xf3, 0x30, 0x0d, 0xa8, 0x30, 0xb9, 0x30, 0xd5, + 0x30, 0xa1, 0x30, 0xf3, 0x30, 0xc9, 0x30, 0x04, + 0x41, 0x50, 0x07, 0x11, 0x6c, 0xfd, 0x56, 0x4d, + 0x52, 0x05, 0x11, 0x6c, 0xfd, 0x56, 0x12, 0x63, + 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, 0x73, + 0x08, 0x64, 0x61, 0x74, 0x65, 0x08, 0x6c, 0x61, + 0x74, 0x6e, 0x04, 0x6e, 0x75, 0x10, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x50, + 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x26, 0x7b, + 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0x1e, 0x6e, 0x65, 0x67, 0x61, 0x74, + 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, + 0x72, 0x6e, 0x0e, 0x64, 0x65, 0x63, 0x69, 0x6d, + 0x61, 0x6c, 0x24, 0x7b, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x63, 0x79, 0x7d, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x3a, 0x7b, 0x6d, + 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x7d, 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x79, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0x10, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x63, 0x79, 0x2a, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x7b, 0x70, 0x65, + 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, + 0x6e, 0x7d, 0x40, 0x7b, 0x6d, 0x69, 0x6e, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x7b, 0x70, + 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, + 0x67, 0x6e, 0x7d, 0x0e, 0x70, 0x65, 0x72, 0x63, + 0x65, 0x6e, 0x74, 0x10, 0x70, 0x61, 0x74, 0x74, + 0x65, 0x72, 0x6e, 0x73, 0x02, 0x2e, 0x02, 0x2c, + 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x06, 0x4e, + 0x61, 0x4e, 0x06, 0x6e, 0x61, 0x6e, 0x02, 0x2b, + 0x10, 0x70, 0x6c, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x02, 0x2d, 0x12, 0x6d, 0x69, 0x6e, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, 0x25, 0x16, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, + 0x69, 0x67, 0x6e, 0x03, 0x1e, 0x22, 0x10, 0x69, + 0x6e, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x0e, + 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x06, + 0x41, 0x55, 0x24, 0x06, 0x41, 0x55, 0x44, 0x04, + 0x52, 0x24, 0x06, 0x42, 0x52, 0x4c, 0x06, 0x43, + 0x41, 0x24, 0x06, 0x43, 0x41, 0x44, 0x03, 0x43, + 0x51, 0x06, 0x43, 0x4e, 0x59, 0x03, 0xac, 0x20, + 0x06, 0x45, 0x55, 0x52, 0x02, 0xa3, 0x06, 0x47, + 0x42, 0x50, 0x06, 0x48, 0x4b, 0x24, 0x06, 0x48, + 0x4b, 0x44, 0x03, 0xaa, 0x20, 0x06, 0x49, 0x4c, + 0x53, 0x03, 0xb9, 0x20, 0x06, 0x49, 0x4e, 0x52, + 0x03, 0xe5, 0xff, 0x06, 0x4a, 0x50, 0x59, 0x03, + 0xa9, 0x20, 0x06, 0x4b, 0x52, 0x57, 0x06, 0x4d, + 0x58, 0x24, 0x06, 0x4d, 0x58, 0x4e, 0x06, 0x4e, + 0x5a, 0x24, 0x06, 0x4e, 0x5a, 0x44, 0x03, 0x3f, + 0x0e, 0x06, 0x54, 0x48, 0x42, 0x06, 0x4e, 0x54, + 0x24, 0x06, 0x54, 0x57, 0x44, 0x02, 0x24, 0x06, + 0x55, 0x53, 0x44, 0x03, 0xab, 0x20, 0x06, 0x56, + 0x4e, 0x44, 0x08, 0x46, 0x43, 0x46, 0x41, 0x06, + 0x58, 0x41, 0x46, 0x06, 0x45, 0x43, 0x24, 0x06, + 0x58, 0x43, 0x44, 0x06, 0x43, 0x46, 0x41, 0x06, + 0x58, 0x4f, 0x46, 0x08, 0x43, 0x46, 0x50, 0x46, + 0x06, 0x58, 0x50, 0x46, 0x14, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x58, + 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, + 0x6c, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, + 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x6a, 0x73, + 0x6f, 0x6e, 0x70, 0x2f, 0x6a, 0x61, 0x2d, 0x4a, + 0x50, 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, + 0x9e, 0x01, 0x00, 0x01, 0x00, 0x27, 0x00, 0xa1, + 0x01, 0xdc, 0x6a, 0x01, 0xa0, 0x01, 0x00, 0x00, + 0x00, 0x39, 0xd0, 0x00, 0x00, 0x00, 0x43, 0xd1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd2, 0x00, 0x00, + 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd4, 0x00, 0x00, 0x00, 0x04, 0xd5, 0x00, 0x00, + 0x00, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x04, 0xd7, + 0x00, 0x00, 0x00, 0x04, 0xd8, 0x00, 0x00, 0x00, + 0x04, 0xd9, 0x00, 0x00, 0x00, 0x04, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xdb, 0x00, 0x00, 0x00, 0x04, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, + 0x00, 0x04, 0xde, 0x00, 0x00, 0x00, 0x04, 0xdf, + 0x00, 0x00, 0x00, 0x04, 0xe0, 0x00, 0x00, 0x00, + 0x04, 0xe1, 0x00, 0x00, 0x00, 0x04, 0xe2, 0x00, + 0x00, 0x00, 0x26, 0x0f, 0x00, 0x4d, 0xe3, 0x00, + 0x00, 0x00, 0x09, 0x4d, 0xe4, 0x00, 0x00, 0x00, + 0x09, 0x4d, 0xe5, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xe9, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xec, 0x00, + 0x00, 0x00, 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, + 0xee, 0x00, 0x00, 0x00, 0x04, 0xef, 0x00, 0x00, + 0x00, 0x4d, 0xf0, 0x00, 0x00, 0x00, 0x04, 0xf1, + 0x00, 0x00, 0x00, 0x4d, 0xf2, 0x00, 0x00, 0x00, + 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, 0xf4, 0x00, + 0x00, 0x00, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, + 0xf6, 0x00, 0x00, 0x00, 0x04, 0xf7, 0x00, 0x00, + 0x00, 0x4d, 0xf8, 0x00, 0x00, 0x00, 0x04, 0xf9, + 0x00, 0x00, 0x00, 0x4d, 0xfa, 0x00, 0x00, 0x00, + 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, 0xfc, 0x00, + 0x00, 0x00, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, + 0xfe, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x01, 0x00, 0x00, 0x04, 0x01, + 0x01, 0x00, 0x00, 0x4d, 0x02, 0x01, 0x00, 0x00, + 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0x04, 0x01, + 0x00, 0x00, 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, + 0x06, 0x01, 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, + 0x00, 0x4d, 0x08, 0x01, 0x00, 0x00, 0x04, 0x09, + 0x01, 0x00, 0x00, 0x4d, 0x0a, 0x01, 0x00, 0x00, + 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, 0x0c, 0x01, + 0x00, 0x00, 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, + 0x0e, 0x01, 0x00, 0x00, 0x04, 0x0f, 0x01, 0x00, + 0x00, 0x4d, 0x10, 0x01, 0x00, 0x00, 0x04, 0x11, + 0x01, 0x00, 0x00, 0x4d, 0x12, 0x01, 0x00, 0x00, + 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, 0x14, 0x01, + 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, + 0x16, 0x01, 0x00, 0x00, 0x04, 0x17, 0x01, 0x00, + 0x00, 0x4d, 0x18, 0x01, 0x00, 0x00, 0x04, 0x19, + 0x01, 0x00, 0x00, 0x4d, 0x1a, 0x01, 0x00, 0x00, + 0x04, 0x1b, 0x01, 0x00, 0x00, 0x4d, 0x1c, 0x01, + 0x00, 0x00, 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, + 0x1e, 0x01, 0x00, 0x00, 0x04, 0x1f, 0x01, 0x00, + 0x00, 0x4d, 0x20, 0x01, 0x00, 0x00, 0x04, 0x19, + 0x01, 0x00, 0x00, 0x4d, 0x21, 0x01, 0x00, 0x00, + 0x04, 0x22, 0x01, 0x00, 0x00, 0x4d, 0x23, 0x01, + 0x00, 0x00, 0x04, 0x24, 0x01, 0x00, 0x00, 0x4d, + 0x25, 0x01, 0x00, 0x00, 0x04, 0x26, 0x01, 0x00, + 0x00, 0x4d, 0x27, 0x01, 0x00, 0x00, 0x04, 0x22, + 0x01, 0x00, 0x00, 0x4d, 0x28, 0x01, 0x00, 0x00, + 0x04, 0x29, 0x01, 0x00, 0x00, 0x4d, 0x2a, 0x01, + 0x00, 0x00, 0x04, 0x2b, 0x01, 0x00, 0x00, 0x4d, + 0x2c, 0x01, 0x00, 0x00, 0x04, 0x2d, 0x01, 0x00, + 0x00, 0x4d, 0x2e, 0x01, 0x00, 0x00, 0x04, 0x2f, + 0x01, 0x00, 0x00, 0x4d, 0x30, 0x01, 0x00, 0x00, + 0x04, 0x31, 0x01, 0x00, 0x00, 0x4d, 0x32, 0x01, + 0x00, 0x00, 0x04, 0x33, 0x01, 0x00, 0x00, 0x4d, + 0x34, 0x01, 0x00, 0x00, 0x04, 0x35, 0x01, 0x00, + 0x00, 0x4d, 0x36, 0x01, 0x00, 0x00, 0x04, 0x37, + 0x01, 0x00, 0x00, 0x4d, 0x38, 0x01, 0x00, 0x00, + 0x04, 0x39, 0x01, 0x00, 0x00, 0x4d, 0x3a, 0x01, + 0x00, 0x00, 0x04, 0x3b, 0x01, 0x00, 0x00, 0x4d, + 0x3c, 0x01, 0x00, 0x00, 0x04, 0x3d, 0x01, 0x00, + 0x00, 0x4d, 0x3e, 0x01, 0x00, 0x00, 0x04, 0x37, + 0x01, 0x00, 0x00, 0x4d, 0x3f, 0x01, 0x00, 0x00, + 0x04, 0x40, 0x01, 0x00, 0x00, 0x4d, 0x41, 0x01, + 0x00, 0x00, 0x04, 0x42, 0x01, 0x00, 0x00, 0x4d, + 0x42, 0x01, 0x00, 0x00, 0x4d, 0x43, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x3d, 0x01, 0x00, 0x00, 0x4d, + 0x44, 0x01, 0x00, 0x00, 0x04, 0x39, 0x01, 0x00, + 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, 0x04, 0x46, + 0x01, 0x00, 0x00, 0x4d, 0x3a, 0x01, 0x00, 0x00, + 0x04, 0x46, 0x01, 0x00, 0x00, 0x4d, 0x30, 0x01, + 0x00, 0x00, 0x4d, 0x47, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x4d, 0x49, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x4d, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x0f, 0x01, 0x00, + 0x00, 0x4d, 0x0e, 0x01, 0x00, 0x00, 0x04, 0x0b, + 0x01, 0x00, 0x00, 0x4d, 0x0a, 0x01, 0x00, 0x00, + 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x4d, 0x4d, 0x01, + 0x00, 0x00, 0x0b, 0x0b, 0x0b, 0xbe, 0x00, 0xbe, + 0x01, 0xbe, 0x02, 0xbe, 0x03, 0xbe, 0x04, 0xbe, + 0x05, 0xbe, 0x06, 0xbe, 0x07, 0xbe, 0x08, 0xbe, + 0x09, 0xbe, 0x0a, 0xbe, 0x0b, 0x26, 0x0c, 0x00, + 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x5b, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6a, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x6d, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x4d, 0x71, + 0x01, 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, + 0x4d, 0xd5, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, + 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, + 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, + 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, + 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, + 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, + 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x5b, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x6a, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x4d, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x4d, + 0x71, 0x01, 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x0c, 0xbe, 0x0d, 0xbe, 0x0e, 0xbe, 0x0f, + 0xbe, 0x10, 0xbe, 0x11, 0xbe, 0x12, 0xbe, 0x13, + 0xbe, 0x14, 0xbe, 0x15, 0xbe, 0x16, 0xbe, 0x17, + 0xbe, 0x18, 0x26, 0x0d, 0x00, 0x4d, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, + 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, + 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, + 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, + 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, + 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, + 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, + 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, + 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, + 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, + 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, + 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, + 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, + 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, + 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, + 0x97, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x5b, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x6a, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, + 0x04, 0x99, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x98, 0x01, + 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x6d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x4d, 0x71, 0x01, 0x00, + 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, + 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, + 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, + 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, + 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x5b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x6a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x4d, 0x71, 0x01, + 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x19, + 0xbe, 0x1a, 0xbe, 0x1b, 0xbe, 0x1c, 0xbe, 0x1d, + 0xbe, 0x1e, 0xbe, 0x1f, 0xbe, 0x20, 0xbe, 0x21, + 0xbe, 0x22, 0xbe, 0x23, 0xbe, 0x24, 0xbe, 0x25, + 0x26, 0x0d, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, + 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, + 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, + 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, + 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, + 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, + 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, + 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, + 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, + 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, + 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, + 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, + 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, + 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, + 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x5b, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x6a, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, + 0x04, 0x99, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6d, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x4d, 0x71, 0x01, 0x00, 0x00, 0x4d, + 0x72, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x26, 0xbe, 0x27, 0xbe, + 0x28, 0xbe, 0x29, 0xbe, 0x2a, 0xbe, 0x2b, 0xbe, + 0x2c, 0xbe, 0x2d, 0xbe, 0x2e, 0xbe, 0x2f, 0xbe, + 0x30, 0xbe, 0x31, 0xbe, 0x32, 0x26, 0x0d, 0x00, + 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, + 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, + 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, + 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, + 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, + 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, + 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, + 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, + 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x26, 0x0d, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x9a, + 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, + 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, + 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, + 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, + 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, + 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, + 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, + 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x5b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6a, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x98, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x98, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x6d, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x4d, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x4d, 0x71, 0x01, 0x00, 0x00, 0x4d, 0x72, 0x01, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x33, 0xbe, 0x34, 0xbe, 0x35, 0xbe, + 0x36, 0xbe, 0x37, 0xbe, 0x38, 0xbe, 0x39, 0xbe, + 0x3a, 0xbe, 0x3b, 0xbe, 0x3c, 0xbe, 0x3d, 0xbe, + 0x3e, 0x26, 0x0c, 0x00, 0x4d, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, + 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, + 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, + 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, + 0xad, 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, + 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, + 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, + 0x04, 0xb2, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa7, 0x01, + 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, + 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, + 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, + 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, + 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, + 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, + 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x5b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x6a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x98, + 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, + 0x99, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6d, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x4d, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x4d, 0x71, 0x01, 0x00, 0x00, 0x4d, 0x72, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x3f, 0xbe, 0x40, 0xbe, 0x41, + 0xbe, 0x42, 0xbe, 0x43, 0xbe, 0x44, 0xbe, 0x45, + 0xbe, 0x46, 0xbe, 0x47, 0xbe, 0x48, 0xbe, 0x49, + 0xbe, 0x4a, 0x26, 0x0c, 0x00, 0x4d, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x5b, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x6a, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, + 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, 0x04, 0xb6, + 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, + 0x04, 0xb8, 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, + 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, 0x26, + 0x04, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, + 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, + 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x6d, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x4d, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x4d, 0x71, 0x01, 0x00, 0x00, 0x4d, 0x72, 0x01, + 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x4b, 0xbe, 0x4c, 0xbe, 0x4d, 0xbe, + 0x4e, 0xbe, 0x4f, 0xbe, 0x50, 0xbe, 0x51, 0xbe, + 0x52, 0xbe, 0x53, 0xbe, 0x54, 0xbe, 0x55, 0xbe, + 0x56, 0xbe, 0x57, 0xbe, 0x58, 0x26, 0x0e, 0x00, + 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0xbb, 0x01, + 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, 0x04, + 0xbd, 0x01, 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, + 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, 0x04, 0xc0, + 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, + 0x04, 0xc2, 0x01, 0x00, 0x00, 0x04, 0xc3, 0x01, + 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, 0x04, + 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, + 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, + 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, + 0x04, 0xbc, 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, + 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, + 0xbf, 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, + 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, 0x04, 0xc2, + 0x01, 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, + 0x04, 0xc4, 0x01, 0x00, 0x00, 0x04, 0xc5, 0x01, + 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, + 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, + 0x00, 0x26, 0x0e, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x5b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x6a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xc9, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xc9, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6d, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x4d, 0x71, 0x01, 0x00, 0x00, 0x4d, + 0x72, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x59, 0xbe, 0x5a, 0xbe, + 0x5b, 0xbe, 0x5c, 0xbe, 0x5d, 0xbe, 0x5e, 0xbe, + 0x5f, 0xbe, 0x60, 0xbe, 0x61, 0xbe, 0x62, 0xbe, + 0x63, 0xbe, 0x64, 0x26, 0x0c, 0x00, 0x4d, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, + 0x04, 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, 0x01, + 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, 0x04, + 0xce, 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, + 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, 0xd1, + 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, + 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, + 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xca, 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, + 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, + 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, + 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, 0x01, + 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, 0x04, + 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, + 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, 0xd5, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x5b, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x6a, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xd6, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x6d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x4d, 0x71, 0x01, 0x00, + 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x65, 0xbe, + 0x66, 0xbe, 0x67, 0xbe, 0x68, 0xbe, 0x69, 0xbe, + 0x6a, 0xbe, 0x6b, 0xbe, 0x6c, 0xbe, 0x6d, 0xbe, + 0x6e, 0xbe, 0x6f, 0xbe, 0x70, 0x26, 0x0c, 0x00, + 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, + 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, + 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, + 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, + 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, + 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, + 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, + 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, 0xd8, + 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, + 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, + 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, 0x04, + 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, + 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, 0xe0, + 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, 0x00, + 0x04, 0xe2, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x5b, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6a, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0xe3, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x6d, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x4d, 0x71, + 0x01, 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x71, 0xbe, 0x72, 0xbe, 0x73, 0xbe, 0x74, 0xbe, + 0x75, 0xbe, 0x76, 0xbe, 0x77, 0xbe, 0x78, 0xbe, + 0x79, 0xbe, 0x7a, 0xbe, 0x7b, 0xbe, 0x7c, 0x26, + 0x0c, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0xd7, 0x01, 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, + 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, + 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, + 0x04, 0xdc, 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, + 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, + 0xdf, 0x01, 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, + 0x00, 0x04, 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, + 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, + 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, + 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, + 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, + 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, + 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, + 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x5b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6a, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xe3, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe3, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x6d, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x4d, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x4d, 0x71, 0x01, 0x00, 0x00, 0x4d, 0x72, 0x01, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x7d, 0xbe, 0x7e, 0xbe, 0x7f, 0xbe, + 0x80, 0xbe, 0x81, 0xbe, 0x82, 0xbe, 0x83, 0xbe, + 0x84, 0xbe, 0x85, 0xbe, 0x86, 0xbe, 0x87, 0xbe, + 0x88, 0x26, 0x0c, 0x00, 0x4d, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x5b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x6a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xe4, + 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, + 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, + 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, + 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, + 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, + 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, + 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, + 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, + 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, + 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, + 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, + 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, + 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, + 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, + 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, 0xfc, + 0x01, 0x00, 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, + 0x04, 0xfe, 0x01, 0x00, 0x00, 0x04, 0xff, 0x01, + 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x04, + 0x01, 0x02, 0x00, 0x00, 0x04, 0x02, 0x02, 0x00, + 0x00, 0x04, 0x03, 0x02, 0x00, 0x00, 0x26, 0x20, + 0x00, 0x04, 0x04, 0x02, 0x00, 0x00, 0x4d, 0x20, + 0x00, 0x00, 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, + 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, + 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, + 0x07, 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, + 0x80, 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, 0x24, + 0x00, 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, + 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, + 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, + 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, + 0x80, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x28, + 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, + 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, + 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, + 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, + 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x2c, + 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, + 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, + 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, + 0x13, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, + 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x30, + 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, + 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, + 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, + 0x17, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, + 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x34, + 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, + 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, + 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, + 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, + 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x38, + 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, + 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, + 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, + 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, + 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x3c, + 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, + 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, + 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, + 0x23, 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, + 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x40, + 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, + 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, + 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, + 0x27, 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, + 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x44, + 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, + 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, + 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, + 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, + 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x48, + 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, + 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, + 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, + 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, + 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x4c, + 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, + 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, + 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, + 0x33, 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, + 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x50, + 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, + 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, + 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, + 0x37, 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, + 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x54, + 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, + 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, + 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, + 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, + 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x58, + 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, + 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, + 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, + 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, + 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x5c, + 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, + 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, + 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, + 0x43, 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, + 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x60, + 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, + 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, + 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, + 0x47, 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, + 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x64, + 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, + 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, + 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, + 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, + 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x68, + 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, + 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, + 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, + 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, + 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x6c, + 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, + 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, + 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, + 0x53, 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, + 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x70, + 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, + 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, + 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, + 0x57, 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, + 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x74, + 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, + 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, + 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, + 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, + 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x78, + 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, + 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, + 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, + 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, + 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x7c, + 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, + 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, + 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, + 0x63, 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, + 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x80, + 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, + 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, + 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, + 0x67, 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, + 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x84, + 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, + 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, + 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, + 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, + 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x88, + 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, + 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, + 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, + 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, + 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x8c, + 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, + 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, + 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, + 0x73, 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, + 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x90, + 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, + 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, + 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, + 0x77, 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, + 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x94, + 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, + 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, + 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, + 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, + 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x98, + 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, + 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, + 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, + 0x7f, 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, + 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0x9c, + 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, + 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, + 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, + 0x83, 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, + 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0xa0, + 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, + 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, + 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, + 0x87, 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, + 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0xa4, + 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, + 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, + 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, + 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, + 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xa8, + 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, + 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, + 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, + 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, + 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xac, + 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, + 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, + 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, + 0x93, 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, + 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xb0, + 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, + 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, + 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, + 0x97, 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, + 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xb4, + 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, + 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, + 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, + 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, + 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xb8, + 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, + 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, + 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, + 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, + 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xbc, + 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, + 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, + 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, + 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, + 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xc0, + 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, + 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, + 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, + 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, + 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xc4, + 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, + 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, + 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, + 0xab, 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, + 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xc8, + 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, + 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, + 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, + 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, + 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xcc, + 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, + 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, + 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, + 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, + 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xd0, + 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, + 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, + 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, + 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, + 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xd4, + 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, + 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, + 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, + 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, + 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, + 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, + 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, + 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, + 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, + 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x80, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xe4, + 0x00, 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, + 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, + 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, + 0xcb, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x80, 0x04, 0x1a, 0x01, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, 0x00, + 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0xcd, 0x02, + 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, + 0x08, 0x01, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x80, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0xe4, + 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, + 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, + 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, + 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, + 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, + 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, + 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, + 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, + 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, + 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, + 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, + 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, + 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, + 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, + 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, 0xfc, + 0x01, 0x00, 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, + 0x04, 0xfe, 0x01, 0x00, 0x00, 0x04, 0xff, 0x01, + 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x04, + 0x01, 0x02, 0x00, 0x00, 0x04, 0x02, 0x02, 0x00, + 0x00, 0x04, 0x03, 0x02, 0x00, 0x00, 0x26, 0x20, + 0x00, 0x04, 0x04, 0x02, 0x00, 0x00, 0x4d, 0x20, + 0x00, 0x00, 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, + 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, + 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, + 0x07, 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, + 0x80, 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, 0x24, + 0x00, 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, + 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, + 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, + 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, + 0x80, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x28, + 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, + 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, + 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, + 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, + 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x2c, + 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, + 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, + 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, + 0x13, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, + 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x30, + 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, + 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, + 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, + 0x17, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, + 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x34, + 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, + 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, + 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, + 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, + 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x38, + 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, + 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, + 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, + 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, + 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x3c, + 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, + 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, + 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, + 0x23, 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, + 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x40, + 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, + 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, + 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, + 0x27, 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, + 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x44, + 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, + 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, + 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, + 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, + 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x48, + 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, + 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, + 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, + 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, + 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x4c, + 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, + 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, + 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, + 0x33, 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, + 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x50, + 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, + 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, + 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, + 0x37, 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, + 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x54, + 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, + 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, + 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, + 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, + 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x58, + 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, + 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, + 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, + 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, + 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x5c, + 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, + 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, + 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, + 0x43, 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, + 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x60, + 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, + 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, + 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, + 0x47, 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, + 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x64, + 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, + 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, + 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, + 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, + 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x68, + 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, + 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, + 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, + 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, + 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x6c, + 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, + 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, + 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, + 0x53, 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, + 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x70, + 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, + 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, + 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, + 0x57, 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, + 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x74, + 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, + 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, + 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, + 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, + 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x78, + 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, + 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, + 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, + 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, + 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x7c, + 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, + 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, + 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, + 0x63, 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, + 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x80, + 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, + 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, + 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, + 0x67, 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, + 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x84, + 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, + 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, + 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, + 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, + 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x88, + 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, + 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, + 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, + 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, + 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x8c, + 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, + 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, + 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, + 0x73, 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, + 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x90, + 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, + 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, + 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, + 0x77, 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, + 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x94, + 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, + 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, + 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, + 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, + 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x98, + 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, + 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, + 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, + 0x7f, 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, + 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0x9c, + 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, + 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, + 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, + 0x83, 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, + 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0xa0, + 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, + 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, + 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, + 0x87, 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, + 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0xa4, + 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, + 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, + 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, + 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, + 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xa8, + 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, + 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, + 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, + 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, + 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xac, + 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, + 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, + 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, + 0x93, 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, + 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xb0, + 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, + 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, + 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, + 0x97, 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, + 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xb4, + 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, + 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, + 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, + 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, + 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xb8, + 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, + 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, + 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, + 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, + 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xbc, + 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, + 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, + 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, + 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, + 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xc0, + 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, + 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, + 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, + 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, + 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xc4, + 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, + 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, + 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, + 0xab, 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, + 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xc8, + 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, + 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, + 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, + 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, + 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xcc, + 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, + 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, + 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, + 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, + 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xd0, + 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, + 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, + 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, + 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, + 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xd4, + 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, + 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, + 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, + 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, + 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, + 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, + 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, + 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, + 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, + 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x80, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xe4, + 0x00, 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, + 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, + 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, + 0xcb, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x80, 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, + 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0xd0, 0x02, + 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, + 0xd1, 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x80, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe4, + 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, + 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, + 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, + 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, + 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, + 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, + 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, + 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, + 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, + 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, + 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, + 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, + 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, + 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, + 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, 0xfc, + 0x01, 0x00, 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, + 0x04, 0xfe, 0x01, 0x00, 0x00, 0x04, 0xff, 0x01, + 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x04, + 0x01, 0x02, 0x00, 0x00, 0x04, 0x02, 0x02, 0x00, + 0x00, 0x04, 0x03, 0x02, 0x00, 0x00, 0x26, 0x20, + 0x00, 0x04, 0x04, 0x02, 0x00, 0x00, 0x4d, 0x20, + 0x00, 0x00, 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, + 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, + 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, + 0x07, 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, + 0x80, 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, 0x24, + 0x00, 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, + 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, + 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, + 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, + 0x80, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x28, + 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, + 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, + 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, + 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, + 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x2c, + 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, + 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, + 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, + 0x13, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, + 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x30, + 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, + 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, + 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, + 0x17, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, + 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x34, + 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, + 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, + 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, + 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, + 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x38, + 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, + 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, + 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, + 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, + 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x3c, + 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, + 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, + 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, + 0x23, 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, + 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x40, + 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, + 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, + 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, + 0x27, 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, + 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x44, + 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, + 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, + 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, + 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, + 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x48, + 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, + 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, + 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, + 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, + 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x4c, + 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, + 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, + 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, + 0x33, 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, + 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x50, + 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, + 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, + 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, + 0x37, 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, + 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x54, + 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, + 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, + 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, + 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, + 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x58, + 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, + 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, + 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, + 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, + 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x5c, + 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, + 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, + 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, + 0x43, 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, + 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x60, + 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, + 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, + 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, + 0x47, 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, + 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x64, + 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, + 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, + 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, + 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, + 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x68, + 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, + 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, + 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, + 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, + 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x6c, + 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, + 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, + 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, + 0x53, 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, + 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x70, + 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, + 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, + 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, + 0x57, 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, + 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x74, + 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, + 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, + 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, + 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, + 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x78, + 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, + 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, + 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, + 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, + 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x7c, + 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, + 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, + 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, + 0x63, 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, + 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x80, + 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, + 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, + 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, + 0x67, 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, + 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x84, + 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, + 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, + 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, + 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, + 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x88, + 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, + 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, + 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, + 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, + 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x8c, + 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, + 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, + 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, + 0x73, 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, + 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x90, + 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, + 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, + 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, + 0x77, 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, + 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x94, + 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, + 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, + 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, + 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, + 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x98, + 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, + 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, + 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, + 0x7f, 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, + 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0x9c, + 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, + 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, + 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, + 0x83, 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, + 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0xa0, + 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, + 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, + 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, + 0x87, 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, + 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0xa4, + 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, + 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, + 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, + 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, + 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xa8, + 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, + 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, + 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, + 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, + 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xac, + 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, + 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, + 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, + 0x93, 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, + 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xb0, + 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, + 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, + 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, + 0x97, 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, + 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xb4, + 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, + 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, + 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, + 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, + 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xb8, + 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, + 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, + 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, + 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, + 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xbc, + 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, + 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, + 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, + 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, + 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xc0, + 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, + 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, + 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, + 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, + 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xc4, + 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, + 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, + 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, + 0xab, 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, + 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xc8, + 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, + 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, + 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, + 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, + 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xcc, + 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, + 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, + 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, + 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, + 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xd0, + 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, + 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, + 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, + 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, + 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xd4, + 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, + 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, + 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, + 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, + 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, + 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, + 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, + 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, + 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, + 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x80, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xe4, + 0x00, 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, + 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, + 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, + 0xcb, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x80, 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, + 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0xd0, 0x02, + 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, + 0xd1, 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x80, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6d, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x4d, 0x71, 0x01, 0x00, 0x00, + 0x4d, 0x72, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x89, 0xbe, 0x8a, + 0xbe, 0x8b, 0xbe, 0x8c, 0xbe, 0x8d, 0xbe, 0x8e, + 0xbe, 0x8f, 0xbe, 0x90, 0xbe, 0x91, 0xbe, 0x92, + 0xbe, 0x93, 0xbe, 0x94, 0x26, 0x0c, 0x00, 0x4d, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0xd2, 0x02, 0x00, + 0x00, 0x04, 0xd3, 0x02, 0x00, 0x00, 0x04, 0xd4, + 0x02, 0x00, 0x00, 0x04, 0xd5, 0x02, 0x00, 0x00, + 0x04, 0xd6, 0x02, 0x00, 0x00, 0x04, 0xd7, 0x02, + 0x00, 0x00, 0x04, 0xd8, 0x02, 0x00, 0x00, 0x04, + 0xd9, 0x02, 0x00, 0x00, 0x04, 0xda, 0x02, 0x00, + 0x00, 0x04, 0xdb, 0x02, 0x00, 0x00, 0x04, 0xdc, + 0x02, 0x00, 0x00, 0x04, 0xdd, 0x02, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xd2, 0x02, 0x00, 0x00, 0x04, 0xd3, 0x02, + 0x00, 0x00, 0x04, 0xd4, 0x02, 0x00, 0x00, 0x04, + 0xd5, 0x02, 0x00, 0x00, 0x04, 0xd6, 0x02, 0x00, + 0x00, 0x04, 0xd7, 0x02, 0x00, 0x00, 0x04, 0xd8, + 0x02, 0x00, 0x00, 0x04, 0xd9, 0x02, 0x00, 0x00, + 0x04, 0xda, 0x02, 0x00, 0x00, 0x04, 0xdb, 0x02, + 0x00, 0x00, 0x04, 0xdc, 0x02, 0x00, 0x00, 0x04, + 0xdd, 0x02, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x5b, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x6a, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xde, 0x02, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0xde, + 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xde, 0x02, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x6d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x4d, 0x71, 0x01, + 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x95, + 0xbe, 0x96, 0xbe, 0x97, 0xbe, 0x98, 0xbe, 0x99, + 0xbe, 0x9a, 0xbe, 0x9b, 0xbe, 0x9c, 0xbe, 0x9d, + 0xbe, 0x9e, 0xbe, 0x9f, 0xbe, 0xa0, 0x26, 0x0c, + 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x5b, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6a, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xdf, 0x02, 0x00, 0x00, + 0x04, 0xe0, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0xdf, 0x02, + 0x00, 0x00, 0x04, 0xe0, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xdf, 0x02, 0x00, 0x00, 0x04, 0xe0, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x6d, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x4d, 0x71, + 0x01, 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, + 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x02, + 0x00, 0x00, 0x4d, 0xe2, 0x02, 0x00, 0x00, 0x0b, + 0x04, 0xe3, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe4, 0x02, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0xe5, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x02, 0x00, + 0x00, 0x04, 0xe7, 0x02, 0x00, 0x00, 0x4d, 0xe8, + 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x02, 0x00, 0x00, + 0x0b, 0x04, 0xea, 0x02, 0x00, 0x00, 0x4d, 0xe6, + 0x02, 0x00, 0x00, 0x04, 0xeb, 0x02, 0x00, 0x00, + 0x4d, 0xe8, 0x02, 0x00, 0x00, 0x4d, 0xec, 0x02, + 0x00, 0x00, 0x0b, 0x04, 0xed, 0x02, 0x00, 0x00, + 0x4d, 0xe6, 0x02, 0x00, 0x00, 0x04, 0xee, 0x02, + 0x00, 0x00, 0x4d, 0xe8, 0x02, 0x00, 0x00, 0x4d, + 0xef, 0x02, 0x00, 0x00, 0x4d, 0xf0, 0x02, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0xf1, 0x02, 0x00, 0x00, + 0x4d, 0xe9, 0x02, 0x00, 0x00, 0x04, 0xf2, 0x02, + 0x00, 0x00, 0x4d, 0xf3, 0x02, 0x00, 0x00, 0x04, + 0xf4, 0x02, 0x00, 0x00, 0x4d, 0xf5, 0x02, 0x00, + 0x00, 0x04, 0xf6, 0x02, 0x00, 0x00, 0x4d, 0xf7, + 0x02, 0x00, 0x00, 0x04, 0xf8, 0x02, 0x00, 0x00, + 0x4d, 0xf9, 0x02, 0x00, 0x00, 0x04, 0xfa, 0x02, + 0x00, 0x00, 0x4d, 0xfb, 0x02, 0x00, 0x00, 0x04, + 0xfc, 0x02, 0x00, 0x00, 0x4d, 0xfd, 0x02, 0x00, + 0x00, 0x4d, 0xe3, 0x02, 0x00, 0x00, 0x4d, 0xfe, + 0x02, 0x00, 0x00, 0x0b, 0x04, 0xff, 0x02, 0x00, + 0x00, 0x4d, 0x00, 0x03, 0x00, 0x00, 0x04, 0x01, + 0x03, 0x00, 0x00, 0x4d, 0x02, 0x03, 0x00, 0x00, + 0x04, 0x03, 0x03, 0x00, 0x00, 0x4d, 0x04, 0x03, + 0x00, 0x00, 0x04, 0x05, 0x03, 0x00, 0x00, 0x4d, + 0x06, 0x03, 0x00, 0x00, 0x04, 0x07, 0x03, 0x00, + 0x00, 0x4d, 0x08, 0x03, 0x00, 0x00, 0x04, 0x09, + 0x03, 0x00, 0x00, 0x4d, 0x0a, 0x03, 0x00, 0x00, + 0x04, 0x0b, 0x03, 0x00, 0x00, 0x4d, 0x0c, 0x03, + 0x00, 0x00, 0x04, 0x0d, 0x03, 0x00, 0x00, 0x4d, + 0x0e, 0x03, 0x00, 0x00, 0x04, 0x0f, 0x03, 0x00, + 0x00, 0x4d, 0x10, 0x03, 0x00, 0x00, 0x04, 0x11, + 0x03, 0x00, 0x00, 0x4d, 0x12, 0x03, 0x00, 0x00, + 0x04, 0x13, 0x03, 0x00, 0x00, 0x4d, 0x14, 0x03, + 0x00, 0x00, 0x04, 0x15, 0x03, 0x00, 0x00, 0x4d, + 0x16, 0x03, 0x00, 0x00, 0x04, 0x17, 0x03, 0x00, + 0x00, 0x4d, 0x18, 0x03, 0x00, 0x00, 0x04, 0x19, + 0x03, 0x00, 0x00, 0x4d, 0x1a, 0x03, 0x00, 0x00, + 0x04, 0x1b, 0x03, 0x00, 0x00, 0x4d, 0x1c, 0x03, + 0x00, 0x00, 0x04, 0x1d, 0x03, 0x00, 0x00, 0x4d, + 0x1e, 0x03, 0x00, 0x00, 0x04, 0x1f, 0x03, 0x00, + 0x00, 0x4d, 0x20, 0x03, 0x00, 0x00, 0x04, 0x21, + 0x03, 0x00, 0x00, 0x4d, 0x22, 0x03, 0x00, 0x00, + 0x04, 0x23, 0x03, 0x00, 0x00, 0x4d, 0x24, 0x03, + 0x00, 0x00, 0x04, 0x25, 0x03, 0x00, 0x00, 0x4d, + 0x26, 0x03, 0x00, 0x00, 0x04, 0x27, 0x03, 0x00, + 0x00, 0x4d, 0x28, 0x03, 0x00, 0x00, 0x4d, 0x29, + 0x03, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x00, + 0x24, 0x01, 0x00, 0xcc, 0x28, 0xd4, 0x0c, 0x01, + 0x00, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, + 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, + 0x31, 0x33, 0x07, 0x02, 0x37, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_ka_size = 24916; + +const uint8_t intl_ka[24916] = { + 0x01, 0xc7, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x6b, 0x61, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x10, + 0x7b, 0x31, 0x7d, 0x2c, 0x20, 0x7b, 0x30, 0x7d, + 0x0a, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, + 0x65, 0x64, 0x69, 0x75, 0x6d, 0x08, 0x66, 0x75, + 0x6c, 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x02, + 0x64, 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, 0x06, + 0x64, 0x20, 0x45, 0x04, 0x45, 0x64, 0x12, 0x45, + 0x2c, 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, + 0x06, 0x45, 0x68, 0x6d, 0x10, 0x45, 0x2c, 0x20, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x06, 0x45, 0x48, + 0x6d, 0x18, 0x45, 0x2c, 0x20, 0x68, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x08, 0x45, + 0x68, 0x6d, 0x73, 0x16, 0x45, 0x2c, 0x20, 0x48, + 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x08, + 0x45, 0x48, 0x6d, 0x73, 0x06, 0x79, 0x20, 0x47, + 0x04, 0x47, 0x79, 0x10, 0x4d, 0x4d, 0x4d, 0x2e, + 0x20, 0x79, 0x20, 0x47, 0x0a, 0x47, 0x79, 0x4d, + 0x4d, 0x4d, 0x14, 0x64, 0x20, 0x4d, 0x4d, 0x4d, + 0x2e, 0x20, 0x79, 0x20, 0x47, 0x0c, 0x47, 0x79, + 0x4d, 0x4d, 0x4d, 0x64, 0x1a, 0x45, 0x2c, 0x20, + 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x2e, 0x20, 0x79, + 0x20, 0x47, 0x0e, 0x47, 0x79, 0x4d, 0x4d, 0x4d, + 0x45, 0x64, 0x06, 0x68, 0x20, 0x61, 0x02, 0x68, + 0x04, 0x48, 0x48, 0x02, 0x48, 0x0c, 0x68, 0x3a, + 0x6d, 0x6d, 0x20, 0x61, 0x04, 0x68, 0x6d, 0x0a, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x04, 0x48, 0x6d, + 0x12, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x61, 0x06, 0x68, 0x6d, 0x73, 0x10, 0x48, + 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x06, + 0x48, 0x6d, 0x73, 0x16, 0x68, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x61, 0x20, 0x76, 0x08, + 0x68, 0x6d, 0x73, 0x76, 0x14, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x76, 0x08, + 0x48, 0x6d, 0x73, 0x76, 0x10, 0x68, 0x3a, 0x6d, + 0x6d, 0x20, 0x61, 0x20, 0x76, 0x06, 0x68, 0x6d, + 0x76, 0x0e, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x20, + 0x76, 0x06, 0x48, 0x6d, 0x76, 0x02, 0x4c, 0x02, + 0x4d, 0x06, 0x64, 0x2e, 0x4d, 0x04, 0x4d, 0x64, + 0x0c, 0x45, 0x2c, 0x20, 0x64, 0x2e, 0x4d, 0x06, + 0x4d, 0x45, 0x64, 0x06, 0x4c, 0x4c, 0x4c, 0x06, + 0x4d, 0x4d, 0x4d, 0x0a, 0x64, 0x20, 0x4d, 0x4d, + 0x4d, 0x08, 0x4d, 0x4d, 0x4d, 0x64, 0x10, 0x45, + 0x2c, 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x0a, + 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0c, 0x64, 0x20, + 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, + 0x4d, 0x64, 0x0a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x04, 0x6d, 0x73, 0x02, 0x79, 0x06, 0x4d, 0x2e, + 0x79, 0x04, 0x79, 0x4d, 0x0a, 0x64, 0x2e, 0x4d, + 0x2e, 0x79, 0x06, 0x79, 0x4d, 0x64, 0x10, 0x45, + 0x2c, 0x20, 0x64, 0x2e, 0x4d, 0x2e, 0x79, 0x08, + 0x79, 0x4d, 0x45, 0x64, 0x0c, 0x4d, 0x4d, 0x4d, + 0x2e, 0x20, 0x79, 0x08, 0x79, 0x4d, 0x4d, 0x4d, + 0x10, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x2e, 0x20, + 0x79, 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x16, + 0x45, 0x2c, 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, + 0x2e, 0x20, 0x79, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, + 0x45, 0x64, 0x0e, 0x4d, 0x4d, 0x4d, 0x4d, 0x2c, + 0x20, 0x79, 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, + 0x0c, 0x51, 0x51, 0x51, 0x2c, 0x20, 0x79, 0x08, + 0x79, 0x51, 0x51, 0x51, 0x0e, 0x51, 0x51, 0x51, + 0x51, 0x2c, 0x20, 0x79, 0x0a, 0x79, 0x51, 0x51, + 0x51, 0x51, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, + 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x73, 0x20, 0x45, 0x45, 0x45, 0x45, + 0x2c, 0x20, 0x64, 0x64, 0x20, 0x4d, 0x4d, 0x4d, + 0x4d, 0x2c, 0x20, 0x79, 0x14, 0x79, 0x4d, 0x4d, + 0x4d, 0x4d, 0x45, 0x45, 0x45, 0x45, 0x64, 0x12, + 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x2c, 0x20, + 0x79, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, + 0x10, 0x64, 0x64, 0x2e, 0x4d, 0x4d, 0x2e, 0x79, + 0x79, 0x16, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x73, 0x1a, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x7a, + 0x7a, 0x7a, 0x7a, 0x12, 0x68, 0x6d, 0x6d, 0x73, + 0x73, 0x7a, 0x7a, 0x7a, 0x7a, 0x14, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x7a, + 0x08, 0x68, 0x6d, 0x73, 0x7a, 0x16, 0x74, 0x69, + 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x73, 0x0e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x73, 0x03, 0xd8, 0x10, 0x03, 0xd7, 0x10, 0x03, + 0xdb, 0x10, 0x03, 0xd0, 0x10, 0x03, 0xe1, 0x10, + 0x03, 0xdd, 0x10, 0x03, 0xdc, 0x10, 0x03, 0xd3, + 0x10, 0x0c, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x07, 0xd8, 0x10, 0xd0, 0x10, 0xdc, 0x10, 0x07, + 0xd7, 0x10, 0xd4, 0x10, 0xd1, 0x10, 0x07, 0xdb, + 0x10, 0xd0, 0x10, 0xe0, 0x10, 0x07, 0xd0, 0x10, + 0xde, 0x10, 0xe0, 0x10, 0x07, 0xdb, 0x10, 0xd0, + 0x10, 0xd8, 0x10, 0x07, 0xd8, 0x10, 0xd5, 0x10, + 0xdc, 0x10, 0x07, 0xd8, 0x10, 0xd5, 0x10, 0xda, + 0x10, 0x07, 0xd0, 0x10, 0xd2, 0x10, 0xd5, 0x10, + 0x07, 0xe1, 0x10, 0xd4, 0x10, 0xe5, 0x10, 0x07, + 0xdd, 0x10, 0xe5, 0x10, 0xe2, 0x10, 0x07, 0xdc, + 0x10, 0xdd, 0x10, 0xd4, 0x10, 0x07, 0xd3, 0x10, + 0xd4, 0x10, 0xd9, 0x10, 0x0f, 0xd8, 0x10, 0xd0, + 0x10, 0xdc, 0x10, 0xd5, 0x10, 0xd0, 0x10, 0xe0, + 0x10, 0xd8, 0x10, 0x13, 0xd7, 0x10, 0xd4, 0x10, + 0xd1, 0x10, 0xd4, 0x10, 0xe0, 0x10, 0xd5, 0x10, + 0xd0, 0x10, 0xda, 0x10, 0xd8, 0x10, 0x0b, 0xdb, + 0x10, 0xd0, 0x10, 0xe0, 0x10, 0xe2, 0x10, 0xd8, + 0x10, 0x0d, 0xd0, 0x10, 0xde, 0x10, 0xe0, 0x10, + 0xd8, 0x10, 0xda, 0x10, 0xd8, 0x10, 0x0b, 0xdb, + 0x10, 0xd0, 0x10, 0xd8, 0x10, 0xe1, 0x10, 0xd8, + 0x10, 0x0d, 0xd8, 0x10, 0xd5, 0x10, 0xdc, 0x10, + 0xd8, 0x10, 0xe1, 0x10, 0xd8, 0x10, 0x0d, 0xd8, + 0x10, 0xd5, 0x10, 0xda, 0x10, 0xd8, 0x10, 0xe1, + 0x10, 0xd8, 0x10, 0x0f, 0xd0, 0x10, 0xd2, 0x10, + 0xd5, 0x10, 0xd8, 0x10, 0xe1, 0x10, 0xe2, 0x10, + 0xdd, 0x10, 0x15, 0xe1, 0x10, 0xd4, 0x10, 0xe5, + 0x10, 0xe2, 0x10, 0xd4, 0x10, 0xdb, 0x10, 0xd1, + 0x10, 0xd4, 0x10, 0xe0, 0x10, 0xd8, 0x10, 0x13, + 0xdd, 0x10, 0xe5, 0x10, 0xe2, 0x10, 0xdd, 0x10, + 0xdb, 0x10, 0xd1, 0x10, 0xd4, 0x10, 0xe0, 0x10, + 0xd8, 0x10, 0x11, 0xdc, 0x10, 0xdd, 0x10, 0xd4, + 0x10, 0xdb, 0x10, 0xd1, 0x10, 0xd4, 0x10, 0xe0, + 0x10, 0xd8, 0x10, 0x13, 0xd3, 0x10, 0xd4, 0x10, + 0xd9, 0x10, 0xd4, 0x10, 0xdb, 0x10, 0xd1, 0x10, + 0xd4, 0x10, 0xe0, 0x10, 0xd8, 0x10, 0x0c, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x73, 0x03, 0xd9, 0x10, + 0x03, 0xee, 0x10, 0x03, 0xde, 0x10, 0x03, 0xe8, + 0x10, 0x07, 0xd9, 0x10, 0xd5, 0x10, 0xd8, 0x10, + 0x07, 0xdd, 0x10, 0xe0, 0x10, 0xe8, 0x10, 0x07, + 0xe1, 0x10, 0xd0, 0x10, 0xdb, 0x10, 0x07, 0xdd, + 0x10, 0xd7, 0x10, 0xee, 0x10, 0x07, 0xee, 0x10, + 0xe3, 0x10, 0xd7, 0x10, 0x07, 0xde, 0x10, 0xd0, + 0x10, 0xe0, 0x10, 0x07, 0xe8, 0x10, 0xd0, 0x10, + 0xd1, 0x10, 0x0b, 0xd9, 0x10, 0xd5, 0x10, 0xd8, + 0x10, 0xe0, 0x10, 0xd0, 0x10, 0x11, 0xdd, 0x10, + 0xe0, 0x10, 0xe8, 0x10, 0xd0, 0x10, 0xd1, 0x10, + 0xd0, 0x10, 0xd7, 0x10, 0xd8, 0x10, 0x13, 0xe1, + 0x10, 0xd0, 0x10, 0xdb, 0x10, 0xe8, 0x10, 0xd0, + 0x10, 0xd1, 0x10, 0xd0, 0x10, 0xd7, 0x10, 0xd8, + 0x10, 0x13, 0xdd, 0x10, 0xd7, 0x10, 0xee, 0x10, + 0xe8, 0x10, 0xd0, 0x10, 0xd1, 0x10, 0xd0, 0x10, + 0xd7, 0x10, 0xd8, 0x10, 0x13, 0xee, 0x10, 0xe3, + 0x10, 0xd7, 0x10, 0xe8, 0x10, 0xd0, 0x10, 0xd1, + 0x10, 0xd0, 0x10, 0xd7, 0x10, 0xd8, 0x10, 0x13, + 0xde, 0x10, 0xd0, 0x10, 0xe0, 0x10, 0xd0, 0x10, + 0xe1, 0x10, 0xd9, 0x10, 0xd4, 0x10, 0xd5, 0x10, + 0xd8, 0x10, 0x0d, 0xe8, 0x10, 0xd0, 0x10, 0xd1, + 0x10, 0xd0, 0x10, 0xd7, 0x10, 0xd8, 0x10, 0x08, + 0x64, 0x61, 0x79, 0x73, 0x04, 0x42, 0x45, 0x08, + 0x65, 0x72, 0x61, 0x73, 0x04, 0x41, 0x4d, 0x04, + 0x61, 0x6d, 0x04, 0x50, 0x4d, 0x04, 0x70, 0x6d, + 0x14, 0x64, 0x61, 0x79, 0x50, 0x65, 0x72, 0x69, + 0x6f, 0x64, 0x73, 0x06, 0x4d, 0x30, 0x31, 0x06, + 0x4d, 0x30, 0x32, 0x06, 0x4d, 0x30, 0x33, 0x06, + 0x4d, 0x30, 0x34, 0x06, 0x4d, 0x30, 0x35, 0x06, + 0x4d, 0x30, 0x36, 0x06, 0x4d, 0x30, 0x37, 0x06, + 0x4d, 0x30, 0x38, 0x06, 0x4d, 0x30, 0x39, 0x06, + 0x4d, 0x31, 0x30, 0x06, 0x4d, 0x31, 0x31, 0x06, + 0x4d, 0x31, 0x32, 0x08, 0x54, 0x6f, 0x75, 0x74, + 0x08, 0x42, 0x61, 0x62, 0x61, 0x0a, 0x48, 0x61, + 0x74, 0x6f, 0x72, 0x0a, 0x4b, 0x69, 0x61, 0x68, + 0x6b, 0x08, 0x54, 0x6f, 0x62, 0x61, 0x0c, 0x41, + 0x6d, 0x73, 0x68, 0x69, 0x72, 0x10, 0x42, 0x61, + 0x72, 0x61, 0x6d, 0x68, 0x61, 0x74, 0x12, 0x42, + 0x61, 0x72, 0x61, 0x6d, 0x6f, 0x75, 0x64, 0x61, + 0x0e, 0x42, 0x61, 0x73, 0x68, 0x61, 0x6e, 0x73, + 0x0a, 0x50, 0x61, 0x6f, 0x6e, 0x61, 0x08, 0x45, + 0x70, 0x65, 0x70, 0x0a, 0x4d, 0x65, 0x73, 0x72, + 0x61, 0x0a, 0x4e, 0x61, 0x73, 0x69, 0x65, 0x08, + 0x45, 0x52, 0x41, 0x30, 0x08, 0x45, 0x52, 0x41, + 0x31, 0x10, 0x4d, 0x65, 0x73, 0x6b, 0x65, 0x72, + 0x65, 0x6d, 0x0c, 0x54, 0x65, 0x6b, 0x65, 0x6d, + 0x74, 0x0a, 0x48, 0x65, 0x64, 0x61, 0x72, 0x0c, + 0x54, 0x61, 0x68, 0x73, 0x61, 0x73, 0x06, 0x54, + 0x65, 0x72, 0x0e, 0x59, 0x65, 0x6b, 0x61, 0x74, + 0x69, 0x74, 0x0e, 0x4d, 0x65, 0x67, 0x61, 0x62, + 0x69, 0x74, 0x0c, 0x4d, 0x69, 0x61, 0x7a, 0x69, + 0x61, 0x0c, 0x47, 0x65, 0x6e, 0x62, 0x6f, 0x74, + 0x08, 0x53, 0x65, 0x6e, 0x65, 0x0a, 0x48, 0x61, + 0x6d, 0x6c, 0x65, 0x0e, 0x4e, 0x65, 0x68, 0x61, + 0x73, 0x73, 0x65, 0x0e, 0x50, 0x61, 0x67, 0x75, + 0x6d, 0x65, 0x6e, 0x0d, 0xeb, 0x10, 0xd5, 0x10, + 0x2e, 0x00, 0x20, 0x00, 0xec, 0x10, 0x2e, 0x00, + 0x0d, 0xd0, 0x10, 0xee, 0x10, 0x2e, 0x00, 0x20, + 0x00, 0xec, 0x10, 0x2e, 0x00, 0x15, 0xe9, 0x10, + 0xd5, 0x10, 0x2e, 0x00, 0x20, 0x00, 0xd4, 0x10, + 0xe0, 0x10, 0xd0, 0x10, 0xdb, 0x10, 0xd3, 0x10, + 0xd4, 0x10, 0x0f, 0xe9, 0x10, 0xd5, 0x10, 0x2e, + 0x00, 0x20, 0x00, 0xd4, 0x10, 0xe0, 0x10, 0xd0, + 0x10, 0x27, 0xeb, 0x10, 0xd5, 0x10, 0xd4, 0x10, + 0xda, 0x10, 0xd8, 0x10, 0x20, 0x00, 0xec, 0x10, + 0xd4, 0x10, 0xda, 0x10, 0xd7, 0x10, 0xd0, 0x10, + 0xe6, 0x10, 0xe0, 0x10, 0xd8, 0x10, 0xea, 0x10, + 0xee, 0x10, 0xd5, 0x10, 0xd8, 0x10, 0xd7, 0x10, + 0x27, 0xd0, 0x10, 0xee, 0x10, 0xd0, 0x10, 0xda, + 0x10, 0xd8, 0x10, 0x20, 0x00, 0xec, 0x10, 0xd4, + 0x10, 0xda, 0x10, 0xd7, 0x10, 0xd0, 0x10, 0xe6, + 0x10, 0xe0, 0x10, 0xd8, 0x10, 0xea, 0x10, 0xee, + 0x10, 0xd5, 0x10, 0xd8, 0x10, 0xd7, 0x10, 0x19, + 0xe9, 0x10, 0xd5, 0x10, 0xd4, 0x10, 0xdc, 0x10, + 0xe1, 0x10, 0x20, 0x00, 0xd4, 0x10, 0xe0, 0x10, + 0xd0, 0x10, 0xdb, 0x10, 0xd3, 0x10, 0xd4, 0x10, + 0x13, 0xe9, 0x10, 0xd5, 0x10, 0xd4, 0x10, 0xdc, + 0x10, 0xd8, 0x10, 0x20, 0x00, 0xd4, 0x10, 0xe0, + 0x10, 0xd0, 0x10, 0x0c, 0x54, 0x69, 0x73, 0x68, + 0x72, 0x69, 0x0e, 0x48, 0x65, 0x73, 0x68, 0x76, + 0x61, 0x6e, 0x0c, 0x4b, 0x69, 0x73, 0x6c, 0x65, + 0x76, 0x0a, 0x54, 0x65, 0x76, 0x65, 0x74, 0x0c, + 0x53, 0x68, 0x65, 0x76, 0x61, 0x74, 0x0c, 0x41, + 0x64, 0x61, 0x72, 0x20, 0x49, 0x08, 0x41, 0x64, + 0x61, 0x72, 0x0a, 0x4e, 0x69, 0x73, 0x61, 0x6e, + 0x08, 0x49, 0x79, 0x61, 0x72, 0x0a, 0x53, 0x69, + 0x76, 0x61, 0x6e, 0x0a, 0x54, 0x61, 0x6d, 0x75, + 0x7a, 0x04, 0x41, 0x76, 0x08, 0x45, 0x6c, 0x75, + 0x6c, 0x0e, 0x41, 0x64, 0x61, 0x72, 0x20, 0x49, + 0x49, 0x0e, 0x43, 0x68, 0x61, 0x69, 0x74, 0x72, + 0x61, 0x10, 0x56, 0x61, 0x69, 0x73, 0x61, 0x6b, + 0x68, 0x61, 0x10, 0x4a, 0x79, 0x61, 0x69, 0x73, + 0x74, 0x68, 0x61, 0x0c, 0x41, 0x73, 0x61, 0x64, + 0x68, 0x61, 0x0e, 0x53, 0x72, 0x61, 0x76, 0x61, + 0x6e, 0x61, 0x0c, 0x42, 0x68, 0x61, 0x64, 0x72, + 0x61, 0x0c, 0x41, 0x73, 0x76, 0x69, 0x6e, 0x61, + 0x0e, 0x4b, 0x61, 0x72, 0x74, 0x69, 0x6b, 0x61, + 0x14, 0x41, 0x67, 0x72, 0x61, 0x68, 0x61, 0x79, + 0x61, 0x6e, 0x61, 0x0a, 0x50, 0x61, 0x75, 0x73, + 0x61, 0x0a, 0x4d, 0x61, 0x67, 0x68, 0x61, 0x10, + 0x50, 0x68, 0x61, 0x6c, 0x67, 0x75, 0x6e, 0x61, + 0x08, 0x53, 0x61, 0x6b, 0x61, 0x08, 0x4d, 0x75, + 0x68, 0x2e, 0x08, 0x53, 0x61, 0x66, 0x2e, 0x0c, + 0x52, 0x61, 0x62, 0x2e, 0x20, 0x49, 0x0e, 0x52, + 0x61, 0x62, 0x2e, 0x20, 0x49, 0x49, 0x0c, 0x4a, + 0x75, 0x6d, 0x2e, 0x20, 0x49, 0x0e, 0x4a, 0x75, + 0x6d, 0x2e, 0x20, 0x49, 0x49, 0x08, 0x52, 0x61, + 0x6a, 0x2e, 0x08, 0x53, 0x68, 0x61, 0x2e, 0x08, + 0x52, 0x61, 0x6d, 0x2e, 0x0a, 0x53, 0x68, 0x61, + 0x77, 0x2e, 0x11, 0x44, 0x00, 0x68, 0x00, 0x75, + 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x51, + 0x00, 0x2e, 0x00, 0x11, 0x44, 0x00, 0x68, 0x00, + 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, + 0x48, 0x00, 0x2e, 0x00, 0x10, 0x4d, 0x75, 0x68, + 0x61, 0x72, 0x72, 0x61, 0x6d, 0x0a, 0x53, 0x61, + 0x66, 0x61, 0x72, 0x0f, 0x52, 0x00, 0x61, 0x00, + 0x62, 0x00, 0x69, 0x00, 0xbb, 0x02, 0x20, 0x00, + 0x49, 0x00, 0x11, 0x52, 0x00, 0x61, 0x00, 0x62, + 0x00, 0x69, 0x00, 0xbb, 0x02, 0x20, 0x00, 0x49, + 0x00, 0x49, 0x00, 0x10, 0x4a, 0x75, 0x6d, 0x61, + 0x64, 0x61, 0x20, 0x49, 0x12, 0x4a, 0x75, 0x6d, + 0x61, 0x64, 0x61, 0x20, 0x49, 0x49, 0x0a, 0x52, + 0x61, 0x6a, 0x61, 0x62, 0x0f, 0x53, 0x00, 0x68, + 0x00, 0x61, 0x00, 0xbb, 0x02, 0x62, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x0e, 0x52, 0x61, 0x6d, 0x61, + 0x64, 0x61, 0x6e, 0x0e, 0x53, 0x68, 0x61, 0x77, + 0x77, 0x61, 0x6c, 0x19, 0x44, 0x00, 0x68, 0x00, + 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, + 0x51, 0x00, 0x69, 0x00, 0xbb, 0x02, 0x64, 0x00, + 0x61, 0x00, 0x68, 0x00, 0x19, 0x44, 0x00, 0x68, + 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, + 0x00, 0x48, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x6a, + 0x00, 0x61, 0x00, 0x68, 0x00, 0x04, 0x41, 0x48, + 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, 0x36, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x36, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x48, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x36, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x36, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, + 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x1d, 0x57, 0x00, 0x61, 0x00, 0x64, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, + 0x52, 0x00, 0x65, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, 0x59, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x2d, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6d, 0x00, + 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x2b, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x2d, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, 0x2d, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x2a, 0x4a, 0x69, + 0x6e, 0x67, 0x6f, 0x2d, 0x6b, 0x65, 0x69, 0x75, + 0x6e, 0x20, 0x28, 0x37, 0x36, 0x37, 0x2d, 0x37, + 0x37, 0x30, 0x29, 0x1d, 0x48, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x38, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x1f, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x2d, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x1f, 0x44, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1d, 0x4a, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x4b, + 0x00, 0x61, 0x00, 0x6a, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1f, 0x53, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x20, 0x54, 0x65, 0x6e, 0x2d, 0x61, 0x6e, + 0x20, 0x28, 0x38, 0x35, 0x37, 0x2d, 0x38, 0x35, + 0x39, 0x29, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x21, 0x47, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x61, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x1f, 0x45, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, + 0x4a, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1b, + 0x4c, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, + 0x41, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x1f, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, 0x45, + 0x00, 0x69, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, + 0x73, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x69, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x27, 0x4a, 0x00, 0x69, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x29, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4c, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x61, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x25, 0x4a, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x24, 0x54, 0x65, + 0x6e, 0x2d, 0x65, 0x69, 0x20, 0x28, 0x31, 0x31, + 0x31, 0x30, 0x2d, 0x31, 0x31, 0x31, 0x33, 0x29, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x21, 0x48, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x44, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x48, 0x00, 0x65, 0x00, 0x69, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x27, 0x45, 0x00, 0x69, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1f, 0x4c, 0x01, 0x68, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x61, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x41, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x4a, 0x00, 0x69, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x59, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, + 0x00, 0x75, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x29, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, + 0x6e, 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x4d, 0x01, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x27, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x75, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x29, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, 0x29, + 0x52, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x45, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x4c, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x61, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6d, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x74, 0x00, 0x73, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x48, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, + 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x27, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x21, 0x4c, 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x21, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, + 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x27, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, + 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x72, 0x00, 0x65, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x62, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x27, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4d, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x02, 0x54, 0x02, 0x53, 0x0a, + 0x4d, 0x65, 0x69, 0x6a, 0x69, 0x0d, 0x54, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x0b, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x0c, 0x48, 0x65, + 0x69, 0x73, 0x65, 0x69, 0x12, 0x46, 0x61, 0x72, + 0x76, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x16, 0x4f, + 0x72, 0x64, 0x69, 0x62, 0x65, 0x68, 0x65, 0x73, + 0x68, 0x74, 0x0e, 0x4b, 0x68, 0x6f, 0x72, 0x64, + 0x61, 0x64, 0x06, 0x54, 0x69, 0x72, 0x0c, 0x4d, + 0x6f, 0x72, 0x64, 0x61, 0x64, 0x12, 0x53, 0x68, + 0x61, 0x68, 0x72, 0x69, 0x76, 0x61, 0x72, 0x08, + 0x4d, 0x65, 0x68, 0x72, 0x08, 0x41, 0x62, 0x61, + 0x6e, 0x08, 0x41, 0x7a, 0x61, 0x72, 0x06, 0x44, + 0x65, 0x79, 0x0c, 0x42, 0x61, 0x68, 0x6d, 0x61, + 0x6e, 0x0c, 0x45, 0x73, 0x66, 0x61, 0x6e, 0x64, + 0x04, 0x41, 0x50, 0x1a, 0x42, 0x65, 0x66, 0x6f, + 0x72, 0x65, 0x20, 0x52, 0x2e, 0x4f, 0x2e, 0x43, + 0x2e, 0x0c, 0x52, 0x2e, 0x4f, 0x2e, 0x43, 0x2e, + 0x12, 0x63, 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, + 0x72, 0x73, 0x08, 0x64, 0x61, 0x74, 0x65, 0x08, + 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, 0x75, 0x10, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0x1e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, + 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, + 0x26, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x6e, 0x65, 0x67, + 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, + 0x74, 0x65, 0x72, 0x6e, 0x0e, 0x64, 0x65, 0x63, + 0x69, 0x6d, 0x61, 0x6c, 0x26, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0xa0, 0x7b, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, + 0x3c, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0xa0, 0x7b, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, 0x10, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, + 0x2c, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0xa0, 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, + 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x42, + 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, + 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0xa0, 0x7b, 0x70, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, + 0x7d, 0x0e, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, + 0x74, 0x10, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, + 0x6e, 0x73, 0x02, 0x2c, 0x02, 0xa0, 0x0a, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x1d, 0xd0, 0x10, 0xe0, + 0x10, 0xa0, 0x00, 0xd0, 0x10, 0xe0, 0x10, 0xd8, + 0x10, 0xe1, 0x10, 0xa0, 0x00, 0xe0, 0x10, 0xd8, + 0x10, 0xea, 0x10, 0xee, 0x10, 0xd5, 0x10, 0xd8, + 0x10, 0x06, 0x6e, 0x61, 0x6e, 0x02, 0x2b, 0x10, + 0x70, 0x6c, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x02, 0x2d, 0x12, 0x6d, 0x69, 0x6e, 0x75, 0x73, + 0x53, 0x69, 0x67, 0x6e, 0x02, 0x25, 0x16, 0x70, + 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, + 0x67, 0x6e, 0x03, 0x1e, 0x22, 0x10, 0x69, 0x6e, + 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x0e, 0x73, + 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x04, 0x52, + 0x24, 0x06, 0x42, 0x52, 0x4c, 0x06, 0x43, 0x41, + 0x24, 0x06, 0x43, 0x41, 0x44, 0x03, 0xac, 0x20, + 0x06, 0x45, 0x55, 0x52, 0x02, 0xa3, 0x06, 0x47, + 0x42, 0x50, 0x06, 0x4d, 0x58, 0x24, 0x06, 0x4d, + 0x58, 0x4e, 0x06, 0x4e, 0x54, 0x24, 0x06, 0x54, + 0x57, 0x44, 0x06, 0x55, 0x53, 0x24, 0x06, 0x55, + 0x53, 0x44, 0x08, 0x46, 0x43, 0x46, 0x41, 0x06, + 0x58, 0x41, 0x46, 0x06, 0x45, 0x43, 0x24, 0x06, + 0x58, 0x43, 0x44, 0x06, 0x43, 0x46, 0x41, 0x06, + 0x58, 0x4f, 0x46, 0x08, 0x43, 0x46, 0x50, 0x46, + 0x06, 0x58, 0x50, 0x46, 0x14, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x52, + 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, + 0x6c, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, + 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x6a, 0x73, + 0x6f, 0x6e, 0x70, 0x2f, 0x6b, 0x61, 0x2e, 0x6a, + 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, + 0x01, 0x00, 0x27, 0x00, 0x89, 0x01, 0xfa, 0x69, + 0x01, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x39, 0xd0, + 0x00, 0x00, 0x00, 0x43, 0xd1, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xd2, 0x00, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd4, 0x00, 0x00, + 0x00, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x04, 0xd6, + 0x00, 0x00, 0x00, 0x04, 0xd7, 0x00, 0x00, 0x00, + 0x04, 0xd8, 0x00, 0x00, 0x00, 0x04, 0xd9, 0x00, + 0x00, 0x00, 0x04, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xdb, 0x00, 0x00, 0x00, 0x04, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x04, 0xde, + 0x00, 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, + 0x04, 0xe0, 0x00, 0x00, 0x00, 0x04, 0xe1, 0x00, + 0x00, 0x00, 0x04, 0xe2, 0x00, 0x00, 0x00, 0x26, + 0x0f, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x0a, + 0x4d, 0xe4, 0x00, 0x00, 0x00, 0x09, 0x4d, 0xe5, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, 0x00, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe6, + 0x00, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x00, + 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe9, 0x00, + 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x04, + 0xec, 0x00, 0x00, 0x00, 0x4d, 0xed, 0x00, 0x00, + 0x00, 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, 0xef, + 0x00, 0x00, 0x00, 0x04, 0xf0, 0x00, 0x00, 0x00, + 0x4d, 0xf1, 0x00, 0x00, 0x00, 0x04, 0xf2, 0x00, + 0x00, 0x00, 0x4d, 0xf3, 0x00, 0x00, 0x00, 0x04, + 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xf5, 0x00, 0x00, + 0x00, 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, 0xf7, + 0x00, 0x00, 0x00, 0x04, 0xf8, 0x00, 0x00, 0x00, + 0x4d, 0xf9, 0x00, 0x00, 0x00, 0x04, 0xfa, 0x00, + 0x00, 0x00, 0x4d, 0xfb, 0x00, 0x00, 0x00, 0x04, + 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xfd, 0x00, 0x00, + 0x00, 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, 0xff, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, + 0x4d, 0x01, 0x01, 0x00, 0x00, 0x04, 0x02, 0x01, + 0x00, 0x00, 0x4d, 0x03, 0x01, 0x00, 0x00, 0x04, + 0x04, 0x01, 0x00, 0x00, 0x4d, 0x05, 0x01, 0x00, + 0x00, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, 0x07, + 0x01, 0x00, 0x00, 0x04, 0x08, 0x01, 0x00, 0x00, + 0x4d, 0x09, 0x01, 0x00, 0x00, 0x04, 0x0a, 0x01, + 0x00, 0x00, 0x4d, 0x0b, 0x01, 0x00, 0x00, 0x04, + 0x0c, 0x01, 0x00, 0x00, 0x4d, 0x0d, 0x01, 0x00, + 0x00, 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, 0x0f, + 0x01, 0x00, 0x00, 0x04, 0x10, 0x01, 0x00, 0x00, + 0x4d, 0x11, 0x01, 0x00, 0x00, 0x04, 0x12, 0x01, + 0x00, 0x00, 0x4d, 0x13, 0x01, 0x00, 0x00, 0x04, + 0x14, 0x01, 0x00, 0x00, 0x4d, 0x15, 0x01, 0x00, + 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, 0x17, + 0x01, 0x00, 0x00, 0x04, 0x18, 0x01, 0x00, 0x00, + 0x4d, 0x19, 0x01, 0x00, 0x00, 0x04, 0x1a, 0x01, + 0x00, 0x00, 0x4d, 0x1b, 0x01, 0x00, 0x00, 0x04, + 0x1c, 0x01, 0x00, 0x00, 0x4d, 0x1d, 0x01, 0x00, + 0x00, 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, 0x1f, + 0x01, 0x00, 0x00, 0x04, 0x20, 0x01, 0x00, 0x00, + 0x4d, 0x21, 0x01, 0x00, 0x00, 0x04, 0x22, 0x01, + 0x00, 0x00, 0x4d, 0x23, 0x01, 0x00, 0x00, 0x04, + 0x24, 0x01, 0x00, 0x00, 0x4d, 0x24, 0x01, 0x00, + 0x00, 0x04, 0x25, 0x01, 0x00, 0x00, 0x4d, 0x26, + 0x01, 0x00, 0x00, 0x04, 0x27, 0x01, 0x00, 0x00, + 0x4d, 0x28, 0x01, 0x00, 0x00, 0x04, 0x29, 0x01, + 0x00, 0x00, 0x4d, 0x2a, 0x01, 0x00, 0x00, 0x04, + 0x2b, 0x01, 0x00, 0x00, 0x4d, 0x2c, 0x01, 0x00, + 0x00, 0x04, 0x2d, 0x01, 0x00, 0x00, 0x4d, 0x2e, + 0x01, 0x00, 0x00, 0x04, 0x2f, 0x01, 0x00, 0x00, + 0x4d, 0x30, 0x01, 0x00, 0x00, 0x04, 0x31, 0x01, + 0x00, 0x00, 0x4d, 0x32, 0x01, 0x00, 0x00, 0x04, + 0x33, 0x01, 0x00, 0x00, 0x4d, 0x34, 0x01, 0x00, + 0x00, 0x04, 0x35, 0x01, 0x00, 0x00, 0x4d, 0x36, + 0x01, 0x00, 0x00, 0x4d, 0x37, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x38, 0x01, 0x00, 0x00, 0x4d, 0x39, + 0x01, 0x00, 0x00, 0x04, 0x3a, 0x01, 0x00, 0x00, + 0x4d, 0x3b, 0x01, 0x00, 0x00, 0x04, 0x2d, 0x01, + 0x00, 0x00, 0x4d, 0x2e, 0x01, 0x00, 0x00, 0x04, + 0x3c, 0x01, 0x00, 0x00, 0x4d, 0x28, 0x01, 0x00, + 0x00, 0x4d, 0x3d, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x3e, 0x01, 0x00, 0x00, 0x4d, 0x3f, 0x01, 0x00, + 0x00, 0x04, 0x40, 0x01, 0x00, 0x00, 0x4d, 0x41, + 0x01, 0x00, 0x00, 0x04, 0x0a, 0x01, 0x00, 0x00, + 0x4d, 0x09, 0x01, 0x00, 0x00, 0x04, 0x06, 0x01, + 0x00, 0x00, 0x4d, 0x05, 0x01, 0x00, 0x00, 0x4d, + 0x42, 0x01, 0x00, 0x00, 0x4d, 0x43, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x0b, 0x04, 0x44, 0x01, 0x00, + 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, 0x46, + 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x44, 0x01, + 0x00, 0x00, 0x04, 0x44, 0x01, 0x00, 0x00, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x65, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x78, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x4d, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, + 0x01, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x00, 0xbe, 0x01, 0xbe, 0x02, + 0xbe, 0x03, 0xbe, 0x04, 0xbe, 0x05, 0xbe, 0x06, + 0xbe, 0x07, 0xbe, 0x08, 0xbe, 0x09, 0xbe, 0x0a, + 0xbe, 0x0b, 0x26, 0x0c, 0x00, 0x4d, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, + 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, + 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, + 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x65, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, + 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, + 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, + 0x4d, 0xd6, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x0c, 0xbe, 0x0d, 0xbe, 0x0e, 0xbe, 0x0f, 0xbe, + 0x10, 0xbe, 0x11, 0xbe, 0x12, 0xbe, 0x13, 0xbe, + 0x14, 0xbe, 0x15, 0xbe, 0x16, 0xbe, 0x17, 0xbe, + 0x18, 0x26, 0x0d, 0x00, 0x4d, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, + 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, + 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, + 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, + 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, + 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, + 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, + 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, + 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, + 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, + 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, + 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, + 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, + 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, + 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x65, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x49, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, + 0x9a, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, + 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7a, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, + 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x19, 0xbe, 0x1a, + 0xbe, 0x1b, 0xbe, 0x1c, 0xbe, 0x1d, 0xbe, 0x1e, + 0xbe, 0x1f, 0xbe, 0x20, 0xbe, 0x21, 0xbe, 0x22, + 0xbe, 0x23, 0xbe, 0x24, 0x26, 0x0c, 0x00, 0x4d, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, + 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, + 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, + 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, + 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, + 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, + 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, + 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, + 0x8b, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x65, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, + 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x25, 0xbe, 0x26, 0xbe, 0x27, 0xbe, + 0x28, 0xbe, 0x29, 0xbe, 0x2a, 0xbe, 0x2b, 0xbe, + 0x2c, 0xbe, 0x2d, 0xbe, 0x2e, 0xbe, 0x2f, 0xbe, + 0x30, 0xbe, 0x31, 0x26, 0x0d, 0x00, 0x4d, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, + 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, + 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, + 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, + 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, + 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, + 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, + 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, + 0xa7, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, + 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, + 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, + 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, + 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, + 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, + 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, + 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, + 0x04, 0xa7, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x65, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, + 0x9a, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, + 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x99, + 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, + 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x32, + 0xbe, 0x33, 0xbe, 0x34, 0xbe, 0x35, 0xbe, 0x36, + 0xbe, 0x37, 0xbe, 0x38, 0xbe, 0x39, 0xbe, 0x3a, + 0xbe, 0x3b, 0xbe, 0x3c, 0xbe, 0x3d, 0xbe, 0x3e, + 0x26, 0x0d, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, + 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, + 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, + 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, + 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, + 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, + 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, + 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, + 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, + 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, + 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, + 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, + 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, + 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, + 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x65, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x99, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7a, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, + 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x4d, 0xd9, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x3f, 0xbe, 0x40, + 0xbe, 0x41, 0xbe, 0x42, 0xbe, 0x43, 0xbe, 0x44, + 0xbe, 0x45, 0xbe, 0x46, 0xbe, 0x47, 0xbe, 0x48, + 0xbe, 0x49, 0xbe, 0x4a, 0x26, 0x0c, 0x00, 0x4d, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, + 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, + 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, + 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, + 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, + 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, + 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, + 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, + 0x8b, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x65, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, + 0x04, 0x9a, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x99, 0x01, + 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x7a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x04, + 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, + 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x44, 0x01, + 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x44, + 0x01, 0x00, 0x00, 0x04, 0x44, 0x01, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x65, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x78, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xa8, + 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, + 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, + 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, + 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, + 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x26, 0x04, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xac, + 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, + 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, + 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x4d, + 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, + 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x4b, 0xbe, 0x4c, 0xbe, 0x4d, 0xbe, 0x4e, + 0xbe, 0x4f, 0xbe, 0x50, 0xbe, 0x51, 0xbe, 0x52, + 0xbe, 0x53, 0xbe, 0x54, 0xbe, 0x55, 0xbe, 0x56, + 0xbe, 0x57, 0xbe, 0x58, 0x26, 0x0e, 0x00, 0x4d, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, + 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, + 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, + 0x04, 0xb4, 0x01, 0x00, 0x00, 0x04, 0xb5, 0x01, + 0x00, 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, 0x04, + 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, + 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, + 0x01, 0x00, 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, + 0x04, 0xbc, 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, + 0x00, 0x00, 0x26, 0x0e, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, + 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, + 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, + 0x01, 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, + 0x04, 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, + 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, 0x04, + 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, + 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, + 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, + 0x26, 0x0e, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x65, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x78, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x4d, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x59, 0xbe, 0x5a, 0xbe, 0x5b, + 0xbe, 0x5c, 0xbe, 0x5d, 0xbe, 0x5e, 0xbe, 0x5f, + 0xbe, 0x60, 0xbe, 0x61, 0xbe, 0x62, 0xbe, 0x63, + 0xbe, 0x64, 0x26, 0x0c, 0x00, 0x4d, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, + 0xbf, 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, + 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, 0x04, 0xc2, + 0x01, 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, + 0x04, 0xc4, 0x01, 0x00, 0x00, 0x04, 0xc5, 0x01, + 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, + 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, + 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xbe, + 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, + 0x04, 0xc0, 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, + 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, 0x00, 0x04, + 0xc3, 0x01, 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, + 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, + 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, + 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x65, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xca, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7a, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, + 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x65, 0xbe, 0x66, + 0xbe, 0x67, 0xbe, 0x68, 0xbe, 0x69, 0xbe, 0x6a, + 0xbe, 0x6b, 0xbe, 0x6c, 0xbe, 0x6d, 0xbe, 0x6e, + 0xbe, 0x6f, 0xbe, 0x70, 0x26, 0x0c, 0x00, 0x4d, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, + 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, + 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, + 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, 0x01, + 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, 0x04, + 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, + 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, 0xd5, + 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, 0xd8, 0x01, + 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, 0x04, + 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, 0x00, + 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, 0x04, 0xdd, + 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, 0x00, + 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, 0xe0, 0x01, + 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, 0x00, 0x04, + 0xe2, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x65, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0xe3, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, + 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x71, + 0xbe, 0x72, 0xbe, 0x73, 0xbe, 0x74, 0xbe, 0x75, + 0xbe, 0x76, 0xbe, 0x77, 0xbe, 0x78, 0xbe, 0x79, + 0xbe, 0x7a, 0xbe, 0x7b, 0xbe, 0x7c, 0x26, 0x0c, + 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0xcb, + 0x01, 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, + 0x04, 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, + 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, + 0xd0, 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, + 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, + 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, + 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, + 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, + 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, + 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, + 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, + 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, + 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, + 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x65, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x78, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xe3, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0xe3, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe3, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x4d, + 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x44, 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, + 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, + 0x00, 0x04, 0x44, 0x01, 0x00, 0x00, 0x04, 0x44, + 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x65, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, + 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, + 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, + 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, + 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, + 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, + 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, + 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, + 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, + 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, + 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, + 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, + 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, + 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, + 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, + 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, + 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, + 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, 0x02, + 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, 0x04, + 0x02, 0x02, 0x00, 0x00, 0x04, 0x03, 0x02, 0x00, + 0x00, 0x26, 0x20, 0x00, 0x04, 0x04, 0x02, 0x00, + 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0x05, + 0x02, 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, + 0x04, 0x06, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, + 0x00, 0x80, 0x04, 0x07, 0x02, 0x00, 0x00, 0x4d, + 0x23, 0x00, 0x00, 0x80, 0x04, 0x08, 0x02, 0x00, + 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x09, + 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, + 0x04, 0x0a, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, + 0x00, 0x80, 0x04, 0x0b, 0x02, 0x00, 0x00, 0x4d, + 0x27, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, 0x00, + 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x0d, + 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, + 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, + 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, 0x4d, + 0x2b, 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, 0x00, + 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x11, + 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, + 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, + 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, 0x4d, + 0x2f, 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, 0x00, + 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x15, + 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, + 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, + 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, 0x4d, + 0x33, 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, 0x00, + 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x19, + 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, + 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, + 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, + 0x37, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, + 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x1d, + 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, + 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, + 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, + 0x3b, 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, + 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x21, + 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, + 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, + 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, + 0x3f, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, + 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x25, + 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, + 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, + 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, + 0x43, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, + 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x29, + 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, + 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, + 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, + 0x47, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, + 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x2d, + 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, + 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, + 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, + 0x4b, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, + 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x31, + 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, + 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, + 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, + 0x4f, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, + 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x35, + 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, + 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, + 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, + 0x53, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, + 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x39, + 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, + 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, + 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, + 0x57, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, + 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x3d, + 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, + 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, + 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, + 0x5b, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, + 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x41, + 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, + 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, + 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, + 0x5f, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, + 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x45, + 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, + 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, + 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, + 0x63, 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, + 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x49, + 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, + 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, + 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, + 0x67, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, + 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x4d, + 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, + 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, + 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, + 0x6b, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, + 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x51, + 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, + 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, + 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, + 0x6f, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, + 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x55, + 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, + 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, + 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, + 0x73, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, + 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x59, + 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, + 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, + 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, + 0x77, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, + 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x5d, + 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, + 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, + 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, + 0x7b, 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, + 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x61, + 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, + 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, + 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, + 0x7f, 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, + 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x65, + 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, + 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, + 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, + 0x83, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, + 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x69, + 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, + 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, + 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, + 0x87, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, + 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x6d, + 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, + 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, + 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, + 0x8b, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, + 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x71, + 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, + 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, + 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, + 0x8f, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, + 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x75, + 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, + 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, + 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, + 0x93, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, + 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x79, + 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, + 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, + 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, + 0x97, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, + 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x7d, + 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, + 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, + 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, + 0x9b, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, + 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x81, + 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, + 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, + 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, + 0x9f, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, + 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x85, + 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, + 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, + 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, + 0xa3, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, + 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x89, + 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, + 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, + 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, + 0xa7, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, + 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x8d, + 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, + 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, + 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, + 0xab, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, + 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x91, + 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, + 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, + 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, + 0xaf, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, + 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x95, + 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, + 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, + 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, + 0xb3, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, + 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0x99, + 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, + 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, + 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, + 0xb7, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, + 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0x9d, + 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, + 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, + 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, + 0xbb, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, + 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0xa1, + 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, + 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, + 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, + 0xbf, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, + 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0xa5, + 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, + 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, + 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, + 0xc3, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, + 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xa9, + 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, + 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, + 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, + 0xc7, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, + 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xad, + 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, + 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, + 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, + 0xcb, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, + 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xb1, + 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, + 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, + 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, + 0xcf, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, + 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xb5, + 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, + 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, + 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, + 0xd3, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, + 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xb9, + 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, + 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, + 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, + 0xd7, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xbd, + 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, + 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xc1, + 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, + 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xc5, + 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, + 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, + 0xe3, 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xc9, + 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, + 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, + 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x80, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xcc, + 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, + 0x04, 0xcd, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x80, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x80, 0x4d, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, + 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, + 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, + 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, + 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, + 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, + 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, + 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, + 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, + 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, + 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, + 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, + 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, + 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, + 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, + 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, + 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, + 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, 0x02, + 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, 0x04, + 0x02, 0x02, 0x00, 0x00, 0x04, 0x03, 0x02, 0x00, + 0x00, 0x26, 0x20, 0x00, 0x04, 0x04, 0x02, 0x00, + 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0x05, + 0x02, 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, + 0x04, 0x06, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, + 0x00, 0x80, 0x04, 0x07, 0x02, 0x00, 0x00, 0x4d, + 0x23, 0x00, 0x00, 0x80, 0x04, 0x08, 0x02, 0x00, + 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x09, + 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, + 0x04, 0x0a, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, + 0x00, 0x80, 0x04, 0x0b, 0x02, 0x00, 0x00, 0x4d, + 0x27, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, 0x00, + 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x0d, + 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, + 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, + 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, 0x4d, + 0x2b, 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, 0x00, + 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x11, + 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, + 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, + 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, 0x4d, + 0x2f, 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, 0x00, + 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x15, + 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, + 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, + 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, 0x4d, + 0x33, 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, 0x00, + 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x19, + 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, + 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, + 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, + 0x37, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, + 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x1d, + 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, + 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, + 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, + 0x3b, 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, + 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x21, + 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, + 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, + 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, + 0x3f, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, + 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x25, + 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, + 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, + 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, + 0x43, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, + 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x29, + 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, + 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, + 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, + 0x47, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, + 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x2d, + 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, + 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, + 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, + 0x4b, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, + 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x31, + 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, + 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, + 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, + 0x4f, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, + 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x35, + 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, + 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, + 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, + 0x53, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, + 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x39, + 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, + 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, + 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, + 0x57, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, + 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x3d, + 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, + 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, + 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, + 0x5b, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, + 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x41, + 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, + 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, + 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, + 0x5f, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, + 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x45, + 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, + 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, + 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, + 0x63, 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, + 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x49, + 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, + 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, + 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, + 0x67, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, + 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x4d, + 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, + 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, + 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, + 0x6b, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, + 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x51, + 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, + 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, + 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, + 0x6f, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, + 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x55, + 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, + 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, + 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, + 0x73, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, + 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x59, + 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, + 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, + 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, + 0x77, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, + 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x5d, + 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, + 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, + 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, + 0x7b, 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, + 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x61, + 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, + 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, + 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, + 0x7f, 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, + 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x65, + 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, + 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, + 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, + 0x83, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, + 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x69, + 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, + 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, + 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, + 0x87, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, + 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x6d, + 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, + 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, + 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, + 0x8b, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, + 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x71, + 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, + 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, + 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, + 0x8f, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, + 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x75, + 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, + 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, + 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, + 0x93, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, + 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x79, + 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, + 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, + 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, + 0x97, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, + 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x7d, + 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, + 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, + 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, + 0x9b, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, + 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x81, + 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, + 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, + 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, + 0x9f, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, + 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x85, + 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, + 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, + 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, + 0xa3, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, + 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x89, + 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, + 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, + 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, + 0xa7, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, + 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x8d, + 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, + 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, + 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, + 0xab, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, + 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x91, + 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, + 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, + 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, + 0xaf, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, + 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x95, + 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, + 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, + 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, + 0xb3, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, + 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0x99, + 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, + 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, + 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, + 0xb7, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, + 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0x9d, + 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, + 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, + 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, + 0xbb, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, + 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0xa1, + 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, + 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, + 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, + 0xbf, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, + 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0xa5, + 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, + 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, + 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, + 0xc3, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, + 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xa9, + 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, + 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, + 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, + 0xc7, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, + 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xad, + 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, + 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, + 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, + 0xcb, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, + 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xb1, + 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, + 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, + 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, + 0xcf, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, + 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xb5, + 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, + 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, + 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, + 0xd3, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, + 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xb9, + 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, + 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, + 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, + 0xd7, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xbd, + 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, + 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xc1, + 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, + 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xc5, + 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, + 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, + 0xe3, 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xc9, + 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, + 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, + 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x80, 0x04, 0xce, 0x02, 0x00, + 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xcf, + 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, + 0x04, 0xd0, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x80, 0x04, 0xd1, 0x02, 0x00, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x80, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, + 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, + 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, + 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, + 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, + 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, + 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, + 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, + 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, + 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, + 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, + 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, + 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, + 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, + 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, + 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, + 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, + 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, 0x02, + 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, 0x04, + 0x02, 0x02, 0x00, 0x00, 0x04, 0x03, 0x02, 0x00, + 0x00, 0x26, 0x20, 0x00, 0x04, 0x04, 0x02, 0x00, + 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0x05, + 0x02, 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, + 0x04, 0x06, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, + 0x00, 0x80, 0x04, 0x07, 0x02, 0x00, 0x00, 0x4d, + 0x23, 0x00, 0x00, 0x80, 0x04, 0x08, 0x02, 0x00, + 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x09, + 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, + 0x04, 0x0a, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, + 0x00, 0x80, 0x04, 0x0b, 0x02, 0x00, 0x00, 0x4d, + 0x27, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, 0x00, + 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x0d, + 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, + 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, + 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, 0x4d, + 0x2b, 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, 0x00, + 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x11, + 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, + 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, + 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, 0x4d, + 0x2f, 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, 0x00, + 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x15, + 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, + 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, + 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, 0x4d, + 0x33, 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, 0x00, + 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x19, + 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, + 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, + 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, + 0x37, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, + 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x1d, + 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, + 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, + 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, + 0x3b, 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, + 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x21, + 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, + 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, + 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, + 0x3f, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, + 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x25, + 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, + 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, + 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, + 0x43, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, + 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x29, + 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, + 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, + 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, + 0x47, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, + 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x2d, + 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, + 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, + 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, + 0x4b, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, + 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x31, + 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, + 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, + 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, + 0x4f, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, + 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x35, + 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, + 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, + 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, + 0x53, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, + 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x39, + 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, + 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, + 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, + 0x57, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, + 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x3d, + 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, + 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, + 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, + 0x5b, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, + 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x41, + 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, + 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, + 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, + 0x5f, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, + 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x45, + 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, + 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, + 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, + 0x63, 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, + 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x49, + 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, + 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, + 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, + 0x67, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, + 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x4d, + 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, + 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, + 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, + 0x6b, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, + 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x51, + 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, + 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, + 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, + 0x6f, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, + 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x55, + 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, + 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, + 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, + 0x73, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, + 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x59, + 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, + 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, + 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, + 0x77, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, + 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x5d, + 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, + 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, + 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, + 0x7b, 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, + 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x61, + 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, + 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, + 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, + 0x7f, 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, + 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x65, + 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, + 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, + 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, + 0x83, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, + 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x69, + 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, + 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, + 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, + 0x87, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, + 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x6d, + 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, + 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, + 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, + 0x8b, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, + 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x71, + 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, + 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, + 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, + 0x8f, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, + 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x75, + 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, + 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, + 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, + 0x93, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, + 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x79, + 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, + 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, + 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, + 0x97, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, + 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x7d, + 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, + 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, + 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, + 0x9b, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, + 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x81, + 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, + 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, + 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, + 0x9f, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, + 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x85, + 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, + 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, + 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, + 0xa3, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, + 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x89, + 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, + 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, + 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, + 0xa7, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, + 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x8d, + 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, + 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, + 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, + 0xab, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, + 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x91, + 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, + 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, + 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, + 0xaf, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, + 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x95, + 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, + 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, + 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, + 0xb3, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, + 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0x99, + 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, + 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, + 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, + 0xb7, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, + 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0x9d, + 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, + 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, + 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, + 0xbb, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, + 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0xa1, + 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, + 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, + 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, + 0xbf, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, + 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0xa5, + 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, + 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, + 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, + 0xc3, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, + 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xa9, + 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, + 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, + 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, + 0xc7, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, + 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xad, + 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, + 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, + 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, + 0xcb, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, + 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xb1, + 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, + 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, + 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, + 0xcf, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, + 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xb5, + 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, + 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, + 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, + 0xd3, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, + 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xb9, + 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, + 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, + 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, + 0xd7, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xbd, + 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, + 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xc1, + 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, + 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xc5, + 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, + 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, + 0xe3, 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xc9, + 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, + 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, + 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x80, 0x04, 0xce, 0x02, 0x00, + 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xcf, + 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, + 0x04, 0xd0, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x80, 0x04, 0xd1, 0x02, 0x00, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x80, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, + 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, + 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x7d, 0xbe, 0x7e, 0xbe, 0x7f, 0xbe, 0x80, 0xbe, + 0x81, 0xbe, 0x82, 0xbe, 0x83, 0xbe, 0x84, 0xbe, + 0x85, 0xbe, 0x86, 0xbe, 0x87, 0xbe, 0x88, 0x26, + 0x0c, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0xd2, 0x02, 0x00, 0x00, 0x04, 0xd3, 0x02, 0x00, + 0x00, 0x04, 0xd4, 0x02, 0x00, 0x00, 0x04, 0xd5, + 0x02, 0x00, 0x00, 0x04, 0xd6, 0x02, 0x00, 0x00, + 0x04, 0xd7, 0x02, 0x00, 0x00, 0x04, 0xd8, 0x02, + 0x00, 0x00, 0x04, 0xd9, 0x02, 0x00, 0x00, 0x04, + 0xda, 0x02, 0x00, 0x00, 0x04, 0xdb, 0x02, 0x00, + 0x00, 0x04, 0xdc, 0x02, 0x00, 0x00, 0x04, 0xdd, + 0x02, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xd2, 0x02, 0x00, 0x00, + 0x04, 0xd3, 0x02, 0x00, 0x00, 0x04, 0xd4, 0x02, + 0x00, 0x00, 0x04, 0xd5, 0x02, 0x00, 0x00, 0x04, + 0xd6, 0x02, 0x00, 0x00, 0x04, 0xd7, 0x02, 0x00, + 0x00, 0x04, 0xd8, 0x02, 0x00, 0x00, 0x04, 0xd9, + 0x02, 0x00, 0x00, 0x04, 0xda, 0x02, 0x00, 0x00, + 0x04, 0xdb, 0x02, 0x00, 0x00, 0x04, 0xdc, 0x02, + 0x00, 0x00, 0x04, 0xdd, 0x02, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x65, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x78, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xde, 0x02, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0xde, 0x02, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xde, + 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, + 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x44, 0x01, 0x00, 0x00, 0x04, 0x45, + 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x04, 0x44, 0x01, 0x00, 0x00, 0x04, + 0x44, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, + 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x65, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xdf, 0x02, 0x00, 0x00, 0x04, + 0xe0, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0xdf, 0x02, 0x00, + 0x00, 0x04, 0xe0, 0x02, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xdf, + 0x02, 0x00, 0x00, 0x04, 0xe0, 0x02, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, + 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x4d, + 0xe2, 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x02, 0x00, + 0x00, 0x4d, 0xe2, 0x02, 0x00, 0x00, 0x0b, 0x04, + 0xe3, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe4, 0x02, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xe5, + 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x02, 0x00, 0x00, + 0x04, 0xe7, 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x02, + 0x00, 0x00, 0x4d, 0xe9, 0x02, 0x00, 0x00, 0x0b, + 0x04, 0xea, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x02, + 0x00, 0x00, 0x04, 0xeb, 0x02, 0x00, 0x00, 0x4d, + 0xe8, 0x02, 0x00, 0x00, 0x4d, 0xec, 0x02, 0x00, + 0x00, 0x0b, 0x04, 0xed, 0x02, 0x00, 0x00, 0x4d, + 0xe6, 0x02, 0x00, 0x00, 0x04, 0xee, 0x02, 0x00, + 0x00, 0x4d, 0xe8, 0x02, 0x00, 0x00, 0x4d, 0xef, + 0x02, 0x00, 0x00, 0x4d, 0xf0, 0x02, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0xf1, 0x02, 0x00, 0x00, 0x4d, + 0xe9, 0x02, 0x00, 0x00, 0x04, 0xf2, 0x02, 0x00, + 0x00, 0x4d, 0xf3, 0x02, 0x00, 0x00, 0x04, 0xf4, + 0x02, 0x00, 0x00, 0x4d, 0xf5, 0x02, 0x00, 0x00, + 0x04, 0xf6, 0x02, 0x00, 0x00, 0x4d, 0xf7, 0x02, + 0x00, 0x00, 0x04, 0xf8, 0x02, 0x00, 0x00, 0x4d, + 0xf9, 0x02, 0x00, 0x00, 0x04, 0xfa, 0x02, 0x00, + 0x00, 0x4d, 0xfb, 0x02, 0x00, 0x00, 0x04, 0xfc, + 0x02, 0x00, 0x00, 0x4d, 0xfd, 0x02, 0x00, 0x00, + 0x4d, 0xe3, 0x02, 0x00, 0x00, 0x4d, 0xfe, 0x02, + 0x00, 0x00, 0x0b, 0x04, 0xff, 0x02, 0x00, 0x00, + 0x4d, 0x00, 0x03, 0x00, 0x00, 0x04, 0x01, 0x03, + 0x00, 0x00, 0x4d, 0x02, 0x03, 0x00, 0x00, 0x04, + 0x03, 0x03, 0x00, 0x00, 0x4d, 0x04, 0x03, 0x00, + 0x00, 0x04, 0x05, 0x03, 0x00, 0x00, 0x4d, 0x06, + 0x03, 0x00, 0x00, 0x04, 0x07, 0x03, 0x00, 0x00, + 0x4d, 0x08, 0x03, 0x00, 0x00, 0x04, 0x09, 0x03, + 0x00, 0x00, 0x4d, 0x0a, 0x03, 0x00, 0x00, 0x04, + 0x0b, 0x03, 0x00, 0x00, 0x4d, 0x0c, 0x03, 0x00, + 0x00, 0x04, 0x0d, 0x03, 0x00, 0x00, 0x4d, 0x0e, + 0x03, 0x00, 0x00, 0x04, 0x0f, 0x03, 0x00, 0x00, + 0x4d, 0x10, 0x03, 0x00, 0x00, 0x04, 0x11, 0x03, + 0x00, 0x00, 0x4d, 0x12, 0x03, 0x00, 0x00, 0x04, + 0x13, 0x03, 0x00, 0x00, 0x4d, 0x14, 0x03, 0x00, + 0x00, 0x4d, 0x15, 0x03, 0x00, 0x00, 0x4d, 0x45, + 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, 0xcc, 0x28, + 0xac, 0x0c, 0x01, 0x00, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_kk_size = 25269; + +const uint8_t intl_kk[25269] = { + 0x01, 0xdf, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x6b, 0x6b, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x0e, + 0x7b, 0x31, 0x7d, 0x20, 0x7b, 0x30, 0x7d, 0x0a, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, 0x65, + 0x64, 0x69, 0x75, 0x6d, 0x08, 0x66, 0x75, 0x6c, + 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x02, 0x64, + 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, 0x08, 0x64, + 0x2c, 0x20, 0x45, 0x04, 0x45, 0x64, 0x12, 0x45, + 0x2c, 0x20, 0x61, 0x20, 0x68, 0x3a, 0x6d, 0x6d, + 0x06, 0x45, 0x68, 0x6d, 0x0e, 0x45, 0x20, 0x48, + 0x48, 0x3a, 0x6d, 0x6d, 0x06, 0x45, 0x48, 0x6d, + 0x18, 0x45, 0x2c, 0x20, 0x61, 0x20, 0x68, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x08, 0x45, 0x68, + 0x6d, 0x73, 0x14, 0x45, 0x20, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x08, 0x45, 0x48, + 0x6d, 0x73, 0x11, 0x47, 0x00, 0x20, 0x00, 0x79, + 0x00, 0x20, 0x00, 0x27, 0x00, 0x36, 0x04, 0x27, + 0x00, 0x2e, 0x00, 0x04, 0x47, 0x79, 0x19, 0x47, + 0x00, 0x20, 0x00, 0x79, 0x00, 0x20, 0x00, 0x27, + 0x00, 0x36, 0x04, 0x27, 0x00, 0x2e, 0x00, 0x20, + 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x0a, + 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x1d, 0x47, 0x00, + 0x20, 0x00, 0x79, 0x00, 0x20, 0x00, 0x27, 0x00, + 0x36, 0x04, 0x27, 0x00, 0x2e, 0x00, 0x20, 0x00, + 0x64, 0x00, 0x20, 0x00, 0x4d, 0x00, 0x4d, 0x00, + 0x4d, 0x00, 0x0c, 0x47, 0x79, 0x4d, 0x4d, 0x4d, + 0x64, 0x23, 0x47, 0x00, 0x20, 0x00, 0x79, 0x00, + 0x20, 0x00, 0x27, 0x00, 0x36, 0x04, 0x27, 0x00, + 0x2e, 0x00, 0x20, 0x00, 0x64, 0x00, 0x20, 0x00, + 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x2c, 0x00, + 0x20, 0x00, 0x45, 0x00, 0x0e, 0x47, 0x79, 0x4d, + 0x4d, 0x4d, 0x45, 0x64, 0x06, 0x61, 0x20, 0x68, + 0x02, 0x68, 0x04, 0x48, 0x48, 0x02, 0x48, 0x0c, + 0x61, 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x04, 0x68, + 0x6d, 0x0a, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x04, + 0x48, 0x6d, 0x12, 0x61, 0x20, 0x68, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x06, 0x68, 0x6d, 0x73, + 0x10, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x06, 0x48, 0x6d, 0x73, 0x16, 0x61, 0x20, + 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, + 0x76, 0x08, 0x68, 0x6d, 0x73, 0x76, 0x14, 0x48, + 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, + 0x76, 0x08, 0x48, 0x6d, 0x73, 0x76, 0x10, 0x61, + 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x76, 0x06, + 0x68, 0x6d, 0x76, 0x0e, 0x48, 0x48, 0x3a, 0x6d, + 0x6d, 0x20, 0x76, 0x06, 0x48, 0x6d, 0x76, 0x02, + 0x4c, 0x02, 0x4d, 0x0a, 0x64, 0x64, 0x2e, 0x4d, + 0x4d, 0x04, 0x4d, 0x64, 0x10, 0x64, 0x64, 0x2e, + 0x4d, 0x4d, 0x2c, 0x20, 0x45, 0x06, 0x4d, 0x45, + 0x64, 0x06, 0x4c, 0x4c, 0x4c, 0x06, 0x4d, 0x4d, + 0x4d, 0x0a, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x08, + 0x4d, 0x4d, 0x4d, 0x64, 0x10, 0x64, 0x20, 0x4d, + 0x4d, 0x4d, 0x2c, 0x20, 0x45, 0x0a, 0x4d, 0x4d, + 0x4d, 0x45, 0x64, 0x0c, 0x64, 0x20, 0x4d, 0x4d, + 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, + 0x0a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x04, 0x6d, + 0x73, 0x02, 0x79, 0x08, 0x4d, 0x4d, 0x2e, 0x79, + 0x04, 0x79, 0x4d, 0x0e, 0x64, 0x64, 0x2e, 0x4d, + 0x4d, 0x2e, 0x79, 0x06, 0x79, 0x4d, 0x64, 0x14, + 0x64, 0x64, 0x2e, 0x4d, 0x4d, 0x2e, 0x79, 0x2c, + 0x20, 0x45, 0x08, 0x79, 0x4d, 0x45, 0x64, 0x15, + 0x79, 0x00, 0x20, 0x00, 0x27, 0x00, 0x36, 0x04, + 0x27, 0x00, 0x2e, 0x00, 0x20, 0x00, 0x4d, 0x00, + 0x4d, 0x00, 0x4d, 0x00, 0x08, 0x79, 0x4d, 0x4d, + 0x4d, 0x19, 0x79, 0x00, 0x20, 0x00, 0x27, 0x00, + 0x36, 0x04, 0x27, 0x00, 0x2e, 0x00, 0x20, 0x00, + 0x64, 0x00, 0x20, 0x00, 0x4d, 0x00, 0x4d, 0x00, + 0x4d, 0x00, 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x64, + 0x1f, 0x79, 0x00, 0x20, 0x00, 0x27, 0x00, 0x36, + 0x04, 0x27, 0x00, 0x2e, 0x00, 0x20, 0x00, 0x64, + 0x00, 0x20, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x4d, + 0x00, 0x2c, 0x00, 0x20, 0x00, 0x45, 0x00, 0x0c, + 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x17, 0x79, + 0x00, 0x20, 0x00, 0x27, 0x00, 0x36, 0x04, 0x27, + 0x00, 0x2e, 0x00, 0x20, 0x00, 0x4d, 0x00, 0x4d, + 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x0a, 0x79, 0x4d, + 0x4d, 0x4d, 0x4d, 0x15, 0x79, 0x00, 0x20, 0x00, + 0x27, 0x00, 0x36, 0x04, 0x27, 0x00, 0x2e, 0x00, + 0x20, 0x00, 0x51, 0x00, 0x51, 0x00, 0x51, 0x00, + 0x08, 0x79, 0x51, 0x51, 0x51, 0x17, 0x79, 0x00, + 0x20, 0x00, 0x27, 0x00, 0x36, 0x04, 0x27, 0x00, + 0x2e, 0x00, 0x20, 0x00, 0x51, 0x00, 0x51, 0x00, + 0x51, 0x00, 0x51, 0x00, 0x0a, 0x79, 0x51, 0x51, + 0x51, 0x51, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, + 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x73, 0x27, 0x79, 0x00, 0x20, 0x00, + 0x27, 0x00, 0x36, 0x04, 0x27, 0x00, 0x2e, 0x00, + 0x20, 0x00, 0x64, 0x00, 0x20, 0x00, 0x4d, 0x00, + 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x2c, 0x00, + 0x20, 0x00, 0x45, 0x00, 0x45, 0x00, 0x45, 0x00, + 0x45, 0x00, 0x14, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, + 0x45, 0x45, 0x45, 0x45, 0x64, 0x1b, 0x79, 0x00, + 0x20, 0x00, 0x27, 0x00, 0x36, 0x04, 0x27, 0x00, + 0x2e, 0x00, 0x20, 0x00, 0x64, 0x00, 0x20, 0x00, + 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, + 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x1b, + 0x79, 0x00, 0x20, 0x00, 0x27, 0x00, 0x36, 0x04, + 0x27, 0x00, 0x2e, 0x00, 0x20, 0x00, 0x64, 0x00, + 0x64, 0x00, 0x20, 0x00, 0x4d, 0x00, 0x4d, 0x00, + 0x4d, 0x00, 0x10, 0x64, 0x64, 0x2e, 0x4d, 0x4d, + 0x2e, 0x79, 0x79, 0x16, 0x64, 0x61, 0x74, 0x65, + 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x1a, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x7a, 0x7a, 0x7a, 0x7a, 0x12, 0x68, 0x6d, + 0x6d, 0x73, 0x73, 0x7a, 0x7a, 0x7a, 0x7a, 0x14, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x7a, 0x08, 0x68, 0x6d, 0x73, 0x7a, 0x16, + 0x74, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x73, 0x0e, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x73, 0x03, 0x9a, 0x04, 0x03, 0x10, + 0x04, 0x03, 0x1d, 0x04, 0x03, 0x21, 0x04, 0x03, + 0x1c, 0x04, 0x03, 0x28, 0x04, 0x03, 0x22, 0x04, + 0x03, 0x16, 0x04, 0x0c, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x09, 0x9b, 0x04, 0x30, 0x04, 0xa3, + 0x04, 0x2e, 0x00, 0x09, 0x30, 0x04, 0x9b, 0x04, + 0x3f, 0x04, 0x2e, 0x00, 0x09, 0x3d, 0x04, 0x30, + 0x04, 0x43, 0x04, 0x2e, 0x00, 0x09, 0x41, 0x04, + 0xd9, 0x04, 0x43, 0x04, 0x2e, 0x00, 0x09, 0x3c, + 0x04, 0x30, 0x04, 0x3c, 0x04, 0x2e, 0x00, 0x09, + 0x3c, 0x04, 0x30, 0x04, 0x43, 0x04, 0x2e, 0x00, + 0x09, 0x48, 0x04, 0x56, 0x04, 0x3b, 0x04, 0x2e, + 0x00, 0x09, 0x42, 0x04, 0x30, 0x04, 0x3c, 0x04, + 0x2e, 0x00, 0x09, 0x9b, 0x04, 0x4b, 0x04, 0x40, + 0x04, 0x2e, 0x00, 0x09, 0x9b, 0x04, 0x30, 0x04, + 0x37, 0x04, 0x2e, 0x00, 0x09, 0x9b, 0x04, 0x30, + 0x04, 0x40, 0x04, 0x2e, 0x00, 0x09, 0x36, 0x04, + 0x35, 0x04, 0x3b, 0x04, 0x2e, 0x00, 0x0d, 0x9b, + 0x04, 0x30, 0x04, 0xa3, 0x04, 0x42, 0x04, 0x30, + 0x04, 0x40, 0x04, 0x0b, 0x30, 0x04, 0x9b, 0x04, + 0x3f, 0x04, 0x30, 0x04, 0x3d, 0x04, 0x0d, 0x3d, + 0x04, 0x30, 0x04, 0x43, 0x04, 0x40, 0x04, 0x4b, + 0x04, 0x37, 0x04, 0x0b, 0x41, 0x04, 0xd9, 0x04, + 0x43, 0x04, 0x56, 0x04, 0x40, 0x04, 0x0b, 0x3c, + 0x04, 0x30, 0x04, 0x3c, 0x04, 0x4b, 0x04, 0x40, + 0x04, 0x0d, 0x3c, 0x04, 0x30, 0x04, 0x43, 0x04, + 0x41, 0x04, 0x4b, 0x04, 0x3c, 0x04, 0x0b, 0x48, + 0x04, 0x56, 0x04, 0x3b, 0x04, 0x34, 0x04, 0x35, + 0x04, 0x0b, 0x42, 0x04, 0x30, 0x04, 0x3c, 0x04, + 0x4b, 0x04, 0x37, 0x04, 0x11, 0x9b, 0x04, 0x4b, + 0x04, 0x40, 0x04, 0x3a, 0x04, 0xaf, 0x04, 0x39, + 0x04, 0x35, 0x04, 0x3a, 0x04, 0x0b, 0x9b, 0x04, + 0x30, 0x04, 0x37, 0x04, 0x30, 0x04, 0x3d, 0x04, + 0x0d, 0x9b, 0x04, 0x30, 0x04, 0x40, 0x04, 0x30, + 0x04, 0x48, 0x04, 0x30, 0x04, 0x13, 0x36, 0x04, + 0x35, 0x04, 0x3b, 0x04, 0x42, 0x04, 0x3e, 0x04, + 0x9b, 0x04, 0x41, 0x04, 0x30, 0x04, 0x3d, 0x04, + 0x0c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x73, 0x03, + 0x14, 0x04, 0x03, 0x11, 0x04, 0x05, 0x16, 0x04, + 0x41, 0x04, 0x05, 0x14, 0x04, 0x41, 0x04, 0x05, + 0x21, 0x04, 0x41, 0x04, 0x05, 0x21, 0x04, 0x40, + 0x04, 0x05, 0x11, 0x04, 0x41, 0x04, 0x05, 0x16, + 0x04, 0x3c, 0x04, 0x05, 0x21, 0x04, 0x31, 0x04, + 0x11, 0x36, 0x04, 0x35, 0x04, 0x3a, 0x04, 0x41, + 0x04, 0x35, 0x04, 0x3d, 0x04, 0x31, 0x04, 0x56, + 0x04, 0x11, 0x34, 0x04, 0xaf, 0x04, 0x39, 0x04, + 0x41, 0x04, 0x35, 0x04, 0x3d, 0x04, 0x31, 0x04, + 0x56, 0x04, 0x11, 0x41, 0x04, 0x35, 0x04, 0x39, + 0x04, 0x41, 0x04, 0x35, 0x04, 0x3d, 0x04, 0x31, + 0x04, 0x56, 0x04, 0x11, 0x41, 0x04, 0xd9, 0x04, + 0x40, 0x04, 0x41, 0x04, 0x35, 0x04, 0x3d, 0x04, + 0x31, 0x04, 0x56, 0x04, 0x11, 0x31, 0x04, 0x35, + 0x04, 0x39, 0x04, 0x41, 0x04, 0x35, 0x04, 0x3d, + 0x04, 0x31, 0x04, 0x56, 0x04, 0x09, 0x36, 0x04, + 0xb1, 0x04, 0x3c, 0x04, 0x30, 0x04, 0x0b, 0x41, + 0x04, 0x35, 0x04, 0x3d, 0x04, 0x31, 0x04, 0x56, + 0x04, 0x08, 0x64, 0x61, 0x79, 0x73, 0x04, 0x42, + 0x45, 0x08, 0x65, 0x72, 0x61, 0x73, 0x0b, 0x42, + 0x04, 0x30, 0x04, 0xa3, 0x04, 0x93, 0x04, 0x4b, + 0x04, 0x04, 0x61, 0x6d, 0x17, 0x42, 0x04, 0xaf, + 0x04, 0x41, 0x04, 0x3a, 0x04, 0x56, 0x04, 0x2f, + 0x00, 0x3a, 0x04, 0x35, 0x04, 0x48, 0x04, 0x3a, + 0x04, 0x56, 0x04, 0x04, 0x70, 0x6d, 0x14, 0x64, + 0x61, 0x79, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, + 0x73, 0x06, 0x4d, 0x30, 0x31, 0x06, 0x4d, 0x30, + 0x32, 0x06, 0x4d, 0x30, 0x33, 0x06, 0x4d, 0x30, + 0x34, 0x06, 0x4d, 0x30, 0x35, 0x06, 0x4d, 0x30, + 0x36, 0x06, 0x4d, 0x30, 0x37, 0x06, 0x4d, 0x30, + 0x38, 0x06, 0x4d, 0x30, 0x39, 0x06, 0x4d, 0x31, + 0x30, 0x06, 0x4d, 0x31, 0x31, 0x06, 0x4d, 0x31, + 0x32, 0x08, 0x54, 0x6f, 0x75, 0x74, 0x08, 0x42, + 0x61, 0x62, 0x61, 0x0a, 0x48, 0x61, 0x74, 0x6f, + 0x72, 0x0a, 0x4b, 0x69, 0x61, 0x68, 0x6b, 0x08, + 0x54, 0x6f, 0x62, 0x61, 0x0c, 0x41, 0x6d, 0x73, + 0x68, 0x69, 0x72, 0x10, 0x42, 0x61, 0x72, 0x61, + 0x6d, 0x68, 0x61, 0x74, 0x12, 0x42, 0x61, 0x72, + 0x61, 0x6d, 0x6f, 0x75, 0x64, 0x61, 0x0e, 0x42, + 0x61, 0x73, 0x68, 0x61, 0x6e, 0x73, 0x0a, 0x50, + 0x61, 0x6f, 0x6e, 0x61, 0x08, 0x45, 0x70, 0x65, + 0x70, 0x0a, 0x4d, 0x65, 0x73, 0x72, 0x61, 0x0a, + 0x4e, 0x61, 0x73, 0x69, 0x65, 0x08, 0x45, 0x52, + 0x41, 0x30, 0x08, 0x45, 0x52, 0x41, 0x31, 0x10, + 0x4d, 0x65, 0x73, 0x6b, 0x65, 0x72, 0x65, 0x6d, + 0x0c, 0x54, 0x65, 0x6b, 0x65, 0x6d, 0x74, 0x0a, + 0x48, 0x65, 0x64, 0x61, 0x72, 0x0c, 0x54, 0x61, + 0x68, 0x73, 0x61, 0x73, 0x06, 0x54, 0x65, 0x72, + 0x0e, 0x59, 0x65, 0x6b, 0x61, 0x74, 0x69, 0x74, + 0x0e, 0x4d, 0x65, 0x67, 0x61, 0x62, 0x69, 0x74, + 0x0c, 0x4d, 0x69, 0x61, 0x7a, 0x69, 0x61, 0x0c, + 0x47, 0x65, 0x6e, 0x62, 0x6f, 0x74, 0x08, 0x53, + 0x65, 0x6e, 0x65, 0x0a, 0x48, 0x61, 0x6d, 0x6c, + 0x65, 0x0e, 0x4e, 0x65, 0x68, 0x61, 0x73, 0x73, + 0x65, 0x0e, 0x50, 0x61, 0x67, 0x75, 0x6d, 0x65, + 0x6e, 0x0d, 0x31, 0x04, 0x2e, 0x00, 0x37, 0x04, + 0x2e, 0x00, 0x34, 0x04, 0x2e, 0x00, 0x09, 0x31, + 0x04, 0x2e, 0x00, 0x37, 0x04, 0x2e, 0x00, 0x06, + 0x42, 0x43, 0x45, 0x04, 0x43, 0x45, 0x31, 0x11, + 0x04, 0x56, 0x04, 0x37, 0x04, 0x34, 0x04, 0x56, + 0x04, 0xa3, 0x04, 0x20, 0x00, 0x37, 0x04, 0x30, + 0x04, 0x3c, 0x04, 0x30, 0x04, 0x3d, 0x04, 0x4b, + 0x04, 0x3c, 0x04, 0x4b, 0x04, 0x37, 0x04, 0x93, + 0x04, 0x30, 0x04, 0x20, 0x00, 0x34, 0x04, 0x35, + 0x04, 0x39, 0x04, 0x56, 0x04, 0x3d, 0x04, 0x21, + 0x11, 0x04, 0x56, 0x04, 0x37, 0x04, 0x34, 0x04, + 0x56, 0x04, 0xa3, 0x04, 0x20, 0x00, 0x37, 0x04, + 0x30, 0x04, 0x3c, 0x04, 0x30, 0x04, 0x3d, 0x04, + 0x4b, 0x04, 0x3c, 0x04, 0x4b, 0x04, 0x37, 0x04, + 0x0c, 0x54, 0x69, 0x73, 0x68, 0x72, 0x69, 0x0e, + 0x48, 0x65, 0x73, 0x68, 0x76, 0x61, 0x6e, 0x0c, + 0x4b, 0x69, 0x73, 0x6c, 0x65, 0x76, 0x0a, 0x54, + 0x65, 0x76, 0x65, 0x74, 0x0c, 0x53, 0x68, 0x65, + 0x76, 0x61, 0x74, 0x0c, 0x41, 0x64, 0x61, 0x72, + 0x20, 0x49, 0x08, 0x41, 0x64, 0x61, 0x72, 0x0a, + 0x4e, 0x69, 0x73, 0x61, 0x6e, 0x08, 0x49, 0x79, + 0x61, 0x72, 0x0a, 0x53, 0x69, 0x76, 0x61, 0x6e, + 0x0a, 0x54, 0x61, 0x6d, 0x75, 0x7a, 0x04, 0x41, + 0x76, 0x08, 0x45, 0x6c, 0x75, 0x6c, 0x0e, 0x41, + 0x64, 0x61, 0x72, 0x20, 0x49, 0x49, 0x04, 0x41, + 0x4d, 0x0e, 0x43, 0x68, 0x61, 0x69, 0x74, 0x72, + 0x61, 0x10, 0x56, 0x61, 0x69, 0x73, 0x61, 0x6b, + 0x68, 0x61, 0x10, 0x4a, 0x79, 0x61, 0x69, 0x73, + 0x74, 0x68, 0x61, 0x0c, 0x41, 0x73, 0x61, 0x64, + 0x68, 0x61, 0x0e, 0x53, 0x72, 0x61, 0x76, 0x61, + 0x6e, 0x61, 0x0c, 0x42, 0x68, 0x61, 0x64, 0x72, + 0x61, 0x0c, 0x41, 0x73, 0x76, 0x69, 0x6e, 0x61, + 0x0e, 0x4b, 0x61, 0x72, 0x74, 0x69, 0x6b, 0x61, + 0x14, 0x41, 0x67, 0x72, 0x61, 0x68, 0x61, 0x79, + 0x61, 0x6e, 0x61, 0x0a, 0x50, 0x61, 0x75, 0x73, + 0x61, 0x0a, 0x4d, 0x61, 0x67, 0x68, 0x61, 0x10, + 0x50, 0x68, 0x61, 0x6c, 0x67, 0x75, 0x6e, 0x61, + 0x08, 0x53, 0x61, 0x6b, 0x61, 0x08, 0x4d, 0x75, + 0x68, 0x2e, 0x08, 0x53, 0x61, 0x66, 0x2e, 0x0c, + 0x52, 0x61, 0x62, 0x2e, 0x20, 0x49, 0x0e, 0x52, + 0x61, 0x62, 0x2e, 0x20, 0x49, 0x49, 0x0c, 0x4a, + 0x75, 0x6d, 0x2e, 0x20, 0x49, 0x0e, 0x4a, 0x75, + 0x6d, 0x2e, 0x20, 0x49, 0x49, 0x08, 0x52, 0x61, + 0x6a, 0x2e, 0x08, 0x53, 0x68, 0x61, 0x2e, 0x08, + 0x52, 0x61, 0x6d, 0x2e, 0x0a, 0x53, 0x68, 0x61, + 0x77, 0x2e, 0x11, 0x44, 0x00, 0x68, 0x00, 0x75, + 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x51, + 0x00, 0x2e, 0x00, 0x11, 0x44, 0x00, 0x68, 0x00, + 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, + 0x48, 0x00, 0x2e, 0x00, 0x10, 0x4d, 0x75, 0x68, + 0x61, 0x72, 0x72, 0x61, 0x6d, 0x0a, 0x53, 0x61, + 0x66, 0x61, 0x72, 0x0f, 0x52, 0x00, 0x61, 0x00, + 0x62, 0x00, 0x69, 0x00, 0xbb, 0x02, 0x20, 0x00, + 0x49, 0x00, 0x11, 0x52, 0x00, 0x61, 0x00, 0x62, + 0x00, 0x69, 0x00, 0xbb, 0x02, 0x20, 0x00, 0x49, + 0x00, 0x49, 0x00, 0x10, 0x4a, 0x75, 0x6d, 0x61, + 0x64, 0x61, 0x20, 0x49, 0x12, 0x4a, 0x75, 0x6d, + 0x61, 0x64, 0x61, 0x20, 0x49, 0x49, 0x0a, 0x52, + 0x61, 0x6a, 0x61, 0x62, 0x0f, 0x53, 0x00, 0x68, + 0x00, 0x61, 0x00, 0xbb, 0x02, 0x62, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x0e, 0x52, 0x61, 0x6d, 0x61, + 0x64, 0x61, 0x6e, 0x0e, 0x53, 0x68, 0x61, 0x77, + 0x77, 0x61, 0x6c, 0x19, 0x44, 0x00, 0x68, 0x00, + 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, + 0x51, 0x00, 0x69, 0x00, 0xbb, 0x02, 0x64, 0x00, + 0x61, 0x00, 0x68, 0x00, 0x19, 0x44, 0x00, 0x68, + 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, + 0x00, 0x48, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x6a, + 0x00, 0x61, 0x00, 0x68, 0x00, 0x04, 0x41, 0x48, + 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, 0x36, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x36, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x48, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x36, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x36, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, + 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x1d, 0x57, 0x00, 0x61, 0x00, 0x64, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, + 0x52, 0x00, 0x65, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, 0x59, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x2d, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6d, 0x00, + 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x2b, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x2d, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, 0x2d, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x2a, 0x4a, 0x69, + 0x6e, 0x67, 0x6f, 0x2d, 0x6b, 0x65, 0x69, 0x75, + 0x6e, 0x20, 0x28, 0x37, 0x36, 0x37, 0x2d, 0x37, + 0x37, 0x30, 0x29, 0x1d, 0x48, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x38, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x1f, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x2d, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x1f, 0x44, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1d, 0x4a, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x4b, + 0x00, 0x61, 0x00, 0x6a, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1f, 0x53, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x20, 0x54, 0x65, 0x6e, 0x2d, 0x61, 0x6e, + 0x20, 0x28, 0x38, 0x35, 0x37, 0x2d, 0x38, 0x35, + 0x39, 0x29, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x21, 0x47, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x61, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x1f, 0x45, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, + 0x4a, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1b, + 0x4c, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, + 0x41, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x1f, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, 0x45, + 0x00, 0x69, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, + 0x73, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x69, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x27, 0x4a, 0x00, 0x69, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x29, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4c, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x61, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x25, 0x4a, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x24, 0x54, 0x65, + 0x6e, 0x2d, 0x65, 0x69, 0x20, 0x28, 0x31, 0x31, + 0x31, 0x30, 0x2d, 0x31, 0x31, 0x31, 0x33, 0x29, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x21, 0x48, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x44, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x48, 0x00, 0x65, 0x00, 0x69, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x27, 0x45, 0x00, 0x69, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1f, 0x4c, 0x01, 0x68, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x61, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x41, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x4a, 0x00, 0x69, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x59, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, + 0x00, 0x75, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x29, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, + 0x6e, 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x4d, 0x01, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x27, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x75, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x29, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, 0x29, + 0x52, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x45, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x4c, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x61, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6d, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x74, 0x00, 0x73, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x48, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, + 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x27, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x21, 0x4c, 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x21, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, + 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x27, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, + 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x72, 0x00, 0x65, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x62, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x27, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4d, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x02, 0x54, 0x02, 0x53, 0x0a, + 0x4d, 0x65, 0x69, 0x6a, 0x69, 0x0d, 0x54, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x0b, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x0c, 0x48, 0x65, + 0x69, 0x73, 0x65, 0x69, 0x12, 0x46, 0x61, 0x72, + 0x76, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x16, 0x4f, + 0x72, 0x64, 0x69, 0x62, 0x65, 0x68, 0x65, 0x73, + 0x68, 0x74, 0x0e, 0x4b, 0x68, 0x6f, 0x72, 0x64, + 0x61, 0x64, 0x06, 0x54, 0x69, 0x72, 0x0c, 0x4d, + 0x6f, 0x72, 0x64, 0x61, 0x64, 0x12, 0x53, 0x68, + 0x61, 0x68, 0x72, 0x69, 0x76, 0x61, 0x72, 0x08, + 0x4d, 0x65, 0x68, 0x72, 0x08, 0x41, 0x62, 0x61, + 0x6e, 0x08, 0x41, 0x7a, 0x61, 0x72, 0x06, 0x44, + 0x65, 0x79, 0x0c, 0x42, 0x61, 0x68, 0x6d, 0x61, + 0x6e, 0x0c, 0x45, 0x73, 0x66, 0x61, 0x6e, 0x64, + 0x04, 0x41, 0x50, 0x1a, 0x42, 0x65, 0x66, 0x6f, + 0x72, 0x65, 0x20, 0x52, 0x2e, 0x4f, 0x2e, 0x43, + 0x2e, 0x0c, 0x52, 0x2e, 0x4f, 0x2e, 0x43, 0x2e, + 0x12, 0x63, 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, + 0x72, 0x73, 0x08, 0x64, 0x61, 0x74, 0x65, 0x08, + 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, 0x75, 0x10, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0x1e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, + 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, + 0x26, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x6e, 0x65, 0x67, + 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, + 0x74, 0x65, 0x72, 0x6e, 0x0e, 0x64, 0x65, 0x63, + 0x69, 0x6d, 0x61, 0x6c, 0x26, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0xa0, 0x7b, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, + 0x3c, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0xa0, 0x7b, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, 0x10, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, + 0x2a, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, + 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x40, 0x7b, + 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, + 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x0e, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x10, + 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, + 0x02, 0x2c, 0x02, 0xa0, 0x0a, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x06, 0x4e, 0x61, 0x4e, 0x06, 0x6e, + 0x61, 0x6e, 0x02, 0x2b, 0x10, 0x70, 0x6c, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, 0x2d, 0x12, + 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x02, 0x25, 0x16, 0x70, 0x65, 0x72, 0x63, + 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x03, + 0x1e, 0x22, 0x10, 0x69, 0x6e, 0x66, 0x69, 0x6e, + 0x69, 0x74, 0x79, 0x0e, 0x73, 0x79, 0x6d, 0x62, + 0x6f, 0x6c, 0x73, 0x04, 0x41, 0x24, 0x06, 0x41, + 0x55, 0x44, 0x05, 0x11, 0x04, 0x14, 0x04, 0x06, + 0x42, 0x4d, 0x44, 0x04, 0x52, 0x24, 0x06, 0x42, + 0x52, 0x4c, 0x07, 0x1a, 0x04, 0x14, 0x04, 0x24, + 0x00, 0x06, 0x43, 0x41, 0x44, 0x06, 0x43, 0x4e, + 0xa5, 0x06, 0x43, 0x4e, 0x59, 0x03, 0xac, 0x20, + 0x06, 0x45, 0x55, 0x52, 0x02, 0xa3, 0x06, 0x47, + 0x42, 0x50, 0x06, 0x48, 0x4b, 0x24, 0x06, 0x48, + 0x4b, 0x44, 0x03, 0xaa, 0x20, 0x06, 0x49, 0x4c, + 0x53, 0x03, 0xb9, 0x20, 0x06, 0x49, 0x4e, 0x52, + 0x06, 0x4a, 0x50, 0xa5, 0x06, 0x4a, 0x50, 0x59, + 0x03, 0xa9, 0x20, 0x06, 0x4b, 0x52, 0x57, 0x03, + 0xb8, 0x20, 0x06, 0x4b, 0x5a, 0x54, 0x06, 0x4d, + 0x58, 0x24, 0x06, 0x4d, 0x58, 0x4e, 0x06, 0x4e, + 0x5a, 0x24, 0x06, 0x4e, 0x5a, 0x44, 0x03, 0xbd, + 0x20, 0x06, 0x52, 0x55, 0x42, 0x03, 0x3f, 0x0e, + 0x06, 0x54, 0x48, 0x42, 0x06, 0x4e, 0x54, 0x24, + 0x06, 0x54, 0x57, 0x44, 0x02, 0x24, 0x06, 0x55, + 0x53, 0x44, 0x03, 0xab, 0x20, 0x06, 0x56, 0x4e, + 0x44, 0x08, 0x46, 0x43, 0x46, 0x41, 0x06, 0x58, + 0x41, 0x46, 0x06, 0x45, 0x43, 0x24, 0x06, 0x58, + 0x43, 0x44, 0x06, 0x43, 0x46, 0x41, 0x06, 0x58, + 0x4f, 0x46, 0x08, 0x43, 0x46, 0x50, 0x46, 0x06, + 0x58, 0x50, 0x46, 0x14, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x52, 0x6e, + 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, + 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, + 0x64, 0x61, 0x74, 0x61, 0x2f, 0x6a, 0x73, 0x6f, + 0x6e, 0x70, 0x2f, 0x6b, 0x6b, 0x2e, 0x6a, 0x73, + 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, + 0x00, 0x27, 0x00, 0x89, 0x01, 0xfc, 0x6a, 0x01, + 0xa0, 0x01, 0x00, 0x00, 0x00, 0x39, 0xd0, 0x00, + 0x00, 0x00, 0x43, 0xd1, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd2, 0x00, 0x00, 0x00, 0x4d, 0xd3, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd4, 0x00, 0x00, 0x00, + 0x04, 0xd5, 0x00, 0x00, 0x00, 0x04, 0xd6, 0x00, + 0x00, 0x00, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x04, + 0xd8, 0x00, 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, + 0x00, 0x04, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdb, + 0x00, 0x00, 0x00, 0x04, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0xdd, 0x00, 0x00, 0x00, 0x04, 0xde, 0x00, + 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, 0x04, + 0xe0, 0x00, 0x00, 0x00, 0x04, 0xe1, 0x00, 0x00, + 0x00, 0x04, 0xe2, 0x00, 0x00, 0x00, 0x26, 0x0f, + 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x0a, 0x4d, + 0xe4, 0x00, 0x00, 0x00, 0x09, 0x4d, 0xe5, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, + 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x04, 0xec, + 0x00, 0x00, 0x00, 0x4d, 0xed, 0x00, 0x00, 0x00, + 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, 0xef, 0x00, + 0x00, 0x00, 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, + 0xf1, 0x00, 0x00, 0x00, 0x04, 0xf2, 0x00, 0x00, + 0x00, 0x4d, 0xf3, 0x00, 0x00, 0x00, 0x04, 0xf4, + 0x00, 0x00, 0x00, 0x4d, 0xf5, 0x00, 0x00, 0x00, + 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, 0xf7, 0x00, + 0x00, 0x00, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, + 0xf9, 0x00, 0x00, 0x00, 0x04, 0xfa, 0x00, 0x00, + 0x00, 0x4d, 0xfb, 0x00, 0x00, 0x00, 0x04, 0xfc, + 0x00, 0x00, 0x00, 0x4d, 0xfd, 0x00, 0x00, 0x00, + 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, 0xff, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, + 0x01, 0x01, 0x00, 0x00, 0x04, 0x02, 0x01, 0x00, + 0x00, 0x4d, 0x03, 0x01, 0x00, 0x00, 0x04, 0x04, + 0x01, 0x00, 0x00, 0x4d, 0x05, 0x01, 0x00, 0x00, + 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, 0x07, 0x01, + 0x00, 0x00, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, + 0x09, 0x01, 0x00, 0x00, 0x04, 0x0a, 0x01, 0x00, + 0x00, 0x4d, 0x0b, 0x01, 0x00, 0x00, 0x04, 0x0c, + 0x01, 0x00, 0x00, 0x4d, 0x0d, 0x01, 0x00, 0x00, + 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, 0x0f, 0x01, + 0x00, 0x00, 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, + 0x11, 0x01, 0x00, 0x00, 0x04, 0x12, 0x01, 0x00, + 0x00, 0x4d, 0x13, 0x01, 0x00, 0x00, 0x04, 0x14, + 0x01, 0x00, 0x00, 0x4d, 0x15, 0x01, 0x00, 0x00, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, 0x17, 0x01, + 0x00, 0x00, 0x04, 0x18, 0x01, 0x00, 0x00, 0x4d, + 0x19, 0x01, 0x00, 0x00, 0x04, 0x1a, 0x01, 0x00, + 0x00, 0x4d, 0x1b, 0x01, 0x00, 0x00, 0x04, 0x1c, + 0x01, 0x00, 0x00, 0x4d, 0x1d, 0x01, 0x00, 0x00, + 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, 0x1f, 0x01, + 0x00, 0x00, 0x04, 0x20, 0x01, 0x00, 0x00, 0x4d, + 0x21, 0x01, 0x00, 0x00, 0x04, 0x22, 0x01, 0x00, + 0x00, 0x4d, 0x23, 0x01, 0x00, 0x00, 0x04, 0x24, + 0x01, 0x00, 0x00, 0x4d, 0x24, 0x01, 0x00, 0x00, + 0x04, 0x25, 0x01, 0x00, 0x00, 0x4d, 0x26, 0x01, + 0x00, 0x00, 0x04, 0x27, 0x01, 0x00, 0x00, 0x4d, + 0x28, 0x01, 0x00, 0x00, 0x04, 0x29, 0x01, 0x00, + 0x00, 0x4d, 0x2a, 0x01, 0x00, 0x00, 0x04, 0x2b, + 0x01, 0x00, 0x00, 0x4d, 0x2c, 0x01, 0x00, 0x00, + 0x04, 0x2d, 0x01, 0x00, 0x00, 0x4d, 0x2e, 0x01, + 0x00, 0x00, 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, + 0x30, 0x01, 0x00, 0x00, 0x04, 0x31, 0x01, 0x00, + 0x00, 0x4d, 0x32, 0x01, 0x00, 0x00, 0x04, 0x33, + 0x01, 0x00, 0x00, 0x4d, 0x34, 0x01, 0x00, 0x00, + 0x04, 0x35, 0x01, 0x00, 0x00, 0x4d, 0x36, 0x01, + 0x00, 0x00, 0x4d, 0x37, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x38, 0x01, 0x00, 0x00, 0x4d, 0x39, 0x01, + 0x00, 0x00, 0x04, 0x3a, 0x01, 0x00, 0x00, 0x4d, + 0x3b, 0x01, 0x00, 0x00, 0x04, 0x3c, 0x01, 0x00, + 0x00, 0x4d, 0x2e, 0x01, 0x00, 0x00, 0x04, 0x3d, + 0x01, 0x00, 0x00, 0x4d, 0x28, 0x01, 0x00, 0x00, + 0x4d, 0x3e, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x3f, + 0x01, 0x00, 0x00, 0x4d, 0x40, 0x01, 0x00, 0x00, + 0x04, 0x41, 0x01, 0x00, 0x00, 0x4d, 0x42, 0x01, + 0x00, 0x00, 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, + 0x09, 0x01, 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, + 0x00, 0x4d, 0x05, 0x01, 0x00, 0x00, 0x4d, 0x43, + 0x01, 0x00, 0x00, 0x4d, 0x44, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x0b, 0x04, 0x45, 0x01, 0x00, 0x00, + 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, + 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x66, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x77, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x00, 0xbe, 0x01, 0xbe, 0x02, 0xbe, + 0x03, 0xbe, 0x04, 0xbe, 0x05, 0xbe, 0x06, 0xbe, + 0x07, 0xbe, 0x08, 0xbe, 0x09, 0xbe, 0x0a, 0xbe, + 0x0b, 0x26, 0x0c, 0x00, 0x4d, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, + 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, + 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, + 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x66, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, + 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x4d, + 0xd6, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x0c, + 0xbe, 0x0d, 0xbe, 0x0e, 0xbe, 0x0f, 0xbe, 0x10, + 0xbe, 0x11, 0xbe, 0x12, 0xbe, 0x13, 0xbe, 0x14, + 0xbe, 0x15, 0xbe, 0x16, 0xbe, 0x17, 0xbe, 0x18, + 0x26, 0x0d, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, + 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, + 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, + 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, + 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, + 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, + 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, + 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, + 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, + 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, + 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, + 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, + 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, + 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, + 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x66, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, + 0x04, 0x99, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x79, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, + 0x7e, 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x19, 0xbe, 0x1a, 0xbe, + 0x1b, 0xbe, 0x1c, 0xbe, 0x1d, 0xbe, 0x1e, 0xbe, + 0x1f, 0xbe, 0x20, 0xbe, 0x21, 0xbe, 0x22, 0xbe, + 0x23, 0xbe, 0x24, 0x26, 0x0c, 0x00, 0x4d, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, + 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, + 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, + 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, + 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, + 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, + 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x66, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x4d, + 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x25, 0xbe, 0x26, 0xbe, 0x27, 0xbe, 0x28, + 0xbe, 0x29, 0xbe, 0x2a, 0xbe, 0x2b, 0xbe, 0x2c, + 0xbe, 0x2d, 0xbe, 0x2e, 0xbe, 0x2f, 0xbe, 0x30, + 0xbe, 0x31, 0x26, 0x0d, 0x00, 0x4d, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, + 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, + 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, + 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, + 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, + 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, + 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, + 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, + 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, + 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, + 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, + 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, + 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, + 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, + 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, + 0xa6, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x66, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, + 0x04, 0x99, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x98, 0x01, + 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x79, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, + 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x32, 0xbe, + 0x33, 0xbe, 0x34, 0xbe, 0x35, 0xbe, 0x36, 0xbe, + 0x37, 0xbe, 0x38, 0xbe, 0x39, 0xbe, 0x3a, 0xbe, + 0x3b, 0xbe, 0x3c, 0xbe, 0x3d, 0xbe, 0x3e, 0x26, + 0x0d, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, + 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, + 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, + 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, + 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, + 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, + 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, + 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, + 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, + 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, + 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, + 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, + 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, + 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, + 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x66, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x98, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x98, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x79, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, + 0x7e, 0x01, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x3f, 0xbe, 0x40, 0xbe, + 0x41, 0xbe, 0x42, 0xbe, 0x43, 0xbe, 0x44, 0xbe, + 0x45, 0xbe, 0x46, 0xbe, 0x47, 0xbe, 0x48, 0xbe, + 0x49, 0xbe, 0x4a, 0x26, 0x0c, 0x00, 0x4d, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, + 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, + 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, + 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, + 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, + 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, + 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x66, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, + 0x99, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, + 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x79, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, + 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x45, 0x01, 0x00, + 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, + 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, 0x45, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x66, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xa7, 0x01, + 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, + 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, + 0x00, 0x26, 0x04, 0x00, 0x4d, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, + 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, + 0x04, 0xaa, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xab, 0x01, + 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, + 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, + 0x00, 0x26, 0x04, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, + 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x4b, 0xbe, 0x4c, 0xbe, 0x4d, 0xbe, 0x4e, 0xbe, + 0x4f, 0xbe, 0x50, 0xbe, 0x51, 0xbe, 0x52, 0xbe, + 0x53, 0xbe, 0x54, 0xbe, 0x55, 0xbe, 0x56, 0xbe, + 0x57, 0xbe, 0x58, 0x26, 0x0e, 0x00, 0x4d, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, + 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, + 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, + 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, + 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, + 0x01, 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, + 0x04, 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, + 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, 0x04, + 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, + 0x00, 0x26, 0x0e, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, 0xae, + 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, + 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, + 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, + 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, + 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, 0x04, 0xb6, + 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, + 0x04, 0xb8, 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, + 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, 0x26, + 0x0e, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x66, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x77, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xbb, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xbb, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x59, 0xbe, 0x5a, 0xbe, 0x5b, 0xbe, + 0x5c, 0xbe, 0x5d, 0xbe, 0x5e, 0xbe, 0x5f, 0xbe, + 0x60, 0xbe, 0x61, 0xbe, 0x62, 0xbe, 0x63, 0xbe, + 0x64, 0x26, 0x0c, 0x00, 0x4d, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, 0x04, 0xbd, + 0x01, 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, + 0x04, 0xbf, 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, + 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, 0x04, + 0xc2, 0x01, 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, + 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, 0x04, 0xc5, + 0x01, 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, 0x00, + 0x04, 0xc7, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xbc, 0x01, + 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, 0x04, + 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, 0x00, + 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, 0x04, 0xc1, + 0x01, 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, 0x00, + 0x04, 0xc3, 0x01, 0x00, 0x00, 0x04, 0xc4, 0x01, + 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, 0x04, + 0xc6, 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x66, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xc8, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xc8, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x79, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, + 0x7e, 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x65, 0xbe, 0x66, 0xbe, + 0x67, 0xbe, 0x68, 0xbe, 0x69, 0xbe, 0x6a, 0xbe, + 0x6b, 0xbe, 0x6c, 0xbe, 0x6d, 0xbe, 0x6e, 0xbe, + 0x6f, 0xbe, 0x70, 0x26, 0x0c, 0x00, 0x4d, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, + 0x04, 0xca, 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, + 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, + 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, + 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, + 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, + 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, + 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, + 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, 0xd8, + 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, + 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, + 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, 0x04, + 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, + 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, 0xe0, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x66, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xe1, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x79, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, + 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x71, 0xbe, + 0x72, 0xbe, 0x73, 0xbe, 0x74, 0xbe, 0x75, 0xbe, + 0x76, 0xbe, 0x77, 0xbe, 0x78, 0xbe, 0x79, 0xbe, + 0x7a, 0xbe, 0x7b, 0xbe, 0x7c, 0x26, 0x0c, 0x00, + 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, + 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, 0x04, + 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, + 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, + 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, + 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, + 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, + 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, + 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, + 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, + 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, + 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, + 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, + 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, + 0x04, 0xe0, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x66, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xe1, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0xe1, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, + 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x45, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x45, 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, + 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, + 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x66, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, 0xe3, 0x01, + 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, 0x04, + 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, + 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, + 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, + 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, + 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, + 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, + 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, + 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, + 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, + 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, + 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, + 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, + 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, + 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, + 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, + 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, + 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, + 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, + 0x26, 0x20, 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, + 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0x03, 0x02, + 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, + 0x04, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, + 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, 0x4d, 0x23, + 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, 0x00, 0x00, + 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x07, 0x02, + 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, + 0x08, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, + 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, 0x27, + 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, + 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, + 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, + 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, + 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x2b, + 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, + 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, + 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, + 0x10, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, + 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, 0x2f, + 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, + 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, + 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, + 0x14, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, + 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, 0x33, + 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, + 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, + 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, + 0x18, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, + 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, 0x37, + 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, + 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, + 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, + 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, + 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x3b, + 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, + 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, + 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, + 0x20, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, + 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, 0x3f, + 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, + 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, + 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, + 0x24, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, + 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, 0x43, + 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, + 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, + 0x28, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, + 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, 0x47, + 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, + 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, + 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, + 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, + 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x4b, + 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, + 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, + 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, + 0x30, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, + 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, 0x4f, + 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, + 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, + 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, + 0x34, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, + 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, 0x53, + 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, + 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, + 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, + 0x38, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, + 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, 0x57, + 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, + 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, + 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, + 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, + 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x5b, + 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, + 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, + 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, + 0x40, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, + 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, 0x5f, + 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, + 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, + 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, + 0x44, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, + 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, 0x63, + 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, + 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, + 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, + 0x48, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, + 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, 0x67, + 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, + 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, + 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, + 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, + 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x6b, + 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, + 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, + 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, + 0x50, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, + 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, 0x6f, + 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, + 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, + 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, + 0x54, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, + 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, 0x73, + 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, + 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, + 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, + 0x58, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, + 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, 0x77, + 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, + 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, + 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, + 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, + 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x7b, + 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, + 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, + 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, + 0x60, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, + 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, 0x7f, + 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, + 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, + 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, + 0x64, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, + 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, 0x83, + 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, + 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, + 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, + 0x68, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, + 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, 0x87, + 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, + 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, + 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, + 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, + 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x8b, + 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, + 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, + 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, + 0x70, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, + 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, 0x8f, + 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, + 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, + 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, + 0x74, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, + 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, 0x93, + 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, + 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, + 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, + 0x78, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, + 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, 0x97, + 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, + 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, + 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, + 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, + 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x9b, + 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, + 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, + 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, + 0x80, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, + 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, 0x9f, + 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, + 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, + 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, + 0x84, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, + 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, 0xa3, + 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, + 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, + 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, + 0x88, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, + 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, 0xa7, + 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, + 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, + 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, + 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, + 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xab, + 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, + 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, + 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, + 0x90, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, + 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, 0xaf, + 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, + 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, + 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, + 0x94, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, + 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, 0xb3, + 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, + 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, + 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, + 0x98, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, + 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, 0xb7, + 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, + 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, + 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, + 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, + 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xbb, + 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, + 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, + 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, + 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, + 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xbf, + 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, + 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, + 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, + 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, + 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xc3, + 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, + 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, + 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, + 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, + 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xc7, + 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, + 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, + 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, + 0xac, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, + 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0xcb, + 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, + 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, + 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, + 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, + 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xcf, + 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, + 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, + 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, + 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, + 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, + 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, + 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, + 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, + 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, + 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, + 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, + 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x80, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, + 0xcb, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x80, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x80, 0x4d, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, 0xe3, 0x01, + 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, 0x04, + 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, + 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, + 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, + 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, + 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, + 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, + 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, + 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, + 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, + 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, + 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, + 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, + 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, + 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, + 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, + 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, + 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, + 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, + 0x26, 0x20, 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, + 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0x03, 0x02, + 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, + 0x04, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, + 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, 0x4d, 0x23, + 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, 0x00, 0x00, + 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x07, 0x02, + 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, + 0x08, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, + 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, 0x27, + 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, + 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, + 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, + 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, + 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x2b, + 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, + 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, + 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, + 0x10, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, + 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, 0x2f, + 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, + 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, + 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, + 0x14, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, + 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, 0x33, + 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, + 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, + 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, + 0x18, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, + 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, 0x37, + 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, + 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, + 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, + 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, + 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x3b, + 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, + 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, + 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, + 0x20, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, + 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, 0x3f, + 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, + 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, + 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, + 0x24, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, + 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, 0x43, + 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, + 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, + 0x28, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, + 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, 0x47, + 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, + 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, + 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, + 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, + 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x4b, + 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, + 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, + 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, + 0x30, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, + 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, 0x4f, + 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, + 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, + 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, + 0x34, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, + 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, 0x53, + 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, + 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, + 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, + 0x38, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, + 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, 0x57, + 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, + 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, + 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, + 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, + 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x5b, + 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, + 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, + 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, + 0x40, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, + 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, 0x5f, + 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, + 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, + 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, + 0x44, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, + 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, 0x63, + 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, + 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, + 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, + 0x48, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, + 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, 0x67, + 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, + 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, + 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, + 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, + 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x6b, + 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, + 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, + 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, + 0x50, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, + 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, 0x6f, + 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, + 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, + 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, + 0x54, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, + 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, 0x73, + 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, + 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, + 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, + 0x58, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, + 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, 0x77, + 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, + 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, + 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, + 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, + 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x7b, + 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, + 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, + 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, + 0x60, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, + 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, 0x7f, + 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, + 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, + 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, + 0x64, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, + 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, 0x83, + 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, + 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, + 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, + 0x68, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, + 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, 0x87, + 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, + 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, + 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, + 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, + 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x8b, + 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, + 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, + 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, + 0x70, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, + 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, 0x8f, + 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, + 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, + 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, + 0x74, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, + 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, 0x93, + 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, + 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, + 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, + 0x78, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, + 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, 0x97, + 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, + 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, + 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, + 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, + 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x9b, + 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, + 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, + 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, + 0x80, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, + 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, 0x9f, + 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, + 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, + 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, + 0x84, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, + 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, 0xa3, + 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, + 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, + 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, + 0x88, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, + 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, 0xa7, + 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, + 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, + 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, + 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, + 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xab, + 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, + 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, + 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, + 0x90, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, + 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, 0xaf, + 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, + 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, + 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, + 0x94, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, + 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, 0xb3, + 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, + 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, + 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, + 0x98, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, + 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, 0xb7, + 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, + 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, + 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, + 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, + 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xbb, + 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, + 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, + 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, + 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, + 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xbf, + 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, + 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, + 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, + 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, + 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xc3, + 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, + 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, + 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, + 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, + 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xc7, + 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, + 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, + 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, + 0xac, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, + 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0xcb, + 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, + 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, + 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, + 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, + 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xcf, + 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, + 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, + 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, + 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, + 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, + 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, + 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, + 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, + 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, + 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, + 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, + 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xcd, 0x02, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, + 0xce, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x80, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, 0xe3, 0x01, + 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, 0x04, + 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, + 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, + 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, + 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, + 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, + 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, + 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, + 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, + 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, + 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, + 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, + 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, + 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, + 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, + 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, + 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, + 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, + 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, + 0x26, 0x20, 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, + 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0x03, 0x02, + 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, + 0x04, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, + 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, 0x4d, 0x23, + 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, 0x00, 0x00, + 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x07, 0x02, + 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, + 0x08, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, + 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, 0x27, + 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, + 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, + 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, + 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, + 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x2b, + 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, + 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, + 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, + 0x10, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, + 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, 0x2f, + 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, + 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, + 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, + 0x14, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, + 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, 0x33, + 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, + 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, + 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, + 0x18, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, + 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, 0x37, + 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, + 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, + 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, + 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, + 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x3b, + 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, + 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, + 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, + 0x20, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, + 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, 0x3f, + 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, + 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, + 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, + 0x24, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, + 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, 0x43, + 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, + 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, + 0x28, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, + 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, 0x47, + 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, + 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, + 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, + 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, + 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x4b, + 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, + 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, + 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, + 0x30, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, + 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, 0x4f, + 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, + 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, + 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, + 0x34, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, + 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, 0x53, + 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, + 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, + 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, + 0x38, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, + 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, 0x57, + 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, + 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, + 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, + 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, + 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x5b, + 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, + 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, + 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, + 0x40, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, + 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, 0x5f, + 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, + 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, + 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, + 0x44, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, + 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, 0x63, + 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, + 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, + 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, + 0x48, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, + 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, 0x67, + 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, + 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, + 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, + 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, + 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x6b, + 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, + 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, + 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, + 0x50, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, + 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, 0x6f, + 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, + 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, + 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, + 0x54, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, + 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, 0x73, + 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, + 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, + 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, + 0x58, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, + 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, 0x77, + 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, + 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, + 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, + 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, + 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x7b, + 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, + 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, + 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, + 0x60, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, + 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, 0x7f, + 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, + 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, + 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, + 0x64, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, + 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, 0x83, + 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, + 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, + 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, + 0x68, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, + 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, 0x87, + 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, + 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, + 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, + 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, + 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x8b, + 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, + 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, + 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, + 0x70, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, + 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, 0x8f, + 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, + 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, + 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, + 0x74, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, + 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, 0x93, + 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, + 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, + 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, + 0x78, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, + 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, 0x97, + 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, + 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, + 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, + 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, + 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x9b, + 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, + 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, + 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, + 0x80, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, + 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, 0x9f, + 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, + 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, + 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, + 0x84, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, + 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, 0xa3, + 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, + 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, + 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, + 0x88, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, + 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, 0xa7, + 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, + 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, + 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, + 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, + 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xab, + 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, + 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, + 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, + 0x90, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, + 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, 0xaf, + 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, + 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, + 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, + 0x94, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, + 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, 0xb3, + 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, + 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, + 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, + 0x98, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, + 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, 0xb7, + 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, + 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, + 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, + 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, + 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xbb, + 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, + 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, + 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, + 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, + 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xbf, + 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, + 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, + 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, + 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, + 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xc3, + 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, + 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, + 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, + 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, + 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xc7, + 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, + 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, + 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, + 0xac, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, + 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0xcb, + 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, + 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, + 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, + 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, + 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xcf, + 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, + 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, + 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, + 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, + 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, + 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, + 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, + 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, + 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, + 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, + 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, + 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xcd, 0x02, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, + 0xce, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x80, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x79, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, + 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x7d, + 0xbe, 0x7e, 0xbe, 0x7f, 0xbe, 0x80, 0xbe, 0x81, + 0xbe, 0x82, 0xbe, 0x83, 0xbe, 0x84, 0xbe, 0x85, + 0xbe, 0x86, 0xbe, 0x87, 0xbe, 0x88, 0x26, 0x0c, + 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0xd0, + 0x02, 0x00, 0x00, 0x04, 0xd1, 0x02, 0x00, 0x00, + 0x04, 0xd2, 0x02, 0x00, 0x00, 0x04, 0xd3, 0x02, + 0x00, 0x00, 0x04, 0xd4, 0x02, 0x00, 0x00, 0x04, + 0xd5, 0x02, 0x00, 0x00, 0x04, 0xd6, 0x02, 0x00, + 0x00, 0x04, 0xd7, 0x02, 0x00, 0x00, 0x04, 0xd8, + 0x02, 0x00, 0x00, 0x04, 0xd9, 0x02, 0x00, 0x00, + 0x04, 0xda, 0x02, 0x00, 0x00, 0x04, 0xdb, 0x02, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xd0, 0x02, 0x00, 0x00, 0x04, + 0xd1, 0x02, 0x00, 0x00, 0x04, 0xd2, 0x02, 0x00, + 0x00, 0x04, 0xd3, 0x02, 0x00, 0x00, 0x04, 0xd4, + 0x02, 0x00, 0x00, 0x04, 0xd5, 0x02, 0x00, 0x00, + 0x04, 0xd6, 0x02, 0x00, 0x00, 0x04, 0xd7, 0x02, + 0x00, 0x00, 0x04, 0xd8, 0x02, 0x00, 0x00, 0x04, + 0xd9, 0x02, 0x00, 0x00, 0x04, 0xda, 0x02, 0x00, + 0x00, 0x04, 0xdb, 0x02, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x66, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x77, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xdc, 0x02, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0xdc, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xdc, 0x02, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x4d, + 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, + 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x66, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xdd, 0x02, 0x00, 0x00, 0x04, 0xde, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0xdd, 0x02, 0x00, 0x00, + 0x04, 0xde, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xdd, 0x02, + 0x00, 0x00, 0x04, 0xde, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x79, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, + 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0xe2, + 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x02, 0x00, 0x00, + 0x4d, 0xe0, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xe1, + 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe2, + 0x02, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xe3, 0x02, + 0x00, 0x00, 0x4d, 0xe4, 0x02, 0x00, 0x00, 0x04, + 0xe5, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x02, 0x00, + 0x00, 0x4d, 0xe7, 0x02, 0x00, 0x00, 0x0b, 0x04, + 0xe8, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x02, 0x00, + 0x00, 0x04, 0xe9, 0x02, 0x00, 0x00, 0x4d, 0xe6, + 0x02, 0x00, 0x00, 0x4d, 0xea, 0x02, 0x00, 0x00, + 0x0b, 0x04, 0xeb, 0x02, 0x00, 0x00, 0x4d, 0xe4, + 0x02, 0x00, 0x00, 0x04, 0xec, 0x02, 0x00, 0x00, + 0x4d, 0xe6, 0x02, 0x00, 0x00, 0x4d, 0xed, 0x02, + 0x00, 0x00, 0x4d, 0xee, 0x02, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0xef, 0x02, 0x00, 0x00, 0x4d, 0xe7, + 0x02, 0x00, 0x00, 0x04, 0xf0, 0x02, 0x00, 0x00, + 0x4d, 0xf1, 0x02, 0x00, 0x00, 0x04, 0xf2, 0x02, + 0x00, 0x00, 0x4d, 0xf3, 0x02, 0x00, 0x00, 0x04, + 0xf4, 0x02, 0x00, 0x00, 0x4d, 0xf5, 0x02, 0x00, + 0x00, 0x04, 0xf6, 0x02, 0x00, 0x00, 0x4d, 0xf7, + 0x02, 0x00, 0x00, 0x04, 0xf8, 0x02, 0x00, 0x00, + 0x4d, 0xf9, 0x02, 0x00, 0x00, 0x04, 0xfa, 0x02, + 0x00, 0x00, 0x4d, 0xfb, 0x02, 0x00, 0x00, 0x4d, + 0xe1, 0x02, 0x00, 0x00, 0x4d, 0xfc, 0x02, 0x00, + 0x00, 0x0b, 0x04, 0xfd, 0x02, 0x00, 0x00, 0x4d, + 0xfe, 0x02, 0x00, 0x00, 0x04, 0xff, 0x02, 0x00, + 0x00, 0x4d, 0x00, 0x03, 0x00, 0x00, 0x04, 0x01, + 0x03, 0x00, 0x00, 0x4d, 0x02, 0x03, 0x00, 0x00, + 0x04, 0x03, 0x03, 0x00, 0x00, 0x4d, 0x04, 0x03, + 0x00, 0x00, 0x04, 0x05, 0x03, 0x00, 0x00, 0x4d, + 0x06, 0x03, 0x00, 0x00, 0x04, 0x07, 0x03, 0x00, + 0x00, 0x4d, 0x08, 0x03, 0x00, 0x00, 0x04, 0x09, + 0x03, 0x00, 0x00, 0x4d, 0x0a, 0x03, 0x00, 0x00, + 0x04, 0x0b, 0x03, 0x00, 0x00, 0x4d, 0x0c, 0x03, + 0x00, 0x00, 0x04, 0x0d, 0x03, 0x00, 0x00, 0x4d, + 0x0e, 0x03, 0x00, 0x00, 0x04, 0x0f, 0x03, 0x00, + 0x00, 0x4d, 0x10, 0x03, 0x00, 0x00, 0x04, 0x11, + 0x03, 0x00, 0x00, 0x4d, 0x12, 0x03, 0x00, 0x00, + 0x04, 0x13, 0x03, 0x00, 0x00, 0x4d, 0x14, 0x03, + 0x00, 0x00, 0x04, 0x15, 0x03, 0x00, 0x00, 0x4d, + 0x16, 0x03, 0x00, 0x00, 0x04, 0x17, 0x03, 0x00, + 0x00, 0x4d, 0x18, 0x03, 0x00, 0x00, 0x04, 0x19, + 0x03, 0x00, 0x00, 0x4d, 0x1a, 0x03, 0x00, 0x00, + 0x04, 0x1b, 0x03, 0x00, 0x00, 0x4d, 0x1c, 0x03, + 0x00, 0x00, 0x04, 0x1d, 0x03, 0x00, 0x00, 0x4d, + 0x1e, 0x03, 0x00, 0x00, 0x04, 0x1f, 0x03, 0x00, + 0x00, 0x4d, 0x20, 0x03, 0x00, 0x00, 0x04, 0x21, + 0x03, 0x00, 0x00, 0x4d, 0x22, 0x03, 0x00, 0x00, + 0x04, 0x23, 0x03, 0x00, 0x00, 0x4d, 0x24, 0x03, + 0x00, 0x00, 0x04, 0x25, 0x03, 0x00, 0x00, 0x4d, + 0x26, 0x03, 0x00, 0x00, 0x04, 0x27, 0x03, 0x00, + 0x00, 0x4d, 0x28, 0x03, 0x00, 0x00, 0x04, 0x29, + 0x03, 0x00, 0x00, 0x4d, 0x2a, 0x03, 0x00, 0x00, + 0x04, 0x2b, 0x03, 0x00, 0x00, 0x4d, 0x2c, 0x03, + 0x00, 0x00, 0x4d, 0x2d, 0x03, 0x00, 0x00, 0x4d, + 0x45, 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, 0xcc, + 0x28, 0xdc, 0x0c, 0x01, 0x00, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, + 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_km_size = 24918; + +const uint8_t intl_km[24918] = { + 0x01, 0xc5, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x6b, 0x6d, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x10, + 0x7b, 0x31, 0x7d, 0x2c, 0x20, 0x7b, 0x30, 0x7d, + 0x0a, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, + 0x65, 0x64, 0x69, 0x75, 0x6d, 0x15, 0x7b, 0x00, + 0x31, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x93, 0x17, + 0xc5, 0x17, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x08, 0x66, 0x75, 0x6c, 0x6c, 0x08, + 0x6c, 0x6f, 0x6e, 0x67, 0x02, 0x64, 0x06, 0x63, + 0x63, 0x63, 0x02, 0x45, 0x06, 0x64, 0x20, 0x45, + 0x04, 0x45, 0x64, 0x10, 0x45, 0x20, 0x68, 0x3a, + 0x6d, 0x6d, 0x20, 0x61, 0x06, 0x45, 0x68, 0x6d, + 0x0e, 0x45, 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x06, 0x45, 0x48, 0x6d, 0x16, 0x45, 0x20, 0x68, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, + 0x08, 0x45, 0x68, 0x6d, 0x73, 0x14, 0x45, 0x20, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x08, 0x45, 0x48, 0x6d, 0x73, 0x0d, 0x79, 0x00, + 0x20, 0x00, 0x93, 0x17, 0xc3, 0x17, 0x20, 0x00, + 0x47, 0x00, 0x04, 0x47, 0x79, 0x15, 0x4d, 0x00, + 0x4d, 0x00, 0x4d, 0x00, 0x20, 0x00, 0x79, 0x00, + 0x20, 0x00, 0x93, 0x17, 0xc3, 0x17, 0x20, 0x00, + 0x47, 0x00, 0x0a, 0x47, 0x79, 0x4d, 0x4d, 0x4d, + 0x19, 0x64, 0x00, 0x20, 0x00, 0x4d, 0x00, 0x4d, + 0x00, 0x4d, 0x00, 0x20, 0x00, 0x79, 0x00, 0x20, + 0x00, 0x93, 0x17, 0xc3, 0x17, 0x20, 0x00, 0x47, + 0x00, 0x0c, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x64, + 0x1d, 0x45, 0x00, 0x20, 0x00, 0x64, 0x00, 0x20, + 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x20, + 0x00, 0x79, 0x00, 0x20, 0x00, 0x93, 0x17, 0xc3, + 0x17, 0x20, 0x00, 0x47, 0x00, 0x0e, 0x47, 0x79, + 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x06, 0x68, 0x20, + 0x61, 0x02, 0x68, 0x04, 0x48, 0x48, 0x02, 0x48, + 0x0c, 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x04, + 0x68, 0x6d, 0x0a, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x04, 0x48, 0x6d, 0x12, 0x68, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x61, 0x06, 0x68, 0x6d, + 0x73, 0x10, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x06, 0x48, 0x6d, 0x73, 0x16, 0x68, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, + 0x20, 0x76, 0x08, 0x68, 0x6d, 0x73, 0x76, 0x14, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x76, 0x08, 0x48, 0x6d, 0x73, 0x76, 0x10, + 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x20, 0x76, + 0x06, 0x68, 0x6d, 0x76, 0x0e, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x20, 0x76, 0x06, 0x48, 0x6d, 0x76, + 0x02, 0x4c, 0x02, 0x4d, 0x06, 0x64, 0x2d, 0x4d, + 0x04, 0x4d, 0x64, 0x0e, 0x45, 0x20, 0x64, 0x20, + 0x4d, 0x4d, 0x4d, 0x06, 0x4d, 0x45, 0x64, 0x06, + 0x4c, 0x4c, 0x4c, 0x06, 0x4d, 0x4d, 0x4d, 0x0a, + 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x08, 0x4d, 0x4d, + 0x4d, 0x64, 0x0a, 0x4d, 0x4d, 0x4d, 0x45, 0x64, + 0x0c, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x0a, + 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x0a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x04, 0x6d, 0x73, 0x02, 0x79, + 0x06, 0x4d, 0x2d, 0x79, 0x04, 0x79, 0x4d, 0x0a, + 0x64, 0x2d, 0x4d, 0x2d, 0x79, 0x06, 0x79, 0x4d, + 0x64, 0x0e, 0x45, 0x20, 0x64, 0x2d, 0x4d, 0x2d, + 0x79, 0x08, 0x79, 0x4d, 0x45, 0x64, 0x0a, 0x4d, + 0x4d, 0x4d, 0x20, 0x79, 0x08, 0x79, 0x4d, 0x4d, + 0x4d, 0x0e, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x20, + 0x79, 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x12, + 0x45, 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x20, + 0x79, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, + 0x0c, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0a, + 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, 0x51, 0x51, + 0x51, 0x20, 0x79, 0x08, 0x79, 0x51, 0x51, 0x51, + 0x0c, 0x51, 0x51, 0x51, 0x51, 0x20, 0x79, 0x0a, + 0x79, 0x51, 0x51, 0x51, 0x51, 0x20, 0x61, 0x76, + 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x1a, 0x45, + 0x45, 0x45, 0x45, 0x20, 0x64, 0x20, 0x4d, 0x4d, + 0x4d, 0x4d, 0x20, 0x79, 0x14, 0x79, 0x4d, 0x4d, + 0x4d, 0x4d, 0x45, 0x45, 0x45, 0x45, 0x64, 0x10, + 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, + 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x0c, + 0x64, 0x2f, 0x4d, 0x2f, 0x79, 0x79, 0x16, 0x64, + 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x73, 0x1c, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x20, 0x61, 0x20, 0x7a, 0x7a, 0x7a, + 0x7a, 0x12, 0x68, 0x6d, 0x6d, 0x73, 0x73, 0x7a, + 0x7a, 0x7a, 0x7a, 0x16, 0x68, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x61, 0x20, 0x7a, 0x08, + 0x68, 0x6d, 0x73, 0x7a, 0x16, 0x74, 0x69, 0x6d, + 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, + 0x0e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, + 0x0c, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x09, + 0x98, 0x17, 0x80, 0x17, 0x9a, 0x17, 0xb6, 0x17, + 0x0d, 0x80, 0x17, 0xbb, 0x17, 0x98, 0x17, 0xd2, + 0x17, 0x97, 0x17, 0xc8, 0x17, 0x09, 0x98, 0x17, + 0xb8, 0x17, 0x93, 0x17, 0xb6, 0x17, 0x09, 0x98, + 0x17, 0xc1, 0x17, 0x9f, 0x17, 0xb6, 0x17, 0x09, + 0xa7, 0x17, 0x9f, 0x17, 0x97, 0x17, 0xb6, 0x17, + 0x0d, 0x98, 0x17, 0xb7, 0x17, 0x90, 0x17, 0xbb, + 0x17, 0x93, 0x17, 0xb6, 0x17, 0x0d, 0x80, 0x17, + 0x80, 0x17, 0xd2, 0x17, 0x80, 0x17, 0x8a, 0x17, + 0xb6, 0x17, 0x09, 0x9f, 0x17, 0xb8, 0x17, 0xa0, + 0x17, 0xb6, 0x17, 0x0b, 0x80, 0x17, 0x89, 0x17, + 0xd2, 0x17, 0x89, 0x17, 0xb6, 0x17, 0x09, 0x8f, + 0x17, 0xbb, 0x17, 0x9b, 0x17, 0xb6, 0x17, 0x11, + 0x9c, 0x17, 0xb7, 0x17, 0x85, 0x17, 0xd2, 0x17, + 0x86, 0x17, 0xb7, 0x17, 0x80, 0x17, 0xb6, 0x17, + 0x09, 0x92, 0x17, 0xd2, 0x17, 0x93, 0x17, 0xbc, + 0x17, 0x0c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x73, + 0x05, 0xa2, 0x17, 0xb6, 0x17, 0x03, 0x85, 0x17, + 0x03, 0xa2, 0x17, 0x05, 0x96, 0x17, 0xbb, 0x17, + 0x07, 0x96, 0x17, 0xd2, 0x17, 0x9a, 0x17, 0x05, + 0x9f, 0x17, 0xbb, 0x17, 0x03, 0x9f, 0x17, 0x0f, + 0xa2, 0x17, 0xb6, 0x17, 0x91, 0x17, 0xb7, 0x17, + 0x8f, 0x17, 0xd2, 0x17, 0x99, 0x17, 0x0b, 0x85, + 0x17, 0xd0, 0x17, 0x93, 0x17, 0xd2, 0x17, 0x91, + 0x17, 0x0d, 0xa2, 0x17, 0x84, 0x17, 0xd2, 0x17, + 0x82, 0x17, 0xb6, 0x17, 0x9a, 0x17, 0x07, 0x96, + 0x17, 0xbb, 0x17, 0x92, 0x17, 0x15, 0x96, 0x17, + 0xd2, 0x17, 0x9a, 0x17, 0xa0, 0x17, 0x9f, 0x17, + 0xd2, 0x17, 0x94, 0x17, 0x8f, 0x17, 0xb7, 0x17, + 0xcd, 0x17, 0x0b, 0x9f, 0x17, 0xbb, 0x17, 0x80, + 0x17, 0xd2, 0x17, 0x9a, 0x17, 0x09, 0x9f, 0x17, + 0xc5, 0x17, 0x9a, 0x17, 0xcd, 0x17, 0x08, 0x64, + 0x61, 0x79, 0x73, 0x04, 0x42, 0x45, 0x08, 0x65, + 0x72, 0x61, 0x73, 0x0b, 0x96, 0x17, 0xd2, 0x17, + 0x9a, 0x17, 0xb9, 0x17, 0x80, 0x17, 0x04, 0x61, + 0x6d, 0x0b, 0x9b, 0x17, 0xd2, 0x17, 0x84, 0x17, + 0xb6, 0x17, 0x85, 0x17, 0x04, 0x70, 0x6d, 0x14, + 0x64, 0x61, 0x79, 0x50, 0x65, 0x72, 0x69, 0x6f, + 0x64, 0x73, 0x06, 0x4d, 0x30, 0x31, 0x06, 0x4d, + 0x30, 0x32, 0x06, 0x4d, 0x30, 0x33, 0x06, 0x4d, + 0x30, 0x34, 0x06, 0x4d, 0x30, 0x35, 0x06, 0x4d, + 0x30, 0x36, 0x06, 0x4d, 0x30, 0x37, 0x06, 0x4d, + 0x30, 0x38, 0x06, 0x4d, 0x30, 0x39, 0x06, 0x4d, + 0x31, 0x30, 0x06, 0x4d, 0x31, 0x31, 0x06, 0x4d, + 0x31, 0x32, 0x08, 0x54, 0x6f, 0x75, 0x74, 0x08, + 0x42, 0x61, 0x62, 0x61, 0x0a, 0x48, 0x61, 0x74, + 0x6f, 0x72, 0x0a, 0x4b, 0x69, 0x61, 0x68, 0x6b, + 0x08, 0x54, 0x6f, 0x62, 0x61, 0x0c, 0x41, 0x6d, + 0x73, 0x68, 0x69, 0x72, 0x10, 0x42, 0x61, 0x72, + 0x61, 0x6d, 0x68, 0x61, 0x74, 0x12, 0x42, 0x61, + 0x72, 0x61, 0x6d, 0x6f, 0x75, 0x64, 0x61, 0x0e, + 0x42, 0x61, 0x73, 0x68, 0x61, 0x6e, 0x73, 0x0a, + 0x50, 0x61, 0x6f, 0x6e, 0x61, 0x08, 0x45, 0x70, + 0x65, 0x70, 0x0a, 0x4d, 0x65, 0x73, 0x72, 0x61, + 0x0a, 0x4e, 0x61, 0x73, 0x69, 0x65, 0x08, 0x45, + 0x52, 0x41, 0x30, 0x08, 0x45, 0x52, 0x41, 0x31, + 0x10, 0x4d, 0x65, 0x73, 0x6b, 0x65, 0x72, 0x65, + 0x6d, 0x0c, 0x54, 0x65, 0x6b, 0x65, 0x6d, 0x74, + 0x0a, 0x48, 0x65, 0x64, 0x61, 0x72, 0x0c, 0x54, + 0x61, 0x68, 0x73, 0x61, 0x73, 0x06, 0x54, 0x65, + 0x72, 0x0e, 0x59, 0x65, 0x6b, 0x61, 0x74, 0x69, + 0x74, 0x0e, 0x4d, 0x65, 0x67, 0x61, 0x62, 0x69, + 0x74, 0x0c, 0x4d, 0x69, 0x61, 0x7a, 0x69, 0x61, + 0x0c, 0x47, 0x65, 0x6e, 0x62, 0x6f, 0x74, 0x08, + 0x53, 0x65, 0x6e, 0x65, 0x0a, 0x48, 0x61, 0x6d, + 0x6c, 0x65, 0x0e, 0x4e, 0x65, 0x68, 0x61, 0x73, + 0x73, 0x65, 0x0e, 0x50, 0x61, 0x67, 0x75, 0x6d, + 0x65, 0x6e, 0x11, 0x98, 0x17, 0xbb, 0x17, 0x93, + 0x17, 0x20, 0x00, 0x82, 0x17, 0x2e, 0x00, 0x9f, + 0x17, 0x2e, 0x00, 0x09, 0x82, 0x17, 0x2e, 0x00, + 0x9f, 0x17, 0x2e, 0x00, 0x06, 0x42, 0x43, 0x45, + 0x04, 0x43, 0x45, 0x21, 0x98, 0x17, 0xbb, 0x17, + 0x93, 0x17, 0x0b, 0x20, 0x82, 0x17, 0xd2, 0x17, + 0x9a, 0x17, 0xb7, 0x17, 0x9f, 0x17, 0xd2, 0x17, + 0x8f, 0x17, 0x9f, 0x17, 0x80, 0x17, 0x9a, 0x17, + 0xb6, 0x17, 0x87, 0x17, 0x19, 0x82, 0x17, 0xd2, + 0x17, 0x9a, 0x17, 0xb7, 0x17, 0x9f, 0x17, 0xd2, + 0x17, 0x8f, 0x17, 0x9f, 0x17, 0x80, 0x17, 0x9a, + 0x17, 0xb6, 0x17, 0x87, 0x17, 0x0c, 0x54, 0x69, + 0x73, 0x68, 0x72, 0x69, 0x0e, 0x48, 0x65, 0x73, + 0x68, 0x76, 0x61, 0x6e, 0x0c, 0x4b, 0x69, 0x73, + 0x6c, 0x65, 0x76, 0x0a, 0x54, 0x65, 0x76, 0x65, + 0x74, 0x0c, 0x53, 0x68, 0x65, 0x76, 0x61, 0x74, + 0x0c, 0x41, 0x64, 0x61, 0x72, 0x20, 0x49, 0x08, + 0x41, 0x64, 0x61, 0x72, 0x0a, 0x4e, 0x69, 0x73, + 0x61, 0x6e, 0x08, 0x49, 0x79, 0x61, 0x72, 0x0a, + 0x53, 0x69, 0x76, 0x61, 0x6e, 0x0a, 0x54, 0x61, + 0x6d, 0x75, 0x7a, 0x04, 0x41, 0x76, 0x08, 0x45, + 0x6c, 0x75, 0x6c, 0x0e, 0x41, 0x64, 0x61, 0x72, + 0x20, 0x49, 0x49, 0x04, 0x41, 0x4d, 0x0e, 0x43, + 0x68, 0x61, 0x69, 0x74, 0x72, 0x61, 0x10, 0x56, + 0x61, 0x69, 0x73, 0x61, 0x6b, 0x68, 0x61, 0x10, + 0x4a, 0x79, 0x61, 0x69, 0x73, 0x74, 0x68, 0x61, + 0x0c, 0x41, 0x73, 0x61, 0x64, 0x68, 0x61, 0x0e, + 0x53, 0x72, 0x61, 0x76, 0x61, 0x6e, 0x61, 0x0c, + 0x42, 0x68, 0x61, 0x64, 0x72, 0x61, 0x0c, 0x41, + 0x73, 0x76, 0x69, 0x6e, 0x61, 0x0e, 0x4b, 0x61, + 0x72, 0x74, 0x69, 0x6b, 0x61, 0x14, 0x41, 0x67, + 0x72, 0x61, 0x68, 0x61, 0x79, 0x61, 0x6e, 0x61, + 0x0a, 0x50, 0x61, 0x75, 0x73, 0x61, 0x0a, 0x4d, + 0x61, 0x67, 0x68, 0x61, 0x10, 0x50, 0x68, 0x61, + 0x6c, 0x67, 0x75, 0x6e, 0x61, 0x08, 0x53, 0x61, + 0x6b, 0x61, 0x08, 0x4d, 0x75, 0x68, 0x2e, 0x08, + 0x53, 0x61, 0x66, 0x2e, 0x0c, 0x52, 0x61, 0x62, + 0x2e, 0x20, 0x49, 0x0e, 0x52, 0x61, 0x62, 0x2e, + 0x20, 0x49, 0x49, 0x0c, 0x4a, 0x75, 0x6d, 0x2e, + 0x20, 0x49, 0x0e, 0x4a, 0x75, 0x6d, 0x2e, 0x20, + 0x49, 0x49, 0x08, 0x52, 0x61, 0x6a, 0x2e, 0x08, + 0x53, 0x68, 0x61, 0x2e, 0x08, 0x52, 0x61, 0x6d, + 0x2e, 0x0a, 0x53, 0x68, 0x61, 0x77, 0x2e, 0x11, + 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, + 0x6c, 0x00, 0x2d, 0x00, 0x51, 0x00, 0x2e, 0x00, + 0x11, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, + 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x48, 0x00, 0x2e, + 0x00, 0x10, 0x4d, 0x75, 0x68, 0x61, 0x72, 0x72, + 0x61, 0x6d, 0x0a, 0x53, 0x61, 0x66, 0x61, 0x72, + 0x0f, 0x52, 0x00, 0x61, 0x00, 0x62, 0x00, 0x69, + 0x00, 0xbb, 0x02, 0x20, 0x00, 0x49, 0x00, 0x11, + 0x52, 0x00, 0x61, 0x00, 0x62, 0x00, 0x69, 0x00, + 0xbb, 0x02, 0x20, 0x00, 0x49, 0x00, 0x49, 0x00, + 0x10, 0x4a, 0x75, 0x6d, 0x61, 0x64, 0x61, 0x20, + 0x49, 0x12, 0x4a, 0x75, 0x6d, 0x61, 0x64, 0x61, + 0x20, 0x49, 0x49, 0x0a, 0x52, 0x61, 0x6a, 0x61, + 0x62, 0x0f, 0x53, 0x00, 0x68, 0x00, 0x61, 0x00, + 0xbb, 0x02, 0x62, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x0e, 0x52, 0x61, 0x6d, 0x61, 0x64, 0x61, 0x6e, + 0x0e, 0x53, 0x68, 0x61, 0x77, 0x77, 0x61, 0x6c, + 0x19, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, + 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x51, 0x00, 0x69, + 0x00, 0xbb, 0x02, 0x64, 0x00, 0x61, 0x00, 0x68, + 0x00, 0x19, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, + 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x48, 0x00, + 0x69, 0x00, 0x6a, 0x00, 0x6a, 0x00, 0x61, 0x00, + 0x68, 0x00, 0x04, 0x41, 0x48, 0x1f, 0x54, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x36, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x13, 0x20, 0x36, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x21, 0x53, 0x00, 0x68, 0x00, 0x75, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1f, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, + 0x57, 0x00, 0x61, 0x00, 0x64, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x1f, 0x52, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x1d, 0x59, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1f, 0x4a, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6b, + 0x00, 0x61, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x2d, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x2d, 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x2b, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x2d, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x2a, 0x4a, 0x69, 0x6e, 0x67, 0x6f, + 0x2d, 0x6b, 0x65, 0x69, 0x75, 0x6e, 0x20, 0x28, + 0x37, 0x36, 0x37, 0x2d, 0x37, 0x37, 0x30, 0x29, + 0x1d, 0x48, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x37, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, + 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, 0x64, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, 0x4b, + 0x00, 0x4d, 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x38, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4a, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x61, 0x00, + 0x6a, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, + 0x53, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x20, 0x54, + 0x65, 0x6e, 0x2d, 0x61, 0x6e, 0x20, 0x28, 0x38, + 0x35, 0x37, 0x2d, 0x38, 0x35, 0x39, 0x29, 0x1f, + 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x47, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, + 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1d, 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, + 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x34, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1b, 0x4c, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, + 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x1d, 0x41, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x1d, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x4a, 0x00, 0x69, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x29, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x27, 0x4a, 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, + 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4c, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x61, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x25, 0x4a, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x24, 0x54, 0x65, 0x6e, 0x2d, 0x65, + 0x69, 0x20, 0x28, 0x31, 0x31, 0x31, 0x30, 0x2d, + 0x31, 0x31, 0x31, 0x33, 0x29, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, + 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x4d, 0x01, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x45, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x6a, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x48, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, + 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4c, + 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6d, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x4a, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x59, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x75, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x29, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x29, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x4a, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x21, 0x4a, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x27, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x75, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x29, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x74, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x29, 0x52, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x4e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, + 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x61, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, + 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x27, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x45, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, 0x69, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x27, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x27, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x61, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x41, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x4d, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x02, 0x54, 0x02, 0x53, 0x0a, 0x4d, 0x65, 0x69, + 0x6a, 0x69, 0x0d, 0x54, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x0b, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x0c, 0x48, 0x65, 0x69, 0x73, 0x65, + 0x69, 0x12, 0x46, 0x61, 0x72, 0x76, 0x61, 0x72, + 0x64, 0x69, 0x6e, 0x16, 0x4f, 0x72, 0x64, 0x69, + 0x62, 0x65, 0x68, 0x65, 0x73, 0x68, 0x74, 0x0e, + 0x4b, 0x68, 0x6f, 0x72, 0x64, 0x61, 0x64, 0x06, + 0x54, 0x69, 0x72, 0x0c, 0x4d, 0x6f, 0x72, 0x64, + 0x61, 0x64, 0x12, 0x53, 0x68, 0x61, 0x68, 0x72, + 0x69, 0x76, 0x61, 0x72, 0x08, 0x4d, 0x65, 0x68, + 0x72, 0x08, 0x41, 0x62, 0x61, 0x6e, 0x08, 0x41, + 0x7a, 0x61, 0x72, 0x06, 0x44, 0x65, 0x79, 0x0c, + 0x42, 0x61, 0x68, 0x6d, 0x61, 0x6e, 0x0c, 0x45, + 0x73, 0x66, 0x61, 0x6e, 0x64, 0x04, 0x41, 0x50, + 0x1a, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, + 0x52, 0x2e, 0x4f, 0x2e, 0x43, 0x2e, 0x0c, 0x52, + 0x2e, 0x4f, 0x2e, 0x43, 0x2e, 0x12, 0x63, 0x61, + 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, 0x73, 0x08, + 0x64, 0x61, 0x74, 0x65, 0x08, 0x6c, 0x61, 0x74, + 0x6e, 0x04, 0x6e, 0x75, 0x10, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, + 0x74, 0x74, 0x65, 0x72, 0x6e, 0x26, 0x7b, 0x6d, + 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0x1e, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, + 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, + 0x6e, 0x0e, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, + 0x6c, 0x24, 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x63, 0x79, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0x3a, 0x7b, 0x6d, 0x69, + 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, + 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, + 0x79, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x63, 0x79, 0x2a, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0x7b, 0x70, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, + 0x7d, 0x40, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x7b, 0x70, 0x65, + 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, + 0x6e, 0x7d, 0x0e, 0x70, 0x65, 0x72, 0x63, 0x65, + 0x6e, 0x74, 0x10, 0x70, 0x61, 0x74, 0x74, 0x65, + 0x72, 0x6e, 0x73, 0x02, 0x2c, 0x02, 0x2e, 0x0a, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x06, 0x4e, 0x61, + 0x4e, 0x06, 0x6e, 0x61, 0x6e, 0x02, 0x2b, 0x10, + 0x70, 0x6c, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x02, 0x2d, 0x12, 0x6d, 0x69, 0x6e, 0x75, 0x73, + 0x53, 0x69, 0x67, 0x6e, 0x02, 0x25, 0x16, 0x70, + 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, + 0x67, 0x6e, 0x03, 0x1e, 0x22, 0x10, 0x69, 0x6e, + 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x08, 0x6b, + 0x68, 0x6d, 0x72, 0x0e, 0x73, 0x79, 0x6d, 0x62, + 0x6f, 0x6c, 0x73, 0x04, 0x41, 0x24, 0x06, 0x41, + 0x55, 0x44, 0x04, 0x52, 0x24, 0x06, 0x42, 0x52, + 0x4c, 0x06, 0x43, 0x41, 0x24, 0x06, 0x43, 0x41, + 0x44, 0x06, 0x43, 0x4e, 0xa5, 0x06, 0x43, 0x4e, + 0x59, 0x03, 0xac, 0x20, 0x06, 0x45, 0x55, 0x52, + 0x02, 0xa3, 0x06, 0x47, 0x42, 0x50, 0x06, 0x48, + 0x4b, 0x24, 0x06, 0x48, 0x4b, 0x44, 0x03, 0xaa, + 0x20, 0x06, 0x49, 0x4c, 0x53, 0x03, 0xb9, 0x20, + 0x06, 0x49, 0x4e, 0x52, 0x06, 0x4a, 0x50, 0xa5, + 0x06, 0x4a, 0x50, 0x59, 0x03, 0xdb, 0x17, 0x06, + 0x4b, 0x48, 0x52, 0x03, 0xa9, 0x20, 0x06, 0x4b, + 0x52, 0x57, 0x06, 0x4d, 0x58, 0x24, 0x06, 0x4d, + 0x58, 0x4e, 0x06, 0x4e, 0x5a, 0x24, 0x06, 0x4e, + 0x5a, 0x44, 0x03, 0x3f, 0x0e, 0x06, 0x54, 0x48, + 0x42, 0x06, 0x4e, 0x54, 0x24, 0x06, 0x54, 0x57, + 0x44, 0x02, 0x24, 0x06, 0x55, 0x53, 0x44, 0x03, + 0xab, 0x20, 0x06, 0x56, 0x4e, 0x44, 0x08, 0x46, + 0x43, 0x46, 0x41, 0x06, 0x58, 0x41, 0x46, 0x06, + 0x45, 0x43, 0x24, 0x06, 0x58, 0x43, 0x44, 0x06, + 0x43, 0x46, 0x41, 0x06, 0x58, 0x4f, 0x46, 0x08, + 0x43, 0x46, 0x50, 0x46, 0x06, 0x58, 0x50, 0x46, + 0x14, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, + 0x69, 0x65, 0x73, 0x52, 0x6e, 0x6f, 0x64, 0x65, + 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, + 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2f, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, + 0x61, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x70, 0x2f, + 0x6b, 0x6d, 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, + 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, 0x27, 0x00, + 0xb9, 0x01, 0xa4, 0x6a, 0x01, 0xa0, 0x01, 0x00, + 0x00, 0x00, 0x39, 0xd0, 0x00, 0x00, 0x00, 0x43, + 0xd1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd2, 0x00, + 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd4, 0x00, 0x00, 0x00, 0x04, 0xd5, 0x00, + 0x00, 0x00, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x04, + 0xd7, 0x00, 0x00, 0x00, 0x04, 0xd8, 0x00, 0x00, + 0x00, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x04, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xdb, 0x00, 0x00, 0x00, + 0x04, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xdd, 0x00, + 0x00, 0x00, 0x04, 0xde, 0x00, 0x00, 0x00, 0x04, + 0xdf, 0x00, 0x00, 0x00, 0x04, 0xe0, 0x00, 0x00, + 0x00, 0x04, 0xe1, 0x00, 0x00, 0x00, 0x04, 0xe2, + 0x00, 0x00, 0x00, 0x26, 0x0f, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x00, 0x0a, 0x4d, 0xe4, 0x00, 0x00, + 0x00, 0x0a, 0x4d, 0xe5, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, + 0xe8, 0x00, 0x00, 0x00, 0x04, 0xe9, 0x00, 0x00, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x04, 0xe9, + 0x00, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0xec, + 0x00, 0x00, 0x00, 0x04, 0xed, 0x00, 0x00, 0x00, + 0x4d, 0xee, 0x00, 0x00, 0x00, 0x04, 0xef, 0x00, + 0x00, 0x00, 0x4d, 0xf0, 0x00, 0x00, 0x00, 0x04, + 0xf1, 0x00, 0x00, 0x00, 0x4d, 0xf2, 0x00, 0x00, + 0x00, 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, 0xf4, + 0x00, 0x00, 0x00, 0x04, 0xf5, 0x00, 0x00, 0x00, + 0x4d, 0xf6, 0x00, 0x00, 0x00, 0x04, 0xf7, 0x00, + 0x00, 0x00, 0x4d, 0xf8, 0x00, 0x00, 0x00, 0x04, + 0xf9, 0x00, 0x00, 0x00, 0x4d, 0xfa, 0x00, 0x00, + 0x00, 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, 0xfc, + 0x00, 0x00, 0x00, 0x04, 0xfd, 0x00, 0x00, 0x00, + 0x4d, 0xfe, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x01, 0x00, 0x00, 0x04, + 0x01, 0x01, 0x00, 0x00, 0x4d, 0x02, 0x01, 0x00, + 0x00, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0x04, + 0x01, 0x00, 0x00, 0x04, 0x05, 0x01, 0x00, 0x00, + 0x4d, 0x06, 0x01, 0x00, 0x00, 0x04, 0x07, 0x01, + 0x00, 0x00, 0x4d, 0x08, 0x01, 0x00, 0x00, 0x04, + 0x09, 0x01, 0x00, 0x00, 0x4d, 0x0a, 0x01, 0x00, + 0x00, 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, 0x0c, + 0x01, 0x00, 0x00, 0x04, 0x0d, 0x01, 0x00, 0x00, + 0x4d, 0x0e, 0x01, 0x00, 0x00, 0x04, 0x0f, 0x01, + 0x00, 0x00, 0x4d, 0x10, 0x01, 0x00, 0x00, 0x04, + 0x11, 0x01, 0x00, 0x00, 0x4d, 0x12, 0x01, 0x00, + 0x00, 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, 0x14, + 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x4d, 0x16, 0x01, 0x00, 0x00, 0x04, 0x17, 0x01, + 0x00, 0x00, 0x4d, 0x18, 0x01, 0x00, 0x00, 0x04, + 0x19, 0x01, 0x00, 0x00, 0x4d, 0x1a, 0x01, 0x00, + 0x00, 0x04, 0x1b, 0x01, 0x00, 0x00, 0x4d, 0x1c, + 0x01, 0x00, 0x00, 0x04, 0x1d, 0x01, 0x00, 0x00, + 0x4d, 0x1e, 0x01, 0x00, 0x00, 0x04, 0x19, 0x01, + 0x00, 0x00, 0x4d, 0x1f, 0x01, 0x00, 0x00, 0x04, + 0x20, 0x01, 0x00, 0x00, 0x4d, 0x21, 0x01, 0x00, + 0x00, 0x04, 0x22, 0x01, 0x00, 0x00, 0x4d, 0x23, + 0x01, 0x00, 0x00, 0x04, 0x24, 0x01, 0x00, 0x00, + 0x4d, 0x24, 0x01, 0x00, 0x00, 0x04, 0x25, 0x01, + 0x00, 0x00, 0x4d, 0x26, 0x01, 0x00, 0x00, 0x04, + 0x27, 0x01, 0x00, 0x00, 0x4d, 0x28, 0x01, 0x00, + 0x00, 0x04, 0x29, 0x01, 0x00, 0x00, 0x4d, 0x2a, + 0x01, 0x00, 0x00, 0x04, 0x2b, 0x01, 0x00, 0x00, + 0x4d, 0x2c, 0x01, 0x00, 0x00, 0x04, 0x2d, 0x01, + 0x00, 0x00, 0x4d, 0x2e, 0x01, 0x00, 0x00, 0x04, + 0x2f, 0x01, 0x00, 0x00, 0x4d, 0x30, 0x01, 0x00, + 0x00, 0x04, 0x31, 0x01, 0x00, 0x00, 0x4d, 0x32, + 0x01, 0x00, 0x00, 0x04, 0x33, 0x01, 0x00, 0x00, + 0x4d, 0x34, 0x01, 0x00, 0x00, 0x04, 0x35, 0x01, + 0x00, 0x00, 0x4d, 0x36, 0x01, 0x00, 0x00, 0x4d, + 0x37, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x38, 0x01, + 0x00, 0x00, 0x4d, 0x39, 0x01, 0x00, 0x00, 0x04, + 0x3a, 0x01, 0x00, 0x00, 0x4d, 0x3b, 0x01, 0x00, + 0x00, 0x04, 0x2d, 0x01, 0x00, 0x00, 0x4d, 0x2e, + 0x01, 0x00, 0x00, 0x04, 0x3c, 0x01, 0x00, 0x00, + 0x4d, 0x28, 0x01, 0x00, 0x00, 0x4d, 0x3d, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x3e, 0x01, 0x00, 0x00, + 0x4d, 0x3f, 0x01, 0x00, 0x00, 0x04, 0x40, 0x01, + 0x00, 0x00, 0x4d, 0x41, 0x01, 0x00, 0x00, 0x04, + 0x09, 0x01, 0x00, 0x00, 0x4d, 0x0a, 0x01, 0x00, + 0x00, 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, 0x06, + 0x01, 0x00, 0x00, 0x4d, 0x42, 0x01, 0x00, 0x00, + 0x4d, 0x43, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x0b, + 0xbe, 0x00, 0xbe, 0x01, 0xbe, 0x02, 0xbe, 0x03, + 0xbe, 0x04, 0xbe, 0x05, 0xbe, 0x06, 0xbe, 0x07, + 0xbe, 0x08, 0xbe, 0x09, 0xbe, 0x0a, 0xbe, 0x0b, + 0x26, 0x0c, 0x00, 0x4d, 0x44, 0x01, 0x00, 0x00, + 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, + 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x51, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x44, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x60, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x44, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x62, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x63, 0x01, 0x00, 0x00, 0x4d, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x4d, 0x66, 0x01, 0x00, 0x00, 0x4d, 0x67, + 0x01, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x0c, 0xbe, 0x0d, 0xbe, 0x0e, + 0xbe, 0x0f, 0xbe, 0x10, 0xbe, 0x11, 0xbe, 0x12, + 0xbe, 0x13, 0xbe, 0x14, 0xbe, 0x15, 0xbe, 0x16, + 0xbe, 0x17, 0x26, 0x0c, 0x00, 0x4d, 0x44, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x44, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x60, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x4d, 0x66, + 0x01, 0x00, 0x00, 0x4d, 0x67, 0x01, 0x00, 0x00, + 0x4d, 0xd6, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x18, 0xbe, 0x19, 0xbe, 0x1a, 0xbe, 0x1b, 0xbe, + 0x1c, 0xbe, 0x1d, 0xbe, 0x1e, 0xbe, 0x1f, 0xbe, + 0x20, 0xbe, 0x21, 0xbe, 0x22, 0xbe, 0x23, 0xbe, + 0x24, 0x26, 0x0d, 0x00, 0x4d, 0x44, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, + 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x44, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x60, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x44, 0x01, + 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, + 0x82, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, + 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x62, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x4d, 0x66, 0x01, 0x00, 0x00, + 0x4d, 0x67, 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x25, 0xbe, 0x26, + 0xbe, 0x27, 0xbe, 0x28, 0xbe, 0x29, 0xbe, 0x2a, + 0xbe, 0x2b, 0xbe, 0x2c, 0xbe, 0x2d, 0xbe, 0x2e, + 0xbe, 0x2f, 0xbe, 0x30, 0x26, 0x0c, 0x00, 0x4d, + 0x44, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x51, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x44, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x60, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x63, 0x01, 0x00, 0x00, 0x4d, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x4d, 0x66, 0x01, 0x00, 0x00, 0x4d, 0x67, 0x01, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x31, 0xbe, 0x32, 0xbe, 0x33, 0xbe, + 0x34, 0xbe, 0x35, 0xbe, 0x36, 0xbe, 0x37, 0xbe, + 0x38, 0xbe, 0x39, 0xbe, 0x3a, 0xbe, 0x3b, 0xbe, + 0x3c, 0xbe, 0x3d, 0x26, 0x0d, 0x00, 0x4d, 0x44, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, + 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, + 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, + 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, + 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, + 0x8f, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, + 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, + 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, + 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, + 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, + 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, + 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, + 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, + 0x04, 0x8f, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x51, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x44, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x60, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, + 0x82, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0x44, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, + 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x62, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x4d, 0x66, 0x01, + 0x00, 0x00, 0x4d, 0x67, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x3e, + 0xbe, 0x3f, 0xbe, 0x40, 0xbe, 0x41, 0xbe, 0x42, + 0xbe, 0x43, 0xbe, 0x44, 0xbe, 0x45, 0xbe, 0x46, + 0xbe, 0x47, 0xbe, 0x48, 0xbe, 0x49, 0xbe, 0x4a, + 0x26, 0x0d, 0x00, 0x4d, 0x44, 0x01, 0x00, 0x00, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, + 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, + 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, + 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, + 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, + 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, + 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, + 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, + 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, + 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, + 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, + 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x44, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x60, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x81, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x44, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x62, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x4d, 0x66, 0x01, 0x00, 0x00, + 0x4d, 0x67, 0x01, 0x00, 0x00, 0x4d, 0xd9, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x4b, 0xbe, 0x4c, + 0xbe, 0x4d, 0xbe, 0x4e, 0xbe, 0x4f, 0xbe, 0x50, + 0xbe, 0x51, 0xbe, 0x52, 0xbe, 0x53, 0xbe, 0x54, + 0xbe, 0x55, 0xbe, 0x56, 0x26, 0x0c, 0x00, 0x4d, + 0x44, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x51, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x44, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x60, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x44, + 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x81, 0x01, + 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x62, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x4d, 0x66, 0x01, 0x00, + 0x00, 0x4d, 0x67, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x57, 0xbe, + 0x58, 0xbe, 0x59, 0xbe, 0x5a, 0xbe, 0x5b, 0xbe, + 0x5c, 0xbe, 0x5d, 0xbe, 0x5e, 0xbe, 0x5f, 0xbe, + 0x60, 0xbe, 0x61, 0xbe, 0x62, 0x26, 0x0c, 0x00, + 0x4d, 0x44, 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, + 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, 0x46, + 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x51, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x44, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x60, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, + 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, + 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x26, 0x04, + 0x00, 0x4d, 0x44, 0x01, 0x00, 0x00, 0x04, 0x90, + 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, + 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, + 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, + 0x95, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, + 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x26, 0x04, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x62, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x4d, 0x66, 0x01, 0x00, 0x00, + 0x4d, 0x67, 0x01, 0x00, 0x00, 0x4d, 0xd4, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x63, 0xbe, 0x64, + 0xbe, 0x65, 0xbe, 0x66, 0xbe, 0x67, 0xbe, 0x68, + 0xbe, 0x69, 0xbe, 0x6a, 0xbe, 0x6b, 0xbe, 0x6c, + 0xbe, 0x6d, 0xbe, 0x6e, 0xbe, 0x6f, 0xbe, 0x70, + 0x26, 0x0e, 0x00, 0x4d, 0x44, 0x01, 0x00, 0x00, + 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, + 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, + 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, + 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, + 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, + 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, + 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, + 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, + 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x26, 0x0e, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x96, + 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, + 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, + 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, + 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, + 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, + 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, + 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, + 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, + 0xa3, 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x51, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x44, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x60, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x44, 0x01, 0x00, 0x00, 0x04, 0xa4, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x62, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x4d, 0x66, 0x01, + 0x00, 0x00, 0x4d, 0x67, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x71, + 0xbe, 0x72, 0xbe, 0x73, 0xbe, 0x74, 0xbe, 0x75, + 0xbe, 0x76, 0xbe, 0x77, 0xbe, 0x78, 0xbe, 0x79, + 0xbe, 0x7a, 0xbe, 0x7b, 0xbe, 0x7c, 0x26, 0x0c, + 0x00, 0x4d, 0x44, 0x01, 0x00, 0x00, 0x04, 0xa5, + 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, + 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, + 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, + 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, + 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, + 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, + 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, + 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, + 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, + 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, + 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, + 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, + 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, + 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x51, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x44, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x60, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xb1, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x44, 0x01, 0x00, 0x00, + 0x04, 0xb1, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xb1, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x62, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x4d, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x4d, + 0x66, 0x01, 0x00, 0x00, 0x4d, 0x67, 0x01, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x7d, 0xbe, 0x7e, 0xbe, 0x7f, 0xbe, 0x80, + 0xbe, 0x81, 0xbe, 0x82, 0xbe, 0x83, 0xbe, 0x84, + 0xbe, 0x85, 0xbe, 0x86, 0xbe, 0x87, 0xbe, 0x88, + 0x26, 0x0c, 0x00, 0x4d, 0x44, 0x01, 0x00, 0x00, + 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, + 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, 0x00, 0x04, + 0xb5, 0x01, 0x00, 0x00, 0x04, 0xb6, 0x01, 0x00, + 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, + 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, + 0x04, 0xba, 0x01, 0x00, 0x00, 0x04, 0xbb, 0x01, + 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, 0x04, + 0xbd, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, + 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, 0x04, 0xc0, + 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, + 0x04, 0xc2, 0x01, 0x00, 0x00, 0x04, 0xc3, 0x01, + 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, 0x04, + 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, + 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, + 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x51, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x44, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x60, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xca, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x44, 0x01, + 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xca, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x62, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x63, 0x01, 0x00, 0x00, 0x4d, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x4d, 0x66, 0x01, 0x00, 0x00, 0x4d, 0x67, + 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x89, 0xbe, 0x8a, 0xbe, 0x8b, + 0xbe, 0x8c, 0xbe, 0x8d, 0xbe, 0x8e, 0xbe, 0x8f, + 0xbe, 0x90, 0xbe, 0x91, 0xbe, 0x92, 0xbe, 0x93, + 0xbe, 0x94, 0x26, 0x0c, 0x00, 0x4d, 0x44, 0x01, + 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, + 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, + 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, 0x04, 0xb6, + 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, + 0x04, 0xb8, 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, + 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, 0x04, + 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, + 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xbe, + 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, + 0x04, 0xc0, 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, + 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, 0x00, 0x04, + 0xc3, 0x01, 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, + 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, + 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, + 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x44, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x60, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xca, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x44, 0x01, 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x62, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x4d, 0x66, 0x01, 0x00, 0x00, + 0x4d, 0x67, 0x01, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x95, 0xbe, 0x96, + 0xbe, 0x97, 0xbe, 0x98, 0xbe, 0x99, 0xbe, 0x9a, + 0xbe, 0x9b, 0xbe, 0x9c, 0xbe, 0x9d, 0xbe, 0x9e, + 0xbe, 0x9f, 0xbe, 0xa0, 0x26, 0x0c, 0x00, 0x4d, + 0x44, 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, + 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x51, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x44, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x60, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, + 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, + 0x04, 0xce, 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, + 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, + 0xd1, 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, + 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, + 0x01, 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, + 0x04, 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, + 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, + 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, + 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, + 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, + 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, + 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, + 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, + 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, + 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, + 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, + 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, + 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, + 0x00, 0x26, 0x20, 0x00, 0x04, 0xeb, 0x01, 0x00, + 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0xec, + 0x01, 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, + 0x04, 0xed, 0x01, 0x00, 0x00, 0x4d, 0x22, 0x00, + 0x00, 0x80, 0x04, 0xee, 0x01, 0x00, 0x00, 0x4d, + 0x23, 0x00, 0x00, 0x80, 0x04, 0xef, 0x01, 0x00, + 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0xf0, + 0x01, 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, + 0x04, 0xf1, 0x01, 0x00, 0x00, 0x4d, 0x26, 0x00, + 0x00, 0x80, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x4d, + 0x27, 0x00, 0x00, 0x80, 0x04, 0xf3, 0x01, 0x00, + 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0xf4, + 0x01, 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, + 0x04, 0xf5, 0x01, 0x00, 0x00, 0x4d, 0x2a, 0x00, + 0x00, 0x80, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x4d, + 0x2b, 0x00, 0x00, 0x80, 0x04, 0xf7, 0x01, 0x00, + 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0xf8, + 0x01, 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, + 0x04, 0xf9, 0x01, 0x00, 0x00, 0x4d, 0x2e, 0x00, + 0x00, 0x80, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x4d, + 0x2f, 0x00, 0x00, 0x80, 0x04, 0xfb, 0x01, 0x00, + 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0xfc, + 0x01, 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, + 0x04, 0xfd, 0x01, 0x00, 0x00, 0x4d, 0x32, 0x00, + 0x00, 0x80, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x4d, + 0x33, 0x00, 0x00, 0x80, 0x04, 0xff, 0x01, 0x00, + 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x00, + 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, + 0x04, 0x01, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, + 0x00, 0x80, 0x04, 0x02, 0x02, 0x00, 0x00, 0x4d, + 0x37, 0x00, 0x00, 0x80, 0x04, 0x03, 0x02, 0x00, + 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x04, + 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, + 0x04, 0x05, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, + 0x00, 0x80, 0x04, 0x06, 0x02, 0x00, 0x00, 0x4d, + 0x3b, 0x00, 0x00, 0x80, 0x04, 0x07, 0x02, 0x00, + 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x08, + 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, + 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, + 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x4d, + 0x3f, 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, 0x00, + 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x0c, + 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, + 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, + 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, + 0x43, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, + 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x10, + 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, + 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, + 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, + 0x47, 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, + 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x14, + 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, + 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, + 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, + 0x4b, 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, + 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x18, + 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, + 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, + 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, + 0x4f, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, + 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x1c, + 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, + 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, + 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, + 0x53, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, + 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x20, + 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, + 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, + 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, + 0x57, 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, + 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x24, + 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, + 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, + 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, + 0x5b, 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, + 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x28, + 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, + 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, + 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, + 0x5f, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, + 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x2c, + 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, + 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, + 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, + 0x63, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, + 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x30, + 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, + 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, + 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, + 0x67, 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, + 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x34, + 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, + 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, + 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, + 0x6b, 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, + 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x38, + 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, + 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, + 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, + 0x6f, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, + 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x3c, + 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, + 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, + 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, + 0x73, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, + 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x40, + 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, + 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, + 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, + 0x77, 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, + 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x44, + 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, + 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, + 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, + 0x7b, 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, + 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x48, + 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, + 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, + 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, + 0x7f, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, + 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x4c, + 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, + 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, + 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, + 0x83, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, + 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x50, + 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, + 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, + 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, + 0x87, 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, + 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x54, + 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, + 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, + 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, + 0x8b, 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, + 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x58, + 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, + 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, + 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, + 0x8f, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, + 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x5c, + 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, + 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, + 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, + 0x93, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, + 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x60, + 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, + 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, + 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, + 0x97, 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, + 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x64, + 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, + 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, + 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, + 0x9b, 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, + 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x68, + 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, + 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, + 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, + 0x9f, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, + 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x6c, + 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, + 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, + 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, + 0xa3, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, + 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x70, + 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, + 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, + 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, + 0xa7, 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, + 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x74, + 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, + 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, + 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, + 0xab, 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, + 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x78, + 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, + 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, + 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, + 0xaf, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, + 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x7c, + 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, + 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, + 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, + 0xb3, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, + 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0x80, + 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, + 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, + 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, + 0xb7, 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, + 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0x84, + 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, + 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, + 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, + 0xbb, 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, + 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0x88, + 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, + 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, + 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, + 0xbf, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, + 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0x8c, + 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, + 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, + 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, + 0xc3, 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, + 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0x90, + 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, + 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, + 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, + 0xc7, 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, + 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0x94, + 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, + 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, + 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, + 0xcb, 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, + 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0x98, + 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, + 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, + 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, + 0xcf, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, + 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0x9c, + 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, + 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, + 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, + 0xd3, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, + 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xa0, + 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, + 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, + 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, + 0xd7, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xa4, + 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, + 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xa8, + 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, + 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xac, + 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, + 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, + 0xe3, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, + 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xb0, + 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, + 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, + 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x80, 0x04, 0x16, 0x01, 0x00, + 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xb3, + 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, + 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x80, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x80, 0x4d, 0x44, 0x01, 0x00, + 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, + 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, + 0x04, 0xce, 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, + 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, + 0xd1, 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, + 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, + 0x01, 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, + 0x04, 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, + 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, + 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, + 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, + 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, + 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, + 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, + 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, + 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, + 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, + 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, + 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, + 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, + 0x00, 0x26, 0x20, 0x00, 0x04, 0xeb, 0x01, 0x00, + 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0xec, + 0x01, 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, + 0x04, 0xed, 0x01, 0x00, 0x00, 0x4d, 0x22, 0x00, + 0x00, 0x80, 0x04, 0xee, 0x01, 0x00, 0x00, 0x4d, + 0x23, 0x00, 0x00, 0x80, 0x04, 0xef, 0x01, 0x00, + 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0xf0, + 0x01, 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, + 0x04, 0xf1, 0x01, 0x00, 0x00, 0x4d, 0x26, 0x00, + 0x00, 0x80, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x4d, + 0x27, 0x00, 0x00, 0x80, 0x04, 0xf3, 0x01, 0x00, + 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0xf4, + 0x01, 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, + 0x04, 0xf5, 0x01, 0x00, 0x00, 0x4d, 0x2a, 0x00, + 0x00, 0x80, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x4d, + 0x2b, 0x00, 0x00, 0x80, 0x04, 0xf7, 0x01, 0x00, + 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0xf8, + 0x01, 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, + 0x04, 0xf9, 0x01, 0x00, 0x00, 0x4d, 0x2e, 0x00, + 0x00, 0x80, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x4d, + 0x2f, 0x00, 0x00, 0x80, 0x04, 0xfb, 0x01, 0x00, + 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0xfc, + 0x01, 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, + 0x04, 0xfd, 0x01, 0x00, 0x00, 0x4d, 0x32, 0x00, + 0x00, 0x80, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x4d, + 0x33, 0x00, 0x00, 0x80, 0x04, 0xff, 0x01, 0x00, + 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x00, + 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, + 0x04, 0x01, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, + 0x00, 0x80, 0x04, 0x02, 0x02, 0x00, 0x00, 0x4d, + 0x37, 0x00, 0x00, 0x80, 0x04, 0x03, 0x02, 0x00, + 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x04, + 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, + 0x04, 0x05, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, + 0x00, 0x80, 0x04, 0x06, 0x02, 0x00, 0x00, 0x4d, + 0x3b, 0x00, 0x00, 0x80, 0x04, 0x07, 0x02, 0x00, + 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x08, + 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, + 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, + 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x4d, + 0x3f, 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, 0x00, + 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x0c, + 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, + 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, + 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, + 0x43, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, + 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x10, + 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, + 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, + 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, + 0x47, 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, + 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x14, + 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, + 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, + 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, + 0x4b, 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, + 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x18, + 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, + 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, + 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, + 0x4f, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, + 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x1c, + 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, + 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, + 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, + 0x53, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, + 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x20, + 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, + 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, + 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, + 0x57, 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, + 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x24, + 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, + 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, + 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, + 0x5b, 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, + 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x28, + 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, + 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, + 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, + 0x5f, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, + 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x2c, + 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, + 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, + 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, + 0x63, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, + 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x30, + 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, + 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, + 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, + 0x67, 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, + 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x34, + 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, + 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, + 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, + 0x6b, 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, + 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x38, + 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, + 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, + 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, + 0x6f, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, + 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x3c, + 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, + 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, + 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, + 0x73, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, + 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x40, + 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, + 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, + 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, + 0x77, 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, + 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x44, + 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, + 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, + 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, + 0x7b, 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, + 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x48, + 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, + 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, + 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, + 0x7f, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, + 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x4c, + 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, + 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, + 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, + 0x83, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, + 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x50, + 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, + 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, + 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, + 0x87, 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, + 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x54, + 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, + 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, + 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, + 0x8b, 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, + 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x58, + 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, + 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, + 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, + 0x8f, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, + 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x5c, + 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, + 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, + 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, + 0x93, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, + 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x60, + 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, + 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, + 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, + 0x97, 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, + 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x64, + 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, + 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, + 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, + 0x9b, 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, + 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x68, + 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, + 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, + 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, + 0x9f, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, + 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x6c, + 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, + 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, + 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, + 0xa3, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, + 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x70, + 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, + 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, + 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, + 0xa7, 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, + 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x74, + 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, + 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, + 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, + 0xab, 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, + 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x78, + 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, + 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, + 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, + 0xaf, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, + 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x7c, + 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, + 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, + 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, + 0xb3, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, + 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0x80, + 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, + 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, + 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, + 0xb7, 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, + 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0x84, + 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, + 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, + 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, + 0xbb, 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, + 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0x88, + 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, + 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, + 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, + 0xbf, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, + 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0x8c, + 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, + 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, + 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, + 0xc3, 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, + 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0x90, + 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, + 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, + 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, + 0xc7, 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, + 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0x94, + 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, + 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, + 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, + 0xcb, 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, + 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0x98, + 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, + 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, + 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, + 0xcf, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, + 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0x9c, + 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, + 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, + 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, + 0xd3, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, + 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xa0, + 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, + 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, + 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, + 0xd7, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xa4, + 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, + 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xa8, + 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, + 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xac, + 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, + 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, + 0xe3, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, + 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xb0, + 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, + 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, + 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, + 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xb6, + 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, + 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x80, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, + 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, + 0x04, 0xce, 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, + 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, + 0xd1, 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, + 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, + 0x01, 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, + 0x04, 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, + 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, + 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, + 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, + 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, + 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, + 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, + 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, + 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, + 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, + 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, + 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, + 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, + 0x00, 0x26, 0x20, 0x00, 0x04, 0xeb, 0x01, 0x00, + 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0xec, + 0x01, 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, + 0x04, 0xed, 0x01, 0x00, 0x00, 0x4d, 0x22, 0x00, + 0x00, 0x80, 0x04, 0xee, 0x01, 0x00, 0x00, 0x4d, + 0x23, 0x00, 0x00, 0x80, 0x04, 0xef, 0x01, 0x00, + 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0xf0, + 0x01, 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, + 0x04, 0xf1, 0x01, 0x00, 0x00, 0x4d, 0x26, 0x00, + 0x00, 0x80, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x4d, + 0x27, 0x00, 0x00, 0x80, 0x04, 0xf3, 0x01, 0x00, + 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0xf4, + 0x01, 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, + 0x04, 0xf5, 0x01, 0x00, 0x00, 0x4d, 0x2a, 0x00, + 0x00, 0x80, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x4d, + 0x2b, 0x00, 0x00, 0x80, 0x04, 0xf7, 0x01, 0x00, + 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0xf8, + 0x01, 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, + 0x04, 0xf9, 0x01, 0x00, 0x00, 0x4d, 0x2e, 0x00, + 0x00, 0x80, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x4d, + 0x2f, 0x00, 0x00, 0x80, 0x04, 0xfb, 0x01, 0x00, + 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0xfc, + 0x01, 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, + 0x04, 0xfd, 0x01, 0x00, 0x00, 0x4d, 0x32, 0x00, + 0x00, 0x80, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x4d, + 0x33, 0x00, 0x00, 0x80, 0x04, 0xff, 0x01, 0x00, + 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x00, + 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, + 0x04, 0x01, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, + 0x00, 0x80, 0x04, 0x02, 0x02, 0x00, 0x00, 0x4d, + 0x37, 0x00, 0x00, 0x80, 0x04, 0x03, 0x02, 0x00, + 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x04, + 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, + 0x04, 0x05, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, + 0x00, 0x80, 0x04, 0x06, 0x02, 0x00, 0x00, 0x4d, + 0x3b, 0x00, 0x00, 0x80, 0x04, 0x07, 0x02, 0x00, + 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x08, + 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, + 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, + 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x4d, + 0x3f, 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, 0x00, + 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x0c, + 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, + 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, + 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, + 0x43, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, + 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x10, + 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, + 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, + 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, + 0x47, 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, + 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x14, + 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, + 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, + 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, + 0x4b, 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, + 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x18, + 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, + 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, + 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, + 0x4f, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, + 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x1c, + 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, + 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, + 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, + 0x53, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, + 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x20, + 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, + 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, + 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, + 0x57, 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, + 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x24, + 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, + 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, + 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, + 0x5b, 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, + 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x28, + 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, + 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, + 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, + 0x5f, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, + 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x2c, + 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, + 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, + 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, + 0x63, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, + 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x30, + 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, + 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, + 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, + 0x67, 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, + 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x34, + 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, + 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, + 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, + 0x6b, 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, + 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x38, + 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, + 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, + 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, + 0x6f, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, + 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x3c, + 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, + 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, + 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, + 0x73, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, + 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x40, + 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, + 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, + 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, + 0x77, 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, + 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x44, + 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, + 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, + 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, + 0x7b, 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, + 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x48, + 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, + 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, + 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, + 0x7f, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, + 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x4c, + 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, + 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, + 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, + 0x83, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, + 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x50, + 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, + 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, + 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, + 0x87, 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, + 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x54, + 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, + 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, + 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, + 0x8b, 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, + 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x58, + 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, + 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, + 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, + 0x8f, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, + 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x5c, + 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, + 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, + 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, + 0x93, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, + 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x60, + 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, + 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, + 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, + 0x97, 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, + 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x64, + 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, + 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, + 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, + 0x9b, 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, + 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x68, + 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, + 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, + 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, + 0x9f, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, + 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x6c, + 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, + 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, + 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, + 0xa3, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, + 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x70, + 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, + 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, + 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, + 0xa7, 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, + 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x74, + 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, + 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, + 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, + 0xab, 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, + 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x78, + 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, + 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, + 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, + 0xaf, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, + 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x7c, + 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, + 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, + 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, + 0xb3, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, + 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0x80, + 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, + 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, + 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, + 0xb7, 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, + 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0x84, + 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, + 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, + 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, + 0xbb, 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, + 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0x88, + 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, + 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, + 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, + 0xbf, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, + 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0x8c, + 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, + 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, + 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, + 0xc3, 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, + 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0x90, + 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, + 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, + 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, + 0xc7, 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, + 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0x94, + 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, + 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, + 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, + 0xcb, 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, + 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0x98, + 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, + 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, + 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, + 0xcf, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, + 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0x9c, + 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, + 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, + 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, + 0xd3, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, + 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xa0, + 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, + 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, + 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, + 0xd7, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xa4, + 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, + 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xa8, + 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, + 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xac, + 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, + 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, + 0xe3, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, + 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xb0, + 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, + 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, + 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, + 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xb6, + 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, + 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x80, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x62, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x4d, 0x66, + 0x01, 0x00, 0x00, 0x4d, 0x67, 0x01, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0xa1, 0xbe, 0xa2, 0xbe, 0xa3, 0xbe, 0xa4, 0xbe, + 0xa5, 0xbe, 0xa6, 0xbe, 0xa7, 0xbe, 0xa8, 0xbe, + 0xa9, 0xbe, 0xaa, 0xbe, 0xab, 0xbe, 0xac, 0x26, + 0x0c, 0x00, 0x4d, 0x44, 0x01, 0x00, 0x00, 0x04, + 0xb9, 0x02, 0x00, 0x00, 0x04, 0xba, 0x02, 0x00, + 0x00, 0x04, 0xbb, 0x02, 0x00, 0x00, 0x04, 0xbc, + 0x02, 0x00, 0x00, 0x04, 0xbd, 0x02, 0x00, 0x00, + 0x04, 0xbe, 0x02, 0x00, 0x00, 0x04, 0xbf, 0x02, + 0x00, 0x00, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x04, + 0xc1, 0x02, 0x00, 0x00, 0x04, 0xc2, 0x02, 0x00, + 0x00, 0x04, 0xc3, 0x02, 0x00, 0x00, 0x04, 0xc4, + 0x02, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xb9, 0x02, 0x00, 0x00, + 0x04, 0xba, 0x02, 0x00, 0x00, 0x04, 0xbb, 0x02, + 0x00, 0x00, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x04, + 0xbd, 0x02, 0x00, 0x00, 0x04, 0xbe, 0x02, 0x00, + 0x00, 0x04, 0xbf, 0x02, 0x00, 0x00, 0x04, 0xc0, + 0x02, 0x00, 0x00, 0x04, 0xc1, 0x02, 0x00, 0x00, + 0x04, 0xc2, 0x02, 0x00, 0x00, 0x04, 0xc3, 0x02, + 0x00, 0x00, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x51, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x44, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x60, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xc5, 0x02, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x44, 0x01, 0x00, + 0x00, 0x04, 0xc5, 0x02, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xc5, + 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x62, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x63, 0x01, 0x00, 0x00, 0x4d, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x4d, 0x66, 0x01, 0x00, 0x00, 0x4d, 0x67, 0x01, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0xad, 0xbe, 0xae, 0xbe, 0xaf, 0xbe, + 0xb0, 0xbe, 0xb1, 0xbe, 0xb2, 0xbe, 0xb3, 0xbe, + 0xb4, 0xbe, 0xb5, 0xbe, 0xb6, 0xbe, 0xb7, 0xbe, + 0xb8, 0x26, 0x0c, 0x00, 0x4d, 0x44, 0x01, 0x00, + 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, 0x46, + 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x45, 0x01, + 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, + 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x44, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x60, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xc6, + 0x02, 0x00, 0x00, 0x04, 0xc7, 0x02, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0x44, 0x01, 0x00, 0x00, + 0x04, 0xc6, 0x02, 0x00, 0x00, 0x04, 0xc7, 0x02, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xc6, 0x02, 0x00, 0x00, 0x04, + 0xc7, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x62, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x63, 0x01, 0x00, 0x00, 0x4d, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x4d, 0x66, 0x01, 0x00, 0x00, 0x4d, 0x67, + 0x01, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, + 0x4d, 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x02, + 0x00, 0x00, 0x0b, 0x04, 0xca, 0x02, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xcb, 0x02, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0xcc, 0x02, 0x00, 0x00, 0x4d, + 0xcd, 0x02, 0x00, 0x00, 0x04, 0xce, 0x02, 0x00, + 0x00, 0x4d, 0xcf, 0x02, 0x00, 0x00, 0x4d, 0xd0, + 0x02, 0x00, 0x00, 0x0b, 0x04, 0xd1, 0x02, 0x00, + 0x00, 0x4d, 0xcd, 0x02, 0x00, 0x00, 0x04, 0xd2, + 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x02, 0x00, 0x00, + 0x4d, 0xd3, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xd4, + 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x02, 0x00, 0x00, + 0x04, 0xd5, 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x02, + 0x00, 0x00, 0x4d, 0xd6, 0x02, 0x00, 0x00, 0x4d, + 0xd7, 0x02, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xd8, + 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x02, 0x00, 0x00, + 0x04, 0xd9, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x02, + 0x00, 0x00, 0x04, 0xdb, 0x02, 0x00, 0x00, 0x4d, + 0xdc, 0x02, 0x00, 0x00, 0x04, 0xdd, 0x02, 0x00, + 0x00, 0x4d, 0xde, 0x02, 0x00, 0x00, 0x04, 0xdf, + 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x02, 0x00, 0x00, + 0x04, 0xe1, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x02, + 0x00, 0x00, 0x04, 0xe3, 0x02, 0x00, 0x00, 0x4d, + 0xe4, 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x02, 0x00, + 0x00, 0x0b, 0x04, 0xd8, 0x02, 0x00, 0x00, 0x4d, + 0xd0, 0x02, 0x00, 0x00, 0x04, 0xd9, 0x02, 0x00, + 0x00, 0x4d, 0xda, 0x02, 0x00, 0x00, 0x04, 0xdb, + 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x02, 0x00, 0x00, + 0x04, 0xdd, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x02, + 0x00, 0x00, 0x04, 0xdf, 0x02, 0x00, 0x00, 0x4d, + 0xe0, 0x02, 0x00, 0x00, 0x04, 0xe1, 0x02, 0x00, + 0x00, 0x4d, 0xe2, 0x02, 0x00, 0x00, 0x04, 0xe3, + 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x02, 0x00, 0x00, + 0x4d, 0xca, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x02, + 0x00, 0x00, 0x0b, 0x04, 0xe7, 0x02, 0x00, 0x00, + 0x4d, 0xe8, 0x02, 0x00, 0x00, 0x04, 0xe9, 0x02, + 0x00, 0x00, 0x4d, 0xea, 0x02, 0x00, 0x00, 0x04, + 0xeb, 0x02, 0x00, 0x00, 0x4d, 0xec, 0x02, 0x00, + 0x00, 0x04, 0xed, 0x02, 0x00, 0x00, 0x4d, 0xee, + 0x02, 0x00, 0x00, 0x04, 0xef, 0x02, 0x00, 0x00, + 0x4d, 0xf0, 0x02, 0x00, 0x00, 0x04, 0xf1, 0x02, + 0x00, 0x00, 0x4d, 0xf2, 0x02, 0x00, 0x00, 0x04, + 0xf3, 0x02, 0x00, 0x00, 0x4d, 0xf4, 0x02, 0x00, + 0x00, 0x04, 0xf5, 0x02, 0x00, 0x00, 0x4d, 0xf6, + 0x02, 0x00, 0x00, 0x04, 0xf7, 0x02, 0x00, 0x00, + 0x4d, 0xf8, 0x02, 0x00, 0x00, 0x04, 0xf9, 0x02, + 0x00, 0x00, 0x4d, 0xfa, 0x02, 0x00, 0x00, 0x04, + 0xfb, 0x02, 0x00, 0x00, 0x4d, 0xfc, 0x02, 0x00, + 0x00, 0x04, 0xfd, 0x02, 0x00, 0x00, 0x4d, 0xfe, + 0x02, 0x00, 0x00, 0x04, 0xff, 0x02, 0x00, 0x00, + 0x4d, 0x00, 0x03, 0x00, 0x00, 0x04, 0x01, 0x03, + 0x00, 0x00, 0x4d, 0x02, 0x03, 0x00, 0x00, 0x04, + 0x03, 0x03, 0x00, 0x00, 0x4d, 0x04, 0x03, 0x00, + 0x00, 0x04, 0x05, 0x03, 0x00, 0x00, 0x4d, 0x06, + 0x03, 0x00, 0x00, 0x04, 0x07, 0x03, 0x00, 0x00, + 0x4d, 0x08, 0x03, 0x00, 0x00, 0x04, 0x09, 0x03, + 0x00, 0x00, 0x4d, 0x0a, 0x03, 0x00, 0x00, 0x04, + 0x0b, 0x03, 0x00, 0x00, 0x4d, 0x0c, 0x03, 0x00, + 0x00, 0x04, 0x0d, 0x03, 0x00, 0x00, 0x4d, 0x0e, + 0x03, 0x00, 0x00, 0x04, 0x0f, 0x03, 0x00, 0x00, + 0x4d, 0x10, 0x03, 0x00, 0x00, 0x04, 0x11, 0x03, + 0x00, 0x00, 0x4d, 0x12, 0x03, 0x00, 0x00, 0x4d, + 0x13, 0x03, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, + 0x00, 0x24, 0x01, 0x00, 0xcc, 0x28, 0xa8, 0x0c, + 0x01, 0x00, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, + 0x33, 0x07, 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_kn_size = 25169; + +const uint8_t intl_kn[25169] = { + 0x01, 0xe4, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x6b, 0x6e, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x0e, + 0x7b, 0x31, 0x7d, 0x20, 0x7b, 0x30, 0x7d, 0x0a, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, 0x65, + 0x64, 0x69, 0x75, 0x6d, 0x08, 0x66, 0x75, 0x6c, + 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x02, 0x64, + 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, 0x06, 0x64, + 0x20, 0x45, 0x04, 0x45, 0x64, 0x10, 0x45, 0x20, + 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x06, 0x45, + 0x68, 0x6d, 0x0e, 0x45, 0x20, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x06, 0x45, 0x48, 0x6d, 0x16, 0x45, + 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x61, 0x08, 0x45, 0x68, 0x6d, 0x73, 0x14, + 0x45, 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x08, 0x45, 0x48, 0x6d, 0x73, 0x06, + 0x47, 0x20, 0x79, 0x04, 0x47, 0x79, 0x0e, 0x47, + 0x20, 0x79, 0x20, 0x4d, 0x4d, 0x4d, 0x0a, 0x47, + 0x79, 0x4d, 0x4d, 0x4d, 0x12, 0x47, 0x20, 0x79, + 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x0c, 0x47, + 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x18, 0x47, 0x20, + 0x79, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x2c, + 0x20, 0x45, 0x0e, 0x47, 0x79, 0x4d, 0x4d, 0x4d, + 0x45, 0x64, 0x06, 0x68, 0x20, 0x61, 0x02, 0x68, + 0x04, 0x48, 0x48, 0x02, 0x48, 0x0c, 0x68, 0x3a, + 0x6d, 0x6d, 0x20, 0x61, 0x04, 0x68, 0x6d, 0x0a, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x04, 0x48, 0x6d, + 0x12, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x61, 0x06, 0x68, 0x6d, 0x73, 0x10, 0x48, + 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x06, + 0x48, 0x6d, 0x73, 0x16, 0x68, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x61, 0x20, 0x76, 0x08, + 0x68, 0x6d, 0x73, 0x76, 0x14, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x76, 0x08, + 0x48, 0x6d, 0x73, 0x76, 0x10, 0x68, 0x3a, 0x6d, + 0x6d, 0x20, 0x61, 0x20, 0x76, 0x06, 0x68, 0x6d, + 0x76, 0x0e, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x20, + 0x76, 0x06, 0x48, 0x6d, 0x76, 0x02, 0x4c, 0x02, + 0x4d, 0x06, 0x64, 0x2f, 0x4d, 0x04, 0x4d, 0x64, + 0x0c, 0x64, 0x2f, 0x4d, 0x2c, 0x20, 0x45, 0x06, + 0x4d, 0x45, 0x64, 0x0a, 0x64, 0x64, 0x2d, 0x4d, + 0x4d, 0x08, 0x4d, 0x4d, 0x64, 0x64, 0x06, 0x4c, + 0x4c, 0x4c, 0x06, 0x4d, 0x4d, 0x4d, 0x0a, 0x4d, + 0x4d, 0x4d, 0x20, 0x64, 0x08, 0x4d, 0x4d, 0x4d, + 0x64, 0x10, 0x45, 0x2c, 0x20, 0x64, 0x20, 0x4d, + 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x45, 0x64, + 0x0c, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, + 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x0a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x04, 0x6d, 0x73, 0x02, 0x79, + 0x06, 0x4d, 0x2f, 0x79, 0x04, 0x79, 0x4d, 0x0a, + 0x64, 0x2f, 0x4d, 0x2f, 0x79, 0x06, 0x79, 0x4d, + 0x64, 0x10, 0x45, 0x2c, 0x20, 0x4d, 0x2f, 0x64, + 0x2f, 0x79, 0x08, 0x79, 0x4d, 0x45, 0x64, 0x08, + 0x4d, 0x4d, 0x2d, 0x79, 0x06, 0x79, 0x4d, 0x4d, + 0x0a, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x08, 0x79, + 0x4d, 0x4d, 0x4d, 0x0e, 0x4d, 0x4d, 0x4d, 0x20, + 0x64, 0x2c, 0x79, 0x0a, 0x79, 0x4d, 0x4d, 0x4d, + 0x64, 0x16, 0x45, 0x2c, 0x20, 0x4d, 0x4d, 0x4d, + 0x20, 0x64, 0x2c, 0x20, 0x79, 0x0c, 0x79, 0x4d, + 0x4d, 0x4d, 0x45, 0x64, 0x0c, 0x4d, 0x4d, 0x4d, + 0x4d, 0x20, 0x79, 0x0a, 0x79, 0x4d, 0x4d, 0x4d, + 0x4d, 0x0a, 0x51, 0x51, 0x51, 0x20, 0x79, 0x08, + 0x79, 0x51, 0x51, 0x51, 0x0c, 0x51, 0x51, 0x51, + 0x51, 0x20, 0x79, 0x0a, 0x79, 0x51, 0x51, 0x51, + 0x51, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x73, 0x1e, 0x45, 0x45, 0x45, 0x45, 0x2c, + 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x2c, + 0x20, 0x79, 0x14, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, + 0x45, 0x45, 0x45, 0x45, 0x64, 0x12, 0x4d, 0x4d, + 0x4d, 0x4d, 0x20, 0x64, 0x2c, 0x20, 0x79, 0x0c, + 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x10, 0x4d, + 0x4d, 0x4d, 0x20, 0x64, 0x2c, 0x20, 0x79, 0x0c, + 0x64, 0x2f, 0x4d, 0x2f, 0x79, 0x79, 0x16, 0x64, + 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x73, 0x1e, 0x68, 0x68, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x61, 0x20, 0x7a, 0x7a, + 0x7a, 0x7a, 0x12, 0x68, 0x6d, 0x6d, 0x73, 0x73, + 0x7a, 0x7a, 0x7a, 0x7a, 0x18, 0x68, 0x68, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x20, + 0x7a, 0x08, 0x68, 0x6d, 0x73, 0x7a, 0x14, 0x68, + 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, + 0x61, 0x0e, 0x68, 0x68, 0x3a, 0x6d, 0x6d, 0x20, + 0x61, 0x16, 0x74, 0x69, 0x6d, 0x65, 0x46, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x73, 0x0e, 0x66, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x73, 0x03, 0x9c, 0x0c, + 0x05, 0xab, 0x0c, 0xc6, 0x0c, 0x05, 0xae, 0x0c, + 0xbe, 0x0c, 0x03, 0x8f, 0x0c, 0x05, 0xae, 0x0c, + 0xc7, 0x0c, 0x05, 0x9c, 0x0c, 0xc2, 0x0c, 0x05, + 0x9c, 0x0c, 0xc1, 0x0c, 0x03, 0x86, 0x0c, 0x05, + 0xb8, 0x0c, 0xc6, 0x0c, 0x03, 0x85, 0x0c, 0x03, + 0xa8, 0x0c, 0x05, 0xa1, 0x0c, 0xbf, 0x0c, 0x0c, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x05, 0x9c, + 0x0c, 0xa8, 0x0c, 0x0b, 0xab, 0x0c, 0xc6, 0x0c, + 0xac, 0x0c, 0xcd, 0x0c, 0xb0, 0x0c, 0x0d, 0xae, + 0x0c, 0xbe, 0x0c, 0xb0, 0x0c, 0xcd, 0x0c, 0x9a, + 0x0c, 0xcd, 0x0c, 0x0b, 0x8f, 0x0c, 0xaa, 0x0c, + 0xcd, 0x0c, 0xb0, 0x0c, 0xbf, 0x0c, 0x09, 0x9c, + 0x0c, 0xc2, 0x0c, 0xa8, 0x0c, 0xcd, 0x0c, 0x09, + 0x9c, 0x0c, 0xc1, 0x0c, 0xb2, 0x0c, 0xc8, 0x0c, + 0x05, 0x86, 0x0c, 0x97, 0x0c, 0x0f, 0xb8, 0x0c, + 0xc6, 0x0c, 0xaa, 0x0c, 0xcd, 0x0c, 0x9f, 0x0c, + 0xc6, 0x0c, 0x82, 0x0c, 0x0b, 0x85, 0x0c, 0x95, + 0x0c, 0xcd, 0x0c, 0x9f, 0x0c, 0xcb, 0x0c, 0x09, + 0xa8, 0x0c, 0xb5, 0x0c, 0xc6, 0x0c, 0x82, 0x0c, + 0x0b, 0xa1, 0x0c, 0xbf, 0x0c, 0xb8, 0x0c, 0xc6, + 0x0c, 0x82, 0x0c, 0x0b, 0x9c, 0x0c, 0xa8, 0x0c, + 0xb5, 0x0c, 0xb0, 0x0c, 0xbf, 0x0c, 0x11, 0xab, + 0x0c, 0xc6, 0x0c, 0xac, 0x0c, 0xcd, 0x0c, 0xb0, + 0x0c, 0xb5, 0x0c, 0xb0, 0x0c, 0xbf, 0x0c, 0x0f, + 0x8f, 0x0c, 0xaa, 0x0c, 0xcd, 0x0c, 0xb0, 0x0c, + 0xbf, 0x0c, 0xb2, 0x0c, 0xcd, 0x0c, 0x0d, 0x86, + 0x0c, 0x97, 0x0c, 0xb8, 0x0c, 0xcd, 0x0c, 0x9f, + 0x0c, 0xcd, 0x0c, 0x15, 0xb8, 0x0c, 0xc6, 0x0c, + 0xaa, 0x0c, 0xcd, 0x0c, 0x9f, 0x0c, 0xc6, 0x0c, + 0x82, 0x0c, 0xac, 0x0c, 0xb0, 0x0c, 0xcd, 0x0c, + 0x11, 0x85, 0x0c, 0x95, 0x0c, 0xcd, 0x0c, 0x9f, + 0x0c, 0xcb, 0x0c, 0xac, 0x0c, 0xb0, 0x0c, 0xcd, + 0x0c, 0x0f, 0xa8, 0x0c, 0xb5, 0x0c, 0xc6, 0x0c, + 0x82, 0x0c, 0xac, 0x0c, 0xb0, 0x0c, 0xcd, 0x0c, + 0x11, 0xa1, 0x0c, 0xbf, 0x0c, 0xb8, 0x0c, 0xc6, + 0x0c, 0x82, 0x0c, 0xac, 0x0c, 0xb0, 0x0c, 0xcd, + 0x0c, 0x0c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x73, + 0x05, 0xad, 0x0c, 0xbe, 0x0c, 0x05, 0xb8, 0x0c, + 0xcb, 0x0c, 0x05, 0xae, 0x0c, 0x82, 0x0c, 0x05, + 0xac, 0x0c, 0xc1, 0x0c, 0x05, 0x97, 0x0c, 0xc1, + 0x0c, 0x05, 0xb6, 0x0c, 0xc1, 0x0c, 0x03, 0xb6, + 0x0c, 0x09, 0xad, 0x0c, 0xbe, 0x0c, 0xa8, 0x0c, + 0xc1, 0x0c, 0x07, 0xb8, 0x0c, 0xcb, 0x0c, 0xae, + 0x0c, 0x09, 0xae, 0x0c, 0x82, 0x0c, 0x97, 0x0c, + 0xb3, 0x0c, 0x07, 0xac, 0x0c, 0xc1, 0x0c, 0xa7, + 0x0c, 0x09, 0x97, 0x0c, 0xc1, 0x0c, 0xb0, 0x0c, + 0xc1, 0x0c, 0x0b, 0xb6, 0x0c, 0xc1, 0x0c, 0x95, + 0x0c, 0xcd, 0x0c, 0xb0, 0x0c, 0x07, 0xb6, 0x0c, + 0xa8, 0x0c, 0xbf, 0x0c, 0x0f, 0xad, 0x0c, 0xbe, + 0x0c, 0xa8, 0x0c, 0xc1, 0x0c, 0xb5, 0x0c, 0xbe, + 0x0c, 0xb0, 0x0c, 0x0d, 0xb8, 0x0c, 0xcb, 0x0c, + 0xae, 0x0c, 0xb5, 0x0c, 0xbe, 0x0c, 0xb0, 0x0c, + 0x0f, 0xae, 0x0c, 0x82, 0x0c, 0x97, 0x0c, 0xb3, + 0x0c, 0xb5, 0x0c, 0xbe, 0x0c, 0xb0, 0x0c, 0x0d, + 0xac, 0x0c, 0xc1, 0x0c, 0xa7, 0x0c, 0xb5, 0x0c, + 0xbe, 0x0c, 0xb0, 0x0c, 0x0f, 0x97, 0x0c, 0xc1, + 0x0c, 0xb0, 0x0c, 0xc1, 0x0c, 0xb5, 0x0c, 0xbe, + 0x0c, 0xb0, 0x0c, 0x11, 0xb6, 0x0c, 0xc1, 0x0c, + 0x95, 0x0c, 0xcd, 0x0c, 0xb0, 0x0c, 0xb5, 0x0c, + 0xbe, 0x0c, 0xb0, 0x0c, 0x0d, 0xb6, 0x0c, 0xa8, + 0x0c, 0xbf, 0x0c, 0xb5, 0x0c, 0xbe, 0x0c, 0xb0, + 0x0c, 0x08, 0x64, 0x61, 0x79, 0x73, 0x04, 0x42, + 0x45, 0x08, 0x65, 0x72, 0x61, 0x73, 0x13, 0xaa, + 0x0c, 0xc2, 0x0c, 0xb0, 0x0c, 0xcd, 0x0c, 0xb5, + 0x0c, 0xbe, 0x0c, 0xb9, 0x0c, 0xcd, 0x0c, 0xa8, + 0x0c, 0x04, 0x61, 0x6d, 0x0f, 0x85, 0x0c, 0xaa, + 0x0c, 0xb0, 0x0c, 0xbe, 0x0c, 0xb9, 0x0c, 0xcd, + 0x0c, 0xa8, 0x0c, 0x04, 0x70, 0x6d, 0x14, 0x64, + 0x61, 0x79, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, + 0x73, 0x06, 0x4d, 0x30, 0x31, 0x06, 0x4d, 0x30, + 0x32, 0x06, 0x4d, 0x30, 0x33, 0x06, 0x4d, 0x30, + 0x34, 0x06, 0x4d, 0x30, 0x35, 0x06, 0x4d, 0x30, + 0x36, 0x06, 0x4d, 0x30, 0x37, 0x06, 0x4d, 0x30, + 0x38, 0x06, 0x4d, 0x30, 0x39, 0x06, 0x4d, 0x31, + 0x30, 0x06, 0x4d, 0x31, 0x31, 0x06, 0x4d, 0x31, + 0x32, 0x08, 0x54, 0x6f, 0x75, 0x74, 0x08, 0x42, + 0x61, 0x62, 0x61, 0x0a, 0x48, 0x61, 0x74, 0x6f, + 0x72, 0x0a, 0x4b, 0x69, 0x61, 0x68, 0x6b, 0x08, + 0x54, 0x6f, 0x62, 0x61, 0x0c, 0x41, 0x6d, 0x73, + 0x68, 0x69, 0x72, 0x10, 0x42, 0x61, 0x72, 0x61, + 0x6d, 0x68, 0x61, 0x74, 0x12, 0x42, 0x61, 0x72, + 0x61, 0x6d, 0x6f, 0x75, 0x64, 0x61, 0x0e, 0x42, + 0x61, 0x73, 0x68, 0x61, 0x6e, 0x73, 0x0a, 0x50, + 0x61, 0x6f, 0x6e, 0x61, 0x08, 0x45, 0x70, 0x65, + 0x70, 0x0a, 0x4d, 0x65, 0x73, 0x72, 0x61, 0x0a, + 0x4e, 0x61, 0x73, 0x69, 0x65, 0x08, 0x45, 0x52, + 0x41, 0x30, 0x08, 0x45, 0x52, 0x41, 0x31, 0x10, + 0x4d, 0x65, 0x73, 0x6b, 0x65, 0x72, 0x65, 0x6d, + 0x0c, 0x54, 0x65, 0x6b, 0x65, 0x6d, 0x74, 0x0a, + 0x48, 0x65, 0x64, 0x61, 0x72, 0x0c, 0x54, 0x61, + 0x68, 0x73, 0x61, 0x73, 0x06, 0x54, 0x65, 0x72, + 0x0e, 0x59, 0x65, 0x6b, 0x61, 0x74, 0x69, 0x74, + 0x0e, 0x4d, 0x65, 0x67, 0x61, 0x62, 0x69, 0x74, + 0x0c, 0x4d, 0x69, 0x61, 0x7a, 0x69, 0x61, 0x0c, + 0x47, 0x65, 0x6e, 0x62, 0x6f, 0x74, 0x08, 0x53, + 0x65, 0x6e, 0x65, 0x0a, 0x48, 0x61, 0x6d, 0x6c, + 0x65, 0x0e, 0x4e, 0x65, 0x68, 0x61, 0x73, 0x73, + 0x65, 0x0e, 0x50, 0x61, 0x67, 0x75, 0x6d, 0x65, + 0x6e, 0x0f, 0x95, 0x0c, 0xcd, 0x0c, 0xb0, 0x0c, + 0xbf, 0x0c, 0x2e, 0x00, 0xaa, 0x0c, 0xc2, 0x0c, + 0x0d, 0x95, 0x0c, 0xcd, 0x0c, 0xb0, 0x0c, 0xbf, + 0x0c, 0x2e, 0x00, 0xb6, 0x0c, 0x17, 0x95, 0x0c, + 0xcd, 0x0c, 0xb0, 0x0c, 0xbf, 0x0c, 0x2e, 0x00, + 0xaa, 0x0c, 0xc2, 0x0c, 0x2e, 0x00, 0x95, 0x0c, + 0xbe, 0x0c, 0xb2, 0x0c, 0x15, 0xaa, 0x0c, 0xcd, + 0x0c, 0xb0, 0x0c, 0xb8, 0x0c, 0x95, 0x0c, 0xcd, + 0x0c, 0xa4, 0x0c, 0x20, 0x00, 0xb6, 0x0c, 0x95, + 0x0c, 0x1b, 0x95, 0x0c, 0xcd, 0x0c, 0xb0, 0x0c, + 0xbf, 0x0c, 0xb8, 0x0c, 0xcd, 0x0c, 0xa4, 0x0c, + 0x20, 0x00, 0xaa, 0x0c, 0xc2, 0x0c, 0xb0, 0x0c, + 0xcd, 0x0c, 0xb5, 0x0c, 0x15, 0x95, 0x0c, 0xcd, + 0x0c, 0xb0, 0x0c, 0xbf, 0x0c, 0xb8, 0x0c, 0xcd, + 0x0c, 0xa4, 0x0c, 0x20, 0x00, 0xb6, 0x0c, 0x95, + 0x0c, 0x0c, 0x54, 0x69, 0x73, 0x68, 0x72, 0x69, + 0x0e, 0x48, 0x65, 0x73, 0x68, 0x76, 0x61, 0x6e, + 0x0c, 0x4b, 0x69, 0x73, 0x6c, 0x65, 0x76, 0x0a, + 0x54, 0x65, 0x76, 0x65, 0x74, 0x0c, 0x53, 0x68, + 0x65, 0x76, 0x61, 0x74, 0x0c, 0x41, 0x64, 0x61, + 0x72, 0x20, 0x49, 0x08, 0x41, 0x64, 0x61, 0x72, + 0x0a, 0x4e, 0x69, 0x73, 0x61, 0x6e, 0x08, 0x49, + 0x79, 0x61, 0x72, 0x0a, 0x53, 0x69, 0x76, 0x61, + 0x6e, 0x0a, 0x54, 0x61, 0x6d, 0x75, 0x7a, 0x04, + 0x41, 0x76, 0x08, 0x45, 0x6c, 0x75, 0x6c, 0x0e, + 0x41, 0x64, 0x61, 0x72, 0x20, 0x49, 0x49, 0x04, + 0x41, 0x4d, 0x0e, 0x43, 0x68, 0x61, 0x69, 0x74, + 0x72, 0x61, 0x10, 0x56, 0x61, 0x69, 0x73, 0x61, + 0x6b, 0x68, 0x61, 0x10, 0x4a, 0x79, 0x61, 0x69, + 0x73, 0x74, 0x68, 0x61, 0x0c, 0x41, 0x73, 0x61, + 0x64, 0x68, 0x61, 0x0e, 0x53, 0x72, 0x61, 0x76, + 0x61, 0x6e, 0x61, 0x0c, 0x42, 0x68, 0x61, 0x64, + 0x72, 0x61, 0x0c, 0x41, 0x73, 0x76, 0x69, 0x6e, + 0x61, 0x0e, 0x4b, 0x61, 0x72, 0x74, 0x69, 0x6b, + 0x61, 0x14, 0x41, 0x67, 0x72, 0x61, 0x68, 0x61, + 0x79, 0x61, 0x6e, 0x61, 0x0a, 0x50, 0x61, 0x75, + 0x73, 0x61, 0x0a, 0x4d, 0x61, 0x67, 0x68, 0x61, + 0x10, 0x50, 0x68, 0x61, 0x6c, 0x67, 0x75, 0x6e, + 0x61, 0x08, 0x53, 0x61, 0x6b, 0x61, 0x08, 0x4d, + 0x75, 0x68, 0x2e, 0x08, 0x53, 0x61, 0x66, 0x2e, + 0x0c, 0x52, 0x61, 0x62, 0x2e, 0x20, 0x49, 0x0e, + 0x52, 0x61, 0x62, 0x2e, 0x20, 0x49, 0x49, 0x0c, + 0x4a, 0x75, 0x6d, 0x2e, 0x20, 0x49, 0x0e, 0x4a, + 0x75, 0x6d, 0x2e, 0x20, 0x49, 0x49, 0x08, 0x52, + 0x61, 0x6a, 0x2e, 0x08, 0x53, 0x68, 0x61, 0x2e, + 0x08, 0x52, 0x61, 0x6d, 0x2e, 0x0a, 0x53, 0x68, + 0x61, 0x77, 0x2e, 0x11, 0x44, 0x00, 0x68, 0x00, + 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, + 0x51, 0x00, 0x2e, 0x00, 0x11, 0x44, 0x00, 0x68, + 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, + 0x00, 0x48, 0x00, 0x2e, 0x00, 0x10, 0x4d, 0x75, + 0x68, 0x61, 0x72, 0x72, 0x61, 0x6d, 0x0a, 0x53, + 0x61, 0x66, 0x61, 0x72, 0x0f, 0x52, 0x00, 0x61, + 0x00, 0x62, 0x00, 0x69, 0x00, 0xbb, 0x02, 0x20, + 0x00, 0x49, 0x00, 0x11, 0x52, 0x00, 0x61, 0x00, + 0x62, 0x00, 0x69, 0x00, 0xbb, 0x02, 0x20, 0x00, + 0x49, 0x00, 0x49, 0x00, 0x10, 0x4a, 0x75, 0x6d, + 0x61, 0x64, 0x61, 0x20, 0x49, 0x12, 0x4a, 0x75, + 0x6d, 0x61, 0x64, 0x61, 0x20, 0x49, 0x49, 0x0a, + 0x52, 0x61, 0x6a, 0x61, 0x62, 0x0f, 0x53, 0x00, + 0x68, 0x00, 0x61, 0x00, 0xbb, 0x02, 0x62, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x0e, 0x52, 0x61, 0x6d, + 0x61, 0x64, 0x61, 0x6e, 0x0e, 0x53, 0x68, 0x61, + 0x77, 0x77, 0x61, 0x6c, 0x19, 0x44, 0x00, 0x68, + 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, + 0x00, 0x51, 0x00, 0x69, 0x00, 0xbb, 0x02, 0x64, + 0x00, 0x61, 0x00, 0x68, 0x00, 0x19, 0x44, 0x00, + 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, + 0x2d, 0x00, 0x48, 0x00, 0x69, 0x00, 0x6a, 0x00, + 0x6a, 0x00, 0x61, 0x00, 0x68, 0x00, 0x04, 0x41, + 0x48, 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x36, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x36, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x36, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, + 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x1d, 0x57, 0x00, 0x61, 0x00, + 0x64, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x1f, 0x52, 0x00, 0x65, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, + 0x59, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x37, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x2d, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6d, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x2d, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x2b, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, 0x2d, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, 0x2a, 0x4a, + 0x69, 0x6e, 0x67, 0x6f, 0x2d, 0x6b, 0x65, 0x69, + 0x75, 0x6e, 0x20, 0x28, 0x37, 0x36, 0x37, 0x2d, + 0x37, 0x37, 0x30, 0x29, 0x1d, 0x48, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x38, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x1f, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x2d, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x2d, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x1f, 0x44, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1d, 0x4a, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, + 0x4b, 0x00, 0x61, 0x00, 0x6a, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1f, 0x53, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x20, 0x54, 0x65, 0x6e, 0x2d, 0x61, + 0x6e, 0x20, 0x28, 0x38, 0x35, 0x37, 0x2d, 0x38, + 0x35, 0x39, 0x29, 0x1f, 0x4a, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x21, 0x47, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x1f, 0x45, 0x00, 0x6e, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1b, 0x4c, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x1d, 0x41, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x1f, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, + 0x45, 0x00, 0x69, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, + 0x00, 0x73, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x39, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, + 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4d, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x35, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x27, 0x4a, 0x00, 0x69, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x29, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4c, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x4a, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, 0x24, 0x54, + 0x65, 0x6e, 0x2d, 0x65, 0x69, 0x20, 0x28, 0x31, + 0x31, 0x31, 0x30, 0x2d, 0x31, 0x31, 0x31, 0x33, + 0x29, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x44, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x48, 0x00, 0x65, 0x00, 0x69, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x27, 0x45, 0x00, 0x69, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x68, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, + 0x00, 0x61, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x41, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x69, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x59, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, + 0x4a, 0x00, 0x75, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x29, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x29, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, + 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x41, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x4d, + 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x27, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x75, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x29, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x29, 0x52, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x4e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x4c, 0x01, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6d, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x1f, 0x4b, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, + 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4c, + 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x74, 0x00, + 0x73, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x4d, 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x27, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x21, 0x4c, 0x01, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x21, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1f, + 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x72, 0x00, 0x65, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x62, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x27, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x48, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x65, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x41, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4d, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x02, 0x54, 0x02, 0x53, + 0x0a, 0x4d, 0x65, 0x69, 0x6a, 0x69, 0x0d, 0x54, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x0b, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x0c, 0x48, + 0x65, 0x69, 0x73, 0x65, 0x69, 0x12, 0x46, 0x61, + 0x72, 0x76, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x16, + 0x4f, 0x72, 0x64, 0x69, 0x62, 0x65, 0x68, 0x65, + 0x73, 0x68, 0x74, 0x0e, 0x4b, 0x68, 0x6f, 0x72, + 0x64, 0x61, 0x64, 0x06, 0x54, 0x69, 0x72, 0x0c, + 0x4d, 0x6f, 0x72, 0x64, 0x61, 0x64, 0x12, 0x53, + 0x68, 0x61, 0x68, 0x72, 0x69, 0x76, 0x61, 0x72, + 0x08, 0x4d, 0x65, 0x68, 0x72, 0x08, 0x41, 0x62, + 0x61, 0x6e, 0x08, 0x41, 0x7a, 0x61, 0x72, 0x06, + 0x44, 0x65, 0x79, 0x0c, 0x42, 0x61, 0x68, 0x6d, + 0x61, 0x6e, 0x0c, 0x45, 0x73, 0x66, 0x61, 0x6e, + 0x64, 0x04, 0x41, 0x50, 0x1a, 0x42, 0x65, 0x66, + 0x6f, 0x72, 0x65, 0x20, 0x52, 0x2e, 0x4f, 0x2e, + 0x43, 0x2e, 0x0c, 0x52, 0x2e, 0x4f, 0x2e, 0x43, + 0x2e, 0x12, 0x63, 0x61, 0x6c, 0x65, 0x6e, 0x64, + 0x61, 0x72, 0x73, 0x08, 0x64, 0x61, 0x74, 0x65, + 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, 0x75, + 0x10, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0x1e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, + 0x6e, 0x26, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x6e, 0x65, + 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, + 0x74, 0x74, 0x65, 0x72, 0x6e, 0x0e, 0x64, 0x65, + 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x24, 0x7b, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0x3a, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x10, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x2a, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x40, 0x7b, 0x6d, + 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, + 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x0e, 0x70, + 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x10, 0x70, + 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x02, + 0x2e, 0x02, 0x2c, 0x0a, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x06, 0x4e, 0x61, 0x4e, 0x06, 0x6e, 0x61, + 0x6e, 0x02, 0x2b, 0x10, 0x70, 0x6c, 0x75, 0x73, + 0x53, 0x69, 0x67, 0x6e, 0x02, 0x2d, 0x12, 0x6d, + 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x02, 0x25, 0x16, 0x70, 0x65, 0x72, 0x63, 0x65, + 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x03, 0x1e, + 0x22, 0x10, 0x69, 0x6e, 0x66, 0x69, 0x6e, 0x69, + 0x74, 0x79, 0x08, 0x6b, 0x6e, 0x64, 0x61, 0x0e, + 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x04, + 0x41, 0x24, 0x06, 0x41, 0x55, 0x44, 0x04, 0x52, + 0x24, 0x06, 0x42, 0x52, 0x4c, 0x06, 0x43, 0x41, + 0x24, 0x06, 0x43, 0x41, 0x44, 0x06, 0x43, 0x4e, + 0xa5, 0x06, 0x43, 0x4e, 0x59, 0x03, 0xac, 0x20, + 0x06, 0x45, 0x55, 0x52, 0x02, 0xa3, 0x06, 0x47, + 0x42, 0x50, 0x06, 0x48, 0x4b, 0x24, 0x06, 0x48, + 0x4b, 0x44, 0x03, 0xaa, 0x20, 0x06, 0x49, 0x4c, + 0x53, 0x03, 0xb9, 0x20, 0x06, 0x49, 0x4e, 0x52, + 0x06, 0x4a, 0x50, 0xa5, 0x06, 0x4a, 0x50, 0x59, + 0x03, 0xa9, 0x20, 0x06, 0x4b, 0x52, 0x57, 0x06, + 0x4d, 0x58, 0x24, 0x06, 0x4d, 0x58, 0x4e, 0x06, + 0x4e, 0x5a, 0x24, 0x06, 0x4e, 0x5a, 0x44, 0x03, + 0x3f, 0x0e, 0x06, 0x54, 0x48, 0x42, 0x06, 0x4e, + 0x54, 0x24, 0x06, 0x54, 0x57, 0x44, 0x02, 0x24, + 0x06, 0x55, 0x53, 0x44, 0x03, 0xab, 0x20, 0x06, + 0x56, 0x4e, 0x44, 0x08, 0x46, 0x43, 0x46, 0x41, + 0x06, 0x58, 0x41, 0x46, 0x06, 0x45, 0x43, 0x24, + 0x06, 0x58, 0x43, 0x44, 0x06, 0x43, 0x46, 0x41, + 0x06, 0x58, 0x4f, 0x46, 0x08, 0x43, 0x46, 0x50, + 0x46, 0x06, 0x58, 0x50, 0x46, 0x14, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, + 0x52, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, + 0x74, 0x6c, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x6a, + 0x73, 0x6f, 0x6e, 0x70, 0x2f, 0x6b, 0x6e, 0x2e, + 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, + 0x00, 0x01, 0x00, 0x27, 0x00, 0x89, 0x01, 0xbe, + 0x6b, 0x01, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x39, + 0xd0, 0x00, 0x00, 0x00, 0x43, 0xd1, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd2, 0x00, 0x00, 0x00, 0x4d, + 0xd3, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd4, 0x00, + 0x00, 0x00, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x04, + 0xd6, 0x00, 0x00, 0x00, 0x04, 0xd7, 0x00, 0x00, + 0x00, 0x04, 0xd8, 0x00, 0x00, 0x00, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x04, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdb, 0x00, 0x00, 0x00, 0x04, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x04, + 0xde, 0x00, 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, + 0x00, 0x04, 0xe0, 0x00, 0x00, 0x00, 0x04, 0xe1, + 0x00, 0x00, 0x00, 0x04, 0xe2, 0x00, 0x00, 0x00, + 0x26, 0x0f, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, + 0x0a, 0x4d, 0xe4, 0x00, 0x00, 0x00, 0x0a, 0x4d, + 0xe5, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, + 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe9, + 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0xed, 0x00, + 0x00, 0x00, 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, + 0xef, 0x00, 0x00, 0x00, 0x04, 0xf0, 0x00, 0x00, + 0x00, 0x4d, 0xf1, 0x00, 0x00, 0x00, 0x04, 0xf2, + 0x00, 0x00, 0x00, 0x4d, 0xf3, 0x00, 0x00, 0x00, + 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xf5, 0x00, + 0x00, 0x00, 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, + 0xf7, 0x00, 0x00, 0x00, 0x04, 0xf8, 0x00, 0x00, + 0x00, 0x4d, 0xf9, 0x00, 0x00, 0x00, 0x04, 0xfa, + 0x00, 0x00, 0x00, 0x4d, 0xfb, 0x00, 0x00, 0x00, + 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xfd, 0x00, + 0x00, 0x00, 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, + 0xff, 0x00, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, + 0x00, 0x4d, 0x01, 0x01, 0x00, 0x00, 0x04, 0x02, + 0x01, 0x00, 0x00, 0x4d, 0x03, 0x01, 0x00, 0x00, + 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0x05, 0x01, + 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, + 0x07, 0x01, 0x00, 0x00, 0x04, 0x08, 0x01, 0x00, + 0x00, 0x4d, 0x09, 0x01, 0x00, 0x00, 0x04, 0x0a, + 0x01, 0x00, 0x00, 0x4d, 0x0b, 0x01, 0x00, 0x00, + 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, 0x0d, 0x01, + 0x00, 0x00, 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, + 0x0f, 0x01, 0x00, 0x00, 0x04, 0x10, 0x01, 0x00, + 0x00, 0x4d, 0x11, 0x01, 0x00, 0x00, 0x04, 0x12, + 0x01, 0x00, 0x00, 0x4d, 0x13, 0x01, 0x00, 0x00, + 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, 0x15, 0x01, + 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, + 0x17, 0x01, 0x00, 0x00, 0x04, 0x18, 0x01, 0x00, + 0x00, 0x4d, 0x19, 0x01, 0x00, 0x00, 0x04, 0x1a, + 0x01, 0x00, 0x00, 0x4d, 0x1b, 0x01, 0x00, 0x00, + 0x04, 0x1c, 0x01, 0x00, 0x00, 0x4d, 0x1d, 0x01, + 0x00, 0x00, 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, + 0x1f, 0x01, 0x00, 0x00, 0x04, 0x20, 0x01, 0x00, + 0x00, 0x4d, 0x21, 0x01, 0x00, 0x00, 0x04, 0x22, + 0x01, 0x00, 0x00, 0x4d, 0x23, 0x01, 0x00, 0x00, + 0x04, 0x24, 0x01, 0x00, 0x00, 0x4d, 0x25, 0x01, + 0x00, 0x00, 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, + 0x26, 0x01, 0x00, 0x00, 0x04, 0x27, 0x01, 0x00, + 0x00, 0x4d, 0x28, 0x01, 0x00, 0x00, 0x04, 0x29, + 0x01, 0x00, 0x00, 0x4d, 0x2a, 0x01, 0x00, 0x00, + 0x04, 0x2b, 0x01, 0x00, 0x00, 0x4d, 0x2c, 0x01, + 0x00, 0x00, 0x04, 0x2d, 0x01, 0x00, 0x00, 0x4d, + 0x2e, 0x01, 0x00, 0x00, 0x04, 0x2f, 0x01, 0x00, + 0x00, 0x4d, 0x30, 0x01, 0x00, 0x00, 0x04, 0x31, + 0x01, 0x00, 0x00, 0x4d, 0x32, 0x01, 0x00, 0x00, + 0x04, 0x33, 0x01, 0x00, 0x00, 0x4d, 0x34, 0x01, + 0x00, 0x00, 0x04, 0x35, 0x01, 0x00, 0x00, 0x4d, + 0x36, 0x01, 0x00, 0x00, 0x04, 0x37, 0x01, 0x00, + 0x00, 0x4d, 0x38, 0x01, 0x00, 0x00, 0x04, 0x39, + 0x01, 0x00, 0x00, 0x4d, 0x3a, 0x01, 0x00, 0x00, + 0x4d, 0x3b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x3c, + 0x01, 0x00, 0x00, 0x4d, 0x3d, 0x01, 0x00, 0x00, + 0x04, 0x3e, 0x01, 0x00, 0x00, 0x4d, 0x3f, 0x01, + 0x00, 0x00, 0x04, 0x40, 0x01, 0x00, 0x00, 0x4d, + 0x32, 0x01, 0x00, 0x00, 0x04, 0x41, 0x01, 0x00, + 0x00, 0x4d, 0x2a, 0x01, 0x00, 0x00, 0x4d, 0x42, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x43, 0x01, 0x00, + 0x00, 0x4d, 0x44, 0x01, 0x00, 0x00, 0x04, 0x45, + 0x01, 0x00, 0x00, 0x4d, 0x46, 0x01, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x4d, 0x09, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x4d, + 0x05, 0x01, 0x00, 0x00, 0x4d, 0x49, 0x01, 0x00, + 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x0b, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x57, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, + 0x80, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x82, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x82, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x83, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x84, 0x01, 0x00, 0x00, 0x4d, 0x85, 0x01, 0x00, + 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x4d, 0x87, + 0x01, 0x00, 0x00, 0x4d, 0x88, 0x01, 0x00, 0x00, + 0x4d, 0xd5, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x00, 0xbe, 0x01, 0xbe, 0x02, 0xbe, 0x03, 0xbe, + 0x04, 0xbe, 0x05, 0xbe, 0x06, 0xbe, 0x07, 0xbe, + 0x08, 0xbe, 0x09, 0xbe, 0x0a, 0xbe, 0x0b, 0x26, + 0x0c, 0x00, 0x4d, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, + 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, + 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, + 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, + 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, + 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, + 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, + 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, + 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, + 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, + 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, + 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x81, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x84, 0x01, 0x00, + 0x00, 0x4d, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, + 0x01, 0x00, 0x00, 0x4d, 0x87, 0x01, 0x00, 0x00, + 0x4d, 0x88, 0x01, 0x00, 0x00, 0x4d, 0xd6, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x0c, 0xbe, 0x0d, + 0xbe, 0x0e, 0xbe, 0x0f, 0xbe, 0x10, 0xbe, 0x11, + 0xbe, 0x12, 0xbe, 0x13, 0xbe, 0x14, 0xbe, 0x15, + 0xbe, 0x16, 0xbe, 0x17, 0xbe, 0x18, 0x26, 0x0d, + 0x00, 0x4d, 0x57, 0x01, 0x00, 0x00, 0x04, 0x95, + 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, + 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, + 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, + 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, + 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, + 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, + 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, + 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, + 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, + 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, + 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, + 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, + 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, + 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, + 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x81, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xa2, 0x01, + 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x57, 0x01, 0x00, 0x00, 0x04, + 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x83, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x84, 0x01, 0x00, 0x00, 0x4d, 0x85, + 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, + 0x4d, 0x87, 0x01, 0x00, 0x00, 0x4d, 0x88, 0x01, + 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x19, 0xbe, 0x1a, 0xbe, 0x1b, 0xbe, + 0x1c, 0xbe, 0x1d, 0xbe, 0x1e, 0xbe, 0x1f, 0xbe, + 0x20, 0xbe, 0x21, 0xbe, 0x22, 0xbe, 0x23, 0xbe, + 0x24, 0x26, 0x0c, 0x00, 0x4d, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, + 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, + 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, + 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, + 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, + 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, + 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, + 0x04, 0x94, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x89, 0x01, + 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, + 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, + 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, + 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, + 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, + 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, + 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x81, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x84, + 0x01, 0x00, 0x00, 0x4d, 0x85, 0x01, 0x00, 0x00, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x4d, 0x87, 0x01, + 0x00, 0x00, 0x4d, 0x88, 0x01, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x25, + 0xbe, 0x26, 0xbe, 0x27, 0xbe, 0x28, 0xbe, 0x29, + 0xbe, 0x2a, 0xbe, 0x2b, 0xbe, 0x2c, 0xbe, 0x2d, + 0xbe, 0x2e, 0xbe, 0x2f, 0xbe, 0x30, 0xbe, 0x31, + 0x26, 0x0d, 0x00, 0x4d, 0x57, 0x01, 0x00, 0x00, + 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, + 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, + 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, + 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, + 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, + 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, + 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, + 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, + 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, + 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, + 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, + 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, + 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, + 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, + 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x57, 0x01, 0x00, + 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, + 0x04, 0xa3, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x83, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x84, 0x01, 0x00, 0x00, + 0x4d, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, + 0x00, 0x00, 0x4d, 0x87, 0x01, 0x00, 0x00, 0x4d, + 0x88, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x32, 0xbe, 0x33, 0xbe, + 0x34, 0xbe, 0x35, 0xbe, 0x36, 0xbe, 0x37, 0xbe, + 0x38, 0xbe, 0x39, 0xbe, 0x3a, 0xbe, 0x3b, 0xbe, + 0x3c, 0xbe, 0x3d, 0xbe, 0x3e, 0x26, 0x0d, 0x00, + 0x4d, 0x57, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, + 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, + 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, + 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, + 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, + 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, + 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, + 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, + 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, 0x26, 0x0d, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa4, + 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, + 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, + 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, + 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, + 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, + 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, + 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, + 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x81, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xa2, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x57, 0x01, 0x00, + 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa2, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x83, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x84, 0x01, 0x00, 0x00, 0x4d, 0x85, + 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, + 0x4d, 0x87, 0x01, 0x00, 0x00, 0x4d, 0x88, 0x01, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x3f, 0xbe, 0x40, 0xbe, 0x41, 0xbe, + 0x42, 0xbe, 0x43, 0xbe, 0x44, 0xbe, 0x45, 0xbe, + 0x46, 0xbe, 0x47, 0xbe, 0x48, 0xbe, 0x49, 0xbe, + 0x4a, 0x26, 0x0c, 0x00, 0x4d, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, + 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, + 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, + 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, + 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, + 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, + 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, + 0x04, 0x94, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x89, 0x01, + 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, + 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, + 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, + 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, + 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, + 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, + 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x81, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xa2, + 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0x57, 0x01, 0x00, 0x00, + 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, + 0xa3, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x83, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x84, 0x01, 0x00, 0x00, 0x4d, + 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, + 0x00, 0x4d, 0x87, 0x01, 0x00, 0x00, 0x4d, 0x88, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6b, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, + 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x81, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xb1, 0x01, 0x00, 0x00, + 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, + 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, 0x00, 0x26, + 0x04, 0x00, 0x4d, 0x57, 0x01, 0x00, 0x00, 0x04, + 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, + 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, + 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, + 0x04, 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, + 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, 0x00, 0x26, + 0x04, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x83, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x84, 0x01, + 0x00, 0x00, 0x4d, 0x85, 0x01, 0x00, 0x00, 0x04, + 0x86, 0x01, 0x00, 0x00, 0x4d, 0x87, 0x01, 0x00, + 0x00, 0x4d, 0x88, 0x01, 0x00, 0x00, 0x4d, 0xd4, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x4b, 0xbe, + 0x4c, 0xbe, 0x4d, 0xbe, 0x4e, 0xbe, 0x4f, 0xbe, + 0x50, 0xbe, 0x51, 0xbe, 0x52, 0xbe, 0x53, 0xbe, + 0x54, 0xbe, 0x55, 0xbe, 0x56, 0xbe, 0x57, 0xbe, + 0x58, 0x26, 0x0e, 0x00, 0x4d, 0x57, 0x01, 0x00, + 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, + 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, + 0x04, 0xba, 0x01, 0x00, 0x00, 0x04, 0xbb, 0x01, + 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, 0x04, + 0xbd, 0x01, 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, + 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, 0x04, 0xc0, + 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, + 0x04, 0xc2, 0x01, 0x00, 0x00, 0x04, 0xc3, 0x01, + 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, 0x26, + 0x0e, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, + 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, + 0x01, 0x00, 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, + 0x04, 0xbc, 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, + 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, + 0xbf, 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, + 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, 0x04, 0xc2, + 0x01, 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, + 0x04, 0xc4, 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x57, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, + 0x80, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xc5, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x57, 0x01, 0x00, 0x00, 0x04, + 0xc5, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x83, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x84, 0x01, 0x00, 0x00, 0x4d, 0x85, 0x01, 0x00, + 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x4d, 0x87, + 0x01, 0x00, 0x00, 0x4d, 0x88, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x59, 0xbe, 0x5a, 0xbe, 0x5b, 0xbe, 0x5c, 0xbe, + 0x5d, 0xbe, 0x5e, 0xbe, 0x5f, 0xbe, 0x60, 0xbe, + 0x61, 0xbe, 0x62, 0xbe, 0x63, 0xbe, 0x64, 0x26, + 0x0c, 0x00, 0x4d, 0x57, 0x01, 0x00, 0x00, 0x04, + 0xc6, 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, + 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, 0xc9, + 0x01, 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, + 0x04, 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, 0x01, + 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, 0x04, + 0xce, 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, + 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, 0xd1, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, 0x00, + 0x04, 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, 0x01, + 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, 0x04, + 0xca, 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, + 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, + 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, + 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, 0x01, + 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x81, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xd2, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x57, 0x01, 0x00, + 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd2, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x83, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x84, 0x01, 0x00, 0x00, 0x4d, 0x85, + 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, + 0x4d, 0x87, 0x01, 0x00, 0x00, 0x4d, 0x88, 0x01, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x65, 0xbe, 0x66, 0xbe, 0x67, 0xbe, + 0x68, 0xbe, 0x69, 0xbe, 0x6a, 0xbe, 0x6b, 0xbe, + 0x6c, 0xbe, 0x6d, 0xbe, 0x6e, 0xbe, 0x6f, 0xbe, + 0x70, 0x26, 0x0c, 0x00, 0x4d, 0x57, 0x01, 0x00, + 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, + 0x01, 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, + 0x04, 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, + 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, + 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, + 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, + 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, + 0x04, 0xde, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xdf, 0x01, + 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, + 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, + 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, + 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, + 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, + 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, + 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x81, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xeb, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x57, + 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xeb, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x83, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x84, 0x01, 0x00, 0x00, + 0x4d, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, + 0x00, 0x00, 0x4d, 0x87, 0x01, 0x00, 0x00, 0x4d, + 0x88, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x71, 0xbe, 0x72, 0xbe, + 0x73, 0xbe, 0x74, 0xbe, 0x75, 0xbe, 0x76, 0xbe, + 0x77, 0xbe, 0x78, 0xbe, 0x79, 0xbe, 0x7a, 0xbe, + 0x7b, 0xbe, 0x7c, 0x26, 0x0c, 0x00, 0x4d, 0x57, + 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, + 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, 0xd5, 0x01, + 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, 0x04, + 0xd7, 0x01, 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, + 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, + 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, + 0x04, 0xdc, 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, + 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xdf, 0x01, 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, + 0x00, 0x04, 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, + 0x01, 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, + 0x04, 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, + 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, + 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, + 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xeb, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x57, 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x83, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x84, 0x01, + 0x00, 0x00, 0x4d, 0x85, 0x01, 0x00, 0x00, 0x04, + 0x86, 0x01, 0x00, 0x00, 0x4d, 0x87, 0x01, 0x00, + 0x00, 0x4d, 0x88, 0x01, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x81, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xec, + 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, + 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, + 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, + 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, + 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, + 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, + 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, + 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, + 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, + 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, 0xfc, + 0x01, 0x00, 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, + 0x04, 0xfe, 0x01, 0x00, 0x00, 0x04, 0xff, 0x01, + 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x04, + 0x01, 0x02, 0x00, 0x00, 0x04, 0x02, 0x02, 0x00, + 0x00, 0x04, 0x03, 0x02, 0x00, 0x00, 0x04, 0x04, + 0x02, 0x00, 0x00, 0x04, 0x05, 0x02, 0x00, 0x00, + 0x04, 0x06, 0x02, 0x00, 0x00, 0x04, 0x07, 0x02, + 0x00, 0x00, 0x04, 0x08, 0x02, 0x00, 0x00, 0x04, + 0x09, 0x02, 0x00, 0x00, 0x04, 0x0a, 0x02, 0x00, + 0x00, 0x04, 0x0b, 0x02, 0x00, 0x00, 0x26, 0x20, + 0x00, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x20, + 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, + 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, + 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, + 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, + 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x24, + 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, + 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, + 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, + 0x13, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, + 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x28, + 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, + 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, + 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, + 0x17, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, + 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x2c, + 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, + 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, + 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, + 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, + 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x30, + 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, + 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, + 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, + 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, + 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x34, + 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, + 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, + 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, + 0x23, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, + 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x38, + 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, + 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, + 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, + 0x27, 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, + 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x3c, + 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, + 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, + 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, + 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, + 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x40, + 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, + 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, + 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, + 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, + 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x44, + 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, + 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, + 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, + 0x33, 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, + 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x48, + 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, + 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, + 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, + 0x37, 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, + 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x4c, + 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, + 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, + 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, + 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, + 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x50, + 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, + 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, + 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, + 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, + 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x54, + 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, + 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, + 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, + 0x43, 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, + 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x58, + 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, + 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, + 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, + 0x47, 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, + 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x5c, + 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, + 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, + 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, + 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, + 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x60, + 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, + 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, + 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, + 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, + 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x64, + 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, + 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, + 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, + 0x53, 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, + 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x68, + 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, + 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, + 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, + 0x57, 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, + 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x6c, + 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, + 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, + 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, + 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, + 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x70, + 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, + 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, + 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, + 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, + 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x74, + 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, + 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, + 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, + 0x63, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, + 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x78, + 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, + 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, + 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, + 0x67, 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, + 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x7c, + 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, + 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, + 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, + 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, + 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x80, + 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, + 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, + 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, + 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, + 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x84, + 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, + 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, + 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, + 0x73, 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, + 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x88, + 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, + 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, + 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, + 0x77, 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, + 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x8c, + 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, + 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, + 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, + 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, + 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x90, + 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, + 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, + 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, + 0x7f, 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, + 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0x94, + 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, + 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, + 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, + 0x83, 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, + 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0x98, + 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, + 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, + 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, + 0x87, 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, + 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0x9c, + 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, + 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, + 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, + 0x8b, 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, + 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xa0, + 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, + 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, + 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, + 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, + 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xa4, + 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, + 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, + 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, + 0x93, 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, + 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xa8, + 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, + 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, + 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, + 0x97, 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, + 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xac, + 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, + 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, + 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, + 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, + 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xb0, + 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, + 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, + 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, + 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, + 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xb4, + 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, + 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, + 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, + 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, + 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xb8, + 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, + 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, + 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, + 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, + 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xbc, + 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, + 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, + 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, + 0xab, 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, + 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xc0, + 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, + 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, + 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, + 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, + 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xc4, + 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, + 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, + 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, + 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, + 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xc8, + 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, + 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, + 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, + 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, + 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xcc, + 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, + 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, + 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, + 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, + 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xd0, + 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, + 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, + 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, + 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, + 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xd4, + 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, + 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, + 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, + 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, + 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, + 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, + 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x80, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, + 0xcb, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x80, 0x04, 0xcc, 0x02, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x80, 0x04, 0xcd, 0x02, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xce, 0x02, + 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, + 0xcf, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x80, 0x04, 0xd0, 0x02, 0x00, 0x00, 0x4d, 0xe4, + 0x00, 0x00, 0x80, 0x04, 0xd1, 0x02, 0x00, 0x00, + 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0xd2, 0x02, + 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, + 0xd3, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x80, 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x80, 0x04, 0xd4, 0x02, 0x00, 0x00, + 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0xd5, 0x02, + 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, + 0x03, 0x01, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x80, 0x4d, 0x57, 0x01, 0x00, 0x00, 0x04, 0xec, + 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, + 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, + 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, + 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, + 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, + 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, + 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, + 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, + 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, + 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, 0xfc, + 0x01, 0x00, 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, + 0x04, 0xfe, 0x01, 0x00, 0x00, 0x04, 0xff, 0x01, + 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x04, + 0x01, 0x02, 0x00, 0x00, 0x04, 0x02, 0x02, 0x00, + 0x00, 0x04, 0x03, 0x02, 0x00, 0x00, 0x04, 0x04, + 0x02, 0x00, 0x00, 0x04, 0x05, 0x02, 0x00, 0x00, + 0x04, 0x06, 0x02, 0x00, 0x00, 0x04, 0x07, 0x02, + 0x00, 0x00, 0x04, 0x08, 0x02, 0x00, 0x00, 0x04, + 0x09, 0x02, 0x00, 0x00, 0x04, 0x0a, 0x02, 0x00, + 0x00, 0x04, 0x0b, 0x02, 0x00, 0x00, 0x26, 0x20, + 0x00, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x20, + 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, + 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, + 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, + 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, + 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x24, + 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, + 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, + 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, + 0x13, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, + 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x28, + 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, + 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, + 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, + 0x17, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, + 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x2c, + 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, + 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, + 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, + 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, + 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x30, + 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, + 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, + 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, + 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, + 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x34, + 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, + 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, + 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, + 0x23, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, + 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x38, + 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, + 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, + 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, + 0x27, 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, + 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x3c, + 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, + 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, + 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, + 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, + 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x40, + 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, + 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, + 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, + 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, + 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x44, + 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, + 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, + 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, + 0x33, 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, + 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x48, + 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, + 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, + 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, + 0x37, 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, + 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x4c, + 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, + 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, + 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, + 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, + 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x50, + 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, + 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, + 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, + 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, + 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x54, + 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, + 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, + 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, + 0x43, 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, + 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x58, + 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, + 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, + 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, + 0x47, 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, + 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x5c, + 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, + 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, + 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, + 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, + 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x60, + 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, + 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, + 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, + 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, + 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x64, + 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, + 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, + 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, + 0x53, 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, + 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x68, + 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, + 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, + 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, + 0x57, 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, + 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x6c, + 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, + 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, + 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, + 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, + 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x70, + 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, + 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, + 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, + 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, + 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x74, + 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, + 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, + 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, + 0x63, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, + 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x78, + 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, + 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, + 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, + 0x67, 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, + 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x7c, + 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, + 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, + 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, + 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, + 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x80, + 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, + 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, + 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, + 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, + 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x84, + 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, + 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, + 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, + 0x73, 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, + 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x88, + 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, + 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, + 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, + 0x77, 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, + 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x8c, + 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, + 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, + 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, + 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, + 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x90, + 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, + 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, + 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, + 0x7f, 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, + 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0x94, + 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, + 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, + 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, + 0x83, 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, + 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0x98, + 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, + 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, + 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, + 0x87, 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, + 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0x9c, + 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, + 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, + 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, + 0x8b, 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, + 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xa0, + 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, + 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, + 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, + 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, + 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xa4, + 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, + 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, + 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, + 0x93, 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, + 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xa8, + 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, + 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, + 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, + 0x97, 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, + 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xac, + 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, + 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, + 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, + 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, + 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xb0, + 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, + 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, + 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, + 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, + 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xb4, + 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, + 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, + 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, + 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, + 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xb8, + 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, + 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, + 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, + 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, + 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xbc, + 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, + 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, + 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, + 0xab, 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, + 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xc0, + 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, + 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, + 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, + 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, + 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xc4, + 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, + 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, + 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, + 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, + 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xc8, + 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, + 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, + 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, + 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, + 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xcc, + 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, + 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, + 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, + 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, + 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xd0, + 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, + 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, + 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, + 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, + 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xd4, + 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, + 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, + 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, + 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, + 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, + 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, + 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x80, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, + 0xcb, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x80, 0x04, 0xcc, 0x02, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x80, 0x04, 0xcd, 0x02, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xce, 0x02, + 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, + 0xcf, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x80, 0x04, 0xd0, 0x02, 0x00, 0x00, 0x4d, 0xe4, + 0x00, 0x00, 0x80, 0x04, 0xd1, 0x02, 0x00, 0x00, + 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0xd2, 0x02, + 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, + 0xd3, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x80, 0x04, 0xd6, 0x02, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x80, 0x04, 0xd7, 0x02, 0x00, 0x00, + 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0xd8, 0x02, + 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, + 0xd9, 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x80, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xec, + 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, + 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, + 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, + 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, + 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, + 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, + 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, + 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, + 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, + 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, 0xfc, + 0x01, 0x00, 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, + 0x04, 0xfe, 0x01, 0x00, 0x00, 0x04, 0xff, 0x01, + 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x04, + 0x01, 0x02, 0x00, 0x00, 0x04, 0x02, 0x02, 0x00, + 0x00, 0x04, 0x03, 0x02, 0x00, 0x00, 0x04, 0x04, + 0x02, 0x00, 0x00, 0x04, 0x05, 0x02, 0x00, 0x00, + 0x04, 0x06, 0x02, 0x00, 0x00, 0x04, 0x07, 0x02, + 0x00, 0x00, 0x04, 0x08, 0x02, 0x00, 0x00, 0x04, + 0x09, 0x02, 0x00, 0x00, 0x04, 0x0a, 0x02, 0x00, + 0x00, 0x04, 0x0b, 0x02, 0x00, 0x00, 0x26, 0x20, + 0x00, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x20, + 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, + 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, + 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, + 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, + 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x24, + 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, + 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, + 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, + 0x13, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, + 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x28, + 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, + 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, + 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, + 0x17, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, + 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x2c, + 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, + 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, + 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, + 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, + 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x30, + 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, + 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, + 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, + 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, + 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x34, + 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, + 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, + 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, + 0x23, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, + 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x38, + 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, + 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, + 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, + 0x27, 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, + 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x3c, + 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, + 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, + 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, + 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, + 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x40, + 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, + 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, + 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, + 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, + 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x44, + 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, + 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, + 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, + 0x33, 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, + 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x48, + 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, + 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, + 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, + 0x37, 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, + 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x4c, + 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, + 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, + 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, + 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, + 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x50, + 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, + 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, + 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, + 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, + 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x54, + 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, + 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, + 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, + 0x43, 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, + 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x58, + 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, + 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, + 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, + 0x47, 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, + 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x5c, + 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, + 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, + 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, + 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, + 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x60, + 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, + 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, + 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, + 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, + 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x64, + 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, + 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, + 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, + 0x53, 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, + 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x68, + 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, + 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, + 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, + 0x57, 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, + 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x6c, + 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, + 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, + 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, + 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, + 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x70, + 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, + 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, + 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, + 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, + 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x74, + 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, + 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, + 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, + 0x63, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, + 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x78, + 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, + 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, + 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, + 0x67, 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, + 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x7c, + 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, + 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, + 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, + 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, + 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x80, + 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, + 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, + 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, + 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, + 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x84, + 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, + 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, + 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, + 0x73, 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, + 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x88, + 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, + 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, + 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, + 0x77, 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, + 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x8c, + 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, + 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, + 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, + 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, + 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x90, + 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, + 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, + 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, + 0x7f, 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, + 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0x94, + 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, + 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, + 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, + 0x83, 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, + 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0x98, + 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, + 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, + 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, + 0x87, 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, + 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0x9c, + 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, + 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, + 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, + 0x8b, 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, + 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xa0, + 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, + 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, + 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, + 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, + 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xa4, + 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, + 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, + 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, + 0x93, 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, + 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xa8, + 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, + 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, + 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, + 0x97, 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, + 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xac, + 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, + 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, + 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, + 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, + 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xb0, + 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, + 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, + 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, + 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, + 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xb4, + 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, + 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, + 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, + 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, + 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xb8, + 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, + 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, + 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, + 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, + 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xbc, + 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, + 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, + 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, + 0xab, 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, + 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xc0, + 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, + 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, + 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, + 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, + 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xc4, + 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, + 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, + 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, + 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, + 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xc8, + 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, + 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, + 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, + 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, + 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xcc, + 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, + 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, + 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, + 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, + 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xd0, + 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, + 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, + 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, + 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, + 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xd4, + 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, + 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, + 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, + 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, + 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, + 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, + 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x80, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, + 0xcb, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x80, 0x04, 0xcc, 0x02, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x80, 0x04, 0xcd, 0x02, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xce, 0x02, + 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, + 0xcf, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x80, 0x04, 0xd0, 0x02, 0x00, 0x00, 0x4d, 0xe4, + 0x00, 0x00, 0x80, 0x04, 0xd1, 0x02, 0x00, 0x00, + 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0xd2, 0x02, + 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, + 0xd3, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x80, 0x04, 0xd6, 0x02, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x80, 0x04, 0xd7, 0x02, 0x00, 0x00, + 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0xd8, 0x02, + 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, + 0xd9, 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x80, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x83, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x84, 0x01, 0x00, + 0x00, 0x4d, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, + 0x01, 0x00, 0x00, 0x4d, 0x87, 0x01, 0x00, 0x00, + 0x4d, 0x88, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x7d, 0xbe, 0x7e, + 0xbe, 0x7f, 0xbe, 0x80, 0xbe, 0x81, 0xbe, 0x82, + 0xbe, 0x83, 0xbe, 0x84, 0xbe, 0x85, 0xbe, 0x86, + 0xbe, 0x87, 0xbe, 0x88, 0x26, 0x0c, 0x00, 0x4d, + 0x57, 0x01, 0x00, 0x00, 0x04, 0xda, 0x02, 0x00, + 0x00, 0x04, 0xdb, 0x02, 0x00, 0x00, 0x04, 0xdc, + 0x02, 0x00, 0x00, 0x04, 0xdd, 0x02, 0x00, 0x00, + 0x04, 0xde, 0x02, 0x00, 0x00, 0x04, 0xdf, 0x02, + 0x00, 0x00, 0x04, 0xe0, 0x02, 0x00, 0x00, 0x04, + 0xe1, 0x02, 0x00, 0x00, 0x04, 0xe2, 0x02, 0x00, + 0x00, 0x04, 0xe3, 0x02, 0x00, 0x00, 0x04, 0xe4, + 0x02, 0x00, 0x00, 0x04, 0xe5, 0x02, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xda, 0x02, 0x00, 0x00, 0x04, 0xdb, 0x02, + 0x00, 0x00, 0x04, 0xdc, 0x02, 0x00, 0x00, 0x04, + 0xdd, 0x02, 0x00, 0x00, 0x04, 0xde, 0x02, 0x00, + 0x00, 0x04, 0xdf, 0x02, 0x00, 0x00, 0x04, 0xe0, + 0x02, 0x00, 0x00, 0x04, 0xe1, 0x02, 0x00, 0x00, + 0x04, 0xe2, 0x02, 0x00, 0x00, 0x04, 0xe3, 0x02, + 0x00, 0x00, 0x04, 0xe4, 0x02, 0x00, 0x00, 0x04, + 0xe5, 0x02, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x57, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, + 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xe6, 0x02, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x57, 0x01, 0x00, 0x00, 0x04, 0xe6, + 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xe6, 0x02, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x83, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x84, + 0x01, 0x00, 0x00, 0x4d, 0x85, 0x01, 0x00, 0x00, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x4d, 0x87, 0x01, + 0x00, 0x00, 0x4d, 0x88, 0x01, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xe7, 0x02, 0x00, 0x00, 0x04, 0xe8, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x57, 0x01, 0x00, + 0x00, 0x04, 0xe7, 0x02, 0x00, 0x00, 0x04, 0xe8, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xe7, 0x02, 0x00, 0x00, + 0x04, 0xe8, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x83, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x84, 0x01, 0x00, 0x00, + 0x4d, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, + 0x00, 0x00, 0x4d, 0x87, 0x01, 0x00, 0x00, 0x4d, + 0x88, 0x01, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x00, 0x4d, 0xe9, 0x02, 0x00, 0x00, 0x4d, 0xea, + 0x02, 0x00, 0x00, 0x0b, 0x04, 0xeb, 0x02, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xec, 0x02, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0xed, 0x02, 0x00, 0x00, + 0x4d, 0xee, 0x02, 0x00, 0x00, 0x04, 0xef, 0x02, + 0x00, 0x00, 0x4d, 0xf0, 0x02, 0x00, 0x00, 0x4d, + 0xf1, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xf2, 0x02, + 0x00, 0x00, 0x4d, 0xee, 0x02, 0x00, 0x00, 0x04, + 0xf3, 0x02, 0x00, 0x00, 0x4d, 0xf0, 0x02, 0x00, + 0x00, 0x4d, 0xf4, 0x02, 0x00, 0x00, 0x0b, 0x04, + 0xf5, 0x02, 0x00, 0x00, 0x4d, 0xee, 0x02, 0x00, + 0x00, 0x04, 0xf6, 0x02, 0x00, 0x00, 0x4d, 0xf0, + 0x02, 0x00, 0x00, 0x4d, 0xf7, 0x02, 0x00, 0x00, + 0x4d, 0xf8, 0x02, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0xf9, 0x02, 0x00, 0x00, 0x4d, 0xf1, 0x02, 0x00, + 0x00, 0x04, 0xfa, 0x02, 0x00, 0x00, 0x4d, 0xfb, + 0x02, 0x00, 0x00, 0x04, 0xfc, 0x02, 0x00, 0x00, + 0x4d, 0xfd, 0x02, 0x00, 0x00, 0x04, 0xfe, 0x02, + 0x00, 0x00, 0x4d, 0xff, 0x02, 0x00, 0x00, 0x04, + 0x00, 0x03, 0x00, 0x00, 0x4d, 0x01, 0x03, 0x00, + 0x00, 0x04, 0x02, 0x03, 0x00, 0x00, 0x4d, 0x03, + 0x03, 0x00, 0x00, 0x04, 0x04, 0x03, 0x00, 0x00, + 0x4d, 0x05, 0x03, 0x00, 0x00, 0x4d, 0x06, 0x03, + 0x00, 0x00, 0x0b, 0x04, 0xf9, 0x02, 0x00, 0x00, + 0x4d, 0xf1, 0x02, 0x00, 0x00, 0x04, 0xfa, 0x02, + 0x00, 0x00, 0x4d, 0xfb, 0x02, 0x00, 0x00, 0x04, + 0xfc, 0x02, 0x00, 0x00, 0x4d, 0xfd, 0x02, 0x00, + 0x00, 0x04, 0xfe, 0x02, 0x00, 0x00, 0x4d, 0xff, + 0x02, 0x00, 0x00, 0x04, 0x00, 0x03, 0x00, 0x00, + 0x4d, 0x01, 0x03, 0x00, 0x00, 0x04, 0x02, 0x03, + 0x00, 0x00, 0x4d, 0x03, 0x03, 0x00, 0x00, 0x04, + 0x04, 0x03, 0x00, 0x00, 0x4d, 0x05, 0x03, 0x00, + 0x00, 0x4d, 0xeb, 0x02, 0x00, 0x00, 0x4d, 0x07, + 0x03, 0x00, 0x00, 0x0b, 0x04, 0x08, 0x03, 0x00, + 0x00, 0x4d, 0x09, 0x03, 0x00, 0x00, 0x04, 0x0a, + 0x03, 0x00, 0x00, 0x4d, 0x0b, 0x03, 0x00, 0x00, + 0x04, 0x0c, 0x03, 0x00, 0x00, 0x4d, 0x0d, 0x03, + 0x00, 0x00, 0x04, 0x0e, 0x03, 0x00, 0x00, 0x4d, + 0x0f, 0x03, 0x00, 0x00, 0x04, 0x10, 0x03, 0x00, + 0x00, 0x4d, 0x11, 0x03, 0x00, 0x00, 0x04, 0x12, + 0x03, 0x00, 0x00, 0x4d, 0x13, 0x03, 0x00, 0x00, + 0x04, 0x14, 0x03, 0x00, 0x00, 0x4d, 0x15, 0x03, + 0x00, 0x00, 0x04, 0x16, 0x03, 0x00, 0x00, 0x4d, + 0x17, 0x03, 0x00, 0x00, 0x04, 0x18, 0x03, 0x00, + 0x00, 0x4d, 0x19, 0x03, 0x00, 0x00, 0x04, 0x1a, + 0x03, 0x00, 0x00, 0x4d, 0x1b, 0x03, 0x00, 0x00, + 0x04, 0x1c, 0x03, 0x00, 0x00, 0x4d, 0x1d, 0x03, + 0x00, 0x00, 0x04, 0x1e, 0x03, 0x00, 0x00, 0x4d, + 0x1f, 0x03, 0x00, 0x00, 0x04, 0x20, 0x03, 0x00, + 0x00, 0x4d, 0x21, 0x03, 0x00, 0x00, 0x04, 0x22, + 0x03, 0x00, 0x00, 0x4d, 0x23, 0x03, 0x00, 0x00, + 0x04, 0x24, 0x03, 0x00, 0x00, 0x4d, 0x25, 0x03, + 0x00, 0x00, 0x04, 0x26, 0x03, 0x00, 0x00, 0x4d, + 0x27, 0x03, 0x00, 0x00, 0x04, 0x28, 0x03, 0x00, + 0x00, 0x4d, 0x29, 0x03, 0x00, 0x00, 0x04, 0x2a, + 0x03, 0x00, 0x00, 0x4d, 0x2b, 0x03, 0x00, 0x00, + 0x04, 0x2c, 0x03, 0x00, 0x00, 0x4d, 0x2d, 0x03, + 0x00, 0x00, 0x04, 0x2e, 0x03, 0x00, 0x00, 0x4d, + 0x2f, 0x03, 0x00, 0x00, 0x04, 0x30, 0x03, 0x00, + 0x00, 0x4d, 0x31, 0x03, 0x00, 0x00, 0x4d, 0x32, + 0x03, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x00, + 0x24, 0x01, 0x00, 0xcc, 0x28, 0xe6, 0x0c, 0x01, + 0x00, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, + 0x31, 0x33, 0x07, 0x02, 0x37, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_ko_size = 32791; + +const uint8_t intl_ko[32791] = { + 0x01, 0xbc, 0x06, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x6b, 0x6f, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x0e, + 0x7b, 0x31, 0x7d, 0x20, 0x7b, 0x30, 0x7d, 0x0a, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, 0x65, + 0x64, 0x69, 0x75, 0x6d, 0x08, 0x66, 0x75, 0x6c, + 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x05, 0x64, + 0x00, 0x7c, 0xc7, 0x02, 0x64, 0x06, 0x63, 0x63, + 0x63, 0x02, 0x45, 0x0d, 0x64, 0x00, 0x7c, 0xc7, + 0x20, 0x00, 0x28, 0x00, 0x45, 0x00, 0x29, 0x00, + 0x04, 0x45, 0x64, 0x0f, 0x64, 0x00, 0x7c, 0xc7, + 0x20, 0x00, 0x45, 0x00, 0x45, 0x00, 0x45, 0x00, + 0x45, 0x00, 0x0a, 0x45, 0x45, 0x45, 0x45, 0x64, + 0x14, 0x28, 0x45, 0x29, 0x20, 0x61, 0x20, 0x68, + 0x3a, 0x6d, 0x6d, 0x06, 0x45, 0x68, 0x6d, 0x12, + 0x28, 0x45, 0x29, 0x20, 0x48, 0x48, 0x3a, 0x6d, + 0x6d, 0x06, 0x45, 0x48, 0x6d, 0x1a, 0x28, 0x45, + 0x29, 0x20, 0x61, 0x20, 0x68, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x08, 0x45, 0x68, 0x6d, 0x73, + 0x18, 0x28, 0x45, 0x29, 0x20, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x08, 0x45, 0x48, + 0x6d, 0x73, 0x09, 0x47, 0x00, 0x20, 0x00, 0x79, + 0x00, 0x44, 0xb1, 0x04, 0x47, 0x79, 0x11, 0x47, + 0x00, 0x20, 0x00, 0x79, 0x00, 0x44, 0xb1, 0x20, + 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x0a, + 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x17, 0x47, 0x00, + 0x20, 0x00, 0x79, 0x00, 0x44, 0xb1, 0x20, 0x00, + 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x20, 0x00, + 0x64, 0x00, 0x7c, 0xc7, 0x0c, 0x47, 0x79, 0x4d, + 0x4d, 0x4d, 0x64, 0x1f, 0x47, 0x00, 0x20, 0x00, + 0x79, 0x00, 0x44, 0xb1, 0x20, 0x00, 0x4d, 0x00, + 0x4d, 0x00, 0x4d, 0x00, 0x20, 0x00, 0x64, 0x00, + 0x7c, 0xc7, 0x20, 0x00, 0x28, 0x00, 0x45, 0x00, + 0x29, 0x00, 0x0e, 0x47, 0x79, 0x4d, 0x4d, 0x4d, + 0x45, 0x64, 0x21, 0x47, 0x00, 0x20, 0x00, 0x79, + 0x00, 0x44, 0xb1, 0x20, 0x00, 0x4d, 0x00, 0x4d, + 0x00, 0x4d, 0x00, 0x20, 0x00, 0x64, 0x00, 0x7c, + 0xc7, 0x20, 0x00, 0x45, 0x00, 0x45, 0x00, 0x45, + 0x00, 0x45, 0x00, 0x14, 0x47, 0x79, 0x4d, 0x4d, + 0x4d, 0x45, 0x45, 0x45, 0x45, 0x64, 0x09, 0x61, + 0x00, 0x20, 0x00, 0x68, 0x00, 0xdc, 0xc2, 0x02, + 0x68, 0x05, 0x48, 0x00, 0xdc, 0xc2, 0x02, 0x48, + 0x10, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x0c, 0x48, 0x48, 0x6d, 0x6d, 0x73, 0x73, + 0x0c, 0x61, 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x04, + 0x68, 0x6d, 0x0a, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x04, 0x48, 0x6d, 0x12, 0x61, 0x20, 0x68, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x06, 0x68, 0x6d, + 0x73, 0x11, 0x48, 0x00, 0xdc, 0xc2, 0x20, 0x00, + 0x6d, 0x00, 0x84, 0xbd, 0x20, 0x00, 0x73, 0x00, + 0x08, 0xcd, 0x06, 0x48, 0x6d, 0x73, 0x16, 0x61, + 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x76, 0x08, 0x68, 0x6d, 0x73, 0x76, 0x15, + 0x48, 0x00, 0xdc, 0xc2, 0x20, 0x00, 0x6d, 0x00, + 0x84, 0xbd, 0x20, 0x00, 0x73, 0x00, 0x08, 0xcd, + 0x20, 0x00, 0x76, 0x00, 0x08, 0x48, 0x6d, 0x73, + 0x76, 0x10, 0x61, 0x20, 0x68, 0x3a, 0x6d, 0x6d, + 0x20, 0x76, 0x06, 0x68, 0x6d, 0x76, 0x0e, 0x48, + 0x48, 0x3a, 0x6d, 0x6d, 0x20, 0x76, 0x06, 0x48, + 0x6d, 0x76, 0x05, 0x4d, 0x00, 0xd4, 0xc6, 0x02, + 0x4d, 0x0a, 0x4d, 0x2e, 0x20, 0x64, 0x2e, 0x04, + 0x4d, 0x64, 0x12, 0x4d, 0x2e, 0x20, 0x64, 0x2e, + 0x20, 0x28, 0x45, 0x29, 0x06, 0x4d, 0x45, 0x64, + 0x14, 0x4d, 0x2e, 0x20, 0x64, 0x2e, 0x20, 0x45, + 0x45, 0x45, 0x45, 0x0c, 0x4d, 0x45, 0x45, 0x45, + 0x45, 0x64, 0x06, 0x4c, 0x4c, 0x4c, 0x06, 0x4d, + 0x4d, 0x4d, 0x0d, 0x4d, 0x00, 0x4d, 0x00, 0x4d, + 0x00, 0x20, 0x00, 0x64, 0x00, 0x7c, 0xc7, 0x08, + 0x4d, 0x4d, 0x4d, 0x64, 0x15, 0x4d, 0x00, 0x4d, + 0x00, 0x4d, 0x00, 0x20, 0x00, 0x64, 0x00, 0x7c, + 0xc7, 0x20, 0x00, 0x28, 0x00, 0x45, 0x00, 0x29, + 0x00, 0x0a, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x17, + 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x20, 0x00, + 0x64, 0x00, 0x7c, 0xc7, 0x20, 0x00, 0x45, 0x00, + 0x45, 0x00, 0x45, 0x00, 0x45, 0x00, 0x10, 0x4d, + 0x4d, 0x4d, 0x45, 0x45, 0x45, 0x45, 0x64, 0x0f, + 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, + 0x20, 0x00, 0x64, 0x00, 0x7c, 0xc7, 0x0a, 0x4d, + 0x4d, 0x4d, 0x4d, 0x64, 0x0a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x08, 0x6d, 0x6d, 0x73, 0x73, 0x04, + 0x6d, 0x73, 0x05, 0x79, 0x00, 0x44, 0xb1, 0x02, + 0x79, 0x0a, 0x79, 0x2e, 0x20, 0x4d, 0x2e, 0x04, + 0x79, 0x4d, 0x10, 0x79, 0x2e, 0x20, 0x4d, 0x2e, + 0x20, 0x64, 0x2e, 0x06, 0x79, 0x4d, 0x64, 0x18, + 0x79, 0x2e, 0x20, 0x4d, 0x2e, 0x20, 0x64, 0x2e, + 0x20, 0x28, 0x45, 0x29, 0x08, 0x79, 0x4d, 0x45, + 0x64, 0x1a, 0x79, 0x2e, 0x20, 0x4d, 0x2e, 0x20, + 0x64, 0x2e, 0x20, 0x45, 0x45, 0x45, 0x45, 0x0e, + 0x79, 0x4d, 0x45, 0x45, 0x45, 0x45, 0x64, 0x06, + 0x79, 0x4d, 0x4d, 0x0d, 0x79, 0x00, 0x44, 0xb1, + 0x20, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, + 0x08, 0x79, 0x4d, 0x4d, 0x4d, 0x13, 0x79, 0x00, + 0x44, 0xb1, 0x20, 0x00, 0x4d, 0x00, 0x4d, 0x00, + 0x4d, 0x00, 0x20, 0x00, 0x64, 0x00, 0x7c, 0xc7, + 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x1b, 0x79, + 0x00, 0x44, 0xb1, 0x20, 0x00, 0x4d, 0x00, 0x4d, + 0x00, 0x4d, 0x00, 0x20, 0x00, 0x64, 0x00, 0x7c, + 0xc7, 0x20, 0x00, 0x28, 0x00, 0x45, 0x00, 0x29, + 0x00, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, + 0x1d, 0x79, 0x00, 0x44, 0xb1, 0x20, 0x00, 0x4d, + 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x20, 0x00, 0x64, + 0x00, 0x7c, 0xc7, 0x20, 0x00, 0x45, 0x00, 0x45, + 0x00, 0x45, 0x00, 0x45, 0x00, 0x12, 0x79, 0x4d, + 0x4d, 0x4d, 0x45, 0x45, 0x45, 0x45, 0x64, 0x0f, + 0x79, 0x00, 0x44, 0xb1, 0x20, 0x00, 0x4d, 0x00, + 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x0a, 0x79, + 0x4d, 0x4d, 0x4d, 0x4d, 0x0d, 0x79, 0x00, 0x44, + 0xb1, 0x20, 0x00, 0x51, 0x00, 0x51, 0x00, 0x51, + 0x00, 0x08, 0x79, 0x51, 0x51, 0x51, 0x0f, 0x79, + 0x00, 0x44, 0xb1, 0x20, 0x00, 0x51, 0x00, 0x51, + 0x00, 0x51, 0x00, 0x51, 0x00, 0x0a, 0x79, 0x51, + 0x51, 0x51, 0x51, 0x20, 0x61, 0x76, 0x61, 0x69, + 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x73, 0x1b, 0x79, 0x00, 0x44, + 0xb1, 0x20, 0x00, 0x4d, 0x00, 0xd4, 0xc6, 0x20, + 0x00, 0x64, 0x00, 0x7c, 0xc7, 0x20, 0x00, 0x45, + 0x00, 0x45, 0x00, 0x45, 0x00, 0x45, 0x00, 0x14, + 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x45, 0x45, 0x45, + 0x45, 0x64, 0x11, 0x79, 0x00, 0x44, 0xb1, 0x20, + 0x00, 0x4d, 0x00, 0xd4, 0xc6, 0x20, 0x00, 0x64, + 0x00, 0x7c, 0xc7, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, + 0x4d, 0x64, 0x12, 0x79, 0x79, 0x2e, 0x20, 0x4d, + 0x2e, 0x20, 0x64, 0x2e, 0x16, 0x64, 0x61, 0x74, + 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, + 0x1f, 0x61, 0x00, 0x20, 0x00, 0x68, 0x00, 0xdc, + 0xc2, 0x20, 0x00, 0x6d, 0x00, 0x84, 0xbd, 0x20, + 0x00, 0x73, 0x00, 0x08, 0xcd, 0x20, 0x00, 0x7a, + 0x00, 0x7a, 0x00, 0x7a, 0x00, 0x7a, 0x00, 0x12, + 0x68, 0x6d, 0x6d, 0x73, 0x73, 0x7a, 0x7a, 0x7a, + 0x7a, 0x19, 0x61, 0x00, 0x20, 0x00, 0x68, 0x00, + 0xdc, 0xc2, 0x20, 0x00, 0x6d, 0x00, 0x84, 0xbd, + 0x20, 0x00, 0x73, 0x00, 0x08, 0xcd, 0x20, 0x00, + 0x7a, 0x00, 0x08, 0x68, 0x6d, 0x73, 0x7a, 0x16, + 0x74, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x73, 0x0e, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x73, 0x05, 0x31, 0x00, 0xd4, 0xc6, + 0x05, 0x32, 0x00, 0xd4, 0xc6, 0x05, 0x33, 0x00, + 0xd4, 0xc6, 0x05, 0x34, 0x00, 0xd4, 0xc6, 0x05, + 0x35, 0x00, 0xd4, 0xc6, 0x05, 0x36, 0x00, 0xd4, + 0xc6, 0x05, 0x37, 0x00, 0xd4, 0xc6, 0x05, 0x38, + 0x00, 0xd4, 0xc6, 0x05, 0x39, 0x00, 0xd4, 0xc6, + 0x07, 0x31, 0x00, 0x30, 0x00, 0xd4, 0xc6, 0x07, + 0x31, 0x00, 0x31, 0x00, 0xd4, 0xc6, 0x07, 0x31, + 0x00, 0x32, 0x00, 0xd4, 0xc6, 0x0c, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x0c, 0x6d, 0x6f, 0x6e, + 0x74, 0x68, 0x73, 0x03, 0x7c, 0xc7, 0x03, 0xd4, + 0xc6, 0x03, 0x54, 0xd6, 0x03, 0x18, 0xc2, 0x03, + 0xa9, 0xba, 0x03, 0x08, 0xae, 0x03, 0xa0, 0xd1, + 0x07, 0x7c, 0xc7, 0x94, 0xc6, 0x7c, 0xc7, 0x07, + 0xd4, 0xc6, 0x94, 0xc6, 0x7c, 0xc7, 0x07, 0x54, + 0xd6, 0x94, 0xc6, 0x7c, 0xc7, 0x07, 0x18, 0xc2, + 0x94, 0xc6, 0x7c, 0xc7, 0x07, 0xa9, 0xba, 0x94, + 0xc6, 0x7c, 0xc7, 0x07, 0x08, 0xae, 0x94, 0xc6, + 0x7c, 0xc7, 0x07, 0xa0, 0xd1, 0x94, 0xc6, 0x7c, + 0xc7, 0x08, 0x64, 0x61, 0x79, 0x73, 0x05, 0x88, + 0xbd, 0x30, 0xae, 0x08, 0x65, 0x72, 0x61, 0x73, + 0x05, 0x24, 0xc6, 0x04, 0xc8, 0x04, 0x61, 0x6d, + 0x05, 0x24, 0xc6, 0xc4, 0xd6, 0x04, 0x70, 0x6d, + 0x14, 0x64, 0x61, 0x79, 0x50, 0x65, 0x72, 0x69, + 0x6f, 0x64, 0x73, 0x05, 0x2c, 0xd2, 0xb8, 0xd2, + 0x07, 0x14, 0xbc, 0x14, 0xbc, 0x50, 0xd7, 0x07, + 0x58, 0xd5, 0x2c, 0xd2, 0x74, 0xb9, 0x09, 0xa4, + 0xd0, 0x7c, 0xc5, 0x50, 0xd7, 0x6c, 0xd0, 0x07, + 0x2c, 0xd2, 0x14, 0xbc, 0x50, 0xd7, 0x07, 0x54, + 0xc5, 0x6c, 0xc2, 0x74, 0xb9, 0x09, 0x14, 0xbc, + 0x7c, 0xb7, 0xc8, 0xb9, 0xb8, 0xd2, 0x0b, 0x14, + 0xbc, 0x7c, 0xb7, 0x38, 0xbb, 0xe4, 0xb2, 0x50, + 0xd7, 0x07, 0x14, 0xbc, 0xe8, 0xc0, 0xa4, 0xc2, + 0x09, 0x14, 0xbc, 0xb0, 0xc6, 0x98, 0xb0, 0x50, + 0xd7, 0x07, 0x44, 0xc5, 0x44, 0xbe, 0x0c, 0xbe, + 0x07, 0xf8, 0xbb, 0xa4, 0xc2, 0x7c, 0xb7, 0x05, + 0x98, 0xb0, 0xdc, 0xc2, 0x08, 0x45, 0x52, 0x41, + 0x30, 0x08, 0x45, 0x52, 0x41, 0x31, 0x09, 0xe4, + 0xb9, 0xa4, 0xc2, 0x90, 0xce, 0xa8, 0xb7, 0x07, + 0x4c, 0xd1, 0x10, 0xcf, 0xb8, 0xd2, 0x07, 0xe4, + 0xd5, 0xe4, 0xb2, 0x74, 0xb9, 0x09, 0xc0, 0xd0, + 0x50, 0xd7, 0xac, 0xc0, 0xa4, 0xc2, 0x05, 0x4c, + 0xd1, 0x74, 0xb9, 0x09, 0x98, 0xc5, 0x74, 0xce, + 0xf0, 0xd2, 0xb8, 0xd2, 0x09, 0xe4, 0xb9, 0x00, + 0xac, 0x44, 0xbe, 0xb8, 0xd2, 0x09, 0xf8, 0xbb, + 0x7c, 0xc5, 0xc0, 0xc9, 0x7c, 0xc5, 0x07, 0x90, + 0xac, 0xf4, 0xbc, 0xb8, 0xd2, 0x05, 0xc8, 0xc0, + 0x24, 0xb1, 0x05, 0x68, 0xd5, 0x08, 0xb8, 0x07, + 0xb4, 0xb0, 0x58, 0xd5, 0x38, 0xc1, 0x07, 0x0c, + 0xd3, 0x6c, 0xad, 0xe8, 0xb9, 0x06, 0x4d, 0x30, + 0x31, 0x06, 0x4d, 0x30, 0x32, 0x06, 0x4d, 0x30, + 0x33, 0x06, 0x4d, 0x30, 0x34, 0x06, 0x4d, 0x30, + 0x35, 0x06, 0x4d, 0x30, 0x36, 0x06, 0x4d, 0x30, + 0x37, 0x06, 0x4d, 0x30, 0x38, 0x06, 0x4d, 0x30, + 0x39, 0x06, 0x4d, 0x31, 0x30, 0x06, 0x4d, 0x31, + 0x31, 0x06, 0x4d, 0x31, 0x32, 0x04, 0x42, 0x43, + 0x04, 0x41, 0x44, 0x06, 0x42, 0x43, 0x45, 0x04, + 0x43, 0x45, 0x07, 0x30, 0xae, 0xd0, 0xc6, 0x04, + 0xc8, 0x05, 0x1c, 0xc1, 0x30, 0xae, 0x09, 0x14, + 0xb5, 0xa4, 0xc2, 0xac, 0xb9, 0xd4, 0xc6, 0x09, + 0xd0, 0xb9, 0x00, 0xcf, 0xa4, 0xc2, 0xd4, 0xc6, + 0x09, 0x30, 0xae, 0xac, 0xc2, 0x74, 0xb9, 0xd4, + 0xc6, 0x07, 0x70, 0xb3, 0xb3, 0xbc, 0xd4, 0xc6, + 0x07, 0xa4, 0xc2, 0x27, 0xbc, 0xd4, 0xc6, 0x0b, + 0x44, 0xc5, 0xec, 0xb2, 0xd4, 0xc6, 0x20, 0x00, + 0x31, 0x00, 0x07, 0x44, 0xc5, 0xec, 0xb2, 0xd4, + 0xc6, 0x07, 0xdb, 0xb2, 0xb0, 0xc0, 0xd4, 0xc6, + 0x09, 0x74, 0xc7, 0x7c, 0xc5, 0x74, 0xb9, 0xd4, + 0xc6, 0x07, 0xdc, 0xc2, 0x44, 0xc6, 0xd4, 0xc6, + 0x09, 0xf4, 0xb2, 0x34, 0xbb, 0x74, 0xb9, 0xd4, + 0xc6, 0x05, 0x55, 0xc5, 0xd4, 0xc6, 0x07, 0xd8, + 0xc5, 0xf0, 0xb8, 0xd4, 0xc6, 0x0b, 0x44, 0xc5, + 0xec, 0xb2, 0xd4, 0xc6, 0x20, 0x00, 0x32, 0x00, + 0x04, 0x41, 0x4d, 0x0e, 0x43, 0x68, 0x61, 0x69, + 0x74, 0x72, 0x61, 0x10, 0x56, 0x61, 0x69, 0x73, + 0x61, 0x6b, 0x68, 0x61, 0x10, 0x4a, 0x79, 0x61, + 0x69, 0x73, 0x74, 0x68, 0x61, 0x0c, 0x41, 0x73, + 0x61, 0x64, 0x68, 0x61, 0x0e, 0x53, 0x72, 0x61, + 0x76, 0x61, 0x6e, 0x61, 0x0c, 0x42, 0x68, 0x61, + 0x64, 0x72, 0x61, 0x0c, 0x41, 0x73, 0x76, 0x69, + 0x6e, 0x61, 0x0e, 0x4b, 0x61, 0x72, 0x74, 0x69, + 0x6b, 0x61, 0x14, 0x41, 0x67, 0x72, 0x61, 0x68, + 0x61, 0x79, 0x61, 0x6e, 0x61, 0x0a, 0x50, 0x61, + 0x75, 0x73, 0x61, 0x0a, 0x4d, 0x61, 0x67, 0x68, + 0x61, 0x10, 0x50, 0x68, 0x61, 0x6c, 0x67, 0x75, + 0x6e, 0x61, 0x08, 0x53, 0x61, 0x6b, 0x61, 0x08, + 0x4d, 0x75, 0x68, 0x2e, 0x08, 0x53, 0x61, 0x66, + 0x2e, 0x0c, 0x52, 0x61, 0x62, 0x2e, 0x20, 0x49, + 0x0e, 0x52, 0x61, 0x62, 0x2e, 0x20, 0x49, 0x49, + 0x0c, 0x4a, 0x75, 0x6d, 0x2e, 0x20, 0x49, 0x0e, + 0x4a, 0x75, 0x6d, 0x2e, 0x20, 0x49, 0x49, 0x08, + 0x52, 0x61, 0x6a, 0x2e, 0x08, 0x53, 0x68, 0x61, + 0x2e, 0x08, 0x52, 0x61, 0x6d, 0x2e, 0x0a, 0x53, + 0x68, 0x61, 0x77, 0x2e, 0x11, 0x44, 0x00, 0x68, + 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, + 0x00, 0x51, 0x00, 0x2e, 0x00, 0x11, 0x44, 0x00, + 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, + 0x2d, 0x00, 0x48, 0x00, 0x2e, 0x00, 0x07, 0x34, + 0xbb, 0x58, 0xd5, 0x8c, 0xb7, 0x07, 0xac, 0xc0, + 0x0c, 0xd3, 0x74, 0xb9, 0x0f, 0x7c, 0xb7, 0x44, + 0xbe, 0x20, 0x00, 0x4c, 0xc5, 0x20, 0x00, 0x44, + 0xc5, 0x48, 0xc6, 0x0f, 0x7c, 0xb7, 0x44, 0xbe, + 0x20, 0x00, 0x4c, 0xc5, 0x20, 0x00, 0x84, 0xc3, + 0xc8, 0xb2, 0x11, 0xfc, 0xc8, 0xc8, 0xb9, 0xe4, + 0xb2, 0x20, 0x00, 0x4c, 0xc5, 0x20, 0x00, 0x44, + 0xc5, 0x48, 0xc6, 0x11, 0xfc, 0xc8, 0xc8, 0xb9, + 0xe4, 0xb2, 0x20, 0x00, 0x4c, 0xc5, 0x20, 0x00, + 0x84, 0xc3, 0xc8, 0xb2, 0x05, 0x7c, 0xb7, 0xa1, + 0xc7, 0x07, 0x50, 0xc2, 0x44, 0xc5, 0x18, 0xbc, + 0x07, 0x7c, 0xb7, 0xc8, 0xb9, 0xe8, 0xb2, 0x05, + 0x50, 0xc2, 0x48, 0xc6, 0x0d, 0xc0, 0xb4, 0x20, + 0x00, 0x4c, 0xc5, 0x20, 0x00, 0x4c, 0xae, 0xe4, + 0xb2, 0x0d, 0xc0, 0xb4, 0x20, 0x00, 0x4c, 0xc5, + 0x20, 0x00, 0x88, 0xd7, 0x90, 0xc7, 0x04, 0x41, + 0x48, 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x36, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x36, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x36, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, + 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x1d, 0x57, 0x00, 0x61, 0x00, + 0x64, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x1f, 0x52, 0x00, 0x65, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, + 0x59, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x37, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x2d, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6d, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x2d, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x2b, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, 0x2d, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, 0x2a, 0x4a, + 0x69, 0x6e, 0x67, 0x6f, 0x2d, 0x6b, 0x65, 0x69, + 0x75, 0x6e, 0x20, 0x28, 0x37, 0x36, 0x37, 0x2d, + 0x37, 0x37, 0x30, 0x29, 0x1d, 0x48, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x38, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x1f, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x2d, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x2d, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x1f, 0x44, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1d, 0x4a, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, + 0x4b, 0x00, 0x61, 0x00, 0x6a, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1f, 0x53, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x20, 0x54, 0x65, 0x6e, 0x2d, 0x61, + 0x6e, 0x20, 0x28, 0x38, 0x35, 0x37, 0x2d, 0x38, + 0x35, 0x39, 0x29, 0x1f, 0x4a, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x21, 0x47, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x1f, 0x45, 0x00, 0x6e, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1b, 0x4c, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x1d, 0x41, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x1f, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, + 0x45, 0x00, 0x69, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, + 0x00, 0x73, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x39, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, + 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4d, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x35, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x27, 0x4a, 0x00, 0x69, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x29, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4c, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x4a, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, 0x24, 0x54, + 0x65, 0x6e, 0x2d, 0x65, 0x69, 0x20, 0x28, 0x31, + 0x31, 0x31, 0x30, 0x2d, 0x31, 0x31, 0x31, 0x33, + 0x29, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x44, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x48, 0x00, 0x65, 0x00, 0x69, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x27, 0x45, 0x00, 0x69, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x68, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, + 0x00, 0x61, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x41, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x69, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x59, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, + 0x4a, 0x00, 0x75, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x29, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x29, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, + 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x41, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x4d, + 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x27, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x75, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x29, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x29, 0x52, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x4e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x4c, 0x01, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6d, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x1f, 0x4b, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, + 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4c, + 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x74, 0x00, + 0x73, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x4d, 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x27, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x21, 0x4c, 0x01, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x21, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1f, + 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x72, 0x00, 0x65, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x62, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x27, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x48, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x65, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x41, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4d, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x02, 0x54, 0x02, 0x53, + 0x1f, 0xe4, 0xb2, 0x74, 0xc7, 0x74, 0xce, 0x20, + 0x00, 0x28, 0x00, 0x36, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, + 0x58, 0xd5, 0xe0, 0xcf, 0x58, 0xce, 0x20, 0x00, + 0x28, 0x00, 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x58, + 0xd5, 0xe0, 0xcf, 0x38, 0xd6, 0x20, 0x00, 0x28, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x32, 0x00, 0x20, + 0x00, 0x7e, 0x00, 0x20, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x1d, 0x88, 0xc2, + 0x08, 0xcd, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x20, 0x00, 0x7e, 0x00, + 0x20, 0x00, 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1f, 0xe4, 0xb2, 0x74, 0xc7, 0x38, + 0xd6, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1f, 0x8c, 0xac, 0x74, 0xc7, 0xb4, 0xc6, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x1d, 0x40, 0xc6, 0xc4, 0xb3, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, 0x20, + 0x00, 0x7e, 0x00, 0x20, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x08, 0xb8, + 0x74, 0xc7, 0xa4, 0xd0, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, 0x20, 0x00, + 0x7e, 0x00, 0x20, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x1d, 0x94, 0xc6, 0x5c, + 0xb8, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1d, 0xc4, 0xc9, 0xa4, 0xd0, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1d, 0x74, + 0xb3, 0x5c, 0xd4, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x20, 0x00, 0x7e, + 0x00, 0x20, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x74, 0xb3, 0x5c, 0xd4, + 0x78, 0xce, 0xec, 0xd3, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x20, 0x00, + 0x7e, 0x00, 0x20, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x74, 0xb3, 0x5c, + 0xd4, 0xfc, 0xc1, 0x38, 0xd6, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x20, + 0x00, 0x7e, 0x00, 0x20, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x74, 0xb3, + 0x5c, 0xd4, 0x38, 0xd6, 0xc0, 0xc9, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x74, + 0xb3, 0x5c, 0xd4, 0xc4, 0xc9, 0xe0, 0xac, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0xc4, 0xc9, 0xe0, 0xac, 0x00, 0xcf, 0x74, 0xc7, + 0xb4, 0xc6, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x20, 0x00, 0x7e, 0x00, + 0x20, 0x00, 0x37, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x1d, 0x38, 0xd6, 0xa4, 0xd0, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x29, 0x00, 0x1d, + 0x74, 0xb3, 0x24, 0xc6, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x20, 0x00, + 0x7e, 0x00, 0x20, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x1f, 0xd4, 0xc5, 0xb4, + 0xb7, 0xe0, 0xcf, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x20, 0x00, 0x7e, + 0x00, 0x20, 0x00, 0x38, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x1f, 0xe4, 0xb2, 0x74, 0xc7, + 0xc4, 0xb3, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x20, 0x00, 0x7e, 0x00, + 0x20, 0x00, 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x1d, 0xe0, 0xac, 0xcc, 0xb2, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, + 0x74, 0xb3, 0x08, 0xcd, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, 0x20, 0x00, + 0x7e, 0x00, 0x20, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1d, 0x70, 0xc8, 0x40, + 0xc6, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x1d, 0x00, 0xac, 0xfc, 0xc1, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, 0xcc, + 0xb2, 0xfc, 0xc8, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x20, 0x00, 0x7e, + 0x00, 0x20, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1f, 0xac, 0xc0, 0x74, 0xc7, + 0x54, 0xcf, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x20, 0x00, 0x7e, 0x00, + 0x20, 0x00, 0x38, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x1d, 0x74, 0xb3, 0x9c, 0xb0, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1d, + 0x70, 0xc8, 0x04, 0xac, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x39, 0x00, 0x20, 0x00, + 0x7e, 0x00, 0x20, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x1d, 0x04, 0xac, 0x50, + 0xad, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x1d, 0xcc, 0xb2, 0x98, 0xb0, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1d, 0x04, + 0xac, 0x5c, 0xd4, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x20, 0x00, 0x7e, + 0x00, 0x20, 0x00, 0x38, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x1f, 0xfc, 0xc1, 0xc0, 0xd0, + 0x74, 0xc7, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x20, 0x00, 0x7e, 0x00, + 0x20, 0x00, 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1d, 0xd4, 0xc5, 0x30, 0xae, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x29, 0x00, 0x1d, + 0xd4, 0xc5, 0x08, 0xcd, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, 0x20, 0x00, + 0x7e, 0x00, 0x20, 0x00, 0x39, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1f, 0x70, 0xc8, 0xe4, + 0xd5, 0x74, 0xc7, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x20, 0x00, 0x7e, + 0x00, 0x20, 0x00, 0x39, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x1d, 0x74, 0xb3, 0x50, 0xad, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x1f, 0x74, 0xb3, 0xb4, 0xb7, 0xe0, 0xcf, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x34, 0x00, 0x37, + 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x39, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1f, + 0x74, 0xb3, 0xa0, 0xd1, 0xe0, 0xcf, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, 0x24, + 0xc6, 0x40, 0xc6, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x20, 0x00, 0x7e, + 0x00, 0x20, 0x00, 0x39, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1d, 0xe0, 0xac, 0x38, 0xd6, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x1d, 0x48, 0xc5, 0x98, 0xb0, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, 0x20, + 0x00, 0x7e, 0x00, 0x20, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, 0x74, 0xb3, + 0x5c, 0xb8, 0xe0, 0xcf, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, 0x20, 0x00, + 0x7e, 0x00, 0x20, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x1d, 0x74, 0xb3, 0xd4, + 0xc5, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x1d, 0x70, 0xc8, 0x90, 0xac, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x74, + 0xb3, 0x90, 0xac, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x20, 0x00, 0x7e, + 0x00, 0x20, 0x00, 0x39, 0x00, 0x38, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x1f, 0xd0, 0xc5, 0x74, 0xc7, + 0x04, 0xac, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x20, 0x00, 0x7e, 0x00, + 0x20, 0x00, 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x1d, 0x04, 0xac, 0x98, 0xb0, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1f, + 0xd0, 0xc5, 0x74, 0xc7, 0xd4, 0xc5, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, 0xd0, + 0xc5, 0x74, 0xc7, 0x8c, 0xc1, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x20, + 0x00, 0x7e, 0x00, 0x20, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, 0xfc, 0xc1, + 0xb4, 0xb7, 0xe0, 0xcf, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, 0x20, 0x00, + 0x7e, 0x00, 0x20, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x1f, 0x70, 0xc8, 0xa0, + 0xd1, 0xe0, 0xcf, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x35, 0x00, 0x20, 0x00, 0x7e, + 0x00, 0x20, 0x00, 0x39, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1f, 0x70, 0xc8, 0x38, 0xd6, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x21, 0x04, 0xac, 0x54, 0xcf, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x21, 0x70, 0xc8, 0x40, 0xc6, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x20, 0x00, 0x7e, 0x00, + 0x20, 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x21, 0x04, 0xac, 0xcc, + 0xb2, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x20, 0x00, 0x7e, + 0x00, 0x20, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0xc0, 0xc9, + 0x48, 0xc5, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x20, 0x00, + 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0xcc, + 0xb9, 0xfc, 0xc8, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, 0x20, + 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x70, 0xc8, 0x90, 0xac, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x70, 0xc8, 0xb4, 0xb7, 0xe0, 0xcf, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x21, 0x70, 0xc8, 0x50, 0xd0, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x20, 0x00, 0x7e, 0x00, + 0x20, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x04, 0xac, 0xa0, + 0xd1, 0xe0, 0xcf, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x20, + 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0xd0, 0xc5, 0x74, 0xc7, 0xfc, 0xc1, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x21, 0x74, 0xb3, 0x30, 0xae, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, + 0x00, 0x33, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x23, 0xe0, 0xac, 0xe4, 0xd5, + 0x74, 0xc7, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, 0x20, 0x00, + 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0xc0, + 0xc9, 0xb4, 0xb7, 0xe0, 0xcf, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0xd4, 0xc5, 0x50, 0xd0, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x21, 0x70, 0xc8, 0x38, 0xd6, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0xfc, 0xc1, 0xb4, 0xb7, + 0xe0, 0xcf, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, 0x20, 0x00, + 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0xd0, + 0xc5, 0x74, 0xc7, 0x38, 0xd6, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x24, 0xc6, 0xa0, 0xd1, 0xe0, 0xcf, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x20, 0x00, 0x7e, 0x00, + 0x20, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x21, 0x04, 0xac, 0xc0, + 0xc9, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x20, 0x00, 0x7e, + 0x00, 0x20, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x00, 0xac, + 0x38, 0xd6, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, 0x20, 0x00, + 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0xd0, + 0xc5, 0x74, 0xc7, 0x08, 0xcd, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x70, 0xc8, 0xa0, 0xd1, 0xe0, 0xcf, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x20, 0x00, 0x7e, 0x00, + 0x20, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0xe0, 0xac, 0x40, + 0xc6, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x20, 0x00, 0x7e, + 0x00, 0x20, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x70, 0xc8, + 0xc0, 0xc9, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x20, 0x00, + 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x21, 0x00, + 0xac, 0xfc, 0xc1, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x20, + 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x74, 0xb3, 0xcc, 0xb2, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x74, 0xb3, 0xd0, 0xc5, 0x74, 0xc7, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0xd0, 0xc5, 0x74, 0xc7, + 0x50, 0xd0, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x20, 0x00, + 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x90, + 0xac, 0xd0, 0xc5, 0x74, 0xc7, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x21, 0x38, 0xd6, 0x48, 0xc5, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x21, 0x74, 0xb3, 0xc0, 0xc9, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0xe4, 0xb2, 0x74, 0xc7, + 0xc0, 0xc9, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x20, 0x00, + 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x74, + 0xb3, 0xfc, 0xc1, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x20, + 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, + 0x70, 0xc8, 0xfc, 0xc1, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x21, 0x38, 0xd6, 0xd4, 0xc5, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, + 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0xd0, 0xc5, 0x74, 0xc7, 0xc0, 0xc9, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x20, 0x00, 0x7e, 0x00, + 0x20, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x21, 0xe0, 0xac, 0xc0, + 0xc9, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x20, 0x00, 0x7e, + 0x00, 0x20, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x74, 0xb3, + 0x94, 0xc6, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x20, 0x00, + 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0xdc, + 0xad, 0x48, 0xc5, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x20, + 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0xcc, 0xb2, 0x98, 0xd3, 0x74, 0xc7, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x21, 0xdc, 0xad, 0xfc, 0xc8, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x21, 0x38, 0xd6, 0x90, 0xac, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x36, 0x00, 0x20, 0x00, 0x7e, 0x00, + 0x20, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0xe4, 0xd5, 0x74, + 0xc7, 0xc0, 0xc9, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x20, + 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0xd0, 0xc5, 0x74, 0xc7, 0xb4, 0xb7, 0xe0, 0xcf, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x20, 0x00, 0x7e, 0x00, + 0x20, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x24, 0xc6, 0x38, + 0xd6, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x20, 0x00, 0x7e, + 0x00, 0x20, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, 0x70, 0xc8, + 0x78, 0xce, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x20, 0x00, + 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0xd0, + 0xc5, 0x74, 0xc7, 0xcc, 0xb9, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x21, 0xcc, 0xb2, 0x9c, 0xb0, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x00, 0xac, 0x24, 0xc6, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x70, 0xc8, 0x48, 0xc5, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x20, 0x00, 0x7e, 0x00, + 0x20, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x21, 0x48, 0xc5, 0x90, + 0xac, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x20, 0x00, 0x7e, + 0x00, 0x20, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0xc0, 0xc9, + 0xfc, 0xc1, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x20, 0x00, + 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x94, + 0xc6, 0x40, 0xc6, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x20, + 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, + 0xfc, 0xc8, 0xd0, 0xc5, 0x74, 0xc7, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x90, 0xac, 0xb4, 0xb7, 0xe0, + 0xcf, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x20, 0x00, 0x7e, + 0x00, 0x20, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x84, 0xbd, + 0xc0, 0xc9, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x20, 0x00, + 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x21, 0x90, + 0xac, 0x50, 0xd0, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, 0x20, + 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0xfc, 0xc1, 0xc0, 0xc9, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x90, 0xac, 0xcc, 0xb2, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x21, 0x90, 0xac, 0x50, 0xd0, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x90, 0xac, 0xd0, 0xc5, 0x74, + 0xc7, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x20, 0x00, 0x7e, + 0x00, 0x20, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x70, 0xc8, + 0x90, 0xac, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, 0x20, 0x00, + 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x90, + 0xac, 0xb4, 0xb7, 0xe0, 0xcf, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x21, 0x90, 0xac, 0xec, 0xd3, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x70, 0xc8, 0x50, 0xd0, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x21, 0x70, 0xc8, 0x24, 0xc6, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x20, 0x00, 0x7e, 0x00, + 0x20, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x21, 0x90, 0xac, 0xcc, + 0xb2, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x20, 0x00, 0x7e, + 0x00, 0x20, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x00, 0xac, + 0x5c, 0xb8, 0xe0, 0xcf, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x48, 0xc5, 0x4c, 0xd1, 0x74, 0xc7, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x04, 0xac, 0xa4, 0xd0, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x20, 0x00, 0x7e, 0x00, + 0x20, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x23, 0x70, 0xc8, 0xd0, + 0xc5, 0x74, 0xc7, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, 0x20, + 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, + 0x74, 0xb3, 0x78, 0xd4, 0xe0, 0xcf, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x84, 0xbd, 0xb4, 0xb7, 0xe0, + 0xcf, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x20, 0x00, 0x7e, + 0x00, 0x20, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x00, 0xac, + 0x4c, 0xd1, 0x74, 0xc7, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, + 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x23, 0xb4, 0xb7, 0xe0, 0xcf, 0xcc, 0xb2, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0xd4, 0xc5, 0x24, 0xc6, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x20, 0x00, 0x7e, 0x00, + 0x20, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x21, 0xcc, 0xb2, 0xc0, + 0xc9, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x20, 0x00, 0x7e, + 0x00, 0x20, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, 0x04, 0xac, + 0x90, 0xac, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, 0x20, 0x00, + 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x38, + 0xd6, 0xc0, 0xc9, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, 0x20, + 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x90, 0xac, 0x08, 0xcd, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x21, 0xe0, 0xac, 0x90, 0xac, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, + 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x21, 0xfc, 0xc1, 0x74, 0xce, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0xfc, 0xc1, 0x90, 0xac, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x21, 0x84, 0xbd, 0x24, 0xc6, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x20, 0x00, 0x7e, 0x00, + 0x20, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0xe0, 0xac, 0x08, + 0xcd, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x20, 0x00, 0x7e, + 0x00, 0x20, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x84, 0xbd, + 0xd0, 0xc5, 0x74, 0xc7, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x21, 0x90, 0xac, 0xc0, 0xc9, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0xe0, 0xac, 0x48, 0xc5, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0xfc, 0xc1, 0x24, 0xc6, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0xd0, 0xc5, 0x74, 0xc7, + 0xcc, 0xb2, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x20, 0x00, + 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0xfc, + 0xc1, 0x48, 0xc5, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, 0x20, + 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, + 0x90, 0xac, 0x90, 0xac, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x21, 0x00, 0xac, 0x90, 0xac, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, + 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0xc4, 0xb3, 0xe0, 0xcf, 0xc0, 0xc9, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x20, 0x00, 0x7e, 0x00, + 0x20, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0xd4, 0xc5, 0xc4, + 0xcf, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x20, 0x00, 0x7e, + 0x00, 0x20, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x24, 0xc6, + 0x08, 0xcd, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, 0x20, 0x00, + 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0xfc, + 0xc1, 0x40, 0xc6, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, 0x20, + 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, + 0x84, 0xbd, 0xec, 0xd3, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x90, 0xac, 0x24, 0xc6, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x90, 0xac, 0x54, 0xcf, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x21, 0xfc, 0xc1, 0x94, 0xcd, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x00, 0xac, 0xb4, 0xb7, + 0xe0, 0xcf, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, 0x20, 0x00, + 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x90, + 0xac, 0xa0, 0xd1, 0xe0, 0xcf, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x90, 0xac, 0x54, 0xcf, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x21, 0x90, 0xac, 0x34, 0xbb, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x21, 0xd4, 0xc5, 0x90, 0xac, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x36, 0x00, 0x20, 0x00, 0x7e, 0x00, + 0x20, 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0xe0, 0xac, 0x54, + 0xcf, 0xe0, 0xcf, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, 0x20, + 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0xfc, 0xc1, 0xe4, 0xd5, 0x74, 0xc7, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x90, 0xac, 0xa0, 0xd1, 0xe0, + 0xcf, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x20, 0x00, 0x7e, + 0x00, 0x20, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x84, 0xbd, + 0x94, 0xcd, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, 0x20, 0x00, + 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x74, + 0xb3, 0xfc, 0xc8, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, 0x20, + 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0xe0, 0xac, 0xb4, 0xb7, 0xe0, 0xcf, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x39, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0xe0, 0xac, 0x40, 0xc6, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x21, 0x90, 0xac, 0x94, 0xcd, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x20, 0x00, 0x7e, 0x00, + 0x20, 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x25, 0x54, 0xba, 0x74, + 0xc7, 0xa0, 0xd1, 0xe0, 0xcf, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x21, 0x00, 0xac, 0xc4, 0xcf, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0xe0, 0xac, 0x24, 0xc6, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x54, 0xba, 0x74, 0xc7, + 0xa0, 0xd1, 0xe0, 0xcf, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x24, 0xc6, 0xd0, 0xc5, 0x74, 0xc7, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0xfc, 0xc1, 0x08, 0xcd, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x20, 0x00, 0x7e, 0x00, + 0x20, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0xd0, 0xc5, 0x74, + 0xc7, 0xc4, 0xcf, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, 0x20, + 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x00, 0xac, 0xa4, 0xd0, 0xf0, 0xc4, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x21, 0x84, 0xbd, 0x48, 0xc5, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x38, 0xd6, 0xa0, 0xd1, + 0xe0, 0xcf, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x20, 0x00, + 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x50, + 0xad, 0xa0, 0xd1, 0xe0, 0xcf, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x21, 0xe0, 0xac, 0xfc, 0xc1, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x70, 0xc8, 0x5c, 0xb8, 0xe0, + 0xcf, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x20, 0x00, 0x7e, + 0x00, 0x20, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x21, 0x04, 0xac, + 0xfc, 0xc1, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, 0x20, 0x00, + 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, 0x21, 0x84, + 0xbd, 0xfc, 0xc1, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, 0x20, + 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, + 0x24, 0xc6, 0xcc, 0xb2, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x84, 0xbd, 0x54, 0xba, 0x74, 0xc7, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x70, 0xc8, 0xc4, 0xcf, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x20, 0x00, 0x7e, 0x00, + 0x20, 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x3c, 0x00, 0x23, 0xd4, + 0xc5, 0xa0, 0xd1, 0xe0, 0xcf, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x23, 0x54, 0xba, 0x74, 0xc7, 0x24, 0xc6, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x20, 0x00, 0x7e, 0x00, + 0x20, 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x84, 0xbd, 0xa4, + 0xd0, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x20, 0x00, 0x7e, + 0x00, 0x20, 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0xd0, 0xc5, + 0x74, 0xc7, 0xfc, 0xc1, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0xe4, 0xb2, 0x74, 0xc7, 0xd0, 0xc5, 0x74, + 0xc7, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x20, 0x00, 0x7e, + 0x00, 0x20, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x50, 0xad, + 0x5c, 0xb8, 0xe0, 0xcf, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x21, 0x74, 0xb3, 0x84, 0xbd, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x21, 0xe0, 0xac, 0xc0, 0xc9, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0xd0, 0xc5, 0x74, 0xc7, 0x5c, + 0xb8, 0xe0, 0xcf, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, 0x20, + 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x21, + 0x90, 0xac, 0xa4, 0xd0, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x21, 0x74, 0xb3, 0xfc, 0xc1, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x23, 0x84, 0xbd, 0x5c, 0xb8, 0xe0, 0xcf, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x20, 0x00, 0x7e, 0x00, + 0x20, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x8c, 0xac, 0x74, + 0xc7, 0x08, 0xcd, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, 0x20, + 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, + 0x90, 0xac, 0x98, 0xb0, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x04, 0xac, 0xd0, 0xc5, 0x74, 0xc7, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x21, 0xfc, 0xc1, 0x38, 0xd6, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x20, 0x00, 0x7e, 0x00, + 0x20, 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x23, 0x8c, 0xac, 0x74, + 0xc7, 0x48, 0xc5, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x20, + 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, + 0x70, 0xc8, 0x24, 0xc6, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x25, 0x54, 0xba, 0x74, 0xc7, 0x08, 0xb8, 0xa4, + 0xd0, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x20, 0x00, 0x7e, + 0x00, 0x20, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0xcc, 0xb9, + 0xc0, 0xc9, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, 0x20, 0x00, + 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x04, + 0xac, 0x84, 0xbd, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, 0x20, + 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, + 0xd4, 0xc5, 0xec, 0xd3, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x74, 0xb3, 0x98, 0xb0, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x21, 0x70, 0xc8, 0xc4, 0xcf, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x23, 0x90, 0xac, 0x5c, 0xb8, 0xe0, + 0xcf, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x20, 0x00, 0x7e, + 0x00, 0x20, 0x00, 0x31, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x38, 0xd6, + 0xd0, 0xc5, 0x74, 0xc7, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0xfc, 0xc1, 0xa0, 0xd1, 0xe0, 0xcf, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x21, 0x50, 0xad, 0x38, 0xd6, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x20, 0x00, 0x7e, 0x00, + 0x20, 0x00, 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x21, 0x90, 0xac, 0x84, + 0xbd, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x36, 0x00, 0x20, 0x00, 0x7e, + 0x00, 0x20, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x04, 0xac, + 0xec, 0xd3, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x20, 0x00, + 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0xd4, + 0xc5, 0xc4, 0xcf, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, 0x20, + 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x04, 0xac, 0xd4, 0xc5, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x38, 0xd6, 0x08, 0xb8, 0xa4, 0xd0, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x54, 0xba, 0x74, 0xc7, + 0x40, 0xc6, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x20, 0x00, + 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x48, + 0xc5, 0xd0, 0xc5, 0x74, 0xc7, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x74, 0xb3, 0x54, 0xba, 0x74, 0xc7, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x20, 0x00, 0x7e, 0x00, + 0x20, 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x04, 0xac, 0x38, + 0xc1, 0x74, 0xc7, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x20, + 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x50, 0xad, 0x40, 0xc6, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x84, 0xbd, 0x74, 0xce, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x23, 0x84, 0xbd, 0x38, 0xc1, 0x74, 0xc7, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x20, 0x00, 0x7e, 0x00, + 0x20, 0x00, 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x21, 0x74, 0xb3, 0xec, + 0xd3, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x20, 0x00, 0x7e, + 0x00, 0x20, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0xe0, 0xac, + 0x74, 0xce, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, 0x20, 0x00, + 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x00, + 0xac, 0xd0, 0xc5, 0x74, 0xc7, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x48, 0xc5, 0x38, 0xc1, 0x74, 0xc7, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x20, 0x00, 0x7e, 0x00, + 0x20, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x21, 0xcc, 0xb9, 0xd4, + 0xc5, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x20, 0x00, 0x7e, + 0x00, 0x20, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x84, 0xbd, + 0x50, 0xd0, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, 0x20, 0x00, + 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x90, + 0xac, 0xc0, 0xc9, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, 0x20, + 0x00, 0x7e, 0x00, 0x20, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x8c, 0xac, 0x74, 0xc7, 0x24, 0xc6, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x20, 0x00, 0x7e, 0x00, 0x20, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x07, 0x54, 0xba, 0x74, 0xc7, 0xc0, + 0xc9, 0x07, 0xe4, 0xb2, 0x74, 0xc7, 0xfc, 0xc1, + 0x05, 0xfc, 0xc1, 0x40, 0xc6, 0x09, 0xe4, 0xd5, + 0x74, 0xc7, 0x38, 0xc1, 0x74, 0xc7, 0x09, 0x54, + 0xd6, 0x74, 0xb9, 0x14, 0xbc, 0x18, 0xb5, 0x0f, + 0x24, 0xc6, 0x74, 0xb9, 0x14, 0xb5, 0xa0, 0xbc, + 0xe4, 0xd5, 0x6c, 0xc2, 0xb8, 0xd2, 0x09, 0x38, + 0xd6, 0x74, 0xb9, 0xe4, 0xb2, 0xdc, 0xb4, 0x05, + 0xf0, 0xd2, 0x74, 0xb9, 0x09, 0xa8, 0xba, 0x74, + 0xb9, 0xe4, 0xb2, 0xdc, 0xb4, 0x0b, 0xe4, 0xc0, + 0x50, 0xd7, 0xac, 0xb9, 0x14, 0xbc, 0x74, 0xb9, + 0x07, 0x54, 0xba, 0x50, 0xd7, 0x74, 0xb9, 0x05, + 0x44, 0xc5, 0x18, 0xbc, 0x07, 0x44, 0xc5, 0x90, + 0xc7, 0x74, 0xb9, 0x05, 0xe4, 0xb2, 0x74, 0xc7, + 0x07, 0x14, 0xbc, 0x50, 0xd7, 0xcc, 0xb9, 0x09, + 0xd0, 0xc5, 0xa4, 0xc2, 0x10, 0xd3, 0xdc, 0xb4, + 0x04, 0x41, 0x50, 0x0b, 0x11, 0xc9, 0x54, 0xd6, + 0xfc, 0xbb, 0x6d, 0xad, 0x04, 0xc8, 0x09, 0x11, + 0xc9, 0x54, 0xd6, 0xfc, 0xbb, 0x6d, 0xad, 0x12, + 0x63, 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, + 0x73, 0x08, 0x64, 0x61, 0x74, 0x65, 0x08, 0x6c, + 0x61, 0x74, 0x6e, 0x04, 0x6e, 0x75, 0x10, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, + 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, + 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x26, + 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, + 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0x1e, 0x6e, 0x65, 0x67, 0x61, + 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, + 0x65, 0x72, 0x6e, 0x0e, 0x64, 0x65, 0x63, 0x69, + 0x6d, 0x61, 0x6c, 0x24, 0x7b, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x3a, 0x7b, + 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x7d, 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x63, 0x79, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0x10, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x63, 0x79, 0x2a, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x7b, 0x70, + 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, + 0x67, 0x6e, 0x7d, 0x40, 0x7b, 0x6d, 0x69, 0x6e, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x7b, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x0e, 0x70, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x10, 0x70, 0x61, 0x74, + 0x74, 0x65, 0x72, 0x6e, 0x73, 0x02, 0x2e, 0x02, + 0x2c, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x06, + 0x4e, 0x61, 0x4e, 0x06, 0x6e, 0x61, 0x6e, 0x02, + 0x2b, 0x10, 0x70, 0x6c, 0x75, 0x73, 0x53, 0x69, + 0x67, 0x6e, 0x02, 0x2d, 0x12, 0x6d, 0x69, 0x6e, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, 0x25, + 0x16, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, + 0x53, 0x69, 0x67, 0x6e, 0x03, 0x1e, 0x22, 0x10, + 0x69, 0x6e, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, + 0x0e, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, + 0x06, 0x41, 0x55, 0x24, 0x06, 0x41, 0x55, 0x44, + 0x04, 0x52, 0x24, 0x06, 0x42, 0x52, 0x4c, 0x06, + 0x43, 0x41, 0x24, 0x06, 0x43, 0x41, 0x44, 0x06, + 0x43, 0x4e, 0xa5, 0x06, 0x43, 0x4e, 0x59, 0x03, + 0xac, 0x20, 0x06, 0x45, 0x55, 0x52, 0x02, 0xa3, + 0x06, 0x47, 0x42, 0x50, 0x06, 0x48, 0x4b, 0x24, + 0x06, 0x48, 0x4b, 0x44, 0x03, 0xaa, 0x20, 0x06, + 0x49, 0x4c, 0x53, 0x03, 0xb9, 0x20, 0x06, 0x49, + 0x4e, 0x52, 0x06, 0x4a, 0x50, 0xa5, 0x06, 0x4a, + 0x50, 0x59, 0x03, 0xa9, 0x20, 0x06, 0x4b, 0x52, + 0x57, 0x06, 0x4d, 0x58, 0x24, 0x06, 0x4d, 0x58, + 0x4e, 0x06, 0x4e, 0x5a, 0x24, 0x06, 0x4e, 0x5a, + 0x44, 0x03, 0x3f, 0x0e, 0x06, 0x54, 0x48, 0x42, + 0x06, 0x4e, 0x54, 0x24, 0x06, 0x54, 0x57, 0x44, + 0x06, 0x55, 0x53, 0x24, 0x06, 0x55, 0x53, 0x44, + 0x03, 0xab, 0x20, 0x06, 0x56, 0x4e, 0x44, 0x08, + 0x46, 0x43, 0x46, 0x41, 0x06, 0x58, 0x41, 0x46, + 0x06, 0x45, 0x43, 0x24, 0x06, 0x58, 0x43, 0x44, + 0x06, 0x43, 0x46, 0x41, 0x06, 0x58, 0x4f, 0x46, + 0x08, 0x43, 0x46, 0x50, 0x46, 0x06, 0x58, 0x50, + 0x46, 0x14, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x69, 0x65, 0x73, 0x52, 0x6e, 0x6f, 0x64, + 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, + 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2f, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, + 0x74, 0x61, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x70, + 0x2f, 0x6b, 0x6f, 0x2e, 0x6a, 0x73, 0x0d, 0x00, + 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, 0x27, + 0x00, 0x89, 0x01, 0xb8, 0x6b, 0x01, 0xa0, 0x01, + 0x00, 0x00, 0x00, 0x39, 0xd0, 0x00, 0x00, 0x00, + 0x43, 0xd1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd2, + 0x00, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xd4, 0x00, 0x00, 0x00, 0x04, 0xd5, + 0x00, 0x00, 0x00, 0x04, 0xd6, 0x00, 0x00, 0x00, + 0x04, 0xd7, 0x00, 0x00, 0x00, 0x04, 0xd8, 0x00, + 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x04, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xdb, 0x00, 0x00, + 0x00, 0x04, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xdd, + 0x00, 0x00, 0x00, 0x04, 0xde, 0x00, 0x00, 0x00, + 0x04, 0xdf, 0x00, 0x00, 0x00, 0x04, 0xe0, 0x00, + 0x00, 0x00, 0x04, 0xe1, 0x00, 0x00, 0x00, 0x04, + 0xe2, 0x00, 0x00, 0x00, 0x26, 0x0f, 0x00, 0x4d, + 0xe3, 0x00, 0x00, 0x00, 0x0a, 0x4d, 0xe4, 0x00, + 0x00, 0x00, 0x0a, 0x4d, 0xe5, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x00, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0xec, 0x00, 0x00, 0x00, 0x04, 0xed, 0x00, 0x00, + 0x00, 0x4d, 0xee, 0x00, 0x00, 0x00, 0x04, 0xef, + 0x00, 0x00, 0x00, 0x4d, 0xf0, 0x00, 0x00, 0x00, + 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, 0xf2, 0x00, + 0x00, 0x00, 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, + 0xf4, 0x00, 0x00, 0x00, 0x04, 0xf5, 0x00, 0x00, + 0x00, 0x4d, 0xf6, 0x00, 0x00, 0x00, 0x04, 0xf7, + 0x00, 0x00, 0x00, 0x4d, 0xf8, 0x00, 0x00, 0x00, + 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0xfa, 0x00, + 0x00, 0x00, 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, + 0xfc, 0x00, 0x00, 0x00, 0x04, 0xfd, 0x00, 0x00, + 0x00, 0x4d, 0xfe, 0x00, 0x00, 0x00, 0x04, 0xff, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x01, 0x00, 0x00, + 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0x02, 0x01, + 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, + 0x04, 0x01, 0x00, 0x00, 0x04, 0x05, 0x01, 0x00, + 0x00, 0x4d, 0x06, 0x01, 0x00, 0x00, 0x04, 0x07, + 0x01, 0x00, 0x00, 0x4d, 0x08, 0x01, 0x00, 0x00, + 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0x0a, 0x01, + 0x00, 0x00, 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, + 0x0c, 0x01, 0x00, 0x00, 0x04, 0x0d, 0x01, 0x00, + 0x00, 0x4d, 0x0e, 0x01, 0x00, 0x00, 0x04, 0x0f, + 0x01, 0x00, 0x00, 0x4d, 0x10, 0x01, 0x00, 0x00, + 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, 0x12, 0x01, + 0x00, 0x00, 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, + 0x14, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x4d, 0x16, 0x01, 0x00, 0x00, 0x04, 0x17, + 0x01, 0x00, 0x00, 0x4d, 0x18, 0x01, 0x00, 0x00, + 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, 0x1a, 0x01, + 0x00, 0x00, 0x04, 0x1b, 0x01, 0x00, 0x00, 0x4d, + 0x1c, 0x01, 0x00, 0x00, 0x04, 0x1d, 0x01, 0x00, + 0x00, 0x4d, 0x1e, 0x01, 0x00, 0x00, 0x04, 0x1f, + 0x01, 0x00, 0x00, 0x4d, 0x20, 0x01, 0x00, 0x00, + 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, 0x22, 0x01, + 0x00, 0x00, 0x04, 0x23, 0x01, 0x00, 0x00, 0x4d, + 0x24, 0x01, 0x00, 0x00, 0x04, 0x25, 0x01, 0x00, + 0x00, 0x4d, 0x26, 0x01, 0x00, 0x00, 0x04, 0x27, + 0x01, 0x00, 0x00, 0x4d, 0x28, 0x01, 0x00, 0x00, + 0x04, 0x29, 0x01, 0x00, 0x00, 0x4d, 0x2a, 0x01, + 0x00, 0x00, 0x04, 0x2b, 0x01, 0x00, 0x00, 0x4d, + 0x2c, 0x01, 0x00, 0x00, 0x04, 0x2d, 0x01, 0x00, + 0x00, 0x4d, 0x2e, 0x01, 0x00, 0x00, 0x04, 0x2d, + 0x01, 0x00, 0x00, 0x4d, 0x2f, 0x01, 0x00, 0x00, + 0x04, 0x30, 0x01, 0x00, 0x00, 0x4d, 0x31, 0x01, + 0x00, 0x00, 0x04, 0x32, 0x01, 0x00, 0x00, 0x4d, + 0x33, 0x01, 0x00, 0x00, 0x04, 0x34, 0x01, 0x00, + 0x00, 0x4d, 0x35, 0x01, 0x00, 0x00, 0x04, 0x36, + 0x01, 0x00, 0x00, 0x4d, 0x37, 0x01, 0x00, 0x00, + 0x04, 0x38, 0x01, 0x00, 0x00, 0x4d, 0x39, 0x01, + 0x00, 0x00, 0x04, 0x32, 0x01, 0x00, 0x00, 0x4d, + 0x3a, 0x01, 0x00, 0x00, 0x04, 0x3b, 0x01, 0x00, + 0x00, 0x4d, 0x3c, 0x01, 0x00, 0x00, 0x04, 0x3d, + 0x01, 0x00, 0x00, 0x4d, 0x3e, 0x01, 0x00, 0x00, + 0x04, 0x3f, 0x01, 0x00, 0x00, 0x4d, 0x40, 0x01, + 0x00, 0x00, 0x04, 0x41, 0x01, 0x00, 0x00, 0x4d, + 0x42, 0x01, 0x00, 0x00, 0x04, 0x43, 0x01, 0x00, + 0x00, 0x4d, 0x44, 0x01, 0x00, 0x00, 0x04, 0x45, + 0x01, 0x00, 0x00, 0x4d, 0x46, 0x01, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x4d, 0x48, 0x01, + 0x00, 0x00, 0x4d, 0x49, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x4d, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x4d, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x34, 0x01, 0x00, + 0x00, 0x4d, 0x3e, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x4d, 0x35, 0x01, 0x00, 0x00, + 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x4d, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, + 0x10, 0x01, 0x00, 0x00, 0x04, 0x0b, 0x01, 0x00, + 0x00, 0x4d, 0x0c, 0x01, 0x00, 0x00, 0x4d, 0x54, + 0x01, 0x00, 0x00, 0x4d, 0x55, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x0b, 0x04, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x63, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x72, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x75, 0x01, 0x00, 0x00, 0x4d, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x4d, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x00, 0xbe, 0x01, 0xbe, 0x02, 0xbe, + 0x03, 0xbe, 0x04, 0xbe, 0x05, 0xbe, 0x06, 0xbe, + 0x07, 0xbe, 0x08, 0xbe, 0x09, 0xbe, 0x0a, 0xbe, + 0x0b, 0x26, 0x0c, 0x00, 0x4d, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x63, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x72, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, + 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, + 0xd6, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x0c, + 0xbe, 0x0d, 0xbe, 0x0e, 0xbe, 0x0f, 0xbe, 0x10, + 0xbe, 0x11, 0xbe, 0x12, 0xbe, 0x13, 0xbe, 0x14, + 0xbe, 0x15, 0xbe, 0x16, 0xbe, 0x17, 0xbe, 0x18, + 0x26, 0x0d, 0x00, 0x4d, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, + 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, + 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, + 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, + 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, + 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x63, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, + 0x04, 0x88, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x4d, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x4d, + 0x79, 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x19, 0xbe, 0x1a, 0xbe, + 0x1b, 0xbe, 0x1c, 0xbe, 0x1d, 0xbe, 0x1e, 0xbe, + 0x1f, 0xbe, 0x20, 0xbe, 0x21, 0xbe, 0x22, 0xbe, + 0x23, 0xbe, 0x24, 0x26, 0x0c, 0x00, 0x4d, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x63, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, + 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x25, 0xbe, 0x26, 0xbe, 0x27, 0xbe, 0x28, + 0xbe, 0x29, 0xbe, 0x2a, 0xbe, 0x2b, 0xbe, 0x2c, + 0xbe, 0x2d, 0xbe, 0x2e, 0xbe, 0x2f, 0xbe, 0x30, + 0xbe, 0x31, 0x26, 0x0d, 0x00, 0x4d, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, + 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, + 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, + 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, + 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, + 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, + 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, + 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, + 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, + 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, + 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, + 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, + 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, + 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, + 0x95, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x63, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x62, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, + 0x04, 0x88, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, + 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x32, 0xbe, + 0x33, 0xbe, 0x34, 0xbe, 0x35, 0xbe, 0x36, 0xbe, + 0x37, 0xbe, 0x38, 0xbe, 0x39, 0xbe, 0x3a, 0xbe, + 0x3b, 0xbe, 0x3c, 0xbe, 0x3d, 0xbe, 0x3e, 0x26, + 0x0d, 0x00, 0x4d, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, + 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, + 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, + 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, + 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, + 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, + 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, + 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, + 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, + 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, + 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, + 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, + 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, + 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x63, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x72, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x87, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x87, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x4d, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x4d, + 0x79, 0x01, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x3f, 0xbe, 0x40, 0xbe, + 0x41, 0xbe, 0x42, 0xbe, 0x43, 0xbe, 0x44, 0xbe, + 0x45, 0xbe, 0x46, 0xbe, 0x47, 0xbe, 0x48, 0xbe, + 0x49, 0xbe, 0x4a, 0x26, 0x0c, 0x00, 0x4d, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, + 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, + 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, + 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, + 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, + 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, + 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, + 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, + 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, + 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, + 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, + 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, + 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, + 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x63, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, + 0x88, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, + 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x74, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, + 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x63, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x72, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xa2, 0x01, + 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, + 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, + 0x00, 0x26, 0x04, 0x00, 0x4d, 0x62, 0x01, 0x00, + 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, + 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, + 0x04, 0xa5, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa6, 0x01, + 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, + 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, + 0x00, 0x26, 0x04, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, + 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x4b, 0xbe, 0x4c, 0xbe, 0x4d, 0xbe, 0x4e, 0xbe, + 0x4f, 0xbe, 0x50, 0xbe, 0x51, 0xbe, 0x52, 0xbe, + 0x53, 0xbe, 0x54, 0xbe, 0x55, 0xbe, 0x56, 0xbe, + 0x57, 0xbe, 0x58, 0x26, 0x0e, 0x00, 0x4d, 0x62, + 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, + 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, + 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, + 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, + 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, + 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, + 0x04, 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, + 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, 0x04, + 0xb4, 0x01, 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, + 0x00, 0x26, 0x0e, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, + 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, + 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, + 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, + 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, + 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, + 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, + 0x04, 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, + 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, 0x26, + 0x0e, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x63, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x72, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xb6, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x62, 0x01, 0x00, + 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xb6, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x75, 0x01, 0x00, 0x00, 0x4d, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x4d, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x59, 0xbe, 0x5a, 0xbe, 0x5b, 0xbe, + 0x5c, 0xbe, 0x5d, 0xbe, 0x5e, 0xbe, 0x5f, 0xbe, + 0x60, 0xbe, 0x61, 0xbe, 0x62, 0xbe, 0x63, 0xbe, + 0x64, 0x26, 0x0c, 0x00, 0x4d, 0x62, 0x01, 0x00, + 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, + 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, + 0x04, 0xba, 0x01, 0x00, 0x00, 0x04, 0xbb, 0x01, + 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, 0x04, + 0xbd, 0x01, 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, + 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, 0x04, 0xc0, + 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, + 0x04, 0xc2, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xb7, 0x01, + 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, 0x04, + 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, + 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, + 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, + 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, + 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, 0x04, + 0xc1, 0x01, 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x63, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x72, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xc3, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x62, + 0x01, 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xc3, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x4d, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x4d, + 0x79, 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x65, 0xbe, 0x66, 0xbe, + 0x67, 0xbe, 0x68, 0xbe, 0x69, 0xbe, 0x6a, 0xbe, + 0x6b, 0xbe, 0x6c, 0xbe, 0x6d, 0xbe, 0x6e, 0xbe, + 0x6f, 0xbe, 0x70, 0x26, 0x0c, 0x00, 0x4d, 0x62, + 0x01, 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, + 0x04, 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, 0x01, + 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, 0x04, + 0xc8, 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, + 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, 0x04, 0xcb, + 0x01, 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, + 0x04, 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, + 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xd0, 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, + 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, + 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, + 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, + 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, + 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, + 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x63, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xdc, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x62, 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, + 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x71, 0xbe, + 0x72, 0xbe, 0x73, 0xbe, 0x74, 0xbe, 0x75, 0xbe, + 0x76, 0xbe, 0x77, 0xbe, 0x78, 0xbe, 0x79, 0xbe, + 0x7a, 0xbe, 0x7b, 0xbe, 0x7c, 0x26, 0x0c, 0x00, + 0x4d, 0x62, 0x01, 0x00, 0x00, 0x04, 0xc4, 0x01, + 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, 0x04, + 0xc6, 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, + 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, 0xc9, + 0x01, 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, + 0x04, 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, 0x01, + 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, 0x04, + 0xce, 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, 0xd1, + 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, + 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, + 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, + 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, + 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, + 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, + 0x04, 0xdb, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x63, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x62, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xdc, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x62, 0x01, 0x00, 0x00, 0x04, + 0xdc, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, + 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x63, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, + 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, + 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, + 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, 0xe3, + 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, + 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, + 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, + 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, + 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, + 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, + 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, + 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, + 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, + 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, + 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, + 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, + 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, + 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, + 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, + 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, + 0x26, 0x20, 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, + 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0xfe, 0x01, + 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, + 0xff, 0x01, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, + 0x80, 0x04, 0x00, 0x02, 0x00, 0x00, 0x4d, 0x23, + 0x00, 0x00, 0x80, 0x04, 0x01, 0x02, 0x00, 0x00, + 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x02, 0x02, + 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, + 0x03, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, + 0x80, 0x04, 0x04, 0x02, 0x00, 0x00, 0x4d, 0x27, + 0x00, 0x00, 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, + 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, + 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, + 0x07, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, + 0x80, 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, 0x2b, + 0x00, 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, + 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, + 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, + 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, + 0x80, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x2f, + 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, + 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, + 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, + 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, + 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x33, + 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, + 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, + 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, + 0x13, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, + 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x37, + 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, + 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, + 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, + 0x17, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, + 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x3b, + 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, + 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, + 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, + 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, + 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x3f, + 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, + 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, + 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, + 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, + 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x43, + 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, + 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, + 0x23, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, + 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x47, + 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, + 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, + 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, + 0x27, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, + 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x4b, + 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, + 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, + 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, + 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, + 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x4f, + 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, + 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, + 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, + 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, + 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x53, + 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, + 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, + 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, + 0x33, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, + 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x57, + 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, + 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, + 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, + 0x37, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, + 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x5b, + 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, + 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, + 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, + 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, + 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x5f, + 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, + 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, + 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, + 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, + 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x63, + 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, + 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, + 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, + 0x43, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, + 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x67, + 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, + 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, + 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, + 0x47, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, + 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x6b, + 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, + 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, + 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, + 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, + 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x6f, + 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, + 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, + 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, + 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, + 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x73, + 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, + 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, + 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, + 0x53, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, + 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x77, + 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, + 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, + 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, + 0x57, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, + 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x7b, + 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, + 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, + 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, + 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, + 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x7f, + 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, + 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, + 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, + 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, + 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x83, + 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, + 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, + 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, + 0x63, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, + 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x87, + 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, + 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, + 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, + 0x67, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, + 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x8b, + 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, + 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, + 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, + 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, + 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x8f, + 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, + 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, + 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, + 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, + 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x93, + 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, + 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, + 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, + 0x73, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, + 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x97, + 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, + 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, + 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, + 0x77, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, + 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x9b, + 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, + 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, + 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, + 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, + 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x9f, + 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, + 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, + 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, + 0x7f, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, + 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0xa3, + 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, + 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, + 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, + 0x83, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, + 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0xa7, + 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, + 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, + 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, + 0x87, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, + 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0xab, + 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, + 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, + 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, + 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, + 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xaf, + 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, + 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, + 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, + 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, + 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xb3, + 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, + 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, + 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, + 0x93, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, + 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xb7, + 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, + 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, + 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, + 0x97, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, + 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xbb, + 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, + 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, + 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, + 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, + 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xbf, + 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, + 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, + 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, + 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, + 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xc3, + 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, + 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, + 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, + 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, + 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xc7, + 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, + 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, + 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, + 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, + 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xcb, + 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, + 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, + 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, + 0xab, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, + 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xcf, + 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, + 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, + 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, + 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, + 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, + 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, + 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, + 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, + 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, + 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, + 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, + 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x80, 0x04, 0x1c, 0x01, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, + 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x80, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x80, 0x4d, 0x62, 0x01, 0x00, 0x00, + 0x04, 0xc7, 0x02, 0x00, 0x00, 0x04, 0xc8, 0x02, + 0x00, 0x00, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x04, + 0xca, 0x02, 0x00, 0x00, 0x04, 0xcb, 0x02, 0x00, + 0x00, 0x04, 0xcc, 0x02, 0x00, 0x00, 0x04, 0xcd, + 0x02, 0x00, 0x00, 0x04, 0xce, 0x02, 0x00, 0x00, + 0x04, 0xcf, 0x02, 0x00, 0x00, 0x04, 0xd0, 0x02, + 0x00, 0x00, 0x04, 0xd1, 0x02, 0x00, 0x00, 0x04, + 0xd2, 0x02, 0x00, 0x00, 0x04, 0xd3, 0x02, 0x00, + 0x00, 0x04, 0xd4, 0x02, 0x00, 0x00, 0x04, 0xd5, + 0x02, 0x00, 0x00, 0x04, 0xd6, 0x02, 0x00, 0x00, + 0x04, 0xd7, 0x02, 0x00, 0x00, 0x04, 0xd8, 0x02, + 0x00, 0x00, 0x04, 0xd9, 0x02, 0x00, 0x00, 0x04, + 0xda, 0x02, 0x00, 0x00, 0x04, 0xdb, 0x02, 0x00, + 0x00, 0x04, 0xdc, 0x02, 0x00, 0x00, 0x04, 0xdd, + 0x02, 0x00, 0x00, 0x04, 0xde, 0x02, 0x00, 0x00, + 0x04, 0xdf, 0x02, 0x00, 0x00, 0x04, 0xe0, 0x02, + 0x00, 0x00, 0x04, 0xe1, 0x02, 0x00, 0x00, 0x04, + 0xe2, 0x02, 0x00, 0x00, 0x04, 0xe3, 0x02, 0x00, + 0x00, 0x04, 0xe4, 0x02, 0x00, 0x00, 0x04, 0xe5, + 0x02, 0x00, 0x00, 0x04, 0xe6, 0x02, 0x00, 0x00, + 0x26, 0x20, 0x00, 0x04, 0xe7, 0x02, 0x00, 0x00, + 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0xe8, 0x02, + 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, + 0xe9, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, + 0x80, 0x04, 0xea, 0x02, 0x00, 0x00, 0x4d, 0x23, + 0x00, 0x00, 0x80, 0x04, 0xeb, 0x02, 0x00, 0x00, + 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0xec, 0x02, + 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, + 0xed, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, + 0x80, 0x04, 0xee, 0x02, 0x00, 0x00, 0x4d, 0x27, + 0x00, 0x00, 0x80, 0x04, 0xef, 0x02, 0x00, 0x00, + 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0xf0, 0x02, + 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, + 0xf1, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, + 0x80, 0x04, 0xf2, 0x02, 0x00, 0x00, 0x4d, 0x2b, + 0x00, 0x00, 0x80, 0x04, 0xf3, 0x02, 0x00, 0x00, + 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0xf4, 0x02, + 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, + 0xf5, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, + 0x80, 0x04, 0xf6, 0x02, 0x00, 0x00, 0x4d, 0x2f, + 0x00, 0x00, 0x80, 0x04, 0xf7, 0x02, 0x00, 0x00, + 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0xf8, 0x02, + 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, + 0xf9, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, + 0x80, 0x04, 0xfa, 0x02, 0x00, 0x00, 0x4d, 0x33, + 0x00, 0x00, 0x80, 0x04, 0xfb, 0x02, 0x00, 0x00, + 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0xfc, 0x02, + 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, + 0xfd, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, + 0x80, 0x04, 0xfe, 0x02, 0x00, 0x00, 0x4d, 0x37, + 0x00, 0x00, 0x80, 0x04, 0xff, 0x02, 0x00, 0x00, + 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x00, 0x03, + 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, + 0x01, 0x03, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, + 0x80, 0x04, 0x02, 0x03, 0x00, 0x00, 0x4d, 0x3b, + 0x00, 0x00, 0x80, 0x04, 0x03, 0x03, 0x00, 0x00, + 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x04, 0x03, + 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, + 0x05, 0x03, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, + 0x80, 0x04, 0x06, 0x03, 0x00, 0x00, 0x4d, 0x3f, + 0x00, 0x00, 0x80, 0x04, 0x07, 0x03, 0x00, 0x00, + 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x08, 0x03, + 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, + 0x09, 0x03, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, + 0x80, 0x04, 0x0a, 0x03, 0x00, 0x00, 0x4d, 0x43, + 0x00, 0x00, 0x80, 0x04, 0x0b, 0x03, 0x00, 0x00, + 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x03, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, + 0x0d, 0x03, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, + 0x80, 0x04, 0x0e, 0x03, 0x00, 0x00, 0x4d, 0x47, + 0x00, 0x00, 0x80, 0x04, 0x0f, 0x03, 0x00, 0x00, + 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x10, 0x03, + 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, + 0x11, 0x03, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, + 0x80, 0x04, 0x12, 0x03, 0x00, 0x00, 0x4d, 0x4b, + 0x00, 0x00, 0x80, 0x04, 0x13, 0x03, 0x00, 0x00, + 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x14, 0x03, + 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, + 0x15, 0x03, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, + 0x80, 0x04, 0x16, 0x03, 0x00, 0x00, 0x4d, 0x4f, + 0x00, 0x00, 0x80, 0x04, 0x17, 0x03, 0x00, 0x00, + 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x18, 0x03, + 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, + 0x19, 0x03, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, + 0x80, 0x04, 0x1a, 0x03, 0x00, 0x00, 0x4d, 0x53, + 0x00, 0x00, 0x80, 0x04, 0x1b, 0x03, 0x00, 0x00, + 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x03, + 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, + 0x1d, 0x03, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, + 0x80, 0x04, 0x1e, 0x03, 0x00, 0x00, 0x4d, 0x57, + 0x00, 0x00, 0x80, 0x04, 0x1f, 0x03, 0x00, 0x00, + 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x20, 0x03, + 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, + 0x21, 0x03, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, + 0x80, 0x04, 0x22, 0x03, 0x00, 0x00, 0x4d, 0x5b, + 0x00, 0x00, 0x80, 0x04, 0x23, 0x03, 0x00, 0x00, + 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x24, 0x03, + 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, + 0x25, 0x03, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, + 0x80, 0x04, 0x26, 0x03, 0x00, 0x00, 0x4d, 0x5f, + 0x00, 0x00, 0x80, 0x04, 0x27, 0x03, 0x00, 0x00, + 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x28, 0x03, + 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, + 0x29, 0x03, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, + 0x80, 0x04, 0x2a, 0x03, 0x00, 0x00, 0x4d, 0x63, + 0x00, 0x00, 0x80, 0x04, 0x2b, 0x03, 0x00, 0x00, + 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x03, + 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, + 0x2d, 0x03, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, + 0x80, 0x04, 0x2e, 0x03, 0x00, 0x00, 0x4d, 0x67, + 0x00, 0x00, 0x80, 0x04, 0x2f, 0x03, 0x00, 0x00, + 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x30, 0x03, + 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, + 0x31, 0x03, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, + 0x80, 0x04, 0x32, 0x03, 0x00, 0x00, 0x4d, 0x6b, + 0x00, 0x00, 0x80, 0x04, 0x33, 0x03, 0x00, 0x00, + 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x34, 0x03, + 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, + 0x35, 0x03, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, + 0x80, 0x04, 0x36, 0x03, 0x00, 0x00, 0x4d, 0x6f, + 0x00, 0x00, 0x80, 0x04, 0x37, 0x03, 0x00, 0x00, + 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x38, 0x03, + 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, + 0x39, 0x03, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, + 0x80, 0x04, 0x3a, 0x03, 0x00, 0x00, 0x4d, 0x73, + 0x00, 0x00, 0x80, 0x04, 0x3b, 0x03, 0x00, 0x00, + 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x03, + 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, + 0x3d, 0x03, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, + 0x80, 0x04, 0x3e, 0x03, 0x00, 0x00, 0x4d, 0x77, + 0x00, 0x00, 0x80, 0x04, 0x3f, 0x03, 0x00, 0x00, + 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x40, 0x03, + 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, + 0x41, 0x03, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, + 0x80, 0x04, 0x42, 0x03, 0x00, 0x00, 0x4d, 0x7b, + 0x00, 0x00, 0x80, 0x04, 0x43, 0x03, 0x00, 0x00, + 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x44, 0x03, + 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, + 0x45, 0x03, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, + 0x80, 0x04, 0x46, 0x03, 0x00, 0x00, 0x4d, 0x7f, + 0x00, 0x00, 0x80, 0x04, 0x47, 0x03, 0x00, 0x00, + 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x48, 0x03, + 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, + 0x49, 0x03, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, + 0x80, 0x04, 0x4a, 0x03, 0x00, 0x00, 0x4d, 0x83, + 0x00, 0x00, 0x80, 0x04, 0x4b, 0x03, 0x00, 0x00, + 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x03, + 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, + 0x4d, 0x03, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, + 0x80, 0x04, 0x4e, 0x03, 0x00, 0x00, 0x4d, 0x87, + 0x00, 0x00, 0x80, 0x04, 0x4f, 0x03, 0x00, 0x00, + 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x50, 0x03, + 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, + 0x51, 0x03, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, + 0x80, 0x04, 0x52, 0x03, 0x00, 0x00, 0x4d, 0x8b, + 0x00, 0x00, 0x80, 0x04, 0x53, 0x03, 0x00, 0x00, + 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x54, 0x03, + 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, + 0x55, 0x03, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, + 0x80, 0x04, 0x56, 0x03, 0x00, 0x00, 0x4d, 0x8f, + 0x00, 0x00, 0x80, 0x04, 0x57, 0x03, 0x00, 0x00, + 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x58, 0x03, + 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, + 0x59, 0x03, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, + 0x80, 0x04, 0x5a, 0x03, 0x00, 0x00, 0x4d, 0x93, + 0x00, 0x00, 0x80, 0x04, 0x5b, 0x03, 0x00, 0x00, + 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x03, + 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, + 0x5d, 0x03, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, + 0x80, 0x04, 0x5e, 0x03, 0x00, 0x00, 0x4d, 0x97, + 0x00, 0x00, 0x80, 0x04, 0x5f, 0x03, 0x00, 0x00, + 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x60, 0x03, + 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, + 0x61, 0x03, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, + 0x80, 0x04, 0x62, 0x03, 0x00, 0x00, 0x4d, 0x9b, + 0x00, 0x00, 0x80, 0x04, 0x63, 0x03, 0x00, 0x00, + 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x64, 0x03, + 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, + 0x65, 0x03, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, + 0x80, 0x04, 0x66, 0x03, 0x00, 0x00, 0x4d, 0x9f, + 0x00, 0x00, 0x80, 0x04, 0x67, 0x03, 0x00, 0x00, + 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x68, 0x03, + 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, + 0x69, 0x03, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, + 0x80, 0x04, 0x6a, 0x03, 0x00, 0x00, 0x4d, 0xa3, + 0x00, 0x00, 0x80, 0x04, 0x6b, 0x03, 0x00, 0x00, + 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x03, + 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, + 0x6d, 0x03, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, + 0x80, 0x04, 0x6e, 0x03, 0x00, 0x00, 0x4d, 0xa7, + 0x00, 0x00, 0x80, 0x04, 0x6f, 0x03, 0x00, 0x00, + 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x70, 0x03, + 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, + 0x71, 0x03, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, + 0x80, 0x04, 0x72, 0x03, 0x00, 0x00, 0x4d, 0xab, + 0x00, 0x00, 0x80, 0x04, 0x73, 0x03, 0x00, 0x00, + 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x74, 0x03, + 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, + 0x75, 0x03, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, + 0x80, 0x04, 0x76, 0x03, 0x00, 0x00, 0x4d, 0xaf, + 0x00, 0x00, 0x80, 0x04, 0x77, 0x03, 0x00, 0x00, + 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x78, 0x03, + 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, + 0x79, 0x03, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, + 0x80, 0x04, 0x7a, 0x03, 0x00, 0x00, 0x4d, 0xb3, + 0x00, 0x00, 0x80, 0x04, 0x7b, 0x03, 0x00, 0x00, + 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x03, + 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, + 0x7d, 0x03, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, + 0x80, 0x04, 0x7e, 0x03, 0x00, 0x00, 0x4d, 0xb7, + 0x00, 0x00, 0x80, 0x04, 0x7f, 0x03, 0x00, 0x00, + 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0x80, 0x03, + 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, + 0x81, 0x03, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, + 0x80, 0x04, 0x82, 0x03, 0x00, 0x00, 0x4d, 0xbb, + 0x00, 0x00, 0x80, 0x04, 0x83, 0x03, 0x00, 0x00, + 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0x84, 0x03, + 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, + 0x85, 0x03, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, + 0x80, 0x04, 0x86, 0x03, 0x00, 0x00, 0x4d, 0xbf, + 0x00, 0x00, 0x80, 0x04, 0x87, 0x03, 0x00, 0x00, + 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0x88, 0x03, + 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, + 0x89, 0x03, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, + 0x80, 0x04, 0x8a, 0x03, 0x00, 0x00, 0x4d, 0xc3, + 0x00, 0x00, 0x80, 0x04, 0x8b, 0x03, 0x00, 0x00, + 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x03, + 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, + 0x8d, 0x03, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, + 0x80, 0x04, 0x8e, 0x03, 0x00, 0x00, 0x4d, 0xc7, + 0x00, 0x00, 0x80, 0x04, 0x8f, 0x03, 0x00, 0x00, + 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0x90, 0x03, + 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, + 0x91, 0x03, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, + 0x80, 0x04, 0x92, 0x03, 0x00, 0x00, 0x4d, 0xcb, + 0x00, 0x00, 0x80, 0x04, 0x93, 0x03, 0x00, 0x00, + 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0x94, 0x03, + 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, + 0x95, 0x03, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, + 0x80, 0x04, 0x96, 0x03, 0x00, 0x00, 0x4d, 0xcf, + 0x00, 0x00, 0x80, 0x04, 0x97, 0x03, 0x00, 0x00, + 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0x98, 0x03, + 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, + 0x99, 0x03, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, + 0x80, 0x04, 0x9a, 0x03, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x80, 0x04, 0x9b, 0x03, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x03, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, + 0x9d, 0x03, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x80, 0x04, 0x9e, 0x03, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x80, 0x04, 0x9f, 0x03, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x03, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, + 0xa1, 0x03, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x80, 0x04, 0xa2, 0x03, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x80, 0x04, 0xa3, 0x03, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x03, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, + 0xa5, 0x03, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x80, 0x04, 0xa6, 0x03, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x80, 0x04, 0xa7, 0x03, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x03, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, + 0xa9, 0x03, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x80, 0x04, 0xaa, 0x03, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x80, 0x04, 0xab, 0x03, 0x00, 0x00, + 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xac, 0x03, + 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, + 0xad, 0x03, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x80, 0x04, 0xae, 0x03, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x80, 0x04, 0xaf, 0x03, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x03, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, + 0xb1, 0x03, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x80, 0x04, 0xb2, 0x03, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x80, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xc7, 0x02, 0x00, 0x00, 0x04, 0xc8, 0x02, + 0x00, 0x00, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x04, + 0xca, 0x02, 0x00, 0x00, 0x04, 0xcb, 0x02, 0x00, + 0x00, 0x04, 0xcc, 0x02, 0x00, 0x00, 0x04, 0xcd, + 0x02, 0x00, 0x00, 0x04, 0xce, 0x02, 0x00, 0x00, + 0x04, 0xcf, 0x02, 0x00, 0x00, 0x04, 0xd0, 0x02, + 0x00, 0x00, 0x04, 0xd1, 0x02, 0x00, 0x00, 0x04, + 0xd2, 0x02, 0x00, 0x00, 0x04, 0xd3, 0x02, 0x00, + 0x00, 0x04, 0xd4, 0x02, 0x00, 0x00, 0x04, 0xd5, + 0x02, 0x00, 0x00, 0x04, 0xd6, 0x02, 0x00, 0x00, + 0x04, 0xd7, 0x02, 0x00, 0x00, 0x04, 0xd8, 0x02, + 0x00, 0x00, 0x04, 0xd9, 0x02, 0x00, 0x00, 0x04, + 0xda, 0x02, 0x00, 0x00, 0x04, 0xdb, 0x02, 0x00, + 0x00, 0x04, 0xdc, 0x02, 0x00, 0x00, 0x04, 0xdd, + 0x02, 0x00, 0x00, 0x04, 0xde, 0x02, 0x00, 0x00, + 0x04, 0xdf, 0x02, 0x00, 0x00, 0x04, 0xe0, 0x02, + 0x00, 0x00, 0x04, 0xe1, 0x02, 0x00, 0x00, 0x04, + 0xe2, 0x02, 0x00, 0x00, 0x04, 0xe3, 0x02, 0x00, + 0x00, 0x04, 0xe4, 0x02, 0x00, 0x00, 0x04, 0xe5, + 0x02, 0x00, 0x00, 0x04, 0xe6, 0x02, 0x00, 0x00, + 0x26, 0x20, 0x00, 0x04, 0xe7, 0x02, 0x00, 0x00, + 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0xe8, 0x02, + 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, + 0xe9, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, + 0x80, 0x04, 0xea, 0x02, 0x00, 0x00, 0x4d, 0x23, + 0x00, 0x00, 0x80, 0x04, 0xeb, 0x02, 0x00, 0x00, + 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0xec, 0x02, + 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, + 0xed, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, + 0x80, 0x04, 0xee, 0x02, 0x00, 0x00, 0x4d, 0x27, + 0x00, 0x00, 0x80, 0x04, 0xef, 0x02, 0x00, 0x00, + 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0xf0, 0x02, + 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, + 0xf1, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, + 0x80, 0x04, 0xf2, 0x02, 0x00, 0x00, 0x4d, 0x2b, + 0x00, 0x00, 0x80, 0x04, 0xf3, 0x02, 0x00, 0x00, + 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0xf4, 0x02, + 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, + 0xf5, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, + 0x80, 0x04, 0xf6, 0x02, 0x00, 0x00, 0x4d, 0x2f, + 0x00, 0x00, 0x80, 0x04, 0xf7, 0x02, 0x00, 0x00, + 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0xf8, 0x02, + 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, + 0xf9, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, + 0x80, 0x04, 0xfa, 0x02, 0x00, 0x00, 0x4d, 0x33, + 0x00, 0x00, 0x80, 0x04, 0xfb, 0x02, 0x00, 0x00, + 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0xfc, 0x02, + 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, + 0xfd, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, + 0x80, 0x04, 0xfe, 0x02, 0x00, 0x00, 0x4d, 0x37, + 0x00, 0x00, 0x80, 0x04, 0xff, 0x02, 0x00, 0x00, + 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x00, 0x03, + 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, + 0x01, 0x03, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, + 0x80, 0x04, 0x02, 0x03, 0x00, 0x00, 0x4d, 0x3b, + 0x00, 0x00, 0x80, 0x04, 0x03, 0x03, 0x00, 0x00, + 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x04, 0x03, + 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, + 0x05, 0x03, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, + 0x80, 0x04, 0x06, 0x03, 0x00, 0x00, 0x4d, 0x3f, + 0x00, 0x00, 0x80, 0x04, 0x07, 0x03, 0x00, 0x00, + 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x08, 0x03, + 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, + 0x09, 0x03, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, + 0x80, 0x04, 0x0a, 0x03, 0x00, 0x00, 0x4d, 0x43, + 0x00, 0x00, 0x80, 0x04, 0x0b, 0x03, 0x00, 0x00, + 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x03, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, + 0x0d, 0x03, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, + 0x80, 0x04, 0x0e, 0x03, 0x00, 0x00, 0x4d, 0x47, + 0x00, 0x00, 0x80, 0x04, 0x0f, 0x03, 0x00, 0x00, + 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x10, 0x03, + 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, + 0x11, 0x03, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, + 0x80, 0x04, 0x12, 0x03, 0x00, 0x00, 0x4d, 0x4b, + 0x00, 0x00, 0x80, 0x04, 0x13, 0x03, 0x00, 0x00, + 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x14, 0x03, + 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, + 0x15, 0x03, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, + 0x80, 0x04, 0x16, 0x03, 0x00, 0x00, 0x4d, 0x4f, + 0x00, 0x00, 0x80, 0x04, 0x17, 0x03, 0x00, 0x00, + 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x18, 0x03, + 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, + 0x19, 0x03, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, + 0x80, 0x04, 0x1a, 0x03, 0x00, 0x00, 0x4d, 0x53, + 0x00, 0x00, 0x80, 0x04, 0x1b, 0x03, 0x00, 0x00, + 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x03, + 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, + 0x1d, 0x03, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, + 0x80, 0x04, 0x1e, 0x03, 0x00, 0x00, 0x4d, 0x57, + 0x00, 0x00, 0x80, 0x04, 0x1f, 0x03, 0x00, 0x00, + 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x20, 0x03, + 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, + 0x21, 0x03, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, + 0x80, 0x04, 0x22, 0x03, 0x00, 0x00, 0x4d, 0x5b, + 0x00, 0x00, 0x80, 0x04, 0x23, 0x03, 0x00, 0x00, + 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x24, 0x03, + 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, + 0x25, 0x03, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, + 0x80, 0x04, 0x26, 0x03, 0x00, 0x00, 0x4d, 0x5f, + 0x00, 0x00, 0x80, 0x04, 0x27, 0x03, 0x00, 0x00, + 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x28, 0x03, + 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, + 0x29, 0x03, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, + 0x80, 0x04, 0x2a, 0x03, 0x00, 0x00, 0x4d, 0x63, + 0x00, 0x00, 0x80, 0x04, 0x2b, 0x03, 0x00, 0x00, + 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x03, + 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, + 0x2d, 0x03, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, + 0x80, 0x04, 0x2e, 0x03, 0x00, 0x00, 0x4d, 0x67, + 0x00, 0x00, 0x80, 0x04, 0x2f, 0x03, 0x00, 0x00, + 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x30, 0x03, + 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, + 0x31, 0x03, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, + 0x80, 0x04, 0x32, 0x03, 0x00, 0x00, 0x4d, 0x6b, + 0x00, 0x00, 0x80, 0x04, 0x33, 0x03, 0x00, 0x00, + 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x34, 0x03, + 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, + 0x35, 0x03, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, + 0x80, 0x04, 0x36, 0x03, 0x00, 0x00, 0x4d, 0x6f, + 0x00, 0x00, 0x80, 0x04, 0x37, 0x03, 0x00, 0x00, + 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x38, 0x03, + 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, + 0x39, 0x03, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, + 0x80, 0x04, 0x3a, 0x03, 0x00, 0x00, 0x4d, 0x73, + 0x00, 0x00, 0x80, 0x04, 0x3b, 0x03, 0x00, 0x00, + 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x03, + 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, + 0x3d, 0x03, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, + 0x80, 0x04, 0x3e, 0x03, 0x00, 0x00, 0x4d, 0x77, + 0x00, 0x00, 0x80, 0x04, 0x3f, 0x03, 0x00, 0x00, + 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x40, 0x03, + 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, + 0x41, 0x03, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, + 0x80, 0x04, 0x42, 0x03, 0x00, 0x00, 0x4d, 0x7b, + 0x00, 0x00, 0x80, 0x04, 0x43, 0x03, 0x00, 0x00, + 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x44, 0x03, + 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, + 0x45, 0x03, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, + 0x80, 0x04, 0x46, 0x03, 0x00, 0x00, 0x4d, 0x7f, + 0x00, 0x00, 0x80, 0x04, 0x47, 0x03, 0x00, 0x00, + 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x48, 0x03, + 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, + 0x49, 0x03, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, + 0x80, 0x04, 0x4a, 0x03, 0x00, 0x00, 0x4d, 0x83, + 0x00, 0x00, 0x80, 0x04, 0x4b, 0x03, 0x00, 0x00, + 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x03, + 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, + 0x4d, 0x03, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, + 0x80, 0x04, 0x4e, 0x03, 0x00, 0x00, 0x4d, 0x87, + 0x00, 0x00, 0x80, 0x04, 0x4f, 0x03, 0x00, 0x00, + 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x50, 0x03, + 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, + 0x51, 0x03, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, + 0x80, 0x04, 0x52, 0x03, 0x00, 0x00, 0x4d, 0x8b, + 0x00, 0x00, 0x80, 0x04, 0x53, 0x03, 0x00, 0x00, + 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x54, 0x03, + 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, + 0x55, 0x03, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, + 0x80, 0x04, 0x56, 0x03, 0x00, 0x00, 0x4d, 0x8f, + 0x00, 0x00, 0x80, 0x04, 0x57, 0x03, 0x00, 0x00, + 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x58, 0x03, + 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, + 0x59, 0x03, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, + 0x80, 0x04, 0x5a, 0x03, 0x00, 0x00, 0x4d, 0x93, + 0x00, 0x00, 0x80, 0x04, 0x5b, 0x03, 0x00, 0x00, + 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x03, + 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, + 0x5d, 0x03, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, + 0x80, 0x04, 0x5e, 0x03, 0x00, 0x00, 0x4d, 0x97, + 0x00, 0x00, 0x80, 0x04, 0x5f, 0x03, 0x00, 0x00, + 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x60, 0x03, + 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, + 0x61, 0x03, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, + 0x80, 0x04, 0x62, 0x03, 0x00, 0x00, 0x4d, 0x9b, + 0x00, 0x00, 0x80, 0x04, 0x63, 0x03, 0x00, 0x00, + 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x64, 0x03, + 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, + 0x65, 0x03, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, + 0x80, 0x04, 0x66, 0x03, 0x00, 0x00, 0x4d, 0x9f, + 0x00, 0x00, 0x80, 0x04, 0x67, 0x03, 0x00, 0x00, + 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x68, 0x03, + 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, + 0x69, 0x03, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, + 0x80, 0x04, 0x6a, 0x03, 0x00, 0x00, 0x4d, 0xa3, + 0x00, 0x00, 0x80, 0x04, 0x6b, 0x03, 0x00, 0x00, + 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x03, + 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, + 0x6d, 0x03, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, + 0x80, 0x04, 0x6e, 0x03, 0x00, 0x00, 0x4d, 0xa7, + 0x00, 0x00, 0x80, 0x04, 0x6f, 0x03, 0x00, 0x00, + 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x70, 0x03, + 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, + 0x71, 0x03, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, + 0x80, 0x04, 0x72, 0x03, 0x00, 0x00, 0x4d, 0xab, + 0x00, 0x00, 0x80, 0x04, 0x73, 0x03, 0x00, 0x00, + 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x74, 0x03, + 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, + 0x75, 0x03, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, + 0x80, 0x04, 0x76, 0x03, 0x00, 0x00, 0x4d, 0xaf, + 0x00, 0x00, 0x80, 0x04, 0x77, 0x03, 0x00, 0x00, + 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x78, 0x03, + 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, + 0x79, 0x03, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, + 0x80, 0x04, 0x7a, 0x03, 0x00, 0x00, 0x4d, 0xb3, + 0x00, 0x00, 0x80, 0x04, 0x7b, 0x03, 0x00, 0x00, + 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x03, + 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, + 0x7d, 0x03, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, + 0x80, 0x04, 0x7e, 0x03, 0x00, 0x00, 0x4d, 0xb7, + 0x00, 0x00, 0x80, 0x04, 0x7f, 0x03, 0x00, 0x00, + 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0x80, 0x03, + 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, + 0x81, 0x03, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, + 0x80, 0x04, 0x82, 0x03, 0x00, 0x00, 0x4d, 0xbb, + 0x00, 0x00, 0x80, 0x04, 0x83, 0x03, 0x00, 0x00, + 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0x84, 0x03, + 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, + 0x85, 0x03, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, + 0x80, 0x04, 0x86, 0x03, 0x00, 0x00, 0x4d, 0xbf, + 0x00, 0x00, 0x80, 0x04, 0x87, 0x03, 0x00, 0x00, + 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0x88, 0x03, + 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, + 0x89, 0x03, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, + 0x80, 0x04, 0x8a, 0x03, 0x00, 0x00, 0x4d, 0xc3, + 0x00, 0x00, 0x80, 0x04, 0x8b, 0x03, 0x00, 0x00, + 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x03, + 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, + 0x8d, 0x03, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, + 0x80, 0x04, 0x8e, 0x03, 0x00, 0x00, 0x4d, 0xc7, + 0x00, 0x00, 0x80, 0x04, 0x8f, 0x03, 0x00, 0x00, + 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0x90, 0x03, + 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, + 0x91, 0x03, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, + 0x80, 0x04, 0x92, 0x03, 0x00, 0x00, 0x4d, 0xcb, + 0x00, 0x00, 0x80, 0x04, 0x93, 0x03, 0x00, 0x00, + 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0x94, 0x03, + 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, + 0x95, 0x03, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, + 0x80, 0x04, 0x96, 0x03, 0x00, 0x00, 0x4d, 0xcf, + 0x00, 0x00, 0x80, 0x04, 0x97, 0x03, 0x00, 0x00, + 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0x98, 0x03, + 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, + 0x99, 0x03, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, + 0x80, 0x04, 0x9a, 0x03, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x80, 0x04, 0x9b, 0x03, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x03, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, + 0x9d, 0x03, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x80, 0x04, 0x9e, 0x03, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x80, 0x04, 0x9f, 0x03, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x03, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, + 0xa1, 0x03, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x80, 0x04, 0xa2, 0x03, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x80, 0x04, 0xa3, 0x03, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x03, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, + 0xa5, 0x03, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x80, 0x04, 0xa6, 0x03, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x80, 0x04, 0xa7, 0x03, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x03, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, + 0xa9, 0x03, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x80, 0x04, 0xaa, 0x03, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x80, 0x04, 0xab, 0x03, 0x00, 0x00, + 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xac, 0x03, + 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, + 0xad, 0x03, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x80, 0x04, 0xae, 0x03, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x80, 0x04, 0xaf, 0x03, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x03, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, + 0xb1, 0x03, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x80, 0x04, 0xb2, 0x03, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x80, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, + 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x7d, + 0xbe, 0x7e, 0xbe, 0x7f, 0xbe, 0x80, 0xbe, 0x81, + 0xbe, 0x82, 0xbe, 0x83, 0xbe, 0x84, 0xbe, 0x85, + 0xbe, 0x86, 0xbe, 0x87, 0xbe, 0x88, 0x26, 0x0c, + 0x00, 0x4d, 0x62, 0x01, 0x00, 0x00, 0x04, 0xb3, + 0x03, 0x00, 0x00, 0x04, 0xb4, 0x03, 0x00, 0x00, + 0x04, 0xb5, 0x03, 0x00, 0x00, 0x04, 0xb6, 0x03, + 0x00, 0x00, 0x04, 0xb7, 0x03, 0x00, 0x00, 0x04, + 0xb8, 0x03, 0x00, 0x00, 0x04, 0xb9, 0x03, 0x00, + 0x00, 0x04, 0xba, 0x03, 0x00, 0x00, 0x04, 0xbb, + 0x03, 0x00, 0x00, 0x04, 0xbc, 0x03, 0x00, 0x00, + 0x04, 0xbd, 0x03, 0x00, 0x00, 0x04, 0xbe, 0x03, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xb3, 0x03, 0x00, 0x00, 0x04, + 0xb4, 0x03, 0x00, 0x00, 0x04, 0xb5, 0x03, 0x00, + 0x00, 0x04, 0xb6, 0x03, 0x00, 0x00, 0x04, 0xb7, + 0x03, 0x00, 0x00, 0x04, 0xb8, 0x03, 0x00, 0x00, + 0x04, 0xb9, 0x03, 0x00, 0x00, 0x04, 0xba, 0x03, + 0x00, 0x00, 0x04, 0xbb, 0x03, 0x00, 0x00, 0x04, + 0xbc, 0x03, 0x00, 0x00, 0x04, 0xbd, 0x03, 0x00, + 0x00, 0x04, 0xbe, 0x03, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x63, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x72, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xbf, 0x03, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x62, 0x01, 0x00, 0x00, + 0x04, 0xbf, 0x03, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xbf, 0x03, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, + 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x63, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x62, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xc0, 0x03, 0x00, 0x00, 0x04, 0xc1, + 0x03, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x62, + 0x01, 0x00, 0x00, 0x04, 0xc0, 0x03, 0x00, 0x00, + 0x04, 0xc1, 0x03, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xc0, 0x03, + 0x00, 0x00, 0x04, 0xc1, 0x03, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, + 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, 0xe2, + 0x00, 0x00, 0x00, 0x4d, 0xc2, 0x03, 0x00, 0x00, + 0x4d, 0xc3, 0x03, 0x00, 0x00, 0x0b, 0x04, 0xc4, + 0x03, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xc5, + 0x03, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xc6, 0x03, + 0x00, 0x00, 0x4d, 0xc7, 0x03, 0x00, 0x00, 0x04, + 0xc8, 0x03, 0x00, 0x00, 0x4d, 0xc9, 0x03, 0x00, + 0x00, 0x4d, 0xca, 0x03, 0x00, 0x00, 0x0b, 0x04, + 0xcb, 0x03, 0x00, 0x00, 0x4d, 0xc7, 0x03, 0x00, + 0x00, 0x04, 0xcc, 0x03, 0x00, 0x00, 0x4d, 0xc9, + 0x03, 0x00, 0x00, 0x4d, 0xcd, 0x03, 0x00, 0x00, + 0x0b, 0x04, 0xce, 0x03, 0x00, 0x00, 0x4d, 0xc7, + 0x03, 0x00, 0x00, 0x04, 0xcf, 0x03, 0x00, 0x00, + 0x4d, 0xc9, 0x03, 0x00, 0x00, 0x4d, 0xd0, 0x03, + 0x00, 0x00, 0x4d, 0xd1, 0x03, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0xd2, 0x03, 0x00, 0x00, 0x4d, 0xca, + 0x03, 0x00, 0x00, 0x04, 0xd3, 0x03, 0x00, 0x00, + 0x4d, 0xd4, 0x03, 0x00, 0x00, 0x04, 0xd5, 0x03, + 0x00, 0x00, 0x4d, 0xd6, 0x03, 0x00, 0x00, 0x04, + 0xd7, 0x03, 0x00, 0x00, 0x4d, 0xd8, 0x03, 0x00, + 0x00, 0x04, 0xd9, 0x03, 0x00, 0x00, 0x4d, 0xda, + 0x03, 0x00, 0x00, 0x04, 0xdb, 0x03, 0x00, 0x00, + 0x4d, 0xdc, 0x03, 0x00, 0x00, 0x04, 0xdd, 0x03, + 0x00, 0x00, 0x4d, 0xde, 0x03, 0x00, 0x00, 0x4d, + 0xc4, 0x03, 0x00, 0x00, 0x4d, 0xdf, 0x03, 0x00, + 0x00, 0x0b, 0x04, 0xe0, 0x03, 0x00, 0x00, 0x4d, + 0xe1, 0x03, 0x00, 0x00, 0x04, 0xe2, 0x03, 0x00, + 0x00, 0x4d, 0xe3, 0x03, 0x00, 0x00, 0x04, 0xe4, + 0x03, 0x00, 0x00, 0x4d, 0xe5, 0x03, 0x00, 0x00, + 0x04, 0xe6, 0x03, 0x00, 0x00, 0x4d, 0xe7, 0x03, + 0x00, 0x00, 0x04, 0xe8, 0x03, 0x00, 0x00, 0x4d, + 0xe9, 0x03, 0x00, 0x00, 0x04, 0xea, 0x03, 0x00, + 0x00, 0x4d, 0xeb, 0x03, 0x00, 0x00, 0x04, 0xec, + 0x03, 0x00, 0x00, 0x4d, 0xed, 0x03, 0x00, 0x00, + 0x04, 0xee, 0x03, 0x00, 0x00, 0x4d, 0xef, 0x03, + 0x00, 0x00, 0x04, 0xf0, 0x03, 0x00, 0x00, 0x4d, + 0xf1, 0x03, 0x00, 0x00, 0x04, 0xf2, 0x03, 0x00, + 0x00, 0x4d, 0xf3, 0x03, 0x00, 0x00, 0x04, 0xf4, + 0x03, 0x00, 0x00, 0x4d, 0xf5, 0x03, 0x00, 0x00, + 0x04, 0xf6, 0x03, 0x00, 0x00, 0x4d, 0xf7, 0x03, + 0x00, 0x00, 0x04, 0xf8, 0x03, 0x00, 0x00, 0x4d, + 0xf9, 0x03, 0x00, 0x00, 0x04, 0xfa, 0x03, 0x00, + 0x00, 0x4d, 0xfb, 0x03, 0x00, 0x00, 0x04, 0xfc, + 0x03, 0x00, 0x00, 0x4d, 0xfd, 0x03, 0x00, 0x00, + 0x04, 0xfe, 0x03, 0x00, 0x00, 0x4d, 0xff, 0x03, + 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x4d, + 0x01, 0x04, 0x00, 0x00, 0x04, 0x02, 0x04, 0x00, + 0x00, 0x4d, 0x03, 0x04, 0x00, 0x00, 0x04, 0x04, + 0x04, 0x00, 0x00, 0x4d, 0x05, 0x04, 0x00, 0x00, + 0x04, 0x06, 0x04, 0x00, 0x00, 0x4d, 0x07, 0x04, + 0x00, 0x00, 0x04, 0x08, 0x04, 0x00, 0x00, 0x4d, + 0x09, 0x04, 0x00, 0x00, 0x4d, 0x0a, 0x04, 0x00, + 0x00, 0x4d, 0x45, 0x00, 0x00, 0x00, 0x24, 0x01, + 0x00, 0xcc, 0x28, 0x96, 0x10, 0x01, 0x00, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, + 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_lo_size = 34263; + +const uint8_t intl_lo[34263] = { + 0x01, 0xb9, 0x06, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x6c, 0x6f, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x10, + 0x7b, 0x31, 0x7d, 0x2c, 0x20, 0x7b, 0x30, 0x7d, + 0x0a, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, + 0x65, 0x64, 0x69, 0x75, 0x6d, 0x08, 0x66, 0x75, + 0x6c, 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x02, + 0x64, 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, 0x08, + 0x45, 0x2c, 0x20, 0x64, 0x04, 0x45, 0x64, 0x10, + 0x45, 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, + 0x06, 0x45, 0x68, 0x6d, 0x0e, 0x45, 0x20, 0x48, + 0x48, 0x3a, 0x6d, 0x6d, 0x06, 0x45, 0x48, 0x6d, + 0x16, 0x45, 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x20, 0x61, 0x08, 0x45, 0x68, 0x6d, + 0x73, 0x14, 0x45, 0x20, 0x48, 0x48, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x08, 0x45, 0x48, 0x6d, + 0x73, 0x06, 0x47, 0x20, 0x79, 0x04, 0x47, 0x79, + 0x10, 0x4d, 0x4d, 0x4d, 0x2c, 0x20, 0x47, 0x20, + 0x79, 0x0a, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x16, + 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x2c, 0x20, + 0x47, 0x20, 0x79, 0x0c, 0x47, 0x79, 0x4d, 0x4d, + 0x4d, 0x64, 0x1a, 0x45, 0x20, 0x64, 0x20, 0x4d, + 0x4d, 0x4d, 0x4d, 0x2c, 0x20, 0x47, 0x20, 0x79, + 0x0e, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, + 0x0d, 0x68, 0x00, 0x20, 0x00, 0xc2, 0x0e, 0xa1, + 0x0e, 0x87, 0x0e, 0x61, 0x00, 0x02, 0x68, 0x04, + 0x48, 0x48, 0x02, 0x48, 0x0c, 0x68, 0x3a, 0x6d, + 0x6d, 0x20, 0x61, 0x04, 0x68, 0x6d, 0x0a, 0x48, + 0x48, 0x3a, 0x6d, 0x6d, 0x04, 0x48, 0x6d, 0x12, + 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, + 0x61, 0x06, 0x68, 0x6d, 0x73, 0x10, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x06, 0x48, + 0x6d, 0x73, 0x16, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x20, 0x61, 0x20, 0x76, 0x08, 0x68, + 0x6d, 0x73, 0x76, 0x14, 0x48, 0x48, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x76, 0x08, 0x48, + 0x6d, 0x73, 0x76, 0x10, 0x68, 0x3a, 0x6d, 0x6d, + 0x20, 0x61, 0x20, 0x76, 0x06, 0x68, 0x6d, 0x76, + 0x0e, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x20, 0x76, + 0x06, 0x48, 0x6d, 0x76, 0x02, 0x4c, 0x02, 0x4d, + 0x06, 0x64, 0x2f, 0x4d, 0x04, 0x4d, 0x64, 0x0c, + 0x45, 0x2c, 0x20, 0x64, 0x2f, 0x4d, 0x06, 0x4d, + 0x45, 0x64, 0x06, 0x4c, 0x4c, 0x4c, 0x06, 0x4d, + 0x4d, 0x4d, 0x0a, 0x64, 0x20, 0x4d, 0x4d, 0x4d, + 0x08, 0x4d, 0x4d, 0x4d, 0x64, 0x0e, 0x45, 0x20, + 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, + 0x4d, 0x45, 0x64, 0x0c, 0x4d, 0x4d, 0x4d, 0x4d, + 0x20, 0x64, 0x0a, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, + 0x0a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x04, 0x6d, + 0x73, 0x02, 0x79, 0x06, 0x4d, 0x2f, 0x79, 0x04, + 0x79, 0x4d, 0x0a, 0x64, 0x2f, 0x4d, 0x2f, 0x79, + 0x06, 0x79, 0x4d, 0x64, 0x10, 0x45, 0x2c, 0x20, + 0x64, 0x2f, 0x4d, 0x2f, 0x79, 0x08, 0x79, 0x4d, + 0x45, 0x64, 0x0a, 0x4d, 0x4d, 0x4d, 0x20, 0x79, + 0x08, 0x79, 0x4d, 0x4d, 0x4d, 0x0e, 0x64, 0x20, + 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0a, 0x79, 0x4d, + 0x4d, 0x4d, 0x64, 0x14, 0x45, 0x2c, 0x20, 0x64, + 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0c, 0x79, + 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0c, 0x79, 0x20, + 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, 0x79, 0x4d, 0x4d, + 0x4d, 0x4d, 0x0a, 0x51, 0x51, 0x51, 0x20, 0x79, + 0x08, 0x79, 0x51, 0x51, 0x51, 0x0c, 0x51, 0x51, + 0x51, 0x51, 0x20, 0x79, 0x0a, 0x79, 0x51, 0x51, + 0x51, 0x51, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, + 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x73, 0x25, 0x45, 0x00, 0x45, 0x00, + 0x45, 0x00, 0x45, 0x00, 0x20, 0x00, 0x97, 0x0e, + 0xb5, 0x0e, 0x20, 0x00, 0x64, 0x00, 0x20, 0x00, + 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, + 0x20, 0x00, 0x47, 0x00, 0x20, 0x00, 0x79, 0x00, + 0x14, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x45, 0x45, + 0x45, 0x45, 0x64, 0x10, 0x64, 0x20, 0x4d, 0x4d, + 0x4d, 0x4d, 0x20, 0x79, 0x0c, 0x79, 0x4d, 0x4d, + 0x4d, 0x4d, 0x64, 0x16, 0x64, 0x61, 0x74, 0x65, + 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x37, + 0x48, 0x00, 0x20, 0x00, 0xc2, 0x0e, 0xa1, 0x0e, + 0x87, 0x0e, 0x20, 0x00, 0x6d, 0x00, 0x20, 0x00, + 0x99, 0x0e, 0xb2, 0x0e, 0x97, 0x0e, 0xb5, 0x0e, + 0x20, 0x00, 0x73, 0x00, 0x73, 0x00, 0x20, 0x00, + 0xa7, 0x0e, 0xb4, 0x0e, 0x99, 0x0e, 0xb2, 0x0e, + 0x97, 0x0e, 0xb5, 0x0e, 0x20, 0x00, 0x7a, 0x00, + 0x7a, 0x00, 0x7a, 0x00, 0x7a, 0x00, 0x12, 0x68, + 0x6d, 0x6d, 0x73, 0x73, 0x7a, 0x7a, 0x7a, 0x7a, + 0x31, 0x48, 0x00, 0x20, 0x00, 0xc2, 0x0e, 0xa1, + 0x0e, 0x87, 0x0e, 0x20, 0x00, 0x6d, 0x00, 0x20, + 0x00, 0x99, 0x0e, 0xb2, 0x0e, 0x97, 0x0e, 0xb5, + 0x0e, 0x20, 0x00, 0x73, 0x00, 0x73, 0x00, 0x20, + 0x00, 0xa7, 0x0e, 0xb4, 0x0e, 0x99, 0x0e, 0xb2, + 0x0e, 0x97, 0x0e, 0xb5, 0x0e, 0x20, 0x00, 0x7a, + 0x00, 0x08, 0x68, 0x6d, 0x73, 0x7a, 0x0e, 0x48, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x08, 0x48, + 0x3a, 0x6d, 0x6d, 0x16, 0x74, 0x69, 0x6d, 0x65, + 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x0e, + 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x0c, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x09, 0xa1, + 0x0e, 0x2e, 0x00, 0x81, 0x0e, 0x2e, 0x00, 0x09, + 0x81, 0x0e, 0x2e, 0x00, 0x9e, 0x0e, 0x2e, 0x00, + 0x09, 0xa1, 0x0e, 0x2e, 0x00, 0x99, 0x0e, 0x2e, + 0x00, 0x09, 0xa1, 0x0e, 0x2e, 0x00, 0xaa, 0x0e, + 0x2e, 0x00, 0x09, 0x9e, 0x0e, 0x2e, 0x00, 0x9e, + 0x0e, 0x2e, 0x00, 0x0b, 0xa1, 0x0e, 0xb4, 0x0e, + 0x2e, 0x00, 0x96, 0x0e, 0x2e, 0x00, 0x09, 0x81, + 0x0e, 0x2e, 0x00, 0xa5, 0x0e, 0x2e, 0x00, 0x09, + 0xaa, 0x0e, 0x2e, 0x00, 0xab, 0x0e, 0x2e, 0x00, + 0x09, 0x81, 0x0e, 0x2e, 0x00, 0x8d, 0x0e, 0x2e, + 0x00, 0x09, 0x95, 0x0e, 0x2e, 0x00, 0xa5, 0x0e, + 0x2e, 0x00, 0x09, 0x9e, 0x0e, 0x2e, 0x00, 0x88, + 0x0e, 0x2e, 0x00, 0x09, 0x97, 0x0e, 0x2e, 0x00, + 0xa7, 0x0e, 0x2e, 0x00, 0x0d, 0xa1, 0x0e, 0xb1, + 0x0e, 0x87, 0x0e, 0x81, 0x0e, 0xad, 0x0e, 0x99, + 0x0e, 0x0b, 0x81, 0x0e, 0xb8, 0x0e, 0xa1, 0x0e, + 0x9e, 0x0e, 0xb2, 0x0e, 0x09, 0xa1, 0x0e, 0xb5, + 0x0e, 0x99, 0x0e, 0xb2, 0x0e, 0x09, 0xc0, 0x0e, + 0xa1, 0x0e, 0xaa, 0x0e, 0xb2, 0x0e, 0x0f, 0x9e, + 0x0e, 0xb6, 0x0e, 0x94, 0x0e, 0xaa, 0x0e, 0xb0, + 0x0e, 0x9e, 0x0e, 0xb2, 0x0e, 0x0d, 0xa1, 0x0e, + 0xb4, 0x0e, 0x96, 0x0e, 0xb8, 0x0e, 0x99, 0x0e, + 0xb2, 0x0e, 0x0f, 0x81, 0x0e, 0xcd, 0x0e, 0xa5, + 0x0e, 0xb0, 0x0e, 0x81, 0x0e, 0xbb, 0x0e, 0x94, + 0x0e, 0x0b, 0xaa, 0x0e, 0xb4, 0x0e, 0x87, 0x0e, + 0xab, 0x0e, 0xb2, 0x0e, 0x0b, 0x81, 0x0e, 0xb1, + 0x0e, 0x99, 0x0e, 0x8d, 0x0e, 0xb2, 0x0e, 0x09, + 0x95, 0x0e, 0xb8, 0x0e, 0xa5, 0x0e, 0xb2, 0x0e, + 0x0b, 0x9e, 0x0e, 0xb0, 0x0e, 0x88, 0x0e, 0xb4, + 0x0e, 0x81, 0x0e, 0x0b, 0x97, 0x0e, 0xb1, 0x0e, + 0x99, 0x0e, 0xa7, 0x0e, 0xb2, 0x0e, 0x0c, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x73, 0x11, 0xa7, 0x0e, + 0xb1, 0x0e, 0x99, 0x0e, 0xad, 0x0e, 0xb2, 0x0e, + 0x97, 0x0e, 0xb4, 0x0e, 0x94, 0x0e, 0x0d, 0xa7, + 0x0e, 0xb1, 0x0e, 0x99, 0x0e, 0x88, 0x0e, 0xb1, + 0x0e, 0x99, 0x0e, 0x13, 0xa7, 0x0e, 0xb1, 0x0e, + 0x99, 0x0e, 0xad, 0x0e, 0xb1, 0x0e, 0x87, 0x0e, + 0x84, 0x0e, 0xb2, 0x0e, 0x99, 0x0e, 0x0d, 0xa7, + 0x0e, 0xb1, 0x0e, 0x99, 0x0e, 0x9e, 0x0e, 0xb8, + 0x0e, 0x94, 0x0e, 0x11, 0xa7, 0x0e, 0xb1, 0x0e, + 0x99, 0x0e, 0x9e, 0x0e, 0xb0, 0x0e, 0xab, 0x0e, + 0xb1, 0x0e, 0x94, 0x0e, 0x0d, 0xa7, 0x0e, 0xb1, + 0x0e, 0x99, 0x0e, 0xaa, 0x0e, 0xb8, 0x0e, 0x81, + 0x0e, 0x0f, 0xa7, 0x0e, 0xb1, 0x0e, 0x99, 0x0e, + 0xc0, 0x0e, 0xaa, 0x0e, 0xbb, 0x0e, 0xb2, 0x0e, + 0x08, 0x64, 0x61, 0x79, 0x73, 0x04, 0x42, 0x45, + 0x08, 0x65, 0x72, 0x61, 0x73, 0x11, 0x81, 0x0e, + 0xc8, 0x0e, 0xad, 0x0e, 0x99, 0x0e, 0x97, 0x0e, + 0xc8, 0x0e, 0xbd, 0x0e, 0x87, 0x0e, 0x04, 0x61, + 0x6d, 0x11, 0xab, 0x0e, 0xbc, 0x0e, 0xb1, 0x0e, + 0x87, 0x0e, 0x97, 0x0e, 0xc8, 0x0e, 0xbd, 0x0e, + 0x87, 0x0e, 0x04, 0x70, 0x6d, 0x14, 0x64, 0x61, + 0x79, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x73, + 0x09, 0xc0, 0x0e, 0x97, 0x0e, 0xbb, 0x0e, 0xb2, + 0x0e, 0x09, 0x9a, 0x0e, 0xb2, 0x0e, 0x9a, 0x0e, + 0xb2, 0x0e, 0x09, 0xae, 0x0e, 0xb2, 0x0e, 0xc2, + 0x0e, 0x95, 0x0e, 0x07, 0xc0, 0x0e, 0x84, 0x0e, + 0x8d, 0x0e, 0x09, 0xc2, 0x0e, 0x97, 0x0e, 0x9a, + 0x0e, 0xb2, 0x0e, 0x0b, 0xad, 0x0e, 0xb3, 0x0e, + 0xc0, 0x0e, 0x8a, 0x0e, 0xb5, 0x0e, 0x0f, 0x9a, + 0x0e, 0xb2, 0x0e, 0xa5, 0x0e, 0xb3, 0x0e, 0xae, + 0x0e, 0xb2, 0x0e, 0x94, 0x0e, 0x11, 0x9a, 0x0e, + 0xb2, 0x0e, 0xa5, 0x0e, 0xb2, 0x0e, 0xa1, 0x0e, + 0xb9, 0x0e, 0x94, 0x0e, 0xb2, 0x0e, 0x0d, 0x9a, + 0x0e, 0xb2, 0x0e, 0xaa, 0x0e, 0xae, 0x0e, 0xb2, + 0x0e, 0x99, 0x0e, 0x0d, 0xc0, 0x0e, 0x9b, 0x0e, + 0xbb, 0x0e, 0xb2, 0x0e, 0x99, 0x0e, 0xb2, 0x0e, + 0x0b, 0xad, 0x0e, 0xb5, 0x0e, 0xc1, 0x0e, 0x9b, + 0x0e, 0x9a, 0x0e, 0x0b, 0xa1, 0x0e, 0xb2, 0x0e, + 0xaa, 0x0e, 0xa5, 0x0e, 0xb2, 0x0e, 0x0b, 0x99, + 0x0e, 0xb2, 0x0e, 0x8a, 0x0e, 0xb4, 0x0e, 0xa7, + 0x0e, 0x0b, 0xad, 0x0e, 0xb2, 0x0e, 0xc0, 0x0e, + 0x8a, 0x0e, 0xb5, 0x0e, 0x0b, 0x99, 0x0e, 0xb2, + 0x0e, 0x8a, 0x0e, 0xb5, 0x0e, 0xa7, 0x0e, 0x08, + 0x45, 0x52, 0x41, 0x30, 0x08, 0x45, 0x52, 0x41, + 0x31, 0x13, 0xc1, 0x0e, 0xa1, 0x0e, 0xaa, 0x0e, + 0xc0, 0x0e, 0x84, 0x0e, 0xb5, 0x0e, 0xc1, 0x0e, + 0xa3, 0x0e, 0xa1, 0x0e, 0x0b, 0xc0, 0x0e, 0x95, + 0x0e, 0xc0, 0x0e, 0x81, 0x0e, 0xa1, 0x0e, 0x09, + 0xc0, 0x0e, 0xae, 0x0e, 0x94, 0x0e, 0xb2, 0x0e, + 0x0b, 0x97, 0x0e, 0xb2, 0x0e, 0x8a, 0x0e, 0xb1, + 0x0e, 0xaa, 0x0e, 0x07, 0xc0, 0x0e, 0x97, 0x0e, + 0xb5, 0x0e, 0x0f, 0xc0, 0x0e, 0x8d, 0x0e, 0x84, + 0x0e, 0xb2, 0x0e, 0x97, 0x0e, 0xb4, 0x0e, 0x94, + 0x0e, 0x0f, 0xc0, 0x0e, 0xa1, 0x0e, 0x81, 0x0e, + 0xb2, 0x0e, 0x9a, 0x0e, 0xb4, 0x0e, 0x94, 0x0e, + 0x0d, 0xc0, 0x0e, 0xa1, 0x0e, 0x8d, 0x0e, 0xc0, + 0x0e, 0x8a, 0x0e, 0x8d, 0x0e, 0x0d, 0xc0, 0x0e, + 0x88, 0x0e, 0x99, 0x0e, 0x9a, 0x0e, 0xad, 0x0e, + 0x94, 0x0e, 0x09, 0xc0, 0x0e, 0x8a, 0x0e, 0xc0, + 0x0e, 0x99, 0x0e, 0x09, 0xae, 0x0e, 0xb3, 0x0e, + 0xc0, 0x0e, 0xa5, 0x0e, 0x0d, 0xc0, 0x0e, 0x99, + 0x0e, 0xc1, 0x0e, 0xae, 0x0e, 0xaa, 0x0e, 0xcc, + 0x0e, 0x0f, 0x9e, 0x0e, 0xb2, 0x0e, 0x81, 0x0e, + 0xb9, 0x0e, 0xc0, 0x0e, 0xa1, 0x0e, 0x99, 0x0e, + 0x06, 0x4d, 0x30, 0x31, 0x06, 0x4d, 0x30, 0x32, + 0x06, 0x4d, 0x30, 0x33, 0x06, 0x4d, 0x30, 0x34, + 0x06, 0x4d, 0x30, 0x35, 0x06, 0x4d, 0x30, 0x36, + 0x06, 0x4d, 0x30, 0x37, 0x06, 0x4d, 0x30, 0x38, + 0x06, 0x4d, 0x30, 0x39, 0x06, 0x4d, 0x31, 0x30, + 0x06, 0x4d, 0x31, 0x31, 0x06, 0x4d, 0x31, 0x32, + 0x13, 0x81, 0x0e, 0xc8, 0x0e, 0xad, 0x0e, 0x99, + 0x0e, 0x20, 0x00, 0x84, 0x0e, 0x2e, 0x00, 0xaa, + 0x0e, 0x2e, 0x00, 0x09, 0x84, 0x0e, 0x2e, 0x00, + 0xaa, 0x0e, 0x2e, 0x00, 0x17, 0x81, 0x0e, 0xc8, + 0x0e, 0xad, 0x0e, 0x99, 0x0e, 0x8d, 0x0e, 0xb8, + 0x0e, 0x81, 0x0e, 0x20, 0x00, 0x84, 0x0e, 0x2e, + 0x00, 0xaa, 0x0e, 0x0f, 0x8d, 0x0e, 0xb8, 0x0e, + 0x81, 0x0e, 0x20, 0x00, 0x84, 0x0e, 0x2e, 0x00, + 0xaa, 0x0e, 0x21, 0x81, 0x0e, 0xc8, 0x0e, 0xad, + 0x0e, 0x99, 0x0e, 0x84, 0x0e, 0xa3, 0x0e, 0xb4, + 0x0e, 0x94, 0x0e, 0xaa, 0x0e, 0xb1, 0x0e, 0x81, + 0x0e, 0x81, 0x0e, 0xb0, 0x0e, 0xa5, 0x0e, 0xb2, + 0x0e, 0x94, 0x0e, 0x19, 0x84, 0x0e, 0xa3, 0x0e, + 0xb4, 0x0e, 0x94, 0x0e, 0xaa, 0x0e, 0xb1, 0x0e, + 0x81, 0x0e, 0x81, 0x0e, 0xb0, 0x0e, 0xa5, 0x0e, + 0xb2, 0x0e, 0x94, 0x0e, 0x23, 0x81, 0x0e, 0xc8, + 0x0e, 0xad, 0x0e, 0x99, 0x0e, 0xaa, 0x0e, 0xb2, + 0x0e, 0x81, 0x0e, 0xbb, 0x0e, 0x99, 0x0e, 0xaa, + 0x0e, 0xb1, 0x0e, 0x81, 0x0e, 0x81, 0x0e, 0xb0, + 0x0e, 0xa5, 0x0e, 0xb2, 0x0e, 0x94, 0x0e, 0x1b, + 0xaa, 0x0e, 0xb2, 0x0e, 0x81, 0x0e, 0xbb, 0x0e, + 0x99, 0x0e, 0xaa, 0x0e, 0xb1, 0x0e, 0x81, 0x0e, + 0x81, 0x0e, 0xb0, 0x0e, 0xa5, 0x0e, 0xb2, 0x0e, + 0x94, 0x0e, 0x0d, 0x97, 0x0e, 0xa3, 0x0e, 0xb4, + 0x0e, 0x94, 0x0e, 0xa3, 0x0e, 0xb5, 0x0e, 0x0b, + 0xc0, 0x0e, 0xae, 0x0e, 0xa7, 0x0e, 0xb2, 0x0e, + 0x99, 0x0e, 0x0d, 0x81, 0x0e, 0xb4, 0x0e, 0x94, + 0x0e, 0xc0, 0x0e, 0xa5, 0x0e, 0x9a, 0x0e, 0x0b, + 0xc0, 0x0e, 0x95, 0x0e, 0xc0, 0x0e, 0xa7, 0x0e, + 0x94, 0x0e, 0x0b, 0x8a, 0x0e, 0xb5, 0x0e, 0xa7, + 0x0e, 0xb1, 0x0e, 0x94, 0x0e, 0x0d, 0xad, 0x0e, + 0xb2, 0x0e, 0x94, 0x0e, 0xb2, 0x0e, 0x20, 0x00, + 0x49, 0x00, 0x09, 0xad, 0x0e, 0xb2, 0x0e, 0x94, + 0x0e, 0xb2, 0x0e, 0x0d, 0x99, 0x0e, 0xb4, 0x0e, + 0x94, 0x0e, 0x8a, 0x0e, 0xb2, 0x0e, 0x99, 0x0e, + 0x0b, 0xad, 0x0e, 0xb5, 0x0e, 0x8d, 0x0e, 0xb2, + 0x0e, 0xa3, 0x0e, 0x0b, 0xaa, 0x0e, 0xb5, 0x0e, + 0xa7, 0x0e, 0xb2, 0x0e, 0x99, 0x0e, 0x09, 0x95, + 0x0e, 0xb2, 0x0e, 0xa1, 0x0e, 0xb9, 0x0e, 0x07, + 0xc0, 0x0e, 0xad, 0x0e, 0x9a, 0x0e, 0x09, 0xad, + 0x0e, 0xb5, 0x0e, 0xa5, 0x0e, 0xb9, 0x0e, 0x0f, + 0xad, 0x0e, 0xb2, 0x0e, 0x94, 0x0e, 0xb2, 0x0e, + 0x20, 0x00, 0x49, 0x00, 0x49, 0x00, 0x04, 0x41, + 0x4d, 0x0b, 0x88, 0x0e, 0xb4, 0x0e, 0x95, 0x0e, + 0xa3, 0x0e, 0xb2, 0x0e, 0x0d, 0xa7, 0x0e, 0xb4, + 0x0e, 0xaa, 0x0e, 0xb2, 0x0e, 0x82, 0x0e, 0xb0, + 0x0e, 0x0b, 0xc0, 0x0e, 0x8a, 0x0e, 0x94, 0x0e, + 0x96, 0x0e, 0xb2, 0x0e, 0x0b, 0xad, 0x0e, 0xb1, + 0x0e, 0x94, 0x0e, 0xaa, 0x0e, 0xb2, 0x0e, 0x11, + 0xaa, 0x0e, 0xb2, 0x0e, 0xa3, 0x0e, 0xb2, 0x0e, + 0xa7, 0x0e, 0xb2, 0x0e, 0x99, 0x0e, 0xb2, 0x0e, + 0x0b, 0x9e, 0x0e, 0xb0, 0x0e, 0x95, 0x0e, 0xa3, + 0x0e, 0xb2, 0x0e, 0x0f, 0xad, 0x0e, 0xb1, 0x0e, + 0xaa, 0x0e, 0xa7, 0x0e, 0xb4, 0x0e, 0x8a, 0x0e, + 0xb2, 0x0e, 0x0f, 0x81, 0x0e, 0xb2, 0x0e, 0x99, + 0x0e, 0x95, 0x0e, 0xb4, 0x0e, 0x81, 0x0e, 0xb2, + 0x0e, 0x17, 0xad, 0x0e, 0xb1, 0x0e, 0x81, 0x0e, + 0xa3, 0x0e, 0xb2, 0x0e, 0xae, 0x0e, 0xb2, 0x0e, + 0xa2, 0x0e, 0xb2, 0x0e, 0x99, 0x0e, 0xb2, 0x0e, + 0x09, 0x9b, 0x0e, 0xb8, 0x0e, 0xaa, 0x0e, 0xb2, + 0x0e, 0x09, 0xa1, 0x0e, 0xb2, 0x0e, 0x84, 0x0e, + 0xb0, 0x0e, 0x0f, 0x9c, 0x0e, 0xb2, 0x0e, 0xa5, + 0x0e, 0x81, 0x0e, 0xb8, 0x0e, 0x99, 0x0e, 0xb5, + 0x0e, 0x0d, 0x9b, 0x0e, 0xb8, 0x0e, 0xaa, 0x0e, + 0xb0, 0x0e, 0x8d, 0x0e, 0xb2, 0x0e, 0x0b, 0xa1, + 0x0e, 0xb8, 0x0e, 0xae, 0x0e, 0xb1, 0x0e, 0x94, + 0x0e, 0x09, 0xc0, 0x0e, 0x84, 0x0e, 0xb2, 0x0e, + 0xb0, 0x0e, 0x0f, 0xae, 0x0e, 0xad, 0x0e, 0x94, + 0x0e, 0x9a, 0x0e, 0xb5, 0x0e, 0x20, 0x00, 0x31, + 0x00, 0x0f, 0xae, 0x0e, 0xad, 0x0e, 0x81, 0x0e, + 0x9a, 0x0e, 0xb5, 0x0e, 0x20, 0x00, 0x32, 0x00, + 0x0d, 0x99, 0x0e, 0xb8, 0x0e, 0xa1, 0x0e, 0xb2, + 0x0e, 0x20, 0x00, 0x31, 0x00, 0x0d, 0x99, 0x0e, + 0xb8, 0x0e, 0xa1, 0x0e, 0xb2, 0x0e, 0x20, 0x00, + 0x32, 0x00, 0x09, 0xc0, 0x0e, 0xae, 0x0e, 0xb2, + 0x0e, 0xb0, 0x0e, 0x09, 0x8a, 0x0e, 0xb0, 0x0e, + 0xad, 0x0e, 0xcc, 0x0e, 0x0d, 0xc0, 0x0e, 0xae, + 0x0e, 0xb2, 0x0e, 0xb0, 0x0e, 0xa1, 0x0e, 0xb0, + 0x0e, 0x09, 0xc0, 0x0e, 0x8a, 0x0e, 0xbb, 0x0e, + 0xb2, 0x0e, 0x0f, 0x8a, 0x0e, 0xb8, 0x0e, 0xa5, + 0x0e, 0x81, 0x0e, 0xb4, 0x0e, 0xad, 0x0e, 0xb8, + 0x0e, 0x0d, 0x8a, 0x0e, 0xb8, 0x0e, 0xa5, 0x0e, + 0xab, 0x0e, 0xb4, 0x0e, 0x88, 0x0e, 0x0f, 0xa1, + 0x0e, 0xb8, 0x0e, 0xa3, 0x0e, 0xb0, 0x0e, 0xae, + 0x0e, 0xad, 0x0e, 0xa1, 0x0e, 0x0b, 0x8a, 0x0e, + 0xb2, 0x0e, 0x9f, 0x0e, 0xb2, 0x0e, 0xa3, 0x0e, + 0x0f, 0xae, 0x0e, 0xad, 0x0e, 0x94, 0x0e, 0x9a, + 0x0e, 0xb5, 0x0e, 0x20, 0x00, 0x32, 0x00, 0x11, + 0x88, 0x0e, 0xb8, 0x0e, 0xa1, 0x0e, 0xb2, 0x0e, + 0x94, 0x0e, 0xb2, 0x0e, 0x20, 0x00, 0x31, 0x00, + 0x11, 0x88, 0x0e, 0xb8, 0x0e, 0xa1, 0x0e, 0xb2, + 0x0e, 0x94, 0x0e, 0xb2, 0x0e, 0x20, 0x00, 0x32, + 0x00, 0x0b, 0xae, 0x0e, 0xb2, 0x0e, 0x88, 0x0e, + 0xb1, 0x0e, 0x9a, 0x0e, 0x0b, 0x8a, 0x0e, 0xb0, + 0x0e, 0x9a, 0x0e, 0xb2, 0x0e, 0x99, 0x0e, 0x0f, + 0xae, 0x0e, 0xb2, 0x0e, 0xa1, 0x0e, 0xb2, 0x0e, + 0x94, 0x0e, 0xad, 0x0e, 0x99, 0x0e, 0x0f, 0xc0, + 0x0e, 0x8a, 0x0e, 0xbb, 0x0e, 0xb2, 0x0e, 0xa7, + 0x0e, 0xb1, 0x0e, 0x94, 0x0e, 0x13, 0x94, 0x0e, + 0xb8, 0x0e, 0xad, 0x0e, 0xb1, 0x0e, 0x94, 0x0e, + 0x81, 0x0e, 0xb4, 0x0e, 0x94, 0x0e, 0xb0, 0x0e, + 0x13, 0x94, 0x0e, 0xb8, 0x0e, 0xad, 0x0e, 0xb1, + 0x0e, 0x94, 0x0e, 0x81, 0x0e, 0xb4, 0x0e, 0x88, + 0x0e, 0xb0, 0x0e, 0x04, 0x41, 0x48, 0x1f, 0x54, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x36, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x36, 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x75, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1f, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x1d, 0x57, 0x00, 0x61, 0x00, 0x64, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x52, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x1d, 0x59, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1f, 0x4a, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, + 0x6b, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x2b, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x2d, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x2d, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x2a, 0x4a, 0x69, 0x6e, 0x67, + 0x6f, 0x2d, 0x6b, 0x65, 0x69, 0x75, 0x6e, 0x20, + 0x28, 0x37, 0x36, 0x37, 0x2d, 0x37, 0x37, 0x30, + 0x29, 0x1d, 0x48, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x1f, 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, 0x64, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x4d, 0x01, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, + 0x4a, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x61, + 0x00, 0x6a, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1f, 0x53, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x20, + 0x54, 0x65, 0x6e, 0x2d, 0x61, 0x6e, 0x20, 0x28, + 0x38, 0x35, 0x37, 0x2d, 0x38, 0x35, 0x39, 0x29, + 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, + 0x47, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1d, 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, + 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x34, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1b, 0x4c, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1d, 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x41, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, 0x4a, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x4a, 0x00, 0x69, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x29, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x27, 0x4a, 0x00, 0x69, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x45, 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4c, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x61, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x25, 0x4a, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x24, 0x54, 0x65, 0x6e, 0x2d, + 0x65, 0x69, 0x20, 0x28, 0x31, 0x31, 0x31, 0x30, + 0x2d, 0x31, 0x31, 0x31, 0x33, 0x29, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x44, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x45, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x6a, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x48, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x27, 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, + 0x4c, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x6d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x4a, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x59, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x75, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x29, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x21, 0x4a, 0x00, 0x4d, 0x01, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x27, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x75, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x29, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x74, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x29, 0x52, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x45, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4c, + 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x61, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x48, + 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x27, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x4c, + 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x45, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x27, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4a, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x27, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x61, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x41, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x4d, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x02, 0x54, 0x02, 0x53, 0x21, 0x97, 0x0e, + 0xb0, 0x0e, 0xad, 0x0e, 0xb4, 0x0e, 0x81, 0x0e, + 0xb0, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, 0x36, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x29, 0x00, 0x21, 0xae, + 0x0e, 0xb2, 0x0e, 0x81, 0x0e, 0xb9, 0x0e, 0x8a, + 0x0e, 0xb4, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x13, 0x20, 0x36, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0xae, 0x0e, 0xb2, 0x0e, 0x81, 0x0e, 0xb9, 0x0e, + 0xc2, 0x0e, 0xae, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x1d, 0x8a, 0x0e, 0xb9, 0x0e, 0xc2, 0x0e, 0x8a, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x97, 0x0e, + 0xb2, 0x0e, 0xad, 0x0e, 0xb4, 0x0e, 0xc2, 0x0e, + 0xae, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0xc0, + 0x0e, 0x84, 0x0e, 0xad, 0x0e, 0xb8, 0x0e, 0x87, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0xa7, 0x0e, + 0xb0, 0x0e, 0xc2, 0x0e, 0x94, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x21, 0xc0, 0x0e, 0xa3, 0x0e, 0xad, + 0x0e, 0xb4, 0x0e, 0x81, 0x0e, 0xb4, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x1d, 0xc2, 0x0e, 0xa2, 0x0e, + 0xc2, 0x0e, 0xa3, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1f, 0x88, 0x0e, 0xb4, 0x0e, 0x87, 0x0e, 0x81, + 0x0e, 0xb4, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0xc0, 0x0e, 0x97, 0x0e, 0xb1, 0x0e, 0xa1, 0x0e, + 0x9b, 0x0e, 0xbd, 0x0e, 0xa7, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x2f, 0xc0, 0x0e, 0x97, 0x0e, 0xb1, + 0x0e, 0xa1, 0x0e, 0x9b, 0x0e, 0xbd, 0x0e, 0xa7, + 0x0e, 0x2d, 0x00, 0x84, 0x0e, 0xcd, 0x0e, 0xb2, + 0x0e, 0xc2, 0x0e, 0x9b, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x2d, 0xc0, 0x0e, 0x97, 0x0e, 0xb1, 0x0e, + 0xa1, 0x0e, 0x9b, 0x0e, 0xbd, 0x0e, 0xa7, 0x0e, + 0x2d, 0x00, 0xc2, 0x0e, 0x8a, 0x0e, 0xc2, 0x0e, + 0xae, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x2d, 0xc0, + 0x0e, 0x97, 0x0e, 0xb1, 0x0e, 0xa1, 0x0e, 0x9b, + 0x0e, 0xbd, 0x0e, 0xa7, 0x0e, 0x2d, 0x00, 0xc2, + 0x0e, 0xae, 0x0e, 0x88, 0x0e, 0xb4, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x31, 0xc0, 0x0e, 0x97, 0x0e, + 0xb1, 0x0e, 0xa1, 0x0e, 0x9b, 0x0e, 0xbd, 0x0e, + 0xa7, 0x0e, 0x2d, 0x00, 0x88, 0x0e, 0xb4, 0x0e, + 0x87, 0x0e, 0xc2, 0x0e, 0x87, 0x0e, 0xb0, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x37, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x2d, 0x88, 0x0e, 0xb4, + 0x0e, 0x87, 0x0e, 0xc2, 0x0e, 0x87, 0x0e, 0xb0, + 0x0e, 0x2d, 0x00, 0xc0, 0x0e, 0x84, 0x0e, 0xad, + 0x0e, 0xb8, 0x0e, 0x87, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x1d, 0xc2, 0x0e, 0xae, 0x0e, 0x81, 0x0e, + 0xb4, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0xc0, + 0x0e, 0x97, 0x0e, 0xb1, 0x0e, 0x99, 0x0e, 0x2d, + 0x00, 0xc2, 0x0e, 0xad, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x27, 0xc0, 0x0e, 0xad, 0x0e, 0xb1, 0x0e, + 0x99, 0x0e, 0xa3, 0x0e, 0xa2, 0x0e, 0xb2, 0x0e, + 0x81, 0x0e, 0xb8, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x21, 0x94, 0x0e, 0xb2, 0x0e, 0xad, 0x0e, 0xb4, + 0x0e, 0xc2, 0x0e, 0x94, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x1f, 0xc2, 0x0e, 0x81, 0x0e, 0x99, 0x0e, + 0xb4, 0x0e, 0x99, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0xc0, 0x0e, 0x97, 0x0e, 0xb1, 0x0e, 0x99, + 0x0e, 0xc2, 0x0e, 0x8a, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1d, 0xc2, 0x0e, 0x8a, 0x0e, 0xa7, 0x0e, + 0xb0, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x81, + 0x0e, 0xb0, 0x0e, 0xc2, 0x0e, 0x88, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1f, 0x99, 0x0e, 0xb4, 0x0e, + 0x99, 0x0e, 0x88, 0x0e, 0xb9, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0xaa, 0x0e, 0xb0, 0x0e, 0xad, + 0x0e, 0xb4, 0x0e, 0xc2, 0x0e, 0x81, 0x0e, 0xb0, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0xc0, 0x0e, + 0x97, 0x0e, 0xb1, 0x0e, 0x99, 0x0e, 0x99, 0x0e, + 0xb2, 0x0e, 0x99, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x1f, 0xc2, 0x0e, 0x88, 0x0e, 0x87, 0x0e, 0xb2, + 0x0e, 0x99, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, + 0xc0, 0x0e, 0x81, 0x0e, 0xb1, 0x0e, 0x99, 0x0e, + 0xc0, 0x0e, 0x81, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x1f, 0x99, 0x0e, 0xb4, 0x0e, 0x99, 0x0e, 0x99, + 0x0e, 0xb2, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x81, 0x0e, 0xcd, 0x0e, 0xb2, 0x0e, 0x9b, 0x0e, + 0xbd, 0x0e, 0xa7, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0xc2, 0x0e, 0x8a, 0x0e, 0x95, 0x0e, 0xb2, + 0x0e, 0xad, 0x0e, 0xb4, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0xc0, 0x0e, 0xad, 0x0e, 0xb1, 0x0e, + 0x99, 0x0e, 0x87, 0x0e, 0xb4, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x21, 0xc0, 0x0e, 0xad, 0x0e, 0xb1, + 0x0e, 0x99, 0x0e, 0xc2, 0x0e, 0x8a, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1d, 0xc2, 0x0e, 0x8a, 0x0e, + 0xc0, 0x0e, 0xae, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x23, 0xc0, 0x0e, 0x97, 0x0e, 0xb1, 0x0e, 0x99, + 0x0e, 0x87, 0x0e, 0xbd, 0x0e, 0xa7, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x34, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x27, 0xc0, 0x0e, 0x97, 0x0e, + 0xb1, 0x0e, 0x99, 0x0e, 0xa3, 0x0e, 0xa2, 0x0e, + 0xb2, 0x0e, 0x81, 0x0e, 0xb9, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x27, 0xc0, 0x0e, 0x97, 0x0e, 0xb1, + 0x0e, 0x99, 0x0e, 0xc2, 0x0e, 0x95, 0x0e, 0xb0, + 0x0e, 0x81, 0x0e, 0xb8, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1d, 0xc2, 0x0e, 0xad, 0x0e, 0xa7, 0x0e, + 0xb0, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0xc2, + 0x0e, 0x81, 0x0e, 0xc2, 0x0e, 0xae, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x1d, 0xad, 0x0e, 0xb2, 0x0e, + 0x99, 0x0e, 0xb0, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x27, 0xc0, 0x0e, 0x97, 0x0e, 0xb1, 0x0e, 0x99, + 0x0e, 0xc2, 0x0e, 0xa3, 0x0e, 0xb0, 0x0e, 0x81, + 0x0e, 0xb8, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x27, + 0xc0, 0x0e, 0x97, 0x0e, 0xb1, 0x0e, 0x99, 0x0e, + 0x2d, 0x00, 0xc0, 0x0e, 0xad, 0x0e, 0xb1, 0x0e, + 0x99, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x29, 0x00, 0x21, 0xc2, + 0x0e, 0x88, 0x0e, 0xc0, 0x0e, 0x87, 0x0e, 0xb1, + 0x0e, 0x99, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, + 0xc0, 0x0e, 0x97, 0x0e, 0xb1, 0x0e, 0x99, 0x0e, + 0xc0, 0x0e, 0x87, 0x0e, 0xb1, 0x0e, 0x99, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x1f, 0xc0, 0x0e, 0xad, + 0x0e, 0x81, 0x0e, 0xb2, 0x0e, 0x99, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x1f, 0x81, 0x0e, 0xb2, 0x0e, + 0x99, 0x0e, 0x99, 0x0e, 0xb0, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0xc0, 0x0e, 0xad, 0x0e, 0x2d, + 0x00, 0xc0, 0x0e, 0xad, 0x0e, 0xb1, 0x0e, 0x99, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x1d, 0xc0, 0x0e, + 0xad, 0x0e, 0xc2, 0x0e, 0x8a, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0xc2, 0x0e, 0x8a, 0x0e, 0xa3, + 0x0e, 0xa2, 0x0e, 0xb0, 0x0e, 0x81, 0x0e, 0xb8, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0xc2, 0x0e, + 0x8a, 0x0e, 0xc2, 0x0e, 0x95, 0x0e, 0xb0, 0x0e, + 0x81, 0x0e, 0xb8, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x1f, 0xc2, 0x0e, 0x8a, 0x0e, 0xc2, 0x0e, 0xae, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x81, 0x0e, 0xb2, 0x0e, 0x99, 0x0e, 0xc2, 0x0e, + 0x81, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x23, 0xc2, 0x0e, 0x8a, 0x0e, 0xab, + 0x0e, 0xa7, 0x0e, 0xb0, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x81, 0x0e, + 0xb2, 0x0e, 0x99, 0x0e, 0x99, 0x0e, 0xb4, 0x0e, + 0x87, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x88, 0x0e, 0xb4, 0x0e, 0xad, + 0x0e, 0xb2, 0x0e, 0x99, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0xa1, 0x0e, + 0xb2, 0x0e, 0x99, 0x0e, 0x88, 0x0e, 0xb8, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0xc2, 0x0e, 0x8a, 0x0e, 0xc0, 0x0e, 0x87, + 0x0e, 0xb1, 0x0e, 0x99, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, 0xc2, 0x0e, + 0x8a, 0x0e, 0xc0, 0x0e, 0xa3, 0x0e, 0xa2, 0x0e, + 0xb0, 0x0e, 0x81, 0x0e, 0xb8, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0xc2, + 0x0e, 0x8a, 0x0e, 0x84, 0x0e, 0xb4, 0x0e, 0xa7, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x29, 0x81, 0x0e, 0xb2, 0x0e, 0x99, 0x0e, + 0xc2, 0x0e, 0x95, 0x0e, 0xb0, 0x0e, 0x81, 0x0e, + 0xb8, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0xc0, 0x0e, 0xad, 0x0e, 0xb0, + 0x0e, 0xc2, 0x0e, 0x8a, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0xc0, 0x0e, + 0x97, 0x0e, 0xb1, 0x0e, 0x99, 0x0e, 0x87, 0x0e, + 0xb4, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0xc2, 0x0e, 0x81, 0x0e, 0xc0, + 0x0e, 0xae, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x29, 0x88, 0x0e, 0xb4, 0x0e, + 0xc0, 0x0e, 0xa3, 0x0e, 0xa2, 0x0e, 0xb0, 0x0e, + 0x81, 0x0e, 0xb8, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x27, 0xc0, 0x0e, 0xad, + 0x0e, 0xb1, 0x0e, 0x99, 0x0e, 0x84, 0x0e, 0xb4, + 0x0e, 0xa7, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0xc2, 0x0e, 0x8a, 0x0e, + 0xb0, 0x0e, 0xc2, 0x0e, 0xae, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x2b, 0xc2, + 0x0e, 0x8a, 0x0e, 0xb0, 0x0e, 0xc0, 0x0e, 0xa3, + 0x0e, 0xa2, 0x0e, 0xb0, 0x0e, 0x81, 0x0e, 0xb8, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0xc0, 0x0e, 0xad, 0x0e, 0xc2, 0x0e, + 0x8a, 0x0e, 0xb0, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x27, 0xc2, 0x0e, 0xad, + 0x0e, 0xc2, 0x0e, 0x95, 0x0e, 0xb0, 0x0e, 0x81, + 0x0e, 0xb8, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x81, 0x0e, 0xb2, 0x0e, + 0x99, 0x0e, 0x88, 0x0e, 0xb4, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x81, + 0x0e, 0xb2, 0x0e, 0xc2, 0x0e, 0x8a, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0xc0, 0x0e, 0xad, 0x0e, 0xb0, 0x0e, 0xc2, 0x0e, + 0x8a, 0x0e, 0xb0, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x29, 0xc2, 0x0e, 0x8a, + 0x0e, 0xb0, 0x0e, 0xc2, 0x0e, 0x95, 0x0e, 0xb0, + 0x0e, 0x81, 0x0e, 0xb8, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0xc2, 0x0e, + 0x81, 0x0e, 0xb0, 0x0e, 0xa7, 0x0e, 0xb0, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0xc2, 0x0e, 0x8a, 0x0e, 0xb0, 0x0e, 0x88, + 0x0e, 0xb4, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x81, 0x0e, 0xb2, 0x0e, + 0xc2, 0x0e, 0x8a, 0x0e, 0xb0, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, 0xc0, + 0x0e, 0x97, 0x0e, 0xb1, 0x0e, 0x99, 0x0e, 0x99, + 0x0e, 0xb4, 0x0e, 0x99, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0xc0, 0x0e, + 0x97, 0x0e, 0xb1, 0x0e, 0x99, 0x0e, 0x2d, 0x00, + 0xad, 0x0e, 0xb4, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x23, 0xc0, 0x0e, 0xad, + 0x0e, 0x81, 0x0e, 0xb4, 0x0e, 0xa7, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, + 0xc0, 0x0e, 0x84, 0x0e, 0xb1, 0x0e, 0x99, 0x0e, + 0x2d, 0x00, 0xc0, 0x0e, 0xad, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0xc2, + 0x0e, 0xae, 0x0e, 0xb0, 0x0e, 0xad, 0x0e, 0xb2, + 0x0e, 0x99, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0xc0, 0x0e, 0x97, 0x0e, + 0xb1, 0x0e, 0x99, 0x0e, 0x88, 0x0e, 0xb4, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x94, 0x0e, 0xb2, 0x0e, 0xad, 0x0e, 0xb4, + 0x0e, 0x88, 0x0e, 0xb4, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, 0xc0, 0x0e, + 0x97, 0x0e, 0xb1, 0x0e, 0x99, 0x0e, 0xc2, 0x0e, + 0x8a, 0x0e, 0xb0, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x25, 0xc2, 0x0e, 0x8a, + 0x0e, 0xb0, 0x0e, 0xc2, 0x0e, 0x8a, 0x0e, 0xb0, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x25, 0xc2, 0x0e, 0xae, 0x0e, 0xc0, 0x0e, + 0xad, 0x0e, 0xb1, 0x0e, 0x99, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0xc0, + 0x0e, 0xad, 0x0e, 0x88, 0x0e, 0xb4, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, + 0xc2, 0x0e, 0x81, 0x0e, 0xb0, 0x0e, 0x88, 0x0e, + 0xb4, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x27, 0xc0, 0x0e, 0x97, 0x0e, 0xb1, + 0x0e, 0x99, 0x0e, 0xc2, 0x0e, 0xa2, 0x0e, 0xb0, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x25, 0x84, 0x0e, 0xb4, 0x0e, 0xa7, 0x0e, + 0xad, 0x0e, 0xb2, 0x0e, 0x99, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x99, + 0x0e, 0xb4, 0x0e, 0x99, 0x0e, 0xc0, 0x0e, 0x9b, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x84, 0x0e, 0xb4, 0x0e, 0xa7, 0x0e, + 0x88, 0x0e, 0xb8, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0xc2, 0x0e, 0xae, + 0x0e, 0xc0, 0x0e, 0x84, 0x0e, 0xb1, 0x0e, 0x99, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0xc0, 0x0e, 0xae, 0x0e, 0x88, 0x0e, + 0xb4, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x29, 0xc0, 0x0e, 0xad, 0x0e, 0xc0, + 0x0e, 0xa3, 0x0e, 0xa2, 0x0e, 0xb0, 0x0e, 0x81, + 0x0e, 0xb8, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0xc2, 0x0e, 0xad, 0x0e, + 0xc2, 0x0e, 0x8a, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x25, 0xc2, 0x0e, 0x8a, + 0x0e, 0xb0, 0x0e, 0x81, 0x0e, 0xb2, 0x0e, 0x99, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0xc0, 0x0e, 0xad, 0x0e, 0xa1, 0x0e, + 0xb2, 0x0e, 0x99, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x27, 0x99, 0x0e, 0xb4, + 0x0e, 0x99, 0x0e, 0x2d, 0x00, 0xad, 0x0e, 0xb2, + 0x0e, 0x99, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x81, 0x0e, 0xb0, 0x0e, + 0xc2, 0x0e, 0xad, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0xc2, 0x0e, 0x8a, + 0x0e, 0xb0, 0x0e, 0xad, 0x0e, 0xb2, 0x0e, 0x99, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x27, 0xad, 0x0e, 0xb2, 0x0e, 0x99, 0x0e, + 0xc0, 0x0e, 0x84, 0x0e, 0xb1, 0x0e, 0x99, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x88, 0x0e, 0xb4, 0x0e, 0xc2, 0x0e, 0x8a, + 0x0e, 0xb0, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0xc2, 0x0e, 0xa2, 0x0e, + 0xb0, 0x0e, 0xa7, 0x0e, 0xb0, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x88, + 0x0e, 0xb8, 0x0e, 0xc0, 0x0e, 0xad, 0x0e, 0xb0, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x2d, 0xc0, 0x0e, 0x84, 0x0e, 0xb1, 0x0e, + 0x99, 0x0e, 0xc0, 0x0e, 0xa3, 0x0e, 0xa2, 0x0e, + 0xb8, 0x0e, 0x81, 0x0e, 0xb4, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x9a, + 0x0e, 0xb1, 0x0e, 0x99, 0x0e, 0x88, 0x0e, 0xb4, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x27, 0xc0, 0x0e, 0x81, 0x0e, 0xb1, 0x0e, + 0x99, 0x0e, 0x84, 0x0e, 0xb4, 0x0e, 0xa7, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0xc2, 0x0e, 0x8a, 0x0e, 0x88, 0x0e, 0xb4, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x27, 0xc0, 0x0e, 0x81, 0x0e, 0xb1, 0x0e, + 0x99, 0x0e, 0x99, 0x0e, 0xb4, 0x0e, 0x99, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x27, 0xc0, 0x0e, 0x84, 0x0e, 0xb1, 0x0e, 0x99, + 0x0e, 0x81, 0x0e, 0xb4, 0x0e, 0xa7, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x29, + 0xc0, 0x0e, 0x81, 0x0e, 0xb1, 0x0e, 0x99, 0x0e, + 0x2d, 0x00, 0xc0, 0x0e, 0xad, 0x0e, 0xb0, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x27, 0xc2, 0x0e, 0x8a, 0x0e, 0xb0, 0x0e, 0xc0, + 0x0e, 0x84, 0x0e, 0xb1, 0x0e, 0x99, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x2d, + 0xc0, 0x0e, 0x81, 0x0e, 0xb1, 0x0e, 0x99, 0x0e, + 0xc0, 0x0e, 0xa3, 0x0e, 0xa2, 0x0e, 0xb0, 0x0e, + 0x81, 0x0e, 0xb8, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x27, 0xc0, 0x0e, 0x81, + 0x0e, 0xb1, 0x0e, 0x99, 0x0e, 0xc2, 0x0e, 0x9b, + 0x0e, 0xb0, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0xc2, 0x0e, 0x8a, 0x0e, + 0xb0, 0x0e, 0x81, 0x0e, 0xb4, 0x0e, 0xa7, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x25, 0xc2, 0x0e, 0x88, 0x0e, 0xb0, 0x0e, 0xc2, + 0x0e, 0xad, 0x0e, 0xb0, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x27, 0xc0, 0x0e, + 0x84, 0x0e, 0xb1, 0x0e, 0x99, 0x0e, 0x99, 0x0e, + 0xb4, 0x0e, 0x99, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x25, 0x81, 0x0e, 0xb2, + 0x0e, 0xc2, 0x0e, 0xae, 0x0e, 0x81, 0x0e, 0xb8, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x25, 0xad, 0x0e, 0xb2, 0x0e, 0x99, 0x0e, + 0xc0, 0x0e, 0x95, 0x0e, 0xb0, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x81, + 0x0e, 0xb2, 0x0e, 0x99, 0x0e, 0x81, 0x0e, 0xb4, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x25, 0xc2, 0x0e, 0x88, 0x0e, 0xb0, 0x0e, + 0xc0, 0x0e, 0xad, 0x0e, 0xb0, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x29, 0x00, 0x29, 0xc0, + 0x0e, 0x97, 0x0e, 0xb1, 0x0e, 0xa1, 0x0e, 0x9b, + 0x0e, 0xb8, 0x0e, 0x81, 0x0e, 0xb8, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x2b, + 0x9a, 0x0e, 0xb1, 0x0e, 0x99, 0x0e, 0xc0, 0x0e, + 0xa3, 0x0e, 0xa2, 0x0e, 0xb0, 0x0e, 0x81, 0x0e, + 0xb8, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x81, 0x0e, 0xb2, 0x0e, 0xc0, + 0x0e, 0x95, 0x0e, 0xb0, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x2b, 0xc0, 0x0e, + 0xa3, 0x0e, 0xa2, 0x0e, 0xb0, 0x0e, 0x81, 0x0e, + 0xb8, 0x0e, 0x99, 0x0e, 0xb4, 0x0e, 0x99, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x27, 0xc0, 0x0e, 0xad, 0x0e, 0xb1, 0x0e, 0x99, + 0x0e, 0x2d, 0x00, 0xc2, 0x0e, 0xad, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x99, 0x0e, 0xb4, 0x0e, 0x99, 0x0e, 0x88, 0x0e, + 0xb5, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x25, 0x84, 0x0e, 0xb2, 0x0e, 0x99, + 0x0e, 0xc0, 0x0e, 0x88, 0x0e, 0x99, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, + 0xc2, 0x0e, 0xab, 0x0e, 0x88, 0x0e, 0xb5, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0xc0, 0x0e, 0x84, 0x0e, 0x99, 0x0e, 0xc2, + 0x0e, 0x8a, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0xc2, 0x0e, 0x84, 0x0e, + 0xc0, 0x0e, 0x88, 0x0e, 0x99, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0xc2, + 0x0e, 0x8a, 0x0e, 0x81, 0x0e, 0xb2, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0xc2, 0x0e, 0x8a, 0x0e, 0xc0, 0x0e, 0x81, 0x0e, + 0x99, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x9a, 0x0e, 0xb8, 0x0e, 0x99, + 0x0e, 0x2d, 0x00, 0xc2, 0x0e, 0xad, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0xc2, 0x0e, 0x84, 0x0e, 0xc2, 0x0e, 0x8a, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x9a, 0x0e, 0xb8, 0x0e, 0x99, 0x0e, 0x2d, + 0x00, 0xad, 0x0e, 0xb5, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0xc0, 0x0e, + 0x84, 0x0e, 0x99, 0x0e, 0x88, 0x0e, 0xb5, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0xc0, 0x0e, 0x84, 0x0e, 0xb4, 0x0e, 0x99, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x1d, 0xc2, 0x0e, 0x8a, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0xad, + 0x0e, 0xb4, 0x0e, 0x99, 0x0e, 0x99, 0x0e, 0xb4, + 0x0e, 0x99, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0xc0, 0x0e, 0x8a, 0x0e, + 0xb5, 0x0e, 0x99, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x25, 0xc0, 0x0e, 0x84, + 0x0e, 0x99, 0x0e, 0xc0, 0x0e, 0x88, 0x0e, 0x99, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x23, 0x84, 0x0e, 0xb2, 0x0e, 0xc0, 0x0e, + 0x88, 0x0e, 0x99, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0xc2, 0x0e, 0x95, + 0x0e, 0x81, 0x0e, 0xb9, 0x0e, 0x88, 0x0e, 0xb4, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x23, 0xad, 0x0e, 0xb4, 0x0e, 0x99, 0x0e, + 0x81, 0x0e, 0xb4, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0xc2, 0x0e, 0xad, + 0x0e, 0xc2, 0x0e, 0x8a, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0xc2, 0x0e, + 0x8a, 0x0e, 0xa7, 0x0e, 0xb2, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x9a, + 0x0e, 0xb8, 0x0e, 0x99, 0x0e, 0xc2, 0x0e, 0x9b, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x88, 0x0e, 0xb5, 0x0e, 0xc2, 0x0e, + 0x99, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0xc0, 0x0e, 0x88, 0x0e, 0x99, + 0x0e, 0x81, 0x0e, 0xbd, 0x0e, 0xa7, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, + 0xc2, 0x0e, 0x8a, 0x0e, 0x8a, 0x0e, 0xb4, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x84, 0x0e, 0xb2, 0x0e, 0xa3, 0x0e, 0xb2, + 0x0e, 0x81, 0x0e, 0xb4, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, 0xc0, 0x0e, + 0x88, 0x0e, 0x99, 0x0e, 0xc2, 0x0e, 0x95, 0x0e, + 0x81, 0x0e, 0xb9, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0xc0, 0x0e, 0x88, + 0x0e, 0x99, 0x0e, 0xc2, 0x0e, 0x81, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0xc0, 0x0e, 0x81, 0x0e, 0xb1, 0x0e, 0xa1, 0x0e, + 0xa1, 0x0e, 0xb8, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x29, 0xc0, 0x0e, 0xad, + 0x0e, 0xb1, 0x0e, 0x99, 0x0e, 0xc0, 0x0e, 0x88, + 0x0e, 0xb1, 0x0e, 0x99, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0xc2, 0x0e, + 0x81, 0x0e, 0xc2, 0x0e, 0x81, 0x0e, 0x81, 0x0e, + 0xb8, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x21, 0xc2, 0x0e, 0x8a, 0x0e, 0x8a, + 0x0e, 0xb4, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x27, 0xc0, 0x0e, 0x84, 0x0e, + 0x99, 0x0e, 0xc2, 0x0e, 0x95, 0x0e, 0x81, 0x0e, + 0xb8, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x23, 0x9a, 0x0e, 0xb8, 0x0e, 0x99, + 0x0e, 0x8a, 0x0e, 0xb8, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x25, 0xc0, 0x0e, + 0x97, 0x0e, 0xb1, 0x0e, 0x99, 0x0e, 0x88, 0x0e, + 0xb8, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x84, 0x0e, 0xcd, 0x0e, 0xa2, + 0x0e, 0xb2, 0x0e, 0x81, 0x0e, 0xb8, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0xc2, 0x0e, 0x81, 0x0e, 0xa7, 0x0e, 0xb2, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0xc0, 0x0e, 0x88, 0x0e, 0xb1, 0x0e, 0x99, + 0x0e, 0x8a, 0x0e, 0xb8, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0xa1, 0x0e, + 0xb5, 0x0e, 0xc2, 0x0e, 0x95, 0x0e, 0x81, 0x0e, + 0xb8, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x21, 0x81, 0x0e, 0xb2, 0x0e, 0x81, + 0x0e, 0xb4, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1d, 0x84, 0x0e, 0xb9, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0xa1, 0x0e, 0xb4, 0x0e, 0xc2, 0x0e, 0x95, + 0x0e, 0x81, 0x0e, 0xb8, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0xc2, 0x0e, + 0xad, 0x0e, 0xad, 0x0e, 0xb4, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0xc2, + 0x0e, 0x8a, 0x0e, 0xc2, 0x0e, 0x8a, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0xad, 0x0e, 0xb4, 0x0e, 0x81, 0x0e, 0xbd, 0x0e, + 0xa7, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x81, 0x0e, 0xb2, 0x0e, 0x81, + 0x0e, 0xb4, 0x0e, 0x8a, 0x0e, 0xb8, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x27, + 0x9a, 0x0e, 0xb8, 0x0e, 0x99, 0x0e, 0x2d, 0x00, + 0xad, 0x0e, 0xb2, 0x0e, 0x99, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0xc2, + 0x0e, 0xab, 0x0e, 0xc2, 0x0e, 0x95, 0x0e, 0x81, + 0x0e, 0xb8, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x27, 0x81, 0x0e, 0xbd, 0x0e, + 0xa7, 0x0e, 0xc2, 0x0e, 0x95, 0x0e, 0x81, 0x0e, + 0xb8, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x21, 0xc0, 0x0e, 0x81, 0x0e, 0xc2, + 0x0e, 0x8a, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x25, 0xc2, 0x0e, 0x8a, 0x0e, + 0xc2, 0x0e, 0xa3, 0x0e, 0x81, 0x0e, 0xb8, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x84, 0x0e, 0xb2, 0x0e, 0x99, 0x0e, 0xc2, + 0x0e, 0x8a, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x9a, 0x0e, 0xb8, 0x0e, + 0x99, 0x0e, 0xc2, 0x0e, 0x8a, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0xc2, + 0x0e, 0xad, 0x0e, 0x99, 0x0e, 0xb4, 0x0e, 0x99, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x9a, 0x0e, 0xb8, 0x0e, 0x99, 0x0e, + 0xa1, 0x0e, 0xb4, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0xc2, 0x0e, 0x8a, + 0x0e, 0x81, 0x0e, 0xbd, 0x0e, 0xa7, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x29, + 0xc0, 0x0e, 0xad, 0x0e, 0xb1, 0x0e, 0x99, 0x0e, + 0xc2, 0x0e, 0x95, 0x0e, 0x81, 0x0e, 0xb8, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x21, 0xa1, 0x0e, 0xb4, 0x0e, 0xc2, 0x0e, 0xad, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x9a, 0x0e, 0xb8, 0x0e, 0x99, 0x0e, + 0x81, 0x0e, 0xb4, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x21, 0xad, 0x0e, 0xb4, + 0x0e, 0xc2, 0x0e, 0x8a, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0xc4, 0x0e, + 0x95, 0x0e, 0xad, 0x0e, 0xb4, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, 0x81, + 0x0e, 0xbd, 0x0e, 0xa7, 0x0e, 0xc2, 0x0e, 0xa3, + 0x0e, 0x81, 0x0e, 0xb8, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0xc0, 0x0e, + 0x97, 0x0e, 0xb1, 0x0e, 0x99, 0x0e, 0xa1, 0x0e, + 0xad, 0x0e, 0x99, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x21, 0xc2, 0x0e, 0x81, + 0x0e, 0x88, 0x0e, 0xb4, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0xad, 0x0e, + 0xb4, 0x0e, 0xc2, 0x0e, 0xa3, 0x0e, 0x81, 0x0e, + 0xb8, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0xc0, 0x0e, 0x88, 0x0e, 0xb1, + 0x0e, 0x99, 0x0e, 0x81, 0x0e, 0xb4, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, + 0xc0, 0x0e, 0x97, 0x0e, 0xb1, 0x0e, 0x99, 0x0e, + 0xc2, 0x0e, 0x8a, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x27, 0x9a, 0x0e, 0xb8, + 0x0e, 0x99, 0x0e, 0xc2, 0x0e, 0xa3, 0x0e, 0x81, + 0x0e, 0xb8, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x21, 0x84, 0x0e, 0xb4, 0x0e, + 0xc2, 0x0e, 0x8a, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x25, 0xc0, 0x0e, 0x81, + 0x0e, 0xb1, 0x0e, 0x99, 0x0e, 0xa7, 0x0e, 0xb2, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x84, 0x0e, 0xb2, 0x0e, 0x99, 0x0e, + 0x2d, 0x00, 0xad, 0x0e, 0xb4, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0xc2, + 0x0e, 0x8a, 0x0e, 0xc2, 0x0e, 0x8a, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1f, + 0x84, 0x0e, 0xbd, 0x0e, 0x99, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1d, 0x8a, + 0x0e, 0xb8, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x27, 0xc0, 0x0e, 0xa1, 0x0e, + 0x8d, 0x0e, 0xa2, 0x0e, 0xb2, 0x0e, 0x81, 0x0e, + 0xb8, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x23, 0xc1, 0x0e, 0xa1, 0x0e, 0x99, + 0x0e, 0x88, 0x0e, 0xb4, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x81, 0x0e, + 0xb2, 0x0e, 0x99, 0x0e, 0x9a, 0x0e, 0xb8, 0x0e, + 0x99, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x25, 0xc0, 0x0e, 0xad, 0x0e, 0xb1, + 0x0e, 0x99, 0x0e, 0xc2, 0x0e, 0x9b, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0xc0, 0x0e, 0x97, 0x0e, 0xb1, 0x0e, 0x99, 0x0e, + 0xa7, 0x0e, 0xb2, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0xc2, 0x0e, 0x88, + 0x0e, 0x81, 0x0e, 0xbd, 0x0e, 0xa7, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, 0x29, + 0xc0, 0x0e, 0x88, 0x0e, 0xb1, 0x0e, 0x99, 0x0e, + 0xc2, 0x0e, 0xa3, 0x0e, 0x81, 0x0e, 0xb8, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0xc2, 0x0e, 0xab, 0x0e, 0xad, 0x0e, 0xb4, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x8a, 0x0e, 0xb8, 0x0e, 0x95, 0x0e, + 0xb8, 0x0e, 0x81, 0x0e, 0xb8, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x81, + 0x0e, 0xbd, 0x0e, 0xa7, 0x0e, 0xab, 0x0e, 0xb8, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x27, 0xc0, 0x0e, 0x88, 0x0e, 0xb1, 0x0e, + 0x99, 0x0e, 0x9a, 0x0e, 0xb8, 0x0e, 0x99, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x84, 0x0e, 0xb2, 0x0e, 0x99, 0x0e, 0xc2, + 0x0e, 0x9b, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x27, 0xc0, 0x0e, 0xad, 0x0e, + 0xb1, 0x0e, 0x99, 0x0e, 0x81, 0x0e, 0xbd, 0x0e, + 0xa7, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x27, 0x84, 0x0e, 0xb2, 0x0e, 0x99, + 0x0e, 0x2d, 0x00, 0xad, 0x0e, 0xb4, 0x0e, 0x99, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0xc2, 0x0e, 0xab, 0x0e, 0xa2, 0x0e, + 0xb2, 0x0e, 0x81, 0x0e, 0xb8, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0xc0, + 0x0e, 0xa1, 0x0e, 0x8d, 0x0e, 0xa7, 0x0e, 0xb2, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x27, 0xc0, 0x0e, 0xad, 0x0e, 0xb1, 0x0e, + 0x99, 0x0e, 0x2d, 0x00, 0xad, 0x0e, 0xb4, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0xc0, 0x0e, 0x97, 0x0e, 0xb1, 0x0e, 0x99, + 0x0e, 0xa1, 0x0e, 0xb4, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x84, 0x0e, + 0xb2, 0x0e, 0x99, 0x0e, 0x8a, 0x0e, 0xb4, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x81, 0x0e, 0xbd, 0x0e, 0xa7, 0x0e, 0xa7, + 0x0e, 0xb2, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x9a, 0x0e, 0xb8, 0x0e, + 0x99, 0x0e, 0x81, 0x0e, 0xb2, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x9a, + 0x0e, 0xb8, 0x0e, 0x99, 0x0e, 0x8a, 0x0e, 0xb4, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0xc0, 0x0e, 0x97, 0x0e, 0xb1, 0x0e, + 0x99, 0x0e, 0xc2, 0x0e, 0x9b, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x81, + 0x0e, 0xb8, 0x0e, 0x81, 0x0e, 0xb2, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x81, 0x0e, 0xb2, 0x0e, 0xad, 0x0e, 0xb4, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0xc1, 0x0e, 0xad, 0x0e, 0xb1, 0x0e, 0x99, + 0x0e, 0x8a, 0x0e, 0xb4, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x2b, 0xc1, 0x0e, + 0xa1, 0x0e, 0xb1, 0x0e, 0x99, 0x0e, 0x2d, 0x00, + 0xc0, 0x0e, 0xad, 0x0e, 0xb1, 0x0e, 0x99, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x9a, 0x0e, 0xb8, 0x0e, 0x99, 0x0e, 0x81, + 0x0e, 0xb8, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0xc0, 0x0e, 0x88, 0x0e, + 0x99, 0x0e, 0x88, 0x0e, 0xb5, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x84, + 0x0e, 0xb5, 0x0e, 0xc2, 0x0e, 0xad, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, 0x09, + 0xa1, 0x0e, 0xb5, 0x0e, 0x88, 0x0e, 0xb5, 0x0e, + 0x09, 0xc4, 0x0e, 0x95, 0x0e, 0xc2, 0x0e, 0x8a, + 0x0e, 0x09, 0xc2, 0x0e, 0x8a, 0x0e, 0xa7, 0x0e, + 0xb2, 0x0e, 0x09, 0xae, 0x0e, 0xb5, 0x0e, 0x8a, + 0x0e, 0xb5, 0x0e, 0x11, 0x9f, 0x0e, 0xb2, 0x0e, + 0xa3, 0x0e, 0xa7, 0x0e, 0xb2, 0x0e, 0x94, 0x0e, + 0xb4, 0x0e, 0x99, 0x0e, 0x17, 0xad, 0x0e, 0xcd, + 0x0e, 0xa3, 0x0e, 0x94, 0x0e, 0xb5, 0x0e, 0x9a, + 0x0e, 0xb5, 0x0e, 0xc0, 0x0e, 0xab, 0x0e, 0xa3, + 0x0e, 0x94, 0x0e, 0x0d, 0x84, 0x0e, 0xcd, 0x0e, + 0xa3, 0x0e, 0xc0, 0x0e, 0x94, 0x0e, 0x94, 0x0e, + 0x07, 0xc1, 0x0e, 0x95, 0x0e, 0xa3, 0x0e, 0x0d, + 0xa1, 0x0e, 0xcd, 0x0e, 0xa3, 0x0e, 0xc0, 0x0e, + 0x94, 0x0e, 0x94, 0x0e, 0x0f, 0x8a, 0x0e, 0xb2, + 0x0e, 0xa3, 0x0e, 0xab, 0x0e, 0xb4, 0x0e, 0xa7, + 0x0e, 0xb2, 0x0e, 0x07, 0xc0, 0x0e, 0xa1, 0x0e, + 0xb5, 0x0e, 0x0b, 0xad, 0x0e, 0xb2, 0x0e, 0x9a, + 0x0e, 0xb2, 0x0e, 0x99, 0x0e, 0x09, 0xad, 0x0e, + 0xb2, 0x0e, 0x8a, 0x0e, 0xb2, 0x0e, 0x07, 0x94, + 0x0e, 0xb5, 0x0e, 0xa3, 0x0e, 0x0d, 0x9a, 0x0e, + 0xa3, 0x0e, 0xb2, 0x0e, 0xa1, 0x0e, 0xb2, 0x0e, + 0x99, 0x0e, 0x0d, 0xc0, 0x0e, 0xad, 0x0e, 0xaa, + 0x0e, 0x9f, 0x0e, 0xb2, 0x0e, 0x99, 0x0e, 0x11, + 0x9f, 0x0e, 0xa3, 0x0e, 0xb2, 0x0e, 0xa7, 0x0e, + 0xb2, 0x0e, 0x94, 0x0e, 0xb4, 0x0e, 0x99, 0x0e, + 0x0b, 0xad, 0x0e, 0xb2, 0x0e, 0x8a, 0x0e, 0xb2, + 0x0e, 0xa3, 0x0e, 0x0d, 0x9a, 0x0e, 0xa3, 0x0e, + 0xb2, 0x0e, 0xc1, 0x0e, 0xa1, 0x0e, 0x99, 0x0e, + 0x11, 0x9b, 0x0e, 0xb5, 0x0e, 0xc0, 0x0e, 0x9b, + 0x0e, 0xb5, 0x0e, 0xc0, 0x0e, 0x8a, 0x0e, 0x8d, + 0x0e, 0x17, 0x81, 0x0e, 0xc8, 0x0e, 0xad, 0x0e, + 0x99, 0x0e, 0x20, 0x00, 0x52, 0x00, 0x2e, 0x00, + 0x4f, 0x00, 0x2e, 0x00, 0x43, 0x00, 0x2e, 0x00, + 0x0c, 0x52, 0x2e, 0x4f, 0x2e, 0x43, 0x2e, 0x12, + 0x63, 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, + 0x73, 0x08, 0x64, 0x61, 0x74, 0x65, 0x08, 0x6c, + 0x61, 0x74, 0x6e, 0x04, 0x6e, 0x75, 0x10, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, + 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, + 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x26, + 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, + 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0x1e, 0x6e, 0x65, 0x67, 0x61, + 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, + 0x65, 0x72, 0x6e, 0x0e, 0x64, 0x65, 0x63, 0x69, + 0x6d, 0x61, 0x6c, 0x24, 0x7b, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x3a, 0x7b, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, + 0x7d, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0x10, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x63, 0x79, 0x2a, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x7b, 0x70, + 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, + 0x67, 0x6e, 0x7d, 0x40, 0x7b, 0x6d, 0x69, 0x6e, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x7b, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x0e, 0x70, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x10, 0x70, 0x61, 0x74, + 0x74, 0x65, 0x72, 0x6e, 0x73, 0x02, 0x2c, 0x02, + 0x2e, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x1f, + 0x9a, 0x0e, 0xcd, 0x0e, 0xc8, 0x0e, 0x0b, 0x20, + 0xc1, 0x0e, 0xa1, 0x0e, 0xc8, 0x0e, 0x99, 0x0e, + 0x0b, 0x20, 0xc2, 0x0e, 0x95, 0x0e, 0x0b, 0x20, + 0xc0, 0x0e, 0xa5, 0x0e, 0x81, 0x0e, 0x06, 0x6e, + 0x61, 0x6e, 0x02, 0x2b, 0x10, 0x70, 0x6c, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, 0x2d, 0x12, + 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x02, 0x25, 0x16, 0x70, 0x65, 0x72, 0x63, + 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x03, + 0x1e, 0x22, 0x10, 0x69, 0x6e, 0x66, 0x69, 0x6e, + 0x69, 0x74, 0x79, 0x08, 0x6c, 0x61, 0x6f, 0x6f, + 0x0e, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, + 0x04, 0x41, 0x24, 0x06, 0x41, 0x55, 0x44, 0x04, + 0x52, 0x24, 0x06, 0x42, 0x52, 0x4c, 0x06, 0x43, + 0x41, 0x24, 0x06, 0x43, 0x41, 0x44, 0x06, 0x43, + 0x4e, 0xa5, 0x06, 0x43, 0x4e, 0x59, 0x03, 0xac, + 0x20, 0x06, 0x45, 0x55, 0x52, 0x02, 0xa3, 0x06, + 0x47, 0x42, 0x50, 0x06, 0x48, 0x4b, 0x24, 0x06, + 0x48, 0x4b, 0x44, 0x03, 0xaa, 0x20, 0x06, 0x49, + 0x4c, 0x53, 0x03, 0xb9, 0x20, 0x06, 0x49, 0x4e, + 0x52, 0x06, 0x4a, 0x50, 0xa5, 0x06, 0x4a, 0x50, + 0x59, 0x03, 0xa9, 0x20, 0x06, 0x4b, 0x52, 0x57, + 0x03, 0xad, 0x20, 0x06, 0x4c, 0x41, 0x4b, 0x06, + 0x4d, 0x58, 0x24, 0x06, 0x4d, 0x58, 0x4e, 0x06, + 0x4e, 0x5a, 0x24, 0x06, 0x4e, 0x5a, 0x44, 0x03, + 0x3f, 0x0e, 0x06, 0x54, 0x48, 0x42, 0x06, 0x4e, + 0x54, 0x24, 0x06, 0x54, 0x57, 0x44, 0x06, 0x55, + 0x53, 0x24, 0x06, 0x55, 0x53, 0x44, 0x03, 0xab, + 0x20, 0x06, 0x56, 0x4e, 0x44, 0x08, 0x46, 0x43, + 0x46, 0x41, 0x06, 0x58, 0x41, 0x46, 0x06, 0x45, + 0x43, 0x24, 0x06, 0x58, 0x43, 0x44, 0x06, 0x43, + 0x46, 0x41, 0x06, 0x58, 0x4f, 0x46, 0x08, 0x43, + 0x46, 0x50, 0x46, 0x06, 0x58, 0x50, 0x46, 0x14, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, + 0x65, 0x73, 0x52, 0x6e, 0x6f, 0x64, 0x65, 0x5f, + 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, + 0x69, 0x6e, 0x74, 0x6c, 0x2f, 0x6c, 0x6f, 0x63, + 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, + 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x70, 0x2f, 0x6c, + 0x6f, 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, + 0x9e, 0x01, 0x00, 0x01, 0x00, 0x27, 0x00, 0xd2, + 0x02, 0xcf, 0x68, 0x01, 0xa0, 0x01, 0x00, 0x00, + 0x00, 0x39, 0xd0, 0x00, 0x00, 0x00, 0x43, 0xd1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd2, 0x00, 0x00, + 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd4, 0x00, 0x00, 0x00, 0x04, 0xd5, 0x00, 0x00, + 0x00, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x04, 0xd7, + 0x00, 0x00, 0x00, 0x04, 0xd8, 0x00, 0x00, 0x00, + 0x04, 0xd9, 0x00, 0x00, 0x00, 0x04, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xdb, 0x00, 0x00, 0x00, 0x04, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, + 0x00, 0x04, 0xde, 0x00, 0x00, 0x00, 0x04, 0xdf, + 0x00, 0x00, 0x00, 0x04, 0xe0, 0x00, 0x00, 0x00, + 0x04, 0xe1, 0x00, 0x00, 0x00, 0x04, 0xe2, 0x00, + 0x00, 0x00, 0x26, 0x0f, 0x00, 0x4d, 0xe3, 0x00, + 0x00, 0x00, 0x0a, 0x4d, 0xe4, 0x00, 0x00, 0x00, + 0x09, 0x4d, 0xe5, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xe9, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, + 0xed, 0x00, 0x00, 0x00, 0x04, 0xee, 0x00, 0x00, + 0x00, 0x4d, 0xef, 0x00, 0x00, 0x00, 0x04, 0xf0, + 0x00, 0x00, 0x00, 0x4d, 0xf1, 0x00, 0x00, 0x00, + 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xf3, 0x00, + 0x00, 0x00, 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, + 0xf5, 0x00, 0x00, 0x00, 0x04, 0xf6, 0x00, 0x00, + 0x00, 0x4d, 0xf7, 0x00, 0x00, 0x00, 0x04, 0xf8, + 0x00, 0x00, 0x00, 0x4d, 0xf9, 0x00, 0x00, 0x00, + 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xfb, 0x00, + 0x00, 0x00, 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, + 0xfd, 0x00, 0x00, 0x00, 0x04, 0xfe, 0x00, 0x00, + 0x00, 0x4d, 0xff, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x01, 0x00, 0x00, 0x4d, 0x01, 0x01, 0x00, 0x00, + 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, 0x03, 0x01, + 0x00, 0x00, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, + 0x05, 0x01, 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, + 0x00, 0x4d, 0x07, 0x01, 0x00, 0x00, 0x04, 0x08, + 0x01, 0x00, 0x00, 0x4d, 0x09, 0x01, 0x00, 0x00, + 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x0b, 0x01, + 0x00, 0x00, 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, + 0x0d, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x01, 0x00, + 0x00, 0x4d, 0x0f, 0x01, 0x00, 0x00, 0x04, 0x10, + 0x01, 0x00, 0x00, 0x4d, 0x11, 0x01, 0x00, 0x00, + 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, 0x13, 0x01, + 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, + 0x15, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, + 0x00, 0x4d, 0x17, 0x01, 0x00, 0x00, 0x04, 0x18, + 0x01, 0x00, 0x00, 0x4d, 0x19, 0x01, 0x00, 0x00, + 0x04, 0x1a, 0x01, 0x00, 0x00, 0x4d, 0x1b, 0x01, + 0x00, 0x00, 0x04, 0x1c, 0x01, 0x00, 0x00, 0x4d, + 0x1d, 0x01, 0x00, 0x00, 0x04, 0x1e, 0x01, 0x00, + 0x00, 0x4d, 0x1f, 0x01, 0x00, 0x00, 0x04, 0x20, + 0x01, 0x00, 0x00, 0x4d, 0x21, 0x01, 0x00, 0x00, + 0x04, 0x22, 0x01, 0x00, 0x00, 0x4d, 0x23, 0x01, + 0x00, 0x00, 0x04, 0x24, 0x01, 0x00, 0x00, 0x4d, + 0x24, 0x01, 0x00, 0x00, 0x04, 0x25, 0x01, 0x00, + 0x00, 0x4d, 0x26, 0x01, 0x00, 0x00, 0x04, 0x27, + 0x01, 0x00, 0x00, 0x4d, 0x28, 0x01, 0x00, 0x00, + 0x04, 0x29, 0x01, 0x00, 0x00, 0x4d, 0x2a, 0x01, + 0x00, 0x00, 0x04, 0x2b, 0x01, 0x00, 0x00, 0x4d, + 0x2c, 0x01, 0x00, 0x00, 0x04, 0x2d, 0x01, 0x00, + 0x00, 0x4d, 0x2e, 0x01, 0x00, 0x00, 0x04, 0x2f, + 0x01, 0x00, 0x00, 0x4d, 0x30, 0x01, 0x00, 0x00, + 0x04, 0x31, 0x01, 0x00, 0x00, 0x4d, 0x32, 0x01, + 0x00, 0x00, 0x04, 0x33, 0x01, 0x00, 0x00, 0x4d, + 0x34, 0x01, 0x00, 0x00, 0x04, 0x35, 0x01, 0x00, + 0x00, 0x4d, 0x36, 0x01, 0x00, 0x00, 0x4d, 0x37, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x38, 0x01, 0x00, + 0x00, 0x4d, 0x39, 0x01, 0x00, 0x00, 0x04, 0x3a, + 0x01, 0x00, 0x00, 0x4d, 0x3b, 0x01, 0x00, 0x00, + 0x04, 0x2d, 0x01, 0x00, 0x00, 0x4d, 0x2e, 0x01, + 0x00, 0x00, 0x04, 0x27, 0x01, 0x00, 0x00, 0x4d, + 0x28, 0x01, 0x00, 0x00, 0x4d, 0x3c, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x3d, 0x01, 0x00, 0x00, 0x4d, + 0x3e, 0x01, 0x00, 0x00, 0x04, 0x3f, 0x01, 0x00, + 0x00, 0x4d, 0x40, 0x01, 0x00, 0x00, 0x04, 0x41, + 0x01, 0x00, 0x00, 0x4d, 0x09, 0x01, 0x00, 0x00, + 0x04, 0x42, 0x01, 0x00, 0x00, 0x4d, 0x05, 0x01, + 0x00, 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x4d, + 0x44, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x0b, 0xbe, + 0x00, 0xbe, 0x01, 0xbe, 0x02, 0xbe, 0x03, 0xbe, + 0x04, 0xbe, 0x05, 0xbe, 0x06, 0xbe, 0x07, 0xbe, + 0x08, 0xbe, 0x09, 0xbe, 0x0a, 0xbe, 0x0b, 0x26, + 0x0c, 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, + 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x5e, 0x01, 0x00, 0x00, 0x0b, 0xbe, 0x0c, 0xbe, + 0x0d, 0xbe, 0x0e, 0xbe, 0x0f, 0xbe, 0x10, 0xbe, + 0x11, 0xbe, 0x12, 0x26, 0x07, 0x00, 0x4d, 0x45, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x66, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x45, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x68, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x4d, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x4d, 0x6c, 0x01, 0x00, 0x00, + 0x4d, 0x6d, 0x01, 0x00, 0x00, 0x4d, 0xd5, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x13, 0xbe, 0x14, + 0xbe, 0x15, 0xbe, 0x16, 0xbe, 0x17, 0xbe, 0x18, + 0xbe, 0x19, 0xbe, 0x1a, 0xbe, 0x1b, 0xbe, 0x1c, + 0xbe, 0x1d, 0xbe, 0x1e, 0x26, 0x0c, 0x00, 0x4d, + 0x45, 0x01, 0x00, 0x00, 0xbe, 0x1f, 0xbe, 0x20, + 0xbe, 0x21, 0xbe, 0x22, 0xbe, 0x23, 0xbe, 0x24, + 0xbe, 0x25, 0xbe, 0x26, 0xbe, 0x27, 0xbe, 0x28, + 0xbe, 0x29, 0xbe, 0x2a, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0xbe, 0x2b, 0xbe, 0x2c, + 0xbe, 0x2d, 0xbe, 0x2e, 0xbe, 0x2f, 0xbe, 0x30, + 0xbe, 0x31, 0xbe, 0x32, 0xbe, 0x33, 0xbe, 0x34, + 0xbe, 0x35, 0xbe, 0x36, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x5e, 0x01, 0x00, + 0x00, 0x0b, 0xbe, 0x37, 0xbe, 0x38, 0xbe, 0x39, + 0xbe, 0x3a, 0xbe, 0x3b, 0xbe, 0x3c, 0xbe, 0x3d, + 0x26, 0x07, 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x66, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x4d, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x4d, 0x6c, 0x01, 0x00, 0x00, + 0x4d, 0x6d, 0x01, 0x00, 0x00, 0x4d, 0xd6, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x3e, 0xbe, 0x3f, + 0xbe, 0x40, 0xbe, 0x41, 0xbe, 0x42, 0xbe, 0x43, + 0xbe, 0x44, 0xbe, 0x45, 0xbe, 0x46, 0xbe, 0x47, + 0xbe, 0x48, 0xbe, 0x49, 0xbe, 0x4a, 0x26, 0x0d, + 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x5e, 0x01, 0x00, 0x00, 0x0b, 0xbe, 0x4b, + 0xbe, 0x4c, 0xbe, 0x4d, 0xbe, 0x4e, 0xbe, 0x4f, + 0xbe, 0x50, 0xbe, 0x51, 0x26, 0x07, 0x00, 0x4d, + 0x45, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x66, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x45, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x68, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x4d, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x4d, 0x6c, 0x01, 0x00, 0x00, + 0x4d, 0x6d, 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x52, 0xbe, 0x53, + 0xbe, 0x54, 0xbe, 0x55, 0xbe, 0x56, 0xbe, 0x57, + 0xbe, 0x58, 0xbe, 0x59, 0xbe, 0x5a, 0xbe, 0x5b, + 0xbe, 0x5c, 0xbe, 0x5d, 0x26, 0x0c, 0x00, 0x4d, + 0x45, 0x01, 0x00, 0x00, 0xbe, 0x5e, 0xbe, 0x5f, + 0xbe, 0x60, 0xbe, 0x61, 0xbe, 0x62, 0xbe, 0x63, + 0xbe, 0x64, 0xbe, 0x65, 0xbe, 0x66, 0xbe, 0x67, + 0xbe, 0x68, 0xbe, 0x69, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0xbe, 0x6a, 0xbe, 0x6b, + 0xbe, 0x6c, 0xbe, 0x6d, 0xbe, 0x6e, 0xbe, 0x6f, + 0xbe, 0x70, 0xbe, 0x71, 0xbe, 0x72, 0xbe, 0x73, + 0xbe, 0x74, 0xbe, 0x75, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x5e, 0x01, 0x00, + 0x00, 0x0b, 0xbe, 0x76, 0xbe, 0x77, 0xbe, 0x78, + 0xbe, 0x79, 0xbe, 0x7a, 0xbe, 0x7b, 0xbe, 0x7c, + 0x26, 0x07, 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x66, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x4d, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x4d, 0x6c, 0x01, 0x00, 0x00, + 0x4d, 0x6d, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x7d, 0xbe, 0x7e, + 0xbe, 0x7f, 0xbe, 0x80, 0xbe, 0x81, 0xbe, 0x82, + 0xbe, 0x83, 0xbe, 0x84, 0xbe, 0x85, 0xbe, 0x86, + 0xbe, 0x87, 0xbe, 0x88, 0xbe, 0x89, 0x26, 0x0d, + 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, + 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, + 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, + 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, + 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, + 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, + 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, + 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, + 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x5e, 0x01, 0x00, 0x00, 0x0b, 0xbe, 0x8a, + 0xbe, 0x8b, 0xbe, 0x8c, 0xbe, 0x8d, 0xbe, 0x8e, + 0xbe, 0x8f, 0xbe, 0x90, 0x26, 0x07, 0x00, 0x4d, + 0x45, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x66, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x45, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x68, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x4d, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x4d, 0x6c, 0x01, 0x00, 0x00, + 0x4d, 0x6d, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x91, 0xbe, 0x92, + 0xbe, 0x93, 0xbe, 0x94, 0xbe, 0x95, 0xbe, 0x96, + 0xbe, 0x97, 0xbe, 0x98, 0xbe, 0x99, 0xbe, 0x9a, + 0xbe, 0x9b, 0xbe, 0x9c, 0xbe, 0x9d, 0x26, 0x0d, + 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, + 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, + 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, + 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, + 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, + 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, + 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, + 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, + 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x5e, 0x01, 0x00, 0x00, 0x0b, 0xbe, 0x9e, + 0xbe, 0x9f, 0xbe, 0xa0, 0xbe, 0xa1, 0xbe, 0xa2, + 0xbe, 0xa3, 0xbe, 0xa4, 0x26, 0x07, 0x00, 0x4d, + 0x45, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x66, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x45, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x68, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x4d, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x4d, 0x6c, 0x01, 0x00, + 0x00, 0x4d, 0x6d, 0x01, 0x00, 0x00, 0x4d, 0xd9, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0xa5, 0xbe, + 0xa6, 0xbe, 0xa7, 0xbe, 0xa8, 0xbe, 0xa9, 0xbe, + 0xaa, 0xbe, 0xab, 0xbe, 0xac, 0xbe, 0xad, 0xbe, + 0xae, 0xbe, 0xaf, 0xbe, 0xb0, 0x26, 0x0c, 0x00, + 0x4d, 0x45, 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, + 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, + 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, + 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, + 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, + 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, + 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, + 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, + 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, + 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, + 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, + 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, + 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, + 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, + 0x04, 0x97, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x5e, 0x01, + 0x00, 0x00, 0x0b, 0xbe, 0xb1, 0xbe, 0xb2, 0xbe, + 0xb3, 0xbe, 0xb4, 0xbe, 0xb5, 0xbe, 0xb6, 0xbe, + 0xb7, 0x26, 0x07, 0x00, 0x4d, 0x45, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x66, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, 0x04, + 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x68, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x69, 0x01, 0x00, 0x00, 0x4d, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x4d, 0x6c, 0x01, 0x00, 0x00, 0x4d, 0x6d, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0xb8, 0xbe, 0xb9, 0xbe, 0xba, 0xbe, + 0xbb, 0xbe, 0xbc, 0xbe, 0xbd, 0xbe, 0xbe, 0xbe, + 0xbf, 0xbe, 0xc0, 0xbe, 0xc1, 0xbe, 0xc2, 0xbe, + 0xc3, 0x26, 0x0c, 0x00, 0x4d, 0x45, 0x01, 0x00, + 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x5e, 0x01, 0x00, 0x00, 0x0b, 0xbe, + 0xc4, 0xbe, 0xc5, 0xbe, 0xc6, 0xbe, 0xc7, 0xbe, + 0xc8, 0xbe, 0xc9, 0xbe, 0xca, 0x26, 0x07, 0x00, + 0x4d, 0x45, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x66, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, + 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, + 0x04, 0x9b, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, + 0x4d, 0x45, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, + 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, + 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, + 0x00, 0x26, 0x04, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, + 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, + 0x04, 0x9f, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x68, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x4d, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x4d, 0x6c, 0x01, 0x00, 0x00, 0x4d, + 0x6d, 0x01, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0xcb, 0xbe, 0xcc, 0xbe, + 0xcd, 0xbe, 0xce, 0xbe, 0xcf, 0xbe, 0xd0, 0xbe, + 0xd1, 0xbe, 0xd2, 0xbe, 0xd3, 0xbe, 0xd4, 0xbe, + 0xd5, 0xbe, 0xd6, 0xbe, 0xd7, 0xbe, 0xd8, 0x26, + 0x0e, 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, 0x04, + 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, + 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, + 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, + 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, + 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, + 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, + 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, + 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, + 0x04, 0xad, 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa0, 0x01, + 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, + 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, + 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, + 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, + 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, + 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, + 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, + 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, + 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x5e, 0x01, 0x00, 0x00, + 0x0b, 0xbe, 0xd9, 0xbe, 0xda, 0xbe, 0xdb, 0xbe, + 0xdc, 0xbe, 0xdd, 0xbe, 0xde, 0xbe, 0xdf, 0x26, + 0x07, 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x66, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xae, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, + 0x04, 0xae, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xae, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x68, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x4d, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x4d, + 0x6c, 0x01, 0x00, 0x00, 0x4d, 0x6d, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0xe0, 0xbe, 0xe1, 0xbe, 0xe2, 0xbe, 0xe3, + 0xbe, 0xe4, 0xbe, 0xe5, 0xbe, 0xe6, 0xbe, 0xe7, + 0xbe, 0xe8, 0xbe, 0xe9, 0xbe, 0xea, 0xbe, 0xeb, + 0x26, 0x0c, 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, + 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, + 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, 0x04, + 0xb2, 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, + 0x00, 0x04, 0xb4, 0x01, 0x00, 0x00, 0x04, 0xb5, + 0x01, 0x00, 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, + 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, + 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, 0x04, + 0xba, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, + 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, + 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, + 0x04, 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, + 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, 0x04, + 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, + 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, 0xb9, + 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x5e, 0x01, 0x00, 0x00, 0x0b, 0xbe, 0xec, + 0xbe, 0xed, 0xbe, 0xee, 0xbe, 0xef, 0xbe, 0xf0, + 0xbe, 0xf1, 0xbe, 0xf2, 0x26, 0x07, 0x00, 0x4d, + 0x45, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x66, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x45, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x68, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x4d, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x4d, 0x6c, 0x01, 0x00, + 0x00, 0x4d, 0x6d, 0x01, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0xf3, 0xbe, + 0xf4, 0xbe, 0xf5, 0xbe, 0xf6, 0xbe, 0xf7, 0xbe, + 0xf8, 0xbe, 0xf9, 0xbe, 0xfa, 0xbe, 0xfb, 0xbe, + 0xfc, 0xbe, 0xfd, 0xbe, 0xfe, 0x26, 0x0c, 0x00, + 0x4d, 0x45, 0x01, 0x00, 0x00, 0x04, 0xbc, 0x01, + 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, 0x04, + 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, 0x00, + 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, 0x04, 0xc1, + 0x01, 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, 0x00, + 0x04, 0xc3, 0x01, 0x00, 0x00, 0x04, 0xc4, 0x01, + 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, 0x04, + 0xc6, 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, 0xc9, + 0x01, 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, + 0x04, 0xca, 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, + 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, + 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, + 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, + 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, + 0x04, 0xd2, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x5e, 0x01, + 0x00, 0x00, 0x0b, 0xbe, 0xff, 0x02, 0x00, 0x01, + 0x00, 0x00, 0x02, 0x01, 0x01, 0x00, 0x00, 0x02, + 0x02, 0x01, 0x00, 0x00, 0x02, 0x03, 0x01, 0x00, + 0x00, 0x02, 0x04, 0x01, 0x00, 0x00, 0x02, 0x05, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x45, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x66, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xd3, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x45, 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x68, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x4d, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x4d, 0x6c, 0x01, 0x00, 0x00, + 0x4d, 0x6d, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x02, 0x06, 0x01, 0x00, + 0x00, 0x02, 0x07, 0x01, 0x00, 0x00, 0x02, 0x08, + 0x01, 0x00, 0x00, 0x02, 0x09, 0x01, 0x00, 0x00, + 0x02, 0x0a, 0x01, 0x00, 0x00, 0x02, 0x0b, 0x01, + 0x00, 0x00, 0x02, 0x0c, 0x01, 0x00, 0x00, 0x02, + 0x0d, 0x01, 0x00, 0x00, 0x02, 0x0e, 0x01, 0x00, + 0x00, 0x02, 0x0f, 0x01, 0x00, 0x00, 0x02, 0x10, + 0x01, 0x00, 0x00, 0x02, 0x11, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, + 0x04, 0xbc, 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, + 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, + 0xbf, 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, + 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, 0x04, 0xc2, + 0x01, 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, + 0x04, 0xc4, 0x01, 0x00, 0x00, 0x04, 0xc5, 0x01, + 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, + 0xc7, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, + 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, 0x04, 0xbe, + 0x01, 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, + 0x04, 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, 0x01, + 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, 0x04, + 0xce, 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, + 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, 0xd1, + 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x5e, 0x01, 0x00, 0x00, 0x0b, 0x02, 0x12, + 0x01, 0x00, 0x00, 0x02, 0x13, 0x01, 0x00, 0x00, + 0x02, 0x14, 0x01, 0x00, 0x00, 0x02, 0x15, 0x01, + 0x00, 0x00, 0x02, 0x16, 0x01, 0x00, 0x00, 0x02, + 0x17, 0x01, 0x00, 0x00, 0x02, 0x18, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x45, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x66, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xd3, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x45, 0x01, + 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xd3, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x68, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x69, 0x01, 0x00, 0x00, 0x4d, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x4d, 0x6c, 0x01, 0x00, 0x00, 0x4d, 0x6d, + 0x01, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0x02, 0x19, 0x01, 0x00, 0x00, 0x02, + 0x1a, 0x01, 0x00, 0x00, 0x02, 0x1b, 0x01, 0x00, + 0x00, 0x02, 0x1c, 0x01, 0x00, 0x00, 0x02, 0x1d, + 0x01, 0x00, 0x00, 0x02, 0x1e, 0x01, 0x00, 0x00, + 0x02, 0x1f, 0x01, 0x00, 0x00, 0x02, 0x20, 0x01, + 0x00, 0x00, 0x02, 0x21, 0x01, 0x00, 0x00, 0x02, + 0x22, 0x01, 0x00, 0x00, 0x02, 0x23, 0x01, 0x00, + 0x00, 0x02, 0x24, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, 0x04, 0x46, + 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x5e, + 0x01, 0x00, 0x00, 0x0b, 0x02, 0x25, 0x01, 0x00, + 0x00, 0x02, 0x26, 0x01, 0x00, 0x00, 0x02, 0x27, + 0x01, 0x00, 0x00, 0x02, 0x28, 0x01, 0x00, 0x00, + 0x02, 0x29, 0x01, 0x00, 0x00, 0x02, 0x2a, 0x01, + 0x00, 0x00, 0x02, 0x2b, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x66, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xd4, 0x01, 0x00, 0x00, + 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, + 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, + 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, + 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, + 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, + 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, + 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, + 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, + 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, 0xe3, + 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, + 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, + 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, + 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, + 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, + 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, + 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, + 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, + 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, + 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, + 0x01, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, 0xf4, + 0x01, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, + 0x04, 0xf5, 0x01, 0x00, 0x00, 0x4d, 0x21, 0x00, + 0x00, 0x80, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x4d, + 0x22, 0x00, 0x00, 0x80, 0x04, 0xf7, 0x01, 0x00, + 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, 0xf8, + 0x01, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, + 0x04, 0xf9, 0x01, 0x00, 0x00, 0x4d, 0x25, 0x00, + 0x00, 0x80, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x4d, + 0x26, 0x00, 0x00, 0x80, 0x04, 0xfb, 0x01, 0x00, + 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, 0xfc, + 0x01, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, + 0x04, 0xfd, 0x01, 0x00, 0x00, 0x4d, 0x29, 0x00, + 0x00, 0x80, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x4d, + 0x2a, 0x00, 0x00, 0x80, 0x04, 0xff, 0x01, 0x00, + 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, 0x00, + 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, + 0x04, 0x01, 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, + 0x00, 0x80, 0x04, 0x02, 0x02, 0x00, 0x00, 0x4d, + 0x2e, 0x00, 0x00, 0x80, 0x04, 0x03, 0x02, 0x00, + 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, 0x04, + 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, + 0x04, 0x05, 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, + 0x00, 0x80, 0x04, 0x06, 0x02, 0x00, 0x00, 0x4d, + 0x32, 0x00, 0x00, 0x80, 0x04, 0x07, 0x02, 0x00, + 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, 0x08, + 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, + 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, + 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x4d, + 0x36, 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, 0x00, + 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, 0x0c, + 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, + 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, + 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, + 0x3a, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, + 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, 0x10, + 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, + 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, + 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, + 0x3e, 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, + 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, 0x14, + 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, + 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, + 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, + 0x42, 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, + 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, 0x18, + 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, + 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, + 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, + 0x46, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, + 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, 0x1c, + 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, + 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, + 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, + 0x4a, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, + 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, 0x20, + 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, + 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, + 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, + 0x4e, 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, + 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, 0x24, + 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, + 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, + 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, + 0x52, 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, + 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, 0x28, + 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, + 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, + 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, + 0x56, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, + 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, 0x2c, + 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, + 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, + 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, + 0x5a, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, + 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, 0x30, + 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, + 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, + 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, + 0x5e, 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, + 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, 0x34, + 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, + 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, + 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, + 0x62, 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, + 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, 0x38, + 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, + 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, + 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, + 0x66, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, + 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, 0x3c, + 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, + 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, + 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, + 0x6a, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, + 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, 0x40, + 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, + 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, + 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, + 0x6e, 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, + 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, 0x44, + 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, + 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, + 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, + 0x72, 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, + 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, 0x48, + 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, + 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, + 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, + 0x76, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, + 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, 0x4c, + 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, + 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, + 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, + 0x7a, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, + 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, 0x50, + 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, + 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, + 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, + 0x7e, 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, + 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, 0x54, + 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, + 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, + 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, + 0x82, 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, + 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, 0x58, + 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, + 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, + 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, + 0x86, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, + 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, 0x5c, + 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, + 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, + 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, + 0x8a, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, + 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, 0x60, + 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, + 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, + 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, + 0x8e, 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, + 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, 0x64, + 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, + 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, + 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, + 0x92, 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, + 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, 0x68, + 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, + 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, + 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, + 0x96, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, + 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, 0x6c, + 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, + 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, + 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, + 0x9a, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, + 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, 0x70, + 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, + 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, + 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, + 0x9e, 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, + 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, 0x74, + 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, + 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, + 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, + 0xa2, 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, + 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, 0x78, + 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, + 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, + 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, + 0xa6, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, + 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, 0x7c, + 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, + 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, + 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, + 0xaa, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, + 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, 0x80, + 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, + 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, + 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, + 0xae, 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, + 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, 0x84, + 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, + 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, + 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, + 0xb2, 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, + 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, 0x88, + 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, + 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, + 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, + 0xb6, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, + 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, 0x8c, + 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, + 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, + 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, + 0xba, 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, + 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, 0x90, + 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, + 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, + 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, + 0xbe, 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, + 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, 0x94, + 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, + 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, + 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, + 0xc2, 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, + 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, 0x98, + 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, + 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, + 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, + 0xc6, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, + 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, 0x9c, + 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, + 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, + 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, + 0xca, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, + 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, 0xa0, + 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, + 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, + 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, + 0xce, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, + 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, 0xa4, + 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, + 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, + 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, + 0xd2, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, + 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, 0xa8, + 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, + 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, + 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, + 0xd6, 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, + 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, 0xac, + 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, + 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, + 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, 0xb0, + 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, + 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, 0xb4, + 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, + 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, + 0xe2, 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, + 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, 0xb8, + 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, + 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, + 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, + 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, + 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x80, 0x04, 0x03, 0x01, 0x00, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, 0x45, + 0x01, 0x00, 0x00, 0x04, 0xbe, 0x02, 0x00, 0x00, + 0x04, 0xbf, 0x02, 0x00, 0x00, 0x04, 0xc0, 0x02, + 0x00, 0x00, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x04, + 0xc2, 0x02, 0x00, 0x00, 0x04, 0xc3, 0x02, 0x00, + 0x00, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x04, 0xc5, + 0x02, 0x00, 0x00, 0x04, 0xc6, 0x02, 0x00, 0x00, + 0x04, 0xc7, 0x02, 0x00, 0x00, 0x04, 0xc8, 0x02, + 0x00, 0x00, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x04, + 0xca, 0x02, 0x00, 0x00, 0x04, 0xcb, 0x02, 0x00, + 0x00, 0x04, 0xcc, 0x02, 0x00, 0x00, 0x04, 0xcd, + 0x02, 0x00, 0x00, 0x04, 0xce, 0x02, 0x00, 0x00, + 0x04, 0xcf, 0x02, 0x00, 0x00, 0x04, 0xd0, 0x02, + 0x00, 0x00, 0x04, 0xd1, 0x02, 0x00, 0x00, 0x04, + 0xd2, 0x02, 0x00, 0x00, 0x04, 0xd3, 0x02, 0x00, + 0x00, 0x04, 0xd4, 0x02, 0x00, 0x00, 0x04, 0xd5, + 0x02, 0x00, 0x00, 0x04, 0xd6, 0x02, 0x00, 0x00, + 0x04, 0xd7, 0x02, 0x00, 0x00, 0x04, 0xd8, 0x02, + 0x00, 0x00, 0x04, 0xd9, 0x02, 0x00, 0x00, 0x04, + 0xda, 0x02, 0x00, 0x00, 0x04, 0xdb, 0x02, 0x00, + 0x00, 0x04, 0xdc, 0x02, 0x00, 0x00, 0x04, 0xdd, + 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, 0xde, + 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, + 0x04, 0xdf, 0x02, 0x00, 0x00, 0x4d, 0x21, 0x00, + 0x00, 0x80, 0x04, 0xe0, 0x02, 0x00, 0x00, 0x4d, + 0x22, 0x00, 0x00, 0x80, 0x04, 0xe1, 0x02, 0x00, + 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, 0xe2, + 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, + 0x04, 0xe3, 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, + 0x00, 0x80, 0x04, 0xe4, 0x02, 0x00, 0x00, 0x4d, + 0x26, 0x00, 0x00, 0x80, 0x04, 0xe5, 0x02, 0x00, + 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, 0xe6, + 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, + 0x04, 0xe7, 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, + 0x00, 0x80, 0x04, 0xe8, 0x02, 0x00, 0x00, 0x4d, + 0x2a, 0x00, 0x00, 0x80, 0x04, 0xe9, 0x02, 0x00, + 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, 0xea, + 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, + 0x04, 0xeb, 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, + 0x00, 0x80, 0x04, 0xec, 0x02, 0x00, 0x00, 0x4d, + 0x2e, 0x00, 0x00, 0x80, 0x04, 0xed, 0x02, 0x00, + 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, 0xee, + 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, + 0x04, 0xef, 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, + 0x00, 0x80, 0x04, 0xf0, 0x02, 0x00, 0x00, 0x4d, + 0x32, 0x00, 0x00, 0x80, 0x04, 0xf1, 0x02, 0x00, + 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, 0xf2, + 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, + 0x04, 0xf3, 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, + 0x00, 0x80, 0x04, 0xf4, 0x02, 0x00, 0x00, 0x4d, + 0x36, 0x00, 0x00, 0x80, 0x04, 0xf5, 0x02, 0x00, + 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, 0xf6, + 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, + 0x04, 0xf7, 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, + 0x00, 0x80, 0x04, 0xf8, 0x02, 0x00, 0x00, 0x4d, + 0x3a, 0x00, 0x00, 0x80, 0x04, 0xf9, 0x02, 0x00, + 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, 0xfa, + 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, + 0x04, 0xfb, 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, + 0x00, 0x80, 0x04, 0xfc, 0x02, 0x00, 0x00, 0x4d, + 0x3e, 0x00, 0x00, 0x80, 0x04, 0xfd, 0x02, 0x00, + 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, 0xfe, + 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, + 0x04, 0xff, 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, + 0x00, 0x80, 0x04, 0x00, 0x03, 0x00, 0x00, 0x4d, + 0x42, 0x00, 0x00, 0x80, 0x04, 0x01, 0x03, 0x00, + 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, 0x02, + 0x03, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, + 0x04, 0x03, 0x03, 0x00, 0x00, 0x4d, 0x45, 0x00, + 0x00, 0x80, 0x04, 0x04, 0x03, 0x00, 0x00, 0x4d, + 0x46, 0x00, 0x00, 0x80, 0x04, 0x05, 0x03, 0x00, + 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, 0x06, + 0x03, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, + 0x04, 0x07, 0x03, 0x00, 0x00, 0x4d, 0x49, 0x00, + 0x00, 0x80, 0x04, 0x08, 0x03, 0x00, 0x00, 0x4d, + 0x4a, 0x00, 0x00, 0x80, 0x04, 0x09, 0x03, 0x00, + 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, 0x0a, + 0x03, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, + 0x04, 0x0b, 0x03, 0x00, 0x00, 0x4d, 0x4d, 0x00, + 0x00, 0x80, 0x04, 0x0c, 0x03, 0x00, 0x00, 0x4d, + 0x4e, 0x00, 0x00, 0x80, 0x04, 0x0d, 0x03, 0x00, + 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, 0x0e, + 0x03, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, + 0x04, 0x0f, 0x03, 0x00, 0x00, 0x4d, 0x51, 0x00, + 0x00, 0x80, 0x04, 0x10, 0x03, 0x00, 0x00, 0x4d, + 0x52, 0x00, 0x00, 0x80, 0x04, 0x11, 0x03, 0x00, + 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, 0x12, + 0x03, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, + 0x04, 0x13, 0x03, 0x00, 0x00, 0x4d, 0x55, 0x00, + 0x00, 0x80, 0x04, 0x14, 0x03, 0x00, 0x00, 0x4d, + 0x56, 0x00, 0x00, 0x80, 0x04, 0x15, 0x03, 0x00, + 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, 0x16, + 0x03, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, + 0x04, 0x17, 0x03, 0x00, 0x00, 0x4d, 0x59, 0x00, + 0x00, 0x80, 0x04, 0x18, 0x03, 0x00, 0x00, 0x4d, + 0x5a, 0x00, 0x00, 0x80, 0x04, 0x19, 0x03, 0x00, + 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, 0x1a, + 0x03, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, + 0x04, 0x1b, 0x03, 0x00, 0x00, 0x4d, 0x5d, 0x00, + 0x00, 0x80, 0x04, 0x1c, 0x03, 0x00, 0x00, 0x4d, + 0x5e, 0x00, 0x00, 0x80, 0x04, 0x1d, 0x03, 0x00, + 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, 0x1e, + 0x03, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, + 0x04, 0x1f, 0x03, 0x00, 0x00, 0x4d, 0x61, 0x00, + 0x00, 0x80, 0x04, 0x20, 0x03, 0x00, 0x00, 0x4d, + 0x62, 0x00, 0x00, 0x80, 0x04, 0x21, 0x03, 0x00, + 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, 0x22, + 0x03, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, + 0x04, 0x23, 0x03, 0x00, 0x00, 0x4d, 0x65, 0x00, + 0x00, 0x80, 0x04, 0x24, 0x03, 0x00, 0x00, 0x4d, + 0x66, 0x00, 0x00, 0x80, 0x04, 0x25, 0x03, 0x00, + 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, 0x26, + 0x03, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, + 0x04, 0x27, 0x03, 0x00, 0x00, 0x4d, 0x69, 0x00, + 0x00, 0x80, 0x04, 0x28, 0x03, 0x00, 0x00, 0x4d, + 0x6a, 0x00, 0x00, 0x80, 0x04, 0x29, 0x03, 0x00, + 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, 0x2a, + 0x03, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, + 0x04, 0x2b, 0x03, 0x00, 0x00, 0x4d, 0x6d, 0x00, + 0x00, 0x80, 0x04, 0x2c, 0x03, 0x00, 0x00, 0x4d, + 0x6e, 0x00, 0x00, 0x80, 0x04, 0x2d, 0x03, 0x00, + 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, 0x2e, + 0x03, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, + 0x04, 0x2f, 0x03, 0x00, 0x00, 0x4d, 0x71, 0x00, + 0x00, 0x80, 0x04, 0x30, 0x03, 0x00, 0x00, 0x4d, + 0x72, 0x00, 0x00, 0x80, 0x04, 0x31, 0x03, 0x00, + 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, 0x32, + 0x03, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, + 0x04, 0x33, 0x03, 0x00, 0x00, 0x4d, 0x75, 0x00, + 0x00, 0x80, 0x04, 0x34, 0x03, 0x00, 0x00, 0x4d, + 0x76, 0x00, 0x00, 0x80, 0x04, 0x35, 0x03, 0x00, + 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, 0x36, + 0x03, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, + 0x04, 0x37, 0x03, 0x00, 0x00, 0x4d, 0x79, 0x00, + 0x00, 0x80, 0x04, 0x38, 0x03, 0x00, 0x00, 0x4d, + 0x7a, 0x00, 0x00, 0x80, 0x04, 0x39, 0x03, 0x00, + 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, 0x3a, + 0x03, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, + 0x04, 0x3b, 0x03, 0x00, 0x00, 0x4d, 0x7d, 0x00, + 0x00, 0x80, 0x04, 0x3c, 0x03, 0x00, 0x00, 0x4d, + 0x7e, 0x00, 0x00, 0x80, 0x04, 0x3d, 0x03, 0x00, + 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, 0x3e, + 0x03, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, + 0x04, 0x3f, 0x03, 0x00, 0x00, 0x4d, 0x81, 0x00, + 0x00, 0x80, 0x04, 0x40, 0x03, 0x00, 0x00, 0x4d, + 0x82, 0x00, 0x00, 0x80, 0x04, 0x41, 0x03, 0x00, + 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, 0x42, + 0x03, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, + 0x04, 0x43, 0x03, 0x00, 0x00, 0x4d, 0x85, 0x00, + 0x00, 0x80, 0x04, 0x44, 0x03, 0x00, 0x00, 0x4d, + 0x86, 0x00, 0x00, 0x80, 0x04, 0x45, 0x03, 0x00, + 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, 0x46, + 0x03, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, + 0x04, 0x47, 0x03, 0x00, 0x00, 0x4d, 0x89, 0x00, + 0x00, 0x80, 0x04, 0x48, 0x03, 0x00, 0x00, 0x4d, + 0x8a, 0x00, 0x00, 0x80, 0x04, 0x49, 0x03, 0x00, + 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, 0x4a, + 0x03, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, + 0x04, 0x4b, 0x03, 0x00, 0x00, 0x4d, 0x8d, 0x00, + 0x00, 0x80, 0x04, 0x4c, 0x03, 0x00, 0x00, 0x4d, + 0x8e, 0x00, 0x00, 0x80, 0x04, 0x4d, 0x03, 0x00, + 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, 0x4e, + 0x03, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, + 0x04, 0x4f, 0x03, 0x00, 0x00, 0x4d, 0x91, 0x00, + 0x00, 0x80, 0x04, 0x50, 0x03, 0x00, 0x00, 0x4d, + 0x92, 0x00, 0x00, 0x80, 0x04, 0x51, 0x03, 0x00, + 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, 0x52, + 0x03, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, + 0x04, 0x53, 0x03, 0x00, 0x00, 0x4d, 0x95, 0x00, + 0x00, 0x80, 0x04, 0x54, 0x03, 0x00, 0x00, 0x4d, + 0x96, 0x00, 0x00, 0x80, 0x04, 0x55, 0x03, 0x00, + 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, 0x56, + 0x03, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, + 0x04, 0x57, 0x03, 0x00, 0x00, 0x4d, 0x99, 0x00, + 0x00, 0x80, 0x04, 0x58, 0x03, 0x00, 0x00, 0x4d, + 0x9a, 0x00, 0x00, 0x80, 0x04, 0x59, 0x03, 0x00, + 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, 0x5a, + 0x03, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, + 0x04, 0x5b, 0x03, 0x00, 0x00, 0x4d, 0x9d, 0x00, + 0x00, 0x80, 0x04, 0x5c, 0x03, 0x00, 0x00, 0x4d, + 0x9e, 0x00, 0x00, 0x80, 0x04, 0x5d, 0x03, 0x00, + 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, 0x5e, + 0x03, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, + 0x04, 0x5f, 0x03, 0x00, 0x00, 0x4d, 0xa1, 0x00, + 0x00, 0x80, 0x04, 0x60, 0x03, 0x00, 0x00, 0x4d, + 0xa2, 0x00, 0x00, 0x80, 0x04, 0x61, 0x03, 0x00, + 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, 0x62, + 0x03, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, + 0x04, 0x63, 0x03, 0x00, 0x00, 0x4d, 0xa5, 0x00, + 0x00, 0x80, 0x04, 0x64, 0x03, 0x00, 0x00, 0x4d, + 0xa6, 0x00, 0x00, 0x80, 0x04, 0x65, 0x03, 0x00, + 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, 0x66, + 0x03, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, + 0x04, 0x67, 0x03, 0x00, 0x00, 0x4d, 0xa9, 0x00, + 0x00, 0x80, 0x04, 0x68, 0x03, 0x00, 0x00, 0x4d, + 0xaa, 0x00, 0x00, 0x80, 0x04, 0x69, 0x03, 0x00, + 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, 0x6a, + 0x03, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, + 0x04, 0x6b, 0x03, 0x00, 0x00, 0x4d, 0xad, 0x00, + 0x00, 0x80, 0x04, 0x6c, 0x03, 0x00, 0x00, 0x4d, + 0xae, 0x00, 0x00, 0x80, 0x04, 0x6d, 0x03, 0x00, + 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, 0x6e, + 0x03, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, + 0x04, 0x6f, 0x03, 0x00, 0x00, 0x4d, 0xb1, 0x00, + 0x00, 0x80, 0x04, 0x70, 0x03, 0x00, 0x00, 0x4d, + 0xb2, 0x00, 0x00, 0x80, 0x04, 0x71, 0x03, 0x00, + 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, 0x72, + 0x03, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, + 0x04, 0x73, 0x03, 0x00, 0x00, 0x4d, 0xb5, 0x00, + 0x00, 0x80, 0x04, 0x74, 0x03, 0x00, 0x00, 0x4d, + 0xb6, 0x00, 0x00, 0x80, 0x04, 0x75, 0x03, 0x00, + 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, 0x76, + 0x03, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, + 0x04, 0x77, 0x03, 0x00, 0x00, 0x4d, 0xb9, 0x00, + 0x00, 0x80, 0x04, 0x78, 0x03, 0x00, 0x00, 0x4d, + 0xba, 0x00, 0x00, 0x80, 0x04, 0x79, 0x03, 0x00, + 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, 0x7a, + 0x03, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, + 0x04, 0x7b, 0x03, 0x00, 0x00, 0x4d, 0xbd, 0x00, + 0x00, 0x80, 0x04, 0x7c, 0x03, 0x00, 0x00, 0x4d, + 0xbe, 0x00, 0x00, 0x80, 0x04, 0x7d, 0x03, 0x00, + 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, 0x7e, + 0x03, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, + 0x04, 0x7f, 0x03, 0x00, 0x00, 0x4d, 0xc1, 0x00, + 0x00, 0x80, 0x04, 0x80, 0x03, 0x00, 0x00, 0x4d, + 0xc2, 0x00, 0x00, 0x80, 0x04, 0x81, 0x03, 0x00, + 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, 0x82, + 0x03, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, + 0x04, 0x83, 0x03, 0x00, 0x00, 0x4d, 0xc5, 0x00, + 0x00, 0x80, 0x04, 0x84, 0x03, 0x00, 0x00, 0x4d, + 0xc6, 0x00, 0x00, 0x80, 0x04, 0x85, 0x03, 0x00, + 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, 0x86, + 0x03, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, + 0x04, 0x87, 0x03, 0x00, 0x00, 0x4d, 0xc9, 0x00, + 0x00, 0x80, 0x04, 0x88, 0x03, 0x00, 0x00, 0x4d, + 0xca, 0x00, 0x00, 0x80, 0x04, 0x89, 0x03, 0x00, + 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, 0x8a, + 0x03, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, + 0x04, 0x8b, 0x03, 0x00, 0x00, 0x4d, 0xcd, 0x00, + 0x00, 0x80, 0x04, 0x8c, 0x03, 0x00, 0x00, 0x4d, + 0xce, 0x00, 0x00, 0x80, 0x04, 0x8d, 0x03, 0x00, + 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, 0x8e, + 0x03, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, + 0x04, 0x8f, 0x03, 0x00, 0x00, 0x4d, 0xd1, 0x00, + 0x00, 0x80, 0x04, 0x90, 0x03, 0x00, 0x00, 0x4d, + 0xd2, 0x00, 0x00, 0x80, 0x04, 0x91, 0x03, 0x00, + 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, 0x92, + 0x03, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, + 0x04, 0x93, 0x03, 0x00, 0x00, 0x4d, 0xd5, 0x00, + 0x00, 0x80, 0x04, 0x94, 0x03, 0x00, 0x00, 0x4d, + 0xd6, 0x00, 0x00, 0x80, 0x04, 0x95, 0x03, 0x00, + 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, 0x96, + 0x03, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, + 0x04, 0x97, 0x03, 0x00, 0x00, 0x4d, 0xd9, 0x00, + 0x00, 0x80, 0x04, 0x98, 0x03, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x80, 0x04, 0x99, 0x03, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, 0x9a, + 0x03, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, + 0x04, 0x9b, 0x03, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x80, 0x04, 0x9c, 0x03, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x80, 0x04, 0x9d, 0x03, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, 0x9e, + 0x03, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, + 0x04, 0x9f, 0x03, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x80, 0x04, 0xa0, 0x03, 0x00, 0x00, 0x4d, + 0xe2, 0x00, 0x00, 0x80, 0x04, 0xa1, 0x03, 0x00, + 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, 0xa2, + 0x03, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, + 0x04, 0xa3, 0x03, 0x00, 0x00, 0x4d, 0xe5, 0x00, + 0x00, 0x80, 0x04, 0xa4, 0x03, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x80, 0x04, 0xa5, 0x03, 0x00, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, 0xa6, + 0x03, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, + 0x04, 0xa7, 0x03, 0x00, 0x00, 0x4d, 0xe9, 0x00, + 0x00, 0x80, 0x04, 0xa8, 0x03, 0x00, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x80, 0x04, 0xa9, 0x03, 0x00, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xbe, 0x02, 0x00, 0x00, + 0x04, 0xbf, 0x02, 0x00, 0x00, 0x04, 0xc0, 0x02, + 0x00, 0x00, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x04, + 0xc2, 0x02, 0x00, 0x00, 0x04, 0xc3, 0x02, 0x00, + 0x00, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x04, 0xc5, + 0x02, 0x00, 0x00, 0x04, 0xc6, 0x02, 0x00, 0x00, + 0x04, 0xc7, 0x02, 0x00, 0x00, 0x04, 0xc8, 0x02, + 0x00, 0x00, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x04, + 0xca, 0x02, 0x00, 0x00, 0x04, 0xcb, 0x02, 0x00, + 0x00, 0x04, 0xcc, 0x02, 0x00, 0x00, 0x04, 0xcd, + 0x02, 0x00, 0x00, 0x04, 0xce, 0x02, 0x00, 0x00, + 0x04, 0xcf, 0x02, 0x00, 0x00, 0x04, 0xd0, 0x02, + 0x00, 0x00, 0x04, 0xd1, 0x02, 0x00, 0x00, 0x04, + 0xd2, 0x02, 0x00, 0x00, 0x04, 0xd3, 0x02, 0x00, + 0x00, 0x04, 0xd4, 0x02, 0x00, 0x00, 0x04, 0xd5, + 0x02, 0x00, 0x00, 0x04, 0xd6, 0x02, 0x00, 0x00, + 0x04, 0xd7, 0x02, 0x00, 0x00, 0x04, 0xd8, 0x02, + 0x00, 0x00, 0x04, 0xd9, 0x02, 0x00, 0x00, 0x04, + 0xda, 0x02, 0x00, 0x00, 0x04, 0xdb, 0x02, 0x00, + 0x00, 0x04, 0xdc, 0x02, 0x00, 0x00, 0x04, 0xdd, + 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, 0xde, + 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, + 0x04, 0xdf, 0x02, 0x00, 0x00, 0x4d, 0x21, 0x00, + 0x00, 0x80, 0x04, 0xe0, 0x02, 0x00, 0x00, 0x4d, + 0x22, 0x00, 0x00, 0x80, 0x04, 0xe1, 0x02, 0x00, + 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, 0xe2, + 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, + 0x04, 0xe3, 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, + 0x00, 0x80, 0x04, 0xe4, 0x02, 0x00, 0x00, 0x4d, + 0x26, 0x00, 0x00, 0x80, 0x04, 0xe5, 0x02, 0x00, + 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, 0xe6, + 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, + 0x04, 0xe7, 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, + 0x00, 0x80, 0x04, 0xe8, 0x02, 0x00, 0x00, 0x4d, + 0x2a, 0x00, 0x00, 0x80, 0x04, 0xe9, 0x02, 0x00, + 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, 0xea, + 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, + 0x04, 0xeb, 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, + 0x00, 0x80, 0x04, 0xec, 0x02, 0x00, 0x00, 0x4d, + 0x2e, 0x00, 0x00, 0x80, 0x04, 0xed, 0x02, 0x00, + 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, 0xee, + 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, + 0x04, 0xef, 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, + 0x00, 0x80, 0x04, 0xf0, 0x02, 0x00, 0x00, 0x4d, + 0x32, 0x00, 0x00, 0x80, 0x04, 0xf1, 0x02, 0x00, + 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, 0xf2, + 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, + 0x04, 0xf3, 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, + 0x00, 0x80, 0x04, 0xf4, 0x02, 0x00, 0x00, 0x4d, + 0x36, 0x00, 0x00, 0x80, 0x04, 0xf5, 0x02, 0x00, + 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, 0xf6, + 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, + 0x04, 0xf7, 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, + 0x00, 0x80, 0x04, 0xf8, 0x02, 0x00, 0x00, 0x4d, + 0x3a, 0x00, 0x00, 0x80, 0x04, 0xf9, 0x02, 0x00, + 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, 0xfa, + 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, + 0x04, 0xfb, 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, + 0x00, 0x80, 0x04, 0xfc, 0x02, 0x00, 0x00, 0x4d, + 0x3e, 0x00, 0x00, 0x80, 0x04, 0xfd, 0x02, 0x00, + 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, 0xfe, + 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, + 0x04, 0xff, 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, + 0x00, 0x80, 0x04, 0x00, 0x03, 0x00, 0x00, 0x4d, + 0x42, 0x00, 0x00, 0x80, 0x04, 0x01, 0x03, 0x00, + 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, 0x02, + 0x03, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, + 0x04, 0x03, 0x03, 0x00, 0x00, 0x4d, 0x45, 0x00, + 0x00, 0x80, 0x04, 0x04, 0x03, 0x00, 0x00, 0x4d, + 0x46, 0x00, 0x00, 0x80, 0x04, 0x05, 0x03, 0x00, + 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, 0x06, + 0x03, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, + 0x04, 0x07, 0x03, 0x00, 0x00, 0x4d, 0x49, 0x00, + 0x00, 0x80, 0x04, 0x08, 0x03, 0x00, 0x00, 0x4d, + 0x4a, 0x00, 0x00, 0x80, 0x04, 0x09, 0x03, 0x00, + 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, 0x0a, + 0x03, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, + 0x04, 0x0b, 0x03, 0x00, 0x00, 0x4d, 0x4d, 0x00, + 0x00, 0x80, 0x04, 0x0c, 0x03, 0x00, 0x00, 0x4d, + 0x4e, 0x00, 0x00, 0x80, 0x04, 0x0d, 0x03, 0x00, + 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, 0x0e, + 0x03, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, + 0x04, 0x0f, 0x03, 0x00, 0x00, 0x4d, 0x51, 0x00, + 0x00, 0x80, 0x04, 0x10, 0x03, 0x00, 0x00, 0x4d, + 0x52, 0x00, 0x00, 0x80, 0x04, 0x11, 0x03, 0x00, + 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, 0x12, + 0x03, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, + 0x04, 0x13, 0x03, 0x00, 0x00, 0x4d, 0x55, 0x00, + 0x00, 0x80, 0x04, 0x14, 0x03, 0x00, 0x00, 0x4d, + 0x56, 0x00, 0x00, 0x80, 0x04, 0x15, 0x03, 0x00, + 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, 0x16, + 0x03, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, + 0x04, 0x17, 0x03, 0x00, 0x00, 0x4d, 0x59, 0x00, + 0x00, 0x80, 0x04, 0x18, 0x03, 0x00, 0x00, 0x4d, + 0x5a, 0x00, 0x00, 0x80, 0x04, 0x19, 0x03, 0x00, + 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, 0x1a, + 0x03, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, + 0x04, 0x1b, 0x03, 0x00, 0x00, 0x4d, 0x5d, 0x00, + 0x00, 0x80, 0x04, 0x1c, 0x03, 0x00, 0x00, 0x4d, + 0x5e, 0x00, 0x00, 0x80, 0x04, 0x1d, 0x03, 0x00, + 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, 0x1e, + 0x03, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, + 0x04, 0x1f, 0x03, 0x00, 0x00, 0x4d, 0x61, 0x00, + 0x00, 0x80, 0x04, 0x20, 0x03, 0x00, 0x00, 0x4d, + 0x62, 0x00, 0x00, 0x80, 0x04, 0x21, 0x03, 0x00, + 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, 0x22, + 0x03, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, + 0x04, 0x23, 0x03, 0x00, 0x00, 0x4d, 0x65, 0x00, + 0x00, 0x80, 0x04, 0x24, 0x03, 0x00, 0x00, 0x4d, + 0x66, 0x00, 0x00, 0x80, 0x04, 0x25, 0x03, 0x00, + 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, 0x26, + 0x03, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, + 0x04, 0x27, 0x03, 0x00, 0x00, 0x4d, 0x69, 0x00, + 0x00, 0x80, 0x04, 0x28, 0x03, 0x00, 0x00, 0x4d, + 0x6a, 0x00, 0x00, 0x80, 0x04, 0x29, 0x03, 0x00, + 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, 0x2a, + 0x03, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, + 0x04, 0x2b, 0x03, 0x00, 0x00, 0x4d, 0x6d, 0x00, + 0x00, 0x80, 0x04, 0x2c, 0x03, 0x00, 0x00, 0x4d, + 0x6e, 0x00, 0x00, 0x80, 0x04, 0x2d, 0x03, 0x00, + 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, 0x2e, + 0x03, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, + 0x04, 0x2f, 0x03, 0x00, 0x00, 0x4d, 0x71, 0x00, + 0x00, 0x80, 0x04, 0x30, 0x03, 0x00, 0x00, 0x4d, + 0x72, 0x00, 0x00, 0x80, 0x04, 0x31, 0x03, 0x00, + 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, 0x32, + 0x03, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, + 0x04, 0x33, 0x03, 0x00, 0x00, 0x4d, 0x75, 0x00, + 0x00, 0x80, 0x04, 0x34, 0x03, 0x00, 0x00, 0x4d, + 0x76, 0x00, 0x00, 0x80, 0x04, 0x35, 0x03, 0x00, + 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, 0x36, + 0x03, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, + 0x04, 0x37, 0x03, 0x00, 0x00, 0x4d, 0x79, 0x00, + 0x00, 0x80, 0x04, 0x38, 0x03, 0x00, 0x00, 0x4d, + 0x7a, 0x00, 0x00, 0x80, 0x04, 0x39, 0x03, 0x00, + 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, 0x3a, + 0x03, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, + 0x04, 0x3b, 0x03, 0x00, 0x00, 0x4d, 0x7d, 0x00, + 0x00, 0x80, 0x04, 0x3c, 0x03, 0x00, 0x00, 0x4d, + 0x7e, 0x00, 0x00, 0x80, 0x04, 0x3d, 0x03, 0x00, + 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, 0x3e, + 0x03, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, + 0x04, 0x3f, 0x03, 0x00, 0x00, 0x4d, 0x81, 0x00, + 0x00, 0x80, 0x04, 0x40, 0x03, 0x00, 0x00, 0x4d, + 0x82, 0x00, 0x00, 0x80, 0x04, 0x41, 0x03, 0x00, + 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, 0x42, + 0x03, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, + 0x04, 0x43, 0x03, 0x00, 0x00, 0x4d, 0x85, 0x00, + 0x00, 0x80, 0x04, 0x44, 0x03, 0x00, 0x00, 0x4d, + 0x86, 0x00, 0x00, 0x80, 0x04, 0x45, 0x03, 0x00, + 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, 0x46, + 0x03, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, + 0x04, 0x47, 0x03, 0x00, 0x00, 0x4d, 0x89, 0x00, + 0x00, 0x80, 0x04, 0x48, 0x03, 0x00, 0x00, 0x4d, + 0x8a, 0x00, 0x00, 0x80, 0x04, 0x49, 0x03, 0x00, + 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, 0x4a, + 0x03, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, + 0x04, 0x4b, 0x03, 0x00, 0x00, 0x4d, 0x8d, 0x00, + 0x00, 0x80, 0x04, 0x4c, 0x03, 0x00, 0x00, 0x4d, + 0x8e, 0x00, 0x00, 0x80, 0x04, 0x4d, 0x03, 0x00, + 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, 0x4e, + 0x03, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, + 0x04, 0x4f, 0x03, 0x00, 0x00, 0x4d, 0x91, 0x00, + 0x00, 0x80, 0x04, 0x50, 0x03, 0x00, 0x00, 0x4d, + 0x92, 0x00, 0x00, 0x80, 0x04, 0x51, 0x03, 0x00, + 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, 0x52, + 0x03, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, + 0x04, 0x53, 0x03, 0x00, 0x00, 0x4d, 0x95, 0x00, + 0x00, 0x80, 0x04, 0x54, 0x03, 0x00, 0x00, 0x4d, + 0x96, 0x00, 0x00, 0x80, 0x04, 0x55, 0x03, 0x00, + 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, 0x56, + 0x03, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, + 0x04, 0x57, 0x03, 0x00, 0x00, 0x4d, 0x99, 0x00, + 0x00, 0x80, 0x04, 0x58, 0x03, 0x00, 0x00, 0x4d, + 0x9a, 0x00, 0x00, 0x80, 0x04, 0x59, 0x03, 0x00, + 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, 0x5a, + 0x03, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, + 0x04, 0x5b, 0x03, 0x00, 0x00, 0x4d, 0x9d, 0x00, + 0x00, 0x80, 0x04, 0x5c, 0x03, 0x00, 0x00, 0x4d, + 0x9e, 0x00, 0x00, 0x80, 0x04, 0x5d, 0x03, 0x00, + 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, 0x5e, + 0x03, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, + 0x04, 0x5f, 0x03, 0x00, 0x00, 0x4d, 0xa1, 0x00, + 0x00, 0x80, 0x04, 0x60, 0x03, 0x00, 0x00, 0x4d, + 0xa2, 0x00, 0x00, 0x80, 0x04, 0x61, 0x03, 0x00, + 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, 0x62, + 0x03, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, + 0x04, 0x63, 0x03, 0x00, 0x00, 0x4d, 0xa5, 0x00, + 0x00, 0x80, 0x04, 0x64, 0x03, 0x00, 0x00, 0x4d, + 0xa6, 0x00, 0x00, 0x80, 0x04, 0x65, 0x03, 0x00, + 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, 0x66, + 0x03, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, + 0x04, 0x67, 0x03, 0x00, 0x00, 0x4d, 0xa9, 0x00, + 0x00, 0x80, 0x04, 0x68, 0x03, 0x00, 0x00, 0x4d, + 0xaa, 0x00, 0x00, 0x80, 0x04, 0x69, 0x03, 0x00, + 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, 0x6a, + 0x03, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, + 0x04, 0x6b, 0x03, 0x00, 0x00, 0x4d, 0xad, 0x00, + 0x00, 0x80, 0x04, 0x6c, 0x03, 0x00, 0x00, 0x4d, + 0xae, 0x00, 0x00, 0x80, 0x04, 0x6d, 0x03, 0x00, + 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, 0x6e, + 0x03, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, + 0x04, 0x6f, 0x03, 0x00, 0x00, 0x4d, 0xb1, 0x00, + 0x00, 0x80, 0x04, 0x70, 0x03, 0x00, 0x00, 0x4d, + 0xb2, 0x00, 0x00, 0x80, 0x04, 0x71, 0x03, 0x00, + 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, 0x72, + 0x03, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, + 0x04, 0x73, 0x03, 0x00, 0x00, 0x4d, 0xb5, 0x00, + 0x00, 0x80, 0x04, 0x74, 0x03, 0x00, 0x00, 0x4d, + 0xb6, 0x00, 0x00, 0x80, 0x04, 0x75, 0x03, 0x00, + 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, 0x76, + 0x03, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, + 0x04, 0x77, 0x03, 0x00, 0x00, 0x4d, 0xb9, 0x00, + 0x00, 0x80, 0x04, 0x78, 0x03, 0x00, 0x00, 0x4d, + 0xba, 0x00, 0x00, 0x80, 0x04, 0x79, 0x03, 0x00, + 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, 0x7a, + 0x03, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, + 0x04, 0x7b, 0x03, 0x00, 0x00, 0x4d, 0xbd, 0x00, + 0x00, 0x80, 0x04, 0x7c, 0x03, 0x00, 0x00, 0x4d, + 0xbe, 0x00, 0x00, 0x80, 0x04, 0x7d, 0x03, 0x00, + 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, 0x7e, + 0x03, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, + 0x04, 0x7f, 0x03, 0x00, 0x00, 0x4d, 0xc1, 0x00, + 0x00, 0x80, 0x04, 0x80, 0x03, 0x00, 0x00, 0x4d, + 0xc2, 0x00, 0x00, 0x80, 0x04, 0x81, 0x03, 0x00, + 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, 0x82, + 0x03, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, + 0x04, 0x83, 0x03, 0x00, 0x00, 0x4d, 0xc5, 0x00, + 0x00, 0x80, 0x04, 0x84, 0x03, 0x00, 0x00, 0x4d, + 0xc6, 0x00, 0x00, 0x80, 0x04, 0x85, 0x03, 0x00, + 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, 0x86, + 0x03, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, + 0x04, 0x87, 0x03, 0x00, 0x00, 0x4d, 0xc9, 0x00, + 0x00, 0x80, 0x04, 0x88, 0x03, 0x00, 0x00, 0x4d, + 0xca, 0x00, 0x00, 0x80, 0x04, 0x89, 0x03, 0x00, + 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, 0x8a, + 0x03, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, + 0x04, 0x8b, 0x03, 0x00, 0x00, 0x4d, 0xcd, 0x00, + 0x00, 0x80, 0x04, 0x8c, 0x03, 0x00, 0x00, 0x4d, + 0xce, 0x00, 0x00, 0x80, 0x04, 0x8d, 0x03, 0x00, + 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, 0x8e, + 0x03, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, + 0x04, 0x8f, 0x03, 0x00, 0x00, 0x4d, 0xd1, 0x00, + 0x00, 0x80, 0x04, 0x90, 0x03, 0x00, 0x00, 0x4d, + 0xd2, 0x00, 0x00, 0x80, 0x04, 0x91, 0x03, 0x00, + 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, 0x92, + 0x03, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, + 0x04, 0x93, 0x03, 0x00, 0x00, 0x4d, 0xd5, 0x00, + 0x00, 0x80, 0x04, 0x94, 0x03, 0x00, 0x00, 0x4d, + 0xd6, 0x00, 0x00, 0x80, 0x04, 0x95, 0x03, 0x00, + 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, 0x96, + 0x03, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, + 0x04, 0x97, 0x03, 0x00, 0x00, 0x4d, 0xd9, 0x00, + 0x00, 0x80, 0x04, 0x98, 0x03, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x80, 0x04, 0x99, 0x03, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, 0x9a, + 0x03, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, + 0x04, 0x9b, 0x03, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x80, 0x04, 0x9c, 0x03, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x80, 0x04, 0x9d, 0x03, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, 0x9e, + 0x03, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, + 0x04, 0x9f, 0x03, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x80, 0x04, 0xa0, 0x03, 0x00, 0x00, 0x4d, + 0xe2, 0x00, 0x00, 0x80, 0x04, 0xa1, 0x03, 0x00, + 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, 0xa2, + 0x03, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, + 0x04, 0xa3, 0x03, 0x00, 0x00, 0x4d, 0xe5, 0x00, + 0x00, 0x80, 0x04, 0xa4, 0x03, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x80, 0x04, 0xa5, 0x03, 0x00, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, 0xa6, + 0x03, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, + 0x04, 0xa7, 0x03, 0x00, 0x00, 0x4d, 0xe9, 0x00, + 0x00, 0x80, 0x04, 0xa8, 0x03, 0x00, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x80, 0x04, 0xa9, 0x03, 0x00, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x68, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x69, 0x01, 0x00, 0x00, 0x4d, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x4d, 0x6c, 0x01, 0x00, 0x00, 0x4d, 0x6d, 0x01, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0x02, 0x2c, 0x01, 0x00, 0x00, 0x02, 0x2d, + 0x01, 0x00, 0x00, 0x02, 0x2e, 0x01, 0x00, 0x00, + 0x02, 0x2f, 0x01, 0x00, 0x00, 0x02, 0x30, 0x01, + 0x00, 0x00, 0x02, 0x31, 0x01, 0x00, 0x00, 0x02, + 0x32, 0x01, 0x00, 0x00, 0x02, 0x33, 0x01, 0x00, + 0x00, 0x02, 0x34, 0x01, 0x00, 0x00, 0x02, 0x35, + 0x01, 0x00, 0x00, 0x02, 0x36, 0x01, 0x00, 0x00, + 0x02, 0x37, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0x45, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x03, + 0x00, 0x00, 0x04, 0xab, 0x03, 0x00, 0x00, 0x04, + 0xac, 0x03, 0x00, 0x00, 0x04, 0xad, 0x03, 0x00, + 0x00, 0x04, 0xae, 0x03, 0x00, 0x00, 0x04, 0xaf, + 0x03, 0x00, 0x00, 0x04, 0xb0, 0x03, 0x00, 0x00, + 0x04, 0xb1, 0x03, 0x00, 0x00, 0x04, 0xb2, 0x03, + 0x00, 0x00, 0x04, 0xb3, 0x03, 0x00, 0x00, 0x04, + 0xb4, 0x03, 0x00, 0x00, 0x04, 0xb5, 0x03, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xb6, 0x03, 0x00, 0x00, 0x04, 0xab, + 0x03, 0x00, 0x00, 0x04, 0xac, 0x03, 0x00, 0x00, + 0x04, 0xad, 0x03, 0x00, 0x00, 0x04, 0xae, 0x03, + 0x00, 0x00, 0x04, 0xaf, 0x03, 0x00, 0x00, 0x04, + 0xb0, 0x03, 0x00, 0x00, 0x04, 0xb1, 0x03, 0x00, + 0x00, 0x04, 0xb7, 0x03, 0x00, 0x00, 0x04, 0xb3, + 0x03, 0x00, 0x00, 0x04, 0xb8, 0x03, 0x00, 0x00, + 0x04, 0xb5, 0x03, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x5e, 0x01, + 0x00, 0x00, 0x0b, 0x02, 0x38, 0x01, 0x00, 0x00, + 0x02, 0x39, 0x01, 0x00, 0x00, 0x02, 0x3a, 0x01, + 0x00, 0x00, 0x02, 0x3b, 0x01, 0x00, 0x00, 0x02, + 0x3c, 0x01, 0x00, 0x00, 0x02, 0x3d, 0x01, 0x00, + 0x00, 0x02, 0x3e, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x66, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xb9, 0x03, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, 0x04, + 0xb9, 0x03, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xb9, 0x03, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x68, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x4d, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x4d, 0x6c, + 0x01, 0x00, 0x00, 0x4d, 0x6d, 0x01, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x02, + 0x3f, 0x01, 0x00, 0x00, 0x02, 0x40, 0x01, 0x00, + 0x00, 0x02, 0x41, 0x01, 0x00, 0x00, 0x02, 0x42, + 0x01, 0x00, 0x00, 0x02, 0x43, 0x01, 0x00, 0x00, + 0x02, 0x44, 0x01, 0x00, 0x00, 0x02, 0x45, 0x01, + 0x00, 0x00, 0x02, 0x46, 0x01, 0x00, 0x00, 0x02, + 0x47, 0x01, 0x00, 0x00, 0x02, 0x48, 0x01, 0x00, + 0x00, 0x02, 0x49, 0x01, 0x00, 0x00, 0x02, 0x4a, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x45, + 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, + 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x5e, 0x01, 0x00, 0x00, + 0x0b, 0x02, 0x4b, 0x01, 0x00, 0x00, 0x02, 0x4c, + 0x01, 0x00, 0x00, 0x02, 0x4d, 0x01, 0x00, 0x00, + 0x02, 0x4e, 0x01, 0x00, 0x00, 0x02, 0x4f, 0x01, + 0x00, 0x00, 0x02, 0x50, 0x01, 0x00, 0x00, 0x02, + 0x51, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x45, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x66, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xba, 0x03, 0x00, 0x00, 0x04, 0xbb, 0x03, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x45, 0x01, + 0x00, 0x00, 0x04, 0xba, 0x03, 0x00, 0x00, 0x04, + 0xbb, 0x03, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xba, 0x03, 0x00, + 0x00, 0x04, 0xbb, 0x03, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x68, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x4d, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x4d, 0x6c, 0x01, 0x00, 0x00, + 0x4d, 0x6d, 0x01, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x00, 0x4d, 0xbc, 0x03, 0x00, 0x00, 0x4d, + 0xbd, 0x03, 0x00, 0x00, 0x0b, 0x04, 0xbe, 0x03, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xbf, 0x03, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xc0, 0x03, 0x00, + 0x00, 0x4d, 0xc1, 0x03, 0x00, 0x00, 0x04, 0xc2, + 0x03, 0x00, 0x00, 0x4d, 0xc3, 0x03, 0x00, 0x00, + 0x4d, 0xc4, 0x03, 0x00, 0x00, 0x0b, 0x04, 0xc5, + 0x03, 0x00, 0x00, 0x4d, 0xc1, 0x03, 0x00, 0x00, + 0x04, 0xc6, 0x03, 0x00, 0x00, 0x4d, 0xc3, 0x03, + 0x00, 0x00, 0x4d, 0xc7, 0x03, 0x00, 0x00, 0x0b, + 0x04, 0xc8, 0x03, 0x00, 0x00, 0x4d, 0xc1, 0x03, + 0x00, 0x00, 0x04, 0xc9, 0x03, 0x00, 0x00, 0x4d, + 0xc3, 0x03, 0x00, 0x00, 0x4d, 0xca, 0x03, 0x00, + 0x00, 0x4d, 0xcb, 0x03, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0xcc, 0x03, 0x00, 0x00, 0x4d, 0xc4, 0x03, + 0x00, 0x00, 0x04, 0xcd, 0x03, 0x00, 0x00, 0x4d, + 0xce, 0x03, 0x00, 0x00, 0x04, 0xcf, 0x03, 0x00, + 0x00, 0x4d, 0xd0, 0x03, 0x00, 0x00, 0x04, 0xd1, + 0x03, 0x00, 0x00, 0x4d, 0xd2, 0x03, 0x00, 0x00, + 0x04, 0xd3, 0x03, 0x00, 0x00, 0x4d, 0xd4, 0x03, + 0x00, 0x00, 0x04, 0xd5, 0x03, 0x00, 0x00, 0x4d, + 0xd6, 0x03, 0x00, 0x00, 0x04, 0xd7, 0x03, 0x00, + 0x00, 0x4d, 0xd8, 0x03, 0x00, 0x00, 0x4d, 0xd9, + 0x03, 0x00, 0x00, 0x0b, 0x04, 0xcc, 0x03, 0x00, + 0x00, 0x4d, 0xc4, 0x03, 0x00, 0x00, 0x04, 0xcd, + 0x03, 0x00, 0x00, 0x4d, 0xce, 0x03, 0x00, 0x00, + 0x04, 0xcf, 0x03, 0x00, 0x00, 0x4d, 0xd0, 0x03, + 0x00, 0x00, 0x04, 0xd1, 0x03, 0x00, 0x00, 0x4d, + 0xd2, 0x03, 0x00, 0x00, 0x04, 0xd3, 0x03, 0x00, + 0x00, 0x4d, 0xd4, 0x03, 0x00, 0x00, 0x04, 0xd5, + 0x03, 0x00, 0x00, 0x4d, 0xd6, 0x03, 0x00, 0x00, + 0x04, 0xd7, 0x03, 0x00, 0x00, 0x4d, 0xd8, 0x03, + 0x00, 0x00, 0x4d, 0xbe, 0x03, 0x00, 0x00, 0x4d, + 0xda, 0x03, 0x00, 0x00, 0x0b, 0x04, 0xdb, 0x03, + 0x00, 0x00, 0x4d, 0xdc, 0x03, 0x00, 0x00, 0x04, + 0xdd, 0x03, 0x00, 0x00, 0x4d, 0xde, 0x03, 0x00, + 0x00, 0x04, 0xdf, 0x03, 0x00, 0x00, 0x4d, 0xe0, + 0x03, 0x00, 0x00, 0x04, 0xe1, 0x03, 0x00, 0x00, + 0x4d, 0xe2, 0x03, 0x00, 0x00, 0x04, 0xe3, 0x03, + 0x00, 0x00, 0x4d, 0xe4, 0x03, 0x00, 0x00, 0x04, + 0xe5, 0x03, 0x00, 0x00, 0x4d, 0xe6, 0x03, 0x00, + 0x00, 0x04, 0xe7, 0x03, 0x00, 0x00, 0x4d, 0xe8, + 0x03, 0x00, 0x00, 0x04, 0xe9, 0x03, 0x00, 0x00, + 0x4d, 0xea, 0x03, 0x00, 0x00, 0x04, 0xeb, 0x03, + 0x00, 0x00, 0x4d, 0xec, 0x03, 0x00, 0x00, 0x04, + 0xed, 0x03, 0x00, 0x00, 0x4d, 0xee, 0x03, 0x00, + 0x00, 0x04, 0xef, 0x03, 0x00, 0x00, 0x4d, 0xf0, + 0x03, 0x00, 0x00, 0x04, 0xf1, 0x03, 0x00, 0x00, + 0x4d, 0xf2, 0x03, 0x00, 0x00, 0x04, 0xf3, 0x03, + 0x00, 0x00, 0x4d, 0xf4, 0x03, 0x00, 0x00, 0x04, + 0xf5, 0x03, 0x00, 0x00, 0x4d, 0xf6, 0x03, 0x00, + 0x00, 0x04, 0xf7, 0x03, 0x00, 0x00, 0x4d, 0xf8, + 0x03, 0x00, 0x00, 0x04, 0xf9, 0x03, 0x00, 0x00, + 0x4d, 0xfa, 0x03, 0x00, 0x00, 0x04, 0xfb, 0x03, + 0x00, 0x00, 0x4d, 0xfc, 0x03, 0x00, 0x00, 0x04, + 0xfd, 0x03, 0x00, 0x00, 0x4d, 0xfe, 0x03, 0x00, + 0x00, 0x04, 0xff, 0x03, 0x00, 0x00, 0x4d, 0x00, + 0x04, 0x00, 0x00, 0x04, 0x01, 0x04, 0x00, 0x00, + 0x4d, 0x02, 0x04, 0x00, 0x00, 0x04, 0x03, 0x04, + 0x00, 0x00, 0x4d, 0x04, 0x04, 0x00, 0x00, 0x04, + 0x05, 0x04, 0x00, 0x00, 0x4d, 0x06, 0x04, 0x00, + 0x00, 0x4d, 0x07, 0x04, 0x00, 0x00, 0x4d, 0x45, + 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, 0xcc, 0x28, + 0x90, 0x10, 0x01, 0x00, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_lt_size = 31217; + +const uint8_t intl_lt[31217] = { + 0x01, 0xf0, 0x05, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x6c, 0x74, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x0e, + 0x7b, 0x31, 0x7d, 0x20, 0x7b, 0x30, 0x7d, 0x0a, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, 0x65, + 0x64, 0x69, 0x75, 0x6d, 0x08, 0x66, 0x75, 0x6c, + 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x04, 0x64, + 0x64, 0x02, 0x64, 0x06, 0x63, 0x63, 0x63, 0x02, + 0x45, 0x08, 0x64, 0x2c, 0x20, 0x45, 0x04, 0x45, + 0x64, 0x14, 0x68, 0x68, 0x3a, 0x6d, 0x6d, 0x20, + 0x61, 0x2c, 0x20, 0x45, 0x06, 0x45, 0x68, 0x6d, + 0x10, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x2c, 0x20, + 0x45, 0x06, 0x45, 0x48, 0x6d, 0x1a, 0x68, 0x68, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, + 0x2c, 0x20, 0x45, 0x08, 0x45, 0x68, 0x6d, 0x73, + 0x16, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x2c, 0x20, 0x45, 0x08, 0x45, 0x48, 0x6d, + 0x73, 0x10, 0x79, 0x20, 0x27, 0x6d, 0x27, 0x2e, + 0x20, 0x47, 0x04, 0x47, 0x79, 0x0c, 0x79, 0x2d, + 0x4d, 0x4d, 0x20, 0x47, 0x0a, 0x47, 0x79, 0x4d, + 0x4d, 0x4d, 0x12, 0x79, 0x2d, 0x4d, 0x4d, 0x2d, + 0x64, 0x64, 0x20, 0x47, 0x0c, 0x47, 0x79, 0x4d, + 0x4d, 0x4d, 0x64, 0x18, 0x79, 0x2d, 0x4d, 0x4d, + 0x2d, 0x64, 0x64, 0x20, 0x47, 0x2c, 0x20, 0x45, + 0x0e, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, + 0x1c, 0x79, 0x20, 0x27, 0x6d, 0x27, 0x2e, 0x20, + 0x47, 0x2c, 0x20, 0x4c, 0x4c, 0x4c, 0x4c, 0x0c, + 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x28, 0x79, + 0x20, 0x27, 0x6d, 0x27, 0x2e, 0x20, 0x47, 0x20, + 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x20, 0x27, + 0x64, 0x27, 0x2e, 0x0e, 0x47, 0x79, 0x4d, 0x4d, + 0x4d, 0x4d, 0x64, 0x2e, 0x79, 0x20, 0x27, 0x6d, + 0x27, 0x2e, 0x20, 0x47, 0x20, 0x4d, 0x4d, 0x4d, + 0x4d, 0x20, 0x64, 0x20, 0x27, 0x64, 0x27, 0x2e, + 0x2c, 0x20, 0x45, 0x10, 0x47, 0x79, 0x4d, 0x4d, + 0x4d, 0x4d, 0x45, 0x64, 0x08, 0x68, 0x68, 0x20, + 0x61, 0x02, 0x68, 0x04, 0x48, 0x48, 0x02, 0x48, + 0x0e, 0x68, 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, + 0x04, 0x68, 0x6d, 0x0a, 0x48, 0x48, 0x3a, 0x6d, + 0x6d, 0x04, 0x48, 0x6d, 0x14, 0x68, 0x68, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x06, + 0x68, 0x6d, 0x73, 0x10, 0x48, 0x48, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x06, 0x48, 0x6d, 0x73, + 0x1a, 0x68, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x61, 0x3b, 0x20, 0x76, 0x08, 0x68, + 0x6d, 0x73, 0x76, 0x16, 0x48, 0x48, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x3b, 0x20, 0x76, 0x08, + 0x48, 0x6d, 0x73, 0x76, 0x14, 0x68, 0x68, 0x3a, + 0x6d, 0x6d, 0x20, 0x61, 0x3b, 0x20, 0x76, 0x06, + 0x68, 0x6d, 0x76, 0x10, 0x48, 0x48, 0x3a, 0x6d, + 0x6d, 0x3b, 0x20, 0x76, 0x06, 0x48, 0x6d, 0x76, + 0x04, 0x4d, 0x4d, 0x02, 0x4d, 0x08, 0x4d, 0x4d, + 0x2d, 0x64, 0x04, 0x4d, 0x64, 0x10, 0x4d, 0x4d, + 0x2d, 0x64, 0x64, 0x2c, 0x20, 0x45, 0x06, 0x4d, + 0x45, 0x64, 0x0a, 0x4d, 0x4d, 0x2d, 0x64, 0x64, + 0x08, 0x4d, 0x4d, 0x64, 0x64, 0x06, 0x4d, 0x4d, + 0x4d, 0x08, 0x4d, 0x4d, 0x4d, 0x64, 0x0a, 0x4d, + 0x4d, 0x4d, 0x45, 0x64, 0x08, 0x4c, 0x4c, 0x4c, + 0x4c, 0x08, 0x4d, 0x4d, 0x4d, 0x4d, 0x16, 0x4d, + 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x20, 0x27, 0x64, + 0x27, 0x2e, 0x0a, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, + 0x1c, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x20, + 0x27, 0x64, 0x27, 0x2e, 0x2c, 0x20, 0x45, 0x0c, + 0x4d, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x04, 0x6d, 0x73, 0x02, + 0x79, 0x08, 0x79, 0x2d, 0x4d, 0x4d, 0x04, 0x79, + 0x4d, 0x0e, 0x79, 0x2d, 0x4d, 0x4d, 0x2d, 0x64, + 0x64, 0x06, 0x79, 0x4d, 0x64, 0x14, 0x79, 0x2d, + 0x4d, 0x4d, 0x2d, 0x64, 0x64, 0x2c, 0x20, 0x45, + 0x08, 0x79, 0x4d, 0x45, 0x64, 0x08, 0x79, 0x4d, + 0x4d, 0x4d, 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x64, + 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x16, + 0x79, 0x20, 0x27, 0x6d, 0x27, 0x2e, 0x20, 0x4c, + 0x4c, 0x4c, 0x4c, 0x0a, 0x79, 0x4d, 0x4d, 0x4d, + 0x4d, 0x24, 0x79, 0x20, 0x27, 0x6d, 0x27, 0x2e, + 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x20, + 0x27, 0x64, 0x27, 0x2e, 0x0c, 0x79, 0x4d, 0x4d, + 0x4d, 0x4d, 0x64, 0x2a, 0x79, 0x20, 0x27, 0x6d, + 0x27, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, + 0x64, 0x20, 0x27, 0x64, 0x27, 0x2e, 0x2c, 0x20, + 0x45, 0x0e, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x45, + 0x64, 0x0a, 0x79, 0x20, 0x51, 0x51, 0x51, 0x08, + 0x79, 0x51, 0x51, 0x51, 0x0c, 0x79, 0x20, 0x51, + 0x51, 0x51, 0x51, 0x0a, 0x79, 0x51, 0x51, 0x51, + 0x51, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x73, 0x30, 0x79, 0x20, 0x27, 0x6d, 0x27, + 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x64, + 0x20, 0x27, 0x64, 0x27, 0x2e, 0x2c, 0x20, 0x45, + 0x45, 0x45, 0x45, 0x14, 0x79, 0x4d, 0x4d, 0x4d, + 0x4d, 0x45, 0x45, 0x45, 0x45, 0x64, 0x16, 0x64, + 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x73, 0x1a, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x7a, 0x7a, 0x7a, 0x7a, + 0x12, 0x68, 0x6d, 0x6d, 0x73, 0x73, 0x7a, 0x7a, + 0x7a, 0x7a, 0x14, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x7a, 0x08, 0x68, 0x6d, + 0x73, 0x7a, 0x16, 0x74, 0x69, 0x6d, 0x65, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x0e, 0x66, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x02, 0x53, + 0x02, 0x56, 0x02, 0x4b, 0x02, 0x42, 0x02, 0x47, + 0x02, 0x4c, 0x02, 0x52, 0x0c, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x0a, 0x73, 0x61, 0x75, 0x73, + 0x2e, 0x08, 0x76, 0x61, 0x73, 0x2e, 0x08, 0x6b, + 0x6f, 0x76, 0x2e, 0x08, 0x62, 0x61, 0x6c, 0x2e, + 0x08, 0x67, 0x65, 0x67, 0x2e, 0x0b, 0x62, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x7e, 0x01, 0x2e, 0x00, + 0x0a, 0x6c, 0x69, 0x65, 0x70, 0x2e, 0x0a, 0x72, + 0x75, 0x67, 0x70, 0x2e, 0x0a, 0x72, 0x75, 0x67, + 0x73, 0x2e, 0x0a, 0x73, 0x70, 0x61, 0x6c, 0x2e, + 0x0c, 0x6c, 0x61, 0x70, 0x6b, 0x72, 0x2e, 0x0c, + 0x67, 0x72, 0x75, 0x6f, 0x64, 0x2e, 0x0c, 0x73, + 0x61, 0x75, 0x73, 0x69, 0x6f, 0x0e, 0x76, 0x61, + 0x73, 0x61, 0x72, 0x69, 0x6f, 0x08, 0x6b, 0x6f, + 0x76, 0x6f, 0x13, 0x62, 0x00, 0x61, 0x00, 0x6c, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x64, 0x00, 0x7e, + 0x01, 0x69, 0x00, 0x6f, 0x00, 0x0f, 0x67, 0x00, + 0x65, 0x00, 0x67, 0x00, 0x75, 0x00, 0x7e, 0x01, + 0x17, 0x01, 0x73, 0x00, 0x11, 0x62, 0x00, 0x69, + 0x00, 0x72, 0x00, 0x7e, 0x01, 0x65, 0x00, 0x6c, + 0x00, 0x69, 0x00, 0x6f, 0x00, 0x0c, 0x6c, 0x69, + 0x65, 0x70, 0x6f, 0x73, 0x13, 0x72, 0x00, 0x75, + 0x00, 0x67, 0x00, 0x70, 0x00, 0x6a, 0x00, 0x6b, + 0x01, 0x0d, 0x01, 0x69, 0x00, 0x6f, 0x00, 0x0f, + 0x72, 0x00, 0x75, 0x00, 0x67, 0x00, 0x73, 0x00, + 0x17, 0x01, 0x6a, 0x00, 0x6f, 0x00, 0x0c, 0x73, + 0x70, 0x61, 0x6c, 0x69, 0x6f, 0x13, 0x6c, 0x00, + 0x61, 0x00, 0x70, 0x00, 0x6b, 0x00, 0x72, 0x00, + 0x69, 0x00, 0x0d, 0x01, 0x69, 0x00, 0x6f, 0x00, + 0x11, 0x67, 0x00, 0x72, 0x00, 0x75, 0x00, 0x6f, + 0x00, 0x64, 0x00, 0x7e, 0x01, 0x69, 0x00, 0x6f, + 0x00, 0x0c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x73, + 0x02, 0x50, 0x02, 0x41, 0x02, 0x54, 0x03, 0x60, + 0x01, 0x04, 0x73, 0x6b, 0x04, 0x70, 0x72, 0x04, + 0x61, 0x6e, 0x04, 0x74, 0x72, 0x04, 0x6b, 0x74, + 0x04, 0x70, 0x6e, 0x05, 0x61, 0x01, 0x74, 0x00, + 0x16, 0x73, 0x65, 0x6b, 0x6d, 0x61, 0x64, 0x69, + 0x65, 0x6e, 0x69, 0x73, 0x16, 0x70, 0x69, 0x72, + 0x6d, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x69, 0x73, + 0x16, 0x61, 0x6e, 0x74, 0x72, 0x61, 0x64, 0x69, + 0x65, 0x6e, 0x69, 0x73, 0x19, 0x74, 0x00, 0x72, + 0x00, 0x65, 0x00, 0x0d, 0x01, 0x69, 0x00, 0x61, + 0x00, 0x64, 0x00, 0x69, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x73, 0x00, 0x1c, 0x6b, 0x65, + 0x74, 0x76, 0x69, 0x72, 0x74, 0x61, 0x64, 0x69, + 0x65, 0x6e, 0x69, 0x73, 0x18, 0x70, 0x65, 0x6e, + 0x6b, 0x74, 0x61, 0x64, 0x69, 0x65, 0x6e, 0x69, + 0x73, 0x17, 0x61, 0x01, 0x65, 0x00, 0x61, 0x01, + 0x74, 0x00, 0x61, 0x00, 0x64, 0x00, 0x69, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x08, 0x64, 0x61, 0x79, 0x73, 0x04, 0x42, 0x45, + 0x08, 0x65, 0x72, 0x61, 0x73, 0x13, 0x70, 0x00, + 0x72, 0x00, 0x69, 0x00, 0x65, 0x00, 0x61, 0x01, + 0x70, 0x00, 0x69, 0x00, 0x65, 0x00, 0x74, 0x00, + 0x04, 0x61, 0x6d, 0x0c, 0x70, 0x6f, 0x70, 0x69, + 0x65, 0x74, 0x04, 0x70, 0x6d, 0x14, 0x64, 0x61, + 0x79, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x73, + 0x08, 0x54, 0x6f, 0x75, 0x74, 0x08, 0x42, 0x61, + 0x62, 0x61, 0x0a, 0x48, 0x61, 0x74, 0x6f, 0x72, + 0x0a, 0x4b, 0x69, 0x61, 0x68, 0x6b, 0x08, 0x54, + 0x6f, 0x62, 0x61, 0x0c, 0x41, 0x6d, 0x73, 0x68, + 0x69, 0x72, 0x10, 0x42, 0x61, 0x72, 0x61, 0x6d, + 0x68, 0x61, 0x74, 0x12, 0x42, 0x61, 0x72, 0x61, + 0x6d, 0x6f, 0x75, 0x64, 0x61, 0x0e, 0x42, 0x61, + 0x73, 0x68, 0x61, 0x6e, 0x73, 0x0a, 0x50, 0x61, + 0x6f, 0x6e, 0x61, 0x08, 0x45, 0x70, 0x65, 0x70, + 0x0a, 0x4d, 0x65, 0x73, 0x72, 0x61, 0x0a, 0x4e, + 0x61, 0x73, 0x69, 0x65, 0x08, 0x45, 0x52, 0x41, + 0x30, 0x08, 0x45, 0x52, 0x41, 0x31, 0x10, 0x4d, + 0x65, 0x73, 0x6b, 0x65, 0x72, 0x65, 0x6d, 0x0c, + 0x54, 0x65, 0x6b, 0x65, 0x6d, 0x74, 0x0a, 0x48, + 0x65, 0x64, 0x61, 0x72, 0x0c, 0x54, 0x61, 0x68, + 0x73, 0x61, 0x73, 0x06, 0x54, 0x65, 0x72, 0x0e, + 0x59, 0x65, 0x6b, 0x61, 0x74, 0x69, 0x74, 0x0e, + 0x4d, 0x65, 0x67, 0x61, 0x62, 0x69, 0x74, 0x0c, + 0x4d, 0x69, 0x61, 0x7a, 0x69, 0x61, 0x0c, 0x47, + 0x65, 0x6e, 0x62, 0x6f, 0x74, 0x08, 0x53, 0x65, + 0x6e, 0x65, 0x0a, 0x48, 0x61, 0x6d, 0x6c, 0x65, + 0x0e, 0x4e, 0x65, 0x68, 0x61, 0x73, 0x73, 0x65, + 0x0e, 0x50, 0x61, 0x67, 0x75, 0x6d, 0x65, 0x6e, + 0x06, 0x4d, 0x30, 0x31, 0x06, 0x4d, 0x30, 0x32, + 0x06, 0x4d, 0x30, 0x33, 0x06, 0x4d, 0x30, 0x34, + 0x06, 0x4d, 0x30, 0x35, 0x06, 0x4d, 0x30, 0x36, + 0x06, 0x4d, 0x30, 0x37, 0x06, 0x4d, 0x30, 0x38, + 0x06, 0x4d, 0x30, 0x39, 0x06, 0x4d, 0x31, 0x30, + 0x06, 0x4d, 0x31, 0x31, 0x06, 0x4d, 0x31, 0x32, + 0x0e, 0x70, 0x72, 0x2e, 0x20, 0x4b, 0x72, 0x2e, + 0x0c, 0x70, 0x6f, 0x20, 0x4b, 0x72, 0x2e, 0x12, + 0x70, 0x72, 0x2e, 0x20, 0x6d, 0x2e, 0x20, 0x65, + 0x2e, 0x15, 0x6d, 0x00, 0x6b, 0x01, 0x73, 0x00, + 0x73, 0x01, 0x20, 0x00, 0x65, 0x00, 0x72, 0x00, + 0x6f, 0x00, 0x6a, 0x00, 0x65, 0x00, 0x19, 0x70, + 0x00, 0x72, 0x00, 0x69, 0x00, 0x65, 0x00, 0x61, + 0x01, 0x20, 0x00, 0x4b, 0x00, 0x72, 0x00, 0x69, + 0x00, 0x73, 0x00, 0x74, 0x00, 0x73, 0x01, 0x16, + 0x70, 0x6f, 0x20, 0x4b, 0x72, 0x69, 0x73, 0x74, + 0x61, 0x75, 0x73, 0x1d, 0x70, 0x00, 0x72, 0x00, + 0x69, 0x00, 0x65, 0x00, 0x61, 0x01, 0x20, 0x00, + 0x6d, 0x00, 0x6b, 0x01, 0x73, 0x00, 0x73, 0x01, + 0x20, 0x00, 0x65, 0x00, 0x72, 0x00, 0x05, 0x01, + 0x0c, 0x54, 0x69, 0x73, 0x68, 0x72, 0x69, 0x0e, + 0x48, 0x65, 0x73, 0x68, 0x76, 0x61, 0x6e, 0x0c, + 0x4b, 0x69, 0x73, 0x6c, 0x65, 0x76, 0x0a, 0x54, + 0x65, 0x76, 0x65, 0x74, 0x0c, 0x53, 0x68, 0x65, + 0x76, 0x61, 0x74, 0x0c, 0x41, 0x64, 0x61, 0x72, + 0x20, 0x49, 0x08, 0x41, 0x64, 0x61, 0x72, 0x0a, + 0x4e, 0x69, 0x73, 0x61, 0x6e, 0x08, 0x49, 0x79, + 0x61, 0x72, 0x0a, 0x53, 0x69, 0x76, 0x61, 0x6e, + 0x0a, 0x54, 0x61, 0x6d, 0x75, 0x7a, 0x04, 0x41, + 0x76, 0x08, 0x45, 0x6c, 0x75, 0x6c, 0x0e, 0x41, + 0x64, 0x61, 0x72, 0x20, 0x49, 0x49, 0x04, 0x41, + 0x4d, 0x0e, 0x43, 0x68, 0x61, 0x69, 0x74, 0x72, + 0x61, 0x10, 0x56, 0x61, 0x69, 0x73, 0x61, 0x6b, + 0x68, 0x61, 0x10, 0x4a, 0x79, 0x61, 0x69, 0x73, + 0x74, 0x68, 0x61, 0x0c, 0x41, 0x73, 0x61, 0x64, + 0x68, 0x61, 0x0e, 0x53, 0x72, 0x61, 0x76, 0x61, + 0x6e, 0x61, 0x0c, 0x42, 0x68, 0x61, 0x64, 0x72, + 0x61, 0x0c, 0x41, 0x73, 0x76, 0x69, 0x6e, 0x61, + 0x0e, 0x4b, 0x61, 0x72, 0x74, 0x69, 0x6b, 0x61, + 0x14, 0x41, 0x67, 0x72, 0x61, 0x68, 0x61, 0x79, + 0x61, 0x6e, 0x61, 0x0a, 0x50, 0x61, 0x75, 0x73, + 0x61, 0x0a, 0x4d, 0x61, 0x67, 0x68, 0x61, 0x10, + 0x50, 0x68, 0x61, 0x6c, 0x67, 0x75, 0x6e, 0x61, + 0x08, 0x53, 0x61, 0x6b, 0x61, 0x08, 0x4d, 0x75, + 0x68, 0x2e, 0x08, 0x53, 0x61, 0x66, 0x2e, 0x0c, + 0x52, 0x61, 0x62, 0x2e, 0x20, 0x49, 0x0e, 0x52, + 0x61, 0x62, 0x2e, 0x20, 0x49, 0x49, 0x0c, 0x4a, + 0x75, 0x6d, 0x2e, 0x20, 0x49, 0x0e, 0x4a, 0x75, + 0x6d, 0x2e, 0x20, 0x49, 0x49, 0x08, 0x52, 0x61, + 0x6a, 0x2e, 0x08, 0x53, 0x68, 0x61, 0x2e, 0x08, + 0x52, 0x61, 0x6d, 0x2e, 0x0a, 0x53, 0x68, 0x61, + 0x77, 0x2e, 0x11, 0x44, 0x00, 0x68, 0x00, 0x75, + 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x51, + 0x00, 0x2e, 0x00, 0x11, 0x44, 0x00, 0x68, 0x00, + 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, + 0x48, 0x00, 0x2e, 0x00, 0x10, 0x4d, 0x75, 0x68, + 0x61, 0x72, 0x72, 0x61, 0x6d, 0x0a, 0x53, 0x61, + 0x66, 0x61, 0x72, 0x0f, 0x52, 0x00, 0x61, 0x00, + 0x62, 0x00, 0x69, 0x00, 0xbb, 0x02, 0x20, 0x00, + 0x49, 0x00, 0x11, 0x52, 0x00, 0x61, 0x00, 0x62, + 0x00, 0x69, 0x00, 0xbb, 0x02, 0x20, 0x00, 0x49, + 0x00, 0x49, 0x00, 0x10, 0x4a, 0x75, 0x6d, 0x61, + 0x64, 0x61, 0x20, 0x49, 0x12, 0x4a, 0x75, 0x6d, + 0x61, 0x64, 0x61, 0x20, 0x49, 0x49, 0x0a, 0x52, + 0x61, 0x6a, 0x61, 0x62, 0x0f, 0x53, 0x00, 0x68, + 0x00, 0x61, 0x00, 0xbb, 0x02, 0x62, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x0e, 0x52, 0x61, 0x6d, 0x61, + 0x64, 0x61, 0x6e, 0x0e, 0x53, 0x68, 0x61, 0x77, + 0x77, 0x61, 0x6c, 0x19, 0x44, 0x00, 0x68, 0x00, + 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, + 0x51, 0x00, 0x69, 0x00, 0xbb, 0x02, 0x64, 0x00, + 0x61, 0x00, 0x68, 0x00, 0x19, 0x44, 0x00, 0x68, + 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, + 0x00, 0x48, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x6a, + 0x00, 0x61, 0x00, 0x68, 0x00, 0x04, 0x41, 0x48, + 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, 0x36, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x36, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x48, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x36, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x36, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, + 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x1d, 0x57, 0x00, 0x61, 0x00, 0x64, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, + 0x52, 0x00, 0x65, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, 0x59, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x2d, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6d, 0x00, + 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x2b, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x2d, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, 0x2d, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x2a, 0x4a, 0x69, + 0x6e, 0x67, 0x6f, 0x2d, 0x6b, 0x65, 0x69, 0x75, + 0x6e, 0x20, 0x28, 0x37, 0x36, 0x37, 0x2d, 0x37, + 0x37, 0x30, 0x29, 0x1d, 0x48, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x38, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x1f, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x2d, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x1f, 0x44, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1d, 0x4a, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x4b, + 0x00, 0x61, 0x00, 0x6a, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1f, 0x53, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x20, 0x54, 0x65, 0x6e, 0x2d, 0x61, 0x6e, + 0x20, 0x28, 0x38, 0x35, 0x37, 0x2d, 0x38, 0x35, + 0x39, 0x29, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x21, 0x47, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x61, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x1f, 0x45, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, + 0x4a, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1b, + 0x4c, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, + 0x41, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x1f, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, 0x45, + 0x00, 0x69, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, + 0x73, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x69, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x27, 0x4a, 0x00, 0x69, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x29, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4c, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x61, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x25, 0x4a, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x24, 0x54, 0x65, + 0x6e, 0x2d, 0x65, 0x69, 0x20, 0x28, 0x31, 0x31, + 0x31, 0x30, 0x2d, 0x31, 0x31, 0x31, 0x33, 0x29, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x21, 0x48, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x44, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x48, 0x00, 0x65, 0x00, 0x69, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x27, 0x45, 0x00, 0x69, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1f, 0x4c, 0x01, 0x68, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x61, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x41, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x4a, 0x00, 0x69, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x59, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, + 0x00, 0x75, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x29, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, + 0x6e, 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x4d, 0x01, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x27, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x75, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x29, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, 0x29, + 0x52, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x45, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x4c, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x61, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6d, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x74, 0x00, 0x73, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x48, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, + 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x27, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x21, 0x4c, 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x21, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, + 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x27, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, + 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x72, 0x00, 0x65, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x62, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x27, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4d, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x0d, 0x01, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x36, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x68, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x36, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x1d, 0x60, 0x01, + 0x75, 0x00, 0x0d, 0x01, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1d, 0x56, 0x00, 0x61, 0x00, 0x64, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1d, 0x4a, + 0x00, 0x6f, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, + 0x6d, 0x00, 0x70, 0x00, 0x69, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x37, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, + 0x00, 0x6d, 0x00, 0x70, 0x00, 0x69, 0x00, 0x6f, + 0x00, 0x2d, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6d, + 0x00, 0x70, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x2b, 0x54, 0x00, 0x65, 0x00, 0x6d, 0x00, + 0x70, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x2d, 0x00, + 0x61, 0x01, 0x6f, 0x00, 0x68, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x37, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, + 0x00, 0x6d, 0x00, 0x70, 0x00, 0x69, 0x00, 0x6f, + 0x00, 0x2d, 0x00, 0x68, 0x00, 0x6f, 0x00, 0x64, + 0x00, 0x7a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6d, 0x00, + 0x70, 0x00, 0x6f, 0x00, 0x2d, 0x00, 0x64, 0x00, + 0x7a, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, 0x2d, 0x44, + 0x00, 0x7a, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x6f, 0x00, 0x2d, 0x00, 0x6b, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x1d, 0x48, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x38, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x1f, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6a, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x1f, 0x44, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x64, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x1f, 0x4b, 0x00, 0x6f, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1f, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x0d, + 0x01, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, + 0x60, 0x01, 0x6f, 0x00, 0x76, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x61, + 0x00, 0x6a, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1f, 0x53, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x6b, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x1f, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, + 0x4a, 0x00, 0x6f, 0x00, 0x67, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, + 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x61, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x6a, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1f, + 0x60, 0x01, 0x6f, 0x00, 0x74, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, 0x45, + 0x00, 0x6e, 0x00, 0x0d, 0x01, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1f, 0x60, 0x01, 0x6f, 0x00, + 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x6a, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x34, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x69, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x1b, 0x4f, 0x00, 0x76, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x6f, 0x00, + 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x1b, 0x41, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x2d, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x6f, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x1f, 0x45, 0x00, 0x69, 0x00, 0x2d, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x60, 0x01, 0x6f, 0x00, 0x72, 0x00, 0x6a, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x21, 0x0c, 0x01, 0x6f, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1f, 0x0c, 0x01, 0x6f, 0x00, + 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x0c, 0x01, + 0x6f, 0x00, 0x76, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x44, 0x00, 0x7e, 0x01, 0x69, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x64, 0x00, 0x7e, 0x01, 0x69, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x23, 0x0c, 0x01, 0x6f, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x29, 0x00, 0x27, 0x0c, + 0x01, 0x6f, 0x00, 0x72, 0x00, 0x6a, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x0c, 0x01, + 0x6f, 0x00, 0x6b, 0x00, 0x6a, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x45, 0x00, 0x69, 0x00, 0x61, 0x01, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x6f, 0x00, 0x68, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x29, 0x44, 0x00, 0x7e, + 0x01, 0x69, 0x00, 0x72, 0x00, 0x6a, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x6a, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x60, 0x01, 0x6f, 0x00, 0x68, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x27, 0x60, 0x01, 0x6f, 0x00, 0x72, 0x00, + 0x6a, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1f, 0x45, 0x00, 0x69, 0x00, 0x68, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x30, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4f, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x64, 0x00, 0x7e, 0x01, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x61, 0x00, 0x68, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x21, 0x45, 0x00, 0x69, 0x00, 0x0d, 0x01, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x25, 0x60, 0x01, 0x6f, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x6f, 0x00, 0x76, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x0c, 0x01, 0x6f, 0x00, 0x64, 0x00, 0x7e, 0x01, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x61, + 0x01, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x6b, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x6f, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x64, 0x00, 0x7e, 0x01, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x64, 0x00, 0x7e, 0x01, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x61, 0x01, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x21, 0x0c, 0x01, 0x6f, 0x00, 0x61, 0x01, + 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x21, 0x48, 0x00, 0x6f, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x64, 0x00, 0x7e, 0x01, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x6f, 0x00, 0x64, 0x00, 0x7e, 0x01, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x6a, + 0x00, 0x75, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x6a, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x48, 0x00, 0x6f, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x64, 0x00, 0x7e, 0x01, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x27, 0x45, 0x00, 0x69, 0x00, 0x72, + 0x00, 0x6a, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1f, 0x4f, 0x00, 0x68, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x23, 0x0c, 0x01, 0x6f, 0x00, 0x6b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x2d, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x60, 0x01, 0x6f, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x44, 0x00, 0x7e, 0x01, 0x69, 0x00, 0x61, + 0x01, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x6f, 0x00, + 0x76, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x23, 0x44, 0x00, 0x7e, + 0x01, 0x75, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x6a, 0x00, 0x75, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x64, + 0x00, 0x7e, 0x01, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x6a, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x60, 0x01, 0x6f, 0x00, 0x64, + 0x00, 0x7e, 0x01, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x60, 0x01, 0x6f, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x29, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6a, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x60, 0x01, 0x6f, 0x00, 0x6b, 0x00, + 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x1f, 0x44, 0x00, 0x7e, + 0x01, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x44, + 0x00, 0x7e, 0x01, 0x6f, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x27, 0x54, 0x00, 0x65, 0x00, 0x6d, 0x00, + 0x70, 0x00, 0x75, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x29, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x6a, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x29, 0x52, 0x00, 0x6a, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, 0x2d, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x64, 0x00, 0x7e, 0x01, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x23, 0x48, 0x00, 0x6f, 0x00, 0x64, 0x00, 0x7e, + 0x01, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x0d, 0x01, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x6f, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x21, 0x60, 0x01, 0x6f, 0x00, 0x6b, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x60, 0x01, 0x6f, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x6f, 0x00, 0x0d, 0x01, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x2d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x64, 0x00, 0x7e, + 0x01, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x6f, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x1d, 0x60, 0x01, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x21, 0x60, 0x01, 0x6f, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x27, 0x54, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x64, 0x00, 0x7e, 0x01, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4f, 0x00, 0x0d, + 0x01, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x21, 0x60, 0x01, 0x6f, 0x00, + 0x76, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x44, 0x00, 0x7e, 0x01, 0x65, 0x00, 0x6e, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x27, 0x44, 0x00, 0x7e, 0x01, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x6a, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x21, 0x60, 0x01, 0x6f, 0x00, 0x0d, 0x01, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x72, + 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x65, 0x00, 0x6d, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x60, 0x01, 0x6f, 0x00, 0x68, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x0d, 0x01, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x64, 0x00, 0x7e, + 0x01, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x6f, 0x00, + 0x72, 0x00, 0x6a, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x6f, 0x00, 0x76, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x0d, 0x01, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1d, 0x4b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x1f, 0x4f, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x60, 0x01, 0x6f, 0x00, 0x0d, + 0x01, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x6b, 0x00, 0x6a, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, 0x6f, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x6a, 0x00, 0x6f, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x6f, 0x00, 0x61, 0x01, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x25, 0x0c, 0x01, 0x6f, 0x00, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x61, 0x01, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x61, + 0x01, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x21, 0x4f, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x0c, 0x01, 0x6f, + 0x00, 0x6b, 0x00, 0x6a, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x45, 0x00, 0x69, 0x00, 0x61, 0x01, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x6a, 0x00, 0x6f, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, + 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x6f, 0x00, 0x64, 0x00, 0x7e, 0x01, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x61, + 0x01, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x0d, 0x01, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x76, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x2d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x60, + 0x01, 0x6f, 0x00, 0x68, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, + 0x60, 0x01, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x29, 0x4d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x72, 0x00, 0x6a, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x4d, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x64, 0x00, 0x7e, 0x01, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x76, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x44, + 0x00, 0x7e, 0x01, 0x6f, 0x00, 0x6b, 0x00, 0x6a, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x6f, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x60, 0x01, 0x6f, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x6a, 0x00, 0x6f, 0x00, + 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x6a, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x2d, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, + 0x48, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x6a, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x76, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x2d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x6a, + 0x00, 0x6f, 0x00, 0x76, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x4d, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x2d, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x64, 0x00, 0x7e, 0x01, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x0d, 0x4d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x64, 0x00, 0x7e, 0x01, + 0x69, 0x00, 0x0b, 0x54, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x61, 0x01, 0x6f, 0x00, 0x09, 0x60, 0x01, + 0x6f, 0x00, 0x76, 0x00, 0x61, 0x00, 0x0c, 0x48, + 0x65, 0x69, 0x73, 0x65, 0x69, 0x12, 0x46, 0x61, + 0x72, 0x76, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x16, + 0x4f, 0x72, 0x64, 0x69, 0x62, 0x65, 0x68, 0x65, + 0x73, 0x68, 0x74, 0x0e, 0x4b, 0x68, 0x6f, 0x72, + 0x64, 0x61, 0x64, 0x06, 0x54, 0x69, 0x72, 0x0c, + 0x4d, 0x6f, 0x72, 0x64, 0x61, 0x64, 0x12, 0x53, + 0x68, 0x61, 0x68, 0x72, 0x69, 0x76, 0x61, 0x72, + 0x08, 0x4d, 0x65, 0x68, 0x72, 0x08, 0x41, 0x62, + 0x61, 0x6e, 0x08, 0x41, 0x7a, 0x61, 0x72, 0x06, + 0x44, 0x65, 0x79, 0x0c, 0x42, 0x61, 0x68, 0x6d, + 0x61, 0x6e, 0x0c, 0x45, 0x73, 0x66, 0x61, 0x6e, + 0x64, 0x04, 0x41, 0x50, 0x19, 0x50, 0x00, 0x72, + 0x00, 0x69, 0x00, 0x65, 0x00, 0x61, 0x01, 0x20, + 0x00, 0x52, 0x00, 0x2e, 0x00, 0x4f, 0x00, 0x2e, + 0x00, 0x43, 0x00, 0x2e, 0x00, 0x0c, 0x52, 0x2e, + 0x4f, 0x2e, 0x43, 0x2e, 0x12, 0x63, 0x61, 0x6c, + 0x65, 0x6e, 0x64, 0x61, 0x72, 0x73, 0x08, 0x64, + 0x61, 0x74, 0x65, 0x08, 0x6c, 0x61, 0x74, 0x6e, + 0x04, 0x6e, 0x75, 0x10, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, + 0x74, 0x65, 0x72, 0x6e, 0x26, 0x7b, 0x6d, 0x69, + 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0x1e, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, + 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, + 0x0e, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, + 0x26, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0xa0, 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x63, 0x79, 0x7d, 0x3c, 0x7b, 0x6d, 0x69, + 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0xa0, 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x79, 0x7d, 0x10, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x63, 0x79, 0x2c, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0xa0, 0x7b, 0x70, + 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, + 0x67, 0x6e, 0x7d, 0x42, 0x7b, 0x6d, 0x69, 0x6e, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0xa0, + 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x0e, 0x70, 0x65, + 0x72, 0x63, 0x65, 0x6e, 0x74, 0x10, 0x70, 0x61, + 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x02, 0x2c, + 0x02, 0xa0, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x06, 0x4e, 0x61, 0x4e, 0x06, 0x6e, 0x61, 0x6e, + 0x02, 0x2b, 0x10, 0x70, 0x6c, 0x75, 0x73, 0x53, + 0x69, 0x67, 0x6e, 0x03, 0x12, 0x22, 0x12, 0x6d, + 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x02, 0x25, 0x16, 0x70, 0x65, 0x72, 0x63, 0x65, + 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x03, 0x1e, + 0x22, 0x10, 0x69, 0x6e, 0x66, 0x69, 0x6e, 0x69, + 0x74, 0x79, 0x0e, 0x73, 0x79, 0x6d, 0x62, 0x6f, + 0x6c, 0x73, 0x03, 0xac, 0x20, 0x06, 0x45, 0x55, + 0x52, 0x14, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x69, 0x65, 0x73, 0x52, 0x6e, 0x6f, 0x64, + 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, + 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2f, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, + 0x74, 0x61, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x70, + 0x2f, 0x6c, 0x74, 0x2e, 0x6a, 0x73, 0x0d, 0x00, + 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, 0x27, + 0x00, 0xb9, 0x01, 0xd6, 0x68, 0x01, 0xa0, 0x01, + 0x00, 0x00, 0x00, 0x39, 0xd0, 0x00, 0x00, 0x00, + 0x43, 0xd1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd2, + 0x00, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xd4, 0x00, 0x00, 0x00, 0x04, 0xd5, + 0x00, 0x00, 0x00, 0x04, 0xd6, 0x00, 0x00, 0x00, + 0x04, 0xd7, 0x00, 0x00, 0x00, 0x04, 0xd8, 0x00, + 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x04, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xdb, 0x00, 0x00, + 0x00, 0x04, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xdd, + 0x00, 0x00, 0x00, 0x04, 0xde, 0x00, 0x00, 0x00, + 0x04, 0xdf, 0x00, 0x00, 0x00, 0x04, 0xe0, 0x00, + 0x00, 0x00, 0x04, 0xe1, 0x00, 0x00, 0x00, 0x04, + 0xe2, 0x00, 0x00, 0x00, 0x26, 0x0f, 0x00, 0x4d, + 0xe3, 0x00, 0x00, 0x00, 0x0a, 0x4d, 0xe4, 0x00, + 0x00, 0x00, 0x09, 0x4d, 0xe5, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x00, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0xec, 0x00, 0x00, 0x00, 0x04, 0xed, 0x00, 0x00, + 0x00, 0x4d, 0xee, 0x00, 0x00, 0x00, 0x04, 0xef, + 0x00, 0x00, 0x00, 0x4d, 0xf0, 0x00, 0x00, 0x00, + 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, 0xf2, 0x00, + 0x00, 0x00, 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, + 0xf4, 0x00, 0x00, 0x00, 0x04, 0xf5, 0x00, 0x00, + 0x00, 0x4d, 0xf6, 0x00, 0x00, 0x00, 0x04, 0xf7, + 0x00, 0x00, 0x00, 0x4d, 0xf8, 0x00, 0x00, 0x00, + 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0xfa, 0x00, + 0x00, 0x00, 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, + 0xfc, 0x00, 0x00, 0x00, 0x04, 0xfd, 0x00, 0x00, + 0x00, 0x4d, 0xfe, 0x00, 0x00, 0x00, 0x04, 0xff, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x01, 0x00, 0x00, + 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0x02, 0x01, + 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, + 0x04, 0x01, 0x00, 0x00, 0x04, 0x05, 0x01, 0x00, + 0x00, 0x4d, 0x06, 0x01, 0x00, 0x00, 0x04, 0x07, + 0x01, 0x00, 0x00, 0x4d, 0x08, 0x01, 0x00, 0x00, + 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0x0a, 0x01, + 0x00, 0x00, 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, + 0x0c, 0x01, 0x00, 0x00, 0x04, 0x0d, 0x01, 0x00, + 0x00, 0x4d, 0x0e, 0x01, 0x00, 0x00, 0x04, 0x0f, + 0x01, 0x00, 0x00, 0x4d, 0x10, 0x01, 0x00, 0x00, + 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, 0x12, 0x01, + 0x00, 0x00, 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, + 0x14, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x4d, 0x16, 0x01, 0x00, 0x00, 0x04, 0x17, + 0x01, 0x00, 0x00, 0x4d, 0x18, 0x01, 0x00, 0x00, + 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, 0x1a, 0x01, + 0x00, 0x00, 0x04, 0x1b, 0x01, 0x00, 0x00, 0x4d, + 0x1c, 0x01, 0x00, 0x00, 0x04, 0x1d, 0x01, 0x00, + 0x00, 0x4d, 0x1e, 0x01, 0x00, 0x00, 0x04, 0x1f, + 0x01, 0x00, 0x00, 0x4d, 0x20, 0x01, 0x00, 0x00, + 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, 0x22, 0x01, + 0x00, 0x00, 0x04, 0x1b, 0x01, 0x00, 0x00, 0x4d, + 0x23, 0x01, 0x00, 0x00, 0x04, 0x21, 0x01, 0x00, + 0x00, 0x4d, 0x24, 0x01, 0x00, 0x00, 0x04, 0x1f, + 0x01, 0x00, 0x00, 0x4d, 0x25, 0x01, 0x00, 0x00, + 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, 0x27, 0x01, + 0x00, 0x00, 0x04, 0x28, 0x01, 0x00, 0x00, 0x4d, + 0x29, 0x01, 0x00, 0x00, 0x04, 0x2a, 0x01, 0x00, + 0x00, 0x4d, 0x2b, 0x01, 0x00, 0x00, 0x04, 0x2c, + 0x01, 0x00, 0x00, 0x4d, 0x2d, 0x01, 0x00, 0x00, + 0x04, 0x2e, 0x01, 0x00, 0x00, 0x4d, 0x2e, 0x01, + 0x00, 0x00, 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, + 0x30, 0x01, 0x00, 0x00, 0x04, 0x31, 0x01, 0x00, + 0x00, 0x4d, 0x32, 0x01, 0x00, 0x00, 0x04, 0x33, + 0x01, 0x00, 0x00, 0x4d, 0x34, 0x01, 0x00, 0x00, + 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, 0x35, 0x01, + 0x00, 0x00, 0x04, 0x31, 0x01, 0x00, 0x00, 0x4d, + 0x36, 0x01, 0x00, 0x00, 0x04, 0x33, 0x01, 0x00, + 0x00, 0x4d, 0x37, 0x01, 0x00, 0x00, 0x04, 0x38, + 0x01, 0x00, 0x00, 0x4d, 0x39, 0x01, 0x00, 0x00, + 0x04, 0x3a, 0x01, 0x00, 0x00, 0x4d, 0x3b, 0x01, + 0x00, 0x00, 0x04, 0x3c, 0x01, 0x00, 0x00, 0x4d, + 0x3d, 0x01, 0x00, 0x00, 0x04, 0x3e, 0x01, 0x00, + 0x00, 0x4d, 0x3f, 0x01, 0x00, 0x00, 0x04, 0x40, + 0x01, 0x00, 0x00, 0x4d, 0x41, 0x01, 0x00, 0x00, + 0x4d, 0x42, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x43, + 0x01, 0x00, 0x00, 0x4d, 0x44, 0x01, 0x00, 0x00, + 0x04, 0x3a, 0x01, 0x00, 0x00, 0x4d, 0x3b, 0x01, + 0x00, 0x00, 0x04, 0x31, 0x01, 0x00, 0x00, 0x4d, + 0x36, 0x01, 0x00, 0x00, 0x04, 0x31, 0x01, 0x00, + 0x00, 0x4d, 0x32, 0x01, 0x00, 0x00, 0x4d, 0x45, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x46, 0x01, 0x00, + 0x00, 0x4d, 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x4d, 0x49, 0x01, 0x00, 0x00, + 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, 0x10, 0x01, + 0x00, 0x00, 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, + 0x0c, 0x01, 0x00, 0x00, 0x4d, 0x4a, 0x01, 0x00, + 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x0b, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6c, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x53, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x80, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x80, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x82, 0x01, 0x00, 0x00, 0x4d, 0x83, 0x01, 0x00, + 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x4d, 0x85, + 0x01, 0x00, 0x00, 0x4d, 0x86, 0x01, 0x00, 0x00, + 0x4d, 0xd5, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x00, 0xbe, 0x01, 0xbe, 0x02, 0xbe, 0x03, 0xbe, + 0x04, 0xbe, 0x05, 0xbe, 0x06, 0xbe, 0x07, 0xbe, + 0x08, 0xbe, 0x09, 0xbe, 0x0a, 0xbe, 0x0b, 0x26, + 0x0c, 0x00, 0x4d, 0x53, 0x01, 0x00, 0x00, 0xbe, + 0x0c, 0xbe, 0x0d, 0xbe, 0x0e, 0xbe, 0x0f, 0xbe, + 0x10, 0xbe, 0x11, 0xbe, 0x12, 0xbe, 0x13, 0xbe, + 0x14, 0xbe, 0x15, 0xbe, 0x16, 0xbe, 0x17, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0xbe, + 0x18, 0xbe, 0x19, 0xbe, 0x1a, 0xbe, 0x1b, 0xbe, + 0x1c, 0xbe, 0x1d, 0xbe, 0x1e, 0xbe, 0x1f, 0xbe, + 0x20, 0xbe, 0x21, 0xbe, 0x22, 0xbe, 0x23, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x6c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7f, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x82, 0x01, 0x00, + 0x00, 0x4d, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, + 0x01, 0x00, 0x00, 0x4d, 0x85, 0x01, 0x00, 0x00, + 0x4d, 0x86, 0x01, 0x00, 0x00, 0x4d, 0xd6, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x24, 0xbe, 0x25, + 0xbe, 0x26, 0xbe, 0x27, 0xbe, 0x28, 0xbe, 0x29, + 0xbe, 0x2a, 0xbe, 0x2b, 0xbe, 0x2c, 0xbe, 0x2d, + 0xbe, 0x2e, 0xbe, 0x2f, 0xbe, 0x30, 0x26, 0x0d, + 0x00, 0x4d, 0x53, 0x01, 0x00, 0x00, 0x04, 0x87, + 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, + 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, + 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, + 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, + 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, + 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, + 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, + 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, + 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, + 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, + 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, + 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, + 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, + 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, + 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x6c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x53, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x7f, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x94, 0x01, + 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x82, 0x01, 0x00, 0x00, 0x4d, 0x83, + 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, + 0x4d, 0x85, 0x01, 0x00, 0x00, 0x4d, 0x86, 0x01, + 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x31, 0xbe, 0x32, 0xbe, 0x33, 0xbe, + 0x34, 0xbe, 0x35, 0xbe, 0x36, 0xbe, 0x37, 0xbe, + 0x38, 0xbe, 0x39, 0xbe, 0x3a, 0xbe, 0x3b, 0xbe, + 0x3c, 0x26, 0x0c, 0x00, 0x4d, 0x53, 0x01, 0x00, + 0x00, 0xbe, 0x3d, 0xbe, 0x3e, 0xbe, 0x3f, 0xbe, + 0x40, 0xbe, 0x41, 0xbe, 0x42, 0xbe, 0x43, 0xbe, + 0x44, 0xbe, 0x45, 0xbe, 0x46, 0xbe, 0x47, 0xbe, + 0x48, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0xbe, 0x49, 0xbe, 0x4a, 0xbe, 0x4b, 0xbe, + 0x4c, 0xbe, 0x4d, 0xbe, 0x4e, 0xbe, 0x4f, 0xbe, + 0x50, 0xbe, 0x51, 0xbe, 0x52, 0xbe, 0x53, 0xbe, + 0x54, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x6c, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x4d, 0x83, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x4d, 0x85, 0x01, + 0x00, 0x00, 0x4d, 0x86, 0x01, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x55, + 0xbe, 0x56, 0xbe, 0x57, 0xbe, 0x58, 0xbe, 0x59, + 0xbe, 0x5a, 0xbe, 0x5b, 0xbe, 0x5c, 0xbe, 0x5d, + 0xbe, 0x5e, 0xbe, 0x5f, 0xbe, 0x60, 0xbe, 0x61, + 0x26, 0x0d, 0x00, 0x4d, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, + 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, + 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, + 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, + 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, + 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, + 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, + 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, + 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, + 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, + 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, + 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, + 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, + 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, + 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x6c, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, + 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x53, 0x01, 0x00, + 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, + 0x04, 0x95, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x81, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x82, 0x01, 0x00, 0x00, + 0x4d, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, + 0x00, 0x00, 0x4d, 0x85, 0x01, 0x00, 0x00, 0x4d, + 0x86, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x62, 0xbe, 0x63, 0xbe, + 0x64, 0xbe, 0x65, 0xbe, 0x66, 0xbe, 0x67, 0xbe, + 0x68, 0xbe, 0x69, 0xbe, 0x6a, 0xbe, 0x6b, 0xbe, + 0x6c, 0xbe, 0x6d, 0xbe, 0x6e, 0x26, 0x0d, 0x00, + 0x4d, 0x53, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, + 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, + 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, + 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, + 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, + 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, + 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, + 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, + 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x26, 0x0d, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x96, + 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, + 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, + 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, + 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, + 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, + 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, + 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, + 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x6c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7f, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x94, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x53, 0x01, 0x00, + 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x94, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x82, 0x01, 0x00, 0x00, 0x4d, 0x83, + 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, + 0x4d, 0x85, 0x01, 0x00, 0x00, 0x4d, 0x86, 0x01, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x6f, 0xbe, 0x70, 0xbe, 0x71, 0xbe, + 0x72, 0xbe, 0x73, 0xbe, 0x74, 0xbe, 0x75, 0xbe, + 0x76, 0xbe, 0x77, 0xbe, 0x78, 0xbe, 0x79, 0xbe, + 0x7a, 0x26, 0x0c, 0x00, 0x4d, 0x53, 0x01, 0x00, + 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, + 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, + 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, + 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, + 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, + 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, + 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, + 0x04, 0xae, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa3, 0x01, + 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, + 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, + 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, + 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, + 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, + 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, + 0xad, 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x6c, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x94, + 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, + 0x95, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x82, 0x01, 0x00, 0x00, 0x4d, + 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, + 0x00, 0x4d, 0x85, 0x01, 0x00, 0x00, 0x4d, 0x86, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6c, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7f, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xaf, 0x01, 0x00, 0x00, + 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, + 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, 0x26, + 0x04, 0x00, 0x4d, 0x53, 0x01, 0x00, 0x00, 0x04, + 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, + 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, + 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, + 0x04, 0xb4, 0x01, 0x00, 0x00, 0x04, 0xb5, 0x01, + 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, 0x26, + 0x04, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x81, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x82, 0x01, + 0x00, 0x00, 0x4d, 0x83, 0x01, 0x00, 0x00, 0x04, + 0x84, 0x01, 0x00, 0x00, 0x4d, 0x85, 0x01, 0x00, + 0x00, 0x4d, 0x86, 0x01, 0x00, 0x00, 0x4d, 0xd4, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x7b, 0xbe, + 0x7c, 0xbe, 0x7d, 0xbe, 0x7e, 0xbe, 0x7f, 0xbe, + 0x80, 0xbe, 0x81, 0xbe, 0x82, 0xbe, 0x83, 0xbe, + 0x84, 0xbe, 0x85, 0xbe, 0x86, 0xbe, 0x87, 0xbe, + 0x88, 0x26, 0x0e, 0x00, 0x4d, 0x53, 0x01, 0x00, + 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb7, + 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, + 0x04, 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, + 0x00, 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, + 0xbc, 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, + 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, + 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, + 0x04, 0xc1, 0x01, 0x00, 0x00, 0x04, 0xc2, 0x01, + 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, 0x26, + 0x0e, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, + 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, 0x04, 0xb9, + 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, + 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, 0x01, + 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, 0x04, + 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, 0x00, + 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, 0x04, 0xc1, + 0x01, 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, 0x00, + 0x04, 0xc3, 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6c, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x53, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xc4, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x53, 0x01, 0x00, 0x00, 0x04, + 0xc4, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x82, 0x01, 0x00, 0x00, 0x4d, 0x83, 0x01, 0x00, + 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x4d, 0x85, + 0x01, 0x00, 0x00, 0x4d, 0x86, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x89, 0xbe, 0x8a, 0xbe, 0x8b, 0xbe, 0x8c, 0xbe, + 0x8d, 0xbe, 0x8e, 0xbe, 0x8f, 0xbe, 0x90, 0xbe, + 0x91, 0xbe, 0x92, 0xbe, 0x93, 0xbe, 0x94, 0x26, + 0x0c, 0x00, 0x4d, 0x53, 0x01, 0x00, 0x00, 0x04, + 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, + 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, + 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, + 0x04, 0xca, 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, + 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, + 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, + 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, + 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, + 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, + 0xc9, 0x01, 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, + 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, + 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, + 0x04, 0xce, 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, + 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x6c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7f, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xd1, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x53, 0x01, 0x00, + 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd1, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x82, 0x01, 0x00, 0x00, 0x4d, 0x83, + 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, + 0x4d, 0x85, 0x01, 0x00, 0x00, 0x4d, 0x86, 0x01, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x95, 0xbe, 0x96, 0xbe, 0x97, 0xbe, + 0x98, 0xbe, 0x99, 0xbe, 0x9a, 0xbe, 0x9b, 0xbe, + 0x9c, 0xbe, 0x9d, 0xbe, 0x9e, 0xbe, 0x9f, 0xbe, + 0xa0, 0x26, 0x0c, 0x00, 0x4d, 0x53, 0x01, 0x00, + 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, + 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, + 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, + 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, + 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, + 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, + 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, + 0x04, 0xdd, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xde, 0x01, + 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, + 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, + 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, 0xe3, + 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, + 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, + 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, + 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x6c, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xea, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x53, + 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xea, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x81, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x82, 0x01, 0x00, 0x00, + 0x4d, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, + 0x00, 0x00, 0x4d, 0x85, 0x01, 0x00, 0x00, 0x4d, + 0x86, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0xa1, 0xbe, 0xa2, 0xbe, + 0xa3, 0xbe, 0xa4, 0xbe, 0xa5, 0xbe, 0xa6, 0xbe, + 0xa7, 0xbe, 0xa8, 0xbe, 0xa9, 0xbe, 0xaa, 0xbe, + 0xab, 0xbe, 0xac, 0x26, 0x0c, 0x00, 0x4d, 0x53, + 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, + 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, + 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, + 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, + 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, + 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, + 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, + 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, + 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, + 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, + 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, + 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, + 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, + 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x6c, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xea, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x53, 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x81, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x82, 0x01, + 0x00, 0x00, 0x4d, 0x83, 0x01, 0x00, 0x00, 0x04, + 0x84, 0x01, 0x00, 0x00, 0x4d, 0x85, 0x01, 0x00, + 0x00, 0x4d, 0x86, 0x01, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x53, 0x01, 0x00, + 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x6c, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xeb, + 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, + 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, + 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, + 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, + 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, + 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, + 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, + 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, + 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, + 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, + 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, + 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, + 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, + 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, + 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, 0x04, 0x03, + 0x02, 0x00, 0x00, 0x04, 0x04, 0x02, 0x00, 0x00, + 0x04, 0x05, 0x02, 0x00, 0x00, 0x04, 0x06, 0x02, + 0x00, 0x00, 0x04, 0x07, 0x02, 0x00, 0x00, 0x04, + 0x08, 0x02, 0x00, 0x00, 0x04, 0x09, 0x02, 0x00, + 0x00, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x26, 0x20, + 0x00, 0x04, 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x20, + 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, 0x00, 0x00, + 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, + 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, + 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, + 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x24, + 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, + 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, + 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, + 0x12, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, + 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, 0x4d, 0x28, + 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, + 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, + 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, + 0x16, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, + 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, 0x4d, 0x2c, + 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, + 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, + 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, + 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, + 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x30, + 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, + 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, + 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, + 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, + 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x34, + 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, + 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, + 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, + 0x22, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, + 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, 0x38, + 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, + 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, + 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, + 0x26, 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, + 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, 0x3c, + 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, + 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, + 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, + 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, + 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x40, + 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, + 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, + 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, + 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, + 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x44, + 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, + 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, + 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, + 0x32, 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, + 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, 0x48, + 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, + 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, + 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, + 0x36, 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, + 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, 0x4c, + 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, + 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, + 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, + 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, + 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x50, + 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, + 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, + 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, + 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, + 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x54, + 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, + 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, + 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, + 0x42, 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, + 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, 0x58, + 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, + 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, + 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, + 0x46, 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, + 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, 0x5c, + 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, + 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, + 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, + 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, + 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x60, + 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, + 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, + 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, + 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, + 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x64, + 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, + 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, + 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, + 0x52, 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, + 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, 0x68, + 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, + 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, + 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, + 0x56, 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, + 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, 0x6c, + 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, + 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, + 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, + 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, + 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x70, + 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, + 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, + 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, + 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, + 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x74, + 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, + 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, + 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, + 0x62, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, + 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, 0x78, + 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, + 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, + 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, + 0x66, 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, + 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, 0x7c, + 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, + 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, + 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, + 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, + 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x80, + 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, + 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, + 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, + 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, + 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x84, + 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, + 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, + 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, + 0x72, 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, + 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, 0x88, + 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, + 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, + 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, + 0x76, 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, + 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, 0x8c, + 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, + 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, + 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, + 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, + 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x90, + 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, + 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, + 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, + 0x7e, 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, + 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, 0x94, + 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, + 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, + 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, + 0x82, 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, + 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, 0x98, + 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, + 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, + 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, + 0x86, 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, + 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, 0x9c, + 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, + 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, + 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, + 0x8a, 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, + 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xa0, + 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, + 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, + 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, + 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, + 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xa4, + 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, + 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, + 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, + 0x92, 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, + 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, 0xa8, + 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, + 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, + 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, + 0x96, 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, + 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, 0xac, + 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, + 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, + 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, + 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, + 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xb0, + 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, + 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, + 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, + 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, + 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xb4, + 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, + 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, + 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, + 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, + 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xb8, + 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, + 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, + 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, + 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, + 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xbc, + 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, + 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, + 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, + 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, + 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, 0xc0, + 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, + 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, + 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, + 0xae, 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, + 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xc4, + 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, + 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, + 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, + 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, + 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xc8, + 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, + 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, + 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, + 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, + 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xcc, + 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, + 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, + 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, + 0xba, 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, + 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xd0, + 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, + 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, + 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, + 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, + 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xd4, + 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, + 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, + 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, + 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, + 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, + 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, + 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xc9, 0x02, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, + 0xca, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xcd, 0x02, + 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, + 0xce, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, 0x4d, 0xe4, + 0x00, 0x00, 0x80, 0x04, 0xd0, 0x02, 0x00, 0x00, + 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0xd1, 0x02, + 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, + 0xd2, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x80, 0x04, 0x1c, 0x01, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x80, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, + 0x0a, 0x01, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x80, 0x4d, 0x53, 0x01, 0x00, 0x00, 0x04, 0xeb, + 0x01, 0x00, 0x00, 0x04, 0xd3, 0x02, 0x00, 0x00, + 0x04, 0xd4, 0x02, 0x00, 0x00, 0x04, 0xd5, 0x02, + 0x00, 0x00, 0x04, 0xd6, 0x02, 0x00, 0x00, 0x04, + 0xf0, 0x01, 0x00, 0x00, 0x04, 0xd7, 0x02, 0x00, + 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, 0xd8, + 0x02, 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, + 0x04, 0xd9, 0x02, 0x00, 0x00, 0x04, 0xda, 0x02, + 0x00, 0x00, 0x04, 0xdb, 0x02, 0x00, 0x00, 0x04, + 0xdc, 0x02, 0x00, 0x00, 0x04, 0xdd, 0x02, 0x00, + 0x00, 0x04, 0xde, 0x02, 0x00, 0x00, 0x04, 0xdf, + 0x02, 0x00, 0x00, 0x04, 0xe0, 0x02, 0x00, 0x00, + 0x04, 0xe1, 0x02, 0x00, 0x00, 0x04, 0xe2, 0x02, + 0x00, 0x00, 0x04, 0xe3, 0x02, 0x00, 0x00, 0x04, + 0xe4, 0x02, 0x00, 0x00, 0x04, 0xe5, 0x02, 0x00, + 0x00, 0x04, 0xe6, 0x02, 0x00, 0x00, 0x04, 0x03, + 0x02, 0x00, 0x00, 0x04, 0xe7, 0x02, 0x00, 0x00, + 0x04, 0xe8, 0x02, 0x00, 0x00, 0x04, 0xe9, 0x02, + 0x00, 0x00, 0x04, 0xea, 0x02, 0x00, 0x00, 0x04, + 0xeb, 0x02, 0x00, 0x00, 0x04, 0xec, 0x02, 0x00, + 0x00, 0x04, 0xed, 0x02, 0x00, 0x00, 0x26, 0x20, + 0x00, 0x04, 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x20, + 0x00, 0x00, 0x80, 0x04, 0xee, 0x02, 0x00, 0x00, + 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0xef, 0x02, + 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, + 0xf0, 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, + 0x80, 0x04, 0xf1, 0x02, 0x00, 0x00, 0x4d, 0x24, + 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, + 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0xf2, 0x02, + 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, + 0xf3, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, + 0x80, 0x04, 0xf4, 0x02, 0x00, 0x00, 0x4d, 0x28, + 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, + 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0xf5, 0x02, + 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, + 0xf6, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, + 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, 0x4d, 0x2c, + 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, + 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0xf7, 0x02, + 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, + 0xf8, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, + 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x30, + 0x00, 0x00, 0x80, 0x04, 0xf9, 0x02, 0x00, 0x00, + 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0xfa, 0x02, + 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, + 0xfb, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, + 0x80, 0x04, 0xfc, 0x02, 0x00, 0x00, 0x4d, 0x34, + 0x00, 0x00, 0x80, 0x04, 0xfd, 0x02, 0x00, 0x00, + 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0xfe, 0x02, + 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, + 0xff, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, + 0x80, 0x04, 0x00, 0x03, 0x00, 0x00, 0x4d, 0x38, + 0x00, 0x00, 0x80, 0x04, 0x01, 0x03, 0x00, 0x00, + 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0x02, 0x03, + 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, + 0x03, 0x03, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, + 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, 0x3c, + 0x00, 0x00, 0x80, 0x04, 0x04, 0x03, 0x00, 0x00, + 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, + 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, + 0x05, 0x03, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, + 0x80, 0x04, 0x06, 0x03, 0x00, 0x00, 0x4d, 0x40, + 0x00, 0x00, 0x80, 0x04, 0x07, 0x03, 0x00, 0x00, + 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x08, 0x03, + 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, + 0x09, 0x03, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, + 0x80, 0x04, 0x0a, 0x03, 0x00, 0x00, 0x4d, 0x44, + 0x00, 0x00, 0x80, 0x04, 0x0b, 0x03, 0x00, 0x00, + 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x03, + 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, + 0x0d, 0x03, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, + 0x80, 0x04, 0x0e, 0x03, 0x00, 0x00, 0x4d, 0x48, + 0x00, 0x00, 0x80, 0x04, 0x0f, 0x03, 0x00, 0x00, + 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x10, 0x03, + 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, + 0x11, 0x03, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, + 0x80, 0x04, 0x12, 0x03, 0x00, 0x00, 0x4d, 0x4c, + 0x00, 0x00, 0x80, 0x04, 0x13, 0x03, 0x00, 0x00, + 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x14, 0x03, + 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, + 0x15, 0x03, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, + 0x80, 0x04, 0x16, 0x03, 0x00, 0x00, 0x4d, 0x50, + 0x00, 0x00, 0x80, 0x04, 0x17, 0x03, 0x00, 0x00, + 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x18, 0x03, + 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, + 0x19, 0x03, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, + 0x80, 0x04, 0x1a, 0x03, 0x00, 0x00, 0x4d, 0x54, + 0x00, 0x00, 0x80, 0x04, 0x1b, 0x03, 0x00, 0x00, + 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x03, + 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, + 0x1d, 0x03, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, + 0x80, 0x04, 0x1e, 0x03, 0x00, 0x00, 0x4d, 0x58, + 0x00, 0x00, 0x80, 0x04, 0x1f, 0x03, 0x00, 0x00, + 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x20, 0x03, + 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, + 0x46, 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, + 0x80, 0x04, 0x21, 0x03, 0x00, 0x00, 0x4d, 0x5c, + 0x00, 0x00, 0x80, 0x04, 0x22, 0x03, 0x00, 0x00, + 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x23, 0x03, + 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, + 0x24, 0x03, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, + 0x80, 0x04, 0x25, 0x03, 0x00, 0x00, 0x4d, 0x60, + 0x00, 0x00, 0x80, 0x04, 0x26, 0x03, 0x00, 0x00, + 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, + 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, + 0x27, 0x03, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, + 0x80, 0x04, 0x28, 0x03, 0x00, 0x00, 0x4d, 0x64, + 0x00, 0x00, 0x80, 0x04, 0x29, 0x03, 0x00, 0x00, + 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, + 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, + 0x2a, 0x03, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, + 0x80, 0x04, 0x2b, 0x03, 0x00, 0x00, 0x4d, 0x68, + 0x00, 0x00, 0x80, 0x04, 0x2c, 0x03, 0x00, 0x00, + 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x2d, 0x03, + 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, + 0x2e, 0x03, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, + 0x80, 0x04, 0x2f, 0x03, 0x00, 0x00, 0x4d, 0x6c, + 0x00, 0x00, 0x80, 0x04, 0x30, 0x03, 0x00, 0x00, + 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x31, 0x03, + 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, + 0x32, 0x03, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, + 0x80, 0x04, 0x33, 0x03, 0x00, 0x00, 0x4d, 0x70, + 0x00, 0x00, 0x80, 0x04, 0x34, 0x03, 0x00, 0x00, + 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x35, 0x03, + 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, + 0x36, 0x03, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, + 0x80, 0x04, 0x37, 0x03, 0x00, 0x00, 0x4d, 0x74, + 0x00, 0x00, 0x80, 0x04, 0x38, 0x03, 0x00, 0x00, + 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x39, 0x03, + 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, + 0x62, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, + 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, 0x78, + 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, + 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x03, + 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, + 0x3b, 0x03, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, + 0x80, 0x04, 0x3c, 0x03, 0x00, 0x00, 0x4d, 0x7c, + 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, + 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x3d, 0x03, + 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, + 0x3e, 0x03, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, + 0x80, 0x04, 0x3f, 0x03, 0x00, 0x00, 0x4d, 0x80, + 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, + 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x40, 0x03, + 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, + 0x41, 0x03, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, + 0x80, 0x04, 0x42, 0x03, 0x00, 0x00, 0x4d, 0x84, + 0x00, 0x00, 0x80, 0x04, 0x43, 0x03, 0x00, 0x00, + 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x44, 0x03, + 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, + 0x45, 0x03, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, + 0x80, 0x04, 0x46, 0x03, 0x00, 0x00, 0x4d, 0x88, + 0x00, 0x00, 0x80, 0x04, 0x47, 0x03, 0x00, 0x00, + 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x48, 0x03, + 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, + 0x49, 0x03, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, + 0x80, 0x04, 0x4a, 0x03, 0x00, 0x00, 0x4d, 0x8c, + 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, + 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x03, + 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, + 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, + 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x90, + 0x00, 0x00, 0x80, 0x04, 0x4c, 0x03, 0x00, 0x00, + 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x4d, 0x03, + 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, + 0x4e, 0x03, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, + 0x80, 0x04, 0x4f, 0x03, 0x00, 0x00, 0x4d, 0x94, + 0x00, 0x00, 0x80, 0x04, 0x50, 0x03, 0x00, 0x00, + 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x51, 0x03, + 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, + 0x52, 0x03, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, + 0x80, 0x04, 0x53, 0x03, 0x00, 0x00, 0x4d, 0x98, + 0x00, 0x00, 0x80, 0x04, 0x54, 0x03, 0x00, 0x00, + 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, + 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, + 0x55, 0x03, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, + 0x80, 0x04, 0x56, 0x03, 0x00, 0x00, 0x4d, 0x9c, + 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, + 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x57, 0x03, + 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, + 0x58, 0x03, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, + 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xa0, + 0x00, 0x00, 0x80, 0x04, 0x59, 0x03, 0x00, 0x00, + 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x03, + 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, + 0x5b, 0x03, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, + 0x80, 0x04, 0x5c, 0x03, 0x00, 0x00, 0x4d, 0xa4, + 0x00, 0x00, 0x80, 0x04, 0x5d, 0x03, 0x00, 0x00, + 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, + 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, + 0x92, 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, + 0x80, 0x04, 0x5e, 0x03, 0x00, 0x00, 0x4d, 0xa8, + 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, + 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x03, + 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, + 0x60, 0x03, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, + 0x80, 0x04, 0x61, 0x03, 0x00, 0x00, 0x4d, 0xac, + 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, + 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0x62, 0x03, + 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, + 0x63, 0x03, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, + 0x80, 0x04, 0x64, 0x03, 0x00, 0x00, 0x4d, 0xb0, + 0x00, 0x00, 0x80, 0x04, 0x65, 0x03, 0x00, 0x00, + 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0x66, 0x03, + 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, + 0x67, 0x03, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, + 0x80, 0x04, 0x68, 0x03, 0x00, 0x00, 0x4d, 0xb4, + 0x00, 0x00, 0x80, 0x04, 0x69, 0x03, 0x00, 0x00, + 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, + 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, + 0x6a, 0x03, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, + 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xb8, + 0x00, 0x00, 0x80, 0x04, 0x6b, 0x03, 0x00, 0x00, + 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, + 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, + 0x6c, 0x03, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, + 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xbc, + 0x00, 0x00, 0x80, 0x04, 0x6d, 0x03, 0x00, 0x00, + 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x03, + 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, + 0x6f, 0x03, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, + 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, 0xc0, + 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, + 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0x70, 0x03, + 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, + 0xae, 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, + 0x80, 0x04, 0x71, 0x03, 0x00, 0x00, 0x4d, 0xc4, + 0x00, 0x00, 0x80, 0x04, 0x72, 0x03, 0x00, 0x00, + 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0x73, 0x03, + 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, + 0x74, 0x03, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, + 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xc8, + 0x00, 0x00, 0x80, 0x04, 0x75, 0x03, 0x00, 0x00, + 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0x76, 0x03, + 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, + 0x77, 0x03, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, + 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xcc, + 0x00, 0x00, 0x80, 0x04, 0x78, 0x03, 0x00, 0x00, + 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0x79, 0x03, + 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, + 0x7a, 0x03, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, + 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xd0, + 0x00, 0x00, 0x80, 0x04, 0x7b, 0x03, 0x00, 0x00, + 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x03, + 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, + 0x7d, 0x03, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, + 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xd4, + 0x00, 0x00, 0x80, 0x04, 0x7e, 0x03, 0x00, 0x00, + 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x03, + 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, + 0x80, 0x03, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, + 0x80, 0x04, 0x81, 0x03, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x80, 0x04, 0x82, 0x03, 0x00, 0x00, + 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0x83, 0x03, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, + 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x80, 0x04, 0x84, 0x03, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xc9, 0x02, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, + 0xca, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x80, 0x04, 0x85, 0x03, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x80, 0x04, 0x86, 0x03, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xcd, 0x02, + 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, + 0xce, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x80, 0x04, 0x87, 0x03, 0x00, 0x00, 0x4d, 0xe4, + 0x00, 0x00, 0x80, 0x04, 0x88, 0x03, 0x00, 0x00, + 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0x89, 0x03, + 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, + 0x8a, 0x03, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x80, 0x04, 0x8b, 0x03, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x80, 0x04, 0x8c, 0x03, 0x00, 0x00, + 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0x8d, 0x03, + 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, + 0x8e, 0x03, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x80, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xeb, + 0x01, 0x00, 0x00, 0x04, 0xd3, 0x02, 0x00, 0x00, + 0x04, 0xd4, 0x02, 0x00, 0x00, 0x04, 0xd5, 0x02, + 0x00, 0x00, 0x04, 0xd6, 0x02, 0x00, 0x00, 0x04, + 0xf0, 0x01, 0x00, 0x00, 0x04, 0xd7, 0x02, 0x00, + 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, 0xd8, + 0x02, 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, + 0x04, 0xd9, 0x02, 0x00, 0x00, 0x04, 0xda, 0x02, + 0x00, 0x00, 0x04, 0xdb, 0x02, 0x00, 0x00, 0x04, + 0xdc, 0x02, 0x00, 0x00, 0x04, 0xdd, 0x02, 0x00, + 0x00, 0x04, 0xde, 0x02, 0x00, 0x00, 0x04, 0xdf, + 0x02, 0x00, 0x00, 0x04, 0xe0, 0x02, 0x00, 0x00, + 0x04, 0xe1, 0x02, 0x00, 0x00, 0x04, 0xe2, 0x02, + 0x00, 0x00, 0x04, 0xe3, 0x02, 0x00, 0x00, 0x04, + 0xe4, 0x02, 0x00, 0x00, 0x04, 0xe5, 0x02, 0x00, + 0x00, 0x04, 0xe6, 0x02, 0x00, 0x00, 0x04, 0x03, + 0x02, 0x00, 0x00, 0x04, 0xe7, 0x02, 0x00, 0x00, + 0x04, 0xe8, 0x02, 0x00, 0x00, 0x04, 0xe9, 0x02, + 0x00, 0x00, 0x04, 0xea, 0x02, 0x00, 0x00, 0x04, + 0xeb, 0x02, 0x00, 0x00, 0x04, 0xec, 0x02, 0x00, + 0x00, 0x04, 0xed, 0x02, 0x00, 0x00, 0x26, 0x20, + 0x00, 0x04, 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x20, + 0x00, 0x00, 0x80, 0x04, 0xee, 0x02, 0x00, 0x00, + 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0xef, 0x02, + 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, + 0xf0, 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, + 0x80, 0x04, 0xf1, 0x02, 0x00, 0x00, 0x4d, 0x24, + 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, + 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0xf2, 0x02, + 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, + 0xf3, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, + 0x80, 0x04, 0xf4, 0x02, 0x00, 0x00, 0x4d, 0x28, + 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, + 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0xf5, 0x02, + 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, + 0xf6, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, + 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, 0x4d, 0x2c, + 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, + 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0xf7, 0x02, + 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, + 0xf8, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, + 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x30, + 0x00, 0x00, 0x80, 0x04, 0xf9, 0x02, 0x00, 0x00, + 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0xfa, 0x02, + 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, + 0xfb, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, + 0x80, 0x04, 0xfc, 0x02, 0x00, 0x00, 0x4d, 0x34, + 0x00, 0x00, 0x80, 0x04, 0xfd, 0x02, 0x00, 0x00, + 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0xfe, 0x02, + 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, + 0xff, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, + 0x80, 0x04, 0x00, 0x03, 0x00, 0x00, 0x4d, 0x38, + 0x00, 0x00, 0x80, 0x04, 0x01, 0x03, 0x00, 0x00, + 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0x02, 0x03, + 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, + 0x03, 0x03, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, + 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, 0x3c, + 0x00, 0x00, 0x80, 0x04, 0x04, 0x03, 0x00, 0x00, + 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, + 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, + 0x05, 0x03, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, + 0x80, 0x04, 0x06, 0x03, 0x00, 0x00, 0x4d, 0x40, + 0x00, 0x00, 0x80, 0x04, 0x07, 0x03, 0x00, 0x00, + 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x08, 0x03, + 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, + 0x09, 0x03, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, + 0x80, 0x04, 0x0a, 0x03, 0x00, 0x00, 0x4d, 0x44, + 0x00, 0x00, 0x80, 0x04, 0x0b, 0x03, 0x00, 0x00, + 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x03, + 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, + 0x0d, 0x03, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, + 0x80, 0x04, 0x0e, 0x03, 0x00, 0x00, 0x4d, 0x48, + 0x00, 0x00, 0x80, 0x04, 0x0f, 0x03, 0x00, 0x00, + 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x10, 0x03, + 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, + 0x11, 0x03, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, + 0x80, 0x04, 0x12, 0x03, 0x00, 0x00, 0x4d, 0x4c, + 0x00, 0x00, 0x80, 0x04, 0x13, 0x03, 0x00, 0x00, + 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x14, 0x03, + 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, + 0x15, 0x03, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, + 0x80, 0x04, 0x16, 0x03, 0x00, 0x00, 0x4d, 0x50, + 0x00, 0x00, 0x80, 0x04, 0x17, 0x03, 0x00, 0x00, + 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x18, 0x03, + 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, + 0x19, 0x03, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, + 0x80, 0x04, 0x1a, 0x03, 0x00, 0x00, 0x4d, 0x54, + 0x00, 0x00, 0x80, 0x04, 0x1b, 0x03, 0x00, 0x00, + 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x03, + 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, + 0x1d, 0x03, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, + 0x80, 0x04, 0x1e, 0x03, 0x00, 0x00, 0x4d, 0x58, + 0x00, 0x00, 0x80, 0x04, 0x1f, 0x03, 0x00, 0x00, + 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x20, 0x03, + 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, + 0x46, 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, + 0x80, 0x04, 0x21, 0x03, 0x00, 0x00, 0x4d, 0x5c, + 0x00, 0x00, 0x80, 0x04, 0x22, 0x03, 0x00, 0x00, + 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x23, 0x03, + 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, + 0x24, 0x03, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, + 0x80, 0x04, 0x25, 0x03, 0x00, 0x00, 0x4d, 0x60, + 0x00, 0x00, 0x80, 0x04, 0x26, 0x03, 0x00, 0x00, + 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, + 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, + 0x27, 0x03, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, + 0x80, 0x04, 0x28, 0x03, 0x00, 0x00, 0x4d, 0x64, + 0x00, 0x00, 0x80, 0x04, 0x29, 0x03, 0x00, 0x00, + 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, + 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, + 0x2a, 0x03, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, + 0x80, 0x04, 0x2b, 0x03, 0x00, 0x00, 0x4d, 0x68, + 0x00, 0x00, 0x80, 0x04, 0x2c, 0x03, 0x00, 0x00, + 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x2d, 0x03, + 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, + 0x2e, 0x03, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, + 0x80, 0x04, 0x2f, 0x03, 0x00, 0x00, 0x4d, 0x6c, + 0x00, 0x00, 0x80, 0x04, 0x30, 0x03, 0x00, 0x00, + 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x31, 0x03, + 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, + 0x32, 0x03, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, + 0x80, 0x04, 0x33, 0x03, 0x00, 0x00, 0x4d, 0x70, + 0x00, 0x00, 0x80, 0x04, 0x34, 0x03, 0x00, 0x00, + 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x35, 0x03, + 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, + 0x36, 0x03, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, + 0x80, 0x04, 0x37, 0x03, 0x00, 0x00, 0x4d, 0x74, + 0x00, 0x00, 0x80, 0x04, 0x38, 0x03, 0x00, 0x00, + 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x39, 0x03, + 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, + 0x62, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, + 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, 0x78, + 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, + 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x03, + 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, + 0x3b, 0x03, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, + 0x80, 0x04, 0x3c, 0x03, 0x00, 0x00, 0x4d, 0x7c, + 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, + 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x3d, 0x03, + 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, + 0x3e, 0x03, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, + 0x80, 0x04, 0x3f, 0x03, 0x00, 0x00, 0x4d, 0x80, + 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, + 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x40, 0x03, + 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, + 0x41, 0x03, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, + 0x80, 0x04, 0x42, 0x03, 0x00, 0x00, 0x4d, 0x84, + 0x00, 0x00, 0x80, 0x04, 0x43, 0x03, 0x00, 0x00, + 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x44, 0x03, + 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, + 0x45, 0x03, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, + 0x80, 0x04, 0x46, 0x03, 0x00, 0x00, 0x4d, 0x88, + 0x00, 0x00, 0x80, 0x04, 0x47, 0x03, 0x00, 0x00, + 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x48, 0x03, + 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, + 0x49, 0x03, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, + 0x80, 0x04, 0x4a, 0x03, 0x00, 0x00, 0x4d, 0x8c, + 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, + 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x03, + 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, + 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, + 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x90, + 0x00, 0x00, 0x80, 0x04, 0x4c, 0x03, 0x00, 0x00, + 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x4d, 0x03, + 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, + 0x4e, 0x03, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, + 0x80, 0x04, 0x4f, 0x03, 0x00, 0x00, 0x4d, 0x94, + 0x00, 0x00, 0x80, 0x04, 0x50, 0x03, 0x00, 0x00, + 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x51, 0x03, + 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, + 0x52, 0x03, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, + 0x80, 0x04, 0x53, 0x03, 0x00, 0x00, 0x4d, 0x98, + 0x00, 0x00, 0x80, 0x04, 0x54, 0x03, 0x00, 0x00, + 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, + 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, + 0x55, 0x03, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, + 0x80, 0x04, 0x56, 0x03, 0x00, 0x00, 0x4d, 0x9c, + 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, + 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x57, 0x03, + 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, + 0x58, 0x03, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, + 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xa0, + 0x00, 0x00, 0x80, 0x04, 0x59, 0x03, 0x00, 0x00, + 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x03, + 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, + 0x5b, 0x03, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, + 0x80, 0x04, 0x5c, 0x03, 0x00, 0x00, 0x4d, 0xa4, + 0x00, 0x00, 0x80, 0x04, 0x5d, 0x03, 0x00, 0x00, + 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, + 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, + 0x92, 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, + 0x80, 0x04, 0x5e, 0x03, 0x00, 0x00, 0x4d, 0xa8, + 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, + 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x03, + 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, + 0x60, 0x03, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, + 0x80, 0x04, 0x61, 0x03, 0x00, 0x00, 0x4d, 0xac, + 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, + 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0x62, 0x03, + 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, + 0x63, 0x03, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, + 0x80, 0x04, 0x64, 0x03, 0x00, 0x00, 0x4d, 0xb0, + 0x00, 0x00, 0x80, 0x04, 0x65, 0x03, 0x00, 0x00, + 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0x66, 0x03, + 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, + 0x67, 0x03, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, + 0x80, 0x04, 0x68, 0x03, 0x00, 0x00, 0x4d, 0xb4, + 0x00, 0x00, 0x80, 0x04, 0x69, 0x03, 0x00, 0x00, + 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, + 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, + 0x6a, 0x03, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, + 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xb8, + 0x00, 0x00, 0x80, 0x04, 0x6b, 0x03, 0x00, 0x00, + 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, + 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, + 0x6c, 0x03, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, + 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xbc, + 0x00, 0x00, 0x80, 0x04, 0x6d, 0x03, 0x00, 0x00, + 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x03, + 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, + 0x6f, 0x03, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, + 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, 0xc0, + 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, + 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0x70, 0x03, + 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, + 0xae, 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, + 0x80, 0x04, 0x71, 0x03, 0x00, 0x00, 0x4d, 0xc4, + 0x00, 0x00, 0x80, 0x04, 0x72, 0x03, 0x00, 0x00, + 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0x73, 0x03, + 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, + 0x74, 0x03, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, + 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xc8, + 0x00, 0x00, 0x80, 0x04, 0x75, 0x03, 0x00, 0x00, + 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0x76, 0x03, + 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, + 0x77, 0x03, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, + 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xcc, + 0x00, 0x00, 0x80, 0x04, 0x78, 0x03, 0x00, 0x00, + 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0x79, 0x03, + 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, + 0x7a, 0x03, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, + 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xd0, + 0x00, 0x00, 0x80, 0x04, 0x7b, 0x03, 0x00, 0x00, + 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x03, + 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, + 0x7d, 0x03, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, + 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xd4, + 0x00, 0x00, 0x80, 0x04, 0x7e, 0x03, 0x00, 0x00, + 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x03, + 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, + 0x80, 0x03, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, + 0x80, 0x04, 0x81, 0x03, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x80, 0x04, 0x82, 0x03, 0x00, 0x00, + 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0x83, 0x03, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, + 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x80, 0x04, 0x84, 0x03, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xc9, 0x02, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, + 0xca, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x80, 0x04, 0x85, 0x03, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x80, 0x04, 0x86, 0x03, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xcd, 0x02, + 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, + 0xce, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x80, 0x04, 0x87, 0x03, 0x00, 0x00, 0x4d, 0xe4, + 0x00, 0x00, 0x80, 0x04, 0x88, 0x03, 0x00, 0x00, + 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0x89, 0x03, + 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, + 0x8a, 0x03, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x80, 0x04, 0x8b, 0x03, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x80, 0x04, 0x8c, 0x03, 0x00, 0x00, + 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0x8d, 0x03, + 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, + 0x8e, 0x03, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x80, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x81, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x82, 0x01, 0x00, + 0x00, 0x4d, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, + 0x01, 0x00, 0x00, 0x4d, 0x85, 0x01, 0x00, 0x00, + 0x4d, 0x86, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0xad, 0xbe, 0xae, + 0xbe, 0xaf, 0xbe, 0xb0, 0xbe, 0xb1, 0xbe, 0xb2, + 0xbe, 0xb3, 0xbe, 0xb4, 0xbe, 0xb5, 0xbe, 0xb6, + 0xbe, 0xb7, 0xbe, 0xb8, 0x26, 0x0c, 0x00, 0x4d, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x03, 0x00, + 0x00, 0x04, 0x90, 0x03, 0x00, 0x00, 0x04, 0x91, + 0x03, 0x00, 0x00, 0x04, 0x92, 0x03, 0x00, 0x00, + 0x04, 0x93, 0x03, 0x00, 0x00, 0x04, 0x94, 0x03, + 0x00, 0x00, 0x04, 0x95, 0x03, 0x00, 0x00, 0x04, + 0x96, 0x03, 0x00, 0x00, 0x04, 0x97, 0x03, 0x00, + 0x00, 0x04, 0x98, 0x03, 0x00, 0x00, 0x04, 0x99, + 0x03, 0x00, 0x00, 0x04, 0x9a, 0x03, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x8f, 0x03, 0x00, 0x00, 0x04, 0x90, 0x03, + 0x00, 0x00, 0x04, 0x91, 0x03, 0x00, 0x00, 0x04, + 0x92, 0x03, 0x00, 0x00, 0x04, 0x93, 0x03, 0x00, + 0x00, 0x04, 0x94, 0x03, 0x00, 0x00, 0x04, 0x95, + 0x03, 0x00, 0x00, 0x04, 0x96, 0x03, 0x00, 0x00, + 0x04, 0x97, 0x03, 0x00, 0x00, 0x04, 0x98, 0x03, + 0x00, 0x00, 0x04, 0x99, 0x03, 0x00, 0x00, 0x04, + 0x9a, 0x03, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6c, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x53, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x9b, 0x03, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x53, 0x01, 0x00, 0x00, 0x04, 0x9b, + 0x03, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x9b, 0x03, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x81, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x4d, 0x83, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x4d, 0x85, 0x01, + 0x00, 0x00, 0x4d, 0x86, 0x01, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x6c, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, + 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x9c, 0x03, 0x00, 0x00, 0x04, 0x9d, 0x03, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x53, 0x01, 0x00, + 0x00, 0x04, 0x9c, 0x03, 0x00, 0x00, 0x04, 0x9d, + 0x03, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x9c, 0x03, 0x00, 0x00, + 0x04, 0x9d, 0x03, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x81, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x82, 0x01, 0x00, 0x00, + 0x4d, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, + 0x00, 0x00, 0x4d, 0x85, 0x01, 0x00, 0x00, 0x4d, + 0x86, 0x01, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x00, 0x4d, 0x9e, 0x03, 0x00, 0x00, 0x4d, 0x9f, + 0x03, 0x00, 0x00, 0x0b, 0x04, 0xa0, 0x03, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xa1, 0x03, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0xa2, 0x03, 0x00, 0x00, + 0x4d, 0xa3, 0x03, 0x00, 0x00, 0x04, 0xa4, 0x03, + 0x00, 0x00, 0x4d, 0xa5, 0x03, 0x00, 0x00, 0x4d, + 0xa6, 0x03, 0x00, 0x00, 0x0b, 0x04, 0xa7, 0x03, + 0x00, 0x00, 0x4d, 0xa3, 0x03, 0x00, 0x00, 0x04, + 0xa8, 0x03, 0x00, 0x00, 0x4d, 0xa5, 0x03, 0x00, + 0x00, 0x4d, 0xa9, 0x03, 0x00, 0x00, 0x0b, 0x04, + 0xaa, 0x03, 0x00, 0x00, 0x4d, 0xa3, 0x03, 0x00, + 0x00, 0x04, 0xab, 0x03, 0x00, 0x00, 0x4d, 0xa5, + 0x03, 0x00, 0x00, 0x4d, 0xac, 0x03, 0x00, 0x00, + 0x4d, 0xad, 0x03, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0xae, 0x03, 0x00, 0x00, 0x4d, 0xa6, 0x03, 0x00, + 0x00, 0x04, 0xaf, 0x03, 0x00, 0x00, 0x4d, 0xb0, + 0x03, 0x00, 0x00, 0x04, 0xb1, 0x03, 0x00, 0x00, + 0x4d, 0xb2, 0x03, 0x00, 0x00, 0x04, 0xb3, 0x03, + 0x00, 0x00, 0x4d, 0xb4, 0x03, 0x00, 0x00, 0x04, + 0xb5, 0x03, 0x00, 0x00, 0x4d, 0xb6, 0x03, 0x00, + 0x00, 0x04, 0xb7, 0x03, 0x00, 0x00, 0x4d, 0xb8, + 0x03, 0x00, 0x00, 0x04, 0xb9, 0x03, 0x00, 0x00, + 0x4d, 0xba, 0x03, 0x00, 0x00, 0x4d, 0xa0, 0x03, + 0x00, 0x00, 0x4d, 0xbb, 0x03, 0x00, 0x00, 0x0b, + 0x04, 0xbc, 0x03, 0x00, 0x00, 0x4d, 0xbd, 0x03, + 0x00, 0x00, 0x4d, 0xbe, 0x03, 0x00, 0x00, 0x4d, + 0x45, 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, 0xcc, + 0x28, 0xfe, 0x0e, 0x01, 0x00, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, + 0x31, 0x33, 0x07, 0x02, 0x37, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_lv_size = 25108; + +const uint8_t intl_lv[25108] = { + 0x01, 0xdb, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x6c, 0x76, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x0e, + 0x7b, 0x31, 0x7d, 0x20, 0x7b, 0x30, 0x7d, 0x0a, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, 0x65, + 0x64, 0x69, 0x75, 0x6d, 0x08, 0x66, 0x75, 0x6c, + 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x02, 0x64, + 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, 0x0a, 0x45, + 0x2c, 0x20, 0x64, 0x2e, 0x04, 0x45, 0x64, 0x12, + 0x45, 0x2c, 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x20, + 0x61, 0x06, 0x45, 0x68, 0x6d, 0x10, 0x45, 0x2c, + 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x06, 0x45, + 0x48, 0x6d, 0x18, 0x45, 0x2c, 0x20, 0x68, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x08, + 0x45, 0x68, 0x6d, 0x73, 0x16, 0x45, 0x2c, 0x20, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x08, 0x45, 0x48, 0x6d, 0x73, 0x12, 0x47, 0x20, + 0x79, 0x2e, 0x20, 0x27, 0x67, 0x27, 0x2e, 0x04, + 0x47, 0x79, 0x1a, 0x47, 0x20, 0x79, 0x2e, 0x20, + 0x27, 0x67, 0x27, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, + 0x0a, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x20, 0x47, + 0x20, 0x79, 0x2e, 0x20, 0x27, 0x67, 0x27, 0x2e, + 0x20, 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x0c, + 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x26, 0x45, + 0x2c, 0x20, 0x47, 0x20, 0x79, 0x2e, 0x20, 0x27, + 0x67, 0x27, 0x2e, 0x20, 0x64, 0x2e, 0x20, 0x4d, + 0x4d, 0x4d, 0x0e, 0x47, 0x79, 0x4d, 0x4d, 0x4d, + 0x45, 0x64, 0x06, 0x68, 0x20, 0x61, 0x02, 0x68, + 0x04, 0x48, 0x48, 0x02, 0x48, 0x0c, 0x68, 0x3a, + 0x6d, 0x6d, 0x20, 0x61, 0x04, 0x68, 0x6d, 0x0a, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x04, 0x48, 0x6d, + 0x12, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x61, 0x06, 0x68, 0x6d, 0x73, 0x10, 0x48, + 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x06, + 0x48, 0x6d, 0x73, 0x16, 0x68, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x61, 0x20, 0x76, 0x08, + 0x68, 0x6d, 0x73, 0x76, 0x14, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x76, 0x08, + 0x48, 0x6d, 0x73, 0x76, 0x10, 0x68, 0x3a, 0x6d, + 0x6d, 0x20, 0x61, 0x20, 0x76, 0x06, 0x68, 0x6d, + 0x76, 0x0e, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x20, + 0x76, 0x06, 0x48, 0x6d, 0x76, 0x02, 0x4c, 0x02, + 0x4d, 0x0c, 0x64, 0x64, 0x2e, 0x4d, 0x4d, 0x2e, + 0x04, 0x4d, 0x64, 0x12, 0x45, 0x2c, 0x20, 0x64, + 0x64, 0x2e, 0x4d, 0x4d, 0x2e, 0x06, 0x4d, 0x45, + 0x64, 0x06, 0x4c, 0x4c, 0x4c, 0x06, 0x4d, 0x4d, + 0x4d, 0x0c, 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, + 0x08, 0x4d, 0x4d, 0x4d, 0x64, 0x12, 0x45, 0x2c, + 0x20, 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x0a, + 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0e, 0x64, 0x2e, + 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, + 0x4d, 0x4d, 0x64, 0x14, 0x45, 0x2c, 0x20, 0x64, + 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x0c, 0x4d, + 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x08, 0x6d, 0x6d, 0x73, 0x73, + 0x04, 0x6d, 0x73, 0x0e, 0x79, 0x2e, 0x20, 0x27, + 0x67, 0x27, 0x2e, 0x02, 0x79, 0x0a, 0x4d, 0x4d, + 0x2e, 0x79, 0x2e, 0x04, 0x79, 0x4d, 0x0c, 0x64, + 0x2e, 0x4d, 0x2e, 0x79, 0x2e, 0x06, 0x79, 0x4d, + 0x64, 0x12, 0x45, 0x2c, 0x20, 0x64, 0x2e, 0x4d, + 0x2e, 0x79, 0x2e, 0x08, 0x79, 0x4d, 0x45, 0x64, + 0x16, 0x79, 0x2e, 0x20, 0x27, 0x67, 0x27, 0x2e, + 0x20, 0x4d, 0x4d, 0x4d, 0x08, 0x79, 0x4d, 0x4d, + 0x4d, 0x1c, 0x79, 0x2e, 0x20, 0x27, 0x67, 0x27, + 0x2e, 0x20, 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, + 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x22, 0x45, + 0x2c, 0x20, 0x79, 0x2e, 0x20, 0x27, 0x67, 0x27, + 0x2e, 0x20, 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, + 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x18, + 0x79, 0x2e, 0x20, 0x27, 0x67, 0x27, 0x2e, 0x20, + 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, 0x79, 0x4d, 0x4d, + 0x4d, 0x4d, 0x16, 0x79, 0x2e, 0x20, 0x27, 0x67, + 0x27, 0x2e, 0x20, 0x51, 0x51, 0x51, 0x08, 0x79, + 0x51, 0x51, 0x51, 0x18, 0x79, 0x2e, 0x20, 0x27, + 0x67, 0x27, 0x2e, 0x20, 0x51, 0x51, 0x51, 0x51, + 0x0a, 0x79, 0x51, 0x51, 0x51, 0x51, 0x20, 0x61, + 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, + 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x2e, + 0x45, 0x45, 0x45, 0x45, 0x2c, 0x20, 0x79, 0x2e, + 0x20, 0x27, 0x67, 0x61, 0x64, 0x61, 0x27, 0x20, + 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x14, + 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x45, 0x45, 0x45, + 0x45, 0x64, 0x22, 0x79, 0x2e, 0x20, 0x27, 0x67, + 0x61, 0x64, 0x61, 0x27, 0x20, 0x64, 0x2e, 0x20, + 0x4d, 0x4d, 0x4d, 0x4d, 0x0c, 0x79, 0x4d, 0x4d, + 0x4d, 0x4d, 0x64, 0x20, 0x79, 0x2e, 0x20, 0x27, + 0x67, 0x61, 0x64, 0x61, 0x27, 0x20, 0x64, 0x2e, + 0x20, 0x4d, 0x4d, 0x4d, 0x10, 0x64, 0x64, 0x2e, + 0x4d, 0x4d, 0x2e, 0x79, 0x79, 0x16, 0x64, 0x61, + 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x73, 0x1a, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x20, 0x7a, 0x7a, 0x7a, 0x7a, 0x12, + 0x68, 0x6d, 0x6d, 0x73, 0x73, 0x7a, 0x7a, 0x7a, + 0x7a, 0x14, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x20, 0x7a, 0x08, 0x68, 0x6d, 0x73, + 0x7a, 0x16, 0x74, 0x69, 0x6d, 0x65, 0x46, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x73, 0x0e, 0x66, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x73, 0x02, 0x4a, 0x02, + 0x46, 0x02, 0x41, 0x02, 0x53, 0x02, 0x4f, 0x02, + 0x4e, 0x02, 0x44, 0x0c, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x0a, 0x6a, 0x61, 0x6e, 0x76, 0x2e, + 0x0a, 0x66, 0x65, 0x62, 0x72, 0x2e, 0x0a, 0x6d, + 0x61, 0x72, 0x74, 0x73, 0x08, 0x61, 0x70, 0x72, + 0x2e, 0x0a, 0x6d, 0x61, 0x69, 0x6a, 0x73, 0x09, + 0x6a, 0x00, 0x6b, 0x01, 0x6e, 0x00, 0x2e, 0x00, + 0x09, 0x6a, 0x00, 0x6b, 0x01, 0x6c, 0x00, 0x2e, + 0x00, 0x08, 0x61, 0x75, 0x67, 0x2e, 0x0a, 0x73, + 0x65, 0x70, 0x74, 0x2e, 0x08, 0x6f, 0x6b, 0x74, + 0x2e, 0x08, 0x6e, 0x6f, 0x76, 0x2e, 0x08, 0x64, + 0x65, 0x63, 0x2e, 0x11, 0x6a, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x76, 0x00, 0x01, 0x01, 0x72, 0x00, + 0x69, 0x00, 0x73, 0x00, 0x13, 0x66, 0x00, 0x65, + 0x00, 0x62, 0x00, 0x72, 0x00, 0x75, 0x00, 0x01, + 0x01, 0x72, 0x00, 0x69, 0x00, 0x73, 0x00, 0x0f, + 0x61, 0x00, 0x70, 0x00, 0x72, 0x00, 0x2b, 0x01, + 0x6c, 0x00, 0x69, 0x00, 0x73, 0x00, 0x0d, 0x6a, + 0x00, 0x6b, 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6a, + 0x00, 0x73, 0x00, 0x0d, 0x6a, 0x00, 0x6b, 0x01, + 0x6c, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x73, 0x00, + 0x0e, 0x61, 0x75, 0x67, 0x75, 0x73, 0x74, 0x73, + 0x14, 0x73, 0x65, 0x70, 0x74, 0x65, 0x6d, 0x62, + 0x72, 0x69, 0x73, 0x10, 0x6f, 0x6b, 0x74, 0x6f, + 0x62, 0x72, 0x69, 0x73, 0x12, 0x6e, 0x6f, 0x76, + 0x65, 0x6d, 0x62, 0x72, 0x69, 0x73, 0x12, 0x64, + 0x65, 0x63, 0x65, 0x6d, 0x62, 0x72, 0x69, 0x73, + 0x0c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x73, 0x02, + 0x50, 0x02, 0x54, 0x02, 0x43, 0x04, 0x53, 0x76, + 0x04, 0x50, 0x72, 0x04, 0x4f, 0x74, 0x04, 0x54, + 0x72, 0x04, 0x43, 0x65, 0x04, 0x50, 0x6b, 0x04, + 0x53, 0x65, 0x13, 0x73, 0x00, 0x76, 0x00, 0x13, + 0x01, 0x74, 0x00, 0x64, 0x00, 0x69, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x12, 0x70, 0x69, + 0x72, 0x6d, 0x64, 0x69, 0x65, 0x6e, 0x61, 0x10, + 0x6f, 0x74, 0x72, 0x64, 0x69, 0x65, 0x6e, 0x61, + 0x13, 0x74, 0x00, 0x72, 0x00, 0x65, 0x00, 0x61, + 0x01, 0x64, 0x00, 0x69, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x16, 0x63, 0x65, 0x74, 0x75, + 0x72, 0x74, 0x64, 0x69, 0x65, 0x6e, 0x61, 0x14, + 0x70, 0x69, 0x65, 0x6b, 0x74, 0x64, 0x69, 0x65, + 0x6e, 0x61, 0x12, 0x73, 0x65, 0x73, 0x74, 0x64, + 0x69, 0x65, 0x6e, 0x61, 0x08, 0x64, 0x61, 0x79, + 0x73, 0x04, 0x42, 0x45, 0x08, 0x65, 0x72, 0x61, + 0x73, 0x1d, 0x70, 0x00, 0x72, 0x00, 0x69, 0x00, + 0x65, 0x00, 0x6b, 0x00, 0x61, 0x01, 0x70, 0x00, + 0x75, 0x00, 0x73, 0x00, 0x64, 0x00, 0x69, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x01, 0x01, 0x04, 0x61, + 0x6d, 0x17, 0x70, 0x00, 0x13, 0x01, 0x63, 0x00, + 0x70, 0x00, 0x75, 0x00, 0x73, 0x00, 0x64, 0x00, + 0x69, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x01, 0x01, + 0x04, 0x70, 0x6d, 0x14, 0x64, 0x61, 0x79, 0x50, + 0x65, 0x72, 0x69, 0x6f, 0x64, 0x73, 0x06, 0x4d, + 0x30, 0x31, 0x06, 0x4d, 0x30, 0x32, 0x06, 0x4d, + 0x30, 0x33, 0x06, 0x4d, 0x30, 0x34, 0x06, 0x4d, + 0x30, 0x35, 0x06, 0x4d, 0x30, 0x36, 0x06, 0x4d, + 0x30, 0x37, 0x06, 0x4d, 0x30, 0x38, 0x06, 0x4d, + 0x30, 0x39, 0x06, 0x4d, 0x31, 0x30, 0x06, 0x4d, + 0x31, 0x31, 0x06, 0x4d, 0x31, 0x32, 0x08, 0x54, + 0x6f, 0x75, 0x74, 0x08, 0x42, 0x61, 0x62, 0x61, + 0x0a, 0x48, 0x61, 0x74, 0x6f, 0x72, 0x0a, 0x4b, + 0x69, 0x61, 0x68, 0x6b, 0x08, 0x54, 0x6f, 0x62, + 0x61, 0x0c, 0x41, 0x6d, 0x73, 0x68, 0x69, 0x72, + 0x10, 0x42, 0x61, 0x72, 0x61, 0x6d, 0x68, 0x61, + 0x74, 0x12, 0x42, 0x61, 0x72, 0x61, 0x6d, 0x6f, + 0x75, 0x64, 0x61, 0x0e, 0x42, 0x61, 0x73, 0x68, + 0x61, 0x6e, 0x73, 0x0a, 0x50, 0x61, 0x6f, 0x6e, + 0x61, 0x08, 0x45, 0x70, 0x65, 0x70, 0x0a, 0x4d, + 0x65, 0x73, 0x72, 0x61, 0x0a, 0x4e, 0x61, 0x73, + 0x69, 0x65, 0x08, 0x45, 0x52, 0x41, 0x30, 0x08, + 0x45, 0x52, 0x41, 0x31, 0x10, 0x4d, 0x65, 0x73, + 0x6b, 0x65, 0x72, 0x65, 0x6d, 0x0c, 0x54, 0x65, + 0x6b, 0x65, 0x6d, 0x74, 0x0a, 0x48, 0x65, 0x64, + 0x61, 0x72, 0x0c, 0x54, 0x61, 0x68, 0x73, 0x61, + 0x73, 0x06, 0x54, 0x65, 0x72, 0x0e, 0x59, 0x65, + 0x6b, 0x61, 0x74, 0x69, 0x74, 0x0e, 0x4d, 0x65, + 0x67, 0x61, 0x62, 0x69, 0x74, 0x0c, 0x4d, 0x69, + 0x61, 0x7a, 0x69, 0x61, 0x0c, 0x47, 0x65, 0x6e, + 0x62, 0x6f, 0x74, 0x08, 0x53, 0x65, 0x6e, 0x65, + 0x0a, 0x48, 0x61, 0x6d, 0x6c, 0x65, 0x0e, 0x4e, + 0x65, 0x68, 0x61, 0x73, 0x73, 0x65, 0x0e, 0x50, + 0x61, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x0d, 0x70, + 0x00, 0x2e, 0x00, 0x6d, 0x00, 0x2e, 0x00, 0x13, + 0x01, 0x2e, 0x00, 0x09, 0x6d, 0x00, 0x2e, 0x00, + 0x13, 0x01, 0x2e, 0x00, 0x06, 0x42, 0x43, 0x45, + 0x04, 0x43, 0x45, 0x1f, 0x70, 0x00, 0x69, 0x00, + 0x72, 0x00, 0x6d, 0x00, 0x73, 0x00, 0x20, 0x00, + 0x6d, 0x00, 0x6b, 0x01, 0x73, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x13, 0x01, 0x72, 0x00, 0x61, 0x00, + 0x73, 0x00, 0x11, 0x6d, 0x00, 0x6b, 0x01, 0x73, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x13, 0x01, 0x72, + 0x00, 0x01, 0x01, 0x0b, 0x74, 0x00, 0x69, 0x00, + 0x61, 0x01, 0x72, 0x00, 0x69, 0x00, 0x0f, 0x68, + 0x00, 0x65, 0x00, 0x61, 0x01, 0x76, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x0f, 0x6b, 0x00, + 0x69, 0x00, 0x73, 0x00, 0x3c, 0x01, 0x65, 0x00, + 0x76, 0x00, 0x73, 0x00, 0x0c, 0x74, 0x65, 0x76, + 0x65, 0x74, 0x73, 0x0d, 0x61, 0x01, 0x65, 0x00, + 0x76, 0x00, 0x61, 0x00, 0x74, 0x00, 0x73, 0x00, + 0x10, 0x31, 0x2e, 0x20, 0x61, 0x64, 0x61, 0x72, + 0x73, 0x0a, 0x61, 0x64, 0x61, 0x72, 0x73, 0x0c, + 0x6e, 0x69, 0x73, 0x61, 0x6e, 0x73, 0x0a, 0x69, + 0x6a, 0x61, 0x72, 0x73, 0x0c, 0x73, 0x69, 0x76, + 0x61, 0x6e, 0x73, 0x0c, 0x74, 0x61, 0x6d, 0x75, + 0x7a, 0x73, 0x06, 0x61, 0x76, 0x73, 0x0a, 0x65, + 0x6c, 0x75, 0x6c, 0x73, 0x10, 0x32, 0x2e, 0x20, + 0x61, 0x64, 0x61, 0x72, 0x73, 0x04, 0x41, 0x4d, + 0x0e, 0x43, 0x68, 0x61, 0x69, 0x74, 0x72, 0x61, + 0x10, 0x56, 0x61, 0x69, 0x73, 0x61, 0x6b, 0x68, + 0x61, 0x10, 0x4a, 0x79, 0x61, 0x69, 0x73, 0x74, + 0x68, 0x61, 0x0c, 0x41, 0x73, 0x61, 0x64, 0x68, + 0x61, 0x0e, 0x53, 0x72, 0x61, 0x76, 0x61, 0x6e, + 0x61, 0x0c, 0x42, 0x68, 0x61, 0x64, 0x72, 0x61, + 0x0c, 0x41, 0x73, 0x76, 0x69, 0x6e, 0x61, 0x0e, + 0x4b, 0x61, 0x72, 0x74, 0x69, 0x6b, 0x61, 0x14, + 0x41, 0x67, 0x72, 0x61, 0x68, 0x61, 0x79, 0x61, + 0x6e, 0x61, 0x0a, 0x50, 0x61, 0x75, 0x73, 0x61, + 0x0a, 0x4d, 0x61, 0x67, 0x68, 0x61, 0x10, 0x50, + 0x68, 0x61, 0x6c, 0x67, 0x75, 0x6e, 0x61, 0x08, + 0x53, 0x61, 0x6b, 0x61, 0x08, 0x4d, 0x75, 0x68, + 0x2e, 0x08, 0x53, 0x61, 0x66, 0x2e, 0x0c, 0x52, + 0x61, 0x62, 0x2e, 0x20, 0x49, 0x0e, 0x52, 0x61, + 0x62, 0x2e, 0x20, 0x49, 0x49, 0x0c, 0x4a, 0x75, + 0x6d, 0x2e, 0x20, 0x49, 0x0e, 0x4a, 0x75, 0x6d, + 0x2e, 0x20, 0x49, 0x49, 0x08, 0x52, 0x61, 0x6a, + 0x2e, 0x08, 0x53, 0x68, 0x61, 0x2e, 0x08, 0x52, + 0x61, 0x6d, 0x2e, 0x0a, 0x53, 0x68, 0x61, 0x77, + 0x2e, 0x11, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, + 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x51, 0x00, + 0x2e, 0x00, 0x11, 0x44, 0x00, 0x68, 0x00, 0x75, + 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x48, + 0x00, 0x2e, 0x00, 0x10, 0x6d, 0x75, 0x68, 0x61, + 0x72, 0x61, 0x6d, 0x73, 0x0c, 0x73, 0x61, 0x66, + 0x61, 0x72, 0x73, 0x0f, 0x31, 0x00, 0x2e, 0x00, + 0x20, 0x00, 0x72, 0x00, 0x61, 0x00, 0x62, 0x00, + 0x2b, 0x01, 0x0f, 0x32, 0x00, 0x2e, 0x00, 0x20, + 0x00, 0x72, 0x00, 0x61, 0x00, 0x62, 0x00, 0x2b, + 0x01, 0x15, 0x31, 0x00, 0x2e, 0x00, 0x20, 0x00, + 0x64, 0x00, 0x7e, 0x01, 0x75, 0x00, 0x6d, 0x00, + 0x01, 0x01, 0x64, 0x00, 0x01, 0x01, 0x15, 0x32, + 0x00, 0x2e, 0x00, 0x20, 0x00, 0x64, 0x00, 0x7e, + 0x01, 0x75, 0x00, 0x6d, 0x00, 0x01, 0x01, 0x64, + 0x00, 0x01, 0x01, 0x0f, 0x72, 0x00, 0x61, 0x00, + 0x64, 0x00, 0x7e, 0x01, 0x61, 0x00, 0x62, 0x00, + 0x73, 0x00, 0x0d, 0x61, 0x01, 0x61, 0x00, 0x62, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x11, + 0x72, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x61, 0x00, + 0x64, 0x00, 0x01, 0x01, 0x6e, 0x00, 0x73, 0x00, + 0x0f, 0x61, 0x01, 0x61, 0x00, 0x75, 0x00, 0x76, + 0x00, 0x61, 0x00, 0x6c, 0x00, 0x73, 0x00, 0x15, + 0x64, 0x00, 0x75, 0x00, 0x20, 0x00, 0x61, 0x00, + 0x6c, 0x00, 0x2d, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x64, 0x00, 0x01, 0x01, 0x17, 0x64, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x2d, + 0x00, 0x68, 0x00, 0x69, 0x00, 0x64, 0x00, 0x7e, + 0x01, 0x01, 0x01, 0x04, 0x41, 0x48, 0x1f, 0x54, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x36, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x36, 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x75, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1f, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x1d, 0x57, 0x00, 0x61, 0x00, 0x64, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x52, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x1d, 0x59, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1f, 0x4a, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, + 0x6b, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x2b, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x2d, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x2d, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x2a, 0x4a, 0x69, 0x6e, 0x67, + 0x6f, 0x2d, 0x6b, 0x65, 0x69, 0x75, 0x6e, 0x20, + 0x28, 0x37, 0x36, 0x37, 0x2d, 0x37, 0x37, 0x30, + 0x29, 0x1d, 0x48, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x1f, 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, 0x64, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x4d, 0x01, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, + 0x4a, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x61, + 0x00, 0x6a, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1f, 0x53, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x20, + 0x54, 0x65, 0x6e, 0x2d, 0x61, 0x6e, 0x20, 0x28, + 0x38, 0x35, 0x37, 0x2d, 0x38, 0x35, 0x39, 0x29, + 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, + 0x47, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1d, 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, + 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x34, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1b, 0x4c, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1d, 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x41, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, 0x4a, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x4a, 0x00, 0x69, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x29, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x27, 0x4a, 0x00, 0x69, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x45, 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4c, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x61, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x25, 0x4a, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x24, 0x54, 0x65, 0x6e, 0x2d, + 0x65, 0x69, 0x20, 0x28, 0x31, 0x31, 0x31, 0x30, + 0x2d, 0x31, 0x31, 0x31, 0x33, 0x29, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x44, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x45, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x6a, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x48, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x27, 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, + 0x4c, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x6d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x4a, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x59, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x75, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x29, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x21, 0x4a, 0x00, 0x4d, 0x01, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x27, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x75, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x29, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x74, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x29, 0x52, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x45, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4c, + 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x61, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x48, + 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x27, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x4c, + 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x45, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x27, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4a, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x27, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x61, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x41, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x4d, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x0a, 0x4d, 0x65, 0x69, 0x6a, 0x69, 0x0d, + 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x0b, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x0c, + 0x48, 0x65, 0x69, 0x73, 0x65, 0x69, 0x12, 0x46, + 0x61, 0x72, 0x76, 0x61, 0x72, 0x64, 0x69, 0x6e, + 0x16, 0x4f, 0x72, 0x64, 0x69, 0x62, 0x65, 0x68, + 0x65, 0x73, 0x68, 0x74, 0x0e, 0x4b, 0x68, 0x6f, + 0x72, 0x64, 0x61, 0x64, 0x06, 0x54, 0x69, 0x72, + 0x0c, 0x4d, 0x6f, 0x72, 0x64, 0x61, 0x64, 0x12, + 0x53, 0x68, 0x61, 0x68, 0x72, 0x69, 0x76, 0x61, + 0x72, 0x08, 0x4d, 0x65, 0x68, 0x72, 0x08, 0x41, + 0x62, 0x61, 0x6e, 0x08, 0x41, 0x7a, 0x61, 0x72, + 0x06, 0x44, 0x65, 0x79, 0x0c, 0x42, 0x61, 0x68, + 0x6d, 0x61, 0x6e, 0x0c, 0x45, 0x73, 0x66, 0x61, + 0x6e, 0x64, 0x04, 0x41, 0x50, 0x1a, 0x42, 0x65, + 0x66, 0x6f, 0x72, 0x65, 0x20, 0x52, 0x2e, 0x4f, + 0x2e, 0x43, 0x2e, 0x0c, 0x52, 0x2e, 0x4f, 0x2e, + 0x43, 0x2e, 0x12, 0x63, 0x61, 0x6c, 0x65, 0x6e, + 0x64, 0x61, 0x72, 0x73, 0x08, 0x64, 0x61, 0x74, + 0x65, 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, + 0x75, 0x10, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0x1e, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, + 0x72, 0x6e, 0x26, 0x7b, 0x6d, 0x69, 0x6e, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x6e, + 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, + 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x0e, 0x64, + 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x26, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0xa0, + 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, + 0x79, 0x7d, 0x3c, 0x7b, 0x6d, 0x69, 0x6e, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0xa0, 0x7b, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, + 0x7d, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x79, 0x2a, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0x7b, 0x70, 0x65, 0x72, 0x63, + 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, + 0x40, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0x7b, 0x70, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, + 0x7d, 0x0e, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, + 0x74, 0x10, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, + 0x6e, 0x73, 0x02, 0x2c, 0x02, 0xa0, 0x0a, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x18, 0x6e, 0x61, 0x76, + 0xa0, 0x73, 0x6b, 0x61, 0x69, 0x74, 0x6c, 0x69, + 0x73, 0x06, 0x6e, 0x61, 0x6e, 0x02, 0x2b, 0x10, + 0x70, 0x6c, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x02, 0x2d, 0x12, 0x6d, 0x69, 0x6e, 0x75, 0x73, + 0x53, 0x69, 0x67, 0x6e, 0x02, 0x25, 0x16, 0x70, + 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, + 0x67, 0x6e, 0x03, 0x1e, 0x22, 0x10, 0x69, 0x6e, + 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x0e, 0x73, + 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x06, 0x41, + 0x55, 0x24, 0x06, 0x41, 0x55, 0x44, 0x04, 0x52, + 0x24, 0x06, 0x42, 0x52, 0x4c, 0x06, 0x43, 0x41, + 0x24, 0x06, 0x43, 0x41, 0x44, 0x06, 0x43, 0x4e, + 0xa5, 0x06, 0x43, 0x4e, 0x59, 0x03, 0xac, 0x20, + 0x06, 0x45, 0x55, 0x52, 0x02, 0xa3, 0x06, 0x47, + 0x42, 0x50, 0x06, 0x48, 0x4b, 0x24, 0x06, 0x48, + 0x4b, 0x44, 0x03, 0xaa, 0x20, 0x06, 0x49, 0x4c, + 0x53, 0x03, 0xb9, 0x20, 0x06, 0x49, 0x4e, 0x52, + 0x02, 0xa5, 0x06, 0x4a, 0x50, 0x59, 0x03, 0xa9, + 0x20, 0x06, 0x4b, 0x52, 0x57, 0x04, 0x4c, 0x73, + 0x06, 0x4c, 0x56, 0x4c, 0x06, 0x4d, 0x58, 0x24, + 0x06, 0x4d, 0x58, 0x4e, 0x06, 0x4e, 0x5a, 0x24, + 0x06, 0x4e, 0x5a, 0x44, 0x03, 0x3f, 0x0e, 0x06, + 0x54, 0x48, 0x42, 0x06, 0x4e, 0x54, 0x24, 0x06, + 0x54, 0x57, 0x44, 0x02, 0x24, 0x06, 0x55, 0x53, + 0x44, 0x03, 0xab, 0x20, 0x06, 0x56, 0x4e, 0x44, + 0x08, 0x46, 0x43, 0x46, 0x41, 0x06, 0x58, 0x41, + 0x46, 0x06, 0x45, 0x43, 0x24, 0x06, 0x58, 0x43, + 0x44, 0x06, 0x43, 0x46, 0x41, 0x06, 0x58, 0x4f, + 0x46, 0x08, 0x43, 0x46, 0x50, 0x46, 0x06, 0x58, + 0x50, 0x46, 0x14, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x63, 0x69, 0x65, 0x73, 0x52, 0x6e, 0x6f, + 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2f, + 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, + 0x61, 0x74, 0x61, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, + 0x70, 0x2f, 0x6c, 0x76, 0x2e, 0x6a, 0x73, 0x0d, + 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, + 0x27, 0x00, 0x89, 0x01, 0xfc, 0x6a, 0x01, 0xa0, + 0x01, 0x00, 0x00, 0x00, 0x39, 0xd0, 0x00, 0x00, + 0x00, 0x43, 0xd1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd2, 0x00, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd4, 0x00, 0x00, 0x00, 0x04, + 0xd5, 0x00, 0x00, 0x00, 0x04, 0xd6, 0x00, 0x00, + 0x00, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x04, 0xd8, + 0x00, 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, 0x00, + 0x04, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdb, 0x00, + 0x00, 0x00, 0x04, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0xdd, 0x00, 0x00, 0x00, 0x04, 0xde, 0x00, 0x00, + 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, 0x04, 0xe0, + 0x00, 0x00, 0x00, 0x04, 0xe1, 0x00, 0x00, 0x00, + 0x04, 0xe2, 0x00, 0x00, 0x00, 0x26, 0x0f, 0x00, + 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x0a, 0x4d, 0xe4, + 0x00, 0x00, 0x00, 0x09, 0x4d, 0xe5, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, + 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x04, 0xe6, + 0x00, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x00, + 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x04, 0xec, 0x00, + 0x00, 0x00, 0x4d, 0xed, 0x00, 0x00, 0x00, 0x04, + 0xee, 0x00, 0x00, 0x00, 0x4d, 0xef, 0x00, 0x00, + 0x00, 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, 0xf1, + 0x00, 0x00, 0x00, 0x04, 0xf2, 0x00, 0x00, 0x00, + 0x4d, 0xf3, 0x00, 0x00, 0x00, 0x04, 0xf4, 0x00, + 0x00, 0x00, 0x4d, 0xf5, 0x00, 0x00, 0x00, 0x04, + 0xf6, 0x00, 0x00, 0x00, 0x4d, 0xf7, 0x00, 0x00, + 0x00, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, 0xf9, + 0x00, 0x00, 0x00, 0x04, 0xfa, 0x00, 0x00, 0x00, + 0x4d, 0xfb, 0x00, 0x00, 0x00, 0x04, 0xfc, 0x00, + 0x00, 0x00, 0x4d, 0xfd, 0x00, 0x00, 0x00, 0x04, + 0xfe, 0x00, 0x00, 0x00, 0x4d, 0xff, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x01, 0x00, 0x00, 0x04, 0x02, 0x01, 0x00, 0x00, + 0x4d, 0x03, 0x01, 0x00, 0x00, 0x04, 0x04, 0x01, + 0x00, 0x00, 0x4d, 0x05, 0x01, 0x00, 0x00, 0x04, + 0x06, 0x01, 0x00, 0x00, 0x4d, 0x07, 0x01, 0x00, + 0x00, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, 0x09, + 0x01, 0x00, 0x00, 0x04, 0x0a, 0x01, 0x00, 0x00, + 0x4d, 0x0b, 0x01, 0x00, 0x00, 0x04, 0x0c, 0x01, + 0x00, 0x00, 0x4d, 0x0d, 0x01, 0x00, 0x00, 0x04, + 0x0e, 0x01, 0x00, 0x00, 0x4d, 0x0f, 0x01, 0x00, + 0x00, 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, 0x11, + 0x01, 0x00, 0x00, 0x04, 0x12, 0x01, 0x00, 0x00, + 0x4d, 0x13, 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, + 0x00, 0x00, 0x4d, 0x15, 0x01, 0x00, 0x00, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x4d, 0x17, 0x01, 0x00, + 0x00, 0x04, 0x18, 0x01, 0x00, 0x00, 0x4d, 0x19, + 0x01, 0x00, 0x00, 0x04, 0x1a, 0x01, 0x00, 0x00, + 0x4d, 0x1b, 0x01, 0x00, 0x00, 0x04, 0x1c, 0x01, + 0x00, 0x00, 0x4d, 0x1d, 0x01, 0x00, 0x00, 0x04, + 0x1e, 0x01, 0x00, 0x00, 0x4d, 0x1f, 0x01, 0x00, + 0x00, 0x04, 0x20, 0x01, 0x00, 0x00, 0x4d, 0x21, + 0x01, 0x00, 0x00, 0x04, 0x22, 0x01, 0x00, 0x00, + 0x4d, 0x23, 0x01, 0x00, 0x00, 0x04, 0x24, 0x01, + 0x00, 0x00, 0x4d, 0x25, 0x01, 0x00, 0x00, 0x04, + 0x24, 0x01, 0x00, 0x00, 0x4d, 0x26, 0x01, 0x00, + 0x00, 0x04, 0x27, 0x01, 0x00, 0x00, 0x4d, 0x28, + 0x01, 0x00, 0x00, 0x04, 0x29, 0x01, 0x00, 0x00, + 0x4d, 0x2a, 0x01, 0x00, 0x00, 0x04, 0x2b, 0x01, + 0x00, 0x00, 0x4d, 0x2c, 0x01, 0x00, 0x00, 0x04, + 0x2d, 0x01, 0x00, 0x00, 0x4d, 0x2e, 0x01, 0x00, + 0x00, 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, 0x30, + 0x01, 0x00, 0x00, 0x04, 0x31, 0x01, 0x00, 0x00, + 0x4d, 0x32, 0x01, 0x00, 0x00, 0x04, 0x33, 0x01, + 0x00, 0x00, 0x4d, 0x34, 0x01, 0x00, 0x00, 0x04, + 0x35, 0x01, 0x00, 0x00, 0x4d, 0x36, 0x01, 0x00, + 0x00, 0x04, 0x37, 0x01, 0x00, 0x00, 0x4d, 0x38, + 0x01, 0x00, 0x00, 0x04, 0x39, 0x01, 0x00, 0x00, + 0x4d, 0x3a, 0x01, 0x00, 0x00, 0x4d, 0x3b, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x3c, 0x01, 0x00, 0x00, + 0x4d, 0x3d, 0x01, 0x00, 0x00, 0x04, 0x3e, 0x01, + 0x00, 0x00, 0x4d, 0x3f, 0x01, 0x00, 0x00, 0x04, + 0x40, 0x01, 0x00, 0x00, 0x4d, 0x32, 0x01, 0x00, + 0x00, 0x04, 0x41, 0x01, 0x00, 0x00, 0x4d, 0x2c, + 0x01, 0x00, 0x00, 0x4d, 0x42, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x43, 0x01, 0x00, 0x00, 0x4d, 0x44, + 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, + 0x4d, 0x46, 0x01, 0x00, 0x00, 0x04, 0x0a, 0x01, + 0x00, 0x00, 0x4d, 0x09, 0x01, 0x00, 0x00, 0x04, + 0x06, 0x01, 0x00, 0x00, 0x4d, 0x05, 0x01, 0x00, + 0x00, 0x4d, 0x47, 0x01, 0x00, 0x00, 0x4d, 0x48, + 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x0b, 0x04, 0x49, + 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, + 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x67, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7b, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, + 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, + 0x4d, 0x80, 0x01, 0x00, 0x00, 0x4d, 0xd5, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x00, 0xbe, 0x01, + 0xbe, 0x02, 0xbe, 0x03, 0xbe, 0x04, 0xbe, 0x05, + 0xbe, 0x06, 0xbe, 0x07, 0xbe, 0x08, 0xbe, 0x09, + 0xbe, 0x0a, 0xbe, 0x0b, 0x26, 0x0c, 0x00, 0x4d, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, + 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, + 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, + 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, + 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, + 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, + 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, + 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, + 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, + 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, + 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, + 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, + 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, + 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, + 0x8c, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x67, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, + 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x4d, 0x80, 0x01, + 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x0c, 0xbe, 0x0d, 0xbe, 0x0e, 0xbe, + 0x0f, 0xbe, 0x10, 0xbe, 0x11, 0xbe, 0x12, 0xbe, + 0x13, 0xbe, 0x14, 0xbe, 0x15, 0xbe, 0x16, 0xbe, + 0x17, 0xbe, 0x18, 0x26, 0x0d, 0x00, 0x4d, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, + 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, + 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, + 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, + 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, + 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, + 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, + 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, + 0x99, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, + 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, + 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, + 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, + 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, + 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, + 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, + 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, + 0x04, 0x99, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x67, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, + 0x9b, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, + 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x9a, + 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, + 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, 0x4d, + 0xd7, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x19, + 0xbe, 0x1a, 0xbe, 0x1b, 0xbe, 0x1c, 0xbe, 0x1d, + 0xbe, 0x1e, 0xbe, 0x1f, 0xbe, 0x20, 0xbe, 0x21, + 0xbe, 0x22, 0xbe, 0x23, 0xbe, 0x24, 0x26, 0x0c, + 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, + 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, + 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, + 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, + 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, + 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, + 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, + 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, + 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, + 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, + 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, + 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, + 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x67, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x79, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x4d, + 0x80, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x25, 0xbe, 0x26, 0xbe, + 0x27, 0xbe, 0x28, 0xbe, 0x29, 0xbe, 0x2a, 0xbe, + 0x2b, 0xbe, 0x2c, 0xbe, 0x2d, 0xbe, 0x2e, 0xbe, + 0x2f, 0xbe, 0x30, 0xbe, 0x31, 0x26, 0x0d, 0x00, + 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, + 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, + 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, + 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, + 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, + 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, + 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, + 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, + 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x26, 0x0d, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x9c, + 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, + 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, + 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, + 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, + 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, + 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, + 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, + 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x67, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x79, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x9a, 0x01, 0x00, + 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, 0x9a, + 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, + 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x4d, + 0x7f, 0x01, 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x32, 0xbe, 0x33, 0xbe, 0x34, 0xbe, 0x35, + 0xbe, 0x36, 0xbe, 0x37, 0xbe, 0x38, 0xbe, 0x39, + 0xbe, 0x3a, 0xbe, 0x3b, 0xbe, 0x3c, 0xbe, 0x3d, + 0xbe, 0x3e, 0x26, 0x0d, 0x00, 0x4d, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, + 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, + 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, + 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, + 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, + 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, + 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, + 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, + 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, + 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, + 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, + 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, + 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, + 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, + 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, + 0xa8, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x67, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, 0x9a, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, + 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x3f, + 0xbe, 0x40, 0xbe, 0x41, 0xbe, 0x42, 0xbe, 0x43, + 0xbe, 0x44, 0xbe, 0x45, 0xbe, 0x46, 0xbe, 0x47, + 0xbe, 0x48, 0xbe, 0x49, 0xbe, 0x4a, 0x26, 0x0c, + 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, + 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, + 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, + 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, + 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, + 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, + 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, + 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, + 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, + 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, + 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, + 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, + 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x67, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x79, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x9a, 0x01, 0x00, 0x00, + 0x04, 0x9b, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, + 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, + 0x01, 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x67, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, + 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, + 0xac, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, + 0x50, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, + 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, + 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, + 0x26, 0x04, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, + 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, + 0xac, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x4d, + 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, + 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x4d, 0x80, + 0x01, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x4b, 0xbe, 0x4c, 0xbe, 0x4d, + 0xbe, 0x4e, 0xbe, 0x4f, 0xbe, 0x50, 0xbe, 0x51, + 0xbe, 0x52, 0xbe, 0x53, 0xbe, 0x54, 0xbe, 0x55, + 0xbe, 0x56, 0xbe, 0x57, 0xbe, 0x58, 0x26, 0x0e, + 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, 0xaf, + 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, + 0x04, 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, + 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, 0x04, + 0xb4, 0x01, 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, + 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb7, + 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, + 0x04, 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, + 0x00, 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, + 0xbc, 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, + 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, + 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, + 0x04, 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, + 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, 0x04, + 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, + 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, 0x04, 0xb9, + 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, + 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, 0x01, + 0x00, 0x00, 0x26, 0x0e, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x67, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xbd, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x50, 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7b, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, + 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, + 0x4d, 0x80, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x59, 0xbe, 0x5a, + 0xbe, 0x5b, 0xbe, 0x5c, 0xbe, 0x5d, 0xbe, 0x5e, + 0xbe, 0x5f, 0xbe, 0x60, 0xbe, 0x61, 0xbe, 0x62, + 0xbe, 0x63, 0xbe, 0x64, 0x26, 0x0c, 0x00, 0x4d, + 0x50, 0x01, 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, + 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, 0x04, 0xc0, + 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, + 0x04, 0xc2, 0x01, 0x00, 0x00, 0x04, 0xc3, 0x01, + 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, 0x04, + 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, + 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, + 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, + 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, 0x04, + 0xc1, 0x01, 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, + 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, 0x04, 0xc4, + 0x01, 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, + 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, + 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, + 0xc9, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x67, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xca, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, 0xca, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, + 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x65, + 0xbe, 0x66, 0xbe, 0x67, 0xbe, 0x68, 0xbe, 0x69, + 0xbe, 0x6a, 0xbe, 0x6b, 0xbe, 0x6c, 0xbe, 0x6d, + 0xbe, 0x6e, 0xbe, 0x6f, 0xbe, 0x70, 0x26, 0x0c, + 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, 0xcb, + 0x01, 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, + 0x04, 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, + 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, + 0xd0, 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, + 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, + 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, + 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, + 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, + 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, + 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, + 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, + 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, + 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, + 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x67, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x79, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xe3, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, + 0x04, 0xe3, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe3, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, + 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x4d, + 0x7f, 0x01, 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x71, 0xbe, 0x72, 0xbe, 0x73, 0xbe, 0x74, + 0xbe, 0x75, 0xbe, 0x76, 0xbe, 0x77, 0xbe, 0x78, + 0xbe, 0x79, 0xbe, 0x7a, 0xbe, 0x7b, 0xbe, 0x7c, + 0x26, 0x0c, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, + 0x04, 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, 0x01, + 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, 0x04, + 0xce, 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, + 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, 0xd1, + 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, + 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, + 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, + 0xd6, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, + 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, + 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, + 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, + 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, + 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, + 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, + 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x67, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x79, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xe3, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x50, 0x01, + 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xe3, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x4d, + 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, + 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x4d, 0x80, + 0x01, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x67, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x79, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xe4, 0x01, 0x00, 0x00, + 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, + 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, + 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, + 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, + 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, + 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, + 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, + 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, + 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, + 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, + 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, + 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, + 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, + 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, + 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, + 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, + 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, + 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, + 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, 0x04, 0x03, + 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, 0x04, + 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, + 0x04, 0x05, 0x02, 0x00, 0x00, 0x4d, 0x21, 0x00, + 0x00, 0x80, 0x04, 0x06, 0x02, 0x00, 0x00, 0x4d, + 0x22, 0x00, 0x00, 0x80, 0x04, 0x07, 0x02, 0x00, + 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, 0x08, + 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, + 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, + 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x4d, + 0x26, 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, 0x00, + 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, 0x0c, + 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, + 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, + 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, + 0x2a, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, + 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, 0x10, + 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, + 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, + 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, + 0x2e, 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, + 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, 0x14, + 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, + 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, + 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, + 0x32, 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, + 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, 0x18, + 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, + 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, + 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, + 0x36, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, + 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, 0x1c, + 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, + 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, + 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, + 0x3a, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, + 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, 0x20, + 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, + 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, + 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, + 0x3e, 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, + 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, 0x24, + 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, + 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, + 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, + 0x42, 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, + 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, 0x28, + 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, + 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, + 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, + 0x46, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, + 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, 0x2c, + 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, + 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, + 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, + 0x4a, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, + 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, 0x30, + 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, + 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, + 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, + 0x4e, 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, + 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, 0x34, + 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, + 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, + 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, + 0x52, 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, + 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, 0x38, + 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, + 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, + 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, + 0x56, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, + 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, 0x3c, + 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, + 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, + 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, + 0x5a, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, + 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, 0x40, + 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, + 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, + 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, + 0x5e, 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, + 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, 0x44, + 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, + 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, + 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, + 0x62, 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, + 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, 0x48, + 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, + 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, + 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, + 0x66, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, + 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, 0x4c, + 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, + 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, + 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, + 0x6a, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, + 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, 0x50, + 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, + 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, + 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, + 0x6e, 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, + 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, 0x54, + 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, + 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, + 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, + 0x72, 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, + 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, 0x58, + 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, + 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, + 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, + 0x76, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, + 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, 0x5c, + 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, + 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, + 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, + 0x7a, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, + 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, 0x60, + 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, + 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, + 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, + 0x7e, 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, + 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, 0x64, + 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, + 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, + 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, + 0x82, 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, + 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, 0x68, + 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, + 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, + 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, + 0x86, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, + 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, 0x6c, + 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, + 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, + 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, + 0x8a, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, + 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, 0x70, + 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, + 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, + 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, + 0x8e, 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, + 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, 0x74, + 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, + 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, + 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, + 0x92, 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, + 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, 0x78, + 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, + 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, + 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, + 0x96, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, + 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, 0x7c, + 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, + 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, + 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, + 0x9a, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, + 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, 0x80, + 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, + 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, + 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, + 0x9e, 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, + 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, 0x84, + 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, + 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, + 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, + 0xa2, 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, + 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, 0x88, + 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, + 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, + 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, + 0xa6, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, + 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, 0x8c, + 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, + 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, + 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, + 0xaa, 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, + 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, 0x90, + 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, + 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, + 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, + 0xae, 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, + 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, 0x94, + 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, + 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, + 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, + 0xb2, 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, + 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, 0x98, + 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, + 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, + 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, + 0xb6, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, + 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, 0x9c, + 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, + 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, + 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, + 0xba, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, + 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, 0xa0, + 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, + 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, + 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, + 0xbe, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, + 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, 0xa4, + 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, + 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, + 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, + 0xc2, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, + 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, 0xa8, + 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, + 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, + 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, + 0xc6, 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, + 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, 0xac, + 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, + 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, + 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, + 0xca, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, + 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, 0xb0, + 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, + 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, + 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, + 0xce, 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, + 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, 0xb4, + 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, + 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, + 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, + 0xd2, 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, + 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, 0xb8, + 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, + 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, + 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, + 0xd6, 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, + 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, 0xbc, + 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, + 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, + 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, 0xc0, + 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, + 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, 0xc4, + 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, + 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, + 0xe2, 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, + 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, + 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, + 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x4d, 0xe9, 0x00, + 0x00, 0x80, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x80, 0x04, 0x03, 0x01, 0x00, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, 0x50, + 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, + 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, + 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, + 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, + 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, + 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, + 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, + 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, + 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, + 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, + 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, + 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, + 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, + 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, + 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, + 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, + 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, + 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, + 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, + 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, 0x04, 0x03, + 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, 0x04, + 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, + 0x04, 0x05, 0x02, 0x00, 0x00, 0x4d, 0x21, 0x00, + 0x00, 0x80, 0x04, 0x06, 0x02, 0x00, 0x00, 0x4d, + 0x22, 0x00, 0x00, 0x80, 0x04, 0x07, 0x02, 0x00, + 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, 0x08, + 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, + 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, + 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x4d, + 0x26, 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, 0x00, + 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, 0x0c, + 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, + 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, + 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, + 0x2a, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, + 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, 0x10, + 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, + 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, + 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, + 0x2e, 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, + 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, 0x14, + 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, + 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, + 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, + 0x32, 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, + 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, 0x18, + 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, + 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, + 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, + 0x36, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, + 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, 0x1c, + 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, + 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, + 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, + 0x3a, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, + 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, 0x20, + 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, + 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, + 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, + 0x3e, 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, + 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, 0x24, + 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, + 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, + 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, + 0x42, 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, + 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, 0x28, + 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, + 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, + 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, + 0x46, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, + 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, 0x2c, + 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, + 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, + 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, + 0x4a, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, + 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, 0x30, + 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, + 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, + 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, + 0x4e, 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, + 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, 0x34, + 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, + 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, + 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, + 0x52, 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, + 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, 0x38, + 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, + 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, + 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, + 0x56, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, + 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, 0x3c, + 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, + 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, + 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, + 0x5a, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, + 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, 0x40, + 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, + 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, + 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, + 0x5e, 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, + 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, 0x44, + 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, + 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, + 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, + 0x62, 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, + 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, 0x48, + 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, + 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, + 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, + 0x66, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, + 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, 0x4c, + 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, + 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, + 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, + 0x6a, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, + 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, 0x50, + 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, + 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, + 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, + 0x6e, 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, + 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, 0x54, + 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, + 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, + 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, + 0x72, 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, + 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, 0x58, + 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, + 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, + 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, + 0x76, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, + 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, 0x5c, + 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, + 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, + 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, + 0x7a, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, + 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, 0x60, + 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, + 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, + 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, + 0x7e, 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, + 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, 0x64, + 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, + 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, + 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, + 0x82, 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, + 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, 0x68, + 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, + 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, + 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, + 0x86, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, + 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, 0x6c, + 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, + 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, + 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, + 0x8a, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, + 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, 0x70, + 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, + 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, + 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, + 0x8e, 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, + 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, 0x74, + 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, + 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, + 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, + 0x92, 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, + 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, 0x78, + 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, + 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, + 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, + 0x96, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, + 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, 0x7c, + 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, + 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, + 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, + 0x9a, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, + 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, 0x80, + 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, + 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, + 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, + 0x9e, 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, + 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, 0x84, + 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, + 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, + 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, + 0xa2, 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, + 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, 0x88, + 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, + 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, + 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, + 0xa6, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, + 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, 0x8c, + 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, + 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, + 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, + 0xaa, 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, + 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, 0x90, + 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, + 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, + 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, + 0xae, 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, + 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, 0x94, + 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, + 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, + 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, + 0xb2, 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, + 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, 0x98, + 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, + 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, + 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, + 0xb6, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, + 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, 0x9c, + 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, + 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, + 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, + 0xba, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, + 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, 0xa0, + 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, + 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, + 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, + 0xbe, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, + 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, 0xa4, + 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, + 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, + 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, + 0xc2, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, + 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, 0xa8, + 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, + 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, + 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, + 0xc6, 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, + 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, 0xac, + 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, + 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, + 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, + 0xca, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, + 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, 0xb0, + 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, + 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, + 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, + 0xce, 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, + 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, 0xb4, + 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, + 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, + 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, + 0xd2, 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, + 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, 0xb8, + 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, + 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, + 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, + 0xd6, 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, + 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, 0xbc, + 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, + 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, + 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, 0xc0, + 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, + 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, 0xc4, + 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, + 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, + 0xe2, 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, + 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, + 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, + 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, 0xcc, + 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, + 0x04, 0xcd, 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, + 0x00, 0x80, 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, + 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, + 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, + 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, + 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, + 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, + 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, + 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, + 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, + 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, + 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, + 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, + 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, + 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, + 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, + 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, + 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, + 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, + 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, + 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, 0x04, 0x03, + 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, 0x04, + 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, + 0x04, 0x05, 0x02, 0x00, 0x00, 0x4d, 0x21, 0x00, + 0x00, 0x80, 0x04, 0x06, 0x02, 0x00, 0x00, 0x4d, + 0x22, 0x00, 0x00, 0x80, 0x04, 0x07, 0x02, 0x00, + 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, 0x08, + 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, + 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, + 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x4d, + 0x26, 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, 0x00, + 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, 0x0c, + 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, + 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, + 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, + 0x2a, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, + 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, 0x10, + 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, + 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, + 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, + 0x2e, 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, + 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, 0x14, + 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, + 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, + 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, + 0x32, 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, + 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, 0x18, + 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, + 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, + 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, + 0x36, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, + 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, 0x1c, + 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, + 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, + 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, + 0x3a, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, + 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, 0x20, + 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, + 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, + 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, + 0x3e, 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, + 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, 0x24, + 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, + 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, + 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, + 0x42, 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, + 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, 0x28, + 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, + 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, + 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, + 0x46, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, + 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, 0x2c, + 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, + 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, + 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, + 0x4a, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, + 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, 0x30, + 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, + 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, + 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, + 0x4e, 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, + 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, 0x34, + 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, + 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, + 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, + 0x52, 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, + 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, 0x38, + 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, + 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, + 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, + 0x56, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, + 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, 0x3c, + 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, + 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, + 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, + 0x5a, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, + 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, 0x40, + 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, + 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, + 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, + 0x5e, 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, + 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, 0x44, + 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, + 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, + 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, + 0x62, 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, + 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, 0x48, + 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, + 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, + 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, + 0x66, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, + 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, 0x4c, + 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, + 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, + 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, + 0x6a, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, + 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, 0x50, + 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, + 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, + 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, + 0x6e, 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, + 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, 0x54, + 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, + 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, + 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, + 0x72, 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, + 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, 0x58, + 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, + 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, + 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, + 0x76, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, + 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, 0x5c, + 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, + 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, + 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, + 0x7a, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, + 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, 0x60, + 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, + 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, + 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, + 0x7e, 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, + 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, 0x64, + 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, + 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, + 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, + 0x82, 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, + 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, 0x68, + 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, + 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, + 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, + 0x86, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, + 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, 0x6c, + 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, + 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, + 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, + 0x8a, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, + 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, 0x70, + 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, + 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, + 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, + 0x8e, 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, + 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, 0x74, + 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, + 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, + 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, + 0x92, 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, + 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, 0x78, + 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, + 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, + 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, + 0x96, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, + 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, 0x7c, + 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, + 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, + 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, + 0x9a, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, + 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, 0x80, + 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, + 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, + 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, + 0x9e, 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, + 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, 0x84, + 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, + 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, + 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, + 0xa2, 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, + 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, 0x88, + 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, + 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, + 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, + 0xa6, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, + 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, 0x8c, + 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, + 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, + 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, + 0xaa, 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, + 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, 0x90, + 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, + 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, + 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, + 0xae, 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, + 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, 0x94, + 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, + 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, + 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, + 0xb2, 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, + 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, 0x98, + 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, + 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, + 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, + 0xb6, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, + 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, 0x9c, + 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, + 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, + 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, + 0xba, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, + 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, 0xa0, + 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, + 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, + 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, + 0xbe, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, + 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, 0xa4, + 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, + 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, + 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, + 0xc2, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, + 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, 0xa8, + 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, + 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, + 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, + 0xc6, 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, + 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, 0xac, + 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, + 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, + 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, + 0xca, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, + 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, 0xb0, + 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, + 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, + 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, + 0xce, 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, + 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, 0xb4, + 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, + 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, + 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, + 0xd2, 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, + 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, 0xb8, + 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, + 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, + 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, + 0xd6, 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, + 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, 0xbc, + 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, + 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, + 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, 0xc0, + 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, + 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, 0xc4, + 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, + 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, + 0xe2, 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, + 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, + 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, + 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, 0xcc, + 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, + 0x04, 0xcd, 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, + 0x00, 0x80, 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, + 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x4d, 0x80, 0x01, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x7d, 0xbe, 0x7e, 0xbe, 0x7f, 0xbe, + 0x80, 0xbe, 0x81, 0xbe, 0x82, 0xbe, 0x83, 0xbe, + 0x84, 0xbe, 0x85, 0xbe, 0x86, 0xbe, 0x87, 0xbe, + 0x88, 0x26, 0x0c, 0x00, 0x4d, 0x50, 0x01, 0x00, + 0x00, 0x04, 0xd0, 0x02, 0x00, 0x00, 0x04, 0xd1, + 0x02, 0x00, 0x00, 0x04, 0xd2, 0x02, 0x00, 0x00, + 0x04, 0xd3, 0x02, 0x00, 0x00, 0x04, 0xd4, 0x02, + 0x00, 0x00, 0x04, 0xd5, 0x02, 0x00, 0x00, 0x04, + 0xd6, 0x02, 0x00, 0x00, 0x04, 0xd7, 0x02, 0x00, + 0x00, 0x04, 0xd8, 0x02, 0x00, 0x00, 0x04, 0xd9, + 0x02, 0x00, 0x00, 0x04, 0xda, 0x02, 0x00, 0x00, + 0x04, 0xdb, 0x02, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd0, 0x02, + 0x00, 0x00, 0x04, 0xd1, 0x02, 0x00, 0x00, 0x04, + 0xd2, 0x02, 0x00, 0x00, 0x04, 0xd3, 0x02, 0x00, + 0x00, 0x04, 0xd4, 0x02, 0x00, 0x00, 0x04, 0xd5, + 0x02, 0x00, 0x00, 0x04, 0xd6, 0x02, 0x00, 0x00, + 0x04, 0xd7, 0x02, 0x00, 0x00, 0x04, 0xd8, 0x02, + 0x00, 0x00, 0x04, 0xd9, 0x02, 0x00, 0x00, 0x04, + 0xda, 0x02, 0x00, 0x00, 0x04, 0xdb, 0x02, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x67, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x79, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xdc, + 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x50, + 0x01, 0x00, 0x00, 0x04, 0xdc, 0x02, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xdc, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7b, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x4d, + 0x80, 0x01, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x67, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x79, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xdd, 0x02, 0x00, + 0x00, 0x04, 0xde, 0x02, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, 0xdd, + 0x02, 0x00, 0x00, 0x04, 0xde, 0x02, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xdd, 0x02, 0x00, 0x00, 0x04, 0xde, 0x02, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, + 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x4d, + 0x7f, 0x01, 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x02, 0x00, 0x00, + 0x0b, 0x04, 0xe1, 0x02, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe2, 0x02, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0xe3, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x02, + 0x00, 0x00, 0x04, 0xe5, 0x02, 0x00, 0x00, 0x4d, + 0xe6, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x02, 0x00, + 0x00, 0x0b, 0x04, 0xe8, 0x02, 0x00, 0x00, 0x4d, + 0xe4, 0x02, 0x00, 0x00, 0x04, 0xe9, 0x02, 0x00, + 0x00, 0x4d, 0xe6, 0x02, 0x00, 0x00, 0x4d, 0xea, + 0x02, 0x00, 0x00, 0x0b, 0x04, 0xeb, 0x02, 0x00, + 0x00, 0x4d, 0xe4, 0x02, 0x00, 0x00, 0x04, 0xec, + 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x02, 0x00, 0x00, + 0x4d, 0xed, 0x02, 0x00, 0x00, 0x4d, 0xee, 0x02, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xef, 0x02, 0x00, + 0x00, 0x4d, 0xe7, 0x02, 0x00, 0x00, 0x04, 0xf0, + 0x02, 0x00, 0x00, 0x4d, 0xf1, 0x02, 0x00, 0x00, + 0x04, 0xf2, 0x02, 0x00, 0x00, 0x4d, 0xf3, 0x02, + 0x00, 0x00, 0x04, 0xf4, 0x02, 0x00, 0x00, 0x4d, + 0xf5, 0x02, 0x00, 0x00, 0x04, 0xf6, 0x02, 0x00, + 0x00, 0x4d, 0xf7, 0x02, 0x00, 0x00, 0x04, 0xf8, + 0x02, 0x00, 0x00, 0x4d, 0xf9, 0x02, 0x00, 0x00, + 0x04, 0xfa, 0x02, 0x00, 0x00, 0x4d, 0xfb, 0x02, + 0x00, 0x00, 0x4d, 0xe1, 0x02, 0x00, 0x00, 0x4d, + 0xfc, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xfd, 0x02, + 0x00, 0x00, 0x4d, 0xfe, 0x02, 0x00, 0x00, 0x04, + 0xff, 0x02, 0x00, 0x00, 0x4d, 0x00, 0x03, 0x00, + 0x00, 0x04, 0x01, 0x03, 0x00, 0x00, 0x4d, 0x02, + 0x03, 0x00, 0x00, 0x04, 0x03, 0x03, 0x00, 0x00, + 0x4d, 0x04, 0x03, 0x00, 0x00, 0x04, 0x05, 0x03, + 0x00, 0x00, 0x4d, 0x06, 0x03, 0x00, 0x00, 0x04, + 0x07, 0x03, 0x00, 0x00, 0x4d, 0x08, 0x03, 0x00, + 0x00, 0x04, 0x09, 0x03, 0x00, 0x00, 0x4d, 0x0a, + 0x03, 0x00, 0x00, 0x04, 0x0b, 0x03, 0x00, 0x00, + 0x4d, 0x0c, 0x03, 0x00, 0x00, 0x04, 0x0d, 0x03, + 0x00, 0x00, 0x4d, 0x0e, 0x03, 0x00, 0x00, 0x04, + 0x0f, 0x03, 0x00, 0x00, 0x4d, 0x10, 0x03, 0x00, + 0x00, 0x04, 0x11, 0x03, 0x00, 0x00, 0x4d, 0x12, + 0x03, 0x00, 0x00, 0x04, 0x13, 0x03, 0x00, 0x00, + 0x4d, 0x14, 0x03, 0x00, 0x00, 0x04, 0x15, 0x03, + 0x00, 0x00, 0x4d, 0x16, 0x03, 0x00, 0x00, 0x04, + 0x17, 0x03, 0x00, 0x00, 0x4d, 0x18, 0x03, 0x00, + 0x00, 0x04, 0x19, 0x03, 0x00, 0x00, 0x4d, 0x1a, + 0x03, 0x00, 0x00, 0x04, 0x1b, 0x03, 0x00, 0x00, + 0x4d, 0x1c, 0x03, 0x00, 0x00, 0x04, 0x1d, 0x03, + 0x00, 0x00, 0x4d, 0x1e, 0x03, 0x00, 0x00, 0x04, + 0x1f, 0x03, 0x00, 0x00, 0x4d, 0x20, 0x03, 0x00, + 0x00, 0x04, 0x21, 0x03, 0x00, 0x00, 0x4d, 0x22, + 0x03, 0x00, 0x00, 0x04, 0x23, 0x03, 0x00, 0x00, + 0x4d, 0x24, 0x03, 0x00, 0x00, 0x04, 0x25, 0x03, + 0x00, 0x00, 0x4d, 0x26, 0x03, 0x00, 0x00, 0x04, + 0x27, 0x03, 0x00, 0x00, 0x4d, 0x28, 0x03, 0x00, + 0x00, 0x4d, 0x29, 0x03, 0x00, 0x00, 0x4d, 0x45, + 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, 0xcc, 0x28, + 0xd4, 0x0c, 0x01, 0x00, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_mk_size = 24949; + +const uint8_t intl_mk[24949] = { + 0x01, 0xc7, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x6d, 0x6b, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x0e, + 0x7b, 0x31, 0x7d, 0x20, 0x7b, 0x30, 0x7d, 0x0a, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, 0x65, + 0x64, 0x69, 0x75, 0x6d, 0x08, 0x66, 0x75, 0x6c, + 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x02, 0x64, + 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, 0x06, 0x64, + 0x20, 0x45, 0x04, 0x45, 0x64, 0x10, 0x45, 0x20, + 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x06, 0x45, + 0x68, 0x6d, 0x0e, 0x45, 0x20, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x06, 0x45, 0x48, 0x6d, 0x16, 0x45, + 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x61, 0x08, 0x45, 0x68, 0x6d, 0x73, 0x14, + 0x45, 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x08, 0x45, 0x48, 0x6d, 0x73, 0x06, + 0x79, 0x20, 0x47, 0x04, 0x47, 0x79, 0x0e, 0x4d, + 0x4d, 0x4d, 0x20, 0x79, 0x20, 0x47, 0x0a, 0x47, + 0x79, 0x4d, 0x4d, 0x4d, 0x14, 0x64, 0x64, 0x20, + 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x20, 0x47, 0x0c, + 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x1a, 0x45, + 0x2c, 0x20, 0x64, 0x64, 0x20, 0x4d, 0x4d, 0x4d, + 0x20, 0x79, 0x20, 0x47, 0x0e, 0x47, 0x79, 0x4d, + 0x4d, 0x4d, 0x45, 0x64, 0x06, 0x68, 0x20, 0x61, + 0x02, 0x68, 0x04, 0x48, 0x48, 0x02, 0x48, 0x0c, + 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x04, 0x68, + 0x6d, 0x0a, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x04, + 0x48, 0x6d, 0x12, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x20, 0x61, 0x06, 0x68, 0x6d, 0x73, + 0x10, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x06, 0x48, 0x6d, 0x73, 0x16, 0x68, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x20, + 0x76, 0x08, 0x68, 0x6d, 0x73, 0x76, 0x14, 0x48, + 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, + 0x76, 0x08, 0x48, 0x6d, 0x73, 0x76, 0x10, 0x68, + 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x20, 0x76, 0x06, + 0x68, 0x6d, 0x76, 0x0e, 0x48, 0x48, 0x3a, 0x6d, + 0x6d, 0x20, 0x76, 0x06, 0x48, 0x6d, 0x76, 0x02, + 0x4c, 0x02, 0x4d, 0x06, 0x64, 0x2e, 0x4d, 0x04, + 0x4d, 0x64, 0x08, 0x64, 0x64, 0x2e, 0x4d, 0x06, + 0x4d, 0x64, 0x64, 0x0c, 0x45, 0x2c, 0x20, 0x64, + 0x2e, 0x4d, 0x06, 0x4d, 0x45, 0x64, 0x06, 0x4c, + 0x4c, 0x4c, 0x06, 0x4d, 0x4d, 0x4d, 0x0a, 0x64, + 0x20, 0x4d, 0x4d, 0x4d, 0x08, 0x4d, 0x4d, 0x4d, + 0x64, 0x0e, 0x45, 0x20, 0x64, 0x20, 0x4d, 0x4d, + 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0c, + 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, 0x4d, + 0x4d, 0x4d, 0x4d, 0x64, 0x10, 0x45, 0x20, 0x64, + 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x0c, 0x4d, 0x4d, + 0x4d, 0x4d, 0x45, 0x64, 0x0a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x04, 0x6d, 0x73, 0x02, 0x79, 0x06, + 0x4d, 0x2e, 0x79, 0x04, 0x79, 0x4d, 0x0a, 0x64, + 0x2e, 0x4d, 0x2e, 0x79, 0x06, 0x79, 0x4d, 0x64, + 0x10, 0x45, 0x2c, 0x20, 0x64, 0x2e, 0x4d, 0x2e, + 0x79, 0x08, 0x79, 0x4d, 0x45, 0x64, 0x15, 0x4d, + 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x20, 0x00, 0x79, + 0x00, 0x20, 0x00, 0x27, 0x00, 0x33, 0x04, 0x27, + 0x00, 0x2e, 0x00, 0x08, 0x79, 0x4d, 0x4d, 0x4d, + 0x19, 0x64, 0x00, 0x20, 0x00, 0x4d, 0x00, 0x4d, + 0x00, 0x4d, 0x00, 0x20, 0x00, 0x79, 0x00, 0x20, + 0x00, 0x27, 0x00, 0x33, 0x04, 0x27, 0x00, 0x2e, + 0x00, 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x1f, + 0x45, 0x00, 0x2c, 0x00, 0x20, 0x00, 0x64, 0x00, + 0x20, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, + 0x20, 0x00, 0x79, 0x00, 0x20, 0x00, 0x27, 0x00, + 0x33, 0x04, 0x27, 0x00, 0x2e, 0x00, 0x0c, 0x79, + 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x17, 0x4d, 0x00, + 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x20, 0x00, + 0x79, 0x00, 0x20, 0x00, 0x27, 0x00, 0x33, 0x04, + 0x27, 0x00, 0x2e, 0x00, 0x0a, 0x79, 0x4d, 0x4d, + 0x4d, 0x4d, 0x15, 0x51, 0x00, 0x51, 0x00, 0x51, + 0x00, 0x20, 0x00, 0x79, 0x00, 0x20, 0x00, 0x27, + 0x00, 0x33, 0x04, 0x27, 0x00, 0x2e, 0x00, 0x08, + 0x79, 0x51, 0x51, 0x51, 0x17, 0x51, 0x00, 0x51, + 0x00, 0x51, 0x00, 0x51, 0x00, 0x20, 0x00, 0x79, + 0x00, 0x20, 0x00, 0x27, 0x00, 0x33, 0x04, 0x27, + 0x00, 0x2e, 0x00, 0x0a, 0x79, 0x51, 0x51, 0x51, + 0x51, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x73, 0x1e, 0x45, 0x45, 0x45, 0x45, 0x2c, + 0x20, 0x64, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, + 0x20, 0x79, 0x14, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, + 0x45, 0x45, 0x45, 0x45, 0x64, 0x12, 0x64, 0x64, + 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0c, + 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x0c, 0x64, + 0x64, 0x2e, 0x4d, 0x2e, 0x79, 0x0e, 0x64, 0x64, + 0x2e, 0x4d, 0x2e, 0x79, 0x79, 0x16, 0x64, 0x61, + 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x73, 0x1a, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x20, 0x7a, 0x7a, 0x7a, 0x7a, 0x12, + 0x68, 0x6d, 0x6d, 0x73, 0x73, 0x7a, 0x7a, 0x7a, + 0x7a, 0x14, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x20, 0x7a, 0x08, 0x68, 0x6d, 0x73, + 0x7a, 0x16, 0x74, 0x69, 0x6d, 0x65, 0x46, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x73, 0x0e, 0x66, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x73, 0x03, 0x58, 0x04, + 0x03, 0x44, 0x04, 0x03, 0x3c, 0x04, 0x03, 0x30, + 0x04, 0x03, 0x41, 0x04, 0x03, 0x3e, 0x04, 0x03, + 0x3d, 0x04, 0x03, 0x34, 0x04, 0x0c, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x09, 0x58, 0x04, 0x30, + 0x04, 0x3d, 0x04, 0x2e, 0x00, 0x09, 0x44, 0x04, + 0x35, 0x04, 0x32, 0x04, 0x2e, 0x00, 0x09, 0x3c, + 0x04, 0x30, 0x04, 0x40, 0x04, 0x2e, 0x00, 0x09, + 0x30, 0x04, 0x3f, 0x04, 0x40, 0x04, 0x2e, 0x00, + 0x07, 0x3c, 0x04, 0x30, 0x04, 0x58, 0x04, 0x09, + 0x58, 0x04, 0x43, 0x04, 0x3d, 0x04, 0x2e, 0x00, + 0x09, 0x58, 0x04, 0x43, 0x04, 0x3b, 0x04, 0x2e, + 0x00, 0x09, 0x30, 0x04, 0x32, 0x04, 0x33, 0x04, + 0x2e, 0x00, 0x0b, 0x41, 0x04, 0x35, 0x04, 0x3f, + 0x04, 0x42, 0x04, 0x2e, 0x00, 0x09, 0x3e, 0x04, + 0x3a, 0x04, 0x42, 0x04, 0x2e, 0x00, 0x0b, 0x3d, + 0x04, 0x3e, 0x04, 0x35, 0x04, 0x3c, 0x04, 0x2e, + 0x00, 0x09, 0x34, 0x04, 0x35, 0x04, 0x3a, 0x04, + 0x2e, 0x00, 0x0f, 0x58, 0x04, 0x30, 0x04, 0x3d, + 0x04, 0x43, 0x04, 0x30, 0x04, 0x40, 0x04, 0x38, + 0x04, 0x11, 0x44, 0x04, 0x35, 0x04, 0x32, 0x04, + 0x40, 0x04, 0x43, 0x04, 0x30, 0x04, 0x40, 0x04, + 0x38, 0x04, 0x09, 0x3c, 0x04, 0x30, 0x04, 0x40, + 0x04, 0x42, 0x04, 0x0b, 0x30, 0x04, 0x3f, 0x04, + 0x40, 0x04, 0x38, 0x04, 0x3b, 0x04, 0x09, 0x58, + 0x04, 0x43, 0x04, 0x3d, 0x04, 0x38, 0x04, 0x09, + 0x58, 0x04, 0x43, 0x04, 0x3b, 0x04, 0x38, 0x04, + 0x0d, 0x30, 0x04, 0x32, 0x04, 0x33, 0x04, 0x43, + 0x04, 0x41, 0x04, 0x42, 0x04, 0x13, 0x41, 0x04, + 0x35, 0x04, 0x3f, 0x04, 0x42, 0x04, 0x35, 0x04, + 0x3c, 0x04, 0x32, 0x04, 0x40, 0x04, 0x38, 0x04, + 0x11, 0x3e, 0x04, 0x3a, 0x04, 0x42, 0x04, 0x3e, + 0x04, 0x3c, 0x04, 0x32, 0x04, 0x40, 0x04, 0x38, + 0x04, 0x0f, 0x3d, 0x04, 0x3e, 0x04, 0x35, 0x04, + 0x3c, 0x04, 0x32, 0x04, 0x40, 0x04, 0x38, 0x04, + 0x11, 0x34, 0x04, 0x35, 0x04, 0x3a, 0x04, 0x35, + 0x04, 0x3c, 0x04, 0x32, 0x04, 0x40, 0x04, 0x38, + 0x04, 0x0c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x73, + 0x03, 0x3f, 0x04, 0x03, 0x32, 0x04, 0x03, 0x47, + 0x04, 0x09, 0x3d, 0x04, 0x35, 0x04, 0x34, 0x04, + 0x2e, 0x00, 0x09, 0x3f, 0x04, 0x3e, 0x04, 0x3d, + 0x04, 0x2e, 0x00, 0x07, 0x32, 0x04, 0x42, 0x04, + 0x2e, 0x00, 0x09, 0x41, 0x04, 0x40, 0x04, 0x35, + 0x04, 0x2e, 0x00, 0x09, 0x47, 0x04, 0x35, 0x04, + 0x42, 0x04, 0x2e, 0x00, 0x09, 0x3f, 0x04, 0x35, + 0x04, 0x42, 0x04, 0x2e, 0x00, 0x09, 0x41, 0x04, + 0x30, 0x04, 0x31, 0x04, 0x2e, 0x00, 0x0d, 0x3d, + 0x04, 0x35, 0x04, 0x34, 0x04, 0x35, 0x04, 0x3b, + 0x04, 0x30, 0x04, 0x15, 0x3f, 0x04, 0x3e, 0x04, + 0x3d, 0x04, 0x35, 0x04, 0x34, 0x04, 0x35, 0x04, + 0x3b, 0x04, 0x3d, 0x04, 0x38, 0x04, 0x3a, 0x04, + 0x0f, 0x32, 0x04, 0x42, 0x04, 0x3e, 0x04, 0x40, + 0x04, 0x3d, 0x04, 0x38, 0x04, 0x3a, 0x04, 0x0b, + 0x41, 0x04, 0x40, 0x04, 0x35, 0x04, 0x34, 0x04, + 0x30, 0x04, 0x11, 0x47, 0x04, 0x35, 0x04, 0x42, + 0x04, 0x32, 0x04, 0x40, 0x04, 0x42, 0x04, 0x3e, + 0x04, 0x3a, 0x04, 0x0b, 0x3f, 0x04, 0x35, 0x04, + 0x42, 0x04, 0x3e, 0x04, 0x3a, 0x04, 0x0d, 0x41, + 0x04, 0x30, 0x04, 0x31, 0x04, 0x3e, 0x04, 0x42, + 0x04, 0x30, 0x04, 0x08, 0x64, 0x61, 0x79, 0x73, + 0x04, 0x42, 0x45, 0x08, 0x65, 0x72, 0x61, 0x73, + 0x15, 0x3f, 0x04, 0x40, 0x04, 0x35, 0x04, 0x42, + 0x04, 0x3f, 0x04, 0x3b, 0x04, 0x30, 0x04, 0x34, + 0x04, 0x3d, 0x04, 0x35, 0x04, 0x04, 0x61, 0x6d, + 0x11, 0x3f, 0x04, 0x3e, 0x04, 0x3f, 0x04, 0x3b, + 0x04, 0x30, 0x04, 0x34, 0x04, 0x3d, 0x04, 0x35, + 0x04, 0x04, 0x70, 0x6d, 0x14, 0x64, 0x61, 0x79, + 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x73, 0x06, + 0x4d, 0x30, 0x31, 0x06, 0x4d, 0x30, 0x32, 0x06, + 0x4d, 0x30, 0x33, 0x06, 0x4d, 0x30, 0x34, 0x06, + 0x4d, 0x30, 0x35, 0x06, 0x4d, 0x30, 0x36, 0x06, + 0x4d, 0x30, 0x37, 0x06, 0x4d, 0x30, 0x38, 0x06, + 0x4d, 0x30, 0x39, 0x06, 0x4d, 0x31, 0x30, 0x06, + 0x4d, 0x31, 0x31, 0x06, 0x4d, 0x31, 0x32, 0x08, + 0x54, 0x6f, 0x75, 0x74, 0x08, 0x42, 0x61, 0x62, + 0x61, 0x0a, 0x48, 0x61, 0x74, 0x6f, 0x72, 0x0a, + 0x4b, 0x69, 0x61, 0x68, 0x6b, 0x08, 0x54, 0x6f, + 0x62, 0x61, 0x0c, 0x41, 0x6d, 0x73, 0x68, 0x69, + 0x72, 0x10, 0x42, 0x61, 0x72, 0x61, 0x6d, 0x68, + 0x61, 0x74, 0x12, 0x42, 0x61, 0x72, 0x61, 0x6d, + 0x6f, 0x75, 0x64, 0x61, 0x0e, 0x42, 0x61, 0x73, + 0x68, 0x61, 0x6e, 0x73, 0x0a, 0x50, 0x61, 0x6f, + 0x6e, 0x61, 0x08, 0x45, 0x70, 0x65, 0x70, 0x0a, + 0x4d, 0x65, 0x73, 0x72, 0x61, 0x0a, 0x4e, 0x61, + 0x73, 0x69, 0x65, 0x08, 0x45, 0x52, 0x41, 0x30, + 0x08, 0x45, 0x52, 0x41, 0x31, 0x10, 0x4d, 0x65, + 0x73, 0x6b, 0x65, 0x72, 0x65, 0x6d, 0x0c, 0x54, + 0x65, 0x6b, 0x65, 0x6d, 0x74, 0x0a, 0x48, 0x65, + 0x64, 0x61, 0x72, 0x0c, 0x54, 0x61, 0x68, 0x73, + 0x61, 0x73, 0x06, 0x54, 0x65, 0x72, 0x0e, 0x59, + 0x65, 0x6b, 0x61, 0x74, 0x69, 0x74, 0x0e, 0x4d, + 0x65, 0x67, 0x61, 0x62, 0x69, 0x74, 0x0c, 0x4d, + 0x69, 0x61, 0x7a, 0x69, 0x61, 0x0c, 0x47, 0x65, + 0x6e, 0x62, 0x6f, 0x74, 0x08, 0x53, 0x65, 0x6e, + 0x65, 0x0a, 0x48, 0x61, 0x6d, 0x6c, 0x65, 0x0e, + 0x4e, 0x65, 0x68, 0x61, 0x73, 0x73, 0x65, 0x0e, + 0x50, 0x61, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x0f, + 0x3f, 0x04, 0x40, 0x04, 0x2e, 0x00, 0x3d, 0x04, + 0x2e, 0x00, 0x35, 0x04, 0x2e, 0x00, 0x09, 0x3d, + 0x04, 0x2e, 0x00, 0x35, 0x04, 0x2e, 0x00, 0x11, + 0x3f, 0x04, 0x40, 0x04, 0x2e, 0x00, 0x20, 0x00, + 0x3d, 0x04, 0x2e, 0x00, 0x35, 0x04, 0x2e, 0x00, + 0x04, 0x43, 0x45, 0x1f, 0x3f, 0x04, 0x40, 0x04, + 0x35, 0x04, 0x34, 0x04, 0x20, 0x00, 0x3d, 0x04, + 0x30, 0x04, 0x48, 0x04, 0x30, 0x04, 0x42, 0x04, + 0x30, 0x04, 0x20, 0x00, 0x35, 0x04, 0x40, 0x04, + 0x30, 0x04, 0x1b, 0x3e, 0x04, 0x34, 0x04, 0x20, + 0x00, 0x3d, 0x04, 0x30, 0x04, 0x48, 0x04, 0x30, + 0x04, 0x42, 0x04, 0x30, 0x04, 0x20, 0x00, 0x35, + 0x04, 0x40, 0x04, 0x30, 0x04, 0x0c, 0x54, 0x69, + 0x73, 0x68, 0x72, 0x69, 0x0e, 0x48, 0x65, 0x73, + 0x68, 0x76, 0x61, 0x6e, 0x0c, 0x4b, 0x69, 0x73, + 0x6c, 0x65, 0x76, 0x0a, 0x54, 0x65, 0x76, 0x65, + 0x74, 0x0c, 0x53, 0x68, 0x65, 0x76, 0x61, 0x74, + 0x0c, 0x41, 0x64, 0x61, 0x72, 0x20, 0x49, 0x08, + 0x41, 0x64, 0x61, 0x72, 0x0a, 0x4e, 0x69, 0x73, + 0x61, 0x6e, 0x08, 0x49, 0x79, 0x61, 0x72, 0x0a, + 0x53, 0x69, 0x76, 0x61, 0x6e, 0x0a, 0x54, 0x61, + 0x6d, 0x75, 0x7a, 0x04, 0x41, 0x76, 0x08, 0x45, + 0x6c, 0x75, 0x6c, 0x0e, 0x41, 0x64, 0x61, 0x72, + 0x20, 0x49, 0x49, 0x04, 0x41, 0x4d, 0x0e, 0x43, + 0x68, 0x61, 0x69, 0x74, 0x72, 0x61, 0x10, 0x56, + 0x61, 0x69, 0x73, 0x61, 0x6b, 0x68, 0x61, 0x10, + 0x4a, 0x79, 0x61, 0x69, 0x73, 0x74, 0x68, 0x61, + 0x0c, 0x41, 0x73, 0x61, 0x64, 0x68, 0x61, 0x0e, + 0x53, 0x72, 0x61, 0x76, 0x61, 0x6e, 0x61, 0x0c, + 0x42, 0x68, 0x61, 0x64, 0x72, 0x61, 0x0c, 0x41, + 0x73, 0x76, 0x69, 0x6e, 0x61, 0x0e, 0x4b, 0x61, + 0x72, 0x74, 0x69, 0x6b, 0x61, 0x14, 0x41, 0x67, + 0x72, 0x61, 0x68, 0x61, 0x79, 0x61, 0x6e, 0x61, + 0x0a, 0x50, 0x61, 0x75, 0x73, 0x61, 0x0a, 0x4d, + 0x61, 0x67, 0x68, 0x61, 0x10, 0x50, 0x68, 0x61, + 0x6c, 0x67, 0x75, 0x6e, 0x61, 0x08, 0x53, 0x61, + 0x6b, 0x61, 0x08, 0x4d, 0x75, 0x68, 0x2e, 0x08, + 0x53, 0x61, 0x66, 0x2e, 0x0c, 0x52, 0x61, 0x62, + 0x2e, 0x20, 0x49, 0x0e, 0x52, 0x61, 0x62, 0x2e, + 0x20, 0x49, 0x49, 0x0c, 0x4a, 0x75, 0x6d, 0x2e, + 0x20, 0x49, 0x0e, 0x4a, 0x75, 0x6d, 0x2e, 0x20, + 0x49, 0x49, 0x08, 0x52, 0x61, 0x6a, 0x2e, 0x08, + 0x53, 0x68, 0x61, 0x2e, 0x08, 0x52, 0x61, 0x6d, + 0x2e, 0x0a, 0x53, 0x68, 0x61, 0x77, 0x2e, 0x11, + 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, + 0x6c, 0x00, 0x2d, 0x00, 0x51, 0x00, 0x2e, 0x00, + 0x11, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, + 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x48, 0x00, 0x2e, + 0x00, 0x10, 0x4d, 0x75, 0x68, 0x61, 0x72, 0x72, + 0x61, 0x6d, 0x0a, 0x53, 0x61, 0x66, 0x61, 0x72, + 0x0f, 0x52, 0x00, 0x61, 0x00, 0x62, 0x00, 0x69, + 0x00, 0xbb, 0x02, 0x20, 0x00, 0x49, 0x00, 0x11, + 0x52, 0x00, 0x61, 0x00, 0x62, 0x00, 0x69, 0x00, + 0xbb, 0x02, 0x20, 0x00, 0x49, 0x00, 0x49, 0x00, + 0x10, 0x4a, 0x75, 0x6d, 0x61, 0x64, 0x61, 0x20, + 0x49, 0x12, 0x4a, 0x75, 0x6d, 0x61, 0x64, 0x61, + 0x20, 0x49, 0x49, 0x0a, 0x52, 0x61, 0x6a, 0x61, + 0x62, 0x0f, 0x53, 0x00, 0x68, 0x00, 0x61, 0x00, + 0xbb, 0x02, 0x62, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x0e, 0x52, 0x61, 0x6d, 0x61, 0x64, 0x61, 0x6e, + 0x0e, 0x53, 0x68, 0x61, 0x77, 0x77, 0x61, 0x6c, + 0x19, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, + 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x51, 0x00, 0x69, + 0x00, 0xbb, 0x02, 0x64, 0x00, 0x61, 0x00, 0x68, + 0x00, 0x19, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, + 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x48, 0x00, + 0x69, 0x00, 0x6a, 0x00, 0x6a, 0x00, 0x61, 0x00, + 0x68, 0x00, 0x04, 0x41, 0x48, 0x1f, 0x54, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x36, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x13, 0x20, 0x36, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x21, 0x53, 0x00, 0x68, 0x00, 0x75, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1f, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, + 0x57, 0x00, 0x61, 0x00, 0x64, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x1f, 0x52, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x1d, 0x59, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1f, 0x4a, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6b, + 0x00, 0x61, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x2d, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x2d, 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x2b, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x2d, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x2a, 0x4a, 0x69, 0x6e, 0x67, 0x6f, + 0x2d, 0x6b, 0x65, 0x69, 0x75, 0x6e, 0x20, 0x28, + 0x37, 0x36, 0x37, 0x2d, 0x37, 0x37, 0x30, 0x29, + 0x1d, 0x48, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x37, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, + 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, 0x64, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, 0x4b, + 0x00, 0x4d, 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x38, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4a, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x61, 0x00, + 0x6a, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, + 0x53, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x20, 0x54, + 0x65, 0x6e, 0x2d, 0x61, 0x6e, 0x20, 0x28, 0x38, + 0x35, 0x37, 0x2d, 0x38, 0x35, 0x39, 0x29, 0x1f, + 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x47, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, + 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1d, 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, + 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x34, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1b, 0x4c, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, + 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x1d, 0x41, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x1d, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x4a, 0x00, 0x69, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x29, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x27, 0x4a, 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, + 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4c, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x61, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x25, 0x4a, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x24, 0x54, 0x65, 0x6e, 0x2d, 0x65, + 0x69, 0x20, 0x28, 0x31, 0x31, 0x31, 0x30, 0x2d, + 0x31, 0x31, 0x31, 0x33, 0x29, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, + 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x4d, 0x01, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x45, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x6a, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x48, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, + 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4c, + 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6d, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x4a, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x59, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x75, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x29, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x29, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x4a, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x21, 0x4a, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x27, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x75, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x29, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x74, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x29, 0x52, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x4e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, + 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x61, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, + 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x27, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x45, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, 0x69, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x27, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x27, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x61, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x41, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x4d, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x02, 0x54, 0x02, 0x53, 0x0a, 0x4d, 0x65, 0x69, + 0x6a, 0x69, 0x0d, 0x54, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x0b, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x0c, 0x48, 0x65, 0x69, 0x73, 0x65, + 0x69, 0x12, 0x46, 0x61, 0x72, 0x76, 0x61, 0x72, + 0x64, 0x69, 0x6e, 0x16, 0x4f, 0x72, 0x64, 0x69, + 0x62, 0x65, 0x68, 0x65, 0x73, 0x68, 0x74, 0x0e, + 0x4b, 0x68, 0x6f, 0x72, 0x64, 0x61, 0x64, 0x06, + 0x54, 0x69, 0x72, 0x0c, 0x4d, 0x6f, 0x72, 0x64, + 0x61, 0x64, 0x12, 0x53, 0x68, 0x61, 0x68, 0x72, + 0x69, 0x76, 0x61, 0x72, 0x08, 0x4d, 0x65, 0x68, + 0x72, 0x08, 0x41, 0x62, 0x61, 0x6e, 0x08, 0x41, + 0x7a, 0x61, 0x72, 0x06, 0x44, 0x65, 0x79, 0x0c, + 0x42, 0x61, 0x68, 0x6d, 0x61, 0x6e, 0x0c, 0x45, + 0x73, 0x66, 0x61, 0x6e, 0x64, 0x04, 0x41, 0x50, + 0x1a, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, + 0x52, 0x2e, 0x4f, 0x2e, 0x43, 0x2e, 0x0c, 0x52, + 0x2e, 0x4f, 0x2e, 0x43, 0x2e, 0x12, 0x63, 0x61, + 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, 0x73, 0x08, + 0x64, 0x61, 0x74, 0x65, 0x08, 0x6c, 0x61, 0x74, + 0x6e, 0x04, 0x6e, 0x75, 0x10, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, + 0x74, 0x74, 0x65, 0x72, 0x6e, 0x26, 0x7b, 0x6d, + 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0x1e, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, + 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, + 0x6e, 0x0e, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, + 0x6c, 0x26, 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x63, 0x79, 0x7d, 0xa0, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x3c, 0x7b, 0x6d, + 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x7d, 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x79, 0x7d, 0xa0, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0x10, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x63, 0x79, 0x2a, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x7b, 0x70, + 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, + 0x67, 0x6e, 0x7d, 0x40, 0x7b, 0x6d, 0x69, 0x6e, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x7b, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x0e, 0x70, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x10, 0x70, 0x61, 0x74, + 0x74, 0x65, 0x72, 0x6e, 0x73, 0x02, 0x2c, 0x02, + 0x2e, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x06, + 0x4e, 0x61, 0x4e, 0x06, 0x6e, 0x61, 0x6e, 0x02, + 0x2b, 0x10, 0x70, 0x6c, 0x75, 0x73, 0x53, 0x69, + 0x67, 0x6e, 0x02, 0x2d, 0x12, 0x6d, 0x69, 0x6e, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, 0x25, + 0x16, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, + 0x53, 0x69, 0x67, 0x6e, 0x03, 0x1e, 0x22, 0x10, + 0x69, 0x6e, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, + 0x0e, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, + 0x04, 0x52, 0x24, 0x06, 0x42, 0x52, 0x4c, 0x06, + 0x43, 0x41, 0x24, 0x06, 0x43, 0x41, 0x44, 0x03, + 0xac, 0x20, 0x06, 0x45, 0x55, 0x52, 0x07, 0x34, + 0x04, 0x35, 0x04, 0x3d, 0x04, 0x06, 0x4d, 0x4b, + 0x44, 0x06, 0x4d, 0x58, 0x24, 0x06, 0x4d, 0x58, + 0x4e, 0x06, 0x55, 0x53, 0x24, 0x06, 0x55, 0x53, + 0x44, 0x08, 0x46, 0x43, 0x46, 0x41, 0x06, 0x58, + 0x41, 0x46, 0x06, 0x45, 0x43, 0x24, 0x06, 0x58, + 0x43, 0x44, 0x06, 0x43, 0x46, 0x41, 0x06, 0x58, + 0x4f, 0x46, 0x08, 0x43, 0x46, 0x50, 0x46, 0x06, + 0x58, 0x50, 0x46, 0x14, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x52, 0x6e, + 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, + 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, + 0x64, 0x61, 0x74, 0x61, 0x2f, 0x6a, 0x73, 0x6f, + 0x6e, 0x70, 0x2f, 0x6d, 0x6b, 0x2e, 0x6a, 0x73, + 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, + 0x00, 0x27, 0x00, 0x89, 0x01, 0x84, 0x6a, 0x01, + 0xa0, 0x01, 0x00, 0x00, 0x00, 0x39, 0xd0, 0x00, + 0x00, 0x00, 0x43, 0xd1, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd2, 0x00, 0x00, 0x00, 0x4d, 0xd3, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd4, 0x00, 0x00, 0x00, + 0x04, 0xd5, 0x00, 0x00, 0x00, 0x04, 0xd6, 0x00, + 0x00, 0x00, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x04, + 0xd8, 0x00, 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, + 0x00, 0x04, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdb, + 0x00, 0x00, 0x00, 0x04, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0xdd, 0x00, 0x00, 0x00, 0x04, 0xde, 0x00, + 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, 0x04, + 0xe0, 0x00, 0x00, 0x00, 0x04, 0xe1, 0x00, 0x00, + 0x00, 0x04, 0xe2, 0x00, 0x00, 0x00, 0x26, 0x0f, + 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x0a, 0x4d, + 0xe4, 0x00, 0x00, 0x00, 0x09, 0x4d, 0xe5, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, + 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x04, 0xec, + 0x00, 0x00, 0x00, 0x4d, 0xed, 0x00, 0x00, 0x00, + 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, 0xef, 0x00, + 0x00, 0x00, 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, + 0xf1, 0x00, 0x00, 0x00, 0x04, 0xf2, 0x00, 0x00, + 0x00, 0x4d, 0xf3, 0x00, 0x00, 0x00, 0x04, 0xf4, + 0x00, 0x00, 0x00, 0x4d, 0xf5, 0x00, 0x00, 0x00, + 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, 0xf7, 0x00, + 0x00, 0x00, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, + 0xf9, 0x00, 0x00, 0x00, 0x04, 0xfa, 0x00, 0x00, + 0x00, 0x4d, 0xfb, 0x00, 0x00, 0x00, 0x04, 0xfc, + 0x00, 0x00, 0x00, 0x4d, 0xfd, 0x00, 0x00, 0x00, + 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, 0xff, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, + 0x01, 0x01, 0x00, 0x00, 0x04, 0x02, 0x01, 0x00, + 0x00, 0x4d, 0x03, 0x01, 0x00, 0x00, 0x04, 0x04, + 0x01, 0x00, 0x00, 0x4d, 0x05, 0x01, 0x00, 0x00, + 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, 0x07, 0x01, + 0x00, 0x00, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, + 0x09, 0x01, 0x00, 0x00, 0x04, 0x0a, 0x01, 0x00, + 0x00, 0x4d, 0x0b, 0x01, 0x00, 0x00, 0x04, 0x0c, + 0x01, 0x00, 0x00, 0x4d, 0x0d, 0x01, 0x00, 0x00, + 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, 0x0f, 0x01, + 0x00, 0x00, 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, + 0x11, 0x01, 0x00, 0x00, 0x04, 0x12, 0x01, 0x00, + 0x00, 0x4d, 0x13, 0x01, 0x00, 0x00, 0x04, 0x14, + 0x01, 0x00, 0x00, 0x4d, 0x15, 0x01, 0x00, 0x00, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, 0x17, 0x01, + 0x00, 0x00, 0x04, 0x18, 0x01, 0x00, 0x00, 0x4d, + 0x19, 0x01, 0x00, 0x00, 0x04, 0x1a, 0x01, 0x00, + 0x00, 0x4d, 0x1b, 0x01, 0x00, 0x00, 0x04, 0x1c, + 0x01, 0x00, 0x00, 0x4d, 0x1d, 0x01, 0x00, 0x00, + 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, 0x1f, 0x01, + 0x00, 0x00, 0x04, 0x20, 0x01, 0x00, 0x00, 0x4d, + 0x21, 0x01, 0x00, 0x00, 0x04, 0x22, 0x01, 0x00, + 0x00, 0x4d, 0x23, 0x01, 0x00, 0x00, 0x04, 0x24, + 0x01, 0x00, 0x00, 0x4d, 0x25, 0x01, 0x00, 0x00, + 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, 0x27, 0x01, + 0x00, 0x00, 0x04, 0x28, 0x01, 0x00, 0x00, 0x4d, + 0x28, 0x01, 0x00, 0x00, 0x04, 0x29, 0x01, 0x00, + 0x00, 0x4d, 0x2a, 0x01, 0x00, 0x00, 0x04, 0x2b, + 0x01, 0x00, 0x00, 0x4d, 0x2c, 0x01, 0x00, 0x00, + 0x04, 0x2d, 0x01, 0x00, 0x00, 0x4d, 0x2e, 0x01, + 0x00, 0x00, 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, + 0x30, 0x01, 0x00, 0x00, 0x04, 0x31, 0x01, 0x00, + 0x00, 0x4d, 0x32, 0x01, 0x00, 0x00, 0x04, 0x33, + 0x01, 0x00, 0x00, 0x4d, 0x34, 0x01, 0x00, 0x00, + 0x04, 0x35, 0x01, 0x00, 0x00, 0x4d, 0x36, 0x01, + 0x00, 0x00, 0x04, 0x37, 0x01, 0x00, 0x00, 0x4d, + 0x38, 0x01, 0x00, 0x00, 0x04, 0x39, 0x01, 0x00, + 0x00, 0x4d, 0x3a, 0x01, 0x00, 0x00, 0x4d, 0x3b, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x3c, 0x01, 0x00, + 0x00, 0x4d, 0x3d, 0x01, 0x00, 0x00, 0x04, 0x3e, + 0x01, 0x00, 0x00, 0x4d, 0x3f, 0x01, 0x00, 0x00, + 0x04, 0x40, 0x01, 0x00, 0x00, 0x4d, 0x32, 0x01, + 0x00, 0x00, 0x04, 0x41, 0x01, 0x00, 0x00, 0x4d, + 0x2c, 0x01, 0x00, 0x00, 0x4d, 0x42, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x43, 0x01, 0x00, 0x00, 0x4d, + 0x44, 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, + 0x00, 0x4d, 0x46, 0x01, 0x00, 0x00, 0x04, 0x0a, + 0x01, 0x00, 0x00, 0x4d, 0x09, 0x01, 0x00, 0x00, + 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, 0x05, 0x01, + 0x00, 0x00, 0x4d, 0x47, 0x01, 0x00, 0x00, 0x4d, + 0x48, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x0b, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x7d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x04, + 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, + 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, 0x4d, 0xd5, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x00, 0xbe, + 0x01, 0xbe, 0x02, 0xbe, 0x03, 0xbe, 0x04, 0xbe, + 0x05, 0xbe, 0x06, 0xbe, 0x07, 0xbe, 0x08, 0xbe, + 0x09, 0xbe, 0x0a, 0xbe, 0x0b, 0x26, 0x0c, 0x00, + 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, + 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, + 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, + 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, + 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, + 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, + 0x04, 0x8e, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x4d, + 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, + 0x01, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x0c, 0xbe, 0x0d, 0xbe, 0x0e, + 0xbe, 0x0f, 0xbe, 0x10, 0xbe, 0x11, 0xbe, 0x12, + 0xbe, 0x13, 0xbe, 0x14, 0xbe, 0x15, 0xbe, 0x16, + 0xbe, 0x17, 0xbe, 0x18, 0x26, 0x0d, 0x00, 0x4d, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, + 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, + 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, + 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, + 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, + 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, + 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, + 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, + 0x04, 0x9b, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x8f, 0x01, + 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, + 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, + 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, + 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, + 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, + 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, + 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, + 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x26, 0x0d, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x69, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7b, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x9c, 0x01, 0x00, 0x00, + 0x04, 0x9d, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, + 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, + 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, + 0x4d, 0xd7, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x19, 0xbe, 0x1a, 0xbe, 0x1b, 0xbe, 0x1c, 0xbe, + 0x1d, 0xbe, 0x1e, 0xbe, 0x1f, 0xbe, 0x20, 0xbe, + 0x21, 0xbe, 0x22, 0xbe, 0x23, 0xbe, 0x24, 0x26, + 0x0c, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, + 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, + 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, + 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, + 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, + 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, + 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, + 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, + 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, + 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, + 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7b, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7e, 0x01, 0x00, + 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, + 0x4d, 0x82, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x25, 0xbe, 0x26, + 0xbe, 0x27, 0xbe, 0x28, 0xbe, 0x29, 0xbe, 0x2a, + 0xbe, 0x2b, 0xbe, 0x2c, 0xbe, 0x2d, 0xbe, 0x2e, + 0xbe, 0x2f, 0xbe, 0x30, 0xbe, 0x31, 0x26, 0x0d, + 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0x9e, + 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, + 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, + 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, + 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, + 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, + 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, + 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, + 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, + 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, + 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, + 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, + 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, + 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, + 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, + 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x7b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x9c, 0x01, + 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, + 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x32, 0xbe, 0x33, 0xbe, 0x34, 0xbe, + 0x35, 0xbe, 0x36, 0xbe, 0x37, 0xbe, 0x38, 0xbe, + 0x39, 0xbe, 0x3a, 0xbe, 0x3b, 0xbe, 0x3c, 0xbe, + 0x3d, 0xbe, 0x3e, 0x26, 0x0d, 0x00, 0x4d, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, + 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, + 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, + 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, + 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, + 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, + 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, + 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, + 0xaa, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, + 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, + 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, + 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, + 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, + 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, + 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, + 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, + 0x04, 0xaa, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x9c, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, + 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, + 0x4d, 0xd9, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x3f, 0xbe, 0x40, 0xbe, 0x41, 0xbe, 0x42, 0xbe, + 0x43, 0xbe, 0x44, 0xbe, 0x45, 0xbe, 0x46, 0xbe, + 0x47, 0xbe, 0x48, 0xbe, 0x49, 0xbe, 0x4a, 0x26, + 0x0c, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, + 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, + 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, + 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, + 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, + 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, + 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, + 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, + 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, + 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, + 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7b, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x9c, 0x01, 0x00, + 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0x9c, + 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, + 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x4d, + 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x49, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, + 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, + 0x04, 0xae, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, + 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, + 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, + 0xad, 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, + 0x00, 0x26, 0x04, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, + 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, + 0x04, 0xae, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7d, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, + 0x82, 0x01, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x4b, 0xbe, 0x4c, 0xbe, + 0x4d, 0xbe, 0x4e, 0xbe, 0x4f, 0xbe, 0x50, 0xbe, + 0x51, 0xbe, 0x52, 0xbe, 0x53, 0xbe, 0x54, 0xbe, + 0x55, 0xbe, 0x56, 0xbe, 0x57, 0xbe, 0x58, 0x26, + 0x0e, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, + 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, + 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, + 0x01, 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, + 0x04, 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, + 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, 0x04, + 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, + 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, + 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, + 0x04, 0xbe, 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xb1, 0x01, + 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, + 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, + 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, 0x04, 0xb6, + 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, + 0x04, 0xb8, 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, + 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, 0x04, + 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, + 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, 0x04, 0xbe, + 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xbf, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x7d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x04, + 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, + 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x59, 0xbe, + 0x5a, 0xbe, 0x5b, 0xbe, 0x5c, 0xbe, 0x5d, 0xbe, + 0x5e, 0xbe, 0x5f, 0xbe, 0x60, 0xbe, 0x61, 0xbe, + 0x62, 0xbe, 0x63, 0xbe, 0x64, 0x26, 0x0c, 0x00, + 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, + 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, 0x04, + 0xc2, 0x01, 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, + 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, 0x04, 0xc5, + 0x01, 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, 0x00, + 0x04, 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, 0x01, + 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, 0x04, + 0xca, 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, 0x04, 0xc1, + 0x01, 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, 0x00, + 0x04, 0xc3, 0x01, 0x00, 0x00, 0x04, 0xc4, 0x01, + 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, 0x04, + 0xc6, 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, + 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, 0xc9, + 0x01, 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, + 0x04, 0xcb, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xcc, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, + 0xcc, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, + 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x65, 0xbe, 0x66, 0xbe, 0x67, 0xbe, 0x68, 0xbe, + 0x69, 0xbe, 0x6a, 0xbe, 0x6b, 0xbe, 0x6c, 0xbe, + 0x6d, 0xbe, 0x6e, 0xbe, 0x6f, 0xbe, 0x70, 0x26, + 0x0c, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, + 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, + 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, + 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, + 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, + 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, + 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, + 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, 0xd8, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, + 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, + 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, 0x04, + 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, + 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, 0xe0, + 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, 0x00, + 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, 0xe3, 0x01, + 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7b, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xe5, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x51, 0x01, 0x00, + 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe5, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, + 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x71, 0xbe, 0x72, 0xbe, 0x73, 0xbe, + 0x74, 0xbe, 0x75, 0xbe, 0x76, 0xbe, 0x77, 0xbe, + 0x78, 0xbe, 0x79, 0xbe, 0x7a, 0xbe, 0x7b, 0xbe, + 0x7c, 0x26, 0x0c, 0x00, 0x4d, 0x51, 0x01, 0x00, + 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, + 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, + 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, + 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, + 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, + 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, + 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, + 0x04, 0xd8, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd9, 0x01, + 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, + 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, + 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, + 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, + 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, + 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, + 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xe5, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x51, + 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xe5, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7d, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, + 0x82, 0x01, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, + 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7b, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x01, 0x00, + 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, + 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, + 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, + 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, + 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, + 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, + 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, + 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, + 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, + 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, + 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, + 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, + 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, + 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, + 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, + 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, + 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, + 0x04, 0x02, 0x02, 0x00, 0x00, 0x04, 0x03, 0x02, + 0x00, 0x00, 0x04, 0x04, 0x02, 0x00, 0x00, 0x04, + 0x05, 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, + 0x06, 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, + 0x80, 0x04, 0x07, 0x02, 0x00, 0x00, 0x4d, 0x21, + 0x00, 0x00, 0x80, 0x04, 0x08, 0x02, 0x00, 0x00, + 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0x09, 0x02, + 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, + 0x0a, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, + 0x80, 0x04, 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x25, + 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, 0x00, 0x00, + 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, + 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, + 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, + 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x29, + 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, + 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, + 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, + 0x12, 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, + 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, 0x4d, 0x2d, + 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, + 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, + 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, + 0x16, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, + 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, 0x4d, 0x31, + 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, + 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, + 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, + 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, + 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x35, + 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, + 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, + 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, + 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, + 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x39, + 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, + 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, + 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, + 0x22, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, + 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, 0x3d, + 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, + 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, + 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, + 0x26, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, + 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, 0x41, + 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, + 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, + 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, + 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, + 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x45, + 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, + 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, + 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, + 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, + 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x49, + 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, + 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, + 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, + 0x32, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, + 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, 0x4d, + 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, + 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, + 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, + 0x36, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, + 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, 0x51, + 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, + 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, + 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, + 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, + 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x55, + 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, + 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, + 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, + 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, + 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x59, + 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, + 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, + 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, + 0x42, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, + 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, 0x5d, + 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, + 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, + 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, + 0x46, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, + 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, 0x61, + 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, + 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, + 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, + 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, + 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x65, + 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, + 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, + 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, + 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, + 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x69, + 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, + 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, + 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, + 0x52, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, + 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, 0x6d, + 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, + 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, + 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, + 0x56, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, + 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, 0x71, + 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, + 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, + 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, + 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, + 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x75, + 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, + 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, + 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, + 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, + 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x79, + 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, + 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, + 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, + 0x62, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, + 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, 0x7d, + 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, + 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, + 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, + 0x66, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, + 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, 0x81, + 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, + 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, + 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, + 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, + 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x85, + 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, + 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, + 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, + 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, + 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x89, + 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, + 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, + 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, + 0x72, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, + 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, 0x8d, + 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, + 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, + 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, + 0x76, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, + 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, 0x91, + 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, + 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, + 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, + 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, + 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x95, + 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, + 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, + 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, + 0x7e, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, + 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, 0x99, + 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, + 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, + 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, + 0x82, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, + 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, 0x9d, + 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, + 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, + 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, + 0x86, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, + 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, 0xa1, + 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, + 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, + 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, + 0x8a, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, + 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xa5, + 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, + 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, + 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, + 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, + 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xa9, + 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, + 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, + 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, + 0x92, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, + 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, 0xad, + 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, + 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, + 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, + 0x96, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, + 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, 0xb1, + 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, + 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, + 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, + 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, + 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xb5, + 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, + 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, + 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, + 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, + 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xb9, + 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, + 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, + 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, + 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, + 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xbd, + 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, + 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, + 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, + 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, + 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xc1, + 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, + 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, + 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, + 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, + 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, 0xc5, + 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, + 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, + 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, + 0xae, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, + 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xc9, + 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, + 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, + 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, + 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, + 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xcd, + 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, + 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, + 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, + 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, + 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xd1, + 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, + 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, + 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, + 0xba, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, + 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xd5, + 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, + 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, + 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, + 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xd9, + 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, + 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, + 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, 0x00, 0x00, + 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xc9, 0x02, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, + 0xca, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, + 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, 0xe5, + 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, 0x00, + 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xcd, 0x02, + 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, + 0x80, 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, 0xe9, + 0x00, 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0x03, 0x01, + 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, + 0x51, 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, + 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, + 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, + 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, + 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, + 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, + 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, + 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, + 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, + 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, + 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, + 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, + 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, + 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, + 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, + 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, + 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, + 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, + 0x04, 0x02, 0x02, 0x00, 0x00, 0x04, 0x03, 0x02, + 0x00, 0x00, 0x04, 0x04, 0x02, 0x00, 0x00, 0x04, + 0x05, 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, + 0x06, 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, + 0x80, 0x04, 0x07, 0x02, 0x00, 0x00, 0x4d, 0x21, + 0x00, 0x00, 0x80, 0x04, 0x08, 0x02, 0x00, 0x00, + 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0x09, 0x02, + 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, + 0x0a, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, + 0x80, 0x04, 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x25, + 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, 0x00, 0x00, + 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, + 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, + 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, + 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x29, + 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, + 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, + 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, + 0x12, 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, + 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, 0x4d, 0x2d, + 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, + 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, + 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, + 0x16, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, + 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, 0x4d, 0x31, + 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, + 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, + 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, + 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, + 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x35, + 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, + 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, + 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, + 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, + 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x39, + 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, + 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, + 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, + 0x22, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, + 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, 0x3d, + 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, + 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, + 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, + 0x26, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, + 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, 0x41, + 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, + 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, + 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, + 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, + 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x45, + 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, + 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, + 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, + 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, + 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x49, + 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, + 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, + 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, + 0x32, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, + 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, 0x4d, + 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, + 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, + 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, + 0x36, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, + 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, 0x51, + 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, + 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, + 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, + 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, + 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x55, + 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, + 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, + 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, + 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, + 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x59, + 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, + 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, + 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, + 0x42, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, + 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, 0x5d, + 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, + 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, + 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, + 0x46, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, + 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, 0x61, + 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, + 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, + 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, + 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, + 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x65, + 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, + 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, + 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, + 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, + 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x69, + 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, + 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, + 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, + 0x52, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, + 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, 0x6d, + 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, + 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, + 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, + 0x56, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, + 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, 0x71, + 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, + 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, + 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, + 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, + 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x75, + 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, + 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, + 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, + 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, + 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x79, + 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, + 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, + 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, + 0x62, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, + 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, 0x7d, + 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, + 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, + 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, + 0x66, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, + 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, 0x81, + 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, + 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, + 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, + 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, + 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x85, + 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, + 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, + 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, + 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, + 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x89, + 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, + 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, + 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, + 0x72, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, + 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, 0x8d, + 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, + 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, + 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, + 0x76, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, + 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, 0x91, + 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, + 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, + 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, + 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, + 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x95, + 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, + 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, + 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, + 0x7e, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, + 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, 0x99, + 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, + 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, + 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, + 0x82, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, + 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, 0x9d, + 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, + 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, + 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, + 0x86, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, + 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, 0xa1, + 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, + 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, + 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, + 0x8a, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, + 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xa5, + 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, + 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, + 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, + 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, + 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xa9, + 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, + 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, + 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, + 0x92, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, + 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, 0xad, + 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, + 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, + 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, + 0x96, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, + 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, 0xb1, + 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, + 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, + 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, + 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, + 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xb5, + 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, + 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, + 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, + 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, + 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xb9, + 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, + 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, + 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, + 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, + 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xbd, + 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, + 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, + 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, + 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, + 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xc1, + 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, + 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, + 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, + 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, + 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, 0xc5, + 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, + 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, + 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, + 0xae, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, + 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xc9, + 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, + 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, + 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, + 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, + 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xcd, + 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, + 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, + 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, + 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, + 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xd1, + 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, + 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, + 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, + 0xba, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, + 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xd5, + 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, + 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, + 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, + 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xd9, + 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, + 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, + 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, 0x00, 0x00, + 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xc9, 0x02, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, + 0xca, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, + 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, 0xe5, + 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, 0x00, + 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xcd, 0x02, + 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, + 0xd0, 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, + 0x80, 0x04, 0xd1, 0x02, 0x00, 0x00, 0x4d, 0xe9, + 0x00, 0x00, 0x80, 0x04, 0xd2, 0x02, 0x00, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0xd3, 0x02, + 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, + 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, + 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, + 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, + 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, + 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, + 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, + 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, + 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, + 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, + 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, + 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, + 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, + 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, + 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, + 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, + 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, + 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, + 0x04, 0x02, 0x02, 0x00, 0x00, 0x04, 0x03, 0x02, + 0x00, 0x00, 0x04, 0x04, 0x02, 0x00, 0x00, 0x04, + 0x05, 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, + 0x06, 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, + 0x80, 0x04, 0x07, 0x02, 0x00, 0x00, 0x4d, 0x21, + 0x00, 0x00, 0x80, 0x04, 0x08, 0x02, 0x00, 0x00, + 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0x09, 0x02, + 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, + 0x0a, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, + 0x80, 0x04, 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x25, + 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, 0x00, 0x00, + 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, + 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, + 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, + 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x29, + 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, + 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, + 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, + 0x12, 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, + 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, 0x4d, 0x2d, + 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, + 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, + 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, + 0x16, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, + 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, 0x4d, 0x31, + 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, + 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, + 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, + 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, + 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x35, + 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, + 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, + 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, + 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, + 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x39, + 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, + 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, + 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, + 0x22, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, + 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, 0x3d, + 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, + 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, + 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, + 0x26, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, + 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, 0x41, + 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, + 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, + 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, + 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, + 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x45, + 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, + 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, + 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, + 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, + 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x49, + 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, + 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, + 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, + 0x32, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, + 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, 0x4d, + 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, + 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, + 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, + 0x36, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, + 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, 0x51, + 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, + 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, + 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, + 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, + 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x55, + 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, + 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, + 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, + 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, + 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x59, + 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, + 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, + 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, + 0x42, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, + 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, 0x5d, + 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, + 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, + 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, + 0x46, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, + 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, 0x61, + 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, + 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, + 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, + 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, + 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x65, + 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, + 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, + 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, + 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, + 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x69, + 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, + 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, + 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, + 0x52, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, + 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, 0x6d, + 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, + 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, + 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, + 0x56, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, + 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, 0x71, + 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, + 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, + 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, + 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, + 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x75, + 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, + 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, + 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, + 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, + 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x79, + 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, + 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, + 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, + 0x62, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, + 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, 0x7d, + 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, + 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, + 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, + 0x66, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, + 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, 0x81, + 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, + 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, + 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, + 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, + 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x85, + 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, + 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, + 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, + 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, + 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x89, + 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, + 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, + 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, + 0x72, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, + 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, 0x8d, + 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, + 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, + 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, + 0x76, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, + 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, 0x91, + 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, + 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, + 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, + 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, + 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x95, + 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, + 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, + 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, + 0x7e, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, + 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, 0x99, + 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, + 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, + 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, + 0x82, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, + 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, 0x9d, + 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, + 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, + 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, + 0x86, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, + 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, 0xa1, + 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, + 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, + 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, + 0x8a, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, + 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xa5, + 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, + 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, + 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, + 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, + 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xa9, + 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, + 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, + 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, + 0x92, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, + 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, 0xad, + 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, + 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, + 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, + 0x96, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, + 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, 0xb1, + 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, + 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, + 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, + 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, + 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xb5, + 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, + 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, + 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, + 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, + 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xb9, + 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, + 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, + 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, + 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, + 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xbd, + 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, + 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, + 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, + 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, + 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xc1, + 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, + 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, + 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, + 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, + 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, 0xc5, + 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, + 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, + 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, + 0xae, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, + 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xc9, + 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, + 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, + 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, + 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, + 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xcd, + 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, + 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, + 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, + 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, + 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xd1, + 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, + 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, + 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, + 0xba, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, + 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xd5, + 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, + 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, + 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, + 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xd9, + 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, + 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, + 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, 0x00, 0x00, + 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xc9, 0x02, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, + 0xca, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, + 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, 0xe5, + 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, 0x00, + 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xcd, 0x02, + 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, + 0xd0, 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, + 0x80, 0x04, 0xd1, 0x02, 0x00, 0x00, 0x4d, 0xe9, + 0x00, 0x00, 0x80, 0x04, 0xd2, 0x02, 0x00, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0xd3, 0x02, + 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x4d, + 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, + 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x7d, 0xbe, 0x7e, 0xbe, 0x7f, + 0xbe, 0x80, 0xbe, 0x81, 0xbe, 0x82, 0xbe, 0x83, + 0xbe, 0x84, 0xbe, 0x85, 0xbe, 0x86, 0xbe, 0x87, + 0xbe, 0x88, 0x26, 0x0c, 0x00, 0x4d, 0x51, 0x01, + 0x00, 0x00, 0x04, 0xd4, 0x02, 0x00, 0x00, 0x04, + 0xd5, 0x02, 0x00, 0x00, 0x04, 0xd6, 0x02, 0x00, + 0x00, 0x04, 0xd7, 0x02, 0x00, 0x00, 0x04, 0xd8, + 0x02, 0x00, 0x00, 0x04, 0xd9, 0x02, 0x00, 0x00, + 0x04, 0xda, 0x02, 0x00, 0x00, 0x04, 0xdb, 0x02, + 0x00, 0x00, 0x04, 0xdc, 0x02, 0x00, 0x00, 0x04, + 0xdd, 0x02, 0x00, 0x00, 0x04, 0xde, 0x02, 0x00, + 0x00, 0x04, 0xdf, 0x02, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd4, + 0x02, 0x00, 0x00, 0x04, 0xd5, 0x02, 0x00, 0x00, + 0x04, 0xd6, 0x02, 0x00, 0x00, 0x04, 0xd7, 0x02, + 0x00, 0x00, 0x04, 0xd8, 0x02, 0x00, 0x00, 0x04, + 0xd9, 0x02, 0x00, 0x00, 0x04, 0xda, 0x02, 0x00, + 0x00, 0x04, 0xdb, 0x02, 0x00, 0x00, 0x04, 0xdc, + 0x02, 0x00, 0x00, 0x04, 0xdd, 0x02, 0x00, 0x00, + 0x04, 0xde, 0x02, 0x00, 0x00, 0x04, 0xdf, 0x02, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xe0, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x51, 0x01, 0x00, 0x00, 0x04, 0xe0, 0x02, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xe0, 0x02, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7d, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7e, 0x01, 0x00, + 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, + 0x4d, 0x82, 0x01, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x7b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xe1, 0x02, + 0x00, 0x00, 0x04, 0xe2, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, + 0xe1, 0x02, 0x00, 0x00, 0x04, 0xe2, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xe1, 0x02, 0x00, 0x00, 0x04, 0xe2, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, + 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, + 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x4d, + 0xe3, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x02, 0x00, + 0x00, 0x0b, 0x04, 0xe5, 0x02, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe6, 0x02, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0xe7, 0x02, 0x00, 0x00, 0x4d, 0xe8, + 0x02, 0x00, 0x00, 0x04, 0xe9, 0x02, 0x00, 0x00, + 0x4d, 0xea, 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x02, + 0x00, 0x00, 0x0b, 0x04, 0xec, 0x02, 0x00, 0x00, + 0x4d, 0xe8, 0x02, 0x00, 0x00, 0x04, 0xed, 0x02, + 0x00, 0x00, 0x4d, 0xea, 0x02, 0x00, 0x00, 0x4d, + 0xee, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xef, 0x02, + 0x00, 0x00, 0x4d, 0xe8, 0x02, 0x00, 0x00, 0x04, + 0xf0, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x02, 0x00, + 0x00, 0x4d, 0xf1, 0x02, 0x00, 0x00, 0x4d, 0xf2, + 0x02, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xf3, 0x02, + 0x00, 0x00, 0x4d, 0xeb, 0x02, 0x00, 0x00, 0x04, + 0xf4, 0x02, 0x00, 0x00, 0x4d, 0xf5, 0x02, 0x00, + 0x00, 0x04, 0xf6, 0x02, 0x00, 0x00, 0x4d, 0xf7, + 0x02, 0x00, 0x00, 0x04, 0xf8, 0x02, 0x00, 0x00, + 0x4d, 0xf9, 0x02, 0x00, 0x00, 0x04, 0xfa, 0x02, + 0x00, 0x00, 0x4d, 0xfb, 0x02, 0x00, 0x00, 0x04, + 0xfc, 0x02, 0x00, 0x00, 0x4d, 0xfd, 0x02, 0x00, + 0x00, 0x04, 0xfe, 0x02, 0x00, 0x00, 0x4d, 0xff, + 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x02, 0x00, 0x00, + 0x4d, 0x00, 0x03, 0x00, 0x00, 0x0b, 0x04, 0x01, + 0x03, 0x00, 0x00, 0x4d, 0x02, 0x03, 0x00, 0x00, + 0x04, 0x03, 0x03, 0x00, 0x00, 0x4d, 0x04, 0x03, + 0x00, 0x00, 0x04, 0x05, 0x03, 0x00, 0x00, 0x4d, + 0x06, 0x03, 0x00, 0x00, 0x04, 0x07, 0x03, 0x00, + 0x00, 0x4d, 0x08, 0x03, 0x00, 0x00, 0x04, 0x09, + 0x03, 0x00, 0x00, 0x4d, 0x0a, 0x03, 0x00, 0x00, + 0x04, 0x0b, 0x03, 0x00, 0x00, 0x4d, 0x0c, 0x03, + 0x00, 0x00, 0x04, 0x0d, 0x03, 0x00, 0x00, 0x4d, + 0x0e, 0x03, 0x00, 0x00, 0x04, 0x0f, 0x03, 0x00, + 0x00, 0x4d, 0x10, 0x03, 0x00, 0x00, 0x04, 0x11, + 0x03, 0x00, 0x00, 0x4d, 0x12, 0x03, 0x00, 0x00, + 0x04, 0x13, 0x03, 0x00, 0x00, 0x4d, 0x14, 0x03, + 0x00, 0x00, 0x4d, 0x15, 0x03, 0x00, 0x00, 0x4d, + 0x45, 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, 0xcc, + 0x28, 0xac, 0x0c, 0x01, 0x00, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, + 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_ml_size = 25419; + +const uint8_t intl_ml[25419] = { + 0x01, 0xf2, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x6d, 0x6c, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x0e, + 0x7b, 0x31, 0x7d, 0x20, 0x7b, 0x30, 0x7d, 0x0a, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, 0x65, + 0x64, 0x69, 0x75, 0x6d, 0x08, 0x66, 0x75, 0x6c, + 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x02, 0x64, + 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, 0x08, 0x64, + 0x2c, 0x20, 0x45, 0x04, 0x45, 0x64, 0x10, 0x45, + 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x06, + 0x45, 0x68, 0x6d, 0x0e, 0x45, 0x20, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x06, 0x45, 0x48, 0x6d, 0x16, + 0x45, 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x61, 0x08, 0x45, 0x68, 0x6d, 0x73, + 0x14, 0x45, 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x08, 0x45, 0x48, 0x6d, 0x73, + 0x06, 0x47, 0x20, 0x79, 0x04, 0x47, 0x79, 0x0e, + 0x47, 0x20, 0x79, 0x20, 0x4d, 0x4d, 0x4d, 0x0a, + 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x12, 0x47, 0x20, + 0x79, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x0c, + 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x18, 0x47, + 0x20, 0x79, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x64, + 0x2c, 0x20, 0x45, 0x0e, 0x47, 0x79, 0x4d, 0x4d, + 0x4d, 0x45, 0x64, 0x06, 0x68, 0x20, 0x61, 0x02, + 0x68, 0x04, 0x48, 0x48, 0x02, 0x48, 0x0c, 0x68, + 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x04, 0x68, 0x6d, + 0x0a, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x04, 0x48, + 0x6d, 0x12, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x61, 0x06, 0x68, 0x6d, 0x73, 0x10, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x06, 0x48, 0x6d, 0x73, 0x16, 0x68, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x20, 0x76, + 0x08, 0x68, 0x6d, 0x73, 0x76, 0x14, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x76, + 0x08, 0x48, 0x6d, 0x73, 0x76, 0x10, 0x68, 0x3a, + 0x6d, 0x6d, 0x20, 0x61, 0x20, 0x76, 0x06, 0x68, + 0x6d, 0x76, 0x0e, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x20, 0x76, 0x06, 0x48, 0x6d, 0x76, 0x02, 0x4c, + 0x02, 0x4d, 0x06, 0x64, 0x2f, 0x4d, 0x04, 0x4d, + 0x64, 0x0c, 0x64, 0x2f, 0x4d, 0x2c, 0x20, 0x45, + 0x06, 0x4d, 0x45, 0x64, 0x0a, 0x64, 0x64, 0x2f, + 0x4d, 0x4d, 0x08, 0x4d, 0x4d, 0x64, 0x64, 0x06, + 0x4c, 0x4c, 0x4c, 0x06, 0x4d, 0x4d, 0x4d, 0x0a, + 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x08, 0x4d, 0x4d, + 0x4d, 0x64, 0x10, 0x4d, 0x4d, 0x4d, 0x20, 0x64, + 0x2c, 0x20, 0x45, 0x0a, 0x4d, 0x4d, 0x4d, 0x45, + 0x64, 0x0c, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x64, + 0x0a, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x12, 0x4d, + 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x2c, 0x20, 0x45, + 0x0c, 0x4d, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x04, 0x6d, 0x73, + 0x02, 0x79, 0x06, 0x4d, 0x2d, 0x79, 0x04, 0x79, + 0x4d, 0x0a, 0x64, 0x2f, 0x4d, 0x2f, 0x79, 0x06, + 0x79, 0x4d, 0x64, 0x10, 0x64, 0x2d, 0x4d, 0x2d, + 0x79, 0x2c, 0x20, 0x45, 0x08, 0x79, 0x4d, 0x45, + 0x64, 0x08, 0x4d, 0x4d, 0x2d, 0x79, 0x06, 0x79, + 0x4d, 0x4d, 0x0a, 0x79, 0x20, 0x4d, 0x4d, 0x4d, + 0x08, 0x79, 0x4d, 0x4d, 0x4d, 0x0e, 0x79, 0x20, + 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x0a, 0x79, 0x4d, + 0x4d, 0x4d, 0x64, 0x14, 0x79, 0x20, 0x4d, 0x4d, + 0x4d, 0x20, 0x64, 0x2c, 0x20, 0x45, 0x0c, 0x79, + 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0c, 0x79, 0x20, + 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, 0x79, 0x4d, 0x4d, + 0x4d, 0x4d, 0x0a, 0x79, 0x20, 0x51, 0x51, 0x51, + 0x08, 0x79, 0x51, 0x51, 0x51, 0x0c, 0x79, 0x20, + 0x51, 0x51, 0x51, 0x51, 0x0a, 0x79, 0x51, 0x51, + 0x51, 0x51, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, + 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x73, 0x1e, 0x79, 0x2c, 0x20, 0x4d, + 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x2c, 0x20, 0x45, + 0x45, 0x45, 0x45, 0x14, 0x79, 0x4d, 0x4d, 0x4d, + 0x4d, 0x45, 0x45, 0x45, 0x45, 0x64, 0x12, 0x79, + 0x2c, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x64, + 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x10, + 0x79, 0x2c, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x64, + 0x0c, 0x64, 0x2f, 0x4d, 0x2f, 0x79, 0x79, 0x16, + 0x64, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x73, 0x1c, 0x68, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x61, 0x20, 0x7a, 0x7a, + 0x7a, 0x7a, 0x12, 0x68, 0x6d, 0x6d, 0x73, 0x73, + 0x7a, 0x7a, 0x7a, 0x7a, 0x16, 0x68, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x20, 0x7a, + 0x08, 0x68, 0x6d, 0x73, 0x7a, 0x16, 0x74, 0x69, + 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x73, 0x0e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x73, 0x03, 0x1c, 0x0d, 0x03, 0x2b, 0x0d, 0x05, + 0x2e, 0x0d, 0x3e, 0x0d, 0x03, 0x0f, 0x0d, 0x05, + 0x2e, 0x0d, 0x46, 0x0d, 0x05, 0x1c, 0x0d, 0x42, + 0x0d, 0x03, 0x13, 0x0d, 0x03, 0x38, 0x0d, 0x03, + 0x12, 0x0d, 0x03, 0x28, 0x0d, 0x05, 0x21, 0x0d, + 0x3f, 0x0d, 0x0c, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x07, 0x1c, 0x0d, 0x28, 0x0d, 0x41, 0x0d, + 0x0d, 0x2b, 0x0d, 0x46, 0x0d, 0x2c, 0x0d, 0x4d, + 0x0d, 0x30, 0x0d, 0x41, 0x0d, 0x07, 0x2e, 0x0d, + 0x3e, 0x0d, 0x7c, 0x0d, 0x0b, 0x0f, 0x0d, 0x2a, + 0x0d, 0x4d, 0x0d, 0x30, 0x0d, 0x3f, 0x0d, 0x09, + 0x2e, 0x0d, 0x47, 0x0d, 0x2f, 0x0d, 0x4d, 0x0d, + 0x07, 0x1c, 0x0d, 0x42, 0x0d, 0x7a, 0x0d, 0x09, + 0x1c, 0x0d, 0x42, 0x0d, 0x32, 0x0d, 0x48, 0x0d, + 0x05, 0x13, 0x0d, 0x17, 0x0d, 0x11, 0x38, 0x0d, + 0x46, 0x0d, 0x2a, 0x0d, 0x4d, 0x0d, 0x31, 0x0d, + 0x4d, 0x0d, 0x31, 0x0d, 0x02, 0x0d, 0x0b, 0x12, + 0x0d, 0x15, 0x0d, 0x4d, 0x0d, 0x1f, 0x0d, 0x4b, + 0x0d, 0x07, 0x28, 0x0d, 0x35, 0x0d, 0x02, 0x0d, + 0x09, 0x21, 0x0d, 0x3f, 0x0d, 0x38, 0x0d, 0x02, + 0x0d, 0x0d, 0x1c, 0x0d, 0x28, 0x0d, 0x41, 0x0d, + 0x35, 0x0d, 0x30, 0x0d, 0x3f, 0x0d, 0x13, 0x2b, + 0x0d, 0x46, 0x0d, 0x2c, 0x0d, 0x4d, 0x0d, 0x30, + 0x0d, 0x41, 0x0d, 0x35, 0x0d, 0x30, 0x0d, 0x3f, + 0x0d, 0x0f, 0x2e, 0x0d, 0x3e, 0x0d, 0x7c, 0x0d, + 0x1a, 0x0d, 0x4d, 0x0d, 0x1a, 0x0d, 0x4d, 0x0d, + 0x0d, 0x0f, 0x0d, 0x2a, 0x0d, 0x4d, 0x0d, 0x30, + 0x0d, 0x3f, 0x0d, 0x7d, 0x0d, 0x11, 0x13, 0x0d, + 0x17, 0x0d, 0x38, 0x0d, 0x4d, 0x0d, 0x31, 0x0d, + 0x4d, 0x0d, 0x31, 0x0d, 0x4d, 0x0d, 0x15, 0x38, + 0x0d, 0x46, 0x0d, 0x2a, 0x0d, 0x4d, 0x0d, 0x31, + 0x0d, 0x4d, 0x0d, 0x31, 0x0d, 0x02, 0x0d, 0x2c, + 0x0d, 0x7c, 0x0d, 0x11, 0x12, 0x0d, 0x15, 0x0d, + 0x4d, 0x0d, 0x0c, 0x20, 0x1f, 0x0d, 0x4b, 0x0d, + 0x2c, 0x0d, 0x7c, 0x0d, 0x0b, 0x28, 0x0d, 0x35, + 0x0d, 0x02, 0x0d, 0x2c, 0x0d, 0x7c, 0x0d, 0x0d, + 0x21, 0x0d, 0x3f, 0x0d, 0x38, 0x0d, 0x02, 0x0d, + 0x2c, 0x0d, 0x7c, 0x0d, 0x0c, 0x6d, 0x6f, 0x6e, + 0x74, 0x68, 0x73, 0x03, 0x1e, 0x0d, 0x05, 0x24, + 0x0d, 0x3f, 0x0d, 0x05, 0x1a, 0x0d, 0x4a, 0x0d, + 0x05, 0x2c, 0x0d, 0x41, 0x0d, 0x09, 0x35, 0x0d, + 0x4d, 0x0d, 0x2f, 0x0d, 0x3e, 0x0d, 0x05, 0x35, + 0x0d, 0x46, 0x0d, 0x03, 0x36, 0x0d, 0x09, 0x1e, + 0x0d, 0x3e, 0x0d, 0x2f, 0x0d, 0x7c, 0x0d, 0x0d, + 0x24, 0x0d, 0x3f, 0x0d, 0x19, 0x0d, 0x4d, 0x0d, + 0x15, 0x0d, 0x7e, 0x0d, 0x0b, 0x1a, 0x0d, 0x4a, + 0x0d, 0x35, 0x0d, 0x4d, 0x0d, 0x35, 0x0d, 0x09, + 0x2c, 0x0d, 0x41, 0x0d, 0x27, 0x0d, 0x7b, 0x0d, + 0x0d, 0x35, 0x0d, 0x4d, 0x0d, 0x2f, 0x0d, 0x3e, + 0x0d, 0x34, 0x0d, 0x02, 0x0d, 0x0d, 0x35, 0x0d, + 0x46, 0x0d, 0x33, 0x0d, 0x4d, 0x0d, 0x33, 0x0d, + 0x3f, 0x0d, 0x07, 0x36, 0x0d, 0x28, 0x0d, 0x3f, + 0x0d, 0x13, 0x1e, 0x0d, 0x3e, 0x0d, 0x2f, 0x0d, + 0x31, 0x0d, 0x3e, 0x0d, 0x34, 0x0d, 0x4d, 0x0d, + 0x0c, 0x20, 0x1a, 0x0d, 0x17, 0x24, 0x0d, 0x3f, + 0x0d, 0x19, 0x0d, 0x4d, 0x0d, 0x15, 0x0d, 0x33, + 0x0d, 0x3e, 0x0d, 0x34, 0x0d, 0x4d, 0x0d, 0x0c, + 0x20, 0x1a, 0x0d, 0x13, 0x1a, 0x0d, 0x4a, 0x0d, + 0x35, 0x0d, 0x4d, 0x0d, 0x35, 0x0d, 0x3e, 0x0d, + 0x34, 0x0d, 0x4d, 0x0d, 0x1a, 0x0d, 0x13, 0x2c, + 0x0d, 0x41, 0x0d, 0x27, 0x0d, 0x28, 0x0d, 0x3e, + 0x0d, 0x34, 0x0d, 0x4d, 0x0d, 0x0c, 0x20, 0x1a, + 0x0d, 0x15, 0x35, 0x0d, 0x4d, 0x0d, 0x2f, 0x0d, + 0x3e, 0x0d, 0x34, 0x0d, 0x3e, 0x0d, 0x34, 0x0d, + 0x4d, 0x0d, 0x0c, 0x20, 0x1a, 0x0d, 0x19, 0x35, + 0x0d, 0x46, 0x0d, 0x33, 0x0d, 0x4d, 0x0d, 0x33, + 0x0d, 0x3f, 0x0d, 0x2f, 0x0d, 0x3e, 0x0d, 0x34, + 0x0d, 0x4d, 0x0d, 0x0c, 0x20, 0x1a, 0x0d, 0x13, + 0x36, 0x0d, 0x28, 0x0d, 0x3f, 0x0d, 0x2f, 0x0d, + 0x3e, 0x0d, 0x34, 0x0d, 0x4d, 0x0d, 0x0c, 0x20, + 0x1a, 0x0d, 0x08, 0x64, 0x61, 0x79, 0x73, 0x04, + 0x42, 0x45, 0x08, 0x65, 0x72, 0x61, 0x73, 0x04, + 0x41, 0x4d, 0x04, 0x61, 0x6d, 0x04, 0x50, 0x4d, + 0x04, 0x70, 0x6d, 0x14, 0x64, 0x61, 0x79, 0x50, + 0x65, 0x72, 0x69, 0x6f, 0x64, 0x73, 0x06, 0x4d, + 0x30, 0x31, 0x06, 0x4d, 0x30, 0x32, 0x06, 0x4d, + 0x30, 0x33, 0x06, 0x4d, 0x30, 0x34, 0x06, 0x4d, + 0x30, 0x35, 0x06, 0x4d, 0x30, 0x36, 0x06, 0x4d, + 0x30, 0x37, 0x06, 0x4d, 0x30, 0x38, 0x06, 0x4d, + 0x30, 0x39, 0x06, 0x4d, 0x31, 0x30, 0x06, 0x4d, + 0x31, 0x31, 0x06, 0x4d, 0x31, 0x32, 0x08, 0x54, + 0x6f, 0x75, 0x74, 0x08, 0x42, 0x61, 0x62, 0x61, + 0x0a, 0x48, 0x61, 0x74, 0x6f, 0x72, 0x0a, 0x4b, + 0x69, 0x61, 0x68, 0x6b, 0x08, 0x54, 0x6f, 0x62, + 0x61, 0x0c, 0x41, 0x6d, 0x73, 0x68, 0x69, 0x72, + 0x10, 0x42, 0x61, 0x72, 0x61, 0x6d, 0x68, 0x61, + 0x74, 0x12, 0x42, 0x61, 0x72, 0x61, 0x6d, 0x6f, + 0x75, 0x64, 0x61, 0x0e, 0x42, 0x61, 0x73, 0x68, + 0x61, 0x6e, 0x73, 0x0a, 0x50, 0x61, 0x6f, 0x6e, + 0x61, 0x08, 0x45, 0x70, 0x65, 0x70, 0x0a, 0x4d, + 0x65, 0x73, 0x72, 0x61, 0x0a, 0x4e, 0x61, 0x73, + 0x69, 0x65, 0x08, 0x45, 0x52, 0x41, 0x30, 0x08, + 0x45, 0x52, 0x41, 0x31, 0x10, 0x4d, 0x65, 0x73, + 0x6b, 0x65, 0x72, 0x65, 0x6d, 0x0c, 0x54, 0x65, + 0x6b, 0x65, 0x6d, 0x74, 0x0a, 0x48, 0x65, 0x64, + 0x61, 0x72, 0x0c, 0x54, 0x61, 0x68, 0x73, 0x61, + 0x73, 0x06, 0x54, 0x65, 0x72, 0x0e, 0x59, 0x65, + 0x6b, 0x61, 0x74, 0x69, 0x74, 0x0e, 0x4d, 0x65, + 0x67, 0x61, 0x62, 0x69, 0x74, 0x0c, 0x4d, 0x69, + 0x61, 0x7a, 0x69, 0x61, 0x0c, 0x47, 0x65, 0x6e, + 0x62, 0x6f, 0x74, 0x08, 0x53, 0x65, 0x6e, 0x65, + 0x0a, 0x48, 0x61, 0x6d, 0x6c, 0x65, 0x0e, 0x4e, + 0x65, 0x68, 0x61, 0x73, 0x73, 0x65, 0x0e, 0x50, + 0x61, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x11, 0x15, + 0x0d, 0x4d, 0x0d, 0x30, 0x0d, 0x3f, 0x0d, 0x2e, + 0x00, 0x2e, 0x0d, 0x41, 0x0d, 0x2e, 0x00, 0x07, + 0x0e, 0x0d, 0x21, 0x0d, 0x3f, 0x0d, 0x0b, 0x2c, + 0x0d, 0x3f, 0x0d, 0x38, 0x0d, 0x3f, 0x0d, 0x07, + 0x0d, 0x07, 0x38, 0x0d, 0x3f, 0x0d, 0x07, 0x0d, + 0x29, 0x15, 0x0d, 0x4d, 0x0d, 0x30, 0x0d, 0x3f, + 0x0d, 0x38, 0x0d, 0x4d, 0x0d, 0x0c, 0x20, 0x24, + 0x0d, 0x41, 0x0d, 0x35, 0x0d, 0x3f, 0x0d, 0x28, + 0x0d, 0x4d, 0x0d, 0x20, 0x00, 0x2e, 0x0d, 0x41, + 0x0d, 0x2e, 0x0d, 0x4d, 0x0d, 0x2a, 0x0d, 0x4d, + 0x0d, 0x19, 0x06, 0x0d, 0x28, 0x0d, 0x4d, 0x0d, + 0x28, 0x0d, 0x4b, 0x0d, 0x20, 0x00, 0x21, 0x0d, + 0x4a, 0x0d, 0x2e, 0x0d, 0x3f, 0x0d, 0x28, 0x0d, + 0x3f, 0x0d, 0x11, 0x2c, 0x0d, 0x3f, 0x0d, 0x2e, + 0x00, 0x38, 0x0d, 0x3f, 0x0d, 0x2e, 0x00, 0x07, + 0x0d, 0x2e, 0x00, 0x0b, 0x38, 0x0d, 0x3f, 0x0d, + 0x2e, 0x00, 0x07, 0x0d, 0x2e, 0x00, 0x0c, 0x54, + 0x69, 0x73, 0x68, 0x72, 0x69, 0x0e, 0x48, 0x65, + 0x73, 0x68, 0x76, 0x61, 0x6e, 0x0c, 0x4b, 0x69, + 0x73, 0x6c, 0x65, 0x76, 0x0a, 0x54, 0x65, 0x76, + 0x65, 0x74, 0x0c, 0x53, 0x68, 0x65, 0x76, 0x61, + 0x74, 0x0c, 0x41, 0x64, 0x61, 0x72, 0x20, 0x49, + 0x08, 0x41, 0x64, 0x61, 0x72, 0x0a, 0x4e, 0x69, + 0x73, 0x61, 0x6e, 0x08, 0x49, 0x79, 0x61, 0x72, + 0x0a, 0x53, 0x69, 0x76, 0x61, 0x6e, 0x0a, 0x54, + 0x61, 0x6d, 0x75, 0x7a, 0x04, 0x41, 0x76, 0x08, + 0x45, 0x6c, 0x75, 0x6c, 0x0e, 0x41, 0x64, 0x61, + 0x72, 0x20, 0x49, 0x49, 0x05, 0x1a, 0x0d, 0x48, + 0x0d, 0x05, 0x35, 0x0d, 0x48, 0x0d, 0x09, 0x1c, + 0x0d, 0x4d, 0x0d, 0x2f, 0x0d, 0x47, 0x0d, 0x03, + 0x06, 0x0d, 0x09, 0x36, 0x0d, 0x4d, 0x0d, 0x30, + 0x0d, 0x3e, 0x0d, 0x05, 0x2d, 0x0d, 0x3e, 0x0d, + 0x05, 0x15, 0x0d, 0x3e, 0x0d, 0x05, 0x2a, 0x0d, + 0x57, 0x0d, 0x0d, 0x1a, 0x0d, 0x48, 0x0d, 0x24, + 0x0d, 0x4d, 0x0d, 0x30, 0x0d, 0x02, 0x0d, 0x0d, + 0x35, 0x0d, 0x48, 0x0d, 0x36, 0x0d, 0x3e, 0x0d, + 0x16, 0x0d, 0x02, 0x0d, 0x11, 0x1c, 0x0d, 0x4d, + 0x0d, 0x2f, 0x0d, 0x47, 0x0d, 0x37, 0x0d, 0x4d, + 0x0d, 0x20, 0x0d, 0x02, 0x0d, 0x0b, 0x06, 0x0d, + 0x37, 0x0d, 0x3e, 0x0d, 0x22, 0x0d, 0x02, 0x0d, + 0x0f, 0x36, 0x0d, 0x4d, 0x0d, 0x30, 0x0d, 0x3e, + 0x0d, 0x35, 0x0d, 0x23, 0x0d, 0x02, 0x0d, 0x13, + 0x2d, 0x0d, 0x3e, 0x0d, 0x26, 0x0d, 0x4d, 0x0d, + 0x30, 0x0d, 0x2a, 0x0d, 0x3e, 0x0d, 0x26, 0x0d, + 0x02, 0x0d, 0x0f, 0x06, 0x0d, 0x36, 0x0d, 0x4d, + 0x0d, 0x35, 0x0d, 0x3f, 0x0d, 0x28, 0x0d, 0x02, + 0x0d, 0x13, 0x15, 0x0d, 0x3e, 0x0d, 0x7c, 0x0d, + 0x24, 0x0d, 0x4d, 0x0d, 0x24, 0x0d, 0x3f, 0x0d, + 0x15, 0x0d, 0x02, 0x0d, 0x13, 0x2e, 0x0d, 0x3e, + 0x0d, 0x7c, 0x0d, 0x17, 0x0d, 0x36, 0x0d, 0x40, + 0x0d, 0x7c, 0x0d, 0x37, 0x0d, 0x02, 0x0d, 0x09, + 0x2a, 0x0d, 0x57, 0x0d, 0x37, 0x0d, 0x02, 0x0d, + 0x09, 0x2e, 0x0d, 0x3e, 0x0d, 0x18, 0x0d, 0x02, + 0x0d, 0x0d, 0x2b, 0x0d, 0x7d, 0x0d, 0x17, 0x0d, + 0x41, 0x0d, 0x28, 0x0d, 0x02, 0x0d, 0x05, 0x36, + 0x0d, 0x15, 0x0d, 0x05, 0x2e, 0x0d, 0x41, 0x0d, + 0x03, 0x31, 0x0d, 0x05, 0x26, 0x0d, 0x41, 0x0d, + 0x08, 0x4d, 0x75, 0x68, 0x2e, 0x08, 0x53, 0x61, + 0x66, 0x2e, 0x0c, 0x52, 0x61, 0x62, 0x2e, 0x20, + 0x49, 0x0e, 0x52, 0x61, 0x62, 0x2e, 0x20, 0x49, + 0x49, 0x0c, 0x4a, 0x75, 0x6d, 0x2e, 0x20, 0x49, + 0x0e, 0x4a, 0x75, 0x6d, 0x2e, 0x20, 0x49, 0x49, + 0x08, 0x52, 0x61, 0x6a, 0x2e, 0x08, 0x53, 0x68, + 0x61, 0x2e, 0x08, 0x52, 0x61, 0x6d, 0x2e, 0x0a, + 0x53, 0x68, 0x61, 0x77, 0x2e, 0x11, 0x44, 0x00, + 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, + 0x2d, 0x00, 0x51, 0x00, 0x2e, 0x00, 0x11, 0x44, + 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, + 0x00, 0x2d, 0x00, 0x48, 0x00, 0x2e, 0x00, 0x0b, + 0x2e, 0x0d, 0x41, 0x0d, 0x39, 0x0d, 0x31, 0x0d, + 0x02, 0x0d, 0x07, 0x38, 0x0d, 0x2b, 0x0d, 0x7c, + 0x0d, 0x19, 0x31, 0x0d, 0x2c, 0x0d, 0x40, 0x0d, + 0x39, 0x0d, 0x41, 0x0d, 0x7d, 0x0d, 0x20, 0x00, + 0x05, 0x0d, 0x35, 0x0d, 0x4d, 0x0d, 0x35, 0x0d, + 0x7d, 0x0d, 0x17, 0x31, 0x0d, 0x2c, 0x0d, 0x40, + 0x0d, 0x39, 0x0d, 0x41, 0x0d, 0x7d, 0x0d, 0x20, + 0x00, 0x06, 0x0d, 0x16, 0x0d, 0x3f, 0x0d, 0x7c, + 0x0d, 0x19, 0x1c, 0x0d, 0x2e, 0x0d, 0x3e, 0x0d, + 0x26, 0x0d, 0x41, 0x0d, 0x7d, 0x0d, 0x20, 0x00, + 0x05, 0x0d, 0x35, 0x0d, 0x4d, 0x0d, 0x35, 0x0d, + 0x7d, 0x0d, 0x17, 0x1c, 0x0d, 0x2e, 0x0d, 0x3e, + 0x0d, 0x26, 0x0d, 0x41, 0x0d, 0x7d, 0x0d, 0x20, + 0x00, 0x06, 0x0d, 0x16, 0x0d, 0x3f, 0x0d, 0x7c, + 0x0d, 0x09, 0x31, 0x0d, 0x1c, 0x0d, 0x2c, 0x0d, + 0x4d, 0x0d, 0x0b, 0x36, 0x0d, 0x39, 0x0d, 0x2c, + 0x0d, 0x3e, 0x0d, 0x7b, 0x0d, 0x0b, 0x31, 0x0d, + 0x2e, 0x0d, 0x33, 0x0d, 0x3e, 0x0d, 0x7b, 0x0d, + 0x0d, 0x36, 0x0d, 0x35, 0x0d, 0x4d, 0x0d, 0x35, + 0x0d, 0x3e, 0x0d, 0x7d, 0x0d, 0x11, 0x26, 0x0d, + 0x41, 0x0d, 0x7d, 0x0d, 0x20, 0x00, 0x16, 0x0d, + 0x39, 0x0d, 0x26, 0x0d, 0x4d, 0x0d, 0x13, 0x26, + 0x0d, 0x41, 0x0d, 0x7d, 0x0d, 0x20, 0x00, 0x39, + 0x0d, 0x3f, 0x0d, 0x1c, 0x0d, 0x4d, 0x0d, 0x1c, + 0x0d, 0x09, 0x39, 0x0d, 0x3f, 0x0d, 0x1c, 0x0d, + 0x31, 0x0d, 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x36, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x36, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, + 0x68, 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x54, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x1d, 0x57, 0x00, 0x61, + 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x1f, 0x52, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x1d, 0x59, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x37, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x2d, 0x00, 0x6b, 0x00, 0x61, 0x00, + 0x6d, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x2d, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x2b, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x2d, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, 0x2a, + 0x4a, 0x69, 0x6e, 0x67, 0x6f, 0x2d, 0x6b, 0x65, + 0x69, 0x75, 0x6e, 0x20, 0x28, 0x37, 0x36, 0x37, + 0x2d, 0x37, 0x37, 0x30, 0x29, 0x1d, 0x48, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x1f, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x2d, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x2d, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x38, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x1f, 0x44, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1d, 0x4a, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x1d, 0x4b, 0x00, 0x61, 0x00, 0x6a, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1f, 0x53, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x20, 0x54, 0x65, 0x6e, 0x2d, + 0x61, 0x6e, 0x20, 0x28, 0x38, 0x35, 0x37, 0x2d, + 0x38, 0x35, 0x39, 0x29, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x74, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x1f, 0x45, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1b, 0x4c, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x1d, 0x41, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x1f, 0x45, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x1d, 0x45, 0x00, 0x69, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, + 0x69, 0x00, 0x73, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x39, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4a, + 0x00, 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x35, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, 0x4a, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x29, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4c, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x4a, + 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, 0x24, + 0x54, 0x65, 0x6e, 0x2d, 0x65, 0x69, 0x20, 0x28, + 0x31, 0x31, 0x31, 0x30, 0x2d, 0x31, 0x31, 0x31, + 0x33, 0x29, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x44, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x48, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x48, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x27, 0x45, 0x00, 0x69, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x68, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x6d, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x61, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x69, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x59, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x21, 0x4a, 0x00, 0x75, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x29, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x29, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, + 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x41, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, + 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x29, 0x00, 0x27, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x75, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x29, 0x52, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x4e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x4c, 0x01, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6d, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, + 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, + 0x4c, 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x74, + 0x00, 0x73, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x27, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x21, 0x4c, 0x01, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, + 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x21, 0x4d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, + 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x72, 0x00, + 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4d, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, 0x45, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, + 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x48, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x65, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, + 0x41, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x02, 0x54, 0x02, + 0x53, 0x0a, 0x4d, 0x65, 0x69, 0x6a, 0x69, 0x0d, + 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x0b, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x0c, + 0x48, 0x65, 0x69, 0x73, 0x65, 0x69, 0x12, 0x46, + 0x61, 0x72, 0x76, 0x61, 0x72, 0x64, 0x69, 0x6e, + 0x16, 0x4f, 0x72, 0x64, 0x69, 0x62, 0x65, 0x68, + 0x65, 0x73, 0x68, 0x74, 0x0e, 0x4b, 0x68, 0x6f, + 0x72, 0x64, 0x61, 0x64, 0x06, 0x54, 0x69, 0x72, + 0x0c, 0x4d, 0x6f, 0x72, 0x64, 0x61, 0x64, 0x12, + 0x53, 0x68, 0x61, 0x68, 0x72, 0x69, 0x76, 0x61, + 0x72, 0x08, 0x4d, 0x65, 0x68, 0x72, 0x08, 0x41, + 0x62, 0x61, 0x6e, 0x08, 0x41, 0x7a, 0x61, 0x72, + 0x06, 0x44, 0x65, 0x79, 0x0c, 0x42, 0x61, 0x68, + 0x6d, 0x61, 0x6e, 0x0c, 0x45, 0x73, 0x66, 0x61, + 0x6e, 0x64, 0x04, 0x41, 0x50, 0x1a, 0x42, 0x65, + 0x66, 0x6f, 0x72, 0x65, 0x20, 0x52, 0x2e, 0x4f, + 0x2e, 0x43, 0x2e, 0x0c, 0x52, 0x2e, 0x4f, 0x2e, + 0x43, 0x2e, 0x12, 0x63, 0x61, 0x6c, 0x65, 0x6e, + 0x64, 0x61, 0x72, 0x73, 0x08, 0x64, 0x61, 0x74, + 0x65, 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, + 0x75, 0x10, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0x1e, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, + 0x72, 0x6e, 0x26, 0x7b, 0x6d, 0x69, 0x6e, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x6e, + 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, + 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x0e, 0x64, + 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x24, 0x7b, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, + 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0x3a, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x10, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, + 0x2a, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, + 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x40, 0x7b, + 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, + 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x0e, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x10, + 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, + 0x02, 0x2e, 0x02, 0x2c, 0x0a, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x06, 0x4e, 0x61, 0x4e, 0x06, 0x6e, + 0x61, 0x6e, 0x02, 0x2b, 0x10, 0x70, 0x6c, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, 0x2d, 0x12, + 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x02, 0x25, 0x16, 0x70, 0x65, 0x72, 0x63, + 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x03, + 0x1e, 0x22, 0x10, 0x69, 0x6e, 0x66, 0x69, 0x6e, + 0x69, 0x74, 0x79, 0x13, 0x38, 0x0d, 0x02, 0x0d, + 0x16, 0x0d, 0x4d, 0x0d, 0x2f, 0x0d, 0x2f, 0x0d, + 0x32, 0x0d, 0x4d, 0x0d, 0x32, 0x0d, 0x08, 0x6d, + 0x6c, 0x79, 0x6d, 0x0e, 0x73, 0x79, 0x6d, 0x62, + 0x6f, 0x6c, 0x73, 0x04, 0x41, 0x24, 0x06, 0x41, + 0x55, 0x44, 0x04, 0x52, 0x24, 0x06, 0x42, 0x52, + 0x4c, 0x06, 0x43, 0x41, 0x24, 0x06, 0x43, 0x41, + 0x44, 0x06, 0x43, 0x4e, 0xa5, 0x06, 0x43, 0x4e, + 0x59, 0x03, 0xac, 0x20, 0x06, 0x45, 0x55, 0x52, + 0x02, 0xa3, 0x06, 0x47, 0x42, 0x50, 0x06, 0x48, + 0x4b, 0x24, 0x06, 0x48, 0x4b, 0x44, 0x03, 0xaa, + 0x20, 0x06, 0x49, 0x4c, 0x53, 0x03, 0xb9, 0x20, + 0x06, 0x49, 0x4e, 0x52, 0x02, 0xa5, 0x06, 0x4a, + 0x50, 0x59, 0x03, 0xa9, 0x20, 0x06, 0x4b, 0x52, + 0x57, 0x06, 0x4d, 0x58, 0x24, 0x06, 0x4d, 0x58, + 0x4e, 0x06, 0x4e, 0x5a, 0x24, 0x06, 0x4e, 0x5a, + 0x44, 0x03, 0x3f, 0x0e, 0x06, 0x54, 0x48, 0x42, + 0x06, 0x4e, 0x54, 0x24, 0x06, 0x54, 0x57, 0x44, + 0x02, 0x24, 0x06, 0x55, 0x53, 0x44, 0x03, 0xab, + 0x20, 0x06, 0x56, 0x4e, 0x44, 0x08, 0x46, 0x43, + 0x46, 0x41, 0x06, 0x58, 0x41, 0x46, 0x06, 0x45, + 0x43, 0x24, 0x06, 0x58, 0x43, 0x44, 0x06, 0x43, + 0x46, 0x41, 0x06, 0x58, 0x4f, 0x46, 0x08, 0x43, + 0x46, 0x50, 0x46, 0x06, 0x58, 0x50, 0x46, 0x14, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, + 0x65, 0x73, 0x52, 0x6e, 0x6f, 0x64, 0x65, 0x5f, + 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, + 0x69, 0x6e, 0x74, 0x6c, 0x2f, 0x6c, 0x6f, 0x63, + 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, + 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x70, 0x2f, 0x6d, + 0x6c, 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, + 0x9e, 0x01, 0x00, 0x01, 0x00, 0x27, 0x00, 0x65, + 0xb4, 0x6c, 0x01, 0xa0, 0x01, 0x00, 0x00, 0x00, + 0x39, 0xd0, 0x00, 0x00, 0x00, 0x43, 0xd1, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd2, 0x00, 0x00, 0x00, + 0x4d, 0xd3, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd4, + 0x00, 0x00, 0x00, 0x04, 0xd5, 0x00, 0x00, 0x00, + 0x04, 0xd6, 0x00, 0x00, 0x00, 0x04, 0xd7, 0x00, + 0x00, 0x00, 0x04, 0xd8, 0x00, 0x00, 0x00, 0x04, + 0xd9, 0x00, 0x00, 0x00, 0x04, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xdb, 0x00, 0x00, 0x00, 0x04, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, + 0x04, 0xde, 0x00, 0x00, 0x00, 0x04, 0xdf, 0x00, + 0x00, 0x00, 0x04, 0xe0, 0x00, 0x00, 0x00, 0x04, + 0xe1, 0x00, 0x00, 0x00, 0x04, 0xe2, 0x00, 0x00, + 0x00, 0x26, 0x0f, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x00, 0x0a, 0x4d, 0xe4, 0x00, 0x00, 0x00, 0x0a, + 0x4d, 0xe5, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, + 0x00, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe8, 0x00, + 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, + 0xe9, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0xed, + 0x00, 0x00, 0x00, 0x04, 0xee, 0x00, 0x00, 0x00, + 0x4d, 0xef, 0x00, 0x00, 0x00, 0x04, 0xf0, 0x00, + 0x00, 0x00, 0x4d, 0xf1, 0x00, 0x00, 0x00, 0x04, + 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xf3, 0x00, 0x00, + 0x00, 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xf5, + 0x00, 0x00, 0x00, 0x04, 0xf6, 0x00, 0x00, 0x00, + 0x4d, 0xf7, 0x00, 0x00, 0x00, 0x04, 0xf8, 0x00, + 0x00, 0x00, 0x4d, 0xf9, 0x00, 0x00, 0x00, 0x04, + 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xfb, 0x00, 0x00, + 0x00, 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xfd, + 0x00, 0x00, 0x00, 0x04, 0xfe, 0x00, 0x00, 0x00, + 0x4d, 0xff, 0x00, 0x00, 0x00, 0x04, 0x00, 0x01, + 0x00, 0x00, 0x4d, 0x01, 0x01, 0x00, 0x00, 0x04, + 0x02, 0x01, 0x00, 0x00, 0x4d, 0x03, 0x01, 0x00, + 0x00, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0x05, + 0x01, 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, 0x00, + 0x4d, 0x07, 0x01, 0x00, 0x00, 0x04, 0x08, 0x01, + 0x00, 0x00, 0x4d, 0x09, 0x01, 0x00, 0x00, 0x04, + 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x0b, 0x01, 0x00, + 0x00, 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, 0x0d, + 0x01, 0x00, 0x00, 0x04, 0x0e, 0x01, 0x00, 0x00, + 0x4d, 0x0f, 0x01, 0x00, 0x00, 0x04, 0x10, 0x01, + 0x00, 0x00, 0x4d, 0x11, 0x01, 0x00, 0x00, 0x04, + 0x12, 0x01, 0x00, 0x00, 0x4d, 0x13, 0x01, 0x00, + 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, 0x15, + 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x4d, 0x17, 0x01, 0x00, 0x00, 0x04, 0x18, 0x01, + 0x00, 0x00, 0x4d, 0x19, 0x01, 0x00, 0x00, 0x04, + 0x1a, 0x01, 0x00, 0x00, 0x4d, 0x1b, 0x01, 0x00, + 0x00, 0x04, 0x1c, 0x01, 0x00, 0x00, 0x4d, 0x1d, + 0x01, 0x00, 0x00, 0x04, 0x1e, 0x01, 0x00, 0x00, + 0x4d, 0x1f, 0x01, 0x00, 0x00, 0x04, 0x20, 0x01, + 0x00, 0x00, 0x4d, 0x21, 0x01, 0x00, 0x00, 0x04, + 0x22, 0x01, 0x00, 0x00, 0x4d, 0x23, 0x01, 0x00, + 0x00, 0x04, 0x24, 0x01, 0x00, 0x00, 0x4d, 0x25, + 0x01, 0x00, 0x00, 0x04, 0x26, 0x01, 0x00, 0x00, + 0x4d, 0x27, 0x01, 0x00, 0x00, 0x04, 0x28, 0x01, + 0x00, 0x00, 0x4d, 0x28, 0x01, 0x00, 0x00, 0x04, + 0x29, 0x01, 0x00, 0x00, 0x4d, 0x2a, 0x01, 0x00, + 0x00, 0x04, 0x2b, 0x01, 0x00, 0x00, 0x4d, 0x2c, + 0x01, 0x00, 0x00, 0x04, 0x2d, 0x01, 0x00, 0x00, + 0x4d, 0x2e, 0x01, 0x00, 0x00, 0x04, 0x2f, 0x01, + 0x00, 0x00, 0x4d, 0x30, 0x01, 0x00, 0x00, 0x04, + 0x31, 0x01, 0x00, 0x00, 0x4d, 0x32, 0x01, 0x00, + 0x00, 0x04, 0x33, 0x01, 0x00, 0x00, 0x4d, 0x34, + 0x01, 0x00, 0x00, 0x04, 0x35, 0x01, 0x00, 0x00, + 0x4d, 0x36, 0x01, 0x00, 0x00, 0x04, 0x37, 0x01, + 0x00, 0x00, 0x4d, 0x38, 0x01, 0x00, 0x00, 0x04, + 0x39, 0x01, 0x00, 0x00, 0x4d, 0x3a, 0x01, 0x00, + 0x00, 0x04, 0x3b, 0x01, 0x00, 0x00, 0x4d, 0x3c, + 0x01, 0x00, 0x00, 0x4d, 0x3d, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x3e, 0x01, 0x00, 0x00, 0x4d, 0x3f, + 0x01, 0x00, 0x00, 0x04, 0x40, 0x01, 0x00, 0x00, + 0x4d, 0x41, 0x01, 0x00, 0x00, 0x04, 0x42, 0x01, + 0x00, 0x00, 0x4d, 0x34, 0x01, 0x00, 0x00, 0x04, + 0x43, 0x01, 0x00, 0x00, 0x4d, 0x2c, 0x01, 0x00, + 0x00, 0x4d, 0x44, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x45, 0x01, 0x00, 0x00, 0x4d, 0x46, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x4d, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x08, 0x01, 0x00, 0x00, + 0x4d, 0x09, 0x01, 0x00, 0x00, 0x04, 0x04, 0x01, + 0x00, 0x00, 0x4d, 0x05, 0x01, 0x00, 0x00, 0x4d, + 0x49, 0x01, 0x00, 0x00, 0x4d, 0x4a, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x0b, 0x04, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x6c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x82, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x85, 0x01, 0x00, 0x00, 0x4d, + 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, + 0x00, 0x4d, 0x88, 0x01, 0x00, 0x00, 0x4d, 0x89, + 0x01, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x00, 0xbe, 0x01, 0xbe, 0x02, + 0xbe, 0x03, 0xbe, 0x04, 0xbe, 0x05, 0xbe, 0x06, + 0xbe, 0x07, 0xbe, 0x08, 0xbe, 0x09, 0xbe, 0x0a, + 0xbe, 0x0b, 0x26, 0x0c, 0x00, 0x4d, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, + 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, + 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, + 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, + 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, + 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, + 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, + 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x8a, + 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, + 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, + 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, + 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, + 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, + 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, + 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x6c, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, + 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x4d, 0x86, 0x01, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x4d, 0x88, + 0x01, 0x00, 0x00, 0x4d, 0x89, 0x01, 0x00, 0x00, + 0x4d, 0xd6, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x0c, 0xbe, 0x0d, 0xbe, 0x0e, 0xbe, 0x0f, 0xbe, + 0x10, 0xbe, 0x11, 0xbe, 0x12, 0xbe, 0x13, 0xbe, + 0x14, 0xbe, 0x15, 0xbe, 0x16, 0xbe, 0x17, 0xbe, + 0x18, 0x26, 0x0d, 0x00, 0x4d, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, + 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, + 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, + 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, + 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, + 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, + 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, + 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, + 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, + 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, + 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, + 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, + 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, + 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, + 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x6c, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, + 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x56, 0x01, + 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, + 0xa4, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, + 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x84, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x85, 0x01, 0x00, + 0x00, 0x4d, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, + 0x01, 0x00, 0x00, 0x4d, 0x88, 0x01, 0x00, 0x00, + 0x4d, 0x89, 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x19, 0xbe, 0x1a, + 0xbe, 0x1b, 0xbe, 0x1c, 0xbe, 0x1d, 0xbe, 0x1e, + 0xbe, 0x1f, 0xbe, 0x20, 0xbe, 0x21, 0xbe, 0x22, + 0xbe, 0x23, 0xbe, 0x24, 0x26, 0x0c, 0x00, 0x4d, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, + 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, + 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, + 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, + 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, + 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, + 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, + 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, + 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, + 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, + 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, + 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, + 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, + 0x95, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6c, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x85, 0x01, 0x00, 0x00, 0x4d, 0x86, + 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, + 0x4d, 0x88, 0x01, 0x00, 0x00, 0x4d, 0x89, 0x01, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x25, 0xbe, 0x26, 0xbe, 0x27, 0xbe, + 0x28, 0xbe, 0x29, 0xbe, 0x2a, 0xbe, 0x2b, 0xbe, + 0x2c, 0xbe, 0x2d, 0xbe, 0x2e, 0xbe, 0x2f, 0xbe, + 0x30, 0xbe, 0x31, 0x26, 0x0d, 0x00, 0x4d, 0x56, + 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, + 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, + 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, + 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, + 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, + 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, + 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, + 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, + 0xb1, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, + 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, + 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, + 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, + 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, + 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, + 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, + 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, + 0x04, 0xb1, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6c, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, + 0x81, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, + 0xa4, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0x56, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, + 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa3, + 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x84, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x85, + 0x01, 0x00, 0x00, 0x4d, 0x86, 0x01, 0x00, 0x00, + 0x04, 0x87, 0x01, 0x00, 0x00, 0x4d, 0x88, 0x01, + 0x00, 0x00, 0x4d, 0x89, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x32, + 0xbe, 0x33, 0xbe, 0x34, 0xbe, 0x35, 0xbe, 0x36, + 0xbe, 0x37, 0xbe, 0x38, 0xbe, 0x39, 0xbe, 0x3a, + 0xbe, 0x3b, 0xbe, 0x3c, 0xbe, 0x3d, 0xbe, 0x3e, + 0x26, 0x0d, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, + 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, + 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, + 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, + 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, + 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, + 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, + 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, + 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, + 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, + 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, + 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, + 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, 0xae, + 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, + 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x6c, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, + 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xa3, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x56, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x84, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x85, 0x01, 0x00, + 0x00, 0x4d, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, + 0x01, 0x00, 0x00, 0x4d, 0x88, 0x01, 0x00, 0x00, + 0x4d, 0x89, 0x01, 0x00, 0x00, 0x4d, 0xd9, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x3f, 0xbe, 0x40, + 0xbe, 0x41, 0xbe, 0x42, 0xbe, 0x43, 0xbe, 0x44, + 0xbe, 0x45, 0xbe, 0x46, 0xbe, 0x47, 0xbe, 0x48, + 0xbe, 0x49, 0xbe, 0x4a, 0x26, 0x0c, 0x00, 0x4d, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, + 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, + 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, + 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, + 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, + 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, + 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, + 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, + 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, + 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, + 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, + 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, + 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, + 0x95, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6c, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x56, + 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, + 0x04, 0xa4, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa3, 0x01, + 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x84, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x4d, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x4d, 0x88, 0x01, 0x00, + 0x00, 0x4d, 0x89, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x6c, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, + 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x82, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xb2, + 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, + 0x04, 0xb4, 0x01, 0x00, 0x00, 0x04, 0xb5, 0x01, + 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, 0x56, 0x01, + 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, + 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, + 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, 0x26, 0x04, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xb6, + 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, + 0x04, 0xb8, 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, + 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x85, 0x01, 0x00, 0x00, 0x4d, 0x86, 0x01, + 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x4d, + 0x88, 0x01, 0x00, 0x00, 0x4d, 0x89, 0x01, 0x00, + 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x4b, 0xbe, 0x4c, 0xbe, 0x4d, 0xbe, 0x4e, + 0xbe, 0x4f, 0xbe, 0x50, 0xbe, 0x51, 0xbe, 0x52, + 0xbe, 0x53, 0xbe, 0x54, 0xbe, 0x55, 0xbe, 0x56, + 0xbe, 0x57, 0xbe, 0x58, 0x26, 0x0e, 0x00, 0x4d, + 0x56, 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, + 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, + 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, + 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, + 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, 0x04, + 0xc1, 0x01, 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, + 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, 0x04, 0xc4, + 0x01, 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, + 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, + 0x00, 0x00, 0x26, 0x0e, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, 0x04, + 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, + 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, 0x04, 0xbe, + 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, + 0x04, 0xc0, 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, + 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, 0x00, 0x04, + 0xc3, 0x01, 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, + 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, + 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, + 0x26, 0x0e, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x6c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x82, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x85, 0x01, 0x00, 0x00, 0x4d, + 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, + 0x00, 0x4d, 0x88, 0x01, 0x00, 0x00, 0x4d, 0x89, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, + 0xc9, 0x01, 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, + 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, + 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, + 0x04, 0xcb, 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0xcf, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0xd0, + 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, + 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, + 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, + 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, + 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, 0xd8, + 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, + 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, + 0xd1, 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, + 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, + 0x01, 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, + 0x04, 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, + 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, + 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, + 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6c, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x04, 0x81, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x82, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xdc, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0xdc, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xdc, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x85, 0x01, 0x00, 0x00, 0x4d, 0x86, 0x01, + 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x4d, + 0x88, 0x01, 0x00, 0x00, 0x4d, 0x89, 0x01, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, + 0xde, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0xde, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, + 0xdf, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0x56, 0x01, 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, + 0x00, 0x04, 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, + 0x01, 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, + 0x04, 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, + 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, + 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, + 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, + 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, + 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, + 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, + 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, + 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, + 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, + 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, + 0xf7, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6c, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0xf8, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x84, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x85, + 0x01, 0x00, 0x00, 0x4d, 0x86, 0x01, 0x00, 0x00, + 0x04, 0x87, 0x01, 0x00, 0x00, 0x4d, 0x88, 0x01, + 0x00, 0x00, 0x4d, 0x89, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xdd, + 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0xde, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x56, 0x01, + 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, + 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, + 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, + 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, + 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, + 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, + 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, + 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xec, + 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, + 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, + 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, + 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, + 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, + 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, + 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x6c, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, + 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xf8, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x56, 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x84, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x85, 0x01, 0x00, + 0x00, 0x4d, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, + 0x01, 0x00, 0x00, 0x4d, 0x88, 0x01, 0x00, 0x00, + 0x4d, 0x89, 0x01, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x6c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x82, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xf9, 0x01, + 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, + 0xfb, 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, + 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, + 0x01, 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, + 0x04, 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, + 0x00, 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, 0x04, + 0x03, 0x02, 0x00, 0x00, 0x04, 0x04, 0x02, 0x00, + 0x00, 0x04, 0x05, 0x02, 0x00, 0x00, 0x04, 0x06, + 0x02, 0x00, 0x00, 0x04, 0x07, 0x02, 0x00, 0x00, + 0x04, 0x08, 0x02, 0x00, 0x00, 0x04, 0x09, 0x02, + 0x00, 0x00, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x04, + 0x0b, 0x02, 0x00, 0x00, 0x04, 0x0c, 0x02, 0x00, + 0x00, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x04, 0x0e, + 0x02, 0x00, 0x00, 0x04, 0x0f, 0x02, 0x00, 0x00, + 0x04, 0x10, 0x02, 0x00, 0x00, 0x04, 0x11, 0x02, + 0x00, 0x00, 0x04, 0x12, 0x02, 0x00, 0x00, 0x04, + 0x13, 0x02, 0x00, 0x00, 0x04, 0x14, 0x02, 0x00, + 0x00, 0x04, 0x15, 0x02, 0x00, 0x00, 0x04, 0x16, + 0x02, 0x00, 0x00, 0x04, 0x17, 0x02, 0x00, 0x00, + 0x04, 0x18, 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, + 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, + 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, + 0x21, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, + 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0x1c, + 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, + 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, + 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, + 0x25, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, + 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0x20, + 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, + 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, + 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, + 0x29, 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, + 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x24, + 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, + 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, + 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, + 0x2d, 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, + 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x28, + 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, + 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, + 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, + 0x31, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, + 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x2c, + 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, + 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, + 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, + 0x35, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, + 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x30, + 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, + 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, + 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, + 0x39, 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, + 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x34, + 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, + 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, + 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, + 0x3d, 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, + 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x38, + 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, + 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, + 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, + 0x41, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, + 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x3c, + 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, + 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, + 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, + 0x45, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, + 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x40, + 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, + 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, + 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, + 0x49, 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, + 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x44, + 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, + 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, + 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, + 0x4d, 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, + 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x48, + 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, + 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, + 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, + 0x51, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, + 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x4c, + 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, + 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, + 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, + 0x55, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, + 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x50, + 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, + 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, + 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, + 0x59, 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, + 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x54, + 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, + 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, + 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, + 0x5d, 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, + 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x58, + 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, + 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, + 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, + 0x61, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, + 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x5c, + 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, + 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, + 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, + 0x65, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, + 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x60, + 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, + 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, + 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, + 0x69, 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, + 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x64, + 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, + 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, + 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, + 0x6d, 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, + 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x68, + 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, + 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, + 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, + 0x71, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, + 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x6c, + 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, + 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, + 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, + 0x75, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, + 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x70, + 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, + 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, + 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, + 0x79, 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, + 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x74, + 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, + 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, + 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, + 0x7d, 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, + 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x78, + 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, + 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, + 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, + 0x81, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, + 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x7c, + 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, + 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, + 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, + 0x85, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, + 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x80, + 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, + 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, + 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, + 0x89, 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, + 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x84, + 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, + 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, + 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, + 0x8d, 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, + 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x88, + 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, + 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, + 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, + 0x91, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, + 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x8c, + 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, + 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, + 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, + 0x95, 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, + 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x90, + 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, + 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, + 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, + 0x99, 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, + 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x94, + 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, + 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, + 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, + 0x9d, 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, + 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x98, + 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, + 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, + 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, + 0xa1, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, + 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x9c, + 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, + 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, + 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, + 0xa5, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, + 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0xa0, + 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, + 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, + 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, + 0xa9, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, + 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0xa4, + 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, + 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, + 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, + 0xad, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, + 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0xa8, + 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, + 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, + 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, + 0xb1, 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, + 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0xac, + 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, + 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, + 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, + 0xb5, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, + 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0xb0, + 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, + 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, + 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, + 0xb9, 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, + 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0xb4, + 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, + 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, + 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, + 0xbd, 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, + 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0xb8, + 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, + 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, + 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, + 0xc1, 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, + 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0xbc, + 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, + 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, + 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, + 0xc5, 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, + 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0xc0, + 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, + 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, + 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, + 0xc9, 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, + 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xc4, + 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, + 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, + 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, + 0xcd, 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, + 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, + 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, + 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, + 0xd1, 0x00, 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, + 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xcc, + 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, + 0x04, 0xcd, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, + 0x00, 0x80, 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, + 0xd5, 0x00, 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xd0, + 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, + 0x04, 0xd1, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x80, 0x04, 0xd2, 0x02, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x80, 0x04, 0xd3, 0x02, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xd4, + 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, + 0x04, 0xd5, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x80, 0x04, 0xd6, 0x02, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x80, 0x04, 0xd7, 0x02, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xd8, + 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, + 0x04, 0xd9, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x80, 0x04, 0xda, 0x02, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x80, 0x04, 0xdb, 0x02, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xdc, + 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, + 0x04, 0xdd, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, + 0x00, 0x80, 0x04, 0xde, 0x02, 0x00, 0x00, 0x4d, + 0xe5, 0x00, 0x00, 0x80, 0x04, 0xdf, 0x02, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xe0, + 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, 0xe8, 0x00, + 0x00, 0x80, 0x04, 0xe1, 0x02, 0x00, 0x00, 0x4d, + 0xe9, 0x00, 0x00, 0x80, 0x04, 0xe2, 0x02, 0x00, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0x03, + 0x01, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, + 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, + 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, + 0xfb, 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, + 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, + 0x01, 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, + 0x04, 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, + 0x00, 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, 0x04, + 0x03, 0x02, 0x00, 0x00, 0x04, 0x04, 0x02, 0x00, + 0x00, 0x04, 0x05, 0x02, 0x00, 0x00, 0x04, 0x06, + 0x02, 0x00, 0x00, 0x04, 0x07, 0x02, 0x00, 0x00, + 0x04, 0x08, 0x02, 0x00, 0x00, 0x04, 0x09, 0x02, + 0x00, 0x00, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x04, + 0x0b, 0x02, 0x00, 0x00, 0x04, 0x0c, 0x02, 0x00, + 0x00, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x04, 0x0e, + 0x02, 0x00, 0x00, 0x04, 0x0f, 0x02, 0x00, 0x00, + 0x04, 0x10, 0x02, 0x00, 0x00, 0x04, 0x11, 0x02, + 0x00, 0x00, 0x04, 0x12, 0x02, 0x00, 0x00, 0x04, + 0x13, 0x02, 0x00, 0x00, 0x04, 0x14, 0x02, 0x00, + 0x00, 0x04, 0x15, 0x02, 0x00, 0x00, 0x04, 0x16, + 0x02, 0x00, 0x00, 0x04, 0x17, 0x02, 0x00, 0x00, + 0x04, 0x18, 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, + 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, + 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, + 0x21, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, + 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0x1c, + 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, + 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, + 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, + 0x25, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, + 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0x20, + 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, + 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, + 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, + 0x29, 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, + 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x24, + 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, + 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, + 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, + 0x2d, 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, + 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x28, + 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, + 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, + 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, + 0x31, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, + 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x2c, + 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, + 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, + 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, + 0x35, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, + 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x30, + 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, + 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, + 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, + 0x39, 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, + 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x34, + 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, + 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, + 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, + 0x3d, 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, + 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x38, + 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, + 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, + 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, + 0x41, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, + 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x3c, + 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, + 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, + 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, + 0x45, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, + 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x40, + 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, + 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, + 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, + 0x49, 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, + 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x44, + 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, + 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, + 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, + 0x4d, 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, + 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x48, + 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, + 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, + 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, + 0x51, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, + 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x4c, + 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, + 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, + 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, + 0x55, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, + 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x50, + 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, + 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, + 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, + 0x59, 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, + 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x54, + 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, + 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, + 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, + 0x5d, 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, + 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x58, + 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, + 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, + 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, + 0x61, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, + 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x5c, + 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, + 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, + 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, + 0x65, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, + 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x60, + 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, + 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, + 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, + 0x69, 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, + 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x64, + 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, + 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, + 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, + 0x6d, 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, + 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x68, + 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, + 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, + 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, + 0x71, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, + 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x6c, + 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, + 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, + 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, + 0x75, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, + 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x70, + 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, + 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, + 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, + 0x79, 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, + 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x74, + 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, + 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, + 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, + 0x7d, 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, + 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x78, + 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, + 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, + 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, + 0x81, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, + 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x7c, + 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, + 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, + 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, + 0x85, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, + 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x80, + 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, + 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, + 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, + 0x89, 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, + 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x84, + 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, + 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, + 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, + 0x8d, 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, + 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x88, + 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, + 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, + 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, + 0x91, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, + 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x8c, + 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, + 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, + 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, + 0x95, 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, + 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x90, + 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, + 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, + 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, + 0x99, 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, + 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x94, + 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, + 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, + 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, + 0x9d, 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, + 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x98, + 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, + 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, + 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, + 0xa1, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, + 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x9c, + 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, + 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, + 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, + 0xa5, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, + 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0xa0, + 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, + 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, + 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, + 0xa9, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, + 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0xa4, + 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, + 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, + 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, + 0xad, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, + 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0xa8, + 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, + 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, + 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, + 0xb1, 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, + 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0xac, + 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, + 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, + 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, + 0xb5, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, + 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0xb0, + 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, + 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, + 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, + 0xb9, 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, + 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0xb4, + 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, + 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, + 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, + 0xbd, 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, + 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0xb8, + 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, + 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, + 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, + 0xc1, 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, + 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0xbc, + 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, + 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, + 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, + 0xc5, 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, + 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0xc0, + 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, + 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, + 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, + 0xc9, 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, + 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xc4, + 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, + 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, + 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, + 0xcd, 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, + 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, + 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, + 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, + 0xd1, 0x00, 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, + 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xcc, + 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, + 0x04, 0xcd, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, + 0x00, 0x80, 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, + 0xd5, 0x00, 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xd0, + 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, + 0x04, 0xd1, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x80, 0x04, 0xd2, 0x02, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x80, 0x04, 0xd3, 0x02, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xd4, + 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, + 0x04, 0xd5, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x80, 0x04, 0xd6, 0x02, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x80, 0x04, 0xd7, 0x02, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xd8, + 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, + 0x04, 0xd9, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x80, 0x04, 0xda, 0x02, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x80, 0x04, 0xdb, 0x02, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xdc, + 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, + 0x04, 0xdd, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, + 0x00, 0x80, 0x04, 0xde, 0x02, 0x00, 0x00, 0x4d, + 0xe5, 0x00, 0x00, 0x80, 0x04, 0xdf, 0x02, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xe0, + 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, + 0x04, 0xe3, 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x00, + 0x00, 0x80, 0x04, 0xe4, 0x02, 0x00, 0x00, 0x4d, + 0xe9, 0x00, 0x00, 0x80, 0x04, 0xe5, 0x02, 0x00, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0xe6, + 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xf9, 0x01, + 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, + 0xfb, 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, + 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, + 0x01, 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, + 0x04, 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, + 0x00, 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, 0x04, + 0x03, 0x02, 0x00, 0x00, 0x04, 0x04, 0x02, 0x00, + 0x00, 0x04, 0x05, 0x02, 0x00, 0x00, 0x04, 0x06, + 0x02, 0x00, 0x00, 0x04, 0x07, 0x02, 0x00, 0x00, + 0x04, 0x08, 0x02, 0x00, 0x00, 0x04, 0x09, 0x02, + 0x00, 0x00, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x04, + 0x0b, 0x02, 0x00, 0x00, 0x04, 0x0c, 0x02, 0x00, + 0x00, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x04, 0x0e, + 0x02, 0x00, 0x00, 0x04, 0x0f, 0x02, 0x00, 0x00, + 0x04, 0x10, 0x02, 0x00, 0x00, 0x04, 0x11, 0x02, + 0x00, 0x00, 0x04, 0x12, 0x02, 0x00, 0x00, 0x04, + 0x13, 0x02, 0x00, 0x00, 0x04, 0x14, 0x02, 0x00, + 0x00, 0x04, 0x15, 0x02, 0x00, 0x00, 0x04, 0x16, + 0x02, 0x00, 0x00, 0x04, 0x17, 0x02, 0x00, 0x00, + 0x04, 0x18, 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, + 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, + 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, + 0x21, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, + 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0x1c, + 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, + 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, + 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, + 0x25, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, + 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0x20, + 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, + 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, + 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, + 0x29, 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, + 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x24, + 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, + 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, + 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, + 0x2d, 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, + 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x28, + 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, + 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, + 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, + 0x31, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, + 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x2c, + 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, + 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, + 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, + 0x35, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, + 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x30, + 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, + 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, + 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, + 0x39, 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, + 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x34, + 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, + 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, + 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, + 0x3d, 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, + 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x38, + 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, + 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, + 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, + 0x41, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, + 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x3c, + 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, + 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, + 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, + 0x45, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, + 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x40, + 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, + 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, + 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, + 0x49, 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, + 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x44, + 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, + 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, + 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, + 0x4d, 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, + 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x48, + 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, + 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, + 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, + 0x51, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, + 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x4c, + 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, + 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, + 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, + 0x55, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, + 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x50, + 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, + 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, + 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, + 0x59, 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, + 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x54, + 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, + 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, + 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, + 0x5d, 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, + 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x58, + 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, + 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, + 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, + 0x61, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, + 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x5c, + 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, + 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, + 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, + 0x65, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, + 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x60, + 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, + 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, + 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, + 0x69, 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, + 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x64, + 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, + 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, + 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, + 0x6d, 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, + 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x68, + 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, + 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, + 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, + 0x71, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, + 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x6c, + 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, + 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, + 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, + 0x75, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, + 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x70, + 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, + 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, + 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, + 0x79, 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, + 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x74, + 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, + 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, + 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, + 0x7d, 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, + 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x78, + 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, + 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, + 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, + 0x81, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, + 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x7c, + 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, + 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, + 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, + 0x85, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, + 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x80, + 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, + 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, + 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, + 0x89, 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, + 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x84, + 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, + 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, + 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, + 0x8d, 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, + 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x88, + 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, + 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, + 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, + 0x91, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, + 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x8c, + 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, + 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, + 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, + 0x95, 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, + 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x90, + 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, + 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, + 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, + 0x99, 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, + 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x94, + 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, + 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, + 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, + 0x9d, 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, + 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x98, + 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, + 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, + 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, + 0xa1, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, + 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x9c, + 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, + 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, + 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, + 0xa5, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, + 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0xa0, + 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, + 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, + 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, + 0xa9, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, + 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0xa4, + 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, + 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, + 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, + 0xad, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, + 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0xa8, + 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, + 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, + 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, + 0xb1, 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, + 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0xac, + 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, + 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, + 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, + 0xb5, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, + 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0xb0, + 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, + 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, + 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, + 0xb9, 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, + 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0xb4, + 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, + 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, + 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, + 0xbd, 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, + 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0xb8, + 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, + 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, + 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, + 0xc1, 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, + 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0xbc, + 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, + 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, + 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, + 0xc5, 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, + 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0xc0, + 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, + 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, + 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, + 0xc9, 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, + 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xc4, + 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, + 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, + 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, + 0xcd, 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, + 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, + 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, + 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, + 0xd1, 0x00, 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, + 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xcc, + 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, + 0x04, 0xcd, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, + 0x00, 0x80, 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, + 0xd5, 0x00, 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xd0, + 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, + 0x04, 0xd1, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x80, 0x04, 0xd2, 0x02, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x80, 0x04, 0xd3, 0x02, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xd4, + 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, + 0x04, 0xd5, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x80, 0x04, 0xd6, 0x02, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x80, 0x04, 0xd7, 0x02, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xd8, + 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, + 0x04, 0xd9, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x80, 0x04, 0xda, 0x02, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x80, 0x04, 0xdb, 0x02, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xdc, + 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, + 0x04, 0xdd, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, + 0x00, 0x80, 0x04, 0xde, 0x02, 0x00, 0x00, 0x4d, + 0xe5, 0x00, 0x00, 0x80, 0x04, 0xdf, 0x02, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xe0, + 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, + 0x04, 0xe3, 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x00, + 0x00, 0x80, 0x04, 0xe4, 0x02, 0x00, 0x00, 0x4d, + 0xe9, 0x00, 0x00, 0x80, 0x04, 0xe5, 0x02, 0x00, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0xe6, + 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x84, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x4d, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x4d, 0x88, 0x01, 0x00, 0x00, 0x4d, + 0x89, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x59, 0xbe, 0x5a, 0xbe, + 0x5b, 0xbe, 0x5c, 0xbe, 0x5d, 0xbe, 0x5e, 0xbe, + 0x5f, 0xbe, 0x60, 0xbe, 0x61, 0xbe, 0x62, 0xbe, + 0x63, 0xbe, 0x64, 0x26, 0x0c, 0x00, 0x4d, 0x56, + 0x01, 0x00, 0x00, 0x04, 0xe7, 0x02, 0x00, 0x00, + 0x04, 0xe8, 0x02, 0x00, 0x00, 0x04, 0xe9, 0x02, + 0x00, 0x00, 0x04, 0xea, 0x02, 0x00, 0x00, 0x04, + 0xeb, 0x02, 0x00, 0x00, 0x04, 0xec, 0x02, 0x00, + 0x00, 0x04, 0xed, 0x02, 0x00, 0x00, 0x04, 0xee, + 0x02, 0x00, 0x00, 0x04, 0xef, 0x02, 0x00, 0x00, + 0x04, 0xf0, 0x02, 0x00, 0x00, 0x04, 0xf1, 0x02, + 0x00, 0x00, 0x04, 0xf2, 0x02, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xe7, 0x02, 0x00, 0x00, 0x04, 0xe8, 0x02, 0x00, + 0x00, 0x04, 0xe9, 0x02, 0x00, 0x00, 0x04, 0xea, + 0x02, 0x00, 0x00, 0x04, 0xeb, 0x02, 0x00, 0x00, + 0x04, 0xec, 0x02, 0x00, 0x00, 0x04, 0xed, 0x02, + 0x00, 0x00, 0x04, 0xee, 0x02, 0x00, 0x00, 0x04, + 0xef, 0x02, 0x00, 0x00, 0x04, 0xf0, 0x02, 0x00, + 0x00, 0x04, 0xf1, 0x02, 0x00, 0x00, 0x04, 0xf2, + 0x02, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x6c, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, + 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xf3, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0xf3, 0x02, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xf3, 0x02, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x84, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x4d, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x4d, 0x88, 0x01, 0x00, + 0x00, 0x4d, 0x89, 0x01, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x6c, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, + 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x82, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xf4, + 0x02, 0x00, 0x00, 0x04, 0xf5, 0x02, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0xf4, 0x02, 0x00, 0x00, 0x04, 0xf5, 0x02, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xf4, 0x02, 0x00, 0x00, 0x04, + 0xf5, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x85, 0x01, 0x00, 0x00, 0x4d, + 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, + 0x00, 0x4d, 0x88, 0x01, 0x00, 0x00, 0x4d, 0x89, + 0x01, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, + 0x4d, 0xf6, 0x02, 0x00, 0x00, 0x4d, 0xf7, 0x02, + 0x00, 0x00, 0x0b, 0x04, 0xf8, 0x02, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xf9, 0x02, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0xfa, 0x02, 0x00, 0x00, 0x4d, + 0xfb, 0x02, 0x00, 0x00, 0x04, 0xfc, 0x02, 0x00, + 0x00, 0x4d, 0xfd, 0x02, 0x00, 0x00, 0x4d, 0xfe, + 0x02, 0x00, 0x00, 0x0b, 0x04, 0xff, 0x02, 0x00, + 0x00, 0x4d, 0xfb, 0x02, 0x00, 0x00, 0x04, 0x00, + 0x03, 0x00, 0x00, 0x4d, 0xfd, 0x02, 0x00, 0x00, + 0x4d, 0x01, 0x03, 0x00, 0x00, 0x0b, 0x04, 0x02, + 0x03, 0x00, 0x00, 0x4d, 0xfb, 0x02, 0x00, 0x00, + 0x04, 0x03, 0x03, 0x00, 0x00, 0x4d, 0xfd, 0x02, + 0x00, 0x00, 0x4d, 0x04, 0x03, 0x00, 0x00, 0x4d, + 0x05, 0x03, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x06, + 0x03, 0x00, 0x00, 0x4d, 0xfe, 0x02, 0x00, 0x00, + 0x04, 0x07, 0x03, 0x00, 0x00, 0x4d, 0x08, 0x03, + 0x00, 0x00, 0x04, 0x09, 0x03, 0x00, 0x00, 0x4d, + 0x0a, 0x03, 0x00, 0x00, 0x04, 0x0b, 0x03, 0x00, + 0x00, 0x4d, 0x0c, 0x03, 0x00, 0x00, 0x04, 0x0d, + 0x03, 0x00, 0x00, 0x4d, 0x0e, 0x03, 0x00, 0x00, + 0x04, 0x0f, 0x03, 0x00, 0x00, 0x4d, 0x10, 0x03, + 0x00, 0x00, 0x04, 0x11, 0x03, 0x00, 0x00, 0x4d, + 0x12, 0x03, 0x00, 0x00, 0x4d, 0xf8, 0x02, 0x00, + 0x00, 0x0b, 0x04, 0x06, 0x03, 0x00, 0x00, 0x4d, + 0xfe, 0x02, 0x00, 0x00, 0x04, 0x07, 0x03, 0x00, + 0x00, 0x4d, 0x08, 0x03, 0x00, 0x00, 0x04, 0x13, + 0x03, 0x00, 0x00, 0x4d, 0x0a, 0x03, 0x00, 0x00, + 0x04, 0x0b, 0x03, 0x00, 0x00, 0x4d, 0x0c, 0x03, + 0x00, 0x00, 0x04, 0x0d, 0x03, 0x00, 0x00, 0x4d, + 0x0e, 0x03, 0x00, 0x00, 0x04, 0x0f, 0x03, 0x00, + 0x00, 0x4d, 0x10, 0x03, 0x00, 0x00, 0x04, 0x11, + 0x03, 0x00, 0x00, 0x4d, 0x12, 0x03, 0x00, 0x00, + 0x4d, 0x14, 0x03, 0x00, 0x00, 0x4d, 0x15, 0x03, + 0x00, 0x00, 0x0b, 0x04, 0x16, 0x03, 0x00, 0x00, + 0x4d, 0x17, 0x03, 0x00, 0x00, 0x04, 0x18, 0x03, + 0x00, 0x00, 0x4d, 0x19, 0x03, 0x00, 0x00, 0x04, + 0x1a, 0x03, 0x00, 0x00, 0x4d, 0x1b, 0x03, 0x00, + 0x00, 0x04, 0x1c, 0x03, 0x00, 0x00, 0x4d, 0x1d, + 0x03, 0x00, 0x00, 0x04, 0x1e, 0x03, 0x00, 0x00, + 0x4d, 0x1f, 0x03, 0x00, 0x00, 0x04, 0x20, 0x03, + 0x00, 0x00, 0x4d, 0x21, 0x03, 0x00, 0x00, 0x04, + 0x22, 0x03, 0x00, 0x00, 0x4d, 0x23, 0x03, 0x00, + 0x00, 0x04, 0x24, 0x03, 0x00, 0x00, 0x4d, 0x25, + 0x03, 0x00, 0x00, 0x04, 0x26, 0x03, 0x00, 0x00, + 0x4d, 0x27, 0x03, 0x00, 0x00, 0x04, 0x28, 0x03, + 0x00, 0x00, 0x4d, 0x29, 0x03, 0x00, 0x00, 0x04, + 0x2a, 0x03, 0x00, 0x00, 0x4d, 0x2b, 0x03, 0x00, + 0x00, 0x04, 0x2c, 0x03, 0x00, 0x00, 0x4d, 0x2d, + 0x03, 0x00, 0x00, 0x04, 0x2e, 0x03, 0x00, 0x00, + 0x4d, 0x2f, 0x03, 0x00, 0x00, 0x04, 0x30, 0x03, + 0x00, 0x00, 0x4d, 0x31, 0x03, 0x00, 0x00, 0x04, + 0x32, 0x03, 0x00, 0x00, 0x4d, 0x33, 0x03, 0x00, + 0x00, 0x04, 0x34, 0x03, 0x00, 0x00, 0x4d, 0x35, + 0x03, 0x00, 0x00, 0x04, 0x36, 0x03, 0x00, 0x00, + 0x4d, 0x37, 0x03, 0x00, 0x00, 0x04, 0x38, 0x03, + 0x00, 0x00, 0x4d, 0x39, 0x03, 0x00, 0x00, 0x04, + 0x3a, 0x03, 0x00, 0x00, 0x4d, 0x3b, 0x03, 0x00, + 0x00, 0x04, 0x3c, 0x03, 0x00, 0x00, 0x4d, 0x3d, + 0x03, 0x00, 0x00, 0x04, 0x3e, 0x03, 0x00, 0x00, + 0x4d, 0x3f, 0x03, 0x00, 0x00, 0x4d, 0x40, 0x03, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x00, 0x24, + 0x01, 0x00, 0xcc, 0x28, 0x82, 0x0d, 0x01, 0x00, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, + 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, + 0x33, 0x07, 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_mn_size = 25394; + +const uint8_t intl_mn[25394] = { + 0x01, 0xd3, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x6d, 0x6e, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x10, + 0x7b, 0x31, 0x7d, 0x2c, 0x20, 0x7b, 0x30, 0x7d, + 0x0a, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0e, 0x7b, + 0x31, 0x7d, 0x20, 0x7b, 0x30, 0x7d, 0x0c, 0x6d, + 0x65, 0x64, 0x69, 0x75, 0x6d, 0x08, 0x66, 0x75, + 0x6c, 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x02, + 0x64, 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, 0x08, + 0x64, 0x64, 0x20, 0x45, 0x04, 0x45, 0x64, 0x10, + 0x45, 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, + 0x06, 0x45, 0x68, 0x6d, 0x0e, 0x45, 0x20, 0x48, + 0x48, 0x3a, 0x6d, 0x6d, 0x06, 0x45, 0x48, 0x6d, + 0x16, 0x45, 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x20, 0x61, 0x08, 0x45, 0x68, 0x6d, + 0x73, 0x14, 0x45, 0x20, 0x48, 0x48, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x08, 0x45, 0x48, 0x6d, + 0x73, 0x06, 0x47, 0x20, 0x79, 0x04, 0x47, 0x79, + 0x0e, 0x47, 0x20, 0x79, 0x20, 0x4d, 0x4d, 0x4d, + 0x0a, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x12, 0x47, + 0x20, 0x79, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x64, + 0x0c, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x18, + 0x45, 0x2c, 0x20, 0x47, 0x20, 0x79, 0x20, 0x4d, + 0x4d, 0x4d, 0x20, 0x64, 0x0e, 0x47, 0x79, 0x4d, + 0x4d, 0x4d, 0x45, 0x64, 0x06, 0x68, 0x20, 0x61, + 0x02, 0x68, 0x04, 0x48, 0x48, 0x02, 0x48, 0x0c, + 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x04, 0x68, + 0x6d, 0x0a, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x04, + 0x48, 0x6d, 0x12, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x20, 0x61, 0x06, 0x68, 0x6d, 0x73, + 0x10, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x06, 0x48, 0x6d, 0x73, 0x16, 0x68, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x20, + 0x76, 0x08, 0x68, 0x6d, 0x73, 0x76, 0x14, 0x48, + 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, + 0x76, 0x08, 0x48, 0x6d, 0x73, 0x76, 0x10, 0x68, + 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x20, 0x76, 0x06, + 0x68, 0x6d, 0x76, 0x0e, 0x48, 0x48, 0x3a, 0x6d, + 0x6d, 0x20, 0x76, 0x06, 0x48, 0x6d, 0x76, 0x02, + 0x4c, 0x02, 0x4d, 0x06, 0x4d, 0x2d, 0x64, 0x04, + 0x4d, 0x64, 0x0c, 0x45, 0x2c, 0x20, 0x4d, 0x2d, + 0x64, 0x06, 0x4d, 0x45, 0x64, 0x06, 0x4c, 0x4c, + 0x4c, 0x06, 0x4d, 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, + 0x4d, 0x20, 0x64, 0x08, 0x4d, 0x4d, 0x4d, 0x64, + 0x0e, 0x45, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x64, + 0x0a, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0c, 0x4d, + 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x0a, 0x4d, 0x4d, + 0x4d, 0x4d, 0x64, 0x0a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x04, 0x6d, 0x73, 0x02, 0x79, 0x06, 0x79, + 0x2d, 0x4d, 0x04, 0x79, 0x4d, 0x0a, 0x79, 0x2d, + 0x4d, 0x2d, 0x64, 0x06, 0x79, 0x4d, 0x64, 0x10, + 0x45, 0x2c, 0x20, 0x79, 0x2d, 0x4d, 0x2d, 0x64, + 0x08, 0x79, 0x4d, 0x45, 0x64, 0x0a, 0x79, 0x20, + 0x4d, 0x4d, 0x4d, 0x08, 0x79, 0x4d, 0x4d, 0x4d, + 0x0e, 0x79, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x64, + 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x14, 0x45, + 0x2c, 0x20, 0x79, 0x20, 0x4d, 0x4d, 0x4d, 0x20, + 0x64, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, + 0x0c, 0x79, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, + 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, 0x79, 0x20, + 0x51, 0x51, 0x51, 0x08, 0x79, 0x51, 0x51, 0x51, + 0x19, 0x79, 0x00, 0x20, 0x00, 0x27, 0x00, 0x3e, + 0x04, 0x3d, 0x04, 0x4b, 0x04, 0x27, 0x00, 0x20, + 0x00, 0x51, 0x00, 0x51, 0x00, 0x51, 0x00, 0x51, + 0x00, 0x0a, 0x79, 0x51, 0x51, 0x51, 0x51, 0x20, + 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, + 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, + 0x35, 0x45, 0x00, 0x45, 0x00, 0x45, 0x00, 0x45, + 0x00, 0x2c, 0x00, 0x20, 0x00, 0x79, 0x00, 0x20, + 0x00, 0x27, 0x00, 0x3e, 0x04, 0x3d, 0x04, 0x4b, + 0x04, 0x27, 0x00, 0x20, 0x00, 0x4d, 0x00, 0x4d, + 0x00, 0x20, 0x00, 0x27, 0x00, 0x41, 0x04, 0x30, + 0x04, 0x40, 0x04, 0x4b, 0x04, 0x3d, 0x04, 0x27, + 0x00, 0x20, 0x00, 0x64, 0x00, 0x14, 0x79, 0x4d, + 0x4d, 0x4d, 0x4d, 0x45, 0x45, 0x45, 0x45, 0x64, + 0x29, 0x79, 0x00, 0x20, 0x00, 0x27, 0x00, 0x3e, + 0x04, 0x3d, 0x04, 0x4b, 0x04, 0x27, 0x00, 0x20, + 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x20, 0x00, 0x27, + 0x00, 0x41, 0x04, 0x30, 0x04, 0x40, 0x04, 0x4b, + 0x04, 0x3d, 0x04, 0x27, 0x00, 0x20, 0x00, 0x64, + 0x00, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, + 0x0e, 0x79, 0x2d, 0x4d, 0x4d, 0x2d, 0x64, 0x64, + 0x16, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x73, 0x1a, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x7a, 0x7a, + 0x7a, 0x7a, 0x12, 0x68, 0x6d, 0x6d, 0x73, 0x73, + 0x7a, 0x7a, 0x7a, 0x7a, 0x14, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x7a, 0x08, + 0x68, 0x6d, 0x73, 0x7a, 0x16, 0x74, 0x69, 0x6d, + 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, + 0x0e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, + 0x0c, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0f, + 0x31, 0x00, 0x2d, 0x00, 0x40, 0x04, 0x20, 0x00, + 0x41, 0x04, 0x30, 0x04, 0x40, 0x04, 0x0f, 0x32, + 0x00, 0x2d, 0x00, 0x40, 0x04, 0x20, 0x00, 0x41, + 0x04, 0x30, 0x04, 0x40, 0x04, 0x0f, 0x33, 0x00, + 0x2d, 0x00, 0x40, 0x04, 0x20, 0x00, 0x41, 0x04, + 0x30, 0x04, 0x40, 0x04, 0x0f, 0x34, 0x00, 0x2d, + 0x00, 0x40, 0x04, 0x20, 0x00, 0x41, 0x04, 0x30, + 0x04, 0x40, 0x04, 0x0f, 0x35, 0x00, 0x2d, 0x00, + 0x40, 0x04, 0x20, 0x00, 0x41, 0x04, 0x30, 0x04, + 0x40, 0x04, 0x0f, 0x36, 0x00, 0x2d, 0x00, 0x40, + 0x04, 0x20, 0x00, 0x41, 0x04, 0x30, 0x04, 0x40, + 0x04, 0x0f, 0x37, 0x00, 0x2d, 0x00, 0x40, 0x04, + 0x20, 0x00, 0x41, 0x04, 0x30, 0x04, 0x40, 0x04, + 0x0f, 0x38, 0x00, 0x2d, 0x00, 0x40, 0x04, 0x20, + 0x00, 0x41, 0x04, 0x30, 0x04, 0x40, 0x04, 0x0f, + 0x39, 0x00, 0x2d, 0x00, 0x40, 0x04, 0x20, 0x00, + 0x41, 0x04, 0x30, 0x04, 0x40, 0x04, 0x11, 0x31, + 0x00, 0x30, 0x00, 0x2d, 0x00, 0x40, 0x04, 0x20, + 0x00, 0x41, 0x04, 0x30, 0x04, 0x40, 0x04, 0x11, + 0x31, 0x00, 0x31, 0x00, 0x2d, 0x00, 0x40, 0x04, + 0x20, 0x00, 0x41, 0x04, 0x30, 0x04, 0x40, 0x04, + 0x11, 0x31, 0x00, 0x32, 0x00, 0x2d, 0x00, 0x40, + 0x04, 0x20, 0x00, 0x41, 0x04, 0x30, 0x04, 0x40, + 0x04, 0x1b, 0x1d, 0x04, 0x4d, 0x04, 0x33, 0x04, + 0x34, 0x04, 0xaf, 0x04, 0x33, 0x04, 0x4d, 0x04, + 0x4d, 0x04, 0x40, 0x04, 0x20, 0x00, 0x41, 0x04, + 0x30, 0x04, 0x40, 0x04, 0x1d, 0x25, 0x04, 0x3e, + 0x04, 0x51, 0x04, 0x40, 0x04, 0x34, 0x04, 0x43, + 0x04, 0x33, 0x04, 0x30, 0x04, 0x30, 0x04, 0x40, + 0x04, 0x20, 0x00, 0x41, 0x04, 0x30, 0x04, 0x40, + 0x04, 0x1f, 0x13, 0x04, 0x43, 0x04, 0x40, 0x04, + 0x30, 0x04, 0x32, 0x04, 0x34, 0x04, 0x43, 0x04, + 0x33, 0x04, 0x30, 0x04, 0x30, 0x04, 0x40, 0x04, + 0x20, 0x00, 0x41, 0x04, 0x30, 0x04, 0x40, 0x04, + 0x1f, 0x14, 0x04, 0xe9, 0x04, 0x40, 0x04, 0xe9, + 0x04, 0x32, 0x04, 0x34, 0x04, 0xaf, 0x04, 0x33, + 0x04, 0x4d, 0x04, 0x4d, 0x04, 0x40, 0x04, 0x20, + 0x00, 0x41, 0x04, 0x30, 0x04, 0x40, 0x04, 0x1b, + 0x22, 0x04, 0x30, 0x04, 0x32, 0x04, 0x34, 0x04, + 0x43, 0x04, 0x33, 0x04, 0x30, 0x04, 0x30, 0x04, + 0x40, 0x04, 0x20, 0x00, 0x41, 0x04, 0x30, 0x04, + 0x40, 0x04, 0x1f, 0x17, 0x04, 0x43, 0x04, 0x40, + 0x04, 0x33, 0x04, 0x30, 0x04, 0x34, 0x04, 0x43, + 0x04, 0x33, 0x04, 0x30, 0x04, 0x30, 0x04, 0x40, + 0x04, 0x20, 0x00, 0x41, 0x04, 0x30, 0x04, 0x40, + 0x04, 0x1b, 0x14, 0x04, 0x3e, 0x04, 0x3b, 0x04, + 0x34, 0x04, 0x43, 0x04, 0x33, 0x04, 0x30, 0x04, + 0x30, 0x04, 0x40, 0x04, 0x20, 0x00, 0x41, 0x04, + 0x30, 0x04, 0x40, 0x04, 0x1d, 0x1d, 0x04, 0x30, + 0x04, 0x39, 0x04, 0x3c, 0x04, 0x34, 0x04, 0x43, + 0x04, 0x33, 0x04, 0x30, 0x04, 0x30, 0x04, 0x40, + 0x04, 0x20, 0x00, 0x41, 0x04, 0x30, 0x04, 0x40, + 0x04, 0x19, 0x15, 0x04, 0x41, 0x04, 0x34, 0x04, + 0xaf, 0x04, 0x33, 0x04, 0x4d, 0x04, 0x4d, 0x04, + 0x40, 0x04, 0x20, 0x00, 0x41, 0x04, 0x30, 0x04, + 0x40, 0x04, 0x1d, 0x10, 0x04, 0x40, 0x04, 0x30, + 0x04, 0x32, 0x04, 0x34, 0x04, 0x43, 0x04, 0x33, + 0x04, 0x30, 0x04, 0x30, 0x04, 0x40, 0x04, 0x20, + 0x00, 0x41, 0x04, 0x30, 0x04, 0x40, 0x04, 0x27, + 0x10, 0x04, 0x40, 0x04, 0x32, 0x04, 0x30, 0x04, + 0x3d, 0x04, 0x20, 0x00, 0x3d, 0x04, 0x4d, 0x04, + 0x33, 0x04, 0x34, 0x04, 0xaf, 0x04, 0x33, 0x04, + 0x4d, 0x04, 0x4d, 0x04, 0x40, 0x04, 0x20, 0x00, + 0x41, 0x04, 0x30, 0x04, 0x40, 0x04, 0x29, 0x10, + 0x04, 0x40, 0x04, 0x32, 0x04, 0x30, 0x04, 0x3d, + 0x04, 0x20, 0x00, 0x45, 0x04, 0x3e, 0x04, 0x51, + 0x04, 0x40, 0x04, 0x34, 0x04, 0x43, 0x04, 0x33, + 0x04, 0x30, 0x04, 0x30, 0x04, 0x40, 0x04, 0x20, + 0x00, 0x41, 0x04, 0x30, 0x04, 0x40, 0x04, 0x0c, + 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x73, 0x05, 0x1d, + 0x04, 0x4f, 0x04, 0x05, 0x14, 0x04, 0x30, 0x04, + 0x05, 0x1c, 0x04, 0x4f, 0x04, 0x05, 0x1b, 0x04, + 0x45, 0x04, 0x05, 0x1f, 0x04, 0xaf, 0x04, 0x05, + 0x11, 0x04, 0x30, 0x04, 0x05, 0x11, 0x04, 0x4f, + 0x04, 0x07, 0x3d, 0x04, 0x4f, 0x04, 0x3c, 0x04, + 0x0b, 0x34, 0x04, 0x30, 0x04, 0x32, 0x04, 0x30, + 0x04, 0x30, 0x04, 0x0d, 0x3c, 0x04, 0x4f, 0x04, + 0x33, 0x04, 0x3c, 0x04, 0x30, 0x04, 0x40, 0x04, + 0x0d, 0x3b, 0x04, 0x45, 0x04, 0x30, 0x04, 0x33, + 0x04, 0x32, 0x04, 0x30, 0x04, 0x0b, 0x3f, 0x04, + 0xaf, 0x04, 0x40, 0x04, 0x4d, 0x04, 0x32, 0x04, + 0x0d, 0x31, 0x04, 0x30, 0x04, 0x30, 0x04, 0x41, + 0x04, 0x30, 0x04, 0x3d, 0x04, 0x0b, 0x31, 0x04, + 0x4f, 0x04, 0x3c, 0x04, 0x31, 0x04, 0x30, 0x04, + 0x08, 0x64, 0x61, 0x79, 0x73, 0x04, 0x42, 0x45, + 0x08, 0x65, 0x72, 0x61, 0x73, 0x05, 0xae, 0x04, + 0xe8, 0x04, 0x04, 0x61, 0x6d, 0x05, 0xae, 0x04, + 0x25, 0x04, 0x04, 0x70, 0x6d, 0x14, 0x64, 0x61, + 0x79, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x73, + 0x06, 0x4d, 0x30, 0x31, 0x06, 0x4d, 0x30, 0x32, + 0x06, 0x4d, 0x30, 0x33, 0x06, 0x4d, 0x30, 0x34, + 0x06, 0x4d, 0x30, 0x35, 0x06, 0x4d, 0x30, 0x36, + 0x06, 0x4d, 0x30, 0x37, 0x06, 0x4d, 0x30, 0x38, + 0x06, 0x4d, 0x30, 0x39, 0x06, 0x4d, 0x31, 0x30, + 0x06, 0x4d, 0x31, 0x31, 0x06, 0x4d, 0x31, 0x32, + 0x08, 0x54, 0x6f, 0x75, 0x74, 0x08, 0x42, 0x61, + 0x62, 0x61, 0x0a, 0x48, 0x61, 0x74, 0x6f, 0x72, + 0x0a, 0x4b, 0x69, 0x61, 0x68, 0x6b, 0x08, 0x54, + 0x6f, 0x62, 0x61, 0x0c, 0x41, 0x6d, 0x73, 0x68, + 0x69, 0x72, 0x10, 0x42, 0x61, 0x72, 0x61, 0x6d, + 0x68, 0x61, 0x74, 0x12, 0x42, 0x61, 0x72, 0x61, + 0x6d, 0x6f, 0x75, 0x64, 0x61, 0x0e, 0x42, 0x61, + 0x73, 0x68, 0x61, 0x6e, 0x73, 0x0a, 0x50, 0x61, + 0x6f, 0x6e, 0x61, 0x08, 0x45, 0x70, 0x65, 0x70, + 0x0a, 0x4d, 0x65, 0x73, 0x72, 0x61, 0x0a, 0x4e, + 0x61, 0x73, 0x69, 0x65, 0x08, 0x45, 0x52, 0x41, + 0x30, 0x08, 0x45, 0x52, 0x41, 0x31, 0x10, 0x4d, + 0x65, 0x73, 0x6b, 0x65, 0x72, 0x65, 0x6d, 0x0c, + 0x54, 0x65, 0x6b, 0x65, 0x6d, 0x74, 0x0a, 0x48, + 0x65, 0x64, 0x61, 0x72, 0x0c, 0x54, 0x61, 0x68, + 0x73, 0x61, 0x73, 0x06, 0x54, 0x65, 0x72, 0x0e, + 0x59, 0x65, 0x6b, 0x61, 0x74, 0x69, 0x74, 0x0e, + 0x4d, 0x65, 0x67, 0x61, 0x62, 0x69, 0x74, 0x0c, + 0x4d, 0x69, 0x61, 0x7a, 0x69, 0x61, 0x0c, 0x47, + 0x65, 0x6e, 0x62, 0x6f, 0x74, 0x08, 0x53, 0x65, + 0x6e, 0x65, 0x0a, 0x48, 0x61, 0x6d, 0x6c, 0x65, + 0x0e, 0x4e, 0x65, 0x68, 0x61, 0x73, 0x73, 0x65, + 0x0e, 0x50, 0x61, 0x67, 0x75, 0x6d, 0x65, 0x6e, + 0x07, 0x1c, 0x04, 0x2d, 0x04, 0xe8, 0x04, 0x05, + 0x1c, 0x04, 0x2d, 0x04, 0x07, 0x1d, 0x04, 0x22, + 0x04, 0xe8, 0x04, 0x05, 0x1d, 0x04, 0x22, 0x04, + 0x0b, 0x3c, 0x04, 0x2e, 0x00, 0x4d, 0x04, 0x2e, + 0x00, 0xe9, 0x04, 0x09, 0x3c, 0x04, 0x2e, 0x00, + 0x4d, 0x04, 0x2e, 0x00, 0x25, 0x3c, 0x04, 0x30, + 0x04, 0x3d, 0x04, 0x30, 0x04, 0x39, 0x04, 0x20, + 0x00, 0x4d, 0x04, 0x40, 0x04, 0x38, 0x04, 0x3d, + 0x04, 0x38, 0x04, 0x39, 0x04, 0x20, 0x00, 0xe9, + 0x04, 0x3c, 0x04, 0x3d, 0x04, 0xe9, 0x04, 0x45, + 0x04, 0x19, 0x3c, 0x04, 0x30, 0x04, 0x3d, 0x04, + 0x30, 0x04, 0x39, 0x04, 0x20, 0x00, 0x4d, 0x04, + 0x40, 0x04, 0x38, 0x04, 0x3d, 0x04, 0x38, 0x04, + 0x39, 0x04, 0x0c, 0x54, 0x69, 0x73, 0x68, 0x72, + 0x69, 0x0e, 0x48, 0x65, 0x73, 0x68, 0x76, 0x61, + 0x6e, 0x0c, 0x4b, 0x69, 0x73, 0x6c, 0x65, 0x76, + 0x0a, 0x54, 0x65, 0x76, 0x65, 0x74, 0x0c, 0x53, + 0x68, 0x65, 0x76, 0x61, 0x74, 0x0c, 0x41, 0x64, + 0x61, 0x72, 0x20, 0x49, 0x08, 0x41, 0x64, 0x61, + 0x72, 0x0a, 0x4e, 0x69, 0x73, 0x61, 0x6e, 0x08, + 0x49, 0x79, 0x61, 0x72, 0x0a, 0x53, 0x69, 0x76, + 0x61, 0x6e, 0x0a, 0x54, 0x61, 0x6d, 0x75, 0x7a, + 0x04, 0x41, 0x76, 0x08, 0x45, 0x6c, 0x75, 0x6c, + 0x0e, 0x41, 0x64, 0x61, 0x72, 0x20, 0x49, 0x49, + 0x04, 0x41, 0x4d, 0x0e, 0x43, 0x68, 0x61, 0x69, + 0x74, 0x72, 0x61, 0x10, 0x56, 0x61, 0x69, 0x73, + 0x61, 0x6b, 0x68, 0x61, 0x10, 0x4a, 0x79, 0x61, + 0x69, 0x73, 0x74, 0x68, 0x61, 0x0c, 0x41, 0x73, + 0x61, 0x64, 0x68, 0x61, 0x0e, 0x53, 0x72, 0x61, + 0x76, 0x61, 0x6e, 0x61, 0x0c, 0x42, 0x68, 0x61, + 0x64, 0x72, 0x61, 0x0c, 0x41, 0x73, 0x76, 0x69, + 0x6e, 0x61, 0x0e, 0x4b, 0x61, 0x72, 0x74, 0x69, + 0x6b, 0x61, 0x14, 0x41, 0x67, 0x72, 0x61, 0x68, + 0x61, 0x79, 0x61, 0x6e, 0x61, 0x0a, 0x50, 0x61, + 0x75, 0x73, 0x61, 0x0a, 0x4d, 0x61, 0x67, 0x68, + 0x61, 0x10, 0x50, 0x68, 0x61, 0x6c, 0x67, 0x75, + 0x6e, 0x61, 0x08, 0x53, 0x61, 0x6b, 0x61, 0x08, + 0x4d, 0x75, 0x68, 0x2e, 0x08, 0x53, 0x61, 0x66, + 0x2e, 0x0c, 0x52, 0x61, 0x62, 0x2e, 0x20, 0x49, + 0x0e, 0x52, 0x61, 0x62, 0x2e, 0x20, 0x49, 0x49, + 0x0c, 0x4a, 0x75, 0x6d, 0x2e, 0x20, 0x49, 0x0e, + 0x4a, 0x75, 0x6d, 0x2e, 0x20, 0x49, 0x49, 0x08, + 0x52, 0x61, 0x6a, 0x2e, 0x08, 0x53, 0x68, 0x61, + 0x2e, 0x08, 0x52, 0x61, 0x6d, 0x2e, 0x0a, 0x53, + 0x68, 0x61, 0x77, 0x2e, 0x11, 0x44, 0x00, 0x68, + 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, + 0x00, 0x51, 0x00, 0x2e, 0x00, 0x11, 0x44, 0x00, + 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, + 0x2d, 0x00, 0x48, 0x00, 0x2e, 0x00, 0x10, 0x4d, + 0x75, 0x68, 0x61, 0x72, 0x72, 0x61, 0x6d, 0x0a, + 0x53, 0x61, 0x66, 0x61, 0x72, 0x0f, 0x52, 0x00, + 0x61, 0x00, 0x62, 0x00, 0x69, 0x00, 0xbb, 0x02, + 0x20, 0x00, 0x49, 0x00, 0x11, 0x52, 0x00, 0x61, + 0x00, 0x62, 0x00, 0x69, 0x00, 0xbb, 0x02, 0x20, + 0x00, 0x49, 0x00, 0x49, 0x00, 0x10, 0x4a, 0x75, + 0x6d, 0x61, 0x64, 0x61, 0x20, 0x49, 0x12, 0x4a, + 0x75, 0x6d, 0x61, 0x64, 0x61, 0x20, 0x49, 0x49, + 0x0a, 0x52, 0x61, 0x6a, 0x61, 0x62, 0x0f, 0x53, + 0x00, 0x68, 0x00, 0x61, 0x00, 0xbb, 0x02, 0x62, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x0e, 0x52, 0x61, + 0x6d, 0x61, 0x64, 0x61, 0x6e, 0x0e, 0x53, 0x68, + 0x61, 0x77, 0x77, 0x61, 0x6c, 0x19, 0x44, 0x00, + 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, + 0x2d, 0x00, 0x51, 0x00, 0x69, 0x00, 0xbb, 0x02, + 0x64, 0x00, 0x61, 0x00, 0x68, 0x00, 0x19, 0x44, + 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, + 0x00, 0x2d, 0x00, 0x48, 0x00, 0x69, 0x00, 0x6a, + 0x00, 0x6a, 0x00, 0x61, 0x00, 0x68, 0x00, 0x04, + 0x41, 0x48, 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x36, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x36, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, + 0x68, 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x54, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x1d, 0x57, 0x00, 0x61, + 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x1f, 0x52, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x1d, 0x59, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x37, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x2d, 0x00, 0x6b, 0x00, 0x61, 0x00, + 0x6d, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x2d, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x2b, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x2d, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, 0x2a, + 0x4a, 0x69, 0x6e, 0x67, 0x6f, 0x2d, 0x6b, 0x65, + 0x69, 0x75, 0x6e, 0x20, 0x28, 0x37, 0x36, 0x37, + 0x2d, 0x37, 0x37, 0x30, 0x29, 0x1d, 0x48, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x1f, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x2d, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x2d, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x38, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x1f, 0x44, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1d, 0x4a, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x1d, 0x4b, 0x00, 0x61, 0x00, 0x6a, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1f, 0x53, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x20, 0x54, 0x65, 0x6e, 0x2d, + 0x61, 0x6e, 0x20, 0x28, 0x38, 0x35, 0x37, 0x2d, + 0x38, 0x35, 0x39, 0x29, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x74, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x1f, 0x45, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1b, 0x4c, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x1d, 0x41, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x1f, 0x45, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x1d, 0x45, 0x00, 0x69, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, + 0x69, 0x00, 0x73, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x39, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4a, + 0x00, 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x35, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, 0x4a, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x29, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4c, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x4a, + 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, 0x24, + 0x54, 0x65, 0x6e, 0x2d, 0x65, 0x69, 0x20, 0x28, + 0x31, 0x31, 0x31, 0x30, 0x2d, 0x31, 0x31, 0x31, + 0x33, 0x29, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x44, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x48, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x48, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x27, 0x45, 0x00, 0x69, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x68, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x6d, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x61, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x69, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x59, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x21, 0x4a, 0x00, 0x75, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x29, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x29, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, + 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x41, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, + 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x29, 0x00, 0x27, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x75, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x29, 0x52, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x4e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x4c, 0x01, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6d, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, + 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, + 0x4c, 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x74, + 0x00, 0x73, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x27, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x21, 0x4c, 0x01, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, + 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x21, 0x4d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, + 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x72, 0x00, + 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4d, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, 0x45, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, + 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x48, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x65, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, + 0x41, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x02, 0x54, 0x02, + 0x53, 0x0a, 0x4d, 0x65, 0x69, 0x6a, 0x69, 0x0d, + 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x0b, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x0c, + 0x48, 0x65, 0x69, 0x73, 0x65, 0x69, 0x12, 0x46, + 0x61, 0x72, 0x76, 0x61, 0x72, 0x64, 0x69, 0x6e, + 0x16, 0x4f, 0x72, 0x64, 0x69, 0x62, 0x65, 0x68, + 0x65, 0x73, 0x68, 0x74, 0x0e, 0x4b, 0x68, 0x6f, + 0x72, 0x64, 0x61, 0x64, 0x06, 0x54, 0x69, 0x72, + 0x0c, 0x4d, 0x6f, 0x72, 0x64, 0x61, 0x64, 0x12, + 0x53, 0x68, 0x61, 0x68, 0x72, 0x69, 0x76, 0x61, + 0x72, 0x08, 0x4d, 0x65, 0x68, 0x72, 0x08, 0x41, + 0x62, 0x61, 0x6e, 0x08, 0x41, 0x7a, 0x61, 0x72, + 0x06, 0x44, 0x65, 0x79, 0x0c, 0x42, 0x61, 0x68, + 0x6d, 0x61, 0x6e, 0x0c, 0x45, 0x73, 0x66, 0x61, + 0x6e, 0x64, 0x04, 0x41, 0x50, 0x1a, 0x42, 0x65, + 0x66, 0x6f, 0x72, 0x65, 0x20, 0x52, 0x2e, 0x4f, + 0x2e, 0x43, 0x2e, 0x0c, 0x52, 0x2e, 0x4f, 0x2e, + 0x43, 0x2e, 0x12, 0x63, 0x61, 0x6c, 0x65, 0x6e, + 0x64, 0x61, 0x72, 0x73, 0x08, 0x64, 0x61, 0x74, + 0x65, 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, + 0x75, 0x10, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0x1e, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, + 0x72, 0x6e, 0x26, 0x7b, 0x6d, 0x69, 0x6e, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x6e, + 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, + 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x0e, 0x64, + 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x26, 0x7b, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, + 0x7d, 0xa0, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0x3c, 0x7b, 0x6d, 0x69, 0x6e, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, + 0xa0, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x79, 0x2a, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0x7b, 0x70, 0x65, 0x72, 0x63, + 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, + 0x40, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0x7b, 0x70, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, + 0x7d, 0x0e, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, + 0x74, 0x10, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, + 0x6e, 0x73, 0x02, 0x2e, 0x02, 0x2c, 0x0a, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x06, 0x4e, 0x61, 0x4e, + 0x06, 0x6e, 0x61, 0x6e, 0x02, 0x2b, 0x10, 0x70, + 0x6c, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, + 0x2d, 0x12, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, + 0x69, 0x67, 0x6e, 0x02, 0x25, 0x16, 0x70, 0x65, + 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, + 0x6e, 0x03, 0x1e, 0x22, 0x10, 0x69, 0x6e, 0x66, + 0x69, 0x6e, 0x69, 0x74, 0x79, 0x0e, 0x73, 0x79, + 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x04, 0x41, 0x24, + 0x06, 0x41, 0x55, 0x44, 0x04, 0x52, 0x24, 0x06, + 0x42, 0x52, 0x4c, 0x06, 0x43, 0x41, 0x24, 0x06, + 0x43, 0x41, 0x44, 0x06, 0x43, 0x4e, 0xa5, 0x06, + 0x43, 0x4e, 0x59, 0x03, 0xac, 0x20, 0x06, 0x45, + 0x55, 0x52, 0x02, 0xa3, 0x06, 0x47, 0x42, 0x50, + 0x06, 0x48, 0x4b, 0x24, 0x06, 0x48, 0x4b, 0x44, + 0x03, 0xaa, 0x20, 0x06, 0x49, 0x4c, 0x53, 0x03, + 0xb9, 0x20, 0x06, 0x49, 0x4e, 0x52, 0x06, 0x4a, + 0x50, 0xa5, 0x06, 0x4a, 0x50, 0x59, 0x03, 0xa9, + 0x20, 0x06, 0x4b, 0x52, 0x57, 0x03, 0xae, 0x20, + 0x06, 0x4d, 0x4e, 0x54, 0x06, 0x4d, 0x58, 0x24, + 0x06, 0x4d, 0x58, 0x4e, 0x06, 0x4e, 0x5a, 0x24, + 0x06, 0x4e, 0x5a, 0x44, 0x03, 0x3f, 0x0e, 0x06, + 0x54, 0x48, 0x42, 0x06, 0x4e, 0x54, 0x24, 0x06, + 0x54, 0x57, 0x44, 0x02, 0x24, 0x06, 0x55, 0x53, + 0x44, 0x03, 0xab, 0x20, 0x06, 0x56, 0x4e, 0x44, + 0x08, 0x46, 0x43, 0x46, 0x41, 0x06, 0x58, 0x41, + 0x46, 0x06, 0x45, 0x43, 0x24, 0x06, 0x58, 0x43, + 0x44, 0x06, 0x43, 0x46, 0x41, 0x06, 0x58, 0x4f, + 0x46, 0x08, 0x43, 0x46, 0x50, 0x46, 0x06, 0x58, + 0x50, 0x46, 0x14, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x63, 0x69, 0x65, 0x73, 0x52, 0x6e, 0x6f, + 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2f, + 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, + 0x61, 0x74, 0x61, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, + 0x70, 0x2f, 0x6d, 0x6e, 0x2e, 0x6a, 0x73, 0x0d, + 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, + 0x27, 0x00, 0xa2, 0x02, 0x83, 0x68, 0x01, 0xa0, + 0x01, 0x00, 0x00, 0x00, 0x39, 0xd0, 0x00, 0x00, + 0x00, 0x43, 0xd1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd2, 0x00, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd4, 0x00, 0x00, 0x00, 0x04, + 0xd5, 0x00, 0x00, 0x00, 0x04, 0xd6, 0x00, 0x00, + 0x00, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x04, 0xd8, + 0x00, 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, 0x00, + 0x04, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdb, 0x00, + 0x00, 0x00, 0x04, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0xdd, 0x00, 0x00, 0x00, 0x04, 0xde, 0x00, 0x00, + 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, 0x04, 0xe0, + 0x00, 0x00, 0x00, 0x04, 0xe1, 0x00, 0x00, 0x00, + 0x04, 0xe2, 0x00, 0x00, 0x00, 0x26, 0x0f, 0x00, + 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x0a, 0x4d, 0xe4, + 0x00, 0x00, 0x00, 0x09, 0x4d, 0xe5, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe8, 0x00, 0x00, + 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x00, 0x04, 0xe8, + 0x00, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xec, 0x00, 0x00, 0x00, + 0x4d, 0xec, 0x00, 0x00, 0x00, 0x04, 0xed, 0x00, + 0x00, 0x00, 0x4d, 0xee, 0x00, 0x00, 0x00, 0x04, + 0xef, 0x00, 0x00, 0x00, 0x4d, 0xf0, 0x00, 0x00, + 0x00, 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, 0xf2, + 0x00, 0x00, 0x00, 0x04, 0xf3, 0x00, 0x00, 0x00, + 0x4d, 0xf4, 0x00, 0x00, 0x00, 0x04, 0xf5, 0x00, + 0x00, 0x00, 0x4d, 0xf6, 0x00, 0x00, 0x00, 0x04, + 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xf8, 0x00, 0x00, + 0x00, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0xfa, + 0x00, 0x00, 0x00, 0x04, 0xfb, 0x00, 0x00, 0x00, + 0x4d, 0xfc, 0x00, 0x00, 0x00, 0x04, 0xfd, 0x00, + 0x00, 0x00, 0x4d, 0xfe, 0x00, 0x00, 0x00, 0x04, + 0xff, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x01, 0x00, + 0x00, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0x02, + 0x01, 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, 0x00, + 0x4d, 0x04, 0x01, 0x00, 0x00, 0x04, 0x05, 0x01, + 0x00, 0x00, 0x4d, 0x06, 0x01, 0x00, 0x00, 0x04, + 0x07, 0x01, 0x00, 0x00, 0x4d, 0x08, 0x01, 0x00, + 0x00, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0x0a, + 0x01, 0x00, 0x00, 0x04, 0x0b, 0x01, 0x00, 0x00, + 0x4d, 0x0c, 0x01, 0x00, 0x00, 0x04, 0x0d, 0x01, + 0x00, 0x00, 0x4d, 0x0e, 0x01, 0x00, 0x00, 0x04, + 0x0f, 0x01, 0x00, 0x00, 0x4d, 0x10, 0x01, 0x00, + 0x00, 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, 0x12, + 0x01, 0x00, 0x00, 0x04, 0x13, 0x01, 0x00, 0x00, + 0x4d, 0x14, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x4d, 0x16, 0x01, 0x00, 0x00, 0x04, + 0x17, 0x01, 0x00, 0x00, 0x4d, 0x18, 0x01, 0x00, + 0x00, 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, 0x1a, + 0x01, 0x00, 0x00, 0x04, 0x1b, 0x01, 0x00, 0x00, + 0x4d, 0x1c, 0x01, 0x00, 0x00, 0x04, 0x1d, 0x01, + 0x00, 0x00, 0x4d, 0x1e, 0x01, 0x00, 0x00, 0x04, + 0x1f, 0x01, 0x00, 0x00, 0x4d, 0x20, 0x01, 0x00, + 0x00, 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, 0x22, + 0x01, 0x00, 0x00, 0x04, 0x23, 0x01, 0x00, 0x00, + 0x4d, 0x24, 0x01, 0x00, 0x00, 0x04, 0x25, 0x01, + 0x00, 0x00, 0x4d, 0x25, 0x01, 0x00, 0x00, 0x04, + 0x26, 0x01, 0x00, 0x00, 0x4d, 0x27, 0x01, 0x00, + 0x00, 0x04, 0x28, 0x01, 0x00, 0x00, 0x4d, 0x29, + 0x01, 0x00, 0x00, 0x04, 0x2a, 0x01, 0x00, 0x00, + 0x4d, 0x2b, 0x01, 0x00, 0x00, 0x04, 0x2c, 0x01, + 0x00, 0x00, 0x4d, 0x2d, 0x01, 0x00, 0x00, 0x04, + 0x2e, 0x01, 0x00, 0x00, 0x4d, 0x2f, 0x01, 0x00, + 0x00, 0x04, 0x30, 0x01, 0x00, 0x00, 0x4d, 0x31, + 0x01, 0x00, 0x00, 0x04, 0x32, 0x01, 0x00, 0x00, + 0x4d, 0x33, 0x01, 0x00, 0x00, 0x04, 0x34, 0x01, + 0x00, 0x00, 0x4d, 0x35, 0x01, 0x00, 0x00, 0x04, + 0x36, 0x01, 0x00, 0x00, 0x4d, 0x37, 0x01, 0x00, + 0x00, 0x4d, 0x38, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x39, 0x01, 0x00, 0x00, 0x4d, 0x3a, 0x01, 0x00, + 0x00, 0x04, 0x3b, 0x01, 0x00, 0x00, 0x4d, 0x3c, + 0x01, 0x00, 0x00, 0x04, 0x2e, 0x01, 0x00, 0x00, + 0x4d, 0x2f, 0x01, 0x00, 0x00, 0x04, 0x3d, 0x01, + 0x00, 0x00, 0x4d, 0x29, 0x01, 0x00, 0x00, 0x4d, + 0x3e, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x3f, 0x01, + 0x00, 0x00, 0x4d, 0x40, 0x01, 0x00, 0x00, 0x04, + 0x41, 0x01, 0x00, 0x00, 0x4d, 0x42, 0x01, 0x00, + 0x00, 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, 0x0a, + 0x01, 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, 0x00, + 0x4d, 0x06, 0x01, 0x00, 0x00, 0x4d, 0x43, 0x01, + 0x00, 0x00, 0x4d, 0x44, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x0b, 0xbe, 0x00, 0xbe, 0x01, 0xbe, 0x02, + 0xbe, 0x03, 0xbe, 0x04, 0xbe, 0x05, 0xbe, 0x06, + 0xbe, 0x07, 0xbe, 0x08, 0xbe, 0x09, 0xbe, 0x0a, + 0xbe, 0x0b, 0x26, 0x0c, 0x00, 0x4d, 0x45, 0x01, + 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x5e, 0x01, 0x00, 0x00, 0x0b, + 0xbe, 0x0c, 0xbe, 0x0d, 0xbe, 0x0e, 0xbe, 0x0f, + 0xbe, 0x10, 0xbe, 0x11, 0xbe, 0x12, 0x26, 0x07, + 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6d, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x4d, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x4d, 0x73, + 0x01, 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, + 0x4d, 0xd5, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x13, 0xbe, 0x14, 0xbe, 0x15, 0xbe, 0x16, 0xbe, + 0x17, 0xbe, 0x18, 0xbe, 0x19, 0xbe, 0x1a, 0xbe, + 0x1b, 0xbe, 0x1c, 0xbe, 0x1d, 0xbe, 0x1e, 0x26, + 0x0c, 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, + 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x5e, 0x01, 0x00, 0x00, 0x0b, 0xbe, 0x1f, 0xbe, + 0x20, 0xbe, 0x21, 0xbe, 0x22, 0xbe, 0x23, 0xbe, + 0x24, 0xbe, 0x25, 0x26, 0x07, 0x00, 0x4d, 0x45, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x6d, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x4d, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x4d, 0x73, + 0x01, 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, + 0x4d, 0xd6, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x26, 0xbe, 0x27, 0xbe, 0x28, 0xbe, 0x29, 0xbe, + 0x2a, 0xbe, 0x2b, 0xbe, 0x2c, 0xbe, 0x2d, 0xbe, + 0x2e, 0xbe, 0x2f, 0xbe, 0x30, 0xbe, 0x31, 0xbe, + 0x32, 0x26, 0x0d, 0x00, 0x4d, 0x45, 0x01, 0x00, + 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, + 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, + 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, + 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, + 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, + 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, + 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, + 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, + 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, + 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, + 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x5e, 0x01, 0x00, 0x00, + 0x0b, 0xbe, 0x33, 0xbe, 0x34, 0xbe, 0x35, 0xbe, + 0x36, 0xbe, 0x37, 0xbe, 0x38, 0xbe, 0x39, 0x26, + 0x07, 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6d, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x8e, 0x01, 0x00, 0x00, + 0x04, 0x8f, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x45, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, + 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x4d, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x4d, 0x73, + 0x01, 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, + 0x4d, 0xd7, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x3a, 0xbe, 0x3b, 0xbe, 0x3c, 0xbe, 0x3d, 0xbe, + 0x3e, 0xbe, 0x3f, 0xbe, 0x40, 0xbe, 0x41, 0xbe, + 0x42, 0xbe, 0x43, 0xbe, 0x44, 0xbe, 0x45, 0x26, + 0x0c, 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, + 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x5e, 0x01, 0x00, 0x00, 0x0b, 0xbe, 0x46, 0xbe, + 0x47, 0xbe, 0x48, 0xbe, 0x49, 0xbe, 0x4a, 0xbe, + 0x4b, 0xbe, 0x4c, 0x26, 0x07, 0x00, 0x4d, 0x45, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x6d, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x4d, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x4d, 0x73, + 0x01, 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x4d, 0xbe, 0x4e, 0xbe, 0x4f, 0xbe, 0x50, 0xbe, + 0x51, 0xbe, 0x52, 0xbe, 0x53, 0xbe, 0x54, 0xbe, + 0x55, 0xbe, 0x56, 0xbe, 0x57, 0xbe, 0x58, 0xbe, + 0x59, 0x26, 0x0d, 0x00, 0x4d, 0x45, 0x01, 0x00, + 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, + 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, + 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, + 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, + 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, + 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, + 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, + 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, + 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, + 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, + 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, + 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, + 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, + 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, + 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x5e, 0x01, 0x00, 0x00, + 0x0b, 0xbe, 0x5a, 0xbe, 0x5b, 0xbe, 0x5c, 0xbe, + 0x5d, 0xbe, 0x5e, 0xbe, 0x5f, 0xbe, 0x60, 0x26, + 0x07, 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6d, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x8e, 0x01, 0x00, 0x00, + 0x04, 0x8f, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x45, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, + 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x4d, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x4d, 0x73, + 0x01, 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x61, 0xbe, 0x62, 0xbe, 0x63, 0xbe, 0x64, 0xbe, + 0x65, 0xbe, 0x66, 0xbe, 0x67, 0xbe, 0x68, 0xbe, + 0x69, 0xbe, 0x6a, 0xbe, 0x6b, 0xbe, 0x6c, 0xbe, + 0x6d, 0x26, 0x0d, 0x00, 0x4d, 0x45, 0x01, 0x00, + 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, + 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, + 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, + 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, + 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, + 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, + 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, + 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, + 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, + 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, + 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, + 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, + 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, + 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, + 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x5e, 0x01, 0x00, 0x00, + 0x0b, 0xbe, 0x6e, 0xbe, 0x6f, 0xbe, 0x70, 0xbe, + 0x71, 0xbe, 0x72, 0xbe, 0x73, 0xbe, 0x74, 0x26, + 0x07, 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6d, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x8e, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, + 0x04, 0x8e, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x8e, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x4d, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x4d, + 0x73, 0x01, 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, + 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x75, 0xbe, 0x76, 0xbe, 0x77, 0xbe, 0x78, + 0xbe, 0x79, 0xbe, 0x7a, 0xbe, 0x7b, 0xbe, 0x7c, + 0xbe, 0x7d, 0xbe, 0x7e, 0xbe, 0x7f, 0xbe, 0x80, + 0x26, 0x0c, 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, + 0x80, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x5e, 0x01, 0x00, 0x00, 0x0b, 0xbe, 0x81, + 0xbe, 0x82, 0xbe, 0x83, 0xbe, 0x84, 0xbe, 0x85, + 0xbe, 0x86, 0xbe, 0x87, 0x26, 0x07, 0x00, 0x4d, + 0x45, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x6d, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x45, 0x01, + 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, + 0x8f, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, + 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6f, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x4d, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x4d, 0x73, 0x01, 0x00, 0x00, + 0x4d, 0x74, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x88, 0xbe, 0x89, + 0xbe, 0x8a, 0xbe, 0x8b, 0xbe, 0x8c, 0xbe, 0x8d, + 0xbe, 0x8e, 0xbe, 0x8f, 0xbe, 0x90, 0xbe, 0x91, + 0xbe, 0x92, 0xbe, 0x93, 0x26, 0x0c, 0x00, 0x4d, + 0x45, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x5e, 0x01, 0x00, + 0x00, 0x0b, 0xbe, 0x94, 0xbe, 0x95, 0xbe, 0x96, + 0xbe, 0x97, 0xbe, 0x98, 0xbe, 0x99, 0xbe, 0x9a, + 0x26, 0x07, 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6d, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x9d, 0x01, 0x00, + 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, + 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, + 0x26, 0x04, 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, + 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, + 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, + 0xa0, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, + 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, 0x9f, + 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, + 0x26, 0x04, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x4d, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x4d, 0x73, 0x01, + 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x9b, + 0xbe, 0x9c, 0xbe, 0x9d, 0xbe, 0x9e, 0xbe, 0x9f, + 0xbe, 0xa0, 0xbe, 0xa1, 0xbe, 0xa2, 0xbe, 0xa3, + 0xbe, 0xa4, 0xbe, 0xa5, 0xbe, 0xa6, 0xbe, 0xa7, + 0xbe, 0xa8, 0x26, 0x0e, 0x00, 0x4d, 0x45, 0x01, + 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, + 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, + 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, + 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, + 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, + 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, + 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, + 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, + 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, + 0x26, 0x0e, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, + 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, + 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, + 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, + 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, + 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, + 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, + 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, + 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, 0x26, 0x0e, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x5e, + 0x01, 0x00, 0x00, 0x0b, 0xbe, 0xa9, 0xbe, 0xaa, + 0xbe, 0xab, 0xbe, 0xac, 0xbe, 0xad, 0xbe, 0xae, + 0xbe, 0xaf, 0x26, 0x07, 0x00, 0x4d, 0x45, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x6d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xb3, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x45, + 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xb3, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x4d, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x4d, 0x73, 0x01, 0x00, 0x00, 0x4d, + 0x74, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0xb0, 0xbe, 0xb1, 0xbe, + 0xb2, 0xbe, 0xb3, 0xbe, 0xb4, 0xbe, 0xb5, 0xbe, + 0xb6, 0xbe, 0xb7, 0xbe, 0xb8, 0xbe, 0xb9, 0xbe, + 0xba, 0xbe, 0xbb, 0x26, 0x0c, 0x00, 0x4d, 0x45, + 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, 0x00, + 0x04, 0xb5, 0x01, 0x00, 0x00, 0x04, 0xb6, 0x01, + 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, + 0xb8, 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, + 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, 0x04, 0xbb, + 0x01, 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, + 0x04, 0xbd, 0x01, 0x00, 0x00, 0x04, 0xbe, 0x01, + 0x00, 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xb4, 0x01, 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, + 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb7, + 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, + 0x04, 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, + 0x00, 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, + 0xbc, 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, + 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x5e, 0x01, 0x00, 0x00, + 0x0b, 0xbe, 0xbc, 0xbe, 0xbd, 0xbe, 0xbe, 0xbe, + 0xbf, 0xbe, 0xc0, 0xbe, 0xc1, 0xbe, 0xc2, 0x26, + 0x07, 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6d, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xc0, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, + 0x04, 0xc0, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xc0, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x4d, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x4d, + 0x73, 0x01, 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0xc3, 0xbe, 0xc4, 0xbe, 0xc5, 0xbe, 0xc6, + 0xbe, 0xc7, 0xbe, 0xc8, 0xbe, 0xc9, 0xbe, 0xca, + 0xbe, 0xcb, 0xbe, 0xcc, 0xbe, 0xcd, 0xbe, 0xce, + 0x26, 0x0c, 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, + 0x04, 0xc1, 0x01, 0x00, 0x00, 0x04, 0xc2, 0x01, + 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, 0x04, + 0xc4, 0x01, 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, + 0x00, 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, 0xc7, + 0x01, 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, + 0x04, 0xc9, 0x01, 0x00, 0x00, 0x04, 0xca, 0x01, + 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, 0x04, + 0xcc, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, + 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, 0x04, 0xcf, + 0x01, 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, + 0x04, 0xd1, 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, + 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, + 0xd4, 0x01, 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, + 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, + 0x01, 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x5e, 0x01, 0x00, 0x00, 0x0b, 0xbe, 0xcf, + 0xbe, 0xd0, 0xbe, 0xd1, 0xbe, 0xd2, 0xbe, 0xd3, + 0xbe, 0xd4, 0xbe, 0xd5, 0x26, 0x07, 0x00, 0x4d, + 0x45, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x6d, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xd9, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x45, 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x6f, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x4d, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x4d, 0x73, 0x01, 0x00, + 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0xd6, 0xbe, + 0xd7, 0xbe, 0xd8, 0xbe, 0xd9, 0xbe, 0xda, 0xbe, + 0xdb, 0xbe, 0xdc, 0xbe, 0xdd, 0xbe, 0xde, 0xbe, + 0xdf, 0xbe, 0xe0, 0xbe, 0xe1, 0x26, 0x0c, 0x00, + 0x4d, 0x45, 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, + 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, 0x00, 0x04, + 0xc3, 0x01, 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, + 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, + 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, + 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, + 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, 0x04, + 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, + 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, + 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, + 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, + 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, + 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, + 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, + 0x04, 0xd8, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x5e, 0x01, + 0x00, 0x00, 0x0b, 0xbe, 0xe2, 0xbe, 0xe3, 0xbe, + 0xe4, 0xbe, 0xe5, 0xbe, 0xe6, 0xbe, 0xe7, 0xbe, + 0xe8, 0x26, 0x07, 0x00, 0x4d, 0x45, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x6d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x45, 0x01, + 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xd9, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x70, 0x01, 0x00, 0x00, 0x4d, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x4d, 0x73, 0x01, 0x00, 0x00, 0x4d, 0x74, + 0x01, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0xe9, 0xbe, 0xea, 0xbe, 0xeb, + 0xbe, 0xec, 0xbe, 0xed, 0xbe, 0xee, 0xbe, 0xef, + 0xbe, 0xf0, 0xbe, 0xf1, 0xbe, 0xf2, 0xbe, 0xf3, + 0xbe, 0xf4, 0x26, 0x0c, 0x00, 0x4d, 0x45, 0x01, + 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x5e, 0x01, 0x00, 0x00, 0x0b, + 0xbe, 0xf5, 0xbe, 0xf6, 0xbe, 0xf7, 0xbe, 0xf8, + 0xbe, 0xf9, 0xbe, 0xfa, 0xbe, 0xfb, 0x26, 0x07, + 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6d, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, + 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, + 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, + 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, + 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, + 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, + 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, + 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, + 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, + 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, + 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, + 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, + 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, + 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, + 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, + 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, + 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, + 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, + 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, + 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, + 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, 0xfa, 0x01, + 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, + 0xfb, 0x01, 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, + 0x80, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x4d, 0x22, + 0x00, 0x00, 0x80, 0x04, 0xfd, 0x01, 0x00, 0x00, + 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, 0xfe, 0x01, + 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, + 0xff, 0x01, 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, + 0x80, 0x04, 0x00, 0x02, 0x00, 0x00, 0x4d, 0x26, + 0x00, 0x00, 0x80, 0x04, 0x01, 0x02, 0x00, 0x00, + 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, 0x02, 0x02, + 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, + 0x03, 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, + 0x80, 0x04, 0x04, 0x02, 0x00, 0x00, 0x4d, 0x2a, + 0x00, 0x00, 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, + 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, + 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, + 0x07, 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, + 0x80, 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, 0x2e, + 0x00, 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, + 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, + 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, + 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, + 0x80, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x32, + 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, + 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, + 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, + 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, + 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x36, + 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, + 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, + 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, + 0x13, 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, + 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x3a, + 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, + 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, + 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, + 0x17, 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, + 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x3e, + 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, + 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, + 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, + 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, + 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x42, + 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, + 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, + 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, + 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, + 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x46, + 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, + 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, + 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, + 0x23, 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, + 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x4a, + 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, + 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, + 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, + 0x27, 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, + 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x4e, + 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, + 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, + 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, + 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, + 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x52, + 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, + 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, + 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, + 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, + 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x56, + 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, + 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, + 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, + 0x33, 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, + 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x5a, + 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, + 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, + 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, + 0x37, 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, + 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x5e, + 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, + 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, + 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, + 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, + 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x62, + 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, + 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, + 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, + 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, + 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x66, + 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, + 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, + 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, + 0x43, 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, + 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x6a, + 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, + 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, + 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, + 0x47, 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, + 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x6e, + 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, + 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, + 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, + 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, + 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x72, + 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, + 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, + 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, + 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, + 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x76, + 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, + 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, + 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, + 0x53, 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, + 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x7a, + 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, + 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, + 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, + 0x57, 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, + 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x7e, + 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, + 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, + 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, + 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, + 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x82, + 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, + 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, + 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, + 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, + 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x86, + 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, + 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, + 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, + 0x63, 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, + 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x8a, + 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, + 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, + 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, + 0x67, 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, + 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x8e, + 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, + 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, + 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, + 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, + 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x92, + 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, + 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, + 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, + 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, + 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x96, + 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, + 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, + 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, + 0x73, 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, + 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x9a, + 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, + 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, + 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, + 0x77, 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, + 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x9e, + 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, + 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, + 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, + 0x7b, 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, + 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0xa2, + 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, + 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, + 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, + 0x7f, 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, + 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0xa6, + 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, + 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, + 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, + 0x83, 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, + 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0xaa, + 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, + 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, + 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, + 0x87, 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, + 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0xae, + 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, + 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, + 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, + 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, + 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xb2, + 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, + 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, + 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, + 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, + 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xb6, + 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, + 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, + 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, + 0x93, 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, + 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xba, + 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, + 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, + 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, + 0x97, 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, + 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xbe, + 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, + 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, + 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, + 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, + 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xc2, + 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, + 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, + 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, + 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, + 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xc6, + 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, + 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, + 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, + 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, + 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xca, + 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, + 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, + 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, + 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, + 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xce, + 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, + 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, + 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, + 0xab, 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, + 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xd2, + 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, + 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, + 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, + 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, + 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xd6, + 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, + 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, + 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, + 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, + 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, + 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, + 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xe2, + 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, + 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, + 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, + 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xe6, + 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, + 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, + 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x80, 0x04, 0x04, 0x01, 0x00, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, 0x45, 0x01, + 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, + 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, + 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, + 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, + 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, + 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, + 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, + 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, + 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, + 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, + 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, + 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, + 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, + 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, + 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, + 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, + 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, + 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, + 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, + 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, + 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, 0xfa, 0x01, + 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, + 0xfb, 0x01, 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, + 0x80, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x4d, 0x22, + 0x00, 0x00, 0x80, 0x04, 0xfd, 0x01, 0x00, 0x00, + 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, 0xfe, 0x01, + 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, + 0xff, 0x01, 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, + 0x80, 0x04, 0x00, 0x02, 0x00, 0x00, 0x4d, 0x26, + 0x00, 0x00, 0x80, 0x04, 0x01, 0x02, 0x00, 0x00, + 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, 0x02, 0x02, + 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, + 0x03, 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, + 0x80, 0x04, 0x04, 0x02, 0x00, 0x00, 0x4d, 0x2a, + 0x00, 0x00, 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, + 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, + 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, + 0x07, 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, + 0x80, 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, 0x2e, + 0x00, 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, + 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, + 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, + 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, + 0x80, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x32, + 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, + 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, + 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, + 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, + 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x36, + 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, + 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, + 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, + 0x13, 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, + 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x3a, + 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, + 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, + 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, + 0x17, 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, + 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x3e, + 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, + 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, + 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, + 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, + 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x42, + 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, + 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, + 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, + 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, + 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x46, + 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, + 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, + 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, + 0x23, 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, + 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x4a, + 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, + 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, + 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, + 0x27, 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, + 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x4e, + 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, + 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, + 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, + 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, + 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x52, + 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, + 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, + 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, + 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, + 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x56, + 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, + 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, + 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, + 0x33, 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, + 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x5a, + 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, + 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, + 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, + 0x37, 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, + 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x5e, + 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, + 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, + 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, + 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, + 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x62, + 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, + 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, + 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, + 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, + 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x66, + 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, + 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, + 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, + 0x43, 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, + 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x6a, + 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, + 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, + 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, + 0x47, 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, + 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x6e, + 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, + 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, + 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, + 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, + 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x72, + 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, + 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, + 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, + 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, + 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x76, + 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, + 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, + 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, + 0x53, 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, + 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x7a, + 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, + 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, + 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, + 0x57, 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, + 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x7e, + 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, + 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, + 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, + 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, + 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x82, + 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, + 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, + 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, + 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, + 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x86, + 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, + 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, + 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, + 0x63, 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, + 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x8a, + 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, + 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, + 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, + 0x67, 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, + 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x8e, + 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, + 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, + 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, + 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, + 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x92, + 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, + 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, + 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, + 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, + 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x96, + 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, + 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, + 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, + 0x73, 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, + 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x9a, + 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, + 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, + 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, + 0x77, 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, + 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x9e, + 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, + 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, + 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, + 0x7b, 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, + 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0xa2, + 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, + 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, + 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, + 0x7f, 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, + 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0xa6, + 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, + 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, + 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, + 0x83, 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, + 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0xaa, + 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, + 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, + 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, + 0x87, 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, + 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0xae, + 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, + 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, + 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, + 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, + 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xb2, + 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, + 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, + 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, + 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, + 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xb6, + 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, + 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, + 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, + 0x93, 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, + 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xba, + 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, + 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, + 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, + 0x97, 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, + 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xbe, + 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, + 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, + 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, + 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, + 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xc2, + 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, + 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, + 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, + 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, + 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xc6, + 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, + 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, + 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, + 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, + 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xca, + 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, + 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, + 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, + 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, + 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xce, + 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, + 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, + 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, + 0xab, 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, + 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xd2, + 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, + 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, + 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, + 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, + 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xd6, + 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, + 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, + 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, + 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, + 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, + 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, + 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xe2, + 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, + 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, + 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, + 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xe6, + 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, + 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, + 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, + 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, + 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, + 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, + 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, + 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, + 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, + 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, + 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, + 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, + 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, + 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, + 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, + 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, + 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, + 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, + 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, + 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, + 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, + 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, + 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, + 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, 0xfa, 0x01, + 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, + 0xfb, 0x01, 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, + 0x80, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x4d, 0x22, + 0x00, 0x00, 0x80, 0x04, 0xfd, 0x01, 0x00, 0x00, + 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, 0xfe, 0x01, + 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, + 0xff, 0x01, 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, + 0x80, 0x04, 0x00, 0x02, 0x00, 0x00, 0x4d, 0x26, + 0x00, 0x00, 0x80, 0x04, 0x01, 0x02, 0x00, 0x00, + 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, 0x02, 0x02, + 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, + 0x03, 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, + 0x80, 0x04, 0x04, 0x02, 0x00, 0x00, 0x4d, 0x2a, + 0x00, 0x00, 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, + 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, + 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, + 0x07, 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, + 0x80, 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, 0x2e, + 0x00, 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, + 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, + 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, + 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, + 0x80, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x32, + 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, + 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, + 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, + 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, + 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x36, + 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, + 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, + 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, + 0x13, 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, + 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x3a, + 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, + 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, + 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, + 0x17, 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, + 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x3e, + 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, + 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, + 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, + 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, + 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x42, + 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, + 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, + 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, + 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, + 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x46, + 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, + 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, + 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, + 0x23, 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, + 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x4a, + 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, + 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, + 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, + 0x27, 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, + 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x4e, + 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, + 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, + 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, + 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, + 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x52, + 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, + 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, + 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, + 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, + 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x56, + 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, + 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, + 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, + 0x33, 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, + 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x5a, + 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, + 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, + 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, + 0x37, 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, + 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x5e, + 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, + 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, + 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, + 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, + 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x62, + 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, + 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, + 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, + 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, + 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x66, + 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, + 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, + 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, + 0x43, 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, + 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x6a, + 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, + 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, + 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, + 0x47, 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, + 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x6e, + 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, + 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, + 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, + 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, + 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x72, + 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, + 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, + 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, + 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, + 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x76, + 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, + 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, + 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, + 0x53, 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, + 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x7a, + 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, + 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, + 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, + 0x57, 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, + 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x7e, + 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, + 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, + 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, + 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, + 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x82, + 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, + 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, + 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, + 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, + 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x86, + 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, + 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, + 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, + 0x63, 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, + 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x8a, + 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, + 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, + 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, + 0x67, 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, + 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x8e, + 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, + 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, + 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, + 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, + 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x92, + 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, + 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, + 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, + 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, + 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x96, + 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, + 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, + 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, + 0x73, 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, + 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x9a, + 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, + 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, + 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, + 0x77, 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, + 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x9e, + 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, + 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, + 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, + 0x7b, 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, + 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0xa2, + 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, + 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, + 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, + 0x7f, 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, + 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0xa6, + 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, + 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, + 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, + 0x83, 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, + 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0xaa, + 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, + 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, + 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, + 0x87, 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, + 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0xae, + 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, + 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, + 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, + 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, + 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xb2, + 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, + 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, + 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, + 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, + 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xb6, + 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, + 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, + 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, + 0x93, 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, + 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xba, + 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, + 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, + 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, + 0x97, 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, + 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xbe, + 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, + 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, + 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, + 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, + 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xc2, + 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, + 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, + 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, + 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, + 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xc6, + 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, + 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, + 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, + 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, + 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xca, + 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, + 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, + 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, + 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, + 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xce, + 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, + 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, + 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, + 0xab, 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, + 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xd2, + 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, + 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, + 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, + 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, + 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xd6, + 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, + 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, + 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, + 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, + 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, + 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, + 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xe2, + 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, + 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, + 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, + 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xe6, + 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, + 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, + 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, + 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x4d, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x4d, + 0x73, 0x01, 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0xfc, 0xbe, 0xfd, 0xbe, 0xfe, 0xbe, 0xff, + 0x02, 0x00, 0x01, 0x00, 0x00, 0x02, 0x01, 0x01, + 0x00, 0x00, 0x02, 0x02, 0x01, 0x00, 0x00, 0x02, + 0x03, 0x01, 0x00, 0x00, 0x02, 0x04, 0x01, 0x00, + 0x00, 0x02, 0x05, 0x01, 0x00, 0x00, 0x02, 0x06, + 0x01, 0x00, 0x00, 0x02, 0x07, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x04, 0xc9, 0x02, + 0x00, 0x00, 0x04, 0xca, 0x02, 0x00, 0x00, 0x04, + 0xcb, 0x02, 0x00, 0x00, 0x04, 0xcc, 0x02, 0x00, + 0x00, 0x04, 0xcd, 0x02, 0x00, 0x00, 0x04, 0xce, + 0x02, 0x00, 0x00, 0x04, 0xcf, 0x02, 0x00, 0x00, + 0x04, 0xd0, 0x02, 0x00, 0x00, 0x04, 0xd1, 0x02, + 0x00, 0x00, 0x04, 0xd2, 0x02, 0x00, 0x00, 0x04, + 0xd3, 0x02, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x04, 0xca, + 0x02, 0x00, 0x00, 0x04, 0xcb, 0x02, 0x00, 0x00, + 0x04, 0xcc, 0x02, 0x00, 0x00, 0x04, 0xcd, 0x02, + 0x00, 0x00, 0x04, 0xce, 0x02, 0x00, 0x00, 0x04, + 0xcf, 0x02, 0x00, 0x00, 0x04, 0xd0, 0x02, 0x00, + 0x00, 0x04, 0xd1, 0x02, 0x00, 0x00, 0x04, 0xd2, + 0x02, 0x00, 0x00, 0x04, 0xd3, 0x02, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x5e, 0x01, 0x00, 0x00, 0x0b, 0x02, 0x08, + 0x01, 0x00, 0x00, 0x02, 0x09, 0x01, 0x00, 0x00, + 0x02, 0x0a, 0x01, 0x00, 0x00, 0x02, 0x0b, 0x01, + 0x00, 0x00, 0x02, 0x0c, 0x01, 0x00, 0x00, 0x02, + 0x0d, 0x01, 0x00, 0x00, 0x02, 0x0e, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x45, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x6d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xd4, 0x02, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x45, 0x01, + 0x00, 0x00, 0x04, 0xd4, 0x02, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xd4, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x70, 0x01, 0x00, 0x00, 0x4d, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x4d, 0x73, 0x01, 0x00, 0x00, 0x4d, 0x74, + 0x01, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0x02, 0x0f, 0x01, 0x00, 0x00, 0x02, + 0x10, 0x01, 0x00, 0x00, 0x02, 0x11, 0x01, 0x00, + 0x00, 0x02, 0x12, 0x01, 0x00, 0x00, 0x02, 0x13, + 0x01, 0x00, 0x00, 0x02, 0x14, 0x01, 0x00, 0x00, + 0x02, 0x15, 0x01, 0x00, 0x00, 0x02, 0x16, 0x01, + 0x00, 0x00, 0x02, 0x17, 0x01, 0x00, 0x00, 0x02, + 0x18, 0x01, 0x00, 0x00, 0x02, 0x19, 0x01, 0x00, + 0x00, 0x02, 0x1a, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, 0x04, 0x46, + 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x5e, + 0x01, 0x00, 0x00, 0x0b, 0x02, 0x1b, 0x01, 0x00, + 0x00, 0x02, 0x1c, 0x01, 0x00, 0x00, 0x02, 0x1d, + 0x01, 0x00, 0x00, 0x02, 0x1e, 0x01, 0x00, 0x00, + 0x02, 0x1f, 0x01, 0x00, 0x00, 0x02, 0x20, 0x01, + 0x00, 0x00, 0x02, 0x21, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6d, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xd5, 0x02, 0x00, 0x00, + 0x04, 0xd6, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x45, 0x01, 0x00, 0x00, 0x04, 0xd5, 0x02, + 0x00, 0x00, 0x04, 0xd6, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xd5, 0x02, 0x00, 0x00, 0x04, 0xd6, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x4d, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x4d, 0x73, + 0x01, 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, + 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x4d, 0xd7, 0x02, + 0x00, 0x00, 0x4d, 0xd8, 0x02, 0x00, 0x00, 0x0b, + 0x04, 0xd9, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xda, 0x02, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0xdb, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x02, 0x00, + 0x00, 0x04, 0xdd, 0x02, 0x00, 0x00, 0x4d, 0xde, + 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x02, 0x00, 0x00, + 0x0b, 0x04, 0xe0, 0x02, 0x00, 0x00, 0x4d, 0xdc, + 0x02, 0x00, 0x00, 0x04, 0xe1, 0x02, 0x00, 0x00, + 0x4d, 0xde, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x02, + 0x00, 0x00, 0x0b, 0x04, 0xe3, 0x02, 0x00, 0x00, + 0x4d, 0xdc, 0x02, 0x00, 0x00, 0x04, 0xe4, 0x02, + 0x00, 0x00, 0x4d, 0xde, 0x02, 0x00, 0x00, 0x4d, + 0xe5, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x02, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0xe7, 0x02, 0x00, 0x00, + 0x4d, 0xdf, 0x02, 0x00, 0x00, 0x04, 0xe8, 0x02, + 0x00, 0x00, 0x4d, 0xe9, 0x02, 0x00, 0x00, 0x04, + 0xea, 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x02, 0x00, + 0x00, 0x04, 0xec, 0x02, 0x00, 0x00, 0x4d, 0xed, + 0x02, 0x00, 0x00, 0x04, 0xee, 0x02, 0x00, 0x00, + 0x4d, 0xef, 0x02, 0x00, 0x00, 0x04, 0xf0, 0x02, + 0x00, 0x00, 0x4d, 0xf1, 0x02, 0x00, 0x00, 0x04, + 0xf2, 0x02, 0x00, 0x00, 0x4d, 0xf3, 0x02, 0x00, + 0x00, 0x4d, 0xd9, 0x02, 0x00, 0x00, 0x4d, 0xf4, + 0x02, 0x00, 0x00, 0x0b, 0x04, 0xf5, 0x02, 0x00, + 0x00, 0x4d, 0xf6, 0x02, 0x00, 0x00, 0x04, 0xf7, + 0x02, 0x00, 0x00, 0x4d, 0xf8, 0x02, 0x00, 0x00, + 0x04, 0xf9, 0x02, 0x00, 0x00, 0x4d, 0xfa, 0x02, + 0x00, 0x00, 0x04, 0xfb, 0x02, 0x00, 0x00, 0x4d, + 0xfc, 0x02, 0x00, 0x00, 0x04, 0xfd, 0x02, 0x00, + 0x00, 0x4d, 0xfe, 0x02, 0x00, 0x00, 0x04, 0xff, + 0x02, 0x00, 0x00, 0x4d, 0x00, 0x03, 0x00, 0x00, + 0x04, 0x01, 0x03, 0x00, 0x00, 0x4d, 0x02, 0x03, + 0x00, 0x00, 0x04, 0x03, 0x03, 0x00, 0x00, 0x4d, + 0x04, 0x03, 0x00, 0x00, 0x04, 0x05, 0x03, 0x00, + 0x00, 0x4d, 0x06, 0x03, 0x00, 0x00, 0x04, 0x07, + 0x03, 0x00, 0x00, 0x4d, 0x08, 0x03, 0x00, 0x00, + 0x04, 0x09, 0x03, 0x00, 0x00, 0x4d, 0x0a, 0x03, + 0x00, 0x00, 0x04, 0x0b, 0x03, 0x00, 0x00, 0x4d, + 0x0c, 0x03, 0x00, 0x00, 0x04, 0x0d, 0x03, 0x00, + 0x00, 0x4d, 0x0e, 0x03, 0x00, 0x00, 0x04, 0x0f, + 0x03, 0x00, 0x00, 0x4d, 0x10, 0x03, 0x00, 0x00, + 0x04, 0x11, 0x03, 0x00, 0x00, 0x4d, 0x12, 0x03, + 0x00, 0x00, 0x04, 0x13, 0x03, 0x00, 0x00, 0x4d, + 0x14, 0x03, 0x00, 0x00, 0x04, 0x15, 0x03, 0x00, + 0x00, 0x4d, 0x16, 0x03, 0x00, 0x00, 0x04, 0x17, + 0x03, 0x00, 0x00, 0x4d, 0x18, 0x03, 0x00, 0x00, + 0x04, 0x19, 0x03, 0x00, 0x00, 0x4d, 0x1a, 0x03, + 0x00, 0x00, 0x04, 0x1b, 0x03, 0x00, 0x00, 0x4d, + 0x1c, 0x03, 0x00, 0x00, 0x04, 0x1d, 0x03, 0x00, + 0x00, 0x4d, 0x1e, 0x03, 0x00, 0x00, 0x04, 0x1f, + 0x03, 0x00, 0x00, 0x4d, 0x20, 0x03, 0x00, 0x00, + 0x4d, 0x21, 0x03, 0x00, 0x00, 0x4d, 0x45, 0x00, + 0x00, 0x00, 0x24, 0x01, 0x00, 0xcc, 0x28, 0xc4, + 0x0c, 0x01, 0x00, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, + 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, + 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, + 0x31, 0x33, 0x07, 0x02, 0x37, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_mr_size = 25169; + +const uint8_t intl_mr[25169] = { + 0x01, 0xe2, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x6d, 0x72, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x10, + 0x7b, 0x31, 0x7d, 0x2c, 0x20, 0x7b, 0x30, 0x7d, + 0x0a, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, + 0x65, 0x64, 0x69, 0x75, 0x6d, 0x19, 0x7b, 0x00, + 0x31, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x30, 0x09, + 0x4b, 0x09, 0x1c, 0x09, 0x40, 0x09, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x08, 0x66, + 0x75, 0x6c, 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, + 0x02, 0x64, 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, + 0x06, 0x64, 0x20, 0x45, 0x04, 0x45, 0x64, 0x10, + 0x45, 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, + 0x06, 0x45, 0x68, 0x6d, 0x0e, 0x45, 0x20, 0x48, + 0x48, 0x3a, 0x6d, 0x6d, 0x06, 0x45, 0x48, 0x6d, + 0x16, 0x45, 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x20, 0x61, 0x08, 0x45, 0x68, 0x6d, + 0x73, 0x14, 0x45, 0x20, 0x48, 0x48, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x08, 0x45, 0x48, 0x6d, + 0x73, 0x06, 0x47, 0x20, 0x79, 0x04, 0x47, 0x79, + 0x0e, 0x4d, 0x4d, 0x4d, 0x20, 0x47, 0x20, 0x79, + 0x0a, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x14, 0x64, + 0x20, 0x4d, 0x4d, 0x4d, 0x2c, 0x20, 0x47, 0x20, + 0x79, 0x0c, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x64, + 0x1a, 0x45, 0x2c, 0x20, 0x64, 0x20, 0x4d, 0x4d, + 0x4d, 0x2c, 0x20, 0x47, 0x20, 0x79, 0x0e, 0x47, + 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x06, 0x68, + 0x20, 0x61, 0x02, 0x68, 0x04, 0x48, 0x48, 0x02, + 0x48, 0x0c, 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, + 0x04, 0x68, 0x6d, 0x08, 0x48, 0x3a, 0x6d, 0x6d, + 0x04, 0x48, 0x6d, 0x12, 0x68, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x61, 0x06, 0x68, 0x6d, + 0x73, 0x0e, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x06, 0x48, 0x6d, 0x73, 0x16, 0x68, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x20, + 0x76, 0x08, 0x68, 0x6d, 0x73, 0x76, 0x14, 0x48, + 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, + 0x76, 0x08, 0x48, 0x6d, 0x73, 0x76, 0x10, 0x68, + 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x20, 0x76, 0x06, + 0x68, 0x6d, 0x76, 0x0e, 0x48, 0x48, 0x3a, 0x6d, + 0x6d, 0x20, 0x76, 0x06, 0x48, 0x6d, 0x76, 0x02, + 0x4c, 0x02, 0x4d, 0x06, 0x64, 0x2f, 0x4d, 0x04, + 0x4d, 0x64, 0x0c, 0x45, 0x2c, 0x20, 0x64, 0x2f, + 0x4d, 0x06, 0x4d, 0x45, 0x64, 0x0a, 0x64, 0x64, + 0x2d, 0x4d, 0x4d, 0x08, 0x4d, 0x4d, 0x64, 0x64, + 0x06, 0x4c, 0x4c, 0x4c, 0x06, 0x4d, 0x4d, 0x4d, + 0x0a, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x08, 0x4d, + 0x4d, 0x4d, 0x64, 0x10, 0x45, 0x2c, 0x20, 0x64, + 0x20, 0x4d, 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, + 0x45, 0x64, 0x0c, 0x64, 0x20, 0x4d, 0x4d, 0x4d, + 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x0a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x04, 0x6d, 0x73, + 0x02, 0x79, 0x06, 0x4d, 0x2f, 0x79, 0x04, 0x79, + 0x4d, 0x0a, 0x64, 0x2f, 0x4d, 0x2f, 0x79, 0x06, + 0x79, 0x4d, 0x64, 0x10, 0x45, 0x2c, 0x20, 0x64, + 0x2f, 0x4d, 0x2f, 0x79, 0x08, 0x79, 0x4d, 0x45, + 0x64, 0x08, 0x4d, 0x4d, 0x2d, 0x79, 0x06, 0x79, + 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x20, 0x79, + 0x08, 0x79, 0x4d, 0x4d, 0x4d, 0x10, 0x64, 0x20, + 0x4d, 0x4d, 0x4d, 0x2c, 0x20, 0x79, 0x0a, 0x79, + 0x4d, 0x4d, 0x4d, 0x64, 0x16, 0x45, 0x2c, 0x20, + 0x64, 0x2c, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, + 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0c, + 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0a, 0x79, + 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, 0x51, 0x51, 0x51, + 0x20, 0x79, 0x08, 0x79, 0x51, 0x51, 0x51, 0x0c, + 0x51, 0x51, 0x51, 0x51, 0x20, 0x79, 0x0a, 0x79, + 0x51, 0x51, 0x51, 0x51, 0x20, 0x61, 0x76, 0x61, + 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x73, 0x1e, 0x45, 0x45, + 0x45, 0x45, 0x2c, 0x20, 0x64, 0x20, 0x4d, 0x4d, + 0x4d, 0x4d, 0x2c, 0x20, 0x79, 0x14, 0x79, 0x4d, + 0x4d, 0x4d, 0x4d, 0x45, 0x45, 0x45, 0x45, 0x64, + 0x12, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x2c, + 0x20, 0x79, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, + 0x64, 0x0c, 0x64, 0x2f, 0x4d, 0x2f, 0x79, 0x79, + 0x16, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x73, 0x1c, 0x68, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x20, 0x7a, + 0x7a, 0x7a, 0x7a, 0x12, 0x68, 0x6d, 0x6d, 0x73, + 0x73, 0x7a, 0x7a, 0x7a, 0x7a, 0x16, 0x68, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x20, + 0x7a, 0x08, 0x68, 0x6d, 0x73, 0x7a, 0x16, 0x74, + 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x73, 0x0e, 0x66, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x73, 0x05, 0x1c, 0x09, 0x3e, 0x09, 0x05, + 0x2b, 0x09, 0x47, 0x09, 0x05, 0x2e, 0x09, 0x3e, + 0x09, 0x03, 0x0f, 0x09, 0x05, 0x2e, 0x09, 0x47, + 0x09, 0x05, 0x1c, 0x09, 0x42, 0x09, 0x05, 0x1c, + 0x09, 0x41, 0x09, 0x03, 0x11, 0x09, 0x03, 0x38, + 0x09, 0x05, 0x28, 0x09, 0x4b, 0x09, 0x05, 0x21, + 0x09, 0x3f, 0x09, 0x0c, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x09, 0x1c, 0x09, 0x3e, 0x09, 0x28, + 0x09, 0x47, 0x09, 0x0d, 0x2b, 0x09, 0x47, 0x09, + 0x2c, 0x09, 0x4d, 0x09, 0x30, 0x09, 0x41, 0x09, + 0x0b, 0x2e, 0x09, 0x3e, 0x09, 0x30, 0x09, 0x4d, + 0x09, 0x1a, 0x09, 0x0b, 0x0f, 0x09, 0x2a, 0x09, + 0x4d, 0x09, 0x30, 0x09, 0x3f, 0x09, 0x07, 0x1c, + 0x09, 0x42, 0x09, 0x28, 0x09, 0x09, 0x1c, 0x09, + 0x41, 0x09, 0x32, 0x09, 0x48, 0x09, 0x05, 0x11, + 0x09, 0x17, 0x09, 0x0d, 0x38, 0x09, 0x2a, 0x09, + 0x4d, 0x09, 0x1f, 0x09, 0x47, 0x09, 0x02, 0x09, + 0x0b, 0x11, 0x09, 0x15, 0x09, 0x4d, 0x09, 0x1f, + 0x09, 0x4b, 0x09, 0x0f, 0x28, 0x09, 0x4b, 0x09, + 0x35, 0x09, 0x4d, 0x09, 0x39, 0x09, 0x47, 0x09, + 0x02, 0x09, 0x0b, 0x21, 0x09, 0x3f, 0x09, 0x38, + 0x09, 0x47, 0x09, 0x02, 0x09, 0x11, 0x1c, 0x09, + 0x3e, 0x09, 0x28, 0x09, 0x47, 0x09, 0x35, 0x09, + 0x3e, 0x09, 0x30, 0x09, 0x40, 0x09, 0x15, 0x2b, + 0x09, 0x47, 0x09, 0x2c, 0x09, 0x4d, 0x09, 0x30, + 0x09, 0x41, 0x09, 0x35, 0x09, 0x3e, 0x09, 0x30, + 0x09, 0x40, 0x09, 0x0d, 0x0f, 0x09, 0x2a, 0x09, + 0x4d, 0x09, 0x30, 0x09, 0x3f, 0x09, 0x32, 0x09, + 0x0b, 0x11, 0x09, 0x17, 0x09, 0x38, 0x09, 0x4d, + 0x09, 0x1f, 0x09, 0x11, 0x38, 0x09, 0x2a, 0x09, + 0x4d, 0x09, 0x1f, 0x09, 0x47, 0x09, 0x02, 0x09, + 0x2c, 0x09, 0x30, 0x09, 0x0f, 0x11, 0x09, 0x15, + 0x09, 0x4d, 0x09, 0x1f, 0x09, 0x4b, 0x09, 0x2c, + 0x09, 0x30, 0x09, 0x13, 0x28, 0x09, 0x4b, 0x09, + 0x35, 0x09, 0x4d, 0x09, 0x39, 0x09, 0x47, 0x09, + 0x02, 0x09, 0x2c, 0x09, 0x30, 0x09, 0x0f, 0x21, + 0x09, 0x3f, 0x09, 0x38, 0x09, 0x47, 0x09, 0x02, + 0x09, 0x2c, 0x09, 0x30, 0x09, 0x0c, 0x6d, 0x6f, + 0x6e, 0x74, 0x68, 0x73, 0x03, 0x30, 0x09, 0x05, + 0x38, 0x09, 0x4b, 0x09, 0x05, 0x2e, 0x09, 0x02, + 0x09, 0x05, 0x2c, 0x09, 0x41, 0x09, 0x05, 0x17, + 0x09, 0x41, 0x09, 0x05, 0x36, 0x09, 0x41, 0x09, + 0x03, 0x36, 0x09, 0x07, 0x30, 0x09, 0x35, 0x09, + 0x3f, 0x09, 0x07, 0x38, 0x09, 0x4b, 0x09, 0x2e, + 0x09, 0x09, 0x2e, 0x09, 0x02, 0x09, 0x17, 0x09, + 0x33, 0x09, 0x07, 0x2c, 0x09, 0x41, 0x09, 0x27, + 0x09, 0x09, 0x17, 0x09, 0x41, 0x09, 0x30, 0x09, + 0x41, 0x09, 0x0b, 0x36, 0x09, 0x41, 0x09, 0x15, + 0x09, 0x4d, 0x09, 0x30, 0x09, 0x07, 0x36, 0x09, + 0x28, 0x09, 0x3f, 0x09, 0x0d, 0x30, 0x09, 0x35, + 0x09, 0x3f, 0x09, 0x35, 0x09, 0x3e, 0x09, 0x30, + 0x09, 0x0d, 0x38, 0x09, 0x4b, 0x09, 0x2e, 0x09, + 0x35, 0x09, 0x3e, 0x09, 0x30, 0x09, 0x0f, 0x2e, + 0x09, 0x02, 0x09, 0x17, 0x09, 0x33, 0x09, 0x35, + 0x09, 0x3e, 0x09, 0x30, 0x09, 0x0d, 0x2c, 0x09, + 0x41, 0x09, 0x27, 0x09, 0x35, 0x09, 0x3e, 0x09, + 0x30, 0x09, 0x0f, 0x17, 0x09, 0x41, 0x09, 0x30, + 0x09, 0x41, 0x09, 0x35, 0x09, 0x3e, 0x09, 0x30, + 0x09, 0x11, 0x36, 0x09, 0x41, 0x09, 0x15, 0x09, + 0x4d, 0x09, 0x30, 0x09, 0x35, 0x09, 0x3e, 0x09, + 0x30, 0x09, 0x0d, 0x36, 0x09, 0x28, 0x09, 0x3f, + 0x09, 0x35, 0x09, 0x3e, 0x09, 0x30, 0x09, 0x08, + 0x64, 0x61, 0x79, 0x73, 0x04, 0x42, 0x45, 0x08, + 0x65, 0x72, 0x61, 0x73, 0x0b, 0x2e, 0x09, 0x2e, + 0x00, 0x2a, 0x09, 0x42, 0x09, 0x2e, 0x00, 0x04, + 0x61, 0x6d, 0x09, 0x2e, 0x09, 0x2e, 0x00, 0x09, + 0x09, 0x2e, 0x00, 0x04, 0x70, 0x6d, 0x14, 0x64, + 0x61, 0x79, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, + 0x73, 0x06, 0x4d, 0x30, 0x31, 0x06, 0x4d, 0x30, + 0x32, 0x06, 0x4d, 0x30, 0x33, 0x06, 0x4d, 0x30, + 0x34, 0x06, 0x4d, 0x30, 0x35, 0x06, 0x4d, 0x30, + 0x36, 0x06, 0x4d, 0x30, 0x37, 0x06, 0x4d, 0x30, + 0x38, 0x06, 0x4d, 0x30, 0x39, 0x06, 0x4d, 0x31, + 0x30, 0x06, 0x4d, 0x31, 0x31, 0x06, 0x4d, 0x31, + 0x32, 0x08, 0x54, 0x6f, 0x75, 0x74, 0x08, 0x42, + 0x61, 0x62, 0x61, 0x0a, 0x48, 0x61, 0x74, 0x6f, + 0x72, 0x0a, 0x4b, 0x69, 0x61, 0x68, 0x6b, 0x08, + 0x54, 0x6f, 0x62, 0x61, 0x0c, 0x41, 0x6d, 0x73, + 0x68, 0x69, 0x72, 0x10, 0x42, 0x61, 0x72, 0x61, + 0x6d, 0x68, 0x61, 0x74, 0x12, 0x42, 0x61, 0x72, + 0x61, 0x6d, 0x6f, 0x75, 0x64, 0x61, 0x0e, 0x42, + 0x61, 0x73, 0x68, 0x61, 0x6e, 0x73, 0x0a, 0x50, + 0x61, 0x6f, 0x6e, 0x61, 0x08, 0x45, 0x70, 0x65, + 0x70, 0x0a, 0x4d, 0x65, 0x73, 0x72, 0x61, 0x0a, + 0x4e, 0x61, 0x73, 0x69, 0x65, 0x08, 0x45, 0x52, + 0x41, 0x30, 0x08, 0x45, 0x52, 0x41, 0x31, 0x10, + 0x4d, 0x65, 0x73, 0x6b, 0x65, 0x72, 0x65, 0x6d, + 0x0c, 0x54, 0x65, 0x6b, 0x65, 0x6d, 0x74, 0x0a, + 0x48, 0x65, 0x64, 0x61, 0x72, 0x0c, 0x54, 0x61, + 0x68, 0x73, 0x61, 0x73, 0x06, 0x54, 0x65, 0x72, + 0x0e, 0x59, 0x65, 0x6b, 0x61, 0x74, 0x69, 0x74, + 0x0e, 0x4d, 0x65, 0x67, 0x61, 0x62, 0x69, 0x74, + 0x0c, 0x4d, 0x69, 0x61, 0x7a, 0x69, 0x61, 0x0c, + 0x47, 0x65, 0x6e, 0x62, 0x6f, 0x74, 0x08, 0x53, + 0x65, 0x6e, 0x65, 0x0a, 0x48, 0x61, 0x6d, 0x6c, + 0x65, 0x0e, 0x4e, 0x65, 0x68, 0x61, 0x73, 0x73, + 0x65, 0x0e, 0x50, 0x61, 0x67, 0x75, 0x6d, 0x65, + 0x6e, 0x13, 0x07, 0x09, 0x2e, 0x00, 0x20, 0x00, + 0x38, 0x09, 0x2e, 0x00, 0x20, 0x00, 0x2a, 0x09, + 0x42, 0x09, 0x2e, 0x00, 0x0b, 0x07, 0x09, 0x2e, + 0x00, 0x20, 0x00, 0x38, 0x09, 0x2e, 0x00, 0x19, + 0x08, 0x09, 0x38, 0x09, 0x3e, 0x09, 0x2a, 0x09, + 0x42, 0x09, 0x30, 0x09, 0x4d, 0x09, 0x35, 0x09, + 0x20, 0x00, 0x2f, 0x09, 0x41, 0x09, 0x17, 0x09, + 0x13, 0x16, 0x09, 0x4d, 0x09, 0x30, 0x09, 0x3f, + 0x09, 0x2e, 0x00, 0x20, 0x00, 0x2f, 0x09, 0x41, + 0x09, 0x2e, 0x00, 0x17, 0x08, 0x09, 0x38, 0x09, + 0x35, 0x09, 0x40, 0x09, 0x38, 0x09, 0x28, 0x09, + 0x2a, 0x09, 0x42, 0x09, 0x30, 0x09, 0x4d, 0x09, + 0x35, 0x09, 0x0d, 0x08, 0x09, 0x38, 0x09, 0x35, + 0x09, 0x40, 0x09, 0x38, 0x09, 0x28, 0x09, 0x15, + 0x16, 0x09, 0x4d, 0x09, 0x30, 0x09, 0x3f, 0x09, + 0x38, 0x09, 0x4d, 0x09, 0x24, 0x09, 0x2f, 0x09, + 0x41, 0x09, 0x17, 0x09, 0x0c, 0x54, 0x69, 0x73, + 0x68, 0x72, 0x69, 0x0e, 0x48, 0x65, 0x73, 0x68, + 0x76, 0x61, 0x6e, 0x0c, 0x4b, 0x69, 0x73, 0x6c, + 0x65, 0x76, 0x0a, 0x54, 0x65, 0x76, 0x65, 0x74, + 0x0c, 0x53, 0x68, 0x65, 0x76, 0x61, 0x74, 0x0c, + 0x41, 0x64, 0x61, 0x72, 0x20, 0x49, 0x08, 0x41, + 0x64, 0x61, 0x72, 0x0a, 0x4e, 0x69, 0x73, 0x61, + 0x6e, 0x08, 0x49, 0x79, 0x61, 0x72, 0x0a, 0x53, + 0x69, 0x76, 0x61, 0x6e, 0x0a, 0x54, 0x61, 0x6d, + 0x75, 0x7a, 0x04, 0x41, 0x76, 0x08, 0x45, 0x6c, + 0x75, 0x6c, 0x0e, 0x41, 0x64, 0x61, 0x72, 0x20, + 0x49, 0x49, 0x04, 0x41, 0x4d, 0x0e, 0x43, 0x68, + 0x61, 0x69, 0x74, 0x72, 0x61, 0x10, 0x56, 0x61, + 0x69, 0x73, 0x61, 0x6b, 0x68, 0x61, 0x10, 0x4a, + 0x79, 0x61, 0x69, 0x73, 0x74, 0x68, 0x61, 0x0c, + 0x41, 0x73, 0x61, 0x64, 0x68, 0x61, 0x0e, 0x53, + 0x72, 0x61, 0x76, 0x61, 0x6e, 0x61, 0x0c, 0x42, + 0x68, 0x61, 0x64, 0x72, 0x61, 0x0c, 0x41, 0x73, + 0x76, 0x69, 0x6e, 0x61, 0x0e, 0x4b, 0x61, 0x72, + 0x74, 0x69, 0x6b, 0x61, 0x14, 0x41, 0x67, 0x72, + 0x61, 0x68, 0x61, 0x79, 0x61, 0x6e, 0x61, 0x0a, + 0x50, 0x61, 0x75, 0x73, 0x61, 0x0a, 0x4d, 0x61, + 0x67, 0x68, 0x61, 0x10, 0x50, 0x68, 0x61, 0x6c, + 0x67, 0x75, 0x6e, 0x61, 0x08, 0x53, 0x61, 0x6b, + 0x61, 0x08, 0x4d, 0x75, 0x68, 0x2e, 0x08, 0x53, + 0x61, 0x66, 0x2e, 0x0c, 0x52, 0x61, 0x62, 0x2e, + 0x20, 0x49, 0x0e, 0x52, 0x61, 0x62, 0x2e, 0x20, + 0x49, 0x49, 0x0c, 0x4a, 0x75, 0x6d, 0x2e, 0x20, + 0x49, 0x0e, 0x4a, 0x75, 0x6d, 0x2e, 0x20, 0x49, + 0x49, 0x08, 0x52, 0x61, 0x6a, 0x2e, 0x08, 0x53, + 0x68, 0x61, 0x2e, 0x08, 0x52, 0x61, 0x6d, 0x2e, + 0x0a, 0x53, 0x68, 0x61, 0x77, 0x2e, 0x11, 0x44, + 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, + 0x00, 0x2d, 0x00, 0x51, 0x00, 0x2e, 0x00, 0x11, + 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, + 0x6c, 0x00, 0x2d, 0x00, 0x48, 0x00, 0x2e, 0x00, + 0x10, 0x4d, 0x75, 0x68, 0x61, 0x72, 0x72, 0x61, + 0x6d, 0x0a, 0x53, 0x61, 0x66, 0x61, 0x72, 0x0f, + 0x52, 0x00, 0x61, 0x00, 0x62, 0x00, 0x69, 0x00, + 0xbb, 0x02, 0x20, 0x00, 0x49, 0x00, 0x11, 0x52, + 0x00, 0x61, 0x00, 0x62, 0x00, 0x69, 0x00, 0xbb, + 0x02, 0x20, 0x00, 0x49, 0x00, 0x49, 0x00, 0x10, + 0x4a, 0x75, 0x6d, 0x61, 0x64, 0x61, 0x20, 0x49, + 0x12, 0x4a, 0x75, 0x6d, 0x61, 0x64, 0x61, 0x20, + 0x49, 0x49, 0x0a, 0x52, 0x61, 0x6a, 0x61, 0x62, + 0x0f, 0x53, 0x00, 0x68, 0x00, 0x61, 0x00, 0xbb, + 0x02, 0x62, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x0e, + 0x52, 0x61, 0x6d, 0x61, 0x64, 0x61, 0x6e, 0x0e, + 0x53, 0x68, 0x61, 0x77, 0x77, 0x61, 0x6c, 0x19, + 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, + 0x6c, 0x00, 0x2d, 0x00, 0x51, 0x00, 0x69, 0x00, + 0xbb, 0x02, 0x64, 0x00, 0x61, 0x00, 0x68, 0x00, + 0x19, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, + 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x48, 0x00, 0x69, + 0x00, 0x6a, 0x00, 0x6a, 0x00, 0x61, 0x00, 0x68, + 0x00, 0x04, 0x41, 0x48, 0x1f, 0x54, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x36, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x36, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x13, 0x20, 0x36, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x36, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x29, 0x00, 0x21, + 0x53, 0x00, 0x68, 0x00, 0x75, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x57, + 0x00, 0x61, 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x1f, 0x52, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x1d, 0x59, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, + 0x4a, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6b, 0x00, + 0x61, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x2d, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x2d, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x2b, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x2d, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, 0x2d, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x2a, 0x4a, 0x69, 0x6e, 0x67, 0x6f, 0x2d, + 0x6b, 0x65, 0x69, 0x75, 0x6e, 0x20, 0x28, 0x37, + 0x36, 0x37, 0x2d, 0x37, 0x37, 0x30, 0x29, 0x1d, + 0x48, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x37, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, 0x44, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x64, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x38, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x4d, 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x38, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4a, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x61, 0x00, 0x6a, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, + 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x53, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x20, 0x54, 0x65, + 0x6e, 0x2d, 0x61, 0x6e, 0x20, 0x28, 0x38, 0x35, + 0x37, 0x2d, 0x38, 0x35, 0x39, 0x29, 0x1f, 0x4a, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, + 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, 0x6e, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x34, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1b, 0x4c, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4b, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x1d, 0x41, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1d, + 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x4a, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x29, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, + 0x4a, 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x29, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, + 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4c, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x25, 0x4a, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x24, 0x54, 0x65, 0x6e, 0x2d, 0x65, 0x69, + 0x20, 0x28, 0x31, 0x31, 0x31, 0x30, 0x2d, 0x31, + 0x31, 0x31, 0x33, 0x29, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, + 0x4d, 0x01, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, + 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x6a, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x48, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x45, + 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, + 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6d, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4a, + 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x59, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x21, 0x4a, 0x00, 0x75, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x29, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4a, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x29, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, + 0x4a, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x27, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x75, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x29, 0x52, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x4e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, + 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, 0x00, + 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1f, 0x4c, 0x01, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x74, 0x00, 0x73, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x27, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x45, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x21, 0x4d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, 0x69, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x27, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x21, 0x45, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x61, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x41, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, 0x02, + 0x54, 0x02, 0x53, 0x0a, 0x4d, 0x65, 0x69, 0x6a, + 0x69, 0x0d, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x0b, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x0c, 0x48, 0x65, 0x69, 0x73, 0x65, 0x69, + 0x12, 0x46, 0x61, 0x72, 0x76, 0x61, 0x72, 0x64, + 0x69, 0x6e, 0x16, 0x4f, 0x72, 0x64, 0x69, 0x62, + 0x65, 0x68, 0x65, 0x73, 0x68, 0x74, 0x0e, 0x4b, + 0x68, 0x6f, 0x72, 0x64, 0x61, 0x64, 0x06, 0x54, + 0x69, 0x72, 0x0c, 0x4d, 0x6f, 0x72, 0x64, 0x61, + 0x64, 0x12, 0x53, 0x68, 0x61, 0x68, 0x72, 0x69, + 0x76, 0x61, 0x72, 0x08, 0x4d, 0x65, 0x68, 0x72, + 0x08, 0x41, 0x62, 0x61, 0x6e, 0x08, 0x41, 0x7a, + 0x61, 0x72, 0x06, 0x44, 0x65, 0x79, 0x0c, 0x42, + 0x61, 0x68, 0x6d, 0x61, 0x6e, 0x0c, 0x45, 0x73, + 0x66, 0x61, 0x6e, 0x64, 0x04, 0x41, 0x50, 0x1a, + 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x52, + 0x2e, 0x4f, 0x2e, 0x43, 0x2e, 0x0c, 0x52, 0x2e, + 0x4f, 0x2e, 0x43, 0x2e, 0x12, 0x63, 0x61, 0x6c, + 0x65, 0x6e, 0x64, 0x61, 0x72, 0x73, 0x08, 0x64, + 0x61, 0x74, 0x65, 0x08, 0x64, 0x65, 0x76, 0x61, + 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, 0x75, + 0x10, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0x1e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, + 0x6e, 0x26, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x6e, 0x65, + 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, + 0x74, 0x74, 0x65, 0x72, 0x6e, 0x0e, 0x64, 0x65, + 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x24, 0x7b, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0x3a, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x10, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x2a, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x40, 0x7b, 0x6d, + 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, + 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x0e, 0x70, + 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x10, 0x70, + 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x02, + 0x2e, 0x02, 0x2c, 0x0a, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x06, 0x4e, 0x61, 0x4e, 0x06, 0x6e, 0x61, + 0x6e, 0x02, 0x2b, 0x10, 0x70, 0x6c, 0x75, 0x73, + 0x53, 0x69, 0x67, 0x6e, 0x02, 0x2d, 0x12, 0x6d, + 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x02, 0x25, 0x16, 0x70, 0x65, 0x72, 0x63, 0x65, + 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x03, 0x1e, + 0x22, 0x10, 0x69, 0x6e, 0x66, 0x69, 0x6e, 0x69, + 0x74, 0x79, 0x0e, 0x73, 0x79, 0x6d, 0x62, 0x6f, + 0x6c, 0x73, 0x04, 0x41, 0x24, 0x06, 0x41, 0x55, + 0x44, 0x04, 0x52, 0x24, 0x06, 0x42, 0x52, 0x4c, + 0x06, 0x43, 0x41, 0x24, 0x06, 0x43, 0x41, 0x44, + 0x06, 0x43, 0x4e, 0xa5, 0x06, 0x43, 0x4e, 0x59, + 0x03, 0xac, 0x20, 0x06, 0x45, 0x55, 0x52, 0x02, + 0xa3, 0x06, 0x47, 0x42, 0x50, 0x06, 0x48, 0x4b, + 0x24, 0x06, 0x48, 0x4b, 0x44, 0x03, 0xaa, 0x20, + 0x06, 0x49, 0x4c, 0x53, 0x03, 0xb9, 0x20, 0x06, + 0x49, 0x4e, 0x52, 0x06, 0x4a, 0x50, 0xa5, 0x06, + 0x4a, 0x50, 0x59, 0x03, 0xa9, 0x20, 0x06, 0x4b, + 0x52, 0x57, 0x06, 0x4d, 0x58, 0x24, 0x06, 0x4d, + 0x58, 0x4e, 0x06, 0x4e, 0x5a, 0x24, 0x06, 0x4e, + 0x5a, 0x44, 0x03, 0x3f, 0x0e, 0x06, 0x54, 0x48, + 0x42, 0x06, 0x4e, 0x54, 0x24, 0x06, 0x54, 0x57, + 0x44, 0x02, 0x24, 0x06, 0x55, 0x53, 0x44, 0x03, + 0xab, 0x20, 0x06, 0x56, 0x4e, 0x44, 0x08, 0x46, + 0x43, 0x46, 0x41, 0x06, 0x58, 0x41, 0x46, 0x06, + 0x45, 0x43, 0x24, 0x06, 0x58, 0x43, 0x44, 0x06, + 0x43, 0x46, 0x41, 0x06, 0x58, 0x4f, 0x46, 0x08, + 0x43, 0x46, 0x50, 0x46, 0x06, 0x58, 0x50, 0x46, + 0x14, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, + 0x69, 0x65, 0x73, 0x52, 0x6e, 0x6f, 0x64, 0x65, + 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, + 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2f, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, + 0x61, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x70, 0x2f, + 0x6d, 0x72, 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, + 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, 0x27, 0x00, + 0x89, 0x01, 0xc3, 0x6b, 0x01, 0xa0, 0x01, 0x00, + 0x00, 0x00, 0x39, 0xd0, 0x00, 0x00, 0x00, 0x43, + 0xd1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd2, 0x00, + 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd4, 0x00, 0x00, 0x00, 0x04, 0xd5, 0x00, + 0x00, 0x00, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x04, + 0xd7, 0x00, 0x00, 0x00, 0x04, 0xd8, 0x00, 0x00, + 0x00, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x04, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xdb, 0x00, 0x00, 0x00, + 0x04, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xdd, 0x00, + 0x00, 0x00, 0x04, 0xde, 0x00, 0x00, 0x00, 0x04, + 0xdf, 0x00, 0x00, 0x00, 0x04, 0xe0, 0x00, 0x00, + 0x00, 0x04, 0xe1, 0x00, 0x00, 0x00, 0x04, 0xe2, + 0x00, 0x00, 0x00, 0x26, 0x0f, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x00, 0x0a, 0x4d, 0xe4, 0x00, 0x00, + 0x00, 0x0a, 0x4d, 0xe5, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, + 0xe8, 0x00, 0x00, 0x00, 0x04, 0xe9, 0x00, 0x00, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x04, 0xe9, + 0x00, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0xec, + 0x00, 0x00, 0x00, 0x04, 0xed, 0x00, 0x00, 0x00, + 0x4d, 0xee, 0x00, 0x00, 0x00, 0x04, 0xef, 0x00, + 0x00, 0x00, 0x4d, 0xf0, 0x00, 0x00, 0x00, 0x04, + 0xf1, 0x00, 0x00, 0x00, 0x4d, 0xf2, 0x00, 0x00, + 0x00, 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, 0xf4, + 0x00, 0x00, 0x00, 0x04, 0xf5, 0x00, 0x00, 0x00, + 0x4d, 0xf6, 0x00, 0x00, 0x00, 0x04, 0xf7, 0x00, + 0x00, 0x00, 0x4d, 0xf8, 0x00, 0x00, 0x00, 0x04, + 0xf9, 0x00, 0x00, 0x00, 0x4d, 0xfa, 0x00, 0x00, + 0x00, 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, 0xfc, + 0x00, 0x00, 0x00, 0x04, 0xfd, 0x00, 0x00, 0x00, + 0x4d, 0xfe, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x01, 0x00, 0x00, 0x04, + 0x01, 0x01, 0x00, 0x00, 0x4d, 0x02, 0x01, 0x00, + 0x00, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0x04, + 0x01, 0x00, 0x00, 0x04, 0x05, 0x01, 0x00, 0x00, + 0x4d, 0x06, 0x01, 0x00, 0x00, 0x04, 0x07, 0x01, + 0x00, 0x00, 0x4d, 0x08, 0x01, 0x00, 0x00, 0x04, + 0x09, 0x01, 0x00, 0x00, 0x4d, 0x0a, 0x01, 0x00, + 0x00, 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, 0x0c, + 0x01, 0x00, 0x00, 0x04, 0x0d, 0x01, 0x00, 0x00, + 0x4d, 0x0e, 0x01, 0x00, 0x00, 0x04, 0x0f, 0x01, + 0x00, 0x00, 0x4d, 0x10, 0x01, 0x00, 0x00, 0x04, + 0x11, 0x01, 0x00, 0x00, 0x4d, 0x12, 0x01, 0x00, + 0x00, 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, 0x14, + 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x4d, 0x16, 0x01, 0x00, 0x00, 0x04, 0x17, 0x01, + 0x00, 0x00, 0x4d, 0x18, 0x01, 0x00, 0x00, 0x04, + 0x19, 0x01, 0x00, 0x00, 0x4d, 0x1a, 0x01, 0x00, + 0x00, 0x04, 0x1b, 0x01, 0x00, 0x00, 0x4d, 0x1c, + 0x01, 0x00, 0x00, 0x04, 0x1d, 0x01, 0x00, 0x00, + 0x4d, 0x1e, 0x01, 0x00, 0x00, 0x04, 0x1f, 0x01, + 0x00, 0x00, 0x4d, 0x20, 0x01, 0x00, 0x00, 0x04, + 0x21, 0x01, 0x00, 0x00, 0x4d, 0x22, 0x01, 0x00, + 0x00, 0x04, 0x23, 0x01, 0x00, 0x00, 0x4d, 0x24, + 0x01, 0x00, 0x00, 0x04, 0x25, 0x01, 0x00, 0x00, + 0x4d, 0x26, 0x01, 0x00, 0x00, 0x04, 0x27, 0x01, + 0x00, 0x00, 0x4d, 0x27, 0x01, 0x00, 0x00, 0x04, + 0x28, 0x01, 0x00, 0x00, 0x4d, 0x29, 0x01, 0x00, + 0x00, 0x04, 0x2a, 0x01, 0x00, 0x00, 0x4d, 0x2b, + 0x01, 0x00, 0x00, 0x04, 0x2c, 0x01, 0x00, 0x00, + 0x4d, 0x2d, 0x01, 0x00, 0x00, 0x04, 0x2e, 0x01, + 0x00, 0x00, 0x4d, 0x2f, 0x01, 0x00, 0x00, 0x04, + 0x30, 0x01, 0x00, 0x00, 0x4d, 0x31, 0x01, 0x00, + 0x00, 0x04, 0x32, 0x01, 0x00, 0x00, 0x4d, 0x33, + 0x01, 0x00, 0x00, 0x04, 0x34, 0x01, 0x00, 0x00, + 0x4d, 0x35, 0x01, 0x00, 0x00, 0x04, 0x36, 0x01, + 0x00, 0x00, 0x4d, 0x37, 0x01, 0x00, 0x00, 0x04, + 0x38, 0x01, 0x00, 0x00, 0x4d, 0x39, 0x01, 0x00, + 0x00, 0x04, 0x3a, 0x01, 0x00, 0x00, 0x4d, 0x3b, + 0x01, 0x00, 0x00, 0x4d, 0x3c, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x3d, 0x01, 0x00, 0x00, 0x4d, 0x3e, + 0x01, 0x00, 0x00, 0x04, 0x3f, 0x01, 0x00, 0x00, + 0x4d, 0x40, 0x01, 0x00, 0x00, 0x04, 0x32, 0x01, + 0x00, 0x00, 0x4d, 0x33, 0x01, 0x00, 0x00, 0x04, + 0x41, 0x01, 0x00, 0x00, 0x4d, 0x2b, 0x01, 0x00, + 0x00, 0x4d, 0x42, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x43, 0x01, 0x00, 0x00, 0x4d, 0x44, 0x01, 0x00, + 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, 0x4d, 0x46, + 0x01, 0x00, 0x00, 0x04, 0x09, 0x01, 0x00, 0x00, + 0x4d, 0x0a, 0x01, 0x00, 0x00, 0x04, 0x05, 0x01, + 0x00, 0x00, 0x4d, 0x06, 0x01, 0x00, 0x00, 0x4d, + 0x47, 0x01, 0x00, 0x00, 0x4d, 0x48, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x0b, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x68, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x7e, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x81, 0x01, 0x00, 0x00, 0x4d, + 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, + 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, 0x4d, 0x85, + 0x01, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x00, 0xbe, 0x01, 0xbe, 0x02, + 0xbe, 0x03, 0xbe, 0x04, 0xbe, 0x05, 0xbe, 0x06, + 0xbe, 0x07, 0xbe, 0x08, 0xbe, 0x09, 0xbe, 0x0a, + 0xbe, 0x0b, 0x26, 0x0c, 0x00, 0x4d, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, + 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, + 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, + 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, + 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, + 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, + 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x86, + 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, + 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, + 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, + 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, + 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, + 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, + 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x68, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x4d, 0x84, + 0x01, 0x00, 0x00, 0x4d, 0x85, 0x01, 0x00, 0x00, + 0x4d, 0xd6, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x0c, 0xbe, 0x0d, 0xbe, 0x0e, 0xbe, 0x0f, 0xbe, + 0x10, 0xbe, 0x11, 0xbe, 0x12, 0xbe, 0x13, 0xbe, + 0x14, 0xbe, 0x15, 0xbe, 0x16, 0xbe, 0x17, 0xbe, + 0x18, 0x26, 0x0d, 0x00, 0x4d, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, + 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, + 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, + 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, + 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, + 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, + 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, + 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, + 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, + 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, + 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, + 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, + 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, + 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, + 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x68, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, + 0xa0, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, + 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x80, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x81, 0x01, 0x00, + 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, + 0x01, 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, + 0x4d, 0x85, 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x19, 0xbe, 0x1a, + 0xbe, 0x1b, 0xbe, 0x1c, 0xbe, 0x1d, 0xbe, 0x1e, + 0xbe, 0x1f, 0xbe, 0x20, 0xbe, 0x21, 0xbe, 0x22, + 0xbe, 0x23, 0xbe, 0x24, 0x26, 0x0c, 0x00, 0x4d, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, + 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, + 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, + 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, + 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, + 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, + 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, + 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, + 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, + 0x91, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x68, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x54, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x4d, 0x84, 0x01, 0x00, 0x00, 0x4d, 0x85, 0x01, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x25, 0xbe, 0x26, 0xbe, 0x27, 0xbe, + 0x28, 0xbe, 0x29, 0xbe, 0x2a, 0xbe, 0x2b, 0xbe, + 0x2c, 0xbe, 0x2d, 0xbe, 0x2e, 0xbe, 0x2f, 0xbe, + 0x30, 0xbe, 0x31, 0x26, 0x0d, 0x00, 0x4d, 0x54, + 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, + 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, + 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, + 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, + 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, + 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, + 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, + 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, + 0xad, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, + 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, + 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, + 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, + 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, + 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, + 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, + 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, + 0x04, 0xad, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x68, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x54, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, + 0x7d, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, + 0xa0, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, + 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x9f, + 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x80, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x4d, 0x84, 0x01, + 0x00, 0x00, 0x4d, 0x85, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x32, + 0xbe, 0x33, 0xbe, 0x34, 0xbe, 0x35, 0xbe, 0x36, + 0xbe, 0x37, 0xbe, 0x38, 0xbe, 0x39, 0xbe, 0x3a, + 0xbe, 0x3b, 0xbe, 0x3c, 0xbe, 0x3d, 0xbe, 0x3e, + 0x26, 0x0d, 0x00, 0x4d, 0x54, 0x01, 0x00, 0x00, + 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, + 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, + 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, + 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, + 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, + 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, + 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, + 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, + 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, + 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, + 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, + 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, + 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, + 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, + 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x68, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x9f, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x80, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x81, 0x01, 0x00, + 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, + 0x01, 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, + 0x4d, 0x85, 0x01, 0x00, 0x00, 0x4d, 0xd9, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x3f, 0xbe, 0x40, + 0xbe, 0x41, 0xbe, 0x42, 0xbe, 0x43, 0xbe, 0x44, + 0xbe, 0x45, 0xbe, 0x46, 0xbe, 0x47, 0xbe, 0x48, + 0xbe, 0x49, 0xbe, 0x4a, 0x26, 0x0c, 0x00, 0x4d, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, + 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, + 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, + 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, + 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, + 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, + 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, + 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, + 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, + 0x91, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x68, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x54, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, + 0x04, 0xa0, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x9f, 0x01, + 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x80, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x81, 0x01, + 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, + 0x00, 0x4d, 0x85, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x68, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xae, + 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, + 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, + 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, 0x54, 0x01, + 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, + 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, + 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, 0x26, 0x04, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xb2, + 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, + 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, + 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, + 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x4d, + 0x84, 0x01, 0x00, 0x00, 0x4d, 0x85, 0x01, 0x00, + 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x4b, 0xbe, 0x4c, 0xbe, 0x4d, 0xbe, 0x4e, + 0xbe, 0x4f, 0xbe, 0x50, 0xbe, 0x51, 0xbe, 0x52, + 0xbe, 0x53, 0xbe, 0x54, 0xbe, 0x55, 0xbe, 0x56, + 0xbe, 0x57, 0xbe, 0x58, 0x26, 0x0e, 0x00, 0x4d, + 0x54, 0x01, 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, + 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb7, + 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, + 0x04, 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, + 0x00, 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, + 0xbc, 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, + 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, + 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, + 0x04, 0xc1, 0x01, 0x00, 0x00, 0x04, 0xc2, 0x01, + 0x00, 0x00, 0x26, 0x0e, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, 0x04, + 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, + 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, 0x04, 0xb9, + 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, + 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, 0x01, + 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, 0x04, + 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, 0x00, + 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, 0x04, 0xc1, + 0x01, 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, 0x00, + 0x26, 0x0e, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x68, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x7e, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xc3, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x54, 0x01, + 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xc3, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x81, 0x01, 0x00, 0x00, 0x4d, + 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, + 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, 0x4d, 0x85, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x59, 0xbe, 0x5a, 0xbe, 0x5b, + 0xbe, 0x5c, 0xbe, 0x5d, 0xbe, 0x5e, 0xbe, 0x5f, + 0xbe, 0x60, 0xbe, 0x61, 0xbe, 0x62, 0xbe, 0x63, + 0xbe, 0x64, 0x26, 0x0c, 0x00, 0x4d, 0x54, 0x01, + 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, 0x04, + 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, + 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, + 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, + 0x04, 0xca, 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, + 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, + 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, + 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xc4, + 0x01, 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, + 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, + 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, + 0xc9, 0x01, 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, + 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, + 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, + 0x04, 0xce, 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x68, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xd0, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x54, 0x01, 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x80, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x81, 0x01, 0x00, + 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, + 0x01, 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, + 0x4d, 0x85, 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x65, 0xbe, 0x66, + 0xbe, 0x67, 0xbe, 0x68, 0xbe, 0x69, 0xbe, 0x6a, + 0xbe, 0x6b, 0xbe, 0x6c, 0xbe, 0x6d, 0xbe, 0x6e, + 0xbe, 0x6f, 0xbe, 0x70, 0x26, 0x0c, 0x00, 0x4d, + 0x54, 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, + 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, + 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, + 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, + 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, + 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, + 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, + 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, + 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, + 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, + 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, 0xe3, + 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, + 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, + 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, + 0xe8, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x68, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x54, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xe9, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x54, 0x01, 0x00, 0x00, 0x04, 0xe9, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x80, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x4d, 0x84, 0x01, + 0x00, 0x00, 0x4d, 0x85, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x71, + 0xbe, 0x72, 0xbe, 0x73, 0xbe, 0x74, 0xbe, 0x75, + 0xbe, 0x76, 0xbe, 0x77, 0xbe, 0x78, 0xbe, 0x79, + 0xbe, 0x7a, 0xbe, 0x7b, 0xbe, 0x7c, 0x26, 0x0c, + 0x00, 0x4d, 0x54, 0x01, 0x00, 0x00, 0x04, 0xd1, + 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, + 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, + 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, + 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, + 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, + 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, + 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, + 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, + 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, + 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, + 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, + 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, + 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, + 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x68, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7e, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xe9, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x54, 0x01, 0x00, 0x00, + 0x04, 0xe9, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe9, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, + 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x4d, + 0x84, 0x01, 0x00, 0x00, 0x4d, 0x85, 0x01, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x68, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x54, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, + 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, + 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, + 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, + 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, + 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, + 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, + 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, + 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, + 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, + 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, + 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, + 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, + 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, + 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, + 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, 0x04, 0x03, + 0x02, 0x00, 0x00, 0x04, 0x04, 0x02, 0x00, 0x00, + 0x04, 0x05, 0x02, 0x00, 0x00, 0x04, 0x06, 0x02, + 0x00, 0x00, 0x04, 0x07, 0x02, 0x00, 0x00, 0x04, + 0x08, 0x02, 0x00, 0x00, 0x04, 0x09, 0x02, 0x00, + 0x00, 0x26, 0x20, 0x00, 0x04, 0x0a, 0x02, 0x00, + 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0x0b, + 0x02, 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, + 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, + 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, + 0x23, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, + 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x0f, + 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, + 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, + 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, + 0x27, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, + 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x13, + 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, + 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, + 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, + 0x2b, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, + 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x17, + 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, + 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, + 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, + 0x2f, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, + 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x1b, + 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, + 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, + 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, + 0x33, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, + 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x1f, + 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, + 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, + 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, + 0x37, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, + 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x23, + 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, + 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, + 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, + 0x3b, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, + 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x27, + 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, + 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, + 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, + 0x3f, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, + 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x2b, + 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, + 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, + 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, + 0x43, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, + 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x2f, + 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, + 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, + 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, + 0x47, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, + 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x33, + 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, + 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, + 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, + 0x4b, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, + 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x37, + 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, + 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, + 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, + 0x4f, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, + 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x3b, + 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, + 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, + 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, + 0x53, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, + 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x3f, + 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, + 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, + 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, + 0x57, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, + 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x43, + 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, + 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, + 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, + 0x5b, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, + 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x47, + 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, + 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, + 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, + 0x5f, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, + 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x4b, + 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, + 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, + 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, + 0x63, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, + 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x4f, + 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, + 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, + 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, + 0x67, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, + 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x53, + 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, + 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, + 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, + 0x6b, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, + 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x57, + 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, + 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, + 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, + 0x6f, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, + 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x5b, + 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, + 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, + 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, + 0x73, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, + 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x5f, + 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, + 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, + 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, + 0x77, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, + 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x63, + 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, + 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, + 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, + 0x7b, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, + 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x67, + 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, + 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, + 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, + 0x7f, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, + 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x6b, + 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, + 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, + 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, + 0x83, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, + 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x6f, + 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, + 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, + 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, + 0x87, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, + 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x73, + 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, + 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, + 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, + 0x8b, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, + 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x77, + 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, + 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, + 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, + 0x8f, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, + 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x7b, + 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, + 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, + 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, + 0x93, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, + 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x7f, + 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, + 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, + 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, + 0x97, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, + 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x83, + 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, + 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, + 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, + 0x9b, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, + 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x87, + 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, + 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, + 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, + 0x9f, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, + 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x8b, + 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, + 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, + 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, + 0xa3, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, + 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x8f, + 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, + 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, + 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, + 0xa7, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, + 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x93, + 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, + 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, + 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, + 0xab, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, + 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x97, + 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, + 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, + 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, + 0xaf, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, + 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x9b, + 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, + 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, + 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, + 0xb3, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, + 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0x9f, + 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, + 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, + 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, + 0xb7, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, + 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0xa3, + 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, + 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, + 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, + 0xbb, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, + 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0xa7, + 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, + 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, + 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, + 0xbf, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, + 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0xab, + 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, + 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, + 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, + 0xc3, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, + 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xaf, + 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, + 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, + 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, + 0xc7, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, + 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xb3, + 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, + 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, + 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, + 0xcb, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, + 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xb7, + 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, + 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, + 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, + 0xcf, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, + 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xbb, + 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, + 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, + 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, + 0xd3, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, + 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xbf, + 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, + 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, + 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, + 0xd7, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xc3, + 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, + 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xc7, + 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xcb, + 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, + 0x04, 0xcc, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x80, 0x04, 0xcd, 0x02, 0x00, 0x00, 0x4d, + 0xe3, 0x00, 0x00, 0x80, 0x04, 0xce, 0x02, 0x00, + 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xcf, + 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, + 0x04, 0xd0, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, + 0x00, 0x80, 0x04, 0xd1, 0x02, 0x00, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x80, 0x04, 0x16, 0x01, 0x00, + 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xd2, + 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, + 0x04, 0xd3, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x80, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x80, 0x4d, 0x54, 0x01, 0x00, + 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, + 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, + 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, + 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, + 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, + 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, + 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, + 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, + 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, + 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, + 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, + 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, + 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, + 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, + 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, + 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, 0x04, 0x03, + 0x02, 0x00, 0x00, 0x04, 0x04, 0x02, 0x00, 0x00, + 0x04, 0x05, 0x02, 0x00, 0x00, 0x04, 0x06, 0x02, + 0x00, 0x00, 0x04, 0x07, 0x02, 0x00, 0x00, 0x04, + 0x08, 0x02, 0x00, 0x00, 0x04, 0x09, 0x02, 0x00, + 0x00, 0x26, 0x20, 0x00, 0x04, 0x0a, 0x02, 0x00, + 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0x0b, + 0x02, 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, + 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, + 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, + 0x23, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, + 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x0f, + 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, + 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, + 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, + 0x27, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, + 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x13, + 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, + 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, + 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, + 0x2b, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, + 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x17, + 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, + 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, + 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, + 0x2f, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, + 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x1b, + 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, + 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, + 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, + 0x33, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, + 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x1f, + 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, + 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, + 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, + 0x37, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, + 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x23, + 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, + 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, + 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, + 0x3b, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, + 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x27, + 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, + 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, + 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, + 0x3f, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, + 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x2b, + 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, + 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, + 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, + 0x43, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, + 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x2f, + 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, + 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, + 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, + 0x47, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, + 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x33, + 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, + 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, + 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, + 0x4b, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, + 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x37, + 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, + 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, + 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, + 0x4f, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, + 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x3b, + 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, + 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, + 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, + 0x53, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, + 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x3f, + 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, + 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, + 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, + 0x57, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, + 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x43, + 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, + 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, + 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, + 0x5b, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, + 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x47, + 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, + 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, + 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, + 0x5f, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, + 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x4b, + 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, + 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, + 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, + 0x63, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, + 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x4f, + 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, + 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, + 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, + 0x67, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, + 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x53, + 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, + 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, + 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, + 0x6b, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, + 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x57, + 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, + 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, + 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, + 0x6f, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, + 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x5b, + 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, + 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, + 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, + 0x73, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, + 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x5f, + 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, + 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, + 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, + 0x77, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, + 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x63, + 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, + 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, + 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, + 0x7b, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, + 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x67, + 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, + 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, + 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, + 0x7f, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, + 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x6b, + 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, + 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, + 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, + 0x83, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, + 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x6f, + 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, + 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, + 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, + 0x87, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, + 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x73, + 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, + 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, + 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, + 0x8b, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, + 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x77, + 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, + 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, + 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, + 0x8f, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, + 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x7b, + 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, + 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, + 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, + 0x93, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, + 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x7f, + 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, + 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, + 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, + 0x97, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, + 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x83, + 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, + 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, + 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, + 0x9b, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, + 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x87, + 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, + 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, + 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, + 0x9f, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, + 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x8b, + 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, + 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, + 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, + 0xa3, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, + 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x8f, + 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, + 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, + 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, + 0xa7, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, + 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x93, + 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, + 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, + 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, + 0xab, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, + 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x97, + 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, + 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, + 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, + 0xaf, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, + 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x9b, + 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, + 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, + 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, + 0xb3, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, + 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0x9f, + 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, + 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, + 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, + 0xb7, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, + 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0xa3, + 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, + 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, + 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, + 0xbb, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, + 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0xa7, + 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, + 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, + 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, + 0xbf, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, + 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0xab, + 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, + 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, + 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, + 0xc3, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, + 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xaf, + 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, + 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, + 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, + 0xc7, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, + 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xb3, + 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, + 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, + 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, + 0xcb, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, + 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xb7, + 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, + 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, + 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, + 0xcf, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, + 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xbb, + 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, + 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, + 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, + 0xd3, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, + 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xbf, + 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, + 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, + 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, + 0xd7, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xc3, + 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, + 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xc7, + 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xcb, + 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, + 0x04, 0xcc, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x80, 0x04, 0xcd, 0x02, 0x00, 0x00, 0x4d, + 0xe3, 0x00, 0x00, 0x80, 0x04, 0xce, 0x02, 0x00, + 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xcf, + 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, + 0x04, 0xd0, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, + 0x00, 0x80, 0x04, 0xd1, 0x02, 0x00, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x80, 0x04, 0xd4, 0x02, 0x00, + 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xd5, + 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, + 0x04, 0xd6, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x80, 0x04, 0xd7, 0x02, 0x00, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x80, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, + 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, + 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, + 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, + 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, + 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, + 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, + 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, + 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, + 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, + 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, + 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, + 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, + 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, + 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, + 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, 0x04, 0x03, + 0x02, 0x00, 0x00, 0x04, 0x04, 0x02, 0x00, 0x00, + 0x04, 0x05, 0x02, 0x00, 0x00, 0x04, 0x06, 0x02, + 0x00, 0x00, 0x04, 0x07, 0x02, 0x00, 0x00, 0x04, + 0x08, 0x02, 0x00, 0x00, 0x04, 0x09, 0x02, 0x00, + 0x00, 0x26, 0x20, 0x00, 0x04, 0x0a, 0x02, 0x00, + 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0x0b, + 0x02, 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, + 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, + 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, + 0x23, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, + 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x0f, + 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, + 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, + 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, + 0x27, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, + 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x13, + 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, + 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, + 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, + 0x2b, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, + 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x17, + 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, + 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, + 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, + 0x2f, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, + 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x1b, + 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, + 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, + 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, + 0x33, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, + 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x1f, + 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, + 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, + 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, + 0x37, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, + 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x23, + 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, + 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, + 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, + 0x3b, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, + 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x27, + 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, + 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, + 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, + 0x3f, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, + 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x2b, + 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, + 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, + 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, + 0x43, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, + 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x2f, + 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, + 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, + 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, + 0x47, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, + 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x33, + 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, + 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, + 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, + 0x4b, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, + 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x37, + 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, + 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, + 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, + 0x4f, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, + 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x3b, + 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, + 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, + 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, + 0x53, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, + 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x3f, + 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, + 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, + 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, + 0x57, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, + 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x43, + 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, + 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, + 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, + 0x5b, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, + 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x47, + 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, + 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, + 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, + 0x5f, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, + 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x4b, + 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, + 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, + 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, + 0x63, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, + 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x4f, + 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, + 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, + 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, + 0x67, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, + 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x53, + 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, + 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, + 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, + 0x6b, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, + 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x57, + 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, + 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, + 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, + 0x6f, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, + 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x5b, + 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, + 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, + 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, + 0x73, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, + 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x5f, + 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, + 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, + 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, + 0x77, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, + 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x63, + 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, + 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, + 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, + 0x7b, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, + 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x67, + 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, + 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, + 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, + 0x7f, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, + 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x6b, + 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, + 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, + 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, + 0x83, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, + 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x6f, + 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, + 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, + 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, + 0x87, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, + 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x73, + 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, + 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, + 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, + 0x8b, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, + 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x77, + 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, + 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, + 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, + 0x8f, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, + 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x7b, + 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, + 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, + 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, + 0x93, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, + 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x7f, + 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, + 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, + 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, + 0x97, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, + 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x83, + 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, + 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, + 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, + 0x9b, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, + 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x87, + 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, + 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, + 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, + 0x9f, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, + 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x8b, + 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, + 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, + 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, + 0xa3, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, + 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x8f, + 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, + 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, + 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, + 0xa7, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, + 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x93, + 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, + 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, + 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, + 0xab, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, + 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x97, + 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, + 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, + 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, + 0xaf, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, + 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x9b, + 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, + 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, + 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, + 0xb3, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, + 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0x9f, + 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, + 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, + 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, + 0xb7, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, + 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0xa3, + 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, + 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, + 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, + 0xbb, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, + 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0xa7, + 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, + 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, + 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, + 0xbf, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, + 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0xab, + 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, + 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, + 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, + 0xc3, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, + 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xaf, + 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, + 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, + 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, + 0xc7, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, + 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xb3, + 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, + 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, + 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, + 0xcb, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, + 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xb7, + 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, + 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, + 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, + 0xcf, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, + 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xbb, + 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, + 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, + 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, + 0xd3, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, + 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xbf, + 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, + 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, + 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, + 0xd7, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xc3, + 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, + 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xc7, + 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xcb, + 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, + 0x04, 0xcc, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x80, 0x04, 0xcd, 0x02, 0x00, 0x00, 0x4d, + 0xe3, 0x00, 0x00, 0x80, 0x04, 0xce, 0x02, 0x00, + 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xcf, + 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, + 0x04, 0xd0, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, + 0x00, 0x80, 0x04, 0xd1, 0x02, 0x00, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x80, 0x04, 0xd4, 0x02, 0x00, + 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xd5, + 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, + 0x04, 0xd6, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x80, 0x04, 0xd7, 0x02, 0x00, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x80, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x4d, 0x84, + 0x01, 0x00, 0x00, 0x4d, 0x85, 0x01, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x7d, 0xbe, 0x7e, 0xbe, 0x7f, 0xbe, 0x80, 0xbe, + 0x81, 0xbe, 0x82, 0xbe, 0x83, 0xbe, 0x84, 0xbe, + 0x85, 0xbe, 0x86, 0xbe, 0x87, 0xbe, 0x88, 0x26, + 0x0c, 0x00, 0x4d, 0x54, 0x01, 0x00, 0x00, 0x04, + 0xd8, 0x02, 0x00, 0x00, 0x04, 0xd9, 0x02, 0x00, + 0x00, 0x04, 0xda, 0x02, 0x00, 0x00, 0x04, 0xdb, + 0x02, 0x00, 0x00, 0x04, 0xdc, 0x02, 0x00, 0x00, + 0x04, 0xdd, 0x02, 0x00, 0x00, 0x04, 0xde, 0x02, + 0x00, 0x00, 0x04, 0xdf, 0x02, 0x00, 0x00, 0x04, + 0xe0, 0x02, 0x00, 0x00, 0x04, 0xe1, 0x02, 0x00, + 0x00, 0x04, 0xe2, 0x02, 0x00, 0x00, 0x04, 0xe3, + 0x02, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xd8, 0x02, 0x00, 0x00, + 0x04, 0xd9, 0x02, 0x00, 0x00, 0x04, 0xda, 0x02, + 0x00, 0x00, 0x04, 0xdb, 0x02, 0x00, 0x00, 0x04, + 0xdc, 0x02, 0x00, 0x00, 0x04, 0xdd, 0x02, 0x00, + 0x00, 0x04, 0xde, 0x02, 0x00, 0x00, 0x04, 0xdf, + 0x02, 0x00, 0x00, 0x04, 0xe0, 0x02, 0x00, 0x00, + 0x04, 0xe1, 0x02, 0x00, 0x00, 0x04, 0xe2, 0x02, + 0x00, 0x00, 0x04, 0xe3, 0x02, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x68, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7e, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xe4, 0x02, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x54, 0x01, 0x00, + 0x00, 0x04, 0xe4, 0x02, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe4, + 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x4d, 0x84, 0x01, 0x00, 0x00, 0x4d, 0x85, 0x01, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x53, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x68, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x54, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, + 0x7d, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xe5, 0x02, 0x00, 0x00, 0x04, + 0xe6, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0x54, 0x01, 0x00, 0x00, 0x04, 0xe5, 0x02, 0x00, + 0x00, 0x04, 0xe6, 0x02, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe5, + 0x02, 0x00, 0x00, 0x04, 0xe6, 0x02, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x80, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x4d, 0x84, 0x01, + 0x00, 0x00, 0x4d, 0x85, 0x01, 0x00, 0x00, 0x4d, + 0xe2, 0x00, 0x00, 0x00, 0x4d, 0xe7, 0x02, 0x00, + 0x00, 0x4d, 0xe8, 0x02, 0x00, 0x00, 0x0b, 0x04, + 0xe9, 0x02, 0x00, 0x00, 0x04, 0xea, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xeb, 0x02, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0xec, 0x02, 0x00, 0x00, + 0x4d, 0xed, 0x02, 0x00, 0x00, 0x04, 0xee, 0x02, + 0x00, 0x00, 0x4d, 0xef, 0x02, 0x00, 0x00, 0x4d, + 0xf0, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xf1, 0x02, + 0x00, 0x00, 0x4d, 0xed, 0x02, 0x00, 0x00, 0x04, + 0xf2, 0x02, 0x00, 0x00, 0x4d, 0xef, 0x02, 0x00, + 0x00, 0x4d, 0xf3, 0x02, 0x00, 0x00, 0x0b, 0x04, + 0xf4, 0x02, 0x00, 0x00, 0x4d, 0xed, 0x02, 0x00, + 0x00, 0x04, 0xf5, 0x02, 0x00, 0x00, 0x4d, 0xef, + 0x02, 0x00, 0x00, 0x4d, 0xf6, 0x02, 0x00, 0x00, + 0x4d, 0xf7, 0x02, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0xf8, 0x02, 0x00, 0x00, 0x4d, 0xf0, 0x02, 0x00, + 0x00, 0x04, 0xf9, 0x02, 0x00, 0x00, 0x4d, 0xfa, + 0x02, 0x00, 0x00, 0x04, 0xfb, 0x02, 0x00, 0x00, + 0x4d, 0xfc, 0x02, 0x00, 0x00, 0x04, 0xfd, 0x02, + 0x00, 0x00, 0x4d, 0xfe, 0x02, 0x00, 0x00, 0x04, + 0xff, 0x02, 0x00, 0x00, 0x4d, 0x00, 0x03, 0x00, + 0x00, 0x04, 0x01, 0x03, 0x00, 0x00, 0x4d, 0x02, + 0x03, 0x00, 0x00, 0x04, 0x03, 0x03, 0x00, 0x00, + 0x4d, 0x04, 0x03, 0x00, 0x00, 0x4d, 0xe9, 0x02, + 0x00, 0x00, 0x0b, 0x04, 0xf8, 0x02, 0x00, 0x00, + 0x4d, 0xf0, 0x02, 0x00, 0x00, 0x04, 0xf9, 0x02, + 0x00, 0x00, 0x4d, 0xfa, 0x02, 0x00, 0x00, 0x04, + 0xfb, 0x02, 0x00, 0x00, 0x4d, 0xfc, 0x02, 0x00, + 0x00, 0x04, 0xfd, 0x02, 0x00, 0x00, 0x4d, 0xfe, + 0x02, 0x00, 0x00, 0x04, 0xff, 0x02, 0x00, 0x00, + 0x4d, 0x00, 0x03, 0x00, 0x00, 0x04, 0x01, 0x03, + 0x00, 0x00, 0x4d, 0x02, 0x03, 0x00, 0x00, 0x04, + 0x03, 0x03, 0x00, 0x00, 0x4d, 0x04, 0x03, 0x00, + 0x00, 0x4d, 0xea, 0x02, 0x00, 0x00, 0x4d, 0x05, + 0x03, 0x00, 0x00, 0x0b, 0x04, 0x06, 0x03, 0x00, + 0x00, 0x4d, 0x07, 0x03, 0x00, 0x00, 0x04, 0x08, + 0x03, 0x00, 0x00, 0x4d, 0x09, 0x03, 0x00, 0x00, + 0x04, 0x0a, 0x03, 0x00, 0x00, 0x4d, 0x0b, 0x03, + 0x00, 0x00, 0x04, 0x0c, 0x03, 0x00, 0x00, 0x4d, + 0x0d, 0x03, 0x00, 0x00, 0x04, 0x0e, 0x03, 0x00, + 0x00, 0x4d, 0x0f, 0x03, 0x00, 0x00, 0x04, 0x10, + 0x03, 0x00, 0x00, 0x4d, 0x11, 0x03, 0x00, 0x00, + 0x04, 0x12, 0x03, 0x00, 0x00, 0x4d, 0x13, 0x03, + 0x00, 0x00, 0x04, 0x14, 0x03, 0x00, 0x00, 0x4d, + 0x15, 0x03, 0x00, 0x00, 0x04, 0x16, 0x03, 0x00, + 0x00, 0x4d, 0x17, 0x03, 0x00, 0x00, 0x04, 0x18, + 0x03, 0x00, 0x00, 0x4d, 0x19, 0x03, 0x00, 0x00, + 0x04, 0x1a, 0x03, 0x00, 0x00, 0x4d, 0x1b, 0x03, + 0x00, 0x00, 0x04, 0x1c, 0x03, 0x00, 0x00, 0x4d, + 0x1d, 0x03, 0x00, 0x00, 0x04, 0x1e, 0x03, 0x00, + 0x00, 0x4d, 0x1f, 0x03, 0x00, 0x00, 0x04, 0x20, + 0x03, 0x00, 0x00, 0x4d, 0x21, 0x03, 0x00, 0x00, + 0x04, 0x22, 0x03, 0x00, 0x00, 0x4d, 0x23, 0x03, + 0x00, 0x00, 0x04, 0x24, 0x03, 0x00, 0x00, 0x4d, + 0x25, 0x03, 0x00, 0x00, 0x04, 0x26, 0x03, 0x00, + 0x00, 0x4d, 0x27, 0x03, 0x00, 0x00, 0x04, 0x28, + 0x03, 0x00, 0x00, 0x4d, 0x29, 0x03, 0x00, 0x00, + 0x04, 0x2a, 0x03, 0x00, 0x00, 0x4d, 0x2b, 0x03, + 0x00, 0x00, 0x04, 0x2c, 0x03, 0x00, 0x00, 0x4d, + 0x2d, 0x03, 0x00, 0x00, 0x04, 0x2e, 0x03, 0x00, + 0x00, 0x4d, 0x2f, 0x03, 0x00, 0x00, 0x4d, 0x30, + 0x03, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x00, + 0x24, 0x01, 0x00, 0xcc, 0x28, 0xe2, 0x0c, 0x01, + 0x00, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, + 0x31, 0x33, 0x07, 0x02, 0x37, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_ms_size = 24627; + +const uint8_t intl_ms[24627] = { + 0x01, 0xdb, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x6d, 0x73, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x0e, + 0x7b, 0x31, 0x7d, 0x20, 0x7b, 0x30, 0x7d, 0x0a, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, 0x65, + 0x64, 0x69, 0x75, 0x6d, 0x08, 0x66, 0x75, 0x6c, + 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x02, 0x64, + 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, 0x06, 0x64, + 0x20, 0x45, 0x04, 0x45, 0x64, 0x10, 0x45, 0x20, + 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x06, 0x45, + 0x68, 0x6d, 0x0e, 0x45, 0x20, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x06, 0x45, 0x48, 0x6d, 0x16, 0x45, + 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x61, 0x08, 0x45, 0x68, 0x6d, 0x73, 0x14, + 0x45, 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x08, 0x45, 0x48, 0x6d, 0x73, 0x06, + 0x47, 0x20, 0x79, 0x04, 0x47, 0x79, 0x0e, 0x47, + 0x20, 0x79, 0x20, 0x4d, 0x4d, 0x4d, 0x0a, 0x47, + 0x79, 0x4d, 0x4d, 0x4d, 0x12, 0x47, 0x20, 0x79, + 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x0c, 0x47, + 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x18, 0x47, 0x20, + 0x79, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x2c, + 0x20, 0x45, 0x0e, 0x47, 0x79, 0x4d, 0x4d, 0x4d, + 0x45, 0x64, 0x06, 0x68, 0x20, 0x61, 0x02, 0x68, + 0x04, 0x48, 0x48, 0x02, 0x48, 0x0c, 0x68, 0x3a, + 0x6d, 0x6d, 0x20, 0x61, 0x04, 0x68, 0x6d, 0x0a, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x04, 0x48, 0x6d, + 0x08, 0x48, 0x3a, 0x6d, 0x6d, 0x06, 0x48, 0x6d, + 0x6d, 0x12, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x61, 0x06, 0x68, 0x6d, 0x73, 0x10, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x06, 0x48, 0x6d, 0x73, 0x16, 0x68, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x20, 0x76, + 0x08, 0x68, 0x6d, 0x73, 0x76, 0x14, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x76, + 0x08, 0x48, 0x6d, 0x73, 0x76, 0x10, 0x68, 0x3a, + 0x6d, 0x6d, 0x20, 0x61, 0x20, 0x76, 0x06, 0x68, + 0x6d, 0x76, 0x0e, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x20, 0x76, 0x06, 0x48, 0x6d, 0x76, 0x02, 0x4c, + 0x02, 0x4d, 0x06, 0x64, 0x2d, 0x4d, 0x04, 0x4d, + 0x64, 0x0c, 0x45, 0x2c, 0x20, 0x64, 0x2d, 0x4d, + 0x06, 0x4d, 0x45, 0x64, 0x0a, 0x64, 0x64, 0x2f, + 0x4d, 0x4d, 0x08, 0x4d, 0x4d, 0x64, 0x64, 0x06, + 0x4c, 0x4c, 0x4c, 0x06, 0x4d, 0x4d, 0x4d, 0x0a, + 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x08, 0x4d, 0x4d, + 0x4d, 0x64, 0x10, 0x45, 0x2c, 0x20, 0x64, 0x20, + 0x4d, 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x45, + 0x64, 0x0c, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, + 0x0a, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x0a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x02, 0x79, 0x06, 0x4d, + 0x2d, 0x79, 0x04, 0x79, 0x4d, 0x0a, 0x64, 0x2f, + 0x4d, 0x2f, 0x79, 0x06, 0x79, 0x4d, 0x64, 0x10, + 0x45, 0x2c, 0x20, 0x64, 0x2f, 0x4d, 0x2f, 0x79, + 0x08, 0x79, 0x4d, 0x45, 0x64, 0x0a, 0x4d, 0x4d, + 0x4d, 0x20, 0x79, 0x08, 0x79, 0x4d, 0x4d, 0x4d, + 0x0e, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, + 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x14, 0x45, + 0x2c, 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x20, + 0x79, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, + 0x0c, 0x79, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, + 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, 0x51, 0x51, + 0x51, 0x20, 0x79, 0x08, 0x79, 0x51, 0x51, 0x51, + 0x0c, 0x51, 0x51, 0x51, 0x51, 0x20, 0x79, 0x0a, + 0x79, 0x51, 0x51, 0x51, 0x51, 0x20, 0x61, 0x76, + 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x1c, 0x45, + 0x45, 0x45, 0x45, 0x2c, 0x20, 0x64, 0x20, 0x4d, + 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x14, 0x79, 0x4d, + 0x4d, 0x4d, 0x4d, 0x45, 0x45, 0x45, 0x45, 0x64, + 0x10, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, + 0x79, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, + 0x0e, 0x64, 0x2f, 0x4d, 0x4d, 0x2f, 0x79, 0x79, + 0x16, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x73, 0x1c, 0x68, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x20, 0x7a, + 0x7a, 0x7a, 0x7a, 0x12, 0x68, 0x6d, 0x6d, 0x73, + 0x73, 0x7a, 0x7a, 0x7a, 0x7a, 0x16, 0x68, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x20, + 0x7a, 0x08, 0x68, 0x6d, 0x73, 0x7a, 0x16, 0x74, + 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x73, 0x0e, 0x66, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x73, 0x02, 0x4a, 0x02, 0x46, 0x02, 0x41, + 0x02, 0x4f, 0x02, 0x53, 0x02, 0x4e, 0x02, 0x44, + 0x0c, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x06, + 0x4a, 0x61, 0x6e, 0x06, 0x46, 0x65, 0x62, 0x06, + 0x4d, 0x61, 0x63, 0x06, 0x41, 0x70, 0x72, 0x06, + 0x4d, 0x65, 0x69, 0x06, 0x4a, 0x75, 0x6e, 0x06, + 0x4a, 0x75, 0x6c, 0x06, 0x4f, 0x67, 0x6f, 0x06, + 0x53, 0x65, 0x70, 0x06, 0x4f, 0x6b, 0x74, 0x06, + 0x4e, 0x6f, 0x76, 0x06, 0x44, 0x69, 0x73, 0x0e, + 0x4a, 0x61, 0x6e, 0x75, 0x61, 0x72, 0x69, 0x10, + 0x46, 0x65, 0x62, 0x72, 0x75, 0x61, 0x72, 0x69, + 0x0a, 0x41, 0x70, 0x72, 0x69, 0x6c, 0x0a, 0x4a, + 0x75, 0x6c, 0x61, 0x69, 0x08, 0x4f, 0x67, 0x6f, + 0x73, 0x12, 0x53, 0x65, 0x70, 0x74, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x0e, 0x4f, 0x6b, 0x74, 0x6f, + 0x62, 0x65, 0x72, 0x10, 0x4e, 0x6f, 0x76, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x10, 0x44, 0x69, 0x73, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x0c, 0x6d, 0x6f, + 0x6e, 0x74, 0x68, 0x73, 0x02, 0x49, 0x02, 0x52, + 0x02, 0x4b, 0x06, 0x41, 0x68, 0x64, 0x06, 0x49, + 0x73, 0x6e, 0x06, 0x53, 0x65, 0x6c, 0x06, 0x52, + 0x61, 0x62, 0x06, 0x4b, 0x68, 0x61, 0x06, 0x4a, + 0x75, 0x6d, 0x06, 0x53, 0x61, 0x62, 0x08, 0x41, + 0x68, 0x61, 0x64, 0x0a, 0x49, 0x73, 0x6e, 0x69, + 0x6e, 0x0c, 0x53, 0x65, 0x6c, 0x61, 0x73, 0x61, + 0x08, 0x52, 0x61, 0x62, 0x75, 0x0c, 0x4b, 0x68, + 0x61, 0x6d, 0x69, 0x73, 0x0c, 0x4a, 0x75, 0x6d, + 0x61, 0x61, 0x74, 0x0a, 0x53, 0x61, 0x62, 0x74, + 0x75, 0x08, 0x64, 0x61, 0x79, 0x73, 0x04, 0x42, + 0x45, 0x08, 0x65, 0x72, 0x61, 0x73, 0x04, 0x50, + 0x47, 0x04, 0x61, 0x6d, 0x06, 0x50, 0x54, 0x47, + 0x04, 0x70, 0x6d, 0x14, 0x64, 0x61, 0x79, 0x50, + 0x65, 0x72, 0x69, 0x6f, 0x64, 0x73, 0x04, 0x4a, + 0x6e, 0x04, 0x46, 0x62, 0x04, 0x4d, 0x63, 0x04, + 0x41, 0x70, 0x04, 0x4d, 0x65, 0x04, 0x4a, 0x75, + 0x04, 0x4a, 0x6c, 0x04, 0x4f, 0x67, 0x04, 0x53, + 0x70, 0x04, 0x4f, 0x6b, 0x04, 0x4e, 0x76, 0x04, + 0x44, 0x73, 0x08, 0x54, 0x6f, 0x75, 0x74, 0x08, + 0x42, 0x61, 0x62, 0x61, 0x0a, 0x48, 0x61, 0x74, + 0x6f, 0x72, 0x0a, 0x4b, 0x69, 0x61, 0x68, 0x6b, + 0x08, 0x54, 0x6f, 0x62, 0x61, 0x0c, 0x41, 0x6d, + 0x73, 0x68, 0x69, 0x72, 0x10, 0x42, 0x61, 0x72, + 0x61, 0x6d, 0x68, 0x61, 0x74, 0x12, 0x42, 0x61, + 0x72, 0x61, 0x6d, 0x6f, 0x75, 0x64, 0x61, 0x0e, + 0x42, 0x61, 0x73, 0x68, 0x61, 0x6e, 0x73, 0x0a, + 0x50, 0x61, 0x6f, 0x6e, 0x61, 0x08, 0x45, 0x70, + 0x65, 0x70, 0x0a, 0x4d, 0x65, 0x73, 0x72, 0x61, + 0x0a, 0x4e, 0x61, 0x73, 0x69, 0x65, 0x08, 0x45, + 0x52, 0x41, 0x30, 0x08, 0x45, 0x52, 0x41, 0x31, + 0x10, 0x4d, 0x65, 0x73, 0x6b, 0x65, 0x72, 0x65, + 0x6d, 0x0c, 0x54, 0x65, 0x6b, 0x65, 0x6d, 0x74, + 0x0a, 0x48, 0x65, 0x64, 0x61, 0x72, 0x0c, 0x54, + 0x61, 0x68, 0x73, 0x61, 0x73, 0x06, 0x54, 0x65, + 0x72, 0x0e, 0x59, 0x65, 0x6b, 0x61, 0x74, 0x69, + 0x74, 0x0e, 0x4d, 0x65, 0x67, 0x61, 0x62, 0x69, + 0x74, 0x0c, 0x4d, 0x69, 0x61, 0x7a, 0x69, 0x61, + 0x0c, 0x47, 0x65, 0x6e, 0x62, 0x6f, 0x74, 0x08, + 0x53, 0x65, 0x6e, 0x65, 0x0a, 0x48, 0x61, 0x6d, + 0x6c, 0x65, 0x0e, 0x4e, 0x65, 0x68, 0x61, 0x73, + 0x73, 0x65, 0x0e, 0x50, 0x61, 0x67, 0x75, 0x6d, + 0x65, 0x6e, 0x06, 0x4d, 0x30, 0x31, 0x06, 0x4d, + 0x30, 0x32, 0x06, 0x4d, 0x30, 0x33, 0x06, 0x4d, + 0x30, 0x34, 0x06, 0x4d, 0x30, 0x35, 0x06, 0x4d, + 0x30, 0x36, 0x06, 0x4d, 0x30, 0x37, 0x06, 0x4d, + 0x30, 0x38, 0x06, 0x4d, 0x30, 0x39, 0x06, 0x4d, + 0x31, 0x30, 0x06, 0x4d, 0x31, 0x31, 0x06, 0x4d, + 0x31, 0x32, 0x08, 0x53, 0x2e, 0x4d, 0x2e, 0x04, + 0x54, 0x4d, 0x06, 0x42, 0x43, 0x45, 0x04, 0x43, + 0x45, 0x0c, 0x54, 0x69, 0x73, 0x68, 0x72, 0x69, + 0x0e, 0x48, 0x65, 0x73, 0x68, 0x76, 0x61, 0x6e, + 0x0c, 0x4b, 0x69, 0x73, 0x6c, 0x65, 0x76, 0x0a, + 0x54, 0x65, 0x76, 0x65, 0x74, 0x0c, 0x53, 0x68, + 0x65, 0x76, 0x61, 0x74, 0x0c, 0x41, 0x64, 0x61, + 0x72, 0x20, 0x49, 0x08, 0x41, 0x64, 0x61, 0x72, + 0x0a, 0x4e, 0x69, 0x73, 0x61, 0x6e, 0x08, 0x49, + 0x79, 0x61, 0x72, 0x0a, 0x53, 0x69, 0x76, 0x61, + 0x6e, 0x0a, 0x54, 0x61, 0x6d, 0x75, 0x7a, 0x04, + 0x41, 0x76, 0x08, 0x45, 0x6c, 0x75, 0x6c, 0x0e, + 0x41, 0x64, 0x61, 0x72, 0x20, 0x49, 0x49, 0x04, + 0x41, 0x4d, 0x0e, 0x43, 0x68, 0x61, 0x69, 0x74, + 0x72, 0x61, 0x10, 0x56, 0x61, 0x69, 0x73, 0x61, + 0x6b, 0x68, 0x61, 0x10, 0x4a, 0x79, 0x61, 0x69, + 0x73, 0x74, 0x68, 0x61, 0x0c, 0x41, 0x73, 0x61, + 0x64, 0x68, 0x61, 0x0e, 0x53, 0x72, 0x61, 0x76, + 0x61, 0x6e, 0x61, 0x0c, 0x42, 0x68, 0x61, 0x64, + 0x72, 0x61, 0x0c, 0x41, 0x73, 0x76, 0x69, 0x6e, + 0x61, 0x0e, 0x4b, 0x61, 0x72, 0x74, 0x69, 0x6b, + 0x61, 0x14, 0x41, 0x67, 0x72, 0x61, 0x68, 0x61, + 0x79, 0x61, 0x6e, 0x61, 0x0a, 0x50, 0x61, 0x75, + 0x73, 0x61, 0x0a, 0x4d, 0x61, 0x67, 0x68, 0x61, + 0x10, 0x50, 0x68, 0x61, 0x6c, 0x67, 0x75, 0x6e, + 0x61, 0x08, 0x53, 0x61, 0x6b, 0x61, 0x08, 0x4d, + 0x75, 0x68, 0x2e, 0x08, 0x53, 0x61, 0x66, 0x2e, + 0x0c, 0x52, 0x61, 0x62, 0x2e, 0x20, 0x49, 0x0e, + 0x52, 0x61, 0x62, 0x2e, 0x20, 0x49, 0x49, 0x0c, + 0x4a, 0x75, 0x6d, 0x2e, 0x20, 0x49, 0x0e, 0x4a, + 0x75, 0x6d, 0x2e, 0x20, 0x49, 0x49, 0x08, 0x52, + 0x61, 0x6a, 0x2e, 0x08, 0x53, 0x68, 0x61, 0x2e, + 0x08, 0x52, 0x61, 0x6d, 0x2e, 0x0a, 0x53, 0x68, + 0x61, 0x77, 0x2e, 0x11, 0x44, 0x00, 0x68, 0x00, + 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, + 0x51, 0x00, 0x2e, 0x00, 0x11, 0x44, 0x00, 0x68, + 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, + 0x00, 0x48, 0x00, 0x2e, 0x00, 0x10, 0x4d, 0x75, + 0x68, 0x61, 0x72, 0x72, 0x61, 0x6d, 0x0a, 0x53, + 0x61, 0x66, 0x61, 0x72, 0x0f, 0x52, 0x00, 0x61, + 0x00, 0x62, 0x00, 0x69, 0x00, 0xbb, 0x02, 0x20, + 0x00, 0x49, 0x00, 0x11, 0x52, 0x00, 0x61, 0x00, + 0x62, 0x00, 0x69, 0x00, 0xbb, 0x02, 0x20, 0x00, + 0x49, 0x00, 0x49, 0x00, 0x10, 0x4a, 0x75, 0x6d, + 0x61, 0x64, 0x61, 0x20, 0x49, 0x12, 0x4a, 0x75, + 0x6d, 0x61, 0x64, 0x61, 0x20, 0x49, 0x49, 0x0a, + 0x52, 0x61, 0x6a, 0x61, 0x62, 0x0f, 0x53, 0x00, + 0x68, 0x00, 0x61, 0x00, 0xbb, 0x02, 0x62, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x0e, 0x52, 0x61, 0x6d, + 0x61, 0x64, 0x61, 0x6e, 0x0e, 0x53, 0x68, 0x61, + 0x77, 0x77, 0x61, 0x6c, 0x19, 0x44, 0x00, 0x68, + 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, + 0x00, 0x51, 0x00, 0x69, 0x00, 0xbb, 0x02, 0x64, + 0x00, 0x61, 0x00, 0x68, 0x00, 0x19, 0x44, 0x00, + 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, + 0x2d, 0x00, 0x48, 0x00, 0x69, 0x00, 0x6a, 0x00, + 0x6a, 0x00, 0x61, 0x00, 0x68, 0x00, 0x04, 0x41, + 0x48, 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x36, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x36, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x36, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, + 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x1d, 0x57, 0x00, 0x61, 0x00, + 0x64, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x1f, 0x52, 0x00, 0x65, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, + 0x59, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x37, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x2d, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6d, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x2d, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x2b, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, 0x2d, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, 0x2a, 0x4a, + 0x69, 0x6e, 0x67, 0x6f, 0x2d, 0x6b, 0x65, 0x69, + 0x75, 0x6e, 0x20, 0x28, 0x37, 0x36, 0x37, 0x2d, + 0x37, 0x37, 0x30, 0x29, 0x1d, 0x48, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x38, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x1f, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x2d, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x2d, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x1f, 0x44, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1d, 0x4a, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, + 0x4b, 0x00, 0x61, 0x00, 0x6a, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1f, 0x53, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x20, 0x54, 0x65, 0x6e, 0x2d, 0x61, + 0x6e, 0x20, 0x28, 0x38, 0x35, 0x37, 0x2d, 0x38, + 0x35, 0x39, 0x29, 0x1f, 0x4a, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x21, 0x47, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x1f, 0x45, 0x00, 0x6e, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1b, 0x4c, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x1d, 0x41, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x1f, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, + 0x45, 0x00, 0x69, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, + 0x00, 0x73, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x39, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, + 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4d, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x35, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x27, 0x4a, 0x00, 0x69, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x29, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4c, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x4a, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, 0x24, 0x54, + 0x65, 0x6e, 0x2d, 0x65, 0x69, 0x20, 0x28, 0x31, + 0x31, 0x31, 0x30, 0x2d, 0x31, 0x31, 0x31, 0x33, + 0x29, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x44, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x48, 0x00, 0x65, 0x00, 0x69, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x27, 0x45, 0x00, 0x69, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x68, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, + 0x00, 0x61, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x41, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x69, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x59, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, + 0x4a, 0x00, 0x75, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x29, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x29, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, + 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x41, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x4d, + 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x27, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x75, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x29, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x29, 0x52, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x4e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x4c, 0x01, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6d, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x1f, 0x4b, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, + 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4c, + 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x74, 0x00, + 0x73, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x4d, 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x27, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x21, 0x4c, 0x01, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x21, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1f, + 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x72, 0x00, 0x65, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x62, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x27, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x48, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x65, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x41, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4d, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x02, 0x54, 0x0a, 0x4d, + 0x65, 0x69, 0x6a, 0x69, 0x0d, 0x54, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x0b, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x0c, 0x48, 0x65, 0x69, + 0x73, 0x65, 0x69, 0x12, 0x46, 0x61, 0x72, 0x76, + 0x61, 0x72, 0x64, 0x69, 0x6e, 0x16, 0x4f, 0x72, + 0x64, 0x69, 0x62, 0x65, 0x68, 0x65, 0x73, 0x68, + 0x74, 0x0e, 0x4b, 0x68, 0x6f, 0x72, 0x64, 0x61, + 0x64, 0x06, 0x54, 0x69, 0x72, 0x0c, 0x4d, 0x6f, + 0x72, 0x64, 0x61, 0x64, 0x12, 0x53, 0x68, 0x61, + 0x68, 0x72, 0x69, 0x76, 0x61, 0x72, 0x08, 0x4d, + 0x65, 0x68, 0x72, 0x08, 0x41, 0x62, 0x61, 0x6e, + 0x08, 0x41, 0x7a, 0x61, 0x72, 0x06, 0x44, 0x65, + 0x79, 0x0c, 0x42, 0x61, 0x68, 0x6d, 0x61, 0x6e, + 0x0c, 0x45, 0x73, 0x66, 0x61, 0x6e, 0x64, 0x04, + 0x41, 0x50, 0x1a, 0x42, 0x65, 0x66, 0x6f, 0x72, + 0x65, 0x20, 0x52, 0x2e, 0x4f, 0x2e, 0x43, 0x2e, + 0x0c, 0x52, 0x2e, 0x4f, 0x2e, 0x43, 0x2e, 0x12, + 0x63, 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, + 0x73, 0x08, 0x64, 0x61, 0x74, 0x65, 0x08, 0x6c, + 0x61, 0x74, 0x6e, 0x04, 0x6e, 0x75, 0x10, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, + 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, + 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x26, + 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, + 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0x1e, 0x6e, 0x65, 0x67, 0x61, + 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, + 0x65, 0x72, 0x6e, 0x0e, 0x64, 0x65, 0x63, 0x69, + 0x6d, 0x61, 0x6c, 0x24, 0x7b, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x3a, 0x7b, + 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x7d, 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x63, 0x79, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0x10, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x63, 0x79, 0x2a, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x7b, 0x70, + 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, + 0x67, 0x6e, 0x7d, 0x40, 0x7b, 0x6d, 0x69, 0x6e, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x7b, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x0e, 0x70, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x10, 0x70, 0x61, 0x74, + 0x74, 0x65, 0x72, 0x6e, 0x73, 0x02, 0x2e, 0x02, + 0x2c, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x06, + 0x4e, 0x61, 0x4e, 0x06, 0x6e, 0x61, 0x6e, 0x02, + 0x2b, 0x10, 0x70, 0x6c, 0x75, 0x73, 0x53, 0x69, + 0x67, 0x6e, 0x02, 0x2d, 0x12, 0x6d, 0x69, 0x6e, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, 0x25, + 0x16, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, + 0x53, 0x69, 0x67, 0x6e, 0x03, 0x1e, 0x22, 0x10, + 0x69, 0x6e, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, + 0x0e, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, + 0x04, 0x41, 0x24, 0x06, 0x41, 0x55, 0x44, 0x04, + 0x52, 0x24, 0x06, 0x42, 0x52, 0x4c, 0x06, 0x43, + 0x4e, 0xa5, 0x06, 0x43, 0x4e, 0x59, 0x03, 0xac, + 0x20, 0x06, 0x45, 0x55, 0x52, 0x02, 0xa3, 0x06, + 0x47, 0x42, 0x50, 0x06, 0x48, 0x4b, 0x24, 0x06, + 0x48, 0x4b, 0x44, 0x03, 0xaa, 0x20, 0x06, 0x49, + 0x4c, 0x53, 0x03, 0xb9, 0x20, 0x06, 0x49, 0x4e, + 0x52, 0x06, 0x4a, 0x50, 0xa5, 0x06, 0x4a, 0x50, + 0x59, 0x03, 0xa9, 0x20, 0x06, 0x4b, 0x52, 0x57, + 0x04, 0x52, 0x4d, 0x06, 0x4d, 0x59, 0x52, 0x06, + 0x4e, 0x5a, 0x24, 0x06, 0x4e, 0x5a, 0x44, 0x06, + 0x4e, 0x54, 0x24, 0x06, 0x54, 0x57, 0x44, 0x03, + 0xab, 0x20, 0x06, 0x56, 0x4e, 0x44, 0x08, 0x46, + 0x43, 0x46, 0x41, 0x06, 0x58, 0x41, 0x46, 0x06, + 0x45, 0x43, 0x24, 0x06, 0x58, 0x43, 0x44, 0x06, + 0x43, 0x46, 0x41, 0x06, 0x58, 0x4f, 0x46, 0x08, + 0x43, 0x46, 0x50, 0x46, 0x06, 0x58, 0x50, 0x46, + 0x14, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, + 0x69, 0x65, 0x73, 0x52, 0x6e, 0x6f, 0x64, 0x65, + 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, + 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2f, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, + 0x61, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x70, 0x2f, + 0x6d, 0x73, 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, + 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, 0x27, 0x00, + 0x71, 0x9c, 0x6b, 0x01, 0xa0, 0x01, 0x00, 0x00, + 0x00, 0x39, 0xd0, 0x00, 0x00, 0x00, 0x43, 0xd1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd2, 0x00, 0x00, + 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd4, 0x00, 0x00, 0x00, 0x04, 0xd5, 0x00, 0x00, + 0x00, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x04, 0xd7, + 0x00, 0x00, 0x00, 0x04, 0xd8, 0x00, 0x00, 0x00, + 0x04, 0xd9, 0x00, 0x00, 0x00, 0x04, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xdb, 0x00, 0x00, 0x00, 0x04, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, + 0x00, 0x04, 0xde, 0x00, 0x00, 0x00, 0x04, 0xdf, + 0x00, 0x00, 0x00, 0x04, 0xe0, 0x00, 0x00, 0x00, + 0x04, 0xe1, 0x00, 0x00, 0x00, 0x04, 0xe2, 0x00, + 0x00, 0x00, 0x26, 0x0f, 0x00, 0x4d, 0xe3, 0x00, + 0x00, 0x00, 0x0a, 0x4d, 0xe4, 0x00, 0x00, 0x00, + 0x0a, 0x4d, 0xe5, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xe9, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, + 0xed, 0x00, 0x00, 0x00, 0x04, 0xee, 0x00, 0x00, + 0x00, 0x4d, 0xef, 0x00, 0x00, 0x00, 0x04, 0xf0, + 0x00, 0x00, 0x00, 0x4d, 0xf1, 0x00, 0x00, 0x00, + 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xf3, 0x00, + 0x00, 0x00, 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, + 0xf5, 0x00, 0x00, 0x00, 0x04, 0xf6, 0x00, 0x00, + 0x00, 0x4d, 0xf7, 0x00, 0x00, 0x00, 0x04, 0xf8, + 0x00, 0x00, 0x00, 0x4d, 0xf9, 0x00, 0x00, 0x00, + 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xfb, 0x00, + 0x00, 0x00, 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, + 0xfd, 0x00, 0x00, 0x00, 0x04, 0xfe, 0x00, 0x00, + 0x00, 0x4d, 0xff, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x01, 0x00, 0x00, 0x4d, 0x01, 0x01, 0x00, 0x00, + 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, 0x03, 0x01, + 0x00, 0x00, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, + 0x05, 0x01, 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, + 0x00, 0x4d, 0x07, 0x01, 0x00, 0x00, 0x04, 0x08, + 0x01, 0x00, 0x00, 0x4d, 0x09, 0x01, 0x00, 0x00, + 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x0b, 0x01, + 0x00, 0x00, 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, + 0x0d, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x01, 0x00, + 0x00, 0x4d, 0x0f, 0x01, 0x00, 0x00, 0x04, 0x10, + 0x01, 0x00, 0x00, 0x4d, 0x11, 0x01, 0x00, 0x00, + 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, 0x13, 0x01, + 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, + 0x15, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, + 0x00, 0x4d, 0x17, 0x01, 0x00, 0x00, 0x04, 0x18, + 0x01, 0x00, 0x00, 0x4d, 0x19, 0x01, 0x00, 0x00, + 0x04, 0x1a, 0x01, 0x00, 0x00, 0x4d, 0x1b, 0x01, + 0x00, 0x00, 0x04, 0x1c, 0x01, 0x00, 0x00, 0x4d, + 0x1d, 0x01, 0x00, 0x00, 0x04, 0x1e, 0x01, 0x00, + 0x00, 0x4d, 0x1f, 0x01, 0x00, 0x00, 0x04, 0x20, + 0x01, 0x00, 0x00, 0x4d, 0x21, 0x01, 0x00, 0x00, + 0x04, 0x22, 0x01, 0x00, 0x00, 0x4d, 0x23, 0x01, + 0x00, 0x00, 0x04, 0x24, 0x01, 0x00, 0x00, 0x4d, + 0x25, 0x01, 0x00, 0x00, 0x04, 0x26, 0x01, 0x00, + 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x00, 0x04, 0x27, + 0x01, 0x00, 0x00, 0x4d, 0x27, 0x01, 0x00, 0x00, + 0x04, 0x28, 0x01, 0x00, 0x00, 0x4d, 0x29, 0x01, + 0x00, 0x00, 0x04, 0x2a, 0x01, 0x00, 0x00, 0x4d, + 0x2b, 0x01, 0x00, 0x00, 0x04, 0x2c, 0x01, 0x00, + 0x00, 0x4d, 0x2d, 0x01, 0x00, 0x00, 0x04, 0x2e, + 0x01, 0x00, 0x00, 0x4d, 0x2f, 0x01, 0x00, 0x00, + 0x04, 0x30, 0x01, 0x00, 0x00, 0x4d, 0x31, 0x01, + 0x00, 0x00, 0x04, 0x32, 0x01, 0x00, 0x00, 0x4d, + 0x33, 0x01, 0x00, 0x00, 0x04, 0x34, 0x01, 0x00, + 0x00, 0x4d, 0x35, 0x01, 0x00, 0x00, 0x04, 0x36, + 0x01, 0x00, 0x00, 0x4d, 0x37, 0x01, 0x00, 0x00, + 0x04, 0x38, 0x01, 0x00, 0x00, 0x4d, 0x39, 0x01, + 0x00, 0x00, 0x4d, 0x3a, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x3b, 0x01, 0x00, 0x00, 0x4d, 0x3c, 0x01, + 0x00, 0x00, 0x04, 0x3d, 0x01, 0x00, 0x00, 0x4d, + 0x3e, 0x01, 0x00, 0x00, 0x04, 0x30, 0x01, 0x00, + 0x00, 0x4d, 0x31, 0x01, 0x00, 0x00, 0x04, 0x3f, + 0x01, 0x00, 0x00, 0x4d, 0x2b, 0x01, 0x00, 0x00, + 0x4d, 0x40, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x41, + 0x01, 0x00, 0x00, 0x4d, 0x42, 0x01, 0x00, 0x00, + 0x04, 0x43, 0x01, 0x00, 0x00, 0x4d, 0x44, 0x01, + 0x00, 0x00, 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, + 0x0b, 0x01, 0x00, 0x00, 0x04, 0x04, 0x01, 0x00, + 0x00, 0x4d, 0x05, 0x01, 0x00, 0x00, 0x4d, 0x45, + 0x01, 0x00, 0x00, 0x4d, 0x46, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x0b, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x17, 0x01, + 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, + 0x17, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x64, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x76, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, + 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, + 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, + 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, + 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, + 0x04, 0x89, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, + 0x01, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x00, 0xbe, 0x01, 0xbe, 0x02, + 0xbe, 0x03, 0xbe, 0x04, 0xbe, 0x05, 0xbe, 0x06, + 0xbe, 0x07, 0xbe, 0x08, 0xbe, 0x09, 0xbe, 0x0a, + 0xbe, 0x0b, 0xbe, 0x0c, 0x26, 0x0d, 0x00, 0x4d, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, + 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, + 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, + 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, + 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, + 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, + 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, + 0x04, 0x96, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x8a, 0x01, + 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, + 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, + 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, + 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, + 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, + 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, + 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, + 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x26, 0x0d, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x64, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x76, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x97, 0x01, 0x00, 0x00, + 0x04, 0x98, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, + 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, + 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, + 0x4d, 0xd7, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, + 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, + 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, + 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x4d, + 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x0d, 0xbe, 0x0e, 0xbe, 0x0f, 0xbe, 0x10, + 0xbe, 0x11, 0xbe, 0x12, 0xbe, 0x13, 0xbe, 0x14, + 0xbe, 0x15, 0xbe, 0x16, 0xbe, 0x17, 0xbe, 0x18, + 0xbe, 0x19, 0x26, 0x0d, 0x00, 0x4d, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, + 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, + 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, + 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, + 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, + 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, + 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, + 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, + 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, + 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, + 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, + 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, + 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, + 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, + 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, + 0xa5, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, + 0x04, 0x98, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x97, 0x01, + 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x78, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, + 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x1a, 0xbe, + 0x1b, 0xbe, 0x1c, 0xbe, 0x1d, 0xbe, 0x1e, 0xbe, + 0x1f, 0xbe, 0x20, 0xbe, 0x21, 0xbe, 0x22, 0xbe, + 0x23, 0xbe, 0x24, 0xbe, 0x25, 0xbe, 0x26, 0x26, + 0x0d, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, + 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, + 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, + 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, + 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, + 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, + 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, + 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, + 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, + 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, + 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, + 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, + 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, + 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, + 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x97, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x97, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x78, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x4d, + 0x7d, 0x01, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x27, 0xbe, 0x28, 0xbe, + 0x29, 0xbe, 0x2a, 0xbe, 0x2b, 0xbe, 0x2c, 0xbe, + 0x2d, 0xbe, 0x2e, 0xbe, 0x2f, 0xbe, 0x30, 0xbe, + 0x31, 0xbe, 0x32, 0x26, 0x0c, 0x00, 0x4d, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, + 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, + 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, + 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, + 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, + 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, + 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, + 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, + 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, + 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, + 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, + 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, + 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, + 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, + 0x98, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, + 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x78, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, + 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x17, + 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x04, 0x17, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, + 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x64, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x49, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x76, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xb2, 0x01, + 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, 0x04, + 0xb4, 0x01, 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, + 0x00, 0x26, 0x04, 0x00, 0x4d, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, 0xb3, + 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, 0x00, + 0x04, 0xb5, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xb2, 0x01, + 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, 0x04, + 0xb4, 0x01, 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, + 0x00, 0x26, 0x04, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, + 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x33, 0xbe, 0x34, 0xbe, 0x35, 0xbe, 0x36, 0xbe, + 0x37, 0xbe, 0x38, 0xbe, 0x39, 0xbe, 0x3a, 0xbe, + 0x3b, 0xbe, 0x3c, 0xbe, 0x3d, 0xbe, 0x3e, 0xbe, + 0x3f, 0xbe, 0x40, 0x26, 0x0e, 0x00, 0x4d, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, + 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, + 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, 0x04, + 0xba, 0x01, 0x00, 0x00, 0x04, 0xbb, 0x01, 0x00, + 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, 0x04, 0xbd, + 0x01, 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, + 0x04, 0xbf, 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, + 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, 0x04, + 0xc2, 0x01, 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, + 0x00, 0x26, 0x0e, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb7, + 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, + 0x04, 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, + 0x00, 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, + 0xbc, 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, + 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, + 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, + 0x04, 0xc1, 0x01, 0x00, 0x00, 0x04, 0xc2, 0x01, + 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, 0x26, + 0x0e, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x64, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x76, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xc4, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xc4, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x41, 0xbe, 0x42, 0xbe, 0x43, 0xbe, + 0x44, 0xbe, 0x45, 0xbe, 0x46, 0xbe, 0x47, 0xbe, + 0x48, 0xbe, 0x49, 0xbe, 0x4a, 0xbe, 0x4b, 0xbe, + 0x4c, 0x26, 0x0c, 0x00, 0x4d, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, + 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, + 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, + 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, 0x04, + 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, + 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, + 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, + 0x04, 0xd0, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xc5, 0x01, + 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, + 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, + 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, 0x04, 0xca, + 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, + 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, + 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, 0x04, + 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xd1, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xd1, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x78, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x4d, + 0x7d, 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x4d, 0xbe, 0x4e, 0xbe, + 0x4f, 0xbe, 0x50, 0xbe, 0x51, 0xbe, 0x52, 0xbe, + 0x53, 0xbe, 0x54, 0xbe, 0x55, 0xbe, 0x56, 0xbe, + 0x57, 0xbe, 0x58, 0x26, 0x0c, 0x00, 0x4d, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, + 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, + 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, + 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, + 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, + 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, + 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, + 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, + 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, + 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, + 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, + 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, + 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, + 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xea, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x78, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, + 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x59, 0xbe, + 0x5a, 0xbe, 0x5b, 0xbe, 0x5c, 0xbe, 0x5d, 0xbe, + 0x5e, 0xbe, 0x5f, 0xbe, 0x60, 0xbe, 0x61, 0xbe, + 0x62, 0xbe, 0x63, 0xbe, 0x64, 0x26, 0x0c, 0x00, + 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, + 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, + 0xd4, 0x01, 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, + 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, + 0x01, 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, + 0x04, 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, + 0x00, 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, + 0xdc, 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, + 0x01, 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, + 0x04, 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, + 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, + 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, + 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, + 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, + 0x04, 0xe9, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xea, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0xea, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, + 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x17, 0x01, 0x00, 0x00, 0x04, 0x49, + 0x01, 0x00, 0x00, 0x04, 0x17, 0x01, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, + 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, + 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, + 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, + 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, + 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, + 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, + 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, + 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, + 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, + 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, + 0x00, 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, + 0xfe, 0x01, 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, + 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, + 0x02, 0x00, 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, + 0x04, 0x03, 0x02, 0x00, 0x00, 0x04, 0x04, 0x02, + 0x00, 0x00, 0x04, 0x05, 0x02, 0x00, 0x00, 0x04, + 0x06, 0x02, 0x00, 0x00, 0x04, 0x07, 0x02, 0x00, + 0x00, 0x04, 0x08, 0x02, 0x00, 0x00, 0x04, 0x09, + 0x02, 0x00, 0x00, 0x04, 0x0a, 0x02, 0x00, 0x00, + 0x26, 0x20, 0x00, 0x04, 0x0b, 0x02, 0x00, 0x00, + 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, + 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, + 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, + 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x23, + 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, + 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, + 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, + 0x11, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, + 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, 0x27, + 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, + 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, + 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, + 0x15, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, + 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, 0x2b, + 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, + 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, + 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, + 0x19, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, + 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x2f, + 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, + 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, + 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, + 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, + 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x33, + 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, + 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, + 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, + 0x21, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, + 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x37, + 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, + 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, + 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, + 0x25, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, + 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x3b, + 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, + 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, + 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, + 0x29, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, + 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x3f, + 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, + 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, + 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, + 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, + 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x43, + 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, + 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, + 0x31, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, + 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x47, + 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, + 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, + 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, + 0x35, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, + 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, 0x4b, + 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, + 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, + 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, + 0x39, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, + 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x4f, + 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, + 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, + 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, + 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, + 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x53, + 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, + 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, + 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, + 0x41, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, + 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, 0x57, + 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, + 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, + 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, + 0x45, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, + 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x5b, + 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, + 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, + 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, + 0x49, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, + 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x5f, + 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, + 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, + 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, + 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, + 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x63, + 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, + 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, + 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, + 0x51, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, + 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x67, + 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, + 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, + 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, + 0x55, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, + 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, 0x6b, + 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, + 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, + 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, + 0x59, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, + 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x6f, + 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, + 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, + 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, + 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, + 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x73, + 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, + 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, + 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, + 0x61, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, + 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x77, + 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, + 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, + 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, + 0x65, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, + 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x7b, + 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, + 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, + 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, + 0x69, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, + 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x7f, + 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, + 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, + 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, + 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, + 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x83, + 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, + 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, + 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, + 0x71, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, + 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0x87, + 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, + 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, + 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, + 0x75, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, + 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0x8b, + 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, + 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, + 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, + 0x79, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, + 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x8f, + 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, + 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, + 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, + 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, + 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, 0x93, + 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, + 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, + 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, + 0x81, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, + 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0x97, + 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, + 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, + 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, + 0x85, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, + 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0x9b, + 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, + 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, + 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, + 0x89, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, + 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0x9f, + 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, + 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, + 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, + 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, + 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xa3, + 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, + 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, + 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, + 0x91, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, + 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0xa7, + 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, + 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, + 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, + 0x95, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, + 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0xab, + 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, + 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, + 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, + 0x99, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, + 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xaf, + 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, + 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, + 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, + 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, + 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xb3, + 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, + 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, + 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, + 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, + 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xb7, + 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, + 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, + 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, + 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, + 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xbb, + 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, + 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, + 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, + 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, + 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xbf, + 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, + 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, + 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, + 0xad, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, + 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0xc3, + 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, + 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, + 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, + 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, + 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xc7, + 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, + 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, + 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, + 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, + 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xcb, + 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, + 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, + 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, + 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, + 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0xcf, + 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, + 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, + 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, + 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, + 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, + 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, + 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, + 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, + 0xcd, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x80, 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, + 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xd0, 0x02, + 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, + 0xd1, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x80, 0x04, 0xd2, 0x02, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x80, 0x04, 0x17, 0x01, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xd3, 0x02, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x80, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x80, 0x4d, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, + 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, + 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, + 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, + 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, + 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, + 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, + 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, + 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, + 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, + 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, + 0x00, 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, + 0xfe, 0x01, 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, + 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, + 0x02, 0x00, 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, + 0x04, 0x03, 0x02, 0x00, 0x00, 0x04, 0x04, 0x02, + 0x00, 0x00, 0x04, 0x05, 0x02, 0x00, 0x00, 0x04, + 0x06, 0x02, 0x00, 0x00, 0x04, 0x07, 0x02, 0x00, + 0x00, 0x04, 0x08, 0x02, 0x00, 0x00, 0x04, 0x09, + 0x02, 0x00, 0x00, 0x04, 0x0a, 0x02, 0x00, 0x00, + 0x26, 0x20, 0x00, 0x04, 0x0b, 0x02, 0x00, 0x00, + 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, + 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, + 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, + 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x23, + 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, + 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, + 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, + 0x11, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, + 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, 0x27, + 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, + 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, + 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, + 0x15, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, + 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, 0x2b, + 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, + 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, + 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, + 0x19, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, + 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x2f, + 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, + 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, + 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, + 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, + 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x33, + 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, + 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, + 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, + 0x21, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, + 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x37, + 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, + 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, + 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, + 0x25, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, + 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x3b, + 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, + 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, + 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, + 0x29, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, + 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x3f, + 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, + 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, + 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, + 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, + 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x43, + 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, + 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, + 0x31, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, + 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x47, + 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, + 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, + 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, + 0x35, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, + 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, 0x4b, + 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, + 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, + 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, + 0x39, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, + 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x4f, + 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, + 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, + 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, + 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, + 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x53, + 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, + 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, + 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, + 0x41, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, + 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, 0x57, + 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, + 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, + 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, + 0x45, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, + 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x5b, + 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, + 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, + 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, + 0x49, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, + 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x5f, + 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, + 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, + 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, + 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, + 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x63, + 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, + 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, + 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, + 0x51, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, + 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x67, + 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, + 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, + 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, + 0x55, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, + 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, 0x6b, + 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, + 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, + 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, + 0x59, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, + 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x6f, + 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, + 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, + 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, + 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, + 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x73, + 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, + 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, + 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, + 0x61, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, + 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x77, + 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, + 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, + 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, + 0x65, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, + 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x7b, + 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, + 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, + 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, + 0x69, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, + 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x7f, + 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, + 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, + 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, + 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, + 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x83, + 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, + 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, + 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, + 0x71, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, + 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0x87, + 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, + 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, + 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, + 0x75, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, + 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0x8b, + 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, + 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, + 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, + 0x79, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, + 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x8f, + 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, + 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, + 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, + 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, + 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, 0x93, + 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, + 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, + 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, + 0x81, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, + 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0x97, + 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, + 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, + 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, + 0x85, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, + 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0x9b, + 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, + 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, + 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, + 0x89, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, + 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0x9f, + 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, + 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, + 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, + 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, + 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xa3, + 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, + 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, + 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, + 0x91, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, + 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0xa7, + 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, + 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, + 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, + 0x95, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, + 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0xab, + 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, + 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, + 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, + 0x99, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, + 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xaf, + 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, + 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, + 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, + 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, + 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xb3, + 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, + 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, + 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, + 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, + 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xb7, + 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, + 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, + 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, + 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, + 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xbb, + 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, + 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, + 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, + 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, + 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xbf, + 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, + 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, + 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, + 0xad, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, + 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0xc3, + 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, + 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, + 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, + 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, + 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xc7, + 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, + 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, + 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, + 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, + 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xcb, + 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, + 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, + 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, + 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, + 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0xcf, + 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, + 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, + 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, + 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, + 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, + 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, + 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, + 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, + 0xcd, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x80, 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, + 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xd0, 0x02, + 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, + 0xd1, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x80, 0x04, 0xd2, 0x02, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x80, 0x04, 0xd4, 0x02, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xd5, 0x02, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, + 0xd6, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x80, 0x04, 0xd7, 0x02, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x80, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, + 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, + 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, + 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, + 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, + 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, + 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, + 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, + 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, + 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, + 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, + 0x00, 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, + 0xfe, 0x01, 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, + 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, + 0x02, 0x00, 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, + 0x04, 0x03, 0x02, 0x00, 0x00, 0x04, 0x04, 0x02, + 0x00, 0x00, 0x04, 0x05, 0x02, 0x00, 0x00, 0x04, + 0x06, 0x02, 0x00, 0x00, 0x04, 0x07, 0x02, 0x00, + 0x00, 0x04, 0x08, 0x02, 0x00, 0x00, 0x04, 0x09, + 0x02, 0x00, 0x00, 0x04, 0x0a, 0x02, 0x00, 0x00, + 0x26, 0x20, 0x00, 0x04, 0x0b, 0x02, 0x00, 0x00, + 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, + 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, + 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, + 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x23, + 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, + 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, + 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, + 0x11, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, + 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, 0x27, + 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, + 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, + 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, + 0x15, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, + 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, 0x2b, + 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, + 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, + 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, + 0x19, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, + 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x2f, + 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, + 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, + 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, + 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, + 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x33, + 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, + 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, + 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, + 0x21, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, + 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x37, + 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, + 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, + 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, + 0x25, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, + 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x3b, + 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, + 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, + 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, + 0x29, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, + 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x3f, + 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, + 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, + 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, + 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, + 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x43, + 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, + 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, + 0x31, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, + 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x47, + 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, + 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, + 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, + 0x35, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, + 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, 0x4b, + 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, + 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, + 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, + 0x39, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, + 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x4f, + 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, + 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, + 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, + 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, + 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x53, + 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, + 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, + 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, + 0x41, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, + 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, 0x57, + 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, + 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, + 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, + 0x45, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, + 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x5b, + 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, + 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, + 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, + 0x49, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, + 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x5f, + 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, + 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, + 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, + 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, + 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x63, + 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, + 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, + 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, + 0x51, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, + 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x67, + 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, + 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, + 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, + 0x55, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, + 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, 0x6b, + 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, + 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, + 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, + 0x59, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, + 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x6f, + 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, + 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, + 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, + 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, + 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x73, + 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, + 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, + 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, + 0x61, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, + 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x77, + 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, + 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, + 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, + 0x65, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, + 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x7b, + 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, + 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, + 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, + 0x69, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, + 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x7f, + 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, + 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, + 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, + 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, + 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x83, + 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, + 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, + 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, + 0x71, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, + 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0x87, + 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, + 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, + 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, + 0x75, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, + 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0x8b, + 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, + 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, + 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, + 0x79, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, + 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x8f, + 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, + 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, + 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, + 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, + 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, 0x93, + 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, + 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, + 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, + 0x81, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, + 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0x97, + 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, + 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, + 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, + 0x85, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, + 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0x9b, + 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, + 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, + 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, + 0x89, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, + 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0x9f, + 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, + 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, + 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, + 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, + 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xa3, + 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, + 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, + 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, + 0x91, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, + 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0xa7, + 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, + 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, + 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, + 0x95, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, + 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0xab, + 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, + 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, + 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, + 0x99, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, + 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xaf, + 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, + 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, + 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, + 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, + 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xb3, + 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, + 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, + 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, + 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, + 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xb7, + 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, + 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, + 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, + 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, + 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xbb, + 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, + 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, + 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, + 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, + 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xbf, + 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, + 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, + 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, + 0xad, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, + 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0xc3, + 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, + 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, + 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, + 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, + 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xc7, + 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, + 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, + 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, + 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, + 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xcb, + 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, + 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, + 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, + 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, + 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0xcf, + 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, + 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, + 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, + 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, + 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, + 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, + 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, + 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, + 0xcd, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x80, 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, + 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xd0, 0x02, + 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, + 0xd1, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x80, 0x04, 0xd2, 0x02, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x80, 0x04, 0xd4, 0x02, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xd5, 0x02, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, + 0xd6, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x80, 0x04, 0xd7, 0x02, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x80, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x78, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, + 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x65, + 0xbe, 0x66, 0xbe, 0x67, 0xbe, 0x68, 0xbe, 0x69, + 0xbe, 0x6a, 0xbe, 0x6b, 0xbe, 0x6c, 0xbe, 0x6d, + 0xbe, 0x6e, 0xbe, 0x6f, 0xbe, 0x70, 0x26, 0x0c, + 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0xd8, + 0x02, 0x00, 0x00, 0x04, 0xd9, 0x02, 0x00, 0x00, + 0x04, 0xda, 0x02, 0x00, 0x00, 0x04, 0xdb, 0x02, + 0x00, 0x00, 0x04, 0xdc, 0x02, 0x00, 0x00, 0x04, + 0xdd, 0x02, 0x00, 0x00, 0x04, 0xde, 0x02, 0x00, + 0x00, 0x04, 0xdf, 0x02, 0x00, 0x00, 0x04, 0xe0, + 0x02, 0x00, 0x00, 0x04, 0xe1, 0x02, 0x00, 0x00, + 0x04, 0xe2, 0x02, 0x00, 0x00, 0x04, 0xe3, 0x02, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xd8, 0x02, 0x00, 0x00, 0x04, + 0xd9, 0x02, 0x00, 0x00, 0x04, 0xda, 0x02, 0x00, + 0x00, 0x04, 0xdb, 0x02, 0x00, 0x00, 0x04, 0xdc, + 0x02, 0x00, 0x00, 0x04, 0xdd, 0x02, 0x00, 0x00, + 0x04, 0xde, 0x02, 0x00, 0x00, 0x04, 0xdf, 0x02, + 0x00, 0x00, 0x04, 0xe0, 0x02, 0x00, 0x00, 0x04, + 0xe1, 0x02, 0x00, 0x00, 0x04, 0xe2, 0x02, 0x00, + 0x00, 0x04, 0xe3, 0x02, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x64, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x76, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xe4, 0x02, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0xe4, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe4, 0x02, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x4d, + 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x17, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x17, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, + 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xe5, 0x02, 0x00, 0x00, 0x04, 0xe6, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0xe5, 0x02, 0x00, 0x00, + 0x04, 0xe6, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe5, 0x02, + 0x00, 0x00, 0x04, 0xe6, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x78, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, + 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0xe2, + 0x00, 0x00, 0x00, 0x4d, 0xe7, 0x02, 0x00, 0x00, + 0x4d, 0xe8, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xe9, + 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, + 0x02, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xeb, 0x02, + 0x00, 0x00, 0x4d, 0xec, 0x02, 0x00, 0x00, 0x04, + 0xed, 0x02, 0x00, 0x00, 0x4d, 0xee, 0x02, 0x00, + 0x00, 0x4d, 0xef, 0x02, 0x00, 0x00, 0x0b, 0x04, + 0xf0, 0x02, 0x00, 0x00, 0x4d, 0xec, 0x02, 0x00, + 0x00, 0x04, 0xf1, 0x02, 0x00, 0x00, 0x4d, 0xee, + 0x02, 0x00, 0x00, 0x4d, 0xf2, 0x02, 0x00, 0x00, + 0x0b, 0x04, 0xf3, 0x02, 0x00, 0x00, 0x4d, 0xec, + 0x02, 0x00, 0x00, 0x04, 0xf4, 0x02, 0x00, 0x00, + 0x4d, 0xee, 0x02, 0x00, 0x00, 0x4d, 0xf5, 0x02, + 0x00, 0x00, 0x4d, 0xf6, 0x02, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0xf7, 0x02, 0x00, 0x00, 0x4d, 0xef, + 0x02, 0x00, 0x00, 0x04, 0xf8, 0x02, 0x00, 0x00, + 0x4d, 0xf9, 0x02, 0x00, 0x00, 0x04, 0xfa, 0x02, + 0x00, 0x00, 0x4d, 0xfb, 0x02, 0x00, 0x00, 0x04, + 0xfc, 0x02, 0x00, 0x00, 0x4d, 0xfd, 0x02, 0x00, + 0x00, 0x04, 0xfe, 0x02, 0x00, 0x00, 0x4d, 0xff, + 0x02, 0x00, 0x00, 0x04, 0x00, 0x03, 0x00, 0x00, + 0x4d, 0x01, 0x03, 0x00, 0x00, 0x04, 0x02, 0x03, + 0x00, 0x00, 0x4d, 0x03, 0x03, 0x00, 0x00, 0x4d, + 0xe9, 0x02, 0x00, 0x00, 0x4d, 0x04, 0x03, 0x00, + 0x00, 0x0b, 0x04, 0x05, 0x03, 0x00, 0x00, 0x4d, + 0x06, 0x03, 0x00, 0x00, 0x04, 0x07, 0x03, 0x00, + 0x00, 0x4d, 0x08, 0x03, 0x00, 0x00, 0x04, 0x09, + 0x03, 0x00, 0x00, 0x4d, 0x0a, 0x03, 0x00, 0x00, + 0x04, 0x0b, 0x03, 0x00, 0x00, 0x4d, 0x0c, 0x03, + 0x00, 0x00, 0x04, 0x0d, 0x03, 0x00, 0x00, 0x4d, + 0x0e, 0x03, 0x00, 0x00, 0x04, 0x0f, 0x03, 0x00, + 0x00, 0x4d, 0x10, 0x03, 0x00, 0x00, 0x04, 0x11, + 0x03, 0x00, 0x00, 0x4d, 0x12, 0x03, 0x00, 0x00, + 0x04, 0x13, 0x03, 0x00, 0x00, 0x4d, 0x14, 0x03, + 0x00, 0x00, 0x04, 0x15, 0x03, 0x00, 0x00, 0x4d, + 0x16, 0x03, 0x00, 0x00, 0x04, 0x17, 0x03, 0x00, + 0x00, 0x4d, 0x18, 0x03, 0x00, 0x00, 0x04, 0x19, + 0x03, 0x00, 0x00, 0x4d, 0x1a, 0x03, 0x00, 0x00, + 0x04, 0x1b, 0x03, 0x00, 0x00, 0x4d, 0x1c, 0x03, + 0x00, 0x00, 0x04, 0x1d, 0x03, 0x00, 0x00, 0x4d, + 0x1e, 0x03, 0x00, 0x00, 0x04, 0x1f, 0x03, 0x00, + 0x00, 0x4d, 0x20, 0x03, 0x00, 0x00, 0x04, 0x21, + 0x03, 0x00, 0x00, 0x4d, 0x22, 0x03, 0x00, 0x00, + 0x04, 0x23, 0x03, 0x00, 0x00, 0x4d, 0x24, 0x03, + 0x00, 0x00, 0x04, 0x25, 0x03, 0x00, 0x00, 0x4d, + 0x26, 0x03, 0x00, 0x00, 0x04, 0x27, 0x03, 0x00, + 0x00, 0x4d, 0x28, 0x03, 0x00, 0x00, 0x4d, 0x29, + 0x03, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x00, + 0x24, 0x01, 0x00, 0xcc, 0x28, 0xd4, 0x0c, 0x01, + 0x00, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, + 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_my_MM_size = 25172; + +const uint8_t intl_my_MM[25172] = { + 0x01, 0xd7, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x0a, 0x6d, 0x79, 0x2d, 0x4d, 0x4d, 0x0c, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x0e, 0x67, 0x72, + 0x65, 0x67, 0x6f, 0x72, 0x79, 0x10, 0x62, 0x75, + 0x64, 0x64, 0x68, 0x69, 0x73, 0x74, 0x0e, 0x63, + 0x68, 0x69, 0x6e, 0x65, 0x73, 0x65, 0x0c, 0x63, + 0x6f, 0x70, 0x74, 0x69, 0x63, 0x0a, 0x64, 0x61, + 0x6e, 0x67, 0x69, 0x0e, 0x65, 0x74, 0x68, 0x69, + 0x6f, 0x61, 0x61, 0x10, 0x65, 0x74, 0x68, 0x69, + 0x6f, 0x70, 0x69, 0x63, 0x0e, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x69, 0x63, 0x0c, 0x68, 0x65, 0x62, + 0x72, 0x65, 0x77, 0x0c, 0x69, 0x6e, 0x64, 0x69, + 0x61, 0x6e, 0x0e, 0x69, 0x73, 0x6c, 0x61, 0x6d, + 0x69, 0x63, 0x10, 0x69, 0x73, 0x6c, 0x61, 0x6d, + 0x69, 0x63, 0x63, 0x10, 0x6a, 0x61, 0x70, 0x61, + 0x6e, 0x65, 0x73, 0x65, 0x0e, 0x70, 0x65, 0x72, + 0x73, 0x69, 0x61, 0x6e, 0x06, 0x72, 0x6f, 0x63, + 0x04, 0x63, 0x61, 0x0e, 0x68, 0x6f, 0x75, 0x72, + 0x4e, 0x6f, 0x30, 0x0c, 0x68, 0x6f, 0x75, 0x72, + 0x31, 0x32, 0x0e, 0x7b, 0x31, 0x7d, 0x20, 0x7b, + 0x30, 0x7d, 0x0a, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x0c, 0x6d, 0x65, 0x64, 0x69, 0x75, 0x6d, 0x15, + 0x7b, 0x00, 0x31, 0x00, 0x7d, 0x00, 0x19, 0x10, + 0x3e, 0x10, 0x2c, 0x10, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x08, 0x66, 0x75, 0x6c, + 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x02, 0x64, + 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, 0x09, 0x45, + 0x00, 0x4a, 0x10, 0x20, 0x00, 0x64, 0x00, 0x04, + 0x45, 0x64, 0x10, 0x45, 0x20, 0x68, 0x3a, 0x6d, + 0x6d, 0x20, 0x61, 0x06, 0x45, 0x68, 0x6d, 0x0e, + 0x45, 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x06, + 0x45, 0x48, 0x6d, 0x16, 0x45, 0x20, 0x68, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x08, + 0x45, 0x68, 0x6d, 0x73, 0x14, 0x45, 0x20, 0x48, + 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x08, + 0x45, 0x48, 0x6d, 0x73, 0x06, 0x47, 0x20, 0x79, + 0x04, 0x47, 0x79, 0x0e, 0x47, 0x20, 0x4d, 0x4d, + 0x4d, 0x20, 0x79, 0x0a, 0x47, 0x79, 0x4d, 0x4d, + 0x4d, 0x12, 0x47, 0x20, 0x64, 0x20, 0x4d, 0x4d, + 0x4d, 0x20, 0x79, 0x0c, 0x47, 0x79, 0x4d, 0x4d, + 0x4d, 0x64, 0x19, 0x45, 0x00, 0x4a, 0x10, 0x20, + 0x00, 0x47, 0x00, 0x20, 0x00, 0x64, 0x00, 0x20, + 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x20, + 0x00, 0x79, 0x00, 0x0e, 0x47, 0x79, 0x4d, 0x4d, + 0x4d, 0x45, 0x64, 0x06, 0x68, 0x20, 0x61, 0x02, + 0x68, 0x04, 0x48, 0x48, 0x02, 0x48, 0x0c, 0x68, + 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x04, 0x68, 0x6d, + 0x0a, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x04, 0x48, + 0x6d, 0x12, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x61, 0x06, 0x68, 0x6d, 0x73, 0x10, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x06, 0x48, 0x6d, 0x73, 0x16, 0x68, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x20, 0x76, + 0x08, 0x68, 0x6d, 0x73, 0x76, 0x14, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x76, + 0x08, 0x48, 0x6d, 0x73, 0x76, 0x10, 0x68, 0x3a, + 0x6d, 0x6d, 0x20, 0x61, 0x20, 0x76, 0x06, 0x68, + 0x6d, 0x76, 0x0e, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x20, 0x76, 0x06, 0x48, 0x6d, 0x76, 0x02, 0x4c, + 0x02, 0x4d, 0x06, 0x64, 0x2f, 0x4d, 0x04, 0x4d, + 0x64, 0x0d, 0x45, 0x00, 0x4a, 0x10, 0x20, 0x00, + 0x64, 0x00, 0x2f, 0x00, 0x4d, 0x00, 0x06, 0x4d, + 0x45, 0x64, 0x06, 0x4c, 0x4c, 0x4c, 0x06, 0x4d, + 0x4d, 0x4d, 0x0a, 0x64, 0x20, 0x4d, 0x4d, 0x4d, + 0x08, 0x4d, 0x4d, 0x4d, 0x64, 0x11, 0x45, 0x00, + 0x4a, 0x10, 0x20, 0x00, 0x64, 0x00, 0x20, 0x00, + 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x0a, 0x4d, + 0x4d, 0x4d, 0x45, 0x64, 0x0c, 0x64, 0x20, 0x4d, + 0x4d, 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x4d, + 0x64, 0x13, 0x45, 0x00, 0x4a, 0x10, 0x20, 0x00, + 0x64, 0x00, 0x20, 0x00, 0x4d, 0x00, 0x4d, 0x00, + 0x4d, 0x00, 0x4d, 0x00, 0x0c, 0x4d, 0x4d, 0x4d, + 0x4d, 0x45, 0x64, 0x0a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x04, 0x6d, 0x73, 0x02, 0x79, 0x06, 0x4d, + 0x2f, 0x79, 0x04, 0x79, 0x4d, 0x0e, 0x64, 0x64, + 0x2d, 0x4d, 0x4d, 0x2d, 0x79, 0x06, 0x79, 0x4d, + 0x64, 0x11, 0x45, 0x00, 0x4a, 0x10, 0x20, 0x00, + 0x64, 0x00, 0x2d, 0x00, 0x4d, 0x00, 0x2d, 0x00, + 0x79, 0x00, 0x08, 0x79, 0x4d, 0x45, 0x64, 0x0a, + 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x08, 0x79, 0x4d, + 0x4d, 0x4d, 0x0e, 0x64, 0x20, 0x4d, 0x4d, 0x4d, + 0x20, 0x79, 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x64, + 0x15, 0x45, 0x00, 0x4a, 0x10, 0x20, 0x00, 0x64, + 0x00, 0x20, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x4d, + 0x00, 0x20, 0x00, 0x79, 0x00, 0x0c, 0x79, 0x4d, + 0x4d, 0x4d, 0x45, 0x64, 0x0c, 0x4d, 0x4d, 0x4d, + 0x4d, 0x20, 0x79, 0x0a, 0x79, 0x4d, 0x4d, 0x4d, + 0x4d, 0x0a, 0x51, 0x51, 0x51, 0x20, 0x79, 0x08, + 0x79, 0x51, 0x51, 0x51, 0x0c, 0x51, 0x51, 0x51, + 0x51, 0x20, 0x79, 0x0a, 0x79, 0x51, 0x51, 0x51, + 0x51, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x73, 0x1f, 0x45, 0x00, 0x45, 0x00, 0x45, + 0x00, 0x45, 0x00, 0x4a, 0x10, 0x20, 0x00, 0x64, + 0x00, 0x64, 0x00, 0x20, 0x00, 0x4d, 0x00, 0x4d, + 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x20, 0x00, 0x79, + 0x00, 0x14, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x45, + 0x45, 0x45, 0x45, 0x64, 0x10, 0x64, 0x20, 0x4d, + 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0c, 0x79, 0x4d, + 0x4d, 0x4d, 0x4d, 0x64, 0x10, 0x64, 0x64, 0x2d, + 0x4d, 0x4d, 0x2d, 0x79, 0x79, 0x16, 0x64, 0x61, + 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x73, 0x1a, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x20, 0x7a, 0x7a, 0x7a, 0x7a, 0x12, + 0x68, 0x6d, 0x6d, 0x73, 0x73, 0x7a, 0x7a, 0x7a, + 0x7a, 0x14, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x20, 0x7a, 0x08, 0x68, 0x6d, 0x73, + 0x7a, 0x16, 0x74, 0x69, 0x6d, 0x65, 0x46, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x73, 0x0e, 0x66, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x73, 0x03, 0x07, 0x10, + 0x03, 0x16, 0x10, 0x03, 0x19, 0x10, 0x03, 0x27, + 0x10, 0x03, 0x29, 0x10, 0x03, 0x05, 0x10, 0x03, + 0x21, 0x10, 0x03, 0x14, 0x10, 0x03, 0x12, 0x10, + 0x0c, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x07, + 0x07, 0x10, 0x14, 0x10, 0x3a, 0x10, 0x05, 0x16, + 0x10, 0x31, 0x10, 0x07, 0x19, 0x10, 0x10, 0x10, + 0x3a, 0x10, 0x09, 0x27, 0x10, 0x15, 0x10, 0x3c, + 0x10, 0x2e, 0x10, 0x05, 0x19, 0x10, 0x31, 0x10, + 0x09, 0x07, 0x10, 0x3d, 0x10, 0x14, 0x10, 0x3a, + 0x10, 0x05, 0x07, 0x10, 0x30, 0x10, 0x07, 0x05, + 0x10, 0x00, 0x10, 0x3a, 0x10, 0x0b, 0x21, 0x10, + 0x31, 0x10, 0x2c, 0x10, 0x00, 0x10, 0x3a, 0x10, + 0x07, 0x14, 0x10, 0x2d, 0x10, 0x2f, 0x10, 0x05, + 0x12, 0x10, 0x2e, 0x10, 0x11, 0x07, 0x10, 0x14, + 0x10, 0x3a, 0x10, 0x14, 0x10, 0x1d, 0x10, 0x2b, + 0x10, 0x1b, 0x10, 0x2e, 0x10, 0x15, 0x16, 0x10, + 0x31, 0x10, 0x16, 0x10, 0x31, 0x10, 0x2c, 0x10, + 0x3a, 0x10, 0x1d, 0x10, 0x2b, 0x10, 0x1b, 0x10, + 0x2e, 0x10, 0x0f, 0x07, 0x10, 0x30, 0x10, 0x1c, + 0x10, 0x2d, 0x10, 0x2f, 0x10, 0x04, 0x10, 0x3a, + 0x10, 0x0b, 0x29, 0x10, 0x02, 0x10, 0x2f, 0x10, + 0x10, 0x10, 0x3a, 0x10, 0x11, 0x05, 0x10, 0x00, + 0x10, 0x3a, 0x10, 0x10, 0x10, 0x04, 0x10, 0x3a, + 0x10, 0x18, 0x10, 0x2c, 0x10, 0x15, 0x21, 0x10, + 0x31, 0x10, 0x2c, 0x10, 0x00, 0x10, 0x3a, 0x10, + 0x10, 0x10, 0x2d, 0x10, 0x2f, 0x10, 0x18, 0x10, + 0x2c, 0x10, 0x11, 0x14, 0x10, 0x2d, 0x10, 0x2f, + 0x10, 0x1d, 0x10, 0x04, 0x10, 0x3a, 0x10, 0x18, + 0x10, 0x2c, 0x10, 0x0f, 0x12, 0x10, 0x2e, 0x10, + 0x07, 0x10, 0x04, 0x10, 0x3a, 0x10, 0x18, 0x10, + 0x2c, 0x10, 0x0c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, + 0x73, 0x03, 0x10, 0x10, 0x03, 0x17, 0x10, 0x03, + 0x00, 0x10, 0x03, 0x1e, 0x10, 0x13, 0x10, 0x10, + 0x14, 0x10, 0x04, 0x10, 0x3a, 0x10, 0x39, 0x10, + 0x02, 0x10, 0x14, 0x10, 0x3d, 0x10, 0x31, 0x10, + 0x0f, 0x10, 0x10, 0x14, 0x10, 0x04, 0x10, 0x3a, + 0x10, 0x39, 0x10, 0x1c, 0x10, 0x2c, 0x10, 0x0d, + 0x21, 0x10, 0x04, 0x10, 0x3a, 0x10, 0x39, 0x10, + 0x02, 0x10, 0x2b, 0x10, 0x11, 0x17, 0x10, 0x2f, + 0x10, 0x12, 0x10, 0x39, 0x10, 0x13, 0x10, 0x1f, + 0x10, 0x30, 0x10, 0x38, 0x10, 0x11, 0x00, 0x10, + 0x3c, 0x10, 0x2c, 0x10, 0x1e, 0x10, 0x15, 0x10, + 0x10, 0x10, 0x31, 0x10, 0x38, 0x10, 0x0d, 0x1e, + 0x10, 0x31, 0x10, 0x2c, 0x10, 0x00, 0x10, 0x3c, + 0x10, 0x2c, 0x10, 0x07, 0x05, 0x10, 0x14, 0x10, + 0x31, 0x10, 0x08, 0x64, 0x61, 0x79, 0x73, 0x04, + 0x42, 0x45, 0x08, 0x65, 0x72, 0x61, 0x73, 0x0b, + 0x14, 0x10, 0x36, 0x10, 0x14, 0x10, 0x00, 0x10, + 0x3a, 0x10, 0x04, 0x61, 0x6d, 0x07, 0x0a, 0x10, + 0x14, 0x10, 0x31, 0x10, 0x04, 0x70, 0x6d, 0x14, + 0x64, 0x61, 0x79, 0x50, 0x65, 0x72, 0x69, 0x6f, + 0x64, 0x73, 0x06, 0x4d, 0x30, 0x31, 0x06, 0x4d, + 0x30, 0x32, 0x06, 0x4d, 0x30, 0x33, 0x06, 0x4d, + 0x30, 0x34, 0x06, 0x4d, 0x30, 0x35, 0x06, 0x4d, + 0x30, 0x36, 0x06, 0x4d, 0x30, 0x37, 0x06, 0x4d, + 0x30, 0x38, 0x06, 0x4d, 0x30, 0x39, 0x06, 0x4d, + 0x31, 0x30, 0x06, 0x4d, 0x31, 0x31, 0x06, 0x4d, + 0x31, 0x32, 0x08, 0x54, 0x6f, 0x75, 0x74, 0x08, + 0x42, 0x61, 0x62, 0x61, 0x0a, 0x48, 0x61, 0x74, + 0x6f, 0x72, 0x0a, 0x4b, 0x69, 0x61, 0x68, 0x6b, + 0x08, 0x54, 0x6f, 0x62, 0x61, 0x0c, 0x41, 0x6d, + 0x73, 0x68, 0x69, 0x72, 0x10, 0x42, 0x61, 0x72, + 0x61, 0x6d, 0x68, 0x61, 0x74, 0x12, 0x42, 0x61, + 0x72, 0x61, 0x6d, 0x6f, 0x75, 0x64, 0x61, 0x0e, + 0x42, 0x61, 0x73, 0x68, 0x61, 0x6e, 0x73, 0x0a, + 0x50, 0x61, 0x6f, 0x6e, 0x61, 0x08, 0x45, 0x70, + 0x65, 0x70, 0x0a, 0x4d, 0x65, 0x73, 0x72, 0x61, + 0x0a, 0x4e, 0x61, 0x73, 0x69, 0x65, 0x08, 0x45, + 0x52, 0x41, 0x30, 0x08, 0x45, 0x52, 0x41, 0x31, + 0x10, 0x4d, 0x65, 0x73, 0x6b, 0x65, 0x72, 0x65, + 0x6d, 0x0c, 0x54, 0x65, 0x6b, 0x65, 0x6d, 0x74, + 0x0a, 0x48, 0x65, 0x64, 0x61, 0x72, 0x0c, 0x54, + 0x61, 0x68, 0x73, 0x61, 0x73, 0x06, 0x54, 0x65, + 0x72, 0x0e, 0x59, 0x65, 0x6b, 0x61, 0x74, 0x69, + 0x74, 0x0e, 0x4d, 0x65, 0x67, 0x61, 0x62, 0x69, + 0x74, 0x0c, 0x4d, 0x69, 0x61, 0x7a, 0x69, 0x61, + 0x0c, 0x47, 0x65, 0x6e, 0x62, 0x6f, 0x74, 0x08, + 0x53, 0x65, 0x6e, 0x65, 0x0a, 0x48, 0x61, 0x6d, + 0x6c, 0x65, 0x0e, 0x4e, 0x65, 0x68, 0x61, 0x73, + 0x73, 0x65, 0x0e, 0x50, 0x61, 0x67, 0x75, 0x6d, + 0x65, 0x6e, 0x09, 0x18, 0x10, 0x2e, 0x10, 0x05, + 0x10, 0x2e, 0x10, 0x09, 0x21, 0x10, 0x31, 0x10, + 0x12, 0x10, 0x2e, 0x10, 0x0f, 0x18, 0x10, 0x2e, + 0x10, 0x05, 0x10, 0x2e, 0x10, 0x21, 0x10, 0x2e, + 0x10, 0x38, 0x10, 0x0b, 0x05, 0x10, 0x2e, 0x10, + 0x21, 0x10, 0x2e, 0x10, 0x38, 0x10, 0x27, 0x01, + 0x10, 0x1b, 0x10, 0x05, 0x10, 0x3a, 0x10, 0x10, + 0x10, 0x31, 0x10, 0x2c, 0x10, 0x3a, 0x10, 0x20, + 0x00, 0x19, 0x10, 0x15, 0x10, 0x31, 0x10, 0x2b, + 0x10, 0x3a, 0x10, 0x19, 0x10, 0x2e, 0x10, 0x00, + 0x10, 0x2c, 0x10, 0x1c, 0x10, 0x33, 0x01, 0x10, + 0x1b, 0x10, 0x05, 0x10, 0x3a, 0x10, 0x10, 0x10, + 0x31, 0x10, 0x2c, 0x10, 0x3a, 0x10, 0x20, 0x00, + 0x15, 0x10, 0x31, 0x10, 0x2b, 0x10, 0x3a, 0x10, + 0x11, 0x10, 0x3d, 0x10, 0x14, 0x10, 0x3a, 0x10, + 0x38, 0x10, 0x15, 0x10, 0x3c, 0x10, 0x2e, 0x10, + 0x38, 0x10, 0x00, 0x10, 0x2c, 0x10, 0x1c, 0x10, + 0x0c, 0x54, 0x69, 0x73, 0x68, 0x72, 0x69, 0x0e, + 0x48, 0x65, 0x73, 0x68, 0x76, 0x61, 0x6e, 0x0c, + 0x4b, 0x69, 0x73, 0x6c, 0x65, 0x76, 0x0a, 0x54, + 0x65, 0x76, 0x65, 0x74, 0x0c, 0x53, 0x68, 0x65, + 0x76, 0x61, 0x74, 0x0c, 0x41, 0x64, 0x61, 0x72, + 0x20, 0x49, 0x08, 0x41, 0x64, 0x61, 0x72, 0x0a, + 0x4e, 0x69, 0x73, 0x61, 0x6e, 0x08, 0x49, 0x79, + 0x61, 0x72, 0x0a, 0x53, 0x69, 0x76, 0x61, 0x6e, + 0x0a, 0x54, 0x61, 0x6d, 0x75, 0x7a, 0x04, 0x41, + 0x76, 0x08, 0x45, 0x6c, 0x75, 0x6c, 0x0e, 0x41, + 0x64, 0x61, 0x72, 0x20, 0x49, 0x49, 0x04, 0x41, + 0x4d, 0x0e, 0x43, 0x68, 0x61, 0x69, 0x74, 0x72, + 0x61, 0x10, 0x56, 0x61, 0x69, 0x73, 0x61, 0x6b, + 0x68, 0x61, 0x10, 0x4a, 0x79, 0x61, 0x69, 0x73, + 0x74, 0x68, 0x61, 0x0c, 0x41, 0x73, 0x61, 0x64, + 0x68, 0x61, 0x0e, 0x53, 0x72, 0x61, 0x76, 0x61, + 0x6e, 0x61, 0x0c, 0x42, 0x68, 0x61, 0x64, 0x72, + 0x61, 0x0c, 0x41, 0x73, 0x76, 0x69, 0x6e, 0x61, + 0x0e, 0x4b, 0x61, 0x72, 0x74, 0x69, 0x6b, 0x61, + 0x14, 0x41, 0x67, 0x72, 0x61, 0x68, 0x61, 0x79, + 0x61, 0x6e, 0x61, 0x0a, 0x50, 0x61, 0x75, 0x73, + 0x61, 0x0a, 0x4d, 0x61, 0x67, 0x68, 0x61, 0x10, + 0x50, 0x68, 0x61, 0x6c, 0x67, 0x75, 0x6e, 0x61, + 0x08, 0x53, 0x61, 0x6b, 0x61, 0x08, 0x4d, 0x75, + 0x68, 0x2e, 0x08, 0x53, 0x61, 0x66, 0x2e, 0x0c, + 0x52, 0x61, 0x62, 0x2e, 0x20, 0x49, 0x0e, 0x52, + 0x61, 0x62, 0x2e, 0x20, 0x49, 0x49, 0x0c, 0x4a, + 0x75, 0x6d, 0x2e, 0x20, 0x49, 0x0e, 0x4a, 0x75, + 0x6d, 0x2e, 0x20, 0x49, 0x49, 0x08, 0x52, 0x61, + 0x6a, 0x2e, 0x08, 0x53, 0x68, 0x61, 0x2e, 0x08, + 0x52, 0x61, 0x6d, 0x2e, 0x0a, 0x53, 0x68, 0x61, + 0x77, 0x2e, 0x11, 0x44, 0x00, 0x68, 0x00, 0x75, + 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x51, + 0x00, 0x2e, 0x00, 0x11, 0x44, 0x00, 0x68, 0x00, + 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, + 0x48, 0x00, 0x2e, 0x00, 0x10, 0x4d, 0x75, 0x68, + 0x61, 0x72, 0x72, 0x61, 0x6d, 0x0a, 0x53, 0x61, + 0x66, 0x61, 0x72, 0x0f, 0x52, 0x00, 0x61, 0x00, + 0x62, 0x00, 0x69, 0x00, 0xbb, 0x02, 0x20, 0x00, + 0x49, 0x00, 0x11, 0x52, 0x00, 0x61, 0x00, 0x62, + 0x00, 0x69, 0x00, 0xbb, 0x02, 0x20, 0x00, 0x49, + 0x00, 0x49, 0x00, 0x10, 0x4a, 0x75, 0x6d, 0x61, + 0x64, 0x61, 0x20, 0x49, 0x12, 0x4a, 0x75, 0x6d, + 0x61, 0x64, 0x61, 0x20, 0x49, 0x49, 0x0a, 0x52, + 0x61, 0x6a, 0x61, 0x62, 0x0f, 0x53, 0x00, 0x68, + 0x00, 0x61, 0x00, 0xbb, 0x02, 0x62, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x0e, 0x52, 0x61, 0x6d, 0x61, + 0x64, 0x61, 0x6e, 0x0e, 0x53, 0x68, 0x61, 0x77, + 0x77, 0x61, 0x6c, 0x19, 0x44, 0x00, 0x68, 0x00, + 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, + 0x51, 0x00, 0x69, 0x00, 0xbb, 0x02, 0x64, 0x00, + 0x61, 0x00, 0x68, 0x00, 0x19, 0x44, 0x00, 0x68, + 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, + 0x00, 0x48, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x6a, + 0x00, 0x61, 0x00, 0x68, 0x00, 0x04, 0x41, 0x48, + 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, 0x36, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x36, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x48, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x36, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x36, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, + 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x1d, 0x57, 0x00, 0x61, 0x00, 0x64, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, + 0x52, 0x00, 0x65, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, 0x59, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x2d, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6d, 0x00, + 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x2b, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x2d, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, 0x2d, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x2a, 0x4a, 0x69, + 0x6e, 0x67, 0x6f, 0x2d, 0x6b, 0x65, 0x69, 0x75, + 0x6e, 0x20, 0x28, 0x37, 0x36, 0x37, 0x2d, 0x37, + 0x37, 0x30, 0x29, 0x1d, 0x48, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x38, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x1f, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x2d, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x1f, 0x44, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1d, 0x4a, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x4b, + 0x00, 0x61, 0x00, 0x6a, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1f, 0x53, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x20, 0x54, 0x65, 0x6e, 0x2d, 0x61, 0x6e, + 0x20, 0x28, 0x38, 0x35, 0x37, 0x2d, 0x38, 0x35, + 0x39, 0x29, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x21, 0x47, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x61, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x1f, 0x45, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, + 0x4a, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1b, + 0x4c, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, + 0x41, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x1f, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, 0x45, + 0x00, 0x69, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, + 0x73, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x69, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x27, 0x4a, 0x00, 0x69, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x29, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4c, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x61, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x25, 0x4a, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x24, 0x54, 0x65, + 0x6e, 0x2d, 0x65, 0x69, 0x20, 0x28, 0x31, 0x31, + 0x31, 0x30, 0x2d, 0x31, 0x31, 0x31, 0x33, 0x29, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x21, 0x48, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x44, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x48, 0x00, 0x65, 0x00, 0x69, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x27, 0x45, 0x00, 0x69, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1f, 0x4c, 0x01, 0x68, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x61, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x41, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x4a, 0x00, 0x69, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x59, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, + 0x00, 0x75, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x29, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, + 0x6e, 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x4d, 0x01, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x27, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x75, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x29, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, 0x29, + 0x52, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x45, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x4c, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x61, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6d, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x74, 0x00, 0x73, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x48, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, + 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x27, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x21, 0x4c, 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x21, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, + 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x27, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, + 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x72, 0x00, 0x65, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x62, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x27, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4d, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x02, 0x54, 0x02, 0x53, 0x0a, + 0x4d, 0x65, 0x69, 0x6a, 0x69, 0x0d, 0x54, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x0b, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x0c, 0x48, 0x65, + 0x69, 0x73, 0x65, 0x69, 0x12, 0x46, 0x61, 0x72, + 0x76, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x16, 0x4f, + 0x72, 0x64, 0x69, 0x62, 0x65, 0x68, 0x65, 0x73, + 0x68, 0x74, 0x0e, 0x4b, 0x68, 0x6f, 0x72, 0x64, + 0x61, 0x64, 0x06, 0x54, 0x69, 0x72, 0x0c, 0x4d, + 0x6f, 0x72, 0x64, 0x61, 0x64, 0x12, 0x53, 0x68, + 0x61, 0x68, 0x72, 0x69, 0x76, 0x61, 0x72, 0x08, + 0x4d, 0x65, 0x68, 0x72, 0x08, 0x41, 0x62, 0x61, + 0x6e, 0x08, 0x41, 0x7a, 0x61, 0x72, 0x06, 0x44, + 0x65, 0x79, 0x0c, 0x42, 0x61, 0x68, 0x6d, 0x61, + 0x6e, 0x0c, 0x45, 0x73, 0x66, 0x61, 0x6e, 0x64, + 0x04, 0x41, 0x50, 0x1a, 0x42, 0x65, 0x66, 0x6f, + 0x72, 0x65, 0x20, 0x52, 0x2e, 0x4f, 0x2e, 0x43, + 0x2e, 0x0c, 0x52, 0x2e, 0x4f, 0x2e, 0x43, 0x2e, + 0x12, 0x63, 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, + 0x72, 0x73, 0x08, 0x64, 0x61, 0x74, 0x65, 0x08, + 0x6d, 0x79, 0x6d, 0x72, 0x08, 0x6c, 0x61, 0x74, + 0x6e, 0x04, 0x6e, 0x75, 0x10, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, + 0x74, 0x74, 0x65, 0x72, 0x6e, 0x26, 0x7b, 0x6d, + 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0x1e, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, + 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, + 0x6e, 0x0e, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, + 0x6c, 0x26, 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x63, 0x79, 0x7d, 0xa0, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x3c, 0x7b, 0x6d, + 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x7d, 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x79, 0x7d, 0xa0, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0x10, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x63, 0x79, 0x2a, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x7b, 0x70, + 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, + 0x67, 0x6e, 0x7d, 0x40, 0x7b, 0x6d, 0x69, 0x6e, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x7b, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x0e, 0x70, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x10, 0x70, 0x61, 0x74, + 0x74, 0x65, 0x72, 0x6e, 0x73, 0x02, 0x2e, 0x02, + 0x2c, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x1b, + 0x02, 0x10, 0x0f, 0x10, 0x14, 0x10, 0x3a, 0x10, + 0x38, 0x10, 0x19, 0x10, 0x1f, 0x10, 0x2f, 0x10, + 0x10, 0x10, 0x3a, 0x10, 0x1e, 0x10, 0x31, 0x10, + 0x2c, 0x10, 0x06, 0x6e, 0x61, 0x6e, 0x02, 0x2b, + 0x10, 0x70, 0x6c, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x02, 0x2d, 0x12, 0x6d, 0x69, 0x6e, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, 0x25, 0x16, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, + 0x69, 0x67, 0x6e, 0x03, 0x1e, 0x22, 0x10, 0x69, + 0x6e, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x0e, + 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x04, + 0x41, 0x24, 0x06, 0x41, 0x55, 0x44, 0x04, 0x52, + 0x24, 0x06, 0x42, 0x52, 0x4c, 0x06, 0x43, 0x41, + 0x24, 0x06, 0x43, 0x41, 0x44, 0x06, 0x43, 0x4e, + 0xa5, 0x06, 0x43, 0x4e, 0x59, 0x0d, 0x05, 0x10, + 0x2e, 0x10, 0x21, 0x10, 0x2c, 0x10, 0x05, 0x10, + 0x2e, 0x10, 0x06, 0x43, 0x52, 0x43, 0x03, 0xac, + 0x20, 0x06, 0x45, 0x55, 0x52, 0x02, 0xa3, 0x06, + 0x47, 0x42, 0x50, 0x06, 0x48, 0x4b, 0x24, 0x06, + 0x48, 0x4b, 0x44, 0x03, 0xaa, 0x20, 0x06, 0x49, + 0x4c, 0x53, 0x03, 0xb9, 0x20, 0x06, 0x49, 0x4e, + 0x52, 0x06, 0x4a, 0x50, 0xa5, 0x06, 0x4a, 0x50, + 0x59, 0x03, 0xa9, 0x20, 0x06, 0x4b, 0x52, 0x57, + 0x02, 0x4b, 0x06, 0x4d, 0x4d, 0x4b, 0x06, 0x4d, + 0x58, 0x24, 0x06, 0x4d, 0x58, 0x4e, 0x06, 0x4e, + 0x5a, 0x24, 0x06, 0x4e, 0x5a, 0x44, 0x03, 0x3f, + 0x0e, 0x06, 0x54, 0x48, 0x42, 0x06, 0x4e, 0x54, + 0x24, 0x06, 0x54, 0x57, 0x44, 0x06, 0x55, 0x53, + 0x24, 0x06, 0x55, 0x53, 0x44, 0x03, 0xab, 0x20, + 0x06, 0x56, 0x4e, 0x44, 0x08, 0x46, 0x43, 0x46, + 0x41, 0x06, 0x58, 0x41, 0x46, 0x06, 0x45, 0x43, + 0x24, 0x06, 0x58, 0x43, 0x44, 0x06, 0x43, 0x46, + 0x41, 0x06, 0x58, 0x4f, 0x46, 0x08, 0x43, 0x46, + 0x50, 0x46, 0x06, 0x58, 0x50, 0x46, 0x14, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, + 0x73, 0x58, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, + 0x6e, 0x74, 0x6c, 0x2f, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, + 0x6a, 0x73, 0x6f, 0x6e, 0x70, 0x2f, 0x6d, 0x79, + 0x2d, 0x4d, 0x4d, 0x2e, 0x6a, 0x73, 0x0d, 0x00, + 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, 0x27, + 0x00, 0x89, 0x01, 0xcd, 0x6b, 0x01, 0xa0, 0x01, + 0x00, 0x00, 0x00, 0x39, 0xd0, 0x00, 0x00, 0x00, + 0x43, 0xd1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd2, + 0x00, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xd4, 0x00, 0x00, 0x00, 0x04, 0xd5, + 0x00, 0x00, 0x00, 0x04, 0xd6, 0x00, 0x00, 0x00, + 0x04, 0xd7, 0x00, 0x00, 0x00, 0x04, 0xd8, 0x00, + 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x04, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xdb, 0x00, 0x00, + 0x00, 0x04, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xdd, + 0x00, 0x00, 0x00, 0x04, 0xde, 0x00, 0x00, 0x00, + 0x04, 0xdf, 0x00, 0x00, 0x00, 0x04, 0xe0, 0x00, + 0x00, 0x00, 0x04, 0xe1, 0x00, 0x00, 0x00, 0x04, + 0xe2, 0x00, 0x00, 0x00, 0x26, 0x0f, 0x00, 0x4d, + 0xe3, 0x00, 0x00, 0x00, 0x0a, 0x4d, 0xe4, 0x00, + 0x00, 0x00, 0x09, 0x4d, 0xe5, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x04, 0xe9, 0x00, + 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, + 0xec, 0x00, 0x00, 0x00, 0x04, 0xed, 0x00, 0x00, + 0x00, 0x4d, 0xee, 0x00, 0x00, 0x00, 0x04, 0xef, + 0x00, 0x00, 0x00, 0x4d, 0xf0, 0x00, 0x00, 0x00, + 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, 0xf2, 0x00, + 0x00, 0x00, 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, + 0xf4, 0x00, 0x00, 0x00, 0x04, 0xf5, 0x00, 0x00, + 0x00, 0x4d, 0xf6, 0x00, 0x00, 0x00, 0x04, 0xf7, + 0x00, 0x00, 0x00, 0x4d, 0xf8, 0x00, 0x00, 0x00, + 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0xfa, 0x00, + 0x00, 0x00, 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, + 0xfc, 0x00, 0x00, 0x00, 0x04, 0xfd, 0x00, 0x00, + 0x00, 0x4d, 0xfe, 0x00, 0x00, 0x00, 0x04, 0xff, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x01, 0x00, 0x00, + 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0x02, 0x01, + 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, + 0x04, 0x01, 0x00, 0x00, 0x04, 0x05, 0x01, 0x00, + 0x00, 0x4d, 0x06, 0x01, 0x00, 0x00, 0x04, 0x07, + 0x01, 0x00, 0x00, 0x4d, 0x08, 0x01, 0x00, 0x00, + 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0x0a, 0x01, + 0x00, 0x00, 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, + 0x0c, 0x01, 0x00, 0x00, 0x04, 0x0d, 0x01, 0x00, + 0x00, 0x4d, 0x0e, 0x01, 0x00, 0x00, 0x04, 0x0f, + 0x01, 0x00, 0x00, 0x4d, 0x10, 0x01, 0x00, 0x00, + 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, 0x12, 0x01, + 0x00, 0x00, 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, + 0x14, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x4d, 0x16, 0x01, 0x00, 0x00, 0x04, 0x17, + 0x01, 0x00, 0x00, 0x4d, 0x18, 0x01, 0x00, 0x00, + 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, 0x1a, 0x01, + 0x00, 0x00, 0x04, 0x1b, 0x01, 0x00, 0x00, 0x4d, + 0x1c, 0x01, 0x00, 0x00, 0x04, 0x1d, 0x01, 0x00, + 0x00, 0x4d, 0x1e, 0x01, 0x00, 0x00, 0x04, 0x1f, + 0x01, 0x00, 0x00, 0x4d, 0x20, 0x01, 0x00, 0x00, + 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, 0x22, 0x01, + 0x00, 0x00, 0x04, 0x23, 0x01, 0x00, 0x00, 0x4d, + 0x24, 0x01, 0x00, 0x00, 0x04, 0x25, 0x01, 0x00, + 0x00, 0x4d, 0x26, 0x01, 0x00, 0x00, 0x04, 0x27, + 0x01, 0x00, 0x00, 0x4d, 0x27, 0x01, 0x00, 0x00, + 0x04, 0x28, 0x01, 0x00, 0x00, 0x4d, 0x29, 0x01, + 0x00, 0x00, 0x04, 0x2a, 0x01, 0x00, 0x00, 0x4d, + 0x2b, 0x01, 0x00, 0x00, 0x04, 0x2c, 0x01, 0x00, + 0x00, 0x4d, 0x2d, 0x01, 0x00, 0x00, 0x04, 0x2e, + 0x01, 0x00, 0x00, 0x4d, 0x2f, 0x01, 0x00, 0x00, + 0x04, 0x30, 0x01, 0x00, 0x00, 0x4d, 0x31, 0x01, + 0x00, 0x00, 0x04, 0x32, 0x01, 0x00, 0x00, 0x4d, + 0x33, 0x01, 0x00, 0x00, 0x04, 0x34, 0x01, 0x00, + 0x00, 0x4d, 0x35, 0x01, 0x00, 0x00, 0x04, 0x36, + 0x01, 0x00, 0x00, 0x4d, 0x37, 0x01, 0x00, 0x00, + 0x04, 0x38, 0x01, 0x00, 0x00, 0x4d, 0x39, 0x01, + 0x00, 0x00, 0x4d, 0x3a, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x3b, 0x01, 0x00, 0x00, 0x4d, 0x3c, 0x01, + 0x00, 0x00, 0x04, 0x3d, 0x01, 0x00, 0x00, 0x4d, + 0x3e, 0x01, 0x00, 0x00, 0x04, 0x30, 0x01, 0x00, + 0x00, 0x4d, 0x31, 0x01, 0x00, 0x00, 0x04, 0x3f, + 0x01, 0x00, 0x00, 0x4d, 0x2b, 0x01, 0x00, 0x00, + 0x4d, 0x40, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x41, + 0x01, 0x00, 0x00, 0x4d, 0x42, 0x01, 0x00, 0x00, + 0x04, 0x43, 0x01, 0x00, 0x00, 0x4d, 0x44, 0x01, + 0x00, 0x00, 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, + 0x0a, 0x01, 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, + 0x00, 0x4d, 0x06, 0x01, 0x00, 0x00, 0x4d, 0x45, + 0x01, 0x00, 0x00, 0x4d, 0x46, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x0b, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x64, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x70, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x73, 0x01, 0x00, 0x00, 0x4d, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x4d, 0x76, 0x01, 0x00, 0x00, 0x4d, 0x77, 0x01, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x00, 0xbe, 0x01, 0xbe, 0x02, 0xbe, + 0x03, 0xbe, 0x04, 0xbe, 0x05, 0xbe, 0x06, 0xbe, + 0x07, 0xbe, 0x08, 0xbe, 0x09, 0xbe, 0x0a, 0xbe, + 0x0b, 0x26, 0x0c, 0x00, 0x4d, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, + 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x70, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, + 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x4d, + 0xd6, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x0c, + 0xbe, 0x0d, 0xbe, 0x0e, 0xbe, 0x0f, 0xbe, 0x10, + 0xbe, 0x11, 0xbe, 0x12, 0xbe, 0x13, 0xbe, 0x14, + 0xbe, 0x15, 0xbe, 0x16, 0xbe, 0x17, 0xbe, 0x18, + 0x26, 0x0d, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, + 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, + 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, + 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, + 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, + 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, + 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, + 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, + 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, + 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, + 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, + 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, + 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x70, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, + 0x04, 0x92, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x72, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x4d, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x4d, + 0x77, 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x19, 0xbe, 0x1a, 0xbe, + 0x1b, 0xbe, 0x1c, 0xbe, 0x1d, 0xbe, 0x1e, 0xbe, + 0x1f, 0xbe, 0x20, 0xbe, 0x21, 0xbe, 0x22, 0xbe, + 0x23, 0xbe, 0x24, 0x26, 0x0c, 0x00, 0x4d, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, + 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, + 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, + 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x70, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x4d, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x4d, + 0x76, 0x01, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x25, 0xbe, 0x26, 0xbe, 0x27, 0xbe, 0x28, + 0xbe, 0x29, 0xbe, 0x2a, 0xbe, 0x2b, 0xbe, 0x2c, + 0xbe, 0x2d, 0xbe, 0x2e, 0xbe, 0x2f, 0xbe, 0x30, + 0xbe, 0x31, 0x26, 0x0d, 0x00, 0x4d, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, + 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, + 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, + 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, + 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, + 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, + 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, + 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, + 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, + 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, + 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, + 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, + 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, + 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, + 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, + 0x9f, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x70, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, + 0x04, 0x92, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x91, 0x01, + 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x72, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, + 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x32, 0xbe, + 0x33, 0xbe, 0x34, 0xbe, 0x35, 0xbe, 0x36, 0xbe, + 0x37, 0xbe, 0x38, 0xbe, 0x39, 0xbe, 0x3a, 0xbe, + 0x3b, 0xbe, 0x3c, 0xbe, 0x3d, 0xbe, 0x3e, 0x26, + 0x0d, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, + 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, + 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, + 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, + 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, + 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, + 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, + 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, + 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, + 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, + 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, + 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, + 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, + 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, + 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x70, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x91, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x91, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x72, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x4d, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x4d, + 0x77, 0x01, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x3f, 0xbe, 0x40, 0xbe, + 0x41, 0xbe, 0x42, 0xbe, 0x43, 0xbe, 0x44, 0xbe, + 0x45, 0xbe, 0x46, 0xbe, 0x47, 0xbe, 0x48, 0xbe, + 0x49, 0xbe, 0x4a, 0x26, 0x0c, 0x00, 0x4d, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, + 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, + 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, + 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x70, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, + 0x92, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, + 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x72, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, + 0x4d, 0x77, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, + 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x64, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x70, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xa0, 0x01, + 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, + 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, + 0x00, 0x26, 0x04, 0x00, 0x4d, 0x50, 0x01, 0x00, + 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, + 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, + 0x04, 0xa3, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa4, 0x01, + 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, + 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, + 0x00, 0x26, 0x04, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x4d, 0x76, + 0x01, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x4b, 0xbe, 0x4c, 0xbe, 0x4d, 0xbe, 0x4e, 0xbe, + 0x4f, 0xbe, 0x50, 0xbe, 0x51, 0xbe, 0x52, 0xbe, + 0x53, 0xbe, 0x54, 0xbe, 0x55, 0xbe, 0x56, 0xbe, + 0x57, 0xbe, 0x58, 0x26, 0x0e, 0x00, 0x4d, 0x50, + 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, + 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, + 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, + 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, + 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, + 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, + 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, + 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, 0x04, + 0xb2, 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, + 0x00, 0x26, 0x0e, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, + 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, + 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, + 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, + 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, + 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, + 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, + 0x04, 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, + 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, 0x26, + 0x0e, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x64, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x70, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xb4, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x50, 0x01, 0x00, + 0x00, 0x04, 0xb4, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xb4, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x73, 0x01, 0x00, 0x00, 0x4d, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x4d, 0x76, 0x01, 0x00, 0x00, 0x4d, 0x77, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x59, 0xbe, 0x5a, 0xbe, 0x5b, 0xbe, + 0x5c, 0xbe, 0x5d, 0xbe, 0x5e, 0xbe, 0x5f, 0xbe, + 0x60, 0xbe, 0x61, 0xbe, 0x62, 0xbe, 0x63, 0xbe, + 0x64, 0x26, 0x0c, 0x00, 0x4d, 0x50, 0x01, 0x00, + 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, 0x04, 0xb6, + 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, + 0x04, 0xb8, 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, + 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, 0x04, + 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, + 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, 0x04, 0xbe, + 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, + 0x04, 0xc0, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xb5, 0x01, + 0x00, 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, 0x04, + 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, + 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, + 0x01, 0x00, 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, + 0x04, 0xbc, 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, + 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, + 0xbf, 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x70, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xc1, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x50, + 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xc1, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x72, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x4d, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x4d, + 0x77, 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x65, 0xbe, 0x66, 0xbe, + 0x67, 0xbe, 0x68, 0xbe, 0x69, 0xbe, 0x6a, 0xbe, + 0x6b, 0xbe, 0x6c, 0xbe, 0x6d, 0xbe, 0x6e, 0xbe, + 0x6f, 0xbe, 0x70, 0x26, 0x0c, 0x00, 0x4d, 0x50, + 0x01, 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, 0x00, + 0x04, 0xc3, 0x01, 0x00, 0x00, 0x04, 0xc4, 0x01, + 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, 0x04, + 0xc6, 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, + 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, 0xc9, + 0x01, 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, + 0x04, 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, 0x01, + 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xce, 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, + 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, 0xd1, + 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, + 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, + 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, + 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, + 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x70, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xda, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x72, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, + 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x71, 0xbe, + 0x72, 0xbe, 0x73, 0xbe, 0x74, 0xbe, 0x75, 0xbe, + 0x76, 0xbe, 0x77, 0xbe, 0x78, 0xbe, 0x79, 0xbe, + 0x7a, 0xbe, 0x7b, 0xbe, 0x7c, 0x26, 0x0c, 0x00, + 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, 0xc2, 0x01, + 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, 0x04, + 0xc4, 0x01, 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, + 0x00, 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, 0xc7, + 0x01, 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, + 0x04, 0xc9, 0x01, 0x00, 0x00, 0x04, 0xca, 0x01, + 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, 0x04, + 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, 0x04, 0xcf, + 0x01, 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, + 0x04, 0xd1, 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, + 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, + 0xd4, 0x01, 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, + 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, + 0x01, 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, + 0x04, 0xd9, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x70, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xda, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, + 0xda, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x4d, 0x76, + 0x01, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x70, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, + 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, + 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, + 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, + 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, + 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, + 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, + 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, + 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, + 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, + 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, + 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, + 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, + 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, + 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, + 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, + 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, + 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, + 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, + 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, + 0x26, 0x20, 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, + 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0xfc, 0x01, + 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, + 0xfd, 0x01, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, + 0x80, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x4d, 0x23, + 0x00, 0x00, 0x80, 0x04, 0xff, 0x01, 0x00, 0x00, + 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x00, 0x02, + 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, + 0x01, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, + 0x80, 0x04, 0x02, 0x02, 0x00, 0x00, 0x4d, 0x27, + 0x00, 0x00, 0x80, 0x04, 0x03, 0x02, 0x00, 0x00, + 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x04, 0x02, + 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, + 0x05, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, + 0x80, 0x04, 0x06, 0x02, 0x00, 0x00, 0x4d, 0x2b, + 0x00, 0x00, 0x80, 0x04, 0x07, 0x02, 0x00, 0x00, + 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x08, 0x02, + 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, + 0x09, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, + 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x4d, 0x2f, + 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, 0x00, 0x00, + 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, + 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, + 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, + 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x33, + 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, + 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, + 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, + 0x11, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, + 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, 0x37, + 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, + 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, + 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, + 0x15, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, + 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, 0x3b, + 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, + 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, + 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, + 0x19, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, + 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x3f, + 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, + 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, + 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, + 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, + 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x43, + 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, + 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, + 0x21, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, + 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x47, + 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, + 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, + 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, + 0x25, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, + 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x4b, + 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, + 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, + 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, + 0x29, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, + 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x4f, + 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, + 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, + 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, + 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, + 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x53, + 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, + 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, + 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, + 0x31, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, + 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x57, + 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, + 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, + 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, + 0x35, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, + 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, 0x5b, + 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, + 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, + 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, + 0x39, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, + 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x5f, + 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, + 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, + 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, + 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, + 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x63, + 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, + 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, + 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, + 0x41, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, + 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, 0x67, + 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, + 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, + 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, + 0x45, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, + 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x6b, + 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, + 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, + 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, + 0x49, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, + 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x6f, + 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, + 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, + 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, + 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, + 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x73, + 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, + 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, + 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, + 0x51, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, + 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x77, + 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, + 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, + 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, + 0x55, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, + 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, 0x7b, + 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, + 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, + 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, + 0x59, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, + 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x7f, + 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, + 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, + 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, + 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, + 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x83, + 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, + 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, + 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, + 0x61, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, + 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x87, + 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, + 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, + 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, + 0x65, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, + 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x8b, + 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, + 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, + 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, + 0x69, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, + 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x8f, + 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, + 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, + 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, + 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, + 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x93, + 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, + 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, + 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, + 0x71, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, + 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0x97, + 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, + 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, + 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, + 0x75, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, + 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0x9b, + 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, + 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, + 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, + 0x79, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, + 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x9f, + 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, + 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, + 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, + 0x7d, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, + 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, 0xa3, + 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, + 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, + 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, + 0x81, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, + 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0xa7, + 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, + 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, + 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, + 0x85, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, + 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0xab, + 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, + 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, + 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, + 0x89, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, + 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0xaf, + 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, + 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, + 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, + 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, + 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xb3, + 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, + 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, + 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, + 0x91, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, + 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0xb7, + 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, + 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, + 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, + 0x95, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, + 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0xbb, + 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, + 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, + 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, + 0x99, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, + 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xbf, + 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, + 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, + 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, + 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, + 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xc3, + 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, + 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, + 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, + 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, + 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xc7, + 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, + 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, + 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, + 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, + 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xcb, + 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, + 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, + 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, + 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, + 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xcf, + 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, + 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, + 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, + 0xad, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, + 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, + 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, + 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, + 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, + 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, + 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, + 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, + 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x80, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, + 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x80, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x80, 0x4d, 0x50, 0x01, 0x00, 0x00, + 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, + 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, + 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, + 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, + 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, + 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, + 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, + 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, + 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, + 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, + 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, + 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, + 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, + 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, + 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, + 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, + 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, + 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, + 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, + 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, + 0x26, 0x20, 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, + 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0xfc, 0x01, + 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, + 0xfd, 0x01, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, + 0x80, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x4d, 0x23, + 0x00, 0x00, 0x80, 0x04, 0xff, 0x01, 0x00, 0x00, + 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x00, 0x02, + 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, + 0x01, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, + 0x80, 0x04, 0x02, 0x02, 0x00, 0x00, 0x4d, 0x27, + 0x00, 0x00, 0x80, 0x04, 0x03, 0x02, 0x00, 0x00, + 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x04, 0x02, + 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, + 0x05, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, + 0x80, 0x04, 0x06, 0x02, 0x00, 0x00, 0x4d, 0x2b, + 0x00, 0x00, 0x80, 0x04, 0x07, 0x02, 0x00, 0x00, + 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x08, 0x02, + 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, + 0x09, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, + 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x4d, 0x2f, + 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, 0x00, 0x00, + 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, + 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, + 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, + 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x33, + 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, + 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, + 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, + 0x11, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, + 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, 0x37, + 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, + 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, + 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, + 0x15, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, + 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, 0x3b, + 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, + 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, + 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, + 0x19, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, + 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x3f, + 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, + 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, + 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, + 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, + 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x43, + 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, + 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, + 0x21, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, + 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x47, + 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, + 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, + 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, + 0x25, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, + 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x4b, + 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, + 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, + 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, + 0x29, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, + 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x4f, + 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, + 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, + 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, + 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, + 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x53, + 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, + 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, + 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, + 0x31, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, + 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x57, + 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, + 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, + 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, + 0x35, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, + 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, 0x5b, + 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, + 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, + 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, + 0x39, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, + 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x5f, + 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, + 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, + 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, + 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, + 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x63, + 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, + 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, + 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, + 0x41, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, + 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, 0x67, + 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, + 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, + 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, + 0x45, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, + 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x6b, + 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, + 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, + 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, + 0x49, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, + 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x6f, + 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, + 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, + 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, + 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, + 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x73, + 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, + 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, + 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, + 0x51, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, + 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x77, + 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, + 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, + 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, + 0x55, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, + 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, 0x7b, + 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, + 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, + 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, + 0x59, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, + 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x7f, + 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, + 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, + 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, + 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, + 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x83, + 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, + 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, + 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, + 0x61, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, + 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x87, + 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, + 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, + 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, + 0x65, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, + 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x8b, + 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, + 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, + 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, + 0x69, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, + 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x8f, + 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, + 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, + 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, + 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, + 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x93, + 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, + 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, + 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, + 0x71, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, + 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0x97, + 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, + 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, + 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, + 0x75, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, + 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0x9b, + 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, + 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, + 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, + 0x79, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, + 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x9f, + 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, + 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, + 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, + 0x7d, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, + 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, 0xa3, + 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, + 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, + 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, + 0x81, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, + 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0xa7, + 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, + 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, + 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, + 0x85, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, + 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0xab, + 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, + 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, + 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, + 0x89, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, + 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0xaf, + 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, + 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, + 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, + 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, + 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xb3, + 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, + 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, + 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, + 0x91, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, + 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0xb7, + 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, + 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, + 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, + 0x95, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, + 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0xbb, + 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, + 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, + 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, + 0x99, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, + 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xbf, + 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, + 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, + 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, + 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, + 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xc3, + 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, + 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, + 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, + 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, + 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xc7, + 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, + 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, + 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, + 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, + 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xcb, + 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, + 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, + 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, + 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, + 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xcf, + 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, + 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, + 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, + 0xad, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, + 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, + 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, + 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, + 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, + 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, + 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, + 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, + 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, + 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x80, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x80, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, + 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, + 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, + 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, + 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, + 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, + 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, + 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, + 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, + 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, + 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, + 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, + 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, + 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, + 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, + 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, + 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, + 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, + 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, + 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, + 0x26, 0x20, 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, + 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0xfc, 0x01, + 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, + 0xfd, 0x01, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, + 0x80, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x4d, 0x23, + 0x00, 0x00, 0x80, 0x04, 0xff, 0x01, 0x00, 0x00, + 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x00, 0x02, + 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, + 0x01, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, + 0x80, 0x04, 0x02, 0x02, 0x00, 0x00, 0x4d, 0x27, + 0x00, 0x00, 0x80, 0x04, 0x03, 0x02, 0x00, 0x00, + 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x04, 0x02, + 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, + 0x05, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, + 0x80, 0x04, 0x06, 0x02, 0x00, 0x00, 0x4d, 0x2b, + 0x00, 0x00, 0x80, 0x04, 0x07, 0x02, 0x00, 0x00, + 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x08, 0x02, + 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, + 0x09, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, + 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x4d, 0x2f, + 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, 0x00, 0x00, + 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, + 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, + 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, + 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x33, + 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, + 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, + 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, + 0x11, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, + 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, 0x37, + 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, + 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, + 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, + 0x15, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, + 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, 0x3b, + 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, + 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, + 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, + 0x19, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, + 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x3f, + 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, + 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, + 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, + 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, + 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x43, + 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, + 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, + 0x21, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, + 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x47, + 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, + 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, + 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, + 0x25, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, + 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x4b, + 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, + 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, + 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, + 0x29, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, + 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x4f, + 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, + 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, + 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, + 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, + 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x53, + 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, + 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, + 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, + 0x31, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, + 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x57, + 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, + 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, + 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, + 0x35, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, + 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, 0x5b, + 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, + 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, + 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, + 0x39, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, + 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x5f, + 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, + 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, + 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, + 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, + 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x63, + 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, + 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, + 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, + 0x41, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, + 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, 0x67, + 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, + 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, + 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, + 0x45, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, + 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x6b, + 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, + 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, + 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, + 0x49, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, + 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x6f, + 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, + 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, + 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, + 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, + 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x73, + 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, + 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, + 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, + 0x51, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, + 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x77, + 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, + 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, + 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, + 0x55, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, + 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, 0x7b, + 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, + 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, + 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, + 0x59, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, + 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x7f, + 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, + 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, + 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, + 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, + 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x83, + 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, + 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, + 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, + 0x61, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, + 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x87, + 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, + 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, + 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, + 0x65, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, + 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x8b, + 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, + 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, + 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, + 0x69, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, + 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x8f, + 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, + 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, + 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, + 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, + 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x93, + 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, + 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, + 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, + 0x71, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, + 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0x97, + 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, + 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, + 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, + 0x75, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, + 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0x9b, + 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, + 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, + 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, + 0x79, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, + 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x9f, + 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, + 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, + 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, + 0x7d, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, + 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, 0xa3, + 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, + 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, + 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, + 0x81, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, + 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0xa7, + 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, + 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, + 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, + 0x85, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, + 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0xab, + 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, + 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, + 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, + 0x89, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, + 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0xaf, + 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, + 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, + 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, + 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, + 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xb3, + 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, + 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, + 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, + 0x91, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, + 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0xb7, + 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, + 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, + 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, + 0x95, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, + 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0xbb, + 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, + 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, + 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, + 0x99, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, + 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xbf, + 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, + 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, + 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, + 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, + 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xc3, + 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, + 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, + 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, + 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, + 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xc7, + 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, + 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, + 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, + 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, + 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xcb, + 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, + 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, + 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, + 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, + 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xcf, + 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, + 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, + 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, + 0xad, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, + 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, + 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, + 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, + 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, + 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, + 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, + 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, + 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, + 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x80, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x80, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x72, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, + 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x7d, + 0xbe, 0x7e, 0xbe, 0x7f, 0xbe, 0x80, 0xbe, 0x81, + 0xbe, 0x82, 0xbe, 0x83, 0xbe, 0x84, 0xbe, 0x85, + 0xbe, 0x86, 0xbe, 0x87, 0xbe, 0x88, 0x26, 0x0c, + 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, 0xc9, + 0x02, 0x00, 0x00, 0x04, 0xca, 0x02, 0x00, 0x00, + 0x04, 0xcb, 0x02, 0x00, 0x00, 0x04, 0xcc, 0x02, + 0x00, 0x00, 0x04, 0xcd, 0x02, 0x00, 0x00, 0x04, + 0xce, 0x02, 0x00, 0x00, 0x04, 0xcf, 0x02, 0x00, + 0x00, 0x04, 0xd0, 0x02, 0x00, 0x00, 0x04, 0xd1, + 0x02, 0x00, 0x00, 0x04, 0xd2, 0x02, 0x00, 0x00, + 0x04, 0xd3, 0x02, 0x00, 0x00, 0x04, 0xd4, 0x02, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x04, + 0xca, 0x02, 0x00, 0x00, 0x04, 0xcb, 0x02, 0x00, + 0x00, 0x04, 0xcc, 0x02, 0x00, 0x00, 0x04, 0xcd, + 0x02, 0x00, 0x00, 0x04, 0xce, 0x02, 0x00, 0x00, + 0x04, 0xcf, 0x02, 0x00, 0x00, 0x04, 0xd0, 0x02, + 0x00, 0x00, 0x04, 0xd1, 0x02, 0x00, 0x00, 0x04, + 0xd2, 0x02, 0x00, 0x00, 0x04, 0xd3, 0x02, 0x00, + 0x00, 0x04, 0xd4, 0x02, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x64, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x70, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xd5, 0x02, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, + 0x04, 0xd5, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd5, 0x02, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x4d, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x4d, + 0x76, 0x01, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x70, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xd6, 0x02, 0x00, 0x00, 0x04, 0xd7, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x50, + 0x01, 0x00, 0x00, 0x04, 0xd6, 0x02, 0x00, 0x00, + 0x04, 0xd7, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd6, 0x02, + 0x00, 0x00, 0x04, 0xd7, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x72, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, + 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x4d, 0xe2, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x02, 0x00, 0x00, + 0x4d, 0xd9, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xda, + 0x02, 0x00, 0x00, 0x04, 0xdb, 0x02, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xdc, 0x02, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0xdd, 0x02, 0x00, 0x00, 0x4d, + 0xde, 0x02, 0x00, 0x00, 0x04, 0xdf, 0x02, 0x00, + 0x00, 0x4d, 0xe0, 0x02, 0x00, 0x00, 0x4d, 0xe1, + 0x02, 0x00, 0x00, 0x0b, 0x04, 0xe2, 0x02, 0x00, + 0x00, 0x4d, 0xde, 0x02, 0x00, 0x00, 0x04, 0xe3, + 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x02, 0x00, 0x00, + 0x4d, 0xe4, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xe5, + 0x02, 0x00, 0x00, 0x4d, 0xde, 0x02, 0x00, 0x00, + 0x04, 0xe6, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x02, + 0x00, 0x00, 0x4d, 0xe7, 0x02, 0x00, 0x00, 0x4d, + 0xe8, 0x02, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xe9, + 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x02, 0x00, 0x00, + 0x04, 0xea, 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x02, + 0x00, 0x00, 0x04, 0xec, 0x02, 0x00, 0x00, 0x4d, + 0xed, 0x02, 0x00, 0x00, 0x04, 0xee, 0x02, 0x00, + 0x00, 0x4d, 0xef, 0x02, 0x00, 0x00, 0x04, 0xf0, + 0x02, 0x00, 0x00, 0x4d, 0xf1, 0x02, 0x00, 0x00, + 0x04, 0xf2, 0x02, 0x00, 0x00, 0x4d, 0xf3, 0x02, + 0x00, 0x00, 0x04, 0xf4, 0x02, 0x00, 0x00, 0x4d, + 0xf5, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x02, 0x00, + 0x00, 0x0b, 0x04, 0xe9, 0x02, 0x00, 0x00, 0x4d, + 0xe1, 0x02, 0x00, 0x00, 0x04, 0xea, 0x02, 0x00, + 0x00, 0x4d, 0xeb, 0x02, 0x00, 0x00, 0x04, 0xec, + 0x02, 0x00, 0x00, 0x4d, 0xed, 0x02, 0x00, 0x00, + 0x04, 0xee, 0x02, 0x00, 0x00, 0x4d, 0xef, 0x02, + 0x00, 0x00, 0x04, 0xf0, 0x02, 0x00, 0x00, 0x4d, + 0xf1, 0x02, 0x00, 0x00, 0x04, 0xf2, 0x02, 0x00, + 0x00, 0x4d, 0xf3, 0x02, 0x00, 0x00, 0x04, 0xf4, + 0x02, 0x00, 0x00, 0x4d, 0xf5, 0x02, 0x00, 0x00, + 0x4d, 0xda, 0x02, 0x00, 0x00, 0x4d, 0xf6, 0x02, + 0x00, 0x00, 0x0b, 0x04, 0xf7, 0x02, 0x00, 0x00, + 0x4d, 0xf8, 0x02, 0x00, 0x00, 0x04, 0xf9, 0x02, + 0x00, 0x00, 0x4d, 0xfa, 0x02, 0x00, 0x00, 0x04, + 0xfb, 0x02, 0x00, 0x00, 0x4d, 0xfc, 0x02, 0x00, + 0x00, 0x04, 0xfd, 0x02, 0x00, 0x00, 0x4d, 0xfe, + 0x02, 0x00, 0x00, 0x04, 0xff, 0x02, 0x00, 0x00, + 0x4d, 0x00, 0x03, 0x00, 0x00, 0x04, 0x01, 0x03, + 0x00, 0x00, 0x4d, 0x02, 0x03, 0x00, 0x00, 0x04, + 0x03, 0x03, 0x00, 0x00, 0x4d, 0x04, 0x03, 0x00, + 0x00, 0x04, 0x05, 0x03, 0x00, 0x00, 0x4d, 0x06, + 0x03, 0x00, 0x00, 0x04, 0x07, 0x03, 0x00, 0x00, + 0x4d, 0x08, 0x03, 0x00, 0x00, 0x04, 0x09, 0x03, + 0x00, 0x00, 0x4d, 0x0a, 0x03, 0x00, 0x00, 0x04, + 0x0b, 0x03, 0x00, 0x00, 0x4d, 0x0c, 0x03, 0x00, + 0x00, 0x04, 0x0d, 0x03, 0x00, 0x00, 0x4d, 0x0e, + 0x03, 0x00, 0x00, 0x04, 0x0f, 0x03, 0x00, 0x00, + 0x4d, 0x10, 0x03, 0x00, 0x00, 0x04, 0x11, 0x03, + 0x00, 0x00, 0x4d, 0x12, 0x03, 0x00, 0x00, 0x04, + 0x13, 0x03, 0x00, 0x00, 0x4d, 0x14, 0x03, 0x00, + 0x00, 0x04, 0x15, 0x03, 0x00, 0x00, 0x4d, 0x16, + 0x03, 0x00, 0x00, 0x04, 0x17, 0x03, 0x00, 0x00, + 0x4d, 0x18, 0x03, 0x00, 0x00, 0x04, 0x19, 0x03, + 0x00, 0x00, 0x4d, 0x1a, 0x03, 0x00, 0x00, 0x04, + 0x1b, 0x03, 0x00, 0x00, 0x4d, 0x1c, 0x03, 0x00, + 0x00, 0x04, 0x1d, 0x03, 0x00, 0x00, 0x4d, 0x1e, + 0x03, 0x00, 0x00, 0x04, 0x1f, 0x03, 0x00, 0x00, + 0x4d, 0x20, 0x03, 0x00, 0x00, 0x04, 0x21, 0x03, + 0x00, 0x00, 0x4d, 0x22, 0x03, 0x00, 0x00, 0x04, + 0x23, 0x03, 0x00, 0x00, 0x4d, 0x24, 0x03, 0x00, + 0x00, 0x4d, 0x25, 0x03, 0x00, 0x00, 0x4d, 0x45, + 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, 0xcc, 0x28, + 0xcc, 0x0c, 0x01, 0x00, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_nb_size = 24546; + +const uint8_t intl_nb[24546] = { + 0x01, 0xc1, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x6e, 0x62, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x10, + 0x7b, 0x31, 0x7d, 0x2c, 0x20, 0x7b, 0x30, 0x7d, + 0x0a, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, + 0x65, 0x64, 0x69, 0x75, 0x6d, 0x0e, 0x7b, 0x31, + 0x7d, 0x20, 0x7b, 0x30, 0x7d, 0x08, 0x66, 0x75, + 0x6c, 0x6c, 0x1a, 0x7b, 0x31, 0x7d, 0x20, 0x27, + 0x6b, 0x6c, 0x27, 0x2e, 0x20, 0x7b, 0x30, 0x7d, + 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x04, 0x64, 0x2e, + 0x02, 0x64, 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, + 0x08, 0x45, 0x20, 0x64, 0x2e, 0x04, 0x45, 0x64, + 0x10, 0x45, 0x20, 0x68, 0x2e, 0x6d, 0x6d, 0x20, + 0x61, 0x06, 0x45, 0x68, 0x6d, 0x0e, 0x45, 0x20, + 0x48, 0x48, 0x2e, 0x6d, 0x6d, 0x06, 0x45, 0x48, + 0x6d, 0x16, 0x45, 0x20, 0x68, 0x2e, 0x6d, 0x6d, + 0x2e, 0x73, 0x73, 0x20, 0x61, 0x08, 0x45, 0x68, + 0x6d, 0x73, 0x14, 0x45, 0x20, 0x48, 0x48, 0x2e, + 0x6d, 0x6d, 0x2e, 0x73, 0x73, 0x08, 0x45, 0x48, + 0x6d, 0x73, 0x06, 0x79, 0x20, 0x47, 0x04, 0x47, + 0x79, 0x0e, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x20, + 0x47, 0x0a, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x14, + 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, + 0x20, 0x47, 0x0c, 0x47, 0x79, 0x4d, 0x4d, 0x4d, + 0x64, 0x18, 0x45, 0x20, 0x64, 0x2e, 0x20, 0x4d, + 0x4d, 0x4d, 0x20, 0x79, 0x20, 0x47, 0x0e, 0x47, + 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x06, 0x68, + 0x20, 0x61, 0x02, 0x68, 0x04, 0x48, 0x48, 0x02, + 0x48, 0x0c, 0x68, 0x2e, 0x6d, 0x6d, 0x20, 0x61, + 0x04, 0x68, 0x6d, 0x0a, 0x48, 0x48, 0x2e, 0x6d, + 0x6d, 0x04, 0x48, 0x6d, 0x12, 0x68, 0x2e, 0x6d, + 0x6d, 0x2e, 0x73, 0x73, 0x20, 0x61, 0x06, 0x68, + 0x6d, 0x73, 0x10, 0x48, 0x48, 0x2e, 0x6d, 0x6d, + 0x2e, 0x73, 0x73, 0x06, 0x48, 0x6d, 0x73, 0x16, + 0x68, 0x2e, 0x6d, 0x6d, 0x2e, 0x73, 0x73, 0x20, + 0x61, 0x20, 0x76, 0x08, 0x68, 0x6d, 0x73, 0x76, + 0x14, 0x48, 0x48, 0x2e, 0x6d, 0x6d, 0x2e, 0x73, + 0x73, 0x20, 0x76, 0x08, 0x48, 0x6d, 0x73, 0x76, + 0x10, 0x68, 0x2e, 0x6d, 0x6d, 0x20, 0x61, 0x20, + 0x76, 0x06, 0x68, 0x6d, 0x76, 0x0e, 0x48, 0x48, + 0x2e, 0x6d, 0x6d, 0x20, 0x76, 0x06, 0x48, 0x6d, + 0x76, 0x04, 0x4c, 0x2e, 0x02, 0x4d, 0x08, 0x64, + 0x2e, 0x4d, 0x2e, 0x04, 0x4d, 0x64, 0x0a, 0x45, + 0x20, 0x64, 0x2e, 0x4d, 0x06, 0x4d, 0x45, 0x64, + 0x08, 0x4d, 0x4d, 0x64, 0x64, 0x06, 0x4c, 0x4c, + 0x4c, 0x06, 0x4d, 0x4d, 0x4d, 0x0c, 0x64, 0x2e, + 0x20, 0x4d, 0x4d, 0x4d, 0x08, 0x4d, 0x4d, 0x4d, + 0x64, 0x10, 0x45, 0x20, 0x64, 0x2e, 0x20, 0x4d, + 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x45, 0x64, + 0x0e, 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, + 0x0a, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x0a, 0x6d, + 0x6d, 0x2e, 0x73, 0x73, 0x04, 0x6d, 0x73, 0x02, + 0x79, 0x06, 0x4d, 0x2e, 0x79, 0x04, 0x79, 0x4d, + 0x0a, 0x64, 0x2e, 0x4d, 0x2e, 0x79, 0x06, 0x79, + 0x4d, 0x64, 0x10, 0x45, 0x20, 0x64, 0x2e, 0x4d, + 0x4d, 0x2e, 0x79, 0x08, 0x79, 0x4d, 0x45, 0x64, + 0x08, 0x4d, 0x4d, 0x2e, 0x79, 0x06, 0x79, 0x4d, + 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x08, + 0x79, 0x4d, 0x4d, 0x4d, 0x10, 0x64, 0x2e, 0x20, + 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0a, 0x79, 0x4d, + 0x4d, 0x4d, 0x64, 0x14, 0x45, 0x20, 0x64, 0x2e, + 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0c, 0x79, + 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0c, 0x4d, 0x4d, + 0x4d, 0x4d, 0x20, 0x79, 0x0a, 0x79, 0x4d, 0x4d, + 0x4d, 0x4d, 0x0a, 0x51, 0x51, 0x51, 0x20, 0x79, + 0x08, 0x79, 0x51, 0x51, 0x51, 0x0c, 0x51, 0x51, + 0x51, 0x51, 0x20, 0x79, 0x0a, 0x79, 0x51, 0x51, + 0x51, 0x51, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, + 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x73, 0x1c, 0x45, 0x45, 0x45, 0x45, + 0x20, 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, + 0x20, 0x79, 0x14, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, + 0x45, 0x45, 0x45, 0x45, 0x64, 0x12, 0x64, 0x2e, + 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0c, + 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x0e, 0x64, + 0x64, 0x2e, 0x4d, 0x4d, 0x2e, 0x79, 0x16, 0x64, + 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x73, 0x1a, 0x48, 0x48, 0x2e, 0x6d, 0x6d, + 0x2e, 0x73, 0x73, 0x20, 0x7a, 0x7a, 0x7a, 0x7a, + 0x12, 0x68, 0x6d, 0x6d, 0x73, 0x73, 0x7a, 0x7a, + 0x7a, 0x7a, 0x14, 0x48, 0x48, 0x2e, 0x6d, 0x6d, + 0x2e, 0x73, 0x73, 0x20, 0x7a, 0x08, 0x68, 0x6d, + 0x73, 0x7a, 0x16, 0x74, 0x69, 0x6d, 0x65, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x0e, 0x66, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x02, 0x4a, + 0x02, 0x46, 0x02, 0x41, 0x02, 0x53, 0x02, 0x4f, + 0x02, 0x4e, 0x02, 0x44, 0x0c, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x08, 0x6a, 0x61, 0x6e, 0x2e, + 0x08, 0x66, 0x65, 0x62, 0x2e, 0x08, 0x6d, 0x61, + 0x72, 0x2e, 0x08, 0x61, 0x70, 0x72, 0x2e, 0x06, + 0x6d, 0x61, 0x69, 0x08, 0x6a, 0x75, 0x6e, 0x2e, + 0x08, 0x6a, 0x75, 0x6c, 0x2e, 0x08, 0x61, 0x75, + 0x67, 0x2e, 0x08, 0x73, 0x65, 0x70, 0x2e, 0x08, + 0x6f, 0x6b, 0x74, 0x2e, 0x08, 0x6e, 0x6f, 0x76, + 0x2e, 0x08, 0x64, 0x65, 0x73, 0x2e, 0x0c, 0x6a, + 0x61, 0x6e, 0x75, 0x61, 0x72, 0x0e, 0x66, 0x65, + 0x62, 0x72, 0x75, 0x61, 0x72, 0x08, 0x6d, 0x61, + 0x72, 0x73, 0x0a, 0x61, 0x70, 0x72, 0x69, 0x6c, + 0x08, 0x6a, 0x75, 0x6e, 0x69, 0x08, 0x6a, 0x75, + 0x6c, 0x69, 0x0c, 0x61, 0x75, 0x67, 0x75, 0x73, + 0x74, 0x12, 0x73, 0x65, 0x70, 0x74, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x0e, 0x6f, 0x6b, 0x74, 0x6f, + 0x62, 0x65, 0x72, 0x10, 0x6e, 0x6f, 0x76, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x10, 0x64, 0x65, 0x73, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x0c, 0x6d, 0x6f, + 0x6e, 0x74, 0x68, 0x73, 0x02, 0x54, 0x02, 0x4c, + 0x08, 0x73, 0xf8, 0x6e, 0x2e, 0x08, 0x6d, 0x61, + 0x6e, 0x2e, 0x08, 0x74, 0x69, 0x72, 0x2e, 0x08, + 0x6f, 0x6e, 0x73, 0x2e, 0x08, 0x74, 0x6f, 0x72, + 0x2e, 0x08, 0x66, 0x72, 0x65, 0x2e, 0x08, 0x6c, + 0xf8, 0x72, 0x2e, 0x0c, 0x73, 0xf8, 0x6e, 0x64, + 0x61, 0x67, 0x0c, 0x6d, 0x61, 0x6e, 0x64, 0x61, + 0x67, 0x0e, 0x74, 0x69, 0x72, 0x73, 0x64, 0x61, + 0x67, 0x0c, 0x6f, 0x6e, 0x73, 0x64, 0x61, 0x67, + 0x0e, 0x74, 0x6f, 0x72, 0x73, 0x64, 0x61, 0x67, + 0x0c, 0x66, 0x72, 0x65, 0x64, 0x61, 0x67, 0x0c, + 0x6c, 0xf8, 0x72, 0x64, 0x61, 0x67, 0x08, 0x64, + 0x61, 0x79, 0x73, 0x04, 0x42, 0x45, 0x08, 0x65, + 0x72, 0x61, 0x73, 0x08, 0x61, 0x2e, 0x6d, 0x2e, + 0x04, 0x61, 0x6d, 0x08, 0x70, 0x2e, 0x6d, 0x2e, + 0x04, 0x70, 0x6d, 0x14, 0x64, 0x61, 0x79, 0x50, + 0x65, 0x72, 0x69, 0x6f, 0x64, 0x73, 0x06, 0x4d, + 0x30, 0x31, 0x06, 0x4d, 0x30, 0x32, 0x06, 0x4d, + 0x30, 0x33, 0x06, 0x4d, 0x30, 0x34, 0x06, 0x4d, + 0x30, 0x35, 0x06, 0x4d, 0x30, 0x36, 0x06, 0x4d, + 0x30, 0x37, 0x06, 0x4d, 0x30, 0x38, 0x06, 0x4d, + 0x30, 0x39, 0x06, 0x4d, 0x31, 0x30, 0x06, 0x4d, + 0x31, 0x31, 0x06, 0x4d, 0x31, 0x32, 0x08, 0x74, + 0x6f, 0x75, 0x74, 0x08, 0x62, 0x61, 0x62, 0x61, + 0x0a, 0x68, 0x61, 0x74, 0x6f, 0x72, 0x0a, 0x6b, + 0x69, 0x61, 0x68, 0x6b, 0x08, 0x74, 0x6f, 0x62, + 0x61, 0x0c, 0x61, 0x6d, 0x73, 0x68, 0x69, 0x72, + 0x10, 0x62, 0x61, 0x72, 0x61, 0x6d, 0x68, 0x61, + 0x74, 0x12, 0x62, 0x61, 0x72, 0x61, 0x6d, 0x6f, + 0x75, 0x64, 0x61, 0x0e, 0x62, 0x61, 0x73, 0x68, + 0x61, 0x6e, 0x73, 0x0a, 0x70, 0x61, 0x6f, 0x6e, + 0x61, 0x08, 0x65, 0x70, 0x65, 0x70, 0x0a, 0x6d, + 0x65, 0x73, 0x72, 0x61, 0x0a, 0x6e, 0x61, 0x73, + 0x69, 0x65, 0x06, 0x54, 0x41, 0x30, 0x06, 0x54, + 0x41, 0x31, 0x0e, 0x30, 0x2e, 0x20, 0x74, 0x2e, + 0x61, 0x2e, 0x0e, 0x31, 0x2e, 0x20, 0x74, 0x2e, + 0x61, 0x2e, 0x18, 0x30, 0x2e, 0x20, 0x74, 0x69, + 0x64, 0x73, 0x61, 0x6c, 0x64, 0x65, 0x72, 0x18, + 0x31, 0x2e, 0x20, 0x74, 0x69, 0x64, 0x73, 0x61, + 0x6c, 0x64, 0x65, 0x72, 0x10, 0x6d, 0x65, 0x73, + 0x6b, 0x65, 0x72, 0x65, 0x6d, 0x0c, 0x74, 0x65, + 0x6b, 0x65, 0x6d, 0x74, 0x0a, 0x68, 0x65, 0x64, + 0x61, 0x72, 0x0c, 0x74, 0x61, 0x68, 0x73, 0x61, + 0x73, 0x06, 0x74, 0x65, 0x72, 0x0e, 0x79, 0x65, + 0x6b, 0x61, 0x74, 0x69, 0x74, 0x0e, 0x6d, 0x65, + 0x67, 0x61, 0x62, 0x69, 0x74, 0x0c, 0x6d, 0x69, + 0x61, 0x7a, 0x69, 0x61, 0x0c, 0x67, 0x65, 0x6e, + 0x62, 0x6f, 0x74, 0x08, 0x73, 0x65, 0x6e, 0x65, + 0x0a, 0x68, 0x61, 0x6d, 0x6c, 0x65, 0x0e, 0x6e, + 0x65, 0x68, 0x61, 0x73, 0x73, 0x65, 0x0e, 0x70, + 0x61, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x08, 0x45, + 0x52, 0x41, 0x30, 0x08, 0x45, 0x52, 0x41, 0x31, + 0x0a, 0x66, 0x2e, 0x4b, 0x72, 0x2e, 0x0a, 0x65, + 0x2e, 0x4b, 0x72, 0x2e, 0x08, 0x66, 0x76, 0x74, + 0x2e, 0x06, 0x76, 0x74, 0x2e, 0x08, 0x65, 0x76, + 0x74, 0x2e, 0x16, 0x66, 0xf8, 0x72, 0x20, 0x4b, + 0x72, 0x69, 0x73, 0x74, 0x75, 0x73, 0x1a, 0x65, + 0x74, 0x74, 0x65, 0x72, 0x20, 0x4b, 0x72, 0x69, + 0x73, 0x74, 0x75, 0x73, 0x26, 0x66, 0xf8, 0x72, + 0x20, 0x76, 0xe5, 0x72, 0x20, 0x74, 0x69, 0x64, + 0x73, 0x72, 0x65, 0x67, 0x6e, 0x69, 0x6e, 0x67, + 0x2a, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x76, + 0xe5, 0x72, 0x20, 0x74, 0x69, 0x64, 0x73, 0x72, + 0x65, 0x67, 0x6e, 0x69, 0x6e, 0x67, 0x0c, 0x74, + 0x69, 0x73, 0x68, 0x72, 0x69, 0x0e, 0x68, 0x65, + 0x73, 0x68, 0x76, 0x61, 0x6e, 0x0c, 0x6b, 0x69, + 0x73, 0x6c, 0x65, 0x76, 0x0a, 0x74, 0x65, 0x76, + 0x65, 0x74, 0x0c, 0x73, 0x68, 0x65, 0x76, 0x61, + 0x74, 0x0c, 0x61, 0x64, 0x61, 0x72, 0x20, 0x49, + 0x08, 0x61, 0x64, 0x61, 0x72, 0x0a, 0x6e, 0x69, + 0x73, 0x61, 0x6e, 0x08, 0x69, 0x79, 0x61, 0x72, + 0x0a, 0x73, 0x69, 0x76, 0x61, 0x6e, 0x0a, 0x74, + 0x61, 0x6d, 0x75, 0x7a, 0x04, 0x61, 0x76, 0x08, + 0x65, 0x6c, 0x75, 0x6c, 0x0e, 0x61, 0x64, 0x61, + 0x72, 0x20, 0x49, 0x49, 0x04, 0x41, 0x4d, 0x0e, + 0x63, 0x68, 0x61, 0x69, 0x74, 0x72, 0x61, 0x10, + 0x76, 0x61, 0x69, 0x73, 0x61, 0x6b, 0x68, 0x61, + 0x10, 0x6a, 0x79, 0x61, 0x69, 0x73, 0x74, 0x68, + 0x61, 0x0c, 0x61, 0x73, 0x61, 0x64, 0x68, 0x61, + 0x0e, 0x73, 0x72, 0x61, 0x76, 0x61, 0x6e, 0x61, + 0x0c, 0x62, 0x68, 0x61, 0x64, 0x72, 0x61, 0x0c, + 0x61, 0x73, 0x76, 0x69, 0x6e, 0x61, 0x0e, 0x6b, + 0x61, 0x72, 0x74, 0x69, 0x6b, 0x61, 0x14, 0x61, + 0x67, 0x72, 0x61, 0x68, 0x61, 0x79, 0x61, 0x6e, + 0x61, 0x0a, 0x70, 0x61, 0x75, 0x73, 0x61, 0x0a, + 0x6d, 0x61, 0x67, 0x68, 0x61, 0x10, 0x70, 0x68, + 0x61, 0x6c, 0x67, 0x75, 0x6e, 0x61, 0x08, 0x73, + 0x61, 0x6b, 0x61, 0x08, 0x6d, 0x75, 0x68, 0x2e, + 0x08, 0x73, 0x61, 0x66, 0x2e, 0x0c, 0x72, 0x61, + 0x62, 0x2e, 0x20, 0x49, 0x0e, 0x72, 0x61, 0x62, + 0x2e, 0x20, 0x49, 0x49, 0x0c, 0x6a, 0x75, 0x6d, + 0x2e, 0x20, 0x49, 0x0e, 0x6a, 0x75, 0x6d, 0x2e, + 0x20, 0x49, 0x49, 0x08, 0x72, 0x61, 0x6a, 0x2e, + 0x08, 0x73, 0x68, 0x61, 0x2e, 0x08, 0x72, 0x61, + 0x6d, 0x2e, 0x0a, 0x73, 0x68, 0x61, 0x77, 0x2e, + 0x11, 0x64, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, + 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x71, 0x00, 0x2e, + 0x00, 0x11, 0x64, 0x00, 0x68, 0x00, 0x75, 0x00, + 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x68, 0x00, + 0x2e, 0x00, 0x10, 0x6d, 0x75, 0x68, 0x61, 0x72, + 0x72, 0x61, 0x6d, 0x0a, 0x73, 0x61, 0x66, 0x61, + 0x72, 0x0f, 0x72, 0x00, 0x61, 0x00, 0x62, 0x00, + 0x69, 0x00, 0xbb, 0x02, 0x20, 0x00, 0x49, 0x00, + 0x11, 0x72, 0x00, 0x61, 0x00, 0x62, 0x00, 0x69, + 0x00, 0xbb, 0x02, 0x20, 0x00, 0x49, 0x00, 0x49, + 0x00, 0x10, 0x6a, 0x75, 0x6d, 0x61, 0x64, 0x61, + 0x20, 0x49, 0x12, 0x6a, 0x75, 0x6d, 0x61, 0x64, + 0x61, 0x20, 0x49, 0x49, 0x0a, 0x72, 0x61, 0x6a, + 0x61, 0x62, 0x0f, 0x73, 0x00, 0x68, 0x00, 0x61, + 0x00, 0xbb, 0x02, 0x62, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x0e, 0x72, 0x61, 0x6d, 0x61, 0x64, 0x61, + 0x6e, 0x0e, 0x73, 0x68, 0x61, 0x77, 0x77, 0x61, + 0x6c, 0x19, 0x64, 0x00, 0x68, 0x00, 0x75, 0x00, + 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x71, 0x00, + 0x69, 0x00, 0xbb, 0x02, 0x64, 0x00, 0x61, 0x00, + 0x68, 0x00, 0x19, 0x64, 0x00, 0x68, 0x00, 0x75, + 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x68, + 0x00, 0x69, 0x00, 0x6a, 0x00, 0x6a, 0x00, 0x61, + 0x00, 0x68, 0x00, 0x04, 0x41, 0x48, 0x1f, 0x54, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x36, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x36, 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x75, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1f, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x1d, 0x57, 0x00, 0x61, 0x00, 0x64, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x52, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x1d, 0x59, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1f, 0x4a, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, + 0x6b, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x2b, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x2d, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x2d, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x2a, 0x4a, 0x69, 0x6e, 0x67, + 0x6f, 0x2d, 0x6b, 0x65, 0x69, 0x75, 0x6e, 0x20, + 0x28, 0x37, 0x36, 0x37, 0x2d, 0x37, 0x37, 0x30, + 0x29, 0x1d, 0x48, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x1f, 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, 0x64, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x4d, 0x01, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, + 0x4a, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x61, + 0x00, 0x6a, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1f, 0x53, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x20, + 0x54, 0x65, 0x6e, 0x2d, 0x61, 0x6e, 0x20, 0x28, + 0x38, 0x35, 0x37, 0x2d, 0x38, 0x35, 0x39, 0x29, + 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, + 0x47, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1d, 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, + 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x34, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1b, 0x4c, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1d, 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x41, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, 0x4a, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x4a, 0x00, 0x69, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x29, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x27, 0x4a, 0x00, 0x69, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x45, 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4c, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x61, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x25, 0x4a, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x24, 0x54, 0x65, 0x6e, 0x2d, + 0x65, 0x69, 0x20, 0x28, 0x31, 0x31, 0x31, 0x30, + 0x2d, 0x31, 0x31, 0x31, 0x33, 0x29, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x44, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x45, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x6a, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x48, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x27, 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, + 0x4c, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x6d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x4a, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x59, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x75, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x29, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x21, 0x4a, 0x00, 0x4d, 0x01, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x27, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x75, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x29, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x74, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x29, 0x52, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x45, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4c, + 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x61, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x48, + 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x27, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x4c, + 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x45, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x27, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4a, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x27, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x61, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x41, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x4d, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x0a, 0x4d, 0x65, 0x69, 0x6a, 0x69, 0x0d, + 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x0b, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x0c, + 0x48, 0x65, 0x69, 0x73, 0x65, 0x69, 0x12, 0x66, + 0x61, 0x72, 0x76, 0x61, 0x72, 0x64, 0x69, 0x6e, + 0x16, 0x6f, 0x72, 0x64, 0x69, 0x62, 0x65, 0x68, + 0x65, 0x73, 0x68, 0x74, 0x0e, 0x6b, 0x68, 0x6f, + 0x72, 0x64, 0x61, 0x64, 0x06, 0x74, 0x69, 0x72, + 0x0c, 0x6d, 0x6f, 0x72, 0x64, 0x61, 0x64, 0x12, + 0x73, 0x68, 0x61, 0x68, 0x72, 0x69, 0x76, 0x61, + 0x72, 0x08, 0x6d, 0x65, 0x68, 0x72, 0x08, 0x61, + 0x62, 0x61, 0x6e, 0x08, 0x61, 0x7a, 0x61, 0x72, + 0x06, 0x64, 0x65, 0x79, 0x0c, 0x62, 0x61, 0x68, + 0x6d, 0x61, 0x6e, 0x0c, 0x65, 0x73, 0x66, 0x61, + 0x6e, 0x64, 0x04, 0x41, 0x50, 0x1a, 0x42, 0x65, + 0x66, 0x6f, 0x72, 0x65, 0x20, 0x52, 0x2e, 0x4f, + 0x2e, 0x43, 0x2e, 0x0c, 0x4d, 0x69, 0x6e, 0x67, + 0x75, 0x6f, 0x12, 0x63, 0x61, 0x6c, 0x65, 0x6e, + 0x64, 0x61, 0x72, 0x73, 0x08, 0x64, 0x61, 0x74, + 0x65, 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, + 0x75, 0x10, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0x1e, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, + 0x72, 0x6e, 0x26, 0x7b, 0x6d, 0x69, 0x6e, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x6e, + 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, + 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x0e, 0x64, + 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x26, 0x7b, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, + 0x7d, 0xa0, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0x3c, 0x7b, 0x6d, 0x69, 0x6e, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, + 0xa0, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x79, 0x2c, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0xa0, 0x7b, 0x70, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, + 0x7d, 0x42, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0xa0, 0x7b, 0x70, + 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, + 0x67, 0x6e, 0x7d, 0x0e, 0x70, 0x65, 0x72, 0x63, + 0x65, 0x6e, 0x74, 0x10, 0x70, 0x61, 0x74, 0x74, + 0x65, 0x72, 0x6e, 0x73, 0x02, 0x2c, 0x02, 0xa0, + 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x06, 0x4e, + 0x61, 0x4e, 0x06, 0x6e, 0x61, 0x6e, 0x02, 0x2b, + 0x10, 0x70, 0x6c, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x03, 0x12, 0x22, 0x12, 0x6d, 0x69, 0x6e, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, 0x25, + 0x16, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, + 0x53, 0x69, 0x67, 0x6e, 0x03, 0x1e, 0x22, 0x10, + 0x69, 0x6e, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, + 0x0e, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, + 0x03, 0xac, 0x20, 0x06, 0x45, 0x55, 0x52, 0x02, + 0xa3, 0x06, 0x47, 0x42, 0x50, 0x04, 0x6b, 0x72, + 0x06, 0x4e, 0x4f, 0x4b, 0x06, 0x43, 0x46, 0x41, + 0x06, 0x58, 0x4f, 0x46, 0x14, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x52, + 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, + 0x6c, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, + 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x6a, 0x73, + 0x6f, 0x6e, 0x70, 0x2f, 0x6e, 0x62, 0x2e, 0x6a, + 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, + 0x01, 0x00, 0x27, 0x00, 0x89, 0x01, 0xc8, 0x69, + 0x01, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x39, 0xd0, + 0x00, 0x00, 0x00, 0x43, 0xd1, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xd2, 0x00, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd4, 0x00, 0x00, + 0x00, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x04, 0xd6, + 0x00, 0x00, 0x00, 0x04, 0xd7, 0x00, 0x00, 0x00, + 0x04, 0xd8, 0x00, 0x00, 0x00, 0x04, 0xd9, 0x00, + 0x00, 0x00, 0x04, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xdb, 0x00, 0x00, 0x00, 0x04, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x04, 0xde, + 0x00, 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, + 0x04, 0xe0, 0x00, 0x00, 0x00, 0x04, 0xe1, 0x00, + 0x00, 0x00, 0x04, 0xe2, 0x00, 0x00, 0x00, 0x26, + 0x0f, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x0a, + 0x4d, 0xe4, 0x00, 0x00, 0x00, 0x09, 0x4d, 0xe5, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, 0x00, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe6, + 0x00, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x00, + 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0xec, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xed, 0x00, + 0x00, 0x00, 0x4d, 0xee, 0x00, 0x00, 0x00, 0x04, + 0xef, 0x00, 0x00, 0x00, 0x4d, 0xf0, 0x00, 0x00, + 0x00, 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, 0xf2, + 0x00, 0x00, 0x00, 0x04, 0xf3, 0x00, 0x00, 0x00, + 0x4d, 0xf4, 0x00, 0x00, 0x00, 0x04, 0xf5, 0x00, + 0x00, 0x00, 0x4d, 0xf6, 0x00, 0x00, 0x00, 0x04, + 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xf8, 0x00, 0x00, + 0x00, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0xfa, + 0x00, 0x00, 0x00, 0x04, 0xfb, 0x00, 0x00, 0x00, + 0x4d, 0xfc, 0x00, 0x00, 0x00, 0x04, 0xfd, 0x00, + 0x00, 0x00, 0x4d, 0xfe, 0x00, 0x00, 0x00, 0x04, + 0xff, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x01, 0x00, + 0x00, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0x02, + 0x01, 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, 0x00, + 0x4d, 0x04, 0x01, 0x00, 0x00, 0x04, 0x05, 0x01, + 0x00, 0x00, 0x4d, 0x06, 0x01, 0x00, 0x00, 0x04, + 0x07, 0x01, 0x00, 0x00, 0x4d, 0x08, 0x01, 0x00, + 0x00, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0x0a, + 0x01, 0x00, 0x00, 0x04, 0x0b, 0x01, 0x00, 0x00, + 0x4d, 0x0c, 0x01, 0x00, 0x00, 0x04, 0x0d, 0x01, + 0x00, 0x00, 0x4d, 0x0e, 0x01, 0x00, 0x00, 0x04, + 0x0f, 0x01, 0x00, 0x00, 0x4d, 0x10, 0x01, 0x00, + 0x00, 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, 0x12, + 0x01, 0x00, 0x00, 0x04, 0x13, 0x01, 0x00, 0x00, + 0x4d, 0x14, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x4d, 0x16, 0x01, 0x00, 0x00, 0x04, + 0x17, 0x01, 0x00, 0x00, 0x4d, 0x18, 0x01, 0x00, + 0x00, 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, 0x1a, + 0x01, 0x00, 0x00, 0x04, 0x1b, 0x01, 0x00, 0x00, + 0x4d, 0x1c, 0x01, 0x00, 0x00, 0x04, 0x19, 0x01, + 0x00, 0x00, 0x4d, 0x1d, 0x01, 0x00, 0x00, 0x04, + 0x1e, 0x01, 0x00, 0x00, 0x4d, 0x1f, 0x01, 0x00, + 0x00, 0x04, 0x20, 0x01, 0x00, 0x00, 0x4d, 0x21, + 0x01, 0x00, 0x00, 0x04, 0x22, 0x01, 0x00, 0x00, + 0x4d, 0x23, 0x01, 0x00, 0x00, 0x04, 0x24, 0x01, + 0x00, 0x00, 0x4d, 0x25, 0x01, 0x00, 0x00, 0x04, + 0x26, 0x01, 0x00, 0x00, 0x4d, 0x27, 0x01, 0x00, + 0x00, 0x04, 0x28, 0x01, 0x00, 0x00, 0x4d, 0x28, + 0x01, 0x00, 0x00, 0x04, 0x29, 0x01, 0x00, 0x00, + 0x4d, 0x2a, 0x01, 0x00, 0x00, 0x04, 0x2b, 0x01, + 0x00, 0x00, 0x4d, 0x2c, 0x01, 0x00, 0x00, 0x04, + 0x2d, 0x01, 0x00, 0x00, 0x4d, 0x2e, 0x01, 0x00, + 0x00, 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, 0x30, + 0x01, 0x00, 0x00, 0x04, 0x31, 0x01, 0x00, 0x00, + 0x4d, 0x32, 0x01, 0x00, 0x00, 0x04, 0x33, 0x01, + 0x00, 0x00, 0x4d, 0x34, 0x01, 0x00, 0x00, 0x04, + 0x35, 0x01, 0x00, 0x00, 0x4d, 0x36, 0x01, 0x00, + 0x00, 0x04, 0x37, 0x01, 0x00, 0x00, 0x4d, 0x38, + 0x01, 0x00, 0x00, 0x04, 0x39, 0x01, 0x00, 0x00, + 0x4d, 0x3a, 0x01, 0x00, 0x00, 0x04, 0x3b, 0x01, + 0x00, 0x00, 0x4d, 0x3c, 0x01, 0x00, 0x00, 0x4d, + 0x3d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x3e, 0x01, + 0x00, 0x00, 0x4d, 0x3f, 0x01, 0x00, 0x00, 0x04, + 0x40, 0x01, 0x00, 0x00, 0x4d, 0x41, 0x01, 0x00, + 0x00, 0x04, 0x33, 0x01, 0x00, 0x00, 0x4d, 0x34, + 0x01, 0x00, 0x00, 0x04, 0x42, 0x01, 0x00, 0x00, + 0x4d, 0x2c, 0x01, 0x00, 0x00, 0x4d, 0x43, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x44, 0x01, 0x00, 0x00, + 0x4d, 0x45, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x4d, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x0d, 0x01, 0x00, 0x00, 0x4d, 0x0c, 0x01, 0x00, + 0x00, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0x08, + 0x01, 0x00, 0x00, 0x4d, 0x48, 0x01, 0x00, 0x00, + 0x4d, 0x49, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x0b, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x18, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x18, 0x01, 0x00, + 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xec, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x18, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xec, + 0x00, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xec, 0x00, 0x00, 0x00, + 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x4d, 0x80, 0x01, + 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, + 0xd5, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x00, + 0xbe, 0x01, 0xbe, 0x02, 0xbe, 0x03, 0xbe, 0x04, + 0xbe, 0x05, 0xbe, 0x06, 0xbe, 0x07, 0xbe, 0x08, + 0xbe, 0x09, 0xbe, 0x0a, 0xbe, 0x0b, 0x26, 0x0c, + 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, + 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, + 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, + 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, + 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, + 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, + 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, + 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, + 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, + 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xec, 0x00, 0x00, 0x00, 0x4d, 0x69, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x18, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xec, 0x00, 0x00, 0x00, 0x4d, 0x7a, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, 0x4d, + 0x81, 0x01, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x0c, 0xbe, 0x0d, 0xbe, + 0x0e, 0xbe, 0x0f, 0xbe, 0x10, 0xbe, 0x11, 0xbe, + 0x12, 0xbe, 0x13, 0xbe, 0x14, 0xbe, 0x15, 0xbe, + 0x16, 0xbe, 0x17, 0xbe, 0x18, 0x26, 0x0d, 0x00, + 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, + 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, + 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, + 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, + 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, + 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, + 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, + 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, + 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x26, 0x0d, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x8e, + 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, + 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, + 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, + 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, + 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, + 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, + 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, + 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xec, 0x00, 0x00, 0x00, 0x4d, + 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x18, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xec, 0x00, 0x00, 0x00, 0x4d, 0x7a, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x9b, 0x01, 0x00, + 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0x9d, + 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xec, 0x00, + 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x4d, + 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, + 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x19, 0xbe, 0x1a, 0xbe, 0x1b, 0xbe, 0x1c, + 0xbe, 0x1d, 0xbe, 0x1e, 0xbe, 0x1f, 0xbe, 0x20, + 0xbe, 0x21, 0xbe, 0x22, 0xbe, 0x23, 0xbe, 0x24, + 0x26, 0x0c, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, + 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, + 0x8d, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, + 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, + 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, + 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xec, 0x00, 0x00, 0x00, + 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x18, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xec, 0x00, 0x00, 0x00, 0x4d, + 0x7a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, + 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x25, 0xbe, + 0x26, 0xbe, 0x27, 0xbe, 0x28, 0xbe, 0x29, 0xbe, + 0x2a, 0xbe, 0x2b, 0xbe, 0x2c, 0xbe, 0x2d, 0xbe, + 0x2e, 0xbe, 0x2f, 0xbe, 0x30, 0xbe, 0x31, 0x26, + 0x0d, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, + 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, + 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, + 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, + 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, + 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, + 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, + 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, + 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, + 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, + 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, + 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, + 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, + 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, + 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, + 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xec, 0x00, 0x00, + 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x18, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xec, 0x00, 0x00, 0x00, + 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x9b, + 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, + 0xa0, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xec, 0x00, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x4d, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x32, 0xbe, 0x33, 0xbe, 0x34, + 0xbe, 0x35, 0xbe, 0x36, 0xbe, 0x37, 0xbe, 0x38, + 0xbe, 0x39, 0xbe, 0x3a, 0xbe, 0x3b, 0xbe, 0x3c, + 0xbe, 0x3d, 0xbe, 0x3e, 0x26, 0x0d, 0x00, 0x4d, + 0x51, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, + 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, + 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, + 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, + 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, + 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, + 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, + 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, + 0x04, 0xad, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa1, 0x01, + 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, + 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, + 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, + 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, + 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, + 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, + 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, + 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, 0x26, 0x0d, + 0x00, 0x4d, 0xec, 0x00, 0x00, 0x00, 0x4d, 0x69, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x18, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xec, 0x00, 0x00, 0x00, 0x4d, 0x7a, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xae, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, + 0x04, 0xae, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xae, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xec, 0x00, + 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x4d, + 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, + 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x3f, 0xbe, 0x40, 0xbe, 0x41, 0xbe, 0x42, + 0xbe, 0x43, 0xbe, 0x44, 0xbe, 0x45, 0xbe, 0x46, + 0xbe, 0x47, 0xbe, 0x48, 0xbe, 0x49, 0xbe, 0x4a, + 0x26, 0x0c, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, + 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, + 0x8d, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, + 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, + 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, + 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xec, 0x00, 0x00, 0x00, + 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x18, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xec, 0x00, 0x00, 0x00, 0x4d, + 0x7a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xae, 0x01, + 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, + 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xec, + 0x00, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, + 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, + 0x4d, 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x18, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x18, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xec, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x18, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xec, 0x00, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, + 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, + 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, 0x26, 0x04, + 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0xb0, + 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, + 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, + 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, 0x04, + 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, + 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, 0x26, 0x04, + 0x00, 0x4d, 0xec, 0x00, 0x00, 0x00, 0x4d, 0x7c, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, + 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, 0xd4, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x4b, 0xbe, 0x4c, + 0xbe, 0x4d, 0xbe, 0x4e, 0xbe, 0x4f, 0xbe, 0x50, + 0xbe, 0x51, 0xbe, 0x52, 0xbe, 0x53, 0xbe, 0x54, + 0xbe, 0x55, 0xbe, 0x56, 0xbe, 0x57, 0xbe, 0x58, + 0x26, 0x0e, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, + 0x04, 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, + 0x00, 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, + 0xbc, 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, + 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, + 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, + 0x04, 0xc1, 0x01, 0x00, 0x00, 0x04, 0xc2, 0x01, + 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, 0x04, + 0xc4, 0x01, 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, + 0x00, 0x04, 0xc6, 0x01, 0x00, 0x00, 0x26, 0x0e, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xb9, + 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, + 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, 0x01, + 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, 0x04, + 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, 0x00, + 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, 0x04, 0xc1, + 0x01, 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, 0x00, + 0x04, 0xc3, 0x01, 0x00, 0x00, 0x04, 0xc4, 0x01, + 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, 0x04, + 0xc6, 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, 0x4d, + 0xec, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x18, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xec, + 0x00, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xc7, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0xc7, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xec, 0x00, 0x00, 0x00, + 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x4d, 0x80, 0x01, + 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x59, + 0xbe, 0x5a, 0xbe, 0x5b, 0xbe, 0x5c, 0xbe, 0x5d, + 0xbe, 0x5e, 0xbe, 0x5f, 0xbe, 0x60, 0xbe, 0x61, + 0xbe, 0x62, 0xbe, 0x63, 0xbe, 0x64, 0x26, 0x0c, + 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0xc8, + 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, + 0x04, 0xca, 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, + 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, + 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, + 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, + 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, + 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, + 0xc9, 0x01, 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, + 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, + 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, + 0x04, 0xce, 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, + 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, + 0xd1, 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, + 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xec, 0x00, 0x00, 0x00, 0x4d, 0x69, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x18, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xec, 0x00, 0x00, 0x00, 0x4d, 0x7a, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xd4, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, + 0x04, 0xd4, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd4, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xec, 0x00, + 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x4d, + 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x65, 0xbe, 0x66, 0xbe, 0x67, 0xbe, 0x68, + 0xbe, 0x69, 0xbe, 0x6a, 0xbe, 0x6b, 0xbe, 0x6c, + 0xbe, 0x6d, 0xbe, 0x6e, 0xbe, 0x6f, 0xbe, 0x70, + 0x26, 0x0c, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, + 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, + 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, + 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, + 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, + 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, + 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, + 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, + 0xe0, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, + 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, 0xe3, + 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, + 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, + 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, + 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, + 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, + 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xec, 0x00, 0x00, 0x00, + 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x18, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xec, 0x00, 0x00, 0x00, 0x4d, + 0x7a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xed, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x51, 0x01, + 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xed, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xec, 0x00, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x4d, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, + 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x71, 0xbe, 0x72, 0xbe, 0x73, + 0xbe, 0x74, 0xbe, 0x75, 0xbe, 0x76, 0xbe, 0x77, + 0xbe, 0x78, 0xbe, 0x79, 0xbe, 0x7a, 0xbe, 0x7b, + 0xbe, 0x7c, 0x26, 0x0c, 0x00, 0x4d, 0x51, 0x01, + 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, + 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, + 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, + 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, + 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, + 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, + 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, + 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe1, + 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, + 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, + 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, + 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, + 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, + 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, + 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xec, 0x00, + 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x18, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xec, 0x00, 0x00, + 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xed, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x51, 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xec, 0x00, 0x00, 0x00, 0x4d, 0x7c, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, + 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x18, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x18, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xec, 0x00, 0x00, 0x00, + 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x18, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xec, 0x00, 0x00, 0x00, 0x4d, + 0x7a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xee, 0x01, + 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, + 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, + 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, + 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, + 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, + 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, + 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, + 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, + 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, + 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, + 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, + 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, + 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, 0x04, 0x03, + 0x02, 0x00, 0x00, 0x04, 0x04, 0x02, 0x00, 0x00, + 0x04, 0x05, 0x02, 0x00, 0x00, 0x04, 0x06, 0x02, + 0x00, 0x00, 0x04, 0x07, 0x02, 0x00, 0x00, 0x04, + 0x08, 0x02, 0x00, 0x00, 0x04, 0x09, 0x02, 0x00, + 0x00, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x04, 0x0b, + 0x02, 0x00, 0x00, 0x04, 0x0c, 0x02, 0x00, 0x00, + 0x04, 0x0d, 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, + 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, + 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, 0x4d, + 0x21, 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, 0x00, + 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0x11, + 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, + 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, + 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, 0x4d, + 0x25, 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, 0x00, + 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0x15, + 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, + 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, + 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, 0x4d, + 0x29, 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, 0x00, + 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x19, + 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, + 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, + 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, + 0x2d, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, + 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x1d, + 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, + 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, + 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, + 0x31, 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, + 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x21, + 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, + 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, + 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, + 0x35, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, + 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x25, + 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, + 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, + 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, + 0x39, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, + 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x29, + 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, + 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, + 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, + 0x3d, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, + 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x2d, + 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, + 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, + 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, + 0x41, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, + 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x31, + 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, + 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, + 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, + 0x45, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, + 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x35, + 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, + 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, + 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, + 0x49, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, + 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x39, + 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, + 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, + 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, + 0x4d, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, + 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x3d, + 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, + 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, + 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, + 0x51, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, + 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x41, + 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, + 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, + 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, + 0x55, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, + 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x45, + 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, + 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, + 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, + 0x59, 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, + 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x49, + 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, + 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, + 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, + 0x5d, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, + 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x4d, + 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, + 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, + 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, + 0x61, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, + 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x51, + 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, + 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, + 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, + 0x65, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, + 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x55, + 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, + 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, + 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, + 0x69, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, + 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x59, + 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, + 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, + 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, + 0x6d, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, + 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x5d, + 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, + 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, + 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, + 0x71, 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, + 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x61, + 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, + 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, + 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, + 0x75, 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, + 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x65, + 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, + 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, + 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, + 0x79, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, + 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x69, + 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, + 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, + 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, + 0x7d, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, + 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x6d, + 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, + 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, + 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, + 0x81, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, + 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x71, + 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, + 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, + 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, + 0x85, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, + 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x75, + 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, + 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, + 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, + 0x89, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, + 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x79, + 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, + 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, + 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, + 0x8d, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, + 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x7d, + 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, + 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, + 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, + 0x91, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, + 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x81, + 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, + 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, + 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, + 0x95, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, + 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x85, + 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, + 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, + 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, + 0x99, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, + 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x89, + 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, + 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, + 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, + 0x9d, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, + 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x8d, + 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, + 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, + 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, + 0xa1, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, + 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x91, + 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, + 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, + 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, + 0xa5, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, + 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x95, + 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, + 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, + 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, + 0xa9, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, + 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x99, + 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, + 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, + 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, + 0xad, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, + 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x9d, + 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, + 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, + 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, + 0xb1, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, + 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0xa1, + 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, + 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, + 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, + 0xb5, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, + 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0xa5, + 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, + 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, + 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, + 0xb9, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, + 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0xa9, + 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, + 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, + 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, + 0xbd, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, + 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0xad, + 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, + 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, + 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, + 0xc1, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, + 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0xb1, + 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, + 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, + 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, + 0xc5, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, + 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0xb5, + 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, + 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, + 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, + 0xc9, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, + 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xb9, + 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, + 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, + 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, + 0xcd, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, + 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xbd, + 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, + 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, + 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, + 0xd1, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, + 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xc1, + 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, + 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, + 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, + 0xd5, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xc5, + 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, + 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xc9, + 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, + 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xcd, + 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, + 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x80, 0x04, 0xd0, 0x02, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xd1, + 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, + 0x04, 0xd2, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, + 0x00, 0x80, 0x04, 0xd3, 0x02, 0x00, 0x00, 0x4d, + 0xe5, 0x00, 0x00, 0x80, 0x04, 0xd4, 0x02, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xd5, + 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, + 0x04, 0x18, 0x01, 0x00, 0x00, 0x4d, 0xe8, 0x00, + 0x00, 0x80, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x4d, + 0xe9, 0x00, 0x00, 0x80, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0x06, + 0x01, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, + 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, + 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, + 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, + 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, + 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, + 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, + 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, + 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, + 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, + 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, + 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, + 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, + 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, + 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, 0x04, 0x03, + 0x02, 0x00, 0x00, 0x04, 0x04, 0x02, 0x00, 0x00, + 0x04, 0x05, 0x02, 0x00, 0x00, 0x04, 0x06, 0x02, + 0x00, 0x00, 0x04, 0x07, 0x02, 0x00, 0x00, 0x04, + 0x08, 0x02, 0x00, 0x00, 0x04, 0x09, 0x02, 0x00, + 0x00, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x04, 0x0b, + 0x02, 0x00, 0x00, 0x04, 0x0c, 0x02, 0x00, 0x00, + 0x04, 0x0d, 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, + 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, + 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, 0x4d, + 0x21, 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, 0x00, + 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0x11, + 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, + 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, + 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, 0x4d, + 0x25, 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, 0x00, + 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0x15, + 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, + 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, + 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, 0x4d, + 0x29, 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, 0x00, + 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x19, + 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, + 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, + 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, + 0x2d, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, + 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x1d, + 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, + 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, + 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, + 0x31, 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, + 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x21, + 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, + 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, + 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, + 0x35, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, + 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x25, + 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, + 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, + 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, + 0x39, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, + 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x29, + 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, + 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, + 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, + 0x3d, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, + 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x2d, + 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, + 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, + 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, + 0x41, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, + 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x31, + 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, + 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, + 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, + 0x45, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, + 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x35, + 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, + 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, + 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, + 0x49, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, + 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x39, + 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, + 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, + 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, + 0x4d, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, + 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x3d, + 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, + 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, + 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, + 0x51, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, + 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x41, + 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, + 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, + 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, + 0x55, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, + 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x45, + 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, + 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, + 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, + 0x59, 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, + 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x49, + 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, + 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, + 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, + 0x5d, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, + 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x4d, + 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, + 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, + 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, + 0x61, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, + 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x51, + 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, + 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, + 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, + 0x65, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, + 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x55, + 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, + 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, + 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, + 0x69, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, + 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x59, + 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, + 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, + 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, + 0x6d, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, + 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x5d, + 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, + 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, + 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, + 0x71, 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, + 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x61, + 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, + 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, + 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, + 0x75, 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, + 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x65, + 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, + 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, + 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, + 0x79, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, + 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x69, + 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, + 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, + 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, + 0x7d, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, + 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x6d, + 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, + 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, + 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, + 0x81, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, + 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x71, + 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, + 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, + 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, + 0x85, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, + 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x75, + 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, + 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, + 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, + 0x89, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, + 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x79, + 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, + 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, + 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, + 0x8d, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, + 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x7d, + 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, + 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, + 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, + 0x91, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, + 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x81, + 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, + 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, + 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, + 0x95, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, + 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x85, + 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, + 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, + 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, + 0x99, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, + 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x89, + 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, + 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, + 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, + 0x9d, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, + 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x8d, + 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, + 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, + 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, + 0xa1, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, + 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x91, + 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, + 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, + 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, + 0xa5, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, + 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x95, + 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, + 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, + 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, + 0xa9, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, + 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x99, + 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, + 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, + 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, + 0xad, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, + 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x9d, + 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, + 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, + 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, + 0xb1, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, + 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0xa1, + 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, + 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, + 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, + 0xb5, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, + 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0xa5, + 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, + 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, + 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, + 0xb9, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, + 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0xa9, + 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, + 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, + 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, + 0xbd, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, + 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0xad, + 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, + 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, + 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, + 0xc1, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, + 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0xb1, + 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, + 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, + 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, + 0xc5, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, + 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0xb5, + 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, + 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, + 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, + 0xc9, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, + 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xb9, + 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, + 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, + 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, + 0xcd, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, + 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xbd, + 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, + 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, + 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, + 0xd1, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, + 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xc1, + 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, + 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, + 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, + 0xd5, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xc5, + 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, + 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xc9, + 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, + 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xcd, + 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, + 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x80, 0x04, 0xd0, 0x02, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xd1, + 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, + 0x04, 0xd2, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, + 0x00, 0x80, 0x04, 0xd3, 0x02, 0x00, 0x00, 0x4d, + 0xe5, 0x00, 0x00, 0x80, 0x04, 0xd4, 0x02, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xd5, + 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, + 0x04, 0xd6, 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x00, + 0x00, 0x80, 0x04, 0xd7, 0x02, 0x00, 0x00, 0x4d, + 0xe9, 0x00, 0x00, 0x80, 0x04, 0xd8, 0x02, 0x00, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0xd9, + 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xee, 0x01, + 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, + 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, + 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, + 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, + 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, + 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, + 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, + 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, + 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, + 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, + 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, + 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, + 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, 0x04, 0x03, + 0x02, 0x00, 0x00, 0x04, 0x04, 0x02, 0x00, 0x00, + 0x04, 0x05, 0x02, 0x00, 0x00, 0x04, 0x06, 0x02, + 0x00, 0x00, 0x04, 0x07, 0x02, 0x00, 0x00, 0x04, + 0x08, 0x02, 0x00, 0x00, 0x04, 0x09, 0x02, 0x00, + 0x00, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x04, 0x0b, + 0x02, 0x00, 0x00, 0x04, 0x0c, 0x02, 0x00, 0x00, + 0x04, 0x0d, 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, + 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, + 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, 0x4d, + 0x21, 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, 0x00, + 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0x11, + 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, + 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, + 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, 0x4d, + 0x25, 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, 0x00, + 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0x15, + 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, + 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, + 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, 0x4d, + 0x29, 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, 0x00, + 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x19, + 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, + 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, + 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, + 0x2d, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, + 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x1d, + 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, + 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, + 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, + 0x31, 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, + 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x21, + 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, + 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, + 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, + 0x35, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, + 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x25, + 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, + 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, + 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, + 0x39, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, + 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x29, + 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, + 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, + 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, + 0x3d, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, + 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x2d, + 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, + 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, + 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, + 0x41, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, + 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x31, + 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, + 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, + 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, + 0x45, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, + 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x35, + 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, + 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, + 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, + 0x49, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, + 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x39, + 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, + 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, + 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, + 0x4d, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, + 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x3d, + 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, + 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, + 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, + 0x51, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, + 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x41, + 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, + 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, + 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, + 0x55, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, + 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x45, + 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, + 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, + 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, + 0x59, 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, + 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x49, + 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, + 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, + 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, + 0x5d, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, + 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x4d, + 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, + 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, + 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, + 0x61, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, + 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x51, + 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, + 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, + 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, + 0x65, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, + 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x55, + 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, + 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, + 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, + 0x69, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, + 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x59, + 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, + 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, + 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, + 0x6d, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, + 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x5d, + 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, + 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, + 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, + 0x71, 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, + 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x61, + 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, + 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, + 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, + 0x75, 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, + 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x65, + 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, + 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, + 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, + 0x79, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, + 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x69, + 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, + 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, + 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, + 0x7d, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, + 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x6d, + 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, + 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, + 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, + 0x81, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, + 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x71, + 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, + 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, + 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, + 0x85, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, + 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x75, + 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, + 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, + 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, + 0x89, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, + 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x79, + 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, + 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, + 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, + 0x8d, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, + 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x7d, + 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, + 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, + 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, + 0x91, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, + 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x81, + 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, + 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, + 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, + 0x95, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, + 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x85, + 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, + 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, + 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, + 0x99, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, + 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x89, + 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, + 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, + 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, + 0x9d, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, + 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x8d, + 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, + 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, + 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, + 0xa1, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, + 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x91, + 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, + 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, + 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, + 0xa5, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, + 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x95, + 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, + 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, + 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, + 0xa9, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, + 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x99, + 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, + 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, + 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, + 0xad, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, + 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x9d, + 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, + 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, + 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, + 0xb1, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, + 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0xa1, + 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, + 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, + 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, + 0xb5, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, + 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0xa5, + 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, + 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, + 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, + 0xb9, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, + 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0xa9, + 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, + 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, + 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, + 0xbd, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, + 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0xad, + 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, + 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, + 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, + 0xc1, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, + 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0xb1, + 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, + 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, + 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, + 0xc5, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, + 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0xb5, + 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, + 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, + 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, + 0xc9, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, + 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xb9, + 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, + 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, + 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, + 0xcd, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, + 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xbd, + 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, + 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, + 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, + 0xd1, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, + 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xc1, + 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, + 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, + 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, + 0xd5, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xc5, + 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, + 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xc9, + 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, + 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xcd, + 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, + 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x80, 0x04, 0xd0, 0x02, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xd1, + 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, + 0x04, 0xd2, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, + 0x00, 0x80, 0x04, 0xd3, 0x02, 0x00, 0x00, 0x4d, + 0xe5, 0x00, 0x00, 0x80, 0x04, 0xd4, 0x02, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xd5, + 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, + 0x04, 0xd6, 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x00, + 0x00, 0x80, 0x04, 0xd7, 0x02, 0x00, 0x00, 0x4d, + 0xe9, 0x00, 0x00, 0x80, 0x04, 0xd8, 0x02, 0x00, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0xd9, + 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, + 0x4d, 0xec, 0x00, 0x00, 0x00, 0x4d, 0x7c, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, 0x4d, + 0x81, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x7d, 0xbe, 0x7e, 0xbe, + 0x7f, 0xbe, 0x80, 0xbe, 0x81, 0xbe, 0x82, 0xbe, + 0x83, 0xbe, 0x84, 0xbe, 0x85, 0xbe, 0x86, 0xbe, + 0x87, 0xbe, 0x88, 0x26, 0x0c, 0x00, 0x4d, 0x51, + 0x01, 0x00, 0x00, 0x04, 0xda, 0x02, 0x00, 0x00, + 0x04, 0xdb, 0x02, 0x00, 0x00, 0x04, 0xdc, 0x02, + 0x00, 0x00, 0x04, 0xdd, 0x02, 0x00, 0x00, 0x04, + 0xde, 0x02, 0x00, 0x00, 0x04, 0xdf, 0x02, 0x00, + 0x00, 0x04, 0xe0, 0x02, 0x00, 0x00, 0x04, 0xe1, + 0x02, 0x00, 0x00, 0x04, 0xe2, 0x02, 0x00, 0x00, + 0x04, 0xe3, 0x02, 0x00, 0x00, 0x04, 0xe4, 0x02, + 0x00, 0x00, 0x04, 0xe5, 0x02, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xda, 0x02, 0x00, 0x00, 0x04, 0xdb, 0x02, 0x00, + 0x00, 0x04, 0xdc, 0x02, 0x00, 0x00, 0x04, 0xdd, + 0x02, 0x00, 0x00, 0x04, 0xde, 0x02, 0x00, 0x00, + 0x04, 0xdf, 0x02, 0x00, 0x00, 0x04, 0xe0, 0x02, + 0x00, 0x00, 0x04, 0xe1, 0x02, 0x00, 0x00, 0x04, + 0xe2, 0x02, 0x00, 0x00, 0x04, 0xe3, 0x02, 0x00, + 0x00, 0x04, 0xe4, 0x02, 0x00, 0x00, 0x04, 0xe5, + 0x02, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xec, + 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x18, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xec, 0x00, + 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xe6, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0xe6, 0x02, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xe6, 0x02, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xec, 0x00, 0x00, 0x00, 0x4d, + 0x7c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, + 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x18, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x18, 0x01, 0x00, 0x00, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xec, 0x00, 0x00, + 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x18, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xec, 0x00, 0x00, 0x00, + 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xe7, + 0x02, 0x00, 0x00, 0x04, 0xe8, 0x02, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, + 0x04, 0xe7, 0x02, 0x00, 0x00, 0x04, 0xe8, 0x02, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xe7, 0x02, 0x00, 0x00, 0x04, + 0xe8, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xec, 0x00, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x4d, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, + 0x01, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, + 0x4d, 0xe9, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x02, + 0x00, 0x00, 0x0b, 0x04, 0xeb, 0x02, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xec, 0x02, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0xed, 0x02, 0x00, 0x00, 0x4d, + 0xee, 0x02, 0x00, 0x00, 0x04, 0xef, 0x02, 0x00, + 0x00, 0x4d, 0xf0, 0x02, 0x00, 0x00, 0x4d, 0xf1, + 0x02, 0x00, 0x00, 0x0b, 0x04, 0xf2, 0x02, 0x00, + 0x00, 0x4d, 0xee, 0x02, 0x00, 0x00, 0x04, 0xf3, + 0x02, 0x00, 0x00, 0x4d, 0xf0, 0x02, 0x00, 0x00, + 0x4d, 0xf4, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xf5, + 0x02, 0x00, 0x00, 0x4d, 0xee, 0x02, 0x00, 0x00, + 0x04, 0xf6, 0x02, 0x00, 0x00, 0x4d, 0xf0, 0x02, + 0x00, 0x00, 0x4d, 0xf7, 0x02, 0x00, 0x00, 0x4d, + 0xf8, 0x02, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xf9, + 0x02, 0x00, 0x00, 0x4d, 0xf1, 0x02, 0x00, 0x00, + 0x04, 0xfa, 0x02, 0x00, 0x00, 0x4d, 0xfb, 0x02, + 0x00, 0x00, 0x04, 0xfc, 0x02, 0x00, 0x00, 0x4d, + 0xfd, 0x02, 0x00, 0x00, 0x04, 0xfe, 0x02, 0x00, + 0x00, 0x4d, 0xff, 0x02, 0x00, 0x00, 0x04, 0x00, + 0x03, 0x00, 0x00, 0x4d, 0x01, 0x03, 0x00, 0x00, + 0x04, 0x02, 0x03, 0x00, 0x00, 0x4d, 0x03, 0x03, + 0x00, 0x00, 0x04, 0x04, 0x03, 0x00, 0x00, 0x4d, + 0x05, 0x03, 0x00, 0x00, 0x4d, 0xeb, 0x02, 0x00, + 0x00, 0x4d, 0x06, 0x03, 0x00, 0x00, 0x0b, 0x04, + 0x07, 0x03, 0x00, 0x00, 0x4d, 0x08, 0x03, 0x00, + 0x00, 0x04, 0x09, 0x03, 0x00, 0x00, 0x4d, 0x0a, + 0x03, 0x00, 0x00, 0x04, 0x0b, 0x03, 0x00, 0x00, + 0x4d, 0x0c, 0x03, 0x00, 0x00, 0x04, 0x0d, 0x03, + 0x00, 0x00, 0x4d, 0x0e, 0x03, 0x00, 0x00, 0x4d, + 0x0f, 0x03, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, + 0x00, 0x24, 0x01, 0x00, 0xcc, 0x28, 0xa0, 0x0c, + 0x01, 0x00, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, + 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x04, 0x31, 0x33, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_ne_size = 25002; + +const uint8_t intl_ne[25002] = { + 0x01, 0xd7, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x6e, 0x65, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x10, + 0x7b, 0x31, 0x7d, 0x2c, 0x20, 0x7b, 0x30, 0x7d, + 0x0a, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, + 0x65, 0x64, 0x69, 0x75, 0x6d, 0x0e, 0x7b, 0x31, + 0x7d, 0x20, 0x7b, 0x30, 0x7d, 0x08, 0x66, 0x75, + 0x6c, 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x02, + 0x64, 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, 0x06, + 0x64, 0x20, 0x45, 0x04, 0x45, 0x64, 0x10, 0x45, + 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x06, + 0x45, 0x68, 0x6d, 0x0e, 0x45, 0x20, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x06, 0x45, 0x48, 0x6d, 0x16, + 0x45, 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x61, 0x08, 0x45, 0x68, 0x6d, 0x73, + 0x14, 0x45, 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x08, 0x45, 0x48, 0x6d, 0x73, + 0x06, 0x47, 0x20, 0x79, 0x04, 0x47, 0x79, 0x0e, + 0x47, 0x20, 0x79, 0x20, 0x4d, 0x4d, 0x4d, 0x0a, + 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x12, 0x47, 0x20, + 0x79, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x0c, + 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x18, 0x47, + 0x20, 0x79, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x64, + 0x2c, 0x20, 0x45, 0x0e, 0x47, 0x79, 0x4d, 0x4d, + 0x4d, 0x45, 0x64, 0x06, 0x68, 0x20, 0x61, 0x02, + 0x68, 0x04, 0x48, 0x48, 0x02, 0x48, 0x0c, 0x68, + 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x04, 0x68, 0x6d, + 0x0a, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x04, 0x48, + 0x6d, 0x12, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x61, 0x06, 0x68, 0x6d, 0x73, 0x10, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x06, 0x48, 0x6d, 0x73, 0x16, 0x68, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x20, 0x76, + 0x08, 0x68, 0x6d, 0x73, 0x76, 0x14, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x76, + 0x08, 0x48, 0x6d, 0x73, 0x76, 0x10, 0x68, 0x3a, + 0x6d, 0x6d, 0x20, 0x61, 0x20, 0x76, 0x06, 0x68, + 0x6d, 0x76, 0x0e, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x20, 0x76, 0x06, 0x48, 0x6d, 0x76, 0x02, 0x4c, + 0x02, 0x4d, 0x0a, 0x4d, 0x4d, 0x2d, 0x64, 0x64, + 0x04, 0x4d, 0x64, 0x10, 0x4d, 0x4d, 0x2d, 0x64, + 0x64, 0x2c, 0x20, 0x45, 0x06, 0x4d, 0x45, 0x64, + 0x06, 0x4c, 0x4c, 0x4c, 0x06, 0x4d, 0x4d, 0x4d, + 0x0a, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x08, 0x4d, + 0x4d, 0x4d, 0x64, 0x10, 0x4d, 0x4d, 0x4d, 0x20, + 0x64, 0x2c, 0x20, 0x45, 0x0a, 0x4d, 0x4d, 0x4d, + 0x45, 0x64, 0x0c, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, + 0x64, 0x0a, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x0a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x04, 0x6d, 0x73, + 0x02, 0x79, 0x08, 0x79, 0x2d, 0x4d, 0x4d, 0x04, + 0x79, 0x4d, 0x0e, 0x79, 0x2d, 0x4d, 0x4d, 0x2d, + 0x64, 0x64, 0x06, 0x79, 0x4d, 0x64, 0x14, 0x79, + 0x2d, 0x4d, 0x4d, 0x2d, 0x64, 0x64, 0x2c, 0x20, + 0x45, 0x08, 0x79, 0x4d, 0x45, 0x64, 0x0a, 0x79, + 0x20, 0x4d, 0x4d, 0x4d, 0x08, 0x79, 0x4d, 0x4d, + 0x4d, 0x0e, 0x79, 0x20, 0x4d, 0x4d, 0x4d, 0x20, + 0x64, 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x14, + 0x79, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x2c, + 0x20, 0x45, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x45, + 0x64, 0x0c, 0x79, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, + 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, 0x79, + 0x20, 0x51, 0x51, 0x51, 0x08, 0x79, 0x51, 0x51, + 0x51, 0x0c, 0x79, 0x20, 0x51, 0x51, 0x51, 0x51, + 0x0a, 0x79, 0x51, 0x51, 0x51, 0x51, 0x20, 0x61, + 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, + 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x1c, + 0x79, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x64, + 0x2c, 0x20, 0x45, 0x45, 0x45, 0x45, 0x14, 0x79, + 0x4d, 0x4d, 0x4d, 0x4d, 0x45, 0x45, 0x45, 0x45, + 0x64, 0x10, 0x79, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, + 0x20, 0x64, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, + 0x64, 0x16, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x73, 0x1a, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x7a, + 0x7a, 0x7a, 0x7a, 0x12, 0x68, 0x6d, 0x6d, 0x73, + 0x73, 0x7a, 0x7a, 0x7a, 0x7a, 0x14, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x7a, + 0x08, 0x68, 0x6d, 0x73, 0x7a, 0x16, 0x74, 0x69, + 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x73, 0x0e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x73, 0x03, 0x67, 0x09, 0x03, 0x68, 0x09, 0x03, + 0x69, 0x09, 0x03, 0x6a, 0x09, 0x03, 0x6b, 0x09, + 0x03, 0x6c, 0x09, 0x03, 0x6d, 0x09, 0x03, 0x6e, + 0x09, 0x03, 0x6f, 0x09, 0x05, 0x67, 0x09, 0x66, + 0x09, 0x05, 0x67, 0x09, 0x67, 0x09, 0x05, 0x67, + 0x09, 0x68, 0x09, 0x0c, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x0b, 0x1c, 0x09, 0x28, 0x09, 0x35, + 0x09, 0x30, 0x09, 0x40, 0x09, 0x13, 0x2b, 0x09, + 0x47, 0x09, 0x2c, 0x09, 0x4d, 0x09, 0x30, 0x09, + 0x41, 0x09, 0x05, 0x09, 0x30, 0x09, 0x40, 0x09, + 0x0b, 0x2e, 0x09, 0x3e, 0x09, 0x30, 0x09, 0x4d, + 0x09, 0x1a, 0x09, 0x0d, 0x05, 0x09, 0x2a, 0x09, + 0x4d, 0x09, 0x30, 0x09, 0x3f, 0x09, 0x32, 0x09, + 0x05, 0x2e, 0x09, 0x47, 0x09, 0x07, 0x1c, 0x09, + 0x41, 0x09, 0x28, 0x09, 0x0b, 0x1c, 0x09, 0x41, + 0x09, 0x32, 0x09, 0x3e, 0x09, 0x08, 0x09, 0x0b, + 0x05, 0x09, 0x17, 0x09, 0x38, 0x09, 0x4d, 0x09, + 0x1f, 0x09, 0x15, 0x38, 0x09, 0x47, 0x09, 0x2a, + 0x09, 0x4d, 0x09, 0x1f, 0x09, 0x47, 0x09, 0x2e, + 0x09, 0x4d, 0x09, 0x2c, 0x09, 0x30, 0x09, 0x0f, + 0x05, 0x09, 0x15, 0x09, 0x4d, 0x09, 0x1f, 0x09, + 0x4b, 0x09, 0x2c, 0x09, 0x30, 0x09, 0x11, 0x28, + 0x09, 0x4b, 0x09, 0x2d, 0x09, 0x47, 0x09, 0x2e, + 0x09, 0x4d, 0x09, 0x2c, 0x09, 0x30, 0x09, 0x11, + 0x21, 0x09, 0x3f, 0x09, 0x38, 0x09, 0x47, 0x09, + 0x2e, 0x09, 0x4d, 0x09, 0x2c, 0x09, 0x30, 0x09, + 0x05, 0x2e, 0x09, 0x08, 0x09, 0x0c, 0x6d, 0x6f, + 0x6e, 0x74, 0x68, 0x73, 0x03, 0x06, 0x09, 0x05, + 0x38, 0x09, 0x4b, 0x09, 0x03, 0x2e, 0x09, 0x05, + 0x2c, 0x09, 0x41, 0x09, 0x05, 0x2c, 0x09, 0x3f, + 0x09, 0x05, 0x36, 0x09, 0x41, 0x09, 0x03, 0x36, + 0x09, 0x07, 0x06, 0x09, 0x07, 0x09, 0x24, 0x09, + 0x07, 0x38, 0x09, 0x4b, 0x09, 0x2e, 0x09, 0x0b, + 0x2e, 0x09, 0x19, 0x09, 0x4d, 0x09, 0x17, 0x09, + 0x32, 0x09, 0x07, 0x2c, 0x09, 0x41, 0x09, 0x27, + 0x09, 0x09, 0x2c, 0x09, 0x3f, 0x09, 0x39, 0x09, + 0x40, 0x09, 0x0b, 0x36, 0x09, 0x41, 0x09, 0x15, + 0x09, 0x4d, 0x09, 0x30, 0x09, 0x07, 0x36, 0x09, + 0x28, 0x09, 0x3f, 0x09, 0x0d, 0x06, 0x09, 0x07, + 0x09, 0x24, 0x09, 0x2c, 0x09, 0x3e, 0x09, 0x30, + 0x09, 0x0d, 0x38, 0x09, 0x4b, 0x09, 0x2e, 0x09, + 0x2c, 0x09, 0x3e, 0x09, 0x30, 0x09, 0x11, 0x2e, + 0x09, 0x19, 0x09, 0x4d, 0x09, 0x17, 0x09, 0x32, + 0x09, 0x2c, 0x09, 0x3e, 0x09, 0x30, 0x09, 0x0d, + 0x2c, 0x09, 0x41, 0x09, 0x27, 0x09, 0x2c, 0x09, + 0x3e, 0x09, 0x30, 0x09, 0x0f, 0x2c, 0x09, 0x3f, + 0x09, 0x39, 0x09, 0x3f, 0x09, 0x2c, 0x09, 0x3e, + 0x09, 0x30, 0x09, 0x11, 0x36, 0x09, 0x41, 0x09, + 0x15, 0x09, 0x4d, 0x09, 0x30, 0x09, 0x2c, 0x09, + 0x3e, 0x09, 0x30, 0x09, 0x0d, 0x36, 0x09, 0x28, + 0x09, 0x3f, 0x09, 0x2c, 0x09, 0x3e, 0x09, 0x30, + 0x09, 0x08, 0x64, 0x61, 0x79, 0x73, 0x04, 0x42, + 0x45, 0x08, 0x65, 0x72, 0x61, 0x73, 0x13, 0x2a, + 0x09, 0x42, 0x09, 0x30, 0x09, 0x4d, 0x09, 0x35, + 0x09, 0x3e, 0x09, 0x39, 0x09, 0x4d, 0x09, 0x28, + 0x09, 0x04, 0x61, 0x6d, 0x0f, 0x05, 0x09, 0x2a, + 0x09, 0x30, 0x09, 0x3e, 0x09, 0x39, 0x09, 0x4d, + 0x09, 0x28, 0x09, 0x04, 0x70, 0x6d, 0x14, 0x64, + 0x61, 0x79, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, + 0x73, 0x06, 0x4d, 0x30, 0x31, 0x06, 0x4d, 0x30, + 0x32, 0x06, 0x4d, 0x30, 0x33, 0x06, 0x4d, 0x30, + 0x34, 0x06, 0x4d, 0x30, 0x35, 0x06, 0x4d, 0x30, + 0x36, 0x06, 0x4d, 0x30, 0x37, 0x06, 0x4d, 0x30, + 0x38, 0x06, 0x4d, 0x30, 0x39, 0x06, 0x4d, 0x31, + 0x30, 0x06, 0x4d, 0x31, 0x31, 0x06, 0x4d, 0x31, + 0x32, 0x08, 0x54, 0x6f, 0x75, 0x74, 0x08, 0x42, + 0x61, 0x62, 0x61, 0x0a, 0x48, 0x61, 0x74, 0x6f, + 0x72, 0x0a, 0x4b, 0x69, 0x61, 0x68, 0x6b, 0x08, + 0x54, 0x6f, 0x62, 0x61, 0x0c, 0x41, 0x6d, 0x73, + 0x68, 0x69, 0x72, 0x10, 0x42, 0x61, 0x72, 0x61, + 0x6d, 0x68, 0x61, 0x74, 0x12, 0x42, 0x61, 0x72, + 0x61, 0x6d, 0x6f, 0x75, 0x64, 0x61, 0x0e, 0x42, + 0x61, 0x73, 0x68, 0x61, 0x6e, 0x73, 0x0a, 0x50, + 0x61, 0x6f, 0x6e, 0x61, 0x08, 0x45, 0x70, 0x65, + 0x70, 0x0a, 0x4d, 0x65, 0x73, 0x72, 0x61, 0x0a, + 0x4e, 0x61, 0x73, 0x69, 0x65, 0x08, 0x45, 0x52, + 0x41, 0x30, 0x08, 0x45, 0x52, 0x41, 0x31, 0x10, + 0x4d, 0x65, 0x73, 0x6b, 0x65, 0x72, 0x65, 0x6d, + 0x0c, 0x54, 0x65, 0x6b, 0x65, 0x6d, 0x74, 0x0a, + 0x48, 0x65, 0x64, 0x61, 0x72, 0x0c, 0x54, 0x61, + 0x68, 0x73, 0x61, 0x73, 0x06, 0x54, 0x65, 0x72, + 0x0e, 0x59, 0x65, 0x6b, 0x61, 0x74, 0x69, 0x74, + 0x0e, 0x4d, 0x65, 0x67, 0x61, 0x62, 0x69, 0x74, + 0x0c, 0x4d, 0x69, 0x61, 0x7a, 0x69, 0x61, 0x0c, + 0x47, 0x65, 0x6e, 0x62, 0x6f, 0x74, 0x08, 0x53, + 0x65, 0x6e, 0x65, 0x0a, 0x48, 0x61, 0x6d, 0x6c, + 0x65, 0x0e, 0x4e, 0x65, 0x68, 0x61, 0x73, 0x73, + 0x65, 0x0e, 0x50, 0x61, 0x67, 0x75, 0x6d, 0x65, + 0x6e, 0x13, 0x08, 0x09, 0x38, 0x09, 0x3e, 0x09, + 0x20, 0x00, 0x2a, 0x09, 0x42, 0x09, 0x30, 0x09, + 0x4d, 0x09, 0x35, 0x09, 0x07, 0x38, 0x09, 0x28, + 0x09, 0x4d, 0x09, 0x15, 0x07, 0x09, 0x38, 0x09, + 0x4d, 0x09, 0x35, 0x09, 0x40, 0x09, 0x2a, 0x09, + 0x42, 0x09, 0x30, 0x09, 0x4d, 0x09, 0x35, 0x09, + 0x07, 0x38, 0x09, 0x3f, 0x09, 0x07, 0x09, 0x0c, + 0x54, 0x69, 0x73, 0x68, 0x72, 0x69, 0x0e, 0x48, + 0x65, 0x73, 0x68, 0x76, 0x61, 0x6e, 0x0c, 0x4b, + 0x69, 0x73, 0x6c, 0x65, 0x76, 0x0a, 0x54, 0x65, + 0x76, 0x65, 0x74, 0x0c, 0x53, 0x68, 0x65, 0x76, + 0x61, 0x74, 0x0c, 0x41, 0x64, 0x61, 0x72, 0x20, + 0x49, 0x08, 0x41, 0x64, 0x61, 0x72, 0x0a, 0x4e, + 0x69, 0x73, 0x61, 0x6e, 0x08, 0x49, 0x79, 0x61, + 0x72, 0x0a, 0x53, 0x69, 0x76, 0x61, 0x6e, 0x0a, + 0x54, 0x61, 0x6d, 0x75, 0x7a, 0x04, 0x41, 0x76, + 0x08, 0x45, 0x6c, 0x75, 0x6c, 0x0e, 0x41, 0x64, + 0x61, 0x72, 0x20, 0x49, 0x49, 0x04, 0x41, 0x4d, + 0x0b, 0x35, 0x09, 0x48, 0x09, 0x36, 0x09, 0x3e, + 0x09, 0x16, 0x09, 0x07, 0x1c, 0x09, 0x47, 0x09, + 0x20, 0x09, 0x09, 0x05, 0x09, 0x38, 0x09, 0x3e, + 0x09, 0x30, 0x09, 0x09, 0x38, 0x09, 0x3e, 0x09, + 0x09, 0x09, 0x28, 0x09, 0x07, 0x2d, 0x09, 0x26, + 0x09, 0x4c, 0x09, 0x09, 0x05, 0x09, 0x38, 0x09, + 0x4b, 0x09, 0x1c, 0x09, 0x0f, 0x15, 0x09, 0x3e, + 0x09, 0x24, 0x09, 0x4d, 0x09, 0x24, 0x09, 0x3f, + 0x09, 0x15, 0x09, 0x0b, 0x2e, 0x09, 0x19, 0x09, + 0x38, 0x09, 0x3f, 0x09, 0x30, 0x09, 0x07, 0x2a, + 0x09, 0x41, 0x09, 0x38, 0x09, 0x07, 0x2e, 0x09, + 0x3e, 0x09, 0x18, 0x09, 0x0b, 0x2b, 0x09, 0x3e, + 0x09, 0x17, 0x09, 0x41, 0x09, 0x28, 0x09, 0x07, + 0x1a, 0x09, 0x48, 0x09, 0x24, 0x09, 0x08, 0x53, + 0x61, 0x6b, 0x61, 0x08, 0x4d, 0x75, 0x68, 0x2e, + 0x08, 0x53, 0x61, 0x66, 0x2e, 0x0c, 0x52, 0x61, + 0x62, 0x2e, 0x20, 0x49, 0x0e, 0x52, 0x61, 0x62, + 0x2e, 0x20, 0x49, 0x49, 0x0c, 0x4a, 0x75, 0x6d, + 0x2e, 0x20, 0x49, 0x0e, 0x4a, 0x75, 0x6d, 0x2e, + 0x20, 0x49, 0x49, 0x08, 0x52, 0x61, 0x6a, 0x2e, + 0x08, 0x53, 0x68, 0x61, 0x2e, 0x08, 0x52, 0x61, + 0x6d, 0x2e, 0x0a, 0x53, 0x68, 0x61, 0x77, 0x2e, + 0x11, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, + 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x51, 0x00, 0x2e, + 0x00, 0x11, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, + 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x48, 0x00, + 0x2e, 0x00, 0x10, 0x4d, 0x75, 0x68, 0x61, 0x72, + 0x72, 0x61, 0x6d, 0x0a, 0x53, 0x61, 0x66, 0x61, + 0x72, 0x0f, 0x52, 0x00, 0x61, 0x00, 0x62, 0x00, + 0x69, 0x00, 0xbb, 0x02, 0x20, 0x00, 0x49, 0x00, + 0x11, 0x52, 0x00, 0x61, 0x00, 0x62, 0x00, 0x69, + 0x00, 0xbb, 0x02, 0x20, 0x00, 0x49, 0x00, 0x49, + 0x00, 0x10, 0x4a, 0x75, 0x6d, 0x61, 0x64, 0x61, + 0x20, 0x49, 0x12, 0x4a, 0x75, 0x6d, 0x61, 0x64, + 0x61, 0x20, 0x49, 0x49, 0x0a, 0x52, 0x61, 0x6a, + 0x61, 0x62, 0x0f, 0x53, 0x00, 0x68, 0x00, 0x61, + 0x00, 0xbb, 0x02, 0x62, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x0e, 0x52, 0x61, 0x6d, 0x61, 0x64, 0x61, + 0x6e, 0x0e, 0x53, 0x68, 0x61, 0x77, 0x77, 0x61, + 0x6c, 0x19, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, + 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x51, 0x00, + 0x69, 0x00, 0xbb, 0x02, 0x64, 0x00, 0x61, 0x00, + 0x68, 0x00, 0x19, 0x44, 0x00, 0x68, 0x00, 0x75, + 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x48, + 0x00, 0x69, 0x00, 0x6a, 0x00, 0x6a, 0x00, 0x61, + 0x00, 0x68, 0x00, 0x04, 0x41, 0x48, 0x1f, 0x54, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x36, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x36, 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x75, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1f, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x1d, 0x57, 0x00, 0x61, 0x00, 0x64, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x52, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x1d, 0x59, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1f, 0x4a, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, + 0x6b, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x2b, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x2d, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x2d, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x2a, 0x4a, 0x69, 0x6e, 0x67, + 0x6f, 0x2d, 0x6b, 0x65, 0x69, 0x75, 0x6e, 0x20, + 0x28, 0x37, 0x36, 0x37, 0x2d, 0x37, 0x37, 0x30, + 0x29, 0x1d, 0x48, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x1f, 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, 0x64, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x4d, 0x01, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, + 0x4a, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x61, + 0x00, 0x6a, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1f, 0x53, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x20, + 0x54, 0x65, 0x6e, 0x2d, 0x61, 0x6e, 0x20, 0x28, + 0x38, 0x35, 0x37, 0x2d, 0x38, 0x35, 0x39, 0x29, + 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, + 0x47, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1d, 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, + 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x34, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1b, 0x4c, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1d, 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x41, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, 0x4a, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x4a, 0x00, 0x69, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x29, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x27, 0x4a, 0x00, 0x69, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x45, 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4c, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x61, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x25, 0x4a, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x24, 0x54, 0x65, 0x6e, 0x2d, + 0x65, 0x69, 0x20, 0x28, 0x31, 0x31, 0x31, 0x30, + 0x2d, 0x31, 0x31, 0x31, 0x33, 0x29, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x44, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x45, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x6a, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x48, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x27, 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, + 0x4c, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x6d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x4a, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x59, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x75, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x29, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x21, 0x4a, 0x00, 0x4d, 0x01, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x27, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x75, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x29, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x74, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x29, 0x52, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x45, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4c, + 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x61, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x48, + 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x27, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x4c, + 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x45, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x27, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4a, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x27, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x61, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x41, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x4d, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x02, 0x54, 0x02, 0x53, 0x0a, 0x4d, 0x65, + 0x69, 0x6a, 0x69, 0x0d, 0x54, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x0b, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x0c, 0x48, 0x65, 0x69, 0x73, + 0x65, 0x69, 0x12, 0x46, 0x61, 0x72, 0x76, 0x61, + 0x72, 0x64, 0x69, 0x6e, 0x16, 0x4f, 0x72, 0x64, + 0x69, 0x62, 0x65, 0x68, 0x65, 0x73, 0x68, 0x74, + 0x0e, 0x4b, 0x68, 0x6f, 0x72, 0x64, 0x61, 0x64, + 0x06, 0x54, 0x69, 0x72, 0x0c, 0x4d, 0x6f, 0x72, + 0x64, 0x61, 0x64, 0x12, 0x53, 0x68, 0x61, 0x68, + 0x72, 0x69, 0x76, 0x61, 0x72, 0x08, 0x4d, 0x65, + 0x68, 0x72, 0x08, 0x41, 0x62, 0x61, 0x6e, 0x08, + 0x41, 0x7a, 0x61, 0x72, 0x06, 0x44, 0x65, 0x79, + 0x0c, 0x42, 0x61, 0x68, 0x6d, 0x61, 0x6e, 0x0c, + 0x45, 0x73, 0x66, 0x61, 0x6e, 0x64, 0x04, 0x41, + 0x50, 0x1a, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, + 0x20, 0x52, 0x2e, 0x4f, 0x2e, 0x43, 0x2e, 0x0c, + 0x52, 0x2e, 0x4f, 0x2e, 0x43, 0x2e, 0x12, 0x63, + 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, 0x73, + 0x08, 0x64, 0x61, 0x74, 0x65, 0x08, 0x64, 0x65, + 0x76, 0x61, 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, + 0x6e, 0x75, 0x10, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0x1e, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, + 0x65, 0x72, 0x6e, 0x26, 0x7b, 0x6d, 0x69, 0x6e, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, + 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x0e, + 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x26, + 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, + 0x79, 0x7d, 0xa0, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0x3c, 0x7b, 0x6d, 0x69, 0x6e, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, + 0x7d, 0xa0, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x63, 0x79, 0x2a, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0x7b, 0x70, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, + 0x7d, 0x40, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x7b, 0x70, 0x65, + 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, + 0x6e, 0x7d, 0x0e, 0x70, 0x65, 0x72, 0x63, 0x65, + 0x6e, 0x74, 0x10, 0x70, 0x61, 0x74, 0x74, 0x65, + 0x72, 0x6e, 0x73, 0x02, 0x2e, 0x02, 0x2c, 0x0a, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x06, 0x4e, 0x61, + 0x4e, 0x06, 0x6e, 0x61, 0x6e, 0x02, 0x2b, 0x10, + 0x70, 0x6c, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x02, 0x2d, 0x12, 0x6d, 0x69, 0x6e, 0x75, 0x73, + 0x53, 0x69, 0x67, 0x6e, 0x02, 0x25, 0x16, 0x70, + 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, + 0x67, 0x6e, 0x03, 0x1e, 0x22, 0x10, 0x69, 0x6e, + 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x0e, 0x73, + 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x04, 0x41, + 0x24, 0x06, 0x41, 0x55, 0x44, 0x04, 0x52, 0x24, + 0x06, 0x42, 0x52, 0x4c, 0x06, 0x43, 0x41, 0x24, + 0x06, 0x43, 0x41, 0x44, 0x06, 0x43, 0x4e, 0xa5, + 0x06, 0x43, 0x4e, 0x59, 0x03, 0xac, 0x20, 0x06, + 0x45, 0x55, 0x52, 0x02, 0xa3, 0x06, 0x47, 0x42, + 0x50, 0x06, 0x48, 0x4b, 0x24, 0x06, 0x48, 0x4b, + 0x44, 0x03, 0xaa, 0x20, 0x06, 0x49, 0x4c, 0x53, + 0x03, 0xb9, 0x20, 0x06, 0x49, 0x4e, 0x52, 0x06, + 0x4a, 0x50, 0xa5, 0x06, 0x4a, 0x50, 0x59, 0x03, + 0xa9, 0x20, 0x06, 0x4b, 0x52, 0x57, 0x06, 0x4d, + 0x58, 0x24, 0x06, 0x4d, 0x58, 0x4e, 0x09, 0x28, + 0x09, 0x47, 0x09, 0x30, 0x09, 0x42, 0x09, 0x06, + 0x4e, 0x50, 0x52, 0x06, 0x4e, 0x5a, 0x24, 0x06, + 0x4e, 0x5a, 0x44, 0x03, 0x3f, 0x0e, 0x06, 0x54, + 0x48, 0x42, 0x06, 0x4e, 0x54, 0x24, 0x06, 0x54, + 0x57, 0x44, 0x06, 0x55, 0x53, 0x24, 0x06, 0x55, + 0x53, 0x44, 0x03, 0xab, 0x20, 0x06, 0x56, 0x4e, + 0x44, 0x08, 0x46, 0x43, 0x46, 0x41, 0x06, 0x58, + 0x41, 0x46, 0x06, 0x45, 0x43, 0x24, 0x06, 0x58, + 0x43, 0x44, 0x06, 0x43, 0x46, 0x41, 0x06, 0x58, + 0x4f, 0x46, 0x08, 0x43, 0x46, 0x50, 0x46, 0x06, + 0x58, 0x50, 0x46, 0x14, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x52, 0x6e, + 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, + 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, + 0x64, 0x61, 0x74, 0x61, 0x2f, 0x6a, 0x73, 0x6f, + 0x6e, 0x70, 0x2f, 0x6e, 0x65, 0x2e, 0x6a, 0x73, + 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, + 0x00, 0x27, 0x00, 0x89, 0x01, 0xb9, 0x6b, 0x01, + 0xa0, 0x01, 0x00, 0x00, 0x00, 0x39, 0xd0, 0x00, + 0x00, 0x00, 0x43, 0xd1, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd2, 0x00, 0x00, 0x00, 0x4d, 0xd3, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd4, 0x00, 0x00, 0x00, + 0x04, 0xd5, 0x00, 0x00, 0x00, 0x04, 0xd6, 0x00, + 0x00, 0x00, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x04, + 0xd8, 0x00, 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, + 0x00, 0x04, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdb, + 0x00, 0x00, 0x00, 0x04, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0xdd, 0x00, 0x00, 0x00, 0x04, 0xde, 0x00, + 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, 0x04, + 0xe0, 0x00, 0x00, 0x00, 0x04, 0xe1, 0x00, 0x00, + 0x00, 0x04, 0xe2, 0x00, 0x00, 0x00, 0x26, 0x0f, + 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x0a, 0x4d, + 0xe4, 0x00, 0x00, 0x00, 0x09, 0x4d, 0xe5, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x04, + 0xe9, 0x00, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xec, 0x00, 0x00, + 0x00, 0x4d, 0xec, 0x00, 0x00, 0x00, 0x04, 0xed, + 0x00, 0x00, 0x00, 0x4d, 0xee, 0x00, 0x00, 0x00, + 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, 0xf0, 0x00, + 0x00, 0x00, 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, + 0xf2, 0x00, 0x00, 0x00, 0x04, 0xf3, 0x00, 0x00, + 0x00, 0x4d, 0xf4, 0x00, 0x00, 0x00, 0x04, 0xf5, + 0x00, 0x00, 0x00, 0x4d, 0xf6, 0x00, 0x00, 0x00, + 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xf8, 0x00, + 0x00, 0x00, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, + 0xfa, 0x00, 0x00, 0x00, 0x04, 0xfb, 0x00, 0x00, + 0x00, 0x4d, 0xfc, 0x00, 0x00, 0x00, 0x04, 0xfd, + 0x00, 0x00, 0x00, 0x4d, 0xfe, 0x00, 0x00, 0x00, + 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x01, + 0x00, 0x00, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, + 0x02, 0x01, 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, + 0x00, 0x4d, 0x04, 0x01, 0x00, 0x00, 0x04, 0x05, + 0x01, 0x00, 0x00, 0x4d, 0x06, 0x01, 0x00, 0x00, + 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0x08, 0x01, + 0x00, 0x00, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, + 0x0a, 0x01, 0x00, 0x00, 0x04, 0x0b, 0x01, 0x00, + 0x00, 0x4d, 0x0c, 0x01, 0x00, 0x00, 0x04, 0x0d, + 0x01, 0x00, 0x00, 0x4d, 0x0e, 0x01, 0x00, 0x00, + 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, 0x10, 0x01, + 0x00, 0x00, 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, + 0x12, 0x01, 0x00, 0x00, 0x04, 0x13, 0x01, 0x00, + 0x00, 0x4d, 0x14, 0x01, 0x00, 0x00, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x4d, 0x16, 0x01, 0x00, 0x00, + 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, 0x18, 0x01, + 0x00, 0x00, 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, + 0x1a, 0x01, 0x00, 0x00, 0x04, 0x1b, 0x01, 0x00, + 0x00, 0x4d, 0x1c, 0x01, 0x00, 0x00, 0x04, 0x1d, + 0x01, 0x00, 0x00, 0x4d, 0x1e, 0x01, 0x00, 0x00, + 0x04, 0x1f, 0x01, 0x00, 0x00, 0x4d, 0x20, 0x01, + 0x00, 0x00, 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, + 0x22, 0x01, 0x00, 0x00, 0x04, 0x23, 0x01, 0x00, + 0x00, 0x4d, 0x24, 0x01, 0x00, 0x00, 0x04, 0x25, + 0x01, 0x00, 0x00, 0x4d, 0x25, 0x01, 0x00, 0x00, + 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, 0x27, 0x01, + 0x00, 0x00, 0x04, 0x28, 0x01, 0x00, 0x00, 0x4d, + 0x29, 0x01, 0x00, 0x00, 0x04, 0x2a, 0x01, 0x00, + 0x00, 0x4d, 0x2b, 0x01, 0x00, 0x00, 0x04, 0x2c, + 0x01, 0x00, 0x00, 0x4d, 0x2d, 0x01, 0x00, 0x00, + 0x04, 0x2e, 0x01, 0x00, 0x00, 0x4d, 0x2f, 0x01, + 0x00, 0x00, 0x04, 0x30, 0x01, 0x00, 0x00, 0x4d, + 0x31, 0x01, 0x00, 0x00, 0x04, 0x32, 0x01, 0x00, + 0x00, 0x4d, 0x33, 0x01, 0x00, 0x00, 0x04, 0x34, + 0x01, 0x00, 0x00, 0x4d, 0x35, 0x01, 0x00, 0x00, + 0x04, 0x36, 0x01, 0x00, 0x00, 0x4d, 0x37, 0x01, + 0x00, 0x00, 0x4d, 0x38, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x39, 0x01, 0x00, 0x00, 0x4d, 0x3a, 0x01, + 0x00, 0x00, 0x04, 0x3b, 0x01, 0x00, 0x00, 0x4d, + 0x3c, 0x01, 0x00, 0x00, 0x04, 0x2e, 0x01, 0x00, + 0x00, 0x4d, 0x2f, 0x01, 0x00, 0x00, 0x04, 0x28, + 0x01, 0x00, 0x00, 0x4d, 0x29, 0x01, 0x00, 0x00, + 0x4d, 0x3d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x3e, + 0x01, 0x00, 0x00, 0x4d, 0x3f, 0x01, 0x00, 0x00, + 0x04, 0x40, 0x01, 0x00, 0x00, 0x4d, 0x41, 0x01, + 0x00, 0x00, 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, + 0x0a, 0x01, 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, + 0x00, 0x4d, 0x06, 0x01, 0x00, 0x00, 0x4d, 0x42, + 0x01, 0x00, 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x0b, 0x04, 0x44, 0x01, 0x00, 0x00, + 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x5e, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x74, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x00, 0xbe, 0x01, 0xbe, 0x02, 0xbe, + 0x03, 0xbe, 0x04, 0xbe, 0x05, 0xbe, 0x06, 0xbe, + 0x07, 0xbe, 0x08, 0xbe, 0x09, 0xbe, 0x0a, 0xbe, + 0x0b, 0x26, 0x0c, 0x00, 0x4d, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, + 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, + 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, + 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, + 0x04, 0x87, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, + 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, + 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x5e, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, + 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x4d, + 0xd6, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x0c, + 0xbe, 0x0d, 0xbe, 0x0e, 0xbe, 0x0f, 0xbe, 0x10, + 0xbe, 0x11, 0xbe, 0x12, 0xbe, 0x13, 0xbe, 0x14, + 0xbe, 0x15, 0xbe, 0x16, 0xbe, 0x17, 0xbe, 0x18, + 0x26, 0x0d, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, + 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, + 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, + 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, + 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, + 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, + 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, + 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, + 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, + 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, + 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, + 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, + 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, + 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, + 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x5e, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, + 0x04, 0x96, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x76, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x4d, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x4d, + 0x7b, 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x19, 0xbe, 0x1a, 0xbe, + 0x1b, 0xbe, 0x1c, 0xbe, 0x1d, 0xbe, 0x1e, 0xbe, + 0x1f, 0xbe, 0x20, 0xbe, 0x21, 0xbe, 0x22, 0xbe, + 0x23, 0xbe, 0x24, 0x26, 0x0c, 0x00, 0x4d, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, + 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, + 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, + 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, + 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, + 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, + 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, + 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, + 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x5e, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, + 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x25, 0xbe, 0x26, 0xbe, 0x27, 0xbe, 0x28, + 0xbe, 0x29, 0xbe, 0x2a, 0xbe, 0x2b, 0xbe, 0x2c, + 0xbe, 0x2d, 0xbe, 0x2e, 0xbe, 0x2f, 0xbe, 0x30, + 0xbe, 0x31, 0x26, 0x0d, 0x00, 0x4d, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, + 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, + 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, + 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, + 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, + 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, + 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, + 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, + 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, + 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, + 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, + 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, + 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, + 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, + 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, + 0xa3, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x5e, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, + 0x04, 0x96, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x95, 0x01, + 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x76, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, + 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x32, 0xbe, + 0x33, 0xbe, 0x34, 0xbe, 0x35, 0xbe, 0x36, 0xbe, + 0x37, 0xbe, 0x38, 0xbe, 0x39, 0xbe, 0x3a, 0xbe, + 0x3b, 0xbe, 0x3c, 0xbe, 0x3d, 0xbe, 0x3e, 0x26, + 0x0d, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, + 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, + 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, + 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, + 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, + 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, + 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, + 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, + 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, + 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, + 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, + 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, + 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, + 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, + 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x5e, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x95, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x95, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x76, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x4d, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x4d, + 0x7b, 0x01, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x3f, 0xbe, 0x40, 0xbe, + 0x41, 0xbe, 0x42, 0xbe, 0x43, 0xbe, 0x44, 0xbe, + 0x45, 0xbe, 0x46, 0xbe, 0x47, 0xbe, 0x48, 0xbe, + 0x49, 0xbe, 0x4a, 0x26, 0x0c, 0x00, 0x4d, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, + 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, + 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, + 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, + 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, + 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, + 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, + 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, + 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x5e, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, + 0x96, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, + 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x76, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, + 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x44, 0x01, 0x00, + 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, 0x46, + 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x5e, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xa4, 0x01, + 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, + 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, + 0x00, 0x26, 0x04, 0x00, 0x4d, 0x50, 0x01, 0x00, + 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, + 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, + 0x04, 0xa7, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa4, 0x01, + 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, + 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, + 0x00, 0x26, 0x04, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, + 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x4b, 0xbe, 0x4c, 0xbe, 0x4d, 0xbe, 0x4e, 0xbe, + 0x4f, 0xbe, 0x50, 0xbe, 0x51, 0xbe, 0x52, 0xbe, + 0x53, 0xbe, 0x54, 0xbe, 0x55, 0xbe, 0x56, 0xbe, + 0x57, 0xbe, 0x58, 0x26, 0x0e, 0x00, 0x4d, 0x50, + 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, + 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, + 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, + 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, + 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, + 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, + 0x04, 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, + 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, 0x04, + 0xb4, 0x01, 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, + 0x00, 0x26, 0x0e, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, + 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, + 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, + 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, + 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, + 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, + 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, + 0x04, 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, + 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, 0x26, + 0x0e, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x5e, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x74, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xb6, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x50, 0x01, 0x00, + 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xb6, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x59, 0xbe, 0x5a, 0xbe, 0x5b, 0xbe, + 0x5c, 0xbe, 0x5d, 0xbe, 0x5e, 0xbe, 0x5f, 0xbe, + 0x60, 0xbe, 0x61, 0xbe, 0x62, 0xbe, 0x63, 0xbe, + 0x64, 0x26, 0x0c, 0x00, 0x4d, 0x50, 0x01, 0x00, + 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, + 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, + 0x04, 0xba, 0x01, 0x00, 0x00, 0x04, 0xbb, 0x01, + 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, 0x04, + 0xbd, 0x01, 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, + 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, 0x04, 0xc0, + 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, + 0x04, 0xc2, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xb7, 0x01, + 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, 0x04, + 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, + 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, + 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, + 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, + 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, 0x04, + 0xc1, 0x01, 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x5e, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xc3, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x50, + 0x01, 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xc3, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x76, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x4d, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x4d, + 0x7b, 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x65, 0xbe, 0x66, 0xbe, + 0x67, 0xbe, 0x68, 0xbe, 0x69, 0xbe, 0x6a, 0xbe, + 0x6b, 0xbe, 0x6c, 0xbe, 0x6d, 0xbe, 0x6e, 0xbe, + 0x6f, 0xbe, 0x70, 0x26, 0x0c, 0x00, 0x4d, 0x50, + 0x01, 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, + 0x04, 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, 0x01, + 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, 0x04, + 0xc8, 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, + 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, 0x04, 0xcb, + 0x01, 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, + 0x04, 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, + 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xd0, 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, + 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, + 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, + 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, + 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, + 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, + 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x5e, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xdc, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x76, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, + 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x71, 0xbe, + 0x72, 0xbe, 0x73, 0xbe, 0x74, 0xbe, 0x75, 0xbe, + 0x76, 0xbe, 0x77, 0xbe, 0x78, 0xbe, 0x79, 0xbe, + 0x7a, 0xbe, 0x7b, 0xbe, 0x7c, 0x26, 0x0c, 0x00, + 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, 0xc4, 0x01, + 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, 0x04, + 0xc6, 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, + 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, 0xc9, + 0x01, 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, + 0x04, 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, 0x01, + 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, 0x04, + 0xce, 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, 0xd1, + 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, + 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, + 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, + 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, + 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, + 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, + 0x04, 0xdb, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x5e, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xdc, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, + 0xdc, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, + 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x44, 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, + 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x5e, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, + 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, + 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, + 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, 0xe3, + 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, + 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, + 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, + 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, + 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, + 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, + 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, + 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, + 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, + 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, + 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, + 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, + 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, + 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, + 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, + 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, + 0x26, 0x20, 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, + 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0xfe, 0x01, + 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, + 0xff, 0x01, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, + 0x80, 0x04, 0x00, 0x02, 0x00, 0x00, 0x4d, 0x23, + 0x00, 0x00, 0x80, 0x04, 0x01, 0x02, 0x00, 0x00, + 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x02, 0x02, + 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, + 0x03, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, + 0x80, 0x04, 0x04, 0x02, 0x00, 0x00, 0x4d, 0x27, + 0x00, 0x00, 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, + 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, + 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, + 0x07, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, + 0x80, 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, 0x2b, + 0x00, 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, + 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, + 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, + 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, + 0x80, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x2f, + 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, + 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, + 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, + 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, + 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x33, + 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, + 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, + 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, + 0x13, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, + 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x37, + 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, + 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, + 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, + 0x17, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, + 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x3b, + 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, + 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, + 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, + 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, + 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x3f, + 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, + 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, + 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, + 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, + 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x43, + 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, + 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, + 0x23, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, + 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x47, + 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, + 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, + 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, + 0x27, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, + 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x4b, + 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, + 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, + 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, + 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, + 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x4f, + 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, + 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, + 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, + 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, + 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x53, + 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, + 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, + 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, + 0x33, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, + 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x57, + 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, + 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, + 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, + 0x37, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, + 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x5b, + 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, + 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, + 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, + 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, + 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x5f, + 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, + 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, + 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, + 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, + 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x63, + 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, + 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, + 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, + 0x43, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, + 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x67, + 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, + 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, + 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, + 0x47, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, + 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x6b, + 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, + 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, + 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, + 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, + 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x6f, + 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, + 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, + 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, + 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, + 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x73, + 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, + 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, + 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, + 0x53, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, + 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x77, + 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, + 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, + 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, + 0x57, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, + 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x7b, + 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, + 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, + 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, + 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, + 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x7f, + 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, + 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, + 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, + 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, + 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x83, + 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, + 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, + 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, + 0x63, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, + 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x87, + 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, + 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, + 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, + 0x67, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, + 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x8b, + 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, + 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, + 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, + 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, + 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x8f, + 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, + 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, + 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, + 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, + 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x93, + 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, + 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, + 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, + 0x73, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, + 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x97, + 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, + 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, + 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, + 0x77, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, + 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x9b, + 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, + 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, + 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, + 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, + 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x9f, + 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, + 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, + 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, + 0x7f, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, + 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0xa3, + 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, + 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, + 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, + 0x83, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, + 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0xa7, + 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, + 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, + 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, + 0x87, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, + 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0xab, + 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, + 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, + 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, + 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, + 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xaf, + 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, + 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, + 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, + 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, + 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xb3, + 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, + 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, + 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, + 0x93, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, + 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xb7, + 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, + 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, + 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, + 0x97, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, + 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xbb, + 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, + 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, + 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, + 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, + 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xbf, + 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, + 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, + 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, + 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, + 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xc3, + 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, + 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, + 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, + 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, + 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xc7, + 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, + 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, + 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, + 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, + 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xcb, + 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, + 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, + 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, + 0xab, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, + 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xcf, + 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, + 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, + 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, + 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, + 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, + 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, + 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, + 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, + 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, + 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, + 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, + 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x80, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, + 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x80, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x80, 0x4d, 0x50, 0x01, 0x00, 0x00, + 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, + 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, + 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, + 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, 0xe3, + 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, + 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, + 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, + 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, + 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, + 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, + 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, + 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, + 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, + 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, + 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, + 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, + 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, + 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, + 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, + 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, + 0x26, 0x20, 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, + 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0xfe, 0x01, + 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, + 0xff, 0x01, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, + 0x80, 0x04, 0x00, 0x02, 0x00, 0x00, 0x4d, 0x23, + 0x00, 0x00, 0x80, 0x04, 0x01, 0x02, 0x00, 0x00, + 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x02, 0x02, + 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, + 0x03, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, + 0x80, 0x04, 0x04, 0x02, 0x00, 0x00, 0x4d, 0x27, + 0x00, 0x00, 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, + 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, + 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, + 0x07, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, + 0x80, 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, 0x2b, + 0x00, 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, + 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, + 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, + 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, + 0x80, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x2f, + 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, + 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, + 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, + 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, + 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x33, + 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, + 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, + 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, + 0x13, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, + 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x37, + 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, + 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, + 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, + 0x17, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, + 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x3b, + 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, + 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, + 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, + 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, + 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x3f, + 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, + 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, + 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, + 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, + 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x43, + 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, + 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, + 0x23, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, + 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x47, + 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, + 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, + 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, + 0x27, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, + 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x4b, + 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, + 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, + 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, + 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, + 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x4f, + 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, + 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, + 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, + 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, + 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x53, + 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, + 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, + 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, + 0x33, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, + 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x57, + 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, + 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, + 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, + 0x37, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, + 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x5b, + 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, + 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, + 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, + 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, + 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x5f, + 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, + 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, + 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, + 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, + 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x63, + 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, + 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, + 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, + 0x43, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, + 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x67, + 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, + 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, + 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, + 0x47, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, + 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x6b, + 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, + 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, + 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, + 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, + 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x6f, + 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, + 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, + 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, + 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, + 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x73, + 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, + 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, + 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, + 0x53, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, + 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x77, + 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, + 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, + 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, + 0x57, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, + 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x7b, + 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, + 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, + 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, + 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, + 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x7f, + 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, + 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, + 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, + 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, + 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x83, + 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, + 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, + 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, + 0x63, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, + 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x87, + 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, + 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, + 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, + 0x67, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, + 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x8b, + 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, + 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, + 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, + 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, + 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x8f, + 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, + 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, + 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, + 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, + 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x93, + 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, + 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, + 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, + 0x73, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, + 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x97, + 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, + 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, + 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, + 0x77, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, + 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x9b, + 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, + 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, + 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, + 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, + 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x9f, + 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, + 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, + 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, + 0x7f, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, + 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0xa3, + 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, + 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, + 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, + 0x83, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, + 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0xa7, + 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, + 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, + 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, + 0x87, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, + 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0xab, + 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, + 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, + 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, + 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, + 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xaf, + 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, + 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, + 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, + 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, + 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xb3, + 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, + 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, + 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, + 0x93, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, + 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xb7, + 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, + 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, + 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, + 0x97, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, + 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xbb, + 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, + 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, + 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, + 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, + 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xbf, + 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, + 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, + 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, + 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, + 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xc3, + 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, + 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, + 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, + 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, + 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xc7, + 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, + 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, + 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, + 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, + 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xcb, + 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, + 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, + 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, + 0xab, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, + 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xcf, + 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, + 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, + 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, + 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, + 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, + 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, + 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, + 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, + 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, + 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, + 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, + 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, + 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x80, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, + 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, + 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, + 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, 0xe3, + 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, + 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, + 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, + 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, + 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, + 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, + 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, + 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, + 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, + 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, + 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, + 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, + 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, + 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, + 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, + 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, + 0x26, 0x20, 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, + 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0xfe, 0x01, + 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, + 0xff, 0x01, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, + 0x80, 0x04, 0x00, 0x02, 0x00, 0x00, 0x4d, 0x23, + 0x00, 0x00, 0x80, 0x04, 0x01, 0x02, 0x00, 0x00, + 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x02, 0x02, + 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, + 0x03, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, + 0x80, 0x04, 0x04, 0x02, 0x00, 0x00, 0x4d, 0x27, + 0x00, 0x00, 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, + 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, + 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, + 0x07, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, + 0x80, 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, 0x2b, + 0x00, 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, + 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, + 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, + 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, + 0x80, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x2f, + 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, + 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, + 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, + 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, + 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x33, + 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, + 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, + 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, + 0x13, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, + 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x37, + 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, + 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, + 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, + 0x17, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, + 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x3b, + 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, + 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, + 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, + 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, + 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x3f, + 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, + 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, + 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, + 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, + 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x43, + 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, + 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, + 0x23, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, + 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x47, + 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, + 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, + 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, + 0x27, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, + 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x4b, + 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, + 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, + 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, + 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, + 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x4f, + 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, + 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, + 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, + 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, + 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x53, + 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, + 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, + 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, + 0x33, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, + 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x57, + 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, + 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, + 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, + 0x37, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, + 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x5b, + 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, + 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, + 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, + 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, + 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x5f, + 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, + 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, + 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, + 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, + 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x63, + 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, + 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, + 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, + 0x43, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, + 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x67, + 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, + 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, + 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, + 0x47, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, + 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x6b, + 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, + 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, + 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, + 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, + 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x6f, + 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, + 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, + 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, + 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, + 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x73, + 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, + 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, + 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, + 0x53, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, + 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x77, + 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, + 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, + 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, + 0x57, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, + 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x7b, + 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, + 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, + 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, + 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, + 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x7f, + 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, + 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, + 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, + 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, + 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x83, + 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, + 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, + 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, + 0x63, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, + 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x87, + 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, + 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, + 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, + 0x67, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, + 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x8b, + 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, + 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, + 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, + 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, + 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x8f, + 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, + 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, + 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, + 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, + 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x93, + 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, + 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, + 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, + 0x73, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, + 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x97, + 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, + 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, + 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, + 0x77, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, + 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x9b, + 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, + 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, + 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, + 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, + 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x9f, + 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, + 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, + 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, + 0x7f, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, + 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0xa3, + 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, + 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, + 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, + 0x83, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, + 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0xa7, + 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, + 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, + 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, + 0x87, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, + 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0xab, + 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, + 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, + 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, + 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, + 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xaf, + 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, + 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, + 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, + 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, + 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xb3, + 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, + 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, + 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, + 0x93, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, + 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xb7, + 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, + 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, + 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, + 0x97, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, + 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xbb, + 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, + 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, + 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, + 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, + 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xbf, + 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, + 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, + 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, + 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, + 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xc3, + 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, + 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, + 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, + 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, + 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xc7, + 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, + 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, + 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, + 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, + 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xcb, + 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, + 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, + 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, + 0xab, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, + 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xcf, + 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, + 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, + 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, + 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, + 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, + 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, + 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, + 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, + 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, + 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, + 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, + 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, + 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x80, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, + 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x7d, + 0xbe, 0x7e, 0xbe, 0x7f, 0xbe, 0x80, 0xbe, 0x81, + 0xbe, 0x82, 0xbe, 0x83, 0xbe, 0x84, 0xbe, 0x85, + 0xbe, 0x86, 0xbe, 0x87, 0xbe, 0x88, 0x26, 0x0c, + 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, 0xcb, + 0x02, 0x00, 0x00, 0x04, 0xcc, 0x02, 0x00, 0x00, + 0x04, 0xcd, 0x02, 0x00, 0x00, 0x04, 0xce, 0x02, + 0x00, 0x00, 0x04, 0xcf, 0x02, 0x00, 0x00, 0x04, + 0xd0, 0x02, 0x00, 0x00, 0x04, 0xd1, 0x02, 0x00, + 0x00, 0x04, 0xd2, 0x02, 0x00, 0x00, 0x04, 0xd3, + 0x02, 0x00, 0x00, 0x04, 0xd4, 0x02, 0x00, 0x00, + 0x04, 0xd5, 0x02, 0x00, 0x00, 0x04, 0xd6, 0x02, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xcb, 0x02, 0x00, 0x00, 0x04, + 0xcc, 0x02, 0x00, 0x00, 0x04, 0xcd, 0x02, 0x00, + 0x00, 0x04, 0xce, 0x02, 0x00, 0x00, 0x04, 0xcf, + 0x02, 0x00, 0x00, 0x04, 0xd0, 0x02, 0x00, 0x00, + 0x04, 0xd1, 0x02, 0x00, 0x00, 0x04, 0xd2, 0x02, + 0x00, 0x00, 0x04, 0xd3, 0x02, 0x00, 0x00, 0x04, + 0xd4, 0x02, 0x00, 0x00, 0x04, 0xd5, 0x02, 0x00, + 0x00, 0x04, 0xd6, 0x02, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x5e, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xd7, 0x02, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, + 0x04, 0xd7, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd7, 0x02, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, + 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x44, 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, + 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x5e, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xd8, 0x02, 0x00, 0x00, 0x04, 0xd9, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x50, + 0x01, 0x00, 0x00, 0x04, 0xd8, 0x02, 0x00, 0x00, + 0x04, 0xd9, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd8, 0x02, + 0x00, 0x00, 0x04, 0xd9, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x76, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, + 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0xe2, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x02, 0x00, 0x00, + 0x4d, 0xdb, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xdc, + 0x02, 0x00, 0x00, 0x04, 0xdd, 0x02, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xde, 0x02, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0xdf, 0x02, 0x00, 0x00, 0x4d, + 0xe0, 0x02, 0x00, 0x00, 0x04, 0xe1, 0x02, 0x00, + 0x00, 0x4d, 0xe2, 0x02, 0x00, 0x00, 0x4d, 0xe3, + 0x02, 0x00, 0x00, 0x0b, 0x04, 0xe4, 0x02, 0x00, + 0x00, 0x4d, 0xe0, 0x02, 0x00, 0x00, 0x04, 0xe5, + 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x02, 0x00, 0x00, + 0x4d, 0xe6, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xe7, + 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x02, 0x00, 0x00, + 0x04, 0xe8, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x02, + 0x00, 0x00, 0x4d, 0xe9, 0x02, 0x00, 0x00, 0x4d, + 0xea, 0x02, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xeb, + 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x02, 0x00, 0x00, + 0x04, 0xec, 0x02, 0x00, 0x00, 0x4d, 0xed, 0x02, + 0x00, 0x00, 0x04, 0xee, 0x02, 0x00, 0x00, 0x4d, + 0xef, 0x02, 0x00, 0x00, 0x04, 0xf0, 0x02, 0x00, + 0x00, 0x4d, 0xf1, 0x02, 0x00, 0x00, 0x04, 0xf2, + 0x02, 0x00, 0x00, 0x4d, 0xf3, 0x02, 0x00, 0x00, + 0x04, 0xf4, 0x02, 0x00, 0x00, 0x4d, 0xf5, 0x02, + 0x00, 0x00, 0x04, 0xf6, 0x02, 0x00, 0x00, 0x4d, + 0xf7, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x02, 0x00, + 0x00, 0x0b, 0x04, 0xeb, 0x02, 0x00, 0x00, 0x4d, + 0xe3, 0x02, 0x00, 0x00, 0x04, 0xec, 0x02, 0x00, + 0x00, 0x4d, 0xed, 0x02, 0x00, 0x00, 0x04, 0xee, + 0x02, 0x00, 0x00, 0x4d, 0xef, 0x02, 0x00, 0x00, + 0x04, 0xf0, 0x02, 0x00, 0x00, 0x4d, 0xf1, 0x02, + 0x00, 0x00, 0x04, 0xf2, 0x02, 0x00, 0x00, 0x4d, + 0xf3, 0x02, 0x00, 0x00, 0x04, 0xf4, 0x02, 0x00, + 0x00, 0x4d, 0xf5, 0x02, 0x00, 0x00, 0x04, 0xf6, + 0x02, 0x00, 0x00, 0x4d, 0xf7, 0x02, 0x00, 0x00, + 0x4d, 0xdd, 0x02, 0x00, 0x00, 0x4d, 0xf8, 0x02, + 0x00, 0x00, 0x0b, 0x04, 0xf9, 0x02, 0x00, 0x00, + 0x4d, 0xfa, 0x02, 0x00, 0x00, 0x04, 0xfb, 0x02, + 0x00, 0x00, 0x4d, 0xfc, 0x02, 0x00, 0x00, 0x04, + 0xfd, 0x02, 0x00, 0x00, 0x4d, 0xfe, 0x02, 0x00, + 0x00, 0x04, 0xff, 0x02, 0x00, 0x00, 0x4d, 0x00, + 0x03, 0x00, 0x00, 0x04, 0x01, 0x03, 0x00, 0x00, + 0x4d, 0x02, 0x03, 0x00, 0x00, 0x04, 0x03, 0x03, + 0x00, 0x00, 0x4d, 0x04, 0x03, 0x00, 0x00, 0x04, + 0x05, 0x03, 0x00, 0x00, 0x4d, 0x06, 0x03, 0x00, + 0x00, 0x04, 0x07, 0x03, 0x00, 0x00, 0x4d, 0x08, + 0x03, 0x00, 0x00, 0x04, 0x09, 0x03, 0x00, 0x00, + 0x4d, 0x0a, 0x03, 0x00, 0x00, 0x04, 0x0b, 0x03, + 0x00, 0x00, 0x4d, 0x0c, 0x03, 0x00, 0x00, 0x04, + 0x0d, 0x03, 0x00, 0x00, 0x4d, 0x0e, 0x03, 0x00, + 0x00, 0x04, 0x0f, 0x03, 0x00, 0x00, 0x4d, 0x10, + 0x03, 0x00, 0x00, 0x04, 0x11, 0x03, 0x00, 0x00, + 0x4d, 0x12, 0x03, 0x00, 0x00, 0x04, 0x13, 0x03, + 0x00, 0x00, 0x4d, 0x14, 0x03, 0x00, 0x00, 0x04, + 0x15, 0x03, 0x00, 0x00, 0x4d, 0x16, 0x03, 0x00, + 0x00, 0x04, 0x17, 0x03, 0x00, 0x00, 0x4d, 0x18, + 0x03, 0x00, 0x00, 0x04, 0x19, 0x03, 0x00, 0x00, + 0x4d, 0x1a, 0x03, 0x00, 0x00, 0x04, 0x1b, 0x03, + 0x00, 0x00, 0x4d, 0x1c, 0x03, 0x00, 0x00, 0x04, + 0x1d, 0x03, 0x00, 0x00, 0x4d, 0x1e, 0x03, 0x00, + 0x00, 0x04, 0x1f, 0x03, 0x00, 0x00, 0x4d, 0x20, + 0x03, 0x00, 0x00, 0x04, 0x21, 0x03, 0x00, 0x00, + 0x4d, 0x22, 0x03, 0x00, 0x00, 0x04, 0x23, 0x03, + 0x00, 0x00, 0x4d, 0x24, 0x03, 0x00, 0x00, 0x4d, + 0x25, 0x03, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, + 0x00, 0x24, 0x01, 0x00, 0xcc, 0x28, 0xcc, 0x0c, + 0x01, 0x00, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, + 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x04, 0x31, 0x33, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_nl_size = 25910; + +const uint8_t intl_nl[25910] = { + 0x01, 0x91, 0x05, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x6e, 0x6c, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x0e, + 0x7b, 0x31, 0x7d, 0x20, 0x7b, 0x30, 0x7d, 0x0a, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, 0x65, + 0x64, 0x69, 0x75, 0x6d, 0x08, 0x66, 0x75, 0x6c, + 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x02, 0x64, + 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, 0x06, 0x45, + 0x20, 0x64, 0x04, 0x45, 0x64, 0x10, 0x45, 0x20, + 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x06, 0x45, + 0x68, 0x6d, 0x0e, 0x45, 0x20, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x06, 0x45, 0x48, 0x6d, 0x16, 0x45, + 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x61, 0x08, 0x45, 0x68, 0x6d, 0x73, 0x14, + 0x45, 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x08, 0x45, 0x48, 0x6d, 0x73, 0x06, + 0x79, 0x20, 0x47, 0x04, 0x47, 0x79, 0x0e, 0x4d, + 0x4d, 0x4d, 0x20, 0x79, 0x20, 0x47, 0x0a, 0x47, + 0x79, 0x4d, 0x4d, 0x4d, 0x12, 0x64, 0x20, 0x4d, + 0x4d, 0x4d, 0x20, 0x79, 0x20, 0x47, 0x0c, 0x47, + 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x16, 0x45, 0x20, + 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x20, + 0x47, 0x0e, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x45, + 0x64, 0x06, 0x68, 0x20, 0x61, 0x02, 0x68, 0x04, + 0x48, 0x48, 0x02, 0x48, 0x0c, 0x68, 0x3a, 0x6d, + 0x6d, 0x20, 0x61, 0x04, 0x68, 0x6d, 0x0a, 0x48, + 0x48, 0x3a, 0x6d, 0x6d, 0x04, 0x48, 0x6d, 0x12, + 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, + 0x61, 0x06, 0x68, 0x6d, 0x73, 0x10, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x06, 0x48, + 0x6d, 0x73, 0x16, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x20, 0x61, 0x20, 0x76, 0x08, 0x68, + 0x6d, 0x73, 0x76, 0x14, 0x48, 0x48, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x76, 0x08, 0x48, + 0x6d, 0x73, 0x76, 0x10, 0x68, 0x3a, 0x6d, 0x6d, + 0x20, 0x61, 0x20, 0x76, 0x06, 0x68, 0x6d, 0x76, + 0x0e, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x20, 0x76, + 0x06, 0x48, 0x6d, 0x76, 0x02, 0x4c, 0x02, 0x4d, + 0x06, 0x64, 0x2d, 0x4d, 0x04, 0x4d, 0x64, 0x0a, + 0x45, 0x20, 0x64, 0x2d, 0x4d, 0x06, 0x4d, 0x45, + 0x64, 0x06, 0x4c, 0x4c, 0x4c, 0x06, 0x4d, 0x4d, + 0x4d, 0x0a, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x08, + 0x4d, 0x4d, 0x4d, 0x64, 0x0e, 0x45, 0x20, 0x64, + 0x20, 0x4d, 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, + 0x45, 0x64, 0x0c, 0x64, 0x20, 0x4d, 0x4d, 0x4d, + 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x0a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x04, 0x6d, 0x73, + 0x02, 0x79, 0x06, 0x4d, 0x2d, 0x79, 0x04, 0x79, + 0x4d, 0x0a, 0x64, 0x2d, 0x4d, 0x2d, 0x79, 0x06, + 0x79, 0x4d, 0x64, 0x0e, 0x45, 0x20, 0x64, 0x2d, + 0x4d, 0x2d, 0x79, 0x08, 0x79, 0x4d, 0x45, 0x64, + 0x0a, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x08, 0x79, + 0x4d, 0x4d, 0x4d, 0x0e, 0x64, 0x20, 0x4d, 0x4d, + 0x4d, 0x20, 0x79, 0x0a, 0x79, 0x4d, 0x4d, 0x4d, + 0x64, 0x12, 0x45, 0x20, 0x64, 0x20, 0x4d, 0x4d, + 0x4d, 0x20, 0x79, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, + 0x45, 0x64, 0x0c, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, + 0x79, 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, + 0x51, 0x51, 0x51, 0x20, 0x79, 0x08, 0x79, 0x51, + 0x51, 0x51, 0x0c, 0x51, 0x51, 0x51, 0x51, 0x20, + 0x79, 0x0a, 0x79, 0x51, 0x51, 0x51, 0x51, 0x20, + 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, + 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, + 0x1a, 0x45, 0x45, 0x45, 0x45, 0x20, 0x64, 0x20, + 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x14, 0x79, + 0x4d, 0x4d, 0x4d, 0x4d, 0x45, 0x45, 0x45, 0x45, + 0x64, 0x10, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, + 0x20, 0x79, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, + 0x64, 0x10, 0x64, 0x64, 0x2d, 0x4d, 0x4d, 0x2d, + 0x79, 0x79, 0x16, 0x64, 0x61, 0x74, 0x65, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x1a, 0x48, + 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, + 0x7a, 0x7a, 0x7a, 0x7a, 0x12, 0x68, 0x6d, 0x6d, + 0x73, 0x73, 0x7a, 0x7a, 0x7a, 0x7a, 0x14, 0x48, + 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, + 0x7a, 0x08, 0x68, 0x6d, 0x73, 0x7a, 0x16, 0x74, + 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x73, 0x0e, 0x66, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x73, 0x02, 0x4a, 0x02, 0x46, 0x02, 0x41, + 0x02, 0x53, 0x02, 0x4f, 0x02, 0x4e, 0x02, 0x44, + 0x0c, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x08, + 0x6a, 0x61, 0x6e, 0x2e, 0x08, 0x66, 0x65, 0x62, + 0x2e, 0x08, 0x6d, 0x72, 0x74, 0x2e, 0x08, 0x61, + 0x70, 0x72, 0x2e, 0x06, 0x6d, 0x65, 0x69, 0x08, + 0x6a, 0x75, 0x6e, 0x2e, 0x08, 0x6a, 0x75, 0x6c, + 0x2e, 0x08, 0x61, 0x75, 0x67, 0x2e, 0x08, 0x73, + 0x65, 0x70, 0x2e, 0x08, 0x6f, 0x6b, 0x74, 0x2e, + 0x08, 0x6e, 0x6f, 0x76, 0x2e, 0x08, 0x64, 0x65, + 0x63, 0x2e, 0x0e, 0x6a, 0x61, 0x6e, 0x75, 0x61, + 0x72, 0x69, 0x10, 0x66, 0x65, 0x62, 0x72, 0x75, + 0x61, 0x72, 0x69, 0x0a, 0x6d, 0x61, 0x61, 0x72, + 0x74, 0x0a, 0x61, 0x70, 0x72, 0x69, 0x6c, 0x08, + 0x6a, 0x75, 0x6e, 0x69, 0x08, 0x6a, 0x75, 0x6c, + 0x69, 0x10, 0x61, 0x75, 0x67, 0x75, 0x73, 0x74, + 0x75, 0x73, 0x12, 0x73, 0x65, 0x70, 0x74, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x0e, 0x6f, 0x6b, 0x74, + 0x6f, 0x62, 0x65, 0x72, 0x10, 0x6e, 0x6f, 0x76, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x10, 0x64, 0x65, + 0x63, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x0c, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x73, 0x02, 0x5a, 0x02, + 0x57, 0x02, 0x56, 0x04, 0x7a, 0x6f, 0x04, 0x6d, + 0x61, 0x04, 0x64, 0x69, 0x04, 0x77, 0x6f, 0x04, + 0x76, 0x72, 0x04, 0x7a, 0x61, 0x0c, 0x7a, 0x6f, + 0x6e, 0x64, 0x61, 0x67, 0x0e, 0x6d, 0x61, 0x61, + 0x6e, 0x64, 0x61, 0x67, 0x0e, 0x64, 0x69, 0x6e, + 0x73, 0x64, 0x61, 0x67, 0x10, 0x77, 0x6f, 0x65, + 0x6e, 0x73, 0x64, 0x61, 0x67, 0x12, 0x64, 0x6f, + 0x6e, 0x64, 0x65, 0x72, 0x64, 0x61, 0x67, 0x0e, + 0x76, 0x72, 0x69, 0x6a, 0x64, 0x61, 0x67, 0x10, + 0x7a, 0x61, 0x74, 0x65, 0x72, 0x64, 0x61, 0x67, + 0x08, 0x64, 0x61, 0x79, 0x73, 0x04, 0x42, 0x45, + 0x08, 0x65, 0x72, 0x61, 0x73, 0x08, 0x61, 0x2e, + 0x6d, 0x2e, 0x04, 0x61, 0x6d, 0x08, 0x70, 0x2e, + 0x6d, 0x2e, 0x04, 0x70, 0x6d, 0x14, 0x64, 0x61, + 0x79, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x73, + 0x0a, 0x6d, 0x6e, 0x64, 0x20, 0x31, 0x0a, 0x6d, + 0x6e, 0x64, 0x20, 0x32, 0x0a, 0x6d, 0x6e, 0x64, + 0x20, 0x33, 0x0a, 0x6d, 0x6e, 0x64, 0x20, 0x34, + 0x0a, 0x6d, 0x6e, 0x64, 0x20, 0x35, 0x0a, 0x6d, + 0x6e, 0x64, 0x20, 0x36, 0x0a, 0x6d, 0x6e, 0x64, + 0x20, 0x37, 0x0a, 0x6d, 0x6e, 0x64, 0x20, 0x38, + 0x0a, 0x6d, 0x6e, 0x64, 0x20, 0x39, 0x0c, 0x6d, + 0x6e, 0x64, 0x20, 0x31, 0x30, 0x0c, 0x6d, 0x6e, + 0x64, 0x20, 0x31, 0x31, 0x0c, 0x6d, 0x6e, 0x64, + 0x20, 0x31, 0x32, 0x0e, 0x6d, 0x61, 0x61, 0x6e, + 0x64, 0x20, 0x31, 0x0e, 0x6d, 0x61, 0x61, 0x6e, + 0x64, 0x20, 0x32, 0x0e, 0x6d, 0x61, 0x61, 0x6e, + 0x64, 0x20, 0x33, 0x0e, 0x6d, 0x61, 0x61, 0x6e, + 0x64, 0x20, 0x34, 0x0e, 0x6d, 0x61, 0x61, 0x6e, + 0x64, 0x20, 0x35, 0x0e, 0x6d, 0x61, 0x61, 0x6e, + 0x64, 0x20, 0x36, 0x0e, 0x6d, 0x61, 0x61, 0x6e, + 0x64, 0x20, 0x37, 0x0e, 0x6d, 0x61, 0x61, 0x6e, + 0x64, 0x20, 0x38, 0x0e, 0x6d, 0x61, 0x61, 0x6e, + 0x64, 0x20, 0x39, 0x10, 0x6d, 0x61, 0x61, 0x6e, + 0x64, 0x20, 0x31, 0x30, 0x10, 0x6d, 0x61, 0x61, + 0x6e, 0x64, 0x20, 0x31, 0x31, 0x10, 0x6d, 0x61, + 0x61, 0x6e, 0x64, 0x20, 0x31, 0x32, 0x06, 0x54, + 0x75, 0x74, 0x0a, 0x42, 0x61, 0x62, 0x61, 0x68, + 0x0a, 0x48, 0x61, 0x74, 0x75, 0x72, 0x0c, 0x4b, + 0x69, 0x79, 0x61, 0x68, 0x6b, 0x0a, 0x54, 0x75, + 0x62, 0x61, 0x68, 0x0c, 0x41, 0x6d, 0x73, 0x68, + 0x69, 0x72, 0x10, 0x42, 0x61, 0x72, 0x61, 0x6d, + 0x68, 0x61, 0x74, 0x14, 0x42, 0x61, 0x72, 0x61, + 0x6d, 0x75, 0x6e, 0x64, 0x61, 0x68, 0x0e, 0x42, + 0x61, 0x73, 0x68, 0x61, 0x6e, 0x73, 0x0f, 0x42, + 0x00, 0x61, 0x00, 0x19, 0x20, 0x75, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x68, 0x00, 0x08, 0x41, 0x62, + 0x69, 0x62, 0x0a, 0x4d, 0x69, 0x73, 0x72, 0x61, + 0x08, 0x4e, 0x61, 0x73, 0x69, 0x08, 0x45, 0x52, + 0x41, 0x30, 0x08, 0x45, 0x52, 0x41, 0x31, 0x10, + 0x4d, 0xe4, 0x73, 0x6b, 0xe4, 0x72, 0xe4, 0x6d, + 0x0c, 0x54, 0x65, 0x71, 0x65, 0x6d, 0x74, 0x0a, + 0x48, 0x65, 0x64, 0x61, 0x72, 0x0c, 0x54, 0x61, + 0x68, 0x73, 0x61, 0x73, 0x09, 0x54, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x72, 0x00, 0x0e, 0x59, 0xe4, + 0x6b, 0x61, 0x74, 0x69, 0x74, 0x0e, 0x4d, 0xe4, + 0x67, 0x61, 0x62, 0x69, 0x74, 0x0e, 0x4d, 0x69, + 0x79, 0x61, 0x7a, 0x79, 0x61, 0x0c, 0x47, 0x65, + 0x6e, 0x62, 0x6f, 0x74, 0x08, 0x53, 0xe4, 0x6e, + 0x65, 0x0a, 0x48, 0x61, 0x6d, 0x6c, 0x65, 0x0c, + 0x4e, 0xe4, 0x68, 0x61, 0x73, 0x65, 0x0e, 0x50, + 0x61, 0x67, 0x75, 0x6d, 0xe4, 0x6e, 0x06, 0x4d, + 0x30, 0x31, 0x06, 0x4d, 0x30, 0x32, 0x06, 0x4d, + 0x30, 0x33, 0x06, 0x4d, 0x30, 0x34, 0x06, 0x4d, + 0x30, 0x35, 0x06, 0x4d, 0x30, 0x36, 0x06, 0x4d, + 0x30, 0x37, 0x06, 0x4d, 0x30, 0x38, 0x06, 0x4d, + 0x30, 0x39, 0x06, 0x4d, 0x31, 0x30, 0x06, 0x4d, + 0x31, 0x31, 0x06, 0x4d, 0x31, 0x32, 0x08, 0x76, + 0x2e, 0x43, 0x2e, 0x08, 0x6e, 0x2e, 0x43, 0x2e, + 0x06, 0x76, 0x67, 0x6a, 0x04, 0x67, 0x6a, 0x0c, + 0x76, 0x2e, 0x43, 0x68, 0x72, 0x2e, 0x0c, 0x6e, + 0x2e, 0x43, 0x68, 0x72, 0x2e, 0x0c, 0x76, 0x2e, + 0x67, 0x2e, 0x6a, 0x2e, 0x08, 0x67, 0x2e, 0x6a, + 0x2e, 0x1a, 0x76, 0x6f, 0x6f, 0x72, 0x20, 0x43, + 0x68, 0x72, 0x69, 0x73, 0x74, 0x75, 0x73, 0x16, + 0x6e, 0x61, 0x20, 0x43, 0x68, 0x72, 0x69, 0x73, + 0x74, 0x75, 0x73, 0x2e, 0x76, 0xf3, 0xf3, 0x72, + 0x20, 0x67, 0x65, 0x77, 0x6f, 0x6e, 0x65, 0x20, + 0x6a, 0x61, 0x61, 0x72, 0x74, 0x65, 0x6c, 0x6c, + 0x69, 0x6e, 0x67, 0x24, 0x67, 0x65, 0x77, 0x6f, + 0x6e, 0x65, 0x20, 0x6a, 0x61, 0x61, 0x72, 0x74, + 0x65, 0x6c, 0x6c, 0x69, 0x6e, 0x67, 0x0e, 0x54, + 0x69, 0x73, 0x6a, 0x72, 0x69, 0x65, 0x10, 0x43, + 0x68, 0x65, 0x73, 0x6a, 0x77, 0x61, 0x6e, 0x0c, + 0x4b, 0x69, 0x73, 0x6c, 0x65, 0x76, 0x0a, 0x54, + 0x65, 0x76, 0x65, 0x74, 0x0c, 0x53, 0x6a, 0x65, + 0x76, 0x61, 0x74, 0x0c, 0x41, 0x64, 0x61, 0x72, + 0x20, 0x41, 0x08, 0x41, 0x64, 0x61, 0x72, 0x0a, + 0x4e, 0x69, 0x73, 0x61, 0x6e, 0x08, 0x49, 0x6a, + 0x61, 0x72, 0x0a, 0x53, 0x69, 0x76, 0x61, 0x6e, + 0x0e, 0x54, 0x61, 0x6d, 0x6d, 0x6f, 0x65, 0x7a, + 0x04, 0x41, 0x76, 0x0c, 0x45, 0x6c, 0x6c, 0x6f, + 0x65, 0x6c, 0x0c, 0x41, 0x64, 0x61, 0x72, 0x20, + 0x42, 0x04, 0x41, 0x4d, 0x0e, 0x43, 0x68, 0x61, + 0x69, 0x74, 0x72, 0x61, 0x12, 0x56, 0x61, 0x69, + 0x73, 0x68, 0x61, 0x6b, 0x68, 0x61, 0x10, 0x4a, + 0x79, 0x65, 0x73, 0x68, 0x74, 0x68, 0x61, 0x12, + 0x41, 0x61, 0x73, 0x68, 0x61, 0x61, 0x64, 0x68, + 0x61, 0x12, 0x53, 0x68, 0x72, 0x61, 0x61, 0x76, + 0x61, 0x6e, 0x61, 0x16, 0x42, 0x68, 0x61, 0x61, + 0x64, 0x72, 0x61, 0x70, 0x61, 0x64, 0x61, 0x0e, + 0x41, 0x73, 0x68, 0x76, 0x69, 0x6e, 0x61, 0x10, + 0x4b, 0x61, 0x61, 0x72, 0x74, 0x69, 0x6b, 0x61, + 0x14, 0x41, 0x67, 0x72, 0x61, 0x68, 0x61, 0x79, + 0x61, 0x6e, 0x61, 0x0c, 0x50, 0x61, 0x75, 0x73, + 0x68, 0x61, 0x0c, 0x4d, 0x61, 0x61, 0x67, 0x68, + 0x61, 0x12, 0x50, 0x68, 0x61, 0x61, 0x6c, 0x67, + 0x75, 0x6e, 0x61, 0x08, 0x53, 0x41, 0x4b, 0x41, + 0x0a, 0x4d, 0x6f, 0x65, 0x68, 0x2e, 0x08, 0x53, + 0x61, 0x66, 0x2e, 0x0c, 0x52, 0x61, 0x62, 0x2e, + 0x20, 0x49, 0x0e, 0x52, 0x61, 0x62, 0x2e, 0x20, + 0x49, 0x49, 0x0e, 0x4a, 0x6f, 0x65, 0x6d, 0x2e, + 0x20, 0x49, 0x10, 0x4a, 0x6f, 0x65, 0x6d, 0x2e, + 0x20, 0x49, 0x49, 0x08, 0x52, 0x61, 0x6a, 0x2e, + 0x08, 0x53, 0x6a, 0x61, 0x2e, 0x08, 0x52, 0x61, + 0x6d, 0x2e, 0x0a, 0x53, 0x6a, 0x61, 0x77, 0x2e, + 0x12, 0x44, 0x6f, 0x65, 0x20, 0x61, 0x6c, 0x20, + 0x6b, 0x2e, 0x12, 0x44, 0x6f, 0x65, 0x20, 0x61, + 0x6c, 0x20, 0x68, 0x2e, 0x12, 0x4d, 0x6f, 0x65, + 0x68, 0x61, 0x72, 0x72, 0x61, 0x6d, 0x0a, 0x53, + 0x61, 0x66, 0x61, 0x72, 0x1d, 0x52, 0x00, 0x61, + 0x00, 0x62, 0x00, 0x69, 0x00, 0xbb, 0x02, 0x61, + 0x00, 0x20, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x20, + 0x00, 0x61, 0x00, 0x77, 0x00, 0x61, 0x00, 0x6c, + 0x00, 0x1f, 0x52, 0x00, 0x61, 0x00, 0x62, 0x00, + 0x69, 0x00, 0xbb, 0x02, 0x61, 0x00, 0x20, 0x00, + 0x61, 0x00, 0x6c, 0x00, 0x20, 0x00, 0x74, 0x00, + 0x68, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x1d, 0x4a, 0x00, 0x6f, 0x00, 0x65, 0x00, 0x6d, + 0x00, 0x61, 0x00, 0x64, 0x00, 0xbb, 0x02, 0x61, + 0x00, 0x6c, 0x00, 0x20, 0x00, 0x61, 0x00, 0x77, + 0x00, 0x61, 0x00, 0x6c, 0x00, 0x1f, 0x4a, 0x00, + 0x6f, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x61, 0x00, + 0x64, 0x00, 0xbb, 0x02, 0x61, 0x00, 0x6c, 0x00, + 0x20, 0x00, 0x74, 0x00, 0x68, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x0a, 0x52, 0x61, 0x6a, + 0x61, 0x62, 0x11, 0x53, 0x00, 0x6a, 0x00, 0x61, + 0x00, 0xbb, 0x02, 0x61, 0x00, 0x62, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x0e, 0x52, 0x61, 0x6d, 0x61, + 0x64, 0x61, 0x6e, 0x0c, 0x53, 0x6a, 0x61, 0x77, + 0x61, 0x6c, 0x1b, 0x44, 0x00, 0x6f, 0x00, 0x65, + 0x00, 0x20, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x20, + 0x00, 0x6b, 0x00, 0x61, 0x00, 0xbb, 0x02, 0x61, + 0x00, 0x62, 0x00, 0x61, 0x00, 0x18, 0x44, 0x6f, + 0x65, 0x20, 0x61, 0x6c, 0x20, 0x68, 0x69, 0x7a, + 0x6a, 0x61, 0x1b, 0x53, 0x00, 0x61, 0x00, 0xbb, + 0x02, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x48, + 0x00, 0x69, 0x00, 0x7a, 0x00, 0x6a, 0x00, 0x72, + 0x00, 0x69, 0x00, 0x61, 0x00, 0x1f, 0x54, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x36, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x13, 0x20, 0x36, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x21, 0x53, 0x00, 0x68, 0x00, 0x75, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1f, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, + 0x57, 0x00, 0x61, 0x00, 0x64, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x1f, 0x52, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x1d, 0x59, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1f, 0x4a, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6b, + 0x00, 0x61, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x2d, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x2d, 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x2b, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x2d, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x2a, 0x4a, 0x69, 0x6e, 0x67, 0x6f, + 0x2d, 0x6b, 0x65, 0x69, 0x75, 0x6e, 0x20, 0x28, + 0x37, 0x36, 0x37, 0x2d, 0x37, 0x37, 0x30, 0x29, + 0x1d, 0x48, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x37, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, + 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, 0x64, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, 0x4b, + 0x00, 0x4d, 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x38, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4a, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x61, 0x00, + 0x6a, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, + 0x53, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x20, 0x54, + 0x65, 0x6e, 0x2d, 0x61, 0x6e, 0x20, 0x28, 0x38, + 0x35, 0x37, 0x2d, 0x38, 0x35, 0x39, 0x29, 0x1f, + 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x47, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, + 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1d, 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, + 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x34, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1b, 0x4c, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, + 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x1d, 0x41, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x1d, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x4a, 0x00, 0x69, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x29, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x27, 0x4a, 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, + 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4c, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x61, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x25, 0x4a, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x24, 0x54, 0x65, 0x6e, 0x2d, 0x65, + 0x69, 0x20, 0x28, 0x31, 0x31, 0x31, 0x30, 0x2d, + 0x31, 0x31, 0x31, 0x33, 0x29, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, + 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x4d, 0x01, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x45, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x6a, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x48, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, + 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4c, + 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6d, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x4a, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x59, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x75, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x29, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x29, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x4a, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x21, 0x4a, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x27, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x75, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x29, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x74, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x29, 0x52, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x4e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, + 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x61, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, + 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x27, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x45, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, 0x69, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x27, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x27, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x61, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x41, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x4d, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x02, 0x54, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x68, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x27, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x24, 0x47, 0x65, 0x6e, 0x2d, 0x65, + 0x69, 0x20, 0x28, 0x31, 0x31, 0x31, 0x38, 0x2d, + 0x31, 0x31, 0x32, 0x30, 0x29, 0x21, 0x48, 0x00, + 0x6f, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x6f, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x48, 0x00, 0x6f, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x24, 0x4b, 0x65, 0x6e, 0x2d, 0x65, + 0x69, 0x20, 0x28, 0x31, 0x32, 0x30, 0x36, 0x2d, + 0x31, 0x32, 0x30, 0x37, 0x29, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, + 0x54, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x70, 0x00, + 0x75, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x45, + 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x2d, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x2d, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x24, 0x42, 0x75, 0x6e, 0x2d, 0x65, + 0x69, 0x20, 0x28, 0x31, 0x32, 0x36, 0x34, 0x2d, + 0x31, 0x32, 0x37, 0x35, 0x29, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6d, + 0x00, 0x6d, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x24, 0x42, 0x75, + 0x6e, 0x2d, 0x61, 0x6e, 0x20, 0x28, 0x31, 0x34, + 0x34, 0x34, 0x2d, 0x31, 0x34, 0x34, 0x39, 0x29, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, + 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x24, 0x4b, 0x61, 0x6e, 0x2d, 0x65, 0x69, 0x20, + 0x28, 0x31, 0x36, 0x32, 0x34, 0x2d, 0x31, 0x36, + 0x34, 0x34, 0x29, 0x21, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x29, 0x4d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x24, 0x4b, 0x61, 0x6e, 0x2d, 0x65, 0x6e, 0x20, + 0x28, 0x31, 0x37, 0x34, 0x38, 0x2d, 0x31, 0x37, + 0x35, 0x31, 0x29, 0x27, 0x48, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x22, 0x41, 0x6e, 0x2d, 0x65, 0x69, + 0x20, 0x28, 0x31, 0x37, 0x37, 0x32, 0x2d, 0x31, + 0x37, 0x38, 0x31, 0x29, 0x24, 0x4d, 0x61, 0x6e, + 0x2d, 0x65, 0x6e, 0x20, 0x28, 0x31, 0x38, 0x36, + 0x30, 0x2d, 0x31, 0x38, 0x36, 0x31, 0x29, 0x0a, + 0x4d, 0x65, 0x69, 0x6a, 0x69, 0x0d, 0x54, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x0b, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x0c, 0x48, 0x65, + 0x69, 0x73, 0x65, 0x69, 0x12, 0x46, 0x61, 0x72, + 0x76, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x16, 0x4f, + 0x72, 0x64, 0x69, 0x62, 0x65, 0x68, 0x65, 0x73, + 0x68, 0x74, 0x0e, 0x4b, 0x68, 0x6f, 0x72, 0x64, + 0x61, 0x64, 0x06, 0x54, 0x69, 0x72, 0x0c, 0x4d, + 0x6f, 0x72, 0x64, 0x61, 0x64, 0x12, 0x53, 0x68, + 0x61, 0x68, 0x72, 0x69, 0x76, 0x61, 0x72, 0x08, + 0x4d, 0x65, 0x68, 0x72, 0x08, 0x41, 0x62, 0x61, + 0x6e, 0x08, 0x41, 0x7a, 0x61, 0x72, 0x06, 0x44, + 0x65, 0x79, 0x0c, 0x42, 0x61, 0x68, 0x6d, 0x61, + 0x6e, 0x0c, 0x45, 0x73, 0x66, 0x61, 0x6e, 0x64, + 0x04, 0x41, 0x50, 0x16, 0x76, 0x6f, 0x6f, 0x72, + 0x20, 0x52, 0x2e, 0x4f, 0x2e, 0x43, 0x2e, 0x0c, + 0x4d, 0x69, 0x6e, 0x67, 0x75, 0x6f, 0x12, 0x63, + 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, 0x73, + 0x08, 0x64, 0x61, 0x74, 0x65, 0x08, 0x6c, 0x61, + 0x74, 0x6e, 0x04, 0x6e, 0x75, 0x10, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x50, + 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x26, 0x7b, + 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0x1e, 0x6e, 0x65, 0x67, 0x61, 0x74, + 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, + 0x72, 0x6e, 0x0e, 0x64, 0x65, 0x63, 0x69, 0x6d, + 0x61, 0x6c, 0x26, 0x7b, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x63, 0x79, 0x7d, 0xa0, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x3c, 0x7b, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, + 0x7d, 0xa0, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x10, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x2a, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x7b, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x40, 0x7b, 0x6d, 0x69, + 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x0e, 0x70, 0x65, + 0x72, 0x63, 0x65, 0x6e, 0x74, 0x10, 0x70, 0x61, + 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x02, 0x2c, + 0x02, 0x2e, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x06, 0x4e, 0x61, 0x4e, 0x06, 0x6e, 0x61, 0x6e, + 0x02, 0x2b, 0x10, 0x70, 0x6c, 0x75, 0x73, 0x53, + 0x69, 0x67, 0x6e, 0x02, 0x2d, 0x12, 0x6d, 0x69, + 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, + 0x25, 0x16, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, + 0x74, 0x53, 0x69, 0x67, 0x6e, 0x03, 0x1e, 0x22, + 0x10, 0x69, 0x6e, 0x66, 0x69, 0x6e, 0x69, 0x74, + 0x79, 0x0e, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, + 0x73, 0x06, 0x41, 0x55, 0x24, 0x06, 0x41, 0x55, + 0x44, 0x04, 0x52, 0x24, 0x06, 0x42, 0x52, 0x4c, + 0x04, 0x43, 0x24, 0x06, 0x43, 0x41, 0x44, 0x06, + 0x43, 0x4e, 0xa5, 0x06, 0x43, 0x4e, 0x59, 0x03, + 0xac, 0x20, 0x06, 0x45, 0x55, 0x52, 0x06, 0x46, + 0x4a, 0x24, 0x06, 0x46, 0x4a, 0x44, 0x02, 0xa3, + 0x06, 0x47, 0x42, 0x50, 0x06, 0x48, 0x4b, 0x24, + 0x06, 0x48, 0x4b, 0x44, 0x03, 0xaa, 0x20, 0x06, + 0x49, 0x4c, 0x53, 0x03, 0xb9, 0x20, 0x06, 0x49, + 0x4e, 0x52, 0x06, 0x4a, 0x50, 0xa5, 0x06, 0x4a, + 0x50, 0x59, 0x03, 0xa9, 0x20, 0x06, 0x4b, 0x52, + 0x57, 0x06, 0x4d, 0x58, 0x24, 0x06, 0x4d, 0x58, + 0x4e, 0x06, 0x4e, 0x5a, 0x24, 0x06, 0x4e, 0x5a, + 0x44, 0x06, 0x53, 0x49, 0x24, 0x06, 0x53, 0x42, + 0x44, 0x03, 0x3f, 0x0e, 0x06, 0x54, 0x48, 0x42, + 0x06, 0x4e, 0x54, 0x24, 0x06, 0x54, 0x57, 0x44, + 0x06, 0x55, 0x53, 0x24, 0x06, 0x55, 0x53, 0x44, + 0x03, 0xab, 0x20, 0x06, 0x56, 0x4e, 0x44, 0x08, + 0x46, 0x43, 0x46, 0x41, 0x06, 0x58, 0x41, 0x46, + 0x06, 0x45, 0x43, 0x24, 0x06, 0x58, 0x43, 0x44, + 0x06, 0x43, 0x46, 0x41, 0x06, 0x58, 0x4f, 0x46, + 0x14, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, + 0x69, 0x65, 0x73, 0x52, 0x6e, 0x6f, 0x64, 0x65, + 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, + 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2f, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, + 0x61, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x70, 0x2f, + 0x6e, 0x6c, 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, + 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, 0x27, 0x00, + 0x89, 0x01, 0xe8, 0x6a, 0x01, 0xa0, 0x01, 0x00, + 0x00, 0x00, 0x39, 0xd0, 0x00, 0x00, 0x00, 0x43, + 0xd1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd2, 0x00, + 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd4, 0x00, 0x00, 0x00, 0x04, 0xd5, 0x00, + 0x00, 0x00, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x04, + 0xd7, 0x00, 0x00, 0x00, 0x04, 0xd8, 0x00, 0x00, + 0x00, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x04, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xdb, 0x00, 0x00, 0x00, + 0x04, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xdd, 0x00, + 0x00, 0x00, 0x04, 0xde, 0x00, 0x00, 0x00, 0x04, + 0xdf, 0x00, 0x00, 0x00, 0x04, 0xe0, 0x00, 0x00, + 0x00, 0x04, 0xe1, 0x00, 0x00, 0x00, 0x04, 0xe2, + 0x00, 0x00, 0x00, 0x26, 0x0f, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x00, 0x0a, 0x4d, 0xe4, 0x00, 0x00, + 0x00, 0x09, 0x4d, 0xe5, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, + 0xe8, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, + 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x00, 0x04, 0xe6, + 0x00, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x04, 0xec, 0x00, 0x00, 0x00, + 0x4d, 0xed, 0x00, 0x00, 0x00, 0x04, 0xee, 0x00, + 0x00, 0x00, 0x4d, 0xef, 0x00, 0x00, 0x00, 0x04, + 0xf0, 0x00, 0x00, 0x00, 0x4d, 0xf1, 0x00, 0x00, + 0x00, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xf3, + 0x00, 0x00, 0x00, 0x04, 0xf4, 0x00, 0x00, 0x00, + 0x4d, 0xf5, 0x00, 0x00, 0x00, 0x04, 0xf6, 0x00, + 0x00, 0x00, 0x4d, 0xf7, 0x00, 0x00, 0x00, 0x04, + 0xf8, 0x00, 0x00, 0x00, 0x4d, 0xf9, 0x00, 0x00, + 0x00, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xfb, + 0x00, 0x00, 0x00, 0x04, 0xfc, 0x00, 0x00, 0x00, + 0x4d, 0xfd, 0x00, 0x00, 0x00, 0x04, 0xfe, 0x00, + 0x00, 0x00, 0x4d, 0xff, 0x00, 0x00, 0x00, 0x04, + 0x00, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x01, 0x00, + 0x00, 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, 0x03, + 0x01, 0x00, 0x00, 0x04, 0x04, 0x01, 0x00, 0x00, + 0x4d, 0x05, 0x01, 0x00, 0x00, 0x04, 0x06, 0x01, + 0x00, 0x00, 0x4d, 0x07, 0x01, 0x00, 0x00, 0x04, + 0x08, 0x01, 0x00, 0x00, 0x4d, 0x09, 0x01, 0x00, + 0x00, 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x0b, + 0x01, 0x00, 0x00, 0x04, 0x0c, 0x01, 0x00, 0x00, + 0x4d, 0x0d, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x01, + 0x00, 0x00, 0x4d, 0x0f, 0x01, 0x00, 0x00, 0x04, + 0x10, 0x01, 0x00, 0x00, 0x4d, 0x11, 0x01, 0x00, + 0x00, 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, 0x13, + 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, + 0x4d, 0x15, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x4d, 0x17, 0x01, 0x00, 0x00, 0x04, + 0x18, 0x01, 0x00, 0x00, 0x4d, 0x19, 0x01, 0x00, + 0x00, 0x04, 0x1a, 0x01, 0x00, 0x00, 0x4d, 0x1b, + 0x01, 0x00, 0x00, 0x04, 0x1c, 0x01, 0x00, 0x00, + 0x4d, 0x1d, 0x01, 0x00, 0x00, 0x04, 0x1e, 0x01, + 0x00, 0x00, 0x4d, 0x1f, 0x01, 0x00, 0x00, 0x04, + 0x20, 0x01, 0x00, 0x00, 0x4d, 0x21, 0x01, 0x00, + 0x00, 0x04, 0x22, 0x01, 0x00, 0x00, 0x4d, 0x23, + 0x01, 0x00, 0x00, 0x04, 0x24, 0x01, 0x00, 0x00, + 0x4d, 0x24, 0x01, 0x00, 0x00, 0x04, 0x25, 0x01, + 0x00, 0x00, 0x4d, 0x26, 0x01, 0x00, 0x00, 0x04, + 0x27, 0x01, 0x00, 0x00, 0x4d, 0x28, 0x01, 0x00, + 0x00, 0x04, 0x29, 0x01, 0x00, 0x00, 0x4d, 0x2a, + 0x01, 0x00, 0x00, 0x04, 0x2b, 0x01, 0x00, 0x00, + 0x4d, 0x2c, 0x01, 0x00, 0x00, 0x04, 0x2d, 0x01, + 0x00, 0x00, 0x4d, 0x2e, 0x01, 0x00, 0x00, 0x04, + 0x2f, 0x01, 0x00, 0x00, 0x4d, 0x30, 0x01, 0x00, + 0x00, 0x04, 0x31, 0x01, 0x00, 0x00, 0x4d, 0x32, + 0x01, 0x00, 0x00, 0x04, 0x33, 0x01, 0x00, 0x00, + 0x4d, 0x34, 0x01, 0x00, 0x00, 0x04, 0x35, 0x01, + 0x00, 0x00, 0x4d, 0x36, 0x01, 0x00, 0x00, 0x4d, + 0x37, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x38, 0x01, + 0x00, 0x00, 0x4d, 0x39, 0x01, 0x00, 0x00, 0x04, + 0x3a, 0x01, 0x00, 0x00, 0x4d, 0x3b, 0x01, 0x00, + 0x00, 0x04, 0x2d, 0x01, 0x00, 0x00, 0x4d, 0x2e, + 0x01, 0x00, 0x00, 0x04, 0x3c, 0x01, 0x00, 0x00, + 0x4d, 0x28, 0x01, 0x00, 0x00, 0x4d, 0x3d, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x3e, 0x01, 0x00, 0x00, + 0x4d, 0x3f, 0x01, 0x00, 0x00, 0x04, 0x40, 0x01, + 0x00, 0x00, 0x4d, 0x41, 0x01, 0x00, 0x00, 0x04, + 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x09, 0x01, 0x00, + 0x00, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, 0x05, + 0x01, 0x00, 0x00, 0x4d, 0x42, 0x01, 0x00, 0x00, + 0x4d, 0x43, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x0b, + 0x04, 0x44, 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, + 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x04, 0x44, 0x01, 0x00, 0x00, 0x04, 0x44, + 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, + 0x4a, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x63, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x0f, 0x00, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x75, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, + 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x4d, + 0xd5, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x00, + 0xbe, 0x01, 0xbe, 0x02, 0xbe, 0x03, 0xbe, 0x04, + 0xbe, 0x05, 0xbe, 0x06, 0xbe, 0x07, 0xbe, 0x08, + 0xbe, 0x09, 0xbe, 0x0a, 0xbe, 0x0b, 0x26, 0x0c, + 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, + 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, + 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, + 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, + 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, + 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, + 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, + 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, + 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x63, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x0f, 0x00, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x4d, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x4d, + 0x7b, 0x01, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x0c, 0xbe, 0x0d, 0xbe, + 0x0e, 0xbe, 0x0f, 0xbe, 0x10, 0xbe, 0x11, 0xbe, + 0x12, 0xbe, 0x13, 0xbe, 0x14, 0xbe, 0x15, 0xbe, + 0x16, 0xbe, 0x17, 0xbe, 0x18, 0x26, 0x0d, 0x00, + 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, + 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, + 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, + 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, + 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, + 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, + 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, + 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, + 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x26, 0x0d, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x94, + 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, + 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, + 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, + 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, + 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, + 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, + 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, + 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x63, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x0f, 0x00, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x74, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xa1, 0x01, 0x00, + 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x04, 0xa1, + 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, + 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, + 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x19, 0xbe, 0x1a, 0xbe, 0x1b, 0xbe, 0x1c, + 0xbe, 0x1d, 0xbe, 0x1e, 0xbe, 0x1f, 0xbe, 0x20, + 0xbe, 0x21, 0xbe, 0x22, 0xbe, 0x23, 0xbe, 0x24, + 0x26, 0x0c, 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, + 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, + 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, + 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, + 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, + 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, + 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, + 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x63, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x0f, 0x00, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, + 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x25, 0xbe, + 0x26, 0xbe, 0x27, 0xbe, 0x28, 0xbe, 0x29, 0xbe, + 0x2a, 0xbe, 0x2b, 0xbe, 0x2c, 0xbe, 0x2d, 0xbe, + 0x2e, 0xbe, 0x2f, 0xbe, 0x30, 0xbe, 0x31, 0x26, + 0x0d, 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, + 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, + 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, + 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, + 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, + 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, + 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, 0xae, + 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, + 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, + 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, + 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, + 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, + 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, + 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, + 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x63, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x0f, + 0x00, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xa1, + 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, + 0xa2, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x32, 0xbe, 0x33, 0xbe, 0x34, + 0xbe, 0x35, 0xbe, 0x36, 0xbe, 0x37, 0xbe, 0x38, + 0xbe, 0x39, 0xbe, 0x3a, 0xbe, 0x3b, 0xbe, 0x3c, + 0xbe, 0x3d, 0xbe, 0x3e, 0x26, 0x0d, 0x00, 0x4d, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, + 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, + 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, + 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, + 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, + 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, + 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, + 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, + 0x04, 0xaf, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa3, 0x01, + 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, + 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, + 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, + 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, + 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, + 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, + 0xad, 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, + 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, 0x26, 0x0d, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x63, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x0f, 0x00, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xa1, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0xa1, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa1, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, + 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, + 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x3f, 0xbe, 0x40, 0xbe, 0x41, 0xbe, 0x42, + 0xbe, 0x43, 0xbe, 0x44, 0xbe, 0x45, 0xbe, 0x46, + 0xbe, 0x47, 0xbe, 0x48, 0xbe, 0x49, 0xbe, 0x4a, + 0x26, 0x0c, 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, + 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, + 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, + 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, 0x04, 0xb6, + 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, + 0x04, 0xb8, 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, + 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, 0x04, + 0xbb, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, + 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, + 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, + 0x04, 0xb4, 0x01, 0x00, 0x00, 0x04, 0xb5, 0x01, + 0x00, 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, 0x04, + 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, + 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, + 0x01, 0x00, 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x63, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x0f, 0x00, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xa1, 0x01, + 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x44, 0x01, 0x00, 0x00, 0x04, 0x45, + 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x04, 0x44, 0x01, 0x00, 0x00, 0x04, + 0x44, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x63, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x0f, 0x00, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xbc, 0x01, 0x00, 0x00, 0x04, + 0xbd, 0x01, 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, + 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, 0x26, 0x04, + 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x04, 0xc0, + 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, + 0x04, 0xc2, 0x01, 0x00, 0x00, 0x04, 0xc3, 0x01, + 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, 0x04, + 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, + 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, 0x26, 0x04, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x76, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, + 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0xd4, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x4b, 0xbe, 0x4c, + 0xbe, 0x4d, 0xbe, 0x4e, 0xbe, 0x4f, 0xbe, 0x50, + 0xbe, 0x51, 0xbe, 0x52, 0xbe, 0x53, 0xbe, 0x54, + 0xbe, 0x55, 0xbe, 0x56, 0xbe, 0x57, 0xbe, 0x58, + 0x26, 0x0e, 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, + 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, 0x04, + 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, + 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, + 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, + 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, + 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, + 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, + 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, 0x26, 0x0e, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xc8, + 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, + 0x04, 0xca, 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, + 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, + 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, + 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, + 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, + 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, + 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, + 0xd5, 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x63, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x0f, 0x00, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xd6, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x04, 0xd6, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, + 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x59, + 0xbe, 0x5a, 0xbe, 0x5b, 0xbe, 0x5c, 0xbe, 0x5d, + 0xbe, 0x5e, 0xbe, 0x5f, 0xbe, 0x60, 0xbe, 0x61, + 0xbe, 0x62, 0xbe, 0x63, 0xbe, 0x64, 0x26, 0x0c, + 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x04, 0xd7, + 0x01, 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, + 0x04, 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, + 0x00, 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, + 0xdc, 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, + 0x00, 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, + 0x01, 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, + 0x04, 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, + 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, + 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, + 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, + 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, + 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, + 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, + 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x63, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x0f, 0x00, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xe3, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0xe3, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe3, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, + 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x65, 0xbe, 0x66, 0xbe, 0x67, 0xbe, 0x68, + 0xbe, 0x69, 0xbe, 0x6a, 0xbe, 0x6b, 0xbe, 0x6c, + 0xbe, 0x6d, 0xbe, 0x6e, 0xbe, 0x6f, 0xbe, 0x70, + 0x26, 0x0c, 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, + 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, + 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, + 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, + 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, + 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, + 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, + 0xef, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, + 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, + 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, + 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, + 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, + 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, + 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, + 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x63, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x0f, 0x00, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xfc, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xfc, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, + 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x71, 0xbe, 0x72, 0xbe, 0x73, + 0xbe, 0x74, 0xbe, 0x75, 0xbe, 0x76, 0xbe, 0x77, + 0xbe, 0x78, 0xbe, 0x79, 0xbe, 0x7a, 0xbe, 0x7b, + 0xbe, 0x7c, 0x26, 0x0c, 0x00, 0x4d, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, 0x04, + 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, + 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, + 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, + 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, + 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, + 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, + 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xf0, + 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, + 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, + 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, + 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, + 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, + 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, + 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x63, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x0f, 0x00, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xfc, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x76, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, + 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x44, 0x01, 0x00, + 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x44, 0x01, + 0x00, 0x00, 0x04, 0x44, 0x01, 0x00, 0x00, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, + 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x63, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x0f, 0x00, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xfd, 0x01, + 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x04, + 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, + 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, 0x04, 0x02, + 0x02, 0x00, 0x00, 0x04, 0x03, 0x02, 0x00, 0x00, + 0x04, 0x04, 0x02, 0x00, 0x00, 0x04, 0x05, 0x02, + 0x00, 0x00, 0x04, 0x06, 0x02, 0x00, 0x00, 0x04, + 0x07, 0x02, 0x00, 0x00, 0x04, 0x08, 0x02, 0x00, + 0x00, 0x04, 0x09, 0x02, 0x00, 0x00, 0x04, 0x0a, + 0x02, 0x00, 0x00, 0x04, 0x0b, 0x02, 0x00, 0x00, + 0x04, 0x0c, 0x02, 0x00, 0x00, 0x04, 0x0d, 0x02, + 0x00, 0x00, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x04, + 0x0f, 0x02, 0x00, 0x00, 0x04, 0x10, 0x02, 0x00, + 0x00, 0x04, 0x11, 0x02, 0x00, 0x00, 0x04, 0x12, + 0x02, 0x00, 0x00, 0x04, 0x13, 0x02, 0x00, 0x00, + 0x04, 0x14, 0x02, 0x00, 0x00, 0x04, 0x15, 0x02, + 0x00, 0x00, 0x04, 0x16, 0x02, 0x00, 0x00, 0x04, + 0x17, 0x02, 0x00, 0x00, 0x04, 0x18, 0x02, 0x00, + 0x00, 0x04, 0x19, 0x02, 0x00, 0x00, 0x04, 0x1a, + 0x02, 0x00, 0x00, 0x04, 0x1b, 0x02, 0x00, 0x00, + 0x04, 0x1c, 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, + 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, + 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, + 0x21, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, + 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0x20, + 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, + 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, + 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, + 0x25, 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, + 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0x24, + 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, + 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, + 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, + 0x29, 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, + 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x28, + 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, + 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, + 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, + 0x2d, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, + 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x2c, + 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, + 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, + 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, + 0x31, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, + 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x30, + 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, + 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, + 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, + 0x35, 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, + 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x34, + 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, + 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, + 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, + 0x39, 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, + 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x38, + 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, + 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, + 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, + 0x3d, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, + 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x3c, + 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, + 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, + 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, + 0x41, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, + 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x40, + 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, + 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, + 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, + 0x45, 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, + 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x44, + 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, + 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, + 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, + 0x49, 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, + 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x48, + 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, + 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, + 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, + 0x4d, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, + 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x4c, + 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, + 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, + 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, + 0x51, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, + 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x50, + 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, + 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, + 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, + 0x55, 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, + 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x54, + 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, + 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, + 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, + 0x59, 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, + 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x58, + 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, + 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, + 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, + 0x5d, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, + 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x5c, + 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, + 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, + 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, + 0x61, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, + 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x60, + 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, + 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, + 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, + 0x65, 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, + 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x64, + 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, + 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, + 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, + 0x69, 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, + 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x68, + 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, + 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, + 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, + 0x6d, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, + 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x6c, + 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, + 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, + 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, + 0x71, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, + 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x70, + 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, + 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, + 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, + 0x75, 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, + 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x74, + 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, + 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, + 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, + 0x79, 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, + 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x78, + 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, + 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, + 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, + 0x7d, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, + 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x7c, + 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, + 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, + 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, + 0x81, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, + 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x80, + 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, + 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, + 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, + 0x85, 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, + 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x84, + 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, + 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, + 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, + 0x89, 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, + 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x88, + 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, + 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, + 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, + 0x8d, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, + 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x8c, + 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, + 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, + 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, + 0x91, 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, + 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x90, + 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, + 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, + 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, + 0x95, 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, + 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x94, + 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, + 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, + 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, + 0x99, 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, + 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x98, + 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, + 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, + 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, + 0x9d, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, + 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x9c, + 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, + 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, + 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, + 0xa1, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, + 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0xa0, + 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, + 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, + 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, + 0xa5, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, + 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0xa4, + 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, + 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, + 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, + 0xa9, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, + 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0xa8, + 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, + 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, + 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, + 0xad, 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, + 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0xac, + 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, + 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, + 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, + 0xb1, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, + 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0xb0, + 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, + 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, + 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, + 0xb5, 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, + 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0xb4, + 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, + 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, + 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, + 0xb9, 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, + 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0xb8, + 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, + 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, + 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, + 0xbd, 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, + 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0xbc, + 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, + 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, + 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, + 0xc1, 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, + 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0xc0, + 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, + 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, + 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, + 0xc5, 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, + 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0xc4, + 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, + 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, + 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, + 0xc9, 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, + 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, + 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, + 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, + 0xcd, 0x00, 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, + 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xcc, + 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, + 0x04, 0xcd, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, + 0x00, 0x80, 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, + 0xd1, 0x00, 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, + 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xd0, + 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, + 0x04, 0xd1, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, + 0x00, 0x80, 0x04, 0xd2, 0x02, 0x00, 0x00, 0x4d, + 0xd5, 0x00, 0x00, 0x80, 0x04, 0xd3, 0x02, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xd4, + 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, + 0x04, 0xd5, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x80, 0x04, 0xd6, 0x02, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x80, 0x04, 0xd7, 0x02, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xd8, + 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, + 0x04, 0xd9, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x80, 0x04, 0xda, 0x02, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x80, 0x04, 0xdb, 0x02, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xdc, + 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, + 0x04, 0xdd, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x80, 0x04, 0xde, 0x02, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x80, 0x04, 0xdf, 0x02, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xe0, + 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, + 0x04, 0xe1, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, + 0x00, 0x80, 0x04, 0xe2, 0x02, 0x00, 0x00, 0x4d, + 0xe5, 0x00, 0x00, 0x80, 0x04, 0xe3, 0x02, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xe4, + 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, 0xe8, 0x00, + 0x00, 0x80, 0x04, 0xe5, 0x02, 0x00, 0x00, 0x4d, + 0xe9, 0x00, 0x00, 0x80, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0x03, + 0x01, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, + 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x04, 0xfd, 0x01, + 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x04, + 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, + 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, 0x04, 0x02, + 0x02, 0x00, 0x00, 0x04, 0x03, 0x02, 0x00, 0x00, + 0x04, 0x04, 0x02, 0x00, 0x00, 0x04, 0x05, 0x02, + 0x00, 0x00, 0x04, 0x06, 0x02, 0x00, 0x00, 0x04, + 0x07, 0x02, 0x00, 0x00, 0x04, 0x08, 0x02, 0x00, + 0x00, 0x04, 0x09, 0x02, 0x00, 0x00, 0x04, 0x0a, + 0x02, 0x00, 0x00, 0x04, 0x0b, 0x02, 0x00, 0x00, + 0x04, 0x0c, 0x02, 0x00, 0x00, 0x04, 0x0d, 0x02, + 0x00, 0x00, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x04, + 0x0f, 0x02, 0x00, 0x00, 0x04, 0x10, 0x02, 0x00, + 0x00, 0x04, 0x11, 0x02, 0x00, 0x00, 0x04, 0x12, + 0x02, 0x00, 0x00, 0x04, 0x13, 0x02, 0x00, 0x00, + 0x04, 0x14, 0x02, 0x00, 0x00, 0x04, 0x15, 0x02, + 0x00, 0x00, 0x04, 0x16, 0x02, 0x00, 0x00, 0x04, + 0x17, 0x02, 0x00, 0x00, 0x04, 0x18, 0x02, 0x00, + 0x00, 0x04, 0x19, 0x02, 0x00, 0x00, 0x04, 0x1a, + 0x02, 0x00, 0x00, 0x04, 0x1b, 0x02, 0x00, 0x00, + 0x04, 0x1c, 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, + 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, + 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, + 0x21, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, + 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0x20, + 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, + 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, + 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, + 0x25, 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, + 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0x24, + 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, + 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, + 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, + 0x29, 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, + 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x28, + 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, + 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, + 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, + 0x2d, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, + 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x2c, + 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, + 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, + 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, + 0x31, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, + 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x30, + 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, + 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, + 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, + 0x35, 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, + 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x34, + 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, + 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, + 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, + 0x39, 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, + 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x38, + 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, + 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, + 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, + 0x3d, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, + 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x3c, + 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, + 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, + 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, + 0x41, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, + 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x40, + 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, + 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, + 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, + 0x45, 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, + 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0xe6, + 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, + 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, + 0x00, 0x80, 0x04, 0xe7, 0x02, 0x00, 0x00, 0x4d, + 0x49, 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, + 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x48, + 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, + 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, + 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, + 0x4d, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, + 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x4c, + 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, + 0x04, 0xe8, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, + 0x00, 0x80, 0x04, 0xe9, 0x02, 0x00, 0x00, 0x4d, + 0x51, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, + 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x50, + 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, + 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, + 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, + 0x55, 0x00, 0x00, 0x80, 0x04, 0xea, 0x02, 0x00, + 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x54, + 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, + 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, + 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, + 0x59, 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, + 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x58, + 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, + 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, + 0x00, 0x80, 0x04, 0xeb, 0x02, 0x00, 0x00, 0x4d, + 0x5d, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, + 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x5c, + 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, + 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, + 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, + 0x61, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, + 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x60, + 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, + 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, + 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, + 0x65, 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, + 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x64, + 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, + 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, + 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, + 0x69, 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, + 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x68, + 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, + 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, + 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, + 0x6d, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, + 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x6c, + 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, + 0x04, 0xec, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, + 0x00, 0x80, 0x04, 0xed, 0x02, 0x00, 0x00, 0x4d, + 0x71, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, + 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x70, + 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, + 0x04, 0xee, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, + 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, + 0x75, 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, + 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x74, + 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, + 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, + 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, + 0x79, 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, + 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0xef, + 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, + 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, + 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, + 0x7d, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, + 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0xf0, + 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, + 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, + 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, + 0x81, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, + 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x80, + 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, + 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, + 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, + 0x85, 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, + 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0xf1, + 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, + 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, + 0x00, 0x80, 0x04, 0xf2, 0x02, 0x00, 0x00, 0x4d, + 0x89, 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, + 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x88, + 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, + 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, + 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, + 0x8d, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, + 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x8c, + 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, + 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, + 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, + 0x91, 0x00, 0x00, 0x80, 0x04, 0xf3, 0x02, 0x00, + 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x90, + 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, + 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, + 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, + 0x95, 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, + 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0xf4, + 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, + 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, + 0x00, 0x80, 0x04, 0xf5, 0x02, 0x00, 0x00, 0x4d, + 0x99, 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, + 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x98, + 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, + 0x04, 0xf6, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, + 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, + 0x9d, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, + 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x9c, + 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, + 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, + 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, + 0xa1, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, + 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0xa0, + 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, + 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, + 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, + 0xa5, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, + 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0xa4, + 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, + 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, + 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, + 0xa9, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, + 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0xa8, + 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, + 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, + 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, + 0xad, 0x00, 0x00, 0x80, 0x04, 0xf7, 0x02, 0x00, + 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0xac, + 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, + 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, + 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, + 0xb1, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, + 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0xb0, + 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, + 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, + 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, + 0xb5, 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, + 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0xb4, + 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, + 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, + 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, + 0xb9, 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, + 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0xb8, + 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, + 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, + 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, + 0xbd, 0x00, 0x00, 0x80, 0x04, 0xf8, 0x02, 0x00, + 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0xbc, + 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, + 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, + 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, + 0xc1, 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, + 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0xc0, + 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, + 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, + 0x00, 0x80, 0x04, 0xf9, 0x02, 0x00, 0x00, 0x4d, + 0xc5, 0x00, 0x00, 0x80, 0x04, 0xfa, 0x02, 0x00, + 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0xc4, + 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, + 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, + 0x00, 0x80, 0x04, 0xfb, 0x02, 0x00, 0x00, 0x4d, + 0xc9, 0x00, 0x00, 0x80, 0x04, 0xfc, 0x02, 0x00, + 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, + 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, + 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, + 0xcd, 0x00, 0x00, 0x80, 0x04, 0xfd, 0x02, 0x00, + 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xcc, + 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, + 0x04, 0xcd, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, + 0x00, 0x80, 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, + 0xd1, 0x00, 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, + 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xd0, + 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, + 0x04, 0xd1, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, + 0x00, 0x80, 0x04, 0xd2, 0x02, 0x00, 0x00, 0x4d, + 0xd5, 0x00, 0x00, 0x80, 0x04, 0xd3, 0x02, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xfe, + 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, + 0x04, 0xff, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x80, 0x04, 0xd6, 0x02, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x80, 0x04, 0x00, 0x03, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xd8, + 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, + 0x04, 0xd9, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x80, 0x04, 0xda, 0x02, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x80, 0x04, 0xdb, 0x02, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xdc, + 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, + 0x04, 0xdd, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x80, 0x04, 0xde, 0x02, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x80, 0x04, 0xdf, 0x02, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xe0, + 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, + 0x04, 0x01, 0x03, 0x00, 0x00, 0x4d, 0xe4, 0x00, + 0x00, 0x80, 0x04, 0xe2, 0x02, 0x00, 0x00, 0x4d, + 0xe5, 0x00, 0x00, 0x80, 0x04, 0xe3, 0x02, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xe4, + 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, + 0x04, 0x02, 0x03, 0x00, 0x00, 0x4d, 0xe8, 0x00, + 0x00, 0x80, 0x04, 0x03, 0x03, 0x00, 0x00, 0x4d, + 0xe9, 0x00, 0x00, 0x80, 0x04, 0x04, 0x03, 0x00, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0x05, + 0x03, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xfd, 0x01, + 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x04, + 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, + 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, 0x04, 0x02, + 0x02, 0x00, 0x00, 0x04, 0x03, 0x02, 0x00, 0x00, + 0x04, 0x04, 0x02, 0x00, 0x00, 0x04, 0x05, 0x02, + 0x00, 0x00, 0x04, 0x06, 0x02, 0x00, 0x00, 0x04, + 0x07, 0x02, 0x00, 0x00, 0x04, 0x08, 0x02, 0x00, + 0x00, 0x04, 0x09, 0x02, 0x00, 0x00, 0x04, 0x0a, + 0x02, 0x00, 0x00, 0x04, 0x0b, 0x02, 0x00, 0x00, + 0x04, 0x0c, 0x02, 0x00, 0x00, 0x04, 0x0d, 0x02, + 0x00, 0x00, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x04, + 0x0f, 0x02, 0x00, 0x00, 0x04, 0x10, 0x02, 0x00, + 0x00, 0x04, 0x11, 0x02, 0x00, 0x00, 0x04, 0x12, + 0x02, 0x00, 0x00, 0x04, 0x13, 0x02, 0x00, 0x00, + 0x04, 0x14, 0x02, 0x00, 0x00, 0x04, 0x15, 0x02, + 0x00, 0x00, 0x04, 0x16, 0x02, 0x00, 0x00, 0x04, + 0x17, 0x02, 0x00, 0x00, 0x04, 0x18, 0x02, 0x00, + 0x00, 0x04, 0x19, 0x02, 0x00, 0x00, 0x04, 0x1a, + 0x02, 0x00, 0x00, 0x04, 0x1b, 0x02, 0x00, 0x00, + 0x04, 0x1c, 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, + 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, + 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, + 0x21, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, + 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0x20, + 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, + 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, + 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, + 0x25, 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, + 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0x24, + 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, + 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, + 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, + 0x29, 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, + 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x28, + 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, + 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, + 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, + 0x2d, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, + 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x2c, + 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, + 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, + 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, + 0x31, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, + 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x30, + 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, + 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, + 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, + 0x35, 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, + 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x34, + 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, + 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, + 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, + 0x39, 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, + 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x38, + 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, + 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, + 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, + 0x3d, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, + 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x3c, + 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, + 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, + 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, + 0x41, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, + 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x40, + 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, + 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, + 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, + 0x45, 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, + 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0xe6, + 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, + 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, + 0x00, 0x80, 0x04, 0xe7, 0x02, 0x00, 0x00, 0x4d, + 0x49, 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, + 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x48, + 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, + 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, + 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, + 0x4d, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, + 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x4c, + 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, + 0x04, 0xe8, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, + 0x00, 0x80, 0x04, 0xe9, 0x02, 0x00, 0x00, 0x4d, + 0x51, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, + 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x50, + 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, + 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, + 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, + 0x55, 0x00, 0x00, 0x80, 0x04, 0xea, 0x02, 0x00, + 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x54, + 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, + 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, + 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, + 0x59, 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, + 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x58, + 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, + 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, + 0x00, 0x80, 0x04, 0xeb, 0x02, 0x00, 0x00, 0x4d, + 0x5d, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, + 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x5c, + 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, + 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, + 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, + 0x61, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, + 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x60, + 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, + 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, + 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, + 0x65, 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, + 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x64, + 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, + 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, + 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, + 0x69, 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, + 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x68, + 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, + 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, + 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, + 0x6d, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, + 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x6c, + 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, + 0x04, 0xec, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, + 0x00, 0x80, 0x04, 0xed, 0x02, 0x00, 0x00, 0x4d, + 0x71, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, + 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x70, + 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, + 0x04, 0xee, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, + 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, + 0x75, 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, + 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x74, + 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, + 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, + 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, + 0x79, 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, + 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0xef, + 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, + 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, + 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, + 0x7d, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, + 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0xf0, + 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, + 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, + 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, + 0x81, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, + 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x80, + 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, + 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, + 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, + 0x85, 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, + 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0xf1, + 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, + 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, + 0x00, 0x80, 0x04, 0xf2, 0x02, 0x00, 0x00, 0x4d, + 0x89, 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, + 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x88, + 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, + 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, + 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, + 0x8d, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, + 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x8c, + 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, + 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, + 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, + 0x91, 0x00, 0x00, 0x80, 0x04, 0xf3, 0x02, 0x00, + 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x90, + 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, + 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, + 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, + 0x95, 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, + 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0xf4, + 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, + 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, + 0x00, 0x80, 0x04, 0xf5, 0x02, 0x00, 0x00, 0x4d, + 0x99, 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, + 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x98, + 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, + 0x04, 0xf6, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, + 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, + 0x9d, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, + 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x9c, + 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, + 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, + 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, + 0xa1, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, + 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0xa0, + 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, + 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, + 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, + 0xa5, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, + 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0xa4, + 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, + 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, + 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, + 0xa9, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, + 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0xa8, + 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, + 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, + 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, + 0xad, 0x00, 0x00, 0x80, 0x04, 0xf7, 0x02, 0x00, + 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0xac, + 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, + 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, + 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, + 0xb1, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, + 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0xb0, + 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, + 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, + 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, + 0xb5, 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, + 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0xb4, + 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, + 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, + 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, + 0xb9, 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, + 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0xb8, + 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, + 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, + 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, + 0xbd, 0x00, 0x00, 0x80, 0x04, 0xf8, 0x02, 0x00, + 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0xbc, + 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, + 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, + 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, + 0xc1, 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, + 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0xc0, + 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, + 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, + 0x00, 0x80, 0x04, 0xf9, 0x02, 0x00, 0x00, 0x4d, + 0xc5, 0x00, 0x00, 0x80, 0x04, 0xfa, 0x02, 0x00, + 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0xc4, + 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, + 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, + 0x00, 0x80, 0x04, 0xfb, 0x02, 0x00, 0x00, 0x4d, + 0xc9, 0x00, 0x00, 0x80, 0x04, 0xfc, 0x02, 0x00, + 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, + 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, + 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, + 0xcd, 0x00, 0x00, 0x80, 0x04, 0xfd, 0x02, 0x00, + 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xcc, + 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, + 0x04, 0xcd, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, + 0x00, 0x80, 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, + 0xd1, 0x00, 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, + 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xd0, + 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, + 0x04, 0xd1, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, + 0x00, 0x80, 0x04, 0xd2, 0x02, 0x00, 0x00, 0x4d, + 0xd5, 0x00, 0x00, 0x80, 0x04, 0xd3, 0x02, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xfe, + 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, + 0x04, 0xff, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x80, 0x04, 0xd6, 0x02, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x80, 0x04, 0x00, 0x03, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xd8, + 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, + 0x04, 0xd9, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x80, 0x04, 0xda, 0x02, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x80, 0x04, 0xdb, 0x02, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xdc, + 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, + 0x04, 0xdd, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x80, 0x04, 0xde, 0x02, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x80, 0x04, 0xdf, 0x02, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xe0, + 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, + 0x04, 0x01, 0x03, 0x00, 0x00, 0x4d, 0xe4, 0x00, + 0x00, 0x80, 0x04, 0xe2, 0x02, 0x00, 0x00, 0x4d, + 0xe5, 0x00, 0x00, 0x80, 0x04, 0xe3, 0x02, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xe4, + 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, + 0x04, 0x02, 0x03, 0x00, 0x00, 0x4d, 0xe8, 0x00, + 0x00, 0x80, 0x04, 0x03, 0x03, 0x00, 0x00, 0x4d, + 0xe9, 0x00, 0x00, 0x80, 0x04, 0x04, 0x03, 0x00, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0x05, + 0x03, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x76, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x4d, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x4d, + 0x7b, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x7d, 0xbe, 0x7e, 0xbe, + 0x7f, 0xbe, 0x80, 0xbe, 0x81, 0xbe, 0x82, 0xbe, + 0x83, 0xbe, 0x84, 0xbe, 0x85, 0xbe, 0x86, 0xbe, + 0x87, 0xbe, 0x88, 0x26, 0x0c, 0x00, 0x4d, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x06, 0x03, 0x00, 0x00, + 0x04, 0x07, 0x03, 0x00, 0x00, 0x04, 0x08, 0x03, + 0x00, 0x00, 0x04, 0x09, 0x03, 0x00, 0x00, 0x04, + 0x0a, 0x03, 0x00, 0x00, 0x04, 0x0b, 0x03, 0x00, + 0x00, 0x04, 0x0c, 0x03, 0x00, 0x00, 0x04, 0x0d, + 0x03, 0x00, 0x00, 0x04, 0x0e, 0x03, 0x00, 0x00, + 0x04, 0x0f, 0x03, 0x00, 0x00, 0x04, 0x10, 0x03, + 0x00, 0x00, 0x04, 0x11, 0x03, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x06, 0x03, 0x00, 0x00, 0x04, 0x07, 0x03, 0x00, + 0x00, 0x04, 0x08, 0x03, 0x00, 0x00, 0x04, 0x09, + 0x03, 0x00, 0x00, 0x04, 0x0a, 0x03, 0x00, 0x00, + 0x04, 0x0b, 0x03, 0x00, 0x00, 0x04, 0x0c, 0x03, + 0x00, 0x00, 0x04, 0x0d, 0x03, 0x00, 0x00, 0x04, + 0x0e, 0x03, 0x00, 0x00, 0x04, 0x0f, 0x03, 0x00, + 0x00, 0x04, 0x10, 0x03, 0x00, 0x00, 0x04, 0x11, + 0x03, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x63, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x0f, 0x00, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x12, 0x03, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x12, 0x03, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x12, 0x03, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x76, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, + 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x44, 0x01, + 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, + 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x44, + 0x01, 0x00, 0x00, 0x04, 0x44, 0x01, 0x00, 0x00, + 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, + 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x63, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x0f, + 0x00, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x13, + 0x03, 0x00, 0x00, 0x04, 0x14, 0x03, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x13, 0x03, 0x00, 0x00, 0x04, 0x14, 0x03, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x13, 0x03, 0x00, 0x00, 0x04, + 0x14, 0x03, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, + 0x01, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, + 0x4d, 0x15, 0x03, 0x00, 0x00, 0x4d, 0x16, 0x03, + 0x00, 0x00, 0x0b, 0x04, 0x17, 0x03, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x18, 0x03, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x19, 0x03, 0x00, 0x00, 0x4d, + 0x1a, 0x03, 0x00, 0x00, 0x04, 0x1b, 0x03, 0x00, + 0x00, 0x4d, 0x1c, 0x03, 0x00, 0x00, 0x4d, 0x1d, + 0x03, 0x00, 0x00, 0x0b, 0x04, 0x1e, 0x03, 0x00, + 0x00, 0x4d, 0x1a, 0x03, 0x00, 0x00, 0x04, 0x1f, + 0x03, 0x00, 0x00, 0x4d, 0x1c, 0x03, 0x00, 0x00, + 0x4d, 0x20, 0x03, 0x00, 0x00, 0x0b, 0x04, 0x21, + 0x03, 0x00, 0x00, 0x4d, 0x1a, 0x03, 0x00, 0x00, + 0x04, 0x22, 0x03, 0x00, 0x00, 0x4d, 0x1c, 0x03, + 0x00, 0x00, 0x4d, 0x23, 0x03, 0x00, 0x00, 0x4d, + 0x24, 0x03, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x25, + 0x03, 0x00, 0x00, 0x4d, 0x1d, 0x03, 0x00, 0x00, + 0x04, 0x26, 0x03, 0x00, 0x00, 0x4d, 0x27, 0x03, + 0x00, 0x00, 0x04, 0x28, 0x03, 0x00, 0x00, 0x4d, + 0x29, 0x03, 0x00, 0x00, 0x04, 0x2a, 0x03, 0x00, + 0x00, 0x4d, 0x2b, 0x03, 0x00, 0x00, 0x04, 0x2c, + 0x03, 0x00, 0x00, 0x4d, 0x2d, 0x03, 0x00, 0x00, + 0x04, 0x2e, 0x03, 0x00, 0x00, 0x4d, 0x2f, 0x03, + 0x00, 0x00, 0x04, 0x30, 0x03, 0x00, 0x00, 0x4d, + 0x31, 0x03, 0x00, 0x00, 0x4d, 0x17, 0x03, 0x00, + 0x00, 0x4d, 0x32, 0x03, 0x00, 0x00, 0x0b, 0x04, + 0x33, 0x03, 0x00, 0x00, 0x4d, 0x34, 0x03, 0x00, + 0x00, 0x04, 0x35, 0x03, 0x00, 0x00, 0x4d, 0x36, + 0x03, 0x00, 0x00, 0x04, 0x37, 0x03, 0x00, 0x00, + 0x4d, 0x38, 0x03, 0x00, 0x00, 0x04, 0x39, 0x03, + 0x00, 0x00, 0x4d, 0x3a, 0x03, 0x00, 0x00, 0x04, + 0x3b, 0x03, 0x00, 0x00, 0x4d, 0x3c, 0x03, 0x00, + 0x00, 0x04, 0x3d, 0x03, 0x00, 0x00, 0x4d, 0x3e, + 0x03, 0x00, 0x00, 0x04, 0x3f, 0x03, 0x00, 0x00, + 0x4d, 0x40, 0x03, 0x00, 0x00, 0x04, 0x41, 0x03, + 0x00, 0x00, 0x4d, 0x42, 0x03, 0x00, 0x00, 0x04, + 0x43, 0x03, 0x00, 0x00, 0x4d, 0x44, 0x03, 0x00, + 0x00, 0x04, 0x45, 0x03, 0x00, 0x00, 0x4d, 0x46, + 0x03, 0x00, 0x00, 0x04, 0x47, 0x03, 0x00, 0x00, + 0x4d, 0x48, 0x03, 0x00, 0x00, 0x04, 0x49, 0x03, + 0x00, 0x00, 0x4d, 0x4a, 0x03, 0x00, 0x00, 0x04, + 0x4b, 0x03, 0x00, 0x00, 0x4d, 0x4c, 0x03, 0x00, + 0x00, 0x04, 0x4d, 0x03, 0x00, 0x00, 0x4d, 0x4e, + 0x03, 0x00, 0x00, 0x04, 0x4f, 0x03, 0x00, 0x00, + 0x4d, 0x50, 0x03, 0x00, 0x00, 0x04, 0x51, 0x03, + 0x00, 0x00, 0x4d, 0x52, 0x03, 0x00, 0x00, 0x04, + 0x53, 0x03, 0x00, 0x00, 0x4d, 0x54, 0x03, 0x00, + 0x00, 0x04, 0x55, 0x03, 0x00, 0x00, 0x4d, 0x56, + 0x03, 0x00, 0x00, 0x04, 0x57, 0x03, 0x00, 0x00, + 0x4d, 0x58, 0x03, 0x00, 0x00, 0x04, 0x59, 0x03, + 0x00, 0x00, 0x4d, 0x5a, 0x03, 0x00, 0x00, 0x04, + 0x5b, 0x03, 0x00, 0x00, 0x4d, 0x5c, 0x03, 0x00, + 0x00, 0x04, 0x5d, 0x03, 0x00, 0x00, 0x4d, 0x5e, + 0x03, 0x00, 0x00, 0x4d, 0x5f, 0x03, 0x00, 0x00, + 0x4d, 0x45, 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, + 0xcc, 0x28, 0xc0, 0x0d, 0x01, 0x00, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, + 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_or_size = 24926; + +const uint8_t intl_or[24926] = { + 0x01, 0xd0, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x6f, 0x72, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x0e, + 0x7b, 0x31, 0x7d, 0x20, 0x7b, 0x30, 0x7d, 0x0a, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, 0x65, + 0x64, 0x69, 0x75, 0x6d, 0x08, 0x66, 0x75, 0x6c, + 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x02, 0x64, + 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, 0x08, 0x64, + 0x2c, 0x20, 0x45, 0x04, 0x45, 0x64, 0x10, 0x45, + 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x06, + 0x45, 0x68, 0x6d, 0x0e, 0x45, 0x20, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x06, 0x45, 0x48, 0x6d, 0x16, + 0x45, 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x61, 0x08, 0x45, 0x68, 0x6d, 0x73, + 0x14, 0x45, 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x08, 0x45, 0x48, 0x6d, 0x73, + 0x06, 0x47, 0x20, 0x79, 0x04, 0x47, 0x79, 0x0e, + 0x47, 0x20, 0x79, 0x20, 0x4d, 0x4d, 0x4d, 0x0a, + 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x12, 0x47, 0x20, + 0x79, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x0c, + 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x18, 0x47, + 0x20, 0x79, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x64, + 0x2c, 0x20, 0x45, 0x0e, 0x47, 0x79, 0x4d, 0x4d, + 0x4d, 0x45, 0x64, 0x06, 0x68, 0x20, 0x61, 0x02, + 0x68, 0x04, 0x48, 0x48, 0x02, 0x48, 0x0c, 0x68, + 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x04, 0x68, 0x6d, + 0x0a, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x04, 0x48, + 0x6d, 0x12, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x61, 0x06, 0x68, 0x6d, 0x73, 0x10, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x06, 0x48, 0x6d, 0x73, 0x16, 0x68, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x20, 0x76, + 0x08, 0x68, 0x6d, 0x73, 0x76, 0x14, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x76, + 0x08, 0x48, 0x6d, 0x73, 0x76, 0x10, 0x68, 0x3a, + 0x6d, 0x6d, 0x20, 0x61, 0x20, 0x76, 0x06, 0x68, + 0x6d, 0x76, 0x0e, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x20, 0x76, 0x06, 0x48, 0x6d, 0x76, 0x02, 0x4c, + 0x02, 0x4d, 0x0a, 0x4d, 0x4d, 0x2d, 0x64, 0x64, + 0x04, 0x4d, 0x64, 0x10, 0x4d, 0x4d, 0x2d, 0x64, + 0x64, 0x2c, 0x20, 0x45, 0x06, 0x4d, 0x45, 0x64, + 0x0a, 0x64, 0x64, 0x2d, 0x4d, 0x4d, 0x08, 0x4d, + 0x4d, 0x64, 0x64, 0x06, 0x4c, 0x4c, 0x4c, 0x06, + 0x4d, 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x20, + 0x64, 0x08, 0x4d, 0x4d, 0x4d, 0x64, 0x10, 0x4d, + 0x4d, 0x4d, 0x20, 0x64, 0x2c, 0x20, 0x45, 0x0a, + 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0c, 0x4d, 0x4d, + 0x4d, 0x4d, 0x20, 0x64, 0x0a, 0x4d, 0x4d, 0x4d, + 0x4d, 0x64, 0x0a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x04, 0x6d, 0x73, 0x02, 0x79, 0x08, 0x79, 0x2d, + 0x4d, 0x4d, 0x04, 0x79, 0x4d, 0x0e, 0x79, 0x2d, + 0x4d, 0x4d, 0x2d, 0x64, 0x64, 0x06, 0x79, 0x4d, + 0x64, 0x14, 0x79, 0x2d, 0x4d, 0x4d, 0x2d, 0x64, + 0x64, 0x2c, 0x20, 0x45, 0x08, 0x79, 0x4d, 0x45, + 0x64, 0x08, 0x4d, 0x4d, 0x2d, 0x79, 0x06, 0x79, + 0x4d, 0x4d, 0x0a, 0x79, 0x20, 0x4d, 0x4d, 0x4d, + 0x08, 0x79, 0x4d, 0x4d, 0x4d, 0x0e, 0x79, 0x20, + 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x0a, 0x79, 0x4d, + 0x4d, 0x4d, 0x64, 0x14, 0x79, 0x20, 0x4d, 0x4d, + 0x4d, 0x20, 0x64, 0x2c, 0x20, 0x45, 0x0c, 0x79, + 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0c, 0x4d, 0x4d, + 0x4d, 0x4d, 0x20, 0x79, 0x0a, 0x79, 0x4d, 0x4d, + 0x4d, 0x4d, 0x0a, 0x51, 0x51, 0x51, 0x20, 0x79, + 0x08, 0x79, 0x51, 0x51, 0x51, 0x0c, 0x79, 0x20, + 0x51, 0x51, 0x51, 0x51, 0x0a, 0x79, 0x51, 0x51, + 0x51, 0x51, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, + 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x73, 0x1c, 0x45, 0x45, 0x45, 0x45, + 0x2c, 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, + 0x20, 0x79, 0x14, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, + 0x45, 0x45, 0x45, 0x45, 0x64, 0x10, 0x64, 0x20, + 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0c, 0x79, + 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x0e, 0x64, 0x20, + 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0c, 0x64, 0x2d, + 0x4d, 0x2d, 0x79, 0x79, 0x16, 0x64, 0x61, 0x74, + 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, + 0x1c, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x61, 0x20, 0x7a, 0x7a, 0x7a, 0x7a, 0x12, + 0x68, 0x6d, 0x6d, 0x73, 0x73, 0x7a, 0x7a, 0x7a, + 0x7a, 0x16, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x61, 0x20, 0x7a, 0x08, 0x68, 0x6d, + 0x73, 0x7a, 0x16, 0x74, 0x69, 0x6d, 0x65, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x0e, 0x66, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x05, 0x1c, + 0x0b, 0x3e, 0x0b, 0x05, 0x2b, 0x0b, 0x47, 0x0b, + 0x05, 0x2e, 0x0b, 0x3e, 0x0b, 0x03, 0x05, 0x0b, + 0x05, 0x2e, 0x0b, 0x07, 0x0b, 0x05, 0x1c, 0x0b, + 0x41, 0x0b, 0x05, 0x38, 0x0b, 0x47, 0x0b, 0x03, + 0x28, 0x0b, 0x05, 0x21, 0x0b, 0x3f, 0x0b, 0x0c, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0f, 0x1c, + 0x0b, 0x3e, 0x0b, 0x28, 0x0b, 0x41, 0x0b, 0x06, + 0x0b, 0x30, 0x0b, 0x40, 0x0b, 0x0f, 0x2b, 0x0b, + 0x47, 0x0b, 0x2c, 0x0b, 0x43, 0x0b, 0x06, 0x0b, + 0x30, 0x0b, 0x40, 0x0b, 0x0f, 0x2e, 0x0b, 0x3e, + 0x0b, 0x30, 0x0b, 0x4d, 0x0b, 0x1a, 0x0b, 0x4d, + 0x0b, 0x1a, 0x0b, 0x0d, 0x05, 0x0b, 0x2a, 0x0b, + 0x4d, 0x0b, 0x30, 0x0b, 0x47, 0x0b, 0x32, 0x0b, + 0x07, 0x1c, 0x0b, 0x41, 0x0b, 0x28, 0x0b, 0x0b, + 0x1c, 0x0b, 0x41, 0x0b, 0x32, 0x0b, 0x3e, 0x0b, + 0x07, 0x0b, 0x0b, 0x05, 0x0b, 0x17, 0x0b, 0x37, + 0x0b, 0x4d, 0x0b, 0x1f, 0x0b, 0x15, 0x38, 0x0b, + 0x47, 0x0b, 0x2a, 0x0b, 0x4d, 0x0b, 0x1f, 0x0b, + 0x47, 0x0b, 0x2e, 0x0b, 0x4d, 0x0b, 0x2c, 0x0b, + 0x30, 0x0b, 0x0f, 0x05, 0x0b, 0x15, 0x0b, 0x4d, + 0x0b, 0x1f, 0x0b, 0x4b, 0x0b, 0x2c, 0x0b, 0x30, + 0x0b, 0x0f, 0x28, 0x0b, 0x2d, 0x0b, 0x47, 0x0b, + 0x2e, 0x0b, 0x4d, 0x0b, 0x2c, 0x0b, 0x30, 0x0b, + 0x11, 0x21, 0x0b, 0x3f, 0x0b, 0x38, 0x0b, 0x47, + 0x0b, 0x2e, 0x0b, 0x4d, 0x0b, 0x2c, 0x0b, 0x30, + 0x0b, 0x0c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x73, + 0x03, 0x30, 0x0b, 0x05, 0x38, 0x0b, 0x4b, 0x0b, + 0x03, 0x2e, 0x0b, 0x05, 0x2c, 0x0b, 0x41, 0x0b, + 0x05, 0x17, 0x0b, 0x41, 0x0b, 0x05, 0x36, 0x0b, + 0x41, 0x0b, 0x03, 0x36, 0x0b, 0x07, 0x30, 0x0b, + 0x2c, 0x0b, 0x3f, 0x0b, 0x07, 0x38, 0x0b, 0x4b, + 0x0b, 0x2e, 0x0b, 0x0b, 0x2e, 0x0b, 0x19, 0x0b, + 0x4d, 0x0b, 0x17, 0x0b, 0x33, 0x0b, 0x07, 0x2c, + 0x0b, 0x41, 0x0b, 0x27, 0x0b, 0x09, 0x17, 0x0b, + 0x41, 0x0b, 0x30, 0x0b, 0x41, 0x0b, 0x0b, 0x36, + 0x0b, 0x41, 0x0b, 0x15, 0x0b, 0x4d, 0x0b, 0x30, + 0x0b, 0x07, 0x36, 0x0b, 0x28, 0x0b, 0x3f, 0x0b, + 0x0d, 0x30, 0x0b, 0x2c, 0x0b, 0x3f, 0x0b, 0x2c, + 0x0b, 0x3e, 0x0b, 0x30, 0x0b, 0x0d, 0x38, 0x0b, + 0x4b, 0x0b, 0x2e, 0x0b, 0x2c, 0x0b, 0x3e, 0x0b, + 0x30, 0x0b, 0x11, 0x2e, 0x0b, 0x19, 0x0b, 0x4d, + 0x0b, 0x17, 0x0b, 0x33, 0x0b, 0x2c, 0x0b, 0x3e, + 0x0b, 0x30, 0x0b, 0x0d, 0x2c, 0x0b, 0x41, 0x0b, + 0x27, 0x0b, 0x2c, 0x0b, 0x3e, 0x0b, 0x30, 0x0b, + 0x0f, 0x17, 0x0b, 0x41, 0x0b, 0x30, 0x0b, 0x41, + 0x0b, 0x2c, 0x0b, 0x3e, 0x0b, 0x30, 0x0b, 0x11, + 0x36, 0x0b, 0x41, 0x0b, 0x15, 0x0b, 0x4d, 0x0b, + 0x30, 0x0b, 0x2c, 0x0b, 0x3e, 0x0b, 0x30, 0x0b, + 0x0d, 0x36, 0x0b, 0x28, 0x0b, 0x3f, 0x0b, 0x2c, + 0x0b, 0x3e, 0x0b, 0x30, 0x0b, 0x08, 0x64, 0x61, + 0x79, 0x73, 0x04, 0x42, 0x45, 0x08, 0x65, 0x72, + 0x61, 0x73, 0x04, 0x61, 0x6d, 0x04, 0x70, 0x6d, + 0x14, 0x64, 0x61, 0x79, 0x50, 0x65, 0x72, 0x69, + 0x6f, 0x64, 0x73, 0x06, 0x4d, 0x30, 0x31, 0x06, + 0x4d, 0x30, 0x32, 0x06, 0x4d, 0x30, 0x33, 0x06, + 0x4d, 0x30, 0x34, 0x06, 0x4d, 0x30, 0x35, 0x06, + 0x4d, 0x30, 0x36, 0x06, 0x4d, 0x30, 0x37, 0x06, + 0x4d, 0x30, 0x38, 0x06, 0x4d, 0x30, 0x39, 0x06, + 0x4d, 0x31, 0x30, 0x06, 0x4d, 0x31, 0x31, 0x06, + 0x4d, 0x31, 0x32, 0x08, 0x54, 0x6f, 0x75, 0x74, + 0x08, 0x42, 0x61, 0x62, 0x61, 0x0a, 0x48, 0x61, + 0x74, 0x6f, 0x72, 0x0a, 0x4b, 0x69, 0x61, 0x68, + 0x6b, 0x08, 0x54, 0x6f, 0x62, 0x61, 0x0c, 0x41, + 0x6d, 0x73, 0x68, 0x69, 0x72, 0x10, 0x42, 0x61, + 0x72, 0x61, 0x6d, 0x68, 0x61, 0x74, 0x12, 0x42, + 0x61, 0x72, 0x61, 0x6d, 0x6f, 0x75, 0x64, 0x61, + 0x0e, 0x42, 0x61, 0x73, 0x68, 0x61, 0x6e, 0x73, + 0x0a, 0x50, 0x61, 0x6f, 0x6e, 0x61, 0x08, 0x45, + 0x70, 0x65, 0x70, 0x0a, 0x4d, 0x65, 0x73, 0x72, + 0x61, 0x0a, 0x4e, 0x61, 0x73, 0x69, 0x65, 0x08, + 0x45, 0x52, 0x41, 0x30, 0x08, 0x45, 0x52, 0x41, + 0x31, 0x10, 0x4d, 0x65, 0x73, 0x6b, 0x65, 0x72, + 0x65, 0x6d, 0x0c, 0x54, 0x65, 0x6b, 0x65, 0x6d, + 0x74, 0x0a, 0x48, 0x65, 0x64, 0x61, 0x72, 0x0c, + 0x54, 0x61, 0x68, 0x73, 0x61, 0x73, 0x06, 0x54, + 0x65, 0x72, 0x0e, 0x59, 0x65, 0x6b, 0x61, 0x74, + 0x69, 0x74, 0x0e, 0x4d, 0x65, 0x67, 0x61, 0x62, + 0x69, 0x74, 0x0c, 0x4d, 0x69, 0x61, 0x7a, 0x69, + 0x61, 0x0c, 0x47, 0x65, 0x6e, 0x62, 0x6f, 0x74, + 0x08, 0x53, 0x65, 0x6e, 0x65, 0x0a, 0x48, 0x61, + 0x6d, 0x6c, 0x65, 0x0e, 0x4e, 0x65, 0x68, 0x61, + 0x73, 0x73, 0x65, 0x0e, 0x50, 0x61, 0x67, 0x75, + 0x6d, 0x65, 0x6e, 0x06, 0x42, 0x43, 0x45, 0x04, + 0x43, 0x45, 0x0c, 0x54, 0x69, 0x73, 0x68, 0x72, + 0x69, 0x0e, 0x48, 0x65, 0x73, 0x68, 0x76, 0x61, + 0x6e, 0x0c, 0x4b, 0x69, 0x73, 0x6c, 0x65, 0x76, + 0x0a, 0x54, 0x65, 0x76, 0x65, 0x74, 0x0c, 0x53, + 0x68, 0x65, 0x76, 0x61, 0x74, 0x0c, 0x41, 0x64, + 0x61, 0x72, 0x20, 0x49, 0x08, 0x41, 0x64, 0x61, + 0x72, 0x0a, 0x4e, 0x69, 0x73, 0x61, 0x6e, 0x08, + 0x49, 0x79, 0x61, 0x72, 0x0a, 0x53, 0x69, 0x76, + 0x61, 0x6e, 0x0a, 0x54, 0x61, 0x6d, 0x75, 0x7a, + 0x04, 0x41, 0x76, 0x08, 0x45, 0x6c, 0x75, 0x6c, + 0x0e, 0x41, 0x64, 0x61, 0x72, 0x20, 0x49, 0x49, + 0x04, 0x41, 0x4d, 0x0e, 0x43, 0x68, 0x61, 0x69, + 0x74, 0x72, 0x61, 0x10, 0x56, 0x61, 0x69, 0x73, + 0x61, 0x6b, 0x68, 0x61, 0x10, 0x4a, 0x79, 0x61, + 0x69, 0x73, 0x74, 0x68, 0x61, 0x0c, 0x41, 0x73, + 0x61, 0x64, 0x68, 0x61, 0x0e, 0x53, 0x72, 0x61, + 0x76, 0x61, 0x6e, 0x61, 0x0c, 0x42, 0x68, 0x61, + 0x64, 0x72, 0x61, 0x0c, 0x41, 0x73, 0x76, 0x69, + 0x6e, 0x61, 0x0e, 0x4b, 0x61, 0x72, 0x74, 0x69, + 0x6b, 0x61, 0x14, 0x41, 0x67, 0x72, 0x61, 0x68, + 0x61, 0x79, 0x61, 0x6e, 0x61, 0x0a, 0x50, 0x61, + 0x75, 0x73, 0x61, 0x0a, 0x4d, 0x61, 0x67, 0x68, + 0x61, 0x10, 0x50, 0x68, 0x61, 0x6c, 0x67, 0x75, + 0x6e, 0x61, 0x08, 0x53, 0x61, 0x6b, 0x61, 0x08, + 0x4d, 0x75, 0x68, 0x2e, 0x08, 0x53, 0x61, 0x66, + 0x2e, 0x0c, 0x52, 0x61, 0x62, 0x2e, 0x20, 0x49, + 0x0e, 0x52, 0x61, 0x62, 0x2e, 0x20, 0x49, 0x49, + 0x0c, 0x4a, 0x75, 0x6d, 0x2e, 0x20, 0x49, 0x0e, + 0x4a, 0x75, 0x6d, 0x2e, 0x20, 0x49, 0x49, 0x08, + 0x52, 0x61, 0x6a, 0x2e, 0x08, 0x53, 0x68, 0x61, + 0x2e, 0x08, 0x52, 0x61, 0x6d, 0x2e, 0x0a, 0x53, + 0x68, 0x61, 0x77, 0x2e, 0x11, 0x44, 0x00, 0x68, + 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, + 0x00, 0x51, 0x00, 0x2e, 0x00, 0x11, 0x44, 0x00, + 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, + 0x2d, 0x00, 0x48, 0x00, 0x2e, 0x00, 0x10, 0x4d, + 0x75, 0x68, 0x61, 0x72, 0x72, 0x61, 0x6d, 0x0a, + 0x53, 0x61, 0x66, 0x61, 0x72, 0x0f, 0x52, 0x00, + 0x61, 0x00, 0x62, 0x00, 0x69, 0x00, 0xbb, 0x02, + 0x20, 0x00, 0x49, 0x00, 0x11, 0x52, 0x00, 0x61, + 0x00, 0x62, 0x00, 0x69, 0x00, 0xbb, 0x02, 0x20, + 0x00, 0x49, 0x00, 0x49, 0x00, 0x10, 0x4a, 0x75, + 0x6d, 0x61, 0x64, 0x61, 0x20, 0x49, 0x12, 0x4a, + 0x75, 0x6d, 0x61, 0x64, 0x61, 0x20, 0x49, 0x49, + 0x0a, 0x52, 0x61, 0x6a, 0x61, 0x62, 0x0f, 0x53, + 0x00, 0x68, 0x00, 0x61, 0x00, 0xbb, 0x02, 0x62, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x0e, 0x52, 0x61, + 0x6d, 0x61, 0x64, 0x61, 0x6e, 0x0e, 0x53, 0x68, + 0x61, 0x77, 0x77, 0x61, 0x6c, 0x19, 0x44, 0x00, + 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, + 0x2d, 0x00, 0x51, 0x00, 0x69, 0x00, 0xbb, 0x02, + 0x64, 0x00, 0x61, 0x00, 0x68, 0x00, 0x19, 0x44, + 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, + 0x00, 0x2d, 0x00, 0x48, 0x00, 0x69, 0x00, 0x6a, + 0x00, 0x6a, 0x00, 0x61, 0x00, 0x68, 0x00, 0x04, + 0x41, 0x48, 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x36, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x36, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, + 0x68, 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x54, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x1d, 0x57, 0x00, 0x61, + 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x1f, 0x52, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x1d, 0x59, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x37, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x2d, 0x00, 0x6b, 0x00, 0x61, 0x00, + 0x6d, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x2d, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x2b, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x2d, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, 0x2a, + 0x4a, 0x69, 0x6e, 0x67, 0x6f, 0x2d, 0x6b, 0x65, + 0x69, 0x75, 0x6e, 0x20, 0x28, 0x37, 0x36, 0x37, + 0x2d, 0x37, 0x37, 0x30, 0x29, 0x1d, 0x48, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x1f, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x2d, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x2d, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x38, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x1f, 0x44, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1d, 0x4a, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x1d, 0x4b, 0x00, 0x61, 0x00, 0x6a, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1f, 0x53, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x20, 0x54, 0x65, 0x6e, 0x2d, + 0x61, 0x6e, 0x20, 0x28, 0x38, 0x35, 0x37, 0x2d, + 0x38, 0x35, 0x39, 0x29, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x74, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x1f, 0x45, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1b, 0x4c, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x1d, 0x41, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x1f, 0x45, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x1d, 0x45, 0x00, 0x69, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, + 0x69, 0x00, 0x73, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x39, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4a, + 0x00, 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x35, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, 0x4a, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x29, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4c, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x4a, + 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, 0x24, + 0x54, 0x65, 0x6e, 0x2d, 0x65, 0x69, 0x20, 0x28, + 0x31, 0x31, 0x31, 0x30, 0x2d, 0x31, 0x31, 0x31, + 0x33, 0x29, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x44, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x48, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x48, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x27, 0x45, 0x00, 0x69, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x68, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x6d, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x61, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x69, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x59, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x21, 0x4a, 0x00, 0x75, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x29, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x29, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, + 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x41, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, + 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x29, 0x00, 0x27, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x75, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x29, 0x52, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x4e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x4c, 0x01, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6d, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, + 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, + 0x4c, 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x74, + 0x00, 0x73, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x27, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x21, 0x4c, 0x01, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, + 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x21, 0x4d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, + 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x72, 0x00, + 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4d, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, 0x45, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, + 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x48, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x65, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, + 0x41, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x02, 0x54, 0x02, + 0x53, 0x0a, 0x4d, 0x65, 0x69, 0x6a, 0x69, 0x0d, + 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x0b, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x0c, + 0x48, 0x65, 0x69, 0x73, 0x65, 0x69, 0x12, 0x46, + 0x61, 0x72, 0x76, 0x61, 0x72, 0x64, 0x69, 0x6e, + 0x16, 0x4f, 0x72, 0x64, 0x69, 0x62, 0x65, 0x68, + 0x65, 0x73, 0x68, 0x74, 0x0e, 0x4b, 0x68, 0x6f, + 0x72, 0x64, 0x61, 0x64, 0x06, 0x54, 0x69, 0x72, + 0x0c, 0x4d, 0x6f, 0x72, 0x64, 0x61, 0x64, 0x12, + 0x53, 0x68, 0x61, 0x68, 0x72, 0x69, 0x76, 0x61, + 0x72, 0x08, 0x4d, 0x65, 0x68, 0x72, 0x08, 0x41, + 0x62, 0x61, 0x6e, 0x08, 0x41, 0x7a, 0x61, 0x72, + 0x06, 0x44, 0x65, 0x79, 0x0c, 0x42, 0x61, 0x68, + 0x6d, 0x61, 0x6e, 0x0c, 0x45, 0x73, 0x66, 0x61, + 0x6e, 0x64, 0x04, 0x41, 0x50, 0x1a, 0x42, 0x65, + 0x66, 0x6f, 0x72, 0x65, 0x20, 0x52, 0x2e, 0x4f, + 0x2e, 0x43, 0x2e, 0x0c, 0x52, 0x2e, 0x4f, 0x2e, + 0x43, 0x2e, 0x12, 0x63, 0x61, 0x6c, 0x65, 0x6e, + 0x64, 0x61, 0x72, 0x73, 0x08, 0x64, 0x61, 0x74, + 0x65, 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, + 0x75, 0x10, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0x1e, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, + 0x72, 0x6e, 0x26, 0x7b, 0x6d, 0x69, 0x6e, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x6e, + 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, + 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x0e, 0x64, + 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x26, 0x7b, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, + 0x7d, 0xa0, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0x3c, 0x7b, 0x6d, 0x69, 0x6e, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, + 0xa0, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x79, 0x2a, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0x7b, 0x70, 0x65, 0x72, 0x63, + 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, + 0x40, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0x7b, 0x70, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, + 0x7d, 0x0e, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, + 0x74, 0x24, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, + 0x61, 0x72, 0x79, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x53, 0x69, 0x7a, 0x65, 0x10, 0x70, 0x61, 0x74, + 0x74, 0x65, 0x72, 0x6e, 0x73, 0x02, 0x2e, 0x02, + 0x2c, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x06, + 0x4e, 0x61, 0x4e, 0x06, 0x6e, 0x61, 0x6e, 0x02, + 0x2b, 0x10, 0x70, 0x6c, 0x75, 0x73, 0x53, 0x69, + 0x67, 0x6e, 0x02, 0x2d, 0x12, 0x6d, 0x69, 0x6e, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, 0x25, + 0x16, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, + 0x53, 0x69, 0x67, 0x6e, 0x03, 0x1e, 0x22, 0x10, + 0x69, 0x6e, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, + 0x08, 0x6f, 0x72, 0x79, 0x61, 0x0e, 0x73, 0x79, + 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x04, 0x41, 0x24, + 0x06, 0x41, 0x55, 0x44, 0x04, 0x52, 0x24, 0x06, + 0x42, 0x52, 0x4c, 0x06, 0x43, 0x41, 0x24, 0x06, + 0x43, 0x41, 0x44, 0x06, 0x43, 0x4e, 0xa5, 0x06, + 0x43, 0x4e, 0x59, 0x03, 0xac, 0x20, 0x06, 0x45, + 0x55, 0x52, 0x02, 0xa3, 0x06, 0x47, 0x42, 0x50, + 0x06, 0x48, 0x4b, 0x24, 0x06, 0x48, 0x4b, 0x44, + 0x03, 0xaa, 0x20, 0x06, 0x49, 0x4c, 0x53, 0x03, + 0xb9, 0x20, 0x06, 0x49, 0x4e, 0x52, 0x06, 0x4a, + 0x50, 0xa5, 0x06, 0x4a, 0x50, 0x59, 0x03, 0xa9, + 0x20, 0x06, 0x4b, 0x52, 0x57, 0x06, 0x4d, 0x58, + 0x24, 0x06, 0x4d, 0x58, 0x4e, 0x06, 0x4e, 0x5a, + 0x24, 0x06, 0x4e, 0x5a, 0x44, 0x06, 0x4e, 0x54, + 0x24, 0x06, 0x54, 0x57, 0x44, 0x06, 0x55, 0x53, + 0x24, 0x06, 0x55, 0x53, 0x44, 0x03, 0xab, 0x20, + 0x06, 0x56, 0x4e, 0x44, 0x08, 0x46, 0x43, 0x46, + 0x41, 0x06, 0x58, 0x41, 0x46, 0x06, 0x45, 0x43, + 0x24, 0x06, 0x58, 0x43, 0x44, 0x06, 0x43, 0x46, + 0x41, 0x06, 0x58, 0x4f, 0x46, 0x08, 0x43, 0x46, + 0x50, 0x46, 0x06, 0x58, 0x50, 0x46, 0x14, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, + 0x73, 0x52, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, + 0x6e, 0x74, 0x6c, 0x2f, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, + 0x6a, 0x73, 0x6f, 0x6e, 0x70, 0x2f, 0x6f, 0x72, + 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, + 0x01, 0x00, 0x01, 0x00, 0x27, 0x00, 0x89, 0x01, + 0xba, 0x6b, 0x01, 0xa0, 0x01, 0x00, 0x00, 0x00, + 0x39, 0xd0, 0x00, 0x00, 0x00, 0x43, 0xd1, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd2, 0x00, 0x00, 0x00, + 0x4d, 0xd3, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd4, + 0x00, 0x00, 0x00, 0x04, 0xd5, 0x00, 0x00, 0x00, + 0x04, 0xd6, 0x00, 0x00, 0x00, 0x04, 0xd7, 0x00, + 0x00, 0x00, 0x04, 0xd8, 0x00, 0x00, 0x00, 0x04, + 0xd9, 0x00, 0x00, 0x00, 0x04, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xdb, 0x00, 0x00, 0x00, 0x04, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, + 0x04, 0xde, 0x00, 0x00, 0x00, 0x04, 0xdf, 0x00, + 0x00, 0x00, 0x04, 0xe0, 0x00, 0x00, 0x00, 0x04, + 0xe1, 0x00, 0x00, 0x00, 0x04, 0xe2, 0x00, 0x00, + 0x00, 0x26, 0x0f, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x00, 0x0a, 0x4d, 0xe4, 0x00, 0x00, 0x00, 0x0a, + 0x4d, 0xe5, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, + 0x00, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe8, 0x00, + 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, + 0xe9, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0xed, + 0x00, 0x00, 0x00, 0x04, 0xee, 0x00, 0x00, 0x00, + 0x4d, 0xef, 0x00, 0x00, 0x00, 0x04, 0xf0, 0x00, + 0x00, 0x00, 0x4d, 0xf1, 0x00, 0x00, 0x00, 0x04, + 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xf3, 0x00, 0x00, + 0x00, 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xf5, + 0x00, 0x00, 0x00, 0x04, 0xf6, 0x00, 0x00, 0x00, + 0x4d, 0xf7, 0x00, 0x00, 0x00, 0x04, 0xf8, 0x00, + 0x00, 0x00, 0x4d, 0xf9, 0x00, 0x00, 0x00, 0x04, + 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xfb, 0x00, 0x00, + 0x00, 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xfd, + 0x00, 0x00, 0x00, 0x04, 0xfe, 0x00, 0x00, 0x00, + 0x4d, 0xff, 0x00, 0x00, 0x00, 0x04, 0x00, 0x01, + 0x00, 0x00, 0x4d, 0x01, 0x01, 0x00, 0x00, 0x04, + 0x02, 0x01, 0x00, 0x00, 0x4d, 0x03, 0x01, 0x00, + 0x00, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0x05, + 0x01, 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, 0x00, + 0x4d, 0x07, 0x01, 0x00, 0x00, 0x04, 0x08, 0x01, + 0x00, 0x00, 0x4d, 0x09, 0x01, 0x00, 0x00, 0x04, + 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x0b, 0x01, 0x00, + 0x00, 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, 0x0d, + 0x01, 0x00, 0x00, 0x04, 0x0e, 0x01, 0x00, 0x00, + 0x4d, 0x0f, 0x01, 0x00, 0x00, 0x04, 0x10, 0x01, + 0x00, 0x00, 0x4d, 0x11, 0x01, 0x00, 0x00, 0x04, + 0x12, 0x01, 0x00, 0x00, 0x4d, 0x13, 0x01, 0x00, + 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, 0x15, + 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x4d, 0x17, 0x01, 0x00, 0x00, 0x04, 0x18, 0x01, + 0x00, 0x00, 0x4d, 0x19, 0x01, 0x00, 0x00, 0x04, + 0x1a, 0x01, 0x00, 0x00, 0x4d, 0x1b, 0x01, 0x00, + 0x00, 0x04, 0x1c, 0x01, 0x00, 0x00, 0x4d, 0x1d, + 0x01, 0x00, 0x00, 0x04, 0x1e, 0x01, 0x00, 0x00, + 0x4d, 0x1f, 0x01, 0x00, 0x00, 0x04, 0x20, 0x01, + 0x00, 0x00, 0x4d, 0x21, 0x01, 0x00, 0x00, 0x04, + 0x22, 0x01, 0x00, 0x00, 0x4d, 0x23, 0x01, 0x00, + 0x00, 0x04, 0x24, 0x01, 0x00, 0x00, 0x4d, 0x25, + 0x01, 0x00, 0x00, 0x04, 0x26, 0x01, 0x00, 0x00, + 0x4d, 0x26, 0x01, 0x00, 0x00, 0x04, 0x27, 0x01, + 0x00, 0x00, 0x4d, 0x28, 0x01, 0x00, 0x00, 0x04, + 0x29, 0x01, 0x00, 0x00, 0x4d, 0x2a, 0x01, 0x00, + 0x00, 0x04, 0x2b, 0x01, 0x00, 0x00, 0x4d, 0x2c, + 0x01, 0x00, 0x00, 0x04, 0x2d, 0x01, 0x00, 0x00, + 0x4d, 0x2e, 0x01, 0x00, 0x00, 0x04, 0x2f, 0x01, + 0x00, 0x00, 0x4d, 0x30, 0x01, 0x00, 0x00, 0x04, + 0x31, 0x01, 0x00, 0x00, 0x4d, 0x32, 0x01, 0x00, + 0x00, 0x04, 0x33, 0x01, 0x00, 0x00, 0x4d, 0x34, + 0x01, 0x00, 0x00, 0x04, 0x35, 0x01, 0x00, 0x00, + 0x4d, 0x36, 0x01, 0x00, 0x00, 0x04, 0x37, 0x01, + 0x00, 0x00, 0x4d, 0x38, 0x01, 0x00, 0x00, 0x04, + 0x39, 0x01, 0x00, 0x00, 0x4d, 0x3a, 0x01, 0x00, + 0x00, 0x4d, 0x3b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x3c, 0x01, 0x00, 0x00, 0x4d, 0x3d, 0x01, 0x00, + 0x00, 0x04, 0x3e, 0x01, 0x00, 0x00, 0x4d, 0x3f, + 0x01, 0x00, 0x00, 0x04, 0x40, 0x01, 0x00, 0x00, + 0x4d, 0x32, 0x01, 0x00, 0x00, 0x04, 0x41, 0x01, + 0x00, 0x00, 0x4d, 0x2a, 0x01, 0x00, 0x00, 0x4d, + 0x42, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x43, 0x01, + 0x00, 0x00, 0x4d, 0x44, 0x01, 0x00, 0x00, 0x04, + 0x45, 0x01, 0x00, 0x00, 0x4d, 0x46, 0x01, 0x00, + 0x00, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, 0x09, + 0x01, 0x00, 0x00, 0x04, 0x04, 0x01, 0x00, 0x00, + 0x4d, 0x05, 0x01, 0x00, 0x00, 0x4d, 0x47, 0x01, + 0x00, 0x00, 0x4d, 0x48, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x0b, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x5e, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x4d, + 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, + 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x00, 0xbe, 0x01, 0xbe, 0x02, 0xbe, 0x03, + 0xbe, 0x04, 0xbe, 0x05, 0xbe, 0x06, 0xbe, 0x07, + 0xbe, 0x08, 0xbe, 0x09, 0xbe, 0x0a, 0xbe, 0x0b, + 0x26, 0x0c, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, + 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, + 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, + 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x5e, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, + 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, 0xd6, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x0c, 0xbe, + 0x0d, 0xbe, 0x0e, 0xbe, 0x0f, 0xbe, 0x10, 0xbe, + 0x11, 0xbe, 0x12, 0xbe, 0x13, 0xbe, 0x14, 0xbe, + 0x15, 0xbe, 0x16, 0xbe, 0x17, 0xbe, 0x18, 0x26, + 0x0d, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, + 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, + 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, + 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, + 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, + 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, + 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, + 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, + 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, + 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, + 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, + 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, + 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x5e, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x93, + 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, + 0x94, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, + 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x19, 0xbe, 0x1a, 0xbe, 0x1b, + 0xbe, 0x1c, 0xbe, 0x1d, 0xbe, 0x1e, 0xbe, 0x1f, + 0xbe, 0x20, 0xbe, 0x21, 0xbe, 0x22, 0xbe, 0x23, + 0xbe, 0x24, 0x26, 0x0c, 0x00, 0x4d, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, + 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, + 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, + 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x5e, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x78, + 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x25, 0xbe, 0x26, 0xbe, 0x27, 0xbe, 0x28, 0xbe, + 0x29, 0xbe, 0x2a, 0xbe, 0x2b, 0xbe, 0x2c, 0xbe, + 0x2d, 0xbe, 0x2e, 0xbe, 0x2f, 0xbe, 0x30, 0xbe, + 0x31, 0x26, 0x0d, 0x00, 0x4d, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, + 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, + 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, + 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, + 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, + 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, + 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, + 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, + 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, + 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, + 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, + 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, + 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, + 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, + 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x5e, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, + 0x94, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, + 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x76, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, + 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x32, 0xbe, 0x33, + 0xbe, 0x34, 0xbe, 0x35, 0xbe, 0x36, 0xbe, 0x37, + 0xbe, 0x38, 0xbe, 0x39, 0xbe, 0x3a, 0xbe, 0x3b, + 0xbe, 0x3c, 0xbe, 0x3d, 0xbe, 0x3e, 0x26, 0x0d, + 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, 0x95, + 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, + 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, + 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, + 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, + 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, + 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, + 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, + 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, + 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, + 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, + 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, + 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, + 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, + 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, + 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x5e, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x93, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x93, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, + 0x01, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x3f, 0xbe, 0x40, 0xbe, 0x41, + 0xbe, 0x42, 0xbe, 0x43, 0xbe, 0x44, 0xbe, 0x45, + 0xbe, 0x46, 0xbe, 0x47, 0xbe, 0x48, 0xbe, 0x49, + 0xbe, 0x4a, 0x26, 0x0c, 0x00, 0x4d, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, + 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, + 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, + 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x5e, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, + 0x04, 0x94, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x76, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x4d, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x4d, + 0x79, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x5e, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x74, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xa2, 0x01, 0x00, + 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa2, + 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, + 0x26, 0x04, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, + 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, + 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, + 0xa3, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, + 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa2, + 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, + 0x26, 0x04, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, + 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x4b, + 0xbe, 0x4c, 0xbe, 0x4d, 0xbe, 0x4e, 0xbe, 0x4f, + 0xbe, 0x50, 0xbe, 0x51, 0xbe, 0x52, 0xbe, 0x53, + 0xbe, 0x54, 0xbe, 0x55, 0xbe, 0x56, 0xbe, 0x57, + 0xbe, 0x58, 0x26, 0x0e, 0x00, 0x4d, 0x52, 0x01, + 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, + 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, + 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, + 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, + 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, + 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, + 0xad, 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, + 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, + 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, + 0x26, 0x0e, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, + 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, + 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, + 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, + 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, + 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, + 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, + 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, + 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, 0x26, 0x0e, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x5e, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xb2, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, + 0x04, 0xb2, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xb2, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x4d, + 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x59, 0xbe, 0x5a, 0xbe, 0x5b, 0xbe, 0x5c, + 0xbe, 0x5d, 0xbe, 0x5e, 0xbe, 0x5f, 0xbe, 0x60, + 0xbe, 0x61, 0xbe, 0x62, 0xbe, 0x63, 0xbe, 0x64, + 0x26, 0x0c, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, + 0x04, 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, + 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, 0x04, + 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, + 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, 0x04, 0xb9, + 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, + 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, 0x01, + 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, 0x04, + 0xbe, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, + 0x00, 0x04, 0xb4, 0x01, 0x00, 0x00, 0x04, 0xb5, + 0x01, 0x00, 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, + 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, + 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, 0x04, + 0xba, 0x01, 0x00, 0x00, 0x04, 0xbb, 0x01, 0x00, + 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, 0x04, 0xbd, + 0x01, 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x5e, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xbf, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x52, 0x01, + 0x00, 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xbf, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, + 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x65, 0xbe, 0x66, 0xbe, 0x67, + 0xbe, 0x68, 0xbe, 0x69, 0xbe, 0x6a, 0xbe, 0x6b, + 0xbe, 0x6c, 0xbe, 0x6d, 0xbe, 0x6e, 0xbe, 0x6f, + 0xbe, 0x70, 0x26, 0x0c, 0x00, 0x4d, 0x52, 0x01, + 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, 0x04, + 0xc1, 0x01, 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, + 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, 0x04, 0xc4, + 0x01, 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, + 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, + 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, + 0xc9, 0x01, 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, + 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xcc, + 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, + 0x04, 0xce, 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, + 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, + 0xd1, 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, + 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, + 0x01, 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, + 0x04, 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x5e, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xd8, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x52, 0x01, 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x76, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, + 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x71, 0xbe, 0x72, + 0xbe, 0x73, 0xbe, 0x74, 0xbe, 0x75, 0xbe, 0x76, + 0xbe, 0x77, 0xbe, 0x78, 0xbe, 0x79, 0xbe, 0x7a, + 0xbe, 0x7b, 0xbe, 0x7c, 0x26, 0x0c, 0x00, 0x4d, + 0x52, 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, + 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, 0x04, 0xc2, + 0x01, 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, + 0x04, 0xc4, 0x01, 0x00, 0x00, 0x04, 0xc5, 0x01, + 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, + 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, + 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, 0x04, 0xca, + 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, + 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, 0x04, + 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, + 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, 0x04, 0xd2, + 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, + 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, 0xd5, 0x01, + 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, 0x04, + 0xd7, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x5e, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xd8, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, 0xd8, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, + 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x49, + 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x5e, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, + 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, + 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, + 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, + 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, + 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, + 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, + 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, + 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, + 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, + 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, + 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, + 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, + 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, + 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, + 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, + 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, + 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, + 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, + 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x26, + 0x20, 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, 0x4d, + 0x20, 0x00, 0x00, 0x80, 0x04, 0xfa, 0x01, 0x00, + 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0xfb, + 0x01, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, + 0x04, 0xfc, 0x01, 0x00, 0x00, 0x4d, 0x23, 0x00, + 0x00, 0x80, 0x04, 0xfd, 0x01, 0x00, 0x00, 0x4d, + 0x24, 0x00, 0x00, 0x80, 0x04, 0xfe, 0x01, 0x00, + 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0xff, + 0x01, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, + 0x04, 0x00, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, + 0x00, 0x80, 0x04, 0x01, 0x02, 0x00, 0x00, 0x4d, + 0x28, 0x00, 0x00, 0x80, 0x04, 0x02, 0x02, 0x00, + 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0x03, + 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, + 0x04, 0x04, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, + 0x00, 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, 0x4d, + 0x2c, 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, 0x00, + 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0x07, + 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, + 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, + 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, + 0x30, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, + 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0x0b, + 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, + 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, + 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, + 0x34, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, + 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0x0f, + 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, + 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, + 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, + 0x38, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, + 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0x13, + 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, + 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, + 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, + 0x3c, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, + 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x17, + 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, + 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, + 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, + 0x40, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, + 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x1b, + 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, + 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, + 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, + 0x44, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, + 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x1f, + 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, + 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, + 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, + 0x48, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, + 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x23, + 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, + 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, + 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, + 0x4c, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, + 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x27, + 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, + 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, + 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, + 0x50, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, + 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x2b, + 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, + 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, + 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, + 0x54, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, + 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x2f, + 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, + 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, + 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, + 0x58, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, + 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x33, + 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, + 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, + 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, + 0x5c, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, + 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x37, + 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, + 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, + 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, + 0x60, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, + 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x3b, + 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, + 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, + 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, + 0x64, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, + 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x3f, + 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, + 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, + 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, + 0x68, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, + 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x43, + 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, + 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, + 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, + 0x6c, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, + 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x47, + 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, + 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, + 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, + 0x70, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, + 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x4b, + 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, + 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, + 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, + 0x74, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, + 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x4f, + 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, + 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, + 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, + 0x78, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, + 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x53, + 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, + 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, + 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, + 0x7c, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, + 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x57, + 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, + 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, + 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, + 0x80, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, + 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x5b, + 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, + 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, + 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, + 0x84, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, + 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x5f, + 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, + 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, + 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, + 0x88, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, + 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x63, + 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, + 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, + 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, + 0x8c, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, + 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x67, + 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, + 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, + 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, + 0x90, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, + 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x6b, + 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, + 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, + 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, + 0x94, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, + 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x6f, + 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, + 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, + 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, + 0x98, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, + 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x73, + 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, + 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, + 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, + 0x9c, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, + 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x77, + 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, + 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, + 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, + 0xa0, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, + 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x7b, + 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, + 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, + 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, + 0xa4, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, + 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x7f, + 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, + 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, + 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, + 0xa8, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, + 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x83, + 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, + 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, + 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, + 0xac, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, + 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0x87, + 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, + 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, + 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, + 0xb0, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, + 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0x8b, + 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, + 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, + 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, + 0xb4, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, + 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0x8f, + 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, + 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, + 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, + 0xb8, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, + 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0x93, + 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, + 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, + 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, + 0xbc, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, + 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0x97, + 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, + 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, + 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, + 0xc0, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, + 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0x9b, + 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, + 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, + 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, + 0xc4, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, + 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0x9f, + 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, + 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, + 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, + 0xc8, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, + 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0xa3, + 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, + 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, + 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, + 0xcc, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, + 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0xa7, + 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, + 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, + 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, + 0xd0, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, + 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0xab, + 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, + 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, + 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, + 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0xaf, + 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, + 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, + 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0xb3, + 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, + 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xb7, + 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, + 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xbb, + 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, + 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, + 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, + 0xe4, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, + 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0xbf, + 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, + 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x80, 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, + 0xe8, 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, + 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0xc2, + 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, + 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x80, 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, + 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, + 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, + 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, + 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, + 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, + 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, + 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, + 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, + 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, + 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, + 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, + 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, + 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, + 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, + 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, + 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, + 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, + 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, + 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, + 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x26, + 0x20, 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, 0x4d, + 0x20, 0x00, 0x00, 0x80, 0x04, 0xfa, 0x01, 0x00, + 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0xfb, + 0x01, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, + 0x04, 0xfc, 0x01, 0x00, 0x00, 0x4d, 0x23, 0x00, + 0x00, 0x80, 0x04, 0xfd, 0x01, 0x00, 0x00, 0x4d, + 0x24, 0x00, 0x00, 0x80, 0x04, 0xfe, 0x01, 0x00, + 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0xff, + 0x01, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, + 0x04, 0x00, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, + 0x00, 0x80, 0x04, 0x01, 0x02, 0x00, 0x00, 0x4d, + 0x28, 0x00, 0x00, 0x80, 0x04, 0x02, 0x02, 0x00, + 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0x03, + 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, + 0x04, 0x04, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, + 0x00, 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, 0x4d, + 0x2c, 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, 0x00, + 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0x07, + 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, + 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, + 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, + 0x30, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, + 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0x0b, + 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, + 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, + 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, + 0x34, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, + 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0x0f, + 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, + 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, + 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, + 0x38, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, + 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0x13, + 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, + 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, + 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, + 0x3c, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, + 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x17, + 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, + 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, + 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, + 0x40, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, + 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x1b, + 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, + 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, + 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, + 0x44, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, + 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x1f, + 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, + 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, + 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, + 0x48, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, + 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x23, + 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, + 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, + 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, + 0x4c, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, + 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x27, + 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, + 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, + 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, + 0x50, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, + 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x2b, + 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, + 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, + 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, + 0x54, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, + 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x2f, + 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, + 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, + 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, + 0x58, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, + 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x33, + 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, + 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, + 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, + 0x5c, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, + 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x37, + 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, + 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, + 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, + 0x60, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, + 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x3b, + 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, + 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, + 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, + 0x64, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, + 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x3f, + 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, + 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, + 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, + 0x68, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, + 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x43, + 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, + 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, + 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, + 0x6c, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, + 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x47, + 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, + 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, + 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, + 0x70, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, + 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x4b, + 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, + 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, + 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, + 0x74, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, + 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x4f, + 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, + 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, + 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, + 0x78, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, + 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x53, + 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, + 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, + 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, + 0x7c, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, + 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x57, + 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, + 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, + 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, + 0x80, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, + 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x5b, + 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, + 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, + 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, + 0x84, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, + 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x5f, + 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, + 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, + 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, + 0x88, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, + 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x63, + 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, + 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, + 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, + 0x8c, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, + 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x67, + 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, + 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, + 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, + 0x90, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, + 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x6b, + 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, + 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, + 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, + 0x94, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, + 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x6f, + 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, + 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, + 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, + 0x98, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, + 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x73, + 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, + 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, + 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, + 0x9c, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, + 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x77, + 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, + 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, + 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, + 0xa0, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, + 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x7b, + 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, + 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, + 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, + 0xa4, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, + 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x7f, + 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, + 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, + 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, + 0xa8, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, + 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x83, + 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, + 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, + 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, + 0xac, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, + 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0x87, + 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, + 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, + 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, + 0xb0, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, + 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0x8b, + 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, + 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, + 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, + 0xb4, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, + 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0x8f, + 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, + 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, + 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, + 0xb8, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, + 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0x93, + 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, + 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, + 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, + 0xbc, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, + 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0x97, + 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, + 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, + 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, + 0xc0, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, + 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0x9b, + 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, + 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, + 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, + 0xc4, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, + 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0x9f, + 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, + 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, + 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, + 0xc8, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, + 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0xa3, + 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, + 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, + 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, + 0xcc, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, + 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0xa7, + 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, + 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, + 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, + 0xd0, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, + 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0xab, + 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, + 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, + 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, + 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0xaf, + 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, + 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, + 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0xb3, + 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, + 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xb7, + 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, + 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xbb, + 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, + 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, + 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, + 0xe4, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, + 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0xbf, + 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, + 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, + 0xe8, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, + 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0xc5, + 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, + 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x80, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, + 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, + 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, + 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, + 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, + 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, + 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, + 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, + 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, + 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, + 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, + 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, + 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, + 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, + 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, + 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, + 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, + 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, + 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, + 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x26, + 0x20, 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, 0x4d, + 0x20, 0x00, 0x00, 0x80, 0x04, 0xfa, 0x01, 0x00, + 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0xfb, + 0x01, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, + 0x04, 0xfc, 0x01, 0x00, 0x00, 0x4d, 0x23, 0x00, + 0x00, 0x80, 0x04, 0xfd, 0x01, 0x00, 0x00, 0x4d, + 0x24, 0x00, 0x00, 0x80, 0x04, 0xfe, 0x01, 0x00, + 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0xff, + 0x01, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, + 0x04, 0x00, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, + 0x00, 0x80, 0x04, 0x01, 0x02, 0x00, 0x00, 0x4d, + 0x28, 0x00, 0x00, 0x80, 0x04, 0x02, 0x02, 0x00, + 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0x03, + 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, + 0x04, 0x04, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, + 0x00, 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, 0x4d, + 0x2c, 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, 0x00, + 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0x07, + 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, + 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, + 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, + 0x30, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, + 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0x0b, + 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, + 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, + 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, + 0x34, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, + 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0x0f, + 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, + 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, + 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, + 0x38, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, + 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0x13, + 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, + 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, + 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, + 0x3c, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, + 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x17, + 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, + 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, + 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, + 0x40, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, + 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x1b, + 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, + 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, + 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, + 0x44, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, + 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x1f, + 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, + 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, + 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, + 0x48, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, + 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x23, + 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, + 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, + 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, + 0x4c, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, + 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x27, + 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, + 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, + 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, + 0x50, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, + 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x2b, + 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, + 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, + 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, + 0x54, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, + 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x2f, + 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, + 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, + 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, + 0x58, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, + 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x33, + 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, + 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, + 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, + 0x5c, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, + 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x37, + 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, + 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, + 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, + 0x60, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, + 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x3b, + 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, + 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, + 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, + 0x64, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, + 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x3f, + 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, + 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, + 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, + 0x68, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, + 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x43, + 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, + 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, + 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, + 0x6c, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, + 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x47, + 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, + 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, + 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, + 0x70, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, + 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x4b, + 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, + 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, + 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, + 0x74, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, + 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x4f, + 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, + 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, + 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, + 0x78, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, + 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x53, + 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, + 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, + 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, + 0x7c, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, + 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x57, + 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, + 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, + 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, + 0x80, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, + 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x5b, + 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, + 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, + 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, + 0x84, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, + 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x5f, + 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, + 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, + 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, + 0x88, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, + 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x63, + 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, + 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, + 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, + 0x8c, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, + 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x67, + 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, + 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, + 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, + 0x90, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, + 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x6b, + 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, + 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, + 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, + 0x94, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, + 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x6f, + 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, + 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, + 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, + 0x98, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, + 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x73, + 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, + 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, + 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, + 0x9c, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, + 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x77, + 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, + 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, + 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, + 0xa0, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, + 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x7b, + 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, + 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, + 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, + 0xa4, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, + 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x7f, + 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, + 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, + 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, + 0xa8, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, + 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x83, + 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, + 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, + 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, + 0xac, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, + 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0x87, + 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, + 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, + 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, + 0xb0, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, + 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0x8b, + 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, + 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, + 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, + 0xb4, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, + 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0x8f, + 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, + 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, + 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, + 0xb8, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, + 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0x93, + 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, + 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, + 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, + 0xbc, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, + 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0x97, + 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, + 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, + 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, + 0xc0, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, + 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0x9b, + 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, + 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, + 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, + 0xc4, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, + 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0x9f, + 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, + 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, + 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, + 0xc8, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, + 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0xa3, + 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, + 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, + 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, + 0xcc, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, + 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0xa7, + 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, + 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, + 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, + 0xd0, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, + 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0xab, + 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, + 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, + 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, + 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0xaf, + 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, + 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, + 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0xb3, + 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, + 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xb7, + 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, + 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xbb, + 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, + 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, + 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, + 0xe4, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, + 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0xbf, + 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, + 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, + 0xe8, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, + 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0xc5, + 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, + 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x80, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x76, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, + 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x7d, 0xbe, + 0x7e, 0xbe, 0x7f, 0xbe, 0x80, 0xbe, 0x81, 0xbe, + 0x82, 0xbe, 0x83, 0xbe, 0x84, 0xbe, 0x85, 0xbe, + 0x86, 0xbe, 0x87, 0xbe, 0x88, 0x26, 0x0c, 0x00, + 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, 0xc7, 0x02, + 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x04, + 0xc9, 0x02, 0x00, 0x00, 0x04, 0xca, 0x02, 0x00, + 0x00, 0x04, 0xcb, 0x02, 0x00, 0x00, 0x04, 0xcc, + 0x02, 0x00, 0x00, 0x04, 0xcd, 0x02, 0x00, 0x00, + 0x04, 0xce, 0x02, 0x00, 0x00, 0x04, 0xcf, 0x02, + 0x00, 0x00, 0x04, 0xd0, 0x02, 0x00, 0x00, 0x04, + 0xd1, 0x02, 0x00, 0x00, 0x04, 0xd2, 0x02, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xc7, 0x02, 0x00, 0x00, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x04, 0xc9, 0x02, 0x00, 0x00, + 0x04, 0xca, 0x02, 0x00, 0x00, 0x04, 0xcb, 0x02, + 0x00, 0x00, 0x04, 0xcc, 0x02, 0x00, 0x00, 0x04, + 0xcd, 0x02, 0x00, 0x00, 0x04, 0xce, 0x02, 0x00, + 0x00, 0x04, 0xcf, 0x02, 0x00, 0x00, 0x04, 0xd0, + 0x02, 0x00, 0x00, 0x04, 0xd1, 0x02, 0x00, 0x00, + 0x04, 0xd2, 0x02, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x5e, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xd3, 0x02, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, + 0xd3, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd3, 0x02, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x78, + 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x5e, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xd4, 0x02, 0x00, 0x00, 0x04, 0xd5, 0x02, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x52, 0x01, + 0x00, 0x00, 0x04, 0xd4, 0x02, 0x00, 0x00, 0x04, + 0xd5, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd4, 0x02, 0x00, + 0x00, 0x04, 0xd5, 0x02, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x76, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, + 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x00, 0x4d, 0xd6, 0x02, 0x00, 0x00, 0x4d, + 0xd7, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xd8, 0x02, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xd9, 0x02, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xda, 0x02, 0x00, + 0x00, 0x4d, 0xdb, 0x02, 0x00, 0x00, 0x04, 0xdc, + 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x02, 0x00, 0x00, + 0x4d, 0xde, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xdf, + 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x02, 0x00, 0x00, + 0x04, 0xe0, 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x02, + 0x00, 0x00, 0x4d, 0xe1, 0x02, 0x00, 0x00, 0x0b, + 0x04, 0xe2, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x02, + 0x00, 0x00, 0x04, 0xe3, 0x02, 0x00, 0x00, 0x4d, + 0xdd, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x02, 0x00, + 0x00, 0xb6, 0x4d, 0xe5, 0x02, 0x00, 0x00, 0x4d, + 0xe6, 0x02, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xe7, + 0x02, 0x00, 0x00, 0x4d, 0xde, 0x02, 0x00, 0x00, + 0x04, 0xe8, 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x02, + 0x00, 0x00, 0x04, 0xea, 0x02, 0x00, 0x00, 0x4d, + 0xeb, 0x02, 0x00, 0x00, 0x04, 0xec, 0x02, 0x00, + 0x00, 0x4d, 0xed, 0x02, 0x00, 0x00, 0x04, 0xee, + 0x02, 0x00, 0x00, 0x4d, 0xef, 0x02, 0x00, 0x00, + 0x04, 0xf0, 0x02, 0x00, 0x00, 0x4d, 0xf1, 0x02, + 0x00, 0x00, 0x04, 0xf2, 0x02, 0x00, 0x00, 0x4d, + 0xf3, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x02, 0x00, + 0x00, 0x0b, 0x04, 0xe7, 0x02, 0x00, 0x00, 0x4d, + 0xde, 0x02, 0x00, 0x00, 0x04, 0xe8, 0x02, 0x00, + 0x00, 0x4d, 0xe9, 0x02, 0x00, 0x00, 0x04, 0xea, + 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x02, 0x00, 0x00, + 0x04, 0xec, 0x02, 0x00, 0x00, 0x4d, 0xed, 0x02, + 0x00, 0x00, 0x04, 0xee, 0x02, 0x00, 0x00, 0x4d, + 0xef, 0x02, 0x00, 0x00, 0x04, 0xf0, 0x02, 0x00, + 0x00, 0x4d, 0xf1, 0x02, 0x00, 0x00, 0x04, 0xf2, + 0x02, 0x00, 0x00, 0x4d, 0xf3, 0x02, 0x00, 0x00, + 0x4d, 0xf4, 0x02, 0x00, 0x00, 0x4d, 0xf5, 0x02, + 0x00, 0x00, 0x0b, 0x04, 0xf6, 0x02, 0x00, 0x00, + 0x4d, 0xf7, 0x02, 0x00, 0x00, 0x04, 0xf8, 0x02, + 0x00, 0x00, 0x4d, 0xf9, 0x02, 0x00, 0x00, 0x04, + 0xfa, 0x02, 0x00, 0x00, 0x4d, 0xfb, 0x02, 0x00, + 0x00, 0x04, 0xfc, 0x02, 0x00, 0x00, 0x4d, 0xfd, + 0x02, 0x00, 0x00, 0x04, 0xfe, 0x02, 0x00, 0x00, + 0x4d, 0xff, 0x02, 0x00, 0x00, 0x04, 0x00, 0x03, + 0x00, 0x00, 0x4d, 0x01, 0x03, 0x00, 0x00, 0x04, + 0x02, 0x03, 0x00, 0x00, 0x4d, 0x03, 0x03, 0x00, + 0x00, 0x04, 0x04, 0x03, 0x00, 0x00, 0x4d, 0x05, + 0x03, 0x00, 0x00, 0x04, 0x06, 0x03, 0x00, 0x00, + 0x4d, 0x07, 0x03, 0x00, 0x00, 0x04, 0x08, 0x03, + 0x00, 0x00, 0x4d, 0x09, 0x03, 0x00, 0x00, 0x04, + 0x0a, 0x03, 0x00, 0x00, 0x4d, 0x0b, 0x03, 0x00, + 0x00, 0x04, 0x0c, 0x03, 0x00, 0x00, 0x4d, 0x0d, + 0x03, 0x00, 0x00, 0x04, 0x0e, 0x03, 0x00, 0x00, + 0x4d, 0x0f, 0x03, 0x00, 0x00, 0x04, 0x10, 0x03, + 0x00, 0x00, 0x4d, 0x11, 0x03, 0x00, 0x00, 0x04, + 0x12, 0x03, 0x00, 0x00, 0x4d, 0x13, 0x03, 0x00, + 0x00, 0x04, 0x14, 0x03, 0x00, 0x00, 0x4d, 0x15, + 0x03, 0x00, 0x00, 0x04, 0x16, 0x03, 0x00, 0x00, + 0x4d, 0x17, 0x03, 0x00, 0x00, 0x04, 0x18, 0x03, + 0x00, 0x00, 0x4d, 0x19, 0x03, 0x00, 0x00, 0x04, + 0x1a, 0x03, 0x00, 0x00, 0x4d, 0x1b, 0x03, 0x00, + 0x00, 0x04, 0x1c, 0x03, 0x00, 0x00, 0x4d, 0x1d, + 0x03, 0x00, 0x00, 0x4d, 0x1e, 0x03, 0x00, 0x00, + 0x4d, 0x45, 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, + 0xcc, 0x28, 0xbe, 0x0c, 0x01, 0x00, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, + 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_pa_size = 25165; + +const uint8_t intl_pa[25165] = { + 0x01, 0xed, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x70, 0x61, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x10, + 0x7b, 0x31, 0x7d, 0x2c, 0x20, 0x7b, 0x30, 0x7d, + 0x0a, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, + 0x65, 0x64, 0x69, 0x75, 0x6d, 0x0e, 0x7b, 0x31, + 0x7d, 0x20, 0x7b, 0x30, 0x7d, 0x08, 0x66, 0x75, + 0x6c, 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x02, + 0x64, 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, 0x08, + 0x64, 0x2c, 0x20, 0x45, 0x04, 0x45, 0x64, 0x10, + 0x45, 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, + 0x06, 0x45, 0x68, 0x6d, 0x0e, 0x45, 0x20, 0x48, + 0x48, 0x3a, 0x6d, 0x6d, 0x06, 0x45, 0x48, 0x6d, + 0x16, 0x45, 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x20, 0x61, 0x08, 0x45, 0x68, 0x6d, + 0x73, 0x14, 0x45, 0x20, 0x48, 0x48, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x08, 0x45, 0x48, 0x6d, + 0x73, 0x06, 0x47, 0x20, 0x79, 0x04, 0x47, 0x79, + 0x10, 0x4d, 0x4d, 0x4d, 0x2c, 0x20, 0x47, 0x20, + 0x79, 0x0a, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x0e, + 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0c, + 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x18, 0x45, + 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x2c, 0x20, + 0x47, 0x20, 0x79, 0x0e, 0x47, 0x79, 0x4d, 0x4d, + 0x4d, 0x45, 0x64, 0x06, 0x68, 0x20, 0x61, 0x02, + 0x68, 0x04, 0x48, 0x48, 0x02, 0x48, 0x0c, 0x68, + 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x04, 0x68, 0x6d, + 0x0a, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x04, 0x48, + 0x6d, 0x12, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x61, 0x06, 0x68, 0x6d, 0x73, 0x10, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x06, 0x48, 0x6d, 0x73, 0x16, 0x68, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x20, 0x76, + 0x08, 0x68, 0x6d, 0x73, 0x76, 0x14, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x76, + 0x08, 0x48, 0x6d, 0x73, 0x76, 0x10, 0x68, 0x3a, + 0x6d, 0x6d, 0x20, 0x61, 0x20, 0x76, 0x06, 0x68, + 0x6d, 0x76, 0x0e, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x20, 0x76, 0x06, 0x48, 0x6d, 0x76, 0x02, 0x4c, + 0x02, 0x4d, 0x06, 0x64, 0x2f, 0x4d, 0x04, 0x4d, + 0x64, 0x12, 0x45, 0x2c, 0x20, 0x64, 0x64, 0x2d, + 0x4d, 0x4d, 0x2e, 0x06, 0x4d, 0x45, 0x64, 0x06, + 0x4c, 0x4c, 0x4c, 0x06, 0x4d, 0x4d, 0x4d, 0x0a, + 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x08, 0x4d, 0x4d, + 0x4d, 0x64, 0x10, 0x45, 0x2c, 0x20, 0x64, 0x20, + 0x4d, 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x45, + 0x64, 0x0c, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x64, + 0x0a, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x0a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x08, 0x6d, 0x6d, 0x73, + 0x73, 0x04, 0x6d, 0x73, 0x02, 0x79, 0x06, 0x4d, + 0x2f, 0x79, 0x04, 0x79, 0x4d, 0x0a, 0x64, 0x2f, + 0x4d, 0x2f, 0x79, 0x06, 0x79, 0x4d, 0x64, 0x10, + 0x45, 0x2c, 0x20, 0x64, 0x2f, 0x4d, 0x2f, 0x79, + 0x08, 0x79, 0x4d, 0x45, 0x64, 0x0a, 0x4d, 0x4d, + 0x4d, 0x20, 0x79, 0x08, 0x79, 0x4d, 0x4d, 0x4d, + 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x14, 0x45, + 0x2c, 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x20, + 0x79, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, + 0x0c, 0x79, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, + 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, 0x51, 0x51, + 0x51, 0x20, 0x79, 0x08, 0x79, 0x51, 0x51, 0x51, + 0x0c, 0x51, 0x51, 0x51, 0x51, 0x20, 0x79, 0x0a, + 0x79, 0x51, 0x51, 0x51, 0x51, 0x20, 0x61, 0x76, + 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x1c, 0x45, + 0x45, 0x45, 0x45, 0x2c, 0x20, 0x64, 0x20, 0x4d, + 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x14, 0x79, 0x4d, + 0x4d, 0x4d, 0x4d, 0x45, 0x45, 0x45, 0x45, 0x64, + 0x10, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, + 0x79, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, + 0x0c, 0x64, 0x2f, 0x4d, 0x2f, 0x79, 0x79, 0x16, + 0x64, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x73, 0x1c, 0x68, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x61, 0x20, 0x7a, 0x7a, + 0x7a, 0x7a, 0x12, 0x68, 0x6d, 0x6d, 0x73, 0x73, + 0x7a, 0x7a, 0x7a, 0x7a, 0x16, 0x68, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x20, 0x7a, + 0x08, 0x68, 0x6d, 0x73, 0x7a, 0x16, 0x74, 0x69, + 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x73, 0x0e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x73, 0x03, 0x1c, 0x0a, 0x05, 0x2b, 0x0a, 0x3c, + 0x0a, 0x05, 0x2e, 0x0a, 0x3e, 0x0a, 0x03, 0x05, + 0x0a, 0x03, 0x2e, 0x0a, 0x05, 0x1c, 0x0a, 0x42, + 0x0a, 0x05, 0x1c, 0x0a, 0x41, 0x0a, 0x03, 0x38, + 0x0a, 0x03, 0x28, 0x0a, 0x03, 0x26, 0x0a, 0x0c, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x05, 0x1c, + 0x0a, 0x28, 0x0a, 0x07, 0x2b, 0x0a, 0x3c, 0x0a, + 0x30, 0x0a, 0x09, 0x2e, 0x0a, 0x3e, 0x0a, 0x30, + 0x0a, 0x1a, 0x0a, 0x0b, 0x05, 0x0a, 0x2a, 0x0a, + 0x4d, 0x0a, 0x30, 0x0a, 0x48, 0x0a, 0x05, 0x2e, + 0x0a, 0x08, 0x0a, 0x07, 0x1c, 0x0a, 0x42, 0x0a, + 0x28, 0x0a, 0x09, 0x1c, 0x0a, 0x41, 0x0a, 0x32, + 0x0a, 0x3e, 0x0a, 0x05, 0x05, 0x0a, 0x17, 0x0a, + 0x07, 0x38, 0x0a, 0x24, 0x0a, 0x70, 0x0a, 0x09, + 0x05, 0x0a, 0x15, 0x0a, 0x24, 0x0a, 0x42, 0x0a, + 0x07, 0x28, 0x0a, 0x35, 0x0a, 0x70, 0x0a, 0x07, + 0x26, 0x0a, 0x38, 0x0a, 0x70, 0x0a, 0x0b, 0x1c, + 0x0a, 0x28, 0x0a, 0x35, 0x0a, 0x30, 0x0a, 0x40, + 0x0a, 0x0d, 0x2b, 0x0a, 0x3c, 0x0a, 0x30, 0x0a, + 0x35, 0x0a, 0x30, 0x0a, 0x40, 0x0a, 0x0d, 0x05, + 0x0a, 0x2a, 0x0a, 0x4d, 0x0a, 0x30, 0x0a, 0x48, + 0x0a, 0x32, 0x0a, 0x0b, 0x1c, 0x0a, 0x41, 0x0a, + 0x32, 0x0a, 0x3e, 0x0a, 0x08, 0x0a, 0x09, 0x05, + 0x0a, 0x17, 0x0a, 0x38, 0x0a, 0x24, 0x0a, 0x0b, + 0x38, 0x0a, 0x24, 0x0a, 0x70, 0x0a, 0x2c, 0x0a, + 0x30, 0x0a, 0x0d, 0x05, 0x0a, 0x15, 0x0a, 0x24, + 0x0a, 0x42, 0x0a, 0x2c, 0x0a, 0x30, 0x0a, 0x0b, + 0x28, 0x0a, 0x35, 0x0a, 0x70, 0x0a, 0x2c, 0x0a, + 0x30, 0x0a, 0x0b, 0x26, 0x0a, 0x38, 0x0a, 0x70, + 0x0a, 0x2c, 0x0a, 0x30, 0x0a, 0x0c, 0x6d, 0x6f, + 0x6e, 0x74, 0x68, 0x73, 0x03, 0x10, 0x0a, 0x05, + 0x38, 0x0a, 0x4b, 0x0a, 0x05, 0x2e, 0x0a, 0x70, + 0x0a, 0x07, 0x2c, 0x0a, 0x41, 0x0a, 0x71, 0x0a, + 0x05, 0x35, 0x0a, 0x40, 0x0a, 0x09, 0x38, 0x0a, + 0x3c, 0x0a, 0x41, 0x0a, 0x71, 0x0a, 0x05, 0x38, + 0x0a, 0x3c, 0x0a, 0x05, 0x10, 0x0a, 0x24, 0x0a, + 0x07, 0x38, 0x0a, 0x4b, 0x0a, 0x2e, 0x0a, 0x09, + 0x2e, 0x0a, 0x70, 0x0a, 0x17, 0x0a, 0x32, 0x0a, + 0x09, 0x2c, 0x0a, 0x41, 0x0a, 0x71, 0x0a, 0x27, + 0x0a, 0x07, 0x35, 0x0a, 0x40, 0x0a, 0x30, 0x0a, + 0x0d, 0x38, 0x0a, 0x3c, 0x0a, 0x41, 0x0a, 0x71, + 0x0a, 0x15, 0x0a, 0x30, 0x0a, 0x0f, 0x38, 0x0a, + 0x3c, 0x0a, 0x28, 0x0a, 0x3f, 0x0a, 0x71, 0x0a, + 0x1a, 0x0a, 0x30, 0x0a, 0x0b, 0x10, 0x0a, 0x24, + 0x0a, 0x35, 0x0a, 0x3e, 0x0a, 0x30, 0x0a, 0x0d, + 0x38, 0x0a, 0x4b, 0x0a, 0x2e, 0x0a, 0x35, 0x0a, + 0x3e, 0x0a, 0x30, 0x0a, 0x0f, 0x2e, 0x0a, 0x70, + 0x0a, 0x17, 0x0a, 0x32, 0x0a, 0x35, 0x0a, 0x3e, + 0x0a, 0x30, 0x0a, 0x0f, 0x2c, 0x0a, 0x41, 0x0a, + 0x71, 0x0a, 0x27, 0x0a, 0x35, 0x0a, 0x3e, 0x0a, + 0x30, 0x0a, 0x0d, 0x35, 0x0a, 0x40, 0x0a, 0x30, + 0x0a, 0x35, 0x0a, 0x3e, 0x0a, 0x30, 0x0a, 0x13, + 0x38, 0x0a, 0x3c, 0x0a, 0x41, 0x0a, 0x71, 0x0a, + 0x15, 0x0a, 0x30, 0x0a, 0x35, 0x0a, 0x3e, 0x0a, + 0x30, 0x0a, 0x15, 0x38, 0x0a, 0x3c, 0x0a, 0x28, + 0x0a, 0x3f, 0x0a, 0x71, 0x0a, 0x1a, 0x0a, 0x30, + 0x0a, 0x35, 0x0a, 0x3e, 0x0a, 0x30, 0x0a, 0x08, + 0x64, 0x61, 0x79, 0x73, 0x04, 0x42, 0x45, 0x08, + 0x65, 0x72, 0x61, 0x73, 0x0d, 0x2a, 0x0a, 0x42, + 0x0a, 0x2e, 0x00, 0x26, 0x0a, 0x41, 0x0a, 0x2e, + 0x00, 0x04, 0x61, 0x6d, 0x0d, 0x2c, 0x0a, 0x3e, + 0x0a, 0x2e, 0x00, 0x26, 0x0a, 0x41, 0x0a, 0x2e, + 0x00, 0x04, 0x70, 0x6d, 0x14, 0x64, 0x61, 0x79, + 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x73, 0x06, + 0x4d, 0x30, 0x31, 0x06, 0x4d, 0x30, 0x32, 0x06, + 0x4d, 0x30, 0x33, 0x06, 0x4d, 0x30, 0x34, 0x06, + 0x4d, 0x30, 0x35, 0x06, 0x4d, 0x30, 0x36, 0x06, + 0x4d, 0x30, 0x37, 0x06, 0x4d, 0x30, 0x38, 0x06, + 0x4d, 0x30, 0x39, 0x06, 0x4d, 0x31, 0x30, 0x06, + 0x4d, 0x31, 0x31, 0x06, 0x4d, 0x31, 0x32, 0x08, + 0x54, 0x6f, 0x75, 0x74, 0x08, 0x42, 0x61, 0x62, + 0x61, 0x0a, 0x48, 0x61, 0x74, 0x6f, 0x72, 0x0a, + 0x4b, 0x69, 0x61, 0x68, 0x6b, 0x08, 0x54, 0x6f, + 0x62, 0x61, 0x0c, 0x41, 0x6d, 0x73, 0x68, 0x69, + 0x72, 0x10, 0x42, 0x61, 0x72, 0x61, 0x6d, 0x68, + 0x61, 0x74, 0x12, 0x42, 0x61, 0x72, 0x61, 0x6d, + 0x6f, 0x75, 0x64, 0x61, 0x0e, 0x42, 0x61, 0x73, + 0x68, 0x61, 0x6e, 0x73, 0x0a, 0x50, 0x61, 0x6f, + 0x6e, 0x61, 0x08, 0x45, 0x70, 0x65, 0x70, 0x0a, + 0x4d, 0x65, 0x73, 0x72, 0x61, 0x0a, 0x4e, 0x61, + 0x73, 0x69, 0x65, 0x08, 0x45, 0x52, 0x41, 0x30, + 0x08, 0x45, 0x52, 0x41, 0x31, 0x10, 0x4d, 0x65, + 0x73, 0x6b, 0x65, 0x72, 0x65, 0x6d, 0x0c, 0x54, + 0x65, 0x6b, 0x65, 0x6d, 0x74, 0x0a, 0x48, 0x65, + 0x64, 0x61, 0x72, 0x0c, 0x54, 0x61, 0x68, 0x73, + 0x61, 0x73, 0x06, 0x54, 0x65, 0x72, 0x0e, 0x59, + 0x65, 0x6b, 0x61, 0x74, 0x69, 0x74, 0x0e, 0x4d, + 0x65, 0x67, 0x61, 0x62, 0x69, 0x74, 0x0c, 0x4d, + 0x69, 0x61, 0x7a, 0x69, 0x61, 0x0c, 0x47, 0x65, + 0x6e, 0x62, 0x6f, 0x74, 0x08, 0x53, 0x65, 0x6e, + 0x65, 0x0a, 0x48, 0x61, 0x6d, 0x6c, 0x65, 0x0e, + 0x4e, 0x65, 0x68, 0x61, 0x73, 0x73, 0x65, 0x0e, + 0x50, 0x61, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x0d, + 0x08, 0x0a, 0x2e, 0x00, 0x20, 0x00, 0x2a, 0x0a, + 0x42, 0x0a, 0x2e, 0x00, 0x07, 0x38, 0x0a, 0x70, + 0x0a, 0x28, 0x0a, 0x15, 0x08, 0x0a, 0x2e, 0x00, + 0x20, 0x00, 0x2a, 0x0a, 0x42, 0x0a, 0x2e, 0x00, + 0x20, 0x00, 0x38, 0x0a, 0x70, 0x0a, 0x2e, 0x00, + 0x0d, 0x08, 0x0a, 0x2e, 0x00, 0x20, 0x00, 0x38, + 0x0a, 0x70, 0x0a, 0x2e, 0x00, 0x13, 0x08, 0x0a, + 0x38, 0x0a, 0x35, 0x0a, 0x40, 0x0a, 0x20, 0x00, + 0x2a, 0x0a, 0x42, 0x0a, 0x30, 0x0a, 0x35, 0x0a, + 0x11, 0x08, 0x0a, 0x38, 0x0a, 0x35, 0x0a, 0x40, + 0x0a, 0x20, 0x00, 0x38, 0x0a, 0x70, 0x0a, 0x28, + 0x0a, 0x1d, 0x08, 0x0a, 0x38, 0x0a, 0x35, 0x0a, + 0x40, 0x0a, 0x20, 0x00, 0x2a, 0x0a, 0x42, 0x0a, + 0x30, 0x0a, 0x35, 0x0a, 0x20, 0x00, 0x2f, 0x0a, + 0x41, 0x0a, 0x71, 0x0a, 0x17, 0x0a, 0x13, 0x08, + 0x0a, 0x38, 0x0a, 0x35, 0x0a, 0x40, 0x0a, 0x20, + 0x00, 0x2f, 0x0a, 0x41, 0x0a, 0x71, 0x0a, 0x17, + 0x0a, 0x0c, 0x54, 0x69, 0x73, 0x68, 0x72, 0x69, + 0x0e, 0x48, 0x65, 0x73, 0x68, 0x76, 0x61, 0x6e, + 0x0c, 0x4b, 0x69, 0x73, 0x6c, 0x65, 0x76, 0x0a, + 0x54, 0x65, 0x76, 0x65, 0x74, 0x0c, 0x53, 0x68, + 0x65, 0x76, 0x61, 0x74, 0x0c, 0x41, 0x64, 0x61, + 0x72, 0x20, 0x49, 0x08, 0x41, 0x64, 0x61, 0x72, + 0x0a, 0x4e, 0x69, 0x73, 0x61, 0x6e, 0x08, 0x49, + 0x79, 0x61, 0x72, 0x0a, 0x53, 0x69, 0x76, 0x61, + 0x6e, 0x0a, 0x54, 0x61, 0x6d, 0x75, 0x7a, 0x04, + 0x41, 0x76, 0x08, 0x45, 0x6c, 0x75, 0x6c, 0x0e, + 0x41, 0x64, 0x61, 0x72, 0x20, 0x49, 0x49, 0x04, + 0x41, 0x4d, 0x03, 0x67, 0x0a, 0x03, 0x68, 0x0a, + 0x03, 0x69, 0x0a, 0x03, 0x6a, 0x0a, 0x03, 0x6b, + 0x0a, 0x03, 0x6c, 0x0a, 0x03, 0x6d, 0x0a, 0x03, + 0x6e, 0x0a, 0x03, 0x6f, 0x0a, 0x05, 0x67, 0x0a, + 0x66, 0x0a, 0x05, 0x67, 0x0a, 0x67, 0x0a, 0x05, + 0x67, 0x0a, 0x68, 0x0a, 0x07, 0x1a, 0x0a, 0x47, + 0x0a, 0x24, 0x0a, 0x0b, 0x35, 0x0a, 0x48, 0x0a, + 0x38, 0x0a, 0x3e, 0x0a, 0x16, 0x0a, 0x07, 0x1c, + 0x0a, 0x47, 0x0a, 0x20, 0x0a, 0x07, 0x39, 0x0a, + 0x3e, 0x0a, 0x5c, 0x0a, 0x09, 0x38, 0x0a, 0x3e, + 0x0a, 0x09, 0x0a, 0x23, 0x0a, 0x0b, 0x2d, 0x0a, + 0x3e, 0x0a, 0x26, 0x0a, 0x4b, 0x0a, 0x02, 0x0a, + 0x09, 0x05, 0x0a, 0x71, 0x0a, 0x38, 0x0a, 0x42, + 0x0a, 0x09, 0x15, 0x0a, 0x71, 0x0a, 0x24, 0x0a, + 0x15, 0x0a, 0x09, 0x2e, 0x0a, 0x71, 0x0a, 0x18, + 0x0a, 0x30, 0x0a, 0x07, 0x2a, 0x0a, 0x4b, 0x0a, + 0x39, 0x0a, 0x07, 0x2e, 0x0a, 0x3e, 0x0a, 0x18, + 0x0a, 0x09, 0x2b, 0x0a, 0x71, 0x0a, 0x17, 0x0a, + 0x23, 0x0a, 0x09, 0x38, 0x0a, 0x3e, 0x0a, 0x15, + 0x0a, 0x3e, 0x0a, 0x08, 0x4d, 0x75, 0x68, 0x2e, + 0x08, 0x53, 0x61, 0x66, 0x2e, 0x0c, 0x52, 0x61, + 0x62, 0x2e, 0x20, 0x49, 0x0e, 0x52, 0x61, 0x62, + 0x2e, 0x20, 0x49, 0x49, 0x0c, 0x4a, 0x75, 0x6d, + 0x2e, 0x20, 0x49, 0x0e, 0x4a, 0x75, 0x6d, 0x2e, + 0x20, 0x49, 0x49, 0x08, 0x52, 0x61, 0x6a, 0x2e, + 0x08, 0x53, 0x68, 0x61, 0x2e, 0x08, 0x52, 0x61, + 0x6d, 0x2e, 0x0a, 0x53, 0x68, 0x61, 0x77, 0x2e, + 0x11, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, + 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x51, 0x00, 0x2e, + 0x00, 0x11, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, + 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x48, 0x00, + 0x2e, 0x00, 0x10, 0x4d, 0x75, 0x68, 0x61, 0x72, + 0x72, 0x61, 0x6d, 0x0a, 0x53, 0x61, 0x66, 0x61, + 0x72, 0x0f, 0x52, 0x00, 0x61, 0x00, 0x62, 0x00, + 0x69, 0x00, 0xbb, 0x02, 0x20, 0x00, 0x49, 0x00, + 0x11, 0x52, 0x00, 0x61, 0x00, 0x62, 0x00, 0x69, + 0x00, 0xbb, 0x02, 0x20, 0x00, 0x49, 0x00, 0x49, + 0x00, 0x10, 0x4a, 0x75, 0x6d, 0x61, 0x64, 0x61, + 0x20, 0x49, 0x12, 0x4a, 0x75, 0x6d, 0x61, 0x64, + 0x61, 0x20, 0x49, 0x49, 0x0a, 0x52, 0x61, 0x6a, + 0x61, 0x62, 0x0f, 0x53, 0x00, 0x68, 0x00, 0x61, + 0x00, 0xbb, 0x02, 0x62, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x0e, 0x52, 0x61, 0x6d, 0x61, 0x64, 0x61, + 0x6e, 0x0e, 0x53, 0x68, 0x61, 0x77, 0x77, 0x61, + 0x6c, 0x19, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, + 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x51, 0x00, + 0x69, 0x00, 0xbb, 0x02, 0x64, 0x00, 0x61, 0x00, + 0x68, 0x00, 0x19, 0x44, 0x00, 0x68, 0x00, 0x75, + 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x48, + 0x00, 0x69, 0x00, 0x6a, 0x00, 0x6a, 0x00, 0x61, + 0x00, 0x68, 0x00, 0x04, 0x41, 0x48, 0x1f, 0x54, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x36, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x36, 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x75, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1f, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x1d, 0x57, 0x00, 0x61, 0x00, 0x64, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x52, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x1d, 0x59, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1f, 0x4a, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, + 0x6b, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x2b, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x2d, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x2d, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x2a, 0x4a, 0x69, 0x6e, 0x67, + 0x6f, 0x2d, 0x6b, 0x65, 0x69, 0x75, 0x6e, 0x20, + 0x28, 0x37, 0x36, 0x37, 0x2d, 0x37, 0x37, 0x30, + 0x29, 0x1d, 0x48, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x1f, 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, 0x64, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x4d, 0x01, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, + 0x4a, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x61, + 0x00, 0x6a, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1f, 0x53, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x20, + 0x54, 0x65, 0x6e, 0x2d, 0x61, 0x6e, 0x20, 0x28, + 0x38, 0x35, 0x37, 0x2d, 0x38, 0x35, 0x39, 0x29, + 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, + 0x47, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1d, 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, + 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x34, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1b, 0x4c, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1d, 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x41, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, 0x4a, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x4a, 0x00, 0x69, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x29, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x27, 0x4a, 0x00, 0x69, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x45, 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4c, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x61, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x25, 0x4a, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x24, 0x54, 0x65, 0x6e, 0x2d, + 0x65, 0x69, 0x20, 0x28, 0x31, 0x31, 0x31, 0x30, + 0x2d, 0x31, 0x31, 0x31, 0x33, 0x29, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x44, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x45, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x6a, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x48, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x27, 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, + 0x4c, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x6d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x4a, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x59, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x75, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x29, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x21, 0x4a, 0x00, 0x4d, 0x01, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x27, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x75, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x29, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x74, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x29, 0x52, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x45, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4c, + 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x61, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x48, + 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x27, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x4c, + 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x45, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x27, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4a, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x27, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x61, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x41, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x4d, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x02, 0x54, 0x02, 0x53, 0x0a, 0x4d, 0x65, + 0x69, 0x6a, 0x69, 0x0d, 0x54, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x0b, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x0c, 0x48, 0x65, 0x69, 0x73, + 0x65, 0x69, 0x12, 0x46, 0x61, 0x72, 0x76, 0x61, + 0x72, 0x64, 0x69, 0x6e, 0x16, 0x4f, 0x72, 0x64, + 0x69, 0x62, 0x65, 0x68, 0x65, 0x73, 0x68, 0x74, + 0x0e, 0x4b, 0x68, 0x6f, 0x72, 0x64, 0x61, 0x64, + 0x06, 0x54, 0x69, 0x72, 0x0c, 0x4d, 0x6f, 0x72, + 0x64, 0x61, 0x64, 0x12, 0x53, 0x68, 0x61, 0x68, + 0x72, 0x69, 0x76, 0x61, 0x72, 0x08, 0x4d, 0x65, + 0x68, 0x72, 0x08, 0x41, 0x62, 0x61, 0x6e, 0x08, + 0x41, 0x7a, 0x61, 0x72, 0x06, 0x44, 0x65, 0x79, + 0x0c, 0x42, 0x61, 0x68, 0x6d, 0x61, 0x6e, 0x0c, + 0x45, 0x73, 0x66, 0x61, 0x6e, 0x64, 0x04, 0x41, + 0x50, 0x1a, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, + 0x20, 0x52, 0x2e, 0x4f, 0x2e, 0x43, 0x2e, 0x0c, + 0x52, 0x2e, 0x4f, 0x2e, 0x43, 0x2e, 0x12, 0x63, + 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, 0x73, + 0x08, 0x64, 0x61, 0x74, 0x65, 0x08, 0x6c, 0x61, + 0x74, 0x6e, 0x04, 0x6e, 0x75, 0x10, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x50, + 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x26, 0x7b, + 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0x1e, 0x6e, 0x65, 0x67, 0x61, 0x74, + 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, + 0x72, 0x6e, 0x0e, 0x64, 0x65, 0x63, 0x69, 0x6d, + 0x61, 0x6c, 0x26, 0x7b, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x63, 0x79, 0x7d, 0xa0, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x3c, 0x7b, + 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x7d, 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x63, 0x79, 0x7d, 0xa0, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x10, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x2a, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x7b, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x40, 0x7b, 0x6d, 0x69, + 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x0e, 0x70, 0x65, + 0x72, 0x63, 0x65, 0x6e, 0x74, 0x24, 0x73, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x53, 0x69, 0x7a, 0x65, + 0x10, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, + 0x73, 0x02, 0x2e, 0x02, 0x2c, 0x0a, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x06, 0x4e, 0x61, 0x4e, 0x06, + 0x6e, 0x61, 0x6e, 0x02, 0x2b, 0x10, 0x70, 0x6c, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, 0x2d, + 0x12, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, + 0x67, 0x6e, 0x02, 0x25, 0x16, 0x70, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, + 0x03, 0x1e, 0x22, 0x10, 0x69, 0x6e, 0x66, 0x69, + 0x6e, 0x69, 0x74, 0x79, 0x08, 0x67, 0x75, 0x72, + 0x75, 0x0e, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, + 0x73, 0x04, 0x41, 0x24, 0x06, 0x41, 0x55, 0x44, + 0x04, 0x52, 0x24, 0x06, 0x42, 0x52, 0x4c, 0x06, + 0x43, 0x41, 0x24, 0x06, 0x43, 0x41, 0x44, 0x06, + 0x43, 0x4e, 0xa5, 0x06, 0x43, 0x4e, 0x59, 0x03, + 0xac, 0x20, 0x06, 0x45, 0x55, 0x52, 0x02, 0xa3, + 0x06, 0x47, 0x42, 0x50, 0x06, 0x48, 0x4b, 0x24, + 0x06, 0x48, 0x4b, 0x44, 0x03, 0xaa, 0x20, 0x06, + 0x49, 0x4c, 0x53, 0x03, 0xb9, 0x20, 0x06, 0x49, + 0x4e, 0x52, 0x06, 0x4a, 0x50, 0xa5, 0x06, 0x4a, + 0x50, 0x59, 0x03, 0xa9, 0x20, 0x06, 0x4b, 0x52, + 0x57, 0x06, 0x4d, 0x58, 0x24, 0x06, 0x4d, 0x58, + 0x4e, 0x06, 0x4e, 0x5a, 0x24, 0x06, 0x4e, 0x5a, + 0x44, 0x03, 0x3f, 0x0e, 0x06, 0x54, 0x48, 0x42, + 0x06, 0x4e, 0x54, 0x24, 0x06, 0x54, 0x57, 0x44, + 0x06, 0x55, 0x53, 0x24, 0x06, 0x55, 0x53, 0x44, + 0x03, 0xab, 0x20, 0x06, 0x56, 0x4e, 0x44, 0x08, + 0x46, 0x43, 0x46, 0x41, 0x06, 0x58, 0x41, 0x46, + 0x06, 0x45, 0x43, 0x24, 0x06, 0x58, 0x43, 0x44, + 0x06, 0x43, 0x46, 0x41, 0x06, 0x58, 0x4f, 0x46, + 0x08, 0x43, 0x46, 0x50, 0x46, 0x06, 0x58, 0x50, + 0x46, 0x14, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x69, 0x65, 0x73, 0x52, 0x6e, 0x6f, 0x64, + 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, + 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2f, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, + 0x74, 0x61, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x70, + 0x2f, 0x70, 0x61, 0x2e, 0x6a, 0x73, 0x0d, 0x00, + 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, 0x27, + 0x00, 0x7d, 0xde, 0x6b, 0x01, 0xa0, 0x01, 0x00, + 0x00, 0x00, 0x39, 0xd0, 0x00, 0x00, 0x00, 0x43, + 0xd1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd2, 0x00, + 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd4, 0x00, 0x00, 0x00, 0x04, 0xd5, 0x00, + 0x00, 0x00, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x04, + 0xd7, 0x00, 0x00, 0x00, 0x04, 0xd8, 0x00, 0x00, + 0x00, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x04, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xdb, 0x00, 0x00, 0x00, + 0x04, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xdd, 0x00, + 0x00, 0x00, 0x04, 0xde, 0x00, 0x00, 0x00, 0x04, + 0xdf, 0x00, 0x00, 0x00, 0x04, 0xe0, 0x00, 0x00, + 0x00, 0x04, 0xe1, 0x00, 0x00, 0x00, 0x04, 0xe2, + 0x00, 0x00, 0x00, 0x26, 0x0f, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x00, 0x0a, 0x4d, 0xe4, 0x00, 0x00, + 0x00, 0x0a, 0x4d, 0xe5, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, + 0xe8, 0x00, 0x00, 0x00, 0x04, 0xe9, 0x00, 0x00, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x04, 0xe9, + 0x00, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0xec, + 0x00, 0x00, 0x00, 0x04, 0xed, 0x00, 0x00, 0x00, + 0x4d, 0xee, 0x00, 0x00, 0x00, 0x04, 0xef, 0x00, + 0x00, 0x00, 0x4d, 0xf0, 0x00, 0x00, 0x00, 0x04, + 0xf1, 0x00, 0x00, 0x00, 0x4d, 0xf2, 0x00, 0x00, + 0x00, 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, 0xf4, + 0x00, 0x00, 0x00, 0x04, 0xf5, 0x00, 0x00, 0x00, + 0x4d, 0xf6, 0x00, 0x00, 0x00, 0x04, 0xf7, 0x00, + 0x00, 0x00, 0x4d, 0xf8, 0x00, 0x00, 0x00, 0x04, + 0xf9, 0x00, 0x00, 0x00, 0x4d, 0xfa, 0x00, 0x00, + 0x00, 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, 0xfc, + 0x00, 0x00, 0x00, 0x04, 0xfd, 0x00, 0x00, 0x00, + 0x4d, 0xfe, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x01, 0x00, 0x00, 0x04, + 0x01, 0x01, 0x00, 0x00, 0x4d, 0x02, 0x01, 0x00, + 0x00, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0x04, + 0x01, 0x00, 0x00, 0x04, 0x05, 0x01, 0x00, 0x00, + 0x4d, 0x06, 0x01, 0x00, 0x00, 0x04, 0x07, 0x01, + 0x00, 0x00, 0x4d, 0x08, 0x01, 0x00, 0x00, 0x04, + 0x09, 0x01, 0x00, 0x00, 0x4d, 0x0a, 0x01, 0x00, + 0x00, 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, 0x0c, + 0x01, 0x00, 0x00, 0x04, 0x0d, 0x01, 0x00, 0x00, + 0x4d, 0x0e, 0x01, 0x00, 0x00, 0x04, 0x0f, 0x01, + 0x00, 0x00, 0x4d, 0x10, 0x01, 0x00, 0x00, 0x04, + 0x11, 0x01, 0x00, 0x00, 0x4d, 0x12, 0x01, 0x00, + 0x00, 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, 0x14, + 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x4d, 0x16, 0x01, 0x00, 0x00, 0x04, 0x17, 0x01, + 0x00, 0x00, 0x4d, 0x18, 0x01, 0x00, 0x00, 0x04, + 0x19, 0x01, 0x00, 0x00, 0x4d, 0x1a, 0x01, 0x00, + 0x00, 0x04, 0x1b, 0x01, 0x00, 0x00, 0x4d, 0x1c, + 0x01, 0x00, 0x00, 0x04, 0x1d, 0x01, 0x00, 0x00, + 0x4d, 0x1e, 0x01, 0x00, 0x00, 0x04, 0x1f, 0x01, + 0x00, 0x00, 0x4d, 0x20, 0x01, 0x00, 0x00, 0x04, + 0x21, 0x01, 0x00, 0x00, 0x4d, 0x22, 0x01, 0x00, + 0x00, 0x04, 0x23, 0x01, 0x00, 0x00, 0x4d, 0x24, + 0x01, 0x00, 0x00, 0x04, 0x23, 0x01, 0x00, 0x00, + 0x4d, 0x25, 0x01, 0x00, 0x00, 0x04, 0x26, 0x01, + 0x00, 0x00, 0x4d, 0x26, 0x01, 0x00, 0x00, 0x04, + 0x27, 0x01, 0x00, 0x00, 0x4d, 0x28, 0x01, 0x00, + 0x00, 0x04, 0x29, 0x01, 0x00, 0x00, 0x4d, 0x2a, + 0x01, 0x00, 0x00, 0x04, 0x2b, 0x01, 0x00, 0x00, + 0x4d, 0x2c, 0x01, 0x00, 0x00, 0x04, 0x2d, 0x01, + 0x00, 0x00, 0x4d, 0x2e, 0x01, 0x00, 0x00, 0x04, + 0xfd, 0x00, 0x00, 0x00, 0x4d, 0x2f, 0x01, 0x00, + 0x00, 0x04, 0x30, 0x01, 0x00, 0x00, 0x4d, 0x31, + 0x01, 0x00, 0x00, 0x04, 0x32, 0x01, 0x00, 0x00, + 0x4d, 0x33, 0x01, 0x00, 0x00, 0x04, 0x34, 0x01, + 0x00, 0x00, 0x4d, 0x35, 0x01, 0x00, 0x00, 0x04, + 0x36, 0x01, 0x00, 0x00, 0x4d, 0x37, 0x01, 0x00, + 0x00, 0x4d, 0x38, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x39, 0x01, 0x00, 0x00, 0x4d, 0x3a, 0x01, 0x00, + 0x00, 0x04, 0x3b, 0x01, 0x00, 0x00, 0x4d, 0x3c, + 0x01, 0x00, 0x00, 0x04, 0xfd, 0x00, 0x00, 0x00, + 0x4d, 0x2f, 0x01, 0x00, 0x00, 0x04, 0x3d, 0x01, + 0x00, 0x00, 0x4d, 0x2a, 0x01, 0x00, 0x00, 0x4d, + 0x3e, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x3f, 0x01, + 0x00, 0x00, 0x4d, 0x40, 0x01, 0x00, 0x00, 0x04, + 0x41, 0x01, 0x00, 0x00, 0x4d, 0x42, 0x01, 0x00, + 0x00, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0x0a, + 0x01, 0x00, 0x00, 0x04, 0x05, 0x01, 0x00, 0x00, + 0x4d, 0x06, 0x01, 0x00, 0x00, 0x4d, 0x43, 0x01, + 0x00, 0x00, 0x4d, 0x44, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x0b, 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, + 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x65, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7b, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, + 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x4d, + 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, + 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x00, 0xbe, 0x01, 0xbe, 0x02, 0xbe, 0x03, + 0xbe, 0x04, 0xbe, 0x05, 0xbe, 0x06, 0xbe, 0x07, + 0xbe, 0x08, 0xbe, 0x09, 0xbe, 0x0a, 0xbe, 0x0b, + 0x26, 0x0c, 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, + 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, + 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, + 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, + 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, + 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, + 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, + 0x8e, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, + 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, + 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, + 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, + 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, + 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, + 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, + 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x65, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x7b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x04, + 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, + 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, 0x4d, 0xd6, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x0c, 0xbe, + 0x0d, 0xbe, 0x0e, 0xbe, 0x0f, 0xbe, 0x10, 0xbe, + 0x11, 0xbe, 0x12, 0xbe, 0x13, 0xbe, 0x14, 0xbe, + 0x15, 0xbe, 0x16, 0xbe, 0x17, 0xbe, 0x18, 0x26, + 0x0d, 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, + 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, + 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, + 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, + 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, + 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, + 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, + 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, + 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, + 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, + 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, + 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, + 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, + 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, + 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x65, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x9c, + 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, + 0x9d, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x4d, + 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, + 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x19, 0xbe, 0x1a, 0xbe, 0x1b, + 0xbe, 0x1c, 0xbe, 0x1d, 0xbe, 0x1e, 0xbe, 0x1f, + 0xbe, 0x20, 0xbe, 0x21, 0xbe, 0x22, 0xbe, 0x23, + 0xbe, 0x24, 0x26, 0x0c, 0x00, 0x4d, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, + 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, + 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, + 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, + 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, + 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, + 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, + 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x83, + 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, + 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, + 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, + 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, + 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, + 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, + 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x65, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, + 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x25, 0xbe, 0x26, 0xbe, 0x27, 0xbe, 0x28, 0xbe, + 0x29, 0xbe, 0x2a, 0xbe, 0x2b, 0xbe, 0x2c, 0xbe, + 0x2d, 0xbe, 0x2e, 0xbe, 0x2f, 0xbe, 0x30, 0xbe, + 0x31, 0x26, 0x0d, 0x00, 0x4d, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, + 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, + 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, + 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, + 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, + 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, + 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, + 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, + 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, + 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, + 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, + 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, + 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, + 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, + 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x65, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, + 0x9d, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, + 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7d, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7e, 0x01, 0x00, + 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, + 0x4d, 0x82, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x32, 0xbe, 0x33, + 0xbe, 0x34, 0xbe, 0x35, 0xbe, 0x36, 0xbe, 0x37, + 0xbe, 0x38, 0xbe, 0x39, 0xbe, 0x3a, 0xbe, 0x3b, + 0xbe, 0x3c, 0xbe, 0x3d, 0xbe, 0x3e, 0x26, 0x0d, + 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x9e, + 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, + 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, + 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, + 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, + 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, + 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, + 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, + 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, + 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, + 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, + 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, + 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, + 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, + 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, + 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x65, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x7b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x9c, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x9c, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x4d, + 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, + 0x01, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x3f, 0xbe, 0x40, 0xbe, 0x41, + 0xbe, 0x42, 0xbe, 0x43, 0xbe, 0x44, 0xbe, 0x45, + 0xbe, 0x46, 0xbe, 0x47, 0xbe, 0x48, 0xbe, 0x49, + 0xbe, 0x4a, 0x26, 0x0c, 0x00, 0x4d, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, + 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, + 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, + 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, + 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, + 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, + 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, + 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x83, + 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, + 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, + 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, + 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, + 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, + 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, + 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x65, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, + 0x04, 0x9d, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7d, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, + 0x82, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x45, 0x01, 0x00, 0x00, + 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x65, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7b, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xab, 0x01, 0x00, + 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, + 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, + 0x26, 0x04, 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, + 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, + 0xae, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, + 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, + 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, + 0x26, 0x04, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7e, + 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, + 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x4b, + 0xbe, 0x4c, 0xbe, 0x4d, 0xbe, 0x4e, 0xbe, 0x4f, + 0xbe, 0x50, 0xbe, 0x51, 0xbe, 0x52, 0xbe, 0x53, + 0xbe, 0x54, 0xbe, 0x55, 0xbe, 0x56, 0xbe, 0x57, + 0xbe, 0x58, 0x26, 0x0e, 0x00, 0x4d, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, 0x04, + 0xb4, 0x01, 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, + 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb7, + 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, + 0x04, 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, + 0x00, 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, + 0xbc, 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, + 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, + 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, + 0x26, 0x0e, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, + 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, 0x04, + 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, + 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, 0x04, 0xb9, + 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, + 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, 0x01, + 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, 0x04, + 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, 0x00, + 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, 0x26, 0x0e, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x65, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7b, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xc1, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0xc1, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xc1, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, + 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x4d, + 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0xc2, 0x01, 0x00, 0x00, 0x04, 0xc3, 0x01, + 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, 0x04, + 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, + 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, + 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, + 0x04, 0xca, 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, + 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, + 0xcd, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, + 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, + 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, + 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, + 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, + 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, + 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, 0xd8, + 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xce, 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, + 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, + 0xd1, 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, + 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, + 0x01, 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, + 0x04, 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, + 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, + 0xd9, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x65, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xda, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, 0xda, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7e, + 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, + 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x59, + 0xbe, 0x5a, 0xbe, 0x5b, 0xbe, 0x5c, 0xbe, 0x5d, + 0xbe, 0x5e, 0xbe, 0x5f, 0xbe, 0x60, 0xbe, 0x61, + 0xbe, 0x62, 0xbe, 0x63, 0xbe, 0x64, 0x26, 0x0c, + 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, 0xdb, + 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, + 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, + 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, + 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, + 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, 0xe3, + 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, + 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, + 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, + 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, + 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, + 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, + 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, + 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, + 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x65, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7b, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xf3, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0xf3, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xf3, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, + 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x4d, + 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x65, 0xbe, 0x66, 0xbe, 0x67, 0xbe, 0x68, + 0xbe, 0x69, 0xbe, 0x6a, 0xbe, 0x6b, 0xbe, 0x6c, + 0xbe, 0x6d, 0xbe, 0x6e, 0xbe, 0x6f, 0xbe, 0x70, + 0x26, 0x0c, 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, + 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, + 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, + 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, + 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, + 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, + 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, + 0xe6, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, + 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, + 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, + 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, + 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, + 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, + 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, + 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x65, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x7b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xf3, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xf3, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x4d, + 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, + 0x01, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, + 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x65, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7b, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xf4, 0x01, 0x00, 0x00, + 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, + 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, + 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, + 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, + 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, + 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, + 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, + 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, + 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, 0x04, 0x03, + 0x02, 0x00, 0x00, 0x04, 0x04, 0x02, 0x00, 0x00, + 0x04, 0x05, 0x02, 0x00, 0x00, 0x04, 0x06, 0x02, + 0x00, 0x00, 0x04, 0x07, 0x02, 0x00, 0x00, 0x04, + 0x08, 0x02, 0x00, 0x00, 0x04, 0x09, 0x02, 0x00, + 0x00, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x04, 0x0b, + 0x02, 0x00, 0x00, 0x04, 0x0c, 0x02, 0x00, 0x00, + 0x04, 0x0d, 0x02, 0x00, 0x00, 0x04, 0x0e, 0x02, + 0x00, 0x00, 0x04, 0x0f, 0x02, 0x00, 0x00, 0x04, + 0x10, 0x02, 0x00, 0x00, 0x04, 0x11, 0x02, 0x00, + 0x00, 0x04, 0x12, 0x02, 0x00, 0x00, 0x04, 0x13, + 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, 0x14, + 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, + 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, 0x21, 0x00, + 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, + 0x22, 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, + 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, 0x18, + 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, + 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, + 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, + 0x26, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, + 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, 0x1c, + 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, + 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, + 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, + 0x2a, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, + 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, 0x20, + 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, + 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, + 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, + 0x2e, 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, + 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, 0x24, + 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, + 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, + 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, + 0x32, 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, + 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, 0x28, + 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, + 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, + 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, + 0x36, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, + 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, 0x2c, + 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, + 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, + 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, + 0x3a, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, + 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, 0x30, + 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, + 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, + 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, + 0x3e, 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, + 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, 0x34, + 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, + 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, + 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, + 0x42, 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, + 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, 0x38, + 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, + 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, + 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, + 0x46, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, + 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, 0x3c, + 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, + 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, + 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, + 0x4a, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, + 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, 0x40, + 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, + 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, + 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, + 0x4e, 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, + 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, 0x44, + 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, + 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, + 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, + 0x52, 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, + 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, 0x48, + 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, + 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, + 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, + 0x56, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, + 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, 0x4c, + 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, + 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, + 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, + 0x5a, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, + 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, 0x50, + 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, + 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, + 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, + 0x5e, 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, + 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, 0x54, + 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, + 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, + 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, + 0x62, 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, + 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, 0x58, + 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, + 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, + 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, + 0x66, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, + 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, 0x5c, + 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, + 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, + 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, + 0x6a, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, + 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, 0x60, + 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, + 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, + 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, + 0x6e, 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, + 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, 0x64, + 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, + 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, + 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, + 0x72, 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, + 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, 0x68, + 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, + 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, + 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, + 0x76, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, + 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, 0x6c, + 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, + 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, + 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, + 0x7a, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, + 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, 0x70, + 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, + 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, + 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, + 0x7e, 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, + 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, 0x74, + 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, + 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, + 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, + 0x82, 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, + 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, 0x78, + 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, + 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, + 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, + 0x86, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, + 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, 0x7c, + 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, + 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, + 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, + 0x8a, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, + 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, 0x80, + 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, + 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, + 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, + 0x8e, 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, + 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, 0x84, + 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, + 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, + 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, + 0x92, 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, + 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, 0x88, + 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, + 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, + 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, + 0x96, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, + 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, 0x8c, + 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, + 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, + 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, + 0x9a, 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, + 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, 0x90, + 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, + 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, + 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, + 0x9e, 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, + 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, 0x94, + 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, + 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, + 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, + 0xa2, 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, + 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, 0x98, + 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, + 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, + 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, + 0xa6, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, + 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, 0x9c, + 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, + 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, + 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, + 0xaa, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, + 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, 0xa0, + 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, + 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, + 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, + 0xae, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, + 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, 0xa4, + 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, + 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, + 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, + 0xb2, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, + 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, 0xa8, + 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, + 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, + 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, + 0xb6, 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, + 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, 0xac, + 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, + 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, + 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, + 0xba, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, + 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, 0xb0, + 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, + 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, + 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, + 0xbe, 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, + 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, 0xb4, + 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, + 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, + 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, + 0xc2, 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, + 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, 0xb8, + 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, + 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, + 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, + 0xc6, 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, + 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, 0xbc, + 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, + 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, + 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, + 0xca, 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, + 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, 0xc0, + 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, + 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, + 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, + 0xce, 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, + 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, 0xc4, + 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, + 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, + 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, + 0xd2, 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, + 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, + 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, + 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, + 0xd6, 0x00, 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, + 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, 0xcc, + 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, + 0x04, 0xcd, 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, + 0x00, 0x80, 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, 0xd0, + 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, + 0x04, 0xd1, 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x80, 0x04, 0xd2, 0x02, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x80, 0x04, 0xd3, 0x02, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, 0xd4, + 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, + 0x04, 0xd5, 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x80, 0x04, 0xd6, 0x02, 0x00, 0x00, 0x4d, + 0xe2, 0x00, 0x00, 0x80, 0x04, 0xd7, 0x02, 0x00, + 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, 0xd8, + 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, + 0x04, 0xd9, 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, + 0x00, 0x80, 0x04, 0xda, 0x02, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x80, 0x04, 0xdb, 0x02, 0x00, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, 0x16, + 0x01, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, + 0x04, 0xdc, 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, + 0x00, 0x80, 0x04, 0xdd, 0x02, 0x00, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x80, 0x04, 0x04, 0x01, 0x00, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, + 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, + 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, + 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, + 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, + 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, + 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, + 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, + 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, + 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, 0x04, 0x03, + 0x02, 0x00, 0x00, 0x04, 0x04, 0x02, 0x00, 0x00, + 0x04, 0x05, 0x02, 0x00, 0x00, 0x04, 0x06, 0x02, + 0x00, 0x00, 0x04, 0x07, 0x02, 0x00, 0x00, 0x04, + 0x08, 0x02, 0x00, 0x00, 0x04, 0x09, 0x02, 0x00, + 0x00, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x04, 0x0b, + 0x02, 0x00, 0x00, 0x04, 0x0c, 0x02, 0x00, 0x00, + 0x04, 0x0d, 0x02, 0x00, 0x00, 0x04, 0x0e, 0x02, + 0x00, 0x00, 0x04, 0x0f, 0x02, 0x00, 0x00, 0x04, + 0x10, 0x02, 0x00, 0x00, 0x04, 0x11, 0x02, 0x00, + 0x00, 0x04, 0x12, 0x02, 0x00, 0x00, 0x04, 0x13, + 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, 0x14, + 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, + 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, 0x21, 0x00, + 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, + 0x22, 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, + 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, 0x18, + 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, + 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, + 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, + 0x26, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, + 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, 0x1c, + 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, + 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, + 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, + 0x2a, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, + 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, 0x20, + 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, + 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, + 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, + 0x2e, 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, + 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, 0x24, + 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, + 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, + 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, + 0x32, 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, + 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, 0x28, + 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, + 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, + 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, + 0x36, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, + 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, 0x2c, + 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, + 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, + 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, + 0x3a, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, + 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, 0x30, + 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, + 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, + 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, + 0x3e, 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, + 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, 0x34, + 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, + 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, + 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, + 0x42, 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, + 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, 0x38, + 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, + 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, + 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, + 0x46, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, + 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, 0x3c, + 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, + 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, + 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, + 0x4a, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, + 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, 0x40, + 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, + 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, + 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, + 0x4e, 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, + 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, 0x44, + 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, + 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, + 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, + 0x52, 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, + 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, 0x48, + 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, + 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, + 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, + 0x56, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, + 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, 0x4c, + 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, + 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, + 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, + 0x5a, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, + 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, 0x50, + 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, + 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, + 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, + 0x5e, 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, + 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, 0x54, + 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, + 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, + 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, + 0x62, 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, + 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, 0x58, + 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, + 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, + 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, + 0x66, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, + 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, 0x5c, + 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, + 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, + 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, + 0x6a, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, + 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, 0x60, + 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, + 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, + 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, + 0x6e, 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, + 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, 0x64, + 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, + 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, + 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, + 0x72, 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, + 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, 0x68, + 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, + 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, + 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, + 0x76, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, + 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, 0x6c, + 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, + 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, + 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, + 0x7a, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, + 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, 0x70, + 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, + 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, + 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, + 0x7e, 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, + 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, 0x74, + 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, + 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, + 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, + 0x82, 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, + 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, 0x78, + 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, + 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, + 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, + 0x86, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, + 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, 0x7c, + 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, + 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, + 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, + 0x8a, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, + 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, 0x80, + 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, + 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, + 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, + 0x8e, 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, + 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, 0x84, + 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, + 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, + 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, + 0x92, 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, + 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, 0x88, + 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, + 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, + 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, + 0x96, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, + 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, 0x8c, + 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, + 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, + 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, + 0x9a, 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, + 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, 0x90, + 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, + 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, + 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, + 0x9e, 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, + 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, 0x94, + 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, + 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, + 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, + 0xa2, 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, + 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, 0x98, + 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, + 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, + 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, + 0xa6, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, + 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, 0x9c, + 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, + 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, + 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, + 0xaa, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, + 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, 0xa0, + 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, + 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, + 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, + 0xae, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, + 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, 0xa4, + 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, + 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, + 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, + 0xb2, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, + 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, 0xa8, + 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, + 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, + 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, + 0xb6, 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, + 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, 0xac, + 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, + 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, + 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, + 0xba, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, + 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, 0xb0, + 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, + 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, + 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, + 0xbe, 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, + 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, 0xb4, + 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, + 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, + 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, + 0xc2, 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, + 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, 0xb8, + 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, + 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, + 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, + 0xc6, 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, + 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, 0xbc, + 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, + 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, + 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, + 0xca, 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, + 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, 0xc0, + 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, + 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, + 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, + 0xce, 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, + 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, 0xc4, + 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, + 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, + 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, + 0xd2, 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, + 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, + 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, + 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, + 0xd6, 0x00, 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, + 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, 0xcc, + 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, + 0x04, 0xcd, 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, + 0x00, 0x80, 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, 0xd0, + 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, + 0x04, 0xd1, 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x80, 0x04, 0xd2, 0x02, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x80, 0x04, 0xd3, 0x02, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, 0xd4, + 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, + 0x04, 0xd5, 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x80, 0x04, 0xd6, 0x02, 0x00, 0x00, 0x4d, + 0xe2, 0x00, 0x00, 0x80, 0x04, 0xd7, 0x02, 0x00, + 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, 0xd8, + 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, + 0x04, 0xd9, 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, + 0x00, 0x80, 0x04, 0xda, 0x02, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x80, 0x04, 0xdb, 0x02, 0x00, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, 0xde, + 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, + 0x04, 0xdf, 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, + 0x00, 0x80, 0x04, 0xe0, 0x02, 0x00, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x80, 0x04, 0xe1, 0x02, 0x00, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, + 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, + 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, + 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, + 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, + 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, + 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, + 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, + 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, + 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, 0x04, 0x03, + 0x02, 0x00, 0x00, 0x04, 0x04, 0x02, 0x00, 0x00, + 0x04, 0x05, 0x02, 0x00, 0x00, 0x04, 0x06, 0x02, + 0x00, 0x00, 0x04, 0x07, 0x02, 0x00, 0x00, 0x04, + 0x08, 0x02, 0x00, 0x00, 0x04, 0x09, 0x02, 0x00, + 0x00, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x04, 0x0b, + 0x02, 0x00, 0x00, 0x04, 0x0c, 0x02, 0x00, 0x00, + 0x04, 0x0d, 0x02, 0x00, 0x00, 0x04, 0x0e, 0x02, + 0x00, 0x00, 0x04, 0x0f, 0x02, 0x00, 0x00, 0x04, + 0x10, 0x02, 0x00, 0x00, 0x04, 0x11, 0x02, 0x00, + 0x00, 0x04, 0x12, 0x02, 0x00, 0x00, 0x04, 0x13, + 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, 0x14, + 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, + 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, 0x21, 0x00, + 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, + 0x22, 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, + 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, 0x18, + 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, + 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, + 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, + 0x26, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, + 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, 0x1c, + 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, + 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, + 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, + 0x2a, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, + 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, 0x20, + 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, + 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, + 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, + 0x2e, 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, + 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, 0x24, + 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, + 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, + 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, + 0x32, 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, + 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, 0x28, + 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, + 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, + 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, + 0x36, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, + 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, 0x2c, + 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, + 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, + 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, + 0x3a, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, + 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, 0x30, + 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, + 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, + 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, + 0x3e, 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, + 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, 0x34, + 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, + 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, + 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, + 0x42, 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, + 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, 0x38, + 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, + 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, + 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, + 0x46, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, + 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, 0x3c, + 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, + 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, + 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, + 0x4a, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, + 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, 0x40, + 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, + 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, + 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, + 0x4e, 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, + 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, 0x44, + 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, + 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, + 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, + 0x52, 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, + 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, 0x48, + 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, + 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, + 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, + 0x56, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, + 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, 0x4c, + 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, + 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, + 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, + 0x5a, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, + 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, 0x50, + 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, + 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, + 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, + 0x5e, 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, + 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, 0x54, + 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, + 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, + 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, + 0x62, 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, + 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, 0x58, + 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, + 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, + 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, + 0x66, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, + 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, 0x5c, + 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, + 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, + 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, + 0x6a, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, + 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, 0x60, + 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, + 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, + 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, + 0x6e, 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, + 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, 0x64, + 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, + 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, + 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, + 0x72, 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, + 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, 0x68, + 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, + 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, + 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, + 0x76, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, + 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, 0x6c, + 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, + 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, + 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, + 0x7a, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, + 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, 0x70, + 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, + 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, + 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, + 0x7e, 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, + 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, 0x74, + 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, + 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, + 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, + 0x82, 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, + 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, 0x78, + 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, + 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, + 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, + 0x86, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, + 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, 0x7c, + 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, + 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, + 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, + 0x8a, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, + 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, 0x80, + 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, + 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, + 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, + 0x8e, 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, + 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, 0x84, + 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, + 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, + 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, + 0x92, 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, + 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, 0x88, + 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, + 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, + 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, + 0x96, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, + 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, 0x8c, + 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, + 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, + 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, + 0x9a, 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, + 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, 0x90, + 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, + 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, + 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, + 0x9e, 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, + 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, 0x94, + 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, + 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, + 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, + 0xa2, 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, + 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, 0x98, + 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, + 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, + 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, + 0xa6, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, + 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, 0x9c, + 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, + 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, + 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, + 0xaa, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, + 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, 0xa0, + 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, + 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, + 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, + 0xae, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, + 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, 0xa4, + 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, + 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, + 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, + 0xb2, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, + 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, 0xa8, + 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, + 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, + 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, + 0xb6, 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, + 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, 0xac, + 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, + 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, + 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, + 0xba, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, + 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, 0xb0, + 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, + 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, + 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, + 0xbe, 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, + 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, 0xb4, + 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, + 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, + 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, + 0xc2, 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, + 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, 0xb8, + 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, + 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, + 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, + 0xc6, 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, + 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, 0xbc, + 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, + 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, + 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, + 0xca, 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, + 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, 0xc0, + 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, + 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, + 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, + 0xce, 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, + 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, 0xc4, + 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, + 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, + 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, + 0xd2, 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, + 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, + 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, + 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, + 0xd6, 0x00, 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, + 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, 0xcc, + 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, + 0x04, 0xcd, 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, + 0x00, 0x80, 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, 0xd0, + 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, + 0x04, 0xd1, 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x80, 0x04, 0xd2, 0x02, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x80, 0x04, 0xd3, 0x02, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, 0xd4, + 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, + 0x04, 0xd5, 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x80, 0x04, 0xd6, 0x02, 0x00, 0x00, 0x4d, + 0xe2, 0x00, 0x00, 0x80, 0x04, 0xd7, 0x02, 0x00, + 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, 0xd8, + 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, + 0x04, 0xd9, 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, + 0x00, 0x80, 0x04, 0xda, 0x02, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x80, 0x04, 0xdb, 0x02, 0x00, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, 0xde, + 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, + 0x04, 0xdf, 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, + 0x00, 0x80, 0x04, 0xe0, 0x02, 0x00, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x80, 0x04, 0xe1, 0x02, 0x00, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, + 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x71, 0xbe, 0x72, 0xbe, 0x73, 0xbe, + 0x74, 0xbe, 0x75, 0xbe, 0x76, 0xbe, 0x77, 0xbe, + 0x78, 0xbe, 0x79, 0xbe, 0x7a, 0xbe, 0x7b, 0xbe, + 0x7c, 0x26, 0x0c, 0x00, 0x4d, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0xe2, 0x02, 0x00, 0x00, 0x04, 0xe3, + 0x02, 0x00, 0x00, 0x04, 0xe4, 0x02, 0x00, 0x00, + 0x04, 0xe5, 0x02, 0x00, 0x00, 0x04, 0xe6, 0x02, + 0x00, 0x00, 0x04, 0xe7, 0x02, 0x00, 0x00, 0x04, + 0xe8, 0x02, 0x00, 0x00, 0x04, 0xe9, 0x02, 0x00, + 0x00, 0x04, 0xea, 0x02, 0x00, 0x00, 0x04, 0xeb, + 0x02, 0x00, 0x00, 0x04, 0xec, 0x02, 0x00, 0x00, + 0x04, 0xed, 0x02, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe2, 0x02, + 0x00, 0x00, 0x04, 0xe3, 0x02, 0x00, 0x00, 0x04, + 0xe4, 0x02, 0x00, 0x00, 0x04, 0xe5, 0x02, 0x00, + 0x00, 0x04, 0xe6, 0x02, 0x00, 0x00, 0x04, 0xe7, + 0x02, 0x00, 0x00, 0x04, 0xe8, 0x02, 0x00, 0x00, + 0x04, 0xe9, 0x02, 0x00, 0x00, 0x04, 0xea, 0x02, + 0x00, 0x00, 0x04, 0xeb, 0x02, 0x00, 0x00, 0x04, + 0xec, 0x02, 0x00, 0x00, 0x04, 0xed, 0x02, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x65, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xee, + 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0xee, 0x02, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xee, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7d, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, + 0x82, 0x01, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x45, 0x01, 0x00, 0x00, + 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x65, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7b, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xef, 0x02, 0x00, + 0x00, 0x04, 0xf0, 0x02, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, 0xef, + 0x02, 0x00, 0x00, 0x04, 0xf0, 0x02, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xef, 0x02, 0x00, 0x00, 0x04, 0xf0, 0x02, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, + 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x4d, + 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x4d, 0xf1, + 0x02, 0x00, 0x00, 0x4d, 0xf2, 0x02, 0x00, 0x00, + 0x0b, 0x04, 0xf3, 0x02, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xf4, 0x02, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0xf5, 0x02, 0x00, 0x00, 0x4d, 0xf6, 0x02, + 0x00, 0x00, 0x04, 0xf7, 0x02, 0x00, 0x00, 0x4d, + 0xf8, 0x02, 0x00, 0x00, 0x4d, 0xf9, 0x02, 0x00, + 0x00, 0x0b, 0x04, 0xfa, 0x02, 0x00, 0x00, 0x4d, + 0xf6, 0x02, 0x00, 0x00, 0x04, 0xfb, 0x02, 0x00, + 0x00, 0x4d, 0xf8, 0x02, 0x00, 0x00, 0x4d, 0xfc, + 0x02, 0x00, 0x00, 0x0b, 0x04, 0xfd, 0x02, 0x00, + 0x00, 0x4d, 0xf6, 0x02, 0x00, 0x00, 0x04, 0xfe, + 0x02, 0x00, 0x00, 0x4d, 0xf8, 0x02, 0x00, 0x00, + 0x4d, 0xff, 0x02, 0x00, 0x00, 0xb6, 0x4d, 0x00, + 0x03, 0x00, 0x00, 0x4d, 0x01, 0x03, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x02, 0x03, 0x00, 0x00, 0x4d, + 0xf9, 0x02, 0x00, 0x00, 0x04, 0x03, 0x03, 0x00, + 0x00, 0x4d, 0x04, 0x03, 0x00, 0x00, 0x04, 0x05, + 0x03, 0x00, 0x00, 0x4d, 0x06, 0x03, 0x00, 0x00, + 0x04, 0x07, 0x03, 0x00, 0x00, 0x4d, 0x08, 0x03, + 0x00, 0x00, 0x04, 0x09, 0x03, 0x00, 0x00, 0x4d, + 0x0a, 0x03, 0x00, 0x00, 0x04, 0x0b, 0x03, 0x00, + 0x00, 0x4d, 0x0c, 0x03, 0x00, 0x00, 0x04, 0x0d, + 0x03, 0x00, 0x00, 0x4d, 0x0e, 0x03, 0x00, 0x00, + 0x4d, 0x0f, 0x03, 0x00, 0x00, 0x0b, 0x04, 0x02, + 0x03, 0x00, 0x00, 0x4d, 0xf9, 0x02, 0x00, 0x00, + 0x04, 0x03, 0x03, 0x00, 0x00, 0x4d, 0x04, 0x03, + 0x00, 0x00, 0x04, 0x05, 0x03, 0x00, 0x00, 0x4d, + 0x06, 0x03, 0x00, 0x00, 0x04, 0x07, 0x03, 0x00, + 0x00, 0x4d, 0x08, 0x03, 0x00, 0x00, 0x04, 0x09, + 0x03, 0x00, 0x00, 0x4d, 0x0a, 0x03, 0x00, 0x00, + 0x04, 0x0b, 0x03, 0x00, 0x00, 0x4d, 0x0c, 0x03, + 0x00, 0x00, 0x04, 0x0d, 0x03, 0x00, 0x00, 0x4d, + 0x0e, 0x03, 0x00, 0x00, 0x4d, 0xf3, 0x02, 0x00, + 0x00, 0x4d, 0x10, 0x03, 0x00, 0x00, 0x0b, 0x04, + 0x11, 0x03, 0x00, 0x00, 0x4d, 0x12, 0x03, 0x00, + 0x00, 0x04, 0x13, 0x03, 0x00, 0x00, 0x4d, 0x14, + 0x03, 0x00, 0x00, 0x04, 0x15, 0x03, 0x00, 0x00, + 0x4d, 0x16, 0x03, 0x00, 0x00, 0x04, 0x17, 0x03, + 0x00, 0x00, 0x4d, 0x18, 0x03, 0x00, 0x00, 0x04, + 0x19, 0x03, 0x00, 0x00, 0x4d, 0x1a, 0x03, 0x00, + 0x00, 0x04, 0x1b, 0x03, 0x00, 0x00, 0x4d, 0x1c, + 0x03, 0x00, 0x00, 0x04, 0x1d, 0x03, 0x00, 0x00, + 0x4d, 0x1e, 0x03, 0x00, 0x00, 0x04, 0x1f, 0x03, + 0x00, 0x00, 0x4d, 0x20, 0x03, 0x00, 0x00, 0x04, + 0x21, 0x03, 0x00, 0x00, 0x4d, 0x22, 0x03, 0x00, + 0x00, 0x04, 0x23, 0x03, 0x00, 0x00, 0x4d, 0x24, + 0x03, 0x00, 0x00, 0x04, 0x25, 0x03, 0x00, 0x00, + 0x4d, 0x26, 0x03, 0x00, 0x00, 0x04, 0x27, 0x03, + 0x00, 0x00, 0x4d, 0x28, 0x03, 0x00, 0x00, 0x04, + 0x29, 0x03, 0x00, 0x00, 0x4d, 0x2a, 0x03, 0x00, + 0x00, 0x04, 0x2b, 0x03, 0x00, 0x00, 0x4d, 0x2c, + 0x03, 0x00, 0x00, 0x04, 0x2d, 0x03, 0x00, 0x00, + 0x4d, 0x2e, 0x03, 0x00, 0x00, 0x04, 0x2f, 0x03, + 0x00, 0x00, 0x4d, 0x30, 0x03, 0x00, 0x00, 0x04, + 0x31, 0x03, 0x00, 0x00, 0x4d, 0x32, 0x03, 0x00, + 0x00, 0x04, 0x33, 0x03, 0x00, 0x00, 0x4d, 0x34, + 0x03, 0x00, 0x00, 0x04, 0x35, 0x03, 0x00, 0x00, + 0x4d, 0x36, 0x03, 0x00, 0x00, 0x04, 0x37, 0x03, + 0x00, 0x00, 0x4d, 0x38, 0x03, 0x00, 0x00, 0x04, + 0x39, 0x03, 0x00, 0x00, 0x4d, 0x3a, 0x03, 0x00, + 0x00, 0x4d, 0x3b, 0x03, 0x00, 0x00, 0x4d, 0x45, + 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, 0xcc, 0x28, + 0xf8, 0x0c, 0x01, 0x00, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_pl_size = 24638; + +const uint8_t intl_pl[24638] = { + 0x01, 0xc2, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x70, 0x6c, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x10, + 0x7b, 0x31, 0x7d, 0x2c, 0x20, 0x7b, 0x30, 0x7d, + 0x0a, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, + 0x65, 0x64, 0x69, 0x75, 0x6d, 0x0e, 0x7b, 0x31, + 0x7d, 0x20, 0x7b, 0x30, 0x7d, 0x08, 0x66, 0x75, + 0x6c, 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x02, + 0x64, 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, 0x08, + 0x45, 0x2c, 0x20, 0x64, 0x04, 0x45, 0x64, 0x12, + 0x45, 0x2c, 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x20, + 0x61, 0x06, 0x45, 0x68, 0x6d, 0x10, 0x45, 0x2c, + 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x06, 0x45, + 0x48, 0x6d, 0x18, 0x45, 0x2c, 0x20, 0x68, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x08, + 0x45, 0x68, 0x6d, 0x73, 0x16, 0x45, 0x2c, 0x20, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x08, 0x45, 0x48, 0x6d, 0x73, 0x06, 0x79, 0x20, + 0x47, 0x04, 0x47, 0x79, 0x0e, 0x4d, 0x4d, 0x4d, + 0x20, 0x79, 0x20, 0x47, 0x0a, 0x47, 0x79, 0x4d, + 0x4d, 0x4d, 0x10, 0x64, 0x2e, 0x4d, 0x4d, 0x2e, + 0x79, 0x20, 0x47, 0x0c, 0x47, 0x79, 0x4d, 0x4d, + 0x4d, 0x64, 0x18, 0x45, 0x2c, 0x20, 0x64, 0x20, + 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x20, 0x47, 0x0e, + 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x10, + 0x4c, 0x4c, 0x4c, 0x4c, 0x20, 0x79, 0x20, 0x47, + 0x0c, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x14, + 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, + 0x20, 0x47, 0x0e, 0x47, 0x79, 0x4d, 0x4d, 0x4d, + 0x4d, 0x64, 0x1a, 0x45, 0x2c, 0x20, 0x64, 0x20, + 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x20, 0x47, + 0x10, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x45, + 0x64, 0x06, 0x68, 0x20, 0x61, 0x02, 0x68, 0x04, + 0x48, 0x48, 0x02, 0x48, 0x0c, 0x68, 0x3a, 0x6d, + 0x6d, 0x20, 0x61, 0x04, 0x68, 0x6d, 0x0a, 0x48, + 0x48, 0x3a, 0x6d, 0x6d, 0x04, 0x48, 0x6d, 0x12, + 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, + 0x61, 0x06, 0x68, 0x6d, 0x73, 0x10, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x06, 0x48, + 0x6d, 0x73, 0x16, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x20, 0x61, 0x20, 0x76, 0x08, 0x68, + 0x6d, 0x73, 0x76, 0x14, 0x48, 0x48, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x76, 0x08, 0x48, + 0x6d, 0x73, 0x76, 0x10, 0x68, 0x3a, 0x6d, 0x6d, + 0x20, 0x61, 0x20, 0x76, 0x06, 0x68, 0x6d, 0x76, + 0x0e, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x20, 0x76, + 0x06, 0x48, 0x6d, 0x76, 0x02, 0x4c, 0x02, 0x4d, + 0x08, 0x64, 0x2e, 0x4d, 0x4d, 0x04, 0x4d, 0x64, + 0x0e, 0x45, 0x2c, 0x20, 0x64, 0x2e, 0x4d, 0x4d, + 0x06, 0x4d, 0x45, 0x64, 0x06, 0x4c, 0x4c, 0x4c, + 0x06, 0x4d, 0x4d, 0x4d, 0x08, 0x4d, 0x4d, 0x4d, + 0x64, 0x0a, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0c, + 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, 0x4d, + 0x4d, 0x4d, 0x4d, 0x64, 0x12, 0x45, 0x2c, 0x20, + 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x0c, 0x4d, + 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x04, 0x6d, 0x73, 0x02, 0x79, + 0x08, 0x4d, 0x4d, 0x2e, 0x79, 0x04, 0x79, 0x4d, + 0x0c, 0x64, 0x2e, 0x4d, 0x4d, 0x2e, 0x79, 0x06, + 0x79, 0x4d, 0x64, 0x12, 0x45, 0x2c, 0x20, 0x64, + 0x2e, 0x4d, 0x4d, 0x2e, 0x79, 0x08, 0x79, 0x4d, + 0x45, 0x64, 0x08, 0x79, 0x4d, 0x4d, 0x4d, 0x0a, + 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x0c, 0x79, 0x4d, + 0x4d, 0x4d, 0x45, 0x64, 0x0c, 0x4c, 0x4c, 0x4c, + 0x4c, 0x20, 0x79, 0x0a, 0x79, 0x4d, 0x4d, 0x4d, + 0x4d, 0x10, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, + 0x20, 0x79, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, + 0x64, 0x16, 0x45, 0x2c, 0x20, 0x64, 0x20, 0x4d, + 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0e, 0x79, 0x4d, + 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0a, 0x51, 0x51, + 0x51, 0x20, 0x79, 0x08, 0x79, 0x51, 0x51, 0x51, + 0x0c, 0x51, 0x51, 0x51, 0x51, 0x20, 0x79, 0x0a, + 0x79, 0x51, 0x51, 0x51, 0x51, 0x20, 0x61, 0x76, + 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x1c, 0x45, + 0x45, 0x45, 0x45, 0x2c, 0x20, 0x64, 0x20, 0x4d, + 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x14, 0x79, 0x4d, + 0x4d, 0x4d, 0x4d, 0x45, 0x45, 0x45, 0x45, 0x64, + 0x0e, 0x64, 0x64, 0x2e, 0x4d, 0x4d, 0x2e, 0x79, + 0x16, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x73, 0x1a, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x7a, 0x7a, + 0x7a, 0x7a, 0x12, 0x68, 0x6d, 0x6d, 0x73, 0x73, + 0x7a, 0x7a, 0x7a, 0x7a, 0x14, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x7a, 0x08, + 0x68, 0x6d, 0x73, 0x7a, 0x16, 0x74, 0x69, 0x6d, + 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, + 0x0e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, + 0x02, 0x73, 0x02, 0x6c, 0x02, 0x6d, 0x02, 0x6b, + 0x02, 0x63, 0x02, 0x77, 0x02, 0x70, 0x02, 0x67, + 0x0c, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x06, + 0x73, 0x74, 0x79, 0x06, 0x6c, 0x75, 0x74, 0x06, + 0x6d, 0x61, 0x72, 0x06, 0x6b, 0x77, 0x69, 0x06, + 0x6d, 0x61, 0x6a, 0x06, 0x63, 0x7a, 0x65, 0x06, + 0x6c, 0x69, 0x70, 0x06, 0x73, 0x69, 0x65, 0x06, + 0x77, 0x72, 0x7a, 0x07, 0x70, 0x00, 0x61, 0x00, + 0x7a, 0x01, 0x06, 0x6c, 0x69, 0x73, 0x06, 0x67, + 0x72, 0x75, 0x10, 0x73, 0x74, 0x79, 0x63, 0x7a, + 0x6e, 0x69, 0x61, 0x0c, 0x6c, 0x75, 0x74, 0x65, + 0x67, 0x6f, 0x0a, 0x6d, 0x61, 0x72, 0x63, 0x61, + 0x10, 0x6b, 0x77, 0x69, 0x65, 0x74, 0x6e, 0x69, + 0x61, 0x08, 0x6d, 0x61, 0x6a, 0x61, 0x0e, 0x63, + 0x7a, 0x65, 0x72, 0x77, 0x63, 0x61, 0x0a, 0x6c, + 0x69, 0x70, 0x63, 0x61, 0x10, 0x73, 0x69, 0x65, + 0x72, 0x70, 0x6e, 0x69, 0x61, 0x11, 0x77, 0x00, + 0x72, 0x00, 0x7a, 0x00, 0x65, 0x00, 0x5b, 0x01, + 0x6e, 0x00, 0x69, 0x00, 0x61, 0x00, 0x19, 0x70, + 0x00, 0x61, 0x00, 0x7a, 0x01, 0x64, 0x00, 0x7a, + 0x00, 0x69, 0x00, 0x65, 0x00, 0x72, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x12, + 0x6c, 0x69, 0x73, 0x74, 0x6f, 0x70, 0x61, 0x64, + 0x61, 0x0e, 0x67, 0x72, 0x75, 0x64, 0x6e, 0x69, + 0x61, 0x0c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x73, + 0x02, 0x4e, 0x02, 0x50, 0x02, 0x57, 0x03, 0x5a, + 0x01, 0x02, 0x43, 0x02, 0x53, 0x0c, 0x6e, 0x69, + 0x65, 0x64, 0x7a, 0x2e, 0x08, 0x70, 0x6f, 0x6e, + 0x2e, 0x06, 0x77, 0x74, 0x2e, 0x07, 0x5b, 0x01, + 0x72, 0x00, 0x2e, 0x00, 0x08, 0x63, 0x7a, 0x77, + 0x2e, 0x06, 0x70, 0x74, 0x2e, 0x08, 0x73, 0x6f, + 0x62, 0x2e, 0x12, 0x6e, 0x69, 0x65, 0x64, 0x7a, + 0x69, 0x65, 0x6c, 0x61, 0x19, 0x70, 0x00, 0x6f, + 0x00, 0x6e, 0x00, 0x69, 0x00, 0x65, 0x00, 0x64, + 0x00, 0x7a, 0x00, 0x69, 0x00, 0x61, 0x00, 0x42, + 0x01, 0x65, 0x00, 0x6b, 0x00, 0x0c, 0x77, 0x74, + 0x6f, 0x72, 0x65, 0x6b, 0x0b, 0x5b, 0x01, 0x72, + 0x00, 0x6f, 0x00, 0x64, 0x00, 0x61, 0x00, 0x10, + 0x63, 0x7a, 0x77, 0x61, 0x72, 0x74, 0x65, 0x6b, + 0x0d, 0x70, 0x00, 0x69, 0x00, 0x05, 0x01, 0x74, + 0x00, 0x65, 0x00, 0x6b, 0x00, 0x0c, 0x73, 0x6f, + 0x62, 0x6f, 0x74, 0x61, 0x08, 0x64, 0x61, 0x79, + 0x73, 0x04, 0x42, 0x45, 0x08, 0x65, 0x72, 0x61, + 0x73, 0x04, 0x41, 0x4d, 0x04, 0x61, 0x6d, 0x04, + 0x50, 0x4d, 0x04, 0x70, 0x6d, 0x14, 0x64, 0x61, + 0x79, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x73, + 0x06, 0x4d, 0x30, 0x31, 0x06, 0x4d, 0x30, 0x32, + 0x06, 0x4d, 0x30, 0x33, 0x06, 0x4d, 0x30, 0x34, + 0x06, 0x4d, 0x30, 0x35, 0x06, 0x4d, 0x30, 0x36, + 0x06, 0x4d, 0x30, 0x37, 0x06, 0x4d, 0x30, 0x38, + 0x06, 0x4d, 0x30, 0x39, 0x06, 0x4d, 0x31, 0x30, + 0x06, 0x4d, 0x31, 0x31, 0x06, 0x4d, 0x31, 0x32, + 0x08, 0x54, 0x6f, 0x75, 0x74, 0x08, 0x42, 0x61, + 0x62, 0x61, 0x0a, 0x48, 0x61, 0x74, 0x6f, 0x72, + 0x0a, 0x4b, 0x69, 0x61, 0x68, 0x6b, 0x08, 0x54, + 0x6f, 0x62, 0x61, 0x0c, 0x41, 0x6d, 0x73, 0x68, + 0x69, 0x72, 0x10, 0x42, 0x61, 0x72, 0x61, 0x6d, + 0x68, 0x61, 0x74, 0x12, 0x42, 0x61, 0x72, 0x61, + 0x6d, 0x6f, 0x75, 0x64, 0x61, 0x0e, 0x42, 0x61, + 0x73, 0x68, 0x61, 0x6e, 0x73, 0x0a, 0x50, 0x61, + 0x6f, 0x6e, 0x61, 0x08, 0x45, 0x70, 0x65, 0x70, + 0x0a, 0x4d, 0x65, 0x73, 0x72, 0x61, 0x0a, 0x4e, + 0x61, 0x73, 0x69, 0x65, 0x08, 0x45, 0x52, 0x41, + 0x30, 0x08, 0x45, 0x52, 0x41, 0x31, 0x10, 0x4d, + 0x65, 0x73, 0x6b, 0x65, 0x72, 0x65, 0x6d, 0x0c, + 0x54, 0x65, 0x6b, 0x65, 0x6d, 0x74, 0x0a, 0x48, + 0x65, 0x64, 0x61, 0x72, 0x0c, 0x54, 0x61, 0x68, + 0x73, 0x61, 0x73, 0x06, 0x54, 0x65, 0x72, 0x0e, + 0x59, 0x65, 0x6b, 0x61, 0x74, 0x69, 0x74, 0x0e, + 0x4d, 0x65, 0x67, 0x61, 0x62, 0x69, 0x74, 0x0c, + 0x4d, 0x69, 0x61, 0x7a, 0x69, 0x61, 0x0c, 0x47, + 0x65, 0x6e, 0x62, 0x6f, 0x74, 0x08, 0x53, 0x65, + 0x6e, 0x65, 0x0a, 0x48, 0x61, 0x6d, 0x6c, 0x65, + 0x0e, 0x4e, 0x65, 0x68, 0x61, 0x73, 0x73, 0x65, + 0x0e, 0x50, 0x61, 0x67, 0x75, 0x6d, 0x65, 0x6e, + 0x0c, 0x70, 0x2e, 0x6e, 0x2e, 0x65, 0x2e, 0x08, + 0x6e, 0x2e, 0x65, 0x2e, 0x06, 0x42, 0x43, 0x45, + 0x04, 0x43, 0x45, 0x0c, 0x54, 0x69, 0x73, 0x7a, + 0x72, 0x69, 0x10, 0x43, 0x68, 0x65, 0x73, 0x7a, + 0x77, 0x61, 0x6e, 0x0c, 0x4b, 0x69, 0x73, 0x6c, + 0x65, 0x77, 0x0a, 0x54, 0x65, 0x77, 0x65, 0x74, + 0x0a, 0x53, 0x7a, 0x77, 0x61, 0x74, 0x0c, 0x41, + 0x64, 0x61, 0x72, 0x20, 0x49, 0x08, 0x41, 0x64, + 0x61, 0x72, 0x0a, 0x4e, 0x69, 0x73, 0x61, 0x6e, + 0x08, 0x49, 0x6a, 0x61, 0x72, 0x0a, 0x53, 0x69, + 0x77, 0x61, 0x6e, 0x0a, 0x54, 0x61, 0x6d, 0x75, + 0x7a, 0x04, 0x41, 0x77, 0x08, 0x45, 0x6c, 0x75, + 0x6c, 0x0e, 0x41, 0x64, 0x61, 0x72, 0x20, 0x49, + 0x49, 0x0e, 0x43, 0x68, 0x61, 0x69, 0x74, 0x72, + 0x61, 0x10, 0x56, 0x61, 0x69, 0x73, 0x61, 0x6b, + 0x68, 0x61, 0x10, 0x4a, 0x79, 0x61, 0x69, 0x73, + 0x74, 0x68, 0x61, 0x0c, 0x41, 0x73, 0x61, 0x64, + 0x68, 0x61, 0x0e, 0x53, 0x72, 0x61, 0x76, 0x61, + 0x6e, 0x61, 0x0c, 0x42, 0x68, 0x61, 0x64, 0x72, + 0x61, 0x0c, 0x41, 0x73, 0x76, 0x69, 0x6e, 0x61, + 0x0e, 0x4b, 0x61, 0x72, 0x74, 0x69, 0x6b, 0x61, + 0x14, 0x41, 0x67, 0x72, 0x61, 0x68, 0x61, 0x79, + 0x61, 0x6e, 0x61, 0x0a, 0x50, 0x61, 0x75, 0x73, + 0x61, 0x0a, 0x4d, 0x61, 0x67, 0x68, 0x61, 0x10, + 0x50, 0x68, 0x61, 0x6c, 0x67, 0x75, 0x6e, 0x61, + 0x08, 0x53, 0x61, 0x6b, 0x61, 0x08, 0x4d, 0x75, + 0x68, 0x2e, 0x08, 0x53, 0x61, 0x66, 0x2e, 0x0c, + 0x52, 0x61, 0x62, 0x2e, 0x20, 0x49, 0x0e, 0x52, + 0x61, 0x62, 0x2e, 0x20, 0x49, 0x49, 0x0d, 0x44, + 0x00, 0x7c, 0x01, 0x75, 0x00, 0x2e, 0x00, 0x20, + 0x00, 0x49, 0x00, 0x0f, 0x44, 0x00, 0x7c, 0x01, + 0x75, 0x00, 0x2e, 0x00, 0x20, 0x00, 0x49, 0x00, + 0x49, 0x00, 0x06, 0x52, 0x61, 0x2e, 0x08, 0x53, + 0x7a, 0x61, 0x2e, 0x08, 0x52, 0x61, 0x6d, 0x2e, + 0x0a, 0x53, 0x7a, 0x61, 0x77, 0x2e, 0x10, 0x5a, + 0x75, 0x20, 0x61, 0x6c, 0x2d, 0x6b, 0x2e, 0x10, + 0x5a, 0x75, 0x20, 0x61, 0x6c, 0x2d, 0x68, 0x2e, + 0x10, 0x4d, 0x75, 0x68, 0x61, 0x72, 0x72, 0x61, + 0x6d, 0x0a, 0x53, 0x61, 0x66, 0x61, 0x72, 0x0f, + 0x52, 0x00, 0x61, 0x00, 0x62, 0x00, 0x69, 0x00, + 0xbb, 0x02, 0x20, 0x00, 0x49, 0x00, 0x11, 0x52, + 0x00, 0x61, 0x00, 0x62, 0x00, 0x69, 0x00, 0xbb, + 0x02, 0x20, 0x00, 0x49, 0x00, 0x49, 0x00, 0x13, + 0x44, 0x00, 0x7c, 0x01, 0x75, 0x00, 0x6d, 0x00, + 0x61, 0x00, 0x64, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x49, 0x00, 0x15, 0x44, 0x00, 0x7c, 0x01, 0x75, + 0x00, 0x6d, 0x00, 0x61, 0x00, 0x64, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x49, 0x00, 0x49, 0x00, 0x0d, + 0x52, 0x00, 0x61, 0x00, 0x64, 0x00, 0x7c, 0x01, + 0x61, 0x00, 0x62, 0x00, 0x0c, 0x53, 0x7a, 0x61, + 0x62, 0x61, 0x6e, 0x0e, 0x52, 0x61, 0x6d, 0x61, + 0x64, 0x61, 0x6e, 0x0e, 0x53, 0x7a, 0x61, 0x77, + 0x77, 0x61, 0x6c, 0x14, 0x5a, 0x75, 0x20, 0x61, + 0x6c, 0x2d, 0x6b, 0x61, 0x64, 0x61, 0x1b, 0x5a, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x61, 0x00, 0x6c, + 0x00, 0x2d, 0x00, 0x68, 0x00, 0x69, 0x00, 0x64, + 0x00, 0x7c, 0x01, 0x64, 0x00, 0x7c, 0x01, 0x61, + 0x00, 0x04, 0x41, 0x48, 0x1f, 0x54, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x36, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x36, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x13, 0x20, 0x36, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x36, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x29, 0x00, 0x21, + 0x53, 0x00, 0x68, 0x00, 0x75, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x57, + 0x00, 0x61, 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x1f, 0x52, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x1d, 0x59, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, + 0x4a, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6b, 0x00, + 0x61, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x2d, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x2d, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x2b, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x2d, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, 0x2d, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x2a, 0x4a, 0x69, 0x6e, 0x67, 0x6f, 0x2d, + 0x6b, 0x65, 0x69, 0x75, 0x6e, 0x20, 0x28, 0x37, + 0x36, 0x37, 0x2d, 0x37, 0x37, 0x30, 0x29, 0x1d, + 0x48, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x37, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, 0x44, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x64, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x38, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x4d, 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x38, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4a, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x61, 0x00, 0x6a, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, + 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x53, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x20, 0x54, 0x65, + 0x6e, 0x2d, 0x61, 0x6e, 0x20, 0x28, 0x38, 0x35, + 0x37, 0x2d, 0x38, 0x35, 0x39, 0x29, 0x1f, 0x4a, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, + 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, 0x6e, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x34, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1b, 0x4c, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4b, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x1d, 0x41, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1d, + 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x4a, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x29, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, + 0x4a, 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x29, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, + 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4c, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x25, 0x4a, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x24, 0x54, 0x65, 0x6e, 0x2d, 0x65, 0x69, + 0x20, 0x28, 0x31, 0x31, 0x31, 0x30, 0x2d, 0x31, + 0x31, 0x31, 0x33, 0x29, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, + 0x4d, 0x01, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, + 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x6a, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x48, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x45, + 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, + 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6d, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4a, + 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x59, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x21, 0x4a, 0x00, 0x75, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x29, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4a, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x29, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, + 0x4a, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x27, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x75, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x29, 0x52, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x4e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, + 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, 0x00, + 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1f, 0x4c, 0x01, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x74, 0x00, 0x73, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x27, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x45, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x21, 0x4d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, 0x69, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x27, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x21, 0x45, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x61, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x41, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, 0x02, + 0x54, 0x0a, 0x4d, 0x65, 0x69, 0x6a, 0x69, 0x0d, + 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x0b, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x0c, + 0x48, 0x65, 0x69, 0x73, 0x65, 0x69, 0x12, 0x46, + 0x61, 0x72, 0x77, 0x61, 0x72, 0x64, 0x69, 0x6e, + 0x16, 0x4f, 0x72, 0x64, 0x69, 0x62, 0x65, 0x68, + 0x65, 0x73, 0x7a, 0x74, 0x0f, 0x43, 0x00, 0x68, + 0x00, 0x6f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x01, + 0x01, 0x64, 0x00, 0x06, 0x54, 0x69, 0x72, 0x0d, + 0x4d, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x64, 0x00, + 0x01, 0x01, 0x64, 0x00, 0x12, 0x53, 0x7a, 0x61, + 0x68, 0x72, 0x69, 0x77, 0x61, 0x72, 0x08, 0x4d, + 0x65, 0x68, 0x72, 0x09, 0x00, 0x01, 0x62, 0x00, + 0x01, 0x01, 0x6e, 0x00, 0x09, 0x00, 0x01, 0x73, + 0x00, 0x61, 0x00, 0x72, 0x00, 0x06, 0x44, 0xe9, + 0x69, 0x0c, 0x42, 0x61, 0x68, 0x6d, 0x61, 0x6e, + 0x0c, 0x45, 0x73, 0x66, 0x61, 0x6e, 0x64, 0x04, + 0x41, 0x50, 0x12, 0x50, 0x72, 0x7a, 0x65, 0x64, + 0x20, 0x52, 0x4f, 0x43, 0x06, 0x52, 0x4f, 0x43, + 0x12, 0x63, 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, + 0x72, 0x73, 0x08, 0x64, 0x61, 0x74, 0x65, 0x08, + 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, 0x75, 0x10, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0x1e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, + 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, + 0x26, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x6e, 0x65, 0x67, + 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, + 0x74, 0x65, 0x72, 0x6e, 0x0e, 0x64, 0x65, 0x63, + 0x69, 0x6d, 0x61, 0x6c, 0x26, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0xa0, 0x7b, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, + 0x3c, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0xa0, 0x7b, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, 0x10, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, + 0x2a, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, + 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x40, 0x7b, + 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, + 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x0e, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x10, + 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, + 0x02, 0x2c, 0x02, 0xa0, 0x0a, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x06, 0x4e, 0x61, 0x4e, 0x06, 0x6e, + 0x61, 0x6e, 0x02, 0x2b, 0x10, 0x70, 0x6c, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, 0x2d, 0x12, + 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x02, 0x25, 0x16, 0x70, 0x65, 0x72, 0x63, + 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x03, + 0x1e, 0x22, 0x10, 0x69, 0x6e, 0x66, 0x69, 0x6e, + 0x69, 0x74, 0x79, 0x0e, 0x73, 0x79, 0x6d, 0x62, + 0x6f, 0x6c, 0x73, 0x04, 0x52, 0x24, 0x06, 0x42, + 0x52, 0x4c, 0x03, 0xac, 0x20, 0x06, 0x45, 0x55, + 0x52, 0x05, 0x7a, 0x00, 0x42, 0x01, 0x06, 0x50, + 0x4c, 0x4e, 0x08, 0x46, 0x43, 0x46, 0x41, 0x06, + 0x58, 0x41, 0x46, 0x06, 0x45, 0x43, 0x24, 0x06, + 0x58, 0x43, 0x44, 0x06, 0x43, 0x46, 0x41, 0x06, + 0x58, 0x4f, 0x46, 0x08, 0x43, 0x46, 0x50, 0x46, + 0x06, 0x58, 0x50, 0x46, 0x14, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x52, + 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, + 0x6c, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, + 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x6a, 0x73, + 0x6f, 0x6e, 0x70, 0x2f, 0x70, 0x6c, 0x2e, 0x6a, + 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, + 0x01, 0x00, 0x27, 0x00, 0xa1, 0x01, 0xc6, 0x69, + 0x01, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x39, 0xd0, + 0x00, 0x00, 0x00, 0x43, 0xd1, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xd2, 0x00, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd4, 0x00, 0x00, + 0x00, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x04, 0xd6, + 0x00, 0x00, 0x00, 0x04, 0xd7, 0x00, 0x00, 0x00, + 0x04, 0xd8, 0x00, 0x00, 0x00, 0x04, 0xd9, 0x00, + 0x00, 0x00, 0x04, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xdb, 0x00, 0x00, 0x00, 0x04, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x04, 0xde, + 0x00, 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, + 0x04, 0xe0, 0x00, 0x00, 0x00, 0x04, 0xe1, 0x00, + 0x00, 0x00, 0x04, 0xe2, 0x00, 0x00, 0x00, 0x26, + 0x0f, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x0a, + 0x4d, 0xe4, 0x00, 0x00, 0x00, 0x09, 0x4d, 0xe5, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, 0x00, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe6, + 0x00, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x00, + 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xec, 0x00, + 0x00, 0x00, 0x4d, 0xec, 0x00, 0x00, 0x00, 0x04, + 0xed, 0x00, 0x00, 0x00, 0x4d, 0xee, 0x00, 0x00, + 0x00, 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, 0xf0, + 0x00, 0x00, 0x00, 0x04, 0xf1, 0x00, 0x00, 0x00, + 0x4d, 0xf2, 0x00, 0x00, 0x00, 0x04, 0xf3, 0x00, + 0x00, 0x00, 0x4d, 0xf4, 0x00, 0x00, 0x00, 0x04, + 0xf5, 0x00, 0x00, 0x00, 0x4d, 0xf6, 0x00, 0x00, + 0x00, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xf8, + 0x00, 0x00, 0x00, 0x04, 0xf9, 0x00, 0x00, 0x00, + 0x4d, 0xfa, 0x00, 0x00, 0x00, 0x04, 0xfb, 0x00, + 0x00, 0x00, 0x4d, 0xfc, 0x00, 0x00, 0x00, 0x04, + 0xfd, 0x00, 0x00, 0x00, 0x4d, 0xfe, 0x00, 0x00, + 0x00, 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x01, 0x00, 0x00, 0x04, 0x01, 0x01, 0x00, 0x00, + 0x4d, 0x02, 0x01, 0x00, 0x00, 0x04, 0x03, 0x01, + 0x00, 0x00, 0x4d, 0x04, 0x01, 0x00, 0x00, 0x04, + 0x05, 0x01, 0x00, 0x00, 0x4d, 0x06, 0x01, 0x00, + 0x00, 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0x08, + 0x01, 0x00, 0x00, 0x04, 0x09, 0x01, 0x00, 0x00, + 0x4d, 0x0a, 0x01, 0x00, 0x00, 0x04, 0x0b, 0x01, + 0x00, 0x00, 0x4d, 0x0c, 0x01, 0x00, 0x00, 0x04, + 0x0d, 0x01, 0x00, 0x00, 0x4d, 0x0e, 0x01, 0x00, + 0x00, 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, 0x10, + 0x01, 0x00, 0x00, 0x04, 0x11, 0x01, 0x00, 0x00, + 0x4d, 0x12, 0x01, 0x00, 0x00, 0x04, 0x13, 0x01, + 0x00, 0x00, 0x4d, 0x14, 0x01, 0x00, 0x00, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x4d, 0x16, 0x01, 0x00, + 0x00, 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, 0x18, + 0x01, 0x00, 0x00, 0x04, 0x19, 0x01, 0x00, 0x00, + 0x4d, 0x1a, 0x01, 0x00, 0x00, 0x04, 0x1b, 0x01, + 0x00, 0x00, 0x4d, 0x1c, 0x01, 0x00, 0x00, 0x04, + 0x1d, 0x01, 0x00, 0x00, 0x4d, 0x1e, 0x01, 0x00, + 0x00, 0x04, 0x1f, 0x01, 0x00, 0x00, 0x4d, 0x20, + 0x01, 0x00, 0x00, 0x04, 0x21, 0x01, 0x00, 0x00, + 0x4d, 0x22, 0x01, 0x00, 0x00, 0x04, 0x1d, 0x01, + 0x00, 0x00, 0x4d, 0x23, 0x01, 0x00, 0x00, 0x04, + 0x1f, 0x01, 0x00, 0x00, 0x4d, 0x24, 0x01, 0x00, + 0x00, 0x04, 0x25, 0x01, 0x00, 0x00, 0x4d, 0x26, + 0x01, 0x00, 0x00, 0x04, 0x27, 0x01, 0x00, 0x00, + 0x4d, 0x28, 0x01, 0x00, 0x00, 0x04, 0x29, 0x01, + 0x00, 0x00, 0x4d, 0x2a, 0x01, 0x00, 0x00, 0x04, + 0x2b, 0x01, 0x00, 0x00, 0x4d, 0x2b, 0x01, 0x00, + 0x00, 0x04, 0x2c, 0x01, 0x00, 0x00, 0x4d, 0x2d, + 0x01, 0x00, 0x00, 0x04, 0x2e, 0x01, 0x00, 0x00, + 0x4d, 0x2f, 0x01, 0x00, 0x00, 0x04, 0x30, 0x01, + 0x00, 0x00, 0x4d, 0x31, 0x01, 0x00, 0x00, 0x04, + 0x2c, 0x01, 0x00, 0x00, 0x4d, 0x32, 0x01, 0x00, + 0x00, 0x04, 0x2e, 0x01, 0x00, 0x00, 0x4d, 0x33, + 0x01, 0x00, 0x00, 0x04, 0x30, 0x01, 0x00, 0x00, + 0x4d, 0x34, 0x01, 0x00, 0x00, 0x04, 0x35, 0x01, + 0x00, 0x00, 0x4d, 0x36, 0x01, 0x00, 0x00, 0x04, + 0x37, 0x01, 0x00, 0x00, 0x4d, 0x38, 0x01, 0x00, + 0x00, 0x04, 0x39, 0x01, 0x00, 0x00, 0x4d, 0x3a, + 0x01, 0x00, 0x00, 0x04, 0x3b, 0x01, 0x00, 0x00, + 0x4d, 0x3c, 0x01, 0x00, 0x00, 0x04, 0x3d, 0x01, + 0x00, 0x00, 0x4d, 0x3e, 0x01, 0x00, 0x00, 0x4d, + 0x3f, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x40, 0x01, + 0x00, 0x00, 0x4d, 0x41, 0x01, 0x00, 0x00, 0x04, + 0x37, 0x01, 0x00, 0x00, 0x4d, 0x38, 0x01, 0x00, + 0x00, 0x04, 0x42, 0x01, 0x00, 0x00, 0x4d, 0x33, + 0x01, 0x00, 0x00, 0x04, 0x42, 0x01, 0x00, 0x00, + 0x4d, 0x2f, 0x01, 0x00, 0x00, 0x4d, 0x43, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x44, 0x01, 0x00, 0x00, + 0x4d, 0x45, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x4d, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x11, 0x01, 0x00, 0x00, 0x4d, 0x10, 0x01, 0x00, + 0x00, 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, 0x0c, + 0x01, 0x00, 0x00, 0x4d, 0x48, 0x01, 0x00, 0x00, + 0x4d, 0x49, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x0b, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, + 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x81, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x82, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x83, + 0x01, 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, + 0x04, 0x85, 0x01, 0x00, 0x00, 0x4d, 0x86, 0x01, + 0x00, 0x00, 0x4d, 0x87, 0x01, 0x00, 0x00, 0x4d, + 0xd5, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x00, + 0xbe, 0x01, 0xbe, 0x02, 0xbe, 0x03, 0xbe, 0x04, + 0xbe, 0x05, 0xbe, 0x06, 0xbe, 0x07, 0xbe, 0x08, + 0xbe, 0x09, 0xbe, 0x0a, 0xbe, 0x0b, 0x26, 0x0c, + 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, 0xbe, 0x0c, + 0xbe, 0x0d, 0xbe, 0x0e, 0xbe, 0x0f, 0xbe, 0x10, + 0xbe, 0x11, 0xbe, 0x12, 0xbe, 0x13, 0xbe, 0x14, + 0xbe, 0x15, 0xbe, 0x16, 0xbe, 0x17, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, + 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, + 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, + 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, + 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, + 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, + 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x4d, 0x86, + 0x01, 0x00, 0x00, 0x4d, 0x87, 0x01, 0x00, 0x00, + 0x4d, 0xd6, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x18, 0xbe, 0x19, 0xbe, 0x1a, 0xbe, 0x1b, 0xbe, + 0x1c, 0xbe, 0x1d, 0xbe, 0x1e, 0xbe, 0x1f, 0xbe, + 0x20, 0xbe, 0x21, 0xbe, 0x22, 0xbe, 0x23, 0xbe, + 0x24, 0x26, 0x0d, 0x00, 0x4d, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, + 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, + 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, + 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, + 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, + 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, + 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, + 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, + 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, + 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, + 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, + 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, + 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, + 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, + 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x52, 0x01, + 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, + 0xa2, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, + 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x82, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x83, 0x01, 0x00, + 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, + 0x01, 0x00, 0x00, 0x4d, 0x86, 0x01, 0x00, 0x00, + 0x4d, 0x87, 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x25, 0xbe, 0x26, + 0xbe, 0x27, 0xbe, 0x28, 0xbe, 0x29, 0xbe, 0x2a, + 0xbe, 0x2b, 0xbe, 0x2c, 0xbe, 0x2d, 0xbe, 0x2e, + 0xbe, 0x2f, 0xbe, 0x30, 0x26, 0x0c, 0x00, 0x4d, + 0x52, 0x01, 0x00, 0x00, 0xbe, 0x31, 0xbe, 0x32, + 0xbe, 0x33, 0xbe, 0x34, 0xbe, 0x35, 0xbe, 0x36, + 0xbe, 0x37, 0xbe, 0x38, 0xbe, 0x39, 0xbe, 0x3a, + 0xbe, 0x3b, 0xbe, 0x3c, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, + 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, + 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, + 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, + 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, + 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, + 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, + 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x80, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x4d, 0x86, 0x01, 0x00, + 0x00, 0x4d, 0x87, 0x01, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x3d, 0xbe, + 0x3e, 0xbe, 0x3f, 0xbe, 0x40, 0xbe, 0x41, 0xbe, + 0x42, 0xbe, 0x43, 0xbe, 0x44, 0xbe, 0x45, 0xbe, + 0x46, 0xbe, 0x47, 0xbe, 0x48, 0xbe, 0x49, 0x26, + 0x0d, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, + 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, + 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, + 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, + 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, + 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, + 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, + 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, 0xae, + 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, + 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, + 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, + 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, + 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, + 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, + 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, + 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, + 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x80, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xa1, + 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, + 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, + 0xa2, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x83, 0x01, 0x00, 0x00, 0x4d, + 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, + 0x00, 0x4d, 0x86, 0x01, 0x00, 0x00, 0x4d, 0x87, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x4a, 0xbe, 0x4b, 0xbe, 0x4c, + 0xbe, 0x4d, 0xbe, 0x4e, 0xbe, 0x4f, 0xbe, 0x50, + 0xbe, 0x51, 0xbe, 0x52, 0xbe, 0x53, 0xbe, 0x54, + 0xbe, 0x55, 0xbe, 0x56, 0x26, 0x0d, 0x00, 0x4d, + 0x52, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, + 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, + 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, + 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, + 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, + 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, + 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, + 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, + 0x04, 0xaf, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa3, 0x01, + 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, + 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, + 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, + 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, + 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, + 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, + 0xad, 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, + 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, 0x26, 0x0d, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6b, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x80, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xa1, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, + 0x04, 0xa1, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa1, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x4d, 0x84, 0x01, + 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x4d, + 0x86, 0x01, 0x00, 0x00, 0x4d, 0x87, 0x01, 0x00, + 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x57, 0xbe, 0x58, 0xbe, 0x59, 0xbe, 0x5a, + 0xbe, 0x5b, 0xbe, 0x5c, 0xbe, 0x5d, 0xbe, 0x5e, + 0xbe, 0x5f, 0xbe, 0x60, 0xbe, 0x61, 0xbe, 0x62, + 0x26, 0x0c, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, + 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, + 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, + 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, + 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, + 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, + 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, + 0x93, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, + 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, + 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, + 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, + 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, + 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, + 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, + 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x80, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xa1, 0x01, + 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, + 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x83, 0x01, 0x00, 0x00, 0x4d, 0x84, + 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x4d, 0x86, 0x01, 0x00, 0x00, 0x4d, 0x87, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, + 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, + 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, 0x26, 0x04, + 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, 0xb0, + 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, + 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, + 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, + 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, + 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, 0x26, 0x04, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x82, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x83, 0x01, 0x00, + 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, + 0x01, 0x00, 0x00, 0x4d, 0x86, 0x01, 0x00, 0x00, + 0x4d, 0x87, 0x01, 0x00, 0x00, 0x4d, 0xd4, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x63, 0xbe, 0x64, + 0xbe, 0x65, 0xbe, 0x66, 0xbe, 0x67, 0xbe, 0x68, + 0xbe, 0x69, 0xbe, 0x6a, 0xbe, 0x6b, 0xbe, 0x6c, + 0xbe, 0x6d, 0xbe, 0x6e, 0xbe, 0x6f, 0xbe, 0x70, + 0x26, 0x0e, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, + 0x04, 0xb4, 0x01, 0x00, 0x00, 0x04, 0xb5, 0x01, + 0x00, 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, 0x04, + 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, + 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, + 0x01, 0x00, 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, + 0x04, 0xbc, 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, + 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, + 0xbf, 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, + 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, 0x26, 0x0e, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xb4, + 0x01, 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, + 0x04, 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, + 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, 0x04, + 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, + 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, + 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, + 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, + 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, 0x04, + 0xc1, 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x83, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, 0x83, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x82, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x83, + 0x01, 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, + 0x04, 0x85, 0x01, 0x00, 0x00, 0x4d, 0x86, 0x01, + 0x00, 0x00, 0x4d, 0x87, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x71, + 0xbe, 0x72, 0xbe, 0x73, 0xbe, 0x74, 0xbe, 0x75, + 0xbe, 0x76, 0xbe, 0x77, 0xbe, 0x78, 0xbe, 0x79, + 0xbe, 0x7a, 0xbe, 0x7b, 0xbe, 0x7c, 0x26, 0x0c, + 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, 0xc2, + 0x01, 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, + 0x04, 0xc4, 0x01, 0x00, 0x00, 0x04, 0xc5, 0x01, + 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, + 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, + 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, 0x04, 0xca, + 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, + 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, 0x00, 0x04, + 0xc3, 0x01, 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, + 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, + 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, + 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, + 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, 0x04, + 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, + 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6b, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x80, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xce, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, + 0x04, 0xce, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xce, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x4d, 0x84, 0x01, + 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x4d, + 0x86, 0x01, 0x00, 0x00, 0x4d, 0x87, 0x01, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x7d, 0xbe, 0x7e, 0xbe, 0x7f, 0xbe, 0x80, + 0xbe, 0x81, 0xbe, 0x82, 0xbe, 0x83, 0xbe, 0x84, + 0xbe, 0x85, 0xbe, 0x86, 0xbe, 0x87, 0xbe, 0x88, + 0x26, 0x0c, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, + 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, 0x01, + 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, 0x04, + 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, + 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, 0xd5, + 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, + 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, 0xd8, 0x01, + 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, 0x04, + 0xda, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xdb, 0x01, 0x00, + 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, 0x04, 0xdd, + 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, 0x00, + 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, 0xe0, 0x01, + 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, 0x00, 0x04, + 0xe2, 0x01, 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, + 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, + 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x80, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xe7, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x52, 0x01, + 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xe7, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x83, 0x01, 0x00, 0x00, 0x4d, + 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, + 0x00, 0x4d, 0x86, 0x01, 0x00, 0x00, 0x4d, 0x87, + 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x89, 0xbe, 0x8a, 0xbe, 0x8b, + 0xbe, 0x8c, 0xbe, 0x8d, 0xbe, 0x8e, 0xbe, 0x8f, + 0xbe, 0x90, 0xbe, 0x91, 0xbe, 0x92, 0xbe, 0x93, + 0xbe, 0x94, 0x26, 0x0c, 0x00, 0x4d, 0x52, 0x01, + 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, + 0xd0, 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, + 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, + 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, + 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, + 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, + 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, + 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xdb, + 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, + 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, + 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, + 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, + 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, 0xe3, + 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, + 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xe7, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x52, 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x82, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x83, 0x01, 0x00, + 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, + 0x01, 0x00, 0x00, 0x4d, 0x86, 0x01, 0x00, 0x00, + 0x4d, 0x87, 0x01, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x80, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xe8, 0x01, + 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, + 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, + 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, + 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, + 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, + 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, + 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, + 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, + 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, + 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, + 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, + 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, + 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, + 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, + 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, 0x02, + 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, 0x04, + 0x02, 0x02, 0x00, 0x00, 0x04, 0x03, 0x02, 0x00, + 0x00, 0x04, 0x04, 0x02, 0x00, 0x00, 0x04, 0x05, + 0x02, 0x00, 0x00, 0x04, 0x06, 0x02, 0x00, 0x00, + 0x04, 0x07, 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, + 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, + 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, + 0x21, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, + 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0x0b, + 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, + 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, + 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, + 0x25, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, + 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0x0f, + 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, + 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, + 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, + 0x29, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, + 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x13, + 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, + 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, + 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, + 0x2d, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, + 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x17, + 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, + 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, + 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, + 0x31, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, + 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x1b, + 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, + 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, + 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, + 0x35, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, + 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x1f, + 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, + 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, + 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, + 0x39, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, + 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x23, + 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, + 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, + 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, + 0x3d, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, + 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x27, + 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, + 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, + 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, + 0x41, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, + 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x2b, + 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, + 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, + 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, + 0x45, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, + 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x2f, + 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, + 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, + 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, + 0x49, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, + 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x33, + 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, + 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, + 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, + 0x4d, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, + 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x37, + 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, + 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, + 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, + 0x51, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, + 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x3b, + 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, + 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, + 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, + 0x55, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, + 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x3f, + 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, + 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, + 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, + 0x59, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, + 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x43, + 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, + 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, + 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, + 0x5d, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, + 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x47, + 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, + 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, + 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, + 0x61, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, + 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x4b, + 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, + 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, + 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, + 0x65, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, + 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x4f, + 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, + 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, + 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, + 0x69, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, + 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x53, + 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, + 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, + 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, + 0x6d, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, + 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x57, + 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, + 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, + 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, + 0x71, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, + 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x5b, + 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, + 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, + 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, + 0x75, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, + 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x5f, + 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, + 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, + 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, + 0x79, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, + 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x63, + 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, + 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, + 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, + 0x7d, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, + 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x67, + 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, + 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, + 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, + 0x81, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, + 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x6b, + 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, + 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, + 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, + 0x85, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, + 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x6f, + 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, + 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, + 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, + 0x89, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, + 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x73, + 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, + 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, + 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, + 0x8d, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, + 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x77, + 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, + 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, + 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, + 0x91, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, + 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x7b, + 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, + 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, + 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, + 0x95, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, + 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x7f, + 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, + 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, + 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, + 0x99, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, + 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x83, + 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, + 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, + 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, + 0x9d, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, + 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x87, + 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, + 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, + 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, + 0xa1, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, + 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x8b, + 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, + 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, + 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, + 0xa5, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, + 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x8f, + 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, + 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, + 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, + 0xa9, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, + 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x93, + 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, + 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, + 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, + 0xad, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, + 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x97, + 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, + 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, + 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, + 0xb1, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, + 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0x9b, + 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, + 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, + 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, + 0xb5, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, + 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0x9f, + 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, + 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, + 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, + 0xb9, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, + 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0xa3, + 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, + 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, + 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, + 0xbd, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, + 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0xa7, + 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, + 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, + 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, + 0xc1, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, + 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0xab, + 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, + 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, + 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, + 0xc5, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, + 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0xaf, + 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, + 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, + 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, + 0xc9, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, + 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xb3, + 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, + 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, + 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, + 0xcd, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, + 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xb7, + 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, + 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, + 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, + 0xd1, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, + 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xbb, + 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, + 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, + 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, + 0xd5, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xbf, + 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, + 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xc3, + 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, + 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xc7, + 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xcb, + 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, + 0x04, 0xcc, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, + 0x00, 0x80, 0x04, 0xcd, 0x02, 0x00, 0x00, 0x4d, + 0xe5, 0x00, 0x00, 0x80, 0x04, 0xce, 0x02, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xcf, + 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, + 0x04, 0x1c, 0x01, 0x00, 0x00, 0x4d, 0xe8, 0x00, + 0x00, 0x80, 0x04, 0xd0, 0x02, 0x00, 0x00, 0x4d, + 0xe9, 0x00, 0x00, 0x80, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0x0a, + 0x01, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, + 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, + 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, + 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, + 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, + 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, + 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, + 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, + 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, + 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, + 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, + 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, + 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, + 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, + 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, + 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, + 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, 0x02, + 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, 0x04, + 0x02, 0x02, 0x00, 0x00, 0x04, 0x03, 0x02, 0x00, + 0x00, 0x04, 0x04, 0x02, 0x00, 0x00, 0x04, 0x05, + 0x02, 0x00, 0x00, 0x04, 0x06, 0x02, 0x00, 0x00, + 0x04, 0x07, 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, + 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, + 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, + 0x21, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, + 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0x0b, + 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, + 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, + 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, + 0x25, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, + 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0x0f, + 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, + 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, + 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, + 0x29, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, + 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x13, + 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, + 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, + 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, + 0x2d, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, + 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x17, + 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, + 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, + 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, + 0x31, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, + 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x1b, + 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, + 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, + 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, + 0x35, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, + 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x1f, + 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, + 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, + 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, + 0x39, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, + 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x23, + 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, + 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, + 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, + 0x3d, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, + 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x27, + 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, + 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, + 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, + 0x41, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, + 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x2b, + 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, + 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, + 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, + 0x45, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, + 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x2f, + 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, + 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, + 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, + 0x49, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, + 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x33, + 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, + 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, + 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, + 0x4d, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, + 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x37, + 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, + 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, + 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, + 0x51, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, + 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x3b, + 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, + 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, + 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, + 0x55, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, + 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x3f, + 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, + 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, + 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, + 0x59, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, + 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x43, + 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, + 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, + 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, + 0x5d, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, + 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x47, + 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, + 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, + 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, + 0x61, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, + 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x4b, + 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, + 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, + 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, + 0x65, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, + 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x4f, + 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, + 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, + 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, + 0x69, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, + 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x53, + 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, + 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, + 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, + 0x6d, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, + 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x57, + 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, + 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, + 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, + 0x71, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, + 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x5b, + 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, + 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, + 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, + 0x75, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, + 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x5f, + 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, + 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, + 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, + 0x79, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, + 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x63, + 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, + 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, + 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, + 0x7d, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, + 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x67, + 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, + 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, + 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, + 0x81, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, + 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x6b, + 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, + 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, + 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, + 0x85, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, + 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x6f, + 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, + 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, + 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, + 0x89, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, + 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x73, + 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, + 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, + 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, + 0x8d, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, + 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x77, + 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, + 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, + 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, + 0x91, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, + 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x7b, + 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, + 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, + 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, + 0x95, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, + 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x7f, + 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, + 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, + 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, + 0x99, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, + 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x83, + 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, + 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, + 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, + 0x9d, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, + 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x87, + 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, + 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, + 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, + 0xa1, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, + 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x8b, + 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, + 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, + 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, + 0xa5, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, + 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x8f, + 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, + 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, + 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, + 0xa9, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, + 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x93, + 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, + 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, + 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, + 0xad, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, + 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x97, + 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, + 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, + 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, + 0xb1, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, + 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0x9b, + 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, + 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, + 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, + 0xb5, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, + 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0x9f, + 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, + 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, + 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, + 0xb9, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, + 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0xa3, + 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, + 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, + 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, + 0xbd, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, + 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0xa7, + 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, + 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, + 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, + 0xc1, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, + 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0xab, + 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, + 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, + 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, + 0xc5, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, + 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0xaf, + 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, + 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, + 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, + 0xc9, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, + 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xb3, + 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, + 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, + 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, + 0xcd, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, + 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xb7, + 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, + 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, + 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, + 0xd1, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, + 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xbb, + 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, + 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, + 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, + 0xd5, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xbf, + 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, + 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xc3, + 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, + 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xc7, + 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xcb, + 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, + 0x04, 0xcc, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, + 0x00, 0x80, 0x04, 0xcd, 0x02, 0x00, 0x00, 0x4d, + 0xe5, 0x00, 0x00, 0x80, 0x04, 0xce, 0x02, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xcf, + 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, + 0x04, 0xd1, 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x00, + 0x00, 0x80, 0x04, 0xd2, 0x02, 0x00, 0x00, 0x4d, + 0xe9, 0x00, 0x00, 0x80, 0x04, 0xd3, 0x02, 0x00, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0xd4, + 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe8, 0x01, + 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, + 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, + 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, + 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, + 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, + 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, + 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, + 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, + 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, + 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, + 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, + 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, + 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, + 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, + 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, 0x02, + 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, 0x04, + 0x02, 0x02, 0x00, 0x00, 0x04, 0x03, 0x02, 0x00, + 0x00, 0x04, 0x04, 0x02, 0x00, 0x00, 0x04, 0x05, + 0x02, 0x00, 0x00, 0x04, 0x06, 0x02, 0x00, 0x00, + 0x04, 0x07, 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, + 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, + 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, + 0x21, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, + 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0x0b, + 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, + 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, + 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, + 0x25, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, + 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0x0f, + 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, + 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, + 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, + 0x29, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, + 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x13, + 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, + 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, + 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, + 0x2d, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, + 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x17, + 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, + 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, + 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, + 0x31, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, + 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x1b, + 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, + 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, + 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, + 0x35, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, + 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x1f, + 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, + 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, + 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, + 0x39, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, + 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x23, + 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, + 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, + 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, + 0x3d, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, + 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x27, + 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, + 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, + 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, + 0x41, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, + 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x2b, + 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, + 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, + 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, + 0x45, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, + 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x2f, + 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, + 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, + 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, + 0x49, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, + 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x33, + 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, + 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, + 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, + 0x4d, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, + 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x37, + 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, + 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, + 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, + 0x51, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, + 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x3b, + 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, + 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, + 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, + 0x55, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, + 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x3f, + 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, + 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, + 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, + 0x59, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, + 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x43, + 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, + 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, + 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, + 0x5d, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, + 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x47, + 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, + 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, + 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, + 0x61, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, + 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x4b, + 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, + 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, + 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, + 0x65, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, + 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x4f, + 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, + 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, + 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, + 0x69, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, + 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x53, + 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, + 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, + 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, + 0x6d, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, + 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x57, + 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, + 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, + 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, + 0x71, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, + 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x5b, + 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, + 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, + 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, + 0x75, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, + 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x5f, + 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, + 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, + 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, + 0x79, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, + 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x63, + 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, + 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, + 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, + 0x7d, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, + 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x67, + 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, + 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, + 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, + 0x81, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, + 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x6b, + 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, + 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, + 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, + 0x85, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, + 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x6f, + 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, + 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, + 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, + 0x89, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, + 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x73, + 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, + 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, + 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, + 0x8d, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, + 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x77, + 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, + 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, + 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, + 0x91, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, + 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x7b, + 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, + 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, + 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, + 0x95, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, + 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x7f, + 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, + 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, + 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, + 0x99, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, + 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x83, + 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, + 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, + 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, + 0x9d, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, + 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x87, + 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, + 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, + 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, + 0xa1, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, + 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x8b, + 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, + 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, + 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, + 0xa5, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, + 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x8f, + 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, + 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, + 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, + 0xa9, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, + 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x93, + 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, + 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, + 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, + 0xad, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, + 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x97, + 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, + 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, + 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, + 0xb1, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, + 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0x9b, + 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, + 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, + 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, + 0xb5, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, + 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0x9f, + 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, + 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, + 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, + 0xb9, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, + 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0xa3, + 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, + 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, + 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, + 0xbd, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, + 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0xa7, + 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, + 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, + 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, + 0xc1, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, + 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0xab, + 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, + 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, + 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, + 0xc5, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, + 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0xaf, + 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, + 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, + 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, + 0xc9, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, + 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xb3, + 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, + 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, + 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, + 0xcd, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, + 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xb7, + 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, + 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, + 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, + 0xd1, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, + 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xbb, + 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, + 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, + 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, + 0xd5, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xbf, + 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, + 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xc3, + 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, + 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xc7, + 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xcb, + 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, + 0x04, 0xcc, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, + 0x00, 0x80, 0x04, 0xcd, 0x02, 0x00, 0x00, 0x4d, + 0xe5, 0x00, 0x00, 0x80, 0x04, 0xce, 0x02, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xcf, + 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, + 0x04, 0xd1, 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x00, + 0x00, 0x80, 0x04, 0xd2, 0x02, 0x00, 0x00, 0x4d, + 0xe9, 0x00, 0x00, 0x80, 0x04, 0xd3, 0x02, 0x00, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0xd4, + 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x82, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x4d, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x4d, 0x86, 0x01, 0x00, 0x00, 0x4d, + 0x87, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x95, 0xbe, 0x96, 0xbe, + 0x97, 0xbe, 0x98, 0xbe, 0x99, 0xbe, 0x9a, 0xbe, + 0x9b, 0xbe, 0x9c, 0xbe, 0x9d, 0xbe, 0x9e, 0xbe, + 0x9f, 0xbe, 0xa0, 0x26, 0x0c, 0x00, 0x4d, 0x52, + 0x01, 0x00, 0x00, 0x04, 0xd5, 0x02, 0x00, 0x00, + 0x04, 0xd6, 0x02, 0x00, 0x00, 0x04, 0xd7, 0x02, + 0x00, 0x00, 0x04, 0xd8, 0x02, 0x00, 0x00, 0x04, + 0xd9, 0x02, 0x00, 0x00, 0x04, 0xda, 0x02, 0x00, + 0x00, 0x04, 0xdb, 0x02, 0x00, 0x00, 0x04, 0xdc, + 0x02, 0x00, 0x00, 0x04, 0xdd, 0x02, 0x00, 0x00, + 0x04, 0xde, 0x02, 0x00, 0x00, 0x04, 0xdf, 0x02, + 0x00, 0x00, 0x04, 0xe0, 0x02, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xd5, 0x02, 0x00, 0x00, 0x04, 0xd6, 0x02, 0x00, + 0x00, 0x04, 0xd7, 0x02, 0x00, 0x00, 0x04, 0xd8, + 0x02, 0x00, 0x00, 0x04, 0xd9, 0x02, 0x00, 0x00, + 0x04, 0xda, 0x02, 0x00, 0x00, 0x04, 0xdb, 0x02, + 0x00, 0x00, 0x04, 0xdc, 0x02, 0x00, 0x00, 0x04, + 0xdd, 0x02, 0x00, 0x00, 0x04, 0xde, 0x02, 0x00, + 0x00, 0x04, 0xdf, 0x02, 0x00, 0x00, 0x04, 0xe0, + 0x02, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xe1, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, 0xe1, 0x02, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xe1, 0x02, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x82, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x4d, 0x86, 0x01, 0x00, + 0x00, 0x4d, 0x87, 0x01, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, + 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x80, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xe2, + 0x02, 0x00, 0x00, 0x04, 0xe3, 0x02, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, + 0x04, 0xe2, 0x02, 0x00, 0x00, 0x04, 0xe3, 0x02, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xe2, 0x02, 0x00, 0x00, 0x04, + 0xe3, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x83, 0x01, 0x00, 0x00, 0x4d, + 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, + 0x00, 0x4d, 0x86, 0x01, 0x00, 0x00, 0x4d, 0x87, + 0x01, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, + 0x4d, 0xe4, 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x02, + 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x02, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x02, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0xe8, 0x02, 0x00, 0x00, 0x4d, + 0xe9, 0x02, 0x00, 0x00, 0x04, 0xea, 0x02, 0x00, + 0x00, 0x4d, 0xeb, 0x02, 0x00, 0x00, 0x4d, 0xec, + 0x02, 0x00, 0x00, 0x0b, 0x04, 0xed, 0x02, 0x00, + 0x00, 0x4d, 0xe9, 0x02, 0x00, 0x00, 0x04, 0xee, + 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x02, 0x00, 0x00, + 0x4d, 0xef, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xf0, + 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x02, 0x00, 0x00, + 0x04, 0xf1, 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x02, + 0x00, 0x00, 0x4d, 0xf2, 0x02, 0x00, 0x00, 0x4d, + 0xf3, 0x02, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xf4, + 0x02, 0x00, 0x00, 0x4d, 0xec, 0x02, 0x00, 0x00, + 0x04, 0xf5, 0x02, 0x00, 0x00, 0x4d, 0xf6, 0x02, + 0x00, 0x00, 0x04, 0xf7, 0x02, 0x00, 0x00, 0x4d, + 0xf8, 0x02, 0x00, 0x00, 0x04, 0xf9, 0x02, 0x00, + 0x00, 0x4d, 0xfa, 0x02, 0x00, 0x00, 0x04, 0xfb, + 0x02, 0x00, 0x00, 0x4d, 0xfc, 0x02, 0x00, 0x00, + 0x04, 0xfd, 0x02, 0x00, 0x00, 0x4d, 0xfe, 0x02, + 0x00, 0x00, 0x04, 0xff, 0x02, 0x00, 0x00, 0x4d, + 0x00, 0x03, 0x00, 0x00, 0x4d, 0xe6, 0x02, 0x00, + 0x00, 0x4d, 0x01, 0x03, 0x00, 0x00, 0x0b, 0x04, + 0x02, 0x03, 0x00, 0x00, 0x4d, 0x03, 0x03, 0x00, + 0x00, 0x04, 0x04, 0x03, 0x00, 0x00, 0x4d, 0x05, + 0x03, 0x00, 0x00, 0x04, 0x06, 0x03, 0x00, 0x00, + 0x4d, 0x07, 0x03, 0x00, 0x00, 0x04, 0x08, 0x03, + 0x00, 0x00, 0x4d, 0x09, 0x03, 0x00, 0x00, 0x04, + 0x0a, 0x03, 0x00, 0x00, 0x4d, 0x0b, 0x03, 0x00, + 0x00, 0x04, 0x0c, 0x03, 0x00, 0x00, 0x4d, 0x0d, + 0x03, 0x00, 0x00, 0x04, 0x0e, 0x03, 0x00, 0x00, + 0x4d, 0x0f, 0x03, 0x00, 0x00, 0x4d, 0x10, 0x03, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x00, 0x24, + 0x01, 0x00, 0xcc, 0x28, 0xa2, 0x0c, 0x01, 0x00, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, + 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, + 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_pt_size = 25037; + +const uint8_t intl_pt[25037] = { + 0x01, 0xea, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x70, 0x74, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x0e, + 0x7b, 0x31, 0x7d, 0x20, 0x7b, 0x30, 0x7d, 0x0a, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, 0x65, + 0x64, 0x69, 0x75, 0x6d, 0x08, 0x66, 0x75, 0x6c, + 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x02, 0x64, + 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, 0x08, 0x45, + 0x2c, 0x20, 0x64, 0x04, 0x45, 0x64, 0x12, 0x45, + 0x2c, 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, + 0x06, 0x45, 0x68, 0x6d, 0x10, 0x45, 0x2c, 0x20, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x06, 0x45, 0x48, + 0x6d, 0x18, 0x45, 0x2c, 0x20, 0x68, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x08, 0x45, + 0x68, 0x6d, 0x73, 0x16, 0x45, 0x2c, 0x20, 0x48, + 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x08, + 0x45, 0x48, 0x6d, 0x73, 0x06, 0x79, 0x20, 0x47, + 0x04, 0x47, 0x79, 0x18, 0x4d, 0x4d, 0x4d, 0x20, + 0x27, 0x64, 0x65, 0x27, 0x20, 0x79, 0x20, 0x47, + 0x0a, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x26, 0x64, + 0x20, 0x27, 0x64, 0x65, 0x27, 0x20, 0x4d, 0x4d, + 0x4d, 0x20, 0x27, 0x64, 0x65, 0x27, 0x20, 0x79, + 0x20, 0x47, 0x0c, 0x47, 0x79, 0x4d, 0x4d, 0x4d, + 0x64, 0x2c, 0x45, 0x2c, 0x20, 0x64, 0x20, 0x27, + 0x64, 0x65, 0x27, 0x20, 0x4d, 0x4d, 0x4d, 0x20, + 0x27, 0x64, 0x65, 0x27, 0x20, 0x79, 0x20, 0x47, + 0x0e, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, + 0x06, 0x68, 0x20, 0x61, 0x02, 0x68, 0x04, 0x48, + 0x48, 0x02, 0x48, 0x0c, 0x68, 0x3a, 0x6d, 0x6d, + 0x20, 0x61, 0x04, 0x68, 0x6d, 0x0a, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x04, 0x48, 0x6d, 0x12, 0x68, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, + 0x06, 0x68, 0x6d, 0x73, 0x10, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x06, 0x48, 0x6d, + 0x73, 0x16, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x61, 0x20, 0x76, 0x08, 0x68, 0x6d, + 0x73, 0x76, 0x14, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x76, 0x08, 0x48, 0x6d, + 0x73, 0x76, 0x10, 0x68, 0x3a, 0x6d, 0x6d, 0x20, + 0x61, 0x20, 0x76, 0x06, 0x68, 0x6d, 0x76, 0x0e, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x20, 0x76, 0x06, + 0x48, 0x6d, 0x76, 0x02, 0x4c, 0x02, 0x4d, 0x06, + 0x64, 0x2f, 0x4d, 0x04, 0x4d, 0x64, 0x10, 0x45, + 0x2c, 0x20, 0x64, 0x64, 0x2f, 0x4d, 0x4d, 0x06, + 0x4d, 0x45, 0x64, 0x0a, 0x64, 0x64, 0x2f, 0x4d, + 0x4d, 0x08, 0x4d, 0x4d, 0x64, 0x64, 0x06, 0x4c, + 0x4c, 0x4c, 0x06, 0x4d, 0x4d, 0x4d, 0x14, 0x64, + 0x20, 0x27, 0x64, 0x65, 0x27, 0x20, 0x4d, 0x4d, + 0x4d, 0x08, 0x4d, 0x4d, 0x4d, 0x64, 0x1a, 0x45, + 0x2c, 0x20, 0x64, 0x20, 0x27, 0x64, 0x65, 0x27, + 0x20, 0x4d, 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, + 0x45, 0x64, 0x16, 0x64, 0x20, 0x27, 0x64, 0x65, + 0x27, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, 0x4d, + 0x4d, 0x4d, 0x4d, 0x64, 0x1c, 0x45, 0x2c, 0x20, + 0x64, 0x20, 0x27, 0x64, 0x65, 0x27, 0x20, 0x4d, + 0x4d, 0x4d, 0x4d, 0x0c, 0x4d, 0x4d, 0x4d, 0x4d, + 0x45, 0x64, 0x0a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x04, 0x6d, 0x73, 0x02, 0x79, 0x08, 0x4d, 0x4d, + 0x2f, 0x79, 0x04, 0x79, 0x4d, 0x0e, 0x64, 0x64, + 0x2f, 0x4d, 0x4d, 0x2f, 0x79, 0x06, 0x79, 0x4d, + 0x64, 0x14, 0x45, 0x2c, 0x20, 0x64, 0x64, 0x2f, + 0x4d, 0x4d, 0x2f, 0x79, 0x08, 0x79, 0x4d, 0x45, + 0x64, 0x06, 0x79, 0x4d, 0x4d, 0x14, 0x4d, 0x4d, + 0x4d, 0x20, 0x27, 0x64, 0x65, 0x27, 0x20, 0x79, + 0x08, 0x79, 0x4d, 0x4d, 0x4d, 0x22, 0x64, 0x20, + 0x27, 0x64, 0x65, 0x27, 0x20, 0x4d, 0x4d, 0x4d, + 0x20, 0x27, 0x64, 0x65, 0x27, 0x20, 0x79, 0x0a, + 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x28, 0x45, 0x2c, + 0x20, 0x64, 0x20, 0x27, 0x64, 0x65, 0x27, 0x20, + 0x4d, 0x4d, 0x4d, 0x20, 0x27, 0x64, 0x65, 0x27, + 0x20, 0x79, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x45, + 0x64, 0x16, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x27, + 0x64, 0x65, 0x27, 0x20, 0x79, 0x0a, 0x79, 0x4d, + 0x4d, 0x4d, 0x4d, 0x24, 0x64, 0x20, 0x27, 0x64, + 0x65, 0x27, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, + 0x27, 0x64, 0x65, 0x27, 0x20, 0x79, 0x0c, 0x79, + 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x2a, 0x45, 0x2c, + 0x20, 0x64, 0x20, 0x27, 0x64, 0x65, 0x27, 0x20, + 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x27, 0x64, 0x65, + 0x27, 0x20, 0x79, 0x0e, 0x79, 0x4d, 0x4d, 0x4d, + 0x4d, 0x45, 0x64, 0x0a, 0x79, 0x20, 0x51, 0x51, + 0x51, 0x08, 0x79, 0x51, 0x51, 0x51, 0x0c, 0x79, + 0x20, 0x51, 0x51, 0x51, 0x51, 0x0a, 0x79, 0x51, + 0x51, 0x51, 0x51, 0x20, 0x61, 0x76, 0x61, 0x69, + 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x73, 0x30, 0x45, 0x45, 0x45, + 0x45, 0x2c, 0x20, 0x64, 0x20, 0x27, 0x64, 0x65, + 0x27, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x27, + 0x64, 0x65, 0x27, 0x20, 0x79, 0x14, 0x79, 0x4d, + 0x4d, 0x4d, 0x4d, 0x45, 0x45, 0x45, 0x45, 0x64, + 0x10, 0x64, 0x64, 0x2f, 0x4d, 0x4d, 0x2f, 0x79, + 0x79, 0x16, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x73, 0x1a, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x7a, + 0x7a, 0x7a, 0x7a, 0x12, 0x68, 0x6d, 0x6d, 0x73, + 0x73, 0x7a, 0x7a, 0x7a, 0x7a, 0x14, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x7a, + 0x08, 0x68, 0x6d, 0x73, 0x7a, 0x16, 0x74, 0x69, + 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x73, 0x0e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x73, 0x02, 0x4a, 0x02, 0x46, 0x02, 0x41, 0x02, + 0x53, 0x02, 0x4f, 0x02, 0x4e, 0x02, 0x44, 0x0c, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x06, 0x6a, + 0x61, 0x6e, 0x06, 0x66, 0x65, 0x76, 0x06, 0x6d, + 0x61, 0x72, 0x06, 0x61, 0x62, 0x72, 0x06, 0x6d, + 0x61, 0x69, 0x06, 0x6a, 0x75, 0x6e, 0x06, 0x6a, + 0x75, 0x6c, 0x06, 0x61, 0x67, 0x6f, 0x06, 0x6f, + 0x75, 0x74, 0x06, 0x6e, 0x6f, 0x76, 0x06, 0x64, + 0x65, 0x7a, 0x0e, 0x6a, 0x61, 0x6e, 0x65, 0x69, + 0x72, 0x6f, 0x12, 0x66, 0x65, 0x76, 0x65, 0x72, + 0x65, 0x69, 0x72, 0x6f, 0x0a, 0x6d, 0x61, 0x72, + 0xe7, 0x6f, 0x0a, 0x61, 0x62, 0x72, 0x69, 0x6c, + 0x08, 0x6d, 0x61, 0x69, 0x6f, 0x0a, 0x6a, 0x75, + 0x6e, 0x68, 0x6f, 0x0a, 0x6a, 0x75, 0x6c, 0x68, + 0x6f, 0x0c, 0x61, 0x67, 0x6f, 0x73, 0x74, 0x6f, + 0x10, 0x73, 0x65, 0x74, 0x65, 0x6d, 0x62, 0x72, + 0x6f, 0x0e, 0x6f, 0x75, 0x74, 0x75, 0x62, 0x72, + 0x6f, 0x10, 0x6e, 0x6f, 0x76, 0x65, 0x6d, 0x62, + 0x72, 0x6f, 0x10, 0x64, 0x65, 0x7a, 0x65, 0x6d, + 0x62, 0x72, 0x6f, 0x0c, 0x6d, 0x6f, 0x6e, 0x74, + 0x68, 0x73, 0x02, 0x54, 0x02, 0x51, 0x06, 0x64, + 0x6f, 0x6d, 0x06, 0x73, 0x65, 0x67, 0x06, 0x74, + 0x65, 0x72, 0x06, 0x71, 0x75, 0x61, 0x06, 0x71, + 0x75, 0x69, 0x06, 0x73, 0x65, 0x78, 0x06, 0x73, + 0xe1, 0x62, 0x0e, 0x64, 0x6f, 0x6d, 0x69, 0x6e, + 0x67, 0x6f, 0x1a, 0x73, 0x65, 0x67, 0x75, 0x6e, + 0x64, 0x61, 0x2d, 0x66, 0x65, 0x69, 0x72, 0x61, + 0x16, 0x74, 0x65, 0x72, 0xe7, 0x61, 0x2d, 0x66, + 0x65, 0x69, 0x72, 0x61, 0x18, 0x71, 0x75, 0x61, + 0x72, 0x74, 0x61, 0x2d, 0x66, 0x65, 0x69, 0x72, + 0x61, 0x18, 0x71, 0x75, 0x69, 0x6e, 0x74, 0x61, + 0x2d, 0x66, 0x65, 0x69, 0x72, 0x61, 0x16, 0x73, + 0x65, 0x78, 0x74, 0x61, 0x2d, 0x66, 0x65, 0x69, + 0x72, 0x61, 0x0c, 0x73, 0xe1, 0x62, 0x61, 0x64, + 0x6f, 0x08, 0x64, 0x61, 0x79, 0x73, 0x04, 0x42, + 0x45, 0x08, 0x65, 0x72, 0x61, 0x73, 0x04, 0x41, + 0x4d, 0x04, 0x61, 0x6d, 0x04, 0x50, 0x4d, 0x04, + 0x70, 0x6d, 0x14, 0x64, 0x61, 0x79, 0x50, 0x65, + 0x72, 0x69, 0x6f, 0x64, 0x73, 0x0a, 0x4d, 0xea, + 0x73, 0x20, 0x31, 0x0a, 0x4d, 0xea, 0x73, 0x20, + 0x32, 0x0a, 0x4d, 0xea, 0x73, 0x20, 0x33, 0x0a, + 0x4d, 0xea, 0x73, 0x20, 0x34, 0x0a, 0x4d, 0xea, + 0x73, 0x20, 0x35, 0x0a, 0x4d, 0xea, 0x73, 0x20, + 0x36, 0x0a, 0x4d, 0xea, 0x73, 0x20, 0x37, 0x0a, + 0x4d, 0xea, 0x73, 0x20, 0x38, 0x0a, 0x4d, 0xea, + 0x73, 0x20, 0x39, 0x0c, 0x4d, 0xea, 0x73, 0x20, + 0x31, 0x30, 0x0c, 0x4d, 0xea, 0x73, 0x20, 0x31, + 0x31, 0x0c, 0x4d, 0xea, 0x73, 0x20, 0x31, 0x32, + 0x08, 0x54, 0x6f, 0x75, 0x74, 0x08, 0x42, 0x61, + 0x62, 0x61, 0x0a, 0x48, 0x61, 0x74, 0x6f, 0x72, + 0x0a, 0x4b, 0x69, 0x61, 0x68, 0x6b, 0x08, 0x54, + 0x6f, 0x62, 0x61, 0x0c, 0x41, 0x6d, 0x73, 0x68, + 0x69, 0x72, 0x10, 0x42, 0x61, 0x72, 0x61, 0x6d, + 0x68, 0x61, 0x74, 0x12, 0x42, 0x61, 0x72, 0x61, + 0x6d, 0x6f, 0x75, 0x64, 0x61, 0x0e, 0x42, 0x61, + 0x73, 0x68, 0x61, 0x6e, 0x73, 0x0a, 0x50, 0x61, + 0x6f, 0x6e, 0x61, 0x08, 0x45, 0x70, 0x65, 0x70, + 0x0a, 0x4d, 0x65, 0x73, 0x72, 0x61, 0x0a, 0x4e, + 0x61, 0x73, 0x69, 0x65, 0x08, 0x45, 0x52, 0x41, + 0x30, 0x08, 0x45, 0x52, 0x41, 0x31, 0x10, 0x4d, + 0x65, 0x73, 0x6b, 0x65, 0x72, 0x65, 0x6d, 0x0c, + 0x54, 0x65, 0x6b, 0x65, 0x6d, 0x74, 0x0a, 0x48, + 0x65, 0x64, 0x61, 0x72, 0x0c, 0x54, 0x61, 0x68, + 0x73, 0x61, 0x73, 0x06, 0x54, 0x65, 0x72, 0x0e, + 0x59, 0x65, 0x6b, 0x61, 0x74, 0x69, 0x74, 0x0e, + 0x4d, 0x65, 0x67, 0x61, 0x62, 0x69, 0x74, 0x0c, + 0x4d, 0x69, 0x61, 0x7a, 0x69, 0x61, 0x0c, 0x47, + 0x65, 0x6e, 0x62, 0x6f, 0x74, 0x08, 0x53, 0x65, + 0x6e, 0x65, 0x0a, 0x48, 0x61, 0x6d, 0x6c, 0x65, + 0x0e, 0x4e, 0x65, 0x68, 0x61, 0x73, 0x73, 0x65, + 0x0e, 0x50, 0x61, 0x67, 0x75, 0x6d, 0x65, 0x6e, + 0x06, 0x4d, 0x30, 0x31, 0x06, 0x4d, 0x30, 0x32, + 0x06, 0x4d, 0x30, 0x33, 0x06, 0x4d, 0x30, 0x34, + 0x06, 0x4d, 0x30, 0x35, 0x06, 0x4d, 0x30, 0x36, + 0x06, 0x4d, 0x30, 0x37, 0x06, 0x4d, 0x30, 0x38, + 0x06, 0x4d, 0x30, 0x39, 0x06, 0x4d, 0x31, 0x30, + 0x06, 0x4d, 0x31, 0x31, 0x06, 0x4d, 0x31, 0x32, + 0x08, 0x61, 0x2e, 0x43, 0x2e, 0x08, 0x64, 0x2e, + 0x43, 0x2e, 0x06, 0x41, 0x45, 0x43, 0x04, 0x45, + 0x43, 0x1e, 0x61, 0x6e, 0x74, 0x65, 0x73, 0x20, + 0x64, 0x65, 0x20, 0x43, 0x72, 0x69, 0x73, 0x74, + 0x6f, 0x20, 0x64, 0x65, 0x70, 0x6f, 0x69, 0x73, + 0x20, 0x64, 0x65, 0x20, 0x43, 0x72, 0x69, 0x73, + 0x74, 0x6f, 0x24, 0x61, 0x6e, 0x74, 0x65, 0x73, + 0x20, 0x64, 0x61, 0x20, 0x45, 0x72, 0x61, 0x20, + 0x43, 0x6f, 0x6d, 0x75, 0x6d, 0x12, 0x45, 0x72, + 0x61, 0x20, 0x43, 0x6f, 0x6d, 0x75, 0x6d, 0x0c, + 0x54, 0x69, 0x73, 0x68, 0x72, 0x69, 0x0e, 0x48, + 0x65, 0x73, 0x68, 0x76, 0x61, 0x6e, 0x0c, 0x4b, + 0x69, 0x73, 0x6c, 0x65, 0x76, 0x0a, 0x54, 0x65, + 0x76, 0x65, 0x74, 0x0c, 0x53, 0x68, 0x65, 0x76, + 0x61, 0x74, 0x0c, 0x41, 0x64, 0x61, 0x72, 0x20, + 0x49, 0x08, 0x41, 0x64, 0x61, 0x72, 0x0a, 0x4e, + 0x69, 0x73, 0x61, 0x6e, 0x08, 0x49, 0x79, 0x61, + 0x72, 0x0a, 0x53, 0x69, 0x76, 0x61, 0x6e, 0x0a, + 0x54, 0x61, 0x6d, 0x75, 0x7a, 0x04, 0x41, 0x76, + 0x08, 0x45, 0x6c, 0x75, 0x6c, 0x0e, 0x41, 0x64, + 0x61, 0x72, 0x20, 0x49, 0x49, 0x0e, 0x43, 0x68, + 0x61, 0x69, 0x74, 0x72, 0x61, 0x10, 0x56, 0x61, + 0x69, 0x73, 0x61, 0x6b, 0x68, 0x61, 0x10, 0x4a, + 0x79, 0x61, 0x69, 0x73, 0x74, 0x68, 0x61, 0x0c, + 0x41, 0x73, 0x61, 0x64, 0x68, 0x61, 0x0e, 0x53, + 0x72, 0x61, 0x76, 0x61, 0x6e, 0x61, 0x0c, 0x42, + 0x68, 0x61, 0x64, 0x72, 0x61, 0x0c, 0x41, 0x73, + 0x76, 0x69, 0x6e, 0x61, 0x0e, 0x4b, 0x61, 0x72, + 0x74, 0x69, 0x6b, 0x61, 0x14, 0x41, 0x67, 0x72, + 0x61, 0x68, 0x61, 0x79, 0x61, 0x6e, 0x61, 0x0a, + 0x50, 0x61, 0x75, 0x73, 0x61, 0x0a, 0x4d, 0x61, + 0x67, 0x68, 0x61, 0x10, 0x50, 0x68, 0x61, 0x6c, + 0x67, 0x75, 0x6e, 0x61, 0x08, 0x53, 0x61, 0x6b, + 0x61, 0x08, 0x4d, 0x75, 0x68, 0x2e, 0x08, 0x53, + 0x61, 0x66, 0x2e, 0x0c, 0x52, 0x61, 0x62, 0x2e, + 0x20, 0x49, 0x0e, 0x52, 0x61, 0x62, 0x2e, 0x20, + 0x49, 0x49, 0x0c, 0x4a, 0x75, 0x6d, 0x2e, 0x20, + 0x49, 0x0e, 0x4a, 0x75, 0x6d, 0x2e, 0x20, 0x49, + 0x49, 0x08, 0x52, 0x61, 0x6a, 0x2e, 0x08, 0x53, + 0x68, 0x61, 0x2e, 0x08, 0x52, 0x61, 0x6d, 0x2e, + 0x0a, 0x53, 0x68, 0x61, 0x77, 0x2e, 0x11, 0x44, + 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, + 0x00, 0x2d, 0x00, 0x51, 0x00, 0x2e, 0x00, 0x11, + 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, + 0x6c, 0x00, 0x2d, 0x00, 0x48, 0x00, 0x2e, 0x00, + 0x10, 0x4d, 0x75, 0x68, 0x61, 0x72, 0x72, 0x61, + 0x6d, 0x0a, 0x53, 0x61, 0x66, 0x61, 0x72, 0x0f, + 0x52, 0x00, 0x61, 0x00, 0x62, 0x00, 0x69, 0x00, + 0xbb, 0x02, 0x20, 0x00, 0x49, 0x00, 0x11, 0x52, + 0x00, 0x61, 0x00, 0x62, 0x00, 0x69, 0x00, 0xbb, + 0x02, 0x20, 0x00, 0x49, 0x00, 0x49, 0x00, 0x10, + 0x4a, 0x75, 0x6d, 0x61, 0x64, 0x61, 0x20, 0x49, + 0x12, 0x4a, 0x75, 0x6d, 0x61, 0x64, 0x61, 0x20, + 0x49, 0x49, 0x0a, 0x52, 0x61, 0x6a, 0x61, 0x62, + 0x0f, 0x53, 0x00, 0x68, 0x00, 0x61, 0x00, 0xbb, + 0x02, 0x62, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x0e, + 0x52, 0x61, 0x6d, 0x61, 0x64, 0x61, 0x6e, 0x0e, + 0x53, 0x68, 0x61, 0x77, 0x77, 0x61, 0x6c, 0x19, + 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, + 0x6c, 0x00, 0x2d, 0x00, 0x51, 0x00, 0x69, 0x00, + 0xbb, 0x02, 0x64, 0x00, 0x61, 0x00, 0x68, 0x00, + 0x19, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, + 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x48, 0x00, 0x69, + 0x00, 0x6a, 0x00, 0x6a, 0x00, 0x61, 0x00, 0x68, + 0x00, 0x04, 0x41, 0x48, 0x1f, 0x54, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x36, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x36, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x13, 0x20, 0x36, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x36, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x29, 0x00, 0x21, + 0x53, 0x00, 0x68, 0x00, 0x75, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x57, + 0x00, 0x61, 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x1f, 0x52, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x1d, 0x59, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, + 0x4a, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6b, 0x00, + 0x61, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x2d, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x2d, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x2b, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x2d, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, 0x2d, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x2a, 0x4a, 0x69, 0x6e, 0x67, 0x6f, 0x2d, + 0x6b, 0x65, 0x69, 0x75, 0x6e, 0x20, 0x28, 0x37, + 0x36, 0x37, 0x2d, 0x37, 0x37, 0x30, 0x29, 0x1d, + 0x48, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x37, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, 0x44, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x64, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x38, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x4d, 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x38, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4a, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x61, 0x00, 0x6a, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, + 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x53, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x20, 0x54, 0x65, + 0x6e, 0x2d, 0x61, 0x6e, 0x20, 0x28, 0x38, 0x35, + 0x37, 0x2d, 0x38, 0x35, 0x39, 0x29, 0x1f, 0x4a, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, + 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, 0x6e, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x34, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1b, 0x4c, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4b, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x1d, 0x41, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1d, + 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x4a, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x29, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, + 0x4a, 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x29, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, + 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4c, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x25, 0x4a, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x24, 0x54, 0x65, 0x6e, 0x2d, 0x65, 0x69, + 0x20, 0x28, 0x31, 0x31, 0x31, 0x30, 0x2d, 0x31, + 0x31, 0x31, 0x33, 0x29, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, + 0x4d, 0x01, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, + 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x6a, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x48, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x45, + 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, + 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6d, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4a, + 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x59, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x21, 0x4a, 0x00, 0x75, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x29, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4a, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x29, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, + 0x4a, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x27, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x75, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x29, 0x52, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x4e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, + 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, 0x00, + 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1f, 0x4c, 0x01, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x74, 0x00, 0x73, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x27, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x45, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x21, 0x4d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, 0x69, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x27, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x21, 0x45, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x61, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x41, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, 0x0a, + 0x4d, 0x65, 0x69, 0x6a, 0x69, 0x0d, 0x54, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x0b, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x0c, 0x48, 0x65, + 0x69, 0x73, 0x65, 0x69, 0x12, 0x46, 0x61, 0x72, + 0x76, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x16, 0x4f, + 0x72, 0x64, 0x69, 0x62, 0x65, 0x68, 0x65, 0x73, + 0x68, 0x74, 0x0e, 0x4b, 0x68, 0x6f, 0x72, 0x64, + 0x61, 0x64, 0x06, 0x54, 0x69, 0x72, 0x0c, 0x4d, + 0x6f, 0x72, 0x64, 0x61, 0x64, 0x12, 0x53, 0x68, + 0x61, 0x68, 0x72, 0x69, 0x76, 0x61, 0x72, 0x08, + 0x4d, 0x65, 0x68, 0x72, 0x08, 0x41, 0x62, 0x61, + 0x6e, 0x08, 0x41, 0x7a, 0x61, 0x72, 0x06, 0x44, + 0x65, 0x79, 0x0c, 0x42, 0x61, 0x68, 0x6d, 0x61, + 0x6e, 0x0c, 0x45, 0x73, 0x66, 0x61, 0x6e, 0x64, + 0x04, 0x41, 0x50, 0x1e, 0x41, 0x6e, 0x74, 0x65, + 0x73, 0x20, 0x64, 0x65, 0x20, 0x52, 0x2e, 0x4f, + 0x2e, 0x43, 0x2e, 0x0c, 0x52, 0x2e, 0x4f, 0x2e, + 0x43, 0x2e, 0x12, 0x63, 0x61, 0x6c, 0x65, 0x6e, + 0x64, 0x61, 0x72, 0x73, 0x08, 0x64, 0x61, 0x74, + 0x65, 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, + 0x75, 0x10, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0x1e, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, + 0x72, 0x6e, 0x26, 0x7b, 0x6d, 0x69, 0x6e, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x6e, + 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, + 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x0e, 0x64, + 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x24, 0x7b, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, + 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0x3a, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x10, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, + 0x2a, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, + 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x40, 0x7b, + 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, + 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x0e, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x10, + 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, + 0x02, 0x2c, 0x02, 0x2e, 0x0a, 0x67, 0x72, 0x6f, + 0x75, 0x70, 0x06, 0x4e, 0x61, 0x4e, 0x06, 0x6e, + 0x61, 0x6e, 0x02, 0x2b, 0x10, 0x70, 0x6c, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, 0x2d, 0x12, + 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x02, 0x25, 0x16, 0x70, 0x65, 0x72, 0x63, + 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x03, + 0x1e, 0x22, 0x10, 0x69, 0x6e, 0x66, 0x69, 0x6e, + 0x69, 0x74, 0x79, 0x0e, 0x73, 0x79, 0x6d, 0x62, + 0x6f, 0x6c, 0x73, 0x06, 0x41, 0x55, 0x24, 0x06, + 0x41, 0x55, 0x44, 0x04, 0x52, 0x24, 0x06, 0x42, + 0x52, 0x4c, 0x06, 0x43, 0x41, 0x24, 0x06, 0x43, + 0x41, 0x44, 0x06, 0x43, 0x4e, 0xa5, 0x06, 0x43, + 0x4e, 0x59, 0x03, 0xac, 0x20, 0x06, 0x45, 0x55, + 0x52, 0x02, 0xa3, 0x06, 0x47, 0x42, 0x50, 0x06, + 0x48, 0x4b, 0x24, 0x06, 0x48, 0x4b, 0x44, 0x03, + 0xaa, 0x20, 0x06, 0x49, 0x4c, 0x53, 0x03, 0xb9, + 0x20, 0x06, 0x49, 0x4e, 0x52, 0x06, 0x4a, 0x50, + 0xa5, 0x06, 0x4a, 0x50, 0x59, 0x03, 0xa9, 0x20, + 0x06, 0x4b, 0x52, 0x57, 0x06, 0x4d, 0x58, 0x24, + 0x06, 0x4d, 0x58, 0x4e, 0x06, 0x4e, 0x5a, 0x24, + 0x06, 0x4e, 0x5a, 0x44, 0x08, 0x45, 0x73, 0x63, + 0x2e, 0x06, 0x50, 0x54, 0x45, 0x03, 0x3f, 0x0e, + 0x06, 0x54, 0x48, 0x42, 0x06, 0x4e, 0x54, 0x24, + 0x06, 0x54, 0x57, 0x44, 0x06, 0x55, 0x53, 0x24, + 0x06, 0x55, 0x53, 0x44, 0x03, 0xab, 0x20, 0x06, + 0x56, 0x4e, 0x44, 0x08, 0x46, 0x43, 0x46, 0x41, + 0x06, 0x58, 0x41, 0x46, 0x06, 0x45, 0x43, 0x24, + 0x06, 0x58, 0x43, 0x44, 0x06, 0x43, 0x46, 0x41, + 0x06, 0x58, 0x4f, 0x46, 0x08, 0x43, 0x46, 0x50, + 0x46, 0x06, 0x58, 0x50, 0x46, 0x14, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, + 0x52, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, + 0x74, 0x6c, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x6a, + 0x73, 0x6f, 0x6e, 0x70, 0x2f, 0x70, 0x74, 0x2e, + 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, + 0x00, 0x01, 0x00, 0x27, 0x00, 0x89, 0x01, 0x9a, + 0x6b, 0x01, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x39, + 0xd0, 0x00, 0x00, 0x00, 0x43, 0xd1, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd2, 0x00, 0x00, 0x00, 0x4d, + 0xd3, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd4, 0x00, + 0x00, 0x00, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x04, + 0xd6, 0x00, 0x00, 0x00, 0x04, 0xd7, 0x00, 0x00, + 0x00, 0x04, 0xd8, 0x00, 0x00, 0x00, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x04, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdb, 0x00, 0x00, 0x00, 0x04, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x04, + 0xde, 0x00, 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, + 0x00, 0x04, 0xe0, 0x00, 0x00, 0x00, 0x04, 0xe1, + 0x00, 0x00, 0x00, 0x04, 0xe2, 0x00, 0x00, 0x00, + 0x26, 0x0f, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, + 0x0a, 0x4d, 0xe4, 0x00, 0x00, 0x00, 0x09, 0x4d, + 0xe5, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, + 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe9, + 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0xed, 0x00, + 0x00, 0x00, 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, + 0xef, 0x00, 0x00, 0x00, 0x04, 0xf0, 0x00, 0x00, + 0x00, 0x4d, 0xf1, 0x00, 0x00, 0x00, 0x04, 0xf2, + 0x00, 0x00, 0x00, 0x4d, 0xf3, 0x00, 0x00, 0x00, + 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xf5, 0x00, + 0x00, 0x00, 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, + 0xf7, 0x00, 0x00, 0x00, 0x04, 0xf8, 0x00, 0x00, + 0x00, 0x4d, 0xf9, 0x00, 0x00, 0x00, 0x04, 0xfa, + 0x00, 0x00, 0x00, 0x4d, 0xfb, 0x00, 0x00, 0x00, + 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xfd, 0x00, + 0x00, 0x00, 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, + 0xff, 0x00, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, + 0x00, 0x4d, 0x01, 0x01, 0x00, 0x00, 0x04, 0x02, + 0x01, 0x00, 0x00, 0x4d, 0x03, 0x01, 0x00, 0x00, + 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0x05, 0x01, + 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, + 0x07, 0x01, 0x00, 0x00, 0x04, 0x08, 0x01, 0x00, + 0x00, 0x4d, 0x09, 0x01, 0x00, 0x00, 0x04, 0x0a, + 0x01, 0x00, 0x00, 0x4d, 0x0b, 0x01, 0x00, 0x00, + 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, 0x0d, 0x01, + 0x00, 0x00, 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, + 0x0f, 0x01, 0x00, 0x00, 0x04, 0x10, 0x01, 0x00, + 0x00, 0x4d, 0x11, 0x01, 0x00, 0x00, 0x04, 0x12, + 0x01, 0x00, 0x00, 0x4d, 0x13, 0x01, 0x00, 0x00, + 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, 0x15, 0x01, + 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, + 0x17, 0x01, 0x00, 0x00, 0x04, 0x18, 0x01, 0x00, + 0x00, 0x4d, 0x19, 0x01, 0x00, 0x00, 0x04, 0x1a, + 0x01, 0x00, 0x00, 0x4d, 0x1b, 0x01, 0x00, 0x00, + 0x04, 0x1c, 0x01, 0x00, 0x00, 0x4d, 0x1d, 0x01, + 0x00, 0x00, 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, + 0x1f, 0x01, 0x00, 0x00, 0x04, 0x20, 0x01, 0x00, + 0x00, 0x4d, 0x21, 0x01, 0x00, 0x00, 0x04, 0x22, + 0x01, 0x00, 0x00, 0x4d, 0x23, 0x01, 0x00, 0x00, + 0x04, 0x24, 0x01, 0x00, 0x00, 0x4d, 0x25, 0x01, + 0x00, 0x00, 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, + 0x27, 0x01, 0x00, 0x00, 0x04, 0x28, 0x01, 0x00, + 0x00, 0x4d, 0x28, 0x01, 0x00, 0x00, 0x04, 0x29, + 0x01, 0x00, 0x00, 0x4d, 0x2a, 0x01, 0x00, 0x00, + 0x04, 0x2b, 0x01, 0x00, 0x00, 0x4d, 0x2c, 0x01, + 0x00, 0x00, 0x04, 0x2d, 0x01, 0x00, 0x00, 0x4d, + 0x2e, 0x01, 0x00, 0x00, 0x04, 0x29, 0x01, 0x00, + 0x00, 0x4d, 0x2f, 0x01, 0x00, 0x00, 0x04, 0x30, + 0x01, 0x00, 0x00, 0x4d, 0x31, 0x01, 0x00, 0x00, + 0x04, 0x32, 0x01, 0x00, 0x00, 0x4d, 0x33, 0x01, + 0x00, 0x00, 0x04, 0x34, 0x01, 0x00, 0x00, 0x4d, + 0x35, 0x01, 0x00, 0x00, 0x04, 0x36, 0x01, 0x00, + 0x00, 0x4d, 0x37, 0x01, 0x00, 0x00, 0x04, 0x38, + 0x01, 0x00, 0x00, 0x4d, 0x39, 0x01, 0x00, 0x00, + 0x04, 0x3a, 0x01, 0x00, 0x00, 0x4d, 0x3b, 0x01, + 0x00, 0x00, 0x04, 0x3c, 0x01, 0x00, 0x00, 0x4d, + 0x3d, 0x01, 0x00, 0x00, 0x04, 0x3e, 0x01, 0x00, + 0x00, 0x4d, 0x3f, 0x01, 0x00, 0x00, 0x4d, 0x40, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x41, 0x01, 0x00, + 0x00, 0x4d, 0x42, 0x01, 0x00, 0x00, 0x04, 0x38, + 0x01, 0x00, 0x00, 0x4d, 0x39, 0x01, 0x00, 0x00, + 0x04, 0x32, 0x01, 0x00, 0x00, 0x4d, 0x33, 0x01, + 0x00, 0x00, 0x04, 0x43, 0x01, 0x00, 0x00, 0x4d, + 0x2c, 0x01, 0x00, 0x00, 0x4d, 0x44, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x45, 0x01, 0x00, 0x00, 0x4d, + 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x4d, 0x48, 0x01, 0x00, 0x00, 0x04, 0x0a, + 0x01, 0x00, 0x00, 0x4d, 0x09, 0x01, 0x00, 0x00, + 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, 0x05, 0x01, + 0x00, 0x00, 0x4d, 0x49, 0x01, 0x00, 0x00, 0x4d, + 0x4a, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x0b, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x41, 0x00, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x6a, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x7d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x04, + 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, + 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, 0x4d, 0xd5, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x00, 0xbe, + 0x01, 0xbe, 0x02, 0xbe, 0x03, 0xbe, 0x04, 0xbe, + 0x05, 0xbe, 0x06, 0xbe, 0x07, 0xbe, 0x08, 0xbe, + 0x09, 0xbe, 0x0a, 0xbe, 0x0b, 0x26, 0x0c, 0x00, + 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, + 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, + 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, + 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, + 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, + 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, + 0x04, 0x8e, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6a, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x4d, + 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, + 0x01, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x0c, 0xbe, 0x0d, 0xbe, 0x0e, + 0xbe, 0x0f, 0xbe, 0x10, 0xbe, 0x11, 0xbe, 0x12, + 0xbe, 0x13, 0xbe, 0x14, 0xbe, 0x15, 0xbe, 0x16, + 0xbe, 0x17, 0xbe, 0x18, 0x26, 0x0d, 0x00, 0x4d, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, + 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, + 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, + 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, + 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, + 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, + 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, + 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, + 0x04, 0x9b, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x8f, 0x01, + 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, + 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, + 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, + 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, + 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, + 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, + 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, + 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x26, 0x0d, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6a, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7b, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x9c, 0x01, 0x00, 0x00, + 0x04, 0x9d, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, + 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, + 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, + 0x4d, 0xd7, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x19, 0xbe, 0x1a, 0xbe, 0x1b, 0xbe, 0x1c, 0xbe, + 0x1d, 0xbe, 0x1e, 0xbe, 0x1f, 0xbe, 0x20, 0xbe, + 0x21, 0xbe, 0x22, 0xbe, 0x23, 0xbe, 0x24, 0x26, + 0x0c, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, + 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, + 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, + 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, + 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, + 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, + 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, + 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, + 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, + 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, + 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x6a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7b, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7e, 0x01, 0x00, + 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, + 0x4d, 0x82, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x25, 0xbe, 0x26, + 0xbe, 0x27, 0xbe, 0x28, 0xbe, 0x29, 0xbe, 0x2a, + 0xbe, 0x2b, 0xbe, 0x2c, 0xbe, 0x2d, 0xbe, 0x2e, + 0xbe, 0x2f, 0xbe, 0x30, 0xbe, 0x31, 0x26, 0x0d, + 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, 0x9e, + 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, + 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, + 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, + 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, + 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, + 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, + 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, + 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, + 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, + 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, + 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, + 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, + 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, + 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, + 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x6a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x7b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x9c, 0x01, + 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, + 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x32, 0xbe, 0x33, 0xbe, 0x34, 0xbe, + 0x35, 0xbe, 0x36, 0xbe, 0x37, 0xbe, 0x38, 0xbe, + 0x39, 0xbe, 0x3a, 0xbe, 0x3b, 0xbe, 0x3c, 0xbe, + 0x3d, 0xbe, 0x3e, 0x26, 0x0d, 0x00, 0x4d, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, + 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, + 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, + 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, + 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, + 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, + 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, + 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, + 0xaa, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, + 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, + 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, + 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, + 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, + 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, + 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, + 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, + 0x04, 0xaa, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6a, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x9c, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, + 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, + 0x4d, 0xd9, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x3f, 0xbe, 0x40, 0xbe, 0x41, 0xbe, 0x42, 0xbe, + 0x43, 0xbe, 0x44, 0xbe, 0x45, 0xbe, 0x46, 0xbe, + 0x47, 0xbe, 0x48, 0xbe, 0x49, 0xbe, 0x4a, 0x26, + 0x0c, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, + 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, + 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, 0xae, + 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, + 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, + 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, + 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, + 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, 0x04, 0xb6, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, + 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, + 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, + 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, + 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, + 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, + 0x04, 0xb4, 0x01, 0x00, 0x00, 0x04, 0xb5, 0x01, + 0x00, 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x6a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7b, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x9c, 0x01, 0x00, + 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, 0x9c, + 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, + 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x4d, + 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, + 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x41, 0x00, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6a, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, + 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, + 0x04, 0xba, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, + 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, + 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, 0x04, + 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, + 0x00, 0x26, 0x04, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, + 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, + 0x04, 0xbe, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7d, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, + 0x82, 0x01, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x4b, 0xbe, 0x4c, 0xbe, + 0x4d, 0xbe, 0x4e, 0xbe, 0x4f, 0xbe, 0x50, 0xbe, + 0x51, 0xbe, 0x52, 0xbe, 0x53, 0xbe, 0x54, 0xbe, + 0x55, 0xbe, 0x56, 0xbe, 0x57, 0xbe, 0x58, 0x26, + 0x0e, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, + 0xbf, 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, + 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, 0x04, 0xc2, + 0x01, 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, + 0x04, 0xc4, 0x01, 0x00, 0x00, 0x04, 0xc5, 0x01, + 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, + 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, + 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, 0x04, 0xca, + 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, + 0x04, 0xcc, 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xbf, 0x01, + 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, 0x04, + 0xc1, 0x01, 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, + 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, 0x04, 0xc4, + 0x01, 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, + 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, + 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, + 0xc9, 0x01, 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, + 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, + 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x6a, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x7d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x04, + 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, + 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x59, 0xbe, + 0x5a, 0xbe, 0x5b, 0xbe, 0x5c, 0xbe, 0x5d, 0xbe, + 0x5e, 0xbe, 0x5f, 0xbe, 0x60, 0xbe, 0x61, 0xbe, + 0x62, 0xbe, 0x63, 0xbe, 0x64, 0x26, 0x0c, 0x00, + 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, + 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, 0x04, + 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, + 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, 0x04, 0xd2, + 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, + 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, 0xd5, 0x01, + 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, 0x04, + 0xd7, 0x01, 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, + 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, + 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, + 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, + 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, + 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, + 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, + 0x04, 0xd8, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6a, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xd9, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, + 0xd9, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, + 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x65, 0xbe, 0x66, 0xbe, 0x67, 0xbe, 0x68, 0xbe, + 0x69, 0xbe, 0x6a, 0xbe, 0x6b, 0xbe, 0x6c, 0xbe, + 0x6d, 0xbe, 0x6e, 0xbe, 0x6f, 0xbe, 0x70, 0x26, + 0x0c, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, + 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, 0x00, + 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, 0x04, 0xdd, + 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, 0x00, + 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, 0xe0, 0x01, + 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, 0x00, 0x04, + 0xe2, 0x01, 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, + 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, + 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, + 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, + 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, + 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, + 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, + 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, + 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x6a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7b, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xf2, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x52, 0x01, 0x00, + 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xf2, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, + 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x71, 0xbe, 0x72, 0xbe, 0x73, 0xbe, + 0x74, 0xbe, 0x75, 0xbe, 0x76, 0xbe, 0x77, 0xbe, + 0x78, 0xbe, 0x79, 0xbe, 0x7a, 0xbe, 0x7b, 0xbe, + 0x7c, 0x26, 0x0c, 0x00, 0x4d, 0x52, 0x01, 0x00, + 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, + 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, + 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, + 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, + 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, + 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, 0xe3, + 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, + 0x04, 0xe5, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x01, + 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, + 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, + 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, + 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, + 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, + 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, + 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x6a, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xf2, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x52, + 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xf2, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7d, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, + 0x82, 0x01, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x41, 0x00, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x6a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7b, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xf3, 0x01, 0x00, + 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, + 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, + 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, + 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, + 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, + 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, + 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, + 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, 0x02, + 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, 0x04, + 0x02, 0x02, 0x00, 0x00, 0x04, 0x03, 0x02, 0x00, + 0x00, 0x04, 0x04, 0x02, 0x00, 0x00, 0x04, 0x05, + 0x02, 0x00, 0x00, 0x04, 0x06, 0x02, 0x00, 0x00, + 0x04, 0x07, 0x02, 0x00, 0x00, 0x04, 0x08, 0x02, + 0x00, 0x00, 0x04, 0x09, 0x02, 0x00, 0x00, 0x04, + 0x0a, 0x02, 0x00, 0x00, 0x04, 0x0b, 0x02, 0x00, + 0x00, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x04, 0x0d, + 0x02, 0x00, 0x00, 0x04, 0x0e, 0x02, 0x00, 0x00, + 0x04, 0x0f, 0x02, 0x00, 0x00, 0x04, 0x10, 0x02, + 0x00, 0x00, 0x04, 0x11, 0x02, 0x00, 0x00, 0x04, + 0x12, 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, + 0x13, 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, + 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x21, + 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, + 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, + 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, + 0x17, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, + 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x25, + 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, + 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, + 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, + 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, + 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x29, + 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, + 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, + 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, + 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, + 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x2d, + 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, + 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, + 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, + 0x23, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, + 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x31, + 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, + 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, + 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, + 0x27, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, + 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x35, + 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, + 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, + 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, + 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, + 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x39, + 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, + 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, + 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, + 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, + 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x3d, + 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, + 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, + 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, + 0x33, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, + 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x41, + 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, + 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, + 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, + 0x37, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, + 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x45, + 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, + 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, + 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, + 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, + 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x49, + 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, + 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, + 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, + 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, + 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x4d, + 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, + 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, + 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, + 0x43, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, + 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x51, + 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, + 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, + 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, + 0x47, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, + 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x55, + 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, + 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, + 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, + 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, + 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x59, + 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, + 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, + 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, + 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, + 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x5d, + 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, + 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, + 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, + 0x53, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, + 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x61, + 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, + 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, + 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, + 0x57, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, + 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x65, + 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, + 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, + 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, + 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, + 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x69, + 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, + 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, + 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, + 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, + 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x6d, + 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, + 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, + 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, + 0x63, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, + 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x71, + 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, + 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, + 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, + 0x67, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, + 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x75, + 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, + 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, + 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, + 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, + 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x79, + 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, + 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, + 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, + 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, + 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x7d, + 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, + 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, + 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, + 0x73, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, + 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x81, + 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, + 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, + 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, + 0x77, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, + 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x85, + 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, + 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, + 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, + 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, + 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x89, + 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, + 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, + 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, + 0x7f, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, + 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0x8d, + 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, + 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, + 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, + 0x83, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, + 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0x91, + 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, + 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, + 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, + 0x87, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, + 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0x95, + 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, + 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, + 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, + 0x8b, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, + 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0x99, + 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, + 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, + 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, + 0x8f, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, + 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0x9d, + 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, + 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, + 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, + 0x93, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, + 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xa1, + 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, + 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, + 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, + 0x97, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, + 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xa5, + 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, + 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, + 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, + 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, + 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xa9, + 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, + 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, + 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, + 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, + 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xad, + 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, + 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, + 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, + 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, + 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xb1, + 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, + 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, + 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, + 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, + 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xb5, + 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, + 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, + 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, + 0xab, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, + 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xb9, + 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, + 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, + 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, + 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, + 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xbd, + 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, + 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, + 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, + 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, + 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xc1, + 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, + 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, + 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, + 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, + 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xc5, + 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, + 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, + 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, + 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, + 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xc9, + 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, + 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, + 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, + 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, + 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xcd, + 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, + 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, + 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, + 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, + 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xd1, + 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, + 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, + 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, + 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, + 0x80, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xd5, + 0x00, 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, + 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, + 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, + 0xcb, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x80, 0x04, 0xcc, 0x02, 0x00, 0x00, 0x4d, 0xd9, + 0x00, 0x00, 0x80, 0x04, 0xcd, 0x02, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xce, 0x02, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, + 0xcf, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x80, 0x04, 0xd0, 0x02, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x80, 0x04, 0xd1, 0x02, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xd2, 0x02, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, + 0xd3, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x80, 0x04, 0xd4, 0x02, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x80, 0x04, 0xd5, 0x02, 0x00, 0x00, + 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x02, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, + 0xd7, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, + 0x80, 0x04, 0xd8, 0x02, 0x00, 0x00, 0x4d, 0xe5, + 0x00, 0x00, 0x80, 0x04, 0xd9, 0x02, 0x00, 0x00, + 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xda, 0x02, + 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, + 0x80, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x4d, 0xe9, + 0x00, 0x00, 0x80, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0x03, 0x01, + 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, + 0x52, 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, + 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, + 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, + 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, + 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, + 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, + 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, + 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, + 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, 0x02, + 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, 0x04, + 0x02, 0x02, 0x00, 0x00, 0x04, 0x03, 0x02, 0x00, + 0x00, 0x04, 0x04, 0x02, 0x00, 0x00, 0x04, 0x05, + 0x02, 0x00, 0x00, 0x04, 0x06, 0x02, 0x00, 0x00, + 0x04, 0x07, 0x02, 0x00, 0x00, 0x04, 0x08, 0x02, + 0x00, 0x00, 0x04, 0x09, 0x02, 0x00, 0x00, 0x04, + 0x0a, 0x02, 0x00, 0x00, 0x04, 0x0b, 0x02, 0x00, + 0x00, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x04, 0x0d, + 0x02, 0x00, 0x00, 0x04, 0x0e, 0x02, 0x00, 0x00, + 0x04, 0x0f, 0x02, 0x00, 0x00, 0x04, 0x10, 0x02, + 0x00, 0x00, 0x04, 0x11, 0x02, 0x00, 0x00, 0x04, + 0x12, 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, + 0x13, 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, + 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x21, + 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, + 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, + 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, + 0x17, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, + 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x25, + 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, + 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, + 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, + 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, + 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x29, + 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, + 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, + 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, + 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, + 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x2d, + 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, + 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, + 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, + 0x23, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, + 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x31, + 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, + 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, + 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, + 0x27, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, + 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x35, + 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, + 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, + 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, + 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, + 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x39, + 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, + 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, + 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, + 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, + 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x3d, + 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, + 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, + 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, + 0x33, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, + 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x41, + 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, + 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, + 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, + 0x37, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, + 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x45, + 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, + 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, + 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, + 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, + 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x49, + 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, + 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, + 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, + 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, + 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x4d, + 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, + 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, + 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, + 0x43, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, + 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x51, + 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, + 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, + 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, + 0x47, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, + 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x55, + 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, + 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, + 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, + 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, + 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x59, + 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, + 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, + 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, + 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, + 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x5d, + 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, + 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, + 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, + 0x53, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, + 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x61, + 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, + 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, + 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, + 0x57, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, + 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x65, + 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, + 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, + 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, + 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, + 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x69, + 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, + 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, + 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, + 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, + 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x6d, + 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, + 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, + 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, + 0x63, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, + 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x71, + 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, + 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, + 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, + 0x67, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, + 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x75, + 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, + 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, + 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, + 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, + 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x79, + 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, + 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, + 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, + 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, + 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x7d, + 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, + 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, + 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, + 0x73, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, + 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x81, + 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, + 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, + 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, + 0x77, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, + 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x85, + 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, + 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, + 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, + 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, + 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x89, + 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, + 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, + 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, + 0x7f, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, + 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0x8d, + 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, + 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, + 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, + 0x83, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, + 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0x91, + 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, + 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, + 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, + 0x87, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, + 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0x95, + 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, + 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, + 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, + 0x8b, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, + 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0x99, + 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, + 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, + 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, + 0x8f, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, + 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0x9d, + 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, + 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, + 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, + 0x93, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, + 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xa1, + 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, + 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, + 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, + 0x97, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, + 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xa5, + 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, + 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, + 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, + 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, + 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xa9, + 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, + 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, + 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, + 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, + 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xad, + 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, + 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, + 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, + 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, + 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xb1, + 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, + 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, + 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, + 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, + 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xb5, + 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, + 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, + 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, + 0xab, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, + 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xb9, + 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, + 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, + 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, + 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, + 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xbd, + 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, + 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, + 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, + 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, + 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xc1, + 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, + 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, + 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, + 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, + 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xc5, + 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, + 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, + 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, + 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, + 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xc9, + 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, + 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, + 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, + 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, + 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xcd, + 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, + 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, + 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, + 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, + 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xd1, + 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, + 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, + 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, + 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, + 0x80, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xd5, + 0x00, 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, + 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, + 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, + 0xcb, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x80, 0x04, 0xcc, 0x02, 0x00, 0x00, 0x4d, 0xd9, + 0x00, 0x00, 0x80, 0x04, 0xcd, 0x02, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xce, 0x02, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, + 0xcf, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x80, 0x04, 0xd0, 0x02, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x80, 0x04, 0xd1, 0x02, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xd2, 0x02, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, + 0xd3, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x80, 0x04, 0xd4, 0x02, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x80, 0x04, 0xd5, 0x02, 0x00, 0x00, + 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x02, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, + 0xd7, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, + 0x80, 0x04, 0xd8, 0x02, 0x00, 0x00, 0x4d, 0xe5, + 0x00, 0x00, 0x80, 0x04, 0xd9, 0x02, 0x00, 0x00, + 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xda, 0x02, + 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, + 0xdb, 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, + 0x80, 0x04, 0xdc, 0x02, 0x00, 0x00, 0x4d, 0xe9, + 0x00, 0x00, 0x80, 0x04, 0xdd, 0x02, 0x00, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0xde, 0x02, + 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, + 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, + 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, + 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, + 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, + 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, + 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, + 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, + 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, 0x02, + 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, 0x04, + 0x02, 0x02, 0x00, 0x00, 0x04, 0x03, 0x02, 0x00, + 0x00, 0x04, 0x04, 0x02, 0x00, 0x00, 0x04, 0x05, + 0x02, 0x00, 0x00, 0x04, 0x06, 0x02, 0x00, 0x00, + 0x04, 0x07, 0x02, 0x00, 0x00, 0x04, 0x08, 0x02, + 0x00, 0x00, 0x04, 0x09, 0x02, 0x00, 0x00, 0x04, + 0x0a, 0x02, 0x00, 0x00, 0x04, 0x0b, 0x02, 0x00, + 0x00, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x04, 0x0d, + 0x02, 0x00, 0x00, 0x04, 0x0e, 0x02, 0x00, 0x00, + 0x04, 0x0f, 0x02, 0x00, 0x00, 0x04, 0x10, 0x02, + 0x00, 0x00, 0x04, 0x11, 0x02, 0x00, 0x00, 0x04, + 0x12, 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, + 0x13, 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, + 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x21, + 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, + 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, + 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, + 0x17, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, + 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x25, + 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, + 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, + 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, + 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, + 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x29, + 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, + 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, + 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, + 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, + 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x2d, + 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, + 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, + 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, + 0x23, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, + 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x31, + 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, + 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, + 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, + 0x27, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, + 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x35, + 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, + 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, + 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, + 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, + 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x39, + 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, + 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, + 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, + 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, + 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x3d, + 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, + 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, + 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, + 0x33, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, + 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x41, + 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, + 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, + 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, + 0x37, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, + 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x45, + 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, + 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, + 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, + 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, + 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x49, + 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, + 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, + 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, + 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, + 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x4d, + 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, + 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, + 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, + 0x43, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, + 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x51, + 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, + 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, + 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, + 0x47, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, + 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x55, + 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, + 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, + 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, + 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, + 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x59, + 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, + 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, + 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, + 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, + 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x5d, + 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, + 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, + 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, + 0x53, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, + 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x61, + 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, + 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, + 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, + 0x57, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, + 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x65, + 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, + 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, + 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, + 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, + 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x69, + 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, + 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, + 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, + 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, + 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x6d, + 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, + 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, + 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, + 0x63, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, + 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x71, + 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, + 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, + 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, + 0x67, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, + 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x75, + 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, + 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, + 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, + 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, + 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x79, + 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, + 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, + 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, + 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, + 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x7d, + 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, + 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, + 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, + 0x73, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, + 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x81, + 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, + 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, + 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, + 0x77, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, + 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x85, + 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, + 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, + 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, + 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, + 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x89, + 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, + 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, + 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, + 0x7f, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, + 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0x8d, + 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, + 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, + 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, + 0x83, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, + 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0x91, + 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, + 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, + 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, + 0x87, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, + 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0x95, + 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, + 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, + 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, + 0x8b, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, + 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0x99, + 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, + 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, + 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, + 0x8f, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, + 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0x9d, + 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, + 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, + 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, + 0x93, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, + 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xa1, + 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, + 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, + 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, + 0x97, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, + 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xa5, + 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, + 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, + 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, + 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, + 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xa9, + 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, + 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, + 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, + 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, + 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xad, + 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, + 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, + 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, + 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, + 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xb1, + 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, + 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, + 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, + 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, + 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xb5, + 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, + 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, + 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, + 0xab, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, + 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xb9, + 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, + 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, + 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, + 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, + 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xbd, + 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, + 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, + 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, + 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, + 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xc1, + 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, + 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, + 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, + 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, + 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xc5, + 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, + 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, + 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, + 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, + 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xc9, + 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, + 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, + 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, + 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, + 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xcd, + 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, + 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, + 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, + 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, + 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xd1, + 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, + 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, + 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, + 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, + 0x80, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xd5, + 0x00, 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, + 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, + 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, + 0xcb, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x80, 0x04, 0xcc, 0x02, 0x00, 0x00, 0x4d, 0xd9, + 0x00, 0x00, 0x80, 0x04, 0xcd, 0x02, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xce, 0x02, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, + 0xcf, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x80, 0x04, 0xd0, 0x02, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x80, 0x04, 0xd1, 0x02, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xd2, 0x02, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, + 0xd3, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x80, 0x04, 0xd4, 0x02, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x80, 0x04, 0xd5, 0x02, 0x00, 0x00, + 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x02, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, + 0xd7, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, + 0x80, 0x04, 0xd8, 0x02, 0x00, 0x00, 0x4d, 0xe5, + 0x00, 0x00, 0x80, 0x04, 0xd9, 0x02, 0x00, 0x00, + 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xda, 0x02, + 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, + 0xdb, 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, + 0x80, 0x04, 0xdc, 0x02, 0x00, 0x00, 0x4d, 0xe9, + 0x00, 0x00, 0x80, 0x04, 0xdd, 0x02, 0x00, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0xde, 0x02, + 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x4d, + 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, + 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x7d, 0xbe, 0x7e, 0xbe, 0x7f, + 0xbe, 0x80, 0xbe, 0x81, 0xbe, 0x82, 0xbe, 0x83, + 0xbe, 0x84, 0xbe, 0x85, 0xbe, 0x86, 0xbe, 0x87, + 0xbe, 0x88, 0x26, 0x0c, 0x00, 0x4d, 0x52, 0x01, + 0x00, 0x00, 0x04, 0xdf, 0x02, 0x00, 0x00, 0x04, + 0xe0, 0x02, 0x00, 0x00, 0x04, 0xe1, 0x02, 0x00, + 0x00, 0x04, 0xe2, 0x02, 0x00, 0x00, 0x04, 0xe3, + 0x02, 0x00, 0x00, 0x04, 0xe4, 0x02, 0x00, 0x00, + 0x04, 0xe5, 0x02, 0x00, 0x00, 0x04, 0xe6, 0x02, + 0x00, 0x00, 0x04, 0xe7, 0x02, 0x00, 0x00, 0x04, + 0xe8, 0x02, 0x00, 0x00, 0x04, 0xe9, 0x02, 0x00, + 0x00, 0x04, 0xea, 0x02, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xdf, + 0x02, 0x00, 0x00, 0x04, 0xe0, 0x02, 0x00, 0x00, + 0x04, 0xe1, 0x02, 0x00, 0x00, 0x04, 0xe2, 0x02, + 0x00, 0x00, 0x04, 0xe3, 0x02, 0x00, 0x00, 0x04, + 0xe4, 0x02, 0x00, 0x00, 0x04, 0xe5, 0x02, 0x00, + 0x00, 0x04, 0xe6, 0x02, 0x00, 0x00, 0x04, 0xe7, + 0x02, 0x00, 0x00, 0x04, 0xe8, 0x02, 0x00, 0x00, + 0x04, 0xe9, 0x02, 0x00, 0x00, 0x04, 0xea, 0x02, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x6a, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xeb, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x52, 0x01, 0x00, 0x00, 0x04, 0xeb, 0x02, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xeb, 0x02, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7d, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7e, 0x01, 0x00, + 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, + 0x4d, 0x82, 0x01, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x41, 0x00, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x6a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x7b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xec, 0x02, + 0x00, 0x00, 0x04, 0xed, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, + 0xec, 0x02, 0x00, 0x00, 0x04, 0xed, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xec, 0x02, 0x00, 0x00, 0x04, 0xed, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, + 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, + 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x4d, + 0xee, 0x02, 0x00, 0x00, 0x4d, 0xef, 0x02, 0x00, + 0x00, 0x0b, 0x04, 0xf0, 0x02, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xf1, 0x02, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0xf2, 0x02, 0x00, 0x00, 0x4d, 0xf3, + 0x02, 0x00, 0x00, 0x04, 0xf4, 0x02, 0x00, 0x00, + 0x4d, 0xf5, 0x02, 0x00, 0x00, 0x4d, 0xf6, 0x02, + 0x00, 0x00, 0x0b, 0x04, 0xf7, 0x02, 0x00, 0x00, + 0x4d, 0xf3, 0x02, 0x00, 0x00, 0x04, 0xf8, 0x02, + 0x00, 0x00, 0x4d, 0xf5, 0x02, 0x00, 0x00, 0x4d, + 0xf9, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xfa, 0x02, + 0x00, 0x00, 0x4d, 0xf3, 0x02, 0x00, 0x00, 0x04, + 0xfb, 0x02, 0x00, 0x00, 0x4d, 0xf5, 0x02, 0x00, + 0x00, 0x4d, 0xfc, 0x02, 0x00, 0x00, 0x4d, 0xfd, + 0x02, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xfe, 0x02, + 0x00, 0x00, 0x4d, 0xf6, 0x02, 0x00, 0x00, 0x04, + 0xff, 0x02, 0x00, 0x00, 0x4d, 0x00, 0x03, 0x00, + 0x00, 0x04, 0x01, 0x03, 0x00, 0x00, 0x4d, 0x02, + 0x03, 0x00, 0x00, 0x04, 0x03, 0x03, 0x00, 0x00, + 0x4d, 0x04, 0x03, 0x00, 0x00, 0x04, 0x05, 0x03, + 0x00, 0x00, 0x4d, 0x06, 0x03, 0x00, 0x00, 0x04, + 0x07, 0x03, 0x00, 0x00, 0x4d, 0x08, 0x03, 0x00, + 0x00, 0x04, 0x09, 0x03, 0x00, 0x00, 0x4d, 0x0a, + 0x03, 0x00, 0x00, 0x4d, 0xf0, 0x02, 0x00, 0x00, + 0x4d, 0x0b, 0x03, 0x00, 0x00, 0x0b, 0x04, 0x0c, + 0x03, 0x00, 0x00, 0x4d, 0x0d, 0x03, 0x00, 0x00, + 0x04, 0x0e, 0x03, 0x00, 0x00, 0x4d, 0x0f, 0x03, + 0x00, 0x00, 0x04, 0x10, 0x03, 0x00, 0x00, 0x4d, + 0x11, 0x03, 0x00, 0x00, 0x04, 0x12, 0x03, 0x00, + 0x00, 0x4d, 0x13, 0x03, 0x00, 0x00, 0x04, 0x14, + 0x03, 0x00, 0x00, 0x4d, 0x15, 0x03, 0x00, 0x00, + 0x04, 0x16, 0x03, 0x00, 0x00, 0x4d, 0x17, 0x03, + 0x00, 0x00, 0x04, 0x18, 0x03, 0x00, 0x00, 0x4d, + 0x19, 0x03, 0x00, 0x00, 0x04, 0x1a, 0x03, 0x00, + 0x00, 0x4d, 0x1b, 0x03, 0x00, 0x00, 0x04, 0x1c, + 0x03, 0x00, 0x00, 0x4d, 0x1d, 0x03, 0x00, 0x00, + 0x04, 0x1e, 0x03, 0x00, 0x00, 0x4d, 0x1f, 0x03, + 0x00, 0x00, 0x04, 0x20, 0x03, 0x00, 0x00, 0x4d, + 0x21, 0x03, 0x00, 0x00, 0x04, 0x22, 0x03, 0x00, + 0x00, 0x4d, 0x23, 0x03, 0x00, 0x00, 0x04, 0x24, + 0x03, 0x00, 0x00, 0x4d, 0x25, 0x03, 0x00, 0x00, + 0x04, 0x26, 0x03, 0x00, 0x00, 0x4d, 0x27, 0x03, + 0x00, 0x00, 0x04, 0x28, 0x03, 0x00, 0x00, 0x4d, + 0x29, 0x03, 0x00, 0x00, 0x04, 0x2a, 0x03, 0x00, + 0x00, 0x4d, 0x2b, 0x03, 0x00, 0x00, 0x04, 0x2c, + 0x03, 0x00, 0x00, 0x4d, 0x2d, 0x03, 0x00, 0x00, + 0x04, 0x2e, 0x03, 0x00, 0x00, 0x4d, 0x2f, 0x03, + 0x00, 0x00, 0x04, 0x30, 0x03, 0x00, 0x00, 0x4d, + 0x31, 0x03, 0x00, 0x00, 0x04, 0x32, 0x03, 0x00, + 0x00, 0x4d, 0x33, 0x03, 0x00, 0x00, 0x04, 0x34, + 0x03, 0x00, 0x00, 0x4d, 0x35, 0x03, 0x00, 0x00, + 0x04, 0x36, 0x03, 0x00, 0x00, 0x4d, 0x37, 0x03, + 0x00, 0x00, 0x4d, 0x38, 0x03, 0x00, 0x00, 0x4d, + 0x45, 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, 0xcc, + 0x28, 0xf2, 0x0c, 0x01, 0x00, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, + 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_pt_PT_size = 25097; + +const uint8_t intl_pt_PT[25097] = { + 0x01, 0xf2, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x0a, 0x70, 0x74, 0x2d, 0x50, 0x54, 0x0c, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x0e, 0x67, 0x72, + 0x65, 0x67, 0x6f, 0x72, 0x79, 0x10, 0x62, 0x75, + 0x64, 0x64, 0x68, 0x69, 0x73, 0x74, 0x0e, 0x63, + 0x68, 0x69, 0x6e, 0x65, 0x73, 0x65, 0x0c, 0x63, + 0x6f, 0x70, 0x74, 0x69, 0x63, 0x0a, 0x64, 0x61, + 0x6e, 0x67, 0x69, 0x0e, 0x65, 0x74, 0x68, 0x69, + 0x6f, 0x61, 0x61, 0x10, 0x65, 0x74, 0x68, 0x69, + 0x6f, 0x70, 0x69, 0x63, 0x0e, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x69, 0x63, 0x0c, 0x68, 0x65, 0x62, + 0x72, 0x65, 0x77, 0x0c, 0x69, 0x6e, 0x64, 0x69, + 0x61, 0x6e, 0x0e, 0x69, 0x73, 0x6c, 0x61, 0x6d, + 0x69, 0x63, 0x10, 0x69, 0x73, 0x6c, 0x61, 0x6d, + 0x69, 0x63, 0x63, 0x10, 0x6a, 0x61, 0x70, 0x61, + 0x6e, 0x65, 0x73, 0x65, 0x0e, 0x70, 0x65, 0x72, + 0x73, 0x69, 0x61, 0x6e, 0x06, 0x72, 0x6f, 0x63, + 0x04, 0x63, 0x61, 0x0e, 0x68, 0x6f, 0x75, 0x72, + 0x4e, 0x6f, 0x30, 0x0c, 0x68, 0x6f, 0x75, 0x72, + 0x31, 0x32, 0x10, 0x7b, 0x31, 0x7d, 0x2c, 0x20, + 0x7b, 0x30, 0x7d, 0x0a, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x0c, 0x6d, 0x65, 0x64, 0x69, 0x75, 0x6d, + 0x18, 0x7b, 0x31, 0x7d, 0x20, 0x27, 0xe0, 0x73, + 0x27, 0x20, 0x7b, 0x30, 0x7d, 0x08, 0x66, 0x75, + 0x6c, 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x02, + 0x64, 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, 0x08, + 0x45, 0x2c, 0x20, 0x64, 0x04, 0x45, 0x64, 0x12, + 0x45, 0x2c, 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x20, + 0x61, 0x06, 0x45, 0x68, 0x6d, 0x10, 0x45, 0x2c, + 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x06, 0x45, + 0x48, 0x6d, 0x18, 0x45, 0x2c, 0x20, 0x68, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x08, + 0x45, 0x68, 0x6d, 0x73, 0x16, 0x45, 0x2c, 0x20, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x08, 0x45, 0x48, 0x6d, 0x73, 0x06, 0x79, 0x20, + 0x47, 0x04, 0x47, 0x79, 0x18, 0x4d, 0x4d, 0x4d, + 0x20, 0x27, 0x64, 0x65, 0x27, 0x20, 0x79, 0x20, + 0x47, 0x0a, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x26, + 0x64, 0x20, 0x27, 0x64, 0x65, 0x27, 0x20, 0x4d, + 0x4d, 0x4d, 0x20, 0x27, 0x64, 0x65, 0x27, 0x20, + 0x79, 0x20, 0x47, 0x0c, 0x47, 0x79, 0x4d, 0x4d, + 0x4d, 0x64, 0x2c, 0x45, 0x2c, 0x20, 0x64, 0x20, + 0x27, 0x64, 0x65, 0x27, 0x20, 0x4d, 0x4d, 0x4d, + 0x20, 0x27, 0x64, 0x65, 0x27, 0x20, 0x79, 0x20, + 0x47, 0x0e, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x45, + 0x64, 0x06, 0x68, 0x20, 0x61, 0x02, 0x68, 0x04, + 0x48, 0x48, 0x02, 0x48, 0x0c, 0x68, 0x3a, 0x6d, + 0x6d, 0x20, 0x61, 0x04, 0x68, 0x6d, 0x0a, 0x48, + 0x48, 0x3a, 0x6d, 0x6d, 0x04, 0x48, 0x6d, 0x12, + 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, + 0x61, 0x06, 0x68, 0x6d, 0x73, 0x10, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x06, 0x48, + 0x6d, 0x73, 0x16, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x20, 0x61, 0x20, 0x76, 0x08, 0x68, + 0x6d, 0x73, 0x76, 0x14, 0x48, 0x48, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x76, 0x08, 0x48, + 0x6d, 0x73, 0x76, 0x10, 0x68, 0x3a, 0x6d, 0x6d, + 0x20, 0x61, 0x20, 0x76, 0x06, 0x68, 0x6d, 0x76, + 0x0e, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x20, 0x76, + 0x06, 0x48, 0x6d, 0x76, 0x02, 0x4c, 0x02, 0x4d, + 0x0a, 0x64, 0x64, 0x2f, 0x4d, 0x4d, 0x04, 0x4d, + 0x64, 0x10, 0x45, 0x2c, 0x20, 0x64, 0x64, 0x2f, + 0x4d, 0x4d, 0x06, 0x4d, 0x45, 0x64, 0x08, 0x4d, + 0x4d, 0x64, 0x64, 0x06, 0x4c, 0x4c, 0x4c, 0x06, + 0x4d, 0x4d, 0x4d, 0x08, 0x64, 0x2f, 0x4d, 0x4d, + 0x08, 0x4d, 0x4d, 0x4d, 0x64, 0x0e, 0x45, 0x2c, + 0x20, 0x64, 0x2f, 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, + 0x4d, 0x45, 0x64, 0x16, 0x64, 0x20, 0x27, 0x64, + 0x65, 0x27, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, + 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x20, 0x63, 0x63, + 0x63, 0x2c, 0x20, 0x64, 0x20, 0x27, 0x64, 0x65, + 0x27, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x0c, 0x4d, + 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x04, 0x6d, 0x73, 0x02, 0x79, + 0x08, 0x4d, 0x4d, 0x2f, 0x79, 0x04, 0x79, 0x4d, + 0x0e, 0x64, 0x64, 0x2f, 0x4d, 0x4d, 0x2f, 0x79, + 0x06, 0x79, 0x4d, 0x64, 0x14, 0x45, 0x2c, 0x20, + 0x64, 0x64, 0x2f, 0x4d, 0x4d, 0x2f, 0x79, 0x08, + 0x79, 0x4d, 0x45, 0x64, 0x06, 0x79, 0x4d, 0x4d, + 0x08, 0x79, 0x4d, 0x4d, 0x4d, 0x0c, 0x64, 0x2f, + 0x4d, 0x4d, 0x2f, 0x79, 0x0a, 0x79, 0x4d, 0x4d, + 0x4d, 0x64, 0x12, 0x45, 0x2c, 0x20, 0x64, 0x2f, + 0x4d, 0x4d, 0x2f, 0x79, 0x0c, 0x79, 0x4d, 0x4d, + 0x4d, 0x45, 0x64, 0x18, 0x45, 0x45, 0x45, 0x45, + 0x2c, 0x20, 0x64, 0x2f, 0x4d, 0x4d, 0x2f, 0x79, + 0x12, 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x45, 0x45, + 0x45, 0x64, 0x16, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, + 0x27, 0x64, 0x65, 0x27, 0x20, 0x79, 0x0a, 0x79, + 0x4d, 0x4d, 0x4d, 0x4d, 0x24, 0x64, 0x20, 0x27, + 0x64, 0x65, 0x27, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, + 0x20, 0x27, 0x64, 0x65, 0x27, 0x20, 0x79, 0x0c, + 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x2e, 0x63, + 0x63, 0x63, 0x2c, 0x20, 0x64, 0x20, 0x27, 0x64, + 0x65, 0x27, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, + 0x27, 0x64, 0x65, 0x27, 0x20, 0x79, 0x0e, 0x79, + 0x4d, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x16, 0x51, + 0x51, 0x51, 0x51, 0x20, 0x27, 0x64, 0x65, 0x27, + 0x20, 0x79, 0x08, 0x79, 0x51, 0x51, 0x51, 0x0a, + 0x79, 0x51, 0x51, 0x51, 0x51, 0x20, 0x61, 0x76, + 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x30, 0x45, + 0x45, 0x45, 0x45, 0x2c, 0x20, 0x64, 0x20, 0x27, + 0x64, 0x65, 0x27, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, + 0x20, 0x27, 0x64, 0x65, 0x27, 0x20, 0x79, 0x14, + 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x45, 0x45, 0x45, + 0x45, 0x64, 0x10, 0x64, 0x64, 0x2f, 0x4d, 0x4d, + 0x2f, 0x79, 0x79, 0x16, 0x64, 0x61, 0x74, 0x65, + 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x1a, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x7a, 0x7a, 0x7a, 0x7a, 0x12, 0x68, 0x6d, + 0x6d, 0x73, 0x73, 0x7a, 0x7a, 0x7a, 0x7a, 0x14, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x7a, 0x08, 0x68, 0x6d, 0x73, 0x7a, 0x16, + 0x74, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x73, 0x0e, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x73, 0x02, 0x4a, 0x02, 0x46, 0x02, + 0x41, 0x02, 0x53, 0x02, 0x4f, 0x02, 0x4e, 0x02, + 0x44, 0x0c, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x06, 0x6a, 0x61, 0x6e, 0x06, 0x66, 0x65, 0x76, + 0x06, 0x6d, 0x61, 0x72, 0x06, 0x61, 0x62, 0x72, + 0x06, 0x6d, 0x61, 0x69, 0x06, 0x6a, 0x75, 0x6e, + 0x06, 0x6a, 0x75, 0x6c, 0x06, 0x61, 0x67, 0x6f, + 0x06, 0x6f, 0x75, 0x74, 0x06, 0x6e, 0x6f, 0x76, + 0x06, 0x64, 0x65, 0x7a, 0x0e, 0x6a, 0x61, 0x6e, + 0x65, 0x69, 0x72, 0x6f, 0x12, 0x66, 0x65, 0x76, + 0x65, 0x72, 0x65, 0x69, 0x72, 0x6f, 0x0a, 0x6d, + 0x61, 0x72, 0xe7, 0x6f, 0x0a, 0x61, 0x62, 0x72, + 0x69, 0x6c, 0x08, 0x6d, 0x61, 0x69, 0x6f, 0x0a, + 0x6a, 0x75, 0x6e, 0x68, 0x6f, 0x0a, 0x6a, 0x75, + 0x6c, 0x68, 0x6f, 0x0c, 0x61, 0x67, 0x6f, 0x73, + 0x74, 0x6f, 0x10, 0x73, 0x65, 0x74, 0x65, 0x6d, + 0x62, 0x72, 0x6f, 0x0e, 0x6f, 0x75, 0x74, 0x75, + 0x62, 0x72, 0x6f, 0x10, 0x6e, 0x6f, 0x76, 0x65, + 0x6d, 0x62, 0x72, 0x6f, 0x10, 0x64, 0x65, 0x7a, + 0x65, 0x6d, 0x62, 0x72, 0x6f, 0x0c, 0x6d, 0x6f, + 0x6e, 0x74, 0x68, 0x73, 0x02, 0x54, 0x02, 0x51, + 0x0e, 0x64, 0x6f, 0x6d, 0x69, 0x6e, 0x67, 0x6f, + 0x0e, 0x73, 0x65, 0x67, 0x75, 0x6e, 0x64, 0x61, + 0x0a, 0x74, 0x65, 0x72, 0xe7, 0x61, 0x0c, 0x71, + 0x75, 0x61, 0x72, 0x74, 0x61, 0x0c, 0x71, 0x75, + 0x69, 0x6e, 0x74, 0x61, 0x0a, 0x73, 0x65, 0x78, + 0x74, 0x61, 0x0c, 0x73, 0xe1, 0x62, 0x61, 0x64, + 0x6f, 0x1a, 0x73, 0x65, 0x67, 0x75, 0x6e, 0x64, + 0x61, 0x2d, 0x66, 0x65, 0x69, 0x72, 0x61, 0x16, + 0x74, 0x65, 0x72, 0xe7, 0x61, 0x2d, 0x66, 0x65, + 0x69, 0x72, 0x61, 0x18, 0x71, 0x75, 0x61, 0x72, + 0x74, 0x61, 0x2d, 0x66, 0x65, 0x69, 0x72, 0x61, + 0x18, 0x71, 0x75, 0x69, 0x6e, 0x74, 0x61, 0x2d, + 0x66, 0x65, 0x69, 0x72, 0x61, 0x16, 0x73, 0x65, + 0x78, 0x74, 0x61, 0x2d, 0x66, 0x65, 0x69, 0x72, + 0x61, 0x08, 0x64, 0x61, 0x79, 0x73, 0x04, 0x42, + 0x45, 0x08, 0x65, 0x72, 0x61, 0x73, 0x10, 0x64, + 0x61, 0x20, 0x6d, 0x61, 0x6e, 0x68, 0xe3, 0x04, + 0x61, 0x6d, 0x10, 0x64, 0x61, 0x20, 0x74, 0x61, + 0x72, 0x64, 0x65, 0x04, 0x70, 0x6d, 0x14, 0x64, + 0x61, 0x79, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, + 0x73, 0x04, 0x4d, 0x31, 0x04, 0x4d, 0x32, 0x04, + 0x4d, 0x33, 0x04, 0x4d, 0x34, 0x04, 0x4d, 0x35, + 0x04, 0x4d, 0x36, 0x04, 0x4d, 0x37, 0x04, 0x4d, + 0x38, 0x04, 0x4d, 0x39, 0x06, 0x4d, 0x31, 0x30, + 0x06, 0x4d, 0x31, 0x31, 0x06, 0x4d, 0x31, 0x32, + 0x0a, 0x4d, 0xea, 0x73, 0x20, 0x31, 0x0a, 0x4d, + 0xea, 0x73, 0x20, 0x32, 0x0a, 0x4d, 0xea, 0x73, + 0x20, 0x33, 0x0a, 0x4d, 0xea, 0x73, 0x20, 0x34, + 0x0a, 0x4d, 0xea, 0x73, 0x20, 0x35, 0x0a, 0x4d, + 0xea, 0x73, 0x20, 0x36, 0x0a, 0x4d, 0xea, 0x73, + 0x20, 0x37, 0x0a, 0x4d, 0xea, 0x73, 0x20, 0x38, + 0x0a, 0x4d, 0xea, 0x73, 0x20, 0x39, 0x0c, 0x4d, + 0xea, 0x73, 0x20, 0x31, 0x30, 0x0c, 0x4d, 0xea, + 0x73, 0x20, 0x31, 0x31, 0x0c, 0x4d, 0xea, 0x73, + 0x20, 0x31, 0x32, 0x08, 0x54, 0x6f, 0x75, 0x74, + 0x08, 0x42, 0x61, 0x62, 0x61, 0x0a, 0x48, 0x61, + 0x74, 0x6f, 0x72, 0x0a, 0x4b, 0x69, 0x61, 0x68, + 0x6b, 0x08, 0x54, 0x6f, 0x62, 0x61, 0x0c, 0x41, + 0x6d, 0x73, 0x68, 0x69, 0x72, 0x10, 0x42, 0x61, + 0x72, 0x61, 0x6d, 0x68, 0x61, 0x74, 0x12, 0x42, + 0x61, 0x72, 0x61, 0x6d, 0x6f, 0x75, 0x64, 0x61, + 0x0e, 0x42, 0x61, 0x73, 0x68, 0x61, 0x6e, 0x73, + 0x0a, 0x50, 0x61, 0x6f, 0x6e, 0x61, 0x08, 0x45, + 0x70, 0x65, 0x70, 0x0a, 0x4d, 0x65, 0x73, 0x72, + 0x61, 0x0a, 0x4e, 0x61, 0x73, 0x69, 0x65, 0x08, + 0x45, 0x52, 0x41, 0x30, 0x08, 0x45, 0x52, 0x41, + 0x31, 0x10, 0x4d, 0x65, 0x73, 0x6b, 0x65, 0x72, + 0x65, 0x6d, 0x0c, 0x54, 0x65, 0x6b, 0x65, 0x6d, + 0x74, 0x0a, 0x48, 0x65, 0x64, 0x61, 0x72, 0x0c, + 0x54, 0x61, 0x68, 0x73, 0x61, 0x73, 0x06, 0x54, + 0x65, 0x72, 0x0e, 0x59, 0x65, 0x6b, 0x61, 0x74, + 0x69, 0x74, 0x0e, 0x4d, 0x65, 0x67, 0x61, 0x62, + 0x69, 0x74, 0x0c, 0x4d, 0x69, 0x61, 0x7a, 0x69, + 0x61, 0x0c, 0x47, 0x65, 0x6e, 0x62, 0x6f, 0x74, + 0x08, 0x53, 0x65, 0x6e, 0x65, 0x0a, 0x48, 0x61, + 0x6d, 0x6c, 0x65, 0x0e, 0x4e, 0x65, 0x68, 0x61, + 0x73, 0x73, 0x65, 0x0e, 0x50, 0x61, 0x67, 0x75, + 0x6d, 0x65, 0x6e, 0x06, 0x4d, 0x30, 0x31, 0x06, + 0x4d, 0x30, 0x32, 0x06, 0x4d, 0x30, 0x33, 0x06, + 0x4d, 0x30, 0x34, 0x06, 0x4d, 0x30, 0x35, 0x06, + 0x4d, 0x30, 0x36, 0x06, 0x4d, 0x30, 0x37, 0x06, + 0x4d, 0x30, 0x38, 0x06, 0x4d, 0x30, 0x39, 0x08, + 0x61, 0x2e, 0x43, 0x2e, 0x08, 0x64, 0x2e, 0x43, + 0x2e, 0x0c, 0x61, 0x2e, 0x45, 0x2e, 0x43, 0x2e, + 0x08, 0x45, 0x2e, 0x43, 0x2e, 0x1e, 0x61, 0x6e, + 0x74, 0x65, 0x73, 0x20, 0x64, 0x65, 0x20, 0x43, + 0x72, 0x69, 0x73, 0x74, 0x6f, 0x20, 0x64, 0x65, + 0x70, 0x6f, 0x69, 0x73, 0x20, 0x64, 0x65, 0x20, + 0x43, 0x72, 0x69, 0x73, 0x74, 0x6f, 0x24, 0x61, + 0x6e, 0x74, 0x65, 0x73, 0x20, 0x64, 0x61, 0x20, + 0x45, 0x72, 0x61, 0x20, 0x43, 0x6f, 0x6d, 0x75, + 0x6d, 0x12, 0x45, 0x72, 0x61, 0x20, 0x43, 0x6f, + 0x6d, 0x75, 0x6d, 0x0c, 0x54, 0x69, 0x73, 0x68, + 0x72, 0x69, 0x0e, 0x48, 0x65, 0x73, 0x68, 0x76, + 0x61, 0x6e, 0x0c, 0x4b, 0x69, 0x73, 0x6c, 0x65, + 0x76, 0x0a, 0x54, 0x65, 0x76, 0x65, 0x74, 0x0c, + 0x53, 0x68, 0x65, 0x76, 0x61, 0x74, 0x0c, 0x41, + 0x64, 0x61, 0x72, 0x20, 0x49, 0x08, 0x41, 0x64, + 0x61, 0x72, 0x0a, 0x4e, 0x69, 0x73, 0x61, 0x6e, + 0x08, 0x49, 0x79, 0x61, 0x72, 0x0a, 0x53, 0x69, + 0x76, 0x61, 0x6e, 0x0a, 0x54, 0x61, 0x6d, 0x75, + 0x7a, 0x04, 0x41, 0x76, 0x08, 0x45, 0x6c, 0x75, + 0x6c, 0x0e, 0x41, 0x64, 0x61, 0x72, 0x20, 0x49, + 0x49, 0x04, 0x41, 0x4d, 0x0e, 0x43, 0x68, 0x61, + 0x69, 0x74, 0x72, 0x61, 0x10, 0x56, 0x61, 0x69, + 0x73, 0x61, 0x6b, 0x68, 0x61, 0x10, 0x4a, 0x79, + 0x61, 0x69, 0x73, 0x74, 0x68, 0x61, 0x0c, 0x41, + 0x73, 0x61, 0x64, 0x68, 0x61, 0x0e, 0x53, 0x72, + 0x61, 0x76, 0x61, 0x6e, 0x61, 0x0c, 0x42, 0x68, + 0x61, 0x64, 0x72, 0x61, 0x0c, 0x41, 0x73, 0x76, + 0x69, 0x6e, 0x61, 0x0e, 0x4b, 0x61, 0x72, 0x74, + 0x69, 0x6b, 0x61, 0x14, 0x41, 0x67, 0x72, 0x61, + 0x68, 0x61, 0x79, 0x61, 0x6e, 0x61, 0x0a, 0x50, + 0x61, 0x75, 0x73, 0x61, 0x0a, 0x4d, 0x61, 0x67, + 0x68, 0x61, 0x10, 0x50, 0x68, 0x61, 0x6c, 0x67, + 0x75, 0x6e, 0x61, 0x08, 0x53, 0x61, 0x6b, 0x61, + 0x08, 0x4d, 0x75, 0x68, 0x2e, 0x08, 0x53, 0x61, + 0x66, 0x2e, 0x0c, 0x52, 0x61, 0x62, 0x2e, 0x20, + 0x49, 0x0e, 0x52, 0x61, 0x62, 0x2e, 0x20, 0x49, + 0x49, 0x0c, 0x4a, 0x75, 0x6d, 0x2e, 0x20, 0x49, + 0x0e, 0x4a, 0x75, 0x6d, 0x2e, 0x20, 0x49, 0x49, + 0x08, 0x52, 0x61, 0x6a, 0x2e, 0x08, 0x53, 0x68, + 0x61, 0x2e, 0x08, 0x52, 0x61, 0x6d, 0x2e, 0x0a, + 0x53, 0x68, 0x61, 0x77, 0x2e, 0x11, 0x44, 0x00, + 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, + 0x2d, 0x00, 0x51, 0x00, 0x2e, 0x00, 0x11, 0x44, + 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, + 0x00, 0x2d, 0x00, 0x48, 0x00, 0x2e, 0x00, 0x10, + 0x4d, 0x75, 0x68, 0x61, 0x72, 0x72, 0x61, 0x6d, + 0x0a, 0x53, 0x61, 0x66, 0x61, 0x72, 0x0f, 0x52, + 0x00, 0x61, 0x00, 0x62, 0x00, 0x69, 0x00, 0xbb, + 0x02, 0x20, 0x00, 0x49, 0x00, 0x11, 0x52, 0x00, + 0x61, 0x00, 0x62, 0x00, 0x69, 0x00, 0xbb, 0x02, + 0x20, 0x00, 0x49, 0x00, 0x49, 0x00, 0x10, 0x4a, + 0x75, 0x6d, 0x61, 0x64, 0x61, 0x20, 0x49, 0x12, + 0x4a, 0x75, 0x6d, 0x61, 0x64, 0x61, 0x20, 0x49, + 0x49, 0x0a, 0x52, 0x61, 0x6a, 0x61, 0x62, 0x0f, + 0x53, 0x00, 0x68, 0x00, 0x61, 0x00, 0xbb, 0x02, + 0x62, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x0e, 0x52, + 0x61, 0x6d, 0x61, 0x64, 0x61, 0x6e, 0x0e, 0x53, + 0x68, 0x61, 0x77, 0x77, 0x61, 0x6c, 0x19, 0x44, + 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, + 0x00, 0x2d, 0x00, 0x51, 0x00, 0x69, 0x00, 0xbb, + 0x02, 0x64, 0x00, 0x61, 0x00, 0x68, 0x00, 0x19, + 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, + 0x6c, 0x00, 0x2d, 0x00, 0x48, 0x00, 0x69, 0x00, + 0x6a, 0x00, 0x6a, 0x00, 0x61, 0x00, 0x68, 0x00, + 0x04, 0x41, 0x48, 0x1f, 0x54, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x36, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x48, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x36, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x36, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x29, 0x00, 0x21, 0x53, + 0x00, 0x68, 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, + 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4b, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x57, 0x00, + 0x61, 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x1f, 0x52, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x1d, 0x59, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4a, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6b, 0x00, 0x61, + 0x00, 0x6d, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x2d, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x2b, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x2d, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, 0x2d, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x2a, 0x4a, 0x69, 0x6e, 0x67, 0x6f, 0x2d, 0x6b, + 0x65, 0x69, 0x75, 0x6e, 0x20, 0x28, 0x37, 0x36, + 0x37, 0x2d, 0x37, 0x37, 0x30, 0x29, 0x1d, 0x48, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x2d, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x2d, 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x38, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, 0x44, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x64, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x38, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, + 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4a, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x1d, 0x4b, 0x00, 0x61, 0x00, 0x6a, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x53, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x20, 0x54, 0x65, 0x6e, + 0x2d, 0x61, 0x6e, 0x20, 0x28, 0x38, 0x35, 0x37, + 0x2d, 0x38, 0x35, 0x39, 0x29, 0x1f, 0x4a, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, 0x45, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, 0x6e, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1b, 0x4c, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x1d, 0x41, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, 0x69, 0x00, + 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1d, 0x45, + 0x00, 0x69, 0x00, 0x73, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x4a, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x29, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, 0x4a, + 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x29, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4c, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, + 0x4a, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x24, 0x54, 0x65, 0x6e, 0x2d, 0x65, 0x69, 0x20, + 0x28, 0x31, 0x31, 0x31, 0x30, 0x2d, 0x31, 0x31, + 0x31, 0x33, 0x29, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, + 0x01, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, + 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x6a, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x48, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x48, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x45, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x68, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x6d, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, + 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x59, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x21, 0x4a, 0x00, 0x75, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x29, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x29, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1f, + 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x41, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, + 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x29, 0x00, 0x27, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x75, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x29, 0x52, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x4e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1f, 0x4c, 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x74, 0x00, 0x73, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x27, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x45, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x21, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x45, 0x00, 0x69, 0x00, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x72, + 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, + 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, + 0x45, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, + 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x48, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x65, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x23, 0x41, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, 0x0a, 0x4d, + 0x65, 0x69, 0x6a, 0x69, 0x0d, 0x54, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x0b, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x0c, 0x48, 0x65, 0x69, + 0x73, 0x65, 0x69, 0x12, 0x46, 0x61, 0x72, 0x76, + 0x61, 0x72, 0x64, 0x69, 0x6e, 0x16, 0x4f, 0x72, + 0x64, 0x69, 0x62, 0x65, 0x68, 0x65, 0x73, 0x68, + 0x74, 0x0e, 0x4b, 0x68, 0x6f, 0x72, 0x64, 0x61, + 0x64, 0x06, 0x54, 0x69, 0x72, 0x0c, 0x4d, 0x6f, + 0x72, 0x64, 0x61, 0x64, 0x12, 0x53, 0x68, 0x61, + 0x68, 0x72, 0x69, 0x76, 0x61, 0x72, 0x08, 0x4d, + 0x65, 0x68, 0x72, 0x08, 0x41, 0x62, 0x61, 0x6e, + 0x08, 0x41, 0x7a, 0x61, 0x72, 0x06, 0x44, 0x65, + 0x79, 0x0c, 0x42, 0x61, 0x68, 0x6d, 0x61, 0x6e, + 0x0c, 0x45, 0x73, 0x66, 0x61, 0x6e, 0x64, 0x04, + 0x41, 0x50, 0x1e, 0x41, 0x6e, 0x74, 0x65, 0x73, + 0x20, 0x64, 0x65, 0x20, 0x52, 0x2e, 0x4f, 0x2e, + 0x43, 0x2e, 0x0c, 0x52, 0x2e, 0x4f, 0x2e, 0x43, + 0x2e, 0x12, 0x63, 0x61, 0x6c, 0x65, 0x6e, 0x64, + 0x61, 0x72, 0x73, 0x08, 0x64, 0x61, 0x74, 0x65, + 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, 0x75, + 0x10, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0x1e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, + 0x6e, 0x26, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x6e, 0x65, + 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, + 0x74, 0x74, 0x65, 0x72, 0x6e, 0x0e, 0x64, 0x65, + 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x26, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0xa0, 0x7b, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, + 0x7d, 0x3c, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0xa0, 0x7b, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, + 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, + 0x79, 0x2a, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, + 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x40, + 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, + 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0x7b, 0x70, 0x65, 0x72, 0x63, + 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, + 0x0e, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, + 0x10, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, + 0x73, 0x02, 0x2c, 0x02, 0xa0, 0x0a, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x06, 0x4e, 0x61, 0x4e, 0x06, + 0x6e, 0x61, 0x6e, 0x02, 0x2b, 0x10, 0x70, 0x6c, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, 0x2d, + 0x12, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, + 0x67, 0x6e, 0x02, 0x25, 0x16, 0x70, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, + 0x03, 0x1e, 0x22, 0x10, 0x69, 0x6e, 0x66, 0x69, + 0x6e, 0x69, 0x74, 0x79, 0x0e, 0x73, 0x79, 0x6d, + 0x62, 0x6f, 0x6c, 0x73, 0x06, 0x41, 0x55, 0x24, + 0x06, 0x41, 0x55, 0x44, 0x04, 0x52, 0x24, 0x06, + 0x42, 0x52, 0x4c, 0x06, 0x43, 0x41, 0x24, 0x06, + 0x43, 0x41, 0x44, 0x06, 0x43, 0x4e, 0xa5, 0x06, + 0x43, 0x4e, 0x59, 0x03, 0xac, 0x20, 0x06, 0x45, + 0x55, 0x52, 0x02, 0xa3, 0x06, 0x47, 0x42, 0x50, + 0x06, 0x48, 0x4b, 0x24, 0x06, 0x48, 0x4b, 0x44, + 0x03, 0xaa, 0x20, 0x06, 0x49, 0x4c, 0x53, 0x03, + 0xb9, 0x20, 0x06, 0x49, 0x4e, 0x52, 0x06, 0x4a, + 0x50, 0xa5, 0x06, 0x4a, 0x50, 0x59, 0x03, 0xa9, + 0x20, 0x06, 0x4b, 0x52, 0x57, 0x06, 0x4d, 0x58, + 0x24, 0x06, 0x4d, 0x58, 0x4e, 0x06, 0x4e, 0x5a, + 0x24, 0x06, 0x4e, 0x5a, 0x44, 0x03, 0x0b, 0x20, + 0x06, 0x50, 0x54, 0x45, 0x03, 0x3f, 0x0e, 0x06, + 0x54, 0x48, 0x42, 0x06, 0x4e, 0x54, 0x24, 0x06, + 0x54, 0x57, 0x44, 0x06, 0x55, 0x53, 0x24, 0x06, + 0x55, 0x53, 0x44, 0x03, 0xab, 0x20, 0x06, 0x56, + 0x4e, 0x44, 0x08, 0x46, 0x43, 0x46, 0x41, 0x06, + 0x58, 0x41, 0x46, 0x06, 0x45, 0x43, 0x24, 0x06, + 0x58, 0x43, 0x44, 0x06, 0x43, 0x46, 0x41, 0x06, + 0x58, 0x4f, 0x46, 0x08, 0x43, 0x46, 0x50, 0x46, + 0x06, 0x58, 0x50, 0x46, 0x14, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x58, + 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, + 0x6c, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, + 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x6a, 0x73, + 0x6f, 0x6e, 0x70, 0x2f, 0x70, 0x74, 0x2d, 0x50, + 0x54, 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, + 0x9e, 0x01, 0x00, 0x01, 0x00, 0x27, 0x00, 0x89, + 0x01, 0xa4, 0x6b, 0x01, 0xa0, 0x01, 0x00, 0x00, + 0x00, 0x39, 0xd0, 0x00, 0x00, 0x00, 0x43, 0xd1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd2, 0x00, 0x00, + 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd4, 0x00, 0x00, 0x00, 0x04, 0xd5, 0x00, 0x00, + 0x00, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x04, 0xd7, + 0x00, 0x00, 0x00, 0x04, 0xd8, 0x00, 0x00, 0x00, + 0x04, 0xd9, 0x00, 0x00, 0x00, 0x04, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xdb, 0x00, 0x00, 0x00, 0x04, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, + 0x00, 0x04, 0xde, 0x00, 0x00, 0x00, 0x04, 0xdf, + 0x00, 0x00, 0x00, 0x04, 0xe0, 0x00, 0x00, 0x00, + 0x04, 0xe1, 0x00, 0x00, 0x00, 0x04, 0xe2, 0x00, + 0x00, 0x00, 0x26, 0x0f, 0x00, 0x4d, 0xe3, 0x00, + 0x00, 0x00, 0x0a, 0x4d, 0xe4, 0x00, 0x00, 0x00, + 0x09, 0x4d, 0xe5, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x00, 0x04, 0xe9, 0x00, 0x00, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x04, 0xe9, 0x00, + 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0xec, 0x00, + 0x00, 0x00, 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, + 0xee, 0x00, 0x00, 0x00, 0x04, 0xef, 0x00, 0x00, + 0x00, 0x4d, 0xf0, 0x00, 0x00, 0x00, 0x04, 0xf1, + 0x00, 0x00, 0x00, 0x4d, 0xf2, 0x00, 0x00, 0x00, + 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, 0xf4, 0x00, + 0x00, 0x00, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, + 0xf6, 0x00, 0x00, 0x00, 0x04, 0xf7, 0x00, 0x00, + 0x00, 0x4d, 0xf8, 0x00, 0x00, 0x00, 0x04, 0xf9, + 0x00, 0x00, 0x00, 0x4d, 0xfa, 0x00, 0x00, 0x00, + 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, 0xfc, 0x00, + 0x00, 0x00, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, + 0xfe, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x01, 0x00, 0x00, 0x04, 0x01, + 0x01, 0x00, 0x00, 0x4d, 0x02, 0x01, 0x00, 0x00, + 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0x04, 0x01, + 0x00, 0x00, 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, + 0x06, 0x01, 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, + 0x00, 0x4d, 0x08, 0x01, 0x00, 0x00, 0x04, 0x09, + 0x01, 0x00, 0x00, 0x4d, 0x0a, 0x01, 0x00, 0x00, + 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, 0x0c, 0x01, + 0x00, 0x00, 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, + 0x0e, 0x01, 0x00, 0x00, 0x04, 0x0f, 0x01, 0x00, + 0x00, 0x4d, 0x10, 0x01, 0x00, 0x00, 0x04, 0x11, + 0x01, 0x00, 0x00, 0x4d, 0x12, 0x01, 0x00, 0x00, + 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, 0x14, 0x01, + 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, + 0x16, 0x01, 0x00, 0x00, 0x04, 0x17, 0x01, 0x00, + 0x00, 0x4d, 0x18, 0x01, 0x00, 0x00, 0x04, 0x19, + 0x01, 0x00, 0x00, 0x4d, 0x1a, 0x01, 0x00, 0x00, + 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, 0x1b, 0x01, + 0x00, 0x00, 0x04, 0x1c, 0x01, 0x00, 0x00, 0x4d, + 0x1d, 0x01, 0x00, 0x00, 0x04, 0x1e, 0x01, 0x00, + 0x00, 0x4d, 0x1f, 0x01, 0x00, 0x00, 0x04, 0x20, + 0x01, 0x00, 0x00, 0x4d, 0x21, 0x01, 0x00, 0x00, + 0x04, 0x22, 0x01, 0x00, 0x00, 0x4d, 0x23, 0x01, + 0x00, 0x00, 0x04, 0x24, 0x01, 0x00, 0x00, 0x4d, + 0x25, 0x01, 0x00, 0x00, 0x04, 0x26, 0x01, 0x00, + 0x00, 0x4d, 0x27, 0x01, 0x00, 0x00, 0x04, 0x28, + 0x01, 0x00, 0x00, 0x4d, 0x28, 0x01, 0x00, 0x00, + 0x04, 0x29, 0x01, 0x00, 0x00, 0x4d, 0x2a, 0x01, + 0x00, 0x00, 0x04, 0x2b, 0x01, 0x00, 0x00, 0x4d, + 0x2c, 0x01, 0x00, 0x00, 0x04, 0x2d, 0x01, 0x00, + 0x00, 0x4d, 0x2e, 0x01, 0x00, 0x00, 0x04, 0x29, + 0x01, 0x00, 0x00, 0x4d, 0x2f, 0x01, 0x00, 0x00, + 0x04, 0x29, 0x01, 0x00, 0x00, 0x4d, 0x30, 0x01, + 0x00, 0x00, 0x04, 0x31, 0x01, 0x00, 0x00, 0x4d, + 0x32, 0x01, 0x00, 0x00, 0x04, 0x33, 0x01, 0x00, + 0x00, 0x4d, 0x34, 0x01, 0x00, 0x00, 0x04, 0x35, + 0x01, 0x00, 0x00, 0x4d, 0x36, 0x01, 0x00, 0x00, + 0x04, 0x37, 0x01, 0x00, 0x00, 0x4d, 0x38, 0x01, + 0x00, 0x00, 0x04, 0x39, 0x01, 0x00, 0x00, 0x4d, + 0x3a, 0x01, 0x00, 0x00, 0x04, 0x3b, 0x01, 0x00, + 0x00, 0x4d, 0x3c, 0x01, 0x00, 0x00, 0x04, 0x3d, + 0x01, 0x00, 0x00, 0x4d, 0x3e, 0x01, 0x00, 0x00, + 0x04, 0x3d, 0x01, 0x00, 0x00, 0x4d, 0x3f, 0x01, + 0x00, 0x00, 0x4d, 0x40, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x41, 0x01, 0x00, 0x00, 0x4d, 0x42, 0x01, + 0x00, 0x00, 0x04, 0x39, 0x01, 0x00, 0x00, 0x4d, + 0x3a, 0x01, 0x00, 0x00, 0x04, 0x2b, 0x01, 0x00, + 0x00, 0x4d, 0x32, 0x01, 0x00, 0x00, 0x04, 0x43, + 0x01, 0x00, 0x00, 0x4d, 0x2c, 0x01, 0x00, 0x00, + 0x4d, 0x44, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x45, + 0x01, 0x00, 0x00, 0x4d, 0x46, 0x01, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x4d, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, + 0x0a, 0x01, 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, + 0x00, 0x4d, 0x06, 0x01, 0x00, 0x00, 0x4d, 0x49, + 0x01, 0x00, 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x0b, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x41, 0x00, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x6a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x79, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, + 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x4d, 0x80, 0x01, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x00, 0xbe, 0x01, 0xbe, 0x02, 0xbe, + 0x03, 0xbe, 0x04, 0xbe, 0x05, 0xbe, 0x06, 0xbe, + 0x07, 0xbe, 0x08, 0xbe, 0x09, 0xbe, 0x0a, 0xbe, + 0x0b, 0x26, 0x0c, 0x00, 0x4d, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, + 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, + 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, + 0x04, 0x8c, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x8d, 0x01, + 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, + 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, + 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, + 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, + 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, + 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, + 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x6a, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x79, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, + 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, 0x4d, + 0xd6, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x0c, + 0xbe, 0x0d, 0xbe, 0x0e, 0xbe, 0x0f, 0xbe, 0x10, + 0xbe, 0x11, 0xbe, 0x12, 0xbe, 0x13, 0xbe, 0x14, + 0xbe, 0x15, 0xbe, 0x16, 0xbe, 0x17, 0xbe, 0x18, + 0x26, 0x0d, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, + 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, + 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, + 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, + 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, + 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, + 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, + 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, + 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, + 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, + 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, + 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, + 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, + 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, + 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x6a, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x52, 0x01, 0x00, + 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, + 0x04, 0xa7, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7b, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x4d, + 0x80, 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x19, 0xbe, 0x1a, 0xbe, + 0x1b, 0xbe, 0x1c, 0xbe, 0x1d, 0xbe, 0x1e, 0xbe, + 0x1f, 0xbe, 0x20, 0xbe, 0x21, 0xbe, 0x22, 0xbe, + 0x23, 0xbe, 0x24, 0x26, 0x0c, 0x00, 0x4d, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, + 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, + 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, + 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, + 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, + 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, + 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, + 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x6a, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, + 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x4d, + 0x7f, 0x01, 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x25, 0xbe, 0x26, 0xbe, 0x27, 0xbe, 0x28, + 0xbe, 0x29, 0xbe, 0x2a, 0xbe, 0x2b, 0xbe, 0x2c, + 0xbe, 0x2d, 0xbe, 0x2e, 0xbe, 0x2f, 0xbe, 0x30, + 0xbe, 0x31, 0x26, 0x0d, 0x00, 0x4d, 0x52, 0x01, + 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, + 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, + 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, + 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, + 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, + 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, + 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, + 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, + 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, + 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, + 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, + 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, + 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, + 0x04, 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, + 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, 0x04, + 0xb4, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6a, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x52, + 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, + 0x04, 0xa7, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa6, 0x01, + 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x7b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, + 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x32, 0xbe, + 0x33, 0xbe, 0x34, 0xbe, 0x35, 0xbe, 0x36, 0xbe, + 0x37, 0xbe, 0x38, 0xbe, 0x39, 0xbe, 0x3a, 0xbe, + 0x3b, 0xbe, 0x3c, 0xbe, 0x3d, 0xbe, 0x3e, 0x26, + 0x0d, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, + 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, + 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, + 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, + 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, + 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, + 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, + 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, 0xb3, + 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, + 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, + 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, + 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, 0xae, + 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, + 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, + 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, + 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x6a, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x79, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xa6, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x52, + 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xa6, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7b, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x4d, + 0x80, 0x01, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x3f, 0xbe, 0x40, 0xbe, + 0x41, 0xbe, 0x42, 0xbe, 0x43, 0xbe, 0x44, 0xbe, + 0x45, 0xbe, 0x46, 0xbe, 0x47, 0xbe, 0x48, 0xbe, + 0x49, 0xbe, 0x4a, 0x26, 0x0c, 0x00, 0x4d, 0x52, + 0x01, 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, + 0x04, 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, + 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, 0x04, + 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, + 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, + 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, + 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xb5, 0x01, 0x00, 0x00, 0x04, 0xb6, 0x01, 0x00, + 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, + 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, + 0x04, 0xba, 0x01, 0x00, 0x00, 0x04, 0xbb, 0x01, + 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, 0x04, + 0xbd, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x6a, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x52, 0x01, + 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, + 0xa7, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, + 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7b, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, + 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, + 0x4d, 0x80, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x16, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x41, 0x00, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x6a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x79, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xbe, 0x01, + 0x00, 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, 0x04, + 0xc0, 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, + 0x00, 0x26, 0x04, 0x00, 0x4d, 0x52, 0x01, 0x00, + 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, + 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, + 0x04, 0xc1, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xc2, 0x01, + 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, 0x04, + 0xc4, 0x01, 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, + 0x00, 0x26, 0x04, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, + 0x01, 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x4b, 0xbe, 0x4c, 0xbe, 0x4d, 0xbe, 0x4e, 0xbe, + 0x4f, 0xbe, 0x50, 0xbe, 0x51, 0xbe, 0x52, 0xbe, + 0x53, 0xbe, 0x54, 0xbe, 0x55, 0xbe, 0x56, 0xbe, + 0x57, 0xbe, 0x58, 0x26, 0x0e, 0x00, 0x4d, 0x52, + 0x01, 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, 0x00, + 0x04, 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, 0x01, + 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, 0x04, + 0xca, 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, + 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, + 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, + 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, 0x01, + 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, 0x04, + 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, + 0x00, 0x26, 0x0e, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, 0xc7, + 0x01, 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, + 0x04, 0xc9, 0x01, 0x00, 0x00, 0x04, 0xca, 0x01, + 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, 0x04, + 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, + 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, 0x04, 0xcf, + 0x01, 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, + 0x04, 0xd1, 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, + 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, 0x26, + 0x0e, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x6a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x79, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xd4, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x52, 0x01, 0x00, + 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd4, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, + 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x4d, 0x80, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x59, 0xbe, 0x5a, 0xbe, 0x5b, 0xbe, + 0x5c, 0xbe, 0x5d, 0xbe, 0x5e, 0xbe, 0x5f, 0xbe, + 0x60, 0xbe, 0x61, 0xbe, 0x62, 0xbe, 0x63, 0xbe, + 0x64, 0x26, 0x0c, 0x00, 0x4d, 0x52, 0x01, 0x00, + 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, + 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, + 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, + 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, + 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, + 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, + 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, + 0x04, 0xe0, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd5, 0x01, + 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, 0x04, + 0xd7, 0x01, 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, + 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, + 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, + 0x04, 0xdc, 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, + 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, + 0xdf, 0x01, 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x6a, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x79, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xe1, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x52, + 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xe1, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7b, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x4d, + 0x80, 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x65, 0xbe, 0x66, 0xbe, + 0x67, 0xbe, 0x68, 0xbe, 0x69, 0xbe, 0x6a, 0xbe, + 0x6b, 0xbe, 0x6c, 0xbe, 0x6d, 0xbe, 0x6e, 0xbe, + 0x6f, 0xbe, 0x70, 0x26, 0x0c, 0x00, 0x4d, 0x52, + 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, + 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, + 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, + 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, + 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, + 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, + 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, + 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, + 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, + 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, + 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, + 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, + 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, + 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x6a, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xfa, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x7b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, + 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x71, 0xbe, + 0x72, 0xbe, 0x73, 0xbe, 0x74, 0xbe, 0x75, 0xbe, + 0x76, 0xbe, 0x77, 0xbe, 0x78, 0xbe, 0x79, 0xbe, + 0x7a, 0xbe, 0x7b, 0xbe, 0x7c, 0x26, 0x0c, 0x00, + 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, + 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, + 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, + 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, + 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, + 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, + 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, + 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, + 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, + 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, + 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, + 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, + 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, + 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, + 0x04, 0xf9, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6a, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, + 0xfa, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, + 0x01, 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x41, 0x00, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x6a, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, + 0x00, 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, + 0xfe, 0x01, 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, + 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, + 0x02, 0x00, 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, + 0x04, 0x03, 0x02, 0x00, 0x00, 0x04, 0x04, 0x02, + 0x00, 0x00, 0x04, 0x05, 0x02, 0x00, 0x00, 0x04, + 0x06, 0x02, 0x00, 0x00, 0x04, 0x07, 0x02, 0x00, + 0x00, 0x04, 0x08, 0x02, 0x00, 0x00, 0x04, 0x09, + 0x02, 0x00, 0x00, 0x04, 0x0a, 0x02, 0x00, 0x00, + 0x04, 0x0b, 0x02, 0x00, 0x00, 0x04, 0x0c, 0x02, + 0x00, 0x00, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x04, + 0x0e, 0x02, 0x00, 0x00, 0x04, 0x0f, 0x02, 0x00, + 0x00, 0x04, 0x10, 0x02, 0x00, 0x00, 0x04, 0x11, + 0x02, 0x00, 0x00, 0x04, 0x12, 0x02, 0x00, 0x00, + 0x04, 0x13, 0x02, 0x00, 0x00, 0x04, 0x14, 0x02, + 0x00, 0x00, 0x04, 0x15, 0x02, 0x00, 0x00, 0x04, + 0x16, 0x02, 0x00, 0x00, 0x04, 0x17, 0x02, 0x00, + 0x00, 0x04, 0x18, 0x02, 0x00, 0x00, 0x04, 0x19, + 0x02, 0x00, 0x00, 0x04, 0x1a, 0x02, 0x00, 0x00, + 0x26, 0x20, 0x00, 0x04, 0x1b, 0x02, 0x00, 0x00, + 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, + 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, + 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, + 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x23, + 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, + 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, + 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, + 0x21, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, + 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x27, + 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, + 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, + 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, + 0x25, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, + 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x2b, + 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, + 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, + 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, + 0x29, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, + 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x2f, + 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, + 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, + 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, + 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, + 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x33, + 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, + 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, + 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, + 0x31, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, + 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x37, + 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, + 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, + 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, + 0x35, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, + 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, 0x3b, + 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, + 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, + 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, + 0x39, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, + 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x3f, + 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, + 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, + 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, + 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, + 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x43, + 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, + 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, + 0x41, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, + 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, 0x47, + 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, + 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, + 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, + 0x45, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, + 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x4b, + 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, + 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, + 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, + 0x49, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, + 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x4f, + 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, + 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, + 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, + 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, + 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x53, + 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, + 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, + 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, + 0x51, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, + 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x57, + 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, + 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, + 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, + 0x55, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, + 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, 0x5b, + 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, + 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, + 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, + 0x59, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, + 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x5f, + 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, + 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, + 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, + 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, + 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x63, + 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, + 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, + 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, + 0x61, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, + 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x67, + 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, + 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, + 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, + 0x65, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, + 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x6b, + 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, + 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, + 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, + 0x69, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, + 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x6f, + 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, + 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, + 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, + 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, + 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x73, + 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, + 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, + 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, + 0x71, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, + 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0x77, + 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, + 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, + 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, + 0x75, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, + 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0x7b, + 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, + 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, + 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, + 0x79, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, + 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x7f, + 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, + 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, + 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, + 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, + 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, 0x83, + 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, + 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, + 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, + 0x81, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, + 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0x87, + 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, + 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, + 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, + 0x85, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, + 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0x8b, + 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, + 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, + 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, + 0x89, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, + 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0x8f, + 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, + 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, + 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, + 0x8d, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, + 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0x93, + 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, + 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, + 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, + 0x91, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, + 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0x97, + 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, + 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, + 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, + 0x95, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, + 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0x9b, + 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, + 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, + 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, + 0x99, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, + 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0x9f, + 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, + 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, + 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, + 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, + 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xa3, + 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, + 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, + 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, + 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, + 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xa7, + 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, + 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, + 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, + 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, + 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xab, + 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, + 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, + 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, + 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, + 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xaf, + 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, + 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, + 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, + 0xad, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, + 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0xb3, + 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, + 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, + 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, + 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, + 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xb7, + 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, + 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, + 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, + 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, + 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xbb, + 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, + 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, + 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, + 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, + 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0xbf, + 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, + 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, + 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, + 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, + 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xc3, + 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, + 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, + 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, + 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, + 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xc7, + 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, + 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, + 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, + 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, + 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xcb, + 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, + 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, + 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, + 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, + 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, 0xcf, + 0x00, 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, + 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, + 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, + 0xcd, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, + 0x80, 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xd0, 0x02, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, + 0xd1, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x80, 0x04, 0xd2, 0x02, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x80, 0x04, 0xd3, 0x02, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xd4, 0x02, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, + 0xd5, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x80, 0x04, 0xd6, 0x02, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x80, 0x04, 0xd7, 0x02, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xd8, 0x02, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, + 0xd9, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x80, 0x04, 0xda, 0x02, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x80, 0x04, 0xdb, 0x02, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xdc, 0x02, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, + 0xdd, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x80, 0x04, 0xde, 0x02, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x80, 0x04, 0xdf, 0x02, 0x00, 0x00, + 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xe0, 0x02, + 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, + 0xe1, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x80, 0x04, 0xe2, 0x02, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x80, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x80, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x80, 0x4d, 0x52, 0x01, 0x00, 0x00, + 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, + 0x00, 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, + 0xfe, 0x01, 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, + 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, + 0x02, 0x00, 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, + 0x04, 0x03, 0x02, 0x00, 0x00, 0x04, 0x04, 0x02, + 0x00, 0x00, 0x04, 0x05, 0x02, 0x00, 0x00, 0x04, + 0x06, 0x02, 0x00, 0x00, 0x04, 0x07, 0x02, 0x00, + 0x00, 0x04, 0x08, 0x02, 0x00, 0x00, 0x04, 0x09, + 0x02, 0x00, 0x00, 0x04, 0x0a, 0x02, 0x00, 0x00, + 0x04, 0x0b, 0x02, 0x00, 0x00, 0x04, 0x0c, 0x02, + 0x00, 0x00, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x04, + 0x0e, 0x02, 0x00, 0x00, 0x04, 0x0f, 0x02, 0x00, + 0x00, 0x04, 0x10, 0x02, 0x00, 0x00, 0x04, 0x11, + 0x02, 0x00, 0x00, 0x04, 0x12, 0x02, 0x00, 0x00, + 0x04, 0x13, 0x02, 0x00, 0x00, 0x04, 0x14, 0x02, + 0x00, 0x00, 0x04, 0x15, 0x02, 0x00, 0x00, 0x04, + 0x16, 0x02, 0x00, 0x00, 0x04, 0x17, 0x02, 0x00, + 0x00, 0x04, 0x18, 0x02, 0x00, 0x00, 0x04, 0x19, + 0x02, 0x00, 0x00, 0x04, 0x1a, 0x02, 0x00, 0x00, + 0x26, 0x20, 0x00, 0x04, 0x1b, 0x02, 0x00, 0x00, + 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, + 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, + 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, + 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x23, + 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, + 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, + 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, + 0x21, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, + 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x27, + 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, + 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, + 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, + 0x25, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, + 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x2b, + 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, + 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, + 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, + 0x29, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, + 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x2f, + 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, + 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, + 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, + 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, + 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x33, + 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, + 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, + 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, + 0x31, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, + 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x37, + 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, + 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, + 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, + 0x35, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, + 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, 0x3b, + 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, + 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, + 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, + 0x39, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, + 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x3f, + 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, + 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, + 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, + 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, + 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x43, + 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, + 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, + 0x41, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, + 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, 0x47, + 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, + 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, + 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, + 0x45, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, + 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x4b, + 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, + 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, + 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, + 0x49, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, + 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x4f, + 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, + 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, + 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, + 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, + 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x53, + 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, + 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, + 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, + 0x51, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, + 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x57, + 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, + 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, + 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, + 0x55, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, + 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, 0x5b, + 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, + 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, + 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, + 0x59, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, + 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x5f, + 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, + 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, + 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, + 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, + 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x63, + 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, + 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, + 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, + 0x61, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, + 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x67, + 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, + 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, + 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, + 0x65, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, + 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x6b, + 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, + 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, + 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, + 0x69, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, + 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x6f, + 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, + 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, + 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, + 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, + 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x73, + 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, + 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, + 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, + 0x71, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, + 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0x77, + 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, + 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, + 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, + 0x75, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, + 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0x7b, + 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, + 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, + 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, + 0x79, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, + 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x7f, + 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, + 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, + 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, + 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, + 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, 0x83, + 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, + 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, + 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, + 0x81, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, + 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0x87, + 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, + 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, + 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, + 0x85, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, + 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0x8b, + 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, + 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, + 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, + 0x89, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, + 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0x8f, + 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, + 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, + 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, + 0x8d, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, + 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0x93, + 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, + 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, + 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, + 0x91, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, + 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0x97, + 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, + 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, + 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, + 0x95, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, + 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0x9b, + 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, + 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, + 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, + 0x99, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, + 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0x9f, + 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, + 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, + 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, + 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, + 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xa3, + 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, + 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, + 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, + 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, + 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xa7, + 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, + 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, + 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, + 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, + 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xab, + 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, + 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, + 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, + 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, + 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xaf, + 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, + 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, + 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, + 0xad, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, + 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0xb3, + 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, + 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, + 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, + 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, + 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xb7, + 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, + 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, + 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, + 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, + 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xbb, + 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, + 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, + 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, + 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, + 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0xbf, + 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, + 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, + 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, + 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, + 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xc3, + 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, + 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, + 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, + 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, + 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xc7, + 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, + 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, + 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, + 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, + 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xcb, + 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, + 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, + 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, + 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, + 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, 0xcf, + 0x00, 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, + 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, + 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, + 0xcd, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, + 0x80, 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xd0, 0x02, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, + 0xd1, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x80, 0x04, 0xd2, 0x02, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x80, 0x04, 0xd3, 0x02, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xd4, 0x02, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, + 0xd5, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x80, 0x04, 0xd6, 0x02, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x80, 0x04, 0xd7, 0x02, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xd8, 0x02, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, + 0xd9, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x80, 0x04, 0xda, 0x02, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x80, 0x04, 0xdb, 0x02, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xdc, 0x02, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, + 0xdd, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x80, 0x04, 0xde, 0x02, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x80, 0x04, 0xdf, 0x02, 0x00, 0x00, + 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xe0, 0x02, + 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, + 0xe1, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x80, 0x04, 0xe2, 0x02, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x80, 0x04, 0xe3, 0x02, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xe4, 0x02, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, + 0xe5, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x80, 0x04, 0xe6, 0x02, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x80, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, + 0x00, 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, + 0xfe, 0x01, 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, + 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, + 0x02, 0x00, 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, + 0x04, 0x03, 0x02, 0x00, 0x00, 0x04, 0x04, 0x02, + 0x00, 0x00, 0x04, 0x05, 0x02, 0x00, 0x00, 0x04, + 0x06, 0x02, 0x00, 0x00, 0x04, 0x07, 0x02, 0x00, + 0x00, 0x04, 0x08, 0x02, 0x00, 0x00, 0x04, 0x09, + 0x02, 0x00, 0x00, 0x04, 0x0a, 0x02, 0x00, 0x00, + 0x04, 0x0b, 0x02, 0x00, 0x00, 0x04, 0x0c, 0x02, + 0x00, 0x00, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x04, + 0x0e, 0x02, 0x00, 0x00, 0x04, 0x0f, 0x02, 0x00, + 0x00, 0x04, 0x10, 0x02, 0x00, 0x00, 0x04, 0x11, + 0x02, 0x00, 0x00, 0x04, 0x12, 0x02, 0x00, 0x00, + 0x04, 0x13, 0x02, 0x00, 0x00, 0x04, 0x14, 0x02, + 0x00, 0x00, 0x04, 0x15, 0x02, 0x00, 0x00, 0x04, + 0x16, 0x02, 0x00, 0x00, 0x04, 0x17, 0x02, 0x00, + 0x00, 0x04, 0x18, 0x02, 0x00, 0x00, 0x04, 0x19, + 0x02, 0x00, 0x00, 0x04, 0x1a, 0x02, 0x00, 0x00, + 0x26, 0x20, 0x00, 0x04, 0x1b, 0x02, 0x00, 0x00, + 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, + 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, + 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, + 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x23, + 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, + 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, + 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, + 0x21, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, + 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x27, + 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, + 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, + 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, + 0x25, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, + 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x2b, + 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, + 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, + 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, + 0x29, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, + 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x2f, + 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, + 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, + 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, + 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, + 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x33, + 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, + 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, + 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, + 0x31, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, + 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x37, + 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, + 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, + 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, + 0x35, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, + 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, 0x3b, + 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, + 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, + 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, + 0x39, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, + 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x3f, + 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, + 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, + 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, + 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, + 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x43, + 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, + 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, + 0x41, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, + 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, 0x47, + 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, + 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, + 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, + 0x45, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, + 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x4b, + 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, + 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, + 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, + 0x49, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, + 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x4f, + 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, + 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, + 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, + 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, + 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x53, + 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, + 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, + 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, + 0x51, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, + 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x57, + 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, + 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, + 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, + 0x55, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, + 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, 0x5b, + 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, + 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, + 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, + 0x59, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, + 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x5f, + 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, + 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, + 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, + 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, + 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x63, + 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, + 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, + 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, + 0x61, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, + 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x67, + 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, + 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, + 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, + 0x65, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, + 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x6b, + 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, + 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, + 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, + 0x69, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, + 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x6f, + 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, + 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, + 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, + 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, + 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x73, + 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, + 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, + 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, + 0x71, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, + 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0x77, + 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, + 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, + 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, + 0x75, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, + 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0x7b, + 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, + 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, + 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, + 0x79, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, + 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x7f, + 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, + 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, + 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, + 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, + 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, 0x83, + 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, + 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, + 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, + 0x81, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, + 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0x87, + 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, + 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, + 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, + 0x85, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, + 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0x8b, + 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, + 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, + 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, + 0x89, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, + 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0x8f, + 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, + 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, + 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, + 0x8d, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, + 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0x93, + 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, + 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, + 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, + 0x91, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, + 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0x97, + 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, + 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, + 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, + 0x95, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, + 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0x9b, + 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, + 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, + 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, + 0x99, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, + 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0x9f, + 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, + 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, + 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, + 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, + 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xa3, + 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, + 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, + 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, + 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, + 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xa7, + 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, + 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, + 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, + 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, + 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xab, + 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, + 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, + 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, + 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, + 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xaf, + 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, + 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, + 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, + 0xad, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, + 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0xb3, + 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, + 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, + 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, + 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, + 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xb7, + 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, + 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, + 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, + 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, + 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xbb, + 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, + 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, + 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, + 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, + 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0xbf, + 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, + 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, + 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, + 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, + 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xc3, + 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, + 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, + 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, + 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, + 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xc7, + 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, + 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, + 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, + 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, + 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xcb, + 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, + 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, + 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, + 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, + 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, 0xcf, + 0x00, 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, + 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, + 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, + 0xcd, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, + 0x80, 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xd0, 0x02, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, + 0xd1, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x80, 0x04, 0xd2, 0x02, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x80, 0x04, 0xd3, 0x02, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xd4, 0x02, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, + 0xd5, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x80, 0x04, 0xd6, 0x02, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x80, 0x04, 0xd7, 0x02, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xd8, 0x02, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, + 0xd9, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x80, 0x04, 0xda, 0x02, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x80, 0x04, 0xdb, 0x02, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xdc, 0x02, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, + 0xdd, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x80, 0x04, 0xde, 0x02, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x80, 0x04, 0xdf, 0x02, 0x00, 0x00, + 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xe0, 0x02, + 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, + 0xe1, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x80, 0x04, 0xe2, 0x02, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x80, 0x04, 0xe3, 0x02, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xe4, 0x02, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, + 0xe5, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x80, 0x04, 0xe6, 0x02, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x80, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, + 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x7d, + 0xbe, 0x7e, 0xbe, 0x7f, 0xbe, 0x80, 0xbe, 0x81, + 0xbe, 0x82, 0xbe, 0x83, 0xbe, 0x84, 0xbe, 0x85, + 0xbe, 0x86, 0xbe, 0x87, 0xbe, 0x88, 0x26, 0x0c, + 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, 0xe7, + 0x02, 0x00, 0x00, 0x04, 0xe8, 0x02, 0x00, 0x00, + 0x04, 0xe9, 0x02, 0x00, 0x00, 0x04, 0xea, 0x02, + 0x00, 0x00, 0x04, 0xeb, 0x02, 0x00, 0x00, 0x04, + 0xec, 0x02, 0x00, 0x00, 0x04, 0xed, 0x02, 0x00, + 0x00, 0x04, 0xee, 0x02, 0x00, 0x00, 0x04, 0xef, + 0x02, 0x00, 0x00, 0x04, 0xf0, 0x02, 0x00, 0x00, + 0x04, 0xf1, 0x02, 0x00, 0x00, 0x04, 0xf2, 0x02, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xe7, 0x02, 0x00, 0x00, 0x04, + 0xe8, 0x02, 0x00, 0x00, 0x04, 0xe9, 0x02, 0x00, + 0x00, 0x04, 0xea, 0x02, 0x00, 0x00, 0x04, 0xeb, + 0x02, 0x00, 0x00, 0x04, 0xec, 0x02, 0x00, 0x00, + 0x04, 0xed, 0x02, 0x00, 0x00, 0x04, 0xee, 0x02, + 0x00, 0x00, 0x04, 0xef, 0x02, 0x00, 0x00, 0x04, + 0xf0, 0x02, 0x00, 0x00, 0x04, 0xf1, 0x02, 0x00, + 0x00, 0x04, 0xf2, 0x02, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6a, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x79, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xf3, 0x02, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, + 0x04, 0xf3, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xf3, 0x02, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, + 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x4d, + 0x7f, 0x01, 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, + 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x41, 0x00, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6a, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x52, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xf4, 0x02, 0x00, 0x00, 0x04, 0xf5, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x52, + 0x01, 0x00, 0x00, 0x04, 0xf4, 0x02, 0x00, 0x00, + 0x04, 0xf5, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xf4, 0x02, + 0x00, 0x00, 0x04, 0xf5, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x7b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, + 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, 0x4d, 0xe2, + 0x00, 0x00, 0x00, 0x4d, 0xf6, 0x02, 0x00, 0x00, + 0x4d, 0xf7, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xf8, + 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xf9, + 0x02, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xfa, 0x02, + 0x00, 0x00, 0x4d, 0xfb, 0x02, 0x00, 0x00, 0x04, + 0xfc, 0x02, 0x00, 0x00, 0x4d, 0xfd, 0x02, 0x00, + 0x00, 0x4d, 0xfe, 0x02, 0x00, 0x00, 0x0b, 0x04, + 0xff, 0x02, 0x00, 0x00, 0x4d, 0xfb, 0x02, 0x00, + 0x00, 0x04, 0x00, 0x03, 0x00, 0x00, 0x4d, 0xfd, + 0x02, 0x00, 0x00, 0x4d, 0x01, 0x03, 0x00, 0x00, + 0x0b, 0x04, 0x02, 0x03, 0x00, 0x00, 0x4d, 0xfb, + 0x02, 0x00, 0x00, 0x04, 0x03, 0x03, 0x00, 0x00, + 0x4d, 0xfd, 0x02, 0x00, 0x00, 0x4d, 0x04, 0x03, + 0x00, 0x00, 0x4d, 0x05, 0x03, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x06, 0x03, 0x00, 0x00, 0x4d, 0xfe, + 0x02, 0x00, 0x00, 0x04, 0x07, 0x03, 0x00, 0x00, + 0x4d, 0x08, 0x03, 0x00, 0x00, 0x04, 0x09, 0x03, + 0x00, 0x00, 0x4d, 0x0a, 0x03, 0x00, 0x00, 0x04, + 0x0b, 0x03, 0x00, 0x00, 0x4d, 0x0c, 0x03, 0x00, + 0x00, 0x04, 0x0d, 0x03, 0x00, 0x00, 0x4d, 0x0e, + 0x03, 0x00, 0x00, 0x04, 0x0f, 0x03, 0x00, 0x00, + 0x4d, 0x10, 0x03, 0x00, 0x00, 0x04, 0x11, 0x03, + 0x00, 0x00, 0x4d, 0x12, 0x03, 0x00, 0x00, 0x4d, + 0xf8, 0x02, 0x00, 0x00, 0x4d, 0x13, 0x03, 0x00, + 0x00, 0x0b, 0x04, 0x14, 0x03, 0x00, 0x00, 0x4d, + 0x15, 0x03, 0x00, 0x00, 0x04, 0x16, 0x03, 0x00, + 0x00, 0x4d, 0x17, 0x03, 0x00, 0x00, 0x04, 0x18, + 0x03, 0x00, 0x00, 0x4d, 0x19, 0x03, 0x00, 0x00, + 0x04, 0x1a, 0x03, 0x00, 0x00, 0x4d, 0x1b, 0x03, + 0x00, 0x00, 0x04, 0x1c, 0x03, 0x00, 0x00, 0x4d, + 0x1d, 0x03, 0x00, 0x00, 0x04, 0x1e, 0x03, 0x00, + 0x00, 0x4d, 0x1f, 0x03, 0x00, 0x00, 0x04, 0x20, + 0x03, 0x00, 0x00, 0x4d, 0x21, 0x03, 0x00, 0x00, + 0x04, 0x22, 0x03, 0x00, 0x00, 0x4d, 0x23, 0x03, + 0x00, 0x00, 0x04, 0x24, 0x03, 0x00, 0x00, 0x4d, + 0x25, 0x03, 0x00, 0x00, 0x04, 0x26, 0x03, 0x00, + 0x00, 0x4d, 0x27, 0x03, 0x00, 0x00, 0x04, 0x28, + 0x03, 0x00, 0x00, 0x4d, 0x29, 0x03, 0x00, 0x00, + 0x04, 0x2a, 0x03, 0x00, 0x00, 0x4d, 0x2b, 0x03, + 0x00, 0x00, 0x04, 0x2c, 0x03, 0x00, 0x00, 0x4d, + 0x2d, 0x03, 0x00, 0x00, 0x04, 0x2e, 0x03, 0x00, + 0x00, 0x4d, 0x2f, 0x03, 0x00, 0x00, 0x04, 0x30, + 0x03, 0x00, 0x00, 0x4d, 0x31, 0x03, 0x00, 0x00, + 0x04, 0x32, 0x03, 0x00, 0x00, 0x4d, 0x33, 0x03, + 0x00, 0x00, 0x04, 0x34, 0x03, 0x00, 0x00, 0x4d, + 0x35, 0x03, 0x00, 0x00, 0x04, 0x36, 0x03, 0x00, + 0x00, 0x4d, 0x37, 0x03, 0x00, 0x00, 0x04, 0x38, + 0x03, 0x00, 0x00, 0x4d, 0x39, 0x03, 0x00, 0x00, + 0x04, 0x3a, 0x03, 0x00, 0x00, 0x4d, 0x3b, 0x03, + 0x00, 0x00, 0x04, 0x3c, 0x03, 0x00, 0x00, 0x4d, + 0x3d, 0x03, 0x00, 0x00, 0x04, 0x3e, 0x03, 0x00, + 0x00, 0x4d, 0x3f, 0x03, 0x00, 0x00, 0x4d, 0x40, + 0x03, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x00, + 0x24, 0x01, 0x00, 0xcc, 0x28, 0x82, 0x0d, 0x01, + 0x00, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, + 0x31, 0x33, 0x07, 0x02, 0x37, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_ro_size = 24564; + +const uint8_t intl_ro[24564] = { + 0x01, 0xb5, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x72, 0x6f, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x10, + 0x7b, 0x31, 0x7d, 0x2c, 0x20, 0x7b, 0x30, 0x7d, + 0x0a, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, + 0x65, 0x64, 0x69, 0x75, 0x6d, 0x08, 0x66, 0x75, + 0x6c, 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x02, + 0x64, 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, 0x06, + 0x45, 0x20, 0x64, 0x04, 0x45, 0x64, 0x10, 0x45, + 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x06, + 0x45, 0x68, 0x6d, 0x0e, 0x45, 0x20, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x06, 0x45, 0x48, 0x6d, 0x16, + 0x45, 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x61, 0x08, 0x45, 0x68, 0x6d, 0x73, + 0x14, 0x45, 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x08, 0x45, 0x48, 0x6d, 0x73, + 0x06, 0x79, 0x20, 0x47, 0x04, 0x47, 0x79, 0x0e, + 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x20, 0x47, 0x0a, + 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x12, 0x64, 0x20, + 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x20, 0x47, 0x0c, + 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x18, 0x45, + 0x2c, 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x20, + 0x79, 0x20, 0x47, 0x0e, 0x47, 0x79, 0x4d, 0x4d, + 0x4d, 0x45, 0x64, 0x06, 0x68, 0x20, 0x61, 0x02, + 0x68, 0x04, 0x48, 0x48, 0x02, 0x48, 0x0c, 0x68, + 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x04, 0x68, 0x6d, + 0x0a, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x04, 0x48, + 0x6d, 0x12, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x61, 0x06, 0x68, 0x6d, 0x73, 0x10, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x06, 0x48, 0x6d, 0x73, 0x16, 0x68, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x20, 0x76, + 0x08, 0x68, 0x6d, 0x73, 0x76, 0x14, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x76, + 0x08, 0x48, 0x6d, 0x73, 0x76, 0x10, 0x68, 0x3a, + 0x6d, 0x6d, 0x20, 0x61, 0x20, 0x76, 0x06, 0x68, + 0x6d, 0x76, 0x0e, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x20, 0x76, 0x06, 0x48, 0x6d, 0x76, 0x02, 0x4c, + 0x02, 0x4d, 0x0a, 0x64, 0x64, 0x2e, 0x4d, 0x4d, + 0x04, 0x4d, 0x64, 0x10, 0x45, 0x2c, 0x20, 0x64, + 0x64, 0x2e, 0x4d, 0x4d, 0x06, 0x4d, 0x45, 0x64, + 0x08, 0x4d, 0x4d, 0x64, 0x64, 0x06, 0x4c, 0x4c, + 0x4c, 0x06, 0x4d, 0x4d, 0x4d, 0x0a, 0x64, 0x20, + 0x4d, 0x4d, 0x4d, 0x08, 0x4d, 0x4d, 0x4d, 0x64, + 0x10, 0x45, 0x2c, 0x20, 0x64, 0x20, 0x4d, 0x4d, + 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0c, + 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, 0x4d, + 0x4d, 0x4d, 0x4d, 0x64, 0x12, 0x45, 0x2c, 0x20, + 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x0c, 0x4d, + 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x04, 0x6d, 0x73, 0x02, 0x79, + 0x08, 0x4d, 0x4d, 0x2e, 0x79, 0x04, 0x79, 0x4d, + 0x0e, 0x64, 0x64, 0x2e, 0x4d, 0x4d, 0x2e, 0x79, + 0x06, 0x79, 0x4d, 0x64, 0x14, 0x45, 0x2c, 0x20, + 0x64, 0x64, 0x2e, 0x4d, 0x4d, 0x2e, 0x79, 0x08, + 0x79, 0x4d, 0x45, 0x64, 0x06, 0x79, 0x4d, 0x4d, + 0x0a, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x08, 0x79, + 0x4d, 0x4d, 0x4d, 0x0e, 0x64, 0x20, 0x4d, 0x4d, + 0x4d, 0x20, 0x79, 0x0a, 0x79, 0x4d, 0x4d, 0x4d, + 0x64, 0x14, 0x45, 0x2c, 0x20, 0x64, 0x20, 0x4d, + 0x4d, 0x4d, 0x20, 0x79, 0x0c, 0x79, 0x4d, 0x4d, + 0x4d, 0x45, 0x64, 0x0c, 0x4d, 0x4d, 0x4d, 0x4d, + 0x20, 0x79, 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, + 0x0a, 0x51, 0x51, 0x51, 0x20, 0x79, 0x08, 0x79, + 0x51, 0x51, 0x51, 0x0c, 0x51, 0x51, 0x51, 0x51, + 0x20, 0x79, 0x0a, 0x79, 0x51, 0x51, 0x51, 0x51, + 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, + 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x73, 0x1c, 0x45, 0x45, 0x45, 0x45, 0x2c, 0x20, + 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, + 0x14, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x45, 0x45, + 0x45, 0x45, 0x64, 0x10, 0x64, 0x20, 0x4d, 0x4d, + 0x4d, 0x4d, 0x20, 0x79, 0x0c, 0x79, 0x4d, 0x4d, + 0x4d, 0x4d, 0x64, 0x16, 0x64, 0x61, 0x74, 0x65, + 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x1a, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x7a, 0x7a, 0x7a, 0x7a, 0x12, 0x68, 0x6d, + 0x6d, 0x73, 0x73, 0x7a, 0x7a, 0x7a, 0x7a, 0x14, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x7a, 0x08, 0x68, 0x6d, 0x73, 0x7a, 0x16, + 0x74, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x73, 0x0e, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x73, 0x02, 0x49, 0x02, 0x46, 0x02, + 0x41, 0x02, 0x53, 0x02, 0x4f, 0x02, 0x4e, 0x02, + 0x44, 0x0c, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x08, 0x69, 0x61, 0x6e, 0x2e, 0x08, 0x66, 0x65, + 0x62, 0x2e, 0x08, 0x6d, 0x61, 0x72, 0x2e, 0x08, + 0x61, 0x70, 0x72, 0x2e, 0x06, 0x6d, 0x61, 0x69, + 0x08, 0x69, 0x75, 0x6e, 0x2e, 0x08, 0x69, 0x75, + 0x6c, 0x2e, 0x08, 0x61, 0x75, 0x67, 0x2e, 0x0a, + 0x73, 0x65, 0x70, 0x74, 0x2e, 0x08, 0x6f, 0x63, + 0x74, 0x2e, 0x08, 0x6e, 0x6f, 0x76, 0x2e, 0x08, + 0x64, 0x65, 0x63, 0x2e, 0x10, 0x69, 0x61, 0x6e, + 0x75, 0x61, 0x72, 0x69, 0x65, 0x12, 0x66, 0x65, + 0x62, 0x72, 0x75, 0x61, 0x72, 0x69, 0x65, 0x0c, + 0x6d, 0x61, 0x72, 0x74, 0x69, 0x65, 0x0e, 0x61, + 0x70, 0x72, 0x69, 0x6c, 0x69, 0x65, 0x0a, 0x69, + 0x75, 0x6e, 0x69, 0x65, 0x0a, 0x69, 0x75, 0x6c, + 0x69, 0x65, 0x0c, 0x61, 0x75, 0x67, 0x75, 0x73, + 0x74, 0x14, 0x73, 0x65, 0x70, 0x74, 0x65, 0x6d, + 0x62, 0x72, 0x69, 0x65, 0x12, 0x6f, 0x63, 0x74, + 0x6f, 0x6d, 0x62, 0x72, 0x69, 0x65, 0x12, 0x6e, + 0x6f, 0x69, 0x65, 0x6d, 0x62, 0x72, 0x69, 0x65, + 0x12, 0x64, 0x65, 0x63, 0x65, 0x6d, 0x62, 0x72, + 0x69, 0x65, 0x0c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, + 0x73, 0x02, 0x4a, 0x02, 0x56, 0x08, 0x64, 0x75, + 0x6d, 0x2e, 0x08, 0x6c, 0x75, 0x6e, 0x2e, 0x08, + 0x6d, 0x69, 0x65, 0x2e, 0x06, 0x6a, 0x6f, 0x69, + 0x08, 0x76, 0x69, 0x6e, 0x2e, 0x08, 0x73, 0xe2, + 0x6d, 0x2e, 0x11, 0x64, 0x00, 0x75, 0x00, 0x6d, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x63, + 0x00, 0x03, 0x01, 0x08, 0x6c, 0x75, 0x6e, 0x69, + 0x0b, 0x6d, 0x00, 0x61, 0x00, 0x72, 0x00, 0x1b, + 0x02, 0x69, 0x00, 0x10, 0x6d, 0x69, 0x65, 0x72, + 0x63, 0x75, 0x72, 0x69, 0x0c, 0x76, 0x69, 0x6e, + 0x65, 0x72, 0x69, 0x0f, 0x73, 0x00, 0xe2, 0x00, + 0x6d, 0x00, 0x62, 0x00, 0x03, 0x01, 0x74, 0x00, + 0x03, 0x01, 0x08, 0x64, 0x61, 0x79, 0x73, 0x08, + 0x65, 0x2e, 0x62, 0x2e, 0x17, 0x65, 0x00, 0x72, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x62, 0x00, 0x75, + 0x00, 0x64, 0x00, 0x69, 0x00, 0x73, 0x00, 0x74, + 0x00, 0x03, 0x01, 0x08, 0x65, 0x72, 0x61, 0x73, + 0x08, 0x61, 0x2e, 0x6d, 0x2e, 0x04, 0x61, 0x6d, + 0x08, 0x70, 0x2e, 0x6d, 0x2e, 0x04, 0x70, 0x6d, + 0x14, 0x64, 0x61, 0x79, 0x50, 0x65, 0x72, 0x69, + 0x6f, 0x64, 0x73, 0x06, 0x4d, 0x30, 0x31, 0x06, + 0x4d, 0x30, 0x32, 0x06, 0x4d, 0x30, 0x33, 0x06, + 0x4d, 0x30, 0x34, 0x06, 0x4d, 0x30, 0x35, 0x06, + 0x4d, 0x30, 0x36, 0x06, 0x4d, 0x30, 0x37, 0x06, + 0x4d, 0x30, 0x38, 0x06, 0x4d, 0x30, 0x39, 0x06, + 0x4d, 0x31, 0x30, 0x06, 0x4d, 0x31, 0x31, 0x06, + 0x4d, 0x31, 0x32, 0x08, 0x54, 0x6f, 0x75, 0x74, + 0x08, 0x42, 0x61, 0x62, 0x61, 0x0a, 0x48, 0x61, + 0x74, 0x6f, 0x72, 0x0a, 0x4b, 0x69, 0x61, 0x68, + 0x6b, 0x08, 0x54, 0x6f, 0x62, 0x61, 0x0c, 0x41, + 0x6d, 0x73, 0x68, 0x69, 0x72, 0x10, 0x42, 0x61, + 0x72, 0x61, 0x6d, 0x68, 0x61, 0x74, 0x12, 0x42, + 0x61, 0x72, 0x61, 0x6d, 0x6f, 0x75, 0x64, 0x61, + 0x0e, 0x42, 0x61, 0x73, 0x68, 0x61, 0x6e, 0x73, + 0x0a, 0x50, 0x61, 0x6f, 0x6e, 0x61, 0x08, 0x45, + 0x70, 0x65, 0x70, 0x0a, 0x4d, 0x65, 0x73, 0x72, + 0x61, 0x0a, 0x4e, 0x61, 0x73, 0x69, 0x65, 0x08, + 0x45, 0x52, 0x41, 0x30, 0x08, 0x45, 0x52, 0x41, + 0x31, 0x10, 0x4d, 0x65, 0x73, 0x6b, 0x65, 0x72, + 0x65, 0x6d, 0x0c, 0x54, 0x65, 0x6b, 0x65, 0x6d, + 0x74, 0x0a, 0x48, 0x65, 0x64, 0x61, 0x72, 0x0c, + 0x54, 0x61, 0x68, 0x73, 0x61, 0x73, 0x06, 0x54, + 0x65, 0x72, 0x0e, 0x59, 0x65, 0x6b, 0x61, 0x74, + 0x69, 0x74, 0x0e, 0x4d, 0x65, 0x67, 0x61, 0x62, + 0x69, 0x74, 0x0c, 0x4d, 0x69, 0x61, 0x7a, 0x69, + 0x61, 0x0c, 0x47, 0x65, 0x6e, 0x62, 0x6f, 0x74, + 0x08, 0x53, 0x65, 0x6e, 0x65, 0x0a, 0x48, 0x61, + 0x6d, 0x6c, 0x65, 0x0e, 0x4e, 0x65, 0x68, 0x61, + 0x73, 0x73, 0x65, 0x0e, 0x50, 0x61, 0x67, 0x75, + 0x6d, 0x65, 0x6e, 0x0a, 0xee, 0x2e, 0x48, 0x72, + 0x2e, 0x0a, 0x64, 0x2e, 0x48, 0x72, 0x2e, 0x0a, + 0xee, 0x2e, 0x65, 0x2e, 0x6e, 0x08, 0x65, 0x2e, + 0x6e, 0x2e, 0x24, 0xee, 0x6e, 0x61, 0x69, 0x6e, + 0x74, 0x65, 0x20, 0x64, 0x65, 0x20, 0x48, 0x72, + 0x69, 0x73, 0x74, 0x6f, 0x73, 0x19, 0x64, 0x00, + 0x75, 0x00, 0x70, 0x00, 0x03, 0x01, 0x20, 0x00, + 0x48, 0x00, 0x72, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x73, 0x00, 0x2a, 0xee, + 0x6e, 0x61, 0x69, 0x6e, 0x74, 0x65, 0x61, 0x20, + 0x65, 0x72, 0x65, 0x69, 0x20, 0x6e, 0x6f, 0x61, + 0x73, 0x74, 0x72, 0x65, 0x17, 0x65, 0x00, 0x72, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x6e, 0x00, 0x6f, + 0x00, 0x61, 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, + 0x00, 0x03, 0x01, 0x0d, 0x54, 0x00, 0x69, 0x00, + 0x19, 0x02, 0x72, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x0d, 0x48, 0x00, 0x65, 0x00, 0x19, 0x02, 0x76, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x0c, 0x4b, 0x69, + 0x73, 0x6c, 0x65, 0x76, 0x0a, 0x54, 0x65, 0x76, + 0x65, 0x74, 0x0b, 0x18, 0x02, 0x65, 0x00, 0x76, + 0x00, 0x61, 0x00, 0x74, 0x00, 0x0c, 0x41, 0x64, + 0x61, 0x72, 0x20, 0x49, 0x08, 0x41, 0x64, 0x61, + 0x72, 0x0a, 0x4e, 0x69, 0x73, 0x61, 0x6e, 0x08, + 0x49, 0x79, 0x61, 0x72, 0x0a, 0x53, 0x69, 0x76, + 0x61, 0x6e, 0x0c, 0x54, 0x61, 0x6d, 0x6d, 0x75, + 0x7a, 0x04, 0x41, 0x76, 0x08, 0x45, 0x6c, 0x75, + 0x6c, 0x0e, 0x41, 0x64, 0x61, 0x72, 0x20, 0x49, + 0x49, 0x04, 0x41, 0x4d, 0x0e, 0x43, 0x68, 0x61, + 0x69, 0x74, 0x72, 0x61, 0x10, 0x56, 0x61, 0x69, + 0x73, 0x61, 0x6b, 0x68, 0x61, 0x10, 0x4a, 0x79, + 0x61, 0x69, 0x73, 0x74, 0x68, 0x61, 0x0c, 0x41, + 0x73, 0x61, 0x64, 0x68, 0x61, 0x0e, 0x53, 0x72, + 0x61, 0x76, 0x61, 0x6e, 0x61, 0x0c, 0x42, 0x68, + 0x61, 0x64, 0x72, 0x61, 0x0c, 0x41, 0x73, 0x76, + 0x69, 0x6e, 0x61, 0x0e, 0x4b, 0x61, 0x72, 0x74, + 0x69, 0x6b, 0x61, 0x14, 0x41, 0x67, 0x72, 0x61, + 0x68, 0x61, 0x79, 0x61, 0x6e, 0x61, 0x0a, 0x50, + 0x61, 0x75, 0x73, 0x61, 0x0a, 0x4d, 0x61, 0x67, + 0x68, 0x61, 0x10, 0x50, 0x68, 0x61, 0x6c, 0x67, + 0x75, 0x6e, 0x61, 0x08, 0x53, 0x61, 0x6b, 0x61, + 0x08, 0x4d, 0x75, 0x68, 0x2e, 0x08, 0x53, 0x61, + 0x66, 0x2e, 0x0c, 0x52, 0x61, 0x62, 0x2e, 0x20, + 0x49, 0x0e, 0x52, 0x61, 0x62, 0x2e, 0x20, 0x49, + 0x49, 0x0c, 0x4a, 0x75, 0x6d, 0x2e, 0x20, 0x49, + 0x0e, 0x4a, 0x75, 0x6d, 0x2e, 0x20, 0x49, 0x49, + 0x08, 0x52, 0x61, 0x6a, 0x2e, 0x08, 0x53, 0x68, + 0x61, 0x2e, 0x08, 0x52, 0x61, 0x6d, 0x2e, 0x0a, + 0x53, 0x68, 0x61, 0x77, 0x2e, 0x11, 0x44, 0x00, + 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, + 0x2d, 0x00, 0x51, 0x00, 0x2e, 0x00, 0x11, 0x44, + 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, + 0x00, 0x2d, 0x00, 0x48, 0x00, 0x2e, 0x00, 0x10, + 0x4d, 0x75, 0x68, 0x61, 0x72, 0x72, 0x61, 0x6d, + 0x0a, 0x53, 0x61, 0x66, 0x61, 0x72, 0x0f, 0x52, + 0x00, 0x61, 0x00, 0x62, 0x00, 0x69, 0x00, 0xbb, + 0x02, 0x20, 0x00, 0x49, 0x00, 0x11, 0x52, 0x00, + 0x61, 0x00, 0x62, 0x00, 0x69, 0x00, 0xbb, 0x02, + 0x20, 0x00, 0x49, 0x00, 0x49, 0x00, 0x10, 0x4a, + 0x75, 0x6d, 0x61, 0x64, 0x61, 0x20, 0x49, 0x12, + 0x4a, 0x75, 0x6d, 0x61, 0x64, 0x61, 0x20, 0x49, + 0x49, 0x0a, 0x52, 0x61, 0x6a, 0x61, 0x62, 0x0f, + 0x53, 0x00, 0x68, 0x00, 0x61, 0x00, 0xbb, 0x02, + 0x62, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x0e, 0x52, + 0x61, 0x6d, 0x61, 0x64, 0x61, 0x6e, 0x0e, 0x53, + 0x68, 0x61, 0x77, 0x77, 0x61, 0x6c, 0x19, 0x44, + 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, + 0x00, 0x2d, 0x00, 0x51, 0x00, 0x69, 0x00, 0xbb, + 0x02, 0x64, 0x00, 0x61, 0x00, 0x68, 0x00, 0x19, + 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, + 0x6c, 0x00, 0x2d, 0x00, 0x48, 0x00, 0x69, 0x00, + 0x6a, 0x00, 0x6a, 0x00, 0x61, 0x00, 0x68, 0x00, + 0x04, 0x41, 0x48, 0x1f, 0x54, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x36, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x48, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x36, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x36, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x29, 0x00, 0x21, 0x53, + 0x00, 0x68, 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, + 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4b, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x57, 0x00, + 0x61, 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x1f, 0x52, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x1d, 0x59, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4a, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6b, 0x00, 0x61, + 0x00, 0x6d, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x2d, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x2b, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x2d, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, 0x2d, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x2a, 0x4a, 0x69, 0x6e, 0x67, 0x6f, 0x2d, 0x6b, + 0x65, 0x69, 0x75, 0x6e, 0x20, 0x28, 0x37, 0x36, + 0x37, 0x2d, 0x37, 0x37, 0x30, 0x29, 0x1d, 0x48, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x2d, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x2d, 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x38, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, 0x44, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x64, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x38, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, + 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4a, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x1d, 0x4b, 0x00, 0x61, 0x00, 0x6a, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x53, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x20, 0x54, 0x65, 0x6e, + 0x2d, 0x61, 0x6e, 0x20, 0x28, 0x38, 0x35, 0x37, + 0x2d, 0x38, 0x35, 0x39, 0x29, 0x1f, 0x4a, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, 0x45, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, 0x6e, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1b, 0x4c, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x1d, 0x41, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, 0x69, 0x00, + 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1d, 0x45, + 0x00, 0x69, 0x00, 0x73, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x4a, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x29, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, 0x4a, + 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x29, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4c, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, + 0x4a, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x24, 0x54, 0x65, 0x6e, 0x2d, 0x65, 0x69, 0x20, + 0x28, 0x31, 0x31, 0x31, 0x30, 0x2d, 0x31, 0x31, + 0x31, 0x33, 0x29, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, + 0x01, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, + 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x6a, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x48, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x48, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x45, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x68, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x6d, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, + 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x59, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x21, 0x4a, 0x00, 0x75, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x29, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x29, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1f, + 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x41, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, + 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x29, 0x00, 0x27, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x75, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x29, 0x52, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x4e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1f, 0x4c, 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x74, 0x00, 0x73, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x27, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x45, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x21, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x45, 0x00, 0x69, 0x00, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x72, + 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, + 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, + 0x45, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, + 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x48, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x65, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x23, 0x41, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, 0x02, 0x54, + 0x0a, 0x4d, 0x65, 0x69, 0x6a, 0x69, 0x0d, 0x54, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x0b, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x0c, 0x48, + 0x65, 0x69, 0x73, 0x65, 0x69, 0x12, 0x46, 0x61, + 0x72, 0x76, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x16, + 0x4f, 0x72, 0x64, 0x69, 0x62, 0x65, 0x68, 0x65, + 0x73, 0x68, 0x74, 0x0e, 0x4b, 0x68, 0x6f, 0x72, + 0x64, 0x61, 0x64, 0x06, 0x54, 0x69, 0x72, 0x0c, + 0x4d, 0x6f, 0x72, 0x64, 0x61, 0x64, 0x12, 0x53, + 0x68, 0x61, 0x68, 0x72, 0x69, 0x76, 0x61, 0x72, + 0x08, 0x4d, 0x65, 0x68, 0x72, 0x08, 0x41, 0x62, + 0x61, 0x6e, 0x08, 0x41, 0x7a, 0x61, 0x72, 0x06, + 0x44, 0x65, 0x79, 0x0c, 0x42, 0x61, 0x68, 0x6d, + 0x61, 0x6e, 0x0c, 0x45, 0x73, 0x66, 0x61, 0x6e, + 0x64, 0x04, 0x41, 0x50, 0x1a, 0x42, 0x65, 0x66, + 0x6f, 0x72, 0x65, 0x20, 0x52, 0x2e, 0x4f, 0x2e, + 0x43, 0x2e, 0x0c, 0x52, 0x2e, 0x4f, 0x2e, 0x43, + 0x2e, 0x12, 0x63, 0x61, 0x6c, 0x65, 0x6e, 0x64, + 0x61, 0x72, 0x73, 0x08, 0x64, 0x61, 0x74, 0x65, + 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, 0x75, + 0x10, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0x1e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, + 0x6e, 0x26, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x6e, 0x65, + 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, + 0x74, 0x74, 0x65, 0x72, 0x6e, 0x0e, 0x64, 0x65, + 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x26, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0xa0, 0x7b, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, + 0x7d, 0x3c, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0xa0, 0x7b, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, + 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, + 0x79, 0x2c, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0xa0, 0x7b, 0x70, 0x65, 0x72, 0x63, + 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, + 0x42, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0xa0, 0x7b, 0x70, 0x65, + 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, + 0x6e, 0x7d, 0x0e, 0x70, 0x65, 0x72, 0x63, 0x65, + 0x6e, 0x74, 0x10, 0x70, 0x61, 0x74, 0x74, 0x65, + 0x72, 0x6e, 0x73, 0x02, 0x2c, 0x02, 0x2e, 0x0a, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x06, 0x4e, 0x61, + 0x4e, 0x06, 0x6e, 0x61, 0x6e, 0x02, 0x2b, 0x10, + 0x70, 0x6c, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x02, 0x2d, 0x12, 0x6d, 0x69, 0x6e, 0x75, 0x73, + 0x53, 0x69, 0x67, 0x6e, 0x02, 0x25, 0x16, 0x70, + 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, + 0x67, 0x6e, 0x03, 0x1e, 0x22, 0x10, 0x69, 0x6e, + 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x0e, 0x73, + 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x08, 0x46, + 0x43, 0x46, 0x41, 0x06, 0x58, 0x41, 0x46, 0x06, + 0x43, 0x46, 0x41, 0x06, 0x58, 0x4f, 0x46, 0x08, + 0x43, 0x46, 0x50, 0x46, 0x06, 0x58, 0x50, 0x46, + 0x14, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, + 0x69, 0x65, 0x73, 0x52, 0x6e, 0x6f, 0x64, 0x65, + 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, + 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2f, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, + 0x61, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x70, 0x2f, + 0x72, 0x6f, 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, + 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, 0x27, 0x00, + 0xa1, 0x01, 0x80, 0x69, 0x01, 0xa0, 0x01, 0x00, + 0x00, 0x00, 0x39, 0xd0, 0x00, 0x00, 0x00, 0x43, + 0xd1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd2, 0x00, + 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd4, 0x00, 0x00, 0x00, 0x04, 0xd5, 0x00, + 0x00, 0x00, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x04, + 0xd7, 0x00, 0x00, 0x00, 0x04, 0xd8, 0x00, 0x00, + 0x00, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x04, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xdb, 0x00, 0x00, 0x00, + 0x04, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xdd, 0x00, + 0x00, 0x00, 0x04, 0xde, 0x00, 0x00, 0x00, 0x04, + 0xdf, 0x00, 0x00, 0x00, 0x04, 0xe0, 0x00, 0x00, + 0x00, 0x04, 0xe1, 0x00, 0x00, 0x00, 0x04, 0xe2, + 0x00, 0x00, 0x00, 0x26, 0x0f, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x00, 0x0a, 0x4d, 0xe4, 0x00, 0x00, + 0x00, 0x09, 0x4d, 0xe5, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, + 0xe8, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, + 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x00, 0x04, 0xe6, + 0x00, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x04, 0xec, 0x00, 0x00, 0x00, + 0x4d, 0xed, 0x00, 0x00, 0x00, 0x04, 0xee, 0x00, + 0x00, 0x00, 0x4d, 0xef, 0x00, 0x00, 0x00, 0x04, + 0xf0, 0x00, 0x00, 0x00, 0x4d, 0xf1, 0x00, 0x00, + 0x00, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xf3, + 0x00, 0x00, 0x00, 0x04, 0xf4, 0x00, 0x00, 0x00, + 0x4d, 0xf5, 0x00, 0x00, 0x00, 0x04, 0xf6, 0x00, + 0x00, 0x00, 0x4d, 0xf7, 0x00, 0x00, 0x00, 0x04, + 0xf8, 0x00, 0x00, 0x00, 0x4d, 0xf9, 0x00, 0x00, + 0x00, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xfb, + 0x00, 0x00, 0x00, 0x04, 0xfc, 0x00, 0x00, 0x00, + 0x4d, 0xfd, 0x00, 0x00, 0x00, 0x04, 0xfe, 0x00, + 0x00, 0x00, 0x4d, 0xff, 0x00, 0x00, 0x00, 0x04, + 0x00, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x01, 0x00, + 0x00, 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, 0x03, + 0x01, 0x00, 0x00, 0x04, 0x04, 0x01, 0x00, 0x00, + 0x4d, 0x05, 0x01, 0x00, 0x00, 0x04, 0x06, 0x01, + 0x00, 0x00, 0x4d, 0x07, 0x01, 0x00, 0x00, 0x04, + 0x08, 0x01, 0x00, 0x00, 0x4d, 0x09, 0x01, 0x00, + 0x00, 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x0b, + 0x01, 0x00, 0x00, 0x04, 0x0c, 0x01, 0x00, 0x00, + 0x4d, 0x0d, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x01, + 0x00, 0x00, 0x4d, 0x0f, 0x01, 0x00, 0x00, 0x04, + 0x10, 0x01, 0x00, 0x00, 0x4d, 0x11, 0x01, 0x00, + 0x00, 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, 0x13, + 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, + 0x4d, 0x15, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x4d, 0x17, 0x01, 0x00, 0x00, 0x04, + 0x18, 0x01, 0x00, 0x00, 0x4d, 0x19, 0x01, 0x00, + 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, 0x1a, + 0x01, 0x00, 0x00, 0x04, 0x1b, 0x01, 0x00, 0x00, + 0x4d, 0x1c, 0x01, 0x00, 0x00, 0x04, 0x1d, 0x01, + 0x00, 0x00, 0x4d, 0x1e, 0x01, 0x00, 0x00, 0x04, + 0x1f, 0x01, 0x00, 0x00, 0x4d, 0x20, 0x01, 0x00, + 0x00, 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, 0x22, + 0x01, 0x00, 0x00, 0x04, 0x23, 0x01, 0x00, 0x00, + 0x4d, 0x24, 0x01, 0x00, 0x00, 0x04, 0x25, 0x01, + 0x00, 0x00, 0x4d, 0x26, 0x01, 0x00, 0x00, 0x04, + 0x27, 0x01, 0x00, 0x00, 0x4d, 0x27, 0x01, 0x00, + 0x00, 0x04, 0x28, 0x01, 0x00, 0x00, 0x4d, 0x29, + 0x01, 0x00, 0x00, 0x04, 0x2a, 0x01, 0x00, 0x00, + 0x4d, 0x2b, 0x01, 0x00, 0x00, 0x04, 0x2c, 0x01, + 0x00, 0x00, 0x4d, 0x2d, 0x01, 0x00, 0x00, 0x04, + 0x28, 0x01, 0x00, 0x00, 0x4d, 0x2e, 0x01, 0x00, + 0x00, 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, 0x30, + 0x01, 0x00, 0x00, 0x04, 0x31, 0x01, 0x00, 0x00, + 0x4d, 0x32, 0x01, 0x00, 0x00, 0x04, 0x33, 0x01, + 0x00, 0x00, 0x4d, 0x34, 0x01, 0x00, 0x00, 0x04, + 0x35, 0x01, 0x00, 0x00, 0x4d, 0x36, 0x01, 0x00, + 0x00, 0x04, 0x37, 0x01, 0x00, 0x00, 0x4d, 0x38, + 0x01, 0x00, 0x00, 0x04, 0x39, 0x01, 0x00, 0x00, + 0x4d, 0x3a, 0x01, 0x00, 0x00, 0x4d, 0x3b, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x3c, 0x01, 0x00, 0x00, + 0x4d, 0x3d, 0x01, 0x00, 0x00, 0x04, 0x3e, 0x01, + 0x00, 0x00, 0x4d, 0x3f, 0x01, 0x00, 0x00, 0x04, + 0x31, 0x01, 0x00, 0x00, 0x4d, 0x32, 0x01, 0x00, + 0x00, 0x04, 0x2a, 0x01, 0x00, 0x00, 0x4d, 0x2b, + 0x01, 0x00, 0x00, 0x4d, 0x40, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x41, 0x01, 0x00, 0x00, 0x4d, 0x42, + 0x01, 0x00, 0x00, 0x04, 0x43, 0x01, 0x00, 0x00, + 0x4d, 0x44, 0x01, 0x00, 0x00, 0x04, 0x0a, 0x01, + 0x00, 0x00, 0x4d, 0x09, 0x01, 0x00, 0x00, 0x04, + 0x06, 0x01, 0x00, 0x00, 0x4d, 0x05, 0x01, 0x00, + 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, 0x4d, 0x46, + 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x0b, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x66, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, + 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x78, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, + 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0xd5, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x00, 0xbe, 0x01, + 0xbe, 0x02, 0xbe, 0x03, 0xbe, 0x04, 0xbe, 0x05, + 0xbe, 0x06, 0xbe, 0x07, 0xbe, 0x08, 0xbe, 0x09, + 0xbe, 0x0a, 0xbe, 0x0b, 0x26, 0x0c, 0x00, 0x4d, + 0x4e, 0x01, 0x00, 0x00, 0xbe, 0x0c, 0xbe, 0x0d, + 0xbe, 0x0e, 0xbe, 0x0f, 0xbe, 0x10, 0xbe, 0x11, + 0xbe, 0x12, 0xbe, 0x13, 0xbe, 0x14, 0xbe, 0x15, + 0xbe, 0x16, 0xbe, 0x17, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x66, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x75, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, + 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0xd6, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x18, 0xbe, + 0x19, 0xbe, 0x1a, 0xbe, 0x1b, 0xbe, 0x1c, 0xbe, + 0x1d, 0xbe, 0x1e, 0xbe, 0x1f, 0xbe, 0x20, 0xbe, + 0x21, 0xbe, 0x22, 0xbe, 0x23, 0xbe, 0x24, 0x26, + 0x0d, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, + 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, + 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, + 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, + 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, + 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, + 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, + 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, + 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, + 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, + 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, + 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, + 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, + 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, + 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x66, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, + 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x75, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x97, + 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, + 0x98, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, + 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x25, 0xbe, 0x26, 0xbe, 0x27, + 0xbe, 0x28, 0xbe, 0x29, 0xbe, 0x2a, 0xbe, 0x2b, + 0xbe, 0x2c, 0xbe, 0x2d, 0xbe, 0x2e, 0xbe, 0x2f, + 0xbe, 0x30, 0x26, 0x0c, 0x00, 0x4d, 0x4e, 0x01, + 0x00, 0x00, 0xbe, 0x31, 0xbe, 0x32, 0xbe, 0x33, + 0xbe, 0x34, 0xbe, 0x35, 0xbe, 0x36, 0xbe, 0x37, + 0xbe, 0x38, 0xbe, 0x39, 0xbe, 0x3a, 0xbe, 0x3b, + 0xbe, 0x3c, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, + 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x66, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x4d, + 0x7d, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x3d, 0xbe, 0x3e, 0xbe, + 0x3f, 0xbe, 0x40, 0xbe, 0x41, 0xbe, 0x42, 0xbe, + 0x43, 0xbe, 0x44, 0xbe, 0x45, 0xbe, 0x46, 0xbe, + 0x47, 0xbe, 0x48, 0xbe, 0x49, 0x26, 0x0d, 0x00, + 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, + 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, + 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, + 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, + 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, + 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, + 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, + 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, + 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x26, 0x0d, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x99, + 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, + 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, + 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, + 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, + 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, + 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, + 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, + 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x66, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x75, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x97, 0x01, 0x00, + 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x97, + 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x4d, + 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x4a, 0xbe, 0x4b, 0xbe, 0x4c, 0xbe, 0x4d, + 0xbe, 0x4e, 0xbe, 0x4f, 0xbe, 0x50, 0xbe, 0x51, + 0xbe, 0x52, 0xbe, 0x53, 0xbe, 0x54, 0xbe, 0x55, + 0xbe, 0x56, 0x26, 0x0d, 0x00, 0x4d, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, + 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, + 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, + 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, + 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, + 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, + 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, + 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, + 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, + 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, + 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, + 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, + 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, + 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, + 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, + 0xa5, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x66, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x14, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x97, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x97, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x78, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, + 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x57, + 0xbe, 0x58, 0xbe, 0x59, 0xbe, 0x5a, 0xbe, 0x5b, + 0xbe, 0x5c, 0xbe, 0x5d, 0xbe, 0x5e, 0xbe, 0x5f, + 0xbe, 0x60, 0xbe, 0x61, 0xbe, 0x62, 0x26, 0x0c, + 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x7e, + 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, + 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, + 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, + 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, + 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, + 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x66, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x97, 0x01, 0x00, 0x00, + 0x04, 0x98, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, + 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, + 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x49, + 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x66, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x14, + 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x4a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, + 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, + 0xa9, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, + 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, + 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, + 0x26, 0x04, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, + 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, + 0xad, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, + 0x01, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x63, 0xbe, 0x64, 0xbe, 0x65, + 0xbe, 0x66, 0xbe, 0x67, 0xbe, 0x68, 0xbe, 0x69, + 0xbe, 0x6a, 0xbe, 0x6b, 0xbe, 0x6c, 0xbe, 0x6d, + 0xbe, 0x6e, 0xbe, 0x6f, 0xbe, 0x70, 0x26, 0x0e, + 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0xae, + 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, + 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, + 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, + 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, + 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, 0x04, 0xb6, + 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, + 0x04, 0xb8, 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, + 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, 0x04, + 0xbb, 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, + 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, + 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, + 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, + 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, 0x00, 0x04, + 0xb5, 0x01, 0x00, 0x00, 0x04, 0xb6, 0x01, 0x00, + 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, + 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, + 0x04, 0xba, 0x01, 0x00, 0x00, 0x04, 0xbb, 0x01, + 0x00, 0x00, 0x26, 0x0e, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x66, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, + 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xbc, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x78, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, + 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x71, 0xbe, 0x72, + 0xbe, 0x73, 0xbe, 0x74, 0xbe, 0x75, 0xbe, 0x76, + 0xbe, 0x77, 0xbe, 0x78, 0xbe, 0x79, 0xbe, 0x7a, + 0xbe, 0x7b, 0xbe, 0x7c, 0x26, 0x0c, 0x00, 0x4d, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, + 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, + 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, + 0x04, 0xc1, 0x01, 0x00, 0x00, 0x04, 0xc2, 0x01, + 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, 0x04, + 0xc4, 0x01, 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, + 0x00, 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, 0xc7, + 0x01, 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xbd, 0x01, 0x00, 0x00, 0x04, 0xbe, 0x01, + 0x00, 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, 0x04, + 0xc0, 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, + 0x00, 0x04, 0xc2, 0x01, 0x00, 0x00, 0x04, 0xc3, + 0x01, 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, + 0x04, 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, 0x01, + 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, 0x04, + 0xc8, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x66, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x14, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xc9, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0xc9, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x78, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, + 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x7d, + 0xbe, 0x7e, 0xbe, 0x7f, 0xbe, 0x80, 0xbe, 0x81, + 0xbe, 0x82, 0xbe, 0x83, 0xbe, 0x84, 0xbe, 0x85, + 0xbe, 0x86, 0xbe, 0x87, 0xbe, 0x88, 0x26, 0x0c, + 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0xca, + 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, + 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, + 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, 0x04, + 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, + 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, 0x04, 0xd2, + 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, + 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, 0xd5, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, 0x04, + 0xd7, 0x01, 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, + 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, + 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, + 0x04, 0xdc, 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, + 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, + 0xdf, 0x01, 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, + 0x00, 0x04, 0xe1, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x66, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xe2, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0xe2, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe2, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x4d, + 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x89, 0xbe, 0x8a, 0xbe, 0x8b, 0xbe, 0x8c, + 0xbe, 0x8d, 0xbe, 0x8e, 0xbe, 0x8f, 0xbe, 0x90, + 0xbe, 0x91, 0xbe, 0x92, 0xbe, 0x93, 0xbe, 0x94, + 0x26, 0x0c, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0xca, 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, + 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, + 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, + 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, + 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, + 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, + 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, + 0xd5, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, + 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, 0xd8, + 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, + 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, + 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, 0x04, + 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, + 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, 0xe0, + 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x66, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x75, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xe2, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xe2, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, + 0x01, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x66, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xe3, 0x01, 0x00, 0x00, + 0x04, 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, + 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, + 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, + 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, + 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, + 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, + 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, + 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, + 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, + 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, + 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, + 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, + 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, + 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, + 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, + 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, 0x01, + 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x04, + 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, + 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, 0x04, 0x02, + 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, 0x03, + 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, + 0x04, 0x04, 0x02, 0x00, 0x00, 0x4d, 0x21, 0x00, + 0x00, 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, 0x4d, + 0x22, 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, 0x00, + 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, 0x07, + 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, + 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, + 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, + 0x26, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, + 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, 0x0b, + 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, + 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, + 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, + 0x2a, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, + 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, 0x0f, + 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, + 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, + 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, + 0x2e, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, + 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, 0x13, + 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, + 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, + 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, + 0x32, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, + 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, 0x17, + 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, + 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, + 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, + 0x36, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, + 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, 0x1b, + 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, + 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, + 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, + 0x3a, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, + 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, 0x1f, + 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, + 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, + 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, + 0x3e, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, + 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, 0x23, + 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, + 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, + 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, + 0x42, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, + 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, 0x27, + 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, + 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, + 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, + 0x46, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, + 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, 0x2b, + 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, + 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, + 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, + 0x4a, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, + 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, 0x2f, + 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, + 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, + 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, + 0x4e, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, + 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, 0x33, + 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, + 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, + 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, + 0x52, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, + 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, 0x37, + 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, + 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, + 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, + 0x56, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, + 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, 0x3b, + 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, + 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, + 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, + 0x5a, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, + 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, 0x3f, + 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, + 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, + 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, + 0x5e, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, + 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, 0x43, + 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, + 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, + 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, + 0x62, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, + 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, 0x47, + 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, + 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, + 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, + 0x66, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, + 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, 0x4b, + 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, + 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, + 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, + 0x6a, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, + 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, 0x4f, + 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, + 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, + 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, + 0x6e, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, + 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, 0x53, + 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, + 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, + 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, + 0x72, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, + 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, 0x57, + 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, + 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, + 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, + 0x76, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, + 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, 0x5b, + 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, + 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, + 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, + 0x7a, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, + 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, 0x5f, + 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, + 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, + 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, + 0x7e, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, + 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, 0x63, + 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, + 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, + 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, + 0x82, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, + 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, 0x67, + 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, + 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, + 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, + 0x86, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, + 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, 0x6b, + 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, + 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, + 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, + 0x8a, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, + 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, 0x6f, + 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, + 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, + 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, + 0x8e, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, + 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, 0x73, + 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, + 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, + 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, + 0x92, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, + 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, 0x77, + 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, + 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, + 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, + 0x96, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, + 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, 0x7b, + 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, + 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, + 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, + 0x9a, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, + 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, 0x7f, + 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, + 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, + 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, + 0x9e, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, + 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, 0x83, + 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, + 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, + 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, + 0xa2, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, + 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, 0x87, + 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, + 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, + 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, + 0xa6, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, + 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, 0x8b, + 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, + 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, + 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, + 0xaa, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, + 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, 0x8f, + 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, + 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, + 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, + 0xae, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, + 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, 0x93, + 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, + 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, + 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, + 0xb2, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, + 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, 0x97, + 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, + 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, + 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, + 0xb6, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, + 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, 0x9b, + 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, + 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, + 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, + 0xba, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, + 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, 0x9f, + 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, + 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, + 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, + 0xbe, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, + 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, 0xa3, + 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, + 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, + 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, + 0xc2, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, + 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, 0xa7, + 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, + 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, + 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, + 0xc6, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, + 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, 0xab, + 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, + 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, + 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, + 0xca, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, + 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, 0xaf, + 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, + 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, + 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, + 0xce, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, + 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, 0xb3, + 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, + 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, + 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, + 0xd2, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, + 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, 0xb7, + 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, + 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, + 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, + 0xd6, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, + 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, 0xbb, + 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, + 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, + 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, 0xbf, + 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, + 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, 0xc3, + 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, + 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, + 0xe2, 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, + 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, 0xc7, + 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, + 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, + 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, + 0x00, 0x80, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x80, 0x04, 0x03, 0x01, 0x00, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, + 0x04, 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, + 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, + 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, + 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, + 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, + 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, + 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, + 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, + 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, + 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, + 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, + 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, + 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, + 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, + 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, + 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, 0x01, + 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x04, + 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, + 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, 0x04, 0x02, + 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, 0x03, + 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, + 0x04, 0x04, 0x02, 0x00, 0x00, 0x4d, 0x21, 0x00, + 0x00, 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, 0x4d, + 0x22, 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, 0x00, + 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, 0x07, + 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, + 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, + 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, + 0x26, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, + 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, 0x0b, + 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, + 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, + 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, + 0x2a, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, + 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, 0x0f, + 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, + 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, + 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, + 0x2e, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, + 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, 0x13, + 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, + 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, + 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, + 0x32, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, + 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, 0x17, + 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, + 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, + 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, + 0x36, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, + 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, 0x1b, + 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, + 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, + 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, + 0x3a, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, + 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, 0x1f, + 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, + 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, + 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, + 0x3e, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, + 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, 0x23, + 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, + 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, + 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, + 0x42, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, + 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, 0x27, + 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, + 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, + 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, + 0x46, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, + 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, 0x2b, + 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, + 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, + 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, + 0x4a, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, + 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, 0x2f, + 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, + 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, + 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, + 0x4e, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, + 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, 0x33, + 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, + 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, + 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, + 0x52, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, + 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, 0x37, + 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, + 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, + 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, + 0x56, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, + 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, 0x3b, + 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, + 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, + 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, + 0x5a, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, + 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, 0x3f, + 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, + 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, + 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, + 0x5e, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, + 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, 0x43, + 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, + 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, + 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, + 0x62, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, + 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, 0x47, + 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, + 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, + 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, + 0x66, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, + 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, 0x4b, + 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, + 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, + 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, + 0x6a, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, + 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, 0x4f, + 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, + 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, + 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, + 0x6e, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, + 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, 0x53, + 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, + 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, + 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, + 0x72, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, + 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, 0x57, + 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, + 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, + 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, + 0x76, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, + 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, 0x5b, + 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, + 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, + 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, + 0x7a, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, + 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, 0x5f, + 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, + 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, + 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, + 0x7e, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, + 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, 0x63, + 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, + 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, + 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, + 0x82, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, + 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, 0x67, + 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, + 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, + 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, + 0x86, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, + 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, 0x6b, + 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, + 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, + 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, + 0x8a, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, + 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, 0x6f, + 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, + 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, + 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, + 0x8e, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, + 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, 0x73, + 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, + 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, + 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, + 0x92, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, + 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, 0x77, + 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, + 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, + 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, + 0x96, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, + 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, 0x7b, + 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, + 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, + 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, + 0x9a, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, + 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, 0x7f, + 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, + 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, + 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, + 0x9e, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, + 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, 0x83, + 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, + 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, + 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, + 0xa2, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, + 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, 0x87, + 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, + 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, + 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, + 0xa6, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, + 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, 0x8b, + 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, + 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, + 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, + 0xaa, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, + 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, 0x8f, + 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, + 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, + 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, + 0xae, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, + 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, 0x93, + 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, + 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, + 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, + 0xb2, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, + 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, 0x97, + 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, + 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, + 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, + 0xb6, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, + 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, 0x9b, + 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, + 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, + 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, + 0xba, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, + 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, 0x9f, + 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, + 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, + 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, + 0xbe, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, + 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, 0xa3, + 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, + 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, + 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, + 0xc2, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, + 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, 0xa7, + 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, + 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, + 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, + 0xc6, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, + 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, 0xab, + 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, + 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, + 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, + 0xca, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, + 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, 0xaf, + 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, + 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, + 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, + 0xce, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, + 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, 0xb3, + 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, + 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, + 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, + 0xd2, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, + 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, 0xb7, + 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, + 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, + 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, + 0xd6, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, + 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, 0xbb, + 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, + 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, + 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, 0xbf, + 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, + 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, 0xc3, + 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, + 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, + 0xe2, 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, + 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, 0xc7, + 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, + 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, 0xcc, + 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, + 0x04, 0xcd, 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, + 0x00, 0x80, 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, + 0x04, 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, + 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, + 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, + 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, + 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, + 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, + 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, + 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, + 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, + 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, + 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, + 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, + 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, + 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, + 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, + 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, 0x01, + 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x04, + 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, + 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, 0x04, 0x02, + 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, 0x03, + 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, + 0x04, 0x04, 0x02, 0x00, 0x00, 0x4d, 0x21, 0x00, + 0x00, 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, 0x4d, + 0x22, 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, 0x00, + 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, 0x07, + 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, + 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, + 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, + 0x26, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, + 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, 0x0b, + 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, + 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, + 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, + 0x2a, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, + 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, 0x0f, + 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, + 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, + 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, + 0x2e, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, + 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, 0x13, + 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, + 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, + 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, + 0x32, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, + 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, 0x17, + 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, + 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, + 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, + 0x36, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, + 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, 0x1b, + 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, + 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, + 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, + 0x3a, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, + 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, 0x1f, + 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, + 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, + 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, + 0x3e, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, + 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, 0x23, + 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, + 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, + 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, + 0x42, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, + 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, 0x27, + 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, + 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, + 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, + 0x46, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, + 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, 0x2b, + 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, + 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, + 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, + 0x4a, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, + 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, 0x2f, + 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, + 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, + 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, + 0x4e, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, + 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, 0x33, + 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, + 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, + 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, + 0x52, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, + 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, 0x37, + 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, + 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, + 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, + 0x56, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, + 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, 0x3b, + 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, + 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, + 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, + 0x5a, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, + 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, 0x3f, + 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, + 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, + 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, + 0x5e, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, + 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, 0x43, + 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, + 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, + 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, + 0x62, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, + 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, 0x47, + 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, + 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, + 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, + 0x66, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, + 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, 0x4b, + 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, + 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, + 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, + 0x6a, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, + 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, 0x4f, + 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, + 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, + 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, + 0x6e, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, + 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, 0x53, + 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, + 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, + 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, + 0x72, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, + 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, 0x57, + 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, + 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, + 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, + 0x76, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, + 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, 0x5b, + 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, + 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, + 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, + 0x7a, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, + 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, 0x5f, + 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, + 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, + 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, + 0x7e, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, + 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, 0x63, + 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, + 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, + 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, + 0x82, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, + 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, 0x67, + 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, + 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, + 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, + 0x86, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, + 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, 0x6b, + 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, + 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, + 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, + 0x8a, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, + 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, 0x6f, + 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, + 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, + 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, + 0x8e, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, + 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, 0x73, + 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, + 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, + 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, + 0x92, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, + 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, 0x77, + 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, + 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, + 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, + 0x96, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, + 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, 0x7b, + 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, + 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, + 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, + 0x9a, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, + 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, 0x7f, + 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, + 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, + 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, + 0x9e, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, + 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, 0x83, + 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, + 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, + 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, + 0xa2, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, + 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, 0x87, + 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, + 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, + 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, + 0xa6, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, + 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, 0x8b, + 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, + 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, + 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, + 0xaa, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, + 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, 0x8f, + 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, + 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, + 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, + 0xae, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, + 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, 0x93, + 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, + 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, + 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, + 0xb2, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, + 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, 0x97, + 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, + 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, + 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, + 0xb6, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, + 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, 0x9b, + 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, + 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, + 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, + 0xba, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, + 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, 0x9f, + 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, + 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, + 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, + 0xbe, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, + 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, 0xa3, + 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, + 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, + 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, + 0xc2, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, + 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, 0xa7, + 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, + 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, + 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, + 0xc6, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, + 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, 0xab, + 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, + 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, + 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, + 0xca, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, + 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, 0xaf, + 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, + 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, + 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, + 0xce, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, + 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, 0xb3, + 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, + 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, + 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, + 0xd2, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, + 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, 0xb7, + 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, + 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, + 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, + 0xd6, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, + 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, 0xbb, + 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, + 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, + 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, 0xbf, + 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, + 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, 0xc3, + 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, + 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, + 0xe2, 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, + 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, 0xc7, + 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, + 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, 0xcc, + 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, + 0x04, 0xcd, 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, + 0x00, 0x80, 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x95, 0xbe, 0x96, 0xbe, 0x97, 0xbe, + 0x98, 0xbe, 0x99, 0xbe, 0x9a, 0xbe, 0x9b, 0xbe, + 0x9c, 0xbe, 0x9d, 0xbe, 0x9e, 0xbe, 0x9f, 0xbe, + 0xa0, 0x26, 0x0c, 0x00, 0x4d, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0xd0, 0x02, 0x00, 0x00, 0x04, 0xd1, + 0x02, 0x00, 0x00, 0x04, 0xd2, 0x02, 0x00, 0x00, + 0x04, 0xd3, 0x02, 0x00, 0x00, 0x04, 0xd4, 0x02, + 0x00, 0x00, 0x04, 0xd5, 0x02, 0x00, 0x00, 0x04, + 0xd6, 0x02, 0x00, 0x00, 0x04, 0xd7, 0x02, 0x00, + 0x00, 0x04, 0xd8, 0x02, 0x00, 0x00, 0x04, 0xd9, + 0x02, 0x00, 0x00, 0x04, 0xda, 0x02, 0x00, 0x00, + 0x04, 0xdb, 0x02, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd0, 0x02, + 0x00, 0x00, 0x04, 0xd1, 0x02, 0x00, 0x00, 0x04, + 0xd2, 0x02, 0x00, 0x00, 0x04, 0xd3, 0x02, 0x00, + 0x00, 0x04, 0xd4, 0x02, 0x00, 0x00, 0x04, 0xd5, + 0x02, 0x00, 0x00, 0x04, 0xd6, 0x02, 0x00, 0x00, + 0x04, 0xd7, 0x02, 0x00, 0x00, 0x04, 0xd8, 0x02, + 0x00, 0x00, 0x04, 0xd9, 0x02, 0x00, 0x00, 0x04, + 0xda, 0x02, 0x00, 0x00, 0x04, 0xdb, 0x02, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x66, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, + 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x75, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xdc, + 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0xdc, 0x02, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xdc, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x78, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x4d, + 0x7d, 0x01, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x49, + 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x66, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x75, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xdd, 0x02, 0x00, + 0x00, 0x04, 0xde, 0x02, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0xdd, + 0x02, 0x00, 0x00, 0x04, 0xde, 0x02, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xdd, 0x02, 0x00, 0x00, 0x04, 0xde, 0x02, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x4d, + 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x02, 0x00, 0x00, + 0x0b, 0x04, 0xe1, 0x02, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe2, 0x02, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0xe3, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x02, + 0x00, 0x00, 0x04, 0xe5, 0x02, 0x00, 0x00, 0x4d, + 0xe6, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x02, 0x00, + 0x00, 0x0b, 0x04, 0xe8, 0x02, 0x00, 0x00, 0x4d, + 0xe4, 0x02, 0x00, 0x00, 0x04, 0xe9, 0x02, 0x00, + 0x00, 0x4d, 0xe6, 0x02, 0x00, 0x00, 0x4d, 0xea, + 0x02, 0x00, 0x00, 0x0b, 0x04, 0xeb, 0x02, 0x00, + 0x00, 0x4d, 0xe4, 0x02, 0x00, 0x00, 0x04, 0xec, + 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x02, 0x00, 0x00, + 0x4d, 0xed, 0x02, 0x00, 0x00, 0x4d, 0xee, 0x02, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xef, 0x02, 0x00, + 0x00, 0x4d, 0xe7, 0x02, 0x00, 0x00, 0x04, 0xf0, + 0x02, 0x00, 0x00, 0x4d, 0xf1, 0x02, 0x00, 0x00, + 0x04, 0xf2, 0x02, 0x00, 0x00, 0x4d, 0xf3, 0x02, + 0x00, 0x00, 0x04, 0xf4, 0x02, 0x00, 0x00, 0x4d, + 0xf5, 0x02, 0x00, 0x00, 0x04, 0xf6, 0x02, 0x00, + 0x00, 0x4d, 0xf7, 0x02, 0x00, 0x00, 0x04, 0xf8, + 0x02, 0x00, 0x00, 0x4d, 0xf9, 0x02, 0x00, 0x00, + 0x04, 0xfa, 0x02, 0x00, 0x00, 0x4d, 0xfb, 0x02, + 0x00, 0x00, 0x4d, 0xe1, 0x02, 0x00, 0x00, 0x4d, + 0xfc, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xfd, 0x02, + 0x00, 0x00, 0x4d, 0xfe, 0x02, 0x00, 0x00, 0x04, + 0xff, 0x02, 0x00, 0x00, 0x4d, 0x00, 0x03, 0x00, + 0x00, 0x04, 0x01, 0x03, 0x00, 0x00, 0x4d, 0x02, + 0x03, 0x00, 0x00, 0x4d, 0x03, 0x03, 0x00, 0x00, + 0x4d, 0x45, 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, + 0xcc, 0x28, 0x88, 0x0c, 0x01, 0x00, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_ru_size = 36598; + +const uint8_t intl_ru[36598] = { + 0x01, 0xc1, 0x06, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x72, 0x75, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x10, + 0x7b, 0x31, 0x7d, 0x2c, 0x20, 0x7b, 0x30, 0x7d, + 0x0a, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, + 0x65, 0x64, 0x69, 0x75, 0x6d, 0x08, 0x66, 0x75, + 0x6c, 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x02, + 0x64, 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, 0x0c, + 0x63, 0x63, 0x63, 0x2c, 0x20, 0x64, 0x04, 0x45, + 0x64, 0x10, 0x45, 0x20, 0x68, 0x3a, 0x6d, 0x6d, + 0x20, 0x61, 0x06, 0x45, 0x68, 0x6d, 0x0e, 0x45, + 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x06, 0x45, + 0x48, 0x6d, 0x16, 0x45, 0x20, 0x68, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x08, 0x45, + 0x68, 0x6d, 0x73, 0x14, 0x45, 0x20, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x08, 0x45, + 0x48, 0x6d, 0x73, 0x11, 0x79, 0x00, 0x20, 0x00, + 0x27, 0x00, 0x33, 0x04, 0x27, 0x00, 0x2e, 0x00, + 0x20, 0x00, 0x47, 0x00, 0x04, 0x47, 0x79, 0x0e, + 0x4c, 0x4c, 0x4c, 0x20, 0x79, 0x20, 0x47, 0x0a, + 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x1d, 0x64, 0x00, + 0x20, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, + 0x20, 0x00, 0x79, 0x00, 0x20, 0x00, 0x27, 0x00, + 0x33, 0x04, 0x27, 0x00, 0x2e, 0x00, 0x20, 0x00, + 0x47, 0x00, 0x0c, 0x47, 0x79, 0x4d, 0x4d, 0x4d, + 0x64, 0x23, 0x45, 0x00, 0x2c, 0x00, 0x20, 0x00, + 0x64, 0x00, 0x20, 0x00, 0x4d, 0x00, 0x4d, 0x00, + 0x4d, 0x00, 0x20, 0x00, 0x79, 0x00, 0x20, 0x00, + 0x27, 0x00, 0x33, 0x04, 0x27, 0x00, 0x2e, 0x00, + 0x20, 0x00, 0x47, 0x00, 0x0e, 0x47, 0x79, 0x4d, + 0x4d, 0x4d, 0x45, 0x64, 0x06, 0x68, 0x20, 0x61, + 0x02, 0x68, 0x02, 0x48, 0x0c, 0x68, 0x3a, 0x6d, + 0x6d, 0x20, 0x61, 0x04, 0x68, 0x6d, 0x08, 0x48, + 0x3a, 0x6d, 0x6d, 0x04, 0x48, 0x6d, 0x12, 0x68, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, + 0x06, 0x68, 0x6d, 0x73, 0x0e, 0x48, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x06, 0x48, 0x6d, 0x73, + 0x16, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x61, 0x20, 0x76, 0x08, 0x68, 0x6d, 0x73, + 0x76, 0x12, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x76, 0x08, 0x48, 0x6d, 0x73, 0x76, + 0x10, 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x20, + 0x76, 0x06, 0x68, 0x6d, 0x76, 0x0c, 0x48, 0x3a, + 0x6d, 0x6d, 0x20, 0x76, 0x06, 0x48, 0x6d, 0x76, + 0x02, 0x4c, 0x02, 0x4d, 0x0a, 0x64, 0x64, 0x2e, + 0x4d, 0x4d, 0x04, 0x4d, 0x64, 0x10, 0x45, 0x2c, + 0x20, 0x64, 0x64, 0x2e, 0x4d, 0x4d, 0x06, 0x4d, + 0x45, 0x64, 0x08, 0x4d, 0x4d, 0x64, 0x64, 0x06, + 0x4c, 0x4c, 0x4c, 0x06, 0x4d, 0x4d, 0x4d, 0x0a, + 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x08, 0x4d, 0x4d, + 0x4d, 0x64, 0x14, 0x63, 0x63, 0x63, 0x2c, 0x20, + 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, + 0x4d, 0x45, 0x64, 0x0c, 0x64, 0x20, 0x4d, 0x4d, + 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, + 0x0a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x04, 0x6d, + 0x73, 0x02, 0x79, 0x08, 0x4d, 0x4d, 0x2e, 0x79, + 0x04, 0x79, 0x4d, 0x0e, 0x64, 0x64, 0x2e, 0x4d, + 0x4d, 0x2e, 0x79, 0x06, 0x79, 0x4d, 0x64, 0x21, + 0x63, 0x00, 0x63, 0x00, 0x63, 0x00, 0x2c, 0x00, + 0x20, 0x00, 0x64, 0x00, 0x2e, 0x00, 0x4d, 0x00, + 0x4d, 0x00, 0x2e, 0x00, 0x79, 0x00, 0x20, 0x00, + 0x27, 0x00, 0x33, 0x04, 0x27, 0x00, 0x2e, 0x00, + 0x08, 0x79, 0x4d, 0x45, 0x64, 0x06, 0x79, 0x4d, + 0x4d, 0x15, 0x4c, 0x00, 0x4c, 0x00, 0x4c, 0x00, + 0x20, 0x00, 0x79, 0x00, 0x20, 0x00, 0x27, 0x00, + 0x33, 0x04, 0x27, 0x00, 0x2e, 0x00, 0x08, 0x79, + 0x4d, 0x4d, 0x4d, 0x19, 0x64, 0x00, 0x20, 0x00, + 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x20, 0x00, + 0x79, 0x00, 0x20, 0x00, 0x27, 0x00, 0x33, 0x04, + 0x27, 0x00, 0x2e, 0x00, 0x0a, 0x79, 0x4d, 0x4d, + 0x4d, 0x64, 0x1f, 0x45, 0x00, 0x2c, 0x00, 0x20, + 0x00, 0x64, 0x00, 0x20, 0x00, 0x4d, 0x00, 0x4d, + 0x00, 0x4d, 0x00, 0x20, 0x00, 0x79, 0x00, 0x20, + 0x00, 0x27, 0x00, 0x33, 0x04, 0x27, 0x00, 0x2e, + 0x00, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, + 0x17, 0x4c, 0x00, 0x4c, 0x00, 0x4c, 0x00, 0x4c, + 0x00, 0x20, 0x00, 0x79, 0x00, 0x20, 0x00, 0x27, + 0x00, 0x33, 0x04, 0x27, 0x00, 0x2e, 0x00, 0x0a, + 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x15, 0x51, 0x00, + 0x51, 0x00, 0x51, 0x00, 0x20, 0x00, 0x79, 0x00, + 0x20, 0x00, 0x27, 0x00, 0x33, 0x04, 0x27, 0x00, + 0x2e, 0x00, 0x08, 0x79, 0x51, 0x51, 0x51, 0x17, + 0x51, 0x00, 0x51, 0x00, 0x51, 0x00, 0x51, 0x00, + 0x20, 0x00, 0x79, 0x00, 0x20, 0x00, 0x27, 0x00, + 0x33, 0x04, 0x27, 0x00, 0x2e, 0x00, 0x0a, 0x79, + 0x51, 0x51, 0x51, 0x51, 0x20, 0x61, 0x76, 0x61, + 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x73, 0x27, 0x45, 0x00, + 0x45, 0x00, 0x45, 0x00, 0x45, 0x00, 0x2c, 0x00, + 0x20, 0x00, 0x64, 0x00, 0x20, 0x00, 0x4d, 0x00, + 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x20, 0x00, + 0x79, 0x00, 0x20, 0x00, 0x27, 0x00, 0x33, 0x04, + 0x27, 0x00, 0x2e, 0x00, 0x14, 0x79, 0x4d, 0x4d, + 0x4d, 0x4d, 0x45, 0x45, 0x45, 0x45, 0x64, 0x1b, + 0x64, 0x00, 0x20, 0x00, 0x4d, 0x00, 0x4d, 0x00, + 0x4d, 0x00, 0x4d, 0x00, 0x20, 0x00, 0x79, 0x00, + 0x20, 0x00, 0x27, 0x00, 0x33, 0x04, 0x27, 0x00, + 0x2e, 0x00, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, + 0x64, 0x10, 0x64, 0x64, 0x2e, 0x4d, 0x4d, 0x2e, + 0x79, 0x79, 0x16, 0x64, 0x61, 0x74, 0x65, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x18, 0x48, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x7a, + 0x7a, 0x7a, 0x7a, 0x12, 0x68, 0x6d, 0x6d, 0x73, + 0x73, 0x7a, 0x7a, 0x7a, 0x7a, 0x12, 0x48, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x7a, 0x08, + 0x68, 0x6d, 0x73, 0x7a, 0x16, 0x74, 0x69, 0x6d, + 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, + 0x0e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, + 0x03, 0x2f, 0x04, 0x03, 0x24, 0x04, 0x03, 0x1c, + 0x04, 0x03, 0x10, 0x04, 0x03, 0x18, 0x04, 0x03, + 0x21, 0x04, 0x03, 0x1e, 0x04, 0x03, 0x1d, 0x04, + 0x03, 0x14, 0x04, 0x0c, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x09, 0x4f, 0x04, 0x3d, 0x04, 0x32, + 0x04, 0x2e, 0x00, 0x0b, 0x44, 0x04, 0x35, 0x04, + 0x32, 0x04, 0x40, 0x04, 0x2e, 0x00, 0x09, 0x3c, + 0x04, 0x30, 0x04, 0x40, 0x04, 0x2e, 0x00, 0x09, + 0x30, 0x04, 0x3f, 0x04, 0x40, 0x04, 0x2e, 0x00, + 0x07, 0x3c, 0x04, 0x30, 0x04, 0x4f, 0x04, 0x09, + 0x38, 0x04, 0x4e, 0x04, 0x3d, 0x04, 0x2e, 0x00, + 0x09, 0x38, 0x04, 0x4e, 0x04, 0x3b, 0x04, 0x2e, + 0x00, 0x09, 0x30, 0x04, 0x32, 0x04, 0x33, 0x04, + 0x2e, 0x00, 0x0b, 0x41, 0x04, 0x35, 0x04, 0x3d, + 0x04, 0x42, 0x04, 0x2e, 0x00, 0x09, 0x3e, 0x04, + 0x3a, 0x04, 0x42, 0x04, 0x2e, 0x00, 0x0b, 0x3d, + 0x04, 0x3e, 0x04, 0x4f, 0x04, 0x31, 0x04, 0x2e, + 0x00, 0x09, 0x34, 0x04, 0x35, 0x04, 0x3a, 0x04, + 0x2e, 0x00, 0x0d, 0x4f, 0x04, 0x3d, 0x04, 0x32, + 0x04, 0x30, 0x04, 0x40, 0x04, 0x4f, 0x04, 0x0f, + 0x44, 0x04, 0x35, 0x04, 0x32, 0x04, 0x40, 0x04, + 0x30, 0x04, 0x3b, 0x04, 0x4f, 0x04, 0x0b, 0x3c, + 0x04, 0x30, 0x04, 0x40, 0x04, 0x42, 0x04, 0x30, + 0x04, 0x0d, 0x30, 0x04, 0x3f, 0x04, 0x40, 0x04, + 0x35, 0x04, 0x3b, 0x04, 0x4f, 0x04, 0x09, 0x38, + 0x04, 0x4e, 0x04, 0x3d, 0x04, 0x4f, 0x04, 0x09, + 0x38, 0x04, 0x4e, 0x04, 0x3b, 0x04, 0x4f, 0x04, + 0x0f, 0x30, 0x04, 0x32, 0x04, 0x33, 0x04, 0x43, + 0x04, 0x41, 0x04, 0x42, 0x04, 0x30, 0x04, 0x11, + 0x41, 0x04, 0x35, 0x04, 0x3d, 0x04, 0x42, 0x04, + 0x4f, 0x04, 0x31, 0x04, 0x40, 0x04, 0x4f, 0x04, + 0x0f, 0x3e, 0x04, 0x3a, 0x04, 0x42, 0x04, 0x4f, + 0x04, 0x31, 0x04, 0x40, 0x04, 0x4f, 0x04, 0x0d, + 0x3d, 0x04, 0x3e, 0x04, 0x4f, 0x04, 0x31, 0x04, + 0x40, 0x04, 0x4f, 0x04, 0x0f, 0x34, 0x04, 0x35, + 0x04, 0x3a, 0x04, 0x30, 0x04, 0x31, 0x04, 0x40, + 0x04, 0x4f, 0x04, 0x0c, 0x6d, 0x6f, 0x6e, 0x74, + 0x68, 0x73, 0x05, 0x32, 0x04, 0x41, 0x04, 0x05, + 0x3f, 0x04, 0x3d, 0x04, 0x05, 0x32, 0x04, 0x42, + 0x04, 0x05, 0x41, 0x04, 0x40, 0x04, 0x05, 0x47, + 0x04, 0x42, 0x04, 0x05, 0x3f, 0x04, 0x42, 0x04, + 0x05, 0x41, 0x04, 0x31, 0x04, 0x17, 0x32, 0x04, + 0x3e, 0x04, 0x41, 0x04, 0x3a, 0x04, 0x40, 0x04, + 0x35, 0x04, 0x41, 0x04, 0x35, 0x04, 0x3d, 0x04, + 0x4c, 0x04, 0x35, 0x04, 0x17, 0x3f, 0x04, 0x3e, + 0x04, 0x3d, 0x04, 0x35, 0x04, 0x34, 0x04, 0x35, + 0x04, 0x3b, 0x04, 0x4c, 0x04, 0x3d, 0x04, 0x38, + 0x04, 0x3a, 0x04, 0x0f, 0x32, 0x04, 0x42, 0x04, + 0x3e, 0x04, 0x40, 0x04, 0x3d, 0x04, 0x38, 0x04, + 0x3a, 0x04, 0x0b, 0x41, 0x04, 0x40, 0x04, 0x35, + 0x04, 0x34, 0x04, 0x30, 0x04, 0x0f, 0x47, 0x04, + 0x35, 0x04, 0x42, 0x04, 0x32, 0x04, 0x35, 0x04, + 0x40, 0x04, 0x33, 0x04, 0x0f, 0x3f, 0x04, 0x4f, + 0x04, 0x42, 0x04, 0x3d, 0x04, 0x38, 0x04, 0x46, + 0x04, 0x30, 0x04, 0x0f, 0x41, 0x04, 0x43, 0x04, + 0x31, 0x04, 0x31, 0x04, 0x3e, 0x04, 0x42, 0x04, + 0x30, 0x04, 0x08, 0x64, 0x61, 0x79, 0x73, 0x04, + 0x42, 0x45, 0x08, 0x65, 0x72, 0x61, 0x73, 0x05, + 0x14, 0x04, 0x1f, 0x04, 0x04, 0x61, 0x6d, 0x05, + 0x1f, 0x04, 0x1f, 0x04, 0x04, 0x70, 0x6d, 0x14, + 0x64, 0x61, 0x79, 0x50, 0x65, 0x72, 0x69, 0x6f, + 0x64, 0x73, 0x06, 0x4d, 0x30, 0x31, 0x06, 0x4d, + 0x30, 0x32, 0x06, 0x4d, 0x30, 0x33, 0x06, 0x4d, + 0x30, 0x34, 0x06, 0x4d, 0x30, 0x35, 0x06, 0x4d, + 0x30, 0x36, 0x06, 0x4d, 0x30, 0x37, 0x06, 0x4d, + 0x30, 0x38, 0x06, 0x4d, 0x30, 0x39, 0x06, 0x4d, + 0x31, 0x30, 0x06, 0x4d, 0x31, 0x31, 0x06, 0x4d, + 0x31, 0x32, 0x07, 0x22, 0x04, 0x3e, 0x04, 0x42, + 0x04, 0x09, 0x11, 0x04, 0x30, 0x04, 0x31, 0x04, + 0x4d, 0x04, 0x0b, 0x25, 0x04, 0x30, 0x04, 0x42, + 0x04, 0x43, 0x04, 0x40, 0x04, 0x0b, 0x1a, 0x04, + 0x38, 0x04, 0x45, 0x04, 0x30, 0x04, 0x3a, 0x04, + 0x09, 0x22, 0x04, 0x43, 0x04, 0x31, 0x04, 0x4d, + 0x04, 0x0b, 0x10, 0x04, 0x3c, 0x04, 0x48, 0x04, + 0x38, 0x04, 0x40, 0x04, 0x11, 0x11, 0x04, 0x30, + 0x04, 0x40, 0x04, 0x30, 0x04, 0x3c, 0x04, 0x45, + 0x04, 0x30, 0x04, 0x42, 0x04, 0x0f, 0x11, 0x04, + 0x30, 0x04, 0x40, 0x04, 0x3c, 0x04, 0x43, 0x04, + 0x34, 0x04, 0x30, 0x04, 0x0d, 0x11, 0x04, 0x30, + 0x04, 0x48, 0x04, 0x3d, 0x04, 0x30, 0x04, 0x41, + 0x04, 0x0b, 0x11, 0x04, 0x30, 0x04, 0x43, 0x04, + 0x3d, 0x04, 0x30, 0x04, 0x09, 0x10, 0x04, 0x31, + 0x04, 0x38, 0x04, 0x31, 0x04, 0x0b, 0x1c, 0x04, + 0x38, 0x04, 0x41, 0x04, 0x40, 0x04, 0x30, 0x04, + 0x09, 0x1d, 0x04, 0x30, 0x04, 0x41, 0x04, 0x38, + 0x04, 0x08, 0x45, 0x52, 0x41, 0x30, 0x08, 0x45, + 0x52, 0x41, 0x31, 0x11, 0x1c, 0x04, 0x35, 0x04, + 0x41, 0x04, 0x3a, 0x04, 0x35, 0x04, 0x40, 0x04, + 0x35, 0x04, 0x3c, 0x04, 0x0d, 0x22, 0x04, 0x35, + 0x04, 0x3a, 0x04, 0x35, 0x04, 0x3c, 0x04, 0x42, + 0x04, 0x0b, 0x25, 0x04, 0x35, 0x04, 0x34, 0x04, + 0x30, 0x04, 0x40, 0x04, 0x0d, 0x22, 0x04, 0x30, + 0x04, 0x45, 0x04, 0x41, 0x04, 0x30, 0x04, 0x41, + 0x04, 0x07, 0x22, 0x04, 0x35, 0x04, 0x40, 0x04, + 0x0d, 0x2f, 0x04, 0x3a, 0x04, 0x30, 0x04, 0x42, + 0x04, 0x38, 0x04, 0x42, 0x04, 0x0f, 0x1c, 0x04, + 0x30, 0x04, 0x33, 0x04, 0x30, 0x04, 0x31, 0x04, + 0x38, 0x04, 0x42, 0x04, 0x0d, 0x1c, 0x04, 0x38, + 0x04, 0x30, 0x04, 0x37, 0x04, 0x38, 0x04, 0x4f, + 0x04, 0x0d, 0x13, 0x04, 0x35, 0x04, 0x3d, 0x04, + 0x31, 0x04, 0x3e, 0x04, 0x42, 0x04, 0x09, 0x21, + 0x04, 0x4d, 0x04, 0x3d, 0x04, 0x4d, 0x04, 0x0b, + 0x25, 0x04, 0x30, 0x04, 0x3c, 0x04, 0x3b, 0x04, + 0x4d, 0x04, 0x0d, 0x1d, 0x04, 0x30, 0x04, 0x45, + 0x04, 0x30, 0x04, 0x41, 0x04, 0x4d, 0x04, 0x11, + 0x2d, 0x04, 0x3f, 0x04, 0x30, 0x04, 0x33, 0x04, + 0x3e, 0x04, 0x3c, 0x04, 0x35, 0x04, 0x3d, 0x04, + 0x0f, 0x34, 0x04, 0x3e, 0x04, 0x20, 0x00, 0x3d, + 0x04, 0x2e, 0x00, 0x4d, 0x04, 0x2e, 0x00, 0x09, + 0x3d, 0x04, 0x2e, 0x00, 0x4d, 0x04, 0x2e, 0x00, + 0x06, 0x42, 0x43, 0x45, 0x04, 0x43, 0x45, 0x11, + 0x34, 0x04, 0x3e, 0x04, 0x20, 0x00, 0x3d, 0x04, + 0x2e, 0x00, 0x20, 0x00, 0x4d, 0x04, 0x2e, 0x00, + 0x0b, 0x3d, 0x04, 0x2e, 0x00, 0x20, 0x00, 0x4d, + 0x04, 0x2e, 0x00, 0x2b, 0x34, 0x04, 0x3e, 0x04, + 0x20, 0x00, 0x20, 0x04, 0x3e, 0x04, 0x36, 0x04, + 0x34, 0x04, 0x35, 0x04, 0x41, 0x04, 0x42, 0x04, + 0x32, 0x04, 0x30, 0x04, 0x20, 0x00, 0x25, 0x04, + 0x40, 0x04, 0x38, 0x04, 0x41, 0x04, 0x42, 0x04, + 0x3e, 0x04, 0x32, 0x04, 0x30, 0x04, 0x2b, 0x3e, + 0x04, 0x42, 0x04, 0x20, 0x00, 0x20, 0x04, 0x3e, + 0x04, 0x36, 0x04, 0x34, 0x04, 0x35, 0x04, 0x41, + 0x04, 0x42, 0x04, 0x32, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x25, 0x04, 0x40, 0x04, 0x38, 0x04, 0x41, + 0x04, 0x42, 0x04, 0x3e, 0x04, 0x32, 0x04, 0x30, + 0x04, 0x19, 0x34, 0x04, 0x3e, 0x04, 0x20, 0x00, + 0x3d, 0x04, 0x30, 0x04, 0x48, 0x04, 0x35, 0x04, + 0x39, 0x04, 0x20, 0x00, 0x4d, 0x04, 0x40, 0x04, + 0x4b, 0x04, 0x13, 0x3d, 0x04, 0x30, 0x04, 0x48, + 0x04, 0x35, 0x04, 0x39, 0x04, 0x20, 0x00, 0x4d, + 0x04, 0x40, 0x04, 0x4b, 0x04, 0x0d, 0x22, 0x04, + 0x38, 0x04, 0x48, 0x04, 0x40, 0x04, 0x35, 0x04, + 0x39, 0x04, 0x0d, 0x25, 0x04, 0x35, 0x04, 0x48, + 0x04, 0x32, 0x04, 0x30, 0x04, 0x3d, 0x04, 0x0d, + 0x1a, 0x04, 0x38, 0x04, 0x41, 0x04, 0x3b, 0x04, + 0x35, 0x04, 0x32, 0x04, 0x0b, 0x22, 0x04, 0x35, + 0x04, 0x32, 0x04, 0x35, 0x04, 0x42, 0x04, 0x0b, + 0x28, 0x04, 0x35, 0x04, 0x32, 0x04, 0x30, 0x04, + 0x42, 0x04, 0x0d, 0x10, 0x04, 0x34, 0x04, 0x30, + 0x04, 0x40, 0x04, 0x20, 0x00, 0x49, 0x00, 0x09, + 0x10, 0x04, 0x34, 0x04, 0x30, 0x04, 0x40, 0x04, + 0x0b, 0x1d, 0x04, 0x38, 0x04, 0x41, 0x04, 0x30, + 0x04, 0x3d, 0x04, 0x07, 0x18, 0x04, 0x4f, 0x04, + 0x40, 0x04, 0x0b, 0x21, 0x04, 0x38, 0x04, 0x32, + 0x04, 0x30, 0x04, 0x3d, 0x04, 0x0d, 0x22, 0x04, + 0x30, 0x04, 0x3c, 0x04, 0x3c, 0x04, 0x43, 0x04, + 0x37, 0x04, 0x05, 0x10, 0x04, 0x32, 0x04, 0x09, + 0x2d, 0x04, 0x3b, 0x04, 0x43, 0x04, 0x3b, 0x04, + 0x0f, 0x10, 0x04, 0x34, 0x04, 0x30, 0x04, 0x40, + 0x04, 0x20, 0x00, 0x49, 0x00, 0x49, 0x00, 0x04, + 0x41, 0x4d, 0x0d, 0x27, 0x04, 0x30, 0x04, 0x39, + 0x04, 0x42, 0x04, 0x40, 0x04, 0x30, 0x04, 0x11, + 0x12, 0x04, 0x30, 0x04, 0x38, 0x04, 0x41, 0x04, + 0x30, 0x04, 0x3a, 0x04, 0x45, 0x04, 0x30, 0x04, + 0x11, 0x14, 0x04, 0x36, 0x04, 0x30, 0x04, 0x3d, + 0x04, 0x48, 0x04, 0x42, 0x04, 0x45, 0x04, 0x30, + 0x04, 0x0d, 0x10, 0x04, 0x41, 0x04, 0x30, 0x04, + 0x34, 0x04, 0x45, 0x04, 0x30, 0x04, 0x0f, 0x21, + 0x04, 0x40, 0x04, 0x30, 0x04, 0x32, 0x04, 0x30, + 0x04, 0x3d, 0x04, 0x30, 0x04, 0x0d, 0x11, 0x04, + 0x45, 0x04, 0x30, 0x04, 0x34, 0x04, 0x40, 0x04, + 0x30, 0x04, 0x0d, 0x10, 0x04, 0x37, 0x04, 0x32, + 0x04, 0x38, 0x04, 0x3d, 0x04, 0x30, 0x04, 0x0f, + 0x1a, 0x04, 0x30, 0x04, 0x40, 0x04, 0x42, 0x04, + 0x38, 0x04, 0x3a, 0x04, 0x30, 0x04, 0x15, 0x10, + 0x04, 0x33, 0x04, 0x40, 0x04, 0x30, 0x04, 0x45, + 0x04, 0x30, 0x04, 0x39, 0x04, 0x30, 0x04, 0x3d, + 0x04, 0x30, 0x04, 0x0b, 0x1f, 0x04, 0x30, 0x04, + 0x43, 0x04, 0x37, 0x04, 0x30, 0x04, 0x0b, 0x1c, + 0x04, 0x30, 0x04, 0x33, 0x04, 0x45, 0x04, 0x30, + 0x04, 0x11, 0x1f, 0x04, 0x45, 0x04, 0x30, 0x04, + 0x3b, 0x04, 0x33, 0x04, 0x43, 0x04, 0x3d, 0x04, + 0x30, 0x04, 0x08, 0x53, 0x61, 0x6b, 0x61, 0x11, + 0x1c, 0x04, 0x43, 0x04, 0x45, 0x04, 0x30, 0x04, + 0x40, 0x04, 0x40, 0x04, 0x30, 0x04, 0x3c, 0x04, + 0x0b, 0x21, 0x04, 0x30, 0x04, 0x44, 0x04, 0x30, + 0x04, 0x40, 0x04, 0x1f, 0x20, 0x04, 0x30, 0x04, + 0x31, 0x04, 0x38, 0x04, 0x2d, 0x00, 0x43, 0x04, + 0x3b, 0x04, 0x4c, 0x04, 0x2d, 0x00, 0x30, 0x04, + 0x32, 0x04, 0x32, 0x04, 0x30, 0x04, 0x3b, 0x04, + 0x4c, 0x04, 0x1b, 0x20, 0x04, 0x30, 0x04, 0x31, + 0x04, 0x38, 0x04, 0x2d, 0x00, 0x43, 0x04, 0x3b, + 0x04, 0x4c, 0x04, 0x2d, 0x00, 0x30, 0x04, 0x45, + 0x04, 0x38, 0x04, 0x40, 0x04, 0x23, 0x14, 0x04, + 0x36, 0x04, 0x43, 0x04, 0x3c, 0x04, 0x30, 0x04, + 0x34, 0x04, 0x2d, 0x00, 0x43, 0x04, 0x3b, 0x04, + 0x4c, 0x04, 0x2d, 0x00, 0x30, 0x04, 0x32, 0x04, + 0x32, 0x04, 0x30, 0x04, 0x3b, 0x04, 0x4c, 0x04, + 0x1f, 0x14, 0x04, 0x36, 0x04, 0x43, 0x04, 0x3c, + 0x04, 0x30, 0x04, 0x34, 0x04, 0x2d, 0x00, 0x43, + 0x04, 0x3b, 0x04, 0x4c, 0x04, 0x2d, 0x00, 0x30, + 0x04, 0x45, 0x04, 0x38, 0x04, 0x40, 0x04, 0x0d, + 0x20, 0x04, 0x30, 0x04, 0x34, 0x04, 0x36, 0x04, + 0x30, 0x04, 0x31, 0x04, 0x0d, 0x28, 0x04, 0x30, + 0x04, 0x30, 0x04, 0x31, 0x04, 0x30, 0x04, 0x3d, + 0x04, 0x0f, 0x20, 0x04, 0x30, 0x04, 0x3c, 0x04, + 0x30, 0x04, 0x34, 0x04, 0x30, 0x04, 0x3d, 0x04, + 0x0f, 0x28, 0x04, 0x30, 0x04, 0x32, 0x04, 0x32, + 0x04, 0x30, 0x04, 0x3b, 0x04, 0x4c, 0x04, 0x15, + 0x17, 0x04, 0x43, 0x04, 0x3b, 0x04, 0x4c, 0x04, + 0x2d, 0x00, 0x1a, 0x04, 0x30, 0x04, 0x30, 0x04, + 0x34, 0x04, 0x30, 0x04, 0x17, 0x17, 0x04, 0x43, + 0x04, 0x3b, 0x04, 0x4c, 0x04, 0x2d, 0x00, 0x25, + 0x04, 0x38, 0x04, 0x34, 0x04, 0x36, 0x04, 0x36, + 0x04, 0x30, 0x04, 0x04, 0x41, 0x48, 0x1f, 0x54, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x36, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x36, 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x75, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1f, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x1d, 0x57, 0x00, 0x61, 0x00, 0x64, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x52, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x1d, 0x59, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1f, 0x4a, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, + 0x6b, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x2b, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x2d, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x2d, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x2a, 0x4a, 0x69, 0x6e, 0x67, + 0x6f, 0x2d, 0x6b, 0x65, 0x69, 0x75, 0x6e, 0x20, + 0x28, 0x37, 0x36, 0x37, 0x2d, 0x37, 0x37, 0x30, + 0x29, 0x1d, 0x48, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x1f, 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, 0x64, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x4d, 0x01, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, + 0x4a, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x61, + 0x00, 0x6a, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1f, 0x53, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x20, + 0x54, 0x65, 0x6e, 0x2d, 0x61, 0x6e, 0x20, 0x28, + 0x38, 0x35, 0x37, 0x2d, 0x38, 0x35, 0x39, 0x29, + 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, + 0x47, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1d, 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, + 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x34, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1b, 0x4c, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1d, 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x41, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, 0x4a, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x4a, 0x00, 0x69, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x29, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x27, 0x4a, 0x00, 0x69, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x45, 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4c, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x61, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x25, 0x4a, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x24, 0x54, 0x65, 0x6e, 0x2d, + 0x65, 0x69, 0x20, 0x28, 0x31, 0x31, 0x31, 0x30, + 0x2d, 0x31, 0x31, 0x31, 0x33, 0x29, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x44, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x45, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x6a, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x48, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x27, 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, + 0x4c, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x6d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x4a, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x59, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x75, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x29, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x21, 0x4a, 0x00, 0x4d, 0x01, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x27, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x75, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x29, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x74, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x29, 0x52, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x45, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4c, + 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x61, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x48, + 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x27, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x4c, + 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x45, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x27, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4a, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x27, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x61, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x41, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x4d, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x02, 0x54, 0x02, 0x53, 0x2b, 0x2d, 0x04, + 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, + 0x20, 0x00, 0x22, 0x04, 0x30, 0x04, 0x39, 0x04, + 0x3a, 0x04, 0x30, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x2d, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, + 0x04, 0x30, 0x04, 0x20, 0x00, 0x25, 0x04, 0x30, + 0x04, 0x3a, 0x04, 0x43, 0x04, 0x42, 0x04, 0x38, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x36, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x2d, 0x2d, 0x04, + 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, + 0x20, 0x00, 0x25, 0x04, 0x30, 0x04, 0x3a, 0x04, + 0x43, 0x04, 0x45, 0x04, 0x3e, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x36, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x29, 0x2d, 0x04, 0x3f, 0x04, 0x3e, + 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x21, + 0x04, 0x4e, 0x04, 0x47, 0x04, 0x51, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x36, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x2b, 0x2d, 0x04, 0x3f, 0x04, + 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x22, 0x04, 0x30, 0x04, 0x39, 0x04, 0x45, 0x04, + 0x3e, 0x04, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, 0x2d, + 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, + 0x04, 0x20, 0x00, 0x1a, 0x04, 0x51, 0x04, 0x4e, + 0x04, 0x3d, 0x04, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x29, + 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, + 0x30, 0x04, 0x20, 0x00, 0x12, 0x04, 0x30, 0x04, + 0x34, 0x04, 0x3e, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x2b, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, + 0x04, 0x30, 0x04, 0x20, 0x00, 0x20, 0x04, 0x4d, + 0x04, 0x39, 0x04, 0x3a, 0x04, 0x38, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x27, 0x2d, 0x04, 0x3f, 0x04, + 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x01, 0x04, 0x40, 0x04, 0x3e, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x2d, 0x2d, 0x04, 0x3f, 0x04, 0x3e, + 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x14, + 0x04, 0x37, 0x04, 0x38, 0x04, 0x3d, 0x04, 0x3a, + 0x04, 0x38, 0x04, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, + 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, + 0x30, 0x04, 0x20, 0x00, 0x22, 0x04, 0x35, 0x04, + 0x3c, 0x04, 0x3f, 0x04, 0x4c, 0x04, 0x51, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x37, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x2d, 0x2d, 0x04, 0x3f, + 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x22, 0x04, 0x35, 0x04, 0x3c, 0x04, 0x3f, + 0x04, 0x4c, 0x04, 0x51, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x39, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, + 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x22, 0x04, + 0x35, 0x04, 0x3c, 0x04, 0x3f, 0x04, 0x4c, 0x04, + 0x51, 0x04, 0x2d, 0x00, 0x21, 0x04, 0x4c, 0x04, + 0x3e, 0x04, 0x45, 0x04, 0x3e, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x2d, 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x39, 0x2d, 0x04, 0x3f, 0x04, 0x3e, + 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x22, + 0x04, 0x35, 0x04, 0x3c, 0x04, 0x3f, 0x04, 0x4c, + 0x04, 0x51, 0x04, 0x2d, 0x00, 0x25, 0x04, 0x3e, + 0x04, 0x34, 0x04, 0x37, 0x04, 0x38, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x39, 0x2d, 0x04, 0x3f, 0x04, + 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x22, 0x04, 0x35, 0x04, 0x3c, 0x04, 0x3f, 0x04, + 0x4c, 0x04, 0x51, 0x04, 0x2d, 0x00, 0x25, 0x04, + 0x3e, 0x04, 0x34, 0x04, 0x37, 0x04, 0x38, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x37, 0x2d, 0x04, 0x3f, + 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x14, 0x04, 0x36, 0x04, 0x38, 0x04, 0x3d, + 0x04, 0x33, 0x04, 0x3e, 0x04, 0x2d, 0x00, 0x1a, + 0x04, 0x51, 0x04, 0x4e, 0x04, 0x3d, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x29, 0x2d, 0x04, 0x3f, 0x04, + 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x25, 0x04, 0x3e, 0x04, 0x3a, 0x04, 0x38, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x37, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x2b, 0x2d, 0x04, 0x3f, + 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x22, 0x04, 0x35, 0x04, 0x3d, 0x04, 0x4c, + 0x04, 0x51, 0x04, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, 0x2d, + 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, + 0x30, 0x04, 0x20, 0x00, 0x15, 0x04, 0x3d, 0x04, + 0x40, 0x04, 0x4f, 0x04, 0x3a, 0x04, 0x43, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x38, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x2b, 0x2d, 0x04, 0x3f, + 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x14, 0x04, 0x30, 0x04, 0x39, 0x04, 0x34, + 0x04, 0x3e, 0x04, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, 0x2b, + 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, + 0x30, 0x04, 0x20, 0x00, 0x1a, 0x04, 0x3e, 0x04, + 0x3d, 0x04, 0x38, 0x04, 0x3d, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x2d, 0x2d, 0x04, 0x3f, 0x04, 0x3e, + 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x22, + 0x04, 0x35, 0x04, 0x3d, 0x04, 0x42, 0x04, 0x4c, + 0x04, 0x3e, 0x04, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, + 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, + 0x30, 0x04, 0x20, 0x00, 0x28, 0x04, 0x3e, 0x04, + 0x32, 0x04, 0x30, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x29, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, + 0x04, 0x30, 0x04, 0x20, 0x00, 0x1a, 0x04, 0x30, + 0x04, 0x39, 0x04, 0x3e, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x2d, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, + 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x1d, 0x04, + 0x38, 0x04, 0x3d, 0x04, 0x34, 0x04, 0x37, 0x04, + 0x4e, 0x04, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x2b, 0x2d, + 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, + 0x04, 0x20, 0x00, 0x21, 0x04, 0x30, 0x04, 0x39, + 0x04, 0x3a, 0x04, 0x3e, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x2d, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, + 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x22, 0x04, + 0x35, 0x04, 0x3d, 0x04, 0x3d, 0x04, 0x30, 0x04, + 0x3d, 0x04, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, 0x2b, 0x2d, + 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, + 0x04, 0x20, 0x00, 0x19, 0x04, 0x3e, 0x04, 0x33, + 0x04, 0x30, 0x04, 0x3d, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x2d, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, + 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x13, 0x04, + 0x35, 0x04, 0x3d, 0x04, 0x3a, 0x04, 0x35, 0x04, + 0x39, 0x04, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x2b, 0x2d, + 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, + 0x04, 0x20, 0x00, 0x1d, 0x04, 0x38, 0x04, 0x3d, + 0x04, 0x3d, 0x04, 0x30, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x2d, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, + 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x1a, 0x04, + 0x30, 0x04, 0x3c, 0x04, 0x3f, 0x04, 0x4c, 0x04, + 0x51, 0x04, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x29, 0x00, 0x2d, 0x2d, + 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, + 0x04, 0x20, 0x00, 0x21, 0x04, 0x4c, 0x04, 0x3e, + 0x04, 0x42, 0x04, 0x30, 0x04, 0x39, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x29, 0x2d, 0x04, 0x3f, 0x04, + 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x2d, 0x04, 0x3d, 0x04, 0x33, 0x04, 0x38, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x2b, 0x2d, 0x04, 0x3f, + 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x15, 0x04, 0x3d, 0x04, 0x42, 0x04, 0x4c, + 0x04, 0x3e, 0x04, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x2d, + 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, + 0x30, 0x04, 0x20, 0x00, 0x21, 0x04, 0x4c, 0x04, + 0x51, 0x04, 0x45, 0x04, 0x4d, 0x04, 0x39, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x2d, 0x2d, 0x04, 0x3f, + 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x22, 0x04, 0x35, 0x04, 0x3d, 0x04, 0x33, + 0x04, 0x4c, 0x04, 0x3e, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x31, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, + 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x22, 0x04, + 0x35, 0x04, 0x3d, 0x04, 0x40, 0x04, 0x38, 0x04, + 0x4f, 0x04, 0x3a, 0x04, 0x43, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x2f, 0x2d, 0x04, 0x3f, 0x04, 0x3e, + 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x22, + 0x04, 0x35, 0x04, 0x3d, 0x04, 0x42, 0x04, 0x3e, + 0x04, 0x3a, 0x04, 0x43, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x27, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, + 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x1e, 0x04, + 0x32, 0x04, 0x30, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x29, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, + 0x04, 0x30, 0x04, 0x20, 0x00, 0x1a, 0x04, 0x3e, + 0x04, 0x45, 0x04, 0x3e, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x29, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, + 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x10, 0x04, + 0x3d, 0x04, 0x3d, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x2f, 0x2d, 0x04, 0x3f, 0x04, 0x3e, + 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x22, + 0x04, 0x35, 0x04, 0x3d, 0x04, 0x40, 0x04, 0x3e, + 0x04, 0x3a, 0x04, 0x43, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x2d, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, + 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x22, 0x04, + 0x35, 0x04, 0x3d, 0x04, 0x4c, 0x04, 0x35, 0x04, + 0x3d, 0x04, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x29, 0x00, 0x2f, 0x2d, + 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, + 0x04, 0x20, 0x00, 0x14, 0x04, 0x37, 0x04, 0x4c, + 0x04, 0x3e, 0x04, 0x33, 0x04, 0x35, 0x04, 0x3d, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x2d, 0x2d, 0x04, + 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, + 0x20, 0x00, 0x22, 0x04, 0x35, 0x04, 0x3d, 0x04, + 0x33, 0x04, 0x35, 0x04, 0x3d, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x2b, 0x2d, 0x04, 0x3f, 0x04, 0x3e, + 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x15, + 0x04, 0x39, 0x04, 0x3a, 0x04, 0x30, 0x04, 0x3d, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x2b, 0x2d, 0x04, + 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, + 0x20, 0x00, 0x1a, 0x04, 0x30, 0x04, 0x3d, 0x04, + 0x3d, 0x04, 0x30, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x29, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, + 0x04, 0x30, 0x04, 0x20, 0x00, 0x15, 0x04, 0x39, + 0x04, 0x35, 0x04, 0x3d, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x29, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, + 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x15, 0x04, + 0x39, 0x04, 0x41, 0x04, 0x3e, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x2d, 0x2d, 0x04, 0x3f, 0x04, 0x3e, + 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x21, + 0x04, 0x51, 0x04, 0x40, 0x04, 0x4f, 0x04, 0x3a, + 0x04, 0x43, 0x04, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x39, 0x00, 0x35, 0x00, 0x29, 0x00, 0x2d, + 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, + 0x30, 0x04, 0x20, 0x00, 0x22, 0x04, 0x51, 0x04, + 0x42, 0x04, 0x3e, 0x04, 0x3a, 0x04, 0x43, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x2b, 0x2d, 0x04, 0x3f, + 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x22, 0x04, 0x51, 0x04, 0x45, 0x04, 0x3e, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x2f, + 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, + 0x30, 0x04, 0x20, 0x00, 0x1a, 0x04, 0x30, 0x04, + 0x3d, 0x04, 0x3a, 0x04, 0x3e, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, 0x2d, 0x2d, + 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, + 0x04, 0x20, 0x00, 0x22, 0x04, 0x51, 0x04, 0x32, + 0x04, 0x30, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x31, 0x2d, 0x04, 0x3f, 0x04, + 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x1a, 0x04, 0x30, 0x04, 0x3d, 0x04, 0x3d, 0x04, + 0x38, 0x04, 0x3d, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x2f, 0x2d, 0x04, 0x3f, + 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x14, 0x04, 0x37, 0x04, 0x38, 0x04, 0x30, + 0x04, 0x3d, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x31, 0x2d, 0x04, 0x3f, 0x04, + 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x1c, 0x04, 0x30, 0x04, 0x3d, 0x04, 0x34, 0x04, + 0x37, 0x04, 0x4e, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x2f, 0x2d, 0x04, 0x3f, + 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x22, 0x04, 0x51, 0x04, 0x33, 0x04, 0x4d, + 0x04, 0x3d, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x31, 0x2d, 0x04, 0x3f, 0x04, + 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x22, 0x04, 0x51, 0x04, 0x40, 0x04, 0x4f, 0x04, + 0x3a, 0x04, 0x43, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x2d, 0x2d, 0x04, 0x3f, + 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x22, 0x04, 0x51, 0x04, 0x3a, 0x04, 0x4e, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x31, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, + 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x1a, 0x04, + 0x30, 0x04, 0x42, 0x04, 0x3e, 0x04, 0x3a, 0x04, + 0x43, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x2d, 0x2d, 0x04, 0x3f, 0x04, 0x3e, + 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x2d, + 0x04, 0x39, 0x04, 0x41, 0x04, 0x3e, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x35, 0x00, 0x33, 0x00, 0x29, 0x00, 0x2f, + 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, + 0x30, 0x04, 0x20, 0x00, 0x22, 0x04, 0x4d, 0x04, + 0x3d, 0x04, 0x33, 0x04, 0x38, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x2f, 0x2d, + 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, + 0x04, 0x20, 0x00, 0x1a, 0x04, 0x3e, 0x04, 0x45, + 0x04, 0x4d, 0x04, 0x39, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x33, 0x2d, 0x04, + 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, + 0x20, 0x00, 0x14, 0x04, 0x37, 0x04, 0x38, 0x04, + 0x40, 0x04, 0x4f, 0x04, 0x3a, 0x04, 0x43, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x2d, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, + 0x04, 0x30, 0x04, 0x20, 0x00, 0x2d, 0x04, 0x3d, + 0x04, 0x3a, 0x04, 0x4e, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x2d, 0x2d, 0x04, + 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, + 0x20, 0x00, 0x21, 0x04, 0x51, 0x04, 0x45, 0x04, + 0x3e, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x31, 0x2d, 0x04, 0x3f, 0x04, 0x3e, + 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x21, + 0x04, 0x51, 0x04, 0x40, 0x04, 0x4f, 0x04, 0x3a, + 0x04, 0x43, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x2d, 0x2d, 0x04, 0x3f, 0x04, + 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x2d, 0x04, 0x39, 0x04, 0x45, 0x04, 0x3e, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x2f, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, + 0x04, 0x30, 0x04, 0x20, 0x00, 0x1e, 0x04, 0x42, + 0x04, 0x3e, 0x04, 0x3a, 0x04, 0x43, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x31, + 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, + 0x30, 0x04, 0x20, 0x00, 0x1a, 0x04, 0x30, 0x04, + 0x3d, 0x04, 0x34, 0x04, 0x37, 0x04, 0x38, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x2d, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, + 0x04, 0x30, 0x04, 0x20, 0x00, 0x1a, 0x04, 0x30, + 0x04, 0x45, 0x04, 0x3e, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x2d, 0x2d, 0x04, + 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, + 0x20, 0x00, 0x2d, 0x04, 0x39, 0x04, 0x42, 0x04, + 0x51, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x31, 0x2d, 0x04, 0x3f, 0x04, 0x3e, + 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x21, + 0x04, 0x51, 0x04, 0x42, 0x04, 0x3e, 0x04, 0x3a, + 0x04, 0x43, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x2d, 0x2d, 0x04, 0x3f, 0x04, + 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x1a, 0x04, 0x3e, 0x04, 0x32, 0x04, 0x30, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x2f, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, + 0x04, 0x30, 0x04, 0x20, 0x00, 0x22, 0x04, 0x51, + 0x04, 0x34, 0x04, 0x37, 0x04, 0x38, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x2d, + 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, + 0x30, 0x04, 0x20, 0x00, 0x1a, 0x04, 0x30, 0x04, + 0x41, 0x04, 0x51, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x31, 0x2d, 0x04, 0x3f, + 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x22, 0x04, 0x4d, 0x04, 0x3d, 0x04, 0x3d, + 0x04, 0x38, 0x04, 0x3d, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x31, 0x2d, 0x04, + 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, + 0x20, 0x00, 0x22, 0x04, 0x4d, 0x04, 0x3d, 0x04, + 0x4a, 0x04, 0x4d, 0x04, 0x39, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x29, 0x00, 0x2d, 0x2d, + 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, + 0x04, 0x20, 0x00, 0x2d, 0x04, 0x39, 0x04, 0x3a, + 0x04, 0x4e, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x31, 0x2d, 0x04, 0x3f, 0x04, + 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x13, 0x04, 0x4d, 0x04, 0x3d, 0x04, 0x4a, 0x04, + 0x4d, 0x04, 0x39, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x2d, 0x2d, 0x04, 0x3f, + 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x25, 0x04, 0x3e, 0x04, 0x30, 0x04, 0x3d, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x31, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, + 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x22, 0x04, + 0x4d, 0x04, 0x3d, 0x04, 0x34, 0x04, 0x37, 0x04, + 0x38, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x31, 0x2d, 0x04, 0x3f, 0x04, 0x3e, + 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x14, + 0x04, 0x30, 0x04, 0x39, 0x04, 0x34, 0x04, 0x37, + 0x04, 0x38, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x2f, 0x2d, 0x04, 0x3f, 0x04, + 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x22, 0x04, 0x4d, 0x04, 0x3d, 0x04, 0x41, 0x04, + 0x51, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x2d, 0x2d, 0x04, 0x3f, 0x04, 0x3e, + 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x22, + 0x04, 0x51, 0x04, 0x41, 0x04, 0x51, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, 0x2d, + 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, + 0x30, 0x04, 0x20, 0x00, 0x25, 0x04, 0x3e, 0x04, + 0x4d, 0x04, 0x3d, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x2f, 0x2d, 0x04, 0x3f, + 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x2d, 0x04, 0x39, 0x04, 0x34, 0x04, 0x37, + 0x04, 0x38, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x2f, 0x2d, 0x04, 0x3f, 0x04, + 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x1a, 0x04, 0x3e, 0x04, 0x34, 0x04, 0x37, 0x04, + 0x38, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x2d, 0x2d, 0x04, 0x3f, 0x04, 0x3e, + 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x22, + 0x04, 0x4d, 0x04, 0x3d, 0x04, 0x51, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x29, 0x00, 0x2d, + 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, + 0x30, 0x04, 0x20, 0x00, 0x1a, 0x04, 0x4e, 0x04, + 0x30, 0x04, 0x3d, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x31, 0x2d, 0x04, 0x3f, + 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x1d, 0x04, 0x38, 0x04, 0x3c, 0x04, 0x3f, + 0x04, 0x4d, 0x04, 0x39, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x2f, 0x2d, 0x04, + 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, + 0x20, 0x00, 0x1a, 0x04, 0x4e, 0x04, 0x34, 0x04, + 0x37, 0x04, 0x4e, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x2f, 0x2d, 0x04, 0x3f, + 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x25, 0x04, 0x3e, 0x04, 0x33, 0x04, 0x4d, + 0x04, 0x3d, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x31, 0x2d, 0x04, 0x3f, 0x04, + 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x25, 0x04, 0x4d, 0x04, 0x39, 0x04, 0x34, 0x04, + 0x37, 0x04, 0x38, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x31, 0x2d, 0x04, 0x3f, + 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x2d, 0x04, 0x39, 0x04, 0x40, 0x04, 0x4f, + 0x04, 0x3a, 0x04, 0x43, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x2b, 0x2d, 0x04, + 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, + 0x20, 0x00, 0x1e, 0x04, 0x45, 0x04, 0x3e, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x2f, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, + 0x04, 0x30, 0x04, 0x20, 0x00, 0x22, 0x04, 0x51, + 0x04, 0x3a, 0x04, 0x30, 0x04, 0x3d, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x2f, + 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, + 0x30, 0x04, 0x20, 0x00, 0x2d, 0x04, 0x39, 0x04, + 0x3c, 0x04, 0x30, 0x04, 0x3d, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, 0x31, 0x2d, + 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, + 0x04, 0x20, 0x00, 0x1d, 0x04, 0x38, 0x04, 0x3d, + 0x04, 0x4a, 0x04, 0x30, 0x04, 0x3d, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x2b, + 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, + 0x30, 0x04, 0x20, 0x00, 0x1a, 0x04, 0x30, 0x04, + 0x3e, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x2d, 0x2d, 0x04, 0x3f, 0x04, 0x3e, + 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x21, + 0x04, 0x51, 0x04, 0x30, 0x04, 0x3d, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x2f, + 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, + 0x30, 0x04, 0x20, 0x00, 0x10, 0x04, 0x3d, 0x04, + 0x33, 0x04, 0x4d, 0x04, 0x3d, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x2f, 0x2d, + 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, + 0x04, 0x20, 0x00, 0x14, 0x04, 0x37, 0x04, 0x38, + 0x04, 0x41, 0x04, 0x51, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x2b, 0x2d, 0x04, + 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, + 0x20, 0x00, 0x01, 0x04, 0x32, 0x04, 0x30, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x2f, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, + 0x04, 0x30, 0x04, 0x20, 0x00, 0x14, 0x04, 0x37, + 0x04, 0x4e, 0x04, 0x4d, 0x04, 0x39, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x33, + 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, + 0x30, 0x04, 0x20, 0x00, 0x13, 0x04, 0x4d, 0x04, + 0x3d, 0x04, 0x40, 0x04, 0x4e, 0x04, 0x3a, 0x04, + 0x43, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x31, 0x2d, 0x04, 0x3f, 0x04, 0x3e, + 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x11, + 0x04, 0x43, 0x04, 0x3d, 0x04, 0x34, 0x04, 0x37, + 0x04, 0x38, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x2f, 0x2d, 0x04, 0x3f, 0x04, + 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x1a, 0x04, 0x4d, 0x04, 0x3d, 0x04, 0x3a, 0x04, + 0x4e, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x2f, 0x2d, 0x04, 0x3f, 0x04, 0x3e, + 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x21, + 0x04, 0x51, 0x04, 0x34, 0x04, 0x37, 0x04, 0x38, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x31, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, + 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x1a, 0x04, + 0x4d, 0x04, 0x3d, 0x04, 0x3d, 0x04, 0x38, 0x04, + 0x3d, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x2f, 0x2d, 0x04, 0x3f, 0x04, 0x3e, + 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x13, + 0x04, 0x4d, 0x04, 0x3d, 0x04, 0x3a, 0x04, 0x4e, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x31, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, + 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x1a, 0x04, + 0x4d, 0x04, 0x3d, 0x04, 0x4a, 0x04, 0x4d, 0x04, + 0x39, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x2f, 0x2d, 0x04, 0x3f, 0x04, 0x3e, + 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x21, + 0x04, 0x51, 0x04, 0x33, 0x04, 0x4d, 0x04, 0x3d, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x33, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, + 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x1a, 0x04, + 0x4d, 0x04, 0x3d, 0x04, 0x40, 0x04, 0x4f, 0x04, + 0x3a, 0x04, 0x43, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x2f, 0x2d, 0x04, 0x3f, + 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x1a, 0x04, 0x4d, 0x04, 0x3c, 0x04, 0x3f, + 0x04, 0x3e, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x2d, 0x2d, 0x04, 0x3f, 0x04, + 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x21, 0x04, 0x51, 0x04, 0x3a, 0x04, 0x4e, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x2d, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, + 0x04, 0x30, 0x04, 0x20, 0x00, 0x14, 0x04, 0x37, + 0x04, 0x51, 0x04, 0x3e, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x31, 0x2d, 0x04, + 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, + 0x20, 0x00, 0x13, 0x04, 0x4d, 0x04, 0x3d, 0x04, + 0x3d, 0x04, 0x38, 0x04, 0x3d, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x29, 0x00, 0x31, 0x2d, + 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, + 0x04, 0x20, 0x00, 0x1a, 0x04, 0x30, 0x04, 0x40, + 0x04, 0x3e, 0x04, 0x3a, 0x04, 0x43, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x29, 0x00, 0x2f, + 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, + 0x30, 0x04, 0x20, 0x00, 0x10, 0x04, 0x3d, 0x04, + 0x42, 0x04, 0x4d, 0x04, 0x39, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x2f, 0x2d, + 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, + 0x04, 0x20, 0x00, 0x1a, 0x04, 0x30, 0x04, 0x3d, + 0x04, 0x3a, 0x04, 0x38, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x2f, 0x2d, 0x04, + 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, + 0x20, 0x00, 0x14, 0x04, 0x37, 0x04, 0x51, 0x04, + 0x4d, 0x04, 0x39, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x33, 0x2d, 0x04, 0x3f, + 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x22, 0x04, 0x4d, 0x04, 0x3c, 0x04, 0x3f, + 0x04, 0x43, 0x04, 0x3a, 0x04, 0x43, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x33, + 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, + 0x30, 0x04, 0x20, 0x00, 0x11, 0x04, 0x43, 0x04, + 0x3d, 0x04, 0x40, 0x04, 0x4f, 0x04, 0x3a, 0x04, + 0x43, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x2f, 0x2d, 0x04, 0x3f, 0x04, 0x3e, + 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x1a, + 0x04, 0x30, 0x04, 0x42, 0x04, 0x4d, 0x04, 0x39, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x33, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, + 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x20, 0x04, + 0x4f, 0x04, 0x3a, 0x04, 0x43, 0x04, 0x3d, 0x04, + 0x38, 0x04, 0x3d, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x2d, 0x2d, 0x04, 0x3f, + 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x2d, 0x04, 0x3d, 0x04, 0x4a, 0x04, 0x3e, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x31, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, + 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x1d, 0x04, + 0x38, 0x04, 0x3d, 0x04, 0x34, 0x04, 0x37, 0x04, + 0x38, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x31, 0x2d, 0x04, 0x3f, 0x04, 0x3e, + 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x1a, + 0x04, 0x30, 0x04, 0x3d, 0x04, 0x33, 0x04, 0x4d, + 0x04, 0x3d, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x2f, 0x2d, 0x04, 0x3f, 0x04, + 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x25, 0x04, 0x3e, 0x04, 0x34, 0x04, 0x37, 0x04, + 0x38, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x2f, 0x2d, 0x04, 0x3f, 0x04, 0x3e, + 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x1a, + 0x04, 0x4d, 0x04, 0x3d, 0x04, 0x42, 0x04, 0x51, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x2f, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, + 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x1a, 0x04, + 0x3e, 0x04, 0x33, 0x04, 0x4d, 0x04, 0x3d, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x2d, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, + 0x04, 0x30, 0x04, 0x20, 0x00, 0x21, 0x04, 0x51, + 0x04, 0x3a, 0x04, 0x30, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x2f, 0x2d, 0x04, + 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, + 0x20, 0x00, 0x21, 0x04, 0x51, 0x04, 0x33, 0x04, + 0x4d, 0x04, 0x3d, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x2f, 0x2d, 0x04, 0x3f, + 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x11, 0x04, 0x43, 0x04, 0x3d, 0x04, 0x4a, + 0x04, 0x3e, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x2d, 0x2d, 0x04, 0x3f, 0x04, + 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x1a, 0x04, 0x3e, 0x04, 0x42, 0x04, 0x51, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x31, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, + 0x04, 0x30, 0x04, 0x20, 0x00, 0x11, 0x04, 0x43, + 0x04, 0x3d, 0x04, 0x4a, 0x04, 0x4d, 0x04, 0x39, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x31, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, + 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x1a, 0x04, + 0x4d, 0x04, 0x3d, 0x04, 0x34, 0x04, 0x37, 0x04, + 0x38, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x2d, 0x2d, 0x04, 0x3f, 0x04, 0x3e, + 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x1a, + 0x04, 0x3e, 0x04, 0x30, 0x04, 0x3d, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, 0x2b, + 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, + 0x30, 0x04, 0x20, 0x00, 0x21, 0x04, 0x51, 0x04, + 0x3e, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x2f, 0x2d, 0x04, 0x3f, 0x04, 0x3e, + 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x2d, + 0x04, 0x39, 0x04, 0x3d, 0x04, 0x38, 0x04, 0x3d, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x2d, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, + 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x21, 0x04, + 0x51, 0x04, 0x30, 0x04, 0x3d, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x29, 0x00, 0x31, 0x2d, + 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, + 0x04, 0x20, 0x00, 0x1a, 0x04, 0x4d, 0x04, 0x3d, + 0x04, 0x33, 0x04, 0x4d, 0x04, 0x3d, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x33, 0x00, 0x29, 0x00, 0x2f, + 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, + 0x30, 0x04, 0x20, 0x00, 0x1a, 0x04, 0x30, 0x04, + 0x33, 0x04, 0x4d, 0x04, 0x3d, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x33, 0x2d, + 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, + 0x04, 0x20, 0x00, 0x22, 0x04, 0x3e, 0x04, 0x3a, + 0x04, 0x43, 0x04, 0x34, 0x04, 0x37, 0x04, 0x38, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x2f, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, + 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x2d, 0x04, + 0x3d, 0x04, 0x3a, 0x04, 0x4d, 0x04, 0x39, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x2b, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, + 0x04, 0x30, 0x04, 0x20, 0x00, 0x1e, 0x04, 0x42, + 0x04, 0x51, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x2d, 0x2d, 0x04, 0x3f, 0x04, + 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x21, 0x04, 0x51, 0x04, 0x32, 0x04, 0x30, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x2f, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, + 0x04, 0x30, 0x04, 0x20, 0x00, 0x11, 0x04, 0x43, + 0x04, 0x3c, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, + 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, + 0x30, 0x04, 0x20, 0x00, 0x13, 0x04, 0x4d, 0x04, + 0x3d, 0x04, 0x3e, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x2f, 0x2d, 0x04, 0x3f, + 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x13, 0x04, 0x4d, 0x04, 0x3d, 0x04, 0x3a, + 0x04, 0x51, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x2d, 0x2d, 0x04, 0x3f, 0x04, + 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x21, 0x04, 0x51, 0x04, 0x42, 0x04, 0x4e, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x31, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, + 0x04, 0x30, 0x04, 0x20, 0x00, 0x1a, 0x04, 0x30, + 0x04, 0x40, 0x04, 0x4d, 0x04, 0x3a, 0x04, 0x38, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x33, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, + 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x13, 0x04, + 0x4d, 0x04, 0x3d, 0x04, 0x42, 0x04, 0x3e, 0x04, + 0x3a, 0x04, 0x43, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x2f, 0x2d, 0x04, 0x3f, + 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x13, 0x04, 0x4d, 0x04, 0x3d, 0x04, 0x3a, + 0x04, 0x3e, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x2f, 0x2d, 0x04, 0x3f, 0x04, + 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x1a, 0x04, 0x4d, 0x04, 0x3c, 0x04, 0x3c, 0x04, + 0x43, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x2f, 0x2d, 0x04, 0x3f, 0x04, 0x3e, + 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x2d, + 0x04, 0x3d, 0x04, 0x33, 0x04, 0x4d, 0x04, 0x3d, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x31, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, + 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x1a, 0x04, + 0x3e, 0x04, 0x3a, 0x04, 0x3e, 0x04, 0x3a, 0x04, + 0x43, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x2f, 0x2d, 0x04, 0x3f, 0x04, 0x3e, + 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x21, + 0x04, 0x51, 0x04, 0x45, 0x04, 0x4d, 0x04, 0x39, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x33, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, + 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x1a, 0x04, + 0x4d, 0x04, 0x3d, 0x04, 0x42, 0x04, 0x3e, 0x04, + 0x3a, 0x04, 0x43, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x2f, 0x2d, 0x04, 0x3f, + 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x11, 0x04, 0x43, 0x04, 0x3d, 0x04, 0x42, + 0x04, 0x4e, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x31, 0x2d, 0x04, 0x3f, 0x04, + 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x18, 0x04, 0x4d, 0x04, 0x3d, 0x04, 0x34, 0x04, + 0x37, 0x04, 0x4e, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x31, 0x2d, 0x04, 0x3f, + 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x1a, 0x04, 0x3e, 0x04, 0x40, 0x04, 0x4f, + 0x04, 0x3a, 0x04, 0x43, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x2d, 0x2d, 0x04, + 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, + 0x20, 0x00, 0x1a, 0x04, 0x3e, 0x04, 0x32, 0x04, + 0x30, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x2f, 0x2d, 0x04, 0x3f, 0x04, 0x3e, + 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x13, + 0x04, 0x4d, 0x04, 0x3d, 0x04, 0x42, 0x04, 0x4e, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x33, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, + 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x1c, 0x04, + 0x4d, 0x04, 0x39, 0x04, 0x42, 0x04, 0x3e, 0x04, + 0x3a, 0x04, 0x43, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x2f, 0x2d, 0x04, 0x3f, + 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x1a, 0x04, 0x30, 0x04, 0x3a, 0x04, 0x4d, + 0x04, 0x39, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x2b, 0x2d, 0x04, 0x3f, 0x04, + 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x1a, 0x04, 0x3e, 0x04, 0x3e, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x33, 0x2d, + 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, + 0x04, 0x20, 0x00, 0x1c, 0x04, 0x4d, 0x04, 0x39, + 0x04, 0x42, 0x04, 0x3e, 0x04, 0x3a, 0x04, 0x43, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x2b, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, + 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x1e, 0x04, + 0x4d, 0x04, 0x39, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x2d, 0x2d, 0x04, 0x3f, + 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x21, 0x04, 0x51, 0x04, 0x42, 0x04, 0x51, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x2d, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, + 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x2d, 0x04, + 0x39, 0x04, 0x3a, 0x04, 0x51, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x31, 0x2d, + 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, + 0x04, 0x20, 0x00, 0x1a, 0x04, 0x30, 0x04, 0x3a, + 0x04, 0x38, 0x04, 0x46, 0x04, 0x43, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x31, + 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, + 0x30, 0x04, 0x20, 0x00, 0x11, 0x04, 0x30, 0x04, + 0x3d, 0x04, 0x4a, 0x04, 0x30, 0x04, 0x3d, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x31, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, + 0x04, 0x30, 0x04, 0x20, 0x00, 0x25, 0x04, 0x3e, + 0x04, 0x42, 0x04, 0x3e, 0x04, 0x3a, 0x04, 0x43, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x31, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, + 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x1a, 0x04, + 0x51, 0x04, 0x42, 0x04, 0x3e, 0x04, 0x3a, 0x04, + 0x43, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x2d, 0x2d, 0x04, 0x3f, 0x04, 0x3e, + 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x1a, + 0x04, 0x3e, 0x04, 0x41, 0x04, 0x51, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x31, + 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, + 0x30, 0x04, 0x20, 0x00, 0x22, 0x04, 0x51, 0x04, + 0x40, 0x04, 0x3e, 0x04, 0x3a, 0x04, 0x43, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x2f, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, + 0x04, 0x30, 0x04, 0x20, 0x00, 0x1a, 0x04, 0x30, + 0x04, 0x3d, 0x04, 0x41, 0x04, 0x51, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, 0x2f, + 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, + 0x30, 0x04, 0x20, 0x00, 0x11, 0x04, 0x43, 0x04, + 0x3d, 0x04, 0x41, 0x04, 0x51, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, 0x2d, 0x2d, + 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, + 0x04, 0x20, 0x00, 0x1e, 0x04, 0x3d, 0x04, 0x38, + 0x04, 0x3d, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x31, 0x2d, 0x04, 0x3f, 0x04, + 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x11, 0x04, 0x43, 0x04, 0x3c, 0x04, 0x3c, 0x04, + 0x4d, 0x04, 0x39, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x2d, 0x2d, 0x04, 0x3f, + 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x22, 0x04, 0x51, 0x04, 0x3a, 0x04, 0x51, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x31, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, + 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x2d, 0x04, + 0x3d, 0x04, 0x42, 0x04, 0x3e, 0x04, 0x3a, 0x04, + 0x43, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x2d, 0x2d, 0x04, 0x3f, 0x04, 0x3e, + 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x1c, + 0x04, 0x4d, 0x04, 0x39, 0x04, 0x3e, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x2f, + 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, + 0x30, 0x04, 0x20, 0x00, 0x11, 0x04, 0x43, 0x04, + 0x3d, 0x04, 0x3a, 0x04, 0x38, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x2d, 0x2d, + 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, + 0x04, 0x20, 0x00, 0x2d, 0x04, 0x39, 0x04, 0x41, + 0x04, 0x51, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x2f, 0x2d, 0x04, 0x3f, 0x04, + 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x22, 0x04, 0x30, 0x04, 0x39, 0x04, 0x4d, 0x04, + 0x39, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x31, 0x2d, 0x04, 0x3f, 0x04, 0x3e, + 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x1a, + 0x04, 0x51, 0x04, 0x40, 0x04, 0x3e, 0x04, 0x3a, + 0x04, 0x43, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x31, 0x2d, 0x04, 0x3f, 0x04, + 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x22, 0x04, 0x4d, 0x04, 0x3c, 0x04, 0x3c, 0x04, + 0x3e, 0x04, 0x3d, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x2f, 0x2d, 0x04, 0x3f, + 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x1a, 0x04, 0x3e, 0x04, 0x34, 0x04, 0x37, + 0x04, 0x38, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x31, 0x2d, 0x04, 0x3f, 0x04, + 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x2d, 0x04, 0x39, 0x04, 0x40, 0x04, 0x3e, 0x04, + 0x3a, 0x04, 0x43, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x2f, 0x2d, 0x04, 0x3f, + 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x13, 0x04, 0x4d, 0x04, 0x3d, 0x04, 0x3a, + 0x04, 0x38, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x2f, 0x2d, 0x04, 0x3f, 0x04, + 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x22, 0x04, 0x4d, 0x04, 0x3d, 0x04, 0x41, 0x04, + 0x51, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x33, 0x2d, 0x04, 0x3f, 0x04, 0x3e, + 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x11, + 0x04, 0x43, 0x04, 0x3d, 0x04, 0x40, 0x04, 0x3e, + 0x04, 0x3a, 0x04, 0x43, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x2f, 0x2d, 0x04, + 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, + 0x20, 0x00, 0x1a, 0x04, 0x4d, 0x04, 0x39, 0x04, + 0x42, 0x04, 0x51, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x2f, 0x2d, 0x04, 0x3f, + 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x13, 0x04, 0x4d, 0x04, 0x3d, 0x04, 0x32, + 0x04, 0x30, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x31, 0x2d, 0x04, 0x3f, 0x04, + 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x1a, 0x04, 0x30, 0x04, 0x3d, 0x04, 0x4a, 0x04, + 0x4d, 0x04, 0x39, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x2d, 0x2d, 0x04, 0x3f, + 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x21, 0x04, 0x51, 0x04, 0x45, 0x04, 0x3e, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x2f, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, + 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x1a, 0x04, + 0x4d, 0x04, 0x39, 0x04, 0x30, 0x04, 0x3d, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x29, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, + 0x04, 0x30, 0x04, 0x20, 0x00, 0x21, 0x04, 0x51, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x33, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, + 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x1c, 0x04, + 0x4d, 0x04, 0x39, 0x04, 0x40, 0x04, 0x4f, 0x04, + 0x3a, 0x04, 0x43, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x31, 0x2d, 0x04, 0x3f, + 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x1c, 0x04, 0x30, 0x04, 0x3d, 0x04, 0x34, + 0x04, 0x37, 0x04, 0x38, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x31, 0x2d, 0x04, + 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, + 0x20, 0x00, 0x1a, 0x04, 0x30, 0x04, 0x3c, 0x04, + 0x31, 0x04, 0x43, 0x04, 0x3d, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x2d, 0x2d, + 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, + 0x04, 0x20, 0x00, 0x2d, 0x04, 0x3c, 0x04, 0x3f, + 0x04, 0x3e, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x2f, 0x2d, 0x04, 0x3f, 0x04, + 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x22, 0x04, 0x4d, 0x04, 0x3d, 0x04, 0x32, 0x04, + 0x30, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x2f, 0x2d, 0x04, 0x3f, 0x04, 0x3e, + 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x14, + 0x04, 0x37, 0x04, 0x51, 0x04, 0x3a, 0x04, 0x51, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x33, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, + 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x13, 0x04, + 0x4d, 0x04, 0x3d, 0x04, 0x40, 0x04, 0x3e, 0x04, + 0x3a, 0x04, 0x43, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x2d, 0x2d, 0x04, 0x3f, + 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x25, 0x04, 0x3e, 0x04, 0x4d, 0x04, 0x39, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x31, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, + 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x21, 0x04, + 0x51, 0x04, 0x42, 0x04, 0x3e, 0x04, 0x3a, 0x04, + 0x43, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x2d, 0x2d, 0x04, 0x3f, 0x04, 0x3e, + 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x1a, + 0x04, 0x51, 0x04, 0x45, 0x04, 0x3e, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, 0x31, + 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, + 0x30, 0x04, 0x20, 0x00, 0x13, 0x04, 0x4d, 0x04, + 0x3c, 0x04, 0x31, 0x04, 0x43, 0x04, 0x3d, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x2f, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, + 0x04, 0x30, 0x04, 0x20, 0x00, 0x1a, 0x04, 0x30, + 0x04, 0x3c, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x2d, + 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, + 0x30, 0x04, 0x20, 0x00, 0x2d, 0x04, 0x3d, 0x04, + 0x3a, 0x04, 0x51, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x31, 0x2d, 0x04, 0x3f, + 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x1a, 0x04, 0x30, 0x04, 0x3d, 0x04, 0x4a, + 0x04, 0x4d, 0x04, 0x3d, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x31, 0x2d, 0x04, + 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, + 0x20, 0x00, 0x25, 0x04, 0x3e, 0x04, 0x40, 0x04, + 0x4f, 0x04, 0x3a, 0x04, 0x43, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x2f, 0x2d, + 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, + 0x04, 0x20, 0x00, 0x1c, 0x04, 0x4d, 0x04, 0x39, + 0x04, 0x32, 0x04, 0x30, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x2f, 0x2d, 0x04, + 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, + 0x20, 0x00, 0x10, 0x04, 0x3d, 0x04, 0x4a, 0x04, + 0x4d, 0x04, 0x39, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x31, 0x2d, 0x04, 0x3f, + 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x22, 0x04, 0x4d, 0x04, 0x3c, 0x04, 0x3c, + 0x04, 0x4d, 0x04, 0x39, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x31, 0x2d, 0x04, + 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, + 0x20, 0x00, 0x1a, 0x04, 0x30, 0x04, 0x3d, 0x04, + 0x41, 0x04, 0x4d, 0x04, 0x39, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x2d, 0x2d, + 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, + 0x04, 0x20, 0x00, 0x1a, 0x04, 0x51, 0x04, 0x32, + 0x04, 0x30, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x2f, 0x2d, 0x04, 0x3f, 0x04, + 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x11, 0x04, 0x43, 0x04, 0x3d, 0x04, 0x3a, 0x04, + 0x30, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x31, 0x2d, 0x04, 0x3f, 0x04, 0x3e, + 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x11, + 0x04, 0x43, 0x04, 0x3d, 0x04, 0x41, 0x04, 0x4d, + 0x04, 0x39, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x2f, 0x2d, 0x04, 0x3f, 0x04, + 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x22, 0x04, 0x4d, 0x04, 0x3c, 0x04, 0x3f, 0x04, + 0x3e, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x2d, 0x2d, 0x04, 0x3f, 0x04, 0x3e, + 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x1a, + 0x04, 0x3e, 0x04, 0x3a, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x2d, + 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, + 0x30, 0x04, 0x20, 0x00, 0x1a, 0x04, 0x30, 0x04, + 0x4d, 0x04, 0x39, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x2f, 0x2d, 0x04, 0x3f, + 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x10, 0x04, 0x3d, 0x04, 0x41, 0x04, 0x4d, + 0x04, 0x39, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x31, 0x2d, 0x04, 0x3f, 0x04, + 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x1c, 0x04, 0x30, 0x04, 0x3d, 0x04, 0x4a, 0x04, + 0x4d, 0x04, 0x3d, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x2f, 0x2d, 0x04, 0x3f, + 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x11, 0x04, 0x43, 0x04, 0x3d, 0x04, 0x3a, + 0x04, 0x4e, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x31, 0x2d, 0x04, 0x3f, 0x04, + 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x13, 0x04, 0x35, 0x04, 0x3d, 0x04, 0x34, 0x04, + 0x37, 0x04, 0x38, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x2d, 0x2d, 0x04, 0x3f, + 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x1a, 0x04, 0x35, 0x04, 0x39, 0x04, 0x3e, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x19, 0x2d, 0x04, 0x3f, 0x04, 0x3e, 0x04, + 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x1c, 0x04, + 0x4d, 0x04, 0x39, 0x04, 0x34, 0x04, 0x37, 0x04, + 0x38, 0x04, 0x19, 0x2d, 0x04, 0x3f, 0x04, 0x3e, + 0x04, 0x45, 0x04, 0x30, 0x04, 0x20, 0x00, 0x22, + 0x04, 0x30, 0x04, 0x39, 0x04, 0x41, 0x04, 0x4c, + 0x04, 0x3e, 0x04, 0x0b, 0x21, 0x04, 0x4c, 0x04, + 0x3e, 0x04, 0x32, 0x04, 0x30, 0x04, 0x19, 0x2d, + 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x45, 0x04, 0x30, + 0x04, 0x20, 0x00, 0x25, 0x04, 0x4d, 0x04, 0x39, + 0x04, 0x41, 0x04, 0x4d, 0x04, 0x39, 0x04, 0x13, + 0x24, 0x04, 0x30, 0x04, 0x40, 0x04, 0x32, 0x04, + 0x30, 0x04, 0x40, 0x04, 0x34, 0x04, 0x38, 0x04, + 0x3d, 0x04, 0x15, 0x1e, 0x04, 0x40, 0x04, 0x34, + 0x04, 0x38, 0x04, 0x31, 0x04, 0x35, 0x04, 0x45, + 0x04, 0x35, 0x04, 0x48, 0x04, 0x42, 0x04, 0x0d, + 0x25, 0x04, 0x3e, 0x04, 0x40, 0x04, 0x34, 0x04, + 0x30, 0x04, 0x34, 0x04, 0x07, 0x22, 0x04, 0x38, + 0x04, 0x40, 0x04, 0x0d, 0x1c, 0x04, 0x3e, 0x04, + 0x40, 0x04, 0x34, 0x04, 0x30, 0x04, 0x34, 0x04, + 0x11, 0x28, 0x04, 0x30, 0x04, 0x45, 0x04, 0x40, + 0x04, 0x38, 0x04, 0x32, 0x04, 0x35, 0x04, 0x40, + 0x04, 0x09, 0x1c, 0x04, 0x35, 0x04, 0x45, 0x04, + 0x40, 0x04, 0x09, 0x10, 0x04, 0x31, 0x04, 0x30, + 0x04, 0x3d, 0x04, 0x09, 0x10, 0x04, 0x37, 0x04, + 0x35, 0x04, 0x40, 0x04, 0x07, 0x14, 0x04, 0x35, + 0x04, 0x39, 0x04, 0x0d, 0x11, 0x04, 0x30, 0x04, + 0x45, 0x04, 0x3c, 0x04, 0x30, 0x04, 0x3d, 0x04, + 0x0d, 0x2d, 0x04, 0x41, 0x04, 0x44, 0x04, 0x30, + 0x04, 0x3d, 0x04, 0x34, 0x04, 0x04, 0x41, 0x50, + 0x1a, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, + 0x52, 0x2e, 0x4f, 0x2e, 0x43, 0x2e, 0x0c, 0x4d, + 0x69, 0x6e, 0x67, 0x75, 0x6f, 0x12, 0x63, 0x61, + 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, 0x73, 0x08, + 0x64, 0x61, 0x74, 0x65, 0x08, 0x6c, 0x61, 0x74, + 0x6e, 0x04, 0x6e, 0x75, 0x10, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, + 0x74, 0x74, 0x65, 0x72, 0x6e, 0x26, 0x7b, 0x6d, + 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0x1e, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, + 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, + 0x6e, 0x0e, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, + 0x6c, 0x26, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0xa0, 0x7b, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x63, 0x79, 0x7d, 0x3c, 0x7b, 0x6d, + 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0xa0, 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x63, 0x79, 0x7d, 0x10, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x63, 0x79, 0x2c, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0xa0, 0x7b, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x42, 0x7b, 0x6d, 0x69, + 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0xa0, 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, + 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x0e, 0x70, + 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x10, 0x70, + 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x02, + 0x2c, 0x02, 0xa0, 0x0a, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x11, 0x3d, 0x04, 0x35, 0x04, 0xa0, 0x00, + 0x47, 0x04, 0x38, 0x04, 0x41, 0x04, 0x3b, 0x04, + 0x3e, 0x04, 0x06, 0x6e, 0x61, 0x6e, 0x02, 0x2b, + 0x10, 0x70, 0x6c, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x02, 0x2d, 0x12, 0x6d, 0x69, 0x6e, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, 0x25, 0x16, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, + 0x69, 0x67, 0x6e, 0x03, 0x1e, 0x22, 0x10, 0x69, + 0x6e, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x0e, + 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x04, + 0x41, 0x24, 0x06, 0x41, 0x55, 0x44, 0x04, 0x52, + 0x24, 0x06, 0x42, 0x52, 0x4c, 0x06, 0x43, 0x41, + 0x24, 0x06, 0x43, 0x41, 0x44, 0x06, 0x43, 0x4e, + 0xa5, 0x06, 0x43, 0x4e, 0x59, 0x03, 0xac, 0x20, + 0x06, 0x45, 0x55, 0x52, 0x02, 0xa3, 0x06, 0x47, + 0x42, 0x50, 0x06, 0x48, 0x4b, 0x24, 0x06, 0x48, + 0x4b, 0x44, 0x03, 0xaa, 0x20, 0x06, 0x49, 0x4c, + 0x53, 0x03, 0xb9, 0x20, 0x06, 0x49, 0x4e, 0x52, + 0x02, 0xa5, 0x06, 0x4a, 0x50, 0x59, 0x03, 0xa9, + 0x20, 0x06, 0x4b, 0x52, 0x57, 0x06, 0x4d, 0x58, + 0x24, 0x06, 0x4d, 0x58, 0x4e, 0x06, 0x4e, 0x5a, + 0x24, 0x06, 0x4e, 0x5a, 0x44, 0x03, 0xbd, 0x20, + 0x06, 0x52, 0x55, 0x42, 0x05, 0x40, 0x04, 0x2e, + 0x00, 0x06, 0x52, 0x55, 0x52, 0x03, 0x3f, 0x0e, + 0x06, 0x54, 0x48, 0x42, 0x07, 0x22, 0x04, 0x1c, + 0x04, 0x22, 0x04, 0x06, 0x54, 0x4d, 0x54, 0x06, + 0x4e, 0x54, 0x24, 0x06, 0x54, 0x57, 0x44, 0x03, + 0xb4, 0x20, 0x06, 0x55, 0x41, 0x48, 0x02, 0x24, + 0x06, 0x55, 0x53, 0x44, 0x03, 0xab, 0x20, 0x06, + 0x56, 0x4e, 0x44, 0x08, 0x46, 0x43, 0x46, 0x41, + 0x06, 0x58, 0x41, 0x46, 0x06, 0x45, 0x43, 0x24, + 0x06, 0x58, 0x43, 0x44, 0x06, 0x43, 0x46, 0x41, + 0x06, 0x58, 0x4f, 0x46, 0x08, 0x43, 0x46, 0x50, + 0x46, 0x06, 0x58, 0x50, 0x46, 0x08, 0x58, 0x58, + 0x58, 0x58, 0x06, 0x58, 0x58, 0x58, 0x14, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, + 0x73, 0x52, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, + 0x6e, 0x74, 0x6c, 0x2f, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, + 0x6a, 0x73, 0x6f, 0x6e, 0x70, 0x2f, 0x72, 0x75, + 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, + 0x01, 0x00, 0x01, 0x00, 0x27, 0x00, 0xa1, 0x01, + 0xdc, 0x6a, 0x01, 0xa0, 0x01, 0x00, 0x00, 0x00, + 0x39, 0xd0, 0x00, 0x00, 0x00, 0x43, 0xd1, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd2, 0x00, 0x00, 0x00, + 0x4d, 0xd3, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd4, + 0x00, 0x00, 0x00, 0x04, 0xd5, 0x00, 0x00, 0x00, + 0x04, 0xd6, 0x00, 0x00, 0x00, 0x04, 0xd7, 0x00, + 0x00, 0x00, 0x04, 0xd8, 0x00, 0x00, 0x00, 0x04, + 0xd9, 0x00, 0x00, 0x00, 0x04, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xdb, 0x00, 0x00, 0x00, 0x04, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, + 0x04, 0xde, 0x00, 0x00, 0x00, 0x04, 0xdf, 0x00, + 0x00, 0x00, 0x04, 0xe0, 0x00, 0x00, 0x00, 0x04, + 0xe1, 0x00, 0x00, 0x00, 0x04, 0xe2, 0x00, 0x00, + 0x00, 0x26, 0x0f, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x00, 0x0a, 0x4d, 0xe4, 0x00, 0x00, 0x00, 0x09, + 0x4d, 0xe5, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, + 0x00, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe8, 0x00, + 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, + 0xe9, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0xed, + 0x00, 0x00, 0x00, 0x04, 0xee, 0x00, 0x00, 0x00, + 0x4d, 0xef, 0x00, 0x00, 0x00, 0x04, 0xf0, 0x00, + 0x00, 0x00, 0x4d, 0xf1, 0x00, 0x00, 0x00, 0x04, + 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xf3, 0x00, 0x00, + 0x00, 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xf5, + 0x00, 0x00, 0x00, 0x04, 0xf6, 0x00, 0x00, 0x00, + 0x4d, 0xf7, 0x00, 0x00, 0x00, 0x04, 0xf8, 0x00, + 0x00, 0x00, 0x4d, 0xf9, 0x00, 0x00, 0x00, 0x04, + 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xfb, 0x00, 0x00, + 0x00, 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xfd, + 0x00, 0x00, 0x00, 0x04, 0xfe, 0x00, 0x00, 0x00, + 0x4d, 0xff, 0x00, 0x00, 0x00, 0x04, 0x00, 0x01, + 0x00, 0x00, 0x4d, 0x01, 0x01, 0x00, 0x00, 0x04, + 0x02, 0x01, 0x00, 0x00, 0x4d, 0x02, 0x01, 0x00, + 0x00, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0x04, + 0x01, 0x00, 0x00, 0x04, 0x05, 0x01, 0x00, 0x00, + 0x4d, 0x06, 0x01, 0x00, 0x00, 0x04, 0x07, 0x01, + 0x00, 0x00, 0x4d, 0x08, 0x01, 0x00, 0x00, 0x04, + 0x09, 0x01, 0x00, 0x00, 0x4d, 0x0a, 0x01, 0x00, + 0x00, 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, 0x0c, + 0x01, 0x00, 0x00, 0x04, 0x0d, 0x01, 0x00, 0x00, + 0x4d, 0x0e, 0x01, 0x00, 0x00, 0x04, 0x0f, 0x01, + 0x00, 0x00, 0x4d, 0x10, 0x01, 0x00, 0x00, 0x04, + 0x11, 0x01, 0x00, 0x00, 0x4d, 0x12, 0x01, 0x00, + 0x00, 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, 0x14, + 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x4d, 0x16, 0x01, 0x00, 0x00, 0x04, 0x17, 0x01, + 0x00, 0x00, 0x4d, 0x18, 0x01, 0x00, 0x00, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x4d, 0x19, 0x01, 0x00, + 0x00, 0x04, 0x1a, 0x01, 0x00, 0x00, 0x4d, 0x1b, + 0x01, 0x00, 0x00, 0x04, 0x1c, 0x01, 0x00, 0x00, + 0x4d, 0x1d, 0x01, 0x00, 0x00, 0x04, 0x1e, 0x01, + 0x00, 0x00, 0x4d, 0x1f, 0x01, 0x00, 0x00, 0x04, + 0x20, 0x01, 0x00, 0x00, 0x4d, 0x21, 0x01, 0x00, + 0x00, 0x04, 0x22, 0x01, 0x00, 0x00, 0x4d, 0x23, + 0x01, 0x00, 0x00, 0x04, 0x24, 0x01, 0x00, 0x00, + 0x4d, 0x24, 0x01, 0x00, 0x00, 0x04, 0x25, 0x01, + 0x00, 0x00, 0x4d, 0x26, 0x01, 0x00, 0x00, 0x04, + 0x27, 0x01, 0x00, 0x00, 0x4d, 0x28, 0x01, 0x00, + 0x00, 0x04, 0x29, 0x01, 0x00, 0x00, 0x4d, 0x2a, + 0x01, 0x00, 0x00, 0x04, 0x25, 0x01, 0x00, 0x00, + 0x4d, 0x2b, 0x01, 0x00, 0x00, 0x04, 0x2c, 0x01, + 0x00, 0x00, 0x4d, 0x2d, 0x01, 0x00, 0x00, 0x04, + 0x2e, 0x01, 0x00, 0x00, 0x4d, 0x2f, 0x01, 0x00, + 0x00, 0x04, 0x30, 0x01, 0x00, 0x00, 0x4d, 0x31, + 0x01, 0x00, 0x00, 0x04, 0x32, 0x01, 0x00, 0x00, + 0x4d, 0x33, 0x01, 0x00, 0x00, 0x04, 0x34, 0x01, + 0x00, 0x00, 0x4d, 0x35, 0x01, 0x00, 0x00, 0x04, + 0x36, 0x01, 0x00, 0x00, 0x4d, 0x37, 0x01, 0x00, + 0x00, 0x4d, 0x38, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x39, 0x01, 0x00, 0x00, 0x4d, 0x3a, 0x01, 0x00, + 0x00, 0x04, 0x3b, 0x01, 0x00, 0x00, 0x4d, 0x3c, + 0x01, 0x00, 0x00, 0x04, 0x2e, 0x01, 0x00, 0x00, + 0x4d, 0x2f, 0x01, 0x00, 0x00, 0x04, 0x3d, 0x01, + 0x00, 0x00, 0x4d, 0x28, 0x01, 0x00, 0x00, 0x4d, + 0x3e, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x3f, 0x01, + 0x00, 0x00, 0x4d, 0x40, 0x01, 0x00, 0x00, 0x04, + 0x41, 0x01, 0x00, 0x00, 0x4d, 0x42, 0x01, 0x00, + 0x00, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0x08, + 0x01, 0x00, 0x00, 0x04, 0x05, 0x01, 0x00, 0x00, + 0x4d, 0x04, 0x01, 0x00, 0x00, 0x4d, 0x43, 0x01, + 0x00, 0x00, 0x4d, 0x44, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x0b, 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x66, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x4d, + 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, + 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x00, 0xbe, 0x01, 0xbe, 0x02, 0xbe, 0x03, + 0xbe, 0x04, 0xbe, 0x05, 0xbe, 0x06, 0xbe, 0x07, + 0xbe, 0x08, 0xbe, 0x09, 0xbe, 0x0a, 0xbe, 0x0b, + 0x26, 0x0c, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, + 0xbe, 0x0c, 0xbe, 0x0d, 0xbe, 0x0e, 0xbe, 0x0f, + 0xbe, 0x10, 0xbe, 0x11, 0xbe, 0x12, 0xbe, 0x13, + 0xbe, 0x14, 0xbe, 0x15, 0xbe, 0x16, 0xbe, 0x17, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, + 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, + 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, + 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, + 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, + 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, + 0x88, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x66, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, + 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x18, 0xbe, 0x19, 0xbe, 0x1a, 0xbe, + 0x1b, 0xbe, 0x1c, 0xbe, 0x1d, 0xbe, 0x1e, 0xbe, + 0x1f, 0xbe, 0x20, 0xbe, 0x21, 0xbe, 0x22, 0xbe, + 0x23, 0xbe, 0x24, 0x26, 0x0d, 0x00, 0x4d, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, + 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, + 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, + 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, + 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, + 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, + 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, + 0x95, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, + 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, + 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, + 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, + 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, + 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, + 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, + 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, + 0x04, 0x95, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x66, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, + 0x97, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, + 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x96, + 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, + 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x4d, + 0xd7, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x25, + 0xbe, 0x26, 0xbe, 0x27, 0xbe, 0x28, 0xbe, 0x29, + 0xbe, 0x2a, 0xbe, 0x2b, 0xbe, 0x2c, 0xbe, 0x2d, + 0xbe, 0x2e, 0xbe, 0x2f, 0xbe, 0x30, 0x26, 0x0c, + 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0xbe, 0x31, + 0xbe, 0x32, 0xbe, 0x33, 0xbe, 0x34, 0xbe, 0x35, + 0xbe, 0x36, 0xbe, 0x37, 0xbe, 0x38, 0xbe, 0x39, + 0xbe, 0x3a, 0xbe, 0x3b, 0xbe, 0x3c, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, + 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, + 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, + 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, + 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x66, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, + 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x3d, 0xbe, 0x3e, 0xbe, 0x3f, 0xbe, 0x40, 0xbe, + 0x41, 0xbe, 0x42, 0xbe, 0x43, 0xbe, 0x44, 0xbe, + 0x45, 0xbe, 0x46, 0xbe, 0x47, 0xbe, 0x48, 0xbe, + 0x49, 0x26, 0x0d, 0x00, 0x4d, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, + 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, + 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, + 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, + 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, + 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, + 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, + 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, + 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, + 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, + 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, + 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, + 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, + 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, + 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x66, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, + 0x97, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, + 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x77, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, + 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x4a, 0xbe, 0x4b, + 0xbe, 0x4c, 0xbe, 0x4d, 0xbe, 0x4e, 0xbe, 0x4f, + 0xbe, 0x50, 0xbe, 0x51, 0xbe, 0x52, 0xbe, 0x53, + 0xbe, 0x54, 0xbe, 0x55, 0xbe, 0x56, 0x26, 0x0d, + 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x98, + 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, + 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, + 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, + 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, + 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, + 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, + 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, + 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, + 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, + 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, + 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, + 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, + 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, + 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, + 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x66, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x75, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x96, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x96, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x78, 0x01, 0x00, 0x00, 0x4d, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, + 0x01, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x57, 0xbe, 0x58, 0xbe, 0x59, + 0xbe, 0x5a, 0xbe, 0x5b, 0xbe, 0x5c, 0xbe, 0x5d, + 0xbe, 0x5e, 0xbe, 0x5f, 0xbe, 0x60, 0xbe, 0x61, + 0xbe, 0x62, 0x26, 0x0c, 0x00, 0x4d, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, + 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, + 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, + 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, + 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, + 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, + 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, + 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x66, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, + 0x04, 0x97, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x77, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x4d, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x4d, + 0x7c, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x45, 0x01, 0x00, 0x00, + 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x66, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x75, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xa5, 0x01, 0x00, + 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, + 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, + 0x26, 0x04, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, + 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, + 0xa8, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, + 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, + 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, + 0x26, 0x04, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, + 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x63, + 0xbe, 0x64, 0xbe, 0x65, 0xbe, 0x66, 0xbe, 0x67, + 0xbe, 0x68, 0xbe, 0x69, 0xbe, 0x6a, 0xbe, 0x6b, + 0xbe, 0x6c, 0xbe, 0x6d, 0xbe, 0x6e, 0xbe, 0x6f, + 0xbe, 0x70, 0x26, 0x0e, 0x00, 0x4d, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, + 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, + 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, 0xb3, + 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, 0x00, + 0x04, 0xb5, 0x01, 0x00, 0x00, 0x04, 0xb6, 0x01, + 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, + 0xb8, 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, + 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, 0x04, 0xbb, + 0x01, 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, + 0x26, 0x0e, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, + 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, 0x04, + 0xb2, 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, + 0x00, 0x04, 0xb4, 0x01, 0x00, 0x00, 0x04, 0xb5, + 0x01, 0x00, 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, + 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, + 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, 0x04, + 0xba, 0x01, 0x00, 0x00, 0x04, 0xbb, 0x01, 0x00, + 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, 0x26, 0x0e, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x66, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xbd, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0xbd, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xbd, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x4d, + 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x71, 0xbe, 0x72, 0xbe, 0x73, 0xbe, 0x74, + 0xbe, 0x75, 0xbe, 0x76, 0xbe, 0x77, 0xbe, 0x78, + 0xbe, 0x79, 0xbe, 0x7a, 0xbe, 0x7b, 0xbe, 0x7c, + 0x26, 0x0c, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, + 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, 0x04, + 0xc1, 0x01, 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, + 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, 0x04, 0xc4, + 0x01, 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, + 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, + 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, + 0xc9, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, + 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, 0x04, 0xc0, + 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, + 0x04, 0xc2, 0x01, 0x00, 0x00, 0x04, 0xc3, 0x01, + 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, 0x04, + 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, + 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, + 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x66, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x75, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xca, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xca, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x78, 0x01, 0x00, 0x00, 0x4d, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, + 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x7d, 0xbe, 0x7e, 0xbe, 0x7f, + 0xbe, 0x80, 0xbe, 0x81, 0xbe, 0x82, 0xbe, 0x83, + 0xbe, 0x84, 0xbe, 0x85, 0xbe, 0x86, 0xbe, 0x87, + 0xbe, 0x88, 0x26, 0x0c, 0x00, 0x4d, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, 0x04, + 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, + 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, 0x04, 0xcf, + 0x01, 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, + 0x04, 0xd1, 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, + 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, + 0xd4, 0x01, 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, + 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xcb, + 0x01, 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, + 0x04, 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, + 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, + 0xd0, 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, + 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, + 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, + 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x66, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xd7, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x77, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, + 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x89, 0xbe, 0x8a, + 0xbe, 0x8b, 0xbe, 0x8c, 0xbe, 0x8d, 0xbe, 0x8e, + 0xbe, 0x8f, 0xbe, 0x90, 0xbe, 0x91, 0xbe, 0x92, + 0xbe, 0x93, 0xbe, 0x94, 0x26, 0x0c, 0x00, 0x4d, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, + 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, + 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, + 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, 0x01, + 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, 0x04, + 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, + 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, 0xd5, + 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, 0x01, + 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, 0x04, + 0xce, 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, + 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, 0xd1, + 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, + 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, + 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, + 0xd6, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x66, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xd7, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0xd7, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, + 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x45, + 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x66, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, + 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, + 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, + 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, + 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, + 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, + 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, 0xe3, + 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, + 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, + 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, + 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, + 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, + 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, + 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, + 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, + 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, + 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, + 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, + 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, + 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x26, + 0x20, 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x4d, + 0x20, 0x00, 0x00, 0x80, 0x04, 0xf9, 0x01, 0x00, + 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0xfa, + 0x01, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, + 0x04, 0xfb, 0x01, 0x00, 0x00, 0x4d, 0x23, 0x00, + 0x00, 0x80, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x4d, + 0x24, 0x00, 0x00, 0x80, 0x04, 0xfd, 0x01, 0x00, + 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0xfe, + 0x01, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, + 0x04, 0xff, 0x01, 0x00, 0x00, 0x4d, 0x27, 0x00, + 0x00, 0x80, 0x04, 0x00, 0x02, 0x00, 0x00, 0x4d, + 0x28, 0x00, 0x00, 0x80, 0x04, 0x01, 0x02, 0x00, + 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0x02, + 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, + 0x04, 0x03, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, + 0x00, 0x80, 0x04, 0x04, 0x02, 0x00, 0x00, 0x4d, + 0x2c, 0x00, 0x00, 0x80, 0x04, 0x05, 0x02, 0x00, + 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0x06, + 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, + 0x04, 0x07, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, + 0x00, 0x80, 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, + 0x30, 0x00, 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, + 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0x0a, + 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, + 0x04, 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, + 0x00, 0x80, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, + 0x34, 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, + 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0x0e, + 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, + 0x04, 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, + 0x00, 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, + 0x38, 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, + 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0x12, + 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, + 0x04, 0x13, 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, + 0x00, 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, + 0x3c, 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, + 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x16, + 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, + 0x04, 0x17, 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, + 0x00, 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, + 0x40, 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, + 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x1a, + 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, + 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, + 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, + 0x44, 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, + 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x1e, + 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, + 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, + 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, + 0x48, 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, + 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x22, + 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, + 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, + 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, + 0x4c, 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, + 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x26, + 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, + 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, + 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, + 0x50, 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, + 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x2a, + 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, + 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, + 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, + 0x54, 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, + 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x2e, + 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, + 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, + 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, + 0x58, 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, + 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x32, + 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, + 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, + 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, + 0x5c, 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, + 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x36, + 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, + 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, + 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, + 0x60, 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, + 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x3a, + 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, + 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, + 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, + 0x64, 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, + 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x3e, + 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, + 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, + 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, + 0x68, 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, + 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x42, + 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, + 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, + 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, + 0x6c, 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, + 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x46, + 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, + 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, + 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, + 0x70, 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, + 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x4a, + 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, + 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, + 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, + 0x74, 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, + 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x4e, + 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, + 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, + 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, + 0x78, 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, + 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x52, + 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, + 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, + 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, + 0x7c, 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, + 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x56, + 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, + 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, + 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, + 0x80, 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, + 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x5a, + 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, + 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, + 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, + 0x84, 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, + 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x5e, + 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, + 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, + 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, + 0x88, 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, + 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x62, + 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, + 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, + 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, + 0x8c, 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, + 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x66, + 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, + 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, + 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, + 0x90, 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, + 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x6a, + 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, + 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, + 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, + 0x94, 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, + 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x6e, + 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, + 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, + 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, + 0x98, 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, + 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x72, + 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, + 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, + 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, + 0x9c, 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, + 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x76, + 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, + 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, + 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, + 0xa0, 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, + 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x7a, + 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, + 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, + 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, + 0xa4, 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, + 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x7e, + 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, + 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, + 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, + 0xa8, 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, + 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x82, + 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, + 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, + 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, + 0xac, 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, + 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0x86, + 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, + 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, + 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, + 0xb0, 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, + 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0x8a, + 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, + 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, + 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, + 0xb4, 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, + 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0x8e, + 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, + 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, + 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, + 0xb8, 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, + 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0x92, + 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, + 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, + 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, + 0xbc, 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, + 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0x96, + 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, + 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, + 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, + 0xc0, 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, + 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0x9a, + 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, + 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, + 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, + 0xc4, 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, + 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0x9e, + 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, + 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, + 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, + 0xc8, 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, + 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0xa2, + 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, + 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, + 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, + 0xcc, 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, + 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0xa6, + 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, + 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, + 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, + 0xd0, 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, + 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0xaa, + 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, + 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, + 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, + 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0xae, + 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, + 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, + 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0xb2, + 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, + 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xb6, + 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, + 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xba, + 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, + 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, + 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, + 0xe4, 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, + 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0xbe, + 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, + 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x80, 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, + 0xe8, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, + 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0xc1, + 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, + 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x80, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0xc2, 0x02, 0x00, 0x00, 0x04, 0xc3, 0x02, 0x00, + 0x00, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x04, 0xc5, + 0x02, 0x00, 0x00, 0x04, 0xc6, 0x02, 0x00, 0x00, + 0x04, 0xc7, 0x02, 0x00, 0x00, 0x04, 0xc8, 0x02, + 0x00, 0x00, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x04, + 0xca, 0x02, 0x00, 0x00, 0x04, 0xcb, 0x02, 0x00, + 0x00, 0x04, 0xcc, 0x02, 0x00, 0x00, 0x04, 0xcd, + 0x02, 0x00, 0x00, 0x04, 0xce, 0x02, 0x00, 0x00, + 0x04, 0xcf, 0x02, 0x00, 0x00, 0x04, 0xd0, 0x02, + 0x00, 0x00, 0x04, 0xd1, 0x02, 0x00, 0x00, 0x04, + 0xd2, 0x02, 0x00, 0x00, 0x04, 0xd3, 0x02, 0x00, + 0x00, 0x04, 0xd4, 0x02, 0x00, 0x00, 0x04, 0xd5, + 0x02, 0x00, 0x00, 0x04, 0xd6, 0x02, 0x00, 0x00, + 0x04, 0xd7, 0x02, 0x00, 0x00, 0x04, 0xd8, 0x02, + 0x00, 0x00, 0x04, 0xd9, 0x02, 0x00, 0x00, 0x04, + 0xda, 0x02, 0x00, 0x00, 0x04, 0xdb, 0x02, 0x00, + 0x00, 0x04, 0xdc, 0x02, 0x00, 0x00, 0x04, 0xdd, + 0x02, 0x00, 0x00, 0x04, 0xde, 0x02, 0x00, 0x00, + 0x04, 0xdf, 0x02, 0x00, 0x00, 0x04, 0xe0, 0x02, + 0x00, 0x00, 0x04, 0xe1, 0x02, 0x00, 0x00, 0x26, + 0x20, 0x00, 0x04, 0xe2, 0x02, 0x00, 0x00, 0x4d, + 0x20, 0x00, 0x00, 0x80, 0x04, 0xe3, 0x02, 0x00, + 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0xe4, + 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, + 0x04, 0xe5, 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, + 0x00, 0x80, 0x04, 0xe6, 0x02, 0x00, 0x00, 0x4d, + 0x24, 0x00, 0x00, 0x80, 0x04, 0xe7, 0x02, 0x00, + 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0xe8, + 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, + 0x04, 0xe9, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, + 0x00, 0x80, 0x04, 0xea, 0x02, 0x00, 0x00, 0x4d, + 0x28, 0x00, 0x00, 0x80, 0x04, 0xeb, 0x02, 0x00, + 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0xec, + 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, + 0x04, 0xed, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, + 0x00, 0x80, 0x04, 0xee, 0x02, 0x00, 0x00, 0x4d, + 0x2c, 0x00, 0x00, 0x80, 0x04, 0xef, 0x02, 0x00, + 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0xf0, + 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, + 0x04, 0xf1, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, + 0x00, 0x80, 0x04, 0xf2, 0x02, 0x00, 0x00, 0x4d, + 0x30, 0x00, 0x00, 0x80, 0x04, 0xf3, 0x02, 0x00, + 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0xf4, + 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, + 0x04, 0xf5, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, + 0x00, 0x80, 0x04, 0xf6, 0x02, 0x00, 0x00, 0x4d, + 0x34, 0x00, 0x00, 0x80, 0x04, 0xf7, 0x02, 0x00, + 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0xf8, + 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, + 0x04, 0xf9, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, + 0x00, 0x80, 0x04, 0xfa, 0x02, 0x00, 0x00, 0x4d, + 0x38, 0x00, 0x00, 0x80, 0x04, 0xfb, 0x02, 0x00, + 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0xfc, + 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, + 0x04, 0xfd, 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, + 0x00, 0x80, 0x04, 0xfe, 0x02, 0x00, 0x00, 0x4d, + 0x3c, 0x00, 0x00, 0x80, 0x04, 0xff, 0x02, 0x00, + 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x00, + 0x03, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, + 0x04, 0x01, 0x03, 0x00, 0x00, 0x4d, 0x3f, 0x00, + 0x00, 0x80, 0x04, 0x02, 0x03, 0x00, 0x00, 0x4d, + 0x40, 0x00, 0x00, 0x80, 0x04, 0x03, 0x03, 0x00, + 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x04, + 0x03, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, + 0x04, 0x05, 0x03, 0x00, 0x00, 0x4d, 0x43, 0x00, + 0x00, 0x80, 0x04, 0x06, 0x03, 0x00, 0x00, 0x4d, + 0x44, 0x00, 0x00, 0x80, 0x04, 0x07, 0x03, 0x00, + 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x08, + 0x03, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, + 0x04, 0x09, 0x03, 0x00, 0x00, 0x4d, 0x47, 0x00, + 0x00, 0x80, 0x04, 0x0a, 0x03, 0x00, 0x00, 0x4d, + 0x48, 0x00, 0x00, 0x80, 0x04, 0x0b, 0x03, 0x00, + 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x0c, + 0x03, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, + 0x04, 0x0d, 0x03, 0x00, 0x00, 0x4d, 0x4b, 0x00, + 0x00, 0x80, 0x04, 0x0e, 0x03, 0x00, 0x00, 0x4d, + 0x4c, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x03, 0x00, + 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x10, + 0x03, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, + 0x04, 0x11, 0x03, 0x00, 0x00, 0x4d, 0x4f, 0x00, + 0x00, 0x80, 0x04, 0x12, 0x03, 0x00, 0x00, 0x4d, + 0x50, 0x00, 0x00, 0x80, 0x04, 0x13, 0x03, 0x00, + 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x14, + 0x03, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, + 0x04, 0x15, 0x03, 0x00, 0x00, 0x4d, 0x53, 0x00, + 0x00, 0x80, 0x04, 0x16, 0x03, 0x00, 0x00, 0x4d, + 0x54, 0x00, 0x00, 0x80, 0x04, 0x17, 0x03, 0x00, + 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x18, + 0x03, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, + 0x04, 0x19, 0x03, 0x00, 0x00, 0x4d, 0x57, 0x00, + 0x00, 0x80, 0x04, 0x1a, 0x03, 0x00, 0x00, 0x4d, + 0x58, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x03, 0x00, + 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x1c, + 0x03, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, + 0x04, 0x1d, 0x03, 0x00, 0x00, 0x4d, 0x5b, 0x00, + 0x00, 0x80, 0x04, 0x1e, 0x03, 0x00, 0x00, 0x4d, + 0x5c, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x03, 0x00, + 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x20, + 0x03, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, + 0x04, 0x21, 0x03, 0x00, 0x00, 0x4d, 0x5f, 0x00, + 0x00, 0x80, 0x04, 0x22, 0x03, 0x00, 0x00, 0x4d, + 0x60, 0x00, 0x00, 0x80, 0x04, 0x23, 0x03, 0x00, + 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x24, + 0x03, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, + 0x04, 0x25, 0x03, 0x00, 0x00, 0x4d, 0x63, 0x00, + 0x00, 0x80, 0x04, 0x26, 0x03, 0x00, 0x00, 0x4d, + 0x64, 0x00, 0x00, 0x80, 0x04, 0x27, 0x03, 0x00, + 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x28, + 0x03, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, + 0x04, 0x29, 0x03, 0x00, 0x00, 0x4d, 0x67, 0x00, + 0x00, 0x80, 0x04, 0x2a, 0x03, 0x00, 0x00, 0x4d, + 0x68, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x03, 0x00, + 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x2c, + 0x03, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, + 0x04, 0x2d, 0x03, 0x00, 0x00, 0x4d, 0x6b, 0x00, + 0x00, 0x80, 0x04, 0x2e, 0x03, 0x00, 0x00, 0x4d, + 0x6c, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x03, 0x00, + 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x30, + 0x03, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, + 0x04, 0x31, 0x03, 0x00, 0x00, 0x4d, 0x6f, 0x00, + 0x00, 0x80, 0x04, 0x32, 0x03, 0x00, 0x00, 0x4d, + 0x70, 0x00, 0x00, 0x80, 0x04, 0x33, 0x03, 0x00, + 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x34, + 0x03, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, + 0x04, 0x35, 0x03, 0x00, 0x00, 0x4d, 0x73, 0x00, + 0x00, 0x80, 0x04, 0x36, 0x03, 0x00, 0x00, 0x4d, + 0x74, 0x00, 0x00, 0x80, 0x04, 0x37, 0x03, 0x00, + 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x38, + 0x03, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, + 0x04, 0x39, 0x03, 0x00, 0x00, 0x4d, 0x77, 0x00, + 0x00, 0x80, 0x04, 0x3a, 0x03, 0x00, 0x00, 0x4d, + 0x78, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x03, 0x00, + 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x3c, + 0x03, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, + 0x04, 0x3d, 0x03, 0x00, 0x00, 0x4d, 0x7b, 0x00, + 0x00, 0x80, 0x04, 0x3e, 0x03, 0x00, 0x00, 0x4d, + 0x7c, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x03, 0x00, + 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x40, + 0x03, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, + 0x04, 0x41, 0x03, 0x00, 0x00, 0x4d, 0x7f, 0x00, + 0x00, 0x80, 0x04, 0x42, 0x03, 0x00, 0x00, 0x4d, + 0x80, 0x00, 0x00, 0x80, 0x04, 0x43, 0x03, 0x00, + 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x44, + 0x03, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, + 0x04, 0x45, 0x03, 0x00, 0x00, 0x4d, 0x83, 0x00, + 0x00, 0x80, 0x04, 0x46, 0x03, 0x00, 0x00, 0x4d, + 0x84, 0x00, 0x00, 0x80, 0x04, 0x47, 0x03, 0x00, + 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x48, + 0x03, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, + 0x04, 0x49, 0x03, 0x00, 0x00, 0x4d, 0x87, 0x00, + 0x00, 0x80, 0x04, 0x4a, 0x03, 0x00, 0x00, 0x4d, + 0x88, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x03, 0x00, + 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x4c, + 0x03, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, + 0x04, 0x4d, 0x03, 0x00, 0x00, 0x4d, 0x8b, 0x00, + 0x00, 0x80, 0x04, 0x4e, 0x03, 0x00, 0x00, 0x4d, + 0x8c, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x03, 0x00, + 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x50, + 0x03, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, + 0x04, 0x51, 0x03, 0x00, 0x00, 0x4d, 0x8f, 0x00, + 0x00, 0x80, 0x04, 0x52, 0x03, 0x00, 0x00, 0x4d, + 0x90, 0x00, 0x00, 0x80, 0x04, 0x53, 0x03, 0x00, + 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x54, + 0x03, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, + 0x04, 0x55, 0x03, 0x00, 0x00, 0x4d, 0x93, 0x00, + 0x00, 0x80, 0x04, 0x56, 0x03, 0x00, 0x00, 0x4d, + 0x94, 0x00, 0x00, 0x80, 0x04, 0x57, 0x03, 0x00, + 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x58, + 0x03, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, + 0x04, 0x59, 0x03, 0x00, 0x00, 0x4d, 0x97, 0x00, + 0x00, 0x80, 0x04, 0x5a, 0x03, 0x00, 0x00, 0x4d, + 0x98, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x03, 0x00, + 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x5c, + 0x03, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, + 0x04, 0x5d, 0x03, 0x00, 0x00, 0x4d, 0x9b, 0x00, + 0x00, 0x80, 0x04, 0x5e, 0x03, 0x00, 0x00, 0x4d, + 0x9c, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x03, 0x00, + 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x60, + 0x03, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, + 0x04, 0x61, 0x03, 0x00, 0x00, 0x4d, 0x9f, 0x00, + 0x00, 0x80, 0x04, 0x62, 0x03, 0x00, 0x00, 0x4d, + 0xa0, 0x00, 0x00, 0x80, 0x04, 0x63, 0x03, 0x00, + 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x64, + 0x03, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, + 0x04, 0x65, 0x03, 0x00, 0x00, 0x4d, 0xa3, 0x00, + 0x00, 0x80, 0x04, 0x66, 0x03, 0x00, 0x00, 0x4d, + 0xa4, 0x00, 0x00, 0x80, 0x04, 0x67, 0x03, 0x00, + 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x68, + 0x03, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, + 0x04, 0x69, 0x03, 0x00, 0x00, 0x4d, 0xa7, 0x00, + 0x00, 0x80, 0x04, 0x6a, 0x03, 0x00, 0x00, 0x4d, + 0xa8, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x03, 0x00, + 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x6c, + 0x03, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, + 0x04, 0x6d, 0x03, 0x00, 0x00, 0x4d, 0xab, 0x00, + 0x00, 0x80, 0x04, 0x6e, 0x03, 0x00, 0x00, 0x4d, + 0xac, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x03, 0x00, + 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0x70, + 0x03, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, + 0x04, 0x71, 0x03, 0x00, 0x00, 0x4d, 0xaf, 0x00, + 0x00, 0x80, 0x04, 0x72, 0x03, 0x00, 0x00, 0x4d, + 0xb0, 0x00, 0x00, 0x80, 0x04, 0x73, 0x03, 0x00, + 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0x74, + 0x03, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, + 0x04, 0x75, 0x03, 0x00, 0x00, 0x4d, 0xb3, 0x00, + 0x00, 0x80, 0x04, 0x76, 0x03, 0x00, 0x00, 0x4d, + 0xb4, 0x00, 0x00, 0x80, 0x04, 0x77, 0x03, 0x00, + 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0x78, + 0x03, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, + 0x04, 0x79, 0x03, 0x00, 0x00, 0x4d, 0xb7, 0x00, + 0x00, 0x80, 0x04, 0x7a, 0x03, 0x00, 0x00, 0x4d, + 0xb8, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x03, 0x00, + 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0x7c, + 0x03, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, + 0x04, 0x7d, 0x03, 0x00, 0x00, 0x4d, 0xbb, 0x00, + 0x00, 0x80, 0x04, 0x7e, 0x03, 0x00, 0x00, 0x4d, + 0xbc, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x03, 0x00, + 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0x80, + 0x03, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, + 0x04, 0x81, 0x03, 0x00, 0x00, 0x4d, 0xbf, 0x00, + 0x00, 0x80, 0x04, 0x82, 0x03, 0x00, 0x00, 0x4d, + 0xc0, 0x00, 0x00, 0x80, 0x04, 0x83, 0x03, 0x00, + 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0x84, + 0x03, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, + 0x04, 0x85, 0x03, 0x00, 0x00, 0x4d, 0xc3, 0x00, + 0x00, 0x80, 0x04, 0x86, 0x03, 0x00, 0x00, 0x4d, + 0xc4, 0x00, 0x00, 0x80, 0x04, 0x87, 0x03, 0x00, + 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0x88, + 0x03, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, + 0x04, 0x89, 0x03, 0x00, 0x00, 0x4d, 0xc7, 0x00, + 0x00, 0x80, 0x04, 0x8a, 0x03, 0x00, 0x00, 0x4d, + 0xc8, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x03, 0x00, + 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0x8c, + 0x03, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, + 0x04, 0x8d, 0x03, 0x00, 0x00, 0x4d, 0xcb, 0x00, + 0x00, 0x80, 0x04, 0x8e, 0x03, 0x00, 0x00, 0x4d, + 0xcc, 0x00, 0x00, 0x80, 0x04, 0x8f, 0x03, 0x00, + 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0x90, + 0x03, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, + 0x04, 0x91, 0x03, 0x00, 0x00, 0x4d, 0xcf, 0x00, + 0x00, 0x80, 0x04, 0x92, 0x03, 0x00, 0x00, 0x4d, + 0xd0, 0x00, 0x00, 0x80, 0x04, 0x93, 0x03, 0x00, + 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0x94, + 0x03, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, + 0x04, 0x95, 0x03, 0x00, 0x00, 0x4d, 0xd3, 0x00, + 0x00, 0x80, 0x04, 0x96, 0x03, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x80, 0x04, 0x97, 0x03, 0x00, + 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0x98, + 0x03, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, + 0x04, 0x99, 0x03, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x80, 0x04, 0x9a, 0x03, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x03, 0x00, + 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0x9c, + 0x03, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, + 0x04, 0x9d, 0x03, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x80, 0x04, 0x9e, 0x03, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x03, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xa0, + 0x03, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, + 0x04, 0xa1, 0x03, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x80, 0x04, 0xa2, 0x03, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x03, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xa4, + 0x03, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, + 0x04, 0xa5, 0x03, 0x00, 0x00, 0x4d, 0xe3, 0x00, + 0x00, 0x80, 0x04, 0xa6, 0x03, 0x00, 0x00, 0x4d, + 0xe4, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x03, 0x00, + 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0xa8, + 0x03, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, + 0x04, 0xa9, 0x03, 0x00, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x80, 0x04, 0xaa, 0x03, 0x00, 0x00, 0x4d, + 0xe8, 0x00, 0x00, 0x80, 0x04, 0xab, 0x03, 0x00, + 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0xac, + 0x03, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, + 0x04, 0xad, 0x03, 0x00, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x80, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xc2, 0x02, 0x00, 0x00, 0x04, 0xc3, 0x02, 0x00, + 0x00, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x04, 0xc5, + 0x02, 0x00, 0x00, 0x04, 0xc6, 0x02, 0x00, 0x00, + 0x04, 0xc7, 0x02, 0x00, 0x00, 0x04, 0xc8, 0x02, + 0x00, 0x00, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x04, + 0xca, 0x02, 0x00, 0x00, 0x04, 0xcb, 0x02, 0x00, + 0x00, 0x04, 0xcc, 0x02, 0x00, 0x00, 0x04, 0xcd, + 0x02, 0x00, 0x00, 0x04, 0xce, 0x02, 0x00, 0x00, + 0x04, 0xcf, 0x02, 0x00, 0x00, 0x04, 0xd0, 0x02, + 0x00, 0x00, 0x04, 0xd1, 0x02, 0x00, 0x00, 0x04, + 0xd2, 0x02, 0x00, 0x00, 0x04, 0xd3, 0x02, 0x00, + 0x00, 0x04, 0xd4, 0x02, 0x00, 0x00, 0x04, 0xd5, + 0x02, 0x00, 0x00, 0x04, 0xd6, 0x02, 0x00, 0x00, + 0x04, 0xd7, 0x02, 0x00, 0x00, 0x04, 0xd8, 0x02, + 0x00, 0x00, 0x04, 0xd9, 0x02, 0x00, 0x00, 0x04, + 0xda, 0x02, 0x00, 0x00, 0x04, 0xdb, 0x02, 0x00, + 0x00, 0x04, 0xdc, 0x02, 0x00, 0x00, 0x04, 0xdd, + 0x02, 0x00, 0x00, 0x04, 0xde, 0x02, 0x00, 0x00, + 0x04, 0xdf, 0x02, 0x00, 0x00, 0x04, 0xe0, 0x02, + 0x00, 0x00, 0x04, 0xe1, 0x02, 0x00, 0x00, 0x26, + 0x20, 0x00, 0x04, 0xe2, 0x02, 0x00, 0x00, 0x4d, + 0x20, 0x00, 0x00, 0x80, 0x04, 0xe3, 0x02, 0x00, + 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0xe4, + 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, + 0x04, 0xe5, 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, + 0x00, 0x80, 0x04, 0xe6, 0x02, 0x00, 0x00, 0x4d, + 0x24, 0x00, 0x00, 0x80, 0x04, 0xe7, 0x02, 0x00, + 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0xe8, + 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, + 0x04, 0xe9, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, + 0x00, 0x80, 0x04, 0xea, 0x02, 0x00, 0x00, 0x4d, + 0x28, 0x00, 0x00, 0x80, 0x04, 0xeb, 0x02, 0x00, + 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0xec, + 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, + 0x04, 0xed, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, + 0x00, 0x80, 0x04, 0xee, 0x02, 0x00, 0x00, 0x4d, + 0x2c, 0x00, 0x00, 0x80, 0x04, 0xef, 0x02, 0x00, + 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0xf0, + 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, + 0x04, 0xf1, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, + 0x00, 0x80, 0x04, 0xf2, 0x02, 0x00, 0x00, 0x4d, + 0x30, 0x00, 0x00, 0x80, 0x04, 0xf3, 0x02, 0x00, + 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0xf4, + 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, + 0x04, 0xf5, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, + 0x00, 0x80, 0x04, 0xf6, 0x02, 0x00, 0x00, 0x4d, + 0x34, 0x00, 0x00, 0x80, 0x04, 0xf7, 0x02, 0x00, + 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0xf8, + 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, + 0x04, 0xf9, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, + 0x00, 0x80, 0x04, 0xfa, 0x02, 0x00, 0x00, 0x4d, + 0x38, 0x00, 0x00, 0x80, 0x04, 0xfb, 0x02, 0x00, + 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0xfc, + 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, + 0x04, 0xfd, 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, + 0x00, 0x80, 0x04, 0xfe, 0x02, 0x00, 0x00, 0x4d, + 0x3c, 0x00, 0x00, 0x80, 0x04, 0xff, 0x02, 0x00, + 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x00, + 0x03, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, + 0x04, 0x01, 0x03, 0x00, 0x00, 0x4d, 0x3f, 0x00, + 0x00, 0x80, 0x04, 0x02, 0x03, 0x00, 0x00, 0x4d, + 0x40, 0x00, 0x00, 0x80, 0x04, 0x03, 0x03, 0x00, + 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x04, + 0x03, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, + 0x04, 0x05, 0x03, 0x00, 0x00, 0x4d, 0x43, 0x00, + 0x00, 0x80, 0x04, 0x06, 0x03, 0x00, 0x00, 0x4d, + 0x44, 0x00, 0x00, 0x80, 0x04, 0x07, 0x03, 0x00, + 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x08, + 0x03, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, + 0x04, 0x09, 0x03, 0x00, 0x00, 0x4d, 0x47, 0x00, + 0x00, 0x80, 0x04, 0x0a, 0x03, 0x00, 0x00, 0x4d, + 0x48, 0x00, 0x00, 0x80, 0x04, 0x0b, 0x03, 0x00, + 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x0c, + 0x03, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, + 0x04, 0x0d, 0x03, 0x00, 0x00, 0x4d, 0x4b, 0x00, + 0x00, 0x80, 0x04, 0x0e, 0x03, 0x00, 0x00, 0x4d, + 0x4c, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x03, 0x00, + 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x10, + 0x03, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, + 0x04, 0x11, 0x03, 0x00, 0x00, 0x4d, 0x4f, 0x00, + 0x00, 0x80, 0x04, 0x12, 0x03, 0x00, 0x00, 0x4d, + 0x50, 0x00, 0x00, 0x80, 0x04, 0x13, 0x03, 0x00, + 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x14, + 0x03, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, + 0x04, 0x15, 0x03, 0x00, 0x00, 0x4d, 0x53, 0x00, + 0x00, 0x80, 0x04, 0x16, 0x03, 0x00, 0x00, 0x4d, + 0x54, 0x00, 0x00, 0x80, 0x04, 0x17, 0x03, 0x00, + 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x18, + 0x03, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, + 0x04, 0x19, 0x03, 0x00, 0x00, 0x4d, 0x57, 0x00, + 0x00, 0x80, 0x04, 0x1a, 0x03, 0x00, 0x00, 0x4d, + 0x58, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x03, 0x00, + 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x1c, + 0x03, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, + 0x04, 0x1d, 0x03, 0x00, 0x00, 0x4d, 0x5b, 0x00, + 0x00, 0x80, 0x04, 0x1e, 0x03, 0x00, 0x00, 0x4d, + 0x5c, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x03, 0x00, + 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x20, + 0x03, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, + 0x04, 0x21, 0x03, 0x00, 0x00, 0x4d, 0x5f, 0x00, + 0x00, 0x80, 0x04, 0x22, 0x03, 0x00, 0x00, 0x4d, + 0x60, 0x00, 0x00, 0x80, 0x04, 0x23, 0x03, 0x00, + 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x24, + 0x03, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, + 0x04, 0x25, 0x03, 0x00, 0x00, 0x4d, 0x63, 0x00, + 0x00, 0x80, 0x04, 0x26, 0x03, 0x00, 0x00, 0x4d, + 0x64, 0x00, 0x00, 0x80, 0x04, 0x27, 0x03, 0x00, + 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x28, + 0x03, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, + 0x04, 0x29, 0x03, 0x00, 0x00, 0x4d, 0x67, 0x00, + 0x00, 0x80, 0x04, 0x2a, 0x03, 0x00, 0x00, 0x4d, + 0x68, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x03, 0x00, + 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x2c, + 0x03, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, + 0x04, 0x2d, 0x03, 0x00, 0x00, 0x4d, 0x6b, 0x00, + 0x00, 0x80, 0x04, 0x2e, 0x03, 0x00, 0x00, 0x4d, + 0x6c, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x03, 0x00, + 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x30, + 0x03, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, + 0x04, 0x31, 0x03, 0x00, 0x00, 0x4d, 0x6f, 0x00, + 0x00, 0x80, 0x04, 0x32, 0x03, 0x00, 0x00, 0x4d, + 0x70, 0x00, 0x00, 0x80, 0x04, 0x33, 0x03, 0x00, + 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x34, + 0x03, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, + 0x04, 0x35, 0x03, 0x00, 0x00, 0x4d, 0x73, 0x00, + 0x00, 0x80, 0x04, 0x36, 0x03, 0x00, 0x00, 0x4d, + 0x74, 0x00, 0x00, 0x80, 0x04, 0x37, 0x03, 0x00, + 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x38, + 0x03, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, + 0x04, 0x39, 0x03, 0x00, 0x00, 0x4d, 0x77, 0x00, + 0x00, 0x80, 0x04, 0x3a, 0x03, 0x00, 0x00, 0x4d, + 0x78, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x03, 0x00, + 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x3c, + 0x03, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, + 0x04, 0x3d, 0x03, 0x00, 0x00, 0x4d, 0x7b, 0x00, + 0x00, 0x80, 0x04, 0x3e, 0x03, 0x00, 0x00, 0x4d, + 0x7c, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x03, 0x00, + 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x40, + 0x03, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, + 0x04, 0x41, 0x03, 0x00, 0x00, 0x4d, 0x7f, 0x00, + 0x00, 0x80, 0x04, 0x42, 0x03, 0x00, 0x00, 0x4d, + 0x80, 0x00, 0x00, 0x80, 0x04, 0x43, 0x03, 0x00, + 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x44, + 0x03, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, + 0x04, 0x45, 0x03, 0x00, 0x00, 0x4d, 0x83, 0x00, + 0x00, 0x80, 0x04, 0x46, 0x03, 0x00, 0x00, 0x4d, + 0x84, 0x00, 0x00, 0x80, 0x04, 0x47, 0x03, 0x00, + 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x48, + 0x03, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, + 0x04, 0x49, 0x03, 0x00, 0x00, 0x4d, 0x87, 0x00, + 0x00, 0x80, 0x04, 0x4a, 0x03, 0x00, 0x00, 0x4d, + 0x88, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x03, 0x00, + 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x4c, + 0x03, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, + 0x04, 0x4d, 0x03, 0x00, 0x00, 0x4d, 0x8b, 0x00, + 0x00, 0x80, 0x04, 0x4e, 0x03, 0x00, 0x00, 0x4d, + 0x8c, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x03, 0x00, + 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x50, + 0x03, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, + 0x04, 0x51, 0x03, 0x00, 0x00, 0x4d, 0x8f, 0x00, + 0x00, 0x80, 0x04, 0x52, 0x03, 0x00, 0x00, 0x4d, + 0x90, 0x00, 0x00, 0x80, 0x04, 0x53, 0x03, 0x00, + 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x54, + 0x03, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, + 0x04, 0x55, 0x03, 0x00, 0x00, 0x4d, 0x93, 0x00, + 0x00, 0x80, 0x04, 0x56, 0x03, 0x00, 0x00, 0x4d, + 0x94, 0x00, 0x00, 0x80, 0x04, 0x57, 0x03, 0x00, + 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x58, + 0x03, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, + 0x04, 0x59, 0x03, 0x00, 0x00, 0x4d, 0x97, 0x00, + 0x00, 0x80, 0x04, 0x5a, 0x03, 0x00, 0x00, 0x4d, + 0x98, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x03, 0x00, + 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x5c, + 0x03, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, + 0x04, 0x5d, 0x03, 0x00, 0x00, 0x4d, 0x9b, 0x00, + 0x00, 0x80, 0x04, 0x5e, 0x03, 0x00, 0x00, 0x4d, + 0x9c, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x03, 0x00, + 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x60, + 0x03, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, + 0x04, 0x61, 0x03, 0x00, 0x00, 0x4d, 0x9f, 0x00, + 0x00, 0x80, 0x04, 0x62, 0x03, 0x00, 0x00, 0x4d, + 0xa0, 0x00, 0x00, 0x80, 0x04, 0x63, 0x03, 0x00, + 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x64, + 0x03, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, + 0x04, 0x65, 0x03, 0x00, 0x00, 0x4d, 0xa3, 0x00, + 0x00, 0x80, 0x04, 0x66, 0x03, 0x00, 0x00, 0x4d, + 0xa4, 0x00, 0x00, 0x80, 0x04, 0x67, 0x03, 0x00, + 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x68, + 0x03, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, + 0x04, 0x69, 0x03, 0x00, 0x00, 0x4d, 0xa7, 0x00, + 0x00, 0x80, 0x04, 0x6a, 0x03, 0x00, 0x00, 0x4d, + 0xa8, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x03, 0x00, + 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x6c, + 0x03, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, + 0x04, 0x6d, 0x03, 0x00, 0x00, 0x4d, 0xab, 0x00, + 0x00, 0x80, 0x04, 0x6e, 0x03, 0x00, 0x00, 0x4d, + 0xac, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x03, 0x00, + 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0x70, + 0x03, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, + 0x04, 0x71, 0x03, 0x00, 0x00, 0x4d, 0xaf, 0x00, + 0x00, 0x80, 0x04, 0x72, 0x03, 0x00, 0x00, 0x4d, + 0xb0, 0x00, 0x00, 0x80, 0x04, 0x73, 0x03, 0x00, + 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0x74, + 0x03, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, + 0x04, 0x75, 0x03, 0x00, 0x00, 0x4d, 0xb3, 0x00, + 0x00, 0x80, 0x04, 0x76, 0x03, 0x00, 0x00, 0x4d, + 0xb4, 0x00, 0x00, 0x80, 0x04, 0x77, 0x03, 0x00, + 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0x78, + 0x03, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, + 0x04, 0x79, 0x03, 0x00, 0x00, 0x4d, 0xb7, 0x00, + 0x00, 0x80, 0x04, 0x7a, 0x03, 0x00, 0x00, 0x4d, + 0xb8, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x03, 0x00, + 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0x7c, + 0x03, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, + 0x04, 0x7d, 0x03, 0x00, 0x00, 0x4d, 0xbb, 0x00, + 0x00, 0x80, 0x04, 0x7e, 0x03, 0x00, 0x00, 0x4d, + 0xbc, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x03, 0x00, + 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0x80, + 0x03, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, + 0x04, 0x81, 0x03, 0x00, 0x00, 0x4d, 0xbf, 0x00, + 0x00, 0x80, 0x04, 0x82, 0x03, 0x00, 0x00, 0x4d, + 0xc0, 0x00, 0x00, 0x80, 0x04, 0x83, 0x03, 0x00, + 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0x84, + 0x03, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, + 0x04, 0x85, 0x03, 0x00, 0x00, 0x4d, 0xc3, 0x00, + 0x00, 0x80, 0x04, 0x86, 0x03, 0x00, 0x00, 0x4d, + 0xc4, 0x00, 0x00, 0x80, 0x04, 0x87, 0x03, 0x00, + 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0x88, + 0x03, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, + 0x04, 0x89, 0x03, 0x00, 0x00, 0x4d, 0xc7, 0x00, + 0x00, 0x80, 0x04, 0x8a, 0x03, 0x00, 0x00, 0x4d, + 0xc8, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x03, 0x00, + 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0x8c, + 0x03, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, + 0x04, 0x8d, 0x03, 0x00, 0x00, 0x4d, 0xcb, 0x00, + 0x00, 0x80, 0x04, 0x8e, 0x03, 0x00, 0x00, 0x4d, + 0xcc, 0x00, 0x00, 0x80, 0x04, 0x8f, 0x03, 0x00, + 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0x90, + 0x03, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, + 0x04, 0x91, 0x03, 0x00, 0x00, 0x4d, 0xcf, 0x00, + 0x00, 0x80, 0x04, 0x92, 0x03, 0x00, 0x00, 0x4d, + 0xd0, 0x00, 0x00, 0x80, 0x04, 0x93, 0x03, 0x00, + 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0x94, + 0x03, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, + 0x04, 0x95, 0x03, 0x00, 0x00, 0x4d, 0xd3, 0x00, + 0x00, 0x80, 0x04, 0x96, 0x03, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x80, 0x04, 0x97, 0x03, 0x00, + 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0x98, + 0x03, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, + 0x04, 0x99, 0x03, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x80, 0x04, 0x9a, 0x03, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x03, 0x00, + 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0x9c, + 0x03, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, + 0x04, 0x9d, 0x03, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x80, 0x04, 0x9e, 0x03, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x03, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xa0, + 0x03, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, + 0x04, 0xa1, 0x03, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x80, 0x04, 0xa2, 0x03, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x03, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xa4, + 0x03, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, + 0x04, 0xa5, 0x03, 0x00, 0x00, 0x4d, 0xe3, 0x00, + 0x00, 0x80, 0x04, 0xa6, 0x03, 0x00, 0x00, 0x4d, + 0xe4, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x03, 0x00, + 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0xa8, + 0x03, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, + 0x04, 0xa9, 0x03, 0x00, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x80, 0x04, 0xaa, 0x03, 0x00, 0x00, 0x4d, + 0xe8, 0x00, 0x00, 0x80, 0x04, 0xab, 0x03, 0x00, + 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0xac, + 0x03, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, + 0x04, 0xad, 0x03, 0x00, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x80, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, + 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x95, 0xbe, + 0x96, 0xbe, 0x97, 0xbe, 0x98, 0xbe, 0x99, 0xbe, + 0x9a, 0xbe, 0x9b, 0xbe, 0x9c, 0xbe, 0x9d, 0xbe, + 0x9e, 0xbe, 0x9f, 0xbe, 0xa0, 0x26, 0x0c, 0x00, + 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0xae, 0x03, + 0x00, 0x00, 0x04, 0xaf, 0x03, 0x00, 0x00, 0x04, + 0xb0, 0x03, 0x00, 0x00, 0x04, 0xb1, 0x03, 0x00, + 0x00, 0x04, 0xb2, 0x03, 0x00, 0x00, 0x04, 0xb3, + 0x03, 0x00, 0x00, 0x04, 0xb4, 0x03, 0x00, 0x00, + 0x04, 0xb5, 0x03, 0x00, 0x00, 0x04, 0xb6, 0x03, + 0x00, 0x00, 0x04, 0xb7, 0x03, 0x00, 0x00, 0x04, + 0xb8, 0x03, 0x00, 0x00, 0x04, 0xb9, 0x03, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xae, 0x03, 0x00, 0x00, 0x04, 0xaf, + 0x03, 0x00, 0x00, 0x04, 0xb0, 0x03, 0x00, 0x00, + 0x04, 0xb1, 0x03, 0x00, 0x00, 0x04, 0xb2, 0x03, + 0x00, 0x00, 0x04, 0xb3, 0x03, 0x00, 0x00, 0x04, + 0xb4, 0x03, 0x00, 0x00, 0x04, 0xb5, 0x03, 0x00, + 0x00, 0x04, 0xb6, 0x03, 0x00, 0x00, 0x04, 0xb7, + 0x03, 0x00, 0x00, 0x04, 0xb8, 0x03, 0x00, 0x00, + 0x04, 0xb9, 0x03, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x66, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xba, 0x03, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0xba, 0x03, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xba, 0x03, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, + 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x45, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x66, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xbb, 0x03, 0x00, 0x00, 0x04, 0xbc, 0x03, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0xbb, 0x03, 0x00, 0x00, 0x04, + 0xbc, 0x03, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xbb, 0x03, 0x00, + 0x00, 0x04, 0xbc, 0x03, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x77, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, + 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x00, 0x4d, 0xbd, 0x03, 0x00, 0x00, 0x4d, + 0xbe, 0x03, 0x00, 0x00, 0x0b, 0x04, 0xbf, 0x03, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xc0, 0x03, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xc1, 0x03, 0x00, + 0x00, 0x4d, 0xc2, 0x03, 0x00, 0x00, 0x04, 0xc3, + 0x03, 0x00, 0x00, 0x4d, 0xc4, 0x03, 0x00, 0x00, + 0x4d, 0xc5, 0x03, 0x00, 0x00, 0x0b, 0x04, 0xc6, + 0x03, 0x00, 0x00, 0x4d, 0xc2, 0x03, 0x00, 0x00, + 0x04, 0xc7, 0x03, 0x00, 0x00, 0x4d, 0xc4, 0x03, + 0x00, 0x00, 0x4d, 0xc8, 0x03, 0x00, 0x00, 0x0b, + 0x04, 0xc9, 0x03, 0x00, 0x00, 0x4d, 0xc2, 0x03, + 0x00, 0x00, 0x04, 0xca, 0x03, 0x00, 0x00, 0x4d, + 0xc4, 0x03, 0x00, 0x00, 0x4d, 0xcb, 0x03, 0x00, + 0x00, 0x4d, 0xcc, 0x03, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0xcd, 0x03, 0x00, 0x00, 0x4d, 0xc5, 0x03, + 0x00, 0x00, 0x04, 0xce, 0x03, 0x00, 0x00, 0x4d, + 0xcf, 0x03, 0x00, 0x00, 0x04, 0xd0, 0x03, 0x00, + 0x00, 0x4d, 0xd1, 0x03, 0x00, 0x00, 0x04, 0xd2, + 0x03, 0x00, 0x00, 0x4d, 0xd3, 0x03, 0x00, 0x00, + 0x04, 0xd4, 0x03, 0x00, 0x00, 0x4d, 0xd5, 0x03, + 0x00, 0x00, 0x04, 0xd6, 0x03, 0x00, 0x00, 0x4d, + 0xd7, 0x03, 0x00, 0x00, 0x04, 0xd8, 0x03, 0x00, + 0x00, 0x4d, 0xd9, 0x03, 0x00, 0x00, 0x4d, 0xbf, + 0x03, 0x00, 0x00, 0x4d, 0xda, 0x03, 0x00, 0x00, + 0x0b, 0x04, 0xdb, 0x03, 0x00, 0x00, 0x4d, 0xdc, + 0x03, 0x00, 0x00, 0x04, 0xdd, 0x03, 0x00, 0x00, + 0x4d, 0xde, 0x03, 0x00, 0x00, 0x04, 0xdf, 0x03, + 0x00, 0x00, 0x4d, 0xe0, 0x03, 0x00, 0x00, 0x04, + 0xe1, 0x03, 0x00, 0x00, 0x4d, 0xe2, 0x03, 0x00, + 0x00, 0x04, 0xe3, 0x03, 0x00, 0x00, 0x4d, 0xe4, + 0x03, 0x00, 0x00, 0x04, 0xe5, 0x03, 0x00, 0x00, + 0x4d, 0xe6, 0x03, 0x00, 0x00, 0x04, 0xe7, 0x03, + 0x00, 0x00, 0x4d, 0xe8, 0x03, 0x00, 0x00, 0x04, + 0xe9, 0x03, 0x00, 0x00, 0x4d, 0xea, 0x03, 0x00, + 0x00, 0x04, 0xeb, 0x03, 0x00, 0x00, 0x4d, 0xec, + 0x03, 0x00, 0x00, 0x04, 0xed, 0x03, 0x00, 0x00, + 0x4d, 0xee, 0x03, 0x00, 0x00, 0x04, 0xef, 0x03, + 0x00, 0x00, 0x4d, 0xf0, 0x03, 0x00, 0x00, 0x04, + 0xf1, 0x03, 0x00, 0x00, 0x4d, 0xf2, 0x03, 0x00, + 0x00, 0x04, 0xf3, 0x03, 0x00, 0x00, 0x4d, 0xf4, + 0x03, 0x00, 0x00, 0x04, 0xf5, 0x03, 0x00, 0x00, + 0x4d, 0xf6, 0x03, 0x00, 0x00, 0x04, 0xf7, 0x03, + 0x00, 0x00, 0x4d, 0xf8, 0x03, 0x00, 0x00, 0x04, + 0xf9, 0x03, 0x00, 0x00, 0x4d, 0xfa, 0x03, 0x00, + 0x00, 0x04, 0xfb, 0x03, 0x00, 0x00, 0x4d, 0xfc, + 0x03, 0x00, 0x00, 0x04, 0xfd, 0x03, 0x00, 0x00, + 0x4d, 0xfe, 0x03, 0x00, 0x00, 0x04, 0xff, 0x03, + 0x00, 0x00, 0x4d, 0x00, 0x04, 0x00, 0x00, 0x04, + 0x01, 0x04, 0x00, 0x00, 0x4d, 0x02, 0x04, 0x00, + 0x00, 0x04, 0x03, 0x04, 0x00, 0x00, 0x4d, 0x04, + 0x04, 0x00, 0x00, 0x04, 0x05, 0x04, 0x00, 0x00, + 0x4d, 0x06, 0x04, 0x00, 0x00, 0x04, 0x07, 0x04, + 0x00, 0x00, 0x4d, 0x08, 0x04, 0x00, 0x00, 0x04, + 0x09, 0x04, 0x00, 0x00, 0x4d, 0x0a, 0x04, 0x00, + 0x00, 0x04, 0x0b, 0x04, 0x00, 0x00, 0x4d, 0x0c, + 0x04, 0x00, 0x00, 0x04, 0x0d, 0x04, 0x00, 0x00, + 0x4d, 0x0e, 0x04, 0x00, 0x00, 0x4d, 0x0f, 0x04, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x00, 0x24, + 0x01, 0x00, 0xcc, 0x28, 0xa0, 0x10, 0x01, 0x00, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, + 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, + 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_si_size = 25055; + +const uint8_t intl_si[25055] = { + 0x01, 0xda, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x73, 0x69, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x0e, + 0x7b, 0x31, 0x7d, 0x20, 0x7b, 0x30, 0x7d, 0x0a, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, 0x65, + 0x64, 0x69, 0x75, 0x6d, 0x08, 0x66, 0x75, 0x6c, + 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x02, 0x64, + 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, 0x06, 0x64, + 0x20, 0x45, 0x04, 0x45, 0x64, 0x10, 0x45, 0x20, + 0x61, 0x20, 0x68, 0x2e, 0x6d, 0x6d, 0x06, 0x45, + 0x68, 0x6d, 0x0e, 0x45, 0x20, 0x48, 0x48, 0x2e, + 0x6d, 0x6d, 0x06, 0x45, 0x48, 0x6d, 0x16, 0x45, + 0x20, 0x61, 0x20, 0x68, 0x2e, 0x6d, 0x6d, 0x2e, + 0x73, 0x73, 0x08, 0x45, 0x68, 0x6d, 0x73, 0x14, + 0x45, 0x20, 0x48, 0x48, 0x2e, 0x6d, 0x6d, 0x2e, + 0x73, 0x73, 0x08, 0x45, 0x48, 0x6d, 0x73, 0x06, + 0x47, 0x20, 0x79, 0x04, 0x47, 0x79, 0x0e, 0x47, + 0x20, 0x79, 0x20, 0x4d, 0x4d, 0x4d, 0x0a, 0x47, + 0x79, 0x4d, 0x4d, 0x4d, 0x12, 0x47, 0x20, 0x79, + 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x0c, 0x47, + 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x18, 0x47, 0x20, + 0x79, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x2c, + 0x20, 0x45, 0x0e, 0x47, 0x79, 0x4d, 0x4d, 0x4d, + 0x45, 0x64, 0x06, 0x61, 0x20, 0x68, 0x02, 0x68, + 0x04, 0x48, 0x48, 0x02, 0x48, 0x0c, 0x61, 0x20, + 0x68, 0x2e, 0x6d, 0x6d, 0x04, 0x68, 0x6d, 0x0a, + 0x48, 0x48, 0x2e, 0x6d, 0x6d, 0x04, 0x48, 0x6d, + 0x12, 0x61, 0x20, 0x68, 0x2e, 0x6d, 0x6d, 0x2e, + 0x73, 0x73, 0x06, 0x68, 0x6d, 0x73, 0x10, 0x48, + 0x48, 0x2e, 0x6d, 0x6d, 0x2e, 0x73, 0x73, 0x06, + 0x48, 0x6d, 0x73, 0x16, 0x68, 0x2e, 0x6d, 0x6d, + 0x2e, 0x73, 0x73, 0x20, 0x61, 0x20, 0x76, 0x08, + 0x68, 0x6d, 0x73, 0x76, 0x14, 0x48, 0x48, 0x2e, + 0x6d, 0x6d, 0x2e, 0x73, 0x73, 0x20, 0x76, 0x08, + 0x48, 0x6d, 0x73, 0x76, 0x10, 0x68, 0x2e, 0x6d, + 0x6d, 0x20, 0x61, 0x20, 0x76, 0x06, 0x68, 0x6d, + 0x76, 0x0e, 0x48, 0x48, 0x2e, 0x6d, 0x6d, 0x20, + 0x76, 0x06, 0x48, 0x6d, 0x76, 0x02, 0x4c, 0x02, + 0x4d, 0x06, 0x4d, 0x2d, 0x64, 0x04, 0x4d, 0x64, + 0x0c, 0x4d, 0x2d, 0x64, 0x2c, 0x20, 0x45, 0x06, + 0x4d, 0x45, 0x64, 0x06, 0x4c, 0x4c, 0x4c, 0x06, + 0x4d, 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x20, + 0x64, 0x08, 0x4d, 0x4d, 0x4d, 0x64, 0x0e, 0x4d, + 0x4d, 0x4d, 0x20, 0x64, 0x20, 0x45, 0x0a, 0x4d, + 0x4d, 0x4d, 0x45, 0x64, 0x0c, 0x4d, 0x4d, 0x4d, + 0x4d, 0x20, 0x64, 0x0a, 0x4d, 0x4d, 0x4d, 0x4d, + 0x64, 0x0a, 0x6d, 0x6d, 0x2e, 0x73, 0x73, 0x04, + 0x6d, 0x73, 0x02, 0x79, 0x06, 0x79, 0x2d, 0x4d, + 0x04, 0x79, 0x4d, 0x0a, 0x79, 0x2d, 0x4d, 0x2d, + 0x64, 0x06, 0x79, 0x4d, 0x64, 0x10, 0x79, 0x2d, + 0x4d, 0x2d, 0x64, 0x2c, 0x20, 0x45, 0x08, 0x79, + 0x4d, 0x45, 0x64, 0x0a, 0x79, 0x20, 0x4d, 0x4d, + 0x4d, 0x08, 0x79, 0x4d, 0x4d, 0x4d, 0x0e, 0x79, + 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x0a, 0x79, + 0x4d, 0x4d, 0x4d, 0x64, 0x14, 0x79, 0x20, 0x4d, + 0x4d, 0x4d, 0x20, 0x64, 0x2c, 0x20, 0x45, 0x0c, + 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0c, 0x79, + 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, 0x79, 0x4d, + 0x4d, 0x4d, 0x4d, 0x0a, 0x79, 0x20, 0x51, 0x51, + 0x51, 0x08, 0x79, 0x51, 0x51, 0x51, 0x0c, 0x79, + 0x20, 0x51, 0x51, 0x51, 0x51, 0x0a, 0x79, 0x51, + 0x51, 0x51, 0x51, 0x20, 0x61, 0x76, 0x61, 0x69, + 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x73, 0x1c, 0x79, 0x20, 0x4d, + 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x2c, 0x20, 0x45, + 0x45, 0x45, 0x45, 0x14, 0x79, 0x4d, 0x4d, 0x4d, + 0x4d, 0x45, 0x45, 0x45, 0x45, 0x64, 0x10, 0x79, + 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x0c, + 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x0e, 0x79, + 0x2d, 0x4d, 0x4d, 0x2d, 0x64, 0x64, 0x16, 0x64, + 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x73, 0x1a, 0x48, 0x48, 0x2e, 0x6d, 0x6d, + 0x2e, 0x73, 0x73, 0x20, 0x7a, 0x7a, 0x7a, 0x7a, + 0x12, 0x68, 0x6d, 0x6d, 0x73, 0x73, 0x7a, 0x7a, + 0x7a, 0x7a, 0x14, 0x48, 0x48, 0x2e, 0x6d, 0x6d, + 0x2e, 0x73, 0x73, 0x20, 0x7a, 0x08, 0x68, 0x6d, + 0x73, 0x7a, 0x16, 0x74, 0x69, 0x6d, 0x65, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x0e, 0x66, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x03, 0xa2, + 0x0d, 0x05, 0xb4, 0x0d, 0xd9, 0x0d, 0x05, 0xb8, + 0x0d, 0xcf, 0x0d, 0x03, 0x85, 0x0d, 0x05, 0xb8, + 0x0d, 0xd0, 0x0d, 0x05, 0xa2, 0x0d, 0xd6, 0x0d, + 0x05, 0xc3, 0x0d, 0xd0, 0x0d, 0x03, 0x94, 0x0d, + 0x05, 0xb1, 0x0d, 0xd9, 0x0d, 0x05, 0xaf, 0x0d, + 0xd9, 0x0d, 0x0c, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x05, 0xa2, 0x0d, 0xb1, 0x0d, 0x07, 0xb4, + 0x0d, 0xd9, 0x0d, 0xb6, 0x0d, 0x0d, 0xb8, 0x0d, + 0xcf, 0x0d, 0xbb, 0x0d, 0xca, 0x0d, 0xad, 0x0d, + 0xd4, 0x0d, 0x11, 0x85, 0x0d, 0xb4, 0x0d, 0xca, + 0x0d, 0x0d, 0x20, 0xbb, 0x0d, 0xda, 0x0d, 0xbd, + 0x0d, 0xca, 0x0d, 0x09, 0xb8, 0x0d, 0xd0, 0x0d, + 0xba, 0x0d, 0xd2, 0x0d, 0x09, 0xa2, 0x0d, 0xd6, + 0x0d, 0xb1, 0x0d, 0xd2, 0x0d, 0x09, 0xa2, 0x0d, + 0xd6, 0x0d, 0xbd, 0x0d, 0xd2, 0x0d, 0x07, 0x85, + 0x0d, 0x9c, 0x0d, 0xdd, 0x0d, 0x09, 0xc3, 0x0d, + 0xd0, 0x0d, 0xb4, 0x0d, 0xca, 0x0d, 0x07, 0x94, + 0x0d, 0x9a, 0x0d, 0xca, 0x0d, 0x09, 0xb1, 0x0d, + 0xdc, 0x0d, 0xc0, 0x0d, 0xd0, 0x0d, 0x09, 0xaf, + 0x0d, 0xd9, 0x0d, 0xc3, 0x0d, 0xd0, 0x0d, 0x0d, + 0xa2, 0x0d, 0xb1, 0x0d, 0xc0, 0x0d, 0xcf, 0x0d, + 0xbb, 0x0d, 0xd2, 0x0d, 0x11, 0xb4, 0x0d, 0xd9, + 0x0d, 0xb6, 0x0d, 0xbb, 0x0d, 0xc0, 0x0d, 0xcf, + 0x0d, 0xbb, 0x0d, 0xd2, 0x0d, 0x0f, 0x85, 0x0d, + 0x9c, 0x0d, 0xdd, 0x0d, 0xc3, 0x0d, 0xca, 0x0d, + 0xad, 0x0d, 0xd4, 0x0d, 0x17, 0xc3, 0x0d, 0xd0, + 0x0d, 0xb4, 0x0d, 0xca, 0x0d, 0xad, 0x0d, 0xd0, + 0x0d, 0xb8, 0x0d, 0xca, 0x0d, 0xb6, 0x0d, 0xbb, + 0x0d, 0xca, 0x0d, 0x11, 0x94, 0x0d, 0x9a, 0x0d, + 0xca, 0x0d, 0xad, 0x0d, 0xdd, 0x0d, 0xb6, 0x0d, + 0xbb, 0x0d, 0xca, 0x0d, 0x13, 0xb1, 0x0d, 0xdc, + 0x0d, 0xc0, 0x0d, 0xd0, 0x0d, 0xb8, 0x0d, 0xca, + 0x0d, 0xb6, 0x0d, 0xbb, 0x0d, 0xca, 0x0d, 0x13, + 0xaf, 0x0d, 0xd9, 0x0d, 0xc3, 0x0d, 0xd0, 0x0d, + 0xb8, 0x0d, 0xca, 0x0d, 0xb6, 0x0d, 0xbb, 0x0d, + 0xca, 0x0d, 0x0c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, + 0x73, 0x03, 0x89, 0x0d, 0x03, 0xc3, 0x0d, 0x03, + 0xb6, 0x0d, 0x09, 0xb6, 0x0d, 0xca, 0x0d, 0x0d, + 0x20, 0xbb, 0x0d, 0x05, 0xc3, 0x0d, 0xd2, 0x0d, + 0x05, 0xc3, 0x0d, 0xd9, 0x0d, 0x0b, 0x89, 0x0d, + 0xbb, 0x0d, 0xd2, 0x0d, 0xaf, 0x0d, 0xcf, 0x0d, + 0x0b, 0xc3, 0x0d, 0xb3, 0x0d, 0xd4, 0x0d, 0xaf, + 0x0d, 0xcf, 0x0d, 0x07, 0x85, 0x0d, 0x9f, 0x0d, + 0xc4, 0x0d, 0x0b, 0xb6, 0x0d, 0xaf, 0x0d, 0xcf, + 0x0d, 0xaf, 0x0d, 0xcf, 0x0d, 0x0f, 0xb6, 0x0d, + 0xca, 0x0d, 0x0d, 0x20, 0xbb, 0x0d, 0xc4, 0x0d, + 0xc3, 0x0d, 0xca, 0x0d, 0x09, 0xc3, 0x0d, 0xd2, + 0x0d, 0x9a, 0x0d, 0xd4, 0x0d, 0x07, 0xc3, 0x0d, + 0xd9, 0x0d, 0xb1, 0x0d, 0x13, 0x85, 0x0d, 0x9f, + 0x0d, 0xc4, 0x0d, 0xbb, 0x0d, 0xd4, 0x0d, 0xc0, + 0x0d, 0xcf, 0x0d, 0xaf, 0x0d, 0xcf, 0x0d, 0x1d, + 0xb6, 0x0d, 0xca, 0x0d, 0x0d, 0x20, 0xbb, 0x0d, + 0xc4, 0x0d, 0xc3, 0x0d, 0xca, 0x0d, 0xb4, 0x0d, + 0xad, 0x0d, 0xd2, 0x0d, 0xb1, 0x0d, 0xca, 0x0d, + 0xaf, 0x0d, 0xcf, 0x0d, 0x11, 0xc3, 0x0d, 0xd2, + 0x0d, 0x9a, 0x0d, 0xd4, 0x0d, 0xbb, 0x0d, 0xcf, + 0x0d, 0xaf, 0x0d, 0xcf, 0x0d, 0x13, 0xc3, 0x0d, + 0xd9, 0x0d, 0xb1, 0x0d, 0xc3, 0x0d, 0xd4, 0x0d, + 0xbb, 0x0d, 0xcf, 0x0d, 0xaf, 0x0d, 0xcf, 0x0d, + 0x08, 0x64, 0x61, 0x79, 0x73, 0x04, 0x42, 0x45, + 0x08, 0x65, 0x72, 0x61, 0x73, 0x0b, 0xb4, 0x0d, + 0xd9, 0x0d, 0x2e, 0x00, 0xc0, 0x0d, 0x2e, 0x00, + 0x04, 0x61, 0x6d, 0x09, 0xb4, 0x0d, 0x2e, 0x00, + 0xc0, 0x0d, 0x2e, 0x00, 0x04, 0x70, 0x6d, 0x14, + 0x64, 0x61, 0x79, 0x50, 0x65, 0x72, 0x69, 0x6f, + 0x64, 0x73, 0x06, 0x4d, 0x30, 0x31, 0x06, 0x4d, + 0x30, 0x32, 0x06, 0x4d, 0x30, 0x33, 0x06, 0x4d, + 0x30, 0x34, 0x06, 0x4d, 0x30, 0x35, 0x06, 0x4d, + 0x30, 0x36, 0x06, 0x4d, 0x30, 0x37, 0x06, 0x4d, + 0x30, 0x38, 0x06, 0x4d, 0x30, 0x39, 0x06, 0x4d, + 0x31, 0x30, 0x06, 0x4d, 0x31, 0x31, 0x06, 0x4d, + 0x31, 0x32, 0x08, 0x54, 0x6f, 0x75, 0x74, 0x08, + 0x42, 0x61, 0x62, 0x61, 0x0a, 0x48, 0x61, 0x74, + 0x6f, 0x72, 0x0a, 0x4b, 0x69, 0x61, 0x68, 0x6b, + 0x08, 0x54, 0x6f, 0x62, 0x61, 0x0c, 0x41, 0x6d, + 0x73, 0x68, 0x69, 0x72, 0x10, 0x42, 0x61, 0x72, + 0x61, 0x6d, 0x68, 0x61, 0x74, 0x12, 0x42, 0x61, + 0x72, 0x61, 0x6d, 0x6f, 0x75, 0x64, 0x61, 0x0e, + 0x42, 0x61, 0x73, 0x68, 0x61, 0x6e, 0x73, 0x0a, + 0x50, 0x61, 0x6f, 0x6e, 0x61, 0x08, 0x45, 0x70, + 0x65, 0x70, 0x0a, 0x4d, 0x65, 0x73, 0x72, 0x61, + 0x0a, 0x4e, 0x61, 0x73, 0x69, 0x65, 0x08, 0x45, + 0x52, 0x41, 0x30, 0x08, 0x45, 0x52, 0x41, 0x31, + 0x10, 0x4d, 0x65, 0x73, 0x6b, 0x65, 0x72, 0x65, + 0x6d, 0x0c, 0x54, 0x65, 0x6b, 0x65, 0x6d, 0x74, + 0x0a, 0x48, 0x65, 0x64, 0x61, 0x72, 0x0c, 0x54, + 0x61, 0x68, 0x73, 0x61, 0x73, 0x06, 0x54, 0x65, + 0x72, 0x0e, 0x59, 0x65, 0x6b, 0x61, 0x74, 0x69, + 0x74, 0x0e, 0x4d, 0x65, 0x67, 0x61, 0x62, 0x69, + 0x74, 0x0c, 0x4d, 0x69, 0x61, 0x7a, 0x69, 0x61, + 0x0c, 0x47, 0x65, 0x6e, 0x62, 0x6f, 0x74, 0x08, + 0x53, 0x65, 0x6e, 0x65, 0x0a, 0x48, 0x61, 0x6d, + 0x6c, 0x65, 0x0e, 0x4e, 0x65, 0x68, 0x61, 0x73, + 0x73, 0x65, 0x0e, 0x50, 0x61, 0x67, 0x75, 0x6d, + 0x65, 0x6e, 0x13, 0x9a, 0x0d, 0xca, 0x0d, 0x0d, + 0x20, 0xbb, 0x0d, 0xd2, 0x0d, 0x2e, 0x00, 0xb4, + 0x0d, 0xd6, 0x0d, 0x2e, 0x00, 0x11, 0x9a, 0x0d, + 0xca, 0x0d, 0x0d, 0x20, 0xbb, 0x0d, 0xd2, 0x0d, + 0x2e, 0x00, 0xc0, 0x0d, 0x2e, 0x00, 0x09, 0xb4, + 0x0d, 0xdc, 0x0d, 0xb4, 0x0d, 0xd9, 0x0d, 0x0b, + 0xb4, 0x0d, 0xdc, 0x0d, 0x2e, 0x00, 0xba, 0x0d, + 0xd4, 0x0d, 0x1f, 0x9a, 0x0d, 0xca, 0x0d, 0x0d, + 0x20, 0xbb, 0x0d, 0xd2, 0x0d, 0xc3, 0x0d, 0xca, + 0x0d, 0xad, 0x0d, 0xd4, 0x0d, 0x20, 0x00, 0xb4, + 0x0d, 0xd6, 0x0d, 0xbb, 0x0d, 0xca, 0x0d, 0xc0, + 0x0d, 0x1d, 0x9a, 0x0d, 0xca, 0x0d, 0x0d, 0x20, + 0xbb, 0x0d, 0xd2, 0x0d, 0xc3, 0x0d, 0xca, 0x0d, + 0xad, 0x0d, 0xd4, 0x0d, 0x20, 0x00, 0xc0, 0x0d, + 0xbb, 0x0d, 0xca, 0x0d, 0xc2, 0x0d, 0x1d, 0xb4, + 0x0d, 0xdc, 0x0d, 0xaf, 0x0d, 0xd4, 0x0d, 0x20, + 0x00, 0xba, 0x0d, 0xd4, 0x0d, 0x9c, 0x0d, 0xba, + 0x0d, 0xa7, 0x0d, 0x20, 0x00, 0xb4, 0x0d, 0xd9, + 0x0d, 0xbb, 0x0d, 0x13, 0xb4, 0x0d, 0xdc, 0x0d, + 0xaf, 0x0d, 0xd4, 0x0d, 0x20, 0x00, 0xba, 0x0d, + 0xd4, 0x0d, 0x9c, 0x0d, 0xba, 0x0d, 0x0c, 0x54, + 0x69, 0x73, 0x68, 0x72, 0x69, 0x0e, 0x48, 0x65, + 0x73, 0x68, 0x76, 0x61, 0x6e, 0x0c, 0x4b, 0x69, + 0x73, 0x6c, 0x65, 0x76, 0x0a, 0x54, 0x65, 0x76, + 0x65, 0x74, 0x0c, 0x53, 0x68, 0x65, 0x76, 0x61, + 0x74, 0x0c, 0x41, 0x64, 0x61, 0x72, 0x20, 0x49, + 0x08, 0x41, 0x64, 0x61, 0x72, 0x0a, 0x4e, 0x69, + 0x73, 0x61, 0x6e, 0x08, 0x49, 0x79, 0x61, 0x72, + 0x0a, 0x53, 0x69, 0x76, 0x61, 0x6e, 0x0a, 0x54, + 0x61, 0x6d, 0x75, 0x7a, 0x04, 0x41, 0x76, 0x08, + 0x45, 0x6c, 0x75, 0x6c, 0x0e, 0x41, 0x64, 0x61, + 0x72, 0x20, 0x49, 0x49, 0x04, 0x41, 0x4d, 0x0e, + 0x43, 0x68, 0x61, 0x69, 0x74, 0x72, 0x61, 0x10, + 0x56, 0x61, 0x69, 0x73, 0x61, 0x6b, 0x68, 0x61, + 0x10, 0x4a, 0x79, 0x61, 0x69, 0x73, 0x74, 0x68, + 0x61, 0x0c, 0x41, 0x73, 0x61, 0x64, 0x68, 0x61, + 0x0e, 0x53, 0x72, 0x61, 0x76, 0x61, 0x6e, 0x61, + 0x0c, 0x42, 0x68, 0x61, 0x64, 0x72, 0x61, 0x0c, + 0x41, 0x73, 0x76, 0x69, 0x6e, 0x61, 0x0e, 0x4b, + 0x61, 0x72, 0x74, 0x69, 0x6b, 0x61, 0x14, 0x41, + 0x67, 0x72, 0x61, 0x68, 0x61, 0x79, 0x61, 0x6e, + 0x61, 0x0a, 0x50, 0x61, 0x75, 0x73, 0x61, 0x0a, + 0x4d, 0x61, 0x67, 0x68, 0x61, 0x10, 0x50, 0x68, + 0x61, 0x6c, 0x67, 0x75, 0x6e, 0x61, 0x08, 0x53, + 0x61, 0x6b, 0x61, 0x08, 0x4d, 0x75, 0x68, 0x2e, + 0x08, 0x53, 0x61, 0x66, 0x2e, 0x0c, 0x52, 0x61, + 0x62, 0x2e, 0x20, 0x49, 0x0e, 0x52, 0x61, 0x62, + 0x2e, 0x20, 0x49, 0x49, 0x0c, 0x4a, 0x75, 0x6d, + 0x2e, 0x20, 0x49, 0x0e, 0x4a, 0x75, 0x6d, 0x2e, + 0x20, 0x49, 0x49, 0x08, 0x52, 0x61, 0x6a, 0x2e, + 0x08, 0x53, 0x68, 0x61, 0x2e, 0x08, 0x52, 0x61, + 0x6d, 0x2e, 0x0a, 0x53, 0x68, 0x61, 0x77, 0x2e, + 0x11, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, + 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x51, 0x00, 0x2e, + 0x00, 0x11, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, + 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x48, 0x00, + 0x2e, 0x00, 0x10, 0x4d, 0x75, 0x68, 0x61, 0x72, + 0x72, 0x61, 0x6d, 0x0a, 0x53, 0x61, 0x66, 0x61, + 0x72, 0x0f, 0x52, 0x00, 0x61, 0x00, 0x62, 0x00, + 0x69, 0x00, 0xbb, 0x02, 0x20, 0x00, 0x49, 0x00, + 0x11, 0x52, 0x00, 0x61, 0x00, 0x62, 0x00, 0x69, + 0x00, 0xbb, 0x02, 0x20, 0x00, 0x49, 0x00, 0x49, + 0x00, 0x10, 0x4a, 0x75, 0x6d, 0x61, 0x64, 0x61, + 0x20, 0x49, 0x12, 0x4a, 0x75, 0x6d, 0x61, 0x64, + 0x61, 0x20, 0x49, 0x49, 0x0a, 0x52, 0x61, 0x6a, + 0x61, 0x62, 0x0f, 0x53, 0x00, 0x68, 0x00, 0x61, + 0x00, 0xbb, 0x02, 0x62, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x0e, 0x52, 0x61, 0x6d, 0x61, 0x64, 0x61, + 0x6e, 0x0e, 0x53, 0x68, 0x61, 0x77, 0x77, 0x61, + 0x6c, 0x19, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, + 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x51, 0x00, + 0x69, 0x00, 0xbb, 0x02, 0x64, 0x00, 0x61, 0x00, + 0x68, 0x00, 0x19, 0x44, 0x00, 0x68, 0x00, 0x75, + 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x48, + 0x00, 0x69, 0x00, 0x6a, 0x00, 0x6a, 0x00, 0x61, + 0x00, 0x68, 0x00, 0x04, 0x41, 0x48, 0x1f, 0x54, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x36, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x36, 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x75, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1f, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x1d, 0x57, 0x00, 0x61, 0x00, 0x64, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x52, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x1d, 0x59, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1f, 0x4a, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, + 0x6b, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x2b, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x2d, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x2d, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x2a, 0x4a, 0x69, 0x6e, 0x67, + 0x6f, 0x2d, 0x6b, 0x65, 0x69, 0x75, 0x6e, 0x20, + 0x28, 0x37, 0x36, 0x37, 0x2d, 0x37, 0x37, 0x30, + 0x29, 0x1d, 0x48, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x1f, 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, 0x64, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x4d, 0x01, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, + 0x4a, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x61, + 0x00, 0x6a, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1f, 0x53, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x20, + 0x54, 0x65, 0x6e, 0x2d, 0x61, 0x6e, 0x20, 0x28, + 0x38, 0x35, 0x37, 0x2d, 0x38, 0x35, 0x39, 0x29, + 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, + 0x47, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1d, 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, + 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x34, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1b, 0x4c, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1d, 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x41, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, 0x4a, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x4a, 0x00, 0x69, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x29, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x27, 0x4a, 0x00, 0x69, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x45, 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4c, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x61, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x25, 0x4a, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x24, 0x54, 0x65, 0x6e, 0x2d, + 0x65, 0x69, 0x20, 0x28, 0x31, 0x31, 0x31, 0x30, + 0x2d, 0x31, 0x31, 0x31, 0x33, 0x29, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x44, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x45, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x6a, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x48, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x27, 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, + 0x4c, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x6d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x4a, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x59, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x75, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x29, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x21, 0x4a, 0x00, 0x4d, 0x01, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x27, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x75, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x29, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x74, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x29, 0x52, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x45, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4c, + 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x61, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x48, + 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x27, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x4c, + 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x45, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x27, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4a, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x27, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x61, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x41, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x4d, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x02, 0x54, 0x02, 0x53, 0x0a, 0x4d, 0x65, + 0x69, 0x6a, 0x69, 0x0d, 0x54, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x0b, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x0c, 0x48, 0x65, 0x69, 0x73, + 0x65, 0x69, 0x12, 0x46, 0x61, 0x72, 0x76, 0x61, + 0x72, 0x64, 0x69, 0x6e, 0x16, 0x4f, 0x72, 0x64, + 0x69, 0x62, 0x65, 0x68, 0x65, 0x73, 0x68, 0x74, + 0x0e, 0x4b, 0x68, 0x6f, 0x72, 0x64, 0x61, 0x64, + 0x06, 0x54, 0x69, 0x72, 0x0c, 0x4d, 0x6f, 0x72, + 0x64, 0x61, 0x64, 0x12, 0x53, 0x68, 0x61, 0x68, + 0x72, 0x69, 0x76, 0x61, 0x72, 0x08, 0x4d, 0x65, + 0x68, 0x72, 0x08, 0x41, 0x62, 0x61, 0x6e, 0x08, + 0x41, 0x7a, 0x61, 0x72, 0x06, 0x44, 0x65, 0x79, + 0x0c, 0x42, 0x61, 0x68, 0x6d, 0x61, 0x6e, 0x0c, + 0x45, 0x73, 0x66, 0x61, 0x6e, 0x64, 0x04, 0x41, + 0x50, 0x1a, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, + 0x20, 0x52, 0x2e, 0x4f, 0x2e, 0x43, 0x2e, 0x0c, + 0x52, 0x2e, 0x4f, 0x2e, 0x43, 0x2e, 0x12, 0x63, + 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, 0x73, + 0x08, 0x64, 0x61, 0x74, 0x65, 0x08, 0x6c, 0x61, + 0x74, 0x6e, 0x04, 0x6e, 0x75, 0x10, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x50, + 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x26, 0x7b, + 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0x1e, 0x6e, 0x65, 0x67, 0x61, 0x74, + 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, + 0x72, 0x6e, 0x0e, 0x64, 0x65, 0x63, 0x69, 0x6d, + 0x61, 0x6c, 0x24, 0x7b, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x63, 0x79, 0x7d, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x3a, 0x7b, 0x6d, + 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x7d, 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x79, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0x10, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x63, 0x79, 0x2a, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x7b, 0x70, 0x65, + 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, + 0x6e, 0x7d, 0x40, 0x7b, 0x6d, 0x69, 0x6e, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x7b, 0x70, + 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, + 0x67, 0x6e, 0x7d, 0x0e, 0x70, 0x65, 0x72, 0x63, + 0x65, 0x6e, 0x74, 0x10, 0x70, 0x61, 0x74, 0x74, + 0x65, 0x72, 0x6e, 0x73, 0x02, 0x2e, 0x02, 0x2c, + 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x06, 0x4e, + 0x61, 0x4e, 0x06, 0x6e, 0x61, 0x6e, 0x02, 0x2b, + 0x10, 0x70, 0x6c, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x02, 0x2d, 0x12, 0x6d, 0x69, 0x6e, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, 0x25, 0x16, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, + 0x69, 0x67, 0x6e, 0x03, 0x1e, 0x22, 0x10, 0x69, + 0x6e, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x0e, + 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x04, + 0x41, 0x24, 0x06, 0x41, 0x55, 0x44, 0x04, 0x52, + 0x24, 0x06, 0x42, 0x52, 0x4c, 0x06, 0x43, 0x41, + 0x24, 0x06, 0x43, 0x41, 0x44, 0x06, 0x43, 0x4e, + 0xa5, 0x06, 0x43, 0x4e, 0x59, 0x03, 0xac, 0x20, + 0x06, 0x45, 0x55, 0x52, 0x02, 0xa3, 0x06, 0x47, + 0x42, 0x50, 0x06, 0x48, 0x4b, 0x24, 0x06, 0x48, + 0x4b, 0x44, 0x03, 0xaa, 0x20, 0x06, 0x49, 0x4c, + 0x53, 0x03, 0xb9, 0x20, 0x06, 0x49, 0x4e, 0x52, + 0x06, 0x4a, 0x50, 0xa5, 0x06, 0x4a, 0x50, 0x59, + 0x03, 0xa9, 0x20, 0x06, 0x4b, 0x52, 0x57, 0x07, + 0xbb, 0x0d, 0xd4, 0x0d, 0x2e, 0x00, 0x06, 0x4c, + 0x4b, 0x52, 0x06, 0x4d, 0x58, 0x24, 0x06, 0x4d, + 0x58, 0x4e, 0x06, 0x4e, 0x5a, 0x24, 0x06, 0x4e, + 0x5a, 0x44, 0x03, 0x3f, 0x0e, 0x06, 0x54, 0x48, + 0x42, 0x06, 0x4e, 0x54, 0x24, 0x06, 0x54, 0x57, + 0x44, 0x06, 0x55, 0x53, 0x24, 0x06, 0x55, 0x53, + 0x44, 0x03, 0xab, 0x20, 0x06, 0x56, 0x4e, 0x44, + 0x08, 0x46, 0x43, 0x46, 0x41, 0x06, 0x58, 0x41, + 0x46, 0x06, 0x45, 0x43, 0x24, 0x06, 0x58, 0x43, + 0x44, 0x0b, 0xc3, 0x0d, 0xd2, 0x0d, 0xc6, 0x0d, + 0xca, 0x0d, 0x91, 0x0d, 0x06, 0x58, 0x4f, 0x46, + 0x08, 0x43, 0x46, 0x50, 0x46, 0x06, 0x58, 0x50, + 0x46, 0x14, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x69, 0x65, 0x73, 0x52, 0x6e, 0x6f, 0x64, + 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, + 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2f, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, + 0x74, 0x61, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x70, + 0x2f, 0x73, 0x69, 0x2e, 0x6a, 0x73, 0x0d, 0x00, + 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, 0x27, + 0x00, 0x89, 0x01, 0xe8, 0x6a, 0x01, 0xa0, 0x01, + 0x00, 0x00, 0x00, 0x39, 0xd0, 0x00, 0x00, 0x00, + 0x43, 0xd1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd2, + 0x00, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xd4, 0x00, 0x00, 0x00, 0x04, 0xd5, + 0x00, 0x00, 0x00, 0x04, 0xd6, 0x00, 0x00, 0x00, + 0x04, 0xd7, 0x00, 0x00, 0x00, 0x04, 0xd8, 0x00, + 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x04, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xdb, 0x00, 0x00, + 0x00, 0x04, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xdd, + 0x00, 0x00, 0x00, 0x04, 0xde, 0x00, 0x00, 0x00, + 0x04, 0xdf, 0x00, 0x00, 0x00, 0x04, 0xe0, 0x00, + 0x00, 0x00, 0x04, 0xe1, 0x00, 0x00, 0x00, 0x04, + 0xe2, 0x00, 0x00, 0x00, 0x26, 0x0f, 0x00, 0x4d, + 0xe3, 0x00, 0x00, 0x00, 0x0a, 0x4d, 0xe4, 0x00, + 0x00, 0x00, 0x09, 0x4d, 0xe5, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x00, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x04, 0xec, 0x00, 0x00, + 0x00, 0x4d, 0xed, 0x00, 0x00, 0x00, 0x04, 0xee, + 0x00, 0x00, 0x00, 0x4d, 0xef, 0x00, 0x00, 0x00, + 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, 0xf1, 0x00, + 0x00, 0x00, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, + 0xf3, 0x00, 0x00, 0x00, 0x04, 0xf4, 0x00, 0x00, + 0x00, 0x4d, 0xf5, 0x00, 0x00, 0x00, 0x04, 0xf6, + 0x00, 0x00, 0x00, 0x4d, 0xf7, 0x00, 0x00, 0x00, + 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, 0xf9, 0x00, + 0x00, 0x00, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, + 0xfb, 0x00, 0x00, 0x00, 0x04, 0xfc, 0x00, 0x00, + 0x00, 0x4d, 0xfd, 0x00, 0x00, 0x00, 0x04, 0xfe, + 0x00, 0x00, 0x00, 0x4d, 0xff, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x01, + 0x00, 0x00, 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, + 0x03, 0x01, 0x00, 0x00, 0x04, 0x04, 0x01, 0x00, + 0x00, 0x4d, 0x05, 0x01, 0x00, 0x00, 0x04, 0x06, + 0x01, 0x00, 0x00, 0x4d, 0x07, 0x01, 0x00, 0x00, + 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, 0x09, 0x01, + 0x00, 0x00, 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, + 0x0b, 0x01, 0x00, 0x00, 0x04, 0x0c, 0x01, 0x00, + 0x00, 0x4d, 0x0d, 0x01, 0x00, 0x00, 0x04, 0x0e, + 0x01, 0x00, 0x00, 0x4d, 0x0f, 0x01, 0x00, 0x00, + 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, 0x11, 0x01, + 0x00, 0x00, 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, + 0x13, 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, + 0x00, 0x4d, 0x15, 0x01, 0x00, 0x00, 0x04, 0x16, + 0x01, 0x00, 0x00, 0x4d, 0x17, 0x01, 0x00, 0x00, + 0x04, 0x18, 0x01, 0x00, 0x00, 0x4d, 0x19, 0x01, + 0x00, 0x00, 0x04, 0x1a, 0x01, 0x00, 0x00, 0x4d, + 0x1b, 0x01, 0x00, 0x00, 0x04, 0x1c, 0x01, 0x00, + 0x00, 0x4d, 0x1d, 0x01, 0x00, 0x00, 0x04, 0x1e, + 0x01, 0x00, 0x00, 0x4d, 0x1f, 0x01, 0x00, 0x00, + 0x04, 0x20, 0x01, 0x00, 0x00, 0x4d, 0x21, 0x01, + 0x00, 0x00, 0x04, 0x22, 0x01, 0x00, 0x00, 0x4d, + 0x23, 0x01, 0x00, 0x00, 0x04, 0x24, 0x01, 0x00, + 0x00, 0x4d, 0x24, 0x01, 0x00, 0x00, 0x04, 0x25, + 0x01, 0x00, 0x00, 0x4d, 0x26, 0x01, 0x00, 0x00, + 0x04, 0x27, 0x01, 0x00, 0x00, 0x4d, 0x28, 0x01, + 0x00, 0x00, 0x04, 0x29, 0x01, 0x00, 0x00, 0x4d, + 0x2a, 0x01, 0x00, 0x00, 0x04, 0x2b, 0x01, 0x00, + 0x00, 0x4d, 0x2c, 0x01, 0x00, 0x00, 0x04, 0x2d, + 0x01, 0x00, 0x00, 0x4d, 0x2e, 0x01, 0x00, 0x00, + 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, 0x30, 0x01, + 0x00, 0x00, 0x04, 0x31, 0x01, 0x00, 0x00, 0x4d, + 0x32, 0x01, 0x00, 0x00, 0x04, 0x33, 0x01, 0x00, + 0x00, 0x4d, 0x34, 0x01, 0x00, 0x00, 0x04, 0x35, + 0x01, 0x00, 0x00, 0x4d, 0x36, 0x01, 0x00, 0x00, + 0x4d, 0x37, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x38, + 0x01, 0x00, 0x00, 0x4d, 0x39, 0x01, 0x00, 0x00, + 0x04, 0x3a, 0x01, 0x00, 0x00, 0x4d, 0x3b, 0x01, + 0x00, 0x00, 0x04, 0x2d, 0x01, 0x00, 0x00, 0x4d, + 0x2e, 0x01, 0x00, 0x00, 0x04, 0x3c, 0x01, 0x00, + 0x00, 0x4d, 0x28, 0x01, 0x00, 0x00, 0x4d, 0x3d, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x3e, 0x01, 0x00, + 0x00, 0x4d, 0x3f, 0x01, 0x00, 0x00, 0x04, 0x40, + 0x01, 0x00, 0x00, 0x4d, 0x41, 0x01, 0x00, 0x00, + 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x09, 0x01, + 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, + 0x05, 0x01, 0x00, 0x00, 0x4d, 0x42, 0x01, 0x00, + 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x0b, 0x04, 0x44, 0x01, 0x00, 0x00, 0x04, 0x45, + 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x62, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x75, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, + 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, + 0x4d, 0xd5, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x00, 0xbe, 0x01, 0xbe, 0x02, 0xbe, 0x03, 0xbe, + 0x04, 0xbe, 0x05, 0xbe, 0x06, 0xbe, 0x07, 0xbe, + 0x08, 0xbe, 0x09, 0xbe, 0x0a, 0xbe, 0x0b, 0x26, + 0x0c, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, + 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, + 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, + 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, + 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, + 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, + 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, + 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, + 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x62, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x74, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, + 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0xd6, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x0c, 0xbe, 0x0d, + 0xbe, 0x0e, 0xbe, 0x0f, 0xbe, 0x10, 0xbe, 0x11, + 0xbe, 0x12, 0xbe, 0x13, 0xbe, 0x14, 0xbe, 0x15, + 0xbe, 0x16, 0xbe, 0x17, 0xbe, 0x18, 0x26, 0x0d, + 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, + 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, + 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, + 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, + 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, + 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, + 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, + 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, + 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, + 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, + 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, + 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, + 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, + 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x62, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x95, 0x01, + 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, + 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x19, 0xbe, 0x1a, 0xbe, 0x1b, 0xbe, + 0x1c, 0xbe, 0x1d, 0xbe, 0x1e, 0xbe, 0x1f, 0xbe, + 0x20, 0xbe, 0x21, 0xbe, 0x22, 0xbe, 0x23, 0xbe, + 0x24, 0x26, 0x0c, 0x00, 0x4d, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, + 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, + 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, + 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, + 0x04, 0x87, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, + 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, + 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x62, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, + 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x25, + 0xbe, 0x26, 0xbe, 0x27, 0xbe, 0x28, 0xbe, 0x29, + 0xbe, 0x2a, 0xbe, 0x2b, 0xbe, 0x2c, 0xbe, 0x2d, + 0xbe, 0x2e, 0xbe, 0x2f, 0xbe, 0x30, 0xbe, 0x31, + 0x26, 0x0d, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, + 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, + 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, + 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, + 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, + 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, + 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, + 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, + 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, + 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, + 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, + 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, + 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, + 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, + 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x62, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, + 0x04, 0x96, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x76, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x4d, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x4d, + 0x7b, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x32, 0xbe, 0x33, 0xbe, + 0x34, 0xbe, 0x35, 0xbe, 0x36, 0xbe, 0x37, 0xbe, + 0x38, 0xbe, 0x39, 0xbe, 0x3a, 0xbe, 0x3b, 0xbe, + 0x3c, 0xbe, 0x3d, 0xbe, 0x3e, 0x26, 0x0d, 0x00, + 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, + 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, + 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, + 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, + 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, + 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, + 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, + 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, + 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x26, 0x0d, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x97, + 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, + 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, + 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, + 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, + 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, + 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, + 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, + 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x62, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x74, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x95, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x95, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x3f, 0xbe, 0x40, 0xbe, 0x41, 0xbe, + 0x42, 0xbe, 0x43, 0xbe, 0x44, 0xbe, 0x45, 0xbe, + 0x46, 0xbe, 0x47, 0xbe, 0x48, 0xbe, 0x49, 0xbe, + 0x4a, 0x26, 0x0c, 0x00, 0x4d, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, + 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, + 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, + 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, + 0x04, 0x87, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, + 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, + 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x62, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x95, + 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, + 0x96, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x44, 0x01, 0x00, 0x00, 0x04, + 0x45, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x62, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xa4, 0x01, 0x00, 0x00, + 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, + 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x26, + 0x04, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, + 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, + 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, + 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, + 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x26, + 0x04, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x76, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, + 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0xd4, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x4b, 0xbe, + 0x4c, 0xbe, 0x4d, 0xbe, 0x4e, 0xbe, 0x4f, 0xbe, + 0x50, 0xbe, 0x51, 0xbe, 0x52, 0xbe, 0x53, 0xbe, + 0x54, 0xbe, 0x55, 0xbe, 0x56, 0xbe, 0x57, 0xbe, + 0x58, 0x26, 0x0e, 0x00, 0x4d, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, + 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, + 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, + 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, 0x04, + 0xb2, 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, + 0x00, 0x04, 0xb4, 0x01, 0x00, 0x00, 0x04, 0xb5, + 0x01, 0x00, 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, + 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, + 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, 0x26, + 0x0e, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, + 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, + 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, + 0x04, 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, + 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, 0x04, + 0xb4, 0x01, 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, + 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb7, + 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, + 0x04, 0xb9, 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x62, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xba, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0xba, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, + 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x59, 0xbe, 0x5a, 0xbe, 0x5b, 0xbe, 0x5c, 0xbe, + 0x5d, 0xbe, 0x5e, 0xbe, 0x5f, 0xbe, 0x60, 0xbe, + 0x61, 0xbe, 0x62, 0xbe, 0x63, 0xbe, 0x64, 0x26, + 0x0c, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, + 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, 0x04, 0xbe, + 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, + 0x04, 0xc0, 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, + 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, 0x00, 0x04, + 0xc3, 0x01, 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, + 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, + 0x04, 0xbc, 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, + 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, + 0xbf, 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, + 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, 0x04, 0xc2, + 0x01, 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, + 0x04, 0xc4, 0x01, 0x00, 0x00, 0x04, 0xc5, 0x01, + 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x62, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x74, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xc7, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xc7, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x65, 0xbe, 0x66, 0xbe, 0x67, 0xbe, + 0x68, 0xbe, 0x69, 0xbe, 0x6a, 0xbe, 0x6b, 0xbe, + 0x6c, 0xbe, 0x6d, 0xbe, 0x6e, 0xbe, 0x6f, 0xbe, + 0x70, 0x26, 0x0c, 0x00, 0x4d, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, 0xc9, + 0x01, 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, + 0x04, 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, 0x01, + 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, 0x04, + 0xce, 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, + 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, 0xd1, + 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, + 0x04, 0xd3, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd4, 0x01, + 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, + 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, + 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, + 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, + 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, + 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, + 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x62, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xe0, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xe0, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x76, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x4d, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x4d, + 0x7b, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x71, 0xbe, 0x72, 0xbe, + 0x73, 0xbe, 0x74, 0xbe, 0x75, 0xbe, 0x76, 0xbe, + 0x77, 0xbe, 0x78, 0xbe, 0x79, 0xbe, 0x7a, 0xbe, + 0x7b, 0xbe, 0x7c, 0x26, 0x0c, 0x00, 0x4d, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, + 0x04, 0xc9, 0x01, 0x00, 0x00, 0x04, 0xca, 0x01, + 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, 0x04, + 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, + 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, 0x04, 0xcf, + 0x01, 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, + 0x04, 0xd1, 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, + 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xd4, 0x01, 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, + 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, + 0x01, 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, + 0x04, 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, + 0x00, 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, + 0xdc, 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, + 0x00, 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x62, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xe0, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0xe0, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x76, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, + 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x44, 0x01, + 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, + 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x62, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xe1, + 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, + 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, + 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, + 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, + 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, + 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, + 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, + 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, + 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, + 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, + 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, + 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, + 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, + 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, + 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, + 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, + 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, + 0x00, 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, + 0xfe, 0x01, 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, + 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x26, 0x20, + 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, 0x4d, 0x20, + 0x00, 0x00, 0x80, 0x04, 0x02, 0x02, 0x00, 0x00, + 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0x03, 0x02, + 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, + 0x04, 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, + 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, 0x4d, 0x24, + 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, 0x00, 0x00, + 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0x07, 0x02, + 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, + 0x08, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, + 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, 0x28, + 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, + 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, + 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, + 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, + 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x2c, + 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, + 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, + 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, + 0x10, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, + 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, 0x30, + 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, + 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, + 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, + 0x14, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, + 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, 0x34, + 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, + 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, + 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, + 0x18, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, + 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, 0x38, + 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, + 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, + 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, + 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, + 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x3c, + 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, + 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, + 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, + 0x20, 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, + 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, 0x40, + 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, + 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, + 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, + 0x24, 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, + 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, 0x44, + 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, + 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, + 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, + 0x28, 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, + 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, 0x48, + 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, + 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, + 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, + 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, + 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x4c, + 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, + 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, + 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, + 0x30, 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, + 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, 0x50, + 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, + 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, + 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, + 0x34, 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, + 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, 0x54, + 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, + 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, + 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, + 0x38, 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, + 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, 0x58, + 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, + 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, + 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, + 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, + 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x5c, + 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, + 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, + 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, + 0x40, 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, + 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, 0x60, + 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, + 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, + 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, + 0x44, 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, + 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, 0x64, + 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, + 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, + 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, + 0x48, 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, + 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, 0x68, + 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, + 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, + 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, + 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, + 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x6c, + 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, + 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, + 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, + 0x50, 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, + 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, 0x70, + 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, + 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, + 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, + 0x54, 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, + 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, 0x74, + 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, + 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, + 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, + 0x58, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, + 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, 0x78, + 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, + 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, + 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, + 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, + 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x7c, + 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, + 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, + 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, + 0x60, 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, + 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, 0x80, + 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, + 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, + 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, + 0x64, 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, + 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, 0x84, + 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, + 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, + 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, + 0x68, 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, + 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, 0x88, + 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, + 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, + 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, + 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, + 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x8c, + 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, + 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, + 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, + 0x70, 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, + 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, 0x90, + 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, + 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, + 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, + 0x74, 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, + 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, 0x94, + 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, + 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, + 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, + 0x78, 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, + 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, 0x98, + 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, + 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, + 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, + 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, + 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x9c, + 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, + 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, + 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, + 0x80, 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, + 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, 0xa0, + 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, + 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, + 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, + 0x84, 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, + 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, 0xa4, + 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, + 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, + 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, + 0x88, 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, + 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, 0xa8, + 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, + 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, + 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, + 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, + 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xac, + 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, + 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, + 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, + 0x90, 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, + 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, 0xb0, + 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, + 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, + 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, + 0x94, 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, + 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, 0xb4, + 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, + 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, + 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, + 0x98, 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, + 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, 0xb8, + 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, + 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, + 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, + 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, + 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xbc, + 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, + 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, + 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, + 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, + 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xc0, + 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, + 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, + 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, + 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, + 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xc4, + 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, + 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, + 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, + 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, + 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xc8, + 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, + 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, + 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, + 0xac, 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, + 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0xcc, + 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, + 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, + 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, + 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, + 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xd0, + 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, + 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, + 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, + 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, + 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xd4, + 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, + 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, + 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, + 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, + 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, + 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, + 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, + 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, + 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, + 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xe4, + 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, + 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, + 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, + 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x80, 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, + 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, + 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, + 0x03, 0x01, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x80, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0xe1, + 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, + 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, + 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, + 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, + 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, + 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, + 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, + 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, + 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, + 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, + 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, + 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, + 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, + 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, + 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, + 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, + 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, + 0x00, 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, + 0xfe, 0x01, 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, + 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x26, 0x20, + 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, 0x4d, 0x20, + 0x00, 0x00, 0x80, 0x04, 0x02, 0x02, 0x00, 0x00, + 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0x03, 0x02, + 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, + 0x04, 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, + 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, 0x4d, 0x24, + 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, 0x00, 0x00, + 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0x07, 0x02, + 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, + 0x08, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, + 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, 0x28, + 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, + 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, + 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, + 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, + 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x2c, + 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, + 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, + 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, + 0x10, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, + 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, 0x30, + 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, + 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, + 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, + 0x14, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, + 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, 0x34, + 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, + 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, + 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, + 0x18, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, + 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, 0x38, + 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, + 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, + 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, + 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, + 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x3c, + 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, + 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, + 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, + 0x20, 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, + 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, 0x40, + 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, + 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, + 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, + 0x24, 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, + 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, 0x44, + 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, + 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, + 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, + 0x28, 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, + 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, 0x48, + 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, + 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, + 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, + 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, + 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x4c, + 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, + 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, + 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, + 0x30, 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, + 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, 0x50, + 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, + 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, + 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, + 0x34, 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, + 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, 0x54, + 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, + 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, + 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, + 0x38, 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, + 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, 0x58, + 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, + 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, + 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, + 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, + 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x5c, + 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, + 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, + 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, + 0x40, 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, + 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, 0x60, + 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, + 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, + 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, + 0x44, 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, + 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, 0x64, + 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, + 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, + 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, + 0x48, 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, + 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, 0x68, + 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, + 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, + 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, + 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, + 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x6c, + 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, + 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, + 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, + 0x50, 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, + 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, 0x70, + 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, + 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, + 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, + 0x54, 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, + 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, 0x74, + 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, + 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, + 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, + 0x58, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, + 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, 0x78, + 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, + 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, + 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, + 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, + 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x7c, + 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, + 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, + 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, + 0x60, 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, + 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, 0x80, + 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, + 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, + 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, + 0x64, 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, + 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, 0x84, + 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, + 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, + 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, + 0x68, 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, + 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, 0x88, + 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, + 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, + 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, + 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, + 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x8c, + 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, + 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, + 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, + 0x70, 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, + 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, 0x90, + 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, + 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, + 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, + 0x74, 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, + 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, 0x94, + 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, + 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, + 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, + 0x78, 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, + 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, 0x98, + 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, + 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, + 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, + 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, + 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x9c, + 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, + 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, + 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, + 0x80, 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, + 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, 0xa0, + 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, + 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, + 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, + 0x84, 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, + 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, 0xa4, + 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, + 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, + 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, + 0x88, 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, + 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, 0xa8, + 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, + 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, + 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, + 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, + 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xac, + 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, + 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, + 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, + 0x90, 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, + 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, 0xb0, + 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, + 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, + 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, + 0x94, 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, + 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, 0xb4, + 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, + 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, + 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, + 0x98, 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, + 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, 0xb8, + 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, + 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, + 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, + 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, + 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xbc, + 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, + 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, + 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, + 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, + 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xc0, + 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, + 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, + 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, + 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, + 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xc4, + 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, + 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, + 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, + 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, + 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xc8, + 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, + 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, + 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, + 0xac, 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, + 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0xcc, + 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, + 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, + 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, + 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, + 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xd0, + 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, + 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, + 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, + 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, + 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xd4, + 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, + 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, + 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, + 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, + 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, + 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, + 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, + 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, + 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, + 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xe4, + 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, + 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, + 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, + 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, 0x00, + 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0xcd, 0x02, + 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, + 0xce, 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x80, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe1, + 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, + 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, + 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, + 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, + 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, + 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, + 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, + 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, + 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, + 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, + 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, + 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, + 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, + 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, + 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, + 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, + 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, + 0x00, 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, + 0xfe, 0x01, 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, + 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x26, 0x20, + 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, 0x4d, 0x20, + 0x00, 0x00, 0x80, 0x04, 0x02, 0x02, 0x00, 0x00, + 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0x03, 0x02, + 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, + 0x04, 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, + 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, 0x4d, 0x24, + 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, 0x00, 0x00, + 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0x07, 0x02, + 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, + 0x08, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, + 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, 0x28, + 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, + 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, + 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, + 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, + 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x2c, + 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, + 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, + 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, + 0x10, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, + 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, 0x30, + 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, + 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, + 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, + 0x14, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, + 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, 0x34, + 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, + 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, + 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, + 0x18, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, + 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, 0x38, + 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, + 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, + 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, + 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, + 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x3c, + 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, + 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, + 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, + 0x20, 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, + 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, 0x40, + 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, + 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, + 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, + 0x24, 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, + 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, 0x44, + 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, + 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, + 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, + 0x28, 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, + 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, 0x48, + 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, + 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, + 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, + 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, + 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x4c, + 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, + 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, + 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, + 0x30, 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, + 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, 0x50, + 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, + 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, + 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, + 0x34, 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, + 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, 0x54, + 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, + 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, + 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, + 0x38, 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, + 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, 0x58, + 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, + 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, + 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, + 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, + 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x5c, + 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, + 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, + 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, + 0x40, 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, + 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, 0x60, + 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, + 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, + 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, + 0x44, 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, + 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, 0x64, + 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, + 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, + 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, + 0x48, 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, + 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, 0x68, + 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, + 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, + 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, + 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, + 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x6c, + 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, + 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, + 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, + 0x50, 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, + 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, 0x70, + 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, + 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, + 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, + 0x54, 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, + 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, 0x74, + 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, + 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, + 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, + 0x58, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, + 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, 0x78, + 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, + 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, + 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, + 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, + 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x7c, + 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, + 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, + 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, + 0x60, 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, + 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, 0x80, + 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, + 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, + 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, + 0x64, 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, + 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, 0x84, + 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, + 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, + 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, + 0x68, 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, + 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, 0x88, + 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, + 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, + 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, + 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, + 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x8c, + 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, + 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, + 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, + 0x70, 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, + 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, 0x90, + 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, + 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, + 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, + 0x74, 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, + 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, 0x94, + 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, + 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, + 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, + 0x78, 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, + 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, 0x98, + 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, + 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, + 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, + 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, + 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x9c, + 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, + 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, + 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, + 0x80, 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, + 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, 0xa0, + 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, + 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, + 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, + 0x84, 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, + 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, 0xa4, + 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, + 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, + 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, + 0x88, 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, + 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, 0xa8, + 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, + 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, + 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, + 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, + 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xac, + 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, + 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, + 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, + 0x90, 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, + 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, 0xb0, + 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, + 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, + 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, + 0x94, 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, + 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, 0xb4, + 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, + 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, + 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, + 0x98, 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, + 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, 0xb8, + 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, + 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, + 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, + 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, + 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xbc, + 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, + 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, + 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, + 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, + 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xc0, + 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, + 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, + 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, + 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, + 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xc4, + 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, + 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, + 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, + 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, + 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xc8, + 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, + 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, + 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, + 0xac, 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, + 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0xcc, + 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, + 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, + 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, + 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, + 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xd0, + 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, + 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, + 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, + 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, + 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xd4, + 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, + 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, + 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, + 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, + 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, + 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, + 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, + 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, + 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, + 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xe4, + 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, + 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, + 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, + 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, 0x00, + 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0xcd, 0x02, + 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, + 0xce, 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x80, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x76, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, + 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x7d, 0xbe, 0x7e, + 0xbe, 0x7f, 0xbe, 0x80, 0xbe, 0x81, 0xbe, 0x82, + 0xbe, 0x83, 0xbe, 0x84, 0xbe, 0x85, 0xbe, 0x86, + 0xbe, 0x87, 0xbe, 0x88, 0x26, 0x0c, 0x00, 0x4d, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0xcf, 0x02, 0x00, + 0x00, 0x04, 0xd0, 0x02, 0x00, 0x00, 0x04, 0xd1, + 0x02, 0x00, 0x00, 0x04, 0xd2, 0x02, 0x00, 0x00, + 0x04, 0xd3, 0x02, 0x00, 0x00, 0x04, 0xd4, 0x02, + 0x00, 0x00, 0x04, 0xd5, 0x02, 0x00, 0x00, 0x04, + 0xd6, 0x02, 0x00, 0x00, 0x04, 0xd7, 0x02, 0x00, + 0x00, 0x04, 0xd8, 0x02, 0x00, 0x00, 0x04, 0xd9, + 0x02, 0x00, 0x00, 0x04, 0xda, 0x02, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xcf, 0x02, 0x00, 0x00, 0x04, 0xd0, 0x02, + 0x00, 0x00, 0x04, 0xd1, 0x02, 0x00, 0x00, 0x04, + 0xd2, 0x02, 0x00, 0x00, 0x04, 0xd3, 0x02, 0x00, + 0x00, 0x04, 0xd4, 0x02, 0x00, 0x00, 0x04, 0xd5, + 0x02, 0x00, 0x00, 0x04, 0xd6, 0x02, 0x00, 0x00, + 0x04, 0xd7, 0x02, 0x00, 0x00, 0x04, 0xd8, 0x02, + 0x00, 0x00, 0x04, 0xd9, 0x02, 0x00, 0x00, 0x04, + 0xda, 0x02, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x62, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xdb, 0x02, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x04, 0xdb, + 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xdb, 0x02, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, + 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x44, + 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, + 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x62, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xdc, 0x02, 0x00, 0x00, 0x04, 0xdd, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0xdc, 0x02, 0x00, 0x00, 0x04, 0xdd, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xdc, 0x02, 0x00, 0x00, + 0x04, 0xdd, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x76, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x4d, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x4d, + 0x7b, 0x01, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x02, 0x00, 0x00, 0x4d, 0xdf, + 0x02, 0x00, 0x00, 0x0b, 0x04, 0xe0, 0x02, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe1, 0x02, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0xe2, 0x02, 0x00, 0x00, + 0x4d, 0xe3, 0x02, 0x00, 0x00, 0x04, 0xe4, 0x02, + 0x00, 0x00, 0x4d, 0xe5, 0x02, 0x00, 0x00, 0x4d, + 0xe6, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xe7, 0x02, + 0x00, 0x00, 0x4d, 0xe3, 0x02, 0x00, 0x00, 0x04, + 0xe8, 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x02, 0x00, + 0x00, 0x4d, 0xe9, 0x02, 0x00, 0x00, 0x0b, 0x04, + 0xea, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x02, 0x00, + 0x00, 0x04, 0xeb, 0x02, 0x00, 0x00, 0x4d, 0xe5, + 0x02, 0x00, 0x00, 0x4d, 0xec, 0x02, 0x00, 0x00, + 0x4d, 0xed, 0x02, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0xee, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x02, 0x00, + 0x00, 0x04, 0xef, 0x02, 0x00, 0x00, 0x4d, 0xf0, + 0x02, 0x00, 0x00, 0x04, 0xf1, 0x02, 0x00, 0x00, + 0x4d, 0xf2, 0x02, 0x00, 0x00, 0x04, 0xf3, 0x02, + 0x00, 0x00, 0x4d, 0xf4, 0x02, 0x00, 0x00, 0x04, + 0xf5, 0x02, 0x00, 0x00, 0x4d, 0xf6, 0x02, 0x00, + 0x00, 0x04, 0xf7, 0x02, 0x00, 0x00, 0x4d, 0xf8, + 0x02, 0x00, 0x00, 0x04, 0xf9, 0x02, 0x00, 0x00, + 0x4d, 0xfa, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x02, + 0x00, 0x00, 0x4d, 0xfb, 0x02, 0x00, 0x00, 0x0b, + 0x04, 0xfc, 0x02, 0x00, 0x00, 0x4d, 0xfd, 0x02, + 0x00, 0x00, 0x04, 0xfe, 0x02, 0x00, 0x00, 0x4d, + 0xff, 0x02, 0x00, 0x00, 0x04, 0x00, 0x03, 0x00, + 0x00, 0x4d, 0x01, 0x03, 0x00, 0x00, 0x04, 0x02, + 0x03, 0x00, 0x00, 0x4d, 0x03, 0x03, 0x00, 0x00, + 0x04, 0x04, 0x03, 0x00, 0x00, 0x4d, 0x05, 0x03, + 0x00, 0x00, 0x04, 0x06, 0x03, 0x00, 0x00, 0x4d, + 0x07, 0x03, 0x00, 0x00, 0x04, 0x08, 0x03, 0x00, + 0x00, 0x4d, 0x09, 0x03, 0x00, 0x00, 0x04, 0x0a, + 0x03, 0x00, 0x00, 0x4d, 0x0b, 0x03, 0x00, 0x00, + 0x04, 0x0c, 0x03, 0x00, 0x00, 0x4d, 0x0d, 0x03, + 0x00, 0x00, 0x04, 0x0e, 0x03, 0x00, 0x00, 0x4d, + 0x0f, 0x03, 0x00, 0x00, 0x04, 0x10, 0x03, 0x00, + 0x00, 0x4d, 0x11, 0x03, 0x00, 0x00, 0x04, 0x12, + 0x03, 0x00, 0x00, 0x4d, 0x13, 0x03, 0x00, 0x00, + 0x04, 0x14, 0x03, 0x00, 0x00, 0x4d, 0x15, 0x03, + 0x00, 0x00, 0x04, 0x16, 0x03, 0x00, 0x00, 0x4d, + 0x17, 0x03, 0x00, 0x00, 0x04, 0x18, 0x03, 0x00, + 0x00, 0x4d, 0x19, 0x03, 0x00, 0x00, 0x04, 0x1a, + 0x03, 0x00, 0x00, 0x4d, 0x1b, 0x03, 0x00, 0x00, + 0x04, 0x1c, 0x03, 0x00, 0x00, 0x4d, 0x1d, 0x03, + 0x00, 0x00, 0x04, 0x1e, 0x03, 0x00, 0x00, 0x4d, + 0x1f, 0x03, 0x00, 0x00, 0x04, 0x20, 0x03, 0x00, + 0x00, 0x4d, 0x21, 0x03, 0x00, 0x00, 0x04, 0x22, + 0x03, 0x00, 0x00, 0x4d, 0x23, 0x03, 0x00, 0x00, + 0x04, 0x24, 0x03, 0x00, 0x00, 0x4d, 0x25, 0x03, + 0x00, 0x00, 0x04, 0x26, 0x03, 0x00, 0x00, 0x4d, + 0x27, 0x03, 0x00, 0x00, 0x4d, 0x28, 0x03, 0x00, + 0x00, 0x4d, 0x45, 0x00, 0x00, 0x00, 0x24, 0x01, + 0x00, 0xcc, 0x28, 0xd2, 0x0c, 0x01, 0x00, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, + 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_sk_size = 24570; + +const uint8_t intl_sk[24570] = { + 0x01, 0xbd, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x73, 0x6b, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x0e, + 0x7b, 0x31, 0x7d, 0x20, 0x7b, 0x30, 0x7d, 0x0a, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x10, 0x7b, 0x31, + 0x7d, 0x2c, 0x20, 0x7b, 0x30, 0x7d, 0x0c, 0x6d, + 0x65, 0x64, 0x69, 0x75, 0x6d, 0x08, 0x66, 0x75, + 0x6c, 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x04, + 0x64, 0x2e, 0x02, 0x64, 0x06, 0x63, 0x63, 0x63, + 0x02, 0x45, 0x08, 0x45, 0x20, 0x64, 0x2e, 0x04, + 0x45, 0x64, 0x10, 0x45, 0x20, 0x68, 0x3a, 0x6d, + 0x6d, 0x20, 0x61, 0x06, 0x45, 0x68, 0x6d, 0x0e, + 0x45, 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x06, + 0x45, 0x48, 0x6d, 0x16, 0x45, 0x20, 0x68, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x08, + 0x45, 0x68, 0x6d, 0x73, 0x14, 0x45, 0x20, 0x48, + 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x08, + 0x45, 0x48, 0x6d, 0x73, 0x06, 0x79, 0x20, 0x47, + 0x04, 0x47, 0x79, 0x10, 0x4c, 0x4c, 0x4c, 0x4c, + 0x20, 0x79, 0x20, 0x47, 0x0a, 0x47, 0x79, 0x4d, + 0x4d, 0x4d, 0x12, 0x64, 0x2e, 0x20, 0x4d, 0x2e, + 0x20, 0x79, 0x20, 0x47, 0x0c, 0x47, 0x79, 0x4d, + 0x4d, 0x4d, 0x64, 0x18, 0x45, 0x2c, 0x20, 0x64, + 0x2e, 0x20, 0x4d, 0x2e, 0x20, 0x79, 0x20, 0x47, + 0x0e, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, + 0x0e, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, + 0x06, 0x68, 0x20, 0x61, 0x02, 0x68, 0x02, 0x48, + 0x0c, 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x04, + 0x68, 0x6d, 0x08, 0x48, 0x3a, 0x6d, 0x6d, 0x04, + 0x48, 0x6d, 0x12, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x20, 0x61, 0x06, 0x68, 0x6d, 0x73, + 0x0e, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x06, 0x48, 0x6d, 0x73, 0x16, 0x68, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x20, 0x76, + 0x08, 0x68, 0x6d, 0x73, 0x76, 0x12, 0x48, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x76, 0x08, + 0x48, 0x6d, 0x73, 0x76, 0x10, 0x68, 0x3a, 0x6d, + 0x6d, 0x20, 0x61, 0x20, 0x76, 0x06, 0x68, 0x6d, + 0x76, 0x0c, 0x48, 0x3a, 0x6d, 0x6d, 0x20, 0x76, + 0x06, 0x48, 0x6d, 0x76, 0x04, 0x4c, 0x2e, 0x02, + 0x4d, 0x0a, 0x64, 0x2e, 0x20, 0x4d, 0x2e, 0x04, + 0x4d, 0x64, 0x0e, 0x45, 0x20, 0x64, 0x2e, 0x20, + 0x4d, 0x2e, 0x06, 0x4d, 0x45, 0x64, 0x06, 0x4c, + 0x4c, 0x4c, 0x06, 0x4d, 0x4d, 0x4d, 0x08, 0x4d, + 0x4d, 0x4d, 0x64, 0x0a, 0x4d, 0x4d, 0x4d, 0x45, + 0x64, 0x0e, 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, + 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x12, + 0x45, 0x20, 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, + 0x4d, 0x0c, 0x4d, 0x4d, 0x4d, 0x4d, 0x45, 0x64, + 0x0a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x08, 0x6d, + 0x6d, 0x73, 0x73, 0x04, 0x6d, 0x73, 0x02, 0x79, + 0x06, 0x4d, 0x2f, 0x79, 0x04, 0x79, 0x4d, 0x0e, + 0x64, 0x2e, 0x20, 0x4d, 0x2e, 0x20, 0x79, 0x06, + 0x79, 0x4d, 0x64, 0x12, 0x45, 0x20, 0x64, 0x2e, + 0x20, 0x4d, 0x2e, 0x20, 0x79, 0x08, 0x79, 0x4d, + 0x45, 0x64, 0x08, 0x79, 0x4d, 0x4d, 0x4d, 0x0a, + 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x0c, 0x79, 0x4d, + 0x4d, 0x4d, 0x45, 0x64, 0x0c, 0x4c, 0x4c, 0x4c, + 0x4c, 0x20, 0x79, 0x0a, 0x79, 0x4d, 0x4d, 0x4d, + 0x4d, 0x12, 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, + 0x4d, 0x20, 0x79, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, + 0x4d, 0x64, 0x0a, 0x51, 0x51, 0x51, 0x20, 0x79, + 0x08, 0x79, 0x51, 0x51, 0x51, 0x0c, 0x51, 0x51, + 0x51, 0x51, 0x20, 0x79, 0x0a, 0x79, 0x51, 0x51, + 0x51, 0x51, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, + 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x73, 0x1e, 0x45, 0x45, 0x45, 0x45, + 0x2c, 0x20, 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, + 0x4d, 0x20, 0x79, 0x14, 0x79, 0x4d, 0x4d, 0x4d, + 0x4d, 0x45, 0x45, 0x45, 0x45, 0x64, 0x0c, 0x64, + 0x2e, 0x4d, 0x2e, 0x79, 0x79, 0x16, 0x64, 0x61, + 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x73, 0x18, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x7a, 0x7a, 0x7a, 0x7a, 0x12, 0x68, + 0x6d, 0x6d, 0x73, 0x73, 0x7a, 0x7a, 0x7a, 0x7a, + 0x12, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x7a, 0x08, 0x68, 0x6d, 0x73, 0x7a, 0x16, + 0x74, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x73, 0x0e, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x73, 0x02, 0x6a, 0x02, 0x66, 0x02, + 0x6d, 0x02, 0x61, 0x02, 0x73, 0x02, 0x6f, 0x02, + 0x6e, 0x0c, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x06, 0x6a, 0x61, 0x6e, 0x06, 0x66, 0x65, 0x62, + 0x06, 0x6d, 0x61, 0x72, 0x06, 0x61, 0x70, 0x72, + 0x06, 0x6d, 0xe1, 0x6a, 0x06, 0x6a, 0xfa, 0x6e, + 0x06, 0x6a, 0xfa, 0x6c, 0x06, 0x61, 0x75, 0x67, + 0x06, 0x73, 0x65, 0x70, 0x06, 0x6f, 0x6b, 0x74, + 0x06, 0x6e, 0x6f, 0x76, 0x06, 0x64, 0x65, 0x63, + 0x0e, 0x6a, 0x61, 0x6e, 0x75, 0xe1, 0x72, 0x61, + 0x10, 0x66, 0x65, 0x62, 0x72, 0x75, 0xe1, 0x72, + 0x61, 0x0a, 0x6d, 0x61, 0x72, 0x63, 0x61, 0x0c, + 0x61, 0x70, 0x72, 0xed, 0x6c, 0x61, 0x08, 0x6d, + 0xe1, 0x6a, 0x61, 0x08, 0x6a, 0xfa, 0x6e, 0x61, + 0x08, 0x6a, 0xfa, 0x6c, 0x61, 0x0e, 0x61, 0x75, + 0x67, 0x75, 0x73, 0x74, 0x61, 0x12, 0x73, 0x65, + 0x70, 0x74, 0x65, 0x6d, 0x62, 0x72, 0x61, 0x0e, + 0x6f, 0x6b, 0x74, 0xf3, 0x62, 0x72, 0x61, 0x10, + 0x6e, 0x6f, 0x76, 0x65, 0x6d, 0x62, 0x72, 0x61, + 0x10, 0x64, 0x65, 0x63, 0x65, 0x6d, 0x62, 0x72, + 0x61, 0x0c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x73, + 0x02, 0x70, 0x02, 0x75, 0x03, 0x61, 0x01, 0x04, + 0x6e, 0x65, 0x04, 0x70, 0x6f, 0x04, 0x75, 0x74, + 0x04, 0x73, 0x74, 0x05, 0x61, 0x01, 0x74, 0x00, + 0x04, 0x70, 0x69, 0x04, 0x73, 0x6f, 0x0d, 0x6e, + 0x00, 0x65, 0x00, 0x64, 0x00, 0x65, 0x00, 0x3e, + 0x01, 0x61, 0x00, 0x10, 0x70, 0x6f, 0x6e, 0x64, + 0x65, 0x6c, 0x6f, 0x6b, 0x0c, 0x75, 0x74, 0x6f, + 0x72, 0x6f, 0x6b, 0x0c, 0x73, 0x74, 0x72, 0x65, + 0x64, 0x61, 0x0f, 0x61, 0x01, 0x74, 0x00, 0x76, + 0x00, 0x72, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x0c, 0x70, 0x69, 0x61, 0x74, 0x6f, 0x6b, + 0x0c, 0x73, 0x6f, 0x62, 0x6f, 0x74, 0x61, 0x08, + 0x64, 0x61, 0x79, 0x73, 0x04, 0x42, 0x45, 0x08, + 0x65, 0x72, 0x61, 0x73, 0x04, 0x41, 0x4d, 0x04, + 0x61, 0x6d, 0x04, 0x50, 0x4d, 0x04, 0x70, 0x6d, + 0x14, 0x64, 0x61, 0x79, 0x50, 0x65, 0x72, 0x69, + 0x6f, 0x64, 0x73, 0x06, 0x4d, 0x30, 0x31, 0x06, + 0x4d, 0x30, 0x32, 0x06, 0x4d, 0x30, 0x33, 0x06, + 0x4d, 0x30, 0x34, 0x06, 0x4d, 0x30, 0x35, 0x06, + 0x4d, 0x30, 0x36, 0x06, 0x4d, 0x30, 0x37, 0x06, + 0x4d, 0x30, 0x38, 0x06, 0x4d, 0x30, 0x39, 0x06, + 0x4d, 0x31, 0x30, 0x06, 0x4d, 0x31, 0x31, 0x06, + 0x4d, 0x31, 0x32, 0x08, 0x54, 0x6f, 0x75, 0x74, + 0x08, 0x42, 0x61, 0x62, 0x61, 0x0a, 0x48, 0x61, + 0x74, 0x6f, 0x72, 0x0a, 0x4b, 0x69, 0x61, 0x68, + 0x6b, 0x08, 0x54, 0x6f, 0x62, 0x61, 0x0c, 0x41, + 0x6d, 0x73, 0x68, 0x69, 0x72, 0x10, 0x42, 0x61, + 0x72, 0x61, 0x6d, 0x68, 0x61, 0x74, 0x12, 0x42, + 0x61, 0x72, 0x61, 0x6d, 0x6f, 0x75, 0x64, 0x61, + 0x0e, 0x42, 0x61, 0x73, 0x68, 0x61, 0x6e, 0x73, + 0x0a, 0x50, 0x61, 0x6f, 0x6e, 0x61, 0x08, 0x45, + 0x70, 0x65, 0x70, 0x0a, 0x4d, 0x65, 0x73, 0x72, + 0x61, 0x0a, 0x4e, 0x61, 0x73, 0x69, 0x65, 0x08, + 0x45, 0x52, 0x41, 0x30, 0x08, 0x45, 0x52, 0x41, + 0x31, 0x10, 0x4d, 0x65, 0x73, 0x6b, 0x65, 0x72, + 0x65, 0x6d, 0x0c, 0x54, 0x65, 0x6b, 0x65, 0x6d, + 0x74, 0x0a, 0x48, 0x65, 0x64, 0x61, 0x72, 0x0c, + 0x54, 0x61, 0x68, 0x73, 0x61, 0x73, 0x06, 0x54, + 0x65, 0x72, 0x0e, 0x59, 0x65, 0x6b, 0x61, 0x74, + 0x69, 0x74, 0x0e, 0x4d, 0x65, 0x67, 0x61, 0x62, + 0x69, 0x74, 0x0c, 0x4d, 0x69, 0x61, 0x7a, 0x69, + 0x61, 0x0c, 0x47, 0x65, 0x6e, 0x62, 0x6f, 0x74, + 0x08, 0x53, 0x65, 0x6e, 0x65, 0x0a, 0x48, 0x61, + 0x6d, 0x6c, 0x65, 0x0e, 0x4e, 0x65, 0x68, 0x61, + 0x73, 0x73, 0x65, 0x0e, 0x50, 0x61, 0x67, 0x75, + 0x6d, 0x65, 0x6e, 0x10, 0x70, 0x72, 0x65, 0x64, + 0x20, 0x4b, 0x72, 0x2e, 0x0c, 0x70, 0x6f, 0x20, + 0x4b, 0x72, 0x2e, 0x14, 0x70, 0x72, 0x65, 0x64, + 0x20, 0x6e, 0x2e, 0x20, 0x6c, 0x2e, 0x0a, 0x6e, + 0x2e, 0x20, 0x6c, 0x2e, 0x18, 0x70, 0x72, 0x65, + 0x64, 0x20, 0x4b, 0x72, 0x69, 0x73, 0x74, 0x6f, + 0x6d, 0x16, 0x70, 0x6f, 0x20, 0x4b, 0x72, 0x69, + 0x73, 0x74, 0x6f, 0x76, 0x69, 0x2b, 0x70, 0x00, + 0x72, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, + 0x6e, 0x00, 0x61, 0x00, 0x61, 0x01, 0xed, 0x00, + 0x6d, 0x00, 0x20, 0x00, 0x6c, 0x00, 0x65, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x70, 0x00, 0x6f, 0x00, + 0x0d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6d, 0x00, + 0x1f, 0x6e, 0x00, 0xe1, 0x00, 0x61, 0x01, 0x68, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x6c, 0x00, 0x65, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x70, 0x00, 0x6f, + 0x00, 0x0d, 0x01, 0x74, 0x00, 0x75, 0x00, 0x0c, + 0x54, 0x69, 0x73, 0x68, 0x72, 0x69, 0x0e, 0x48, + 0x65, 0x73, 0x68, 0x76, 0x61, 0x6e, 0x0c, 0x4b, + 0x69, 0x73, 0x6c, 0x65, 0x76, 0x0a, 0x54, 0x65, + 0x76, 0x65, 0x74, 0x0c, 0x53, 0x68, 0x65, 0x76, + 0x61, 0x74, 0x0c, 0x41, 0x64, 0x61, 0x72, 0x20, + 0x49, 0x08, 0x41, 0x64, 0x61, 0x72, 0x0a, 0x4e, + 0x69, 0x73, 0x61, 0x6e, 0x08, 0x49, 0x79, 0x61, + 0x72, 0x0a, 0x53, 0x69, 0x76, 0x61, 0x6e, 0x0a, + 0x54, 0x61, 0x6d, 0x75, 0x7a, 0x04, 0x41, 0x76, + 0x08, 0x45, 0x6c, 0x75, 0x6c, 0x0e, 0x41, 0x64, + 0x61, 0x72, 0x20, 0x49, 0x49, 0x0e, 0x43, 0x68, + 0x61, 0x69, 0x74, 0x72, 0x61, 0x10, 0x56, 0x61, + 0x69, 0x73, 0x61, 0x6b, 0x68, 0x61, 0x10, 0x4a, + 0x79, 0x61, 0x69, 0x73, 0x74, 0x68, 0x61, 0x0c, + 0x41, 0x73, 0x61, 0x64, 0x68, 0x61, 0x0e, 0x53, + 0x72, 0x61, 0x76, 0x61, 0x6e, 0x61, 0x0c, 0x42, + 0x68, 0x61, 0x64, 0x72, 0x61, 0x0c, 0x41, 0x73, + 0x76, 0x69, 0x6e, 0x61, 0x0e, 0x4b, 0x61, 0x72, + 0x74, 0x69, 0x6b, 0x61, 0x14, 0x41, 0x67, 0x72, + 0x61, 0x68, 0x61, 0x79, 0x61, 0x6e, 0x61, 0x0a, + 0x50, 0x61, 0x75, 0x73, 0x61, 0x0a, 0x4d, 0x61, + 0x67, 0x68, 0x61, 0x10, 0x50, 0x68, 0x61, 0x6c, + 0x67, 0x75, 0x6e, 0x61, 0x08, 0x53, 0x61, 0x6b, + 0x61, 0x08, 0x4d, 0x75, 0x68, 0x2e, 0x08, 0x53, + 0x61, 0x66, 0x2e, 0x0c, 0x52, 0x61, 0x62, 0x2e, + 0x20, 0x49, 0x0e, 0x52, 0x61, 0x62, 0x2e, 0x20, + 0x49, 0x49, 0x0c, 0x4a, 0x75, 0x6d, 0x2e, 0x20, + 0x49, 0x0e, 0x4a, 0x75, 0x6d, 0x2e, 0x20, 0x49, + 0x49, 0x08, 0x52, 0x61, 0x6a, 0x2e, 0x08, 0x53, + 0x68, 0x61, 0x2e, 0x08, 0x52, 0x61, 0x6d, 0x2e, + 0x0a, 0x53, 0x68, 0x61, 0x77, 0x2e, 0x11, 0x44, + 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, + 0x00, 0x2d, 0x00, 0x51, 0x00, 0x2e, 0x00, 0x11, + 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, + 0x6c, 0x00, 0x2d, 0x00, 0x48, 0x00, 0x2e, 0x00, + 0x10, 0x4d, 0x75, 0x68, 0x61, 0x72, 0x72, 0x61, + 0x6d, 0x0a, 0x53, 0x61, 0x66, 0x61, 0x72, 0x0f, + 0x52, 0x00, 0x61, 0x00, 0x62, 0x00, 0x69, 0x00, + 0xbb, 0x02, 0x20, 0x00, 0x49, 0x00, 0x11, 0x52, + 0x00, 0x61, 0x00, 0x62, 0x00, 0x69, 0x00, 0xbb, + 0x02, 0x20, 0x00, 0x49, 0x00, 0x49, 0x00, 0x10, + 0x4a, 0x75, 0x6d, 0x61, 0x64, 0x61, 0x20, 0x49, + 0x12, 0x4a, 0x75, 0x6d, 0x61, 0x64, 0x61, 0x20, + 0x49, 0x49, 0x0a, 0x52, 0x61, 0x6a, 0x61, 0x62, + 0x0f, 0x53, 0x00, 0x68, 0x00, 0x61, 0x00, 0xbb, + 0x02, 0x62, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x0e, + 0x52, 0x61, 0x6d, 0x61, 0x64, 0x61, 0x6e, 0x0e, + 0x53, 0x68, 0x61, 0x77, 0x77, 0x61, 0x6c, 0x19, + 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, + 0x6c, 0x00, 0x2d, 0x00, 0x51, 0x00, 0x69, 0x00, + 0xbb, 0x02, 0x64, 0x00, 0x61, 0x00, 0x68, 0x00, + 0x19, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, + 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x48, 0x00, 0x69, + 0x00, 0x6a, 0x00, 0x6a, 0x00, 0x61, 0x00, 0x68, + 0x00, 0x04, 0x41, 0x48, 0x1f, 0x54, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x36, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x36, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x13, 0x20, 0x36, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x36, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x29, 0x00, 0x21, + 0x53, 0x00, 0x68, 0x00, 0x75, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x57, + 0x00, 0x61, 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x1f, 0x52, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x1d, 0x59, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, + 0x4a, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6b, 0x00, + 0x61, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x2d, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x2d, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x2b, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x2d, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, 0x2d, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x2a, 0x4a, 0x69, 0x6e, 0x67, 0x6f, 0x2d, + 0x6b, 0x65, 0x69, 0x75, 0x6e, 0x20, 0x28, 0x37, + 0x36, 0x37, 0x2d, 0x37, 0x37, 0x30, 0x29, 0x1d, + 0x48, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x37, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, 0x44, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x64, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x38, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x4d, 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x38, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4a, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x61, 0x00, 0x6a, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, + 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x53, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x20, 0x54, 0x65, + 0x6e, 0x2d, 0x61, 0x6e, 0x20, 0x28, 0x38, 0x35, + 0x37, 0x2d, 0x38, 0x35, 0x39, 0x29, 0x1f, 0x4a, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, + 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, 0x6e, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x34, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1b, 0x4c, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4b, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x1d, 0x41, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1d, + 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x4a, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x29, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, + 0x4a, 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x29, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, + 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4c, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x25, 0x4a, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x24, 0x54, 0x65, 0x6e, 0x2d, 0x65, 0x69, + 0x20, 0x28, 0x31, 0x31, 0x31, 0x30, 0x2d, 0x31, + 0x31, 0x31, 0x33, 0x29, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, + 0x4d, 0x01, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, + 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x6a, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x48, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x45, + 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, + 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6d, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4a, + 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x59, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x21, 0x4a, 0x00, 0x75, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x29, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4a, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x29, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, + 0x4a, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x27, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x75, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x29, 0x52, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x4e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, + 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, 0x00, + 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1f, 0x4c, 0x01, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x74, 0x00, 0x73, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x27, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x45, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x21, 0x4d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, 0x69, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x27, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x21, 0x45, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x61, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x41, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, 0x02, + 0x54, 0x02, 0x53, 0x0a, 0x4d, 0x65, 0x69, 0x6a, + 0x69, 0x0d, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x0b, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x0c, 0x48, 0x65, 0x69, 0x73, 0x65, 0x69, + 0x12, 0x46, 0x61, 0x72, 0x76, 0x61, 0x72, 0x64, + 0x69, 0x6e, 0x16, 0x4f, 0x72, 0x64, 0x69, 0x62, + 0x65, 0x68, 0x65, 0x73, 0x68, 0x74, 0x0e, 0x4b, + 0x68, 0x6f, 0x72, 0x64, 0x61, 0x64, 0x06, 0x54, + 0x69, 0x72, 0x0c, 0x4d, 0x6f, 0x72, 0x64, 0x61, + 0x64, 0x12, 0x53, 0x68, 0x61, 0x68, 0x72, 0x69, + 0x76, 0x61, 0x72, 0x08, 0x4d, 0x65, 0x68, 0x72, + 0x08, 0x41, 0x62, 0x61, 0x6e, 0x08, 0x41, 0x7a, + 0x61, 0x72, 0x06, 0x44, 0x65, 0x79, 0x0c, 0x42, + 0x61, 0x68, 0x6d, 0x61, 0x6e, 0x0c, 0x45, 0x73, + 0x66, 0x61, 0x6e, 0x64, 0x04, 0x41, 0x50, 0x1a, + 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x52, + 0x2e, 0x4f, 0x2e, 0x43, 0x2e, 0x0c, 0x52, 0x2e, + 0x4f, 0x2e, 0x43, 0x2e, 0x12, 0x63, 0x61, 0x6c, + 0x65, 0x6e, 0x64, 0x61, 0x72, 0x73, 0x08, 0x64, + 0x61, 0x74, 0x65, 0x08, 0x6c, 0x61, 0x74, 0x6e, + 0x04, 0x6e, 0x75, 0x10, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, + 0x74, 0x65, 0x72, 0x6e, 0x26, 0x7b, 0x6d, 0x69, + 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0x1e, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, + 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, + 0x0e, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, + 0x26, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0xa0, 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x63, 0x79, 0x7d, 0x3c, 0x7b, 0x6d, 0x69, + 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0xa0, 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x79, 0x7d, 0x10, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x63, 0x79, 0x2c, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0xa0, 0x7b, 0x70, + 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, + 0x67, 0x6e, 0x7d, 0x42, 0x7b, 0x6d, 0x69, 0x6e, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0xa0, + 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x0e, 0x70, 0x65, + 0x72, 0x63, 0x65, 0x6e, 0x74, 0x10, 0x70, 0x61, + 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x02, 0x2c, + 0x02, 0xa0, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x06, 0x4e, 0x61, 0x4e, 0x06, 0x6e, 0x61, 0x6e, + 0x02, 0x2b, 0x10, 0x70, 0x6c, 0x75, 0x73, 0x53, + 0x69, 0x67, 0x6e, 0x02, 0x2d, 0x12, 0x6d, 0x69, + 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, + 0x25, 0x16, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, + 0x74, 0x53, 0x69, 0x67, 0x6e, 0x03, 0x1e, 0x22, + 0x10, 0x69, 0x6e, 0x66, 0x69, 0x6e, 0x69, 0x74, + 0x79, 0x0e, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, + 0x73, 0x03, 0xac, 0x20, 0x06, 0x45, 0x55, 0x52, + 0x06, 0x4e, 0x49, 0x53, 0x06, 0x49, 0x4c, 0x53, + 0x06, 0x4d, 0x58, 0x24, 0x06, 0x4d, 0x58, 0x4e, + 0x08, 0x46, 0x43, 0x46, 0x41, 0x06, 0x58, 0x41, + 0x46, 0x06, 0x45, 0x43, 0x24, 0x06, 0x58, 0x43, + 0x44, 0x06, 0x43, 0x46, 0x41, 0x06, 0x58, 0x4f, + 0x46, 0x08, 0x43, 0x46, 0x50, 0x46, 0x06, 0x58, + 0x50, 0x46, 0x14, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x63, 0x69, 0x65, 0x73, 0x52, 0x6e, 0x6f, + 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2f, + 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, + 0x61, 0x74, 0x61, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, + 0x70, 0x2f, 0x73, 0x6b, 0x2e, 0x6a, 0x73, 0x0d, + 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, + 0x27, 0x00, 0x89, 0x01, 0xfa, 0x69, 0x01, 0xa0, + 0x01, 0x00, 0x00, 0x00, 0x39, 0xd0, 0x00, 0x00, + 0x00, 0x43, 0xd1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd2, 0x00, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd4, 0x00, 0x00, 0x00, 0x04, + 0xd5, 0x00, 0x00, 0x00, 0x04, 0xd6, 0x00, 0x00, + 0x00, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x04, 0xd8, + 0x00, 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, 0x00, + 0x04, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdb, 0x00, + 0x00, 0x00, 0x04, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0xdd, 0x00, 0x00, 0x00, 0x04, 0xde, 0x00, 0x00, + 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, 0x04, 0xe0, + 0x00, 0x00, 0x00, 0x04, 0xe1, 0x00, 0x00, 0x00, + 0x04, 0xe2, 0x00, 0x00, 0x00, 0x26, 0x0f, 0x00, + 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x0a, 0x4d, 0xe4, + 0x00, 0x00, 0x00, 0x09, 0x4d, 0xe5, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe8, 0x00, 0x00, + 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x00, 0x04, 0xe8, + 0x00, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xec, 0x00, 0x00, 0x00, + 0x4d, 0xed, 0x00, 0x00, 0x00, 0x04, 0xee, 0x00, + 0x00, 0x00, 0x4d, 0xef, 0x00, 0x00, 0x00, 0x04, + 0xf0, 0x00, 0x00, 0x00, 0x4d, 0xf1, 0x00, 0x00, + 0x00, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xf3, + 0x00, 0x00, 0x00, 0x04, 0xf4, 0x00, 0x00, 0x00, + 0x4d, 0xf5, 0x00, 0x00, 0x00, 0x04, 0xf6, 0x00, + 0x00, 0x00, 0x4d, 0xf7, 0x00, 0x00, 0x00, 0x04, + 0xf8, 0x00, 0x00, 0x00, 0x4d, 0xf9, 0x00, 0x00, + 0x00, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xfb, + 0x00, 0x00, 0x00, 0x04, 0xfc, 0x00, 0x00, 0x00, + 0x4d, 0xfd, 0x00, 0x00, 0x00, 0x04, 0xfe, 0x00, + 0x00, 0x00, 0x4d, 0xff, 0x00, 0x00, 0x00, 0x04, + 0x00, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x01, 0x00, + 0x00, 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, 0x02, + 0x01, 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, 0x00, + 0x4d, 0x04, 0x01, 0x00, 0x00, 0x04, 0x05, 0x01, + 0x00, 0x00, 0x4d, 0x05, 0x01, 0x00, 0x00, 0x04, + 0x06, 0x01, 0x00, 0x00, 0x4d, 0x07, 0x01, 0x00, + 0x00, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, 0x09, + 0x01, 0x00, 0x00, 0x04, 0x0a, 0x01, 0x00, 0x00, + 0x4d, 0x0b, 0x01, 0x00, 0x00, 0x04, 0x0c, 0x01, + 0x00, 0x00, 0x4d, 0x0d, 0x01, 0x00, 0x00, 0x04, + 0x0e, 0x01, 0x00, 0x00, 0x4d, 0x0f, 0x01, 0x00, + 0x00, 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, 0x11, + 0x01, 0x00, 0x00, 0x04, 0x12, 0x01, 0x00, 0x00, + 0x4d, 0x13, 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, + 0x00, 0x00, 0x4d, 0x15, 0x01, 0x00, 0x00, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x4d, 0x17, 0x01, 0x00, + 0x00, 0x04, 0x18, 0x01, 0x00, 0x00, 0x4d, 0x19, + 0x01, 0x00, 0x00, 0x04, 0x1a, 0x01, 0x00, 0x00, + 0x4d, 0x1b, 0x01, 0x00, 0x00, 0x04, 0x1c, 0x01, + 0x00, 0x00, 0x4d, 0x1d, 0x01, 0x00, 0x00, 0x04, + 0x18, 0x01, 0x00, 0x00, 0x4d, 0x1e, 0x01, 0x00, + 0x00, 0x04, 0x1a, 0x01, 0x00, 0x00, 0x4d, 0x1f, + 0x01, 0x00, 0x00, 0x04, 0x20, 0x01, 0x00, 0x00, + 0x4d, 0x21, 0x01, 0x00, 0x00, 0x04, 0x22, 0x01, + 0x00, 0x00, 0x4d, 0x23, 0x01, 0x00, 0x00, 0x04, + 0x24, 0x01, 0x00, 0x00, 0x4d, 0x25, 0x01, 0x00, + 0x00, 0x04, 0x24, 0x01, 0x00, 0x00, 0x4d, 0x26, + 0x01, 0x00, 0x00, 0x04, 0x27, 0x01, 0x00, 0x00, + 0x4d, 0x27, 0x01, 0x00, 0x00, 0x04, 0x28, 0x01, + 0x00, 0x00, 0x4d, 0x29, 0x01, 0x00, 0x00, 0x04, + 0x2a, 0x01, 0x00, 0x00, 0x4d, 0x2b, 0x01, 0x00, + 0x00, 0x04, 0x2c, 0x01, 0x00, 0x00, 0x4d, 0x2d, + 0x01, 0x00, 0x00, 0x04, 0x28, 0x01, 0x00, 0x00, + 0x4d, 0x2e, 0x01, 0x00, 0x00, 0x04, 0x2a, 0x01, + 0x00, 0x00, 0x4d, 0x2f, 0x01, 0x00, 0x00, 0x04, + 0x2c, 0x01, 0x00, 0x00, 0x4d, 0x30, 0x01, 0x00, + 0x00, 0x04, 0x31, 0x01, 0x00, 0x00, 0x4d, 0x32, + 0x01, 0x00, 0x00, 0x04, 0x33, 0x01, 0x00, 0x00, + 0x4d, 0x34, 0x01, 0x00, 0x00, 0x04, 0x35, 0x01, + 0x00, 0x00, 0x4d, 0x36, 0x01, 0x00, 0x00, 0x04, + 0x37, 0x01, 0x00, 0x00, 0x4d, 0x38, 0x01, 0x00, + 0x00, 0x4d, 0x39, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x3a, 0x01, 0x00, 0x00, 0x4d, 0x3b, 0x01, 0x00, + 0x00, 0x04, 0x33, 0x01, 0x00, 0x00, 0x4d, 0x34, + 0x01, 0x00, 0x00, 0x04, 0x2a, 0x01, 0x00, 0x00, + 0x4d, 0x2f, 0x01, 0x00, 0x00, 0x04, 0x3c, 0x01, + 0x00, 0x00, 0x4d, 0x2b, 0x01, 0x00, 0x00, 0x4d, + 0x3d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x3e, 0x01, + 0x00, 0x00, 0x4d, 0x3f, 0x01, 0x00, 0x00, 0x04, + 0x40, 0x01, 0x00, 0x00, 0x4d, 0x41, 0x01, 0x00, + 0x00, 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, 0x0b, + 0x01, 0x00, 0x00, 0x04, 0x08, 0x01, 0x00, 0x00, + 0x4d, 0x07, 0x01, 0x00, 0x00, 0x4d, 0x42, 0x01, + 0x00, 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x0b, 0x04, 0x44, 0x01, 0x00, 0x00, 0x04, + 0x45, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x46, + 0x01, 0x00, 0x00, 0x04, 0x44, 0x01, 0x00, 0x00, + 0x04, 0x44, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0xed, 0x00, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x64, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x76, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x4d, + 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, + 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x00, 0xbe, 0x01, 0xbe, 0x02, 0xbe, 0x03, + 0xbe, 0x04, 0xbe, 0x05, 0xbe, 0x06, 0xbe, 0x07, + 0xbe, 0x08, 0xbe, 0x09, 0xbe, 0x0a, 0xbe, 0x0b, + 0x26, 0x0c, 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, + 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, + 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, + 0x89, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x64, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x76, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, + 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0xd6, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x0c, 0xbe, + 0x0d, 0xbe, 0x0e, 0xbe, 0x0f, 0xbe, 0x10, 0xbe, + 0x11, 0xbe, 0x12, 0xbe, 0x13, 0xbe, 0x14, 0xbe, + 0x15, 0xbe, 0x16, 0xbe, 0x17, 0xbe, 0x18, 0x26, + 0x0d, 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, + 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, + 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, + 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, + 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, + 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, + 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, + 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, + 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, + 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, + 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, + 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, + 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, + 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, + 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x97, + 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, + 0x98, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, + 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x19, 0xbe, 0x1a, 0xbe, 0x1b, + 0xbe, 0x1c, 0xbe, 0x1d, 0xbe, 0x1e, 0xbe, 0x1f, + 0xbe, 0x20, 0xbe, 0x21, 0xbe, 0x22, 0xbe, 0x23, + 0xbe, 0x24, 0x26, 0x0c, 0x00, 0x4d, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, + 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7e, + 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, + 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, + 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, + 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, + 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, + 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x25, 0xbe, 0x26, 0xbe, 0x27, 0xbe, 0x28, 0xbe, + 0x29, 0xbe, 0x2a, 0xbe, 0x2b, 0xbe, 0x2c, 0xbe, + 0x2d, 0xbe, 0x2e, 0xbe, 0x2f, 0xbe, 0x30, 0xbe, + 0x31, 0x26, 0x0d, 0x00, 0x4d, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, + 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, + 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, + 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, + 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, + 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, + 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, + 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, + 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, + 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, + 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, + 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, + 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, + 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, + 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, + 0x98, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, + 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x78, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, + 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x32, 0xbe, 0x33, + 0xbe, 0x34, 0xbe, 0x35, 0xbe, 0x36, 0xbe, 0x37, + 0xbe, 0x38, 0xbe, 0x39, 0xbe, 0x3a, 0xbe, 0x3b, + 0xbe, 0x3c, 0xbe, 0x3d, 0xbe, 0x3e, 0x26, 0x0d, + 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x99, + 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, + 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, + 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, + 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, + 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, + 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, + 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, + 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, + 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, + 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, + 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, + 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, + 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, + 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, + 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x64, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x76, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x97, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x97, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, + 0x01, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x3f, 0xbe, 0x40, 0xbe, 0x41, + 0xbe, 0x42, 0xbe, 0x43, 0xbe, 0x44, 0xbe, 0x45, + 0xbe, 0x46, 0xbe, 0x47, 0xbe, 0x48, 0xbe, 0x49, + 0xbe, 0x4a, 0x26, 0x0c, 0x00, 0x4d, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, + 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7e, + 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, + 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, + 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, + 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, + 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, + 0x04, 0x98, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x78, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x4d, + 0x7d, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x44, 0x01, 0x00, 0x00, + 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x04, 0x44, 0x01, 0x00, + 0x00, 0x04, 0x44, 0x01, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0xed, 0x00, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x64, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x76, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xa6, 0x01, 0x00, + 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, + 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, + 0x26, 0x04, 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, + 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, + 0xa9, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, + 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, + 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, + 0x26, 0x04, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x78, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, + 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x4b, + 0xbe, 0x4c, 0xbe, 0x4d, 0xbe, 0x4e, 0xbe, 0x4f, + 0xbe, 0x50, 0xbe, 0x51, 0xbe, 0x52, 0xbe, 0x53, + 0xbe, 0x54, 0xbe, 0x55, 0xbe, 0x56, 0xbe, 0x57, + 0xbe, 0x58, 0x26, 0x0e, 0x00, 0x4d, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, + 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, + 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, + 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, + 0x04, 0xb4, 0x01, 0x00, 0x00, 0x04, 0xb5, 0x01, + 0x00, 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, 0x04, + 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, + 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, + 0x01, 0x00, 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, + 0x26, 0x0e, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, + 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, + 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, + 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, + 0x01, 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, + 0x04, 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, + 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, 0x04, + 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, + 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, 0x26, 0x0e, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x64, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x76, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x4d, + 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x59, 0xbe, 0x5a, 0xbe, 0x5b, 0xbe, 0x5c, + 0xbe, 0x5d, 0xbe, 0x5e, 0xbe, 0x5f, 0xbe, 0x60, + 0xbe, 0x61, 0xbe, 0x62, 0xbe, 0x63, 0xbe, 0x64, + 0x26, 0x0c, 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0xbc, 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, + 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, + 0xbf, 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, + 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, 0x04, 0xc2, + 0x01, 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, + 0x04, 0xc4, 0x01, 0x00, 0x00, 0x04, 0xc5, 0x01, + 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, + 0xc7, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, + 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, 0x04, 0xbe, + 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, + 0x04, 0xc0, 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, + 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, 0x00, 0x04, + 0xc3, 0x01, 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, + 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, + 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x64, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x76, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xc8, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xc8, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, + 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x65, 0xbe, 0x66, 0xbe, 0x67, + 0xbe, 0x68, 0xbe, 0x69, 0xbe, 0x6a, 0xbe, 0x6b, + 0xbe, 0x6c, 0xbe, 0x6d, 0xbe, 0x6e, 0xbe, 0x6f, + 0xbe, 0x70, 0x26, 0x0c, 0x00, 0x4d, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, 0x04, + 0xca, 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, + 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, + 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, + 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, 0x01, + 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, 0x04, + 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, + 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd5, + 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, + 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, 0xd8, 0x01, + 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, 0x04, + 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, 0x00, + 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, 0x04, 0xdd, + 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, 0x00, + 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, 0xe0, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xe1, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xe1, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x78, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, + 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x71, 0xbe, 0x72, + 0xbe, 0x73, 0xbe, 0x74, 0xbe, 0x75, 0xbe, 0x76, + 0xbe, 0x77, 0xbe, 0x78, 0xbe, 0x79, 0xbe, 0x7a, + 0xbe, 0x7b, 0xbe, 0x7c, 0x26, 0x0c, 0x00, 0x4d, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, + 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, 0x04, 0xcb, + 0x01, 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, + 0x04, 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, + 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, + 0xd0, 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, + 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, + 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, + 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, + 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, + 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, + 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, + 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, + 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, + 0xe0, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xe1, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x04, 0xe1, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x78, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, + 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x44, + 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, + 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, + 0x44, 0x01, 0x00, 0x00, 0x04, 0x44, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0xed, 0x00, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xe2, 0x01, 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, + 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, + 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, + 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, + 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, + 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, + 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, + 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, + 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, + 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, + 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, + 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, + 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, + 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, + 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, + 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, + 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, + 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, + 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, 0x02, + 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, 0x26, + 0x20, 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, 0x4d, + 0x20, 0x00, 0x00, 0x80, 0x04, 0x03, 0x02, 0x00, + 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0x04, + 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, + 0x04, 0x05, 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, + 0x00, 0x80, 0x04, 0x06, 0x02, 0x00, 0x00, 0x4d, + 0x24, 0x00, 0x00, 0x80, 0x04, 0x07, 0x02, 0x00, + 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0x08, + 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, + 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, + 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x4d, + 0x28, 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, 0x00, + 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0x0c, + 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, + 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, + 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, + 0x2c, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, + 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0x10, + 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, + 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, + 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, + 0x30, 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, + 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0x14, + 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, + 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, + 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, + 0x34, 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, + 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0x18, + 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, + 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, + 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, + 0x38, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, + 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0x1c, + 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, + 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, + 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, + 0x3c, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, + 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x20, + 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, + 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, + 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, + 0x40, 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, + 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x24, + 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, + 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, + 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, + 0x44, 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, + 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x28, + 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, + 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, + 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, + 0x48, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, + 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x2c, + 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, + 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, + 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, + 0x4c, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, + 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x30, + 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, + 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, + 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, + 0x50, 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, + 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x34, + 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, + 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, + 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, + 0x54, 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, + 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x38, + 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, + 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, + 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, + 0x58, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, + 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x3c, + 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, + 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, + 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, + 0x5c, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, + 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x40, + 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, + 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, + 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, + 0x60, 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, + 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x44, + 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, + 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, + 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, + 0x64, 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, + 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x48, + 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, + 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, + 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, + 0x68, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, + 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x4c, + 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, + 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, + 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, + 0x6c, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, + 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x50, + 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, + 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, + 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, + 0x70, 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, + 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x54, + 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, + 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, + 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, + 0x74, 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, + 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x58, + 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, + 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, + 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, + 0x78, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, + 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x5c, + 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, + 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, + 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, + 0x7c, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, + 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x60, + 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, + 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, + 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, + 0x80, 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, + 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x64, + 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, + 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, + 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, + 0x84, 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, + 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x68, + 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, + 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, + 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, + 0x88, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, + 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x6c, + 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, + 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, + 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, + 0x8c, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, + 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x70, + 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, + 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, + 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, + 0x90, 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, + 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x74, + 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, + 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, + 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, + 0x94, 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, + 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x78, + 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, + 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, + 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, + 0x98, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, + 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x7c, + 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, + 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, + 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, + 0x9c, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, + 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x80, + 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, + 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, + 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, + 0xa0, 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, + 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x84, + 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, + 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, + 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, + 0xa4, 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, + 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x88, + 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, + 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, + 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, + 0xa8, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, + 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x8c, + 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, + 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, + 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, + 0xac, 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, + 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0x90, + 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, + 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, + 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, + 0xb0, 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, + 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0x94, + 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, + 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, + 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, + 0xb4, 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, + 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0x98, + 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, + 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, + 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, + 0xb8, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, + 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0x9c, + 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, + 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, + 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, + 0xbc, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, + 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0xa0, + 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, + 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, + 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, + 0xc0, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, + 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0xa4, + 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, + 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, + 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, + 0xc4, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, + 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0xa8, + 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, + 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, + 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, + 0xc8, 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, + 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0xac, + 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, + 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, + 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, + 0xcc, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, + 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0xb0, + 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, + 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, + 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, + 0xd0, 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, + 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0xb4, + 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, + 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, + 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, + 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0xb8, + 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, + 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, + 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0xbc, + 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, + 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xc0, + 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, + 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xc4, + 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, + 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, + 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, + 0xe4, 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, + 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, + 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x80, 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, + 0xe8, 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, + 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0xcb, + 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, + 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x80, 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0xe2, 0x01, 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, + 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, + 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, + 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, + 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, + 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, + 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, + 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, + 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, + 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, + 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, + 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, + 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, + 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, + 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, + 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, + 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, + 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, + 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, 0x02, + 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, 0x26, + 0x20, 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, 0x4d, + 0x20, 0x00, 0x00, 0x80, 0x04, 0x03, 0x02, 0x00, + 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0x04, + 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, + 0x04, 0x05, 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, + 0x00, 0x80, 0x04, 0x06, 0x02, 0x00, 0x00, 0x4d, + 0x24, 0x00, 0x00, 0x80, 0x04, 0x07, 0x02, 0x00, + 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0x08, + 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, + 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, + 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x4d, + 0x28, 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, 0x00, + 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0x0c, + 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, + 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, + 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, + 0x2c, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, + 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0x10, + 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, + 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, + 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, + 0x30, 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, + 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0x14, + 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, + 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, + 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, + 0x34, 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, + 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0x18, + 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, + 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, + 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, + 0x38, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, + 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0x1c, + 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, + 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, + 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, + 0x3c, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, + 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x20, + 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, + 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, + 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, + 0x40, 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, + 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x24, + 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, + 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, + 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, + 0x44, 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, + 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x28, + 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, + 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, + 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, + 0x48, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, + 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x2c, + 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, + 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, + 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, + 0x4c, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, + 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x30, + 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, + 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, + 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, + 0x50, 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, + 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x34, + 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, + 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, + 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, + 0x54, 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, + 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x38, + 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, + 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, + 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, + 0x58, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, + 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x3c, + 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, + 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, + 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, + 0x5c, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, + 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x40, + 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, + 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, + 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, + 0x60, 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, + 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x44, + 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, + 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, + 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, + 0x64, 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, + 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x48, + 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, + 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, + 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, + 0x68, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, + 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x4c, + 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, + 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, + 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, + 0x6c, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, + 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x50, + 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, + 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, + 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, + 0x70, 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, + 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x54, + 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, + 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, + 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, + 0x74, 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, + 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x58, + 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, + 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, + 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, + 0x78, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, + 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x5c, + 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, + 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, + 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, + 0x7c, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, + 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x60, + 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, + 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, + 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, + 0x80, 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, + 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x64, + 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, + 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, + 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, + 0x84, 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, + 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x68, + 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, + 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, + 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, + 0x88, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, + 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x6c, + 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, + 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, + 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, + 0x8c, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, + 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x70, + 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, + 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, + 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, + 0x90, 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, + 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x74, + 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, + 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, + 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, + 0x94, 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, + 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x78, + 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, + 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, + 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, + 0x98, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, + 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x7c, + 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, + 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, + 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, + 0x9c, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, + 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x80, + 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, + 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, + 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, + 0xa0, 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, + 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x84, + 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, + 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, + 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, + 0xa4, 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, + 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x88, + 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, + 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, + 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, + 0xa8, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, + 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x8c, + 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, + 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, + 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, + 0xac, 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, + 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0x90, + 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, + 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, + 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, + 0xb0, 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, + 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0x94, + 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, + 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, + 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, + 0xb4, 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, + 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0x98, + 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, + 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, + 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, + 0xb8, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, + 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0x9c, + 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, + 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, + 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, + 0xbc, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, + 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0xa0, + 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, + 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, + 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, + 0xc0, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, + 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0xa4, + 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, + 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, + 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, + 0xc4, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, + 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0xa8, + 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, + 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, + 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, + 0xc8, 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, + 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0xac, + 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, + 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, + 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, + 0xcc, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, + 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0xb0, + 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, + 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, + 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, + 0xd0, 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, + 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0xb4, + 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, + 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, + 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, + 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0xb8, + 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, + 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, + 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0xbc, + 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, + 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xc0, + 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, + 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xc4, + 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, + 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, + 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, + 0xe4, 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, + 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, + 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, 0x00, 0x4d, + 0xe8, 0x00, 0x00, 0x80, 0x04, 0xcd, 0x02, 0x00, + 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0xce, + 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, + 0x04, 0xcf, 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x80, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xe2, 0x01, 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, + 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, + 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, + 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, + 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, + 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, + 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, + 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, + 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, + 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, + 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, + 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, + 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, + 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, + 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, + 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, + 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, + 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, + 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, 0x02, + 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, 0x26, + 0x20, 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, 0x4d, + 0x20, 0x00, 0x00, 0x80, 0x04, 0x03, 0x02, 0x00, + 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0x04, + 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, + 0x04, 0x05, 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, + 0x00, 0x80, 0x04, 0x06, 0x02, 0x00, 0x00, 0x4d, + 0x24, 0x00, 0x00, 0x80, 0x04, 0x07, 0x02, 0x00, + 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0x08, + 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, + 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, + 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x4d, + 0x28, 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, 0x00, + 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0x0c, + 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, + 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, + 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, + 0x2c, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, + 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0x10, + 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, + 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, + 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, + 0x30, 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, + 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0x14, + 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, + 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, + 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, + 0x34, 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, + 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0x18, + 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, + 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, + 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, + 0x38, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, + 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0x1c, + 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, + 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, + 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, + 0x3c, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, + 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x20, + 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, + 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, + 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, + 0x40, 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, + 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x24, + 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, + 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, + 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, + 0x44, 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, + 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x28, + 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, + 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, + 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, + 0x48, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, + 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x2c, + 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, + 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, + 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, + 0x4c, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, + 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x30, + 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, + 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, + 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, + 0x50, 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, + 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x34, + 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, + 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, + 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, + 0x54, 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, + 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x38, + 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, + 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, + 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, + 0x58, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, + 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x3c, + 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, + 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, + 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, + 0x5c, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, + 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x40, + 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, + 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, + 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, + 0x60, 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, + 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x44, + 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, + 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, + 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, + 0x64, 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, + 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x48, + 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, + 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, + 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, + 0x68, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, + 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x4c, + 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, + 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, + 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, + 0x6c, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, + 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x50, + 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, + 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, + 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, + 0x70, 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, + 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x54, + 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, + 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, + 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, + 0x74, 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, + 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x58, + 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, + 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, + 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, + 0x78, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, + 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x5c, + 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, + 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, + 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, + 0x7c, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, + 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x60, + 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, + 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, + 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, + 0x80, 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, + 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x64, + 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, + 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, + 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, + 0x84, 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, + 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x68, + 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, + 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, + 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, + 0x88, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, + 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x6c, + 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, + 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, + 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, + 0x8c, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, + 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x70, + 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, + 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, + 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, + 0x90, 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, + 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x74, + 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, + 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, + 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, + 0x94, 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, + 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x78, + 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, + 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, + 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, + 0x98, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, + 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x7c, + 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, + 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, + 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, + 0x9c, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, + 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x80, + 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, + 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, + 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, + 0xa0, 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, + 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x84, + 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, + 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, + 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, + 0xa4, 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, + 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x88, + 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, + 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, + 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, + 0xa8, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, + 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x8c, + 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, + 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, + 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, + 0xac, 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, + 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0x90, + 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, + 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, + 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, + 0xb0, 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, + 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0x94, + 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, + 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, + 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, + 0xb4, 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, + 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0x98, + 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, + 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, + 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, + 0xb8, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, + 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0x9c, + 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, + 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, + 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, + 0xbc, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, + 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0xa0, + 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, + 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, + 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, + 0xc0, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, + 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0xa4, + 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, + 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, + 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, + 0xc4, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, + 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0xa8, + 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, + 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, + 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, + 0xc8, 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, + 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0xac, + 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, + 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, + 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, + 0xcc, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, + 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0xb0, + 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, + 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, + 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, + 0xd0, 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, + 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0xb4, + 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, + 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, + 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, + 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0xb8, + 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, + 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, + 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0xbc, + 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, + 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xc0, + 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, + 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xc4, + 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, + 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, + 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, + 0xe4, 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, + 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, + 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, 0x00, 0x4d, + 0xe8, 0x00, 0x00, 0x80, 0x04, 0xcd, 0x02, 0x00, + 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0xce, + 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, + 0x04, 0xcf, 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x80, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x78, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, + 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x7d, 0xbe, + 0x7e, 0xbe, 0x7f, 0xbe, 0x80, 0xbe, 0x81, 0xbe, + 0x82, 0xbe, 0x83, 0xbe, 0x84, 0xbe, 0x85, 0xbe, + 0x86, 0xbe, 0x87, 0xbe, 0x88, 0x26, 0x0c, 0x00, + 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x04, 0xd0, 0x02, + 0x00, 0x00, 0x04, 0xd1, 0x02, 0x00, 0x00, 0x04, + 0xd2, 0x02, 0x00, 0x00, 0x04, 0xd3, 0x02, 0x00, + 0x00, 0x04, 0xd4, 0x02, 0x00, 0x00, 0x04, 0xd5, + 0x02, 0x00, 0x00, 0x04, 0xd6, 0x02, 0x00, 0x00, + 0x04, 0xd7, 0x02, 0x00, 0x00, 0x04, 0xd8, 0x02, + 0x00, 0x00, 0x04, 0xd9, 0x02, 0x00, 0x00, 0x04, + 0xda, 0x02, 0x00, 0x00, 0x04, 0xdb, 0x02, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xd0, 0x02, 0x00, 0x00, 0x04, 0xd1, + 0x02, 0x00, 0x00, 0x04, 0xd2, 0x02, 0x00, 0x00, + 0x04, 0xd3, 0x02, 0x00, 0x00, 0x04, 0xd4, 0x02, + 0x00, 0x00, 0x04, 0xd5, 0x02, 0x00, 0x00, 0x04, + 0xd6, 0x02, 0x00, 0x00, 0x04, 0xd7, 0x02, 0x00, + 0x00, 0x04, 0xd8, 0x02, 0x00, 0x00, 0x04, 0xd9, + 0x02, 0x00, 0x00, 0x04, 0xda, 0x02, 0x00, 0x00, + 0x04, 0xdb, 0x02, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xdc, 0x02, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0xdc, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xdc, 0x02, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, + 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x44, 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, + 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x04, 0x44, 0x01, 0x00, 0x00, 0x04, 0x44, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0xed, + 0x00, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xdd, 0x02, 0x00, 0x00, 0x04, 0xde, 0x02, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0xdd, 0x02, 0x00, 0x00, 0x04, + 0xde, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xdd, 0x02, 0x00, + 0x00, 0x04, 0xde, 0x02, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x78, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, + 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x00, 0x4d, 0xdf, 0x02, 0x00, 0x00, 0x4d, + 0xe0, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xe1, 0x02, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe2, 0x02, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xe3, 0x02, 0x00, + 0x00, 0x4d, 0xe4, 0x02, 0x00, 0x00, 0x04, 0xe5, + 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x02, 0x00, 0x00, + 0x4d, 0xe7, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xe8, + 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x02, 0x00, 0x00, + 0x04, 0xe9, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x02, + 0x00, 0x00, 0x4d, 0xea, 0x02, 0x00, 0x00, 0x0b, + 0x04, 0xeb, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x02, + 0x00, 0x00, 0x04, 0xec, 0x02, 0x00, 0x00, 0x4d, + 0xe6, 0x02, 0x00, 0x00, 0x4d, 0xed, 0x02, 0x00, + 0x00, 0x4d, 0xee, 0x02, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0xef, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x02, + 0x00, 0x00, 0x04, 0xf0, 0x02, 0x00, 0x00, 0x4d, + 0xf1, 0x02, 0x00, 0x00, 0x04, 0xf2, 0x02, 0x00, + 0x00, 0x4d, 0xf3, 0x02, 0x00, 0x00, 0x04, 0xf4, + 0x02, 0x00, 0x00, 0x4d, 0xf5, 0x02, 0x00, 0x00, + 0x04, 0xf6, 0x02, 0x00, 0x00, 0x4d, 0xf7, 0x02, + 0x00, 0x00, 0x04, 0xf8, 0x02, 0x00, 0x00, 0x4d, + 0xf9, 0x02, 0x00, 0x00, 0x04, 0xfa, 0x02, 0x00, + 0x00, 0x4d, 0xfb, 0x02, 0x00, 0x00, 0x4d, 0xe1, + 0x02, 0x00, 0x00, 0x4d, 0xfc, 0x02, 0x00, 0x00, + 0x0b, 0x04, 0xfd, 0x02, 0x00, 0x00, 0x4d, 0xfe, + 0x02, 0x00, 0x00, 0x04, 0xff, 0x02, 0x00, 0x00, + 0x4d, 0x00, 0x03, 0x00, 0x00, 0x04, 0x01, 0x03, + 0x00, 0x00, 0x4d, 0x02, 0x03, 0x00, 0x00, 0x04, + 0x03, 0x03, 0x00, 0x00, 0x4d, 0x04, 0x03, 0x00, + 0x00, 0x04, 0x05, 0x03, 0x00, 0x00, 0x4d, 0x06, + 0x03, 0x00, 0x00, 0x04, 0x07, 0x03, 0x00, 0x00, + 0x4d, 0x08, 0x03, 0x00, 0x00, 0x04, 0x09, 0x03, + 0x00, 0x00, 0x4d, 0x0a, 0x03, 0x00, 0x00, 0x4d, + 0x0b, 0x03, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, + 0x00, 0x24, 0x01, 0x00, 0xcc, 0x28, 0x98, 0x0c, + 0x01, 0x00, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, + 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x04, 0x31, 0x33, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_sl_size = 24809; + +const uint8_t intl_sl[24809] = { + 0x01, 0xd8, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x73, 0x6c, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x0e, + 0x7b, 0x31, 0x7d, 0x20, 0x7b, 0x30, 0x7d, 0x0a, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, 0x65, + 0x64, 0x69, 0x75, 0x6d, 0x08, 0x66, 0x75, 0x6c, + 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x04, 0x64, + 0x2e, 0x02, 0x64, 0x06, 0x63, 0x63, 0x63, 0x02, + 0x45, 0x0a, 0x45, 0x2c, 0x20, 0x64, 0x2e, 0x04, + 0x45, 0x64, 0x10, 0x45, 0x20, 0x68, 0x3a, 0x6d, + 0x6d, 0x20, 0x61, 0x06, 0x45, 0x68, 0x6d, 0x0e, + 0x45, 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x06, + 0x45, 0x48, 0x6d, 0x16, 0x45, 0x20, 0x68, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x08, + 0x45, 0x68, 0x6d, 0x73, 0x14, 0x45, 0x20, 0x48, + 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x08, + 0x45, 0x48, 0x6d, 0x73, 0x06, 0x79, 0x20, 0x47, + 0x04, 0x47, 0x79, 0x0e, 0x4d, 0x4d, 0x4d, 0x20, + 0x79, 0x20, 0x47, 0x06, 0x47, 0x79, 0x4d, 0x0a, + 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x14, 0x64, 0x2e, + 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x20, 0x47, + 0x0c, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x1a, + 0x45, 0x2c, 0x20, 0x64, 0x2e, 0x20, 0x4d, 0x4d, + 0x4d, 0x20, 0x79, 0x20, 0x47, 0x0e, 0x47, 0x79, + 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x06, 0x68, 0x20, + 0x61, 0x02, 0x68, 0x04, 0x48, 0x48, 0x02, 0x48, + 0x0c, 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x04, + 0x68, 0x6d, 0x0a, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x04, 0x48, 0x6d, 0x12, 0x68, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x61, 0x06, 0x68, 0x6d, + 0x73, 0x10, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x06, 0x48, 0x6d, 0x73, 0x16, 0x68, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, + 0x20, 0x76, 0x08, 0x68, 0x6d, 0x73, 0x76, 0x14, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x76, 0x08, 0x48, 0x6d, 0x73, 0x76, 0x10, + 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x20, 0x76, + 0x06, 0x68, 0x6d, 0x76, 0x0e, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x20, 0x76, 0x06, 0x48, 0x6d, 0x76, + 0x02, 0x4c, 0x02, 0x4d, 0x0a, 0x64, 0x2e, 0x20, + 0x4d, 0x2e, 0x04, 0x4d, 0x64, 0x10, 0x45, 0x2c, + 0x20, 0x64, 0x2e, 0x20, 0x4d, 0x2e, 0x06, 0x4d, + 0x45, 0x64, 0x06, 0x4c, 0x4c, 0x4c, 0x06, 0x4d, + 0x4d, 0x4d, 0x0c, 0x64, 0x2e, 0x20, 0x4d, 0x4d, + 0x4d, 0x08, 0x4d, 0x4d, 0x4d, 0x64, 0x12, 0x45, + 0x2c, 0x20, 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, + 0x0a, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0c, 0x64, + 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, + 0x4d, 0x4d, 0x64, 0x0a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x04, 0x6d, 0x73, 0x02, 0x79, 0x06, 0x4d, + 0x2f, 0x79, 0x04, 0x79, 0x4d, 0x0e, 0x64, 0x2e, + 0x20, 0x4d, 0x2e, 0x20, 0x79, 0x06, 0x79, 0x4d, + 0x64, 0x14, 0x45, 0x2c, 0x20, 0x64, 0x2e, 0x20, + 0x4d, 0x2e, 0x20, 0x79, 0x08, 0x79, 0x4d, 0x45, + 0x64, 0x0a, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x08, + 0x79, 0x4d, 0x4d, 0x4d, 0x10, 0x64, 0x2e, 0x20, + 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0a, 0x79, 0x4d, + 0x4d, 0x4d, 0x64, 0x16, 0x45, 0x2c, 0x20, 0x64, + 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0c, + 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0c, 0x4d, + 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0a, 0x79, 0x4d, + 0x4d, 0x4d, 0x4d, 0x0a, 0x51, 0x51, 0x51, 0x20, + 0x79, 0x08, 0x79, 0x51, 0x51, 0x51, 0x0c, 0x51, + 0x51, 0x51, 0x51, 0x20, 0x79, 0x0a, 0x79, 0x51, + 0x51, 0x51, 0x51, 0x20, 0x61, 0x76, 0x61, 0x69, + 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x73, 0x20, 0x45, 0x45, 0x45, + 0x45, 0x2c, 0x20, 0x64, 0x64, 0x2e, 0x20, 0x4d, + 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x14, 0x79, 0x4d, + 0x4d, 0x4d, 0x4d, 0x45, 0x45, 0x45, 0x45, 0x64, + 0x14, 0x64, 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, + 0x4d, 0x20, 0x79, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, + 0x4d, 0x64, 0x12, 0x64, 0x2e, 0x20, 0x4d, 0x4d, + 0x2e, 0x20, 0x79, 0x79, 0x16, 0x64, 0x61, 0x74, + 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, + 0x1a, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x7a, 0x7a, 0x7a, 0x7a, 0x12, 0x68, + 0x6d, 0x6d, 0x73, 0x73, 0x7a, 0x7a, 0x7a, 0x7a, + 0x14, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x7a, 0x08, 0x68, 0x6d, 0x73, 0x7a, + 0x16, 0x74, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x73, 0x0e, 0x66, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x73, 0x02, 0x6a, 0x02, 0x66, + 0x02, 0x6d, 0x02, 0x61, 0x02, 0x73, 0x02, 0x6f, + 0x02, 0x6e, 0x0c, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x08, 0x6a, 0x61, 0x6e, 0x2e, 0x08, 0x66, + 0x65, 0x62, 0x2e, 0x08, 0x6d, 0x61, 0x72, 0x2e, + 0x08, 0x61, 0x70, 0x72, 0x2e, 0x06, 0x6d, 0x61, + 0x6a, 0x08, 0x6a, 0x75, 0x6e, 0x2e, 0x08, 0x6a, + 0x75, 0x6c, 0x2e, 0x08, 0x61, 0x76, 0x67, 0x2e, + 0x08, 0x73, 0x65, 0x70, 0x2e, 0x08, 0x6f, 0x6b, + 0x74, 0x2e, 0x08, 0x6e, 0x6f, 0x76, 0x2e, 0x08, + 0x64, 0x65, 0x63, 0x2e, 0x0c, 0x6a, 0x61, 0x6e, + 0x75, 0x61, 0x72, 0x0e, 0x66, 0x65, 0x62, 0x72, + 0x75, 0x61, 0x72, 0x0a, 0x6d, 0x61, 0x72, 0x65, + 0x63, 0x0a, 0x61, 0x70, 0x72, 0x69, 0x6c, 0x0a, + 0x6a, 0x75, 0x6e, 0x69, 0x6a, 0x0a, 0x6a, 0x75, + 0x6c, 0x69, 0x6a, 0x0c, 0x61, 0x76, 0x67, 0x75, + 0x73, 0x74, 0x12, 0x73, 0x65, 0x70, 0x74, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x0e, 0x6f, 0x6b, 0x74, + 0x6f, 0x62, 0x65, 0x72, 0x10, 0x6e, 0x6f, 0x76, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x10, 0x64, 0x65, + 0x63, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x0c, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x73, 0x02, 0x70, 0x02, + 0x74, 0x03, 0x0d, 0x01, 0x08, 0x6e, 0x65, 0x64, + 0x2e, 0x08, 0x70, 0x6f, 0x6e, 0x2e, 0x08, 0x74, + 0x6f, 0x72, 0x2e, 0x08, 0x73, 0x72, 0x65, 0x2e, + 0x09, 0x0d, 0x01, 0x65, 0x00, 0x74, 0x00, 0x2e, + 0x00, 0x08, 0x70, 0x65, 0x74, 0x2e, 0x08, 0x73, + 0x6f, 0x62, 0x2e, 0x0e, 0x6e, 0x65, 0x64, 0x65, + 0x6c, 0x6a, 0x61, 0x14, 0x70, 0x6f, 0x6e, 0x65, + 0x64, 0x65, 0x6c, 0x6a, 0x65, 0x6b, 0x0a, 0x74, + 0x6f, 0x72, 0x65, 0x6b, 0x0a, 0x73, 0x72, 0x65, + 0x64, 0x61, 0x0f, 0x0d, 0x01, 0x65, 0x00, 0x74, + 0x00, 0x72, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6b, + 0x00, 0x0a, 0x70, 0x65, 0x74, 0x65, 0x6b, 0x0c, + 0x73, 0x6f, 0x62, 0x6f, 0x74, 0x61, 0x08, 0x64, + 0x61, 0x79, 0x73, 0x04, 0x42, 0x45, 0x08, 0x65, + 0x72, 0x61, 0x73, 0x08, 0x64, 0x6f, 0x70, 0x2e, + 0x04, 0x61, 0x6d, 0x08, 0x70, 0x6f, 0x70, 0x2e, + 0x04, 0x70, 0x6d, 0x14, 0x64, 0x61, 0x79, 0x50, + 0x65, 0x72, 0x69, 0x6f, 0x64, 0x73, 0x06, 0x4d, + 0x30, 0x31, 0x06, 0x4d, 0x30, 0x32, 0x06, 0x4d, + 0x30, 0x33, 0x06, 0x4d, 0x30, 0x34, 0x06, 0x4d, + 0x30, 0x35, 0x06, 0x4d, 0x30, 0x36, 0x06, 0x4d, + 0x30, 0x37, 0x06, 0x4d, 0x30, 0x38, 0x06, 0x4d, + 0x30, 0x39, 0x06, 0x4d, 0x31, 0x30, 0x06, 0x4d, + 0x31, 0x31, 0x06, 0x4d, 0x31, 0x32, 0x08, 0x54, + 0x6f, 0x75, 0x74, 0x08, 0x42, 0x61, 0x62, 0x61, + 0x0a, 0x48, 0x61, 0x74, 0x6f, 0x72, 0x0a, 0x4b, + 0x69, 0x61, 0x68, 0x6b, 0x08, 0x54, 0x6f, 0x62, + 0x61, 0x0c, 0x41, 0x6d, 0x73, 0x68, 0x69, 0x72, + 0x10, 0x42, 0x61, 0x72, 0x61, 0x6d, 0x68, 0x61, + 0x74, 0x12, 0x42, 0x61, 0x72, 0x61, 0x6d, 0x6f, + 0x75, 0x64, 0x61, 0x0e, 0x42, 0x61, 0x73, 0x68, + 0x61, 0x6e, 0x73, 0x0a, 0x50, 0x61, 0x6f, 0x6e, + 0x61, 0x08, 0x45, 0x70, 0x65, 0x70, 0x0a, 0x4d, + 0x65, 0x73, 0x72, 0x61, 0x0a, 0x4e, 0x61, 0x73, + 0x69, 0x65, 0x08, 0x45, 0x52, 0x41, 0x30, 0x08, + 0x45, 0x52, 0x41, 0x31, 0x10, 0x4d, 0x65, 0x73, + 0x6b, 0x65, 0x72, 0x65, 0x6d, 0x0c, 0x54, 0x65, + 0x6b, 0x65, 0x6d, 0x74, 0x0a, 0x48, 0x65, 0x64, + 0x61, 0x72, 0x0c, 0x54, 0x61, 0x68, 0x73, 0x61, + 0x73, 0x06, 0x54, 0x65, 0x72, 0x0e, 0x59, 0x65, + 0x6b, 0x61, 0x74, 0x69, 0x74, 0x0e, 0x4d, 0x65, + 0x67, 0x61, 0x62, 0x69, 0x74, 0x0c, 0x4d, 0x69, + 0x61, 0x7a, 0x69, 0x61, 0x0c, 0x47, 0x65, 0x6e, + 0x62, 0x6f, 0x74, 0x08, 0x53, 0x65, 0x6e, 0x65, + 0x0a, 0x48, 0x61, 0x6d, 0x6c, 0x65, 0x0e, 0x4e, + 0x65, 0x68, 0x61, 0x73, 0x73, 0x65, 0x0e, 0x50, + 0x61, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x0e, 0x70, + 0x72, 0x2e, 0x20, 0x4b, 0x72, 0x2e, 0x13, 0x70, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x6e, 0x00, 0x2e, + 0x00, 0x20, 0x00, 0x61, 0x01, 0x74, 0x00, 0x2e, + 0x00, 0x15, 0x70, 0x00, 0x72, 0x00, 0x2e, 0x00, + 0x20, 0x00, 0x6e, 0x00, 0x2e, 0x00, 0x20, 0x00, + 0x61, 0x01, 0x74, 0x00, 0x2e, 0x00, 0x0d, 0x6e, + 0x00, 0x2e, 0x00, 0x20, 0x00, 0x61, 0x01, 0x74, + 0x00, 0x2e, 0x00, 0x1c, 0x70, 0x72, 0x65, 0x64, + 0x20, 0x4b, 0x72, 0x69, 0x73, 0x74, 0x75, 0x73, + 0x6f, 0x6d, 0x17, 0x6e, 0x00, 0x61, 0x00, 0x61, + 0x01, 0x65, 0x00, 0x20, 0x00, 0x61, 0x01, 0x74, + 0x00, 0x65, 0x00, 0x74, 0x00, 0x6a, 0x00, 0x65, + 0x00, 0x25, 0x70, 0x00, 0x72, 0x00, 0x65, 0x00, + 0x64, 0x00, 0x20, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x61, 0x01, 0x69, 0x00, 0x6d, 0x00, 0x20, 0x00, + 0x61, 0x01, 0x74, 0x00, 0x65, 0x00, 0x74, 0x00, + 0x6a, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x0c, 0x54, + 0x69, 0x73, 0x68, 0x72, 0x69, 0x0e, 0x48, 0x65, + 0x73, 0x68, 0x76, 0x61, 0x6e, 0x0c, 0x4b, 0x69, + 0x73, 0x6c, 0x65, 0x76, 0x0a, 0x54, 0x65, 0x76, + 0x65, 0x74, 0x0c, 0x53, 0x68, 0x65, 0x76, 0x61, + 0x74, 0x0c, 0x41, 0x64, 0x61, 0x72, 0x20, 0x49, + 0x08, 0x41, 0x64, 0x61, 0x72, 0x0a, 0x4e, 0x69, + 0x73, 0x61, 0x6e, 0x08, 0x49, 0x79, 0x61, 0x72, + 0x0a, 0x53, 0x69, 0x76, 0x61, 0x6e, 0x0a, 0x54, + 0x61, 0x6d, 0x75, 0x7a, 0x04, 0x41, 0x76, 0x08, + 0x45, 0x6c, 0x75, 0x6c, 0x0e, 0x41, 0x64, 0x61, + 0x72, 0x20, 0x49, 0x49, 0x04, 0x41, 0x4d, 0x0e, + 0x43, 0x68, 0x61, 0x69, 0x74, 0x72, 0x61, 0x10, + 0x56, 0x61, 0x69, 0x73, 0x61, 0x6b, 0x68, 0x61, + 0x10, 0x4a, 0x79, 0x61, 0x69, 0x73, 0x74, 0x68, + 0x61, 0x0c, 0x41, 0x73, 0x61, 0x64, 0x68, 0x61, + 0x0e, 0x53, 0x72, 0x61, 0x76, 0x61, 0x6e, 0x61, + 0x0c, 0x42, 0x68, 0x61, 0x64, 0x72, 0x61, 0x0c, + 0x41, 0x73, 0x76, 0x69, 0x6e, 0x61, 0x0e, 0x4b, + 0x61, 0x72, 0x74, 0x69, 0x6b, 0x61, 0x14, 0x41, + 0x67, 0x72, 0x61, 0x68, 0x61, 0x79, 0x61, 0x6e, + 0x61, 0x0a, 0x50, 0x61, 0x75, 0x73, 0x61, 0x0a, + 0x4d, 0x61, 0x67, 0x68, 0x61, 0x10, 0x50, 0x68, + 0x61, 0x6c, 0x67, 0x75, 0x6e, 0x61, 0x08, 0x53, + 0x61, 0x6b, 0x61, 0x08, 0x4d, 0x75, 0x68, 0x2e, + 0x08, 0x53, 0x61, 0x66, 0x2e, 0x0c, 0x52, 0x61, + 0x62, 0x2e, 0x20, 0x49, 0x0e, 0x52, 0x61, 0x62, + 0x2e, 0x20, 0x49, 0x49, 0x0c, 0x4a, 0x75, 0x6d, + 0x2e, 0x20, 0x49, 0x0e, 0x4a, 0x75, 0x6d, 0x2e, + 0x20, 0x49, 0x49, 0x08, 0x52, 0x61, 0x6a, 0x2e, + 0x08, 0x53, 0x68, 0x61, 0x2e, 0x08, 0x52, 0x61, + 0x6d, 0x2e, 0x0a, 0x53, 0x68, 0x61, 0x77, 0x2e, + 0x11, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, + 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x51, 0x00, 0x2e, + 0x00, 0x11, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, + 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x48, 0x00, + 0x2e, 0x00, 0x10, 0x4d, 0x75, 0x68, 0x61, 0x72, + 0x72, 0x61, 0x6d, 0x0a, 0x53, 0x61, 0x66, 0x61, + 0x72, 0x0f, 0x52, 0x00, 0x61, 0x00, 0x62, 0x00, + 0x69, 0x00, 0xbb, 0x02, 0x20, 0x00, 0x49, 0x00, + 0x11, 0x52, 0x00, 0x61, 0x00, 0x62, 0x00, 0x69, + 0x00, 0xbb, 0x02, 0x20, 0x00, 0x49, 0x00, 0x49, + 0x00, 0x10, 0x4a, 0x75, 0x6d, 0x61, 0x64, 0x61, + 0x20, 0x49, 0x12, 0x4a, 0x75, 0x6d, 0x61, 0x64, + 0x61, 0x20, 0x49, 0x49, 0x0a, 0x52, 0x61, 0x6a, + 0x61, 0x62, 0x0f, 0x53, 0x00, 0x68, 0x00, 0x61, + 0x00, 0xbb, 0x02, 0x62, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x0e, 0x52, 0x61, 0x6d, 0x61, 0x64, 0x61, + 0x6e, 0x0e, 0x53, 0x68, 0x61, 0x77, 0x77, 0x61, + 0x6c, 0x19, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, + 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x51, 0x00, + 0x69, 0x00, 0xbb, 0x02, 0x64, 0x00, 0x61, 0x00, + 0x68, 0x00, 0x19, 0x44, 0x00, 0x68, 0x00, 0x75, + 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x48, + 0x00, 0x69, 0x00, 0x6a, 0x00, 0x6a, 0x00, 0x61, + 0x00, 0x68, 0x00, 0x04, 0x41, 0x48, 0x1f, 0x54, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x36, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x36, 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x75, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1f, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x1d, 0x57, 0x00, 0x61, 0x00, 0x64, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x52, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x1d, 0x59, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1f, 0x4a, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, + 0x6b, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x2b, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x2d, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x2d, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x2a, 0x4a, 0x69, 0x6e, 0x67, + 0x6f, 0x2d, 0x6b, 0x65, 0x69, 0x75, 0x6e, 0x20, + 0x28, 0x37, 0x36, 0x37, 0x2d, 0x37, 0x37, 0x30, + 0x29, 0x1d, 0x48, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x1f, 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, 0x64, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x4d, 0x01, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, + 0x4a, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x61, + 0x00, 0x6a, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1f, 0x53, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x20, + 0x54, 0x65, 0x6e, 0x2d, 0x61, 0x6e, 0x20, 0x28, + 0x38, 0x35, 0x37, 0x2d, 0x38, 0x35, 0x39, 0x29, + 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, + 0x47, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1d, 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, + 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x34, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1b, 0x4c, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1d, 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x41, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, 0x4a, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x4a, 0x00, 0x69, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x29, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x27, 0x4a, 0x00, 0x69, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x45, 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4c, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x61, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x25, 0x4a, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x24, 0x54, 0x65, 0x6e, 0x2d, + 0x65, 0x69, 0x20, 0x28, 0x31, 0x31, 0x31, 0x30, + 0x2d, 0x31, 0x31, 0x31, 0x33, 0x29, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x44, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x45, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x6a, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x48, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x27, 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, + 0x4c, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x6d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x4a, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x59, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x75, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x29, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x21, 0x4a, 0x00, 0x4d, 0x01, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x27, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x75, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x29, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x74, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x29, 0x52, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x45, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4c, + 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x61, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x48, + 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x27, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x4c, + 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x45, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x27, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4a, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x27, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x61, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x41, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x4d, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x02, 0x54, 0x02, 0x53, 0x0a, 0x4d, 0x65, + 0x69, 0x6a, 0x69, 0x0d, 0x54, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x0b, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x0c, 0x48, 0x65, 0x69, 0x73, + 0x65, 0x69, 0x12, 0x46, 0x61, 0x72, 0x76, 0x61, + 0x72, 0x64, 0x69, 0x6e, 0x16, 0x4f, 0x72, 0x64, + 0x69, 0x62, 0x65, 0x68, 0x65, 0x73, 0x68, 0x74, + 0x0e, 0x4b, 0x68, 0x6f, 0x72, 0x64, 0x61, 0x64, + 0x06, 0x54, 0x69, 0x72, 0x0c, 0x4d, 0x6f, 0x72, + 0x64, 0x61, 0x64, 0x12, 0x53, 0x68, 0x61, 0x68, + 0x72, 0x69, 0x76, 0x61, 0x72, 0x08, 0x4d, 0x65, + 0x68, 0x72, 0x08, 0x41, 0x62, 0x61, 0x6e, 0x08, + 0x41, 0x7a, 0x61, 0x72, 0x06, 0x44, 0x65, 0x79, + 0x0c, 0x42, 0x61, 0x68, 0x6d, 0x61, 0x6e, 0x0c, + 0x45, 0x73, 0x66, 0x61, 0x6e, 0x64, 0x04, 0x41, + 0x50, 0x1a, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, + 0x20, 0x52, 0x2e, 0x4f, 0x2e, 0x43, 0x2e, 0x0c, + 0x52, 0x2e, 0x4f, 0x2e, 0x43, 0x2e, 0x12, 0x63, + 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, 0x73, + 0x08, 0x64, 0x61, 0x74, 0x65, 0x08, 0x6c, 0x61, + 0x74, 0x6e, 0x04, 0x6e, 0x75, 0x10, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x50, + 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x26, 0x7b, + 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0x1e, 0x6e, 0x65, 0x67, 0x61, 0x74, + 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, + 0x72, 0x6e, 0x0e, 0x64, 0x65, 0x63, 0x69, 0x6d, + 0x61, 0x6c, 0x26, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0xa0, 0x7b, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, 0x3c, 0x7b, + 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0xa0, 0x7b, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x63, 0x79, 0x7d, 0x10, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x2a, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x7b, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x40, 0x7b, 0x6d, 0x69, + 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x0e, 0x70, 0x65, + 0x72, 0x63, 0x65, 0x6e, 0x74, 0x10, 0x70, 0x61, + 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x02, 0x2c, + 0x02, 0x2e, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x06, 0x4e, 0x61, 0x4e, 0x06, 0x6e, 0x61, 0x6e, + 0x02, 0x2b, 0x10, 0x70, 0x6c, 0x75, 0x73, 0x53, + 0x69, 0x67, 0x6e, 0x02, 0x2d, 0x12, 0x6d, 0x69, + 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, + 0x25, 0x16, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, + 0x74, 0x53, 0x69, 0x67, 0x6e, 0x03, 0x1e, 0x22, + 0x10, 0x69, 0x6e, 0x66, 0x69, 0x6e, 0x69, 0x74, + 0x79, 0x0e, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, + 0x73, 0x04, 0x41, 0x24, 0x06, 0x41, 0x55, 0x44, + 0x04, 0x52, 0x24, 0x06, 0x42, 0x52, 0x4c, 0x06, + 0x43, 0x4e, 0xa5, 0x06, 0x43, 0x4e, 0x59, 0x03, + 0xac, 0x20, 0x06, 0x45, 0x55, 0x52, 0x02, 0xa3, + 0x06, 0x47, 0x42, 0x50, 0x06, 0x48, 0x4b, 0x24, + 0x06, 0x48, 0x4b, 0x44, 0x03, 0xaa, 0x20, 0x06, + 0x49, 0x4c, 0x53, 0x03, 0xb9, 0x20, 0x06, 0x49, + 0x4e, 0x52, 0x02, 0xa5, 0x06, 0x4a, 0x50, 0x59, + 0x03, 0xa9, 0x20, 0x06, 0x4b, 0x52, 0x57, 0x06, + 0x4d, 0x58, 0x24, 0x06, 0x4d, 0x58, 0x4e, 0x06, + 0x4e, 0x5a, 0x24, 0x06, 0x4e, 0x5a, 0x44, 0x03, + 0x3f, 0x0e, 0x06, 0x54, 0x48, 0x42, 0x06, 0x4e, + 0x54, 0x24, 0x06, 0x54, 0x57, 0x44, 0x02, 0x24, + 0x06, 0x55, 0x53, 0x44, 0x03, 0xab, 0x20, 0x06, + 0x56, 0x4e, 0x44, 0x08, 0x46, 0x43, 0x46, 0x41, + 0x06, 0x58, 0x41, 0x46, 0x06, 0x45, 0x43, 0x24, + 0x06, 0x58, 0x43, 0x44, 0x06, 0x43, 0x46, 0x41, + 0x06, 0x58, 0x4f, 0x46, 0x08, 0x43, 0x46, 0x50, + 0x46, 0x06, 0x58, 0x50, 0x46, 0x14, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, + 0x52, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, + 0x74, 0x6c, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x6a, + 0x73, 0x6f, 0x6e, 0x70, 0x2f, 0x73, 0x6c, 0x2e, + 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, + 0x00, 0x01, 0x00, 0x27, 0x00, 0x89, 0x01, 0xde, + 0x6a, 0x01, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x39, + 0xd0, 0x00, 0x00, 0x00, 0x43, 0xd1, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd2, 0x00, 0x00, 0x00, 0x4d, + 0xd3, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd4, 0x00, + 0x00, 0x00, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x04, + 0xd6, 0x00, 0x00, 0x00, 0x04, 0xd7, 0x00, 0x00, + 0x00, 0x04, 0xd8, 0x00, 0x00, 0x00, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x04, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdb, 0x00, 0x00, 0x00, 0x04, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x04, + 0xde, 0x00, 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, + 0x00, 0x04, 0xe0, 0x00, 0x00, 0x00, 0x04, 0xe1, + 0x00, 0x00, 0x00, 0x04, 0xe2, 0x00, 0x00, 0x00, + 0x26, 0x0f, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, + 0x0a, 0x4d, 0xe4, 0x00, 0x00, 0x00, 0x09, 0x4d, + 0xe5, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, + 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe9, + 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0xec, 0x00, 0x00, 0x00, + 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, 0xee, 0x00, + 0x00, 0x00, 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, + 0xf0, 0x00, 0x00, 0x00, 0x04, 0xf1, 0x00, 0x00, + 0x00, 0x4d, 0xf2, 0x00, 0x00, 0x00, 0x04, 0xf3, + 0x00, 0x00, 0x00, 0x4d, 0xf4, 0x00, 0x00, 0x00, + 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0xf6, 0x00, + 0x00, 0x00, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, + 0xf8, 0x00, 0x00, 0x00, 0x04, 0xf9, 0x00, 0x00, + 0x00, 0x4d, 0xfa, 0x00, 0x00, 0x00, 0x04, 0xfb, + 0x00, 0x00, 0x00, 0x4d, 0xfc, 0x00, 0x00, 0x00, + 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, 0xfd, 0x00, + 0x00, 0x00, 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, + 0xff, 0x00, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, + 0x00, 0x4d, 0x01, 0x01, 0x00, 0x00, 0x04, 0x02, + 0x01, 0x00, 0x00, 0x4d, 0x03, 0x01, 0x00, 0x00, + 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0x05, 0x01, + 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, + 0x07, 0x01, 0x00, 0x00, 0x04, 0x08, 0x01, 0x00, + 0x00, 0x4d, 0x09, 0x01, 0x00, 0x00, 0x04, 0x0a, + 0x01, 0x00, 0x00, 0x4d, 0x0b, 0x01, 0x00, 0x00, + 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, 0x0d, 0x01, + 0x00, 0x00, 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, + 0x0f, 0x01, 0x00, 0x00, 0x04, 0x10, 0x01, 0x00, + 0x00, 0x4d, 0x11, 0x01, 0x00, 0x00, 0x04, 0x12, + 0x01, 0x00, 0x00, 0x4d, 0x13, 0x01, 0x00, 0x00, + 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, 0x15, 0x01, + 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, + 0x17, 0x01, 0x00, 0x00, 0x04, 0x18, 0x01, 0x00, + 0x00, 0x4d, 0x19, 0x01, 0x00, 0x00, 0x04, 0x1a, + 0x01, 0x00, 0x00, 0x4d, 0x1b, 0x01, 0x00, 0x00, + 0x04, 0x1c, 0x01, 0x00, 0x00, 0x4d, 0x1d, 0x01, + 0x00, 0x00, 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, + 0x1f, 0x01, 0x00, 0x00, 0x04, 0x20, 0x01, 0x00, + 0x00, 0x4d, 0x21, 0x01, 0x00, 0x00, 0x04, 0x22, + 0x01, 0x00, 0x00, 0x4d, 0x23, 0x01, 0x00, 0x00, + 0x04, 0x24, 0x01, 0x00, 0x00, 0x4d, 0x25, 0x01, + 0x00, 0x00, 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, + 0x26, 0x01, 0x00, 0x00, 0x04, 0x27, 0x01, 0x00, + 0x00, 0x4d, 0x28, 0x01, 0x00, 0x00, 0x04, 0x29, + 0x01, 0x00, 0x00, 0x4d, 0x2a, 0x01, 0x00, 0x00, + 0x04, 0x2b, 0x01, 0x00, 0x00, 0x4d, 0x2c, 0x01, + 0x00, 0x00, 0x04, 0x2d, 0x01, 0x00, 0x00, 0x4d, + 0x2e, 0x01, 0x00, 0x00, 0x04, 0x2f, 0x01, 0x00, + 0x00, 0x4d, 0x30, 0x01, 0x00, 0x00, 0x04, 0x31, + 0x01, 0x00, 0x00, 0x4d, 0x32, 0x01, 0x00, 0x00, + 0x04, 0x33, 0x01, 0x00, 0x00, 0x4d, 0x34, 0x01, + 0x00, 0x00, 0x04, 0x35, 0x01, 0x00, 0x00, 0x4d, + 0x36, 0x01, 0x00, 0x00, 0x04, 0x37, 0x01, 0x00, + 0x00, 0x4d, 0x38, 0x01, 0x00, 0x00, 0x4d, 0x39, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x3a, 0x01, 0x00, + 0x00, 0x4d, 0x3b, 0x01, 0x00, 0x00, 0x04, 0x3c, + 0x01, 0x00, 0x00, 0x4d, 0x3d, 0x01, 0x00, 0x00, + 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, 0x30, 0x01, + 0x00, 0x00, 0x04, 0x3e, 0x01, 0x00, 0x00, 0x4d, + 0x2a, 0x01, 0x00, 0x00, 0x4d, 0x3f, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x40, 0x01, 0x00, 0x00, 0x4d, + 0x41, 0x01, 0x00, 0x00, 0x04, 0x42, 0x01, 0x00, + 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, 0x0c, + 0x01, 0x00, 0x00, 0x4d, 0x0b, 0x01, 0x00, 0x00, + 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, 0x07, 0x01, + 0x00, 0x00, 0x4d, 0x44, 0x01, 0x00, 0x00, 0x4d, + 0x45, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x0b, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0xec, + 0x00, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, + 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x65, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x4a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x79, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, + 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0xd5, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x00, 0xbe, + 0x01, 0xbe, 0x02, 0xbe, 0x03, 0xbe, 0x04, 0xbe, + 0x05, 0xbe, 0x06, 0xbe, 0x07, 0xbe, 0x08, 0xbe, + 0x09, 0xbe, 0x0a, 0xbe, 0x0b, 0x26, 0x0c, 0x00, + 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, + 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, + 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, + 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x65, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x4d, + 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, + 0x01, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x0c, 0xbe, 0x0d, 0xbe, 0x0e, + 0xbe, 0x0f, 0xbe, 0x10, 0xbe, 0x11, 0xbe, 0x12, + 0xbe, 0x13, 0xbe, 0x14, 0xbe, 0x15, 0xbe, 0x16, + 0xbe, 0x17, 0xbe, 0x18, 0x26, 0x0d, 0x00, 0x4d, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, + 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, + 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, + 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, + 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, + 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, + 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, + 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, + 0x04, 0x97, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x8b, 0x01, + 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, + 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, + 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, + 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, + 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, + 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, + 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, + 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x26, 0x0d, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x65, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x77, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x98, 0x01, 0x00, 0x00, + 0x04, 0x99, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, + 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, + 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, + 0x4d, 0xd7, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x19, 0xbe, 0x1a, 0xbe, 0x1b, 0xbe, 0x1c, 0xbe, + 0x1d, 0xbe, 0x1e, 0xbe, 0x1f, 0xbe, 0x20, 0xbe, + 0x21, 0xbe, 0x22, 0xbe, 0x23, 0xbe, 0x24, 0x26, + 0x0c, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, + 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, + 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, + 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, + 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, + 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, + 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x65, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x77, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, + 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x25, 0xbe, 0x26, + 0xbe, 0x27, 0xbe, 0x28, 0xbe, 0x29, 0xbe, 0x2a, + 0xbe, 0x2b, 0xbe, 0x2c, 0xbe, 0x2d, 0xbe, 0x2e, + 0xbe, 0x2f, 0xbe, 0x30, 0xbe, 0x31, 0x26, 0x0d, + 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x9a, + 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, + 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, + 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, + 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, + 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, + 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, + 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, + 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, + 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, + 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, + 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, + 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, + 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, + 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, + 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x65, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x98, 0x01, + 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x32, 0xbe, 0x33, 0xbe, 0x34, 0xbe, + 0x35, 0xbe, 0x36, 0xbe, 0x37, 0xbe, 0x38, 0xbe, + 0x39, 0xbe, 0x3a, 0xbe, 0x3b, 0xbe, 0x3c, 0xbe, + 0x3d, 0xbe, 0x3e, 0x26, 0x0d, 0x00, 0x4d, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, + 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, + 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, + 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, + 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, + 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, + 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, + 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, + 0xa6, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, + 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, + 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, + 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, + 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, + 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, + 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, + 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, + 0x04, 0xa6, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x65, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x98, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x98, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, + 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, + 0x4d, 0xd9, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x3f, 0xbe, 0x40, 0xbe, 0x41, 0xbe, 0x42, 0xbe, + 0x43, 0xbe, 0x44, 0xbe, 0x45, 0xbe, 0x46, 0xbe, + 0x47, 0xbe, 0x48, 0xbe, 0x49, 0xbe, 0x4a, 0x26, + 0x0c, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, + 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, + 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, + 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, + 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, + 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, + 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x65, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x77, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x98, 0x01, 0x00, + 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x98, + 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x4d, + 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x46, + 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0xec, 0x00, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x65, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, + 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, + 0x04, 0xaa, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, + 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, + 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, + 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, + 0x00, 0x26, 0x04, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, + 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, + 0x04, 0xa8, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x79, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, + 0x7e, 0x01, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x4b, 0xbe, 0x4c, 0xbe, + 0x4d, 0xbe, 0x4e, 0xbe, 0x4f, 0xbe, 0x50, 0xbe, + 0x51, 0xbe, 0x52, 0xbe, 0x53, 0xbe, 0x54, 0xbe, + 0x55, 0xbe, 0x56, 0xbe, 0x57, 0xbe, 0x58, 0x26, + 0x0e, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, + 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, + 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, + 0x04, 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, + 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, 0x04, + 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, + 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, 0x04, 0xb9, + 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, + 0x04, 0xbb, 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xae, 0x01, + 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, + 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, + 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, 0xb3, + 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, 0x00, + 0x04, 0xb5, 0x01, 0x00, 0x00, 0x04, 0xb6, 0x01, + 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, + 0xb8, 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, + 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, 0x04, 0xbb, + 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x65, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x4a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xbc, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0xbc, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x79, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, + 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x59, 0xbe, + 0x5a, 0xbe, 0x5b, 0xbe, 0x5c, 0xbe, 0x5d, 0xbe, + 0x5e, 0xbe, 0x5f, 0xbe, 0x60, 0xbe, 0x61, 0xbe, + 0x62, 0xbe, 0x63, 0xbe, 0x64, 0x26, 0x0c, 0x00, + 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, + 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, + 0xbf, 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, + 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, 0x04, 0xc2, + 0x01, 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, + 0x04, 0xc4, 0x01, 0x00, 0x00, 0x04, 0xc5, 0x01, + 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, + 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, 0x04, 0xbe, + 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, + 0x04, 0xc0, 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, + 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, 0x00, 0x04, + 0xc3, 0x01, 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, + 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, + 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, + 0x04, 0xc8, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x65, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xc9, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0xc9, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, + 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x65, 0xbe, 0x66, 0xbe, 0x67, 0xbe, 0x68, 0xbe, + 0x69, 0xbe, 0x6a, 0xbe, 0x6b, 0xbe, 0x6c, 0xbe, + 0x6d, 0xbe, 0x6e, 0xbe, 0x6f, 0xbe, 0x70, 0x26, + 0x0c, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0xca, 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, + 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, + 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, + 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, 0x01, + 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, 0x04, + 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, + 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, 0xd5, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, + 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, 0xd8, 0x01, + 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, 0x04, + 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, 0x00, + 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, 0x04, 0xdd, + 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, 0x00, + 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, 0xe0, 0x01, + 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x65, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x77, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xe2, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe2, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x71, 0xbe, 0x72, 0xbe, 0x73, 0xbe, + 0x74, 0xbe, 0x75, 0xbe, 0x76, 0xbe, 0x77, 0xbe, + 0x78, 0xbe, 0x79, 0xbe, 0x7a, 0xbe, 0x7b, 0xbe, + 0x7c, 0x26, 0x0c, 0x00, 0x4d, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, 0x04, 0xcb, + 0x01, 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, + 0x04, 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, + 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, + 0xd0, 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, + 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, + 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, + 0x04, 0xd5, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd6, 0x01, + 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, + 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, + 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, + 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, + 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, + 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, + 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x65, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xe2, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xe2, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x79, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, + 0x7e, 0x01, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, + 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x49, + 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0xec, 0x00, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x65, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x77, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xe3, 0x01, 0x00, + 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, + 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, + 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, + 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, + 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, + 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, + 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, + 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, + 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, + 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, + 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, + 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, + 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, + 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, + 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, + 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, + 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, + 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, 0x02, + 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, 0x04, + 0x02, 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, + 0x03, 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, + 0x80, 0x04, 0x04, 0x02, 0x00, 0x00, 0x4d, 0x21, + 0x00, 0x00, 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, + 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, + 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, + 0x07, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, + 0x80, 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, 0x25, + 0x00, 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, + 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, + 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, + 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, + 0x80, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x29, + 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, + 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, + 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, + 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, + 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x2d, + 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, + 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, + 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, + 0x13, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, + 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x31, + 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, + 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, + 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, + 0x17, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, + 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x35, + 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, + 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, + 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, + 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, + 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x39, + 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, + 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, + 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, + 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, + 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x3d, + 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, + 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, + 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, + 0x23, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, + 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x41, + 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, + 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, + 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, + 0x27, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, + 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x45, + 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, + 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, + 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, + 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, + 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x49, + 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, + 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, + 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, + 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, + 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x4d, + 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, + 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, + 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, + 0x33, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, + 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x51, + 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, + 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, + 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, + 0x37, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, + 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x55, + 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, + 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, + 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, + 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, + 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x59, + 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, + 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, + 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, + 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, + 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x5d, + 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, + 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, + 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, + 0x43, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, + 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x61, + 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, + 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, + 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, + 0x47, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, + 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x65, + 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, + 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, + 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, + 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, + 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x69, + 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, + 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, + 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, + 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, + 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x6d, + 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, + 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, + 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, + 0x53, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, + 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x71, + 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, + 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, + 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, + 0x57, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, + 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x75, + 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, + 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, + 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, + 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, + 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x79, + 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, + 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, + 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, + 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, + 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x7d, + 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, + 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, + 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, + 0x63, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, + 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x81, + 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, + 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, + 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, + 0x67, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, + 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x85, + 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, + 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, + 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, + 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, + 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x89, + 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, + 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, + 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, + 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, + 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x8d, + 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, + 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, + 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, + 0x73, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, + 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x91, + 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, + 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, + 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, + 0x77, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, + 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x95, + 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, + 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, + 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, + 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, + 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x99, + 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, + 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, + 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, + 0x7f, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, + 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0x9d, + 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, + 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, + 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, + 0x83, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, + 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0xa1, + 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, + 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, + 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, + 0x87, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, + 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0xa5, + 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, + 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, + 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, + 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, + 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xa9, + 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, + 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, + 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, + 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, + 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xad, + 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, + 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, + 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, + 0x93, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, + 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xb1, + 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, + 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, + 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, + 0x97, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, + 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xb5, + 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, + 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, + 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, + 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, + 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xb9, + 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, + 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, + 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, + 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, + 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xbd, + 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, + 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, + 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, + 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, + 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xc1, + 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, + 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, + 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, + 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, + 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xc5, + 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, + 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, + 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, + 0xab, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, + 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xc9, + 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, + 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, + 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, + 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, + 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xcd, + 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, + 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, + 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, + 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, + 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xd1, + 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, + 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, + 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, + 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, + 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xd5, + 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, + 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, + 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, + 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xd9, + 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, + 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, + 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, + 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, + 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, + 0x80, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xe5, + 0x00, 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, + 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, + 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, + 0x17, 0x01, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, + 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, 0xe9, + 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0x05, 0x01, + 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, + 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, + 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, + 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, + 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, + 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, + 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, + 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, + 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, + 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, + 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, + 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, + 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, + 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, + 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, + 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, + 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, + 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, + 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, 0x02, + 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, 0x04, + 0x02, 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, + 0x03, 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, + 0x80, 0x04, 0x04, 0x02, 0x00, 0x00, 0x4d, 0x21, + 0x00, 0x00, 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, + 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, + 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, + 0x07, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, + 0x80, 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, 0x25, + 0x00, 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, + 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, + 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, + 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, + 0x80, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x29, + 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, + 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, + 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, + 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, + 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x2d, + 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, + 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, + 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, + 0x13, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, + 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x31, + 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, + 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, + 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, + 0x17, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, + 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x35, + 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, + 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, + 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, + 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, + 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x39, + 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, + 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, + 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, + 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, + 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x3d, + 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, + 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, + 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, + 0x23, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, + 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x41, + 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, + 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, + 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, + 0x27, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, + 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x45, + 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, + 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, + 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, + 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, + 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x49, + 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, + 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, + 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, + 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, + 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x4d, + 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, + 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, + 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, + 0x33, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, + 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x51, + 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, + 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, + 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, + 0x37, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, + 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x55, + 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, + 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, + 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, + 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, + 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x59, + 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, + 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, + 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, + 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, + 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x5d, + 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, + 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, + 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, + 0x43, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, + 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x61, + 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, + 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, + 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, + 0x47, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, + 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x65, + 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, + 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, + 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, + 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, + 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x69, + 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, + 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, + 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, + 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, + 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x6d, + 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, + 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, + 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, + 0x53, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, + 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x71, + 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, + 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, + 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, + 0x57, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, + 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x75, + 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, + 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, + 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, + 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, + 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x79, + 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, + 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, + 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, + 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, + 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x7d, + 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, + 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, + 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, + 0x63, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, + 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x81, + 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, + 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, + 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, + 0x67, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, + 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x85, + 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, + 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, + 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, + 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, + 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x89, + 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, + 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, + 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, + 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, + 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x8d, + 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, + 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, + 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, + 0x73, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, + 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x91, + 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, + 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, + 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, + 0x77, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, + 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x95, + 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, + 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, + 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, + 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, + 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x99, + 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, + 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, + 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, + 0x7f, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, + 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0x9d, + 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, + 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, + 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, + 0x83, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, + 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0xa1, + 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, + 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, + 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, + 0x87, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, + 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0xa5, + 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, + 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, + 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, + 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, + 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xa9, + 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, + 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, + 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, + 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, + 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xad, + 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, + 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, + 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, + 0x93, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, + 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xb1, + 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, + 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, + 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, + 0x97, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, + 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xb5, + 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, + 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, + 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, + 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, + 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xb9, + 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, + 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, + 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, + 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, + 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xbd, + 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, + 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, + 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, + 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, + 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xc1, + 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, + 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, + 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, + 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, + 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xc5, + 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, + 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, + 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, + 0xab, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, + 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xc9, + 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, + 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, + 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, + 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, + 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xcd, + 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, + 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, + 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, + 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, + 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xd1, + 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, + 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, + 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, + 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, + 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xd5, + 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, + 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, + 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, + 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xd9, + 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, + 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, + 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, + 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, + 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, + 0x80, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xe5, + 0x00, 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, + 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, + 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, + 0xcd, 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, + 0x80, 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, 0xe9, + 0x00, 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0xd0, 0x02, + 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, + 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, + 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, + 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, + 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, + 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, + 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, + 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, + 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, + 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, + 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, + 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, + 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, + 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, + 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, + 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, + 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, + 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, + 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, 0x02, + 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, 0x04, + 0x02, 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, + 0x03, 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, + 0x80, 0x04, 0x04, 0x02, 0x00, 0x00, 0x4d, 0x21, + 0x00, 0x00, 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, + 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, + 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, + 0x07, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, + 0x80, 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, 0x25, + 0x00, 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, + 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, + 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, + 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, + 0x80, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x29, + 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, + 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, + 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, + 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, + 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x2d, + 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, + 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, + 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, + 0x13, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, + 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x31, + 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, + 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, + 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, + 0x17, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, + 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x35, + 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, + 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, + 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, + 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, + 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x39, + 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, + 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, + 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, + 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, + 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x3d, + 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, + 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, + 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, + 0x23, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, + 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x41, + 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, + 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, + 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, + 0x27, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, + 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x45, + 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, + 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, + 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, + 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, + 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x49, + 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, + 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, + 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, + 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, + 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x4d, + 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, + 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, + 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, + 0x33, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, + 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x51, + 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, + 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, + 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, + 0x37, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, + 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x55, + 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, + 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, + 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, + 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, + 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x59, + 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, + 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, + 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, + 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, + 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x5d, + 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, + 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, + 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, + 0x43, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, + 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x61, + 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, + 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, + 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, + 0x47, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, + 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x65, + 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, + 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, + 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, + 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, + 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x69, + 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, + 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, + 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, + 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, + 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x6d, + 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, + 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, + 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, + 0x53, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, + 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x71, + 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, + 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, + 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, + 0x57, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, + 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x75, + 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, + 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, + 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, + 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, + 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x79, + 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, + 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, + 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, + 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, + 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x7d, + 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, + 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, + 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, + 0x63, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, + 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x81, + 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, + 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, + 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, + 0x67, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, + 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x85, + 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, + 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, + 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, + 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, + 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x89, + 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, + 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, + 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, + 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, + 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x8d, + 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, + 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, + 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, + 0x73, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, + 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x91, + 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, + 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, + 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, + 0x77, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, + 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x95, + 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, + 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, + 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, + 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, + 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x99, + 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, + 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, + 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, + 0x7f, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, + 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0x9d, + 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, + 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, + 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, + 0x83, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, + 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0xa1, + 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, + 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, + 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, + 0x87, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, + 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0xa5, + 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, + 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, + 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, + 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, + 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xa9, + 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, + 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, + 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, + 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, + 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xad, + 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, + 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, + 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, + 0x93, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, + 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xb1, + 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, + 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, + 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, + 0x97, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, + 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xb5, + 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, + 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, + 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, + 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, + 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xb9, + 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, + 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, + 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, + 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, + 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xbd, + 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, + 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, + 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, + 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, + 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xc1, + 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, + 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, + 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, + 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, + 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xc5, + 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, + 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, + 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, + 0xab, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, + 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xc9, + 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, + 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, + 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, + 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, + 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xcd, + 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, + 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, + 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, + 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, + 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xd1, + 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, + 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, + 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, + 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, + 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xd5, + 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, + 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, + 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, + 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xd9, + 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, + 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, + 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, + 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, + 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, + 0x80, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xe5, + 0x00, 0x00, 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, + 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, + 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, + 0xcd, 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, + 0x80, 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, 0xe9, + 0x00, 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0xd0, 0x02, + 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x4d, + 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, + 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x7d, 0xbe, 0x7e, 0xbe, 0x7f, + 0xbe, 0x80, 0xbe, 0x81, 0xbe, 0x82, 0xbe, 0x83, + 0xbe, 0x84, 0xbe, 0x85, 0xbe, 0x86, 0xbe, 0x87, + 0xbe, 0x88, 0x26, 0x0c, 0x00, 0x4d, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0xd1, 0x02, 0x00, 0x00, 0x04, + 0xd2, 0x02, 0x00, 0x00, 0x04, 0xd3, 0x02, 0x00, + 0x00, 0x04, 0xd4, 0x02, 0x00, 0x00, 0x04, 0xd5, + 0x02, 0x00, 0x00, 0x04, 0xd6, 0x02, 0x00, 0x00, + 0x04, 0xd7, 0x02, 0x00, 0x00, 0x04, 0xd8, 0x02, + 0x00, 0x00, 0x04, 0xd9, 0x02, 0x00, 0x00, 0x04, + 0xda, 0x02, 0x00, 0x00, 0x04, 0xdb, 0x02, 0x00, + 0x00, 0x04, 0xdc, 0x02, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd1, + 0x02, 0x00, 0x00, 0x04, 0xd2, 0x02, 0x00, 0x00, + 0x04, 0xd3, 0x02, 0x00, 0x00, 0x04, 0xd4, 0x02, + 0x00, 0x00, 0x04, 0xd5, 0x02, 0x00, 0x00, 0x04, + 0xd6, 0x02, 0x00, 0x00, 0x04, 0xd7, 0x02, 0x00, + 0x00, 0x04, 0xd8, 0x02, 0x00, 0x00, 0x04, 0xd9, + 0x02, 0x00, 0x00, 0x04, 0xda, 0x02, 0x00, 0x00, + 0x04, 0xdb, 0x02, 0x00, 0x00, 0x04, 0xdc, 0x02, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x65, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xdd, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0xdd, 0x02, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xdd, 0x02, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x79, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, + 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x46, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0xec, 0x00, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x65, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xde, 0x02, + 0x00, 0x00, 0x04, 0xdf, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0xde, 0x02, 0x00, 0x00, 0x04, 0xdf, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xde, 0x02, 0x00, 0x00, 0x04, 0xdf, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, + 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x02, 0x00, + 0x00, 0x0b, 0x04, 0xe2, 0x02, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe3, 0x02, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0xe4, 0x02, 0x00, 0x00, 0x4d, 0xe5, + 0x02, 0x00, 0x00, 0x04, 0xe6, 0x02, 0x00, 0x00, + 0x4d, 0xe7, 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x02, + 0x00, 0x00, 0x0b, 0x04, 0xe9, 0x02, 0x00, 0x00, + 0x4d, 0xe5, 0x02, 0x00, 0x00, 0x04, 0xea, 0x02, + 0x00, 0x00, 0x4d, 0xe7, 0x02, 0x00, 0x00, 0x4d, + 0xeb, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xec, 0x02, + 0x00, 0x00, 0x4d, 0xe5, 0x02, 0x00, 0x00, 0x04, + 0xed, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x02, 0x00, + 0x00, 0x4d, 0xee, 0x02, 0x00, 0x00, 0x4d, 0xef, + 0x02, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xf0, 0x02, + 0x00, 0x00, 0x4d, 0xe8, 0x02, 0x00, 0x00, 0x04, + 0xf1, 0x02, 0x00, 0x00, 0x4d, 0xf2, 0x02, 0x00, + 0x00, 0x04, 0xf3, 0x02, 0x00, 0x00, 0x4d, 0xf4, + 0x02, 0x00, 0x00, 0x04, 0xf5, 0x02, 0x00, 0x00, + 0x4d, 0xf6, 0x02, 0x00, 0x00, 0x04, 0xf7, 0x02, + 0x00, 0x00, 0x4d, 0xf8, 0x02, 0x00, 0x00, 0x04, + 0xf9, 0x02, 0x00, 0x00, 0x4d, 0xfa, 0x02, 0x00, + 0x00, 0x04, 0xfb, 0x02, 0x00, 0x00, 0x4d, 0xfc, + 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x02, 0x00, 0x00, + 0x4d, 0xfd, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xfe, + 0x02, 0x00, 0x00, 0x4d, 0xff, 0x02, 0x00, 0x00, + 0x04, 0x00, 0x03, 0x00, 0x00, 0x4d, 0x01, 0x03, + 0x00, 0x00, 0x04, 0x02, 0x03, 0x00, 0x00, 0x4d, + 0x03, 0x03, 0x00, 0x00, 0x04, 0x04, 0x03, 0x00, + 0x00, 0x4d, 0x05, 0x03, 0x00, 0x00, 0x04, 0x06, + 0x03, 0x00, 0x00, 0x4d, 0x07, 0x03, 0x00, 0x00, + 0x04, 0x08, 0x03, 0x00, 0x00, 0x4d, 0x09, 0x03, + 0x00, 0x00, 0x04, 0x0a, 0x03, 0x00, 0x00, 0x4d, + 0x0b, 0x03, 0x00, 0x00, 0x04, 0x0c, 0x03, 0x00, + 0x00, 0x4d, 0x0d, 0x03, 0x00, 0x00, 0x04, 0x0e, + 0x03, 0x00, 0x00, 0x4d, 0x0f, 0x03, 0x00, 0x00, + 0x04, 0x10, 0x03, 0x00, 0x00, 0x4d, 0x11, 0x03, + 0x00, 0x00, 0x04, 0x12, 0x03, 0x00, 0x00, 0x4d, + 0x13, 0x03, 0x00, 0x00, 0x04, 0x14, 0x03, 0x00, + 0x00, 0x4d, 0x15, 0x03, 0x00, 0x00, 0x04, 0x16, + 0x03, 0x00, 0x00, 0x4d, 0x17, 0x03, 0x00, 0x00, + 0x04, 0x18, 0x03, 0x00, 0x00, 0x4d, 0x19, 0x03, + 0x00, 0x00, 0x04, 0x1a, 0x03, 0x00, 0x00, 0x4d, + 0x1b, 0x03, 0x00, 0x00, 0x04, 0x1c, 0x03, 0x00, + 0x00, 0x4d, 0x1d, 0x03, 0x00, 0x00, 0x04, 0x1e, + 0x03, 0x00, 0x00, 0x4d, 0x1f, 0x03, 0x00, 0x00, + 0x04, 0x20, 0x03, 0x00, 0x00, 0x4d, 0x21, 0x03, + 0x00, 0x00, 0x04, 0x22, 0x03, 0x00, 0x00, 0x4d, + 0x23, 0x03, 0x00, 0x00, 0x04, 0x24, 0x03, 0x00, + 0x00, 0x4d, 0x25, 0x03, 0x00, 0x00, 0x4d, 0x26, + 0x03, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x00, + 0x24, 0x01, 0x00, 0xcc, 0x28, 0xce, 0x0c, 0x01, + 0x00, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, + 0x31, 0x33, 0x07, 0x02, 0x37, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_sr_size = 33419; + +const uint8_t intl_sr[33419] = { + 0x01, 0xc6, 0x06, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x73, 0x72, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x0e, + 0x7b, 0x31, 0x7d, 0x20, 0x7b, 0x30, 0x7d, 0x0a, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, 0x65, + 0x64, 0x69, 0x75, 0x6d, 0x08, 0x66, 0x75, 0x6c, + 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x02, 0x64, + 0x02, 0x45, 0x08, 0x45, 0x20, 0x64, 0x2e, 0x04, + 0x45, 0x64, 0x12, 0x45, 0x2c, 0x20, 0x68, 0x2e, + 0x6d, 0x6d, 0x20, 0x61, 0x06, 0x45, 0x68, 0x6d, + 0x10, 0x45, 0x2c, 0x20, 0x48, 0x48, 0x2e, 0x6d, + 0x6d, 0x06, 0x45, 0x48, 0x6d, 0x18, 0x45, 0x2c, + 0x20, 0x68, 0x2e, 0x6d, 0x6d, 0x2e, 0x73, 0x73, + 0x20, 0x61, 0x08, 0x45, 0x68, 0x6d, 0x73, 0x16, + 0x45, 0x2c, 0x20, 0x48, 0x48, 0x2e, 0x6d, 0x6d, + 0x2e, 0x73, 0x73, 0x08, 0x45, 0x48, 0x6d, 0x73, + 0x08, 0x79, 0x2e, 0x20, 0x47, 0x04, 0x47, 0x79, + 0x10, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x2e, 0x20, + 0x47, 0x0a, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x16, + 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, + 0x2e, 0x20, 0x47, 0x0c, 0x47, 0x79, 0x4d, 0x4d, + 0x4d, 0x64, 0x1c, 0x45, 0x2c, 0x20, 0x64, 0x2e, + 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x2e, 0x20, + 0x47, 0x0e, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x45, + 0x64, 0x06, 0x68, 0x20, 0x61, 0x02, 0x68, 0x04, + 0x48, 0x48, 0x02, 0x48, 0x0e, 0x68, 0x68, 0x2e, + 0x6d, 0x6d, 0x20, 0x61, 0x04, 0x68, 0x6d, 0x0a, + 0x48, 0x48, 0x2e, 0x6d, 0x6d, 0x04, 0x48, 0x6d, + 0x14, 0x68, 0x68, 0x2e, 0x6d, 0x6d, 0x2e, 0x73, + 0x73, 0x20, 0x61, 0x06, 0x68, 0x6d, 0x73, 0x10, + 0x48, 0x48, 0x2e, 0x6d, 0x6d, 0x2e, 0x73, 0x73, + 0x06, 0x48, 0x6d, 0x73, 0x16, 0x68, 0x2e, 0x6d, + 0x6d, 0x2e, 0x73, 0x73, 0x20, 0x61, 0x20, 0x76, + 0x08, 0x68, 0x6d, 0x73, 0x76, 0x14, 0x48, 0x48, + 0x2e, 0x6d, 0x6d, 0x2e, 0x73, 0x73, 0x20, 0x76, + 0x08, 0x48, 0x6d, 0x73, 0x76, 0x10, 0x68, 0x2e, + 0x6d, 0x6d, 0x20, 0x61, 0x20, 0x76, 0x06, 0x68, + 0x6d, 0x76, 0x0e, 0x48, 0x48, 0x2e, 0x6d, 0x6d, + 0x20, 0x76, 0x06, 0x48, 0x6d, 0x76, 0x02, 0x4c, + 0x02, 0x4d, 0x06, 0x64, 0x2f, 0x4d, 0x04, 0x4d, + 0x64, 0x0e, 0x45, 0x2c, 0x20, 0x64, 0x2e, 0x4d, + 0x2e, 0x06, 0x4d, 0x45, 0x64, 0x0a, 0x4d, 0x4d, + 0x2d, 0x64, 0x64, 0x08, 0x4d, 0x4d, 0x64, 0x64, + 0x06, 0x4c, 0x4c, 0x4c, 0x06, 0x4d, 0x4d, 0x4d, + 0x0c, 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x08, + 0x4d, 0x4d, 0x4d, 0x64, 0x0c, 0x64, 0x64, 0x2e, + 0x4d, 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x64, + 0x64, 0x10, 0x45, 0x20, 0x64, 0x2e, 0x20, 0x4d, + 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x45, 0x64, + 0x0e, 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, + 0x0a, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x14, 0x45, + 0x2c, 0x20, 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, + 0x4d, 0x0c, 0x4d, 0x4d, 0x4d, 0x4d, 0x45, 0x64, + 0x0a, 0x6d, 0x6d, 0x2e, 0x73, 0x73, 0x04, 0x6d, + 0x73, 0x04, 0x79, 0x2e, 0x02, 0x79, 0x08, 0x4d, + 0x2e, 0x79, 0x2e, 0x04, 0x79, 0x4d, 0x0c, 0x64, + 0x2e, 0x4d, 0x2e, 0x79, 0x2e, 0x06, 0x79, 0x4d, + 0x64, 0x12, 0x45, 0x2c, 0x20, 0x64, 0x2e, 0x4d, + 0x2e, 0x79, 0x2e, 0x08, 0x79, 0x4d, 0x45, 0x64, + 0x0a, 0x4d, 0x4d, 0x2e, 0x79, 0x2e, 0x06, 0x79, + 0x4d, 0x4d, 0x10, 0x64, 0x64, 0x2e, 0x4d, 0x4d, + 0x2e, 0x79, 0x2e, 0x0a, 0x79, 0x4d, 0x4d, 0x64, + 0x64, 0x0c, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x2e, + 0x08, 0x79, 0x4d, 0x4d, 0x4d, 0x12, 0x64, 0x2e, + 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x2e, 0x0a, + 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x18, 0x45, 0x2c, + 0x20, 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x20, + 0x79, 0x2e, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x45, + 0x64, 0x0e, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, + 0x2e, 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x0c, + 0x51, 0x51, 0x51, 0x2e, 0x20, 0x79, 0x08, 0x79, + 0x51, 0x51, 0x51, 0x0e, 0x51, 0x51, 0x51, 0x51, + 0x2e, 0x20, 0x79, 0x0a, 0x79, 0x51, 0x51, 0x51, + 0x51, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x73, 0x22, 0x45, 0x45, 0x45, 0x45, 0x2c, + 0x20, 0x64, 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, + 0x4d, 0x20, 0x79, 0x2e, 0x14, 0x79, 0x4d, 0x4d, + 0x4d, 0x4d, 0x45, 0x45, 0x45, 0x45, 0x64, 0x16, + 0x64, 0x64, 0x2e, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, + 0x20, 0x79, 0x2e, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, + 0x4d, 0x64, 0x0e, 0x64, 0x2e, 0x4d, 0x2e, 0x79, + 0x79, 0x2e, 0x16, 0x64, 0x61, 0x74, 0x65, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x1a, 0x48, + 0x48, 0x2e, 0x6d, 0x6d, 0x2e, 0x73, 0x73, 0x20, + 0x7a, 0x7a, 0x7a, 0x7a, 0x12, 0x68, 0x6d, 0x6d, + 0x73, 0x73, 0x7a, 0x7a, 0x7a, 0x7a, 0x14, 0x48, + 0x48, 0x2e, 0x6d, 0x6d, 0x2e, 0x73, 0x73, 0x20, + 0x7a, 0x08, 0x68, 0x6d, 0x73, 0x7a, 0x16, 0x74, + 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x73, 0x0e, 0x66, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x73, 0x03, 0x58, 0x04, 0x03, 0x44, 0x04, + 0x03, 0x3c, 0x04, 0x03, 0x30, 0x04, 0x03, 0x41, + 0x04, 0x03, 0x3e, 0x04, 0x03, 0x3d, 0x04, 0x03, + 0x34, 0x04, 0x0c, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x07, 0x58, 0x04, 0x30, 0x04, 0x3d, 0x04, + 0x07, 0x44, 0x04, 0x35, 0x04, 0x31, 0x04, 0x07, + 0x3c, 0x04, 0x30, 0x04, 0x40, 0x04, 0x07, 0x30, + 0x04, 0x3f, 0x04, 0x40, 0x04, 0x07, 0x3c, 0x04, + 0x30, 0x04, 0x58, 0x04, 0x07, 0x58, 0x04, 0x43, + 0x04, 0x3d, 0x04, 0x07, 0x58, 0x04, 0x43, 0x04, + 0x3b, 0x04, 0x07, 0x30, 0x04, 0x32, 0x04, 0x33, + 0x04, 0x07, 0x41, 0x04, 0x35, 0x04, 0x3f, 0x04, + 0x07, 0x3e, 0x04, 0x3a, 0x04, 0x42, 0x04, 0x07, + 0x3d, 0x04, 0x3e, 0x04, 0x32, 0x04, 0x07, 0x34, + 0x04, 0x35, 0x04, 0x46, 0x04, 0x0d, 0x58, 0x04, + 0x30, 0x04, 0x3d, 0x04, 0x43, 0x04, 0x30, 0x04, + 0x40, 0x04, 0x0f, 0x44, 0x04, 0x35, 0x04, 0x31, + 0x04, 0x40, 0x04, 0x43, 0x04, 0x30, 0x04, 0x40, + 0x04, 0x09, 0x3c, 0x04, 0x30, 0x04, 0x40, 0x04, + 0x42, 0x04, 0x0b, 0x30, 0x04, 0x3f, 0x04, 0x40, + 0x04, 0x38, 0x04, 0x3b, 0x04, 0x0d, 0x30, 0x04, + 0x32, 0x04, 0x33, 0x04, 0x43, 0x04, 0x41, 0x04, + 0x42, 0x04, 0x13, 0x41, 0x04, 0x35, 0x04, 0x3f, + 0x04, 0x42, 0x04, 0x35, 0x04, 0x3c, 0x04, 0x31, + 0x04, 0x30, 0x04, 0x40, 0x04, 0x0f, 0x3e, 0x04, + 0x3a, 0x04, 0x42, 0x04, 0x3e, 0x04, 0x31, 0x04, + 0x30, 0x04, 0x40, 0x04, 0x11, 0x3d, 0x04, 0x3e, + 0x04, 0x32, 0x04, 0x35, 0x04, 0x3c, 0x04, 0x31, + 0x04, 0x30, 0x04, 0x40, 0x04, 0x11, 0x34, 0x04, + 0x35, 0x04, 0x46, 0x04, 0x35, 0x04, 0x3c, 0x04, + 0x31, 0x04, 0x30, 0x04, 0x40, 0x04, 0x0c, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x73, 0x03, 0x3f, 0x04, + 0x03, 0x43, 0x04, 0x03, 0x47, 0x04, 0x07, 0x3d, + 0x04, 0x35, 0x04, 0x34, 0x04, 0x07, 0x3f, 0x04, + 0x3e, 0x04, 0x3d, 0x04, 0x07, 0x43, 0x04, 0x42, + 0x04, 0x3e, 0x04, 0x07, 0x41, 0x04, 0x40, 0x04, + 0x35, 0x04, 0x07, 0x47, 0x04, 0x35, 0x04, 0x42, + 0x04, 0x07, 0x3f, 0x04, 0x35, 0x04, 0x42, 0x04, + 0x07, 0x41, 0x04, 0x43, 0x04, 0x31, 0x04, 0x0d, + 0x3d, 0x04, 0x35, 0x04, 0x34, 0x04, 0x35, 0x04, + 0x59, 0x04, 0x30, 0x04, 0x13, 0x3f, 0x04, 0x3e, + 0x04, 0x3d, 0x04, 0x35, 0x04, 0x34, 0x04, 0x35, + 0x04, 0x59, 0x04, 0x30, 0x04, 0x3a, 0x04, 0x0d, + 0x43, 0x04, 0x42, 0x04, 0x3e, 0x04, 0x40, 0x04, + 0x30, 0x04, 0x3a, 0x04, 0x0b, 0x41, 0x04, 0x40, + 0x04, 0x35, 0x04, 0x34, 0x04, 0x30, 0x04, 0x11, + 0x47, 0x04, 0x35, 0x04, 0x42, 0x04, 0x32, 0x04, + 0x40, 0x04, 0x42, 0x04, 0x30, 0x04, 0x3a, 0x04, + 0x0b, 0x3f, 0x04, 0x35, 0x04, 0x42, 0x04, 0x30, + 0x04, 0x3a, 0x04, 0x0d, 0x41, 0x04, 0x43, 0x04, + 0x31, 0x04, 0x3e, 0x04, 0x42, 0x04, 0x30, 0x04, + 0x08, 0x64, 0x61, 0x79, 0x73, 0x05, 0x11, 0x04, + 0x15, 0x04, 0x08, 0x65, 0x72, 0x61, 0x73, 0x13, + 0x3f, 0x04, 0x40, 0x04, 0x35, 0x04, 0x20, 0x00, + 0x3f, 0x04, 0x3e, 0x04, 0x34, 0x04, 0x3d, 0x04, + 0x35, 0x04, 0x04, 0x61, 0x6d, 0x11, 0x3f, 0x04, + 0x3e, 0x04, 0x20, 0x00, 0x3f, 0x04, 0x3e, 0x04, + 0x34, 0x04, 0x3d, 0x04, 0x35, 0x04, 0x04, 0x70, + 0x6d, 0x14, 0x64, 0x61, 0x79, 0x50, 0x65, 0x72, + 0x69, 0x6f, 0x64, 0x73, 0x06, 0x4d, 0x30, 0x31, + 0x06, 0x4d, 0x30, 0x32, 0x06, 0x4d, 0x30, 0x33, + 0x06, 0x4d, 0x30, 0x34, 0x06, 0x4d, 0x30, 0x35, + 0x06, 0x4d, 0x30, 0x36, 0x06, 0x4d, 0x30, 0x37, + 0x06, 0x4d, 0x30, 0x38, 0x06, 0x4d, 0x30, 0x39, + 0x06, 0x4d, 0x31, 0x30, 0x06, 0x4d, 0x31, 0x31, + 0x06, 0x4d, 0x31, 0x32, 0x09, 0x22, 0x04, 0x30, + 0x04, 0x43, 0x04, 0x42, 0x04, 0x09, 0x11, 0x04, + 0x30, 0x04, 0x31, 0x04, 0x30, 0x04, 0x0b, 0x25, + 0x04, 0x30, 0x04, 0x42, 0x04, 0x3e, 0x04, 0x40, + 0x04, 0x0b, 0x1a, 0x04, 0x38, 0x04, 0x30, 0x04, + 0x45, 0x04, 0x3a, 0x04, 0x09, 0x22, 0x04, 0x3e, + 0x04, 0x31, 0x04, 0x30, 0x04, 0x0b, 0x10, 0x04, + 0x3c, 0x04, 0x48, 0x04, 0x38, 0x04, 0x40, 0x04, + 0x11, 0x11, 0x04, 0x30, 0x04, 0x40, 0x04, 0x30, + 0x04, 0x3c, 0x04, 0x45, 0x04, 0x30, 0x04, 0x42, + 0x04, 0x11, 0x11, 0x04, 0x30, 0x04, 0x40, 0x04, + 0x30, 0x04, 0x3c, 0x04, 0x43, 0x04, 0x34, 0x04, + 0x30, 0x04, 0x0d, 0x11, 0x04, 0x30, 0x04, 0x48, + 0x04, 0x30, 0x04, 0x3d, 0x04, 0x41, 0x04, 0x0b, + 0x1f, 0x04, 0x30, 0x04, 0x3e, 0x04, 0x3d, 0x04, + 0x30, 0x04, 0x09, 0x15, 0x04, 0x3f, 0x04, 0x35, + 0x04, 0x3f, 0x04, 0x0b, 0x1c, 0x04, 0x35, 0x04, + 0x41, 0x04, 0x40, 0x04, 0x30, 0x04, 0x09, 0x1d, + 0x04, 0x30, 0x04, 0x41, 0x04, 0x38, 0x04, 0x08, + 0x45, 0x52, 0x41, 0x30, 0x08, 0x45, 0x52, 0x41, + 0x31, 0x11, 0x1c, 0x04, 0x35, 0x04, 0x41, 0x04, + 0x3a, 0x04, 0x35, 0x04, 0x40, 0x04, 0x35, 0x04, + 0x3c, 0x04, 0x0d, 0x22, 0x04, 0x35, 0x04, 0x3a, + 0x04, 0x35, 0x04, 0x3c, 0x04, 0x42, 0x04, 0x0b, + 0x25, 0x04, 0x35, 0x04, 0x34, 0x04, 0x30, 0x04, + 0x40, 0x04, 0x0d, 0x22, 0x04, 0x30, 0x04, 0x45, + 0x04, 0x41, 0x04, 0x30, 0x04, 0x41, 0x04, 0x07, + 0x22, 0x04, 0x35, 0x04, 0x40, 0x04, 0x0f, 0x08, + 0x04, 0x35, 0x04, 0x3a, 0x04, 0x30, 0x04, 0x42, + 0x04, 0x38, 0x04, 0x42, 0x04, 0x0f, 0x1c, 0x04, + 0x35, 0x04, 0x33, 0x04, 0x30, 0x04, 0x31, 0x04, + 0x38, 0x04, 0x42, 0x04, 0x0d, 0x1c, 0x04, 0x38, + 0x04, 0x30, 0x04, 0x37, 0x04, 0x38, 0x04, 0x30, + 0x04, 0x0d, 0x13, 0x04, 0x35, 0x04, 0x3d, 0x04, + 0x31, 0x04, 0x3e, 0x04, 0x42, 0x04, 0x09, 0x21, + 0x04, 0x35, 0x04, 0x3d, 0x04, 0x35, 0x04, 0x0b, + 0x25, 0x04, 0x30, 0x04, 0x3c, 0x04, 0x3b, 0x04, + 0x35, 0x04, 0x0d, 0x1d, 0x04, 0x35, 0x04, 0x45, + 0x04, 0x30, 0x04, 0x41, 0x04, 0x35, 0x04, 0x0f, + 0x1f, 0x04, 0x30, 0x04, 0x33, 0x04, 0x43, 0x04, + 0x3c, 0x04, 0x35, 0x04, 0x3d, 0x04, 0x0d, 0x3f, + 0x04, 0x2e, 0x00, 0x3d, 0x04, 0x2e, 0x00, 0x35, + 0x04, 0x2e, 0x00, 0x09, 0x3d, 0x04, 0x2e, 0x00, + 0x35, 0x04, 0x2e, 0x00, 0x06, 0x42, 0x43, 0x45, + 0x04, 0x43, 0x45, 0x11, 0x3f, 0x04, 0x2e, 0x00, + 0x20, 0x00, 0x3d, 0x04, 0x2e, 0x00, 0x20, 0x00, + 0x35, 0x04, 0x2e, 0x00, 0x0b, 0x3d, 0x04, 0x2e, + 0x00, 0x20, 0x00, 0x35, 0x04, 0x2e, 0x00, 0x19, + 0x3f, 0x04, 0x40, 0x04, 0x35, 0x04, 0x20, 0x00, + 0x3d, 0x04, 0x3e, 0x04, 0x32, 0x04, 0x35, 0x04, + 0x20, 0x00, 0x35, 0x04, 0x40, 0x04, 0x35, 0x04, + 0x11, 0x3d, 0x04, 0x3e, 0x04, 0x32, 0x04, 0x35, + 0x04, 0x20, 0x00, 0x35, 0x04, 0x40, 0x04, 0x35, + 0x04, 0x0b, 0x22, 0x04, 0x38, 0x04, 0x48, 0x04, + 0x40, 0x04, 0x38, 0x04, 0x0d, 0x25, 0x04, 0x35, + 0x04, 0x48, 0x04, 0x32, 0x04, 0x30, 0x04, 0x3d, + 0x04, 0x0d, 0x1a, 0x04, 0x38, 0x04, 0x41, 0x04, + 0x3b, 0x04, 0x35, 0x04, 0x32, 0x04, 0x0b, 0x22, + 0x04, 0x35, 0x04, 0x32, 0x04, 0x35, 0x04, 0x42, + 0x04, 0x0b, 0x28, 0x04, 0x35, 0x04, 0x32, 0x04, + 0x30, 0x04, 0x42, 0x04, 0x0d, 0x10, 0x04, 0x34, + 0x04, 0x30, 0x04, 0x40, 0x04, 0x20, 0x00, 0x49, + 0x00, 0x09, 0x10, 0x04, 0x34, 0x04, 0x30, 0x04, + 0x40, 0x04, 0x0b, 0x1d, 0x04, 0x38, 0x04, 0x41, + 0x04, 0x30, 0x04, 0x3d, 0x04, 0x09, 0x18, 0x04, + 0x58, 0x04, 0x30, 0x04, 0x40, 0x04, 0x0b, 0x21, + 0x04, 0x38, 0x04, 0x32, 0x04, 0x30, 0x04, 0x3d, + 0x04, 0x0b, 0x22, 0x04, 0x30, 0x04, 0x3c, 0x04, + 0x43, 0x04, 0x37, 0x04, 0x05, 0x10, 0x04, 0x32, + 0x04, 0x09, 0x15, 0x04, 0x3b, 0x04, 0x43, 0x04, + 0x3b, 0x04, 0x0f, 0x10, 0x04, 0x34, 0x04, 0x30, + 0x04, 0x40, 0x04, 0x20, 0x00, 0x49, 0x00, 0x49, + 0x00, 0x04, 0x41, 0x4d, 0x0d, 0x27, 0x04, 0x30, + 0x04, 0x38, 0x04, 0x42, 0x04, 0x40, 0x04, 0x30, + 0x04, 0x0f, 0x12, 0x04, 0x30, 0x04, 0x38, 0x04, + 0x41, 0x04, 0x30, 0x04, 0x3a, 0x04, 0x30, 0x04, + 0x0f, 0x08, 0x04, 0x38, 0x04, 0x30, 0x04, 0x38, + 0x04, 0x41, 0x04, 0x42, 0x04, 0x30, 0x04, 0x0b, + 0x10, 0x04, 0x41, 0x04, 0x30, 0x04, 0x34, 0x04, + 0x30, 0x04, 0x0f, 0x21, 0x04, 0x40, 0x04, 0x30, + 0x04, 0x32, 0x04, 0x30, 0x04, 0x3d, 0x04, 0x30, + 0x04, 0x0b, 0x11, 0x04, 0x30, 0x04, 0x34, 0x04, + 0x40, 0x04, 0x30, 0x04, 0x0d, 0x10, 0x04, 0x41, + 0x04, 0x32, 0x04, 0x38, 0x04, 0x3d, 0x04, 0x30, + 0x04, 0x0f, 0x1a, 0x04, 0x30, 0x04, 0x40, 0x04, + 0x42, 0x04, 0x38, 0x04, 0x3a, 0x04, 0x30, 0x04, + 0x11, 0x10, 0x04, 0x40, 0x04, 0x33, 0x04, 0x30, + 0x04, 0x58, 0x04, 0x30, 0x04, 0x3d, 0x04, 0x30, + 0x04, 0x0b, 0x1f, 0x04, 0x30, 0x04, 0x43, 0x04, + 0x37, 0x04, 0x30, 0x04, 0x09, 0x1c, 0x04, 0x30, + 0x04, 0x33, 0x04, 0x30, 0x04, 0x0f, 0x24, 0x04, + 0x30, 0x04, 0x3b, 0x04, 0x33, 0x04, 0x43, 0x04, + 0x3d, 0x04, 0x30, 0x04, 0x09, 0x21, 0x04, 0x10, + 0x04, 0x1a, 0x04, 0x10, 0x04, 0x08, 0x4d, 0x75, + 0x68, 0x2e, 0x08, 0x53, 0x61, 0x66, 0x2e, 0x0c, + 0x52, 0x61, 0x62, 0x2e, 0x20, 0x49, 0x0e, 0x52, + 0x61, 0x62, 0x2e, 0x20, 0x49, 0x49, 0x0c, 0x4a, + 0x75, 0x6d, 0x2e, 0x20, 0x49, 0x0e, 0x4a, 0x75, + 0x6d, 0x2e, 0x20, 0x49, 0x49, 0x08, 0x52, 0x61, + 0x6a, 0x2e, 0x08, 0x53, 0x68, 0x61, 0x2e, 0x08, + 0x52, 0x61, 0x6d, 0x2e, 0x0a, 0x53, 0x68, 0x61, + 0x77, 0x2e, 0x11, 0x44, 0x00, 0x68, 0x00, 0x75, + 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x51, + 0x00, 0x2e, 0x00, 0x11, 0x44, 0x00, 0x68, 0x00, + 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, + 0x48, 0x00, 0x2e, 0x00, 0x0f, 0x1c, 0x04, 0x43, + 0x04, 0x40, 0x04, 0x30, 0x04, 0x45, 0x04, 0x30, + 0x04, 0x3c, 0x04, 0x0b, 0x21, 0x04, 0x30, 0x04, + 0x44, 0x04, 0x30, 0x04, 0x40, 0x04, 0x0f, 0x20, + 0x04, 0x30, 0x04, 0x31, 0x04, 0x38, 0x04, 0xbb, + 0x02, 0x20, 0x00, 0x49, 0x00, 0x11, 0x20, 0x04, + 0x30, 0x04, 0x31, 0x04, 0x38, 0x04, 0xbb, 0x02, + 0x20, 0x00, 0x49, 0x00, 0x49, 0x00, 0x11, 0x08, + 0x04, 0x43, 0x04, 0x3c, 0x04, 0x30, 0x04, 0x34, + 0x04, 0x30, 0x04, 0x20, 0x00, 0x49, 0x00, 0x13, + 0x08, 0x04, 0x43, 0x04, 0x3c, 0x04, 0x30, 0x04, + 0x34, 0x04, 0x30, 0x04, 0x20, 0x00, 0x49, 0x00, + 0x49, 0x00, 0x0b, 0x20, 0x04, 0x30, 0x04, 0x52, + 0x04, 0x30, 0x04, 0x31, 0x04, 0x0d, 0x28, 0x04, + 0x30, 0x04, 0xbb, 0x02, 0x31, 0x04, 0x30, 0x04, + 0x3d, 0x04, 0x0f, 0x20, 0x04, 0x30, 0x04, 0x3c, + 0x04, 0x30, 0x04, 0x34, 0x04, 0x30, 0x04, 0x3d, + 0x04, 0x0b, 0x28, 0x04, 0x30, 0x04, 0x32, 0x04, + 0x30, 0x04, 0x3b, 0x04, 0x15, 0x14, 0x04, 0x43, + 0x04, 0xbb, 0x02, 0x3b, 0x04, 0x2d, 0x00, 0x1a, + 0x04, 0x38, 0x04, 0xbb, 0x02, 0x34, 0x04, 0x30, + 0x04, 0x13, 0x14, 0x04, 0x43, 0x04, 0xbb, 0x02, + 0x3b, 0x04, 0x2d, 0x00, 0x45, 0x04, 0x38, 0x04, + 0x52, 0x04, 0x30, 0x04, 0x05, 0x10, 0x04, 0x25, + 0x04, 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x36, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x36, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x36, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, + 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x1d, 0x57, 0x00, 0x61, 0x00, + 0x64, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x1f, 0x52, 0x00, 0x65, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, + 0x59, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x37, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x2d, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6d, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x2d, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x2b, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, 0x2d, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, 0x2a, 0x4a, + 0x69, 0x6e, 0x67, 0x6f, 0x2d, 0x6b, 0x65, 0x69, + 0x75, 0x6e, 0x20, 0x28, 0x37, 0x36, 0x37, 0x2d, + 0x37, 0x37, 0x30, 0x29, 0x1d, 0x48, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x38, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x1f, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x2d, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x2d, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x1f, 0x44, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1d, 0x4a, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, + 0x4b, 0x00, 0x61, 0x00, 0x6a, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1f, 0x53, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x20, 0x54, 0x65, 0x6e, 0x2d, 0x61, + 0x6e, 0x20, 0x28, 0x38, 0x35, 0x37, 0x2d, 0x38, + 0x35, 0x39, 0x29, 0x1f, 0x4a, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x21, 0x47, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x1f, 0x45, 0x00, 0x6e, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1b, 0x4c, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x1d, 0x41, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x1f, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, + 0x45, 0x00, 0x69, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, + 0x00, 0x73, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x39, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, + 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4d, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x35, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x27, 0x4a, 0x00, 0x69, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x29, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4c, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x4a, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, 0x24, 0x54, + 0x65, 0x6e, 0x2d, 0x65, 0x69, 0x20, 0x28, 0x31, + 0x31, 0x31, 0x30, 0x2d, 0x31, 0x31, 0x31, 0x33, + 0x29, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x44, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x48, 0x00, 0x65, 0x00, 0x69, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x27, 0x45, 0x00, 0x69, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x68, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, + 0x00, 0x61, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x41, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x69, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x59, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, + 0x4a, 0x00, 0x75, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x29, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x29, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, + 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x41, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x4d, + 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x27, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x75, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x29, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x29, 0x52, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x4e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x4c, 0x01, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6d, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x1f, 0x4b, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, + 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4c, + 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x74, 0x00, + 0x73, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x4d, 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x27, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x21, 0x4c, 0x01, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x21, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1f, + 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x72, 0x00, 0x65, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x62, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x27, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x48, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x65, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x41, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4d, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x02, 0x54, 0x02, 0x53, + 0x1f, 0x22, 0x04, 0x30, 0x04, 0x38, 0x04, 0x3a, + 0x04, 0x30, 0x04, 0x20, 0x00, 0x28, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, 0x36, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x29, 0x00, 0x21, + 0x25, 0x04, 0x30, 0x04, 0x3a, 0x04, 0x43, 0x04, + 0x47, 0x04, 0x38, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x36, 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x25, 0x04, 0x30, 0x04, 0x3a, 0x04, 0x43, + 0x04, 0x45, 0x04, 0x3e, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x1d, 0x28, 0x04, 0x43, 0x04, 0x47, 0x04, + 0x3e, 0x04, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x22, + 0x04, 0x30, 0x04, 0x38, 0x04, 0x45, 0x04, 0x3e, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x1a, 0x04, + 0x35, 0x04, 0x38, 0x04, 0x43, 0x04, 0x3d, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x1d, 0x12, 0x04, 0x30, + 0x04, 0x34, 0x04, 0x3e, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x1f, 0x20, 0x04, 0x35, 0x04, 0x38, 0x04, + 0x3a, 0x04, 0x38, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x1d, 0x08, 0x04, 0x3e, 0x04, 0x40, 0x04, 0x3e, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x08, 0x04, + 0x38, 0x04, 0x3d, 0x04, 0x3a, 0x04, 0x38, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x22, 0x04, 0x35, + 0x04, 0x3c, 0x04, 0x3f, 0x04, 0x38, 0x04, 0x3e, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x37, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, 0x22, 0x04, + 0x35, 0x04, 0x3c, 0x04, 0x3f, 0x04, 0x38, 0x04, + 0x3e, 0x04, 0x2d, 0x00, 0x3a, 0x04, 0x30, 0x04, + 0x3c, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x2d, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x2b, 0x22, 0x04, 0x35, 0x04, 0x3c, + 0x04, 0x3f, 0x04, 0x38, 0x04, 0x3e, 0x04, 0x2d, + 0x00, 0x48, 0x04, 0x3e, 0x04, 0x45, 0x04, 0x3e, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x2b, 0x22, 0x04, + 0x35, 0x04, 0x3c, 0x04, 0x3f, 0x04, 0x38, 0x04, + 0x3e, 0x04, 0x2d, 0x00, 0x45, 0x04, 0x3e, 0x04, + 0x52, 0x04, 0x38, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, 0x2d, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x2b, 0x22, 0x04, 0x35, 0x04, 0x3c, 0x04, 0x3f, + 0x04, 0x3e, 0x04, 0x2d, 0x00, 0x52, 0x04, 0x38, + 0x04, 0x3d, 0x04, 0x33, 0x04, 0x3e, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x2b, 0x02, 0x04, 0x38, 0x04, + 0x3d, 0x04, 0x33, 0x04, 0x3e, 0x04, 0x2d, 0x00, + 0x3a, 0x04, 0x35, 0x04, 0x38, 0x04, 0x43, 0x04, + 0x3d, 0x04, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x1d, 0x25, + 0x04, 0x3e, 0x04, 0x3a, 0x04, 0x38, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x1f, 0x22, 0x04, 0x35, 0x04, + 0x3d, 0x04, 0x2d, 0x00, 0x3e, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x2d, 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x23, 0x15, 0x04, 0x3d, 0x04, 0x40, + 0x04, 0x58, 0x04, 0x30, 0x04, 0x3a, 0x04, 0x43, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x38, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, 0x14, 0x04, + 0x30, 0x04, 0x38, 0x04, 0x34, 0x04, 0x3e, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x38, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x1f, 0x1a, 0x04, 0x3e, + 0x04, 0x3d, 0x04, 0x38, 0x04, 0x3d, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1f, 0x22, 0x04, 0x35, 0x04, + 0x3d, 0x04, 0x47, 0x04, 0x3e, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1d, 0x28, 0x04, 0x3e, 0x04, 0x32, + 0x04, 0x30, 0x04, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, + 0x1a, 0x04, 0x30, 0x04, 0x58, 0x04, 0x3e, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1d, 0x1d, 0x04, 0x38, + 0x04, 0x5a, 0x04, 0x43, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1f, 0x21, 0x04, 0x30, 0x04, 0x38, 0x04, + 0x3a, 0x04, 0x3e, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x1f, 0x22, 0x04, 0x35, 0x04, 0x3d, 0x04, 0x30, + 0x04, 0x3d, 0x04, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, + 0x08, 0x04, 0x3e, 0x04, 0x33, 0x04, 0x30, 0x04, + 0x3d, 0x04, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x13, + 0x04, 0x35, 0x04, 0x3d, 0x04, 0x3a, 0x04, 0x35, + 0x04, 0x38, 0x04, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1d, + 0x1d, 0x04, 0x38, 0x04, 0x5a, 0x04, 0x30, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x1a, 0x04, 0x30, + 0x04, 0x3c, 0x04, 0x3f, 0x04, 0x58, 0x04, 0x3e, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x1f, 0x28, 0x04, + 0x3e, 0x04, 0x42, 0x04, 0x30, 0x04, 0x38, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1d, 0x15, 0x04, 0x3d, + 0x04, 0x52, 0x04, 0x38, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x1d, 0x15, 0x04, 0x3d, 0x04, 0x47, 0x04, + 0x3e, 0x04, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x28, + 0x04, 0x3e, 0x04, 0x45, 0x04, 0x35, 0x04, 0x38, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x22, 0x04, + 0x35, 0x04, 0x3d, 0x04, 0x33, 0x04, 0x58, 0x04, + 0x3e, 0x04, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x22, + 0x04, 0x35, 0x04, 0x3d, 0x04, 0x40, 0x04, 0x38, + 0x04, 0x30, 0x04, 0x3a, 0x04, 0x43, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x34, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x22, 0x04, 0x35, 0x04, + 0x3d, 0x04, 0x42, 0x04, 0x3e, 0x04, 0x3a, 0x04, + 0x43, 0x04, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1b, 0x1e, + 0x04, 0x32, 0x04, 0x30, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1d, 0x1a, 0x04, 0x3e, 0x04, 0x45, 0x04, + 0x3e, 0x04, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1b, 0x10, + 0x04, 0x3d, 0x04, 0x30, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x22, 0x04, 0x35, 0x04, 0x3d, 0x04, + 0x40, 0x04, 0x3e, 0x04, 0x3a, 0x04, 0x43, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x21, 0x22, 0x04, 0x35, + 0x04, 0x3d, 0x04, 0x2d, 0x00, 0x35, 0x04, 0x3d, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x2d, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, 0x08, 0x04, + 0x3e, 0x04, 0x33, 0x04, 0x35, 0x04, 0x3d, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x22, 0x04, 0x35, + 0x04, 0x3d, 0x04, 0x33, 0x04, 0x35, 0x04, 0x3d, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x15, 0x04, + 0x38, 0x04, 0x3a, 0x04, 0x30, 0x04, 0x3d, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x1d, 0x1a, 0x04, 0x30, + 0x04, 0x3d, 0x04, 0x30, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x1f, 0x15, 0x04, 0x38, 0x04, 0x2d, 0x00, + 0x35, 0x04, 0x3d, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, 0x2d, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x1d, 0x15, 0x04, 0x38, 0x04, 0x41, 0x04, 0x3e, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x28, 0x04, + 0x3e, 0x04, 0x40, 0x04, 0x58, 0x04, 0x30, 0x04, + 0x3a, 0x04, 0x43, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x21, 0x27, 0x04, 0x3e, 0x04, 0x42, 0x04, 0x3e, + 0x04, 0x3a, 0x04, 0x43, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x1f, 0x27, 0x04, 0x3e, 0x04, 0x45, 0x04, + 0x3e, 0x04, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x1a, 0x04, 0x30, 0x04, 0x3d, 0x04, 0x3a, + 0x04, 0x3e, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x21, 0x27, 0x04, 0x3e, 0x04, + 0x32, 0x04, 0x30, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x1a, 0x04, 0x30, + 0x04, 0x3d, 0x04, 0x38, 0x04, 0x3d, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x02, 0x04, 0x38, 0x04, 0x30, 0x04, 0x3d, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x1c, 0x04, 0x30, 0x04, 0x5a, 0x04, 0x43, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x23, 0x27, 0x04, 0x3e, 0x04, 0x33, 0x04, + 0x35, 0x04, 0x3d, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x27, 0x27, 0x04, 0x3e, + 0x04, 0x40, 0x04, 0x58, 0x04, 0x30, 0x04, 0x3a, + 0x04, 0x43, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x27, 0x04, 0x3e, 0x04, + 0x3a, 0x04, 0x58, 0x04, 0x43, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x27, 0x1a, + 0x04, 0x30, 0x04, 0x3d, 0x04, 0x42, 0x04, 0x3e, + 0x04, 0x3a, 0x04, 0x43, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x21, 0x15, 0x04, + 0x38, 0x04, 0x48, 0x04, 0x3e, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x22, + 0x04, 0x35, 0x04, 0x3d, 0x04, 0x52, 0x04, 0x38, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x35, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x23, 0x1a, 0x04, 0x3e, 0x04, 0x45, 0x04, + 0x35, 0x04, 0x38, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x27, 0x02, 0x04, 0x38, + 0x04, 0x40, 0x04, 0x58, 0x04, 0x30, 0x04, 0x3a, + 0x04, 0x43, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x15, 0x04, 0x3d, 0x04, + 0x3a, 0x04, 0x58, 0x04, 0x43, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x28, + 0x04, 0x3e, 0x04, 0x45, 0x04, 0x3e, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x27, + 0x28, 0x04, 0x3e, 0x04, 0x40, 0x04, 0x58, 0x04, + 0x30, 0x04, 0x3a, 0x04, 0x43, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x15, + 0x04, 0x38, 0x04, 0x48, 0x04, 0x3e, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x1e, 0x04, 0x42, 0x04, 0x3e, 0x04, 0x3a, 0x04, + 0x43, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x1a, 0x04, 0x30, 0x04, 0x3d, + 0x04, 0x52, 0x04, 0x38, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x1a, 0x04, + 0x30, 0x04, 0x45, 0x04, 0x3e, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, 0x21, 0x15, + 0x04, 0x38, 0x04, 0x47, 0x04, 0x3e, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, + 0x28, 0x04, 0x3e, 0x04, 0x42, 0x04, 0x3e, 0x04, + 0x3a, 0x04, 0x43, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x1a, 0x04, 0x3e, + 0x04, 0x32, 0x04, 0x30, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x27, 0x04, + 0x3e, 0x04, 0x52, 0x04, 0x38, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x21, 0x1a, + 0x04, 0x30, 0x04, 0x48, 0x04, 0x3e, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, + 0x22, 0x04, 0x35, 0x04, 0x3d, 0x04, 0x38, 0x04, + 0x3d, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x22, 0x04, 0x35, 0x04, 0x3d, + 0x04, 0x2d, 0x00, 0x35, 0x04, 0x38, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, + 0x15, 0x04, 0x38, 0x04, 0x3a, 0x04, 0x58, 0x04, + 0x43, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x02, 0x04, 0x35, 0x04, 0x3d, + 0x04, 0x2d, 0x00, 0x35, 0x04, 0x38, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x29, 0x00, 0x21, + 0x25, 0x04, 0x3e, 0x04, 0x30, 0x04, 0x3d, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x22, 0x04, 0x35, 0x04, 0x3d, 0x04, 0x52, + 0x04, 0x38, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x14, 0x04, 0x30, 0x04, + 0x38, 0x04, 0x52, 0x04, 0x38, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x22, + 0x04, 0x35, 0x04, 0x3d, 0x04, 0x48, 0x04, 0x3e, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x23, 0x27, 0x04, 0x3e, 0x04, 0x48, 0x04, + 0x30, 0x04, 0x3e, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x21, 0x25, 0x04, 0x3e, + 0x04, 0x35, 0x04, 0x3d, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x15, 0x04, + 0x38, 0x04, 0x52, 0x04, 0x38, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x1a, + 0x04, 0x3e, 0x04, 0x52, 0x04, 0x38, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, + 0x22, 0x04, 0x35, 0x04, 0x5a, 0x04, 0x3e, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x1a, 0x04, 0x58, 0x04, 0x43, 0x04, 0x30, + 0x04, 0x3d, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x1d, 0x04, 0x38, 0x04, + 0x3d, 0x04, 0x3f, 0x04, 0x35, 0x04, 0x38, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x1a, 0x04, 0x58, 0x04, 0x43, 0x04, 0x58, + 0x04, 0x43, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x25, 0x04, 0x3e, 0x04, + 0x33, 0x04, 0x35, 0x04, 0x3d, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x25, + 0x04, 0x35, 0x04, 0x38, 0x04, 0x52, 0x04, 0x38, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x27, 0x15, 0x04, 0x38, 0x04, 0x40, 0x04, + 0x58, 0x04, 0x30, 0x04, 0x3a, 0x04, 0x43, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1f, 0x1e, 0x04, 0x45, 0x04, 0x3e, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, + 0x27, 0x04, 0x3e, 0x04, 0x3a, 0x04, 0x30, 0x04, + 0x3d, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x15, 0x04, 0x38, 0x04, 0x3c, + 0x04, 0x30, 0x04, 0x3d, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x1d, 0x04, + 0x38, 0x04, 0x3d, 0x04, 0x2d, 0x00, 0x30, 0x04, + 0x3d, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x2d, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x1f, 0x1a, 0x04, 0x30, 0x04, 0x3e, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x28, 0x04, 0x3e, 0x04, 0x30, 0x04, + 0x3d, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x10, 0x04, 0x3d, 0x04, 0x33, + 0x04, 0x35, 0x04, 0x3d, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x02, 0x04, + 0x38, 0x04, 0x48, 0x04, 0x3e, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x08, + 0x04, 0x3e, 0x04, 0x32, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, + 0x02, 0x04, 0x43, 0x04, 0x35, 0x04, 0x38, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x29, 0x13, 0x04, 0x35, 0x04, 0x3d, 0x04, 0x40, + 0x04, 0x58, 0x04, 0x43, 0x04, 0x3a, 0x04, 0x43, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x11, 0x04, 0x43, 0x04, 0x3d, 0x04, + 0x52, 0x04, 0x38, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x1a, 0x04, 0x35, + 0x04, 0x3d, 0x04, 0x3a, 0x04, 0x58, 0x04, 0x43, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x28, 0x04, 0x3e, 0x04, 0x52, 0x04, + 0x38, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x1a, 0x04, 0x35, 0x04, 0x3d, + 0x04, 0x38, 0x04, 0x3d, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x13, 0x04, + 0x35, 0x04, 0x3d, 0x04, 0x3a, 0x04, 0x58, 0x04, + 0x43, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x1a, 0x04, 0x35, 0x04, 0x3d, + 0x04, 0x2d, 0x00, 0x35, 0x04, 0x38, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x28, 0x04, 0x3e, 0x04, 0x33, 0x04, 0x35, 0x04, + 0x3d, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x29, 0x1a, 0x04, 0x35, 0x04, 0x3d, + 0x04, 0x40, 0x04, 0x58, 0x04, 0x30, 0x04, 0x3a, + 0x04, 0x43, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x1a, 0x04, 0x35, 0x04, + 0x3d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x28, + 0x04, 0x3e, 0x04, 0x3a, 0x04, 0x58, 0x04, 0x43, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x1d, 0x02, 0x04, 0x43, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x02, + 0x04, 0x35, 0x04, 0x3d, 0x04, 0x38, 0x04, 0x3d, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x25, 0x1a, 0x04, 0x30, 0x04, 0x40, 0x04, + 0x3e, 0x04, 0x3a, 0x04, 0x43, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x10, + 0x04, 0x3d, 0x04, 0x42, 0x04, 0x35, 0x04, 0x38, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x1a, 0x04, 0x30, 0x04, 0x3d, 0x04, + 0x3a, 0x04, 0x38, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x21, 0x02, 0x04, 0x3e, + 0x04, 0x35, 0x04, 0x38, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x27, 0x22, 0x04, + 0x35, 0x04, 0x3c, 0x04, 0x3f, 0x04, 0x43, 0x04, + 0x3a, 0x04, 0x43, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x29, 0x11, 0x04, 0x43, + 0x04, 0x3d, 0x04, 0x40, 0x04, 0x58, 0x04, 0x30, + 0x04, 0x3a, 0x04, 0x43, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x1a, 0x04, + 0x30, 0x04, 0x42, 0x04, 0x35, 0x04, 0x38, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x29, 0x20, 0x04, 0x58, 0x04, 0x30, 0x04, 0x3a, + 0x04, 0x43, 0x04, 0x3d, 0x04, 0x38, 0x04, 0x3d, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x15, 0x04, 0x3d, 0x04, 0x2d, 0x00, + 0x3e, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, 0x2d, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x21, 0x1d, 0x04, 0x38, 0x04, 0x5a, + 0x04, 0x38, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x25, 0x1a, 0x04, 0x30, 0x04, + 0x3d, 0x04, 0x33, 0x04, 0x35, 0x04, 0x3d, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x21, 0x25, 0x04, 0x3e, 0x04, 0x52, 0x04, 0x38, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x1a, 0x04, 0x35, 0x04, 0x3d, 0x04, + 0x47, 0x04, 0x3e, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x1a, 0x04, 0x3e, + 0x04, 0x33, 0x04, 0x35, 0x04, 0x3d, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, + 0x28, 0x04, 0x3e, 0x04, 0x3a, 0x04, 0x30, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x28, 0x04, 0x3e, 0x04, 0x33, 0x04, 0x35, + 0x04, 0x3d, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x11, 0x04, 0x43, 0x04, + 0x3d, 0x04, 0x2d, 0x00, 0x3e, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x1a, + 0x04, 0x3e, 0x04, 0x47, 0x04, 0x3e, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x11, 0x04, 0x43, 0x04, 0x3d, 0x04, 0x2d, 0x00, + 0x35, 0x04, 0x38, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x2d, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x1a, 0x04, 0x35, + 0x04, 0x3d, 0x04, 0x52, 0x04, 0x38, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x1a, 0x04, 0x3e, 0x04, 0x30, 0x04, 0x3d, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x1d, 0x28, 0x04, 0x43, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x15, 0x04, + 0x38, 0x04, 0x3d, 0x04, 0x38, 0x04, 0x3d, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x28, 0x04, 0x3e, 0x04, 0x30, 0x04, 0x3d, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x25, 0x1a, 0x04, 0x35, 0x04, 0x3d, 0x04, + 0x33, 0x04, 0x35, 0x04, 0x3d, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x1a, + 0x04, 0x30, 0x04, 0x33, 0x04, 0x35, 0x04, 0x3d, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x22, 0x04, 0x3e, 0x04, 0x3a, 0x04, + 0x43, 0x04, 0x52, 0x04, 0x38, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x15, + 0x04, 0x3d, 0x04, 0x3a, 0x04, 0x35, 0x04, 0x38, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1f, 0x1e, 0x04, 0x47, 0x04, 0x3e, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x21, 0x28, 0x04, 0x3e, 0x04, 0x32, 0x04, 0x30, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x11, 0x04, 0x43, 0x04, 0x3d, 0x04, + 0x3f, 0x04, 0x3e, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x02, 0x04, 0x35, + 0x04, 0x3d, 0x04, 0x3e, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x02, 0x04, + 0x35, 0x04, 0x3d, 0x04, 0x3a, 0x04, 0x58, 0x04, + 0x3e, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x21, 0x28, 0x04, 0x3e, 0x04, 0x47, + 0x04, 0x43, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x1a, 0x04, 0x30, 0x04, + 0x40, 0x04, 0x35, 0x04, 0x3a, 0x04, 0x38, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x27, 0x13, 0x04, 0x35, 0x04, 0x3d, 0x04, 0x42, + 0x04, 0x3e, 0x04, 0x3a, 0x04, 0x43, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x13, 0x04, 0x35, 0x04, 0x3d, 0x04, 0x3a, 0x04, + 0x3e, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x21, 0x1a, 0x04, 0x35, 0x04, 0x3c, + 0x04, 0x43, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x15, 0x04, 0x3d, 0x04, + 0x33, 0x04, 0x35, 0x04, 0x3d, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x1a, + 0x04, 0x3e, 0x04, 0x3a, 0x04, 0x3e, 0x04, 0x3a, + 0x04, 0x43, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x28, 0x04, 0x3e, 0x04, + 0x45, 0x04, 0x35, 0x04, 0x38, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x1a, + 0x04, 0x35, 0x04, 0x3d, 0x04, 0x42, 0x04, 0x3e, + 0x04, 0x3a, 0x04, 0x43, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x11, 0x04, + 0x43, 0x04, 0x47, 0x04, 0x43, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x22, + 0x04, 0x35, 0x04, 0x5a, 0x04, 0x43, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, + 0x1a, 0x04, 0x3e, 0x04, 0x40, 0x04, 0x58, 0x04, + 0x30, 0x04, 0x3a, 0x04, 0x43, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x1a, + 0x04, 0x3e, 0x04, 0x32, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x13, 0x04, 0x35, 0x04, 0x3d, 0x04, 0x47, 0x04, + 0x43, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x27, 0x1c, 0x04, 0x35, 0x04, 0x38, + 0x04, 0x42, 0x04, 0x3e, 0x04, 0x3a, 0x04, 0x43, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x1a, 0x04, 0x30, 0x04, 0x3a, 0x04, + 0x35, 0x04, 0x38, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x1d, 0x1a, 0x04, 0x43, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x27, 0x1c, 0x04, 0x35, 0x04, 0x38, 0x04, + 0x42, 0x04, 0x3e, 0x04, 0x3a, 0x04, 0x43, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1f, 0x1e, 0x04, 0x35, 0x04, 0x38, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x28, 0x04, 0x3e, 0x04, 0x47, 0x04, 0x3e, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x15, 0x04, 0x38, 0x04, 0x3a, 0x04, 0x58, + 0x04, 0x3e, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x27, 0x1a, 0x04, 0x30, 0x04, + 0x3a, 0x04, 0x38, 0x04, 0x42, 0x04, 0x41, 0x04, + 0x43, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x11, 0x04, 0x43, 0x04, 0x3d, + 0x04, 0x2d, 0x00, 0x30, 0x04, 0x3d, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x25, 0x04, 0x3e, 0x04, 0x42, 0x04, 0x3e, 0x04, + 0x3a, 0x04, 0x43, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x27, 0x1a, 0x04, 0x58, + 0x04, 0x3e, 0x04, 0x42, 0x04, 0x3e, 0x04, 0x3a, + 0x04, 0x43, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x21, 0x1a, 0x04, 0x3e, 0x04, + 0x48, 0x04, 0x3e, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x25, 0x27, 0x04, 0x3e, + 0x04, 0x40, 0x04, 0x3e, 0x04, 0x3a, 0x04, 0x43, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x1a, 0x04, 0x30, 0x04, 0x3d, 0x04, + 0x48, 0x04, 0x3e, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x11, 0x04, 0x43, + 0x04, 0x3d, 0x04, 0x48, 0x04, 0x3e, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, + 0x1e, 0x04, 0x3d, 0x04, 0x38, 0x04, 0x3d, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x11, 0x04, 0x43, 0x04, 0x3d, 0x04, 0x3c, + 0x04, 0x35, 0x04, 0x38, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x27, 0x04, + 0x3e, 0x04, 0x3a, 0x04, 0x58, 0x04, 0x3e, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x15, 0x04, 0x3d, 0x04, 0x42, 0x04, 0x3e, + 0x04, 0x3a, 0x04, 0x43, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x1c, 0x04, + 0x35, 0x04, 0x38, 0x04, 0x3e, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x11, + 0x04, 0x43, 0x04, 0x3d, 0x04, 0x3a, 0x04, 0x38, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x21, 0x15, 0x04, 0x38, 0x04, 0x48, 0x04, + 0x3e, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x22, 0x04, 0x30, 0x04, 0x38, + 0x04, 0x35, 0x04, 0x38, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, 0x1a, 0x04, + 0x58, 0x04, 0x3e, 0x04, 0x40, 0x04, 0x3e, 0x04, + 0x3a, 0x04, 0x43, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x25, 0x22, 0x04, 0x35, + 0x04, 0x3d, 0x04, 0x3c, 0x04, 0x3e, 0x04, 0x3d, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x21, 0x1a, 0x04, 0x3e, 0x04, 0x52, 0x04, + 0x38, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x15, 0x04, 0x38, 0x04, 0x40, + 0x04, 0x3e, 0x04, 0x3a, 0x04, 0x43, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x13, 0x04, 0x35, 0x04, 0x3d, 0x04, 0x3a, 0x04, + 0x38, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x23, 0x22, 0x04, 0x35, 0x04, 0x3d, + 0x04, 0x48, 0x04, 0x3e, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x11, 0x04, + 0x43, 0x04, 0x3d, 0x04, 0x40, 0x04, 0x3e, 0x04, + 0x3a, 0x04, 0x43, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x1a, 0x04, 0x35, + 0x04, 0x38, 0x04, 0x47, 0x04, 0x3e, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x13, 0x04, 0x35, 0x04, 0x3d, 0x04, 0x32, 0x04, + 0x30, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x1a, 0x04, 0x30, 0x04, 0x3d, + 0x04, 0x2d, 0x00, 0x35, 0x04, 0x38, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, + 0x28, 0x04, 0x3e, 0x04, 0x45, 0x04, 0x3e, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x23, 0x1a, 0x04, 0x35, 0x04, 0x38, 0x04, 0x30, + 0x04, 0x3d, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x1d, 0x28, 0x04, 0x43, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x29, 0x1c, 0x04, 0x35, 0x04, 0x38, 0x04, 0x40, + 0x04, 0x58, 0x04, 0x30, 0x04, 0x3a, 0x04, 0x43, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x1c, 0x04, 0x30, 0x04, 0x5a, 0x04, + 0x38, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x1a, 0x04, 0x30, 0x04, 0x3d, + 0x04, 0x31, 0x04, 0x43, 0x04, 0x3d, 0x04, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, + 0x15, 0x04, 0x3d, 0x04, 0x3f, 0x04, 0x3e, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x22, 0x04, 0x35, 0x04, 0x3d, 0x04, 0x32, + 0x04, 0x30, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x08, 0x04, 0x3e, 0x04, + 0x3a, 0x04, 0x58, 0x04, 0x3e, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, 0x13, + 0x04, 0x35, 0x04, 0x3d, 0x04, 0x40, 0x04, 0x3e, + 0x04, 0x3a, 0x04, 0x43, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x25, 0x04, + 0x3e, 0x04, 0x35, 0x04, 0x38, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x28, + 0x04, 0x3e, 0x04, 0x42, 0x04, 0x3e, 0x04, 0x3a, + 0x04, 0x43, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x1a, 0x04, 0x58, 0x04, + 0x3e, 0x04, 0x45, 0x04, 0x3e, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x13, + 0x04, 0x35, 0x04, 0x3d, 0x04, 0x31, 0x04, 0x43, + 0x04, 0x3d, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x1a, 0x04, 0x30, 0x04, + 0x3d, 0x04, 0x3f, 0x04, 0x3e, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x15, + 0x04, 0x3d, 0x04, 0x3a, 0x04, 0x58, 0x04, 0x3e, + 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x1a, 0x04, 0x30, 0x04, 0x3d, 0x04, + 0x2d, 0x00, 0x35, 0x04, 0x3d, 0x04, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x2d, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, 0x25, + 0x04, 0x3e, 0x04, 0x40, 0x04, 0x58, 0x04, 0x30, + 0x04, 0x3a, 0x04, 0x43, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x1c, 0x04, + 0x35, 0x04, 0x38, 0x04, 0x32, 0x04, 0x30, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x23, 0x10, 0x04, 0x3d, 0x04, 0x2d, 0x00, 0x35, + 0x04, 0x38, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, 0x2d, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x22, 0x04, 0x35, 0x04, + 0x3d, 0x04, 0x3c, 0x04, 0x35, 0x04, 0x38, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x1a, 0x04, 0x30, 0x04, 0x3d, 0x04, 0x41, + 0x04, 0x35, 0x04, 0x38, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x1a, 0x04, + 0x58, 0x04, 0x3e, 0x04, 0x32, 0x04, 0x30, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x11, 0x04, 0x43, 0x04, 0x3d, 0x04, 0x3a, + 0x04, 0x30, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x11, 0x04, 0x43, 0x04, + 0x3d, 0x04, 0x41, 0x04, 0x35, 0x04, 0x38, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x22, 0x04, 0x35, 0x04, 0x3d, 0x04, 0x3f, + 0x04, 0x3e, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x21, 0x1a, 0x04, 0x3e, 0x04, + 0x3a, 0x04, 0x30, 0x04, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x1a, 0x04, 0x30, + 0x04, 0x35, 0x04, 0x38, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x10, 0x04, + 0x3d, 0x04, 0x41, 0x04, 0x35, 0x04, 0x38, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x1c, 0x04, 0x30, 0x04, 0x3d, 0x04, 0x2d, + 0x00, 0x35, 0x04, 0x3d, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x2d, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x11, 0x04, + 0x43, 0x04, 0x3d, 0x04, 0x3a, 0x04, 0x58, 0x04, + 0x43, 0x04, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x13, 0x04, 0x35, 0x04, 0x3d, + 0x04, 0x52, 0x04, 0x38, 0x04, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x1a, 0x04, + 0x35, 0x04, 0x38, 0x04, 0x3a, 0x04, 0x3e, 0x04, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x0b, 0x1c, 0x04, 0x35, 0x04, 0x38, 0x04, 0x52, + 0x04, 0x38, 0x04, 0x0b, 0x22, 0x04, 0x30, 0x04, + 0x38, 0x04, 0x48, 0x04, 0x3e, 0x04, 0x09, 0x28, + 0x04, 0x3e, 0x04, 0x32, 0x04, 0x30, 0x04, 0x0d, + 0x25, 0x04, 0x30, 0x04, 0x38, 0x04, 0x41, 0x04, + 0x35, 0x04, 0x38, 0x04, 0x13, 0x24, 0x04, 0x30, + 0x04, 0x40, 0x04, 0x30, 0x04, 0x32, 0x04, 0x30, + 0x04, 0x34, 0x04, 0x38, 0x04, 0x3d, 0x04, 0x15, + 0x1e, 0x04, 0x40, 0x04, 0x34, 0x04, 0x38, 0x04, + 0x31, 0x04, 0x35, 0x04, 0x45, 0x04, 0x35, 0x04, + 0x48, 0x04, 0x42, 0x04, 0x0d, 0x1a, 0x04, 0x3e, + 0x04, 0x40, 0x04, 0x34, 0x04, 0x30, 0x04, 0x34, + 0x04, 0x07, 0x22, 0x04, 0x38, 0x04, 0x40, 0x04, + 0x0d, 0x1c, 0x04, 0x3e, 0x04, 0x40, 0x04, 0x34, + 0x04, 0x30, 0x04, 0x34, 0x04, 0x11, 0x28, 0x04, + 0x30, 0x04, 0x45, 0x04, 0x40, 0x04, 0x38, 0x04, + 0x32, 0x04, 0x30, 0x04, 0x40, 0x04, 0x09, 0x1c, + 0x04, 0x35, 0x04, 0x45, 0x04, 0x40, 0x04, 0x09, + 0x10, 0x04, 0x31, 0x04, 0x30, 0x04, 0x3d, 0x04, + 0x09, 0x10, 0x04, 0x37, 0x04, 0x30, 0x04, 0x40, + 0x04, 0x07, 0x14, 0x04, 0x35, 0x04, 0x58, 0x04, + 0x0d, 0x11, 0x04, 0x30, 0x04, 0x45, 0x04, 0x3c, + 0x04, 0x30, 0x04, 0x3d, 0x04, 0x0d, 0x15, 0x04, + 0x41, 0x04, 0x44, 0x04, 0x30, 0x04, 0x3d, 0x04, + 0x34, 0x04, 0x04, 0x41, 0x50, 0x0d, 0x1f, 0x04, + 0x40, 0x04, 0x35, 0x04, 0x20, 0x00, 0x20, 0x04, + 0x1a, 0x04, 0x05, 0x20, 0x04, 0x1a, 0x04, 0x12, + 0x63, 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, + 0x73, 0x08, 0x64, 0x61, 0x74, 0x65, 0x08, 0x6c, + 0x61, 0x74, 0x6e, 0x04, 0x6e, 0x75, 0x10, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, + 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, + 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x26, + 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, + 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0x1e, 0x6e, 0x65, 0x67, 0x61, + 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, + 0x65, 0x72, 0x6e, 0x0e, 0x64, 0x65, 0x63, 0x69, + 0x6d, 0x61, 0x6c, 0x26, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0xa0, 0x7b, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, 0x3c, + 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, + 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0xa0, 0x7b, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, 0x10, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x2a, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x40, 0x7b, 0x6d, + 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, + 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x0e, 0x70, + 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x10, 0x70, + 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x02, + 0x2c, 0x02, 0x2e, 0x0a, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x06, 0x4e, 0x61, 0x4e, 0x06, 0x6e, 0x61, + 0x6e, 0x02, 0x2b, 0x10, 0x70, 0x6c, 0x75, 0x73, + 0x53, 0x69, 0x67, 0x6e, 0x02, 0x2d, 0x12, 0x6d, + 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x02, 0x25, 0x16, 0x70, 0x65, 0x72, 0x63, 0x65, + 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x03, 0x1e, + 0x22, 0x10, 0x69, 0x6e, 0x66, 0x69, 0x6e, 0x69, + 0x74, 0x79, 0x0e, 0x73, 0x79, 0x6d, 0x62, 0x6f, + 0x6c, 0x73, 0x05, 0x1a, 0x04, 0x1c, 0x04, 0x06, + 0x42, 0x41, 0x4d, 0x0a, 0x5b, 0x42, 0x47, 0x4e, + 0x5d, 0x06, 0x42, 0x47, 0x4e, 0x04, 0x52, 0x24, + 0x06, 0x42, 0x52, 0x4c, 0x0a, 0x5b, 0x42, 0x59, + 0x52, 0x5d, 0x06, 0x42, 0x59, 0x52, 0x06, 0x43, + 0x41, 0x24, 0x06, 0x43, 0x41, 0x44, 0x06, 0x43, + 0x4e, 0xa5, 0x06, 0x43, 0x4e, 0x59, 0x03, 0xac, + 0x20, 0x06, 0x45, 0x55, 0x52, 0x02, 0xa3, 0x06, + 0x47, 0x42, 0x50, 0x06, 0x48, 0x4b, 0x24, 0x06, + 0x48, 0x4b, 0x44, 0x03, 0xaa, 0x20, 0x06, 0x49, + 0x4c, 0x53, 0x03, 0xb9, 0x20, 0x06, 0x49, 0x4e, + 0x52, 0x02, 0xa5, 0x06, 0x4a, 0x50, 0x59, 0x06, + 0x4d, 0x58, 0x24, 0x06, 0x4d, 0x58, 0x4e, 0x06, + 0x4e, 0x54, 0x24, 0x06, 0x54, 0x57, 0x44, 0x06, + 0x55, 0x53, 0x24, 0x06, 0x55, 0x53, 0x44, 0x08, + 0x46, 0x43, 0x46, 0x41, 0x06, 0x58, 0x41, 0x46, + 0x06, 0x45, 0x43, 0x24, 0x06, 0x58, 0x43, 0x44, + 0x06, 0x43, 0x46, 0x41, 0x06, 0x58, 0x4f, 0x46, + 0x08, 0x43, 0x46, 0x50, 0x46, 0x06, 0x58, 0x50, + 0x46, 0x14, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x69, 0x65, 0x73, 0x52, 0x6e, 0x6f, 0x64, + 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, + 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2f, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, + 0x74, 0x61, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x70, + 0x2f, 0x73, 0x72, 0x2e, 0x6a, 0x73, 0x0d, 0x00, + 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, 0x27, + 0x00, 0x89, 0x01, 0xfc, 0x6a, 0x01, 0xa0, 0x01, + 0x00, 0x00, 0x00, 0x39, 0xd0, 0x00, 0x00, 0x00, + 0x43, 0xd1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd2, + 0x00, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xd4, 0x00, 0x00, 0x00, 0x04, 0xd5, + 0x00, 0x00, 0x00, 0x04, 0xd6, 0x00, 0x00, 0x00, + 0x04, 0xd7, 0x00, 0x00, 0x00, 0x04, 0xd8, 0x00, + 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x04, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xdb, 0x00, 0x00, + 0x00, 0x04, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xdd, + 0x00, 0x00, 0x00, 0x04, 0xde, 0x00, 0x00, 0x00, + 0x04, 0xdf, 0x00, 0x00, 0x00, 0x04, 0xe0, 0x00, + 0x00, 0x00, 0x04, 0xe1, 0x00, 0x00, 0x00, 0x04, + 0xe2, 0x00, 0x00, 0x00, 0x26, 0x0f, 0x00, 0x4d, + 0xe3, 0x00, 0x00, 0x00, 0x0a, 0x4d, 0xe4, 0x00, + 0x00, 0x00, 0x09, 0x4d, 0xe5, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x00, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x04, 0xec, 0x00, 0x00, + 0x00, 0x4d, 0xec, 0x00, 0x00, 0x00, 0x04, 0xed, + 0x00, 0x00, 0x00, 0x4d, 0xee, 0x00, 0x00, 0x00, + 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, 0xf0, 0x00, + 0x00, 0x00, 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, + 0xf2, 0x00, 0x00, 0x00, 0x04, 0xf3, 0x00, 0x00, + 0x00, 0x4d, 0xf4, 0x00, 0x00, 0x00, 0x04, 0xf5, + 0x00, 0x00, 0x00, 0x4d, 0xf6, 0x00, 0x00, 0x00, + 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xf8, 0x00, + 0x00, 0x00, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, + 0xfa, 0x00, 0x00, 0x00, 0x04, 0xfb, 0x00, 0x00, + 0x00, 0x4d, 0xfc, 0x00, 0x00, 0x00, 0x04, 0xfd, + 0x00, 0x00, 0x00, 0x4d, 0xfe, 0x00, 0x00, 0x00, + 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x01, + 0x00, 0x00, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, + 0x02, 0x01, 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, + 0x00, 0x4d, 0x04, 0x01, 0x00, 0x00, 0x04, 0x05, + 0x01, 0x00, 0x00, 0x4d, 0x06, 0x01, 0x00, 0x00, + 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0x08, 0x01, + 0x00, 0x00, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, + 0x0a, 0x01, 0x00, 0x00, 0x04, 0x0b, 0x01, 0x00, + 0x00, 0x4d, 0x0c, 0x01, 0x00, 0x00, 0x04, 0x0d, + 0x01, 0x00, 0x00, 0x4d, 0x0e, 0x01, 0x00, 0x00, + 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, 0x10, 0x01, + 0x00, 0x00, 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, + 0x12, 0x01, 0x00, 0x00, 0x04, 0x13, 0x01, 0x00, + 0x00, 0x4d, 0x14, 0x01, 0x00, 0x00, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x4d, 0x16, 0x01, 0x00, 0x00, + 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, 0x18, 0x01, + 0x00, 0x00, 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, + 0x1a, 0x01, 0x00, 0x00, 0x04, 0x1b, 0x01, 0x00, + 0x00, 0x4d, 0x1c, 0x01, 0x00, 0x00, 0x04, 0x1d, + 0x01, 0x00, 0x00, 0x4d, 0x1e, 0x01, 0x00, 0x00, + 0x04, 0x1f, 0x01, 0x00, 0x00, 0x4d, 0x20, 0x01, + 0x00, 0x00, 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, + 0x22, 0x01, 0x00, 0x00, 0x04, 0x23, 0x01, 0x00, + 0x00, 0x4d, 0x24, 0x01, 0x00, 0x00, 0x04, 0x25, + 0x01, 0x00, 0x00, 0x4d, 0x26, 0x01, 0x00, 0x00, + 0x04, 0x27, 0x01, 0x00, 0x00, 0x4d, 0x28, 0x01, + 0x00, 0x00, 0x04, 0x29, 0x01, 0x00, 0x00, 0x4d, + 0x2a, 0x01, 0x00, 0x00, 0x04, 0x2b, 0x01, 0x00, + 0x00, 0x4d, 0x2c, 0x01, 0x00, 0x00, 0x04, 0x2d, + 0x01, 0x00, 0x00, 0x4d, 0x2e, 0x01, 0x00, 0x00, + 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, 0x30, 0x01, + 0x00, 0x00, 0x04, 0x31, 0x01, 0x00, 0x00, 0x4d, + 0x32, 0x01, 0x00, 0x00, 0x04, 0x33, 0x01, 0x00, + 0x00, 0x4d, 0x34, 0x01, 0x00, 0x00, 0x04, 0x35, + 0x01, 0x00, 0x00, 0x4d, 0x36, 0x01, 0x00, 0x00, + 0x04, 0x37, 0x01, 0x00, 0x00, 0x4d, 0x38, 0x01, + 0x00, 0x00, 0x04, 0x39, 0x01, 0x00, 0x00, 0x4d, + 0x3a, 0x01, 0x00, 0x00, 0x04, 0x3b, 0x01, 0x00, + 0x00, 0x4d, 0x3c, 0x01, 0x00, 0x00, 0x04, 0x3d, + 0x01, 0x00, 0x00, 0x4d, 0x3e, 0x01, 0x00, 0x00, + 0x04, 0x3f, 0x01, 0x00, 0x00, 0x4d, 0x40, 0x01, + 0x00, 0x00, 0x4d, 0x41, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x42, 0x01, 0x00, 0x00, 0x4d, 0x43, 0x01, + 0x00, 0x00, 0x04, 0x44, 0x01, 0x00, 0x00, 0x4d, + 0x45, 0x01, 0x00, 0x00, 0x04, 0x33, 0x01, 0x00, + 0x00, 0x4d, 0x38, 0x01, 0x00, 0x00, 0x04, 0x46, + 0x01, 0x00, 0x00, 0x4d, 0x2e, 0x01, 0x00, 0x00, + 0x4d, 0x47, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x4d, 0x49, 0x01, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x4d, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, + 0x08, 0x01, 0x00, 0x00, 0x04, 0x05, 0x01, 0x00, + 0x00, 0x4d, 0x04, 0x01, 0x00, 0x00, 0x4d, 0x4c, + 0x01, 0x00, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x0b, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x6c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7e, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x4d, 0x84, 0x01, 0x00, 0x00, 0x4d, 0x85, 0x01, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x00, 0xbe, 0x01, 0xbe, 0x02, 0xbe, + 0x03, 0xbe, 0x04, 0xbe, 0x05, 0xbe, 0x06, 0xbe, + 0x07, 0xbe, 0x08, 0xbe, 0x09, 0xbe, 0x0a, 0xbe, + 0x0b, 0x26, 0x0c, 0x00, 0x4d, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, + 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, + 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, + 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, + 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, + 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, + 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, + 0x04, 0x91, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x86, 0x01, + 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, + 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, + 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, + 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, + 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, + 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, + 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x6c, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x4d, 0x84, 0x01, + 0x00, 0x00, 0x4d, 0x85, 0x01, 0x00, 0x00, 0x4d, + 0xd6, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x0c, + 0xbe, 0x0d, 0xbe, 0x0e, 0xbe, 0x0f, 0xbe, 0x10, + 0xbe, 0x11, 0xbe, 0x12, 0xbe, 0x13, 0xbe, 0x14, + 0xbe, 0x15, 0xbe, 0x16, 0xbe, 0x17, 0xbe, 0x18, + 0x26, 0x0d, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, + 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, + 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, + 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, + 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, + 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, + 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, + 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, + 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, + 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, + 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, + 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, + 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, + 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, + 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x6c, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, + 0x04, 0xa0, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x80, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x81, 0x01, 0x00, 0x00, + 0x4d, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, 0x4d, + 0x85, 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x19, 0xbe, 0x1a, 0xbe, + 0x1b, 0xbe, 0x1c, 0xbe, 0x1d, 0xbe, 0x1e, 0xbe, + 0x1f, 0xbe, 0x20, 0xbe, 0x21, 0xbe, 0x22, 0xbe, + 0x23, 0xbe, 0x24, 0x26, 0x0c, 0x00, 0x4d, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, + 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, + 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, + 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, + 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, + 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, + 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, + 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, + 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, + 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, + 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, + 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, + 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, + 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x6c, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, + 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x4d, + 0x84, 0x01, 0x00, 0x00, 0x4d, 0x85, 0x01, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x25, 0xbe, 0x26, 0xbe, 0x27, 0xbe, 0x28, + 0xbe, 0x29, 0xbe, 0x2a, 0xbe, 0x2b, 0xbe, 0x2c, + 0xbe, 0x2d, 0xbe, 0x2e, 0xbe, 0x2f, 0xbe, 0x30, + 0xbe, 0x31, 0x26, 0x0d, 0x00, 0x4d, 0x56, 0x01, + 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, + 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, + 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, + 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, + 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, + 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, + 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, + 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, + 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, + 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, + 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, + 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, + 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, + 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, + 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, + 0xad, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6c, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, + 0x04, 0xa0, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x9f, 0x01, + 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x80, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x81, 0x01, + 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, + 0x00, 0x4d, 0x85, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x32, 0xbe, + 0x33, 0xbe, 0x34, 0xbe, 0x35, 0xbe, 0x36, 0xbe, + 0x37, 0xbe, 0x38, 0xbe, 0x39, 0xbe, 0x3a, 0xbe, + 0x3b, 0xbe, 0x3c, 0xbe, 0x3d, 0xbe, 0x3e, 0x26, + 0x0d, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, + 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, + 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, + 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, + 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, + 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, + 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, + 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, + 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, + 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, + 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, + 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, + 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, + 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, + 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, + 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x6c, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x9f, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x9f, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x80, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x81, 0x01, 0x00, 0x00, + 0x4d, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, 0x4d, + 0x85, 0x01, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x3f, 0xbe, 0x40, 0xbe, + 0x41, 0xbe, 0x42, 0xbe, 0x43, 0xbe, 0x44, 0xbe, + 0x45, 0xbe, 0x46, 0xbe, 0x47, 0xbe, 0x48, 0xbe, + 0x49, 0xbe, 0x4a, 0x26, 0x0c, 0x00, 0x4d, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, + 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, + 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, + 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, + 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, + 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, + 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, + 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, + 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, + 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, + 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, + 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, + 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, + 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x6c, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, + 0xa0, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, + 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x80, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x81, 0x01, 0x00, + 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, + 0x01, 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, + 0x4d, 0x85, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x6c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x7e, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xae, 0x01, + 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, + 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, + 0x00, 0x26, 0x04, 0x00, 0x4d, 0x56, 0x01, 0x00, + 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, 0xb3, + 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, + 0x04, 0xb1, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xb4, 0x01, + 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, 0x04, + 0xb2, 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, + 0x00, 0x26, 0x04, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x4d, 0x84, + 0x01, 0x00, 0x00, 0x4d, 0x85, 0x01, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x4b, 0xbe, 0x4c, 0xbe, 0x4d, 0xbe, 0x4e, 0xbe, + 0x4f, 0xbe, 0x50, 0xbe, 0x51, 0xbe, 0x52, 0xbe, + 0x53, 0xbe, 0x54, 0xbe, 0x55, 0xbe, 0x56, 0xbe, + 0x57, 0xbe, 0x58, 0x26, 0x0e, 0x00, 0x4d, 0x56, + 0x01, 0x00, 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, + 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, + 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, 0x04, + 0xba, 0x01, 0x00, 0x00, 0x04, 0xbb, 0x01, 0x00, + 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, 0x04, 0xbd, + 0x01, 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, + 0x04, 0xbf, 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, + 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, 0x04, + 0xc2, 0x01, 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, + 0x00, 0x26, 0x0e, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb7, + 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, + 0x04, 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, + 0x00, 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, + 0xbc, 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, + 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, + 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, + 0x04, 0xc1, 0x01, 0x00, 0x00, 0x04, 0xc2, 0x01, + 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, 0x26, + 0x0e, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x6c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7e, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xc4, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x56, 0x01, 0x00, + 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xc4, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x4d, 0x84, 0x01, 0x00, 0x00, 0x4d, 0x85, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x59, 0xbe, 0x5a, 0xbe, 0x5b, 0xbe, + 0x5c, 0xbe, 0x5d, 0xbe, 0x5e, 0xbe, 0x5f, 0xbe, + 0x60, 0xbe, 0x61, 0xbe, 0x62, 0xbe, 0x63, 0xbe, + 0x64, 0x26, 0x0c, 0x00, 0x4d, 0x56, 0x01, 0x00, + 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, + 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, + 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, + 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, 0x04, + 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, + 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, + 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, + 0x04, 0xd0, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xc5, 0x01, + 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, + 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, + 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, 0x04, 0xca, + 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, + 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, + 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, 0x04, + 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x6c, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xd1, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x56, + 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xd1, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x80, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x81, 0x01, 0x00, 0x00, + 0x4d, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, 0x4d, + 0x85, 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x65, 0xbe, 0x66, 0xbe, + 0x67, 0xbe, 0x68, 0xbe, 0x69, 0xbe, 0x6a, 0xbe, + 0x6b, 0xbe, 0x6c, 0xbe, 0x6d, 0xbe, 0x6e, 0xbe, + 0x6f, 0xbe, 0x70, 0x26, 0x0c, 0x00, 0x4d, 0x56, + 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, + 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, + 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, + 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, + 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, + 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, + 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, + 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, + 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, + 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, + 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, + 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, + 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, + 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x6c, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xea, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x80, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x81, 0x01, + 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, + 0x00, 0x4d, 0x85, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x71, 0xbe, + 0x72, 0xbe, 0x73, 0xbe, 0x74, 0xbe, 0x75, 0xbe, + 0x76, 0xbe, 0x77, 0xbe, 0x78, 0xbe, 0x79, 0xbe, + 0x7a, 0xbe, 0x7b, 0xbe, 0x7c, 0x26, 0x0c, 0x00, + 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, + 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, + 0xd4, 0x01, 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, + 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, + 0x01, 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, + 0x04, 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, + 0x00, 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, + 0xdc, 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, + 0x01, 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, + 0x04, 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, + 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, + 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, + 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, + 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, + 0x04, 0xe9, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6c, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, + 0x7d, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xea, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, + 0xea, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x4d, 0x84, + 0x01, 0x00, 0x00, 0x4d, 0x85, 0x01, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, + 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x6c, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, + 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, + 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, + 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, + 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, + 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, + 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, + 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, + 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, + 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, + 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, + 0x00, 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, + 0xfe, 0x01, 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, + 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, + 0x02, 0x00, 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, + 0x04, 0x03, 0x02, 0x00, 0x00, 0x04, 0x04, 0x02, + 0x00, 0x00, 0x04, 0x05, 0x02, 0x00, 0x00, 0x04, + 0x06, 0x02, 0x00, 0x00, 0x04, 0x07, 0x02, 0x00, + 0x00, 0x04, 0x08, 0x02, 0x00, 0x00, 0x04, 0x09, + 0x02, 0x00, 0x00, 0x04, 0x0a, 0x02, 0x00, 0x00, + 0x26, 0x20, 0x00, 0x04, 0x0b, 0x02, 0x00, 0x00, + 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, + 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, + 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, + 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x23, + 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, + 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, + 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, + 0x11, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, + 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, 0x27, + 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, + 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, + 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, + 0x15, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, + 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, 0x2b, + 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, + 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, + 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, + 0x19, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, + 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x2f, + 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, + 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, + 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, + 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, + 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x33, + 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, + 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, + 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, + 0x21, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, + 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x37, + 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, + 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, + 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, + 0x25, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, + 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x3b, + 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, + 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, + 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, + 0x29, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, + 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x3f, + 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, + 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, + 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, + 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, + 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x43, + 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, + 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, + 0x31, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, + 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x47, + 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, + 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, + 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, + 0x35, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, + 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, 0x4b, + 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, + 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, + 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, + 0x39, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, + 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x4f, + 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, + 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, + 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, + 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, + 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x53, + 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, + 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, + 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, + 0x41, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, + 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, 0x57, + 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, + 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, + 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, + 0x45, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, + 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x5b, + 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, + 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, + 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, + 0x49, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, + 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x5f, + 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, + 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, + 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, + 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, + 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x63, + 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, + 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, + 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, + 0x51, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, + 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x67, + 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, + 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, + 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, + 0x55, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, + 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, 0x6b, + 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, + 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, + 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, + 0x59, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, + 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x6f, + 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, + 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, + 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, + 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, + 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x73, + 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, + 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, + 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, + 0x61, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, + 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x77, + 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, + 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, + 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, + 0x65, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, + 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x7b, + 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, + 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, + 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, + 0x69, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, + 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x7f, + 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, + 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, + 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, + 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, + 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x83, + 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, + 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, + 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, + 0x71, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, + 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0x87, + 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, + 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, + 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, + 0x75, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, + 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0x8b, + 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, + 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, + 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, + 0x79, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, + 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x8f, + 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, + 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, + 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, + 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, + 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, 0x93, + 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, + 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, + 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, + 0x81, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, + 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0x97, + 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, + 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, + 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, + 0x85, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, + 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0x9b, + 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, + 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, + 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, + 0x89, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, + 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0x9f, + 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, + 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, + 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, + 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, + 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xa3, + 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, + 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, + 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, + 0x91, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, + 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0xa7, + 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, + 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, + 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, + 0x95, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, + 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0xab, + 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, + 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, + 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, + 0x99, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, + 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xaf, + 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, + 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, + 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, + 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, + 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xb3, + 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, + 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, + 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, + 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, + 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xb7, + 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, + 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, + 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, + 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, + 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xbb, + 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, + 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, + 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, + 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, + 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xbf, + 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, + 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, + 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, + 0xad, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, + 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0xc3, + 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, + 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, + 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, + 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, + 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xc7, + 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, + 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, + 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, + 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, + 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xcb, + 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, + 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, + 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, + 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, + 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0xcf, + 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, + 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, + 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, + 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, + 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, + 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, + 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, + 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, + 0xcd, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x80, 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, + 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xd0, 0x02, + 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, + 0xd1, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x80, 0x04, 0xd2, 0x02, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x80, 0x04, 0x14, 0x01, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xd3, 0x02, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, + 0xd4, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x80, 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x80, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0xd5, 0x02, 0x00, 0x00, 0x04, 0xd6, 0x02, + 0x00, 0x00, 0x04, 0xd7, 0x02, 0x00, 0x00, 0x04, + 0xd8, 0x02, 0x00, 0x00, 0x04, 0xd9, 0x02, 0x00, + 0x00, 0x04, 0xda, 0x02, 0x00, 0x00, 0x04, 0xdb, + 0x02, 0x00, 0x00, 0x04, 0xdc, 0x02, 0x00, 0x00, + 0x04, 0xdd, 0x02, 0x00, 0x00, 0x04, 0xde, 0x02, + 0x00, 0x00, 0x04, 0xdf, 0x02, 0x00, 0x00, 0x04, + 0xe0, 0x02, 0x00, 0x00, 0x04, 0xe1, 0x02, 0x00, + 0x00, 0x04, 0xe2, 0x02, 0x00, 0x00, 0x04, 0xe3, + 0x02, 0x00, 0x00, 0x04, 0xe4, 0x02, 0x00, 0x00, + 0x04, 0xe5, 0x02, 0x00, 0x00, 0x04, 0xe6, 0x02, + 0x00, 0x00, 0x04, 0xe7, 0x02, 0x00, 0x00, 0x04, + 0xe8, 0x02, 0x00, 0x00, 0x04, 0xe9, 0x02, 0x00, + 0x00, 0x04, 0xea, 0x02, 0x00, 0x00, 0x04, 0xeb, + 0x02, 0x00, 0x00, 0x04, 0xec, 0x02, 0x00, 0x00, + 0x04, 0xed, 0x02, 0x00, 0x00, 0x04, 0xee, 0x02, + 0x00, 0x00, 0x04, 0xef, 0x02, 0x00, 0x00, 0x04, + 0xf0, 0x02, 0x00, 0x00, 0x04, 0xf1, 0x02, 0x00, + 0x00, 0x04, 0xf2, 0x02, 0x00, 0x00, 0x04, 0xf3, + 0x02, 0x00, 0x00, 0x04, 0xf4, 0x02, 0x00, 0x00, + 0x26, 0x20, 0x00, 0x04, 0xf5, 0x02, 0x00, 0x00, + 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0xf6, 0x02, + 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, + 0xf7, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, + 0x80, 0x04, 0xf8, 0x02, 0x00, 0x00, 0x4d, 0x23, + 0x00, 0x00, 0x80, 0x04, 0xf9, 0x02, 0x00, 0x00, + 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0xfa, 0x02, + 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, + 0xfb, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, + 0x80, 0x04, 0xfc, 0x02, 0x00, 0x00, 0x4d, 0x27, + 0x00, 0x00, 0x80, 0x04, 0xfd, 0x02, 0x00, 0x00, + 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0xfe, 0x02, + 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, + 0xff, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, + 0x80, 0x04, 0x00, 0x03, 0x00, 0x00, 0x4d, 0x2b, + 0x00, 0x00, 0x80, 0x04, 0x01, 0x03, 0x00, 0x00, + 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x02, 0x03, + 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, + 0x03, 0x03, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, + 0x80, 0x04, 0x04, 0x03, 0x00, 0x00, 0x4d, 0x2f, + 0x00, 0x00, 0x80, 0x04, 0x05, 0x03, 0x00, 0x00, + 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x06, 0x03, + 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, + 0x07, 0x03, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, + 0x80, 0x04, 0x08, 0x03, 0x00, 0x00, 0x4d, 0x33, + 0x00, 0x00, 0x80, 0x04, 0x09, 0x03, 0x00, 0x00, + 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x03, + 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, + 0x0b, 0x03, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, + 0x80, 0x04, 0x0c, 0x03, 0x00, 0x00, 0x4d, 0x37, + 0x00, 0x00, 0x80, 0x04, 0x0d, 0x03, 0x00, 0x00, + 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x03, + 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, + 0x0f, 0x03, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, + 0x80, 0x04, 0x10, 0x03, 0x00, 0x00, 0x4d, 0x3b, + 0x00, 0x00, 0x80, 0x04, 0x11, 0x03, 0x00, 0x00, + 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x12, 0x03, + 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, + 0x13, 0x03, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, + 0x80, 0x04, 0x14, 0x03, 0x00, 0x00, 0x4d, 0x3f, + 0x00, 0x00, 0x80, 0x04, 0x15, 0x03, 0x00, 0x00, + 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x16, 0x03, + 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, + 0x17, 0x03, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, + 0x80, 0x04, 0x18, 0x03, 0x00, 0x00, 0x4d, 0x43, + 0x00, 0x00, 0x80, 0x04, 0x19, 0x03, 0x00, 0x00, + 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x03, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, + 0x1b, 0x03, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, + 0x80, 0x04, 0x1c, 0x03, 0x00, 0x00, 0x4d, 0x47, + 0x00, 0x00, 0x80, 0x04, 0x1d, 0x03, 0x00, 0x00, + 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x03, + 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, + 0x1f, 0x03, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, + 0x80, 0x04, 0x20, 0x03, 0x00, 0x00, 0x4d, 0x4b, + 0x00, 0x00, 0x80, 0x04, 0x21, 0x03, 0x00, 0x00, + 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x22, 0x03, + 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, + 0x23, 0x03, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, + 0x80, 0x04, 0x24, 0x03, 0x00, 0x00, 0x4d, 0x4f, + 0x00, 0x00, 0x80, 0x04, 0x25, 0x03, 0x00, 0x00, + 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x26, 0x03, + 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, + 0x27, 0x03, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, + 0x80, 0x04, 0x28, 0x03, 0x00, 0x00, 0x4d, 0x53, + 0x00, 0x00, 0x80, 0x04, 0x29, 0x03, 0x00, 0x00, + 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x03, + 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, + 0x2b, 0x03, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, + 0x80, 0x04, 0x2c, 0x03, 0x00, 0x00, 0x4d, 0x57, + 0x00, 0x00, 0x80, 0x04, 0x2d, 0x03, 0x00, 0x00, + 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x03, + 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, + 0x2f, 0x03, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, + 0x80, 0x04, 0x30, 0x03, 0x00, 0x00, 0x4d, 0x5b, + 0x00, 0x00, 0x80, 0x04, 0x31, 0x03, 0x00, 0x00, + 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x32, 0x03, + 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, + 0x33, 0x03, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, + 0x80, 0x04, 0x34, 0x03, 0x00, 0x00, 0x4d, 0x5f, + 0x00, 0x00, 0x80, 0x04, 0x35, 0x03, 0x00, 0x00, + 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x36, 0x03, + 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, + 0x37, 0x03, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, + 0x80, 0x04, 0x38, 0x03, 0x00, 0x00, 0x4d, 0x63, + 0x00, 0x00, 0x80, 0x04, 0x39, 0x03, 0x00, 0x00, + 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x03, + 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, + 0x3b, 0x03, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, + 0x80, 0x04, 0x3c, 0x03, 0x00, 0x00, 0x4d, 0x67, + 0x00, 0x00, 0x80, 0x04, 0x3d, 0x03, 0x00, 0x00, + 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x03, + 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, + 0x3f, 0x03, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, + 0x80, 0x04, 0x40, 0x03, 0x00, 0x00, 0x4d, 0x6b, + 0x00, 0x00, 0x80, 0x04, 0x41, 0x03, 0x00, 0x00, + 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x42, 0x03, + 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, + 0x43, 0x03, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, + 0x80, 0x04, 0x44, 0x03, 0x00, 0x00, 0x4d, 0x6f, + 0x00, 0x00, 0x80, 0x04, 0x45, 0x03, 0x00, 0x00, + 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x46, 0x03, + 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, + 0x47, 0x03, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, + 0x80, 0x04, 0x48, 0x03, 0x00, 0x00, 0x4d, 0x73, + 0x00, 0x00, 0x80, 0x04, 0x49, 0x03, 0x00, 0x00, + 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x03, + 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, + 0x4b, 0x03, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, + 0x80, 0x04, 0x4c, 0x03, 0x00, 0x00, 0x4d, 0x77, + 0x00, 0x00, 0x80, 0x04, 0x4d, 0x03, 0x00, 0x00, + 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x03, + 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, + 0x4f, 0x03, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, + 0x80, 0x04, 0x50, 0x03, 0x00, 0x00, 0x4d, 0x7b, + 0x00, 0x00, 0x80, 0x04, 0x51, 0x03, 0x00, 0x00, + 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x52, 0x03, + 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, + 0x53, 0x03, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, + 0x80, 0x04, 0x54, 0x03, 0x00, 0x00, 0x4d, 0x7f, + 0x00, 0x00, 0x80, 0x04, 0x55, 0x03, 0x00, 0x00, + 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x56, 0x03, + 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, + 0x57, 0x03, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, + 0x80, 0x04, 0x58, 0x03, 0x00, 0x00, 0x4d, 0x83, + 0x00, 0x00, 0x80, 0x04, 0x59, 0x03, 0x00, 0x00, + 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x03, + 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, + 0x5b, 0x03, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, + 0x80, 0x04, 0x5c, 0x03, 0x00, 0x00, 0x4d, 0x87, + 0x00, 0x00, 0x80, 0x04, 0x5d, 0x03, 0x00, 0x00, + 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x03, + 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, + 0x5f, 0x03, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, + 0x80, 0x04, 0x60, 0x03, 0x00, 0x00, 0x4d, 0x8b, + 0x00, 0x00, 0x80, 0x04, 0x61, 0x03, 0x00, 0x00, + 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x62, 0x03, + 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, + 0x63, 0x03, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, + 0x80, 0x04, 0x64, 0x03, 0x00, 0x00, 0x4d, 0x8f, + 0x00, 0x00, 0x80, 0x04, 0x65, 0x03, 0x00, 0x00, + 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x66, 0x03, + 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, + 0x67, 0x03, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, + 0x80, 0x04, 0x68, 0x03, 0x00, 0x00, 0x4d, 0x93, + 0x00, 0x00, 0x80, 0x04, 0x69, 0x03, 0x00, 0x00, + 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x03, + 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, + 0x6b, 0x03, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, + 0x80, 0x04, 0x6c, 0x03, 0x00, 0x00, 0x4d, 0x97, + 0x00, 0x00, 0x80, 0x04, 0x6d, 0x03, 0x00, 0x00, + 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x03, + 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, + 0x6f, 0x03, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, + 0x80, 0x04, 0x70, 0x03, 0x00, 0x00, 0x4d, 0x9b, + 0x00, 0x00, 0x80, 0x04, 0x71, 0x03, 0x00, 0x00, + 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x72, 0x03, + 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, + 0x73, 0x03, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, + 0x80, 0x04, 0x74, 0x03, 0x00, 0x00, 0x4d, 0x9f, + 0x00, 0x00, 0x80, 0x04, 0x75, 0x03, 0x00, 0x00, + 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x76, 0x03, + 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, + 0x77, 0x03, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, + 0x80, 0x04, 0x78, 0x03, 0x00, 0x00, 0x4d, 0xa3, + 0x00, 0x00, 0x80, 0x04, 0x79, 0x03, 0x00, 0x00, + 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x03, + 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, + 0x7b, 0x03, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, + 0x80, 0x04, 0x7c, 0x03, 0x00, 0x00, 0x4d, 0xa7, + 0x00, 0x00, 0x80, 0x04, 0x7d, 0x03, 0x00, 0x00, + 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x03, + 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, + 0x7f, 0x03, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, + 0x80, 0x04, 0x80, 0x03, 0x00, 0x00, 0x4d, 0xab, + 0x00, 0x00, 0x80, 0x04, 0x81, 0x03, 0x00, 0x00, + 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x82, 0x03, + 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, + 0x83, 0x03, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, + 0x80, 0x04, 0x84, 0x03, 0x00, 0x00, 0x4d, 0xaf, + 0x00, 0x00, 0x80, 0x04, 0x85, 0x03, 0x00, 0x00, + 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x86, 0x03, + 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, + 0x87, 0x03, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, + 0x80, 0x04, 0x88, 0x03, 0x00, 0x00, 0x4d, 0xb3, + 0x00, 0x00, 0x80, 0x04, 0x89, 0x03, 0x00, 0x00, + 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x03, + 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, + 0x8b, 0x03, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, + 0x80, 0x04, 0x8c, 0x03, 0x00, 0x00, 0x4d, 0xb7, + 0x00, 0x00, 0x80, 0x04, 0x8d, 0x03, 0x00, 0x00, + 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x03, + 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, + 0x8f, 0x03, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, + 0x80, 0x04, 0x90, 0x03, 0x00, 0x00, 0x4d, 0xbb, + 0x00, 0x00, 0x80, 0x04, 0x91, 0x03, 0x00, 0x00, + 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0x92, 0x03, + 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, + 0x93, 0x03, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, + 0x80, 0x04, 0x94, 0x03, 0x00, 0x00, 0x4d, 0xbf, + 0x00, 0x00, 0x80, 0x04, 0x95, 0x03, 0x00, 0x00, + 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0x96, 0x03, + 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, + 0x97, 0x03, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, + 0x80, 0x04, 0x98, 0x03, 0x00, 0x00, 0x4d, 0xc3, + 0x00, 0x00, 0x80, 0x04, 0x99, 0x03, 0x00, 0x00, + 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x03, + 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, + 0x9b, 0x03, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, + 0x80, 0x04, 0x9c, 0x03, 0x00, 0x00, 0x4d, 0xc7, + 0x00, 0x00, 0x80, 0x04, 0x9d, 0x03, 0x00, 0x00, + 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x03, + 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, + 0x9f, 0x03, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, + 0x80, 0x04, 0xa0, 0x03, 0x00, 0x00, 0x4d, 0xcb, + 0x00, 0x00, 0x80, 0x04, 0xa1, 0x03, 0x00, 0x00, + 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x03, + 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, + 0xa3, 0x03, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, + 0x80, 0x04, 0xa4, 0x03, 0x00, 0x00, 0x4d, 0xcf, + 0x00, 0x00, 0x80, 0x04, 0xa5, 0x03, 0x00, 0x00, + 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x03, + 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, + 0xa7, 0x03, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, + 0x80, 0x04, 0xa8, 0x03, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x80, 0x04, 0xa9, 0x03, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x03, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, + 0xab, 0x03, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x80, 0x04, 0xac, 0x03, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x80, 0x04, 0xad, 0x03, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xae, 0x03, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, + 0xaf, 0x03, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x80, 0x04, 0xb0, 0x03, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x80, 0x04, 0xb1, 0x03, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x03, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, + 0xb3, 0x03, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x80, 0x04, 0xb4, 0x03, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x80, 0x04, 0xb5, 0x03, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x03, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, + 0xb7, 0x03, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x80, 0x04, 0xb8, 0x03, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x80, 0x04, 0xb9, 0x03, 0x00, 0x00, + 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xba, 0x03, + 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, + 0xbb, 0x03, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x80, 0x04, 0xbc, 0x03, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x80, 0x04, 0xbd, 0x03, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x03, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, + 0xbf, 0x03, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x80, 0x04, 0xc0, 0x03, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x80, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xd5, 0x02, 0x00, 0x00, 0x04, 0xd6, 0x02, + 0x00, 0x00, 0x04, 0xd7, 0x02, 0x00, 0x00, 0x04, + 0xd8, 0x02, 0x00, 0x00, 0x04, 0xd9, 0x02, 0x00, + 0x00, 0x04, 0xda, 0x02, 0x00, 0x00, 0x04, 0xdb, + 0x02, 0x00, 0x00, 0x04, 0xdc, 0x02, 0x00, 0x00, + 0x04, 0xdd, 0x02, 0x00, 0x00, 0x04, 0xde, 0x02, + 0x00, 0x00, 0x04, 0xdf, 0x02, 0x00, 0x00, 0x04, + 0xe0, 0x02, 0x00, 0x00, 0x04, 0xe1, 0x02, 0x00, + 0x00, 0x04, 0xe2, 0x02, 0x00, 0x00, 0x04, 0xe3, + 0x02, 0x00, 0x00, 0x04, 0xe4, 0x02, 0x00, 0x00, + 0x04, 0xe5, 0x02, 0x00, 0x00, 0x04, 0xe6, 0x02, + 0x00, 0x00, 0x04, 0xe7, 0x02, 0x00, 0x00, 0x04, + 0xe8, 0x02, 0x00, 0x00, 0x04, 0xe9, 0x02, 0x00, + 0x00, 0x04, 0xea, 0x02, 0x00, 0x00, 0x04, 0xeb, + 0x02, 0x00, 0x00, 0x04, 0xec, 0x02, 0x00, 0x00, + 0x04, 0xed, 0x02, 0x00, 0x00, 0x04, 0xee, 0x02, + 0x00, 0x00, 0x04, 0xef, 0x02, 0x00, 0x00, 0x04, + 0xf0, 0x02, 0x00, 0x00, 0x04, 0xf1, 0x02, 0x00, + 0x00, 0x04, 0xf2, 0x02, 0x00, 0x00, 0x04, 0xf3, + 0x02, 0x00, 0x00, 0x04, 0xf4, 0x02, 0x00, 0x00, + 0x26, 0x20, 0x00, 0x04, 0xf5, 0x02, 0x00, 0x00, + 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0xf6, 0x02, + 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, + 0xf7, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, + 0x80, 0x04, 0xf8, 0x02, 0x00, 0x00, 0x4d, 0x23, + 0x00, 0x00, 0x80, 0x04, 0xf9, 0x02, 0x00, 0x00, + 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0xfa, 0x02, + 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, + 0xfb, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, + 0x80, 0x04, 0xfc, 0x02, 0x00, 0x00, 0x4d, 0x27, + 0x00, 0x00, 0x80, 0x04, 0xfd, 0x02, 0x00, 0x00, + 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0xfe, 0x02, + 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, + 0xff, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, + 0x80, 0x04, 0x00, 0x03, 0x00, 0x00, 0x4d, 0x2b, + 0x00, 0x00, 0x80, 0x04, 0x01, 0x03, 0x00, 0x00, + 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x02, 0x03, + 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, + 0x03, 0x03, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, + 0x80, 0x04, 0x04, 0x03, 0x00, 0x00, 0x4d, 0x2f, + 0x00, 0x00, 0x80, 0x04, 0x05, 0x03, 0x00, 0x00, + 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x06, 0x03, + 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, + 0x07, 0x03, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, + 0x80, 0x04, 0x08, 0x03, 0x00, 0x00, 0x4d, 0x33, + 0x00, 0x00, 0x80, 0x04, 0x09, 0x03, 0x00, 0x00, + 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x03, + 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, + 0x0b, 0x03, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, + 0x80, 0x04, 0x0c, 0x03, 0x00, 0x00, 0x4d, 0x37, + 0x00, 0x00, 0x80, 0x04, 0x0d, 0x03, 0x00, 0x00, + 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x03, + 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, + 0x0f, 0x03, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, + 0x80, 0x04, 0x10, 0x03, 0x00, 0x00, 0x4d, 0x3b, + 0x00, 0x00, 0x80, 0x04, 0x11, 0x03, 0x00, 0x00, + 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x12, 0x03, + 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, + 0x13, 0x03, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, + 0x80, 0x04, 0x14, 0x03, 0x00, 0x00, 0x4d, 0x3f, + 0x00, 0x00, 0x80, 0x04, 0x15, 0x03, 0x00, 0x00, + 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x16, 0x03, + 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, + 0x17, 0x03, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, + 0x80, 0x04, 0x18, 0x03, 0x00, 0x00, 0x4d, 0x43, + 0x00, 0x00, 0x80, 0x04, 0x19, 0x03, 0x00, 0x00, + 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x03, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, + 0x1b, 0x03, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, + 0x80, 0x04, 0x1c, 0x03, 0x00, 0x00, 0x4d, 0x47, + 0x00, 0x00, 0x80, 0x04, 0x1d, 0x03, 0x00, 0x00, + 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x03, + 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, + 0x1f, 0x03, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, + 0x80, 0x04, 0x20, 0x03, 0x00, 0x00, 0x4d, 0x4b, + 0x00, 0x00, 0x80, 0x04, 0x21, 0x03, 0x00, 0x00, + 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x22, 0x03, + 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, + 0x23, 0x03, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, + 0x80, 0x04, 0x24, 0x03, 0x00, 0x00, 0x4d, 0x4f, + 0x00, 0x00, 0x80, 0x04, 0x25, 0x03, 0x00, 0x00, + 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x26, 0x03, + 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, + 0x27, 0x03, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, + 0x80, 0x04, 0x28, 0x03, 0x00, 0x00, 0x4d, 0x53, + 0x00, 0x00, 0x80, 0x04, 0x29, 0x03, 0x00, 0x00, + 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x03, + 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, + 0x2b, 0x03, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, + 0x80, 0x04, 0x2c, 0x03, 0x00, 0x00, 0x4d, 0x57, + 0x00, 0x00, 0x80, 0x04, 0x2d, 0x03, 0x00, 0x00, + 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x03, + 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, + 0x2f, 0x03, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, + 0x80, 0x04, 0x30, 0x03, 0x00, 0x00, 0x4d, 0x5b, + 0x00, 0x00, 0x80, 0x04, 0x31, 0x03, 0x00, 0x00, + 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x32, 0x03, + 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, + 0x33, 0x03, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, + 0x80, 0x04, 0x34, 0x03, 0x00, 0x00, 0x4d, 0x5f, + 0x00, 0x00, 0x80, 0x04, 0x35, 0x03, 0x00, 0x00, + 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x36, 0x03, + 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, + 0x37, 0x03, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, + 0x80, 0x04, 0x38, 0x03, 0x00, 0x00, 0x4d, 0x63, + 0x00, 0x00, 0x80, 0x04, 0x39, 0x03, 0x00, 0x00, + 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x03, + 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, + 0x3b, 0x03, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, + 0x80, 0x04, 0x3c, 0x03, 0x00, 0x00, 0x4d, 0x67, + 0x00, 0x00, 0x80, 0x04, 0x3d, 0x03, 0x00, 0x00, + 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x03, + 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, + 0x3f, 0x03, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, + 0x80, 0x04, 0x40, 0x03, 0x00, 0x00, 0x4d, 0x6b, + 0x00, 0x00, 0x80, 0x04, 0x41, 0x03, 0x00, 0x00, + 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x42, 0x03, + 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, + 0x43, 0x03, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, + 0x80, 0x04, 0x44, 0x03, 0x00, 0x00, 0x4d, 0x6f, + 0x00, 0x00, 0x80, 0x04, 0x45, 0x03, 0x00, 0x00, + 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x46, 0x03, + 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, + 0x47, 0x03, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, + 0x80, 0x04, 0x48, 0x03, 0x00, 0x00, 0x4d, 0x73, + 0x00, 0x00, 0x80, 0x04, 0x49, 0x03, 0x00, 0x00, + 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x03, + 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, + 0x4b, 0x03, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, + 0x80, 0x04, 0x4c, 0x03, 0x00, 0x00, 0x4d, 0x77, + 0x00, 0x00, 0x80, 0x04, 0x4d, 0x03, 0x00, 0x00, + 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x03, + 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, + 0x4f, 0x03, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, + 0x80, 0x04, 0x50, 0x03, 0x00, 0x00, 0x4d, 0x7b, + 0x00, 0x00, 0x80, 0x04, 0x51, 0x03, 0x00, 0x00, + 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x52, 0x03, + 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, + 0x53, 0x03, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, + 0x80, 0x04, 0x54, 0x03, 0x00, 0x00, 0x4d, 0x7f, + 0x00, 0x00, 0x80, 0x04, 0x55, 0x03, 0x00, 0x00, + 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x56, 0x03, + 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, + 0x57, 0x03, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, + 0x80, 0x04, 0x58, 0x03, 0x00, 0x00, 0x4d, 0x83, + 0x00, 0x00, 0x80, 0x04, 0x59, 0x03, 0x00, 0x00, + 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x03, + 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, + 0x5b, 0x03, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, + 0x80, 0x04, 0x5c, 0x03, 0x00, 0x00, 0x4d, 0x87, + 0x00, 0x00, 0x80, 0x04, 0x5d, 0x03, 0x00, 0x00, + 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x03, + 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, + 0x5f, 0x03, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, + 0x80, 0x04, 0x60, 0x03, 0x00, 0x00, 0x4d, 0x8b, + 0x00, 0x00, 0x80, 0x04, 0x61, 0x03, 0x00, 0x00, + 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x62, 0x03, + 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, + 0x63, 0x03, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, + 0x80, 0x04, 0x64, 0x03, 0x00, 0x00, 0x4d, 0x8f, + 0x00, 0x00, 0x80, 0x04, 0x65, 0x03, 0x00, 0x00, + 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x66, 0x03, + 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, + 0x67, 0x03, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, + 0x80, 0x04, 0x68, 0x03, 0x00, 0x00, 0x4d, 0x93, + 0x00, 0x00, 0x80, 0x04, 0x69, 0x03, 0x00, 0x00, + 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x03, + 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, + 0x6b, 0x03, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, + 0x80, 0x04, 0x6c, 0x03, 0x00, 0x00, 0x4d, 0x97, + 0x00, 0x00, 0x80, 0x04, 0x6d, 0x03, 0x00, 0x00, + 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x03, + 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, + 0x6f, 0x03, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, + 0x80, 0x04, 0x70, 0x03, 0x00, 0x00, 0x4d, 0x9b, + 0x00, 0x00, 0x80, 0x04, 0x71, 0x03, 0x00, 0x00, + 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x72, 0x03, + 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, + 0x73, 0x03, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, + 0x80, 0x04, 0x74, 0x03, 0x00, 0x00, 0x4d, 0x9f, + 0x00, 0x00, 0x80, 0x04, 0x75, 0x03, 0x00, 0x00, + 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x76, 0x03, + 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, + 0x77, 0x03, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, + 0x80, 0x04, 0x78, 0x03, 0x00, 0x00, 0x4d, 0xa3, + 0x00, 0x00, 0x80, 0x04, 0x79, 0x03, 0x00, 0x00, + 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x03, + 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, + 0x7b, 0x03, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, + 0x80, 0x04, 0x7c, 0x03, 0x00, 0x00, 0x4d, 0xa7, + 0x00, 0x00, 0x80, 0x04, 0x7d, 0x03, 0x00, 0x00, + 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x03, + 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, + 0x7f, 0x03, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, + 0x80, 0x04, 0x80, 0x03, 0x00, 0x00, 0x4d, 0xab, + 0x00, 0x00, 0x80, 0x04, 0x81, 0x03, 0x00, 0x00, + 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x82, 0x03, + 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, + 0x83, 0x03, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, + 0x80, 0x04, 0x84, 0x03, 0x00, 0x00, 0x4d, 0xaf, + 0x00, 0x00, 0x80, 0x04, 0x85, 0x03, 0x00, 0x00, + 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x86, 0x03, + 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, + 0x87, 0x03, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, + 0x80, 0x04, 0x88, 0x03, 0x00, 0x00, 0x4d, 0xb3, + 0x00, 0x00, 0x80, 0x04, 0x89, 0x03, 0x00, 0x00, + 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x03, + 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, + 0x8b, 0x03, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, + 0x80, 0x04, 0x8c, 0x03, 0x00, 0x00, 0x4d, 0xb7, + 0x00, 0x00, 0x80, 0x04, 0x8d, 0x03, 0x00, 0x00, + 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x03, + 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, + 0x8f, 0x03, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, + 0x80, 0x04, 0x90, 0x03, 0x00, 0x00, 0x4d, 0xbb, + 0x00, 0x00, 0x80, 0x04, 0x91, 0x03, 0x00, 0x00, + 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0x92, 0x03, + 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, + 0x93, 0x03, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, + 0x80, 0x04, 0x94, 0x03, 0x00, 0x00, 0x4d, 0xbf, + 0x00, 0x00, 0x80, 0x04, 0x95, 0x03, 0x00, 0x00, + 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0x96, 0x03, + 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, + 0x97, 0x03, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, + 0x80, 0x04, 0x98, 0x03, 0x00, 0x00, 0x4d, 0xc3, + 0x00, 0x00, 0x80, 0x04, 0x99, 0x03, 0x00, 0x00, + 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x03, + 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, + 0x9b, 0x03, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, + 0x80, 0x04, 0x9c, 0x03, 0x00, 0x00, 0x4d, 0xc7, + 0x00, 0x00, 0x80, 0x04, 0x9d, 0x03, 0x00, 0x00, + 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x03, + 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, + 0x9f, 0x03, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, + 0x80, 0x04, 0xa0, 0x03, 0x00, 0x00, 0x4d, 0xcb, + 0x00, 0x00, 0x80, 0x04, 0xa1, 0x03, 0x00, 0x00, + 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x03, + 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, + 0xa3, 0x03, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, + 0x80, 0x04, 0xa4, 0x03, 0x00, 0x00, 0x4d, 0xcf, + 0x00, 0x00, 0x80, 0x04, 0xa5, 0x03, 0x00, 0x00, + 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x03, + 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, + 0xa7, 0x03, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, + 0x80, 0x04, 0xa8, 0x03, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x80, 0x04, 0xa9, 0x03, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x03, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, + 0xab, 0x03, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x80, 0x04, 0xac, 0x03, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x80, 0x04, 0xad, 0x03, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xae, 0x03, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, + 0xaf, 0x03, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x80, 0x04, 0xb0, 0x03, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x80, 0x04, 0xb1, 0x03, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x03, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, + 0xb3, 0x03, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x80, 0x04, 0xb4, 0x03, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x80, 0x04, 0xb5, 0x03, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x03, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, + 0xb7, 0x03, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x80, 0x04, 0xb8, 0x03, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x80, 0x04, 0xb9, 0x03, 0x00, 0x00, + 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xba, 0x03, + 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, + 0xbb, 0x03, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x80, 0x04, 0xbc, 0x03, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x80, 0x04, 0xbd, 0x03, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x03, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, + 0xbf, 0x03, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x80, 0x04, 0xc0, 0x03, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x80, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x80, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x4d, 0x84, 0x01, + 0x00, 0x00, 0x4d, 0x85, 0x01, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x7d, + 0xbe, 0x7e, 0xbe, 0x7f, 0xbe, 0x80, 0xbe, 0x81, + 0xbe, 0x82, 0xbe, 0x83, 0xbe, 0x84, 0xbe, 0x85, + 0xbe, 0x86, 0xbe, 0x87, 0xbe, 0x88, 0x26, 0x0c, + 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0xc1, + 0x03, 0x00, 0x00, 0x04, 0xc2, 0x03, 0x00, 0x00, + 0x04, 0xc3, 0x03, 0x00, 0x00, 0x04, 0xc4, 0x03, + 0x00, 0x00, 0x04, 0xc5, 0x03, 0x00, 0x00, 0x04, + 0xc6, 0x03, 0x00, 0x00, 0x04, 0xc7, 0x03, 0x00, + 0x00, 0x04, 0xc8, 0x03, 0x00, 0x00, 0x04, 0xc9, + 0x03, 0x00, 0x00, 0x04, 0xca, 0x03, 0x00, 0x00, + 0x04, 0xcb, 0x03, 0x00, 0x00, 0x04, 0xcc, 0x03, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xc1, 0x03, 0x00, 0x00, 0x04, + 0xc2, 0x03, 0x00, 0x00, 0x04, 0xc3, 0x03, 0x00, + 0x00, 0x04, 0xc4, 0x03, 0x00, 0x00, 0x04, 0xc5, + 0x03, 0x00, 0x00, 0x04, 0xc6, 0x03, 0x00, 0x00, + 0x04, 0xc7, 0x03, 0x00, 0x00, 0x04, 0xc8, 0x03, + 0x00, 0x00, 0x04, 0xc9, 0x03, 0x00, 0x00, 0x04, + 0xca, 0x03, 0x00, 0x00, 0x04, 0xcb, 0x03, 0x00, + 0x00, 0x04, 0xcc, 0x03, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6c, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7e, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xcd, 0x03, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, + 0x04, 0xcd, 0x03, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xcd, 0x03, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, + 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x4d, + 0x84, 0x01, 0x00, 0x00, 0x4d, 0x85, 0x01, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6c, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x56, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xce, 0x03, 0x00, 0x00, 0x04, 0xcf, + 0x03, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x56, + 0x01, 0x00, 0x00, 0x04, 0xce, 0x03, 0x00, 0x00, + 0x04, 0xcf, 0x03, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xce, 0x03, + 0x00, 0x00, 0x04, 0xcf, 0x03, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x80, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x81, 0x01, + 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, + 0x00, 0x4d, 0x85, 0x01, 0x00, 0x00, 0x4d, 0xe2, + 0x00, 0x00, 0x00, 0x4d, 0xd0, 0x03, 0x00, 0x00, + 0x4d, 0xd1, 0x03, 0x00, 0x00, 0x0b, 0x04, 0xd2, + 0x03, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xd3, + 0x03, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xd4, 0x03, + 0x00, 0x00, 0x4d, 0xd5, 0x03, 0x00, 0x00, 0x04, + 0xd6, 0x03, 0x00, 0x00, 0x4d, 0xd7, 0x03, 0x00, + 0x00, 0x4d, 0xd8, 0x03, 0x00, 0x00, 0x0b, 0x04, + 0xd9, 0x03, 0x00, 0x00, 0x4d, 0xd5, 0x03, 0x00, + 0x00, 0x04, 0xda, 0x03, 0x00, 0x00, 0x4d, 0xd7, + 0x03, 0x00, 0x00, 0x4d, 0xdb, 0x03, 0x00, 0x00, + 0x0b, 0x04, 0xdc, 0x03, 0x00, 0x00, 0x4d, 0xd5, + 0x03, 0x00, 0x00, 0x04, 0xdd, 0x03, 0x00, 0x00, + 0x4d, 0xd7, 0x03, 0x00, 0x00, 0x4d, 0xde, 0x03, + 0x00, 0x00, 0x4d, 0xdf, 0x03, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0xe0, 0x03, 0x00, 0x00, 0x4d, 0xd8, + 0x03, 0x00, 0x00, 0x04, 0xe1, 0x03, 0x00, 0x00, + 0x4d, 0xe2, 0x03, 0x00, 0x00, 0x04, 0xe3, 0x03, + 0x00, 0x00, 0x4d, 0xe4, 0x03, 0x00, 0x00, 0x04, + 0xe5, 0x03, 0x00, 0x00, 0x4d, 0xe6, 0x03, 0x00, + 0x00, 0x04, 0xe7, 0x03, 0x00, 0x00, 0x4d, 0xe8, + 0x03, 0x00, 0x00, 0x04, 0xe9, 0x03, 0x00, 0x00, + 0x4d, 0xea, 0x03, 0x00, 0x00, 0x04, 0xeb, 0x03, + 0x00, 0x00, 0x4d, 0xec, 0x03, 0x00, 0x00, 0x4d, + 0xd2, 0x03, 0x00, 0x00, 0x4d, 0xed, 0x03, 0x00, + 0x00, 0x0b, 0x04, 0xee, 0x03, 0x00, 0x00, 0x4d, + 0xef, 0x03, 0x00, 0x00, 0x04, 0xf0, 0x03, 0x00, + 0x00, 0x4d, 0xf1, 0x03, 0x00, 0x00, 0x04, 0xf2, + 0x03, 0x00, 0x00, 0x4d, 0xf3, 0x03, 0x00, 0x00, + 0x04, 0xf4, 0x03, 0x00, 0x00, 0x4d, 0xf5, 0x03, + 0x00, 0x00, 0x04, 0xf6, 0x03, 0x00, 0x00, 0x4d, + 0xf7, 0x03, 0x00, 0x00, 0x04, 0xf8, 0x03, 0x00, + 0x00, 0x4d, 0xf9, 0x03, 0x00, 0x00, 0x04, 0xfa, + 0x03, 0x00, 0x00, 0x4d, 0xfb, 0x03, 0x00, 0x00, + 0x04, 0xfc, 0x03, 0x00, 0x00, 0x4d, 0xfd, 0x03, + 0x00, 0x00, 0x04, 0xfe, 0x03, 0x00, 0x00, 0x4d, + 0xff, 0x03, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, + 0x00, 0x4d, 0x01, 0x04, 0x00, 0x00, 0x04, 0x02, + 0x04, 0x00, 0x00, 0x4d, 0x03, 0x04, 0x00, 0x00, + 0x04, 0x04, 0x04, 0x00, 0x00, 0x4d, 0x05, 0x04, + 0x00, 0x00, 0x04, 0x06, 0x04, 0x00, 0x00, 0x4d, + 0x07, 0x04, 0x00, 0x00, 0x04, 0x08, 0x04, 0x00, + 0x00, 0x4d, 0x09, 0x04, 0x00, 0x00, 0x04, 0x0a, + 0x04, 0x00, 0x00, 0x4d, 0x0b, 0x04, 0x00, 0x00, + 0x04, 0x0c, 0x04, 0x00, 0x00, 0x4d, 0x0d, 0x04, + 0x00, 0x00, 0x04, 0x0e, 0x04, 0x00, 0x00, 0x4d, + 0x0f, 0x04, 0x00, 0x00, 0x04, 0x10, 0x04, 0x00, + 0x00, 0x4d, 0x11, 0x04, 0x00, 0x00, 0x04, 0x12, + 0x04, 0x00, 0x00, 0x4d, 0x13, 0x04, 0x00, 0x00, + 0x4d, 0x14, 0x04, 0x00, 0x00, 0x4d, 0x45, 0x00, + 0x00, 0x00, 0x24, 0x01, 0x00, 0xcc, 0x28, 0xaa, + 0x10, 0x01, 0x00, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, + 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_sv_size = 26669; + +const uint8_t intl_sv[26669] = { + 0x01, 0x8b, 0x05, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x73, 0x76, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x0e, + 0x7b, 0x31, 0x7d, 0x20, 0x7b, 0x30, 0x7d, 0x0a, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, 0x65, + 0x64, 0x69, 0x75, 0x6d, 0x08, 0x66, 0x75, 0x6c, + 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x02, 0x64, + 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, 0x06, 0x45, + 0x20, 0x64, 0x04, 0x45, 0x64, 0x10, 0x45, 0x20, + 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x06, 0x45, + 0x68, 0x6d, 0x0e, 0x45, 0x20, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x06, 0x45, 0x48, 0x6d, 0x16, 0x45, + 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x61, 0x08, 0x45, 0x68, 0x6d, 0x73, 0x14, + 0x45, 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x08, 0x45, 0x48, 0x6d, 0x73, 0x06, + 0x79, 0x20, 0x47, 0x04, 0x47, 0x79, 0x0e, 0x4d, + 0x4d, 0x4d, 0x20, 0x79, 0x20, 0x47, 0x0a, 0x47, + 0x79, 0x4d, 0x4d, 0x4d, 0x12, 0x64, 0x20, 0x4d, + 0x4d, 0x4d, 0x20, 0x79, 0x20, 0x47, 0x0c, 0x47, + 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x16, 0x45, 0x20, + 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x20, + 0x47, 0x0e, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x45, + 0x64, 0x06, 0x68, 0x20, 0x61, 0x02, 0x68, 0x04, + 0x48, 0x48, 0x02, 0x48, 0x0c, 0x68, 0x3a, 0x6d, + 0x6d, 0x20, 0x61, 0x04, 0x68, 0x6d, 0x0a, 0x48, + 0x48, 0x3a, 0x6d, 0x6d, 0x04, 0x48, 0x6d, 0x12, + 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, + 0x61, 0x06, 0x68, 0x6d, 0x73, 0x10, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x06, 0x48, + 0x6d, 0x73, 0x16, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x20, 0x61, 0x20, 0x76, 0x08, 0x68, + 0x6d, 0x73, 0x76, 0x14, 0x48, 0x48, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x76, 0x08, 0x48, + 0x6d, 0x73, 0x76, 0x10, 0x68, 0x3a, 0x6d, 0x6d, + 0x20, 0x61, 0x20, 0x76, 0x06, 0x68, 0x6d, 0x76, + 0x0e, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x20, 0x76, + 0x06, 0x48, 0x6d, 0x76, 0x02, 0x4c, 0x02, 0x4d, + 0x06, 0x64, 0x2f, 0x4d, 0x04, 0x4d, 0x64, 0x0a, + 0x45, 0x20, 0x64, 0x2f, 0x4d, 0x06, 0x4d, 0x45, + 0x64, 0x06, 0x4d, 0x4d, 0x64, 0x0a, 0x64, 0x64, + 0x2f, 0x4d, 0x4d, 0x08, 0x4d, 0x4d, 0x64, 0x64, + 0x06, 0x4c, 0x4c, 0x4c, 0x06, 0x4d, 0x4d, 0x4d, + 0x0a, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x08, 0x4d, + 0x4d, 0x4d, 0x64, 0x0e, 0x45, 0x20, 0x64, 0x20, + 0x4d, 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x45, + 0x64, 0x0c, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, + 0x0a, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x10, 0x45, + 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x0c, + 0x4d, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x04, 0x6d, 0x73, 0x02, + 0x79, 0x08, 0x79, 0x2d, 0x4d, 0x4d, 0x04, 0x79, + 0x4d, 0x0e, 0x79, 0x2d, 0x4d, 0x4d, 0x2d, 0x64, + 0x64, 0x06, 0x79, 0x4d, 0x64, 0x14, 0x45, 0x2c, + 0x20, 0x79, 0x2d, 0x4d, 0x4d, 0x2d, 0x64, 0x64, + 0x08, 0x79, 0x4d, 0x45, 0x64, 0x06, 0x79, 0x4d, + 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x08, + 0x79, 0x4d, 0x4d, 0x4d, 0x0e, 0x64, 0x20, 0x4d, + 0x4d, 0x4d, 0x20, 0x79, 0x0a, 0x79, 0x4d, 0x4d, + 0x4d, 0x64, 0x12, 0x45, 0x20, 0x64, 0x20, 0x4d, + 0x4d, 0x4d, 0x20, 0x79, 0x0c, 0x79, 0x4d, 0x4d, + 0x4d, 0x45, 0x64, 0x0c, 0x4d, 0x4d, 0x4d, 0x4d, + 0x20, 0x79, 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, + 0x0a, 0x51, 0x51, 0x51, 0x20, 0x79, 0x08, 0x79, + 0x51, 0x51, 0x51, 0x0c, 0x51, 0x51, 0x51, 0x51, + 0x20, 0x79, 0x0a, 0x79, 0x51, 0x51, 0x51, 0x51, + 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, + 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x73, 0x1a, 0x45, 0x45, 0x45, 0x45, 0x20, 0x64, + 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x14, + 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x45, 0x45, 0x45, + 0x45, 0x64, 0x10, 0x64, 0x20, 0x4d, 0x4d, 0x4d, + 0x4d, 0x20, 0x79, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, + 0x4d, 0x64, 0x16, 0x64, 0x61, 0x74, 0x65, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x26, 0x27, + 0x6b, 0x6c, 0x27, 0x2e, 0x20, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x7a, 0x7a, + 0x7a, 0x7a, 0x12, 0x68, 0x6d, 0x6d, 0x73, 0x73, + 0x7a, 0x7a, 0x7a, 0x7a, 0x14, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x7a, 0x08, + 0x68, 0x6d, 0x73, 0x7a, 0x16, 0x74, 0x69, 0x6d, + 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, + 0x0e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, + 0x02, 0x4a, 0x02, 0x46, 0x02, 0x41, 0x02, 0x53, + 0x02, 0x4f, 0x02, 0x4e, 0x02, 0x44, 0x0c, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x08, 0x6a, 0x61, + 0x6e, 0x2e, 0x08, 0x66, 0x65, 0x62, 0x2e, 0x08, + 0x6d, 0x61, 0x72, 0x73, 0x08, 0x61, 0x70, 0x72, + 0x2e, 0x06, 0x6d, 0x61, 0x6a, 0x08, 0x6a, 0x75, + 0x6e, 0x69, 0x08, 0x6a, 0x75, 0x6c, 0x69, 0x08, + 0x61, 0x75, 0x67, 0x2e, 0x08, 0x73, 0x65, 0x70, + 0x2e, 0x08, 0x6f, 0x6b, 0x74, 0x2e, 0x08, 0x6e, + 0x6f, 0x76, 0x2e, 0x08, 0x64, 0x65, 0x63, 0x2e, + 0x0e, 0x6a, 0x61, 0x6e, 0x75, 0x61, 0x72, 0x69, + 0x10, 0x66, 0x65, 0x62, 0x72, 0x75, 0x61, 0x72, + 0x69, 0x0a, 0x61, 0x70, 0x72, 0x69, 0x6c, 0x0e, + 0x61, 0x75, 0x67, 0x75, 0x73, 0x74, 0x69, 0x12, + 0x73, 0x65, 0x70, 0x74, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x0e, 0x6f, 0x6b, 0x74, 0x6f, 0x62, 0x65, + 0x72, 0x10, 0x6e, 0x6f, 0x76, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x10, 0x64, 0x65, 0x63, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x0c, 0x6d, 0x6f, 0x6e, 0x74, + 0x68, 0x73, 0x02, 0x54, 0x06, 0x73, 0xf6, 0x6e, + 0x06, 0x6d, 0xe5, 0x6e, 0x06, 0x74, 0x69, 0x73, + 0x06, 0x6f, 0x6e, 0x73, 0x08, 0x74, 0x6f, 0x72, + 0x73, 0x06, 0x66, 0x72, 0x65, 0x06, 0x6c, 0xf6, + 0x72, 0x0c, 0x73, 0xf6, 0x6e, 0x64, 0x61, 0x67, + 0x0c, 0x6d, 0xe5, 0x6e, 0x64, 0x61, 0x67, 0x0c, + 0x74, 0x69, 0x73, 0x64, 0x61, 0x67, 0x0c, 0x6f, + 0x6e, 0x73, 0x64, 0x61, 0x67, 0x0e, 0x74, 0x6f, + 0x72, 0x73, 0x64, 0x61, 0x67, 0x0c, 0x66, 0x72, + 0x65, 0x64, 0x61, 0x67, 0x0c, 0x6c, 0xf6, 0x72, + 0x64, 0x61, 0x67, 0x08, 0x64, 0x61, 0x79, 0x73, + 0x04, 0x42, 0x45, 0x08, 0x65, 0x72, 0x61, 0x73, + 0x04, 0x66, 0x6d, 0x04, 0x61, 0x6d, 0x04, 0x65, + 0x6d, 0x04, 0x70, 0x6d, 0x14, 0x64, 0x61, 0x79, + 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x73, 0x06, + 0x4d, 0x30, 0x31, 0x06, 0x4d, 0x30, 0x32, 0x06, + 0x4d, 0x30, 0x33, 0x06, 0x4d, 0x30, 0x34, 0x06, + 0x4d, 0x30, 0x35, 0x06, 0x4d, 0x30, 0x36, 0x06, + 0x4d, 0x30, 0x37, 0x06, 0x4d, 0x30, 0x38, 0x06, + 0x4d, 0x30, 0x39, 0x06, 0x4d, 0x31, 0x30, 0x06, + 0x4d, 0x31, 0x31, 0x06, 0x4d, 0x31, 0x32, 0x08, + 0x74, 0x6f, 0x75, 0x74, 0x08, 0x62, 0xe2, 0x62, + 0xe2, 0x0c, 0x68, 0xe2, 0x74, 0x6f, 0x75, 0x72, + 0x0a, 0x6b, 0x69, 0x61, 0x68, 0x6b, 0x0c, 0x74, + 0x6f, 0x75, 0x62, 0x61, 0x68, 0x0c, 0x61, 0x6d, + 0x73, 0x68, 0xee, 0x72, 0x10, 0x62, 0x61, 0x72, + 0x6d, 0x61, 0x68, 0xe2, 0x74, 0x12, 0x62, 0x61, + 0x72, 0x6d, 0x6f, 0x75, 0x64, 0x61, 0x68, 0x0e, + 0x62, 0x61, 0x73, 0x68, 0x61, 0x6e, 0x73, 0x11, + 0x62, 0x00, 0x61, 0x00, 0x19, 0x20, 0x6f, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x68, 0x00, + 0x08, 0x61, 0x62, 0xee, 0x62, 0x0a, 0x6d, 0x69, + 0x73, 0x72, 0x61, 0x0e, 0x61, 0x6c, 0x2d, 0x6e, + 0x61, 0x73, 0x69, 0x08, 0x45, 0x52, 0x41, 0x30, + 0x08, 0x45, 0x52, 0x41, 0x31, 0x10, 0x6d, 0xe4, + 0x73, 0x6b, 0xe4, 0x72, 0xe4, 0x6d, 0x0c, 0x74, + 0x65, 0x71, 0x65, 0x6d, 0x74, 0x0a, 0x68, 0x65, + 0x64, 0x61, 0x72, 0x0e, 0x74, 0x61, 0x68, 0x65, + 0x73, 0x61, 0x73, 0x06, 0x74, 0x65, 0x72, 0x0e, + 0x79, 0xe4, 0x6b, 0x61, 0x74, 0x69, 0x74, 0x0e, + 0x6d, 0xe4, 0x67, 0x61, 0x62, 0x69, 0x74, 0x0e, + 0x6d, 0x69, 0x79, 0x61, 0x7a, 0x79, 0x61, 0x0e, + 0x67, 0x75, 0x65, 0x6e, 0x62, 0x6f, 0x74, 0x08, + 0x73, 0xe4, 0x6e, 0xe9, 0x0a, 0x68, 0x61, 0x6d, + 0x6c, 0xe9, 0x0c, 0x6e, 0xe4, 0x68, 0x61, 0x73, + 0xe9, 0x0e, 0x70, 0x61, 0x67, 0x75, 0x6d, 0xe9, + 0x6e, 0x0a, 0x66, 0x2e, 0x4b, 0x72, 0x2e, 0x0a, + 0x65, 0x2e, 0x4b, 0x72, 0x2e, 0x06, 0x66, 0x76, + 0x74, 0x04, 0x76, 0x74, 0x0c, 0x66, 0x2e, 0x76, + 0x2e, 0x74, 0x2e, 0x08, 0x76, 0x2e, 0x74, 0x2e, + 0x18, 0x66, 0xf6, 0x72, 0x65, 0x20, 0x4b, 0x72, + 0x69, 0x73, 0x74, 0x75, 0x73, 0x1a, 0x65, 0x66, + 0x74, 0x65, 0x72, 0x20, 0x4b, 0x72, 0x69, 0x73, + 0x74, 0x75, 0x73, 0x3a, 0x66, 0xf6, 0x72, 0x65, + 0x20, 0x76, 0xe4, 0x73, 0x74, 0x65, 0x72, 0x6c, + 0xe4, 0x6e, 0x64, 0x73, 0x6b, 0x20, 0x74, 0x69, + 0x64, 0x65, 0x72, 0xe4, 0x6b, 0x6e, 0x69, 0x6e, + 0x67, 0x30, 0x76, 0xe4, 0x73, 0x74, 0x65, 0x72, + 0x6c, 0xe4, 0x6e, 0x64, 0x73, 0x6b, 0x20, 0x74, + 0x69, 0x64, 0x65, 0x72, 0xe4, 0x6b, 0x6e, 0x69, + 0x6e, 0x67, 0x0c, 0x74, 0x69, 0x73, 0x68, 0x72, + 0xed, 0x0e, 0x68, 0x65, 0x73, 0x68, 0x76, 0xe1, + 0x6e, 0x0c, 0x6b, 0x69, 0x73, 0x6c, 0xe9, 0x76, + 0x0a, 0x74, 0x65, 0x76, 0xe9, 0x74, 0x0c, 0x73, + 0x68, 0x65, 0x76, 0xe1, 0x74, 0x0c, 0x61, 0x64, + 0xe1, 0x72, 0x20, 0x49, 0x08, 0x61, 0x64, 0xe1, + 0x72, 0x0a, 0x6e, 0x69, 0x73, 0xe1, 0x6e, 0x0a, + 0x69, 0x6a, 0x6a, 0xe1, 0x72, 0x0a, 0x73, 0x69, + 0x76, 0xe1, 0x6e, 0x0c, 0x74, 0x61, 0x6d, 0x6d, + 0xfa, 0x7a, 0x04, 0x61, 0x62, 0x08, 0x65, 0x6c, + 0xfa, 0x6c, 0x0e, 0x61, 0x64, 0xe1, 0x72, 0x20, + 0x49, 0x49, 0x04, 0x41, 0x4d, 0x0e, 0x63, 0x68, + 0x61, 0x69, 0x74, 0x72, 0x61, 0x11, 0x76, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x01, 0x01, 0x6b, 0x00, 0x68, 0x00, 0x12, 0x6a, + 0x79, 0x61, 0x69, 0x73, 0x68, 0x74, 0x68, 0x61, + 0x0f, 0x01, 0x01, 0x73, 0x00, 0x68, 0x00, 0x01, + 0x01, 0x64, 0x00, 0x68, 0x00, 0x61, 0x00, 0x11, + 0x73, 0x00, 0x68, 0x00, 0x72, 0x00, 0x01, 0x01, + 0x76, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x13, 0x62, 0x00, 0x68, 0x00, 0x01, 0x01, 0x64, + 0x00, 0x72, 0x00, 0x61, 0x00, 0x70, 0x00, 0x61, + 0x00, 0x64, 0x00, 0x0d, 0x01, 0x01, 0x73, 0x00, + 0x68, 0x00, 0x77, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x0d, 0x6b, 0x00, 0x01, 0x01, 0x72, 0x00, 0x74, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x19, 0x6d, 0x00, + 0x01, 0x01, 0x72, 0x00, 0x67, 0x00, 0x61, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x2b, 0x01, 0x72, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x61, 0x00, 0x0a, 0x70, + 0x61, 0x75, 0x73, 0x68, 0x09, 0x6d, 0x00, 0x01, + 0x01, 0x67, 0x00, 0x68, 0x00, 0x0f, 0x70, 0x00, + 0x68, 0x00, 0x01, 0x01, 0x6c, 0x00, 0x67, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x08, 0x53, 0x41, 0x4b, + 0x41, 0x12, 0x53, 0x61, 0x6b, 0x61, 0x2d, 0x65, + 0x72, 0x61, 0x6e, 0x08, 0x4d, 0x75, 0x68, 0x2e, + 0x08, 0x53, 0x61, 0x66, 0x2e, 0x0c, 0x52, 0x61, + 0x62, 0x2e, 0x20, 0x49, 0x0e, 0x52, 0x61, 0x62, + 0x2e, 0x20, 0x49, 0x49, 0x0c, 0x4a, 0x75, 0x6d, + 0x2e, 0x20, 0x49, 0x0e, 0x4a, 0x75, 0x6d, 0x2e, + 0x20, 0x49, 0x49, 0x08, 0x52, 0x61, 0x6a, 0x2e, + 0x08, 0x53, 0x68, 0x61, 0x2e, 0x08, 0x52, 0x61, + 0x6d, 0x2e, 0x0a, 0x53, 0x68, 0x61, 0x77, 0x2e, + 0x11, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, + 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x51, 0x00, 0x2e, + 0x00, 0x11, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, + 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x48, 0x00, + 0x2e, 0x00, 0x10, 0x6d, 0x75, 0x68, 0x61, 0x72, + 0x72, 0x61, 0x6d, 0x0a, 0x73, 0x61, 0x66, 0x61, + 0x72, 0x1d, 0x72, 0x00, 0x61, 0x00, 0x62, 0x00, + 0x69, 0x00, 0x19, 0x20, 0x20, 0x00, 0x61, 0x00, + 0x6c, 0x00, 0x2d, 0x00, 0x61, 0x00, 0x77, 0x00, + 0x77, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x1d, 0x72, + 0x00, 0x61, 0x00, 0x62, 0x00, 0x69, 0x00, 0x19, + 0x20, 0x20, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x2d, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x68, 0x00, 0x69, + 0x00, 0x72, 0x00, 0x18, 0x6a, 0x75, 0x6d, 0x61, + 0x64, 0x61, 0x2d, 0x6c, 0x2d, 0x75, 0x6c, 0x61, + 0x1e, 0x6a, 0x75, 0x6d, 0x61, 0x64, 0x61, 0x2d, + 0x6c, 0x2d, 0x61, 0x6b, 0x68, 0x69, 0x72, 0x61, + 0x0a, 0x72, 0x61, 0x6a, 0x61, 0x62, 0x0f, 0x73, + 0x00, 0x68, 0x00, 0x61, 0x00, 0x19, 0x20, 0x62, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x0e, 0x72, 0x61, + 0x6d, 0x61, 0x64, 0x61, 0x6e, 0x0e, 0x73, 0x68, + 0x61, 0x77, 0x77, 0x61, 0x6c, 0x17, 0x64, 0x00, + 0x68, 0x00, 0x75, 0x00, 0x2d, 0x00, 0x6c, 0x00, + 0x2d, 0x00, 0x67, 0x00, 0x61, 0x00, 0x19, 0x20, + 0x64, 0x00, 0x61, 0x00, 0x16, 0x64, 0x68, 0x75, + 0x2d, 0x6c, 0x2d, 0x68, 0x69, 0x6a, 0x6a, 0x61, + 0x04, 0x41, 0x48, 0x1f, 0x54, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x36, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x48, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x36, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x36, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x29, 0x00, 0x21, 0x53, + 0x00, 0x68, 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, + 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4b, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x57, 0x00, + 0x61, 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x1f, 0x52, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x1d, 0x59, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4a, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6b, 0x00, 0x61, + 0x00, 0x6d, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x2d, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x2b, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x2d, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, 0x2d, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x2a, 0x4a, 0x69, 0x6e, 0x67, 0x6f, 0x2d, 0x6b, + 0x65, 0x69, 0x75, 0x6e, 0x20, 0x28, 0x37, 0x36, + 0x37, 0x2d, 0x37, 0x37, 0x30, 0x29, 0x1d, 0x48, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x2d, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x2d, 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x38, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, 0x44, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x64, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x38, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, + 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4a, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x1d, 0x4b, 0x00, 0x61, 0x00, 0x6a, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x53, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x20, 0x54, 0x65, 0x6e, + 0x2d, 0x61, 0x6e, 0x20, 0x28, 0x38, 0x35, 0x37, + 0x2d, 0x38, 0x35, 0x39, 0x29, 0x1f, 0x4a, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, 0x45, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, 0x6e, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1b, 0x4c, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x1d, 0x41, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, 0x69, 0x00, + 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1d, 0x45, + 0x00, 0x69, 0x00, 0x73, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x4a, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x29, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, 0x4a, + 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x29, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4c, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, + 0x4a, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x24, 0x54, 0x65, 0x6e, 0x2d, 0x65, 0x69, 0x20, + 0x28, 0x31, 0x31, 0x31, 0x30, 0x2d, 0x31, 0x31, + 0x31, 0x33, 0x29, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, + 0x01, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, + 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x6a, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x48, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x48, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x45, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x68, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x6d, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, + 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x59, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x21, 0x4a, 0x00, 0x75, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x29, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x29, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1f, + 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x41, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, + 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x29, 0x00, 0x27, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x75, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x29, 0x52, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x4e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1f, 0x4c, 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x74, 0x00, 0x73, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x27, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x45, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x21, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x45, 0x00, 0x69, 0x00, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x72, + 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, + 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, + 0x45, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, + 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x48, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x65, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x23, 0x41, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, + 0x00, 0x65, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, + 0x54, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6b, 0x00, + 0x61, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x37, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, + 0x00, 0x6d, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x2d, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x2b, 0x54, 0x00, 0x65, 0x00, 0x6d, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x37, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, + 0x00, 0x6d, 0x00, 0x70, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x2d, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x2b, 0x4a, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x6f, 0x00, 0x2d, 0x00, 0x6b, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x37, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x1f, 0x53, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, + 0x00, 0x6d, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, + 0x45, 0x00, 0x69, 0x00, 0x2d, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x45, + 0x00, 0x69, 0x00, 0x68, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x61, 0x00, 0x68, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x27, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x21, 0x48, 0x00, 0x6f, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x21, 0x48, 0x00, 0x6f, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x48, + 0x00, 0x6f, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x2d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x29, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x75, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x54, + 0x00, 0x65, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x75, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, + 0x6e, 0x00, 0x2d, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x2d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, + 0x6d, 0x00, 0x6d, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6d, 0x00, 0x6f, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x2d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x29, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x27, 0x48, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x2d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x4d, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x0a, 0x4d, 0x65, 0x69, 0x6a, 0x69, 0x0d, + 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x0b, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x0c, + 0x48, 0x65, 0x69, 0x73, 0x65, 0x69, 0x12, 0x66, + 0x61, 0x72, 0x76, 0x61, 0x72, 0x64, 0x69, 0x6e, + 0x16, 0x6f, 0x72, 0x64, 0x69, 0x62, 0x65, 0x68, + 0x65, 0x73, 0x68, 0x74, 0x0f, 0x6b, 0x00, 0x68, + 0x00, 0x6f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x01, + 0x01, 0x64, 0x00, 0x06, 0x74, 0x69, 0x72, 0x0d, + 0x6d, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x64, 0x00, + 0x01, 0x01, 0x64, 0x00, 0x12, 0x73, 0x68, 0x61, + 0x68, 0x72, 0x69, 0x76, 0x61, 0x72, 0x08, 0x6d, + 0x65, 0x68, 0x72, 0x09, 0x01, 0x01, 0x62, 0x00, + 0x01, 0x01, 0x6e, 0x00, 0x09, 0x01, 0x01, 0x7a, + 0x00, 0x61, 0x00, 0x72, 0x00, 0x06, 0x64, 0x65, + 0x79, 0x0c, 0x62, 0x61, 0x68, 0x6d, 0x61, 0x6e, + 0x0c, 0x65, 0x73, 0x66, 0x61, 0x6e, 0x64, 0x04, + 0x41, 0x50, 0x12, 0x66, 0xf6, 0x72, 0x65, 0x20, + 0x52, 0x2e, 0x4b, 0x2e, 0x08, 0x52, 0x2e, 0x4b, + 0x2e, 0x12, 0x63, 0x61, 0x6c, 0x65, 0x6e, 0x64, + 0x61, 0x72, 0x73, 0x08, 0x64, 0x61, 0x74, 0x65, + 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, 0x75, + 0x10, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0x1e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, + 0x6e, 0x26, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x6e, 0x65, + 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, + 0x74, 0x74, 0x65, 0x72, 0x6e, 0x0e, 0x64, 0x65, + 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x26, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0xa0, 0x7b, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, + 0x7d, 0x3c, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0xa0, 0x7b, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, + 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, + 0x79, 0x2c, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0xa0, 0x7b, 0x70, 0x65, 0x72, 0x63, + 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, + 0x42, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0xa0, 0x7b, 0x70, 0x65, + 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, + 0x6e, 0x7d, 0x0e, 0x70, 0x65, 0x72, 0x63, 0x65, + 0x6e, 0x74, 0x10, 0x70, 0x61, 0x74, 0x74, 0x65, + 0x72, 0x6e, 0x73, 0x02, 0x2c, 0x02, 0xa0, 0x0a, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x06, 0xa4, 0xa4, + 0xa4, 0x06, 0x6e, 0x61, 0x6e, 0x02, 0x2b, 0x10, + 0x70, 0x6c, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x03, 0x12, 0x22, 0x12, 0x6d, 0x69, 0x6e, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, 0x25, 0x16, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, + 0x69, 0x67, 0x6e, 0x03, 0x1e, 0x22, 0x10, 0x69, + 0x6e, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x0e, + 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x08, + 0x42, 0x64, 0x73, 0x24, 0x06, 0x42, 0x42, 0x44, + 0x06, 0x42, 0x4d, 0x24, 0x06, 0x42, 0x4d, 0x44, + 0x06, 0x42, 0x52, 0x24, 0x06, 0x42, 0x52, 0x4c, + 0x06, 0x42, 0x53, 0x24, 0x06, 0x42, 0x53, 0x44, + 0x06, 0x42, 0x5a, 0x24, 0x06, 0x42, 0x5a, 0x44, + 0x06, 0x43, 0x41, 0x24, 0x06, 0x43, 0x41, 0x44, + 0x06, 0x44, 0x6b, 0x72, 0x06, 0x44, 0x4b, 0x4b, + 0x06, 0x52, 0x44, 0x24, 0x06, 0x44, 0x4f, 0x50, + 0x06, 0x45, 0x6b, 0x72, 0x06, 0x45, 0x45, 0x4b, + 0x06, 0x45, 0x47, 0xa3, 0x06, 0x45, 0x47, 0x50, + 0x03, 0xac, 0x20, 0x06, 0x45, 0x55, 0x52, 0x03, + 0xaa, 0x20, 0x06, 0x49, 0x4c, 0x53, 0x06, 0x49, + 0x6b, 0x72, 0x06, 0x49, 0x53, 0x4b, 0x06, 0x4a, + 0x4d, 0x24, 0x06, 0x4a, 0x4d, 0x44, 0x06, 0x4d, + 0x58, 0x24, 0x06, 0x4d, 0x58, 0x4e, 0x06, 0x4e, + 0x6b, 0x72, 0x06, 0x4e, 0x4f, 0x4b, 0x04, 0x6b, + 0x72, 0x06, 0x53, 0x45, 0x4b, 0x06, 0x55, 0x53, + 0x24, 0x06, 0x55, 0x53, 0x44, 0x08, 0x46, 0x43, + 0x46, 0x41, 0x06, 0x58, 0x41, 0x46, 0x06, 0x45, + 0x43, 0x24, 0x06, 0x58, 0x43, 0x44, 0x06, 0x43, + 0x46, 0x41, 0x06, 0x58, 0x4f, 0x46, 0x08, 0x43, + 0x46, 0x50, 0x46, 0x06, 0x58, 0x50, 0x46, 0x14, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, + 0x65, 0x73, 0x52, 0x6e, 0x6f, 0x64, 0x65, 0x5f, + 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, + 0x69, 0x6e, 0x74, 0x6c, 0x2f, 0x6c, 0x6f, 0x63, + 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, + 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x70, 0x2f, 0x73, + 0x76, 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, + 0x9e, 0x01, 0x00, 0x01, 0x00, 0x27, 0x00, 0x89, + 0x01, 0x90, 0x6b, 0x01, 0xa0, 0x01, 0x00, 0x00, + 0x00, 0x39, 0xd0, 0x00, 0x00, 0x00, 0x43, 0xd1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd2, 0x00, 0x00, + 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd4, 0x00, 0x00, 0x00, 0x04, 0xd5, 0x00, 0x00, + 0x00, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x04, 0xd7, + 0x00, 0x00, 0x00, 0x04, 0xd8, 0x00, 0x00, 0x00, + 0x04, 0xd9, 0x00, 0x00, 0x00, 0x04, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xdb, 0x00, 0x00, 0x00, 0x04, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, + 0x00, 0x04, 0xde, 0x00, 0x00, 0x00, 0x04, 0xdf, + 0x00, 0x00, 0x00, 0x04, 0xe0, 0x00, 0x00, 0x00, + 0x04, 0xe1, 0x00, 0x00, 0x00, 0x04, 0xe2, 0x00, + 0x00, 0x00, 0x26, 0x0f, 0x00, 0x4d, 0xe3, 0x00, + 0x00, 0x00, 0x0a, 0x4d, 0xe4, 0x00, 0x00, 0x00, + 0x09, 0x4d, 0xe5, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xe9, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, + 0xed, 0x00, 0x00, 0x00, 0x04, 0xee, 0x00, 0x00, + 0x00, 0x4d, 0xef, 0x00, 0x00, 0x00, 0x04, 0xf0, + 0x00, 0x00, 0x00, 0x4d, 0xf1, 0x00, 0x00, 0x00, + 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xf3, 0x00, + 0x00, 0x00, 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, + 0xf5, 0x00, 0x00, 0x00, 0x04, 0xf6, 0x00, 0x00, + 0x00, 0x4d, 0xf7, 0x00, 0x00, 0x00, 0x04, 0xf8, + 0x00, 0x00, 0x00, 0x4d, 0xf9, 0x00, 0x00, 0x00, + 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xfb, 0x00, + 0x00, 0x00, 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, + 0xfd, 0x00, 0x00, 0x00, 0x04, 0xfe, 0x00, 0x00, + 0x00, 0x4d, 0xff, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x01, 0x00, 0x00, 0x4d, 0x01, 0x01, 0x00, 0x00, + 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, 0x03, 0x01, + 0x00, 0x00, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, + 0x05, 0x01, 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, + 0x00, 0x4d, 0x07, 0x01, 0x00, 0x00, 0x04, 0x08, + 0x01, 0x00, 0x00, 0x4d, 0x09, 0x01, 0x00, 0x00, + 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x0b, 0x01, + 0x00, 0x00, 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, + 0x0d, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x01, 0x00, + 0x00, 0x4d, 0x0f, 0x01, 0x00, 0x00, 0x04, 0x10, + 0x01, 0x00, 0x00, 0x4d, 0x11, 0x01, 0x00, 0x00, + 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, 0x13, 0x01, + 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, + 0x15, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, + 0x00, 0x4d, 0x17, 0x01, 0x00, 0x00, 0x04, 0x18, + 0x01, 0x00, 0x00, 0x4d, 0x19, 0x01, 0x00, 0x00, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, 0x1a, 0x01, + 0x00, 0x00, 0x04, 0x1b, 0x01, 0x00, 0x00, 0x4d, + 0x1c, 0x01, 0x00, 0x00, 0x04, 0x1d, 0x01, 0x00, + 0x00, 0x4d, 0x1e, 0x01, 0x00, 0x00, 0x04, 0x1f, + 0x01, 0x00, 0x00, 0x4d, 0x20, 0x01, 0x00, 0x00, + 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, 0x22, 0x01, + 0x00, 0x00, 0x04, 0x23, 0x01, 0x00, 0x00, 0x4d, + 0x24, 0x01, 0x00, 0x00, 0x04, 0x25, 0x01, 0x00, + 0x00, 0x4d, 0x26, 0x01, 0x00, 0x00, 0x04, 0x27, + 0x01, 0x00, 0x00, 0x4d, 0x28, 0x01, 0x00, 0x00, + 0x04, 0x29, 0x01, 0x00, 0x00, 0x4d, 0x29, 0x01, + 0x00, 0x00, 0x04, 0x2a, 0x01, 0x00, 0x00, 0x4d, + 0x2b, 0x01, 0x00, 0x00, 0x04, 0x2c, 0x01, 0x00, + 0x00, 0x4d, 0x2d, 0x01, 0x00, 0x00, 0x04, 0x2e, + 0x01, 0x00, 0x00, 0x4d, 0x2f, 0x01, 0x00, 0x00, + 0x04, 0x2a, 0x01, 0x00, 0x00, 0x4d, 0x30, 0x01, + 0x00, 0x00, 0x04, 0x31, 0x01, 0x00, 0x00, 0x4d, + 0x32, 0x01, 0x00, 0x00, 0x04, 0x33, 0x01, 0x00, + 0x00, 0x4d, 0x34, 0x01, 0x00, 0x00, 0x04, 0x35, + 0x01, 0x00, 0x00, 0x4d, 0x36, 0x01, 0x00, 0x00, + 0x04, 0x37, 0x01, 0x00, 0x00, 0x4d, 0x38, 0x01, + 0x00, 0x00, 0x04, 0x39, 0x01, 0x00, 0x00, 0x4d, + 0x3a, 0x01, 0x00, 0x00, 0x04, 0x3b, 0x01, 0x00, + 0x00, 0x4d, 0x3c, 0x01, 0x00, 0x00, 0x4d, 0x3d, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x3e, 0x01, 0x00, + 0x00, 0x4d, 0x3f, 0x01, 0x00, 0x00, 0x04, 0x40, + 0x01, 0x00, 0x00, 0x4d, 0x41, 0x01, 0x00, 0x00, + 0x04, 0x33, 0x01, 0x00, 0x00, 0x4d, 0x34, 0x01, + 0x00, 0x00, 0x04, 0x2c, 0x01, 0x00, 0x00, 0x4d, + 0x2d, 0x01, 0x00, 0x00, 0x4d, 0x42, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x43, 0x01, 0x00, 0x00, 0x4d, + 0x44, 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, + 0x00, 0x4d, 0x46, 0x01, 0x00, 0x00, 0x04, 0x0a, + 0x01, 0x00, 0x00, 0x4d, 0x09, 0x01, 0x00, 0x00, + 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, 0x05, 0x01, + 0x00, 0x00, 0x4d, 0x47, 0x01, 0x00, 0x00, 0x4d, + 0x48, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x0b, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x65, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x14, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, + 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0xd5, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x00, 0xbe, + 0x01, 0xbe, 0x02, 0xbe, 0x03, 0xbe, 0x04, 0xbe, + 0x05, 0xbe, 0x06, 0xbe, 0x07, 0xbe, 0x08, 0xbe, + 0x09, 0xbe, 0x0a, 0xbe, 0x0b, 0x26, 0x0c, 0x00, + 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, + 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, + 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, + 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, + 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, + 0x04, 0x88, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x65, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x78, 0x01, 0x00, 0x00, 0x4d, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, + 0x01, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x0c, 0xbe, 0x0d, 0xbe, 0x0e, + 0xbe, 0x0f, 0xbe, 0x10, 0xbe, 0x11, 0xbe, 0x12, + 0xbe, 0x13, 0xbe, 0x14, 0xbe, 0x15, 0xbe, 0x16, + 0xbe, 0x17, 0xbe, 0x18, 0x26, 0x0d, 0x00, 0x4d, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, + 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, + 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, + 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, + 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, + 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, + 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, + 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, + 0x04, 0x95, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x89, 0x01, + 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, + 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, + 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, + 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, + 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, + 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, + 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, + 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x26, 0x0d, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x65, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x96, 0x01, 0x00, 0x00, + 0x04, 0x97, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, + 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, + 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, + 0x4d, 0xd7, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x19, 0xbe, 0x1a, 0xbe, 0x1b, 0xbe, 0x1c, 0xbe, + 0x1d, 0xbe, 0x1e, 0xbe, 0x1f, 0xbe, 0x20, 0xbe, + 0x21, 0xbe, 0x22, 0xbe, 0x23, 0xbe, 0x24, 0x26, + 0x0c, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, + 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, + 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x65, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x75, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, + 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x25, 0xbe, 0x26, + 0xbe, 0x27, 0xbe, 0x28, 0xbe, 0x29, 0xbe, 0x2a, + 0xbe, 0x2b, 0xbe, 0x2c, 0xbe, 0x2d, 0xbe, 0x2e, + 0xbe, 0x2f, 0xbe, 0x30, 0xbe, 0x31, 0x26, 0x0d, + 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, 0x98, + 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, + 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, + 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, + 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, + 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, + 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, + 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, + 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, + 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, + 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, + 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, + 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, + 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, + 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, + 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x65, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x75, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x96, 0x01, + 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x32, 0xbe, 0x33, 0xbe, 0x34, 0xbe, + 0x35, 0xbe, 0x36, 0xbe, 0x37, 0xbe, 0x38, 0xbe, + 0x39, 0xbe, 0x3a, 0xbe, 0x3b, 0xbe, 0x3c, 0xbe, + 0x3d, 0xbe, 0x3e, 0x26, 0x0d, 0x00, 0x4d, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, + 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, + 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, + 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, + 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, + 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, + 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, + 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, + 0xa4, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, + 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, + 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, + 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, + 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, + 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, + 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, + 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, + 0x04, 0xa4, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x65, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x96, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x96, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, + 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, + 0x4d, 0xd9, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x3f, 0xbe, 0x40, 0xbe, 0x41, 0xbe, 0x42, 0xbe, + 0x43, 0xbe, 0x44, 0xbe, 0x45, 0xbe, 0x46, 0xbe, + 0x47, 0xbe, 0x48, 0xbe, 0x49, 0xbe, 0x4a, 0x26, + 0x0c, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, + 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, + 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x65, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x75, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x96, 0x01, 0x00, + 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, 0x96, + 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x4d, + 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x49, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x65, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x14, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, + 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, + 0x04, 0xa8, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, + 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, + 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, + 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, + 0x00, 0x26, 0x04, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, + 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, + 0x04, 0xae, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x77, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x4d, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x4d, + 0x7c, 0x01, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x4b, 0xbe, 0x4c, 0xbe, + 0x4d, 0xbe, 0x4e, 0xbe, 0x4f, 0xbe, 0x50, 0xbe, + 0x51, 0xbe, 0x52, 0xbe, 0x53, 0xbe, 0x54, 0xbe, + 0x55, 0xbe, 0x56, 0xbe, 0x57, 0xbe, 0x58, 0x26, + 0x0e, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, + 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, + 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, + 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, + 0x04, 0xb4, 0x01, 0x00, 0x00, 0x04, 0xb5, 0x01, + 0x00, 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, 0x04, + 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, + 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, + 0x01, 0x00, 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, + 0x04, 0xbc, 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xaf, 0x01, + 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, + 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, + 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, + 0x01, 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, + 0x04, 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, + 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, 0x04, + 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, + 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, + 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x65, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x14, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xbd, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, + 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x59, 0xbe, + 0x5a, 0xbe, 0x5b, 0xbe, 0x5c, 0xbe, 0x5d, 0xbe, + 0x5e, 0xbe, 0x5f, 0xbe, 0x60, 0xbe, 0x61, 0xbe, + 0x62, 0xbe, 0x63, 0xbe, 0x64, 0x26, 0x0c, 0x00, + 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, 0xbe, 0x01, + 0x00, 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, 0x04, + 0xc0, 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, + 0x00, 0x04, 0xc2, 0x01, 0x00, 0x00, 0x04, 0xc3, + 0x01, 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, + 0x04, 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, 0x01, + 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, 0x04, + 0xc8, 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, + 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, + 0x04, 0xc1, 0x01, 0x00, 0x00, 0x04, 0xc2, 0x01, + 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, 0x04, + 0xc4, 0x01, 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, + 0x00, 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, 0xc7, + 0x01, 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, + 0x04, 0xc9, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x65, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xca, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, + 0xca, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, + 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x65, 0xbe, 0x66, 0xbe, 0x67, 0xbe, 0x68, 0xbe, + 0x69, 0xbe, 0x6a, 0xbe, 0x6b, 0xbe, 0x6c, 0xbe, + 0x6d, 0xbe, 0x6e, 0xbe, 0x6f, 0xbe, 0x70, 0x26, + 0x0c, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, + 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, + 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, 0x04, 0xcf, + 0x01, 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, + 0x04, 0xd1, 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, + 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, + 0xd4, 0x01, 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, + 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, + 0x04, 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, + 0x00, 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, + 0xdc, 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, + 0x00, 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, + 0x01, 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, + 0x04, 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, + 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x65, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x75, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xe4, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x50, 0x01, 0x00, + 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe4, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x71, 0xbe, 0x72, 0xbe, 0x73, 0xbe, + 0x74, 0xbe, 0x75, 0xbe, 0x76, 0xbe, 0x77, 0xbe, + 0x78, 0xbe, 0x79, 0xbe, 0x7a, 0xbe, 0x7b, 0xbe, + 0x7c, 0x26, 0x0c, 0x00, 0x4d, 0x50, 0x01, 0x00, + 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, + 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, + 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, 0x01, + 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, 0x04, + 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, + 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, 0xd5, + 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, + 0x04, 0xd7, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd8, 0x01, + 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, 0x04, + 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, 0x00, + 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, 0x04, 0xdd, + 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, 0x00, + 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, 0xe0, 0x01, + 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, 0x00, 0x04, + 0xe2, 0x01, 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x65, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x75, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xe4, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x50, + 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xe4, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x77, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x4d, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x4d, + 0x7c, 0x01, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x65, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x75, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xe5, 0x01, 0x00, + 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, + 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, + 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, + 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, + 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, + 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, + 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, + 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, + 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, + 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, + 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, + 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, + 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, + 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, + 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, 0x01, 0x00, + 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x04, 0xff, + 0x01, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, + 0x04, 0x01, 0x02, 0x00, 0x00, 0x04, 0x02, 0x02, + 0x00, 0x00, 0x04, 0x03, 0x02, 0x00, 0x00, 0x04, + 0x04, 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, + 0x05, 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, + 0x80, 0x04, 0x06, 0x02, 0x00, 0x00, 0x4d, 0x21, + 0x00, 0x00, 0x80, 0x04, 0x07, 0x02, 0x00, 0x00, + 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0x08, 0x02, + 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, + 0x09, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, + 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x4d, 0x25, + 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, 0x00, 0x00, + 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, + 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, + 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, + 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x29, + 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, + 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, + 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, + 0x11, 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, + 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, 0x2d, + 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, + 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, + 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, + 0x15, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, + 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, 0x31, + 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, + 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, + 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, + 0x19, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, + 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x35, + 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, + 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, + 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, + 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, + 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x39, + 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, + 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, + 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, + 0x21, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, + 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x3d, + 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, + 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, + 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, + 0x25, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, + 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x41, + 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, + 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, + 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, + 0x29, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, + 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x45, + 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, + 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, + 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, + 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, + 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x49, + 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, + 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, + 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, + 0x31, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, + 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x4d, + 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, + 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, + 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, + 0x35, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, + 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, 0x51, + 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, + 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, + 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, + 0x39, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, + 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x55, + 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, + 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, + 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, + 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, + 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x59, + 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, + 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, + 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, + 0x41, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, + 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, 0x5d, + 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, + 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, + 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, + 0x45, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, + 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x61, + 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, + 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, + 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, + 0x49, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, + 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x65, + 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, + 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, + 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, + 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, + 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x69, + 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, + 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, + 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, + 0x51, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, + 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x6d, + 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, + 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, + 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, + 0x55, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, + 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, 0x71, + 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, + 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, + 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, + 0x59, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, + 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x75, + 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, + 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, + 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, + 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, + 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x79, + 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, + 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, + 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, + 0x61, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, + 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x7d, + 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, + 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, + 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, + 0x65, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, + 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x81, + 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, + 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, + 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, + 0x69, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, + 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x85, + 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, + 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, + 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, + 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, + 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x89, + 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, + 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, + 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, + 0x71, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, + 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0x8d, + 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, + 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, + 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, + 0x75, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, + 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0x91, + 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, + 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, + 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, + 0x79, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, + 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x95, + 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, + 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, + 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, + 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, + 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, 0x99, + 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, + 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, + 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, + 0x81, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, + 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0x9d, + 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, + 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, + 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, + 0x85, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, + 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0xa1, + 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, + 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, + 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, + 0x89, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, + 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0xa5, + 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, + 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, + 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, + 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, + 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xa9, + 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, + 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, + 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, + 0x91, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, + 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0xad, + 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, + 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, + 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, + 0x95, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, + 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0xb1, + 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, + 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, + 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, + 0x99, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, + 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xb5, + 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, + 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, + 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, + 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, + 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xb9, + 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, + 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, + 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, + 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, + 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xbd, + 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, + 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, + 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, + 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, + 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xc1, + 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, + 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, + 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, + 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, + 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xc5, + 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, + 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, + 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, + 0xad, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, + 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0xc9, + 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, + 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, + 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, + 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, + 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xcd, + 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, + 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, + 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, + 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, + 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xd1, + 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, + 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, + 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, + 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, + 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0xd5, + 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, + 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, + 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, + 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xd9, + 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, + 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, + 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, + 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, + 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, + 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, 0xe5, + 0x00, 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, + 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, + 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, + 0x80, 0x04, 0x66, 0x01, 0x00, 0x00, 0x4d, 0xe9, + 0x00, 0x00, 0x80, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0x03, 0x01, + 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, + 0x50, 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, + 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, + 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, + 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, + 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, + 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, + 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, 0xcd, + 0x02, 0x00, 0x00, 0x04, 0xce, 0x02, 0x00, 0x00, + 0x04, 0xcf, 0x02, 0x00, 0x00, 0x04, 0xd0, 0x02, + 0x00, 0x00, 0x04, 0xd1, 0x02, 0x00, 0x00, 0x04, + 0xd2, 0x02, 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, + 0x00, 0x04, 0xd3, 0x02, 0x00, 0x00, 0x04, 0xf7, + 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, + 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, + 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, + 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, 0x01, 0x00, + 0x00, 0x04, 0xd4, 0x02, 0x00, 0x00, 0x04, 0xd5, + 0x02, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, + 0x04, 0xd6, 0x02, 0x00, 0x00, 0x04, 0x02, 0x02, + 0x00, 0x00, 0x04, 0xd7, 0x02, 0x00, 0x00, 0x04, + 0x04, 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, + 0x05, 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, + 0x80, 0x04, 0x06, 0x02, 0x00, 0x00, 0x4d, 0x21, + 0x00, 0x00, 0x80, 0x04, 0xd8, 0x02, 0x00, 0x00, + 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0x08, 0x02, + 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, + 0x09, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, + 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x4d, 0x25, + 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, 0x00, 0x00, + 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, + 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, + 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, + 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x29, + 0x00, 0x00, 0x80, 0x04, 0xd9, 0x02, 0x00, 0x00, + 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, + 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, + 0x11, 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, + 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, 0x2d, + 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, + 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0xda, 0x02, + 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, + 0x15, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, + 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, 0x31, + 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, + 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, + 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, + 0x19, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, + 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x35, + 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, + 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, + 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, + 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, + 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x39, + 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, + 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, + 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, + 0x21, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, + 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x3d, + 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, + 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, + 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, + 0x25, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, + 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x41, + 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, + 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, + 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, + 0xdb, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, + 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x45, + 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, + 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0xdc, 0x02, + 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, + 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, + 0x80, 0x04, 0xdd, 0x02, 0x00, 0x00, 0x4d, 0x49, + 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, + 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, + 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, + 0x31, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, + 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x4d, + 0x00, 0x00, 0x80, 0x04, 0xde, 0x02, 0x00, 0x00, + 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, + 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, + 0xdf, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, + 0x80, 0x04, 0xe0, 0x02, 0x00, 0x00, 0x4d, 0x51, + 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, + 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, + 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, + 0x39, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, + 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x55, + 0x00, 0x00, 0x80, 0x04, 0xe1, 0x02, 0x00, 0x00, + 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, + 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, + 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, + 0x80, 0x04, 0xe2, 0x02, 0x00, 0x00, 0x4d, 0x59, + 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, + 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, + 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, + 0x41, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, + 0x80, 0x04, 0xe3, 0x02, 0x00, 0x00, 0x4d, 0x5d, + 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, + 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, + 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, + 0x45, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, + 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x61, + 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, + 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0xe4, 0x02, + 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, + 0x49, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, + 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x65, + 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, + 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, + 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, + 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, + 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x69, + 0x00, 0x00, 0x80, 0x04, 0xe5, 0x02, 0x00, 0x00, + 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, + 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, + 0x51, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, + 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x6d, + 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, + 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, + 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, + 0xe6, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, + 0x80, 0x04, 0xe7, 0x02, 0x00, 0x00, 0x4d, 0x71, + 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, + 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, + 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, + 0xe8, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, + 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x75, + 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, + 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, + 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, + 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, + 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x79, + 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, + 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0xe9, 0x02, + 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, + 0x61, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, + 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x7d, + 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, + 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0xea, 0x02, + 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, + 0x65, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, + 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x81, + 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, + 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, + 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, + 0x69, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, + 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x85, + 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, + 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0xeb, 0x02, + 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, + 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, + 0x80, 0x04, 0xec, 0x02, 0x00, 0x00, 0x4d, 0x89, + 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, + 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, + 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, + 0x71, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, + 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0x8d, + 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, + 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, + 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, + 0x75, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, + 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0x91, + 0x00, 0x00, 0x80, 0x04, 0xed, 0x02, 0x00, 0x00, + 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, + 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, + 0x79, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, + 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x95, + 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, + 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0xee, 0x02, + 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, + 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, + 0x80, 0x04, 0xef, 0x02, 0x00, 0x00, 0x4d, 0x99, + 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, + 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, + 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, + 0xf0, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, + 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0x9d, + 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, + 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, + 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, + 0x85, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, + 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0xa1, + 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, + 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, + 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, + 0x89, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, + 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0xa5, + 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, + 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, + 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, + 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, + 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xa9, + 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, + 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, + 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, + 0x91, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, + 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0xad, + 0x00, 0x00, 0x80, 0x04, 0xf1, 0x02, 0x00, 0x00, + 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, + 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, + 0x95, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, + 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0xb1, + 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, + 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, + 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, + 0x99, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, + 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xb5, + 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, + 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, + 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, + 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, + 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xb9, + 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, + 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, + 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, + 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, + 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xbd, + 0x00, 0x00, 0x80, 0x04, 0xf2, 0x02, 0x00, 0x00, + 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, + 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, + 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, + 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xc1, + 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, + 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, + 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, + 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, + 0x80, 0x04, 0xf3, 0x02, 0x00, 0x00, 0x4d, 0xc5, + 0x00, 0x00, 0x80, 0x04, 0xf4, 0x02, 0x00, 0x00, + 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, + 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, + 0xad, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, + 0x80, 0x04, 0xf5, 0x02, 0x00, 0x00, 0x4d, 0xc9, + 0x00, 0x00, 0x80, 0x04, 0xf6, 0x02, 0x00, 0x00, + 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, + 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, + 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, + 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xcd, + 0x00, 0x00, 0x80, 0x04, 0xf7, 0x02, 0x00, 0x00, + 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, + 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, + 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, + 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xd1, + 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, + 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, + 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, + 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, + 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0xd5, + 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, + 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xf8, 0x02, + 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, + 0xf9, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xd9, + 0x00, 0x00, 0x80, 0x04, 0xfa, 0x02, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, + 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, + 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, + 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, + 0xfb, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, + 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, 0xe5, + 0x00, 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, + 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, + 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, + 0xfc, 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, + 0x80, 0x04, 0xfd, 0x02, 0x00, 0x00, 0x4d, 0xe9, + 0x00, 0x00, 0x80, 0x04, 0xfe, 0x02, 0x00, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0xff, 0x02, + 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, + 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, + 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, + 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, + 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, + 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, + 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, 0xcd, + 0x02, 0x00, 0x00, 0x04, 0xce, 0x02, 0x00, 0x00, + 0x04, 0xcf, 0x02, 0x00, 0x00, 0x04, 0xd0, 0x02, + 0x00, 0x00, 0x04, 0xd1, 0x02, 0x00, 0x00, 0x04, + 0xd2, 0x02, 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, + 0x00, 0x04, 0xd3, 0x02, 0x00, 0x00, 0x04, 0xf7, + 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, + 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, + 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, + 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, 0x01, 0x00, + 0x00, 0x04, 0xd4, 0x02, 0x00, 0x00, 0x04, 0xd5, + 0x02, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, + 0x04, 0xd6, 0x02, 0x00, 0x00, 0x04, 0x02, 0x02, + 0x00, 0x00, 0x04, 0xd7, 0x02, 0x00, 0x00, 0x04, + 0x04, 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, + 0x05, 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, + 0x80, 0x04, 0x06, 0x02, 0x00, 0x00, 0x4d, 0x21, + 0x00, 0x00, 0x80, 0x04, 0xd8, 0x02, 0x00, 0x00, + 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0x08, 0x02, + 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, + 0x09, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, + 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x4d, 0x25, + 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, 0x00, 0x00, + 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, + 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, + 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, + 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x29, + 0x00, 0x00, 0x80, 0x04, 0xd9, 0x02, 0x00, 0x00, + 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, + 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, + 0x11, 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, + 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, 0x2d, + 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, + 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0xda, 0x02, + 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, + 0x15, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, + 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, 0x31, + 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, + 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, + 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, + 0x19, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, + 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x35, + 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, + 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, + 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, + 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, + 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x39, + 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, + 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, + 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, + 0x21, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, + 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x3d, + 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, + 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, + 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, + 0x25, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, + 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x41, + 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, + 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, + 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, + 0xdb, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, + 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x45, + 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, + 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0xdc, 0x02, + 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, + 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, + 0x80, 0x04, 0xdd, 0x02, 0x00, 0x00, 0x4d, 0x49, + 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, + 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, + 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, + 0x31, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, + 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x4d, + 0x00, 0x00, 0x80, 0x04, 0xde, 0x02, 0x00, 0x00, + 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, + 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, + 0xdf, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, + 0x80, 0x04, 0xe0, 0x02, 0x00, 0x00, 0x4d, 0x51, + 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, + 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, + 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, + 0x39, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, + 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x55, + 0x00, 0x00, 0x80, 0x04, 0xe1, 0x02, 0x00, 0x00, + 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, + 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, + 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, + 0x80, 0x04, 0xe2, 0x02, 0x00, 0x00, 0x4d, 0x59, + 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, + 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, + 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, + 0x41, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, + 0x80, 0x04, 0xe3, 0x02, 0x00, 0x00, 0x4d, 0x5d, + 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, + 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, + 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, + 0x45, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, + 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x61, + 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, + 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0xe4, 0x02, + 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, + 0x49, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, + 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x65, + 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, + 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, + 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, + 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, + 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x69, + 0x00, 0x00, 0x80, 0x04, 0xe5, 0x02, 0x00, 0x00, + 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, + 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, + 0x51, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, + 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x6d, + 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, + 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, + 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, + 0xe6, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, + 0x80, 0x04, 0xe7, 0x02, 0x00, 0x00, 0x4d, 0x71, + 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, + 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, + 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, + 0xe8, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, + 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x75, + 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, + 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, + 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, + 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, + 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x79, + 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, + 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0xe9, 0x02, + 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, + 0x61, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, + 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x7d, + 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, + 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0xea, 0x02, + 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, + 0x65, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, + 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x81, + 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, + 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, + 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, + 0x69, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, + 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x85, + 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, + 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0xeb, 0x02, + 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, + 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, + 0x80, 0x04, 0xec, 0x02, 0x00, 0x00, 0x4d, 0x89, + 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, + 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, + 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, + 0x71, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, + 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0x8d, + 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, + 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, + 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, + 0x75, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, + 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0x91, + 0x00, 0x00, 0x80, 0x04, 0xed, 0x02, 0x00, 0x00, + 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, + 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, + 0x79, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, + 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x95, + 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, + 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0xee, 0x02, + 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, + 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, + 0x80, 0x04, 0xef, 0x02, 0x00, 0x00, 0x4d, 0x99, + 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, + 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, + 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, + 0xf0, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, + 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0x9d, + 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, + 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, + 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, + 0x85, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, + 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0xa1, + 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, + 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, + 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, + 0x89, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, + 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0xa5, + 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, + 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, + 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, + 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, + 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xa9, + 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, + 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, + 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, + 0x91, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, + 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0xad, + 0x00, 0x00, 0x80, 0x04, 0xf1, 0x02, 0x00, 0x00, + 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, + 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, + 0x95, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, + 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0xb1, + 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, + 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, + 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, + 0x99, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, + 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xb5, + 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, + 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, + 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, + 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, + 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xb9, + 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, + 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, + 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, + 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, + 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xbd, + 0x00, 0x00, 0x80, 0x04, 0xf2, 0x02, 0x00, 0x00, + 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, + 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, + 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, + 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xc1, + 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, + 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, + 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, + 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, + 0x80, 0x04, 0xf3, 0x02, 0x00, 0x00, 0x4d, 0xc5, + 0x00, 0x00, 0x80, 0x04, 0xf4, 0x02, 0x00, 0x00, + 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, + 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, + 0xad, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, + 0x80, 0x04, 0xf5, 0x02, 0x00, 0x00, 0x4d, 0xc9, + 0x00, 0x00, 0x80, 0x04, 0xf6, 0x02, 0x00, 0x00, + 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, + 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, + 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, + 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xcd, + 0x00, 0x00, 0x80, 0x04, 0xf7, 0x02, 0x00, 0x00, + 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, + 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, + 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, + 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xd1, + 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, + 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, + 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, + 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, + 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0xd5, + 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, + 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xf8, 0x02, + 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, + 0xf9, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xd9, + 0x00, 0x00, 0x80, 0x04, 0xfa, 0x02, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, + 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, + 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, + 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, + 0xfb, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, + 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, 0xe5, + 0x00, 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, + 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, + 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, + 0xfc, 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, + 0x80, 0x04, 0xfd, 0x02, 0x00, 0x00, 0x4d, 0xe9, + 0x00, 0x00, 0x80, 0x04, 0xfe, 0x02, 0x00, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0xff, 0x02, + 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x78, 0x01, 0x00, 0x00, 0x4d, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, + 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x7d, 0xbe, 0x7e, 0xbe, 0x7f, + 0xbe, 0x80, 0xbe, 0x81, 0xbe, 0x82, 0xbe, 0x83, + 0xbe, 0x84, 0xbe, 0x85, 0xbe, 0x86, 0xbe, 0x87, + 0xbe, 0x88, 0x26, 0x0c, 0x00, 0x4d, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x00, 0x03, 0x00, 0x00, 0x04, + 0x01, 0x03, 0x00, 0x00, 0x04, 0x02, 0x03, 0x00, + 0x00, 0x04, 0x03, 0x03, 0x00, 0x00, 0x04, 0x04, + 0x03, 0x00, 0x00, 0x04, 0x05, 0x03, 0x00, 0x00, + 0x04, 0x06, 0x03, 0x00, 0x00, 0x04, 0x07, 0x03, + 0x00, 0x00, 0x04, 0x08, 0x03, 0x00, 0x00, 0x04, + 0x09, 0x03, 0x00, 0x00, 0x04, 0x0a, 0x03, 0x00, + 0x00, 0x04, 0x0b, 0x03, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x03, 0x00, 0x00, 0x04, 0x01, 0x03, 0x00, 0x00, + 0x04, 0x02, 0x03, 0x00, 0x00, 0x04, 0x03, 0x03, + 0x00, 0x00, 0x04, 0x04, 0x03, 0x00, 0x00, 0x04, + 0x05, 0x03, 0x00, 0x00, 0x04, 0x06, 0x03, 0x00, + 0x00, 0x04, 0x07, 0x03, 0x00, 0x00, 0x04, 0x08, + 0x03, 0x00, 0x00, 0x04, 0x09, 0x03, 0x00, 0x00, + 0x04, 0x0a, 0x03, 0x00, 0x00, 0x04, 0x0b, 0x03, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x65, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x14, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x0c, 0x03, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x0c, 0x03, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x0c, 0x03, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x77, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, + 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x65, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x75, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x0d, 0x03, + 0x00, 0x00, 0x04, 0x0e, 0x03, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x0d, 0x03, 0x00, 0x00, 0x04, 0x0e, 0x03, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x0d, 0x03, 0x00, 0x00, 0x04, 0x0e, + 0x03, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, + 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x4d, + 0x0f, 0x03, 0x00, 0x00, 0x4d, 0x10, 0x03, 0x00, + 0x00, 0x0b, 0x04, 0x11, 0x03, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x12, 0x03, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x13, 0x03, 0x00, 0x00, 0x4d, 0x14, + 0x03, 0x00, 0x00, 0x04, 0x15, 0x03, 0x00, 0x00, + 0x4d, 0x16, 0x03, 0x00, 0x00, 0x4d, 0x17, 0x03, + 0x00, 0x00, 0x0b, 0x04, 0x18, 0x03, 0x00, 0x00, + 0x4d, 0x14, 0x03, 0x00, 0x00, 0x04, 0x19, 0x03, + 0x00, 0x00, 0x4d, 0x16, 0x03, 0x00, 0x00, 0x4d, + 0x1a, 0x03, 0x00, 0x00, 0x0b, 0x04, 0x1b, 0x03, + 0x00, 0x00, 0x4d, 0x14, 0x03, 0x00, 0x00, 0x04, + 0x1c, 0x03, 0x00, 0x00, 0x4d, 0x16, 0x03, 0x00, + 0x00, 0x4d, 0x1d, 0x03, 0x00, 0x00, 0x4d, 0x1e, + 0x03, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x1f, 0x03, + 0x00, 0x00, 0x4d, 0x17, 0x03, 0x00, 0x00, 0x04, + 0x20, 0x03, 0x00, 0x00, 0x4d, 0x21, 0x03, 0x00, + 0x00, 0x04, 0x22, 0x03, 0x00, 0x00, 0x4d, 0x23, + 0x03, 0x00, 0x00, 0x04, 0x24, 0x03, 0x00, 0x00, + 0x4d, 0x25, 0x03, 0x00, 0x00, 0x04, 0x26, 0x03, + 0x00, 0x00, 0x4d, 0x27, 0x03, 0x00, 0x00, 0x04, + 0x28, 0x03, 0x00, 0x00, 0x4d, 0x29, 0x03, 0x00, + 0x00, 0x04, 0x2a, 0x03, 0x00, 0x00, 0x4d, 0x2b, + 0x03, 0x00, 0x00, 0x4d, 0x11, 0x03, 0x00, 0x00, + 0x4d, 0x2c, 0x03, 0x00, 0x00, 0x0b, 0x04, 0x2d, + 0x03, 0x00, 0x00, 0x4d, 0x2e, 0x03, 0x00, 0x00, + 0x04, 0x2f, 0x03, 0x00, 0x00, 0x4d, 0x30, 0x03, + 0x00, 0x00, 0x04, 0x31, 0x03, 0x00, 0x00, 0x4d, + 0x32, 0x03, 0x00, 0x00, 0x04, 0x33, 0x03, 0x00, + 0x00, 0x4d, 0x34, 0x03, 0x00, 0x00, 0x04, 0x35, + 0x03, 0x00, 0x00, 0x4d, 0x36, 0x03, 0x00, 0x00, + 0x04, 0x37, 0x03, 0x00, 0x00, 0x4d, 0x38, 0x03, + 0x00, 0x00, 0x04, 0x39, 0x03, 0x00, 0x00, 0x4d, + 0x3a, 0x03, 0x00, 0x00, 0x04, 0x3b, 0x03, 0x00, + 0x00, 0x4d, 0x3c, 0x03, 0x00, 0x00, 0x04, 0x3d, + 0x03, 0x00, 0x00, 0x4d, 0x3e, 0x03, 0x00, 0x00, + 0x04, 0x3f, 0x03, 0x00, 0x00, 0x4d, 0x40, 0x03, + 0x00, 0x00, 0x04, 0x41, 0x03, 0x00, 0x00, 0x4d, + 0x42, 0x03, 0x00, 0x00, 0x04, 0x43, 0x03, 0x00, + 0x00, 0x4d, 0x44, 0x03, 0x00, 0x00, 0x04, 0x45, + 0x03, 0x00, 0x00, 0x4d, 0x46, 0x03, 0x00, 0x00, + 0x04, 0x47, 0x03, 0x00, 0x00, 0x4d, 0x48, 0x03, + 0x00, 0x00, 0x04, 0x49, 0x03, 0x00, 0x00, 0x4d, + 0x4a, 0x03, 0x00, 0x00, 0x04, 0x4b, 0x03, 0x00, + 0x00, 0x4d, 0x4c, 0x03, 0x00, 0x00, 0x04, 0x4d, + 0x03, 0x00, 0x00, 0x4d, 0x4e, 0x03, 0x00, 0x00, + 0x04, 0x4f, 0x03, 0x00, 0x00, 0x4d, 0x50, 0x03, + 0x00, 0x00, 0x04, 0x51, 0x03, 0x00, 0x00, 0x4d, + 0x52, 0x03, 0x00, 0x00, 0x04, 0x53, 0x03, 0x00, + 0x00, 0x4d, 0x54, 0x03, 0x00, 0x00, 0x04, 0x55, + 0x03, 0x00, 0x00, 0x4d, 0x56, 0x03, 0x00, 0x00, + 0x04, 0x57, 0x03, 0x00, 0x00, 0x4d, 0x58, 0x03, + 0x00, 0x00, 0x4d, 0x59, 0x03, 0x00, 0x00, 0x4d, + 0x45, 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, 0xcc, + 0x28, 0xb4, 0x0d, 0x01, 0x00, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, + 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_sw_size = 24699; + +const uint8_t intl_sw[24699] = { + 0x01, 0xd2, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x73, 0x77, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x0e, + 0x7b, 0x31, 0x7d, 0x20, 0x7b, 0x30, 0x7d, 0x0a, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, 0x65, + 0x64, 0x69, 0x75, 0x6d, 0x08, 0x66, 0x75, 0x6c, + 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x02, 0x64, + 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, 0x06, 0x45, + 0x20, 0x64, 0x04, 0x45, 0x64, 0x10, 0x45, 0x20, + 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x06, 0x45, + 0x68, 0x6d, 0x0e, 0x45, 0x20, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x06, 0x45, 0x48, 0x6d, 0x16, 0x45, + 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x61, 0x08, 0x45, 0x68, 0x6d, 0x73, 0x14, + 0x45, 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x08, 0x45, 0x48, 0x6d, 0x73, 0x06, + 0x79, 0x20, 0x47, 0x04, 0x47, 0x79, 0x0e, 0x4d, + 0x4d, 0x4d, 0x20, 0x79, 0x20, 0x47, 0x0a, 0x47, + 0x79, 0x4d, 0x4d, 0x4d, 0x12, 0x64, 0x20, 0x4d, + 0x4d, 0x4d, 0x20, 0x79, 0x20, 0x47, 0x0c, 0x47, + 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x1a, 0x45, 0x2c, + 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x2c, 0x20, + 0x79, 0x20, 0x47, 0x0e, 0x47, 0x79, 0x4d, 0x4d, + 0x4d, 0x45, 0x64, 0x06, 0x68, 0x20, 0x61, 0x02, + 0x68, 0x04, 0x48, 0x48, 0x02, 0x48, 0x0c, 0x68, + 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x04, 0x68, 0x6d, + 0x0a, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x04, 0x48, + 0x6d, 0x12, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x61, 0x06, 0x68, 0x6d, 0x73, 0x10, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x06, 0x48, 0x6d, 0x73, 0x16, 0x68, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x20, 0x76, + 0x08, 0x68, 0x6d, 0x73, 0x76, 0x14, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x76, + 0x08, 0x48, 0x6d, 0x73, 0x76, 0x10, 0x68, 0x3a, + 0x6d, 0x6d, 0x20, 0x61, 0x20, 0x76, 0x06, 0x68, + 0x6d, 0x76, 0x0e, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x20, 0x76, 0x06, 0x48, 0x6d, 0x76, 0x02, 0x4c, + 0x02, 0x4d, 0x06, 0x64, 0x2f, 0x4d, 0x04, 0x4d, + 0x64, 0x0c, 0x45, 0x2c, 0x20, 0x64, 0x2f, 0x4d, + 0x06, 0x4d, 0x45, 0x64, 0x06, 0x4c, 0x4c, 0x4c, + 0x06, 0x4d, 0x4d, 0x4d, 0x0a, 0x64, 0x20, 0x4d, + 0x4d, 0x4d, 0x08, 0x4d, 0x4d, 0x4d, 0x64, 0x10, + 0x45, 0x2c, 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, + 0x0a, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0c, 0x64, + 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, + 0x4d, 0x4d, 0x64, 0x12, 0x45, 0x2c, 0x20, 0x64, + 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x0c, 0x4d, 0x4d, + 0x4d, 0x4d, 0x45, 0x64, 0x0a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x04, 0x6d, 0x73, 0x02, 0x79, 0x06, + 0x4d, 0x2f, 0x79, 0x04, 0x79, 0x4d, 0x0a, 0x64, + 0x2f, 0x4d, 0x2f, 0x79, 0x06, 0x79, 0x4d, 0x64, + 0x10, 0x45, 0x2c, 0x20, 0x64, 0x2f, 0x4d, 0x2f, + 0x79, 0x08, 0x79, 0x4d, 0x45, 0x64, 0x0a, 0x4d, + 0x4d, 0x4d, 0x20, 0x79, 0x08, 0x79, 0x4d, 0x4d, + 0x4d, 0x0e, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x20, + 0x79, 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x16, + 0x45, 0x2c, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x64, + 0x2c, 0x20, 0x79, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, + 0x45, 0x64, 0x0c, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, + 0x79, 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, + 0x79, 0x20, 0x51, 0x51, 0x51, 0x08, 0x79, 0x51, + 0x51, 0x51, 0x0c, 0x51, 0x51, 0x51, 0x51, 0x20, + 0x79, 0x0a, 0x79, 0x51, 0x51, 0x51, 0x51, 0x20, + 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, + 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, + 0x1c, 0x45, 0x45, 0x45, 0x45, 0x2c, 0x20, 0x64, + 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x14, + 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x45, 0x45, 0x45, + 0x45, 0x64, 0x10, 0x64, 0x20, 0x4d, 0x4d, 0x4d, + 0x4d, 0x20, 0x79, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, + 0x4d, 0x64, 0x0e, 0x64, 0x64, 0x2f, 0x4d, 0x4d, + 0x2f, 0x79, 0x16, 0x64, 0x61, 0x74, 0x65, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x1a, 0x48, + 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, + 0x7a, 0x7a, 0x7a, 0x7a, 0x12, 0x68, 0x6d, 0x6d, + 0x73, 0x73, 0x7a, 0x7a, 0x7a, 0x7a, 0x14, 0x48, + 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, + 0x7a, 0x08, 0x68, 0x6d, 0x73, 0x7a, 0x16, 0x74, + 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x73, 0x0e, 0x66, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x73, 0x02, 0x4a, 0x02, 0x46, 0x02, 0x41, + 0x02, 0x53, 0x02, 0x4f, 0x02, 0x4e, 0x02, 0x44, + 0x0c, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x06, + 0x4a, 0x61, 0x6e, 0x06, 0x46, 0x65, 0x62, 0x06, + 0x4d, 0x61, 0x63, 0x06, 0x41, 0x70, 0x72, 0x06, + 0x4d, 0x65, 0x69, 0x06, 0x4a, 0x75, 0x6e, 0x06, + 0x4a, 0x75, 0x6c, 0x06, 0x41, 0x67, 0x6f, 0x06, + 0x53, 0x65, 0x70, 0x06, 0x4f, 0x6b, 0x74, 0x06, + 0x4e, 0x6f, 0x76, 0x06, 0x44, 0x65, 0x73, 0x0e, + 0x4a, 0x61, 0x6e, 0x75, 0x61, 0x72, 0x69, 0x10, + 0x46, 0x65, 0x62, 0x72, 0x75, 0x61, 0x72, 0x69, + 0x0a, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x0c, 0x41, + 0x70, 0x72, 0x69, 0x6c, 0x69, 0x08, 0x4a, 0x75, + 0x6e, 0x69, 0x0a, 0x4a, 0x75, 0x6c, 0x61, 0x69, + 0x0c, 0x41, 0x67, 0x6f, 0x73, 0x74, 0x69, 0x10, + 0x53, 0x65, 0x70, 0x74, 0x65, 0x6d, 0x62, 0x61, + 0x0c, 0x4f, 0x6b, 0x74, 0x6f, 0x62, 0x61, 0x0e, + 0x4e, 0x6f, 0x76, 0x65, 0x6d, 0x62, 0x61, 0x0e, + 0x44, 0x65, 0x73, 0x65, 0x6d, 0x62, 0x61, 0x0c, + 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x73, 0x02, 0x54, + 0x02, 0x57, 0x10, 0x4a, 0x75, 0x6d, 0x61, 0x70, + 0x69, 0x6c, 0x69, 0x10, 0x4a, 0x75, 0x6d, 0x61, + 0x74, 0x61, 0x74, 0x75, 0x0e, 0x4a, 0x75, 0x6d, + 0x61, 0x6e, 0x6e, 0x65, 0x10, 0x4a, 0x75, 0x6d, + 0x61, 0x74, 0x61, 0x6e, 0x6f, 0x10, 0x41, 0x6c, + 0x68, 0x61, 0x6d, 0x69, 0x73, 0x69, 0x0c, 0x49, + 0x6a, 0x75, 0x6d, 0x61, 0x61, 0x10, 0x4a, 0x75, + 0x6d, 0x61, 0x6d, 0x6f, 0x73, 0x69, 0x08, 0x64, + 0x61, 0x79, 0x73, 0x04, 0x42, 0x45, 0x08, 0x65, + 0x72, 0x61, 0x73, 0x04, 0x41, 0x4d, 0x04, 0x61, + 0x6d, 0x04, 0x50, 0x4d, 0x04, 0x70, 0x6d, 0x14, + 0x64, 0x61, 0x79, 0x50, 0x65, 0x72, 0x69, 0x6f, + 0x64, 0x73, 0x06, 0x4d, 0x30, 0x31, 0x06, 0x4d, + 0x30, 0x32, 0x06, 0x4d, 0x30, 0x33, 0x06, 0x4d, + 0x30, 0x34, 0x06, 0x4d, 0x30, 0x35, 0x06, 0x4d, + 0x30, 0x36, 0x06, 0x4d, 0x30, 0x37, 0x06, 0x4d, + 0x30, 0x38, 0x06, 0x4d, 0x30, 0x39, 0x06, 0x4d, + 0x31, 0x30, 0x06, 0x4d, 0x31, 0x31, 0x06, 0x4d, + 0x31, 0x32, 0x08, 0x54, 0x6f, 0x75, 0x74, 0x08, + 0x42, 0x61, 0x62, 0x61, 0x0a, 0x48, 0x61, 0x74, + 0x6f, 0x72, 0x0a, 0x4b, 0x69, 0x61, 0x68, 0x6b, + 0x08, 0x54, 0x6f, 0x62, 0x61, 0x0c, 0x41, 0x6d, + 0x73, 0x68, 0x69, 0x72, 0x10, 0x42, 0x61, 0x72, + 0x61, 0x6d, 0x68, 0x61, 0x74, 0x12, 0x42, 0x61, + 0x72, 0x61, 0x6d, 0x6f, 0x75, 0x64, 0x61, 0x0e, + 0x42, 0x61, 0x73, 0x68, 0x61, 0x6e, 0x73, 0x0a, + 0x50, 0x61, 0x6f, 0x6e, 0x61, 0x08, 0x45, 0x70, + 0x65, 0x70, 0x0a, 0x4d, 0x65, 0x73, 0x72, 0x61, + 0x0a, 0x4e, 0x61, 0x73, 0x69, 0x65, 0x08, 0x45, + 0x52, 0x41, 0x30, 0x08, 0x45, 0x52, 0x41, 0x31, + 0x10, 0x4d, 0x65, 0x73, 0x6b, 0x65, 0x72, 0x65, + 0x6d, 0x0c, 0x54, 0x65, 0x6b, 0x65, 0x6d, 0x74, + 0x0a, 0x48, 0x65, 0x64, 0x61, 0x72, 0x0c, 0x54, + 0x61, 0x68, 0x73, 0x61, 0x73, 0x06, 0x54, 0x65, + 0x72, 0x0e, 0x59, 0x65, 0x6b, 0x61, 0x74, 0x69, + 0x74, 0x0e, 0x4d, 0x65, 0x67, 0x61, 0x62, 0x69, + 0x74, 0x0c, 0x4d, 0x69, 0x61, 0x7a, 0x69, 0x61, + 0x0c, 0x47, 0x65, 0x6e, 0x62, 0x6f, 0x74, 0x08, + 0x53, 0x65, 0x6e, 0x65, 0x0a, 0x48, 0x61, 0x6d, + 0x6c, 0x65, 0x0e, 0x4e, 0x65, 0x68, 0x61, 0x73, + 0x73, 0x65, 0x0e, 0x50, 0x61, 0x67, 0x75, 0x6d, + 0x65, 0x6e, 0x04, 0x42, 0x43, 0x04, 0x41, 0x44, + 0x06, 0x42, 0x43, 0x45, 0x04, 0x43, 0x45, 0x1e, + 0x4b, 0x61, 0x62, 0x6c, 0x61, 0x20, 0x79, 0x61, + 0x20, 0x4b, 0x72, 0x69, 0x73, 0x74, 0x6f, 0x1e, + 0x42, 0x61, 0x61, 0x64, 0x61, 0x20, 0x79, 0x61, + 0x20, 0x4b, 0x72, 0x69, 0x73, 0x74, 0x6f, 0x0c, + 0x54, 0x69, 0x73, 0x68, 0x72, 0x69, 0x0e, 0x48, + 0x65, 0x73, 0x68, 0x76, 0x61, 0x6e, 0x0c, 0x4b, + 0x69, 0x73, 0x6c, 0x65, 0x76, 0x0a, 0x54, 0x65, + 0x76, 0x65, 0x74, 0x0c, 0x53, 0x68, 0x65, 0x76, + 0x61, 0x74, 0x0c, 0x41, 0x64, 0x61, 0x72, 0x20, + 0x49, 0x08, 0x41, 0x64, 0x61, 0x72, 0x0a, 0x4e, + 0x69, 0x73, 0x61, 0x6e, 0x08, 0x49, 0x79, 0x61, + 0x72, 0x0a, 0x53, 0x69, 0x76, 0x61, 0x6e, 0x0a, + 0x54, 0x61, 0x6d, 0x75, 0x7a, 0x04, 0x41, 0x76, + 0x08, 0x45, 0x6c, 0x75, 0x6c, 0x0e, 0x41, 0x64, + 0x61, 0x72, 0x20, 0x49, 0x49, 0x0e, 0x43, 0x68, + 0x61, 0x69, 0x74, 0x72, 0x61, 0x10, 0x56, 0x61, + 0x69, 0x73, 0x61, 0x6b, 0x68, 0x61, 0x10, 0x4a, + 0x79, 0x61, 0x69, 0x73, 0x74, 0x68, 0x61, 0x0c, + 0x41, 0x73, 0x61, 0x64, 0x68, 0x61, 0x0e, 0x53, + 0x72, 0x61, 0x76, 0x61, 0x6e, 0x61, 0x0c, 0x42, + 0x68, 0x61, 0x64, 0x72, 0x61, 0x0c, 0x41, 0x73, + 0x76, 0x69, 0x6e, 0x61, 0x0e, 0x4b, 0x61, 0x72, + 0x74, 0x69, 0x6b, 0x61, 0x14, 0x41, 0x67, 0x72, + 0x61, 0x68, 0x61, 0x79, 0x61, 0x6e, 0x61, 0x0a, + 0x50, 0x61, 0x75, 0x73, 0x61, 0x0a, 0x4d, 0x61, + 0x67, 0x68, 0x61, 0x10, 0x50, 0x68, 0x61, 0x6c, + 0x67, 0x75, 0x6e, 0x61, 0x08, 0x53, 0x61, 0x6b, + 0x61, 0x08, 0x4d, 0x75, 0x68, 0x2e, 0x08, 0x53, + 0x61, 0x66, 0x2e, 0x0c, 0x52, 0x61, 0x62, 0x2e, + 0x20, 0x49, 0x0e, 0x52, 0x61, 0x62, 0x2e, 0x20, + 0x49, 0x49, 0x0c, 0x4a, 0x75, 0x6d, 0x2e, 0x20, + 0x49, 0x0e, 0x4a, 0x75, 0x6d, 0x2e, 0x20, 0x49, + 0x49, 0x08, 0x52, 0x61, 0x6a, 0x2e, 0x08, 0x53, + 0x68, 0x61, 0x2e, 0x08, 0x52, 0x61, 0x6d, 0x2e, + 0x0a, 0x53, 0x68, 0x61, 0x77, 0x2e, 0x11, 0x44, + 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, + 0x00, 0x2d, 0x00, 0x51, 0x00, 0x2e, 0x00, 0x11, + 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, + 0x6c, 0x00, 0x2d, 0x00, 0x48, 0x00, 0x2e, 0x00, + 0x10, 0x4d, 0x75, 0x68, 0x61, 0x72, 0x72, 0x61, + 0x6d, 0x0a, 0x53, 0x61, 0x66, 0x61, 0x72, 0x0f, + 0x52, 0x00, 0x61, 0x00, 0x62, 0x00, 0x69, 0x00, + 0xbb, 0x02, 0x20, 0x00, 0x49, 0x00, 0x11, 0x52, + 0x00, 0x61, 0x00, 0x62, 0x00, 0x69, 0x00, 0xbb, + 0x02, 0x20, 0x00, 0x49, 0x00, 0x49, 0x00, 0x10, + 0x4a, 0x75, 0x6d, 0x61, 0x64, 0x61, 0x20, 0x49, + 0x12, 0x4a, 0x75, 0x6d, 0x61, 0x64, 0x61, 0x20, + 0x49, 0x49, 0x0a, 0x52, 0x61, 0x6a, 0x61, 0x62, + 0x0f, 0x53, 0x00, 0x68, 0x00, 0x61, 0x00, 0xbb, + 0x02, 0x62, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x0e, + 0x52, 0x61, 0x6d, 0x61, 0x64, 0x61, 0x6e, 0x0e, + 0x53, 0x68, 0x61, 0x77, 0x77, 0x61, 0x6c, 0x19, + 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, + 0x6c, 0x00, 0x2d, 0x00, 0x51, 0x00, 0x69, 0x00, + 0xbb, 0x02, 0x64, 0x00, 0x61, 0x00, 0x68, 0x00, + 0x19, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, + 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x48, 0x00, 0x69, + 0x00, 0x6a, 0x00, 0x6a, 0x00, 0x61, 0x00, 0x68, + 0x00, 0x04, 0x41, 0x48, 0x1f, 0x54, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x36, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x36, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x13, 0x20, 0x36, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x36, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x29, 0x00, 0x21, + 0x53, 0x00, 0x68, 0x00, 0x75, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x57, + 0x00, 0x61, 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x1f, 0x52, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x1d, 0x59, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, + 0x4a, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6b, 0x00, + 0x61, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x2d, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x2d, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x2b, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x2d, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, 0x2d, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x2a, 0x4a, 0x69, 0x6e, 0x67, 0x6f, 0x2d, + 0x6b, 0x65, 0x69, 0x75, 0x6e, 0x20, 0x28, 0x37, + 0x36, 0x37, 0x2d, 0x37, 0x37, 0x30, 0x29, 0x1d, + 0x48, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x37, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, 0x44, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x64, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x38, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x4d, 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x38, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4a, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x61, 0x00, 0x6a, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, + 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x53, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x20, 0x54, 0x65, + 0x6e, 0x2d, 0x61, 0x6e, 0x20, 0x28, 0x38, 0x35, + 0x37, 0x2d, 0x38, 0x35, 0x39, 0x29, 0x1f, 0x4a, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, + 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, 0x6e, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x34, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1b, 0x4c, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4b, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x1d, 0x41, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1d, + 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x4a, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x29, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, + 0x4a, 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x29, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, + 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4c, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x25, 0x4a, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x24, 0x54, 0x65, 0x6e, 0x2d, 0x65, 0x69, + 0x20, 0x28, 0x31, 0x31, 0x31, 0x30, 0x2d, 0x31, + 0x31, 0x31, 0x33, 0x29, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, + 0x4d, 0x01, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, + 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x6a, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x48, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x45, + 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, + 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6d, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4a, + 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x59, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x21, 0x4a, 0x00, 0x75, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x29, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4a, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x29, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, + 0x4a, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x27, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x75, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x29, 0x52, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x4e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, + 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, 0x00, + 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1f, 0x4c, 0x01, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x74, 0x00, 0x73, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x27, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x45, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x21, 0x4d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, 0x69, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x27, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x21, 0x45, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x61, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x41, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, 0x0a, + 0x4d, 0x65, 0x69, 0x6a, 0x69, 0x0d, 0x54, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x0b, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x0c, 0x48, 0x65, + 0x69, 0x73, 0x65, 0x69, 0x12, 0x46, 0x61, 0x72, + 0x76, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x16, 0x4f, + 0x72, 0x64, 0x69, 0x62, 0x65, 0x68, 0x65, 0x73, + 0x68, 0x74, 0x0e, 0x4b, 0x68, 0x6f, 0x72, 0x64, + 0x61, 0x64, 0x06, 0x54, 0x69, 0x72, 0x0c, 0x4d, + 0x6f, 0x72, 0x64, 0x61, 0x64, 0x12, 0x53, 0x68, + 0x61, 0x68, 0x72, 0x69, 0x76, 0x61, 0x72, 0x08, + 0x4d, 0x65, 0x68, 0x72, 0x08, 0x41, 0x62, 0x61, + 0x6e, 0x08, 0x41, 0x7a, 0x61, 0x72, 0x06, 0x44, + 0x65, 0x79, 0x0c, 0x42, 0x61, 0x68, 0x6d, 0x61, + 0x6e, 0x0c, 0x45, 0x73, 0x66, 0x61, 0x6e, 0x64, + 0x04, 0x41, 0x50, 0x1a, 0x42, 0x65, 0x66, 0x6f, + 0x72, 0x65, 0x20, 0x52, 0x2e, 0x4f, 0x2e, 0x43, + 0x2e, 0x0c, 0x52, 0x2e, 0x4f, 0x2e, 0x43, 0x2e, + 0x12, 0x63, 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, + 0x72, 0x73, 0x08, 0x64, 0x61, 0x74, 0x65, 0x08, + 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, 0x75, 0x10, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0x1e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, + 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, + 0x26, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x6e, 0x65, 0x67, + 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, + 0x74, 0x65, 0x72, 0x6e, 0x0e, 0x64, 0x65, 0x63, + 0x69, 0x6d, 0x61, 0x6c, 0x24, 0x7b, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x3a, + 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, + 0x67, 0x6e, 0x7d, 0x7b, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x63, 0x79, 0x7d, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x10, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x2a, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x7b, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x40, 0x7b, 0x6d, 0x69, + 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x0e, 0x70, 0x65, + 0x72, 0x63, 0x65, 0x6e, 0x74, 0x10, 0x70, 0x61, + 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x02, 0x2e, + 0x02, 0x2c, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x06, 0x4e, 0x61, 0x4e, 0x06, 0x6e, 0x61, 0x6e, + 0x02, 0x2b, 0x10, 0x70, 0x6c, 0x75, 0x73, 0x53, + 0x69, 0x67, 0x6e, 0x02, 0x2d, 0x12, 0x6d, 0x69, + 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, + 0x25, 0x16, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, + 0x74, 0x53, 0x69, 0x67, 0x6e, 0x03, 0x1e, 0x22, + 0x10, 0x69, 0x6e, 0x66, 0x69, 0x6e, 0x69, 0x74, + 0x79, 0x0e, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, + 0x73, 0x04, 0x41, 0x24, 0x06, 0x41, 0x55, 0x44, + 0x04, 0x52, 0x24, 0x06, 0x42, 0x52, 0x4c, 0x06, + 0x43, 0x41, 0x24, 0x06, 0x43, 0x41, 0x44, 0x06, + 0x43, 0x4e, 0xa5, 0x06, 0x43, 0x4e, 0x59, 0x03, + 0xac, 0x20, 0x06, 0x45, 0x55, 0x52, 0x02, 0xa3, + 0x06, 0x47, 0x42, 0x50, 0x06, 0x48, 0x4b, 0x24, + 0x06, 0x48, 0x4b, 0x44, 0x03, 0xaa, 0x20, 0x06, + 0x49, 0x4c, 0x53, 0x03, 0xb9, 0x20, 0x06, 0x49, + 0x4e, 0x52, 0x06, 0x4a, 0x50, 0xa5, 0x06, 0x4a, + 0x50, 0x59, 0x06, 0x4b, 0x73, 0x68, 0x06, 0x4b, + 0x45, 0x53, 0x03, 0xa9, 0x20, 0x06, 0x4b, 0x52, + 0x57, 0x06, 0x4d, 0x58, 0x24, 0x06, 0x4d, 0x58, + 0x4e, 0x06, 0x4e, 0x5a, 0x24, 0x06, 0x4e, 0x5a, + 0x44, 0x03, 0x3f, 0x0e, 0x06, 0x54, 0x48, 0x42, + 0x06, 0x4e, 0x54, 0x24, 0x06, 0x54, 0x57, 0x44, + 0x06, 0x54, 0x53, 0x68, 0x06, 0x54, 0x5a, 0x53, + 0x06, 0x55, 0x53, 0x24, 0x06, 0x55, 0x53, 0x44, + 0x03, 0xab, 0x20, 0x06, 0x56, 0x4e, 0x44, 0x08, + 0x46, 0x43, 0x46, 0x41, 0x06, 0x58, 0x41, 0x46, + 0x06, 0x45, 0x43, 0x24, 0x06, 0x58, 0x43, 0x44, + 0x06, 0x43, 0x46, 0x41, 0x06, 0x58, 0x4f, 0x46, + 0x08, 0x43, 0x46, 0x50, 0x46, 0x06, 0x58, 0x50, + 0x46, 0x14, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x69, 0x65, 0x73, 0x52, 0x6e, 0x6f, 0x64, + 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, + 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2f, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, + 0x74, 0x61, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x70, + 0x2f, 0x73, 0x77, 0x2e, 0x6a, 0x73, 0x0d, 0x00, + 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, 0x27, + 0x00, 0x89, 0x01, 0xfc, 0x6a, 0x01, 0xa0, 0x01, + 0x00, 0x00, 0x00, 0x39, 0xd0, 0x00, 0x00, 0x00, + 0x43, 0xd1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd2, + 0x00, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xd4, 0x00, 0x00, 0x00, 0x04, 0xd5, + 0x00, 0x00, 0x00, 0x04, 0xd6, 0x00, 0x00, 0x00, + 0x04, 0xd7, 0x00, 0x00, 0x00, 0x04, 0xd8, 0x00, + 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x04, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xdb, 0x00, 0x00, + 0x00, 0x04, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xdd, + 0x00, 0x00, 0x00, 0x04, 0xde, 0x00, 0x00, 0x00, + 0x04, 0xdf, 0x00, 0x00, 0x00, 0x04, 0xe0, 0x00, + 0x00, 0x00, 0x04, 0xe1, 0x00, 0x00, 0x00, 0x04, + 0xe2, 0x00, 0x00, 0x00, 0x26, 0x0f, 0x00, 0x4d, + 0xe3, 0x00, 0x00, 0x00, 0x0a, 0x4d, 0xe4, 0x00, + 0x00, 0x00, 0x09, 0x4d, 0xe5, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x00, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x04, 0xec, 0x00, 0x00, + 0x00, 0x4d, 0xed, 0x00, 0x00, 0x00, 0x04, 0xee, + 0x00, 0x00, 0x00, 0x4d, 0xef, 0x00, 0x00, 0x00, + 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, 0xf1, 0x00, + 0x00, 0x00, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, + 0xf3, 0x00, 0x00, 0x00, 0x04, 0xf4, 0x00, 0x00, + 0x00, 0x4d, 0xf5, 0x00, 0x00, 0x00, 0x04, 0xf6, + 0x00, 0x00, 0x00, 0x4d, 0xf7, 0x00, 0x00, 0x00, + 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, 0xf9, 0x00, + 0x00, 0x00, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, + 0xfb, 0x00, 0x00, 0x00, 0x04, 0xfc, 0x00, 0x00, + 0x00, 0x4d, 0xfd, 0x00, 0x00, 0x00, 0x04, 0xfe, + 0x00, 0x00, 0x00, 0x4d, 0xff, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x01, + 0x00, 0x00, 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, + 0x03, 0x01, 0x00, 0x00, 0x04, 0x04, 0x01, 0x00, + 0x00, 0x4d, 0x05, 0x01, 0x00, 0x00, 0x04, 0x06, + 0x01, 0x00, 0x00, 0x4d, 0x07, 0x01, 0x00, 0x00, + 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, 0x09, 0x01, + 0x00, 0x00, 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, + 0x0b, 0x01, 0x00, 0x00, 0x04, 0x0c, 0x01, 0x00, + 0x00, 0x4d, 0x0d, 0x01, 0x00, 0x00, 0x04, 0x0e, + 0x01, 0x00, 0x00, 0x4d, 0x0f, 0x01, 0x00, 0x00, + 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, 0x11, 0x01, + 0x00, 0x00, 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, + 0x13, 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, + 0x00, 0x4d, 0x15, 0x01, 0x00, 0x00, 0x04, 0x16, + 0x01, 0x00, 0x00, 0x4d, 0x17, 0x01, 0x00, 0x00, + 0x04, 0x18, 0x01, 0x00, 0x00, 0x4d, 0x19, 0x01, + 0x00, 0x00, 0x04, 0x1a, 0x01, 0x00, 0x00, 0x4d, + 0x1b, 0x01, 0x00, 0x00, 0x04, 0x1c, 0x01, 0x00, + 0x00, 0x4d, 0x1d, 0x01, 0x00, 0x00, 0x04, 0x1e, + 0x01, 0x00, 0x00, 0x4d, 0x1f, 0x01, 0x00, 0x00, + 0x04, 0x20, 0x01, 0x00, 0x00, 0x4d, 0x21, 0x01, + 0x00, 0x00, 0x04, 0x22, 0x01, 0x00, 0x00, 0x4d, + 0x23, 0x01, 0x00, 0x00, 0x04, 0x24, 0x01, 0x00, + 0x00, 0x4d, 0x25, 0x01, 0x00, 0x00, 0x04, 0x26, + 0x01, 0x00, 0x00, 0x4d, 0x26, 0x01, 0x00, 0x00, + 0x04, 0x27, 0x01, 0x00, 0x00, 0x4d, 0x28, 0x01, + 0x00, 0x00, 0x04, 0x29, 0x01, 0x00, 0x00, 0x4d, + 0x2a, 0x01, 0x00, 0x00, 0x04, 0x2b, 0x01, 0x00, + 0x00, 0x4d, 0x2c, 0x01, 0x00, 0x00, 0x04, 0x2d, + 0x01, 0x00, 0x00, 0x4d, 0x2e, 0x01, 0x00, 0x00, + 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, 0x30, 0x01, + 0x00, 0x00, 0x04, 0x31, 0x01, 0x00, 0x00, 0x4d, + 0x32, 0x01, 0x00, 0x00, 0x04, 0x33, 0x01, 0x00, + 0x00, 0x4d, 0x34, 0x01, 0x00, 0x00, 0x04, 0x35, + 0x01, 0x00, 0x00, 0x4d, 0x36, 0x01, 0x00, 0x00, + 0x04, 0x37, 0x01, 0x00, 0x00, 0x4d, 0x38, 0x01, + 0x00, 0x00, 0x4d, 0x39, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x3a, 0x01, 0x00, 0x00, 0x4d, 0x3b, 0x01, + 0x00, 0x00, 0x04, 0x3c, 0x01, 0x00, 0x00, 0x4d, + 0x3d, 0x01, 0x00, 0x00, 0x04, 0x2f, 0x01, 0x00, + 0x00, 0x4d, 0x30, 0x01, 0x00, 0x00, 0x04, 0x3e, + 0x01, 0x00, 0x00, 0x4d, 0x2a, 0x01, 0x00, 0x00, + 0x4d, 0x3f, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x40, + 0x01, 0x00, 0x00, 0x4d, 0x41, 0x01, 0x00, 0x00, + 0x04, 0x42, 0x01, 0x00, 0x00, 0x4d, 0x43, 0x01, + 0x00, 0x00, 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, + 0x09, 0x01, 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, + 0x00, 0x4d, 0x05, 0x01, 0x00, 0x00, 0x4d, 0x44, + 0x01, 0x00, 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x0b, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, + 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x65, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6f, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x71, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x72, 0x01, 0x00, 0x00, 0x4d, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x4d, 0x75, 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x00, 0xbe, 0x01, 0xbe, 0x02, 0xbe, + 0x03, 0xbe, 0x04, 0xbe, 0x05, 0xbe, 0x06, 0xbe, + 0x07, 0xbe, 0x08, 0xbe, 0x09, 0xbe, 0x0a, 0xbe, + 0x0b, 0x26, 0x0c, 0x00, 0x4d, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, + 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, + 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x65, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x4d, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x4d, 0x75, 0x01, + 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x4d, + 0xd6, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x0c, + 0xbe, 0x0d, 0xbe, 0x0e, 0xbe, 0x0f, 0xbe, 0x10, + 0xbe, 0x11, 0xbe, 0x12, 0xbe, 0x13, 0xbe, 0x14, + 0xbe, 0x15, 0xbe, 0x16, 0xbe, 0x17, 0xbe, 0x18, + 0x26, 0x0d, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, + 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, + 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, + 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, + 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, + 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, + 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, + 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, + 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, + 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, + 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, + 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x65, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x49, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, + 0x04, 0x91, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x71, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x4d, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, 0x4d, + 0x76, 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x19, 0xbe, 0x1a, 0xbe, + 0x1b, 0xbe, 0x1c, 0xbe, 0x1d, 0xbe, 0x1e, 0xbe, + 0x1f, 0xbe, 0x20, 0xbe, 0x21, 0xbe, 0x22, 0xbe, + 0x23, 0xbe, 0x24, 0x26, 0x0c, 0x00, 0x4d, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, + 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, + 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x65, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x4d, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x4d, + 0x75, 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x25, 0xbe, 0x26, 0xbe, 0x27, 0xbe, 0x28, + 0xbe, 0x29, 0xbe, 0x2a, 0xbe, 0x2b, 0xbe, 0x2c, + 0xbe, 0x2d, 0xbe, 0x2e, 0xbe, 0x2f, 0xbe, 0x30, + 0xbe, 0x31, 0x26, 0x0d, 0x00, 0x4d, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, + 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, + 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, + 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, + 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, + 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, + 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, + 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, + 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, + 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, + 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, + 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, + 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, + 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, + 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, + 0x9e, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x65, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, + 0x04, 0x91, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x90, 0x01, + 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x71, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x4d, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, + 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x32, 0xbe, + 0x33, 0xbe, 0x34, 0xbe, 0x35, 0xbe, 0x36, 0xbe, + 0x37, 0xbe, 0x38, 0xbe, 0x39, 0xbe, 0x3a, 0xbe, + 0x3b, 0xbe, 0x3c, 0xbe, 0x3d, 0xbe, 0x3e, 0x26, + 0x0d, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, + 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, + 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, + 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, + 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, + 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, + 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, + 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, + 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, + 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, + 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, + 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, + 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, + 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, + 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x65, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x90, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x90, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x71, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x4d, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, 0x4d, + 0x76, 0x01, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x3f, 0xbe, 0x40, 0xbe, + 0x41, 0xbe, 0x42, 0xbe, 0x43, 0xbe, 0x44, 0xbe, + 0x45, 0xbe, 0x46, 0xbe, 0x47, 0xbe, 0x48, 0xbe, + 0x49, 0xbe, 0x4a, 0x26, 0x0c, 0x00, 0x4d, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, + 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, + 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x65, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, + 0x91, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, + 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x71, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x4d, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, + 0x4d, 0x76, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x46, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x65, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x49, + 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x6f, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x9f, 0x01, + 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, + 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, + 0x00, 0x26, 0x04, 0x00, 0x4d, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, + 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, + 0x04, 0xa2, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa3, 0x01, + 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, + 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, + 0x00, 0x26, 0x04, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x71, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x4d, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x4d, 0x75, + 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x4b, 0xbe, 0x4c, 0xbe, 0x4d, 0xbe, 0x4e, 0xbe, + 0x4f, 0xbe, 0x50, 0xbe, 0x51, 0xbe, 0x52, 0xbe, + 0x53, 0xbe, 0x54, 0xbe, 0x55, 0xbe, 0x56, 0xbe, + 0x57, 0xbe, 0x58, 0x26, 0x0e, 0x00, 0x4d, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, + 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, + 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, + 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, + 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, + 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, + 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, + 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, + 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, + 0x00, 0x26, 0x0e, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, + 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, + 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, + 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, + 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, + 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, 0xae, + 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, + 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, + 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, 0x26, + 0x0e, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x65, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6f, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x71, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x72, 0x01, 0x00, 0x00, 0x4d, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x4d, 0x75, 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x59, 0xbe, 0x5a, 0xbe, 0x5b, 0xbe, + 0x5c, 0xbe, 0x5d, 0xbe, 0x5e, 0xbe, 0x5f, 0xbe, + 0x60, 0xbe, 0x61, 0xbe, 0x62, 0xbe, 0x63, 0xbe, + 0x64, 0x26, 0x0c, 0x00, 0x4d, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, + 0x01, 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, + 0x04, 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, + 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, 0x04, + 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, + 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, + 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, + 0x04, 0xbe, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xb3, 0x01, + 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, 0x00, 0x04, + 0xb5, 0x01, 0x00, 0x00, 0x04, 0xb6, 0x01, 0x00, + 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, + 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, + 0x04, 0xba, 0x01, 0x00, 0x00, 0x04, 0xbb, 0x01, + 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, 0x04, + 0xbd, 0x01, 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x65, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xbf, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xbf, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x71, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x4d, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, 0x00, 0x4d, + 0x76, 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x65, 0xbe, 0x66, 0xbe, + 0x67, 0xbe, 0x68, 0xbe, 0x69, 0xbe, 0x6a, 0xbe, + 0x6b, 0xbe, 0x6c, 0xbe, 0x6d, 0xbe, 0x6e, 0xbe, + 0x6f, 0xbe, 0x70, 0x26, 0x0c, 0x00, 0x4d, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, + 0x04, 0xc1, 0x01, 0x00, 0x00, 0x04, 0xc2, 0x01, + 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, 0x04, + 0xc4, 0x01, 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, + 0x00, 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, 0xc7, + 0x01, 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, + 0x04, 0xc9, 0x01, 0x00, 0x00, 0x04, 0xca, 0x01, + 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, + 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, 0x04, 0xcf, + 0x01, 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, + 0x04, 0xd1, 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, + 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, + 0xd4, 0x01, 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, + 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x65, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xd8, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0xd8, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x71, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x4d, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, + 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x71, 0xbe, + 0x72, 0xbe, 0x73, 0xbe, 0x74, 0xbe, 0x75, 0xbe, + 0x76, 0xbe, 0x77, 0xbe, 0x78, 0xbe, 0x79, 0xbe, + 0x7a, 0xbe, 0x7b, 0xbe, 0x7c, 0x26, 0x0c, 0x00, + 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, + 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, 0x04, + 0xc2, 0x01, 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, + 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, 0x04, 0xc5, + 0x01, 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, 0x00, + 0x04, 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, 0x01, + 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, 0x04, + 0xca, 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, + 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, + 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, 0x01, + 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, 0x04, + 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, + 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, 0xd5, + 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, + 0x04, 0xd7, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x65, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xd8, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0xd8, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x71, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x4d, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x4d, 0x75, + 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, + 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x65, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, + 0x00, 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, + 0xdc, 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, + 0x00, 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, + 0x01, 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, + 0x04, 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, + 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, + 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, + 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, + 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, + 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, + 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, + 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, + 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, + 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, + 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, + 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, + 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, + 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, + 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, + 0x26, 0x20, 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, + 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0xfa, 0x01, + 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, + 0xfb, 0x01, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, + 0x80, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x4d, 0x23, + 0x00, 0x00, 0x80, 0x04, 0xfd, 0x01, 0x00, 0x00, + 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0xfe, 0x01, + 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, + 0xff, 0x01, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, + 0x80, 0x04, 0x00, 0x02, 0x00, 0x00, 0x4d, 0x27, + 0x00, 0x00, 0x80, 0x04, 0x01, 0x02, 0x00, 0x00, + 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x02, 0x02, + 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, + 0x03, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, + 0x80, 0x04, 0x04, 0x02, 0x00, 0x00, 0x4d, 0x2b, + 0x00, 0x00, 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, + 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, + 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, + 0x07, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, + 0x80, 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, 0x2f, + 0x00, 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, + 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, + 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, + 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, + 0x80, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x33, + 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, + 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, + 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, + 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, + 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x37, + 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, + 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, + 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, + 0x13, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, + 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x3b, + 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, + 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, + 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, + 0x17, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, + 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x3f, + 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, + 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, + 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, + 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, + 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x43, + 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, + 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, + 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, + 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x47, + 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, + 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, + 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, + 0x23, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, + 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x4b, + 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, + 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, + 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, + 0x27, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, + 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x4f, + 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, + 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, + 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, + 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, + 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x53, + 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, + 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, + 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, + 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, + 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x57, + 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, + 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, + 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, + 0x33, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, + 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x5b, + 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, + 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, + 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, + 0x37, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, + 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x5f, + 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, + 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, + 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, + 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, + 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x63, + 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, + 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, + 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, + 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, + 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x67, + 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, + 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, + 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, + 0x43, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, + 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x6b, + 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, + 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, + 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, + 0x47, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, + 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x6f, + 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, + 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, + 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, + 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, + 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x73, + 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, + 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, + 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, + 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, + 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x77, + 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, + 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, + 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, + 0x53, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, + 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x7b, + 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, + 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, + 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, + 0x57, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, + 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x7f, + 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, + 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, + 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, + 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, + 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x83, + 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, + 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, + 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, + 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, + 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x87, + 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, + 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, + 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, + 0x63, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, + 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x8b, + 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, + 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, + 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, + 0x67, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, + 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x8f, + 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, + 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, + 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, + 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, + 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x93, + 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, + 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, + 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, + 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, + 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x97, + 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, + 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, + 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, + 0x73, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, + 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x9b, + 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, + 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, + 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, + 0x77, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, + 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x9f, + 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, + 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, + 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, + 0x7b, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, + 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0xa3, + 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, + 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, + 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, + 0x7f, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, + 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0xa7, + 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, + 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, + 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, + 0x83, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, + 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0xab, + 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, + 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, + 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, + 0x87, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, + 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0xaf, + 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, + 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, + 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, + 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, + 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xb3, + 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, + 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, + 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, + 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, + 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xb7, + 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, + 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, + 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, + 0x93, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, + 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xbb, + 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, + 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, + 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, + 0x97, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, + 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xbf, + 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, + 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, + 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, + 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, + 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xc3, + 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, + 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, + 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, + 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, + 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xc7, + 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, + 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, + 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, + 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, + 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xcb, + 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, + 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, + 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, + 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, + 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xcf, + 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, + 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, + 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, + 0xab, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, + 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, + 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, + 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, + 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, + 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, + 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, + 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, + 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x80, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x80, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x80, 0x4d, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, + 0x00, 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, + 0xdc, 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, + 0x00, 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, + 0x01, 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, + 0x04, 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, + 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, + 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, + 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, + 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, + 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, + 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, + 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, + 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, + 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, + 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, + 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, + 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, + 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, + 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, + 0x26, 0x20, 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, + 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0xfa, 0x01, + 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, + 0xfb, 0x01, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, + 0x80, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x4d, 0x23, + 0x00, 0x00, 0x80, 0x04, 0xfd, 0x01, 0x00, 0x00, + 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0xfe, 0x01, + 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, + 0xff, 0x01, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, + 0x80, 0x04, 0x00, 0x02, 0x00, 0x00, 0x4d, 0x27, + 0x00, 0x00, 0x80, 0x04, 0x01, 0x02, 0x00, 0x00, + 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x02, 0x02, + 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, + 0x03, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, + 0x80, 0x04, 0x04, 0x02, 0x00, 0x00, 0x4d, 0x2b, + 0x00, 0x00, 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, + 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, + 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, + 0x07, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, + 0x80, 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, 0x2f, + 0x00, 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, + 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, + 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, + 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, + 0x80, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x33, + 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, + 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, + 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, + 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, + 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x37, + 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, + 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, + 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, + 0x13, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, + 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x3b, + 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, + 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, + 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, + 0x17, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, + 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x3f, + 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, + 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, + 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, + 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, + 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x43, + 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, + 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, + 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, + 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x47, + 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, + 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, + 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, + 0x23, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, + 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x4b, + 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, + 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, + 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, + 0x27, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, + 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x4f, + 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, + 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, + 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, + 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, + 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x53, + 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, + 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, + 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, + 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, + 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x57, + 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, + 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, + 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, + 0x33, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, + 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x5b, + 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, + 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, + 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, + 0x37, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, + 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x5f, + 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, + 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, + 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, + 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, + 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x63, + 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, + 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, + 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, + 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, + 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x67, + 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, + 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, + 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, + 0x43, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, + 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x6b, + 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, + 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, + 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, + 0x47, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, + 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x6f, + 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, + 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, + 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, + 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, + 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x73, + 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, + 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, + 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, + 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, + 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x77, + 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, + 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, + 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, + 0x53, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, + 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x7b, + 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, + 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, + 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, + 0x57, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, + 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x7f, + 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, + 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, + 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, + 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, + 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x83, + 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, + 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, + 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, + 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, + 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x87, + 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, + 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, + 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, + 0x63, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, + 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x8b, + 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, + 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, + 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, + 0x67, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, + 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x8f, + 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, + 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, + 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, + 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, + 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x93, + 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, + 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, + 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, + 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, + 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x97, + 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, + 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, + 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, + 0x73, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, + 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x9b, + 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, + 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, + 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, + 0x77, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, + 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x9f, + 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, + 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, + 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, + 0x7b, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, + 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0xa3, + 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, + 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, + 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, + 0x7f, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, + 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0xa7, + 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, + 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, + 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, + 0x83, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, + 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0xab, + 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, + 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, + 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, + 0x87, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, + 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0xaf, + 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, + 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, + 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, + 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, + 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xb3, + 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, + 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, + 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, + 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, + 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xb7, + 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, + 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, + 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, + 0x93, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, + 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xbb, + 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, + 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, + 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, + 0x97, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, + 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xbf, + 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, + 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, + 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, + 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, + 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xc3, + 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, + 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, + 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, + 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, + 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xc7, + 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, + 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, + 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, + 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, + 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xcb, + 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, + 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, + 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, + 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, + 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xcf, + 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, + 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, + 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, + 0xab, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, + 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, + 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, + 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, + 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, + 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, + 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, + 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, + 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, + 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x80, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, + 0x00, 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, + 0xdc, 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, + 0x00, 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, + 0x01, 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, + 0x04, 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, + 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, + 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, + 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, + 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, + 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, + 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, + 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, + 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, + 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, + 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, + 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, + 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, + 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, + 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, + 0x26, 0x20, 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, + 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0xfa, 0x01, + 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, + 0xfb, 0x01, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, + 0x80, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x4d, 0x23, + 0x00, 0x00, 0x80, 0x04, 0xfd, 0x01, 0x00, 0x00, + 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0xfe, 0x01, + 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, + 0xff, 0x01, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, + 0x80, 0x04, 0x00, 0x02, 0x00, 0x00, 0x4d, 0x27, + 0x00, 0x00, 0x80, 0x04, 0x01, 0x02, 0x00, 0x00, + 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x02, 0x02, + 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, + 0x03, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, + 0x80, 0x04, 0x04, 0x02, 0x00, 0x00, 0x4d, 0x2b, + 0x00, 0x00, 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, + 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, + 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, + 0x07, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, + 0x80, 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, 0x2f, + 0x00, 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, + 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, + 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, + 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, + 0x80, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x33, + 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, + 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, + 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, + 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, + 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x37, + 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, + 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, + 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, + 0x13, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, + 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x3b, + 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, + 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, + 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, + 0x17, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, + 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x3f, + 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, + 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, + 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, + 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, + 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x43, + 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, + 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, + 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, + 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x47, + 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, + 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, + 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, + 0x23, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, + 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x4b, + 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, + 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, + 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, + 0x27, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, + 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x4f, + 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, + 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, + 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, + 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, + 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x53, + 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, + 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, + 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, + 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, + 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x57, + 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, + 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, + 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, + 0x33, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, + 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x5b, + 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, + 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, + 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, + 0x37, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, + 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x5f, + 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, + 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, + 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, + 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, + 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x63, + 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, + 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, + 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, + 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, + 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x67, + 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, + 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, + 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, + 0x43, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, + 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x6b, + 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, + 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, + 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, + 0x47, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, + 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x6f, + 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, + 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, + 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, + 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, + 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x73, + 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, + 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, + 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, + 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, + 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x77, + 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, + 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, + 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, + 0x53, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, + 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x7b, + 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, + 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, + 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, + 0x57, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, + 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x7f, + 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, + 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, + 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, + 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, + 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x83, + 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, + 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, + 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, + 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, + 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x87, + 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, + 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, + 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, + 0x63, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, + 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x8b, + 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, + 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, + 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, + 0x67, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, + 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x8f, + 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, + 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, + 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, + 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, + 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x93, + 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, + 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, + 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, + 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, + 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x97, + 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, + 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, + 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, + 0x73, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, + 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x9b, + 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, + 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, + 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, + 0x77, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, + 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x9f, + 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, + 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, + 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, + 0x7b, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, + 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0xa3, + 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, + 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, + 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, + 0x7f, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, + 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0xa7, + 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, + 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, + 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, + 0x83, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, + 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0xab, + 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, + 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, + 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, + 0x87, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, + 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0xaf, + 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, + 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, + 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, + 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, + 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xb3, + 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, + 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, + 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, + 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, + 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xb7, + 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, + 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, + 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, + 0x93, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, + 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xbb, + 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, + 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, + 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, + 0x97, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, + 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xbf, + 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, + 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, + 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, + 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, + 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xc3, + 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, + 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, + 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, + 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, + 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xc7, + 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, + 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, + 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, + 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, + 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xcb, + 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, + 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, + 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, + 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, + 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xcf, + 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, + 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, + 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, + 0xab, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, + 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, + 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, + 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, + 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, + 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, + 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, + 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, + 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, + 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x80, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x71, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x4d, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x4d, 0x75, 0x01, + 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x7d, + 0xbe, 0x7e, 0xbe, 0x7f, 0xbe, 0x80, 0xbe, 0x81, + 0xbe, 0x82, 0xbe, 0x83, 0xbe, 0x84, 0xbe, 0x85, + 0xbe, 0x86, 0xbe, 0x87, 0xbe, 0x88, 0x26, 0x0c, + 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0xc5, + 0x02, 0x00, 0x00, 0x04, 0xc6, 0x02, 0x00, 0x00, + 0x04, 0xc7, 0x02, 0x00, 0x00, 0x04, 0xc8, 0x02, + 0x00, 0x00, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x04, + 0xca, 0x02, 0x00, 0x00, 0x04, 0xcb, 0x02, 0x00, + 0x00, 0x04, 0xcc, 0x02, 0x00, 0x00, 0x04, 0xcd, + 0x02, 0x00, 0x00, 0x04, 0xce, 0x02, 0x00, 0x00, + 0x04, 0xcf, 0x02, 0x00, 0x00, 0x04, 0xd0, 0x02, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xc5, 0x02, 0x00, 0x00, 0x04, + 0xc6, 0x02, 0x00, 0x00, 0x04, 0xc7, 0x02, 0x00, + 0x00, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x04, 0xc9, + 0x02, 0x00, 0x00, 0x04, 0xca, 0x02, 0x00, 0x00, + 0x04, 0xcb, 0x02, 0x00, 0x00, 0x04, 0xcc, 0x02, + 0x00, 0x00, 0x04, 0xcd, 0x02, 0x00, 0x00, 0x04, + 0xce, 0x02, 0x00, 0x00, 0x04, 0xcf, 0x02, 0x00, + 0x00, 0x04, 0xd0, 0x02, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x65, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xd1, 0x02, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0xd1, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd1, 0x02, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x71, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x4d, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x4d, + 0x75, 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x46, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x65, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xd2, 0x02, 0x00, 0x00, 0x04, 0xd3, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0xd2, 0x02, 0x00, 0x00, + 0x04, 0xd3, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd2, 0x02, + 0x00, 0x00, 0x04, 0xd3, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x71, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x4d, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x4d, 0x75, 0x01, 0x00, + 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x4d, 0xe2, + 0x00, 0x00, 0x00, 0x4d, 0xd4, 0x02, 0x00, 0x00, + 0x4d, 0xd5, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xd6, + 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xd7, + 0x02, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xd8, 0x02, + 0x00, 0x00, 0x4d, 0xd9, 0x02, 0x00, 0x00, 0x04, + 0xda, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x02, 0x00, + 0x00, 0x4d, 0xdc, 0x02, 0x00, 0x00, 0x0b, 0x04, + 0xdd, 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x02, 0x00, + 0x00, 0x04, 0xde, 0x02, 0x00, 0x00, 0x4d, 0xdb, + 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x02, 0x00, 0x00, + 0x0b, 0x04, 0xe0, 0x02, 0x00, 0x00, 0x4d, 0xd9, + 0x02, 0x00, 0x00, 0x04, 0xe1, 0x02, 0x00, 0x00, + 0x4d, 0xdb, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x02, + 0x00, 0x00, 0x4d, 0xe3, 0x02, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0xe4, 0x02, 0x00, 0x00, 0x4d, 0xdc, + 0x02, 0x00, 0x00, 0x04, 0xe5, 0x02, 0x00, 0x00, + 0x4d, 0xe6, 0x02, 0x00, 0x00, 0x04, 0xe7, 0x02, + 0x00, 0x00, 0x4d, 0xe8, 0x02, 0x00, 0x00, 0x04, + 0xe9, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x02, 0x00, + 0x00, 0x04, 0xeb, 0x02, 0x00, 0x00, 0x4d, 0xec, + 0x02, 0x00, 0x00, 0x04, 0xed, 0x02, 0x00, 0x00, + 0x4d, 0xee, 0x02, 0x00, 0x00, 0x04, 0xef, 0x02, + 0x00, 0x00, 0x4d, 0xf0, 0x02, 0x00, 0x00, 0x4d, + 0xd6, 0x02, 0x00, 0x00, 0x4d, 0xf1, 0x02, 0x00, + 0x00, 0x0b, 0x04, 0xf2, 0x02, 0x00, 0x00, 0x4d, + 0xf3, 0x02, 0x00, 0x00, 0x04, 0xf4, 0x02, 0x00, + 0x00, 0x4d, 0xf5, 0x02, 0x00, 0x00, 0x04, 0xf6, + 0x02, 0x00, 0x00, 0x4d, 0xf7, 0x02, 0x00, 0x00, + 0x04, 0xf8, 0x02, 0x00, 0x00, 0x4d, 0xf9, 0x02, + 0x00, 0x00, 0x04, 0xfa, 0x02, 0x00, 0x00, 0x4d, + 0xfb, 0x02, 0x00, 0x00, 0x04, 0xfc, 0x02, 0x00, + 0x00, 0x4d, 0xfd, 0x02, 0x00, 0x00, 0x04, 0xfe, + 0x02, 0x00, 0x00, 0x4d, 0xff, 0x02, 0x00, 0x00, + 0x04, 0x00, 0x03, 0x00, 0x00, 0x4d, 0x01, 0x03, + 0x00, 0x00, 0x04, 0x02, 0x03, 0x00, 0x00, 0x4d, + 0x03, 0x03, 0x00, 0x00, 0x04, 0x04, 0x03, 0x00, + 0x00, 0x4d, 0x05, 0x03, 0x00, 0x00, 0x04, 0x06, + 0x03, 0x00, 0x00, 0x4d, 0x07, 0x03, 0x00, 0x00, + 0x04, 0x08, 0x03, 0x00, 0x00, 0x4d, 0x09, 0x03, + 0x00, 0x00, 0x04, 0x0a, 0x03, 0x00, 0x00, 0x4d, + 0x0b, 0x03, 0x00, 0x00, 0x04, 0x0c, 0x03, 0x00, + 0x00, 0x4d, 0x0d, 0x03, 0x00, 0x00, 0x04, 0x0e, + 0x03, 0x00, 0x00, 0x4d, 0x0f, 0x03, 0x00, 0x00, + 0x04, 0x10, 0x03, 0x00, 0x00, 0x4d, 0x11, 0x03, + 0x00, 0x00, 0x04, 0x12, 0x03, 0x00, 0x00, 0x4d, + 0x13, 0x03, 0x00, 0x00, 0x04, 0x14, 0x03, 0x00, + 0x00, 0x4d, 0x15, 0x03, 0x00, 0x00, 0x04, 0x16, + 0x03, 0x00, 0x00, 0x4d, 0x17, 0x03, 0x00, 0x00, + 0x04, 0x18, 0x03, 0x00, 0x00, 0x4d, 0x19, 0x03, + 0x00, 0x00, 0x04, 0x1a, 0x03, 0x00, 0x00, 0x4d, + 0x1b, 0x03, 0x00, 0x00, 0x04, 0x1c, 0x03, 0x00, + 0x00, 0x4d, 0x1d, 0x03, 0x00, 0x00, 0x04, 0x1e, + 0x03, 0x00, 0x00, 0x4d, 0x1f, 0x03, 0x00, 0x00, + 0x4d, 0x20, 0x03, 0x00, 0x00, 0x4d, 0x45, 0x00, + 0x00, 0x00, 0x24, 0x01, 0x00, 0xcc, 0x28, 0xc2, + 0x0c, 0x01, 0x00, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, + 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_ta_size = 25434; + +const uint8_t intl_ta[25434] = { + 0x01, 0xf9, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x74, 0x61, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x10, + 0x7b, 0x31, 0x7d, 0x2c, 0x20, 0x7b, 0x30, 0x7d, + 0x0a, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, + 0x65, 0x64, 0x69, 0x75, 0x6d, 0x1f, 0x7b, 0x00, + 0x31, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x19, 0x20, + 0x85, 0x0b, 0xa9, 0x0b, 0xcd, 0x0b, 0xb1, 0x0b, + 0xc1, 0x0b, 0x19, 0x20, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x08, 0x66, 0x75, 0x6c, + 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x02, 0x64, + 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, 0x06, 0x64, + 0x20, 0x45, 0x04, 0x45, 0x64, 0x10, 0x45, 0x20, + 0x61, 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x06, 0x45, + 0x68, 0x6d, 0x0e, 0x45, 0x20, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x06, 0x45, 0x48, 0x6d, 0x16, 0x45, + 0x20, 0x61, 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x08, 0x45, 0x68, 0x6d, 0x73, 0x14, + 0x45, 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x08, 0x45, 0x48, 0x6d, 0x73, 0x06, + 0x47, 0x20, 0x79, 0x04, 0x47, 0x79, 0x0e, 0x47, + 0x20, 0x79, 0x20, 0x4d, 0x4d, 0x4d, 0x0a, 0x47, + 0x79, 0x4d, 0x4d, 0x4d, 0x12, 0x47, 0x20, 0x79, + 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x0c, 0x47, + 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x18, 0x47, 0x20, + 0x79, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x2c, + 0x20, 0x45, 0x0e, 0x47, 0x79, 0x4d, 0x4d, 0x4d, + 0x45, 0x64, 0x06, 0x61, 0x20, 0x68, 0x02, 0x68, + 0x04, 0x48, 0x48, 0x02, 0x48, 0x0c, 0x61, 0x20, + 0x68, 0x3a, 0x6d, 0x6d, 0x04, 0x68, 0x6d, 0x0a, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x04, 0x48, 0x6d, + 0x12, 0x61, 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x06, 0x68, 0x6d, 0x73, 0x10, 0x48, + 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x06, + 0x48, 0x6d, 0x73, 0x16, 0x61, 0x20, 0x68, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x76, 0x08, + 0x68, 0x6d, 0x73, 0x76, 0x14, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x76, 0x08, + 0x48, 0x6d, 0x73, 0x76, 0x10, 0x61, 0x20, 0x68, + 0x3a, 0x6d, 0x6d, 0x20, 0x76, 0x06, 0x68, 0x6d, + 0x76, 0x0e, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x20, + 0x76, 0x06, 0x48, 0x6d, 0x76, 0x02, 0x4c, 0x02, + 0x4d, 0x06, 0x64, 0x2f, 0x4d, 0x04, 0x4d, 0x64, + 0x10, 0x4d, 0x4d, 0x2d, 0x64, 0x64, 0x2c, 0x20, + 0x45, 0x06, 0x4d, 0x45, 0x64, 0x0a, 0x64, 0x64, + 0x2d, 0x4d, 0x4d, 0x08, 0x4d, 0x4d, 0x64, 0x64, + 0x06, 0x4c, 0x4c, 0x4c, 0x06, 0x4d, 0x4d, 0x4d, + 0x0a, 0x4d, 0x4d, 0x4d, 0x20, 0x64, 0x08, 0x4d, + 0x4d, 0x4d, 0x64, 0x10, 0x4d, 0x4d, 0x4d, 0x20, + 0x64, 0x2c, 0x20, 0x45, 0x0a, 0x4d, 0x4d, 0x4d, + 0x45, 0x64, 0x0c, 0x64, 0x20, 0x4d, 0x4d, 0x4d, + 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x0a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x04, 0x6d, 0x73, + 0x02, 0x79, 0x06, 0x4d, 0x2f, 0x79, 0x04, 0x79, + 0x4d, 0x0a, 0x64, 0x2f, 0x4d, 0x2f, 0x79, 0x06, + 0x79, 0x4d, 0x64, 0x10, 0x45, 0x2c, 0x20, 0x64, + 0x2f, 0x4d, 0x2f, 0x79, 0x08, 0x79, 0x4d, 0x45, + 0x64, 0x08, 0x4d, 0x4d, 0x2d, 0x79, 0x06, 0x79, + 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x20, 0x79, + 0x08, 0x79, 0x4d, 0x4d, 0x4d, 0x10, 0x64, 0x20, + 0x4d, 0x4d, 0x4d, 0x2c, 0x20, 0x79, 0x0a, 0x79, + 0x4d, 0x4d, 0x4d, 0x64, 0x16, 0x45, 0x2c, 0x20, + 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x2c, 0x20, 0x79, + 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0c, + 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0a, 0x79, + 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, 0x51, 0x51, 0x51, + 0x20, 0x79, 0x08, 0x79, 0x51, 0x51, 0x51, 0x0c, + 0x51, 0x51, 0x51, 0x51, 0x20, 0x79, 0x0a, 0x79, + 0x51, 0x51, 0x51, 0x51, 0x20, 0x61, 0x76, 0x61, + 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x73, 0x1e, 0x45, 0x45, + 0x45, 0x45, 0x2c, 0x20, 0x64, 0x20, 0x4d, 0x4d, + 0x4d, 0x4d, 0x2c, 0x20, 0x79, 0x14, 0x79, 0x4d, + 0x4d, 0x4d, 0x4d, 0x45, 0x45, 0x45, 0x45, 0x64, + 0x12, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x2c, + 0x20, 0x79, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, + 0x64, 0x0c, 0x64, 0x2f, 0x4d, 0x2f, 0x79, 0x79, + 0x16, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x73, 0x1c, 0x61, 0x20, 0x68, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x7a, + 0x7a, 0x7a, 0x7a, 0x12, 0x68, 0x6d, 0x6d, 0x73, + 0x73, 0x7a, 0x7a, 0x7a, 0x7a, 0x16, 0x61, 0x20, + 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, + 0x7a, 0x08, 0x68, 0x6d, 0x73, 0x7a, 0x16, 0x74, + 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x73, 0x0e, 0x66, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x73, 0x03, 0x9c, 0x0b, 0x05, 0xaa, 0x0b, + 0xbf, 0x0b, 0x05, 0xae, 0x0b, 0xbe, 0x0b, 0x03, + 0x8f, 0x0b, 0x05, 0xae, 0x0b, 0xc7, 0x0b, 0x05, + 0x9c, 0x0b, 0xc2, 0x0b, 0x03, 0x86, 0x0b, 0x05, + 0x9a, 0x0b, 0xc6, 0x0b, 0x03, 0x85, 0x0b, 0x03, + 0xa8, 0x0b, 0x05, 0x9f, 0x0b, 0xbf, 0x0b, 0x0c, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x07, 0x9c, + 0x0b, 0xa9, 0x0b, 0x2e, 0x00, 0x0b, 0xaa, 0x0b, + 0xbf, 0x0b, 0xaa, 0x0b, 0xcd, 0x0b, 0x2e, 0x00, + 0x0b, 0xae, 0x0b, 0xbe, 0x0b, 0xb0, 0x0b, 0xcd, + 0x0b, 0x2e, 0x00, 0x09, 0x8f, 0x0b, 0xaa, 0x0b, + 0xcd, 0x0b, 0x2e, 0x00, 0x09, 0x9c, 0x0b, 0xc2, + 0x0b, 0xa9, 0x0b, 0xcd, 0x0b, 0x09, 0x9c, 0x0b, + 0xc2, 0x0b, 0xb2, 0x0b, 0xc8, 0x0b, 0x07, 0x86, + 0x0b, 0x95, 0x0b, 0x2e, 0x00, 0x0b, 0x9a, 0x0b, + 0xc6, 0x0b, 0xaa, 0x0b, 0xcd, 0x0b, 0x2e, 0x00, + 0x09, 0x85, 0x0b, 0x95, 0x0b, 0xcd, 0x0b, 0x2e, + 0x00, 0x07, 0xa8, 0x0b, 0xb5, 0x0b, 0x2e, 0x00, + 0x09, 0x9f, 0x0b, 0xbf, 0x0b, 0x9a, 0x0b, 0x2e, + 0x00, 0x0b, 0x9c, 0x0b, 0xa9, 0x0b, 0xb5, 0x0b, + 0xb0, 0x0b, 0xbf, 0x0b, 0x11, 0xaa, 0x0b, 0xbf, + 0x0b, 0xaa, 0x0b, 0xcd, 0x0b, 0xb0, 0x0b, 0xb5, + 0x0b, 0xb0, 0x0b, 0xbf, 0x0b, 0x0d, 0xae, 0x0b, + 0xbe, 0x0b, 0xb0, 0x0b, 0xcd, 0x0b, 0x9a, 0x0b, + 0xcd, 0x0b, 0x0d, 0x8f, 0x0b, 0xaa, 0x0b, 0xcd, + 0x0b, 0xb0, 0x0b, 0xb2, 0x0b, 0xcd, 0x0b, 0x0d, + 0x86, 0x0b, 0x95, 0x0b, 0xb8, 0x0b, 0xcd, 0x0b, + 0x9f, 0x0b, 0xcd, 0x0b, 0x15, 0x9a, 0x0b, 0xc6, + 0x0b, 0xaa, 0x0b, 0xcd, 0x0b, 0x9f, 0x0b, 0xae, + 0x0b, 0xcd, 0x0b, 0xaa, 0x0b, 0xb0, 0x0b, 0xcd, + 0x0b, 0x11, 0x85, 0x0b, 0x95, 0x0b, 0xcd, 0x0b, + 0x9f, 0x0b, 0xcb, 0x0b, 0xaa, 0x0b, 0xb0, 0x0b, + 0xcd, 0x0b, 0x0f, 0xa8, 0x0b, 0xb5, 0x0b, 0xae, + 0x0b, 0xcd, 0x0b, 0xaa, 0x0b, 0xb0, 0x0b, 0xcd, + 0x0b, 0x11, 0x9f, 0x0b, 0xbf, 0x0b, 0x9a, 0x0b, + 0xae, 0x0b, 0xcd, 0x0b, 0xaa, 0x0b, 0xb0, 0x0b, + 0xcd, 0x0b, 0x0c, 0x6d, 0x6f, 0x6e, 0x74, 0x68, + 0x73, 0x05, 0x9e, 0x0b, 0xbe, 0x0b, 0x05, 0xa4, + 0x0b, 0xbf, 0x0b, 0x05, 0xaa, 0x0b, 0xc1, 0x0b, + 0x05, 0xb5, 0x0b, 0xbf, 0x0b, 0x05, 0xb5, 0x0b, + 0xc6, 0x0b, 0x03, 0x9a, 0x0b, 0x0b, 0x9e, 0x0b, + 0xbe, 0x0b, 0xaf, 0x0b, 0xbf, 0x0b, 0x2e, 0x00, + 0x0b, 0xa4, 0x0b, 0xbf, 0x0b, 0x99, 0x0b, 0xcd, + 0x0b, 0x2e, 0x00, 0x0b, 0x9a, 0x0b, 0xc6, 0x0b, + 0xb5, 0x0b, 0xcd, 0x0b, 0x2e, 0x00, 0x09, 0xaa, + 0x0b, 0xc1, 0x0b, 0xa4, 0x0b, 0x2e, 0x00, 0x0b, + 0xb5, 0x0b, 0xbf, 0x0b, 0xaf, 0x0b, 0xbe, 0x0b, + 0x2e, 0x00, 0x0b, 0xb5, 0x0b, 0xc6, 0x0b, 0xb3, + 0x0b, 0xcd, 0x0b, 0x2e, 0x00, 0x07, 0x9a, 0x0b, + 0xa9, 0x0b, 0xbf, 0x0b, 0x0d, 0x9e, 0x0b, 0xbe, + 0x0b, 0xaf, 0x0b, 0xbf, 0x0b, 0xb1, 0x0b, 0xc1, + 0x0b, 0x0f, 0xa4, 0x0b, 0xbf, 0x0b, 0x99, 0x0b, + 0xcd, 0x0b, 0x95, 0x0b, 0xb3, 0x0b, 0xcd, 0x0b, + 0x11, 0x9a, 0x0b, 0xc6, 0x0b, 0xb5, 0x0b, 0xcd, + 0x0b, 0xb5, 0x0b, 0xbe, 0x0b, 0xaf, 0x0b, 0xcd, + 0x0b, 0x0b, 0xaa, 0x0b, 0xc1, 0x0b, 0xa4, 0x0b, + 0xa9, 0x0b, 0xcd, 0x0b, 0x0f, 0xb5, 0x0b, 0xbf, + 0x0b, 0xaf, 0x0b, 0xbe, 0x0b, 0xb4, 0x0b, 0xa9, + 0x0b, 0xcd, 0x0b, 0x0d, 0xb5, 0x0b, 0xc6, 0x0b, + 0xb3, 0x0b, 0xcd, 0x0b, 0xb3, 0x0b, 0xbf, 0x0b, + 0x08, 0x64, 0x61, 0x79, 0x73, 0x04, 0x42, 0x45, + 0x08, 0x65, 0x72, 0x61, 0x73, 0x11, 0xae, 0x0b, + 0xc1, 0x0b, 0xb1, 0x0b, 0xcd, 0x0b, 0xaa, 0x0b, + 0x95, 0x0b, 0xb2, 0x0b, 0xcd, 0x0b, 0x04, 0x61, + 0x6d, 0x11, 0xaa, 0x0b, 0xbf, 0x0b, 0xb1, 0x0b, + 0xcd, 0x0b, 0xaa, 0x0b, 0x95, 0x0b, 0xb2, 0x0b, + 0xcd, 0x0b, 0x04, 0x70, 0x6d, 0x14, 0x64, 0x61, + 0x79, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x73, + 0x07, 0xae, 0x0b, 0xbe, 0x0b, 0x31, 0x00, 0x07, + 0xae, 0x0b, 0xbe, 0x0b, 0x32, 0x00, 0x07, 0xae, + 0x0b, 0xbe, 0x0b, 0x33, 0x00, 0x07, 0xae, 0x0b, + 0xbe, 0x0b, 0x34, 0x00, 0x07, 0xae, 0x0b, 0xbe, + 0x0b, 0x35, 0x00, 0x07, 0xae, 0x0b, 0xbe, 0x0b, + 0x36, 0x00, 0x07, 0xae, 0x0b, 0xbe, 0x0b, 0x37, + 0x00, 0x07, 0xae, 0x0b, 0xbe, 0x0b, 0x38, 0x00, + 0x07, 0xae, 0x0b, 0xbe, 0x0b, 0x39, 0x00, 0x09, + 0xae, 0x0b, 0xbe, 0x0b, 0x31, 0x00, 0x30, 0x00, + 0x09, 0xae, 0x0b, 0xbe, 0x0b, 0x31, 0x00, 0x31, + 0x00, 0x09, 0xae, 0x0b, 0xbe, 0x0b, 0x31, 0x00, + 0x32, 0x00, 0x0d, 0xae, 0x0b, 0xbe, 0x0b, 0xa4, + 0x0b, 0xae, 0x0b, 0xcd, 0x0b, 0x31, 0x00, 0x0d, + 0xae, 0x0b, 0xbe, 0x0b, 0xa4, 0x0b, 0xae, 0x0b, + 0xcd, 0x0b, 0x32, 0x00, 0x0d, 0xae, 0x0b, 0xbe, + 0x0b, 0xa4, 0x0b, 0xae, 0x0b, 0xcd, 0x0b, 0x33, + 0x00, 0x0d, 0xae, 0x0b, 0xbe, 0x0b, 0xa4, 0x0b, + 0xae, 0x0b, 0xcd, 0x0b, 0x34, 0x00, 0x0d, 0xae, + 0x0b, 0xbe, 0x0b, 0xa4, 0x0b, 0xae, 0x0b, 0xcd, + 0x0b, 0x35, 0x00, 0x0d, 0xae, 0x0b, 0xbe, 0x0b, + 0xa4, 0x0b, 0xae, 0x0b, 0xcd, 0x0b, 0x36, 0x00, + 0x0d, 0xae, 0x0b, 0xbe, 0x0b, 0xa4, 0x0b, 0xae, + 0x0b, 0xcd, 0x0b, 0x37, 0x00, 0x0d, 0xae, 0x0b, + 0xbe, 0x0b, 0xa4, 0x0b, 0xae, 0x0b, 0xcd, 0x0b, + 0x38, 0x00, 0x0d, 0xae, 0x0b, 0xbe, 0x0b, 0xa4, + 0x0b, 0xae, 0x0b, 0xcd, 0x0b, 0x39, 0x00, 0x0f, + 0xae, 0x0b, 0xbe, 0x0b, 0xa4, 0x0b, 0xae, 0x0b, + 0xcd, 0x0b, 0x31, 0x00, 0x30, 0x00, 0x0f, 0xae, + 0x0b, 0xbe, 0x0b, 0xa4, 0x0b, 0xae, 0x0b, 0xcd, + 0x0b, 0x31, 0x00, 0x31, 0x00, 0x0f, 0xae, 0x0b, + 0xbe, 0x0b, 0xa4, 0x0b, 0xae, 0x0b, 0xcd, 0x0b, + 0x31, 0x00, 0x32, 0x00, 0x08, 0x54, 0x6f, 0x75, + 0x74, 0x08, 0x42, 0x61, 0x62, 0x61, 0x0a, 0x48, + 0x61, 0x74, 0x6f, 0x72, 0x0a, 0x4b, 0x69, 0x61, + 0x68, 0x6b, 0x08, 0x54, 0x6f, 0x62, 0x61, 0x0c, + 0x41, 0x6d, 0x73, 0x68, 0x69, 0x72, 0x10, 0x42, + 0x61, 0x72, 0x61, 0x6d, 0x68, 0x61, 0x74, 0x12, + 0x42, 0x61, 0x72, 0x61, 0x6d, 0x6f, 0x75, 0x64, + 0x61, 0x0e, 0x42, 0x61, 0x73, 0x68, 0x61, 0x6e, + 0x73, 0x0a, 0x50, 0x61, 0x6f, 0x6e, 0x61, 0x08, + 0x45, 0x70, 0x65, 0x70, 0x0a, 0x4d, 0x65, 0x73, + 0x72, 0x61, 0x0a, 0x4e, 0x61, 0x73, 0x69, 0x65, + 0x08, 0x45, 0x52, 0x41, 0x30, 0x08, 0x45, 0x52, + 0x41, 0x31, 0x10, 0x4d, 0x65, 0x73, 0x6b, 0x65, + 0x72, 0x65, 0x6d, 0x0c, 0x54, 0x65, 0x6b, 0x65, + 0x6d, 0x74, 0x0a, 0x48, 0x65, 0x64, 0x61, 0x72, + 0x0c, 0x54, 0x61, 0x68, 0x73, 0x61, 0x73, 0x06, + 0x54, 0x65, 0x72, 0x0e, 0x59, 0x65, 0x6b, 0x61, + 0x74, 0x69, 0x74, 0x0e, 0x4d, 0x65, 0x67, 0x61, + 0x62, 0x69, 0x74, 0x0c, 0x4d, 0x69, 0x61, 0x7a, + 0x69, 0x61, 0x0c, 0x47, 0x65, 0x6e, 0x62, 0x6f, + 0x74, 0x08, 0x53, 0x65, 0x6e, 0x65, 0x0a, 0x48, + 0x61, 0x6d, 0x6c, 0x65, 0x0e, 0x4e, 0x65, 0x68, + 0x61, 0x73, 0x73, 0x65, 0x0e, 0x50, 0x61, 0x67, + 0x75, 0x6d, 0x65, 0x6e, 0x06, 0x4d, 0x30, 0x31, + 0x06, 0x4d, 0x30, 0x32, 0x06, 0x4d, 0x30, 0x33, + 0x06, 0x4d, 0x30, 0x34, 0x06, 0x4d, 0x30, 0x35, + 0x06, 0x4d, 0x30, 0x36, 0x06, 0x4d, 0x30, 0x37, + 0x06, 0x4d, 0x30, 0x38, 0x06, 0x4d, 0x30, 0x39, + 0x06, 0x4d, 0x31, 0x30, 0x06, 0x4d, 0x31, 0x31, + 0x06, 0x4d, 0x31, 0x32, 0x0d, 0x95, 0x0b, 0xbf, + 0x0b, 0x2e, 0x00, 0xae, 0x0b, 0xc1, 0x0b, 0x2e, + 0x00, 0x0d, 0x95, 0x0b, 0xbf, 0x0b, 0x2e, 0x00, + 0xaa, 0x0b, 0xbf, 0x0b, 0x2e, 0x00, 0x0f, 0xaa, + 0x0b, 0xca, 0x0b, 0x2e, 0x00, 0x9a, 0x0b, 0x2e, + 0x00, 0xae, 0x0b, 0xc1, 0x0b, 0x09, 0xaa, 0x0b, + 0xca, 0x0b, 0x2e, 0x00, 0x9a, 0x0b, 0x27, 0x95, + 0x0b, 0xbf, 0x0b, 0xb1, 0x0b, 0xbf, 0x0b, 0xb8, + 0x0b, 0xcd, 0x0b, 0xa4, 0x0b, 0xc1, 0x0b, 0xb5, + 0x0b, 0xc1, 0x0b, 0x95, 0x0b, 0xcd, 0x0b, 0x95, + 0x0b, 0xc1, 0x0b, 0x20, 0x00, 0xae, 0x0b, 0xc1, + 0x0b, 0xa9, 0x0b, 0xcd, 0x0b, 0x19, 0x85, 0x0b, + 0xa9, 0x0b, 0xcd, 0x0b, 0xa9, 0x0b, 0xcb, 0x0b, + 0x20, 0x00, 0x9f, 0x0b, 0xcb, 0x0b, 0xae, 0x0b, + 0xbf, 0x0b, 0xa9, 0x0b, 0xbf, 0x0b, 0x0c, 0x54, + 0x69, 0x73, 0x68, 0x72, 0x69, 0x0e, 0x48, 0x65, + 0x73, 0x68, 0x76, 0x61, 0x6e, 0x0c, 0x4b, 0x69, + 0x73, 0x6c, 0x65, 0x76, 0x0a, 0x54, 0x65, 0x76, + 0x65, 0x74, 0x0c, 0x53, 0x68, 0x65, 0x76, 0x61, + 0x74, 0x0c, 0x41, 0x64, 0x61, 0x72, 0x20, 0x49, + 0x08, 0x41, 0x64, 0x61, 0x72, 0x0a, 0x4e, 0x69, + 0x73, 0x61, 0x6e, 0x08, 0x49, 0x79, 0x61, 0x72, + 0x0a, 0x53, 0x69, 0x76, 0x61, 0x6e, 0x0a, 0x54, + 0x61, 0x6d, 0x75, 0x7a, 0x04, 0x41, 0x76, 0x08, + 0x45, 0x6c, 0x75, 0x6c, 0x0e, 0x41, 0x64, 0x61, + 0x72, 0x20, 0x49, 0x49, 0x04, 0x41, 0x4d, 0x0e, + 0x43, 0x68, 0x61, 0x69, 0x74, 0x72, 0x61, 0x10, + 0x56, 0x61, 0x69, 0x73, 0x61, 0x6b, 0x68, 0x61, + 0x10, 0x4a, 0x79, 0x61, 0x69, 0x73, 0x74, 0x68, + 0x61, 0x0c, 0x41, 0x73, 0x61, 0x64, 0x68, 0x61, + 0x0e, 0x53, 0x72, 0x61, 0x76, 0x61, 0x6e, 0x61, + 0x0c, 0x42, 0x68, 0x61, 0x64, 0x72, 0x61, 0x0c, + 0x41, 0x73, 0x76, 0x69, 0x6e, 0x61, 0x0e, 0x4b, + 0x61, 0x72, 0x74, 0x69, 0x6b, 0x61, 0x14, 0x41, + 0x67, 0x72, 0x61, 0x68, 0x61, 0x79, 0x61, 0x6e, + 0x61, 0x0a, 0x50, 0x61, 0x75, 0x73, 0x61, 0x0a, + 0x4d, 0x61, 0x67, 0x68, 0x61, 0x10, 0x50, 0x68, + 0x61, 0x6c, 0x67, 0x75, 0x6e, 0x61, 0x08, 0x53, + 0x61, 0x6b, 0x61, 0x08, 0x4d, 0x75, 0x68, 0x2e, + 0x08, 0x53, 0x61, 0x66, 0x2e, 0x0c, 0x52, 0x61, + 0x62, 0x2e, 0x20, 0x49, 0x0e, 0x52, 0x61, 0x62, + 0x2e, 0x20, 0x49, 0x49, 0x0c, 0x4a, 0x75, 0x6d, + 0x2e, 0x20, 0x49, 0x0e, 0x4a, 0x75, 0x6d, 0x2e, + 0x20, 0x49, 0x49, 0x08, 0x52, 0x61, 0x6a, 0x2e, + 0x08, 0x53, 0x68, 0x61, 0x2e, 0x08, 0x52, 0x61, + 0x6d, 0x2e, 0x0a, 0x53, 0x68, 0x61, 0x77, 0x2e, + 0x11, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, + 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x51, 0x00, 0x2e, + 0x00, 0x11, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, + 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x48, 0x00, + 0x2e, 0x00, 0x10, 0x4d, 0x75, 0x68, 0x61, 0x72, + 0x72, 0x61, 0x6d, 0x0a, 0x53, 0x61, 0x66, 0x61, + 0x72, 0x0f, 0x52, 0x00, 0x61, 0x00, 0x62, 0x00, + 0x69, 0x00, 0xbb, 0x02, 0x20, 0x00, 0x49, 0x00, + 0x11, 0x52, 0x00, 0x61, 0x00, 0x62, 0x00, 0x69, + 0x00, 0xbb, 0x02, 0x20, 0x00, 0x49, 0x00, 0x49, + 0x00, 0x10, 0x4a, 0x75, 0x6d, 0x61, 0x64, 0x61, + 0x20, 0x49, 0x12, 0x4a, 0x75, 0x6d, 0x61, 0x64, + 0x61, 0x20, 0x49, 0x49, 0x0a, 0x52, 0x61, 0x6a, + 0x61, 0x62, 0x0f, 0x53, 0x00, 0x68, 0x00, 0x61, + 0x00, 0xbb, 0x02, 0x62, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x0e, 0x52, 0x61, 0x6d, 0x61, 0x64, 0x61, + 0x6e, 0x0e, 0x53, 0x68, 0x61, 0x77, 0x77, 0x61, + 0x6c, 0x19, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, + 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x51, 0x00, + 0x69, 0x00, 0xbb, 0x02, 0x64, 0x00, 0x61, 0x00, + 0x68, 0x00, 0x19, 0x44, 0x00, 0x68, 0x00, 0x75, + 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x48, + 0x00, 0x69, 0x00, 0x6a, 0x00, 0x6a, 0x00, 0x61, + 0x00, 0x68, 0x00, 0x04, 0x41, 0x48, 0x1f, 0x54, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x36, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x36, 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x75, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1f, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x1d, 0x57, 0x00, 0x61, 0x00, 0x64, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x52, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x1d, 0x59, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1f, 0x4a, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, + 0x6b, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x2b, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x2d, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x2d, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x2a, 0x4a, 0x69, 0x6e, 0x67, + 0x6f, 0x2d, 0x6b, 0x65, 0x69, 0x75, 0x6e, 0x20, + 0x28, 0x37, 0x36, 0x37, 0x2d, 0x37, 0x37, 0x30, + 0x29, 0x1d, 0x48, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x1f, 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, 0x64, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x4d, 0x01, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, + 0x4a, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x61, + 0x00, 0x6a, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1f, 0x53, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x20, + 0x54, 0x65, 0x6e, 0x2d, 0x61, 0x6e, 0x20, 0x28, + 0x38, 0x35, 0x37, 0x2d, 0x38, 0x35, 0x39, 0x29, + 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, + 0x47, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1d, 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, + 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x34, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1b, 0x4c, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1d, 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x41, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, 0x4a, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x4a, 0x00, 0x69, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x29, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x27, 0x4a, 0x00, 0x69, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x45, 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4c, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x61, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x25, 0x4a, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x24, 0x54, 0x65, 0x6e, 0x2d, + 0x65, 0x69, 0x20, 0x28, 0x31, 0x31, 0x31, 0x30, + 0x2d, 0x31, 0x31, 0x31, 0x33, 0x29, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x44, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x45, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x6a, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x48, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x27, 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, + 0x4c, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x6d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x4a, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x59, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x75, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x29, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x21, 0x4a, 0x00, 0x4d, 0x01, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x27, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x75, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x29, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x74, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x29, 0x52, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x45, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4c, + 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x61, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x48, + 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x27, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x4c, + 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x45, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x27, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4a, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x27, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x61, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x41, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x4d, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x02, 0x54, 0x02, 0x53, 0x0a, 0x4d, 0x65, + 0x69, 0x6a, 0x69, 0x0d, 0x54, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x0b, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x0c, 0x48, 0x65, 0x69, 0x73, + 0x65, 0x69, 0x12, 0x46, 0x61, 0x72, 0x76, 0x61, + 0x72, 0x64, 0x69, 0x6e, 0x16, 0x4f, 0x72, 0x64, + 0x69, 0x62, 0x65, 0x68, 0x65, 0x73, 0x68, 0x74, + 0x0e, 0x4b, 0x68, 0x6f, 0x72, 0x64, 0x61, 0x64, + 0x06, 0x54, 0x69, 0x72, 0x0c, 0x4d, 0x6f, 0x72, + 0x64, 0x61, 0x64, 0x12, 0x53, 0x68, 0x61, 0x68, + 0x72, 0x69, 0x76, 0x61, 0x72, 0x08, 0x4d, 0x65, + 0x68, 0x72, 0x08, 0x41, 0x62, 0x61, 0x6e, 0x08, + 0x41, 0x7a, 0x61, 0x72, 0x06, 0x44, 0x65, 0x79, + 0x0c, 0x42, 0x61, 0x68, 0x6d, 0x61, 0x6e, 0x0c, + 0x45, 0x73, 0x66, 0x61, 0x6e, 0x64, 0x04, 0x41, + 0x50, 0x1a, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, + 0x20, 0x52, 0x2e, 0x4f, 0x2e, 0x43, 0x2e, 0x0c, + 0x52, 0x2e, 0x4f, 0x2e, 0x43, 0x2e, 0x12, 0x63, + 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, 0x73, + 0x08, 0x64, 0x61, 0x74, 0x65, 0x08, 0x6c, 0x61, + 0x74, 0x6e, 0x04, 0x6e, 0x75, 0x10, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x50, + 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x26, 0x7b, + 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0x1e, 0x6e, 0x65, 0x67, 0x61, 0x74, + 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, + 0x72, 0x6e, 0x0e, 0x64, 0x65, 0x63, 0x69, 0x6d, + 0x61, 0x6c, 0x26, 0x7b, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x63, 0x79, 0x7d, 0xa0, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x3c, 0x7b, + 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x7d, 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x63, 0x79, 0x7d, 0xa0, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x10, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x2a, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x7b, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x40, 0x7b, 0x6d, 0x69, + 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x0e, 0x70, 0x65, + 0x72, 0x63, 0x65, 0x6e, 0x74, 0x24, 0x73, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x61, 0x72, 0x79, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x53, 0x69, 0x7a, 0x65, + 0x10, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, + 0x73, 0x02, 0x2e, 0x02, 0x2c, 0x0a, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x06, 0x4e, 0x61, 0x4e, 0x06, + 0x6e, 0x61, 0x6e, 0x02, 0x2b, 0x10, 0x70, 0x6c, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, 0x2d, + 0x12, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, + 0x67, 0x6e, 0x02, 0x25, 0x16, 0x70, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, + 0x03, 0x1e, 0x22, 0x10, 0x69, 0x6e, 0x66, 0x69, + 0x6e, 0x69, 0x74, 0x79, 0x0e, 0x74, 0x61, 0x6d, + 0x6c, 0x64, 0x65, 0x63, 0x0e, 0x73, 0x79, 0x6d, + 0x62, 0x6f, 0x6c, 0x73, 0x04, 0x41, 0x24, 0x06, + 0x41, 0x55, 0x44, 0x04, 0x52, 0x24, 0x06, 0x42, + 0x52, 0x4c, 0x06, 0x43, 0x41, 0x24, 0x06, 0x43, + 0x41, 0x44, 0x06, 0x43, 0x4e, 0xa5, 0x06, 0x43, + 0x4e, 0x59, 0x03, 0xac, 0x20, 0x06, 0x45, 0x55, + 0x52, 0x02, 0xa3, 0x06, 0x47, 0x42, 0x50, 0x06, + 0x48, 0x4b, 0x24, 0x06, 0x48, 0x4b, 0x44, 0x03, + 0xaa, 0x20, 0x06, 0x49, 0x4c, 0x53, 0x03, 0xb9, + 0x20, 0x06, 0x49, 0x4e, 0x52, 0x02, 0xa5, 0x06, + 0x4a, 0x50, 0x59, 0x03, 0xa9, 0x20, 0x06, 0x4b, + 0x52, 0x57, 0x06, 0x4d, 0x58, 0x24, 0x06, 0x4d, + 0x58, 0x4e, 0x06, 0x4e, 0x5a, 0x24, 0x06, 0x4e, + 0x5a, 0x44, 0x03, 0x3f, 0x0e, 0x06, 0x54, 0x48, + 0x42, 0x06, 0x4e, 0x54, 0x24, 0x06, 0x54, 0x57, + 0x44, 0x02, 0x24, 0x06, 0x55, 0x53, 0x44, 0x03, + 0xab, 0x20, 0x06, 0x56, 0x4e, 0x44, 0x08, 0x46, + 0x43, 0x46, 0x41, 0x06, 0x58, 0x41, 0x46, 0x06, + 0x45, 0x43, 0x24, 0x06, 0x58, 0x43, 0x44, 0x06, + 0x43, 0x46, 0x41, 0x06, 0x58, 0x4f, 0x46, 0x08, + 0x43, 0x46, 0x50, 0x46, 0x06, 0x58, 0x50, 0x46, + 0x14, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, + 0x69, 0x65, 0x73, 0x52, 0x6e, 0x6f, 0x64, 0x65, + 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, + 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2f, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, + 0x61, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x70, 0x2f, + 0x74, 0x61, 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, + 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, 0x27, 0x00, + 0x89, 0x01, 0xc4, 0x6b, 0x01, 0xa0, 0x01, 0x00, + 0x00, 0x00, 0x39, 0xd0, 0x00, 0x00, 0x00, 0x43, + 0xd1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd2, 0x00, + 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd4, 0x00, 0x00, 0x00, 0x04, 0xd5, 0x00, + 0x00, 0x00, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x04, + 0xd7, 0x00, 0x00, 0x00, 0x04, 0xd8, 0x00, 0x00, + 0x00, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x04, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xdb, 0x00, 0x00, 0x00, + 0x04, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xdd, 0x00, + 0x00, 0x00, 0x04, 0xde, 0x00, 0x00, 0x00, 0x04, + 0xdf, 0x00, 0x00, 0x00, 0x04, 0xe0, 0x00, 0x00, + 0x00, 0x04, 0xe1, 0x00, 0x00, 0x00, 0x04, 0xe2, + 0x00, 0x00, 0x00, 0x26, 0x0f, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x00, 0x0a, 0x4d, 0xe4, 0x00, 0x00, + 0x00, 0x0a, 0x4d, 0xe5, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, + 0xe8, 0x00, 0x00, 0x00, 0x04, 0xe9, 0x00, 0x00, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x04, 0xe9, + 0x00, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0xec, + 0x00, 0x00, 0x00, 0x04, 0xed, 0x00, 0x00, 0x00, + 0x4d, 0xee, 0x00, 0x00, 0x00, 0x04, 0xef, 0x00, + 0x00, 0x00, 0x4d, 0xf0, 0x00, 0x00, 0x00, 0x04, + 0xf1, 0x00, 0x00, 0x00, 0x4d, 0xf2, 0x00, 0x00, + 0x00, 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, 0xf4, + 0x00, 0x00, 0x00, 0x04, 0xf5, 0x00, 0x00, 0x00, + 0x4d, 0xf6, 0x00, 0x00, 0x00, 0x04, 0xf7, 0x00, + 0x00, 0x00, 0x4d, 0xf8, 0x00, 0x00, 0x00, 0x04, + 0xf9, 0x00, 0x00, 0x00, 0x4d, 0xfa, 0x00, 0x00, + 0x00, 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, 0xfc, + 0x00, 0x00, 0x00, 0x04, 0xfd, 0x00, 0x00, 0x00, + 0x4d, 0xfe, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x01, 0x00, 0x00, 0x04, + 0x01, 0x01, 0x00, 0x00, 0x4d, 0x02, 0x01, 0x00, + 0x00, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0x04, + 0x01, 0x00, 0x00, 0x04, 0x05, 0x01, 0x00, 0x00, + 0x4d, 0x06, 0x01, 0x00, 0x00, 0x04, 0x07, 0x01, + 0x00, 0x00, 0x4d, 0x08, 0x01, 0x00, 0x00, 0x04, + 0x09, 0x01, 0x00, 0x00, 0x4d, 0x0a, 0x01, 0x00, + 0x00, 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, 0x0c, + 0x01, 0x00, 0x00, 0x04, 0x0d, 0x01, 0x00, 0x00, + 0x4d, 0x0e, 0x01, 0x00, 0x00, 0x04, 0x0f, 0x01, + 0x00, 0x00, 0x4d, 0x10, 0x01, 0x00, 0x00, 0x04, + 0x11, 0x01, 0x00, 0x00, 0x4d, 0x12, 0x01, 0x00, + 0x00, 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, 0x14, + 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x4d, 0x16, 0x01, 0x00, 0x00, 0x04, 0x17, 0x01, + 0x00, 0x00, 0x4d, 0x18, 0x01, 0x00, 0x00, 0x04, + 0x19, 0x01, 0x00, 0x00, 0x4d, 0x1a, 0x01, 0x00, + 0x00, 0x04, 0x1b, 0x01, 0x00, 0x00, 0x4d, 0x1c, + 0x01, 0x00, 0x00, 0x04, 0x1d, 0x01, 0x00, 0x00, + 0x4d, 0x1e, 0x01, 0x00, 0x00, 0x04, 0x1f, 0x01, + 0x00, 0x00, 0x4d, 0x20, 0x01, 0x00, 0x00, 0x04, + 0x21, 0x01, 0x00, 0x00, 0x4d, 0x22, 0x01, 0x00, + 0x00, 0x04, 0x23, 0x01, 0x00, 0x00, 0x4d, 0x24, + 0x01, 0x00, 0x00, 0x04, 0x25, 0x01, 0x00, 0x00, + 0x4d, 0x26, 0x01, 0x00, 0x00, 0x04, 0x27, 0x01, + 0x00, 0x00, 0x4d, 0x27, 0x01, 0x00, 0x00, 0x04, + 0x28, 0x01, 0x00, 0x00, 0x4d, 0x29, 0x01, 0x00, + 0x00, 0x04, 0x2a, 0x01, 0x00, 0x00, 0x4d, 0x2b, + 0x01, 0x00, 0x00, 0x04, 0x2c, 0x01, 0x00, 0x00, + 0x4d, 0x2d, 0x01, 0x00, 0x00, 0x04, 0x2e, 0x01, + 0x00, 0x00, 0x4d, 0x2f, 0x01, 0x00, 0x00, 0x04, + 0x30, 0x01, 0x00, 0x00, 0x4d, 0x31, 0x01, 0x00, + 0x00, 0x04, 0x32, 0x01, 0x00, 0x00, 0x4d, 0x33, + 0x01, 0x00, 0x00, 0x04, 0x34, 0x01, 0x00, 0x00, + 0x4d, 0x35, 0x01, 0x00, 0x00, 0x04, 0x36, 0x01, + 0x00, 0x00, 0x4d, 0x37, 0x01, 0x00, 0x00, 0x04, + 0x38, 0x01, 0x00, 0x00, 0x4d, 0x39, 0x01, 0x00, + 0x00, 0x04, 0x3a, 0x01, 0x00, 0x00, 0x4d, 0x3b, + 0x01, 0x00, 0x00, 0x4d, 0x3c, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x3d, 0x01, 0x00, 0x00, 0x4d, 0x3e, + 0x01, 0x00, 0x00, 0x04, 0x3f, 0x01, 0x00, 0x00, + 0x4d, 0x40, 0x01, 0x00, 0x00, 0x04, 0x32, 0x01, + 0x00, 0x00, 0x4d, 0x33, 0x01, 0x00, 0x00, 0x04, + 0x41, 0x01, 0x00, 0x00, 0x4d, 0x2b, 0x01, 0x00, + 0x00, 0x4d, 0x42, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x43, 0x01, 0x00, 0x00, 0x4d, 0x44, 0x01, 0x00, + 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, 0x4d, 0x46, + 0x01, 0x00, 0x00, 0x04, 0x09, 0x01, 0x00, 0x00, + 0x4d, 0x0a, 0x01, 0x00, 0x00, 0x04, 0x05, 0x01, + 0x00, 0x00, 0x4d, 0x06, 0x01, 0x00, 0x00, 0x4d, + 0x47, 0x01, 0x00, 0x00, 0x4d, 0x48, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x0b, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x7d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x80, 0x01, 0x00, 0x00, 0x4d, + 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, + 0x00, 0x4d, 0x83, 0x01, 0x00, 0x00, 0x4d, 0x84, + 0x01, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x00, 0xbe, 0x01, 0xbe, 0x02, + 0xbe, 0x03, 0xbe, 0x04, 0xbe, 0x05, 0xbe, 0x06, + 0xbe, 0x07, 0xbe, 0x08, 0xbe, 0x09, 0xbe, 0x0a, + 0xbe, 0x0b, 0x26, 0x0c, 0x00, 0x4d, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, + 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, + 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, + 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, + 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, + 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, + 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, + 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x91, + 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, + 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, + 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, + 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, + 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, + 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, + 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, + 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x4d, 0x83, + 0x01, 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, + 0x4d, 0xd6, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x0c, 0xbe, 0x0d, 0xbe, 0x0e, 0xbe, 0x0f, 0xbe, + 0x10, 0xbe, 0x11, 0xbe, 0x12, 0xbe, 0x13, 0xbe, + 0x14, 0xbe, 0x15, 0xbe, 0x16, 0xbe, 0x17, 0xbe, + 0x18, 0x26, 0x0d, 0x00, 0x4d, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, + 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, + 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, + 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, + 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, + 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, + 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, + 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, + 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, + 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, + 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, + 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, + 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, + 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, + 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x54, 0x01, + 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, + 0xab, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, + 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7f, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x4d, 0x83, 0x01, 0x00, 0x00, + 0x4d, 0x84, 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x19, 0xbe, 0x1a, + 0xbe, 0x1b, 0xbe, 0x1c, 0xbe, 0x1d, 0xbe, 0x1e, + 0xbe, 0x1f, 0xbe, 0x20, 0xbe, 0x21, 0xbe, 0x22, + 0xbe, 0x23, 0xbe, 0x24, 0x26, 0x0c, 0x00, 0x4d, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, + 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, + 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, + 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, + 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, + 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, + 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, + 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, + 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, + 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, + 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, + 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, + 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, + 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, + 0x9c, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x54, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, + 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, + 0x4d, 0x83, 0x01, 0x00, 0x00, 0x4d, 0x84, 0x01, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x25, 0xbe, 0x26, 0xbe, 0x27, 0xbe, + 0x28, 0xbe, 0x29, 0xbe, 0x2a, 0xbe, 0x2b, 0xbe, + 0x2c, 0xbe, 0x2d, 0xbe, 0x2e, 0xbe, 0x2f, 0xbe, + 0x30, 0xbe, 0x31, 0x26, 0x0d, 0x00, 0x4d, 0x54, + 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, + 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, + 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, + 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, + 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, 0xb3, + 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, 0x00, + 0x04, 0xb5, 0x01, 0x00, 0x00, 0x04, 0xb6, 0x01, + 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, + 0xb8, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, + 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, 0xae, + 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, + 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, + 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, + 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, + 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, 0x04, 0xb6, + 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, + 0x04, 0xb8, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x54, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, + 0xab, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0x54, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, + 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xaa, + 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x4d, 0x83, 0x01, + 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x32, + 0xbe, 0x33, 0xbe, 0x34, 0xbe, 0x35, 0xbe, 0x36, + 0xbe, 0x37, 0xbe, 0x38, 0xbe, 0x39, 0xbe, 0x3a, + 0xbe, 0x3b, 0xbe, 0x3c, 0xbe, 0x3d, 0xbe, 0x3e, + 0x26, 0x0d, 0x00, 0x4d, 0x54, 0x01, 0x00, 0x00, + 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, + 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, + 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, + 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, + 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, + 0x04, 0xb4, 0x01, 0x00, 0x00, 0x04, 0xb5, 0x01, + 0x00, 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, 0x04, + 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, + 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, + 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, + 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, 0x04, + 0xb2, 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, + 0x00, 0x04, 0xb4, 0x01, 0x00, 0x00, 0x04, 0xb5, + 0x01, 0x00, 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, + 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xaa, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x54, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7f, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x4d, 0x83, 0x01, 0x00, 0x00, + 0x4d, 0x84, 0x01, 0x00, 0x00, 0x4d, 0xd9, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x3f, 0xbe, 0x40, + 0xbe, 0x41, 0xbe, 0x42, 0xbe, 0x43, 0xbe, 0x44, + 0xbe, 0x45, 0xbe, 0x46, 0xbe, 0x47, 0xbe, 0x48, + 0xbe, 0x49, 0xbe, 0x4a, 0x26, 0x0c, 0x00, 0x4d, + 0x54, 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, + 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, 0x04, 0xbb, + 0x01, 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, + 0x04, 0xbd, 0x01, 0x00, 0x00, 0x04, 0xbe, 0x01, + 0x00, 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, 0x04, + 0xc0, 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, + 0x00, 0x04, 0xc2, 0x01, 0x00, 0x00, 0x04, 0xc3, + 0x01, 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, + 0x00, 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, + 0xbc, 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, + 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, + 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, + 0x04, 0xc1, 0x01, 0x00, 0x00, 0x04, 0xc2, 0x01, + 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, 0x04, + 0xc4, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x54, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x54, + 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, + 0x04, 0xab, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xaa, 0x01, + 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x7f, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x04, + 0x82, 0x01, 0x00, 0x00, 0x4d, 0x83, 0x01, 0x00, + 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xc5, + 0x01, 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, 0x00, + 0x04, 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, 0x01, + 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, 0x54, 0x01, + 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, 0x04, + 0xc6, 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, + 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, 0x26, 0x04, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xc9, + 0x01, 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, + 0x04, 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, 0x01, + 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, + 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x4d, + 0x83, 0x01, 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, + 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x4b, 0xbe, 0x4c, 0xbe, 0x4d, 0xbe, 0x4e, + 0xbe, 0x4f, 0xbe, 0x50, 0xbe, 0x51, 0xbe, 0x52, + 0xbe, 0x53, 0xbe, 0x54, 0xbe, 0x55, 0xbe, 0x56, + 0xbe, 0x57, 0xbe, 0x58, 0x26, 0x0e, 0x00, 0x4d, + 0x54, 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, + 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, + 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, + 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, 0x01, + 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, 0x04, + 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, + 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, 0xd5, + 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, + 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, 0xd8, 0x01, + 0x00, 0x00, 0x26, 0x0e, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, 0x04, + 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, + 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, 0x04, 0xcf, + 0x01, 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, + 0x04, 0xd1, 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, + 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, + 0xd4, 0x01, 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, + 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, + 0x01, 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, + 0x26, 0x0e, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x7d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x54, 0x01, + 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xd9, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x80, 0x01, 0x00, 0x00, 0x4d, + 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, + 0x00, 0x4d, 0x83, 0x01, 0x00, 0x00, 0x4d, 0x84, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x59, 0xbe, 0x5a, 0xbe, 0x5b, + 0xbe, 0x5c, 0xbe, 0x5d, 0xbe, 0x5e, 0xbe, 0x5f, + 0xbe, 0x60, 0xbe, 0x61, 0xbe, 0x62, 0xbe, 0x63, + 0xbe, 0x64, 0x26, 0x0c, 0x00, 0x4d, 0x54, 0x01, + 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, + 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, + 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, + 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, + 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, + 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, + 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, + 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xda, + 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, + 0x04, 0xdc, 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, + 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, + 0xdf, 0x01, 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, + 0x00, 0x04, 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, + 0x01, 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, + 0x04, 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xe6, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x54, 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7f, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x4d, 0x83, 0x01, 0x00, 0x00, + 0x4d, 0x84, 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x65, 0xbe, 0x66, + 0xbe, 0x67, 0xbe, 0x68, 0xbe, 0x69, 0xbe, 0x6a, + 0xbe, 0x6b, 0xbe, 0x6c, 0xbe, 0x6d, 0xbe, 0x6e, + 0xbe, 0x6f, 0xbe, 0x70, 0x26, 0x0c, 0x00, 0x4d, + 0x54, 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, + 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, + 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, + 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, + 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, + 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, + 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, + 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, + 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, + 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, + 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, + 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, + 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, + 0x00, 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, + 0xfe, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x54, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xff, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x54, 0x01, 0x00, 0x00, 0x04, 0xff, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x4d, 0x83, 0x01, + 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x71, + 0xbe, 0x72, 0xbe, 0x73, 0xbe, 0x74, 0xbe, 0x75, + 0xbe, 0x76, 0xbe, 0x77, 0xbe, 0x78, 0xbe, 0x79, + 0xbe, 0x7a, 0xbe, 0x7b, 0xbe, 0x7c, 0x26, 0x0c, + 0x00, 0x4d, 0x54, 0x01, 0x00, 0x00, 0x04, 0xe7, + 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, + 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, + 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, + 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, + 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, + 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, + 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, + 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, + 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, + 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, + 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, + 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, + 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, 0x01, 0x00, + 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x69, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7d, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xff, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x54, 0x01, 0x00, 0x00, + 0x04, 0xff, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xff, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, + 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x4d, + 0x83, 0x01, 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x54, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, + 0x02, 0x00, 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, + 0x04, 0x03, 0x02, 0x00, 0x00, 0x04, 0x04, 0x02, + 0x00, 0x00, 0x04, 0x05, 0x02, 0x00, 0x00, 0x04, + 0x06, 0x02, 0x00, 0x00, 0x04, 0x07, 0x02, 0x00, + 0x00, 0x04, 0x08, 0x02, 0x00, 0x00, 0x04, 0x09, + 0x02, 0x00, 0x00, 0x04, 0x0a, 0x02, 0x00, 0x00, + 0x04, 0x0b, 0x02, 0x00, 0x00, 0x04, 0x0c, 0x02, + 0x00, 0x00, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x04, + 0x0e, 0x02, 0x00, 0x00, 0x04, 0x0f, 0x02, 0x00, + 0x00, 0x04, 0x10, 0x02, 0x00, 0x00, 0x04, 0x11, + 0x02, 0x00, 0x00, 0x04, 0x12, 0x02, 0x00, 0x00, + 0x04, 0x13, 0x02, 0x00, 0x00, 0x04, 0x14, 0x02, + 0x00, 0x00, 0x04, 0x15, 0x02, 0x00, 0x00, 0x04, + 0x16, 0x02, 0x00, 0x00, 0x04, 0x17, 0x02, 0x00, + 0x00, 0x04, 0x18, 0x02, 0x00, 0x00, 0x04, 0x19, + 0x02, 0x00, 0x00, 0x04, 0x1a, 0x02, 0x00, 0x00, + 0x04, 0x1b, 0x02, 0x00, 0x00, 0x04, 0x1c, 0x02, + 0x00, 0x00, 0x04, 0x1d, 0x02, 0x00, 0x00, 0x04, + 0x1e, 0x02, 0x00, 0x00, 0x04, 0x1f, 0x02, 0x00, + 0x00, 0x26, 0x20, 0x00, 0x04, 0x20, 0x02, 0x00, + 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0x21, + 0x02, 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, + 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, + 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, + 0x23, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, + 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x25, + 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, + 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, + 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, + 0x27, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, + 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x29, + 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, + 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, + 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, + 0x2b, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, + 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x2d, + 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, + 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, + 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, + 0x2f, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, + 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x31, + 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, + 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, + 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, + 0x33, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, + 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x35, + 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, + 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, + 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, + 0x37, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, + 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x39, + 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, + 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, + 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, + 0x3b, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, + 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x3d, + 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, + 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, + 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, + 0x3f, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, + 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x41, + 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, + 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, + 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, + 0x43, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, + 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x45, + 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, + 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, + 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, + 0x47, 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, + 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x49, + 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, + 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, + 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, + 0x4b, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, + 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x4d, + 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, + 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, + 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, + 0x4f, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, + 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x51, + 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, + 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, + 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, + 0x53, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, + 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x55, + 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, + 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, + 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, + 0x57, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, + 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x59, + 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, + 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, + 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, + 0x5b, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, + 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x5d, + 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, + 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, + 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, + 0x5f, 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, + 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x61, + 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, + 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, + 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, + 0x63, 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, + 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x65, + 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, + 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, + 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, + 0x67, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, + 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x69, + 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, + 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, + 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, + 0x6b, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, + 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x6d, + 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, + 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, + 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, + 0x6f, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, + 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x71, + 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, + 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, + 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, + 0x73, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, + 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x75, + 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, + 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, + 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, + 0x77, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, + 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x79, + 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, + 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, + 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, + 0x7b, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, + 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x7d, + 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, + 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, + 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, + 0x7f, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, + 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x81, + 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, + 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, + 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, + 0x83, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, + 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x85, + 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, + 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, + 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, + 0x87, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, + 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x89, + 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, + 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, + 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, + 0x8b, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, + 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x8d, + 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, + 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, + 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, + 0x8f, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, + 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x91, + 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, + 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, + 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, + 0x93, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, + 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x95, + 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, + 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, + 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, + 0x97, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, + 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x99, + 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, + 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, + 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, + 0x9b, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, + 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x9d, + 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, + 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, + 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, + 0x9f, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, + 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0xa1, + 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, + 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, + 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, + 0xa3, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, + 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0xa5, + 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, + 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, + 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, + 0xa7, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, + 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0xa9, + 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, + 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, + 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, + 0xab, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, + 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0xad, + 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, + 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, + 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, + 0xaf, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, + 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0xb1, + 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, + 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, + 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, + 0xb3, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, + 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0xb5, + 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, + 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, + 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, + 0xb7, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, + 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0xb9, + 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, + 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, + 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, + 0xbb, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, + 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0xbd, + 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, + 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, + 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, + 0xbf, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, + 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0xc1, + 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, + 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, + 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, + 0xc3, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, + 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xc5, + 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, + 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, + 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, + 0xc7, 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xc9, + 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, + 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, + 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, + 0xcb, 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, + 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xcd, + 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, + 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, + 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, 0x4d, + 0xcf, 0x00, 0x00, 0x80, 0x04, 0xd0, 0x02, 0x00, + 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xd1, + 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, + 0x04, 0xd2, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, + 0x00, 0x80, 0x04, 0xd3, 0x02, 0x00, 0x00, 0x4d, + 0xd3, 0x00, 0x00, 0x80, 0x04, 0xd4, 0x02, 0x00, + 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xd5, + 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, + 0x04, 0xd6, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, + 0x00, 0x80, 0x04, 0xd7, 0x02, 0x00, 0x00, 0x4d, + 0xd7, 0x00, 0x00, 0x80, 0x04, 0xd8, 0x02, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xd9, + 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, + 0x04, 0xda, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x80, 0x04, 0xdb, 0x02, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x80, 0x04, 0xdc, 0x02, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xdd, + 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, + 0x04, 0xde, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x80, 0x04, 0xdf, 0x02, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x80, 0x04, 0xe0, 0x02, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xe1, + 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, + 0x04, 0xe2, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x80, 0x04, 0xe3, 0x02, 0x00, 0x00, 0x4d, + 0xe3, 0x00, 0x00, 0x80, 0x04, 0xe4, 0x02, 0x00, + 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xe5, + 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, + 0x04, 0xe6, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, + 0x00, 0x80, 0x04, 0xe7, 0x02, 0x00, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x80, 0x04, 0x16, 0x01, 0x00, + 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xe8, + 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, + 0x04, 0xe9, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x80, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x80, 0x4d, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, + 0x02, 0x00, 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, + 0x04, 0x03, 0x02, 0x00, 0x00, 0x04, 0x04, 0x02, + 0x00, 0x00, 0x04, 0x05, 0x02, 0x00, 0x00, 0x04, + 0x06, 0x02, 0x00, 0x00, 0x04, 0x07, 0x02, 0x00, + 0x00, 0x04, 0x08, 0x02, 0x00, 0x00, 0x04, 0x09, + 0x02, 0x00, 0x00, 0x04, 0x0a, 0x02, 0x00, 0x00, + 0x04, 0x0b, 0x02, 0x00, 0x00, 0x04, 0x0c, 0x02, + 0x00, 0x00, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x04, + 0x0e, 0x02, 0x00, 0x00, 0x04, 0x0f, 0x02, 0x00, + 0x00, 0x04, 0x10, 0x02, 0x00, 0x00, 0x04, 0x11, + 0x02, 0x00, 0x00, 0x04, 0x12, 0x02, 0x00, 0x00, + 0x04, 0x13, 0x02, 0x00, 0x00, 0x04, 0x14, 0x02, + 0x00, 0x00, 0x04, 0x15, 0x02, 0x00, 0x00, 0x04, + 0x16, 0x02, 0x00, 0x00, 0x04, 0x17, 0x02, 0x00, + 0x00, 0x04, 0x18, 0x02, 0x00, 0x00, 0x04, 0x19, + 0x02, 0x00, 0x00, 0x04, 0x1a, 0x02, 0x00, 0x00, + 0x04, 0x1b, 0x02, 0x00, 0x00, 0x04, 0x1c, 0x02, + 0x00, 0x00, 0x04, 0x1d, 0x02, 0x00, 0x00, 0x04, + 0x1e, 0x02, 0x00, 0x00, 0x04, 0x1f, 0x02, 0x00, + 0x00, 0x26, 0x20, 0x00, 0x04, 0x20, 0x02, 0x00, + 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0x21, + 0x02, 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, + 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, + 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, + 0x23, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, + 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x25, + 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, + 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, + 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, + 0x27, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, + 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x29, + 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, + 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, + 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, + 0x2b, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, + 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x2d, + 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, + 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, + 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, + 0x2f, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, + 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x31, + 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, + 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, + 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, + 0x33, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, + 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x35, + 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, + 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, + 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, + 0x37, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, + 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x39, + 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, + 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, + 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, + 0x3b, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, + 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x3d, + 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, + 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, + 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, + 0x3f, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, + 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x41, + 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, + 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, + 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, + 0x43, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, + 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x45, + 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, + 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, + 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, + 0x47, 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, + 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x49, + 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, + 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, + 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, + 0x4b, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, + 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x4d, + 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, + 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, + 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, + 0x4f, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, + 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x51, + 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, + 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, + 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, + 0x53, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, + 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x55, + 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, + 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, + 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, + 0x57, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, + 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x59, + 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, + 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, + 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, + 0x5b, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, + 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x5d, + 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, + 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, + 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, + 0x5f, 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, + 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x61, + 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, + 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, + 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, + 0x63, 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, + 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x65, + 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, + 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, + 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, + 0x67, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, + 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x69, + 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, + 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, + 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, + 0x6b, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, + 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x6d, + 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, + 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, + 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, + 0x6f, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, + 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x71, + 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, + 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, + 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, + 0x73, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, + 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x75, + 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, + 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, + 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, + 0x77, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, + 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x79, + 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, + 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, + 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, + 0x7b, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, + 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x7d, + 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, + 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, + 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, + 0x7f, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, + 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x81, + 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, + 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, + 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, + 0x83, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, + 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x85, + 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, + 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, + 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, + 0x87, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, + 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x89, + 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, + 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, + 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, + 0x8b, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, + 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x8d, + 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, + 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, + 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, + 0x8f, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, + 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x91, + 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, + 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, + 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, + 0x93, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, + 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x95, + 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, + 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, + 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, + 0x97, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, + 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x99, + 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, + 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, + 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, + 0x9b, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, + 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x9d, + 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, + 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, + 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, + 0x9f, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, + 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0xa1, + 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, + 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, + 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, + 0xa3, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, + 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0xa5, + 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, + 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, + 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, + 0xa7, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, + 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0xa9, + 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, + 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, + 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, + 0xab, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, + 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0xad, + 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, + 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, + 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, + 0xaf, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, + 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0xb1, + 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, + 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, + 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, + 0xb3, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, + 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0xb5, + 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, + 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, + 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, + 0xb7, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, + 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0xb9, + 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, + 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, + 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, + 0xbb, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, + 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0xbd, + 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, + 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, + 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, + 0xbf, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, + 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0xc1, + 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, + 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, + 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, + 0xc3, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, + 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xc5, + 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, + 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, + 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, + 0xc7, 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xc9, + 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, + 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, + 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, + 0xcb, 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, + 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xcd, + 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, + 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, + 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, 0x4d, + 0xcf, 0x00, 0x00, 0x80, 0x04, 0xd0, 0x02, 0x00, + 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xd1, + 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, + 0x04, 0xd2, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, + 0x00, 0x80, 0x04, 0xd3, 0x02, 0x00, 0x00, 0x4d, + 0xd3, 0x00, 0x00, 0x80, 0x04, 0xd4, 0x02, 0x00, + 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xd5, + 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, + 0x04, 0xd6, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, + 0x00, 0x80, 0x04, 0xd7, 0x02, 0x00, 0x00, 0x4d, + 0xd7, 0x00, 0x00, 0x80, 0x04, 0xd8, 0x02, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xd9, + 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, + 0x04, 0xda, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x80, 0x04, 0xdb, 0x02, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x80, 0x04, 0xdc, 0x02, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xdd, + 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, + 0x04, 0xde, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x80, 0x04, 0xdf, 0x02, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x80, 0x04, 0xe0, 0x02, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xe1, + 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, + 0x04, 0xe2, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x80, 0x04, 0xe3, 0x02, 0x00, 0x00, 0x4d, + 0xe3, 0x00, 0x00, 0x80, 0x04, 0xe4, 0x02, 0x00, + 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xe5, + 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, + 0x04, 0xe6, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, + 0x00, 0x80, 0x04, 0xe7, 0x02, 0x00, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x80, 0x04, 0xea, 0x02, 0x00, + 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xeb, + 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, + 0x04, 0xec, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x80, 0x04, 0xed, 0x02, 0x00, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x80, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, + 0x02, 0x00, 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, + 0x04, 0x03, 0x02, 0x00, 0x00, 0x04, 0x04, 0x02, + 0x00, 0x00, 0x04, 0x05, 0x02, 0x00, 0x00, 0x04, + 0x06, 0x02, 0x00, 0x00, 0x04, 0x07, 0x02, 0x00, + 0x00, 0x04, 0x08, 0x02, 0x00, 0x00, 0x04, 0x09, + 0x02, 0x00, 0x00, 0x04, 0x0a, 0x02, 0x00, 0x00, + 0x04, 0x0b, 0x02, 0x00, 0x00, 0x04, 0x0c, 0x02, + 0x00, 0x00, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x04, + 0x0e, 0x02, 0x00, 0x00, 0x04, 0x0f, 0x02, 0x00, + 0x00, 0x04, 0x10, 0x02, 0x00, 0x00, 0x04, 0x11, + 0x02, 0x00, 0x00, 0x04, 0x12, 0x02, 0x00, 0x00, + 0x04, 0x13, 0x02, 0x00, 0x00, 0x04, 0x14, 0x02, + 0x00, 0x00, 0x04, 0x15, 0x02, 0x00, 0x00, 0x04, + 0x16, 0x02, 0x00, 0x00, 0x04, 0x17, 0x02, 0x00, + 0x00, 0x04, 0x18, 0x02, 0x00, 0x00, 0x04, 0x19, + 0x02, 0x00, 0x00, 0x04, 0x1a, 0x02, 0x00, 0x00, + 0x04, 0x1b, 0x02, 0x00, 0x00, 0x04, 0x1c, 0x02, + 0x00, 0x00, 0x04, 0x1d, 0x02, 0x00, 0x00, 0x04, + 0x1e, 0x02, 0x00, 0x00, 0x04, 0x1f, 0x02, 0x00, + 0x00, 0x26, 0x20, 0x00, 0x04, 0x20, 0x02, 0x00, + 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0x21, + 0x02, 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, + 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, + 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, + 0x23, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, + 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x25, + 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, + 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, + 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, + 0x27, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, + 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x29, + 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, + 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, + 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, + 0x2b, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, + 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x2d, + 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, + 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, + 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, + 0x2f, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, + 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x31, + 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, + 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, + 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, + 0x33, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, + 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x35, + 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, + 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, + 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, + 0x37, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, + 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x39, + 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, + 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, + 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, + 0x3b, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, + 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x3d, + 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, + 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, + 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, + 0x3f, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, + 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x41, + 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, + 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, + 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, + 0x43, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, + 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x45, + 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, + 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, + 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, + 0x47, 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, + 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x49, + 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, + 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, + 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, + 0x4b, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, + 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x4d, + 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, + 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, + 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, + 0x4f, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, + 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x51, + 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, + 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, + 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, + 0x53, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, + 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x55, + 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, + 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, + 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, + 0x57, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, + 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x59, + 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, + 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, + 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, + 0x5b, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, + 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x5d, + 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, + 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, + 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, + 0x5f, 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, + 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x61, + 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, + 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, + 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, + 0x63, 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, + 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x65, + 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, + 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, + 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, + 0x67, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, + 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x69, + 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, + 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, + 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, + 0x6b, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, + 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x6d, + 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, + 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, + 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, + 0x6f, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, + 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x71, + 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, + 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, + 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, + 0x73, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, + 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x75, + 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, + 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, + 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, + 0x77, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, + 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x79, + 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, + 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, + 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, + 0x7b, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, + 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x7d, + 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, + 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, + 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, + 0x7f, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, + 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x81, + 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, + 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, + 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, + 0x83, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, + 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x85, + 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, + 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, + 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, + 0x87, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, + 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x89, + 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, + 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, + 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, + 0x8b, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, + 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x8d, + 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, + 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, + 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, + 0x8f, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, + 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x91, + 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, + 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, + 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, + 0x93, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, + 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x95, + 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, + 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, + 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, + 0x97, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, + 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x99, + 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, + 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, + 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, + 0x9b, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, + 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x9d, + 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, + 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, + 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, + 0x9f, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, + 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0xa1, + 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, + 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, + 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, + 0xa3, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, + 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0xa5, + 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, + 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, + 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, + 0xa7, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, + 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0xa9, + 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, + 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, + 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, + 0xab, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, + 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0xad, + 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, + 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, + 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, + 0xaf, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, + 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0xb1, + 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, + 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, + 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, + 0xb3, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, + 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0xb5, + 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, + 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, + 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, + 0xb7, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, + 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0xb9, + 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, + 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, + 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, + 0xbb, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, + 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0xbd, + 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, + 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, + 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, + 0xbf, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, + 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0xc1, + 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, + 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, + 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, + 0xc3, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, + 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xc5, + 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, + 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, + 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, + 0xc7, 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xc9, + 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, + 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, + 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, + 0xcb, 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, + 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xcd, + 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, + 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, + 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, 0x4d, + 0xcf, 0x00, 0x00, 0x80, 0x04, 0xd0, 0x02, 0x00, + 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xd1, + 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, + 0x04, 0xd2, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, + 0x00, 0x80, 0x04, 0xd3, 0x02, 0x00, 0x00, 0x4d, + 0xd3, 0x00, 0x00, 0x80, 0x04, 0xd4, 0x02, 0x00, + 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xd5, + 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, + 0x04, 0xd6, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, + 0x00, 0x80, 0x04, 0xd7, 0x02, 0x00, 0x00, 0x4d, + 0xd7, 0x00, 0x00, 0x80, 0x04, 0xd8, 0x02, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xd9, + 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, + 0x04, 0xda, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x80, 0x04, 0xdb, 0x02, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x80, 0x04, 0xdc, 0x02, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xdd, + 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, + 0x04, 0xde, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x80, 0x04, 0xdf, 0x02, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x80, 0x04, 0xe0, 0x02, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xe1, + 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, + 0x04, 0xe2, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x80, 0x04, 0xe3, 0x02, 0x00, 0x00, 0x4d, + 0xe3, 0x00, 0x00, 0x80, 0x04, 0xe4, 0x02, 0x00, + 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xe5, + 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, + 0x04, 0xe6, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, + 0x00, 0x80, 0x04, 0xe7, 0x02, 0x00, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x80, 0x04, 0xea, 0x02, 0x00, + 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xeb, + 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, + 0x04, 0xec, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x80, 0x04, 0xed, 0x02, 0x00, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x80, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, + 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x4d, 0x83, + 0x01, 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x7d, 0xbe, 0x7e, 0xbe, 0x7f, 0xbe, 0x80, 0xbe, + 0x81, 0xbe, 0x82, 0xbe, 0x83, 0xbe, 0x84, 0xbe, + 0x85, 0xbe, 0x86, 0xbe, 0x87, 0xbe, 0x88, 0x26, + 0x0c, 0x00, 0x4d, 0x54, 0x01, 0x00, 0x00, 0x04, + 0xee, 0x02, 0x00, 0x00, 0x04, 0xef, 0x02, 0x00, + 0x00, 0x04, 0xf0, 0x02, 0x00, 0x00, 0x04, 0xf1, + 0x02, 0x00, 0x00, 0x04, 0xf2, 0x02, 0x00, 0x00, + 0x04, 0xf3, 0x02, 0x00, 0x00, 0x04, 0xf4, 0x02, + 0x00, 0x00, 0x04, 0xf5, 0x02, 0x00, 0x00, 0x04, + 0xf6, 0x02, 0x00, 0x00, 0x04, 0xf7, 0x02, 0x00, + 0x00, 0x04, 0xf8, 0x02, 0x00, 0x00, 0x04, 0xf9, + 0x02, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xee, 0x02, 0x00, 0x00, + 0x04, 0xef, 0x02, 0x00, 0x00, 0x04, 0xf0, 0x02, + 0x00, 0x00, 0x04, 0xf1, 0x02, 0x00, 0x00, 0x04, + 0xf2, 0x02, 0x00, 0x00, 0x04, 0xf3, 0x02, 0x00, + 0x00, 0x04, 0xf4, 0x02, 0x00, 0x00, 0x04, 0xf5, + 0x02, 0x00, 0x00, 0x04, 0xf6, 0x02, 0x00, 0x00, + 0x04, 0xf7, 0x02, 0x00, 0x00, 0x04, 0xf8, 0x02, + 0x00, 0x00, 0x04, 0xf9, 0x02, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7d, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xfa, 0x02, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x54, 0x01, 0x00, + 0x00, 0x04, 0xfa, 0x02, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xfa, + 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, + 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, + 0x4d, 0x83, 0x01, 0x00, 0x00, 0x4d, 0x84, 0x01, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x53, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x54, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xfb, 0x02, 0x00, 0x00, 0x04, + 0xfc, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0x54, 0x01, 0x00, 0x00, 0x04, 0xfb, 0x02, 0x00, + 0x00, 0x04, 0xfc, 0x02, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xfb, + 0x02, 0x00, 0x00, 0x04, 0xfc, 0x02, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x4d, 0x83, 0x01, + 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, 0x4d, + 0xe2, 0x00, 0x00, 0x00, 0x4d, 0xfd, 0x02, 0x00, + 0x00, 0x4d, 0xfe, 0x02, 0x00, 0x00, 0x0b, 0x04, + 0xff, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x00, 0x03, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x01, + 0x03, 0x00, 0x00, 0x4d, 0x02, 0x03, 0x00, 0x00, + 0x04, 0x03, 0x03, 0x00, 0x00, 0x4d, 0x04, 0x03, + 0x00, 0x00, 0x4d, 0x05, 0x03, 0x00, 0x00, 0x0b, + 0x04, 0x06, 0x03, 0x00, 0x00, 0x4d, 0x02, 0x03, + 0x00, 0x00, 0x04, 0x07, 0x03, 0x00, 0x00, 0x4d, + 0x04, 0x03, 0x00, 0x00, 0x4d, 0x08, 0x03, 0x00, + 0x00, 0x0b, 0x04, 0x09, 0x03, 0x00, 0x00, 0x4d, + 0x02, 0x03, 0x00, 0x00, 0x04, 0x0a, 0x03, 0x00, + 0x00, 0x4d, 0x04, 0x03, 0x00, 0x00, 0x4d, 0x0b, + 0x03, 0x00, 0x00, 0xb6, 0x4d, 0x0c, 0x03, 0x00, + 0x00, 0x4d, 0x0d, 0x03, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x0e, 0x03, 0x00, 0x00, 0x4d, 0x05, 0x03, + 0x00, 0x00, 0x04, 0x0f, 0x03, 0x00, 0x00, 0x4d, + 0x10, 0x03, 0x00, 0x00, 0x04, 0x11, 0x03, 0x00, + 0x00, 0x4d, 0x12, 0x03, 0x00, 0x00, 0x04, 0x13, + 0x03, 0x00, 0x00, 0x4d, 0x14, 0x03, 0x00, 0x00, + 0x04, 0x15, 0x03, 0x00, 0x00, 0x4d, 0x16, 0x03, + 0x00, 0x00, 0x04, 0x17, 0x03, 0x00, 0x00, 0x4d, + 0x18, 0x03, 0x00, 0x00, 0x04, 0x19, 0x03, 0x00, + 0x00, 0x4d, 0x1a, 0x03, 0x00, 0x00, 0x4d, 0xff, + 0x02, 0x00, 0x00, 0x0b, 0x04, 0x0e, 0x03, 0x00, + 0x00, 0x4d, 0x05, 0x03, 0x00, 0x00, 0x04, 0x0f, + 0x03, 0x00, 0x00, 0x4d, 0x10, 0x03, 0x00, 0x00, + 0x04, 0x11, 0x03, 0x00, 0x00, 0x4d, 0x12, 0x03, + 0x00, 0x00, 0x04, 0x13, 0x03, 0x00, 0x00, 0x4d, + 0x14, 0x03, 0x00, 0x00, 0x04, 0x15, 0x03, 0x00, + 0x00, 0x4d, 0x16, 0x03, 0x00, 0x00, 0x04, 0x17, + 0x03, 0x00, 0x00, 0x4d, 0x18, 0x03, 0x00, 0x00, + 0x04, 0x19, 0x03, 0x00, 0x00, 0x4d, 0x1a, 0x03, + 0x00, 0x00, 0x4d, 0x1b, 0x03, 0x00, 0x00, 0x4d, + 0x1c, 0x03, 0x00, 0x00, 0x0b, 0x04, 0x1d, 0x03, + 0x00, 0x00, 0x4d, 0x1e, 0x03, 0x00, 0x00, 0x04, + 0x1f, 0x03, 0x00, 0x00, 0x4d, 0x20, 0x03, 0x00, + 0x00, 0x04, 0x21, 0x03, 0x00, 0x00, 0x4d, 0x22, + 0x03, 0x00, 0x00, 0x04, 0x23, 0x03, 0x00, 0x00, + 0x4d, 0x24, 0x03, 0x00, 0x00, 0x04, 0x25, 0x03, + 0x00, 0x00, 0x4d, 0x26, 0x03, 0x00, 0x00, 0x04, + 0x27, 0x03, 0x00, 0x00, 0x4d, 0x28, 0x03, 0x00, + 0x00, 0x04, 0x29, 0x03, 0x00, 0x00, 0x4d, 0x2a, + 0x03, 0x00, 0x00, 0x04, 0x2b, 0x03, 0x00, 0x00, + 0x4d, 0x2c, 0x03, 0x00, 0x00, 0x04, 0x2d, 0x03, + 0x00, 0x00, 0x4d, 0x2e, 0x03, 0x00, 0x00, 0x04, + 0x2f, 0x03, 0x00, 0x00, 0x4d, 0x30, 0x03, 0x00, + 0x00, 0x04, 0x31, 0x03, 0x00, 0x00, 0x4d, 0x32, + 0x03, 0x00, 0x00, 0x04, 0x33, 0x03, 0x00, 0x00, + 0x4d, 0x34, 0x03, 0x00, 0x00, 0x04, 0x35, 0x03, + 0x00, 0x00, 0x4d, 0x36, 0x03, 0x00, 0x00, 0x04, + 0x37, 0x03, 0x00, 0x00, 0x4d, 0x38, 0x03, 0x00, + 0x00, 0x04, 0x39, 0x03, 0x00, 0x00, 0x4d, 0x3a, + 0x03, 0x00, 0x00, 0x04, 0x3b, 0x03, 0x00, 0x00, + 0x4d, 0x3c, 0x03, 0x00, 0x00, 0x04, 0x3d, 0x03, + 0x00, 0x00, 0x4d, 0x3e, 0x03, 0x00, 0x00, 0x04, + 0x3f, 0x03, 0x00, 0x00, 0x4d, 0x40, 0x03, 0x00, + 0x00, 0x04, 0x41, 0x03, 0x00, 0x00, 0x4d, 0x42, + 0x03, 0x00, 0x00, 0x04, 0x43, 0x03, 0x00, 0x00, + 0x4d, 0x44, 0x03, 0x00, 0x00, 0x04, 0x45, 0x03, + 0x00, 0x00, 0x4d, 0x46, 0x03, 0x00, 0x00, 0x4d, + 0x47, 0x03, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, + 0x00, 0x24, 0x01, 0x00, 0xcc, 0x28, 0x90, 0x0d, + 0x01, 0x00, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, + 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x04, 0x31, 0x33, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_te_size = 25171; + +const uint8_t intl_te[25171] = { + 0x01, 0xe3, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x74, 0x65, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x0e, + 0x7b, 0x31, 0x7d, 0x20, 0x7b, 0x30, 0x7d, 0x0a, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, 0x65, + 0x64, 0x69, 0x75, 0x6d, 0x08, 0x66, 0x75, 0x6c, + 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x02, 0x64, + 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, 0x06, 0x45, + 0x20, 0x64, 0x04, 0x45, 0x64, 0x10, 0x45, 0x20, + 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x06, 0x45, + 0x68, 0x6d, 0x0e, 0x45, 0x20, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x06, 0x45, 0x48, 0x6d, 0x16, 0x45, + 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x61, 0x08, 0x45, 0x68, 0x6d, 0x73, 0x14, + 0x45, 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x08, 0x45, 0x48, 0x6d, 0x73, 0x06, + 0x47, 0x20, 0x79, 0x04, 0x47, 0x79, 0x0e, 0x47, + 0x20, 0x79, 0x20, 0x4d, 0x4d, 0x4d, 0x0a, 0x47, + 0x79, 0x4d, 0x4d, 0x4d, 0x14, 0x47, 0x20, 0x64, + 0x2c, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0c, + 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x1a, 0x47, + 0x2c, 0x20, 0x45, 0x20, 0x64, 0x2c, 0x20, 0x4d, + 0x4d, 0x4d, 0x20, 0x79, 0x0e, 0x47, 0x79, 0x4d, + 0x4d, 0x4d, 0x45, 0x64, 0x06, 0x68, 0x20, 0x61, + 0x02, 0x68, 0x04, 0x48, 0x48, 0x02, 0x48, 0x0c, + 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x04, 0x68, + 0x6d, 0x0a, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x04, + 0x48, 0x6d, 0x12, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x20, 0x61, 0x06, 0x68, 0x6d, 0x73, + 0x10, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x06, 0x48, 0x6d, 0x73, 0x16, 0x68, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x20, + 0x76, 0x08, 0x68, 0x6d, 0x73, 0x76, 0x14, 0x48, + 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, + 0x76, 0x08, 0x48, 0x6d, 0x73, 0x76, 0x10, 0x68, + 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x20, 0x76, 0x06, + 0x68, 0x6d, 0x76, 0x0e, 0x48, 0x48, 0x3a, 0x6d, + 0x6d, 0x20, 0x76, 0x06, 0x48, 0x6d, 0x76, 0x02, + 0x4c, 0x02, 0x4d, 0x06, 0x64, 0x2f, 0x4d, 0x04, + 0x4d, 0x64, 0x0c, 0x45, 0x2c, 0x20, 0x64, 0x2f, + 0x4d, 0x06, 0x4d, 0x45, 0x64, 0x0a, 0x64, 0x64, + 0x2d, 0x4d, 0x4d, 0x08, 0x4d, 0x4d, 0x64, 0x64, + 0x06, 0x4c, 0x4c, 0x4c, 0x06, 0x4d, 0x4d, 0x4d, + 0x0a, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x08, 0x4d, + 0x4d, 0x4d, 0x64, 0x10, 0x45, 0x2c, 0x20, 0x64, + 0x20, 0x4d, 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, + 0x45, 0x64, 0x0c, 0x64, 0x20, 0x4d, 0x4d, 0x4d, + 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x0a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x04, 0x6d, 0x73, + 0x02, 0x79, 0x06, 0x4d, 0x2f, 0x79, 0x04, 0x79, + 0x4d, 0x0a, 0x64, 0x2f, 0x4d, 0x2f, 0x79, 0x06, + 0x79, 0x4d, 0x64, 0x10, 0x45, 0x2c, 0x20, 0x64, + 0x2f, 0x4d, 0x2f, 0x79, 0x08, 0x79, 0x4d, 0x45, + 0x64, 0x08, 0x4d, 0x4d, 0x2d, 0x79, 0x06, 0x79, + 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x20, 0x79, + 0x08, 0x79, 0x4d, 0x4d, 0x4d, 0x10, 0x64, 0x2c, + 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0a, 0x79, + 0x4d, 0x4d, 0x4d, 0x64, 0x16, 0x45, 0x2c, 0x20, + 0x64, 0x2c, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, + 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0c, + 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0a, 0x79, + 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, 0x51, 0x51, 0x51, + 0x20, 0x79, 0x08, 0x79, 0x51, 0x51, 0x51, 0x0c, + 0x51, 0x51, 0x51, 0x51, 0x20, 0x79, 0x0a, 0x79, + 0x51, 0x51, 0x51, 0x51, 0x20, 0x61, 0x76, 0x61, + 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x73, 0x1e, 0x64, 0x2c, + 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x2c, + 0x20, 0x45, 0x45, 0x45, 0x45, 0x14, 0x79, 0x4d, + 0x4d, 0x4d, 0x4d, 0x45, 0x45, 0x45, 0x45, 0x64, + 0x12, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x2c, + 0x20, 0x79, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, + 0x64, 0x10, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x2c, + 0x20, 0x79, 0x10, 0x64, 0x64, 0x2d, 0x4d, 0x4d, + 0x2d, 0x79, 0x79, 0x16, 0x64, 0x61, 0x74, 0x65, + 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x1c, + 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, + 0x61, 0x20, 0x7a, 0x7a, 0x7a, 0x7a, 0x12, 0x68, + 0x6d, 0x6d, 0x73, 0x73, 0x7a, 0x7a, 0x7a, 0x7a, + 0x16, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x61, 0x20, 0x7a, 0x08, 0x68, 0x6d, 0x73, + 0x7a, 0x16, 0x74, 0x69, 0x6d, 0x65, 0x46, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x73, 0x0e, 0x66, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x73, 0x03, 0x1c, 0x0c, + 0x05, 0x2b, 0x0c, 0x3f, 0x0c, 0x05, 0x2e, 0x0c, + 0x3e, 0x0c, 0x03, 0x0f, 0x0c, 0x05, 0x2e, 0x0c, + 0x47, 0x0c, 0x05, 0x1c, 0x0c, 0x42, 0x0c, 0x05, + 0x1c, 0x0c, 0x41, 0x0c, 0x03, 0x06, 0x0c, 0x05, + 0x38, 0x0c, 0x46, 0x0c, 0x03, 0x05, 0x0c, 0x03, + 0x28, 0x0c, 0x05, 0x21, 0x0c, 0x3f, 0x0c, 0x0c, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x05, 0x1c, + 0x0c, 0x28, 0x0c, 0x0b, 0x2b, 0x0c, 0x3f, 0x0c, + 0x2c, 0x0c, 0x4d, 0x0c, 0x30, 0x0c, 0x0d, 0x2e, + 0x0c, 0x3e, 0x0c, 0x30, 0x0c, 0x4d, 0x0c, 0x1a, + 0x0c, 0x3f, 0x0c, 0x0b, 0x0f, 0x0c, 0x2a, 0x0c, + 0x4d, 0x0c, 0x30, 0x0c, 0x3f, 0x0c, 0x09, 0x1c, + 0x0c, 0x42, 0x0c, 0x28, 0x0c, 0x4d, 0x0c, 0x09, + 0x1c, 0x0c, 0x41, 0x0c, 0x32, 0x0c, 0x48, 0x0c, + 0x05, 0x06, 0x0c, 0x17, 0x0c, 0x0f, 0x38, 0x0c, + 0x46, 0x0c, 0x2a, 0x0c, 0x4d, 0x0c, 0x1f, 0x0c, + 0x46, 0x0c, 0x02, 0x0c, 0x0b, 0x05, 0x0c, 0x15, + 0x0c, 0x4d, 0x0c, 0x1f, 0x0c, 0x4b, 0x0c, 0x07, + 0x28, 0x0c, 0x35, 0x0c, 0x02, 0x0c, 0x0b, 0x21, + 0x0c, 0x3f, 0x0c, 0x38, 0x0c, 0x46, 0x0c, 0x02, + 0x0c, 0x0b, 0x1c, 0x0c, 0x28, 0x0c, 0x35, 0x0c, + 0x30, 0x0c, 0x3f, 0x0c, 0x11, 0x2b, 0x0c, 0x3f, + 0x0c, 0x2c, 0x0c, 0x4d, 0x0c, 0x30, 0x0c, 0x35, + 0x0c, 0x30, 0x0c, 0x3f, 0x0c, 0x0f, 0x0f, 0x0c, + 0x2a, 0x0c, 0x4d, 0x0c, 0x30, 0x0c, 0x3f, 0x0c, + 0x32, 0x0c, 0x4d, 0x0c, 0x0d, 0x06, 0x0c, 0x17, + 0x0c, 0x38, 0x0c, 0x4d, 0x0c, 0x1f, 0x0c, 0x41, + 0x0c, 0x15, 0x38, 0x0c, 0x46, 0x0c, 0x2a, 0x0c, + 0x4d, 0x0c, 0x1f, 0x0c, 0x46, 0x0c, 0x02, 0x0c, + 0x2c, 0x0c, 0x30, 0x0c, 0x4d, 0x0c, 0x11, 0x05, + 0x0c, 0x15, 0x0c, 0x4d, 0x0c, 0x1f, 0x0c, 0x4b, + 0x0c, 0x2c, 0x0c, 0x30, 0x0c, 0x4d, 0x0c, 0x0d, + 0x28, 0x0c, 0x35, 0x0c, 0x02, 0x0c, 0x2c, 0x0c, + 0x30, 0x0c, 0x4d, 0x0c, 0x11, 0x21, 0x0c, 0x3f, + 0x0c, 0x38, 0x0c, 0x46, 0x0c, 0x02, 0x0c, 0x2c, + 0x0c, 0x30, 0x0c, 0x4d, 0x0c, 0x0c, 0x6d, 0x6f, + 0x6e, 0x74, 0x68, 0x73, 0x05, 0x38, 0x0c, 0x4b, + 0x0c, 0x03, 0x2e, 0x0c, 0x05, 0x2c, 0x0c, 0x41, + 0x0c, 0x05, 0x17, 0x0c, 0x41, 0x0c, 0x05, 0x36, + 0x0c, 0x41, 0x0c, 0x03, 0x36, 0x0c, 0x07, 0x06, + 0x0c, 0x26, 0x0c, 0x3f, 0x0c, 0x07, 0x38, 0x0c, + 0x4b, 0x0c, 0x2e, 0x0c, 0x09, 0x2e, 0x0c, 0x02, + 0x0c, 0x17, 0x0c, 0x33, 0x0c, 0x07, 0x2c, 0x0c, + 0x41, 0x0c, 0x27, 0x0c, 0x09, 0x17, 0x0c, 0x41, + 0x0c, 0x30, 0x0c, 0x41, 0x0c, 0x0b, 0x36, 0x0c, + 0x41, 0x0c, 0x15, 0x0c, 0x4d, 0x0c, 0x30, 0x0c, + 0x07, 0x36, 0x0c, 0x28, 0x0c, 0x3f, 0x0c, 0x0f, + 0x06, 0x0c, 0x26, 0x0c, 0x3f, 0x0c, 0x35, 0x0c, + 0x3e, 0x0c, 0x30, 0x0c, 0x02, 0x0c, 0x0f, 0x38, + 0x0c, 0x4b, 0x0c, 0x2e, 0x0c, 0x35, 0x0c, 0x3e, + 0x0c, 0x30, 0x0c, 0x02, 0x0c, 0x11, 0x2e, 0x0c, + 0x02, 0x0c, 0x17, 0x0c, 0x33, 0x0c, 0x35, 0x0c, + 0x3e, 0x0c, 0x30, 0x0c, 0x02, 0x0c, 0x0f, 0x2c, + 0x0c, 0x41, 0x0c, 0x27, 0x0c, 0x35, 0x0c, 0x3e, + 0x0c, 0x30, 0x0c, 0x02, 0x0c, 0x11, 0x17, 0x0c, + 0x41, 0x0c, 0x30, 0x0c, 0x41, 0x0c, 0x35, 0x0c, + 0x3e, 0x0c, 0x30, 0x0c, 0x02, 0x0c, 0x13, 0x36, + 0x0c, 0x41, 0x0c, 0x15, 0x0c, 0x4d, 0x0c, 0x30, + 0x0c, 0x35, 0x0c, 0x3e, 0x0c, 0x30, 0x0c, 0x02, + 0x0c, 0x0f, 0x36, 0x0c, 0x28, 0x0c, 0x3f, 0x0c, + 0x35, 0x0c, 0x3e, 0x0c, 0x30, 0x0c, 0x02, 0x0c, + 0x08, 0x64, 0x61, 0x79, 0x73, 0x04, 0x42, 0x45, + 0x08, 0x65, 0x72, 0x61, 0x73, 0x08, 0x5b, 0x41, + 0x4d, 0x5d, 0x04, 0x61, 0x6d, 0x08, 0x5b, 0x50, + 0x4d, 0x5d, 0x04, 0x70, 0x6d, 0x14, 0x64, 0x61, + 0x79, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x73, + 0x06, 0x4d, 0x30, 0x31, 0x06, 0x4d, 0x30, 0x32, + 0x06, 0x4d, 0x30, 0x33, 0x06, 0x4d, 0x30, 0x34, + 0x06, 0x4d, 0x30, 0x35, 0x06, 0x4d, 0x30, 0x36, + 0x06, 0x4d, 0x30, 0x37, 0x06, 0x4d, 0x30, 0x38, + 0x06, 0x4d, 0x30, 0x39, 0x06, 0x4d, 0x31, 0x30, + 0x06, 0x4d, 0x31, 0x31, 0x06, 0x4d, 0x31, 0x32, + 0x08, 0x54, 0x6f, 0x75, 0x74, 0x08, 0x42, 0x61, + 0x62, 0x61, 0x0a, 0x48, 0x61, 0x74, 0x6f, 0x72, + 0x0a, 0x4b, 0x69, 0x61, 0x68, 0x6b, 0x08, 0x54, + 0x6f, 0x62, 0x61, 0x0c, 0x41, 0x6d, 0x73, 0x68, + 0x69, 0x72, 0x10, 0x42, 0x61, 0x72, 0x61, 0x6d, + 0x68, 0x61, 0x74, 0x12, 0x42, 0x61, 0x72, 0x61, + 0x6d, 0x6f, 0x75, 0x64, 0x61, 0x0e, 0x42, 0x61, + 0x73, 0x68, 0x61, 0x6e, 0x73, 0x0a, 0x50, 0x61, + 0x6f, 0x6e, 0x61, 0x08, 0x45, 0x70, 0x65, 0x70, + 0x0a, 0x4d, 0x65, 0x73, 0x72, 0x61, 0x0a, 0x4e, + 0x61, 0x73, 0x69, 0x65, 0x08, 0x45, 0x52, 0x41, + 0x30, 0x08, 0x45, 0x52, 0x41, 0x31, 0x10, 0x4d, + 0x65, 0x73, 0x6b, 0x65, 0x72, 0x65, 0x6d, 0x0c, + 0x54, 0x65, 0x6b, 0x65, 0x6d, 0x74, 0x0a, 0x48, + 0x65, 0x64, 0x61, 0x72, 0x0c, 0x54, 0x61, 0x68, + 0x73, 0x61, 0x73, 0x06, 0x54, 0x65, 0x72, 0x0e, + 0x59, 0x65, 0x6b, 0x61, 0x74, 0x69, 0x74, 0x0e, + 0x4d, 0x65, 0x67, 0x61, 0x62, 0x69, 0x74, 0x0c, + 0x4d, 0x69, 0x61, 0x7a, 0x69, 0x61, 0x0c, 0x47, + 0x65, 0x6e, 0x62, 0x6f, 0x74, 0x08, 0x53, 0x65, + 0x6e, 0x65, 0x0a, 0x48, 0x61, 0x6d, 0x6c, 0x65, + 0x0e, 0x4e, 0x65, 0x68, 0x61, 0x73, 0x73, 0x65, + 0x0e, 0x50, 0x61, 0x67, 0x75, 0x6d, 0x65, 0x6e, + 0x0d, 0x15, 0x0c, 0x4d, 0x0c, 0x30, 0x0c, 0x40, + 0x0c, 0x2a, 0x0c, 0x42, 0x0c, 0x0b, 0x15, 0x0c, + 0x4d, 0x0c, 0x30, 0x0c, 0x40, 0x0c, 0x36, 0x0c, + 0x0a, 0x5b, 0x42, 0x43, 0x45, 0x5d, 0x08, 0x5b, + 0x43, 0x45, 0x5d, 0x1f, 0x15, 0x0c, 0x4d, 0x0c, + 0x30, 0x0c, 0x40, 0x0c, 0x38, 0x0c, 0x4d, 0x0c, + 0x24, 0x0c, 0x41, 0x0c, 0x20, 0x00, 0x2a, 0x0c, + 0x42, 0x0c, 0x30, 0x0c, 0x4d, 0x0c, 0x35, 0x0c, + 0x02, 0x0c, 0x19, 0x15, 0x0c, 0x4d, 0x0c, 0x30, + 0x0c, 0x40, 0x0c, 0x38, 0x0c, 0x4d, 0x0c, 0x24, + 0x0c, 0x41, 0x0c, 0x20, 0x00, 0x36, 0x0c, 0x15, + 0x0c, 0x02, 0x0c, 0x2f, 0x2a, 0x0c, 0x4d, 0x0c, + 0x30, 0x0c, 0x38, 0x0c, 0x4d, 0x0c, 0x24, 0x0c, + 0x41, 0x0c, 0x24, 0x0c, 0x20, 0x00, 0x36, 0x0c, + 0x15, 0x0c, 0x3e, 0x0c, 0x28, 0x0c, 0x3f, 0x0c, + 0x15, 0x0c, 0x3f, 0x0c, 0x20, 0x00, 0x2a, 0x0c, + 0x42, 0x0c, 0x30, 0x0c, 0x4d, 0x0c, 0x35, 0x0c, + 0x02, 0x0c, 0x19, 0x2a, 0x0c, 0x4d, 0x0c, 0x30, + 0x0c, 0x38, 0x0c, 0x4d, 0x0c, 0x24, 0x0c, 0x41, + 0x0c, 0x24, 0x0c, 0x20, 0x00, 0x36, 0x0c, 0x15, + 0x0c, 0x02, 0x0c, 0x0c, 0x54, 0x69, 0x73, 0x68, + 0x72, 0x69, 0x0e, 0x48, 0x65, 0x73, 0x68, 0x76, + 0x61, 0x6e, 0x0c, 0x4b, 0x69, 0x73, 0x6c, 0x65, + 0x76, 0x0a, 0x54, 0x65, 0x76, 0x65, 0x74, 0x0c, + 0x53, 0x68, 0x65, 0x76, 0x61, 0x74, 0x0c, 0x41, + 0x64, 0x61, 0x72, 0x20, 0x49, 0x08, 0x41, 0x64, + 0x61, 0x72, 0x0a, 0x4e, 0x69, 0x73, 0x61, 0x6e, + 0x08, 0x49, 0x79, 0x61, 0x72, 0x0a, 0x53, 0x69, + 0x76, 0x61, 0x6e, 0x0a, 0x54, 0x61, 0x6d, 0x75, + 0x7a, 0x04, 0x41, 0x76, 0x08, 0x45, 0x6c, 0x75, + 0x6c, 0x0e, 0x41, 0x64, 0x61, 0x72, 0x20, 0x49, + 0x49, 0x04, 0x41, 0x4d, 0x0e, 0x43, 0x68, 0x61, + 0x69, 0x74, 0x72, 0x61, 0x10, 0x56, 0x61, 0x69, + 0x73, 0x61, 0x6b, 0x68, 0x61, 0x10, 0x4a, 0x79, + 0x61, 0x69, 0x73, 0x74, 0x68, 0x61, 0x0c, 0x41, + 0x73, 0x61, 0x64, 0x68, 0x61, 0x0e, 0x53, 0x72, + 0x61, 0x76, 0x61, 0x6e, 0x61, 0x0c, 0x42, 0x68, + 0x61, 0x64, 0x72, 0x61, 0x0c, 0x41, 0x73, 0x76, + 0x69, 0x6e, 0x61, 0x0e, 0x4b, 0x61, 0x72, 0x74, + 0x69, 0x6b, 0x61, 0x14, 0x41, 0x67, 0x72, 0x61, + 0x68, 0x61, 0x79, 0x61, 0x6e, 0x61, 0x0a, 0x50, + 0x61, 0x75, 0x73, 0x61, 0x0a, 0x4d, 0x61, 0x67, + 0x68, 0x61, 0x10, 0x50, 0x68, 0x61, 0x6c, 0x67, + 0x75, 0x6e, 0x61, 0x08, 0x53, 0x61, 0x6b, 0x61, + 0x08, 0x4d, 0x75, 0x68, 0x2e, 0x08, 0x53, 0x61, + 0x66, 0x2e, 0x0c, 0x52, 0x61, 0x62, 0x2e, 0x20, + 0x49, 0x0e, 0x52, 0x61, 0x62, 0x2e, 0x20, 0x49, + 0x49, 0x0c, 0x4a, 0x75, 0x6d, 0x2e, 0x20, 0x49, + 0x0e, 0x4a, 0x75, 0x6d, 0x2e, 0x20, 0x49, 0x49, + 0x08, 0x52, 0x61, 0x6a, 0x2e, 0x08, 0x53, 0x68, + 0x61, 0x2e, 0x08, 0x52, 0x61, 0x6d, 0x2e, 0x0a, + 0x53, 0x68, 0x61, 0x77, 0x2e, 0x11, 0x44, 0x00, + 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, + 0x2d, 0x00, 0x51, 0x00, 0x2e, 0x00, 0x11, 0x44, + 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, + 0x00, 0x2d, 0x00, 0x48, 0x00, 0x2e, 0x00, 0x10, + 0x4d, 0x75, 0x68, 0x61, 0x72, 0x72, 0x61, 0x6d, + 0x0a, 0x53, 0x61, 0x66, 0x61, 0x72, 0x0f, 0x52, + 0x00, 0x61, 0x00, 0x62, 0x00, 0x69, 0x00, 0xbb, + 0x02, 0x20, 0x00, 0x49, 0x00, 0x11, 0x52, 0x00, + 0x61, 0x00, 0x62, 0x00, 0x69, 0x00, 0xbb, 0x02, + 0x20, 0x00, 0x49, 0x00, 0x49, 0x00, 0x10, 0x4a, + 0x75, 0x6d, 0x61, 0x64, 0x61, 0x20, 0x49, 0x12, + 0x4a, 0x75, 0x6d, 0x61, 0x64, 0x61, 0x20, 0x49, + 0x49, 0x0a, 0x52, 0x61, 0x6a, 0x61, 0x62, 0x0f, + 0x53, 0x00, 0x68, 0x00, 0x61, 0x00, 0xbb, 0x02, + 0x62, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x0e, 0x52, + 0x61, 0x6d, 0x61, 0x64, 0x61, 0x6e, 0x0e, 0x53, + 0x68, 0x61, 0x77, 0x77, 0x61, 0x6c, 0x19, 0x44, + 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, + 0x00, 0x2d, 0x00, 0x51, 0x00, 0x69, 0x00, 0xbb, + 0x02, 0x64, 0x00, 0x61, 0x00, 0x68, 0x00, 0x19, + 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, + 0x6c, 0x00, 0x2d, 0x00, 0x48, 0x00, 0x69, 0x00, + 0x6a, 0x00, 0x6a, 0x00, 0x61, 0x00, 0x68, 0x00, + 0x04, 0x41, 0x48, 0x1f, 0x54, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x36, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x48, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x36, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x36, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x29, 0x00, 0x21, 0x53, + 0x00, 0x68, 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, + 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4b, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x57, 0x00, + 0x61, 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x1f, 0x52, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x1d, 0x59, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4a, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6b, 0x00, 0x61, + 0x00, 0x6d, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x2d, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x2b, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x2d, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, 0x2d, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x2a, 0x4a, 0x69, 0x6e, 0x67, 0x6f, 0x2d, 0x6b, + 0x65, 0x69, 0x75, 0x6e, 0x20, 0x28, 0x37, 0x36, + 0x37, 0x2d, 0x37, 0x37, 0x30, 0x29, 0x1d, 0x48, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x2d, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x2d, 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x38, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, 0x44, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x64, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x38, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, + 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4a, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x1d, 0x4b, 0x00, 0x61, 0x00, 0x6a, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x53, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x20, 0x54, 0x65, 0x6e, + 0x2d, 0x61, 0x6e, 0x20, 0x28, 0x38, 0x35, 0x37, + 0x2d, 0x38, 0x35, 0x39, 0x29, 0x1f, 0x4a, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, 0x45, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, 0x6e, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1b, 0x4c, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x1d, 0x41, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, 0x69, 0x00, + 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1d, 0x45, + 0x00, 0x69, 0x00, 0x73, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x4a, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x29, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, 0x4a, + 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x29, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4c, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, + 0x4a, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x24, 0x54, 0x65, 0x6e, 0x2d, 0x65, 0x69, 0x20, + 0x28, 0x31, 0x31, 0x31, 0x30, 0x2d, 0x31, 0x31, + 0x31, 0x33, 0x29, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, + 0x01, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, + 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x6a, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x48, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x48, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x45, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x68, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x6d, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, + 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x59, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x21, 0x4a, 0x00, 0x75, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x29, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x29, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1f, + 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x41, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, + 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x29, 0x00, 0x27, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x75, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x29, 0x52, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x4e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1f, 0x4c, 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x74, 0x00, 0x73, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x27, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x45, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x21, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x45, 0x00, 0x69, 0x00, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x72, + 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, + 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, + 0x45, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, + 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x48, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x65, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x23, 0x41, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, 0x02, 0x54, + 0x02, 0x53, 0x0a, 0x4d, 0x65, 0x69, 0x6a, 0x69, + 0x0d, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x0b, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x0c, 0x48, 0x65, 0x69, 0x73, 0x65, 0x69, 0x12, + 0x46, 0x61, 0x72, 0x76, 0x61, 0x72, 0x64, 0x69, + 0x6e, 0x16, 0x4f, 0x72, 0x64, 0x69, 0x62, 0x65, + 0x68, 0x65, 0x73, 0x68, 0x74, 0x0e, 0x4b, 0x68, + 0x6f, 0x72, 0x64, 0x61, 0x64, 0x06, 0x54, 0x69, + 0x72, 0x0c, 0x4d, 0x6f, 0x72, 0x64, 0x61, 0x64, + 0x12, 0x53, 0x68, 0x61, 0x68, 0x72, 0x69, 0x76, + 0x61, 0x72, 0x08, 0x4d, 0x65, 0x68, 0x72, 0x08, + 0x41, 0x62, 0x61, 0x6e, 0x08, 0x41, 0x7a, 0x61, + 0x72, 0x06, 0x44, 0x65, 0x79, 0x0c, 0x42, 0x61, + 0x68, 0x6d, 0x61, 0x6e, 0x0c, 0x45, 0x73, 0x66, + 0x61, 0x6e, 0x64, 0x04, 0x41, 0x50, 0x1a, 0x42, + 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x52, 0x2e, + 0x4f, 0x2e, 0x43, 0x2e, 0x0c, 0x52, 0x2e, 0x4f, + 0x2e, 0x43, 0x2e, 0x12, 0x63, 0x61, 0x6c, 0x65, + 0x6e, 0x64, 0x61, 0x72, 0x73, 0x08, 0x64, 0x61, + 0x74, 0x65, 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, + 0x6e, 0x75, 0x10, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0x1e, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, + 0x65, 0x72, 0x6e, 0x26, 0x7b, 0x6d, 0x69, 0x6e, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, + 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x0e, + 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x24, + 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, + 0x79, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0x3a, 0x7b, 0x6d, 0x69, 0x6e, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, + 0x79, 0x2a, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, + 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x40, + 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, + 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0x7b, 0x70, 0x65, 0x72, 0x63, + 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, + 0x0e, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, + 0x10, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, + 0x73, 0x02, 0x2e, 0x02, 0x2c, 0x0a, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x06, 0x4e, 0x61, 0x4e, 0x06, + 0x6e, 0x61, 0x6e, 0x02, 0x2b, 0x10, 0x70, 0x6c, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, 0x2d, + 0x12, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, + 0x67, 0x6e, 0x02, 0x25, 0x16, 0x70, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, + 0x03, 0x1e, 0x22, 0x10, 0x69, 0x6e, 0x66, 0x69, + 0x6e, 0x69, 0x74, 0x79, 0x08, 0x74, 0x65, 0x6c, + 0x75, 0x0e, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, + 0x73, 0x04, 0x41, 0x24, 0x06, 0x41, 0x55, 0x44, + 0x04, 0x52, 0x24, 0x06, 0x42, 0x52, 0x4c, 0x06, + 0x43, 0x41, 0x24, 0x06, 0x43, 0x41, 0x44, 0x06, + 0x43, 0x4e, 0xa5, 0x06, 0x43, 0x4e, 0x59, 0x03, + 0xac, 0x20, 0x06, 0x45, 0x55, 0x52, 0x02, 0xa3, + 0x06, 0x47, 0x42, 0x50, 0x06, 0x48, 0x4b, 0x24, + 0x06, 0x48, 0x4b, 0x44, 0x03, 0xaa, 0x20, 0x06, + 0x49, 0x4c, 0x53, 0x03, 0xb9, 0x20, 0x06, 0x49, + 0x4e, 0x52, 0x06, 0x4a, 0x50, 0xa5, 0x06, 0x4a, + 0x50, 0x59, 0x03, 0xa9, 0x20, 0x06, 0x4b, 0x52, + 0x57, 0x06, 0x4d, 0x58, 0x24, 0x06, 0x4d, 0x58, + 0x4e, 0x06, 0x4e, 0x5a, 0x24, 0x06, 0x4e, 0x5a, + 0x44, 0x03, 0x3f, 0x0e, 0x06, 0x54, 0x48, 0x42, + 0x06, 0x4e, 0x54, 0x24, 0x06, 0x54, 0x57, 0x44, + 0x02, 0x24, 0x06, 0x55, 0x53, 0x44, 0x03, 0xab, + 0x20, 0x06, 0x56, 0x4e, 0x44, 0x08, 0x46, 0x43, + 0x46, 0x41, 0x06, 0x58, 0x41, 0x46, 0x06, 0x45, + 0x43, 0x24, 0x06, 0x58, 0x43, 0x44, 0x06, 0x43, + 0x46, 0x41, 0x06, 0x58, 0x4f, 0x46, 0x08, 0x43, + 0x46, 0x50, 0x46, 0x06, 0x58, 0x50, 0x46, 0x14, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, + 0x65, 0x73, 0x52, 0x6e, 0x6f, 0x64, 0x65, 0x5f, + 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, + 0x69, 0x6e, 0x74, 0x6c, 0x2f, 0x6c, 0x6f, 0x63, + 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, + 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x70, 0x2f, 0x74, + 0x65, 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, + 0x9e, 0x01, 0x00, 0x01, 0x00, 0x27, 0x00, 0x89, + 0x01, 0xbe, 0x6b, 0x01, 0xa0, 0x01, 0x00, 0x00, + 0x00, 0x39, 0xd0, 0x00, 0x00, 0x00, 0x43, 0xd1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd2, 0x00, 0x00, + 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd4, 0x00, 0x00, 0x00, 0x04, 0xd5, 0x00, 0x00, + 0x00, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x04, 0xd7, + 0x00, 0x00, 0x00, 0x04, 0xd8, 0x00, 0x00, 0x00, + 0x04, 0xd9, 0x00, 0x00, 0x00, 0x04, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xdb, 0x00, 0x00, 0x00, 0x04, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, + 0x00, 0x04, 0xde, 0x00, 0x00, 0x00, 0x04, 0xdf, + 0x00, 0x00, 0x00, 0x04, 0xe0, 0x00, 0x00, 0x00, + 0x04, 0xe1, 0x00, 0x00, 0x00, 0x04, 0xe2, 0x00, + 0x00, 0x00, 0x26, 0x0f, 0x00, 0x4d, 0xe3, 0x00, + 0x00, 0x00, 0x0a, 0x4d, 0xe4, 0x00, 0x00, 0x00, + 0x0a, 0x4d, 0xe5, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xe9, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, + 0xed, 0x00, 0x00, 0x00, 0x04, 0xee, 0x00, 0x00, + 0x00, 0x4d, 0xef, 0x00, 0x00, 0x00, 0x04, 0xf0, + 0x00, 0x00, 0x00, 0x4d, 0xf1, 0x00, 0x00, 0x00, + 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xf3, 0x00, + 0x00, 0x00, 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, + 0xf5, 0x00, 0x00, 0x00, 0x04, 0xf6, 0x00, 0x00, + 0x00, 0x4d, 0xf7, 0x00, 0x00, 0x00, 0x04, 0xf8, + 0x00, 0x00, 0x00, 0x4d, 0xf9, 0x00, 0x00, 0x00, + 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xfb, 0x00, + 0x00, 0x00, 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, + 0xfd, 0x00, 0x00, 0x00, 0x04, 0xfe, 0x00, 0x00, + 0x00, 0x4d, 0xff, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x01, 0x00, 0x00, 0x4d, 0x01, 0x01, 0x00, 0x00, + 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, 0x03, 0x01, + 0x00, 0x00, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, + 0x05, 0x01, 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, + 0x00, 0x4d, 0x07, 0x01, 0x00, 0x00, 0x04, 0x08, + 0x01, 0x00, 0x00, 0x4d, 0x09, 0x01, 0x00, 0x00, + 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x0b, 0x01, + 0x00, 0x00, 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, + 0x0d, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x01, 0x00, + 0x00, 0x4d, 0x0f, 0x01, 0x00, 0x00, 0x04, 0x10, + 0x01, 0x00, 0x00, 0x4d, 0x11, 0x01, 0x00, 0x00, + 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, 0x13, 0x01, + 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, + 0x15, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, + 0x00, 0x4d, 0x17, 0x01, 0x00, 0x00, 0x04, 0x18, + 0x01, 0x00, 0x00, 0x4d, 0x19, 0x01, 0x00, 0x00, + 0x04, 0x1a, 0x01, 0x00, 0x00, 0x4d, 0x1b, 0x01, + 0x00, 0x00, 0x04, 0x1c, 0x01, 0x00, 0x00, 0x4d, + 0x1d, 0x01, 0x00, 0x00, 0x04, 0x1e, 0x01, 0x00, + 0x00, 0x4d, 0x1f, 0x01, 0x00, 0x00, 0x04, 0x20, + 0x01, 0x00, 0x00, 0x4d, 0x21, 0x01, 0x00, 0x00, + 0x04, 0x22, 0x01, 0x00, 0x00, 0x4d, 0x23, 0x01, + 0x00, 0x00, 0x04, 0x24, 0x01, 0x00, 0x00, 0x4d, + 0x25, 0x01, 0x00, 0x00, 0x04, 0x26, 0x01, 0x00, + 0x00, 0x4d, 0x26, 0x01, 0x00, 0x00, 0x04, 0x27, + 0x01, 0x00, 0x00, 0x4d, 0x28, 0x01, 0x00, 0x00, + 0x04, 0x29, 0x01, 0x00, 0x00, 0x4d, 0x2a, 0x01, + 0x00, 0x00, 0x04, 0x2b, 0x01, 0x00, 0x00, 0x4d, + 0x2c, 0x01, 0x00, 0x00, 0x04, 0x2d, 0x01, 0x00, + 0x00, 0x4d, 0x2e, 0x01, 0x00, 0x00, 0x04, 0x2f, + 0x01, 0x00, 0x00, 0x4d, 0x30, 0x01, 0x00, 0x00, + 0x04, 0x31, 0x01, 0x00, 0x00, 0x4d, 0x32, 0x01, + 0x00, 0x00, 0x04, 0x33, 0x01, 0x00, 0x00, 0x4d, + 0x34, 0x01, 0x00, 0x00, 0x04, 0x35, 0x01, 0x00, + 0x00, 0x4d, 0x36, 0x01, 0x00, 0x00, 0x04, 0x37, + 0x01, 0x00, 0x00, 0x4d, 0x38, 0x01, 0x00, 0x00, + 0x04, 0x39, 0x01, 0x00, 0x00, 0x4d, 0x3a, 0x01, + 0x00, 0x00, 0x4d, 0x3b, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x3c, 0x01, 0x00, 0x00, 0x4d, 0x3d, 0x01, + 0x00, 0x00, 0x04, 0x3e, 0x01, 0x00, 0x00, 0x4d, + 0x3f, 0x01, 0x00, 0x00, 0x04, 0x40, 0x01, 0x00, + 0x00, 0x4d, 0x32, 0x01, 0x00, 0x00, 0x04, 0x41, + 0x01, 0x00, 0x00, 0x4d, 0x2a, 0x01, 0x00, 0x00, + 0x4d, 0x42, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x43, + 0x01, 0x00, 0x00, 0x4d, 0x44, 0x01, 0x00, 0x00, + 0x04, 0x45, 0x01, 0x00, 0x00, 0x4d, 0x46, 0x01, + 0x00, 0x00, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, + 0x09, 0x01, 0x00, 0x00, 0x04, 0x04, 0x01, 0x00, + 0x00, 0x4d, 0x05, 0x01, 0x00, 0x00, 0x4d, 0x47, + 0x01, 0x00, 0x00, 0x4d, 0x48, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x0b, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7e, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x4d, 0x84, 0x01, 0x00, 0x00, 0x4d, 0x85, 0x01, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x00, 0xbe, 0x01, 0xbe, 0x02, 0xbe, + 0x03, 0xbe, 0x04, 0xbe, 0x05, 0xbe, 0x06, 0xbe, + 0x07, 0xbe, 0x08, 0xbe, 0x09, 0xbe, 0x0a, 0xbe, + 0x0b, 0x26, 0x0c, 0x00, 0x4d, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, + 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, + 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, + 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, + 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, + 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, + 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, + 0x04, 0x91, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x86, 0x01, + 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, + 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, + 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, + 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, + 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, + 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, + 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x4d, 0x84, 0x01, + 0x00, 0x00, 0x4d, 0x85, 0x01, 0x00, 0x00, 0x4d, + 0xd6, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x0c, + 0xbe, 0x0d, 0xbe, 0x0e, 0xbe, 0x0f, 0xbe, 0x10, + 0xbe, 0x11, 0xbe, 0x12, 0xbe, 0x13, 0xbe, 0x14, + 0xbe, 0x15, 0xbe, 0x16, 0xbe, 0x17, 0xbe, 0x18, + 0x26, 0x0d, 0x00, 0x4d, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, + 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, + 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, + 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, + 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, + 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, + 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, + 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, + 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, + 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, + 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, + 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, + 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, + 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, + 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, + 0x04, 0xa0, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x80, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x81, 0x01, 0x00, 0x00, + 0x4d, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, 0x4d, + 0x85, 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x19, 0xbe, 0x1a, 0xbe, + 0x1b, 0xbe, 0x1c, 0xbe, 0x1d, 0xbe, 0x1e, 0xbe, + 0x1f, 0xbe, 0x20, 0xbe, 0x21, 0xbe, 0x22, 0xbe, + 0x23, 0xbe, 0x24, 0x26, 0x0c, 0x00, 0x4d, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, + 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, + 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, + 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, + 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, + 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, + 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, + 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, + 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, + 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, + 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, + 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, + 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, + 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, + 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x4d, + 0x84, 0x01, 0x00, 0x00, 0x4d, 0x85, 0x01, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x25, 0xbe, 0x26, 0xbe, 0x27, 0xbe, 0x28, + 0xbe, 0x29, 0xbe, 0x2a, 0xbe, 0x2b, 0xbe, 0x2c, + 0xbe, 0x2d, 0xbe, 0x2e, 0xbe, 0x2f, 0xbe, 0x30, + 0xbe, 0x31, 0x26, 0x0d, 0x00, 0x4d, 0x55, 0x01, + 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, + 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, + 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, + 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, + 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, + 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, + 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, + 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, + 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, + 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, + 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, + 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, + 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, + 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, + 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, + 0xad, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x55, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, + 0x04, 0xa0, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x9f, 0x01, + 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x80, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x81, 0x01, + 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, + 0x00, 0x4d, 0x85, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x32, 0xbe, + 0x33, 0xbe, 0x34, 0xbe, 0x35, 0xbe, 0x36, 0xbe, + 0x37, 0xbe, 0x38, 0xbe, 0x39, 0xbe, 0x3a, 0xbe, + 0x3b, 0xbe, 0x3c, 0xbe, 0x3d, 0xbe, 0x3e, 0x26, + 0x0d, 0x00, 0x4d, 0x55, 0x01, 0x00, 0x00, 0x04, + 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, + 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, + 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, + 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, + 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, + 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, + 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, + 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, + 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, + 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, + 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, + 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, + 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, + 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, + 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x9f, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x9f, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x80, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x81, 0x01, 0x00, 0x00, + 0x4d, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, 0x4d, + 0x85, 0x01, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x3f, 0xbe, 0x40, 0xbe, + 0x41, 0xbe, 0x42, 0xbe, 0x43, 0xbe, 0x44, 0xbe, + 0x45, 0xbe, 0x46, 0xbe, 0x47, 0xbe, 0x48, 0xbe, + 0x49, 0xbe, 0x4a, 0x26, 0x0c, 0x00, 0x4d, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, + 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, + 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, + 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, + 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, + 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, + 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, + 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, + 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, + 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, + 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, + 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, + 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, + 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, + 0xa0, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, + 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x80, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x81, 0x01, 0x00, + 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, + 0x01, 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, + 0x4d, 0x85, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x7e, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xae, 0x01, + 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, + 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, + 0x00, 0x26, 0x04, 0x00, 0x4d, 0x55, 0x01, 0x00, + 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, + 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, + 0x04, 0xb1, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xb2, 0x01, + 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, 0x04, + 0xb4, 0x01, 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, + 0x00, 0x26, 0x04, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x4d, 0x84, + 0x01, 0x00, 0x00, 0x4d, 0x85, 0x01, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x4b, 0xbe, 0x4c, 0xbe, 0x4d, 0xbe, 0x4e, 0xbe, + 0x4f, 0xbe, 0x50, 0xbe, 0x51, 0xbe, 0x52, 0xbe, + 0x53, 0xbe, 0x54, 0xbe, 0x55, 0xbe, 0x56, 0xbe, + 0x57, 0xbe, 0x58, 0x26, 0x0e, 0x00, 0x4d, 0x55, + 0x01, 0x00, 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, + 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, + 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, 0x04, + 0xba, 0x01, 0x00, 0x00, 0x04, 0xbb, 0x01, 0x00, + 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, 0x04, 0xbd, + 0x01, 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, + 0x04, 0xbf, 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, + 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, 0x04, + 0xc2, 0x01, 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, + 0x00, 0x26, 0x0e, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb7, + 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, + 0x04, 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, + 0x00, 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, + 0xbc, 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, + 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, + 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, + 0x04, 0xc1, 0x01, 0x00, 0x00, 0x04, 0xc2, 0x01, + 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, 0x26, + 0x0e, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7e, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xc4, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x55, 0x01, 0x00, + 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xc4, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x4d, 0x84, 0x01, 0x00, 0x00, 0x4d, 0x85, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x59, 0xbe, 0x5a, 0xbe, 0x5b, 0xbe, + 0x5c, 0xbe, 0x5d, 0xbe, 0x5e, 0xbe, 0x5f, 0xbe, + 0x60, 0xbe, 0x61, 0xbe, 0x62, 0xbe, 0x63, 0xbe, + 0x64, 0x26, 0x0c, 0x00, 0x4d, 0x55, 0x01, 0x00, + 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, + 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, + 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, + 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, 0x04, + 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, + 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, + 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, + 0x04, 0xd0, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xc5, 0x01, + 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, + 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, + 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, 0x04, 0xca, + 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, + 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, + 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, 0x04, + 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xd1, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x55, + 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xd1, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x80, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x81, 0x01, 0x00, 0x00, + 0x4d, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, 0x4d, + 0x85, 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x65, 0xbe, 0x66, 0xbe, + 0x67, 0xbe, 0x68, 0xbe, 0x69, 0xbe, 0x6a, 0xbe, + 0x6b, 0xbe, 0x6c, 0xbe, 0x6d, 0xbe, 0x6e, 0xbe, + 0x6f, 0xbe, 0x70, 0x26, 0x0c, 0x00, 0x4d, 0x55, + 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, + 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, + 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, + 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, + 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, + 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, + 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, + 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, + 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, + 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, + 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, + 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, + 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, + 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xea, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x55, 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x80, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x81, 0x01, + 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, + 0x00, 0x4d, 0x85, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x71, 0xbe, + 0x72, 0xbe, 0x73, 0xbe, 0x74, 0xbe, 0x75, 0xbe, + 0x76, 0xbe, 0x77, 0xbe, 0x78, 0xbe, 0x79, 0xbe, + 0x7a, 0xbe, 0x7b, 0xbe, 0x7c, 0x26, 0x0c, 0x00, + 0x4d, 0x55, 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, + 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, + 0xd4, 0x01, 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, + 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, + 0x01, 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, + 0x04, 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, + 0x00, 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, + 0xdc, 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, + 0x01, 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, + 0x04, 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, + 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, + 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, + 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, + 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, + 0x04, 0xe9, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x55, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, + 0x7d, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xea, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x55, 0x01, 0x00, 0x00, 0x04, + 0xea, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x4d, 0x84, + 0x01, 0x00, 0x00, 0x4d, 0x85, 0x01, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, + 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, + 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, + 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, + 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, + 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, + 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, + 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, + 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, + 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, + 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, + 0x00, 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, + 0xfe, 0x01, 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, + 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, + 0x02, 0x00, 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, + 0x04, 0x03, 0x02, 0x00, 0x00, 0x04, 0x04, 0x02, + 0x00, 0x00, 0x04, 0x05, 0x02, 0x00, 0x00, 0x04, + 0x06, 0x02, 0x00, 0x00, 0x04, 0x07, 0x02, 0x00, + 0x00, 0x04, 0x08, 0x02, 0x00, 0x00, 0x04, 0x09, + 0x02, 0x00, 0x00, 0x04, 0x0a, 0x02, 0x00, 0x00, + 0x26, 0x20, 0x00, 0x04, 0x0b, 0x02, 0x00, 0x00, + 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, + 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, + 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, + 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x23, + 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, + 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, + 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, + 0x11, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, + 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, 0x27, + 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, + 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, + 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, + 0x15, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, + 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, 0x2b, + 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, + 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, + 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, + 0x19, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, + 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x2f, + 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, + 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, + 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, + 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, + 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x33, + 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, + 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, + 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, + 0x21, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, + 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x37, + 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, + 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, + 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, + 0x25, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, + 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x3b, + 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, + 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, + 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, + 0x29, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, + 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x3f, + 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, + 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, + 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, + 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, + 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x43, + 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, + 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, + 0x31, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, + 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x47, + 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, + 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, + 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, + 0x35, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, + 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, 0x4b, + 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, + 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, + 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, + 0x39, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, + 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x4f, + 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, + 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, + 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, + 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, + 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x53, + 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, + 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, + 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, + 0x41, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, + 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, 0x57, + 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, + 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, + 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, + 0x45, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, + 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x5b, + 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, + 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, + 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, + 0x49, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, + 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x5f, + 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, + 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, + 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, + 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, + 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x63, + 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, + 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, + 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, + 0x51, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, + 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x67, + 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, + 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, + 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, + 0x55, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, + 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, 0x6b, + 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, + 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, + 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, + 0x59, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, + 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x6f, + 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, + 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, + 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, + 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, + 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x73, + 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, + 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, + 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, + 0x61, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, + 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x77, + 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, + 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, + 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, + 0x65, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, + 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x7b, + 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, + 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, + 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, + 0x69, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, + 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x7f, + 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, + 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, + 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, + 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, + 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x83, + 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, + 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, + 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, + 0x71, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, + 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0x87, + 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, + 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, + 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, + 0x75, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, + 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0x8b, + 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, + 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, + 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, + 0x79, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, + 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x8f, + 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, + 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, + 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, + 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, + 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, 0x93, + 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, + 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, + 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, + 0x81, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, + 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0x97, + 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, + 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, + 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, + 0x85, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, + 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0x9b, + 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, + 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, + 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, + 0x89, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, + 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0x9f, + 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, + 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, + 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, + 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, + 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xa3, + 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, + 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, + 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, + 0x91, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, + 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0xa7, + 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, + 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, + 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, + 0x95, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, + 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0xab, + 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, + 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, + 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, + 0x99, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, + 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xaf, + 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, + 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, + 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, + 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, + 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xb3, + 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, + 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, + 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, + 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, + 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xb7, + 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, + 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, + 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, + 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, + 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xbb, + 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, + 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, + 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, + 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, + 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xbf, + 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, + 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, + 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, + 0xad, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, + 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0xc3, + 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, + 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, + 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, + 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, + 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xc7, + 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, + 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, + 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, + 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, + 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xcb, + 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, + 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, + 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, + 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, + 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0xcf, + 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, + 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, + 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, + 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, + 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, + 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, + 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, + 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, + 0xcd, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x80, 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, + 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xd0, 0x02, + 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, + 0xd1, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x80, 0x04, 0xd2, 0x02, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x80, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xd3, 0x02, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, + 0xd4, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x80, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x80, 0x4d, 0x55, 0x01, 0x00, 0x00, + 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, + 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, + 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, + 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, + 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, + 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, + 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, + 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, + 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, + 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, + 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, + 0x00, 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, + 0xfe, 0x01, 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, + 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, + 0x02, 0x00, 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, + 0x04, 0x03, 0x02, 0x00, 0x00, 0x04, 0x04, 0x02, + 0x00, 0x00, 0x04, 0x05, 0x02, 0x00, 0x00, 0x04, + 0x06, 0x02, 0x00, 0x00, 0x04, 0x07, 0x02, 0x00, + 0x00, 0x04, 0x08, 0x02, 0x00, 0x00, 0x04, 0x09, + 0x02, 0x00, 0x00, 0x04, 0x0a, 0x02, 0x00, 0x00, + 0x26, 0x20, 0x00, 0x04, 0x0b, 0x02, 0x00, 0x00, + 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, + 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, + 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, + 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x23, + 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, + 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, + 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, + 0x11, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, + 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, 0x27, + 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, + 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, + 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, + 0x15, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, + 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, 0x2b, + 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, + 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, + 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, + 0x19, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, + 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x2f, + 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, + 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, + 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, + 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, + 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x33, + 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, + 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, + 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, + 0x21, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, + 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x37, + 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, + 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, + 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, + 0x25, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, + 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x3b, + 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, + 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, + 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, + 0x29, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, + 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x3f, + 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, + 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, + 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, + 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, + 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x43, + 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, + 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, + 0x31, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, + 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x47, + 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, + 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, + 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, + 0x35, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, + 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, 0x4b, + 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, + 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, + 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, + 0x39, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, + 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x4f, + 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, + 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, + 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, + 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, + 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x53, + 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, + 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, + 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, + 0x41, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, + 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, 0x57, + 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, + 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, + 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, + 0x45, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, + 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x5b, + 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, + 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, + 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, + 0x49, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, + 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x5f, + 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, + 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, + 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, + 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, + 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x63, + 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, + 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, + 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, + 0x51, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, + 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x67, + 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, + 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, + 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, + 0x55, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, + 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, 0x6b, + 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, + 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, + 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, + 0x59, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, + 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x6f, + 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, + 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, + 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, + 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, + 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x73, + 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, + 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, + 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, + 0x61, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, + 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x77, + 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, + 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, + 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, + 0x65, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, + 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x7b, + 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, + 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, + 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, + 0x69, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, + 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x7f, + 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, + 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, + 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, + 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, + 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x83, + 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, + 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, + 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, + 0x71, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, + 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0x87, + 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, + 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, + 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, + 0x75, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, + 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0x8b, + 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, + 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, + 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, + 0x79, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, + 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x8f, + 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, + 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, + 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, + 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, + 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, 0x93, + 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, + 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, + 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, + 0x81, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, + 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0x97, + 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, + 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, + 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, + 0x85, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, + 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0x9b, + 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, + 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, + 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, + 0x89, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, + 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0x9f, + 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, + 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, + 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, + 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, + 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xa3, + 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, + 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, + 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, + 0x91, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, + 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0xa7, + 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, + 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, + 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, + 0x95, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, + 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0xab, + 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, + 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, + 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, + 0x99, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, + 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xaf, + 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, + 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, + 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, + 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, + 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xb3, + 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, + 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, + 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, + 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, + 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xb7, + 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, + 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, + 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, + 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, + 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xbb, + 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, + 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, + 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, + 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, + 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xbf, + 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, + 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, + 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, + 0xad, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, + 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0xc3, + 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, + 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, + 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, + 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, + 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xc7, + 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, + 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, + 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, + 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, + 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xcb, + 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, + 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, + 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, + 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, + 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0xcf, + 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, + 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, + 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, + 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, + 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, + 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, + 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, + 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, + 0xcd, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x80, 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, + 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xd0, 0x02, + 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, + 0xd1, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x80, 0x04, 0xd2, 0x02, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x80, 0x04, 0xd5, 0x02, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x02, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, + 0xd7, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x80, 0x04, 0xd8, 0x02, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x80, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, + 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, + 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, + 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, + 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, + 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, + 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, + 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, + 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, + 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, + 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, + 0x00, 0x00, 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, + 0xfe, 0x01, 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, + 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, + 0x02, 0x00, 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, + 0x04, 0x03, 0x02, 0x00, 0x00, 0x04, 0x04, 0x02, + 0x00, 0x00, 0x04, 0x05, 0x02, 0x00, 0x00, 0x04, + 0x06, 0x02, 0x00, 0x00, 0x04, 0x07, 0x02, 0x00, + 0x00, 0x04, 0x08, 0x02, 0x00, 0x00, 0x04, 0x09, + 0x02, 0x00, 0x00, 0x04, 0x0a, 0x02, 0x00, 0x00, + 0x26, 0x20, 0x00, 0x04, 0x0b, 0x02, 0x00, 0x00, + 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, + 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, + 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, + 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x23, + 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, + 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, + 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, + 0x11, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, + 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, 0x27, + 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, + 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, + 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, + 0x15, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, + 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, 0x2b, + 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, + 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, + 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, + 0x19, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, + 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x2f, + 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, + 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, + 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, + 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, + 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x33, + 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, + 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, + 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, + 0x21, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, + 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x37, + 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, + 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, + 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, + 0x25, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, + 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x3b, + 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, + 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, + 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, + 0x29, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, + 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x3f, + 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, + 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, + 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, + 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, + 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x43, + 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, + 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, + 0x31, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, + 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x47, + 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, + 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, + 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, + 0x35, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, + 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, 0x4b, + 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, + 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, + 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, + 0x39, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, + 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x4f, + 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, + 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, + 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, + 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, + 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x53, + 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, + 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, + 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, + 0x41, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, + 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, 0x57, + 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, + 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, + 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, + 0x45, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, + 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x5b, + 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, + 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, + 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, + 0x49, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, + 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x5f, + 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, + 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, + 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, + 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, + 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x63, + 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, + 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, + 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, + 0x51, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, + 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x67, + 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, + 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, + 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, + 0x55, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, + 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, 0x6b, + 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, + 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, + 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, + 0x59, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, + 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x6f, + 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, + 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, + 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, + 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, + 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x73, + 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, + 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, + 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, + 0x61, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, + 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x77, + 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, + 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, + 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, + 0x65, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, + 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0x7b, + 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, + 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, + 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, + 0x69, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, + 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x7f, + 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, + 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, + 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, + 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, + 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x83, + 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, + 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, + 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, + 0x71, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, + 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0x87, + 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, + 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, + 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, + 0x75, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, + 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0x8b, + 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, + 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, + 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, + 0x79, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, + 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x8f, + 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, + 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, + 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, + 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, + 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, 0x93, + 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, + 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, + 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, + 0x81, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, + 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0x97, + 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, + 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, + 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, + 0x85, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, + 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0x9b, + 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, + 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, + 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, + 0x89, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, + 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0x9f, + 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, + 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, + 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, + 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, + 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xa3, + 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, + 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, + 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, + 0x91, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, + 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0xa7, + 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, + 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, + 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, + 0x95, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, + 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0xab, + 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, + 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, + 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, + 0x99, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, + 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xaf, + 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, + 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, + 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, + 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, + 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xb3, + 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, + 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, + 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, + 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, + 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xb7, + 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, + 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, + 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, + 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, + 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xbb, + 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, + 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, + 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, + 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, + 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xbf, + 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, + 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, + 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, + 0xad, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, + 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0xc3, + 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, + 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, + 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, + 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, + 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xc7, + 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, + 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, + 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, + 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, + 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xcb, + 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, + 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, + 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, + 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, + 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0xcf, + 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, + 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, + 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, + 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, + 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, + 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, + 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, + 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, + 0xcd, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x80, 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, + 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xd0, 0x02, + 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, + 0xd1, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x80, 0x04, 0xd2, 0x02, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x80, 0x04, 0xd5, 0x02, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x02, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, + 0xd7, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x80, 0x04, 0xd8, 0x02, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x80, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x80, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x4d, 0x84, 0x01, + 0x00, 0x00, 0x4d, 0x85, 0x01, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x7d, + 0xbe, 0x7e, 0xbe, 0x7f, 0xbe, 0x80, 0xbe, 0x81, + 0xbe, 0x82, 0xbe, 0x83, 0xbe, 0x84, 0xbe, 0x85, + 0xbe, 0x86, 0xbe, 0x87, 0xbe, 0x88, 0x26, 0x0c, + 0x00, 0x4d, 0x55, 0x01, 0x00, 0x00, 0x04, 0xd9, + 0x02, 0x00, 0x00, 0x04, 0xda, 0x02, 0x00, 0x00, + 0x04, 0xdb, 0x02, 0x00, 0x00, 0x04, 0xdc, 0x02, + 0x00, 0x00, 0x04, 0xdd, 0x02, 0x00, 0x00, 0x04, + 0xde, 0x02, 0x00, 0x00, 0x04, 0xdf, 0x02, 0x00, + 0x00, 0x04, 0xe0, 0x02, 0x00, 0x00, 0x04, 0xe1, + 0x02, 0x00, 0x00, 0x04, 0xe2, 0x02, 0x00, 0x00, + 0x04, 0xe3, 0x02, 0x00, 0x00, 0x04, 0xe4, 0x02, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xd9, 0x02, 0x00, 0x00, 0x04, + 0xda, 0x02, 0x00, 0x00, 0x04, 0xdb, 0x02, 0x00, + 0x00, 0x04, 0xdc, 0x02, 0x00, 0x00, 0x04, 0xdd, + 0x02, 0x00, 0x00, 0x04, 0xde, 0x02, 0x00, 0x00, + 0x04, 0xdf, 0x02, 0x00, 0x00, 0x04, 0xe0, 0x02, + 0x00, 0x00, 0x04, 0xe1, 0x02, 0x00, 0x00, 0x04, + 0xe2, 0x02, 0x00, 0x00, 0x04, 0xe3, 0x02, 0x00, + 0x00, 0x04, 0xe4, 0x02, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x69, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7e, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xe5, 0x02, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x55, 0x01, 0x00, 0x00, + 0x04, 0xe5, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe5, 0x02, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, + 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x4d, + 0x84, 0x01, 0x00, 0x00, 0x4d, 0x85, 0x01, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x55, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xe6, 0x02, 0x00, 0x00, 0x04, 0xe7, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x55, + 0x01, 0x00, 0x00, 0x04, 0xe6, 0x02, 0x00, 0x00, + 0x04, 0xe7, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x02, + 0x00, 0x00, 0x04, 0xe7, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x80, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x81, 0x01, + 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, + 0x00, 0x4d, 0x85, 0x01, 0x00, 0x00, 0x4d, 0xe2, + 0x00, 0x00, 0x00, 0x4d, 0xe8, 0x02, 0x00, 0x00, + 0x4d, 0xe9, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xea, + 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, + 0x02, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xec, 0x02, + 0x00, 0x00, 0x4d, 0xed, 0x02, 0x00, 0x00, 0x04, + 0xee, 0x02, 0x00, 0x00, 0x4d, 0xef, 0x02, 0x00, + 0x00, 0x4d, 0xf0, 0x02, 0x00, 0x00, 0x0b, 0x04, + 0xf1, 0x02, 0x00, 0x00, 0x4d, 0xed, 0x02, 0x00, + 0x00, 0x04, 0xf2, 0x02, 0x00, 0x00, 0x4d, 0xef, + 0x02, 0x00, 0x00, 0x4d, 0xf3, 0x02, 0x00, 0x00, + 0x0b, 0x04, 0xf4, 0x02, 0x00, 0x00, 0x4d, 0xed, + 0x02, 0x00, 0x00, 0x04, 0xf5, 0x02, 0x00, 0x00, + 0x4d, 0xef, 0x02, 0x00, 0x00, 0x4d, 0xf6, 0x02, + 0x00, 0x00, 0x4d, 0xf7, 0x02, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0xf8, 0x02, 0x00, 0x00, 0x4d, 0xf0, + 0x02, 0x00, 0x00, 0x04, 0xf9, 0x02, 0x00, 0x00, + 0x4d, 0xfa, 0x02, 0x00, 0x00, 0x04, 0xfb, 0x02, + 0x00, 0x00, 0x4d, 0xfc, 0x02, 0x00, 0x00, 0x04, + 0xfd, 0x02, 0x00, 0x00, 0x4d, 0xfe, 0x02, 0x00, + 0x00, 0x04, 0xff, 0x02, 0x00, 0x00, 0x4d, 0x00, + 0x03, 0x00, 0x00, 0x04, 0x01, 0x03, 0x00, 0x00, + 0x4d, 0x02, 0x03, 0x00, 0x00, 0x04, 0x03, 0x03, + 0x00, 0x00, 0x4d, 0x04, 0x03, 0x00, 0x00, 0x4d, + 0xea, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xf8, 0x02, + 0x00, 0x00, 0x4d, 0xf0, 0x02, 0x00, 0x00, 0x04, + 0xf9, 0x02, 0x00, 0x00, 0x4d, 0xfa, 0x02, 0x00, + 0x00, 0x04, 0xfb, 0x02, 0x00, 0x00, 0x4d, 0xfc, + 0x02, 0x00, 0x00, 0x04, 0xfd, 0x02, 0x00, 0x00, + 0x4d, 0xfe, 0x02, 0x00, 0x00, 0x04, 0xff, 0x02, + 0x00, 0x00, 0x4d, 0x00, 0x03, 0x00, 0x00, 0x04, + 0x01, 0x03, 0x00, 0x00, 0x4d, 0x02, 0x03, 0x00, + 0x00, 0x04, 0x03, 0x03, 0x00, 0x00, 0x4d, 0x04, + 0x03, 0x00, 0x00, 0x4d, 0x05, 0x03, 0x00, 0x00, + 0x4d, 0x06, 0x03, 0x00, 0x00, 0x0b, 0x04, 0x07, + 0x03, 0x00, 0x00, 0x4d, 0x08, 0x03, 0x00, 0x00, + 0x04, 0x09, 0x03, 0x00, 0x00, 0x4d, 0x0a, 0x03, + 0x00, 0x00, 0x04, 0x0b, 0x03, 0x00, 0x00, 0x4d, + 0x0c, 0x03, 0x00, 0x00, 0x04, 0x0d, 0x03, 0x00, + 0x00, 0x4d, 0x0e, 0x03, 0x00, 0x00, 0x04, 0x0f, + 0x03, 0x00, 0x00, 0x4d, 0x10, 0x03, 0x00, 0x00, + 0x04, 0x11, 0x03, 0x00, 0x00, 0x4d, 0x12, 0x03, + 0x00, 0x00, 0x04, 0x13, 0x03, 0x00, 0x00, 0x4d, + 0x14, 0x03, 0x00, 0x00, 0x04, 0x15, 0x03, 0x00, + 0x00, 0x4d, 0x16, 0x03, 0x00, 0x00, 0x04, 0x17, + 0x03, 0x00, 0x00, 0x4d, 0x18, 0x03, 0x00, 0x00, + 0x04, 0x19, 0x03, 0x00, 0x00, 0x4d, 0x1a, 0x03, + 0x00, 0x00, 0x04, 0x1b, 0x03, 0x00, 0x00, 0x4d, + 0x1c, 0x03, 0x00, 0x00, 0x04, 0x1d, 0x03, 0x00, + 0x00, 0x4d, 0x1e, 0x03, 0x00, 0x00, 0x04, 0x1f, + 0x03, 0x00, 0x00, 0x4d, 0x20, 0x03, 0x00, 0x00, + 0x04, 0x21, 0x03, 0x00, 0x00, 0x4d, 0x22, 0x03, + 0x00, 0x00, 0x04, 0x23, 0x03, 0x00, 0x00, 0x4d, + 0x24, 0x03, 0x00, 0x00, 0x04, 0x25, 0x03, 0x00, + 0x00, 0x4d, 0x26, 0x03, 0x00, 0x00, 0x04, 0x27, + 0x03, 0x00, 0x00, 0x4d, 0x28, 0x03, 0x00, 0x00, + 0x04, 0x29, 0x03, 0x00, 0x00, 0x4d, 0x2a, 0x03, + 0x00, 0x00, 0x04, 0x2b, 0x03, 0x00, 0x00, 0x4d, + 0x2c, 0x03, 0x00, 0x00, 0x04, 0x2d, 0x03, 0x00, + 0x00, 0x4d, 0x2e, 0x03, 0x00, 0x00, 0x04, 0x2f, + 0x03, 0x00, 0x00, 0x4d, 0x30, 0x03, 0x00, 0x00, + 0x4d, 0x31, 0x03, 0x00, 0x00, 0x4d, 0x45, 0x00, + 0x00, 0x00, 0x24, 0x01, 0x00, 0xcc, 0x28, 0xe4, + 0x0c, 0x01, 0x00, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, + 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_th_size = 34611; + +const uint8_t intl_th[34611] = { + 0x01, 0xcb, 0x06, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x74, 0x68, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x0e, + 0x7b, 0x31, 0x7d, 0x20, 0x7b, 0x30, 0x7d, 0x0a, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, 0x65, + 0x64, 0x69, 0x75, 0x6d, 0x08, 0x66, 0x75, 0x6c, + 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x02, 0x64, + 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, 0x06, 0x45, + 0x20, 0x64, 0x04, 0x45, 0x64, 0x10, 0x45, 0x20, + 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x06, 0x45, + 0x68, 0x6d, 0x15, 0x45, 0x00, 0x20, 0x00, 0x48, + 0x00, 0x48, 0x00, 0x3a, 0x00, 0x6d, 0x00, 0x6d, + 0x00, 0x20, 0x00, 0x19, 0x0e, 0x2e, 0x00, 0x06, + 0x45, 0x48, 0x6d, 0x16, 0x45, 0x20, 0x68, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x08, + 0x45, 0x68, 0x6d, 0x73, 0x14, 0x45, 0x20, 0x48, + 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x08, + 0x45, 0x48, 0x6d, 0x73, 0x06, 0x47, 0x20, 0x79, + 0x04, 0x47, 0x79, 0x0e, 0x4d, 0x4d, 0x4d, 0x20, + 0x47, 0x20, 0x79, 0x0a, 0x47, 0x79, 0x4d, 0x4d, + 0x4d, 0x12, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x20, + 0x47, 0x20, 0x79, 0x0c, 0x47, 0x79, 0x4d, 0x4d, + 0x4d, 0x64, 0x16, 0x45, 0x20, 0x64, 0x20, 0x4d, + 0x4d, 0x4d, 0x20, 0x47, 0x20, 0x79, 0x0e, 0x47, + 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x23, 0x45, + 0x00, 0x45, 0x00, 0x45, 0x00, 0x45, 0x00, 0x17, + 0x0e, 0x35, 0x0e, 0x48, 0x0e, 0x20, 0x00, 0x64, + 0x00, 0x20, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x4d, + 0x00, 0x20, 0x00, 0x47, 0x00, 0x20, 0x00, 0x79, + 0x00, 0x14, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x45, + 0x45, 0x45, 0x45, 0x64, 0x06, 0x68, 0x20, 0x61, + 0x02, 0x68, 0x04, 0x48, 0x48, 0x02, 0x48, 0x0c, + 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x04, 0x68, + 0x6d, 0x11, 0x48, 0x00, 0x48, 0x00, 0x3a, 0x00, + 0x6d, 0x00, 0x6d, 0x00, 0x20, 0x00, 0x19, 0x0e, + 0x2e, 0x00, 0x04, 0x48, 0x6d, 0x12, 0x68, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x06, + 0x68, 0x6d, 0x73, 0x10, 0x48, 0x48, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x06, 0x48, 0x6d, 0x73, + 0x16, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x61, 0x20, 0x76, 0x08, 0x68, 0x6d, 0x73, + 0x76, 0x14, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x20, 0x76, 0x08, 0x48, 0x6d, 0x73, + 0x76, 0x10, 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, + 0x20, 0x76, 0x06, 0x68, 0x6d, 0x76, 0x0e, 0x48, + 0x48, 0x3a, 0x6d, 0x6d, 0x20, 0x76, 0x06, 0x48, + 0x6d, 0x76, 0x02, 0x4c, 0x02, 0x4d, 0x06, 0x64, + 0x2f, 0x4d, 0x04, 0x4d, 0x64, 0x0a, 0x45, 0x20, + 0x64, 0x2f, 0x4d, 0x06, 0x4d, 0x45, 0x64, 0x06, + 0x4c, 0x4c, 0x4c, 0x06, 0x4d, 0x4d, 0x4d, 0x0a, + 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x08, 0x4d, 0x4d, + 0x4d, 0x64, 0x0e, 0x45, 0x20, 0x64, 0x20, 0x4d, + 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x45, 0x64, + 0x1b, 0x45, 0x00, 0x45, 0x00, 0x45, 0x00, 0x45, + 0x00, 0x17, 0x0e, 0x35, 0x0e, 0x48, 0x0e, 0x20, + 0x00, 0x64, 0x00, 0x20, 0x00, 0x4d, 0x00, 0x4d, + 0x00, 0x4d, 0x00, 0x10, 0x4d, 0x4d, 0x4d, 0x45, + 0x45, 0x45, 0x45, 0x64, 0x0c, 0x64, 0x20, 0x4d, + 0x4d, 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x4d, + 0x64, 0x10, 0x45, 0x20, 0x64, 0x20, 0x4d, 0x4d, + 0x4d, 0x4d, 0x0c, 0x4d, 0x4d, 0x4d, 0x4d, 0x45, + 0x64, 0x1d, 0x45, 0x00, 0x45, 0x00, 0x45, 0x00, + 0x45, 0x00, 0x17, 0x0e, 0x35, 0x0e, 0x48, 0x0e, + 0x20, 0x00, 0x64, 0x00, 0x20, 0x00, 0x4d, 0x00, + 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x12, 0x4d, + 0x4d, 0x4d, 0x4d, 0x45, 0x45, 0x45, 0x45, 0x64, + 0x0a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x08, 0x6d, + 0x6d, 0x73, 0x73, 0x04, 0x6d, 0x73, 0x02, 0x79, + 0x06, 0x4d, 0x2f, 0x79, 0x04, 0x79, 0x4d, 0x0a, + 0x64, 0x2f, 0x4d, 0x2f, 0x79, 0x06, 0x79, 0x4d, + 0x64, 0x0e, 0x45, 0x20, 0x64, 0x2f, 0x4d, 0x2f, + 0x79, 0x08, 0x79, 0x4d, 0x45, 0x64, 0x0a, 0x4d, + 0x4d, 0x4d, 0x20, 0x79, 0x08, 0x79, 0x4d, 0x4d, + 0x4d, 0x0e, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x20, + 0x79, 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x12, + 0x45, 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x20, + 0x79, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, + 0x1f, 0x45, 0x00, 0x45, 0x00, 0x45, 0x00, 0x45, + 0x00, 0x17, 0x0e, 0x35, 0x0e, 0x48, 0x0e, 0x20, + 0x00, 0x64, 0x00, 0x20, 0x00, 0x4d, 0x00, 0x4d, + 0x00, 0x4d, 0x00, 0x20, 0x00, 0x79, 0x00, 0x12, + 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x45, 0x45, 0x45, + 0x64, 0x10, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x47, + 0x20, 0x79, 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, + 0x14, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, + 0x47, 0x20, 0x79, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, + 0x4d, 0x64, 0x18, 0x45, 0x20, 0x64, 0x20, 0x4d, + 0x4d, 0x4d, 0x4d, 0x20, 0x47, 0x20, 0x79, 0x0e, + 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x25, + 0x45, 0x00, 0x45, 0x00, 0x45, 0x00, 0x45, 0x00, + 0x17, 0x0e, 0x35, 0x0e, 0x48, 0x0e, 0x20, 0x00, + 0x64, 0x00, 0x20, 0x00, 0x4d, 0x00, 0x4d, 0x00, + 0x4d, 0x00, 0x4d, 0x00, 0x20, 0x00, 0x47, 0x00, + 0x20, 0x00, 0x79, 0x00, 0x14, 0x79, 0x4d, 0x4d, + 0x4d, 0x4d, 0x45, 0x45, 0x45, 0x45, 0x64, 0x0a, + 0x51, 0x51, 0x51, 0x20, 0x79, 0x08, 0x79, 0x51, + 0x51, 0x51, 0x10, 0x51, 0x51, 0x51, 0x51, 0x20, + 0x47, 0x20, 0x79, 0x0a, 0x79, 0x51, 0x51, 0x51, + 0x51, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x73, 0x0c, 0x64, 0x2f, 0x4d, 0x2f, 0x79, + 0x79, 0x16, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x73, 0x3f, 0x48, 0x00, + 0x20, 0x00, 0x19, 0x0e, 0x32, 0x0e, 0x2c, 0x0e, + 0x34, 0x0e, 0x01, 0x0e, 0x32, 0x0e, 0x20, 0x00, + 0x6d, 0x00, 0x6d, 0x00, 0x20, 0x00, 0x19, 0x0e, + 0x32, 0x0e, 0x17, 0x0e, 0x35, 0x0e, 0x20, 0x00, + 0x73, 0x00, 0x73, 0x00, 0x20, 0x00, 0x27, 0x0e, + 0x34, 0x0e, 0x19, 0x0e, 0x32, 0x0e, 0x17, 0x0e, + 0x35, 0x0e, 0x20, 0x00, 0x7a, 0x00, 0x7a, 0x00, + 0x7a, 0x00, 0x7a, 0x00, 0x12, 0x68, 0x6d, 0x6d, + 0x73, 0x73, 0x7a, 0x7a, 0x7a, 0x7a, 0x39, 0x48, + 0x00, 0x20, 0x00, 0x19, 0x0e, 0x32, 0x0e, 0x2c, + 0x0e, 0x34, 0x0e, 0x01, 0x0e, 0x32, 0x0e, 0x20, + 0x00, 0x6d, 0x00, 0x6d, 0x00, 0x20, 0x00, 0x19, + 0x0e, 0x32, 0x0e, 0x17, 0x0e, 0x35, 0x0e, 0x20, + 0x00, 0x73, 0x00, 0x73, 0x00, 0x20, 0x00, 0x27, + 0x0e, 0x34, 0x0e, 0x19, 0x0e, 0x32, 0x0e, 0x17, + 0x0e, 0x35, 0x0e, 0x20, 0x00, 0x7a, 0x00, 0x08, + 0x68, 0x6d, 0x73, 0x7a, 0x0a, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x16, 0x74, 0x69, 0x6d, 0x65, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x0e, 0x66, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x09, 0x21, + 0x0e, 0x2e, 0x00, 0x04, 0x0e, 0x2e, 0x00, 0x09, + 0x01, 0x0e, 0x2e, 0x00, 0x1e, 0x0e, 0x2e, 0x00, + 0x0b, 0x21, 0x0e, 0x35, 0x0e, 0x2e, 0x00, 0x04, + 0x0e, 0x2e, 0x00, 0x0b, 0x40, 0x0e, 0x21, 0x0e, + 0x2e, 0x00, 0x22, 0x0e, 0x2e, 0x00, 0x09, 0x1e, + 0x0e, 0x2e, 0x00, 0x04, 0x0e, 0x2e, 0x00, 0x0b, + 0x21, 0x0e, 0x34, 0x0e, 0x2e, 0x00, 0x22, 0x0e, + 0x2e, 0x00, 0x09, 0x01, 0x0e, 0x2e, 0x00, 0x04, + 0x0e, 0x2e, 0x00, 0x09, 0x2a, 0x0e, 0x2e, 0x00, + 0x04, 0x0e, 0x2e, 0x00, 0x09, 0x01, 0x0e, 0x2e, + 0x00, 0x22, 0x0e, 0x2e, 0x00, 0x09, 0x15, 0x0e, + 0x2e, 0x00, 0x04, 0x0e, 0x2e, 0x00, 0x09, 0x1e, + 0x0e, 0x2e, 0x00, 0x22, 0x0e, 0x2e, 0x00, 0x09, + 0x18, 0x0e, 0x2e, 0x00, 0x04, 0x0e, 0x2e, 0x00, + 0x0c, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0d, + 0x21, 0x0e, 0x01, 0x0e, 0x23, 0x0e, 0x32, 0x0e, + 0x04, 0x0e, 0x21, 0x0e, 0x15, 0x01, 0x0e, 0x38, + 0x0e, 0x21, 0x0e, 0x20, 0x0e, 0x32, 0x0e, 0x1e, + 0x0e, 0x31, 0x0e, 0x19, 0x0e, 0x18, 0x0e, 0x4c, + 0x0e, 0x0d, 0x21, 0x0e, 0x35, 0x0e, 0x19, 0x0e, + 0x32, 0x0e, 0x04, 0x0e, 0x21, 0x0e, 0x0d, 0x40, + 0x0e, 0x21, 0x0e, 0x29, 0x0e, 0x32, 0x0e, 0x22, + 0x0e, 0x19, 0x0e, 0x0f, 0x1e, 0x0e, 0x24, 0x0e, + 0x29, 0x0e, 0x20, 0x0e, 0x32, 0x0e, 0x04, 0x0e, + 0x21, 0x0e, 0x11, 0x21, 0x0e, 0x34, 0x0e, 0x16, + 0x0e, 0x38, 0x0e, 0x19, 0x0e, 0x32, 0x0e, 0x22, + 0x0e, 0x19, 0x0e, 0x0f, 0x01, 0x0e, 0x23, 0x0e, + 0x01, 0x0e, 0x0e, 0x0e, 0x32, 0x0e, 0x04, 0x0e, + 0x21, 0x0e, 0x0f, 0x2a, 0x0e, 0x34, 0x0e, 0x07, + 0x0e, 0x2b, 0x0e, 0x32, 0x0e, 0x04, 0x0e, 0x21, + 0x0e, 0x0f, 0x01, 0x0e, 0x31, 0x0e, 0x19, 0x0e, + 0x22, 0x0e, 0x32, 0x0e, 0x22, 0x0e, 0x19, 0x0e, + 0x0d, 0x15, 0x0e, 0x38, 0x0e, 0x25, 0x0e, 0x32, + 0x0e, 0x04, 0x0e, 0x21, 0x0e, 0x13, 0x1e, 0x0e, + 0x24, 0x0e, 0x28, 0x0e, 0x08, 0x0e, 0x34, 0x0e, + 0x01, 0x0e, 0x32, 0x0e, 0x22, 0x0e, 0x19, 0x0e, + 0x0f, 0x18, 0x0e, 0x31, 0x0e, 0x19, 0x0e, 0x27, + 0x0e, 0x32, 0x0e, 0x04, 0x0e, 0x21, 0x0e, 0x0c, + 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x73, 0x05, 0x2d, + 0x0e, 0x32, 0x0e, 0x03, 0x08, 0x0e, 0x03, 0x2d, + 0x0e, 0x03, 0x1e, 0x0e, 0x05, 0x1e, 0x0e, 0x24, + 0x0e, 0x03, 0x28, 0x0e, 0x03, 0x2a, 0x0e, 0x07, + 0x2d, 0x0e, 0x32, 0x0e, 0x2e, 0x00, 0x05, 0x08, + 0x0e, 0x2e, 0x00, 0x05, 0x2d, 0x0e, 0x2e, 0x00, + 0x05, 0x1e, 0x0e, 0x2e, 0x00, 0x07, 0x1e, 0x0e, + 0x24, 0x0e, 0x2e, 0x00, 0x05, 0x28, 0x0e, 0x2e, + 0x00, 0x05, 0x2a, 0x0e, 0x2e, 0x00, 0x15, 0x27, + 0x0e, 0x31, 0x0e, 0x19, 0x0e, 0x2d, 0x0e, 0x32, + 0x0e, 0x17, 0x0e, 0x34, 0x0e, 0x15, 0x0e, 0x22, + 0x0e, 0x4c, 0x0e, 0x13, 0x27, 0x0e, 0x31, 0x0e, + 0x19, 0x0e, 0x08, 0x0e, 0x31, 0x0e, 0x19, 0x0e, + 0x17, 0x0e, 0x23, 0x0e, 0x4c, 0x0e, 0x13, 0x27, + 0x0e, 0x31, 0x0e, 0x19, 0x0e, 0x2d, 0x0e, 0x31, + 0x0e, 0x07, 0x0e, 0x04, 0x0e, 0x32, 0x0e, 0x23, + 0x0e, 0x0d, 0x27, 0x0e, 0x31, 0x0e, 0x19, 0x0e, + 0x1e, 0x0e, 0x38, 0x0e, 0x18, 0x0e, 0x17, 0x27, + 0x0e, 0x31, 0x0e, 0x19, 0x0e, 0x1e, 0x0e, 0x24, + 0x0e, 0x2b, 0x0e, 0x31, 0x0e, 0x2a, 0x0e, 0x1a, + 0x0e, 0x14, 0x0e, 0x35, 0x0e, 0x11, 0x27, 0x0e, + 0x31, 0x0e, 0x19, 0x0e, 0x28, 0x0e, 0x38, 0x0e, + 0x01, 0x0e, 0x23, 0x0e, 0x4c, 0x0e, 0x11, 0x27, + 0x0e, 0x31, 0x0e, 0x19, 0x0e, 0x40, 0x0e, 0x2a, + 0x0e, 0x32, 0x0e, 0x23, 0x0e, 0x4c, 0x0e, 0x08, + 0x64, 0x61, 0x79, 0x73, 0x09, 0x1e, 0x0e, 0x2e, + 0x00, 0x28, 0x0e, 0x2e, 0x00, 0x15, 0x1e, 0x0e, + 0x38, 0x0e, 0x17, 0x0e, 0x18, 0x0e, 0x28, 0x0e, + 0x31, 0x0e, 0x01, 0x0e, 0x23, 0x0e, 0x32, 0x0e, + 0x0a, 0x0e, 0x08, 0x65, 0x72, 0x61, 0x73, 0x15, + 0x01, 0x0e, 0x48, 0x0e, 0x2d, 0x0e, 0x19, 0x0e, + 0x40, 0x0e, 0x17, 0x0e, 0x35, 0x0e, 0x48, 0x0e, + 0x22, 0x0e, 0x07, 0x0e, 0x04, 0x61, 0x6d, 0x15, + 0x2b, 0x0e, 0x25, 0x0e, 0x31, 0x0e, 0x07, 0x0e, + 0x40, 0x0e, 0x17, 0x0e, 0x35, 0x0e, 0x48, 0x0e, + 0x22, 0x0e, 0x07, 0x0e, 0x04, 0x70, 0x6d, 0x14, + 0x64, 0x61, 0x79, 0x50, 0x65, 0x72, 0x69, 0x6f, + 0x64, 0x73, 0x0b, 0x40, 0x0e, 0x17, 0x0e, 0x32, + 0x0e, 0x17, 0x0e, 0x4c, 0x0e, 0x09, 0x1a, 0x0e, + 0x32, 0x0e, 0x1a, 0x0e, 0x32, 0x0e, 0x0f, 0x2e, + 0x0e, 0x32, 0x0e, 0x40, 0x0e, 0x17, 0x0e, 0x2d, + 0x0e, 0x23, 0x0e, 0x4c, 0x0e, 0x0b, 0x40, 0x0e, + 0x04, 0x0e, 0x35, 0x0e, 0x22, 0x0e, 0x1f, 0x0e, + 0x09, 0x42, 0x0e, 0x17, 0x0e, 0x1a, 0x0e, 0x32, + 0x0e, 0x11, 0x2d, 0x0e, 0x31, 0x0e, 0x21, 0x0e, + 0x40, 0x0e, 0x0a, 0x0e, 0x2d, 0x0e, 0x23, 0x0e, + 0x4c, 0x0e, 0x11, 0x1a, 0x0e, 0x32, 0x0e, 0x23, + 0x0e, 0x31, 0x0e, 0x21, 0x0e, 0x2e, 0x0e, 0x31, + 0x0e, 0x17, 0x0e, 0x13, 0x1a, 0x0e, 0x32, 0x0e, + 0x23, 0x0e, 0x32, 0x0e, 0x40, 0x0e, 0x21, 0x0e, + 0x32, 0x0e, 0x14, 0x0e, 0x32, 0x0e, 0x0f, 0x1a, + 0x0e, 0x32, 0x0e, 0x0a, 0x0e, 0x31, 0x0e, 0x19, + 0x0e, 0x2a, 0x0e, 0x4c, 0x0e, 0x0d, 0x1e, 0x0e, + 0x32, 0x0e, 0x42, 0x0e, 0x2d, 0x0e, 0x19, 0x0e, + 0x32, 0x0e, 0x0b, 0x2d, 0x0e, 0x35, 0x0e, 0x40, + 0x0e, 0x1b, 0x0e, 0x1b, 0x0e, 0x0b, 0x40, 0x0e, + 0x21, 0x0e, 0x2a, 0x0e, 0x23, 0x0e, 0x32, 0x0e, + 0x09, 0x19, 0x0e, 0x32, 0x0e, 0x0b, 0x0e, 0x35, + 0x0e, 0x08, 0x45, 0x52, 0x41, 0x30, 0x08, 0x45, + 0x52, 0x41, 0x31, 0x13, 0x40, 0x0e, 0x21, 0x0e, + 0x2a, 0x0e, 0x40, 0x0e, 0x04, 0x0e, 0x2d, 0x0e, + 0x40, 0x0e, 0x23, 0x0e, 0x21, 0x0e, 0x0d, 0x40, + 0x0e, 0x15, 0x0e, 0x40, 0x0e, 0x01, 0x0e, 0x21, + 0x0e, 0x17, 0x0e, 0x0d, 0x40, 0x0e, 0x2e, 0x0e, + 0x14, 0x0e, 0x32, 0x0e, 0x23, 0x0e, 0x4c, 0x0e, + 0x0f, 0x17, 0x0e, 0x32, 0x0e, 0x2e, 0x0e, 0x4c, + 0x0e, 0x0b, 0x0e, 0x31, 0x0e, 0x2a, 0x0e, 0x0b, + 0x40, 0x0e, 0x17, 0x0e, 0x2d, 0x0e, 0x23, 0x0e, + 0x4c, 0x0e, 0x0f, 0x40, 0x0e, 0x22, 0x0e, 0x04, + 0x0e, 0x32, 0x0e, 0x17, 0x0e, 0x34, 0x0e, 0x17, + 0x0e, 0x0f, 0x40, 0x0e, 0x21, 0x0e, 0x01, 0x0e, + 0x32, 0x0e, 0x1a, 0x0e, 0x34, 0x0e, 0x15, 0x0e, + 0x11, 0x40, 0x0e, 0x21, 0x0e, 0x35, 0x0e, 0x22, + 0x0e, 0x40, 0x0e, 0x0b, 0x0e, 0x35, 0x0e, 0x22, + 0x0e, 0x0d, 0x40, 0x0e, 0x08, 0x0e, 0x19, 0x0e, + 0x1a, 0x0e, 0x2d, 0x0e, 0x15, 0x0e, 0x09, 0x40, + 0x0e, 0x0b, 0x0e, 0x40, 0x0e, 0x19, 0x0e, 0x0b, + 0x2e, 0x0e, 0x31, 0x0e, 0x21, 0x0e, 0x40, 0x0e, + 0x25, 0x0e, 0x0b, 0x40, 0x0e, 0x19, 0x0e, 0x41, + 0x0e, 0x2e, 0x0e, 0x0b, 0x0e, 0x0f, 0x1e, 0x0e, + 0x32, 0x0e, 0x01, 0x0e, 0x39, 0x0e, 0x40, 0x0e, + 0x21, 0x0e, 0x19, 0x0e, 0x06, 0x4d, 0x30, 0x31, + 0x06, 0x4d, 0x30, 0x32, 0x06, 0x4d, 0x30, 0x33, + 0x06, 0x4d, 0x30, 0x34, 0x06, 0x4d, 0x30, 0x35, + 0x06, 0x4d, 0x30, 0x36, 0x06, 0x4d, 0x30, 0x37, + 0x06, 0x4d, 0x30, 0x38, 0x06, 0x4d, 0x30, 0x39, + 0x06, 0x4d, 0x31, 0x30, 0x06, 0x4d, 0x31, 0x31, + 0x06, 0x4d, 0x31, 0x32, 0x13, 0x01, 0x0e, 0x48, + 0x0e, 0x2d, 0x0e, 0x19, 0x0e, 0x20, 0x00, 0x04, + 0x0e, 0x2e, 0x00, 0x28, 0x0e, 0x2e, 0x00, 0x09, + 0x04, 0x0e, 0x2e, 0x00, 0x28, 0x0e, 0x2e, 0x00, + 0x0d, 0x01, 0x0e, 0x2e, 0x00, 0x2a, 0x0e, 0x2e, + 0x00, 0x28, 0x0e, 0x2e, 0x00, 0x09, 0x2a, 0x0e, + 0x2e, 0x00, 0x28, 0x0e, 0x2e, 0x00, 0x17, 0x1b, + 0x0e, 0x35, 0x0e, 0x01, 0x0e, 0x48, 0x0e, 0x2d, + 0x0e, 0x19, 0x0e, 0x20, 0x00, 0x04, 0x0e, 0x2e, + 0x00, 0x28, 0x0e, 0x2e, 0x00, 0x25, 0x1b, 0x0e, + 0x35, 0x0e, 0x01, 0x0e, 0x48, 0x0e, 0x2d, 0x0e, + 0x19, 0x0e, 0x04, 0x0e, 0x23, 0x0e, 0x34, 0x0e, + 0x2a, 0x0e, 0x15, 0x0e, 0x4c, 0x0e, 0x28, 0x0e, + 0x31, 0x0e, 0x01, 0x0e, 0x23, 0x0e, 0x32, 0x0e, + 0x0a, 0x0e, 0x19, 0x04, 0x0e, 0x23, 0x0e, 0x34, + 0x0e, 0x2a, 0x0e, 0x15, 0x0e, 0x4c, 0x0e, 0x28, + 0x0e, 0x31, 0x0e, 0x01, 0x0e, 0x23, 0x0e, 0x32, + 0x0e, 0x0a, 0x0e, 0x1f, 0x01, 0x0e, 0x48, 0x0e, + 0x2d, 0x0e, 0x19, 0x0e, 0x2a, 0x0e, 0x32, 0x0e, + 0x21, 0x0e, 0x31, 0x0e, 0x0d, 0x0e, 0x28, 0x0e, + 0x31, 0x0e, 0x01, 0x0e, 0x23, 0x0e, 0x32, 0x0e, + 0x0a, 0x0e, 0x17, 0x2a, 0x0e, 0x32, 0x0e, 0x21, + 0x0e, 0x31, 0x0e, 0x0d, 0x0e, 0x28, 0x0e, 0x31, + 0x0e, 0x01, 0x0e, 0x23, 0x0e, 0x32, 0x0e, 0x0a, + 0x0e, 0x0b, 0x17, 0x0e, 0x34, 0x0e, 0x0a, 0x0e, + 0x23, 0x0e, 0x35, 0x0e, 0x0b, 0x40, 0x0e, 0x2e, + 0x0e, 0x27, 0x0e, 0x32, 0x0e, 0x19, 0x0e, 0x0d, + 0x01, 0x0e, 0x35, 0x0e, 0x2a, 0x0e, 0x40, 0x0e, + 0x25, 0x0e, 0x1f, 0x0e, 0x0b, 0x40, 0x0e, 0x15, + 0x0e, 0x40, 0x0e, 0x27, 0x0e, 0x15, 0x0e, 0x0b, + 0x40, 0x0e, 0x0a, 0x0e, 0x27, 0x0e, 0x31, 0x0e, + 0x15, 0x0e, 0x11, 0x2d, 0x0e, 0x32, 0x0e, 0x14, + 0x0e, 0x32, 0x0e, 0x23, 0x0e, 0x4c, 0x0e, 0x20, + 0x00, 0x49, 0x00, 0x0d, 0x2d, 0x0e, 0x32, 0x0e, + 0x14, 0x0e, 0x32, 0x0e, 0x23, 0x0e, 0x4c, 0x0e, + 0x0d, 0x19, 0x0e, 0x34, 0x0e, 0x2a, 0x0e, 0x0b, + 0x0e, 0x32, 0x0e, 0x19, 0x0e, 0x0d, 0x2d, 0x0e, + 0x34, 0x0e, 0x22, 0x0e, 0x32, 0x0e, 0x23, 0x0e, + 0x4c, 0x0e, 0x0b, 0x2a, 0x0e, 0x35, 0x0e, 0x27, + 0x0e, 0x31, 0x0e, 0x19, 0x0e, 0x0b, 0x15, 0x0e, + 0x32, 0x0e, 0x21, 0x0e, 0x39, 0x0e, 0x0b, 0x0e, + 0x07, 0x2d, 0x0e, 0x31, 0x0e, 0x1f, 0x0e, 0x0d, + 0x40, 0x0e, 0x2d, 0x0e, 0x25, 0x0e, 0x2d, 0x0e, + 0x38, 0x0e, 0x25, 0x0e, 0x13, 0x2d, 0x0e, 0x32, + 0x0e, 0x14, 0x0e, 0x32, 0x0e, 0x23, 0x0e, 0x4c, + 0x0e, 0x20, 0x00, 0x49, 0x00, 0x49, 0x00, 0x09, + 0x22, 0x0e, 0x2e, 0x00, 0x28, 0x0e, 0x2e, 0x00, + 0x0b, 0x08, 0x0e, 0x34, 0x0e, 0x15, 0x0e, 0x23, + 0x0e, 0x32, 0x0e, 0x0d, 0x27, 0x0e, 0x34, 0x0e, + 0x2a, 0x0e, 0x32, 0x0e, 0x02, 0x0e, 0x32, 0x0e, + 0x0b, 0x40, 0x0e, 0x0a, 0x0e, 0x29, 0x0e, 0x10, + 0x0e, 0x32, 0x0e, 0x0b, 0x2d, 0x0e, 0x31, 0x0e, + 0x29, 0x0e, 0x0e, 0x0e, 0x32, 0x0e, 0x0b, 0x28, + 0x0e, 0x23, 0x0e, 0x27, 0x0e, 0x13, 0x0e, 0x32, + 0x0e, 0x0b, 0x1e, 0x0e, 0x31, 0x0e, 0x15, 0x0e, + 0x23, 0x0e, 0x32, 0x0e, 0x0f, 0x2d, 0x0e, 0x31, + 0x0e, 0x28, 0x0e, 0x27, 0x0e, 0x34, 0x0e, 0x0a, + 0x0e, 0x32, 0x0e, 0x0f, 0x01, 0x0e, 0x32, 0x0e, + 0x23, 0x0e, 0x15, 0x0e, 0x34, 0x0e, 0x01, 0x0e, + 0x32, 0x0e, 0x0f, 0x21, 0x0e, 0x24, 0x0e, 0x04, + 0x0e, 0x28, 0x0e, 0x34, 0x0e, 0x23, 0x0e, 0x32, + 0x0e, 0x0b, 0x1b, 0x0e, 0x38, 0x0e, 0x29, 0x0e, + 0x22, 0x0e, 0x32, 0x0e, 0x09, 0x21, 0x0e, 0x32, + 0x0e, 0x06, 0x0e, 0x30, 0x0e, 0x0d, 0x1c, 0x0e, + 0x25, 0x0e, 0x04, 0x0e, 0x38, 0x0e, 0x13, 0x0e, + 0x35, 0x0e, 0x09, 0x21, 0x0e, 0x2e, 0x00, 0x28, + 0x0e, 0x2e, 0x00, 0x0d, 0x21, 0x0e, 0x38, 0x0e, + 0x2e, 0x0e, 0x31, 0x0e, 0x23, 0x0e, 0x2e, 0x00, + 0x0b, 0x40, 0x0e, 0x28, 0x0e, 0x32, 0x0e, 0x30, + 0x0e, 0x2e, 0x00, 0x0d, 0x23, 0x0e, 0x2d, 0x0e, + 0x1a, 0x0e, 0x35, 0x0e, 0x20, 0x00, 0x49, 0x00, + 0x0f, 0x23, 0x0e, 0x2d, 0x0e, 0x1a, 0x0e, 0x35, + 0x0e, 0x20, 0x00, 0x49, 0x00, 0x49, 0x00, 0x11, + 0x08, 0x0e, 0x38, 0x0e, 0x21, 0x0e, 0x32, 0x0e, + 0x14, 0x0e, 0x32, 0x0e, 0x20, 0x00, 0x49, 0x00, + 0x13, 0x08, 0x0e, 0x38, 0x0e, 0x21, 0x0e, 0x32, + 0x0e, 0x14, 0x0e, 0x32, 0x0e, 0x20, 0x00, 0x49, + 0x00, 0x49, 0x00, 0x0b, 0x40, 0x0e, 0x23, 0x0e, + 0x32, 0x0e, 0x30, 0x0e, 0x2e, 0x00, 0x0b, 0x0a, + 0x0e, 0x30, 0x0e, 0x2d, 0x0e, 0x4c, 0x0e, 0x2e, + 0x00, 0x0f, 0x40, 0x0e, 0x23, 0x0e, 0x32, 0x0e, + 0x30, 0x0e, 0x21, 0x0e, 0x30, 0x0e, 0x2e, 0x00, + 0x0b, 0x40, 0x0e, 0x0a, 0x0e, 0x32, 0x0e, 0x27, + 0x0e, 0x2e, 0x00, 0x11, 0x0b, 0x0e, 0x38, 0x0e, + 0x25, 0x0e, 0x01, 0x0e, 0x34, 0x0e, 0x2d, 0x0e, + 0x3a, 0x0e, 0x2e, 0x00, 0x0f, 0x0b, 0x0e, 0x38, + 0x0e, 0x25, 0x0e, 0x2b, 0x0e, 0x34, 0x0e, 0x08, + 0x0e, 0x2e, 0x00, 0x13, 0x21, 0x0e, 0x38, 0x0e, + 0x2e, 0x0e, 0x30, 0x0e, 0x23, 0x0e, 0x4c, 0x0e, + 0x23, 0x0e, 0x2d, 0x0e, 0x21, 0x0e, 0x0d, 0x0b, + 0x0e, 0x2d, 0x0e, 0x1f, 0x0e, 0x32, 0x0e, 0x23, + 0x0e, 0x4c, 0x0e, 0x0b, 0x23, 0x0e, 0x2d, 0x0e, + 0x08, 0x0e, 0x31, 0x0e, 0x1a, 0x0e, 0x0f, 0x0a, + 0x0e, 0x30, 0x0e, 0x2d, 0x0e, 0x30, 0x0e, 0x1a, + 0x0e, 0x32, 0x0e, 0x19, 0x0e, 0x0f, 0x23, 0x0e, + 0x2d, 0x0e, 0x21, 0x0e, 0x30, 0x0e, 0x14, 0x0e, + 0x2d, 0x0e, 0x19, 0x0e, 0x0d, 0x40, 0x0e, 0x0a, + 0x0e, 0x32, 0x0e, 0x27, 0x0e, 0x31, 0x0e, 0x25, + 0x0e, 0x17, 0x0b, 0x0e, 0x38, 0x0e, 0x25, 0x0e, + 0x01, 0x0e, 0x34, 0x0e, 0x2d, 0x0e, 0x3a, 0x0e, + 0x14, 0x0e, 0x30, 0x0e, 0x2e, 0x0e, 0x3a, 0x0e, + 0x15, 0x0b, 0x0e, 0x38, 0x0e, 0x25, 0x0e, 0x2b, + 0x0e, 0x34, 0x0e, 0x08, 0x0e, 0x0d, 0x0e, 0x30, + 0x0e, 0x2e, 0x0e, 0x3a, 0x0e, 0x09, 0x2e, 0x0e, + 0x2e, 0x00, 0x28, 0x0e, 0x2e, 0x00, 0x1f, 0x2e, + 0x0e, 0x34, 0x0e, 0x08, 0x0e, 0x40, 0x0e, 0x23, + 0x0e, 0x32, 0x0e, 0x30, 0x0e, 0x2b, 0x0e, 0x4c, + 0x0e, 0x28, 0x0e, 0x31, 0x0e, 0x01, 0x0e, 0x23, + 0x0e, 0x32, 0x0e, 0x0a, 0x0e, 0x1f, 0x54, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x36, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x13, 0x20, 0x36, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x21, 0x53, 0x00, 0x68, 0x00, 0x75, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1f, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, + 0x57, 0x00, 0x61, 0x00, 0x64, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x1f, 0x52, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x1d, 0x59, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1f, 0x4a, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6b, + 0x00, 0x61, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x2d, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x2d, 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x2b, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x2d, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x2a, 0x4a, 0x69, 0x6e, 0x67, 0x6f, + 0x2d, 0x6b, 0x65, 0x69, 0x75, 0x6e, 0x20, 0x28, + 0x37, 0x36, 0x37, 0x2d, 0x37, 0x37, 0x30, 0x29, + 0x1d, 0x48, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x37, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, + 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, 0x64, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, 0x4b, + 0x00, 0x4d, 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x38, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4a, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x61, 0x00, + 0x6a, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, + 0x53, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x20, 0x54, + 0x65, 0x6e, 0x2d, 0x61, 0x6e, 0x20, 0x28, 0x38, + 0x35, 0x37, 0x2d, 0x38, 0x35, 0x39, 0x29, 0x1f, + 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x47, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, + 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1d, 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, + 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x34, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1b, 0x4c, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, + 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x1d, 0x41, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x1d, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x4a, 0x00, 0x69, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x29, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x27, 0x4a, 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, + 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4c, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x61, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x25, 0x4a, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x24, 0x54, 0x65, 0x6e, 0x2d, 0x65, + 0x69, 0x20, 0x28, 0x31, 0x31, 0x31, 0x30, 0x2d, + 0x31, 0x31, 0x31, 0x33, 0x29, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, + 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x4d, 0x01, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x45, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x6a, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x48, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, + 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4c, + 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6d, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x4a, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x59, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x75, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x29, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x29, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x4a, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x21, 0x4a, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x27, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x75, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x29, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x74, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x29, 0x52, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x4e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, + 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x61, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, + 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x27, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x45, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, 0x69, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x27, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x27, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x61, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x41, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x4d, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x02, 0x54, 0x02, 0x53, 0x21, 0x17, 0x0e, 0x30, + 0x0e, 0x2d, 0x0e, 0x34, 0x0e, 0x01, 0x0e, 0x30, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x36, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x21, 0x2e, 0x0e, + 0x30, 0x0e, 0x01, 0x0e, 0x38, 0x0e, 0x0a, 0x0e, + 0x34, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x13, 0x20, 0x36, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x2e, + 0x0e, 0x32, 0x0e, 0x01, 0x0e, 0x38, 0x0e, 0x42, + 0x0e, 0x2e, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x36, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1d, + 0x0a, 0x0e, 0x38, 0x0e, 0x42, 0x0e, 0x0a, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x17, 0x0e, 0x30, + 0x0e, 0x2d, 0x0e, 0x34, 0x0e, 0x42, 0x0e, 0x2e, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x40, 0x0e, + 0x04, 0x0e, 0x2d, 0x0e, 0x38, 0x0e, 0x07, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x1d, 0x27, 0x0e, 0x30, + 0x0e, 0x42, 0x0e, 0x14, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x1d, 0x40, 0x0e, 0x23, 0x0e, 0x01, 0x0e, + 0x34, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, 0x42, + 0x0e, 0x22, 0x0e, 0x42, 0x0e, 0x23, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1f, 0x08, 0x0e, 0x34, 0x0e, + 0x07, 0x0e, 0x01, 0x0e, 0x34, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x27, 0x40, 0x0e, 0x17, 0x0e, 0x47, + 0x0e, 0x21, 0x0e, 0x40, 0x0e, 0x1e, 0x0e, 0x35, + 0x0e, 0x22, 0x0e, 0x27, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x33, 0x40, 0x0e, 0x17, 0x0e, 0x47, 0x0e, + 0x21, 0x0e, 0x40, 0x0e, 0x1e, 0x0e, 0x35, 0x0e, + 0x22, 0x0e, 0x27, 0x0e, 0x2d, 0x00, 0x04, 0x0e, + 0x31, 0x0e, 0x21, 0x0e, 0x42, 0x0e, 0x1b, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x31, 0x40, 0x0e, 0x17, + 0x0e, 0x47, 0x0e, 0x21, 0x0e, 0x40, 0x0e, 0x1e, + 0x0e, 0x35, 0x0e, 0x22, 0x0e, 0x27, 0x0e, 0x2d, + 0x00, 0x42, 0x0e, 0x0a, 0x0e, 0x42, 0x0e, 0x2e, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x31, 0x40, 0x0e, + 0x17, 0x0e, 0x47, 0x0e, 0x21, 0x0e, 0x40, 0x0e, + 0x1e, 0x0e, 0x35, 0x0e, 0x22, 0x0e, 0x27, 0x0e, + 0x2d, 0x00, 0x42, 0x0e, 0x2e, 0x0e, 0x08, 0x0e, + 0x34, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x35, 0x40, + 0x0e, 0x17, 0x0e, 0x47, 0x0e, 0x21, 0x0e, 0x40, + 0x0e, 0x1e, 0x0e, 0x35, 0x0e, 0x22, 0x0e, 0x27, + 0x0e, 0x2d, 0x00, 0x08, 0x0e, 0x34, 0x0e, 0x07, + 0x0e, 0x42, 0x0e, 0x07, 0x0e, 0x30, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x2d, 0x08, 0x0e, 0x34, 0x0e, + 0x07, 0x0e, 0x42, 0x0e, 0x07, 0x0e, 0x30, 0x0e, + 0x2d, 0x00, 0x40, 0x0e, 0x04, 0x0e, 0x2d, 0x0e, + 0x38, 0x0e, 0x07, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x37, 0x00, 0x2d, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x1d, 0x42, 0x0e, 0x2e, 0x0e, 0x01, 0x0e, 0x34, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x37, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x21, 0x40, 0x0e, + 0x17, 0x0e, 0x47, 0x0e, 0x19, 0x0e, 0x42, 0x0e, + 0x2d, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, 0x2b, 0x40, + 0x0e, 0x2d, 0x0e, 0x47, 0x0e, 0x19, 0x0e, 0x40, + 0x0e, 0x23, 0x0e, 0x35, 0x0e, 0x22, 0x0e, 0x30, + 0x0e, 0x01, 0x0e, 0x38, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x21, 0x14, 0x0e, 0x30, 0x0e, 0x2d, 0x0e, + 0x34, 0x0e, 0x42, 0x0e, 0x14, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x1f, 0x42, 0x0e, 0x04, 0x0e, 0x19, + 0x0e, 0x34, 0x0e, 0x07, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x21, 0x40, 0x0e, 0x17, 0x0e, 0x47, 0x0e, + 0x19, 0x0e, 0x42, 0x0e, 0x0a, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1d, 0x42, 0x0e, 0x0a, 0x0e, 0x27, + 0x0e, 0x30, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, + 0x04, 0x0e, 0x30, 0x0e, 0x42, 0x0e, 0x08, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1f, 0x19, 0x0e, 0x34, + 0x0e, 0x19, 0x0e, 0x08, 0x0e, 0x38, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x0b, 0x0e, 0x30, 0x0e, + 0x2d, 0x0e, 0x34, 0x0e, 0x42, 0x0e, 0x01, 0x0e, + 0x30, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x40, + 0x0e, 0x17, 0x0e, 0x47, 0x0e, 0x19, 0x0e, 0x19, + 0x0e, 0x31, 0x0e, 0x07, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x1f, 0x42, 0x0e, 0x08, 0x0e, 0x07, 0x0e, + 0x31, 0x0e, 0x07, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x21, 0x40, 0x0e, 0x01, 0x0e, 0x47, 0x0e, 0x07, + 0x0e, 0x40, 0x0e, 0x01, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x1f, 0x19, 0x0e, 0x34, 0x0e, 0x19, 0x0e, + 0x19, 0x0e, 0x30, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x04, 0x0e, 0x31, 0x0e, 0x21, 0x0e, 0x40, + 0x0e, 0x1e, 0x0e, 0x35, 0x0e, 0x22, 0x0e, 0x27, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x42, 0x0e, + 0x0a, 0x0e, 0x15, 0x0e, 0x30, 0x0e, 0x2d, 0x0e, + 0x34, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x40, + 0x0e, 0x2d, 0x0e, 0x47, 0x0e, 0x07, 0x0e, 0x07, + 0x0e, 0x34, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, + 0x40, 0x0e, 0x2d, 0x0e, 0x47, 0x0e, 0x19, 0x0e, + 0x42, 0x0e, 0x0a, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1d, 0x42, 0x0e, 0x0a, 0x0e, 0x40, 0x0e, 0x2e, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, 0x40, 0x0e, + 0x17, 0x0e, 0x47, 0x0e, 0x07, 0x0e, 0x40, 0x0e, + 0x07, 0x0e, 0x35, 0x0e, 0x22, 0x0e, 0x27, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x34, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x2b, 0x40, 0x0e, 0x17, + 0x0e, 0x47, 0x0e, 0x19, 0x0e, 0x40, 0x0e, 0x23, + 0x0e, 0x35, 0x0e, 0x22, 0x0e, 0x30, 0x0e, 0x01, + 0x0e, 0x38, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x27, + 0x40, 0x0e, 0x17, 0x0e, 0x47, 0x0e, 0x19, 0x0e, + 0x42, 0x0e, 0x15, 0x0e, 0x30, 0x0e, 0x01, 0x0e, + 0x38, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, 0x42, + 0x0e, 0x2d, 0x0e, 0x27, 0x0e, 0x30, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1d, 0x42, 0x0e, 0x04, 0x0e, + 0x42, 0x0e, 0x2e, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x1f, 0x2d, 0x0e, 0x31, 0x0e, 0x19, 0x0e, 0x19, + 0x0e, 0x30, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, + 0x40, 0x0e, 0x17, 0x0e, 0x47, 0x0e, 0x19, 0x0e, + 0x42, 0x0e, 0x23, 0x0e, 0x30, 0x0e, 0x01, 0x0e, + 0x38, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x40, + 0x0e, 0x17, 0x0e, 0x47, 0x0e, 0x19, 0x0e, 0x40, + 0x0e, 0x2d, 0x0e, 0x47, 0x0e, 0x07, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x21, 0x42, 0x0e, 0x08, 0x0e, + 0x40, 0x0e, 0x07, 0x0e, 0x47, 0x0e, 0x07, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x40, 0x0e, 0x17, + 0x0e, 0x47, 0x0e, 0x07, 0x0e, 0x40, 0x0e, 0x07, + 0x0e, 0x47, 0x0e, 0x07, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x1f, 0x40, 0x0e, 0x2d, 0x0e, 0x01, 0x0e, + 0x31, 0x0e, 0x07, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x1f, 0x04, 0x0e, 0x31, 0x0e, 0x19, 0x0e, 0x19, + 0x0e, 0x30, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, + 0x40, 0x0e, 0x2d, 0x0e, 0x40, 0x0e, 0x2d, 0x0e, + 0x47, 0x0e, 0x07, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x1d, 0x40, 0x0e, 0x2d, 0x0e, 0x42, 0x0e, 0x0b, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x42, 0x0e, + 0x0a, 0x0e, 0x40, 0x0e, 0x23, 0x0e, 0x35, 0x0e, + 0x22, 0x0e, 0x30, 0x0e, 0x01, 0x0e, 0x38, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x42, 0x0e, 0x0a, + 0x0e, 0x42, 0x0e, 0x15, 0x0e, 0x30, 0x0e, 0x01, + 0x0e, 0x38, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, + 0x42, 0x0e, 0x0a, 0x0e, 0x42, 0x0e, 0x2e, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x04, + 0x0e, 0x31, 0x0e, 0x19, 0x0e, 0x42, 0x0e, 0x01, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x21, 0x42, 0x0e, 0x0a, 0x0e, 0x27, 0x0e, + 0x30, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x25, 0x04, 0x0e, 0x31, 0x0e, 0x19, + 0x0e, 0x19, 0x0e, 0x34, 0x0e, 0x07, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x08, 0x0e, 0x34, 0x0e, 0x2d, 0x0e, 0x31, 0x0e, + 0x07, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x21, 0x0e, 0x31, 0x0e, 0x19, + 0x0e, 0x08, 0x0e, 0x38, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x42, 0x0e, + 0x0a, 0x0e, 0x40, 0x0e, 0x07, 0x0e, 0x47, 0x0e, + 0x07, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x2b, 0x42, 0x0e, 0x0a, 0x0e, 0x40, + 0x0e, 0x23, 0x0e, 0x35, 0x0e, 0x22, 0x0e, 0x30, + 0x0e, 0x01, 0x0e, 0x38, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x42, 0x0e, + 0x0a, 0x0e, 0x04, 0x0e, 0x35, 0x0e, 0x27, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x29, 0x04, 0x0e, 0x31, 0x0e, 0x19, 0x0e, 0x42, + 0x0e, 0x15, 0x0e, 0x30, 0x0e, 0x01, 0x0e, 0x38, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x21, 0x40, 0x0e, 0x2d, 0x0e, 0x42, 0x0e, + 0x0a, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x25, 0x40, 0x0e, 0x17, 0x0e, 0x47, + 0x0e, 0x07, 0x0e, 0x07, 0x0e, 0x34, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x42, 0x0e, 0x04, 0x0e, 0x40, 0x0e, 0x2e, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x2b, 0x08, 0x0e, 0x34, 0x0e, 0x40, 0x0e, 0x23, + 0x0e, 0x35, 0x0e, 0x22, 0x0e, 0x30, 0x0e, 0x01, + 0x0e, 0x38, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x27, 0x40, 0x0e, 0x2d, 0x0e, + 0x47, 0x0e, 0x07, 0x0e, 0x04, 0x0e, 0x35, 0x0e, + 0x27, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x21, 0x42, 0x0e, 0x0a, 0x0e, 0x42, + 0x0e, 0x2e, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x2b, 0x42, 0x0e, 0x0a, 0x0e, + 0x40, 0x0e, 0x23, 0x0e, 0x35, 0x0e, 0x22, 0x0e, + 0x30, 0x0e, 0x01, 0x0e, 0x38, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x40, + 0x0e, 0x2d, 0x0e, 0x42, 0x0e, 0x2e, 0x0e, 0x30, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x27, 0x42, 0x0e, 0x2d, 0x0e, 0x42, 0x0e, + 0x15, 0x0e, 0x30, 0x0e, 0x01, 0x0e, 0x38, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x04, 0x0e, 0x31, 0x0e, 0x19, 0x0e, 0x08, + 0x0e, 0x34, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x04, 0x0e, 0x30, 0x0e, + 0x42, 0x0e, 0x2e, 0x0e, 0x30, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, 0x21, 0x40, + 0x0e, 0x2d, 0x0e, 0x42, 0x0e, 0x0a, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x29, 0x00, 0x27, + 0x42, 0x0e, 0x0a, 0x0e, 0x42, 0x0e, 0x15, 0x0e, + 0x30, 0x0e, 0x01, 0x0e, 0x38, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x42, + 0x0e, 0x04, 0x0e, 0x27, 0x0e, 0x30, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, + 0x42, 0x0e, 0x0a, 0x0e, 0x08, 0x0e, 0x34, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x21, 0x04, 0x0e, 0x30, 0x0e, 0x42, 0x0e, 0x0a, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x27, 0x40, 0x0e, 0x17, 0x0e, 0x47, 0x0e, + 0x19, 0x0e, 0x19, 0x0e, 0x34, 0x0e, 0x07, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x40, 0x0e, 0x17, 0x0e, 0x47, 0x0e, 0x19, + 0x0e, 0x40, 0x0e, 0x2d, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x40, 0x0e, + 0x2d, 0x0e, 0x01, 0x0e, 0x35, 0x0e, 0x27, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x40, 0x0e, 0x01, 0x0e, 0x47, 0x0e, 0x19, + 0x0e, 0x40, 0x0e, 0x2d, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x42, 0x0e, + 0x2e, 0x0e, 0x30, 0x0e, 0x2d, 0x0e, 0x31, 0x0e, + 0x07, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x40, 0x0e, 0x17, 0x0e, 0x47, + 0x0e, 0x19, 0x0e, 0x08, 0x0e, 0x34, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x14, 0x0e, 0x30, 0x0e, 0x2d, 0x0e, 0x34, 0x0e, + 0x08, 0x0e, 0x34, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x40, 0x0e, 0x17, + 0x0e, 0x47, 0x0e, 0x19, 0x0e, 0x42, 0x0e, 0x0a, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x21, 0x42, 0x0e, 0x0a, 0x0e, 0x42, 0x0e, + 0x0a, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x27, 0x42, 0x0e, 0x2e, 0x0e, 0x30, + 0x0e, 0x40, 0x0e, 0x2d, 0x0e, 0x47, 0x0e, 0x07, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x40, 0x0e, 0x2d, 0x0e, 0x08, 0x0e, + 0x34, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x21, 0x42, 0x0e, 0x04, 0x0e, 0x08, + 0x0e, 0x34, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x40, 0x0e, 0x17, 0x0e, + 0x47, 0x0e, 0x19, 0x0e, 0x42, 0x0e, 0x22, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x25, 0x04, 0x0e, 0x35, 0x0e, 0x27, 0x0e, 0x2d, + 0x0e, 0x31, 0x0e, 0x07, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x19, 0x0e, + 0x34, 0x0e, 0x21, 0x0e, 0x40, 0x0e, 0x1b, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x04, 0x0e, 0x35, 0x0e, 0x27, 0x0e, 0x08, + 0x0e, 0x38, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x27, 0x42, 0x0e, 0x2e, 0x0e, + 0x30, 0x0e, 0x40, 0x0e, 0x07, 0x0e, 0x47, 0x0e, + 0x07, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x40, 0x0e, 0x2e, 0x0e, 0x08, + 0x0e, 0x34, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x2b, 0x40, 0x0e, 0x2d, 0x0e, + 0x40, 0x0e, 0x23, 0x0e, 0x35, 0x0e, 0x22, 0x0e, + 0x30, 0x0e, 0x01, 0x0e, 0x38, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x42, + 0x0e, 0x2d, 0x0e, 0x42, 0x0e, 0x2e, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, + 0x42, 0x0e, 0x0a, 0x0e, 0x01, 0x0e, 0x31, 0x0e, + 0x07, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x40, 0x0e, 0x2d, 0x0e, 0x21, + 0x0e, 0x31, 0x0e, 0x07, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x19, 0x0e, + 0x34, 0x0e, 0x19, 0x0e, 0x2d, 0x0e, 0x31, 0x0e, + 0x07, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x04, 0x0e, 0x30, 0x0e, 0x42, + 0x0e, 0x2d, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x42, 0x0e, 0x0a, 0x0e, + 0x2d, 0x0e, 0x31, 0x0e, 0x07, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, 0x2d, + 0x0e, 0x31, 0x0e, 0x07, 0x0e, 0x40, 0x0e, 0x07, + 0x0e, 0x47, 0x0e, 0x07, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x08, 0x0e, + 0x34, 0x0e, 0x42, 0x0e, 0x0a, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x42, + 0x0e, 0x22, 0x0e, 0x27, 0x0e, 0x30, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, + 0x08, 0x0e, 0x38, 0x0e, 0x40, 0x0e, 0x2d, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x2f, 0x40, 0x0e, 0x01, 0x0e, 0x47, 0x0e, 0x19, + 0x0e, 0x40, 0x0e, 0x23, 0x0e, 0x35, 0x0e, 0x22, + 0x0e, 0x30, 0x0e, 0x01, 0x0e, 0x38, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x1a, 0x0e, 0x38, 0x0e, 0x19, 0x0e, 0x08, 0x0e, + 0x34, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x27, 0x40, 0x0e, 0x04, 0x0e, 0x47, + 0x0e, 0x07, 0x0e, 0x01, 0x0e, 0x35, 0x0e, 0x27, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x42, 0x0e, 0x0a, 0x0e, 0x08, 0x0e, + 0x34, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x27, 0x40, 0x0e, 0x04, 0x0e, 0x47, + 0x0e, 0x19, 0x0e, 0x19, 0x0e, 0x34, 0x0e, 0x07, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x27, 0x40, 0x0e, 0x01, 0x0e, 0x47, 0x0e, + 0x07, 0x0e, 0x01, 0x0e, 0x35, 0x0e, 0x27, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x40, 0x0e, 0x04, 0x0e, 0x47, 0x0e, 0x19, + 0x0e, 0x40, 0x0e, 0x2d, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x42, 0x0e, + 0x0a, 0x0e, 0x40, 0x0e, 0x01, 0x0e, 0x47, 0x0e, + 0x07, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x2f, 0x40, 0x0e, 0x04, 0x0e, 0x47, + 0x0e, 0x19, 0x0e, 0x40, 0x0e, 0x23, 0x0e, 0x35, + 0x0e, 0x22, 0x0e, 0x30, 0x0e, 0x01, 0x0e, 0x38, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x25, 0x40, 0x0e, 0x04, 0x0e, 0x47, 0x0e, + 0x21, 0x0e, 0x42, 0x0e, 0x1b, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x0e, 0x0a, 0x0e, 0x01, 0x0e, 0x35, 0x0e, 0x27, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x21, 0x42, 0x0e, 0x08, 0x0e, 0x42, 0x0e, + 0x2d, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x27, 0x40, 0x0e, 0x01, 0x0e, 0x47, + 0x0e, 0x19, 0x0e, 0x19, 0x0e, 0x34, 0x0e, 0x07, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x27, 0x04, 0x0e, 0x30, 0x0e, 0x42, 0x0e, + 0x23, 0x0e, 0x30, 0x0e, 0x01, 0x0e, 0x38, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x2d, 0x0e, 0x31, 0x0e, 0x19, 0x0e, 0x40, + 0x0e, 0x15, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x04, 0x0e, 0x31, 0x0e, + 0x07, 0x0e, 0x01, 0x0e, 0x34, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x42, + 0x0e, 0x08, 0x0e, 0x40, 0x0e, 0x2d, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x29, 0x00, 0x29, + 0x40, 0x0e, 0x17, 0x0e, 0x47, 0x0e, 0x21, 0x0e, + 0x1b, 0x0e, 0x38, 0x0e, 0x01, 0x0e, 0x38, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x2d, 0x1a, 0x0e, 0x38, 0x0e, 0x19, 0x0e, 0x40, + 0x0e, 0x23, 0x0e, 0x35, 0x0e, 0x22, 0x0e, 0x30, + 0x0e, 0x01, 0x0e, 0x38, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x04, 0x0e, + 0x30, 0x0e, 0x40, 0x0e, 0x15, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, 0x2d, 0x40, + 0x0e, 0x23, 0x0e, 0x35, 0x0e, 0x22, 0x0e, 0x30, + 0x0e, 0x01, 0x0e, 0x38, 0x0e, 0x19, 0x0e, 0x34, + 0x0e, 0x07, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x40, 0x0e, 0x2d, 0x0e, + 0x47, 0x0e, 0x19, 0x0e, 0x42, 0x0e, 0x2d, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x19, 0x0e, 0x34, 0x0e, 0x19, 0x0e, 0x08, + 0x0e, 0x34, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x27, 0x04, 0x0e, 0x31, 0x0e, + 0x07, 0x0e, 0x40, 0x0e, 0x07, 0x0e, 0x47, 0x0e, + 0x07, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x21, 0x42, 0x0e, 0x2e, 0x0e, 0x08, + 0x0e, 0x34, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x40, 0x0e, 0x04, 0x0e, + 0x47, 0x0e, 0x19, 0x0e, 0x42, 0x0e, 0x0a, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x0e, 0x04, 0x0e, 0x40, 0x0e, 0x07, + 0x0e, 0x47, 0x0e, 0x07, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x42, 0x0e, + 0x0a, 0x0e, 0x01, 0x0e, 0x30, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x0e, 0x0a, 0x0e, 0x40, 0x0e, 0x07, 0x0e, 0x47, + 0x0e, 0x07, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x1a, 0x0e, 0x38, 0x0e, + 0x19, 0x0e, 0x42, 0x0e, 0x2d, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x42, + 0x0e, 0x04, 0x0e, 0x42, 0x0e, 0x0a, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x1a, 0x0e, 0x38, 0x0e, 0x19, 0x0e, 0x40, 0x0e, + 0x2d, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x25, 0x40, 0x0e, 0x04, 0x0e, 0x47, + 0x0e, 0x19, 0x0e, 0x08, 0x0e, 0x34, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, + 0x42, 0x0e, 0x04, 0x0e, 0x2d, 0x0e, 0x31, 0x0e, + 0x07, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x42, 0x0e, 0x0a, 0x0e, 0x42, + 0x0e, 0x2d, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x40, 0x0e, 0x2d, 0x0e, + 0x19, 0x0e, 0x34, 0x0e, 0x07, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x0e, 0x0a, 0x0e, 0x2d, 0x0e, 0x31, 0x0e, 0x07, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x29, 0x40, 0x0e, 0x04, 0x0e, 0x47, 0x0e, + 0x07, 0x0e, 0x40, 0x0e, 0x07, 0x0e, 0x47, 0x0e, + 0x07, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x25, 0x04, 0x0e, 0x30, 0x0e, 0x40, + 0x0e, 0x07, 0x0e, 0x47, 0x0e, 0x07, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x27, + 0x42, 0x0e, 0x17, 0x0e, 0x30, 0x0e, 0x01, 0x0e, + 0x38, 0x0e, 0x08, 0x0e, 0x34, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x40, + 0x0e, 0x2d, 0x0e, 0x47, 0x0e, 0x07, 0x0e, 0x40, + 0x0e, 0x01, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x42, 0x0e, 0x2d, 0x0e, + 0x42, 0x0e, 0x0a, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x21, 0x42, 0x0e, 0x0a, + 0x0e, 0x27, 0x0e, 0x30, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x1a, 0x0e, + 0x38, 0x0e, 0x21, 0x0e, 0x42, 0x0e, 0x1b, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x40, 0x0e, 0x01, 0x0e, 0x47, 0x0e, 0x19, + 0x0e, 0x42, 0x0e, 0x2d, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x2b, 0x40, 0x0e, + 0x01, 0x0e, 0x47, 0x0e, 0x07, 0x0e, 0x40, 0x0e, + 0x01, 0x0e, 0x35, 0x0e, 0x22, 0x0e, 0x27, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x42, 0x0e, 0x0a, 0x0e, 0x0a, 0x0e, 0x39, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x27, 0x04, 0x0e, 0x30, 0x0e, 0x40, 0x0e, + 0x23, 0x0e, 0x30, 0x0e, 0x01, 0x0e, 0x34, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x2b, 0x40, 0x0e, 0x01, 0x0e, 0x47, 0x0e, 0x19, + 0x0e, 0x42, 0x0e, 0x15, 0x0e, 0x30, 0x0e, 0x01, + 0x0e, 0x38, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x40, 0x0e, 0x01, 0x0e, + 0x47, 0x0e, 0x07, 0x0e, 0x42, 0x0e, 0x01, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x40, 0x0e, 0x04, 0x0e, 0x47, 0x0e, 0x21, + 0x0e, 0x21, 0x0e, 0x38, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x29, 0x40, 0x0e, + 0x2d, 0x0e, 0x47, 0x0e, 0x07, 0x0e, 0x40, 0x0e, + 0x07, 0x0e, 0x47, 0x0e, 0x07, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x42, + 0x0e, 0x04, 0x0e, 0x42, 0x0e, 0x01, 0x0e, 0x30, + 0x0e, 0x01, 0x0e, 0x38, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x21, 0x42, 0x0e, + 0x0a, 0x0e, 0x40, 0x0e, 0x2e, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x2b, 0x40, + 0x0e, 0x04, 0x0e, 0x47, 0x0e, 0x19, 0x0e, 0x42, + 0x0e, 0x15, 0x0e, 0x30, 0x0e, 0x01, 0x0e, 0x38, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x23, 0x1a, 0x0e, 0x38, 0x0e, 0x19, 0x0e, + 0x0a, 0x0e, 0x39, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x25, 0x40, 0x0e, 0x17, + 0x0e, 0x47, 0x0e, 0x19, 0x0e, 0x08, 0x0e, 0x38, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x2b, 0x42, 0x0e, 0x04, 0x0e, 0x40, 0x0e, + 0x23, 0x0e, 0x35, 0x0e, 0x22, 0x0e, 0x30, 0x0e, + 0x01, 0x0e, 0x38, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x42, 0x0e, 0x04, + 0x0e, 0x27, 0x0e, 0x30, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x40, 0x0e, + 0x01, 0x0e, 0x47, 0x0e, 0x19, 0x0e, 0x0a, 0x0e, + 0x39, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x27, 0x40, 0x0e, 0x21, 0x0e, 0x42, + 0x0e, 0x15, 0x0e, 0x30, 0x0e, 0x01, 0x0e, 0x38, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x21, 0x04, 0x0e, 0x30, 0x0e, 0x40, 0x0e, + 0x04, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x42, 0x0e, 0x04, 0x0e, 0x42, + 0x0e, 0x2d, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x27, 0x40, 0x0e, 0x21, 0x0e, + 0x42, 0x0e, 0x15, 0x0e, 0x30, 0x0e, 0x01, 0x0e, + 0x38, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x21, 0x42, 0x0e, 0x2d, 0x0e, 0x40, + 0x0e, 0x2d, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x42, 0x0e, 0x0a, 0x0e, + 0x42, 0x0e, 0x0a, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x27, 0x40, 0x0e, 0x2d, + 0x0e, 0x40, 0x0e, 0x01, 0x0e, 0x35, 0x0e, 0x22, + 0x0e, 0x27, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x04, 0x0e, 0x30, 0x0e, + 0x01, 0x0e, 0x34, 0x0e, 0x2a, 0x0e, 0x36, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x1a, 0x0e, 0x38, 0x0e, 0x19, 0x0e, 0x2d, + 0x0e, 0x31, 0x0e, 0x07, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, 0x42, 0x0e, + 0x2e, 0x0e, 0x42, 0x0e, 0x15, 0x0e, 0x30, 0x0e, + 0x01, 0x0e, 0x38, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x2d, 0x40, 0x0e, 0x04, + 0x0e, 0x35, 0x0e, 0x22, 0x0e, 0x27, 0x0e, 0x42, + 0x0e, 0x15, 0x0e, 0x30, 0x0e, 0x01, 0x0e, 0x38, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x21, 0x42, 0x0e, 0x04, 0x0e, 0x42, 0x0e, + 0x0a, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x27, 0x42, 0x0e, 0x0a, 0x0e, 0x42, + 0x0e, 0x23, 0x0e, 0x30, 0x0e, 0x01, 0x0e, 0x38, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x04, 0x0e, 0x31, 0x0e, 0x19, 0x0e, + 0x42, 0x0e, 0x0a, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x1a, 0x0e, 0x38, + 0x0e, 0x19, 0x0e, 0x42, 0x0e, 0x0a, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x42, 0x0e, 0x2d, 0x0e, 0x19, 0x0e, 0x34, 0x0e, + 0x07, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x1a, 0x0e, 0x38, 0x0e, 0x21, + 0x0e, 0x40, 0x0e, 0x21, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x27, 0x42, 0x0e, + 0x0a, 0x0e, 0x40, 0x0e, 0x01, 0x0e, 0x35, 0x0e, + 0x22, 0x0e, 0x27, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x2b, 0x40, 0x0e, 0x2d, + 0x0e, 0x47, 0x0e, 0x19, 0x0e, 0x42, 0x0e, 0x15, + 0x0e, 0x30, 0x0e, 0x01, 0x0e, 0x38, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, + 0x40, 0x0e, 0x21, 0x0e, 0x42, 0x0e, 0x2d, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x1a, 0x0e, 0x38, 0x0e, 0x07, 0x0e, 0x01, + 0x0e, 0x34, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x21, 0x40, 0x0e, 0x2d, 0x0e, + 0x42, 0x0e, 0x0a, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x17, 0x0e, 0x30, + 0x0e, 0x2d, 0x0e, 0x34, 0x0e, 0x40, 0x0e, 0x2d, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x2d, 0x40, 0x0e, 0x04, 0x0e, 0x35, 0x0e, + 0x22, 0x0e, 0x27, 0x0e, 0x42, 0x0e, 0x23, 0x0e, + 0x30, 0x0e, 0x01, 0x0e, 0x38, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x40, + 0x0e, 0x17, 0x0e, 0x47, 0x0e, 0x21, 0x0e, 0x21, + 0x0e, 0x19, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x21, 0x42, 0x0e, 0x04, 0x0e, + 0x08, 0x0e, 0x34, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x27, 0x40, 0x0e, 0x2d, + 0x0e, 0x42, 0x0e, 0x23, 0x0e, 0x30, 0x0e, 0x01, + 0x0e, 0x38, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x40, 0x0e, 0x01, 0x0e, + 0x47, 0x0e, 0x07, 0x0e, 0x01, 0x0e, 0x34, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x25, 0x40, 0x0e, 0x17, 0x0e, 0x47, 0x0e, 0x19, + 0x0e, 0x42, 0x0e, 0x0a, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x29, 0x1a, 0x0e, + 0x38, 0x0e, 0x19, 0x0e, 0x42, 0x0e, 0x23, 0x0e, + 0x30, 0x0e, 0x01, 0x0e, 0x38, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, 0x21, 0x40, + 0x0e, 0x04, 0x0e, 0x42, 0x0e, 0x0a, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, 0x25, + 0x40, 0x0e, 0x01, 0x0e, 0x47, 0x0e, 0x07, 0x0e, + 0x27, 0x0e, 0x30, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x04, 0x0e, 0x31, + 0x0e, 0x19, 0x0e, 0x40, 0x0e, 0x2d, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, + 0x42, 0x0e, 0x0a, 0x0e, 0x42, 0x0e, 0x2e, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x23, 0x40, 0x0e, 0x04, 0x0e, 0x2d, 0x0e, 0x31, + 0x0e, 0x07, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x21, 0x42, 0x0e, 0x0a, 0x0e, + 0x42, 0x0e, 0x2d, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x2b, 0x40, 0x0e, 0x21, + 0x0e, 0x40, 0x0e, 0x23, 0x0e, 0x35, 0x0e, 0x22, + 0x0e, 0x30, 0x0e, 0x01, 0x0e, 0x38, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, + 0x21, 0x0e, 0x31, 0x0e, 0x19, 0x0e, 0x08, 0x0e, + 0x34, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x04, 0x0e, 0x31, 0x0e, 0x21, + 0x0e, 0x1a, 0x0e, 0x38, 0x0e, 0x07, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, + 0x40, 0x0e, 0x2d, 0x0e, 0x47, 0x0e, 0x21, 0x0e, + 0x42, 0x0e, 0x1b, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x40, 0x0e, 0x17, + 0x0e, 0x47, 0x0e, 0x19, 0x0e, 0x27, 0x0e, 0x30, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x27, 0x42, 0x0e, 0x08, 0x0e, 0x40, 0x0e, + 0x01, 0x0e, 0x35, 0x0e, 0x22, 0x0e, 0x27, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x2b, 0x40, 0x0e, 0x01, 0x0e, 0x47, 0x0e, 0x19, + 0x0e, 0x42, 0x0e, 0x23, 0x0e, 0x30, 0x0e, 0x01, + 0x0e, 0x38, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x21, 0x42, 0x0e, 0x2e, 0x0e, + 0x40, 0x0e, 0x2d, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x27, 0x42, 0x0e, 0x0a, + 0x0e, 0x42, 0x0e, 0x15, 0x0e, 0x30, 0x0e, 0x01, + 0x0e, 0x38, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x27, 0x40, 0x0e, 0x04, 0x0e, + 0x35, 0x0e, 0x22, 0x0e, 0x27, 0x0e, 0x42, 0x0e, + 0x2e, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x27, 0x40, 0x0e, 0x01, 0x0e, 0x47, + 0x0e, 0x21, 0x0e, 0x1a, 0x0e, 0x38, 0x0e, 0x07, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x04, 0x0e, 0x31, 0x0e, 0x21, 0x0e, + 0x42, 0x0e, 0x1b, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x2b, 0x40, 0x0e, 0x2d, + 0x0e, 0x47, 0x0e, 0x07, 0x0e, 0x40, 0x0e, 0x01, + 0x0e, 0x35, 0x0e, 0x22, 0x0e, 0x27, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, + 0x04, 0x0e, 0x31, 0x0e, 0x19, 0x0e, 0x40, 0x0e, + 0x2d, 0x0e, 0x47, 0x0e, 0x07, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x2b, 0x42, + 0x0e, 0x2e, 0x0e, 0x40, 0x0e, 0x23, 0x0e, 0x35, + 0x0e, 0x22, 0x0e, 0x30, 0x0e, 0x01, 0x0e, 0x38, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x21, 0x40, 0x0e, 0x21, 0x0e, 0x27, 0x0e, + 0x30, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x23, 0x2d, 0x0e, 0x31, 0x0e, 0x19, + 0x0e, 0x40, 0x0e, 0x2d, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x40, 0x0e, + 0x17, 0x0e, 0x47, 0x0e, 0x21, 0x0e, 0x40, 0x0e, + 0x21, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x04, 0x0e, 0x31, 0x0e, 0x19, + 0x0e, 0x40, 0x0e, 0x0b, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, 0x40, 0x0e, + 0x04, 0x0e, 0x35, 0x0e, 0x22, 0x0e, 0x27, 0x0e, + 0x27, 0x0e, 0x30, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x1a, 0x0e, 0x38, + 0x0e, 0x07, 0x0e, 0x01, 0x0e, 0x30, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, + 0x1a, 0x0e, 0x38, 0x0e, 0x19, 0x0e, 0x40, 0x0e, + 0x0b, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x40, 0x0e, 0x17, 0x0e, 0x47, + 0x0e, 0x21, 0x0e, 0x42, 0x0e, 0x1b, 0x0e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, + 0x42, 0x0e, 0x04, 0x0e, 0x01, 0x0e, 0x30, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x04, 0x0e, 0x30, 0x0e, 0x40, 0x0e, 0x2d, + 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x2d, 0x0e, 0x31, 0x0e, 0x19, 0x0e, + 0x40, 0x0e, 0x0b, 0x0e, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x27, 0x21, 0x0e, 0x31, + 0x0e, 0x19, 0x0e, 0x40, 0x0e, 0x2d, 0x0e, 0x47, + 0x0e, 0x07, 0x0e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x1a, 0x0e, 0x38, 0x0e, + 0x07, 0x0e, 0x01, 0x0e, 0x35, 0x0e, 0x27, 0x0e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x40, 0x0e, 0x01, 0x0e, 0x47, 0x0e, 0x19, + 0x0e, 0x08, 0x0e, 0x34, 0x0e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x40, 0x0e, + 0x04, 0x0e, 0x42, 0x0e, 0x2d, 0x0e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, 0x09, 0x40, + 0x0e, 0x21, 0x0e, 0x08, 0x0e, 0x34, 0x0e, 0x0d, + 0x17, 0x0e, 0x30, 0x0e, 0x2d, 0x0e, 0x34, 0x0e, + 0x42, 0x0e, 0x0a, 0x0e, 0x09, 0x42, 0x0e, 0x0a, + 0x0e, 0x27, 0x0e, 0x30, 0x0e, 0x09, 0x40, 0x0e, + 0x2e, 0x0e, 0x40, 0x0e, 0x0b, 0x0e, 0x17, 0x1f, + 0x0e, 0x32, 0x0e, 0x23, 0x0e, 0x4c, 0x0e, 0x27, + 0x0e, 0x32, 0x0e, 0x23, 0x0e, 0x4c, 0x0e, 0x14, + 0x0e, 0x34, 0x0e, 0x19, 0x0e, 0x1b, 0x2d, 0x0e, + 0x2d, 0x0e, 0x23, 0x0e, 0x4c, 0x0e, 0x14, 0x0e, + 0x34, 0x0e, 0x40, 0x0e, 0x1a, 0x0e, 0x40, 0x0e, + 0x2e, 0x0e, 0x0a, 0x0e, 0x15, 0x0e, 0x4c, 0x0e, + 0x0f, 0x04, 0x0e, 0x2d, 0x0e, 0x23, 0x0e, 0x4c, + 0x0e, 0x41, 0x0e, 0x14, 0x0e, 0x14, 0x0e, 0x0b, + 0x40, 0x0e, 0x15, 0x0e, 0x2d, 0x0e, 0x23, 0x0e, + 0x4c, 0x0e, 0x0f, 0x21, 0x0e, 0x2d, 0x0e, 0x23, + 0x0e, 0x4c, 0x0e, 0x41, 0x0e, 0x14, 0x0e, 0x14, + 0x0e, 0x13, 0x0a, 0x0e, 0x32, 0x0e, 0x2b, 0x0e, + 0x23, 0x0e, 0x34, 0x0e, 0x27, 0x0e, 0x32, 0x0e, + 0x23, 0x0e, 0x4c, 0x0e, 0x0b, 0x40, 0x0e, 0x21, + 0x0e, 0x2e, 0x0e, 0x23, 0x0e, 0x4c, 0x0e, 0x0b, + 0x2d, 0x0e, 0x30, 0x0e, 0x1a, 0x0e, 0x32, 0x0e, + 0x19, 0x0e, 0x0d, 0x2d, 0x0e, 0x30, 0x0e, 0x0b, + 0x0e, 0x32, 0x0e, 0x23, 0x0e, 0x4c, 0x0e, 0x09, + 0x40, 0x0e, 0x14, 0x0e, 0x22, 0x0e, 0x4c, 0x0e, + 0x0f, 0x1a, 0x0e, 0x32, 0x0e, 0x2e, 0x0e, 0x4c, + 0x0e, 0x21, 0x0e, 0x32, 0x0e, 0x19, 0x0e, 0x11, + 0x40, 0x0e, 0x2d, 0x0e, 0x2a, 0x0e, 0x1f, 0x0e, + 0x32, 0x0e, 0x19, 0x0e, 0x14, 0x0e, 0x4c, 0x0e, + 0x17, 0x1b, 0x0e, 0x35, 0x0e, 0x40, 0x0e, 0x1b, + 0x0e, 0x2d, 0x0e, 0x23, 0x0e, 0x4c, 0x0e, 0x40, + 0x0e, 0x0b, 0x0e, 0x35, 0x0e, 0x22, 0x0e, 0x1b, + 0x1b, 0x0e, 0x35, 0x0e, 0x01, 0x0e, 0x48, 0x0e, + 0x2d, 0x0e, 0x19, 0x0e, 0x44, 0x0e, 0x15, 0x0e, + 0x49, 0x0e, 0x2b, 0x0e, 0x27, 0x0e, 0x31, 0x0e, + 0x19, 0x0e, 0x0f, 0x44, 0x0e, 0x15, 0x0e, 0x49, + 0x0e, 0x2b, 0x0e, 0x27, 0x0e, 0x31, 0x0e, 0x19, + 0x0e, 0x12, 0x63, 0x61, 0x6c, 0x65, 0x6e, 0x64, + 0x61, 0x72, 0x73, 0x08, 0x64, 0x61, 0x74, 0x65, + 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, 0x75, + 0x10, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0x1e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, + 0x6e, 0x26, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x6e, 0x65, + 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, + 0x74, 0x74, 0x65, 0x72, 0x6e, 0x0e, 0x64, 0x65, + 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x24, 0x7b, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0x3a, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x10, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x2a, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x40, 0x7b, 0x6d, + 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, + 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x0e, 0x70, + 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x10, 0x70, + 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x02, + 0x2e, 0x02, 0x2c, 0x0a, 0x67, 0x72, 0x6f, 0x75, + 0x70, 0x06, 0x4e, 0x61, 0x4e, 0x06, 0x6e, 0x61, + 0x6e, 0x02, 0x2b, 0x10, 0x70, 0x6c, 0x75, 0x73, + 0x53, 0x69, 0x67, 0x6e, 0x02, 0x2d, 0x12, 0x6d, + 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x02, 0x25, 0x16, 0x70, 0x65, 0x72, 0x63, 0x65, + 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x03, 0x1e, + 0x22, 0x10, 0x69, 0x6e, 0x66, 0x69, 0x6e, 0x69, + 0x74, 0x79, 0x08, 0x74, 0x68, 0x61, 0x69, 0x0e, + 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x06, + 0x41, 0x55, 0x24, 0x06, 0x41, 0x55, 0x44, 0x04, + 0x52, 0x24, 0x06, 0x42, 0x52, 0x4c, 0x06, 0x43, + 0x41, 0x24, 0x06, 0x43, 0x41, 0x44, 0x06, 0x43, + 0x4e, 0xa5, 0x06, 0x43, 0x4e, 0x59, 0x03, 0xac, + 0x20, 0x06, 0x45, 0x55, 0x52, 0x02, 0xa3, 0x06, + 0x47, 0x42, 0x50, 0x06, 0x48, 0x4b, 0x24, 0x06, + 0x48, 0x4b, 0x44, 0x03, 0xaa, 0x20, 0x06, 0x49, + 0x4c, 0x53, 0x03, 0xb9, 0x20, 0x06, 0x49, 0x4e, + 0x52, 0x02, 0xa5, 0x06, 0x4a, 0x50, 0x59, 0x03, + 0xa9, 0x20, 0x06, 0x4b, 0x52, 0x57, 0x06, 0x4d, + 0x58, 0x24, 0x06, 0x4d, 0x58, 0x4e, 0x06, 0x4e, + 0x5a, 0x24, 0x06, 0x4e, 0x5a, 0x44, 0x06, 0x4e, + 0x54, 0x24, 0x06, 0x54, 0x57, 0x44, 0x06, 0x55, + 0x53, 0x24, 0x06, 0x55, 0x53, 0x44, 0x03, 0xab, + 0x20, 0x06, 0x56, 0x4e, 0x44, 0x08, 0x46, 0x43, + 0x46, 0x41, 0x06, 0x58, 0x41, 0x46, 0x06, 0x45, + 0x43, 0x24, 0x06, 0x58, 0x43, 0x44, 0x06, 0x43, + 0x46, 0x41, 0x06, 0x58, 0x4f, 0x46, 0x08, 0x43, + 0x46, 0x50, 0x46, 0x06, 0x58, 0x50, 0x46, 0x14, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, + 0x65, 0x73, 0x52, 0x6e, 0x6f, 0x64, 0x65, 0x5f, + 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, + 0x69, 0x6e, 0x74, 0x6c, 0x2f, 0x6c, 0x6f, 0x63, + 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, + 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x70, 0x2f, 0x74, + 0x68, 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, + 0x9e, 0x01, 0x00, 0x01, 0x00, 0x27, 0x00, 0xb9, + 0x01, 0xea, 0x6a, 0x01, 0xa0, 0x01, 0x00, 0x00, + 0x00, 0x39, 0xd0, 0x00, 0x00, 0x00, 0x43, 0xd1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd2, 0x00, 0x00, + 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd4, 0x00, 0x00, 0x00, 0x04, 0xd5, 0x00, 0x00, + 0x00, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x04, 0xd7, + 0x00, 0x00, 0x00, 0x04, 0xd8, 0x00, 0x00, 0x00, + 0x04, 0xd9, 0x00, 0x00, 0x00, 0x04, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xdb, 0x00, 0x00, 0x00, 0x04, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, + 0x00, 0x04, 0xde, 0x00, 0x00, 0x00, 0x04, 0xdf, + 0x00, 0x00, 0x00, 0x04, 0xe0, 0x00, 0x00, 0x00, + 0x04, 0xe1, 0x00, 0x00, 0x00, 0x04, 0xe2, 0x00, + 0x00, 0x00, 0x26, 0x0f, 0x00, 0x4d, 0xe3, 0x00, + 0x00, 0x00, 0x0a, 0x4d, 0xe4, 0x00, 0x00, 0x00, + 0x09, 0x4d, 0xe5, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xe9, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, + 0xed, 0x00, 0x00, 0x00, 0x04, 0xee, 0x00, 0x00, + 0x00, 0x4d, 0xef, 0x00, 0x00, 0x00, 0x04, 0xf0, + 0x00, 0x00, 0x00, 0x4d, 0xf1, 0x00, 0x00, 0x00, + 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xf3, 0x00, + 0x00, 0x00, 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, + 0xf5, 0x00, 0x00, 0x00, 0x04, 0xf6, 0x00, 0x00, + 0x00, 0x4d, 0xf7, 0x00, 0x00, 0x00, 0x04, 0xf8, + 0x00, 0x00, 0x00, 0x4d, 0xf9, 0x00, 0x00, 0x00, + 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xfb, 0x00, + 0x00, 0x00, 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, + 0xfd, 0x00, 0x00, 0x00, 0x04, 0xfe, 0x00, 0x00, + 0x00, 0x4d, 0xff, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x01, 0x00, 0x00, 0x4d, 0x01, 0x01, 0x00, 0x00, + 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, 0x03, 0x01, + 0x00, 0x00, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, + 0x05, 0x01, 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, + 0x00, 0x4d, 0x07, 0x01, 0x00, 0x00, 0x04, 0x08, + 0x01, 0x00, 0x00, 0x4d, 0x09, 0x01, 0x00, 0x00, + 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x0b, 0x01, + 0x00, 0x00, 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, + 0x0d, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x01, 0x00, + 0x00, 0x4d, 0x0f, 0x01, 0x00, 0x00, 0x04, 0x10, + 0x01, 0x00, 0x00, 0x4d, 0x11, 0x01, 0x00, 0x00, + 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, 0x13, 0x01, + 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, + 0x15, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, + 0x00, 0x4d, 0x17, 0x01, 0x00, 0x00, 0x04, 0x18, + 0x01, 0x00, 0x00, 0x4d, 0x19, 0x01, 0x00, 0x00, + 0x04, 0x1a, 0x01, 0x00, 0x00, 0x4d, 0x1b, 0x01, + 0x00, 0x00, 0x04, 0x1c, 0x01, 0x00, 0x00, 0x4d, + 0x1d, 0x01, 0x00, 0x00, 0x04, 0x1e, 0x01, 0x00, + 0x00, 0x4d, 0x1f, 0x01, 0x00, 0x00, 0x04, 0x20, + 0x01, 0x00, 0x00, 0x4d, 0x21, 0x01, 0x00, 0x00, + 0x04, 0x22, 0x01, 0x00, 0x00, 0x4d, 0x23, 0x01, + 0x00, 0x00, 0x04, 0x24, 0x01, 0x00, 0x00, 0x4d, + 0x25, 0x01, 0x00, 0x00, 0x04, 0x26, 0x01, 0x00, + 0x00, 0x4d, 0x27, 0x01, 0x00, 0x00, 0x04, 0x28, + 0x01, 0x00, 0x00, 0x4d, 0x29, 0x01, 0x00, 0x00, + 0x04, 0x2a, 0x01, 0x00, 0x00, 0x4d, 0x2b, 0x01, + 0x00, 0x00, 0x04, 0x2a, 0x01, 0x00, 0x00, 0x4d, + 0x2c, 0x01, 0x00, 0x00, 0x04, 0x2d, 0x01, 0x00, + 0x00, 0x4d, 0x2d, 0x01, 0x00, 0x00, 0x04, 0x2e, + 0x01, 0x00, 0x00, 0x4d, 0x2f, 0x01, 0x00, 0x00, + 0x04, 0x30, 0x01, 0x00, 0x00, 0x4d, 0x31, 0x01, + 0x00, 0x00, 0x04, 0x32, 0x01, 0x00, 0x00, 0x4d, + 0x33, 0x01, 0x00, 0x00, 0x04, 0x34, 0x01, 0x00, + 0x00, 0x4d, 0x35, 0x01, 0x00, 0x00, 0x04, 0x36, + 0x01, 0x00, 0x00, 0x4d, 0x37, 0x01, 0x00, 0x00, + 0x04, 0x38, 0x01, 0x00, 0x00, 0x4d, 0x39, 0x01, + 0x00, 0x00, 0x04, 0x3a, 0x01, 0x00, 0x00, 0x4d, + 0x3b, 0x01, 0x00, 0x00, 0x04, 0x3c, 0x01, 0x00, + 0x00, 0x4d, 0x3d, 0x01, 0x00, 0x00, 0x04, 0x3e, + 0x01, 0x00, 0x00, 0x4d, 0x3f, 0x01, 0x00, 0x00, + 0x04, 0x40, 0x01, 0x00, 0x00, 0x4d, 0x41, 0x01, + 0x00, 0x00, 0x04, 0x42, 0x01, 0x00, 0x00, 0x4d, + 0x43, 0x01, 0x00, 0x00, 0x04, 0x44, 0x01, 0x00, + 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, 0x04, 0x46, + 0x01, 0x00, 0x00, 0x4d, 0x47, 0x01, 0x00, 0x00, + 0x4d, 0x48, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x42, + 0x01, 0x00, 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, + 0x04, 0x3e, 0x01, 0x00, 0x00, 0x4d, 0x3f, 0x01, + 0x00, 0x00, 0x04, 0x36, 0x01, 0x00, 0x00, 0x4d, + 0x37, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x4d, 0x31, 0x01, 0x00, 0x00, 0x4d, 0x4a, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4b, 0x01, 0x00, + 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, 0x0b, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x4d, + 0x07, 0x01, 0x00, 0x00, 0x4d, 0x50, 0x01, 0x00, + 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x0b, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, + 0x80, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x82, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x82, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x4d, 0x86, 0x01, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x4d, 0x88, + 0x01, 0x00, 0x00, 0x4d, 0x89, 0x01, 0x00, 0x00, + 0x4d, 0xd5, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x00, 0xbe, 0x01, 0xbe, 0x02, 0xbe, 0x03, 0xbe, + 0x04, 0xbe, 0x05, 0xbe, 0x06, 0xbe, 0x07, 0xbe, + 0x08, 0xbe, 0x09, 0xbe, 0x0a, 0xbe, 0x0b, 0x26, + 0x0c, 0x00, 0x4d, 0x5e, 0x01, 0x00, 0x00, 0xbe, + 0x0c, 0xbe, 0x0d, 0xbe, 0x0e, 0xbe, 0x0f, 0xbe, + 0x10, 0xbe, 0x11, 0xbe, 0x12, 0xbe, 0x13, 0xbe, + 0x14, 0xbe, 0x15, 0xbe, 0x16, 0xbe, 0x17, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0xbe, + 0x18, 0xbe, 0x19, 0xbe, 0x1a, 0xbe, 0x1b, 0xbe, + 0x1c, 0xbe, 0x1d, 0xbe, 0x1e, 0xbe, 0x1f, 0xbe, + 0x20, 0xbe, 0x21, 0xbe, 0x22, 0xbe, 0x23, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x81, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x85, 0x01, 0x00, + 0x00, 0x4d, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, + 0x01, 0x00, 0x00, 0x4d, 0x88, 0x01, 0x00, 0x00, + 0x4d, 0x89, 0x01, 0x00, 0x00, 0x4d, 0xd6, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x24, 0xbe, 0x25, + 0xbe, 0x26, 0xbe, 0x27, 0xbe, 0x28, 0xbe, 0x29, + 0xbe, 0x2a, 0xbe, 0x2b, 0xbe, 0x2c, 0xbe, 0x2d, + 0xbe, 0x2e, 0xbe, 0x2f, 0xbe, 0x30, 0x26, 0x0d, + 0x00, 0x4d, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x8a, + 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, + 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, + 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, + 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, + 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, + 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, + 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, + 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, + 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, + 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, + 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, + 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x04, + 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, + 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, + 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x81, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x97, 0x01, + 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x85, 0x01, 0x00, 0x00, 0x4d, 0x86, + 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, + 0x4d, 0x88, 0x01, 0x00, 0x00, 0x4d, 0x89, 0x01, + 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x31, 0xbe, 0x32, 0xbe, 0x33, 0xbe, + 0x34, 0xbe, 0x35, 0xbe, 0x36, 0xbe, 0x37, 0xbe, + 0x38, 0xbe, 0x39, 0xbe, 0x3a, 0xbe, 0x3b, 0xbe, + 0x3c, 0x26, 0x0c, 0x00, 0x4d, 0x5e, 0x01, 0x00, + 0x00, 0xbe, 0x3d, 0xbe, 0x3e, 0xbe, 0x3f, 0xbe, + 0x40, 0xbe, 0x41, 0xbe, 0x42, 0xbe, 0x43, 0xbe, + 0x44, 0xbe, 0x45, 0xbe, 0x46, 0xbe, 0x47, 0xbe, + 0x48, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0xbe, 0x49, 0xbe, 0x4a, 0xbe, 0x4b, 0xbe, + 0x4c, 0xbe, 0x4d, 0xbe, 0x4e, 0xbe, 0x4f, 0xbe, + 0x50, 0xbe, 0x51, 0xbe, 0x52, 0xbe, 0x53, 0xbe, + 0x54, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x81, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x85, + 0x01, 0x00, 0x00, 0x4d, 0x86, 0x01, 0x00, 0x00, + 0x04, 0x87, 0x01, 0x00, 0x00, 0x4d, 0x88, 0x01, + 0x00, 0x00, 0x4d, 0x89, 0x01, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x55, + 0xbe, 0x56, 0xbe, 0x57, 0xbe, 0x58, 0xbe, 0x59, + 0xbe, 0x5a, 0xbe, 0x5b, 0xbe, 0x5c, 0xbe, 0x5d, + 0xbe, 0x5e, 0xbe, 0x5f, 0xbe, 0x60, 0xbe, 0x61, + 0x26, 0x0d, 0x00, 0x4d, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, + 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, + 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, + 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, + 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, + 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, + 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, + 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, + 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, + 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, + 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, + 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, + 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, + 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, + 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, + 0x04, 0x98, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x84, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x4d, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x4d, 0x88, 0x01, 0x00, 0x00, 0x4d, + 0x89, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x62, 0xbe, 0x63, 0xbe, + 0x64, 0xbe, 0x65, 0xbe, 0x66, 0xbe, 0x67, 0xbe, + 0x68, 0xbe, 0x69, 0xbe, 0x6a, 0xbe, 0x6b, 0xbe, + 0x6c, 0xbe, 0x6d, 0xbe, 0x6e, 0x26, 0x0d, 0x00, + 0x4d, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, + 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, + 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, + 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, + 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, + 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, + 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, + 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, + 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x26, 0x0d, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x99, + 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, + 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, + 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, + 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, + 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, + 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, + 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, + 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x81, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x97, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x97, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x85, 0x01, 0x00, 0x00, 0x4d, 0x86, + 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, + 0x4d, 0x88, 0x01, 0x00, 0x00, 0x4d, 0x89, 0x01, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x6f, 0xbe, 0x70, 0xbe, 0x71, 0xbe, + 0x72, 0xbe, 0x73, 0xbe, 0x74, 0xbe, 0x75, 0xbe, + 0x76, 0xbe, 0x77, 0xbe, 0x78, 0xbe, 0x79, 0xbe, + 0x7a, 0x26, 0x0c, 0x00, 0x4d, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, + 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, + 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, + 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, + 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, + 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, + 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, + 0x04, 0xb1, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa6, 0x01, + 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, + 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, + 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, + 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, + 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, + 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, + 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x81, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x97, + 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, + 0x98, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x85, 0x01, 0x00, 0x00, 0x4d, + 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, + 0x00, 0x4d, 0x88, 0x01, 0x00, 0x00, 0x4d, 0x89, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6b, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, + 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x81, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xb2, 0x01, 0x00, 0x00, + 0x04, 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, + 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, 0x26, + 0x04, 0x00, 0x4d, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, + 0x00, 0x04, 0xb4, 0x01, 0x00, 0x00, 0x04, 0xb5, + 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, + 0x04, 0xb8, 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, + 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, 0x26, + 0x04, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x84, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x4d, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x4d, 0x88, 0x01, 0x00, + 0x00, 0x4d, 0x89, 0x01, 0x00, 0x00, 0x4d, 0xd4, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x7b, 0xbe, + 0x7c, 0xbe, 0x7d, 0xbe, 0x7e, 0xbe, 0x7f, 0xbe, + 0x80, 0xbe, 0x81, 0xbe, 0x82, 0xbe, 0x83, 0xbe, + 0x84, 0xbe, 0x85, 0xbe, 0x86, 0xbe, 0x87, 0xbe, + 0x88, 0x26, 0x0e, 0x00, 0x4d, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, + 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, + 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, + 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, 0x04, + 0xc1, 0x01, 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, + 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, 0x04, 0xc4, + 0x01, 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, + 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, + 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, 0x26, + 0x0e, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, + 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, 0x04, 0xbe, + 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, + 0x04, 0xc0, 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, + 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, 0x00, 0x04, + 0xc3, 0x01, 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, + 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, + 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, + 0x04, 0xc8, 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, + 0x80, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xc9, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0xc9, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x4d, 0x86, 0x01, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x4d, 0x88, + 0x01, 0x00, 0x00, 0x4d, 0x89, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x89, 0xbe, 0x8a, 0xbe, 0x8b, 0xbe, 0x8c, 0xbe, + 0x8d, 0xbe, 0x8e, 0xbe, 0x8f, 0xbe, 0x90, 0xbe, + 0x91, 0xbe, 0x92, 0xbe, 0x93, 0xbe, 0x94, 0x26, + 0x0c, 0x00, 0x4d, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0xca, 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, + 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, + 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, + 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, 0x01, + 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, 0x04, + 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, + 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, 0xd5, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, + 0x04, 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, 0x01, + 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, 0x04, + 0xce, 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, + 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, 0xd1, + 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, + 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, + 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x81, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xd6, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd6, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x84, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x85, 0x01, 0x00, 0x00, 0x4d, 0x86, + 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, + 0x4d, 0x88, 0x01, 0x00, 0x00, 0x4d, 0x89, 0x01, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x95, 0xbe, 0x96, 0xbe, 0x97, 0xbe, + 0x98, 0xbe, 0x99, 0xbe, 0x9a, 0xbe, 0x9b, 0xbe, + 0x9c, 0xbe, 0x9d, 0xbe, 0x9e, 0xbe, 0x9f, 0xbe, + 0xa0, 0x26, 0x0c, 0x00, 0x4d, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, 0xd8, + 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, + 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, + 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, 0x04, + 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, + 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, 0xe0, + 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, 0x00, + 0x04, 0xe2, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe3, 0x01, + 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, 0x04, + 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, + 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, + 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, + 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, + 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, + 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x81, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xeb, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xec, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x84, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x4d, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x4d, 0x88, 0x01, 0x00, 0x00, 0x4d, + 0x89, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0xa1, 0xbe, 0xa2, 0xbe, + 0xa3, 0xbe, 0xa4, 0xbe, 0xa5, 0xbe, 0xa6, 0xbe, + 0xa7, 0xbe, 0xa8, 0xbe, 0xa9, 0xbe, 0xaa, 0xbe, + 0xab, 0xbe, 0xac, 0x26, 0x0c, 0x00, 0x4d, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, + 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, + 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, + 0xdb, 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, + 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, + 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, + 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, + 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, + 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, + 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, + 0x04, 0xdc, 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, + 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, + 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, + 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xeb, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x5e, 0x01, 0x00, 0x00, 0x04, 0xeb, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x84, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x4d, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x4d, 0x88, 0x01, 0x00, + 0x00, 0x4d, 0x89, 0x01, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x81, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xed, + 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, + 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, + 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, + 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, + 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, + 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, + 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, + 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, + 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, + 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, + 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, + 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, 0x02, + 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, 0x04, + 0x02, 0x02, 0x00, 0x00, 0x04, 0x03, 0x02, 0x00, + 0x00, 0x04, 0x04, 0x02, 0x00, 0x00, 0x04, 0x05, + 0x02, 0x00, 0x00, 0x04, 0x06, 0x02, 0x00, 0x00, + 0x04, 0x07, 0x02, 0x00, 0x00, 0x04, 0x08, 0x02, + 0x00, 0x00, 0x04, 0x09, 0x02, 0x00, 0x00, 0x04, + 0x0a, 0x02, 0x00, 0x00, 0x04, 0x0b, 0x02, 0x00, + 0x00, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x26, 0x20, + 0x00, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x20, + 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, + 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, + 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, + 0x10, 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, + 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, 0x24, + 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, + 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, + 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, + 0x14, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, + 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, 0x28, + 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, + 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, + 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, + 0x18, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, + 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, 0x2c, + 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, + 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, + 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, + 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, + 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x30, + 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, + 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, + 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, + 0x20, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, + 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, 0x34, + 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, + 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, + 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, + 0x24, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, + 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, 0x38, + 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, + 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, + 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, + 0x28, 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, + 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, 0x3c, + 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, + 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, + 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, + 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, + 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x40, + 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, + 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, + 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, + 0x30, 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, + 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, 0x44, + 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, + 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, + 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, + 0x34, 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, + 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, 0x48, + 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, + 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, + 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, + 0x38, 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, + 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, 0x4c, + 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, + 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, + 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, + 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, + 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x50, + 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, + 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, + 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, + 0x40, 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, + 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, 0x54, + 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, + 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, + 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, + 0x44, 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, + 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, 0x58, + 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, + 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, + 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, + 0x48, 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, + 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, 0x5c, + 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, + 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, + 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, + 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, + 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x60, + 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, + 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, + 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, + 0x50, 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, + 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, 0x64, + 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, + 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, + 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, + 0x54, 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, + 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, 0x68, + 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, + 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, + 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, + 0x58, 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, + 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, 0x6c, + 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, + 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, + 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, + 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, + 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x70, + 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, + 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, + 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, + 0x60, 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, + 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, 0x74, + 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, + 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, + 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, + 0x64, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, + 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, 0x78, + 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, + 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, + 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, + 0x68, 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, + 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, 0x7c, + 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, + 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, + 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, + 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, + 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x80, + 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, + 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, + 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, + 0x70, 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, + 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, 0x84, + 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, + 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, + 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, + 0x74, 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, + 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, 0x88, + 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, + 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, + 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, + 0x78, 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, + 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, 0x8c, + 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, + 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, + 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, + 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, + 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x90, + 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, + 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, + 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, + 0x80, 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, + 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, 0x94, + 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, + 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, + 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, + 0x84, 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, + 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, 0x98, + 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, + 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, + 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, + 0x88, 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, + 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, 0x9c, + 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, + 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, + 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, + 0x8c, 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, + 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xa0, + 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, + 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, + 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, + 0x90, 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, + 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, 0xa4, + 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, + 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, + 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, + 0x94, 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, + 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, 0xa8, + 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, + 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, + 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, + 0x98, 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, + 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, 0xac, + 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, + 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, + 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, + 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, + 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xb0, + 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, + 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, + 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, + 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, + 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xb4, + 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, + 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, + 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, + 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, + 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xb8, + 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, + 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, + 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, + 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, + 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xbc, + 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, + 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, + 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, + 0xac, 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, + 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0xc0, + 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, + 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, + 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, + 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, + 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xc4, + 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, + 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, + 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, + 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, + 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xc8, + 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, + 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, + 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, + 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, + 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xcc, + 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, + 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, + 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, + 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, + 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xd0, + 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, + 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, + 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, + 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, + 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xd4, + 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, + 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, + 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, + 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, + 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, + 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, + 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xcb, 0x02, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, + 0xcc, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x80, 0x04, 0xcd, 0x02, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x80, 0x04, 0xce, 0x02, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xcf, 0x02, + 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, + 0xd0, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x80, 0x04, 0xd1, 0x02, 0x00, 0x00, 0x4d, 0xe4, + 0x00, 0x00, 0x80, 0x04, 0xd2, 0x02, 0x00, 0x00, + 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0xd3, 0x02, + 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, + 0xd4, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x80, 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x80, 0x04, 0xd5, 0x02, 0x00, 0x00, + 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x02, + 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, + 0x05, 0x01, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x80, 0x4d, 0x5e, 0x01, 0x00, 0x00, 0x04, 0xd7, + 0x02, 0x00, 0x00, 0x04, 0xd8, 0x02, 0x00, 0x00, + 0x04, 0xd9, 0x02, 0x00, 0x00, 0x04, 0xda, 0x02, + 0x00, 0x00, 0x04, 0xdb, 0x02, 0x00, 0x00, 0x04, + 0xdc, 0x02, 0x00, 0x00, 0x04, 0xdd, 0x02, 0x00, + 0x00, 0x04, 0xde, 0x02, 0x00, 0x00, 0x04, 0xdf, + 0x02, 0x00, 0x00, 0x04, 0xe0, 0x02, 0x00, 0x00, + 0x04, 0xe1, 0x02, 0x00, 0x00, 0x04, 0xe2, 0x02, + 0x00, 0x00, 0x04, 0xe3, 0x02, 0x00, 0x00, 0x04, + 0xe4, 0x02, 0x00, 0x00, 0x04, 0xe5, 0x02, 0x00, + 0x00, 0x04, 0xe6, 0x02, 0x00, 0x00, 0x04, 0xe7, + 0x02, 0x00, 0x00, 0x04, 0xe8, 0x02, 0x00, 0x00, + 0x04, 0xe9, 0x02, 0x00, 0x00, 0x04, 0xea, 0x02, + 0x00, 0x00, 0x04, 0xeb, 0x02, 0x00, 0x00, 0x04, + 0xec, 0x02, 0x00, 0x00, 0x04, 0xed, 0x02, 0x00, + 0x00, 0x04, 0xee, 0x02, 0x00, 0x00, 0x04, 0xef, + 0x02, 0x00, 0x00, 0x04, 0xf0, 0x02, 0x00, 0x00, + 0x04, 0xf1, 0x02, 0x00, 0x00, 0x04, 0xf2, 0x02, + 0x00, 0x00, 0x04, 0xf3, 0x02, 0x00, 0x00, 0x04, + 0xf4, 0x02, 0x00, 0x00, 0x04, 0xf5, 0x02, 0x00, + 0x00, 0x04, 0xf6, 0x02, 0x00, 0x00, 0x26, 0x20, + 0x00, 0x04, 0xf7, 0x02, 0x00, 0x00, 0x4d, 0x20, + 0x00, 0x00, 0x80, 0x04, 0xf8, 0x02, 0x00, 0x00, + 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0xf9, 0x02, + 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, + 0xfa, 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, + 0x80, 0x04, 0xfb, 0x02, 0x00, 0x00, 0x4d, 0x24, + 0x00, 0x00, 0x80, 0x04, 0xfc, 0x02, 0x00, 0x00, + 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0xfd, 0x02, + 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, + 0xfe, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, + 0x80, 0x04, 0xff, 0x02, 0x00, 0x00, 0x4d, 0x28, + 0x00, 0x00, 0x80, 0x04, 0x00, 0x03, 0x00, 0x00, + 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0x01, 0x03, + 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, + 0x02, 0x03, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, + 0x80, 0x04, 0x03, 0x03, 0x00, 0x00, 0x4d, 0x2c, + 0x00, 0x00, 0x80, 0x04, 0x04, 0x03, 0x00, 0x00, + 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0x05, 0x03, + 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, + 0x06, 0x03, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, + 0x80, 0x04, 0x07, 0x03, 0x00, 0x00, 0x4d, 0x30, + 0x00, 0x00, 0x80, 0x04, 0x08, 0x03, 0x00, 0x00, + 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0x09, 0x03, + 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, + 0x0a, 0x03, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, + 0x80, 0x04, 0x0b, 0x03, 0x00, 0x00, 0x4d, 0x34, + 0x00, 0x00, 0x80, 0x04, 0x0c, 0x03, 0x00, 0x00, + 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0x0d, 0x03, + 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, + 0x0e, 0x03, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, + 0x80, 0x04, 0x0f, 0x03, 0x00, 0x00, 0x4d, 0x38, + 0x00, 0x00, 0x80, 0x04, 0x10, 0x03, 0x00, 0x00, + 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0x11, 0x03, + 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, + 0x12, 0x03, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, + 0x80, 0x04, 0x13, 0x03, 0x00, 0x00, 0x4d, 0x3c, + 0x00, 0x00, 0x80, 0x04, 0x14, 0x03, 0x00, 0x00, + 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x15, 0x03, + 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, + 0x16, 0x03, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, + 0x80, 0x04, 0x17, 0x03, 0x00, 0x00, 0x4d, 0x40, + 0x00, 0x00, 0x80, 0x04, 0x18, 0x03, 0x00, 0x00, + 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x19, 0x03, + 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, + 0x1a, 0x03, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, + 0x80, 0x04, 0x1b, 0x03, 0x00, 0x00, 0x4d, 0x44, + 0x00, 0x00, 0x80, 0x04, 0x1c, 0x03, 0x00, 0x00, + 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x1d, 0x03, + 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, + 0x1e, 0x03, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, + 0x80, 0x04, 0x1f, 0x03, 0x00, 0x00, 0x4d, 0x48, + 0x00, 0x00, 0x80, 0x04, 0x20, 0x03, 0x00, 0x00, + 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x21, 0x03, + 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, + 0x22, 0x03, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, + 0x80, 0x04, 0x23, 0x03, 0x00, 0x00, 0x4d, 0x4c, + 0x00, 0x00, 0x80, 0x04, 0x24, 0x03, 0x00, 0x00, + 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x25, 0x03, + 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, + 0x26, 0x03, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, + 0x80, 0x04, 0x27, 0x03, 0x00, 0x00, 0x4d, 0x50, + 0x00, 0x00, 0x80, 0x04, 0x28, 0x03, 0x00, 0x00, + 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x29, 0x03, + 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, + 0x2a, 0x03, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, + 0x80, 0x04, 0x2b, 0x03, 0x00, 0x00, 0x4d, 0x54, + 0x00, 0x00, 0x80, 0x04, 0x2c, 0x03, 0x00, 0x00, + 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x2d, 0x03, + 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, + 0x2e, 0x03, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, + 0x80, 0x04, 0x2f, 0x03, 0x00, 0x00, 0x4d, 0x58, + 0x00, 0x00, 0x80, 0x04, 0x30, 0x03, 0x00, 0x00, + 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x31, 0x03, + 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, + 0x32, 0x03, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, + 0x80, 0x04, 0x33, 0x03, 0x00, 0x00, 0x4d, 0x5c, + 0x00, 0x00, 0x80, 0x04, 0x34, 0x03, 0x00, 0x00, + 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x35, 0x03, + 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, + 0x36, 0x03, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, + 0x80, 0x04, 0x37, 0x03, 0x00, 0x00, 0x4d, 0x60, + 0x00, 0x00, 0x80, 0x04, 0x38, 0x03, 0x00, 0x00, + 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x39, 0x03, + 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, + 0x3a, 0x03, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, + 0x80, 0x04, 0x3b, 0x03, 0x00, 0x00, 0x4d, 0x64, + 0x00, 0x00, 0x80, 0x04, 0x3c, 0x03, 0x00, 0x00, + 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x3d, 0x03, + 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, + 0x3e, 0x03, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, + 0x80, 0x04, 0x3f, 0x03, 0x00, 0x00, 0x4d, 0x68, + 0x00, 0x00, 0x80, 0x04, 0x40, 0x03, 0x00, 0x00, + 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x41, 0x03, + 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, + 0x42, 0x03, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, + 0x80, 0x04, 0x43, 0x03, 0x00, 0x00, 0x4d, 0x6c, + 0x00, 0x00, 0x80, 0x04, 0x44, 0x03, 0x00, 0x00, + 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x45, 0x03, + 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, + 0x46, 0x03, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, + 0x80, 0x04, 0x47, 0x03, 0x00, 0x00, 0x4d, 0x70, + 0x00, 0x00, 0x80, 0x04, 0x48, 0x03, 0x00, 0x00, + 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x49, 0x03, + 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, + 0x4a, 0x03, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, + 0x80, 0x04, 0x4b, 0x03, 0x00, 0x00, 0x4d, 0x74, + 0x00, 0x00, 0x80, 0x04, 0x4c, 0x03, 0x00, 0x00, + 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x4d, 0x03, + 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, + 0x4e, 0x03, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, + 0x80, 0x04, 0x4f, 0x03, 0x00, 0x00, 0x4d, 0x78, + 0x00, 0x00, 0x80, 0x04, 0x50, 0x03, 0x00, 0x00, + 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x51, 0x03, + 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, + 0x52, 0x03, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, + 0x80, 0x04, 0x53, 0x03, 0x00, 0x00, 0x4d, 0x7c, + 0x00, 0x00, 0x80, 0x04, 0x54, 0x03, 0x00, 0x00, + 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x55, 0x03, + 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, + 0x56, 0x03, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, + 0x80, 0x04, 0x57, 0x03, 0x00, 0x00, 0x4d, 0x80, + 0x00, 0x00, 0x80, 0x04, 0x58, 0x03, 0x00, 0x00, + 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x59, 0x03, + 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, + 0x5a, 0x03, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, + 0x80, 0x04, 0x5b, 0x03, 0x00, 0x00, 0x4d, 0x84, + 0x00, 0x00, 0x80, 0x04, 0x5c, 0x03, 0x00, 0x00, + 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x5d, 0x03, + 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, + 0x5e, 0x03, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, + 0x80, 0x04, 0x5f, 0x03, 0x00, 0x00, 0x4d, 0x88, + 0x00, 0x00, 0x80, 0x04, 0x60, 0x03, 0x00, 0x00, + 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x61, 0x03, + 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, + 0x62, 0x03, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, + 0x80, 0x04, 0x63, 0x03, 0x00, 0x00, 0x4d, 0x8c, + 0x00, 0x00, 0x80, 0x04, 0x64, 0x03, 0x00, 0x00, + 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x65, 0x03, + 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, + 0x66, 0x03, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, + 0x80, 0x04, 0x67, 0x03, 0x00, 0x00, 0x4d, 0x90, + 0x00, 0x00, 0x80, 0x04, 0x68, 0x03, 0x00, 0x00, + 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x69, 0x03, + 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, + 0x6a, 0x03, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, + 0x80, 0x04, 0x6b, 0x03, 0x00, 0x00, 0x4d, 0x94, + 0x00, 0x00, 0x80, 0x04, 0x6c, 0x03, 0x00, 0x00, + 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x6d, 0x03, + 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, + 0x6e, 0x03, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, + 0x80, 0x04, 0x6f, 0x03, 0x00, 0x00, 0x4d, 0x98, + 0x00, 0x00, 0x80, 0x04, 0x70, 0x03, 0x00, 0x00, + 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x71, 0x03, + 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, + 0x72, 0x03, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, + 0x80, 0x04, 0x73, 0x03, 0x00, 0x00, 0x4d, 0x9c, + 0x00, 0x00, 0x80, 0x04, 0x74, 0x03, 0x00, 0x00, + 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x75, 0x03, + 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, + 0x76, 0x03, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, + 0x80, 0x04, 0x77, 0x03, 0x00, 0x00, 0x4d, 0xa0, + 0x00, 0x00, 0x80, 0x04, 0x78, 0x03, 0x00, 0x00, + 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x79, 0x03, + 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, + 0x7a, 0x03, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, + 0x80, 0x04, 0x7b, 0x03, 0x00, 0x00, 0x4d, 0xa4, + 0x00, 0x00, 0x80, 0x04, 0x7c, 0x03, 0x00, 0x00, + 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x7d, 0x03, + 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, + 0x7e, 0x03, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, + 0x80, 0x04, 0x7f, 0x03, 0x00, 0x00, 0x4d, 0xa8, + 0x00, 0x00, 0x80, 0x04, 0x80, 0x03, 0x00, 0x00, + 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x81, 0x03, + 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, + 0x82, 0x03, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, + 0x80, 0x04, 0x83, 0x03, 0x00, 0x00, 0x4d, 0xac, + 0x00, 0x00, 0x80, 0x04, 0x84, 0x03, 0x00, 0x00, + 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0x85, 0x03, + 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, + 0x86, 0x03, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, + 0x80, 0x04, 0x87, 0x03, 0x00, 0x00, 0x4d, 0xb0, + 0x00, 0x00, 0x80, 0x04, 0x88, 0x03, 0x00, 0x00, + 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0x89, 0x03, + 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, + 0x8a, 0x03, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, + 0x80, 0x04, 0x8b, 0x03, 0x00, 0x00, 0x4d, 0xb4, + 0x00, 0x00, 0x80, 0x04, 0x8c, 0x03, 0x00, 0x00, + 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0x8d, 0x03, + 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, + 0x8e, 0x03, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, + 0x80, 0x04, 0x8f, 0x03, 0x00, 0x00, 0x4d, 0xb8, + 0x00, 0x00, 0x80, 0x04, 0x90, 0x03, 0x00, 0x00, + 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0x91, 0x03, + 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, + 0x92, 0x03, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, + 0x80, 0x04, 0x93, 0x03, 0x00, 0x00, 0x4d, 0xbc, + 0x00, 0x00, 0x80, 0x04, 0x94, 0x03, 0x00, 0x00, + 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0x95, 0x03, + 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, + 0x96, 0x03, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, + 0x80, 0x04, 0x97, 0x03, 0x00, 0x00, 0x4d, 0xc0, + 0x00, 0x00, 0x80, 0x04, 0x98, 0x03, 0x00, 0x00, + 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0x99, 0x03, + 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, + 0x9a, 0x03, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, + 0x80, 0x04, 0x9b, 0x03, 0x00, 0x00, 0x4d, 0xc4, + 0x00, 0x00, 0x80, 0x04, 0x9c, 0x03, 0x00, 0x00, + 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0x9d, 0x03, + 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, + 0x9e, 0x03, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, + 0x80, 0x04, 0x9f, 0x03, 0x00, 0x00, 0x4d, 0xc8, + 0x00, 0x00, 0x80, 0x04, 0xa0, 0x03, 0x00, 0x00, + 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0xa1, 0x03, + 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, + 0xa2, 0x03, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, + 0x80, 0x04, 0xa3, 0x03, 0x00, 0x00, 0x4d, 0xcc, + 0x00, 0x00, 0x80, 0x04, 0xa4, 0x03, 0x00, 0x00, + 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0xa5, 0x03, + 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, + 0xa6, 0x03, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, + 0x80, 0x04, 0xa7, 0x03, 0x00, 0x00, 0x4d, 0xd0, + 0x00, 0x00, 0x80, 0x04, 0xa8, 0x03, 0x00, 0x00, + 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0xa9, 0x03, + 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, + 0xaa, 0x03, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, + 0x80, 0x04, 0xab, 0x03, 0x00, 0x00, 0x4d, 0xd4, + 0x00, 0x00, 0x80, 0x04, 0xac, 0x03, 0x00, 0x00, + 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0xad, 0x03, + 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, + 0xae, 0x03, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, + 0x80, 0x04, 0xaf, 0x03, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x80, 0x04, 0xb0, 0x03, 0x00, 0x00, + 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0xb1, 0x03, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, + 0xb2, 0x03, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x80, 0x04, 0xb3, 0x03, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x80, 0x04, 0xb4, 0x03, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xb5, 0x03, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, + 0xb6, 0x03, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x80, 0x04, 0xb7, 0x03, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x80, 0x04, 0xb8, 0x03, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xb9, 0x03, + 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, + 0xba, 0x03, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x80, 0x04, 0xbb, 0x03, 0x00, 0x00, 0x4d, 0xe4, + 0x00, 0x00, 0x80, 0x04, 0xbc, 0x03, 0x00, 0x00, + 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0xbd, 0x03, + 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, + 0xbe, 0x03, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x80, 0x04, 0xbf, 0x03, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x80, 0x04, 0xc0, 0x03, 0x00, 0x00, + 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0xc1, 0x03, + 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, + 0xc2, 0x03, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x80, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd7, + 0x02, 0x00, 0x00, 0x04, 0xd8, 0x02, 0x00, 0x00, + 0x04, 0xd9, 0x02, 0x00, 0x00, 0x04, 0xda, 0x02, + 0x00, 0x00, 0x04, 0xdb, 0x02, 0x00, 0x00, 0x04, + 0xdc, 0x02, 0x00, 0x00, 0x04, 0xdd, 0x02, 0x00, + 0x00, 0x04, 0xde, 0x02, 0x00, 0x00, 0x04, 0xdf, + 0x02, 0x00, 0x00, 0x04, 0xe0, 0x02, 0x00, 0x00, + 0x04, 0xe1, 0x02, 0x00, 0x00, 0x04, 0xe2, 0x02, + 0x00, 0x00, 0x04, 0xe3, 0x02, 0x00, 0x00, 0x04, + 0xe4, 0x02, 0x00, 0x00, 0x04, 0xe5, 0x02, 0x00, + 0x00, 0x04, 0xe6, 0x02, 0x00, 0x00, 0x04, 0xe7, + 0x02, 0x00, 0x00, 0x04, 0xe8, 0x02, 0x00, 0x00, + 0x04, 0xe9, 0x02, 0x00, 0x00, 0x04, 0xea, 0x02, + 0x00, 0x00, 0x04, 0xeb, 0x02, 0x00, 0x00, 0x04, + 0xec, 0x02, 0x00, 0x00, 0x04, 0xed, 0x02, 0x00, + 0x00, 0x04, 0xee, 0x02, 0x00, 0x00, 0x04, 0xef, + 0x02, 0x00, 0x00, 0x04, 0xf0, 0x02, 0x00, 0x00, + 0x04, 0xf1, 0x02, 0x00, 0x00, 0x04, 0xf2, 0x02, + 0x00, 0x00, 0x04, 0xf3, 0x02, 0x00, 0x00, 0x04, + 0xf4, 0x02, 0x00, 0x00, 0x04, 0xf5, 0x02, 0x00, + 0x00, 0x04, 0xf6, 0x02, 0x00, 0x00, 0x26, 0x20, + 0x00, 0x04, 0xf7, 0x02, 0x00, 0x00, 0x4d, 0x20, + 0x00, 0x00, 0x80, 0x04, 0xf8, 0x02, 0x00, 0x00, + 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0xf9, 0x02, + 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, + 0xfa, 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, + 0x80, 0x04, 0xfb, 0x02, 0x00, 0x00, 0x4d, 0x24, + 0x00, 0x00, 0x80, 0x04, 0xfc, 0x02, 0x00, 0x00, + 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0xfd, 0x02, + 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, + 0xfe, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, + 0x80, 0x04, 0xff, 0x02, 0x00, 0x00, 0x4d, 0x28, + 0x00, 0x00, 0x80, 0x04, 0x00, 0x03, 0x00, 0x00, + 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0x01, 0x03, + 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, + 0x02, 0x03, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, + 0x80, 0x04, 0x03, 0x03, 0x00, 0x00, 0x4d, 0x2c, + 0x00, 0x00, 0x80, 0x04, 0x04, 0x03, 0x00, 0x00, + 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0x05, 0x03, + 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, + 0x06, 0x03, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, + 0x80, 0x04, 0x07, 0x03, 0x00, 0x00, 0x4d, 0x30, + 0x00, 0x00, 0x80, 0x04, 0x08, 0x03, 0x00, 0x00, + 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0x09, 0x03, + 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, + 0x0a, 0x03, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, + 0x80, 0x04, 0x0b, 0x03, 0x00, 0x00, 0x4d, 0x34, + 0x00, 0x00, 0x80, 0x04, 0x0c, 0x03, 0x00, 0x00, + 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0x0d, 0x03, + 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, + 0x0e, 0x03, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, + 0x80, 0x04, 0x0f, 0x03, 0x00, 0x00, 0x4d, 0x38, + 0x00, 0x00, 0x80, 0x04, 0x10, 0x03, 0x00, 0x00, + 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0x11, 0x03, + 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, + 0x12, 0x03, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, + 0x80, 0x04, 0x13, 0x03, 0x00, 0x00, 0x4d, 0x3c, + 0x00, 0x00, 0x80, 0x04, 0x14, 0x03, 0x00, 0x00, + 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x15, 0x03, + 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, + 0x16, 0x03, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, + 0x80, 0x04, 0x17, 0x03, 0x00, 0x00, 0x4d, 0x40, + 0x00, 0x00, 0x80, 0x04, 0x18, 0x03, 0x00, 0x00, + 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x19, 0x03, + 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, + 0x1a, 0x03, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, + 0x80, 0x04, 0x1b, 0x03, 0x00, 0x00, 0x4d, 0x44, + 0x00, 0x00, 0x80, 0x04, 0x1c, 0x03, 0x00, 0x00, + 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x1d, 0x03, + 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, + 0x1e, 0x03, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, + 0x80, 0x04, 0x1f, 0x03, 0x00, 0x00, 0x4d, 0x48, + 0x00, 0x00, 0x80, 0x04, 0x20, 0x03, 0x00, 0x00, + 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x21, 0x03, + 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, + 0x22, 0x03, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, + 0x80, 0x04, 0x23, 0x03, 0x00, 0x00, 0x4d, 0x4c, + 0x00, 0x00, 0x80, 0x04, 0x24, 0x03, 0x00, 0x00, + 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x25, 0x03, + 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, + 0x26, 0x03, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, + 0x80, 0x04, 0x27, 0x03, 0x00, 0x00, 0x4d, 0x50, + 0x00, 0x00, 0x80, 0x04, 0x28, 0x03, 0x00, 0x00, + 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x29, 0x03, + 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, + 0x2a, 0x03, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, + 0x80, 0x04, 0x2b, 0x03, 0x00, 0x00, 0x4d, 0x54, + 0x00, 0x00, 0x80, 0x04, 0x2c, 0x03, 0x00, 0x00, + 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x2d, 0x03, + 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, + 0x2e, 0x03, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, + 0x80, 0x04, 0x2f, 0x03, 0x00, 0x00, 0x4d, 0x58, + 0x00, 0x00, 0x80, 0x04, 0x30, 0x03, 0x00, 0x00, + 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x31, 0x03, + 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, + 0x32, 0x03, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, + 0x80, 0x04, 0x33, 0x03, 0x00, 0x00, 0x4d, 0x5c, + 0x00, 0x00, 0x80, 0x04, 0x34, 0x03, 0x00, 0x00, + 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x35, 0x03, + 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, + 0x36, 0x03, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, + 0x80, 0x04, 0x37, 0x03, 0x00, 0x00, 0x4d, 0x60, + 0x00, 0x00, 0x80, 0x04, 0x38, 0x03, 0x00, 0x00, + 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x39, 0x03, + 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, + 0x3a, 0x03, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, + 0x80, 0x04, 0x3b, 0x03, 0x00, 0x00, 0x4d, 0x64, + 0x00, 0x00, 0x80, 0x04, 0x3c, 0x03, 0x00, 0x00, + 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x3d, 0x03, + 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, + 0x3e, 0x03, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, + 0x80, 0x04, 0x3f, 0x03, 0x00, 0x00, 0x4d, 0x68, + 0x00, 0x00, 0x80, 0x04, 0x40, 0x03, 0x00, 0x00, + 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x41, 0x03, + 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, + 0x42, 0x03, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, + 0x80, 0x04, 0x43, 0x03, 0x00, 0x00, 0x4d, 0x6c, + 0x00, 0x00, 0x80, 0x04, 0x44, 0x03, 0x00, 0x00, + 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x45, 0x03, + 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, + 0x46, 0x03, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, + 0x80, 0x04, 0x47, 0x03, 0x00, 0x00, 0x4d, 0x70, + 0x00, 0x00, 0x80, 0x04, 0x48, 0x03, 0x00, 0x00, + 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x49, 0x03, + 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, + 0x4a, 0x03, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, + 0x80, 0x04, 0x4b, 0x03, 0x00, 0x00, 0x4d, 0x74, + 0x00, 0x00, 0x80, 0x04, 0x4c, 0x03, 0x00, 0x00, + 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x4d, 0x03, + 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, + 0x4e, 0x03, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, + 0x80, 0x04, 0x4f, 0x03, 0x00, 0x00, 0x4d, 0x78, + 0x00, 0x00, 0x80, 0x04, 0x50, 0x03, 0x00, 0x00, + 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x51, 0x03, + 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, + 0x52, 0x03, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, + 0x80, 0x04, 0x53, 0x03, 0x00, 0x00, 0x4d, 0x7c, + 0x00, 0x00, 0x80, 0x04, 0x54, 0x03, 0x00, 0x00, + 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x55, 0x03, + 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, + 0x56, 0x03, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, + 0x80, 0x04, 0x57, 0x03, 0x00, 0x00, 0x4d, 0x80, + 0x00, 0x00, 0x80, 0x04, 0x58, 0x03, 0x00, 0x00, + 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x59, 0x03, + 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, + 0x5a, 0x03, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, + 0x80, 0x04, 0x5b, 0x03, 0x00, 0x00, 0x4d, 0x84, + 0x00, 0x00, 0x80, 0x04, 0x5c, 0x03, 0x00, 0x00, + 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x5d, 0x03, + 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, + 0x5e, 0x03, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, + 0x80, 0x04, 0x5f, 0x03, 0x00, 0x00, 0x4d, 0x88, + 0x00, 0x00, 0x80, 0x04, 0x60, 0x03, 0x00, 0x00, + 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x61, 0x03, + 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, + 0x62, 0x03, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, + 0x80, 0x04, 0x63, 0x03, 0x00, 0x00, 0x4d, 0x8c, + 0x00, 0x00, 0x80, 0x04, 0x64, 0x03, 0x00, 0x00, + 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x65, 0x03, + 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, + 0x66, 0x03, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, + 0x80, 0x04, 0x67, 0x03, 0x00, 0x00, 0x4d, 0x90, + 0x00, 0x00, 0x80, 0x04, 0x68, 0x03, 0x00, 0x00, + 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x69, 0x03, + 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, + 0x6a, 0x03, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, + 0x80, 0x04, 0x6b, 0x03, 0x00, 0x00, 0x4d, 0x94, + 0x00, 0x00, 0x80, 0x04, 0x6c, 0x03, 0x00, 0x00, + 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x6d, 0x03, + 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, + 0x6e, 0x03, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, + 0x80, 0x04, 0x6f, 0x03, 0x00, 0x00, 0x4d, 0x98, + 0x00, 0x00, 0x80, 0x04, 0x70, 0x03, 0x00, 0x00, + 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x71, 0x03, + 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, + 0x72, 0x03, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, + 0x80, 0x04, 0x73, 0x03, 0x00, 0x00, 0x4d, 0x9c, + 0x00, 0x00, 0x80, 0x04, 0x74, 0x03, 0x00, 0x00, + 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x75, 0x03, + 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, + 0x76, 0x03, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, + 0x80, 0x04, 0x77, 0x03, 0x00, 0x00, 0x4d, 0xa0, + 0x00, 0x00, 0x80, 0x04, 0x78, 0x03, 0x00, 0x00, + 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x79, 0x03, + 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, + 0x7a, 0x03, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, + 0x80, 0x04, 0x7b, 0x03, 0x00, 0x00, 0x4d, 0xa4, + 0x00, 0x00, 0x80, 0x04, 0x7c, 0x03, 0x00, 0x00, + 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x7d, 0x03, + 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, + 0x7e, 0x03, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, + 0x80, 0x04, 0x7f, 0x03, 0x00, 0x00, 0x4d, 0xa8, + 0x00, 0x00, 0x80, 0x04, 0x80, 0x03, 0x00, 0x00, + 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x81, 0x03, + 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, + 0x82, 0x03, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, + 0x80, 0x04, 0x83, 0x03, 0x00, 0x00, 0x4d, 0xac, + 0x00, 0x00, 0x80, 0x04, 0x84, 0x03, 0x00, 0x00, + 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0x85, 0x03, + 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, + 0x86, 0x03, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, + 0x80, 0x04, 0x87, 0x03, 0x00, 0x00, 0x4d, 0xb0, + 0x00, 0x00, 0x80, 0x04, 0x88, 0x03, 0x00, 0x00, + 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0x89, 0x03, + 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, + 0x8a, 0x03, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, + 0x80, 0x04, 0x8b, 0x03, 0x00, 0x00, 0x4d, 0xb4, + 0x00, 0x00, 0x80, 0x04, 0x8c, 0x03, 0x00, 0x00, + 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0x8d, 0x03, + 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, + 0x8e, 0x03, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, + 0x80, 0x04, 0x8f, 0x03, 0x00, 0x00, 0x4d, 0xb8, + 0x00, 0x00, 0x80, 0x04, 0x90, 0x03, 0x00, 0x00, + 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0x91, 0x03, + 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, + 0x92, 0x03, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, + 0x80, 0x04, 0x93, 0x03, 0x00, 0x00, 0x4d, 0xbc, + 0x00, 0x00, 0x80, 0x04, 0x94, 0x03, 0x00, 0x00, + 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0x95, 0x03, + 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, + 0x96, 0x03, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, + 0x80, 0x04, 0x97, 0x03, 0x00, 0x00, 0x4d, 0xc0, + 0x00, 0x00, 0x80, 0x04, 0x98, 0x03, 0x00, 0x00, + 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0x99, 0x03, + 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, + 0x9a, 0x03, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, + 0x80, 0x04, 0x9b, 0x03, 0x00, 0x00, 0x4d, 0xc4, + 0x00, 0x00, 0x80, 0x04, 0x9c, 0x03, 0x00, 0x00, + 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0x9d, 0x03, + 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, + 0x9e, 0x03, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, + 0x80, 0x04, 0x9f, 0x03, 0x00, 0x00, 0x4d, 0xc8, + 0x00, 0x00, 0x80, 0x04, 0xa0, 0x03, 0x00, 0x00, + 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0xa1, 0x03, + 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, + 0xa2, 0x03, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, + 0x80, 0x04, 0xa3, 0x03, 0x00, 0x00, 0x4d, 0xcc, + 0x00, 0x00, 0x80, 0x04, 0xa4, 0x03, 0x00, 0x00, + 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0xa5, 0x03, + 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, + 0xa6, 0x03, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, + 0x80, 0x04, 0xa7, 0x03, 0x00, 0x00, 0x4d, 0xd0, + 0x00, 0x00, 0x80, 0x04, 0xa8, 0x03, 0x00, 0x00, + 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0xa9, 0x03, + 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, + 0xaa, 0x03, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, + 0x80, 0x04, 0xab, 0x03, 0x00, 0x00, 0x4d, 0xd4, + 0x00, 0x00, 0x80, 0x04, 0xac, 0x03, 0x00, 0x00, + 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0xad, 0x03, + 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, + 0xae, 0x03, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, + 0x80, 0x04, 0xaf, 0x03, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x80, 0x04, 0xb0, 0x03, 0x00, 0x00, + 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0xb1, 0x03, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, + 0xb2, 0x03, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x80, 0x04, 0xb3, 0x03, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x80, 0x04, 0xb4, 0x03, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xb5, 0x03, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, + 0xb6, 0x03, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x80, 0x04, 0xb7, 0x03, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x80, 0x04, 0xb8, 0x03, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xb9, 0x03, + 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, + 0xba, 0x03, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x80, 0x04, 0xbb, 0x03, 0x00, 0x00, 0x4d, 0xe4, + 0x00, 0x00, 0x80, 0x04, 0xbc, 0x03, 0x00, 0x00, + 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0xbd, 0x03, + 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, + 0xbe, 0x03, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x80, 0x04, 0xbf, 0x03, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x80, 0x04, 0xc0, 0x03, 0x00, 0x00, + 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0xc1, 0x03, + 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, + 0xc2, 0x03, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x80, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x84, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x85, 0x01, 0x00, + 0x00, 0x4d, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, + 0x01, 0x00, 0x00, 0x4d, 0x88, 0x01, 0x00, 0x00, + 0x4d, 0x89, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0xad, 0xbe, 0xae, + 0xbe, 0xaf, 0xbe, 0xb0, 0xbe, 0xb1, 0xbe, 0xb2, + 0xbe, 0xb3, 0xbe, 0xb4, 0xbe, 0xb5, 0xbe, 0xb6, + 0xbe, 0xb7, 0xbe, 0xb8, 0x26, 0x0c, 0x00, 0x4d, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0xc3, 0x03, 0x00, + 0x00, 0x04, 0xc4, 0x03, 0x00, 0x00, 0x04, 0xc5, + 0x03, 0x00, 0x00, 0x04, 0xc6, 0x03, 0x00, 0x00, + 0x04, 0xc7, 0x03, 0x00, 0x00, 0x04, 0xc8, 0x03, + 0x00, 0x00, 0x04, 0xc9, 0x03, 0x00, 0x00, 0x04, + 0xca, 0x03, 0x00, 0x00, 0x04, 0xcb, 0x03, 0x00, + 0x00, 0x04, 0xcc, 0x03, 0x00, 0x00, 0x04, 0xcd, + 0x03, 0x00, 0x00, 0x04, 0xce, 0x03, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xc3, 0x03, 0x00, 0x00, 0x04, 0xc4, 0x03, + 0x00, 0x00, 0x04, 0xc5, 0x03, 0x00, 0x00, 0x04, + 0xc6, 0x03, 0x00, 0x00, 0x04, 0xc7, 0x03, 0x00, + 0x00, 0x04, 0xc8, 0x03, 0x00, 0x00, 0x04, 0xc9, + 0x03, 0x00, 0x00, 0x04, 0xca, 0x03, 0x00, 0x00, + 0x04, 0xcb, 0x03, 0x00, 0x00, 0x04, 0xcc, 0x03, + 0x00, 0x00, 0x04, 0xcd, 0x03, 0x00, 0x00, 0x04, + 0xce, 0x03, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, + 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, + 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xcf, 0x03, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x5e, 0x01, 0x00, 0x00, 0x04, 0xcf, + 0x03, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xcf, 0x03, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x84, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x85, + 0x01, 0x00, 0x00, 0x4d, 0x86, 0x01, 0x00, 0x00, + 0x04, 0x87, 0x01, 0x00, 0x00, 0x4d, 0x88, 0x01, + 0x00, 0x00, 0x4d, 0x89, 0x01, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, + 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xd0, 0x03, 0x00, 0x00, 0x04, 0xd1, 0x03, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0xd0, 0x03, 0x00, 0x00, 0x04, 0xd1, + 0x03, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xd0, 0x03, 0x00, 0x00, + 0x04, 0xd1, 0x03, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x84, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x4d, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x4d, 0x88, 0x01, 0x00, 0x00, 0x4d, + 0x89, 0x01, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x00, 0x4d, 0xd2, 0x03, 0x00, 0x00, 0x4d, 0xd3, + 0x03, 0x00, 0x00, 0x0b, 0x04, 0xd4, 0x03, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xd5, 0x03, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0xd6, 0x03, 0x00, 0x00, + 0x4d, 0xd7, 0x03, 0x00, 0x00, 0x04, 0xd8, 0x03, + 0x00, 0x00, 0x4d, 0xd9, 0x03, 0x00, 0x00, 0x4d, + 0xda, 0x03, 0x00, 0x00, 0x0b, 0x04, 0xdb, 0x03, + 0x00, 0x00, 0x4d, 0xd7, 0x03, 0x00, 0x00, 0x04, + 0xdc, 0x03, 0x00, 0x00, 0x4d, 0xd9, 0x03, 0x00, + 0x00, 0x4d, 0xdd, 0x03, 0x00, 0x00, 0x0b, 0x04, + 0xde, 0x03, 0x00, 0x00, 0x4d, 0xd7, 0x03, 0x00, + 0x00, 0x04, 0xdf, 0x03, 0x00, 0x00, 0x4d, 0xd9, + 0x03, 0x00, 0x00, 0x4d, 0xe0, 0x03, 0x00, 0x00, + 0x4d, 0xe1, 0x03, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0xe2, 0x03, 0x00, 0x00, 0x4d, 0xda, 0x03, 0x00, + 0x00, 0x04, 0xe3, 0x03, 0x00, 0x00, 0x4d, 0xe4, + 0x03, 0x00, 0x00, 0x04, 0xe5, 0x03, 0x00, 0x00, + 0x4d, 0xe6, 0x03, 0x00, 0x00, 0x04, 0xe7, 0x03, + 0x00, 0x00, 0x4d, 0xe8, 0x03, 0x00, 0x00, 0x04, + 0xe9, 0x03, 0x00, 0x00, 0x4d, 0xea, 0x03, 0x00, + 0x00, 0x04, 0xeb, 0x03, 0x00, 0x00, 0x4d, 0xec, + 0x03, 0x00, 0x00, 0x04, 0xed, 0x03, 0x00, 0x00, + 0x4d, 0xee, 0x03, 0x00, 0x00, 0x4d, 0xd4, 0x03, + 0x00, 0x00, 0x0b, 0x04, 0xe2, 0x03, 0x00, 0x00, + 0x4d, 0xda, 0x03, 0x00, 0x00, 0x04, 0xe3, 0x03, + 0x00, 0x00, 0x4d, 0xe4, 0x03, 0x00, 0x00, 0x04, + 0xe5, 0x03, 0x00, 0x00, 0x4d, 0xe6, 0x03, 0x00, + 0x00, 0x04, 0xe7, 0x03, 0x00, 0x00, 0x4d, 0xe8, + 0x03, 0x00, 0x00, 0x04, 0xe9, 0x03, 0x00, 0x00, + 0x4d, 0xea, 0x03, 0x00, 0x00, 0x04, 0xeb, 0x03, + 0x00, 0x00, 0x4d, 0xec, 0x03, 0x00, 0x00, 0x04, + 0xed, 0x03, 0x00, 0x00, 0x4d, 0xee, 0x03, 0x00, + 0x00, 0x4d, 0xef, 0x03, 0x00, 0x00, 0x4d, 0xf0, + 0x03, 0x00, 0x00, 0x0b, 0x04, 0xf1, 0x03, 0x00, + 0x00, 0x4d, 0xf2, 0x03, 0x00, 0x00, 0x04, 0xf3, + 0x03, 0x00, 0x00, 0x4d, 0xf4, 0x03, 0x00, 0x00, + 0x04, 0xf5, 0x03, 0x00, 0x00, 0x4d, 0xf6, 0x03, + 0x00, 0x00, 0x04, 0xf7, 0x03, 0x00, 0x00, 0x4d, + 0xf8, 0x03, 0x00, 0x00, 0x04, 0xf9, 0x03, 0x00, + 0x00, 0x4d, 0xfa, 0x03, 0x00, 0x00, 0x04, 0xfb, + 0x03, 0x00, 0x00, 0x4d, 0xfc, 0x03, 0x00, 0x00, + 0x04, 0xfd, 0x03, 0x00, 0x00, 0x4d, 0xfe, 0x03, + 0x00, 0x00, 0x04, 0xff, 0x03, 0x00, 0x00, 0x4d, + 0x00, 0x04, 0x00, 0x00, 0x04, 0x01, 0x04, 0x00, + 0x00, 0x4d, 0x02, 0x04, 0x00, 0x00, 0x04, 0x03, + 0x04, 0x00, 0x00, 0x4d, 0x04, 0x04, 0x00, 0x00, + 0x04, 0x05, 0x04, 0x00, 0x00, 0x4d, 0x06, 0x04, + 0x00, 0x00, 0x04, 0x07, 0x04, 0x00, 0x00, 0x4d, + 0x08, 0x04, 0x00, 0x00, 0x04, 0x09, 0x04, 0x00, + 0x00, 0x4d, 0x0a, 0x04, 0x00, 0x00, 0x04, 0x0b, + 0x04, 0x00, 0x00, 0x4d, 0x0c, 0x04, 0x00, 0x00, + 0x04, 0x0d, 0x04, 0x00, 0x00, 0x4d, 0x0e, 0x04, + 0x00, 0x00, 0x04, 0x0f, 0x04, 0x00, 0x00, 0x4d, + 0x10, 0x04, 0x00, 0x00, 0x04, 0x11, 0x04, 0x00, + 0x00, 0x4d, 0x12, 0x04, 0x00, 0x00, 0x04, 0x13, + 0x04, 0x00, 0x00, 0x4d, 0x14, 0x04, 0x00, 0x00, + 0x04, 0x15, 0x04, 0x00, 0x00, 0x4d, 0x16, 0x04, + 0x00, 0x00, 0x04, 0x17, 0x04, 0x00, 0x00, 0x4d, + 0x18, 0x04, 0x00, 0x00, 0x4d, 0x19, 0x04, 0x00, + 0x00, 0x4d, 0x45, 0x00, 0x00, 0x00, 0x24, 0x01, + 0x00, 0xcc, 0x28, 0xb4, 0x10, 0x01, 0x00, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, + 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_tr_size = 24767; + +const uint8_t intl_tr[24767] = { + 0x01, 0xd2, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x74, 0x72, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x0e, + 0x7b, 0x31, 0x7d, 0x20, 0x7b, 0x30, 0x7d, 0x0a, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, 0x65, + 0x64, 0x69, 0x75, 0x6d, 0x08, 0x66, 0x75, 0x6c, + 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x02, 0x64, + 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, 0x06, 0x64, + 0x20, 0x45, 0x04, 0x45, 0x64, 0x10, 0x45, 0x20, + 0x61, 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x06, 0x45, + 0x68, 0x6d, 0x0e, 0x45, 0x20, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x06, 0x45, 0x48, 0x6d, 0x16, 0x45, + 0x20, 0x61, 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x08, 0x45, 0x68, 0x6d, 0x73, 0x14, + 0x45, 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x08, 0x45, 0x48, 0x6d, 0x73, 0x06, + 0x47, 0x20, 0x79, 0x04, 0x47, 0x79, 0x0e, 0x47, + 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0a, 0x47, + 0x79, 0x4d, 0x4d, 0x4d, 0x14, 0x47, 0x20, 0x64, + 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0c, + 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x16, 0x47, + 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, + 0x20, 0x45, 0x0e, 0x47, 0x79, 0x4d, 0x4d, 0x4d, + 0x45, 0x64, 0x06, 0x61, 0x20, 0x68, 0x02, 0x68, + 0x04, 0x48, 0x48, 0x02, 0x48, 0x0c, 0x61, 0x20, + 0x68, 0x3a, 0x6d, 0x6d, 0x04, 0x68, 0x6d, 0x0a, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x04, 0x48, 0x6d, + 0x12, 0x61, 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x06, 0x68, 0x6d, 0x73, 0x10, 0x48, + 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x06, + 0x48, 0x6d, 0x73, 0x16, 0x61, 0x20, 0x68, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x76, 0x08, + 0x68, 0x6d, 0x73, 0x76, 0x14, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x76, 0x08, + 0x48, 0x6d, 0x73, 0x76, 0x10, 0x61, 0x20, 0x68, + 0x3a, 0x6d, 0x6d, 0x20, 0x76, 0x06, 0x68, 0x6d, + 0x76, 0x0e, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x20, + 0x76, 0x06, 0x48, 0x6d, 0x76, 0x02, 0x4c, 0x02, + 0x4d, 0x0a, 0x64, 0x64, 0x2f, 0x4d, 0x4d, 0x04, + 0x4d, 0x64, 0x0e, 0x64, 0x64, 0x2f, 0x4d, 0x4d, + 0x20, 0x45, 0x06, 0x4d, 0x45, 0x64, 0x06, 0x4c, + 0x4c, 0x4c, 0x06, 0x4d, 0x4d, 0x4d, 0x0a, 0x64, + 0x20, 0x4d, 0x4d, 0x4d, 0x08, 0x4d, 0x4d, 0x4d, + 0x64, 0x10, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, + 0x20, 0x45, 0x0a, 0x4d, 0x4d, 0x4d, 0x45, 0x64, + 0x0e, 0x64, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, + 0x0a, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x12, 0x64, + 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x45, + 0x0c, 0x4d, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x08, 0x6d, 0x6d, + 0x73, 0x73, 0x04, 0x6d, 0x73, 0x02, 0x79, 0x08, + 0x4d, 0x4d, 0x2f, 0x79, 0x04, 0x79, 0x4d, 0x0e, + 0x64, 0x64, 0x2e, 0x4d, 0x4d, 0x2e, 0x79, 0x06, + 0x79, 0x4d, 0x64, 0x12, 0x64, 0x64, 0x2e, 0x4d, + 0x4d, 0x2e, 0x79, 0x20, 0x45, 0x08, 0x79, 0x4d, + 0x45, 0x64, 0x08, 0x4d, 0x4d, 0x2e, 0x79, 0x06, + 0x79, 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x20, + 0x79, 0x08, 0x79, 0x4d, 0x4d, 0x4d, 0x10, 0x64, + 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0a, + 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x12, 0x64, 0x20, + 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x20, 0x45, 0x0c, + 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0c, 0x4d, + 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0a, 0x79, 0x4d, + 0x4d, 0x4d, 0x4d, 0x0a, 0x79, 0x2f, 0x51, 0x51, + 0x51, 0x08, 0x79, 0x51, 0x51, 0x51, 0x0c, 0x79, + 0x2f, 0x51, 0x51, 0x51, 0x51, 0x0a, 0x79, 0x51, + 0x51, 0x51, 0x51, 0x20, 0x61, 0x76, 0x61, 0x69, + 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x73, 0x1a, 0x64, 0x20, 0x4d, + 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x20, 0x45, 0x45, + 0x45, 0x45, 0x14, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, + 0x45, 0x45, 0x45, 0x45, 0x64, 0x10, 0x64, 0x20, + 0x4d, 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0c, 0x79, + 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x0e, 0x64, 0x20, + 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x0c, 0x64, 0x2e, + 0x4d, 0x4d, 0x2e, 0x79, 0x16, 0x64, 0x61, 0x74, + 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, + 0x1a, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x7a, 0x7a, 0x7a, 0x7a, 0x12, 0x68, + 0x6d, 0x6d, 0x73, 0x73, 0x7a, 0x7a, 0x7a, 0x7a, + 0x14, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x7a, 0x08, 0x68, 0x6d, 0x73, 0x7a, + 0x16, 0x74, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x73, 0x0e, 0x66, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x73, 0x02, 0x4f, 0x03, 0x5e, + 0x01, 0x02, 0x4e, 0x02, 0x54, 0x02, 0x41, 0x02, + 0x4b, 0x0c, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x06, 0x4f, 0x63, 0x61, 0x07, 0x5e, 0x01, 0x75, + 0x00, 0x62, 0x00, 0x06, 0x4d, 0x61, 0x72, 0x06, + 0x4e, 0x69, 0x73, 0x06, 0x4d, 0x61, 0x79, 0x06, + 0x48, 0x61, 0x7a, 0x06, 0x54, 0x65, 0x6d, 0x07, + 0x41, 0x00, 0x1f, 0x01, 0x75, 0x00, 0x06, 0x45, + 0x79, 0x6c, 0x06, 0x45, 0x6b, 0x69, 0x06, 0x4b, + 0x61, 0x73, 0x06, 0x41, 0x72, 0x61, 0x08, 0x4f, + 0x63, 0x61, 0x6b, 0x0b, 0x5e, 0x01, 0x75, 0x00, + 0x62, 0x00, 0x61, 0x00, 0x74, 0x00, 0x08, 0x4d, + 0x61, 0x72, 0x74, 0x0a, 0x4e, 0x69, 0x73, 0x61, + 0x6e, 0x0b, 0x4d, 0x00, 0x61, 0x00, 0x79, 0x00, + 0x31, 0x01, 0x73, 0x00, 0x0e, 0x48, 0x61, 0x7a, + 0x69, 0x72, 0x61, 0x6e, 0x0c, 0x54, 0x65, 0x6d, + 0x6d, 0x75, 0x7a, 0x0f, 0x41, 0x00, 0x1f, 0x01, + 0x75, 0x00, 0x73, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x73, 0x00, 0x0a, 0x45, 0x79, 0x6c, 0xfc, 0x6c, + 0x08, 0x45, 0x6b, 0x69, 0x6d, 0x0b, 0x4b, 0x00, + 0x61, 0x00, 0x73, 0x00, 0x31, 0x01, 0x6d, 0x00, + 0x0d, 0x41, 0x00, 0x72, 0x00, 0x61, 0x00, 0x6c, + 0x00, 0x31, 0x01, 0x6b, 0x00, 0x0c, 0x6d, 0x6f, + 0x6e, 0x74, 0x68, 0x73, 0x02, 0x50, 0x02, 0x53, + 0x02, 0xc7, 0x02, 0x43, 0x06, 0x50, 0x61, 0x7a, + 0x06, 0x50, 0x7a, 0x74, 0x06, 0x53, 0x61, 0x6c, + 0x06, 0xc7, 0x61, 0x72, 0x06, 0x50, 0x65, 0x72, + 0x06, 0x43, 0x75, 0x6d, 0x06, 0x43, 0x6d, 0x74, + 0x0a, 0x50, 0x61, 0x7a, 0x61, 0x72, 0x12, 0x50, + 0x61, 0x7a, 0x61, 0x72, 0x74, 0x65, 0x73, 0x69, + 0x09, 0x53, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x31, + 0x01, 0x11, 0xc7, 0x00, 0x61, 0x00, 0x72, 0x00, + 0x5f, 0x01, 0x61, 0x00, 0x6d, 0x00, 0x62, 0x00, + 0x61, 0x00, 0x11, 0x50, 0x00, 0x65, 0x00, 0x72, + 0x00, 0x5f, 0x01, 0x65, 0x00, 0x6d, 0x00, 0x62, + 0x00, 0x65, 0x00, 0x08, 0x43, 0x75, 0x6d, 0x61, + 0x12, 0x43, 0x75, 0x6d, 0x61, 0x72, 0x74, 0x65, + 0x73, 0x69, 0x08, 0x64, 0x61, 0x79, 0x73, 0x04, + 0x42, 0x45, 0x08, 0x65, 0x72, 0x61, 0x73, 0x04, + 0xd6, 0xd6, 0x04, 0x61, 0x6d, 0x04, 0xd6, 0x53, + 0x04, 0x70, 0x6d, 0x14, 0x64, 0x61, 0x79, 0x50, + 0x65, 0x72, 0x69, 0x6f, 0x64, 0x73, 0x06, 0x4d, + 0x30, 0x31, 0x06, 0x4d, 0x30, 0x32, 0x06, 0x4d, + 0x30, 0x33, 0x06, 0x4d, 0x30, 0x34, 0x06, 0x4d, + 0x30, 0x35, 0x06, 0x4d, 0x30, 0x36, 0x06, 0x4d, + 0x30, 0x37, 0x06, 0x4d, 0x30, 0x38, 0x06, 0x4d, + 0x30, 0x39, 0x06, 0x4d, 0x31, 0x30, 0x06, 0x4d, + 0x31, 0x31, 0x06, 0x4d, 0x31, 0x32, 0x06, 0x54, + 0xfb, 0x74, 0x08, 0x42, 0xe2, 0x62, 0x65, 0x0a, + 0x48, 0x61, 0x74, 0x75, 0x72, 0x0c, 0x4b, 0x65, + 0x79, 0x68, 0x65, 0x6b, 0x08, 0x54, 0xfb, 0x62, + 0x65, 0x0b, 0x49, 0x00, 0x6d, 0x00, 0x5f, 0x01, + 0x69, 0x00, 0x72, 0x00, 0x10, 0x42, 0x65, 0x72, + 0x6d, 0x75, 0x68, 0x61, 0x74, 0x0e, 0x42, 0x65, + 0x72, 0x6d, 0x75, 0x64, 0x65, 0x0f, 0x50, 0x00, + 0x65, 0x00, 0x79, 0x00, 0x5f, 0x01, 0x74, 0x00, + 0x65, 0x00, 0x73, 0x00, 0x08, 0x42, 0x75, 0x6e, + 0x65, 0x08, 0x45, 0x62, 0x69, 0x70, 0x0b, 0x4d, + 0x00, 0x31, 0x01, 0x73, 0x00, 0x72, 0x00, 0xee, + 0x00, 0x08, 0x4e, 0x65, 0x73, 0xee, 0x08, 0x45, + 0x52, 0x41, 0x30, 0x08, 0x45, 0x52, 0x41, 0x31, + 0x10, 0x4d, 0x65, 0x73, 0x6b, 0x65, 0x72, 0x65, + 0x6d, 0x0c, 0x54, 0x69, 0x6b, 0x69, 0x6d, 0x74, + 0x0a, 0x48, 0x69, 0x64, 0x61, 0x72, 0x0c, 0x54, + 0x61, 0x68, 0x73, 0x61, 0x73, 0x06, 0x54, 0x69, + 0x72, 0x0e, 0x59, 0x61, 0x6b, 0x61, 0x74, 0x69, + 0x74, 0x0e, 0x4d, 0x61, 0x67, 0x61, 0x62, 0x69, + 0x74, 0x0e, 0x4d, 0x69, 0x79, 0x61, 0x7a, 0x79, + 0x61, 0x0c, 0x47, 0x69, 0x6e, 0x62, 0x6f, 0x74, + 0x08, 0x53, 0x65, 0x6e, 0x65, 0x0a, 0x48, 0x61, + 0x6d, 0x6c, 0x65, 0x0c, 0x4e, 0x65, 0x68, 0x61, + 0x73, 0x61, 0x12, 0x50, 0x61, 0x67, 0x75, 0x6d, + 0x69, 0x65, 0x6e, 0x65, 0x04, 0x4d, 0xd6, 0x04, + 0x4d, 0x53, 0x05, 0x30, 0x01, 0xd6, 0x00, 0x05, + 0x30, 0x01, 0x53, 0x00, 0x1a, 0x4d, 0x69, 0x6c, + 0x61, 0x74, 0x74, 0x61, 0x6e, 0x20, 0xd6, 0x6e, + 0x63, 0x65, 0x1c, 0x4d, 0x69, 0x6c, 0x61, 0x74, + 0x74, 0x61, 0x6e, 0x20, 0x53, 0x6f, 0x6e, 0x72, + 0x61, 0x19, 0x30, 0x01, 0x73, 0x00, 0x61, 0x00, + 0x19, 0x20, 0x64, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0xd6, 0x00, 0x6e, 0x00, 0x63, 0x00, + 0x65, 0x00, 0x1b, 0x30, 0x01, 0x73, 0x00, 0x61, + 0x00, 0x19, 0x20, 0x64, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x53, 0x00, 0x6f, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x61, 0x00, 0x0b, 0x54, 0x00, + 0x69, 0x00, 0x5f, 0x01, 0x72, 0x00, 0x69, 0x00, + 0x0d, 0x48, 0x00, 0x65, 0x00, 0x5f, 0x01, 0x76, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x0c, 0x4b, 0x69, + 0x73, 0x6c, 0x65, 0x76, 0x0a, 0x54, 0x65, 0x76, + 0x65, 0x74, 0x0b, 0x5e, 0x01, 0x65, 0x00, 0x76, + 0x00, 0x61, 0x00, 0x74, 0x00, 0x0c, 0x56, 0x65, + 0x61, 0x64, 0x61, 0x72, 0x08, 0x41, 0x64, 0x61, + 0x72, 0x09, 0x30, 0x01, 0x79, 0x00, 0x61, 0x00, + 0x72, 0x00, 0x0a, 0x53, 0x69, 0x76, 0x61, 0x6e, + 0x0a, 0x54, 0x61, 0x6d, 0x75, 0x7a, 0x04, 0x41, + 0x76, 0x08, 0x45, 0x6c, 0x75, 0x6c, 0x0e, 0x41, + 0x64, 0x61, 0x72, 0x20, 0x49, 0x49, 0x04, 0x41, + 0x4d, 0x0e, 0x43, 0x68, 0x61, 0x69, 0x74, 0x72, + 0x61, 0x10, 0x56, 0x61, 0x69, 0x73, 0x61, 0x6b, + 0x68, 0x61, 0x10, 0x4a, 0x79, 0x61, 0x69, 0x73, + 0x74, 0x68, 0x61, 0x0c, 0x41, 0x73, 0x61, 0x64, + 0x68, 0x61, 0x0e, 0x53, 0x72, 0x61, 0x76, 0x61, + 0x6e, 0x61, 0x0c, 0x42, 0x68, 0x61, 0x64, 0x72, + 0x61, 0x0c, 0x41, 0x73, 0x76, 0x69, 0x6e, 0x61, + 0x0e, 0x4b, 0x61, 0x72, 0x74, 0x69, 0x6b, 0x61, + 0x14, 0x41, 0x67, 0x72, 0x61, 0x68, 0x61, 0x79, + 0x61, 0x6e, 0x61, 0x0a, 0x50, 0x61, 0x75, 0x73, + 0x61, 0x0a, 0x4d, 0x61, 0x67, 0x68, 0x61, 0x10, + 0x50, 0x68, 0x61, 0x6c, 0x67, 0x75, 0x6e, 0x61, + 0x08, 0x53, 0x61, 0x6b, 0x61, 0x10, 0x4d, 0x75, + 0x68, 0x61, 0x72, 0x72, 0x65, 0x6d, 0x0a, 0x53, + 0x61, 0x66, 0x65, 0x72, 0x16, 0x52, 0x65, 0x62, + 0x69, 0xfc, 0x6c, 0x65, 0x76, 0x76, 0x65, 0x6c, + 0x14, 0x52, 0x65, 0x62, 0x69, 0xfc, 0x6c, 0x61, + 0x68, 0x69, 0x72, 0x1c, 0x43, 0x65, 0x6d, 0x61, + 0x7a, 0x69, 0x79, 0x65, 0x6c, 0x65, 0x76, 0x76, + 0x65, 0x6c, 0x1a, 0x43, 0x65, 0x6d, 0x61, 0x7a, + 0x69, 0x79, 0x65, 0x6c, 0x61, 0x68, 0x69, 0x72, + 0x0a, 0x52, 0x65, 0x63, 0x65, 0x70, 0x0b, 0x5e, + 0x01, 0x61, 0x00, 0x62, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x0e, 0x52, 0x61, 0x6d, 0x61, 0x7a, 0x61, + 0x6e, 0x0d, 0x5e, 0x01, 0x65, 0x00, 0x76, 0x00, + 0x76, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x0e, 0x5a, + 0x69, 0x6c, 0x6b, 0x61, 0x64, 0x65, 0x10, 0x5a, + 0x69, 0x6c, 0x68, 0x69, 0x63, 0x63, 0x65, 0x0a, + 0x48, 0x69, 0x63, 0x72, 0x69, 0x1f, 0x54, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x36, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x13, 0x20, 0x36, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x21, 0x53, 0x00, 0x68, 0x00, 0x75, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1f, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, + 0x57, 0x00, 0x61, 0x00, 0x64, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x1f, 0x52, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x1d, 0x59, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1f, 0x4a, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6b, + 0x00, 0x61, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x2d, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x2d, 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x2b, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x2d, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x2a, 0x4a, 0x69, 0x6e, 0x67, 0x6f, + 0x2d, 0x6b, 0x65, 0x69, 0x75, 0x6e, 0x20, 0x28, + 0x37, 0x36, 0x37, 0x2d, 0x37, 0x37, 0x30, 0x29, + 0x1d, 0x48, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x37, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, + 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, 0x64, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, 0x4b, + 0x00, 0x4d, 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x38, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4a, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x61, 0x00, + 0x6a, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, + 0x53, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x20, 0x54, + 0x65, 0x6e, 0x2d, 0x61, 0x6e, 0x20, 0x28, 0x38, + 0x35, 0x37, 0x2d, 0x38, 0x35, 0x39, 0x29, 0x1f, + 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x47, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, + 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1d, 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, + 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x34, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1b, 0x4c, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, + 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x1d, 0x41, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x1d, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x4a, 0x00, 0x69, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x29, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x27, 0x4a, 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, + 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4c, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x61, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x25, 0x4a, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x24, 0x54, 0x65, 0x6e, 0x2d, 0x65, + 0x69, 0x20, 0x28, 0x31, 0x31, 0x31, 0x30, 0x2d, + 0x31, 0x31, 0x31, 0x33, 0x29, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, + 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x4d, 0x01, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x45, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x6a, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x48, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, + 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4c, + 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6d, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x4a, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x59, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x75, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x29, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x29, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x4a, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x21, 0x4a, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x27, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x75, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x29, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x74, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x29, 0x52, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x4e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, + 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x61, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, + 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x27, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x45, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, 0x69, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x27, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x27, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x61, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x41, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x4d, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x0a, 0x4d, 0x65, 0x69, 0x6a, 0x69, 0x0d, 0x54, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x0b, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x0c, 0x48, + 0x65, 0x69, 0x73, 0x65, 0x69, 0x12, 0x46, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x64, 0x69, 0x6e, 0x15, + 0x4f, 0x00, 0x72, 0x00, 0x64, 0x00, 0x69, 0x00, + 0x62, 0x00, 0x65, 0x00, 0x68, 0x00, 0x65, 0x00, + 0x5f, 0x01, 0x74, 0x00, 0x0c, 0x48, 0x6f, 0x72, + 0x64, 0x61, 0x64, 0x0c, 0x4d, 0x6f, 0x72, 0x64, + 0x61, 0x64, 0x11, 0x5e, 0x01, 0x65, 0x00, 0x68, + 0x00, 0x72, 0x00, 0x69, 0x00, 0x76, 0x00, 0x65, + 0x00, 0x72, 0x00, 0x08, 0x4d, 0x65, 0x68, 0x72, + 0x08, 0x41, 0x62, 0x61, 0x6e, 0x08, 0x41, 0x7a, + 0x65, 0x72, 0x06, 0x44, 0x65, 0x79, 0x0c, 0x42, + 0x65, 0x68, 0x6d, 0x65, 0x6e, 0x0c, 0x45, 0x73, + 0x66, 0x65, 0x6e, 0x64, 0x04, 0x41, 0x50, 0x1a, + 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, 0x52, + 0x2e, 0x4f, 0x2e, 0x43, 0x2e, 0x0c, 0x4d, 0x69, + 0x6e, 0x67, 0x75, 0x6f, 0x12, 0x63, 0x61, 0x6c, + 0x65, 0x6e, 0x64, 0x61, 0x72, 0x73, 0x08, 0x64, + 0x61, 0x74, 0x65, 0x08, 0x6c, 0x61, 0x74, 0x6e, + 0x04, 0x6e, 0x75, 0x10, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, + 0x74, 0x65, 0x72, 0x6e, 0x26, 0x7b, 0x6d, 0x69, + 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0x1e, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, + 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, + 0x0e, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, + 0x26, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0xa0, 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x63, 0x79, 0x7d, 0x3c, 0x7b, 0x6d, 0x69, + 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0xa0, 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x79, 0x7d, 0x10, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x63, 0x79, 0x2a, 0x7b, 0x70, 0x65, + 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, + 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0x40, 0x7b, 0x6d, 0x69, 0x6e, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x70, + 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, + 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0x0e, 0x70, 0x65, 0x72, 0x63, + 0x65, 0x6e, 0x74, 0x10, 0x70, 0x61, 0x74, 0x74, + 0x65, 0x72, 0x6e, 0x73, 0x02, 0x2c, 0x02, 0x2e, + 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x06, 0x4e, + 0x61, 0x4e, 0x06, 0x6e, 0x61, 0x6e, 0x02, 0x2b, + 0x10, 0x70, 0x6c, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x02, 0x2d, 0x12, 0x6d, 0x69, 0x6e, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, 0x25, 0x16, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, + 0x69, 0x67, 0x6e, 0x03, 0x1e, 0x22, 0x10, 0x69, + 0x6e, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x0e, + 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x06, + 0x41, 0x55, 0x24, 0x06, 0x41, 0x55, 0x44, 0x04, + 0x52, 0x24, 0x06, 0x42, 0x52, 0x4c, 0x06, 0x43, + 0x41, 0x24, 0x06, 0x43, 0x41, 0x44, 0x06, 0x43, + 0x4e, 0xa5, 0x06, 0x43, 0x4e, 0x59, 0x03, 0xac, + 0x20, 0x06, 0x45, 0x55, 0x52, 0x02, 0xa3, 0x06, + 0x47, 0x42, 0x50, 0x06, 0x48, 0x4b, 0x24, 0x06, + 0x48, 0x4b, 0x44, 0x03, 0xaa, 0x20, 0x06, 0x49, + 0x4c, 0x53, 0x03, 0xb9, 0x20, 0x06, 0x49, 0x4e, + 0x52, 0x02, 0xa5, 0x06, 0x4a, 0x50, 0x59, 0x03, + 0xa9, 0x20, 0x06, 0x4b, 0x52, 0x57, 0x06, 0x4d, + 0x58, 0x24, 0x06, 0x4d, 0x58, 0x4e, 0x06, 0x4e, + 0x5a, 0x24, 0x06, 0x4e, 0x5a, 0x44, 0x03, 0x3f, + 0x0e, 0x06, 0x54, 0x48, 0x42, 0x03, 0xba, 0x20, + 0x06, 0x54, 0x52, 0x59, 0x06, 0x4e, 0x54, 0x24, + 0x06, 0x54, 0x57, 0x44, 0x02, 0x24, 0x06, 0x55, + 0x53, 0x44, 0x03, 0xab, 0x20, 0x06, 0x56, 0x4e, + 0x44, 0x08, 0x46, 0x43, 0x46, 0x41, 0x06, 0x58, + 0x41, 0x46, 0x06, 0x45, 0x43, 0x24, 0x06, 0x58, + 0x43, 0x44, 0x06, 0x43, 0x46, 0x41, 0x06, 0x58, + 0x4f, 0x46, 0x08, 0x43, 0x46, 0x50, 0x46, 0x06, + 0x58, 0x50, 0x46, 0x14, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x52, 0x6e, + 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, + 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, + 0x64, 0x61, 0x74, 0x61, 0x2f, 0x6a, 0x73, 0x6f, + 0x6e, 0x70, 0x2f, 0x74, 0x72, 0x2e, 0x6a, 0x73, + 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, + 0x00, 0x27, 0x00, 0x89, 0x01, 0x86, 0x6b, 0x01, + 0xa0, 0x01, 0x00, 0x00, 0x00, 0x39, 0xd0, 0x00, + 0x00, 0x00, 0x43, 0xd1, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd2, 0x00, 0x00, 0x00, 0x4d, 0xd3, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd4, 0x00, 0x00, 0x00, + 0x04, 0xd5, 0x00, 0x00, 0x00, 0x04, 0xd6, 0x00, + 0x00, 0x00, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x04, + 0xd8, 0x00, 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, + 0x00, 0x04, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdb, + 0x00, 0x00, 0x00, 0x04, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0xdd, 0x00, 0x00, 0x00, 0x04, 0xde, 0x00, + 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, 0x04, + 0xe0, 0x00, 0x00, 0x00, 0x04, 0xe1, 0x00, 0x00, + 0x00, 0x04, 0xe2, 0x00, 0x00, 0x00, 0x26, 0x0f, + 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x0a, 0x4d, + 0xe4, 0x00, 0x00, 0x00, 0x09, 0x4d, 0xe5, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, + 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x04, 0xec, + 0x00, 0x00, 0x00, 0x4d, 0xed, 0x00, 0x00, 0x00, + 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, 0xef, 0x00, + 0x00, 0x00, 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, + 0xf1, 0x00, 0x00, 0x00, 0x04, 0xf2, 0x00, 0x00, + 0x00, 0x4d, 0xf3, 0x00, 0x00, 0x00, 0x04, 0xf4, + 0x00, 0x00, 0x00, 0x4d, 0xf5, 0x00, 0x00, 0x00, + 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, 0xf7, 0x00, + 0x00, 0x00, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, + 0xf9, 0x00, 0x00, 0x00, 0x04, 0xfa, 0x00, 0x00, + 0x00, 0x4d, 0xfb, 0x00, 0x00, 0x00, 0x04, 0xfc, + 0x00, 0x00, 0x00, 0x4d, 0xfd, 0x00, 0x00, 0x00, + 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, 0xff, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, + 0x01, 0x01, 0x00, 0x00, 0x04, 0x02, 0x01, 0x00, + 0x00, 0x4d, 0x03, 0x01, 0x00, 0x00, 0x04, 0x04, + 0x01, 0x00, 0x00, 0x4d, 0x05, 0x01, 0x00, 0x00, + 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, 0x07, 0x01, + 0x00, 0x00, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, + 0x09, 0x01, 0x00, 0x00, 0x04, 0x0a, 0x01, 0x00, + 0x00, 0x4d, 0x0b, 0x01, 0x00, 0x00, 0x04, 0x0c, + 0x01, 0x00, 0x00, 0x4d, 0x0d, 0x01, 0x00, 0x00, + 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, 0x0f, 0x01, + 0x00, 0x00, 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, + 0x11, 0x01, 0x00, 0x00, 0x04, 0x12, 0x01, 0x00, + 0x00, 0x4d, 0x13, 0x01, 0x00, 0x00, 0x04, 0x14, + 0x01, 0x00, 0x00, 0x4d, 0x15, 0x01, 0x00, 0x00, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, 0x17, 0x01, + 0x00, 0x00, 0x04, 0x18, 0x01, 0x00, 0x00, 0x4d, + 0x19, 0x01, 0x00, 0x00, 0x04, 0x1a, 0x01, 0x00, + 0x00, 0x4d, 0x1b, 0x01, 0x00, 0x00, 0x04, 0x1c, + 0x01, 0x00, 0x00, 0x4d, 0x1d, 0x01, 0x00, 0x00, + 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, 0x1f, 0x01, + 0x00, 0x00, 0x04, 0x20, 0x01, 0x00, 0x00, 0x4d, + 0x21, 0x01, 0x00, 0x00, 0x04, 0x22, 0x01, 0x00, + 0x00, 0x4d, 0x23, 0x01, 0x00, 0x00, 0x04, 0x24, + 0x01, 0x00, 0x00, 0x4d, 0x25, 0x01, 0x00, 0x00, + 0x04, 0x24, 0x01, 0x00, 0x00, 0x4d, 0x26, 0x01, + 0x00, 0x00, 0x04, 0x27, 0x01, 0x00, 0x00, 0x4d, + 0x27, 0x01, 0x00, 0x00, 0x04, 0x28, 0x01, 0x00, + 0x00, 0x4d, 0x29, 0x01, 0x00, 0x00, 0x04, 0x2a, + 0x01, 0x00, 0x00, 0x4d, 0x2b, 0x01, 0x00, 0x00, + 0x04, 0x2c, 0x01, 0x00, 0x00, 0x4d, 0x2d, 0x01, + 0x00, 0x00, 0x04, 0x2e, 0x01, 0x00, 0x00, 0x4d, + 0x2f, 0x01, 0x00, 0x00, 0x04, 0x30, 0x01, 0x00, + 0x00, 0x4d, 0x31, 0x01, 0x00, 0x00, 0x04, 0x32, + 0x01, 0x00, 0x00, 0x4d, 0x33, 0x01, 0x00, 0x00, + 0x04, 0x34, 0x01, 0x00, 0x00, 0x4d, 0x35, 0x01, + 0x00, 0x00, 0x04, 0x36, 0x01, 0x00, 0x00, 0x4d, + 0x37, 0x01, 0x00, 0x00, 0x04, 0x38, 0x01, 0x00, + 0x00, 0x4d, 0x39, 0x01, 0x00, 0x00, 0x04, 0x3a, + 0x01, 0x00, 0x00, 0x4d, 0x3b, 0x01, 0x00, 0x00, + 0x4d, 0x3c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x3d, + 0x01, 0x00, 0x00, 0x4d, 0x3e, 0x01, 0x00, 0x00, + 0x04, 0x3f, 0x01, 0x00, 0x00, 0x4d, 0x40, 0x01, + 0x00, 0x00, 0x04, 0x41, 0x01, 0x00, 0x00, 0x4d, + 0x33, 0x01, 0x00, 0x00, 0x04, 0x42, 0x01, 0x00, + 0x00, 0x4d, 0x2b, 0x01, 0x00, 0x00, 0x4d, 0x43, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x44, 0x01, 0x00, + 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, 0x04, 0x46, + 0x01, 0x00, 0x00, 0x4d, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x09, 0x01, + 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, + 0x05, 0x01, 0x00, 0x00, 0x4d, 0x48, 0x01, 0x00, + 0x00, 0x4d, 0x49, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x0b, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0xed, 0x00, 0x00, 0x00, 0x04, 0xed, + 0x00, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x7d, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, + 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, + 0x01, 0x00, 0x00, 0x4d, 0x83, 0x01, 0x00, 0x00, + 0x4d, 0xd5, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x00, 0xbe, 0x01, 0xbe, 0x02, 0xbe, 0x03, 0xbe, + 0x04, 0xbe, 0x05, 0xbe, 0x06, 0xbe, 0x07, 0xbe, + 0x08, 0xbe, 0x09, 0xbe, 0x0a, 0xbe, 0x0b, 0x26, + 0x0c, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, + 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, + 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, + 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, + 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, + 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, + 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, + 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, + 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, + 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, + 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, + 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, + 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, + 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7c, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, + 0x4d, 0x83, 0x01, 0x00, 0x00, 0x4d, 0xd6, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x0c, 0xbe, 0x0d, + 0xbe, 0x0e, 0xbe, 0x0f, 0xbe, 0x10, 0xbe, 0x11, + 0xbe, 0x12, 0xbe, 0x13, 0xbe, 0x14, 0xbe, 0x15, + 0xbe, 0x16, 0xbe, 0x17, 0xbe, 0x18, 0x26, 0x0d, + 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, 0x90, + 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, + 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, + 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, + 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, + 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, + 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, + 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, + 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, + 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, + 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, + 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, + 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, + 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, + 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, + 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x7c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x9d, 0x01, + 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x4d, 0x80, + 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, + 0x4d, 0x82, 0x01, 0x00, 0x00, 0x4d, 0x83, 0x01, + 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x19, 0xbe, 0x1a, 0xbe, 0x1b, 0xbe, + 0x1c, 0xbe, 0x1d, 0xbe, 0x1e, 0xbe, 0x1f, 0xbe, + 0x20, 0xbe, 0x21, 0xbe, 0x22, 0xbe, 0x23, 0xbe, + 0x24, 0x26, 0x0c, 0x00, 0x4d, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, + 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, + 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, + 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, + 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, + 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, + 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, + 0x04, 0x8f, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x84, 0x01, + 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, + 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, + 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, + 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, + 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, + 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, + 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, + 0x04, 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, + 0x00, 0x00, 0x4d, 0x83, 0x01, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x25, + 0xbe, 0x26, 0xbe, 0x27, 0xbe, 0x28, 0xbe, 0x29, + 0xbe, 0x2a, 0xbe, 0x2b, 0xbe, 0x2c, 0xbe, 0x2d, + 0xbe, 0x2e, 0xbe, 0x2f, 0xbe, 0x30, 0xbe, 0x31, + 0x26, 0x0d, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, + 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, + 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, + 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, + 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, + 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, + 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, + 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, + 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, + 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, + 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, + 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, + 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, + 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, + 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, + 0x04, 0x9e, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7e, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x7f, 0x01, 0x00, 0x00, + 0x4d, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, + 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, 0x4d, + 0x83, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x32, 0xbe, 0x33, 0xbe, + 0x34, 0xbe, 0x35, 0xbe, 0x36, 0xbe, 0x37, 0xbe, + 0x38, 0xbe, 0x39, 0xbe, 0x3a, 0xbe, 0x3b, 0xbe, + 0x3c, 0xbe, 0x3d, 0xbe, 0x3e, 0x26, 0x0d, 0x00, + 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, + 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, + 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, + 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, + 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, + 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, + 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, + 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, + 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x26, 0x0d, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x9f, + 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, + 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, + 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, + 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, + 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, + 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, + 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, + 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7c, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x9d, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x9d, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x4d, 0x80, + 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, + 0x4d, 0x82, 0x01, 0x00, 0x00, 0x4d, 0x83, 0x01, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x3f, 0xbe, 0x40, 0xbe, 0x41, 0xbe, + 0x42, 0xbe, 0x43, 0xbe, 0x44, 0xbe, 0x45, 0xbe, + 0x46, 0xbe, 0x47, 0xbe, 0x48, 0xbe, 0x49, 0xbe, + 0x4a, 0x26, 0x0c, 0x00, 0x4d, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, + 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, + 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, + 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, + 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, + 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, + 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, + 0x04, 0x8f, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x84, 0x01, + 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, + 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, + 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, + 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, + 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, + 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, + 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x9d, + 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, + 0x9e, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x4d, + 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, + 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, 0x4d, 0x83, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0xed, 0x00, 0x00, 0x00, 0x04, + 0xed, 0x00, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x69, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7c, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xac, 0x01, 0x00, 0x00, + 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, + 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, 0x26, + 0x04, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, + 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, + 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, + 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, + 0x04, 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, + 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, 0x26, + 0x04, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x7e, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, 0x04, + 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, + 0x00, 0x4d, 0x83, 0x01, 0x00, 0x00, 0x4d, 0xd4, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x4b, 0xbe, + 0x4c, 0xbe, 0x4d, 0xbe, 0x4e, 0xbe, 0x4f, 0xbe, + 0x50, 0xbe, 0x51, 0xbe, 0x52, 0xbe, 0x53, 0xbe, + 0x54, 0xbe, 0x55, 0xbe, 0x56, 0xbe, 0x57, 0xbe, + 0x58, 0x26, 0x0e, 0x00, 0x4d, 0x50, 0x01, 0x00, + 0x00, 0x04, 0xb4, 0x01, 0x00, 0x00, 0x04, 0xb5, + 0x01, 0x00, 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, + 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, + 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, 0x04, + 0xba, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, + 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, + 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, + 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, 0x26, + 0x0e, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xb4, 0x01, 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, + 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb7, + 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, + 0x04, 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, + 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, 0x04, 0xbe, + 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, + 0x04, 0xc0, 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xc1, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, + 0xc1, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x7f, 0x01, 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, + 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, + 0x01, 0x00, 0x00, 0x4d, 0x83, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x59, 0xbe, 0x5a, 0xbe, 0x5b, 0xbe, 0x5c, 0xbe, + 0x5d, 0xbe, 0x5e, 0xbe, 0x5f, 0xbe, 0x60, 0xbe, + 0x61, 0xbe, 0x62, 0xbe, 0x63, 0xbe, 0x64, 0x26, + 0x0c, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, + 0xc2, 0x01, 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, + 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, 0x04, 0xc5, + 0x01, 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, 0x00, + 0x04, 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, 0x01, + 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, 0x04, + 0xca, 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, + 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, 0x00, + 0x04, 0xc3, 0x01, 0x00, 0x00, 0x04, 0xc4, 0x01, + 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, 0x04, + 0xc6, 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, + 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, 0xc9, + 0x01, 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, + 0x04, 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, 0x01, + 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7c, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xce, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x50, 0x01, 0x00, + 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xce, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x4d, 0x80, + 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, + 0x4d, 0x82, 0x01, 0x00, 0x00, 0x4d, 0x83, 0x01, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x65, 0xbe, 0x66, 0xbe, 0x67, 0xbe, + 0x68, 0xbe, 0x69, 0xbe, 0x6a, 0xbe, 0x6b, 0xbe, + 0x6c, 0xbe, 0x6d, 0xbe, 0x6e, 0xbe, 0x6f, 0xbe, + 0x70, 0x26, 0x0c, 0x00, 0x4d, 0x50, 0x01, 0x00, + 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, + 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, + 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, + 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, + 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, + 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, 0xd8, + 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, + 0x04, 0xda, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xcf, 0x01, + 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, + 0xd1, 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, + 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, + 0x01, 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, + 0x04, 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, + 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, + 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xdb, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x50, + 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xdb, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7e, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x7f, 0x01, 0x00, 0x00, + 0x4d, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, + 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, 0x4d, + 0x83, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x71, 0xbe, 0x72, 0xbe, + 0x73, 0xbe, 0x74, 0xbe, 0x75, 0xbe, 0x76, 0xbe, + 0x77, 0xbe, 0x78, 0xbe, 0x79, 0xbe, 0x7a, 0xbe, + 0x7b, 0xbe, 0x7c, 0x26, 0x0c, 0x00, 0x4d, 0x50, + 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, + 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, + 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, + 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, + 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, + 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, + 0x04, 0xd8, 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, + 0x00, 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, + 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, 0x04, 0xd2, + 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, + 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, 0xd5, 0x01, + 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, 0x04, + 0xd7, 0x01, 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, + 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xdb, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x7e, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, 0x04, + 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, + 0x00, 0x4d, 0x83, 0x01, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x03, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0xed, 0x00, + 0x00, 0x00, 0x04, 0xed, 0x00, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xdc, + 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, + 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, + 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, + 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, + 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, + 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, + 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, + 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, + 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, + 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, + 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, + 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, + 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, + 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, + 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, + 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, + 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, + 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, + 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, + 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, 0x26, 0x20, + 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x4d, 0x20, + 0x00, 0x00, 0x80, 0x04, 0xfd, 0x01, 0x00, 0x00, + 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0xfe, 0x01, + 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, + 0xff, 0x01, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, + 0x80, 0x04, 0x00, 0x02, 0x00, 0x00, 0x4d, 0x24, + 0x00, 0x00, 0x80, 0x04, 0x01, 0x02, 0x00, 0x00, + 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0x02, 0x02, + 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, + 0x03, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, + 0x80, 0x04, 0x04, 0x02, 0x00, 0x00, 0x4d, 0x28, + 0x00, 0x00, 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, + 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, + 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, + 0x07, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, + 0x80, 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, 0x2c, + 0x00, 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, + 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, + 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, + 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, + 0x80, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x30, + 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, + 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, + 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, + 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, + 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x34, + 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, + 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, + 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, + 0x13, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, + 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x38, + 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, + 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, + 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, + 0x17, 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, + 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x3c, + 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, + 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, + 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, + 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, + 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x40, + 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, + 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, + 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, + 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, + 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x44, + 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, + 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, + 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, + 0x23, 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, + 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x48, + 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, + 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, + 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, + 0x27, 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, + 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x4c, + 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, + 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, + 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, + 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, + 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x50, + 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, + 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, + 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, + 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, + 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x54, + 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, + 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, + 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, + 0x33, 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, + 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x58, + 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, + 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, + 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, + 0x37, 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, + 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x5c, + 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, + 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, + 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, + 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, + 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x60, + 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, + 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, + 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, + 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, + 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x64, + 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, + 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, + 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, + 0x43, 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, + 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x68, + 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, + 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, + 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, + 0x47, 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, + 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x6c, + 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, + 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, + 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, + 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, + 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x70, + 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, + 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, + 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, + 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, + 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x74, + 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, + 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, + 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, + 0x53, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, + 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x78, + 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, + 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, + 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, + 0x57, 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, + 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x7c, + 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, + 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, + 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, + 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, + 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x80, + 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, + 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, + 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, + 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, + 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x84, + 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, + 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, + 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, + 0x63, 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, + 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x88, + 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, + 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, + 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, + 0x67, 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, + 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x8c, + 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, + 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, + 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, + 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, + 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x90, + 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, + 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, + 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, + 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, + 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x94, + 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, + 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, + 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, + 0x73, 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, + 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x98, + 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, + 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, + 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, + 0x77, 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, + 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x9c, + 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, + 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, + 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, + 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, + 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0xa0, + 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, + 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, + 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, + 0x7f, 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, + 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0xa4, + 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, + 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, + 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, + 0x83, 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, + 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0xa8, + 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, + 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, + 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, + 0x87, 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, + 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0xac, + 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, + 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, + 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, + 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, + 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xb0, + 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, + 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, + 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, + 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, + 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xb4, + 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, + 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, + 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, + 0x93, 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, + 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xb8, + 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, + 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, + 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, + 0x97, 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, + 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xbc, + 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, + 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, + 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, + 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, + 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xc0, + 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, + 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, + 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, + 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, + 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xc4, + 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, + 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, + 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, + 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, + 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xc8, + 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, + 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, + 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, + 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, + 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xcc, + 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, + 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, + 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, + 0xab, 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, + 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xd0, + 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, + 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, + 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, + 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, + 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xd4, + 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, + 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, + 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, + 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, + 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, + 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, + 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, + 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, + 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, + 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xe4, + 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, + 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, + 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, + 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x80, 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x80, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, + 0x03, 0x01, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x80, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, 0xdc, + 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, + 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, + 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, + 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, + 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, + 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, + 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, + 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, + 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, + 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, + 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, + 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, + 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, + 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, + 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, + 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, + 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, + 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, + 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, + 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, 0x26, 0x20, + 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x4d, 0x20, + 0x00, 0x00, 0x80, 0x04, 0xfd, 0x01, 0x00, 0x00, + 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0xfe, 0x01, + 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, + 0xff, 0x01, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, + 0x80, 0x04, 0x00, 0x02, 0x00, 0x00, 0x4d, 0x24, + 0x00, 0x00, 0x80, 0x04, 0x01, 0x02, 0x00, 0x00, + 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0x02, 0x02, + 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, + 0x03, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, + 0x80, 0x04, 0x04, 0x02, 0x00, 0x00, 0x4d, 0x28, + 0x00, 0x00, 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, + 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, + 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, + 0x07, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, + 0x80, 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, 0x2c, + 0x00, 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, + 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, + 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, + 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, + 0x80, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x30, + 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, + 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, + 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, + 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, + 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x34, + 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, + 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, + 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, + 0x13, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, + 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x38, + 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, + 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, + 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, + 0x17, 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, + 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x3c, + 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, + 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, + 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, + 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, + 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x40, + 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, + 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, + 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, + 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, + 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x44, + 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, + 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, + 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, + 0x23, 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, + 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x48, + 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, + 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, + 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, + 0x27, 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, + 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x4c, + 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, + 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, + 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, + 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, + 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x50, + 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, + 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, + 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, + 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, + 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x54, + 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, + 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, + 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, + 0x33, 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, + 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x58, + 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, + 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, + 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, + 0x37, 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, + 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x5c, + 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, + 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, + 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, + 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, + 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x60, + 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, + 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, + 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, + 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, + 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x64, + 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, + 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, + 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, + 0x43, 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, + 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x68, + 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, + 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, + 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, + 0x47, 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, + 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x6c, + 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, + 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, + 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, + 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, + 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x70, + 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, + 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, + 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, + 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, + 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x74, + 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, + 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, + 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, + 0x53, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, + 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x78, + 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, + 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, + 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, + 0x57, 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, + 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x7c, + 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, + 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, + 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, + 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, + 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x80, + 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, + 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, + 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, + 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, + 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x84, + 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, + 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, + 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, + 0x63, 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, + 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x88, + 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, + 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, + 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, + 0x67, 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, + 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x8c, + 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, + 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, + 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, + 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, + 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x90, + 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, + 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, + 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, + 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, + 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x94, + 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, + 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, + 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, + 0x73, 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, + 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x98, + 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, + 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, + 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, + 0x77, 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, + 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x9c, + 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, + 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, + 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, + 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, + 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0xa0, + 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, + 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, + 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, + 0x7f, 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, + 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0xa4, + 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, + 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, + 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, + 0x83, 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, + 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0xa8, + 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, + 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, + 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, + 0x87, 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, + 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0xac, + 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, + 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, + 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, + 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, + 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xb0, + 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, + 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, + 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, + 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, + 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xb4, + 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, + 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, + 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, + 0x93, 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, + 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xb8, + 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, + 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, + 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, + 0x97, 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, + 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xbc, + 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, + 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, + 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, + 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, + 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xc0, + 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, + 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, + 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, + 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, + 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xc4, + 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, + 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, + 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, + 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, + 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xc8, + 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, + 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, + 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, + 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, + 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xcc, + 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, + 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, + 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, + 0xab, 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, + 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xd0, + 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, + 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, + 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, + 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, + 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xd4, + 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, + 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, + 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, + 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, + 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, + 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, + 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, + 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, + 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, + 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xe4, + 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, + 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, + 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, + 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, + 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, + 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, + 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x80, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xdc, + 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, 0x00, + 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, 0x01, + 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, 0x04, + 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, 0x00, + 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, 0xe4, + 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, 0x00, + 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, 0x01, + 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, 0x04, + 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, 0x00, + 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, 0xec, + 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, 0x00, + 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, 0x01, + 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x04, + 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, + 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, 0xf4, + 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, 0x00, + 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, 0x01, + 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x04, + 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, 0x00, + 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, 0x26, 0x20, + 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x4d, 0x20, + 0x00, 0x00, 0x80, 0x04, 0xfd, 0x01, 0x00, 0x00, + 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0xfe, 0x01, + 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, + 0xff, 0x01, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, + 0x80, 0x04, 0x00, 0x02, 0x00, 0x00, 0x4d, 0x24, + 0x00, 0x00, 0x80, 0x04, 0x01, 0x02, 0x00, 0x00, + 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0x02, 0x02, + 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, + 0x03, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, + 0x80, 0x04, 0x04, 0x02, 0x00, 0x00, 0x4d, 0x28, + 0x00, 0x00, 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, + 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, + 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, + 0x07, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, + 0x80, 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, 0x2c, + 0x00, 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, + 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, + 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, + 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, + 0x80, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x30, + 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, + 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, + 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, + 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, + 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x34, + 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, + 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, + 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, + 0x13, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, + 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x38, + 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, + 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, + 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, + 0x17, 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, + 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x3c, + 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, + 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, + 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, + 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, + 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x40, + 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, + 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, + 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, + 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, + 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x44, + 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, + 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, + 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, + 0x23, 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, + 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x48, + 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, + 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, + 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, + 0x27, 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, + 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x4c, + 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, + 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, + 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, + 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, + 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x50, + 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, + 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, + 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, + 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, + 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x54, + 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, + 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, + 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, + 0x33, 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, + 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x58, + 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, + 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, + 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, + 0x37, 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, + 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x5c, + 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, + 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, + 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, + 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, + 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x60, + 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, + 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, + 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, + 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, + 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x64, + 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, + 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, + 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, + 0x43, 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, + 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x68, + 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, + 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, + 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, + 0x47, 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, + 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x6c, + 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, + 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, + 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, + 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, + 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x70, + 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, + 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, + 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, + 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, + 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x74, + 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, + 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, + 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, + 0x53, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, + 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x78, + 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, + 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, + 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, + 0x57, 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, + 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x7c, + 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, + 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, + 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, + 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, + 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x80, + 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, + 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, + 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, + 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, + 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x84, + 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, + 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, + 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, + 0x63, 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, + 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x88, + 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, + 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, + 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, + 0x67, 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, + 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x8c, + 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, + 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, + 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, + 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, + 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x90, + 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, + 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, + 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, + 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, + 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x94, + 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, + 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, + 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, + 0x73, 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, + 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x98, + 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, + 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, + 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, + 0x77, 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, + 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x9c, + 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, + 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, + 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, + 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, + 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0xa0, + 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, + 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, + 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, + 0x7f, 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, + 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0xa4, + 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, + 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, + 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, + 0x83, 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, + 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0xa8, + 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, + 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, + 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, + 0x87, 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, + 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0xac, + 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, + 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, + 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, + 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, + 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xb0, + 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, + 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, + 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, + 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, + 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xb4, + 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, + 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, + 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, + 0x93, 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, + 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xb8, + 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, + 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, + 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, + 0x97, 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, + 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xbc, + 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, + 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, + 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, + 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, + 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xc0, + 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, + 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, + 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, + 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, + 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xc4, + 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, + 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, + 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, + 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, + 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xc8, + 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, + 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, + 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, + 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, + 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xcc, + 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, + 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, + 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, + 0xab, 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, + 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xd0, + 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, + 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, + 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, + 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, + 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xd4, + 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, + 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, + 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, + 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, + 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, + 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, + 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, + 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, + 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, + 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xe4, + 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, + 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, + 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, + 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, + 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, + 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, + 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x80, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7e, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, + 0x4d, 0x83, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x7d, 0xbe, 0x7e, + 0xbe, 0x7f, 0xbe, 0x80, 0xbe, 0x81, 0xbe, 0x82, + 0xbe, 0x83, 0xbe, 0x84, 0xbe, 0x85, 0xbe, 0x86, + 0xbe, 0x87, 0xbe, 0x88, 0x26, 0x0c, 0x00, 0x4d, + 0x50, 0x01, 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x04, 0xca, + 0x02, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, + 0x04, 0xcb, 0x02, 0x00, 0x00, 0x04, 0xcc, 0x02, + 0x00, 0x00, 0x04, 0xcd, 0x02, 0x00, 0x00, 0x04, + 0xce, 0x02, 0x00, 0x00, 0x04, 0xcf, 0x02, 0x00, + 0x00, 0x04, 0xd0, 0x02, 0x00, 0x00, 0x04, 0xd1, + 0x02, 0x00, 0x00, 0x04, 0xd2, 0x02, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xc8, 0x02, 0x00, 0x00, 0x04, 0xc9, 0x02, + 0x00, 0x00, 0x04, 0xca, 0x02, 0x00, 0x00, 0x04, + 0xa3, 0x01, 0x00, 0x00, 0x04, 0xcb, 0x02, 0x00, + 0x00, 0x04, 0xcc, 0x02, 0x00, 0x00, 0x04, 0xcd, + 0x02, 0x00, 0x00, 0x04, 0xce, 0x02, 0x00, 0x00, + 0x04, 0xcf, 0x02, 0x00, 0x00, 0x04, 0xd0, 0x02, + 0x00, 0x00, 0x04, 0xd1, 0x02, 0x00, 0x00, 0x04, + 0xd2, 0x02, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xd3, 0x02, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x04, 0xd3, + 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xd3, 0x02, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x4d, 0x80, 0x01, 0x00, 0x00, + 0x04, 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, + 0x00, 0x00, 0x4d, 0x83, 0x01, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, + 0x03, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0xed, + 0x00, 0x00, 0x00, 0x04, 0xed, 0x00, 0x00, 0x00, + 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, + 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xd4, 0x02, 0x00, 0x00, 0x04, 0xd5, 0x02, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x50, 0x01, 0x00, + 0x00, 0x04, 0xd4, 0x02, 0x00, 0x00, 0x04, 0xd5, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xd4, 0x02, 0x00, 0x00, + 0x04, 0xd5, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x7e, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x7f, 0x01, 0x00, 0x00, + 0x4d, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, + 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, 0x4d, + 0x83, 0x01, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x00, 0x4d, 0xd6, 0x02, 0x00, 0x00, 0x4d, 0xd7, + 0x02, 0x00, 0x00, 0x0b, 0x04, 0xd8, 0x02, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xd9, 0x02, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0xda, 0x02, 0x00, 0x00, + 0x4d, 0xdb, 0x02, 0x00, 0x00, 0x04, 0xdc, 0x02, + 0x00, 0x00, 0x4d, 0xdd, 0x02, 0x00, 0x00, 0x4d, + 0xde, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xdf, 0x02, + 0x00, 0x00, 0x4d, 0xdb, 0x02, 0x00, 0x00, 0x04, + 0xe0, 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x02, 0x00, + 0x00, 0x4d, 0xe1, 0x02, 0x00, 0x00, 0x0b, 0x04, + 0xe2, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x02, 0x00, + 0x00, 0x04, 0xe3, 0x02, 0x00, 0x00, 0x4d, 0xdd, + 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x02, 0x00, 0x00, + 0x4d, 0xe5, 0x02, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0xe6, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x02, 0x00, + 0x00, 0x04, 0xe7, 0x02, 0x00, 0x00, 0x4d, 0xe8, + 0x02, 0x00, 0x00, 0x04, 0xe9, 0x02, 0x00, 0x00, + 0x4d, 0xea, 0x02, 0x00, 0x00, 0x04, 0xeb, 0x02, + 0x00, 0x00, 0x4d, 0xec, 0x02, 0x00, 0x00, 0x04, + 0xed, 0x02, 0x00, 0x00, 0x4d, 0xee, 0x02, 0x00, + 0x00, 0x04, 0xef, 0x02, 0x00, 0x00, 0x4d, 0xf0, + 0x02, 0x00, 0x00, 0x04, 0xf1, 0x02, 0x00, 0x00, + 0x4d, 0xf2, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x02, + 0x00, 0x00, 0x4d, 0xf3, 0x02, 0x00, 0x00, 0x0b, + 0x04, 0xf4, 0x02, 0x00, 0x00, 0x4d, 0xf5, 0x02, + 0x00, 0x00, 0x04, 0xf6, 0x02, 0x00, 0x00, 0x4d, + 0xf7, 0x02, 0x00, 0x00, 0x04, 0xf8, 0x02, 0x00, + 0x00, 0x4d, 0xf9, 0x02, 0x00, 0x00, 0x04, 0xfa, + 0x02, 0x00, 0x00, 0x4d, 0xfb, 0x02, 0x00, 0x00, + 0x04, 0xfc, 0x02, 0x00, 0x00, 0x4d, 0xfd, 0x02, + 0x00, 0x00, 0x04, 0xfe, 0x02, 0x00, 0x00, 0x4d, + 0xff, 0x02, 0x00, 0x00, 0x04, 0x00, 0x03, 0x00, + 0x00, 0x4d, 0x01, 0x03, 0x00, 0x00, 0x04, 0x02, + 0x03, 0x00, 0x00, 0x4d, 0x03, 0x03, 0x00, 0x00, + 0x04, 0x04, 0x03, 0x00, 0x00, 0x4d, 0x05, 0x03, + 0x00, 0x00, 0x04, 0x06, 0x03, 0x00, 0x00, 0x4d, + 0x07, 0x03, 0x00, 0x00, 0x04, 0x08, 0x03, 0x00, + 0x00, 0x4d, 0x09, 0x03, 0x00, 0x00, 0x04, 0x0a, + 0x03, 0x00, 0x00, 0x4d, 0x0b, 0x03, 0x00, 0x00, + 0x04, 0x0c, 0x03, 0x00, 0x00, 0x4d, 0x0d, 0x03, + 0x00, 0x00, 0x04, 0x0e, 0x03, 0x00, 0x00, 0x4d, + 0x0f, 0x03, 0x00, 0x00, 0x04, 0x10, 0x03, 0x00, + 0x00, 0x4d, 0x11, 0x03, 0x00, 0x00, 0x04, 0x12, + 0x03, 0x00, 0x00, 0x4d, 0x13, 0x03, 0x00, 0x00, + 0x04, 0x14, 0x03, 0x00, 0x00, 0x4d, 0x15, 0x03, + 0x00, 0x00, 0x04, 0x16, 0x03, 0x00, 0x00, 0x4d, + 0x17, 0x03, 0x00, 0x00, 0x04, 0x18, 0x03, 0x00, + 0x00, 0x4d, 0x19, 0x03, 0x00, 0x00, 0x04, 0x1a, + 0x03, 0x00, 0x00, 0x4d, 0x1b, 0x03, 0x00, 0x00, + 0x04, 0x1c, 0x03, 0x00, 0x00, 0x4d, 0x1d, 0x03, + 0x00, 0x00, 0x04, 0x1e, 0x03, 0x00, 0x00, 0x4d, + 0x1f, 0x03, 0x00, 0x00, 0x4d, 0x20, 0x03, 0x00, + 0x00, 0x4d, 0x45, 0x00, 0x00, 0x00, 0x24, 0x01, + 0x00, 0xcc, 0x28, 0xc2, 0x0c, 0x01, 0x00, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, + 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_uk_size = 25571; + +const uint8_t intl_uk[25571] = { + 0x01, 0xe5, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x75, 0x6b, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x10, + 0x7b, 0x31, 0x7d, 0x2c, 0x20, 0x7b, 0x30, 0x7d, + 0x0a, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, + 0x65, 0x64, 0x69, 0x75, 0x6d, 0x17, 0x7b, 0x00, + 0x31, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x27, 0x00, + 0x3e, 0x04, 0x27, 0x00, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x08, 0x66, 0x75, 0x6c, + 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x02, 0x64, + 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, 0x08, 0x45, + 0x2c, 0x20, 0x64, 0x04, 0x45, 0x64, 0x10, 0x45, + 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x06, + 0x45, 0x68, 0x6d, 0x0e, 0x45, 0x20, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x06, 0x45, 0x48, 0x6d, 0x16, + 0x45, 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x61, 0x08, 0x45, 0x68, 0x6d, 0x73, + 0x14, 0x45, 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x08, 0x45, 0x48, 0x6d, 0x73, + 0x06, 0x79, 0x20, 0x47, 0x04, 0x47, 0x79, 0x0e, + 0x4c, 0x4c, 0x4c, 0x20, 0x79, 0x20, 0x47, 0x0a, + 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x12, 0x64, 0x20, + 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x20, 0x47, 0x0c, + 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x18, 0x45, + 0x2c, 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x20, + 0x79, 0x20, 0x47, 0x0e, 0x47, 0x79, 0x4d, 0x4d, + 0x4d, 0x45, 0x64, 0x06, 0x68, 0x20, 0x61, 0x02, + 0x68, 0x04, 0x48, 0x48, 0x02, 0x48, 0x0c, 0x68, + 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x04, 0x68, 0x6d, + 0x0a, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x04, 0x48, + 0x6d, 0x12, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x61, 0x06, 0x68, 0x6d, 0x73, 0x10, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x06, 0x48, 0x6d, 0x73, 0x16, 0x68, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x20, 0x76, + 0x08, 0x68, 0x6d, 0x73, 0x76, 0x14, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x76, + 0x08, 0x48, 0x6d, 0x73, 0x76, 0x10, 0x68, 0x3a, + 0x6d, 0x6d, 0x20, 0x61, 0x20, 0x76, 0x06, 0x68, + 0x6d, 0x76, 0x0e, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x20, 0x76, 0x06, 0x48, 0x6d, 0x76, 0x04, 0x4c, + 0x4c, 0x02, 0x4d, 0x0a, 0x64, 0x64, 0x2e, 0x4d, + 0x4d, 0x04, 0x4d, 0x64, 0x10, 0x45, 0x2c, 0x20, + 0x64, 0x64, 0x2e, 0x4d, 0x4d, 0x06, 0x4d, 0x45, + 0x64, 0x06, 0x4c, 0x4c, 0x4c, 0x06, 0x4d, 0x4d, + 0x4d, 0x0a, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x08, + 0x4d, 0x4d, 0x4d, 0x64, 0x10, 0x45, 0x2c, 0x20, + 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, + 0x4d, 0x45, 0x64, 0x0c, 0x64, 0x20, 0x4d, 0x4d, + 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, + 0x12, 0x45, 0x2c, 0x20, 0x64, 0x20, 0x4d, 0x4d, + 0x4d, 0x4d, 0x0c, 0x4d, 0x4d, 0x4d, 0x4d, 0x45, + 0x64, 0x0a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x04, + 0x6d, 0x73, 0x02, 0x79, 0x08, 0x4d, 0x4d, 0x2e, + 0x79, 0x04, 0x79, 0x4d, 0x0e, 0x64, 0x64, 0x2e, + 0x4d, 0x4d, 0x2e, 0x79, 0x06, 0x79, 0x4d, 0x64, + 0x14, 0x45, 0x2c, 0x20, 0x64, 0x64, 0x2e, 0x4d, + 0x4d, 0x2e, 0x79, 0x08, 0x79, 0x4d, 0x45, 0x64, + 0x0a, 0x4c, 0x4c, 0x4c, 0x20, 0x79, 0x08, 0x79, + 0x4d, 0x4d, 0x4d, 0x0e, 0x64, 0x20, 0x4d, 0x4d, + 0x4d, 0x20, 0x79, 0x0a, 0x79, 0x4d, 0x4d, 0x4d, + 0x64, 0x14, 0x45, 0x2c, 0x20, 0x64, 0x20, 0x4d, + 0x4d, 0x4d, 0x20, 0x79, 0x0c, 0x79, 0x4d, 0x4d, + 0x4d, 0x45, 0x64, 0x0c, 0x4c, 0x4c, 0x4c, 0x4c, + 0x20, 0x79, 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, + 0x0a, 0x51, 0x51, 0x51, 0x20, 0x79, 0x08, 0x79, + 0x51, 0x51, 0x51, 0x17, 0x51, 0x00, 0x51, 0x00, + 0x51, 0x00, 0x51, 0x00, 0x20, 0x00, 0x79, 0x00, + 0x20, 0x00, 0x27, 0x00, 0x40, 0x04, 0x27, 0x00, + 0x2e, 0x00, 0x0a, 0x79, 0x51, 0x51, 0x51, 0x51, + 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, + 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x73, 0x27, 0x45, 0x00, 0x45, 0x00, 0x45, 0x00, + 0x45, 0x00, 0x2c, 0x00, 0x20, 0x00, 0x64, 0x00, + 0x20, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, + 0x4d, 0x00, 0x20, 0x00, 0x79, 0x00, 0x20, 0x00, + 0x27, 0x00, 0x40, 0x04, 0x27, 0x00, 0x2e, 0x00, + 0x14, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x45, 0x45, + 0x45, 0x45, 0x64, 0x1b, 0x64, 0x00, 0x20, 0x00, + 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, + 0x20, 0x00, 0x79, 0x00, 0x20, 0x00, 0x27, 0x00, + 0x40, 0x04, 0x27, 0x00, 0x2e, 0x00, 0x0c, 0x79, + 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x19, 0x64, 0x00, + 0x20, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, + 0x20, 0x00, 0x79, 0x00, 0x20, 0x00, 0x27, 0x00, + 0x40, 0x04, 0x27, 0x00, 0x2e, 0x00, 0x10, 0x64, + 0x64, 0x2e, 0x4d, 0x4d, 0x2e, 0x79, 0x79, 0x16, + 0x64, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x73, 0x1a, 0x48, 0x48, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x7a, 0x7a, 0x7a, + 0x7a, 0x12, 0x68, 0x6d, 0x6d, 0x73, 0x73, 0x7a, + 0x7a, 0x7a, 0x7a, 0x14, 0x48, 0x48, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x7a, 0x08, 0x68, + 0x6d, 0x73, 0x7a, 0x16, 0x74, 0x69, 0x6d, 0x65, + 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x0e, + 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x03, + 0x21, 0x04, 0x03, 0x1b, 0x04, 0x03, 0x11, 0x04, + 0x03, 0x1a, 0x04, 0x03, 0x22, 0x04, 0x03, 0x27, + 0x04, 0x03, 0x12, 0x04, 0x03, 0x16, 0x04, 0x03, + 0x13, 0x04, 0x0c, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x09, 0x41, 0x04, 0x56, 0x04, 0x47, 0x04, + 0x2e, 0x00, 0x09, 0x3b, 0x04, 0x4e, 0x04, 0x42, + 0x04, 0x2e, 0x00, 0x09, 0x31, 0x04, 0x35, 0x04, + 0x40, 0x04, 0x2e, 0x00, 0x0b, 0x3a, 0x04, 0x32, + 0x04, 0x56, 0x04, 0x42, 0x04, 0x2e, 0x00, 0x0b, + 0x42, 0x04, 0x40, 0x04, 0x30, 0x04, 0x32, 0x04, + 0x2e, 0x00, 0x0b, 0x47, 0x04, 0x35, 0x04, 0x40, + 0x04, 0x32, 0x04, 0x2e, 0x00, 0x09, 0x3b, 0x04, + 0x38, 0x04, 0x3f, 0x04, 0x2e, 0x00, 0x0b, 0x41, + 0x04, 0x35, 0x04, 0x40, 0x04, 0x3f, 0x04, 0x2e, + 0x00, 0x09, 0x32, 0x04, 0x35, 0x04, 0x40, 0x04, + 0x2e, 0x00, 0x0b, 0x36, 0x04, 0x3e, 0x04, 0x32, + 0x04, 0x42, 0x04, 0x2e, 0x00, 0x0b, 0x3b, 0x04, + 0x38, 0x04, 0x41, 0x04, 0x42, 0x04, 0x2e, 0x00, + 0x0b, 0x33, 0x04, 0x40, 0x04, 0x43, 0x04, 0x34, + 0x04, 0x2e, 0x00, 0x0b, 0x41, 0x04, 0x56, 0x04, + 0x47, 0x04, 0x3d, 0x04, 0x4f, 0x04, 0x0d, 0x3b, + 0x04, 0x4e, 0x04, 0x42, 0x04, 0x3e, 0x04, 0x33, + 0x04, 0x3e, 0x04, 0x0f, 0x31, 0x04, 0x35, 0x04, + 0x40, 0x04, 0x35, 0x04, 0x37, 0x04, 0x3d, 0x04, + 0x4f, 0x04, 0x0d, 0x3a, 0x04, 0x32, 0x04, 0x56, + 0x04, 0x42, 0x04, 0x3d, 0x04, 0x4f, 0x04, 0x0d, + 0x42, 0x04, 0x40, 0x04, 0x30, 0x04, 0x32, 0x04, + 0x3d, 0x04, 0x4f, 0x04, 0x0d, 0x47, 0x04, 0x35, + 0x04, 0x40, 0x04, 0x32, 0x04, 0x3d, 0x04, 0x4f, + 0x04, 0x0b, 0x3b, 0x04, 0x38, 0x04, 0x3f, 0x04, + 0x3d, 0x04, 0x4f, 0x04, 0x0d, 0x41, 0x04, 0x35, + 0x04, 0x40, 0x04, 0x3f, 0x04, 0x3d, 0x04, 0x4f, + 0x04, 0x0f, 0x32, 0x04, 0x35, 0x04, 0x40, 0x04, + 0x35, 0x04, 0x41, 0x04, 0x3d, 0x04, 0x4f, 0x04, + 0x0d, 0x36, 0x04, 0x3e, 0x04, 0x32, 0x04, 0x42, + 0x04, 0x3d, 0x04, 0x4f, 0x04, 0x13, 0x3b, 0x04, + 0x38, 0x04, 0x41, 0x04, 0x42, 0x04, 0x3e, 0x04, + 0x3f, 0x04, 0x30, 0x04, 0x34, 0x04, 0x30, 0x04, + 0x0d, 0x33, 0x04, 0x40, 0x04, 0x43, 0x04, 0x34, + 0x04, 0x3d, 0x04, 0x4f, 0x04, 0x0c, 0x6d, 0x6f, + 0x6e, 0x74, 0x68, 0x73, 0x03, 0x1d, 0x04, 0x03, + 0x1f, 0x04, 0x05, 0x1d, 0x04, 0x34, 0x04, 0x05, + 0x1f, 0x04, 0x3d, 0x04, 0x05, 0x12, 0x04, 0x42, + 0x04, 0x05, 0x21, 0x04, 0x40, 0x04, 0x05, 0x27, + 0x04, 0x42, 0x04, 0x05, 0x1f, 0x04, 0x42, 0x04, + 0x05, 0x21, 0x04, 0x31, 0x04, 0x0d, 0x3d, 0x04, + 0x35, 0x04, 0x34, 0x04, 0x56, 0x04, 0x3b, 0x04, + 0x4f, 0x04, 0x13, 0x3f, 0x04, 0x3e, 0x04, 0x3d, + 0x04, 0x35, 0x04, 0x34, 0x04, 0x56, 0x04, 0x3b, + 0x04, 0x3e, 0x04, 0x3a, 0x04, 0x11, 0x32, 0x04, + 0x56, 0x04, 0x32, 0x04, 0x42, 0x04, 0x3e, 0x04, + 0x40, 0x04, 0x3e, 0x04, 0x3a, 0x04, 0x0d, 0x41, + 0x04, 0x35, 0x04, 0x40, 0x04, 0x35, 0x04, 0x34, + 0x04, 0x30, 0x04, 0x0d, 0x47, 0x04, 0x35, 0x04, + 0x42, 0x04, 0x32, 0x04, 0x35, 0x04, 0x40, 0x04, + 0x11, 0x3f, 0x04, 0xbc, 0x02, 0x4f, 0x04, 0x42, + 0x04, 0x3d, 0x04, 0x38, 0x04, 0x46, 0x04, 0x4f, + 0x04, 0x0d, 0x41, 0x04, 0x43, 0x04, 0x31, 0x04, + 0x3e, 0x04, 0x42, 0x04, 0x30, 0x04, 0x08, 0x64, + 0x61, 0x79, 0x73, 0x04, 0x42, 0x45, 0x08, 0x65, + 0x72, 0x61, 0x73, 0x05, 0x34, 0x04, 0x3f, 0x04, + 0x04, 0x61, 0x6d, 0x05, 0x3f, 0x04, 0x3f, 0x04, + 0x04, 0x70, 0x6d, 0x14, 0x64, 0x61, 0x79, 0x50, + 0x65, 0x72, 0x69, 0x6f, 0x64, 0x73, 0x06, 0x4d, + 0x30, 0x31, 0x06, 0x4d, 0x30, 0x32, 0x06, 0x4d, + 0x30, 0x33, 0x06, 0x4d, 0x30, 0x34, 0x06, 0x4d, + 0x30, 0x35, 0x06, 0x4d, 0x30, 0x36, 0x06, 0x4d, + 0x30, 0x37, 0x06, 0x4d, 0x30, 0x38, 0x06, 0x4d, + 0x30, 0x39, 0x06, 0x4d, 0x31, 0x30, 0x06, 0x4d, + 0x31, 0x31, 0x06, 0x4d, 0x31, 0x32, 0x07, 0x22, + 0x04, 0x3e, 0x04, 0x42, 0x04, 0x09, 0x11, 0x04, + 0x30, 0x04, 0x31, 0x04, 0x35, 0x04, 0x0b, 0x25, + 0x04, 0x30, 0x04, 0x42, 0x04, 0x43, 0x04, 0x40, + 0x04, 0x0b, 0x1a, 0x04, 0x56, 0x04, 0x45, 0x04, + 0x30, 0x04, 0x3a, 0x04, 0x09, 0x22, 0x04, 0x3e, + 0x04, 0x31, 0x04, 0x35, 0x04, 0x0b, 0x10, 0x04, + 0x3c, 0x04, 0x48, 0x04, 0x38, 0x04, 0x40, 0x04, + 0x11, 0x11, 0x04, 0x30, 0x04, 0x40, 0x04, 0x30, + 0x04, 0x3c, 0x04, 0x45, 0x04, 0x30, 0x04, 0x42, + 0x04, 0x0f, 0x11, 0x04, 0x30, 0x04, 0x40, 0x04, + 0x3c, 0x04, 0x43, 0x04, 0x34, 0x04, 0x30, 0x04, + 0x0d, 0x11, 0x04, 0x30, 0x04, 0x48, 0x04, 0x3d, + 0x04, 0x30, 0x04, 0x41, 0x04, 0x0b, 0x11, 0x04, + 0x30, 0x04, 0x43, 0x04, 0x3d, 0x04, 0x30, 0x04, + 0x09, 0x10, 0x04, 0x31, 0x04, 0x56, 0x04, 0x31, + 0x04, 0x0b, 0x1c, 0x04, 0x38, 0x04, 0x41, 0x04, + 0x40, 0x04, 0x30, 0x04, 0x09, 0x1d, 0x04, 0x30, + 0x04, 0x41, 0x04, 0x56, 0x04, 0x08, 0x45, 0x52, + 0x41, 0x30, 0x08, 0x45, 0x52, 0x41, 0x31, 0x04, + 0x30, 0x31, 0x04, 0x30, 0x32, 0x04, 0x30, 0x33, + 0x04, 0x30, 0x34, 0x04, 0x30, 0x35, 0x04, 0x30, + 0x36, 0x04, 0x30, 0x37, 0x04, 0x30, 0x38, 0x04, + 0x30, 0x39, 0x09, 0x3c, 0x04, 0x35, 0x04, 0x41, + 0x04, 0x2e, 0x00, 0x09, 0x42, 0x04, 0x35, 0x04, + 0x3a, 0x04, 0x2e, 0x00, 0x09, 0x45, 0x04, 0x35, + 0x04, 0x34, 0x04, 0x2e, 0x00, 0x09, 0x42, 0x04, + 0x30, 0x04, 0x45, 0x04, 0x2e, 0x00, 0x09, 0x42, + 0x04, 0x35, 0x04, 0x40, 0x04, 0x2e, 0x00, 0x0b, + 0x54, 0x04, 0x3a, 0x04, 0x30, 0x04, 0x42, 0x04, + 0x2e, 0x00, 0x09, 0x3c, 0x04, 0x35, 0x04, 0x33, + 0x04, 0x2e, 0x00, 0x0b, 0x3c, 0x04, 0x56, 0x04, + 0x4f, 0x04, 0x37, 0x04, 0x2e, 0x00, 0x09, 0x33, + 0x04, 0x35, 0x04, 0x3d, 0x04, 0x2e, 0x00, 0x09, + 0x41, 0x04, 0x35, 0x04, 0x3d, 0x04, 0x2e, 0x00, + 0x09, 0x45, 0x04, 0x30, 0x04, 0x3c, 0x04, 0x2e, + 0x00, 0x09, 0x3d, 0x04, 0x35, 0x04, 0x45, 0x04, + 0x2e, 0x00, 0x09, 0x3f, 0x04, 0x30, 0x04, 0x33, + 0x04, 0x2e, 0x00, 0x13, 0x3c, 0x04, 0x35, 0x04, + 0x41, 0x04, 0x3a, 0x04, 0x35, 0x04, 0x40, 0x04, + 0x35, 0x04, 0x3c, 0x04, 0x30, 0x04, 0x0f, 0x42, + 0x04, 0x35, 0x04, 0x3a, 0x04, 0x35, 0x04, 0x3c, + 0x04, 0x42, 0x04, 0x30, 0x04, 0x0d, 0x45, 0x04, + 0x35, 0x04, 0x34, 0x04, 0x30, 0x04, 0x40, 0x04, + 0x30, 0x04, 0x0f, 0x42, 0x04, 0x30, 0x04, 0x45, + 0x04, 0x41, 0x04, 0x30, 0x04, 0x41, 0x04, 0x30, + 0x04, 0x09, 0x42, 0x04, 0x35, 0x04, 0x40, 0x04, + 0x30, 0x04, 0x0f, 0x54, 0x04, 0x3a, 0x04, 0x30, + 0x04, 0x42, 0x04, 0x56, 0x04, 0x42, 0x04, 0x30, + 0x04, 0x11, 0x3c, 0x04, 0x35, 0x04, 0x33, 0x04, + 0x30, 0x04, 0x31, 0x04, 0x56, 0x04, 0x42, 0x04, + 0x30, 0x04, 0x0d, 0x3c, 0x04, 0x56, 0x04, 0x4f, + 0x04, 0x37, 0x04, 0x56, 0x04, 0x4f, 0x04, 0x0f, + 0x33, 0x04, 0x35, 0x04, 0x3d, 0x04, 0x31, 0x04, + 0x3e, 0x04, 0x42, 0x04, 0x30, 0x04, 0x09, 0x41, + 0x04, 0x35, 0x04, 0x3d, 0x04, 0x35, 0x04, 0x0b, + 0x45, 0x04, 0x30, 0x04, 0x3c, 0x04, 0x3b, 0x04, + 0x35, 0x04, 0x0d, 0x3d, 0x04, 0x35, 0x04, 0x45, + 0x04, 0x30, 0x04, 0x41, 0x04, 0x35, 0x04, 0x11, + 0x3f, 0x04, 0x30, 0x04, 0x33, 0x04, 0x43, 0x04, + 0x3c, 0x04, 0x35, 0x04, 0x3d, 0x04, 0x30, 0x04, + 0x0f, 0x34, 0x04, 0x3e, 0x04, 0x20, 0x00, 0x3d, + 0x04, 0x2e, 0x00, 0x35, 0x04, 0x2e, 0x00, 0x09, + 0x3d, 0x04, 0x2e, 0x00, 0x35, 0x04, 0x2e, 0x00, + 0x06, 0x42, 0x43, 0x45, 0x04, 0x43, 0x45, 0x11, + 0x34, 0x04, 0x3e, 0x04, 0x20, 0x00, 0x3d, 0x04, + 0x2e, 0x00, 0x20, 0x00, 0x35, 0x04, 0x2e, 0x00, + 0x0b, 0x3d, 0x04, 0x2e, 0x00, 0x20, 0x00, 0x35, + 0x04, 0x2e, 0x00, 0x19, 0x34, 0x04, 0x3e, 0x04, + 0x20, 0x00, 0x3d, 0x04, 0x30, 0x04, 0x48, 0x04, + 0x3e, 0x04, 0x57, 0x04, 0x20, 0x00, 0x35, 0x04, + 0x40, 0x04, 0x38, 0x04, 0x13, 0x3d, 0x04, 0x30, + 0x04, 0x48, 0x04, 0x3e, 0x04, 0x57, 0x04, 0x20, + 0x00, 0x35, 0x04, 0x40, 0x04, 0x38, 0x04, 0x19, + 0x34, 0x04, 0x3e, 0x04, 0x20, 0x00, 0x3d, 0x04, + 0x3e, 0x04, 0x32, 0x04, 0x3e, 0x04, 0x57, 0x04, + 0x20, 0x00, 0x35, 0x04, 0x40, 0x04, 0x38, 0x04, + 0x13, 0x3d, 0x04, 0x3e, 0x04, 0x32, 0x04, 0x3e, + 0x04, 0x57, 0x04, 0x20, 0x00, 0x35, 0x04, 0x40, + 0x04, 0x38, 0x04, 0x0b, 0x22, 0x04, 0x56, 0x04, + 0x48, 0x04, 0x40, 0x04, 0x38, 0x04, 0x13, 0x1c, + 0x04, 0x30, 0x04, 0x40, 0x04, 0x47, 0x04, 0x35, + 0x04, 0x48, 0x04, 0x32, 0x04, 0x30, 0x04, 0x3d, + 0x04, 0x0f, 0x27, 0x04, 0x38, 0x04, 0x41, 0x04, + 0x3b, 0x04, 0x4c, 0x04, 0x3e, 0x04, 0x32, 0x04, + 0x0b, 0x22, 0x04, 0x35, 0x04, 0x31, 0x04, 0x35, + 0x04, 0x42, 0x04, 0x0b, 0x28, 0x04, 0x35, 0x04, + 0x32, 0x04, 0x30, 0x04, 0x42, 0x04, 0x0d, 0x10, + 0x04, 0x34, 0x04, 0x30, 0x04, 0x40, 0x04, 0x20, + 0x00, 0x49, 0x00, 0x09, 0x10, 0x04, 0x34, 0x04, + 0x30, 0x04, 0x40, 0x04, 0x0b, 0x1d, 0x04, 0x56, + 0x04, 0x41, 0x04, 0x30, 0x04, 0x3d, 0x04, 0x07, + 0x06, 0x04, 0x30, 0x04, 0x40, 0x04, 0x0b, 0x21, + 0x04, 0x38, 0x04, 0x32, 0x04, 0x30, 0x04, 0x3d, + 0x04, 0x0d, 0x22, 0x04, 0x30, 0x04, 0x3c, 0x04, + 0x3c, 0x04, 0x43, 0x04, 0x37, 0x04, 0x05, 0x10, + 0x04, 0x31, 0x04, 0x09, 0x15, 0x04, 0x3b, 0x04, + 0x43, 0x04, 0x3b, 0x04, 0x0f, 0x10, 0x04, 0x34, + 0x04, 0x30, 0x04, 0x40, 0x04, 0x20, 0x00, 0x49, + 0x00, 0x49, 0x00, 0x04, 0x41, 0x4d, 0x0b, 0x47, + 0x04, 0x30, 0x04, 0x39, 0x04, 0x42, 0x04, 0x2e, + 0x00, 0x0b, 0x32, 0x04, 0x30, 0x04, 0x39, 0x04, + 0x41, 0x04, 0x2e, 0x00, 0x0b, 0x34, 0x04, 0x36, + 0x04, 0x30, 0x04, 0x39, 0x04, 0x2e, 0x00, 0x0b, + 0x30, 0x04, 0x41, 0x04, 0x30, 0x04, 0x34, 0x04, + 0x2e, 0x00, 0x0b, 0x48, 0x04, 0x40, 0x04, 0x30, + 0x04, 0x32, 0x04, 0x2e, 0x00, 0x0b, 0x31, 0x04, + 0x45, 0x04, 0x30, 0x04, 0x34, 0x04, 0x2e, 0x00, + 0x09, 0x30, 0x04, 0x41, 0x04, 0x32, 0x04, 0x2e, + 0x00, 0x09, 0x3a, 0x04, 0x30, 0x04, 0x40, 0x04, + 0x2e, 0x00, 0x09, 0x30, 0x04, 0x33, 0x04, 0x40, + 0x04, 0x2e, 0x00, 0x0b, 0x3f, 0x04, 0x30, 0x04, + 0x43, 0x04, 0x41, 0x04, 0x2e, 0x00, 0x09, 0x3c, + 0x04, 0x30, 0x04, 0x33, 0x04, 0x2e, 0x00, 0x0b, + 0x44, 0x04, 0x30, 0x04, 0x3b, 0x04, 0x4c, 0x04, + 0x2e, 0x00, 0x0d, 0x47, 0x04, 0x30, 0x04, 0x39, + 0x04, 0x42, 0x04, 0x40, 0x04, 0x30, 0x04, 0x11, + 0x32, 0x04, 0x30, 0x04, 0x39, 0x04, 0x41, 0x04, + 0x30, 0x04, 0x3a, 0x04, 0x45, 0x04, 0x30, 0x04, + 0x11, 0x34, 0x04, 0x36, 0x04, 0x30, 0x04, 0x39, + 0x04, 0x41, 0x04, 0x42, 0x04, 0x45, 0x04, 0x30, + 0x04, 0x0d, 0x30, 0x04, 0x41, 0x04, 0x30, 0x04, + 0x34, 0x04, 0x45, 0x04, 0x30, 0x04, 0x0f, 0x48, + 0x04, 0x40, 0x04, 0x30, 0x04, 0x32, 0x04, 0x30, + 0x04, 0x3d, 0x04, 0x30, 0x04, 0x0d, 0x31, 0x04, + 0x45, 0x04, 0x30, 0x04, 0x34, 0x04, 0x40, 0x04, + 0x30, 0x04, 0x0d, 0x30, 0x04, 0x41, 0x04, 0x32, + 0x04, 0x56, 0x04, 0x3d, 0x04, 0x30, 0x04, 0x0f, + 0x3a, 0x04, 0x30, 0x04, 0x40, 0x04, 0x42, 0x04, + 0x56, 0x04, 0x3a, 0x04, 0x30, 0x04, 0x13, 0x30, + 0x04, 0x33, 0x04, 0x40, 0x04, 0x30, 0x04, 0x45, + 0x04, 0x30, 0x04, 0x4f, 0x04, 0x3d, 0x04, 0x30, + 0x04, 0x0b, 0x3f, 0x04, 0x30, 0x04, 0x43, 0x04, + 0x41, 0x04, 0x30, 0x04, 0x0b, 0x3c, 0x04, 0x30, + 0x04, 0x33, 0x04, 0x45, 0x04, 0x30, 0x04, 0x11, + 0x44, 0x04, 0x30, 0x04, 0x3b, 0x04, 0x4c, 0x04, + 0x33, 0x04, 0x43, 0x04, 0x3d, 0x04, 0x30, 0x04, + 0x08, 0x53, 0x61, 0x6b, 0x61, 0x08, 0x4d, 0x75, + 0x68, 0x2e, 0x08, 0x53, 0x61, 0x66, 0x2e, 0x0c, + 0x52, 0x61, 0x62, 0x2e, 0x20, 0x49, 0x0e, 0x52, + 0x61, 0x62, 0x2e, 0x20, 0x49, 0x49, 0x0c, 0x4a, + 0x75, 0x6d, 0x2e, 0x20, 0x49, 0x0e, 0x4a, 0x75, + 0x6d, 0x2e, 0x20, 0x49, 0x49, 0x08, 0x52, 0x61, + 0x6a, 0x2e, 0x08, 0x53, 0x68, 0x61, 0x2e, 0x08, + 0x52, 0x61, 0x6d, 0x2e, 0x0a, 0x53, 0x68, 0x61, + 0x77, 0x2e, 0x11, 0x44, 0x00, 0x68, 0x00, 0x75, + 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x51, + 0x00, 0x2e, 0x00, 0x11, 0x44, 0x00, 0x68, 0x00, + 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, + 0x48, 0x00, 0x2e, 0x00, 0x11, 0x1c, 0x04, 0x43, + 0x04, 0x45, 0x04, 0x30, 0x04, 0x40, 0x04, 0x40, + 0x04, 0x30, 0x04, 0x3c, 0x04, 0x0b, 0x21, 0x04, + 0x30, 0x04, 0x44, 0x04, 0x30, 0x04, 0x40, 0x04, + 0x0d, 0x20, 0x04, 0x30, 0x04, 0x31, 0x04, 0x56, + 0x04, 0x20, 0x00, 0x49, 0x00, 0x0f, 0x20, 0x04, + 0x30, 0x04, 0x31, 0x04, 0x56, 0x04, 0x20, 0x00, + 0x49, 0x00, 0x49, 0x00, 0x13, 0x14, 0x04, 0x36, + 0x04, 0x43, 0x04, 0x3c, 0x04, 0x30, 0x04, 0x34, + 0x04, 0x30, 0x04, 0x20, 0x00, 0x49, 0x00, 0x15, + 0x14, 0x04, 0x36, 0x04, 0x43, 0x04, 0x3c, 0x04, + 0x30, 0x04, 0x34, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x49, 0x00, 0x49, 0x00, 0x0d, 0x20, 0x04, 0x30, + 0x04, 0x34, 0x04, 0x36, 0x04, 0x30, 0x04, 0x31, + 0x04, 0x0d, 0x28, 0x04, 0x30, 0x04, 0x30, 0x04, + 0x31, 0x04, 0x30, 0x04, 0x3d, 0x04, 0x0f, 0x20, + 0x04, 0x30, 0x04, 0x3c, 0x04, 0x30, 0x04, 0x34, + 0x04, 0x30, 0x04, 0x3d, 0x04, 0x0d, 0x14, 0x04, + 0x30, 0x04, 0x32, 0x04, 0x32, 0x04, 0x30, 0x04, + 0x3b, 0x04, 0x17, 0x17, 0x04, 0x43, 0x04, 0x2d, + 0x00, 0x3b, 0x04, 0x4c, 0x04, 0x2d, 0x00, 0x3a, + 0x04, 0x30, 0x04, 0x30, 0x04, 0x34, 0x04, 0x30, + 0x04, 0x17, 0x17, 0x04, 0x43, 0x04, 0x2d, 0x00, + 0x3b, 0x04, 0x4c, 0x04, 0x2d, 0x00, 0x45, 0x04, + 0x56, 0x04, 0x34, 0x04, 0x36, 0x04, 0x30, 0x04, + 0x04, 0x41, 0x48, 0x1f, 0x54, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x36, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x48, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x36, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x36, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x29, 0x00, 0x21, 0x53, + 0x00, 0x68, 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, + 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4b, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x57, 0x00, + 0x61, 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x1f, 0x52, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x1d, 0x59, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4a, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6b, 0x00, 0x61, + 0x00, 0x6d, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x2d, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x2b, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x2d, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, 0x2d, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x2a, 0x4a, 0x69, 0x6e, 0x67, 0x6f, 0x2d, 0x6b, + 0x65, 0x69, 0x75, 0x6e, 0x20, 0x28, 0x37, 0x36, + 0x37, 0x2d, 0x37, 0x37, 0x30, 0x29, 0x1d, 0x48, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x2d, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x2d, 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x38, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, 0x44, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x64, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x38, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, + 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4a, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x1d, 0x4b, 0x00, 0x61, 0x00, 0x6a, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x53, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x20, 0x54, 0x65, 0x6e, + 0x2d, 0x61, 0x6e, 0x20, 0x28, 0x38, 0x35, 0x37, + 0x2d, 0x38, 0x35, 0x39, 0x29, 0x1f, 0x4a, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, 0x45, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, 0x6e, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1b, 0x4c, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x1d, 0x41, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, 0x69, 0x00, + 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1d, 0x45, + 0x00, 0x69, 0x00, 0x73, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x4a, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x29, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, 0x4a, + 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x29, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4c, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, + 0x4a, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x24, 0x54, 0x65, 0x6e, 0x2d, 0x65, 0x69, 0x20, + 0x28, 0x31, 0x31, 0x31, 0x30, 0x2d, 0x31, 0x31, + 0x31, 0x33, 0x29, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, + 0x01, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, + 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x6a, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x48, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x48, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x45, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x68, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x6d, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, + 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x59, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x21, 0x4a, 0x00, 0x75, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x29, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x29, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1f, + 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x23, 0x41, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, + 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x29, 0x00, 0x27, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x75, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x29, 0x52, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x4e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1f, 0x4c, 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x74, 0x00, 0x73, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x27, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x45, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x21, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x45, 0x00, 0x69, 0x00, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x72, + 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, + 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, + 0x45, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, + 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x48, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x65, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x23, 0x41, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, 0x02, 0x54, + 0x02, 0x53, 0x0a, 0x4d, 0x65, 0x69, 0x6a, 0x69, + 0x0d, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x0b, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x0c, 0x48, 0x65, 0x69, 0x73, 0x65, 0x69, 0x13, + 0x24, 0x04, 0x30, 0x04, 0x40, 0x04, 0x32, 0x04, + 0x30, 0x04, 0x40, 0x04, 0x34, 0x04, 0x56, 0x04, + 0x3d, 0x04, 0x15, 0x1e, 0x04, 0x40, 0x04, 0x34, + 0x04, 0x56, 0x04, 0x31, 0x04, 0x35, 0x04, 0x45, + 0x04, 0x35, 0x04, 0x48, 0x04, 0x42, 0x04, 0x0d, + 0x25, 0x04, 0x3e, 0x04, 0x40, 0x04, 0x34, 0x04, + 0x30, 0x04, 0x34, 0x04, 0x07, 0x22, 0x04, 0x56, + 0x04, 0x40, 0x04, 0x0d, 0x1c, 0x04, 0x3e, 0x04, + 0x40, 0x04, 0x34, 0x04, 0x30, 0x04, 0x34, 0x04, + 0x11, 0x28, 0x04, 0x30, 0x04, 0x45, 0x04, 0x40, + 0x04, 0x56, 0x04, 0x32, 0x04, 0x35, 0x04, 0x40, + 0x04, 0x09, 0x1c, 0x04, 0x35, 0x04, 0x45, 0x04, + 0x40, 0x04, 0x09, 0x10, 0x04, 0x31, 0x04, 0x30, + 0x04, 0x3d, 0x04, 0x09, 0x10, 0x04, 0x37, 0x04, + 0x35, 0x04, 0x40, 0x04, 0x07, 0x14, 0x04, 0x35, + 0x04, 0x39, 0x04, 0x0d, 0x11, 0x04, 0x30, 0x04, + 0x45, 0x04, 0x3c, 0x04, 0x30, 0x04, 0x3d, 0x04, + 0x0d, 0x15, 0x04, 0x41, 0x04, 0x44, 0x04, 0x30, + 0x04, 0x3d, 0x04, 0x34, 0x04, 0x04, 0x41, 0x50, + 0x1a, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, + 0x52, 0x2e, 0x4f, 0x2e, 0x43, 0x2e, 0x0c, 0x52, + 0x2e, 0x4f, 0x2e, 0x43, 0x2e, 0x12, 0x63, 0x61, + 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, 0x73, 0x08, + 0x64, 0x61, 0x74, 0x65, 0x08, 0x6c, 0x61, 0x74, + 0x6e, 0x04, 0x6e, 0x75, 0x10, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, + 0x74, 0x74, 0x65, 0x72, 0x6e, 0x26, 0x7b, 0x6d, + 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0x1e, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, + 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, + 0x6e, 0x0e, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, + 0x6c, 0x26, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0xa0, 0x7b, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x63, 0x79, 0x7d, 0x3c, 0x7b, 0x6d, + 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0xa0, 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x63, 0x79, 0x7d, 0x10, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x63, 0x79, 0x2a, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x7b, 0x70, + 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, + 0x67, 0x6e, 0x7d, 0x40, 0x7b, 0x6d, 0x69, 0x6e, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x7b, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x0e, 0x70, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x10, 0x70, 0x61, 0x74, + 0x74, 0x65, 0x72, 0x6e, 0x73, 0x02, 0x2c, 0x02, + 0xa0, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x06, + 0x4e, 0x61, 0x4e, 0x06, 0x6e, 0x61, 0x6e, 0x02, + 0x2b, 0x10, 0x70, 0x6c, 0x75, 0x73, 0x53, 0x69, + 0x67, 0x6e, 0x02, 0x2d, 0x12, 0x6d, 0x69, 0x6e, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, 0x25, + 0x16, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, + 0x53, 0x69, 0x67, 0x6e, 0x03, 0x1e, 0x22, 0x10, + 0x69, 0x6e, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, + 0x0e, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, + 0x02, 0xa5, 0x06, 0x4a, 0x50, 0x59, 0x03, 0xb4, + 0x20, 0x06, 0x55, 0x41, 0x48, 0x09, 0x3a, 0x04, + 0x40, 0x04, 0x31, 0x04, 0x2e, 0x00, 0x06, 0x55, + 0x41, 0x4b, 0x08, 0x46, 0x43, 0x46, 0x41, 0x06, + 0x58, 0x41, 0x46, 0x06, 0x43, 0x46, 0x41, 0x06, + 0x58, 0x4f, 0x46, 0x08, 0x43, 0x46, 0x50, 0x46, + 0x06, 0x58, 0x50, 0x46, 0x14, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x52, + 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, + 0x6c, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, + 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x6a, 0x73, + 0x6f, 0x6e, 0x70, 0x2f, 0x75, 0x6b, 0x2e, 0x6a, + 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, + 0x01, 0x00, 0x27, 0x00, 0x77, 0x88, 0x6a, 0x01, + 0xa0, 0x01, 0x00, 0x00, 0x00, 0x39, 0xd0, 0x00, + 0x00, 0x00, 0x43, 0xd1, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd2, 0x00, 0x00, 0x00, 0x4d, 0xd3, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd4, 0x00, 0x00, 0x00, + 0x04, 0xd5, 0x00, 0x00, 0x00, 0x04, 0xd6, 0x00, + 0x00, 0x00, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x04, + 0xd8, 0x00, 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, + 0x00, 0x04, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdb, + 0x00, 0x00, 0x00, 0x04, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0xdd, 0x00, 0x00, 0x00, 0x04, 0xde, 0x00, + 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, 0x04, + 0xe0, 0x00, 0x00, 0x00, 0x04, 0xe1, 0x00, 0x00, + 0x00, 0x04, 0xe2, 0x00, 0x00, 0x00, 0x26, 0x0f, + 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x0a, 0x4d, + 0xe4, 0x00, 0x00, 0x00, 0x09, 0x4d, 0xe5, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x04, + 0xe9, 0x00, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xec, 0x00, 0x00, + 0x00, 0x4d, 0xec, 0x00, 0x00, 0x00, 0x04, 0xed, + 0x00, 0x00, 0x00, 0x4d, 0xee, 0x00, 0x00, 0x00, + 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, 0xf0, 0x00, + 0x00, 0x00, 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, + 0xf2, 0x00, 0x00, 0x00, 0x04, 0xf3, 0x00, 0x00, + 0x00, 0x4d, 0xf4, 0x00, 0x00, 0x00, 0x04, 0xf5, + 0x00, 0x00, 0x00, 0x4d, 0xf6, 0x00, 0x00, 0x00, + 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xf8, 0x00, + 0x00, 0x00, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, + 0xfa, 0x00, 0x00, 0x00, 0x04, 0xfb, 0x00, 0x00, + 0x00, 0x4d, 0xfc, 0x00, 0x00, 0x00, 0x04, 0xfd, + 0x00, 0x00, 0x00, 0x4d, 0xfe, 0x00, 0x00, 0x00, + 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x01, + 0x00, 0x00, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, + 0x02, 0x01, 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, + 0x00, 0x4d, 0x04, 0x01, 0x00, 0x00, 0x04, 0x05, + 0x01, 0x00, 0x00, 0x4d, 0x06, 0x01, 0x00, 0x00, + 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0x08, 0x01, + 0x00, 0x00, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, + 0x0a, 0x01, 0x00, 0x00, 0x04, 0x0b, 0x01, 0x00, + 0x00, 0x4d, 0x0c, 0x01, 0x00, 0x00, 0x04, 0x0d, + 0x01, 0x00, 0x00, 0x4d, 0x0e, 0x01, 0x00, 0x00, + 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, 0x10, 0x01, + 0x00, 0x00, 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, + 0x12, 0x01, 0x00, 0x00, 0x04, 0x13, 0x01, 0x00, + 0x00, 0x4d, 0x14, 0x01, 0x00, 0x00, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x4d, 0x16, 0x01, 0x00, 0x00, + 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, 0x18, 0x01, + 0x00, 0x00, 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, + 0x1a, 0x01, 0x00, 0x00, 0x04, 0x1b, 0x01, 0x00, + 0x00, 0x4d, 0x1c, 0x01, 0x00, 0x00, 0x04, 0x1d, + 0x01, 0x00, 0x00, 0x4d, 0x1e, 0x01, 0x00, 0x00, + 0x04, 0x1f, 0x01, 0x00, 0x00, 0x4d, 0x20, 0x01, + 0x00, 0x00, 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, + 0x22, 0x01, 0x00, 0x00, 0x04, 0x23, 0x01, 0x00, + 0x00, 0x4d, 0x24, 0x01, 0x00, 0x00, 0x04, 0x25, + 0x01, 0x00, 0x00, 0x4d, 0x26, 0x01, 0x00, 0x00, + 0x04, 0x27, 0x01, 0x00, 0x00, 0x4d, 0x27, 0x01, + 0x00, 0x00, 0x04, 0x28, 0x01, 0x00, 0x00, 0x4d, + 0x29, 0x01, 0x00, 0x00, 0x04, 0x2a, 0x01, 0x00, + 0x00, 0x4d, 0x2b, 0x01, 0x00, 0x00, 0x04, 0x2c, + 0x01, 0x00, 0x00, 0x4d, 0x2d, 0x01, 0x00, 0x00, + 0x04, 0x2e, 0x01, 0x00, 0x00, 0x4d, 0x2f, 0x01, + 0x00, 0x00, 0x04, 0x30, 0x01, 0x00, 0x00, 0x4d, + 0x31, 0x01, 0x00, 0x00, 0x04, 0x32, 0x01, 0x00, + 0x00, 0x4d, 0x33, 0x01, 0x00, 0x00, 0x04, 0x34, + 0x01, 0x00, 0x00, 0x4d, 0x35, 0x01, 0x00, 0x00, + 0x04, 0x36, 0x01, 0x00, 0x00, 0x4d, 0x37, 0x01, + 0x00, 0x00, 0x04, 0x38, 0x01, 0x00, 0x00, 0x4d, + 0x39, 0x01, 0x00, 0x00, 0x4d, 0x3a, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x3b, 0x01, 0x00, 0x00, 0x4d, + 0x3c, 0x01, 0x00, 0x00, 0x04, 0x3d, 0x01, 0x00, + 0x00, 0x4d, 0x3e, 0x01, 0x00, 0x00, 0x04, 0x3f, + 0x01, 0x00, 0x00, 0x4d, 0x31, 0x01, 0x00, 0x00, + 0x04, 0x40, 0x01, 0x00, 0x00, 0x4d, 0x2b, 0x01, + 0x00, 0x00, 0x4d, 0x41, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x42, 0x01, 0x00, 0x00, 0x4d, 0x43, 0x01, + 0x00, 0x00, 0x04, 0x44, 0x01, 0x00, 0x00, 0x4d, + 0x45, 0x01, 0x00, 0x00, 0x04, 0x0b, 0x01, 0x00, + 0x00, 0x4d, 0x0a, 0x01, 0x00, 0x00, 0x04, 0x07, + 0x01, 0x00, 0x00, 0x4d, 0x06, 0x01, 0x00, 0x00, + 0x4d, 0x46, 0x01, 0x00, 0x00, 0x4d, 0x47, 0x01, + 0x00, 0x00, 0x0b, 0x0b, 0x0b, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x6a, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7d, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, + 0x82, 0x01, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x00, 0xbe, 0x01, 0xbe, + 0x02, 0xbe, 0x03, 0xbe, 0x04, 0xbe, 0x05, 0xbe, + 0x06, 0xbe, 0x07, 0xbe, 0x08, 0xbe, 0x09, 0xbe, + 0x0a, 0xbe, 0x0b, 0x26, 0x0c, 0x00, 0x4d, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, + 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, + 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, + 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, + 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, + 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, + 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, + 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, + 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, + 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, + 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x6a, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, + 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x4d, + 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x0c, 0xbe, 0x0d, 0xbe, 0x0e, 0xbe, 0x0f, + 0xbe, 0x10, 0xbe, 0x11, 0xbe, 0x12, 0xbe, 0x13, + 0xbe, 0x14, 0xbe, 0x15, 0xbe, 0x16, 0xbe, 0x17, + 0xbe, 0x18, 0x26, 0x0d, 0x00, 0x4d, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, + 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, + 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, + 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, + 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, + 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, + 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, + 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, + 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, + 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, + 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, + 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, + 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, + 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, + 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, + 0x9b, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6a, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, + 0x04, 0x9d, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x9c, 0x01, + 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x7d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x04, + 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, + 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x19, 0xbe, + 0x1a, 0xbe, 0x1b, 0xbe, 0x1c, 0xbe, 0x1d, 0xbe, + 0x1e, 0xbe, 0x1f, 0xbe, 0x20, 0xbe, 0x21, 0xbe, + 0x22, 0xbe, 0x23, 0xbe, 0x24, 0x26, 0x0c, 0x00, + 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, + 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, + 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, + 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, + 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, + 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, + 0x04, 0x8e, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6a, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x4d, + 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, + 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, + 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, + 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, + 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, + 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, + 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0xbe, + 0x25, 0xbe, 0x26, 0xbe, 0x27, 0xbe, 0x28, 0x26, + 0x0d, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, + 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, + 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, + 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, + 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, + 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, + 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, + 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, + 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xb4, 0x01, 0x00, 0x00, 0x04, 0xb5, 0x01, + 0x00, 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, 0x04, + 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, + 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, + 0x01, 0x00, 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, + 0x04, 0xbc, 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, + 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, + 0xbf, 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x6a, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x9c, + 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, + 0x9d, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x4d, + 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, + 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, + 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, + 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, + 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, + 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0xbe, + 0x29, 0xbe, 0x2a, 0xbe, 0x2b, 0xbe, 0x2c, 0x26, + 0x0d, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, + 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, + 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, + 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, + 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, + 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, + 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, + 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, + 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xb4, 0x01, 0x00, 0x00, 0x04, 0xb5, 0x01, + 0x00, 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, 0x04, + 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, + 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, + 0x01, 0x00, 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, + 0x04, 0xbc, 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, + 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, + 0xbf, 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x6a, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x9c, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x9c, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7d, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, + 0x82, 0x01, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x2d, 0xbe, 0x2e, 0xbe, + 0x2f, 0xbe, 0x30, 0xbe, 0x31, 0xbe, 0x32, 0xbe, + 0x33, 0xbe, 0x34, 0xbe, 0x35, 0xbe, 0x36, 0xbe, + 0x37, 0xbe, 0x38, 0x26, 0x0c, 0x00, 0x4d, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, + 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, + 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, + 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, + 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, + 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, + 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, + 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, + 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, + 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, + 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x6a, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, + 0x9d, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, + 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7d, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7e, 0x01, 0x00, + 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, + 0x4d, 0x82, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x49, + 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x6a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x7b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xc1, 0x01, + 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, 0x00, 0x04, + 0xc3, 0x01, 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, + 0x00, 0x26, 0x04, 0x00, 0x4d, 0x51, 0x01, 0x00, + 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, + 0x01, 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, + 0x04, 0xc4, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xc7, 0x01, + 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, + 0xc9, 0x01, 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, + 0x00, 0x26, 0x04, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, + 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x39, 0xbe, 0x3a, 0xbe, 0x3b, 0xbe, 0x3c, 0xbe, + 0x3d, 0xbe, 0x3e, 0xbe, 0x3f, 0xbe, 0x40, 0xbe, + 0x41, 0xbe, 0x42, 0xbe, 0x43, 0xbe, 0x44, 0xbe, + 0x45, 0xbe, 0x46, 0x26, 0x0e, 0x00, 0x4d, 0x51, + 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, + 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, + 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, 0x04, + 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, + 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, 0x04, 0xd2, + 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, + 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, 0xd5, 0x01, + 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, 0x04, + 0xd7, 0x01, 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, + 0x00, 0x26, 0x0e, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, 0x04, 0xcc, + 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, 0x00, + 0x04, 0xce, 0x01, 0x00, 0x00, 0x04, 0xcf, 0x01, + 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, 0x04, + 0xd1, 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, 0x00, + 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, 0xd4, + 0x01, 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, 0x00, + 0x04, 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, 0x01, + 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, 0x26, + 0x0e, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x6a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7b, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x51, 0x01, 0x00, + 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd9, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, + 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x47, 0xbe, 0x48, 0xbe, 0x49, 0xbe, + 0x4a, 0xbe, 0x4b, 0xbe, 0x4c, 0xbe, 0x4d, 0xbe, + 0x4e, 0xbe, 0x4f, 0xbe, 0x50, 0xbe, 0x51, 0xbe, + 0x52, 0x26, 0x0c, 0x00, 0x4d, 0x51, 0x01, 0x00, + 0x00, 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, + 0x01, 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, + 0x04, 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, + 0x00, 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, + 0xe0, 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, + 0x00, 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, 0xe3, + 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, + 0x04, 0xe5, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x01, + 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, + 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, + 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, + 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, + 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, + 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, + 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x6a, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xf2, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x51, + 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xf2, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7d, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, + 0x82, 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x53, 0xbe, 0x54, 0xbe, + 0x55, 0xbe, 0x56, 0xbe, 0x57, 0xbe, 0x58, 0xbe, + 0x59, 0xbe, 0x5a, 0xbe, 0x5b, 0xbe, 0x5c, 0xbe, + 0x5d, 0xbe, 0x5e, 0x26, 0x0c, 0x00, 0x4d, 0x51, + 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, + 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, + 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, + 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, + 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, + 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, + 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, 0x01, + 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, + 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, 0x04, 0x02, + 0x02, 0x00, 0x00, 0x04, 0x03, 0x02, 0x00, 0x00, + 0x04, 0x04, 0x02, 0x00, 0x00, 0x04, 0x05, 0x02, + 0x00, 0x00, 0x04, 0x06, 0x02, 0x00, 0x00, 0x04, + 0x07, 0x02, 0x00, 0x00, 0x04, 0x08, 0x02, 0x00, + 0x00, 0x04, 0x09, 0x02, 0x00, 0x00, 0x04, 0x0a, + 0x02, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x6a, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x0b, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0x0b, 0x02, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x0b, 0x02, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x7d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x04, + 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, + 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x5f, 0xbe, + 0x60, 0xbe, 0x61, 0xbe, 0x62, 0xbe, 0x63, 0xbe, + 0x64, 0xbe, 0x65, 0xbe, 0x66, 0xbe, 0x67, 0xbe, + 0x68, 0xbe, 0x69, 0xbe, 0x6a, 0x26, 0x0c, 0x00, + 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0xf3, 0x01, + 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, 0x04, + 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, 0x00, + 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, 0xf8, + 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, 0x00, + 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, 0x01, + 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x04, + 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, 0x00, + 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, + 0x04, 0x02, 0x02, 0x00, 0x00, 0x04, 0x03, 0x02, + 0x00, 0x00, 0x04, 0x04, 0x02, 0x00, 0x00, 0x04, + 0x05, 0x02, 0x00, 0x00, 0x04, 0x06, 0x02, 0x00, + 0x00, 0x04, 0x07, 0x02, 0x00, 0x00, 0x04, 0x08, + 0x02, 0x00, 0x00, 0x04, 0x09, 0x02, 0x00, 0x00, + 0x04, 0x0a, 0x02, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6a, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x0b, 0x02, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x0b, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x0b, 0x02, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, + 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x6a, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x0c, 0x02, 0x00, 0x00, 0x04, 0x0d, 0x02, + 0x00, 0x00, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x04, + 0x0f, 0x02, 0x00, 0x00, 0x04, 0x10, 0x02, 0x00, + 0x00, 0x04, 0x11, 0x02, 0x00, 0x00, 0x04, 0x12, + 0x02, 0x00, 0x00, 0x04, 0x13, 0x02, 0x00, 0x00, + 0x04, 0x14, 0x02, 0x00, 0x00, 0x04, 0x15, 0x02, + 0x00, 0x00, 0x04, 0x16, 0x02, 0x00, 0x00, 0x04, + 0x17, 0x02, 0x00, 0x00, 0x04, 0x18, 0x02, 0x00, + 0x00, 0x04, 0x19, 0x02, 0x00, 0x00, 0x04, 0x1a, + 0x02, 0x00, 0x00, 0x04, 0x1b, 0x02, 0x00, 0x00, + 0x04, 0x1c, 0x02, 0x00, 0x00, 0x04, 0x1d, 0x02, + 0x00, 0x00, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x04, + 0x1f, 0x02, 0x00, 0x00, 0x04, 0x20, 0x02, 0x00, + 0x00, 0x04, 0x21, 0x02, 0x00, 0x00, 0x04, 0x22, + 0x02, 0x00, 0x00, 0x04, 0x23, 0x02, 0x00, 0x00, + 0x04, 0x24, 0x02, 0x00, 0x00, 0x04, 0x25, 0x02, + 0x00, 0x00, 0x04, 0x26, 0x02, 0x00, 0x00, 0x04, + 0x27, 0x02, 0x00, 0x00, 0x04, 0x28, 0x02, 0x00, + 0x00, 0x04, 0x29, 0x02, 0x00, 0x00, 0x04, 0x2a, + 0x02, 0x00, 0x00, 0x04, 0x2b, 0x02, 0x00, 0x00, + 0x26, 0x20, 0x00, 0x04, 0x2c, 0x02, 0x00, 0x00, + 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, + 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, + 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, + 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x23, + 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, + 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, + 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, + 0x32, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, + 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, 0x27, + 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, + 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, + 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, + 0x36, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, + 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, 0x2b, + 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, + 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, + 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, + 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, + 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x2f, + 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, + 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, + 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, + 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, + 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x33, + 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, + 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, + 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, + 0x42, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, + 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, 0x37, + 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, + 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, + 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, + 0x46, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, + 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, 0x3b, + 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, + 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, + 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, + 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, + 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x3f, + 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, + 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, + 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, + 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, + 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x43, + 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, + 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, + 0x52, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, + 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, 0x47, + 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, + 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, + 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, + 0x56, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, + 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, 0x4b, + 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, + 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, + 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, + 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, + 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x4f, + 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, + 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, + 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, + 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, + 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x53, + 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, + 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, + 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, + 0x62, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, + 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, 0x57, + 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, + 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, + 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, + 0x66, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, + 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, 0x5b, + 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, + 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, + 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, + 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, + 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x5f, + 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, + 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, + 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, + 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, + 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x63, + 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, + 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, + 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, + 0x72, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, + 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, 0x67, + 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, + 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, + 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, + 0x76, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, + 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, 0x6b, + 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, + 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, + 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, + 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, + 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x6f, + 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, + 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, + 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, + 0x7e, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, + 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, 0x73, + 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, + 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, + 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, + 0x82, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, + 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, 0x77, + 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, + 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, + 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, + 0x86, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, + 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, 0x7b, + 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, + 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, + 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, + 0x8a, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, + 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, 0x7f, + 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, + 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, + 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, + 0x8e, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, + 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, 0x83, + 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, + 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, + 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, + 0x92, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, + 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, 0x87, + 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, + 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, + 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, + 0x96, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, + 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, 0x8b, + 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, + 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, + 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, + 0x9a, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, + 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, 0x8f, + 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, + 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, + 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, + 0x9e, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, + 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, 0x93, + 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, + 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, + 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, + 0xa2, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, + 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, 0x97, + 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, + 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, + 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, + 0xa6, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, + 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, 0x9b, + 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, + 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, + 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, + 0xaa, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, + 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, 0x9f, + 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, + 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, + 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, + 0xae, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, + 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xa3, + 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, + 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, + 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, + 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, + 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xa7, + 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, + 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, + 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, + 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, + 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xab, + 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, + 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, + 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, + 0xba, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, + 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xaf, + 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, + 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, + 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, + 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, + 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xb3, + 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, + 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, + 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, + 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, + 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xb7, + 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, + 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, + 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, + 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, + 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xbb, + 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, 0x00, 0x00, + 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0xc9, 0x02, + 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, + 0xca, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, + 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, 0xbf, + 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, 0x00, + 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0xcd, 0x02, + 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, + 0xce, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, + 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, 0x4d, 0xc3, + 0x00, 0x00, 0x80, 0x04, 0xd0, 0x02, 0x00, 0x00, + 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xd1, 0x02, + 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, + 0xd2, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, + 0x80, 0x04, 0xd3, 0x02, 0x00, 0x00, 0x4d, 0xc7, + 0x00, 0x00, 0x80, 0x04, 0xd4, 0x02, 0x00, 0x00, + 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xd5, 0x02, + 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, + 0xd6, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, + 0x80, 0x04, 0xd7, 0x02, 0x00, 0x00, 0x4d, 0xcb, + 0x00, 0x00, 0x80, 0x04, 0xd8, 0x02, 0x00, 0x00, + 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xd9, 0x02, + 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, + 0xda, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, + 0x80, 0x04, 0xdb, 0x02, 0x00, 0x00, 0x4d, 0xcf, + 0x00, 0x00, 0x80, 0x04, 0xdc, 0x02, 0x00, 0x00, + 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xdd, 0x02, + 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, + 0xde, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, + 0x80, 0x04, 0xdf, 0x02, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x80, 0x04, 0xe0, 0x02, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xe1, 0x02, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, + 0xe2, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x80, 0x04, 0xe3, 0x02, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x80, 0x04, 0xe4, 0x02, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xe5, 0x02, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, + 0xe6, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x80, 0x04, 0xe7, 0x02, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x80, 0x04, 0xe8, 0x02, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xe9, 0x02, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, + 0xea, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x80, 0x04, 0xeb, 0x02, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x80, 0x04, 0xec, 0x02, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xed, 0x02, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, + 0xee, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x80, 0x04, 0xef, 0x02, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x80, 0x04, 0xf0, 0x02, 0x00, 0x00, + 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xf1, 0x02, + 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, + 0xf2, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x80, 0x04, 0xf3, 0x02, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x80, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xf4, 0x02, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, + 0xf5, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x80, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x80, 0x4d, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x0c, 0x02, 0x00, 0x00, 0x04, 0x0d, 0x02, + 0x00, 0x00, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x04, + 0x0f, 0x02, 0x00, 0x00, 0x04, 0x10, 0x02, 0x00, + 0x00, 0x04, 0x11, 0x02, 0x00, 0x00, 0x04, 0x12, + 0x02, 0x00, 0x00, 0x04, 0x13, 0x02, 0x00, 0x00, + 0x04, 0x14, 0x02, 0x00, 0x00, 0x04, 0x15, 0x02, + 0x00, 0x00, 0x04, 0x16, 0x02, 0x00, 0x00, 0x04, + 0x17, 0x02, 0x00, 0x00, 0x04, 0x18, 0x02, 0x00, + 0x00, 0x04, 0x19, 0x02, 0x00, 0x00, 0x04, 0x1a, + 0x02, 0x00, 0x00, 0x04, 0x1b, 0x02, 0x00, 0x00, + 0x04, 0x1c, 0x02, 0x00, 0x00, 0x04, 0x1d, 0x02, + 0x00, 0x00, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x04, + 0x1f, 0x02, 0x00, 0x00, 0x04, 0x20, 0x02, 0x00, + 0x00, 0x04, 0x21, 0x02, 0x00, 0x00, 0x04, 0x22, + 0x02, 0x00, 0x00, 0x04, 0x23, 0x02, 0x00, 0x00, + 0x04, 0x24, 0x02, 0x00, 0x00, 0x04, 0x25, 0x02, + 0x00, 0x00, 0x04, 0x26, 0x02, 0x00, 0x00, 0x04, + 0x27, 0x02, 0x00, 0x00, 0x04, 0x28, 0x02, 0x00, + 0x00, 0x04, 0x29, 0x02, 0x00, 0x00, 0x04, 0x2a, + 0x02, 0x00, 0x00, 0x04, 0x2b, 0x02, 0x00, 0x00, + 0x26, 0x20, 0x00, 0x04, 0x2c, 0x02, 0x00, 0x00, + 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, + 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, + 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, + 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x23, + 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, + 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, + 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, + 0x32, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, + 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, 0x27, + 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, + 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, + 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, + 0x36, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, + 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, 0x2b, + 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, + 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, + 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, + 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, + 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x2f, + 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, + 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, + 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, + 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, + 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x33, + 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, + 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, + 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, + 0x42, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, + 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, 0x37, + 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, + 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, + 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, + 0x46, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, + 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, 0x3b, + 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, + 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, + 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, + 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, + 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x3f, + 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, + 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, + 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, + 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, + 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x43, + 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, + 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, + 0x52, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, + 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, 0x47, + 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, + 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, + 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, + 0x56, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, + 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, 0x4b, + 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, + 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, + 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, + 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, + 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x4f, + 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, + 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, + 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, + 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, + 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x53, + 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, + 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, + 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, + 0x62, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, + 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, 0x57, + 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, + 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, + 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, + 0x66, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, + 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, 0x5b, + 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, + 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, + 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, + 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, + 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x5f, + 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, + 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, + 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, + 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, + 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x63, + 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, + 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, + 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, + 0x72, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, + 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, 0x67, + 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, + 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, + 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, + 0x76, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, + 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, 0x6b, + 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, + 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, + 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, + 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, + 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x6f, + 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, + 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, + 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, + 0x7e, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, + 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, 0x73, + 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, + 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, + 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, + 0x82, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, + 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, 0x77, + 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, + 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, + 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, + 0x86, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, + 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, 0x7b, + 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, + 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, + 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, + 0x8a, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, + 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, 0x7f, + 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, + 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, + 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, + 0x8e, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, + 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, 0x83, + 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, + 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, + 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, + 0x92, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, + 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, 0x87, + 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, + 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, + 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, + 0x96, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, + 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, 0x8b, + 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, + 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, + 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, + 0x9a, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, + 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, 0x8f, + 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, + 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, + 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, + 0x9e, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, + 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, 0x93, + 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, + 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, + 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, + 0xa2, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, + 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, 0x97, + 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, + 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, + 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, + 0xa6, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, + 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, 0x9b, + 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, + 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, + 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, + 0xaa, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, + 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, 0x9f, + 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, + 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, + 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, + 0xae, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, + 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xa3, + 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, + 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, + 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, + 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, + 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xa7, + 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, + 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, + 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, + 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, + 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xab, + 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, + 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, + 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, + 0xba, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, + 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xaf, + 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, + 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, + 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, + 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, + 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xb3, + 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, + 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, + 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, + 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, + 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xb7, + 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, + 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, + 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, + 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, + 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xbb, + 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, 0x00, 0x00, + 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0xc9, 0x02, + 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, + 0xca, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, + 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, 0xbf, + 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, 0x00, + 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0xcd, 0x02, + 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, + 0xce, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, + 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, 0x4d, 0xc3, + 0x00, 0x00, 0x80, 0x04, 0xd0, 0x02, 0x00, 0x00, + 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xd1, 0x02, + 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, + 0xd2, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, + 0x80, 0x04, 0xd3, 0x02, 0x00, 0x00, 0x4d, 0xc7, + 0x00, 0x00, 0x80, 0x04, 0xd4, 0x02, 0x00, 0x00, + 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xd5, 0x02, + 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, + 0xd6, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, + 0x80, 0x04, 0xd7, 0x02, 0x00, 0x00, 0x4d, 0xcb, + 0x00, 0x00, 0x80, 0x04, 0xd8, 0x02, 0x00, 0x00, + 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xd9, 0x02, + 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, + 0xda, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, + 0x80, 0x04, 0xdb, 0x02, 0x00, 0x00, 0x4d, 0xcf, + 0x00, 0x00, 0x80, 0x04, 0xdc, 0x02, 0x00, 0x00, + 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xdd, 0x02, + 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, + 0xde, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, + 0x80, 0x04, 0xdf, 0x02, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x80, 0x04, 0xe0, 0x02, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xe1, 0x02, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, + 0xe2, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x80, 0x04, 0xe3, 0x02, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x80, 0x04, 0xe4, 0x02, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xe5, 0x02, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, + 0xe6, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x80, 0x04, 0xe7, 0x02, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x80, 0x04, 0xe8, 0x02, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xe9, 0x02, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, + 0xea, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x80, 0x04, 0xeb, 0x02, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x80, 0x04, 0xec, 0x02, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xed, 0x02, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, + 0xee, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x80, 0x04, 0xef, 0x02, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x80, 0x04, 0xf0, 0x02, 0x00, 0x00, + 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xf1, 0x02, + 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, + 0xf2, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x80, 0x04, 0xf3, 0x02, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x80, 0x04, 0xf6, 0x02, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xf7, 0x02, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, + 0xf8, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x80, 0x04, 0xf9, 0x02, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x80, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x0c, 0x02, 0x00, 0x00, 0x04, 0x0d, 0x02, + 0x00, 0x00, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x04, + 0x0f, 0x02, 0x00, 0x00, 0x04, 0x10, 0x02, 0x00, + 0x00, 0x04, 0x11, 0x02, 0x00, 0x00, 0x04, 0x12, + 0x02, 0x00, 0x00, 0x04, 0x13, 0x02, 0x00, 0x00, + 0x04, 0x14, 0x02, 0x00, 0x00, 0x04, 0x15, 0x02, + 0x00, 0x00, 0x04, 0x16, 0x02, 0x00, 0x00, 0x04, + 0x17, 0x02, 0x00, 0x00, 0x04, 0x18, 0x02, 0x00, + 0x00, 0x04, 0x19, 0x02, 0x00, 0x00, 0x04, 0x1a, + 0x02, 0x00, 0x00, 0x04, 0x1b, 0x02, 0x00, 0x00, + 0x04, 0x1c, 0x02, 0x00, 0x00, 0x04, 0x1d, 0x02, + 0x00, 0x00, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x04, + 0x1f, 0x02, 0x00, 0x00, 0x04, 0x20, 0x02, 0x00, + 0x00, 0x04, 0x21, 0x02, 0x00, 0x00, 0x04, 0x22, + 0x02, 0x00, 0x00, 0x04, 0x23, 0x02, 0x00, 0x00, + 0x04, 0x24, 0x02, 0x00, 0x00, 0x04, 0x25, 0x02, + 0x00, 0x00, 0x04, 0x26, 0x02, 0x00, 0x00, 0x04, + 0x27, 0x02, 0x00, 0x00, 0x04, 0x28, 0x02, 0x00, + 0x00, 0x04, 0x29, 0x02, 0x00, 0x00, 0x04, 0x2a, + 0x02, 0x00, 0x00, 0x04, 0x2b, 0x02, 0x00, 0x00, + 0x26, 0x20, 0x00, 0x04, 0x2c, 0x02, 0x00, 0x00, + 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, + 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, + 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, + 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x23, + 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, + 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, + 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, + 0x32, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, + 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, 0x27, + 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, + 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, + 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, + 0x36, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, + 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, 0x2b, + 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, + 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, + 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, + 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, + 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x2f, + 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, + 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, + 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, + 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, + 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x33, + 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, + 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, + 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, + 0x42, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, + 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, 0x37, + 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, + 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, + 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, + 0x46, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, + 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, 0x3b, + 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, + 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, + 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, + 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, + 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x3f, + 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, + 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, + 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, + 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, + 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x43, + 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, + 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, + 0x52, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, + 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, 0x47, + 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, + 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, + 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, + 0x56, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, + 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, 0x4b, + 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, + 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, + 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, + 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, + 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x4f, + 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, + 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, + 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, + 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, + 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x53, + 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, + 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, + 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, + 0x62, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, + 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, 0x57, + 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, + 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, + 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, + 0x66, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, + 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, 0x5b, + 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, + 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, + 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, + 0x6a, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, + 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x5f, + 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, + 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, + 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, + 0x6e, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, + 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x63, + 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, + 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, + 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, + 0x72, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, + 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, 0x67, + 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, + 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, + 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, + 0x76, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, + 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, 0x6b, + 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, + 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, + 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, + 0x7a, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, + 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x6f, + 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, + 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, + 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, + 0x7e, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, + 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, 0x73, + 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, + 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, + 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, + 0x82, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, + 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, 0x77, + 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, + 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, + 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, + 0x86, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, + 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, 0x7b, + 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, + 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, + 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, + 0x8a, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, + 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, 0x7f, + 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, + 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, + 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, + 0x8e, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, + 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, 0x83, + 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, + 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, + 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, + 0x92, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, + 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, 0x87, + 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, + 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, + 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, + 0x96, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, + 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, 0x8b, + 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, + 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, + 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, + 0x9a, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, + 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, 0x8f, + 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, + 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, + 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, + 0x9e, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, + 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, 0x93, + 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, + 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, + 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, + 0xa2, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, + 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, 0x97, + 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, + 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, + 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, + 0xa6, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, + 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, 0x9b, + 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, + 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, + 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, + 0xaa, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, + 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, 0x9f, + 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, + 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, + 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, + 0xae, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, + 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xa3, + 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, + 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, + 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, + 0xb2, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, + 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xa7, + 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, + 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, + 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, + 0xb6, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, + 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xab, + 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, + 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, + 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, + 0xba, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, + 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xaf, + 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, + 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, + 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, + 0xbe, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, + 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xb3, + 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, + 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, + 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, + 0xc2, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, + 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xb7, + 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, + 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, + 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, + 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, + 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xbb, + 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, 0x00, 0x00, + 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0xc9, 0x02, + 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, + 0xca, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, + 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, 0xbf, + 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, 0x00, + 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0xcd, 0x02, + 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, + 0xce, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, + 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, 0x4d, 0xc3, + 0x00, 0x00, 0x80, 0x04, 0xd0, 0x02, 0x00, 0x00, + 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xd1, 0x02, + 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, + 0xd2, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, + 0x80, 0x04, 0xd3, 0x02, 0x00, 0x00, 0x4d, 0xc7, + 0x00, 0x00, 0x80, 0x04, 0xd4, 0x02, 0x00, 0x00, + 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xd5, 0x02, + 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, + 0xd6, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, + 0x80, 0x04, 0xd7, 0x02, 0x00, 0x00, 0x4d, 0xcb, + 0x00, 0x00, 0x80, 0x04, 0xd8, 0x02, 0x00, 0x00, + 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xd9, 0x02, + 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, + 0xda, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, + 0x80, 0x04, 0xdb, 0x02, 0x00, 0x00, 0x4d, 0xcf, + 0x00, 0x00, 0x80, 0x04, 0xdc, 0x02, 0x00, 0x00, + 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xdd, 0x02, + 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, + 0xde, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, + 0x80, 0x04, 0xdf, 0x02, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x80, 0x04, 0xe0, 0x02, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xe1, 0x02, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, + 0xe2, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x80, 0x04, 0xe3, 0x02, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x80, 0x04, 0xe4, 0x02, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xe5, 0x02, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, + 0xe6, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x80, 0x04, 0xe7, 0x02, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x80, 0x04, 0xe8, 0x02, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xe9, 0x02, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, + 0xea, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x80, 0x04, 0xeb, 0x02, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x80, 0x04, 0xec, 0x02, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xed, 0x02, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, + 0xee, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x80, 0x04, 0xef, 0x02, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x80, 0x04, 0xf0, 0x02, 0x00, 0x00, + 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xf1, 0x02, + 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, + 0xf2, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x80, 0x04, 0xf3, 0x02, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x80, 0x04, 0xf6, 0x02, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xf7, 0x02, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, + 0xf8, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x80, 0x04, 0xf9, 0x02, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x80, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7e, + 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, + 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x6b, + 0xbe, 0x6c, 0xbe, 0x6d, 0xbe, 0x6e, 0xbe, 0x6f, + 0xbe, 0x70, 0xbe, 0x71, 0xbe, 0x72, 0xbe, 0x73, + 0xbe, 0x74, 0xbe, 0x75, 0xbe, 0x76, 0x26, 0x0c, + 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0xfa, + 0x02, 0x00, 0x00, 0x04, 0xfb, 0x02, 0x00, 0x00, + 0x04, 0xfc, 0x02, 0x00, 0x00, 0x04, 0xfd, 0x02, + 0x00, 0x00, 0x04, 0xfe, 0x02, 0x00, 0x00, 0x04, + 0xff, 0x02, 0x00, 0x00, 0x04, 0x00, 0x03, 0x00, + 0x00, 0x04, 0x01, 0x03, 0x00, 0x00, 0x04, 0x02, + 0x03, 0x00, 0x00, 0x04, 0x03, 0x03, 0x00, 0x00, + 0x04, 0x04, 0x03, 0x00, 0x00, 0x04, 0x05, 0x03, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xfa, 0x02, 0x00, 0x00, 0x04, + 0xfb, 0x02, 0x00, 0x00, 0x04, 0xfc, 0x02, 0x00, + 0x00, 0x04, 0xfd, 0x02, 0x00, 0x00, 0x04, 0xfe, + 0x02, 0x00, 0x00, 0x04, 0xff, 0x02, 0x00, 0x00, + 0x04, 0x00, 0x03, 0x00, 0x00, 0x04, 0x01, 0x03, + 0x00, 0x00, 0x04, 0x02, 0x03, 0x00, 0x00, 0x04, + 0x03, 0x03, 0x00, 0x00, 0x04, 0x04, 0x03, 0x00, + 0x00, 0x04, 0x05, 0x03, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6a, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7b, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x06, 0x03, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x06, 0x03, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x06, 0x03, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, + 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x4d, + 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x49, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x6a, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x51, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x07, 0x03, 0x00, 0x00, 0x04, 0x08, + 0x03, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x07, 0x03, 0x00, 0x00, + 0x04, 0x08, 0x03, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x07, 0x03, + 0x00, 0x00, 0x04, 0x08, 0x03, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x7d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x04, + 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, + 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, 0x4d, 0xe2, + 0x00, 0x00, 0x00, 0x4d, 0x09, 0x03, 0x00, 0x00, + 0x4d, 0x0a, 0x03, 0x00, 0x00, 0x0b, 0x04, 0x0b, + 0x03, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x0c, + 0x03, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x0d, 0x03, + 0x00, 0x00, 0x4d, 0x0e, 0x03, 0x00, 0x00, 0x04, + 0x0f, 0x03, 0x00, 0x00, 0x4d, 0x10, 0x03, 0x00, + 0x00, 0x4d, 0x11, 0x03, 0x00, 0x00, 0x0b, 0x04, + 0x12, 0x03, 0x00, 0x00, 0x4d, 0x0e, 0x03, 0x00, + 0x00, 0x04, 0x13, 0x03, 0x00, 0x00, 0x4d, 0x10, + 0x03, 0x00, 0x00, 0x4d, 0x14, 0x03, 0x00, 0x00, + 0x0b, 0x04, 0x15, 0x03, 0x00, 0x00, 0x4d, 0x0e, + 0x03, 0x00, 0x00, 0x04, 0x16, 0x03, 0x00, 0x00, + 0x4d, 0x10, 0x03, 0x00, 0x00, 0x4d, 0x17, 0x03, + 0x00, 0x00, 0x4d, 0x18, 0x03, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x19, 0x03, 0x00, 0x00, 0x4d, 0x11, + 0x03, 0x00, 0x00, 0x04, 0x1a, 0x03, 0x00, 0x00, + 0x4d, 0x1b, 0x03, 0x00, 0x00, 0x04, 0x1c, 0x03, + 0x00, 0x00, 0x4d, 0x1d, 0x03, 0x00, 0x00, 0x04, + 0x1e, 0x03, 0x00, 0x00, 0x4d, 0x1f, 0x03, 0x00, + 0x00, 0x04, 0x20, 0x03, 0x00, 0x00, 0x4d, 0x21, + 0x03, 0x00, 0x00, 0x04, 0x22, 0x03, 0x00, 0x00, + 0x4d, 0x23, 0x03, 0x00, 0x00, 0x04, 0x24, 0x03, + 0x00, 0x00, 0x4d, 0x25, 0x03, 0x00, 0x00, 0x4d, + 0x0b, 0x03, 0x00, 0x00, 0x4d, 0x26, 0x03, 0x00, + 0x00, 0x0b, 0x04, 0x27, 0x03, 0x00, 0x00, 0x4d, + 0x28, 0x03, 0x00, 0x00, 0x04, 0x29, 0x03, 0x00, + 0x00, 0x4d, 0x2a, 0x03, 0x00, 0x00, 0x04, 0x2b, + 0x03, 0x00, 0x00, 0x4d, 0x2c, 0x03, 0x00, 0x00, + 0x04, 0x2d, 0x03, 0x00, 0x00, 0x4d, 0x2e, 0x03, + 0x00, 0x00, 0x04, 0x2f, 0x03, 0x00, 0x00, 0x4d, + 0x30, 0x03, 0x00, 0x00, 0x04, 0x31, 0x03, 0x00, + 0x00, 0x4d, 0x32, 0x03, 0x00, 0x00, 0x4d, 0x33, + 0x03, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x00, + 0x24, 0x01, 0x00, 0xcc, 0x28, 0xe8, 0x0c, 0x01, + 0x00, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, + 0x31, 0x33, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, + 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_ur_size = 24936; + +const uint8_t intl_ur[24936] = { + 0x01, 0xc6, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x75, 0x72, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x0e, + 0x7b, 0x31, 0x7d, 0x20, 0x7b, 0x30, 0x7d, 0x0a, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, 0x65, + 0x64, 0x69, 0x75, 0x6d, 0x08, 0x66, 0x75, 0x6c, + 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x02, 0x64, + 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, 0x06, 0x64, + 0x20, 0x45, 0x04, 0x45, 0x64, 0x10, 0x45, 0x20, + 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x06, 0x45, + 0x68, 0x6d, 0x0e, 0x45, 0x20, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x06, 0x45, 0x48, 0x6d, 0x16, 0x45, + 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x61, 0x08, 0x45, 0x68, 0x6d, 0x73, 0x14, + 0x45, 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x08, 0x45, 0x48, 0x6d, 0x73, 0x06, + 0x79, 0x20, 0x47, 0x04, 0x47, 0x79, 0x0e, 0x4d, + 0x4d, 0x4d, 0x20, 0x79, 0x20, 0x47, 0x0a, 0x47, + 0x79, 0x4d, 0x4d, 0x4d, 0x15, 0x64, 0x00, 0x20, + 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x0c, + 0x06, 0x20, 0x00, 0x79, 0x00, 0x20, 0x00, 0x47, + 0x00, 0x0c, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x64, + 0x1b, 0x45, 0x00, 0x0c, 0x06, 0x20, 0x00, 0x64, + 0x00, 0x20, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x4d, + 0x00, 0x0c, 0x06, 0x20, 0x00, 0x79, 0x00, 0x20, + 0x00, 0x47, 0x00, 0x0e, 0x47, 0x79, 0x4d, 0x4d, + 0x4d, 0x45, 0x64, 0x06, 0x68, 0x20, 0x61, 0x02, + 0x68, 0x04, 0x48, 0x48, 0x02, 0x48, 0x0c, 0x68, + 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x04, 0x68, 0x6d, + 0x0a, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x04, 0x48, + 0x6d, 0x12, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x61, 0x06, 0x68, 0x6d, 0x73, 0x10, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x06, 0x48, 0x6d, 0x73, 0x16, 0x68, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x20, 0x76, + 0x08, 0x68, 0x6d, 0x73, 0x76, 0x14, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x76, + 0x08, 0x48, 0x6d, 0x73, 0x76, 0x10, 0x68, 0x3a, + 0x6d, 0x6d, 0x20, 0x61, 0x20, 0x76, 0x06, 0x68, + 0x6d, 0x76, 0x0e, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x20, 0x76, 0x06, 0x48, 0x6d, 0x76, 0x02, 0x4c, + 0x02, 0x4d, 0x06, 0x64, 0x2f, 0x4d, 0x04, 0x4d, + 0x64, 0x0d, 0x45, 0x00, 0x0c, 0x06, 0x20, 0x00, + 0x64, 0x00, 0x2f, 0x00, 0x4d, 0x00, 0x06, 0x4d, + 0x45, 0x64, 0x06, 0x4c, 0x4c, 0x4c, 0x06, 0x4d, + 0x4d, 0x4d, 0x0a, 0x64, 0x20, 0x4d, 0x4d, 0x4d, + 0x08, 0x4d, 0x4d, 0x4d, 0x64, 0x11, 0x45, 0x00, + 0x0c, 0x06, 0x20, 0x00, 0x64, 0x00, 0x20, 0x00, + 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x0a, 0x4d, + 0x4d, 0x4d, 0x45, 0x64, 0x0c, 0x4d, 0x4d, 0x4d, + 0x4d, 0x20, 0x64, 0x0a, 0x4d, 0x4d, 0x4d, 0x4d, + 0x64, 0x0a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x04, + 0x6d, 0x73, 0x02, 0x79, 0x06, 0x4d, 0x2f, 0x79, + 0x04, 0x79, 0x4d, 0x0a, 0x64, 0x2f, 0x4d, 0x2f, + 0x79, 0x06, 0x79, 0x4d, 0x64, 0x11, 0x45, 0x00, + 0x0c, 0x06, 0x20, 0x00, 0x64, 0x00, 0x2f, 0x00, + 0x4d, 0x00, 0x2f, 0x00, 0x79, 0x00, 0x08, 0x79, + 0x4d, 0x45, 0x64, 0x0a, 0x4d, 0x4d, 0x4d, 0x20, + 0x79, 0x08, 0x79, 0x4d, 0x4d, 0x4d, 0x11, 0x64, + 0x00, 0x20, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x4d, + 0x00, 0x0c, 0x06, 0x20, 0x00, 0x79, 0x00, 0x0a, + 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x17, 0x45, 0x00, + 0x0c, 0x06, 0x20, 0x00, 0x64, 0x00, 0x20, 0x00, + 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x0c, 0x06, + 0x20, 0x00, 0x79, 0x00, 0x0c, 0x79, 0x4d, 0x4d, + 0x4d, 0x45, 0x64, 0x0c, 0x79, 0x20, 0x4d, 0x4d, + 0x4d, 0x4d, 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, + 0x0a, 0x51, 0x51, 0x51, 0x20, 0x79, 0x08, 0x79, + 0x51, 0x51, 0x51, 0x0c, 0x51, 0x51, 0x51, 0x51, + 0x20, 0x79, 0x0a, 0x79, 0x51, 0x51, 0x51, 0x51, + 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, + 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x73, 0x1f, 0x45, 0x00, 0x45, 0x00, 0x45, 0x00, + 0x45, 0x00, 0x0c, 0x06, 0x20, 0x00, 0x64, 0x00, + 0x20, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, + 0x4d, 0x00, 0x0c, 0x06, 0x20, 0x00, 0x79, 0x00, + 0x14, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x45, 0x45, + 0x45, 0x45, 0x64, 0x13, 0x64, 0x00, 0x20, 0x00, + 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x4d, 0x00, + 0x0c, 0x06, 0x20, 0x00, 0x79, 0x00, 0x0c, 0x79, + 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x0c, 0x64, 0x2f, + 0x4d, 0x2f, 0x79, 0x79, 0x16, 0x64, 0x61, 0x74, + 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, + 0x1c, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x61, 0x20, 0x7a, 0x7a, 0x7a, 0x7a, 0x12, + 0x68, 0x6d, 0x6d, 0x73, 0x73, 0x7a, 0x7a, 0x7a, + 0x7a, 0x16, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x61, 0x20, 0x7a, 0x08, 0x68, 0x6d, + 0x73, 0x7a, 0x16, 0x74, 0x69, 0x6d, 0x65, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x0e, 0x66, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x02, 0x4a, + 0x02, 0x46, 0x02, 0x41, 0x02, 0x53, 0x02, 0x4f, + 0x02, 0x4e, 0x02, 0x44, 0x0c, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x0b, 0x2c, 0x06, 0x46, 0x06, + 0x48, 0x06, 0x31, 0x06, 0xcc, 0x06, 0x0b, 0x41, + 0x06, 0x31, 0x06, 0x48, 0x06, 0x31, 0x06, 0xcc, + 0x06, 0x09, 0x45, 0x06, 0x27, 0x06, 0x31, 0x06, + 0x86, 0x06, 0x0b, 0x27, 0x06, 0x7e, 0x06, 0x31, + 0x06, 0xcc, 0x06, 0x44, 0x06, 0x07, 0x45, 0x06, + 0x26, 0x06, 0xcc, 0x06, 0x07, 0x2c, 0x06, 0x48, + 0x06, 0x46, 0x06, 0x0d, 0x2c, 0x06, 0x48, 0x06, + 0x44, 0x06, 0x27, 0x06, 0x26, 0x06, 0xcc, 0x06, + 0x09, 0x27, 0x06, 0xaf, 0x06, 0x33, 0x06, 0x2a, + 0x06, 0x0b, 0x33, 0x06, 0x2a, 0x06, 0x45, 0x06, + 0x28, 0x06, 0x31, 0x06, 0x0d, 0x27, 0x06, 0xa9, + 0x06, 0x2a, 0x06, 0x48, 0x06, 0x28, 0x06, 0x31, + 0x06, 0x0b, 0x46, 0x06, 0x48, 0x06, 0x45, 0x06, + 0x28, 0x06, 0x31, 0x06, 0x0b, 0x2f, 0x06, 0x33, + 0x06, 0x45, 0x06, 0x28, 0x06, 0x31, 0x06, 0x0c, + 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x73, 0x02, 0x54, + 0x02, 0x57, 0x0b, 0x27, 0x06, 0x2a, 0x06, 0x48, + 0x06, 0x27, 0x06, 0x31, 0x06, 0x0d, 0x33, 0x06, + 0x48, 0x06, 0x45, 0x06, 0x48, 0x06, 0x27, 0x06, + 0x31, 0x06, 0x09, 0x45, 0x06, 0x46, 0x06, 0xaf, + 0x06, 0x44, 0x06, 0x07, 0x28, 0x06, 0x2f, 0x06, + 0xbe, 0x06, 0x0d, 0x2c, 0x06, 0x45, 0x06, 0x39, + 0x06, 0x31, 0x06, 0x27, 0x06, 0x2a, 0x06, 0x09, + 0x2c, 0x06, 0x45, 0x06, 0x39, 0x06, 0xc1, 0x06, + 0x09, 0xc1, 0x06, 0x41, 0x06, 0x2a, 0x06, 0xc1, + 0x06, 0x08, 0x64, 0x61, 0x79, 0x73, 0x04, 0x42, + 0x45, 0x08, 0x65, 0x72, 0x61, 0x73, 0x13, 0x42, + 0x06, 0x28, 0x06, 0x44, 0x06, 0x20, 0x00, 0x2f, + 0x06, 0x48, 0x06, 0x7e, 0x06, 0xc1, 0x06, 0x31, + 0x06, 0x04, 0x61, 0x6d, 0x13, 0x28, 0x06, 0x39, + 0x06, 0x2f, 0x06, 0x20, 0x00, 0x2f, 0x06, 0x48, + 0x06, 0x7e, 0x06, 0xc1, 0x06, 0x31, 0x06, 0x04, + 0x70, 0x6d, 0x14, 0x64, 0x61, 0x79, 0x50, 0x65, + 0x72, 0x69, 0x6f, 0x64, 0x73, 0x06, 0x4d, 0x30, + 0x31, 0x06, 0x4d, 0x30, 0x32, 0x06, 0x4d, 0x30, + 0x33, 0x06, 0x4d, 0x30, 0x34, 0x06, 0x4d, 0x30, + 0x35, 0x06, 0x4d, 0x30, 0x36, 0x06, 0x4d, 0x30, + 0x37, 0x06, 0x4d, 0x30, 0x38, 0x06, 0x4d, 0x30, + 0x39, 0x06, 0x4d, 0x31, 0x30, 0x06, 0x4d, 0x31, + 0x31, 0x06, 0x4d, 0x31, 0x32, 0x08, 0x54, 0x6f, + 0x75, 0x74, 0x08, 0x42, 0x61, 0x62, 0x61, 0x0a, + 0x48, 0x61, 0x74, 0x6f, 0x72, 0x0a, 0x4b, 0x69, + 0x61, 0x68, 0x6b, 0x08, 0x54, 0x6f, 0x62, 0x61, + 0x0c, 0x41, 0x6d, 0x73, 0x68, 0x69, 0x72, 0x10, + 0x42, 0x61, 0x72, 0x61, 0x6d, 0x68, 0x61, 0x74, + 0x12, 0x42, 0x61, 0x72, 0x61, 0x6d, 0x6f, 0x75, + 0x64, 0x61, 0x0e, 0x42, 0x61, 0x73, 0x68, 0x61, + 0x6e, 0x73, 0x0a, 0x50, 0x61, 0x6f, 0x6e, 0x61, + 0x08, 0x45, 0x70, 0x65, 0x70, 0x0a, 0x4d, 0x65, + 0x73, 0x72, 0x61, 0x0a, 0x4e, 0x61, 0x73, 0x69, + 0x65, 0x08, 0x45, 0x52, 0x41, 0x30, 0x08, 0x45, + 0x52, 0x41, 0x31, 0x10, 0x4d, 0x65, 0x73, 0x6b, + 0x65, 0x72, 0x65, 0x6d, 0x0c, 0x54, 0x65, 0x6b, + 0x65, 0x6d, 0x74, 0x0a, 0x48, 0x65, 0x64, 0x61, + 0x72, 0x0c, 0x54, 0x61, 0x68, 0x73, 0x61, 0x73, + 0x06, 0x54, 0x65, 0x72, 0x0e, 0x59, 0x65, 0x6b, + 0x61, 0x74, 0x69, 0x74, 0x0e, 0x4d, 0x65, 0x67, + 0x61, 0x62, 0x69, 0x74, 0x0c, 0x4d, 0x69, 0x61, + 0x7a, 0x69, 0x61, 0x0c, 0x47, 0x65, 0x6e, 0x62, + 0x6f, 0x74, 0x08, 0x53, 0x65, 0x6e, 0x65, 0x0a, + 0x48, 0x61, 0x6d, 0x6c, 0x65, 0x0e, 0x4e, 0x65, + 0x68, 0x61, 0x73, 0x73, 0x65, 0x0e, 0x50, 0x61, + 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x11, 0x42, 0x06, + 0x28, 0x06, 0x44, 0x06, 0x20, 0x00, 0x45, 0x06, + 0x33, 0x06, 0xcc, 0x06, 0x2d, 0x06, 0x0b, 0x39, + 0x06, 0xcc, 0x06, 0x33, 0x06, 0x48, 0x06, 0xcc, + 0x06, 0x06, 0x42, 0x43, 0x45, 0x04, 0x43, 0x45, + 0x0c, 0x54, 0x69, 0x73, 0x68, 0x72, 0x69, 0x0e, + 0x48, 0x65, 0x73, 0x68, 0x76, 0x61, 0x6e, 0x0c, + 0x4b, 0x69, 0x73, 0x6c, 0x65, 0x76, 0x0a, 0x54, + 0x65, 0x76, 0x65, 0x74, 0x0c, 0x53, 0x68, 0x65, + 0x76, 0x61, 0x74, 0x0c, 0x41, 0x64, 0x61, 0x72, + 0x20, 0x49, 0x08, 0x41, 0x64, 0x61, 0x72, 0x0a, + 0x4e, 0x69, 0x73, 0x61, 0x6e, 0x08, 0x49, 0x79, + 0x61, 0x72, 0x0a, 0x53, 0x69, 0x76, 0x61, 0x6e, + 0x0a, 0x54, 0x61, 0x6d, 0x75, 0x7a, 0x04, 0x41, + 0x76, 0x08, 0x45, 0x6c, 0x75, 0x6c, 0x0e, 0x41, + 0x64, 0x61, 0x72, 0x20, 0x49, 0x49, 0x04, 0x41, + 0x4d, 0x0e, 0x43, 0x68, 0x61, 0x69, 0x74, 0x72, + 0x61, 0x10, 0x56, 0x61, 0x69, 0x73, 0x61, 0x6b, + 0x68, 0x61, 0x10, 0x4a, 0x79, 0x61, 0x69, 0x73, + 0x74, 0x68, 0x61, 0x0c, 0x41, 0x73, 0x61, 0x64, + 0x68, 0x61, 0x0e, 0x53, 0x72, 0x61, 0x76, 0x61, + 0x6e, 0x61, 0x0c, 0x42, 0x68, 0x61, 0x64, 0x72, + 0x61, 0x0c, 0x41, 0x73, 0x76, 0x69, 0x6e, 0x61, + 0x0e, 0x4b, 0x61, 0x72, 0x74, 0x69, 0x6b, 0x61, + 0x14, 0x41, 0x67, 0x72, 0x61, 0x68, 0x61, 0x79, + 0x61, 0x6e, 0x61, 0x0a, 0x50, 0x61, 0x75, 0x73, + 0x61, 0x0a, 0x4d, 0x61, 0x67, 0x68, 0x61, 0x10, + 0x50, 0x68, 0x61, 0x6c, 0x67, 0x75, 0x6e, 0x61, + 0x08, 0x53, 0x61, 0x6b, 0x61, 0x08, 0x4d, 0x75, + 0x68, 0x2e, 0x08, 0x53, 0x61, 0x66, 0x2e, 0x0c, + 0x52, 0x61, 0x62, 0x2e, 0x20, 0x49, 0x0e, 0x52, + 0x61, 0x62, 0x2e, 0x20, 0x49, 0x49, 0x0c, 0x4a, + 0x75, 0x6d, 0x2e, 0x20, 0x49, 0x0e, 0x4a, 0x75, + 0x6d, 0x2e, 0x20, 0x49, 0x49, 0x08, 0x52, 0x61, + 0x6a, 0x2e, 0x08, 0x53, 0x68, 0x61, 0x2e, 0x08, + 0x52, 0x61, 0x6d, 0x2e, 0x0a, 0x53, 0x68, 0x61, + 0x77, 0x2e, 0x11, 0x44, 0x00, 0x68, 0x00, 0x75, + 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x51, + 0x00, 0x2e, 0x00, 0x11, 0x44, 0x00, 0x68, 0x00, + 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, + 0x48, 0x00, 0x2e, 0x00, 0x09, 0x45, 0x06, 0x2d, + 0x06, 0x31, 0x06, 0x45, 0x06, 0x07, 0x35, 0x06, + 0x41, 0x06, 0x31, 0x06, 0x17, 0x31, 0x06, 0x20, + 0x00, 0x28, 0x06, 0xcc, 0x06, 0x39, 0x06, 0x20, + 0x00, 0x27, 0x06, 0x44, 0x06, 0x27, 0x06, 0x48, + 0x06, 0x44, 0x06, 0x19, 0x31, 0x06, 0x20, 0x00, + 0x28, 0x06, 0xcc, 0x06, 0x39, 0x06, 0x20, 0x00, + 0x27, 0x06, 0x44, 0x06, 0x2b, 0x06, 0x27, 0x06, + 0x46, 0x06, 0xcc, 0x06, 0x17, 0x2c, 0x06, 0x45, + 0x06, 0x27, 0x06, 0x2f, 0x06, 0xcc, 0x06, 0x20, + 0x00, 0x27, 0x06, 0x44, 0x06, 0x27, 0x06, 0x48, + 0x06, 0x44, 0x06, 0x19, 0x2c, 0x06, 0x45, 0x06, + 0x27, 0x06, 0x2f, 0x06, 0xcc, 0x06, 0x20, 0x00, + 0x27, 0x06, 0x44, 0x06, 0x2b, 0x06, 0x27, 0x06, + 0x46, 0x06, 0xcc, 0x06, 0x07, 0x31, 0x06, 0x2c, + 0x06, 0x28, 0x06, 0x0b, 0x34, 0x06, 0x39, 0x06, + 0x28, 0x06, 0x27, 0x06, 0x46, 0x06, 0x0b, 0x31, + 0x06, 0x45, 0x06, 0x36, 0x06, 0x27, 0x06, 0x46, + 0x06, 0x09, 0x34, 0x06, 0x48, 0x06, 0x27, 0x06, + 0x44, 0x06, 0x11, 0x30, 0x06, 0x48, 0x06, 0x27, + 0x06, 0x44, 0x06, 0x42, 0x06, 0x39, 0x06, 0x2f, + 0x06, 0xc3, 0x06, 0x0f, 0x30, 0x06, 0x48, 0x06, + 0x27, 0x06, 0x44, 0x06, 0x2d, 0x06, 0x2c, 0x06, + 0xc3, 0x06, 0x04, 0x41, 0x48, 0x1f, 0x54, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x36, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x13, 0x20, 0x36, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x21, 0x53, 0x00, 0x68, 0x00, 0x75, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1f, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, + 0x57, 0x00, 0x61, 0x00, 0x64, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x1f, 0x52, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x1d, 0x59, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1f, 0x4a, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6b, + 0x00, 0x61, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x2d, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x2d, 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x2b, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x2d, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x2a, 0x4a, 0x69, 0x6e, 0x67, 0x6f, + 0x2d, 0x6b, 0x65, 0x69, 0x75, 0x6e, 0x20, 0x28, + 0x37, 0x36, 0x37, 0x2d, 0x37, 0x37, 0x30, 0x29, + 0x1d, 0x48, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x37, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, + 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, 0x64, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, 0x4b, + 0x00, 0x4d, 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x38, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4a, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x61, 0x00, + 0x6a, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, + 0x53, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x20, 0x54, + 0x65, 0x6e, 0x2d, 0x61, 0x6e, 0x20, 0x28, 0x38, + 0x35, 0x37, 0x2d, 0x38, 0x35, 0x39, 0x29, 0x1f, + 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x47, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, + 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1d, 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, + 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x34, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1b, 0x4c, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, + 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x1d, 0x41, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x1d, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x4a, 0x00, 0x69, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x29, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x27, 0x4a, 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, + 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4c, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x61, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x25, 0x4a, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x24, 0x54, 0x65, 0x6e, 0x2d, 0x65, + 0x69, 0x20, 0x28, 0x31, 0x31, 0x31, 0x30, 0x2d, + 0x31, 0x31, 0x31, 0x33, 0x29, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, + 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x4d, 0x01, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x45, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x6a, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x48, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, + 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4c, + 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6d, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x4a, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x59, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x75, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x29, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x29, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x4a, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x21, 0x4a, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x27, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x75, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x29, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x74, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x29, 0x52, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x4e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, + 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x61, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, + 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x27, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x45, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, 0x69, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x27, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x27, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x61, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x41, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x4d, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x0a, 0x4d, 0x65, 0x69, 0x6a, 0x69, 0x0d, 0x54, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x0b, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x0c, 0x48, + 0x65, 0x69, 0x73, 0x65, 0x69, 0x12, 0x46, 0x61, + 0x72, 0x76, 0x61, 0x72, 0x64, 0x69, 0x6e, 0x16, + 0x4f, 0x72, 0x64, 0x69, 0x62, 0x65, 0x68, 0x65, + 0x73, 0x68, 0x74, 0x0e, 0x4b, 0x68, 0x6f, 0x72, + 0x64, 0x61, 0x64, 0x06, 0x54, 0x69, 0x72, 0x0c, + 0x4d, 0x6f, 0x72, 0x64, 0x61, 0x64, 0x12, 0x53, + 0x68, 0x61, 0x68, 0x72, 0x69, 0x76, 0x61, 0x72, + 0x08, 0x4d, 0x65, 0x68, 0x72, 0x08, 0x41, 0x62, + 0x61, 0x6e, 0x08, 0x41, 0x7a, 0x61, 0x72, 0x06, + 0x44, 0x65, 0x79, 0x0c, 0x42, 0x61, 0x68, 0x6d, + 0x61, 0x6e, 0x0c, 0x45, 0x73, 0x66, 0x61, 0x6e, + 0x64, 0x04, 0x41, 0x50, 0x1a, 0x42, 0x65, 0x66, + 0x6f, 0x72, 0x65, 0x20, 0x52, 0x2e, 0x4f, 0x2e, + 0x43, 0x2e, 0x0c, 0x52, 0x2e, 0x4f, 0x2e, 0x43, + 0x2e, 0x12, 0x63, 0x61, 0x6c, 0x65, 0x6e, 0x64, + 0x61, 0x72, 0x73, 0x08, 0x64, 0x61, 0x74, 0x65, + 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, 0x75, + 0x10, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0x1e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, + 0x6e, 0x26, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x6e, 0x65, + 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, + 0x74, 0x74, 0x65, 0x72, 0x6e, 0x0e, 0x64, 0x65, + 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x26, 0x7b, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, + 0xa0, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0x3c, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, 0xa0, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, + 0x79, 0x2a, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, + 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x40, + 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, + 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0x7b, 0x70, 0x65, 0x72, 0x63, + 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, + 0x0e, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, + 0x24, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x61, + 0x72, 0x79, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, + 0x69, 0x7a, 0x65, 0x10, 0x70, 0x61, 0x74, 0x74, + 0x65, 0x72, 0x6e, 0x73, 0x02, 0x2e, 0x02, 0x2c, + 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x06, 0x4e, + 0x61, 0x4e, 0x06, 0x6e, 0x61, 0x6e, 0x07, 0x0e, + 0x20, 0x2b, 0x00, 0x0e, 0x20, 0x10, 0x70, 0x6c, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x07, 0x0e, + 0x20, 0x2d, 0x00, 0x0e, 0x20, 0x12, 0x6d, 0x69, + 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, + 0x25, 0x16, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, + 0x74, 0x53, 0x69, 0x67, 0x6e, 0x03, 0x1e, 0x22, + 0x10, 0x69, 0x6e, 0x66, 0x69, 0x6e, 0x69, 0x74, + 0x79, 0x0e, 0x61, 0x72, 0x61, 0x62, 0x65, 0x78, + 0x74, 0x05, 0x0e, 0x20, 0x2b, 0x00, 0x05, 0x0e, + 0x20, 0x2d, 0x00, 0x0e, 0x73, 0x79, 0x6d, 0x62, + 0x6f, 0x6c, 0x73, 0x04, 0x41, 0x24, 0x06, 0x41, + 0x55, 0x44, 0x04, 0x52, 0x24, 0x06, 0x42, 0x52, + 0x4c, 0x06, 0x43, 0x41, 0x24, 0x06, 0x43, 0x41, + 0x44, 0x06, 0x43, 0x4e, 0xa5, 0x06, 0x43, 0x4e, + 0x59, 0x03, 0xac, 0x20, 0x06, 0x45, 0x55, 0x52, + 0x02, 0xa3, 0x06, 0x47, 0x42, 0x50, 0x06, 0x48, + 0x4b, 0x24, 0x06, 0x48, 0x4b, 0x44, 0x03, 0xaa, + 0x20, 0x06, 0x49, 0x4c, 0x53, 0x03, 0xb9, 0x20, + 0x06, 0x49, 0x4e, 0x52, 0x06, 0x4a, 0x50, 0xa5, + 0x06, 0x4a, 0x50, 0x59, 0x03, 0xa9, 0x20, 0x06, + 0x4b, 0x52, 0x57, 0x06, 0x4d, 0x58, 0x24, 0x06, + 0x4d, 0x58, 0x4e, 0x06, 0x4e, 0x5a, 0x24, 0x06, + 0x4e, 0x5a, 0x44, 0x04, 0x52, 0x73, 0x06, 0x50, + 0x4b, 0x52, 0x03, 0x3f, 0x0e, 0x06, 0x54, 0x48, + 0x42, 0x06, 0x4e, 0x54, 0x24, 0x06, 0x54, 0x57, + 0x44, 0x02, 0x24, 0x06, 0x55, 0x53, 0x44, 0x03, + 0xab, 0x20, 0x06, 0x56, 0x4e, 0x44, 0x08, 0x46, + 0x43, 0x46, 0x41, 0x06, 0x58, 0x41, 0x46, 0x06, + 0x45, 0x43, 0x24, 0x06, 0x58, 0x43, 0x44, 0x06, + 0x43, 0x46, 0x41, 0x06, 0x58, 0x4f, 0x46, 0x08, + 0x43, 0x46, 0x50, 0x46, 0x06, 0x58, 0x50, 0x46, + 0x14, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, + 0x69, 0x65, 0x73, 0x52, 0x6e, 0x6f, 0x64, 0x65, + 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, + 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2f, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, + 0x61, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, 0x70, 0x2f, + 0x75, 0x72, 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, + 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, 0x27, 0x00, + 0x89, 0x01, 0xba, 0x6b, 0x01, 0xa0, 0x01, 0x00, + 0x00, 0x00, 0x39, 0xd0, 0x00, 0x00, 0x00, 0x43, + 0xd1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd2, 0x00, + 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd4, 0x00, 0x00, 0x00, 0x04, 0xd5, 0x00, + 0x00, 0x00, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x04, + 0xd7, 0x00, 0x00, 0x00, 0x04, 0xd8, 0x00, 0x00, + 0x00, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x04, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xdb, 0x00, 0x00, 0x00, + 0x04, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xdd, 0x00, + 0x00, 0x00, 0x04, 0xde, 0x00, 0x00, 0x00, 0x04, + 0xdf, 0x00, 0x00, 0x00, 0x04, 0xe0, 0x00, 0x00, + 0x00, 0x04, 0xe1, 0x00, 0x00, 0x00, 0x04, 0xe2, + 0x00, 0x00, 0x00, 0x26, 0x0f, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x00, 0x0a, 0x4d, 0xe4, 0x00, 0x00, + 0x00, 0x0a, 0x4d, 0xe5, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, + 0xe8, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, + 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x00, 0x04, 0xe6, + 0x00, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x04, 0xec, 0x00, 0x00, 0x00, + 0x4d, 0xed, 0x00, 0x00, 0x00, 0x04, 0xee, 0x00, + 0x00, 0x00, 0x4d, 0xef, 0x00, 0x00, 0x00, 0x04, + 0xf0, 0x00, 0x00, 0x00, 0x4d, 0xf1, 0x00, 0x00, + 0x00, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xf3, + 0x00, 0x00, 0x00, 0x04, 0xf4, 0x00, 0x00, 0x00, + 0x4d, 0xf5, 0x00, 0x00, 0x00, 0x04, 0xf6, 0x00, + 0x00, 0x00, 0x4d, 0xf7, 0x00, 0x00, 0x00, 0x04, + 0xf8, 0x00, 0x00, 0x00, 0x4d, 0xf9, 0x00, 0x00, + 0x00, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xfb, + 0x00, 0x00, 0x00, 0x04, 0xfc, 0x00, 0x00, 0x00, + 0x4d, 0xfd, 0x00, 0x00, 0x00, 0x04, 0xfe, 0x00, + 0x00, 0x00, 0x4d, 0xff, 0x00, 0x00, 0x00, 0x04, + 0x00, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x01, 0x00, + 0x00, 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, 0x03, + 0x01, 0x00, 0x00, 0x04, 0x04, 0x01, 0x00, 0x00, + 0x4d, 0x05, 0x01, 0x00, 0x00, 0x04, 0x06, 0x01, + 0x00, 0x00, 0x4d, 0x07, 0x01, 0x00, 0x00, 0x04, + 0x08, 0x01, 0x00, 0x00, 0x4d, 0x09, 0x01, 0x00, + 0x00, 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x0b, + 0x01, 0x00, 0x00, 0x04, 0x0c, 0x01, 0x00, 0x00, + 0x4d, 0x0d, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x01, + 0x00, 0x00, 0x4d, 0x0f, 0x01, 0x00, 0x00, 0x04, + 0x10, 0x01, 0x00, 0x00, 0x4d, 0x11, 0x01, 0x00, + 0x00, 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, 0x13, + 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, + 0x4d, 0x15, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x4d, 0x17, 0x01, 0x00, 0x00, 0x04, + 0x18, 0x01, 0x00, 0x00, 0x4d, 0x19, 0x01, 0x00, + 0x00, 0x04, 0x1a, 0x01, 0x00, 0x00, 0x4d, 0x1b, + 0x01, 0x00, 0x00, 0x04, 0x1c, 0x01, 0x00, 0x00, + 0x4d, 0x1d, 0x01, 0x00, 0x00, 0x04, 0x1e, 0x01, + 0x00, 0x00, 0x4d, 0x1f, 0x01, 0x00, 0x00, 0x04, + 0x20, 0x01, 0x00, 0x00, 0x4d, 0x21, 0x01, 0x00, + 0x00, 0x04, 0x22, 0x01, 0x00, 0x00, 0x4d, 0x23, + 0x01, 0x00, 0x00, 0x04, 0x24, 0x01, 0x00, 0x00, + 0x4d, 0x24, 0x01, 0x00, 0x00, 0x04, 0x25, 0x01, + 0x00, 0x00, 0x4d, 0x26, 0x01, 0x00, 0x00, 0x04, + 0x27, 0x01, 0x00, 0x00, 0x4d, 0x28, 0x01, 0x00, + 0x00, 0x04, 0x29, 0x01, 0x00, 0x00, 0x4d, 0x2a, + 0x01, 0x00, 0x00, 0x04, 0x2b, 0x01, 0x00, 0x00, + 0x4d, 0x2c, 0x01, 0x00, 0x00, 0x04, 0x2d, 0x01, + 0x00, 0x00, 0x4d, 0x2e, 0x01, 0x00, 0x00, 0x04, + 0x2f, 0x01, 0x00, 0x00, 0x4d, 0x30, 0x01, 0x00, + 0x00, 0x04, 0x31, 0x01, 0x00, 0x00, 0x4d, 0x32, + 0x01, 0x00, 0x00, 0x04, 0x33, 0x01, 0x00, 0x00, + 0x4d, 0x34, 0x01, 0x00, 0x00, 0x04, 0x35, 0x01, + 0x00, 0x00, 0x4d, 0x36, 0x01, 0x00, 0x00, 0x4d, + 0x37, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x38, 0x01, + 0x00, 0x00, 0x4d, 0x39, 0x01, 0x00, 0x00, 0x04, + 0x3a, 0x01, 0x00, 0x00, 0x4d, 0x3b, 0x01, 0x00, + 0x00, 0x04, 0x2d, 0x01, 0x00, 0x00, 0x4d, 0x2e, + 0x01, 0x00, 0x00, 0x04, 0x3c, 0x01, 0x00, 0x00, + 0x4d, 0x28, 0x01, 0x00, 0x00, 0x4d, 0x3d, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x3e, 0x01, 0x00, 0x00, + 0x4d, 0x3f, 0x01, 0x00, 0x00, 0x04, 0x40, 0x01, + 0x00, 0x00, 0x4d, 0x41, 0x01, 0x00, 0x00, 0x04, + 0x08, 0x01, 0x00, 0x00, 0x4d, 0x09, 0x01, 0x00, + 0x00, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0x05, + 0x01, 0x00, 0x00, 0x4d, 0x42, 0x01, 0x00, 0x00, + 0x4d, 0x43, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x0b, + 0x04, 0x44, 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, + 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x04, 0x44, 0x01, 0x00, 0x00, 0x04, 0x44, + 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, + 0x4a, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x58, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x62, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x63, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x64, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x4d, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x4d, 0x68, 0x01, + 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, 0x4d, + 0xd5, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x00, + 0xbe, 0x01, 0xbe, 0x02, 0xbe, 0x03, 0xbe, 0x04, + 0xbe, 0x05, 0xbe, 0x06, 0xbe, 0x07, 0xbe, 0x08, + 0xbe, 0x09, 0xbe, 0x0a, 0xbe, 0x0b, 0x26, 0x0c, + 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x58, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x62, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x4d, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x4d, 0x68, 0x01, 0x00, 0x00, 0x4d, + 0x69, 0x01, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x0c, 0xbe, 0x0d, 0xbe, + 0x0e, 0xbe, 0x0f, 0xbe, 0x10, 0xbe, 0x11, 0xbe, + 0x12, 0xbe, 0x13, 0xbe, 0x14, 0xbe, 0x15, 0xbe, + 0x16, 0xbe, 0x17, 0xbe, 0x18, 0x26, 0x0d, 0x00, + 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, + 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, + 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x26, 0x0d, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, + 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, + 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x58, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x45, + 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x62, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x83, 0x01, 0x00, + 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x83, + 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x4d, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x4d, + 0x68, 0x01, 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, + 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x19, 0xbe, 0x1a, 0xbe, 0x1b, 0xbe, 0x1c, + 0xbe, 0x1d, 0xbe, 0x1e, 0xbe, 0x1f, 0xbe, 0x20, + 0xbe, 0x21, 0xbe, 0x22, 0xbe, 0x23, 0xbe, 0x24, + 0x26, 0x0c, 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x58, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x45, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x62, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x4d, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x4d, 0x68, 0x01, 0x00, + 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x25, 0xbe, + 0x26, 0xbe, 0x27, 0xbe, 0x28, 0xbe, 0x29, 0xbe, + 0x2a, 0xbe, 0x2b, 0xbe, 0x2c, 0xbe, 0x2d, 0xbe, + 0x2e, 0xbe, 0x2f, 0xbe, 0x30, 0xbe, 0x31, 0x26, + 0x0d, 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, + 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, + 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, + 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, + 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, + 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, + 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, + 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, + 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, + 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, + 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, + 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x58, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x62, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x83, + 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, + 0x84, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x65, 0x01, 0x00, 0x00, 0x4d, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x4d, 0x68, 0x01, 0x00, 0x00, 0x4d, 0x69, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x32, 0xbe, 0x33, 0xbe, 0x34, + 0xbe, 0x35, 0xbe, 0x36, 0xbe, 0x37, 0xbe, 0x38, + 0xbe, 0x39, 0xbe, 0x3a, 0xbe, 0x3b, 0xbe, 0x3c, + 0xbe, 0x3d, 0xbe, 0x3e, 0x26, 0x0d, 0x00, 0x4d, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, + 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, + 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, + 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, + 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, + 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, + 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, + 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, + 0x04, 0x91, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, + 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, + 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, + 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, + 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, + 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, + 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x26, 0x0d, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x58, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x62, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x4d, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x4d, + 0x68, 0x01, 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, + 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x3f, 0xbe, 0x40, 0xbe, 0x41, 0xbe, 0x42, + 0xbe, 0x43, 0xbe, 0x44, 0xbe, 0x45, 0xbe, 0x46, + 0xbe, 0x47, 0xbe, 0x48, 0xbe, 0x49, 0xbe, 0x4a, + 0x26, 0x0c, 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x58, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x45, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x62, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x65, 0x01, 0x00, 0x00, 0x4d, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x4d, 0x68, 0x01, 0x00, 0x00, 0x4d, 0x69, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x44, 0x01, 0x00, 0x00, 0x04, 0x45, + 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x04, 0x44, 0x01, 0x00, 0x00, 0x04, + 0x44, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, + 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x58, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x62, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, + 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, + 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x26, 0x04, + 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x92, + 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, + 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, + 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, + 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, + 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x26, 0x04, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x64, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x4d, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x4d, 0x68, 0x01, 0x00, 0x00, + 0x4d, 0x69, 0x01, 0x00, 0x00, 0x4d, 0xd4, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x4b, 0xbe, 0x4c, + 0xbe, 0x4d, 0xbe, 0x4e, 0xbe, 0x4f, 0xbe, 0x50, + 0xbe, 0x51, 0xbe, 0x52, 0xbe, 0x53, 0xbe, 0x54, + 0xbe, 0x55, 0xbe, 0x56, 0xbe, 0x57, 0xbe, 0x58, + 0x26, 0x0e, 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, + 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, + 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, + 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, + 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, + 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, + 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, + 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, + 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x26, 0x0e, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x96, + 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, + 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, + 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, + 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, + 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, + 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, + 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, + 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, + 0xa3, 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x58, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x62, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x04, 0xa4, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x64, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x4d, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x4d, 0x68, 0x01, + 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x59, + 0xbe, 0x5a, 0xbe, 0x5b, 0xbe, 0x5c, 0xbe, 0x5d, + 0xbe, 0x5e, 0xbe, 0x5f, 0xbe, 0x60, 0xbe, 0x61, + 0xbe, 0x62, 0xbe, 0x63, 0xbe, 0x64, 0x26, 0x0c, + 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x04, 0xa5, + 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, + 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, + 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, + 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, + 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, + 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, + 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, + 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, + 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, + 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, + 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, + 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, + 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, + 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x58, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x62, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xb1, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0xb1, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xb1, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x4d, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x4d, + 0x68, 0x01, 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x65, 0xbe, 0x66, 0xbe, 0x67, 0xbe, 0x68, + 0xbe, 0x69, 0xbe, 0x6a, 0xbe, 0x6b, 0xbe, 0x6c, + 0xbe, 0x6d, 0xbe, 0x6e, 0xbe, 0x6f, 0xbe, 0x70, + 0x26, 0x0c, 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, + 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, 0x00, 0x04, + 0xb5, 0x01, 0x00, 0x00, 0x04, 0xb6, 0x01, 0x00, + 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, + 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, + 0x04, 0xba, 0x01, 0x00, 0x00, 0x04, 0xbb, 0x01, + 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, 0x04, + 0xbd, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, + 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, 0x04, 0xc0, + 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, + 0x04, 0xc2, 0x01, 0x00, 0x00, 0x04, 0xc3, 0x01, + 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, 0x04, + 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, + 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, + 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x58, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x45, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x62, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xca, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xca, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x65, 0x01, 0x00, 0x00, 0x4d, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x4d, 0x68, 0x01, 0x00, 0x00, 0x4d, 0x69, + 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x71, 0xbe, 0x72, 0xbe, 0x73, + 0xbe, 0x74, 0xbe, 0x75, 0xbe, 0x76, 0xbe, 0x77, + 0xbe, 0x78, 0xbe, 0x79, 0xbe, 0x7a, 0xbe, 0x7b, + 0xbe, 0x7c, 0x26, 0x0c, 0x00, 0x4d, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, + 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, + 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, 0x04, 0xb6, + 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, + 0x04, 0xb8, 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, + 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, 0x04, + 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, + 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xbe, + 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, + 0x04, 0xc0, 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, + 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, 0x00, 0x04, + 0xc3, 0x01, 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, + 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, + 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, + 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x58, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x62, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xca, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x64, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x4d, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x4d, 0x68, 0x01, 0x00, 0x00, + 0x4d, 0x69, 0x01, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x44, 0x01, 0x00, + 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x44, 0x01, + 0x00, 0x00, 0x04, 0x44, 0x01, 0x00, 0x00, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, + 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x58, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x45, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x62, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xcb, 0x01, + 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, + 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, + 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, + 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, + 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, + 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, + 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, + 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, 0xd8, + 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, + 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, + 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, 0x04, + 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, + 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, 0xe0, + 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, 0x00, + 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, 0xe3, 0x01, + 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, 0x04, + 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, + 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, + 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, + 0x04, 0xea, 0x01, 0x00, 0x00, 0x26, 0x20, 0x00, + 0x04, 0xeb, 0x01, 0x00, 0x00, 0x4d, 0x20, 0x00, + 0x00, 0x80, 0x04, 0xec, 0x01, 0x00, 0x00, 0x4d, + 0x21, 0x00, 0x00, 0x80, 0x04, 0xed, 0x01, 0x00, + 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0xee, + 0x01, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, + 0x04, 0xef, 0x01, 0x00, 0x00, 0x4d, 0x24, 0x00, + 0x00, 0x80, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x4d, + 0x25, 0x00, 0x00, 0x80, 0x04, 0xf1, 0x01, 0x00, + 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0xf2, + 0x01, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, + 0x04, 0xf3, 0x01, 0x00, 0x00, 0x4d, 0x28, 0x00, + 0x00, 0x80, 0x04, 0xf4, 0x01, 0x00, 0x00, 0x4d, + 0x29, 0x00, 0x00, 0x80, 0x04, 0xf5, 0x01, 0x00, + 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0xf6, + 0x01, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, + 0x04, 0xf7, 0x01, 0x00, 0x00, 0x4d, 0x2c, 0x00, + 0x00, 0x80, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x4d, + 0x2d, 0x00, 0x00, 0x80, 0x04, 0xf9, 0x01, 0x00, + 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0xfa, + 0x01, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, + 0x04, 0xfb, 0x01, 0x00, 0x00, 0x4d, 0x30, 0x00, + 0x00, 0x80, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x4d, + 0x31, 0x00, 0x00, 0x80, 0x04, 0xfd, 0x01, 0x00, + 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0xfe, + 0x01, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, + 0x04, 0xff, 0x01, 0x00, 0x00, 0x4d, 0x34, 0x00, + 0x00, 0x80, 0x04, 0x00, 0x02, 0x00, 0x00, 0x4d, + 0x35, 0x00, 0x00, 0x80, 0x04, 0x01, 0x02, 0x00, + 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x02, + 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, + 0x04, 0x03, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, + 0x00, 0x80, 0x04, 0x04, 0x02, 0x00, 0x00, 0x4d, + 0x39, 0x00, 0x00, 0x80, 0x04, 0x05, 0x02, 0x00, + 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x06, + 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, + 0x04, 0x07, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, + 0x00, 0x80, 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, + 0x3d, 0x00, 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, + 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x0a, + 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, + 0x04, 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, + 0x00, 0x80, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, + 0x41, 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, + 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x0e, + 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, + 0x04, 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, + 0x00, 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, + 0x45, 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, + 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x12, + 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, + 0x04, 0x13, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, + 0x00, 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, + 0x49, 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, + 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x16, + 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, + 0x04, 0x17, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, + 0x00, 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, + 0x4d, 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, + 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x1a, + 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, + 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, + 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, + 0x51, 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, + 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x1e, + 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, + 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, + 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, + 0x55, 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, + 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x22, + 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, + 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, + 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, + 0x59, 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, + 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x26, + 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, + 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, + 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, + 0x5d, 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, + 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x2a, + 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, + 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, + 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, + 0x61, 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, + 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x2e, + 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, + 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, + 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, + 0x65, 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, + 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x32, + 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, + 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, + 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, + 0x69, 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, + 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x36, + 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, + 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, + 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, + 0x6d, 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, + 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x3a, + 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, + 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, + 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, + 0x71, 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, + 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x3e, + 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, + 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, + 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, + 0x75, 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, + 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x42, + 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, + 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, + 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, + 0x79, 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, + 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x46, + 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, + 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, + 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, + 0x7d, 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, + 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x4a, + 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, + 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, + 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, + 0x81, 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, + 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x4e, + 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, + 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, + 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, + 0x85, 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, + 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x52, + 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, + 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, + 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, + 0x89, 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, + 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x56, + 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, + 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, + 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, + 0x8d, 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, + 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x5a, + 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, + 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, + 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, + 0x91, 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, + 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x5e, + 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, + 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, + 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, + 0x95, 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, + 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x62, + 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, + 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, + 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, + 0x99, 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, + 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x66, + 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, + 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, + 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, + 0x9d, 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, + 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x6a, + 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, + 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, + 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, + 0xa1, 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, + 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x6e, + 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, + 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, + 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, + 0xa5, 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, + 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x72, + 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, + 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, + 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, + 0xa9, 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, + 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x76, + 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, + 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, + 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, + 0xad, 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, + 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x7a, + 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, + 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, + 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, + 0xb1, 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, + 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0x7e, + 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, + 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, + 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, + 0xb5, 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, + 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0x82, + 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, + 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, + 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, + 0xb9, 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, + 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0x86, + 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, + 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, + 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, + 0xbd, 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, + 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0x8a, + 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, + 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, + 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, + 0xc1, 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, + 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0x8e, + 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, + 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, + 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, + 0xc5, 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, + 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0x92, + 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, + 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, + 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, + 0xc9, 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, + 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0x96, + 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, + 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, + 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, + 0xcd, 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, + 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0x9a, + 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, + 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, + 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, + 0xd1, 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, + 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0x9e, + 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, + 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, + 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, + 0xd5, 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xa2, + 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, + 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xa6, + 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, + 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xaa, + 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, + 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xae, + 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, + 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, + 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, + 0xe5, 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xb2, + 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, 0xe8, 0x00, + 0x00, 0x80, 0x04, 0x59, 0x01, 0x00, 0x00, 0x4d, + 0xe9, 0x00, 0x00, 0x80, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0x03, + 0x01, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, + 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, + 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, + 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, + 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, + 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, + 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, + 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, + 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, + 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, 0xd8, + 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, + 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, + 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, 0x04, + 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, + 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, 0xe0, + 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, 0x00, + 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, 0xe3, 0x01, + 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, 0x04, + 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, + 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, + 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, + 0x04, 0xea, 0x01, 0x00, 0x00, 0x26, 0x20, 0x00, + 0x04, 0xeb, 0x01, 0x00, 0x00, 0x4d, 0x20, 0x00, + 0x00, 0x80, 0x04, 0xec, 0x01, 0x00, 0x00, 0x4d, + 0x21, 0x00, 0x00, 0x80, 0x04, 0xed, 0x01, 0x00, + 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0xee, + 0x01, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, + 0x04, 0xef, 0x01, 0x00, 0x00, 0x4d, 0x24, 0x00, + 0x00, 0x80, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x4d, + 0x25, 0x00, 0x00, 0x80, 0x04, 0xf1, 0x01, 0x00, + 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0xf2, + 0x01, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, + 0x04, 0xf3, 0x01, 0x00, 0x00, 0x4d, 0x28, 0x00, + 0x00, 0x80, 0x04, 0xf4, 0x01, 0x00, 0x00, 0x4d, + 0x29, 0x00, 0x00, 0x80, 0x04, 0xf5, 0x01, 0x00, + 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0xf6, + 0x01, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, + 0x04, 0xf7, 0x01, 0x00, 0x00, 0x4d, 0x2c, 0x00, + 0x00, 0x80, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x4d, + 0x2d, 0x00, 0x00, 0x80, 0x04, 0xf9, 0x01, 0x00, + 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0xfa, + 0x01, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, + 0x04, 0xfb, 0x01, 0x00, 0x00, 0x4d, 0x30, 0x00, + 0x00, 0x80, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x4d, + 0x31, 0x00, 0x00, 0x80, 0x04, 0xfd, 0x01, 0x00, + 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0xfe, + 0x01, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, + 0x04, 0xff, 0x01, 0x00, 0x00, 0x4d, 0x34, 0x00, + 0x00, 0x80, 0x04, 0x00, 0x02, 0x00, 0x00, 0x4d, + 0x35, 0x00, 0x00, 0x80, 0x04, 0x01, 0x02, 0x00, + 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x02, + 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, + 0x04, 0x03, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, + 0x00, 0x80, 0x04, 0x04, 0x02, 0x00, 0x00, 0x4d, + 0x39, 0x00, 0x00, 0x80, 0x04, 0x05, 0x02, 0x00, + 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x06, + 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, + 0x04, 0x07, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, + 0x00, 0x80, 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, + 0x3d, 0x00, 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, + 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x0a, + 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, + 0x04, 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, + 0x00, 0x80, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, + 0x41, 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, + 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x0e, + 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, + 0x04, 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, + 0x00, 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, + 0x45, 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, + 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x12, + 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, + 0x04, 0x13, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, + 0x00, 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, + 0x49, 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, + 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x16, + 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, + 0x04, 0x17, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, + 0x00, 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, + 0x4d, 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, + 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x1a, + 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, + 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, + 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, + 0x51, 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, + 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x1e, + 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, + 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, + 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, + 0x55, 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, + 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x22, + 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, + 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, + 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, + 0x59, 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, + 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x26, + 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, + 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, + 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, + 0x5d, 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, + 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x2a, + 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, + 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, + 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, + 0x61, 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, + 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x2e, + 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, + 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, + 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, + 0x65, 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, + 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x32, + 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, + 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, + 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, + 0x69, 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, + 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x36, + 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, + 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, + 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, + 0x6d, 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, + 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x3a, + 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, + 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, + 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, + 0x71, 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, + 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x3e, + 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, + 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, + 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, + 0x75, 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, + 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x42, + 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, + 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, + 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, + 0x79, 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, + 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x46, + 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, + 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, + 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, + 0x7d, 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, + 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x4a, + 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, + 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, + 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, + 0x81, 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, + 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x4e, + 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, + 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, + 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, + 0x85, 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, + 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x52, + 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, + 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, + 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, + 0x89, 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, + 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x56, + 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, + 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, + 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, + 0x8d, 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, + 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x5a, + 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, + 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, + 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, + 0x91, 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, + 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x5e, + 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, + 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, + 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, + 0x95, 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, + 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x62, + 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, + 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, + 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, + 0x99, 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, + 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x66, + 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, + 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, + 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, + 0x9d, 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, + 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x6a, + 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, + 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, + 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, + 0xa1, 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, + 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x6e, + 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, + 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, + 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, + 0xa5, 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, + 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x72, + 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, + 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, + 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, + 0xa9, 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, + 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x76, + 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, + 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, + 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, + 0xad, 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, + 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x7a, + 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, + 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, + 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, + 0xb1, 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, + 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0x7e, + 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, + 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, + 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, + 0xb5, 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, + 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0x82, + 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, + 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, + 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, + 0xb9, 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, + 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0x86, + 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, + 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, + 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, + 0xbd, 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, + 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0x8a, + 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, + 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, + 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, + 0xc1, 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, + 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0x8e, + 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, + 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, + 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, + 0xc5, 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, + 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0x92, + 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, + 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, + 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, + 0xc9, 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, + 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0x96, + 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, + 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, + 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, + 0xcd, 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, + 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0x9a, + 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, + 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, + 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, + 0xd1, 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, + 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0x9e, + 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, + 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, + 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, + 0xd5, 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xa2, + 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, + 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xa6, + 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, + 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xaa, + 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, + 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xae, + 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, + 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, + 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, + 0xe5, 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xb2, + 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, + 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x00, + 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, + 0xe9, 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0xb6, + 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xcb, 0x01, + 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, + 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, + 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, + 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, + 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, + 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, + 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, + 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, 0xd8, + 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, + 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, + 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, 0x04, + 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, + 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, 0xe0, + 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, 0x00, + 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, 0xe3, 0x01, + 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, 0x04, + 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, 0x00, + 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, 0xe8, + 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, 0x00, + 0x04, 0xea, 0x01, 0x00, 0x00, 0x26, 0x20, 0x00, + 0x04, 0xeb, 0x01, 0x00, 0x00, 0x4d, 0x20, 0x00, + 0x00, 0x80, 0x04, 0xec, 0x01, 0x00, 0x00, 0x4d, + 0x21, 0x00, 0x00, 0x80, 0x04, 0xed, 0x01, 0x00, + 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0xee, + 0x01, 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, + 0x04, 0xef, 0x01, 0x00, 0x00, 0x4d, 0x24, 0x00, + 0x00, 0x80, 0x04, 0xf0, 0x01, 0x00, 0x00, 0x4d, + 0x25, 0x00, 0x00, 0x80, 0x04, 0xf1, 0x01, 0x00, + 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0xf2, + 0x01, 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, + 0x04, 0xf3, 0x01, 0x00, 0x00, 0x4d, 0x28, 0x00, + 0x00, 0x80, 0x04, 0xf4, 0x01, 0x00, 0x00, 0x4d, + 0x29, 0x00, 0x00, 0x80, 0x04, 0xf5, 0x01, 0x00, + 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0xf6, + 0x01, 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, + 0x04, 0xf7, 0x01, 0x00, 0x00, 0x4d, 0x2c, 0x00, + 0x00, 0x80, 0x04, 0xf8, 0x01, 0x00, 0x00, 0x4d, + 0x2d, 0x00, 0x00, 0x80, 0x04, 0xf9, 0x01, 0x00, + 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0xfa, + 0x01, 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, + 0x04, 0xfb, 0x01, 0x00, 0x00, 0x4d, 0x30, 0x00, + 0x00, 0x80, 0x04, 0xfc, 0x01, 0x00, 0x00, 0x4d, + 0x31, 0x00, 0x00, 0x80, 0x04, 0xfd, 0x01, 0x00, + 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0xfe, + 0x01, 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, + 0x04, 0xff, 0x01, 0x00, 0x00, 0x4d, 0x34, 0x00, + 0x00, 0x80, 0x04, 0x00, 0x02, 0x00, 0x00, 0x4d, + 0x35, 0x00, 0x00, 0x80, 0x04, 0x01, 0x02, 0x00, + 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0x02, + 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, + 0x04, 0x03, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, + 0x00, 0x80, 0x04, 0x04, 0x02, 0x00, 0x00, 0x4d, + 0x39, 0x00, 0x00, 0x80, 0x04, 0x05, 0x02, 0x00, + 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0x06, + 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, + 0x04, 0x07, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, + 0x00, 0x80, 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, + 0x3d, 0x00, 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, + 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0x0a, + 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, + 0x04, 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, + 0x00, 0x80, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, + 0x41, 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, + 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0x0e, + 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, + 0x04, 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, + 0x00, 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, + 0x45, 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, + 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0x12, + 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, + 0x04, 0x13, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, + 0x00, 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, + 0x49, 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, + 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0x16, + 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, + 0x04, 0x17, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, + 0x00, 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, + 0x4d, 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, + 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0x1a, + 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, + 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, + 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, + 0x51, 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, + 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0x1e, + 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, + 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, + 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, + 0x55, 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, + 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0x22, + 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, + 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, + 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, + 0x59, 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, + 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0x26, + 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, + 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, + 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, + 0x5d, 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, + 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x2a, + 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, + 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, + 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, + 0x61, 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, + 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x2e, + 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, + 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, + 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, + 0x65, 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, + 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x32, + 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, + 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, + 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, + 0x69, 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, + 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x36, + 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, + 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, + 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, + 0x6d, 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, + 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x3a, + 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, + 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, + 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, + 0x71, 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, + 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x3e, + 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, + 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, + 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, + 0x75, 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, + 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x42, + 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, + 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, + 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, + 0x79, 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, + 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x46, + 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, + 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, + 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, + 0x7d, 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, + 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x4a, + 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, + 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, + 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, + 0x81, 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, + 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x4e, + 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, + 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, + 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, + 0x85, 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, + 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x52, + 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, + 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, + 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, + 0x89, 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, + 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x56, + 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, + 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, + 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, + 0x8d, 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, + 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x5a, + 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, + 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, + 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, + 0x91, 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, + 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x5e, + 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, + 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, + 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, + 0x95, 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, + 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x62, + 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, + 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, + 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, + 0x99, 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, + 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x66, + 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, + 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, + 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, + 0x9d, 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, + 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x6a, + 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, + 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, + 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, + 0xa1, 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, + 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x6e, + 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, + 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, + 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, + 0xa5, 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, + 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x72, + 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, + 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, + 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, + 0xa9, 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, + 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x76, + 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, + 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, + 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, + 0xad, 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, + 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x7a, + 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, + 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, + 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, + 0xb1, 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, + 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0x7e, + 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, + 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, + 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, + 0xb5, 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, + 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0x82, + 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, + 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, + 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, + 0xb9, 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, + 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0x86, + 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, + 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, + 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, + 0xbd, 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, + 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0x8a, + 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, + 0x04, 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, + 0x00, 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, + 0xc1, 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, + 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0x8e, + 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, + 0x04, 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, + 0x00, 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, + 0xc5, 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, + 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0x92, + 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, + 0x04, 0x93, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, + 0x00, 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, + 0xc9, 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, + 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0x96, + 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, + 0x04, 0x97, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, + 0x00, 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, + 0xcd, 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, + 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0x9a, + 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, + 0x04, 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, + 0x00, 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, + 0xd1, 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, + 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0x9e, + 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, + 0x04, 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, + 0x00, 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, + 0xd5, 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0xa2, + 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, + 0x04, 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0xa6, + 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, + 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0xaa, + 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, + 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0xae, + 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, + 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, + 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, + 0xe5, 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0xb2, + 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, + 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x00, + 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, + 0xe9, 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0xb6, + 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x4d, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x4d, 0x68, 0x01, 0x00, 0x00, 0x4d, + 0x69, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x7d, 0xbe, 0x7e, 0xbe, + 0x7f, 0xbe, 0x80, 0xbe, 0x81, 0xbe, 0x82, 0xbe, + 0x83, 0xbe, 0x84, 0xbe, 0x85, 0xbe, 0x86, 0xbe, + 0x87, 0xbe, 0x88, 0x26, 0x0c, 0x00, 0x4d, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0xb7, 0x02, 0x00, 0x00, + 0x04, 0xb8, 0x02, 0x00, 0x00, 0x04, 0xb9, 0x02, + 0x00, 0x00, 0x04, 0xba, 0x02, 0x00, 0x00, 0x04, + 0xbb, 0x02, 0x00, 0x00, 0x04, 0xbc, 0x02, 0x00, + 0x00, 0x04, 0xbd, 0x02, 0x00, 0x00, 0x04, 0xbe, + 0x02, 0x00, 0x00, 0x04, 0xbf, 0x02, 0x00, 0x00, + 0x04, 0xc0, 0x02, 0x00, 0x00, 0x04, 0xc1, 0x02, + 0x00, 0x00, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xb7, 0x02, 0x00, 0x00, 0x04, 0xb8, 0x02, 0x00, + 0x00, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x04, 0xba, + 0x02, 0x00, 0x00, 0x04, 0xbb, 0x02, 0x00, 0x00, + 0x04, 0xbc, 0x02, 0x00, 0x00, 0x04, 0xbd, 0x02, + 0x00, 0x00, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x04, + 0xbf, 0x02, 0x00, 0x00, 0x04, 0xc0, 0x02, 0x00, + 0x00, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x04, 0xc2, + 0x02, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x58, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x62, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xc3, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x04, 0xc3, 0x02, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xc3, 0x02, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x64, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x4d, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x4d, 0x68, 0x01, 0x00, + 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x44, 0x01, + 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, + 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x44, + 0x01, 0x00, 0x00, 0x04, 0x44, 0x01, 0x00, 0x00, + 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, + 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x58, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x62, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xc4, + 0x02, 0x00, 0x00, 0x04, 0xc5, 0x02, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0xc4, 0x02, 0x00, 0x00, 0x04, 0xc5, 0x02, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x04, + 0xc5, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x65, 0x01, 0x00, 0x00, 0x4d, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x4d, 0x68, 0x01, 0x00, 0x00, 0x4d, 0x69, + 0x01, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, + 0x4d, 0xc6, 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x02, + 0x00, 0x00, 0x0b, 0x04, 0xc8, 0x02, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xc9, 0x02, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, + 0xcb, 0x02, 0x00, 0x00, 0x04, 0xcc, 0x02, 0x00, + 0x00, 0x4d, 0xcd, 0x02, 0x00, 0x00, 0x4d, 0xce, + 0x02, 0x00, 0x00, 0x0b, 0x04, 0xcf, 0x02, 0x00, + 0x00, 0x4d, 0xcb, 0x02, 0x00, 0x00, 0x04, 0xd0, + 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x02, 0x00, 0x00, + 0x4d, 0xd1, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xd2, + 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x02, 0x00, 0x00, + 0x04, 0xd3, 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x02, + 0x00, 0x00, 0x4d, 0xd4, 0x02, 0x00, 0x00, 0xb6, + 0x4d, 0xd5, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x02, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xd7, 0x02, 0x00, + 0x00, 0x4d, 0xce, 0x02, 0x00, 0x00, 0x04, 0xd8, + 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x02, 0x00, 0x00, + 0x04, 0xda, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x02, + 0x00, 0x00, 0x04, 0xdc, 0x02, 0x00, 0x00, 0x4d, + 0xdd, 0x02, 0x00, 0x00, 0x04, 0xde, 0x02, 0x00, + 0x00, 0x4d, 0xdf, 0x02, 0x00, 0x00, 0x04, 0xe0, + 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x02, 0x00, 0x00, + 0x04, 0xe2, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x02, + 0x00, 0x00, 0x4d, 0xe4, 0x02, 0x00, 0x00, 0x0b, + 0x04, 0xd7, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x02, + 0x00, 0x00, 0x04, 0xd8, 0x02, 0x00, 0x00, 0x4d, + 0xd9, 0x02, 0x00, 0x00, 0x04, 0xda, 0x02, 0x00, + 0x00, 0x4d, 0xdb, 0x02, 0x00, 0x00, 0x04, 0xe5, + 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x02, 0x00, 0x00, + 0x04, 0xe6, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x02, + 0x00, 0x00, 0x04, 0xe0, 0x02, 0x00, 0x00, 0x4d, + 0xe1, 0x02, 0x00, 0x00, 0x04, 0xe2, 0x02, 0x00, + 0x00, 0x4d, 0xe3, 0x02, 0x00, 0x00, 0x4d, 0xc8, + 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x02, 0x00, 0x00, + 0x0b, 0x04, 0xe8, 0x02, 0x00, 0x00, 0x4d, 0xe9, + 0x02, 0x00, 0x00, 0x04, 0xea, 0x02, 0x00, 0x00, + 0x4d, 0xeb, 0x02, 0x00, 0x00, 0x04, 0xec, 0x02, + 0x00, 0x00, 0x4d, 0xed, 0x02, 0x00, 0x00, 0x04, + 0xee, 0x02, 0x00, 0x00, 0x4d, 0xef, 0x02, 0x00, + 0x00, 0x04, 0xf0, 0x02, 0x00, 0x00, 0x4d, 0xf1, + 0x02, 0x00, 0x00, 0x04, 0xf2, 0x02, 0x00, 0x00, + 0x4d, 0xf3, 0x02, 0x00, 0x00, 0x04, 0xf4, 0x02, + 0x00, 0x00, 0x4d, 0xf5, 0x02, 0x00, 0x00, 0x04, + 0xf6, 0x02, 0x00, 0x00, 0x4d, 0xf7, 0x02, 0x00, + 0x00, 0x04, 0xf8, 0x02, 0x00, 0x00, 0x4d, 0xf9, + 0x02, 0x00, 0x00, 0x04, 0xfa, 0x02, 0x00, 0x00, + 0x4d, 0xfb, 0x02, 0x00, 0x00, 0x04, 0xfc, 0x02, + 0x00, 0x00, 0x4d, 0xfd, 0x02, 0x00, 0x00, 0x04, + 0xfe, 0x02, 0x00, 0x00, 0x4d, 0xff, 0x02, 0x00, + 0x00, 0x04, 0x00, 0x03, 0x00, 0x00, 0x4d, 0x01, + 0x03, 0x00, 0x00, 0x04, 0x02, 0x03, 0x00, 0x00, + 0x4d, 0x03, 0x03, 0x00, 0x00, 0x04, 0x04, 0x03, + 0x00, 0x00, 0x4d, 0x05, 0x03, 0x00, 0x00, 0x04, + 0x06, 0x03, 0x00, 0x00, 0x4d, 0x07, 0x03, 0x00, + 0x00, 0x04, 0x08, 0x03, 0x00, 0x00, 0x4d, 0x09, + 0x03, 0x00, 0x00, 0x04, 0x0a, 0x03, 0x00, 0x00, + 0x4d, 0x0b, 0x03, 0x00, 0x00, 0x04, 0x0c, 0x03, + 0x00, 0x00, 0x4d, 0x0d, 0x03, 0x00, 0x00, 0x04, + 0x0e, 0x03, 0x00, 0x00, 0x4d, 0x0f, 0x03, 0x00, + 0x00, 0x04, 0x10, 0x03, 0x00, 0x00, 0x4d, 0x11, + 0x03, 0x00, 0x00, 0x04, 0x12, 0x03, 0x00, 0x00, + 0x4d, 0x13, 0x03, 0x00, 0x00, 0x4d, 0x14, 0x03, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x00, 0x24, + 0x01, 0x00, 0xcc, 0x28, 0xaa, 0x0c, 0x01, 0x00, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, + 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, + 0x33, 0x07, 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_uz_size = 24735; + +const uint8_t intl_uz[24735] = { + 0x01, 0xd7, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x75, 0x7a, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x10, + 0x7b, 0x31, 0x7d, 0x2c, 0x20, 0x7b, 0x30, 0x7d, + 0x0a, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, + 0x65, 0x64, 0x69, 0x75, 0x6d, 0x08, 0x66, 0x75, + 0x6c, 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x02, + 0x64, 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, 0x08, + 0x64, 0x2c, 0x20, 0x45, 0x04, 0x45, 0x64, 0x12, + 0x45, 0x2c, 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x20, + 0x61, 0x06, 0x45, 0x68, 0x6d, 0x10, 0x45, 0x2c, + 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x06, 0x45, + 0x48, 0x6d, 0x18, 0x45, 0x2c, 0x20, 0x68, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, 0x08, + 0x45, 0x68, 0x6d, 0x73, 0x16, 0x45, 0x2c, 0x20, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x08, 0x45, 0x48, 0x6d, 0x73, 0x06, 0x47, 0x20, + 0x79, 0x04, 0x47, 0x79, 0x10, 0x4d, 0x4d, 0x4d, + 0x2c, 0x20, 0x47, 0x20, 0x79, 0x0a, 0x47, 0x79, + 0x4d, 0x4d, 0x4d, 0x14, 0x64, 0x2d, 0x4d, 0x4d, + 0x4d, 0x2c, 0x20, 0x47, 0x20, 0x79, 0x0c, 0x47, + 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x1a, 0x45, 0x2c, + 0x20, 0x64, 0x2d, 0x4d, 0x4d, 0x4d, 0x2c, 0x20, + 0x47, 0x20, 0x79, 0x0e, 0x47, 0x79, 0x4d, 0x4d, + 0x4d, 0x45, 0x64, 0x06, 0x68, 0x20, 0x61, 0x02, + 0x68, 0x04, 0x48, 0x48, 0x02, 0x48, 0x0c, 0x68, + 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x04, 0x68, 0x6d, + 0x0a, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x04, 0x48, + 0x6d, 0x12, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x61, 0x06, 0x68, 0x6d, 0x73, 0x10, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x06, 0x48, 0x6d, 0x73, 0x16, 0x68, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x28, 0x76, 0x29, + 0x08, 0x68, 0x6d, 0x73, 0x76, 0x18, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x28, + 0x76, 0x29, 0x08, 0x48, 0x6d, 0x73, 0x76, 0x10, + 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x28, 0x76, 0x29, + 0x06, 0x68, 0x6d, 0x76, 0x12, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x20, 0x28, 0x76, 0x29, 0x06, 0x48, + 0x6d, 0x76, 0x04, 0x4c, 0x4c, 0x02, 0x4d, 0x0a, + 0x64, 0x64, 0x2f, 0x4d, 0x4d, 0x04, 0x4d, 0x64, + 0x10, 0x45, 0x2c, 0x20, 0x64, 0x64, 0x2f, 0x4d, + 0x4d, 0x06, 0x4d, 0x45, 0x64, 0x06, 0x4c, 0x4c, + 0x4c, 0x06, 0x4d, 0x4d, 0x4d, 0x0a, 0x64, 0x2d, + 0x4d, 0x4d, 0x4d, 0x08, 0x4d, 0x4d, 0x4d, 0x64, + 0x10, 0x45, 0x2c, 0x20, 0x64, 0x2d, 0x4d, 0x4d, + 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0c, + 0x64, 0x2d, 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, 0x4d, + 0x4d, 0x4d, 0x4d, 0x64, 0x0a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x04, 0x6d, 0x73, 0x02, 0x79, 0x08, + 0x4d, 0x4d, 0x2f, 0x79, 0x04, 0x79, 0x4d, 0x0e, + 0x64, 0x64, 0x2f, 0x4d, 0x4d, 0x2f, 0x79, 0x06, + 0x79, 0x4d, 0x64, 0x14, 0x45, 0x2c, 0x20, 0x64, + 0x64, 0x2f, 0x4d, 0x4d, 0x2f, 0x79, 0x08, 0x79, + 0x4d, 0x45, 0x64, 0x0c, 0x4d, 0x4d, 0x4d, 0x2c, + 0x20, 0x79, 0x08, 0x79, 0x4d, 0x4d, 0x4d, 0x10, + 0x64, 0x2d, 0x4d, 0x4d, 0x4d, 0x2c, 0x20, 0x79, + 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x16, 0x45, + 0x2c, 0x20, 0x64, 0x2d, 0x4d, 0x4d, 0x4d, 0x2c, + 0x20, 0x79, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x45, + 0x64, 0x0e, 0x4d, 0x4d, 0x4d, 0x4d, 0x2c, 0x20, + 0x79, 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x0c, + 0x79, 0x2c, 0x20, 0x51, 0x51, 0x51, 0x08, 0x79, + 0x51, 0x51, 0x51, 0x0e, 0x79, 0x2c, 0x20, 0x51, + 0x51, 0x51, 0x51, 0x0a, 0x79, 0x51, 0x51, 0x51, + 0x51, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x73, 0x1e, 0x45, 0x45, 0x45, 0x45, 0x2c, + 0x20, 0x79, 0x20, 0x4d, 0x4d, 0x4d, 0x4d, 0x20, + 0x64, 0x64, 0x14, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, + 0x45, 0x45, 0x45, 0x45, 0x64, 0x12, 0x64, 0x2d, + 0x4d, 0x4d, 0x4d, 0x4d, 0x2c, 0x20, 0x79, 0x0c, + 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x10, 0x64, + 0x64, 0x2f, 0x4d, 0x4d, 0x2f, 0x79, 0x79, 0x16, + 0x64, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x73, 0x1c, 0x48, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x28, 0x7a, 0x7a, 0x7a, + 0x7a, 0x29, 0x12, 0x68, 0x6d, 0x6d, 0x73, 0x73, + 0x7a, 0x7a, 0x7a, 0x7a, 0x16, 0x48, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x28, 0x7a, 0x29, + 0x08, 0x68, 0x6d, 0x73, 0x7a, 0x16, 0x74, 0x69, + 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x73, 0x0e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x73, 0x02, 0x59, 0x02, 0x46, 0x02, 0x41, 0x02, + 0x49, 0x02, 0x53, 0x02, 0x4f, 0x02, 0x4e, 0x02, + 0x44, 0x0c, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x06, 0x79, 0x61, 0x6e, 0x06, 0x66, 0x65, 0x76, + 0x06, 0x6d, 0x61, 0x72, 0x06, 0x61, 0x70, 0x72, + 0x06, 0x6d, 0x61, 0x79, 0x06, 0x69, 0x79, 0x6e, + 0x06, 0x69, 0x79, 0x6c, 0x06, 0x61, 0x76, 0x67, + 0x06, 0x73, 0x65, 0x6e, 0x06, 0x6f, 0x6b, 0x74, + 0x06, 0x6e, 0x6f, 0x79, 0x06, 0x64, 0x65, 0x6b, + 0x0c, 0x79, 0x61, 0x6e, 0x76, 0x61, 0x72, 0x0c, + 0x66, 0x65, 0x76, 0x72, 0x61, 0x6c, 0x08, 0x6d, + 0x61, 0x72, 0x74, 0x0a, 0x61, 0x70, 0x72, 0x65, + 0x6c, 0x08, 0x69, 0x79, 0x75, 0x6e, 0x08, 0x69, + 0x79, 0x75, 0x6c, 0x0c, 0x61, 0x76, 0x67, 0x75, + 0x73, 0x74, 0x0e, 0x53, 0x65, 0x6e, 0x74, 0x61, + 0x62, 0x72, 0x0c, 0x4f, 0x6b, 0x74, 0x61, 0x62, + 0x72, 0x0c, 0x6e, 0x6f, 0x79, 0x61, 0x62, 0x72, + 0x0c, 0x64, 0x65, 0x6b, 0x61, 0x62, 0x72, 0x0c, + 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x73, 0x02, 0x43, + 0x02, 0x50, 0x02, 0x4a, 0x04, 0x59, 0x61, 0x04, + 0x44, 0x75, 0x04, 0x53, 0x65, 0x04, 0x43, 0x68, + 0x04, 0x50, 0x61, 0x04, 0x4a, 0x75, 0x04, 0x53, + 0x68, 0x12, 0x79, 0x61, 0x6b, 0x73, 0x68, 0x61, + 0x6e, 0x62, 0x61, 0x10, 0x64, 0x75, 0x73, 0x68, + 0x61, 0x6e, 0x62, 0x61, 0x10, 0x73, 0x65, 0x73, + 0x68, 0x61, 0x6e, 0x62, 0x61, 0x14, 0x63, 0x68, + 0x6f, 0x72, 0x73, 0x68, 0x61, 0x6e, 0x62, 0x61, + 0x12, 0x70, 0x61, 0x79, 0x73, 0x68, 0x61, 0x6e, + 0x62, 0x61, 0x08, 0x6a, 0x75, 0x6d, 0x61, 0x0c, + 0x73, 0x68, 0x61, 0x6e, 0x62, 0x61, 0x08, 0x64, + 0x61, 0x79, 0x73, 0x04, 0x42, 0x45, 0x08, 0x65, + 0x72, 0x61, 0x73, 0x04, 0x54, 0x4f, 0x04, 0x61, + 0x6d, 0x04, 0x54, 0x4b, 0x04, 0x70, 0x6d, 0x14, + 0x64, 0x61, 0x79, 0x50, 0x65, 0x72, 0x69, 0x6f, + 0x64, 0x73, 0x06, 0x4d, 0x30, 0x31, 0x06, 0x4d, + 0x30, 0x32, 0x06, 0x4d, 0x30, 0x33, 0x06, 0x4d, + 0x30, 0x34, 0x06, 0x4d, 0x30, 0x35, 0x06, 0x4d, + 0x30, 0x36, 0x06, 0x4d, 0x30, 0x37, 0x06, 0x4d, + 0x30, 0x38, 0x06, 0x4d, 0x30, 0x39, 0x06, 0x4d, + 0x31, 0x30, 0x06, 0x4d, 0x31, 0x31, 0x06, 0x4d, + 0x31, 0x32, 0x08, 0x54, 0x6f, 0x75, 0x74, 0x08, + 0x42, 0x61, 0x62, 0x61, 0x0a, 0x48, 0x61, 0x74, + 0x6f, 0x72, 0x0a, 0x4b, 0x69, 0x61, 0x68, 0x6b, + 0x08, 0x54, 0x6f, 0x62, 0x61, 0x0c, 0x41, 0x6d, + 0x73, 0x68, 0x69, 0x72, 0x10, 0x42, 0x61, 0x72, + 0x61, 0x6d, 0x68, 0x61, 0x74, 0x12, 0x42, 0x61, + 0x72, 0x61, 0x6d, 0x6f, 0x75, 0x64, 0x61, 0x0e, + 0x42, 0x61, 0x73, 0x68, 0x61, 0x6e, 0x73, 0x0a, + 0x50, 0x61, 0x6f, 0x6e, 0x61, 0x08, 0x45, 0x70, + 0x65, 0x70, 0x0a, 0x4d, 0x65, 0x73, 0x72, 0x61, + 0x0a, 0x4e, 0x61, 0x73, 0x69, 0x65, 0x08, 0x45, + 0x52, 0x41, 0x30, 0x08, 0x45, 0x52, 0x41, 0x31, + 0x10, 0x4d, 0x65, 0x73, 0x6b, 0x65, 0x72, 0x65, + 0x6d, 0x0c, 0x54, 0x65, 0x6b, 0x65, 0x6d, 0x74, + 0x0a, 0x48, 0x65, 0x64, 0x61, 0x72, 0x0c, 0x54, + 0x61, 0x68, 0x73, 0x61, 0x73, 0x06, 0x54, 0x65, + 0x72, 0x0e, 0x59, 0x65, 0x6b, 0x61, 0x74, 0x69, + 0x74, 0x0e, 0x4d, 0x65, 0x67, 0x61, 0x62, 0x69, + 0x74, 0x0c, 0x4d, 0x69, 0x61, 0x7a, 0x69, 0x61, + 0x0c, 0x47, 0x65, 0x6e, 0x62, 0x6f, 0x74, 0x08, + 0x53, 0x65, 0x6e, 0x65, 0x0a, 0x48, 0x61, 0x6d, + 0x6c, 0x65, 0x0e, 0x4e, 0x65, 0x68, 0x61, 0x73, + 0x73, 0x65, 0x0e, 0x50, 0x61, 0x67, 0x75, 0x6d, + 0x65, 0x6e, 0x08, 0x6d, 0x2e, 0x61, 0x2e, 0x0e, + 0x6d, 0x69, 0x6c, 0x6f, 0x64, 0x69, 0x79, 0x08, + 0x65, 0x2e, 0x61, 0x2e, 0x04, 0x43, 0x45, 0x20, + 0x6d, 0x69, 0x6c, 0x6f, 0x64, 0x64, 0x61, 0x6e, + 0x20, 0x61, 0x76, 0x76, 0x61, 0x6c, 0x67, 0x69, + 0x22, 0x65, 0x72, 0x61, 0x6d, 0x69, 0x7a, 0x64, + 0x61, 0x6e, 0x20, 0x61, 0x76, 0x76, 0x61, 0x6c, + 0x67, 0x69, 0x0c, 0x54, 0x69, 0x73, 0x68, 0x72, + 0x69, 0x0e, 0x48, 0x65, 0x73, 0x68, 0x76, 0x61, + 0x6e, 0x0c, 0x4b, 0x69, 0x73, 0x6c, 0x65, 0x76, + 0x0a, 0x54, 0x65, 0x76, 0x65, 0x74, 0x0c, 0x53, + 0x68, 0x65, 0x76, 0x61, 0x74, 0x0c, 0x41, 0x64, + 0x61, 0x72, 0x20, 0x49, 0x08, 0x41, 0x64, 0x61, + 0x72, 0x0a, 0x4e, 0x69, 0x73, 0x61, 0x6e, 0x08, + 0x49, 0x79, 0x61, 0x72, 0x0a, 0x53, 0x69, 0x76, + 0x61, 0x6e, 0x0a, 0x54, 0x61, 0x6d, 0x75, 0x7a, + 0x04, 0x41, 0x76, 0x08, 0x45, 0x6c, 0x75, 0x6c, + 0x0e, 0x41, 0x64, 0x61, 0x72, 0x20, 0x49, 0x49, + 0x04, 0x41, 0x4d, 0x0e, 0x43, 0x68, 0x61, 0x69, + 0x74, 0x72, 0x61, 0x10, 0x56, 0x61, 0x69, 0x73, + 0x61, 0x6b, 0x68, 0x61, 0x10, 0x4a, 0x79, 0x61, + 0x69, 0x73, 0x74, 0x68, 0x61, 0x0c, 0x41, 0x73, + 0x61, 0x64, 0x68, 0x61, 0x0e, 0x53, 0x72, 0x61, + 0x76, 0x61, 0x6e, 0x61, 0x0c, 0x42, 0x68, 0x61, + 0x64, 0x72, 0x61, 0x0c, 0x41, 0x73, 0x76, 0x69, + 0x6e, 0x61, 0x0e, 0x4b, 0x61, 0x72, 0x74, 0x69, + 0x6b, 0x61, 0x14, 0x41, 0x67, 0x72, 0x61, 0x68, + 0x61, 0x79, 0x61, 0x6e, 0x61, 0x0a, 0x50, 0x61, + 0x75, 0x73, 0x61, 0x0a, 0x4d, 0x61, 0x67, 0x68, + 0x61, 0x10, 0x50, 0x68, 0x61, 0x6c, 0x67, 0x75, + 0x6e, 0x61, 0x08, 0x53, 0x61, 0x6b, 0x61, 0x08, + 0x4d, 0x75, 0x68, 0x2e, 0x08, 0x53, 0x61, 0x66, + 0x2e, 0x0c, 0x52, 0x61, 0x62, 0x2e, 0x20, 0x49, + 0x0e, 0x52, 0x61, 0x62, 0x2e, 0x20, 0x49, 0x49, + 0x0c, 0x4a, 0x75, 0x6d, 0x2e, 0x20, 0x49, 0x0e, + 0x4a, 0x75, 0x6d, 0x2e, 0x20, 0x49, 0x49, 0x08, + 0x52, 0x61, 0x6a, 0x2e, 0x08, 0x53, 0x68, 0x61, + 0x2e, 0x08, 0x52, 0x61, 0x6d, 0x2e, 0x0a, 0x53, + 0x68, 0x61, 0x77, 0x2e, 0x11, 0x44, 0x00, 0x68, + 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, 0x2d, + 0x00, 0x51, 0x00, 0x2e, 0x00, 0x11, 0x44, 0x00, + 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, 0x6c, 0x00, + 0x2d, 0x00, 0x48, 0x00, 0x2e, 0x00, 0x10, 0x4d, + 0x75, 0x68, 0x61, 0x72, 0x72, 0x61, 0x6d, 0x0a, + 0x53, 0x61, 0x66, 0x61, 0x72, 0x1d, 0x52, 0x00, + 0x6f, 0x00, 0x62, 0x00, 0x69, 0x00, 0xbc, 0x02, + 0x20, 0x00, 0x75, 0x00, 0x6c, 0x00, 0x2d, 0x00, + 0x61, 0x00, 0x76, 0x00, 0x76, 0x00, 0x61, 0x00, + 0x6c, 0x00, 0x1b, 0x52, 0x00, 0x6f, 0x00, 0x62, + 0x00, 0x69, 0x00, 0xbc, 0x02, 0x20, 0x00, 0x75, + 0x00, 0x6c, 0x00, 0x2d, 0x00, 0x6f, 0x00, 0x78, + 0x00, 0x69, 0x00, 0x72, 0x00, 0x1c, 0x4a, 0x75, + 0x6d, 0x61, 0x64, 0x20, 0x75, 0x6c, 0x2d, 0x61, + 0x76, 0x76, 0x61, 0x6c, 0x1a, 0x4a, 0x75, 0x6d, + 0x61, 0x64, 0x20, 0x75, 0x6c, 0x2d, 0x6f, 0x78, + 0x69, 0x72, 0x0a, 0x52, 0x61, 0x6a, 0x61, 0x62, + 0x0f, 0x53, 0x00, 0x68, 0x00, 0x61, 0x00, 0xbc, + 0x02, 0x62, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x0e, + 0x52, 0x61, 0x6d, 0x61, 0x7a, 0x6f, 0x6e, 0x0e, + 0x53, 0x68, 0x61, 0x76, 0x76, 0x6f, 0x6c, 0x13, + 0x5a, 0x00, 0x75, 0x00, 0x6c, 0x00, 0x2d, 0x00, + 0x71, 0x00, 0x61, 0x00, 0xbc, 0x02, 0x64, 0x00, + 0x61, 0x00, 0x12, 0x5a, 0x75, 0x6c, 0x2d, 0x68, + 0x69, 0x6a, 0x6a, 0x61, 0x04, 0x41, 0x48, 0x1f, + 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, 0x36, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x48, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x36, 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x36, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x75, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x36, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x1d, 0x57, 0x00, 0x61, 0x00, 0x64, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x52, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, 0x59, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, + 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x70, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x2b, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x2d, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x2d, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x2d, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x2a, 0x4a, 0x69, 0x6e, + 0x67, 0x6f, 0x2d, 0x6b, 0x65, 0x69, 0x75, 0x6e, + 0x20, 0x28, 0x37, 0x36, 0x37, 0x2d, 0x37, 0x37, + 0x30, 0x29, 0x1d, 0x48, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x1f, 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x64, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x1f, 0x4b, 0x00, 0x4d, 0x01, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1d, 0x4a, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, + 0x61, 0x00, 0x6a, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1f, 0x53, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x20, 0x54, 0x65, 0x6e, 0x2d, 0x61, 0x6e, 0x20, + 0x28, 0x38, 0x35, 0x37, 0x2d, 0x38, 0x35, 0x39, + 0x29, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x21, 0x47, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x61, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1d, 0x45, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, + 0x45, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4a, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x34, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1b, 0x4c, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1d, 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x41, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, + 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x38, 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, + 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, + 0x69, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, 0x73, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x69, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x29, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x27, 0x4a, 0x00, 0x69, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x45, 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4c, 0x01, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x61, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x25, 0x4a, 0x00, 0x4d, 0x01, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x24, 0x54, 0x65, 0x6e, + 0x2d, 0x65, 0x69, 0x20, 0x28, 0x31, 0x31, 0x31, + 0x30, 0x2d, 0x31, 0x31, 0x31, 0x33, 0x29, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x44, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x6a, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x48, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x27, 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1f, 0x4c, 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x6d, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x41, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x4a, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x59, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, + 0x75, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x29, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x21, 0x4a, 0x00, 0x4d, 0x01, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x27, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x75, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x29, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, 0x29, 0x52, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x45, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x21, 0x48, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, + 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x4c, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x61, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, + 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x48, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x27, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, + 0x4c, 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x45, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, + 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x45, + 0x00, 0x69, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x27, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, + 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x27, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x61, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x4d, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x02, 0x54, 0x0a, 0x4d, 0x65, 0x69, + 0x6a, 0x69, 0x0d, 0x54, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x0b, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x0c, 0x48, 0x65, 0x69, 0x73, 0x65, + 0x69, 0x12, 0x46, 0x61, 0x72, 0x76, 0x61, 0x72, + 0x64, 0x69, 0x6e, 0x16, 0x4f, 0x72, 0x64, 0x69, + 0x62, 0x65, 0x68, 0x65, 0x73, 0x68, 0x74, 0x0e, + 0x4b, 0x68, 0x6f, 0x72, 0x64, 0x61, 0x64, 0x06, + 0x54, 0x69, 0x72, 0x0c, 0x4d, 0x6f, 0x72, 0x64, + 0x61, 0x64, 0x12, 0x53, 0x68, 0x61, 0x68, 0x72, + 0x69, 0x76, 0x61, 0x72, 0x08, 0x4d, 0x65, 0x68, + 0x72, 0x08, 0x41, 0x62, 0x61, 0x6e, 0x08, 0x41, + 0x7a, 0x61, 0x72, 0x06, 0x44, 0x65, 0x79, 0x0c, + 0x42, 0x61, 0x68, 0x6d, 0x61, 0x6e, 0x0c, 0x45, + 0x73, 0x66, 0x61, 0x6e, 0x64, 0x04, 0x41, 0x50, + 0x1a, 0x42, 0x65, 0x66, 0x6f, 0x72, 0x65, 0x20, + 0x52, 0x2e, 0x4f, 0x2e, 0x43, 0x2e, 0x0c, 0x52, + 0x2e, 0x4f, 0x2e, 0x43, 0x2e, 0x12, 0x63, 0x61, + 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, 0x73, 0x08, + 0x64, 0x61, 0x74, 0x65, 0x08, 0x6c, 0x61, 0x74, + 0x6e, 0x04, 0x6e, 0x75, 0x10, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, + 0x74, 0x74, 0x65, 0x72, 0x6e, 0x26, 0x7b, 0x6d, + 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0x1e, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, + 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, + 0x6e, 0x0e, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, + 0x6c, 0x26, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0xa0, 0x7b, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x63, 0x79, 0x7d, 0x3c, 0x7b, 0x6d, + 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0xa0, 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x63, 0x79, 0x7d, 0x10, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x63, 0x79, 0x2a, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x7b, 0x70, + 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, + 0x67, 0x6e, 0x7d, 0x40, 0x7b, 0x6d, 0x69, 0x6e, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x7b, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x0e, 0x70, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x10, 0x70, 0x61, 0x74, + 0x74, 0x65, 0x72, 0x6e, 0x73, 0x02, 0x2c, 0x02, + 0xa0, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x20, + 0x68, 0x61, 0x71, 0x69, 0x71, 0x69, 0x79, 0xa0, + 0x73, 0x6f, 0x6e, 0xa0, 0x65, 0x6d, 0x61, 0x73, + 0x06, 0x6e, 0x61, 0x6e, 0x02, 0x2b, 0x10, 0x70, + 0x6c, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, + 0x2d, 0x12, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, + 0x69, 0x67, 0x6e, 0x02, 0x25, 0x16, 0x70, 0x65, + 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, + 0x6e, 0x03, 0x1e, 0x22, 0x10, 0x69, 0x6e, 0x66, + 0x69, 0x6e, 0x69, 0x74, 0x79, 0x0e, 0x73, 0x79, + 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x04, 0x41, 0x24, + 0x06, 0x41, 0x55, 0x44, 0x04, 0x52, 0x24, 0x06, + 0x42, 0x52, 0x4c, 0x06, 0x43, 0x41, 0x24, 0x06, + 0x43, 0x41, 0x44, 0x06, 0x43, 0x4e, 0xa5, 0x06, + 0x43, 0x4e, 0x59, 0x03, 0xac, 0x20, 0x06, 0x45, + 0x55, 0x52, 0x02, 0xa3, 0x06, 0x47, 0x42, 0x50, + 0x06, 0x48, 0x4b, 0x24, 0x06, 0x48, 0x4b, 0x44, + 0x03, 0xaa, 0x20, 0x06, 0x49, 0x4c, 0x53, 0x03, + 0xb9, 0x20, 0x06, 0x49, 0x4e, 0x52, 0x06, 0x4a, + 0x50, 0xa5, 0x06, 0x4a, 0x50, 0x59, 0x03, 0xa9, + 0x20, 0x06, 0x4b, 0x52, 0x57, 0x06, 0x4d, 0x58, + 0x24, 0x06, 0x4d, 0x58, 0x4e, 0x06, 0x4e, 0x5a, + 0x24, 0x06, 0x4e, 0x5a, 0x44, 0x06, 0x4e, 0x54, + 0x24, 0x06, 0x54, 0x57, 0x44, 0x06, 0x55, 0x53, + 0x24, 0x06, 0x55, 0x53, 0x44, 0x09, 0x73, 0x00, + 0x6f, 0x00, 0xbb, 0x02, 0x6d, 0x00, 0x06, 0x55, + 0x5a, 0x53, 0x03, 0xab, 0x20, 0x06, 0x56, 0x4e, + 0x44, 0x08, 0x46, 0x43, 0x46, 0x41, 0x06, 0x58, + 0x41, 0x46, 0x06, 0x45, 0x43, 0x24, 0x06, 0x58, + 0x43, 0x44, 0x06, 0x43, 0x46, 0x41, 0x06, 0x58, + 0x4f, 0x46, 0x08, 0x43, 0x46, 0x50, 0x46, 0x06, + 0x58, 0x50, 0x46, 0x14, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x52, 0x6e, + 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, + 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, + 0x64, 0x61, 0x74, 0x61, 0x2f, 0x6a, 0x73, 0x6f, + 0x6e, 0x70, 0x2f, 0x75, 0x7a, 0x2e, 0x6a, 0x73, + 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, + 0x00, 0x27, 0x00, 0x89, 0x01, 0xde, 0x6a, 0x01, + 0xa0, 0x01, 0x00, 0x00, 0x00, 0x39, 0xd0, 0x00, + 0x00, 0x00, 0x43, 0xd1, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd2, 0x00, 0x00, 0x00, 0x4d, 0xd3, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd4, 0x00, 0x00, 0x00, + 0x04, 0xd5, 0x00, 0x00, 0x00, 0x04, 0xd6, 0x00, + 0x00, 0x00, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x04, + 0xd8, 0x00, 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, + 0x00, 0x04, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdb, + 0x00, 0x00, 0x00, 0x04, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0xdd, 0x00, 0x00, 0x00, 0x04, 0xde, 0x00, + 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, 0x04, + 0xe0, 0x00, 0x00, 0x00, 0x04, 0xe1, 0x00, 0x00, + 0x00, 0x04, 0xe2, 0x00, 0x00, 0x00, 0x26, 0x0f, + 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x0a, 0x4d, + 0xe4, 0x00, 0x00, 0x00, 0x09, 0x4d, 0xe5, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, + 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x04, 0xec, + 0x00, 0x00, 0x00, 0x4d, 0xed, 0x00, 0x00, 0x00, + 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, 0xef, 0x00, + 0x00, 0x00, 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, + 0xf1, 0x00, 0x00, 0x00, 0x04, 0xf2, 0x00, 0x00, + 0x00, 0x4d, 0xf3, 0x00, 0x00, 0x00, 0x04, 0xf4, + 0x00, 0x00, 0x00, 0x4d, 0xf5, 0x00, 0x00, 0x00, + 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, 0xf7, 0x00, + 0x00, 0x00, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, + 0xf9, 0x00, 0x00, 0x00, 0x04, 0xfa, 0x00, 0x00, + 0x00, 0x4d, 0xfb, 0x00, 0x00, 0x00, 0x04, 0xfc, + 0x00, 0x00, 0x00, 0x4d, 0xfd, 0x00, 0x00, 0x00, + 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, 0xff, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, + 0x01, 0x01, 0x00, 0x00, 0x04, 0x02, 0x01, 0x00, + 0x00, 0x4d, 0x03, 0x01, 0x00, 0x00, 0x04, 0x04, + 0x01, 0x00, 0x00, 0x4d, 0x05, 0x01, 0x00, 0x00, + 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, 0x07, 0x01, + 0x00, 0x00, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, + 0x09, 0x01, 0x00, 0x00, 0x04, 0x0a, 0x01, 0x00, + 0x00, 0x4d, 0x0b, 0x01, 0x00, 0x00, 0x04, 0x0c, + 0x01, 0x00, 0x00, 0x4d, 0x0d, 0x01, 0x00, 0x00, + 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, 0x0f, 0x01, + 0x00, 0x00, 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, + 0x11, 0x01, 0x00, 0x00, 0x04, 0x12, 0x01, 0x00, + 0x00, 0x4d, 0x13, 0x01, 0x00, 0x00, 0x04, 0x14, + 0x01, 0x00, 0x00, 0x4d, 0x15, 0x01, 0x00, 0x00, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, 0x17, 0x01, + 0x00, 0x00, 0x04, 0x18, 0x01, 0x00, 0x00, 0x4d, + 0x19, 0x01, 0x00, 0x00, 0x04, 0x1a, 0x01, 0x00, + 0x00, 0x4d, 0x1b, 0x01, 0x00, 0x00, 0x04, 0x1c, + 0x01, 0x00, 0x00, 0x4d, 0x1d, 0x01, 0x00, 0x00, + 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, 0x1f, 0x01, + 0x00, 0x00, 0x04, 0x20, 0x01, 0x00, 0x00, 0x4d, + 0x21, 0x01, 0x00, 0x00, 0x04, 0x22, 0x01, 0x00, + 0x00, 0x4d, 0x23, 0x01, 0x00, 0x00, 0x04, 0x24, + 0x01, 0x00, 0x00, 0x4d, 0x24, 0x01, 0x00, 0x00, + 0x04, 0x25, 0x01, 0x00, 0x00, 0x4d, 0x26, 0x01, + 0x00, 0x00, 0x04, 0x27, 0x01, 0x00, 0x00, 0x4d, + 0x28, 0x01, 0x00, 0x00, 0x04, 0x29, 0x01, 0x00, + 0x00, 0x4d, 0x2a, 0x01, 0x00, 0x00, 0x04, 0x2b, + 0x01, 0x00, 0x00, 0x4d, 0x2c, 0x01, 0x00, 0x00, + 0x04, 0x2d, 0x01, 0x00, 0x00, 0x4d, 0x2e, 0x01, + 0x00, 0x00, 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, + 0x30, 0x01, 0x00, 0x00, 0x04, 0x31, 0x01, 0x00, + 0x00, 0x4d, 0x32, 0x01, 0x00, 0x00, 0x04, 0x33, + 0x01, 0x00, 0x00, 0x4d, 0x34, 0x01, 0x00, 0x00, + 0x04, 0x35, 0x01, 0x00, 0x00, 0x4d, 0x36, 0x01, + 0x00, 0x00, 0x4d, 0x37, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x38, 0x01, 0x00, 0x00, 0x4d, 0x39, 0x01, + 0x00, 0x00, 0x04, 0x3a, 0x01, 0x00, 0x00, 0x4d, + 0x3b, 0x01, 0x00, 0x00, 0x04, 0x2d, 0x01, 0x00, + 0x00, 0x4d, 0x2e, 0x01, 0x00, 0x00, 0x04, 0x3c, + 0x01, 0x00, 0x00, 0x4d, 0x28, 0x01, 0x00, 0x00, + 0x4d, 0x3d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x3e, + 0x01, 0x00, 0x00, 0x4d, 0x3f, 0x01, 0x00, 0x00, + 0x04, 0x40, 0x01, 0x00, 0x00, 0x4d, 0x41, 0x01, + 0x00, 0x00, 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, + 0x09, 0x01, 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, + 0x00, 0x4d, 0x05, 0x01, 0x00, 0x00, 0x4d, 0x42, + 0x01, 0x00, 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x0b, 0x04, 0x44, 0x01, 0x00, 0x00, + 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x46, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x64, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x44, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x76, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x00, 0xbe, 0x01, 0xbe, 0x02, 0xbe, + 0x03, 0xbe, 0x04, 0xbe, 0x05, 0xbe, 0x06, 0xbe, + 0x07, 0xbe, 0x08, 0xbe, 0x09, 0xbe, 0x0a, 0xbe, + 0x0b, 0x26, 0x0c, 0x00, 0x4d, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, + 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, + 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, + 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, + 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, + 0x04, 0x89, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, + 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, + 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, + 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, + 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, + 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, + 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x44, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, + 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, + 0xd6, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x0c, + 0xbe, 0x0d, 0xbe, 0x0e, 0xbe, 0x0f, 0xbe, 0x10, + 0xbe, 0x11, 0xbe, 0x12, 0xbe, 0x13, 0xbe, 0x14, + 0xbe, 0x15, 0xbe, 0x16, 0xbe, 0x17, 0xbe, 0x18, + 0x26, 0x0d, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, + 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, + 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, + 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, + 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, + 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, + 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, + 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, + 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, + 0x04, 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, + 0x00, 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, + 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, + 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, + 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, + 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x44, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, + 0x04, 0x98, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x78, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x4d, + 0x7d, 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x19, 0xbe, 0x1a, 0xbe, + 0x1b, 0xbe, 0x1c, 0xbe, 0x1d, 0xbe, 0x1e, 0xbe, + 0x1f, 0xbe, 0x20, 0xbe, 0x21, 0xbe, 0x22, 0xbe, + 0x23, 0xbe, 0x24, 0x26, 0x0c, 0x00, 0x4d, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, + 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, + 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, + 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, + 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, + 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, + 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, + 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, + 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x44, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x4d, + 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x25, 0xbe, 0x26, 0xbe, 0x27, 0xbe, 0x28, + 0xbe, 0x29, 0xbe, 0x2a, 0xbe, 0x2b, 0xbe, 0x2c, + 0xbe, 0x2d, 0xbe, 0x2e, 0xbe, 0x2f, 0xbe, 0x30, + 0xbe, 0x31, 0x26, 0x0d, 0x00, 0x4d, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, + 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, + 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, + 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, + 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, + 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, + 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, + 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, + 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, + 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, + 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, + 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, + 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, + 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, + 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, + 0xa5, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x44, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, + 0x04, 0x98, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x97, 0x01, + 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x78, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, + 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x32, 0xbe, + 0x33, 0xbe, 0x34, 0xbe, 0x35, 0xbe, 0x36, 0xbe, + 0x37, 0xbe, 0x38, 0xbe, 0x39, 0xbe, 0x3a, 0xbe, + 0x3b, 0xbe, 0x3c, 0xbe, 0x3d, 0xbe, 0x3e, 0x26, + 0x0d, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, + 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, + 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, + 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, + 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, + 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, + 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, + 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, + 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, + 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, + 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, + 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, + 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, + 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, + 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x44, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x97, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x97, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x78, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x4d, + 0x7d, 0x01, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x3f, 0xbe, 0x40, 0xbe, + 0x41, 0xbe, 0x42, 0xbe, 0x43, 0xbe, 0x44, 0xbe, + 0x45, 0xbe, 0x46, 0xbe, 0x47, 0xbe, 0x48, 0xbe, + 0x49, 0xbe, 0x4a, 0x26, 0x0c, 0x00, 0x4d, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, + 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, + 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, + 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, + 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, + 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, + 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, + 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, + 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, 0x89, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x44, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, + 0x98, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, + 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x78, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, + 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x44, 0x01, 0x00, + 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x64, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x44, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x76, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xa6, 0x01, + 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, + 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, + 0x00, 0x26, 0x04, 0x00, 0x4d, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, + 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, + 0x04, 0xa9, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xaa, 0x01, + 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, + 0xab, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, + 0x00, 0x26, 0x04, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, + 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x4b, 0xbe, 0x4c, 0xbe, 0x4d, 0xbe, 0x4e, 0xbe, + 0x4f, 0xbe, 0x50, 0xbe, 0x51, 0xbe, 0x52, 0xbe, + 0x53, 0xbe, 0x54, 0xbe, 0x55, 0xbe, 0x56, 0xbe, + 0x57, 0xbe, 0x58, 0x26, 0x0e, 0x00, 0x4d, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, + 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, + 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, + 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, + 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, 0xb3, + 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, 0x00, + 0x04, 0xb5, 0x01, 0x00, 0x00, 0x04, 0xb6, 0x01, + 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, + 0xb8, 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, + 0x00, 0x26, 0x0e, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, + 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, + 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, + 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, 0x04, + 0xb2, 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, + 0x00, 0x04, 0xb4, 0x01, 0x00, 0x00, 0x04, 0xb5, + 0x01, 0x00, 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, + 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, + 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, 0x26, + 0x0e, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x64, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x44, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x76, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xba, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xba, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, + 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x59, 0xbe, 0x5a, 0xbe, 0x5b, 0xbe, + 0x5c, 0xbe, 0x5d, 0xbe, 0x5e, 0xbe, 0x5f, 0xbe, + 0x60, 0xbe, 0x61, 0xbe, 0x62, 0xbe, 0x63, 0xbe, + 0x64, 0x26, 0x0c, 0x00, 0x4d, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, + 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, + 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, + 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, 0x04, + 0xc1, 0x01, 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, + 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, 0x04, 0xc4, + 0x01, 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, + 0x04, 0xc6, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xbb, 0x01, + 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, 0x04, + 0xbd, 0x01, 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, + 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, 0x04, 0xc0, + 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, + 0x04, 0xc2, 0x01, 0x00, 0x00, 0x04, 0xc3, 0x01, + 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, 0x04, + 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x44, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xc7, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xc7, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x78, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, + 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, 0x00, 0x4d, + 0x7d, 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x65, 0xbe, 0x66, 0xbe, + 0x67, 0xbe, 0x68, 0xbe, 0x69, 0xbe, 0x6a, 0xbe, + 0x6b, 0xbe, 0x6c, 0xbe, 0x6d, 0xbe, 0x6e, 0xbe, + 0x6f, 0xbe, 0x70, 0x26, 0x0c, 0x00, 0x4d, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, + 0x04, 0xc9, 0x01, 0x00, 0x00, 0x04, 0xca, 0x01, + 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, 0x04, + 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, + 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, 0x04, 0xcf, + 0x01, 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, + 0x04, 0xd1, 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, + 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xd4, 0x01, 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, + 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, 0x04, 0xd7, + 0x01, 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, + 0x04, 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, + 0x00, 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, + 0xdc, 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, + 0x00, 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x44, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xe0, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0xe0, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x78, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, + 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x71, 0xbe, + 0x72, 0xbe, 0x73, 0xbe, 0x74, 0xbe, 0x75, 0xbe, + 0x76, 0xbe, 0x77, 0xbe, 0x78, 0xbe, 0x79, 0xbe, + 0x7a, 0xbe, 0x7b, 0xbe, 0x7c, 0x26, 0x0c, 0x00, + 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0xc8, 0x01, + 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, 0x04, + 0xca, 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, + 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, + 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, + 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, 0x01, + 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, 0x04, + 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, 0xd5, + 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, + 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, 0xd8, 0x01, + 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, 0x04, + 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, 0x00, + 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, 0x04, 0xdd, + 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, 0x00, + 0x04, 0xdf, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x44, 0x01, 0x00, 0x00, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xe0, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0xe0, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, + 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, + 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x44, 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, + 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, 0x46, + 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x44, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, + 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, + 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, + 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, + 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, + 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, + 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, + 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, + 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, + 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, + 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, + 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, + 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, + 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, + 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, + 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, + 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, + 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, 0x01, 0x00, + 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x04, 0xff, + 0x01, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, + 0x26, 0x20, 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, + 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0x02, 0x02, + 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, + 0x03, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, + 0x80, 0x04, 0x04, 0x02, 0x00, 0x00, 0x4d, 0x23, + 0x00, 0x00, 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, + 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, + 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, + 0x07, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, + 0x80, 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, 0x27, + 0x00, 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, + 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, + 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, + 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, + 0x80, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x2b, + 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, + 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, + 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, + 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, + 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x2f, + 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, + 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, + 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, + 0x13, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, + 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x33, + 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, + 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, + 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, + 0x17, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, + 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x37, + 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, + 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, + 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, + 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, + 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x3b, + 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, + 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, + 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, + 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, + 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x3f, + 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, + 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, + 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, + 0x23, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, + 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x43, + 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, + 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, + 0x27, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, + 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x47, + 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, + 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, + 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, + 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, + 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x4b, + 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, + 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, + 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, + 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, + 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x4f, + 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, + 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, + 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, + 0x33, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, + 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x53, + 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, + 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, + 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, + 0x37, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, + 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x57, + 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, + 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, + 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, + 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, + 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x5b, + 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, + 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, + 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, + 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, + 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x5f, + 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, + 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, + 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, + 0x43, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, + 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x63, + 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, + 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, + 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, + 0x47, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, + 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x67, + 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, + 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, + 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, + 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, + 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x6b, + 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, + 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, + 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, + 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, + 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x6f, + 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, + 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, + 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, + 0x53, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, + 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x73, + 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, + 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, + 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, + 0x57, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, + 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x77, + 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, + 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, + 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, + 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, + 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x7b, + 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, + 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, + 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, + 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, + 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x7f, + 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, + 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, + 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, + 0x63, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, + 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x83, + 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, + 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, + 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, + 0x67, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, + 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x87, + 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, + 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, + 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, + 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, + 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x8b, + 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, + 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, + 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, + 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, + 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x8f, + 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, + 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, + 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, + 0x73, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, + 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x93, + 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, + 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, + 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, + 0x77, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, + 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x97, + 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, + 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, + 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, + 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, + 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x9b, + 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, + 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, + 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, + 0x7f, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, + 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0x9f, + 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, + 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, + 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, + 0x83, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, + 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0xa3, + 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, + 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, + 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, + 0x87, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, + 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0xa7, + 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, + 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, + 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, + 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, + 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xab, + 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, + 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, + 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, + 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, + 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xaf, + 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, + 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, + 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, + 0x93, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, + 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xb3, + 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, + 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, + 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, + 0x97, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, + 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xb7, + 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, + 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, + 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, + 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, + 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xbb, + 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, + 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, + 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, + 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, + 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xbf, + 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, + 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, + 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, + 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, + 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xc3, + 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, + 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, + 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, + 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, + 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xc7, + 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, + 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, + 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, + 0xab, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, + 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xcb, + 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, + 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, + 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, + 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, + 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xcf, + 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, + 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, + 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, + 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, + 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, + 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, + 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, + 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, + 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, + 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, + 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, + 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x80, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x80, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xc9, 0x02, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x80, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x80, 0x4d, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, + 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, + 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, + 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, + 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, + 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, + 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, + 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, + 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, + 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, + 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, + 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, + 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, + 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, + 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, + 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, + 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, + 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, 0x01, 0x00, + 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x04, 0xff, + 0x01, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, + 0x26, 0x20, 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, + 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0x02, 0x02, + 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, + 0x03, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, + 0x80, 0x04, 0x04, 0x02, 0x00, 0x00, 0x4d, 0x23, + 0x00, 0x00, 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, + 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, + 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, + 0x07, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, + 0x80, 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, 0x27, + 0x00, 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, + 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, + 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, + 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, + 0x80, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x2b, + 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, + 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, + 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, + 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, + 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x2f, + 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, + 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, + 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, + 0x13, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, + 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x33, + 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, + 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, + 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, + 0x17, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, + 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x37, + 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, + 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, + 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, + 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, + 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x3b, + 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, + 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, + 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, + 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, + 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x3f, + 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, + 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, + 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, + 0x23, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, + 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x43, + 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, + 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, + 0x27, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, + 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x47, + 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, + 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, + 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, + 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, + 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x4b, + 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, + 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, + 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, + 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, + 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x4f, + 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, + 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, + 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, + 0x33, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, + 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x53, + 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, + 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, + 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, + 0x37, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, + 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x57, + 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, + 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, + 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, + 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, + 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x5b, + 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, + 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, + 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, + 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, + 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x5f, + 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, + 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, + 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, + 0x43, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, + 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x63, + 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, + 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, + 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, + 0x47, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, + 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x67, + 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, + 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, + 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, + 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, + 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x6b, + 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, + 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, + 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, + 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, + 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x6f, + 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, + 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, + 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, + 0x53, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, + 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x73, + 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, + 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, + 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, + 0x57, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, + 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x77, + 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, + 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, + 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, + 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, + 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x7b, + 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, + 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, + 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, + 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, + 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x7f, + 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, + 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, + 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, + 0x63, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, + 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x83, + 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, + 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, + 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, + 0x67, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, + 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x87, + 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, + 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, + 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, + 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, + 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x8b, + 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, + 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, + 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, + 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, + 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x8f, + 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, + 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, + 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, + 0x73, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, + 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x93, + 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, + 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, + 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, + 0x77, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, + 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x97, + 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, + 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, + 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, + 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, + 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x9b, + 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, + 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, + 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, + 0x7f, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, + 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0x9f, + 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, + 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, + 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, + 0x83, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, + 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0xa3, + 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, + 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, + 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, + 0x87, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, + 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0xa7, + 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, + 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, + 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, + 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, + 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xab, + 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, + 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, + 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, + 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, + 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xaf, + 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, + 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, + 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, + 0x93, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, + 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xb3, + 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, + 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, + 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, + 0x97, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, + 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xb7, + 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, + 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, + 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, + 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, + 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xbb, + 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, + 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, + 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, + 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, + 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xbf, + 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, + 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, + 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, + 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, + 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xc3, + 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, + 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, + 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, + 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, + 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xc7, + 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, + 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, + 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, + 0xab, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, + 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xcb, + 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, + 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, + 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, + 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, + 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xcf, + 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, + 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, + 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, + 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, + 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, + 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, + 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, + 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, + 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, + 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, + 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, + 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x80, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xcb, 0x02, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, + 0xcc, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x80, 0x04, 0xcd, 0x02, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x80, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, + 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x04, + 0xe4, 0x01, 0x00, 0x00, 0x04, 0xe5, 0x01, 0x00, + 0x00, 0x04, 0xe6, 0x01, 0x00, 0x00, 0x04, 0xe7, + 0x01, 0x00, 0x00, 0x04, 0xe8, 0x01, 0x00, 0x00, + 0x04, 0xe9, 0x01, 0x00, 0x00, 0x04, 0xea, 0x01, + 0x00, 0x00, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x04, + 0xec, 0x01, 0x00, 0x00, 0x04, 0xed, 0x01, 0x00, + 0x00, 0x04, 0xee, 0x01, 0x00, 0x00, 0x04, 0xef, + 0x01, 0x00, 0x00, 0x04, 0xf0, 0x01, 0x00, 0x00, + 0x04, 0xf1, 0x01, 0x00, 0x00, 0x04, 0xf2, 0x01, + 0x00, 0x00, 0x04, 0xf3, 0x01, 0x00, 0x00, 0x04, + 0xf4, 0x01, 0x00, 0x00, 0x04, 0xf5, 0x01, 0x00, + 0x00, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x04, 0xf7, + 0x01, 0x00, 0x00, 0x04, 0xf8, 0x01, 0x00, 0x00, + 0x04, 0xf9, 0x01, 0x00, 0x00, 0x04, 0xfa, 0x01, + 0x00, 0x00, 0x04, 0xfb, 0x01, 0x00, 0x00, 0x04, + 0xfc, 0x01, 0x00, 0x00, 0x04, 0xfd, 0x01, 0x00, + 0x00, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x04, 0xff, + 0x01, 0x00, 0x00, 0x04, 0x00, 0x02, 0x00, 0x00, + 0x26, 0x20, 0x00, 0x04, 0x01, 0x02, 0x00, 0x00, + 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, 0x02, 0x02, + 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, + 0x03, 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, + 0x80, 0x04, 0x04, 0x02, 0x00, 0x00, 0x4d, 0x23, + 0x00, 0x00, 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, + 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, + 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, + 0x07, 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, + 0x80, 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, 0x27, + 0x00, 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, + 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, + 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, + 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, + 0x80, 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x2b, + 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, + 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, + 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, + 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, + 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x2f, + 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, + 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, + 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, + 0x13, 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, + 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x33, + 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, + 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, + 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, + 0x17, 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, + 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x37, + 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, + 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, + 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, + 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, + 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x3b, + 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, + 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, + 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, + 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, + 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x3f, + 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, + 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, + 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, + 0x23, 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, + 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x43, + 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, + 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, + 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, + 0x27, 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, + 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x47, + 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, + 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, + 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, + 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, + 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x4b, + 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, + 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, + 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, + 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, + 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x4f, + 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, + 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, + 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, + 0x33, 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, + 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x53, + 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, + 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, + 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, + 0x37, 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, + 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x57, + 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, + 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, + 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, + 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, + 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x5b, + 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, + 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, + 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, + 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, + 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0x5f, + 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, + 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, + 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, + 0x43, 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, + 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0x63, + 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, + 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, + 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, + 0x47, 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, + 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0x67, + 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, + 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, + 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, + 0x4b, 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, + 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0x6b, + 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, + 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, + 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, + 0x4f, 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, + 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0x6f, + 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, + 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, + 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, + 0x53, 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, + 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0x73, + 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, + 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, + 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, + 0x57, 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, + 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0x77, + 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, + 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, + 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, + 0x5b, 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, + 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0x7b, + 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, + 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, + 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, + 0x5f, 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, + 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0x7f, + 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, + 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, + 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, + 0x63, 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, + 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0x83, + 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, + 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, + 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, + 0x67, 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, + 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0x87, + 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, + 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, + 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, + 0x6b, 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, + 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0x8b, + 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, + 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, + 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, + 0x6f, 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, + 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0x8f, + 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, + 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, + 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, + 0x73, 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, + 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0x93, + 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, + 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, + 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, + 0x77, 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, + 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0x97, + 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, + 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, + 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, + 0x7b, 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, + 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0x9b, + 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, + 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, + 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, + 0x7f, 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, + 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0x9f, + 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, + 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, + 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, + 0x83, 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, + 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0xa3, + 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, 0x00, + 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, 0x86, 0x02, + 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, + 0x87, 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, + 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, 0x4d, 0xa7, + 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, 0x00, 0x00, + 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x02, + 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, + 0x8b, 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, + 0x80, 0x04, 0x8c, 0x02, 0x00, 0x00, 0x4d, 0xab, + 0x00, 0x00, 0x80, 0x04, 0x8d, 0x02, 0x00, 0x00, + 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x02, + 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, + 0x8f, 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, + 0x80, 0x04, 0x90, 0x02, 0x00, 0x00, 0x4d, 0xaf, + 0x00, 0x00, 0x80, 0x04, 0x91, 0x02, 0x00, 0x00, + 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, 0x92, 0x02, + 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, + 0x93, 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, + 0x80, 0x04, 0x94, 0x02, 0x00, 0x00, 0x4d, 0xb3, + 0x00, 0x00, 0x80, 0x04, 0x95, 0x02, 0x00, 0x00, + 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, 0x96, 0x02, + 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, + 0x97, 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, + 0x80, 0x04, 0x98, 0x02, 0x00, 0x00, 0x4d, 0xb7, + 0x00, 0x00, 0x80, 0x04, 0x99, 0x02, 0x00, 0x00, + 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, 0x9a, 0x02, + 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, + 0x9b, 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, + 0x80, 0x04, 0x9c, 0x02, 0x00, 0x00, 0x4d, 0xbb, + 0x00, 0x00, 0x80, 0x04, 0x9d, 0x02, 0x00, 0x00, + 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, 0x9e, 0x02, + 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, + 0x9f, 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, + 0x80, 0x04, 0xa0, 0x02, 0x00, 0x00, 0x4d, 0xbf, + 0x00, 0x00, 0x80, 0x04, 0xa1, 0x02, 0x00, 0x00, + 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, 0xa2, 0x02, + 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, + 0xa3, 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, + 0x80, 0x04, 0xa4, 0x02, 0x00, 0x00, 0x4d, 0xc3, + 0x00, 0x00, 0x80, 0x04, 0xa5, 0x02, 0x00, 0x00, + 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, 0xa6, 0x02, + 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, + 0xa7, 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, + 0x80, 0x04, 0xa8, 0x02, 0x00, 0x00, 0x4d, 0xc7, + 0x00, 0x00, 0x80, 0x04, 0xa9, 0x02, 0x00, 0x00, + 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, 0xaa, 0x02, + 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, + 0xab, 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, + 0x80, 0x04, 0xac, 0x02, 0x00, 0x00, 0x4d, 0xcb, + 0x00, 0x00, 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, + 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, + 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, + 0xaf, 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, + 0x80, 0x04, 0xb0, 0x02, 0x00, 0x00, 0x4d, 0xcf, + 0x00, 0x00, 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, + 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, + 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, + 0xb3, 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, + 0x80, 0x04, 0xb4, 0x02, 0x00, 0x00, 0x4d, 0xd3, + 0x00, 0x00, 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, + 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, + 0xb7, 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, + 0x80, 0x04, 0xb8, 0x02, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, + 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, + 0xbb, 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x80, 0x04, 0xbc, 0x02, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, + 0xbf, 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x80, 0x04, 0xc0, 0x02, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, + 0xc3, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x80, 0x04, 0xc4, 0x02, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, + 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, + 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, + 0xc7, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x80, 0x04, 0xc8, 0x02, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, 0xcb, 0x02, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, + 0xcc, 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x80, 0x04, 0xcd, 0x02, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x80, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x78, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, + 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x7d, + 0xbe, 0x7e, 0xbe, 0x7f, 0xbe, 0x80, 0xbe, 0x81, + 0xbe, 0x82, 0xbe, 0x83, 0xbe, 0x84, 0xbe, 0x85, + 0xbe, 0x86, 0xbe, 0x87, 0xbe, 0x88, 0x26, 0x0c, + 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0xce, + 0x02, 0x00, 0x00, 0x04, 0xcf, 0x02, 0x00, 0x00, + 0x04, 0xd0, 0x02, 0x00, 0x00, 0x04, 0xd1, 0x02, + 0x00, 0x00, 0x04, 0xd2, 0x02, 0x00, 0x00, 0x04, + 0xd3, 0x02, 0x00, 0x00, 0x04, 0xd4, 0x02, 0x00, + 0x00, 0x04, 0xd5, 0x02, 0x00, 0x00, 0x04, 0xd6, + 0x02, 0x00, 0x00, 0x04, 0xd7, 0x02, 0x00, 0x00, + 0x04, 0xd8, 0x02, 0x00, 0x00, 0x04, 0xd9, 0x02, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xce, 0x02, 0x00, 0x00, 0x04, + 0xcf, 0x02, 0x00, 0x00, 0x04, 0xd0, 0x02, 0x00, + 0x00, 0x04, 0xd1, 0x02, 0x00, 0x00, 0x04, 0xd2, + 0x02, 0x00, 0x00, 0x04, 0xd3, 0x02, 0x00, 0x00, + 0x04, 0xd4, 0x02, 0x00, 0x00, 0x04, 0xd5, 0x02, + 0x00, 0x00, 0x04, 0xd6, 0x02, 0x00, 0x00, 0x04, + 0xd7, 0x02, 0x00, 0x00, 0x04, 0xd8, 0x02, 0x00, + 0x00, 0x04, 0xd9, 0x02, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x64, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x44, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x76, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xda, 0x02, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0xda, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xda, 0x02, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x4d, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x4d, + 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x44, 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, + 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x64, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x44, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xdb, 0x02, 0x00, 0x00, 0x04, 0xdc, + 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0xdb, 0x02, 0x00, 0x00, + 0x04, 0xdc, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xdb, 0x02, + 0x00, 0x00, 0x04, 0xdc, 0x02, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x78, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x4d, 0x7a, 0x01, 0x00, 0x00, 0x04, + 0x7b, 0x01, 0x00, 0x00, 0x4d, 0x7c, 0x01, 0x00, + 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0xe2, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x02, 0x00, 0x00, + 0x4d, 0xde, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xdf, + 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe0, + 0x02, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xe1, 0x02, + 0x00, 0x00, 0x4d, 0xe2, 0x02, 0x00, 0x00, 0x04, + 0xe3, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x02, 0x00, + 0x00, 0x4d, 0xe5, 0x02, 0x00, 0x00, 0x0b, 0x04, + 0xe6, 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x02, 0x00, + 0x00, 0x04, 0xe7, 0x02, 0x00, 0x00, 0x4d, 0xe4, + 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x02, 0x00, 0x00, + 0x0b, 0x04, 0xe9, 0x02, 0x00, 0x00, 0x4d, 0xe2, + 0x02, 0x00, 0x00, 0x04, 0xea, 0x02, 0x00, 0x00, + 0x4d, 0xe4, 0x02, 0x00, 0x00, 0x4d, 0xeb, 0x02, + 0x00, 0x00, 0x4d, 0xec, 0x02, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0xed, 0x02, 0x00, 0x00, 0x4d, 0xe5, + 0x02, 0x00, 0x00, 0x04, 0xee, 0x02, 0x00, 0x00, + 0x4d, 0xef, 0x02, 0x00, 0x00, 0x04, 0xf0, 0x02, + 0x00, 0x00, 0x4d, 0xf1, 0x02, 0x00, 0x00, 0x04, + 0xf2, 0x02, 0x00, 0x00, 0x4d, 0xf3, 0x02, 0x00, + 0x00, 0x04, 0xf4, 0x02, 0x00, 0x00, 0x4d, 0xf5, + 0x02, 0x00, 0x00, 0x04, 0xf6, 0x02, 0x00, 0x00, + 0x4d, 0xf7, 0x02, 0x00, 0x00, 0x04, 0xf8, 0x02, + 0x00, 0x00, 0x4d, 0xf9, 0x02, 0x00, 0x00, 0x4d, + 0xdf, 0x02, 0x00, 0x00, 0x4d, 0xfa, 0x02, 0x00, + 0x00, 0x0b, 0x04, 0xfb, 0x02, 0x00, 0x00, 0x4d, + 0xfc, 0x02, 0x00, 0x00, 0x04, 0xfd, 0x02, 0x00, + 0x00, 0x4d, 0xfe, 0x02, 0x00, 0x00, 0x04, 0xff, + 0x02, 0x00, 0x00, 0x4d, 0x00, 0x03, 0x00, 0x00, + 0x04, 0x01, 0x03, 0x00, 0x00, 0x4d, 0x02, 0x03, + 0x00, 0x00, 0x04, 0x03, 0x03, 0x00, 0x00, 0x4d, + 0x04, 0x03, 0x00, 0x00, 0x04, 0x05, 0x03, 0x00, + 0x00, 0x4d, 0x06, 0x03, 0x00, 0x00, 0x04, 0x07, + 0x03, 0x00, 0x00, 0x4d, 0x08, 0x03, 0x00, 0x00, + 0x04, 0x09, 0x03, 0x00, 0x00, 0x4d, 0x0a, 0x03, + 0x00, 0x00, 0x04, 0x0b, 0x03, 0x00, 0x00, 0x4d, + 0x0c, 0x03, 0x00, 0x00, 0x04, 0x0d, 0x03, 0x00, + 0x00, 0x4d, 0x0e, 0x03, 0x00, 0x00, 0x04, 0x0f, + 0x03, 0x00, 0x00, 0x4d, 0x10, 0x03, 0x00, 0x00, + 0x04, 0x11, 0x03, 0x00, 0x00, 0x4d, 0x12, 0x03, + 0x00, 0x00, 0x04, 0x13, 0x03, 0x00, 0x00, 0x4d, + 0x14, 0x03, 0x00, 0x00, 0x04, 0x15, 0x03, 0x00, + 0x00, 0x4d, 0x16, 0x03, 0x00, 0x00, 0x04, 0x17, + 0x03, 0x00, 0x00, 0x4d, 0x18, 0x03, 0x00, 0x00, + 0x04, 0x19, 0x03, 0x00, 0x00, 0x4d, 0x1a, 0x03, + 0x00, 0x00, 0x04, 0x1b, 0x03, 0x00, 0x00, 0x4d, + 0x1c, 0x03, 0x00, 0x00, 0x04, 0x1d, 0x03, 0x00, + 0x00, 0x4d, 0x1e, 0x03, 0x00, 0x00, 0x04, 0x1f, + 0x03, 0x00, 0x00, 0x4d, 0x20, 0x03, 0x00, 0x00, + 0x04, 0x21, 0x03, 0x00, 0x00, 0x4d, 0x22, 0x03, + 0x00, 0x00, 0x04, 0x23, 0x03, 0x00, 0x00, 0x4d, + 0x24, 0x03, 0x00, 0x00, 0x4d, 0x25, 0x03, 0x00, + 0x00, 0x4d, 0x45, 0x00, 0x00, 0x00, 0x24, 0x01, + 0x00, 0xcc, 0x28, 0xcc, 0x0c, 0x01, 0x00, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, + 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_vi_size = 25022; + +const uint8_t intl_vi[25022] = { + 0x01, 0xdb, 0x04, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x76, 0x69, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x10, + 0x7b, 0x30, 0x7d, 0x2c, 0x20, 0x7b, 0x31, 0x7d, + 0x0a, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, + 0x65, 0x64, 0x69, 0x75, 0x6d, 0x0e, 0x7b, 0x30, + 0x7d, 0x20, 0x7b, 0x31, 0x7d, 0x08, 0x66, 0x75, + 0x6c, 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x02, + 0x64, 0x06, 0x63, 0x63, 0x63, 0x02, 0x45, 0x16, + 0x45, 0x2c, 0x20, 0x27, 0x6e, 0x67, 0xe0, 0x79, + 0x27, 0x20, 0x64, 0x04, 0x45, 0x64, 0x10, 0x45, + 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x06, + 0x45, 0x68, 0x6d, 0x0e, 0x45, 0x20, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x06, 0x45, 0x48, 0x6d, 0x16, + 0x45, 0x20, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x20, 0x61, 0x08, 0x45, 0x68, 0x6d, 0x73, + 0x14, 0x45, 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x08, 0x45, 0x48, 0x6d, 0x73, + 0x06, 0x79, 0x20, 0x47, 0x04, 0x47, 0x79, 0x0e, + 0x4d, 0x4d, 0x4d, 0x20, 0x79, 0x20, 0x47, 0x0a, + 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x16, 0x64, 0x64, + 0x20, 0x4d, 0x4d, 0x4d, 0x2c, 0x20, 0x79, 0x20, + 0x47, 0x0c, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x64, + 0x1a, 0x45, 0x2c, 0x20, 0x64, 0x20, 0x4d, 0x4d, + 0x4d, 0x2c, 0x20, 0x79, 0x20, 0x47, 0x0e, 0x47, + 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x06, 0x68, + 0x20, 0x61, 0x02, 0x68, 0x04, 0x48, 0x48, 0x02, + 0x48, 0x0c, 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, + 0x04, 0x68, 0x6d, 0x08, 0x48, 0x3a, 0x6d, 0x6d, + 0x04, 0x48, 0x6d, 0x12, 0x68, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x61, 0x06, 0x68, 0x6d, + 0x73, 0x10, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x06, 0x48, 0x6d, 0x73, 0x16, 0x68, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x61, + 0x20, 0x76, 0x08, 0x68, 0x6d, 0x73, 0x76, 0x14, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x20, 0x76, 0x08, 0x48, 0x6d, 0x73, 0x76, 0x10, + 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x61, 0x20, 0x76, + 0x06, 0x68, 0x6d, 0x76, 0x0e, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x20, 0x76, 0x06, 0x48, 0x6d, 0x76, + 0x02, 0x4c, 0x02, 0x4d, 0x08, 0x64, 0x64, 0x2f, + 0x4d, 0x04, 0x4d, 0x64, 0x0e, 0x45, 0x2c, 0x20, + 0x64, 0x64, 0x2f, 0x4d, 0x06, 0x4d, 0x45, 0x64, + 0x0a, 0x64, 0x64, 0x2d, 0x4d, 0x4d, 0x08, 0x4d, + 0x4d, 0x64, 0x64, 0x06, 0x4c, 0x4c, 0x4c, 0x06, + 0x4d, 0x4d, 0x4d, 0x0a, 0x64, 0x20, 0x4d, 0x4d, + 0x4d, 0x08, 0x4d, 0x4d, 0x4d, 0x64, 0x10, 0x45, + 0x2c, 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x0a, + 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0c, 0x64, 0x20, + 0x4d, 0x4d, 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, 0x4d, + 0x4d, 0x64, 0x12, 0x45, 0x2c, 0x20, 0x64, 0x20, + 0x4d, 0x4d, 0x4d, 0x4d, 0x0c, 0x4d, 0x4d, 0x4d, + 0x4d, 0x45, 0x64, 0x0a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x08, 0x6d, 0x6d, 0x73, 0x73, 0x04, 0x6d, + 0x73, 0x02, 0x79, 0x06, 0x4d, 0x2f, 0x79, 0x04, + 0x79, 0x4d, 0x0a, 0x64, 0x2f, 0x4d, 0x2f, 0x79, + 0x06, 0x79, 0x4d, 0x64, 0x12, 0x45, 0x2c, 0x20, + 0x64, 0x64, 0x2f, 0x4d, 0x2f, 0x79, 0x08, 0x79, + 0x4d, 0x45, 0x64, 0x1a, 0x27, 0x74, 0x68, 0xe1, + 0x6e, 0x67, 0x27, 0x20, 0x4d, 0x4d, 0x2c, 0x20, + 0x79, 0x06, 0x79, 0x4d, 0x4d, 0x0a, 0x4d, 0x4d, + 0x4d, 0x20, 0x79, 0x08, 0x79, 0x4d, 0x4d, 0x4d, + 0x10, 0x64, 0x20, 0x4d, 0x4d, 0x4d, 0x2c, 0x20, + 0x79, 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x16, + 0x45, 0x2c, 0x20, 0x64, 0x20, 0x4d, 0x4d, 0x4d, + 0x2c, 0x20, 0x79, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, + 0x45, 0x64, 0x19, 0x4d, 0x00, 0x4d, 0x00, 0x4d, + 0x00, 0x4d, 0x00, 0x20, 0x00, 0x27, 0x00, 0x6e, + 0x00, 0x03, 0x01, 0x6d, 0x00, 0x27, 0x00, 0x20, + 0x00, 0x79, 0x00, 0x0a, 0x79, 0x4d, 0x4d, 0x4d, + 0x4d, 0x0a, 0x51, 0x51, 0x51, 0x20, 0x79, 0x08, + 0x79, 0x51, 0x51, 0x51, 0x19, 0x51, 0x00, 0x51, + 0x00, 0x51, 0x00, 0x51, 0x00, 0x20, 0x00, 0x27, + 0x00, 0x6e, 0x00, 0x03, 0x01, 0x6d, 0x00, 0x27, + 0x00, 0x20, 0x00, 0x79, 0x00, 0x0a, 0x79, 0x51, + 0x51, 0x51, 0x51, 0x20, 0x61, 0x76, 0x61, 0x69, + 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x73, 0x39, 0x45, 0x00, 0x45, + 0x00, 0x45, 0x00, 0x45, 0x00, 0x2c, 0x00, 0x20, + 0x00, 0x27, 0x00, 0x6e, 0x00, 0x67, 0x00, 0xe0, + 0x00, 0x79, 0x00, 0x27, 0x00, 0x20, 0x00, 0x64, + 0x00, 0x64, 0x00, 0x20, 0x00, 0x4d, 0x00, 0x4d, + 0x00, 0x4d, 0x00, 0x4d, 0x00, 0x20, 0x00, 0x27, + 0x00, 0x6e, 0x00, 0x03, 0x01, 0x6d, 0x00, 0x27, + 0x00, 0x20, 0x00, 0x79, 0x00, 0x14, 0x79, 0x4d, + 0x4d, 0x4d, 0x4d, 0x45, 0x45, 0x45, 0x45, 0x64, + 0x39, 0x27, 0x00, 0x4e, 0x00, 0x67, 0x00, 0xe0, + 0x00, 0x79, 0x00, 0x27, 0x00, 0x20, 0x00, 0x64, + 0x00, 0x64, 0x00, 0x20, 0x00, 0x27, 0x00, 0x74, + 0x00, 0x68, 0x00, 0xe1, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x27, 0x00, 0x20, 0x00, 0x4d, 0x00, 0x4d, + 0x00, 0x20, 0x00, 0x27, 0x00, 0x6e, 0x00, 0x03, + 0x01, 0x6d, 0x00, 0x27, 0x00, 0x20, 0x00, 0x79, + 0x00, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, + 0x0e, 0x64, 0x64, 0x2f, 0x4d, 0x4d, 0x2f, 0x79, + 0x16, 0x64, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x73, 0x1a, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x7a, 0x7a, + 0x7a, 0x7a, 0x12, 0x68, 0x6d, 0x6d, 0x73, 0x73, + 0x7a, 0x7a, 0x7a, 0x7a, 0x14, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x7a, 0x08, + 0x68, 0x6d, 0x73, 0x7a, 0x0a, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x16, 0x74, 0x69, 0x6d, 0x65, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x0e, 0x66, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x0c, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0a, 0x74, 0x68, + 0x67, 0x20, 0x31, 0x0a, 0x74, 0x68, 0x67, 0x20, + 0x32, 0x0a, 0x74, 0x68, 0x67, 0x20, 0x33, 0x0a, + 0x74, 0x68, 0x67, 0x20, 0x34, 0x0a, 0x74, 0x68, + 0x67, 0x20, 0x35, 0x0a, 0x74, 0x68, 0x67, 0x20, + 0x36, 0x0a, 0x74, 0x68, 0x67, 0x20, 0x37, 0x0a, + 0x74, 0x68, 0x67, 0x20, 0x38, 0x0a, 0x74, 0x68, + 0x67, 0x20, 0x39, 0x0c, 0x74, 0x68, 0x67, 0x20, + 0x31, 0x30, 0x0c, 0x74, 0x68, 0x67, 0x20, 0x31, + 0x31, 0x0c, 0x74, 0x68, 0x67, 0x20, 0x31, 0x32, + 0x0e, 0x74, 0x68, 0xe1, 0x6e, 0x67, 0x20, 0x31, + 0x0e, 0x74, 0x68, 0xe1, 0x6e, 0x67, 0x20, 0x32, + 0x0e, 0x74, 0x68, 0xe1, 0x6e, 0x67, 0x20, 0x33, + 0x0e, 0x74, 0x68, 0xe1, 0x6e, 0x67, 0x20, 0x34, + 0x0e, 0x74, 0x68, 0xe1, 0x6e, 0x67, 0x20, 0x35, + 0x0e, 0x74, 0x68, 0xe1, 0x6e, 0x67, 0x20, 0x36, + 0x0e, 0x74, 0x68, 0xe1, 0x6e, 0x67, 0x20, 0x37, + 0x0e, 0x74, 0x68, 0xe1, 0x6e, 0x67, 0x20, 0x38, + 0x0e, 0x74, 0x68, 0xe1, 0x6e, 0x67, 0x20, 0x39, + 0x10, 0x74, 0x68, 0xe1, 0x6e, 0x67, 0x20, 0x31, + 0x30, 0x10, 0x74, 0x68, 0xe1, 0x6e, 0x67, 0x20, + 0x31, 0x31, 0x10, 0x74, 0x68, 0xe1, 0x6e, 0x67, + 0x20, 0x31, 0x32, 0x0c, 0x6d, 0x6f, 0x6e, 0x74, + 0x68, 0x73, 0x04, 0x43, 0x4e, 0x04, 0x54, 0x32, + 0x04, 0x54, 0x33, 0x04, 0x54, 0x34, 0x04, 0x54, + 0x35, 0x04, 0x54, 0x36, 0x04, 0x54, 0x37, 0x08, + 0x54, 0x68, 0x20, 0x32, 0x08, 0x54, 0x68, 0x20, + 0x33, 0x08, 0x54, 0x68, 0x20, 0x34, 0x08, 0x54, + 0x68, 0x20, 0x35, 0x08, 0x54, 0x68, 0x20, 0x36, + 0x08, 0x54, 0x68, 0x20, 0x37, 0x11, 0x43, 0x00, + 0x68, 0x00, 0xe7, 0x1e, 0x20, 0x00, 0x4e, 0x00, + 0x68, 0x00, 0xad, 0x1e, 0x74, 0x00, 0x0f, 0x54, + 0x00, 0x68, 0x00, 0xe9, 0x1e, 0x20, 0x00, 0x48, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x0d, 0x54, 0x00, + 0x68, 0x00, 0xe9, 0x1e, 0x20, 0x00, 0x42, 0x00, + 0x61, 0x00, 0x0d, 0x54, 0x00, 0x68, 0x00, 0xe9, + 0x1e, 0x20, 0x00, 0x54, 0x00, 0xb0, 0x01, 0x0f, + 0x54, 0x00, 0x68, 0x00, 0xe9, 0x1e, 0x20, 0x00, + 0x4e, 0x00, 0x03, 0x01, 0x6d, 0x00, 0x0f, 0x54, + 0x00, 0x68, 0x00, 0xe9, 0x1e, 0x20, 0x00, 0x53, + 0x00, 0xe1, 0x00, 0x75, 0x00, 0x0f, 0x54, 0x00, + 0x68, 0x00, 0xe9, 0x1e, 0x20, 0x00, 0x42, 0x00, + 0xa3, 0x1e, 0x79, 0x00, 0x08, 0x64, 0x61, 0x79, + 0x73, 0x04, 0x42, 0x45, 0x08, 0x65, 0x72, 0x61, + 0x73, 0x04, 0x53, 0x41, 0x04, 0x61, 0x6d, 0x04, + 0x43, 0x48, 0x04, 0x70, 0x6d, 0x14, 0x64, 0x61, + 0x79, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x73, + 0x08, 0x54, 0x6f, 0x75, 0x74, 0x08, 0x42, 0x61, + 0x62, 0x61, 0x0a, 0x48, 0x61, 0x74, 0x6f, 0x72, + 0x0a, 0x4b, 0x69, 0x61, 0x68, 0x6b, 0x08, 0x54, + 0x6f, 0x62, 0x61, 0x0c, 0x41, 0x6d, 0x73, 0x68, + 0x69, 0x72, 0x10, 0x42, 0x61, 0x72, 0x61, 0x6d, + 0x68, 0x61, 0x74, 0x12, 0x42, 0x61, 0x72, 0x61, + 0x6d, 0x6f, 0x75, 0x64, 0x61, 0x0e, 0x42, 0x61, + 0x73, 0x68, 0x61, 0x6e, 0x73, 0x0a, 0x50, 0x61, + 0x6f, 0x6e, 0x61, 0x08, 0x45, 0x70, 0x65, 0x70, + 0x0a, 0x4d, 0x65, 0x73, 0x72, 0x61, 0x0a, 0x4e, + 0x61, 0x73, 0x69, 0x65, 0x08, 0x45, 0x52, 0x41, + 0x30, 0x08, 0x45, 0x52, 0x41, 0x31, 0x10, 0x4d, + 0x65, 0x73, 0x6b, 0x65, 0x72, 0x65, 0x6d, 0x0c, + 0x54, 0x65, 0x6b, 0x65, 0x6d, 0x74, 0x0a, 0x48, + 0x65, 0x64, 0x61, 0x72, 0x0c, 0x54, 0x61, 0x68, + 0x73, 0x61, 0x73, 0x06, 0x54, 0x65, 0x72, 0x0e, + 0x59, 0x65, 0x6b, 0x61, 0x74, 0x69, 0x74, 0x0e, + 0x4d, 0x65, 0x67, 0x61, 0x62, 0x69, 0x74, 0x0c, + 0x4d, 0x69, 0x61, 0x7a, 0x69, 0x61, 0x0c, 0x47, + 0x65, 0x6e, 0x62, 0x6f, 0x74, 0x08, 0x53, 0x65, + 0x6e, 0x65, 0x0a, 0x48, 0x61, 0x6d, 0x6c, 0x65, + 0x0e, 0x4e, 0x65, 0x68, 0x61, 0x73, 0x73, 0x65, + 0x0e, 0x50, 0x61, 0x67, 0x75, 0x6d, 0x65, 0x6e, + 0x06, 0x4d, 0x30, 0x31, 0x06, 0x4d, 0x30, 0x32, + 0x06, 0x4d, 0x30, 0x33, 0x06, 0x4d, 0x30, 0x34, + 0x06, 0x4d, 0x30, 0x35, 0x06, 0x4d, 0x30, 0x36, + 0x06, 0x4d, 0x30, 0x37, 0x06, 0x4d, 0x30, 0x38, + 0x06, 0x4d, 0x30, 0x39, 0x06, 0x4d, 0x31, 0x30, + 0x06, 0x4d, 0x31, 0x31, 0x06, 0x4d, 0x31, 0x32, + 0x0c, 0x74, 0x72, 0x2e, 0x20, 0x43, 0x4e, 0x0c, + 0x73, 0x61, 0x75, 0x20, 0x43, 0x4e, 0x06, 0x42, + 0x43, 0x45, 0x04, 0x43, 0x45, 0x0c, 0x54, 0x69, + 0x73, 0x68, 0x72, 0x69, 0x0e, 0x48, 0x65, 0x73, + 0x68, 0x76, 0x61, 0x6e, 0x0c, 0x4b, 0x69, 0x73, + 0x6c, 0x65, 0x76, 0x0a, 0x54, 0x65, 0x76, 0x65, + 0x74, 0x0c, 0x53, 0x68, 0x65, 0x76, 0x61, 0x74, + 0x0c, 0x41, 0x64, 0x61, 0x72, 0x20, 0x49, 0x08, + 0x41, 0x64, 0x61, 0x72, 0x0a, 0x4e, 0x69, 0x73, + 0x61, 0x6e, 0x08, 0x49, 0x79, 0x61, 0x72, 0x0a, + 0x53, 0x69, 0x76, 0x61, 0x6e, 0x0a, 0x54, 0x61, + 0x6d, 0x75, 0x7a, 0x04, 0x41, 0x76, 0x08, 0x45, + 0x6c, 0x75, 0x6c, 0x0e, 0x41, 0x64, 0x61, 0x72, + 0x20, 0x49, 0x49, 0x04, 0x41, 0x4d, 0x0e, 0x43, + 0x68, 0x61, 0x69, 0x74, 0x72, 0x61, 0x10, 0x56, + 0x61, 0x69, 0x73, 0x61, 0x6b, 0x68, 0x61, 0x10, + 0x4a, 0x79, 0x61, 0x69, 0x73, 0x74, 0x68, 0x61, + 0x0c, 0x41, 0x73, 0x61, 0x64, 0x68, 0x61, 0x0e, + 0x53, 0x72, 0x61, 0x76, 0x61, 0x6e, 0x61, 0x0c, + 0x42, 0x68, 0x61, 0x64, 0x72, 0x61, 0x0c, 0x41, + 0x73, 0x76, 0x69, 0x6e, 0x61, 0x0e, 0x4b, 0x61, + 0x72, 0x74, 0x69, 0x6b, 0x61, 0x14, 0x41, 0x67, + 0x72, 0x61, 0x68, 0x61, 0x79, 0x61, 0x6e, 0x61, + 0x0a, 0x50, 0x61, 0x75, 0x73, 0x61, 0x0a, 0x4d, + 0x61, 0x67, 0x68, 0x61, 0x10, 0x50, 0x68, 0x61, + 0x6c, 0x67, 0x75, 0x6e, 0x61, 0x08, 0x53, 0x61, + 0x6b, 0x61, 0x08, 0x4d, 0x75, 0x68, 0x2e, 0x08, + 0x53, 0x61, 0x66, 0x2e, 0x0c, 0x52, 0x61, 0x62, + 0x2e, 0x20, 0x49, 0x0e, 0x52, 0x61, 0x62, 0x2e, + 0x20, 0x49, 0x49, 0x0c, 0x4a, 0x75, 0x6d, 0x2e, + 0x20, 0x49, 0x0e, 0x4a, 0x75, 0x6d, 0x2e, 0x20, + 0x49, 0x49, 0x08, 0x52, 0x61, 0x6a, 0x2e, 0x08, + 0x53, 0x68, 0x61, 0x2e, 0x08, 0x52, 0x61, 0x6d, + 0x2e, 0x0a, 0x53, 0x68, 0x61, 0x77, 0x2e, 0x11, + 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, 0x02, + 0x6c, 0x00, 0x2d, 0x00, 0x51, 0x00, 0x2e, 0x00, + 0x11, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, + 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x48, 0x00, 0x2e, + 0x00, 0x10, 0x4d, 0x75, 0x68, 0x61, 0x72, 0x72, + 0x61, 0x6d, 0x0a, 0x53, 0x61, 0x66, 0x61, 0x72, + 0x0f, 0x52, 0x00, 0x61, 0x00, 0x62, 0x00, 0x69, + 0x00, 0xbb, 0x02, 0x20, 0x00, 0x49, 0x00, 0x11, + 0x52, 0x00, 0x61, 0x00, 0x62, 0x00, 0x69, 0x00, + 0xbb, 0x02, 0x20, 0x00, 0x49, 0x00, 0x49, 0x00, + 0x10, 0x4a, 0x75, 0x6d, 0x61, 0x64, 0x61, 0x20, + 0x49, 0x12, 0x4a, 0x75, 0x6d, 0x61, 0x64, 0x61, + 0x20, 0x49, 0x49, 0x0a, 0x52, 0x61, 0x6a, 0x61, + 0x62, 0x0f, 0x53, 0x00, 0x68, 0x00, 0x61, 0x00, + 0xbb, 0x02, 0x62, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x0e, 0x52, 0x61, 0x6d, 0x61, 0x64, 0x61, 0x6e, + 0x0e, 0x53, 0x68, 0x61, 0x77, 0x77, 0x61, 0x6c, + 0x19, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, 0xbb, + 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x51, 0x00, 0x69, + 0x00, 0xbb, 0x02, 0x64, 0x00, 0x61, 0x00, 0x68, + 0x00, 0x19, 0x44, 0x00, 0x68, 0x00, 0x75, 0x00, + 0xbb, 0x02, 0x6c, 0x00, 0x2d, 0x00, 0x48, 0x00, + 0x69, 0x00, 0x6a, 0x00, 0x6a, 0x00, 0x61, 0x00, + 0x68, 0x00, 0x04, 0x41, 0x48, 0x1f, 0x54, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x36, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x13, 0x20, 0x36, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x21, 0x53, 0x00, 0x68, 0x00, 0x75, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1f, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, + 0x57, 0x00, 0x61, 0x00, 0x64, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x1f, 0x52, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x1d, 0x59, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1f, 0x4a, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6b, + 0x00, 0x61, 0x00, 0x6d, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x2d, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x2d, 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x2b, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x2d, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x2d, 0x00, 0x37, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x2a, 0x4a, 0x69, 0x6e, 0x67, 0x6f, + 0x2d, 0x6b, 0x65, 0x69, 0x75, 0x6e, 0x20, 0x28, + 0x37, 0x36, 0x37, 0x2d, 0x37, 0x37, 0x30, 0x29, + 0x1d, 0x48, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x37, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x2d, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, + 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, 0x64, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, 0x1f, 0x4b, + 0x00, 0x4d, 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x38, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0x4a, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x61, 0x00, + 0x6a, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, + 0x53, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x20, 0x54, + 0x65, 0x6e, 0x2d, 0x61, 0x6e, 0x20, 0x28, 0x38, + 0x35, 0x37, 0x2d, 0x38, 0x35, 0x39, 0x29, 0x1f, + 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x47, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, + 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1d, 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, + 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x34, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1b, 0x4c, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, + 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x1d, 0x41, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x1f, 0x45, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x1d, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x4a, 0x00, 0x69, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x29, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x27, 0x4a, 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x45, + 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4c, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x61, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x25, 0x4a, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x24, 0x54, 0x65, 0x6e, 0x2d, 0x65, + 0x69, 0x20, 0x28, 0x31, 0x31, 0x31, 0x30, 0x2d, + 0x31, 0x31, 0x31, 0x33, 0x29, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, + 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x44, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x4d, 0x01, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x45, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x6a, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x48, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, + 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4c, + 0x01, 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6d, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x4a, 0x00, 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x59, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x75, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x29, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x29, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x4a, + 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x21, 0x4a, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x27, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x75, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x29, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x74, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x29, 0x52, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x4e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x48, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x21, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x63, + 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x61, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, + 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, + 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x74, 0x00, 0x73, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x27, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x21, 0x4c, 0x01, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x45, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x27, + 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, 0x69, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x27, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x27, 0x4d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x23, 0x4d, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, + 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x27, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x65, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x61, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x41, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x25, 0x4d, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x02, 0x54, 0x02, 0x53, 0x0a, 0x4d, 0x65, 0x69, + 0x6a, 0x69, 0x0d, 0x54, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x0b, + 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x0c, 0x48, 0x65, 0x69, 0x73, 0x65, + 0x69, 0x12, 0x46, 0x61, 0x72, 0x76, 0x61, 0x72, + 0x64, 0x69, 0x6e, 0x16, 0x4f, 0x72, 0x64, 0x69, + 0x62, 0x65, 0x68, 0x65, 0x73, 0x68, 0x74, 0x0e, + 0x4b, 0x68, 0x6f, 0x72, 0x64, 0x61, 0x64, 0x06, + 0x54, 0x69, 0x72, 0x0c, 0x4d, 0x6f, 0x72, 0x64, + 0x61, 0x64, 0x12, 0x53, 0x68, 0x61, 0x68, 0x72, + 0x69, 0x76, 0x61, 0x72, 0x08, 0x4d, 0x65, 0x68, + 0x72, 0x08, 0x41, 0x62, 0x61, 0x6e, 0x08, 0x41, + 0x7a, 0x61, 0x72, 0x06, 0x44, 0x65, 0x79, 0x0c, + 0x42, 0x61, 0x68, 0x6d, 0x61, 0x6e, 0x0c, 0x45, + 0x73, 0x66, 0x61, 0x6e, 0x64, 0x04, 0x41, 0x50, + 0x17, 0x54, 0x00, 0x72, 0x00, 0xb0, 0x01, 0xdb, + 0x1e, 0x63, 0x00, 0x20, 0x00, 0x52, 0x00, 0x2e, + 0x00, 0x4f, 0x00, 0x2e, 0x00, 0x43, 0x00, 0x0c, + 0x52, 0x2e, 0x4f, 0x2e, 0x43, 0x2e, 0x12, 0x63, + 0x61, 0x6c, 0x65, 0x6e, 0x64, 0x61, 0x72, 0x73, + 0x08, 0x64, 0x61, 0x74, 0x65, 0x08, 0x6c, 0x61, + 0x74, 0x6e, 0x04, 0x6e, 0x75, 0x10, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x50, + 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x26, 0x7b, + 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0x1e, 0x6e, 0x65, 0x67, 0x61, 0x74, + 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, + 0x72, 0x6e, 0x0e, 0x64, 0x65, 0x63, 0x69, 0x6d, + 0x61, 0x6c, 0x26, 0x7b, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x63, 0x79, 0x7d, 0xa0, 0x7b, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x3c, 0x7b, + 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x7d, 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x63, 0x79, 0x7d, 0xa0, 0x7b, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x10, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x2a, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x7b, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x40, 0x7b, 0x6d, 0x69, + 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, + 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x0e, 0x70, 0x65, + 0x72, 0x63, 0x65, 0x6e, 0x74, 0x10, 0x70, 0x61, + 0x74, 0x74, 0x65, 0x72, 0x6e, 0x73, 0x02, 0x2c, + 0x02, 0x2e, 0x0a, 0x67, 0x72, 0x6f, 0x75, 0x70, + 0x06, 0x4e, 0x61, 0x4e, 0x06, 0x6e, 0x61, 0x6e, + 0x02, 0x2b, 0x10, 0x70, 0x6c, 0x75, 0x73, 0x53, + 0x69, 0x67, 0x6e, 0x02, 0x2d, 0x12, 0x6d, 0x69, + 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, + 0x25, 0x16, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, + 0x74, 0x53, 0x69, 0x67, 0x6e, 0x03, 0x1e, 0x22, + 0x10, 0x69, 0x6e, 0x66, 0x69, 0x6e, 0x69, 0x74, + 0x79, 0x0e, 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, + 0x73, 0x06, 0x41, 0x55, 0x24, 0x06, 0x41, 0x55, + 0x44, 0x04, 0x52, 0x24, 0x06, 0x42, 0x52, 0x4c, + 0x06, 0x43, 0x41, 0x24, 0x06, 0x43, 0x41, 0x44, + 0x06, 0x43, 0x4e, 0xa5, 0x06, 0x43, 0x4e, 0x59, + 0x03, 0xac, 0x20, 0x06, 0x45, 0x55, 0x52, 0x02, + 0xa3, 0x06, 0x47, 0x42, 0x50, 0x06, 0x48, 0x4b, + 0x24, 0x06, 0x48, 0x4b, 0x44, 0x03, 0xaa, 0x20, + 0x06, 0x49, 0x4c, 0x53, 0x03, 0xb9, 0x20, 0x06, + 0x49, 0x4e, 0x52, 0x06, 0x4a, 0x50, 0xa5, 0x06, + 0x4a, 0x50, 0x59, 0x03, 0xa9, 0x20, 0x06, 0x4b, + 0x52, 0x57, 0x06, 0x4d, 0x58, 0x24, 0x06, 0x4d, + 0x58, 0x4e, 0x06, 0x4e, 0x5a, 0x24, 0x06, 0x4e, + 0x5a, 0x44, 0x03, 0x3f, 0x0e, 0x06, 0x54, 0x48, + 0x42, 0x06, 0x4e, 0x54, 0x24, 0x06, 0x54, 0x57, + 0x44, 0x06, 0x55, 0x53, 0x24, 0x06, 0x55, 0x53, + 0x44, 0x03, 0xab, 0x20, 0x06, 0x56, 0x4e, 0x44, + 0x08, 0x46, 0x43, 0x46, 0x41, 0x06, 0x58, 0x41, + 0x46, 0x06, 0x45, 0x43, 0x24, 0x06, 0x58, 0x43, + 0x44, 0x06, 0x43, 0x46, 0x41, 0x06, 0x58, 0x4f, + 0x46, 0x08, 0x43, 0x46, 0x50, 0x46, 0x06, 0x58, + 0x50, 0x46, 0x14, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x63, 0x69, 0x65, 0x73, 0x52, 0x6e, 0x6f, + 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2f, + 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, + 0x61, 0x74, 0x61, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, + 0x70, 0x2f, 0x76, 0x69, 0x2e, 0x6a, 0x73, 0x0d, + 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, + 0x27, 0x00, 0xe9, 0x01, 0xe6, 0x68, 0x01, 0xa0, + 0x01, 0x00, 0x00, 0x00, 0x39, 0xd0, 0x00, 0x00, + 0x00, 0x43, 0xd1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd2, 0x00, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd4, 0x00, 0x00, 0x00, 0x04, + 0xd5, 0x00, 0x00, 0x00, 0x04, 0xd6, 0x00, 0x00, + 0x00, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x04, 0xd8, + 0x00, 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, 0x00, + 0x04, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdb, 0x00, + 0x00, 0x00, 0x04, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0xdd, 0x00, 0x00, 0x00, 0x04, 0xde, 0x00, 0x00, + 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, 0x04, 0xe0, + 0x00, 0x00, 0x00, 0x04, 0xe1, 0x00, 0x00, 0x00, + 0x04, 0xe2, 0x00, 0x00, 0x00, 0x26, 0x0f, 0x00, + 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x0a, 0x4d, 0xe4, + 0x00, 0x00, 0x00, 0x09, 0x4d, 0xe5, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, + 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x04, 0xe9, + 0x00, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xec, 0x00, 0x00, 0x00, + 0x4d, 0xec, 0x00, 0x00, 0x00, 0x04, 0xed, 0x00, + 0x00, 0x00, 0x4d, 0xee, 0x00, 0x00, 0x00, 0x04, + 0xef, 0x00, 0x00, 0x00, 0x4d, 0xf0, 0x00, 0x00, + 0x00, 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, 0xf2, + 0x00, 0x00, 0x00, 0x04, 0xf3, 0x00, 0x00, 0x00, + 0x4d, 0xf4, 0x00, 0x00, 0x00, 0x04, 0xf5, 0x00, + 0x00, 0x00, 0x4d, 0xf6, 0x00, 0x00, 0x00, 0x04, + 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xf8, 0x00, 0x00, + 0x00, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0xfa, + 0x00, 0x00, 0x00, 0x04, 0xfb, 0x00, 0x00, 0x00, + 0x4d, 0xfc, 0x00, 0x00, 0x00, 0x04, 0xfd, 0x00, + 0x00, 0x00, 0x4d, 0xfe, 0x00, 0x00, 0x00, 0x04, + 0xff, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x01, 0x00, + 0x00, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0x02, + 0x01, 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, 0x00, + 0x4d, 0x04, 0x01, 0x00, 0x00, 0x04, 0x05, 0x01, + 0x00, 0x00, 0x4d, 0x06, 0x01, 0x00, 0x00, 0x04, + 0x07, 0x01, 0x00, 0x00, 0x4d, 0x08, 0x01, 0x00, + 0x00, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0x0a, + 0x01, 0x00, 0x00, 0x04, 0x0b, 0x01, 0x00, 0x00, + 0x4d, 0x0c, 0x01, 0x00, 0x00, 0x04, 0x0d, 0x01, + 0x00, 0x00, 0x4d, 0x0e, 0x01, 0x00, 0x00, 0x04, + 0x0f, 0x01, 0x00, 0x00, 0x4d, 0x10, 0x01, 0x00, + 0x00, 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, 0x12, + 0x01, 0x00, 0x00, 0x04, 0x13, 0x01, 0x00, 0x00, + 0x4d, 0x14, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x4d, 0x16, 0x01, 0x00, 0x00, 0x04, + 0x17, 0x01, 0x00, 0x00, 0x4d, 0x18, 0x01, 0x00, + 0x00, 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, 0x1a, + 0x01, 0x00, 0x00, 0x04, 0x1b, 0x01, 0x00, 0x00, + 0x4d, 0x1c, 0x01, 0x00, 0x00, 0x04, 0x1d, 0x01, + 0x00, 0x00, 0x4d, 0x1e, 0x01, 0x00, 0x00, 0x04, + 0x1f, 0x01, 0x00, 0x00, 0x4d, 0x20, 0x01, 0x00, + 0x00, 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, 0x22, + 0x01, 0x00, 0x00, 0x04, 0x23, 0x01, 0x00, 0x00, + 0x4d, 0x24, 0x01, 0x00, 0x00, 0x04, 0x25, 0x01, + 0x00, 0x00, 0x4d, 0x26, 0x01, 0x00, 0x00, 0x04, + 0x27, 0x01, 0x00, 0x00, 0x4d, 0x28, 0x01, 0x00, + 0x00, 0x04, 0x27, 0x01, 0x00, 0x00, 0x4d, 0x29, + 0x01, 0x00, 0x00, 0x04, 0x2a, 0x01, 0x00, 0x00, + 0x4d, 0x2a, 0x01, 0x00, 0x00, 0x04, 0x2b, 0x01, + 0x00, 0x00, 0x4d, 0x2c, 0x01, 0x00, 0x00, 0x04, + 0x2d, 0x01, 0x00, 0x00, 0x4d, 0x2e, 0x01, 0x00, + 0x00, 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, 0x30, + 0x01, 0x00, 0x00, 0x04, 0x31, 0x01, 0x00, 0x00, + 0x4d, 0x32, 0x01, 0x00, 0x00, 0x04, 0x33, 0x01, + 0x00, 0x00, 0x4d, 0x34, 0x01, 0x00, 0x00, 0x04, + 0x35, 0x01, 0x00, 0x00, 0x4d, 0x36, 0x01, 0x00, + 0x00, 0x04, 0x37, 0x01, 0x00, 0x00, 0x4d, 0x38, + 0x01, 0x00, 0x00, 0x04, 0x39, 0x01, 0x00, 0x00, + 0x4d, 0x3a, 0x01, 0x00, 0x00, 0x04, 0x3b, 0x01, + 0x00, 0x00, 0x4d, 0x3c, 0x01, 0x00, 0x00, 0x04, + 0x3d, 0x01, 0x00, 0x00, 0x4d, 0x3e, 0x01, 0x00, + 0x00, 0x4d, 0x3f, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x40, 0x01, 0x00, 0x00, 0x4d, 0x41, 0x01, 0x00, + 0x00, 0x04, 0x42, 0x01, 0x00, 0x00, 0x4d, 0x43, + 0x01, 0x00, 0x00, 0x04, 0x35, 0x01, 0x00, 0x00, + 0x4d, 0x36, 0x01, 0x00, 0x00, 0x04, 0x44, 0x01, + 0x00, 0x00, 0x4d, 0x2e, 0x01, 0x00, 0x00, 0x4d, + 0x45, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x4d, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x4d, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, 0x0a, + 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x4d, 0x06, 0x01, 0x00, 0x00, 0x4d, 0x4b, 0x01, + 0x00, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x0b, 0xbe, 0x00, 0xbe, 0x01, 0xbe, 0x02, + 0xbe, 0x03, 0xbe, 0x04, 0xbe, 0x05, 0xbe, 0x06, + 0xbe, 0x07, 0xbe, 0x08, 0xbe, 0x09, 0xbe, 0x0a, + 0xbe, 0x0b, 0x26, 0x0c, 0x00, 0x4d, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x66, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7d, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7e, 0x01, 0x00, + 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, + 0x4d, 0x82, 0x01, 0x00, 0x00, 0x4d, 0xd5, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x0c, 0xbe, 0x0d, + 0xbe, 0x0e, 0xbe, 0x0f, 0xbe, 0x10, 0xbe, 0x11, + 0xbe, 0x12, 0xbe, 0x13, 0xbe, 0x14, 0xbe, 0x15, + 0xbe, 0x16, 0xbe, 0x17, 0x26, 0x0c, 0x00, 0x4d, + 0x4d, 0x01, 0x00, 0x00, 0xbe, 0x18, 0xbe, 0x19, + 0xbe, 0x1a, 0xbe, 0x1b, 0xbe, 0x1c, 0xbe, 0x1d, + 0xbe, 0x1e, 0xbe, 0x1f, 0xbe, 0x20, 0xbe, 0x21, + 0xbe, 0x22, 0xbe, 0x23, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0xbe, 0x24, 0xbe, 0x25, + 0xbe, 0x26, 0xbe, 0x27, 0xbe, 0x28, 0xbe, 0x29, + 0xbe, 0x2a, 0xbe, 0x2b, 0xbe, 0x2c, 0xbe, 0x2d, + 0xbe, 0x2e, 0xbe, 0x2f, 0x26, 0x0c, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x66, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, + 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, + 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x30, 0xbe, 0x31, 0xbe, 0x32, 0xbe, + 0x33, 0xbe, 0x34, 0xbe, 0x35, 0xbe, 0x36, 0xbe, + 0x37, 0xbe, 0x38, 0xbe, 0x39, 0xbe, 0x3a, 0xbe, + 0x3b, 0xbe, 0x3c, 0x26, 0x0d, 0x00, 0x4d, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, + 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, + 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, + 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, + 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, + 0x8f, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, + 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, + 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, + 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, + 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x04, + 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, + 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, 0x8d, + 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, 0x00, + 0x04, 0x8f, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x66, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, + 0x91, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, + 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x90, + 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7e, + 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, + 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, 0x4d, + 0xd7, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x3d, + 0xbe, 0x3e, 0xbe, 0x3f, 0xbe, 0x40, 0xbe, 0x41, + 0xbe, 0x42, 0xbe, 0x43, 0xbe, 0x44, 0xbe, 0x45, + 0xbe, 0x46, 0xbe, 0x47, 0xbe, 0x48, 0x26, 0x0c, + 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0xbe, 0x49, + 0xbe, 0x4a, 0xbe, 0x4b, 0xbe, 0x4c, 0xbe, 0x4d, + 0xbe, 0x4e, 0xbe, 0x4f, 0xbe, 0x50, 0xbe, 0x51, + 0xbe, 0x52, 0xbe, 0x53, 0xbe, 0x54, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0xbe, 0x55, + 0xbe, 0x56, 0xbe, 0x57, 0xbe, 0x58, 0xbe, 0x59, + 0xbe, 0x5a, 0xbe, 0x5b, 0xbe, 0x5c, 0xbe, 0x5d, + 0xbe, 0x5e, 0xbe, 0x5f, 0xbe, 0x60, 0x26, 0x0c, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x66, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7b, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, + 0x82, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x61, 0xbe, 0x62, 0xbe, + 0x63, 0xbe, 0x64, 0xbe, 0x65, 0xbe, 0x66, 0xbe, + 0x67, 0xbe, 0x68, 0xbe, 0x69, 0xbe, 0x6a, 0xbe, + 0x6b, 0xbe, 0x6c, 0xbe, 0x6d, 0x26, 0x0d, 0x00, + 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, + 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, + 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, + 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, + 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, + 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, + 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, + 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, + 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x26, 0x0d, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x92, + 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, + 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, + 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, + 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, + 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, + 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, + 0x04, 0x9c, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, + 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x66, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7b, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x90, 0x01, 0x00, + 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x90, + 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, + 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x4d, + 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x6e, 0xbe, 0x6f, 0xbe, 0x70, 0xbe, 0x71, + 0xbe, 0x72, 0xbe, 0x73, 0xbe, 0x74, 0xbe, 0x75, + 0xbe, 0x76, 0xbe, 0x77, 0xbe, 0x78, 0xbe, 0x79, + 0xbe, 0x7a, 0x26, 0x0d, 0x00, 0x4d, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, + 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, + 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, + 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, + 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, + 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, + 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, + 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, 0x00, + 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, + 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, + 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, + 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, + 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, + 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, + 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, + 0x9e, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x66, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x90, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x90, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7e, + 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, + 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x7b, + 0xbe, 0x7c, 0xbe, 0x7d, 0xbe, 0x7e, 0xbe, 0x7f, + 0xbe, 0x80, 0xbe, 0x81, 0xbe, 0x82, 0xbe, 0x83, + 0xbe, 0x84, 0xbe, 0x85, 0xbe, 0x86, 0x26, 0x0c, + 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x9f, + 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, + 0x04, 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, + 0x00, 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, + 0xa4, 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, + 0x00, 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, + 0x01, 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, + 0x04, 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, + 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, + 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, + 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, + 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, + 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, + 0xa8, 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, + 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x66, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7b, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x90, 0x01, 0x00, 0x00, + 0x04, 0x91, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x90, 0x01, + 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x90, 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, + 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x87, 0xbe, 0x88, 0xbe, 0x89, 0xbe, 0x8a, 0xbe, + 0x8b, 0xbe, 0x8c, 0xbe, 0x8d, 0xbe, 0x8e, 0xbe, + 0x8f, 0xbe, 0x90, 0xbe, 0x91, 0xbe, 0x92, 0x26, + 0x0c, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x66, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7b, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xab, 0x01, 0x00, + 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, + 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, + 0x26, 0x04, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, + 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, + 0xae, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, + 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, + 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, + 0x26, 0x04, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7e, + 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, + 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x93, + 0xbe, 0x94, 0xbe, 0x95, 0xbe, 0x96, 0xbe, 0x97, + 0xbe, 0x98, 0xbe, 0x99, 0xbe, 0x9a, 0xbe, 0x9b, + 0xbe, 0x9c, 0xbe, 0x9d, 0xbe, 0x9e, 0xbe, 0x9f, + 0xbe, 0xa0, 0x26, 0x0e, 0x00, 0x4d, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, + 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, + 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, 0xb3, + 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, 0x00, + 0x04, 0xb5, 0x01, 0x00, 0x00, 0x04, 0xb6, 0x01, + 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, + 0xb8, 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, + 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, 0x04, 0xbb, + 0x01, 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, + 0x26, 0x0e, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, + 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, 0x04, + 0xb2, 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, + 0x00, 0x04, 0xb4, 0x01, 0x00, 0x00, 0x04, 0xb5, + 0x01, 0x00, 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, + 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, + 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, 0x04, + 0xba, 0x01, 0x00, 0x00, 0x04, 0xbb, 0x01, 0x00, + 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, 0x26, 0x0e, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x66, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7b, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xbd, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0xbd, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xbd, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, + 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x4d, + 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0xa1, 0xbe, 0xa2, 0xbe, 0xa3, 0xbe, 0xa4, + 0xbe, 0xa5, 0xbe, 0xa6, 0xbe, 0xa7, 0xbe, 0xa8, + 0xbe, 0xa9, 0xbe, 0xaa, 0xbe, 0xab, 0xbe, 0xac, + 0x26, 0x0c, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, + 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, 0x04, + 0xc1, 0x01, 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, + 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, 0x04, 0xc4, + 0x01, 0x00, 0x00, 0x04, 0xc5, 0x01, 0x00, 0x00, + 0x04, 0xc6, 0x01, 0x00, 0x00, 0x04, 0xc7, 0x01, + 0x00, 0x00, 0x04, 0xc8, 0x01, 0x00, 0x00, 0x04, + 0xc9, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, + 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, 0x04, 0xc0, + 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, + 0x04, 0xc2, 0x01, 0x00, 0x00, 0x04, 0xc3, 0x01, + 0x00, 0x00, 0x04, 0xc4, 0x01, 0x00, 0x00, 0x04, + 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, + 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, + 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x66, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, + 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x7b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xca, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0xca, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xca, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x4d, + 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, + 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, + 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0xad, 0xbe, 0xae, 0xbe, 0xaf, + 0xbe, 0xb0, 0xbe, 0xb1, 0xbe, 0xb2, 0xbe, 0xb3, + 0xbe, 0xb4, 0xbe, 0xb5, 0xbe, 0xb6, 0xbe, 0xb7, + 0xbe, 0xb8, 0x26, 0x0c, 0x00, 0x4d, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, 0x00, 0x04, + 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, 0x01, 0x00, + 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, 0x04, 0xcf, + 0x01, 0x00, 0x00, 0x04, 0xd0, 0x01, 0x00, 0x00, + 0x04, 0xd1, 0x01, 0x00, 0x00, 0x04, 0xd2, 0x01, + 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, 0x00, 0x04, + 0xd4, 0x01, 0x00, 0x00, 0x04, 0xd5, 0x01, 0x00, + 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd7, + 0x01, 0x00, 0x00, 0x04, 0xd8, 0x01, 0x00, 0x00, + 0x04, 0xd9, 0x01, 0x00, 0x00, 0x04, 0xda, 0x01, + 0x00, 0x00, 0x04, 0xdb, 0x01, 0x00, 0x00, 0x04, + 0xdc, 0x01, 0x00, 0x00, 0x04, 0xdd, 0x01, 0x00, + 0x00, 0x04, 0xde, 0x01, 0x00, 0x00, 0x04, 0xdf, + 0x01, 0x00, 0x00, 0x04, 0xe0, 0x01, 0x00, 0x00, + 0x04, 0xe1, 0x01, 0x00, 0x00, 0x04, 0xe2, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x66, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, + 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, + 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xe3, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7d, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7e, 0x01, 0x00, + 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, + 0x4d, 0x82, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0xb9, 0xbe, 0xba, + 0xbe, 0xbb, 0xbe, 0xbc, 0xbe, 0xbd, 0xbe, 0xbe, + 0xbe, 0xbf, 0xbe, 0xc0, 0xbe, 0xc1, 0xbe, 0xc2, + 0xbe, 0xc3, 0xbe, 0xc4, 0x26, 0x0c, 0x00, 0x4d, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, 0x00, + 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, 0xcd, + 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, 0x00, + 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, 0x01, + 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, 0x04, + 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, 0x00, + 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, 0xd5, + 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, 0xd8, 0x01, + 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, 0x04, + 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, 0x00, + 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, 0x04, 0xdd, + 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, 0x00, + 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, 0xe0, 0x01, + 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, 0x00, 0x04, + 0xe2, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x66, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, + 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0xe3, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xe3, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7e, + 0x01, 0x00, 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, + 0x04, 0x80, 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, + 0x00, 0x00, 0x4d, 0x82, 0x01, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0xc5, + 0xbe, 0xc6, 0xbe, 0xc7, 0xbe, 0xc8, 0xbe, 0xc9, + 0xbe, 0xca, 0xbe, 0xcb, 0xbe, 0xcc, 0xbe, 0xcd, + 0xbe, 0xce, 0xbe, 0xcf, 0xbe, 0xd0, 0x26, 0x0c, + 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x66, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x04, 0x78, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7b, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xe4, 0x01, 0x00, 0x00, + 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, + 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, + 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, + 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, + 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, + 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, + 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, + 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, + 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, + 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, + 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, + 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, + 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, + 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, + 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, + 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, + 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, + 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, + 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, 0x04, 0x03, + 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, 0x04, + 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, + 0x04, 0x05, 0x02, 0x00, 0x00, 0x4d, 0x21, 0x00, + 0x00, 0x80, 0x04, 0x06, 0x02, 0x00, 0x00, 0x4d, + 0x22, 0x00, 0x00, 0x80, 0x04, 0x07, 0x02, 0x00, + 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, 0x08, + 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, + 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, + 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x4d, + 0x26, 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, 0x00, + 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, 0x0c, + 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, + 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, + 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, + 0x2a, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, + 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, 0x10, + 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, + 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, + 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, + 0x2e, 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, + 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, 0x14, + 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, + 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, + 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, + 0x32, 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, + 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, 0x18, + 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, + 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, + 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, + 0x36, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, + 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, 0x1c, + 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, + 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, + 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, + 0x3a, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, + 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, 0x20, + 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, + 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, + 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, + 0x3e, 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, + 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, 0x24, + 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, + 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, + 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, + 0x42, 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, + 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, 0x28, + 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, + 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, + 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, + 0x46, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, + 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, 0x2c, + 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, + 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, + 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, + 0x4a, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, + 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, 0x30, + 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, + 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, + 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, + 0x4e, 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, + 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, 0x34, + 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, + 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, + 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, + 0x52, 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, + 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, 0x38, + 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, + 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, + 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, + 0x56, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, + 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, 0x3c, + 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, + 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, + 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, + 0x5a, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, + 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, 0x40, + 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, + 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, + 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, + 0x5e, 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, + 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, 0x44, + 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, + 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, + 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, + 0x62, 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, + 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, 0x48, + 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, + 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, + 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, + 0x66, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, + 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, 0x4c, + 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, + 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, + 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, + 0x6a, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, + 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, 0x50, + 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, + 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, + 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, + 0x6e, 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, + 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, 0x54, + 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, + 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, + 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, + 0x72, 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, + 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, 0x58, + 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, + 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, + 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, + 0x76, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, + 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, 0x5c, + 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, + 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, + 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, + 0x7a, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, + 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, 0x60, + 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, + 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, + 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, + 0x7e, 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, + 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, 0x64, + 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, + 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, + 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, + 0x82, 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, + 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, 0x68, + 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, + 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, + 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, + 0x86, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, + 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, 0x6c, + 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, + 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, + 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, + 0x8a, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, + 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, 0x70, + 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, + 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, + 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, + 0x8e, 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, + 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, 0x74, + 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, + 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, + 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, + 0x92, 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, + 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, 0x78, + 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, + 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, + 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, + 0x96, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, + 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, 0x7c, + 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, + 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, + 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, + 0x9a, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, + 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, 0x80, + 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, + 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, + 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, + 0x9e, 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, + 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, 0x84, + 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, + 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, + 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, + 0xa2, 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, + 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, 0x88, + 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, + 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, + 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, + 0xa6, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, + 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, 0x8c, + 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, + 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, + 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, + 0xaa, 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, + 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, 0x90, + 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, + 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, + 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, + 0xae, 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, + 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, 0x94, + 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, + 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, + 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, + 0xb2, 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, + 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, 0x98, + 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, + 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, + 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, + 0xb6, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, + 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, 0x9c, + 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, + 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, + 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, + 0xba, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, + 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, 0xa0, + 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, + 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, + 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, + 0xbe, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, + 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, 0xa4, + 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, + 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, + 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, + 0xc2, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, + 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, 0xa8, + 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, + 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, + 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, + 0xc6, 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, + 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, 0xac, + 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, + 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, + 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, + 0xca, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, + 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, 0xb0, + 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, + 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, + 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, + 0xce, 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, + 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, 0xb4, + 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, + 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, + 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, + 0xd2, 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, + 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, 0xb8, + 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, + 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, + 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, + 0xd6, 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, + 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, 0xbc, + 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, + 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, + 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, 0xc0, + 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, + 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, 0xc4, + 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, + 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, + 0xe2, 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, + 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, + 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, + 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, 0x16, + 0x01, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, + 0x04, 0xcc, 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, + 0x00, 0x80, 0x04, 0xcd, 0x02, 0x00, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x80, 0x04, 0x04, 0x01, 0x00, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, + 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, + 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, + 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, + 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, + 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, + 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, + 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, + 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, + 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, + 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, + 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, + 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, + 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, + 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, + 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, + 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, + 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, + 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, + 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, 0x04, 0x03, + 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, 0x04, + 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, + 0x04, 0x05, 0x02, 0x00, 0x00, 0x4d, 0x21, 0x00, + 0x00, 0x80, 0x04, 0x06, 0x02, 0x00, 0x00, 0x4d, + 0x22, 0x00, 0x00, 0x80, 0x04, 0x07, 0x02, 0x00, + 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, 0x08, + 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, + 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, + 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x4d, + 0x26, 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, 0x00, + 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, 0x0c, + 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, + 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, + 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, + 0x2a, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, + 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, 0x10, + 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, + 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, + 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, + 0x2e, 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, + 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, 0x14, + 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, + 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, + 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, + 0x32, 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, + 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, 0x18, + 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, + 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, + 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, + 0x36, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, + 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, 0x1c, + 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, + 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, + 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, + 0x3a, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, + 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, 0x20, + 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, + 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, + 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, + 0x3e, 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, + 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, 0x24, + 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, + 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, + 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, + 0x42, 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, + 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, 0x28, + 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, + 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, + 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, + 0x46, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, + 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, 0x2c, + 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, + 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, + 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, + 0x4a, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, + 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, 0x30, + 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, + 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, + 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, + 0x4e, 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, + 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, 0x34, + 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, + 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, + 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, + 0x52, 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, + 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, 0x38, + 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, + 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, + 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, + 0x56, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, + 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, 0x3c, + 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, + 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, + 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, + 0x5a, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, + 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, 0x40, + 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, + 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, + 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, + 0x5e, 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, + 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, 0x44, + 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, + 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, + 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, + 0x62, 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, + 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, 0x48, + 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, + 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, + 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, + 0x66, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, + 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, 0x4c, + 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, + 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, + 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, + 0x6a, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, + 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, 0x50, + 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, + 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, + 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, + 0x6e, 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, + 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, 0x54, + 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, + 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, + 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, + 0x72, 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, + 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, 0x58, + 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, + 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, + 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, + 0x76, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, + 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, 0x5c, + 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, + 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, + 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, + 0x7a, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, + 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, 0x60, + 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, + 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, + 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, + 0x7e, 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, + 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, 0x64, + 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, + 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, + 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, + 0x82, 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, + 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, 0x68, + 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, + 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, + 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, + 0x86, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, + 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, 0x6c, + 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, + 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, + 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, + 0x8a, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, + 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, 0x70, + 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, + 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, + 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, + 0x8e, 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, + 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, 0x74, + 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, + 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, + 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, + 0x92, 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, + 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, 0x78, + 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, + 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, + 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, + 0x96, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, + 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, 0x7c, + 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, + 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, + 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, + 0x9a, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, + 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, 0x80, + 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, + 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, + 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, + 0x9e, 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, + 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, 0x84, + 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, + 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, + 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, + 0xa2, 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, + 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, 0x88, + 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, + 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, + 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, + 0xa6, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, + 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, 0x8c, + 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, + 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, + 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, + 0xaa, 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, + 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, 0x90, + 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, + 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, + 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, + 0xae, 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, + 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, 0x94, + 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, + 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, + 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, + 0xb2, 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, + 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, 0x98, + 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, + 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, + 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, + 0xb6, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, + 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, 0x9c, + 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, + 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, + 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, + 0xba, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, + 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, 0xa0, + 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, + 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, + 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, + 0xbe, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, + 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, 0xa4, + 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, + 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, + 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, + 0xc2, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, + 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, 0xa8, + 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, + 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, + 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, + 0xc6, 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, + 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, 0xac, + 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, + 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, + 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, + 0xca, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, + 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, 0xb0, + 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, + 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, + 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, + 0xce, 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, + 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, 0xb4, + 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, + 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, + 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, + 0xd2, 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, + 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, 0xb8, + 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, + 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, + 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, + 0xd6, 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, + 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, 0xbc, + 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, + 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, + 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, 0xc0, + 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, + 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, 0xc4, + 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, + 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, + 0xe2, 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, + 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, + 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, + 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, 0xce, + 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, + 0x04, 0xcf, 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, + 0x00, 0x80, 0x04, 0xd0, 0x02, 0x00, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x80, 0x04, 0xd1, 0x02, 0x00, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xe4, 0x01, 0x00, 0x00, + 0x04, 0xe5, 0x01, 0x00, 0x00, 0x04, 0xe6, 0x01, + 0x00, 0x00, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x04, + 0xe8, 0x01, 0x00, 0x00, 0x04, 0xe9, 0x01, 0x00, + 0x00, 0x04, 0xea, 0x01, 0x00, 0x00, 0x04, 0xeb, + 0x01, 0x00, 0x00, 0x04, 0xec, 0x01, 0x00, 0x00, + 0x04, 0xed, 0x01, 0x00, 0x00, 0x04, 0xee, 0x01, + 0x00, 0x00, 0x04, 0xef, 0x01, 0x00, 0x00, 0x04, + 0xf0, 0x01, 0x00, 0x00, 0x04, 0xf1, 0x01, 0x00, + 0x00, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x04, 0xf3, + 0x01, 0x00, 0x00, 0x04, 0xf4, 0x01, 0x00, 0x00, + 0x04, 0xf5, 0x01, 0x00, 0x00, 0x04, 0xf6, 0x01, + 0x00, 0x00, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x04, + 0xf8, 0x01, 0x00, 0x00, 0x04, 0xf9, 0x01, 0x00, + 0x00, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x04, 0xfb, + 0x01, 0x00, 0x00, 0x04, 0xfc, 0x01, 0x00, 0x00, + 0x04, 0xfd, 0x01, 0x00, 0x00, 0x04, 0xfe, 0x01, + 0x00, 0x00, 0x04, 0xff, 0x01, 0x00, 0x00, 0x04, + 0x00, 0x02, 0x00, 0x00, 0x04, 0x01, 0x02, 0x00, + 0x00, 0x04, 0x02, 0x02, 0x00, 0x00, 0x04, 0x03, + 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, 0x04, + 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, + 0x04, 0x05, 0x02, 0x00, 0x00, 0x4d, 0x21, 0x00, + 0x00, 0x80, 0x04, 0x06, 0x02, 0x00, 0x00, 0x4d, + 0x22, 0x00, 0x00, 0x80, 0x04, 0x07, 0x02, 0x00, + 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, 0x08, + 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, + 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, + 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x4d, + 0x26, 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, 0x00, + 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, 0x0c, + 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, + 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, + 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, + 0x2a, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, + 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, 0x10, + 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, + 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, + 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, + 0x2e, 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, + 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, 0x14, + 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, + 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, + 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, + 0x32, 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, + 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, 0x18, + 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, + 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, + 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, + 0x36, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, + 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, 0x1c, + 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, + 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, + 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, + 0x3a, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, + 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, 0x20, + 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, + 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, + 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, + 0x3e, 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, + 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, 0x24, + 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, + 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, + 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, + 0x42, 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, + 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, 0x28, + 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, + 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, + 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, + 0x46, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, + 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, 0x2c, + 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, + 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, + 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, + 0x4a, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, + 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, 0x30, + 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, + 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, + 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, + 0x4e, 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, + 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, 0x34, + 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, + 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, + 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, + 0x52, 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, + 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, 0x38, + 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, + 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, + 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, + 0x56, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, + 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, 0x3c, + 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, + 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, + 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, + 0x5a, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, + 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, 0x40, + 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, + 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, + 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, + 0x5e, 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, + 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, 0x44, + 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, + 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, + 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, + 0x62, 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, + 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, 0x48, + 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, + 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, + 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, + 0x66, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, + 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, 0x4c, + 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, + 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, + 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, + 0x6a, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, + 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, 0x50, + 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, + 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, + 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, + 0x6e, 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, + 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, 0x54, + 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, + 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, + 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, + 0x72, 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, + 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, 0x58, + 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, + 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, + 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, + 0x76, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, + 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, 0x5c, + 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, + 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, + 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, + 0x7a, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, + 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, 0x60, + 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, + 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, + 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, + 0x7e, 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, + 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, 0x64, + 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, + 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, + 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, + 0x82, 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, + 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, 0x68, + 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, + 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, + 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, + 0x86, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, + 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, 0x6c, + 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, + 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, + 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, + 0x8a, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, + 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, 0x70, + 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, + 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, + 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, + 0x8e, 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, + 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, 0x74, + 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, + 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, + 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, + 0x92, 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, + 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, 0x78, + 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, + 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, + 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, + 0x96, 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, + 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, 0x7c, + 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, + 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, + 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, + 0x9a, 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, + 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, 0x80, + 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, + 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, + 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, + 0x9e, 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, + 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, 0x84, + 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, + 0x04, 0x85, 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, + 0x00, 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, + 0xa2, 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, + 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, 0x88, + 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, + 0x04, 0x89, 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, + 0x00, 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, + 0xa6, 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, + 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, 0x8c, + 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, + 0x04, 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, + 0x00, 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, + 0xaa, 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, + 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, 0x90, + 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, + 0x04, 0x91, 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, + 0x00, 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, + 0xae, 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, + 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, 0x94, + 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, + 0x04, 0x95, 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, + 0x00, 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, + 0xb2, 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, + 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, 0x98, + 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, + 0x04, 0x99, 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, + 0x00, 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, + 0xb6, 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, + 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, 0x9c, + 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, + 0x04, 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, + 0x00, 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, + 0xba, 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, + 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, 0xa0, + 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, + 0x04, 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, + 0x00, 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, + 0xbe, 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, + 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, 0xa4, + 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, + 0x04, 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, + 0x00, 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, + 0xc2, 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, + 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, 0xa8, + 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, + 0x04, 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, + 0x00, 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, + 0xc6, 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, + 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, 0xac, + 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, + 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, + 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, + 0xca, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, + 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, 0xb0, + 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, + 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, + 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, + 0xce, 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, + 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, 0xb4, + 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, + 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, + 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, + 0xd2, 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, + 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, 0xb8, + 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, + 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, + 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, + 0xd6, 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, + 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, 0xbc, + 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, + 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, + 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, 0xc0, + 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, + 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, 0xc4, + 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, + 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, + 0xe2, 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, + 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, 0xc8, + 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, + 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, + 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, 0xce, + 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, + 0x04, 0xcf, 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, + 0x00, 0x80, 0x04, 0xd0, 0x02, 0x00, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x80, 0x04, 0xd1, 0x02, 0x00, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0x7f, + 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, 0x82, 0x01, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0xd1, 0xbe, 0xd2, 0xbe, 0xd3, 0xbe, + 0xd4, 0xbe, 0xd5, 0xbe, 0xd6, 0xbe, 0xd7, 0xbe, + 0xd8, 0xbe, 0xd9, 0xbe, 0xda, 0xbe, 0xdb, 0xbe, + 0xdc, 0x26, 0x0c, 0x00, 0x4d, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0xd2, 0x02, 0x00, 0x00, 0x04, 0xd3, + 0x02, 0x00, 0x00, 0x04, 0xd4, 0x02, 0x00, 0x00, + 0x04, 0xd5, 0x02, 0x00, 0x00, 0x04, 0xd6, 0x02, + 0x00, 0x00, 0x04, 0xd7, 0x02, 0x00, 0x00, 0x04, + 0xd8, 0x02, 0x00, 0x00, 0x04, 0xd9, 0x02, 0x00, + 0x00, 0x04, 0xda, 0x02, 0x00, 0x00, 0x04, 0xdb, + 0x02, 0x00, 0x00, 0x04, 0xdc, 0x02, 0x00, 0x00, + 0x04, 0xdd, 0x02, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xd2, 0x02, + 0x00, 0x00, 0x04, 0xd3, 0x02, 0x00, 0x00, 0x04, + 0xd4, 0x02, 0x00, 0x00, 0x04, 0xd5, 0x02, 0x00, + 0x00, 0x04, 0xd6, 0x02, 0x00, 0x00, 0x04, 0xd7, + 0x02, 0x00, 0x00, 0x04, 0xd8, 0x02, 0x00, 0x00, + 0x04, 0xd9, 0x02, 0x00, 0x00, 0x04, 0xda, 0x02, + 0x00, 0x00, 0x04, 0xdb, 0x02, 0x00, 0x00, 0x04, + 0xdc, 0x02, 0x00, 0x00, 0x04, 0xdd, 0x02, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x66, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xde, + 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0xde, 0x02, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xde, 0x02, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7d, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, 0x4d, + 0x82, 0x01, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0xdd, 0xbe, 0xde, 0xbe, + 0xdf, 0xbe, 0xe0, 0xbe, 0xe1, 0xbe, 0xe2, 0xbe, + 0xe3, 0xbe, 0xe4, 0xbe, 0xe5, 0xbe, 0xe6, 0xbe, + 0xe7, 0xbe, 0xe8, 0x26, 0x0c, 0x00, 0x4d, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, + 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x66, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xdf, 0x02, 0x00, 0x00, 0x04, 0xe0, 0x02, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0xdf, 0x02, 0x00, 0x00, 0x04, + 0xe0, 0x02, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xdf, 0x02, 0x00, + 0x00, 0x04, 0xe0, 0x02, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x7d, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7e, 0x01, 0x00, + 0x00, 0x4d, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, + 0x01, 0x00, 0x00, 0x4d, 0x81, 0x01, 0x00, 0x00, + 0x4d, 0x82, 0x01, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x00, 0x4d, 0xe1, 0x02, 0x00, 0x00, 0x4d, + 0xe2, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xe3, 0x02, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe4, 0x02, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xe5, 0x02, 0x00, + 0x00, 0x4d, 0xe6, 0x02, 0x00, 0x00, 0x04, 0xe7, + 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x02, 0x00, 0x00, + 0x4d, 0xe9, 0x02, 0x00, 0x00, 0x0b, 0x04, 0xea, + 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x02, 0x00, 0x00, + 0x04, 0xeb, 0x02, 0x00, 0x00, 0x4d, 0xe8, 0x02, + 0x00, 0x00, 0x4d, 0xec, 0x02, 0x00, 0x00, 0x0b, + 0x04, 0xed, 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x02, + 0x00, 0x00, 0x04, 0xee, 0x02, 0x00, 0x00, 0x4d, + 0xe8, 0x02, 0x00, 0x00, 0x4d, 0xef, 0x02, 0x00, + 0x00, 0x4d, 0xf0, 0x02, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0xf1, 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x02, + 0x00, 0x00, 0x04, 0xf2, 0x02, 0x00, 0x00, 0x4d, + 0xf3, 0x02, 0x00, 0x00, 0x04, 0xf4, 0x02, 0x00, + 0x00, 0x4d, 0xf5, 0x02, 0x00, 0x00, 0x04, 0xf6, + 0x02, 0x00, 0x00, 0x4d, 0xf7, 0x02, 0x00, 0x00, + 0x04, 0xf8, 0x02, 0x00, 0x00, 0x4d, 0xf9, 0x02, + 0x00, 0x00, 0x04, 0xfa, 0x02, 0x00, 0x00, 0x4d, + 0xfb, 0x02, 0x00, 0x00, 0x04, 0xfc, 0x02, 0x00, + 0x00, 0x4d, 0xfd, 0x02, 0x00, 0x00, 0x4d, 0xe3, + 0x02, 0x00, 0x00, 0x4d, 0xfe, 0x02, 0x00, 0x00, + 0x0b, 0x04, 0xff, 0x02, 0x00, 0x00, 0x4d, 0x00, + 0x03, 0x00, 0x00, 0x04, 0x01, 0x03, 0x00, 0x00, + 0x4d, 0x02, 0x03, 0x00, 0x00, 0x04, 0x03, 0x03, + 0x00, 0x00, 0x4d, 0x04, 0x03, 0x00, 0x00, 0x04, + 0x05, 0x03, 0x00, 0x00, 0x4d, 0x06, 0x03, 0x00, + 0x00, 0x04, 0x07, 0x03, 0x00, 0x00, 0x4d, 0x08, + 0x03, 0x00, 0x00, 0x04, 0x09, 0x03, 0x00, 0x00, + 0x4d, 0x0a, 0x03, 0x00, 0x00, 0x04, 0x0b, 0x03, + 0x00, 0x00, 0x4d, 0x0c, 0x03, 0x00, 0x00, 0x04, + 0x0d, 0x03, 0x00, 0x00, 0x4d, 0x0e, 0x03, 0x00, + 0x00, 0x04, 0x0f, 0x03, 0x00, 0x00, 0x4d, 0x10, + 0x03, 0x00, 0x00, 0x04, 0x11, 0x03, 0x00, 0x00, + 0x4d, 0x12, 0x03, 0x00, 0x00, 0x04, 0x13, 0x03, + 0x00, 0x00, 0x4d, 0x14, 0x03, 0x00, 0x00, 0x04, + 0x15, 0x03, 0x00, 0x00, 0x4d, 0x16, 0x03, 0x00, + 0x00, 0x04, 0x17, 0x03, 0x00, 0x00, 0x4d, 0x18, + 0x03, 0x00, 0x00, 0x04, 0x19, 0x03, 0x00, 0x00, + 0x4d, 0x1a, 0x03, 0x00, 0x00, 0x04, 0x1b, 0x03, + 0x00, 0x00, 0x4d, 0x1c, 0x03, 0x00, 0x00, 0x04, + 0x1d, 0x03, 0x00, 0x00, 0x4d, 0x1e, 0x03, 0x00, + 0x00, 0x04, 0x1f, 0x03, 0x00, 0x00, 0x4d, 0x20, + 0x03, 0x00, 0x00, 0x04, 0x21, 0x03, 0x00, 0x00, + 0x4d, 0x22, 0x03, 0x00, 0x00, 0x04, 0x23, 0x03, + 0x00, 0x00, 0x4d, 0x24, 0x03, 0x00, 0x00, 0x04, + 0x25, 0x03, 0x00, 0x00, 0x4d, 0x26, 0x03, 0x00, + 0x00, 0x04, 0x27, 0x03, 0x00, 0x00, 0x4d, 0x28, + 0x03, 0x00, 0x00, 0x4d, 0x29, 0x03, 0x00, 0x00, + 0x4d, 0x45, 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, + 0xcc, 0x28, 0xd4, 0x0c, 0x01, 0x00, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, + 0x33, 0x07, 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_zh_size = 30700; + +const uint8_t intl_zh[30700] = { + 0x01, 0xf0, 0x05, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x04, 0x7a, 0x68, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x0e, + 0x7b, 0x31, 0x7d, 0x20, 0x7b, 0x30, 0x7d, 0x0a, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, 0x65, + 0x64, 0x69, 0x75, 0x6d, 0x08, 0x66, 0x75, 0x6c, + 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x05, 0x64, + 0x00, 0xe5, 0x65, 0x02, 0x64, 0x06, 0x63, 0x63, + 0x63, 0x02, 0x45, 0x07, 0x64, 0x00, 0xe5, 0x65, + 0x45, 0x00, 0x04, 0x45, 0x64, 0x0e, 0x45, 0x20, + 0x61, 0x68, 0x3a, 0x6d, 0x6d, 0x06, 0x45, 0x68, + 0x6d, 0x0c, 0x45, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x06, 0x45, 0x48, 0x6d, 0x14, 0x45, 0x20, 0x61, + 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x08, + 0x45, 0x68, 0x6d, 0x73, 0x12, 0x45, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x08, 0x45, + 0x48, 0x6d, 0x73, 0x07, 0x47, 0x00, 0x79, 0x00, + 0x74, 0x5e, 0x04, 0x47, 0x79, 0x0b, 0x47, 0x00, + 0x79, 0x00, 0x74, 0x5e, 0x4d, 0x00, 0x08, 0x67, + 0x0a, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x0f, 0x47, + 0x00, 0x79, 0x00, 0x74, 0x5e, 0x4d, 0x00, 0x08, + 0x67, 0x64, 0x00, 0xe5, 0x65, 0x0c, 0x47, 0x79, + 0x4d, 0x4d, 0x4d, 0x64, 0x11, 0x47, 0x00, 0x79, + 0x00, 0x74, 0x5e, 0x4d, 0x00, 0x08, 0x67, 0x64, + 0x00, 0xe5, 0x65, 0x45, 0x00, 0x0e, 0x47, 0x79, + 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x07, 0x61, 0x00, + 0x68, 0x00, 0xf6, 0x65, 0x02, 0x68, 0x05, 0x48, + 0x00, 0xf6, 0x65, 0x02, 0x48, 0x0a, 0x61, 0x68, + 0x3a, 0x6d, 0x6d, 0x04, 0x68, 0x6d, 0x0a, 0x48, + 0x48, 0x3a, 0x6d, 0x6d, 0x04, 0x48, 0x6d, 0x10, + 0x61, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x06, 0x68, 0x6d, 0x73, 0x10, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x06, 0x48, 0x6d, + 0x73, 0x14, 0x76, 0x20, 0x61, 0x68, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x08, 0x68, 0x6d, 0x73, + 0x76, 0x14, 0x76, 0x20, 0x48, 0x48, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x08, 0x48, 0x6d, 0x73, + 0x76, 0x0e, 0x76, 0x20, 0x61, 0x68, 0x3a, 0x6d, + 0x6d, 0x06, 0x68, 0x6d, 0x76, 0x0e, 0x76, 0x20, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x06, 0x48, 0x6d, + 0x76, 0x05, 0x4d, 0x00, 0x08, 0x67, 0x02, 0x4d, + 0x06, 0x4d, 0x2f, 0x64, 0x04, 0x4d, 0x64, 0x08, + 0x4d, 0x2f, 0x64, 0x45, 0x06, 0x4d, 0x45, 0x64, + 0x0a, 0x4d, 0x4d, 0x2f, 0x64, 0x64, 0x08, 0x4d, + 0x4d, 0x64, 0x64, 0x06, 0x4c, 0x4c, 0x4c, 0x06, + 0x4d, 0x4d, 0x4d, 0x09, 0x4d, 0x00, 0x08, 0x67, + 0x64, 0x00, 0xe5, 0x65, 0x08, 0x4d, 0x4d, 0x4d, + 0x64, 0x0b, 0x4d, 0x00, 0x08, 0x67, 0x64, 0x00, + 0xe5, 0x65, 0x45, 0x00, 0x0a, 0x4d, 0x4d, 0x4d, + 0x45, 0x64, 0x0a, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, + 0x0a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x04, 0x6d, + 0x73, 0x05, 0x79, 0x00, 0x74, 0x5e, 0x02, 0x79, + 0x09, 0x79, 0x00, 0x74, 0x5e, 0x4d, 0x00, 0x08, + 0x67, 0x04, 0x79, 0x4d, 0x0a, 0x79, 0x2f, 0x4d, + 0x2f, 0x64, 0x06, 0x79, 0x4d, 0x64, 0x0c, 0x79, + 0x2f, 0x4d, 0x2f, 0x64, 0x45, 0x08, 0x79, 0x4d, + 0x45, 0x64, 0x06, 0x79, 0x4d, 0x4d, 0x08, 0x79, + 0x4d, 0x4d, 0x4d, 0x0d, 0x79, 0x00, 0x74, 0x5e, + 0x4d, 0x00, 0x08, 0x67, 0x64, 0x00, 0xe5, 0x65, + 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x0f, 0x79, + 0x00, 0x74, 0x5e, 0x4d, 0x00, 0x08, 0x67, 0x64, + 0x00, 0xe5, 0x65, 0x45, 0x00, 0x0c, 0x79, 0x4d, + 0x4d, 0x4d, 0x45, 0x64, 0x0a, 0x79, 0x4d, 0x4d, + 0x4d, 0x4d, 0x0d, 0x79, 0x00, 0x74, 0x5e, 0x2c, + 0x7b, 0x51, 0x00, 0x63, 0x5b, 0xa6, 0x5e, 0x08, + 0x79, 0x51, 0x51, 0x51, 0x0a, 0x79, 0x51, 0x51, + 0x51, 0x51, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, + 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x73, 0x15, 0x79, 0x00, 0x74, 0x5e, + 0x4d, 0x00, 0x08, 0x67, 0x64, 0x00, 0xe5, 0x65, + 0x45, 0x00, 0x45, 0x00, 0x45, 0x00, 0x45, 0x00, + 0x14, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x45, 0x45, + 0x45, 0x45, 0x64, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, + 0x4d, 0x64, 0x16, 0x64, 0x61, 0x74, 0x65, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x1a, 0x7a, + 0x7a, 0x7a, 0x7a, 0x20, 0x61, 0x68, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x12, 0x68, 0x6d, 0x6d, + 0x73, 0x73, 0x7a, 0x7a, 0x7a, 0x7a, 0x14, 0x7a, + 0x20, 0x61, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x08, 0x68, 0x6d, 0x73, 0x7a, 0x16, 0x74, + 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x73, 0x0e, 0x66, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x73, 0x0c, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x05, 0x31, 0x00, 0x08, 0x67, 0x05, 0x32, + 0x00, 0x08, 0x67, 0x05, 0x33, 0x00, 0x08, 0x67, + 0x05, 0x34, 0x00, 0x08, 0x67, 0x05, 0x35, 0x00, + 0x08, 0x67, 0x05, 0x36, 0x00, 0x08, 0x67, 0x05, + 0x37, 0x00, 0x08, 0x67, 0x05, 0x38, 0x00, 0x08, + 0x67, 0x05, 0x39, 0x00, 0x08, 0x67, 0x07, 0x31, + 0x00, 0x30, 0x00, 0x08, 0x67, 0x07, 0x31, 0x00, + 0x31, 0x00, 0x08, 0x67, 0x07, 0x31, 0x00, 0x32, + 0x00, 0x08, 0x67, 0x05, 0x00, 0x4e, 0x08, 0x67, + 0x05, 0x8c, 0x4e, 0x08, 0x67, 0x05, 0x09, 0x4e, + 0x08, 0x67, 0x05, 0xdb, 0x56, 0x08, 0x67, 0x05, + 0x94, 0x4e, 0x08, 0x67, 0x05, 0x6d, 0x51, 0x08, + 0x67, 0x05, 0x03, 0x4e, 0x08, 0x67, 0x05, 0x6b, + 0x51, 0x08, 0x67, 0x05, 0x5d, 0x4e, 0x08, 0x67, + 0x05, 0x41, 0x53, 0x08, 0x67, 0x07, 0x41, 0x53, + 0x00, 0x4e, 0x08, 0x67, 0x07, 0x41, 0x53, 0x8c, + 0x4e, 0x08, 0x67, 0x0c, 0x6d, 0x6f, 0x6e, 0x74, + 0x68, 0x73, 0x03, 0xe5, 0x65, 0x03, 0x00, 0x4e, + 0x03, 0x8c, 0x4e, 0x03, 0x09, 0x4e, 0x03, 0xdb, + 0x56, 0x03, 0x94, 0x4e, 0x03, 0x6d, 0x51, 0x05, + 0x68, 0x54, 0xe5, 0x65, 0x05, 0x68, 0x54, 0x00, + 0x4e, 0x05, 0x68, 0x54, 0x8c, 0x4e, 0x05, 0x68, + 0x54, 0x09, 0x4e, 0x05, 0x68, 0x54, 0xdb, 0x56, + 0x05, 0x68, 0x54, 0x94, 0x4e, 0x05, 0x68, 0x54, + 0x6d, 0x51, 0x07, 0x1f, 0x66, 0x1f, 0x67, 0xe5, + 0x65, 0x07, 0x1f, 0x66, 0x1f, 0x67, 0x00, 0x4e, + 0x07, 0x1f, 0x66, 0x1f, 0x67, 0x8c, 0x4e, 0x07, + 0x1f, 0x66, 0x1f, 0x67, 0x09, 0x4e, 0x07, 0x1f, + 0x66, 0x1f, 0x67, 0xdb, 0x56, 0x07, 0x1f, 0x66, + 0x1f, 0x67, 0x94, 0x4e, 0x07, 0x1f, 0x66, 0x1f, + 0x67, 0x6d, 0x51, 0x08, 0x64, 0x61, 0x79, 0x73, + 0x05, 0x5b, 0x4f, 0x86, 0x53, 0x08, 0x65, 0x72, + 0x61, 0x73, 0x05, 0x0a, 0x4e, 0x48, 0x53, 0x04, + 0x61, 0x6d, 0x05, 0x0b, 0x4e, 0x48, 0x53, 0x04, + 0x70, 0x6d, 0x14, 0x64, 0x61, 0x79, 0x50, 0x65, + 0x72, 0x69, 0x6f, 0x64, 0x73, 0x03, 0x63, 0x6b, + 0x03, 0x03, 0x4e, 0x03, 0x6b, 0x51, 0x03, 0x5d, + 0x4e, 0x03, 0x41, 0x53, 0x03, 0xac, 0x51, 0x03, + 0x4a, 0x81, 0x05, 0x63, 0x6b, 0x08, 0x67, 0x05, + 0xac, 0x51, 0x08, 0x67, 0x05, 0x4a, 0x81, 0x08, + 0x67, 0x07, 0x31, 0x00, 0x33, 0x00, 0x08, 0x67, + 0x07, 0x41, 0x53, 0x09, 0x4e, 0x08, 0x67, 0x08, + 0x45, 0x52, 0x41, 0x30, 0x08, 0x45, 0x52, 0x41, + 0x31, 0x06, 0x4d, 0x30, 0x31, 0x06, 0x4d, 0x30, + 0x32, 0x06, 0x4d, 0x30, 0x33, 0x06, 0x4d, 0x30, + 0x34, 0x06, 0x4d, 0x30, 0x35, 0x06, 0x4d, 0x30, + 0x36, 0x06, 0x4d, 0x30, 0x37, 0x06, 0x4d, 0x30, + 0x38, 0x06, 0x4d, 0x30, 0x39, 0x06, 0x4d, 0x31, + 0x30, 0x06, 0x4d, 0x31, 0x31, 0x06, 0x4d, 0x31, + 0x32, 0x07, 0x6c, 0x51, 0x43, 0x51, 0x4d, 0x52, + 0x05, 0x6c, 0x51, 0x43, 0x51, 0x07, 0x7f, 0x89, + 0x43, 0x51, 0x4d, 0x52, 0x05, 0x7f, 0x89, 0x43, + 0x51, 0x07, 0xf0, 0x95, 0x37, 0x00, 0x08, 0x67, + 0x07, 0xf0, 0x95, 0x03, 0x4e, 0x08, 0x67, 0x09, + 0x0c, 0x5e, 0x2f, 0x4f, 0x65, 0x67, 0x86, 0x53, + 0x07, 0x70, 0x53, 0xa6, 0x5e, 0x86, 0x53, 0x09, + 0x0a, 0x4f, 0xaf, 0x65, 0x70, 0x51, 0x86, 0x53, + 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, 0x36, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x36, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x48, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x36, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x36, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, + 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x1d, 0x57, 0x00, 0x61, 0x00, 0x64, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, + 0x52, 0x00, 0x65, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, 0x59, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x2d, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6d, 0x00, + 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x2b, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x2d, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, 0x2d, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x2a, 0x4a, 0x69, + 0x6e, 0x67, 0x6f, 0x2d, 0x6b, 0x65, 0x69, 0x75, + 0x6e, 0x20, 0x28, 0x37, 0x36, 0x37, 0x2d, 0x37, + 0x37, 0x30, 0x29, 0x1d, 0x48, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x38, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x1f, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x2d, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x1f, 0x44, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1d, 0x4a, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x4b, + 0x00, 0x61, 0x00, 0x6a, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1f, 0x53, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x20, 0x54, 0x65, 0x6e, 0x2d, 0x61, 0x6e, + 0x20, 0x28, 0x38, 0x35, 0x37, 0x2d, 0x38, 0x35, + 0x39, 0x29, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x21, 0x47, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x61, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x1f, 0x45, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, + 0x4a, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1b, + 0x4c, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, + 0x41, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x1f, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, 0x45, + 0x00, 0x69, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, + 0x73, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x69, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x27, 0x4a, 0x00, 0x69, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x29, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4c, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x61, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x25, 0x4a, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x24, 0x54, 0x65, + 0x6e, 0x2d, 0x65, 0x69, 0x20, 0x28, 0x31, 0x31, + 0x31, 0x30, 0x2d, 0x31, 0x31, 0x31, 0x33, 0x29, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x21, 0x48, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x44, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x48, 0x00, 0x65, 0x00, 0x69, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x27, 0x45, 0x00, 0x69, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1f, 0x4c, 0x01, 0x68, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x61, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x41, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x4a, 0x00, 0x69, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x59, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, + 0x00, 0x75, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x29, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, + 0x6e, 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x4d, 0x01, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x27, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x75, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x29, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, 0x29, + 0x52, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x45, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x4c, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x61, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6d, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x74, 0x00, 0x73, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x48, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, + 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x27, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x21, 0x4c, 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x21, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, + 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x27, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, + 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x72, 0x00, 0x65, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x62, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x27, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4d, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x02, 0x54, 0x02, 0x53, 0x19, + 0x27, 0x59, 0x16, 0x53, 0x20, 0x00, 0x28, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x19, 0x7d, 0x76, 0xc9, 0x96, 0x20, 0x00, 0x28, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x36, 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x19, 0x7d, 0x76, 0xe4, 0x51, 0x20, 0x00, + 0x28, 0x00, 0x36, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x19, 0x31, 0x67, 0x1f, 0x9e, 0x20, + 0x00, 0x28, 0x00, 0x36, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x19, 0x27, 0x59, 0x9d, 0x5b, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x19, 0x86, 0x5e, 0x91, + 0x4e, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x19, 0x8c, 0x54, + 0xdc, 0x94, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, 0x19, 0x75, + 0x70, 0x9f, 0x9f, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x19, + 0x7b, 0x51, 0x01, 0x80, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x19, 0x5e, 0x79, 0x9f, 0x9f, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x19, 0x29, 0x59, 0x73, 0x5e, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x1d, 0x29, 0x59, 0x73, 0x5e, 0x1f, + 0x61, 0x9d, 0x5b, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1d, + 0x29, 0x59, 0x73, 0x5e, 0xdc, 0x80, 0x9d, 0x5b, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x37, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x1d, 0x29, 0x59, 0x73, + 0x5e, 0x9d, 0x5b, 0x57, 0x5b, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x1d, 0x29, 0x59, 0x73, 0x5e, 0x5e, 0x79, + 0xa4, 0x62, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, 0x5e, + 0x79, 0xa4, 0x62, 0x6f, 0x66, 0x91, 0x4e, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x19, 0x9d, 0x5b, 0x9f, 0x9f, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x37, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x19, 0x29, 0x59, 0x94, + 0x5e, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x37, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x19, 0xf6, 0x5e, + 0x86, 0x53, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x19, 0x27, + 0x59, 0x0c, 0x54, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, 0x19, + 0x18, 0x5f, 0xc1, 0x4e, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x19, 0x29, 0x59, 0x7f, 0x95, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x19, 0x7f, 0x62, 0x8c, 0x54, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x19, 0x09, 0x56, 0x65, 0x79, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x19, 0xc1, 0x4e, 0xff, 0x5b, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x19, 0x50, 0x9f, 0x61, + 0x88, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x19, 0x29, 0x59, + 0x89, 0x5b, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, 0x19, 0x1e, + 0x8d, 0xc2, 0x89, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x19, + 0x43, 0x51, 0x86, 0x5e, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x19, 0xc1, 0x4e, 0x8c, 0x54, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x19, 0xbd, 0x5b, 0x73, 0x5e, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x19, 0x0c, 0x66, 0xf0, 0x6c, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x19, 0xf6, 0x5e, 0x9c, 0x55, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x19, 0xf6, 0x5e, 0x7f, + 0x95, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x19, 0x7f, 0x62, + 0x73, 0x5e, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, 0x19, 0x29, + 0x59, 0x86, 0x5e, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, 0x19, + 0x29, 0x59, 0x86, 0x53, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x19, 0x29, 0x59, 0xb7, 0x5f, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x19, 0x94, 0x5e, 0x8c, 0x54, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x19, 0xb7, 0x5e, 0xdd, 0x4f, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x19, 0x89, 0x5b, 0x8c, 0x54, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x19, 0x29, 0x59, 0x84, + 0x79, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x19, 0x29, 0x59, + 0xf6, 0x5e, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x29, 0x00, 0x19, 0x1e, + 0x8d, 0x43, 0x51, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, 0x19, + 0x29, 0x59, 0x43, 0x51, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x19, 0x38, 0x6c, 0xc2, 0x89, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x19, 0xbd, 0x5b, 0x8c, 0x54, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x19, 0x38, 0x6c, 0xf6, 0x5e, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x19, 0x38, 0x6c, 0x5a, 0x79, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x19, 0x63, 0x6b, 0x86, + 0x53, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x19, 0x7f, 0x95, + 0xb7, 0x5f, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1b, 0x7f, + 0x95, 0xdd, 0x4f, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1d, 0xbd, 0x5b, 0x18, 0x5f, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1d, 0x7f, + 0x95, 0x8c, 0x54, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x1d, 0xbd, 0x5b, 0xc1, 0x4e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1d, 0xbb, 0x6c, 0x89, 0x5b, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0x07, 0x4e, + 0xff, 0x5b, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x1d, 0x7f, 0x95, 0x43, 0x51, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, + 0x7f, 0x95, 0x86, 0x53, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x1d, 0x7f, 0x95, 0x45, + 0x4e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1d, 0xbd, 0x5b, 0xb7, 0x5f, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1d, 0x38, + 0x6c, 0x7f, 0x62, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x1d, 0x29, 0x59, 0x9c, 0x55, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x1d, 0xb7, 0x5e, 0x73, 0x5e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x1d, 0xbb, 0x6c, + 0x86, 0x53, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x1d, 0xf6, 0x5e, 0x45, 0x4e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, + 0x7f, 0x62, 0xdd, 0x4f, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x1d, 0x63, 0x6b, 0x86, + 0x53, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1d, 0x38, 0x6c, 0xdd, 0x4f, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0x94, + 0x5e, 0xb7, 0x5f, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x1d, 0xbd, 0x5b, 0xbb, 0x6c, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1d, 0x09, 0x56, 0xdd, 0x4f, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x1d, 0x38, 0x6c, + 0x7f, 0x95, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x1d, 0x7f, 0x62, 0xb7, 0x5f, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1d, + 0xb7, 0x5e, 0x8c, 0x54, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1d, 0x7f, 0x95, 0xbb, + 0x6c, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x1d, 0x09, 0x56, 0x7f, 0x62, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x29, + 0x59, 0xc1, 0x4e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x1d, 0x29, 0x59, 0x38, 0x6c, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x1d, 0x38, 0x6c, 0x45, 0x4e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x43, 0x51, + 0x38, 0x6c, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x1d, 0xdd, 0x4f, 0x89, 0x5b, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, + 0x29, 0x59, 0xbb, 0x6c, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x1d, 0x27, 0x59, 0xbb, + 0x6c, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1d, 0x29, 0x59, 0x7f, 0x62, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1d, 0x7f, + 0x95, 0x7f, 0x62, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x1d, 0xdd, 0x4f, 0xf6, 0x5e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1d, 0x38, 0x6c, 0xbb, 0x6c, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x1d, 0xb7, 0x5e, + 0xbb, 0x6c, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1d, 0x29, 0x59, 0x7b, 0x51, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1d, + 0x45, 0x4e, 0x89, 0x5b, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1d, 0xc1, 0x4e, 0x73, + 0x5e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1d, 0x45, 0x4e, 0xff, 0x5b, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1d, 0xdd, + 0x4f, 0x43, 0x51, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1d, 0x73, 0x5e, 0xbb, 0x6c, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x1d, 0x38, 0x6c, 0x86, 0x53, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, 0x94, 0x5e, + 0xdd, 0x4f, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x1d, 0x7f, 0x95, 0xbd, 0x5b, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1d, + 0x38, 0x6c, 0x07, 0x4e, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x1d, 0xc1, 0x4e, 0x89, + 0x5b, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x1d, 0x09, 0x56, 0x94, 0x5e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, 0x7f, + 0x62, 0x89, 0x5b, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x1d, 0x89, 0x5b, 0x43, 0x51, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x1d, 0xbb, 0x6c, 0x7f, 0x62, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, 0x7b, 0x51, + 0x8c, 0x54, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x1d, 0xff, 0x5b, 0x38, 0x6c, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, + 0x43, 0x51, 0x86, 0x53, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x1d, 0x87, 0x65, 0xbb, + 0x6c, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x1d, 0xfa, 0x5e, 0x45, 0x4e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1d, 0x63, + 0x6b, 0xbb, 0x6c, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1d, 0xfa, 0x5e, 0xc1, 0x4e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1d, 0x43, 0x51, 0x45, 0x4e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x1d, 0xfa, 0x5e, + 0x38, 0x6c, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x1d, 0x7f, 0x62, 0x43, 0x51, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, + 0xfa, 0x5e, 0x86, 0x53, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x1d, 0xfa, 0x5e, 0xdd, + 0x4f, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x1d, 0x7f, 0x62, 0x45, 0x4e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1d, 0x1e, + 0x8d, 0x94, 0x5e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1d, 0x43, 0x51, 0xc1, 0x4e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x1d, 0x09, 0x56, 0x84, 0x79, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, 0x89, 0x5b, + 0x1e, 0x8d, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x1d, 0xbd, 0x5b, 0x9c, 0x55, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1d, + 0x1e, 0x8d, 0x38, 0x6c, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x1d, 0x29, 0x59, 0x8f, + 0x79, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1d, 0x87, 0x65, 0x86, 0x53, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1d, 0x09, + 0x56, 0x6f, 0x79, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x1d, 0x86, 0x53, 0xc1, 0x4e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x1d, 0xf6, 0x5e, 0x94, 0x5e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x1d, 0xc1, 0x4e, + 0xbb, 0x6c, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x1d, 0xbd, 0x5b, 0x43, 0x51, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, + 0x9d, 0x5b, 0xbb, 0x6c, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x1d, 0xfa, 0x5e, 0x7f, + 0x95, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x1d, 0xb7, 0x5e, 0x43, 0x51, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, 0x63, + 0x6b, 0x09, 0x56, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1d, 0x63, 0x6b, 0x43, 0x51, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x1d, 0x87, 0x65, 0x94, 0x5e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, 0x18, 0x5f, + 0x7f, 0x95, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1d, 0x87, 0x65, 0x38, 0x6c, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1d, + 0xfa, 0x5e, 0xbb, 0x6c, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x1d, 0x18, 0x5f, 0x89, + 0x5b, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x1d, 0x63, 0x6b, 0x94, 0x5e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x33, 0x00, 0x29, 0x00, 0x1d, 0x38, + 0x6c, 0xc1, 0x4e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1d, 0x63, 0x6b, 0x89, 0x5b, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x1d, 0x72, 0x5e, 0x43, 0x51, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x1d, 0x09, 0x56, + 0x43, 0x51, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x1d, 0xb7, 0x5f, 0xbb, 0x6c, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, + 0xf6, 0x5e, 0x86, 0x5e, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1d, 0x94, 0x5e, 0x7f, + 0x95, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x1d, 0x63, 0x6b, 0x8c, 0x54, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, 0x87, + 0x65, 0xdd, 0x4f, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1d, 0x43, 0x51, 0x94, 0x5e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1d, 0x43, 0x51, 0xa8, 0x4e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0x63, 0x6b, + 0x2d, 0x4e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x1d, 0x09, 0x56, 0x86, 0x53, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1d, + 0x43, 0x51, 0xb7, 0x5f, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1d, 0x43, 0x51, 0x18, + 0x5f, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1d, 0xfa, 0x5e, 0x66, 0x6b, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1d, 0xf6, + 0x5e, 0x43, 0x51, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x1d, 0x74, 0x51, 0xfd, 0x56, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x1d, 0x63, 0x6b, 0x73, 0x5e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x1d, 0xfa, 0x5e, + 0xb7, 0x5f, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x1d, 0x87, 0x65, 0x2d, 0x4e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1d, + 0x29, 0x59, 0x88, 0x63, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x1d, 0xb7, 0x5e, 0x86, + 0x53, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1d, 0x18, 0x5f, 0x8c, 0x54, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0x43, + 0x51, 0x2d, 0x4e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x1d, 0xf3, 0x81, 0xb7, 0x5f, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x1d, 0x09, 0x56, 0x86, 0x5e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x1d, 0xb7, 0x5e, + 0x94, 0x5e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x1d, 0x0e, 0x66, 0xb7, 0x5f, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, + 0x94, 0x5e, 0x38, 0x6c, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x1d, 0x63, 0x6b, 0x7f, + 0x95, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x1d, 0x38, 0x6c, 0xab, 0x4e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, 0x09, + 0x56, 0x09, 0x54, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1d, 0x87, 0x65, 0x89, 0x5b, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x1d, 0x9d, 0x5b, 0xb7, 0x5f, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x1d, 0xab, 0x4e, + 0xb7, 0x5f, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x1d, 0xb7, 0x5e, 0x63, 0x6b, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, + 0x7f, 0x95, 0x84, 0x79, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x1d, 0xbd, 0x5b, 0x63, + 0x6b, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x1d, 0x87, 0x65, 0x63, 0x6b, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, 0x94, + 0x5e, 0xc1, 0x4e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1d, 0x87, 0x65, 0x0e, 0x66, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x1d, 0x7f, 0x95, 0xab, 0x4e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x1d, 0xf6, 0x5e, + 0xb7, 0x5f, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x1d, 0x0e, 0x66, 0x94, 0x5e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, + 0x87, 0x65, 0x9f, 0x9f, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1d, 0x38, 0x6c, 0x63, + 0x6b, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1d, 0x27, 0x59, 0x38, 0x6c, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0xab, + 0x4e, 0x84, 0x79, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x1d, 0x29, 0x59, 0x87, 0x65, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x1d, 0x18, 0x5f, 0xbb, 0x6c, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x38, 0x6c, + 0x84, 0x79, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x1d, 0x43, 0x51, 0x9f, 0x9f, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x1d, + 0x29, 0x59, 0x63, 0x6b, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x1d, 0x87, 0x65, 0x84, + 0x79, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x1d, 0x86, 0x5e, 0x7f, 0x95, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1d, 0x43, + 0x51, 0x8c, 0x54, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1d, 0xbd, 0x5b, 0x38, 0x6c, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1d, 0x63, 0x6b, 0xdd, 0x4f, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x86, 0x5e, + 0x89, 0x5b, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x1d, 0x7f, 0x62, 0x94, 0x5e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1d, + 0x0e, 0x66, 0x86, 0x53, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x1d, 0x07, 0x4e, 0xbb, + 0x6c, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1d, 0xbd, 0x5b, 0x87, 0x65, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x1d, 0xf6, + 0x5e, 0x9d, 0x5b, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1d, 0x29, 0x59, 0x8c, 0x54, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1d, 0x1e, 0x8d, 0xab, 0x4e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x43, 0x51, + 0x84, 0x79, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1d, 0x9d, 0x5b, 0x38, 0x6c, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, + 0x63, 0x6b, 0xb7, 0x5f, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x1d, 0xab, 0x4e, 0xdd, + 0x4f, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x1d, 0x43, 0x51, 0x87, 0x65, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, 0xbd, + 0x5b, 0xdd, 0x4f, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1d, 0xf6, 0x5e, 0xab, 0x4e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x1d, 0xbd, 0x5b, 0xf6, 0x5e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, 0x9d, 0x5b, + 0x86, 0x53, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1d, 0x0e, 0x66, 0x8c, 0x54, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1d, + 0x89, 0x5b, 0x38, 0x6c, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1d, 0x29, 0x59, 0x0e, + 0x66, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x1d, 0xbd, 0x5b, 0x3f, 0x65, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, 0xab, + 0x4e, 0x8c, 0x54, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1d, 0x87, 0x65, 0x16, 0x53, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x1d, 0x87, 0x65, 0x3f, 0x65, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x1d, 0x29, 0x59, + 0xdd, 0x4f, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1d, 0x18, 0x5f, 0x16, 0x53, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, + 0x09, 0x56, 0x38, 0x6c, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1d, 0x89, 0x5b, 0x3f, + 0x65, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x1d, 0x07, 0x4e, 0xf6, 0x5e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, 0x87, + 0x65, 0x45, 0x4e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1d, 0x43, 0x51, 0xbb, 0x6c, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x1d, 0x86, 0x5e, 0x94, 0x5e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x05, 0x0e, 0x66, + 0xbb, 0x6c, 0x05, 0x27, 0x59, 0x63, 0x6b, 0x05, + 0x2d, 0x66, 0x8c, 0x54, 0x05, 0x73, 0x5e, 0x10, + 0x62, 0x07, 0xe2, 0x6c, 0xaf, 0x65, 0x86, 0x53, + 0x07, 0x11, 0x6c, 0xfd, 0x56, 0x4d, 0x52, 0x05, + 0x11, 0x6c, 0xfd, 0x56, 0x12, 0x63, 0x61, 0x6c, + 0x65, 0x6e, 0x64, 0x61, 0x72, 0x73, 0x08, 0x64, + 0x61, 0x74, 0x65, 0x08, 0x6c, 0x61, 0x74, 0x6e, + 0x04, 0x6e, 0x75, 0x10, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, + 0x74, 0x65, 0x72, 0x6e, 0x26, 0x7b, 0x6d, 0x69, + 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0x1e, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, + 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, + 0x0e, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, + 0x24, 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x79, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0x3a, 0x7b, 0x6d, 0x69, 0x6e, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, + 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x79, 0x2a, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0x7b, 0x70, 0x65, 0x72, 0x63, + 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, + 0x40, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0x7b, 0x70, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, + 0x7d, 0x0e, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, + 0x74, 0x10, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, + 0x6e, 0x73, 0x02, 0x2e, 0x02, 0x2c, 0x0a, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x06, 0x4e, 0x61, 0x4e, + 0x06, 0x6e, 0x61, 0x6e, 0x02, 0x2b, 0x10, 0x70, + 0x6c, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, + 0x2d, 0x12, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, + 0x69, 0x67, 0x6e, 0x02, 0x25, 0x16, 0x70, 0x65, + 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, + 0x6e, 0x03, 0x1e, 0x22, 0x10, 0x69, 0x6e, 0x66, + 0x69, 0x6e, 0x69, 0x74, 0x79, 0x0e, 0x68, 0x61, + 0x6e, 0x69, 0x64, 0x65, 0x63, 0x0e, 0x73, 0x79, + 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x06, 0x41, 0x55, + 0x24, 0x06, 0x41, 0x55, 0x44, 0x04, 0x52, 0x24, + 0x06, 0x42, 0x52, 0x4c, 0x06, 0x43, 0x41, 0x24, + 0x06, 0x43, 0x41, 0x44, 0x03, 0xe5, 0xff, 0x06, + 0x43, 0x4e, 0x59, 0x03, 0xac, 0x20, 0x06, 0x45, + 0x55, 0x52, 0x02, 0xa3, 0x06, 0x47, 0x42, 0x50, + 0x06, 0x48, 0x4b, 0x24, 0x06, 0x48, 0x4b, 0x44, + 0x06, 0x49, 0x4c, 0x53, 0x06, 0x49, 0x4c, 0x52, + 0x03, 0xaa, 0x20, 0x03, 0xb9, 0x20, 0x06, 0x49, + 0x4e, 0x52, 0x06, 0x4a, 0x50, 0xa5, 0x06, 0x4a, + 0x50, 0x59, 0x03, 0xe6, 0xff, 0x06, 0x4b, 0x52, + 0x57, 0x06, 0x4d, 0x58, 0x24, 0x06, 0x4d, 0x58, + 0x4e, 0x06, 0x4e, 0x5a, 0x24, 0x06, 0x4e, 0x5a, + 0x44, 0x06, 0x4e, 0x54, 0x24, 0x06, 0x54, 0x57, + 0x44, 0x06, 0x55, 0x53, 0x24, 0x06, 0x55, 0x53, + 0x44, 0x03, 0xab, 0x20, 0x06, 0x56, 0x4e, 0x44, + 0x08, 0x46, 0x43, 0x46, 0x41, 0x06, 0x58, 0x41, + 0x46, 0x06, 0x45, 0x43, 0x24, 0x06, 0x58, 0x43, + 0x44, 0x06, 0x43, 0x46, 0x41, 0x06, 0x58, 0x4f, + 0x46, 0x08, 0x43, 0x46, 0x50, 0x46, 0x06, 0x58, + 0x50, 0x46, 0x14, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x63, 0x69, 0x65, 0x73, 0x52, 0x6e, 0x6f, + 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2f, + 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, + 0x61, 0x74, 0x61, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, + 0x70, 0x2f, 0x7a, 0x68, 0x2e, 0x6a, 0x73, 0x0d, + 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, + 0x27, 0x00, 0xa1, 0x01, 0xf6, 0x6a, 0x01, 0xa0, + 0x01, 0x00, 0x00, 0x00, 0x39, 0xd0, 0x00, 0x00, + 0x00, 0x43, 0xd1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd2, 0x00, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd4, 0x00, 0x00, 0x00, 0x04, + 0xd5, 0x00, 0x00, 0x00, 0x04, 0xd6, 0x00, 0x00, + 0x00, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x04, 0xd8, + 0x00, 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, 0x00, + 0x04, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdb, 0x00, + 0x00, 0x00, 0x04, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0xdd, 0x00, 0x00, 0x00, 0x04, 0xde, 0x00, 0x00, + 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, 0x04, 0xe0, + 0x00, 0x00, 0x00, 0x04, 0xe1, 0x00, 0x00, 0x00, + 0x04, 0xe2, 0x00, 0x00, 0x00, 0x26, 0x0f, 0x00, + 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x0a, 0x4d, 0xe4, + 0x00, 0x00, 0x00, 0x0a, 0x4d, 0xe5, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, + 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x04, 0xe6, + 0x00, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x00, + 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0xec, 0x00, 0x00, 0x00, 0x04, 0xed, 0x00, + 0x00, 0x00, 0x4d, 0xee, 0x00, 0x00, 0x00, 0x04, + 0xef, 0x00, 0x00, 0x00, 0x4d, 0xf0, 0x00, 0x00, + 0x00, 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, 0xf2, + 0x00, 0x00, 0x00, 0x04, 0xf3, 0x00, 0x00, 0x00, + 0x4d, 0xf4, 0x00, 0x00, 0x00, 0x04, 0xf5, 0x00, + 0x00, 0x00, 0x4d, 0xf6, 0x00, 0x00, 0x00, 0x04, + 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xf8, 0x00, 0x00, + 0x00, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0xfa, + 0x00, 0x00, 0x00, 0x04, 0xfb, 0x00, 0x00, 0x00, + 0x4d, 0xfc, 0x00, 0x00, 0x00, 0x04, 0xfd, 0x00, + 0x00, 0x00, 0x4d, 0xfe, 0x00, 0x00, 0x00, 0x04, + 0xff, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x01, 0x00, + 0x00, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0x02, + 0x01, 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, 0x00, + 0x4d, 0x04, 0x01, 0x00, 0x00, 0x04, 0x05, 0x01, + 0x00, 0x00, 0x4d, 0x06, 0x01, 0x00, 0x00, 0x04, + 0x07, 0x01, 0x00, 0x00, 0x4d, 0x08, 0x01, 0x00, + 0x00, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0x0a, + 0x01, 0x00, 0x00, 0x04, 0x0b, 0x01, 0x00, 0x00, + 0x4d, 0x0c, 0x01, 0x00, 0x00, 0x04, 0x0d, 0x01, + 0x00, 0x00, 0x4d, 0x0e, 0x01, 0x00, 0x00, 0x04, + 0x0f, 0x01, 0x00, 0x00, 0x4d, 0x10, 0x01, 0x00, + 0x00, 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, 0x12, + 0x01, 0x00, 0x00, 0x04, 0x13, 0x01, 0x00, 0x00, + 0x4d, 0x14, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x4d, 0x16, 0x01, 0x00, 0x00, 0x04, + 0x17, 0x01, 0x00, 0x00, 0x4d, 0x18, 0x01, 0x00, + 0x00, 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, 0x1a, + 0x01, 0x00, 0x00, 0x04, 0x1b, 0x01, 0x00, 0x00, + 0x4d, 0x1c, 0x01, 0x00, 0x00, 0x04, 0x1d, 0x01, + 0x00, 0x00, 0x4d, 0x1e, 0x01, 0x00, 0x00, 0x04, + 0x1f, 0x01, 0x00, 0x00, 0x4d, 0x20, 0x01, 0x00, + 0x00, 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, 0x22, + 0x01, 0x00, 0x00, 0x04, 0x1f, 0x01, 0x00, 0x00, + 0x4d, 0x23, 0x01, 0x00, 0x00, 0x04, 0x24, 0x01, + 0x00, 0x00, 0x4d, 0x25, 0x01, 0x00, 0x00, 0x04, + 0x26, 0x01, 0x00, 0x00, 0x4d, 0x27, 0x01, 0x00, + 0x00, 0x04, 0x28, 0x01, 0x00, 0x00, 0x4d, 0x29, + 0x01, 0x00, 0x00, 0x04, 0x2a, 0x01, 0x00, 0x00, + 0x4d, 0x2b, 0x01, 0x00, 0x00, 0x04, 0x2c, 0x01, + 0x00, 0x00, 0x4d, 0x2d, 0x01, 0x00, 0x00, 0x04, + 0x28, 0x01, 0x00, 0x00, 0x4d, 0x2e, 0x01, 0x00, + 0x00, 0x04, 0x28, 0x01, 0x00, 0x00, 0x4d, 0x2f, + 0x01, 0x00, 0x00, 0x04, 0x30, 0x01, 0x00, 0x00, + 0x4d, 0x31, 0x01, 0x00, 0x00, 0x04, 0x32, 0x01, + 0x00, 0x00, 0x4d, 0x33, 0x01, 0x00, 0x00, 0x04, + 0x28, 0x01, 0x00, 0x00, 0x4d, 0x34, 0x01, 0x00, + 0x00, 0x04, 0x35, 0x01, 0x00, 0x00, 0x4d, 0x36, + 0x01, 0x00, 0x00, 0x04, 0x35, 0x01, 0x00, 0x00, + 0x4d, 0x37, 0x01, 0x00, 0x00, 0x4d, 0x38, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x39, 0x01, 0x00, 0x00, + 0x4d, 0x3a, 0x01, 0x00, 0x00, 0x04, 0x30, 0x01, + 0x00, 0x00, 0x4d, 0x3b, 0x01, 0x00, 0x00, 0x04, + 0x30, 0x01, 0x00, 0x00, 0x4d, 0x31, 0x01, 0x00, + 0x00, 0x04, 0x2a, 0x01, 0x00, 0x00, 0x4d, 0x2b, + 0x01, 0x00, 0x00, 0x4d, 0x3c, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x3d, 0x01, 0x00, 0x00, 0x4d, 0x3e, + 0x01, 0x00, 0x00, 0x04, 0x3f, 0x01, 0x00, 0x00, + 0x4d, 0x40, 0x01, 0x00, 0x00, 0x04, 0x09, 0x01, + 0x00, 0x00, 0x4d, 0x0a, 0x01, 0x00, 0x00, 0x04, + 0x05, 0x01, 0x00, 0x00, 0x4d, 0x06, 0x01, 0x00, + 0x00, 0x4d, 0x41, 0x01, 0x00, 0x00, 0x4d, 0x42, + 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x0b, 0xbe, 0x00, + 0xbe, 0x01, 0xbe, 0x02, 0xbe, 0x03, 0xbe, 0x04, + 0xbe, 0x05, 0xbe, 0x06, 0xbe, 0x07, 0xbe, 0x08, + 0xbe, 0x09, 0xbe, 0x0a, 0xbe, 0x0b, 0x26, 0x0c, + 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, 0x44, + 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, + 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x5c, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x72, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, + 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, + 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, + 0x80, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0x43, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x5c, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x75, 0x01, 0x00, 0x00, 0x4d, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x4d, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, + 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x0c, 0xbe, 0x0d, 0xbe, 0x0e, 0xbe, + 0x0f, 0xbe, 0x10, 0xbe, 0x11, 0xbe, 0x12, 0xbe, + 0x13, 0xbe, 0x14, 0xbe, 0x15, 0xbe, 0x16, 0xbe, + 0x17, 0xbe, 0x18, 0x26, 0x0d, 0x00, 0x4d, 0x43, + 0x01, 0x00, 0x00, 0x04, 0x44, 0x01, 0x00, 0x00, + 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x84, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x85, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x5c, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0x43, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x86, + 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, + 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, + 0xd7, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x43, 0x01, + 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x43, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, + 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x19, 0xbe, 0x1a, 0xbe, 0x1b, 0xbe, 0x1c, 0xbe, + 0x1d, 0xbe, 0x1e, 0xbe, 0x1f, 0xbe, 0x20, 0xbe, + 0x21, 0xbe, 0x22, 0xbe, 0x23, 0xbe, 0x24, 0xbe, + 0x25, 0x26, 0x0d, 0x00, 0x4d, 0x43, 0x01, 0x00, + 0x00, 0x04, 0x44, 0x01, 0x00, 0x00, 0x04, 0x45, + 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x85, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x43, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x43, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x74, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, + 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x26, 0xbe, 0x27, + 0xbe, 0x28, 0xbe, 0x29, 0xbe, 0x2a, 0xbe, 0x2b, + 0xbe, 0x2c, 0xbe, 0x2d, 0xbe, 0x2e, 0xbe, 0x2f, + 0xbe, 0x30, 0xbe, 0x31, 0xbe, 0x32, 0x26, 0x0d, + 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, 0x44, + 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, + 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x43, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x72, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x86, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x43, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x86, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x75, 0x01, 0x00, 0x00, 0x4d, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, + 0x01, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x33, 0xbe, 0x34, 0xbe, 0x35, + 0xbe, 0x36, 0xbe, 0x37, 0xbe, 0x38, 0xbe, 0x39, + 0xbe, 0x3a, 0xbe, 0x3b, 0xbe, 0x3c, 0xbe, 0x3d, + 0xbe, 0x3e, 0x26, 0x0c, 0x00, 0x4d, 0x43, 0x01, + 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, + 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, + 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, + 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, + 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, + 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, + 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, + 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, + 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, + 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, + 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, + 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x43, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x43, 0x01, 0x00, + 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, + 0x04, 0x87, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x4d, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x4d, + 0x79, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x3f, 0xbe, 0x40, 0xbe, + 0x41, 0xbe, 0x42, 0xbe, 0x43, 0xbe, 0x44, 0xbe, + 0x45, 0xbe, 0x46, 0xbe, 0x47, 0xbe, 0x48, 0xbe, + 0x49, 0xbe, 0x4a, 0x26, 0x0c, 0x00, 0x4d, 0x43, + 0x01, 0x00, 0x00, 0x04, 0x44, 0x01, 0x00, 0x00, + 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x43, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, + 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, + 0x97, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, + 0x43, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, + 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, + 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, + 0x26, 0x04, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, + 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, + 0x97, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x75, 0x01, 0x00, 0x00, 0x4d, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, + 0x01, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x4b, 0xbe, 0x4c, 0xbe, 0x4d, + 0xbe, 0x4e, 0xbe, 0x4f, 0xbe, 0x50, 0xbe, 0x51, + 0xbe, 0x52, 0xbe, 0x53, 0xbe, 0x54, 0xbe, 0x55, + 0xbe, 0x56, 0xbe, 0x57, 0xbe, 0x58, 0x26, 0x0e, + 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, 0x44, + 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, + 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, + 0x98, 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, + 0x00, 0x00, 0x26, 0x0e, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x43, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x9a, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x43, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x74, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, + 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x59, 0xbe, 0x5a, + 0xbe, 0x5b, 0xbe, 0x5c, 0xbe, 0x5d, 0xbe, 0x5e, + 0xbe, 0x5f, 0xbe, 0x60, 0xbe, 0x61, 0xbe, 0x62, + 0xbe, 0x63, 0xbe, 0x64, 0x26, 0x0c, 0x00, 0x4d, + 0x43, 0x01, 0x00, 0x00, 0x04, 0x44, 0x01, 0x00, + 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, 0x46, + 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x5c, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, 0x9b, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, + 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x65, + 0xbe, 0x66, 0xbe, 0x67, 0xbe, 0x68, 0xbe, 0x69, + 0xbe, 0x6a, 0xbe, 0x6b, 0xbe, 0x6c, 0xbe, 0x6d, + 0xbe, 0x6e, 0xbe, 0x6f, 0xbe, 0x70, 0x26, 0x0c, + 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, 0x44, + 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, + 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x5c, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x72, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x9c, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, + 0x04, 0x9c, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x9c, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, + 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x71, 0xbe, 0x72, 0xbe, 0x73, 0xbe, 0x74, + 0xbe, 0x75, 0xbe, 0x76, 0xbe, 0x77, 0xbe, 0x78, + 0xbe, 0x79, 0xbe, 0x7a, 0xbe, 0x7b, 0xbe, 0x7c, + 0x26, 0x0c, 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, + 0x04, 0x44, 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, + 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x43, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x72, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x9c, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x43, 0x01, + 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x9c, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x75, 0x01, 0x00, 0x00, 0x4d, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, + 0x01, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x7d, 0xbe, 0x7e, 0xbe, 0x7f, + 0xbe, 0x80, 0xbe, 0x81, 0xbe, 0x82, 0xbe, 0x83, + 0xbe, 0x84, 0xbe, 0x85, 0xbe, 0x86, 0xbe, 0x87, + 0xbe, 0x88, 0x26, 0x0c, 0x00, 0x4d, 0x43, 0x01, + 0x00, 0x00, 0x04, 0x44, 0x01, 0x00, 0x00, 0x04, + 0x45, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x43, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, + 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, + 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, + 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, + 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, + 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, + 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, + 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, + 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, + 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, + 0xad, 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, + 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, + 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, + 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, + 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, 0x00, 0x04, + 0xb5, 0x01, 0x00, 0x00, 0x04, 0xb6, 0x01, 0x00, + 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, + 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, + 0x04, 0xba, 0x01, 0x00, 0x00, 0x04, 0xbb, 0x01, + 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, 0x26, + 0x20, 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, 0x4d, + 0x20, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x01, 0x00, + 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0xbf, + 0x01, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, + 0x04, 0xc0, 0x01, 0x00, 0x00, 0x4d, 0x23, 0x00, + 0x00, 0x80, 0x04, 0xc1, 0x01, 0x00, 0x00, 0x4d, + 0x24, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x01, 0x00, + 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0xc3, + 0x01, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, + 0x04, 0xc4, 0x01, 0x00, 0x00, 0x4d, 0x27, 0x00, + 0x00, 0x80, 0x04, 0xc5, 0x01, 0x00, 0x00, 0x4d, + 0x28, 0x00, 0x00, 0x80, 0x04, 0xc6, 0x01, 0x00, + 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0xc7, + 0x01, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, + 0x04, 0xc8, 0x01, 0x00, 0x00, 0x4d, 0x2b, 0x00, + 0x00, 0x80, 0x04, 0xc9, 0x01, 0x00, 0x00, 0x4d, + 0x2c, 0x00, 0x00, 0x80, 0x04, 0xca, 0x01, 0x00, + 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0xcb, + 0x01, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, + 0x04, 0xcc, 0x01, 0x00, 0x00, 0x4d, 0x2f, 0x00, + 0x00, 0x80, 0x04, 0xcd, 0x01, 0x00, 0x00, 0x4d, + 0x30, 0x00, 0x00, 0x80, 0x04, 0xce, 0x01, 0x00, + 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0xcf, + 0x01, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, + 0x04, 0xd0, 0x01, 0x00, 0x00, 0x4d, 0x33, 0x00, + 0x00, 0x80, 0x04, 0xd1, 0x01, 0x00, 0x00, 0x4d, + 0x34, 0x00, 0x00, 0x80, 0x04, 0xd2, 0x01, 0x00, + 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0xd3, + 0x01, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, + 0x04, 0xd4, 0x01, 0x00, 0x00, 0x4d, 0x37, 0x00, + 0x00, 0x80, 0x04, 0xd5, 0x01, 0x00, 0x00, 0x4d, + 0x38, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x01, 0x00, + 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0xd7, + 0x01, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, + 0x04, 0xd8, 0x01, 0x00, 0x00, 0x4d, 0x3b, 0x00, + 0x00, 0x80, 0x04, 0xd9, 0x01, 0x00, 0x00, 0x4d, + 0x3c, 0x00, 0x00, 0x80, 0x04, 0xda, 0x01, 0x00, + 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0xdb, + 0x01, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, + 0x04, 0xdc, 0x01, 0x00, 0x00, 0x4d, 0x3f, 0x00, + 0x00, 0x80, 0x04, 0xdd, 0x01, 0x00, 0x00, 0x4d, + 0x40, 0x00, 0x00, 0x80, 0x04, 0xde, 0x01, 0x00, + 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0xdf, + 0x01, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, + 0x04, 0xe0, 0x01, 0x00, 0x00, 0x4d, 0x43, 0x00, + 0x00, 0x80, 0x04, 0xe1, 0x01, 0x00, 0x00, 0x4d, + 0x44, 0x00, 0x00, 0x80, 0x04, 0xe2, 0x01, 0x00, + 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0xe3, + 0x01, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, + 0x04, 0xe4, 0x01, 0x00, 0x00, 0x4d, 0x47, 0x00, + 0x00, 0x80, 0x04, 0xe5, 0x01, 0x00, 0x00, 0x4d, + 0x48, 0x00, 0x00, 0x80, 0x04, 0xe6, 0x01, 0x00, + 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0xe7, + 0x01, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, + 0x04, 0xe8, 0x01, 0x00, 0x00, 0x4d, 0x4b, 0x00, + 0x00, 0x80, 0x04, 0xe9, 0x01, 0x00, 0x00, 0x4d, + 0x4c, 0x00, 0x00, 0x80, 0x04, 0xea, 0x01, 0x00, + 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0xeb, + 0x01, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, + 0x04, 0xec, 0x01, 0x00, 0x00, 0x4d, 0x4f, 0x00, + 0x00, 0x80, 0x04, 0xed, 0x01, 0x00, 0x00, 0x4d, + 0x50, 0x00, 0x00, 0x80, 0x04, 0xee, 0x01, 0x00, + 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0xef, + 0x01, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, + 0x04, 0xf0, 0x01, 0x00, 0x00, 0x4d, 0x53, 0x00, + 0x00, 0x80, 0x04, 0xf1, 0x01, 0x00, 0x00, 0x4d, + 0x54, 0x00, 0x00, 0x80, 0x04, 0xf2, 0x01, 0x00, + 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0xf3, + 0x01, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, + 0x04, 0xf4, 0x01, 0x00, 0x00, 0x4d, 0x57, 0x00, + 0x00, 0x80, 0x04, 0xf5, 0x01, 0x00, 0x00, 0x4d, + 0x58, 0x00, 0x00, 0x80, 0x04, 0xf6, 0x01, 0x00, + 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0xf7, + 0x01, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, + 0x04, 0xf8, 0x01, 0x00, 0x00, 0x4d, 0x5b, 0x00, + 0x00, 0x80, 0x04, 0xf9, 0x01, 0x00, 0x00, 0x4d, + 0x5c, 0x00, 0x00, 0x80, 0x04, 0xfa, 0x01, 0x00, + 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0xfb, + 0x01, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, + 0x04, 0xfc, 0x01, 0x00, 0x00, 0x4d, 0x5f, 0x00, + 0x00, 0x80, 0x04, 0xfd, 0x01, 0x00, 0x00, 0x4d, + 0x60, 0x00, 0x00, 0x80, 0x04, 0xfe, 0x01, 0x00, + 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0xff, + 0x01, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, + 0x04, 0x00, 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, + 0x00, 0x80, 0x04, 0x01, 0x02, 0x00, 0x00, 0x4d, + 0x64, 0x00, 0x00, 0x80, 0x04, 0x02, 0x02, 0x00, + 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x03, + 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, + 0x04, 0x04, 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, + 0x00, 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, 0x4d, + 0x68, 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, 0x00, + 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x07, + 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, + 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, + 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, + 0x6c, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, + 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x0b, + 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, + 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, + 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, + 0x70, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, + 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x0f, + 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, + 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, + 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, + 0x74, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, + 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x13, + 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, + 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, + 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, + 0x78, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, + 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x17, + 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, + 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, + 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, + 0x7c, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, + 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x1b, + 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, + 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, + 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, + 0x80, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, + 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x1f, + 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, + 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, + 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, + 0x84, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, + 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x23, + 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, + 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, + 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, + 0x88, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, + 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x27, + 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, + 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, + 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, + 0x8c, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, + 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x2b, + 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, + 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, + 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, + 0x90, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, + 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x2f, + 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, + 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, + 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, + 0x94, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, + 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x33, + 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, + 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, + 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, + 0x98, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, + 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x37, + 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, + 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, + 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, + 0x9c, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, + 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x3b, + 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, + 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, + 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, + 0xa0, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, + 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x3f, + 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, + 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, + 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, + 0xa4, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, + 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x43, + 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, + 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, + 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, + 0xa8, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, + 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x47, + 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, + 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, + 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, + 0xac, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, + 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0x4b, + 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, + 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, + 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, + 0xb0, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, + 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0x4f, + 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, + 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, + 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, + 0xb4, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, + 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0x53, + 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, + 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, + 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, + 0xb8, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, + 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0x57, + 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, + 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, + 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, + 0xbc, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, + 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0x5b, + 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, + 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, + 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, + 0xc0, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, + 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0x5f, + 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, + 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, + 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, + 0xc4, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, + 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0x63, + 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, + 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, + 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, + 0xc8, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, + 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0x67, + 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, + 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, + 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, + 0xcc, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, + 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0x6b, + 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, + 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, + 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, + 0xd0, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, + 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0x6f, + 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, + 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, + 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, + 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0x73, + 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, + 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, + 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0x77, + 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, + 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0x7b, + 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, + 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0x7f, + 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, + 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, + 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, + 0xe4, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, + 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0x83, + 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, + 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x80, 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, + 0xe8, 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, + 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0x86, + 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, + 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x80, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x02, 0x00, 0x00, 0x04, 0x88, 0x02, 0x00, + 0x00, 0x04, 0x89, 0x02, 0x00, 0x00, 0x04, 0x8a, + 0x02, 0x00, 0x00, 0x04, 0x8b, 0x02, 0x00, 0x00, + 0x04, 0x8c, 0x02, 0x00, 0x00, 0x04, 0x8d, 0x02, + 0x00, 0x00, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x04, + 0x8f, 0x02, 0x00, 0x00, 0x04, 0x90, 0x02, 0x00, + 0x00, 0x04, 0x91, 0x02, 0x00, 0x00, 0x04, 0x92, + 0x02, 0x00, 0x00, 0x04, 0x93, 0x02, 0x00, 0x00, + 0x04, 0x94, 0x02, 0x00, 0x00, 0x04, 0x95, 0x02, + 0x00, 0x00, 0x04, 0x96, 0x02, 0x00, 0x00, 0x04, + 0x97, 0x02, 0x00, 0x00, 0x04, 0x98, 0x02, 0x00, + 0x00, 0x04, 0x99, 0x02, 0x00, 0x00, 0x04, 0x9a, + 0x02, 0x00, 0x00, 0x04, 0x9b, 0x02, 0x00, 0x00, + 0x04, 0x9c, 0x02, 0x00, 0x00, 0x04, 0x9d, 0x02, + 0x00, 0x00, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x04, + 0x9f, 0x02, 0x00, 0x00, 0x04, 0xa0, 0x02, 0x00, + 0x00, 0x04, 0xa1, 0x02, 0x00, 0x00, 0x04, 0xa2, + 0x02, 0x00, 0x00, 0x04, 0xa3, 0x02, 0x00, 0x00, + 0x04, 0xa4, 0x02, 0x00, 0x00, 0x04, 0xa5, 0x02, + 0x00, 0x00, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x26, + 0x20, 0x00, 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, + 0x20, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, + 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0xa9, + 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, + 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, + 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, + 0x24, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, + 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0xad, + 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, + 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, + 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, + 0x28, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, + 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0xb1, + 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, + 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, + 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, + 0x2c, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, + 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0xb5, + 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, + 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, + 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, + 0x30, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, + 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0xb9, + 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, + 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, + 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, + 0x34, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, + 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0xbd, + 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, + 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, + 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, + 0x38, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, + 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0xc1, + 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, + 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, + 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, + 0x3c, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, + 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0xc5, + 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, + 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, + 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, + 0x40, 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0xc9, + 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, + 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, + 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, + 0x44, 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, + 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0xcd, + 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, + 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, + 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, 0x4d, + 0x48, 0x00, 0x00, 0x80, 0x04, 0xd0, 0x02, 0x00, + 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0xd1, + 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, + 0x04, 0xd2, 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, + 0x00, 0x80, 0x04, 0xd3, 0x02, 0x00, 0x00, 0x4d, + 0x4c, 0x00, 0x00, 0x80, 0x04, 0xd4, 0x02, 0x00, + 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0xd5, + 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, + 0x04, 0xd6, 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, + 0x00, 0x80, 0x04, 0xd7, 0x02, 0x00, 0x00, 0x4d, + 0x50, 0x00, 0x00, 0x80, 0x04, 0xd8, 0x02, 0x00, + 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0xd9, + 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, + 0x04, 0xda, 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, + 0x00, 0x80, 0x04, 0xdb, 0x02, 0x00, 0x00, 0x4d, + 0x54, 0x00, 0x00, 0x80, 0x04, 0xdc, 0x02, 0x00, + 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0xdd, + 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, + 0x04, 0xde, 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, + 0x00, 0x80, 0x04, 0xdf, 0x02, 0x00, 0x00, 0x4d, + 0x58, 0x00, 0x00, 0x80, 0x04, 0xe0, 0x02, 0x00, + 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0xe1, + 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, + 0x04, 0xe2, 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, + 0x00, 0x80, 0x04, 0xe3, 0x02, 0x00, 0x00, 0x4d, + 0x5c, 0x00, 0x00, 0x80, 0x04, 0xe4, 0x02, 0x00, + 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0xe5, + 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, + 0x04, 0xe6, 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, + 0x00, 0x80, 0x04, 0xe7, 0x02, 0x00, 0x00, 0x4d, + 0x60, 0x00, 0x00, 0x80, 0x04, 0xe8, 0x02, 0x00, + 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0xe9, + 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, + 0x04, 0xea, 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, + 0x00, 0x80, 0x04, 0xeb, 0x02, 0x00, 0x00, 0x4d, + 0x64, 0x00, 0x00, 0x80, 0x04, 0xec, 0x02, 0x00, + 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0xed, + 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, + 0x04, 0xee, 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, + 0x00, 0x80, 0x04, 0xef, 0x02, 0x00, 0x00, 0x4d, + 0x68, 0x00, 0x00, 0x80, 0x04, 0xf0, 0x02, 0x00, + 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0xf1, + 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, + 0x04, 0xf2, 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, + 0x00, 0x80, 0x04, 0xf3, 0x02, 0x00, 0x00, 0x4d, + 0x6c, 0x00, 0x00, 0x80, 0x04, 0xf4, 0x02, 0x00, + 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0xf5, + 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, + 0x04, 0xf6, 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, + 0x00, 0x80, 0x04, 0xf7, 0x02, 0x00, 0x00, 0x4d, + 0x70, 0x00, 0x00, 0x80, 0x04, 0xf8, 0x02, 0x00, + 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0xf9, + 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, + 0x04, 0xfa, 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, + 0x00, 0x80, 0x04, 0xfb, 0x02, 0x00, 0x00, 0x4d, + 0x74, 0x00, 0x00, 0x80, 0x04, 0xfc, 0x02, 0x00, + 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0xfd, + 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, + 0x04, 0xfe, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, + 0x00, 0x80, 0x04, 0xff, 0x02, 0x00, 0x00, 0x4d, + 0x78, 0x00, 0x00, 0x80, 0x04, 0x00, 0x03, 0x00, + 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x01, + 0x03, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, + 0x04, 0x02, 0x03, 0x00, 0x00, 0x4d, 0x7b, 0x00, + 0x00, 0x80, 0x04, 0x03, 0x03, 0x00, 0x00, 0x4d, + 0x7c, 0x00, 0x00, 0x80, 0x04, 0x04, 0x03, 0x00, + 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x05, + 0x03, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, + 0x04, 0x06, 0x03, 0x00, 0x00, 0x4d, 0x7f, 0x00, + 0x00, 0x80, 0x04, 0x07, 0x03, 0x00, 0x00, 0x4d, + 0x80, 0x00, 0x00, 0x80, 0x04, 0x08, 0x03, 0x00, + 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x09, + 0x03, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, + 0x04, 0x0a, 0x03, 0x00, 0x00, 0x4d, 0x83, 0x00, + 0x00, 0x80, 0x04, 0x0b, 0x03, 0x00, 0x00, 0x4d, + 0x84, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x03, 0x00, + 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x0d, + 0x03, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, + 0x04, 0x0e, 0x03, 0x00, 0x00, 0x4d, 0x87, 0x00, + 0x00, 0x80, 0x04, 0x0f, 0x03, 0x00, 0x00, 0x4d, + 0x88, 0x00, 0x00, 0x80, 0x04, 0x10, 0x03, 0x00, + 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x11, + 0x03, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, + 0x04, 0x12, 0x03, 0x00, 0x00, 0x4d, 0x8b, 0x00, + 0x00, 0x80, 0x04, 0x13, 0x03, 0x00, 0x00, 0x4d, + 0x8c, 0x00, 0x00, 0x80, 0x04, 0x14, 0x03, 0x00, + 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x15, + 0x03, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, + 0x04, 0x16, 0x03, 0x00, 0x00, 0x4d, 0x8f, 0x00, + 0x00, 0x80, 0x04, 0x17, 0x03, 0x00, 0x00, 0x4d, + 0x90, 0x00, 0x00, 0x80, 0x04, 0x18, 0x03, 0x00, + 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x19, + 0x03, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, + 0x04, 0x1a, 0x03, 0x00, 0x00, 0x4d, 0x93, 0x00, + 0x00, 0x80, 0x04, 0x1b, 0x03, 0x00, 0x00, 0x4d, + 0x94, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x03, 0x00, + 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x1d, + 0x03, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, + 0x04, 0x1e, 0x03, 0x00, 0x00, 0x4d, 0x97, 0x00, + 0x00, 0x80, 0x04, 0x1f, 0x03, 0x00, 0x00, 0x4d, + 0x98, 0x00, 0x00, 0x80, 0x04, 0x20, 0x03, 0x00, + 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x21, + 0x03, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, + 0x04, 0x22, 0x03, 0x00, 0x00, 0x4d, 0x9b, 0x00, + 0x00, 0x80, 0x04, 0x23, 0x03, 0x00, 0x00, 0x4d, + 0x9c, 0x00, 0x00, 0x80, 0x04, 0x24, 0x03, 0x00, + 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x25, + 0x03, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, + 0x04, 0x26, 0x03, 0x00, 0x00, 0x4d, 0x9f, 0x00, + 0x00, 0x80, 0x04, 0x27, 0x03, 0x00, 0x00, 0x4d, + 0xa0, 0x00, 0x00, 0x80, 0x04, 0x28, 0x03, 0x00, + 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x29, + 0x03, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, + 0x04, 0x2a, 0x03, 0x00, 0x00, 0x4d, 0xa3, 0x00, + 0x00, 0x80, 0x04, 0x2b, 0x03, 0x00, 0x00, 0x4d, + 0xa4, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x03, 0x00, + 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x2d, + 0x03, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, + 0x04, 0x2e, 0x03, 0x00, 0x00, 0x4d, 0xa7, 0x00, + 0x00, 0x80, 0x04, 0x2f, 0x03, 0x00, 0x00, 0x4d, + 0xa8, 0x00, 0x00, 0x80, 0x04, 0x30, 0x03, 0x00, + 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x31, + 0x03, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, + 0x04, 0x32, 0x03, 0x00, 0x00, 0x4d, 0xab, 0x00, + 0x00, 0x80, 0x04, 0x33, 0x03, 0x00, 0x00, 0x4d, + 0xac, 0x00, 0x00, 0x80, 0x04, 0x34, 0x03, 0x00, + 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0x35, + 0x03, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, + 0x04, 0x36, 0x03, 0x00, 0x00, 0x4d, 0xaf, 0x00, + 0x00, 0x80, 0x04, 0x37, 0x03, 0x00, 0x00, 0x4d, + 0xb0, 0x00, 0x00, 0x80, 0x04, 0x38, 0x03, 0x00, + 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0x39, + 0x03, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, + 0x04, 0x3a, 0x03, 0x00, 0x00, 0x4d, 0xb3, 0x00, + 0x00, 0x80, 0x04, 0x3b, 0x03, 0x00, 0x00, 0x4d, + 0xb4, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x03, 0x00, + 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0x3d, + 0x03, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, + 0x04, 0x3e, 0x03, 0x00, 0x00, 0x4d, 0xb7, 0x00, + 0x00, 0x80, 0x04, 0x3f, 0x03, 0x00, 0x00, 0x4d, + 0xb8, 0x00, 0x00, 0x80, 0x04, 0x40, 0x03, 0x00, + 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0x41, + 0x03, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, + 0x04, 0x42, 0x03, 0x00, 0x00, 0x4d, 0xbb, 0x00, + 0x00, 0x80, 0x04, 0x43, 0x03, 0x00, 0x00, 0x4d, + 0xbc, 0x00, 0x00, 0x80, 0x04, 0x44, 0x03, 0x00, + 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0x45, + 0x03, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, + 0x04, 0x46, 0x03, 0x00, 0x00, 0x4d, 0xbf, 0x00, + 0x00, 0x80, 0x04, 0x47, 0x03, 0x00, 0x00, 0x4d, + 0xc0, 0x00, 0x00, 0x80, 0x04, 0x48, 0x03, 0x00, + 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0x49, + 0x03, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, + 0x04, 0x4a, 0x03, 0x00, 0x00, 0x4d, 0xc3, 0x00, + 0x00, 0x80, 0x04, 0x4b, 0x03, 0x00, 0x00, 0x4d, + 0xc4, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x03, 0x00, + 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0x4d, + 0x03, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, + 0x04, 0x4e, 0x03, 0x00, 0x00, 0x4d, 0xc7, 0x00, + 0x00, 0x80, 0x04, 0x4f, 0x03, 0x00, 0x00, 0x4d, + 0xc8, 0x00, 0x00, 0x80, 0x04, 0x50, 0x03, 0x00, + 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0x51, + 0x03, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, + 0x04, 0x52, 0x03, 0x00, 0x00, 0x4d, 0xcb, 0x00, + 0x00, 0x80, 0x04, 0x53, 0x03, 0x00, 0x00, 0x4d, + 0xcc, 0x00, 0x00, 0x80, 0x04, 0x54, 0x03, 0x00, + 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0x55, + 0x03, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, + 0x04, 0x56, 0x03, 0x00, 0x00, 0x4d, 0xcf, 0x00, + 0x00, 0x80, 0x04, 0x57, 0x03, 0x00, 0x00, 0x4d, + 0xd0, 0x00, 0x00, 0x80, 0x04, 0x58, 0x03, 0x00, + 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0x59, + 0x03, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, + 0x04, 0x5a, 0x03, 0x00, 0x00, 0x4d, 0xd3, 0x00, + 0x00, 0x80, 0x04, 0x5b, 0x03, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x03, 0x00, + 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0x5d, + 0x03, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, + 0x04, 0x5e, 0x03, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x80, 0x04, 0x5f, 0x03, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x80, 0x04, 0x60, 0x03, 0x00, + 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0x61, + 0x03, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, + 0x04, 0x62, 0x03, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x80, 0x04, 0x63, 0x03, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x80, 0x04, 0x64, 0x03, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0x65, + 0x03, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, + 0x04, 0x66, 0x03, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x80, 0x04, 0x67, 0x03, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x80, 0x04, 0x68, 0x03, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0x69, + 0x03, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, + 0x04, 0x6a, 0x03, 0x00, 0x00, 0x4d, 0xe3, 0x00, + 0x00, 0x80, 0x04, 0x6b, 0x03, 0x00, 0x00, 0x4d, + 0xe4, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x03, 0x00, + 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0x6d, + 0x03, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, + 0x04, 0x6e, 0x03, 0x00, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x80, 0x04, 0x6f, 0x03, 0x00, 0x00, 0x4d, + 0xe8, 0x00, 0x00, 0x80, 0x04, 0x70, 0x03, 0x00, + 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0x71, + 0x03, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, + 0x04, 0x72, 0x03, 0x00, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x80, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x87, 0x02, 0x00, 0x00, 0x04, 0x88, 0x02, 0x00, + 0x00, 0x04, 0x89, 0x02, 0x00, 0x00, 0x04, 0x8a, + 0x02, 0x00, 0x00, 0x04, 0x8b, 0x02, 0x00, 0x00, + 0x04, 0x8c, 0x02, 0x00, 0x00, 0x04, 0x8d, 0x02, + 0x00, 0x00, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x04, + 0x8f, 0x02, 0x00, 0x00, 0x04, 0x90, 0x02, 0x00, + 0x00, 0x04, 0x91, 0x02, 0x00, 0x00, 0x04, 0x92, + 0x02, 0x00, 0x00, 0x04, 0x93, 0x02, 0x00, 0x00, + 0x04, 0x94, 0x02, 0x00, 0x00, 0x04, 0x95, 0x02, + 0x00, 0x00, 0x04, 0x96, 0x02, 0x00, 0x00, 0x04, + 0x97, 0x02, 0x00, 0x00, 0x04, 0x98, 0x02, 0x00, + 0x00, 0x04, 0x99, 0x02, 0x00, 0x00, 0x04, 0x9a, + 0x02, 0x00, 0x00, 0x04, 0x9b, 0x02, 0x00, 0x00, + 0x04, 0x9c, 0x02, 0x00, 0x00, 0x04, 0x9d, 0x02, + 0x00, 0x00, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x04, + 0x9f, 0x02, 0x00, 0x00, 0x04, 0xa0, 0x02, 0x00, + 0x00, 0x04, 0xa1, 0x02, 0x00, 0x00, 0x04, 0xa2, + 0x02, 0x00, 0x00, 0x04, 0xa3, 0x02, 0x00, 0x00, + 0x04, 0xa4, 0x02, 0x00, 0x00, 0x04, 0xa5, 0x02, + 0x00, 0x00, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x26, + 0x20, 0x00, 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, + 0x20, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, + 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0xa9, + 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, + 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, + 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, + 0x24, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, + 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0xad, + 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, + 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, + 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, + 0x28, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, + 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0xb1, + 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, + 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, + 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, + 0x2c, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, + 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0xb5, + 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, + 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, + 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, + 0x30, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, + 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0xb9, + 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, + 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, + 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, + 0x34, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, + 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0xbd, + 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, + 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, + 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, + 0x38, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, + 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0xc1, + 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, + 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, + 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, + 0x3c, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, + 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0xc5, + 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, + 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, + 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, + 0x40, 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0xc9, + 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, + 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, + 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, + 0x44, 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, + 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0xcd, + 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, + 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, + 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, 0x4d, + 0x48, 0x00, 0x00, 0x80, 0x04, 0xd0, 0x02, 0x00, + 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0xd1, + 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, + 0x04, 0xd2, 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, + 0x00, 0x80, 0x04, 0xd3, 0x02, 0x00, 0x00, 0x4d, + 0x4c, 0x00, 0x00, 0x80, 0x04, 0xd4, 0x02, 0x00, + 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0xd5, + 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, + 0x04, 0xd6, 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, + 0x00, 0x80, 0x04, 0xd7, 0x02, 0x00, 0x00, 0x4d, + 0x50, 0x00, 0x00, 0x80, 0x04, 0xd8, 0x02, 0x00, + 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0xd9, + 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, + 0x04, 0xda, 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, + 0x00, 0x80, 0x04, 0xdb, 0x02, 0x00, 0x00, 0x4d, + 0x54, 0x00, 0x00, 0x80, 0x04, 0xdc, 0x02, 0x00, + 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0xdd, + 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, + 0x04, 0xde, 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, + 0x00, 0x80, 0x04, 0xdf, 0x02, 0x00, 0x00, 0x4d, + 0x58, 0x00, 0x00, 0x80, 0x04, 0xe0, 0x02, 0x00, + 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0xe1, + 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, + 0x04, 0xe2, 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, + 0x00, 0x80, 0x04, 0xe3, 0x02, 0x00, 0x00, 0x4d, + 0x5c, 0x00, 0x00, 0x80, 0x04, 0xe4, 0x02, 0x00, + 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0xe5, + 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, + 0x04, 0xe6, 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, + 0x00, 0x80, 0x04, 0xe7, 0x02, 0x00, 0x00, 0x4d, + 0x60, 0x00, 0x00, 0x80, 0x04, 0xe8, 0x02, 0x00, + 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0xe9, + 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, + 0x04, 0xea, 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, + 0x00, 0x80, 0x04, 0xeb, 0x02, 0x00, 0x00, 0x4d, + 0x64, 0x00, 0x00, 0x80, 0x04, 0xec, 0x02, 0x00, + 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0xed, + 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, + 0x04, 0xee, 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, + 0x00, 0x80, 0x04, 0xef, 0x02, 0x00, 0x00, 0x4d, + 0x68, 0x00, 0x00, 0x80, 0x04, 0xf0, 0x02, 0x00, + 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0xf1, + 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, + 0x04, 0xf2, 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, + 0x00, 0x80, 0x04, 0xf3, 0x02, 0x00, 0x00, 0x4d, + 0x6c, 0x00, 0x00, 0x80, 0x04, 0xf4, 0x02, 0x00, + 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0xf5, + 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, + 0x04, 0xf6, 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, + 0x00, 0x80, 0x04, 0xf7, 0x02, 0x00, 0x00, 0x4d, + 0x70, 0x00, 0x00, 0x80, 0x04, 0xf8, 0x02, 0x00, + 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0xf9, + 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, + 0x04, 0xfa, 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, + 0x00, 0x80, 0x04, 0xfb, 0x02, 0x00, 0x00, 0x4d, + 0x74, 0x00, 0x00, 0x80, 0x04, 0xfc, 0x02, 0x00, + 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0xfd, + 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, + 0x04, 0xfe, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, + 0x00, 0x80, 0x04, 0xff, 0x02, 0x00, 0x00, 0x4d, + 0x78, 0x00, 0x00, 0x80, 0x04, 0x00, 0x03, 0x00, + 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x01, + 0x03, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, + 0x04, 0x02, 0x03, 0x00, 0x00, 0x4d, 0x7b, 0x00, + 0x00, 0x80, 0x04, 0x03, 0x03, 0x00, 0x00, 0x4d, + 0x7c, 0x00, 0x00, 0x80, 0x04, 0x04, 0x03, 0x00, + 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x05, + 0x03, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, + 0x04, 0x06, 0x03, 0x00, 0x00, 0x4d, 0x7f, 0x00, + 0x00, 0x80, 0x04, 0x07, 0x03, 0x00, 0x00, 0x4d, + 0x80, 0x00, 0x00, 0x80, 0x04, 0x08, 0x03, 0x00, + 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x09, + 0x03, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, + 0x04, 0x0a, 0x03, 0x00, 0x00, 0x4d, 0x83, 0x00, + 0x00, 0x80, 0x04, 0x0b, 0x03, 0x00, 0x00, 0x4d, + 0x84, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x03, 0x00, + 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x0d, + 0x03, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, + 0x04, 0x0e, 0x03, 0x00, 0x00, 0x4d, 0x87, 0x00, + 0x00, 0x80, 0x04, 0x0f, 0x03, 0x00, 0x00, 0x4d, + 0x88, 0x00, 0x00, 0x80, 0x04, 0x10, 0x03, 0x00, + 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x11, + 0x03, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, + 0x04, 0x12, 0x03, 0x00, 0x00, 0x4d, 0x8b, 0x00, + 0x00, 0x80, 0x04, 0x13, 0x03, 0x00, 0x00, 0x4d, + 0x8c, 0x00, 0x00, 0x80, 0x04, 0x14, 0x03, 0x00, + 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x15, + 0x03, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, + 0x04, 0x16, 0x03, 0x00, 0x00, 0x4d, 0x8f, 0x00, + 0x00, 0x80, 0x04, 0x17, 0x03, 0x00, 0x00, 0x4d, + 0x90, 0x00, 0x00, 0x80, 0x04, 0x18, 0x03, 0x00, + 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x19, + 0x03, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, + 0x04, 0x1a, 0x03, 0x00, 0x00, 0x4d, 0x93, 0x00, + 0x00, 0x80, 0x04, 0x1b, 0x03, 0x00, 0x00, 0x4d, + 0x94, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x03, 0x00, + 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x1d, + 0x03, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, + 0x04, 0x1e, 0x03, 0x00, 0x00, 0x4d, 0x97, 0x00, + 0x00, 0x80, 0x04, 0x1f, 0x03, 0x00, 0x00, 0x4d, + 0x98, 0x00, 0x00, 0x80, 0x04, 0x20, 0x03, 0x00, + 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x21, + 0x03, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, + 0x04, 0x22, 0x03, 0x00, 0x00, 0x4d, 0x9b, 0x00, + 0x00, 0x80, 0x04, 0x23, 0x03, 0x00, 0x00, 0x4d, + 0x9c, 0x00, 0x00, 0x80, 0x04, 0x24, 0x03, 0x00, + 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x25, + 0x03, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, + 0x04, 0x26, 0x03, 0x00, 0x00, 0x4d, 0x9f, 0x00, + 0x00, 0x80, 0x04, 0x27, 0x03, 0x00, 0x00, 0x4d, + 0xa0, 0x00, 0x00, 0x80, 0x04, 0x28, 0x03, 0x00, + 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x29, + 0x03, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, + 0x04, 0x2a, 0x03, 0x00, 0x00, 0x4d, 0xa3, 0x00, + 0x00, 0x80, 0x04, 0x2b, 0x03, 0x00, 0x00, 0x4d, + 0xa4, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x03, 0x00, + 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x2d, + 0x03, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, + 0x04, 0x2e, 0x03, 0x00, 0x00, 0x4d, 0xa7, 0x00, + 0x00, 0x80, 0x04, 0x2f, 0x03, 0x00, 0x00, 0x4d, + 0xa8, 0x00, 0x00, 0x80, 0x04, 0x30, 0x03, 0x00, + 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x31, + 0x03, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, + 0x04, 0x32, 0x03, 0x00, 0x00, 0x4d, 0xab, 0x00, + 0x00, 0x80, 0x04, 0x33, 0x03, 0x00, 0x00, 0x4d, + 0xac, 0x00, 0x00, 0x80, 0x04, 0x34, 0x03, 0x00, + 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0x35, + 0x03, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, + 0x04, 0x36, 0x03, 0x00, 0x00, 0x4d, 0xaf, 0x00, + 0x00, 0x80, 0x04, 0x37, 0x03, 0x00, 0x00, 0x4d, + 0xb0, 0x00, 0x00, 0x80, 0x04, 0x38, 0x03, 0x00, + 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0x39, + 0x03, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, + 0x04, 0x3a, 0x03, 0x00, 0x00, 0x4d, 0xb3, 0x00, + 0x00, 0x80, 0x04, 0x3b, 0x03, 0x00, 0x00, 0x4d, + 0xb4, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x03, 0x00, + 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0x3d, + 0x03, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, + 0x04, 0x3e, 0x03, 0x00, 0x00, 0x4d, 0xb7, 0x00, + 0x00, 0x80, 0x04, 0x3f, 0x03, 0x00, 0x00, 0x4d, + 0xb8, 0x00, 0x00, 0x80, 0x04, 0x40, 0x03, 0x00, + 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0x41, + 0x03, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, + 0x04, 0x42, 0x03, 0x00, 0x00, 0x4d, 0xbb, 0x00, + 0x00, 0x80, 0x04, 0x43, 0x03, 0x00, 0x00, 0x4d, + 0xbc, 0x00, 0x00, 0x80, 0x04, 0x44, 0x03, 0x00, + 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0x45, + 0x03, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, + 0x04, 0x46, 0x03, 0x00, 0x00, 0x4d, 0xbf, 0x00, + 0x00, 0x80, 0x04, 0x47, 0x03, 0x00, 0x00, 0x4d, + 0xc0, 0x00, 0x00, 0x80, 0x04, 0x48, 0x03, 0x00, + 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0x49, + 0x03, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, + 0x04, 0x4a, 0x03, 0x00, 0x00, 0x4d, 0xc3, 0x00, + 0x00, 0x80, 0x04, 0x4b, 0x03, 0x00, 0x00, 0x4d, + 0xc4, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x03, 0x00, + 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0x4d, + 0x03, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, + 0x04, 0x4e, 0x03, 0x00, 0x00, 0x4d, 0xc7, 0x00, + 0x00, 0x80, 0x04, 0x4f, 0x03, 0x00, 0x00, 0x4d, + 0xc8, 0x00, 0x00, 0x80, 0x04, 0x50, 0x03, 0x00, + 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0x51, + 0x03, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, + 0x04, 0x52, 0x03, 0x00, 0x00, 0x4d, 0xcb, 0x00, + 0x00, 0x80, 0x04, 0x53, 0x03, 0x00, 0x00, 0x4d, + 0xcc, 0x00, 0x00, 0x80, 0x04, 0x54, 0x03, 0x00, + 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0x55, + 0x03, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, + 0x04, 0x56, 0x03, 0x00, 0x00, 0x4d, 0xcf, 0x00, + 0x00, 0x80, 0x04, 0x57, 0x03, 0x00, 0x00, 0x4d, + 0xd0, 0x00, 0x00, 0x80, 0x04, 0x58, 0x03, 0x00, + 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0x59, + 0x03, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, + 0x04, 0x5a, 0x03, 0x00, 0x00, 0x4d, 0xd3, 0x00, + 0x00, 0x80, 0x04, 0x5b, 0x03, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x03, 0x00, + 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0x5d, + 0x03, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, + 0x04, 0x5e, 0x03, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x80, 0x04, 0x5f, 0x03, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x80, 0x04, 0x60, 0x03, 0x00, + 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0x61, + 0x03, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, + 0x04, 0x62, 0x03, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x80, 0x04, 0x63, 0x03, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x80, 0x04, 0x64, 0x03, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0x65, + 0x03, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, + 0x04, 0x66, 0x03, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x80, 0x04, 0x67, 0x03, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x80, 0x04, 0x68, 0x03, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0x69, + 0x03, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, + 0x04, 0x6a, 0x03, 0x00, 0x00, 0x4d, 0xe3, 0x00, + 0x00, 0x80, 0x04, 0x6b, 0x03, 0x00, 0x00, 0x4d, + 0xe4, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x03, 0x00, + 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0x6d, + 0x03, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, + 0x04, 0x6e, 0x03, 0x00, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x80, 0x04, 0x6f, 0x03, 0x00, 0x00, 0x4d, + 0xe8, 0x00, 0x00, 0x80, 0x04, 0x70, 0x03, 0x00, + 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0x71, + 0x03, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, + 0x04, 0x72, 0x03, 0x00, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x80, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, + 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x89, 0xbe, + 0x8a, 0xbe, 0x8b, 0xbe, 0x8c, 0xbe, 0x8d, 0xbe, + 0x8e, 0xbe, 0x8f, 0xbe, 0x90, 0xbe, 0x91, 0xbe, + 0x92, 0xbe, 0x93, 0xbe, 0x94, 0x26, 0x0c, 0x00, + 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, 0x44, 0x01, + 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, + 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x5c, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x73, 0x03, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x03, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x73, 0x03, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, + 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x95, 0xbe, 0x96, 0xbe, 0x97, 0xbe, 0x98, 0xbe, + 0x99, 0xbe, 0x9a, 0xbe, 0x9b, 0xbe, 0x9c, 0xbe, + 0x9d, 0xbe, 0x9e, 0xbe, 0x9f, 0xbe, 0xa0, 0x26, + 0x0c, 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, + 0x44, 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, + 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x5c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x72, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x74, 0x03, 0x00, + 0x00, 0x04, 0x75, 0x03, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x03, 0x00, 0x00, 0x04, 0x75, 0x03, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x74, 0x03, 0x00, 0x00, 0x04, 0x75, 0x03, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, + 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x4d, 0x76, + 0x03, 0x00, 0x00, 0x4d, 0x77, 0x03, 0x00, 0x00, + 0x0b, 0x04, 0x78, 0x03, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x79, 0x03, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x7a, 0x03, 0x00, 0x00, 0x4d, 0x7b, 0x03, + 0x00, 0x00, 0x04, 0x7c, 0x03, 0x00, 0x00, 0x4d, + 0x7d, 0x03, 0x00, 0x00, 0x4d, 0x7e, 0x03, 0x00, + 0x00, 0x0b, 0x04, 0x7f, 0x03, 0x00, 0x00, 0x4d, + 0x7b, 0x03, 0x00, 0x00, 0x04, 0x80, 0x03, 0x00, + 0x00, 0x4d, 0x7d, 0x03, 0x00, 0x00, 0x4d, 0x81, + 0x03, 0x00, 0x00, 0x0b, 0x04, 0x82, 0x03, 0x00, + 0x00, 0x4d, 0x7b, 0x03, 0x00, 0x00, 0x04, 0x83, + 0x03, 0x00, 0x00, 0x4d, 0x7d, 0x03, 0x00, 0x00, + 0x4d, 0x84, 0x03, 0x00, 0x00, 0x4d, 0x85, 0x03, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x86, 0x03, 0x00, + 0x00, 0x4d, 0x7e, 0x03, 0x00, 0x00, 0x04, 0x87, + 0x03, 0x00, 0x00, 0x4d, 0x88, 0x03, 0x00, 0x00, + 0x04, 0x89, 0x03, 0x00, 0x00, 0x4d, 0x8a, 0x03, + 0x00, 0x00, 0x04, 0x8b, 0x03, 0x00, 0x00, 0x4d, + 0x8c, 0x03, 0x00, 0x00, 0x04, 0x8d, 0x03, 0x00, + 0x00, 0x4d, 0x8e, 0x03, 0x00, 0x00, 0x04, 0x8f, + 0x03, 0x00, 0x00, 0x4d, 0x90, 0x03, 0x00, 0x00, + 0x04, 0x91, 0x03, 0x00, 0x00, 0x4d, 0x92, 0x03, + 0x00, 0x00, 0x4d, 0x93, 0x03, 0x00, 0x00, 0x0b, + 0x04, 0x86, 0x03, 0x00, 0x00, 0x4d, 0x7e, 0x03, + 0x00, 0x00, 0x04, 0x87, 0x03, 0x00, 0x00, 0x4d, + 0x88, 0x03, 0x00, 0x00, 0x04, 0x89, 0x03, 0x00, + 0x00, 0x4d, 0x8a, 0x03, 0x00, 0x00, 0x04, 0x8b, + 0x03, 0x00, 0x00, 0x4d, 0x8c, 0x03, 0x00, 0x00, + 0x04, 0x8d, 0x03, 0x00, 0x00, 0x4d, 0x8e, 0x03, + 0x00, 0x00, 0x04, 0x8f, 0x03, 0x00, 0x00, 0x4d, + 0x90, 0x03, 0x00, 0x00, 0x04, 0x91, 0x03, 0x00, + 0x00, 0x4d, 0x92, 0x03, 0x00, 0x00, 0x4d, 0x78, + 0x03, 0x00, 0x00, 0x4d, 0x94, 0x03, 0x00, 0x00, + 0x0b, 0x04, 0x95, 0x03, 0x00, 0x00, 0x4d, 0x96, + 0x03, 0x00, 0x00, 0x04, 0x97, 0x03, 0x00, 0x00, + 0x4d, 0x98, 0x03, 0x00, 0x00, 0x04, 0x99, 0x03, + 0x00, 0x00, 0x4d, 0x9a, 0x03, 0x00, 0x00, 0x04, + 0x9b, 0x03, 0x00, 0x00, 0x4d, 0x9c, 0x03, 0x00, + 0x00, 0x04, 0x9d, 0x03, 0x00, 0x00, 0x4d, 0x9e, + 0x03, 0x00, 0x00, 0x04, 0x9f, 0x03, 0x00, 0x00, + 0x4d, 0xa0, 0x03, 0x00, 0x00, 0x04, 0xa1, 0x03, + 0x00, 0x00, 0x4d, 0xa2, 0x03, 0x00, 0x00, 0x04, + 0xa3, 0x03, 0x00, 0x00, 0x4d, 0xa4, 0x03, 0x00, + 0x00, 0x04, 0xa5, 0x03, 0x00, 0x00, 0x4d, 0xa3, + 0x03, 0x00, 0x00, 0x04, 0xa6, 0x03, 0x00, 0x00, + 0x4d, 0xa7, 0x03, 0x00, 0x00, 0x04, 0xa8, 0x03, + 0x00, 0x00, 0x4d, 0xa9, 0x03, 0x00, 0x00, 0x04, + 0xaa, 0x03, 0x00, 0x00, 0x4d, 0xab, 0x03, 0x00, + 0x00, 0x04, 0xac, 0x03, 0x00, 0x00, 0x4d, 0xad, + 0x03, 0x00, 0x00, 0x04, 0xae, 0x03, 0x00, 0x00, + 0x4d, 0xaf, 0x03, 0x00, 0x00, 0x04, 0xb0, 0x03, + 0x00, 0x00, 0x4d, 0xb1, 0x03, 0x00, 0x00, 0x04, + 0xb2, 0x03, 0x00, 0x00, 0x4d, 0xb3, 0x03, 0x00, + 0x00, 0x04, 0xb4, 0x03, 0x00, 0x00, 0x4d, 0xb5, + 0x03, 0x00, 0x00, 0x04, 0xb6, 0x03, 0x00, 0x00, + 0x4d, 0xb7, 0x03, 0x00, 0x00, 0x04, 0xb8, 0x03, + 0x00, 0x00, 0x4d, 0xb9, 0x03, 0x00, 0x00, 0x04, + 0xba, 0x03, 0x00, 0x00, 0x4d, 0xbb, 0x03, 0x00, + 0x00, 0x04, 0xbc, 0x03, 0x00, 0x00, 0x4d, 0xbd, + 0x03, 0x00, 0x00, 0x4d, 0xbe, 0x03, 0x00, 0x00, + 0x4d, 0x45, 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, + 0xcc, 0x28, 0xfe, 0x0e, 0x01, 0x00, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_zh_Hans_CN_size = 30716; + +const uint8_t intl_zh_Hans_CN[30716] = { + 0x01, 0xf0, 0x05, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x14, 0x7a, 0x68, 0x2d, 0x48, 0x61, 0x6e, 0x73, + 0x2d, 0x43, 0x4e, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x0e, + 0x7b, 0x31, 0x7d, 0x20, 0x7b, 0x30, 0x7d, 0x0a, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, 0x65, + 0x64, 0x69, 0x75, 0x6d, 0x08, 0x66, 0x75, 0x6c, + 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x05, 0x64, + 0x00, 0xe5, 0x65, 0x02, 0x64, 0x06, 0x63, 0x63, + 0x63, 0x02, 0x45, 0x07, 0x64, 0x00, 0xe5, 0x65, + 0x45, 0x00, 0x04, 0x45, 0x64, 0x0e, 0x45, 0x20, + 0x61, 0x68, 0x3a, 0x6d, 0x6d, 0x06, 0x45, 0x68, + 0x6d, 0x0c, 0x45, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x06, 0x45, 0x48, 0x6d, 0x14, 0x45, 0x20, 0x61, + 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x08, + 0x45, 0x68, 0x6d, 0x73, 0x12, 0x45, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x08, 0x45, + 0x48, 0x6d, 0x73, 0x07, 0x47, 0x00, 0x79, 0x00, + 0x74, 0x5e, 0x04, 0x47, 0x79, 0x0b, 0x47, 0x00, + 0x79, 0x00, 0x74, 0x5e, 0x4d, 0x00, 0x08, 0x67, + 0x0a, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x0f, 0x47, + 0x00, 0x79, 0x00, 0x74, 0x5e, 0x4d, 0x00, 0x08, + 0x67, 0x64, 0x00, 0xe5, 0x65, 0x0c, 0x47, 0x79, + 0x4d, 0x4d, 0x4d, 0x64, 0x11, 0x47, 0x00, 0x79, + 0x00, 0x74, 0x5e, 0x4d, 0x00, 0x08, 0x67, 0x64, + 0x00, 0xe5, 0x65, 0x45, 0x00, 0x0e, 0x47, 0x79, + 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x07, 0x61, 0x00, + 0x68, 0x00, 0xf6, 0x65, 0x02, 0x68, 0x05, 0x48, + 0x00, 0xf6, 0x65, 0x02, 0x48, 0x0a, 0x61, 0x68, + 0x3a, 0x6d, 0x6d, 0x04, 0x68, 0x6d, 0x0a, 0x48, + 0x48, 0x3a, 0x6d, 0x6d, 0x04, 0x48, 0x6d, 0x10, + 0x61, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, + 0x06, 0x68, 0x6d, 0x73, 0x10, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x06, 0x48, 0x6d, + 0x73, 0x14, 0x76, 0x20, 0x61, 0x68, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x08, 0x68, 0x6d, 0x73, + 0x76, 0x14, 0x76, 0x20, 0x48, 0x48, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x08, 0x48, 0x6d, 0x73, + 0x76, 0x0e, 0x76, 0x20, 0x61, 0x68, 0x3a, 0x6d, + 0x6d, 0x06, 0x68, 0x6d, 0x76, 0x0e, 0x76, 0x20, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x06, 0x48, 0x6d, + 0x76, 0x05, 0x4d, 0x00, 0x08, 0x67, 0x02, 0x4d, + 0x06, 0x4d, 0x2f, 0x64, 0x04, 0x4d, 0x64, 0x08, + 0x4d, 0x2f, 0x64, 0x45, 0x06, 0x4d, 0x45, 0x64, + 0x0a, 0x4d, 0x4d, 0x2f, 0x64, 0x64, 0x08, 0x4d, + 0x4d, 0x64, 0x64, 0x06, 0x4c, 0x4c, 0x4c, 0x06, + 0x4d, 0x4d, 0x4d, 0x09, 0x4d, 0x00, 0x08, 0x67, + 0x64, 0x00, 0xe5, 0x65, 0x08, 0x4d, 0x4d, 0x4d, + 0x64, 0x0b, 0x4d, 0x00, 0x08, 0x67, 0x64, 0x00, + 0xe5, 0x65, 0x45, 0x00, 0x0a, 0x4d, 0x4d, 0x4d, + 0x45, 0x64, 0x0a, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, + 0x0a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x04, 0x6d, + 0x73, 0x05, 0x79, 0x00, 0x74, 0x5e, 0x02, 0x79, + 0x09, 0x79, 0x00, 0x74, 0x5e, 0x4d, 0x00, 0x08, + 0x67, 0x04, 0x79, 0x4d, 0x0a, 0x79, 0x2f, 0x4d, + 0x2f, 0x64, 0x06, 0x79, 0x4d, 0x64, 0x0c, 0x79, + 0x2f, 0x4d, 0x2f, 0x64, 0x45, 0x08, 0x79, 0x4d, + 0x45, 0x64, 0x06, 0x79, 0x4d, 0x4d, 0x08, 0x79, + 0x4d, 0x4d, 0x4d, 0x0d, 0x79, 0x00, 0x74, 0x5e, + 0x4d, 0x00, 0x08, 0x67, 0x64, 0x00, 0xe5, 0x65, + 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x0f, 0x79, + 0x00, 0x74, 0x5e, 0x4d, 0x00, 0x08, 0x67, 0x64, + 0x00, 0xe5, 0x65, 0x45, 0x00, 0x0c, 0x79, 0x4d, + 0x4d, 0x4d, 0x45, 0x64, 0x0a, 0x79, 0x4d, 0x4d, + 0x4d, 0x4d, 0x0d, 0x79, 0x00, 0x74, 0x5e, 0x2c, + 0x7b, 0x51, 0x00, 0x63, 0x5b, 0xa6, 0x5e, 0x08, + 0x79, 0x51, 0x51, 0x51, 0x0a, 0x79, 0x51, 0x51, + 0x51, 0x51, 0x20, 0x61, 0x76, 0x61, 0x69, 0x6c, + 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x73, 0x15, 0x79, 0x00, 0x74, 0x5e, + 0x4d, 0x00, 0x08, 0x67, 0x64, 0x00, 0xe5, 0x65, + 0x45, 0x00, 0x45, 0x00, 0x45, 0x00, 0x45, 0x00, + 0x14, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x45, 0x45, + 0x45, 0x45, 0x64, 0x0c, 0x79, 0x4d, 0x4d, 0x4d, + 0x4d, 0x64, 0x16, 0x64, 0x61, 0x74, 0x65, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x1a, 0x7a, + 0x7a, 0x7a, 0x7a, 0x20, 0x61, 0x68, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x12, 0x68, 0x6d, 0x6d, + 0x73, 0x73, 0x7a, 0x7a, 0x7a, 0x7a, 0x14, 0x7a, + 0x20, 0x61, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x08, 0x68, 0x6d, 0x73, 0x7a, 0x16, 0x74, + 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x73, 0x0e, 0x66, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x73, 0x0c, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x05, 0x31, 0x00, 0x08, 0x67, 0x05, 0x32, + 0x00, 0x08, 0x67, 0x05, 0x33, 0x00, 0x08, 0x67, + 0x05, 0x34, 0x00, 0x08, 0x67, 0x05, 0x35, 0x00, + 0x08, 0x67, 0x05, 0x36, 0x00, 0x08, 0x67, 0x05, + 0x37, 0x00, 0x08, 0x67, 0x05, 0x38, 0x00, 0x08, + 0x67, 0x05, 0x39, 0x00, 0x08, 0x67, 0x07, 0x31, + 0x00, 0x30, 0x00, 0x08, 0x67, 0x07, 0x31, 0x00, + 0x31, 0x00, 0x08, 0x67, 0x07, 0x31, 0x00, 0x32, + 0x00, 0x08, 0x67, 0x05, 0x00, 0x4e, 0x08, 0x67, + 0x05, 0x8c, 0x4e, 0x08, 0x67, 0x05, 0x09, 0x4e, + 0x08, 0x67, 0x05, 0xdb, 0x56, 0x08, 0x67, 0x05, + 0x94, 0x4e, 0x08, 0x67, 0x05, 0x6d, 0x51, 0x08, + 0x67, 0x05, 0x03, 0x4e, 0x08, 0x67, 0x05, 0x6b, + 0x51, 0x08, 0x67, 0x05, 0x5d, 0x4e, 0x08, 0x67, + 0x05, 0x41, 0x53, 0x08, 0x67, 0x07, 0x41, 0x53, + 0x00, 0x4e, 0x08, 0x67, 0x07, 0x41, 0x53, 0x8c, + 0x4e, 0x08, 0x67, 0x0c, 0x6d, 0x6f, 0x6e, 0x74, + 0x68, 0x73, 0x03, 0xe5, 0x65, 0x03, 0x00, 0x4e, + 0x03, 0x8c, 0x4e, 0x03, 0x09, 0x4e, 0x03, 0xdb, + 0x56, 0x03, 0x94, 0x4e, 0x03, 0x6d, 0x51, 0x05, + 0x68, 0x54, 0xe5, 0x65, 0x05, 0x68, 0x54, 0x00, + 0x4e, 0x05, 0x68, 0x54, 0x8c, 0x4e, 0x05, 0x68, + 0x54, 0x09, 0x4e, 0x05, 0x68, 0x54, 0xdb, 0x56, + 0x05, 0x68, 0x54, 0x94, 0x4e, 0x05, 0x68, 0x54, + 0x6d, 0x51, 0x07, 0x1f, 0x66, 0x1f, 0x67, 0xe5, + 0x65, 0x07, 0x1f, 0x66, 0x1f, 0x67, 0x00, 0x4e, + 0x07, 0x1f, 0x66, 0x1f, 0x67, 0x8c, 0x4e, 0x07, + 0x1f, 0x66, 0x1f, 0x67, 0x09, 0x4e, 0x07, 0x1f, + 0x66, 0x1f, 0x67, 0xdb, 0x56, 0x07, 0x1f, 0x66, + 0x1f, 0x67, 0x94, 0x4e, 0x07, 0x1f, 0x66, 0x1f, + 0x67, 0x6d, 0x51, 0x08, 0x64, 0x61, 0x79, 0x73, + 0x05, 0x5b, 0x4f, 0x86, 0x53, 0x08, 0x65, 0x72, + 0x61, 0x73, 0x05, 0x0a, 0x4e, 0x48, 0x53, 0x04, + 0x61, 0x6d, 0x05, 0x0b, 0x4e, 0x48, 0x53, 0x04, + 0x70, 0x6d, 0x14, 0x64, 0x61, 0x79, 0x50, 0x65, + 0x72, 0x69, 0x6f, 0x64, 0x73, 0x03, 0x63, 0x6b, + 0x03, 0x03, 0x4e, 0x03, 0x6b, 0x51, 0x03, 0x5d, + 0x4e, 0x03, 0x41, 0x53, 0x03, 0xac, 0x51, 0x03, + 0x4a, 0x81, 0x05, 0x63, 0x6b, 0x08, 0x67, 0x05, + 0xac, 0x51, 0x08, 0x67, 0x05, 0x4a, 0x81, 0x08, + 0x67, 0x07, 0x31, 0x00, 0x33, 0x00, 0x08, 0x67, + 0x07, 0x41, 0x53, 0x09, 0x4e, 0x08, 0x67, 0x08, + 0x45, 0x52, 0x41, 0x30, 0x08, 0x45, 0x52, 0x41, + 0x31, 0x06, 0x4d, 0x30, 0x31, 0x06, 0x4d, 0x30, + 0x32, 0x06, 0x4d, 0x30, 0x33, 0x06, 0x4d, 0x30, + 0x34, 0x06, 0x4d, 0x30, 0x35, 0x06, 0x4d, 0x30, + 0x36, 0x06, 0x4d, 0x30, 0x37, 0x06, 0x4d, 0x30, + 0x38, 0x06, 0x4d, 0x30, 0x39, 0x06, 0x4d, 0x31, + 0x30, 0x06, 0x4d, 0x31, 0x31, 0x06, 0x4d, 0x31, + 0x32, 0x07, 0x6c, 0x51, 0x43, 0x51, 0x4d, 0x52, + 0x05, 0x6c, 0x51, 0x43, 0x51, 0x07, 0x7f, 0x89, + 0x43, 0x51, 0x4d, 0x52, 0x05, 0x7f, 0x89, 0x43, + 0x51, 0x07, 0xf0, 0x95, 0x37, 0x00, 0x08, 0x67, + 0x07, 0xf0, 0x95, 0x03, 0x4e, 0x08, 0x67, 0x09, + 0x0c, 0x5e, 0x2f, 0x4f, 0x65, 0x67, 0x86, 0x53, + 0x07, 0x70, 0x53, 0xa6, 0x5e, 0x86, 0x53, 0x09, + 0x0a, 0x4f, 0xaf, 0x65, 0x70, 0x51, 0x86, 0x53, + 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, 0x36, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x36, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x48, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x36, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x36, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, + 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x1d, 0x57, 0x00, 0x61, 0x00, 0x64, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, + 0x52, 0x00, 0x65, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, 0x59, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x2d, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6d, 0x00, + 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x2b, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x2d, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, 0x2d, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x2a, 0x4a, 0x69, + 0x6e, 0x67, 0x6f, 0x2d, 0x6b, 0x65, 0x69, 0x75, + 0x6e, 0x20, 0x28, 0x37, 0x36, 0x37, 0x2d, 0x37, + 0x37, 0x30, 0x29, 0x1d, 0x48, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x38, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x1f, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x2d, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x1f, 0x44, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1d, 0x4a, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x4b, + 0x00, 0x61, 0x00, 0x6a, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1f, 0x53, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x20, 0x54, 0x65, 0x6e, 0x2d, 0x61, 0x6e, + 0x20, 0x28, 0x38, 0x35, 0x37, 0x2d, 0x38, 0x35, + 0x39, 0x29, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x21, 0x47, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x61, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x1f, 0x45, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, + 0x4a, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1b, + 0x4c, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, + 0x41, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x1f, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, 0x45, + 0x00, 0x69, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, + 0x73, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x69, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x27, 0x4a, 0x00, 0x69, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x29, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4c, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x61, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x25, 0x4a, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x24, 0x54, 0x65, + 0x6e, 0x2d, 0x65, 0x69, 0x20, 0x28, 0x31, 0x31, + 0x31, 0x30, 0x2d, 0x31, 0x31, 0x31, 0x33, 0x29, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x21, 0x48, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x44, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x48, 0x00, 0x65, 0x00, 0x69, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x27, 0x45, 0x00, 0x69, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1f, 0x4c, 0x01, 0x68, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x61, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x41, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x4a, 0x00, 0x69, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x59, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, + 0x00, 0x75, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x29, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, + 0x6e, 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x4d, 0x01, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x27, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x75, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x29, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, 0x29, + 0x52, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x45, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x4c, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x61, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6d, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x74, 0x00, 0x73, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x48, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, + 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x27, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x21, 0x4c, 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x21, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, + 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x27, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, + 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x72, 0x00, 0x65, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x62, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x27, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4d, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x02, 0x54, 0x02, 0x53, 0x19, + 0x27, 0x59, 0x16, 0x53, 0x20, 0x00, 0x28, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x19, 0x7d, 0x76, 0xc9, 0x96, 0x20, 0x00, 0x28, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x36, 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x19, 0x7d, 0x76, 0xe4, 0x51, 0x20, 0x00, + 0x28, 0x00, 0x36, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x19, 0x31, 0x67, 0x1f, 0x9e, 0x20, + 0x00, 0x28, 0x00, 0x36, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x19, 0x27, 0x59, 0x9d, 0x5b, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x19, 0x86, 0x5e, 0x91, + 0x4e, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x19, 0x8c, 0x54, + 0xdc, 0x94, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, 0x19, 0x75, + 0x70, 0x9f, 0x9f, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x19, + 0x7b, 0x51, 0x01, 0x80, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x19, 0x5e, 0x79, 0x9f, 0x9f, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x19, 0x29, 0x59, 0x73, 0x5e, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x1d, 0x29, 0x59, 0x73, 0x5e, 0x1f, + 0x61, 0x9d, 0x5b, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1d, + 0x29, 0x59, 0x73, 0x5e, 0xdc, 0x80, 0x9d, 0x5b, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x37, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x1d, 0x29, 0x59, 0x73, + 0x5e, 0x9d, 0x5b, 0x57, 0x5b, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x1d, 0x29, 0x59, 0x73, 0x5e, 0x5e, 0x79, + 0xa4, 0x62, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, 0x5e, + 0x79, 0xa4, 0x62, 0x6f, 0x66, 0x91, 0x4e, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x19, 0x9d, 0x5b, 0x9f, 0x9f, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x37, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x19, 0x29, 0x59, 0x94, + 0x5e, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x37, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x19, 0xf6, 0x5e, + 0x86, 0x53, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x19, 0x27, + 0x59, 0x0c, 0x54, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, 0x19, + 0x18, 0x5f, 0xc1, 0x4e, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x19, 0x29, 0x59, 0x7f, 0x95, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x19, 0x7f, 0x62, 0x8c, 0x54, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x19, 0x09, 0x56, 0x65, 0x79, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x19, 0xc1, 0x4e, 0xff, 0x5b, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x19, 0x50, 0x9f, 0x61, + 0x88, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x19, 0x29, 0x59, + 0x89, 0x5b, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, 0x19, 0x1e, + 0x8d, 0xc2, 0x89, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x19, + 0x43, 0x51, 0x86, 0x5e, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x19, 0xc1, 0x4e, 0x8c, 0x54, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x19, 0xbd, 0x5b, 0x73, 0x5e, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x19, 0x0c, 0x66, 0xf0, 0x6c, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x19, 0xf6, 0x5e, 0x9c, 0x55, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x19, 0xf6, 0x5e, 0x7f, + 0x95, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x19, 0x7f, 0x62, + 0x73, 0x5e, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, 0x19, 0x29, + 0x59, 0x86, 0x5e, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, 0x19, + 0x29, 0x59, 0x86, 0x53, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x19, 0x29, 0x59, 0xb7, 0x5f, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x19, 0x94, 0x5e, 0x8c, 0x54, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x19, 0xb7, 0x5e, 0xdd, 0x4f, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x19, 0x89, 0x5b, 0x8c, 0x54, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x19, 0x29, 0x59, 0x84, + 0x79, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x19, 0x29, 0x59, + 0xf6, 0x5e, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x29, 0x00, 0x19, 0x1e, + 0x8d, 0x43, 0x51, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, 0x19, + 0x29, 0x59, 0x43, 0x51, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x19, 0x38, 0x6c, 0xc2, 0x89, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x19, 0xbd, 0x5b, 0x8c, 0x54, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x19, 0x38, 0x6c, 0xf6, 0x5e, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x19, 0x38, 0x6c, 0x5a, 0x79, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x19, 0x63, 0x6b, 0x86, + 0x53, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x19, 0x7f, 0x95, + 0xb7, 0x5f, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1b, 0x7f, + 0x95, 0xdd, 0x4f, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1d, 0xbd, 0x5b, 0x18, 0x5f, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1d, 0x7f, + 0x95, 0x8c, 0x54, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x1d, 0xbd, 0x5b, 0xc1, 0x4e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1d, 0xbb, 0x6c, 0x89, 0x5b, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0x07, 0x4e, + 0xff, 0x5b, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x1d, 0x7f, 0x95, 0x43, 0x51, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, + 0x7f, 0x95, 0x86, 0x53, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x1d, 0x7f, 0x95, 0x45, + 0x4e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1d, 0xbd, 0x5b, 0xb7, 0x5f, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1d, 0x38, + 0x6c, 0x7f, 0x62, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x1d, 0x29, 0x59, 0x9c, 0x55, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x1d, 0xb7, 0x5e, 0x73, 0x5e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x1d, 0xbb, 0x6c, + 0x86, 0x53, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x1d, 0xf6, 0x5e, 0x45, 0x4e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, + 0x7f, 0x62, 0xdd, 0x4f, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x1d, 0x63, 0x6b, 0x86, + 0x53, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1d, 0x38, 0x6c, 0xdd, 0x4f, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0x94, + 0x5e, 0xb7, 0x5f, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x1d, 0xbd, 0x5b, 0xbb, 0x6c, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1d, 0x09, 0x56, 0xdd, 0x4f, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x1d, 0x38, 0x6c, + 0x7f, 0x95, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x1d, 0x7f, 0x62, 0xb7, 0x5f, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1d, + 0xb7, 0x5e, 0x8c, 0x54, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1d, 0x7f, 0x95, 0xbb, + 0x6c, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x1d, 0x09, 0x56, 0x7f, 0x62, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x29, + 0x59, 0xc1, 0x4e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x1d, 0x29, 0x59, 0x38, 0x6c, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x1d, 0x38, 0x6c, 0x45, 0x4e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x43, 0x51, + 0x38, 0x6c, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x1d, 0xdd, 0x4f, 0x89, 0x5b, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, + 0x29, 0x59, 0xbb, 0x6c, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x1d, 0x27, 0x59, 0xbb, + 0x6c, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1d, 0x29, 0x59, 0x7f, 0x62, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1d, 0x7f, + 0x95, 0x7f, 0x62, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x1d, 0xdd, 0x4f, 0xf6, 0x5e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1d, 0x38, 0x6c, 0xbb, 0x6c, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x1d, 0xb7, 0x5e, + 0xbb, 0x6c, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1d, 0x29, 0x59, 0x7b, 0x51, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1d, + 0x45, 0x4e, 0x89, 0x5b, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1d, 0xc1, 0x4e, 0x73, + 0x5e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1d, 0x45, 0x4e, 0xff, 0x5b, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1d, 0xdd, + 0x4f, 0x43, 0x51, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1d, 0x73, 0x5e, 0xbb, 0x6c, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x1d, 0x38, 0x6c, 0x86, 0x53, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, 0x94, 0x5e, + 0xdd, 0x4f, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x1d, 0x7f, 0x95, 0xbd, 0x5b, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1d, + 0x38, 0x6c, 0x07, 0x4e, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x1d, 0xc1, 0x4e, 0x89, + 0x5b, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x1d, 0x09, 0x56, 0x94, 0x5e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, 0x7f, + 0x62, 0x89, 0x5b, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x1d, 0x89, 0x5b, 0x43, 0x51, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x1d, 0xbb, 0x6c, 0x7f, 0x62, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, 0x7b, 0x51, + 0x8c, 0x54, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x1d, 0xff, 0x5b, 0x38, 0x6c, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, + 0x43, 0x51, 0x86, 0x53, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x1d, 0x87, 0x65, 0xbb, + 0x6c, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x1d, 0xfa, 0x5e, 0x45, 0x4e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1d, 0x63, + 0x6b, 0xbb, 0x6c, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1d, 0xfa, 0x5e, 0xc1, 0x4e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1d, 0x43, 0x51, 0x45, 0x4e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x1d, 0xfa, 0x5e, + 0x38, 0x6c, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x1d, 0x7f, 0x62, 0x43, 0x51, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, + 0xfa, 0x5e, 0x86, 0x53, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x1d, 0xfa, 0x5e, 0xdd, + 0x4f, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x1d, 0x7f, 0x62, 0x45, 0x4e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1d, 0x1e, + 0x8d, 0x94, 0x5e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1d, 0x43, 0x51, 0xc1, 0x4e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x1d, 0x09, 0x56, 0x84, 0x79, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, 0x89, 0x5b, + 0x1e, 0x8d, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x1d, 0xbd, 0x5b, 0x9c, 0x55, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1d, + 0x1e, 0x8d, 0x38, 0x6c, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x1d, 0x29, 0x59, 0x8f, + 0x79, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1d, 0x87, 0x65, 0x86, 0x53, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1d, 0x09, + 0x56, 0x6f, 0x79, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x1d, 0x86, 0x53, 0xc1, 0x4e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x1d, 0xf6, 0x5e, 0x94, 0x5e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x1d, 0xc1, 0x4e, + 0xbb, 0x6c, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x1d, 0xbd, 0x5b, 0x43, 0x51, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, + 0x9d, 0x5b, 0xbb, 0x6c, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x1d, 0xfa, 0x5e, 0x7f, + 0x95, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x1d, 0xb7, 0x5e, 0x43, 0x51, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, 0x63, + 0x6b, 0x09, 0x56, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1d, 0x63, 0x6b, 0x43, 0x51, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x1d, 0x87, 0x65, 0x94, 0x5e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, 0x18, 0x5f, + 0x7f, 0x95, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1d, 0x87, 0x65, 0x38, 0x6c, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1d, + 0xfa, 0x5e, 0xbb, 0x6c, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x1d, 0x18, 0x5f, 0x89, + 0x5b, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x1d, 0x63, 0x6b, 0x94, 0x5e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x33, 0x00, 0x29, 0x00, 0x1d, 0x38, + 0x6c, 0xc1, 0x4e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1d, 0x63, 0x6b, 0x89, 0x5b, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x1d, 0x72, 0x5e, 0x43, 0x51, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x1d, 0x09, 0x56, + 0x43, 0x51, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x1d, 0xb7, 0x5f, 0xbb, 0x6c, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, + 0xf6, 0x5e, 0x86, 0x5e, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1d, 0x94, 0x5e, 0x7f, + 0x95, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x1d, 0x63, 0x6b, 0x8c, 0x54, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, 0x87, + 0x65, 0xdd, 0x4f, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1d, 0x43, 0x51, 0x94, 0x5e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1d, 0x43, 0x51, 0xa8, 0x4e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0x63, 0x6b, + 0x2d, 0x4e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x1d, 0x09, 0x56, 0x86, 0x53, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1d, + 0x43, 0x51, 0xb7, 0x5f, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1d, 0x43, 0x51, 0x18, + 0x5f, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1d, 0xfa, 0x5e, 0x66, 0x6b, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1d, 0xf6, + 0x5e, 0x43, 0x51, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x1d, 0x74, 0x51, 0xfd, 0x56, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x1d, 0x63, 0x6b, 0x73, 0x5e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x1d, 0xfa, 0x5e, + 0xb7, 0x5f, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x1d, 0x87, 0x65, 0x2d, 0x4e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1d, + 0x29, 0x59, 0x88, 0x63, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x1d, 0xb7, 0x5e, 0x86, + 0x53, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1d, 0x18, 0x5f, 0x8c, 0x54, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0x43, + 0x51, 0x2d, 0x4e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x1d, 0xf3, 0x81, 0xb7, 0x5f, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x1d, 0x09, 0x56, 0x86, 0x5e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x1d, 0xb7, 0x5e, + 0x94, 0x5e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x1d, 0x0e, 0x66, 0xb7, 0x5f, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, + 0x94, 0x5e, 0x38, 0x6c, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x1d, 0x63, 0x6b, 0x7f, + 0x95, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x1d, 0x38, 0x6c, 0xab, 0x4e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, 0x09, + 0x56, 0x09, 0x54, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1d, 0x87, 0x65, 0x89, 0x5b, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x1d, 0x9d, 0x5b, 0xb7, 0x5f, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x1d, 0xab, 0x4e, + 0xb7, 0x5f, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x1d, 0xb7, 0x5e, 0x63, 0x6b, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, + 0x7f, 0x95, 0x84, 0x79, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x1d, 0xbd, 0x5b, 0x63, + 0x6b, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x1d, 0x87, 0x65, 0x63, 0x6b, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, 0x94, + 0x5e, 0xc1, 0x4e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1d, 0x87, 0x65, 0x0e, 0x66, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x1d, 0x7f, 0x95, 0xab, 0x4e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x1d, 0xf6, 0x5e, + 0xb7, 0x5f, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x1d, 0x0e, 0x66, 0x94, 0x5e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, + 0x87, 0x65, 0x9f, 0x9f, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1d, 0x38, 0x6c, 0x63, + 0x6b, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1d, 0x27, 0x59, 0x38, 0x6c, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0xab, + 0x4e, 0x84, 0x79, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x1d, 0x29, 0x59, 0x87, 0x65, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x1d, 0x18, 0x5f, 0xbb, 0x6c, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x38, 0x6c, + 0x84, 0x79, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x1d, 0x43, 0x51, 0x9f, 0x9f, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x1d, + 0x29, 0x59, 0x63, 0x6b, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x1d, 0x87, 0x65, 0x84, + 0x79, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x1d, 0x86, 0x5e, 0x7f, 0x95, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1d, 0x43, + 0x51, 0x8c, 0x54, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1d, 0xbd, 0x5b, 0x38, 0x6c, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1d, 0x63, 0x6b, 0xdd, 0x4f, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x86, 0x5e, + 0x89, 0x5b, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x1d, 0x7f, 0x62, 0x94, 0x5e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1d, + 0x0e, 0x66, 0x86, 0x53, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x1d, 0x07, 0x4e, 0xbb, + 0x6c, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1d, 0xbd, 0x5b, 0x87, 0x65, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x1d, 0xf6, + 0x5e, 0x9d, 0x5b, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1d, 0x29, 0x59, 0x8c, 0x54, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1d, 0x1e, 0x8d, 0xab, 0x4e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x43, 0x51, + 0x84, 0x79, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1d, 0x9d, 0x5b, 0x38, 0x6c, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, + 0x63, 0x6b, 0xb7, 0x5f, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x1d, 0xab, 0x4e, 0xdd, + 0x4f, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x1d, 0x43, 0x51, 0x87, 0x65, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, 0xbd, + 0x5b, 0xdd, 0x4f, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1d, 0xf6, 0x5e, 0xab, 0x4e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x1d, 0xbd, 0x5b, 0xf6, 0x5e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, 0x9d, 0x5b, + 0x86, 0x53, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1d, 0x0e, 0x66, 0x8c, 0x54, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1d, + 0x89, 0x5b, 0x38, 0x6c, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1d, 0x29, 0x59, 0x0e, + 0x66, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x1d, 0xbd, 0x5b, 0x3f, 0x65, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, 0xab, + 0x4e, 0x8c, 0x54, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1d, 0x87, 0x65, 0x16, 0x53, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x1d, 0x87, 0x65, 0x3f, 0x65, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x1d, 0x29, 0x59, + 0xdd, 0x4f, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1d, 0x18, 0x5f, 0x16, 0x53, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, + 0x09, 0x56, 0x38, 0x6c, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1d, 0x89, 0x5b, 0x3f, + 0x65, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x1d, 0x07, 0x4e, 0xf6, 0x5e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, 0x87, + 0x65, 0x45, 0x4e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1d, 0x43, 0x51, 0xbb, 0x6c, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x1d, 0x86, 0x5e, 0x94, 0x5e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x05, 0x0e, 0x66, + 0xbb, 0x6c, 0x05, 0x27, 0x59, 0x63, 0x6b, 0x05, + 0x2d, 0x66, 0x8c, 0x54, 0x05, 0x73, 0x5e, 0x10, + 0x62, 0x07, 0xe2, 0x6c, 0xaf, 0x65, 0x86, 0x53, + 0x07, 0x11, 0x6c, 0xfd, 0x56, 0x4d, 0x52, 0x05, + 0x11, 0x6c, 0xfd, 0x56, 0x12, 0x63, 0x61, 0x6c, + 0x65, 0x6e, 0x64, 0x61, 0x72, 0x73, 0x08, 0x64, + 0x61, 0x74, 0x65, 0x08, 0x6c, 0x61, 0x74, 0x6e, + 0x04, 0x6e, 0x75, 0x10, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, + 0x74, 0x65, 0x72, 0x6e, 0x26, 0x7b, 0x6d, 0x69, + 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0x1e, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, + 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, + 0x0e, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, + 0x24, 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x79, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0x3a, 0x7b, 0x6d, 0x69, 0x6e, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, + 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x79, 0x2a, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0x7b, 0x70, 0x65, 0x72, 0x63, + 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, + 0x40, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0x7b, 0x70, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, + 0x7d, 0x0e, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, + 0x74, 0x10, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, + 0x6e, 0x73, 0x02, 0x2e, 0x02, 0x2c, 0x0a, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x06, 0x4e, 0x61, 0x4e, + 0x06, 0x6e, 0x61, 0x6e, 0x02, 0x2b, 0x10, 0x70, + 0x6c, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, + 0x2d, 0x12, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, + 0x69, 0x67, 0x6e, 0x02, 0x25, 0x16, 0x70, 0x65, + 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, + 0x6e, 0x03, 0x1e, 0x22, 0x10, 0x69, 0x6e, 0x66, + 0x69, 0x6e, 0x69, 0x74, 0x79, 0x0e, 0x68, 0x61, + 0x6e, 0x69, 0x64, 0x65, 0x63, 0x0e, 0x73, 0x79, + 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x06, 0x41, 0x55, + 0x24, 0x06, 0x41, 0x55, 0x44, 0x04, 0x52, 0x24, + 0x06, 0x42, 0x52, 0x4c, 0x06, 0x43, 0x41, 0x24, + 0x06, 0x43, 0x41, 0x44, 0x03, 0xe5, 0xff, 0x06, + 0x43, 0x4e, 0x59, 0x03, 0xac, 0x20, 0x06, 0x45, + 0x55, 0x52, 0x02, 0xa3, 0x06, 0x47, 0x42, 0x50, + 0x06, 0x48, 0x4b, 0x24, 0x06, 0x48, 0x4b, 0x44, + 0x06, 0x49, 0x4c, 0x53, 0x06, 0x49, 0x4c, 0x52, + 0x03, 0xaa, 0x20, 0x03, 0xb9, 0x20, 0x06, 0x49, + 0x4e, 0x52, 0x06, 0x4a, 0x50, 0xa5, 0x06, 0x4a, + 0x50, 0x59, 0x03, 0xe6, 0xff, 0x06, 0x4b, 0x52, + 0x57, 0x06, 0x4d, 0x58, 0x24, 0x06, 0x4d, 0x58, + 0x4e, 0x06, 0x4e, 0x5a, 0x24, 0x06, 0x4e, 0x5a, + 0x44, 0x06, 0x4e, 0x54, 0x24, 0x06, 0x54, 0x57, + 0x44, 0x06, 0x55, 0x53, 0x24, 0x06, 0x55, 0x53, + 0x44, 0x03, 0xab, 0x20, 0x06, 0x56, 0x4e, 0x44, + 0x08, 0x46, 0x43, 0x46, 0x41, 0x06, 0x58, 0x41, + 0x46, 0x06, 0x45, 0x43, 0x24, 0x06, 0x58, 0x43, + 0x44, 0x06, 0x43, 0x46, 0x41, 0x06, 0x58, 0x4f, + 0x46, 0x08, 0x43, 0x46, 0x50, 0x46, 0x06, 0x58, + 0x50, 0x46, 0x14, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x63, 0x69, 0x65, 0x73, 0x62, 0x6e, 0x6f, + 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2f, + 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, + 0x61, 0x74, 0x61, 0x2f, 0x6a, 0x73, 0x6f, 0x6e, + 0x70, 0x2f, 0x7a, 0x68, 0x2d, 0x48, 0x61, 0x6e, + 0x73, 0x2d, 0x43, 0x4e, 0x2e, 0x6a, 0x73, 0x0d, + 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, + 0x27, 0x00, 0xa1, 0x01, 0xf6, 0x6a, 0x01, 0xa0, + 0x01, 0x00, 0x00, 0x00, 0x39, 0xd0, 0x00, 0x00, + 0x00, 0x43, 0xd1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd2, 0x00, 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd4, 0x00, 0x00, 0x00, 0x04, + 0xd5, 0x00, 0x00, 0x00, 0x04, 0xd6, 0x00, 0x00, + 0x00, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x04, 0xd8, + 0x00, 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, 0x00, + 0x04, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdb, 0x00, + 0x00, 0x00, 0x04, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0xdd, 0x00, 0x00, 0x00, 0x04, 0xde, 0x00, 0x00, + 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, 0x04, 0xe0, + 0x00, 0x00, 0x00, 0x04, 0xe1, 0x00, 0x00, 0x00, + 0x04, 0xe2, 0x00, 0x00, 0x00, 0x26, 0x0f, 0x00, + 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x0a, 0x4d, 0xe4, + 0x00, 0x00, 0x00, 0x0a, 0x4d, 0xe5, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, + 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x04, 0xe6, + 0x00, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x00, + 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0xec, 0x00, 0x00, 0x00, 0x04, 0xed, 0x00, + 0x00, 0x00, 0x4d, 0xee, 0x00, 0x00, 0x00, 0x04, + 0xef, 0x00, 0x00, 0x00, 0x4d, 0xf0, 0x00, 0x00, + 0x00, 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, 0xf2, + 0x00, 0x00, 0x00, 0x04, 0xf3, 0x00, 0x00, 0x00, + 0x4d, 0xf4, 0x00, 0x00, 0x00, 0x04, 0xf5, 0x00, + 0x00, 0x00, 0x4d, 0xf6, 0x00, 0x00, 0x00, 0x04, + 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xf8, 0x00, 0x00, + 0x00, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0xfa, + 0x00, 0x00, 0x00, 0x04, 0xfb, 0x00, 0x00, 0x00, + 0x4d, 0xfc, 0x00, 0x00, 0x00, 0x04, 0xfd, 0x00, + 0x00, 0x00, 0x4d, 0xfe, 0x00, 0x00, 0x00, 0x04, + 0xff, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x01, 0x00, + 0x00, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0x02, + 0x01, 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, 0x00, + 0x4d, 0x04, 0x01, 0x00, 0x00, 0x04, 0x05, 0x01, + 0x00, 0x00, 0x4d, 0x06, 0x01, 0x00, 0x00, 0x04, + 0x07, 0x01, 0x00, 0x00, 0x4d, 0x08, 0x01, 0x00, + 0x00, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0x0a, + 0x01, 0x00, 0x00, 0x04, 0x0b, 0x01, 0x00, 0x00, + 0x4d, 0x0c, 0x01, 0x00, 0x00, 0x04, 0x0d, 0x01, + 0x00, 0x00, 0x4d, 0x0e, 0x01, 0x00, 0x00, 0x04, + 0x0f, 0x01, 0x00, 0x00, 0x4d, 0x10, 0x01, 0x00, + 0x00, 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, 0x12, + 0x01, 0x00, 0x00, 0x04, 0x13, 0x01, 0x00, 0x00, + 0x4d, 0x14, 0x01, 0x00, 0x00, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x4d, 0x16, 0x01, 0x00, 0x00, 0x04, + 0x17, 0x01, 0x00, 0x00, 0x4d, 0x18, 0x01, 0x00, + 0x00, 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, 0x1a, + 0x01, 0x00, 0x00, 0x04, 0x1b, 0x01, 0x00, 0x00, + 0x4d, 0x1c, 0x01, 0x00, 0x00, 0x04, 0x1d, 0x01, + 0x00, 0x00, 0x4d, 0x1e, 0x01, 0x00, 0x00, 0x04, + 0x1f, 0x01, 0x00, 0x00, 0x4d, 0x20, 0x01, 0x00, + 0x00, 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, 0x22, + 0x01, 0x00, 0x00, 0x04, 0x1f, 0x01, 0x00, 0x00, + 0x4d, 0x23, 0x01, 0x00, 0x00, 0x04, 0x24, 0x01, + 0x00, 0x00, 0x4d, 0x25, 0x01, 0x00, 0x00, 0x04, + 0x26, 0x01, 0x00, 0x00, 0x4d, 0x27, 0x01, 0x00, + 0x00, 0x04, 0x28, 0x01, 0x00, 0x00, 0x4d, 0x29, + 0x01, 0x00, 0x00, 0x04, 0x2a, 0x01, 0x00, 0x00, + 0x4d, 0x2b, 0x01, 0x00, 0x00, 0x04, 0x2c, 0x01, + 0x00, 0x00, 0x4d, 0x2d, 0x01, 0x00, 0x00, 0x04, + 0x28, 0x01, 0x00, 0x00, 0x4d, 0x2e, 0x01, 0x00, + 0x00, 0x04, 0x28, 0x01, 0x00, 0x00, 0x4d, 0x2f, + 0x01, 0x00, 0x00, 0x04, 0x30, 0x01, 0x00, 0x00, + 0x4d, 0x31, 0x01, 0x00, 0x00, 0x04, 0x32, 0x01, + 0x00, 0x00, 0x4d, 0x33, 0x01, 0x00, 0x00, 0x04, + 0x28, 0x01, 0x00, 0x00, 0x4d, 0x34, 0x01, 0x00, + 0x00, 0x04, 0x35, 0x01, 0x00, 0x00, 0x4d, 0x36, + 0x01, 0x00, 0x00, 0x04, 0x35, 0x01, 0x00, 0x00, + 0x4d, 0x37, 0x01, 0x00, 0x00, 0x4d, 0x38, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x39, 0x01, 0x00, 0x00, + 0x4d, 0x3a, 0x01, 0x00, 0x00, 0x04, 0x30, 0x01, + 0x00, 0x00, 0x4d, 0x3b, 0x01, 0x00, 0x00, 0x04, + 0x30, 0x01, 0x00, 0x00, 0x4d, 0x31, 0x01, 0x00, + 0x00, 0x04, 0x2a, 0x01, 0x00, 0x00, 0x4d, 0x2b, + 0x01, 0x00, 0x00, 0x4d, 0x3c, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x3d, 0x01, 0x00, 0x00, 0x4d, 0x3e, + 0x01, 0x00, 0x00, 0x04, 0x3f, 0x01, 0x00, 0x00, + 0x4d, 0x40, 0x01, 0x00, 0x00, 0x04, 0x09, 0x01, + 0x00, 0x00, 0x4d, 0x0a, 0x01, 0x00, 0x00, 0x04, + 0x05, 0x01, 0x00, 0x00, 0x4d, 0x06, 0x01, 0x00, + 0x00, 0x4d, 0x41, 0x01, 0x00, 0x00, 0x4d, 0x42, + 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x0b, 0xbe, 0x00, + 0xbe, 0x01, 0xbe, 0x02, 0xbe, 0x03, 0xbe, 0x04, + 0xbe, 0x05, 0xbe, 0x06, 0xbe, 0x07, 0xbe, 0x08, + 0xbe, 0x09, 0xbe, 0x0a, 0xbe, 0x0b, 0x26, 0x0c, + 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, 0x44, + 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, + 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x5c, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x72, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, + 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, + 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, + 0x80, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0x43, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x82, + 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, + 0x83, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x5c, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x75, 0x01, 0x00, 0x00, 0x4d, 0x76, + 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, + 0x4d, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, + 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x0c, 0xbe, 0x0d, 0xbe, 0x0e, 0xbe, + 0x0f, 0xbe, 0x10, 0xbe, 0x11, 0xbe, 0x12, 0xbe, + 0x13, 0xbe, 0x14, 0xbe, 0x15, 0xbe, 0x16, 0xbe, + 0x17, 0xbe, 0x18, 0x26, 0x0d, 0x00, 0x4d, 0x43, + 0x01, 0x00, 0x00, 0x04, 0x44, 0x01, 0x00, 0x00, + 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x84, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x85, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x5c, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0x43, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x86, + 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, + 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, + 0xd7, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x43, 0x01, + 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, + 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x43, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, + 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x19, 0xbe, 0x1a, 0xbe, 0x1b, 0xbe, 0x1c, 0xbe, + 0x1d, 0xbe, 0x1e, 0xbe, 0x1f, 0xbe, 0x20, 0xbe, + 0x21, 0xbe, 0x22, 0xbe, 0x23, 0xbe, 0x24, 0xbe, + 0x25, 0x26, 0x0d, 0x00, 0x4d, 0x43, 0x01, 0x00, + 0x00, 0x04, 0x44, 0x01, 0x00, 0x00, 0x04, 0x45, + 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x85, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x43, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x43, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x74, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, + 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x26, 0xbe, 0x27, + 0xbe, 0x28, 0xbe, 0x29, 0xbe, 0x2a, 0xbe, 0x2b, + 0xbe, 0x2c, 0xbe, 0x2d, 0xbe, 0x2e, 0xbe, 0x2f, + 0xbe, 0x30, 0xbe, 0x31, 0xbe, 0x32, 0x26, 0x0d, + 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, 0x44, + 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, + 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x43, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x72, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x86, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x43, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x86, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x75, 0x01, 0x00, 0x00, 0x4d, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, + 0x01, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x33, 0xbe, 0x34, 0xbe, 0x35, + 0xbe, 0x36, 0xbe, 0x37, 0xbe, 0x38, 0xbe, 0x39, + 0xbe, 0x3a, 0xbe, 0x3b, 0xbe, 0x3c, 0xbe, 0x3d, + 0xbe, 0x3e, 0x26, 0x0c, 0x00, 0x4d, 0x43, 0x01, + 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x04, + 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, + 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, + 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, + 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, + 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, + 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, + 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, + 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, + 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, + 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, + 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x43, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x43, 0x01, 0x00, + 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x87, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, + 0x04, 0x87, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x4d, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, + 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x4d, + 0x79, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x3f, 0xbe, 0x40, 0xbe, + 0x41, 0xbe, 0x42, 0xbe, 0x43, 0xbe, 0x44, 0xbe, + 0x45, 0xbe, 0x46, 0xbe, 0x47, 0xbe, 0x48, 0xbe, + 0x49, 0xbe, 0x4a, 0x26, 0x0c, 0x00, 0x4d, 0x43, + 0x01, 0x00, 0x00, 0x04, 0x44, 0x01, 0x00, 0x00, + 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x43, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, + 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, + 0x97, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, + 0x43, 0x01, 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, + 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, + 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, + 0x26, 0x04, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, + 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, + 0x97, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x75, 0x01, 0x00, 0x00, 0x4d, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, + 0x01, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x4b, 0xbe, 0x4c, 0xbe, 0x4d, + 0xbe, 0x4e, 0xbe, 0x4f, 0xbe, 0x50, 0xbe, 0x51, + 0xbe, 0x52, 0xbe, 0x53, 0xbe, 0x54, 0xbe, 0x55, + 0xbe, 0x56, 0xbe, 0x57, 0xbe, 0x58, 0x26, 0x0e, + 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, 0x44, + 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, + 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x04, + 0x98, 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, + 0x00, 0x00, 0x26, 0x0e, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x43, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x9a, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x43, 0x01, 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x74, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, + 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, + 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x59, 0xbe, 0x5a, + 0xbe, 0x5b, 0xbe, 0x5c, 0xbe, 0x5d, 0xbe, 0x5e, + 0xbe, 0x5f, 0xbe, 0x60, 0xbe, 0x61, 0xbe, 0x62, + 0xbe, 0x63, 0xbe, 0x64, 0x26, 0x0c, 0x00, 0x4d, + 0x43, 0x01, 0x00, 0x00, 0x04, 0x44, 0x01, 0x00, + 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, 0x46, + 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x5c, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, 0x9b, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, + 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, + 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x65, + 0xbe, 0x66, 0xbe, 0x67, 0xbe, 0x68, 0xbe, 0x69, + 0xbe, 0x6a, 0xbe, 0x6b, 0xbe, 0x6c, 0xbe, 0x6d, + 0xbe, 0x6e, 0xbe, 0x6f, 0xbe, 0x70, 0x26, 0x0c, + 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, 0x44, + 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, + 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x5c, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x72, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x9c, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, + 0x04, 0x9c, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x9c, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, + 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x71, 0xbe, 0x72, 0xbe, 0x73, 0xbe, 0x74, + 0xbe, 0x75, 0xbe, 0x76, 0xbe, 0x77, 0xbe, 0x78, + 0xbe, 0x79, 0xbe, 0x7a, 0xbe, 0x7b, 0xbe, 0x7c, + 0x26, 0x0c, 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, + 0x04, 0x44, 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, + 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x43, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x72, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x9c, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x43, 0x01, + 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x9c, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x75, 0x01, 0x00, 0x00, 0x4d, + 0x76, 0x01, 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, + 0x00, 0x4d, 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, + 0x01, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x7d, 0xbe, 0x7e, 0xbe, 0x7f, + 0xbe, 0x80, 0xbe, 0x81, 0xbe, 0x82, 0xbe, 0x83, + 0xbe, 0x84, 0xbe, 0x85, 0xbe, 0x86, 0xbe, 0x87, + 0xbe, 0x88, 0x26, 0x0c, 0x00, 0x4d, 0x43, 0x01, + 0x00, 0x00, 0x04, 0x44, 0x01, 0x00, 0x00, 0x04, + 0x45, 0x01, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x43, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x72, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, + 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x04, 0xa0, + 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, + 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, 0xa3, 0x01, + 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, 0x00, 0x04, + 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, 0x01, 0x00, + 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, 0x04, 0xa8, + 0x01, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, 0x00, + 0x04, 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, + 0x00, 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, + 0xad, 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, + 0x00, 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, + 0x01, 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, + 0x04, 0xb2, 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, + 0x00, 0x00, 0x04, 0xb4, 0x01, 0x00, 0x00, 0x04, + 0xb5, 0x01, 0x00, 0x00, 0x04, 0xb6, 0x01, 0x00, + 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, + 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, + 0x04, 0xba, 0x01, 0x00, 0x00, 0x04, 0xbb, 0x01, + 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, 0x26, + 0x20, 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, 0x4d, + 0x20, 0x00, 0x00, 0x80, 0x04, 0xbe, 0x01, 0x00, + 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0xbf, + 0x01, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, + 0x04, 0xc0, 0x01, 0x00, 0x00, 0x4d, 0x23, 0x00, + 0x00, 0x80, 0x04, 0xc1, 0x01, 0x00, 0x00, 0x4d, + 0x24, 0x00, 0x00, 0x80, 0x04, 0xc2, 0x01, 0x00, + 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0xc3, + 0x01, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, + 0x04, 0xc4, 0x01, 0x00, 0x00, 0x4d, 0x27, 0x00, + 0x00, 0x80, 0x04, 0xc5, 0x01, 0x00, 0x00, 0x4d, + 0x28, 0x00, 0x00, 0x80, 0x04, 0xc6, 0x01, 0x00, + 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0xc7, + 0x01, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, + 0x04, 0xc8, 0x01, 0x00, 0x00, 0x4d, 0x2b, 0x00, + 0x00, 0x80, 0x04, 0xc9, 0x01, 0x00, 0x00, 0x4d, + 0x2c, 0x00, 0x00, 0x80, 0x04, 0xca, 0x01, 0x00, + 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0xcb, + 0x01, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, + 0x04, 0xcc, 0x01, 0x00, 0x00, 0x4d, 0x2f, 0x00, + 0x00, 0x80, 0x04, 0xcd, 0x01, 0x00, 0x00, 0x4d, + 0x30, 0x00, 0x00, 0x80, 0x04, 0xce, 0x01, 0x00, + 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0xcf, + 0x01, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, + 0x04, 0xd0, 0x01, 0x00, 0x00, 0x4d, 0x33, 0x00, + 0x00, 0x80, 0x04, 0xd1, 0x01, 0x00, 0x00, 0x4d, + 0x34, 0x00, 0x00, 0x80, 0x04, 0xd2, 0x01, 0x00, + 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0xd3, + 0x01, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, + 0x04, 0xd4, 0x01, 0x00, 0x00, 0x4d, 0x37, 0x00, + 0x00, 0x80, 0x04, 0xd5, 0x01, 0x00, 0x00, 0x4d, + 0x38, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x01, 0x00, + 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0xd7, + 0x01, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, + 0x04, 0xd8, 0x01, 0x00, 0x00, 0x4d, 0x3b, 0x00, + 0x00, 0x80, 0x04, 0xd9, 0x01, 0x00, 0x00, 0x4d, + 0x3c, 0x00, 0x00, 0x80, 0x04, 0xda, 0x01, 0x00, + 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0xdb, + 0x01, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, + 0x04, 0xdc, 0x01, 0x00, 0x00, 0x4d, 0x3f, 0x00, + 0x00, 0x80, 0x04, 0xdd, 0x01, 0x00, 0x00, 0x4d, + 0x40, 0x00, 0x00, 0x80, 0x04, 0xde, 0x01, 0x00, + 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0xdf, + 0x01, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, + 0x04, 0xe0, 0x01, 0x00, 0x00, 0x4d, 0x43, 0x00, + 0x00, 0x80, 0x04, 0xe1, 0x01, 0x00, 0x00, 0x4d, + 0x44, 0x00, 0x00, 0x80, 0x04, 0xe2, 0x01, 0x00, + 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0xe3, + 0x01, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, + 0x04, 0xe4, 0x01, 0x00, 0x00, 0x4d, 0x47, 0x00, + 0x00, 0x80, 0x04, 0xe5, 0x01, 0x00, 0x00, 0x4d, + 0x48, 0x00, 0x00, 0x80, 0x04, 0xe6, 0x01, 0x00, + 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0xe7, + 0x01, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, + 0x04, 0xe8, 0x01, 0x00, 0x00, 0x4d, 0x4b, 0x00, + 0x00, 0x80, 0x04, 0xe9, 0x01, 0x00, 0x00, 0x4d, + 0x4c, 0x00, 0x00, 0x80, 0x04, 0xea, 0x01, 0x00, + 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0xeb, + 0x01, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, + 0x04, 0xec, 0x01, 0x00, 0x00, 0x4d, 0x4f, 0x00, + 0x00, 0x80, 0x04, 0xed, 0x01, 0x00, 0x00, 0x4d, + 0x50, 0x00, 0x00, 0x80, 0x04, 0xee, 0x01, 0x00, + 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0xef, + 0x01, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, + 0x04, 0xf0, 0x01, 0x00, 0x00, 0x4d, 0x53, 0x00, + 0x00, 0x80, 0x04, 0xf1, 0x01, 0x00, 0x00, 0x4d, + 0x54, 0x00, 0x00, 0x80, 0x04, 0xf2, 0x01, 0x00, + 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0xf3, + 0x01, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, + 0x04, 0xf4, 0x01, 0x00, 0x00, 0x4d, 0x57, 0x00, + 0x00, 0x80, 0x04, 0xf5, 0x01, 0x00, 0x00, 0x4d, + 0x58, 0x00, 0x00, 0x80, 0x04, 0xf6, 0x01, 0x00, + 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0xf7, + 0x01, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, + 0x04, 0xf8, 0x01, 0x00, 0x00, 0x4d, 0x5b, 0x00, + 0x00, 0x80, 0x04, 0xf9, 0x01, 0x00, 0x00, 0x4d, + 0x5c, 0x00, 0x00, 0x80, 0x04, 0xfa, 0x01, 0x00, + 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0xfb, + 0x01, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, + 0x04, 0xfc, 0x01, 0x00, 0x00, 0x4d, 0x5f, 0x00, + 0x00, 0x80, 0x04, 0xfd, 0x01, 0x00, 0x00, 0x4d, + 0x60, 0x00, 0x00, 0x80, 0x04, 0xfe, 0x01, 0x00, + 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0xff, + 0x01, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, + 0x04, 0x00, 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, + 0x00, 0x80, 0x04, 0x01, 0x02, 0x00, 0x00, 0x4d, + 0x64, 0x00, 0x00, 0x80, 0x04, 0x02, 0x02, 0x00, + 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0x03, + 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, + 0x04, 0x04, 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, + 0x00, 0x80, 0x04, 0x05, 0x02, 0x00, 0x00, 0x4d, + 0x68, 0x00, 0x00, 0x80, 0x04, 0x06, 0x02, 0x00, + 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0x07, + 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, + 0x04, 0x08, 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, + 0x00, 0x80, 0x04, 0x09, 0x02, 0x00, 0x00, 0x4d, + 0x6c, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x02, 0x00, + 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0x0b, + 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, + 0x04, 0x0c, 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, + 0x00, 0x80, 0x04, 0x0d, 0x02, 0x00, 0x00, 0x4d, + 0x70, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x02, 0x00, + 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0x0f, + 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, + 0x04, 0x10, 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, + 0x00, 0x80, 0x04, 0x11, 0x02, 0x00, 0x00, 0x4d, + 0x74, 0x00, 0x00, 0x80, 0x04, 0x12, 0x02, 0x00, + 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0x13, + 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, + 0x04, 0x14, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, + 0x00, 0x80, 0x04, 0x15, 0x02, 0x00, 0x00, 0x4d, + 0x78, 0x00, 0x00, 0x80, 0x04, 0x16, 0x02, 0x00, + 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x17, + 0x02, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, + 0x04, 0x18, 0x02, 0x00, 0x00, 0x4d, 0x7b, 0x00, + 0x00, 0x80, 0x04, 0x19, 0x02, 0x00, 0x00, 0x4d, + 0x7c, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x02, 0x00, + 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x1b, + 0x02, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, + 0x04, 0x1c, 0x02, 0x00, 0x00, 0x4d, 0x7f, 0x00, + 0x00, 0x80, 0x04, 0x1d, 0x02, 0x00, 0x00, 0x4d, + 0x80, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x02, 0x00, + 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x1f, + 0x02, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, + 0x04, 0x20, 0x02, 0x00, 0x00, 0x4d, 0x83, 0x00, + 0x00, 0x80, 0x04, 0x21, 0x02, 0x00, 0x00, 0x4d, + 0x84, 0x00, 0x00, 0x80, 0x04, 0x22, 0x02, 0x00, + 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x23, + 0x02, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, + 0x04, 0x24, 0x02, 0x00, 0x00, 0x4d, 0x87, 0x00, + 0x00, 0x80, 0x04, 0x25, 0x02, 0x00, 0x00, 0x4d, + 0x88, 0x00, 0x00, 0x80, 0x04, 0x26, 0x02, 0x00, + 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x27, + 0x02, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, + 0x04, 0x28, 0x02, 0x00, 0x00, 0x4d, 0x8b, 0x00, + 0x00, 0x80, 0x04, 0x29, 0x02, 0x00, 0x00, 0x4d, + 0x8c, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x02, 0x00, + 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x2b, + 0x02, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, + 0x04, 0x2c, 0x02, 0x00, 0x00, 0x4d, 0x8f, 0x00, + 0x00, 0x80, 0x04, 0x2d, 0x02, 0x00, 0x00, 0x4d, + 0x90, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x02, 0x00, + 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x2f, + 0x02, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, + 0x04, 0x30, 0x02, 0x00, 0x00, 0x4d, 0x93, 0x00, + 0x00, 0x80, 0x04, 0x31, 0x02, 0x00, 0x00, 0x4d, + 0x94, 0x00, 0x00, 0x80, 0x04, 0x32, 0x02, 0x00, + 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x33, + 0x02, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, + 0x04, 0x34, 0x02, 0x00, 0x00, 0x4d, 0x97, 0x00, + 0x00, 0x80, 0x04, 0x35, 0x02, 0x00, 0x00, 0x4d, + 0x98, 0x00, 0x00, 0x80, 0x04, 0x36, 0x02, 0x00, + 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x37, + 0x02, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, + 0x04, 0x38, 0x02, 0x00, 0x00, 0x4d, 0x9b, 0x00, + 0x00, 0x80, 0x04, 0x39, 0x02, 0x00, 0x00, 0x4d, + 0x9c, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x02, 0x00, + 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x3b, + 0x02, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, + 0x04, 0x3c, 0x02, 0x00, 0x00, 0x4d, 0x9f, 0x00, + 0x00, 0x80, 0x04, 0x3d, 0x02, 0x00, 0x00, 0x4d, + 0xa0, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x02, 0x00, + 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x3f, + 0x02, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, + 0x04, 0x40, 0x02, 0x00, 0x00, 0x4d, 0xa3, 0x00, + 0x00, 0x80, 0x04, 0x41, 0x02, 0x00, 0x00, 0x4d, + 0xa4, 0x00, 0x00, 0x80, 0x04, 0x42, 0x02, 0x00, + 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x43, + 0x02, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, + 0x04, 0x44, 0x02, 0x00, 0x00, 0x4d, 0xa7, 0x00, + 0x00, 0x80, 0x04, 0x45, 0x02, 0x00, 0x00, 0x4d, + 0xa8, 0x00, 0x00, 0x80, 0x04, 0x46, 0x02, 0x00, + 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x47, + 0x02, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, + 0x04, 0x48, 0x02, 0x00, 0x00, 0x4d, 0xab, 0x00, + 0x00, 0x80, 0x04, 0x49, 0x02, 0x00, 0x00, 0x4d, + 0xac, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x02, 0x00, + 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0x4b, + 0x02, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, + 0x04, 0x4c, 0x02, 0x00, 0x00, 0x4d, 0xaf, 0x00, + 0x00, 0x80, 0x04, 0x4d, 0x02, 0x00, 0x00, 0x4d, + 0xb0, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x02, 0x00, + 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0x4f, + 0x02, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, + 0x04, 0x50, 0x02, 0x00, 0x00, 0x4d, 0xb3, 0x00, + 0x00, 0x80, 0x04, 0x51, 0x02, 0x00, 0x00, 0x4d, + 0xb4, 0x00, 0x00, 0x80, 0x04, 0x52, 0x02, 0x00, + 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0x53, + 0x02, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, + 0x04, 0x54, 0x02, 0x00, 0x00, 0x4d, 0xb7, 0x00, + 0x00, 0x80, 0x04, 0x55, 0x02, 0x00, 0x00, 0x4d, + 0xb8, 0x00, 0x00, 0x80, 0x04, 0x56, 0x02, 0x00, + 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0x57, + 0x02, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, + 0x04, 0x58, 0x02, 0x00, 0x00, 0x4d, 0xbb, 0x00, + 0x00, 0x80, 0x04, 0x59, 0x02, 0x00, 0x00, 0x4d, + 0xbc, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x02, 0x00, + 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0x5b, + 0x02, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, + 0x04, 0x5c, 0x02, 0x00, 0x00, 0x4d, 0xbf, 0x00, + 0x00, 0x80, 0x04, 0x5d, 0x02, 0x00, 0x00, 0x4d, + 0xc0, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x02, 0x00, + 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0x5f, + 0x02, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, + 0x04, 0x60, 0x02, 0x00, 0x00, 0x4d, 0xc3, 0x00, + 0x00, 0x80, 0x04, 0x61, 0x02, 0x00, 0x00, 0x4d, + 0xc4, 0x00, 0x00, 0x80, 0x04, 0x62, 0x02, 0x00, + 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0x63, + 0x02, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, + 0x04, 0x64, 0x02, 0x00, 0x00, 0x4d, 0xc7, 0x00, + 0x00, 0x80, 0x04, 0x65, 0x02, 0x00, 0x00, 0x4d, + 0xc8, 0x00, 0x00, 0x80, 0x04, 0x66, 0x02, 0x00, + 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0x67, + 0x02, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, + 0x04, 0x68, 0x02, 0x00, 0x00, 0x4d, 0xcb, 0x00, + 0x00, 0x80, 0x04, 0x69, 0x02, 0x00, 0x00, 0x4d, + 0xcc, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x02, 0x00, + 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0x6b, + 0x02, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, + 0x04, 0x6c, 0x02, 0x00, 0x00, 0x4d, 0xcf, 0x00, + 0x00, 0x80, 0x04, 0x6d, 0x02, 0x00, 0x00, 0x4d, + 0xd0, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x02, 0x00, + 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0x6f, + 0x02, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, + 0x04, 0x70, 0x02, 0x00, 0x00, 0x4d, 0xd3, 0x00, + 0x00, 0x80, 0x04, 0x71, 0x02, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x80, 0x04, 0x72, 0x02, 0x00, + 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0x73, + 0x02, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, + 0x04, 0x74, 0x02, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x80, 0x04, 0x75, 0x02, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x80, 0x04, 0x76, 0x02, 0x00, + 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0x77, + 0x02, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, + 0x04, 0x78, 0x02, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x80, 0x04, 0x79, 0x02, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x02, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0x7b, + 0x02, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, + 0x04, 0x7c, 0x02, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x80, 0x04, 0x7d, 0x02, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x02, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0x7f, + 0x02, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, + 0x04, 0x80, 0x02, 0x00, 0x00, 0x4d, 0xe3, 0x00, + 0x00, 0x80, 0x04, 0x81, 0x02, 0x00, 0x00, 0x4d, + 0xe4, 0x00, 0x00, 0x80, 0x04, 0x82, 0x02, 0x00, + 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0x83, + 0x02, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, + 0x04, 0x84, 0x02, 0x00, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x80, 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, + 0xe8, 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, 0x00, + 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0x86, + 0x02, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, + 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x80, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x02, 0x00, 0x00, 0x04, 0x88, 0x02, 0x00, + 0x00, 0x04, 0x89, 0x02, 0x00, 0x00, 0x04, 0x8a, + 0x02, 0x00, 0x00, 0x04, 0x8b, 0x02, 0x00, 0x00, + 0x04, 0x8c, 0x02, 0x00, 0x00, 0x04, 0x8d, 0x02, + 0x00, 0x00, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x04, + 0x8f, 0x02, 0x00, 0x00, 0x04, 0x90, 0x02, 0x00, + 0x00, 0x04, 0x91, 0x02, 0x00, 0x00, 0x04, 0x92, + 0x02, 0x00, 0x00, 0x04, 0x93, 0x02, 0x00, 0x00, + 0x04, 0x94, 0x02, 0x00, 0x00, 0x04, 0x95, 0x02, + 0x00, 0x00, 0x04, 0x96, 0x02, 0x00, 0x00, 0x04, + 0x97, 0x02, 0x00, 0x00, 0x04, 0x98, 0x02, 0x00, + 0x00, 0x04, 0x99, 0x02, 0x00, 0x00, 0x04, 0x9a, + 0x02, 0x00, 0x00, 0x04, 0x9b, 0x02, 0x00, 0x00, + 0x04, 0x9c, 0x02, 0x00, 0x00, 0x04, 0x9d, 0x02, + 0x00, 0x00, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x04, + 0x9f, 0x02, 0x00, 0x00, 0x04, 0xa0, 0x02, 0x00, + 0x00, 0x04, 0xa1, 0x02, 0x00, 0x00, 0x04, 0xa2, + 0x02, 0x00, 0x00, 0x04, 0xa3, 0x02, 0x00, 0x00, + 0x04, 0xa4, 0x02, 0x00, 0x00, 0x04, 0xa5, 0x02, + 0x00, 0x00, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x26, + 0x20, 0x00, 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, + 0x20, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, + 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0xa9, + 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, + 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, + 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, + 0x24, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, + 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0xad, + 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, + 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, + 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, + 0x28, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, + 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0xb1, + 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, + 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, + 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, + 0x2c, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, + 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0xb5, + 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, + 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, + 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, + 0x30, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, + 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0xb9, + 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, + 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, + 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, + 0x34, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, + 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0xbd, + 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, + 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, + 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, + 0x38, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, + 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0xc1, + 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, + 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, + 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, + 0x3c, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, + 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0xc5, + 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, + 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, + 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, + 0x40, 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0xc9, + 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, + 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, + 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, + 0x44, 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, + 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0xcd, + 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, + 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, + 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, 0x4d, + 0x48, 0x00, 0x00, 0x80, 0x04, 0xd0, 0x02, 0x00, + 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0xd1, + 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, + 0x04, 0xd2, 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, + 0x00, 0x80, 0x04, 0xd3, 0x02, 0x00, 0x00, 0x4d, + 0x4c, 0x00, 0x00, 0x80, 0x04, 0xd4, 0x02, 0x00, + 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0xd5, + 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, + 0x04, 0xd6, 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, + 0x00, 0x80, 0x04, 0xd7, 0x02, 0x00, 0x00, 0x4d, + 0x50, 0x00, 0x00, 0x80, 0x04, 0xd8, 0x02, 0x00, + 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0xd9, + 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, + 0x04, 0xda, 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, + 0x00, 0x80, 0x04, 0xdb, 0x02, 0x00, 0x00, 0x4d, + 0x54, 0x00, 0x00, 0x80, 0x04, 0xdc, 0x02, 0x00, + 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0xdd, + 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, + 0x04, 0xde, 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, + 0x00, 0x80, 0x04, 0xdf, 0x02, 0x00, 0x00, 0x4d, + 0x58, 0x00, 0x00, 0x80, 0x04, 0xe0, 0x02, 0x00, + 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0xe1, + 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, + 0x04, 0xe2, 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, + 0x00, 0x80, 0x04, 0xe3, 0x02, 0x00, 0x00, 0x4d, + 0x5c, 0x00, 0x00, 0x80, 0x04, 0xe4, 0x02, 0x00, + 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0xe5, + 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, + 0x04, 0xe6, 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, + 0x00, 0x80, 0x04, 0xe7, 0x02, 0x00, 0x00, 0x4d, + 0x60, 0x00, 0x00, 0x80, 0x04, 0xe8, 0x02, 0x00, + 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0xe9, + 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, + 0x04, 0xea, 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, + 0x00, 0x80, 0x04, 0xeb, 0x02, 0x00, 0x00, 0x4d, + 0x64, 0x00, 0x00, 0x80, 0x04, 0xec, 0x02, 0x00, + 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0xed, + 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, + 0x04, 0xee, 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, + 0x00, 0x80, 0x04, 0xef, 0x02, 0x00, 0x00, 0x4d, + 0x68, 0x00, 0x00, 0x80, 0x04, 0xf0, 0x02, 0x00, + 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0xf1, + 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, + 0x04, 0xf2, 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, + 0x00, 0x80, 0x04, 0xf3, 0x02, 0x00, 0x00, 0x4d, + 0x6c, 0x00, 0x00, 0x80, 0x04, 0xf4, 0x02, 0x00, + 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0xf5, + 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, + 0x04, 0xf6, 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, + 0x00, 0x80, 0x04, 0xf7, 0x02, 0x00, 0x00, 0x4d, + 0x70, 0x00, 0x00, 0x80, 0x04, 0xf8, 0x02, 0x00, + 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0xf9, + 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, + 0x04, 0xfa, 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, + 0x00, 0x80, 0x04, 0xfb, 0x02, 0x00, 0x00, 0x4d, + 0x74, 0x00, 0x00, 0x80, 0x04, 0xfc, 0x02, 0x00, + 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0xfd, + 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, + 0x04, 0xfe, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, + 0x00, 0x80, 0x04, 0xff, 0x02, 0x00, 0x00, 0x4d, + 0x78, 0x00, 0x00, 0x80, 0x04, 0x00, 0x03, 0x00, + 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x01, + 0x03, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, + 0x04, 0x02, 0x03, 0x00, 0x00, 0x4d, 0x7b, 0x00, + 0x00, 0x80, 0x04, 0x03, 0x03, 0x00, 0x00, 0x4d, + 0x7c, 0x00, 0x00, 0x80, 0x04, 0x04, 0x03, 0x00, + 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x05, + 0x03, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, + 0x04, 0x06, 0x03, 0x00, 0x00, 0x4d, 0x7f, 0x00, + 0x00, 0x80, 0x04, 0x07, 0x03, 0x00, 0x00, 0x4d, + 0x80, 0x00, 0x00, 0x80, 0x04, 0x08, 0x03, 0x00, + 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x09, + 0x03, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, + 0x04, 0x0a, 0x03, 0x00, 0x00, 0x4d, 0x83, 0x00, + 0x00, 0x80, 0x04, 0x0b, 0x03, 0x00, 0x00, 0x4d, + 0x84, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x03, 0x00, + 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x0d, + 0x03, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, + 0x04, 0x0e, 0x03, 0x00, 0x00, 0x4d, 0x87, 0x00, + 0x00, 0x80, 0x04, 0x0f, 0x03, 0x00, 0x00, 0x4d, + 0x88, 0x00, 0x00, 0x80, 0x04, 0x10, 0x03, 0x00, + 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x11, + 0x03, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, + 0x04, 0x12, 0x03, 0x00, 0x00, 0x4d, 0x8b, 0x00, + 0x00, 0x80, 0x04, 0x13, 0x03, 0x00, 0x00, 0x4d, + 0x8c, 0x00, 0x00, 0x80, 0x04, 0x14, 0x03, 0x00, + 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x15, + 0x03, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, + 0x04, 0x16, 0x03, 0x00, 0x00, 0x4d, 0x8f, 0x00, + 0x00, 0x80, 0x04, 0x17, 0x03, 0x00, 0x00, 0x4d, + 0x90, 0x00, 0x00, 0x80, 0x04, 0x18, 0x03, 0x00, + 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x19, + 0x03, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, + 0x04, 0x1a, 0x03, 0x00, 0x00, 0x4d, 0x93, 0x00, + 0x00, 0x80, 0x04, 0x1b, 0x03, 0x00, 0x00, 0x4d, + 0x94, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x03, 0x00, + 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x1d, + 0x03, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, + 0x04, 0x1e, 0x03, 0x00, 0x00, 0x4d, 0x97, 0x00, + 0x00, 0x80, 0x04, 0x1f, 0x03, 0x00, 0x00, 0x4d, + 0x98, 0x00, 0x00, 0x80, 0x04, 0x20, 0x03, 0x00, + 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x21, + 0x03, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, + 0x04, 0x22, 0x03, 0x00, 0x00, 0x4d, 0x9b, 0x00, + 0x00, 0x80, 0x04, 0x23, 0x03, 0x00, 0x00, 0x4d, + 0x9c, 0x00, 0x00, 0x80, 0x04, 0x24, 0x03, 0x00, + 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x25, + 0x03, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, + 0x04, 0x26, 0x03, 0x00, 0x00, 0x4d, 0x9f, 0x00, + 0x00, 0x80, 0x04, 0x27, 0x03, 0x00, 0x00, 0x4d, + 0xa0, 0x00, 0x00, 0x80, 0x04, 0x28, 0x03, 0x00, + 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x29, + 0x03, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, + 0x04, 0x2a, 0x03, 0x00, 0x00, 0x4d, 0xa3, 0x00, + 0x00, 0x80, 0x04, 0x2b, 0x03, 0x00, 0x00, 0x4d, + 0xa4, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x03, 0x00, + 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x2d, + 0x03, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, + 0x04, 0x2e, 0x03, 0x00, 0x00, 0x4d, 0xa7, 0x00, + 0x00, 0x80, 0x04, 0x2f, 0x03, 0x00, 0x00, 0x4d, + 0xa8, 0x00, 0x00, 0x80, 0x04, 0x30, 0x03, 0x00, + 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x31, + 0x03, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, + 0x04, 0x32, 0x03, 0x00, 0x00, 0x4d, 0xab, 0x00, + 0x00, 0x80, 0x04, 0x33, 0x03, 0x00, 0x00, 0x4d, + 0xac, 0x00, 0x00, 0x80, 0x04, 0x34, 0x03, 0x00, + 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0x35, + 0x03, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, + 0x04, 0x36, 0x03, 0x00, 0x00, 0x4d, 0xaf, 0x00, + 0x00, 0x80, 0x04, 0x37, 0x03, 0x00, 0x00, 0x4d, + 0xb0, 0x00, 0x00, 0x80, 0x04, 0x38, 0x03, 0x00, + 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0x39, + 0x03, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, + 0x04, 0x3a, 0x03, 0x00, 0x00, 0x4d, 0xb3, 0x00, + 0x00, 0x80, 0x04, 0x3b, 0x03, 0x00, 0x00, 0x4d, + 0xb4, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x03, 0x00, + 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0x3d, + 0x03, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, + 0x04, 0x3e, 0x03, 0x00, 0x00, 0x4d, 0xb7, 0x00, + 0x00, 0x80, 0x04, 0x3f, 0x03, 0x00, 0x00, 0x4d, + 0xb8, 0x00, 0x00, 0x80, 0x04, 0x40, 0x03, 0x00, + 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0x41, + 0x03, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, + 0x04, 0x42, 0x03, 0x00, 0x00, 0x4d, 0xbb, 0x00, + 0x00, 0x80, 0x04, 0x43, 0x03, 0x00, 0x00, 0x4d, + 0xbc, 0x00, 0x00, 0x80, 0x04, 0x44, 0x03, 0x00, + 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0x45, + 0x03, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, + 0x04, 0x46, 0x03, 0x00, 0x00, 0x4d, 0xbf, 0x00, + 0x00, 0x80, 0x04, 0x47, 0x03, 0x00, 0x00, 0x4d, + 0xc0, 0x00, 0x00, 0x80, 0x04, 0x48, 0x03, 0x00, + 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0x49, + 0x03, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, + 0x04, 0x4a, 0x03, 0x00, 0x00, 0x4d, 0xc3, 0x00, + 0x00, 0x80, 0x04, 0x4b, 0x03, 0x00, 0x00, 0x4d, + 0xc4, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x03, 0x00, + 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0x4d, + 0x03, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, + 0x04, 0x4e, 0x03, 0x00, 0x00, 0x4d, 0xc7, 0x00, + 0x00, 0x80, 0x04, 0x4f, 0x03, 0x00, 0x00, 0x4d, + 0xc8, 0x00, 0x00, 0x80, 0x04, 0x50, 0x03, 0x00, + 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0x51, + 0x03, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, + 0x04, 0x52, 0x03, 0x00, 0x00, 0x4d, 0xcb, 0x00, + 0x00, 0x80, 0x04, 0x53, 0x03, 0x00, 0x00, 0x4d, + 0xcc, 0x00, 0x00, 0x80, 0x04, 0x54, 0x03, 0x00, + 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0x55, + 0x03, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, + 0x04, 0x56, 0x03, 0x00, 0x00, 0x4d, 0xcf, 0x00, + 0x00, 0x80, 0x04, 0x57, 0x03, 0x00, 0x00, 0x4d, + 0xd0, 0x00, 0x00, 0x80, 0x04, 0x58, 0x03, 0x00, + 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0x59, + 0x03, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, + 0x04, 0x5a, 0x03, 0x00, 0x00, 0x4d, 0xd3, 0x00, + 0x00, 0x80, 0x04, 0x5b, 0x03, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x03, 0x00, + 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0x5d, + 0x03, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, + 0x04, 0x5e, 0x03, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x80, 0x04, 0x5f, 0x03, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x80, 0x04, 0x60, 0x03, 0x00, + 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0x61, + 0x03, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, + 0x04, 0x62, 0x03, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x80, 0x04, 0x63, 0x03, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x80, 0x04, 0x64, 0x03, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0x65, + 0x03, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, + 0x04, 0x66, 0x03, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x80, 0x04, 0x67, 0x03, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x80, 0x04, 0x68, 0x03, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0x69, + 0x03, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, + 0x04, 0x6a, 0x03, 0x00, 0x00, 0x4d, 0xe3, 0x00, + 0x00, 0x80, 0x04, 0x6b, 0x03, 0x00, 0x00, 0x4d, + 0xe4, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x03, 0x00, + 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0x6d, + 0x03, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, + 0x04, 0x6e, 0x03, 0x00, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x80, 0x04, 0x6f, 0x03, 0x00, 0x00, 0x4d, + 0xe8, 0x00, 0x00, 0x80, 0x04, 0x70, 0x03, 0x00, + 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0x71, + 0x03, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, + 0x04, 0x72, 0x03, 0x00, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x80, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x87, 0x02, 0x00, 0x00, 0x04, 0x88, 0x02, 0x00, + 0x00, 0x04, 0x89, 0x02, 0x00, 0x00, 0x04, 0x8a, + 0x02, 0x00, 0x00, 0x04, 0x8b, 0x02, 0x00, 0x00, + 0x04, 0x8c, 0x02, 0x00, 0x00, 0x04, 0x8d, 0x02, + 0x00, 0x00, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x04, + 0x8f, 0x02, 0x00, 0x00, 0x04, 0x90, 0x02, 0x00, + 0x00, 0x04, 0x91, 0x02, 0x00, 0x00, 0x04, 0x92, + 0x02, 0x00, 0x00, 0x04, 0x93, 0x02, 0x00, 0x00, + 0x04, 0x94, 0x02, 0x00, 0x00, 0x04, 0x95, 0x02, + 0x00, 0x00, 0x04, 0x96, 0x02, 0x00, 0x00, 0x04, + 0x97, 0x02, 0x00, 0x00, 0x04, 0x98, 0x02, 0x00, + 0x00, 0x04, 0x99, 0x02, 0x00, 0x00, 0x04, 0x9a, + 0x02, 0x00, 0x00, 0x04, 0x9b, 0x02, 0x00, 0x00, + 0x04, 0x9c, 0x02, 0x00, 0x00, 0x04, 0x9d, 0x02, + 0x00, 0x00, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x04, + 0x9f, 0x02, 0x00, 0x00, 0x04, 0xa0, 0x02, 0x00, + 0x00, 0x04, 0xa1, 0x02, 0x00, 0x00, 0x04, 0xa2, + 0x02, 0x00, 0x00, 0x04, 0xa3, 0x02, 0x00, 0x00, + 0x04, 0xa4, 0x02, 0x00, 0x00, 0x04, 0xa5, 0x02, + 0x00, 0x00, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x26, + 0x20, 0x00, 0x04, 0xa7, 0x02, 0x00, 0x00, 0x4d, + 0x20, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, 0x00, + 0x00, 0x4d, 0x21, 0x00, 0x00, 0x80, 0x04, 0xa9, + 0x02, 0x00, 0x00, 0x4d, 0x22, 0x00, 0x00, 0x80, + 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0x23, 0x00, + 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, 0x4d, + 0x24, 0x00, 0x00, 0x80, 0x04, 0xac, 0x02, 0x00, + 0x00, 0x4d, 0x25, 0x00, 0x00, 0x80, 0x04, 0xad, + 0x02, 0x00, 0x00, 0x4d, 0x26, 0x00, 0x00, 0x80, + 0x04, 0xae, 0x02, 0x00, 0x00, 0x4d, 0x27, 0x00, + 0x00, 0x80, 0x04, 0xaf, 0x02, 0x00, 0x00, 0x4d, + 0x28, 0x00, 0x00, 0x80, 0x04, 0xb0, 0x02, 0x00, + 0x00, 0x4d, 0x29, 0x00, 0x00, 0x80, 0x04, 0xb1, + 0x02, 0x00, 0x00, 0x4d, 0x2a, 0x00, 0x00, 0x80, + 0x04, 0xb2, 0x02, 0x00, 0x00, 0x4d, 0x2b, 0x00, + 0x00, 0x80, 0x04, 0xb3, 0x02, 0x00, 0x00, 0x4d, + 0x2c, 0x00, 0x00, 0x80, 0x04, 0xb4, 0x02, 0x00, + 0x00, 0x4d, 0x2d, 0x00, 0x00, 0x80, 0x04, 0xb5, + 0x02, 0x00, 0x00, 0x4d, 0x2e, 0x00, 0x00, 0x80, + 0x04, 0xb6, 0x02, 0x00, 0x00, 0x4d, 0x2f, 0x00, + 0x00, 0x80, 0x04, 0xb7, 0x02, 0x00, 0x00, 0x4d, + 0x30, 0x00, 0x00, 0x80, 0x04, 0xb8, 0x02, 0x00, + 0x00, 0x4d, 0x31, 0x00, 0x00, 0x80, 0x04, 0xb9, + 0x02, 0x00, 0x00, 0x4d, 0x32, 0x00, 0x00, 0x80, + 0x04, 0xba, 0x02, 0x00, 0x00, 0x4d, 0x33, 0x00, + 0x00, 0x80, 0x04, 0xbb, 0x02, 0x00, 0x00, 0x4d, + 0x34, 0x00, 0x00, 0x80, 0x04, 0xbc, 0x02, 0x00, + 0x00, 0x4d, 0x35, 0x00, 0x00, 0x80, 0x04, 0xbd, + 0x02, 0x00, 0x00, 0x4d, 0x36, 0x00, 0x00, 0x80, + 0x04, 0xbe, 0x02, 0x00, 0x00, 0x4d, 0x37, 0x00, + 0x00, 0x80, 0x04, 0xbf, 0x02, 0x00, 0x00, 0x4d, + 0x38, 0x00, 0x00, 0x80, 0x04, 0xc0, 0x02, 0x00, + 0x00, 0x4d, 0x39, 0x00, 0x00, 0x80, 0x04, 0xc1, + 0x02, 0x00, 0x00, 0x4d, 0x3a, 0x00, 0x00, 0x80, + 0x04, 0xc2, 0x02, 0x00, 0x00, 0x4d, 0x3b, 0x00, + 0x00, 0x80, 0x04, 0xc3, 0x02, 0x00, 0x00, 0x4d, + 0x3c, 0x00, 0x00, 0x80, 0x04, 0xc4, 0x02, 0x00, + 0x00, 0x4d, 0x3d, 0x00, 0x00, 0x80, 0x04, 0xc5, + 0x02, 0x00, 0x00, 0x4d, 0x3e, 0x00, 0x00, 0x80, + 0x04, 0xc6, 0x02, 0x00, 0x00, 0x4d, 0x3f, 0x00, + 0x00, 0x80, 0x04, 0xc7, 0x02, 0x00, 0x00, 0x4d, + 0x40, 0x00, 0x00, 0x80, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x4d, 0x41, 0x00, 0x00, 0x80, 0x04, 0xc9, + 0x02, 0x00, 0x00, 0x4d, 0x42, 0x00, 0x00, 0x80, + 0x04, 0xca, 0x02, 0x00, 0x00, 0x4d, 0x43, 0x00, + 0x00, 0x80, 0x04, 0xcb, 0x02, 0x00, 0x00, 0x4d, + 0x44, 0x00, 0x00, 0x80, 0x04, 0xcc, 0x02, 0x00, + 0x00, 0x4d, 0x45, 0x00, 0x00, 0x80, 0x04, 0xcd, + 0x02, 0x00, 0x00, 0x4d, 0x46, 0x00, 0x00, 0x80, + 0x04, 0xce, 0x02, 0x00, 0x00, 0x4d, 0x47, 0x00, + 0x00, 0x80, 0x04, 0xcf, 0x02, 0x00, 0x00, 0x4d, + 0x48, 0x00, 0x00, 0x80, 0x04, 0xd0, 0x02, 0x00, + 0x00, 0x4d, 0x49, 0x00, 0x00, 0x80, 0x04, 0xd1, + 0x02, 0x00, 0x00, 0x4d, 0x4a, 0x00, 0x00, 0x80, + 0x04, 0xd2, 0x02, 0x00, 0x00, 0x4d, 0x4b, 0x00, + 0x00, 0x80, 0x04, 0xd3, 0x02, 0x00, 0x00, 0x4d, + 0x4c, 0x00, 0x00, 0x80, 0x04, 0xd4, 0x02, 0x00, + 0x00, 0x4d, 0x4d, 0x00, 0x00, 0x80, 0x04, 0xd5, + 0x02, 0x00, 0x00, 0x4d, 0x4e, 0x00, 0x00, 0x80, + 0x04, 0xd6, 0x02, 0x00, 0x00, 0x4d, 0x4f, 0x00, + 0x00, 0x80, 0x04, 0xd7, 0x02, 0x00, 0x00, 0x4d, + 0x50, 0x00, 0x00, 0x80, 0x04, 0xd8, 0x02, 0x00, + 0x00, 0x4d, 0x51, 0x00, 0x00, 0x80, 0x04, 0xd9, + 0x02, 0x00, 0x00, 0x4d, 0x52, 0x00, 0x00, 0x80, + 0x04, 0xda, 0x02, 0x00, 0x00, 0x4d, 0x53, 0x00, + 0x00, 0x80, 0x04, 0xdb, 0x02, 0x00, 0x00, 0x4d, + 0x54, 0x00, 0x00, 0x80, 0x04, 0xdc, 0x02, 0x00, + 0x00, 0x4d, 0x55, 0x00, 0x00, 0x80, 0x04, 0xdd, + 0x02, 0x00, 0x00, 0x4d, 0x56, 0x00, 0x00, 0x80, + 0x04, 0xde, 0x02, 0x00, 0x00, 0x4d, 0x57, 0x00, + 0x00, 0x80, 0x04, 0xdf, 0x02, 0x00, 0x00, 0x4d, + 0x58, 0x00, 0x00, 0x80, 0x04, 0xe0, 0x02, 0x00, + 0x00, 0x4d, 0x59, 0x00, 0x00, 0x80, 0x04, 0xe1, + 0x02, 0x00, 0x00, 0x4d, 0x5a, 0x00, 0x00, 0x80, + 0x04, 0xe2, 0x02, 0x00, 0x00, 0x4d, 0x5b, 0x00, + 0x00, 0x80, 0x04, 0xe3, 0x02, 0x00, 0x00, 0x4d, + 0x5c, 0x00, 0x00, 0x80, 0x04, 0xe4, 0x02, 0x00, + 0x00, 0x4d, 0x5d, 0x00, 0x00, 0x80, 0x04, 0xe5, + 0x02, 0x00, 0x00, 0x4d, 0x5e, 0x00, 0x00, 0x80, + 0x04, 0xe6, 0x02, 0x00, 0x00, 0x4d, 0x5f, 0x00, + 0x00, 0x80, 0x04, 0xe7, 0x02, 0x00, 0x00, 0x4d, + 0x60, 0x00, 0x00, 0x80, 0x04, 0xe8, 0x02, 0x00, + 0x00, 0x4d, 0x61, 0x00, 0x00, 0x80, 0x04, 0xe9, + 0x02, 0x00, 0x00, 0x4d, 0x62, 0x00, 0x00, 0x80, + 0x04, 0xea, 0x02, 0x00, 0x00, 0x4d, 0x63, 0x00, + 0x00, 0x80, 0x04, 0xeb, 0x02, 0x00, 0x00, 0x4d, + 0x64, 0x00, 0x00, 0x80, 0x04, 0xec, 0x02, 0x00, + 0x00, 0x4d, 0x65, 0x00, 0x00, 0x80, 0x04, 0xed, + 0x02, 0x00, 0x00, 0x4d, 0x66, 0x00, 0x00, 0x80, + 0x04, 0xee, 0x02, 0x00, 0x00, 0x4d, 0x67, 0x00, + 0x00, 0x80, 0x04, 0xef, 0x02, 0x00, 0x00, 0x4d, + 0x68, 0x00, 0x00, 0x80, 0x04, 0xf0, 0x02, 0x00, + 0x00, 0x4d, 0x69, 0x00, 0x00, 0x80, 0x04, 0xf1, + 0x02, 0x00, 0x00, 0x4d, 0x6a, 0x00, 0x00, 0x80, + 0x04, 0xf2, 0x02, 0x00, 0x00, 0x4d, 0x6b, 0x00, + 0x00, 0x80, 0x04, 0xf3, 0x02, 0x00, 0x00, 0x4d, + 0x6c, 0x00, 0x00, 0x80, 0x04, 0xf4, 0x02, 0x00, + 0x00, 0x4d, 0x6d, 0x00, 0x00, 0x80, 0x04, 0xf5, + 0x02, 0x00, 0x00, 0x4d, 0x6e, 0x00, 0x00, 0x80, + 0x04, 0xf6, 0x02, 0x00, 0x00, 0x4d, 0x6f, 0x00, + 0x00, 0x80, 0x04, 0xf7, 0x02, 0x00, 0x00, 0x4d, + 0x70, 0x00, 0x00, 0x80, 0x04, 0xf8, 0x02, 0x00, + 0x00, 0x4d, 0x71, 0x00, 0x00, 0x80, 0x04, 0xf9, + 0x02, 0x00, 0x00, 0x4d, 0x72, 0x00, 0x00, 0x80, + 0x04, 0xfa, 0x02, 0x00, 0x00, 0x4d, 0x73, 0x00, + 0x00, 0x80, 0x04, 0xfb, 0x02, 0x00, 0x00, 0x4d, + 0x74, 0x00, 0x00, 0x80, 0x04, 0xfc, 0x02, 0x00, + 0x00, 0x4d, 0x75, 0x00, 0x00, 0x80, 0x04, 0xfd, + 0x02, 0x00, 0x00, 0x4d, 0x76, 0x00, 0x00, 0x80, + 0x04, 0xfe, 0x02, 0x00, 0x00, 0x4d, 0x77, 0x00, + 0x00, 0x80, 0x04, 0xff, 0x02, 0x00, 0x00, 0x4d, + 0x78, 0x00, 0x00, 0x80, 0x04, 0x00, 0x03, 0x00, + 0x00, 0x4d, 0x79, 0x00, 0x00, 0x80, 0x04, 0x01, + 0x03, 0x00, 0x00, 0x4d, 0x7a, 0x00, 0x00, 0x80, + 0x04, 0x02, 0x03, 0x00, 0x00, 0x4d, 0x7b, 0x00, + 0x00, 0x80, 0x04, 0x03, 0x03, 0x00, 0x00, 0x4d, + 0x7c, 0x00, 0x00, 0x80, 0x04, 0x04, 0x03, 0x00, + 0x00, 0x4d, 0x7d, 0x00, 0x00, 0x80, 0x04, 0x05, + 0x03, 0x00, 0x00, 0x4d, 0x7e, 0x00, 0x00, 0x80, + 0x04, 0x06, 0x03, 0x00, 0x00, 0x4d, 0x7f, 0x00, + 0x00, 0x80, 0x04, 0x07, 0x03, 0x00, 0x00, 0x4d, + 0x80, 0x00, 0x00, 0x80, 0x04, 0x08, 0x03, 0x00, + 0x00, 0x4d, 0x81, 0x00, 0x00, 0x80, 0x04, 0x09, + 0x03, 0x00, 0x00, 0x4d, 0x82, 0x00, 0x00, 0x80, + 0x04, 0x0a, 0x03, 0x00, 0x00, 0x4d, 0x83, 0x00, + 0x00, 0x80, 0x04, 0x0b, 0x03, 0x00, 0x00, 0x4d, + 0x84, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x03, 0x00, + 0x00, 0x4d, 0x85, 0x00, 0x00, 0x80, 0x04, 0x0d, + 0x03, 0x00, 0x00, 0x4d, 0x86, 0x00, 0x00, 0x80, + 0x04, 0x0e, 0x03, 0x00, 0x00, 0x4d, 0x87, 0x00, + 0x00, 0x80, 0x04, 0x0f, 0x03, 0x00, 0x00, 0x4d, + 0x88, 0x00, 0x00, 0x80, 0x04, 0x10, 0x03, 0x00, + 0x00, 0x4d, 0x89, 0x00, 0x00, 0x80, 0x04, 0x11, + 0x03, 0x00, 0x00, 0x4d, 0x8a, 0x00, 0x00, 0x80, + 0x04, 0x12, 0x03, 0x00, 0x00, 0x4d, 0x8b, 0x00, + 0x00, 0x80, 0x04, 0x13, 0x03, 0x00, 0x00, 0x4d, + 0x8c, 0x00, 0x00, 0x80, 0x04, 0x14, 0x03, 0x00, + 0x00, 0x4d, 0x8d, 0x00, 0x00, 0x80, 0x04, 0x15, + 0x03, 0x00, 0x00, 0x4d, 0x8e, 0x00, 0x00, 0x80, + 0x04, 0x16, 0x03, 0x00, 0x00, 0x4d, 0x8f, 0x00, + 0x00, 0x80, 0x04, 0x17, 0x03, 0x00, 0x00, 0x4d, + 0x90, 0x00, 0x00, 0x80, 0x04, 0x18, 0x03, 0x00, + 0x00, 0x4d, 0x91, 0x00, 0x00, 0x80, 0x04, 0x19, + 0x03, 0x00, 0x00, 0x4d, 0x92, 0x00, 0x00, 0x80, + 0x04, 0x1a, 0x03, 0x00, 0x00, 0x4d, 0x93, 0x00, + 0x00, 0x80, 0x04, 0x1b, 0x03, 0x00, 0x00, 0x4d, + 0x94, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x03, 0x00, + 0x00, 0x4d, 0x95, 0x00, 0x00, 0x80, 0x04, 0x1d, + 0x03, 0x00, 0x00, 0x4d, 0x96, 0x00, 0x00, 0x80, + 0x04, 0x1e, 0x03, 0x00, 0x00, 0x4d, 0x97, 0x00, + 0x00, 0x80, 0x04, 0x1f, 0x03, 0x00, 0x00, 0x4d, + 0x98, 0x00, 0x00, 0x80, 0x04, 0x20, 0x03, 0x00, + 0x00, 0x4d, 0x99, 0x00, 0x00, 0x80, 0x04, 0x21, + 0x03, 0x00, 0x00, 0x4d, 0x9a, 0x00, 0x00, 0x80, + 0x04, 0x22, 0x03, 0x00, 0x00, 0x4d, 0x9b, 0x00, + 0x00, 0x80, 0x04, 0x23, 0x03, 0x00, 0x00, 0x4d, + 0x9c, 0x00, 0x00, 0x80, 0x04, 0x24, 0x03, 0x00, + 0x00, 0x4d, 0x9d, 0x00, 0x00, 0x80, 0x04, 0x25, + 0x03, 0x00, 0x00, 0x4d, 0x9e, 0x00, 0x00, 0x80, + 0x04, 0x26, 0x03, 0x00, 0x00, 0x4d, 0x9f, 0x00, + 0x00, 0x80, 0x04, 0x27, 0x03, 0x00, 0x00, 0x4d, + 0xa0, 0x00, 0x00, 0x80, 0x04, 0x28, 0x03, 0x00, + 0x00, 0x4d, 0xa1, 0x00, 0x00, 0x80, 0x04, 0x29, + 0x03, 0x00, 0x00, 0x4d, 0xa2, 0x00, 0x00, 0x80, + 0x04, 0x2a, 0x03, 0x00, 0x00, 0x4d, 0xa3, 0x00, + 0x00, 0x80, 0x04, 0x2b, 0x03, 0x00, 0x00, 0x4d, + 0xa4, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x03, 0x00, + 0x00, 0x4d, 0xa5, 0x00, 0x00, 0x80, 0x04, 0x2d, + 0x03, 0x00, 0x00, 0x4d, 0xa6, 0x00, 0x00, 0x80, + 0x04, 0x2e, 0x03, 0x00, 0x00, 0x4d, 0xa7, 0x00, + 0x00, 0x80, 0x04, 0x2f, 0x03, 0x00, 0x00, 0x4d, + 0xa8, 0x00, 0x00, 0x80, 0x04, 0x30, 0x03, 0x00, + 0x00, 0x4d, 0xa9, 0x00, 0x00, 0x80, 0x04, 0x31, + 0x03, 0x00, 0x00, 0x4d, 0xaa, 0x00, 0x00, 0x80, + 0x04, 0x32, 0x03, 0x00, 0x00, 0x4d, 0xab, 0x00, + 0x00, 0x80, 0x04, 0x33, 0x03, 0x00, 0x00, 0x4d, + 0xac, 0x00, 0x00, 0x80, 0x04, 0x34, 0x03, 0x00, + 0x00, 0x4d, 0xad, 0x00, 0x00, 0x80, 0x04, 0x35, + 0x03, 0x00, 0x00, 0x4d, 0xae, 0x00, 0x00, 0x80, + 0x04, 0x36, 0x03, 0x00, 0x00, 0x4d, 0xaf, 0x00, + 0x00, 0x80, 0x04, 0x37, 0x03, 0x00, 0x00, 0x4d, + 0xb0, 0x00, 0x00, 0x80, 0x04, 0x38, 0x03, 0x00, + 0x00, 0x4d, 0xb1, 0x00, 0x00, 0x80, 0x04, 0x39, + 0x03, 0x00, 0x00, 0x4d, 0xb2, 0x00, 0x00, 0x80, + 0x04, 0x3a, 0x03, 0x00, 0x00, 0x4d, 0xb3, 0x00, + 0x00, 0x80, 0x04, 0x3b, 0x03, 0x00, 0x00, 0x4d, + 0xb4, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x03, 0x00, + 0x00, 0x4d, 0xb5, 0x00, 0x00, 0x80, 0x04, 0x3d, + 0x03, 0x00, 0x00, 0x4d, 0xb6, 0x00, 0x00, 0x80, + 0x04, 0x3e, 0x03, 0x00, 0x00, 0x4d, 0xb7, 0x00, + 0x00, 0x80, 0x04, 0x3f, 0x03, 0x00, 0x00, 0x4d, + 0xb8, 0x00, 0x00, 0x80, 0x04, 0x40, 0x03, 0x00, + 0x00, 0x4d, 0xb9, 0x00, 0x00, 0x80, 0x04, 0x41, + 0x03, 0x00, 0x00, 0x4d, 0xba, 0x00, 0x00, 0x80, + 0x04, 0x42, 0x03, 0x00, 0x00, 0x4d, 0xbb, 0x00, + 0x00, 0x80, 0x04, 0x43, 0x03, 0x00, 0x00, 0x4d, + 0xbc, 0x00, 0x00, 0x80, 0x04, 0x44, 0x03, 0x00, + 0x00, 0x4d, 0xbd, 0x00, 0x00, 0x80, 0x04, 0x45, + 0x03, 0x00, 0x00, 0x4d, 0xbe, 0x00, 0x00, 0x80, + 0x04, 0x46, 0x03, 0x00, 0x00, 0x4d, 0xbf, 0x00, + 0x00, 0x80, 0x04, 0x47, 0x03, 0x00, 0x00, 0x4d, + 0xc0, 0x00, 0x00, 0x80, 0x04, 0x48, 0x03, 0x00, + 0x00, 0x4d, 0xc1, 0x00, 0x00, 0x80, 0x04, 0x49, + 0x03, 0x00, 0x00, 0x4d, 0xc2, 0x00, 0x00, 0x80, + 0x04, 0x4a, 0x03, 0x00, 0x00, 0x4d, 0xc3, 0x00, + 0x00, 0x80, 0x04, 0x4b, 0x03, 0x00, 0x00, 0x4d, + 0xc4, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x03, 0x00, + 0x00, 0x4d, 0xc5, 0x00, 0x00, 0x80, 0x04, 0x4d, + 0x03, 0x00, 0x00, 0x4d, 0xc6, 0x00, 0x00, 0x80, + 0x04, 0x4e, 0x03, 0x00, 0x00, 0x4d, 0xc7, 0x00, + 0x00, 0x80, 0x04, 0x4f, 0x03, 0x00, 0x00, 0x4d, + 0xc8, 0x00, 0x00, 0x80, 0x04, 0x50, 0x03, 0x00, + 0x00, 0x4d, 0xc9, 0x00, 0x00, 0x80, 0x04, 0x51, + 0x03, 0x00, 0x00, 0x4d, 0xca, 0x00, 0x00, 0x80, + 0x04, 0x52, 0x03, 0x00, 0x00, 0x4d, 0xcb, 0x00, + 0x00, 0x80, 0x04, 0x53, 0x03, 0x00, 0x00, 0x4d, + 0xcc, 0x00, 0x00, 0x80, 0x04, 0x54, 0x03, 0x00, + 0x00, 0x4d, 0xcd, 0x00, 0x00, 0x80, 0x04, 0x55, + 0x03, 0x00, 0x00, 0x4d, 0xce, 0x00, 0x00, 0x80, + 0x04, 0x56, 0x03, 0x00, 0x00, 0x4d, 0xcf, 0x00, + 0x00, 0x80, 0x04, 0x57, 0x03, 0x00, 0x00, 0x4d, + 0xd0, 0x00, 0x00, 0x80, 0x04, 0x58, 0x03, 0x00, + 0x00, 0x4d, 0xd1, 0x00, 0x00, 0x80, 0x04, 0x59, + 0x03, 0x00, 0x00, 0x4d, 0xd2, 0x00, 0x00, 0x80, + 0x04, 0x5a, 0x03, 0x00, 0x00, 0x4d, 0xd3, 0x00, + 0x00, 0x80, 0x04, 0x5b, 0x03, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x03, 0x00, + 0x00, 0x4d, 0xd5, 0x00, 0x00, 0x80, 0x04, 0x5d, + 0x03, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x80, + 0x04, 0x5e, 0x03, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x80, 0x04, 0x5f, 0x03, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x80, 0x04, 0x60, 0x03, 0x00, + 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x80, 0x04, 0x61, + 0x03, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x80, + 0x04, 0x62, 0x03, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x80, 0x04, 0x63, 0x03, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x80, 0x04, 0x64, 0x03, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x80, 0x04, 0x65, + 0x03, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x80, + 0x04, 0x66, 0x03, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x80, 0x04, 0x67, 0x03, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x80, 0x04, 0x68, 0x03, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x80, 0x04, 0x69, + 0x03, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x80, + 0x04, 0x6a, 0x03, 0x00, 0x00, 0x4d, 0xe3, 0x00, + 0x00, 0x80, 0x04, 0x6b, 0x03, 0x00, 0x00, 0x4d, + 0xe4, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x03, 0x00, + 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x80, 0x04, 0x6d, + 0x03, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x80, + 0x04, 0x6e, 0x03, 0x00, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x80, 0x04, 0x6f, 0x03, 0x00, 0x00, 0x4d, + 0xe8, 0x00, 0x00, 0x80, 0x04, 0x70, 0x03, 0x00, + 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x80, 0x04, 0x71, + 0x03, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x80, + 0x04, 0x72, 0x03, 0x00, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x80, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, 0x04, + 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, 0x01, 0x00, + 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x89, 0xbe, + 0x8a, 0xbe, 0x8b, 0xbe, 0x8c, 0xbe, 0x8d, 0xbe, + 0x8e, 0xbe, 0x8f, 0xbe, 0x90, 0xbe, 0x91, 0xbe, + 0x92, 0xbe, 0x93, 0xbe, 0x94, 0x26, 0x0c, 0x00, + 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, 0x44, 0x01, + 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, + 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x5c, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x04, + 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, + 0x71, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x72, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x73, 0x03, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x03, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x73, 0x03, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, 0x00, + 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, 0x78, + 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x95, 0xbe, 0x96, 0xbe, 0x97, 0xbe, 0x98, 0xbe, + 0x99, 0xbe, 0x9a, 0xbe, 0x9b, 0xbe, 0x9c, 0xbe, + 0x9d, 0xbe, 0x9e, 0xbe, 0x9f, 0xbe, 0xa0, 0x26, + 0x0c, 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, + 0x44, 0x01, 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, + 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x5c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x72, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x74, 0x03, 0x00, + 0x00, 0x04, 0x75, 0x03, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, 0x74, + 0x03, 0x00, 0x00, 0x04, 0x75, 0x03, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x74, 0x03, 0x00, 0x00, 0x04, 0x75, 0x03, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x74, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x4d, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x4d, + 0x78, 0x01, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x4d, 0x76, + 0x03, 0x00, 0x00, 0x4d, 0x77, 0x03, 0x00, 0x00, + 0x0b, 0x04, 0x78, 0x03, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x79, 0x03, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x7a, 0x03, 0x00, 0x00, 0x4d, 0x7b, 0x03, + 0x00, 0x00, 0x04, 0x7c, 0x03, 0x00, 0x00, 0x4d, + 0x7d, 0x03, 0x00, 0x00, 0x4d, 0x7e, 0x03, 0x00, + 0x00, 0x0b, 0x04, 0x7f, 0x03, 0x00, 0x00, 0x4d, + 0x7b, 0x03, 0x00, 0x00, 0x04, 0x80, 0x03, 0x00, + 0x00, 0x4d, 0x7d, 0x03, 0x00, 0x00, 0x4d, 0x81, + 0x03, 0x00, 0x00, 0x0b, 0x04, 0x82, 0x03, 0x00, + 0x00, 0x4d, 0x7b, 0x03, 0x00, 0x00, 0x04, 0x83, + 0x03, 0x00, 0x00, 0x4d, 0x7d, 0x03, 0x00, 0x00, + 0x4d, 0x84, 0x03, 0x00, 0x00, 0x4d, 0x85, 0x03, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x86, 0x03, 0x00, + 0x00, 0x4d, 0x7e, 0x03, 0x00, 0x00, 0x04, 0x87, + 0x03, 0x00, 0x00, 0x4d, 0x88, 0x03, 0x00, 0x00, + 0x04, 0x89, 0x03, 0x00, 0x00, 0x4d, 0x8a, 0x03, + 0x00, 0x00, 0x04, 0x8b, 0x03, 0x00, 0x00, 0x4d, + 0x8c, 0x03, 0x00, 0x00, 0x04, 0x8d, 0x03, 0x00, + 0x00, 0x4d, 0x8e, 0x03, 0x00, 0x00, 0x04, 0x8f, + 0x03, 0x00, 0x00, 0x4d, 0x90, 0x03, 0x00, 0x00, + 0x04, 0x91, 0x03, 0x00, 0x00, 0x4d, 0x92, 0x03, + 0x00, 0x00, 0x4d, 0x93, 0x03, 0x00, 0x00, 0x0b, + 0x04, 0x86, 0x03, 0x00, 0x00, 0x4d, 0x7e, 0x03, + 0x00, 0x00, 0x04, 0x87, 0x03, 0x00, 0x00, 0x4d, + 0x88, 0x03, 0x00, 0x00, 0x04, 0x89, 0x03, 0x00, + 0x00, 0x4d, 0x8a, 0x03, 0x00, 0x00, 0x04, 0x8b, + 0x03, 0x00, 0x00, 0x4d, 0x8c, 0x03, 0x00, 0x00, + 0x04, 0x8d, 0x03, 0x00, 0x00, 0x4d, 0x8e, 0x03, + 0x00, 0x00, 0x04, 0x8f, 0x03, 0x00, 0x00, 0x4d, + 0x90, 0x03, 0x00, 0x00, 0x04, 0x91, 0x03, 0x00, + 0x00, 0x4d, 0x92, 0x03, 0x00, 0x00, 0x4d, 0x78, + 0x03, 0x00, 0x00, 0x4d, 0x94, 0x03, 0x00, 0x00, + 0x0b, 0x04, 0x95, 0x03, 0x00, 0x00, 0x4d, 0x96, + 0x03, 0x00, 0x00, 0x04, 0x97, 0x03, 0x00, 0x00, + 0x4d, 0x98, 0x03, 0x00, 0x00, 0x04, 0x99, 0x03, + 0x00, 0x00, 0x4d, 0x9a, 0x03, 0x00, 0x00, 0x04, + 0x9b, 0x03, 0x00, 0x00, 0x4d, 0x9c, 0x03, 0x00, + 0x00, 0x04, 0x9d, 0x03, 0x00, 0x00, 0x4d, 0x9e, + 0x03, 0x00, 0x00, 0x04, 0x9f, 0x03, 0x00, 0x00, + 0x4d, 0xa0, 0x03, 0x00, 0x00, 0x04, 0xa1, 0x03, + 0x00, 0x00, 0x4d, 0xa2, 0x03, 0x00, 0x00, 0x04, + 0xa3, 0x03, 0x00, 0x00, 0x4d, 0xa4, 0x03, 0x00, + 0x00, 0x04, 0xa5, 0x03, 0x00, 0x00, 0x4d, 0xa3, + 0x03, 0x00, 0x00, 0x04, 0xa6, 0x03, 0x00, 0x00, + 0x4d, 0xa7, 0x03, 0x00, 0x00, 0x04, 0xa8, 0x03, + 0x00, 0x00, 0x4d, 0xa9, 0x03, 0x00, 0x00, 0x04, + 0xaa, 0x03, 0x00, 0x00, 0x4d, 0xab, 0x03, 0x00, + 0x00, 0x04, 0xac, 0x03, 0x00, 0x00, 0x4d, 0xad, + 0x03, 0x00, 0x00, 0x04, 0xae, 0x03, 0x00, 0x00, + 0x4d, 0xaf, 0x03, 0x00, 0x00, 0x04, 0xb0, 0x03, + 0x00, 0x00, 0x4d, 0xb1, 0x03, 0x00, 0x00, 0x04, + 0xb2, 0x03, 0x00, 0x00, 0x4d, 0xb3, 0x03, 0x00, + 0x00, 0x04, 0xb4, 0x03, 0x00, 0x00, 0x4d, 0xb5, + 0x03, 0x00, 0x00, 0x04, 0xb6, 0x03, 0x00, 0x00, + 0x4d, 0xb7, 0x03, 0x00, 0x00, 0x04, 0xb8, 0x03, + 0x00, 0x00, 0x4d, 0xb9, 0x03, 0x00, 0x00, 0x04, + 0xba, 0x03, 0x00, 0x00, 0x4d, 0xbb, 0x03, 0x00, + 0x00, 0x04, 0xbc, 0x03, 0x00, 0x00, 0x4d, 0xbd, + 0x03, 0x00, 0x00, 0x4d, 0xbe, 0x03, 0x00, 0x00, + 0x4d, 0x45, 0x00, 0x00, 0x00, 0x24, 0x01, 0x00, + 0xcc, 0x28, 0xfe, 0x0e, 0x01, 0x00, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_zh_Hans_HK_size = 30777; + +const uint8_t intl_zh_Hans_HK[30777] = { + 0x01, 0xf5, 0x05, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x14, 0x7a, 0x68, 0x2d, 0x48, 0x61, 0x6e, 0x73, + 0x2d, 0x48, 0x4b, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x0e, + 0x7b, 0x31, 0x7d, 0x20, 0x7b, 0x30, 0x7d, 0x0a, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, 0x65, + 0x64, 0x69, 0x75, 0x6d, 0x08, 0x66, 0x75, 0x6c, + 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x05, 0x64, + 0x00, 0xe5, 0x65, 0x02, 0x64, 0x06, 0x63, 0x63, + 0x63, 0x02, 0x45, 0x07, 0x64, 0x00, 0xe5, 0x65, + 0x45, 0x00, 0x04, 0x45, 0x64, 0x0e, 0x45, 0x20, + 0x61, 0x68, 0x3a, 0x6d, 0x6d, 0x06, 0x45, 0x68, + 0x6d, 0x0c, 0x45, 0x48, 0x48, 0x3a, 0x6d, 0x6d, + 0x06, 0x45, 0x48, 0x6d, 0x14, 0x45, 0x20, 0x61, + 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x08, + 0x45, 0x68, 0x6d, 0x73, 0x12, 0x45, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x08, 0x45, + 0x48, 0x6d, 0x73, 0x07, 0x47, 0x00, 0x79, 0x00, + 0x74, 0x5e, 0x04, 0x47, 0x79, 0x0b, 0x47, 0x00, + 0x79, 0x00, 0x74, 0x5e, 0x4d, 0x00, 0x08, 0x67, + 0x0a, 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x0f, 0x47, + 0x00, 0x79, 0x00, 0x74, 0x5e, 0x4d, 0x00, 0x08, + 0x67, 0x64, 0x00, 0xe5, 0x65, 0x0c, 0x47, 0x79, + 0x4d, 0x4d, 0x4d, 0x64, 0x11, 0x47, 0x00, 0x79, + 0x00, 0x74, 0x5e, 0x4d, 0x00, 0x08, 0x67, 0x64, + 0x00, 0xe5, 0x65, 0x45, 0x00, 0x0e, 0x47, 0x79, + 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x07, 0x61, 0x00, + 0x68, 0x00, 0xf6, 0x65, 0x02, 0x68, 0x05, 0x48, + 0x00, 0xf6, 0x65, 0x02, 0x48, 0x0a, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x08, 0x48, 0x48, 0x6d, 0x6d, + 0x0a, 0x61, 0x68, 0x3a, 0x6d, 0x6d, 0x04, 0x68, + 0x6d, 0x04, 0x48, 0x6d, 0x10, 0x61, 0x68, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x06, 0x68, 0x6d, + 0x73, 0x10, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, + 0x73, 0x73, 0x06, 0x48, 0x6d, 0x73, 0x14, 0x76, + 0x20, 0x61, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x08, 0x68, 0x6d, 0x73, 0x76, 0x14, 0x76, + 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x08, 0x48, 0x6d, 0x73, 0x76, 0x0e, 0x76, + 0x20, 0x61, 0x68, 0x3a, 0x6d, 0x6d, 0x06, 0x68, + 0x6d, 0x76, 0x0e, 0x76, 0x20, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x06, 0x48, 0x6d, 0x76, 0x05, 0x4d, + 0x00, 0x08, 0x67, 0x02, 0x4d, 0x06, 0x64, 0x2f, + 0x4d, 0x04, 0x4d, 0x64, 0x0c, 0x45, 0x2c, 0x20, + 0x64, 0x2f, 0x4d, 0x06, 0x4d, 0x45, 0x64, 0x0a, + 0x64, 0x64, 0x2f, 0x4d, 0x4d, 0x08, 0x4d, 0x4d, + 0x64, 0x64, 0x06, 0x4c, 0x4c, 0x4c, 0x06, 0x4d, + 0x4d, 0x4d, 0x09, 0x4d, 0x00, 0x08, 0x67, 0x64, + 0x00, 0xe5, 0x65, 0x08, 0x4d, 0x4d, 0x4d, 0x64, + 0x0b, 0x4d, 0x00, 0x08, 0x67, 0x64, 0x00, 0xe5, + 0x65, 0x45, 0x00, 0x0a, 0x4d, 0x4d, 0x4d, 0x45, + 0x64, 0x0a, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x0c, + 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x64, 0x0a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x04, 0x6d, 0x73, 0x05, + 0x79, 0x00, 0x74, 0x5e, 0x02, 0x79, 0x06, 0x4d, + 0x2f, 0x79, 0x04, 0x79, 0x4d, 0x0a, 0x64, 0x2f, + 0x4d, 0x2f, 0x79, 0x06, 0x79, 0x4d, 0x64, 0x11, + 0x64, 0x00, 0x2f, 0x00, 0x4d, 0x00, 0x2f, 0x00, + 0x79, 0x00, 0x08, 0xff, 0x45, 0x00, 0x09, 0xff, + 0x08, 0x79, 0x4d, 0x45, 0x64, 0x08, 0x4d, 0x4d, + 0x2f, 0x79, 0x06, 0x79, 0x4d, 0x4d, 0x09, 0x79, + 0x00, 0x74, 0x5e, 0x4d, 0x00, 0x08, 0x67, 0x08, + 0x79, 0x4d, 0x4d, 0x4d, 0x0d, 0x79, 0x00, 0x74, + 0x5e, 0x4d, 0x00, 0x08, 0x67, 0x64, 0x00, 0xe5, + 0x65, 0x0a, 0x79, 0x4d, 0x4d, 0x4d, 0x64, 0x0f, + 0x79, 0x00, 0x74, 0x5e, 0x4d, 0x00, 0x08, 0x67, + 0x64, 0x00, 0xe5, 0x65, 0x45, 0x00, 0x0c, 0x79, + 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0a, 0x79, 0x4d, + 0x4d, 0x4d, 0x4d, 0x0d, 0x79, 0x00, 0x74, 0x5e, + 0x2c, 0x7b, 0x51, 0x00, 0x63, 0x5b, 0xa6, 0x5e, + 0x08, 0x79, 0x51, 0x51, 0x51, 0x0a, 0x79, 0x51, + 0x51, 0x51, 0x51, 0x20, 0x61, 0x76, 0x61, 0x69, + 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x73, 0x15, 0x79, 0x00, 0x74, + 0x5e, 0x4d, 0x00, 0x08, 0x67, 0x64, 0x00, 0xe5, + 0x65, 0x45, 0x00, 0x45, 0x00, 0x45, 0x00, 0x45, + 0x00, 0x14, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x45, + 0x45, 0x45, 0x45, 0x64, 0x0c, 0x79, 0x4d, 0x4d, + 0x4d, 0x4d, 0x64, 0x0c, 0x64, 0x2f, 0x4d, 0x2f, + 0x79, 0x79, 0x16, 0x64, 0x61, 0x74, 0x65, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x1a, 0x7a, + 0x7a, 0x7a, 0x7a, 0x20, 0x61, 0x68, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x12, 0x68, 0x6d, 0x6d, + 0x73, 0x73, 0x7a, 0x7a, 0x7a, 0x7a, 0x14, 0x7a, + 0x20, 0x61, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x08, 0x68, 0x6d, 0x73, 0x7a, 0x16, 0x74, + 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x73, 0x0e, 0x66, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x73, 0x0c, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x05, 0x31, 0x00, 0x08, 0x67, 0x05, 0x32, + 0x00, 0x08, 0x67, 0x05, 0x33, 0x00, 0x08, 0x67, + 0x05, 0x34, 0x00, 0x08, 0x67, 0x05, 0x35, 0x00, + 0x08, 0x67, 0x05, 0x36, 0x00, 0x08, 0x67, 0x05, + 0x37, 0x00, 0x08, 0x67, 0x05, 0x38, 0x00, 0x08, + 0x67, 0x05, 0x39, 0x00, 0x08, 0x67, 0x07, 0x31, + 0x00, 0x30, 0x00, 0x08, 0x67, 0x07, 0x31, 0x00, + 0x31, 0x00, 0x08, 0x67, 0x07, 0x31, 0x00, 0x32, + 0x00, 0x08, 0x67, 0x05, 0x00, 0x4e, 0x08, 0x67, + 0x05, 0x8c, 0x4e, 0x08, 0x67, 0x05, 0x09, 0x4e, + 0x08, 0x67, 0x05, 0xdb, 0x56, 0x08, 0x67, 0x05, + 0x94, 0x4e, 0x08, 0x67, 0x05, 0x6d, 0x51, 0x08, + 0x67, 0x05, 0x03, 0x4e, 0x08, 0x67, 0x05, 0x6b, + 0x51, 0x08, 0x67, 0x05, 0x5d, 0x4e, 0x08, 0x67, + 0x05, 0x41, 0x53, 0x08, 0x67, 0x07, 0x41, 0x53, + 0x00, 0x4e, 0x08, 0x67, 0x07, 0x41, 0x53, 0x8c, + 0x4e, 0x08, 0x67, 0x0c, 0x6d, 0x6f, 0x6e, 0x74, + 0x68, 0x73, 0x03, 0xe5, 0x65, 0x03, 0x00, 0x4e, + 0x03, 0x8c, 0x4e, 0x03, 0x09, 0x4e, 0x03, 0xdb, + 0x56, 0x03, 0x94, 0x4e, 0x03, 0x6d, 0x51, 0x05, + 0x68, 0x54, 0xe5, 0x65, 0x05, 0x68, 0x54, 0x00, + 0x4e, 0x05, 0x68, 0x54, 0x8c, 0x4e, 0x05, 0x68, + 0x54, 0x09, 0x4e, 0x05, 0x68, 0x54, 0xdb, 0x56, + 0x05, 0x68, 0x54, 0x94, 0x4e, 0x05, 0x68, 0x54, + 0x6d, 0x51, 0x07, 0x1f, 0x66, 0x1f, 0x67, 0xe5, + 0x65, 0x07, 0x1f, 0x66, 0x1f, 0x67, 0x00, 0x4e, + 0x07, 0x1f, 0x66, 0x1f, 0x67, 0x8c, 0x4e, 0x07, + 0x1f, 0x66, 0x1f, 0x67, 0x09, 0x4e, 0x07, 0x1f, + 0x66, 0x1f, 0x67, 0xdb, 0x56, 0x07, 0x1f, 0x66, + 0x1f, 0x67, 0x94, 0x4e, 0x07, 0x1f, 0x66, 0x1f, + 0x67, 0x6d, 0x51, 0x08, 0x64, 0x61, 0x79, 0x73, + 0x05, 0x5b, 0x4f, 0x86, 0x53, 0x08, 0x65, 0x72, + 0x61, 0x73, 0x05, 0x0a, 0x4e, 0x48, 0x53, 0x04, + 0x61, 0x6d, 0x05, 0x0b, 0x4e, 0x48, 0x53, 0x04, + 0x70, 0x6d, 0x14, 0x64, 0x61, 0x79, 0x50, 0x65, + 0x72, 0x69, 0x6f, 0x64, 0x73, 0x03, 0x63, 0x6b, + 0x03, 0x03, 0x4e, 0x03, 0x6b, 0x51, 0x03, 0x5d, + 0x4e, 0x03, 0x41, 0x53, 0x03, 0xac, 0x51, 0x03, + 0x4a, 0x81, 0x05, 0x63, 0x6b, 0x08, 0x67, 0x05, + 0xac, 0x51, 0x08, 0x67, 0x05, 0x4a, 0x81, 0x08, + 0x67, 0x07, 0x31, 0x00, 0x33, 0x00, 0x08, 0x67, + 0x07, 0x41, 0x53, 0x09, 0x4e, 0x08, 0x67, 0x08, + 0x45, 0x52, 0x41, 0x30, 0x08, 0x45, 0x52, 0x41, + 0x31, 0x06, 0x4d, 0x30, 0x31, 0x06, 0x4d, 0x30, + 0x32, 0x06, 0x4d, 0x30, 0x33, 0x06, 0x4d, 0x30, + 0x34, 0x06, 0x4d, 0x30, 0x35, 0x06, 0x4d, 0x30, + 0x36, 0x06, 0x4d, 0x30, 0x37, 0x06, 0x4d, 0x30, + 0x38, 0x06, 0x4d, 0x30, 0x39, 0x06, 0x4d, 0x31, + 0x30, 0x06, 0x4d, 0x31, 0x31, 0x06, 0x4d, 0x31, + 0x32, 0x07, 0x6c, 0x51, 0x43, 0x51, 0x4d, 0x52, + 0x05, 0x6c, 0x51, 0x43, 0x51, 0x07, 0x7f, 0x89, + 0x43, 0x51, 0x4d, 0x52, 0x05, 0x7f, 0x89, 0x43, + 0x51, 0x07, 0xf0, 0x95, 0x37, 0x00, 0x08, 0x67, + 0x07, 0xf0, 0x95, 0x03, 0x4e, 0x08, 0x67, 0x09, + 0x0c, 0x5e, 0x2f, 0x4f, 0x65, 0x67, 0x86, 0x53, + 0x07, 0x70, 0x53, 0xa6, 0x5e, 0x86, 0x53, 0x09, + 0x0a, 0x4f, 0xaf, 0x65, 0x70, 0x51, 0x86, 0x53, + 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, 0x36, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, + 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x36, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x48, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x36, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x36, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, + 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x1d, 0x57, 0x00, 0x61, 0x00, 0x64, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, + 0x52, 0x00, 0x65, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, 0x59, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x2d, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6d, 0x00, + 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x2b, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x2d, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, 0x2d, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x2d, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x2a, 0x4a, 0x69, + 0x6e, 0x67, 0x6f, 0x2d, 0x6b, 0x65, 0x69, 0x75, + 0x6e, 0x20, 0x28, 0x37, 0x36, 0x37, 0x2d, 0x37, + 0x37, 0x30, 0x29, 0x1d, 0x48, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x38, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x1f, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x2d, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x2d, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, + 0x45, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x1f, 0x44, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1d, 0x4a, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x4b, + 0x00, 0x61, 0x00, 0x6a, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1f, 0x53, 0x00, 0x61, 0x00, 0x69, + 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x20, 0x54, 0x65, 0x6e, 0x2d, 0x61, 0x6e, + 0x20, 0x28, 0x38, 0x35, 0x37, 0x2d, 0x38, 0x35, + 0x39, 0x29, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x21, 0x47, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x61, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x1f, 0x45, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, + 0x4a, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1b, + 0x4c, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, + 0x41, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x1f, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, 0x45, + 0x00, 0x69, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, 0x00, + 0x73, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x69, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x27, 0x4a, 0x00, 0x69, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x29, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4c, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x61, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x25, 0x4a, 0x00, 0x4d, + 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x24, 0x54, 0x65, + 0x6e, 0x2d, 0x65, 0x69, 0x20, 0x28, 0x31, 0x31, + 0x31, 0x30, 0x2d, 0x31, 0x31, 0x31, 0x33, 0x29, + 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, 0x79, + 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x21, 0x48, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x44, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, 0x4d, + 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, + 0x48, 0x00, 0x65, 0x00, 0x69, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x27, 0x45, 0x00, 0x69, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1f, 0x4c, 0x01, 0x68, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, + 0x61, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, + 0x41, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x4a, 0x00, 0x69, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x59, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, + 0x00, 0x75, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x29, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x29, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x4d, + 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, + 0x6e, 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x4d, 0x01, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x27, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x75, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x29, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, 0x29, + 0x52, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x45, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x23, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x4c, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, 0x21, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x61, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x27, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6d, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x27, 0x4b, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, + 0x4b, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4c, 0x01, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x74, 0x00, 0x73, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x25, 0x48, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x4d, + 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x27, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x21, 0x4c, 0x01, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x21, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, + 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, 0x4b, + 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, + 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x27, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, + 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, 0x4d, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x72, 0x00, 0x65, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x62, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x27, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x48, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4d, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4d, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x02, 0x54, 0x02, 0x53, 0x19, + 0x27, 0x59, 0x16, 0x53, 0x20, 0x00, 0x28, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x19, 0x7d, 0x76, 0xc9, 0x96, 0x20, 0x00, 0x28, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x36, 0x00, 0x37, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x19, 0x7d, 0x76, 0xe4, 0x51, 0x20, 0x00, + 0x28, 0x00, 0x36, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x36, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x19, 0x31, 0x67, 0x1f, 0x9e, 0x20, + 0x00, 0x28, 0x00, 0x36, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x19, 0x27, 0x59, 0x9d, 0x5b, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x19, 0x86, 0x5e, 0x91, + 0x4e, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x19, 0x8c, 0x54, + 0xdc, 0x94, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, 0x19, 0x75, + 0x70, 0x9f, 0x9f, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x19, + 0x7b, 0x51, 0x01, 0x80, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x19, 0x5e, 0x79, 0x9f, 0x9f, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x19, 0x29, 0x59, 0x73, 0x5e, 0x20, 0x00, + 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x1d, 0x29, 0x59, 0x73, 0x5e, 0x1f, + 0x61, 0x9d, 0x5b, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1d, + 0x29, 0x59, 0x73, 0x5e, 0xdc, 0x80, 0x9d, 0x5b, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x37, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x1d, 0x29, 0x59, 0x73, + 0x5e, 0x9d, 0x5b, 0x57, 0x5b, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x1d, 0x29, 0x59, 0x73, 0x5e, 0x5e, 0x79, + 0xa4, 0x62, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x37, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, 0x5e, + 0x79, 0xa4, 0x62, 0x6f, 0x66, 0x91, 0x4e, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x19, 0x9d, 0x5b, 0x9f, 0x9f, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x37, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x19, 0x29, 0x59, 0x94, + 0x5e, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x37, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x19, 0xf6, 0x5e, + 0x86, 0x53, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x19, 0x27, + 0x59, 0x0c, 0x54, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, 0x19, + 0x18, 0x5f, 0xc1, 0x4e, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x19, 0x29, 0x59, 0x7f, 0x95, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x19, 0x7f, 0x62, 0x8c, 0x54, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x19, 0x09, 0x56, 0x65, 0x79, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x19, 0xc1, 0x4e, 0xff, 0x5b, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x19, 0x50, 0x9f, 0x61, + 0x88, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x19, 0x29, 0x59, + 0x89, 0x5b, 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, 0x38, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, 0x19, 0x1e, + 0x8d, 0xc2, 0x89, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, 0x19, + 0x43, 0x51, 0x86, 0x5e, 0x20, 0x00, 0x28, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x19, 0xc1, 0x4e, 0x8c, 0x54, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x19, 0xbd, 0x5b, 0x73, 0x5e, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x19, 0x0c, 0x66, 0xf0, 0x6c, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x19, 0xf6, 0x5e, 0x9c, 0x55, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x19, 0xf6, 0x5e, 0x7f, + 0x95, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x19, 0x7f, 0x62, + 0x73, 0x5e, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, 0x19, 0x29, + 0x59, 0x86, 0x5e, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, 0x19, + 0x29, 0x59, 0x86, 0x53, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x19, 0x29, 0x59, 0xb7, 0x5f, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x19, 0x94, 0x5e, 0x8c, 0x54, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x19, 0xb7, 0x5e, 0xdd, 0x4f, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x19, 0x89, 0x5b, 0x8c, 0x54, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x19, 0x29, 0x59, 0x84, + 0x79, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x19, 0x29, 0x59, + 0xf6, 0x5e, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x37, 0x00, 0x36, 0x00, 0x29, 0x00, 0x19, 0x1e, + 0x8d, 0x43, 0x51, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, 0x19, + 0x29, 0x59, 0x43, 0x51, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x19, 0x38, 0x6c, 0xc2, 0x89, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x19, 0xbd, 0x5b, 0x8c, 0x54, 0x20, 0x00, + 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x19, 0x38, 0x6c, 0xf6, 0x5e, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x19, 0x38, 0x6c, 0x5a, 0x79, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x19, 0x63, 0x6b, 0x86, + 0x53, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, 0x39, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x19, 0x7f, 0x95, + 0xb7, 0x5f, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1b, 0x7f, + 0x95, 0xdd, 0x4f, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1d, 0xbd, 0x5b, 0x18, 0x5f, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1d, 0x7f, + 0x95, 0x8c, 0x54, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x1d, 0xbd, 0x5b, 0xc1, 0x4e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1d, 0xbb, 0x6c, 0x89, 0x5b, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0x07, 0x4e, + 0xff, 0x5b, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x1d, 0x7f, 0x95, 0x43, 0x51, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, + 0x7f, 0x95, 0x86, 0x53, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x1d, 0x7f, 0x95, 0x45, + 0x4e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1d, 0xbd, 0x5b, 0xb7, 0x5f, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1d, 0x38, + 0x6c, 0x7f, 0x62, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x1d, 0x29, 0x59, 0x9c, 0x55, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x1d, 0xb7, 0x5e, 0x73, 0x5e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x1d, 0xbb, 0x6c, + 0x86, 0x53, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x1d, 0xf6, 0x5e, 0x45, 0x4e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, + 0x7f, 0x62, 0xdd, 0x4f, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x29, 0x00, 0x1d, 0x63, 0x6b, 0x86, + 0x53, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1d, 0x38, 0x6c, 0xdd, 0x4f, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0x94, + 0x5e, 0xb7, 0x5f, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x1d, 0xbd, 0x5b, 0xbb, 0x6c, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1d, 0x09, 0x56, 0xdd, 0x4f, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x1d, 0x38, 0x6c, + 0x7f, 0x95, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x1d, 0x7f, 0x62, 0xb7, 0x5f, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1d, + 0xb7, 0x5e, 0x8c, 0x54, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1d, 0x7f, 0x95, 0xbb, + 0x6c, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x1d, 0x09, 0x56, 0x7f, 0x62, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x29, + 0x59, 0xc1, 0x4e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x1d, 0x29, 0x59, 0x38, 0x6c, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x1d, 0x38, 0x6c, 0x45, 0x4e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x43, 0x51, + 0x38, 0x6c, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x1d, 0xdd, 0x4f, 0x89, 0x5b, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, + 0x29, 0x59, 0xbb, 0x6c, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x1d, 0x27, 0x59, 0xbb, + 0x6c, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1d, 0x29, 0x59, 0x7f, 0x62, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1d, 0x7f, + 0x95, 0x7f, 0x62, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x1d, 0xdd, 0x4f, 0xf6, 0x5e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1d, 0x38, 0x6c, 0xbb, 0x6c, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x1d, 0xb7, 0x5e, + 0xbb, 0x6c, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1d, 0x29, 0x59, 0x7b, 0x51, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1d, + 0x45, 0x4e, 0x89, 0x5b, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1d, 0xc1, 0x4e, 0x73, + 0x5e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1d, 0x45, 0x4e, 0xff, 0x5b, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1d, 0xdd, + 0x4f, 0x43, 0x51, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1d, 0x73, 0x5e, 0xbb, 0x6c, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x1d, 0x38, 0x6c, 0x86, 0x53, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, 0x94, 0x5e, + 0xdd, 0x4f, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x1d, 0x7f, 0x95, 0xbd, 0x5b, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1d, + 0x38, 0x6c, 0x07, 0x4e, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x1d, 0xc1, 0x4e, 0x89, + 0x5b, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x1d, 0x09, 0x56, 0x94, 0x5e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, 0x7f, + 0x62, 0x89, 0x5b, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x1d, 0x89, 0x5b, 0x43, 0x51, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x1d, 0xbb, 0x6c, 0x7f, 0x62, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, 0x7b, 0x51, + 0x8c, 0x54, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x1d, 0xff, 0x5b, 0x38, 0x6c, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, + 0x43, 0x51, 0x86, 0x53, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x1d, 0x87, 0x65, 0xbb, + 0x6c, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x1d, 0xfa, 0x5e, 0x45, 0x4e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1d, 0x63, + 0x6b, 0xbb, 0x6c, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1d, 0xfa, 0x5e, 0xc1, 0x4e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1d, 0x43, 0x51, 0x45, 0x4e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x1d, 0xfa, 0x5e, + 0x38, 0x6c, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x1d, 0x7f, 0x62, 0x43, 0x51, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, + 0xfa, 0x5e, 0x86, 0x53, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x1d, 0xfa, 0x5e, 0xdd, + 0x4f, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x1d, 0x7f, 0x62, 0x45, 0x4e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1d, 0x1e, + 0x8d, 0x94, 0x5e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1d, 0x43, 0x51, 0xc1, 0x4e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x1d, 0x09, 0x56, 0x84, 0x79, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, 0x89, 0x5b, + 0x1e, 0x8d, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x32, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x1d, 0xbd, 0x5b, 0x9c, 0x55, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1d, + 0x1e, 0x8d, 0x38, 0x6c, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x29, 0x00, 0x1d, 0x29, 0x59, 0x8f, + 0x79, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1d, 0x87, 0x65, 0x86, 0x53, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1d, 0x09, + 0x56, 0x6f, 0x79, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x1d, 0x86, 0x53, 0xc1, 0x4e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x1d, 0xf6, 0x5e, 0x94, 0x5e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x1d, 0xc1, 0x4e, + 0xbb, 0x6c, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, + 0x29, 0x00, 0x1d, 0xbd, 0x5b, 0x43, 0x51, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, + 0x9d, 0x5b, 0xbb, 0x6c, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x1d, 0xfa, 0x5e, 0x7f, + 0x95, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x1d, 0xb7, 0x5e, 0x43, 0x51, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, 0x63, + 0x6b, 0x09, 0x56, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1d, 0x63, 0x6b, 0x43, 0x51, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x1d, 0x87, 0x65, 0x94, 0x5e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, 0x18, 0x5f, + 0x7f, 0x95, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1d, 0x87, 0x65, 0x38, 0x6c, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1d, + 0xfa, 0x5e, 0xbb, 0x6c, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x1d, 0x18, 0x5f, 0x89, + 0x5b, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x1d, 0x63, 0x6b, 0x94, 0x5e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x33, 0x00, 0x29, 0x00, 0x1d, 0x38, + 0x6c, 0xc1, 0x4e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1d, 0x63, 0x6b, 0x89, 0x5b, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x1d, 0x72, 0x5e, 0x43, 0x51, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x1d, 0x09, 0x56, + 0x43, 0x51, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x1d, 0xb7, 0x5f, 0xbb, 0x6c, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, + 0xf6, 0x5e, 0x86, 0x5e, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1d, 0x94, 0x5e, 0x7f, + 0x95, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x1d, 0x63, 0x6b, 0x8c, 0x54, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, 0x87, + 0x65, 0xdd, 0x4f, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1d, 0x43, 0x51, 0x94, 0x5e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1d, 0x43, 0x51, 0xa8, 0x4e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0x63, 0x6b, + 0x2d, 0x4e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x1d, 0x09, 0x56, 0x86, 0x53, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1d, + 0x43, 0x51, 0xb7, 0x5f, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1d, 0x43, 0x51, 0x18, + 0x5f, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x1d, 0xfa, 0x5e, 0x66, 0x6b, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, 0x1d, 0xf6, + 0x5e, 0x43, 0x51, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x1d, 0x74, 0x51, 0xfd, 0x56, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x1d, 0x63, 0x6b, 0x73, 0x5e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x1d, 0xfa, 0x5e, + 0xb7, 0x5f, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x1d, 0x87, 0x65, 0x2d, 0x4e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1d, + 0x29, 0x59, 0x88, 0x63, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x1d, 0xb7, 0x5e, 0x86, + 0x53, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1d, 0x18, 0x5f, 0x8c, 0x54, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, 0x43, + 0x51, 0x2d, 0x4e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x1d, 0xf3, 0x81, 0xb7, 0x5f, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x1d, 0x09, 0x56, 0x86, 0x5e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x1d, 0xb7, 0x5e, + 0x94, 0x5e, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x1d, 0x0e, 0x66, 0xb7, 0x5f, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1d, + 0x94, 0x5e, 0x38, 0x6c, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x1d, 0x63, 0x6b, 0x7f, + 0x95, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x1d, 0x38, 0x6c, 0xab, 0x4e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, 0x09, + 0x56, 0x09, 0x54, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1d, 0x87, 0x65, 0x89, 0x5b, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x1d, 0x9d, 0x5b, 0xb7, 0x5f, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x1d, 0xab, 0x4e, + 0xb7, 0x5f, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x1d, 0xb7, 0x5e, 0x63, 0x6b, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, + 0x7f, 0x95, 0x84, 0x79, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x1d, 0xbd, 0x5b, 0x63, + 0x6b, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x1d, 0x87, 0x65, 0x63, 0x6b, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, 0x94, + 0x5e, 0xc1, 0x4e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x1d, 0x87, 0x65, 0x0e, 0x66, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x1d, 0x7f, 0x95, 0xab, 0x4e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x29, 0x00, 0x1d, 0xf6, 0x5e, + 0xb7, 0x5f, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x1d, 0x0e, 0x66, 0x94, 0x5e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, + 0x87, 0x65, 0x9f, 0x9f, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1d, 0x38, 0x6c, 0x63, + 0x6b, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1d, 0x27, 0x59, 0x38, 0x6c, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0xab, + 0x4e, 0x84, 0x79, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x29, 0x00, 0x1d, 0x29, 0x59, 0x87, 0x65, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x1d, 0x18, 0x5f, 0xbb, 0x6c, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x38, 0x6c, + 0x84, 0x79, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x1d, 0x43, 0x51, 0x9f, 0x9f, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x1d, + 0x29, 0x59, 0x63, 0x6b, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x1d, 0x87, 0x65, 0x84, + 0x79, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x35, 0x00, 0x39, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x1d, 0x86, 0x5e, 0x7f, 0x95, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1d, 0x43, + 0x51, 0x8c, 0x54, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1d, 0xbd, 0x5b, 0x38, 0x6c, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1d, 0x63, 0x6b, 0xdd, 0x4f, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x86, 0x5e, + 0x89, 0x5b, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x1d, 0x7f, 0x62, 0x94, 0x5e, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x1d, + 0x0e, 0x66, 0x86, 0x53, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x1d, 0x07, 0x4e, 0xbb, + 0x6c, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x1d, 0xbd, 0x5b, 0x87, 0x65, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, 0x1d, 0xf6, + 0x5e, 0x9d, 0x5b, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x1d, 0x29, 0x59, 0x8c, 0x54, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x1d, 0x1e, 0x8d, 0xab, 0x4e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, 0x43, 0x51, + 0x84, 0x79, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1d, 0x9d, 0x5b, 0x38, 0x6c, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, + 0x63, 0x6b, 0xb7, 0x5f, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x1d, 0xab, 0x4e, 0xdd, + 0x4f, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x1d, 0x43, 0x51, 0x87, 0x65, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x33, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, 0xbd, + 0x5b, 0xdd, 0x4f, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1d, 0xf6, 0x5e, 0xab, 0x4e, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x1d, 0xbd, 0x5b, 0xf6, 0x5e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, 0x9d, 0x5b, + 0x86, 0x53, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1d, 0x0e, 0x66, 0x8c, 0x54, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x36, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1d, + 0x89, 0x5b, 0x38, 0x6c, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1d, 0x29, 0x59, 0x0e, + 0x66, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x1d, 0xbd, 0x5b, 0x3f, 0x65, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, 0xab, + 0x4e, 0x8c, 0x54, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1d, 0x87, 0x65, 0x16, 0x53, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x1d, 0x87, 0x65, 0x3f, 0x65, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x1d, 0x29, 0x59, + 0xdd, 0x4f, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x33, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1d, 0x18, 0x5f, 0x16, 0x53, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, + 0x09, 0x56, 0x38, 0x6c, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1d, 0x89, 0x5b, 0x3f, + 0x65, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x35, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x1d, 0x07, 0x4e, 0xf6, 0x5e, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x1d, 0x87, + 0x65, 0x45, 0x4e, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1d, 0x43, 0x51, 0xbb, 0x6c, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x1d, 0x86, 0x5e, 0x94, 0x5e, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x05, 0x0e, 0x66, + 0xbb, 0x6c, 0x05, 0x27, 0x59, 0x63, 0x6b, 0x05, + 0x2d, 0x66, 0x8c, 0x54, 0x05, 0x73, 0x5e, 0x10, + 0x62, 0x07, 0xe2, 0x6c, 0xaf, 0x65, 0x86, 0x53, + 0x07, 0x11, 0x6c, 0xfd, 0x56, 0x4d, 0x52, 0x05, + 0x11, 0x6c, 0xfd, 0x56, 0x12, 0x63, 0x61, 0x6c, + 0x65, 0x6e, 0x64, 0x61, 0x72, 0x73, 0x08, 0x64, + 0x61, 0x74, 0x65, 0x08, 0x6c, 0x61, 0x74, 0x6e, + 0x04, 0x6e, 0x75, 0x10, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0x1e, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, + 0x74, 0x65, 0x72, 0x6e, 0x26, 0x7b, 0x6d, 0x69, + 0x6e, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0x1e, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, + 0x65, 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, + 0x0e, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, + 0x24, 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x79, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0x3a, 0x7b, 0x6d, 0x69, 0x6e, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, + 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x7d, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x79, 0x2a, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0x7b, 0x70, 0x65, 0x72, 0x63, + 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, + 0x40, 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, + 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x7d, 0x7b, 0x70, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, + 0x7d, 0x0e, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, + 0x74, 0x10, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, + 0x6e, 0x73, 0x02, 0x2e, 0x02, 0x2c, 0x0a, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x06, 0x4e, 0x61, 0x4e, + 0x06, 0x6e, 0x61, 0x6e, 0x02, 0x2b, 0x10, 0x70, + 0x6c, 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, + 0x2d, 0x12, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, + 0x69, 0x67, 0x6e, 0x02, 0x25, 0x16, 0x70, 0x65, + 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, + 0x6e, 0x03, 0x1e, 0x22, 0x10, 0x69, 0x6e, 0x66, + 0x69, 0x6e, 0x69, 0x74, 0x79, 0x0e, 0x68, 0x61, + 0x6e, 0x69, 0x64, 0x65, 0x63, 0x0e, 0x73, 0x79, + 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x06, 0x41, 0x55, + 0x24, 0x06, 0x41, 0x55, 0x44, 0x04, 0x52, 0x24, + 0x06, 0x42, 0x52, 0x4c, 0x06, 0x43, 0x41, 0x24, + 0x06, 0x43, 0x41, 0x44, 0x06, 0x43, 0x4e, 0xa5, + 0x06, 0x43, 0x4e, 0x59, 0x03, 0xac, 0x20, 0x06, + 0x45, 0x55, 0x52, 0x02, 0xa3, 0x06, 0x47, 0x42, + 0x50, 0x06, 0x48, 0x4b, 0x24, 0x06, 0x48, 0x4b, + 0x44, 0x06, 0x49, 0x4c, 0x53, 0x06, 0x49, 0x4c, + 0x52, 0x03, 0xaa, 0x20, 0x03, 0xb9, 0x20, 0x06, + 0x49, 0x4e, 0x52, 0x06, 0x4a, 0x50, 0xa5, 0x06, + 0x4a, 0x50, 0x59, 0x03, 0xe6, 0xff, 0x06, 0x4b, + 0x52, 0x57, 0x06, 0x4d, 0x58, 0x24, 0x06, 0x4d, + 0x58, 0x4e, 0x06, 0x4e, 0x5a, 0x24, 0x06, 0x4e, + 0x5a, 0x44, 0x06, 0x4e, 0x54, 0x24, 0x06, 0x54, + 0x57, 0x44, 0x06, 0x55, 0x53, 0x24, 0x06, 0x55, + 0x53, 0x44, 0x03, 0xab, 0x20, 0x06, 0x56, 0x4e, + 0x44, 0x08, 0x46, 0x43, 0x46, 0x41, 0x06, 0x58, + 0x41, 0x46, 0x06, 0x45, 0x43, 0x24, 0x06, 0x58, + 0x43, 0x44, 0x06, 0x43, 0x46, 0x41, 0x06, 0x58, + 0x4f, 0x46, 0x08, 0x43, 0x46, 0x50, 0x46, 0x06, + 0x58, 0x50, 0x46, 0x14, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x62, 0x6e, + 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, + 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, + 0x64, 0x61, 0x74, 0x61, 0x2f, 0x6a, 0x73, 0x6f, + 0x6e, 0x70, 0x2f, 0x7a, 0x68, 0x2d, 0x48, 0x61, + 0x6e, 0x73, 0x2d, 0x48, 0x4b, 0x2e, 0x6a, 0x73, + 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, + 0x00, 0x27, 0x00, 0xa1, 0x01, 0x8a, 0x6b, 0x01, + 0xa0, 0x01, 0x00, 0x00, 0x00, 0x39, 0xd0, 0x00, + 0x00, 0x00, 0x43, 0xd1, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd2, 0x00, 0x00, 0x00, 0x4d, 0xd3, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd4, 0x00, 0x00, 0x00, + 0x04, 0xd5, 0x00, 0x00, 0x00, 0x04, 0xd6, 0x00, + 0x00, 0x00, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x04, + 0xd8, 0x00, 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, + 0x00, 0x04, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdb, + 0x00, 0x00, 0x00, 0x04, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0xdd, 0x00, 0x00, 0x00, 0x04, 0xde, 0x00, + 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, 0x04, + 0xe0, 0x00, 0x00, 0x00, 0x04, 0xe1, 0x00, 0x00, + 0x00, 0x04, 0xe2, 0x00, 0x00, 0x00, 0x26, 0x0f, + 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x0a, 0x4d, + 0xe4, 0x00, 0x00, 0x00, 0x0a, 0x4d, 0xe5, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, + 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0xec, 0x00, 0x00, 0x00, 0x04, 0xed, + 0x00, 0x00, 0x00, 0x4d, 0xee, 0x00, 0x00, 0x00, + 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, 0xf0, 0x00, + 0x00, 0x00, 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, + 0xf2, 0x00, 0x00, 0x00, 0x04, 0xf3, 0x00, 0x00, + 0x00, 0x4d, 0xf4, 0x00, 0x00, 0x00, 0x04, 0xf5, + 0x00, 0x00, 0x00, 0x4d, 0xf6, 0x00, 0x00, 0x00, + 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xf8, 0x00, + 0x00, 0x00, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, + 0xfa, 0x00, 0x00, 0x00, 0x04, 0xfb, 0x00, 0x00, + 0x00, 0x4d, 0xfc, 0x00, 0x00, 0x00, 0x04, 0xfd, + 0x00, 0x00, 0x00, 0x4d, 0xfe, 0x00, 0x00, 0x00, + 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x01, + 0x00, 0x00, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, + 0x02, 0x01, 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, + 0x00, 0x4d, 0x04, 0x01, 0x00, 0x00, 0x04, 0x05, + 0x01, 0x00, 0x00, 0x4d, 0x06, 0x01, 0x00, 0x00, + 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0x08, 0x01, + 0x00, 0x00, 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, + 0x09, 0x01, 0x00, 0x00, 0x04, 0x0a, 0x01, 0x00, + 0x00, 0x4d, 0x0b, 0x01, 0x00, 0x00, 0x04, 0x0c, + 0x01, 0x00, 0x00, 0x4d, 0x0d, 0x01, 0x00, 0x00, + 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, 0x0f, 0x01, + 0x00, 0x00, 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, + 0x11, 0x01, 0x00, 0x00, 0x04, 0x12, 0x01, 0x00, + 0x00, 0x4d, 0x13, 0x01, 0x00, 0x00, 0x04, 0x14, + 0x01, 0x00, 0x00, 0x4d, 0x15, 0x01, 0x00, 0x00, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, 0x17, 0x01, + 0x00, 0x00, 0x04, 0x18, 0x01, 0x00, 0x00, 0x4d, + 0x19, 0x01, 0x00, 0x00, 0x04, 0x1a, 0x01, 0x00, + 0x00, 0x4d, 0x1b, 0x01, 0x00, 0x00, 0x04, 0x1c, + 0x01, 0x00, 0x00, 0x4d, 0x1d, 0x01, 0x00, 0x00, + 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, 0x1f, 0x01, + 0x00, 0x00, 0x04, 0x20, 0x01, 0x00, 0x00, 0x4d, + 0x21, 0x01, 0x00, 0x00, 0x04, 0x22, 0x01, 0x00, + 0x00, 0x4d, 0x23, 0x01, 0x00, 0x00, 0x04, 0x20, + 0x01, 0x00, 0x00, 0x4d, 0x24, 0x01, 0x00, 0x00, + 0x04, 0x20, 0x01, 0x00, 0x00, 0x4d, 0x25, 0x01, + 0x00, 0x00, 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, + 0x27, 0x01, 0x00, 0x00, 0x04, 0x28, 0x01, 0x00, + 0x00, 0x4d, 0x29, 0x01, 0x00, 0x00, 0x04, 0x2a, + 0x01, 0x00, 0x00, 0x4d, 0x2b, 0x01, 0x00, 0x00, + 0x04, 0x2c, 0x01, 0x00, 0x00, 0x4d, 0x2d, 0x01, + 0x00, 0x00, 0x04, 0x2e, 0x01, 0x00, 0x00, 0x4d, + 0x2f, 0x01, 0x00, 0x00, 0x04, 0x30, 0x01, 0x00, + 0x00, 0x4d, 0x31, 0x01, 0x00, 0x00, 0x04, 0x32, + 0x01, 0x00, 0x00, 0x4d, 0x33, 0x01, 0x00, 0x00, + 0x04, 0x34, 0x01, 0x00, 0x00, 0x4d, 0x35, 0x01, + 0x00, 0x00, 0x04, 0x36, 0x01, 0x00, 0x00, 0x4d, + 0x37, 0x01, 0x00, 0x00, 0x04, 0x32, 0x01, 0x00, + 0x00, 0x4d, 0x38, 0x01, 0x00, 0x00, 0x04, 0x39, + 0x01, 0x00, 0x00, 0x4d, 0x3a, 0x01, 0x00, 0x00, + 0x04, 0x39, 0x01, 0x00, 0x00, 0x4d, 0x3b, 0x01, + 0x00, 0x00, 0x4d, 0x3c, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x3d, 0x01, 0x00, 0x00, 0x4d, 0x3e, 0x01, + 0x00, 0x00, 0x04, 0x34, 0x01, 0x00, 0x00, 0x4d, + 0x3f, 0x01, 0x00, 0x00, 0x04, 0x34, 0x01, 0x00, + 0x00, 0x4d, 0x35, 0x01, 0x00, 0x00, 0x04, 0x40, + 0x01, 0x00, 0x00, 0x4d, 0x2d, 0x01, 0x00, 0x00, + 0x4d, 0x41, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x42, + 0x01, 0x00, 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, + 0x04, 0x44, 0x01, 0x00, 0x00, 0x4d, 0x45, 0x01, + 0x00, 0x00, 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, + 0x0b, 0x01, 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, + 0x00, 0x4d, 0x08, 0x01, 0x00, 0x00, 0x4d, 0x46, + 0x01, 0x00, 0x00, 0x4d, 0x47, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x0b, 0xbe, 0x00, 0xbe, 0x01, 0xbe, + 0x02, 0xbe, 0x03, 0xbe, 0x04, 0xbe, 0x05, 0xbe, + 0x06, 0xbe, 0x07, 0xbe, 0x08, 0xbe, 0x09, 0xbe, + 0x0a, 0xbe, 0x0b, 0x26, 0x0c, 0x00, 0x4d, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x61, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x78, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x48, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x79, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, + 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0xd5, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x7f, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, + 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, + 0x84, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, + 0x04, 0x88, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x86, 0x01, + 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x61, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7a, + 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, + 0x04, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, + 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x4d, + 0xd6, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x0c, + 0xbe, 0x0d, 0xbe, 0x0e, 0xbe, 0x0f, 0xbe, 0x10, + 0xbe, 0x11, 0xbe, 0x12, 0xbe, 0x13, 0xbe, 0x14, + 0xbe, 0x15, 0xbe, 0x16, 0xbe, 0x17, 0xbe, 0x18, + 0x26, 0x0d, 0x00, 0x4d, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, + 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x61, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, + 0x04, 0x8c, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x79, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, + 0x7e, 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x7f, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, + 0x04, 0x83, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, + 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x86, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, 0x04, 0x88, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, + 0x00, 0x00, 0x04, 0x88, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x61, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x77, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, + 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x19, 0xbe, 0x1a, + 0xbe, 0x1b, 0xbe, 0x1c, 0xbe, 0x1d, 0xbe, 0x1e, + 0xbe, 0x1f, 0xbe, 0x20, 0xbe, 0x21, 0xbe, 0x22, + 0xbe, 0x23, 0xbe, 0x24, 0xbe, 0x25, 0x26, 0x0d, + 0x00, 0x4d, 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, + 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x61, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x8b, 0x01, + 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x26, 0xbe, 0x27, 0xbe, 0x28, 0xbe, + 0x29, 0xbe, 0x2a, 0xbe, 0x2b, 0xbe, 0x2c, 0xbe, + 0x2d, 0xbe, 0x2e, 0xbe, 0x2f, 0xbe, 0x30, 0xbe, + 0x31, 0xbe, 0x32, 0x26, 0x0d, 0x00, 0x4d, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x89, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x61, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x48, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x8b, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x8b, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, + 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, + 0x4d, 0xd9, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x33, 0xbe, 0x34, 0xbe, 0x35, 0xbe, 0x36, 0xbe, + 0x37, 0xbe, 0x38, 0xbe, 0x39, 0xbe, 0x3a, 0xbe, + 0x3b, 0xbe, 0x3c, 0xbe, 0x3d, 0xbe, 0x3e, 0x26, + 0x0c, 0x00, 0x4d, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, + 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, + 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, + 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, + 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, + 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, + 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, + 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, + 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, + 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, + 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, + 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, + 0x04, 0x96, 0x01, 0x00, 0x00, 0x04, 0x97, 0x01, + 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x61, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x77, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x8b, 0x01, 0x00, + 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0x48, 0x01, 0x00, 0x00, 0x04, 0x8b, + 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, 0x01, + 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, + 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x4d, + 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x3f, 0xbe, 0x40, 0xbe, 0x41, 0xbe, 0x42, + 0xbe, 0x43, 0xbe, 0x44, 0xbe, 0x45, 0xbe, 0x46, + 0xbe, 0x47, 0xbe, 0x48, 0xbe, 0x49, 0xbe, 0x4a, + 0x26, 0x0c, 0x00, 0x4d, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x61, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, + 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, + 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, + 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x99, 0x01, + 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, + 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, + 0x00, 0x26, 0x04, 0x00, 0x4d, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, + 0x01, 0x00, 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, + 0x04, 0x9c, 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x99, 0x01, + 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x04, + 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, + 0x00, 0x26, 0x04, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, + 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x4b, 0xbe, 0x4c, 0xbe, 0x4d, 0xbe, 0x4e, 0xbe, + 0x4f, 0xbe, 0x50, 0xbe, 0x51, 0xbe, 0x52, 0xbe, + 0x53, 0xbe, 0x54, 0xbe, 0x55, 0xbe, 0x56, 0xbe, + 0x57, 0xbe, 0x58, 0x26, 0x0e, 0x00, 0x4d, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, + 0x89, 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, + 0x00, 0x26, 0x0e, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, + 0x00, 0x00, 0x04, 0x9e, 0x01, 0x00, 0x00, 0x26, + 0x0e, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x61, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x77, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x9f, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x9f, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x59, 0xbe, 0x5a, 0xbe, 0x5b, 0xbe, + 0x5c, 0xbe, 0x5d, 0xbe, 0x5e, 0xbe, 0x5f, 0xbe, + 0x60, 0xbe, 0x61, 0xbe, 0x62, 0xbe, 0x63, 0xbe, + 0x64, 0x26, 0x0c, 0x00, 0x4d, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x61, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, + 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, + 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xa0, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x48, + 0x01, 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xa0, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x79, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, + 0x7e, 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x65, 0xbe, 0x66, 0xbe, + 0x67, 0xbe, 0x68, 0xbe, 0x69, 0xbe, 0x6a, 0xbe, + 0x6b, 0xbe, 0x6c, 0xbe, 0x6d, 0xbe, 0x6e, 0xbe, + 0x6f, 0xbe, 0x70, 0x26, 0x0c, 0x00, 0x4d, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, + 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x61, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, + 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, + 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xa1, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x48, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x79, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, + 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x71, 0xbe, + 0x72, 0xbe, 0x73, 0xbe, 0x74, 0xbe, 0x75, 0xbe, + 0x76, 0xbe, 0x77, 0xbe, 0x78, 0xbe, 0x79, 0xbe, + 0x7a, 0xbe, 0x7b, 0xbe, 0x7c, 0x26, 0x0c, 0x00, + 0x4d, 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x61, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x48, 0x01, 0x00, 0x00, 0x04, 0x69, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, + 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, + 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, + 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xa1, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x48, 0x01, 0x00, 0x00, 0x04, + 0xa1, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa1, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x79, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, + 0x01, 0x00, 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x7d, 0xbe, 0x7e, 0xbe, 0x7f, 0xbe, 0x80, 0xbe, + 0x81, 0xbe, 0x82, 0xbe, 0x83, 0xbe, 0x84, 0xbe, + 0x85, 0xbe, 0x86, 0xbe, 0x87, 0xbe, 0x88, 0x26, + 0x0c, 0x00, 0x4d, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x61, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x69, 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, + 0x00, 0x00, 0x04, 0x6b, 0x01, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x04, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x04, 0x6f, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, 0x04, + 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, + 0x00, 0x04, 0x76, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x77, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xa2, 0x01, 0x00, + 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, + 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, + 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, + 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x04, + 0xa9, 0x01, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, + 0x00, 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, + 0x01, 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, + 0x04, 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, + 0x00, 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, + 0xb1, 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, + 0x00, 0x04, 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, + 0x01, 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, + 0x04, 0xb6, 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, + 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, 0x04, + 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, + 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, + 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, + 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, + 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, 0x04, + 0xc1, 0x01, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, + 0xc2, 0x01, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, + 0x80, 0x04, 0xc3, 0x01, 0x00, 0x00, 0x4d, 0x21, + 0x00, 0x00, 0x80, 0x04, 0xc4, 0x01, 0x00, 0x00, + 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0xc5, 0x01, + 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, + 0xc6, 0x01, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, + 0x80, 0x04, 0xc7, 0x01, 0x00, 0x00, 0x4d, 0x25, + 0x00, 0x00, 0x80, 0x04, 0xc8, 0x01, 0x00, 0x00, + 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0xc9, 0x01, + 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, + 0xca, 0x01, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, + 0x80, 0x04, 0xcb, 0x01, 0x00, 0x00, 0x4d, 0x29, + 0x00, 0x00, 0x80, 0x04, 0xcc, 0x01, 0x00, 0x00, + 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0xcd, 0x01, + 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, + 0xce, 0x01, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, + 0x80, 0x04, 0xcf, 0x01, 0x00, 0x00, 0x4d, 0x2d, + 0x00, 0x00, 0x80, 0x04, 0xd0, 0x01, 0x00, 0x00, + 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0xd1, 0x01, + 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, + 0xd2, 0x01, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, + 0x80, 0x04, 0xd3, 0x01, 0x00, 0x00, 0x4d, 0x31, + 0x00, 0x00, 0x80, 0x04, 0xd4, 0x01, 0x00, 0x00, + 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0xd5, 0x01, + 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, + 0xd6, 0x01, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, + 0x80, 0x04, 0xd7, 0x01, 0x00, 0x00, 0x4d, 0x35, + 0x00, 0x00, 0x80, 0x04, 0xd8, 0x01, 0x00, 0x00, + 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0xd9, 0x01, + 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, + 0xda, 0x01, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, + 0x80, 0x04, 0xdb, 0x01, 0x00, 0x00, 0x4d, 0x39, + 0x00, 0x00, 0x80, 0x04, 0xdc, 0x01, 0x00, 0x00, + 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0xdd, 0x01, + 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, + 0xde, 0x01, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, + 0x80, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x4d, 0x3d, + 0x00, 0x00, 0x80, 0x04, 0xe0, 0x01, 0x00, 0x00, + 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0xe1, 0x01, + 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, + 0xe2, 0x01, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, + 0x80, 0x04, 0xe3, 0x01, 0x00, 0x00, 0x4d, 0x41, + 0x00, 0x00, 0x80, 0x04, 0xe4, 0x01, 0x00, 0x00, + 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0xe5, 0x01, + 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, + 0xe6, 0x01, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, + 0x80, 0x04, 0xe7, 0x01, 0x00, 0x00, 0x4d, 0x45, + 0x00, 0x00, 0x80, 0x04, 0xe8, 0x01, 0x00, 0x00, + 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0xe9, 0x01, + 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, + 0xea, 0x01, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, + 0x80, 0x04, 0xeb, 0x01, 0x00, 0x00, 0x4d, 0x49, + 0x00, 0x00, 0x80, 0x04, 0xec, 0x01, 0x00, 0x00, + 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0xed, 0x01, + 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, + 0xee, 0x01, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, + 0x80, 0x04, 0xef, 0x01, 0x00, 0x00, 0x4d, 0x4d, + 0x00, 0x00, 0x80, 0x04, 0xf0, 0x01, 0x00, 0x00, + 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0xf1, 0x01, + 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, + 0xf2, 0x01, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, + 0x80, 0x04, 0xf3, 0x01, 0x00, 0x00, 0x4d, 0x51, + 0x00, 0x00, 0x80, 0x04, 0xf4, 0x01, 0x00, 0x00, + 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0xf5, 0x01, + 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, + 0xf6, 0x01, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, + 0x80, 0x04, 0xf7, 0x01, 0x00, 0x00, 0x4d, 0x55, + 0x00, 0x00, 0x80, 0x04, 0xf8, 0x01, 0x00, 0x00, + 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0xf9, 0x01, + 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, + 0xfa, 0x01, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, + 0x80, 0x04, 0xfb, 0x01, 0x00, 0x00, 0x4d, 0x59, + 0x00, 0x00, 0x80, 0x04, 0xfc, 0x01, 0x00, 0x00, + 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0xfd, 0x01, + 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, + 0xfe, 0x01, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, + 0x80, 0x04, 0xff, 0x01, 0x00, 0x00, 0x4d, 0x5d, + 0x00, 0x00, 0x80, 0x04, 0x00, 0x02, 0x00, 0x00, + 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0x01, 0x02, + 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, + 0x02, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, + 0x80, 0x04, 0x03, 0x02, 0x00, 0x00, 0x4d, 0x61, + 0x00, 0x00, 0x80, 0x04, 0x04, 0x02, 0x00, 0x00, + 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0x05, 0x02, + 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, + 0x06, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, + 0x80, 0x04, 0x07, 0x02, 0x00, 0x00, 0x4d, 0x65, + 0x00, 0x00, 0x80, 0x04, 0x08, 0x02, 0x00, 0x00, + 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0x09, 0x02, + 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, + 0x0a, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, + 0x80, 0x04, 0x0b, 0x02, 0x00, 0x00, 0x4d, 0x69, + 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, 0x00, 0x00, + 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0x0d, 0x02, + 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, + 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, + 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, 0x4d, 0x6d, + 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, 0x00, 0x00, + 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0x11, 0x02, + 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, + 0x12, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, + 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, 0x4d, 0x71, + 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, 0x00, 0x00, + 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0x15, 0x02, + 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, + 0x16, 0x02, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, + 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, 0x4d, 0x75, + 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, 0x00, 0x00, + 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x19, 0x02, + 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, + 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, + 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, 0x4d, 0x79, + 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, 0x00, 0x00, + 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x1d, 0x02, + 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, + 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, + 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, 0x4d, 0x7d, + 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, 0x00, 0x00, + 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x21, 0x02, + 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, + 0x22, 0x02, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, + 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, 0x4d, 0x81, + 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, 0x00, 0x00, + 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x25, 0x02, + 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, + 0x26, 0x02, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, + 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, 0x4d, 0x85, + 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, 0x00, 0x00, + 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x29, 0x02, + 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, + 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, + 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, 0x4d, 0x89, + 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, 0x00, 0x00, + 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x2d, 0x02, + 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, + 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, + 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, 0x4d, 0x8d, + 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, 0x00, 0x00, + 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x31, 0x02, + 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, + 0x32, 0x02, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, + 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, 0x4d, 0x91, + 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, 0x00, 0x00, + 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x35, 0x02, + 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, + 0x36, 0x02, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, + 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, 0x4d, 0x95, + 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, 0x00, 0x00, + 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x39, 0x02, + 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, + 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, + 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, 0x4d, 0x99, + 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, 0x00, 0x00, + 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x3d, 0x02, + 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, + 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, + 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, 0x4d, 0x9d, + 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, 0x00, 0x00, + 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x41, 0x02, + 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, + 0x42, 0x02, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, + 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, 0x4d, 0xa1, + 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, 0x00, 0x00, + 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x45, 0x02, + 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, + 0x46, 0x02, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, + 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, 0x4d, 0xa5, + 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, 0x00, 0x00, + 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x49, 0x02, + 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, + 0x4a, 0x02, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, + 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, 0x4d, 0xa9, + 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, 0x00, 0x00, + 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x4d, 0x02, + 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, + 0x4e, 0x02, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, + 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, 0x4d, 0xad, + 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, 0x00, 0x00, + 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x51, 0x02, + 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, + 0x52, 0x02, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, + 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, 0x4d, 0xb1, + 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, 0x00, 0x00, + 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0x55, 0x02, + 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, + 0x56, 0x02, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, + 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, 0x4d, 0xb5, + 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, 0x00, 0x00, + 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0x59, 0x02, + 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, + 0x5a, 0x02, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, + 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, 0x4d, 0xb9, + 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, 0x00, 0x00, + 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0x5d, 0x02, + 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, + 0x5e, 0x02, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, + 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, 0x4d, 0xbd, + 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, 0x00, 0x00, + 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0x61, 0x02, + 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, + 0x62, 0x02, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, + 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, 0x4d, 0xc1, + 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, 0x00, 0x00, + 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0x65, 0x02, + 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, + 0x66, 0x02, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, + 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, 0x4d, 0xc5, + 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, 0x00, 0x00, + 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0x69, 0x02, + 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, + 0x6a, 0x02, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, + 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, 0x4d, 0xc9, + 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, 0x00, 0x00, + 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0x6d, 0x02, + 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, + 0x6e, 0x02, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, + 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, 0x4d, 0xcd, + 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, 0x00, 0x00, + 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0x71, 0x02, + 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, + 0x72, 0x02, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, + 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, 0x4d, 0xd1, + 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, 0x00, 0x00, + 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0x75, 0x02, + 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, + 0x76, 0x02, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, + 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, 0x4d, 0xd5, + 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, 0x00, 0x00, + 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0x79, 0x02, + 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, + 0x7a, 0x02, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, 0x4d, 0xd9, + 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0x7d, 0x02, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, + 0x7e, 0x02, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0x81, 0x02, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, + 0x82, 0x02, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, 0x00, 0x00, + 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0x85, 0x02, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, + 0x86, 0x02, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, + 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, 0x4d, 0xe5, + 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, 0x00, 0x00, + 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0x89, 0x02, + 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, + 0x17, 0x01, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, + 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0xe9, + 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0x04, 0x01, + 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x8c, 0x02, 0x00, + 0x00, 0x04, 0x8d, 0x02, 0x00, 0x00, 0x04, 0x8e, + 0x02, 0x00, 0x00, 0x04, 0x8f, 0x02, 0x00, 0x00, + 0x04, 0x90, 0x02, 0x00, 0x00, 0x04, 0x91, 0x02, + 0x00, 0x00, 0x04, 0x92, 0x02, 0x00, 0x00, 0x04, + 0x93, 0x02, 0x00, 0x00, 0x04, 0x94, 0x02, 0x00, + 0x00, 0x04, 0x95, 0x02, 0x00, 0x00, 0x04, 0x96, + 0x02, 0x00, 0x00, 0x04, 0x97, 0x02, 0x00, 0x00, + 0x04, 0x98, 0x02, 0x00, 0x00, 0x04, 0x99, 0x02, + 0x00, 0x00, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x04, + 0x9b, 0x02, 0x00, 0x00, 0x04, 0x9c, 0x02, 0x00, + 0x00, 0x04, 0x9d, 0x02, 0x00, 0x00, 0x04, 0x9e, + 0x02, 0x00, 0x00, 0x04, 0x9f, 0x02, 0x00, 0x00, + 0x04, 0xa0, 0x02, 0x00, 0x00, 0x04, 0xa1, 0x02, + 0x00, 0x00, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x04, + 0xa3, 0x02, 0x00, 0x00, 0x04, 0xa4, 0x02, 0x00, + 0x00, 0x04, 0xa5, 0x02, 0x00, 0x00, 0x04, 0xa6, + 0x02, 0x00, 0x00, 0x04, 0xa7, 0x02, 0x00, 0x00, + 0x04, 0xa8, 0x02, 0x00, 0x00, 0x04, 0xa9, 0x02, + 0x00, 0x00, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x04, + 0xab, 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, + 0xac, 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, + 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0x21, + 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, + 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, + 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, + 0xb0, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, + 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0x25, + 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, + 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, + 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, + 0xb4, 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, + 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, 0x29, + 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, + 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, + 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, + 0xb8, 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, + 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, 0x2d, + 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, + 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, + 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, + 0xbc, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, + 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, 0x31, + 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, + 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, + 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, + 0xc0, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, + 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, 0x35, + 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, + 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, + 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, + 0xc4, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, + 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, 0x39, + 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, + 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, + 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, + 0xc8, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, + 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, 0x3d, + 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, + 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0xcb, 0x02, + 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, + 0xcc, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, + 0x80, 0x04, 0xcd, 0x02, 0x00, 0x00, 0x4d, 0x41, + 0x00, 0x00, 0x80, 0x04, 0xce, 0x02, 0x00, 0x00, + 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0xcf, 0x02, + 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, + 0xd0, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, + 0x80, 0x04, 0xd1, 0x02, 0x00, 0x00, 0x4d, 0x45, + 0x00, 0x00, 0x80, 0x04, 0xd2, 0x02, 0x00, 0x00, + 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0xd3, 0x02, + 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, + 0xd4, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, + 0x80, 0x04, 0xd5, 0x02, 0x00, 0x00, 0x4d, 0x49, + 0x00, 0x00, 0x80, 0x04, 0xd6, 0x02, 0x00, 0x00, + 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0xd7, 0x02, + 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, + 0xd8, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, + 0x80, 0x04, 0xd9, 0x02, 0x00, 0x00, 0x4d, 0x4d, + 0x00, 0x00, 0x80, 0x04, 0xda, 0x02, 0x00, 0x00, + 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0xdb, 0x02, + 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, + 0xdc, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, + 0x80, 0x04, 0xdd, 0x02, 0x00, 0x00, 0x4d, 0x51, + 0x00, 0x00, 0x80, 0x04, 0xde, 0x02, 0x00, 0x00, + 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0xdf, 0x02, + 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, + 0xe0, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, + 0x80, 0x04, 0xe1, 0x02, 0x00, 0x00, 0x4d, 0x55, + 0x00, 0x00, 0x80, 0x04, 0xe2, 0x02, 0x00, 0x00, + 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0xe3, 0x02, + 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, + 0xe4, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, + 0x80, 0x04, 0xe5, 0x02, 0x00, 0x00, 0x4d, 0x59, + 0x00, 0x00, 0x80, 0x04, 0xe6, 0x02, 0x00, 0x00, + 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0xe7, 0x02, + 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, + 0xe8, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, + 0x80, 0x04, 0xe9, 0x02, 0x00, 0x00, 0x4d, 0x5d, + 0x00, 0x00, 0x80, 0x04, 0xea, 0x02, 0x00, 0x00, + 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0xeb, 0x02, + 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, + 0xec, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, + 0x80, 0x04, 0xed, 0x02, 0x00, 0x00, 0x4d, 0x61, + 0x00, 0x00, 0x80, 0x04, 0xee, 0x02, 0x00, 0x00, + 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0xef, 0x02, + 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, + 0xf0, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, + 0x80, 0x04, 0xf1, 0x02, 0x00, 0x00, 0x4d, 0x65, + 0x00, 0x00, 0x80, 0x04, 0xf2, 0x02, 0x00, 0x00, + 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0xf3, 0x02, + 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, + 0xf4, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, + 0x80, 0x04, 0xf5, 0x02, 0x00, 0x00, 0x4d, 0x69, + 0x00, 0x00, 0x80, 0x04, 0xf6, 0x02, 0x00, 0x00, + 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0xf7, 0x02, + 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, + 0xf8, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, + 0x80, 0x04, 0xf9, 0x02, 0x00, 0x00, 0x4d, 0x6d, + 0x00, 0x00, 0x80, 0x04, 0xfa, 0x02, 0x00, 0x00, + 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0xfb, 0x02, + 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, + 0xfc, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, + 0x80, 0x04, 0xfd, 0x02, 0x00, 0x00, 0x4d, 0x71, + 0x00, 0x00, 0x80, 0x04, 0xfe, 0x02, 0x00, 0x00, + 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0xff, 0x02, + 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, + 0x00, 0x03, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, + 0x80, 0x04, 0x01, 0x03, 0x00, 0x00, 0x4d, 0x75, + 0x00, 0x00, 0x80, 0x04, 0x02, 0x03, 0x00, 0x00, + 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x03, 0x03, + 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, + 0x04, 0x03, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, + 0x80, 0x04, 0x05, 0x03, 0x00, 0x00, 0x4d, 0x79, + 0x00, 0x00, 0x80, 0x04, 0x06, 0x03, 0x00, 0x00, + 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x07, 0x03, + 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, + 0x08, 0x03, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, + 0x80, 0x04, 0x09, 0x03, 0x00, 0x00, 0x4d, 0x7d, + 0x00, 0x00, 0x80, 0x04, 0x0a, 0x03, 0x00, 0x00, + 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x0b, 0x03, + 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, + 0x0c, 0x03, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, + 0x80, 0x04, 0x0d, 0x03, 0x00, 0x00, 0x4d, 0x81, + 0x00, 0x00, 0x80, 0x04, 0x0e, 0x03, 0x00, 0x00, + 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x03, + 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, + 0x10, 0x03, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, + 0x80, 0x04, 0x11, 0x03, 0x00, 0x00, 0x4d, 0x85, + 0x00, 0x00, 0x80, 0x04, 0x12, 0x03, 0x00, 0x00, + 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x13, 0x03, + 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, + 0x14, 0x03, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, + 0x80, 0x04, 0x15, 0x03, 0x00, 0x00, 0x4d, 0x89, + 0x00, 0x00, 0x80, 0x04, 0x16, 0x03, 0x00, 0x00, + 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x17, 0x03, + 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, + 0x18, 0x03, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, + 0x80, 0x04, 0x19, 0x03, 0x00, 0x00, 0x4d, 0x8d, + 0x00, 0x00, 0x80, 0x04, 0x1a, 0x03, 0x00, 0x00, + 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x03, + 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, + 0x1c, 0x03, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, + 0x80, 0x04, 0x1d, 0x03, 0x00, 0x00, 0x4d, 0x91, + 0x00, 0x00, 0x80, 0x04, 0x1e, 0x03, 0x00, 0x00, + 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x03, + 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, + 0x20, 0x03, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, + 0x80, 0x04, 0x21, 0x03, 0x00, 0x00, 0x4d, 0x95, + 0x00, 0x00, 0x80, 0x04, 0x22, 0x03, 0x00, 0x00, + 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x23, 0x03, + 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, + 0x24, 0x03, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, + 0x80, 0x04, 0x25, 0x03, 0x00, 0x00, 0x4d, 0x99, + 0x00, 0x00, 0x80, 0x04, 0x26, 0x03, 0x00, 0x00, + 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x27, 0x03, + 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, + 0x28, 0x03, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, + 0x80, 0x04, 0x29, 0x03, 0x00, 0x00, 0x4d, 0x9d, + 0x00, 0x00, 0x80, 0x04, 0x2a, 0x03, 0x00, 0x00, + 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x03, + 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, + 0x2c, 0x03, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, + 0x80, 0x04, 0x2d, 0x03, 0x00, 0x00, 0x4d, 0xa1, + 0x00, 0x00, 0x80, 0x04, 0x2e, 0x03, 0x00, 0x00, + 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x03, + 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, + 0x30, 0x03, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, + 0x80, 0x04, 0x31, 0x03, 0x00, 0x00, 0x4d, 0xa5, + 0x00, 0x00, 0x80, 0x04, 0x32, 0x03, 0x00, 0x00, + 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x33, 0x03, + 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, + 0x34, 0x03, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, + 0x80, 0x04, 0x35, 0x03, 0x00, 0x00, 0x4d, 0xa9, + 0x00, 0x00, 0x80, 0x04, 0x36, 0x03, 0x00, 0x00, + 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x37, 0x03, + 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, + 0x38, 0x03, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, + 0x80, 0x04, 0x39, 0x03, 0x00, 0x00, 0x4d, 0xad, + 0x00, 0x00, 0x80, 0x04, 0x3a, 0x03, 0x00, 0x00, + 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x03, + 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, + 0x3c, 0x03, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, + 0x80, 0x04, 0x3d, 0x03, 0x00, 0x00, 0x4d, 0xb1, + 0x00, 0x00, 0x80, 0x04, 0x3e, 0x03, 0x00, 0x00, + 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x03, + 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, + 0x40, 0x03, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, + 0x80, 0x04, 0x41, 0x03, 0x00, 0x00, 0x4d, 0xb5, + 0x00, 0x00, 0x80, 0x04, 0x42, 0x03, 0x00, 0x00, + 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0x43, 0x03, + 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, + 0x44, 0x03, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, + 0x80, 0x04, 0x45, 0x03, 0x00, 0x00, 0x4d, 0xb9, + 0x00, 0x00, 0x80, 0x04, 0x46, 0x03, 0x00, 0x00, + 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0x47, 0x03, + 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, + 0x48, 0x03, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, + 0x80, 0x04, 0x49, 0x03, 0x00, 0x00, 0x4d, 0xbd, + 0x00, 0x00, 0x80, 0x04, 0x4a, 0x03, 0x00, 0x00, + 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x03, + 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, + 0x4c, 0x03, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, + 0x80, 0x04, 0x4d, 0x03, 0x00, 0x00, 0x4d, 0xc1, + 0x00, 0x00, 0x80, 0x04, 0x4e, 0x03, 0x00, 0x00, + 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x03, + 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, + 0x50, 0x03, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, + 0x80, 0x04, 0x51, 0x03, 0x00, 0x00, 0x4d, 0xc5, + 0x00, 0x00, 0x80, 0x04, 0x52, 0x03, 0x00, 0x00, + 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0x53, 0x03, + 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, + 0x54, 0x03, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, + 0x80, 0x04, 0x55, 0x03, 0x00, 0x00, 0x4d, 0xc9, + 0x00, 0x00, 0x80, 0x04, 0x56, 0x03, 0x00, 0x00, + 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0x57, 0x03, + 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, + 0x58, 0x03, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, + 0x80, 0x04, 0x59, 0x03, 0x00, 0x00, 0x4d, 0xcd, + 0x00, 0x00, 0x80, 0x04, 0x5a, 0x03, 0x00, 0x00, + 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x03, + 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, + 0x5c, 0x03, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, + 0x80, 0x04, 0x5d, 0x03, 0x00, 0x00, 0x4d, 0xd1, + 0x00, 0x00, 0x80, 0x04, 0x5e, 0x03, 0x00, 0x00, + 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x03, + 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, + 0x60, 0x03, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, + 0x80, 0x04, 0x61, 0x03, 0x00, 0x00, 0x4d, 0xd5, + 0x00, 0x00, 0x80, 0x04, 0x62, 0x03, 0x00, 0x00, + 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0x63, 0x03, + 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, + 0x64, 0x03, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x80, 0x04, 0x65, 0x03, 0x00, 0x00, 0x4d, 0xd9, + 0x00, 0x00, 0x80, 0x04, 0x66, 0x03, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0x67, 0x03, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, + 0x68, 0x03, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x80, 0x04, 0x69, 0x03, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x80, 0x04, 0x6a, 0x03, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x03, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, + 0x6c, 0x03, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x80, 0x04, 0x6d, 0x03, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x80, 0x04, 0x6e, 0x03, 0x00, 0x00, + 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x03, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, + 0x70, 0x03, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, + 0x80, 0x04, 0x71, 0x03, 0x00, 0x00, 0x4d, 0xe5, + 0x00, 0x00, 0x80, 0x04, 0x72, 0x03, 0x00, 0x00, + 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0x73, 0x03, + 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, + 0x74, 0x03, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, + 0x80, 0x04, 0x75, 0x03, 0x00, 0x00, 0x4d, 0xe9, + 0x00, 0x00, 0x80, 0x04, 0x76, 0x03, 0x00, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0x77, 0x03, + 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x8c, 0x02, 0x00, + 0x00, 0x04, 0x8d, 0x02, 0x00, 0x00, 0x04, 0x8e, + 0x02, 0x00, 0x00, 0x04, 0x8f, 0x02, 0x00, 0x00, + 0x04, 0x90, 0x02, 0x00, 0x00, 0x04, 0x91, 0x02, + 0x00, 0x00, 0x04, 0x92, 0x02, 0x00, 0x00, 0x04, + 0x93, 0x02, 0x00, 0x00, 0x04, 0x94, 0x02, 0x00, + 0x00, 0x04, 0x95, 0x02, 0x00, 0x00, 0x04, 0x96, + 0x02, 0x00, 0x00, 0x04, 0x97, 0x02, 0x00, 0x00, + 0x04, 0x98, 0x02, 0x00, 0x00, 0x04, 0x99, 0x02, + 0x00, 0x00, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x04, + 0x9b, 0x02, 0x00, 0x00, 0x04, 0x9c, 0x02, 0x00, + 0x00, 0x04, 0x9d, 0x02, 0x00, 0x00, 0x04, 0x9e, + 0x02, 0x00, 0x00, 0x04, 0x9f, 0x02, 0x00, 0x00, + 0x04, 0xa0, 0x02, 0x00, 0x00, 0x04, 0xa1, 0x02, + 0x00, 0x00, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x04, + 0xa3, 0x02, 0x00, 0x00, 0x04, 0xa4, 0x02, 0x00, + 0x00, 0x04, 0xa5, 0x02, 0x00, 0x00, 0x04, 0xa6, + 0x02, 0x00, 0x00, 0x04, 0xa7, 0x02, 0x00, 0x00, + 0x04, 0xa8, 0x02, 0x00, 0x00, 0x04, 0xa9, 0x02, + 0x00, 0x00, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x04, + 0xab, 0x02, 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, + 0xac, 0x02, 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, + 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0x21, + 0x00, 0x00, 0x80, 0x04, 0xae, 0x02, 0x00, 0x00, + 0x4d, 0x22, 0x00, 0x00, 0x80, 0x04, 0xaf, 0x02, + 0x00, 0x00, 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, + 0xb0, 0x02, 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, + 0x80, 0x04, 0xb1, 0x02, 0x00, 0x00, 0x4d, 0x25, + 0x00, 0x00, 0x80, 0x04, 0xb2, 0x02, 0x00, 0x00, + 0x4d, 0x26, 0x00, 0x00, 0x80, 0x04, 0xb3, 0x02, + 0x00, 0x00, 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, + 0xb4, 0x02, 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, + 0x80, 0x04, 0xb5, 0x02, 0x00, 0x00, 0x4d, 0x29, + 0x00, 0x00, 0x80, 0x04, 0xb6, 0x02, 0x00, 0x00, + 0x4d, 0x2a, 0x00, 0x00, 0x80, 0x04, 0xb7, 0x02, + 0x00, 0x00, 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, + 0xb8, 0x02, 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, + 0x80, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x4d, 0x2d, + 0x00, 0x00, 0x80, 0x04, 0xba, 0x02, 0x00, 0x00, + 0x4d, 0x2e, 0x00, 0x00, 0x80, 0x04, 0xbb, 0x02, + 0x00, 0x00, 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, + 0xbc, 0x02, 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, + 0x80, 0x04, 0xbd, 0x02, 0x00, 0x00, 0x4d, 0x31, + 0x00, 0x00, 0x80, 0x04, 0xbe, 0x02, 0x00, 0x00, + 0x4d, 0x32, 0x00, 0x00, 0x80, 0x04, 0xbf, 0x02, + 0x00, 0x00, 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, + 0xc0, 0x02, 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, + 0x80, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x4d, 0x35, + 0x00, 0x00, 0x80, 0x04, 0xc2, 0x02, 0x00, 0x00, + 0x4d, 0x36, 0x00, 0x00, 0x80, 0x04, 0xc3, 0x02, + 0x00, 0x00, 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, + 0xc4, 0x02, 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, + 0x80, 0x04, 0xc5, 0x02, 0x00, 0x00, 0x4d, 0x39, + 0x00, 0x00, 0x80, 0x04, 0xc6, 0x02, 0x00, 0x00, + 0x4d, 0x3a, 0x00, 0x00, 0x80, 0x04, 0xc7, 0x02, + 0x00, 0x00, 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, + 0xc8, 0x02, 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, + 0x80, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x4d, 0x3d, + 0x00, 0x00, 0x80, 0x04, 0xca, 0x02, 0x00, 0x00, + 0x4d, 0x3e, 0x00, 0x00, 0x80, 0x04, 0xcb, 0x02, + 0x00, 0x00, 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, + 0xcc, 0x02, 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, + 0x80, 0x04, 0xcd, 0x02, 0x00, 0x00, 0x4d, 0x41, + 0x00, 0x00, 0x80, 0x04, 0xce, 0x02, 0x00, 0x00, + 0x4d, 0x42, 0x00, 0x00, 0x80, 0x04, 0xcf, 0x02, + 0x00, 0x00, 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, + 0xd0, 0x02, 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, + 0x80, 0x04, 0xd1, 0x02, 0x00, 0x00, 0x4d, 0x45, + 0x00, 0x00, 0x80, 0x04, 0xd2, 0x02, 0x00, 0x00, + 0x4d, 0x46, 0x00, 0x00, 0x80, 0x04, 0xd3, 0x02, + 0x00, 0x00, 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, + 0xd4, 0x02, 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, + 0x80, 0x04, 0xd5, 0x02, 0x00, 0x00, 0x4d, 0x49, + 0x00, 0x00, 0x80, 0x04, 0xd6, 0x02, 0x00, 0x00, + 0x4d, 0x4a, 0x00, 0x00, 0x80, 0x04, 0xd7, 0x02, + 0x00, 0x00, 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, + 0xd8, 0x02, 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, + 0x80, 0x04, 0xd9, 0x02, 0x00, 0x00, 0x4d, 0x4d, + 0x00, 0x00, 0x80, 0x04, 0xda, 0x02, 0x00, 0x00, + 0x4d, 0x4e, 0x00, 0x00, 0x80, 0x04, 0xdb, 0x02, + 0x00, 0x00, 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, + 0xdc, 0x02, 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, + 0x80, 0x04, 0xdd, 0x02, 0x00, 0x00, 0x4d, 0x51, + 0x00, 0x00, 0x80, 0x04, 0xde, 0x02, 0x00, 0x00, + 0x4d, 0x52, 0x00, 0x00, 0x80, 0x04, 0xdf, 0x02, + 0x00, 0x00, 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, + 0xe0, 0x02, 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, + 0x80, 0x04, 0xe1, 0x02, 0x00, 0x00, 0x4d, 0x55, + 0x00, 0x00, 0x80, 0x04, 0xe2, 0x02, 0x00, 0x00, + 0x4d, 0x56, 0x00, 0x00, 0x80, 0x04, 0xe3, 0x02, + 0x00, 0x00, 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, + 0xe4, 0x02, 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, + 0x80, 0x04, 0xe5, 0x02, 0x00, 0x00, 0x4d, 0x59, + 0x00, 0x00, 0x80, 0x04, 0xe6, 0x02, 0x00, 0x00, + 0x4d, 0x5a, 0x00, 0x00, 0x80, 0x04, 0xe7, 0x02, + 0x00, 0x00, 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, + 0xe8, 0x02, 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, + 0x80, 0x04, 0xe9, 0x02, 0x00, 0x00, 0x4d, 0x5d, + 0x00, 0x00, 0x80, 0x04, 0xea, 0x02, 0x00, 0x00, + 0x4d, 0x5e, 0x00, 0x00, 0x80, 0x04, 0xeb, 0x02, + 0x00, 0x00, 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, + 0xec, 0x02, 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, + 0x80, 0x04, 0xed, 0x02, 0x00, 0x00, 0x4d, 0x61, + 0x00, 0x00, 0x80, 0x04, 0xee, 0x02, 0x00, 0x00, + 0x4d, 0x62, 0x00, 0x00, 0x80, 0x04, 0xef, 0x02, + 0x00, 0x00, 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, + 0xf0, 0x02, 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, + 0x80, 0x04, 0xf1, 0x02, 0x00, 0x00, 0x4d, 0x65, + 0x00, 0x00, 0x80, 0x04, 0xf2, 0x02, 0x00, 0x00, + 0x4d, 0x66, 0x00, 0x00, 0x80, 0x04, 0xf3, 0x02, + 0x00, 0x00, 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, + 0xf4, 0x02, 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, + 0x80, 0x04, 0xf5, 0x02, 0x00, 0x00, 0x4d, 0x69, + 0x00, 0x00, 0x80, 0x04, 0xf6, 0x02, 0x00, 0x00, + 0x4d, 0x6a, 0x00, 0x00, 0x80, 0x04, 0xf7, 0x02, + 0x00, 0x00, 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, + 0xf8, 0x02, 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, + 0x80, 0x04, 0xf9, 0x02, 0x00, 0x00, 0x4d, 0x6d, + 0x00, 0x00, 0x80, 0x04, 0xfa, 0x02, 0x00, 0x00, + 0x4d, 0x6e, 0x00, 0x00, 0x80, 0x04, 0xfb, 0x02, + 0x00, 0x00, 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, + 0xfc, 0x02, 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, + 0x80, 0x04, 0xfd, 0x02, 0x00, 0x00, 0x4d, 0x71, + 0x00, 0x00, 0x80, 0x04, 0xfe, 0x02, 0x00, 0x00, + 0x4d, 0x72, 0x00, 0x00, 0x80, 0x04, 0xff, 0x02, + 0x00, 0x00, 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, + 0x00, 0x03, 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, + 0x80, 0x04, 0x01, 0x03, 0x00, 0x00, 0x4d, 0x75, + 0x00, 0x00, 0x80, 0x04, 0x02, 0x03, 0x00, 0x00, + 0x4d, 0x76, 0x00, 0x00, 0x80, 0x04, 0x03, 0x03, + 0x00, 0x00, 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, + 0x04, 0x03, 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, + 0x80, 0x04, 0x05, 0x03, 0x00, 0x00, 0x4d, 0x79, + 0x00, 0x00, 0x80, 0x04, 0x06, 0x03, 0x00, 0x00, + 0x4d, 0x7a, 0x00, 0x00, 0x80, 0x04, 0x07, 0x03, + 0x00, 0x00, 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, + 0x08, 0x03, 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, + 0x80, 0x04, 0x09, 0x03, 0x00, 0x00, 0x4d, 0x7d, + 0x00, 0x00, 0x80, 0x04, 0x0a, 0x03, 0x00, 0x00, + 0x4d, 0x7e, 0x00, 0x00, 0x80, 0x04, 0x0b, 0x03, + 0x00, 0x00, 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, + 0x0c, 0x03, 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, + 0x80, 0x04, 0x0d, 0x03, 0x00, 0x00, 0x4d, 0x81, + 0x00, 0x00, 0x80, 0x04, 0x0e, 0x03, 0x00, 0x00, + 0x4d, 0x82, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x03, + 0x00, 0x00, 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, + 0x10, 0x03, 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, + 0x80, 0x04, 0x11, 0x03, 0x00, 0x00, 0x4d, 0x85, + 0x00, 0x00, 0x80, 0x04, 0x12, 0x03, 0x00, 0x00, + 0x4d, 0x86, 0x00, 0x00, 0x80, 0x04, 0x13, 0x03, + 0x00, 0x00, 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, + 0x14, 0x03, 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, + 0x80, 0x04, 0x15, 0x03, 0x00, 0x00, 0x4d, 0x89, + 0x00, 0x00, 0x80, 0x04, 0x16, 0x03, 0x00, 0x00, + 0x4d, 0x8a, 0x00, 0x00, 0x80, 0x04, 0x17, 0x03, + 0x00, 0x00, 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, + 0x18, 0x03, 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, + 0x80, 0x04, 0x19, 0x03, 0x00, 0x00, 0x4d, 0x8d, + 0x00, 0x00, 0x80, 0x04, 0x1a, 0x03, 0x00, 0x00, + 0x4d, 0x8e, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x03, + 0x00, 0x00, 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, + 0x1c, 0x03, 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, + 0x80, 0x04, 0x1d, 0x03, 0x00, 0x00, 0x4d, 0x91, + 0x00, 0x00, 0x80, 0x04, 0x1e, 0x03, 0x00, 0x00, + 0x4d, 0x92, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x03, + 0x00, 0x00, 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, + 0x20, 0x03, 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, + 0x80, 0x04, 0x21, 0x03, 0x00, 0x00, 0x4d, 0x95, + 0x00, 0x00, 0x80, 0x04, 0x22, 0x03, 0x00, 0x00, + 0x4d, 0x96, 0x00, 0x00, 0x80, 0x04, 0x23, 0x03, + 0x00, 0x00, 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, + 0x24, 0x03, 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, + 0x80, 0x04, 0x25, 0x03, 0x00, 0x00, 0x4d, 0x99, + 0x00, 0x00, 0x80, 0x04, 0x26, 0x03, 0x00, 0x00, + 0x4d, 0x9a, 0x00, 0x00, 0x80, 0x04, 0x27, 0x03, + 0x00, 0x00, 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, + 0x28, 0x03, 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, + 0x80, 0x04, 0x29, 0x03, 0x00, 0x00, 0x4d, 0x9d, + 0x00, 0x00, 0x80, 0x04, 0x2a, 0x03, 0x00, 0x00, + 0x4d, 0x9e, 0x00, 0x00, 0x80, 0x04, 0x2b, 0x03, + 0x00, 0x00, 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, + 0x2c, 0x03, 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, + 0x80, 0x04, 0x2d, 0x03, 0x00, 0x00, 0x4d, 0xa1, + 0x00, 0x00, 0x80, 0x04, 0x2e, 0x03, 0x00, 0x00, + 0x4d, 0xa2, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x03, + 0x00, 0x00, 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, + 0x30, 0x03, 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, + 0x80, 0x04, 0x31, 0x03, 0x00, 0x00, 0x4d, 0xa5, + 0x00, 0x00, 0x80, 0x04, 0x32, 0x03, 0x00, 0x00, + 0x4d, 0xa6, 0x00, 0x00, 0x80, 0x04, 0x33, 0x03, + 0x00, 0x00, 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, + 0x34, 0x03, 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, + 0x80, 0x04, 0x35, 0x03, 0x00, 0x00, 0x4d, 0xa9, + 0x00, 0x00, 0x80, 0x04, 0x36, 0x03, 0x00, 0x00, + 0x4d, 0xaa, 0x00, 0x00, 0x80, 0x04, 0x37, 0x03, + 0x00, 0x00, 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, + 0x38, 0x03, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, + 0x80, 0x04, 0x39, 0x03, 0x00, 0x00, 0x4d, 0xad, + 0x00, 0x00, 0x80, 0x04, 0x3a, 0x03, 0x00, 0x00, + 0x4d, 0xae, 0x00, 0x00, 0x80, 0x04, 0x3b, 0x03, + 0x00, 0x00, 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, + 0x3c, 0x03, 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, + 0x80, 0x04, 0x3d, 0x03, 0x00, 0x00, 0x4d, 0xb1, + 0x00, 0x00, 0x80, 0x04, 0x3e, 0x03, 0x00, 0x00, + 0x4d, 0xb2, 0x00, 0x00, 0x80, 0x04, 0x3f, 0x03, + 0x00, 0x00, 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, + 0x40, 0x03, 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, + 0x80, 0x04, 0x41, 0x03, 0x00, 0x00, 0x4d, 0xb5, + 0x00, 0x00, 0x80, 0x04, 0x42, 0x03, 0x00, 0x00, + 0x4d, 0xb6, 0x00, 0x00, 0x80, 0x04, 0x43, 0x03, + 0x00, 0x00, 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, + 0x44, 0x03, 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, + 0x80, 0x04, 0x45, 0x03, 0x00, 0x00, 0x4d, 0xb9, + 0x00, 0x00, 0x80, 0x04, 0x46, 0x03, 0x00, 0x00, + 0x4d, 0xba, 0x00, 0x00, 0x80, 0x04, 0x47, 0x03, + 0x00, 0x00, 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, + 0x48, 0x03, 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, + 0x80, 0x04, 0x49, 0x03, 0x00, 0x00, 0x4d, 0xbd, + 0x00, 0x00, 0x80, 0x04, 0x4a, 0x03, 0x00, 0x00, + 0x4d, 0xbe, 0x00, 0x00, 0x80, 0x04, 0x4b, 0x03, + 0x00, 0x00, 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, + 0x4c, 0x03, 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, + 0x80, 0x04, 0x4d, 0x03, 0x00, 0x00, 0x4d, 0xc1, + 0x00, 0x00, 0x80, 0x04, 0x4e, 0x03, 0x00, 0x00, + 0x4d, 0xc2, 0x00, 0x00, 0x80, 0x04, 0x4f, 0x03, + 0x00, 0x00, 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, + 0x50, 0x03, 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, + 0x80, 0x04, 0x51, 0x03, 0x00, 0x00, 0x4d, 0xc5, + 0x00, 0x00, 0x80, 0x04, 0x52, 0x03, 0x00, 0x00, + 0x4d, 0xc6, 0x00, 0x00, 0x80, 0x04, 0x53, 0x03, + 0x00, 0x00, 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, + 0x54, 0x03, 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, + 0x80, 0x04, 0x55, 0x03, 0x00, 0x00, 0x4d, 0xc9, + 0x00, 0x00, 0x80, 0x04, 0x56, 0x03, 0x00, 0x00, + 0x4d, 0xca, 0x00, 0x00, 0x80, 0x04, 0x57, 0x03, + 0x00, 0x00, 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, + 0x58, 0x03, 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, + 0x80, 0x04, 0x59, 0x03, 0x00, 0x00, 0x4d, 0xcd, + 0x00, 0x00, 0x80, 0x04, 0x5a, 0x03, 0x00, 0x00, + 0x4d, 0xce, 0x00, 0x00, 0x80, 0x04, 0x5b, 0x03, + 0x00, 0x00, 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, + 0x5c, 0x03, 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, + 0x80, 0x04, 0x5d, 0x03, 0x00, 0x00, 0x4d, 0xd1, + 0x00, 0x00, 0x80, 0x04, 0x5e, 0x03, 0x00, 0x00, + 0x4d, 0xd2, 0x00, 0x00, 0x80, 0x04, 0x5f, 0x03, + 0x00, 0x00, 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, + 0x60, 0x03, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, + 0x80, 0x04, 0x61, 0x03, 0x00, 0x00, 0x4d, 0xd5, + 0x00, 0x00, 0x80, 0x04, 0x62, 0x03, 0x00, 0x00, + 0x4d, 0xd6, 0x00, 0x00, 0x80, 0x04, 0x63, 0x03, + 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, + 0x64, 0x03, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x80, 0x04, 0x65, 0x03, 0x00, 0x00, 0x4d, 0xd9, + 0x00, 0x00, 0x80, 0x04, 0x66, 0x03, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x80, 0x04, 0x67, 0x03, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, + 0x68, 0x03, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x80, 0x04, 0x69, 0x03, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x80, 0x04, 0x6a, 0x03, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x80, 0x04, 0x6b, 0x03, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, + 0x6c, 0x03, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x80, 0x04, 0x6d, 0x03, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x80, 0x04, 0x6e, 0x03, 0x00, 0x00, + 0x4d, 0xe2, 0x00, 0x00, 0x80, 0x04, 0x6f, 0x03, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, + 0x70, 0x03, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, + 0x80, 0x04, 0x71, 0x03, 0x00, 0x00, 0x4d, 0xe5, + 0x00, 0x00, 0x80, 0x04, 0x72, 0x03, 0x00, 0x00, + 0x4d, 0xe6, 0x00, 0x00, 0x80, 0x04, 0x73, 0x03, + 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, + 0x74, 0x03, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, + 0x80, 0x04, 0x75, 0x03, 0x00, 0x00, 0x4d, 0xe9, + 0x00, 0x00, 0x80, 0x04, 0x76, 0x03, 0x00, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x80, 0x04, 0x77, 0x03, + 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x79, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x4d, + 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, + 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, 0x4d, 0x7e, + 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x89, 0xbe, 0x8a, 0xbe, 0x8b, + 0xbe, 0x8c, 0xbe, 0x8d, 0xbe, 0x8e, 0xbe, 0x8f, + 0xbe, 0x90, 0xbe, 0x91, 0xbe, 0x92, 0xbe, 0x93, + 0xbe, 0x94, 0x26, 0x0c, 0x00, 0x4d, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, + 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x61, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, + 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, + 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x04, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x70, + 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, + 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x78, 0x03, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x78, 0x03, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x78, 0x03, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x79, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7a, 0x01, 0x00, + 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, + 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, 0x00, + 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x95, 0xbe, 0x96, + 0xbe, 0x97, 0xbe, 0x98, 0xbe, 0x99, 0xbe, 0x9a, + 0xbe, 0x9b, 0xbe, 0x9c, 0xbe, 0x9d, 0xbe, 0x9e, + 0xbe, 0x9f, 0xbe, 0xa0, 0x26, 0x0c, 0x00, 0x4d, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x53, + 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x61, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0x48, 0x01, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, 0x04, + 0x6b, 0x01, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x70, 0x01, 0x00, 0x00, 0x04, 0x71, 0x01, + 0x00, 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, + 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x77, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x79, 0x03, 0x00, 0x00, 0x04, 0x7a, + 0x03, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x79, 0x03, 0x00, 0x00, + 0x04, 0x7a, 0x03, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x79, 0x03, + 0x00, 0x00, 0x04, 0x7a, 0x03, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x79, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x4d, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x4d, 0x7d, 0x01, 0x00, + 0x00, 0x4d, 0x7e, 0x01, 0x00, 0x00, 0x4d, 0xe2, + 0x00, 0x00, 0x00, 0x4d, 0x7b, 0x03, 0x00, 0x00, + 0x4d, 0x7c, 0x03, 0x00, 0x00, 0x0b, 0x04, 0x7d, + 0x03, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x7e, + 0x03, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x7f, 0x03, + 0x00, 0x00, 0x4d, 0x80, 0x03, 0x00, 0x00, 0x04, + 0x81, 0x03, 0x00, 0x00, 0x4d, 0x82, 0x03, 0x00, + 0x00, 0x4d, 0x83, 0x03, 0x00, 0x00, 0x0b, 0x04, + 0x84, 0x03, 0x00, 0x00, 0x4d, 0x80, 0x03, 0x00, + 0x00, 0x04, 0x85, 0x03, 0x00, 0x00, 0x4d, 0x82, + 0x03, 0x00, 0x00, 0x4d, 0x86, 0x03, 0x00, 0x00, + 0x0b, 0x04, 0x87, 0x03, 0x00, 0x00, 0x4d, 0x80, + 0x03, 0x00, 0x00, 0x04, 0x88, 0x03, 0x00, 0x00, + 0x4d, 0x82, 0x03, 0x00, 0x00, 0x4d, 0x89, 0x03, + 0x00, 0x00, 0x4d, 0x8a, 0x03, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x8b, 0x03, 0x00, 0x00, 0x4d, 0x83, + 0x03, 0x00, 0x00, 0x04, 0x8c, 0x03, 0x00, 0x00, + 0x4d, 0x8d, 0x03, 0x00, 0x00, 0x04, 0x8e, 0x03, + 0x00, 0x00, 0x4d, 0x8f, 0x03, 0x00, 0x00, 0x04, + 0x90, 0x03, 0x00, 0x00, 0x4d, 0x91, 0x03, 0x00, + 0x00, 0x04, 0x92, 0x03, 0x00, 0x00, 0x4d, 0x93, + 0x03, 0x00, 0x00, 0x04, 0x94, 0x03, 0x00, 0x00, + 0x4d, 0x95, 0x03, 0x00, 0x00, 0x04, 0x96, 0x03, + 0x00, 0x00, 0x4d, 0x97, 0x03, 0x00, 0x00, 0x4d, + 0x98, 0x03, 0x00, 0x00, 0x0b, 0x04, 0x8b, 0x03, + 0x00, 0x00, 0x4d, 0x83, 0x03, 0x00, 0x00, 0x04, + 0x8c, 0x03, 0x00, 0x00, 0x4d, 0x8d, 0x03, 0x00, + 0x00, 0x04, 0x8e, 0x03, 0x00, 0x00, 0x4d, 0x8f, + 0x03, 0x00, 0x00, 0x04, 0x90, 0x03, 0x00, 0x00, + 0x4d, 0x91, 0x03, 0x00, 0x00, 0x04, 0x92, 0x03, + 0x00, 0x00, 0x4d, 0x93, 0x03, 0x00, 0x00, 0x04, + 0x94, 0x03, 0x00, 0x00, 0x4d, 0x95, 0x03, 0x00, + 0x00, 0x04, 0x96, 0x03, 0x00, 0x00, 0x4d, 0x97, + 0x03, 0x00, 0x00, 0x4d, 0x7d, 0x03, 0x00, 0x00, + 0x4d, 0x99, 0x03, 0x00, 0x00, 0x0b, 0x04, 0x9a, + 0x03, 0x00, 0x00, 0x4d, 0x9b, 0x03, 0x00, 0x00, + 0x04, 0x9c, 0x03, 0x00, 0x00, 0x4d, 0x9d, 0x03, + 0x00, 0x00, 0x04, 0x9e, 0x03, 0x00, 0x00, 0x4d, + 0x9f, 0x03, 0x00, 0x00, 0x04, 0xa0, 0x03, 0x00, + 0x00, 0x4d, 0xa1, 0x03, 0x00, 0x00, 0x04, 0xa2, + 0x03, 0x00, 0x00, 0x4d, 0xa3, 0x03, 0x00, 0x00, + 0x04, 0xa4, 0x03, 0x00, 0x00, 0x4d, 0xa5, 0x03, + 0x00, 0x00, 0x04, 0xa6, 0x03, 0x00, 0x00, 0x4d, + 0xa7, 0x03, 0x00, 0x00, 0x04, 0xa8, 0x03, 0x00, + 0x00, 0x4d, 0xa9, 0x03, 0x00, 0x00, 0x04, 0xaa, + 0x03, 0x00, 0x00, 0x4d, 0xa8, 0x03, 0x00, 0x00, + 0x04, 0xab, 0x03, 0x00, 0x00, 0x4d, 0xac, 0x03, + 0x00, 0x00, 0x04, 0xad, 0x03, 0x00, 0x00, 0x4d, + 0xae, 0x03, 0x00, 0x00, 0x04, 0xaf, 0x03, 0x00, + 0x00, 0x4d, 0xb0, 0x03, 0x00, 0x00, 0x04, 0xb1, + 0x03, 0x00, 0x00, 0x4d, 0xb2, 0x03, 0x00, 0x00, + 0x04, 0xb3, 0x03, 0x00, 0x00, 0x4d, 0xb4, 0x03, + 0x00, 0x00, 0x04, 0xb5, 0x03, 0x00, 0x00, 0x4d, + 0xb6, 0x03, 0x00, 0x00, 0x04, 0xb7, 0x03, 0x00, + 0x00, 0x4d, 0xb8, 0x03, 0x00, 0x00, 0x04, 0xb9, + 0x03, 0x00, 0x00, 0x4d, 0xba, 0x03, 0x00, 0x00, + 0x04, 0xbb, 0x03, 0x00, 0x00, 0x4d, 0xbc, 0x03, + 0x00, 0x00, 0x04, 0xbd, 0x03, 0x00, 0x00, 0x4d, + 0xbe, 0x03, 0x00, 0x00, 0x04, 0xbf, 0x03, 0x00, + 0x00, 0x4d, 0xc0, 0x03, 0x00, 0x00, 0x04, 0xc1, + 0x03, 0x00, 0x00, 0x4d, 0xc2, 0x03, 0x00, 0x00, + 0x4d, 0xc3, 0x03, 0x00, 0x00, 0x4d, 0x45, 0x00, + 0x00, 0x00, 0x24, 0x01, 0x00, 0xcc, 0x28, 0x88, + 0x0f, 0x01, 0x00, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_zh_Hant_TW_size = 25749; + +const uint8_t intl_zh_Hant_TW[25749] = { + 0x01, 0x96, 0x06, 0x18, 0x49, 0x6e, 0x74, 0x6c, + 0x50, 0x6f, 0x6c, 0x79, 0x66, 0x69, 0x6c, 0x6c, + 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x14, 0x7a, 0x68, 0x2d, 0x48, 0x61, 0x6e, 0x74, + 0x2d, 0x54, 0x57, 0x0c, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x0e, 0x67, 0x72, 0x65, 0x67, 0x6f, + 0x72, 0x79, 0x10, 0x62, 0x75, 0x64, 0x64, 0x68, + 0x69, 0x73, 0x74, 0x0e, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x73, 0x65, 0x0c, 0x63, 0x6f, 0x70, 0x74, + 0x69, 0x63, 0x0a, 0x64, 0x61, 0x6e, 0x67, 0x69, + 0x0e, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x61, 0x61, + 0x10, 0x65, 0x74, 0x68, 0x69, 0x6f, 0x70, 0x69, + 0x63, 0x0e, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, + 0x63, 0x0c, 0x68, 0x65, 0x62, 0x72, 0x65, 0x77, + 0x0c, 0x69, 0x6e, 0x64, 0x69, 0x61, 0x6e, 0x0e, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x10, + 0x69, 0x73, 0x6c, 0x61, 0x6d, 0x69, 0x63, 0x63, + 0x10, 0x6a, 0x61, 0x70, 0x61, 0x6e, 0x65, 0x73, + 0x65, 0x0e, 0x70, 0x65, 0x72, 0x73, 0x69, 0x61, + 0x6e, 0x06, 0x72, 0x6f, 0x63, 0x04, 0x63, 0x61, + 0x0e, 0x68, 0x6f, 0x75, 0x72, 0x4e, 0x6f, 0x30, + 0x0c, 0x68, 0x6f, 0x75, 0x72, 0x31, 0x32, 0x0e, + 0x7b, 0x31, 0x7d, 0x20, 0x7b, 0x30, 0x7d, 0x0a, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6d, 0x65, + 0x64, 0x69, 0x75, 0x6d, 0x08, 0x66, 0x75, 0x6c, + 0x6c, 0x08, 0x6c, 0x6f, 0x6e, 0x67, 0x05, 0x64, + 0x00, 0xe5, 0x65, 0x02, 0x64, 0x06, 0x63, 0x63, + 0x63, 0x02, 0x45, 0x06, 0x64, 0x20, 0x45, 0x04, + 0x45, 0x64, 0x0e, 0x45, 0x20, 0x61, 0x68, 0x3a, + 0x6d, 0x6d, 0x06, 0x45, 0x68, 0x6d, 0x0e, 0x45, + 0x20, 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x06, 0x45, + 0x48, 0x6d, 0x14, 0x45, 0x20, 0x61, 0x68, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x08, 0x45, 0x68, + 0x6d, 0x73, 0x14, 0x45, 0x20, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x08, 0x45, 0x48, + 0x6d, 0x73, 0x07, 0x47, 0x00, 0x79, 0x00, 0x74, + 0x5e, 0x04, 0x47, 0x79, 0x0b, 0x47, 0x00, 0x79, + 0x00, 0x74, 0x5e, 0x4d, 0x00, 0x08, 0x67, 0x0a, + 0x47, 0x79, 0x4d, 0x4d, 0x4d, 0x0f, 0x47, 0x00, + 0x79, 0x00, 0x74, 0x5e, 0x4d, 0x00, 0x08, 0x67, + 0x64, 0x00, 0xe5, 0x65, 0x0c, 0x47, 0x79, 0x4d, + 0x4d, 0x4d, 0x64, 0x13, 0x47, 0x00, 0x79, 0x00, + 0x74, 0x5e, 0x4d, 0x00, 0x08, 0x67, 0x64, 0x00, + 0xe5, 0x65, 0x20, 0x00, 0x45, 0x00, 0x0e, 0x47, + 0x79, 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x07, 0x61, + 0x00, 0x68, 0x00, 0x42, 0x66, 0x02, 0x68, 0x05, + 0x48, 0x00, 0x42, 0x66, 0x02, 0x48, 0x0a, 0x61, + 0x68, 0x3a, 0x6d, 0x6d, 0x04, 0x68, 0x6d, 0x0a, + 0x48, 0x48, 0x3a, 0x6d, 0x6d, 0x04, 0x48, 0x6d, + 0x10, 0x61, 0x68, 0x3a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x06, 0x68, 0x6d, 0x73, 0x10, 0x48, 0x48, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x06, 0x48, + 0x6d, 0x73, 0x18, 0x61, 0x68, 0x3a, 0x6d, 0x6d, + 0x3a, 0x73, 0x73, 0x20, 0x5b, 0x76, 0x5d, 0x08, + 0x68, 0x6d, 0x73, 0x76, 0x18, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x5b, 0x76, + 0x5d, 0x08, 0x48, 0x6d, 0x73, 0x76, 0x12, 0x61, + 0x68, 0x3a, 0x6d, 0x6d, 0x20, 0x5b, 0x76, 0x5d, + 0x06, 0x68, 0x6d, 0x76, 0x12, 0x48, 0x48, 0x3a, + 0x6d, 0x6d, 0x20, 0x5b, 0x76, 0x5d, 0x06, 0x48, + 0x6d, 0x76, 0x05, 0x4d, 0x00, 0x08, 0x67, 0x02, + 0x4d, 0x06, 0x4d, 0x2f, 0x64, 0x04, 0x4d, 0x64, + 0x0d, 0x4d, 0x00, 0x2f, 0x00, 0x64, 0x00, 0x08, + 0xff, 0x45, 0x00, 0x09, 0xff, 0x06, 0x4d, 0x45, + 0x64, 0x0a, 0x4d, 0x4d, 0x2f, 0x64, 0x64, 0x08, + 0x4d, 0x4d, 0x64, 0x64, 0x06, 0x4c, 0x4c, 0x4c, + 0x06, 0x4d, 0x4d, 0x4d, 0x09, 0x4d, 0x00, 0x08, + 0x67, 0x64, 0x00, 0xe5, 0x65, 0x08, 0x4d, 0x4d, + 0x4d, 0x64, 0x0d, 0x4d, 0x00, 0x08, 0x67, 0x64, + 0x00, 0xe5, 0x65, 0x20, 0x00, 0x45, 0x00, 0x0a, + 0x4d, 0x4d, 0x4d, 0x45, 0x64, 0x0a, 0x4d, 0x4d, + 0x4d, 0x4d, 0x64, 0x0a, 0x6d, 0x6d, 0x3a, 0x73, + 0x73, 0x04, 0x6d, 0x73, 0x05, 0x79, 0x00, 0x74, + 0x5e, 0x02, 0x79, 0x06, 0x79, 0x2f, 0x4d, 0x04, + 0x79, 0x4d, 0x0a, 0x79, 0x2f, 0x4d, 0x2f, 0x64, + 0x06, 0x79, 0x4d, 0x64, 0x11, 0x79, 0x00, 0x2f, + 0x00, 0x4d, 0x00, 0x2f, 0x00, 0x64, 0x00, 0x08, + 0xff, 0x45, 0x00, 0x09, 0xff, 0x08, 0x79, 0x4d, + 0x45, 0x64, 0x08, 0x79, 0x2f, 0x4d, 0x4d, 0x06, + 0x79, 0x4d, 0x4d, 0x09, 0x79, 0x00, 0x74, 0x5e, + 0x4d, 0x00, 0x08, 0x67, 0x08, 0x79, 0x4d, 0x4d, + 0x4d, 0x0d, 0x79, 0x00, 0x74, 0x5e, 0x4d, 0x00, + 0x08, 0x67, 0x64, 0x00, 0xe5, 0x65, 0x0a, 0x79, + 0x4d, 0x4d, 0x4d, 0x64, 0x11, 0x79, 0x00, 0x74, + 0x5e, 0x4d, 0x00, 0x08, 0x67, 0x64, 0x00, 0xe5, + 0x65, 0x20, 0x00, 0x45, 0x00, 0x0c, 0x79, 0x4d, + 0x4d, 0x4d, 0x45, 0x64, 0x0a, 0x79, 0x4d, 0x4d, + 0x4d, 0x4d, 0x0b, 0x79, 0x00, 0x74, 0x5e, 0x51, + 0x00, 0x51, 0x00, 0x51, 0x00, 0x08, 0x79, 0x51, + 0x51, 0x51, 0x0d, 0x79, 0x00, 0x74, 0x5e, 0x51, + 0x00, 0x51, 0x00, 0x51, 0x00, 0x51, 0x00, 0x0a, + 0x79, 0x51, 0x51, 0x51, 0x51, 0x20, 0x61, 0x76, + 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x46, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x17, 0x79, + 0x00, 0x74, 0x5e, 0x4d, 0x00, 0x08, 0x67, 0x64, + 0x00, 0xe5, 0x65, 0x20, 0x00, 0x45, 0x00, 0x45, + 0x00, 0x45, 0x00, 0x45, 0x00, 0x14, 0x79, 0x4d, + 0x4d, 0x4d, 0x4d, 0x45, 0x45, 0x45, 0x45, 0x64, + 0x0c, 0x79, 0x4d, 0x4d, 0x4d, 0x4d, 0x64, 0x16, + 0x64, 0x61, 0x74, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x73, 0x1e, 0x61, 0x68, 0x3a, 0x6d, + 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x5b, 0x7a, 0x7a, + 0x7a, 0x7a, 0x5d, 0x12, 0x68, 0x6d, 0x6d, 0x73, + 0x73, 0x7a, 0x7a, 0x7a, 0x7a, 0x18, 0x61, 0x68, + 0x3a, 0x6d, 0x6d, 0x3a, 0x73, 0x73, 0x20, 0x5b, + 0x7a, 0x5d, 0x08, 0x68, 0x6d, 0x73, 0x7a, 0x16, + 0x74, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x73, 0x0e, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x73, 0x0c, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x05, 0x31, 0x00, 0x08, 0x67, 0x05, + 0x32, 0x00, 0x08, 0x67, 0x05, 0x33, 0x00, 0x08, + 0x67, 0x05, 0x34, 0x00, 0x08, 0x67, 0x05, 0x35, + 0x00, 0x08, 0x67, 0x05, 0x36, 0x00, 0x08, 0x67, + 0x05, 0x37, 0x00, 0x08, 0x67, 0x05, 0x38, 0x00, + 0x08, 0x67, 0x05, 0x39, 0x00, 0x08, 0x67, 0x07, + 0x31, 0x00, 0x30, 0x00, 0x08, 0x67, 0x07, 0x31, + 0x00, 0x31, 0x00, 0x08, 0x67, 0x07, 0x31, 0x00, + 0x32, 0x00, 0x08, 0x67, 0x0c, 0x6d, 0x6f, 0x6e, + 0x74, 0x68, 0x73, 0x03, 0xe5, 0x65, 0x03, 0x00, + 0x4e, 0x03, 0x8c, 0x4e, 0x03, 0x09, 0x4e, 0x03, + 0xdb, 0x56, 0x03, 0x94, 0x4e, 0x03, 0x6d, 0x51, + 0x05, 0x31, 0x90, 0xe5, 0x65, 0x05, 0x31, 0x90, + 0x00, 0x4e, 0x05, 0x31, 0x90, 0x8c, 0x4e, 0x05, + 0x31, 0x90, 0x09, 0x4e, 0x05, 0x31, 0x90, 0xdb, + 0x56, 0x05, 0x31, 0x90, 0x94, 0x4e, 0x05, 0x31, + 0x90, 0x6d, 0x51, 0x07, 0x1f, 0x66, 0x1f, 0x67, + 0xe5, 0x65, 0x07, 0x1f, 0x66, 0x1f, 0x67, 0x00, + 0x4e, 0x07, 0x1f, 0x66, 0x1f, 0x67, 0x8c, 0x4e, + 0x07, 0x1f, 0x66, 0x1f, 0x67, 0x09, 0x4e, 0x07, + 0x1f, 0x66, 0x1f, 0x67, 0xdb, 0x56, 0x07, 0x1f, + 0x66, 0x1f, 0x67, 0x94, 0x4e, 0x07, 0x1f, 0x66, + 0x1f, 0x67, 0x6d, 0x51, 0x08, 0x64, 0x61, 0x79, + 0x73, 0x05, 0x5b, 0x4f, 0xc6, 0x66, 0x08, 0x65, + 0x72, 0x61, 0x73, 0x05, 0x0a, 0x4e, 0x48, 0x53, + 0x04, 0x61, 0x6d, 0x05, 0x0b, 0x4e, 0x48, 0x53, + 0x04, 0x70, 0x6d, 0x14, 0x64, 0x61, 0x79, 0x50, + 0x65, 0x72, 0x69, 0x6f, 0x64, 0x73, 0x03, 0x63, + 0x6b, 0x03, 0x03, 0x4e, 0x03, 0x6b, 0x51, 0x03, + 0x5d, 0x4e, 0x03, 0x41, 0x53, 0x03, 0xac, 0x51, + 0x03, 0xd8, 0x81, 0x05, 0x63, 0x6b, 0x08, 0x67, + 0x05, 0x8c, 0x4e, 0x08, 0x67, 0x05, 0x09, 0x4e, + 0x08, 0x67, 0x05, 0xdb, 0x56, 0x08, 0x67, 0x05, + 0x94, 0x4e, 0x08, 0x67, 0x05, 0x6d, 0x51, 0x08, + 0x67, 0x05, 0x03, 0x4e, 0x08, 0x67, 0x05, 0x6b, + 0x51, 0x08, 0x67, 0x05, 0x5d, 0x4e, 0x08, 0x67, + 0x05, 0x41, 0x53, 0x08, 0x67, 0x05, 0xac, 0x51, + 0x08, 0x67, 0x05, 0xd8, 0x81, 0x08, 0x67, 0x07, + 0x31, 0x00, 0x33, 0x00, 0x08, 0x67, 0x08, 0x45, + 0x52, 0x41, 0x30, 0x08, 0x45, 0x52, 0x41, 0x31, + 0x05, 0x41, 0x53, 0x00, 0x4e, 0x05, 0x41, 0x53, + 0x8c, 0x4e, 0x07, 0x41, 0x53, 0x00, 0x4e, 0x08, + 0x67, 0x07, 0x41, 0x53, 0x8c, 0x4e, 0x08, 0x67, + 0x06, 0x4d, 0x30, 0x31, 0x06, 0x4d, 0x30, 0x32, + 0x06, 0x4d, 0x30, 0x33, 0x06, 0x4d, 0x30, 0x34, + 0x06, 0x4d, 0x30, 0x35, 0x06, 0x4d, 0x30, 0x36, + 0x06, 0x4d, 0x30, 0x37, 0x06, 0x4d, 0x30, 0x38, + 0x06, 0x4d, 0x30, 0x39, 0x06, 0x4d, 0x31, 0x30, + 0x06, 0x4d, 0x31, 0x31, 0x06, 0x4d, 0x31, 0x32, + 0x07, 0x7f, 0x89, 0x43, 0x51, 0x4d, 0x52, 0x05, + 0x7f, 0x89, 0x43, 0x51, 0x07, 0x6c, 0x51, 0x43, + 0x51, 0x4d, 0x52, 0x05, 0x6c, 0x51, 0x43, 0x51, + 0x09, 0xd0, 0x63, 0xaf, 0x65, 0x29, 0x52, 0x08, + 0x67, 0x09, 0x6a, 0x74, 0x7f, 0x89, 0xed, 0x73, + 0x08, 0x67, 0x09, 0xfa, 0x57, 0xaf, 0x65, 0x41, + 0x6d, 0x08, 0x67, 0x07, 0xd0, 0x63, 0x25, 0x52, + 0x08, 0x67, 0x09, 0x30, 0x7d, 0x77, 0x7f, 0x79, + 0x72, 0x08, 0x67, 0x0b, 0x9e, 0x4e, 0x54, 0x90, + 0x08, 0x67, 0x20, 0x00, 0x49, 0x00, 0x07, 0x9e, + 0x4e, 0x54, 0x90, 0x08, 0x67, 0x07, 0x3c, 0x5c, + 0x63, 0x65, 0x08, 0x67, 0x07, 0xe5, 0x4e, 0xe5, + 0x73, 0x08, 0x67, 0x07, 0x7f, 0x89, 0x4e, 0x5f, + 0x08, 0x67, 0x09, 0x2d, 0x64, 0x21, 0x6a, 0xaf, + 0x65, 0x08, 0x67, 0x07, 0xc3, 0x57, 0xe2, 0x6c, + 0x08, 0x67, 0x07, 0xe5, 0x4e, 0x7f, 0x79, 0x08, + 0x67, 0x0d, 0x9e, 0x4e, 0x54, 0x90, 0x08, 0x67, + 0x20, 0x00, 0x49, 0x00, 0x49, 0x00, 0x09, 0x75, + 0x52, 0x16, 0x4e, 0x00, 0x7d, 0x43, 0x51, 0x09, + 0x36, 0x52, 0x80, 0x6a, 0x8f, 0x90, 0x08, 0x67, + 0x09, 0x20, 0x54, 0x0d, 0x82, 0x49, 0x4f, 0x08, + 0x67, 0x09, 0x1d, 0x90, 0x5f, 0x74, 0x12, 0x54, + 0x08, 0x67, 0x09, 0x1e, 0x98, 0x99, 0x6c, 0x7c, + 0x83, 0x08, 0x67, 0x0b, 0xa4, 0x5b, 0x85, 0x7f, + 0x10, 0x4f, 0xcf, 0x62, 0x08, 0x67, 0x0b, 0x46, + 0x5a, 0x85, 0x7f, 0x62, 0x92, 0x40, 0x96, 0x08, + 0x67, 0x0d, 0x1e, 0x98, 0x87, 0x6d, 0x1b, 0x7e, + 0x9a, 0x5e, 0xcd, 0x95, 0x08, 0x67, 0x0b, 0xe6, + 0x8f, 0x4c, 0x52, 0x95, 0x5e, 0xe6, 0x8f, 0x08, + 0x67, 0x0b, 0x2b, 0x67, 0x3d, 0x4f, 0xcb, 0x59, + 0x85, 0x7f, 0x08, 0x67, 0x07, 0x31, 0x58, 0x99, + 0x6c, 0x08, 0x67, 0x07, 0xe8, 0x78, 0x5b, 0x79, + 0x08, 0x67, 0x0b, 0x17, 0x98, 0xd2, 0x52, 0xb6, + 0x7a, 0xcf, 0x62, 0x08, 0x67, 0x07, 0x70, 0x53, + 0xa6, 0x5e, 0xc6, 0x66, 0x0b, 0x46, 0x7a, 0xc8, + 0x54, 0x2d, 0x86, 0xc6, 0x59, 0x08, 0x67, 0x09, + 0x72, 0x82, 0xd5, 0x6c, 0x3e, 0x72, 0x08, 0x67, + 0x0b, 0xf4, 0x8c, 0xd4, 0x6b, 0x08, 0x67, 0x20, + 0x00, 0x49, 0x00, 0x0d, 0xf4, 0x8c, 0xd4, 0x6b, + 0x08, 0x67, 0x20, 0x00, 0x49, 0x00, 0x49, 0x00, + 0x0d, 0x3b, 0x4e, 0xac, 0x99, 0x54, 0x90, 0x08, + 0x67, 0x20, 0x00, 0x49, 0x00, 0x0f, 0x3b, 0x4e, + 0xac, 0x99, 0x54, 0x90, 0x08, 0x67, 0x20, 0x00, + 0x49, 0x00, 0x49, 0x00, 0x09, 0xf4, 0x8c, 0xf2, + 0x54, 0x5c, 0x53, 0x08, 0x67, 0x09, 0x0d, 0x82, + 0x3e, 0x72, 0xa6, 0x90, 0x08, 0x67, 0x09, 0xf4, + 0x8c, 0xb7, 0x8c, 0x39, 0x4e, 0x08, 0x67, 0x09, + 0x83, 0x95, 0xe6, 0x74, 0x6f, 0x9b, 0x08, 0x67, + 0x0d, 0xfd, 0x90, 0x3e, 0x72, 0x80, 0x55, 0x3e, + 0x72, 0xb7, 0x5f, 0x08, 0x67, 0x0b, 0xfd, 0x90, + 0x3e, 0x72, 0xd1, 0x9e, 0xf2, 0x54, 0x08, 0x67, + 0x09, 0x0a, 0x4f, 0xaf, 0x65, 0x2d, 0x86, 0xc6, + 0x66, 0x1f, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x36, 0x00, 0x34, 0x00, 0x35, 0x00, 0x13, 0x20, + 0x36, 0x00, 0x35, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x23, 0x48, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x63, 0x00, 0x68, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x36, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x36, 0x00, 0x37, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x61, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x36, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, + 0x00, 0x75, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x36, 0x00, 0x38, + 0x00, 0x36, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x1f, 0x54, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x30, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x1d, 0x57, 0x00, 0x61, 0x00, + 0x64, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x37, 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x1f, 0x52, 0x00, 0x65, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x13, 0x20, 0x37, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, + 0x59, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x37, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x37, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x2d, 0x54, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x2d, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x6d, + 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x2d, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, 0x2b, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x79, + 0x00, 0x4d, 0x01, 0x2d, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x37, 0x00, 0x2d, + 0x00, 0x37, 0x00, 0x36, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x2d, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x2d, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x2d, 0x00, 0x37, 0x00, + 0x36, 0x00, 0x37, 0x00, 0x29, 0x00, 0x2a, 0x4a, + 0x69, 0x6e, 0x67, 0x6f, 0x2d, 0x6b, 0x65, 0x69, + 0x75, 0x6e, 0x20, 0x28, 0x37, 0x36, 0x37, 0x2d, + 0x37, 0x37, 0x30, 0x29, 0x1d, 0x48, 0x00, 0x4d, + 0x01, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x37, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x37, 0x00, 0x38, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x1f, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x2d, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x2d, 0x00, + 0x37, 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, + 0x23, 0x45, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x37, 0x00, 0x38, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x30, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x1f, 0x44, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x64, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x1f, 0x4b, 0x00, 0x4d, 0x01, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x1d, 0x4a, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x34, 0x00, 0x13, 0x20, 0x38, + 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, 0x00, 0x1d, + 0x4b, 0x00, 0x61, 0x00, 0x6a, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1f, 0x53, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x35, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x20, 0x54, 0x65, 0x6e, 0x2d, 0x61, + 0x6e, 0x20, 0x28, 0x38, 0x35, 0x37, 0x2d, 0x38, + 0x35, 0x39, 0x29, 0x1f, 0x4a, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x37, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x21, 0x47, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x1f, 0x4e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x38, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x70, 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x38, 0x00, 0x38, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x38, 0x00, 0x39, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x38, 0x00, 0x39, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x1f, 0x45, 0x00, 0x6e, 0x00, 0x63, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, 0x21, + 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x34, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x35, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x1b, 0x4c, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x39, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x1d, 0x4b, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x36, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x1d, 0x41, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x39, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, + 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x33, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x1f, 0x4a, 0x00, 0x4d, 0x01, 0x67, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x37, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x21, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x1f, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x38, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x39, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x1f, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, + 0x00, 0x38, 0x00, 0x35, 0x00, 0x13, 0x20, 0x39, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x1d, + 0x45, 0x00, 0x69, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, 0x38, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x39, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x1d, 0x45, 0x00, 0x69, + 0x00, 0x73, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x25, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x39, 0x00, + 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x39, 0x00, + 0x39, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x30, 0x00, 0x31, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, + 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x4d, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x32, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x32, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x33, 0x00, 0x37, 0x00, 0x29, 0x00, 0x29, 0x43, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x35, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x35, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x68, 0x00, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x35, 0x00, 0x38, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x29, 0x00, 0x27, 0x4a, 0x00, 0x69, + 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x36, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x29, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x37, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4c, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x30, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x63, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x36, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x30, 0x00, 0x39, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, 0x4a, 0x00, + 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x39, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x77, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x43, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x30, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x30, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x30, 0x00, 0x29, 0x00, 0x24, 0x54, + 0x65, 0x6e, 0x2d, 0x65, 0x69, 0x20, 0x28, 0x31, + 0x31, 0x31, 0x30, 0x2d, 0x31, 0x31, 0x31, 0x33, + 0x29, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, 0x00, + 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x29, + 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x44, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x25, 0x43, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x73, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, 0x69, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x4d, + 0x01, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x25, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x79, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x4e, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x6a, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x48, 0x00, + 0x4d, 0x01, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x23, 0x48, 0x00, 0x65, 0x00, 0x69, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x27, 0x45, 0x00, 0x69, 0x00, + 0x72, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x1f, 0x4c, 0x01, 0x68, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x33, 0x00, 0x29, + 0x00, 0x25, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x69, 0x00, 0x6d, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x4e, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x39, 0x00, 0x29, 0x00, 0x1f, 0x4b, + 0x00, 0x61, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x31, 0x00, 0x36, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x37, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, + 0x23, 0x41, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x69, 0x00, + 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x21, 0x59, + 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x32, 0x00, 0x29, 0x00, 0x21, + 0x4a, 0x00, 0x75, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x29, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, + 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x31, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x39, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x30, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x30, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x30, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x30, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x31, 0x00, 0x31, 0x00, 0x29, 0x00, 0x29, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, + 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, + 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, + 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x31, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, + 0x00, 0x79, 0x00, 0x6b, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x31, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x1f, 0x4a, 0x00, + 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x41, + 0x00, 0x6e, 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x29, 0x00, 0x21, 0x4a, 0x00, 0x4d, + 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x27, 0x54, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x75, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x33, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x29, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x79, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x33, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x74, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x33, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x29, 0x52, 0x00, 0x79, 0x00, 0x61, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x21, 0x45, 0x00, 0x6e, 0x00, 0x19, 0x20, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x33, 0x00, 0x39, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x23, 0x4e, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x34, 0x00, 0x33, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, + 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x37, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x34, 0x00, 0x39, + 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, 0x29, 0x00, + 0x23, 0x4b, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x35, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x67, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x35, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, 0x30, + 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x19, 0x20, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x32, 0x00, 0x37, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x32, 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, 0x33, + 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x32, 0x00, + 0x39, 0x00, 0x39, 0x00, 0x29, 0x00, 0x23, 0x53, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x33, 0x00, 0x29, 0x00, 0x23, 0x4b, + 0x00, 0x61, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x33, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x6a, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x30, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x30, 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x30, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x21, 0x4c, 0x01, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x31, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x31, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x21, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x31, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6b, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, 0x6b, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x32, 0x00, 0x36, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x61, 0x00, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x32, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x32, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x27, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x32, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x33, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, + 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x33, 0x00, 0x31, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, 0x00, + 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x6d, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x33, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x6e, 0x00, 0x67, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x33, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x30, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x34, 0x00, 0x30, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x68, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x33, 0x00, 0x34, 0x00, 0x36, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, 0x30, 0x00, + 0x29, 0x00, 0x27, 0x4b, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x37, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x37, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x27, 0x4b, 0x00, 0x4d, 0x01, 0x72, 0x00, + 0x79, 0x00, 0x61, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x37, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x77, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x25, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x6b, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x37, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, + 0x38, 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x33, 0x00, 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, + 0x1f, 0x4b, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x38, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, + 0x00, 0x39, 0x00, 0x30, 0x00, 0x29, 0x00, 0x27, + 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, + 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, 0x33, 0x00, + 0x39, 0x00, 0x34, 0x00, 0x29, 0x00, 0x1f, 0x4c, + 0x01, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x33, 0x00, 0x39, 0x00, 0x34, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x32, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x25, 0x53, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x63, 0x00, 0x68, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x23, 0x45, 0x00, 0x69, 0x00, 0x6b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x32, 0x00, 0x39, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, + 0x00, 0x31, 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x69, 0x00, 0x74, 0x00, + 0x73, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, 0x31, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x61, 0x00, 0x6e, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x39, 0x00, 0x29, + 0x00, 0x25, 0x48, 0x00, 0x4d, 0x01, 0x74, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x4b, + 0x00, 0x79, 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, 0x00, 0x32, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, + 0x4d, 0x01, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x34, 0x00, 0x35, 0x00, 0x37, 0x00, 0x29, 0x00, + 0x27, 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x35, + 0x00, 0x37, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, + 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, + 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x30, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x36, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, 0x29, + 0x00, 0x21, 0x4c, 0x01, 0x6e, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x36, 0x00, 0x37, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x39, 0x00, + 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, + 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x37, 0x00, 0x29, 0x00, 0x25, + 0x43, 0x00, 0x68, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, 0x37, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x39, 0x00, 0x29, 0x00, 0x25, 0x45, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, 0x29, + 0x00, 0x21, 0x4d, 0x00, 0x65, 0x00, 0x69, 0x00, + 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x34, 0x00, 0x39, 0x00, 0x32, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, 0x00, + 0x29, 0x00, 0x23, 0x42, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x30, + 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, 0x00, + 0x69, 0x00, 0x73, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x23, 0x54, 0x00, 0x61, 0x00, 0x69, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x35, 0x00, 0x32, 0x00, 0x38, + 0x00, 0x29, 0x00, 0x27, 0x4b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x35, 0x00, 0x32, 0x00, 0x38, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x35, 0x00, 0x33, 0x00, 0x32, 0x00, + 0x29, 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x62, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, 0x33, + 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, + 0x00, 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x21, + 0x4b, 0x00, 0x4d, 0x01, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x38, 0x00, 0x29, 0x00, + 0x25, 0x45, 0x00, 0x69, 0x00, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x35, 0x00, 0x38, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x37, + 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x47, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x37, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x35, 0x00, 0x37, 0x00, 0x33, 0x00, 0x29, 0x00, + 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, + 0x00, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x35, 0x00, 0x37, 0x00, 0x33, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, + 0x00, 0x32, 0x00, 0x29, 0x00, 0x27, 0x42, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, 0x32, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x35, 0x00, 0x39, 0x00, + 0x36, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x63, 0x00, 0x68, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x35, + 0x00, 0x39, 0x00, 0x36, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, 0x29, + 0x00, 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x31, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x32, 0x00, + 0x34, 0x00, 0x29, 0x00, 0x25, 0x4b, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x32, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x53, 0x00, 0x68, 0x00, 0x4d, 0x01, + 0x68, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, + 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, + 0x00, 0x35, 0x00, 0x32, 0x00, 0x29, 0x00, 0x1f, + 0x4a, 0x00, 0x4d, 0x01, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x32, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x35, 0x00, 0x29, 0x00, 0x27, 0x4d, + 0x00, 0x65, 0x00, 0x69, 0x00, 0x72, 0x00, 0x65, + 0x00, 0x6b, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x35, 0x00, 0x35, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x38, 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, + 0x35, 0x00, 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x36, 0x00, 0x36, 0x00, 0x31, 0x00, 0x29, 0x00, + 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x62, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, + 0x00, 0x31, 0x00, 0x36, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x37, + 0x00, 0x33, 0x00, 0x29, 0x00, 0x21, 0x45, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x36, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x31, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x23, 0x4a, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x79, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x36, 0x00, 0x38, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x27, 0x47, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x36, 0x00, 0x38, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x21, 0x48, 0x00, 0x4d, 0x01, + 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x37, 0x00, 0x30, 0x00, 0x34, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x31, 0x00, 0x29, 0x00, 0x27, 0x53, 0x00, 0x68, + 0x00, 0x4d, 0x01, 0x74, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x31, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, 0x36, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x68, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x31, 0x00, + 0x36, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x33, 0x00, 0x36, 0x00, 0x29, 0x00, 0x25, 0x47, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x62, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x33, 0x00, 0x36, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x70, 0x00, 0x4d, 0x01, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x34, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x45, + 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x34, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x4b, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x19, 0x20, 0x65, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x34, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x35, 0x00, 0x31, 0x00, 0x29, 0x00, 0x25, 0x48, + 0x00, 0x4d, 0x01, 0x72, 0x00, 0x65, 0x00, 0x6b, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x35, 0x00, 0x31, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x4d, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x36, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x37, 0x00, 0x32, 0x00, 0x29, 0x00, 0x23, 0x41, + 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x37, + 0x00, 0x37, 0x00, 0x32, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x31, 0x00, 0x29, + 0x00, 0x25, 0x54, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x6d, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x37, 0x00, 0x38, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x37, 0x00, + 0x38, 0x00, 0x39, 0x00, 0x29, 0x00, 0x25, 0x4b, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x37, 0x00, 0x38, 0x00, 0x39, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x23, 0x4b, 0x00, 0x79, 0x00, + 0x4d, 0x01, 0x77, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x30, 0x00, + 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x30, 0x00, 0x34, 0x00, 0x29, 0x00, 0x23, 0x42, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x6b, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x30, 0x00, 0x34, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x31, 0x00, 0x38, 0x00, 0x29, + 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x33, 0x00, 0x30, 0x00, 0x29, 0x00, 0x23, 0x54, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x70, 0x00, 0x4d, + 0x01, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x13, 0x20, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, 0x29, + 0x00, 0x21, 0x4b, 0x00, 0x4d, 0x01, 0x6b, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, + 0x38, 0x00, 0x34, 0x00, 0x34, 0x00, 0x13, 0x20, + 0x31, 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, + 0x29, 0x00, 0x21, 0x4b, 0x00, 0x61, 0x00, 0x65, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x34, 0x00, 0x38, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, 0x34, + 0x00, 0x29, 0x00, 0x23, 0x41, 0x00, 0x6e, 0x00, + 0x73, 0x00, 0x65, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, 0x35, 0x00, + 0x34, 0x00, 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x30, 0x00, 0x29, 0x00, 0x25, 0x4d, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x19, 0x20, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x30, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x31, + 0x00, 0x29, 0x00, 0x25, 0x42, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x6b, 0x01, + 0x20, 0x00, 0x28, 0x00, 0x31, 0x00, 0x38, 0x00, + 0x36, 0x00, 0x31, 0x00, 0x13, 0x20, 0x31, 0x00, + 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, 0x29, 0x00, + 0x23, 0x47, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x28, 0x00, 0x31, + 0x00, 0x38, 0x00, 0x36, 0x00, 0x34, 0x00, 0x13, + 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, + 0x00, 0x29, 0x00, 0x21, 0x4b, 0x00, 0x65, 0x00, + 0x69, 0x00, 0x4d, 0x01, 0x20, 0x00, 0x28, 0x00, + 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, 0x35, 0x00, + 0x13, 0x20, 0x31, 0x00, 0x38, 0x00, 0x36, 0x00, + 0x38, 0x00, 0x29, 0x00, 0x02, 0x54, 0x02, 0x53, + 0x05, 0x27, 0x59, 0x16, 0x53, 0x05, 0x7d, 0x76, + 0xc9, 0x96, 0x05, 0x7d, 0x76, 0xf3, 0x9c, 0x05, + 0x31, 0x67, 0xe5, 0x9c, 0x05, 0x27, 0x59, 0xf6, + 0x5b, 0x05, 0x76, 0x61, 0xf2, 0x96, 0x05, 0x8c, + 0x54, 0x85, 0x92, 0x05, 0x48, 0x97, 0x9c, 0x9f, + 0x05, 0x0a, 0x99, 0x01, 0x80, 0x05, 0x5e, 0x79, + 0x9c, 0x9f, 0x05, 0x29, 0x59, 0x73, 0x5e, 0x09, + 0x29, 0x59, 0x73, 0x5e, 0x1f, 0x61, 0xf6, 0x5b, + 0x09, 0x29, 0x59, 0x73, 0x5e, 0xdd, 0x52, 0xf6, + 0x5b, 0x09, 0x29, 0x59, 0x73, 0x5e, 0xf6, 0x5b, + 0x57, 0x5b, 0x09, 0x29, 0x59, 0x73, 0x5e, 0x5e, + 0x79, 0x77, 0x8b, 0x09, 0x5e, 0x79, 0x77, 0x8b, + 0x6f, 0x66, 0xf2, 0x96, 0x05, 0xf6, 0x5b, 0x9c, + 0x9f, 0x05, 0x29, 0x59, 0xc9, 0x61, 0x05, 0xf6, + 0x5e, 0xc6, 0x66, 0x05, 0x27, 0x59, 0x0c, 0x54, + 0x05, 0x18, 0x5f, 0xc1, 0x4e, 0x05, 0x29, 0x59, + 0x77, 0x95, 0x05, 0x7f, 0x62, 0x8c, 0x54, 0x05, + 0x09, 0x56, 0x65, 0x79, 0x05, 0xc1, 0x4e, 0xfd, + 0x58, 0x05, 0x4a, 0x9f, 0x61, 0x88, 0x05, 0x29, + 0x59, 0x89, 0x5b, 0x05, 0x9e, 0x8c, 0xc0, 0x89, + 0x05, 0x43, 0x51, 0x76, 0x61, 0x05, 0xc1, 0x4e, + 0x8c, 0x54, 0x05, 0xec, 0x5b, 0x73, 0x5e, 0x05, + 0x0c, 0x66, 0xf0, 0x6c, 0x05, 0xf6, 0x5e, 0x9c, + 0x55, 0x05, 0xf6, 0x5e, 0x77, 0x95, 0x05, 0x7f, + 0x62, 0x73, 0x5e, 0x05, 0x29, 0x59, 0x76, 0x61, + 0x05, 0x29, 0x59, 0xc6, 0x66, 0x05, 0x29, 0x59, + 0xb7, 0x5f, 0x05, 0xc9, 0x61, 0x8c, 0x54, 0x05, + 0xb7, 0x5e, 0xdd, 0x4f, 0x05, 0x89, 0x5b, 0x8c, + 0x54, 0x05, 0x29, 0x59, 0x7f, 0x79, 0x05, 0x29, + 0x59, 0xf6, 0x5e, 0x05, 0x9e, 0x8c, 0x43, 0x51, + 0x05, 0x29, 0x59, 0x43, 0x51, 0x05, 0x38, 0x6c, + 0xc0, 0x89, 0x05, 0xec, 0x5b, 0x8c, 0x54, 0x05, + 0x38, 0x6c, 0xf6, 0x5e, 0x05, 0x38, 0x6c, 0x5a, + 0x79, 0x05, 0x63, 0x6b, 0xc6, 0x66, 0x05, 0x77, + 0x95, 0xb7, 0x5f, 0x05, 0x77, 0x95, 0xdd, 0x4f, + 0x05, 0xec, 0x5b, 0x18, 0x5f, 0x05, 0x77, 0x95, + 0x8c, 0x54, 0x05, 0xec, 0x5b, 0xc1, 0x4e, 0x05, + 0xbb, 0x6c, 0x89, 0x5b, 0x05, 0x2c, 0x84, 0xfd, + 0x58, 0x05, 0x77, 0x95, 0x43, 0x51, 0x05, 0x77, + 0x95, 0xc6, 0x66, 0x05, 0x77, 0x95, 0x45, 0x4e, + 0x05, 0xec, 0x5b, 0xb7, 0x5f, 0x05, 0x38, 0x6c, + 0x7f, 0x62, 0x05, 0x29, 0x59, 0x9c, 0x55, 0x05, + 0xb7, 0x5e, 0x73, 0x5e, 0x05, 0xbb, 0x6c, 0xc6, + 0x66, 0x05, 0xf6, 0x5e, 0x45, 0x4e, 0x05, 0x7f, + 0x62, 0xdd, 0x4f, 0x05, 0x7f, 0x62, 0xc6, 0x66, + 0x05, 0x38, 0x6c, 0xdd, 0x4f, 0x05, 0xc9, 0x61, + 0xb7, 0x5f, 0x05, 0xec, 0x5b, 0xbb, 0x6c, 0x05, + 0x09, 0x56, 0xdd, 0x4f, 0x05, 0x38, 0x6c, 0x77, + 0x95, 0x05, 0x7f, 0x62, 0xb7, 0x5f, 0x05, 0xb7, + 0x5e, 0x8c, 0x54, 0x05, 0x77, 0x95, 0xbb, 0x6c, + 0x05, 0x09, 0x56, 0x7f, 0x62, 0x05, 0x29, 0x59, + 0xc1, 0x4e, 0x05, 0x29, 0x59, 0x38, 0x6c, 0x05, + 0x38, 0x6c, 0x45, 0x4e, 0x05, 0x43, 0x51, 0x38, + 0x6c, 0x05, 0xdd, 0x4f, 0x89, 0x5b, 0x05, 0x29, + 0x59, 0xbb, 0x6c, 0x05, 0x27, 0x59, 0xbb, 0x6c, + 0x05, 0x29, 0x59, 0x7f, 0x62, 0x05, 0x77, 0x95, + 0x7f, 0x62, 0x05, 0xdd, 0x4f, 0xf6, 0x5e, 0x05, + 0x38, 0x6c, 0xbb, 0x6c, 0x05, 0xb7, 0x5e, 0xbb, + 0x6c, 0x05, 0x29, 0x59, 0x0a, 0x99, 0x05, 0x45, + 0x4e, 0x89, 0x5b, 0x05, 0xc1, 0x4e, 0x73, 0x5e, + 0x05, 0x45, 0x4e, 0xfd, 0x58, 0x05, 0xdd, 0x4f, + 0x43, 0x51, 0x05, 0x73, 0x5e, 0xbb, 0x6c, 0x05, + 0x38, 0x6c, 0xc6, 0x66, 0x05, 0xc9, 0x61, 0xdd, + 0x4f, 0x05, 0x77, 0x95, 0xec, 0x5b, 0x05, 0x38, + 0x6c, 0x2c, 0x84, 0x05, 0xc1, 0x4e, 0x89, 0x5b, + 0x05, 0x09, 0x56, 0xc9, 0x61, 0x05, 0x7f, 0x62, + 0x89, 0x5b, 0x05, 0x89, 0x5b, 0x43, 0x51, 0x05, + 0xbb, 0x6c, 0x7f, 0x62, 0x05, 0x0a, 0x99, 0x8c, + 0x54, 0x05, 0xfd, 0x58, 0x38, 0x6c, 0x05, 0x43, + 0x51, 0xc6, 0x66, 0x05, 0x87, 0x65, 0xbb, 0x6c, + 0x05, 0xfa, 0x5e, 0x45, 0x4e, 0x05, 0x63, 0x6b, + 0xbb, 0x6c, 0x05, 0xfa, 0x5e, 0xc1, 0x4e, 0x05, + 0x43, 0x51, 0x45, 0x4e, 0x05, 0xfa, 0x5e, 0x38, + 0x6c, 0x05, 0x7f, 0x62, 0x43, 0x51, 0x05, 0xfa, + 0x5e, 0xc6, 0x66, 0x05, 0xfa, 0x5e, 0xdd, 0x4f, + 0x05, 0x7f, 0x62, 0x45, 0x4e, 0x05, 0x9e, 0x8c, + 0xc9, 0x61, 0x05, 0x43, 0x51, 0xc1, 0x4e, 0x05, + 0x09, 0x56, 0x7f, 0x79, 0x05, 0x89, 0x5b, 0x9e, + 0x8c, 0x05, 0xec, 0x5b, 0x9c, 0x55, 0x05, 0x9e, + 0x8c, 0x38, 0x6c, 0x05, 0x29, 0x59, 0x8f, 0x79, + 0x05, 0x87, 0x65, 0xc6, 0x66, 0x05, 0x09, 0x56, + 0x8e, 0x79, 0x05, 0xc6, 0x66, 0xc1, 0x4e, 0x05, + 0xf6, 0x5e, 0xc9, 0x61, 0x05, 0xc1, 0x4e, 0xbb, + 0x6c, 0x05, 0xec, 0x5b, 0x43, 0x51, 0x05, 0xf6, + 0x5b, 0xbb, 0x6c, 0x05, 0xfa, 0x5e, 0x77, 0x95, + 0x05, 0xb7, 0x5e, 0x43, 0x51, 0x05, 0x63, 0x6b, + 0x09, 0x56, 0x05, 0x63, 0x6b, 0x43, 0x51, 0x05, + 0x87, 0x65, 0xc9, 0x61, 0x05, 0x18, 0x5f, 0x77, + 0x95, 0x05, 0x87, 0x65, 0x38, 0x6c, 0x05, 0xfa, + 0x5e, 0xbb, 0x6c, 0x05, 0x18, 0x5f, 0x89, 0x5b, + 0x05, 0x63, 0x6b, 0xc9, 0x61, 0x05, 0x38, 0x6c, + 0xc1, 0x4e, 0x05, 0x63, 0x6b, 0x89, 0x5b, 0x05, + 0x7e, 0x4e, 0x43, 0x51, 0x05, 0x09, 0x56, 0x43, + 0x51, 0x05, 0xb7, 0x5f, 0xbb, 0x6c, 0x05, 0xf6, + 0x5e, 0x76, 0x61, 0x05, 0xc9, 0x61, 0x77, 0x95, + 0x05, 0x63, 0x6b, 0x8c, 0x54, 0x05, 0x87, 0x65, + 0xdd, 0x4f, 0x05, 0x43, 0x51, 0xc9, 0x61, 0x05, + 0x43, 0x51, 0xa8, 0x4e, 0x05, 0x63, 0x6b, 0x2d, + 0x4e, 0x05, 0x09, 0x56, 0xc6, 0x66, 0x05, 0x43, + 0x51, 0xb7, 0x5f, 0x05, 0x43, 0x51, 0x18, 0x5f, + 0x05, 0xfa, 0x5e, 0x66, 0x6b, 0x05, 0xf6, 0x5e, + 0x43, 0x51, 0x05, 0x08, 0x82, 0x0b, 0x57, 0x05, + 0x63, 0x6b, 0x73, 0x5e, 0x05, 0xfa, 0x5e, 0xb7, + 0x5f, 0x05, 0x87, 0x65, 0x2d, 0x4e, 0x05, 0x29, + 0x59, 0x88, 0x63, 0x05, 0xb7, 0x5e, 0xc6, 0x66, + 0x05, 0x18, 0x5f, 0x8c, 0x54, 0x05, 0x43, 0x51, + 0x2d, 0x4e, 0x05, 0xf3, 0x81, 0xb7, 0x5f, 0x05, + 0x09, 0x56, 0x76, 0x61, 0x05, 0xb7, 0x5e, 0xc9, + 0x61, 0x05, 0x0e, 0x66, 0xb7, 0x5f, 0x05, 0xc9, + 0x61, 0x38, 0x6c, 0x05, 0x63, 0x6b, 0x77, 0x95, + 0x05, 0x38, 0x6c, 0xab, 0x4e, 0x05, 0x09, 0x56, + 0x09, 0x54, 0x05, 0x87, 0x65, 0x89, 0x5b, 0x05, + 0xf6, 0x5b, 0xb7, 0x5f, 0x05, 0xab, 0x4e, 0xb7, + 0x5f, 0x05, 0xb7, 0x5e, 0x63, 0x6b, 0x05, 0x77, + 0x95, 0x7f, 0x79, 0x05, 0xec, 0x5b, 0x63, 0x6b, + 0x05, 0x87, 0x65, 0x63, 0x6b, 0x05, 0xc9, 0x61, + 0xc1, 0x4e, 0x05, 0x87, 0x65, 0x0e, 0x66, 0x05, + 0x77, 0x95, 0xab, 0x4e, 0x05, 0xf6, 0x5e, 0xb7, + 0x5f, 0x05, 0x0e, 0x66, 0xc9, 0x61, 0x05, 0x87, + 0x65, 0x9c, 0x9f, 0x05, 0x38, 0x6c, 0x63, 0x6b, + 0x05, 0x27, 0x59, 0x38, 0x6c, 0x05, 0xab, 0x4e, + 0x7f, 0x79, 0x05, 0x29, 0x59, 0x87, 0x65, 0x05, + 0x18, 0x5f, 0xbb, 0x6c, 0x05, 0x38, 0x6c, 0x7f, + 0x79, 0x05, 0x43, 0x51, 0x9c, 0x9f, 0x05, 0x29, + 0x59, 0x63, 0x6b, 0x05, 0x87, 0x65, 0x7f, 0x79, + 0x05, 0x76, 0x61, 0x77, 0x95, 0x05, 0x43, 0x51, + 0x8c, 0x54, 0x05, 0xec, 0x5b, 0x38, 0x6c, 0x05, + 0x63, 0x6b, 0xdd, 0x4f, 0x05, 0x76, 0x61, 0x89, + 0x5b, 0x05, 0x7f, 0x62, 0xc9, 0x61, 0x05, 0x0e, + 0x66, 0xc6, 0x66, 0x05, 0x2c, 0x84, 0xbb, 0x6c, + 0x05, 0xec, 0x5b, 0x87, 0x65, 0x05, 0xf6, 0x5e, + 0xf6, 0x5b, 0x05, 0x29, 0x59, 0x8c, 0x54, 0x05, + 0x9e, 0x8c, 0xab, 0x4e, 0x05, 0x43, 0x51, 0x7f, + 0x79, 0x05, 0xf6, 0x5b, 0x38, 0x6c, 0x05, 0x63, + 0x6b, 0xb7, 0x5f, 0x05, 0xab, 0x4e, 0xdd, 0x4f, + 0x05, 0x43, 0x51, 0x87, 0x65, 0x05, 0xec, 0x5b, + 0xdd, 0x4f, 0x05, 0xf6, 0x5e, 0xab, 0x4e, 0x05, + 0xec, 0x5b, 0xf6, 0x5e, 0x05, 0xf6, 0x5b, 0xc6, + 0x66, 0x05, 0x0e, 0x66, 0x8c, 0x54, 0x05, 0x89, + 0x5b, 0x38, 0x6c, 0x05, 0x29, 0x59, 0x0e, 0x66, + 0x05, 0xec, 0x5b, 0x3f, 0x65, 0x05, 0xab, 0x4e, + 0x8c, 0x54, 0x05, 0x87, 0x65, 0x16, 0x53, 0x05, + 0x87, 0x65, 0x3f, 0x65, 0x05, 0x29, 0x59, 0xdd, + 0x4f, 0x05, 0x18, 0x5f, 0x16, 0x53, 0x05, 0x09, + 0x56, 0x38, 0x6c, 0x05, 0x89, 0x5b, 0x3f, 0x65, + 0x05, 0x2c, 0x84, 0xf6, 0x5e, 0x05, 0x87, 0x65, + 0x45, 0x4e, 0x05, 0x43, 0x51, 0xbb, 0x6c, 0x05, + 0x76, 0x61, 0xc9, 0x61, 0x05, 0x0e, 0x66, 0xbb, + 0x6c, 0x05, 0x27, 0x59, 0x63, 0x6b, 0x05, 0x2d, + 0x66, 0x8c, 0x54, 0x05, 0x73, 0x5e, 0x10, 0x62, + 0x07, 0xe2, 0x6c, 0xaf, 0x65, 0xc6, 0x66, 0x07, + 0x11, 0x6c, 0x0b, 0x57, 0x4d, 0x52, 0x05, 0x11, + 0x6c, 0x0b, 0x57, 0x12, 0x63, 0x61, 0x6c, 0x65, + 0x6e, 0x64, 0x61, 0x72, 0x73, 0x08, 0x64, 0x61, + 0x74, 0x65, 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, + 0x6e, 0x75, 0x10, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0x1e, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x76, 0x65, 0x50, 0x61, 0x74, 0x74, + 0x65, 0x72, 0x6e, 0x26, 0x7b, 0x6d, 0x69, 0x6e, + 0x75, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, 0x1e, + 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x50, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, 0x0e, + 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x6c, 0x24, + 0x7b, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, + 0x79, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0x3a, 0x7b, 0x6d, 0x69, 0x6e, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x7b, 0x63, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x79, 0x7d, + 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x7d, + 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, + 0x79, 0x2a, 0x7b, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x7d, 0x7b, 0x70, 0x65, 0x72, 0x63, 0x65, + 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, 0x40, + 0x7b, 0x6d, 0x69, 0x6e, 0x75, 0x73, 0x53, 0x69, + 0x67, 0x6e, 0x7d, 0x7b, 0x6e, 0x75, 0x6d, 0x62, + 0x65, 0x72, 0x7d, 0x7b, 0x70, 0x65, 0x72, 0x63, + 0x65, 0x6e, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x7d, + 0x0e, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, + 0x10, 0x70, 0x61, 0x74, 0x74, 0x65, 0x72, 0x6e, + 0x73, 0x02, 0x2e, 0x02, 0x2c, 0x0a, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x07, 0x5e, 0x97, 0x78, 0x65, + 0x3c, 0x50, 0x06, 0x6e, 0x61, 0x6e, 0x02, 0x2b, + 0x10, 0x70, 0x6c, 0x75, 0x73, 0x53, 0x69, 0x67, + 0x6e, 0x02, 0x2d, 0x12, 0x6d, 0x69, 0x6e, 0x75, + 0x73, 0x53, 0x69, 0x67, 0x6e, 0x02, 0x25, 0x16, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x53, + 0x69, 0x67, 0x6e, 0x03, 0x1e, 0x22, 0x10, 0x69, + 0x6e, 0x66, 0x69, 0x6e, 0x69, 0x74, 0x79, 0x0e, + 0x68, 0x61, 0x6e, 0x69, 0x64, 0x65, 0x63, 0x0e, + 0x73, 0x79, 0x6d, 0x62, 0x6f, 0x6c, 0x73, 0x06, + 0x41, 0x55, 0x24, 0x06, 0x41, 0x55, 0x44, 0x04, + 0x52, 0x24, 0x06, 0x42, 0x52, 0x4c, 0x06, 0x43, + 0x41, 0x24, 0x06, 0x43, 0x41, 0x44, 0x06, 0x43, + 0x4e, 0xa5, 0x06, 0x43, 0x4e, 0x59, 0x03, 0xac, + 0x20, 0x06, 0x45, 0x55, 0x52, 0x02, 0xa3, 0x06, + 0x47, 0x42, 0x50, 0x06, 0x48, 0x4b, 0x24, 0x06, + 0x48, 0x4b, 0x44, 0x03, 0xaa, 0x20, 0x06, 0x49, + 0x4c, 0x53, 0x03, 0xb9, 0x20, 0x06, 0x49, 0x4e, + 0x52, 0x02, 0xa5, 0x06, 0x4a, 0x50, 0x59, 0x03, + 0xe6, 0xff, 0x06, 0x4b, 0x52, 0x57, 0x06, 0x4d, + 0x58, 0x24, 0x06, 0x4d, 0x58, 0x4e, 0x06, 0x4e, + 0x5a, 0x24, 0x06, 0x4e, 0x5a, 0x44, 0x02, 0x24, + 0x06, 0x54, 0x57, 0x44, 0x06, 0x55, 0x53, 0x24, + 0x06, 0x55, 0x53, 0x44, 0x03, 0xab, 0x20, 0x06, + 0x56, 0x4e, 0x44, 0x08, 0x46, 0x43, 0x46, 0x41, + 0x06, 0x58, 0x41, 0x46, 0x06, 0x45, 0x43, 0x24, + 0x06, 0x58, 0x43, 0x44, 0x06, 0x43, 0x46, 0x41, + 0x06, 0x58, 0x4f, 0x46, 0x08, 0x43, 0x46, 0x50, + 0x46, 0x06, 0x58, 0x50, 0x46, 0x14, 0x63, 0x75, + 0x72, 0x72, 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, + 0x62, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, + 0x74, 0x6c, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x6a, + 0x73, 0x6f, 0x6e, 0x70, 0x2f, 0x7a, 0x68, 0x2d, + 0x48, 0x61, 0x6e, 0x74, 0x2d, 0x54, 0x57, 0x2e, + 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, + 0x00, 0x01, 0x00, 0x27, 0x00, 0xa1, 0x01, 0xec, + 0x6a, 0x01, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x39, + 0xd0, 0x00, 0x00, 0x00, 0x43, 0xd1, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd2, 0x00, 0x00, 0x00, 0x4d, + 0xd3, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd4, 0x00, + 0x00, 0x00, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x04, + 0xd6, 0x00, 0x00, 0x00, 0x04, 0xd7, 0x00, 0x00, + 0x00, 0x04, 0xd8, 0x00, 0x00, 0x00, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x04, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdb, 0x00, 0x00, 0x00, 0x04, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x04, + 0xde, 0x00, 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, + 0x00, 0x04, 0xe0, 0x00, 0x00, 0x00, 0x04, 0xe1, + 0x00, 0x00, 0x00, 0x04, 0xe2, 0x00, 0x00, 0x00, + 0x26, 0x0f, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, + 0x0a, 0x4d, 0xe4, 0x00, 0x00, 0x00, 0x0a, 0x4d, + 0xe5, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, + 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe9, + 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0xec, 0x00, 0x00, 0x00, + 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, 0xee, 0x00, + 0x00, 0x00, 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, + 0xf0, 0x00, 0x00, 0x00, 0x04, 0xf1, 0x00, 0x00, + 0x00, 0x4d, 0xf2, 0x00, 0x00, 0x00, 0x04, 0xf3, + 0x00, 0x00, 0x00, 0x4d, 0xf4, 0x00, 0x00, 0x00, + 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0xf6, 0x00, + 0x00, 0x00, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, + 0xf8, 0x00, 0x00, 0x00, 0x04, 0xf9, 0x00, 0x00, + 0x00, 0x4d, 0xfa, 0x00, 0x00, 0x00, 0x04, 0xfb, + 0x00, 0x00, 0x00, 0x4d, 0xfc, 0x00, 0x00, 0x00, + 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, 0xfe, 0x00, + 0x00, 0x00, 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x01, 0x00, 0x00, 0x04, 0x01, 0x01, 0x00, + 0x00, 0x4d, 0x02, 0x01, 0x00, 0x00, 0x04, 0x03, + 0x01, 0x00, 0x00, 0x4d, 0x04, 0x01, 0x00, 0x00, + 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, 0x06, 0x01, + 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, + 0x08, 0x01, 0x00, 0x00, 0x04, 0x09, 0x01, 0x00, + 0x00, 0x4d, 0x0a, 0x01, 0x00, 0x00, 0x04, 0x0b, + 0x01, 0x00, 0x00, 0x4d, 0x0c, 0x01, 0x00, 0x00, + 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, 0x0e, 0x01, + 0x00, 0x00, 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, + 0x10, 0x01, 0x00, 0x00, 0x04, 0x11, 0x01, 0x00, + 0x00, 0x4d, 0x12, 0x01, 0x00, 0x00, 0x04, 0x13, + 0x01, 0x00, 0x00, 0x4d, 0x14, 0x01, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, 0x16, 0x01, + 0x00, 0x00, 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, + 0x18, 0x01, 0x00, 0x00, 0x04, 0x19, 0x01, 0x00, + 0x00, 0x4d, 0x1a, 0x01, 0x00, 0x00, 0x04, 0x1b, + 0x01, 0x00, 0x00, 0x4d, 0x1c, 0x01, 0x00, 0x00, + 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, 0x1e, 0x01, + 0x00, 0x00, 0x04, 0x1f, 0x01, 0x00, 0x00, 0x4d, + 0x20, 0x01, 0x00, 0x00, 0x04, 0x21, 0x01, 0x00, + 0x00, 0x4d, 0x22, 0x01, 0x00, 0x00, 0x04, 0x1f, + 0x01, 0x00, 0x00, 0x4d, 0x23, 0x01, 0x00, 0x00, + 0x04, 0x24, 0x01, 0x00, 0x00, 0x4d, 0x25, 0x01, + 0x00, 0x00, 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, + 0x27, 0x01, 0x00, 0x00, 0x04, 0x28, 0x01, 0x00, + 0x00, 0x4d, 0x29, 0x01, 0x00, 0x00, 0x04, 0x2a, + 0x01, 0x00, 0x00, 0x4d, 0x2b, 0x01, 0x00, 0x00, + 0x04, 0x2c, 0x01, 0x00, 0x00, 0x4d, 0x2d, 0x01, + 0x00, 0x00, 0x04, 0x2e, 0x01, 0x00, 0x00, 0x4d, + 0x2f, 0x01, 0x00, 0x00, 0x04, 0x30, 0x01, 0x00, + 0x00, 0x4d, 0x31, 0x01, 0x00, 0x00, 0x04, 0x32, + 0x01, 0x00, 0x00, 0x4d, 0x33, 0x01, 0x00, 0x00, + 0x04, 0x34, 0x01, 0x00, 0x00, 0x4d, 0x35, 0x01, + 0x00, 0x00, 0x04, 0x30, 0x01, 0x00, 0x00, 0x4d, + 0x36, 0x01, 0x00, 0x00, 0x04, 0x37, 0x01, 0x00, + 0x00, 0x4d, 0x38, 0x01, 0x00, 0x00, 0x04, 0x39, + 0x01, 0x00, 0x00, 0x4d, 0x3a, 0x01, 0x00, 0x00, + 0x4d, 0x3b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x3c, + 0x01, 0x00, 0x00, 0x4d, 0x3d, 0x01, 0x00, 0x00, + 0x04, 0x32, 0x01, 0x00, 0x00, 0x4d, 0x3e, 0x01, + 0x00, 0x00, 0x04, 0x32, 0x01, 0x00, 0x00, 0x4d, + 0x33, 0x01, 0x00, 0x00, 0x04, 0x2a, 0x01, 0x00, + 0x00, 0x4d, 0x2b, 0x01, 0x00, 0x00, 0x4d, 0x3f, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x40, 0x01, 0x00, + 0x00, 0x4d, 0x41, 0x01, 0x00, 0x00, 0x04, 0x42, + 0x01, 0x00, 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, + 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0x0a, 0x01, + 0x00, 0x00, 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, + 0x06, 0x01, 0x00, 0x00, 0x4d, 0x44, 0x01, 0x00, + 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x0b, 0xbe, 0x00, 0xbe, 0x01, 0xbe, 0x02, 0xbe, + 0x03, 0xbe, 0x04, 0xbe, 0x05, 0xbe, 0x06, 0xbe, + 0x07, 0xbe, 0x08, 0xbe, 0x09, 0xbe, 0x0a, 0xbe, + 0x0b, 0x26, 0x0c, 0x00, 0x4d, 0x46, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x53, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x46, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6a, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x46, + 0x01, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0x6a, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x4d, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x4d, + 0x70, 0x01, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x71, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, + 0x01, 0x00, 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, + 0x04, 0x75, 0x01, 0x00, 0x00, 0x04, 0x76, 0x01, + 0x00, 0x00, 0x04, 0x77, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0x46, 0x01, 0x00, 0x00, 0x04, + 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, + 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, + 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, + 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, + 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, + 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, + 0x00, 0x04, 0x82, 0x01, 0x00, 0x00, 0x04, 0x83, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, + 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, + 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, + 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, + 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, + 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, + 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, 0x82, 0x01, + 0x00, 0x00, 0x04, 0x83, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x53, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x46, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x69, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6c, 0x01, 0x00, + 0x00, 0x4d, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, + 0x01, 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, + 0x4d, 0x70, 0x01, 0x00, 0x00, 0x4d, 0xd6, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x0c, 0xbe, 0x0d, + 0xbe, 0x0e, 0xbe, 0x0f, 0xbe, 0x10, 0xbe, 0x11, + 0xbe, 0x12, 0xbe, 0x13, 0xbe, 0x14, 0xbe, 0x15, + 0xbe, 0x16, 0xbe, 0x17, 0xbe, 0x18, 0x26, 0x0d, + 0x00, 0x4d, 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x26, + 0x0d, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, + 0x26, 0x0d, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x53, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x46, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0x46, 0x01, 0x00, 0x00, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, + 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x4d, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x4d, 0x70, 0x01, + 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x71, 0x01, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, + 0x00, 0x04, 0x74, 0x01, 0x00, 0x00, 0x04, 0x75, + 0x01, 0x00, 0x00, 0x04, 0x87, 0x01, 0x00, 0x00, + 0x04, 0x88, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0x46, 0x01, 0x00, 0x00, 0x04, 0x78, 0x01, + 0x00, 0x00, 0x04, 0x79, 0x01, 0x00, 0x00, 0x04, + 0x7a, 0x01, 0x00, 0x00, 0x04, 0x7b, 0x01, 0x00, + 0x00, 0x04, 0x7c, 0x01, 0x00, 0x00, 0x04, 0x7d, + 0x01, 0x00, 0x00, 0x04, 0x7e, 0x01, 0x00, 0x00, + 0x04, 0x7f, 0x01, 0x00, 0x00, 0x04, 0x80, 0x01, + 0x00, 0x00, 0x04, 0x81, 0x01, 0x00, 0x00, 0x04, + 0x89, 0x01, 0x00, 0x00, 0x04, 0x8a, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x78, 0x01, 0x00, 0x00, 0x04, 0x79, + 0x01, 0x00, 0x00, 0x04, 0x7a, 0x01, 0x00, 0x00, + 0x04, 0x7b, 0x01, 0x00, 0x00, 0x04, 0x7c, 0x01, + 0x00, 0x00, 0x04, 0x7d, 0x01, 0x00, 0x00, 0x04, + 0x7e, 0x01, 0x00, 0x00, 0x04, 0x7f, 0x01, 0x00, + 0x00, 0x04, 0x80, 0x01, 0x00, 0x00, 0x04, 0x81, + 0x01, 0x00, 0x00, 0x04, 0x89, 0x01, 0x00, 0x00, + 0x04, 0x8a, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x53, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x46, 0x01, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x4d, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x4d, 0x70, + 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x19, 0xbe, 0x1a, 0xbe, 0x1b, + 0xbe, 0x1c, 0xbe, 0x1d, 0xbe, 0x1e, 0xbe, 0x1f, + 0xbe, 0x20, 0xbe, 0x21, 0xbe, 0x22, 0xbe, 0x23, + 0xbe, 0x24, 0xbe, 0x25, 0x26, 0x0d, 0x00, 0x4d, + 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, + 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x84, 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x04, 0x84, 0x01, 0x00, 0x00, 0x26, 0x0d, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x53, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x46, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x85, 0x01, 0x00, 0x00, + 0x04, 0x86, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0x46, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x26, + 0x02, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x85, 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x4d, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x4d, 0x6f, + 0x01, 0x00, 0x00, 0x4d, 0x70, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x26, 0xbe, 0x27, 0xbe, 0x28, 0xbe, 0x29, 0xbe, + 0x2a, 0xbe, 0x2b, 0xbe, 0x2c, 0xbe, 0x2d, 0xbe, + 0x2e, 0xbe, 0x2f, 0xbe, 0x30, 0xbe, 0x31, 0xbe, + 0x32, 0x26, 0x0d, 0x00, 0x4d, 0x46, 0x01, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x84, 0x01, + 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x04, 0x84, + 0x01, 0x00, 0x00, 0x26, 0x0d, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x53, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x46, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x85, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x46, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x4d, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, + 0x00, 0x4d, 0x70, 0x01, 0x00, 0x00, 0x4d, 0xd9, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x33, 0xbe, + 0x34, 0xbe, 0x35, 0xbe, 0x36, 0xbe, 0x37, 0xbe, + 0x38, 0xbe, 0x39, 0xbe, 0x3a, 0xbe, 0x3b, 0xbe, + 0x3c, 0xbe, 0x3d, 0xbe, 0x3e, 0x26, 0x0c, 0x00, + 0x4d, 0x46, 0x01, 0x00, 0x00, 0x04, 0x8b, 0x01, + 0x00, 0x00, 0x04, 0x8c, 0x01, 0x00, 0x00, 0x04, + 0x8d, 0x01, 0x00, 0x00, 0x04, 0x8e, 0x01, 0x00, + 0x00, 0x04, 0x8f, 0x01, 0x00, 0x00, 0x04, 0x90, + 0x01, 0x00, 0x00, 0x04, 0x91, 0x01, 0x00, 0x00, + 0x04, 0x92, 0x01, 0x00, 0x00, 0x04, 0x93, 0x01, + 0x00, 0x00, 0x04, 0x94, 0x01, 0x00, 0x00, 0x04, + 0x95, 0x01, 0x00, 0x00, 0x04, 0x96, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x8b, 0x01, 0x00, 0x00, 0x04, 0x8c, + 0x01, 0x00, 0x00, 0x04, 0x8d, 0x01, 0x00, 0x00, + 0x04, 0x8e, 0x01, 0x00, 0x00, 0x04, 0x8f, 0x01, + 0x00, 0x00, 0x04, 0x90, 0x01, 0x00, 0x00, 0x04, + 0x91, 0x01, 0x00, 0x00, 0x04, 0x92, 0x01, 0x00, + 0x00, 0x04, 0x93, 0x01, 0x00, 0x00, 0x04, 0x94, + 0x01, 0x00, 0x00, 0x04, 0x95, 0x01, 0x00, 0x00, + 0x04, 0x96, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x53, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x46, 0x01, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x85, 0x01, 0x00, 0x00, 0x04, + 0x86, 0x01, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, + 0x46, 0x01, 0x00, 0x00, 0x04, 0x85, 0x01, 0x00, + 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, 0x26, 0x02, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x85, + 0x01, 0x00, 0x00, 0x04, 0x86, 0x01, 0x00, 0x00, + 0x26, 0x02, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6c, + 0x01, 0x00, 0x00, 0x4d, 0x6d, 0x01, 0x00, 0x00, + 0x04, 0x6e, 0x01, 0x00, 0x00, 0x4d, 0x6f, 0x01, + 0x00, 0x00, 0x4d, 0x70, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x3f, + 0xbe, 0x40, 0xbe, 0x41, 0xbe, 0x42, 0xbe, 0x43, + 0xbe, 0x44, 0xbe, 0x45, 0xbe, 0x46, 0xbe, 0x47, + 0xbe, 0x48, 0xbe, 0x49, 0xbe, 0x4a, 0x26, 0x0c, + 0x00, 0x4d, 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x53, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, + 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0x46, 0x01, 0x00, 0x00, 0x04, + 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, + 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, + 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, + 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, + 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x97, 0x01, 0x00, 0x00, + 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, + 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x26, + 0x04, 0x00, 0x4d, 0x46, 0x01, 0x00, 0x00, 0x04, + 0x97, 0x01, 0x00, 0x00, 0x04, 0x98, 0x01, 0x00, + 0x00, 0x04, 0x99, 0x01, 0x00, 0x00, 0x04, 0x9a, + 0x01, 0x00, 0x00, 0x26, 0x04, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x97, 0x01, 0x00, 0x00, + 0x04, 0x98, 0x01, 0x00, 0x00, 0x04, 0x99, 0x01, + 0x00, 0x00, 0x04, 0x9a, 0x01, 0x00, 0x00, 0x26, + 0x04, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x4d, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, + 0x00, 0x4d, 0x70, 0x01, 0x00, 0x00, 0x4d, 0xd4, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x4b, 0xbe, + 0x4c, 0xbe, 0x4d, 0xbe, 0x4e, 0xbe, 0x4f, 0xbe, + 0x50, 0xbe, 0x51, 0xbe, 0x52, 0xbe, 0x53, 0xbe, + 0x54, 0xbe, 0x55, 0xbe, 0x56, 0xbe, 0x57, 0xbe, + 0x58, 0x26, 0x0e, 0x00, 0x4d, 0x46, 0x01, 0x00, + 0x00, 0x04, 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, + 0x01, 0x00, 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, + 0x04, 0x9e, 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, + 0x00, 0x00, 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, + 0xa1, 0x01, 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, + 0x00, 0x04, 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, + 0x01, 0x00, 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, + 0x04, 0xa6, 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, + 0x00, 0x00, 0x04, 0xa8, 0x01, 0x00, 0x00, 0x26, + 0x0e, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x9b, 0x01, 0x00, 0x00, 0x04, 0x9c, 0x01, 0x00, + 0x00, 0x04, 0x9d, 0x01, 0x00, 0x00, 0x04, 0x9e, + 0x01, 0x00, 0x00, 0x04, 0x9f, 0x01, 0x00, 0x00, + 0x04, 0xa0, 0x01, 0x00, 0x00, 0x04, 0xa1, 0x01, + 0x00, 0x00, 0x04, 0xa2, 0x01, 0x00, 0x00, 0x04, + 0xa3, 0x01, 0x00, 0x00, 0x04, 0xa4, 0x01, 0x00, + 0x00, 0x04, 0xa5, 0x01, 0x00, 0x00, 0x04, 0xa6, + 0x01, 0x00, 0x00, 0x04, 0xa7, 0x01, 0x00, 0x00, + 0x04, 0xa8, 0x01, 0x00, 0x00, 0x26, 0x0e, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x53, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x46, 0x01, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xa9, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x46, 0x01, 0x00, 0x00, 0x04, + 0xa9, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0xa9, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x4d, 0x6d, 0x01, 0x00, + 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x4d, 0x6f, + 0x01, 0x00, 0x00, 0x4d, 0x70, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, + 0x59, 0xbe, 0x5a, 0xbe, 0x5b, 0xbe, 0x5c, 0xbe, + 0x5d, 0xbe, 0x5e, 0xbe, 0x5f, 0xbe, 0x60, 0xbe, + 0x61, 0xbe, 0x62, 0xbe, 0x63, 0xbe, 0x64, 0x26, + 0x0c, 0x00, 0x4d, 0x46, 0x01, 0x00, 0x00, 0x04, + 0xaa, 0x01, 0x00, 0x00, 0x04, 0xab, 0x01, 0x00, + 0x00, 0x04, 0xac, 0x01, 0x00, 0x00, 0x04, 0xad, + 0x01, 0x00, 0x00, 0x04, 0xae, 0x01, 0x00, 0x00, + 0x04, 0xaf, 0x01, 0x00, 0x00, 0x04, 0xb0, 0x01, + 0x00, 0x00, 0x04, 0xb1, 0x01, 0x00, 0x00, 0x04, + 0xb2, 0x01, 0x00, 0x00, 0x04, 0xb3, 0x01, 0x00, + 0x00, 0x04, 0xb4, 0x01, 0x00, 0x00, 0x04, 0xb5, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0xaa, 0x01, 0x00, 0x00, + 0x04, 0xab, 0x01, 0x00, 0x00, 0x04, 0xac, 0x01, + 0x00, 0x00, 0x04, 0xad, 0x01, 0x00, 0x00, 0x04, + 0xae, 0x01, 0x00, 0x00, 0x04, 0xaf, 0x01, 0x00, + 0x00, 0x04, 0xb0, 0x01, 0x00, 0x00, 0x04, 0xb1, + 0x01, 0x00, 0x00, 0x04, 0xb2, 0x01, 0x00, 0x00, + 0x04, 0xb3, 0x01, 0x00, 0x00, 0x04, 0xb4, 0x01, + 0x00, 0x00, 0x04, 0xb5, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x53, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x54, 0x01, + 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0x46, 0x01, 0x00, 0x00, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, + 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, + 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, + 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x69, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xb6, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x46, 0x01, 0x00, + 0x00, 0x04, 0xb6, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xb6, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x4d, 0x6d, + 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, + 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x4d, 0x70, 0x01, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0xbe, 0x65, 0xbe, 0x66, 0xbe, 0x67, 0xbe, + 0x68, 0xbe, 0x69, 0xbe, 0x6a, 0xbe, 0x6b, 0xbe, + 0x6c, 0xbe, 0x6d, 0xbe, 0x6e, 0xbe, 0x6f, 0xbe, + 0x70, 0x26, 0x0c, 0x00, 0x4d, 0x46, 0x01, 0x00, + 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, + 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, + 0x04, 0xba, 0x01, 0x00, 0x00, 0x04, 0xbb, 0x01, + 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, 0x00, 0x04, + 0xbd, 0x01, 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, + 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, 0x04, 0xc0, + 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, + 0x04, 0xc2, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0xb7, 0x01, + 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, 0x00, 0x04, + 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, + 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, + 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, + 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, + 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, 0x00, 0x04, + 0xc1, 0x01, 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x53, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, + 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x46, 0x01, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, + 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, + 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, + 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, + 0x04, 0x61, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, + 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, + 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, + 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xc3, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x46, + 0x01, 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x04, 0xc3, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x4d, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x4d, + 0x70, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0xbe, 0x71, 0xbe, 0x72, 0xbe, + 0x73, 0xbe, 0x74, 0xbe, 0x75, 0xbe, 0x76, 0xbe, + 0x77, 0xbe, 0x78, 0xbe, 0x79, 0xbe, 0x7a, 0xbe, + 0x7b, 0xbe, 0x7c, 0x26, 0x0c, 0x00, 0x4d, 0x46, + 0x01, 0x00, 0x00, 0x04, 0xb7, 0x01, 0x00, 0x00, + 0x04, 0xb8, 0x01, 0x00, 0x00, 0x04, 0xb9, 0x01, + 0x00, 0x00, 0x04, 0xba, 0x01, 0x00, 0x00, 0x04, + 0xbb, 0x01, 0x00, 0x00, 0x04, 0xbc, 0x01, 0x00, + 0x00, 0x04, 0xbd, 0x01, 0x00, 0x00, 0x04, 0xbe, + 0x01, 0x00, 0x00, 0x04, 0xbf, 0x01, 0x00, 0x00, + 0x04, 0xc0, 0x01, 0x00, 0x00, 0x04, 0xc1, 0x01, + 0x00, 0x00, 0x04, 0xc2, 0x01, 0x00, 0x00, 0x26, + 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0xb7, 0x01, 0x00, 0x00, 0x04, 0xb8, 0x01, 0x00, + 0x00, 0x04, 0xb9, 0x01, 0x00, 0x00, 0x04, 0xba, + 0x01, 0x00, 0x00, 0x04, 0xbb, 0x01, 0x00, 0x00, + 0x04, 0xbc, 0x01, 0x00, 0x00, 0x04, 0xbd, 0x01, + 0x00, 0x00, 0x04, 0xbe, 0x01, 0x00, 0x00, 0x04, + 0xbf, 0x01, 0x00, 0x00, 0x04, 0xc0, 0x01, 0x00, + 0x00, 0x04, 0xc1, 0x01, 0x00, 0x00, 0x04, 0xc2, + 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x53, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, + 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, + 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0x46, 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, + 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, + 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, + 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, + 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, + 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xc3, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x46, 0x01, 0x00, 0x00, 0x04, 0xc3, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xc3, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x6b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x6c, 0x01, + 0x00, 0x00, 0x4d, 0x6d, 0x01, 0x00, 0x00, 0x04, + 0x6e, 0x01, 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, + 0x00, 0x4d, 0x70, 0x01, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0xbe, 0x7d, 0xbe, + 0x7e, 0xbe, 0x7f, 0xbe, 0x80, 0xbe, 0x81, 0xbe, + 0x82, 0xbe, 0x83, 0xbe, 0x84, 0xbe, 0x85, 0xbe, + 0x86, 0xbe, 0x87, 0xbe, 0x88, 0x26, 0x0c, 0x00, + 0x4d, 0x46, 0x01, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x53, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x04, 0x55, 0x01, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0x46, 0x01, 0x00, 0x00, 0x04, 0x5b, + 0x01, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x04, 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, + 0x00, 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x04, 0x63, + 0x01, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x04, 0x65, 0x01, 0x00, 0x00, 0x04, 0x66, 0x01, + 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x69, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xc4, 0x01, 0x00, 0x00, 0x04, + 0xc5, 0x01, 0x00, 0x00, 0x04, 0xc6, 0x01, 0x00, + 0x00, 0x04, 0xc7, 0x01, 0x00, 0x00, 0x04, 0xc8, + 0x01, 0x00, 0x00, 0x04, 0xc9, 0x01, 0x00, 0x00, + 0x04, 0xca, 0x01, 0x00, 0x00, 0x04, 0xcb, 0x01, + 0x00, 0x00, 0x04, 0xcc, 0x01, 0x00, 0x00, 0x04, + 0xcd, 0x01, 0x00, 0x00, 0x04, 0xce, 0x01, 0x00, + 0x00, 0x04, 0xcf, 0x01, 0x00, 0x00, 0x04, 0xd0, + 0x01, 0x00, 0x00, 0x04, 0xd1, 0x01, 0x00, 0x00, + 0x04, 0xd2, 0x01, 0x00, 0x00, 0x04, 0xd3, 0x01, + 0x00, 0x00, 0x04, 0xd4, 0x01, 0x00, 0x00, 0x04, + 0xd5, 0x01, 0x00, 0x00, 0x04, 0xd6, 0x01, 0x00, + 0x00, 0x04, 0xd7, 0x01, 0x00, 0x00, 0x04, 0xd8, + 0x01, 0x00, 0x00, 0x04, 0xd9, 0x01, 0x00, 0x00, + 0x04, 0xda, 0x01, 0x00, 0x00, 0x04, 0xdb, 0x01, + 0x00, 0x00, 0x04, 0xdc, 0x01, 0x00, 0x00, 0x04, + 0xdd, 0x01, 0x00, 0x00, 0x04, 0xde, 0x01, 0x00, + 0x00, 0x04, 0xdf, 0x01, 0x00, 0x00, 0x04, 0xe0, + 0x01, 0x00, 0x00, 0x04, 0xe1, 0x01, 0x00, 0x00, + 0x04, 0xe2, 0x01, 0x00, 0x00, 0x04, 0xe3, 0x01, + 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, 0xe4, 0x01, + 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, + 0xe5, 0x01, 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, + 0x80, 0x04, 0xe6, 0x01, 0x00, 0x00, 0x4d, 0x22, + 0x00, 0x00, 0x80, 0x04, 0xe7, 0x01, 0x00, 0x00, + 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, 0xe8, 0x01, + 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, + 0xe9, 0x01, 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, + 0x80, 0x04, 0xea, 0x01, 0x00, 0x00, 0x4d, 0x26, + 0x00, 0x00, 0x80, 0x04, 0xeb, 0x01, 0x00, 0x00, + 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, 0xec, 0x01, + 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, + 0xed, 0x01, 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, + 0x80, 0x04, 0xee, 0x01, 0x00, 0x00, 0x4d, 0x2a, + 0x00, 0x00, 0x80, 0x04, 0xef, 0x01, 0x00, 0x00, + 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, 0xf0, 0x01, + 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, + 0xf1, 0x01, 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, + 0x80, 0x04, 0xf2, 0x01, 0x00, 0x00, 0x4d, 0x2e, + 0x00, 0x00, 0x80, 0x04, 0xf3, 0x01, 0x00, 0x00, + 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, 0xf4, 0x01, + 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, + 0xf5, 0x01, 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, + 0x80, 0x04, 0xf6, 0x01, 0x00, 0x00, 0x4d, 0x32, + 0x00, 0x00, 0x80, 0x04, 0xf7, 0x01, 0x00, 0x00, + 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, 0xf8, 0x01, + 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, + 0xf9, 0x01, 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, + 0x80, 0x04, 0xfa, 0x01, 0x00, 0x00, 0x4d, 0x36, + 0x00, 0x00, 0x80, 0x04, 0xfb, 0x01, 0x00, 0x00, + 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, 0xfc, 0x01, + 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, + 0xfd, 0x01, 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, + 0x80, 0x04, 0xfe, 0x01, 0x00, 0x00, 0x4d, 0x3a, + 0x00, 0x00, 0x80, 0x04, 0xff, 0x01, 0x00, 0x00, + 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, 0x00, 0x02, + 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, + 0x01, 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, + 0x80, 0x04, 0x02, 0x02, 0x00, 0x00, 0x4d, 0x3e, + 0x00, 0x00, 0x80, 0x04, 0x03, 0x02, 0x00, 0x00, + 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, 0x04, 0x02, + 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, + 0x05, 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, + 0x80, 0x04, 0x06, 0x02, 0x00, 0x00, 0x4d, 0x42, + 0x00, 0x00, 0x80, 0x04, 0x07, 0x02, 0x00, 0x00, + 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, 0x08, 0x02, + 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, + 0x09, 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, + 0x80, 0x04, 0x0a, 0x02, 0x00, 0x00, 0x4d, 0x46, + 0x00, 0x00, 0x80, 0x04, 0x0b, 0x02, 0x00, 0x00, + 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x02, + 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, + 0x0d, 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, + 0x80, 0x04, 0x0e, 0x02, 0x00, 0x00, 0x4d, 0x4a, + 0x00, 0x00, 0x80, 0x04, 0x0f, 0x02, 0x00, 0x00, + 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, 0x10, 0x02, + 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, + 0x11, 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, + 0x80, 0x04, 0x12, 0x02, 0x00, 0x00, 0x4d, 0x4e, + 0x00, 0x00, 0x80, 0x04, 0x13, 0x02, 0x00, 0x00, + 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, 0x14, 0x02, + 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, + 0x15, 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, + 0x80, 0x04, 0x16, 0x02, 0x00, 0x00, 0x4d, 0x52, + 0x00, 0x00, 0x80, 0x04, 0x17, 0x02, 0x00, 0x00, + 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, 0x18, 0x02, + 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, + 0x19, 0x02, 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, + 0x80, 0x04, 0x1a, 0x02, 0x00, 0x00, 0x4d, 0x56, + 0x00, 0x00, 0x80, 0x04, 0x1b, 0x02, 0x00, 0x00, + 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, 0x1c, 0x02, + 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, + 0x1d, 0x02, 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, + 0x80, 0x04, 0x1e, 0x02, 0x00, 0x00, 0x4d, 0x5a, + 0x00, 0x00, 0x80, 0x04, 0x1f, 0x02, 0x00, 0x00, + 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, 0x20, 0x02, + 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, + 0x21, 0x02, 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, + 0x80, 0x04, 0x22, 0x02, 0x00, 0x00, 0x4d, 0x5e, + 0x00, 0x00, 0x80, 0x04, 0x23, 0x02, 0x00, 0x00, + 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, 0x24, 0x02, + 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, + 0x25, 0x02, 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, + 0x80, 0x04, 0x26, 0x02, 0x00, 0x00, 0x4d, 0x62, + 0x00, 0x00, 0x80, 0x04, 0x27, 0x02, 0x00, 0x00, + 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, 0x28, 0x02, + 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, + 0x29, 0x02, 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, + 0x80, 0x04, 0x2a, 0x02, 0x00, 0x00, 0x4d, 0x66, + 0x00, 0x00, 0x80, 0x04, 0x2b, 0x02, 0x00, 0x00, + 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, 0x2c, 0x02, + 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, + 0x2d, 0x02, 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, + 0x80, 0x04, 0x2e, 0x02, 0x00, 0x00, 0x4d, 0x6a, + 0x00, 0x00, 0x80, 0x04, 0x2f, 0x02, 0x00, 0x00, + 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, 0x30, 0x02, + 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, + 0x31, 0x02, 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, + 0x80, 0x04, 0x32, 0x02, 0x00, 0x00, 0x4d, 0x6e, + 0x00, 0x00, 0x80, 0x04, 0x33, 0x02, 0x00, 0x00, + 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, 0x34, 0x02, + 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, + 0x35, 0x02, 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, + 0x80, 0x04, 0x36, 0x02, 0x00, 0x00, 0x4d, 0x72, + 0x00, 0x00, 0x80, 0x04, 0x37, 0x02, 0x00, 0x00, + 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, 0x38, 0x02, + 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, + 0x39, 0x02, 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, + 0x80, 0x04, 0x3a, 0x02, 0x00, 0x00, 0x4d, 0x76, + 0x00, 0x00, 0x80, 0x04, 0x3b, 0x02, 0x00, 0x00, + 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, 0x3c, 0x02, + 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, + 0x3d, 0x02, 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, + 0x80, 0x04, 0x3e, 0x02, 0x00, 0x00, 0x4d, 0x7a, + 0x00, 0x00, 0x80, 0x04, 0x3f, 0x02, 0x00, 0x00, + 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, 0x40, 0x02, + 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, + 0x41, 0x02, 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, + 0x80, 0x04, 0x42, 0x02, 0x00, 0x00, 0x4d, 0x7e, + 0x00, 0x00, 0x80, 0x04, 0x43, 0x02, 0x00, 0x00, + 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, 0x44, 0x02, + 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, + 0x45, 0x02, 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, + 0x80, 0x04, 0x46, 0x02, 0x00, 0x00, 0x4d, 0x82, + 0x00, 0x00, 0x80, 0x04, 0x47, 0x02, 0x00, 0x00, + 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, 0x48, 0x02, + 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, + 0x49, 0x02, 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, + 0x80, 0x04, 0x4a, 0x02, 0x00, 0x00, 0x4d, 0x86, + 0x00, 0x00, 0x80, 0x04, 0x4b, 0x02, 0x00, 0x00, + 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, 0x4c, 0x02, + 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, + 0x4d, 0x02, 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, + 0x80, 0x04, 0x4e, 0x02, 0x00, 0x00, 0x4d, 0x8a, + 0x00, 0x00, 0x80, 0x04, 0x4f, 0x02, 0x00, 0x00, + 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, 0x50, 0x02, + 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, + 0x51, 0x02, 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, + 0x80, 0x04, 0x52, 0x02, 0x00, 0x00, 0x4d, 0x8e, + 0x00, 0x00, 0x80, 0x04, 0x53, 0x02, 0x00, 0x00, + 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, 0x54, 0x02, + 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, + 0x55, 0x02, 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, + 0x80, 0x04, 0x56, 0x02, 0x00, 0x00, 0x4d, 0x92, + 0x00, 0x00, 0x80, 0x04, 0x57, 0x02, 0x00, 0x00, + 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, 0x58, 0x02, + 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, + 0x59, 0x02, 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, + 0x80, 0x04, 0x5a, 0x02, 0x00, 0x00, 0x4d, 0x96, + 0x00, 0x00, 0x80, 0x04, 0x5b, 0x02, 0x00, 0x00, + 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, 0x5c, 0x02, + 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, + 0x5d, 0x02, 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, + 0x80, 0x04, 0x5e, 0x02, 0x00, 0x00, 0x4d, 0x9a, + 0x00, 0x00, 0x80, 0x04, 0x5f, 0x02, 0x00, 0x00, + 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, 0x60, 0x02, + 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, + 0x61, 0x02, 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, + 0x80, 0x04, 0x62, 0x02, 0x00, 0x00, 0x4d, 0x9e, + 0x00, 0x00, 0x80, 0x04, 0x63, 0x02, 0x00, 0x00, + 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, 0x64, 0x02, + 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, + 0x65, 0x02, 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, + 0x80, 0x04, 0x66, 0x02, 0x00, 0x00, 0x4d, 0xa2, + 0x00, 0x00, 0x80, 0x04, 0x67, 0x02, 0x00, 0x00, + 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, 0x68, 0x02, + 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, + 0x69, 0x02, 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, + 0x80, 0x04, 0x6a, 0x02, 0x00, 0x00, 0x4d, 0xa6, + 0x00, 0x00, 0x80, 0x04, 0x6b, 0x02, 0x00, 0x00, + 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, 0x6c, 0x02, + 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, + 0x6d, 0x02, 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, + 0x80, 0x04, 0x6e, 0x02, 0x00, 0x00, 0x4d, 0xaa, + 0x00, 0x00, 0x80, 0x04, 0x6f, 0x02, 0x00, 0x00, + 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, 0x70, 0x02, + 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, + 0x71, 0x02, 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, + 0x80, 0x04, 0x72, 0x02, 0x00, 0x00, 0x4d, 0xae, + 0x00, 0x00, 0x80, 0x04, 0x73, 0x02, 0x00, 0x00, + 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, 0x74, 0x02, + 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, + 0x75, 0x02, 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, + 0x80, 0x04, 0x76, 0x02, 0x00, 0x00, 0x4d, 0xb2, + 0x00, 0x00, 0x80, 0x04, 0x77, 0x02, 0x00, 0x00, + 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, 0x78, 0x02, + 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, + 0x79, 0x02, 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, + 0x80, 0x04, 0x7a, 0x02, 0x00, 0x00, 0x4d, 0xb6, + 0x00, 0x00, 0x80, 0x04, 0x7b, 0x02, 0x00, 0x00, + 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, 0x7c, 0x02, + 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, + 0x7d, 0x02, 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, + 0x80, 0x04, 0x7e, 0x02, 0x00, 0x00, 0x4d, 0xba, + 0x00, 0x00, 0x80, 0x04, 0x7f, 0x02, 0x00, 0x00, + 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, 0x80, 0x02, + 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, + 0x81, 0x02, 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, + 0x80, 0x04, 0x82, 0x02, 0x00, 0x00, 0x4d, 0xbe, + 0x00, 0x00, 0x80, 0x04, 0x83, 0x02, 0x00, 0x00, + 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, 0x84, 0x02, + 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, + 0x85, 0x02, 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, + 0x80, 0x04, 0x86, 0x02, 0x00, 0x00, 0x4d, 0xc2, + 0x00, 0x00, 0x80, 0x04, 0x87, 0x02, 0x00, 0x00, + 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, 0x88, 0x02, + 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, + 0x89, 0x02, 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, + 0x80, 0x04, 0x8a, 0x02, 0x00, 0x00, 0x4d, 0xc6, + 0x00, 0x00, 0x80, 0x04, 0x8b, 0x02, 0x00, 0x00, + 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, 0x8c, 0x02, + 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, + 0x8d, 0x02, 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, + 0x80, 0x04, 0x8e, 0x02, 0x00, 0x00, 0x4d, 0xca, + 0x00, 0x00, 0x80, 0x04, 0x8f, 0x02, 0x00, 0x00, + 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, 0x90, 0x02, + 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, + 0x91, 0x02, 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, + 0x80, 0x04, 0x92, 0x02, 0x00, 0x00, 0x4d, 0xce, + 0x00, 0x00, 0x80, 0x04, 0x93, 0x02, 0x00, 0x00, + 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, 0x94, 0x02, + 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, + 0x95, 0x02, 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, + 0x80, 0x04, 0x96, 0x02, 0x00, 0x00, 0x4d, 0xd2, + 0x00, 0x00, 0x80, 0x04, 0x97, 0x02, 0x00, 0x00, + 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, 0x98, 0x02, + 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, + 0x99, 0x02, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, + 0x80, 0x04, 0x9a, 0x02, 0x00, 0x00, 0x4d, 0xd6, + 0x00, 0x00, 0x80, 0x04, 0x9b, 0x02, 0x00, 0x00, + 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, 0x9c, 0x02, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, + 0x9d, 0x02, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, + 0x80, 0x04, 0x9e, 0x02, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x80, 0x04, 0x9f, 0x02, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, 0xa0, 0x02, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, + 0xa1, 0x02, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x80, 0x04, 0xa2, 0x02, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x80, 0x04, 0xa3, 0x02, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, 0xa4, 0x02, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, + 0xa5, 0x02, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, + 0x80, 0x04, 0xa6, 0x02, 0x00, 0x00, 0x4d, 0xe2, + 0x00, 0x00, 0x80, 0x04, 0xa7, 0x02, 0x00, 0x00, + 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, 0xa8, 0x02, + 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, + 0xa9, 0x02, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x80, 0x04, 0xaa, 0x02, 0x00, 0x00, 0x4d, 0xe6, + 0x00, 0x00, 0x80, 0x04, 0xab, 0x02, 0x00, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, + 0xac, 0x02, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, + 0x80, 0x04, 0xad, 0x02, 0x00, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x80, 0x04, 0x04, 0x01, 0x00, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, 0x46, 0x01, + 0x00, 0x00, 0x04, 0xae, 0x02, 0x00, 0x00, 0x04, + 0xaf, 0x02, 0x00, 0x00, 0x04, 0xb0, 0x02, 0x00, + 0x00, 0x04, 0xb1, 0x02, 0x00, 0x00, 0x04, 0xb2, + 0x02, 0x00, 0x00, 0x04, 0xb3, 0x02, 0x00, 0x00, + 0x04, 0xb4, 0x02, 0x00, 0x00, 0x04, 0xb5, 0x02, + 0x00, 0x00, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x04, + 0xb7, 0x02, 0x00, 0x00, 0x04, 0xb8, 0x02, 0x00, + 0x00, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x04, 0xba, + 0x02, 0x00, 0x00, 0x04, 0xbb, 0x02, 0x00, 0x00, + 0x04, 0xbc, 0x02, 0x00, 0x00, 0x04, 0xbd, 0x02, + 0x00, 0x00, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x04, + 0xbf, 0x02, 0x00, 0x00, 0x04, 0xc0, 0x02, 0x00, + 0x00, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x04, 0xc2, + 0x02, 0x00, 0x00, 0x04, 0xc3, 0x02, 0x00, 0x00, + 0x04, 0xc4, 0x02, 0x00, 0x00, 0x04, 0xc5, 0x02, + 0x00, 0x00, 0x04, 0xc6, 0x02, 0x00, 0x00, 0x04, + 0xc7, 0x02, 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x04, 0xca, + 0x02, 0x00, 0x00, 0x04, 0xcb, 0x02, 0x00, 0x00, + 0x04, 0xcc, 0x02, 0x00, 0x00, 0x04, 0xcd, 0x02, + 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, 0xce, 0x02, + 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, + 0xcf, 0x02, 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, + 0x80, 0x04, 0xd0, 0x02, 0x00, 0x00, 0x4d, 0x22, + 0x00, 0x00, 0x80, 0x04, 0xd1, 0x02, 0x00, 0x00, + 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, 0xd2, 0x02, + 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, + 0xd3, 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, + 0x80, 0x04, 0xd4, 0x02, 0x00, 0x00, 0x4d, 0x26, + 0x00, 0x00, 0x80, 0x04, 0xd5, 0x02, 0x00, 0x00, + 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x02, + 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, + 0xd7, 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, + 0x80, 0x04, 0xd8, 0x02, 0x00, 0x00, 0x4d, 0x2a, + 0x00, 0x00, 0x80, 0x04, 0xd9, 0x02, 0x00, 0x00, + 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, 0xda, 0x02, + 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, + 0xdb, 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, + 0x80, 0x04, 0xdc, 0x02, 0x00, 0x00, 0x4d, 0x2e, + 0x00, 0x00, 0x80, 0x04, 0xdd, 0x02, 0x00, 0x00, + 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, 0xde, 0x02, + 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, + 0xdf, 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, + 0x80, 0x04, 0xe0, 0x02, 0x00, 0x00, 0x4d, 0x32, + 0x00, 0x00, 0x80, 0x04, 0xe1, 0x02, 0x00, 0x00, + 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, 0xe2, 0x02, + 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, + 0xe3, 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, + 0x80, 0x04, 0xe4, 0x02, 0x00, 0x00, 0x4d, 0x36, + 0x00, 0x00, 0x80, 0x04, 0xe5, 0x02, 0x00, 0x00, + 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, 0xe6, 0x02, + 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, + 0xe7, 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, + 0x80, 0x04, 0xe8, 0x02, 0x00, 0x00, 0x4d, 0x3a, + 0x00, 0x00, 0x80, 0x04, 0xe9, 0x02, 0x00, 0x00, + 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, 0xea, 0x02, + 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, + 0xeb, 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, + 0x80, 0x04, 0xec, 0x02, 0x00, 0x00, 0x4d, 0x3e, + 0x00, 0x00, 0x80, 0x04, 0xed, 0x02, 0x00, 0x00, + 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, 0xee, 0x02, + 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, + 0xef, 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, + 0x80, 0x04, 0xf0, 0x02, 0x00, 0x00, 0x4d, 0x42, + 0x00, 0x00, 0x80, 0x04, 0xf1, 0x02, 0x00, 0x00, + 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, 0xf2, 0x02, + 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, + 0xf3, 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, + 0x80, 0x04, 0xf4, 0x02, 0x00, 0x00, 0x4d, 0x46, + 0x00, 0x00, 0x80, 0x04, 0xf5, 0x02, 0x00, 0x00, + 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, 0xf6, 0x02, + 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, + 0xf7, 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, + 0x80, 0x04, 0xf8, 0x02, 0x00, 0x00, 0x4d, 0x4a, + 0x00, 0x00, 0x80, 0x04, 0xf9, 0x02, 0x00, 0x00, + 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, 0xfa, 0x02, + 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, + 0xfb, 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, + 0x80, 0x04, 0xfc, 0x02, 0x00, 0x00, 0x4d, 0x4e, + 0x00, 0x00, 0x80, 0x04, 0xfd, 0x02, 0x00, 0x00, + 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, 0xfe, 0x02, + 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, + 0xff, 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, + 0x80, 0x04, 0x00, 0x03, 0x00, 0x00, 0x4d, 0x52, + 0x00, 0x00, 0x80, 0x04, 0x01, 0x03, 0x00, 0x00, + 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, 0x02, 0x03, + 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, + 0x03, 0x03, 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, + 0x80, 0x04, 0x04, 0x03, 0x00, 0x00, 0x4d, 0x56, + 0x00, 0x00, 0x80, 0x04, 0x05, 0x03, 0x00, 0x00, + 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, 0x06, 0x03, + 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, + 0x07, 0x03, 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, + 0x80, 0x04, 0x08, 0x03, 0x00, 0x00, 0x4d, 0x5a, + 0x00, 0x00, 0x80, 0x04, 0x09, 0x03, 0x00, 0x00, + 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x03, + 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, + 0x0b, 0x03, 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, + 0x80, 0x04, 0x0c, 0x03, 0x00, 0x00, 0x4d, 0x5e, + 0x00, 0x00, 0x80, 0x04, 0x0d, 0x03, 0x00, 0x00, + 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x03, + 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, + 0x0f, 0x03, 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, + 0x80, 0x04, 0x10, 0x03, 0x00, 0x00, 0x4d, 0x62, + 0x00, 0x00, 0x80, 0x04, 0x11, 0x03, 0x00, 0x00, + 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, 0x12, 0x03, + 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, + 0x13, 0x03, 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, + 0x80, 0x04, 0x14, 0x03, 0x00, 0x00, 0x4d, 0x66, + 0x00, 0x00, 0x80, 0x04, 0x15, 0x03, 0x00, 0x00, + 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, 0x16, 0x03, + 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, + 0x17, 0x03, 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, + 0x80, 0x04, 0x18, 0x03, 0x00, 0x00, 0x4d, 0x6a, + 0x00, 0x00, 0x80, 0x04, 0x19, 0x03, 0x00, 0x00, + 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x03, + 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, + 0x1b, 0x03, 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, + 0x80, 0x04, 0x1c, 0x03, 0x00, 0x00, 0x4d, 0x6e, + 0x00, 0x00, 0x80, 0x04, 0x1d, 0x03, 0x00, 0x00, + 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x03, + 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, + 0x1f, 0x03, 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, + 0x80, 0x04, 0x20, 0x03, 0x00, 0x00, 0x4d, 0x72, + 0x00, 0x00, 0x80, 0x04, 0x21, 0x03, 0x00, 0x00, + 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, 0x22, 0x03, + 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, + 0x23, 0x03, 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, + 0x80, 0x04, 0x24, 0x03, 0x00, 0x00, 0x4d, 0x76, + 0x00, 0x00, 0x80, 0x04, 0x25, 0x03, 0x00, 0x00, + 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, 0x26, 0x03, + 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, + 0x27, 0x03, 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, + 0x80, 0x04, 0x28, 0x03, 0x00, 0x00, 0x4d, 0x7a, + 0x00, 0x00, 0x80, 0x04, 0x29, 0x03, 0x00, 0x00, + 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x03, + 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, + 0x2b, 0x03, 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, + 0x80, 0x04, 0x2c, 0x03, 0x00, 0x00, 0x4d, 0x7e, + 0x00, 0x00, 0x80, 0x04, 0x2d, 0x03, 0x00, 0x00, + 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x03, + 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, + 0x2f, 0x03, 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, + 0x80, 0x04, 0x30, 0x03, 0x00, 0x00, 0x4d, 0x82, + 0x00, 0x00, 0x80, 0x04, 0x31, 0x03, 0x00, 0x00, + 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, 0x32, 0x03, + 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, + 0x33, 0x03, 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, + 0x80, 0x04, 0x34, 0x03, 0x00, 0x00, 0x4d, 0x86, + 0x00, 0x00, 0x80, 0x04, 0x35, 0x03, 0x00, 0x00, + 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, 0x36, 0x03, + 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, + 0x37, 0x03, 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, + 0x80, 0x04, 0x38, 0x03, 0x00, 0x00, 0x4d, 0x8a, + 0x00, 0x00, 0x80, 0x04, 0x39, 0x03, 0x00, 0x00, + 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x03, + 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, + 0x3b, 0x03, 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, + 0x80, 0x04, 0x3c, 0x03, 0x00, 0x00, 0x4d, 0x8e, + 0x00, 0x00, 0x80, 0x04, 0x3d, 0x03, 0x00, 0x00, + 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x03, + 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, + 0x3f, 0x03, 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, + 0x80, 0x04, 0x40, 0x03, 0x00, 0x00, 0x4d, 0x92, + 0x00, 0x00, 0x80, 0x04, 0x41, 0x03, 0x00, 0x00, + 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, 0x42, 0x03, + 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, + 0x43, 0x03, 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, + 0x80, 0x04, 0x44, 0x03, 0x00, 0x00, 0x4d, 0x96, + 0x00, 0x00, 0x80, 0x04, 0x45, 0x03, 0x00, 0x00, + 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, 0x46, 0x03, + 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, + 0x47, 0x03, 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, + 0x80, 0x04, 0x48, 0x03, 0x00, 0x00, 0x4d, 0x9a, + 0x00, 0x00, 0x80, 0x04, 0x49, 0x03, 0x00, 0x00, + 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x03, + 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, + 0x4b, 0x03, 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, + 0x80, 0x04, 0x4c, 0x03, 0x00, 0x00, 0x4d, 0x9e, + 0x00, 0x00, 0x80, 0x04, 0x4d, 0x03, 0x00, 0x00, + 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x03, + 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, + 0x4f, 0x03, 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, + 0x80, 0x04, 0x50, 0x03, 0x00, 0x00, 0x4d, 0xa2, + 0x00, 0x00, 0x80, 0x04, 0x51, 0x03, 0x00, 0x00, + 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, 0x52, 0x03, + 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, + 0x53, 0x03, 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, + 0x80, 0x04, 0x54, 0x03, 0x00, 0x00, 0x4d, 0xa6, + 0x00, 0x00, 0x80, 0x04, 0x55, 0x03, 0x00, 0x00, + 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, 0x56, 0x03, + 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, + 0x57, 0x03, 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, + 0x80, 0x04, 0x58, 0x03, 0x00, 0x00, 0x4d, 0xaa, + 0x00, 0x00, 0x80, 0x04, 0x59, 0x03, 0x00, 0x00, + 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x03, + 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, + 0x5b, 0x03, 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, + 0x80, 0x04, 0x5c, 0x03, 0x00, 0x00, 0x4d, 0xae, + 0x00, 0x00, 0x80, 0x04, 0x5d, 0x03, 0x00, 0x00, + 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x03, + 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, + 0x5f, 0x03, 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, + 0x80, 0x04, 0x60, 0x03, 0x00, 0x00, 0x4d, 0xb2, + 0x00, 0x00, 0x80, 0x04, 0x61, 0x03, 0x00, 0x00, + 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, 0x62, 0x03, + 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, + 0x63, 0x03, 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, + 0x80, 0x04, 0x64, 0x03, 0x00, 0x00, 0x4d, 0xb6, + 0x00, 0x00, 0x80, 0x04, 0x65, 0x03, 0x00, 0x00, + 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, 0x66, 0x03, + 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, + 0x67, 0x03, 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, + 0x80, 0x04, 0x68, 0x03, 0x00, 0x00, 0x4d, 0xba, + 0x00, 0x00, 0x80, 0x04, 0x69, 0x03, 0x00, 0x00, + 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x03, + 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, + 0x6b, 0x03, 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, + 0x80, 0x04, 0x6c, 0x03, 0x00, 0x00, 0x4d, 0xbe, + 0x00, 0x00, 0x80, 0x04, 0x6d, 0x03, 0x00, 0x00, + 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x03, + 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, + 0x6f, 0x03, 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, + 0x80, 0x04, 0x70, 0x03, 0x00, 0x00, 0x4d, 0xc2, + 0x00, 0x00, 0x80, 0x04, 0x71, 0x03, 0x00, 0x00, + 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, 0x72, 0x03, + 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, + 0x73, 0x03, 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, + 0x80, 0x04, 0x74, 0x03, 0x00, 0x00, 0x4d, 0xc6, + 0x00, 0x00, 0x80, 0x04, 0x75, 0x03, 0x00, 0x00, + 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, 0x76, 0x03, + 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, + 0x77, 0x03, 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, + 0x80, 0x04, 0x78, 0x03, 0x00, 0x00, 0x4d, 0xca, + 0x00, 0x00, 0x80, 0x04, 0x79, 0x03, 0x00, 0x00, + 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x03, + 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, + 0x7b, 0x03, 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, + 0x80, 0x04, 0x7c, 0x03, 0x00, 0x00, 0x4d, 0xce, + 0x00, 0x00, 0x80, 0x04, 0x7d, 0x03, 0x00, 0x00, + 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x03, + 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, + 0x7f, 0x03, 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, + 0x80, 0x04, 0x80, 0x03, 0x00, 0x00, 0x4d, 0xd2, + 0x00, 0x00, 0x80, 0x04, 0x81, 0x03, 0x00, 0x00, + 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, 0x82, 0x03, + 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, + 0x83, 0x03, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, + 0x80, 0x04, 0x84, 0x03, 0x00, 0x00, 0x4d, 0xd6, + 0x00, 0x00, 0x80, 0x04, 0x85, 0x03, 0x00, 0x00, + 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, 0x86, 0x03, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, + 0x87, 0x03, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, + 0x80, 0x04, 0x88, 0x03, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x80, 0x04, 0x89, 0x03, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x03, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, + 0x8b, 0x03, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x80, 0x04, 0x8c, 0x03, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x80, 0x04, 0x8d, 0x03, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x03, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, + 0x8f, 0x03, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, + 0x80, 0x04, 0x90, 0x03, 0x00, 0x00, 0x4d, 0xe2, + 0x00, 0x00, 0x80, 0x04, 0x91, 0x03, 0x00, 0x00, + 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, 0x92, 0x03, + 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, + 0x93, 0x03, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x80, 0x04, 0x94, 0x03, 0x00, 0x00, 0x4d, 0xe6, + 0x00, 0x00, 0x80, 0x04, 0x95, 0x03, 0x00, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, 0x96, 0x03, + 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, + 0x97, 0x03, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, + 0x80, 0x04, 0x98, 0x03, 0x00, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x80, 0x04, 0x99, 0x03, 0x00, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x04, 0xae, 0x02, 0x00, 0x00, 0x04, + 0xaf, 0x02, 0x00, 0x00, 0x04, 0xb0, 0x02, 0x00, + 0x00, 0x04, 0xb1, 0x02, 0x00, 0x00, 0x04, 0xb2, + 0x02, 0x00, 0x00, 0x04, 0xb3, 0x02, 0x00, 0x00, + 0x04, 0xb4, 0x02, 0x00, 0x00, 0x04, 0xb5, 0x02, + 0x00, 0x00, 0x04, 0xb6, 0x02, 0x00, 0x00, 0x04, + 0xb7, 0x02, 0x00, 0x00, 0x04, 0xb8, 0x02, 0x00, + 0x00, 0x04, 0xb9, 0x02, 0x00, 0x00, 0x04, 0xba, + 0x02, 0x00, 0x00, 0x04, 0xbb, 0x02, 0x00, 0x00, + 0x04, 0xbc, 0x02, 0x00, 0x00, 0x04, 0xbd, 0x02, + 0x00, 0x00, 0x04, 0xbe, 0x02, 0x00, 0x00, 0x04, + 0xbf, 0x02, 0x00, 0x00, 0x04, 0xc0, 0x02, 0x00, + 0x00, 0x04, 0xc1, 0x02, 0x00, 0x00, 0x04, 0xc2, + 0x02, 0x00, 0x00, 0x04, 0xc3, 0x02, 0x00, 0x00, + 0x04, 0xc4, 0x02, 0x00, 0x00, 0x04, 0xc5, 0x02, + 0x00, 0x00, 0x04, 0xc6, 0x02, 0x00, 0x00, 0x04, + 0xc7, 0x02, 0x00, 0x00, 0x04, 0xc8, 0x02, 0x00, + 0x00, 0x04, 0xc9, 0x02, 0x00, 0x00, 0x04, 0xca, + 0x02, 0x00, 0x00, 0x04, 0xcb, 0x02, 0x00, 0x00, + 0x04, 0xcc, 0x02, 0x00, 0x00, 0x04, 0xcd, 0x02, + 0x00, 0x00, 0x26, 0x20, 0x00, 0x04, 0xce, 0x02, + 0x00, 0x00, 0x4d, 0x20, 0x00, 0x00, 0x80, 0x04, + 0xcf, 0x02, 0x00, 0x00, 0x4d, 0x21, 0x00, 0x00, + 0x80, 0x04, 0xd0, 0x02, 0x00, 0x00, 0x4d, 0x22, + 0x00, 0x00, 0x80, 0x04, 0xd1, 0x02, 0x00, 0x00, + 0x4d, 0x23, 0x00, 0x00, 0x80, 0x04, 0xd2, 0x02, + 0x00, 0x00, 0x4d, 0x24, 0x00, 0x00, 0x80, 0x04, + 0xd3, 0x02, 0x00, 0x00, 0x4d, 0x25, 0x00, 0x00, + 0x80, 0x04, 0xd4, 0x02, 0x00, 0x00, 0x4d, 0x26, + 0x00, 0x00, 0x80, 0x04, 0xd5, 0x02, 0x00, 0x00, + 0x4d, 0x27, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x02, + 0x00, 0x00, 0x4d, 0x28, 0x00, 0x00, 0x80, 0x04, + 0xd7, 0x02, 0x00, 0x00, 0x4d, 0x29, 0x00, 0x00, + 0x80, 0x04, 0xd8, 0x02, 0x00, 0x00, 0x4d, 0x2a, + 0x00, 0x00, 0x80, 0x04, 0xd9, 0x02, 0x00, 0x00, + 0x4d, 0x2b, 0x00, 0x00, 0x80, 0x04, 0xda, 0x02, + 0x00, 0x00, 0x4d, 0x2c, 0x00, 0x00, 0x80, 0x04, + 0xdb, 0x02, 0x00, 0x00, 0x4d, 0x2d, 0x00, 0x00, + 0x80, 0x04, 0xdc, 0x02, 0x00, 0x00, 0x4d, 0x2e, + 0x00, 0x00, 0x80, 0x04, 0xdd, 0x02, 0x00, 0x00, + 0x4d, 0x2f, 0x00, 0x00, 0x80, 0x04, 0xde, 0x02, + 0x00, 0x00, 0x4d, 0x30, 0x00, 0x00, 0x80, 0x04, + 0xdf, 0x02, 0x00, 0x00, 0x4d, 0x31, 0x00, 0x00, + 0x80, 0x04, 0xe0, 0x02, 0x00, 0x00, 0x4d, 0x32, + 0x00, 0x00, 0x80, 0x04, 0xe1, 0x02, 0x00, 0x00, + 0x4d, 0x33, 0x00, 0x00, 0x80, 0x04, 0xe2, 0x02, + 0x00, 0x00, 0x4d, 0x34, 0x00, 0x00, 0x80, 0x04, + 0xe3, 0x02, 0x00, 0x00, 0x4d, 0x35, 0x00, 0x00, + 0x80, 0x04, 0xe4, 0x02, 0x00, 0x00, 0x4d, 0x36, + 0x00, 0x00, 0x80, 0x04, 0xe5, 0x02, 0x00, 0x00, + 0x4d, 0x37, 0x00, 0x00, 0x80, 0x04, 0xe6, 0x02, + 0x00, 0x00, 0x4d, 0x38, 0x00, 0x00, 0x80, 0x04, + 0xe7, 0x02, 0x00, 0x00, 0x4d, 0x39, 0x00, 0x00, + 0x80, 0x04, 0xe8, 0x02, 0x00, 0x00, 0x4d, 0x3a, + 0x00, 0x00, 0x80, 0x04, 0xe9, 0x02, 0x00, 0x00, + 0x4d, 0x3b, 0x00, 0x00, 0x80, 0x04, 0xea, 0x02, + 0x00, 0x00, 0x4d, 0x3c, 0x00, 0x00, 0x80, 0x04, + 0xeb, 0x02, 0x00, 0x00, 0x4d, 0x3d, 0x00, 0x00, + 0x80, 0x04, 0xec, 0x02, 0x00, 0x00, 0x4d, 0x3e, + 0x00, 0x00, 0x80, 0x04, 0xed, 0x02, 0x00, 0x00, + 0x4d, 0x3f, 0x00, 0x00, 0x80, 0x04, 0xee, 0x02, + 0x00, 0x00, 0x4d, 0x40, 0x00, 0x00, 0x80, 0x04, + 0xef, 0x02, 0x00, 0x00, 0x4d, 0x41, 0x00, 0x00, + 0x80, 0x04, 0xf0, 0x02, 0x00, 0x00, 0x4d, 0x42, + 0x00, 0x00, 0x80, 0x04, 0xf1, 0x02, 0x00, 0x00, + 0x4d, 0x43, 0x00, 0x00, 0x80, 0x04, 0xf2, 0x02, + 0x00, 0x00, 0x4d, 0x44, 0x00, 0x00, 0x80, 0x04, + 0xf3, 0x02, 0x00, 0x00, 0x4d, 0x45, 0x00, 0x00, + 0x80, 0x04, 0xf4, 0x02, 0x00, 0x00, 0x4d, 0x46, + 0x00, 0x00, 0x80, 0x04, 0xf5, 0x02, 0x00, 0x00, + 0x4d, 0x47, 0x00, 0x00, 0x80, 0x04, 0xf6, 0x02, + 0x00, 0x00, 0x4d, 0x48, 0x00, 0x00, 0x80, 0x04, + 0xf7, 0x02, 0x00, 0x00, 0x4d, 0x49, 0x00, 0x00, + 0x80, 0x04, 0xf8, 0x02, 0x00, 0x00, 0x4d, 0x4a, + 0x00, 0x00, 0x80, 0x04, 0xf9, 0x02, 0x00, 0x00, + 0x4d, 0x4b, 0x00, 0x00, 0x80, 0x04, 0xfa, 0x02, + 0x00, 0x00, 0x4d, 0x4c, 0x00, 0x00, 0x80, 0x04, + 0xfb, 0x02, 0x00, 0x00, 0x4d, 0x4d, 0x00, 0x00, + 0x80, 0x04, 0xfc, 0x02, 0x00, 0x00, 0x4d, 0x4e, + 0x00, 0x00, 0x80, 0x04, 0xfd, 0x02, 0x00, 0x00, + 0x4d, 0x4f, 0x00, 0x00, 0x80, 0x04, 0xfe, 0x02, + 0x00, 0x00, 0x4d, 0x50, 0x00, 0x00, 0x80, 0x04, + 0xff, 0x02, 0x00, 0x00, 0x4d, 0x51, 0x00, 0x00, + 0x80, 0x04, 0x00, 0x03, 0x00, 0x00, 0x4d, 0x52, + 0x00, 0x00, 0x80, 0x04, 0x01, 0x03, 0x00, 0x00, + 0x4d, 0x53, 0x00, 0x00, 0x80, 0x04, 0x02, 0x03, + 0x00, 0x00, 0x4d, 0x54, 0x00, 0x00, 0x80, 0x04, + 0x03, 0x03, 0x00, 0x00, 0x4d, 0x55, 0x00, 0x00, + 0x80, 0x04, 0x04, 0x03, 0x00, 0x00, 0x4d, 0x56, + 0x00, 0x00, 0x80, 0x04, 0x05, 0x03, 0x00, 0x00, + 0x4d, 0x57, 0x00, 0x00, 0x80, 0x04, 0x06, 0x03, + 0x00, 0x00, 0x4d, 0x58, 0x00, 0x00, 0x80, 0x04, + 0x07, 0x03, 0x00, 0x00, 0x4d, 0x59, 0x00, 0x00, + 0x80, 0x04, 0x08, 0x03, 0x00, 0x00, 0x4d, 0x5a, + 0x00, 0x00, 0x80, 0x04, 0x09, 0x03, 0x00, 0x00, + 0x4d, 0x5b, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x03, + 0x00, 0x00, 0x4d, 0x5c, 0x00, 0x00, 0x80, 0x04, + 0x0b, 0x03, 0x00, 0x00, 0x4d, 0x5d, 0x00, 0x00, + 0x80, 0x04, 0x0c, 0x03, 0x00, 0x00, 0x4d, 0x5e, + 0x00, 0x00, 0x80, 0x04, 0x0d, 0x03, 0x00, 0x00, + 0x4d, 0x5f, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x03, + 0x00, 0x00, 0x4d, 0x60, 0x00, 0x00, 0x80, 0x04, + 0x0f, 0x03, 0x00, 0x00, 0x4d, 0x61, 0x00, 0x00, + 0x80, 0x04, 0x10, 0x03, 0x00, 0x00, 0x4d, 0x62, + 0x00, 0x00, 0x80, 0x04, 0x11, 0x03, 0x00, 0x00, + 0x4d, 0x63, 0x00, 0x00, 0x80, 0x04, 0x12, 0x03, + 0x00, 0x00, 0x4d, 0x64, 0x00, 0x00, 0x80, 0x04, + 0x13, 0x03, 0x00, 0x00, 0x4d, 0x65, 0x00, 0x00, + 0x80, 0x04, 0x14, 0x03, 0x00, 0x00, 0x4d, 0x66, + 0x00, 0x00, 0x80, 0x04, 0x15, 0x03, 0x00, 0x00, + 0x4d, 0x67, 0x00, 0x00, 0x80, 0x04, 0x16, 0x03, + 0x00, 0x00, 0x4d, 0x68, 0x00, 0x00, 0x80, 0x04, + 0x17, 0x03, 0x00, 0x00, 0x4d, 0x69, 0x00, 0x00, + 0x80, 0x04, 0x18, 0x03, 0x00, 0x00, 0x4d, 0x6a, + 0x00, 0x00, 0x80, 0x04, 0x19, 0x03, 0x00, 0x00, + 0x4d, 0x6b, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x03, + 0x00, 0x00, 0x4d, 0x6c, 0x00, 0x00, 0x80, 0x04, + 0x1b, 0x03, 0x00, 0x00, 0x4d, 0x6d, 0x00, 0x00, + 0x80, 0x04, 0x1c, 0x03, 0x00, 0x00, 0x4d, 0x6e, + 0x00, 0x00, 0x80, 0x04, 0x1d, 0x03, 0x00, 0x00, + 0x4d, 0x6f, 0x00, 0x00, 0x80, 0x04, 0x1e, 0x03, + 0x00, 0x00, 0x4d, 0x70, 0x00, 0x00, 0x80, 0x04, + 0x1f, 0x03, 0x00, 0x00, 0x4d, 0x71, 0x00, 0x00, + 0x80, 0x04, 0x20, 0x03, 0x00, 0x00, 0x4d, 0x72, + 0x00, 0x00, 0x80, 0x04, 0x21, 0x03, 0x00, 0x00, + 0x4d, 0x73, 0x00, 0x00, 0x80, 0x04, 0x22, 0x03, + 0x00, 0x00, 0x4d, 0x74, 0x00, 0x00, 0x80, 0x04, + 0x23, 0x03, 0x00, 0x00, 0x4d, 0x75, 0x00, 0x00, + 0x80, 0x04, 0x24, 0x03, 0x00, 0x00, 0x4d, 0x76, + 0x00, 0x00, 0x80, 0x04, 0x25, 0x03, 0x00, 0x00, + 0x4d, 0x77, 0x00, 0x00, 0x80, 0x04, 0x26, 0x03, + 0x00, 0x00, 0x4d, 0x78, 0x00, 0x00, 0x80, 0x04, + 0x27, 0x03, 0x00, 0x00, 0x4d, 0x79, 0x00, 0x00, + 0x80, 0x04, 0x28, 0x03, 0x00, 0x00, 0x4d, 0x7a, + 0x00, 0x00, 0x80, 0x04, 0x29, 0x03, 0x00, 0x00, + 0x4d, 0x7b, 0x00, 0x00, 0x80, 0x04, 0x2a, 0x03, + 0x00, 0x00, 0x4d, 0x7c, 0x00, 0x00, 0x80, 0x04, + 0x2b, 0x03, 0x00, 0x00, 0x4d, 0x7d, 0x00, 0x00, + 0x80, 0x04, 0x2c, 0x03, 0x00, 0x00, 0x4d, 0x7e, + 0x00, 0x00, 0x80, 0x04, 0x2d, 0x03, 0x00, 0x00, + 0x4d, 0x7f, 0x00, 0x00, 0x80, 0x04, 0x2e, 0x03, + 0x00, 0x00, 0x4d, 0x80, 0x00, 0x00, 0x80, 0x04, + 0x2f, 0x03, 0x00, 0x00, 0x4d, 0x81, 0x00, 0x00, + 0x80, 0x04, 0x30, 0x03, 0x00, 0x00, 0x4d, 0x82, + 0x00, 0x00, 0x80, 0x04, 0x31, 0x03, 0x00, 0x00, + 0x4d, 0x83, 0x00, 0x00, 0x80, 0x04, 0x32, 0x03, + 0x00, 0x00, 0x4d, 0x84, 0x00, 0x00, 0x80, 0x04, + 0x33, 0x03, 0x00, 0x00, 0x4d, 0x85, 0x00, 0x00, + 0x80, 0x04, 0x34, 0x03, 0x00, 0x00, 0x4d, 0x86, + 0x00, 0x00, 0x80, 0x04, 0x35, 0x03, 0x00, 0x00, + 0x4d, 0x87, 0x00, 0x00, 0x80, 0x04, 0x36, 0x03, + 0x00, 0x00, 0x4d, 0x88, 0x00, 0x00, 0x80, 0x04, + 0x37, 0x03, 0x00, 0x00, 0x4d, 0x89, 0x00, 0x00, + 0x80, 0x04, 0x38, 0x03, 0x00, 0x00, 0x4d, 0x8a, + 0x00, 0x00, 0x80, 0x04, 0x39, 0x03, 0x00, 0x00, + 0x4d, 0x8b, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x03, + 0x00, 0x00, 0x4d, 0x8c, 0x00, 0x00, 0x80, 0x04, + 0x3b, 0x03, 0x00, 0x00, 0x4d, 0x8d, 0x00, 0x00, + 0x80, 0x04, 0x3c, 0x03, 0x00, 0x00, 0x4d, 0x8e, + 0x00, 0x00, 0x80, 0x04, 0x3d, 0x03, 0x00, 0x00, + 0x4d, 0x8f, 0x00, 0x00, 0x80, 0x04, 0x3e, 0x03, + 0x00, 0x00, 0x4d, 0x90, 0x00, 0x00, 0x80, 0x04, + 0x3f, 0x03, 0x00, 0x00, 0x4d, 0x91, 0x00, 0x00, + 0x80, 0x04, 0x40, 0x03, 0x00, 0x00, 0x4d, 0x92, + 0x00, 0x00, 0x80, 0x04, 0x41, 0x03, 0x00, 0x00, + 0x4d, 0x93, 0x00, 0x00, 0x80, 0x04, 0x42, 0x03, + 0x00, 0x00, 0x4d, 0x94, 0x00, 0x00, 0x80, 0x04, + 0x43, 0x03, 0x00, 0x00, 0x4d, 0x95, 0x00, 0x00, + 0x80, 0x04, 0x44, 0x03, 0x00, 0x00, 0x4d, 0x96, + 0x00, 0x00, 0x80, 0x04, 0x45, 0x03, 0x00, 0x00, + 0x4d, 0x97, 0x00, 0x00, 0x80, 0x04, 0x46, 0x03, + 0x00, 0x00, 0x4d, 0x98, 0x00, 0x00, 0x80, 0x04, + 0x47, 0x03, 0x00, 0x00, 0x4d, 0x99, 0x00, 0x00, + 0x80, 0x04, 0x48, 0x03, 0x00, 0x00, 0x4d, 0x9a, + 0x00, 0x00, 0x80, 0x04, 0x49, 0x03, 0x00, 0x00, + 0x4d, 0x9b, 0x00, 0x00, 0x80, 0x04, 0x4a, 0x03, + 0x00, 0x00, 0x4d, 0x9c, 0x00, 0x00, 0x80, 0x04, + 0x4b, 0x03, 0x00, 0x00, 0x4d, 0x9d, 0x00, 0x00, + 0x80, 0x04, 0x4c, 0x03, 0x00, 0x00, 0x4d, 0x9e, + 0x00, 0x00, 0x80, 0x04, 0x4d, 0x03, 0x00, 0x00, + 0x4d, 0x9f, 0x00, 0x00, 0x80, 0x04, 0x4e, 0x03, + 0x00, 0x00, 0x4d, 0xa0, 0x00, 0x00, 0x80, 0x04, + 0x4f, 0x03, 0x00, 0x00, 0x4d, 0xa1, 0x00, 0x00, + 0x80, 0x04, 0x50, 0x03, 0x00, 0x00, 0x4d, 0xa2, + 0x00, 0x00, 0x80, 0x04, 0x51, 0x03, 0x00, 0x00, + 0x4d, 0xa3, 0x00, 0x00, 0x80, 0x04, 0x52, 0x03, + 0x00, 0x00, 0x4d, 0xa4, 0x00, 0x00, 0x80, 0x04, + 0x53, 0x03, 0x00, 0x00, 0x4d, 0xa5, 0x00, 0x00, + 0x80, 0x04, 0x54, 0x03, 0x00, 0x00, 0x4d, 0xa6, + 0x00, 0x00, 0x80, 0x04, 0x55, 0x03, 0x00, 0x00, + 0x4d, 0xa7, 0x00, 0x00, 0x80, 0x04, 0x56, 0x03, + 0x00, 0x00, 0x4d, 0xa8, 0x00, 0x00, 0x80, 0x04, + 0x57, 0x03, 0x00, 0x00, 0x4d, 0xa9, 0x00, 0x00, + 0x80, 0x04, 0x58, 0x03, 0x00, 0x00, 0x4d, 0xaa, + 0x00, 0x00, 0x80, 0x04, 0x59, 0x03, 0x00, 0x00, + 0x4d, 0xab, 0x00, 0x00, 0x80, 0x04, 0x5a, 0x03, + 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00, 0x80, 0x04, + 0x5b, 0x03, 0x00, 0x00, 0x4d, 0xad, 0x00, 0x00, + 0x80, 0x04, 0x5c, 0x03, 0x00, 0x00, 0x4d, 0xae, + 0x00, 0x00, 0x80, 0x04, 0x5d, 0x03, 0x00, 0x00, + 0x4d, 0xaf, 0x00, 0x00, 0x80, 0x04, 0x5e, 0x03, + 0x00, 0x00, 0x4d, 0xb0, 0x00, 0x00, 0x80, 0x04, + 0x5f, 0x03, 0x00, 0x00, 0x4d, 0xb1, 0x00, 0x00, + 0x80, 0x04, 0x60, 0x03, 0x00, 0x00, 0x4d, 0xb2, + 0x00, 0x00, 0x80, 0x04, 0x61, 0x03, 0x00, 0x00, + 0x4d, 0xb3, 0x00, 0x00, 0x80, 0x04, 0x62, 0x03, + 0x00, 0x00, 0x4d, 0xb4, 0x00, 0x00, 0x80, 0x04, + 0x63, 0x03, 0x00, 0x00, 0x4d, 0xb5, 0x00, 0x00, + 0x80, 0x04, 0x64, 0x03, 0x00, 0x00, 0x4d, 0xb6, + 0x00, 0x00, 0x80, 0x04, 0x65, 0x03, 0x00, 0x00, + 0x4d, 0xb7, 0x00, 0x00, 0x80, 0x04, 0x66, 0x03, + 0x00, 0x00, 0x4d, 0xb8, 0x00, 0x00, 0x80, 0x04, + 0x67, 0x03, 0x00, 0x00, 0x4d, 0xb9, 0x00, 0x00, + 0x80, 0x04, 0x68, 0x03, 0x00, 0x00, 0x4d, 0xba, + 0x00, 0x00, 0x80, 0x04, 0x69, 0x03, 0x00, 0x00, + 0x4d, 0xbb, 0x00, 0x00, 0x80, 0x04, 0x6a, 0x03, + 0x00, 0x00, 0x4d, 0xbc, 0x00, 0x00, 0x80, 0x04, + 0x6b, 0x03, 0x00, 0x00, 0x4d, 0xbd, 0x00, 0x00, + 0x80, 0x04, 0x6c, 0x03, 0x00, 0x00, 0x4d, 0xbe, + 0x00, 0x00, 0x80, 0x04, 0x6d, 0x03, 0x00, 0x00, + 0x4d, 0xbf, 0x00, 0x00, 0x80, 0x04, 0x6e, 0x03, + 0x00, 0x00, 0x4d, 0xc0, 0x00, 0x00, 0x80, 0x04, + 0x6f, 0x03, 0x00, 0x00, 0x4d, 0xc1, 0x00, 0x00, + 0x80, 0x04, 0x70, 0x03, 0x00, 0x00, 0x4d, 0xc2, + 0x00, 0x00, 0x80, 0x04, 0x71, 0x03, 0x00, 0x00, + 0x4d, 0xc3, 0x00, 0x00, 0x80, 0x04, 0x72, 0x03, + 0x00, 0x00, 0x4d, 0xc4, 0x00, 0x00, 0x80, 0x04, + 0x73, 0x03, 0x00, 0x00, 0x4d, 0xc5, 0x00, 0x00, + 0x80, 0x04, 0x74, 0x03, 0x00, 0x00, 0x4d, 0xc6, + 0x00, 0x00, 0x80, 0x04, 0x75, 0x03, 0x00, 0x00, + 0x4d, 0xc7, 0x00, 0x00, 0x80, 0x04, 0x76, 0x03, + 0x00, 0x00, 0x4d, 0xc8, 0x00, 0x00, 0x80, 0x04, + 0x77, 0x03, 0x00, 0x00, 0x4d, 0xc9, 0x00, 0x00, + 0x80, 0x04, 0x78, 0x03, 0x00, 0x00, 0x4d, 0xca, + 0x00, 0x00, 0x80, 0x04, 0x79, 0x03, 0x00, 0x00, + 0x4d, 0xcb, 0x00, 0x00, 0x80, 0x04, 0x7a, 0x03, + 0x00, 0x00, 0x4d, 0xcc, 0x00, 0x00, 0x80, 0x04, + 0x7b, 0x03, 0x00, 0x00, 0x4d, 0xcd, 0x00, 0x00, + 0x80, 0x04, 0x7c, 0x03, 0x00, 0x00, 0x4d, 0xce, + 0x00, 0x00, 0x80, 0x04, 0x7d, 0x03, 0x00, 0x00, + 0x4d, 0xcf, 0x00, 0x00, 0x80, 0x04, 0x7e, 0x03, + 0x00, 0x00, 0x4d, 0xd0, 0x00, 0x00, 0x80, 0x04, + 0x7f, 0x03, 0x00, 0x00, 0x4d, 0xd1, 0x00, 0x00, + 0x80, 0x04, 0x80, 0x03, 0x00, 0x00, 0x4d, 0xd2, + 0x00, 0x00, 0x80, 0x04, 0x81, 0x03, 0x00, 0x00, + 0x4d, 0xd3, 0x00, 0x00, 0x80, 0x04, 0x82, 0x03, + 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x80, 0x04, + 0x83, 0x03, 0x00, 0x00, 0x4d, 0xd5, 0x00, 0x00, + 0x80, 0x04, 0x84, 0x03, 0x00, 0x00, 0x4d, 0xd6, + 0x00, 0x00, 0x80, 0x04, 0x85, 0x03, 0x00, 0x00, + 0x4d, 0xd7, 0x00, 0x00, 0x80, 0x04, 0x86, 0x03, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x80, 0x04, + 0x87, 0x03, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, + 0x80, 0x04, 0x88, 0x03, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x80, 0x04, 0x89, 0x03, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x80, 0x04, 0x8a, 0x03, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x80, 0x04, + 0x8b, 0x03, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x80, 0x04, 0x8c, 0x03, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x80, 0x04, 0x8d, 0x03, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x80, 0x04, 0x8e, 0x03, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x80, 0x04, + 0x8f, 0x03, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, + 0x80, 0x04, 0x90, 0x03, 0x00, 0x00, 0x4d, 0xe2, + 0x00, 0x00, 0x80, 0x04, 0x91, 0x03, 0x00, 0x00, + 0x4d, 0xe3, 0x00, 0x00, 0x80, 0x04, 0x92, 0x03, + 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x80, 0x04, + 0x93, 0x03, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x80, 0x04, 0x94, 0x03, 0x00, 0x00, 0x4d, 0xe6, + 0x00, 0x00, 0x80, 0x04, 0x95, 0x03, 0x00, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x80, 0x04, 0x96, 0x03, + 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x80, 0x04, + 0x97, 0x03, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, + 0x80, 0x04, 0x98, 0x03, 0x00, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x80, 0x04, 0x99, 0x03, 0x00, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x80, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x6c, 0x01, 0x00, 0x00, 0x4d, 0x6d, 0x01, + 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, 0x00, 0x4d, + 0x6f, 0x01, 0x00, 0x00, 0x4d, 0x70, 0x01, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0xbe, 0x89, 0xbe, 0x8a, 0xbe, 0x8b, 0xbe, 0x8c, + 0xbe, 0x8d, 0xbe, 0x8e, 0xbe, 0x8f, 0xbe, 0x90, + 0xbe, 0x91, 0xbe, 0x92, 0xbe, 0x93, 0xbe, 0x94, + 0x26, 0x0c, 0x00, 0x4d, 0x46, 0x01, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, + 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, + 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, + 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, + 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, + 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x53, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x54, + 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0x46, 0x01, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, 0x00, 0x00, + 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, + 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, 0x04, 0x64, + 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, 0x00, 0x26, + 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x9a, 0x03, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x46, 0x01, + 0x00, 0x00, 0x04, 0x9a, 0x03, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, + 0x9a, 0x03, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x6c, 0x01, 0x00, 0x00, 0x4d, + 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, 0x00, + 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x4d, 0x70, + 0x01, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0xbe, 0x95, 0xbe, 0x96, 0xbe, 0x97, + 0xbe, 0x98, 0xbe, 0x99, 0xbe, 0x9a, 0xbe, 0x9b, + 0xbe, 0x9c, 0xbe, 0x9d, 0xbe, 0x9e, 0xbe, 0x9f, + 0xbe, 0xa0, 0x26, 0x0c, 0x00, 0x4d, 0x46, 0x01, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x04, 0x4e, 0x01, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x26, 0x0c, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x26, 0x0c, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x53, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x54, 0x01, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, 0x04, 0x5a, + 0x01, 0x00, 0x00, 0x26, 0x07, 0x00, 0x4d, 0x46, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, 0x04, + 0x5f, 0x01, 0x00, 0x00, 0x04, 0x60, 0x01, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x26, 0x07, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x04, 0x62, + 0x01, 0x00, 0x00, 0x04, 0x63, 0x01, 0x00, 0x00, + 0x04, 0x64, 0x01, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x04, 0x66, 0x01, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x04, 0x68, 0x01, 0x00, + 0x00, 0x26, 0x07, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x69, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x9b, 0x03, 0x00, 0x00, 0x04, 0x9c, 0x03, 0x00, + 0x00, 0x26, 0x02, 0x00, 0x4d, 0x46, 0x01, 0x00, + 0x00, 0x04, 0x9b, 0x03, 0x00, 0x00, 0x04, 0x9c, + 0x03, 0x00, 0x00, 0x26, 0x02, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x04, 0x9b, 0x03, 0x00, 0x00, + 0x04, 0x9c, 0x03, 0x00, 0x00, 0x26, 0x02, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x6b, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x4d, 0x6d, 0x01, 0x00, 0x00, 0x04, 0x6e, 0x01, + 0x00, 0x00, 0x4d, 0x6f, 0x01, 0x00, 0x00, 0x4d, + 0x70, 0x01, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x00, 0x4d, 0x9d, 0x03, 0x00, 0x00, 0x4d, 0x9e, + 0x03, 0x00, 0x00, 0x0b, 0x04, 0x9f, 0x03, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0xa0, 0x03, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0xa1, 0x03, 0x00, 0x00, + 0x4d, 0xa2, 0x03, 0x00, 0x00, 0x04, 0xa3, 0x03, + 0x00, 0x00, 0x4d, 0xa4, 0x03, 0x00, 0x00, 0x4d, + 0xa5, 0x03, 0x00, 0x00, 0x0b, 0x04, 0xa6, 0x03, + 0x00, 0x00, 0x4d, 0xa2, 0x03, 0x00, 0x00, 0x04, + 0xa7, 0x03, 0x00, 0x00, 0x4d, 0xa4, 0x03, 0x00, + 0x00, 0x4d, 0xa8, 0x03, 0x00, 0x00, 0x0b, 0x04, + 0xa9, 0x03, 0x00, 0x00, 0x4d, 0xa2, 0x03, 0x00, + 0x00, 0x04, 0xaa, 0x03, 0x00, 0x00, 0x4d, 0xa4, + 0x03, 0x00, 0x00, 0x4d, 0xab, 0x03, 0x00, 0x00, + 0x4d, 0xac, 0x03, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0xad, 0x03, 0x00, 0x00, 0x4d, 0xa5, 0x03, 0x00, + 0x00, 0x04, 0xae, 0x03, 0x00, 0x00, 0x4d, 0xaf, + 0x03, 0x00, 0x00, 0x04, 0xb0, 0x03, 0x00, 0x00, + 0x4d, 0xb1, 0x03, 0x00, 0x00, 0x04, 0xb2, 0x03, + 0x00, 0x00, 0x4d, 0xb3, 0x03, 0x00, 0x00, 0x04, + 0xb4, 0x03, 0x00, 0x00, 0x4d, 0xb5, 0x03, 0x00, + 0x00, 0x04, 0xb6, 0x03, 0x00, 0x00, 0x4d, 0xb7, + 0x03, 0x00, 0x00, 0x04, 0xb8, 0x03, 0x00, 0x00, + 0x4d, 0xb9, 0x03, 0x00, 0x00, 0x4d, 0xba, 0x03, + 0x00, 0x00, 0x0b, 0x04, 0xad, 0x03, 0x00, 0x00, + 0x4d, 0xa5, 0x03, 0x00, 0x00, 0x04, 0xae, 0x03, + 0x00, 0x00, 0x4d, 0xaf, 0x03, 0x00, 0x00, 0x04, + 0xb0, 0x03, 0x00, 0x00, 0x4d, 0xb1, 0x03, 0x00, + 0x00, 0x04, 0xb2, 0x03, 0x00, 0x00, 0x4d, 0xb3, + 0x03, 0x00, 0x00, 0x04, 0xb4, 0x03, 0x00, 0x00, + 0x4d, 0xb5, 0x03, 0x00, 0x00, 0x04, 0xb6, 0x03, + 0x00, 0x00, 0x4d, 0xb7, 0x03, 0x00, 0x00, 0x04, + 0xb8, 0x03, 0x00, 0x00, 0x4d, 0xb9, 0x03, 0x00, + 0x00, 0x4d, 0x9f, 0x03, 0x00, 0x00, 0x4d, 0xbb, + 0x03, 0x00, 0x00, 0x0b, 0x04, 0xbc, 0x03, 0x00, + 0x00, 0x4d, 0xbd, 0x03, 0x00, 0x00, 0x04, 0xbe, + 0x03, 0x00, 0x00, 0x4d, 0xbf, 0x03, 0x00, 0x00, + 0x04, 0xc0, 0x03, 0x00, 0x00, 0x4d, 0xc1, 0x03, + 0x00, 0x00, 0x04, 0xc2, 0x03, 0x00, 0x00, 0x4d, + 0xc3, 0x03, 0x00, 0x00, 0x04, 0xc4, 0x03, 0x00, + 0x00, 0x4d, 0xc5, 0x03, 0x00, 0x00, 0x04, 0xc6, + 0x03, 0x00, 0x00, 0x4d, 0xc7, 0x03, 0x00, 0x00, + 0x04, 0xc8, 0x03, 0x00, 0x00, 0x4d, 0xc9, 0x03, + 0x00, 0x00, 0x04, 0xca, 0x03, 0x00, 0x00, 0x4d, + 0xcb, 0x03, 0x00, 0x00, 0x04, 0xcc, 0x03, 0x00, + 0x00, 0x4d, 0xcd, 0x03, 0x00, 0x00, 0x04, 0xce, + 0x03, 0x00, 0x00, 0x4d, 0xcf, 0x03, 0x00, 0x00, + 0x04, 0xd0, 0x03, 0x00, 0x00, 0x4d, 0xd1, 0x03, + 0x00, 0x00, 0x04, 0xd2, 0x03, 0x00, 0x00, 0x4d, + 0xd3, 0x03, 0x00, 0x00, 0x04, 0xd4, 0x03, 0x00, + 0x00, 0x4d, 0xd5, 0x03, 0x00, 0x00, 0x04, 0xd6, + 0x03, 0x00, 0x00, 0x4d, 0xd7, 0x03, 0x00, 0x00, + 0x04, 0xd8, 0x03, 0x00, 0x00, 0x4d, 0xd9, 0x03, + 0x00, 0x00, 0x04, 0xda, 0x03, 0x00, 0x00, 0x4d, + 0xdb, 0x03, 0x00, 0x00, 0x04, 0xdc, 0x03, 0x00, + 0x00, 0x4d, 0xdd, 0x03, 0x00, 0x00, 0x04, 0xde, + 0x03, 0x00, 0x00, 0x4d, 0xdf, 0x03, 0x00, 0x00, + 0x04, 0xe0, 0x03, 0x00, 0x00, 0x4d, 0xe1, 0x03, + 0x00, 0x00, 0x04, 0xe2, 0x03, 0x00, 0x00, 0x4d, + 0xe3, 0x03, 0x00, 0x00, 0x4d, 0xe4, 0x03, 0x00, + 0x00, 0x4d, 0x45, 0x00, 0x00, 0x00, 0x24, 0x01, + 0x00, 0xcc, 0x28, 0xca, 0x0f, 0x01, 0x00, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, + 0x33, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x04, 0x31, 0x33, 0x07, 0x02, 0x31, 0x07, + 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, + 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, + 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, + 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, + 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, 0x31, + 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, + 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, + 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, + 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, + 0x07, 0x04, 0x31, 0x32, 0x07, 0x04, 0x31, 0x33, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x31, 0x07, 0x02, + 0x32, 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, + 0x02, 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, + 0x07, 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, + 0x31, 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, + 0x31, 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, + 0x07, 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, + 0x35, 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, + 0x02, 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, + 0x30, 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, + 0x32, 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, + 0x02, 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, + 0x07, 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, + 0x38, 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, + 0x07, 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, + 0x07, 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, + 0x33, 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, + 0x02, 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, + 0x07, 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, + 0x04, 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, + 0x02, 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, + 0x07, 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, + 0x36, 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, + 0x02, 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, + 0x31, 0x31, 0x07, 0x04, 0x31, 0x32, 0x07, 0x02, + 0x31, 0x07, 0x02, 0x32, 0x07, 0x02, 0x33, 0x07, + 0x02, 0x34, 0x07, 0x02, 0x35, 0x07, 0x02, 0x36, + 0x07, 0x02, 0x37, 0x07, 0x02, 0x38, 0x07, 0x02, + 0x39, 0x07, 0x04, 0x31, 0x30, 0x07, 0x04, 0x31, + 0x31, 0x07, 0x04, 0x31, 0x32, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_am_size = 3910; + +const uint8_t intl_relative_am[3910] = { + 0x01, 0x5e, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x04, 0x61, 0x6d, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x0f, 0x60, 0x12, 0xda, + 0x12, 0x05, 0x12, 0x20, 0x00, 0xd3, 0x12, 0x18, + 0x12, 0x75, 0x12, 0x15, 0xe8, 0x12, 0x1a, 0x12, + 0x40, 0x12, 0x25, 0x13, 0x08, 0x12, 0xcd, 0x12, + 0x20, 0x00, 0xd3, 0x12, 0x18, 0x12, 0x75, 0x12, + 0x11, 0xeb, 0x12, 0x08, 0x12, 0x48, 0x13, 0xcd, + 0x12, 0x20, 0x00, 0xd3, 0x12, 0x18, 0x12, 0x75, + 0x12, 0x04, 0x2d, 0x31, 0x1b, 0x60, 0x12, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xd3, + 0x12, 0x18, 0x12, 0x73, 0x12, 0x75, 0x12, 0x20, + 0x00, 0xcd, 0x12, 0x35, 0x12, 0x25, 0x13, 0x06, + 0x6f, 0x6e, 0x65, 0x0a, 0x6f, 0x74, 0x68, 0x65, + 0x72, 0x0c, 0x66, 0x75, 0x74, 0x75, 0x72, 0x65, + 0x19, 0xa8, 0x12, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0xd3, 0x12, 0x18, 0x12, 0x75, + 0x12, 0x20, 0x00, 0x60, 0x12, 0x4a, 0x13, 0x75, + 0x12, 0x1b, 0xa8, 0x12, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0xd3, 0x12, 0x18, 0x12, + 0x73, 0x12, 0x75, 0x12, 0x20, 0x00, 0x60, 0x12, + 0x4a, 0x13, 0x75, 0x12, 0x08, 0x70, 0x61, 0x73, + 0x74, 0x08, 0x79, 0x65, 0x61, 0x72, 0x14, 0x79, + 0x65, 0x61, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x16, 0x79, 0x65, 0x61, 0x72, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0b, 0xed, 0x12, + 0x05, 0x12, 0x20, 0x00, 0x29, 0x12, 0x65, 0x12, + 0x13, 0xe8, 0x12, 0x1a, 0x12, 0x40, 0x12, 0x25, + 0x13, 0x08, 0x12, 0xcd, 0x12, 0x20, 0x00, 0x29, + 0x12, 0x65, 0x12, 0x13, 0xe8, 0x12, 0x18, 0x12, + 0x28, 0x13, 0x28, 0x12, 0x3b, 0x12, 0xcd, 0x12, + 0x20, 0x00, 0x29, 0x12, 0x65, 0x12, 0x0f, 0x2b, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x29, 0x12, 0x65, 0x12, 0x15, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x29, 0x12, + 0x65, 0x12, 0x20, 0x00, 0x60, 0x12, 0x4a, 0x13, + 0x75, 0x12, 0x0e, 0x71, 0x75, 0x61, 0x72, 0x74, + 0x65, 0x72, 0x1a, 0x71, 0x75, 0x61, 0x72, 0x74, + 0x65, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x1c, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0d, + 0x60, 0x12, 0xda, 0x12, 0x05, 0x12, 0x20, 0x00, + 0xc8, 0x12, 0x2d, 0x12, 0x13, 0xe8, 0x12, 0x1a, + 0x12, 0x40, 0x12, 0x25, 0x13, 0x08, 0x12, 0xcd, + 0x12, 0x20, 0x00, 0xc8, 0x12, 0x2d, 0x12, 0x0f, + 0xeb, 0x12, 0x08, 0x12, 0x48, 0x13, 0xcd, 0x12, + 0x20, 0x00, 0xc8, 0x12, 0x2d, 0x12, 0x17, 0x60, + 0x12, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0xc8, 0x12, 0x2d, 0x12, 0x20, 0x00, 0xcd, + 0x12, 0x35, 0x12, 0x25, 0x13, 0x19, 0x60, 0x12, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0xc8, 0x12, 0x2b, 0x12, 0x75, 0x12, 0x20, 0x00, + 0xcd, 0x12, 0x35, 0x12, 0x25, 0x13, 0x17, 0xa8, + 0x12, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0xc8, 0x12, 0x2d, 0x12, 0x20, 0x00, 0x60, + 0x12, 0x4a, 0x13, 0x75, 0x12, 0x19, 0xa8, 0x12, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0xc8, 0x12, 0x2b, 0x12, 0x75, 0x12, 0x20, 0x00, + 0x60, 0x12, 0x4a, 0x13, 0x75, 0x12, 0x0a, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x16, 0x6d, 0x6f, 0x6e, + 0x74, 0x68, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x18, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x11, 0x60, 0x12, + 0xda, 0x12, 0x05, 0x12, 0x20, 0x00, 0x33, 0x12, + 0x1d, 0x12, 0x95, 0x12, 0x75, 0x12, 0x17, 0xe8, + 0x12, 0x1a, 0x12, 0x40, 0x12, 0x25, 0x13, 0x08, + 0x12, 0xcd, 0x12, 0x20, 0x00, 0x33, 0x12, 0x1d, + 0x12, 0x95, 0x12, 0x75, 0x12, 0x13, 0xeb, 0x12, + 0x08, 0x12, 0x48, 0x13, 0xcd, 0x12, 0x20, 0x00, + 0x33, 0x12, 0x1d, 0x12, 0x95, 0x12, 0x75, 0x12, + 0x1b, 0x60, 0x12, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x33, 0x12, 0x1d, 0x12, 0x95, + 0x12, 0x75, 0x12, 0x20, 0x00, 0xcd, 0x12, 0x35, + 0x12, 0x25, 0x13, 0x1d, 0x60, 0x12, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x33, 0x12, + 0x1d, 0x12, 0x95, 0x12, 0x73, 0x12, 0x75, 0x12, + 0x20, 0x00, 0xcd, 0x12, 0x35, 0x12, 0x25, 0x13, + 0x1b, 0xa8, 0x12, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x33, 0x12, 0x1d, 0x12, 0x95, + 0x12, 0x75, 0x12, 0x20, 0x00, 0x60, 0x12, 0x4a, + 0x13, 0x75, 0x12, 0x1d, 0xa8, 0x12, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x33, 0x12, + 0x1d, 0x12, 0x95, 0x12, 0x73, 0x12, 0x75, 0x12, + 0x20, 0x00, 0x60, 0x12, 0x4a, 0x13, 0x75, 0x12, + 0x08, 0x77, 0x65, 0x65, 0x6b, 0x11, 0x60, 0x12, + 0xda, 0x12, 0x05, 0x12, 0x20, 0x00, 0x23, 0x12, + 0x1d, 0x12, 0x95, 0x12, 0x75, 0x12, 0x13, 0x63, + 0x12, 0x08, 0x12, 0x48, 0x13, 0xcd, 0x12, 0x20, + 0x00, 0x33, 0x12, 0x1d, 0x12, 0x95, 0x12, 0x75, + 0x12, 0x14, 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x16, 0x77, 0x65, 0x65, + 0x6b, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x05, 0xdb, 0x12, 0x2c, 0x12, 0x05, 0x90, 0x12, + 0x08, 0x13, 0x0f, 0xa8, 0x12, 0x90, 0x12, 0x08, + 0x13, 0x20, 0x00, 0xc8, 0x12, 0xf2, 0x12, 0xeb, + 0x12, 0x13, 0xa8, 0x12, 0x75, 0x12, 0x93, 0x12, + 0x95, 0x12, 0x75, 0x12, 0x20, 0x00, 0xc8, 0x12, + 0xf2, 0x12, 0xeb, 0x12, 0x04, 0x2d, 0x32, 0x09, + 0x75, 0x12, 0x93, 0x12, 0x95, 0x12, 0x75, 0x12, + 0x17, 0x60, 0x12, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x40, 0x12, 0x95, 0x12, 0x20, + 0x00, 0xcd, 0x12, 0x35, 0x12, 0x25, 0x13, 0x19, + 0x60, 0x12, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x40, 0x12, 0x93, 0x12, 0x75, 0x12, + 0x20, 0x00, 0xcd, 0x12, 0x35, 0x12, 0x25, 0x13, + 0x17, 0xa8, 0x12, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x40, 0x12, 0x95, 0x12, 0x20, + 0x00, 0x60, 0x12, 0x4a, 0x13, 0x75, 0x12, 0x19, + 0xa8, 0x12, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x40, 0x12, 0x93, 0x12, 0x75, 0x12, + 0x20, 0x00, 0x60, 0x12, 0x4a, 0x13, 0x75, 0x12, + 0x06, 0x64, 0x61, 0x79, 0x0b, 0x75, 0x12, 0x0b, + 0x12, 0x95, 0x12, 0x75, 0x12, 0x93, 0x12, 0x19, + 0x60, 0x12, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x40, 0x12, 0x96, 0x12, 0x7d, 0x12, + 0x20, 0x00, 0xcd, 0x12, 0x35, 0x12, 0x25, 0x13, + 0x19, 0xa8, 0x12, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x40, 0x12, 0x95, + 0x12, 0x20, 0x00, 0x60, 0x12, 0x4a, 0x13, 0x75, + 0x12, 0x19, 0xa8, 0x12, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x40, 0x12, 0x96, 0x12, + 0x7d, 0x12, 0x20, 0x00, 0x60, 0x12, 0x4a, 0x13, + 0x75, 0x12, 0x12, 0x64, 0x61, 0x79, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x14, 0x64, 0x61, 0x79, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0d, + 0xed, 0x12, 0x05, 0x12, 0x20, 0x00, 0x30, 0x12, + 0xd3, 0x12, 0x75, 0x12, 0x19, 0x60, 0x12, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x30, + 0x12, 0xd3, 0x12, 0x75, 0x12, 0x20, 0x00, 0xcd, + 0x12, 0x35, 0x12, 0x25, 0x13, 0x1b, 0x60, 0x12, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x30, 0x12, 0xd3, 0x12, 0x76, 0x12, 0x7d, 0x12, + 0x20, 0x00, 0xcd, 0x12, 0x35, 0x12, 0x25, 0x13, + 0x19, 0xa8, 0x12, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x30, 0x12, 0xd3, 0x12, 0x75, + 0x12, 0x20, 0x00, 0x60, 0x12, 0x4a, 0x13, 0x75, + 0x12, 0x1b, 0xa8, 0x12, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x30, 0x12, 0xd3, 0x12, + 0x76, 0x12, 0x7d, 0x12, 0x20, 0x00, 0x60, 0x12, + 0x4a, 0x13, 0x75, 0x12, 0x08, 0x68, 0x6f, 0x75, + 0x72, 0x14, 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x16, 0x68, 0x6f, 0x75, + 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x0d, 0xed, 0x12, 0x05, 0x12, 0x20, 0x00, 0xf0, + 0x12, 0x42, 0x12, 0x43, 0x12, 0x19, 0x60, 0x12, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0xf0, 0x12, 0x42, 0x12, 0x43, 0x12, 0x20, 0x00, + 0xcd, 0x12, 0x35, 0x12, 0x25, 0x13, 0x1d, 0x60, + 0x12, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0xf0, 0x12, 0x42, 0x12, 0x43, 0x12, 0xce, + 0x12, 0x7d, 0x12, 0x20, 0x00, 0xcd, 0x12, 0x35, + 0x12, 0x25, 0x13, 0x19, 0xa8, 0x12, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xf0, 0x12, + 0x42, 0x12, 0x43, 0x12, 0x20, 0x00, 0x60, 0x12, + 0x4a, 0x13, 0x75, 0x12, 0x1d, 0xa8, 0x12, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xf0, + 0x12, 0x42, 0x12, 0x43, 0x12, 0xce, 0x12, 0x7d, + 0x12, 0x20, 0x00, 0x60, 0x12, 0x4a, 0x13, 0x75, + 0x12, 0x0c, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, + 0x18, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x07, 0xa0, 0x12, 0x01, 0x12, + 0x95, 0x12, 0x1b, 0x60, 0x12, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x30, 0x12, 0xa8, + 0x12, 0x95, 0x12, 0xf5, 0x12, 0x20, 0x00, 0xcd, + 0x12, 0x35, 0x12, 0x25, 0x13, 0x1d, 0x60, 0x12, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x30, 0x12, 0xa8, 0x12, 0x95, 0x12, 0xf6, 0x12, + 0x7d, 0x12, 0x20, 0x00, 0xcd, 0x12, 0x35, 0x12, + 0x25, 0x13, 0x1b, 0xa8, 0x12, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x30, 0x12, 0xa8, + 0x12, 0x95, 0x12, 0xf5, 0x12, 0x20, 0x00, 0x60, + 0x12, 0x4a, 0x13, 0x75, 0x12, 0x1d, 0xa8, 0x12, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x30, 0x12, 0xa8, 0x12, 0x95, 0x12, 0xf6, 0x12, + 0x7d, 0x12, 0x20, 0x00, 0x60, 0x12, 0x4a, 0x13, + 0x75, 0x12, 0x0c, 0x73, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x18, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x73, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x08, 0x6c, 0x61, 0x74, + 0x6e, 0x04, 0x6e, 0x75, 0x08, 0x64, 0x61, 0x74, + 0x61, 0x70, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, + 0x6e, 0x74, 0x6c, 0x2d, 0x72, 0x65, 0x6c, 0x61, + 0x74, 0x69, 0x76, 0x65, 0x2d, 0x74, 0x69, 0x6d, + 0x65, 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, + 0x64, 0x61, 0x74, 0x61, 0x2f, 0x61, 0x6d, 0x2e, + 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, + 0x00, 0x01, 0x00, 0x07, 0x00, 0x00, 0xea, 0x0f, + 0x01, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x06, 0xc8, + 0x04, 0xd0, 0x00, 0x00, 0x00, 0x39, 0xd1, 0x00, + 0x00, 0x00, 0x42, 0xd2, 0x00, 0x00, 0x00, 0xaa, + 0x6a, 0xd5, 0x07, 0x00, 0x00, 0x39, 0xd1, 0x00, + 0x00, 0x00, 0x42, 0xd2, 0x00, 0x00, 0x00, 0x43, + 0xd0, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd3, 0x00, + 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe3, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xe4, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xe5, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xe7, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe3, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xe4, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xe5, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xe7, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe3, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xe4, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xe5, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xe7, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xec, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xed, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xf1, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x4d, 0xf2, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xec, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xed, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xf1, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x4d, 0xf3, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xec, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xed, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xf1, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x4d, 0xf4, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xf6, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xf7, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xfb, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x4d, 0xfc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xf6, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xfe, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xfb, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x4d, 0xff, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xf6, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xfe, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xfb, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0x02, 0x01, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x03, 0x01, + 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, + 0x04, 0x01, 0x00, 0x00, 0x4d, 0x05, 0x01, 0x00, + 0x00, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x07, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x08, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x09, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x4d, + 0x0b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x01, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0x02, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0x02, + 0x00, 0x00, 0x80, 0x04, 0x04, 0x01, 0x00, 0x00, + 0x4d, 0x05, 0x01, 0x00, 0x00, 0x04, 0x0c, 0x01, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x0f, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x4d, 0x10, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0x02, 0x01, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x03, 0x01, + 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, + 0x04, 0x01, 0x00, 0x00, 0x4d, 0x05, 0x01, 0x00, + 0x00, 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x07, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0d, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0e, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x4d, + 0x11, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x12, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, + 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x4d, 0x17, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x16, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x4d, 0x18, 0x01, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x13, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x14, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x4d, + 0x19, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x1a, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, + 0x04, 0x1b, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x1c, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x1e, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x4d, 0x1f, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x1b, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x1c, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x1d, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x1e, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x4d, 0x20, 0x01, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x1b, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x1c, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x1d, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x4d, + 0x21, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x22, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, + 0x04, 0x23, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x24, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x25, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x26, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x4d, 0x27, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x22, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x23, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x24, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x25, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x4d, + 0x28, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x22, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, + 0x04, 0x23, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x24, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x25, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x26, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x4d, 0x29, 0x01, 0x00, 0x00, + 0x04, 0x2a, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x2b, 0x01, 0x00, 0x00, 0x4d, 0x2c, 0x01, + 0x00, 0x00, 0x24, 0x01, 0x00, 0xc8, 0xc4, 0x28, + 0xda, 0x04, 0x01, 0xb1, 0x02, 0x76, 0x53, 0x35, + 0x08, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x1c, 0x12, 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_ar_size = 7042; + +const uint8_t intl_relative_ar[7042] = { + 0x01, 0x87, 0x01, 0x1e, 0x5f, 0x5f, 0x61, 0x64, + 0x64, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, + 0x61, 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, + 0x24, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x04, 0x61, 0x72, 0x0c, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x1b, 0x27, 0x06, + 0x44, 0x06, 0x33, 0x06, 0x46, 0x06, 0x29, 0x06, + 0x20, 0x00, 0x27, 0x06, 0x44, 0x06, 0x2d, 0x06, + 0x27, 0x06, 0x44, 0x06, 0x4a, 0x06, 0x29, 0x06, + 0x1b, 0x27, 0x06, 0x44, 0x06, 0x33, 0x06, 0x46, + 0x06, 0x29, 0x06, 0x20, 0x00, 0x27, 0x06, 0x44, + 0x06, 0x42, 0x06, 0x27, 0x06, 0x2f, 0x06, 0x45, + 0x06, 0x29, 0x06, 0x1b, 0x27, 0x06, 0x44, 0x06, + 0x33, 0x06, 0x46, 0x06, 0x29, 0x06, 0x20, 0x00, + 0x27, 0x06, 0x44, 0x06, 0x45, 0x06, 0x27, 0x06, + 0x36, 0x06, 0x4a, 0x06, 0x29, 0x06, 0x04, 0x2d, + 0x31, 0x19, 0x2e, 0x06, 0x44, 0x06, 0x27, 0x06, + 0x44, 0x06, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x33, 0x06, 0x46, 0x06, + 0x29, 0x06, 0x08, 0x7a, 0x65, 0x72, 0x6f, 0x1d, + 0x2e, 0x06, 0x44, 0x06, 0x27, 0x06, 0x44, 0x06, + 0x20, 0x00, 0x33, 0x06, 0x46, 0x06, 0x29, 0x06, + 0x20, 0x00, 0x48, 0x06, 0x27, 0x06, 0x2d, 0x06, + 0x2f, 0x06, 0x29, 0x06, 0x06, 0x6f, 0x6e, 0x65, + 0x15, 0x2e, 0x06, 0x44, 0x06, 0x27, 0x06, 0x44, + 0x06, 0x20, 0x00, 0x33, 0x06, 0x46, 0x06, 0x2a, + 0x06, 0x4a, 0x06, 0x46, 0x06, 0x06, 0x74, 0x77, + 0x6f, 0x1d, 0x2e, 0x06, 0x44, 0x06, 0x27, 0x06, + 0x44, 0x06, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x33, 0x06, 0x46, 0x06, + 0x48, 0x06, 0x27, 0x06, 0x2a, 0x06, 0x06, 0x66, + 0x65, 0x77, 0x08, 0x6d, 0x61, 0x6e, 0x79, 0x0a, + 0x6f, 0x74, 0x68, 0x65, 0x72, 0x0c, 0x66, 0x75, + 0x74, 0x75, 0x72, 0x65, 0x17, 0x42, 0x06, 0x28, + 0x06, 0x44, 0x06, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x33, 0x06, 0x46, + 0x06, 0x29, 0x06, 0x1b, 0x42, 0x06, 0x28, 0x06, + 0x44, 0x06, 0x20, 0x00, 0x33, 0x06, 0x46, 0x06, + 0x29, 0x06, 0x20, 0x00, 0x48, 0x06, 0x27, 0x06, + 0x2d, 0x06, 0x2f, 0x06, 0x29, 0x06, 0x13, 0x42, + 0x06, 0x28, 0x06, 0x44, 0x06, 0x20, 0x00, 0x33, + 0x06, 0x46, 0x06, 0x2a, 0x06, 0x4a, 0x06, 0x46, + 0x06, 0x1b, 0x42, 0x06, 0x28, 0x06, 0x44, 0x06, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x33, 0x06, 0x46, 0x06, 0x48, 0x06, + 0x27, 0x06, 0x2a, 0x06, 0x08, 0x70, 0x61, 0x73, + 0x74, 0x08, 0x79, 0x65, 0x61, 0x72, 0x14, 0x79, + 0x65, 0x61, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x16, 0x79, 0x65, 0x61, 0x72, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x13, 0x47, 0x06, + 0x30, 0x06, 0x27, 0x06, 0x20, 0x00, 0x27, 0x06, + 0x44, 0x06, 0x31, 0x06, 0x28, 0x06, 0x39, 0x06, + 0x19, 0x27, 0x06, 0x44, 0x06, 0x31, 0x06, 0x28, + 0x06, 0x39, 0x06, 0x20, 0x00, 0x27, 0x06, 0x44, + 0x06, 0x42, 0x06, 0x27, 0x06, 0x2f, 0x06, 0x45, + 0x06, 0x19, 0x27, 0x06, 0x44, 0x06, 0x31, 0x06, + 0x28, 0x06, 0x39, 0x06, 0x20, 0x00, 0x27, 0x06, + 0x44, 0x06, 0x23, 0x06, 0x2e, 0x06, 0x4a, 0x06, + 0x31, 0x06, 0x21, 0x2e, 0x06, 0x44, 0x06, 0x27, + 0x06, 0x44, 0x06, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x31, 0x06, 0x28, + 0x06, 0x39, 0x06, 0x20, 0x00, 0x33, 0x06, 0x46, + 0x06, 0x29, 0x06, 0x23, 0x2e, 0x06, 0x44, 0x06, + 0x27, 0x06, 0x44, 0x06, 0x20, 0x00, 0x31, 0x06, + 0x28, 0x06, 0x39, 0x06, 0x20, 0x00, 0x33, 0x06, + 0x46, 0x06, 0x29, 0x06, 0x20, 0x00, 0x48, 0x06, + 0x27, 0x06, 0x2d, 0x06, 0x2f, 0x06, 0x1b, 0x2e, + 0x06, 0x44, 0x06, 0x27, 0x06, 0x44, 0x06, 0x20, + 0x00, 0x31, 0x06, 0x28, 0x06, 0x39, 0x06, 0x4a, + 0x06, 0x20, 0x00, 0x33, 0x06, 0x46, 0x06, 0x29, + 0x06, 0x25, 0x2e, 0x06, 0x44, 0x06, 0x27, 0x06, + 0x44, 0x06, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x23, 0x06, 0x31, 0x06, + 0x28, 0x06, 0x27, 0x06, 0x39, 0x06, 0x20, 0x00, + 0x33, 0x06, 0x46, 0x06, 0x29, 0x06, 0x1f, 0x42, + 0x06, 0x28, 0x06, 0x44, 0x06, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x31, + 0x06, 0x28, 0x06, 0x39, 0x06, 0x20, 0x00, 0x33, + 0x06, 0x46, 0x06, 0x29, 0x06, 0x21, 0x42, 0x06, + 0x28, 0x06, 0x44, 0x06, 0x20, 0x00, 0x31, 0x06, + 0x28, 0x06, 0x39, 0x06, 0x20, 0x00, 0x33, 0x06, + 0x46, 0x06, 0x29, 0x06, 0x20, 0x00, 0x48, 0x06, + 0x27, 0x06, 0x2d, 0x06, 0x2f, 0x06, 0x19, 0x42, + 0x06, 0x28, 0x06, 0x44, 0x06, 0x20, 0x00, 0x31, + 0x06, 0x28, 0x06, 0x39, 0x06, 0x4a, 0x06, 0x20, + 0x00, 0x33, 0x06, 0x46, 0x06, 0x29, 0x06, 0x23, + 0x42, 0x06, 0x28, 0x06, 0x44, 0x06, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x23, 0x06, 0x31, 0x06, 0x28, 0x06, 0x27, 0x06, + 0x39, 0x06, 0x20, 0x00, 0x33, 0x06, 0x46, 0x06, + 0x29, 0x06, 0x0e, 0x71, 0x75, 0x61, 0x72, 0x74, + 0x65, 0x72, 0x1a, 0x71, 0x75, 0x61, 0x72, 0x74, + 0x65, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x1c, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x13, + 0x47, 0x06, 0x30, 0x06, 0x27, 0x06, 0x20, 0x00, + 0x27, 0x06, 0x44, 0x06, 0x34, 0x06, 0x47, 0x06, + 0x31, 0x06, 0x19, 0x27, 0x06, 0x44, 0x06, 0x34, + 0x06, 0x47, 0x06, 0x31, 0x06, 0x20, 0x00, 0x27, + 0x06, 0x44, 0x06, 0x42, 0x06, 0x27, 0x06, 0x2f, + 0x06, 0x45, 0x06, 0x19, 0x27, 0x06, 0x44, 0x06, + 0x34, 0x06, 0x47, 0x06, 0x31, 0x06, 0x20, 0x00, + 0x27, 0x06, 0x44, 0x06, 0x45, 0x06, 0x27, 0x06, + 0x36, 0x06, 0x4a, 0x06, 0x19, 0x2e, 0x06, 0x44, + 0x06, 0x27, 0x06, 0x44, 0x06, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x34, + 0x06, 0x47, 0x06, 0x31, 0x06, 0x1b, 0x2e, 0x06, + 0x44, 0x06, 0x27, 0x06, 0x44, 0x06, 0x20, 0x00, + 0x34, 0x06, 0x47, 0x06, 0x31, 0x06, 0x20, 0x00, + 0x48, 0x06, 0x27, 0x06, 0x2d, 0x06, 0x2f, 0x06, + 0x15, 0x2e, 0x06, 0x44, 0x06, 0x27, 0x06, 0x44, + 0x06, 0x20, 0x00, 0x34, 0x06, 0x47, 0x06, 0x31, + 0x06, 0x4a, 0x06, 0x46, 0x06, 0x1b, 0x2e, 0x06, + 0x44, 0x06, 0x27, 0x06, 0x44, 0x06, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x23, 0x06, 0x34, 0x06, 0x47, 0x06, 0x31, 0x06, + 0x1d, 0x2e, 0x06, 0x44, 0x06, 0x27, 0x06, 0x44, + 0x06, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x34, 0x06, 0x47, 0x06, 0x31, + 0x06, 0x4b, 0x06, 0x27, 0x06, 0x17, 0x42, 0x06, + 0x28, 0x06, 0x44, 0x06, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x34, 0x06, + 0x47, 0x06, 0x31, 0x06, 0x19, 0x42, 0x06, 0x28, + 0x06, 0x44, 0x06, 0x20, 0x00, 0x34, 0x06, 0x47, + 0x06, 0x31, 0x06, 0x20, 0x00, 0x48, 0x06, 0x27, + 0x06, 0x2d, 0x06, 0x2f, 0x06, 0x13, 0x42, 0x06, + 0x28, 0x06, 0x44, 0x06, 0x20, 0x00, 0x34, 0x06, + 0x47, 0x06, 0x31, 0x06, 0x4a, 0x06, 0x46, 0x06, + 0x19, 0x42, 0x06, 0x28, 0x06, 0x44, 0x06, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x23, 0x06, 0x34, 0x06, 0x47, 0x06, 0x31, + 0x06, 0x1b, 0x42, 0x06, 0x28, 0x06, 0x44, 0x06, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x34, 0x06, 0x47, 0x06, 0x31, 0x06, + 0x4b, 0x06, 0x27, 0x06, 0x0a, 0x6d, 0x6f, 0x6e, + 0x74, 0x68, 0x16, 0x6d, 0x6f, 0x6e, 0x74, 0x68, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x18, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x17, 0x47, 0x06, 0x30, 0x06, + 0x27, 0x06, 0x20, 0x00, 0x27, 0x06, 0x44, 0x06, + 0x23, 0x06, 0x33, 0x06, 0x28, 0x06, 0x48, 0x06, + 0x39, 0x06, 0x1d, 0x27, 0x06, 0x44, 0x06, 0x23, + 0x06, 0x33, 0x06, 0x28, 0x06, 0x48, 0x06, 0x39, + 0x06, 0x20, 0x00, 0x27, 0x06, 0x44, 0x06, 0x42, + 0x06, 0x27, 0x06, 0x2f, 0x06, 0x45, 0x06, 0x1d, + 0x27, 0x06, 0x44, 0x06, 0x23, 0x06, 0x33, 0x06, + 0x28, 0x06, 0x48, 0x06, 0x39, 0x06, 0x20, 0x00, + 0x27, 0x06, 0x44, 0x06, 0x45, 0x06, 0x27, 0x06, + 0x36, 0x06, 0x4a, 0x06, 0x1d, 0x2e, 0x06, 0x44, + 0x06, 0x27, 0x06, 0x44, 0x06, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x23, + 0x06, 0x33, 0x06, 0x28, 0x06, 0x48, 0x06, 0x39, + 0x06, 0x1f, 0x2e, 0x06, 0x44, 0x06, 0x27, 0x06, + 0x44, 0x06, 0x20, 0x00, 0x23, 0x06, 0x33, 0x06, + 0x28, 0x06, 0x48, 0x06, 0x39, 0x06, 0x20, 0x00, + 0x48, 0x06, 0x27, 0x06, 0x2d, 0x06, 0x2f, 0x06, + 0x19, 0x2e, 0x06, 0x44, 0x06, 0x27, 0x06, 0x44, + 0x06, 0x20, 0x00, 0x23, 0x06, 0x33, 0x06, 0x28, + 0x06, 0x48, 0x06, 0x39, 0x06, 0x4a, 0x06, 0x46, + 0x06, 0x1f, 0x2e, 0x06, 0x44, 0x06, 0x27, 0x06, + 0x44, 0x06, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x23, 0x06, 0x33, 0x06, + 0x27, 0x06, 0x28, 0x06, 0x4a, 0x06, 0x39, 0x06, + 0x21, 0x2e, 0x06, 0x44, 0x06, 0x27, 0x06, 0x44, + 0x06, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x23, 0x06, 0x33, 0x06, 0x28, + 0x06, 0x48, 0x06, 0x39, 0x06, 0x4b, 0x06, 0x27, + 0x06, 0x1b, 0x42, 0x06, 0x28, 0x06, 0x44, 0x06, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x23, 0x06, 0x33, 0x06, 0x28, 0x06, + 0x48, 0x06, 0x39, 0x06, 0x1d, 0x42, 0x06, 0x28, + 0x06, 0x44, 0x06, 0x20, 0x00, 0x23, 0x06, 0x33, + 0x06, 0x28, 0x06, 0x48, 0x06, 0x39, 0x06, 0x20, + 0x00, 0x48, 0x06, 0x27, 0x06, 0x2d, 0x06, 0x2f, + 0x06, 0x17, 0x42, 0x06, 0x28, 0x06, 0x44, 0x06, + 0x20, 0x00, 0x23, 0x06, 0x33, 0x06, 0x28, 0x06, + 0x48, 0x06, 0x39, 0x06, 0x4a, 0x06, 0x46, 0x06, + 0x1d, 0x42, 0x06, 0x28, 0x06, 0x44, 0x06, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x23, 0x06, 0x33, 0x06, 0x27, 0x06, 0x28, + 0x06, 0x4a, 0x06, 0x39, 0x06, 0x1f, 0x42, 0x06, + 0x28, 0x06, 0x44, 0x06, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x23, 0x06, + 0x33, 0x06, 0x28, 0x06, 0x48, 0x06, 0x39, 0x06, + 0x4b, 0x06, 0x27, 0x06, 0x08, 0x77, 0x65, 0x65, + 0x6b, 0x21, 0x2e, 0x06, 0x44, 0x06, 0x27, 0x06, + 0x44, 0x06, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x23, 0x06, 0x33, 0x06, + 0x28, 0x06, 0x48, 0x06, 0x39, 0x06, 0x4a, 0x06, + 0x46, 0x06, 0x14, 0x77, 0x65, 0x65, 0x6b, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, 0x77, 0x65, + 0x65, 0x6b, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x0b, 0x27, 0x06, 0x44, 0x06, 0x4a, 0x06, + 0x48, 0x06, 0x45, 0x06, 0x09, 0x3a, 0x06, 0x2f, + 0x06, 0x4b, 0x06, 0x27, 0x06, 0x11, 0x28, 0x06, + 0x39, 0x06, 0x2f, 0x06, 0x20, 0x00, 0x27, 0x06, + 0x44, 0x06, 0x3a, 0x06, 0x2f, 0x06, 0x0f, 0x23, + 0x06, 0x48, 0x06, 0x44, 0x06, 0x20, 0x00, 0x23, + 0x06, 0x45, 0x06, 0x33, 0x06, 0x04, 0x2d, 0x32, + 0x07, 0x23, 0x06, 0x45, 0x06, 0x33, 0x06, 0x19, + 0x2e, 0x06, 0x44, 0x06, 0x27, 0x06, 0x44, 0x06, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x4a, 0x06, 0x48, 0x06, 0x45, 0x06, + 0x1b, 0x2e, 0x06, 0x44, 0x06, 0x27, 0x06, 0x44, + 0x06, 0x20, 0x00, 0x4a, 0x06, 0x48, 0x06, 0x45, + 0x06, 0x20, 0x00, 0x48, 0x06, 0x27, 0x06, 0x2d, + 0x06, 0x2f, 0x06, 0x15, 0x2e, 0x06, 0x44, 0x06, + 0x27, 0x06, 0x44, 0x06, 0x20, 0x00, 0x4a, 0x06, + 0x48, 0x06, 0x45, 0x06, 0x4a, 0x06, 0x46, 0x06, + 0x1b, 0x2e, 0x06, 0x44, 0x06, 0x27, 0x06, 0x44, + 0x06, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x23, 0x06, 0x4a, 0x06, 0x27, + 0x06, 0x45, 0x06, 0x1d, 0x2e, 0x06, 0x44, 0x06, + 0x27, 0x06, 0x44, 0x06, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x4a, 0x06, + 0x48, 0x06, 0x45, 0x06, 0x4b, 0x06, 0x27, 0x06, + 0x17, 0x42, 0x06, 0x28, 0x06, 0x44, 0x06, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x4a, 0x06, 0x48, 0x06, 0x45, 0x06, 0x19, + 0x42, 0x06, 0x28, 0x06, 0x44, 0x06, 0x20, 0x00, + 0x4a, 0x06, 0x48, 0x06, 0x45, 0x06, 0x20, 0x00, + 0x48, 0x06, 0x27, 0x06, 0x2d, 0x06, 0x2f, 0x06, + 0x13, 0x42, 0x06, 0x28, 0x06, 0x44, 0x06, 0x20, + 0x00, 0x4a, 0x06, 0x48, 0x06, 0x45, 0x06, 0x4a, + 0x06, 0x46, 0x06, 0x19, 0x42, 0x06, 0x28, 0x06, + 0x44, 0x06, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x23, 0x06, 0x4a, 0x06, + 0x27, 0x06, 0x45, 0x06, 0x1b, 0x42, 0x06, 0x28, + 0x06, 0x44, 0x06, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x4a, 0x06, 0x48, + 0x06, 0x45, 0x06, 0x4b, 0x06, 0x27, 0x06, 0x06, + 0x64, 0x61, 0x79, 0x12, 0x64, 0x61, 0x79, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x14, 0x64, 0x61, + 0x79, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x1d, 0x27, 0x06, 0x44, 0x06, 0x33, 0x06, 0x27, + 0x06, 0x39, 0x06, 0x29, 0x06, 0x20, 0x00, 0x27, + 0x06, 0x44, 0x06, 0x2d, 0x06, 0x27, 0x06, 0x44, + 0x06, 0x4a, 0x06, 0x29, 0x06, 0x1b, 0x2e, 0x06, + 0x44, 0x06, 0x27, 0x06, 0x44, 0x06, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x33, 0x06, 0x27, 0x06, 0x39, 0x06, 0x29, 0x06, + 0x1f, 0x2e, 0x06, 0x44, 0x06, 0x27, 0x06, 0x44, + 0x06, 0x20, 0x00, 0x33, 0x06, 0x27, 0x06, 0x39, + 0x06, 0x29, 0x06, 0x20, 0x00, 0x48, 0x06, 0x27, + 0x06, 0x2d, 0x06, 0x2f, 0x06, 0x29, 0x06, 0x17, + 0x2e, 0x06, 0x44, 0x06, 0x27, 0x06, 0x44, 0x06, + 0x20, 0x00, 0x33, 0x06, 0x27, 0x06, 0x39, 0x06, + 0x2a, 0x06, 0x4a, 0x06, 0x46, 0x06, 0x1d, 0x2e, + 0x06, 0x44, 0x06, 0x27, 0x06, 0x44, 0x06, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x33, 0x06, 0x27, 0x06, 0x39, 0x06, 0x27, + 0x06, 0x2a, 0x06, 0x19, 0x42, 0x06, 0x28, 0x06, + 0x44, 0x06, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x33, 0x06, 0x27, 0x06, + 0x39, 0x06, 0x29, 0x06, 0x1d, 0x42, 0x06, 0x28, + 0x06, 0x44, 0x06, 0x20, 0x00, 0x33, 0x06, 0x27, + 0x06, 0x39, 0x06, 0x29, 0x06, 0x20, 0x00, 0x48, + 0x06, 0x27, 0x06, 0x2d, 0x06, 0x2f, 0x06, 0x29, + 0x06, 0x15, 0x42, 0x06, 0x28, 0x06, 0x44, 0x06, + 0x20, 0x00, 0x33, 0x06, 0x27, 0x06, 0x39, 0x06, + 0x2a, 0x06, 0x4a, 0x06, 0x46, 0x06, 0x1b, 0x42, + 0x06, 0x28, 0x06, 0x44, 0x06, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x33, + 0x06, 0x27, 0x06, 0x39, 0x06, 0x27, 0x06, 0x2a, + 0x06, 0x08, 0x68, 0x6f, 0x75, 0x72, 0x14, 0x68, + 0x6f, 0x75, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x16, 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x17, 0x47, 0x06, + 0x30, 0x06, 0x47, 0x06, 0x20, 0x00, 0x27, 0x06, + 0x44, 0x06, 0x2f, 0x06, 0x42, 0x06, 0x4a, 0x06, + 0x42, 0x06, 0x29, 0x06, 0x1d, 0x2e, 0x06, 0x44, + 0x06, 0x27, 0x06, 0x44, 0x06, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x2f, + 0x06, 0x42, 0x06, 0x4a, 0x06, 0x42, 0x06, 0x29, + 0x06, 0x21, 0x2e, 0x06, 0x44, 0x06, 0x27, 0x06, + 0x44, 0x06, 0x20, 0x00, 0x2f, 0x06, 0x42, 0x06, + 0x4a, 0x06, 0x42, 0x06, 0x29, 0x06, 0x20, 0x00, + 0x48, 0x06, 0x27, 0x06, 0x2d, 0x06, 0x2f, 0x06, + 0x29, 0x06, 0x19, 0x2e, 0x06, 0x44, 0x06, 0x27, + 0x06, 0x44, 0x06, 0x20, 0x00, 0x2f, 0x06, 0x42, + 0x06, 0x4a, 0x06, 0x42, 0x06, 0x2a, 0x06, 0x4a, + 0x06, 0x46, 0x06, 0x1d, 0x2e, 0x06, 0x44, 0x06, + 0x27, 0x06, 0x44, 0x06, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x2f, 0x06, + 0x42, 0x06, 0x27, 0x06, 0x26, 0x06, 0x42, 0x06, + 0x1b, 0x42, 0x06, 0x28, 0x06, 0x44, 0x06, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x2f, 0x06, 0x42, 0x06, 0x4a, 0x06, 0x42, + 0x06, 0x29, 0x06, 0x1f, 0x42, 0x06, 0x28, 0x06, + 0x44, 0x06, 0x20, 0x00, 0x2f, 0x06, 0x42, 0x06, + 0x4a, 0x06, 0x42, 0x06, 0x29, 0x06, 0x20, 0x00, + 0x48, 0x06, 0x27, 0x06, 0x2d, 0x06, 0x2f, 0x06, + 0x29, 0x06, 0x17, 0x42, 0x06, 0x28, 0x06, 0x44, + 0x06, 0x20, 0x00, 0x2f, 0x06, 0x42, 0x06, 0x4a, + 0x06, 0x42, 0x06, 0x2a, 0x06, 0x4a, 0x06, 0x46, + 0x06, 0x1b, 0x42, 0x06, 0x28, 0x06, 0x44, 0x06, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x2f, 0x06, 0x42, 0x06, 0x27, 0x06, + 0x26, 0x06, 0x42, 0x06, 0x0c, 0x6d, 0x69, 0x6e, + 0x75, 0x74, 0x65, 0x18, 0x6d, 0x69, 0x6e, 0x75, + 0x74, 0x65, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x1a, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x09, 0x27, + 0x06, 0x44, 0x06, 0x22, 0x06, 0x46, 0x06, 0x1d, + 0x2e, 0x06, 0x44, 0x06, 0x27, 0x06, 0x44, 0x06, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x2b, 0x06, 0x27, 0x06, 0x46, 0x06, + 0x4a, 0x06, 0x29, 0x06, 0x21, 0x2e, 0x06, 0x44, + 0x06, 0x27, 0x06, 0x44, 0x06, 0x20, 0x00, 0x2b, + 0x06, 0x27, 0x06, 0x46, 0x06, 0x4a, 0x06, 0x29, + 0x06, 0x20, 0x00, 0x48, 0x06, 0x27, 0x06, 0x2d, + 0x06, 0x2f, 0x06, 0x29, 0x06, 0x19, 0x2e, 0x06, + 0x44, 0x06, 0x27, 0x06, 0x44, 0x06, 0x20, 0x00, + 0x2b, 0x06, 0x27, 0x06, 0x46, 0x06, 0x4a, 0x06, + 0x2a, 0x06, 0x4a, 0x06, 0x46, 0x06, 0x1d, 0x2e, + 0x06, 0x44, 0x06, 0x27, 0x06, 0x44, 0x06, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x2b, 0x06, 0x48, 0x06, 0x27, 0x06, 0x46, + 0x06, 0x4d, 0x06, 0x1b, 0x42, 0x06, 0x28, 0x06, + 0x44, 0x06, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x2b, 0x06, 0x27, 0x06, + 0x46, 0x06, 0x4a, 0x06, 0x29, 0x06, 0x1f, 0x42, + 0x06, 0x28, 0x06, 0x44, 0x06, 0x20, 0x00, 0x2b, + 0x06, 0x27, 0x06, 0x46, 0x06, 0x4a, 0x06, 0x29, + 0x06, 0x20, 0x00, 0x48, 0x06, 0x27, 0x06, 0x2d, + 0x06, 0x2f, 0x06, 0x29, 0x06, 0x17, 0x42, 0x06, + 0x28, 0x06, 0x44, 0x06, 0x20, 0x00, 0x2b, 0x06, + 0x27, 0x06, 0x46, 0x06, 0x4a, 0x06, 0x2a, 0x06, + 0x4a, 0x06, 0x46, 0x06, 0x1b, 0x42, 0x06, 0x28, + 0x06, 0x44, 0x06, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x2b, 0x06, 0x48, + 0x06, 0x27, 0x06, 0x46, 0x06, 0x50, 0x06, 0x0c, + 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x1b, 0x42, + 0x06, 0x28, 0x06, 0x44, 0x06, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x2b, + 0x06, 0x48, 0x06, 0x27, 0x06, 0x46, 0x06, 0x4d, + 0x06, 0x18, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x73, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x08, 0x61, 0x72, 0x61, + 0x62, 0x04, 0x6e, 0x75, 0x08, 0x64, 0x61, 0x74, + 0x61, 0x70, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, + 0x6e, 0x74, 0x6c, 0x2d, 0x72, 0x65, 0x6c, 0x61, + 0x74, 0x69, 0x76, 0x65, 0x2d, 0x74, 0x69, 0x6d, + 0x65, 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, + 0x64, 0x61, 0x74, 0x61, 0x2f, 0x61, 0x72, 0x2e, + 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, + 0x00, 0x01, 0x00, 0x07, 0x00, 0x00, 0xa2, 0x1d, + 0x01, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x06, 0xc8, + 0x04, 0xd0, 0x00, 0x00, 0x00, 0x39, 0xd1, 0x00, + 0x00, 0x00, 0x42, 0xd2, 0x00, 0x00, 0x00, 0xaa, + 0x6a, 0x8d, 0x0e, 0x00, 0x00, 0x39, 0xd1, 0x00, + 0x00, 0x00, 0x42, 0xd2, 0x00, 0x00, 0x00, 0x43, + 0xd0, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd3, 0x00, + 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0xdf, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, + 0xe2, 0x00, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xe6, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x04, 0xe4, 0x00, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x04, 0xdf, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe4, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe5, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x04, 0xe4, 0x00, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x04, 0xe4, + 0x00, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xd9, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, + 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe4, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0xe7, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x04, 0xe4, + 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xec, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xed, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xef, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf0, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x04, 0xef, 0x00, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x04, 0xef, + 0x00, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, + 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf3, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0xf6, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x04, 0xf3, + 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x4d, + 0xf7, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xec, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xed, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xef, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf0, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x04, 0xef, 0x00, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x04, 0xef, + 0x00, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, + 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf3, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0xf6, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x04, 0xf3, + 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x4d, + 0xf8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xec, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xed, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xef, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf0, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x04, 0xef, 0x00, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x04, 0xef, + 0x00, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, + 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf3, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0xf6, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x04, 0xf3, + 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x4d, + 0xf9, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfa, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xfb, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfd, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xfe, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x04, 0x01, 0x01, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x04, 0xfd, + 0x00, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, + 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x02, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0x05, 0x01, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x04, 0x06, + 0x01, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x4d, + 0x07, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xfd, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x04, 0x01, + 0x01, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x04, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, + 0xe2, 0x00, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, + 0x00, 0x4d, 0x08, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, + 0xe2, 0x00, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x04, + 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x04, 0x02, 0x01, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x00, 0x4d, 0x09, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0x0b, 0x01, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x01, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x0f, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x10, + 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, + 0xe2, 0x00, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x13, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x14, + 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x04, 0x12, 0x01, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x00, 0x4d, 0x17, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x0e, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x18, + 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x04, 0x0d, 0x01, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x12, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x13, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x04, 0x12, + 0x01, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x4d, 0x19, 0x01, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x0d, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0e, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x04, 0x11, 0x01, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x04, 0x0d, + 0x01, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, + 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x12, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x04, 0x16, + 0x01, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x4d, + 0x1a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x1b, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0x1c, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, 0x02, + 0x00, 0x00, 0x80, 0x04, 0x1e, 0x01, 0x00, 0x00, + 0x4d, 0x1f, 0x01, 0x00, 0x00, 0x04, 0x20, 0x01, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x22, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x23, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x24, + 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x04, 0x25, 0x01, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, + 0xe2, 0x00, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x27, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x28, + 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x04, 0x29, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x04, 0x2a, 0x01, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x04, 0x26, 0x01, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x00, 0x4d, 0x2b, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x1b, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0x1c, 0x01, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x1d, 0x01, + 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, + 0x1e, 0x01, 0x00, 0x00, 0x4d, 0x1f, 0x01, 0x00, + 0x00, 0x04, 0x20, 0x01, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x21, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x22, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x23, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x04, 0x24, 0x01, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x04, 0x25, 0x01, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x04, 0x21, + 0x01, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, + 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x26, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x27, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x28, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0x29, 0x01, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x04, 0x2a, + 0x01, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x4d, + 0x2c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x1b, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0x1c, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, 0x02, + 0x00, 0x00, 0x80, 0x04, 0x1e, 0x01, 0x00, 0x00, + 0x4d, 0x1f, 0x01, 0x00, 0x00, 0x04, 0x20, 0x01, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x22, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x23, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x24, + 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x04, 0x25, 0x01, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, + 0xe2, 0x00, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x27, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x28, + 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x04, 0x29, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x04, 0x2a, 0x01, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x04, 0x26, 0x01, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x00, 0x4d, 0x2d, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x2e, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x2f, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x30, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x31, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x04, 0x32, 0x01, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x04, 0x2f, 0x01, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x04, 0x2f, + 0x01, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, + 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x33, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x34, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x35, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0x36, 0x01, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x04, 0x33, + 0x01, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x04, 0x33, 0x01, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x4d, + 0x37, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x2f, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x30, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x31, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0x32, 0x01, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x04, 0x2f, + 0x01, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x33, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x34, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x35, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x36, + 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x04, 0x33, 0x01, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x04, 0x33, 0x01, 0x00, 0x00, 0x4d, + 0xe2, 0x00, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, + 0x00, 0x4d, 0x38, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x30, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x31, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x32, + 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, + 0xe2, 0x00, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x33, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x34, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x35, + 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x04, 0x36, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x04, 0x33, 0x01, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x04, 0x33, 0x01, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x00, 0x4d, 0x39, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x3a, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x3b, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x3c, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x3d, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x04, 0x3e, 0x01, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x04, 0x3b, 0x01, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x04, 0x3b, + 0x01, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, + 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x3f, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x40, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x41, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0x42, 0x01, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x04, 0x3f, + 0x01, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x04, 0x3f, 0x01, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x4d, + 0x43, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x3b, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x3c, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x3d, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0x3e, 0x01, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x04, 0x3b, + 0x01, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x04, 0x3b, 0x01, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x3f, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x40, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x41, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x42, + 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x04, 0x3f, 0x01, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x04, 0x3f, 0x01, 0x00, 0x00, 0x4d, + 0xe2, 0x00, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, + 0x00, 0x4d, 0x44, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x3b, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x3c, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x3d, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x3e, + 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x04, 0x3b, 0x01, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x04, 0x3b, 0x01, 0x00, 0x00, 0x4d, + 0xe2, 0x00, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x3f, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x40, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x41, + 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x04, 0x42, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x04, 0x3f, 0x01, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x04, 0x3f, 0x01, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x46, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x49, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, + 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x4d, + 0x4f, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x4d, + 0xe2, 0x00, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, + 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x4d, + 0xe2, 0x00, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, + 0x04, 0x53, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x54, 0x01, 0x00, 0x00, 0x4d, 0x55, 0x01, + 0x00, 0x00, 0x24, 0x01, 0x00, 0xc8, 0xc4, 0x28, + 0xac, 0x05, 0x01, 0xdd, 0x03, 0x76, 0x53, 0x35, + 0x08, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x1c, 0x12, 0x1c, + 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_as_size = 3218; + +const uint8_t intl_relative_as[3218] = { + 0x01, 0x4c, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x0c, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x65, 0x0d, 0x8f, 0x09, 0x87, 0x09, 0x20, 0x00, + 0xac, 0x09, 0x9b, 0x09, 0xf0, 0x09, 0x0f, 0x85, + 0x09, 0xb9, 0x09, 0xbe, 0x09, 0x20, 0x00, 0xac, + 0x09, 0x9b, 0x09, 0xf0, 0x09, 0x11, 0xaf, 0x09, + 0xcb, 0x09, 0xf1, 0x09, 0xbe, 0x09, 0x20, 0x00, + 0xac, 0x09, 0x9b, 0x09, 0xf0, 0x09, 0x04, 0x2d, + 0x31, 0x11, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0xac, 0x09, 0x9b, 0x09, 0xf0, 0x09, + 0xa4, 0x09, 0x06, 0x6f, 0x6e, 0x65, 0x0a, 0x6f, + 0x74, 0x68, 0x65, 0x72, 0x0c, 0x66, 0x75, 0x74, + 0x75, 0x72, 0x65, 0x1f, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0xac, 0x09, 0x9b, 0x09, + 0xf0, 0x09, 0xf0, 0x09, 0x20, 0x00, 0xaa, 0x09, + 0xc2, 0x09, 0xf0, 0x09, 0xcd, 0x09, 0xac, 0x09, + 0xc7, 0x09, 0x08, 0x70, 0x61, 0x73, 0x74, 0x08, + 0x79, 0x65, 0x61, 0x72, 0x14, 0x79, 0x65, 0x61, + 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, + 0x79, 0x65, 0x61, 0x72, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x17, 0x8f, 0x09, 0x87, 0x09, + 0x20, 0x00, 0xa4, 0x09, 0xbf, 0x09, 0xa8, 0x09, + 0xbf, 0x09, 0x20, 0x00, 0xae, 0x09, 0xbe, 0x09, + 0xb9, 0x09, 0x19, 0x85, 0x09, 0xb9, 0x09, 0xbe, + 0x09, 0x20, 0x00, 0xa4, 0x09, 0xbf, 0x09, 0xa8, + 0x09, 0xbf, 0x09, 0x20, 0x00, 0xae, 0x09, 0xbe, + 0x09, 0xb9, 0x09, 0x1b, 0xaf, 0x09, 0xcb, 0x09, + 0xf1, 0x09, 0xbe, 0x09, 0x20, 0x00, 0xa4, 0x09, + 0xbf, 0x09, 0xa8, 0x09, 0xbf, 0x09, 0x20, 0x00, + 0xae, 0x09, 0xbe, 0x09, 0xb9, 0x09, 0x1b, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xa4, + 0x09, 0xbf, 0x09, 0xa8, 0x09, 0xbf, 0x09, 0x20, + 0x00, 0xae, 0x09, 0xbe, 0x09, 0xb9, 0x09, 0xa4, + 0x09, 0x27, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0xa4, 0x09, 0xbf, 0x09, 0xa8, 0x09, + 0xbf, 0x09, 0x20, 0x00, 0xae, 0x09, 0xbe, 0x09, + 0xb9, 0x09, 0x20, 0x00, 0xaa, 0x09, 0xc2, 0x09, + 0xf0, 0x09, 0xcd, 0x09, 0xac, 0x09, 0xc7, 0x09, + 0x0e, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, + 0x1a, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1c, 0x71, + 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0d, 0x8f, 0x09, + 0x87, 0x09, 0x20, 0x00, 0xae, 0x09, 0xbe, 0x09, + 0xb9, 0x09, 0x0f, 0x85, 0x09, 0xb9, 0x09, 0xbe, + 0x09, 0x20, 0x00, 0xae, 0x09, 0xbe, 0x09, 0xb9, + 0x09, 0x11, 0xaf, 0x09, 0xcb, 0x09, 0xf1, 0x09, + 0xbe, 0x09, 0x20, 0x00, 0xae, 0x09, 0xbe, 0x09, + 0xb9, 0x09, 0x11, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0xae, 0x09, 0xbe, 0x09, 0xb9, + 0x09, 0xa4, 0x09, 0x1d, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0xae, 0x09, 0xbe, 0x09, + 0xb9, 0x09, 0x20, 0x00, 0xaa, 0x09, 0xc2, 0x09, + 0xf0, 0x09, 0xcd, 0x09, 0xac, 0x09, 0xc7, 0x09, + 0x0a, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x16, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x0d, 0x8f, 0x09, 0x87, 0x09, 0x20, + 0x00, 0xae, 0x09, 0xbe, 0x09, 0x2e, 0x00, 0x11, + 0xaf, 0x09, 0xcb, 0x09, 0xf1, 0x09, 0xbe, 0x09, + 0x20, 0x00, 0xae, 0x09, 0xbe, 0x09, 0x2e, 0x00, + 0x18, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x13, 0x8f, 0x09, + 0x87, 0x09, 0x20, 0x00, 0xb8, 0x09, 0xaa, 0x09, + 0xcd, 0x09, 0xa4, 0x09, 0xbe, 0x09, 0xb9, 0x09, + 0x15, 0x85, 0x09, 0xb9, 0x09, 0xbe, 0x09, 0x20, + 0x00, 0xb8, 0x09, 0xaa, 0x09, 0xcd, 0x09, 0xa4, + 0x09, 0xbe, 0x09, 0xb9, 0x09, 0x17, 0xaf, 0x09, + 0xcb, 0x09, 0xf1, 0x09, 0xbe, 0x09, 0x20, 0x00, + 0xb8, 0x09, 0xaa, 0x09, 0xcd, 0x09, 0xa4, 0x09, + 0xbe, 0x09, 0xb9, 0x09, 0x17, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0xb8, 0x09, 0xaa, + 0x09, 0xcd, 0x09, 0xa4, 0x09, 0xbe, 0x09, 0xb9, + 0x09, 0xa4, 0x09, 0x23, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0xb8, 0x09, 0xaa, 0x09, + 0xcd, 0x09, 0xa4, 0x09, 0xbe, 0x09, 0xb9, 0x09, + 0x20, 0x00, 0xaa, 0x09, 0xc2, 0x09, 0xf0, 0x09, + 0xcd, 0x09, 0xac, 0x09, 0xc7, 0x09, 0x08, 0x77, + 0x65, 0x65, 0x6b, 0x14, 0x77, 0x65, 0x65, 0x6b, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, 0x77, + 0x65, 0x65, 0x6b, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x07, 0x86, 0x09, 0x9c, 0x09, 0xbf, + 0x09, 0x0b, 0x95, 0x09, 0xbe, 0x09, 0x87, 0x09, + 0xb2, 0x09, 0xc8, 0x09, 0x0d, 0xaa, 0x09, 0xf0, + 0x09, 0xb9, 0x09, 0xbf, 0x09, 0xb2, 0x09, 0xc8, + 0x09, 0x09, 0xaa, 0x09, 0xf0, 0x09, 0xb9, 0x09, + 0xbf, 0x09, 0x04, 0x2d, 0x32, 0x09, 0x95, 0x09, + 0xbe, 0x09, 0xb2, 0x09, 0xbf, 0x09, 0x11, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xa6, + 0x09, 0xbf, 0x09, 0xa8, 0x09, 0xa4, 0x09, 0x1d, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0xa6, 0x09, 0xbf, 0x09, 0xa8, 0x09, 0x20, 0x00, + 0xaa, 0x09, 0xc2, 0x09, 0xf0, 0x09, 0xcd, 0x09, + 0xac, 0x09, 0xc7, 0x09, 0x06, 0x64, 0x61, 0x79, + 0x12, 0x64, 0x61, 0x79, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x14, 0x64, 0x61, 0x79, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x17, 0x8f, 0x09, + 0x87, 0x09, 0x9f, 0x09, 0xcb, 0x09, 0x20, 0x00, + 0x98, 0x09, 0xa3, 0x09, 0xcd, 0x09, 0x9f, 0x09, + 0xbe, 0x09, 0xa4, 0x09, 0x15, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x98, 0x09, 0xa3, + 0x09, 0xcd, 0x09, 0x9f, 0x09, 0xbe, 0x09, 0xa4, + 0x09, 0x21, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x98, 0x09, 0xa3, 0x09, 0xcd, 0x09, + 0x9f, 0x09, 0xbe, 0x09, 0x20, 0x00, 0xaa, 0x09, + 0xc2, 0x09, 0xf0, 0x09, 0xcd, 0x09, 0xac, 0x09, + 0xc7, 0x09, 0x08, 0x68, 0x6f, 0x75, 0x72, 0x14, + 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x16, 0x68, 0x6f, 0x75, 0x72, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x17, 0x8f, + 0x09, 0x87, 0x09, 0x9f, 0x09, 0xcb, 0x09, 0x20, + 0x00, 0xae, 0x09, 0xbf, 0x09, 0xa8, 0x09, 0xbf, + 0x09, 0x9f, 0x09, 0xa4, 0x09, 0x15, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xae, 0x09, + 0xbf, 0x09, 0xa8, 0x09, 0xbf, 0x09, 0x9f, 0x09, + 0xa4, 0x09, 0x21, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0xae, 0x09, 0xbf, 0x09, 0xa8, + 0x09, 0xbf, 0x09, 0x9f, 0x09, 0x20, 0x00, 0xaa, + 0x09, 0xc2, 0x09, 0xf0, 0x09, 0xcd, 0x09, 0xac, + 0x09, 0xc7, 0x09, 0x0c, 0x6d, 0x69, 0x6e, 0x75, + 0x74, 0x65, 0x18, 0x6d, 0x69, 0x6e, 0x75, 0x74, + 0x65, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1a, + 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0d, 0x8f, 0x09, + 0xa4, 0x09, 0xbf, 0x09, 0xaf, 0x09, 0xbc, 0x09, + 0xbe, 0x09, 0x19, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x9b, 0x09, 0xc7, 0x09, 0x95, + 0x09, 0xc7, 0x09, 0xa3, 0x09, 0xcd, 0x09, 0xa1, + 0x09, 0xa4, 0x09, 0x25, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x9b, 0x09, 0xc7, 0x09, + 0x95, 0x09, 0xc7, 0x09, 0xa3, 0x09, 0xcd, 0x09, + 0xa1, 0x09, 0x20, 0x00, 0xaa, 0x09, 0xc2, 0x09, + 0xf0, 0x09, 0xcd, 0x09, 0xac, 0x09, 0xc7, 0x09, + 0x0c, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x18, + 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x73, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x08, 0x62, 0x65, 0x6e, 0x67, 0x04, + 0x6e, 0x75, 0x08, 0x64, 0x61, 0x74, 0x61, 0x70, + 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, + 0x6c, 0x2d, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, + 0x76, 0x65, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2d, + 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2f, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, + 0x74, 0x61, 0x2f, 0x61, 0x73, 0x2e, 0x6a, 0x73, + 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, + 0x00, 0x07, 0x00, 0x00, 0xbe, 0x0d, 0x01, 0xa0, + 0x01, 0x00, 0x00, 0x00, 0x06, 0xc8, 0x04, 0xd0, + 0x00, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, + 0x42, 0xd2, 0x00, 0x00, 0x00, 0xaa, 0x6a, 0xa9, + 0x06, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, + 0x42, 0xd2, 0x00, 0x00, 0x00, 0x43, 0xd0, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x77, 0x00, 0x00, 0x00, + 0x4d, 0xd3, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0xd4, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, + 0x4d, 0xd7, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd8, + 0x00, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x00, + 0x04, 0xd8, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xd9, 0x00, + 0x00, 0x00, 0x04, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd4, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, + 0x4d, 0xd7, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd8, + 0x00, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x00, + 0x04, 0xd8, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xd9, 0x00, + 0x00, 0x00, 0x04, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0xd8, 0x00, 0x00, 0x00, 0x4d, 0xd9, 0x00, + 0x00, 0x00, 0x04, 0xd8, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x00, 0x04, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe1, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xe2, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xe3, 0x00, + 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xd9, 0x00, + 0x00, 0x00, 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x00, 0x04, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x00, 0x04, 0xe4, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x00, 0x04, 0xe5, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xe4, 0x00, 0x00, + 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x00, 0x04, 0xe4, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe5, + 0x00, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x00, + 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xe8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe9, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xd7, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xec, 0x00, 0x00, + 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x00, 0x04, 0xec, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xed, + 0x00, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x00, + 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xee, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xec, + 0x00, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x00, + 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, 0xd9, 0x00, + 0x00, 0x00, 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0xef, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf0, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xf1, 0x00, 0x00, 0x00, + 0x4d, 0xd7, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xec, + 0x00, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x00, + 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, 0xd9, 0x00, + 0x00, 0x00, 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0xf2, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf3, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xf5, 0x00, 0x00, 0x00, + 0x4d, 0xd7, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf6, + 0x00, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x00, + 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xd9, 0x00, + 0x00, 0x00, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0xf8, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, 0xd9, 0x00, + 0x00, 0x00, 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x00, 0x04, 0xf7, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xf9, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x00, 0x04, 0xf6, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf7, 0x00, 0x00, + 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x00, 0x04, 0xf7, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xfa, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xfb, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xfc, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xfd, 0x00, 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, + 0x80, 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, 0xff, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, + 0x4d, 0xd7, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x01, + 0x01, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x00, + 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, 0xd9, 0x00, + 0x00, 0x00, 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0x03, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0xd9, 0x00, + 0x00, 0x00, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x00, 0x04, 0x02, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0x04, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x00, 0x04, 0x01, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x02, 0x01, 0x00, + 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x00, 0x04, 0x02, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x05, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x06, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x07, + 0x01, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x00, + 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, 0xd9, 0x00, + 0x00, 0x00, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0x09, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0xd9, 0x00, + 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x00, 0x04, 0x08, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0x0a, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x08, 0x01, 0x00, + 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x00, 0x04, 0x08, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x0b, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x0c, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x0d, + 0x01, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x00, + 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, 0xd9, 0x00, + 0x00, 0x00, 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0x0f, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, 0xd9, 0x00, + 0x00, 0x00, 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x00, 0x04, 0x0e, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0x10, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x00, 0x04, 0x0d, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0e, 0x01, 0x00, + 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x00, 0x04, 0x0e, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x11, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x12, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x13, + 0x01, 0x00, 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x00, + 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, 0xd9, 0x00, + 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0x15, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, 0xd9, 0x00, + 0x00, 0x00, 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0x16, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, + 0xd9, 0x00, 0x00, 0x00, 0x04, 0x13, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x14, 0x01, 0x00, + 0x00, 0x4d, 0xd9, 0x00, 0x00, 0x00, 0x04, 0x14, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x17, 0x01, + 0x00, 0x00, 0x04, 0x18, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x19, 0x01, 0x00, 0x00, 0x4d, + 0x1a, 0x01, 0x00, 0x00, 0x24, 0x01, 0x00, 0xc8, + 0xc4, 0x28, 0xb6, 0x04, 0x01, 0x93, 0x02, 0x76, + 0x53, 0x35, 0x08, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x1c, 0x12, 0x1c, + 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_az_size = 3116; + +const uint8_t intl_relative_az[3116] = { + 0x01, 0x48, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x04, 0x61, 0x7a, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x0a, 0x62, 0x75, 0x20, + 0x69, 0x6c, 0x11, 0x67, 0x00, 0x59, 0x02, 0x6c, + 0x00, 0x59, 0x02, 0x6e, 0x00, 0x20, 0x00, 0x69, + 0x00, 0x6c, 0x00, 0x11, 0x6b, 0x00, 0x65, 0x00, + 0xe7, 0x00, 0x59, 0x02, 0x6e, 0x00, 0x20, 0x00, + 0x69, 0x00, 0x6c, 0x00, 0x04, 0x2d, 0x31, 0x1d, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x69, 0x00, 0x6c, 0x00, 0x20, 0x00, 0x59, 0x02, + 0x72, 0x00, 0x7a, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x64, 0x00, 0x59, 0x02, 0x06, 0x6f, 0x6e, 0x65, + 0x0a, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x0c, 0x66, + 0x75, 0x74, 0x75, 0x72, 0x65, 0x17, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x69, 0x00, + 0x6c, 0x00, 0x20, 0x00, 0xf6, 0x00, 0x6e, 0x00, + 0x63, 0x00, 0x59, 0x02, 0x08, 0x70, 0x61, 0x73, + 0x74, 0x08, 0x79, 0x65, 0x61, 0x72, 0x14, 0x79, + 0x65, 0x61, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x16, 0x79, 0x65, 0x61, 0x72, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0c, 0x62, 0x75, + 0x20, 0x72, 0xfc, 0x62, 0x13, 0x67, 0x00, 0x59, + 0x02, 0x6c, 0x00, 0x59, 0x02, 0x6e, 0x00, 0x20, + 0x00, 0x72, 0x00, 0xfc, 0x00, 0x62, 0x00, 0x13, + 0x6b, 0x00, 0x65, 0x00, 0xe7, 0x00, 0x59, 0x02, + 0x6e, 0x00, 0x20, 0x00, 0x72, 0x00, 0xfc, 0x00, + 0x62, 0x00, 0x1f, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x72, 0x00, 0xfc, 0x00, 0x62, + 0x00, 0x20, 0x00, 0x59, 0x02, 0x72, 0x00, 0x7a, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x64, 0x00, 0x59, + 0x02, 0x19, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x72, 0x00, 0xfc, 0x00, 0x62, 0x00, + 0x20, 0x00, 0xf6, 0x00, 0x6e, 0x00, 0x63, 0x00, + 0x59, 0x02, 0x0e, 0x71, 0x75, 0x61, 0x72, 0x74, + 0x65, 0x72, 0x1a, 0x71, 0x75, 0x61, 0x72, 0x74, + 0x65, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x1c, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0a, + 0x62, 0x75, 0x20, 0x61, 0x79, 0x11, 0x67, 0x00, + 0x59, 0x02, 0x6c, 0x00, 0x59, 0x02, 0x6e, 0x00, + 0x20, 0x00, 0x61, 0x00, 0x79, 0x00, 0x11, 0x6b, + 0x00, 0x65, 0x00, 0xe7, 0x00, 0x59, 0x02, 0x6e, + 0x00, 0x20, 0x00, 0x61, 0x00, 0x79, 0x00, 0x1d, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x61, 0x00, 0x79, 0x00, 0x20, 0x00, 0x59, 0x02, + 0x72, 0x00, 0x7a, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x64, 0x00, 0x59, 0x02, 0x17, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x61, 0x00, 0x79, + 0x00, 0x20, 0x00, 0xf6, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x59, 0x02, 0x0a, 0x6d, 0x6f, 0x6e, 0x74, + 0x68, 0x16, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x18, 0x6d, 0x6f, + 0x6e, 0x74, 0x68, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x11, 0x62, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x68, 0x00, 0x59, 0x02, 0x66, 0x00, 0x74, + 0x00, 0x59, 0x02, 0x17, 0x67, 0x00, 0x59, 0x02, + 0x6c, 0x00, 0x59, 0x02, 0x6e, 0x00, 0x20, 0x00, + 0x68, 0x00, 0x59, 0x02, 0x66, 0x00, 0x74, 0x00, + 0x59, 0x02, 0x17, 0x6b, 0x00, 0x65, 0x00, 0xe7, + 0x00, 0x59, 0x02, 0x6e, 0x00, 0x20, 0x00, 0x68, + 0x00, 0x59, 0x02, 0x66, 0x00, 0x74, 0x00, 0x59, + 0x02, 0x23, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x68, 0x00, 0x59, 0x02, 0x66, 0x00, + 0x74, 0x00, 0x59, 0x02, 0x20, 0x00, 0x59, 0x02, + 0x72, 0x00, 0x7a, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x64, 0x00, 0x59, 0x02, 0x1d, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x68, 0x00, 0x59, + 0x02, 0x66, 0x00, 0x74, 0x00, 0x59, 0x02, 0x20, + 0x00, 0xf6, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x59, + 0x02, 0x08, 0x77, 0x65, 0x65, 0x6b, 0x14, 0x77, + 0x65, 0x65, 0x6b, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x16, 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0c, 0x62, 0x75, + 0x20, 0x67, 0xfc, 0x6e, 0x0a, 0x73, 0x61, 0x62, + 0x61, 0x68, 0x0b, 0x64, 0x00, 0xfc, 0x00, 0x6e, + 0x00, 0x59, 0x02, 0x6e, 0x00, 0x1f, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x67, 0x00, + 0xfc, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x59, 0x02, + 0x72, 0x00, 0x7a, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x64, 0x00, 0x59, 0x02, 0x19, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x67, 0x00, 0xfc, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0xf6, 0x00, 0x6e, + 0x00, 0x63, 0x00, 0x59, 0x02, 0x06, 0x64, 0x61, + 0x79, 0x12, 0x64, 0x61, 0x79, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x14, 0x64, 0x61, 0x79, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0e, 0x62, + 0x75, 0x20, 0x73, 0x61, 0x61, 0x74, 0x21, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x73, + 0x00, 0x61, 0x00, 0x61, 0x00, 0x74, 0x00, 0x20, + 0x00, 0x59, 0x02, 0x72, 0x00, 0x7a, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x64, 0x00, 0x59, 0x02, 0x1b, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x73, 0x00, 0x61, 0x00, 0x61, 0x00, 0x74, 0x00, + 0x20, 0x00, 0xf6, 0x00, 0x6e, 0x00, 0x63, 0x00, + 0x59, 0x02, 0x08, 0x68, 0x6f, 0x75, 0x72, 0x14, + 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x16, 0x68, 0x6f, 0x75, 0x72, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x13, 0x62, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x64, 0x00, 0x59, + 0x02, 0x71, 0x00, 0x69, 0x00, 0x71, 0x00, 0x59, + 0x02, 0x25, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x64, 0x00, 0x59, 0x02, 0x71, 0x00, + 0x69, 0x00, 0x71, 0x00, 0x59, 0x02, 0x20, 0x00, + 0x59, 0x02, 0x72, 0x00, 0x7a, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x64, 0x00, 0x59, 0x02, 0x1f, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x64, + 0x00, 0x59, 0x02, 0x71, 0x00, 0x69, 0x00, 0x71, + 0x00, 0x59, 0x02, 0x20, 0x00, 0xf6, 0x00, 0x6e, + 0x00, 0x63, 0x00, 0x59, 0x02, 0x0c, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x65, 0x18, 0x6d, 0x69, 0x6e, + 0x75, 0x74, 0x65, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x1a, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x08, + 0x69, 0x6e, 0x64, 0x69, 0x25, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x73, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x69, 0x00, 0x79, 0x00, 0x59, + 0x02, 0x20, 0x00, 0x59, 0x02, 0x72, 0x00, 0x7a, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x64, 0x00, 0x59, + 0x02, 0x1f, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x73, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x79, 0x00, 0x59, 0x02, 0x20, 0x00, + 0xf6, 0x00, 0x6e, 0x00, 0x63, 0x00, 0x59, 0x02, + 0x0c, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x18, + 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x73, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, + 0x6e, 0x75, 0x08, 0x64, 0x61, 0x74, 0x61, 0x70, + 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, + 0x6c, 0x2d, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, + 0x76, 0x65, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2d, + 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2f, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, + 0x74, 0x61, 0x2f, 0x61, 0x7a, 0x2e, 0x6a, 0x73, + 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, + 0x00, 0x07, 0x00, 0x00, 0xaa, 0x0d, 0x01, 0xa0, + 0x01, 0x00, 0x00, 0x00, 0x06, 0xc8, 0x04, 0xd0, + 0x00, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, + 0x42, 0xd2, 0x00, 0x00, 0x00, 0xaa, 0x6a, 0x95, + 0x06, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, + 0x42, 0xd2, 0x00, 0x00, 0x00, 0x43, 0xd0, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd3, 0x00, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe2, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xe3, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe6, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe2, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xe3, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe6, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe2, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xe3, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe6, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe9, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xec, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xed, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xee, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xee, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xef, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xed, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xed, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xee, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xf0, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xed, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xf1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf2, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xf4, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf5, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xf7, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xf6, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0xf8, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xf5, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf6, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf6, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xf9, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xfa, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xfb, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xfd, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfe, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xfe, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xff, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xfd, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xfd, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfe, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xfd, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x02, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x04, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x04, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x05, 0x01, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x03, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x03, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x04, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0x06, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x03, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x07, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x08, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x09, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0a, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0a, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x0b, 0x01, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x09, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x09, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0a, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0x0c, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x09, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x0d, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x0e, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x0f, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x10, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x10, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x11, 0x01, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x0f, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0f, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x10, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0x12, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x0f, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x13, 0x01, 0x00, 0x00, 0x04, 0x14, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x15, + 0x01, 0x00, 0x00, 0x4d, 0x16, 0x01, 0x00, 0x00, + 0x24, 0x01, 0x00, 0xc8, 0xc4, 0x28, 0xae, 0x04, + 0x01, 0x91, 0x02, 0x76, 0x53, 0x35, 0x08, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x1c, + 0x12, 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_be_size = 6495; + +const uint8_t intl_relative_be[6495] = { + 0x01, 0x8d, 0x01, 0x1e, 0x5f, 0x5f, 0x61, 0x64, + 0x64, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, + 0x61, 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, + 0x24, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x04, 0x62, 0x65, 0x0c, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x1b, 0x43, 0x04, + 0x20, 0x00, 0x33, 0x04, 0x4d, 0x04, 0x42, 0x04, + 0x4b, 0x04, 0x3c, 0x04, 0x20, 0x00, 0x33, 0x04, + 0x3e, 0x04, 0x34, 0x04, 0x37, 0x04, 0x35, 0x04, + 0x23, 0x43, 0x04, 0x20, 0x00, 0x3d, 0x04, 0x30, + 0x04, 0x41, 0x04, 0x42, 0x04, 0x43, 0x04, 0x3f, + 0x04, 0x3d, 0x04, 0x4b, 0x04, 0x3c, 0x04, 0x20, + 0x00, 0x33, 0x04, 0x3e, 0x04, 0x34, 0x04, 0x37, + 0x04, 0x35, 0x04, 0x1f, 0x43, 0x04, 0x20, 0x00, + 0x3c, 0x04, 0x56, 0x04, 0x3d, 0x04, 0x43, 0x04, + 0x3b, 0x04, 0x4b, 0x04, 0x3c, 0x04, 0x20, 0x00, + 0x33, 0x04, 0x3e, 0x04, 0x34, 0x04, 0x37, 0x04, + 0x35, 0x04, 0x04, 0x2d, 0x31, 0x19, 0x3f, 0x04, + 0x40, 0x04, 0x30, 0x04, 0x37, 0x04, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x33, 0x04, 0x3e, 0x04, 0x34, 0x04, 0x06, 0x6f, + 0x6e, 0x65, 0x1b, 0x3f, 0x04, 0x40, 0x04, 0x30, + 0x04, 0x37, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x33, 0x04, 0x30, + 0x04, 0x34, 0x04, 0x4b, 0x04, 0x06, 0x66, 0x65, + 0x77, 0x1d, 0x3f, 0x04, 0x40, 0x04, 0x30, 0x04, + 0x37, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x33, 0x04, 0x30, 0x04, + 0x34, 0x04, 0x3e, 0x04, 0x5e, 0x04, 0x08, 0x6d, + 0x61, 0x6e, 0x79, 0x1b, 0x3f, 0x04, 0x40, 0x04, + 0x30, 0x04, 0x37, 0x04, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x33, 0x04, + 0x3e, 0x04, 0x34, 0x04, 0x30, 0x04, 0x0a, 0x6f, + 0x74, 0x68, 0x65, 0x72, 0x0c, 0x66, 0x75, 0x74, + 0x75, 0x72, 0x65, 0x19, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x33, 0x04, 0x3e, 0x04, + 0x34, 0x04, 0x20, 0x00, 0x42, 0x04, 0x30, 0x04, + 0x3c, 0x04, 0x43, 0x04, 0x1b, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x33, 0x04, 0x30, + 0x04, 0x34, 0x04, 0x4b, 0x04, 0x20, 0x00, 0x42, + 0x04, 0x30, 0x04, 0x3c, 0x04, 0x43, 0x04, 0x1d, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x33, 0x04, 0x30, 0x04, 0x34, 0x04, 0x3e, 0x04, + 0x5e, 0x04, 0x20, 0x00, 0x42, 0x04, 0x30, 0x04, + 0x3c, 0x04, 0x43, 0x04, 0x1b, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x33, 0x04, 0x3e, + 0x04, 0x34, 0x04, 0x30, 0x04, 0x20, 0x00, 0x42, + 0x04, 0x30, 0x04, 0x3c, 0x04, 0x43, 0x04, 0x08, + 0x70, 0x61, 0x73, 0x74, 0x08, 0x79, 0x65, 0x61, + 0x72, 0x1b, 0x43, 0x04, 0x20, 0x00, 0x3d, 0x04, + 0x30, 0x04, 0x41, 0x04, 0x42, 0x04, 0x2e, 0x00, + 0x20, 0x00, 0x33, 0x04, 0x3e, 0x04, 0x34, 0x04, + 0x37, 0x04, 0x35, 0x04, 0x19, 0x43, 0x04, 0x20, + 0x00, 0x3c, 0x04, 0x56, 0x04, 0x3d, 0x04, 0x2e, + 0x00, 0x20, 0x00, 0x33, 0x04, 0x3e, 0x04, 0x34, + 0x04, 0x37, 0x04, 0x35, 0x04, 0x17, 0x3f, 0x04, + 0x40, 0x04, 0x30, 0x04, 0x37, 0x04, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x33, 0x04, 0x2e, 0x00, 0x17, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x33, 0x04, 0x2e, + 0x00, 0x20, 0x00, 0x42, 0x04, 0x30, 0x04, 0x3c, + 0x04, 0x43, 0x04, 0x14, 0x79, 0x65, 0x61, 0x72, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, 0x79, + 0x65, 0x61, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x21, 0x43, 0x04, 0x20, 0x00, 0x33, + 0x04, 0x4d, 0x04, 0x42, 0x04, 0x4b, 0x04, 0x3c, + 0x04, 0x20, 0x00, 0x3a, 0x04, 0x32, 0x04, 0x30, + 0x04, 0x40, 0x04, 0x42, 0x04, 0x30, 0x04, 0x3b, + 0x04, 0x35, 0x04, 0x29, 0x43, 0x04, 0x20, 0x00, + 0x3d, 0x04, 0x30, 0x04, 0x41, 0x04, 0x42, 0x04, + 0x43, 0x04, 0x3f, 0x04, 0x3d, 0x04, 0x4b, 0x04, + 0x3c, 0x04, 0x20, 0x00, 0x3a, 0x04, 0x32, 0x04, + 0x30, 0x04, 0x40, 0x04, 0x42, 0x04, 0x30, 0x04, + 0x3b, 0x04, 0x35, 0x04, 0x25, 0x43, 0x04, 0x20, + 0x00, 0x3c, 0x04, 0x56, 0x04, 0x3d, 0x04, 0x43, + 0x04, 0x3b, 0x04, 0x4b, 0x04, 0x3c, 0x04, 0x20, + 0x00, 0x3a, 0x04, 0x32, 0x04, 0x30, 0x04, 0x40, + 0x04, 0x42, 0x04, 0x30, 0x04, 0x3b, 0x04, 0x35, + 0x04, 0x21, 0x3f, 0x04, 0x40, 0x04, 0x30, 0x04, + 0x37, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x3a, 0x04, 0x32, 0x04, + 0x30, 0x04, 0x40, 0x04, 0x42, 0x04, 0x30, 0x04, + 0x3b, 0x04, 0x23, 0x3f, 0x04, 0x40, 0x04, 0x30, + 0x04, 0x37, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3a, 0x04, 0x32, + 0x04, 0x30, 0x04, 0x40, 0x04, 0x42, 0x04, 0x30, + 0x04, 0x3b, 0x04, 0x4b, 0x04, 0x25, 0x3f, 0x04, + 0x40, 0x04, 0x30, 0x04, 0x37, 0x04, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x3a, 0x04, 0x32, 0x04, 0x30, 0x04, 0x40, 0x04, + 0x42, 0x04, 0x30, 0x04, 0x3b, 0x04, 0x30, 0x04, + 0x5e, 0x04, 0x23, 0x3f, 0x04, 0x40, 0x04, 0x30, + 0x04, 0x37, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3a, 0x04, 0x32, + 0x04, 0x30, 0x04, 0x40, 0x04, 0x42, 0x04, 0x30, + 0x04, 0x3b, 0x04, 0x30, 0x04, 0x21, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3a, 0x04, + 0x32, 0x04, 0x30, 0x04, 0x40, 0x04, 0x42, 0x04, + 0x30, 0x04, 0x3b, 0x04, 0x20, 0x00, 0x42, 0x04, + 0x30, 0x04, 0x3c, 0x04, 0x43, 0x04, 0x23, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3a, + 0x04, 0x32, 0x04, 0x30, 0x04, 0x40, 0x04, 0x42, + 0x04, 0x30, 0x04, 0x3b, 0x04, 0x4b, 0x04, 0x20, + 0x00, 0x42, 0x04, 0x30, 0x04, 0x3c, 0x04, 0x43, + 0x04, 0x25, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x3a, 0x04, 0x32, 0x04, 0x30, 0x04, + 0x40, 0x04, 0x42, 0x04, 0x30, 0x04, 0x3b, 0x04, + 0x30, 0x04, 0x5e, 0x04, 0x20, 0x00, 0x42, 0x04, + 0x30, 0x04, 0x3c, 0x04, 0x43, 0x04, 0x23, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3a, + 0x04, 0x32, 0x04, 0x30, 0x04, 0x40, 0x04, 0x42, + 0x04, 0x30, 0x04, 0x3b, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x42, 0x04, 0x30, 0x04, 0x3c, 0x04, 0x43, + 0x04, 0x0e, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, + 0x72, 0x19, 0x3f, 0x04, 0x40, 0x04, 0x30, 0x04, + 0x37, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x3a, 0x04, 0x32, 0x04, + 0x2e, 0x00, 0x19, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x3a, 0x04, 0x32, 0x04, 0x2e, + 0x00, 0x20, 0x00, 0x42, 0x04, 0x30, 0x04, 0x3c, + 0x04, 0x43, 0x04, 0x1a, 0x71, 0x75, 0x61, 0x72, + 0x74, 0x65, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x1c, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, + 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x1d, 0x43, 0x04, 0x20, 0x00, 0x33, 0x04, 0x4d, + 0x04, 0x42, 0x04, 0x4b, 0x04, 0x3c, 0x04, 0x20, + 0x00, 0x3c, 0x04, 0x35, 0x04, 0x41, 0x04, 0x4f, + 0x04, 0x46, 0x04, 0x4b, 0x04, 0x25, 0x43, 0x04, + 0x20, 0x00, 0x3d, 0x04, 0x30, 0x04, 0x41, 0x04, + 0x42, 0x04, 0x43, 0x04, 0x3f, 0x04, 0x3d, 0x04, + 0x4b, 0x04, 0x3c, 0x04, 0x20, 0x00, 0x3c, 0x04, + 0x35, 0x04, 0x41, 0x04, 0x4f, 0x04, 0x46, 0x04, + 0x4b, 0x04, 0x21, 0x43, 0x04, 0x20, 0x00, 0x3c, + 0x04, 0x56, 0x04, 0x3d, 0x04, 0x43, 0x04, 0x3b, + 0x04, 0x4b, 0x04, 0x3c, 0x04, 0x20, 0x00, 0x3c, + 0x04, 0x35, 0x04, 0x41, 0x04, 0x4f, 0x04, 0x46, + 0x04, 0x4b, 0x04, 0x1d, 0x3f, 0x04, 0x40, 0x04, + 0x30, 0x04, 0x37, 0x04, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3c, 0x04, + 0x35, 0x04, 0x41, 0x04, 0x4f, 0x04, 0x46, 0x04, + 0x1f, 0x3f, 0x04, 0x40, 0x04, 0x30, 0x04, 0x37, + 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x3c, 0x04, 0x35, 0x04, 0x41, + 0x04, 0x4f, 0x04, 0x46, 0x04, 0x4b, 0x04, 0x21, + 0x3f, 0x04, 0x40, 0x04, 0x30, 0x04, 0x37, 0x04, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x3c, 0x04, 0x35, 0x04, 0x41, 0x04, + 0x4f, 0x04, 0x46, 0x04, 0x30, 0x04, 0x5e, 0x04, + 0x1f, 0x3f, 0x04, 0x40, 0x04, 0x30, 0x04, 0x37, + 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x3c, 0x04, 0x35, 0x04, 0x41, + 0x04, 0x4f, 0x04, 0x46, 0x04, 0x30, 0x04, 0x1d, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x3c, 0x04, 0x35, 0x04, 0x41, 0x04, 0x4f, 0x04, + 0x46, 0x04, 0x20, 0x00, 0x42, 0x04, 0x30, 0x04, + 0x3c, 0x04, 0x43, 0x04, 0x1f, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3c, 0x04, 0x35, + 0x04, 0x41, 0x04, 0x4f, 0x04, 0x46, 0x04, 0x4b, + 0x04, 0x20, 0x00, 0x42, 0x04, 0x30, 0x04, 0x3c, + 0x04, 0x43, 0x04, 0x21, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x3c, 0x04, 0x35, 0x04, + 0x41, 0x04, 0x4f, 0x04, 0x46, 0x04, 0x30, 0x04, + 0x5e, 0x04, 0x20, 0x00, 0x42, 0x04, 0x30, 0x04, + 0x3c, 0x04, 0x43, 0x04, 0x1f, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3c, 0x04, 0x35, + 0x04, 0x41, 0x04, 0x4f, 0x04, 0x46, 0x04, 0x30, + 0x04, 0x20, 0x00, 0x42, 0x04, 0x30, 0x04, 0x3c, + 0x04, 0x43, 0x04, 0x0a, 0x6d, 0x6f, 0x6e, 0x74, + 0x68, 0x19, 0x43, 0x04, 0x20, 0x00, 0x33, 0x04, + 0x4d, 0x04, 0x42, 0x04, 0x4b, 0x04, 0x3c, 0x04, + 0x20, 0x00, 0x3c, 0x04, 0x35, 0x04, 0x41, 0x04, + 0x2e, 0x00, 0x19, 0x43, 0x04, 0x20, 0x00, 0x3d, + 0x04, 0x30, 0x04, 0x41, 0x04, 0x42, 0x04, 0x2e, + 0x00, 0x20, 0x00, 0x3c, 0x04, 0x35, 0x04, 0x41, + 0x04, 0x2e, 0x00, 0x17, 0x43, 0x04, 0x20, 0x00, + 0x3c, 0x04, 0x56, 0x04, 0x3d, 0x04, 0x2e, 0x00, + 0x20, 0x00, 0x3c, 0x04, 0x35, 0x04, 0x41, 0x04, + 0x2e, 0x00, 0x1b, 0x3f, 0x04, 0x40, 0x04, 0x30, + 0x04, 0x37, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3c, 0x04, 0x35, + 0x04, 0x41, 0x04, 0x2e, 0x00, 0x1b, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3c, 0x04, + 0x35, 0x04, 0x41, 0x04, 0x2e, 0x00, 0x20, 0x00, + 0x42, 0x04, 0x30, 0x04, 0x3c, 0x04, 0x43, 0x04, + 0x16, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x18, 0x6d, 0x6f, 0x6e, + 0x74, 0x68, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x1d, 0x3d, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x33, 0x04, 0x4d, 0x04, 0x42, 0x04, 0x4b, 0x04, + 0x3c, 0x04, 0x20, 0x00, 0x42, 0x04, 0x4b, 0x04, + 0x34, 0x04, 0x3d, 0x04, 0x56, 0x04, 0x25, 0x3d, + 0x04, 0x30, 0x04, 0x20, 0x00, 0x3d, 0x04, 0x30, + 0x04, 0x41, 0x04, 0x42, 0x04, 0x43, 0x04, 0x3f, + 0x04, 0x3d, 0x04, 0x4b, 0x04, 0x3c, 0x04, 0x20, + 0x00, 0x42, 0x04, 0x4b, 0x04, 0x34, 0x04, 0x3d, + 0x04, 0x56, 0x04, 0x21, 0x3d, 0x04, 0x30, 0x04, + 0x20, 0x00, 0x3c, 0x04, 0x56, 0x04, 0x3d, 0x04, + 0x43, 0x04, 0x3b, 0x04, 0x4b, 0x04, 0x3c, 0x04, + 0x20, 0x00, 0x42, 0x04, 0x4b, 0x04, 0x34, 0x04, + 0x3d, 0x04, 0x56, 0x04, 0x21, 0x3f, 0x04, 0x40, + 0x04, 0x30, 0x04, 0x37, 0x04, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x42, + 0x04, 0x4b, 0x04, 0x34, 0x04, 0x37, 0x04, 0x35, + 0x04, 0x3d, 0x04, 0x4c, 0x04, 0x1d, 0x3f, 0x04, + 0x40, 0x04, 0x30, 0x04, 0x37, 0x04, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x42, 0x04, 0x4b, 0x04, 0x34, 0x04, 0x3d, 0x04, + 0x56, 0x04, 0x1f, 0x3f, 0x04, 0x40, 0x04, 0x30, + 0x04, 0x37, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x42, 0x04, 0x4b, + 0x04, 0x34, 0x04, 0x3d, 0x04, 0x4f, 0x04, 0x5e, + 0x04, 0x1d, 0x3f, 0x04, 0x40, 0x04, 0x30, 0x04, + 0x37, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x42, 0x04, 0x4b, 0x04, + 0x34, 0x04, 0x3d, 0x04, 0x4f, 0x04, 0x21, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x42, + 0x04, 0x4b, 0x04, 0x34, 0x04, 0x37, 0x04, 0x35, + 0x04, 0x3d, 0x04, 0x4c, 0x04, 0x20, 0x00, 0x42, + 0x04, 0x30, 0x04, 0x3c, 0x04, 0x43, 0x04, 0x1d, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x42, 0x04, 0x4b, 0x04, 0x34, 0x04, 0x3d, 0x04, + 0x56, 0x04, 0x20, 0x00, 0x42, 0x04, 0x30, 0x04, + 0x3c, 0x04, 0x43, 0x04, 0x1f, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x42, 0x04, 0x4b, + 0x04, 0x34, 0x04, 0x3d, 0x04, 0x4f, 0x04, 0x5e, + 0x04, 0x20, 0x00, 0x42, 0x04, 0x30, 0x04, 0x3c, + 0x04, 0x43, 0x04, 0x1d, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x42, 0x04, 0x4b, 0x04, + 0x34, 0x04, 0x3d, 0x04, 0x4f, 0x04, 0x20, 0x00, + 0x42, 0x04, 0x30, 0x04, 0x3c, 0x04, 0x43, 0x04, + 0x08, 0x77, 0x65, 0x65, 0x6b, 0x1b, 0x3d, 0x04, + 0x30, 0x04, 0x20, 0x00, 0x33, 0x04, 0x4d, 0x04, + 0x42, 0x04, 0x4b, 0x04, 0x3c, 0x04, 0x20, 0x00, + 0x42, 0x04, 0x4b, 0x04, 0x34, 0x04, 0x2e, 0x00, + 0x1b, 0x3d, 0x04, 0x30, 0x04, 0x20, 0x00, 0x3d, + 0x04, 0x30, 0x04, 0x41, 0x04, 0x42, 0x04, 0x2e, + 0x00, 0x20, 0x00, 0x42, 0x04, 0x4b, 0x04, 0x34, + 0x04, 0x2e, 0x00, 0x19, 0x3d, 0x04, 0x30, 0x04, + 0x20, 0x00, 0x3c, 0x04, 0x56, 0x04, 0x3d, 0x04, + 0x2e, 0x00, 0x20, 0x00, 0x42, 0x04, 0x4b, 0x04, + 0x34, 0x04, 0x2e, 0x00, 0x19, 0x3f, 0x04, 0x40, + 0x04, 0x30, 0x04, 0x37, 0x04, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x42, + 0x04, 0x4b, 0x04, 0x34, 0x04, 0x19, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x42, 0x04, + 0x4b, 0x04, 0x34, 0x04, 0x20, 0x00, 0x42, 0x04, + 0x30, 0x04, 0x3c, 0x04, 0x43, 0x04, 0x14, 0x77, + 0x65, 0x65, 0x6b, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x16, 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0b, 0x41, 0x04, + 0x51, 0x04, 0x3d, 0x04, 0x3d, 0x04, 0x4f, 0x04, + 0x0d, 0x37, 0x04, 0x30, 0x04, 0x5e, 0x04, 0x42, + 0x04, 0x40, 0x04, 0x30, 0x04, 0x17, 0x3f, 0x04, + 0x30, 0x04, 0x41, 0x04, 0x3b, 0x04, 0x4f, 0x04, + 0x37, 0x04, 0x30, 0x04, 0x5e, 0x04, 0x42, 0x04, + 0x40, 0x04, 0x30, 0x04, 0x13, 0x3f, 0x04, 0x30, + 0x04, 0x37, 0x04, 0x30, 0x04, 0x5e, 0x04, 0x47, + 0x04, 0x3e, 0x04, 0x40, 0x04, 0x30, 0x04, 0x04, + 0x2d, 0x32, 0x0b, 0x43, 0x04, 0x47, 0x04, 0x3e, + 0x04, 0x40, 0x04, 0x30, 0x04, 0x1d, 0x3f, 0x04, + 0x40, 0x04, 0x30, 0x04, 0x37, 0x04, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x34, 0x04, 0x37, 0x04, 0x35, 0x04, 0x3d, 0x04, + 0x4c, 0x04, 0x19, 0x3f, 0x04, 0x40, 0x04, 0x30, + 0x04, 0x37, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x34, 0x04, 0x3d, + 0x04, 0x56, 0x04, 0x1b, 0x3f, 0x04, 0x40, 0x04, + 0x30, 0x04, 0x37, 0x04, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x34, 0x04, + 0x37, 0x04, 0x51, 0x04, 0x3d, 0x04, 0x19, 0x3f, + 0x04, 0x40, 0x04, 0x30, 0x04, 0x37, 0x04, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x34, 0x04, 0x3d, 0x04, 0x4f, 0x04, 0x1d, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x34, 0x04, 0x37, 0x04, 0x35, 0x04, 0x3d, 0x04, + 0x4c, 0x04, 0x20, 0x00, 0x42, 0x04, 0x30, 0x04, + 0x3c, 0x04, 0x43, 0x04, 0x19, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x34, 0x04, 0x3d, + 0x04, 0x56, 0x04, 0x20, 0x00, 0x42, 0x04, 0x30, + 0x04, 0x3c, 0x04, 0x43, 0x04, 0x1b, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x34, 0x04, + 0x37, 0x04, 0x51, 0x04, 0x3d, 0x04, 0x20, 0x00, + 0x42, 0x04, 0x30, 0x04, 0x3c, 0x04, 0x43, 0x04, + 0x19, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x34, 0x04, 0x3d, 0x04, 0x4f, 0x04, 0x20, + 0x00, 0x42, 0x04, 0x30, 0x04, 0x3c, 0x04, 0x43, + 0x04, 0x06, 0x64, 0x61, 0x79, 0x12, 0x64, 0x61, + 0x79, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x14, + 0x64, 0x61, 0x79, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x1d, 0x43, 0x04, 0x20, 0x00, 0x33, + 0x04, 0x4d, 0x04, 0x42, 0x04, 0x43, 0x04, 0x20, + 0x00, 0x33, 0x04, 0x30, 0x04, 0x34, 0x04, 0x37, + 0x04, 0x56, 0x04, 0x3d, 0x04, 0x43, 0x04, 0x21, + 0x3f, 0x04, 0x40, 0x04, 0x30, 0x04, 0x37, 0x04, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x33, 0x04, 0x30, 0x04, 0x34, 0x04, + 0x37, 0x04, 0x56, 0x04, 0x3d, 0x04, 0x43, 0x04, + 0x21, 0x3f, 0x04, 0x40, 0x04, 0x30, 0x04, 0x37, + 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x33, 0x04, 0x30, 0x04, 0x34, + 0x04, 0x37, 0x04, 0x56, 0x04, 0x3d, 0x04, 0x4b, + 0x04, 0x1f, 0x3f, 0x04, 0x40, 0x04, 0x30, 0x04, + 0x37, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x33, 0x04, 0x30, 0x04, + 0x34, 0x04, 0x37, 0x04, 0x56, 0x04, 0x3d, 0x04, + 0x21, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x33, 0x04, 0x30, 0x04, 0x34, 0x04, 0x37, + 0x04, 0x56, 0x04, 0x3d, 0x04, 0x43, 0x04, 0x20, + 0x00, 0x42, 0x04, 0x30, 0x04, 0x3c, 0x04, 0x43, + 0x04, 0x21, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x33, 0x04, 0x30, 0x04, 0x34, 0x04, + 0x37, 0x04, 0x56, 0x04, 0x3d, 0x04, 0x4b, 0x04, + 0x20, 0x00, 0x42, 0x04, 0x30, 0x04, 0x3c, 0x04, + 0x43, 0x04, 0x1f, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x33, 0x04, 0x30, 0x04, 0x34, + 0x04, 0x37, 0x04, 0x56, 0x04, 0x3d, 0x04, 0x20, + 0x00, 0x42, 0x04, 0x30, 0x04, 0x3c, 0x04, 0x43, + 0x04, 0x08, 0x68, 0x6f, 0x75, 0x72, 0x1b, 0x3f, + 0x04, 0x40, 0x04, 0x30, 0x04, 0x37, 0x04, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x33, 0x04, 0x30, 0x04, 0x34, 0x04, 0x37, + 0x04, 0x1b, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x33, 0x04, 0x30, 0x04, 0x34, 0x04, + 0x37, 0x04, 0x20, 0x00, 0x42, 0x04, 0x30, 0x04, + 0x3c, 0x04, 0x43, 0x04, 0x14, 0x68, 0x6f, 0x75, + 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, + 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x1d, 0x43, 0x04, 0x20, 0x00, + 0x33, 0x04, 0x4d, 0x04, 0x42, 0x04, 0x43, 0x04, + 0x20, 0x00, 0x45, 0x04, 0x32, 0x04, 0x56, 0x04, + 0x3b, 0x04, 0x56, 0x04, 0x3d, 0x04, 0x43, 0x04, + 0x21, 0x3f, 0x04, 0x40, 0x04, 0x30, 0x04, 0x37, + 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x45, 0x04, 0x32, 0x04, 0x56, + 0x04, 0x3b, 0x04, 0x56, 0x04, 0x3d, 0x04, 0x43, + 0x04, 0x21, 0x3f, 0x04, 0x40, 0x04, 0x30, 0x04, + 0x37, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x45, 0x04, 0x32, 0x04, + 0x56, 0x04, 0x3b, 0x04, 0x56, 0x04, 0x3d, 0x04, + 0x4b, 0x04, 0x1f, 0x3f, 0x04, 0x40, 0x04, 0x30, + 0x04, 0x37, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x45, 0x04, 0x32, + 0x04, 0x56, 0x04, 0x3b, 0x04, 0x56, 0x04, 0x3d, + 0x04, 0x21, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x45, 0x04, 0x32, 0x04, 0x56, 0x04, + 0x3b, 0x04, 0x56, 0x04, 0x3d, 0x04, 0x43, 0x04, + 0x20, 0x00, 0x42, 0x04, 0x30, 0x04, 0x3c, 0x04, + 0x43, 0x04, 0x21, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x45, 0x04, 0x32, 0x04, 0x56, + 0x04, 0x3b, 0x04, 0x56, 0x04, 0x3d, 0x04, 0x4b, + 0x04, 0x20, 0x00, 0x42, 0x04, 0x30, 0x04, 0x3c, + 0x04, 0x43, 0x04, 0x1f, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x45, 0x04, 0x32, 0x04, + 0x56, 0x04, 0x3b, 0x04, 0x56, 0x04, 0x3d, 0x04, + 0x20, 0x00, 0x42, 0x04, 0x30, 0x04, 0x3c, 0x04, + 0x43, 0x04, 0x0c, 0x6d, 0x69, 0x6e, 0x75, 0x74, + 0x65, 0x17, 0x3f, 0x04, 0x40, 0x04, 0x30, 0x04, + 0x37, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x45, 0x04, 0x32, 0x04, + 0x17, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x45, 0x04, 0x32, 0x04, 0x20, 0x00, 0x42, + 0x04, 0x30, 0x04, 0x3c, 0x04, 0x43, 0x04, 0x18, + 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x6d, 0x69, 0x6e, + 0x75, 0x74, 0x65, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x0b, 0x46, 0x04, 0x4f, 0x04, 0x3f, + 0x04, 0x35, 0x04, 0x40, 0x04, 0x21, 0x3f, 0x04, + 0x40, 0x04, 0x30, 0x04, 0x37, 0x04, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x41, 0x04, 0x35, 0x04, 0x3a, 0x04, 0x43, 0x04, + 0x3d, 0x04, 0x34, 0x04, 0x43, 0x04, 0x21, 0x3f, + 0x04, 0x40, 0x04, 0x30, 0x04, 0x37, 0x04, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x41, 0x04, 0x35, 0x04, 0x3a, 0x04, 0x43, + 0x04, 0x3d, 0x04, 0x34, 0x04, 0x4b, 0x04, 0x1f, + 0x3f, 0x04, 0x40, 0x04, 0x30, 0x04, 0x37, 0x04, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x41, 0x04, 0x35, 0x04, 0x3a, 0x04, + 0x43, 0x04, 0x3d, 0x04, 0x34, 0x04, 0x21, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x41, + 0x04, 0x35, 0x04, 0x3a, 0x04, 0x43, 0x04, 0x3d, + 0x04, 0x34, 0x04, 0x43, 0x04, 0x20, 0x00, 0x42, + 0x04, 0x30, 0x04, 0x3c, 0x04, 0x43, 0x04, 0x21, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x41, 0x04, 0x35, 0x04, 0x3a, 0x04, 0x43, 0x04, + 0x3d, 0x04, 0x34, 0x04, 0x4b, 0x04, 0x20, 0x00, + 0x42, 0x04, 0x30, 0x04, 0x3c, 0x04, 0x43, 0x04, + 0x1f, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x41, 0x04, 0x35, 0x04, 0x3a, 0x04, 0x43, + 0x04, 0x3d, 0x04, 0x34, 0x04, 0x20, 0x00, 0x42, + 0x04, 0x30, 0x04, 0x3c, 0x04, 0x43, 0x04, 0x0c, + 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x15, 0x3f, + 0x04, 0x40, 0x04, 0x30, 0x04, 0x37, 0x04, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x41, 0x04, 0x15, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x41, 0x04, 0x20, 0x00, + 0x42, 0x04, 0x30, 0x04, 0x3c, 0x04, 0x43, 0x04, + 0x18, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x73, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x08, 0x6c, 0x61, 0x74, 0x6e, + 0x04, 0x6e, 0x75, 0x08, 0x64, 0x61, 0x74, 0x61, + 0x70, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, + 0x74, 0x6c, 0x2d, 0x72, 0x65, 0x6c, 0x61, 0x74, + 0x69, 0x76, 0x65, 0x2d, 0x74, 0x69, 0x6d, 0x65, + 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2f, + 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, + 0x61, 0x74, 0x61, 0x2f, 0x62, 0x65, 0x2e, 0x6a, + 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, + 0x01, 0x00, 0x07, 0x00, 0x00, 0xf6, 0x15, 0x01, + 0xa0, 0x01, 0x00, 0x00, 0x00, 0x06, 0xc8, 0x04, + 0xd0, 0x00, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, + 0x00, 0x42, 0xd2, 0x00, 0x00, 0x00, 0xaa, 0x6a, + 0xe1, 0x0a, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, + 0x00, 0x42, 0xd2, 0x00, 0x00, 0x00, 0x43, 0xd0, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd3, 0x00, 0x00, + 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0xdf, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe2, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xe3, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0xe5, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xe9, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xea, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xec, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xe9, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xea, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xed, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xf0, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf1, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0xf3, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0xf4, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf5, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xf6, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0xf8, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xf9, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xfa, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xfa, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xfb, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0xfb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0xfb, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xfc, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0xfa, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xfa, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xfb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xfb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0xfb, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xfd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfe, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xff, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x01, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x02, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x03, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x07, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x08, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0x09, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x0a, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x0b, + 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x0d, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0d, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x0d, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x0e, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x0e, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x0e, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0x0f, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x0a, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x0b, + 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x0d, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0d, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x0d, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x0e, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x0e, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x0e, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0x10, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x11, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x12, + 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x14, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x18, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x19, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x1a, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x1b, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0x1c, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x1d, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x1e, + 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0x1f, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x20, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x20, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x20, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0x20, 0x01, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x21, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x21, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x21, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0x22, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x1d, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x1e, + 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0x1f, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x20, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x20, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x20, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0x20, 0x01, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x21, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x21, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x21, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0x23, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x24, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x25, + 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, 0x02, 0x00, + 0x00, 0x80, 0x04, 0x27, 0x01, 0x00, 0x00, 0x4d, + 0x28, 0x01, 0x00, 0x00, 0x04, 0x29, 0x01, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x2a, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x2b, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x2c, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x2d, 0x01, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x2e, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x2f, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x30, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0x31, 0x01, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0x32, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x2a, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x2b, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x2c, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x2d, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x2e, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x30, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x31, 0x01, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0x33, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x2a, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x2b, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x2c, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0x2d, 0x01, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x2e, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x2f, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x30, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x31, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0x34, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x35, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, + 0x36, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x37, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x38, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x37, 0x01, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x39, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x3a, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x3b, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0x3a, 0x01, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0x3c, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x3d, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x3d, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x3d, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x3d, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x3e, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x3e, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x3e, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x3e, 0x01, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0x3f, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x3d, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x3d, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x3d, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0x3d, 0x01, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x3e, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x3e, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x3e, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x3e, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0x40, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x41, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, + 0x42, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x43, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x44, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x43, 0x01, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x45, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0x48, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x49, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x4a, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0x4b, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x4a, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0x4c, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0x54, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x55, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0x57, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x56, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0x58, + 0x01, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x5a, 0x01, 0x00, 0x00, + 0x4d, 0x5b, 0x01, 0x00, 0x00, 0x24, 0x01, 0x00, + 0xc8, 0xc4, 0x28, 0xb8, 0x05, 0x01, 0xff, 0x02, + 0x76, 0x53, 0x35, 0x08, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x1c, 0x1c, 0x1c, 0x12, 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_bg_size = 5291; + +const uint8_t intl_relative_bg[5291] = { + 0x01, 0x8a, 0x01, 0x1e, 0x5f, 0x5f, 0x61, 0x64, + 0x64, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, + 0x61, 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, + 0x24, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x04, 0x62, 0x67, 0x0c, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x17, 0x42, 0x04, + 0x30, 0x04, 0x37, 0x04, 0x38, 0x04, 0x20, 0x00, + 0x33, 0x04, 0x3e, 0x04, 0x34, 0x04, 0x38, 0x04, + 0x3d, 0x04, 0x30, 0x04, 0x23, 0x41, 0x04, 0x3b, + 0x04, 0x35, 0x04, 0x34, 0x04, 0x32, 0x04, 0x30, + 0x04, 0x49, 0x04, 0x30, 0x04, 0x42, 0x04, 0x30, + 0x04, 0x20, 0x00, 0x33, 0x04, 0x3e, 0x04, 0x34, + 0x04, 0x38, 0x04, 0x3d, 0x04, 0x30, 0x04, 0x1f, + 0x3c, 0x04, 0x38, 0x04, 0x3d, 0x04, 0x30, 0x04, + 0x3b, 0x04, 0x30, 0x04, 0x42, 0x04, 0x30, 0x04, + 0x20, 0x00, 0x33, 0x04, 0x3e, 0x04, 0x34, 0x04, + 0x38, 0x04, 0x3d, 0x04, 0x30, 0x04, 0x04, 0x2d, + 0x31, 0x1f, 0x41, 0x04, 0x3b, 0x04, 0x35, 0x04, + 0x34, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x33, 0x04, 0x3e, 0x04, + 0x34, 0x04, 0x38, 0x04, 0x3d, 0x04, 0x30, 0x04, + 0x06, 0x6f, 0x6e, 0x65, 0x1f, 0x41, 0x04, 0x3b, + 0x04, 0x35, 0x04, 0x34, 0x04, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x33, + 0x04, 0x3e, 0x04, 0x34, 0x04, 0x38, 0x04, 0x3d, + 0x04, 0x38, 0x04, 0x0a, 0x6f, 0x74, 0x68, 0x65, + 0x72, 0x0c, 0x66, 0x75, 0x74, 0x75, 0x72, 0x65, + 0x21, 0x3f, 0x04, 0x40, 0x04, 0x35, 0x04, 0x34, + 0x04, 0x38, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x33, 0x04, 0x3e, + 0x04, 0x34, 0x04, 0x38, 0x04, 0x3d, 0x04, 0x30, + 0x04, 0x21, 0x3f, 0x04, 0x40, 0x04, 0x35, 0x04, + 0x34, 0x04, 0x38, 0x04, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x33, 0x04, + 0x3e, 0x04, 0x34, 0x04, 0x38, 0x04, 0x3d, 0x04, + 0x38, 0x04, 0x08, 0x70, 0x61, 0x73, 0x74, 0x08, + 0x79, 0x65, 0x61, 0x72, 0x0b, 0x42, 0x04, 0x2e, + 0x00, 0x20, 0x00, 0x33, 0x04, 0x2e, 0x00, 0x13, + 0x41, 0x04, 0x3b, 0x04, 0x35, 0x04, 0x34, 0x04, + 0x32, 0x04, 0x2e, 0x00, 0x20, 0x00, 0x33, 0x04, + 0x2e, 0x00, 0x0f, 0x3c, 0x04, 0x38, 0x04, 0x3d, + 0x04, 0x2e, 0x00, 0x20, 0x00, 0x33, 0x04, 0x2e, + 0x00, 0x17, 0x41, 0x04, 0x3b, 0x04, 0x35, 0x04, + 0x34, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x33, 0x04, 0x2e, 0x00, + 0x19, 0x3f, 0x04, 0x40, 0x04, 0x35, 0x04, 0x34, + 0x04, 0x38, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x33, 0x04, 0x2e, + 0x00, 0x14, 0x79, 0x65, 0x61, 0x72, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x0d, 0x41, 0x04, 0x3b, + 0x04, 0x2e, 0x00, 0x20, 0x00, 0x33, 0x04, 0x2e, + 0x00, 0x15, 0x41, 0x04, 0x3b, 0x04, 0x2e, 0x00, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x33, 0x04, 0x2e, 0x00, 0x15, 0x3f, + 0x04, 0x40, 0x04, 0x2e, 0x00, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x33, + 0x04, 0x2e, 0x00, 0x16, 0x79, 0x65, 0x61, 0x72, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x1f, + 0x42, 0x04, 0x3e, 0x04, 0x32, 0x04, 0x30, 0x04, + 0x20, 0x00, 0x42, 0x04, 0x40, 0x04, 0x38, 0x04, + 0x3c, 0x04, 0x35, 0x04, 0x41, 0x04, 0x35, 0x04, + 0x47, 0x04, 0x38, 0x04, 0x35, 0x04, 0x27, 0x41, + 0x04, 0x3b, 0x04, 0x35, 0x04, 0x34, 0x04, 0x32, + 0x04, 0x30, 0x04, 0x49, 0x04, 0x3e, 0x04, 0x20, + 0x00, 0x42, 0x04, 0x40, 0x04, 0x38, 0x04, 0x3c, + 0x04, 0x35, 0x04, 0x41, 0x04, 0x35, 0x04, 0x47, + 0x04, 0x38, 0x04, 0x35, 0x04, 0x29, 0x3f, 0x04, + 0x40, 0x04, 0x35, 0x04, 0x34, 0x04, 0x45, 0x04, + 0x3e, 0x04, 0x34, 0x04, 0x3d, 0x04, 0x3e, 0x04, + 0x20, 0x00, 0x42, 0x04, 0x40, 0x04, 0x38, 0x04, + 0x3c, 0x04, 0x35, 0x04, 0x41, 0x04, 0x35, 0x04, + 0x47, 0x04, 0x38, 0x04, 0x35, 0x04, 0x27, 0x41, + 0x04, 0x3b, 0x04, 0x35, 0x04, 0x34, 0x04, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x42, 0x04, 0x40, 0x04, 0x38, 0x04, 0x3c, + 0x04, 0x35, 0x04, 0x41, 0x04, 0x35, 0x04, 0x47, + 0x04, 0x38, 0x04, 0x35, 0x04, 0x27, 0x41, 0x04, + 0x3b, 0x04, 0x35, 0x04, 0x34, 0x04, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x42, 0x04, 0x40, 0x04, 0x38, 0x04, 0x3c, 0x04, + 0x35, 0x04, 0x41, 0x04, 0x35, 0x04, 0x47, 0x04, + 0x38, 0x04, 0x4f, 0x04, 0x29, 0x3f, 0x04, 0x40, + 0x04, 0x35, 0x04, 0x34, 0x04, 0x38, 0x04, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x42, 0x04, 0x40, 0x04, 0x38, 0x04, 0x3c, + 0x04, 0x35, 0x04, 0x41, 0x04, 0x35, 0x04, 0x47, + 0x04, 0x38, 0x04, 0x35, 0x04, 0x29, 0x3f, 0x04, + 0x40, 0x04, 0x35, 0x04, 0x34, 0x04, 0x38, 0x04, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x42, 0x04, 0x40, 0x04, 0x38, 0x04, + 0x3c, 0x04, 0x35, 0x04, 0x41, 0x04, 0x35, 0x04, + 0x47, 0x04, 0x38, 0x04, 0x4f, 0x04, 0x0e, 0x71, + 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x15, 0x42, + 0x04, 0x3e, 0x04, 0x32, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x42, 0x04, 0x40, 0x04, 0x38, 0x04, 0x3c, + 0x04, 0x2e, 0x00, 0x19, 0x41, 0x04, 0x3b, 0x04, + 0x35, 0x04, 0x34, 0x04, 0x32, 0x04, 0x2e, 0x00, + 0x20, 0x00, 0x42, 0x04, 0x40, 0x04, 0x38, 0x04, + 0x3c, 0x04, 0x2e, 0x00, 0x15, 0x3c, 0x04, 0x38, + 0x04, 0x3d, 0x04, 0x2e, 0x00, 0x20, 0x00, 0x42, + 0x04, 0x40, 0x04, 0x38, 0x04, 0x3c, 0x04, 0x2e, + 0x00, 0x1d, 0x41, 0x04, 0x3b, 0x04, 0x35, 0x04, + 0x34, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x42, 0x04, 0x40, 0x04, + 0x38, 0x04, 0x3c, 0x04, 0x2e, 0x00, 0x1f, 0x3f, + 0x04, 0x40, 0x04, 0x35, 0x04, 0x34, 0x04, 0x38, + 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x42, 0x04, 0x40, 0x04, 0x38, + 0x04, 0x3c, 0x04, 0x2e, 0x00, 0x1a, 0x71, 0x75, + 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x1b, 0x41, 0x04, 0x3b, 0x04, + 0x2e, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x42, 0x04, 0x40, 0x04, + 0x38, 0x04, 0x3c, 0x04, 0x2e, 0x00, 0x1b, 0x3f, + 0x04, 0x40, 0x04, 0x2e, 0x00, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x42, + 0x04, 0x40, 0x04, 0x38, 0x04, 0x3c, 0x04, 0x2e, + 0x00, 0x1c, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, + 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x15, 0x42, 0x04, 0x3e, 0x04, 0x37, 0x04, 0x38, + 0x04, 0x20, 0x00, 0x3c, 0x04, 0x35, 0x04, 0x41, + 0x04, 0x35, 0x04, 0x46, 0x04, 0x1b, 0x41, 0x04, + 0x3b, 0x04, 0x35, 0x04, 0x34, 0x04, 0x32, 0x04, + 0x30, 0x04, 0x49, 0x04, 0x20, 0x00, 0x3c, 0x04, + 0x35, 0x04, 0x41, 0x04, 0x35, 0x04, 0x46, 0x04, + 0x1f, 0x3f, 0x04, 0x40, 0x04, 0x35, 0x04, 0x34, + 0x04, 0x45, 0x04, 0x3e, 0x04, 0x34, 0x04, 0x35, + 0x04, 0x3d, 0x04, 0x20, 0x00, 0x3c, 0x04, 0x35, + 0x04, 0x41, 0x04, 0x35, 0x04, 0x46, 0x04, 0x1d, + 0x41, 0x04, 0x3b, 0x04, 0x35, 0x04, 0x34, 0x04, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x3c, 0x04, 0x35, 0x04, 0x41, 0x04, + 0x35, 0x04, 0x46, 0x04, 0x1f, 0x41, 0x04, 0x3b, + 0x04, 0x35, 0x04, 0x34, 0x04, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3c, + 0x04, 0x35, 0x04, 0x41, 0x04, 0x35, 0x04, 0x46, + 0x04, 0x30, 0x04, 0x1f, 0x3f, 0x04, 0x40, 0x04, + 0x35, 0x04, 0x34, 0x04, 0x38, 0x04, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x3c, 0x04, 0x35, 0x04, 0x41, 0x04, 0x35, 0x04, + 0x46, 0x04, 0x21, 0x3f, 0x04, 0x40, 0x04, 0x35, + 0x04, 0x34, 0x04, 0x38, 0x04, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3c, + 0x04, 0x35, 0x04, 0x41, 0x04, 0x35, 0x04, 0x46, + 0x04, 0x30, 0x04, 0x0a, 0x6d, 0x6f, 0x6e, 0x74, + 0x68, 0x13, 0x42, 0x04, 0x3e, 0x04, 0x37, 0x04, + 0x38, 0x04, 0x20, 0x00, 0x3c, 0x04, 0x35, 0x04, + 0x41, 0x04, 0x2e, 0x00, 0x17, 0x41, 0x04, 0x3b, + 0x04, 0x35, 0x04, 0x34, 0x04, 0x32, 0x04, 0x2e, + 0x00, 0x20, 0x00, 0x3c, 0x04, 0x35, 0x04, 0x41, + 0x04, 0x2e, 0x00, 0x13, 0x3c, 0x04, 0x38, 0x04, + 0x3d, 0x04, 0x2e, 0x00, 0x20, 0x00, 0x3c, 0x04, + 0x35, 0x04, 0x41, 0x04, 0x2e, 0x00, 0x17, 0x41, + 0x04, 0x3b, 0x04, 0x35, 0x04, 0x34, 0x04, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x3c, 0x04, 0x2e, 0x00, 0x19, 0x3f, 0x04, + 0x40, 0x04, 0x35, 0x04, 0x34, 0x04, 0x38, 0x04, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x3c, 0x04, 0x2e, 0x00, 0x16, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x0b, 0x42, 0x04, 0x2e, 0x00, 0x20, + 0x00, 0x3c, 0x04, 0x2e, 0x00, 0x0d, 0x41, 0x04, + 0x3b, 0x04, 0x2e, 0x00, 0x20, 0x00, 0x3c, 0x04, + 0x2e, 0x00, 0x0f, 0x3c, 0x04, 0x38, 0x04, 0x3d, + 0x04, 0x2e, 0x00, 0x20, 0x00, 0x3c, 0x04, 0x2e, + 0x00, 0x15, 0x41, 0x04, 0x3b, 0x04, 0x2e, 0x00, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x3c, 0x04, 0x2e, 0x00, 0x15, 0x3f, + 0x04, 0x40, 0x04, 0x2e, 0x00, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3c, + 0x04, 0x2e, 0x00, 0x18, 0x6d, 0x6f, 0x6e, 0x74, + 0x68, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x19, 0x42, 0x04, 0x30, 0x04, 0x37, 0x04, 0x38, + 0x04, 0x20, 0x00, 0x41, 0x04, 0x35, 0x04, 0x34, + 0x04, 0x3c, 0x04, 0x38, 0x04, 0x46, 0x04, 0x30, + 0x04, 0x25, 0x41, 0x04, 0x3b, 0x04, 0x35, 0x04, + 0x34, 0x04, 0x32, 0x04, 0x30, 0x04, 0x49, 0x04, + 0x30, 0x04, 0x42, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x41, 0x04, 0x35, 0x04, 0x34, 0x04, 0x3c, 0x04, + 0x38, 0x04, 0x46, 0x04, 0x30, 0x04, 0x27, 0x3f, + 0x04, 0x40, 0x04, 0x35, 0x04, 0x34, 0x04, 0x45, + 0x04, 0x3e, 0x04, 0x34, 0x04, 0x3d, 0x04, 0x30, + 0x04, 0x42, 0x04, 0x30, 0x04, 0x20, 0x00, 0x41, + 0x04, 0x35, 0x04, 0x34, 0x04, 0x3c, 0x04, 0x38, + 0x04, 0x46, 0x04, 0x30, 0x04, 0x21, 0x41, 0x04, + 0x3b, 0x04, 0x35, 0x04, 0x34, 0x04, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x41, 0x04, 0x35, 0x04, 0x34, 0x04, 0x3c, 0x04, + 0x38, 0x04, 0x46, 0x04, 0x30, 0x04, 0x21, 0x41, + 0x04, 0x3b, 0x04, 0x35, 0x04, 0x34, 0x04, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x41, 0x04, 0x35, 0x04, 0x34, 0x04, 0x3c, + 0x04, 0x38, 0x04, 0x46, 0x04, 0x38, 0x04, 0x23, + 0x3f, 0x04, 0x40, 0x04, 0x35, 0x04, 0x34, 0x04, + 0x38, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x41, 0x04, 0x35, 0x04, + 0x34, 0x04, 0x3c, 0x04, 0x38, 0x04, 0x46, 0x04, + 0x30, 0x04, 0x23, 0x3f, 0x04, 0x40, 0x04, 0x35, + 0x04, 0x34, 0x04, 0x38, 0x04, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x41, + 0x04, 0x35, 0x04, 0x34, 0x04, 0x3c, 0x04, 0x38, + 0x04, 0x46, 0x04, 0x38, 0x04, 0x08, 0x77, 0x65, + 0x65, 0x6b, 0x15, 0x42, 0x04, 0x30, 0x04, 0x37, + 0x04, 0x38, 0x04, 0x20, 0x00, 0x41, 0x04, 0x35, + 0x04, 0x34, 0x04, 0x3c, 0x04, 0x2e, 0x00, 0x19, + 0x41, 0x04, 0x3b, 0x04, 0x35, 0x04, 0x34, 0x04, + 0x32, 0x04, 0x2e, 0x00, 0x20, 0x00, 0x41, 0x04, + 0x35, 0x04, 0x34, 0x04, 0x3c, 0x04, 0x2e, 0x00, + 0x15, 0x3c, 0x04, 0x38, 0x04, 0x3d, 0x04, 0x2e, + 0x00, 0x20, 0x00, 0x41, 0x04, 0x35, 0x04, 0x34, + 0x04, 0x3c, 0x04, 0x2e, 0x00, 0x1d, 0x41, 0x04, + 0x3b, 0x04, 0x35, 0x04, 0x34, 0x04, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x41, 0x04, 0x35, 0x04, 0x34, 0x04, 0x3c, 0x04, + 0x2e, 0x00, 0x1f, 0x3f, 0x04, 0x40, 0x04, 0x35, + 0x04, 0x34, 0x04, 0x38, 0x04, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x41, + 0x04, 0x35, 0x04, 0x34, 0x04, 0x3c, 0x04, 0x2e, + 0x00, 0x14, 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x13, 0x41, 0x04, 0x3b, + 0x04, 0x2e, 0x00, 0x20, 0x00, 0x41, 0x04, 0x35, + 0x04, 0x34, 0x04, 0x3c, 0x04, 0x2e, 0x00, 0x1b, + 0x41, 0x04, 0x3b, 0x04, 0x2e, 0x00, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x41, 0x04, 0x35, 0x04, 0x34, 0x04, 0x3c, 0x04, + 0x2e, 0x00, 0x1b, 0x3f, 0x04, 0x40, 0x04, 0x2e, + 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x41, 0x04, 0x35, 0x04, 0x34, + 0x04, 0x3c, 0x04, 0x2e, 0x00, 0x16, 0x77, 0x65, + 0x65, 0x6b, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x09, 0x34, 0x04, 0x3d, 0x04, 0x35, 0x04, + 0x41, 0x04, 0x09, 0x43, 0x04, 0x42, 0x04, 0x40, + 0x04, 0x35, 0x04, 0x13, 0x32, 0x04, 0x34, 0x04, + 0x40, 0x04, 0x43, 0x04, 0x33, 0x04, 0x38, 0x04, + 0x34, 0x04, 0x35, 0x04, 0x3d, 0x04, 0x11, 0x3e, + 0x04, 0x3d, 0x04, 0x37, 0x04, 0x38, 0x04, 0x20, + 0x00, 0x34, 0x04, 0x35, 0x04, 0x3d, 0x04, 0x04, + 0x2d, 0x32, 0x0b, 0x32, 0x04, 0x47, 0x04, 0x35, + 0x04, 0x40, 0x04, 0x30, 0x04, 0x19, 0x41, 0x04, + 0x3b, 0x04, 0x35, 0x04, 0x34, 0x04, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x34, 0x04, 0x35, 0x04, 0x3d, 0x04, 0x19, 0x41, + 0x04, 0x3b, 0x04, 0x35, 0x04, 0x34, 0x04, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x34, 0x04, 0x3d, 0x04, 0x38, 0x04, 0x1b, + 0x3f, 0x04, 0x40, 0x04, 0x35, 0x04, 0x34, 0x04, + 0x38, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x34, 0x04, 0x35, 0x04, + 0x3d, 0x04, 0x1b, 0x3f, 0x04, 0x40, 0x04, 0x35, + 0x04, 0x34, 0x04, 0x38, 0x04, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x34, + 0x04, 0x3d, 0x04, 0x38, 0x04, 0x06, 0x64, 0x61, + 0x79, 0x12, 0x64, 0x61, 0x79, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x13, 0x41, 0x04, 0x3b, 0x04, + 0x2e, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x34, 0x04, 0x13, 0x3f, + 0x04, 0x40, 0x04, 0x2e, 0x00, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x34, + 0x04, 0x14, 0x64, 0x61, 0x79, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x15, 0x32, 0x04, 0x20, + 0x00, 0x42, 0x04, 0x3e, 0x04, 0x37, 0x04, 0x38, + 0x04, 0x20, 0x00, 0x47, 0x04, 0x30, 0x04, 0x41, + 0x04, 0x19, 0x41, 0x04, 0x3b, 0x04, 0x35, 0x04, + 0x34, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x47, 0x04, 0x30, 0x04, + 0x41, 0x04, 0x1b, 0x41, 0x04, 0x3b, 0x04, 0x35, + 0x04, 0x34, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x47, 0x04, 0x30, + 0x04, 0x41, 0x04, 0x30, 0x04, 0x1b, 0x3f, 0x04, + 0x40, 0x04, 0x35, 0x04, 0x34, 0x04, 0x38, 0x04, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x47, 0x04, 0x30, 0x04, 0x41, 0x04, + 0x1d, 0x3f, 0x04, 0x40, 0x04, 0x35, 0x04, 0x34, + 0x04, 0x38, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x47, 0x04, 0x30, + 0x04, 0x41, 0x04, 0x30, 0x04, 0x08, 0x68, 0x6f, + 0x75, 0x72, 0x15, 0x41, 0x04, 0x3b, 0x04, 0x35, + 0x04, 0x34, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x47, 0x04, 0x17, + 0x3f, 0x04, 0x40, 0x04, 0x35, 0x04, 0x34, 0x04, + 0x38, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x47, 0x04, 0x14, 0x68, + 0x6f, 0x75, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x13, 0x41, 0x04, 0x3b, 0x04, 0x2e, 0x00, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x47, 0x04, 0x13, 0x3f, 0x04, 0x40, + 0x04, 0x2e, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x47, 0x04, 0x16, + 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x1b, 0x32, 0x04, 0x20, 0x00, + 0x42, 0x04, 0x30, 0x04, 0x37, 0x04, 0x38, 0x04, + 0x20, 0x00, 0x3c, 0x04, 0x38, 0x04, 0x3d, 0x04, + 0x43, 0x04, 0x42, 0x04, 0x30, 0x04, 0x1f, 0x41, + 0x04, 0x3b, 0x04, 0x35, 0x04, 0x34, 0x04, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x3c, 0x04, 0x38, 0x04, 0x3d, 0x04, 0x43, + 0x04, 0x42, 0x04, 0x30, 0x04, 0x1f, 0x41, 0x04, + 0x3b, 0x04, 0x35, 0x04, 0x34, 0x04, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x3c, 0x04, 0x38, 0x04, 0x3d, 0x04, 0x43, 0x04, + 0x42, 0x04, 0x38, 0x04, 0x21, 0x3f, 0x04, 0x40, + 0x04, 0x35, 0x04, 0x34, 0x04, 0x38, 0x04, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x3c, 0x04, 0x38, 0x04, 0x3d, 0x04, 0x43, + 0x04, 0x42, 0x04, 0x30, 0x04, 0x21, 0x3f, 0x04, + 0x40, 0x04, 0x35, 0x04, 0x34, 0x04, 0x38, 0x04, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x3c, 0x04, 0x38, 0x04, 0x3d, 0x04, + 0x43, 0x04, 0x42, 0x04, 0x38, 0x04, 0x0c, 0x6d, + 0x69, 0x6e, 0x75, 0x74, 0x65, 0x19, 0x41, 0x04, + 0x3b, 0x04, 0x35, 0x04, 0x34, 0x04, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x3c, 0x04, 0x38, 0x04, 0x3d, 0x04, 0x1b, 0x3f, + 0x04, 0x40, 0x04, 0x35, 0x04, 0x34, 0x04, 0x38, + 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x3c, 0x04, 0x38, 0x04, 0x3d, + 0x04, 0x18, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x17, 0x41, + 0x04, 0x3b, 0x04, 0x2e, 0x00, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3c, + 0x04, 0x38, 0x04, 0x3d, 0x04, 0x17, 0x3f, 0x04, + 0x40, 0x04, 0x2e, 0x00, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3c, 0x04, + 0x38, 0x04, 0x3d, 0x04, 0x1a, 0x6d, 0x69, 0x6e, + 0x75, 0x74, 0x65, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x09, 0x41, 0x04, 0x35, 0x04, 0x33, + 0x04, 0x30, 0x04, 0x21, 0x41, 0x04, 0x3b, 0x04, + 0x35, 0x04, 0x34, 0x04, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x41, 0x04, + 0x35, 0x04, 0x3a, 0x04, 0x43, 0x04, 0x3d, 0x04, + 0x34, 0x04, 0x30, 0x04, 0x21, 0x41, 0x04, 0x3b, + 0x04, 0x35, 0x04, 0x34, 0x04, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x41, + 0x04, 0x35, 0x04, 0x3a, 0x04, 0x43, 0x04, 0x3d, + 0x04, 0x34, 0x04, 0x38, 0x04, 0x23, 0x3f, 0x04, + 0x40, 0x04, 0x35, 0x04, 0x34, 0x04, 0x38, 0x04, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x41, 0x04, 0x35, 0x04, 0x3a, 0x04, + 0x43, 0x04, 0x3d, 0x04, 0x34, 0x04, 0x30, 0x04, + 0x23, 0x3f, 0x04, 0x40, 0x04, 0x35, 0x04, 0x34, + 0x04, 0x38, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x41, 0x04, 0x35, + 0x04, 0x3a, 0x04, 0x43, 0x04, 0x3d, 0x04, 0x34, + 0x04, 0x38, 0x04, 0x0c, 0x73, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x19, 0x41, 0x04, 0x3b, 0x04, 0x35, + 0x04, 0x34, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x41, 0x04, 0x35, + 0x04, 0x3a, 0x04, 0x1b, 0x3f, 0x04, 0x40, 0x04, + 0x35, 0x04, 0x34, 0x04, 0x38, 0x04, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x41, 0x04, 0x35, 0x04, 0x3a, 0x04, 0x18, 0x73, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x17, 0x41, 0x04, 0x3b, 0x04, + 0x2e, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x41, 0x04, 0x35, 0x04, + 0x3a, 0x04, 0x17, 0x3f, 0x04, 0x40, 0x04, 0x2e, + 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x41, 0x04, 0x35, 0x04, 0x3a, + 0x04, 0x1a, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x08, + 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, 0x75, 0x08, + 0x64, 0x61, 0x74, 0x61, 0x70, 0x6e, 0x6f, 0x64, + 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, + 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2d, 0x72, + 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x2d, + 0x74, 0x69, 0x6d, 0x65, 0x2d, 0x66, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x2f, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, + 0x62, 0x67, 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, + 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, 0x07, 0x00, + 0x00, 0xd6, 0x0f, 0x01, 0xa0, 0x01, 0x00, 0x00, + 0x00, 0x06, 0xc8, 0x04, 0xd0, 0x00, 0x00, 0x00, + 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, 0x00, + 0x00, 0x00, 0xaa, 0x6a, 0xc1, 0x07, 0x00, 0x00, + 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, 0x00, + 0x00, 0x00, 0x43, 0xd0, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd3, 0x00, 0x00, 0x00, 0x4d, 0xd4, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xd5, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xd6, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xdf, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe2, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xe3, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe5, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe5, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe2, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xe8, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe9, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe9, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xeb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xec, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xed, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xef, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf0, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf1, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xf3, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf4, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xf5, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xf7, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf7, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf8, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xf8, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xf9, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf4, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xf5, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xfa, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xfa, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfb, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xfb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xfc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfd, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xfe, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x00, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x01, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x02, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x03, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x04, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x05, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x06, + 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x08, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x08, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x09, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x09, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x0a, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x0b, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x0c, + 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x0e, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0e, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0f, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x0f, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x10, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x11, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x12, + 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x14, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x17, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x18, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x19, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x1a, + 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0x1b, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x1c, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x1c, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x1d, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x1d, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x1e, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x19, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x1f, + 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0x1b, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x20, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x20, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x21, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x21, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x22, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x23, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x24, + 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0x25, 0x01, 0x00, 0x00, 0x4d, 0x02, 0x00, + 0x00, 0x80, 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, + 0x27, 0x01, 0x00, 0x00, 0x04, 0x28, 0x01, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x29, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x2a, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x2b, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x2c, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0x2d, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x23, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0x24, 0x01, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0x25, 0x01, 0x00, + 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, 0x26, + 0x01, 0x00, 0x00, 0x4d, 0x27, 0x01, 0x00, 0x00, + 0x04, 0x28, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x29, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x2a, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x2b, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x2c, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x2e, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x23, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x24, + 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0x25, 0x01, 0x00, 0x00, 0x4d, 0x02, 0x00, + 0x00, 0x80, 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, + 0x27, 0x01, 0x00, 0x00, 0x04, 0x28, 0x01, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x2f, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x30, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x30, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0x31, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x32, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x0b, 0x04, 0x33, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x34, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x35, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x36, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x37, + 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x38, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x38, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x39, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x39, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0x3a, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x3b, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x3b, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x3c, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x3c, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0x3d, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x3e, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x0b, 0x04, 0x3f, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x40, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x41, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x42, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x43, + 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x44, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x44, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x45, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0x46, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x48, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0x49, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x0b, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x4f, + 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0x52, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x54, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x57, 0x01, 0x00, 0x00, 0x4d, 0x58, 0x01, 0x00, + 0x00, 0x24, 0x01, 0x00, 0xc8, 0xc4, 0x28, 0xb2, + 0x05, 0x01, 0xaf, 0x02, 0x76, 0x53, 0x35, 0x08, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x1c, 0x12, + 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_bn_size = 3450; + +const uint8_t intl_relative_bn[3450] = { + 0x01, 0x4c, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x04, 0x62, 0x6e, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x0d, 0x8f, 0x09, 0x87, + 0x09, 0x20, 0x00, 0xac, 0x09, 0x9b, 0x09, 0xb0, + 0x09, 0x11, 0xaa, 0x09, 0xb0, 0x09, 0xc7, 0x09, + 0xb0, 0x09, 0x20, 0x00, 0xac, 0x09, 0x9b, 0x09, + 0xb0, 0x09, 0x0d, 0x97, 0x09, 0xa4, 0x09, 0x20, + 0x00, 0xac, 0x09, 0x9b, 0x09, 0xb0, 0x09, 0x04, + 0x2d, 0x31, 0x11, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0xac, 0x09, 0x9b, 0x09, 0xb0, + 0x09, 0xc7, 0x09, 0x06, 0x6f, 0x6e, 0x65, 0x0a, + 0x6f, 0x74, 0x68, 0x65, 0x72, 0x0c, 0x66, 0x75, + 0x74, 0x75, 0x72, 0x65, 0x1d, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0xac, 0x09, 0x9b, + 0x09, 0xb0, 0x09, 0x20, 0x00, 0xaa, 0x09, 0xc2, + 0x09, 0xb0, 0x09, 0xcd, 0x09, 0xac, 0x09, 0xc7, + 0x09, 0x08, 0x70, 0x61, 0x73, 0x74, 0x08, 0x79, + 0x65, 0x61, 0x72, 0x14, 0x79, 0x65, 0x61, 0x72, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, 0x79, + 0x65, 0x61, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x19, 0x8f, 0x09, 0x87, 0x09, 0x20, + 0x00, 0xa4, 0x09, 0xcd, 0x09, 0xb0, 0x09, 0xc8, + 0x09, 0xae, 0x09, 0xbe, 0x09, 0xb8, 0x09, 0xbf, + 0x09, 0x95, 0x09, 0x1d, 0xaa, 0x09, 0xb0, 0x09, + 0xc7, 0x09, 0xb0, 0x09, 0x20, 0x00, 0xa4, 0x09, + 0xcd, 0x09, 0xb0, 0x09, 0xc8, 0x09, 0xae, 0x09, + 0xbe, 0x09, 0xb8, 0x09, 0xbf, 0x09, 0x95, 0x09, + 0x19, 0x97, 0x09, 0xa4, 0x09, 0x20, 0x00, 0xa4, + 0x09, 0xcd, 0x09, 0xb0, 0x09, 0xc8, 0x09, 0xae, + 0x09, 0xbe, 0x09, 0xb8, 0x09, 0xbf, 0x09, 0x95, + 0x09, 0x1d, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0xa4, 0x09, 0xcd, 0x09, 0xb0, 0x09, + 0xc8, 0x09, 0xae, 0x09, 0xbe, 0x09, 0xb8, 0x09, + 0xbf, 0x09, 0x95, 0x09, 0xc7, 0x09, 0x23, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xa4, + 0x09, 0xcd, 0x09, 0xb0, 0x09, 0xc8, 0x09, 0xae, + 0x09, 0xbe, 0x09, 0xb8, 0x09, 0xbf, 0x09, 0x95, + 0x09, 0x20, 0x00, 0x86, 0x09, 0x97, 0x09, 0xc7, + 0x09, 0x0e, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, + 0x72, 0x1a, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, + 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1c, + 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0d, 0x8f, + 0x09, 0x87, 0x09, 0x20, 0x00, 0xae, 0x09, 0xbe, + 0x09, 0xb8, 0x09, 0x11, 0xaa, 0x09, 0xb0, 0x09, + 0xc7, 0x09, 0xb0, 0x09, 0x20, 0x00, 0xae, 0x09, + 0xbe, 0x09, 0xb8, 0x09, 0x0d, 0x97, 0x09, 0xa4, + 0x09, 0x20, 0x00, 0xae, 0x09, 0xbe, 0x09, 0xb8, + 0x09, 0x11, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0xae, 0x09, 0xbe, 0x09, 0xb8, 0x09, + 0xc7, 0x09, 0x17, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0xae, 0x09, 0xbe, 0x09, 0xb8, + 0x09, 0x20, 0x00, 0x86, 0x09, 0x97, 0x09, 0xc7, + 0x09, 0x0a, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x16, + 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x18, 0x6d, 0x6f, 0x6e, 0x74, + 0x68, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x13, 0x8f, 0x09, 0x87, 0x09, 0x20, 0x00, 0xb8, + 0x09, 0xaa, 0x09, 0xcd, 0x09, 0xa4, 0x09, 0xbe, + 0x09, 0xb9, 0x09, 0x17, 0xaa, 0x09, 0xb0, 0x09, + 0xc7, 0x09, 0xb0, 0x09, 0x20, 0x00, 0xb8, 0x09, + 0xaa, 0x09, 0xcd, 0x09, 0xa4, 0x09, 0xbe, 0x09, + 0xb9, 0x09, 0x13, 0x97, 0x09, 0xa4, 0x09, 0x20, + 0x00, 0xb8, 0x09, 0xaa, 0x09, 0xcd, 0x09, 0xa4, + 0x09, 0xbe, 0x09, 0xb9, 0x09, 0x17, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xb8, 0x09, + 0xaa, 0x09, 0xcd, 0x09, 0xa4, 0x09, 0xbe, 0x09, + 0xb9, 0x09, 0xc7, 0x09, 0x1d, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0xb8, 0x09, 0xaa, + 0x09, 0xcd, 0x09, 0xa4, 0x09, 0xbe, 0x09, 0xb9, + 0x09, 0x20, 0x00, 0x86, 0x09, 0x97, 0x09, 0xc7, + 0x09, 0x08, 0x77, 0x65, 0x65, 0x6b, 0x14, 0x77, + 0x65, 0x65, 0x6b, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x16, 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x05, 0x86, 0x09, + 0x9c, 0x09, 0x11, 0x86, 0x09, 0x97, 0x09, 0xbe, + 0x09, 0xae, 0x09, 0xc0, 0x09, 0x95, 0x09, 0xbe, + 0x09, 0xb2, 0x09, 0x15, 0x86, 0x09, 0x97, 0x09, + 0xbe, 0x09, 0xae, 0x09, 0xc0, 0x09, 0x20, 0x00, + 0xaa, 0x09, 0xb0, 0x09, 0xb6, 0x09, 0xc1, 0x09, + 0x0f, 0x97, 0x09, 0xa4, 0x09, 0x20, 0x00, 0xaa, + 0x09, 0xb0, 0x09, 0xb6, 0x09, 0xc1, 0x09, 0x04, + 0x2d, 0x32, 0x0b, 0x97, 0x09, 0xa4, 0x09, 0x95, + 0x09, 0xbe, 0x09, 0xb2, 0x09, 0x1f, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xa6, 0x09, + 0xbf, 0x09, 0xa8, 0x09, 0xc7, 0x09, 0xb0, 0x09, + 0x20, 0x00, 0xae, 0x09, 0xa7, 0x09, 0xcd, 0x09, + 0xaf, 0x09, 0xc7, 0x09, 0x17, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0xa6, 0x09, 0xbf, + 0x09, 0xa8, 0x09, 0x20, 0x00, 0x86, 0x09, 0x97, + 0x09, 0xc7, 0x09, 0x06, 0x64, 0x61, 0x79, 0x12, + 0x64, 0x61, 0x79, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x14, 0x64, 0x61, 0x79, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x15, 0x8f, 0x09, 0x87, + 0x09, 0x20, 0x00, 0x98, 0x09, 0xa3, 0x09, 0xcd, + 0x09, 0x9f, 0x09, 0xbe, 0x09, 0xaf, 0x09, 0xbc, + 0x09, 0x17, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x98, 0x09, 0xa8, 0x09, 0xcd, 0x09, + 0x9f, 0x09, 0xbe, 0x09, 0xaf, 0x09, 0xbc, 0x09, + 0x1b, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x98, 0x09, 0xa8, 0x09, 0xcd, 0x09, 0x9f, + 0x09, 0xbe, 0x09, 0x20, 0x00, 0x86, 0x09, 0x97, + 0x09, 0xc7, 0x09, 0x08, 0x68, 0x6f, 0x75, 0x72, + 0x14, 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x16, 0x68, 0x6f, 0x75, 0x72, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x11, + 0x8f, 0x09, 0x87, 0x09, 0x20, 0x00, 0xae, 0x09, + 0xbf, 0x09, 0xa8, 0x09, 0xbf, 0x09, 0x9f, 0x09, + 0x15, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0xae, 0x09, 0xbf, 0x09, 0xa8, 0x09, 0xbf, + 0x09, 0x9f, 0x09, 0xc7, 0x09, 0x1b, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xae, 0x09, + 0xbf, 0x09, 0xa8, 0x09, 0xbf, 0x09, 0x9f, 0x09, + 0x20, 0x00, 0x86, 0x09, 0x97, 0x09, 0xc7, 0x09, + 0x0c, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x18, + 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x6d, 0x69, 0x6e, + 0x75, 0x74, 0x65, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x07, 0x8f, 0x09, 0x96, 0x09, 0xa8, + 0x09, 0x19, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0xb8, 0x09, 0xc7, 0x09, 0x95, 0x09, + 0xc7, 0x09, 0xa8, 0x09, 0xcd, 0x09, 0xa1, 0x09, + 0xc7, 0x09, 0x25, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0xb8, 0x09, 0xc7, 0x09, 0x95, + 0x09, 0xc7, 0x09, 0xa8, 0x09, 0xcd, 0x09, 0xa1, + 0x09, 0x20, 0x00, 0xaa, 0x09, 0xc2, 0x09, 0xb0, + 0x09, 0xcd, 0x09, 0xac, 0x09, 0xc7, 0x09, 0x0c, + 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x18, 0x73, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x1f, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0xb8, 0x09, 0xc7, 0x09, + 0x95, 0x09, 0xc7, 0x09, 0xa8, 0x09, 0xcd, 0x09, + 0xa1, 0x09, 0x20, 0x00, 0x86, 0x09, 0x97, 0x09, + 0xc7, 0x09, 0x1a, 0x73, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x08, 0x62, 0x65, 0x6e, 0x67, 0x04, 0x6e, 0x75, + 0x08, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6e, 0x6f, + 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2d, + 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2d, 0x66, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x2f, 0x6c, 0x6f, 0x63, + 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, + 0x2f, 0x62, 0x6e, 0x2e, 0x6a, 0x73, 0x0d, 0x00, + 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, 0x07, + 0x00, 0x00, 0x9a, 0x0f, 0x01, 0xa0, 0x01, 0x00, + 0x00, 0x00, 0x06, 0xc8, 0x04, 0xd0, 0x00, 0x00, + 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, + 0x00, 0x00, 0x00, 0xaa, 0x6a, 0x85, 0x07, 0x00, + 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, + 0x00, 0x00, 0x00, 0x43, 0xd0, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xd3, 0x00, 0x00, 0x00, 0x4d, 0xd4, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xd5, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd5, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd5, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe2, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xe3, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe5, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xe5, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xec, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xee, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0xef, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xec, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xee, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0xf0, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xec, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xee, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0xf1, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xf3, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xf4, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xf6, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0xf7, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xf3, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xf4, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xf6, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0xf8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xf3, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xf4, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xf6, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0xf9, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xfb, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xfc, 0x00, + 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, + 0xfd, 0x00, 0x00, 0x00, 0x4d, 0xfe, 0x00, 0x00, + 0x00, 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x00, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x01, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0x02, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xfa, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xfb, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, 0x02, + 0x00, 0x00, 0x80, 0x04, 0xfd, 0x00, 0x00, 0x00, + 0x4d, 0xfe, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x01, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0x03, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xfb, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xfc, 0x00, + 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, + 0xfd, 0x00, 0x00, 0x00, 0x4d, 0xfe, 0x00, 0x00, + 0x00, 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x00, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x01, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0x04, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x05, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, + 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0x08, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x07, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x07, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x09, 0x01, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x06, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x06, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x07, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0x0a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x0b, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, + 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x0d, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0x0e, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x0c, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0d, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0d, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x0f, 0x01, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x0c, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0c, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0d, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0x10, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x11, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, + 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x13, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0x14, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x12, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x13, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x13, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x15, 0x01, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x12, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x12, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x16, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0x17, 0x01, 0x00, 0x00, 0x04, 0x18, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x19, 0x01, 0x00, + 0x00, 0x4d, 0x1a, 0x01, 0x00, 0x00, 0x24, 0x01, + 0x00, 0xc8, 0xc4, 0x28, 0xb6, 0x04, 0x01, 0xa9, + 0x02, 0x76, 0x53, 0x35, 0x08, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x1c, 0x12, 0x1c, + 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_bo_CN_size = 1243; + +const uint8_t intl_relative_bo_CN[1243] = { + 0x01, 0x3a, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x0a, 0x62, 0x6f, 0x2d, 0x43, 0x4e, + 0x0c, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x12, + 0x74, 0x68, 0x69, 0x73, 0x20, 0x79, 0x65, 0x61, + 0x72, 0x12, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x79, + 0x65, 0x61, 0x72, 0x12, 0x6c, 0x61, 0x73, 0x74, + 0x20, 0x79, 0x65, 0x61, 0x72, 0x04, 0x2d, 0x31, + 0x0c, 0x2b, 0x7b, 0x30, 0x7d, 0x20, 0x79, 0x0a, + 0x6f, 0x74, 0x68, 0x65, 0x72, 0x0c, 0x66, 0x75, + 0x74, 0x75, 0x72, 0x65, 0x0c, 0x2d, 0x7b, 0x30, + 0x7d, 0x20, 0x79, 0x08, 0x70, 0x61, 0x73, 0x74, + 0x08, 0x79, 0x65, 0x61, 0x72, 0x14, 0x74, 0x68, + 0x69, 0x73, 0x20, 0x6d, 0x6f, 0x6e, 0x74, 0x68, + 0x14, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x6d, 0x6f, + 0x6e, 0x74, 0x68, 0x14, 0x6c, 0x61, 0x73, 0x74, + 0x20, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x0c, 0x2b, + 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x0c, 0x2d, 0x7b, + 0x30, 0x7d, 0x20, 0x6d, 0x0a, 0x6d, 0x6f, 0x6e, + 0x74, 0x68, 0x12, 0x74, 0x68, 0x69, 0x73, 0x20, + 0x77, 0x65, 0x65, 0x6b, 0x12, 0x6e, 0x65, 0x78, + 0x74, 0x20, 0x77, 0x65, 0x65, 0x6b, 0x12, 0x6c, + 0x61, 0x73, 0x74, 0x20, 0x77, 0x65, 0x65, 0x6b, + 0x0c, 0x2b, 0x7b, 0x30, 0x7d, 0x20, 0x77, 0x0c, + 0x2d, 0x7b, 0x30, 0x7d, 0x20, 0x77, 0x08, 0x77, + 0x65, 0x65, 0x6b, 0x0f, 0x51, 0x0f, 0x7a, 0x0f, + 0x0b, 0x0f, 0x62, 0x0f, 0x72, 0x0f, 0x44, 0x0f, + 0x0b, 0x0f, 0x0f, 0x66, 0x0f, 0x44, 0x0f, 0x0b, + 0x0f, 0x49, 0x0f, 0x72, 0x0f, 0x53, 0x0f, 0x0b, + 0x0f, 0x13, 0x42, 0x0f, 0x53, 0x0f, 0x44, 0x0f, + 0x66, 0x0f, 0x0b, 0x0f, 0x49, 0x0f, 0x72, 0x0f, + 0x53, 0x0f, 0x0b, 0x0f, 0x0f, 0x41, 0x0f, 0x66, + 0x0f, 0x0b, 0x0f, 0x49, 0x0f, 0x72, 0x0f, 0x53, + 0x0f, 0x0b, 0x0f, 0x04, 0x2d, 0x32, 0x0b, 0x41, + 0x0f, 0x66, 0x0f, 0x0b, 0x0f, 0x66, 0x0f, 0x0b, + 0x0f, 0x0c, 0x2b, 0x7b, 0x30, 0x7d, 0x20, 0x64, + 0x0c, 0x2d, 0x7b, 0x30, 0x7d, 0x20, 0x64, 0x06, + 0x64, 0x61, 0x79, 0x12, 0x74, 0x68, 0x69, 0x73, + 0x20, 0x68, 0x6f, 0x75, 0x72, 0x0c, 0x2b, 0x7b, + 0x30, 0x7d, 0x20, 0x68, 0x0c, 0x2d, 0x7b, 0x30, + 0x7d, 0x20, 0x68, 0x08, 0x68, 0x6f, 0x75, 0x72, + 0x16, 0x74, 0x68, 0x69, 0x73, 0x20, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x65, 0x10, 0x2b, 0x7b, 0x30, + 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x10, 0x2d, 0x7b, + 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x0c, 0x6d, + 0x69, 0x6e, 0x75, 0x74, 0x65, 0x06, 0x6e, 0x6f, + 0x77, 0x0c, 0x2b, 0x7b, 0x30, 0x7d, 0x20, 0x73, + 0x0c, 0x2d, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x0c, + 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x18, 0x74, + 0x68, 0x69, 0x73, 0x20, 0x71, 0x75, 0x61, 0x72, + 0x74, 0x65, 0x72, 0x18, 0x6e, 0x65, 0x78, 0x74, + 0x20, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, + 0x18, 0x6c, 0x61, 0x73, 0x74, 0x20, 0x71, 0x75, + 0x61, 0x72, 0x74, 0x65, 0x72, 0x0c, 0x2b, 0x7b, + 0x30, 0x7d, 0x20, 0x51, 0x0c, 0x2d, 0x7b, 0x30, + 0x7d, 0x20, 0x51, 0x0e, 0x71, 0x75, 0x61, 0x72, + 0x74, 0x65, 0x72, 0x08, 0x6c, 0x61, 0x74, 0x6e, + 0x04, 0x6e, 0x75, 0x08, 0x64, 0x61, 0x74, 0x61, + 0x76, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, + 0x74, 0x6c, 0x2d, 0x72, 0x65, 0x6c, 0x61, 0x74, + 0x69, 0x76, 0x65, 0x2d, 0x74, 0x69, 0x6d, 0x65, + 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2f, + 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, + 0x61, 0x74, 0x61, 0x2f, 0x62, 0x6f, 0x2d, 0x43, + 0x4e, 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, + 0x9e, 0x01, 0x00, 0x01, 0x00, 0x07, 0x00, 0x00, + 0xc2, 0x04, 0x01, 0xa0, 0x01, 0x00, 0x00, 0x00, + 0x06, 0xc8, 0x04, 0xd0, 0x00, 0x00, 0x00, 0x39, + 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, 0x00, 0x00, + 0x00, 0xaa, 0x6a, 0x2d, 0x02, 0x00, 0x00, 0x39, + 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, 0x00, 0x00, + 0x00, 0x43, 0xd0, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd3, 0x00, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0xd5, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xdf, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xe1, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe2, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe3, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xe4, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe5, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xe7, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xed, 0x00, 0x00, 0x00, + 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, 0xee, 0x00, + 0x00, 0x00, 0x4d, 0xef, 0x00, 0x00, 0x00, 0x04, + 0xf0, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0xf3, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf4, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0xf7, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf8, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0xfb, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xfc, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0xff, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x00, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x02, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x03, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x04, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x05, 0x01, + 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x07, 0x01, 0x00, 0x00, 0x4d, + 0x08, 0x01, 0x00, 0x00, 0x24, 0x01, 0x00, 0xc8, + 0xc4, 0x28, 0x92, 0x04, 0x01, 0x5d, 0x76, 0x53, + 0x35, 0x08, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x1c, 0x08, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x1c, 0x12, + 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_bs_size = 4127; + +const uint8_t intl_relative_bs[4127] = { + 0x01, 0x78, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x04, 0x62, 0x73, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x14, 0x6f, 0x76, 0x65, + 0x20, 0x67, 0x6f, 0x64, 0x69, 0x6e, 0x65, 0x1f, + 0x73, 0x00, 0x6c, 0x00, 0x6a, 0x00, 0x65, 0x00, + 0x64, 0x00, 0x65, 0x00, 0x07, 0x01, 0x65, 0x00, + 0x20, 0x00, 0x67, 0x00, 0x6f, 0x00, 0x64, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x65, 0x00, 0x1b, 0x70, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x61, 0x01, 0x6c, + 0x00, 0x65, 0x00, 0x20, 0x00, 0x67, 0x00, 0x6f, + 0x00, 0x64, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x65, + 0x00, 0x04, 0x2d, 0x31, 0x1a, 0x7a, 0x61, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x67, 0x6f, 0x64, 0x69, + 0x6e, 0x75, 0x06, 0x6f, 0x6e, 0x65, 0x1a, 0x7a, + 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x67, 0x6f, + 0x64, 0x69, 0x6e, 0x65, 0x06, 0x66, 0x65, 0x77, + 0x1a, 0x7a, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x67, 0x6f, 0x64, 0x69, 0x6e, 0x61, 0x0a, 0x6f, + 0x74, 0x68, 0x65, 0x72, 0x0c, 0x66, 0x75, 0x74, + 0x75, 0x72, 0x65, 0x20, 0x70, 0x72, 0x69, 0x6a, + 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x67, 0x6f, + 0x64, 0x69, 0x6e, 0x75, 0x20, 0x70, 0x72, 0x69, + 0x6a, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x67, + 0x6f, 0x64, 0x69, 0x6e, 0x65, 0x20, 0x70, 0x72, + 0x69, 0x6a, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x67, 0x6f, 0x64, 0x69, 0x6e, 0x61, 0x08, 0x70, + 0x61, 0x73, 0x74, 0x08, 0x79, 0x65, 0x61, 0x72, + 0x16, 0x7a, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x67, 0x6f, 0x64, 0x2e, 0x1c, 0x70, 0x72, 0x69, + 0x6a, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x67, + 0x6f, 0x64, 0x2e, 0x14, 0x79, 0x65, 0x61, 0x72, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x12, 0x7a, + 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x67, 0x2e, + 0x18, 0x70, 0x72, 0x69, 0x6a, 0x65, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x67, 0x2e, 0x16, 0x79, 0x65, + 0x61, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x18, 0x6f, 0x76, 0x61, 0x6a, 0x20, 0x6b, + 0x76, 0x61, 0x72, 0x74, 0x61, 0x6c, 0x21, 0x73, + 0x00, 0x6c, 0x00, 0x6a, 0x00, 0x65, 0x00, 0x64, + 0x00, 0x65, 0x00, 0x07, 0x01, 0x69, 0x00, 0x20, + 0x00, 0x6b, 0x00, 0x76, 0x00, 0x61, 0x00, 0x72, + 0x00, 0x74, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x24, + 0x70, 0x6f, 0x73, 0x6c, 0x6a, 0x65, 0x64, 0x6e, + 0x6a, 0x69, 0x20, 0x6b, 0x76, 0x61, 0x72, 0x74, + 0x61, 0x6c, 0x1c, 0x7a, 0x61, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x6b, 0x76, 0x61, 0x72, 0x74, 0x61, + 0x6c, 0x1e, 0x7a, 0x61, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x6b, 0x76, 0x61, 0x72, 0x74, 0x61, 0x6c, + 0x61, 0x22, 0x70, 0x72, 0x69, 0x6a, 0x65, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x6b, 0x76, 0x61, 0x72, + 0x74, 0x61, 0x6c, 0x24, 0x70, 0x72, 0x69, 0x6a, + 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6b, 0x76, + 0x61, 0x72, 0x74, 0x61, 0x6c, 0x61, 0x0e, 0x71, + 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x14, 0x7a, + 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6b, 0x76, + 0x2e, 0x1a, 0x70, 0x72, 0x69, 0x6a, 0x65, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x6b, 0x76, 0x2e, 0x1a, + 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1c, 0x71, 0x75, + 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x16, 0x6f, 0x76, 0x61, + 0x6a, 0x20, 0x6d, 0x6a, 0x65, 0x73, 0x65, 0x63, + 0x1f, 0x73, 0x00, 0x6c, 0x00, 0x6a, 0x00, 0x65, + 0x00, 0x64, 0x00, 0x65, 0x00, 0x07, 0x01, 0x69, + 0x00, 0x20, 0x00, 0x6d, 0x00, 0x6a, 0x00, 0x65, + 0x00, 0x73, 0x00, 0x65, 0x00, 0x63, 0x00, 0x1b, + 0x70, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x61, 0x01, + 0x6c, 0x00, 0x69, 0x00, 0x20, 0x00, 0x6d, 0x00, + 0x6a, 0x00, 0x65, 0x00, 0x73, 0x00, 0x65, 0x00, + 0x63, 0x00, 0x1a, 0x7a, 0x61, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x6d, 0x6a, 0x65, 0x73, 0x65, 0x63, + 0x1c, 0x7a, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x6d, 0x6a, 0x65, 0x73, 0x65, 0x63, 0x61, 0x1c, + 0x7a, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, + 0x6a, 0x65, 0x73, 0x65, 0x63, 0x69, 0x20, 0x70, + 0x72, 0x69, 0x6a, 0x65, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x6d, 0x6a, 0x65, 0x73, 0x65, 0x63, 0x22, + 0x70, 0x72, 0x69, 0x6a, 0x65, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x6d, 0x6a, 0x65, 0x73, 0x65, 0x63, + 0x61, 0x22, 0x70, 0x72, 0x69, 0x6a, 0x65, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x6a, 0x65, 0x73, + 0x65, 0x63, 0x69, 0x0a, 0x6d, 0x6f, 0x6e, 0x74, + 0x68, 0x14, 0x7a, 0x61, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x6d, 0x6a, 0x2e, 0x1a, 0x70, 0x72, 0x69, + 0x6a, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, + 0x6a, 0x2e, 0x16, 0x6d, 0x6f, 0x6e, 0x74, 0x68, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x18, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x16, 0x6f, 0x76, 0x65, 0x20, + 0x73, 0x65, 0x64, 0x6d, 0x69, 0x63, 0x65, 0x21, + 0x73, 0x00, 0x6c, 0x00, 0x6a, 0x00, 0x65, 0x00, + 0x64, 0x00, 0x65, 0x00, 0x07, 0x01, 0x65, 0x00, + 0x20, 0x00, 0x73, 0x00, 0x65, 0x00, 0x64, 0x00, + 0x6d, 0x00, 0x69, 0x00, 0x63, 0x00, 0x65, 0x00, + 0x1d, 0x70, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x61, + 0x01, 0x6c, 0x00, 0x65, 0x00, 0x20, 0x00, 0x73, + 0x00, 0x65, 0x00, 0x64, 0x00, 0x6d, 0x00, 0x69, + 0x00, 0x63, 0x00, 0x65, 0x00, 0x1c, 0x7a, 0x61, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, 0x64, + 0x6d, 0x69, 0x63, 0x75, 0x1c, 0x7a, 0x61, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, 0x64, 0x6d, + 0x69, 0x63, 0x65, 0x1c, 0x7a, 0x61, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x73, 0x65, 0x64, 0x6d, 0x69, + 0x63, 0x61, 0x22, 0x70, 0x72, 0x69, 0x6a, 0x65, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, 0x64, + 0x6d, 0x69, 0x63, 0x75, 0x22, 0x70, 0x72, 0x69, + 0x6a, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, + 0x65, 0x64, 0x6d, 0x69, 0x63, 0x65, 0x22, 0x70, + 0x72, 0x69, 0x6a, 0x65, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x73, 0x65, 0x64, 0x6d, 0x69, 0x63, 0x61, + 0x08, 0x77, 0x65, 0x65, 0x6b, 0x16, 0x7a, 0x61, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, 0x64, + 0x2e, 0x1c, 0x70, 0x72, 0x69, 0x6a, 0x65, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, 0x64, 0x2e, + 0x14, 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x16, 0x77, 0x65, 0x65, 0x6b, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0a, + 0x64, 0x61, 0x6e, 0x61, 0x73, 0x0a, 0x73, 0x75, + 0x74, 0x72, 0x61, 0x14, 0x70, 0x72, 0x65, 0x6b, + 0x6f, 0x73, 0x75, 0x74, 0x72, 0x61, 0x13, 0x70, + 0x00, 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, 0x6a, + 0x00, 0x75, 0x00, 0x0d, 0x01, 0x65, 0x00, 0x72, + 0x00, 0x04, 0x2d, 0x32, 0x0b, 0x6a, 0x00, 0x75, + 0x00, 0x0d, 0x01, 0x65, 0x00, 0x72, 0x00, 0x14, + 0x7a, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x64, + 0x61, 0x6e, 0x16, 0x7a, 0x61, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x64, 0x61, 0x6e, 0x61, 0x1a, 0x70, + 0x72, 0x69, 0x6a, 0x65, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x64, 0x61, 0x6e, 0x1c, 0x70, 0x72, 0x69, + 0x6a, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x64, + 0x61, 0x6e, 0x61, 0x06, 0x64, 0x61, 0x79, 0x12, + 0x7a, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x64, + 0x2e, 0x18, 0x70, 0x72, 0x69, 0x6a, 0x65, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x64, 0x2e, 0x12, 0x64, + 0x61, 0x79, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x14, 0x64, 0x61, 0x79, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x10, 0x6f, 0x76, 0x61, 0x6a, + 0x20, 0x73, 0x61, 0x74, 0x14, 0x7a, 0x61, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x61, 0x74, 0x16, + 0x7a, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, + 0x61, 0x74, 0x61, 0x16, 0x7a, 0x61, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x73, 0x61, 0x74, 0x69, 0x1a, + 0x70, 0x72, 0x69, 0x6a, 0x65, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x73, 0x61, 0x74, 0x1c, 0x70, 0x72, + 0x69, 0x6a, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x73, 0x61, 0x74, 0x61, 0x1c, 0x70, 0x72, 0x69, + 0x6a, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, + 0x61, 0x74, 0x69, 0x08, 0x68, 0x6f, 0x75, 0x72, + 0x14, 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x16, 0x68, 0x6f, 0x75, 0x72, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x14, + 0x6f, 0x76, 0x61, 0x20, 0x6d, 0x69, 0x6e, 0x75, + 0x74, 0x61, 0x1a, 0x7a, 0x61, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x75, + 0x1a, 0x7a, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x1a, 0x7a, + 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x61, 0x20, 0x70, 0x72, 0x69, + 0x6a, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, + 0x69, 0x6e, 0x75, 0x74, 0x75, 0x20, 0x70, 0x72, + 0x69, 0x6a, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x20, 0x70, + 0x72, 0x69, 0x6a, 0x65, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x61, 0x0c, + 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x16, 0x7a, + 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, + 0x6e, 0x2e, 0x1c, 0x70, 0x72, 0x69, 0x6a, 0x65, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, + 0x2e, 0x18, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x6d, + 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x08, 0x73, 0x61, 0x64, + 0x61, 0x1c, 0x7a, 0x61, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x73, 0x65, 0x6b, 0x75, 0x6e, 0x64, 0x75, + 0x1c, 0x7a, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x73, 0x65, 0x6b, 0x75, 0x6e, 0x64, 0x65, 0x1c, + 0x7a, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, + 0x65, 0x6b, 0x75, 0x6e, 0x64, 0x69, 0x22, 0x70, + 0x72, 0x69, 0x6a, 0x65, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x73, 0x65, 0x6b, 0x75, 0x6e, 0x64, 0x75, + 0x22, 0x70, 0x72, 0x69, 0x6a, 0x65, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x73, 0x65, 0x6b, 0x75, 0x6e, + 0x64, 0x65, 0x22, 0x70, 0x72, 0x69, 0x6a, 0x65, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, 0x6b, + 0x75, 0x6e, 0x64, 0x69, 0x0c, 0x73, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x16, 0x7a, 0x61, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x73, 0x65, 0x6b, 0x2e, 0x1c, + 0x70, 0x72, 0x69, 0x6a, 0x65, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x73, 0x65, 0x6b, 0x2e, 0x18, 0x73, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x1a, 0x73, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, + 0x75, 0x08, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6e, + 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, + 0x2d, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, + 0x65, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2d, 0x66, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2f, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, + 0x61, 0x2f, 0x62, 0x73, 0x2e, 0x6a, 0x73, 0x0d, + 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, + 0x07, 0x00, 0x00, 0xe2, 0x10, 0x01, 0xa0, 0x01, + 0x00, 0x00, 0x00, 0x06, 0xc8, 0x04, 0xd0, 0x00, + 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, + 0xd2, 0x00, 0x00, 0x00, 0xaa, 0x6a, 0x4d, 0x08, + 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, + 0xd2, 0x00, 0x00, 0x00, 0x43, 0xd0, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd3, 0x00, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xd5, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xe1, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xe2, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xe3, 0x00, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0xe5, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe5, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0xe5, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe3, 0x00, + 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xe8, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xe8, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe9, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xe9, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xee, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xef, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xf1, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xf1, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xe3, 0x00, 0x00, 0x00, 0x4d, 0xf2, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0xf3, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf3, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0xf3, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0xf4, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe3, 0x00, + 0x00, 0x00, 0x4d, 0xf5, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xf3, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xf3, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf4, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, + 0x4d, 0xf6, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf7, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfa, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xfb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xfe, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xe3, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x01, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x01, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x01, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x02, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x02, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe3, 0x00, + 0x00, 0x00, 0x4d, 0x03, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x01, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x01, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x02, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x02, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, + 0x4d, 0x04, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x05, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x08, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x09, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x0c, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x0d, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xe3, 0x00, 0x00, 0x00, 0x4d, 0x0e, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x0f, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0f, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x0f, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x10, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x10, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe3, 0x00, + 0x00, 0x00, 0x4d, 0x11, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x0f, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x0f, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x10, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x10, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, + 0x4d, 0x12, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x13, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, + 0x02, 0x00, 0x00, 0x80, 0x04, 0x16, 0x01, 0x00, + 0x00, 0x4d, 0x17, 0x01, 0x00, 0x00, 0x04, 0x18, + 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x1a, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x1a, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x1b, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x1c, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x1c, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, + 0x4d, 0x1d, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x1e, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x1e, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x1f, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x1f, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x1f, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x4d, 0x20, + 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x1e, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x1e, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x1f, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x1f, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x1f, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xe3, 0x00, 0x00, 0x00, 0x4d, 0x21, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x22, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x23, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x24, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x25, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x27, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x28, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xe3, 0x00, 0x00, 0x00, 0x4d, 0x29, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x23, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x24, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x25, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x26, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x27, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x28, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe3, 0x00, + 0x00, 0x00, 0x4d, 0x2a, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x23, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x24, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x25, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x26, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x27, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x28, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, + 0x4d, 0x2b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x2c, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x0b, 0x04, 0x2d, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x2e, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x2f, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x30, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x31, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x32, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, + 0x4d, 0x33, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x34, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x34, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x34, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x35, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x35, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x35, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x4d, 0x36, + 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x34, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x34, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x34, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x35, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x35, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x35, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xe3, 0x00, 0x00, 0x00, 0x4d, 0x37, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x38, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x39, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x3a, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x3b, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x3c, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x3d, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x3e, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xe3, 0x00, 0x00, 0x00, 0x4d, 0x3f, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x40, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x40, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x40, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x41, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x41, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x41, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe3, 0x00, + 0x00, 0x00, 0x4d, 0x42, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x40, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x40, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x40, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x41, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x41, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x41, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, + 0x4d, 0x43, 0x01, 0x00, 0x00, 0x04, 0x44, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x45, 0x01, + 0x00, 0x00, 0x4d, 0x46, 0x01, 0x00, 0x00, 0x24, + 0x01, 0x00, 0xc8, 0xc4, 0x28, 0x8e, 0x05, 0x01, + 0xbd, 0x02, 0x76, 0x53, 0x35, 0x08, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x08, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x08, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, + 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x1c, 0x1c, 0x1c, 0x12, 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_ca_size = 4272; + +const uint8_t intl_relative_ca[4272] = { + 0x01, 0x6e, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x04, 0x63, 0x61, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x0e, 0x65, 0x6e, 0x67, + 0x75, 0x61, 0x6e, 0x79, 0x19, 0x6c, 0x00, 0x19, + 0x20, 0x61, 0x00, 0x6e, 0x00, 0x79, 0x00, 0x20, + 0x00, 0x71, 0x00, 0x75, 0x00, 0x65, 0x00, 0x20, + 0x00, 0x76, 0x00, 0x65, 0x00, 0x19, 0x6c, 0x00, + 0x19, 0x20, 0x61, 0x00, 0x6e, 0x00, 0x79, 0x00, + 0x20, 0x00, 0x70, 0x00, 0x61, 0x00, 0x73, 0x00, + 0x73, 0x00, 0x61, 0x00, 0x74, 0x00, 0x04, 0x2d, + 0x31, 0x21, 0x64, 0x00, 0x19, 0x20, 0x61, 0x00, + 0x71, 0x00, 0x75, 0x00, 0xed, 0x00, 0x20, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x79, 0x00, 0x06, 0x6f, 0x6e, 0x65, 0x23, 0x64, + 0x00, 0x19, 0x20, 0x61, 0x00, 0x71, 0x00, 0x75, + 0x00, 0xed, 0x00, 0x20, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x79, 0x00, 0x73, + 0x00, 0x0a, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x0c, + 0x66, 0x75, 0x74, 0x75, 0x72, 0x65, 0x14, 0x66, + 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x61, 0x6e, + 0x79, 0x16, 0x66, 0x61, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x61, 0x6e, 0x79, 0x73, 0x08, 0x70, 0x61, + 0x73, 0x74, 0x08, 0x79, 0x65, 0x61, 0x72, 0x14, + 0x79, 0x65, 0x61, 0x72, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x16, 0x79, 0x65, 0x61, 0x72, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x20, 0x61, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x74, 0x72, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x72, 0x65, 0x26, + 0x65, 0x6c, 0x20, 0x74, 0x72, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x72, 0x65, 0x20, 0x71, 0x75, 0x65, + 0x20, 0x76, 0x65, 0x26, 0x65, 0x6c, 0x20, 0x74, + 0x72, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x72, 0x65, + 0x20, 0x70, 0x61, 0x73, 0x73, 0x61, 0x74, 0x2d, + 0x64, 0x00, 0x19, 0x20, 0x61, 0x00, 0x71, 0x00, + 0x75, 0x00, 0xed, 0x00, 0x20, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x74, 0x00, 0x72, 0x00, 0x69, 0x00, + 0x6d, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, + 0x72, 0x00, 0x65, 0x00, 0x2f, 0x64, 0x00, 0x19, + 0x20, 0x61, 0x00, 0x71, 0x00, 0x75, 0x00, 0xed, + 0x00, 0x20, 0x00, 0x61, 0x00, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x74, + 0x00, 0x72, 0x00, 0x69, 0x00, 0x6d, 0x00, 0x65, + 0x00, 0x73, 0x00, 0x74, 0x00, 0x72, 0x00, 0x65, + 0x00, 0x73, 0x00, 0x20, 0x66, 0x61, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x74, 0x72, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x72, 0x65, 0x22, 0x66, 0x61, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x74, 0x72, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x72, 0x65, 0x73, 0x0e, 0x71, + 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x18, 0x61, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, 0x74, 0x72, + 0x69, 0x6d, 0x2e, 0x1e, 0x65, 0x6c, 0x20, 0x74, + 0x72, 0x69, 0x6d, 0x2e, 0x20, 0x71, 0x75, 0x65, + 0x20, 0x76, 0x65, 0x1e, 0x65, 0x6c, 0x20, 0x74, + 0x72, 0x69, 0x6d, 0x2e, 0x20, 0x70, 0x61, 0x73, + 0x73, 0x61, 0x74, 0x25, 0x64, 0x00, 0x19, 0x20, + 0x61, 0x00, 0x71, 0x00, 0x75, 0x00, 0xed, 0x00, + 0x20, 0x00, 0x61, 0x00, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x74, 0x00, + 0x72, 0x00, 0x69, 0x00, 0x6d, 0x00, 0x2e, 0x00, + 0x18, 0x66, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x74, 0x72, 0x69, 0x6d, 0x2e, 0x1a, 0x71, 0x75, + 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x18, 0x74, 0x72, 0x69, 0x6d, + 0x2e, 0x20, 0x76, 0x69, 0x6e, 0x65, 0x6e, 0x74, + 0x18, 0x74, 0x72, 0x69, 0x6d, 0x2e, 0x20, 0x70, + 0x61, 0x73, 0x73, 0x61, 0x74, 0x1c, 0x71, 0x75, + 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x14, 0x61, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x20, 0x6d, 0x65, 0x73, 0x1a, + 0x65, 0x6c, 0x20, 0x6d, 0x65, 0x73, 0x20, 0x71, + 0x75, 0x65, 0x20, 0x76, 0x65, 0x1a, 0x65, 0x6c, + 0x20, 0x6d, 0x65, 0x73, 0x20, 0x70, 0x61, 0x73, + 0x73, 0x61, 0x74, 0x21, 0x64, 0x00, 0x19, 0x20, + 0x61, 0x00, 0x71, 0x00, 0x75, 0x00, 0xed, 0x00, + 0x20, 0x00, 0x61, 0x00, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x6d, 0x00, + 0x65, 0x00, 0x73, 0x00, 0x25, 0x64, 0x00, 0x19, + 0x20, 0x61, 0x00, 0x71, 0x00, 0x75, 0x00, 0xed, + 0x00, 0x20, 0x00, 0x61, 0x00, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x6d, + 0x00, 0x65, 0x00, 0x73, 0x00, 0x6f, 0x00, 0x73, + 0x00, 0x14, 0x66, 0x61, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x6d, 0x65, 0x73, 0x18, 0x66, 0x61, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x65, 0x73, 0x6f, + 0x73, 0x0a, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x16, + 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x18, 0x6d, 0x6f, 0x6e, 0x74, + 0x68, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x1e, 0x61, 0x71, 0x75, 0x65, 0x73, 0x74, 0x61, + 0x20, 0x73, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, + 0x22, 0x6c, 0x61, 0x20, 0x73, 0x65, 0x74, 0x6d, + 0x61, 0x6e, 0x61, 0x20, 0x71, 0x75, 0x65, 0x20, + 0x76, 0x65, 0x24, 0x6c, 0x61, 0x20, 0x73, 0x65, + 0x74, 0x6d, 0x61, 0x6e, 0x61, 0x20, 0x70, 0x61, + 0x73, 0x73, 0x61, 0x64, 0x61, 0x29, 0x64, 0x00, + 0x19, 0x20, 0x61, 0x00, 0x71, 0x00, 0x75, 0x00, + 0xed, 0x00, 0x20, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x73, 0x00, 0x65, 0x00, 0x74, 0x00, 0x6d, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x2b, 0x64, + 0x00, 0x19, 0x20, 0x61, 0x00, 0x71, 0x00, 0x75, + 0x00, 0xed, 0x00, 0x20, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x73, 0x00, 0x65, 0x00, 0x74, 0x00, 0x6d, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x65, 0x00, 0x73, + 0x00, 0x1c, 0x66, 0x61, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x73, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x61, + 0x1e, 0x66, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x73, 0x65, 0x74, 0x6d, 0x61, 0x6e, 0x65, 0x73, + 0x08, 0x77, 0x65, 0x65, 0x6b, 0x1a, 0x61, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x61, 0x20, 0x73, 0x65, + 0x74, 0x6d, 0x2e, 0x1e, 0x6c, 0x61, 0x20, 0x73, + 0x65, 0x74, 0x6d, 0x2e, 0x20, 0x71, 0x75, 0x65, + 0x20, 0x76, 0x65, 0x20, 0x6c, 0x61, 0x20, 0x73, + 0x65, 0x74, 0x6d, 0x2e, 0x20, 0x70, 0x61, 0x73, + 0x73, 0x61, 0x64, 0x61, 0x25, 0x64, 0x00, 0x19, + 0x20, 0x61, 0x00, 0x71, 0x00, 0x75, 0x00, 0xed, + 0x00, 0x20, 0x00, 0x61, 0x00, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x73, + 0x00, 0x65, 0x00, 0x74, 0x00, 0x6d, 0x00, 0x2e, + 0x00, 0x18, 0x66, 0x61, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x73, 0x65, 0x74, 0x6d, 0x2e, 0x14, 0x77, + 0x65, 0x65, 0x6b, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x16, 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x08, 0x61, 0x76, + 0x75, 0x69, 0x08, 0x64, 0x65, 0x6d, 0xe0, 0x16, + 0x64, 0x65, 0x6d, 0xe0, 0x20, 0x70, 0x61, 0x73, + 0x73, 0x61, 0x74, 0x19, 0x61, 0x00, 0x62, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x2d, 0x00, + 0x64, 0x00, 0x19, 0x20, 0x61, 0x00, 0x68, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x04, 0x2d, 0x32, 0x08, + 0x61, 0x68, 0x69, 0x72, 0x21, 0x64, 0x00, 0x19, + 0x20, 0x61, 0x00, 0x71, 0x00, 0x75, 0x00, 0xed, + 0x00, 0x20, 0x00, 0x61, 0x00, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x64, + 0x00, 0x69, 0x00, 0x61, 0x00, 0x23, 0x64, 0x00, + 0x19, 0x20, 0x61, 0x00, 0x71, 0x00, 0x75, 0x00, + 0xed, 0x00, 0x20, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x64, 0x00, 0x69, 0x00, 0x65, 0x00, 0x73, 0x00, + 0x14, 0x66, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x64, 0x69, 0x61, 0x16, 0x66, 0x61, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x64, 0x69, 0x65, 0x73, 0x06, + 0x64, 0x61, 0x79, 0x12, 0x64, 0x61, 0x79, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x14, 0x64, 0x61, + 0x79, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x18, 0x61, 0x71, 0x75, 0x65, 0x73, 0x74, 0x61, + 0x20, 0x68, 0x6f, 0x72, 0x61, 0x23, 0x64, 0x00, + 0x19, 0x20, 0x61, 0x00, 0x71, 0x00, 0x75, 0x00, + 0xed, 0x00, 0x20, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x68, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x61, 0x00, + 0x25, 0x64, 0x00, 0x19, 0x20, 0x61, 0x00, 0x71, + 0x00, 0x75, 0x00, 0xed, 0x00, 0x20, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x68, 0x00, 0x6f, 0x00, 0x72, + 0x00, 0x65, 0x00, 0x73, 0x00, 0x16, 0x66, 0x61, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x68, 0x6f, 0x72, + 0x61, 0x18, 0x66, 0x61, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x68, 0x6f, 0x72, 0x65, 0x73, 0x08, 0x68, + 0x6f, 0x75, 0x72, 0x1d, 0x64, 0x00, 0x19, 0x20, + 0x61, 0x00, 0x71, 0x00, 0x75, 0x00, 0xed, 0x00, + 0x20, 0x00, 0x61, 0x00, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x68, 0x00, + 0x10, 0x66, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x68, 0x14, 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x1d, 0x64, 0x00, 0x18, + 0x20, 0x61, 0x00, 0x71, 0x00, 0x75, 0x00, 0xed, + 0x00, 0x20, 0x00, 0x61, 0x00, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x68, + 0x00, 0x16, 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x18, 0x61, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x20, 0x6d, 0x69, 0x6e, + 0x75, 0x74, 0x25, 0x64, 0x00, 0x19, 0x20, 0x61, + 0x00, 0x71, 0x00, 0x75, 0x00, 0xed, 0x00, 0x20, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x6d, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x75, 0x00, 0x74, 0x00, 0x27, + 0x64, 0x00, 0x19, 0x20, 0x61, 0x00, 0x71, 0x00, + 0x75, 0x00, 0xed, 0x00, 0x20, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x6d, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x75, 0x00, 0x74, 0x00, 0x73, 0x00, 0x18, 0x66, + 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x1a, 0x66, 0x61, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x74, + 0x73, 0x0c, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, + 0x21, 0x64, 0x00, 0x19, 0x20, 0x61, 0x00, 0x71, + 0x00, 0x75, 0x00, 0xed, 0x00, 0x20, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x6d, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x14, 0x66, 0x61, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x6d, 0x69, 0x6e, 0x18, 0x6d, 0x69, 0x6e, + 0x75, 0x74, 0x65, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x1a, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x06, + 0x61, 0x72, 0x61, 0x25, 0x64, 0x00, 0x19, 0x20, + 0x61, 0x00, 0x71, 0x00, 0x75, 0x00, 0xed, 0x00, + 0x20, 0x00, 0x61, 0x00, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x73, 0x00, + 0x65, 0x00, 0x67, 0x00, 0x6f, 0x00, 0x6e, 0x00, + 0x27, 0x64, 0x00, 0x19, 0x20, 0x61, 0x00, 0x71, + 0x00, 0x75, 0x00, 0xed, 0x00, 0x20, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x73, 0x00, 0x65, 0x00, 0x67, + 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x73, 0x00, 0x18, + 0x66, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, + 0x65, 0x67, 0x6f, 0x6e, 0x1a, 0x66, 0x61, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, 0x67, 0x6f, + 0x6e, 0x73, 0x0c, 0x73, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x1d, 0x64, 0x00, 0x19, 0x20, 0x61, 0x00, + 0x71, 0x00, 0x75, 0x00, 0xed, 0x00, 0x20, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x73, 0x00, 0x10, 0x66, + 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x18, + 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x73, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, + 0x6e, 0x75, 0x08, 0x64, 0x61, 0x74, 0x61, 0x70, + 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, + 0x6c, 0x2d, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, + 0x76, 0x65, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2d, + 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2f, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, + 0x74, 0x61, 0x2f, 0x63, 0x61, 0x2e, 0x6a, 0x73, + 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, + 0x00, 0x07, 0x00, 0x00, 0x92, 0x10, 0x01, 0xa0, + 0x01, 0x00, 0x00, 0x00, 0x06, 0xc8, 0x04, 0xd0, + 0x00, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, + 0x42, 0xd2, 0x00, 0x00, 0x00, 0xaa, 0x6a, 0xfd, + 0x07, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, + 0x42, 0xd2, 0x00, 0x00, 0x00, 0x43, 0xd0, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd3, 0x00, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe4, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe7, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xec, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xee, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xef, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xf1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xec, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xf3, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xef, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xf4, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xf7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf8, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xfc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xf7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf8, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xfd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xf7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf8, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xfe, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xff, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x01, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x02, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0x06, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x07, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x09, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0a, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0x0c, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x07, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x09, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0a, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0x0d, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x0e, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x10, 0x01, 0x00, 0x00, + 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, 0x11, 0x01, + 0x00, 0x00, 0x4d, 0x12, 0x01, 0x00, 0x00, 0x04, + 0x13, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x16, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x17, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x18, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x0e, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x01, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0x10, 0x01, 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, + 0x80, 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, 0x12, + 0x01, 0x00, 0x00, 0x04, 0x13, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x14, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0x19, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x0e, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x10, 0x01, 0x00, 0x00, + 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, 0x11, 0x01, + 0x00, 0x00, 0x4d, 0x12, 0x01, 0x00, 0x00, 0x04, + 0x13, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x16, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x17, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x1a, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x1b, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x1c, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x1f, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0x20, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x1b, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x21, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x22, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x22, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x23, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x1b, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x24, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x24, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x22, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x22, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0x25, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x26, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x27, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x28, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x29, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x2a, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x2b, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x26, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x2c, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x2c, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x2d, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x2d, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0x2e, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x26, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x2c, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x2c, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x2d, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x2d, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x2f, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x30, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x31, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x32, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x33, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x34, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0x35, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x30, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x36, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x36, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x37, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x37, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x38, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x30, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x36, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x36, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x37, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x37, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0x39, 0x01, 0x00, 0x00, 0x04, 0x3a, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x3b, + 0x01, 0x00, 0x00, 0x4d, 0x3c, 0x01, 0x00, 0x00, + 0x24, 0x01, 0x00, 0xc8, 0xc4, 0x28, 0xfa, 0x04, + 0x01, 0xb5, 0x02, 0x76, 0x53, 0x35, 0x08, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x1c, 0x12, 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_cs_size = 5744; + +const uint8_t intl_relative_cs[5744] = { + 0x01, 0x84, 0x01, 0x1e, 0x5f, 0x5f, 0x61, 0x64, + 0x64, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, + 0x61, 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, + 0x24, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x04, 0x63, 0x73, 0x0c, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x12, 0x74, 0x65, + 0x6e, 0x74, 0x6f, 0x20, 0x72, 0x6f, 0x6b, 0x15, + 0x70, 0x00, 0x59, 0x01, 0xed, 0x00, 0x61, 0x01, + 0x74, 0x00, 0xed, 0x00, 0x20, 0x00, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x14, 0x6d, 0x69, 0x6e, + 0x75, 0x6c, 0xfd, 0x20, 0x72, 0x6f, 0x6b, 0x04, + 0x2d, 0x31, 0x14, 0x7a, 0x61, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x72, 0x6f, 0x6b, 0x06, 0x6f, 0x6e, + 0x65, 0x16, 0x7a, 0x61, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x72, 0x6f, 0x6b, 0x79, 0x06, 0x66, 0x65, + 0x77, 0x16, 0x7a, 0x61, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x72, 0x6f, 0x6b, 0x75, 0x08, 0x6d, 0x61, + 0x6e, 0x79, 0x14, 0x7a, 0x61, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x6c, 0x65, 0x74, 0x0a, 0x6f, 0x74, + 0x68, 0x65, 0x72, 0x0c, 0x66, 0x75, 0x74, 0x75, + 0x72, 0x65, 0x1d, 0x70, 0x00, 0x59, 0x01, 0x65, + 0x00, 0x64, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x1b, + 0x70, 0x00, 0x59, 0x01, 0x65, 0x00, 0x64, 0x00, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x6c, 0x00, 0x65, 0x00, 0x74, 0x00, + 0x79, 0x00, 0x1b, 0x70, 0x00, 0x59, 0x01, 0x65, + 0x00, 0x64, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x08, 0x70, 0x61, + 0x73, 0x74, 0x08, 0x79, 0x65, 0x61, 0x72, 0x12, + 0x7a, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x72, + 0x2e, 0x12, 0x7a, 0x61, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x6c, 0x2e, 0x17, 0x70, 0x00, 0x59, 0x01, + 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x72, 0x00, + 0x2e, 0x00, 0x17, 0x70, 0x00, 0x59, 0x01, 0x65, + 0x00, 0x64, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x6c, 0x00, 0x2e, + 0x00, 0x14, 0x79, 0x65, 0x61, 0x72, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x16, 0x79, 0x65, 0x61, + 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x1d, 0x74, 0x00, 0x6f, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x0d, 0x01, 0x74, 0x00, 0x76, + 0x00, 0x72, 0x00, 0x74, 0x00, 0x6c, 0x00, 0x65, + 0x00, 0x74, 0x00, 0xed, 0x00, 0x21, 0x70, 0x00, + 0x59, 0x01, 0xed, 0x00, 0x61, 0x01, 0x74, 0x00, + 0xed, 0x00, 0x20, 0x00, 0x0d, 0x01, 0x74, 0x00, + 0x76, 0x00, 0x72, 0x00, 0x74, 0x00, 0x6c, 0x00, + 0x65, 0x00, 0x74, 0x00, 0xed, 0x00, 0x21, 0x6d, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x75, 0x00, 0x6c, + 0x00, 0xe9, 0x00, 0x20, 0x00, 0x0d, 0x01, 0x74, + 0x00, 0x76, 0x00, 0x72, 0x00, 0x74, 0x00, 0x6c, + 0x00, 0x65, 0x00, 0x74, 0x00, 0xed, 0x00, 0x21, + 0x7a, 0x00, 0x61, 0x00, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x0d, 0x01, + 0x74, 0x00, 0x76, 0x00, 0x72, 0x00, 0x74, 0x00, + 0x6c, 0x00, 0x65, 0x00, 0x74, 0x00, 0xed, 0x00, + 0x27, 0x70, 0x00, 0x59, 0x01, 0x65, 0x00, 0x64, + 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x0d, 0x01, 0x74, 0x00, 0x76, + 0x00, 0x72, 0x00, 0x74, 0x00, 0x6c, 0x00, 0x65, + 0x00, 0x74, 0x00, 0xed, 0x00, 0x6d, 0x00, 0x29, + 0x70, 0x00, 0x59, 0x01, 0x65, 0x00, 0x64, 0x00, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x0d, 0x01, 0x74, 0x00, 0x76, 0x00, + 0x72, 0x00, 0x74, 0x00, 0x6c, 0x00, 0x65, 0x00, + 0x74, 0x00, 0xed, 0x00, 0x6d, 0x00, 0x69, 0x00, + 0x25, 0x70, 0x00, 0x59, 0x01, 0x65, 0x00, 0x64, + 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x0d, 0x01, 0x74, 0x00, 0x76, + 0x00, 0x72, 0x00, 0x74, 0x00, 0x6c, 0x00, 0x65, + 0x00, 0x74, 0x00, 0xed, 0x00, 0x0e, 0x71, 0x75, + 0x61, 0x72, 0x74, 0x65, 0x72, 0x0c, 0x2b, 0x7b, + 0x30, 0x7d, 0x20, 0x51, 0x0c, 0x2d, 0x7b, 0x30, + 0x7d, 0x20, 0x51, 0x1a, 0x71, 0x75, 0x61, 0x72, + 0x74, 0x65, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x1c, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, + 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x17, 0x74, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x6d, 0x00, 0x1b, + 0x01, 0x73, 0x00, 0xed, 0x00, 0x63, 0x00, 0x19, + 0x70, 0x00, 0x59, 0x01, 0xed, 0x00, 0x61, 0x01, + 0x74, 0x00, 0xed, 0x00, 0x20, 0x00, 0x6d, 0x00, + 0x1b, 0x01, 0x73, 0x00, 0xed, 0x00, 0x63, 0x00, + 0x19, 0x6d, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x75, + 0x00, 0x6c, 0x00, 0xfd, 0x00, 0x20, 0x00, 0x6d, + 0x00, 0x1b, 0x01, 0x73, 0x00, 0xed, 0x00, 0x63, + 0x00, 0x19, 0x7a, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x6d, 0x00, 0x1b, 0x01, 0x73, 0x00, 0xed, 0x00, + 0x63, 0x00, 0x1b, 0x7a, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x6d, 0x00, 0x1b, 0x01, 0x73, 0x00, 0xed, + 0x00, 0x63, 0x00, 0x65, 0x00, 0x1b, 0x7a, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x6d, 0x00, 0x1b, 0x01, + 0x73, 0x00, 0xed, 0x00, 0x63, 0x00, 0x6f, 0x01, + 0x21, 0x70, 0x00, 0x59, 0x01, 0x65, 0x00, 0x64, + 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x6d, 0x00, 0x1b, 0x01, 0x73, + 0x00, 0xed, 0x00, 0x63, 0x00, 0x65, 0x00, 0x6d, + 0x00, 0x1f, 0x70, 0x00, 0x59, 0x01, 0x65, 0x00, + 0x64, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x6d, 0x00, 0x1b, 0x01, + 0x73, 0x00, 0xed, 0x00, 0x63, 0x00, 0x69, 0x00, + 0x1f, 0x70, 0x00, 0x59, 0x01, 0x65, 0x00, 0x64, + 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x6d, 0x00, 0x1b, 0x01, 0x73, + 0x00, 0xed, 0x00, 0x63, 0x00, 0x65, 0x00, 0x0a, + 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x15, 0x74, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x6d, 0x00, 0x1b, 0x01, 0x73, 0x00, + 0x2e, 0x00, 0x17, 0x70, 0x00, 0x59, 0x01, 0xed, + 0x00, 0x61, 0x01, 0x74, 0x00, 0xed, 0x00, 0x20, + 0x00, 0x6d, 0x00, 0x1b, 0x01, 0x73, 0x00, 0x2e, + 0x00, 0x17, 0x6d, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x75, 0x00, 0x6c, 0x00, 0xfd, 0x00, 0x20, 0x00, + 0x6d, 0x00, 0x1b, 0x01, 0x73, 0x00, 0x2e, 0x00, + 0x17, 0x7a, 0x00, 0x61, 0x00, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x6d, + 0x00, 0x1b, 0x01, 0x73, 0x00, 0x2e, 0x00, 0x1b, + 0x70, 0x00, 0x59, 0x01, 0x65, 0x00, 0x64, 0x00, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x6d, 0x00, 0x1b, 0x01, 0x73, 0x00, + 0x2e, 0x00, 0x16, 0x6d, 0x6f, 0x6e, 0x74, 0x68, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x18, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x16, 0x74, 0x65, 0x6e, 0x74, + 0x6f, 0x20, 0x74, 0xfd, 0x64, 0x65, 0x6e, 0x19, + 0x70, 0x00, 0x59, 0x01, 0xed, 0x00, 0x61, 0x01, + 0x74, 0x00, 0xed, 0x00, 0x20, 0x00, 0x74, 0x00, + 0xfd, 0x00, 0x64, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x18, 0x6d, 0x69, 0x6e, 0x75, 0x6c, 0xfd, 0x20, + 0x74, 0xfd, 0x64, 0x65, 0x6e, 0x18, 0x7a, 0x61, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x74, 0xfd, 0x64, + 0x65, 0x6e, 0x18, 0x7a, 0x61, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x74, 0xfd, 0x64, 0x6e, 0x79, 0x18, + 0x7a, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x74, + 0xfd, 0x64, 0x6e, 0x65, 0x19, 0x7a, 0x00, 0x61, + 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x74, 0x00, 0xfd, 0x00, 0x64, + 0x00, 0x6e, 0x00, 0x6f, 0x01, 0x1f, 0x70, 0x00, + 0x59, 0x01, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x74, 0x00, 0xfd, 0x00, 0x64, 0x00, 0x6e, 0x00, + 0x65, 0x00, 0x6d, 0x00, 0x1d, 0x70, 0x00, 0x59, + 0x01, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x74, + 0x00, 0xfd, 0x00, 0x64, 0x00, 0x6e, 0x00, 0x79, + 0x00, 0x1d, 0x70, 0x00, 0x59, 0x01, 0x65, 0x00, + 0x64, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x74, 0x00, 0xfd, 0x00, + 0x64, 0x00, 0x6e, 0x00, 0x65, 0x00, 0x08, 0x77, + 0x65, 0x65, 0x6b, 0x14, 0x74, 0x65, 0x6e, 0x74, + 0x6f, 0x20, 0x74, 0xfd, 0x64, 0x2e, 0x17, 0x70, + 0x00, 0x59, 0x01, 0xed, 0x00, 0x61, 0x01, 0x74, + 0x00, 0xed, 0x00, 0x20, 0x00, 0x74, 0x00, 0xfd, + 0x00, 0x64, 0x00, 0x2e, 0x00, 0x16, 0x6d, 0x69, + 0x6e, 0x75, 0x6c, 0xfd, 0x20, 0x74, 0xfd, 0x64, + 0x2e, 0x16, 0x7a, 0x61, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x74, 0xfd, 0x64, 0x2e, 0x1b, 0x70, 0x00, + 0x59, 0x01, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x74, 0x00, 0xfd, 0x00, 0x64, 0x00, 0x2e, 0x00, + 0x14, 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x16, 0x77, 0x65, 0x65, 0x6b, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x08, + 0x64, 0x6e, 0x65, 0x73, 0x0a, 0x7a, 0xed, 0x74, + 0x72, 0x61, 0x0f, 0x70, 0x00, 0x6f, 0x00, 0x7a, + 0x00, 0xed, 0x00, 0x74, 0x00, 0x59, 0x01, 0xed, + 0x00, 0x17, 0x70, 0x00, 0x59, 0x01, 0x65, 0x00, + 0x64, 0x00, 0x65, 0x00, 0x76, 0x00, 0x0d, 0x01, + 0xed, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6d, 0x00, + 0x04, 0x2d, 0x32, 0x0b, 0x76, 0x00, 0x0d, 0x01, + 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, 0x14, 0x7a, + 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x64, 0x65, + 0x6e, 0x14, 0x7a, 0x61, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x64, 0x6e, 0x79, 0x14, 0x7a, 0x61, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x64, 0x6e, 0x65, 0x14, + 0x7a, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x64, + 0x6e, 0xed, 0x1b, 0x70, 0x00, 0x59, 0x01, 0x65, + 0x00, 0x64, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x64, 0x00, 0x6e, + 0x00, 0x65, 0x00, 0x6d, 0x00, 0x19, 0x70, 0x00, + 0x59, 0x01, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x64, 0x00, 0x6e, 0x00, 0x79, 0x00, 0x19, 0x70, + 0x00, 0x59, 0x01, 0x65, 0x00, 0x64, 0x00, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x64, 0x00, 0x6e, 0x00, 0x65, 0x00, 0x06, + 0x64, 0x61, 0x79, 0x12, 0x64, 0x61, 0x79, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x14, 0x64, 0x61, + 0x79, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x16, 0x74, 0x75, 0x74, 0x6f, 0x20, 0x68, 0x6f, + 0x64, 0x69, 0x6e, 0x75, 0x1a, 0x7a, 0x61, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x68, 0x6f, 0x64, 0x69, + 0x6e, 0x75, 0x1a, 0x7a, 0x61, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x68, 0x6f, 0x64, 0x69, 0x6e, 0x79, + 0x18, 0x7a, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x68, 0x6f, 0x64, 0x69, 0x6e, 0x21, 0x70, 0x00, + 0x59, 0x01, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x68, 0x00, 0x6f, 0x00, 0x64, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x6f, 0x00, 0x75, 0x00, 0x23, 0x70, + 0x00, 0x59, 0x01, 0x65, 0x00, 0x64, 0x00, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x68, 0x00, 0x6f, 0x00, 0x64, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x69, + 0x00, 0x1f, 0x70, 0x00, 0x59, 0x01, 0x65, 0x00, + 0x64, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x68, 0x00, 0x6f, 0x00, + 0x64, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x79, 0x00, + 0x08, 0x68, 0x6f, 0x75, 0x72, 0x10, 0x7a, 0x61, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x68, 0x15, 0x70, + 0x00, 0x59, 0x01, 0x65, 0x00, 0x64, 0x00, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x68, 0x00, 0x14, 0x68, 0x6f, 0x75, 0x72, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, 0x68, + 0x6f, 0x75, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x16, 0x74, 0x75, 0x74, 0x6f, 0x20, + 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x75, 0x1a, 0x7a, + 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x75, 0x1a, 0x7a, 0x61, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x75, + 0x74, 0x79, 0x18, 0x7a, 0x61, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x21, + 0x70, 0x00, 0x59, 0x01, 0x65, 0x00, 0x64, 0x00, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x6d, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x75, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x75, 0x00, + 0x23, 0x70, 0x00, 0x59, 0x01, 0x65, 0x00, 0x64, + 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x6d, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x75, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6d, + 0x00, 0x69, 0x00, 0x1f, 0x70, 0x00, 0x59, 0x01, + 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x6d, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x75, 0x00, 0x74, 0x00, + 0x79, 0x00, 0x0c, 0x6d, 0x69, 0x6e, 0x75, 0x74, + 0x65, 0x14, 0x7a, 0x61, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x6d, 0x69, 0x6e, 0x19, 0x70, 0x00, 0x59, + 0x01, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x6d, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x18, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x1a, 0x6d, 0x69, 0x6e, 0x75, 0x74, + 0x65, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x08, 0x6e, 0x79, 0x6e, 0xed, 0x1c, 0x7a, 0x61, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, 0x6b, + 0x75, 0x6e, 0x64, 0x75, 0x1c, 0x7a, 0x61, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, 0x6b, 0x75, + 0x6e, 0x64, 0x79, 0x1a, 0x7a, 0x61, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x73, 0x65, 0x6b, 0x75, 0x6e, + 0x64, 0x23, 0x70, 0x00, 0x59, 0x01, 0x65, 0x00, + 0x64, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x73, 0x00, 0x65, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x64, 0x00, + 0x6f, 0x00, 0x75, 0x00, 0x25, 0x70, 0x00, 0x59, + 0x01, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x73, + 0x00, 0x65, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x64, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x69, + 0x00, 0x21, 0x70, 0x00, 0x59, 0x01, 0x65, 0x00, + 0x64, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x73, 0x00, 0x65, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x64, 0x00, + 0x79, 0x00, 0x0c, 0x73, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x10, 0x7a, 0x61, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x73, 0x15, 0x70, 0x00, 0x59, 0x01, 0x65, + 0x00, 0x64, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x73, 0x00, 0x18, + 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x73, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, + 0x6e, 0x75, 0x08, 0x64, 0x61, 0x74, 0x61, 0x70, + 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, + 0x6c, 0x2d, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, + 0x76, 0x65, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2d, + 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2f, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, + 0x74, 0x61, 0x2f, 0x63, 0x73, 0x2e, 0x6a, 0x73, + 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, + 0x00, 0x07, 0x00, 0x00, 0xd2, 0x17, 0x01, 0xa0, + 0x01, 0x00, 0x00, 0x00, 0x06, 0xc8, 0x04, 0xd0, + 0x00, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, + 0x42, 0xd2, 0x00, 0x00, 0x00, 0xaa, 0x6a, 0xbd, + 0x0b, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, + 0x42, 0xd2, 0x00, 0x00, 0x00, 0x43, 0xd0, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd3, 0x00, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe2, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe3, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x04, 0xe3, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe7, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0xe8, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe9, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe9, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x04, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe7, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0xe8, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe9, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe9, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x04, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0xec, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xed, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xef, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf0, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0xf0, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf1, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf2, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0xf4, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xed, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xef, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf5, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0xf5, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf6, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf6, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0xf7, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xed, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xef, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf5, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0xf5, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf6, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf6, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0xf8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf9, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xfb, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfc, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0xfe, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xff, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0x02, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x03, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x05, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x06, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x07, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x07, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0x08, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x03, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x05, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x06, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x07, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x07, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0x09, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x0c, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0d, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0x10, 0x01, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x11, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x12, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0x14, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x17, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x18, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x18, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x18, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0x18, 0x01, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x19, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x19, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0x1a, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x17, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x18, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x18, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x18, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0x18, 0x01, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x19, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x19, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0x1b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x1c, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x1e, 0x01, 0x00, 0x00, + 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x01, + 0x00, 0x00, 0x4d, 0x20, 0x01, 0x00, 0x00, 0x04, + 0x21, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x22, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x23, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x24, + 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x04, 0x25, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x27, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x28, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x27, + 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0x29, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x1c, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x1d, 0x01, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0x1e, 0x01, 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, + 0x80, 0x04, 0x1f, 0x01, 0x00, 0x00, 0x4d, 0x20, + 0x01, 0x00, 0x00, 0x04, 0x21, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x22, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x23, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x24, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0x25, 0x01, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x26, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x27, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x28, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x04, 0x27, 0x01, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0x2a, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x1c, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x1e, 0x01, 0x00, 0x00, + 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, 0x1f, 0x01, + 0x00, 0x00, 0x4d, 0x20, 0x01, 0x00, 0x00, 0x04, + 0x21, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x22, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x23, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x24, + 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x04, 0x25, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x27, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x28, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x27, + 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0x2b, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x2c, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x2d, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x2e, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x2e, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0x2f, 0x01, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x30, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x31, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x32, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x04, 0x31, 0x01, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0x33, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x2c, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x34, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x34, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x34, + 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x04, 0x34, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x35, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x35, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x35, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x35, + 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0x36, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x2c, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x34, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x34, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x34, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0x34, 0x01, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x35, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x35, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x35, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x04, 0x35, 0x01, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0x37, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x38, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x39, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x3a, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x3a, + 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x04, 0x3b, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x3c, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x3d, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x3e, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x3d, + 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0x3f, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x38, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x40, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x40, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x40, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0x40, 0x01, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x41, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x41, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x41, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x04, 0x41, 0x01, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0x42, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x38, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x40, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x40, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x40, + 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x04, 0x40, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x41, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x41, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x41, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x41, + 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0x43, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x44, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x45, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x46, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x49, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x44, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0x4e, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x44, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x51, + 0x01, 0x00, 0x00, 0x4d, 0x52, 0x01, 0x00, 0x00, + 0x24, 0x01, 0x00, 0xc8, 0xc4, 0x28, 0xa6, 0x05, + 0x01, 0x95, 0x03, 0x76, 0x53, 0x35, 0x08, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x1c, 0x1c, 0x12, 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_da_size = 3738; + +const uint8_t intl_relative_da[3738] = { + 0x01, 0x6a, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x04, 0x64, 0x61, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x08, 0x69, 0x20, 0xe5, + 0x72, 0x10, 0x6e, 0xe6, 0x73, 0x74, 0x65, 0x20, + 0xe5, 0x72, 0x12, 0x73, 0x69, 0x64, 0x73, 0x74, + 0x65, 0x20, 0xe5, 0x72, 0x04, 0x2d, 0x31, 0x12, + 0x6f, 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0xe5, + 0x72, 0x06, 0x6f, 0x6e, 0x65, 0x0a, 0x6f, 0x74, + 0x68, 0x65, 0x72, 0x0c, 0x66, 0x75, 0x74, 0x75, + 0x72, 0x65, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0xe5, 0x72, 0x20, 0x73, 0x69, + 0x64, 0x65, 0x6e, 0x08, 0x70, 0x61, 0x73, 0x74, + 0x08, 0x79, 0x65, 0x61, 0x72, 0x14, 0x79, 0x65, + 0x61, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x16, 0x79, 0x65, 0x61, 0x72, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x1a, 0x64, 0x65, 0x74, + 0x74, 0x65, 0x20, 0x6b, 0x76, 0x61, 0x72, 0x74, + 0x61, 0x6c, 0x1a, 0x6e, 0xe6, 0x73, 0x74, 0x65, + 0x20, 0x6b, 0x76, 0x61, 0x72, 0x74, 0x61, 0x6c, + 0x1c, 0x73, 0x69, 0x64, 0x73, 0x74, 0x65, 0x20, + 0x6b, 0x76, 0x61, 0x72, 0x74, 0x61, 0x6c, 0x1c, + 0x6f, 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6b, + 0x76, 0x61, 0x72, 0x74, 0x61, 0x6c, 0x20, 0x6f, + 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6b, 0x76, + 0x61, 0x72, 0x74, 0x61, 0x6c, 0x65, 0x72, 0x2a, + 0x66, 0x6f, 0x72, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x6b, 0x76, 0x61, 0x72, 0x74, 0x61, 0x6c, 0x20, + 0x73, 0x69, 0x64, 0x65, 0x6e, 0x2e, 0x66, 0x6f, + 0x72, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6b, 0x76, + 0x61, 0x72, 0x74, 0x61, 0x6c, 0x65, 0x72, 0x20, + 0x73, 0x69, 0x64, 0x65, 0x6e, 0x0e, 0x71, 0x75, + 0x61, 0x72, 0x74, 0x65, 0x72, 0x14, 0x64, 0x65, + 0x74, 0x74, 0x65, 0x20, 0x6b, 0x76, 0x74, 0x2e, + 0x14, 0x6e, 0xe6, 0x73, 0x74, 0x65, 0x20, 0x6b, + 0x76, 0x74, 0x2e, 0x16, 0x73, 0x69, 0x64, 0x73, + 0x74, 0x65, 0x20, 0x6b, 0x76, 0x74, 0x2e, 0x16, + 0x6f, 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6b, + 0x76, 0x74, 0x2e, 0x24, 0x66, 0x6f, 0x72, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x6b, 0x76, 0x74, 0x2e, + 0x20, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x1a, 0x71, + 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x1c, 0x71, 0x75, 0x61, + 0x72, 0x74, 0x65, 0x72, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x16, 0x64, 0x65, 0x6e, 0x6e, + 0x65, 0x20, 0x6d, 0xe5, 0x6e, 0x65, 0x64, 0x16, + 0x6e, 0xe6, 0x73, 0x74, 0x65, 0x20, 0x6d, 0xe5, + 0x6e, 0x65, 0x64, 0x18, 0x73, 0x69, 0x64, 0x73, + 0x74, 0x65, 0x20, 0x6d, 0xe5, 0x6e, 0x65, 0x64, + 0x18, 0x6f, 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x6d, 0xe5, 0x6e, 0x65, 0x64, 0x1c, 0x6f, 0x6d, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0xe5, 0x6e, + 0x65, 0x64, 0x65, 0x72, 0x26, 0x66, 0x6f, 0x72, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0xe5, 0x6e, + 0x65, 0x64, 0x20, 0x73, 0x69, 0x64, 0x65, 0x6e, + 0x2a, 0x66, 0x6f, 0x72, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x6d, 0xe5, 0x6e, 0x65, 0x64, 0x65, 0x72, + 0x20, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x0a, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x12, 0x64, 0x65, 0x6e, + 0x6e, 0x65, 0x20, 0x6d, 0x64, 0x2e, 0x12, 0x6e, + 0xe6, 0x73, 0x74, 0x65, 0x20, 0x6d, 0x64, 0x2e, + 0x14, 0x73, 0x69, 0x64, 0x73, 0x74, 0x65, 0x20, + 0x6d, 0x64, 0x2e, 0x14, 0x6f, 0x6d, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x6d, 0x64, 0x2e, 0x16, 0x6f, + 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x64, + 0x72, 0x2e, 0x22, 0x66, 0x6f, 0x72, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x6d, 0x64, 0x2e, 0x20, 0x73, + 0x69, 0x64, 0x65, 0x6e, 0x24, 0x66, 0x6f, 0x72, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x64, 0x72, + 0x2e, 0x20, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x16, + 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x18, 0x6d, 0x6f, 0x6e, 0x74, + 0x68, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x12, 0x64, 0x65, 0x6e, 0x6e, 0x65, 0x20, 0x75, + 0x67, 0x65, 0x12, 0x6e, 0xe6, 0x73, 0x74, 0x65, + 0x20, 0x75, 0x67, 0x65, 0x14, 0x73, 0x69, 0x64, + 0x73, 0x74, 0x65, 0x20, 0x75, 0x67, 0x65, 0x14, + 0x6f, 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x75, + 0x67, 0x65, 0x16, 0x6f, 0x6d, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x75, 0x67, 0x65, 0x72, 0x22, 0x66, + 0x6f, 0x72, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x75, + 0x67, 0x65, 0x20, 0x73, 0x69, 0x64, 0x65, 0x6e, + 0x24, 0x66, 0x6f, 0x72, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x75, 0x67, 0x65, 0x72, 0x20, 0x73, 0x69, + 0x64, 0x65, 0x6e, 0x08, 0x77, 0x65, 0x65, 0x6b, + 0x14, 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x16, 0x77, 0x65, 0x65, 0x6b, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0a, + 0x69, 0x20, 0x64, 0x61, 0x67, 0x10, 0x69, 0x20, + 0x6d, 0x6f, 0x72, 0x67, 0x65, 0x6e, 0x18, 0x69, + 0x20, 0x6f, 0x76, 0x65, 0x72, 0x6d, 0x6f, 0x72, + 0x67, 0x65, 0x6e, 0x12, 0x69, 0x20, 0x66, 0x6f, + 0x72, 0x67, 0xe5, 0x72, 0x73, 0x04, 0x2d, 0x32, + 0x0a, 0x69, 0x20, 0x67, 0xe5, 0x72, 0x14, 0x6f, + 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x64, 0x61, + 0x67, 0x16, 0x6f, 0x6d, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x64, 0x61, 0x67, 0x65, 0x22, 0x66, 0x6f, + 0x72, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x64, 0x61, + 0x67, 0x20, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x24, + 0x66, 0x6f, 0x72, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x64, 0x61, 0x67, 0x65, 0x20, 0x73, 0x69, 0x64, + 0x65, 0x6e, 0x06, 0x64, 0x61, 0x79, 0x12, 0x64, + 0x61, 0x79, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x14, 0x64, 0x61, 0x79, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x26, 0x69, 0x20, 0x64, 0x65, + 0x6e, 0x20, 0x6b, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, + 0x64, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x16, + 0x6f, 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x74, + 0x69, 0x6d, 0x65, 0x18, 0x6f, 0x6d, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x72, + 0x24, 0x66, 0x6f, 0x72, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x73, 0x69, + 0x64, 0x65, 0x6e, 0x26, 0x66, 0x6f, 0x72, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x74, 0x69, 0x6d, 0x65, + 0x72, 0x20, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x08, + 0x68, 0x6f, 0x75, 0x72, 0x14, 0x64, 0x65, 0x6e, + 0x6e, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x14, + 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x16, 0x68, 0x6f, 0x75, 0x72, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x28, 0x69, + 0x20, 0x64, 0x65, 0x74, 0x20, 0x6b, 0x6f, 0x6d, + 0x6d, 0x65, 0x6e, 0x64, 0x65, 0x20, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x18, 0x6f, 0x6d, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x74, + 0x1e, 0x6f, 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x74, 0x65, 0x72, + 0x26, 0x66, 0x6f, 0x72, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x20, 0x73, + 0x69, 0x64, 0x65, 0x6e, 0x2c, 0x66, 0x6f, 0x72, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, + 0x75, 0x74, 0x74, 0x65, 0x72, 0x20, 0x73, 0x69, + 0x64, 0x65, 0x6e, 0x0c, 0x6d, 0x69, 0x6e, 0x75, + 0x74, 0x65, 0x14, 0x64, 0x65, 0x74, 0x74, 0x65, + 0x20, 0x6d, 0x69, 0x6e, 0x2e, 0x16, 0x6f, 0x6d, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, + 0x2e, 0x24, 0x66, 0x6f, 0x72, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x2e, 0x20, 0x73, + 0x69, 0x64, 0x65, 0x6e, 0x18, 0x6d, 0x69, 0x6e, + 0x75, 0x74, 0x65, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x1a, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x04, + 0x6e, 0x75, 0x1a, 0x6f, 0x6d, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x73, 0x65, 0x6b, 0x75, 0x6e, 0x64, + 0x1e, 0x6f, 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x73, 0x65, 0x6b, 0x75, 0x6e, 0x64, 0x65, 0x72, + 0x28, 0x66, 0x6f, 0x72, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x73, 0x65, 0x6b, 0x75, 0x6e, 0x64, 0x20, + 0x73, 0x69, 0x64, 0x65, 0x6e, 0x2c, 0x66, 0x6f, + 0x72, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, + 0x6b, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x73, + 0x69, 0x64, 0x65, 0x6e, 0x0c, 0x73, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x16, 0x6f, 0x6d, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x73, 0x65, 0x6b, 0x2e, 0x24, + 0x66, 0x6f, 0x72, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x73, 0x65, 0x6b, 0x2e, 0x20, 0x73, 0x69, 0x64, + 0x65, 0x6e, 0x18, 0x73, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1a, + 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x08, 0x6c, 0x61, + 0x74, 0x6e, 0x08, 0x64, 0x61, 0x74, 0x61, 0x70, + 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, + 0x6c, 0x2d, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, + 0x76, 0x65, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2d, + 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2f, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, + 0x74, 0x61, 0x2f, 0x64, 0x61, 0x2e, 0x6a, 0x73, + 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, + 0x00, 0x07, 0x00, 0x00, 0xfe, 0x0f, 0x01, 0xa0, + 0x01, 0x00, 0x00, 0x00, 0x06, 0xc8, 0x04, 0xd0, + 0x00, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, + 0x42, 0xd2, 0x00, 0x00, 0x00, 0xaa, 0x6a, 0xe9, + 0x07, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, + 0x42, 0xd2, 0x00, 0x00, 0x00, 0x43, 0xd0, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd3, 0x00, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe2, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xe3, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xe4, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe5, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xec, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xed, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xef, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xec, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xed, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xf0, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf1, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xf3, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf4, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xf8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf9, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xfb, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfc, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xf9, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xfb, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfc, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x02, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x04, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x05, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x09, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x02, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x04, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x05, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x0a, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x02, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x04, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x05, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x0b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x0c, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x0e, 0x01, 0x00, 0x00, + 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x01, + 0x00, 0x00, 0x4d, 0x10, 0x01, 0x00, 0x00, 0x04, + 0x11, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x13, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x14, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x16, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x0c, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x0d, 0x01, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0x0e, 0x01, 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, + 0x80, 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, 0x10, + 0x01, 0x00, 0x00, 0x04, 0x11, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x12, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x17, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x0c, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x0e, 0x01, 0x00, 0x00, + 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x01, + 0x00, 0x00, 0x4d, 0x10, 0x01, 0x00, 0x00, 0x04, + 0x11, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x13, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x14, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x18, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x19, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x1a, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x1b, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x1c, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x1e, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x1f, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x1a, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x1b, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x1c, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x1d, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x20, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x1f, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x1a, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x1b, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x1c, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x21, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x22, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x23, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x24, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x25, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x26, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x27, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x28, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x29, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x29, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x2a, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x2a, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x2b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x28, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x29, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x29, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x2a, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x2a, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x2c, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x2d, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x2e, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x30, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x31, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x32, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x33, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x33, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x34, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x34, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0x35, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x33, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x33, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x34, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x34, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x36, 0x01, + 0x00, 0x00, 0x04, 0x37, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x2d, 0x01, 0x00, 0x00, 0x4d, + 0x38, 0x01, 0x00, 0x00, 0x24, 0x01, 0x00, 0xc8, + 0xc4, 0x28, 0xf2, 0x04, 0x01, 0xb3, 0x02, 0x76, + 0x53, 0x35, 0x08, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x1c, 0x12, 0x1c, + 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_de_size = 3673; + +const uint8_t intl_relative_de[3673] = { + 0x01, 0x6d, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x04, 0x64, 0x65, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x16, 0x64, 0x69, 0x65, + 0x73, 0x65, 0x73, 0x20, 0x4a, 0x61, 0x68, 0x72, + 0x1a, 0x6e, 0xe4, 0x63, 0x68, 0x73, 0x74, 0x65, + 0x73, 0x20, 0x4a, 0x61, 0x68, 0x72, 0x18, 0x6c, + 0x65, 0x74, 0x7a, 0x74, 0x65, 0x73, 0x20, 0x4a, + 0x61, 0x68, 0x72, 0x04, 0x2d, 0x31, 0x16, 0x69, + 0x6e, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x4a, 0x61, + 0x68, 0x72, 0x06, 0x6f, 0x6e, 0x65, 0x1a, 0x69, + 0x6e, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x4a, 0x61, + 0x68, 0x72, 0x65, 0x6e, 0x0a, 0x6f, 0x74, 0x68, + 0x65, 0x72, 0x0c, 0x66, 0x75, 0x74, 0x75, 0x72, + 0x65, 0x18, 0x76, 0x6f, 0x72, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x4a, 0x61, 0x68, 0x72, 0x1c, 0x76, + 0x6f, 0x72, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x4a, + 0x61, 0x68, 0x72, 0x65, 0x6e, 0x08, 0x70, 0x61, + 0x73, 0x74, 0x08, 0x79, 0x65, 0x61, 0x72, 0x14, + 0x79, 0x65, 0x61, 0x72, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x16, 0x79, 0x65, 0x61, 0x72, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x1c, 0x64, + 0x69, 0x65, 0x73, 0x65, 0x73, 0x20, 0x51, 0x75, + 0x61, 0x72, 0x74, 0x61, 0x6c, 0x20, 0x6e, 0xe4, + 0x63, 0x68, 0x73, 0x74, 0x65, 0x73, 0x20, 0x51, + 0x75, 0x61, 0x72, 0x74, 0x61, 0x6c, 0x1e, 0x6c, + 0x65, 0x74, 0x7a, 0x74, 0x65, 0x73, 0x20, 0x51, + 0x75, 0x61, 0x72, 0x74, 0x61, 0x6c, 0x1c, 0x69, + 0x6e, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x51, 0x75, + 0x61, 0x72, 0x74, 0x61, 0x6c, 0x20, 0x69, 0x6e, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x51, 0x75, 0x61, + 0x72, 0x74, 0x61, 0x6c, 0x65, 0x6e, 0x1e, 0x76, + 0x6f, 0x72, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x51, + 0x75, 0x61, 0x72, 0x74, 0x61, 0x6c, 0x22, 0x76, + 0x6f, 0x72, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x51, + 0x75, 0x61, 0x72, 0x74, 0x61, 0x6c, 0x65, 0x6e, + 0x0e, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, + 0x1a, 0x69, 0x6e, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x51, 0x75, 0x61, 0x72, 0x74, 0x2e, 0x1c, 0x76, + 0x6f, 0x72, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x51, + 0x75, 0x61, 0x72, 0x74, 0x2e, 0x1a, 0x71, 0x75, + 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x10, 0x69, 0x6e, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x51, 0x12, 0x76, 0x6f, 0x72, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x51, 0x1c, 0x71, + 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x18, 0x64, 0x69, + 0x65, 0x73, 0x65, 0x6e, 0x20, 0x4d, 0x6f, 0x6e, + 0x61, 0x74, 0x1c, 0x6e, 0xe4, 0x63, 0x68, 0x73, + 0x74, 0x65, 0x6e, 0x20, 0x4d, 0x6f, 0x6e, 0x61, + 0x74, 0x1a, 0x6c, 0x65, 0x74, 0x7a, 0x74, 0x65, + 0x6e, 0x20, 0x4d, 0x6f, 0x6e, 0x61, 0x74, 0x18, + 0x69, 0x6e, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x4d, + 0x6f, 0x6e, 0x61, 0x74, 0x1c, 0x69, 0x6e, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x4d, 0x6f, 0x6e, 0x61, + 0x74, 0x65, 0x6e, 0x1a, 0x76, 0x6f, 0x72, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x4d, 0x6f, 0x6e, 0x61, + 0x74, 0x1e, 0x76, 0x6f, 0x72, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x4d, 0x6f, 0x6e, 0x61, 0x74, 0x65, + 0x6e, 0x0a, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x1e, + 0x76, 0x6f, 0x72, 0x20, 0x7b, 0x30, 0x7d, 0xa0, + 0x4d, 0x6f, 0x6e, 0x61, 0x74, 0x65, 0x6e, 0x16, + 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x1a, 0x76, 0x6f, 0x72, 0x20, + 0x7b, 0x30, 0x7d, 0xa0, 0x4d, 0x6f, 0x6e, 0x61, + 0x74, 0x18, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x16, 0x64, + 0x69, 0x65, 0x73, 0x65, 0x20, 0x57, 0x6f, 0x63, + 0x68, 0x65, 0x1a, 0x6e, 0xe4, 0x63, 0x68, 0x73, + 0x74, 0x65, 0x20, 0x57, 0x6f, 0x63, 0x68, 0x65, + 0x18, 0x6c, 0x65, 0x74, 0x7a, 0x74, 0x65, 0x20, + 0x57, 0x6f, 0x63, 0x68, 0x65, 0x18, 0x69, 0x6e, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x57, 0x6f, 0x63, + 0x68, 0x65, 0x1a, 0x69, 0x6e, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x57, 0x6f, 0x63, 0x68, 0x65, 0x6e, + 0x1a, 0x76, 0x6f, 0x72, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x57, 0x6f, 0x63, 0x68, 0x65, 0x1c, 0x76, + 0x6f, 0x72, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x57, + 0x6f, 0x63, 0x68, 0x65, 0x6e, 0x08, 0x77, 0x65, + 0x65, 0x6b, 0x14, 0x77, 0x65, 0x65, 0x6b, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x14, 0x69, 0x6e, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x57, 0x6f, 0x2e, + 0x16, 0x76, 0x6f, 0x72, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x57, 0x6f, 0x2e, 0x16, 0x77, 0x65, 0x65, + 0x6b, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x0a, 0x68, 0x65, 0x75, 0x74, 0x65, 0x0c, 0x6d, + 0x6f, 0x72, 0x67, 0x65, 0x6e, 0x14, 0xfc, 0x62, + 0x65, 0x72, 0x6d, 0x6f, 0x72, 0x67, 0x65, 0x6e, + 0x14, 0x76, 0x6f, 0x72, 0x67, 0x65, 0x73, 0x74, + 0x65, 0x72, 0x6e, 0x04, 0x2d, 0x32, 0x0e, 0x67, + 0x65, 0x73, 0x74, 0x65, 0x72, 0x6e, 0x14, 0x69, + 0x6e, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x54, 0x61, + 0x67, 0x18, 0x69, 0x6e, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x54, 0x61, 0x67, 0x65, 0x6e, 0x16, 0x76, + 0x6f, 0x72, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x54, + 0x61, 0x67, 0x1a, 0x76, 0x6f, 0x72, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x54, 0x61, 0x67, 0x65, 0x6e, + 0x06, 0x64, 0x61, 0x79, 0x12, 0x64, 0x61, 0x79, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x14, 0x64, + 0x61, 0x79, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x20, 0x69, 0x6e, 0x20, 0x64, 0x69, 0x65, + 0x73, 0x65, 0x72, 0x20, 0x53, 0x74, 0x75, 0x6e, + 0x64, 0x65, 0x1a, 0x69, 0x6e, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x53, 0x74, 0x75, 0x6e, 0x64, 0x65, + 0x1c, 0x69, 0x6e, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x53, 0x74, 0x75, 0x6e, 0x64, 0x65, 0x6e, 0x1c, + 0x76, 0x6f, 0x72, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x53, 0x74, 0x75, 0x6e, 0x64, 0x65, 0x1e, 0x76, + 0x6f, 0x72, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x53, + 0x74, 0x75, 0x6e, 0x64, 0x65, 0x6e, 0x08, 0x68, + 0x6f, 0x75, 0x72, 0x16, 0x69, 0x6e, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x53, 0x74, 0x64, 0x2e, 0x18, + 0x76, 0x6f, 0x72, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x53, 0x74, 0x64, 0x2e, 0x14, 0x68, 0x6f, 0x75, + 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, + 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x20, 0x69, 0x6e, 0x20, 0x64, + 0x69, 0x65, 0x73, 0x65, 0x72, 0x20, 0x4d, 0x69, + 0x6e, 0x75, 0x74, 0x65, 0x1a, 0x69, 0x6e, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x4d, 0x69, 0x6e, 0x75, + 0x74, 0x65, 0x1c, 0x69, 0x6e, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x4d, 0x69, 0x6e, 0x75, 0x74, 0x65, + 0x6e, 0x1c, 0x76, 0x6f, 0x72, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x4d, 0x69, 0x6e, 0x75, 0x74, 0x65, + 0x1e, 0x76, 0x6f, 0x72, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x4d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x6e, + 0x0c, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x16, + 0x69, 0x6e, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x4d, + 0x69, 0x6e, 0x2e, 0x18, 0x76, 0x6f, 0x72, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x4d, 0x69, 0x6e, 0x2e, + 0x18, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x10, 0x69, 0x6e, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x12, 0x76, + 0x6f, 0x72, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, + 0x1a, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0a, 0x6a, + 0x65, 0x74, 0x7a, 0x74, 0x1c, 0x69, 0x6e, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x53, 0x65, 0x6b, 0x75, + 0x6e, 0x64, 0x65, 0x1e, 0x69, 0x6e, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x53, 0x65, 0x6b, 0x75, 0x6e, + 0x64, 0x65, 0x6e, 0x1e, 0x76, 0x6f, 0x72, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x53, 0x65, 0x6b, 0x75, + 0x6e, 0x64, 0x65, 0x20, 0x76, 0x6f, 0x72, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x53, 0x65, 0x6b, 0x75, + 0x6e, 0x64, 0x65, 0x6e, 0x0c, 0x73, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x16, 0x69, 0x6e, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x53, 0x65, 0x6b, 0x2e, 0x18, + 0x76, 0x6f, 0x72, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x53, 0x65, 0x6b, 0x2e, 0x18, 0x73, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x10, 0x69, 0x6e, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x73, 0x12, 0x76, 0x6f, 0x72, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x73, 0x1a, 0x73, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, + 0x6e, 0x75, 0x08, 0x64, 0x61, 0x74, 0x61, 0x70, + 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, + 0x6c, 0x2d, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, + 0x76, 0x65, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2d, + 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2f, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, + 0x74, 0x61, 0x2f, 0x64, 0x65, 0x2e, 0x6a, 0x73, + 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, + 0x00, 0x07, 0x00, 0x00, 0xe0, 0x0f, 0x01, 0xa0, + 0x01, 0x00, 0x00, 0x00, 0x06, 0xc8, 0x04, 0xd0, + 0x00, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, + 0x42, 0xd2, 0x00, 0x00, 0x00, 0xaa, 0x6a, 0xcb, + 0x07, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, + 0x42, 0xd2, 0x00, 0x00, 0x00, 0x43, 0xd0, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd3, 0x00, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe4, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe7, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xed, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xee, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xe5, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xf0, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xf1, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xf3, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xf4, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xf8, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xf9, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xf3, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xf4, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xfa, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xfb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xf3, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xf4, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xf8, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xfd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xff, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x00, 0x01, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x04, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0x05, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xff, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x00, 0x01, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x04, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0x06, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xff, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x00, 0x01, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x08, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0x09, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0x0b, 0x01, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x01, + 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, + 0x0d, 0x01, 0x00, 0x00, 0x4d, 0x0e, 0x01, 0x00, + 0x00, 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x10, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x11, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x12, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0x14, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x0a, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0x0b, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, 0x02, + 0x00, 0x00, 0x80, 0x04, 0x0d, 0x01, 0x00, 0x00, + 0x4d, 0x0e, 0x01, 0x00, 0x00, 0x04, 0x0f, 0x01, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x13, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0x15, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0x0b, 0x01, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x01, + 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, + 0x0d, 0x01, 0x00, 0x00, 0x4d, 0x0e, 0x01, 0x00, + 0x00, 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x10, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x11, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x12, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0x16, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x17, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, + 0x04, 0x18, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x1a, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x1b, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0x1c, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x1d, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x1d, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x1e, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0x1f, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x17, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, + 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x1e, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0x20, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x22, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x23, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x24, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x25, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0x26, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x21, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, + 0x04, 0x27, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x27, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x28, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x28, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0x29, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x2a, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x2a, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x2b, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x2b, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0x2c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x2d, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, + 0x04, 0x2e, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x30, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x31, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0x32, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x33, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x33, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x34, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x34, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x35, 0x01, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x36, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x36, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x37, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x37, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0x38, 0x01, 0x00, 0x00, 0x04, 0x39, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x3a, 0x01, 0x00, + 0x00, 0x4d, 0x3b, 0x01, 0x00, 0x00, 0x24, 0x01, + 0x00, 0xc8, 0xc4, 0x28, 0xf8, 0x04, 0x01, 0xb0, + 0x02, 0x76, 0x53, 0x35, 0x08, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x1c, 0x12, 0x1c, 0x1c, + 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_de_DE_size = 3679; + +const uint8_t intl_relative_de_DE[3679] = { + 0x01, 0x6d, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x0a, 0x64, 0x65, 0x2d, 0x44, 0x45, + 0x0c, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x16, + 0x64, 0x69, 0x65, 0x73, 0x65, 0x73, 0x20, 0x4a, + 0x61, 0x68, 0x72, 0x1a, 0x6e, 0xe4, 0x63, 0x68, + 0x73, 0x74, 0x65, 0x73, 0x20, 0x4a, 0x61, 0x68, + 0x72, 0x18, 0x6c, 0x65, 0x74, 0x7a, 0x74, 0x65, + 0x73, 0x20, 0x4a, 0x61, 0x68, 0x72, 0x04, 0x2d, + 0x31, 0x16, 0x69, 0x6e, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x4a, 0x61, 0x68, 0x72, 0x06, 0x6f, 0x6e, + 0x65, 0x1a, 0x69, 0x6e, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x4a, 0x61, 0x68, 0x72, 0x65, 0x6e, 0x0a, + 0x6f, 0x74, 0x68, 0x65, 0x72, 0x0c, 0x66, 0x75, + 0x74, 0x75, 0x72, 0x65, 0x18, 0x76, 0x6f, 0x72, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x4a, 0x61, 0x68, + 0x72, 0x1c, 0x76, 0x6f, 0x72, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x4a, 0x61, 0x68, 0x72, 0x65, 0x6e, + 0x08, 0x70, 0x61, 0x73, 0x74, 0x08, 0x79, 0x65, + 0x61, 0x72, 0x14, 0x79, 0x65, 0x61, 0x72, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, 0x79, 0x65, + 0x61, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x1c, 0x64, 0x69, 0x65, 0x73, 0x65, 0x73, + 0x20, 0x51, 0x75, 0x61, 0x72, 0x74, 0x61, 0x6c, + 0x20, 0x6e, 0xe4, 0x63, 0x68, 0x73, 0x74, 0x65, + 0x73, 0x20, 0x51, 0x75, 0x61, 0x72, 0x74, 0x61, + 0x6c, 0x1e, 0x6c, 0x65, 0x74, 0x7a, 0x74, 0x65, + 0x73, 0x20, 0x51, 0x75, 0x61, 0x72, 0x74, 0x61, + 0x6c, 0x1c, 0x69, 0x6e, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x51, 0x75, 0x61, 0x72, 0x74, 0x61, 0x6c, + 0x20, 0x69, 0x6e, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x51, 0x75, 0x61, 0x72, 0x74, 0x61, 0x6c, 0x65, + 0x6e, 0x1e, 0x76, 0x6f, 0x72, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x51, 0x75, 0x61, 0x72, 0x74, 0x61, + 0x6c, 0x22, 0x76, 0x6f, 0x72, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x51, 0x75, 0x61, 0x72, 0x74, 0x61, + 0x6c, 0x65, 0x6e, 0x0e, 0x71, 0x75, 0x61, 0x72, + 0x74, 0x65, 0x72, 0x1a, 0x69, 0x6e, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x51, 0x75, 0x61, 0x72, 0x74, + 0x2e, 0x1c, 0x76, 0x6f, 0x72, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x51, 0x75, 0x61, 0x72, 0x74, 0x2e, + 0x1a, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x10, 0x69, + 0x6e, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x51, 0x12, + 0x76, 0x6f, 0x72, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x51, 0x1c, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, + 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x18, 0x64, 0x69, 0x65, 0x73, 0x65, 0x6e, 0x20, + 0x4d, 0x6f, 0x6e, 0x61, 0x74, 0x1c, 0x6e, 0xe4, + 0x63, 0x68, 0x73, 0x74, 0x65, 0x6e, 0x20, 0x4d, + 0x6f, 0x6e, 0x61, 0x74, 0x1a, 0x6c, 0x65, 0x74, + 0x7a, 0x74, 0x65, 0x6e, 0x20, 0x4d, 0x6f, 0x6e, + 0x61, 0x74, 0x18, 0x69, 0x6e, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x4d, 0x6f, 0x6e, 0x61, 0x74, 0x1c, + 0x69, 0x6e, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x4d, + 0x6f, 0x6e, 0x61, 0x74, 0x65, 0x6e, 0x1a, 0x76, + 0x6f, 0x72, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x4d, + 0x6f, 0x6e, 0x61, 0x74, 0x1e, 0x76, 0x6f, 0x72, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x4d, 0x6f, 0x6e, + 0x61, 0x74, 0x65, 0x6e, 0x0a, 0x6d, 0x6f, 0x6e, + 0x74, 0x68, 0x1e, 0x76, 0x6f, 0x72, 0x20, 0x7b, + 0x30, 0x7d, 0xa0, 0x4d, 0x6f, 0x6e, 0x61, 0x74, + 0x65, 0x6e, 0x16, 0x6d, 0x6f, 0x6e, 0x74, 0x68, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x76, + 0x6f, 0x72, 0x20, 0x7b, 0x30, 0x7d, 0xa0, 0x4d, + 0x6f, 0x6e, 0x61, 0x74, 0x18, 0x6d, 0x6f, 0x6e, + 0x74, 0x68, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x16, 0x64, 0x69, 0x65, 0x73, 0x65, 0x20, + 0x57, 0x6f, 0x63, 0x68, 0x65, 0x1a, 0x6e, 0xe4, + 0x63, 0x68, 0x73, 0x74, 0x65, 0x20, 0x57, 0x6f, + 0x63, 0x68, 0x65, 0x18, 0x6c, 0x65, 0x74, 0x7a, + 0x74, 0x65, 0x20, 0x57, 0x6f, 0x63, 0x68, 0x65, + 0x18, 0x69, 0x6e, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x57, 0x6f, 0x63, 0x68, 0x65, 0x1a, 0x69, 0x6e, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x57, 0x6f, 0x63, + 0x68, 0x65, 0x6e, 0x1a, 0x76, 0x6f, 0x72, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x57, 0x6f, 0x63, 0x68, + 0x65, 0x1c, 0x76, 0x6f, 0x72, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x57, 0x6f, 0x63, 0x68, 0x65, 0x6e, + 0x08, 0x77, 0x65, 0x65, 0x6b, 0x14, 0x77, 0x65, + 0x65, 0x6b, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x14, 0x69, 0x6e, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x57, 0x6f, 0x2e, 0x16, 0x76, 0x6f, 0x72, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x57, 0x6f, 0x2e, 0x16, + 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x0a, 0x68, 0x65, 0x75, 0x74, + 0x65, 0x0c, 0x6d, 0x6f, 0x72, 0x67, 0x65, 0x6e, + 0x14, 0xfc, 0x62, 0x65, 0x72, 0x6d, 0x6f, 0x72, + 0x67, 0x65, 0x6e, 0x14, 0x76, 0x6f, 0x72, 0x67, + 0x65, 0x73, 0x74, 0x65, 0x72, 0x6e, 0x04, 0x2d, + 0x32, 0x0e, 0x67, 0x65, 0x73, 0x74, 0x65, 0x72, + 0x6e, 0x14, 0x69, 0x6e, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x54, 0x61, 0x67, 0x18, 0x69, 0x6e, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x54, 0x61, 0x67, 0x65, + 0x6e, 0x16, 0x76, 0x6f, 0x72, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x54, 0x61, 0x67, 0x1a, 0x76, 0x6f, + 0x72, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x54, 0x61, + 0x67, 0x65, 0x6e, 0x06, 0x64, 0x61, 0x79, 0x12, + 0x64, 0x61, 0x79, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x14, 0x64, 0x61, 0x79, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x20, 0x69, 0x6e, 0x20, + 0x64, 0x69, 0x65, 0x73, 0x65, 0x72, 0x20, 0x53, + 0x74, 0x75, 0x6e, 0x64, 0x65, 0x1a, 0x69, 0x6e, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x53, 0x74, 0x75, + 0x6e, 0x64, 0x65, 0x1c, 0x69, 0x6e, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x53, 0x74, 0x75, 0x6e, 0x64, + 0x65, 0x6e, 0x1c, 0x76, 0x6f, 0x72, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x53, 0x74, 0x75, 0x6e, 0x64, + 0x65, 0x1e, 0x76, 0x6f, 0x72, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x53, 0x74, 0x75, 0x6e, 0x64, 0x65, + 0x6e, 0x08, 0x68, 0x6f, 0x75, 0x72, 0x16, 0x69, + 0x6e, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x53, 0x74, + 0x64, 0x2e, 0x18, 0x76, 0x6f, 0x72, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x53, 0x74, 0x64, 0x2e, 0x14, + 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x16, 0x68, 0x6f, 0x75, 0x72, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x20, 0x69, + 0x6e, 0x20, 0x64, 0x69, 0x65, 0x73, 0x65, 0x72, + 0x20, 0x4d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x1a, + 0x69, 0x6e, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x4d, + 0x69, 0x6e, 0x75, 0x74, 0x65, 0x1c, 0x69, 0x6e, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x4d, 0x69, 0x6e, + 0x75, 0x74, 0x65, 0x6e, 0x1c, 0x76, 0x6f, 0x72, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x4d, 0x69, 0x6e, + 0x75, 0x74, 0x65, 0x1e, 0x76, 0x6f, 0x72, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x4d, 0x69, 0x6e, 0x75, + 0x74, 0x65, 0x6e, 0x0c, 0x6d, 0x69, 0x6e, 0x75, + 0x74, 0x65, 0x16, 0x69, 0x6e, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x4d, 0x69, 0x6e, 0x2e, 0x18, 0x76, + 0x6f, 0x72, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x4d, + 0x69, 0x6e, 0x2e, 0x18, 0x6d, 0x69, 0x6e, 0x75, + 0x74, 0x65, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x10, 0x69, 0x6e, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x6d, 0x12, 0x76, 0x6f, 0x72, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x6d, 0x1a, 0x6d, 0x69, 0x6e, 0x75, + 0x74, 0x65, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x0a, 0x6a, 0x65, 0x74, 0x7a, 0x74, 0x1c, + 0x69, 0x6e, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x53, + 0x65, 0x6b, 0x75, 0x6e, 0x64, 0x65, 0x1e, 0x69, + 0x6e, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x53, 0x65, + 0x6b, 0x75, 0x6e, 0x64, 0x65, 0x6e, 0x1e, 0x76, + 0x6f, 0x72, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x53, + 0x65, 0x6b, 0x75, 0x6e, 0x64, 0x65, 0x20, 0x76, + 0x6f, 0x72, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x53, + 0x65, 0x6b, 0x75, 0x6e, 0x64, 0x65, 0x6e, 0x0c, + 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x16, 0x69, + 0x6e, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x53, 0x65, + 0x6b, 0x2e, 0x18, 0x76, 0x6f, 0x72, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x53, 0x65, 0x6b, 0x2e, 0x18, + 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x10, 0x69, 0x6e, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x12, 0x76, 0x6f, + 0x72, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x1a, + 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x08, 0x6c, 0x61, + 0x74, 0x6e, 0x04, 0x6e, 0x75, 0x08, 0x64, 0x61, + 0x74, 0x61, 0x76, 0x6e, 0x6f, 0x64, 0x65, 0x5f, + 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, + 0x69, 0x6e, 0x74, 0x6c, 0x2d, 0x72, 0x65, 0x6c, + 0x61, 0x74, 0x69, 0x76, 0x65, 0x2d, 0x74, 0x69, + 0x6d, 0x65, 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, + 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x64, 0x65, + 0x2d, 0x44, 0x45, 0x2e, 0x6a, 0x73, 0x0d, 0x00, + 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, 0x07, + 0x00, 0x00, 0xe0, 0x0f, 0x01, 0xa0, 0x01, 0x00, + 0x00, 0x00, 0x06, 0xc8, 0x04, 0xd0, 0x00, 0x00, + 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, + 0x00, 0x00, 0x00, 0xaa, 0x6a, 0xcb, 0x07, 0x00, + 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, + 0x00, 0x00, 0x00, 0x43, 0xd0, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xd3, 0x00, 0x00, 0x00, 0x4d, 0xd4, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xd5, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdf, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd5, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdf, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe2, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd5, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdf, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe3, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe4, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xe5, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe7, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe8, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe9, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xea, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xec, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xee, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe4, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xef, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xf1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf2, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xf4, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf5, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xf9, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf2, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xf4, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf5, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xfb, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf2, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xf4, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf5, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xfd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xfe, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x00, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x01, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0x05, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xfe, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x00, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x01, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0x06, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xfe, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x00, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x07, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0x09, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x0c, 0x01, 0x00, 0x00, + 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, 0x0d, 0x01, + 0x00, 0x00, 0x4d, 0x0e, 0x01, 0x00, 0x00, 0x04, + 0x0f, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x11, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x12, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x13, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x14, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x0a, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x0b, 0x01, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0x0c, 0x01, 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, + 0x80, 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, 0x0e, + 0x01, 0x00, 0x00, 0x04, 0x0f, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x10, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0x15, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x0c, 0x01, 0x00, 0x00, + 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, 0x0d, 0x01, + 0x00, 0x00, 0x4d, 0x0e, 0x01, 0x00, 0x00, 0x04, + 0x0f, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x11, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x12, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x13, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x16, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x17, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x18, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x1a, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x1b, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0x1c, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x17, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x1d, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x1e, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x1e, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x1f, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x17, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x1d, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0x20, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x21, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x22, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x23, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x24, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x25, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x26, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x21, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x27, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x27, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x28, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x28, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0x29, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x21, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x2a, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x2a, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x2b, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x2b, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x2c, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x2d, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x2e, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x30, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x31, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0x32, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x33, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x33, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x34, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x34, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0x35, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x36, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x36, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x37, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x37, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x38, 0x01, + 0x00, 0x00, 0x04, 0x39, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x3a, 0x01, 0x00, 0x00, 0x4d, + 0x3b, 0x01, 0x00, 0x00, 0x24, 0x01, 0x00, 0xc8, + 0xc4, 0x28, 0xf8, 0x04, 0x01, 0xb0, 0x02, 0x76, + 0x53, 0x35, 0x08, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x1c, 0x12, 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_el_size = 5114; + +const uint8_t intl_relative_el[5114] = { + 0x01, 0x7f, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x04, 0x65, 0x6c, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x0b, 0xc6, 0x03, 0xad, + 0x03, 0xc4, 0x03, 0xbf, 0x03, 0xc2, 0x03, 0x19, + 0xb5, 0x03, 0xc0, 0x03, 0xcc, 0x03, 0xbc, 0x03, + 0xb5, 0x03, 0xbd, 0x03, 0xbf, 0x03, 0x20, 0x00, + 0xad, 0x03, 0xc4, 0x03, 0xbf, 0x03, 0xc2, 0x03, + 0x0b, 0xc0, 0x03, 0xad, 0x03, 0xc1, 0x03, 0xc3, + 0x03, 0xb9, 0x03, 0x04, 0x2d, 0x31, 0x17, 0xc3, + 0x03, 0xb5, 0x03, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0xad, 0x03, 0xc4, + 0x03, 0xbf, 0x03, 0xc2, 0x03, 0x06, 0x6f, 0x6e, + 0x65, 0x15, 0xc3, 0x03, 0xb5, 0x03, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0xad, 0x03, 0xc4, 0x03, 0xb7, 0x03, 0x0a, 0x6f, + 0x74, 0x68, 0x65, 0x72, 0x0c, 0x66, 0x75, 0x74, + 0x75, 0x72, 0x65, 0x23, 0xc0, 0x03, 0xc1, 0x03, + 0xb9, 0x03, 0xbd, 0x03, 0x20, 0x00, 0xb1, 0x03, + 0xc0, 0x03, 0xcc, 0x03, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xad, 0x03, + 0xc4, 0x03, 0xbf, 0x03, 0xc2, 0x03, 0x21, 0xc0, + 0x03, 0xc1, 0x03, 0xb9, 0x03, 0xbd, 0x03, 0x20, + 0x00, 0xb1, 0x03, 0xc0, 0x03, 0xcc, 0x03, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0xad, 0x03, 0xc4, 0x03, 0xb7, 0x03, 0x08, + 0x70, 0x61, 0x73, 0x74, 0x08, 0x79, 0x65, 0x61, + 0x72, 0x14, 0x79, 0x65, 0x61, 0x72, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x1b, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0xad, 0x03, 0xc4, + 0x03, 0xbf, 0x03, 0xc2, 0x03, 0x20, 0x00, 0xc0, + 0x03, 0xc1, 0x03, 0xb9, 0x03, 0xbd, 0x03, 0x19, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0xad, 0x03, 0xc4, 0x03, 0xb7, 0x03, 0x20, 0x00, + 0xc0, 0x03, 0xc1, 0x03, 0xb9, 0x03, 0xbd, 0x03, + 0x16, 0x79, 0x65, 0x61, 0x72, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x1d, 0xc4, 0x03, 0xc1, + 0x03, 0xad, 0x03, 0xc7, 0x03, 0xbf, 0x03, 0xbd, + 0x03, 0x20, 0x00, 0xc4, 0x03, 0xc1, 0x03, 0xaf, + 0x03, 0xbc, 0x03, 0xb7, 0x03, 0xbd, 0x03, 0xbf, + 0x03, 0x1f, 0xb5, 0x03, 0xc0, 0x03, 0xcc, 0x03, + 0xbc, 0x03, 0xb5, 0x03, 0xbd, 0x03, 0xbf, 0x03, + 0x20, 0x00, 0xc4, 0x03, 0xc1, 0x03, 0xaf, 0x03, + 0xbc, 0x03, 0xb7, 0x03, 0xbd, 0x03, 0xbf, 0x03, + 0x27, 0xc0, 0x03, 0xc1, 0x03, 0xbf, 0x03, 0xb7, + 0x03, 0xb3, 0x03, 0xbf, 0x03, 0xcd, 0x03, 0xbc, + 0x03, 0xb5, 0x03, 0xbd, 0x03, 0xbf, 0x03, 0x20, + 0x00, 0xc4, 0x03, 0xc1, 0x03, 0xaf, 0x03, 0xbc, + 0x03, 0xb7, 0x03, 0xbd, 0x03, 0xbf, 0x03, 0x1d, + 0xc3, 0x03, 0xb5, 0x03, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xc4, 0x03, + 0xc1, 0x03, 0xaf, 0x03, 0xbc, 0x03, 0xb7, 0x03, + 0xbd, 0x03, 0xbf, 0x03, 0x1d, 0xc3, 0x03, 0xb5, + 0x03, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0xc4, 0x03, 0xc1, 0x03, 0xaf, + 0x03, 0xbc, 0x03, 0xb7, 0x03, 0xbd, 0x03, 0xb1, + 0x03, 0x29, 0xc0, 0x03, 0xc1, 0x03, 0xb9, 0x03, + 0xbd, 0x03, 0x20, 0x00, 0xb1, 0x03, 0xc0, 0x03, + 0xcc, 0x03, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0xc4, 0x03, 0xc1, 0x03, + 0xaf, 0x03, 0xbc, 0x03, 0xb7, 0x03, 0xbd, 0x03, + 0xbf, 0x03, 0x29, 0xc0, 0x03, 0xc1, 0x03, 0xb9, + 0x03, 0xbd, 0x03, 0x20, 0x00, 0xb1, 0x03, 0xc0, + 0x03, 0xcc, 0x03, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0xc4, 0x03, 0xc1, + 0x03, 0xaf, 0x03, 0xbc, 0x03, 0xb7, 0x03, 0xbd, + 0x03, 0xb1, 0x03, 0x0e, 0x71, 0x75, 0x61, 0x72, + 0x74, 0x65, 0x72, 0x19, 0xc4, 0x03, 0xc1, 0x03, + 0xad, 0x03, 0xc7, 0x03, 0xbf, 0x03, 0xbd, 0x03, + 0x20, 0x00, 0xc4, 0x03, 0xc1, 0x03, 0xaf, 0x03, + 0xbc, 0x03, 0x2e, 0x00, 0x17, 0xb5, 0x03, 0xc0, + 0x03, 0xcc, 0x03, 0xbc, 0x03, 0x2e, 0x00, 0x20, + 0x00, 0xc4, 0x03, 0xc1, 0x03, 0xaf, 0x03, 0xbc, + 0x03, 0x2e, 0x00, 0x19, 0xc0, 0x03, 0xc1, 0x03, + 0xbf, 0x03, 0xb7, 0x03, 0xb3, 0x03, 0x2e, 0x00, + 0x20, 0x00, 0xc4, 0x03, 0xc1, 0x03, 0xaf, 0x03, + 0xbc, 0x03, 0x2e, 0x00, 0x19, 0xc3, 0x03, 0xb5, + 0x03, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0xc4, 0x03, 0xc1, 0x03, 0xaf, + 0x03, 0xbc, 0x03, 0x2e, 0x00, 0x25, 0xc0, 0x03, + 0xc1, 0x03, 0xb9, 0x03, 0xbd, 0x03, 0x20, 0x00, + 0xb1, 0x03, 0xc0, 0x03, 0xcc, 0x03, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0xc4, 0x03, 0xc1, 0x03, 0xaf, 0x03, 0xbc, 0x03, + 0x2e, 0x00, 0x1a, 0x71, 0x75, 0x61, 0x72, 0x74, + 0x65, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x1d, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0xc4, 0x03, 0xc1, 0x03, 0xaf, 0x03, 0xbc, + 0x03, 0x2e, 0x00, 0x20, 0x00, 0xc0, 0x03, 0xc1, + 0x03, 0xb9, 0x03, 0xbd, 0x03, 0x1c, 0x71, 0x75, + 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x19, 0xc4, 0x03, 0xc1, + 0x03, 0xad, 0x03, 0xc7, 0x03, 0xc9, 0x03, 0xbd, + 0x03, 0x20, 0x00, 0xbc, 0x03, 0xae, 0x03, 0xbd, + 0x03, 0xb1, 0x03, 0xc2, 0x03, 0x1d, 0xb5, 0x03, + 0xc0, 0x03, 0xcc, 0x03, 0xbc, 0x03, 0xb5, 0x03, + 0xbd, 0x03, 0xbf, 0x03, 0xc2, 0x03, 0x20, 0x00, + 0xbc, 0x03, 0xae, 0x03, 0xbd, 0x03, 0xb1, 0x03, + 0xc2, 0x03, 0x25, 0xc0, 0x03, 0xc1, 0x03, 0xbf, + 0x03, 0xb7, 0x03, 0xb3, 0x03, 0xbf, 0x03, 0xcd, + 0x03, 0xbc, 0x03, 0xb5, 0x03, 0xbd, 0x03, 0xbf, + 0x03, 0xc2, 0x03, 0x20, 0x00, 0xbc, 0x03, 0xae, + 0x03, 0xbd, 0x03, 0xb1, 0x03, 0xc2, 0x03, 0x17, + 0xc3, 0x03, 0xb5, 0x03, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xbc, 0x03, + 0xae, 0x03, 0xbd, 0x03, 0xb1, 0x03, 0x19, 0xc3, + 0x03, 0xb5, 0x03, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0xbc, 0x03, 0xae, + 0x03, 0xbd, 0x03, 0xb5, 0x03, 0xc2, 0x03, 0x23, + 0xc0, 0x03, 0xc1, 0x03, 0xb9, 0x03, 0xbd, 0x03, + 0x20, 0x00, 0xb1, 0x03, 0xc0, 0x03, 0xcc, 0x03, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0xbc, 0x03, 0xae, 0x03, 0xbd, 0x03, + 0xb1, 0x03, 0x25, 0xc0, 0x03, 0xc1, 0x03, 0xb9, + 0x03, 0xbd, 0x03, 0x20, 0x00, 0xb1, 0x03, 0xc0, + 0x03, 0xcc, 0x03, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0xbc, 0x03, 0xae, + 0x03, 0xbd, 0x03, 0xb5, 0x03, 0xc2, 0x03, 0x0a, + 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x16, 0x6d, 0x6f, + 0x6e, 0x74, 0x68, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x17, 0xc4, 0x03, 0xc1, 0x03, 0xad, 0x03, + 0xc7, 0x03, 0x2e, 0x00, 0x20, 0x00, 0xbc, 0x03, + 0xae, 0x03, 0xbd, 0x03, 0xb1, 0x03, 0xc2, 0x03, + 0x17, 0xb5, 0x03, 0xc0, 0x03, 0xcc, 0x03, 0xbc, + 0x03, 0x2e, 0x00, 0x20, 0x00, 0xbc, 0x03, 0xae, + 0x03, 0xbd, 0x03, 0xb1, 0x03, 0xc2, 0x03, 0x19, + 0xc0, 0x03, 0xc1, 0x03, 0xbf, 0x03, 0xb7, 0x03, + 0xb3, 0x03, 0x2e, 0x00, 0x20, 0x00, 0xbc, 0x03, + 0xae, 0x03, 0xbd, 0x03, 0xb1, 0x03, 0xc2, 0x03, + 0x13, 0xc3, 0x03, 0xb5, 0x03, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xbc, + 0x03, 0x2e, 0x00, 0x17, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0xbc, 0x03, 0x2e, 0x00, + 0x20, 0x00, 0xc0, 0x03, 0xc1, 0x03, 0xb9, 0x03, + 0xbd, 0x03, 0x18, 0x6d, 0x6f, 0x6e, 0x74, 0x68, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x23, + 0xc4, 0x03, 0xc1, 0x03, 0xad, 0x03, 0xc7, 0x03, + 0xbf, 0x03, 0xc5, 0x03, 0xc3, 0x03, 0xb1, 0x03, + 0x20, 0x00, 0xb5, 0x03, 0xb2, 0x03, 0xb4, 0x03, + 0xbf, 0x03, 0xbc, 0x03, 0xac, 0x03, 0xb4, 0x03, + 0xb1, 0x03, 0x21, 0xb5, 0x03, 0xc0, 0x03, 0xcc, + 0x03, 0xbc, 0x03, 0xb5, 0x03, 0xbd, 0x03, 0xb7, + 0x03, 0x20, 0x00, 0xb5, 0x03, 0xb2, 0x03, 0xb4, + 0x03, 0xbf, 0x03, 0xbc, 0x03, 0xac, 0x03, 0xb4, + 0x03, 0xb1, 0x03, 0x29, 0xc0, 0x03, 0xc1, 0x03, + 0xbf, 0x03, 0xb7, 0x03, 0xb3, 0x03, 0xbf, 0x03, + 0xcd, 0x03, 0xbc, 0x03, 0xb5, 0x03, 0xbd, 0x03, + 0xb7, 0x03, 0x20, 0x00, 0xb5, 0x03, 0xb2, 0x03, + 0xb4, 0x03, 0xbf, 0x03, 0xbc, 0x03, 0xac, 0x03, + 0xb4, 0x03, 0xb1, 0x03, 0x1f, 0xc3, 0x03, 0xb5, + 0x03, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0xb5, 0x03, 0xb2, 0x03, 0xb4, + 0x03, 0xbf, 0x03, 0xbc, 0x03, 0xac, 0x03, 0xb4, + 0x03, 0xb1, 0x03, 0x21, 0xc3, 0x03, 0xb5, 0x03, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0xb5, 0x03, 0xb2, 0x03, 0xb4, 0x03, + 0xbf, 0x03, 0xbc, 0x03, 0xac, 0x03, 0xb4, 0x03, + 0xb5, 0x03, 0xc2, 0x03, 0x2b, 0xc0, 0x03, 0xc1, + 0x03, 0xb9, 0x03, 0xbd, 0x03, 0x20, 0x00, 0xb1, + 0x03, 0xc0, 0x03, 0xcc, 0x03, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xb5, + 0x03, 0xb2, 0x03, 0xb4, 0x03, 0xbf, 0x03, 0xbc, + 0x03, 0xac, 0x03, 0xb4, 0x03, 0xb1, 0x03, 0x2d, + 0xc0, 0x03, 0xc1, 0x03, 0xb9, 0x03, 0xbd, 0x03, + 0x20, 0x00, 0xb1, 0x03, 0xc0, 0x03, 0xcc, 0x03, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0xb5, 0x03, 0xb2, 0x03, 0xb4, 0x03, + 0xbf, 0x03, 0xbc, 0x03, 0xac, 0x03, 0xb4, 0x03, + 0xb5, 0x03, 0xc2, 0x03, 0x08, 0x77, 0x65, 0x65, + 0x6b, 0x1d, 0xc4, 0x03, 0xc1, 0x03, 0xad, 0x03, + 0xc7, 0x03, 0x2e, 0x00, 0x20, 0x00, 0xb5, 0x03, + 0xb2, 0x03, 0xb4, 0x03, 0xbf, 0x03, 0xbc, 0x03, + 0xac, 0x03, 0xb4, 0x03, 0xb1, 0x03, 0x1d, 0xb5, + 0x03, 0xc0, 0x03, 0xcc, 0x03, 0xbc, 0x03, 0x2e, + 0x00, 0x20, 0x00, 0xb5, 0x03, 0xb2, 0x03, 0xb4, + 0x03, 0xbf, 0x03, 0xbc, 0x03, 0xac, 0x03, 0xb4, + 0x03, 0xb1, 0x03, 0x1f, 0xc0, 0x03, 0xc1, 0x03, + 0xbf, 0x03, 0xb7, 0x03, 0xb3, 0x03, 0x2e, 0x00, + 0x20, 0x00, 0xb5, 0x03, 0xb2, 0x03, 0xb4, 0x03, + 0xbf, 0x03, 0xbc, 0x03, 0xac, 0x03, 0xb4, 0x03, + 0xb1, 0x03, 0x17, 0xc3, 0x03, 0xb5, 0x03, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0xb5, 0x03, 0xb2, 0x03, 0xb4, 0x03, 0x2e, + 0x00, 0x23, 0xc0, 0x03, 0xc1, 0x03, 0xb9, 0x03, + 0xbd, 0x03, 0x20, 0x00, 0xb1, 0x03, 0xc0, 0x03, + 0xcc, 0x03, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0xb5, 0x03, 0xb2, 0x03, + 0xb4, 0x03, 0x2e, 0x00, 0x14, 0x77, 0x65, 0x65, + 0x6b, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x15, + 0xc4, 0x03, 0xc1, 0x03, 0xad, 0x03, 0xc7, 0x03, + 0x2e, 0x00, 0x20, 0x00, 0xb5, 0x03, 0xb2, 0x03, + 0xb4, 0x03, 0x2e, 0x00, 0x15, 0xb5, 0x03, 0xc0, + 0x03, 0xcc, 0x03, 0xbc, 0x03, 0x2e, 0x00, 0x20, + 0x00, 0xb5, 0x03, 0xb2, 0x03, 0xb4, 0x03, 0x2e, + 0x00, 0x17, 0xc0, 0x03, 0xc1, 0x03, 0xbf, 0x03, + 0xb7, 0x03, 0xb3, 0x03, 0x2e, 0x00, 0x20, 0x00, + 0xb5, 0x03, 0xb2, 0x03, 0xb4, 0x03, 0x2e, 0x00, + 0x1b, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0xb5, 0x03, 0xb2, 0x03, 0xb4, 0x03, 0x2e, + 0x00, 0x20, 0x00, 0xc0, 0x03, 0xc1, 0x03, 0xb9, + 0x03, 0xbd, 0x03, 0x16, 0x77, 0x65, 0x65, 0x6b, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0d, + 0xc3, 0x03, 0xae, 0x03, 0xbc, 0x03, 0xb5, 0x03, + 0xc1, 0x03, 0xb1, 0x03, 0x0b, 0xb1, 0x03, 0xcd, + 0x03, 0xc1, 0x03, 0xb9, 0x03, 0xbf, 0x03, 0x11, + 0xbc, 0x03, 0xb5, 0x03, 0xb8, 0x03, 0xb1, 0x03, + 0xcd, 0x03, 0xc1, 0x03, 0xb9, 0x03, 0xbf, 0x03, + 0x0f, 0xc0, 0x03, 0xc1, 0x03, 0xbf, 0x03, 0xc7, + 0x03, 0xb8, 0x03, 0xad, 0x03, 0xc2, 0x03, 0x04, + 0x2d, 0x32, 0x09, 0xc7, 0x03, 0xb8, 0x03, 0xb5, + 0x03, 0xc2, 0x03, 0x19, 0xc3, 0x03, 0xb5, 0x03, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0xb7, 0x03, 0xbc, 0x03, 0xad, 0x03, + 0xc1, 0x03, 0xb1, 0x03, 0x1b, 0xc3, 0x03, 0xb5, + 0x03, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0xb7, 0x03, 0xbc, 0x03, 0xad, + 0x03, 0xc1, 0x03, 0xb5, 0x03, 0xc2, 0x03, 0x25, + 0xc0, 0x03, 0xc1, 0x03, 0xb9, 0x03, 0xbd, 0x03, + 0x20, 0x00, 0xb1, 0x03, 0xc0, 0x03, 0xcc, 0x03, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0xb7, 0x03, 0xbc, 0x03, 0xad, 0x03, + 0xc1, 0x03, 0xb1, 0x03, 0x27, 0xc0, 0x03, 0xc1, + 0x03, 0xb9, 0x03, 0xbd, 0x03, 0x20, 0x00, 0xb1, + 0x03, 0xc0, 0x03, 0xcc, 0x03, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xb7, + 0x03, 0xbc, 0x03, 0xad, 0x03, 0xc1, 0x03, 0xb5, + 0x03, 0xc2, 0x03, 0x06, 0x64, 0x61, 0x79, 0x15, + 0xc3, 0x03, 0xb5, 0x03, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xb7, 0x03, + 0xbc, 0x03, 0x2e, 0x00, 0x21, 0xc0, 0x03, 0xc1, + 0x03, 0xb9, 0x03, 0xbd, 0x03, 0x20, 0x00, 0xb1, + 0x03, 0xc0, 0x03, 0xcc, 0x03, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xb7, + 0x03, 0xbc, 0x03, 0x2e, 0x00, 0x12, 0x64, 0x61, + 0x79, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x19, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0xb7, 0x03, 0xbc, 0x03, 0x2e, 0x00, 0x20, 0x00, + 0xc0, 0x03, 0xc1, 0x03, 0xb9, 0x03, 0xbd, 0x03, + 0x14, 0x64, 0x61, 0x79, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x19, 0xc4, 0x03, 0xc1, 0x03, + 0xad, 0x03, 0xc7, 0x03, 0xbf, 0x03, 0xc5, 0x03, + 0xc3, 0x03, 0xb1, 0x03, 0x20, 0x00, 0xce, 0x03, + 0xc1, 0x03, 0xb1, 0x03, 0x15, 0xc3, 0x03, 0xb5, + 0x03, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0xce, 0x03, 0xc1, 0x03, 0xb1, + 0x03, 0x17, 0xc3, 0x03, 0xb5, 0x03, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0xce, 0x03, 0xc1, 0x03, 0xb5, 0x03, 0xc2, 0x03, + 0x21, 0xc0, 0x03, 0xc1, 0x03, 0xb9, 0x03, 0xbd, + 0x03, 0x20, 0x00, 0xb1, 0x03, 0xc0, 0x03, 0xcc, + 0x03, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0xce, 0x03, 0xc1, 0x03, 0xb1, + 0x03, 0x23, 0xc0, 0x03, 0xc1, 0x03, 0xb9, 0x03, + 0xbd, 0x03, 0x20, 0x00, 0xb1, 0x03, 0xc0, 0x03, + 0xcc, 0x03, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0xce, 0x03, 0xc1, 0x03, + 0xb5, 0x03, 0xc2, 0x03, 0x08, 0x68, 0x6f, 0x75, + 0x72, 0x13, 0xc3, 0x03, 0xb5, 0x03, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0xce, 0x03, 0x2e, 0x00, 0x1f, 0xc0, 0x03, 0xc1, + 0x03, 0xb9, 0x03, 0xbd, 0x03, 0x20, 0x00, 0xb1, + 0x03, 0xc0, 0x03, 0xcc, 0x03, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xce, + 0x03, 0x2e, 0x00, 0x14, 0x68, 0x6f, 0x75, 0x72, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x17, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xce, + 0x03, 0x2e, 0x00, 0x20, 0x00, 0xc0, 0x03, 0xc1, + 0x03, 0xb9, 0x03, 0xbd, 0x03, 0x16, 0x68, 0x6f, + 0x75, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x19, 0xc4, 0x03, 0xc1, 0x03, 0xad, 0x03, + 0xc7, 0x03, 0xbf, 0x03, 0xbd, 0x03, 0x20, 0x00, + 0xbb, 0x03, 0xb5, 0x03, 0xc0, 0x03, 0xc4, 0x03, + 0xcc, 0x03, 0x19, 0xc3, 0x03, 0xb5, 0x03, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0xbb, 0x03, 0xb5, 0x03, 0xc0, 0x03, 0xc4, + 0x03, 0xcc, 0x03, 0x19, 0xc3, 0x03, 0xb5, 0x03, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0xbb, 0x03, 0xb5, 0x03, 0xc0, 0x03, + 0xc4, 0x03, 0xac, 0x03, 0x25, 0xc0, 0x03, 0xc1, + 0x03, 0xb9, 0x03, 0xbd, 0x03, 0x20, 0x00, 0xb1, + 0x03, 0xc0, 0x03, 0xcc, 0x03, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xbb, + 0x03, 0xb5, 0x03, 0xc0, 0x03, 0xc4, 0x03, 0xcc, + 0x03, 0x25, 0xc0, 0x03, 0xc1, 0x03, 0xb9, 0x03, + 0xbd, 0x03, 0x20, 0x00, 0xb1, 0x03, 0xc0, 0x03, + 0xcc, 0x03, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0xbb, 0x03, 0xb5, 0x03, + 0xc0, 0x03, 0xc4, 0x03, 0xac, 0x03, 0x0c, 0x6d, + 0x69, 0x6e, 0x75, 0x74, 0x65, 0x17, 0xc3, 0x03, + 0xb5, 0x03, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0xbb, 0x03, 0xb5, 0x03, + 0xc0, 0x03, 0x2e, 0x00, 0x23, 0xc0, 0x03, 0xc1, + 0x03, 0xb9, 0x03, 0xbd, 0x03, 0x20, 0x00, 0xb1, + 0x03, 0xc0, 0x03, 0xcc, 0x03, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xbb, + 0x03, 0xb5, 0x03, 0xc0, 0x03, 0x2e, 0x00, 0x18, + 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x13, 0xc3, 0x03, 0xb5, + 0x03, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0xbb, 0x03, 0x2e, 0x00, 0x17, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0xbb, 0x03, 0x2e, 0x00, 0x20, 0x00, 0xc0, 0x03, + 0xc1, 0x03, 0xb9, 0x03, 0xbd, 0x03, 0x1a, 0x6d, + 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x09, 0xc4, 0x03, 0xce, + 0x03, 0xc1, 0x03, 0xb1, 0x03, 0x27, 0xc3, 0x03, + 0xb5, 0x03, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0xb4, 0x03, 0xb5, 0x03, + 0xc5, 0x03, 0xc4, 0x03, 0xb5, 0x03, 0xc1, 0x03, + 0xcc, 0x03, 0xbb, 0x03, 0xb5, 0x03, 0xc0, 0x03, + 0xc4, 0x03, 0xbf, 0x03, 0x27, 0xc3, 0x03, 0xb5, + 0x03, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0xb4, 0x03, 0xb5, 0x03, 0xc5, + 0x03, 0xc4, 0x03, 0xb5, 0x03, 0xc1, 0x03, 0xcc, + 0x03, 0xbb, 0x03, 0xb5, 0x03, 0xc0, 0x03, 0xc4, + 0x03, 0xb1, 0x03, 0x33, 0xc0, 0x03, 0xc1, 0x03, + 0xb9, 0x03, 0xbd, 0x03, 0x20, 0x00, 0xb1, 0x03, + 0xc0, 0x03, 0xcc, 0x03, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xb4, 0x03, + 0xb5, 0x03, 0xc5, 0x03, 0xc4, 0x03, 0xb5, 0x03, + 0xc1, 0x03, 0xcc, 0x03, 0xbb, 0x03, 0xb5, 0x03, + 0xc0, 0x03, 0xc4, 0x03, 0xbf, 0x03, 0x33, 0xc0, + 0x03, 0xc1, 0x03, 0xb9, 0x03, 0xbd, 0x03, 0x20, + 0x00, 0xb1, 0x03, 0xc0, 0x03, 0xcc, 0x03, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0xb4, 0x03, 0xb5, 0x03, 0xc5, 0x03, 0xc4, + 0x03, 0xb5, 0x03, 0xc1, 0x03, 0xcc, 0x03, 0xbb, + 0x03, 0xb5, 0x03, 0xc0, 0x03, 0xc4, 0x03, 0xb1, + 0x03, 0x0c, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, + 0x19, 0xc3, 0x03, 0xb5, 0x03, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xb4, + 0x03, 0xb5, 0x03, 0xc5, 0x03, 0xc4, 0x03, 0x2e, + 0x00, 0x25, 0xc0, 0x03, 0xc1, 0x03, 0xb9, 0x03, + 0xbd, 0x03, 0x20, 0x00, 0xb1, 0x03, 0xc0, 0x03, + 0xcc, 0x03, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0xb4, 0x03, 0xb5, 0x03, + 0xc5, 0x03, 0xc4, 0x03, 0x2e, 0x00, 0x18, 0x73, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x13, 0xc3, 0x03, 0xb5, 0x03, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0xb4, 0x03, 0x2e, 0x00, 0x17, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xb4, + 0x03, 0x2e, 0x00, 0x20, 0x00, 0xc0, 0x03, 0xc1, + 0x03, 0xb9, 0x03, 0xbd, 0x03, 0x1a, 0x73, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x08, 0x6c, 0x61, 0x74, 0x6e, + 0x04, 0x6e, 0x75, 0x08, 0x64, 0x61, 0x74, 0x61, + 0x70, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, + 0x74, 0x6c, 0x2d, 0x72, 0x65, 0x6c, 0x61, 0x74, + 0x69, 0x76, 0x65, 0x2d, 0x74, 0x69, 0x6d, 0x65, + 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2f, + 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, + 0x61, 0x74, 0x61, 0x2f, 0x65, 0x6c, 0x2e, 0x6a, + 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, + 0x01, 0x00, 0x07, 0x00, 0x00, 0x90, 0x0f, 0x01, + 0xa0, 0x01, 0x00, 0x00, 0x00, 0x06, 0xc8, 0x04, + 0xd0, 0x00, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, + 0x00, 0x42, 0xd2, 0x00, 0x00, 0x00, 0xaa, 0x6a, + 0x7b, 0x07, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, + 0x00, 0x42, 0xd2, 0x00, 0x00, 0x00, 0x43, 0xd0, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd3, 0x00, 0x00, + 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe3, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xe4, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xe8, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xea, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xec, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0xed, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xf0, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf1, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xf2, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0xf3, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xf0, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf1, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xf4, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0xf5, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xf8, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xfc, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0xfd, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xfa, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xfb, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xfc, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xfe, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x01, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x01, + 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x02, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x03, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x03, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x04, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0x06, 0x01, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x07, + 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x09, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x0a, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0b, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x0c, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x01, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x0f, + 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x10, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x11, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x11, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x12, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0x14, 0x01, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x10, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x17, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x18, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0x19, 0x01, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x1a, + 0x01, 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, + 0x04, 0x1b, 0x01, 0x00, 0x00, 0x4d, 0x1c, 0x01, + 0x00, 0x00, 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x1e, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x1f, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x20, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0x22, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x18, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x23, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x23, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x24, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x24, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0x25, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x18, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x23, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x23, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x26, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0x27, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x28, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x0b, 0x04, 0x29, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x2a, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x2b, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x2c, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x2d, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x2e, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x2e, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x2f, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x2f, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x30, + 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x2e, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x2e, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x31, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x31, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0x32, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x33, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x0b, 0x04, 0x34, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x35, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x36, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x37, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x38, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x39, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x39, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x3a, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x3a, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x3b, + 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x3c, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x3c, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x3d, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x3d, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0x3e, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x3f, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x0b, 0x04, 0x40, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x41, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x42, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x43, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x44, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x45, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x45, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x47, + 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4c, 0x01, + 0x00, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x24, + 0x01, 0x00, 0xc8, 0xc4, 0x28, 0x9c, 0x05, 0x01, + 0xa8, 0x02, 0x76, 0x53, 0x35, 0x08, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x1c, 0x12, 0x1c, + 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_en_size = 2758; + +const uint8_t intl_relative_en[2758] = { + 0x01, 0x6c, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x04, 0x65, 0x6e, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x12, 0x74, 0x68, 0x69, + 0x73, 0x20, 0x79, 0x65, 0x61, 0x72, 0x12, 0x6e, + 0x65, 0x78, 0x74, 0x20, 0x79, 0x65, 0x61, 0x72, + 0x12, 0x6c, 0x61, 0x73, 0x74, 0x20, 0x79, 0x65, + 0x61, 0x72, 0x04, 0x2d, 0x31, 0x16, 0x69, 0x6e, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x79, 0x65, 0x61, + 0x72, 0x06, 0x6f, 0x6e, 0x65, 0x18, 0x69, 0x6e, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x79, 0x65, 0x61, + 0x72, 0x73, 0x0a, 0x6f, 0x74, 0x68, 0x65, 0x72, + 0x0c, 0x66, 0x75, 0x74, 0x75, 0x72, 0x65, 0x18, + 0x7b, 0x30, 0x7d, 0x20, 0x79, 0x65, 0x61, 0x72, + 0x20, 0x61, 0x67, 0x6f, 0x1a, 0x7b, 0x30, 0x7d, + 0x20, 0x79, 0x65, 0x61, 0x72, 0x73, 0x20, 0x61, + 0x67, 0x6f, 0x08, 0x70, 0x61, 0x73, 0x74, 0x08, + 0x79, 0x65, 0x61, 0x72, 0x10, 0x74, 0x68, 0x69, + 0x73, 0x20, 0x79, 0x72, 0x2e, 0x10, 0x6e, 0x65, + 0x78, 0x74, 0x20, 0x79, 0x72, 0x2e, 0x10, 0x6c, + 0x61, 0x73, 0x74, 0x20, 0x79, 0x72, 0x2e, 0x14, + 0x69, 0x6e, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x79, + 0x72, 0x2e, 0x16, 0x7b, 0x30, 0x7d, 0x20, 0x79, + 0x72, 0x2e, 0x20, 0x61, 0x67, 0x6f, 0x14, 0x79, + 0x65, 0x61, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x18, 0x74, 0x68, 0x69, 0x73, 0x20, 0x71, + 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x18, 0x6e, + 0x65, 0x78, 0x74, 0x20, 0x71, 0x75, 0x61, 0x72, + 0x74, 0x65, 0x72, 0x18, 0x6c, 0x61, 0x73, 0x74, + 0x20, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, + 0x1c, 0x69, 0x6e, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x1e, + 0x69, 0x6e, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x71, + 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x73, 0x1e, + 0x7b, 0x30, 0x7d, 0x20, 0x71, 0x75, 0x61, 0x72, + 0x74, 0x65, 0x72, 0x20, 0x61, 0x67, 0x6f, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x71, 0x75, 0x61, 0x72, + 0x74, 0x65, 0x72, 0x73, 0x20, 0x61, 0x67, 0x6f, + 0x0e, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, + 0x12, 0x74, 0x68, 0x69, 0x73, 0x20, 0x71, 0x74, + 0x72, 0x2e, 0x12, 0x6e, 0x65, 0x78, 0x74, 0x20, + 0x71, 0x74, 0x72, 0x2e, 0x12, 0x6c, 0x61, 0x73, + 0x74, 0x20, 0x71, 0x74, 0x72, 0x2e, 0x16, 0x69, + 0x6e, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x71, 0x74, + 0x72, 0x2e, 0x18, 0x69, 0x6e, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x71, 0x74, 0x72, 0x73, 0x2e, 0x18, + 0x7b, 0x30, 0x7d, 0x20, 0x71, 0x74, 0x72, 0x2e, + 0x20, 0x61, 0x67, 0x6f, 0x1a, 0x7b, 0x30, 0x7d, + 0x20, 0x71, 0x74, 0x72, 0x73, 0x2e, 0x20, 0x61, + 0x67, 0x6f, 0x1a, 0x71, 0x75, 0x61, 0x72, 0x74, + 0x65, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x14, 0x74, 0x68, 0x69, 0x73, 0x20, 0x6d, 0x6f, + 0x6e, 0x74, 0x68, 0x14, 0x6e, 0x65, 0x78, 0x74, + 0x20, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x14, 0x6c, + 0x61, 0x73, 0x74, 0x20, 0x6d, 0x6f, 0x6e, 0x74, + 0x68, 0x18, 0x69, 0x6e, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x1a, 0x69, + 0x6e, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x6f, + 0x6e, 0x74, 0x68, 0x73, 0x1a, 0x7b, 0x30, 0x7d, + 0x20, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x20, 0x61, + 0x67, 0x6f, 0x1c, 0x7b, 0x30, 0x7d, 0x20, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x73, 0x20, 0x61, 0x67, + 0x6f, 0x0a, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x10, + 0x74, 0x68, 0x69, 0x73, 0x20, 0x6d, 0x6f, 0x2e, + 0x10, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x6d, 0x6f, + 0x2e, 0x10, 0x6c, 0x61, 0x73, 0x74, 0x20, 0x6d, + 0x6f, 0x2e, 0x14, 0x69, 0x6e, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x6d, 0x6f, 0x2e, 0x16, 0x7b, 0x30, + 0x7d, 0x20, 0x6d, 0x6f, 0x2e, 0x20, 0x61, 0x67, + 0x6f, 0x16, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x12, 0x74, 0x68, + 0x69, 0x73, 0x20, 0x77, 0x65, 0x65, 0x6b, 0x12, + 0x6e, 0x65, 0x78, 0x74, 0x20, 0x77, 0x65, 0x65, + 0x6b, 0x12, 0x6c, 0x61, 0x73, 0x74, 0x20, 0x77, + 0x65, 0x65, 0x6b, 0x16, 0x69, 0x6e, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x77, 0x65, 0x65, 0x6b, 0x18, + 0x69, 0x6e, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x77, + 0x65, 0x65, 0x6b, 0x73, 0x18, 0x7b, 0x30, 0x7d, + 0x20, 0x77, 0x65, 0x65, 0x6b, 0x20, 0x61, 0x67, + 0x6f, 0x1a, 0x7b, 0x30, 0x7d, 0x20, 0x77, 0x65, + 0x65, 0x6b, 0x73, 0x20, 0x61, 0x67, 0x6f, 0x08, + 0x77, 0x65, 0x65, 0x6b, 0x10, 0x74, 0x68, 0x69, + 0x73, 0x20, 0x77, 0x6b, 0x2e, 0x10, 0x6e, 0x65, + 0x78, 0x74, 0x20, 0x77, 0x6b, 0x2e, 0x10, 0x6c, + 0x61, 0x73, 0x74, 0x20, 0x77, 0x6b, 0x2e, 0x14, + 0x69, 0x6e, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x77, + 0x6b, 0x2e, 0x16, 0x7b, 0x30, 0x7d, 0x20, 0x77, + 0x6b, 0x2e, 0x20, 0x61, 0x67, 0x6f, 0x14, 0x77, + 0x65, 0x65, 0x6b, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x0a, 0x74, 0x6f, 0x64, 0x61, 0x79, 0x10, + 0x74, 0x6f, 0x6d, 0x6f, 0x72, 0x72, 0x6f, 0x77, + 0x12, 0x79, 0x65, 0x73, 0x74, 0x65, 0x72, 0x64, + 0x61, 0x79, 0x14, 0x69, 0x6e, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x64, 0x61, 0x79, 0x16, 0x69, 0x6e, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x64, 0x61, 0x79, + 0x73, 0x16, 0x7b, 0x30, 0x7d, 0x20, 0x64, 0x61, + 0x79, 0x20, 0x61, 0x67, 0x6f, 0x18, 0x7b, 0x30, + 0x7d, 0x20, 0x64, 0x61, 0x79, 0x73, 0x20, 0x61, + 0x67, 0x6f, 0x06, 0x64, 0x61, 0x79, 0x12, 0x64, + 0x61, 0x79, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x12, 0x74, 0x68, 0x69, 0x73, 0x20, 0x68, 0x6f, + 0x75, 0x72, 0x16, 0x69, 0x6e, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x68, 0x6f, 0x75, 0x72, 0x18, 0x69, + 0x6e, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x68, 0x6f, + 0x75, 0x72, 0x73, 0x18, 0x7b, 0x30, 0x7d, 0x20, + 0x68, 0x6f, 0x75, 0x72, 0x20, 0x61, 0x67, 0x6f, + 0x1a, 0x7b, 0x30, 0x7d, 0x20, 0x68, 0x6f, 0x75, + 0x72, 0x73, 0x20, 0x61, 0x67, 0x6f, 0x08, 0x68, + 0x6f, 0x75, 0x72, 0x14, 0x69, 0x6e, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x68, 0x72, 0x2e, 0x16, 0x7b, + 0x30, 0x7d, 0x20, 0x68, 0x72, 0x2e, 0x20, 0x61, + 0x67, 0x6f, 0x14, 0x68, 0x6f, 0x75, 0x72, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, 0x74, 0x68, + 0x69, 0x73, 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x74, + 0x65, 0x1a, 0x69, 0x6e, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x1c, + 0x69, 0x6e, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, + 0x69, 0x6e, 0x75, 0x74, 0x65, 0x73, 0x1c, 0x7b, + 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x74, + 0x65, 0x20, 0x61, 0x67, 0x6f, 0x1e, 0x7b, 0x30, + 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, + 0x73, 0x20, 0x61, 0x67, 0x6f, 0x0c, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x65, 0x16, 0x69, 0x6e, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x2e, + 0x18, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, + 0x2e, 0x20, 0x61, 0x67, 0x6f, 0x18, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x06, 0x6e, 0x6f, 0x77, 0x1a, 0x69, + 0x6e, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x1c, 0x69, 0x6e, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x73, 0x1c, 0x7b, 0x30, 0x7d, 0x20, + 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x20, 0x61, + 0x67, 0x6f, 0x1e, 0x7b, 0x30, 0x7d, 0x20, 0x73, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x20, 0x61, + 0x67, 0x6f, 0x0c, 0x73, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x16, 0x69, 0x6e, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x73, 0x65, 0x63, 0x2e, 0x18, 0x7b, 0x30, + 0x7d, 0x20, 0x73, 0x65, 0x63, 0x2e, 0x20, 0x61, + 0x67, 0x6f, 0x18, 0x73, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x08, + 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, 0x75, 0x08, + 0x64, 0x61, 0x74, 0x61, 0x70, 0x6e, 0x6f, 0x64, + 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, + 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2d, 0x72, + 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x2d, + 0x74, 0x69, 0x6d, 0x65, 0x2d, 0x66, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x2f, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, + 0x65, 0x6e, 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, + 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, 0x07, 0x00, + 0x00, 0xa0, 0x0a, 0x01, 0xa0, 0x01, 0x00, 0x00, + 0x00, 0x06, 0xc8, 0x04, 0xd0, 0x00, 0x00, 0x00, + 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, 0x00, + 0x00, 0x00, 0xaa, 0x6a, 0x0b, 0x05, 0x00, 0x00, + 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, 0x00, + 0x00, 0x00, 0x43, 0xd0, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd3, 0x00, 0x00, 0x00, 0x4d, 0xd4, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xd5, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xd6, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xdf, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe2, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xe3, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe5, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe5, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe8, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xe9, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xea, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xec, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xed, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xee, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xef, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf0, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xf1, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xf3, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf4, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf5, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xf6, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xf7, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf8, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xf9, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xfb, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xfc, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfd, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xfe, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xff, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x00, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x01, + 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x03, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x03, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x04, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x04, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x05, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x06, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x07, + 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x09, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0a, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0b, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x0c, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x0d, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x0e, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x0f, + 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x11, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x11, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x12, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x12, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x13, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x14, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x17, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x18, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x19, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x1a, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x1b, + 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x17, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x18, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x19, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x1a, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0x1c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x1d, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x0b, 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x1f, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x20, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x21, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x22, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x23, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x23, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x24, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x24, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x25, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x26, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, + 0x27, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x28, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x29, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x2a, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0x2b, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x2c, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x2c, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x2d, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x2d, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x2e, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x30, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x31, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x32, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x33, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0x34, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x2f, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x0b, 0x04, 0x35, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x35, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x36, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x36, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x37, 0x01, 0x00, + 0x00, 0x04, 0x38, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x39, 0x01, 0x00, 0x00, 0x4d, 0x3a, + 0x01, 0x00, 0x00, 0x24, 0x01, 0x00, 0xc8, 0xc4, + 0x28, 0xf6, 0x04, 0x01, 0xc8, 0x01, 0x76, 0x53, + 0x35, 0x08, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x1c, 0x12, 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_en_GB_size = 3460; + +const uint8_t intl_relative_en_GB[3460] = { + 0x01, 0x72, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x0a, 0x65, 0x6e, 0x2d, 0x47, 0x42, + 0x0c, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x0e, + 0x74, 0x68, 0x69, 0x73, 0x20, 0x79, 0x72, 0x0e, + 0x6e, 0x65, 0x78, 0x74, 0x20, 0x79, 0x72, 0x0e, + 0x6c, 0x61, 0x73, 0x74, 0x20, 0x79, 0x72, 0x04, + 0x2d, 0x31, 0x12, 0x69, 0x6e, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x79, 0x72, 0x06, 0x6f, 0x6e, 0x65, + 0x0a, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x0c, 0x66, + 0x75, 0x74, 0x75, 0x72, 0x65, 0x14, 0x7b, 0x30, + 0x7d, 0x20, 0x79, 0x72, 0x20, 0x61, 0x67, 0x6f, + 0x08, 0x70, 0x61, 0x73, 0x74, 0x16, 0x79, 0x65, + 0x61, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x12, 0x69, 0x6e, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x68, 0x72, 0x14, 0x7b, 0x30, 0x7d, 0x20, + 0x68, 0x72, 0x20, 0x61, 0x67, 0x6f, 0x16, 0x68, + 0x6f, 0x75, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x14, 0x69, 0x6e, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x73, 0x65, 0x63, 0x16, 0x7b, 0x30, + 0x7d, 0x20, 0x73, 0x65, 0x63, 0x20, 0x61, 0x67, + 0x6f, 0x1a, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x14, + 0x79, 0x65, 0x61, 0x72, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x12, 0x74, 0x68, 0x69, 0x73, 0x20, + 0x71, 0x74, 0x72, 0x2e, 0x12, 0x6e, 0x65, 0x78, + 0x74, 0x20, 0x71, 0x74, 0x72, 0x2e, 0x12, 0x6c, + 0x61, 0x73, 0x74, 0x20, 0x71, 0x74, 0x72, 0x2e, + 0x14, 0x69, 0x6e, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x71, 0x74, 0x72, 0x16, 0x7b, 0x30, 0x7d, 0x20, + 0x71, 0x74, 0x72, 0x20, 0x61, 0x67, 0x6f, 0x1a, + 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1c, 0x71, 0x75, + 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x0e, 0x74, 0x68, 0x69, + 0x73, 0x20, 0x6d, 0x6f, 0x0e, 0x6e, 0x65, 0x78, + 0x74, 0x20, 0x6d, 0x6f, 0x0e, 0x6c, 0x61, 0x73, + 0x74, 0x20, 0x6d, 0x6f, 0x12, 0x69, 0x6e, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x6f, 0x14, 0x7b, + 0x30, 0x7d, 0x20, 0x6d, 0x6f, 0x20, 0x61, 0x67, + 0x6f, 0x16, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x18, 0x6d, 0x6f, + 0x6e, 0x74, 0x68, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x0e, 0x74, 0x68, 0x69, 0x73, 0x20, + 0x77, 0x6b, 0x0e, 0x6e, 0x65, 0x78, 0x74, 0x20, + 0x77, 0x6b, 0x0e, 0x6c, 0x61, 0x73, 0x74, 0x20, + 0x77, 0x6b, 0x12, 0x69, 0x6e, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x77, 0x6b, 0x14, 0x7b, 0x30, 0x7d, + 0x20, 0x77, 0x6b, 0x20, 0x61, 0x67, 0x6f, 0x14, + 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x16, 0x77, 0x65, 0x65, 0x6b, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x14, 0x68, + 0x6f, 0x75, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x14, 0x69, 0x6e, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x6d, 0x69, 0x6e, 0x16, 0x7b, 0x30, 0x7d, + 0x20, 0x6d, 0x69, 0x6e, 0x20, 0x61, 0x67, 0x6f, + 0x18, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x06, 0x6e, 0x6f, 0x77, 0x18, + 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x12, 0x74, 0x68, 0x69, + 0x73, 0x20, 0x79, 0x65, 0x61, 0x72, 0x12, 0x6e, + 0x65, 0x78, 0x74, 0x20, 0x79, 0x65, 0x61, 0x72, + 0x12, 0x6c, 0x61, 0x73, 0x74, 0x20, 0x79, 0x65, + 0x61, 0x72, 0x16, 0x69, 0x6e, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x79, 0x65, 0x61, 0x72, 0x18, 0x69, + 0x6e, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x79, 0x65, + 0x61, 0x72, 0x73, 0x18, 0x7b, 0x30, 0x7d, 0x20, + 0x79, 0x65, 0x61, 0x72, 0x20, 0x61, 0x67, 0x6f, + 0x1a, 0x7b, 0x30, 0x7d, 0x20, 0x79, 0x65, 0x61, + 0x72, 0x73, 0x20, 0x61, 0x67, 0x6f, 0x08, 0x79, + 0x65, 0x61, 0x72, 0x18, 0x74, 0x68, 0x69, 0x73, + 0x20, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, + 0x18, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x71, 0x75, + 0x61, 0x72, 0x74, 0x65, 0x72, 0x18, 0x6c, 0x61, + 0x73, 0x74, 0x20, 0x71, 0x75, 0x61, 0x72, 0x74, + 0x65, 0x72, 0x1c, 0x69, 0x6e, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, + 0x72, 0x1e, 0x69, 0x6e, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, + 0x73, 0x1e, 0x7b, 0x30, 0x7d, 0x20, 0x71, 0x75, + 0x61, 0x72, 0x74, 0x65, 0x72, 0x20, 0x61, 0x67, + 0x6f, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x71, 0x75, + 0x61, 0x72, 0x74, 0x65, 0x72, 0x73, 0x20, 0x61, + 0x67, 0x6f, 0x0e, 0x71, 0x75, 0x61, 0x72, 0x74, + 0x65, 0x72, 0x14, 0x74, 0x68, 0x69, 0x73, 0x20, + 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x14, 0x6e, 0x65, + 0x78, 0x74, 0x20, 0x6d, 0x6f, 0x6e, 0x74, 0x68, + 0x14, 0x6c, 0x61, 0x73, 0x74, 0x20, 0x6d, 0x6f, + 0x6e, 0x74, 0x68, 0x18, 0x69, 0x6e, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x6d, 0x6f, 0x6e, 0x74, 0x68, + 0x1a, 0x69, 0x6e, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x73, 0x1a, 0x7b, + 0x30, 0x7d, 0x20, 0x6d, 0x6f, 0x6e, 0x74, 0x68, + 0x20, 0x61, 0x67, 0x6f, 0x1c, 0x7b, 0x30, 0x7d, + 0x20, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x73, 0x20, + 0x61, 0x67, 0x6f, 0x0a, 0x6d, 0x6f, 0x6e, 0x74, + 0x68, 0x12, 0x74, 0x68, 0x69, 0x73, 0x20, 0x77, + 0x65, 0x65, 0x6b, 0x12, 0x6e, 0x65, 0x78, 0x74, + 0x20, 0x77, 0x65, 0x65, 0x6b, 0x12, 0x6c, 0x61, + 0x73, 0x74, 0x20, 0x77, 0x65, 0x65, 0x6b, 0x16, + 0x69, 0x6e, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x77, + 0x65, 0x65, 0x6b, 0x18, 0x69, 0x6e, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x77, 0x65, 0x65, 0x6b, 0x73, + 0x18, 0x7b, 0x30, 0x7d, 0x20, 0x77, 0x65, 0x65, + 0x6b, 0x20, 0x61, 0x67, 0x6f, 0x1a, 0x7b, 0x30, + 0x7d, 0x20, 0x77, 0x65, 0x65, 0x6b, 0x73, 0x20, + 0x61, 0x67, 0x6f, 0x08, 0x77, 0x65, 0x65, 0x6b, + 0x0a, 0x74, 0x6f, 0x64, 0x61, 0x79, 0x10, 0x74, + 0x6f, 0x6d, 0x6f, 0x72, 0x72, 0x6f, 0x77, 0x12, + 0x79, 0x65, 0x73, 0x74, 0x65, 0x72, 0x64, 0x61, + 0x79, 0x14, 0x69, 0x6e, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x64, 0x61, 0x79, 0x16, 0x69, 0x6e, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x64, 0x61, 0x79, 0x73, + 0x16, 0x7b, 0x30, 0x7d, 0x20, 0x64, 0x61, 0x79, + 0x20, 0x61, 0x67, 0x6f, 0x18, 0x7b, 0x30, 0x7d, + 0x20, 0x64, 0x61, 0x79, 0x73, 0x20, 0x61, 0x67, + 0x6f, 0x06, 0x64, 0x61, 0x79, 0x12, 0x64, 0x61, + 0x79, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x12, + 0x74, 0x68, 0x69, 0x73, 0x20, 0x68, 0x6f, 0x75, + 0x72, 0x16, 0x69, 0x6e, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x68, 0x6f, 0x75, 0x72, 0x18, 0x69, 0x6e, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x68, 0x6f, 0x75, + 0x72, 0x73, 0x18, 0x7b, 0x30, 0x7d, 0x20, 0x68, + 0x6f, 0x75, 0x72, 0x20, 0x61, 0x67, 0x6f, 0x1a, + 0x7b, 0x30, 0x7d, 0x20, 0x68, 0x6f, 0x75, 0x72, + 0x73, 0x20, 0x61, 0x67, 0x6f, 0x08, 0x68, 0x6f, + 0x75, 0x72, 0x16, 0x74, 0x68, 0x69, 0x73, 0x20, + 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x1a, 0x69, + 0x6e, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x65, 0x1c, 0x69, 0x6e, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x75, + 0x74, 0x65, 0x73, 0x1c, 0x7b, 0x30, 0x7d, 0x20, + 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x20, 0x61, + 0x67, 0x6f, 0x1e, 0x7b, 0x30, 0x7d, 0x20, 0x6d, + 0x69, 0x6e, 0x75, 0x74, 0x65, 0x73, 0x20, 0x61, + 0x67, 0x6f, 0x0c, 0x6d, 0x69, 0x6e, 0x75, 0x74, + 0x65, 0x1a, 0x69, 0x6e, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x1c, + 0x69, 0x6e, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x1c, 0x7b, + 0x30, 0x7d, 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x20, 0x61, 0x67, 0x6f, 0x1e, 0x7b, 0x30, + 0x7d, 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, + 0x73, 0x20, 0x61, 0x67, 0x6f, 0x0c, 0x73, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x14, 0x64, 0x61, 0x79, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x08, + 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, 0x75, 0x08, + 0x64, 0x61, 0x74, 0x61, 0x76, 0x6e, 0x6f, 0x64, + 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, + 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2d, 0x72, + 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x2d, + 0x74, 0x69, 0x6d, 0x65, 0x2d, 0x66, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x2f, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, + 0x65, 0x6e, 0x2d, 0x47, 0x42, 0x2e, 0x6a, 0x73, + 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, + 0x00, 0x07, 0x00, 0x00, 0xca, 0x0e, 0x01, 0xa0, + 0x01, 0x00, 0x00, 0x00, 0x06, 0xc8, 0x04, 0xd0, + 0x00, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, + 0x42, 0xd2, 0x00, 0x00, 0x00, 0xaa, 0x6a, 0x35, + 0x07, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, + 0x42, 0xd2, 0x00, 0x00, 0x00, 0x43, 0xd0, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd3, 0x00, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe1, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xe1, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0xe3, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xe3, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe4, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe4, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd5, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe6, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe7, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xe8, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xe9, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xec, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xed, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xee, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xef, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf1, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf1, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf2, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xf3, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xee, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xef, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf1, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf1, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf2, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xf4, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf5, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xf6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf8, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf8, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf9, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xfa, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf5, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xf6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf8, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf8, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf9, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xfb, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe1, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xe1, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xfc, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xfe, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0xff, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xfd, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfe, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xfe, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x01, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0xe3, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xe3, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x02, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x03, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x05, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x06, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x0a, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x0b, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x0d, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0e, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x12, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x13, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x16, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x18, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x1a, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x1b, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x1c, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x1d, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x1e, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x1f, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x20, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x22, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x23, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x24, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x25, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x26, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x27, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x28, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x29, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x2a, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x27, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x28, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x29, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0x2b, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x2c, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x2d, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x2e, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x2f, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x30, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0x31, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x32, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, + 0x04, 0x33, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x34, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x35, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x36, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0x37, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x38, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x39, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x3a, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x3b, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0x3c, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x26, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x27, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x28, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x29, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x3d, 0x01, 0x00, 0x00, 0x04, 0x3e, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x3f, + 0x01, 0x00, 0x00, 0x4d, 0x40, 0x01, 0x00, 0x00, + 0x24, 0x01, 0x00, 0xc8, 0xc4, 0x28, 0x82, 0x05, + 0x01, 0xa1, 0x02, 0x76, 0x53, 0x35, 0x08, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x1c, + 0x12, 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_en_US_size = 2764; + +const uint8_t intl_relative_en_US[2764] = { + 0x01, 0x6c, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x0a, 0x65, 0x6e, 0x2d, 0x55, 0x53, + 0x0c, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x12, + 0x74, 0x68, 0x69, 0x73, 0x20, 0x79, 0x65, 0x61, + 0x72, 0x12, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x79, + 0x65, 0x61, 0x72, 0x12, 0x6c, 0x61, 0x73, 0x74, + 0x20, 0x79, 0x65, 0x61, 0x72, 0x04, 0x2d, 0x31, + 0x16, 0x69, 0x6e, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x79, 0x65, 0x61, 0x72, 0x06, 0x6f, 0x6e, 0x65, + 0x18, 0x69, 0x6e, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x79, 0x65, 0x61, 0x72, 0x73, 0x0a, 0x6f, 0x74, + 0x68, 0x65, 0x72, 0x0c, 0x66, 0x75, 0x74, 0x75, + 0x72, 0x65, 0x18, 0x7b, 0x30, 0x7d, 0x20, 0x79, + 0x65, 0x61, 0x72, 0x20, 0x61, 0x67, 0x6f, 0x1a, + 0x7b, 0x30, 0x7d, 0x20, 0x79, 0x65, 0x61, 0x72, + 0x73, 0x20, 0x61, 0x67, 0x6f, 0x08, 0x70, 0x61, + 0x73, 0x74, 0x08, 0x79, 0x65, 0x61, 0x72, 0x10, + 0x74, 0x68, 0x69, 0x73, 0x20, 0x79, 0x72, 0x2e, + 0x10, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x79, 0x72, + 0x2e, 0x10, 0x6c, 0x61, 0x73, 0x74, 0x20, 0x79, + 0x72, 0x2e, 0x14, 0x69, 0x6e, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x79, 0x72, 0x2e, 0x16, 0x7b, 0x30, + 0x7d, 0x20, 0x79, 0x72, 0x2e, 0x20, 0x61, 0x67, + 0x6f, 0x14, 0x79, 0x65, 0x61, 0x72, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x18, 0x74, 0x68, 0x69, + 0x73, 0x20, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, + 0x72, 0x18, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x71, + 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x18, 0x6c, + 0x61, 0x73, 0x74, 0x20, 0x71, 0x75, 0x61, 0x72, + 0x74, 0x65, 0x72, 0x1c, 0x69, 0x6e, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x71, 0x75, 0x61, 0x72, 0x74, + 0x65, 0x72, 0x1e, 0x69, 0x6e, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, + 0x72, 0x73, 0x1e, 0x7b, 0x30, 0x7d, 0x20, 0x71, + 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x20, 0x61, + 0x67, 0x6f, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x71, + 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x73, 0x20, + 0x61, 0x67, 0x6f, 0x0e, 0x71, 0x75, 0x61, 0x72, + 0x74, 0x65, 0x72, 0x12, 0x74, 0x68, 0x69, 0x73, + 0x20, 0x71, 0x74, 0x72, 0x2e, 0x12, 0x6e, 0x65, + 0x78, 0x74, 0x20, 0x71, 0x74, 0x72, 0x2e, 0x12, + 0x6c, 0x61, 0x73, 0x74, 0x20, 0x71, 0x74, 0x72, + 0x2e, 0x16, 0x69, 0x6e, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x71, 0x74, 0x72, 0x2e, 0x18, 0x69, 0x6e, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x71, 0x74, 0x72, + 0x73, 0x2e, 0x18, 0x7b, 0x30, 0x7d, 0x20, 0x71, + 0x74, 0x72, 0x2e, 0x20, 0x61, 0x67, 0x6f, 0x1a, + 0x7b, 0x30, 0x7d, 0x20, 0x71, 0x74, 0x72, 0x73, + 0x2e, 0x20, 0x61, 0x67, 0x6f, 0x1a, 0x71, 0x75, + 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x14, 0x74, 0x68, 0x69, 0x73, + 0x20, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x14, 0x6e, + 0x65, 0x78, 0x74, 0x20, 0x6d, 0x6f, 0x6e, 0x74, + 0x68, 0x14, 0x6c, 0x61, 0x73, 0x74, 0x20, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x18, 0x69, 0x6e, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x6f, 0x6e, 0x74, + 0x68, 0x1a, 0x69, 0x6e, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x73, 0x1a, + 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x6f, 0x6e, 0x74, + 0x68, 0x20, 0x61, 0x67, 0x6f, 0x1c, 0x7b, 0x30, + 0x7d, 0x20, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x73, + 0x20, 0x61, 0x67, 0x6f, 0x0a, 0x6d, 0x6f, 0x6e, + 0x74, 0x68, 0x10, 0x74, 0x68, 0x69, 0x73, 0x20, + 0x6d, 0x6f, 0x2e, 0x10, 0x6e, 0x65, 0x78, 0x74, + 0x20, 0x6d, 0x6f, 0x2e, 0x10, 0x6c, 0x61, 0x73, + 0x74, 0x20, 0x6d, 0x6f, 0x2e, 0x14, 0x69, 0x6e, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x6f, 0x2e, + 0x16, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x6f, 0x2e, + 0x20, 0x61, 0x67, 0x6f, 0x16, 0x6d, 0x6f, 0x6e, + 0x74, 0x68, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x12, 0x74, 0x68, 0x69, 0x73, 0x20, 0x77, 0x65, + 0x65, 0x6b, 0x12, 0x6e, 0x65, 0x78, 0x74, 0x20, + 0x77, 0x65, 0x65, 0x6b, 0x12, 0x6c, 0x61, 0x73, + 0x74, 0x20, 0x77, 0x65, 0x65, 0x6b, 0x16, 0x69, + 0x6e, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x77, 0x65, + 0x65, 0x6b, 0x18, 0x69, 0x6e, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x77, 0x65, 0x65, 0x6b, 0x73, 0x18, + 0x7b, 0x30, 0x7d, 0x20, 0x77, 0x65, 0x65, 0x6b, + 0x20, 0x61, 0x67, 0x6f, 0x1a, 0x7b, 0x30, 0x7d, + 0x20, 0x77, 0x65, 0x65, 0x6b, 0x73, 0x20, 0x61, + 0x67, 0x6f, 0x08, 0x77, 0x65, 0x65, 0x6b, 0x10, + 0x74, 0x68, 0x69, 0x73, 0x20, 0x77, 0x6b, 0x2e, + 0x10, 0x6e, 0x65, 0x78, 0x74, 0x20, 0x77, 0x6b, + 0x2e, 0x10, 0x6c, 0x61, 0x73, 0x74, 0x20, 0x77, + 0x6b, 0x2e, 0x14, 0x69, 0x6e, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x77, 0x6b, 0x2e, 0x16, 0x7b, 0x30, + 0x7d, 0x20, 0x77, 0x6b, 0x2e, 0x20, 0x61, 0x67, + 0x6f, 0x14, 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x0a, 0x74, 0x6f, 0x64, + 0x61, 0x79, 0x10, 0x74, 0x6f, 0x6d, 0x6f, 0x72, + 0x72, 0x6f, 0x77, 0x12, 0x79, 0x65, 0x73, 0x74, + 0x65, 0x72, 0x64, 0x61, 0x79, 0x14, 0x69, 0x6e, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x64, 0x61, 0x79, + 0x16, 0x69, 0x6e, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x64, 0x61, 0x79, 0x73, 0x16, 0x7b, 0x30, 0x7d, + 0x20, 0x64, 0x61, 0x79, 0x20, 0x61, 0x67, 0x6f, + 0x18, 0x7b, 0x30, 0x7d, 0x20, 0x64, 0x61, 0x79, + 0x73, 0x20, 0x61, 0x67, 0x6f, 0x06, 0x64, 0x61, + 0x79, 0x12, 0x64, 0x61, 0x79, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x12, 0x74, 0x68, 0x69, 0x73, + 0x20, 0x68, 0x6f, 0x75, 0x72, 0x16, 0x69, 0x6e, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x68, 0x6f, 0x75, + 0x72, 0x18, 0x69, 0x6e, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x68, 0x6f, 0x75, 0x72, 0x73, 0x18, 0x7b, + 0x30, 0x7d, 0x20, 0x68, 0x6f, 0x75, 0x72, 0x20, + 0x61, 0x67, 0x6f, 0x1a, 0x7b, 0x30, 0x7d, 0x20, + 0x68, 0x6f, 0x75, 0x72, 0x73, 0x20, 0x61, 0x67, + 0x6f, 0x08, 0x68, 0x6f, 0x75, 0x72, 0x14, 0x69, + 0x6e, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x68, 0x72, + 0x2e, 0x16, 0x7b, 0x30, 0x7d, 0x20, 0x68, 0x72, + 0x2e, 0x20, 0x61, 0x67, 0x6f, 0x14, 0x68, 0x6f, + 0x75, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x16, 0x74, 0x68, 0x69, 0x73, 0x20, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x65, 0x1a, 0x69, 0x6e, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x75, + 0x74, 0x65, 0x1c, 0x69, 0x6e, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, + 0x73, 0x1c, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x65, 0x20, 0x61, 0x67, 0x6f, + 0x1e, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, + 0x75, 0x74, 0x65, 0x73, 0x20, 0x61, 0x67, 0x6f, + 0x0c, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x16, + 0x69, 0x6e, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, + 0x69, 0x6e, 0x2e, 0x18, 0x7b, 0x30, 0x7d, 0x20, + 0x6d, 0x69, 0x6e, 0x2e, 0x20, 0x61, 0x67, 0x6f, + 0x18, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x06, 0x6e, 0x6f, + 0x77, 0x1a, 0x69, 0x6e, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x1c, + 0x69, 0x6e, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x1c, 0x7b, + 0x30, 0x7d, 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x20, 0x61, 0x67, 0x6f, 0x1e, 0x7b, 0x30, + 0x7d, 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, + 0x73, 0x20, 0x61, 0x67, 0x6f, 0x0c, 0x73, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x16, 0x69, 0x6e, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, 0x63, 0x2e, + 0x18, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, 0x63, + 0x2e, 0x20, 0x61, 0x67, 0x6f, 0x18, 0x73, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, + 0x6e, 0x75, 0x08, 0x64, 0x61, 0x74, 0x61, 0x76, + 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, + 0x6c, 0x2d, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, + 0x76, 0x65, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2d, + 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2f, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, + 0x74, 0x61, 0x2f, 0x65, 0x6e, 0x2d, 0x55, 0x53, + 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, + 0x01, 0x00, 0x01, 0x00, 0x07, 0x00, 0x00, 0xa0, + 0x0a, 0x01, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x06, + 0xc8, 0x04, 0xd0, 0x00, 0x00, 0x00, 0x39, 0xd1, + 0x00, 0x00, 0x00, 0x42, 0xd2, 0x00, 0x00, 0x00, + 0xaa, 0x6a, 0x0b, 0x05, 0x00, 0x00, 0x39, 0xd1, + 0x00, 0x00, 0x00, 0x42, 0xd2, 0x00, 0x00, 0x00, + 0x43, 0xd0, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd3, + 0x00, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xd7, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdf, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe2, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xe3, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xe4, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xe5, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xe9, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xec, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xed, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xee, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xef, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xf1, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xf2, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xf4, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xf5, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf6, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xf7, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xf9, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xfa, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xfc, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xfd, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xfe, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xff, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0x01, 0x01, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x02, + 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x04, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x04, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x05, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0x07, 0x01, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x08, + 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x0a, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x0b, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0c, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x0d, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x01, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x10, + 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x11, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x12, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x12, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x13, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x16, + 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x18, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x19, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x1a, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x1b, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x17, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x18, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x19, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x1a, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x1c, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x1d, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, + 0x1e, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x1f, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x20, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x21, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0x22, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x23, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x23, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x24, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x24, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x25, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x27, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x28, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x29, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x2a, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0x2b, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x2c, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x2c, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x2d, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x2d, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0x2e, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x0b, 0x04, 0x30, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x31, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x32, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x33, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x34, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x2f, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, + 0x35, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x35, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x36, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x36, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0x37, 0x01, 0x00, 0x00, 0x04, + 0x38, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x39, 0x01, 0x00, 0x00, 0x4d, 0x3a, 0x01, 0x00, + 0x00, 0x24, 0x01, 0x00, 0xc8, 0xc4, 0x28, 0xf6, + 0x04, 0x01, 0xc8, 0x01, 0x76, 0x53, 0x35, 0x08, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x1c, + 0x12, 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_es_size = 3729; + +const uint8_t intl_relative_es[3729] = { + 0x01, 0x6c, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x04, 0x65, 0x73, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x10, 0x65, 0x73, 0x74, + 0x65, 0x20, 0x61, 0xf1, 0x6f, 0x1c, 0x65, 0x6c, + 0x20, 0x70, 0x72, 0xf3, 0x78, 0x69, 0x6d, 0x6f, + 0x20, 0x61, 0xf1, 0x6f, 0x1a, 0x65, 0x6c, 0x20, + 0x61, 0xf1, 0x6f, 0x20, 0x70, 0x61, 0x73, 0x61, + 0x64, 0x6f, 0x04, 0x2d, 0x31, 0x22, 0x64, 0x65, + 0x6e, 0x74, 0x72, 0x6f, 0x20, 0x64, 0x65, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x61, 0xf1, 0x6f, 0x06, + 0x6f, 0x6e, 0x65, 0x24, 0x64, 0x65, 0x6e, 0x74, + 0x72, 0x6f, 0x20, 0x64, 0x65, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x61, 0xf1, 0x6f, 0x73, 0x0a, 0x6f, + 0x74, 0x68, 0x65, 0x72, 0x0c, 0x66, 0x75, 0x74, + 0x75, 0x72, 0x65, 0x18, 0x68, 0x61, 0x63, 0x65, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x61, 0xf1, 0x6f, + 0x1a, 0x68, 0x61, 0x63, 0x65, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x61, 0xf1, 0x6f, 0x73, 0x08, 0x70, + 0x61, 0x73, 0x74, 0x08, 0x79, 0x65, 0x61, 0x72, + 0x1e, 0x64, 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x20, + 0x64, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x61, + 0x14, 0x68, 0x61, 0x63, 0x65, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x61, 0x14, 0x79, 0x65, 0x61, 0x72, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, 0x79, + 0x65, 0x61, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x1c, 0x65, 0x73, 0x74, 0x65, 0x20, + 0x74, 0x72, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x72, + 0x65, 0x28, 0x65, 0x6c, 0x20, 0x70, 0x72, 0xf3, + 0x78, 0x69, 0x6d, 0x6f, 0x20, 0x74, 0x72, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x72, 0x65, 0x26, 0x65, + 0x6c, 0x20, 0x74, 0x72, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x72, 0x65, 0x20, 0x70, 0x61, 0x73, 0x61, + 0x64, 0x6f, 0x2e, 0x64, 0x65, 0x6e, 0x74, 0x72, + 0x6f, 0x20, 0x64, 0x65, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x74, 0x72, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x72, 0x65, 0x30, 0x64, 0x65, 0x6e, 0x74, 0x72, + 0x6f, 0x20, 0x64, 0x65, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x74, 0x72, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x72, 0x65, 0x73, 0x24, 0x68, 0x61, 0x63, 0x65, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x74, 0x72, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x72, 0x65, 0x26, 0x68, + 0x61, 0x63, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x74, 0x72, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x72, + 0x65, 0x73, 0x0e, 0x71, 0x75, 0x61, 0x72, 0x74, + 0x65, 0x72, 0x26, 0x64, 0x65, 0x6e, 0x74, 0x72, + 0x6f, 0x20, 0x64, 0x65, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x74, 0x72, 0x69, 0x6d, 0x2e, 0x1c, 0x68, + 0x61, 0x63, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x74, 0x72, 0x69, 0x6d, 0x2e, 0x1a, 0x71, 0x75, + 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x1c, 0x71, 0x75, 0x61, 0x72, + 0x74, 0x65, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x10, 0x65, 0x73, 0x74, 0x65, 0x20, + 0x6d, 0x65, 0x73, 0x1c, 0x65, 0x6c, 0x20, 0x70, + 0x72, 0xf3, 0x78, 0x69, 0x6d, 0x6f, 0x20, 0x6d, + 0x65, 0x73, 0x1a, 0x65, 0x6c, 0x20, 0x6d, 0x65, + 0x73, 0x20, 0x70, 0x61, 0x73, 0x61, 0x64, 0x6f, + 0x22, 0x64, 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x20, + 0x64, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, + 0x65, 0x73, 0x26, 0x64, 0x65, 0x6e, 0x74, 0x72, + 0x6f, 0x20, 0x64, 0x65, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x6d, 0x65, 0x73, 0x65, 0x73, 0x18, 0x68, + 0x61, 0x63, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x6d, 0x65, 0x73, 0x1c, 0x68, 0x61, 0x63, 0x65, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x65, 0x73, + 0x65, 0x73, 0x0a, 0x6d, 0x6f, 0x6e, 0x74, 0x68, + 0x1e, 0x64, 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x20, + 0x64, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, + 0x14, 0x68, 0x61, 0x63, 0x65, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x6d, 0x16, 0x6d, 0x6f, 0x6e, 0x74, + 0x68, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x18, + 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x16, 0x65, 0x73, 0x74, + 0x61, 0x20, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x61, + 0x22, 0x6c, 0x61, 0x20, 0x70, 0x72, 0xf3, 0x78, + 0x69, 0x6d, 0x61, 0x20, 0x73, 0x65, 0x6d, 0x61, + 0x6e, 0x61, 0x20, 0x6c, 0x61, 0x20, 0x73, 0x65, + 0x6d, 0x61, 0x6e, 0x61, 0x20, 0x70, 0x61, 0x73, + 0x61, 0x64, 0x61, 0x28, 0x64, 0x65, 0x6e, 0x74, + 0x72, 0x6f, 0x20, 0x64, 0x65, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x61, + 0x2a, 0x64, 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x20, + 0x64, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, + 0x65, 0x6d, 0x61, 0x6e, 0x61, 0x73, 0x1e, 0x68, + 0x61, 0x63, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x61, 0x20, 0x68, + 0x61, 0x63, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x61, 0x73, 0x08, + 0x77, 0x65, 0x65, 0x6b, 0x12, 0x65, 0x73, 0x74, + 0x61, 0x20, 0x73, 0x65, 0x6d, 0x2e, 0x14, 0x70, + 0x72, 0xf3, 0x78, 0x2e, 0x20, 0x73, 0x65, 0x6d, + 0x2e, 0x12, 0x73, 0x65, 0x6d, 0x2e, 0x20, 0x61, + 0x6e, 0x74, 0x2e, 0x24, 0x64, 0x65, 0x6e, 0x74, + 0x72, 0x6f, 0x20, 0x64, 0x65, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x73, 0x65, 0x6d, 0x2e, 0x1a, 0x68, + 0x61, 0x63, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x73, 0x65, 0x6d, 0x2e, 0x14, 0x77, 0x65, 0x65, + 0x6b, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, + 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x06, 0x68, 0x6f, 0x79, 0x0c, + 0x6d, 0x61, 0xf1, 0x61, 0x6e, 0x61, 0x1a, 0x70, + 0x61, 0x73, 0x61, 0x64, 0x6f, 0x20, 0x6d, 0x61, + 0xf1, 0x61, 0x6e, 0x61, 0x10, 0x61, 0x6e, 0x74, + 0x65, 0x61, 0x79, 0x65, 0x72, 0x04, 0x2d, 0x32, + 0x08, 0x61, 0x79, 0x65, 0x72, 0x22, 0x64, 0x65, + 0x6e, 0x74, 0x72, 0x6f, 0x20, 0x64, 0x65, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x64, 0xed, 0x61, 0x24, + 0x64, 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x20, 0x64, + 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x64, 0xed, + 0x61, 0x73, 0x18, 0x68, 0x61, 0x63, 0x65, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x64, 0xed, 0x61, 0x1a, + 0x68, 0x61, 0x63, 0x65, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x64, 0xed, 0x61, 0x73, 0x06, 0x64, 0x61, + 0x79, 0x12, 0x64, 0x61, 0x79, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x14, 0x64, 0x61, 0x79, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x12, 0x65, + 0x73, 0x74, 0x61, 0x20, 0x68, 0x6f, 0x72, 0x61, + 0x24, 0x64, 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x20, + 0x64, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x68, + 0x6f, 0x72, 0x61, 0x26, 0x64, 0x65, 0x6e, 0x74, + 0x72, 0x6f, 0x20, 0x64, 0x65, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x68, 0x6f, 0x72, 0x61, 0x73, 0x1a, + 0x68, 0x61, 0x63, 0x65, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x68, 0x6f, 0x72, 0x61, 0x1c, 0x68, 0x61, + 0x63, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x68, + 0x6f, 0x72, 0x61, 0x73, 0x08, 0x68, 0x6f, 0x75, + 0x72, 0x1e, 0x64, 0x65, 0x6e, 0x74, 0x72, 0x6f, + 0x20, 0x64, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x68, 0x14, 0x68, 0x61, 0x63, 0x65, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x68, 0x14, 0x68, 0x6f, 0x75, + 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, + 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x16, 0x65, 0x73, 0x74, 0x65, + 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x6f, 0x28, + 0x64, 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x20, 0x64, + 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x6f, 0x2a, 0x64, 0x65, 0x6e, + 0x74, 0x72, 0x6f, 0x20, 0x64, 0x65, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x74, + 0x6f, 0x73, 0x1e, 0x68, 0x61, 0x63, 0x65, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x75, + 0x74, 0x6f, 0x20, 0x68, 0x61, 0x63, 0x65, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x75, + 0x74, 0x6f, 0x73, 0x0c, 0x6d, 0x69, 0x6e, 0x75, + 0x74, 0x65, 0x22, 0x64, 0x65, 0x6e, 0x74, 0x72, + 0x6f, 0x20, 0x64, 0x65, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x6d, 0x69, 0x6e, 0x18, 0x68, 0x61, 0x63, + 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, + 0x6e, 0x18, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x6d, + 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x0a, 0x61, 0x68, 0x6f, + 0x72, 0x61, 0x2a, 0x64, 0x65, 0x6e, 0x74, 0x72, + 0x6f, 0x20, 0x64, 0x65, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x73, 0x65, 0x67, 0x75, 0x6e, 0x64, 0x6f, + 0x2c, 0x64, 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x20, + 0x64, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, + 0x65, 0x67, 0x75, 0x6e, 0x64, 0x6f, 0x73, 0x20, + 0x68, 0x61, 0x63, 0x65, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x73, 0x65, 0x67, 0x75, 0x6e, 0x64, 0x6f, + 0x22, 0x68, 0x61, 0x63, 0x65, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x73, 0x65, 0x67, 0x75, 0x6e, 0x64, + 0x6f, 0x73, 0x0c, 0x73, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x1e, 0x64, 0x65, 0x6e, 0x74, 0x72, 0x6f, + 0x20, 0x64, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x73, 0x14, 0x68, 0x61, 0x63, 0x65, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x73, 0x18, 0x73, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x1a, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x08, + 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, 0x75, 0x08, + 0x64, 0x61, 0x74, 0x61, 0x70, 0x6e, 0x6f, 0x64, + 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, + 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2d, 0x72, + 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x2d, + 0x74, 0x69, 0x6d, 0x65, 0x2d, 0x66, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x2f, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, + 0x65, 0x73, 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, + 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, 0x07, 0x00, + 0x00, 0x9a, 0x0f, 0x01, 0xa0, 0x01, 0x00, 0x00, + 0x00, 0x06, 0xc8, 0x04, 0xd0, 0x00, 0x00, 0x00, + 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, 0x00, + 0x00, 0x00, 0xaa, 0x6a, 0x85, 0x07, 0x00, 0x00, + 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, 0x00, + 0x00, 0x00, 0x43, 0xd0, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd3, 0x00, 0x00, 0x00, 0x4d, 0xd4, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xd5, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xd6, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xdf, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd5, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xd6, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe2, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe2, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe3, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xe3, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe4, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd5, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xd6, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe2, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe2, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe3, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xe3, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xe7, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe9, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xec, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xed, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xee, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xee, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xef, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0xf0, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0xee, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xef, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0xf1, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xf4, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf5, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xf8, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0xf9, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xf4, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xfb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0xfc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xf4, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xfb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0xfd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0x00, 0x01, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x01, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x04, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0x05, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0x08, 0x01, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x09, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x0a, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0x0b, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0x08, 0x01, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x09, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x0a, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0x0c, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x01, 0x00, + 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, 0x10, + 0x01, 0x00, 0x00, 0x4d, 0x11, 0x01, 0x00, 0x00, + 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x13, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x14, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x17, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x0d, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x0e, + 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, 0x02, 0x00, + 0x00, 0x80, 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, + 0x11, 0x01, 0x00, 0x00, 0x04, 0x12, 0x01, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x13, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0x18, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x01, 0x00, + 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, 0x10, + 0x01, 0x00, 0x00, 0x4d, 0x11, 0x01, 0x00, 0x00, + 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x13, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x14, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x19, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x1a, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, + 0x1b, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x1c, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x1e, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0x1f, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x20, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x20, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x21, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x21, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x22, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x20, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x20, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x21, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x21, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x23, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x24, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, + 0x25, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x27, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x28, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0x29, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x2a, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x2a, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x2b, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x2b, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x2c, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x2a, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x2a, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x2b, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x2b, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x2d, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x2e, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, + 0x2f, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x30, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x31, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x32, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0x33, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x34, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x34, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x35, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x35, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x36, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x34, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x34, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x35, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x35, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x37, + 0x01, 0x00, 0x00, 0x04, 0x38, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x39, 0x01, 0x00, 0x00, + 0x4d, 0x3a, 0x01, 0x00, 0x00, 0x24, 0x01, 0x00, + 0xc8, 0xc4, 0x28, 0xf6, 0x04, 0x01, 0xa9, 0x02, + 0x76, 0x53, 0x35, 0x08, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x1c, 0x12, 0x1c, 0x1c, + 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_es_US_size = 3763; + +const uint8_t intl_relative_es_US[3763] = { + 0x01, 0x6e, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x0a, 0x65, 0x73, 0x2d, 0x55, 0x53, + 0x0c, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x10, + 0x65, 0x73, 0x74, 0x65, 0x20, 0x61, 0xf1, 0x6f, + 0x1c, 0x65, 0x6c, 0x20, 0x61, 0xf1, 0x6f, 0x20, + 0x70, 0x72, 0xf3, 0x78, 0x69, 0x6d, 0x6f, 0x1a, + 0x65, 0x6c, 0x20, 0x61, 0xf1, 0x6f, 0x20, 0x70, + 0x61, 0x73, 0x61, 0x64, 0x6f, 0x04, 0x2d, 0x31, + 0x22, 0x64, 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x20, + 0x64, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x61, + 0xf1, 0x6f, 0x06, 0x6f, 0x6e, 0x65, 0x24, 0x64, + 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x20, 0x64, 0x65, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x61, 0xf1, 0x6f, + 0x73, 0x0a, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x0c, + 0x66, 0x75, 0x74, 0x75, 0x72, 0x65, 0x18, 0x68, + 0x61, 0x63, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x61, 0xf1, 0x6f, 0x1a, 0x68, 0x61, 0x63, 0x65, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x61, 0xf1, 0x6f, + 0x73, 0x08, 0x70, 0x61, 0x73, 0x74, 0x08, 0x79, + 0x65, 0x61, 0x72, 0x1c, 0x65, 0x6c, 0x20, 0x70, + 0x72, 0xf3, 0x78, 0x69, 0x6d, 0x6f, 0x20, 0x61, + 0xf1, 0x6f, 0x1e, 0x64, 0x65, 0x6e, 0x74, 0x72, + 0x6f, 0x20, 0x64, 0x65, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x61, 0x14, 0x68, 0x61, 0x63, 0x65, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x61, 0x14, 0x79, 0x65, + 0x61, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x16, 0x79, 0x65, 0x61, 0x72, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x1c, 0x65, 0x73, 0x74, + 0x65, 0x20, 0x74, 0x72, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x72, 0x65, 0x28, 0x65, 0x6c, 0x20, 0x70, + 0x72, 0xf3, 0x78, 0x69, 0x6d, 0x6f, 0x20, 0x74, + 0x72, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x72, 0x65, + 0x26, 0x65, 0x6c, 0x20, 0x74, 0x72, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x72, 0x65, 0x20, 0x70, 0x61, + 0x73, 0x61, 0x64, 0x6f, 0x2c, 0x64, 0x65, 0x6e, + 0x74, 0x72, 0x6f, 0x20, 0x64, 0x65, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x74, 0x72, 0x69, 0x6d, 0x65, + 0x74, 0x72, 0x65, 0x2e, 0x64, 0x65, 0x6e, 0x74, + 0x72, 0x6f, 0x20, 0x64, 0x65, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x74, 0x72, 0x69, 0x6d, 0x65, 0x74, + 0x72, 0x65, 0x73, 0x24, 0x68, 0x61, 0x63, 0x65, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x74, 0x72, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x72, 0x65, 0x26, 0x68, + 0x61, 0x63, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x74, 0x72, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x72, + 0x65, 0x73, 0x0e, 0x71, 0x75, 0x61, 0x72, 0x74, + 0x65, 0x72, 0x26, 0x64, 0x65, 0x6e, 0x74, 0x72, + 0x6f, 0x20, 0x64, 0x65, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x74, 0x72, 0x69, 0x6d, 0x2e, 0x1c, 0x68, + 0x61, 0x63, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x74, 0x72, 0x69, 0x6d, 0x2e, 0x1a, 0x71, 0x75, + 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x1c, 0x71, 0x75, 0x61, 0x72, + 0x74, 0x65, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x10, 0x65, 0x73, 0x74, 0x65, 0x20, + 0x6d, 0x65, 0x73, 0x1c, 0x65, 0x6c, 0x20, 0x6d, + 0x65, 0x73, 0x20, 0x70, 0x72, 0xf3, 0x78, 0x69, + 0x6d, 0x6f, 0x1a, 0x65, 0x6c, 0x20, 0x6d, 0x65, + 0x73, 0x20, 0x70, 0x61, 0x73, 0x61, 0x64, 0x6f, + 0x22, 0x64, 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x20, + 0x64, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, + 0x65, 0x73, 0x26, 0x64, 0x65, 0x6e, 0x74, 0x72, + 0x6f, 0x20, 0x64, 0x65, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x6d, 0x65, 0x73, 0x65, 0x73, 0x18, 0x68, + 0x61, 0x63, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x6d, 0x65, 0x73, 0x1c, 0x68, 0x61, 0x63, 0x65, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x65, 0x73, + 0x65, 0x73, 0x0a, 0x6d, 0x6f, 0x6e, 0x74, 0x68, + 0x1c, 0x65, 0x6c, 0x20, 0x70, 0x72, 0xf3, 0x78, + 0x69, 0x6d, 0x6f, 0x20, 0x6d, 0x65, 0x73, 0x1e, + 0x64, 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x20, 0x64, + 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x14, + 0x68, 0x61, 0x63, 0x65, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x6d, 0x16, 0x6d, 0x6f, 0x6e, 0x74, 0x68, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x18, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x16, 0x65, 0x73, 0x74, 0x61, + 0x20, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x61, 0x22, + 0x6c, 0x61, 0x20, 0x73, 0x65, 0x6d, 0x61, 0x6e, + 0x61, 0x20, 0x70, 0x72, 0xf3, 0x78, 0x69, 0x6d, + 0x61, 0x20, 0x6c, 0x61, 0x20, 0x73, 0x65, 0x6d, + 0x61, 0x6e, 0x61, 0x20, 0x70, 0x61, 0x73, 0x61, + 0x64, 0x61, 0x28, 0x64, 0x65, 0x6e, 0x74, 0x72, + 0x6f, 0x20, 0x64, 0x65, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x61, 0x2a, + 0x64, 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x20, 0x64, + 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, + 0x6d, 0x61, 0x6e, 0x61, 0x73, 0x1e, 0x68, 0x61, + 0x63, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, + 0x65, 0x6d, 0x61, 0x6e, 0x61, 0x20, 0x68, 0x61, + 0x63, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, + 0x65, 0x6d, 0x61, 0x6e, 0x61, 0x73, 0x08, 0x77, + 0x65, 0x65, 0x6b, 0x12, 0x65, 0x73, 0x74, 0x61, + 0x20, 0x73, 0x65, 0x6d, 0x2e, 0x14, 0x70, 0x72, + 0xf3, 0x78, 0x2e, 0x20, 0x73, 0x65, 0x6d, 0x2e, + 0x12, 0x73, 0x65, 0x6d, 0x2e, 0x20, 0x70, 0x61, + 0x73, 0x2e, 0x24, 0x64, 0x65, 0x6e, 0x74, 0x72, + 0x6f, 0x20, 0x64, 0x65, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x73, 0x65, 0x6d, 0x2e, 0x1a, 0x68, 0x61, + 0x63, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, + 0x65, 0x6d, 0x2e, 0x14, 0x77, 0x65, 0x65, 0x6b, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, 0x77, + 0x65, 0x65, 0x6b, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x06, 0x68, 0x6f, 0x79, 0x0c, 0x6d, + 0x61, 0xf1, 0x61, 0x6e, 0x61, 0x1a, 0x70, 0x61, + 0x73, 0x61, 0x64, 0x6f, 0x20, 0x6d, 0x61, 0xf1, + 0x61, 0x6e, 0x61, 0x10, 0x61, 0x6e, 0x74, 0x65, + 0x61, 0x79, 0x65, 0x72, 0x04, 0x2d, 0x32, 0x08, + 0x61, 0x79, 0x65, 0x72, 0x22, 0x64, 0x65, 0x6e, + 0x74, 0x72, 0x6f, 0x20, 0x64, 0x65, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x64, 0xed, 0x61, 0x24, 0x64, + 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x20, 0x64, 0x65, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x64, 0xed, 0x61, + 0x73, 0x18, 0x68, 0x61, 0x63, 0x65, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x64, 0xed, 0x61, 0x1a, 0x68, + 0x61, 0x63, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x64, 0xed, 0x61, 0x73, 0x06, 0x64, 0x61, 0x79, + 0x12, 0x64, 0x61, 0x79, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x14, 0x64, 0x61, 0x79, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x12, 0x65, 0x73, + 0x74, 0x61, 0x20, 0x68, 0x6f, 0x72, 0x61, 0x24, + 0x64, 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x20, 0x64, + 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x68, 0x6f, + 0x72, 0x61, 0x26, 0x64, 0x65, 0x6e, 0x74, 0x72, + 0x6f, 0x20, 0x64, 0x65, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x68, 0x6f, 0x72, 0x61, 0x73, 0x1a, 0x68, + 0x61, 0x63, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x68, 0x6f, 0x72, 0x61, 0x1c, 0x68, 0x61, 0x63, + 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x68, 0x6f, + 0x72, 0x61, 0x73, 0x08, 0x68, 0x6f, 0x75, 0x72, + 0x1e, 0x64, 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x20, + 0x64, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x68, + 0x14, 0x68, 0x61, 0x63, 0x65, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x68, 0x14, 0x68, 0x6f, 0x75, 0x72, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, 0x68, + 0x6f, 0x75, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x16, 0x65, 0x73, 0x74, 0x65, 0x20, + 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x6f, 0x28, 0x64, + 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x20, 0x64, 0x65, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, + 0x75, 0x74, 0x6f, 0x2a, 0x64, 0x65, 0x6e, 0x74, + 0x72, 0x6f, 0x20, 0x64, 0x65, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x6f, + 0x73, 0x1e, 0x68, 0x61, 0x63, 0x65, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x74, + 0x6f, 0x20, 0x68, 0x61, 0x63, 0x65, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x74, + 0x6f, 0x73, 0x0c, 0x6d, 0x69, 0x6e, 0x75, 0x74, + 0x65, 0x22, 0x64, 0x65, 0x6e, 0x74, 0x72, 0x6f, + 0x20, 0x64, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x6d, 0x69, 0x6e, 0x18, 0x68, 0x61, 0x63, 0x65, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, + 0x18, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x0a, 0x61, 0x68, 0x6f, 0x72, + 0x61, 0x2a, 0x64, 0x65, 0x6e, 0x74, 0x72, 0x6f, + 0x20, 0x64, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x73, 0x65, 0x67, 0x75, 0x6e, 0x64, 0x6f, 0x2c, + 0x64, 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x20, 0x64, + 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, + 0x67, 0x75, 0x6e, 0x64, 0x6f, 0x73, 0x20, 0x68, + 0x61, 0x63, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x73, 0x65, 0x67, 0x75, 0x6e, 0x64, 0x6f, 0x22, + 0x68, 0x61, 0x63, 0x65, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x73, 0x65, 0x67, 0x75, 0x6e, 0x64, 0x6f, + 0x73, 0x0c, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, + 0x1e, 0x64, 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x20, + 0x64, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, + 0x14, 0x68, 0x61, 0x63, 0x65, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x73, 0x18, 0x73, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x1a, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x08, 0x6c, + 0x61, 0x74, 0x6e, 0x04, 0x6e, 0x75, 0x08, 0x64, + 0x61, 0x74, 0x61, 0x76, 0x6e, 0x6f, 0x64, 0x65, + 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, + 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2d, 0x72, 0x65, + 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x2d, 0x74, + 0x69, 0x6d, 0x65, 0x2d, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x65, + 0x73, 0x2d, 0x55, 0x53, 0x2e, 0x6a, 0x73, 0x0d, + 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, + 0x07, 0x00, 0x00, 0x9a, 0x0f, 0x01, 0xa0, 0x01, + 0x00, 0x00, 0x00, 0x06, 0xc8, 0x04, 0xd0, 0x00, + 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, + 0xd2, 0x00, 0x00, 0x00, 0xaa, 0x6a, 0x85, 0x07, + 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, + 0xd2, 0x00, 0x00, 0x00, 0x43, 0xd0, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd3, 0x00, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xd5, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd5, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xe2, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe3, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xe3, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0xe5, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd5, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xe2, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe3, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xe3, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe7, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xec, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0xee, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0xef, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xf0, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0xf1, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xef, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xf0, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf0, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xf2, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xf4, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xf5, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xf7, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xf8, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf9, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xfa, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xfb, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xf5, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xfc, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xfd, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xfd, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xfe, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xfb, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xf5, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xfc, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xfd, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xfd, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xff, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0x01, 0x01, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x02, + 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x04, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x05, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x06, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x07, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0x09, 0x01, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x0a, + 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x0b, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x0c, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0c, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x0d, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0x09, 0x01, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x0a, + 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x0b, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x0c, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0c, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x0e, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0x10, 0x01, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x11, + 0x01, 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, + 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, 0x13, 0x01, + 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x17, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x18, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0x19, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x0f, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, + 0x02, 0x00, 0x00, 0x80, 0x04, 0x12, 0x01, 0x00, + 0x00, 0x4d, 0x13, 0x01, 0x00, 0x00, 0x04, 0x14, + 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x17, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x18, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x1a, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0x10, 0x01, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x11, + 0x01, 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, + 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, 0x13, 0x01, + 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x17, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x18, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0x1b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x1c, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x0b, 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x1e, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x1f, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x20, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x21, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x22, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x22, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x23, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x23, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x24, + 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x22, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x22, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x23, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x23, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0x25, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x26, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x0b, 0x04, 0x27, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x28, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x29, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x2a, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x2b, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x2c, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x2c, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x2d, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x2d, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x2e, + 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x2c, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x2c, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x2d, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x2d, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0x2f, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x30, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x0b, 0x04, 0x31, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x32, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x33, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x34, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x35, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x36, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x36, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x37, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x37, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x38, + 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x36, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x36, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x37, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x37, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0x39, 0x01, 0x00, 0x00, 0x04, 0x3a, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x3b, 0x01, + 0x00, 0x00, 0x4d, 0x3c, 0x01, 0x00, 0x00, 0x24, + 0x01, 0x00, 0xc8, 0xc4, 0x28, 0xfa, 0x04, 0x01, + 0xa9, 0x02, 0x76, 0x53, 0x35, 0x08, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x1c, 0x12, + 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_et_size = 3558; + +const uint8_t intl_relative_et[3558] = { + 0x01, 0x72, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x04, 0x65, 0x74, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x1c, 0x6b, 0xe4, 0x65, + 0x73, 0x6f, 0x6c, 0x65, 0x76, 0x20, 0x61, 0x61, + 0x73, 0x74, 0x61, 0x1c, 0x6a, 0xe4, 0x72, 0x67, + 0x6d, 0x69, 0x6e, 0x65, 0x20, 0x61, 0x61, 0x73, + 0x74, 0x61, 0x1a, 0x65, 0x65, 0x6c, 0x6d, 0x69, + 0x6e, 0x65, 0x20, 0x61, 0x61, 0x73, 0x74, 0x61, + 0x04, 0x2d, 0x31, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x61, 0x61, 0x73, 0x74, 0x61, 0x20, 0x70, 0xe4, + 0x72, 0x61, 0x73, 0x74, 0x06, 0x6f, 0x6e, 0x65, + 0x0a, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x0c, 0x66, + 0x75, 0x74, 0x75, 0x72, 0x65, 0x1c, 0x7b, 0x30, + 0x7d, 0x20, 0x61, 0x61, 0x73, 0x74, 0x61, 0x20, + 0x65, 0x65, 0x73, 0x74, 0x08, 0x70, 0x61, 0x73, + 0x74, 0x08, 0x79, 0x65, 0x61, 0x72, 0x14, 0x6b, + 0xe4, 0x65, 0x73, 0x6f, 0x6c, 0x65, 0x76, 0x20, + 0x61, 0x14, 0x6a, 0xe4, 0x72, 0x67, 0x6d, 0x69, + 0x6e, 0x65, 0x20, 0x61, 0x12, 0x65, 0x65, 0x6c, + 0x6d, 0x69, 0x6e, 0x65, 0x20, 0x61, 0x18, 0x7b, + 0x30, 0x7d, 0x20, 0x61, 0x20, 0x70, 0xe4, 0x72, + 0x61, 0x73, 0x74, 0x14, 0x7b, 0x30, 0x7d, 0x20, + 0x61, 0x20, 0x65, 0x65, 0x73, 0x74, 0x14, 0x79, + 0x65, 0x61, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x0a, 0x73, 0x65, 0x65, 0x20, 0x61, 0x10, + 0x6a, 0xe4, 0x72, 0x67, 0x6d, 0x2e, 0x20, 0x61, + 0x0e, 0x65, 0x65, 0x6c, 0x6d, 0x2e, 0x20, 0x61, + 0x16, 0x79, 0x65, 0x61, 0x72, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x20, 0x6b, 0xe4, 0x65, + 0x73, 0x6f, 0x6c, 0x65, 0x76, 0x20, 0x6b, 0x76, + 0x61, 0x72, 0x74, 0x61, 0x6c, 0x20, 0x6a, 0xe4, + 0x72, 0x67, 0x6d, 0x69, 0x6e, 0x65, 0x20, 0x6b, + 0x76, 0x61, 0x72, 0x74, 0x61, 0x6c, 0x1e, 0x65, + 0x65, 0x6c, 0x6d, 0x69, 0x6e, 0x65, 0x20, 0x6b, + 0x76, 0x61, 0x72, 0x74, 0x61, 0x6c, 0x26, 0x7b, + 0x30, 0x7d, 0x20, 0x6b, 0x76, 0x61, 0x72, 0x74, + 0x61, 0x6c, 0x69, 0x20, 0x70, 0xe4, 0x72, 0x61, + 0x73, 0x74, 0x22, 0x7b, 0x30, 0x7d, 0x20, 0x6b, + 0x76, 0x61, 0x72, 0x74, 0x61, 0x6c, 0x69, 0x20, + 0x65, 0x65, 0x73, 0x74, 0x0e, 0x71, 0x75, 0x61, + 0x72, 0x74, 0x65, 0x72, 0x16, 0x6b, 0xe4, 0x65, + 0x73, 0x6f, 0x6c, 0x65, 0x76, 0x20, 0x6b, 0x76, + 0x16, 0x6a, 0xe4, 0x72, 0x67, 0x6d, 0x69, 0x6e, + 0x65, 0x20, 0x6b, 0x76, 0x14, 0x65, 0x65, 0x6c, + 0x6d, 0x69, 0x6e, 0x65, 0x20, 0x6b, 0x76, 0x1a, + 0x7b, 0x30, 0x7d, 0x20, 0x6b, 0x76, 0x20, 0x70, + 0xe4, 0x72, 0x61, 0x73, 0x74, 0x16, 0x7b, 0x30, + 0x7d, 0x20, 0x6b, 0x76, 0x20, 0x65, 0x65, 0x73, + 0x74, 0x1a, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, + 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1c, + 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x18, 0x6b, + 0xe4, 0x65, 0x73, 0x6f, 0x6c, 0x65, 0x76, 0x20, + 0x6b, 0x75, 0x75, 0x18, 0x6a, 0xe4, 0x72, 0x67, + 0x6d, 0x69, 0x6e, 0x65, 0x20, 0x6b, 0x75, 0x75, + 0x16, 0x65, 0x65, 0x6c, 0x6d, 0x69, 0x6e, 0x65, + 0x20, 0x6b, 0x75, 0x75, 0x1c, 0x7b, 0x30, 0x7d, + 0x20, 0x6b, 0x75, 0x75, 0x20, 0x70, 0xe4, 0x72, + 0x61, 0x73, 0x74, 0x18, 0x7b, 0x30, 0x7d, 0x20, + 0x6b, 0x75, 0x75, 0x20, 0x65, 0x65, 0x73, 0x74, + 0x0a, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x0e, 0x73, + 0x65, 0x65, 0x20, 0x6b, 0x75, 0x75, 0x14, 0x6a, + 0xe4, 0x72, 0x67, 0x6d, 0x2e, 0x20, 0x6b, 0x75, + 0x75, 0x12, 0x65, 0x65, 0x6c, 0x6d, 0x2e, 0x20, + 0x6b, 0x75, 0x75, 0x16, 0x6d, 0x6f, 0x6e, 0x74, + 0x68, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0a, + 0x73, 0x65, 0x65, 0x20, 0x6b, 0x10, 0x6a, 0xe4, + 0x72, 0x67, 0x6d, 0x2e, 0x20, 0x6b, 0x0e, 0x65, + 0x65, 0x6c, 0x6d, 0x2e, 0x20, 0x6b, 0x18, 0x7b, + 0x30, 0x7d, 0x20, 0x6b, 0x20, 0x70, 0xe4, 0x72, + 0x61, 0x73, 0x74, 0x14, 0x7b, 0x30, 0x7d, 0x20, + 0x6b, 0x20, 0x65, 0x65, 0x73, 0x74, 0x18, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x1c, 0x6b, 0xe4, 0x65, 0x73, + 0x6f, 0x6c, 0x65, 0x76, 0x20, 0x6e, 0xe4, 0x64, + 0x61, 0x6c, 0x1c, 0x6a, 0xe4, 0x72, 0x67, 0x6d, + 0x69, 0x6e, 0x65, 0x20, 0x6e, 0xe4, 0x64, 0x61, + 0x6c, 0x1a, 0x65, 0x65, 0x6c, 0x6d, 0x69, 0x6e, + 0x65, 0x20, 0x6e, 0xe4, 0x64, 0x61, 0x6c, 0x22, + 0x7b, 0x30, 0x7d, 0x20, 0x6e, 0xe4, 0x64, 0x61, + 0x6c, 0x61, 0x20, 0x70, 0xe4, 0x72, 0x61, 0x73, + 0x74, 0x1e, 0x7b, 0x30, 0x7d, 0x20, 0x6e, 0xe4, + 0x64, 0x61, 0x6c, 0x61, 0x20, 0x65, 0x65, 0x73, + 0x74, 0x08, 0x77, 0x65, 0x65, 0x6b, 0x0e, 0x73, + 0x65, 0x65, 0x20, 0x6e, 0xe4, 0x64, 0x14, 0x6a, + 0xe4, 0x72, 0x67, 0x6d, 0x2e, 0x20, 0x6e, 0xe4, + 0x64, 0x12, 0x65, 0x65, 0x6c, 0x6d, 0x2e, 0x20, + 0x6e, 0xe4, 0x64, 0x1c, 0x7b, 0x30, 0x7d, 0x20, + 0x6e, 0xe4, 0x64, 0x20, 0x70, 0xe4, 0x72, 0x61, + 0x73, 0x74, 0x18, 0x7b, 0x30, 0x7d, 0x20, 0x6e, + 0xe4, 0x64, 0x20, 0x65, 0x65, 0x73, 0x74, 0x14, + 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x0a, 0x73, 0x65, 0x65, 0x20, 0x6e, + 0x10, 0x6a, 0xe4, 0x72, 0x67, 0x6d, 0x2e, 0x20, + 0x6e, 0x0e, 0x65, 0x65, 0x6c, 0x6d, 0x2e, 0x20, + 0x6e, 0x16, 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x08, 0x74, 0xe4, + 0x6e, 0x61, 0x0a, 0x68, 0x6f, 0x6d, 0x6d, 0x65, + 0x10, 0xfc, 0x6c, 0x65, 0x68, 0x6f, 0x6d, 0x6d, + 0x65, 0x0e, 0xfc, 0x6c, 0x65, 0x65, 0x69, 0x6c, + 0x65, 0x04, 0x2d, 0x32, 0x08, 0x65, 0x69, 0x6c, + 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x70, 0xe4, + 0x65, 0x76, 0x61, 0x20, 0x70, 0xe4, 0x72, 0x61, + 0x73, 0x74, 0x1c, 0x7b, 0x30, 0x7d, 0x20, 0x70, + 0xe4, 0x65, 0x76, 0x61, 0x20, 0x65, 0x65, 0x73, + 0x74, 0x06, 0x64, 0x61, 0x79, 0x18, 0x7b, 0x30, + 0x7d, 0x20, 0x70, 0x20, 0x70, 0xe4, 0x72, 0x61, + 0x73, 0x74, 0x14, 0x7b, 0x30, 0x7d, 0x20, 0x70, + 0x20, 0x65, 0x65, 0x73, 0x74, 0x12, 0x64, 0x61, + 0x79, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x14, + 0x64, 0x61, 0x79, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x20, 0x70, 0x72, 0x61, 0x65, 0x67, + 0x75, 0x73, 0x65, 0x6c, 0x20, 0x74, 0x75, 0x6e, + 0x6e, 0x69, 0x6c, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x74, 0x75, 0x6e, 0x6e, 0x69, 0x20, 0x70, 0xe4, + 0x72, 0x61, 0x73, 0x74, 0x1c, 0x7b, 0x30, 0x7d, + 0x20, 0x74, 0x75, 0x6e, 0x6e, 0x69, 0x20, 0x65, + 0x65, 0x73, 0x74, 0x08, 0x68, 0x6f, 0x75, 0x72, + 0x18, 0x7b, 0x30, 0x7d, 0x20, 0x74, 0x20, 0x70, + 0xe4, 0x72, 0x61, 0x73, 0x74, 0x14, 0x7b, 0x30, + 0x7d, 0x20, 0x74, 0x20, 0x65, 0x65, 0x73, 0x74, + 0x14, 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x16, 0x68, 0x6f, 0x75, 0x72, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x22, + 0x70, 0x72, 0x61, 0x65, 0x67, 0x75, 0x73, 0x65, + 0x6c, 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x69, + 0x6c, 0x22, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x69, 0x20, 0x70, 0xe4, 0x72, + 0x61, 0x73, 0x74, 0x1e, 0x7b, 0x30, 0x7d, 0x20, + 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x69, 0x20, 0x65, + 0x65, 0x73, 0x74, 0x0c, 0x6d, 0x69, 0x6e, 0x75, + 0x74, 0x65, 0x1c, 0x7b, 0x30, 0x7d, 0x20, 0x6d, + 0x69, 0x6e, 0x20, 0x70, 0xe4, 0x72, 0x61, 0x73, + 0x74, 0x18, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, + 0x6e, 0x20, 0x65, 0x65, 0x73, 0x74, 0x18, 0x6d, + 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x1a, 0x6d, 0x69, 0x6e, 0x75, + 0x74, 0x65, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x08, 0x6e, 0xfc, 0xfc, 0x64, 0x24, 0x7b, + 0x30, 0x7d, 0x20, 0x73, 0x65, 0x6b, 0x75, 0x6e, + 0x64, 0x69, 0x20, 0x70, 0xe4, 0x72, 0x61, 0x73, + 0x74, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, + 0x6b, 0x75, 0x6e, 0x64, 0x69, 0x20, 0x65, 0x65, + 0x73, 0x74, 0x0c, 0x73, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x1c, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, + 0x6b, 0x20, 0x70, 0xe4, 0x72, 0x61, 0x73, 0x74, + 0x18, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, 0x6b, + 0x20, 0x65, 0x65, 0x73, 0x74, 0x18, 0x73, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x18, 0x7b, 0x30, 0x7d, 0x20, 0x73, + 0x20, 0x70, 0xe4, 0x72, 0x61, 0x73, 0x74, 0x14, + 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x20, 0x65, 0x65, + 0x73, 0x74, 0x1a, 0x73, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, 0x75, + 0x08, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6e, 0x6f, + 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2d, + 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2d, 0x66, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x2f, 0x6c, 0x6f, 0x63, + 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, + 0x2f, 0x65, 0x74, 0x2e, 0x6a, 0x73, 0x0d, 0x00, + 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, 0x07, + 0x00, 0x00, 0xf2, 0x0e, 0x01, 0xa0, 0x01, 0x00, + 0x00, 0x00, 0x06, 0xc8, 0x04, 0xd0, 0x00, 0x00, + 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, + 0x00, 0x00, 0x00, 0xaa, 0x6a, 0x5d, 0x07, 0x00, + 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, + 0x00, 0x00, 0x00, 0x43, 0xd0, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xd3, 0x00, 0x00, 0x00, 0x4d, 0xd4, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xd5, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xe1, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xe2, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe3, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe3, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe4, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xe5, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xe7, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe3, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe3, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe4, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xe9, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xed, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xed, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xee, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xef, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf0, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xf1, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf3, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf3, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf4, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xf5, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf0, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xf1, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf3, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf3, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf4, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xf6, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf7, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xf8, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfa, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xfa, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfb, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xfc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfd, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xfe, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfa, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xfa, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfb, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x01, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0x02, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x04, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x04, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x05, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0x06, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x07, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0x08, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0a, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0a, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0b, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0x0c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x0d, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0x0e, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x10, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x10, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x11, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0x12, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x13, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0x14, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x10, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x10, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x11, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0x16, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x17, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0x18, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, 0x02, + 0x00, 0x00, 0x80, 0x04, 0x1a, 0x01, 0x00, 0x00, + 0x4d, 0x1b, 0x01, 0x00, 0x00, 0x04, 0x1c, 0x01, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x1e, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0x1f, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x20, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x20, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x21, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x21, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x22, 0x01, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x20, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x20, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x21, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0x23, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x24, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, + 0x04, 0x25, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x25, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x26, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0x27, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x28, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x28, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x29, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x29, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x2a, 0x01, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x28, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x28, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x29, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x29, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0x2b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x2c, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, + 0x04, 0x2d, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x2d, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x2e, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x2e, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0x2f, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x30, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x30, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x31, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x31, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x32, 0x01, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x30, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x30, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x31, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x31, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0x33, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x34, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, + 0x04, 0x35, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x35, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x36, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x36, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0x37, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x38, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x38, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x39, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x39, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x3a, 0x01, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x3b, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x3b, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x3c, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x3c, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0x3d, 0x01, 0x00, 0x00, 0x04, 0x3e, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x3f, 0x01, 0x00, + 0x00, 0x4d, 0x40, 0x01, 0x00, 0x00, 0x24, 0x01, + 0x00, 0xc8, 0xc4, 0x28, 0x82, 0x05, 0x01, 0xa5, + 0x02, 0x76, 0x53, 0x35, 0x08, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x1c, 0x12, 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_eu_size = 2968; + +const uint8_t intl_relative_eu[2968] = { + 0x01, 0x4d, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x04, 0x65, 0x75, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x0c, 0x61, 0x75, 0x72, + 0x74, 0x65, 0x6e, 0x1e, 0x68, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x67, 0x6f, 0x20, 0x75, 0x72, 0x74, + 0x65, 0x61, 0x6e, 0x06, 0x69, 0x61, 0x7a, 0x04, + 0x2d, 0x31, 0x1c, 0x7b, 0x30, 0x7d, 0x20, 0x75, + 0x72, 0x74, 0x65, 0x20, 0x62, 0x61, 0x72, 0x72, + 0x75, 0x06, 0x6f, 0x6e, 0x65, 0x0a, 0x6f, 0x74, + 0x68, 0x65, 0x72, 0x0c, 0x66, 0x75, 0x74, 0x75, + 0x72, 0x65, 0x1c, 0x44, 0x75, 0x65, 0x6c, 0x61, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x75, 0x72, 0x74, + 0x65, 0x08, 0x70, 0x61, 0x73, 0x74, 0x08, 0x79, + 0x65, 0x61, 0x72, 0x1c, 0x68, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x67, 0x6f, 0x20, 0x75, 0x72, 0x74, + 0x65, 0x61, 0x1a, 0x61, 0x75, 0x72, 0x72, 0x65, + 0x6b, 0x6f, 0x20, 0x75, 0x72, 0x74, 0x65, 0x61, + 0x14, 0x79, 0x65, 0x61, 0x72, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x16, 0x79, 0x65, 0x61, 0x72, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x1c, + 0x68, 0x69, 0x72, 0x75, 0x68, 0x69, 0x6c, 0x65, + 0x6b, 0x6f, 0x20, 0x68, 0x61, 0x75, 0x28, 0x68, + 0x75, 0x72, 0x72, 0x65, 0x6e, 0x67, 0x6f, 0x20, + 0x68, 0x69, 0x72, 0x75, 0x68, 0x69, 0x6c, 0x65, + 0x6b, 0x6f, 0x61, 0x26, 0x61, 0x75, 0x72, 0x72, + 0x65, 0x6b, 0x6f, 0x20, 0x68, 0x69, 0x72, 0x75, + 0x68, 0x69, 0x6c, 0x65, 0x6b, 0x6f, 0x61, 0x28, + 0x7b, 0x30, 0x7d, 0x20, 0x68, 0x69, 0x72, 0x75, + 0x68, 0x69, 0x6c, 0x65, 0x6b, 0x6f, 0x20, 0x62, + 0x61, 0x72, 0x72, 0x75, 0x28, 0x44, 0x75, 0x65, + 0x6c, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x68, + 0x69, 0x72, 0x75, 0x68, 0x69, 0x6c, 0x65, 0x6b, + 0x6f, 0x0e, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, + 0x72, 0x1a, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, + 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1c, + 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x20, 0x68, + 0x69, 0x6c, 0x61, 0x62, 0x65, 0x74, 0x65, 0x20, + 0x68, 0x6f, 0x6e, 0x65, 0x74, 0x61, 0x6e, 0x26, + 0x68, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x67, 0x6f, + 0x20, 0x68, 0x69, 0x6c, 0x61, 0x62, 0x65, 0x74, + 0x65, 0x61, 0x6e, 0x24, 0x61, 0x75, 0x72, 0x72, + 0x65, 0x6b, 0x6f, 0x20, 0x68, 0x69, 0x6c, 0x61, + 0x62, 0x65, 0x74, 0x65, 0x61, 0x6e, 0x24, 0x7b, + 0x30, 0x7d, 0x20, 0x68, 0x69, 0x6c, 0x61, 0x62, + 0x65, 0x74, 0x65, 0x20, 0x62, 0x61, 0x72, 0x72, + 0x75, 0x24, 0x44, 0x75, 0x65, 0x6c, 0x61, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x68, 0x69, 0x6c, 0x61, + 0x62, 0x65, 0x74, 0x65, 0x0a, 0x6d, 0x6f, 0x6e, + 0x74, 0x68, 0x16, 0x6d, 0x6f, 0x6e, 0x74, 0x68, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x18, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x18, 0x61, 0x73, 0x74, 0x65, + 0x20, 0x68, 0x6f, 0x6e, 0x65, 0x74, 0x61, 0x6e, + 0x1e, 0x68, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x67, + 0x6f, 0x20, 0x61, 0x73, 0x74, 0x65, 0x61, 0x6e, + 0x1c, 0x61, 0x75, 0x72, 0x72, 0x65, 0x6b, 0x6f, + 0x20, 0x61, 0x73, 0x74, 0x65, 0x61, 0x6e, 0x1c, + 0x7b, 0x30, 0x7d, 0x20, 0x61, 0x73, 0x74, 0x65, + 0x20, 0x62, 0x61, 0x72, 0x72, 0x75, 0x1c, 0x44, + 0x75, 0x65, 0x6c, 0x61, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x61, 0x73, 0x74, 0x65, 0x08, 0x77, 0x65, + 0x65, 0x6b, 0x14, 0x77, 0x65, 0x65, 0x6b, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, 0x77, 0x65, + 0x65, 0x6b, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x08, 0x67, 0x61, 0x75, 0x72, 0x0a, 0x62, + 0x69, 0x68, 0x61, 0x72, 0x08, 0x65, 0x74, 0x7a, + 0x69, 0x12, 0x68, 0x65, 0x72, 0x65, 0x6e, 0x65, + 0x67, 0x75, 0x6e, 0x04, 0x2d, 0x32, 0x08, 0x61, + 0x74, 0x7a, 0x6f, 0x1c, 0x7b, 0x30, 0x7d, 0x20, + 0x65, 0x67, 0x75, 0x6e, 0x20, 0x62, 0x61, 0x72, + 0x72, 0x75, 0x1c, 0x44, 0x75, 0x65, 0x6c, 0x61, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x65, 0x67, 0x75, + 0x6e, 0x06, 0x64, 0x61, 0x79, 0x12, 0x64, 0x61, + 0x79, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x14, + 0x64, 0x61, 0x79, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x18, 0x6f, 0x72, 0x64, 0x75, 0x20, + 0x68, 0x6f, 0x6e, 0x65, 0x74, 0x61, 0x6e, 0x1c, + 0x7b, 0x30, 0x7d, 0x20, 0x6f, 0x72, 0x64, 0x75, + 0x20, 0x62, 0x61, 0x72, 0x72, 0x75, 0x1c, 0x44, + 0x75, 0x65, 0x6c, 0x61, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x6f, 0x72, 0x64, 0x75, 0x08, 0x68, 0x6f, + 0x75, 0x72, 0x14, 0x68, 0x6f, 0x75, 0x72, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, 0x68, 0x6f, + 0x75, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x1c, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x75, + 0x20, 0x68, 0x6f, 0x6e, 0x65, 0x74, 0x61, 0x6e, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, + 0x75, 0x74, 0x75, 0x20, 0x62, 0x61, 0x72, 0x72, + 0x75, 0x20, 0x44, 0x75, 0x65, 0x6c, 0x61, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x75, + 0x74, 0x75, 0x0c, 0x6d, 0x69, 0x6e, 0x75, 0x74, + 0x65, 0x18, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x6d, + 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x0a, 0x6f, 0x72, 0x61, + 0x69, 0x6e, 0x22, 0x7b, 0x30, 0x7d, 0x20, 0x73, + 0x65, 0x67, 0x75, 0x6e, 0x64, 0x6f, 0x20, 0x62, + 0x61, 0x72, 0x72, 0x75, 0x22, 0x44, 0x75, 0x65, + 0x6c, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, + 0x65, 0x67, 0x75, 0x6e, 0x64, 0x6f, 0x0c, 0x73, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x18, 0x73, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x1a, 0x73, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, 0x75, + 0x08, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6e, 0x6f, + 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2d, + 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2d, 0x66, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x2f, 0x6c, 0x6f, 0x63, + 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, + 0x2f, 0x65, 0x75, 0x2e, 0x6a, 0x73, 0x0d, 0x00, + 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, 0x07, + 0x00, 0x00, 0xbe, 0x0d, 0x01, 0xa0, 0x01, 0x00, + 0x00, 0x00, 0x06, 0xc8, 0x04, 0xd0, 0x00, 0x00, + 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, + 0x00, 0x00, 0x00, 0xaa, 0x6a, 0xa9, 0x06, 0x00, + 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, + 0x00, 0x00, 0x00, 0x43, 0xd0, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xd3, 0x00, 0x00, 0x00, 0x4d, 0xd4, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xd5, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd5, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xe1, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xe2, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd5, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xe1, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xe3, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe4, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xe5, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe7, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe7, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe8, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xe9, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xe7, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xe8, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xed, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xee, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xf0, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0xf1, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xef, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf0, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf0, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xf2, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xef, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xef, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf0, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xf3, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf4, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xf5, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf7, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf7, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf8, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xf9, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xf7, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xfa, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xf8, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0xfb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xfd, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xfe, 0x00, + 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, + 0xff, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x01, 0x00, + 0x00, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x02, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x02, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x03, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0x04, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x02, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x05, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0x06, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x08, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x08, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x09, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0x0a, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x08, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x0b, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x09, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0x0c, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x0e, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0e, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0f, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0x10, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x0e, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x11, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x0f, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0x12, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x14, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x14, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0x16, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x14, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x17, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0x18, 0x01, 0x00, 0x00, + 0x04, 0x19, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x1a, 0x01, 0x00, 0x00, 0x4d, 0x1b, 0x01, + 0x00, 0x00, 0x24, 0x01, 0x00, 0xc8, 0xc4, 0x28, + 0xb8, 0x04, 0x01, 0x93, 0x02, 0x76, 0x53, 0x35, + 0x08, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x1c, 0x12, 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_fa_size = 3572; + +const uint8_t intl_relative_fa[3572] = { + 0x01, 0x4b, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x04, 0x66, 0x61, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x0b, 0x27, 0x06, 0x45, + 0x06, 0x33, 0x06, 0x27, 0x06, 0x44, 0x06, 0x13, + 0x33, 0x06, 0x27, 0x06, 0x44, 0x06, 0x20, 0x00, + 0x22, 0x06, 0xcc, 0x06, 0x46, 0x06, 0x2f, 0x06, + 0x47, 0x06, 0x13, 0x33, 0x06, 0x27, 0x06, 0x44, + 0x06, 0x20, 0x00, 0xaf, 0x06, 0x30, 0x06, 0x34, + 0x06, 0x2a, 0x06, 0x47, 0x06, 0x04, 0x2d, 0x31, + 0x17, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x33, 0x06, 0x27, 0x06, 0x44, 0x06, 0x20, + 0x00, 0x28, 0x06, 0x39, 0x06, 0x2f, 0x06, 0x06, + 0x6f, 0x6e, 0x65, 0x0a, 0x6f, 0x74, 0x68, 0x65, + 0x72, 0x0c, 0x66, 0x75, 0x74, 0x75, 0x72, 0x65, + 0x17, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x33, 0x06, 0x27, 0x06, 0x44, 0x06, 0x20, + 0x00, 0x7e, 0x06, 0xcc, 0x06, 0x34, 0x06, 0x08, + 0x70, 0x61, 0x73, 0x74, 0x08, 0x79, 0x65, 0x61, + 0x72, 0x14, 0x79, 0x65, 0x61, 0x72, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x16, 0x79, 0x65, 0x61, + 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x1d, 0x33, 0x06, 0x47, 0x06, 0x0c, 0x20, 0x45, + 0x06, 0x27, 0x06, 0x47, 0x06, 0x47, 0x06, 0x54, + 0x06, 0x20, 0x00, 0xa9, 0x06, 0x46, 0x06, 0x48, + 0x06, 0x46, 0x06, 0xcc, 0x06, 0x1d, 0x33, 0x06, + 0x47, 0x06, 0x0c, 0x20, 0x45, 0x06, 0x27, 0x06, + 0x47, 0x06, 0x47, 0x06, 0x54, 0x06, 0x20, 0x00, + 0x22, 0x06, 0xcc, 0x06, 0x46, 0x06, 0x2f, 0x06, + 0x47, 0x06, 0x1d, 0x33, 0x06, 0x47, 0x06, 0x0c, + 0x20, 0x45, 0x06, 0x27, 0x06, 0x47, 0x06, 0x47, + 0x06, 0x54, 0x06, 0x20, 0x00, 0xaf, 0x06, 0x30, + 0x06, 0x34, 0x06, 0x2a, 0x06, 0x47, 0x06, 0x21, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x33, 0x06, 0x47, 0x06, 0x0c, 0x20, 0x45, 0x06, + 0x27, 0x06, 0x47, 0x06, 0x47, 0x06, 0x54, 0x06, + 0x20, 0x00, 0x28, 0x06, 0x39, 0x06, 0x2f, 0x06, + 0x21, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x33, 0x06, 0x47, 0x06, 0x0c, 0x20, 0x45, + 0x06, 0x27, 0x06, 0x47, 0x06, 0x47, 0x06, 0x54, + 0x06, 0x20, 0x00, 0x7e, 0x06, 0xcc, 0x06, 0x34, + 0x06, 0x0e, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, + 0x72, 0x1a, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, + 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1c, + 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0f, 0x27, + 0x06, 0xcc, 0x06, 0x46, 0x06, 0x20, 0x00, 0x45, + 0x06, 0x27, 0x06, 0x47, 0x06, 0x13, 0x45, 0x06, + 0x27, 0x06, 0x47, 0x06, 0x20, 0x00, 0x22, 0x06, + 0xcc, 0x06, 0x46, 0x06, 0x2f, 0x06, 0x47, 0x06, + 0x13, 0x45, 0x06, 0x27, 0x06, 0x47, 0x06, 0x20, + 0x00, 0xaf, 0x06, 0x30, 0x06, 0x34, 0x06, 0x2a, + 0x06, 0x47, 0x06, 0x17, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x45, 0x06, 0x27, 0x06, + 0x47, 0x06, 0x20, 0x00, 0x28, 0x06, 0x39, 0x06, + 0x2f, 0x06, 0x17, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x45, 0x06, 0x27, 0x06, 0x47, + 0x06, 0x20, 0x00, 0x7e, 0x06, 0xcc, 0x06, 0x34, + 0x06, 0x0a, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x16, + 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x18, 0x6d, 0x6f, 0x6e, 0x74, + 0x68, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x11, 0x27, 0x06, 0xcc, 0x06, 0x46, 0x06, 0x20, + 0x00, 0x47, 0x06, 0x41, 0x06, 0x2a, 0x06, 0x47, + 0x06, 0x17, 0x47, 0x06, 0x41, 0x06, 0x2a, 0x06, + 0x47, 0x06, 0x54, 0x06, 0x20, 0x00, 0x22, 0x06, + 0xcc, 0x06, 0x46, 0x06, 0x2f, 0x06, 0x47, 0x06, + 0x17, 0x47, 0x06, 0x41, 0x06, 0x2a, 0x06, 0x47, + 0x06, 0x54, 0x06, 0x20, 0x00, 0xaf, 0x06, 0x30, + 0x06, 0x34, 0x06, 0x2a, 0x06, 0x47, 0x06, 0x19, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x47, 0x06, 0x41, 0x06, 0x2a, 0x06, 0x47, 0x06, + 0x20, 0x00, 0x28, 0x06, 0x39, 0x06, 0x2f, 0x06, + 0x19, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x47, 0x06, 0x41, 0x06, 0x2a, 0x06, 0x47, + 0x06, 0x20, 0x00, 0x7e, 0x06, 0xcc, 0x06, 0x34, + 0x06, 0x08, 0x77, 0x65, 0x65, 0x6b, 0x14, 0x77, + 0x65, 0x65, 0x6b, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x16, 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0b, 0x27, 0x06, + 0x45, 0x06, 0x31, 0x06, 0x48, 0x06, 0x32, 0x06, + 0x09, 0x41, 0x06, 0x31, 0x06, 0x2f, 0x06, 0x27, + 0x06, 0x0f, 0x7e, 0x06, 0x33, 0x06, 0x0c, 0x20, + 0x41, 0x06, 0x31, 0x06, 0x2f, 0x06, 0x27, 0x06, + 0x0d, 0x7e, 0x06, 0x31, 0x06, 0xcc, 0x06, 0x31, + 0x06, 0x48, 0x06, 0x32, 0x06, 0x04, 0x2d, 0x32, + 0x0b, 0x2f, 0x06, 0xcc, 0x06, 0x31, 0x06, 0x48, + 0x06, 0x32, 0x06, 0x17, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x31, 0x06, 0x48, 0x06, + 0x32, 0x06, 0x20, 0x00, 0x28, 0x06, 0x39, 0x06, + 0x2f, 0x06, 0x17, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x31, 0x06, 0x48, 0x06, 0x32, + 0x06, 0x20, 0x00, 0x7e, 0x06, 0xcc, 0x06, 0x34, + 0x06, 0x06, 0x64, 0x61, 0x79, 0x12, 0x64, 0x61, + 0x79, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x14, + 0x64, 0x61, 0x79, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x13, 0x47, 0x06, 0x45, 0x06, 0xcc, + 0x06, 0x46, 0x06, 0x20, 0x00, 0x33, 0x06, 0x27, + 0x06, 0x39, 0x06, 0x2a, 0x06, 0x19, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x33, 0x06, + 0x27, 0x06, 0x39, 0x06, 0x2a, 0x06, 0x20, 0x00, + 0x28, 0x06, 0x39, 0x06, 0x2f, 0x06, 0x19, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x33, + 0x06, 0x27, 0x06, 0x39, 0x06, 0x2a, 0x06, 0x20, + 0x00, 0x7e, 0x06, 0xcc, 0x06, 0x34, 0x06, 0x08, + 0x68, 0x6f, 0x75, 0x72, 0x14, 0x68, 0x6f, 0x75, + 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, + 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x15, 0x47, 0x06, 0x45, 0x06, + 0xcc, 0x06, 0x46, 0x06, 0x20, 0x00, 0x2f, 0x06, + 0x42, 0x06, 0xcc, 0x06, 0x42, 0x06, 0x47, 0x06, + 0x1b, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x2f, 0x06, 0x42, 0x06, 0xcc, 0x06, 0x42, + 0x06, 0x47, 0x06, 0x20, 0x00, 0x28, 0x06, 0x39, + 0x06, 0x2f, 0x06, 0x1b, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x2f, 0x06, 0x42, 0x06, + 0xcc, 0x06, 0x42, 0x06, 0x47, 0x06, 0x20, 0x00, + 0x7e, 0x06, 0xcc, 0x06, 0x34, 0x06, 0x0c, 0x6d, + 0x69, 0x6e, 0x75, 0x74, 0x65, 0x18, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x1a, 0x6d, 0x69, 0x6e, 0x75, 0x74, + 0x65, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x0b, 0x27, 0x06, 0xa9, 0x06, 0x46, 0x06, 0x48, + 0x06, 0x46, 0x06, 0x1b, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x2b, 0x06, 0x27, 0x06, + 0x46, 0x06, 0xcc, 0x06, 0x47, 0x06, 0x20, 0x00, + 0x28, 0x06, 0x39, 0x06, 0x2f, 0x06, 0x1b, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x2b, + 0x06, 0x27, 0x06, 0x46, 0x06, 0xcc, 0x06, 0x47, + 0x06, 0x20, 0x00, 0x7e, 0x06, 0xcc, 0x06, 0x34, + 0x06, 0x0c, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, + 0x18, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x73, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x0e, 0x61, 0x72, 0x61, 0x62, + 0x65, 0x78, 0x74, 0x04, 0x6e, 0x75, 0x08, 0x64, + 0x61, 0x74, 0x61, 0x70, 0x6e, 0x6f, 0x64, 0x65, + 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, + 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2d, 0x72, 0x65, + 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x2d, 0x74, + 0x69, 0x6d, 0x65, 0x2d, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x66, + 0x61, 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, + 0x9e, 0x01, 0x00, 0x01, 0x00, 0x07, 0x00, 0x00, + 0x92, 0x10, 0x01, 0xa0, 0x01, 0x00, 0x00, 0x00, + 0x06, 0xc8, 0x04, 0xd0, 0x00, 0x00, 0x00, 0x39, + 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, 0x00, 0x00, + 0x00, 0xaa, 0x6a, 0xfd, 0x07, 0x00, 0x00, 0x39, + 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, 0x00, 0x00, + 0x00, 0x43, 0xd0, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd3, 0x00, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0xd5, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd5, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd5, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe2, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xe3, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe6, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe2, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xe3, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe6, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe2, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xe3, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe6, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe9, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xec, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xed, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xee, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xee, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xef, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xec, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xed, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xee, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xee, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xf0, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xec, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xed, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xee, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xee, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xf1, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xf2, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xf3, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xf5, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf6, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf6, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xf7, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xf2, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xf3, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xf5, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf6, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf6, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xf8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xf2, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xf3, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xf5, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf6, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf6, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xf9, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xfa, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xfb, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xfc, 0x00, 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, + 0x80, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, 0xfe, + 0x00, 0x00, 0x00, 0x04, 0xff, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x00, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x02, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xfa, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xfc, 0x00, 0x00, 0x00, + 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, 0xfd, 0x00, + 0x00, 0x00, 0x4d, 0xfe, 0x00, 0x00, 0x00, 0x04, + 0xff, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x01, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x01, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x03, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xfa, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xfb, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xfc, 0x00, 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, + 0x80, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, 0xfe, + 0x00, 0x00, 0x00, 0x04, 0xff, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x00, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x04, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x05, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x07, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x07, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x08, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x05, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x06, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x09, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x05, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x07, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x07, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x0a, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x0b, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x0c, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x0e, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x0b, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x0c, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0d, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0d, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x0f, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x0b, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x0c, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x10, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x11, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x12, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x13, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x13, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x14, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x11, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x12, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x15, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x11, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x12, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x13, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x13, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x16, 0x01, + 0x00, 0x00, 0x04, 0x17, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x18, 0x01, 0x00, 0x00, 0x4d, + 0x19, 0x01, 0x00, 0x00, 0x24, 0x01, 0x00, 0xc8, + 0xc4, 0x28, 0xb4, 0x04, 0x01, 0xb5, 0x02, 0x76, + 0x53, 0x35, 0x08, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x1c, + 0x12, 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_fi_size = 4065; + +const uint8_t intl_relative_fi[4065] = { + 0x01, 0x7a, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x04, 0x66, 0x69, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x16, 0x74, 0xe4, 0x6e, + 0xe4, 0x20, 0x76, 0x75, 0x6f, 0x6e, 0x6e, 0x61, + 0x16, 0x65, 0x6e, 0x73, 0x69, 0x20, 0x76, 0x75, + 0x6f, 0x6e, 0x6e, 0x61, 0x18, 0x76, 0x69, 0x69, + 0x6d, 0x65, 0x20, 0x76, 0x75, 0x6f, 0x6e, 0x6e, + 0x61, 0x04, 0x2d, 0x31, 0x22, 0x7b, 0x30, 0x7d, + 0x20, 0x76, 0x75, 0x6f, 0x64, 0x65, 0x6e, 0x20, + 0x70, 0xe4, 0xe4, 0x73, 0x74, 0xe4, 0x06, 0x6f, + 0x6e, 0x65, 0x0a, 0x6f, 0x74, 0x68, 0x65, 0x72, + 0x0c, 0x66, 0x75, 0x74, 0x75, 0x72, 0x65, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x76, 0x75, 0x6f, 0x73, + 0x69, 0x20, 0x73, 0x69, 0x74, 0x74, 0x65, 0x6e, + 0x22, 0x7b, 0x30, 0x7d, 0x20, 0x76, 0x75, 0x6f, + 0x74, 0x74, 0x61, 0x20, 0x73, 0x69, 0x74, 0x74, + 0x65, 0x6e, 0x08, 0x70, 0x61, 0x73, 0x74, 0x08, + 0x79, 0x65, 0x61, 0x72, 0x0c, 0x74, 0xe4, 0x6e, + 0xe4, 0x20, 0x76, 0x0c, 0x65, 0x6e, 0x73, 0x69, + 0x20, 0x76, 0x0e, 0x76, 0x69, 0x69, 0x6d, 0x65, + 0x20, 0x76, 0x18, 0x7b, 0x30, 0x7d, 0x20, 0x76, + 0x20, 0x70, 0xe4, 0xe4, 0x73, 0x74, 0xe4, 0x18, + 0x7b, 0x30, 0x7d, 0x20, 0x76, 0x20, 0x73, 0x69, + 0x74, 0x74, 0x65, 0x6e, 0x14, 0x79, 0x65, 0x61, + 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, + 0x79, 0x65, 0x61, 0x72, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x28, 0x74, 0xe4, 0x6e, 0xe4, + 0x20, 0x6e, 0x65, 0x6c, 0x6a, 0xe4, 0x6e, 0x6e, + 0x65, 0x73, 0x76, 0x75, 0x6f, 0x6e, 0x6e, 0x61, + 0x28, 0x65, 0x6e, 0x73, 0x69, 0x20, 0x6e, 0x65, + 0x6c, 0x6a, 0xe4, 0x6e, 0x6e, 0x65, 0x73, 0x76, + 0x75, 0x6f, 0x6e, 0x6e, 0x61, 0x2a, 0x76, 0x69, + 0x69, 0x6d, 0x65, 0x20, 0x6e, 0x65, 0x6c, 0x6a, + 0xe4, 0x6e, 0x6e, 0x65, 0x73, 0x76, 0x75, 0x6f, + 0x6e, 0x6e, 0x61, 0x34, 0x7b, 0x30, 0x7d, 0x20, + 0x6e, 0x65, 0x6c, 0x6a, 0xe4, 0x6e, 0x6e, 0x65, + 0x73, 0x76, 0x75, 0x6f, 0x64, 0x65, 0x6e, 0x20, + 0x70, 0xe4, 0xe4, 0x73, 0x74, 0xe4, 0x32, 0x7b, + 0x30, 0x7d, 0x20, 0x6e, 0x65, 0x6c, 0x6a, 0xe4, + 0x6e, 0x6e, 0x65, 0x73, 0x76, 0x75, 0x6f, 0x73, + 0x69, 0x20, 0x73, 0x69, 0x74, 0x74, 0x65, 0x6e, + 0x34, 0x7b, 0x30, 0x7d, 0x20, 0x6e, 0x65, 0x6c, + 0x6a, 0xe4, 0x6e, 0x6e, 0x65, 0x73, 0x76, 0x75, + 0x6f, 0x74, 0x74, 0x61, 0x20, 0x73, 0x69, 0x74, + 0x74, 0x65, 0x6e, 0x0e, 0x71, 0x75, 0x61, 0x72, + 0x74, 0x65, 0x72, 0x24, 0x74, 0xe4, 0x6e, 0xe4, + 0x20, 0x6e, 0x65, 0x6c, 0x6a, 0xe4, 0x6e, 0x6e, + 0x65, 0x6b, 0x73, 0x65, 0x6e, 0xe4, 0x24, 0x65, + 0x6e, 0x73, 0x69, 0x20, 0x6e, 0x65, 0x6c, 0x6a, + 0xe4, 0x6e, 0x6e, 0x65, 0x6b, 0x73, 0x65, 0x6e, + 0xe4, 0x26, 0x76, 0x69, 0x69, 0x6d, 0x65, 0x20, + 0x6e, 0x65, 0x6c, 0x6a, 0xe4, 0x6e, 0x6e, 0x65, + 0x6b, 0x73, 0x65, 0x6e, 0xe4, 0x2e, 0x7b, 0x30, + 0x7d, 0x20, 0x6e, 0x65, 0x6c, 0x6a, 0xe4, 0x6e, + 0x6e, 0x65, 0x6b, 0x73, 0x65, 0x6e, 0x20, 0x70, + 0xe4, 0xe4, 0x73, 0x74, 0xe4, 0x28, 0x7b, 0x30, + 0x7d, 0x20, 0x6e, 0x65, 0x6c, 0x6a, 0xe4, 0x6e, + 0x6e, 0x65, 0x73, 0x20, 0x73, 0x69, 0x74, 0x74, + 0x65, 0x6e, 0x2c, 0x7b, 0x30, 0x7d, 0x20, 0x6e, + 0x65, 0x6c, 0x6a, 0xe4, 0x6e, 0x6e, 0x65, 0x73, + 0x74, 0xe4, 0x20, 0x73, 0x69, 0x74, 0x74, 0x65, + 0x6e, 0x1a, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, + 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x14, + 0x74, 0xe4, 0x6e, 0xe4, 0x20, 0x6e, 0x65, 0x6c, + 0x6a, 0x2e, 0x14, 0x65, 0x6e, 0x73, 0x69, 0x20, + 0x6e, 0x65, 0x6c, 0x6a, 0x2e, 0x16, 0x76, 0x69, + 0x69, 0x6d, 0x65, 0x20, 0x6e, 0x65, 0x6c, 0x6a, + 0x2e, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6e, 0x65, + 0x6c, 0x6a, 0x2e, 0x20, 0x70, 0xe4, 0xe4, 0x73, + 0x74, 0xe4, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6e, + 0x65, 0x6c, 0x6a, 0x2e, 0x20, 0x73, 0x69, 0x74, + 0x74, 0x65, 0x6e, 0x1c, 0x71, 0x75, 0x61, 0x72, + 0x74, 0x65, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x18, 0x74, 0xe4, 0x73, 0x73, 0xe4, + 0x20, 0x6b, 0x75, 0x75, 0x73, 0x73, 0x61, 0x16, + 0x65, 0x6e, 0x73, 0x69, 0x20, 0x6b, 0x75, 0x75, + 0x73, 0x73, 0x61, 0x18, 0x76, 0x69, 0x69, 0x6d, + 0x65, 0x20, 0x6b, 0x75, 0x75, 0x73, 0x73, 0x61, + 0x28, 0x7b, 0x30, 0x7d, 0x20, 0x6b, 0x75, 0x75, + 0x6b, 0x61, 0x75, 0x64, 0x65, 0x6e, 0x20, 0x70, + 0xe4, 0xe4, 0x73, 0x74, 0xe4, 0x26, 0x7b, 0x30, + 0x7d, 0x20, 0x6b, 0x75, 0x75, 0x6b, 0x61, 0x75, + 0x73, 0x69, 0x20, 0x73, 0x69, 0x74, 0x74, 0x65, + 0x6e, 0x28, 0x7b, 0x30, 0x7d, 0x20, 0x6b, 0x75, + 0x75, 0x6b, 0x61, 0x75, 0x74, 0x74, 0x61, 0x20, + 0x73, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x0a, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x10, 0x74, 0xe4, 0x73, + 0x73, 0xe4, 0x20, 0x6b, 0x6b, 0x0e, 0x65, 0x6e, + 0x73, 0x69, 0x20, 0x6b, 0x6b, 0x10, 0x76, 0x69, + 0x69, 0x6d, 0x65, 0x20, 0x6b, 0x6b, 0x1a, 0x7b, + 0x30, 0x7d, 0x20, 0x6b, 0x6b, 0x20, 0x70, 0xe4, + 0xe4, 0x73, 0x74, 0xe4, 0x1a, 0x7b, 0x30, 0x7d, + 0x20, 0x6b, 0x6b, 0x20, 0x73, 0x69, 0x74, 0x74, + 0x65, 0x6e, 0x16, 0x6d, 0x6f, 0x6e, 0x74, 0x68, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x18, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x1c, 0x74, 0xe4, 0x6c, 0x6c, + 0xe4, 0x20, 0x76, 0x69, 0x69, 0x6b, 0x6f, 0x6c, + 0x6c, 0x61, 0x1a, 0x65, 0x6e, 0x73, 0x69, 0x20, + 0x76, 0x69, 0x69, 0x6b, 0x6f, 0x6c, 0x6c, 0x61, + 0x1c, 0x76, 0x69, 0x69, 0x6d, 0x65, 0x20, 0x76, + 0x69, 0x69, 0x6b, 0x6f, 0x6c, 0x6c, 0x61, 0x22, + 0x7b, 0x30, 0x7d, 0x20, 0x76, 0x69, 0x69, 0x6b, + 0x6f, 0x6e, 0x20, 0x70, 0xe4, 0xe4, 0x73, 0x74, + 0xe4, 0x22, 0x7b, 0x30, 0x7d, 0x20, 0x76, 0x69, + 0x69, 0x6b, 0x6b, 0x6f, 0x20, 0x73, 0x69, 0x74, + 0x74, 0x65, 0x6e, 0x24, 0x7b, 0x30, 0x7d, 0x20, + 0x76, 0x69, 0x69, 0x6b, 0x6b, 0x6f, 0x61, 0x20, + 0x73, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x08, 0x77, + 0x65, 0x65, 0x6b, 0x10, 0x74, 0xe4, 0x6c, 0x6c, + 0xe4, 0x20, 0x76, 0x6b, 0x0e, 0x65, 0x6e, 0x73, + 0x69, 0x20, 0x76, 0x6b, 0x10, 0x76, 0x69, 0x69, + 0x6d, 0x65, 0x20, 0x76, 0x6b, 0x1a, 0x7b, 0x30, + 0x7d, 0x20, 0x76, 0x6b, 0x20, 0x70, 0xe4, 0xe4, + 0x73, 0x74, 0xe4, 0x1a, 0x7b, 0x30, 0x7d, 0x20, + 0x76, 0x6b, 0x20, 0x73, 0x69, 0x74, 0x74, 0x65, + 0x6e, 0x14, 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x16, 0x77, 0x65, 0x65, + 0x6b, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x0c, 0x74, 0xe4, 0x6e, 0xe4, 0xe4, 0x6e, 0x10, + 0x68, 0x75, 0x6f, 0x6d, 0x65, 0x6e, 0x6e, 0x61, + 0x16, 0x79, 0x6c, 0x69, 0x68, 0x75, 0x6f, 0x6d, + 0x65, 0x6e, 0x6e, 0x61, 0x1c, 0x74, 0x6f, 0x69, + 0x73, 0x73, 0x61, 0x20, 0x70, 0xe4, 0x69, 0x76, + 0xe4, 0x6e, 0xe4, 0x04, 0x2d, 0x32, 0x0a, 0x65, + 0x69, 0x6c, 0x65, 0x6e, 0x22, 0x7b, 0x30, 0x7d, + 0x20, 0x70, 0xe4, 0x69, 0x76, 0xe4, 0x6e, 0x20, + 0x70, 0xe4, 0xe4, 0x73, 0x74, 0xe4, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x70, 0xe4, 0x69, 0x76, 0xe4, + 0x20, 0x73, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x22, + 0x7b, 0x30, 0x7d, 0x20, 0x70, 0xe4, 0x69, 0x76, + 0xe4, 0xe4, 0x20, 0x73, 0x69, 0x74, 0x74, 0x65, + 0x6e, 0x06, 0x64, 0x61, 0x79, 0x0a, 0x68, 0x75, + 0x6f, 0x6d, 0x2e, 0x10, 0x79, 0x6c, 0x69, 0x68, + 0x75, 0x6f, 0x6d, 0x2e, 0x10, 0x74, 0x6f, 0x69, + 0x73, 0x73, 0x61, 0x70, 0x2e, 0x1a, 0x7b, 0x30, + 0x7d, 0x20, 0x70, 0x76, 0x20, 0x70, 0xe4, 0xe4, + 0x73, 0x74, 0xe4, 0x1a, 0x7b, 0x30, 0x7d, 0x20, + 0x70, 0x76, 0x20, 0x73, 0x69, 0x74, 0x74, 0x65, + 0x6e, 0x12, 0x64, 0x61, 0x79, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x14, 0x64, 0x61, 0x79, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x26, 0x74, + 0xe4, 0x6d, 0xe4, 0x6e, 0x20, 0x74, 0x75, 0x6e, + 0x6e, 0x69, 0x6e, 0x20, 0x61, 0x69, 0x6b, 0x61, + 0x6e, 0x61, 0x22, 0x7b, 0x30, 0x7d, 0x20, 0x74, + 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x20, 0x70, 0xe4, + 0xe4, 0x73, 0x74, 0xe4, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x74, 0x75, 0x6e, 0x74, 0x69, 0x20, 0x73, + 0x69, 0x74, 0x74, 0x65, 0x6e, 0x22, 0x7b, 0x30, + 0x7d, 0x20, 0x74, 0x75, 0x6e, 0x74, 0x69, 0x61, + 0x20, 0x73, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x08, + 0x68, 0x6f, 0x75, 0x72, 0x1c, 0x74, 0x75, 0x6e, + 0x6e, 0x69, 0x6e, 0x20, 0x73, 0x69, 0x73, 0xe4, + 0x6c, 0x6c, 0xe4, 0x18, 0x7b, 0x30, 0x7d, 0x20, + 0x74, 0x20, 0x70, 0xe4, 0xe4, 0x73, 0x74, 0xe4, + 0x18, 0x7b, 0x30, 0x7d, 0x20, 0x74, 0x20, 0x73, + 0x69, 0x74, 0x74, 0x65, 0x6e, 0x14, 0x68, 0x6f, + 0x75, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x16, 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x2a, 0x74, 0xe4, 0x6d, + 0xe4, 0x6e, 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x75, + 0x74, 0x69, 0x6e, 0x20, 0x61, 0x69, 0x6b, 0x61, + 0x6e, 0x61, 0x26, 0x7b, 0x30, 0x7d, 0x20, 0x6d, + 0x69, 0x6e, 0x75, 0x75, 0x74, 0x69, 0x6e, 0x20, + 0x70, 0xe4, 0xe4, 0x73, 0x74, 0xe4, 0x26, 0x7b, + 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x75, + 0x74, 0x74, 0x69, 0x20, 0x73, 0x69, 0x74, 0x74, + 0x65, 0x6e, 0x28, 0x7b, 0x30, 0x7d, 0x20, 0x6d, + 0x69, 0x6e, 0x75, 0x75, 0x74, 0x74, 0x69, 0x61, + 0x20, 0x73, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x0c, + 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x20, 0x6d, + 0x69, 0x6e, 0x75, 0x75, 0x74, 0x69, 0x6e, 0x20, + 0x73, 0x69, 0x73, 0xe4, 0x6c, 0x6c, 0xe4, 0x1c, + 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x20, + 0x70, 0xe4, 0xe4, 0x73, 0x74, 0xe4, 0x1c, 0x7b, + 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x20, 0x73, + 0x69, 0x74, 0x74, 0x65, 0x6e, 0x18, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x1a, 0x6d, 0x69, 0x6e, 0x75, 0x74, + 0x65, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x06, 0x6e, 0x79, 0x74, 0x26, 0x7b, 0x30, 0x7d, + 0x20, 0x73, 0x65, 0x6b, 0x75, 0x6e, 0x6e, 0x69, + 0x6e, 0x20, 0x70, 0xe4, 0xe4, 0x73, 0x74, 0xe4, + 0x24, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, 0x6b, + 0x75, 0x6e, 0x74, 0x69, 0x20, 0x73, 0x69, 0x74, + 0x74, 0x65, 0x6e, 0x26, 0x7b, 0x30, 0x7d, 0x20, + 0x73, 0x65, 0x6b, 0x75, 0x6e, 0x74, 0x69, 0x61, + 0x20, 0x73, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x0c, + 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x18, 0x7b, + 0x30, 0x7d, 0x20, 0x73, 0x20, 0x70, 0xe4, 0xe4, + 0x73, 0x74, 0xe4, 0x18, 0x7b, 0x30, 0x7d, 0x20, + 0x73, 0x20, 0x73, 0x69, 0x74, 0x74, 0x65, 0x6e, + 0x18, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x73, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x08, 0x6c, 0x61, 0x74, 0x6e, + 0x04, 0x6e, 0x75, 0x08, 0x64, 0x61, 0x74, 0x61, + 0x70, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, + 0x74, 0x6c, 0x2d, 0x72, 0x65, 0x6c, 0x61, 0x74, + 0x69, 0x76, 0x65, 0x2d, 0x74, 0x69, 0x6d, 0x65, + 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2f, + 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, + 0x61, 0x74, 0x61, 0x2f, 0x66, 0x69, 0x2e, 0x6a, + 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, + 0x01, 0x00, 0x07, 0x00, 0x00, 0x92, 0x10, 0x01, + 0xa0, 0x01, 0x00, 0x00, 0x00, 0x06, 0xc8, 0x04, + 0xd0, 0x00, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, + 0x00, 0x42, 0xd2, 0x00, 0x00, 0x00, 0xaa, 0x6a, + 0xfd, 0x07, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, + 0x00, 0x42, 0xd2, 0x00, 0x00, 0x00, 0x43, 0xd0, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd3, 0x00, 0x00, + 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe1, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xe2, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xe3, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xe5, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe1, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xe2, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xe3, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xe5, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xed, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x00, 0x4d, 0xee, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xf1, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xf4, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x00, 0x4d, 0xf5, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xf8, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xfa, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x00, 0x4d, 0xfb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xfe, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xff, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x01, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x00, 0x4d, 0x02, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0x05, 0x01, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x06, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x00, 0x4d, 0x08, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0x05, 0x01, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x06, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x00, 0x4d, 0x09, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x01, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x0d, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x0f, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x00, 0x4d, 0x10, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0x13, 0x01, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x14, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x00, 0x4d, 0x16, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0x13, 0x01, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x14, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x00, 0x4d, 0x17, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x18, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x01, 0x00, + 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, 0x1b, + 0x01, 0x00, 0x00, 0x4d, 0x1c, 0x01, 0x00, 0x00, + 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x1e, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x1e, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x1f, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x20, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x4d, 0x21, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x18, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x22, + 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0x23, 0x01, 0x00, 0x00, 0x4d, 0x02, 0x00, + 0x00, 0x80, 0x04, 0x24, 0x01, 0x00, 0x00, 0x4d, + 0x1c, 0x01, 0x00, 0x00, 0x04, 0x1d, 0x01, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x25, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x25, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x26, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x00, 0x4d, 0x27, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x18, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0x22, 0x01, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0x23, 0x01, 0x00, + 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, 0x24, + 0x01, 0x00, 0x00, 0x4d, 0x1c, 0x01, 0x00, 0x00, + 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x25, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x25, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x26, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x26, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x4d, 0x28, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x29, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, + 0x2a, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x2a, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x2b, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x2c, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x00, 0x4d, 0x2d, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x2e, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x0b, 0x04, 0x2f, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x2f, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x30, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x30, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x4d, 0x31, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x2e, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, + 0x2f, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x30, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x30, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x00, 0x4d, 0x32, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x33, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x0b, 0x04, 0x34, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x34, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x35, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x36, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x4d, 0x37, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x38, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, + 0x39, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x39, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x3a, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x3a, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x00, 0x4d, 0x3b, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x38, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x0b, 0x04, 0x39, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x39, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x3a, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x3a, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x4d, 0x3c, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x3d, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, + 0x3e, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x3e, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x3f, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x40, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x00, 0x4d, 0x41, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x3d, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x0b, 0x04, 0x42, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x42, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x43, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x43, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x4d, 0x44, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x3d, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, + 0x42, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x42, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x43, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x43, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x47, 0x01, 0x00, 0x00, 0x4d, 0x48, 0x01, 0x00, + 0x00, 0x24, 0x01, 0x00, 0xc8, 0xc4, 0x28, 0x92, + 0x05, 0x01, 0xb5, 0x02, 0x76, 0x53, 0x35, 0x08, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x1c, 0x12, 0x1c, 0x1c, + 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_fr_size = 4049; + +const uint8_t intl_relative_fr[4049] = { + 0x01, 0x80, 0x01, 0x1e, 0x5f, 0x5f, 0x61, 0x64, + 0x64, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, + 0x61, 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, + 0x24, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x04, 0x66, 0x72, 0x0c, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x16, 0x63, 0x65, + 0x74, 0x74, 0x65, 0x20, 0x61, 0x6e, 0x6e, 0xe9, + 0x65, 0x23, 0x6c, 0x00, 0x19, 0x20, 0x61, 0x00, + 0x6e, 0x00, 0x6e, 0x00, 0xe9, 0x00, 0x65, 0x00, + 0x20, 0x00, 0x70, 0x00, 0x72, 0x00, 0x6f, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x65, 0x00, 0x21, 0x6c, 0x00, 0x19, + 0x20, 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0xe9, + 0x00, 0x65, 0x00, 0x20, 0x00, 0x64, 0x00, 0x65, + 0x00, 0x72, 0x00, 0x6e, 0x00, 0x69, 0x00, 0xe8, + 0x00, 0x72, 0x00, 0x65, 0x00, 0x04, 0x2d, 0x31, + 0x16, 0x64, 0x61, 0x6e, 0x73, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x61, 0x6e, 0x06, 0x6f, 0x6e, 0x65, + 0x18, 0x64, 0x61, 0x6e, 0x73, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x61, 0x6e, 0x73, 0x0a, 0x6f, 0x74, + 0x68, 0x65, 0x72, 0x0c, 0x66, 0x75, 0x74, 0x75, + 0x72, 0x65, 0x1a, 0x69, 0x6c, 0x20, 0x79, 0x20, + 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x61, 0x6e, + 0x1c, 0x69, 0x6c, 0x20, 0x79, 0x20, 0x61, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x61, 0x6e, 0x73, 0x08, + 0x70, 0x61, 0x73, 0x74, 0x08, 0x79, 0x65, 0x61, + 0x72, 0x14, 0x64, 0x61, 0x6e, 0x73, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x61, 0x18, 0x69, 0x6c, 0x20, + 0x79, 0x20, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x61, 0x14, 0x79, 0x65, 0x61, 0x72, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x2b, 0x7b, 0x30, + 0x7d, 0x20, 0x61, 0x0c, 0x2d, 0x7b, 0x30, 0x7d, + 0x20, 0x61, 0x16, 0x79, 0x65, 0x61, 0x72, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x18, 0x63, + 0x65, 0x20, 0x74, 0x72, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x72, 0x65, 0x2a, 0x6c, 0x65, 0x20, 0x74, + 0x72, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x72, 0x65, + 0x20, 0x70, 0x72, 0x6f, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x28, 0x6c, 0x65, 0x20, 0x74, 0x72, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x72, 0x65, 0x20, 0x64, + 0x65, 0x72, 0x6e, 0x69, 0x65, 0x72, 0x24, 0x64, + 0x61, 0x6e, 0x73, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x74, 0x72, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x72, + 0x65, 0x26, 0x64, 0x61, 0x6e, 0x73, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x74, 0x72, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x72, 0x65, 0x73, 0x28, 0x69, 0x6c, + 0x20, 0x79, 0x20, 0x61, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x74, 0x72, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x72, 0x65, 0x2a, 0x69, 0x6c, 0x20, 0x79, 0x20, + 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x74, 0x72, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x72, 0x65, 0x73, + 0x0e, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, + 0x10, 0x63, 0x65, 0x20, 0x74, 0x72, 0x69, 0x6d, + 0x2e, 0x1e, 0x6c, 0x65, 0x20, 0x74, 0x72, 0x69, + 0x6d, 0x2e, 0x20, 0x70, 0x72, 0x6f, 0x63, 0x68, + 0x2e, 0x1c, 0x6c, 0x65, 0x20, 0x74, 0x72, 0x69, + 0x6d, 0x2e, 0x20, 0x64, 0x65, 0x72, 0x6e, 0x2e, + 0x1c, 0x64, 0x61, 0x6e, 0x73, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x74, 0x72, 0x69, 0x6d, 0x2e, 0x20, + 0x69, 0x6c, 0x20, 0x79, 0x20, 0x61, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x74, 0x72, 0x69, 0x6d, 0x2e, + 0x1a, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x18, 0x74, + 0x72, 0x69, 0x6d, 0x2e, 0x20, 0x70, 0x72, 0x6f, + 0x63, 0x68, 0x2e, 0x16, 0x74, 0x72, 0x69, 0x6d, + 0x2e, 0x20, 0x64, 0x65, 0x72, 0x6e, 0x2e, 0x14, + 0x2b, 0x7b, 0x30, 0x7d, 0x20, 0x74, 0x72, 0x69, + 0x6d, 0x2e, 0x14, 0x2d, 0x7b, 0x30, 0x7d, 0x20, + 0x74, 0x72, 0x69, 0x6d, 0x2e, 0x1c, 0x71, 0x75, + 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x14, 0x63, 0x65, 0x20, + 0x6d, 0x6f, 0x69, 0x73, 0x2d, 0x63, 0x69, 0x20, + 0x6c, 0x65, 0x20, 0x6d, 0x6f, 0x69, 0x73, 0x20, + 0x70, 0x72, 0x6f, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x1e, 0x6c, 0x65, 0x20, 0x6d, 0x6f, 0x69, 0x73, + 0x20, 0x64, 0x65, 0x72, 0x6e, 0x69, 0x65, 0x72, + 0x1a, 0x64, 0x61, 0x6e, 0x73, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x6d, 0x6f, 0x69, 0x73, 0x1e, 0x69, + 0x6c, 0x20, 0x79, 0x20, 0x61, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x6d, 0x6f, 0x69, 0x73, 0x0a, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x16, 0x64, 0x61, 0x6e, + 0x73, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x2e, + 0x1a, 0x69, 0x6c, 0x20, 0x79, 0x20, 0x61, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x2e, 0x16, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x0e, 0x2b, 0x7b, 0x30, 0x7d, 0x20, + 0x6d, 0x2e, 0x0e, 0x2d, 0x7b, 0x30, 0x7d, 0x20, + 0x6d, 0x2e, 0x18, 0x6d, 0x6f, 0x6e, 0x74, 0x68, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x1a, + 0x63, 0x65, 0x74, 0x74, 0x65, 0x20, 0x73, 0x65, + 0x6d, 0x61, 0x69, 0x6e, 0x65, 0x28, 0x6c, 0x61, + 0x20, 0x73, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x65, + 0x20, 0x70, 0x72, 0x6f, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x65, 0x26, 0x6c, 0x61, 0x20, 0x73, 0x65, + 0x6d, 0x61, 0x69, 0x6e, 0x65, 0x20, 0x64, 0x65, + 0x72, 0x6e, 0x69, 0xe8, 0x72, 0x65, 0x20, 0x64, + 0x61, 0x6e, 0x73, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x73, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x65, 0x22, + 0x64, 0x61, 0x6e, 0x73, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x73, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x65, + 0x73, 0x24, 0x69, 0x6c, 0x20, 0x79, 0x20, 0x61, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, 0x6d, + 0x61, 0x69, 0x6e, 0x65, 0x26, 0x69, 0x6c, 0x20, + 0x79, 0x20, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x73, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x65, 0x73, + 0x08, 0x77, 0x65, 0x65, 0x6b, 0x1a, 0x64, 0x61, + 0x6e, 0x73, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, + 0x65, 0x6d, 0x2e, 0x1e, 0x69, 0x6c, 0x20, 0x79, + 0x20, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, + 0x65, 0x6d, 0x2e, 0x14, 0x77, 0x65, 0x65, 0x6b, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x12, 0x2b, + 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, 0x6d, 0x2e, + 0x12, 0x2d, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, + 0x6d, 0x2e, 0x16, 0x77, 0x65, 0x65, 0x6b, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x17, 0x61, + 0x00, 0x75, 0x00, 0x6a, 0x00, 0x6f, 0x00, 0x75, + 0x00, 0x72, 0x00, 0x64, 0x00, 0x19, 0x20, 0x68, + 0x00, 0x75, 0x00, 0x69, 0x00, 0x0c, 0x64, 0x65, + 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x61, 0x70, 0x72, + 0xe8, 0x73, 0x2d, 0x64, 0x65, 0x6d, 0x61, 0x69, + 0x6e, 0x14, 0x61, 0x76, 0x61, 0x6e, 0x74, 0x2d, + 0x68, 0x69, 0x65, 0x72, 0x04, 0x2d, 0x32, 0x08, + 0x68, 0x69, 0x65, 0x72, 0x1a, 0x64, 0x61, 0x6e, + 0x73, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6a, 0x6f, + 0x75, 0x72, 0x1c, 0x64, 0x61, 0x6e, 0x73, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x6a, 0x6f, 0x75, 0x72, + 0x73, 0x1e, 0x69, 0x6c, 0x20, 0x79, 0x20, 0x61, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6a, 0x6f, 0x75, + 0x72, 0x20, 0x69, 0x6c, 0x20, 0x79, 0x20, 0x61, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6a, 0x6f, 0x75, + 0x72, 0x73, 0x06, 0x64, 0x61, 0x79, 0x14, 0x64, + 0x61, 0x6e, 0x73, 0x20, 0x7b, 0x30, 0x7d, 0xa0, + 0x6a, 0x18, 0x69, 0x6c, 0x20, 0x79, 0x20, 0x61, + 0x20, 0x7b, 0x30, 0x7d, 0xa0, 0x6a, 0x12, 0x64, + 0x61, 0x79, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x0c, 0x2b, 0x7b, 0x30, 0x7d, 0x20, 0x6a, 0x0c, + 0x2d, 0x7b, 0x30, 0x7d, 0x20, 0x6a, 0x14, 0x64, + 0x61, 0x79, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x1c, 0x63, 0x65, 0x74, 0x74, 0x65, 0x20, + 0x68, 0x65, 0x75, 0x72, 0x65, 0x2d, 0x63, 0x69, + 0x1c, 0x64, 0x61, 0x6e, 0x73, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x68, 0x65, 0x75, 0x72, 0x65, 0x1e, + 0x64, 0x61, 0x6e, 0x73, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x68, 0x65, 0x75, 0x72, 0x65, 0x73, 0x20, + 0x69, 0x6c, 0x20, 0x79, 0x20, 0x61, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x68, 0x65, 0x75, 0x72, 0x65, + 0x22, 0x69, 0x6c, 0x20, 0x79, 0x20, 0x61, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x68, 0x65, 0x75, 0x72, + 0x65, 0x73, 0x08, 0x68, 0x6f, 0x75, 0x72, 0x0e, + 0x63, 0x65, 0x74, 0x74, 0x65, 0x20, 0x68, 0x14, + 0x64, 0x61, 0x6e, 0x73, 0x20, 0x7b, 0x30, 0x7d, + 0xa0, 0x68, 0x18, 0x69, 0x6c, 0x20, 0x79, 0x20, + 0x61, 0x20, 0x7b, 0x30, 0x7d, 0xa0, 0x68, 0x14, + 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x0c, 0x2b, 0x7b, 0x30, 0x7d, 0x20, + 0x68, 0x0c, 0x2d, 0x7b, 0x30, 0x7d, 0x20, 0x68, + 0x16, 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x1e, 0x63, 0x65, 0x74, + 0x74, 0x65, 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x74, + 0x65, 0x2d, 0x63, 0x69, 0x1e, 0x64, 0x61, 0x6e, + 0x73, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x65, 0x20, 0x64, 0x61, 0x6e, + 0x73, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x65, 0x73, 0x22, 0x69, 0x6c, + 0x20, 0x79, 0x20, 0x61, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x24, + 0x69, 0x6c, 0x20, 0x79, 0x20, 0x61, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x74, + 0x65, 0x73, 0x0c, 0x6d, 0x69, 0x6e, 0x75, 0x74, + 0x65, 0x12, 0x63, 0x65, 0x74, 0x74, 0x65, 0x20, + 0x6d, 0x69, 0x6e, 0x18, 0x64, 0x61, 0x6e, 0x73, + 0x20, 0x7b, 0x30, 0x7d, 0xa0, 0x6d, 0x69, 0x6e, + 0x1c, 0x69, 0x6c, 0x20, 0x79, 0x20, 0x61, 0x20, + 0x7b, 0x30, 0x7d, 0xa0, 0x6d, 0x69, 0x6e, 0x18, + 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x10, 0x2b, 0x7b, 0x30, + 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x10, 0x2d, 0x7b, + 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x1a, 0x6d, + 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x14, 0x6d, 0x61, 0x69, + 0x6e, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x20, + 0x64, 0x61, 0x6e, 0x73, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x65, + 0x22, 0x64, 0x61, 0x6e, 0x73, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, + 0x65, 0x73, 0x24, 0x69, 0x6c, 0x20, 0x79, 0x20, + 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x65, 0x26, 0x69, 0x6c, + 0x20, 0x79, 0x20, 0x61, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x65, + 0x73, 0x0c, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, + 0x14, 0x64, 0x61, 0x6e, 0x73, 0x20, 0x7b, 0x30, + 0x7d, 0xa0, 0x73, 0x18, 0x69, 0x6c, 0x20, 0x79, + 0x20, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0xa0, 0x73, + 0x18, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x2b, 0x7b, + 0x30, 0x7d, 0x20, 0x73, 0x0c, 0x2d, 0x7b, 0x30, + 0x7d, 0x20, 0x73, 0x1a, 0x73, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, + 0x75, 0x08, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6e, + 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, + 0x2d, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, + 0x65, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2d, 0x66, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2f, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, + 0x61, 0x2f, 0x66, 0x72, 0x2e, 0x6a, 0x73, 0x0d, + 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, + 0x07, 0x00, 0x00, 0xfe, 0x0f, 0x01, 0xa0, 0x01, + 0x00, 0x00, 0x00, 0x06, 0xc8, 0x04, 0xd0, 0x00, + 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, + 0xd2, 0x00, 0x00, 0x00, 0xaa, 0x6a, 0xe9, 0x07, + 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, + 0xd2, 0x00, 0x00, 0x00, 0x43, 0xd0, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd3, 0x00, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xd5, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd5, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe2, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xe2, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe3, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xe3, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0xe4, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd5, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe5, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xe5, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe8, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xec, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xed, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0xef, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf0, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf3, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xf3, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0xf5, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf0, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf8, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xf8, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0xfa, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfb, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfe, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xfe, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xff, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xfb, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x01, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x01, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x02, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0x03, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xfb, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x04, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x04, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x05, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0x06, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x07, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0a, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x0b, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x0c, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0x0e, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x07, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0f, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x0f, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x10, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0x11, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x07, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x12, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x12, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x13, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0x14, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, + 0x02, 0x00, 0x00, 0x80, 0x04, 0x18, 0x01, 0x00, + 0x00, 0x4d, 0x19, 0x01, 0x00, 0x00, 0x04, 0x1a, + 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x1b, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x1c, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x1d, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x1e, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x1f, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0x16, 0x01, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x17, + 0x01, 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, + 0x04, 0x18, 0x01, 0x00, 0x00, 0x4d, 0x19, 0x01, + 0x00, 0x00, 0x04, 0x1a, 0x01, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x20, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x20, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x21, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0x22, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, + 0x02, 0x00, 0x00, 0x80, 0x04, 0x18, 0x01, 0x00, + 0x00, 0x4d, 0x19, 0x01, 0x00, 0x00, 0x04, 0x1a, + 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x23, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x23, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x24, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x24, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x25, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x27, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x28, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x29, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x2a, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0x2b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x2c, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x0b, 0x04, 0x2d, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x2d, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x2e, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x2e, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x2f, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x2c, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x30, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x30, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x31, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x31, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0x32, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x33, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x0b, 0x04, 0x34, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x35, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x36, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x37, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x38, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x39, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x3a, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x3a, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x3b, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x3b, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0x3c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x39, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x0b, 0x04, 0x3d, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x3d, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x3e, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x3e, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x3f, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x40, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x41, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x42, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x43, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x44, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0x45, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x47, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0x48, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x49, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x4b, 0x01, 0x00, + 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, 0x4d, 0x4e, + 0x01, 0x00, 0x00, 0x24, 0x01, 0x00, 0xc8, 0xc4, + 0x28, 0x9e, 0x05, 0x01, 0xb3, 0x02, 0x76, 0x53, + 0x35, 0x08, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x1c, 0x12, 0x1c, 0x1c, + 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_gl_size = 3535; + +const uint8_t intl_relative_gl[3535] = { + 0x01, 0x71, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x04, 0x67, 0x6c, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x10, 0x65, 0x73, 0x74, + 0x65, 0x20, 0x61, 0x6e, 0x6f, 0x1a, 0x6f, 0x20, + 0x70, 0x72, 0xf3, 0x78, 0x69, 0x6d, 0x6f, 0x20, + 0x61, 0x6e, 0x6f, 0x18, 0x6f, 0x20, 0x61, 0x6e, + 0x6f, 0x20, 0x70, 0x61, 0x73, 0x61, 0x64, 0x6f, + 0x04, 0x2d, 0x31, 0x14, 0x65, 0x6e, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x61, 0x6e, 0x6f, 0x06, 0x6f, + 0x6e, 0x65, 0x16, 0x65, 0x6e, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x61, 0x6e, 0x6f, 0x73, 0x0a, 0x6f, + 0x74, 0x68, 0x65, 0x72, 0x0c, 0x66, 0x75, 0x74, + 0x75, 0x72, 0x65, 0x16, 0x68, 0x61, 0x69, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x61, 0x6e, 0x6f, 0x18, + 0x68, 0x61, 0x69, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x61, 0x6e, 0x6f, 0x73, 0x08, 0x70, 0x61, 0x73, + 0x74, 0x08, 0x79, 0x65, 0x61, 0x72, 0x14, 0x79, + 0x65, 0x61, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x16, 0x6f, 0x20, 0x70, 0x72, 0xf3, 0x78, + 0x2e, 0x20, 0x61, 0x6e, 0x6f, 0x14, 0x6f, 0x20, + 0x61, 0x6e, 0x6f, 0x20, 0x70, 0x61, 0x73, 0x2e, + 0x16, 0x79, 0x65, 0x61, 0x72, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x1c, 0x65, 0x73, 0x74, + 0x65, 0x20, 0x74, 0x72, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x72, 0x65, 0x26, 0x6f, 0x20, 0x70, 0x72, + 0xf3, 0x78, 0x69, 0x6d, 0x6f, 0x20, 0x74, 0x72, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x72, 0x65, 0x24, + 0x6f, 0x20, 0x74, 0x72, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x72, 0x65, 0x20, 0x70, 0x61, 0x73, 0x61, + 0x64, 0x6f, 0x20, 0x65, 0x6e, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x74, 0x72, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x72, 0x65, 0x22, 0x65, 0x6e, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x74, 0x72, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x72, 0x65, 0x73, 0x22, 0x68, 0x61, + 0x69, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x74, 0x72, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x72, 0x65, 0x24, + 0x68, 0x61, 0x69, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x74, 0x72, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x72, + 0x65, 0x73, 0x0e, 0x71, 0x75, 0x61, 0x72, 0x74, + 0x65, 0x72, 0x14, 0x65, 0x73, 0x74, 0x65, 0x20, + 0x74, 0x72, 0x69, 0x6d, 0x2e, 0x1c, 0x74, 0x72, + 0x69, 0x6d, 0x2e, 0x20, 0x73, 0x65, 0x67, 0x75, + 0x69, 0x6e, 0x74, 0x65, 0x18, 0x74, 0x72, 0x69, + 0x6d, 0x2e, 0x20, 0x70, 0x61, 0x73, 0x61, 0x64, + 0x6f, 0x18, 0x65, 0x6e, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x74, 0x72, 0x69, 0x6d, 0x2e, 0x1a, 0x68, + 0x61, 0x69, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x74, + 0x72, 0x69, 0x6d, 0x2e, 0x1a, 0x71, 0x75, 0x61, + 0x72, 0x74, 0x65, 0x72, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x1c, 0x71, 0x75, 0x61, 0x72, 0x74, + 0x65, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x10, 0x65, 0x73, 0x74, 0x65, 0x20, 0x6d, + 0x65, 0x73, 0x1a, 0x6f, 0x20, 0x70, 0x72, 0xf3, + 0x78, 0x69, 0x6d, 0x6f, 0x20, 0x6d, 0x65, 0x73, + 0x18, 0x6f, 0x20, 0x6d, 0x65, 0x73, 0x20, 0x70, + 0x61, 0x73, 0x61, 0x64, 0x6f, 0x14, 0x65, 0x6e, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x65, 0x73, + 0x18, 0x65, 0x6e, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x6d, 0x65, 0x73, 0x65, 0x73, 0x16, 0x68, 0x61, + 0x69, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x65, + 0x73, 0x1a, 0x68, 0x61, 0x69, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x6d, 0x65, 0x73, 0x65, 0x73, 0x0a, + 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x16, 0x6d, 0x6f, + 0x6e, 0x74, 0x68, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x16, 0x6f, 0x20, 0x70, 0x72, 0xf3, 0x78, + 0x2e, 0x20, 0x6d, 0x65, 0x73, 0x14, 0x6f, 0x20, + 0x6d, 0x65, 0x73, 0x20, 0x70, 0x61, 0x73, 0x2e, + 0x18, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x16, 0x65, 0x73, + 0x74, 0x61, 0x20, 0x73, 0x65, 0x6d, 0x61, 0x6e, + 0x61, 0x20, 0x61, 0x20, 0x70, 0x72, 0xf3, 0x78, + 0x69, 0x6d, 0x61, 0x20, 0x73, 0x65, 0x6d, 0x61, + 0x6e, 0x61, 0x1e, 0x61, 0x20, 0x73, 0x65, 0x6d, + 0x61, 0x6e, 0x61, 0x20, 0x70, 0x61, 0x73, 0x61, + 0x64, 0x61, 0x1a, 0x65, 0x6e, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x61, + 0x1c, 0x65, 0x6e, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x61, 0x73, 0x1c, + 0x68, 0x61, 0x69, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x61, 0x1e, 0x68, + 0x61, 0x69, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, + 0x65, 0x6d, 0x61, 0x6e, 0x61, 0x73, 0x08, 0x77, + 0x65, 0x65, 0x6b, 0x12, 0x65, 0x73, 0x74, 0x61, + 0x20, 0x73, 0x65, 0x6d, 0x2e, 0x1c, 0x61, 0x20, + 0x70, 0x72, 0xf3, 0x78, 0x69, 0x6d, 0x61, 0x20, + 0x73, 0x65, 0x6d, 0x2e, 0x1a, 0x61, 0x20, 0x73, + 0x65, 0x6d, 0x2e, 0x20, 0x70, 0x61, 0x73, 0x61, + 0x64, 0x61, 0x16, 0x65, 0x6e, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x73, 0x65, 0x6d, 0x2e, 0x18, 0x68, + 0x61, 0x69, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, + 0x65, 0x6d, 0x2e, 0x14, 0x77, 0x65, 0x65, 0x6b, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x18, 0x61, + 0x20, 0x70, 0x72, 0xf3, 0x78, 0x2e, 0x20, 0x73, + 0x65, 0x6d, 0x2e, 0x16, 0x61, 0x20, 0x73, 0x65, + 0x6d, 0x2e, 0x20, 0x70, 0x61, 0x73, 0x2e, 0x16, + 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x08, 0x68, 0x6f, 0x78, 0x65, + 0x08, 0x6d, 0x61, 0xf1, 0xe1, 0x14, 0x70, 0x61, + 0x73, 0x61, 0x64, 0x6f, 0x6d, 0x61, 0xf1, 0xe1, + 0x0e, 0x61, 0x6e, 0x74, 0x6f, 0x6e, 0x74, 0x65, + 0x04, 0x2d, 0x32, 0x08, 0x6f, 0x6e, 0x74, 0x65, + 0x14, 0x65, 0x6e, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x64, 0xed, 0x61, 0x16, 0x65, 0x6e, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x64, 0xed, 0x61, 0x73, 0x16, + 0x68, 0x61, 0x69, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x64, 0xed, 0x61, 0x18, 0x68, 0x61, 0x69, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x64, 0xed, 0x61, 0x73, + 0x06, 0x64, 0x61, 0x79, 0x12, 0x64, 0x61, 0x79, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x14, 0x64, + 0x61, 0x79, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x12, 0x65, 0x73, 0x74, 0x61, 0x20, 0x68, + 0x6f, 0x72, 0x61, 0x16, 0x65, 0x6e, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x68, 0x6f, 0x72, 0x61, 0x18, + 0x65, 0x6e, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x68, + 0x6f, 0x72, 0x61, 0x73, 0x18, 0x68, 0x61, 0x69, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x68, 0x6f, 0x72, + 0x61, 0x1a, 0x68, 0x61, 0x69, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x68, 0x6f, 0x72, 0x61, 0x73, 0x08, + 0x68, 0x6f, 0x75, 0x72, 0x10, 0x65, 0x6e, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x68, 0x12, 0x68, 0x61, + 0x69, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x68, 0x14, + 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x16, 0x68, 0x6f, 0x75, 0x72, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x16, 0x65, + 0x73, 0x74, 0x65, 0x20, 0x6d, 0x69, 0x6e, 0x75, + 0x74, 0x6f, 0x1a, 0x65, 0x6e, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x6f, + 0x1c, 0x65, 0x6e, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x6f, 0x73, 0x1c, + 0x68, 0x61, 0x69, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x6f, 0x1e, 0x68, + 0x61, 0x69, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, + 0x69, 0x6e, 0x75, 0x74, 0x6f, 0x73, 0x0c, 0x6d, + 0x69, 0x6e, 0x75, 0x74, 0x65, 0x14, 0x65, 0x6e, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, + 0x16, 0x68, 0x61, 0x69, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x6d, 0x69, 0x6e, 0x18, 0x6d, 0x69, 0x6e, + 0x75, 0x74, 0x65, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x1a, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0a, + 0x61, 0x67, 0x6f, 0x72, 0x61, 0x1c, 0x65, 0x6e, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, 0x67, + 0x75, 0x6e, 0x64, 0x6f, 0x1e, 0x65, 0x6e, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, 0x67, 0x75, + 0x6e, 0x64, 0x6f, 0x73, 0x1e, 0x68, 0x61, 0x69, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, 0x67, + 0x75, 0x6e, 0x64, 0x6f, 0x20, 0x68, 0x61, 0x69, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, 0x67, + 0x75, 0x6e, 0x64, 0x6f, 0x73, 0x0c, 0x73, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x10, 0x65, 0x6e, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x12, 0x68, 0x61, + 0x69, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x18, + 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x73, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, + 0x6e, 0x75, 0x08, 0x64, 0x61, 0x74, 0x61, 0x70, + 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, + 0x6c, 0x2d, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, + 0x76, 0x65, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2d, + 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2f, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, + 0x74, 0x61, 0x2f, 0x67, 0x6c, 0x2e, 0x6a, 0x73, + 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, + 0x00, 0x07, 0x00, 0x00, 0xd4, 0x0e, 0x01, 0xa0, + 0x01, 0x00, 0x00, 0x00, 0x06, 0xc8, 0x04, 0xd0, + 0x00, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, + 0x42, 0xd2, 0x00, 0x00, 0x00, 0xaa, 0x6a, 0x3f, + 0x07, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, + 0x42, 0xd2, 0x00, 0x00, 0x00, 0x43, 0xd0, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd3, 0x00, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xe3, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xe4, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xe8, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe9, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xea, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xed, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xee, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xf0, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf1, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xf3, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xee, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xf0, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf1, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xf4, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xf7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf8, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xfc, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xfb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xfd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xfe, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xff, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xfb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0x02, 0x01, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x03, 0x01, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0x08, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0x0a, 0x01, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x0b, 0x01, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x0d, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0x0e, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0x0f, 0x01, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x10, 0x01, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x0d, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0x11, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0x13, 0x01, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x14, 0x01, + 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x4d, 0x16, 0x01, 0x00, + 0x00, 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x18, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x19, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x1a, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x1b, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0x1c, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x18, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x1a, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x1b, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0x1d, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x18, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x1a, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x1b, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0x1e, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x1f, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x20, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x21, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x22, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x23, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0x24, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x25, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x25, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0x27, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x25, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x25, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x26, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0x28, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x29, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x2a, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x2b, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x2c, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x2d, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0x2e, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x2f, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x30, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x30, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0x31, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x30, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x30, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0x32, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x33, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x34, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x35, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x36, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x37, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0x38, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x39, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x39, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x3a, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x3a, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0x3b, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x39, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x39, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x3a, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x3a, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0x3c, 0x01, 0x00, 0x00, + 0x04, 0x3d, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x3e, 0x01, 0x00, 0x00, 0x4d, 0x3f, 0x01, + 0x00, 0x00, 0x24, 0x01, 0x00, 0xc8, 0xc4, 0x28, + 0x80, 0x05, 0x01, 0xa2, 0x02, 0x76, 0x53, 0x35, + 0x08, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x1c, 0x12, 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_gu_size = 3587; + +const uint8_t intl_relative_gu[3587] = { + 0x01, 0x4d, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x04, 0x67, 0x75, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x0f, 0x86, 0x0a, 0x20, + 0x00, 0xb5, 0x0a, 0xb0, 0x0a, 0xcd, 0x0a, 0xb7, + 0x0a, 0xc7, 0x0a, 0x15, 0x86, 0x0a, 0xb5, 0x0a, + 0xa4, 0x0a, 0xbe, 0x0a, 0x20, 0x00, 0xb5, 0x0a, + 0xb0, 0x0a, 0xcd, 0x0a, 0xb7, 0x0a, 0xc7, 0x0a, + 0x13, 0x97, 0x0a, 0xaf, 0x0a, 0xbe, 0x0a, 0x20, + 0x00, 0xb5, 0x0a, 0xb0, 0x0a, 0xcd, 0x0a, 0xb7, + 0x0a, 0xc7, 0x0a, 0x04, 0x2d, 0x31, 0x17, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xb5, + 0x0a, 0xb0, 0x0a, 0xcd, 0x0a, 0xb7, 0x0a, 0xae, + 0x0a, 0xbe, 0x0a, 0x82, 0x0a, 0x06, 0x6f, 0x6e, + 0x65, 0x0a, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x0c, + 0x66, 0x75, 0x74, 0x75, 0x72, 0x65, 0x1f, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xb5, + 0x0a, 0xb0, 0x0a, 0xcd, 0x0a, 0xb7, 0x0a, 0x20, + 0x00, 0xaa, 0x0a, 0xb9, 0x0a, 0xc7, 0x0a, 0xb2, + 0x0a, 0xbe, 0x0a, 0x82, 0x0a, 0x08, 0x70, 0x61, + 0x73, 0x74, 0x08, 0x79, 0x65, 0x61, 0x72, 0x14, + 0x79, 0x65, 0x61, 0x72, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x16, 0x79, 0x65, 0x61, 0x72, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x17, 0x86, + 0x0a, 0x20, 0x00, 0xa4, 0x0a, 0xcd, 0x0a, 0xb0, + 0x0a, 0xbf, 0x0a, 0xae, 0x0a, 0xbe, 0x0a, 0xb8, + 0x0a, 0xbf, 0x0a, 0x95, 0x0a, 0x21, 0xaa, 0x0a, + 0x9b, 0x0a, 0xc0, 0x0a, 0xa8, 0x0a, 0xc1, 0x0a, + 0x82, 0x0a, 0x20, 0x00, 0xa4, 0x0a, 0xcd, 0x0a, + 0xb0, 0x0a, 0xbf, 0x0a, 0xae, 0x0a, 0xbe, 0x0a, + 0xb8, 0x0a, 0xbf, 0x0a, 0x95, 0x0a, 0x23, 0x9b, + 0x0a, 0xc7, 0x0a, 0xb2, 0x0a, 0xcd, 0x0a, 0xb2, + 0x0a, 0xc1, 0x0a, 0x82, 0x0a, 0x20, 0x00, 0xa4, + 0x0a, 0xcd, 0x0a, 0xb0, 0x0a, 0xbf, 0x0a, 0xae, + 0x0a, 0xbe, 0x0a, 0xb8, 0x0a, 0xbf, 0x0a, 0x95, + 0x0a, 0x21, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0xa4, 0x0a, 0xcd, 0x0a, 0xb0, 0x0a, + 0xbf, 0x0a, 0xae, 0x0a, 0xbe, 0x0a, 0xb8, 0x0a, + 0xbf, 0x0a, 0x95, 0x0a, 0xae, 0x0a, 0xbe, 0x0a, + 0x82, 0x0a, 0x29, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0xa4, 0x0a, 0xcd, 0x0a, 0xb0, + 0x0a, 0xbf, 0x0a, 0xae, 0x0a, 0xbe, 0x0a, 0xb8, + 0x0a, 0xbf, 0x0a, 0x95, 0x0a, 0x20, 0x00, 0xaa, + 0x0a, 0xb9, 0x0a, 0xc7, 0x0a, 0xb2, 0x0a, 0xbe, + 0x0a, 0x82, 0x0a, 0x0e, 0x71, 0x75, 0x61, 0x72, + 0x74, 0x65, 0x72, 0x1a, 0x71, 0x75, 0x61, 0x72, + 0x74, 0x65, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x1c, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, + 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x0f, 0x86, 0x0a, 0x20, 0x00, 0xae, 0x0a, 0xb9, + 0x0a, 0xbf, 0x0a, 0xa8, 0x0a, 0xc7, 0x0a, 0x15, + 0x86, 0x0a, 0xb5, 0x0a, 0xa4, 0x0a, 0xbe, 0x0a, + 0x20, 0x00, 0xae, 0x0a, 0xb9, 0x0a, 0xbf, 0x0a, + 0xa8, 0x0a, 0xc7, 0x0a, 0x13, 0x97, 0x0a, 0xaf, + 0x0a, 0xbe, 0x0a, 0x20, 0x00, 0xae, 0x0a, 0xb9, + 0x0a, 0xbf, 0x0a, 0xa8, 0x0a, 0xc7, 0x0a, 0x19, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0xae, 0x0a, 0xb9, 0x0a, 0xbf, 0x0a, 0xa8, 0x0a, + 0xbe, 0x0a, 0xae, 0x0a, 0xbe, 0x0a, 0x82, 0x0a, + 0x21, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0xae, 0x0a, 0xb9, 0x0a, 0xbf, 0x0a, 0xa8, + 0x0a, 0xbe, 0x0a, 0x20, 0x00, 0xaa, 0x0a, 0xb9, + 0x0a, 0xc7, 0x0a, 0xb2, 0x0a, 0xbe, 0x0a, 0x82, + 0x0a, 0x0a, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x16, + 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x18, 0x6d, 0x6f, 0x6e, 0x74, + 0x68, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x15, 0x86, 0x0a, 0x20, 0x00, 0x85, 0x0a, 0xa0, + 0x0a, 0xb5, 0x0a, 0xbe, 0x0a, 0xa1, 0x0a, 0xbf, + 0x0a, 0xaf, 0x0a, 0xc7, 0x0a, 0x1b, 0x86, 0x0a, + 0xb5, 0x0a, 0xa4, 0x0a, 0xbe, 0x0a, 0x20, 0x00, + 0x85, 0x0a, 0xa0, 0x0a, 0xb5, 0x0a, 0xbe, 0x0a, + 0xa1, 0x0a, 0xbf, 0x0a, 0xaf, 0x0a, 0xc7, 0x0a, + 0x19, 0x97, 0x0a, 0xaf, 0x0a, 0xbe, 0x0a, 0x20, + 0x00, 0x85, 0x0a, 0xa0, 0x0a, 0xb5, 0x0a, 0xbe, + 0x0a, 0xa1, 0x0a, 0xbf, 0x0a, 0xaf, 0x0a, 0xc7, + 0x0a, 0x1f, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x85, 0x0a, 0xa0, 0x0a, 0xb5, 0x0a, + 0xbe, 0x0a, 0xa1, 0x0a, 0xbf, 0x0a, 0xaf, 0x0a, + 0xbe, 0x0a, 0xae, 0x0a, 0xbe, 0x0a, 0x82, 0x0a, + 0x27, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x85, 0x0a, 0xa0, 0x0a, 0xb5, 0x0a, 0xbe, + 0x0a, 0xa1, 0x0a, 0xbf, 0x0a, 0xaf, 0x0a, 0xbe, + 0x0a, 0x20, 0x00, 0xaa, 0x0a, 0xb9, 0x0a, 0xc7, + 0x0a, 0xb2, 0x0a, 0xbe, 0x0a, 0x82, 0x0a, 0x08, + 0x77, 0x65, 0x65, 0x6b, 0x17, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x85, 0x0a, 0xa0, + 0x0a, 0x2e, 0x00, 0x20, 0x00, 0xae, 0x0a, 0xbe, + 0x0a, 0x82, 0x0a, 0x1d, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x85, 0x0a, 0xa0, 0x0a, + 0x2e, 0x00, 0x20, 0x00, 0xaa, 0x0a, 0xb9, 0x0a, + 0xc7, 0x0a, 0xb2, 0x0a, 0xbe, 0x0a, 0x82, 0x0a, + 0x14, 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x16, 0x77, 0x65, 0x65, 0x6b, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x07, + 0x86, 0x0a, 0x9c, 0x0a, 0xc7, 0x0a, 0x11, 0x86, + 0x0a, 0xb5, 0x0a, 0xa4, 0x0a, 0xc0, 0x0a, 0x95, + 0x0a, 0xbe, 0x0a, 0xb2, 0x0a, 0xc7, 0x0a, 0x11, + 0xaa, 0x0a, 0xb0, 0x0a, 0xae, 0x0a, 0xa6, 0x0a, + 0xbf, 0x0a, 0xb5, 0x0a, 0xb8, 0x0a, 0xc7, 0x0a, + 0x19, 0x97, 0x0a, 0xaf, 0x0a, 0xbe, 0x0a, 0x20, + 0x00, 0xaa, 0x0a, 0xb0, 0x0a, 0xae, 0x0a, 0xa6, + 0x0a, 0xbf, 0x0a, 0xb5, 0x0a, 0xb8, 0x0a, 0xc7, + 0x0a, 0x04, 0x2d, 0x32, 0x0d, 0x97, 0x0a, 0x88, + 0x0a, 0x95, 0x0a, 0xbe, 0x0a, 0xb2, 0x0a, 0xc7, + 0x0a, 0x17, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0xa6, 0x0a, 0xbf, 0x0a, 0xb5, 0x0a, + 0xb8, 0x0a, 0xae, 0x0a, 0xbe, 0x0a, 0x82, 0x0a, + 0x1f, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0xa6, 0x0a, 0xbf, 0x0a, 0xb5, 0x0a, 0xb8, + 0x0a, 0x20, 0x00, 0xaa, 0x0a, 0xb9, 0x0a, 0xc7, + 0x0a, 0xb2, 0x0a, 0xbe, 0x0a, 0x82, 0x0a, 0x06, + 0x64, 0x61, 0x79, 0x12, 0x64, 0x61, 0x79, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x14, 0x64, 0x61, + 0x79, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x0d, 0x86, 0x0a, 0x20, 0x00, 0x95, 0x0a, 0xb2, + 0x0a, 0xbe, 0x0a, 0x95, 0x0a, 0x17, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x95, 0x0a, + 0xb2, 0x0a, 0xbe, 0x0a, 0x95, 0x0a, 0xae, 0x0a, + 0xbe, 0x0a, 0x82, 0x0a, 0x1f, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x95, 0x0a, 0xb2, + 0x0a, 0xbe, 0x0a, 0x95, 0x0a, 0x20, 0x00, 0xaa, + 0x0a, 0xb9, 0x0a, 0xc7, 0x0a, 0xb2, 0x0a, 0xbe, + 0x0a, 0x82, 0x0a, 0x08, 0x68, 0x6f, 0x75, 0x72, + 0x14, 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x16, 0x68, 0x6f, 0x75, 0x72, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0f, + 0x86, 0x0a, 0x20, 0x00, 0xae, 0x0a, 0xbf, 0x0a, + 0xa8, 0x0a, 0xbf, 0x0a, 0x9f, 0x0a, 0x19, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xae, + 0x0a, 0xbf, 0x0a, 0xa8, 0x0a, 0xbf, 0x0a, 0x9f, + 0x0a, 0xae, 0x0a, 0xbe, 0x0a, 0x82, 0x0a, 0x21, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0xae, 0x0a, 0xbf, 0x0a, 0xa8, 0x0a, 0xbf, 0x0a, + 0x9f, 0x0a, 0x20, 0x00, 0xaa, 0x0a, 0xb9, 0x0a, + 0xc7, 0x0a, 0xb2, 0x0a, 0xbe, 0x0a, 0x82, 0x0a, + 0x0c, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x18, + 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x6d, 0x69, 0x6e, + 0x75, 0x74, 0x65, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x0b, 0xb9, 0x0a, 0xae, 0x0a, 0xa3, + 0x0a, 0xbe, 0x0a, 0x82, 0x0a, 0x19, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xb8, 0x0a, + 0xc7, 0x0a, 0x95, 0x0a, 0x82, 0x0a, 0xa1, 0x0a, + 0xae, 0x0a, 0xbe, 0x0a, 0x82, 0x0a, 0x21, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xb8, + 0x0a, 0xc7, 0x0a, 0x95, 0x0a, 0x82, 0x0a, 0xa1, + 0x0a, 0x20, 0x00, 0xaa, 0x0a, 0xb9, 0x0a, 0xc7, + 0x0a, 0xb2, 0x0a, 0xbe, 0x0a, 0x82, 0x0a, 0x0c, + 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x18, 0x73, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x1a, 0x73, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, + 0x75, 0x08, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6e, + 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, + 0x2d, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, + 0x65, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2d, 0x66, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2f, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, + 0x61, 0x2f, 0x67, 0x75, 0x2e, 0x6a, 0x73, 0x0d, + 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, + 0x07, 0x00, 0x00, 0x9a, 0x0f, 0x01, 0xa0, 0x01, + 0x00, 0x00, 0x00, 0x06, 0xc8, 0x04, 0xd0, 0x00, + 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, + 0xd2, 0x00, 0x00, 0x00, 0xaa, 0x6a, 0x85, 0x07, + 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, + 0xd2, 0x00, 0x00, 0x00, 0x43, 0xd0, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd3, 0x00, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xd5, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd5, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd5, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe2, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xe3, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe5, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xe5, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0xe5, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xe5, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xec, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xed, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xee, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xee, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0xef, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xec, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xed, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xee, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xee, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0xf0, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xec, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xed, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xee, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xee, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0xf1, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xf3, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xf4, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xf5, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xf6, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf6, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0xf7, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xf3, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xf4, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xf8, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xf9, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf9, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0xfa, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xf3, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xf4, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xf8, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xf9, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf9, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0xfb, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xfd, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xfe, + 0x00, 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, + 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x01, + 0x00, 0x00, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x02, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x02, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x03, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0x04, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xfc, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, + 0x02, 0x00, 0x00, 0x80, 0x04, 0xff, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x01, 0x00, 0x00, 0x04, 0x01, + 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x02, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x03, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x03, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0x05, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xfd, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xfe, + 0x00, 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, + 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x01, + 0x00, 0x00, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x02, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x02, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x03, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0x06, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x07, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x0b, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x08, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x09, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x09, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0x0a, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x08, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x08, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x09, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x09, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x0b, + 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x08, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x08, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x09, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0x0c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x0d, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x0b, 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x0e, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x0f, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0f, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0x10, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x0e, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0e, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0f, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x0f, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x11, + 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x0e, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x0e, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x0f, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0x12, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x13, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x0b, 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0x16, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x14, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x14, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x17, + 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x14, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x14, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0x18, 0x01, 0x00, 0x00, 0x04, 0x19, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x1a, 0x01, + 0x00, 0x00, 0x4d, 0x1b, 0x01, 0x00, 0x00, 0x24, + 0x01, 0x00, 0xc8, 0xc4, 0x28, 0xb8, 0x04, 0x01, + 0xa9, 0x02, 0x76, 0x53, 0x35, 0x08, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x1c, 0x12, + 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_hi_size = 3593; + +const uint8_t intl_relative_hi[3593] = { + 0x01, 0x58, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x04, 0x68, 0x69, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x0f, 0x07, 0x09, 0x38, + 0x09, 0x20, 0x00, 0x35, 0x09, 0x30, 0x09, 0x4d, + 0x09, 0x37, 0x09, 0x13, 0x05, 0x09, 0x17, 0x09, + 0x32, 0x09, 0x3e, 0x09, 0x20, 0x00, 0x35, 0x09, + 0x30, 0x09, 0x4d, 0x09, 0x37, 0x09, 0x15, 0x2a, + 0x09, 0x3f, 0x09, 0x1b, 0x09, 0x32, 0x09, 0x3e, + 0x09, 0x20, 0x00, 0x35, 0x09, 0x30, 0x09, 0x4d, + 0x09, 0x37, 0x09, 0x04, 0x2d, 0x31, 0x19, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x35, + 0x09, 0x30, 0x09, 0x4d, 0x09, 0x37, 0x09, 0x20, + 0x00, 0x2e, 0x09, 0x47, 0x09, 0x02, 0x09, 0x06, + 0x6f, 0x6e, 0x65, 0x0a, 0x6f, 0x74, 0x68, 0x65, + 0x72, 0x0c, 0x66, 0x75, 0x74, 0x75, 0x72, 0x65, + 0x1b, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x35, 0x09, 0x30, 0x09, 0x4d, 0x09, 0x37, + 0x09, 0x20, 0x00, 0x2a, 0x09, 0x39, 0x09, 0x32, + 0x09, 0x47, 0x09, 0x08, 0x70, 0x61, 0x73, 0x74, + 0x08, 0x79, 0x65, 0x61, 0x72, 0x14, 0x79, 0x65, + 0x61, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x0d, 0x07, 0x09, 0x38, 0x09, 0x20, 0x00, 0x38, + 0x09, 0x3e, 0x09, 0x32, 0x09, 0x11, 0x05, 0x09, + 0x17, 0x09, 0x32, 0x09, 0x47, 0x09, 0x20, 0x00, + 0x38, 0x09, 0x3e, 0x09, 0x32, 0x09, 0x13, 0x2a, + 0x09, 0x3f, 0x09, 0x1b, 0x09, 0x32, 0x09, 0x47, + 0x09, 0x20, 0x00, 0x38, 0x09, 0x3e, 0x09, 0x32, + 0x09, 0x16, 0x79, 0x65, 0x61, 0x72, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x13, 0x07, 0x09, + 0x38, 0x09, 0x20, 0x00, 0x24, 0x09, 0x3f, 0x09, + 0x2e, 0x09, 0x3e, 0x09, 0x39, 0x09, 0x40, 0x09, + 0x17, 0x05, 0x09, 0x17, 0x09, 0x32, 0x09, 0x40, + 0x09, 0x20, 0x00, 0x24, 0x09, 0x3f, 0x09, 0x2e, + 0x09, 0x3e, 0x09, 0x39, 0x09, 0x40, 0x09, 0x19, + 0x05, 0x09, 0x02, 0x09, 0x24, 0x09, 0x3f, 0x09, + 0x2e, 0x09, 0x20, 0x00, 0x24, 0x09, 0x3f, 0x09, + 0x2e, 0x09, 0x3e, 0x09, 0x39, 0x09, 0x40, 0x09, + 0x1d, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x24, 0x09, 0x3f, 0x09, 0x2e, 0x09, 0x3e, + 0x09, 0x39, 0x09, 0x40, 0x09, 0x20, 0x00, 0x2e, + 0x09, 0x47, 0x09, 0x02, 0x09, 0x23, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x24, 0x09, + 0x3f, 0x09, 0x2e, 0x09, 0x3e, 0x09, 0x39, 0x09, + 0x3f, 0x09, 0x2f, 0x09, 0x4b, 0x09, 0x02, 0x09, + 0x20, 0x00, 0x2e, 0x09, 0x47, 0x09, 0x02, 0x09, + 0x1f, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x24, 0x09, 0x3f, 0x09, 0x2e, 0x09, 0x3e, + 0x09, 0x39, 0x09, 0x40, 0x09, 0x20, 0x00, 0x2a, + 0x09, 0x39, 0x09, 0x32, 0x09, 0x47, 0x09, 0x0e, + 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x25, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x24, 0x09, 0x3f, 0x09, 0x2e, 0x09, 0x3e, 0x09, + 0x39, 0x09, 0x3f, 0x09, 0x2f, 0x09, 0x4b, 0x09, + 0x02, 0x09, 0x20, 0x00, 0x2a, 0x09, 0x39, 0x09, + 0x32, 0x09, 0x47, 0x09, 0x1a, 0x71, 0x75, 0x61, + 0x72, 0x74, 0x65, 0x72, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x17, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x24, 0x09, 0x3f, 0x09, 0x70, + 0x09, 0x20, 0x00, 0x2e, 0x09, 0x47, 0x09, 0x02, + 0x09, 0x19, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x24, 0x09, 0x3f, 0x09, 0x70, 0x09, + 0x20, 0x00, 0x2a, 0x09, 0x39, 0x09, 0x32, 0x09, + 0x47, 0x09, 0x1c, 0x71, 0x75, 0x61, 0x72, 0x74, + 0x65, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x0d, 0x07, 0x09, 0x38, 0x09, 0x20, 0x00, + 0x2e, 0x09, 0x3e, 0x09, 0x39, 0x09, 0x11, 0x05, + 0x09, 0x17, 0x09, 0x32, 0x09, 0x3e, 0x09, 0x20, + 0x00, 0x2e, 0x09, 0x3e, 0x09, 0x39, 0x09, 0x13, + 0x2a, 0x09, 0x3f, 0x09, 0x1b, 0x09, 0x32, 0x09, + 0x3e, 0x09, 0x20, 0x00, 0x2e, 0x09, 0x3e, 0x09, + 0x39, 0x09, 0x17, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x2e, 0x09, 0x3e, 0x09, 0x39, + 0x09, 0x20, 0x00, 0x2e, 0x09, 0x47, 0x09, 0x02, + 0x09, 0x19, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x2e, 0x09, 0x3e, 0x09, 0x39, 0x09, + 0x20, 0x00, 0x2a, 0x09, 0x39, 0x09, 0x32, 0x09, + 0x47, 0x09, 0x0a, 0x6d, 0x6f, 0x6e, 0x74, 0x68, + 0x16, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x18, 0x6d, 0x6f, 0x6e, + 0x74, 0x68, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x13, 0x07, 0x09, 0x38, 0x09, 0x20, 0x00, + 0x38, 0x09, 0x2a, 0x09, 0x4d, 0x09, 0x24, 0x09, + 0x3e, 0x09, 0x39, 0x09, 0x17, 0x05, 0x09, 0x17, + 0x09, 0x32, 0x09, 0x3e, 0x09, 0x20, 0x00, 0x38, + 0x09, 0x2a, 0x09, 0x4d, 0x09, 0x24, 0x09, 0x3e, + 0x09, 0x39, 0x09, 0x19, 0x2a, 0x09, 0x3f, 0x09, + 0x1b, 0x09, 0x32, 0x09, 0x3e, 0x09, 0x20, 0x00, + 0x38, 0x09, 0x2a, 0x09, 0x4d, 0x09, 0x24, 0x09, + 0x3e, 0x09, 0x39, 0x09, 0x1d, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x38, 0x09, 0x2a, + 0x09, 0x4d, 0x09, 0x24, 0x09, 0x3e, 0x09, 0x39, + 0x09, 0x20, 0x00, 0x2e, 0x09, 0x47, 0x09, 0x02, + 0x09, 0x1f, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x38, 0x09, 0x2a, 0x09, 0x4d, 0x09, + 0x24, 0x09, 0x3e, 0x09, 0x39, 0x09, 0x20, 0x00, + 0x2a, 0x09, 0x39, 0x09, 0x32, 0x09, 0x47, 0x09, + 0x08, 0x77, 0x65, 0x65, 0x6b, 0x14, 0x77, 0x65, + 0x65, 0x6b, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x16, 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x05, 0x06, 0x09, 0x1c, + 0x09, 0x05, 0x15, 0x09, 0x32, 0x09, 0x0b, 0x2a, + 0x09, 0x30, 0x09, 0x38, 0x09, 0x4b, 0x09, 0x02, + 0x09, 0x04, 0x2d, 0x32, 0x17, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x26, 0x09, 0x3f, + 0x09, 0x28, 0x09, 0x20, 0x00, 0x2e, 0x09, 0x47, + 0x09, 0x02, 0x09, 0x19, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x26, 0x09, 0x3f, 0x09, + 0x28, 0x09, 0x20, 0x00, 0x2a, 0x09, 0x39, 0x09, + 0x32, 0x09, 0x47, 0x09, 0x06, 0x64, 0x61, 0x79, + 0x17, 0x06, 0x09, 0x28, 0x09, 0x47, 0x09, 0x20, + 0x00, 0x35, 0x09, 0x3e, 0x09, 0x32, 0x09, 0x3e, + 0x09, 0x20, 0x00, 0x15, 0x09, 0x32, 0x09, 0x0f, + 0x2c, 0x09, 0x40, 0x09, 0x24, 0x09, 0x3e, 0x09, + 0x20, 0x00, 0x15, 0x09, 0x32, 0x09, 0x12, 0x64, + 0x61, 0x79, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x14, 0x64, 0x61, 0x79, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x0f, 0x2f, 0x09, 0x39, 0x09, + 0x20, 0x00, 0x18, 0x09, 0x02, 0x09, 0x1f, 0x09, + 0x3e, 0x09, 0x19, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x18, 0x09, 0x02, 0x09, 0x1f, + 0x09, 0x47, 0x09, 0x20, 0x00, 0x2e, 0x09, 0x47, + 0x09, 0x02, 0x09, 0x1b, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x18, 0x09, 0x02, 0x09, + 0x1f, 0x09, 0x47, 0x09, 0x20, 0x00, 0x2a, 0x09, + 0x39, 0x09, 0x32, 0x09, 0x47, 0x09, 0x08, 0x68, + 0x6f, 0x75, 0x72, 0x17, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x18, 0x09, 0x02, 0x09, + 0x70, 0x09, 0x20, 0x00, 0x2e, 0x09, 0x47, 0x09, + 0x02, 0x09, 0x19, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x18, 0x09, 0x02, 0x09, 0x70, + 0x09, 0x20, 0x00, 0x2a, 0x09, 0x39, 0x09, 0x32, + 0x09, 0x47, 0x09, 0x14, 0x68, 0x6f, 0x75, 0x72, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, 0x68, + 0x6f, 0x75, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x0f, 0x2f, 0x09, 0x39, 0x09, 0x20, + 0x00, 0x2e, 0x09, 0x3f, 0x09, 0x28, 0x09, 0x1f, + 0x09, 0x19, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x2e, 0x09, 0x3f, 0x09, 0x28, 0x09, + 0x1f, 0x09, 0x20, 0x00, 0x2e, 0x09, 0x47, 0x09, + 0x02, 0x09, 0x1b, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x2e, 0x09, 0x3f, 0x09, 0x28, + 0x09, 0x1f, 0x09, 0x20, 0x00, 0x2a, 0x09, 0x39, + 0x09, 0x32, 0x09, 0x47, 0x09, 0x0c, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x65, 0x17, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x2e, 0x09, 0x3f, + 0x09, 0x70, 0x09, 0x20, 0x00, 0x2e, 0x09, 0x47, + 0x09, 0x02, 0x09, 0x19, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x2e, 0x09, 0x3f, 0x09, + 0x70, 0x09, 0x20, 0x00, 0x2a, 0x09, 0x39, 0x09, + 0x32, 0x09, 0x47, 0x09, 0x18, 0x6d, 0x69, 0x6e, + 0x75, 0x74, 0x65, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x1a, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x05, + 0x05, 0x09, 0x2c, 0x09, 0x1b, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x38, 0x09, 0x47, + 0x09, 0x15, 0x09, 0x02, 0x09, 0x21, 0x09, 0x20, + 0x00, 0x2e, 0x09, 0x47, 0x09, 0x02, 0x09, 0x1d, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x38, 0x09, 0x47, 0x09, 0x15, 0x09, 0x02, 0x09, + 0x21, 0x09, 0x20, 0x00, 0x2a, 0x09, 0x39, 0x09, + 0x32, 0x09, 0x47, 0x09, 0x0c, 0x73, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x17, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x38, 0x09, 0x47, 0x09, + 0x70, 0x09, 0x20, 0x00, 0x2e, 0x09, 0x47, 0x09, + 0x02, 0x09, 0x19, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x38, 0x09, 0x47, 0x09, 0x70, + 0x09, 0x20, 0x00, 0x2a, 0x09, 0x39, 0x09, 0x32, + 0x09, 0x47, 0x09, 0x18, 0x73, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x1a, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x08, 0x6c, + 0x61, 0x74, 0x6e, 0x04, 0x6e, 0x75, 0x08, 0x64, + 0x61, 0x74, 0x61, 0x70, 0x6e, 0x6f, 0x64, 0x65, + 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, + 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2d, 0x72, 0x65, + 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x2d, 0x74, + 0x69, 0x6d, 0x65, 0x2d, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x68, + 0x69, 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, + 0x9e, 0x01, 0x00, 0x01, 0x00, 0x07, 0x00, 0x00, + 0x98, 0x0e, 0x01, 0xa0, 0x01, 0x00, 0x00, 0x00, + 0x06, 0xc8, 0x04, 0xd0, 0x00, 0x00, 0x00, 0x39, + 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, 0x00, 0x00, + 0x00, 0xaa, 0x6a, 0x03, 0x07, 0x00, 0x00, 0x39, + 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, 0x00, 0x00, + 0x00, 0x43, 0xd0, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd3, 0x00, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0xd5, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xd9, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe1, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xe2, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xe3, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xe4, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe5, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe8, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe9, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xea, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe5, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe8, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe9, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xed, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe5, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xee, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xee, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xef, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xf0, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf1, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xf2, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf4, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf4, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf5, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xf6, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xf4, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xf7, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xf5, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0xf8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xfa, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xfb, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xfd, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0xfe, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xfc, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfd, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xfd, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xff, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xfc, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xfc, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfd, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x01, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0x02, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0x02, + 0x00, 0x00, 0x80, 0x04, 0x03, 0x01, 0x00, 0x00, + 0x4d, 0x04, 0x01, 0x00, 0x00, 0x04, 0x02, 0x01, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0x07, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0x08, 0x01, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x09, 0x01, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0x0a, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0x08, 0x01, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x09, 0x01, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0x0b, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x0d, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0d, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0e, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0x0f, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x10, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x12, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x11, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0x13, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x16, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0x17, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x18, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x18, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x1a, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x18, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x18, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x19, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0x1b, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x1c, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x1d, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x1d, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x1e, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0x1f, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x20, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x20, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x22, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x20, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x20, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x21, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0x23, 0x01, 0x00, 0x00, + 0x04, 0x24, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x25, 0x01, 0x00, 0x00, 0x4d, 0x26, 0x01, + 0x00, 0x00, 0x24, 0x01, 0x00, 0xc8, 0xc4, 0x28, + 0xce, 0x04, 0x01, 0x9c, 0x02, 0x76, 0x53, 0x35, + 0x08, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x1c, 0x12, 0x1c, 0x1c, + 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_hr_size = 4758; + +const uint8_t intl_relative_hr[4758] = { + 0x01, 0x87, 0x01, 0x1e, 0x5f, 0x5f, 0x61, 0x64, + 0x64, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, + 0x61, 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, + 0x24, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x04, 0x68, 0x72, 0x0c, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x14, 0x6f, 0x76, + 0x65, 0x20, 0x67, 0x6f, 0x64, 0x69, 0x6e, 0x65, + 0x1f, 0x73, 0x00, 0x6c, 0x00, 0x6a, 0x00, 0x65, + 0x00, 0x64, 0x00, 0x65, 0x00, 0x07, 0x01, 0x65, + 0x00, 0x20, 0x00, 0x67, 0x00, 0x6f, 0x00, 0x64, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x65, 0x00, 0x1b, + 0x70, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x61, 0x01, + 0x6c, 0x00, 0x65, 0x00, 0x20, 0x00, 0x67, 0x00, + 0x6f, 0x00, 0x64, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x65, 0x00, 0x04, 0x2d, 0x31, 0x1a, 0x7a, 0x61, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x67, 0x6f, 0x64, + 0x69, 0x6e, 0x75, 0x06, 0x6f, 0x6e, 0x65, 0x1a, + 0x7a, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x67, + 0x6f, 0x64, 0x69, 0x6e, 0x65, 0x06, 0x66, 0x65, + 0x77, 0x1a, 0x7a, 0x61, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x67, 0x6f, 0x64, 0x69, 0x6e, 0x61, 0x0a, + 0x6f, 0x74, 0x68, 0x65, 0x72, 0x0c, 0x66, 0x75, + 0x74, 0x75, 0x72, 0x65, 0x20, 0x70, 0x72, 0x69, + 0x6a, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x67, + 0x6f, 0x64, 0x69, 0x6e, 0x75, 0x20, 0x70, 0x72, + 0x69, 0x6a, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x67, 0x6f, 0x64, 0x69, 0x6e, 0x65, 0x20, 0x70, + 0x72, 0x69, 0x6a, 0x65, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x67, 0x6f, 0x64, 0x69, 0x6e, 0x61, 0x08, + 0x70, 0x61, 0x73, 0x74, 0x08, 0x79, 0x65, 0x61, + 0x72, 0x10, 0x6f, 0x76, 0x65, 0x20, 0x67, 0x6f, + 0x64, 0x2e, 0x1b, 0x73, 0x00, 0x6c, 0x00, 0x6a, + 0x00, 0x65, 0x00, 0x64, 0x00, 0x65, 0x00, 0x07, + 0x01, 0x65, 0x00, 0x20, 0x00, 0x67, 0x00, 0x6f, + 0x00, 0x64, 0x00, 0x2e, 0x00, 0x17, 0x70, 0x00, + 0x72, 0x00, 0x6f, 0x00, 0x61, 0x01, 0x6c, 0x00, + 0x65, 0x00, 0x20, 0x00, 0x67, 0x00, 0x6f, 0x00, + 0x64, 0x00, 0x2e, 0x00, 0x12, 0x7a, 0x61, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x67, 0x2e, 0x18, 0x70, + 0x72, 0x69, 0x6a, 0x65, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x67, 0x2e, 0x14, 0x79, 0x65, 0x61, 0x72, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x6f, + 0x76, 0x65, 0x20, 0x67, 0x2e, 0x17, 0x73, 0x00, + 0x6c, 0x00, 0x6a, 0x00, 0x65, 0x00, 0x64, 0x00, + 0x65, 0x00, 0x07, 0x01, 0x65, 0x00, 0x20, 0x00, + 0x67, 0x00, 0x2e, 0x00, 0x13, 0x70, 0x00, 0x72, + 0x00, 0x6f, 0x00, 0x61, 0x01, 0x6c, 0x00, 0x65, + 0x00, 0x20, 0x00, 0x67, 0x00, 0x2e, 0x00, 0x16, + 0x79, 0x65, 0x61, 0x72, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x18, 0x6f, 0x76, 0x61, 0x6a, + 0x20, 0x6b, 0x76, 0x61, 0x72, 0x74, 0x61, 0x6c, + 0x21, 0x73, 0x00, 0x6c, 0x00, 0x6a, 0x00, 0x65, + 0x00, 0x64, 0x00, 0x65, 0x00, 0x07, 0x01, 0x69, + 0x00, 0x20, 0x00, 0x6b, 0x00, 0x76, 0x00, 0x61, + 0x00, 0x72, 0x00, 0x74, 0x00, 0x61, 0x00, 0x6c, + 0x00, 0x1d, 0x70, 0x00, 0x72, 0x00, 0x6f, 0x00, + 0x61, 0x01, 0x6c, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x6b, 0x00, 0x76, 0x00, 0x61, 0x00, 0x72, 0x00, + 0x74, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x1c, 0x7a, + 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6b, 0x76, + 0x61, 0x72, 0x74, 0x61, 0x6c, 0x1e, 0x7a, 0x61, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6b, 0x76, 0x61, + 0x72, 0x74, 0x61, 0x6c, 0x61, 0x22, 0x70, 0x72, + 0x69, 0x6a, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x6b, 0x76, 0x61, 0x72, 0x74, 0x61, 0x6c, 0x24, + 0x70, 0x72, 0x69, 0x6a, 0x65, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x6b, 0x76, 0x61, 0x72, 0x74, 0x61, + 0x6c, 0x61, 0x0e, 0x71, 0x75, 0x61, 0x72, 0x74, + 0x65, 0x72, 0x10, 0x6f, 0x76, 0x61, 0x6a, 0x20, + 0x6b, 0x76, 0x2e, 0x19, 0x73, 0x00, 0x6c, 0x00, + 0x6a, 0x00, 0x65, 0x00, 0x64, 0x00, 0x65, 0x00, + 0x07, 0x01, 0x69, 0x00, 0x20, 0x00, 0x6b, 0x00, + 0x76, 0x00, 0x2e, 0x00, 0x15, 0x70, 0x00, 0x72, + 0x00, 0x6f, 0x00, 0x61, 0x01, 0x6c, 0x00, 0x69, + 0x00, 0x20, 0x00, 0x6b, 0x00, 0x76, 0x00, 0x2e, + 0x00, 0x14, 0x7a, 0x61, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x6b, 0x76, 0x2e, 0x1a, 0x70, 0x72, 0x69, + 0x6a, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6b, + 0x76, 0x2e, 0x1a, 0x71, 0x75, 0x61, 0x72, 0x74, + 0x65, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x1c, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x16, + 0x6f, 0x76, 0x61, 0x6a, 0x20, 0x6d, 0x6a, 0x65, + 0x73, 0x65, 0x63, 0x1f, 0x73, 0x00, 0x6c, 0x00, + 0x6a, 0x00, 0x65, 0x00, 0x64, 0x00, 0x65, 0x00, + 0x07, 0x01, 0x69, 0x00, 0x20, 0x00, 0x6d, 0x00, + 0x6a, 0x00, 0x65, 0x00, 0x73, 0x00, 0x65, 0x00, + 0x63, 0x00, 0x1b, 0x70, 0x00, 0x72, 0x00, 0x6f, + 0x00, 0x61, 0x01, 0x6c, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x6d, 0x00, 0x6a, 0x00, 0x65, 0x00, 0x73, + 0x00, 0x65, 0x00, 0x63, 0x00, 0x1a, 0x7a, 0x61, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x6a, 0x65, + 0x73, 0x65, 0x63, 0x1c, 0x7a, 0x61, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x6d, 0x6a, 0x65, 0x73, 0x65, + 0x63, 0x61, 0x1c, 0x7a, 0x61, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x6d, 0x6a, 0x65, 0x73, 0x65, 0x63, + 0x69, 0x20, 0x70, 0x72, 0x69, 0x6a, 0x65, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x6a, 0x65, 0x73, + 0x65, 0x63, 0x22, 0x70, 0x72, 0x69, 0x6a, 0x65, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x6a, 0x65, + 0x73, 0x65, 0x63, 0x61, 0x22, 0x70, 0x72, 0x69, + 0x6a, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, + 0x6a, 0x65, 0x73, 0x65, 0x63, 0x69, 0x0a, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x10, 0x6f, 0x76, 0x61, + 0x6a, 0x20, 0x6d, 0x6a, 0x2e, 0x19, 0x73, 0x00, + 0x6c, 0x00, 0x6a, 0x00, 0x65, 0x00, 0x64, 0x00, + 0x65, 0x00, 0x07, 0x01, 0x69, 0x00, 0x20, 0x00, + 0x6d, 0x00, 0x6a, 0x00, 0x2e, 0x00, 0x15, 0x70, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x61, 0x01, 0x6c, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x6d, 0x00, 0x6a, + 0x00, 0x2e, 0x00, 0x14, 0x7a, 0x61, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x6d, 0x6a, 0x2e, 0x1a, 0x70, + 0x72, 0x69, 0x6a, 0x65, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x6d, 0x6a, 0x2e, 0x16, 0x6d, 0x6f, 0x6e, + 0x74, 0x68, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x18, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x16, 0x6f, 0x76, + 0x61, 0x6a, 0x20, 0x74, 0x6a, 0x65, 0x64, 0x61, + 0x6e, 0x1f, 0x73, 0x00, 0x6c, 0x00, 0x6a, 0x00, + 0x65, 0x00, 0x64, 0x00, 0x65, 0x00, 0x07, 0x01, + 0x69, 0x00, 0x20, 0x00, 0x74, 0x00, 0x6a, 0x00, + 0x65, 0x00, 0x64, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x1b, 0x70, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x61, + 0x01, 0x6c, 0x00, 0x69, 0x00, 0x20, 0x00, 0x74, + 0x00, 0x6a, 0x00, 0x65, 0x00, 0x64, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x1a, 0x7a, 0x61, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x74, 0x6a, 0x65, 0x64, 0x61, + 0x6e, 0x1a, 0x7a, 0x61, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x74, 0x6a, 0x65, 0x64, 0x6e, 0x61, 0x1c, + 0x7a, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x74, + 0x6a, 0x65, 0x64, 0x61, 0x6e, 0x61, 0x20, 0x70, + 0x72, 0x69, 0x6a, 0x65, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x74, 0x6a, 0x65, 0x64, 0x61, 0x6e, 0x20, + 0x70, 0x72, 0x69, 0x6a, 0x65, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x74, 0x6a, 0x65, 0x64, 0x6e, 0x61, + 0x22, 0x70, 0x72, 0x69, 0x6a, 0x65, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x74, 0x6a, 0x65, 0x64, 0x61, + 0x6e, 0x61, 0x08, 0x77, 0x65, 0x65, 0x6b, 0x10, + 0x6f, 0x76, 0x61, 0x6a, 0x20, 0x74, 0x6a, 0x2e, + 0x19, 0x73, 0x00, 0x6c, 0x00, 0x6a, 0x00, 0x65, + 0x00, 0x64, 0x00, 0x65, 0x00, 0x07, 0x01, 0x69, + 0x00, 0x20, 0x00, 0x74, 0x00, 0x6a, 0x00, 0x2e, + 0x00, 0x15, 0x70, 0x00, 0x72, 0x00, 0x6f, 0x00, + 0x61, 0x01, 0x6c, 0x00, 0x69, 0x00, 0x20, 0x00, + 0x74, 0x00, 0x6a, 0x00, 0x2e, 0x00, 0x14, 0x7a, + 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x74, 0x6a, + 0x2e, 0x1a, 0x70, 0x72, 0x69, 0x6a, 0x65, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x74, 0x6a, 0x2e, 0x14, + 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x16, 0x77, 0x65, 0x65, 0x6b, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0a, 0x64, + 0x61, 0x6e, 0x61, 0x73, 0x0a, 0x73, 0x75, 0x74, + 0x72, 0x61, 0x14, 0x70, 0x72, 0x65, 0x6b, 0x6f, + 0x73, 0x75, 0x74, 0x72, 0x61, 0x13, 0x70, 0x00, + 0x72, 0x00, 0x65, 0x00, 0x6b, 0x00, 0x6a, 0x00, + 0x75, 0x00, 0x0d, 0x01, 0x65, 0x00, 0x72, 0x00, + 0x04, 0x2d, 0x32, 0x0b, 0x6a, 0x00, 0x75, 0x00, + 0x0d, 0x01, 0x65, 0x00, 0x72, 0x00, 0x14, 0x7a, + 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x64, 0x61, + 0x6e, 0x16, 0x7a, 0x61, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x64, 0x61, 0x6e, 0x61, 0x1a, 0x70, 0x72, + 0x69, 0x6a, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x64, 0x61, 0x6e, 0x1c, 0x70, 0x72, 0x69, 0x6a, + 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x64, 0x61, + 0x6e, 0x61, 0x06, 0x64, 0x61, 0x79, 0x12, 0x64, + 0x61, 0x79, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x10, 0x7a, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x64, 0x16, 0x70, 0x72, 0x69, 0x6a, 0x65, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x64, 0x14, 0x64, 0x61, + 0x79, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x10, 0x6f, 0x76, 0x61, 0x6a, 0x20, 0x73, 0x61, + 0x74, 0x14, 0x7a, 0x61, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x73, 0x61, 0x74, 0x16, 0x7a, 0x61, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x61, 0x74, 0x61, + 0x16, 0x7a, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x73, 0x61, 0x74, 0x69, 0x1a, 0x70, 0x72, 0x69, + 0x6a, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, + 0x61, 0x74, 0x1c, 0x70, 0x72, 0x69, 0x6a, 0x65, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x61, 0x74, + 0x61, 0x1c, 0x70, 0x72, 0x69, 0x6a, 0x65, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x61, 0x74, 0x69, + 0x08, 0x68, 0x6f, 0x75, 0x72, 0x10, 0x7a, 0x61, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x68, 0x16, 0x70, + 0x72, 0x69, 0x6a, 0x65, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x68, 0x14, 0x68, 0x6f, 0x75, 0x72, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, 0x68, 0x6f, + 0x75, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x14, 0x6f, 0x76, 0x61, 0x20, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x61, 0x1a, 0x7a, 0x61, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x75, + 0x74, 0x75, 0x1a, 0x7a, 0x61, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, + 0x1a, 0x7a, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x61, 0x20, 0x70, + 0x72, 0x69, 0x6a, 0x65, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x75, 0x20, + 0x70, 0x72, 0x69, 0x6a, 0x65, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, + 0x20, 0x70, 0x72, 0x69, 0x6a, 0x65, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x74, + 0x61, 0x0c, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, + 0x14, 0x7a, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x6d, 0x69, 0x6e, 0x1a, 0x70, 0x72, 0x69, 0x6a, + 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, + 0x6e, 0x18, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x6d, + 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x06, 0x73, 0x61, 0x64, + 0x1c, 0x7a, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x73, 0x65, 0x6b, 0x75, 0x6e, 0x64, 0x75, 0x1c, + 0x7a, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, + 0x65, 0x6b, 0x75, 0x6e, 0x64, 0x65, 0x1c, 0x7a, + 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, + 0x6b, 0x75, 0x6e, 0x64, 0x69, 0x22, 0x70, 0x72, + 0x69, 0x6a, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x73, 0x65, 0x6b, 0x75, 0x6e, 0x64, 0x75, 0x22, + 0x70, 0x72, 0x69, 0x6a, 0x65, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x73, 0x65, 0x6b, 0x75, 0x6e, 0x64, + 0x65, 0x22, 0x70, 0x72, 0x69, 0x6a, 0x65, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, 0x6b, 0x75, + 0x6e, 0x64, 0x69, 0x0c, 0x73, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x10, 0x7a, 0x61, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x73, 0x16, 0x70, 0x72, 0x69, 0x6a, + 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x18, + 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x73, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, + 0x6e, 0x75, 0x08, 0x64, 0x61, 0x74, 0x61, 0x70, + 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, + 0x6c, 0x2d, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, + 0x76, 0x65, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2d, + 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2f, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, + 0x74, 0x61, 0x2f, 0x68, 0x72, 0x2e, 0x6a, 0x73, + 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, + 0x00, 0x07, 0x00, 0x00, 0xb6, 0x13, 0x01, 0xa0, + 0x01, 0x00, 0x00, 0x00, 0x06, 0xc8, 0x04, 0xd0, + 0x00, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, + 0x42, 0xd2, 0x00, 0x00, 0x00, 0xaa, 0x6a, 0xa1, + 0x09, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, + 0x42, 0xd2, 0x00, 0x00, 0x00, 0x43, 0xd0, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd3, 0x00, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xe1, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xe2, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x4d, 0xe4, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe5, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xe7, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xe8, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xe8, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe9, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xed, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe8, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xe9, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xe9, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x4d, 0xee, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xef, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xf0, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xf1, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xf3, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xf3, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf4, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x00, 0x4d, 0xf6, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf7, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xf9, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfa, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xfb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xfb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x4d, 0xfc, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xf7, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xf8, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xf9, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xfa, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xfa, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfb, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x00, 0x4d, 0xfd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xfe, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x00, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x01, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x05, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x06, + 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x4d, 0x07, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x08, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x09, 0x01, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0x0a, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x0b, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x0b, + 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0c, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x00, 0x4d, 0x0d, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x08, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x0a, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0b, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x0c, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x0c, + 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x4d, 0x0e, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x0f, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x10, 0x01, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0x11, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x13, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x14, + 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x00, 0x4d, 0x18, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x19, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x1a, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x1b, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x1c, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x1c, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x1c, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x1d, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x1d, + 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x4d, 0x1e, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x19, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x01, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0x1b, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x1c, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x1c, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x1c, + 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x1d, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x00, 0x4d, 0x1f, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x20, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x22, 0x01, 0x00, 0x00, + 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, 0x23, 0x01, + 0x00, 0x00, 0x4d, 0x24, 0x01, 0x00, 0x00, 0x04, + 0x25, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x27, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x27, + 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x28, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x29, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x29, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x00, 0x4d, 0x2a, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x20, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x22, 0x01, 0x00, 0x00, + 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, 0x23, 0x01, + 0x00, 0x00, 0x4d, 0x24, 0x01, 0x00, 0x00, 0x04, + 0x25, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x27, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x27, + 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x28, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x29, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x29, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x00, 0x4d, 0x2b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x20, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x22, 0x01, 0x00, 0x00, + 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, 0x23, 0x01, + 0x00, 0x00, 0x4d, 0x24, 0x01, 0x00, 0x00, 0x04, + 0x25, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x2c, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x2c, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x2c, + 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x2d, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x2d, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x2d, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x00, 0x4d, 0x2e, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x2f, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x30, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x31, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x32, + 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x33, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x34, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x35, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x00, 0x4d, 0x36, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x37, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x37, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x37, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x38, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x38, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x38, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x4d, + 0x39, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x37, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x37, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x37, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x38, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x38, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x38, + 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x4d, 0x3a, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x3b, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x3c, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x3d, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x3e, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x3f, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x40, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x41, + 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x4d, 0x42, 0x01, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x43, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x43, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x43, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x44, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x44, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x44, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x00, 0x4d, 0x45, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x43, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x43, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x43, + 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x44, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x44, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x44, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x00, 0x4d, 0x46, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x48, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x4a, + 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, + 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x4f, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x50, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x4d, + 0x51, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x4f, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x50, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x4d, 0x52, 0x01, + 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x54, 0x01, 0x00, 0x00, 0x4d, + 0x55, 0x01, 0x00, 0x00, 0x24, 0x01, 0x00, 0xc8, + 0xc4, 0x28, 0xac, 0x05, 0x01, 0xdf, 0x02, 0x76, + 0x53, 0x35, 0x08, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x08, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x1c, + 0x1c, 0x1c, 0x12, 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_hu_size = 3540; + +const uint8_t intl_relative_hu[3540] = { + 0x01, 0x4d, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x04, 0x68, 0x75, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x10, 0x65, 0x7a, 0x20, + 0x61, 0x7a, 0x20, 0xe9, 0x76, 0x19, 0x6b, 0x00, + 0xf6, 0x00, 0x76, 0x00, 0x65, 0x00, 0x74, 0x00, + 0x6b, 0x00, 0x65, 0x00, 0x7a, 0x00, 0x51, 0x01, + 0x20, 0x00, 0xe9, 0x00, 0x76, 0x00, 0x11, 0x65, + 0x00, 0x6c, 0x00, 0x51, 0x01, 0x7a, 0x00, 0x51, + 0x01, 0x20, 0x00, 0xe9, 0x00, 0x76, 0x00, 0x04, + 0x2d, 0x31, 0x18, 0x7b, 0x30, 0x7d, 0x20, 0xe9, + 0x76, 0x20, 0x6d, 0xfa, 0x6c, 0x76, 0x61, 0x06, + 0x6f, 0x6e, 0x65, 0x0a, 0x6f, 0x74, 0x68, 0x65, + 0x72, 0x0c, 0x66, 0x75, 0x74, 0x75, 0x72, 0x65, + 0x23, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0xe9, 0x00, 0x76, 0x00, 0x76, 0x00, 0x65, + 0x00, 0x6c, 0x00, 0x20, 0x00, 0x65, 0x00, 0x7a, + 0x00, 0x65, 0x00, 0x6c, 0x00, 0x51, 0x01, 0x74, + 0x00, 0x74, 0x00, 0x08, 0x70, 0x61, 0x73, 0x74, + 0x08, 0x79, 0x65, 0x61, 0x72, 0x14, 0x79, 0x65, + 0x61, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x16, 0x79, 0x65, 0x61, 0x72, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x1a, 0x65, 0x7a, 0x20, + 0x61, 0x20, 0x6e, 0x65, 0x67, 0x79, 0x65, 0x64, + 0xe9, 0x76, 0x25, 0x6b, 0x00, 0xf6, 0x00, 0x76, + 0x00, 0x65, 0x00, 0x74, 0x00, 0x6b, 0x00, 0x65, + 0x00, 0x7a, 0x00, 0x51, 0x01, 0x20, 0x00, 0x6e, + 0x00, 0x65, 0x00, 0x67, 0x00, 0x79, 0x00, 0x65, + 0x00, 0x64, 0x00, 0xe9, 0x00, 0x76, 0x00, 0x1d, + 0x65, 0x00, 0x6c, 0x00, 0x51, 0x01, 0x7a, 0x00, + 0x51, 0x01, 0x20, 0x00, 0x6e, 0x00, 0x65, 0x00, + 0x67, 0x00, 0x79, 0x00, 0x65, 0x00, 0x64, 0x00, + 0xe9, 0x00, 0x76, 0x00, 0x24, 0x7b, 0x30, 0x7d, + 0x20, 0x6e, 0x65, 0x67, 0x79, 0x65, 0x64, 0xe9, + 0x76, 0x20, 0x6d, 0xfa, 0x6c, 0x76, 0x61, 0x2f, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x6e, 0x00, 0x65, 0x00, 0x67, 0x00, 0x79, 0x00, + 0x65, 0x00, 0x64, 0x00, 0xe9, 0x00, 0x76, 0x00, + 0x76, 0x00, 0x65, 0x00, 0x6c, 0x00, 0x20, 0x00, + 0x65, 0x00, 0x7a, 0x00, 0x65, 0x00, 0x6c, 0x00, + 0x51, 0x01, 0x74, 0x00, 0x74, 0x00, 0x0e, 0x71, + 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x1a, 0x71, + 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x1c, 0x7b, 0x30, 0x7d, + 0x20, 0x6e, 0x2e, 0xe9, 0x76, 0x20, 0x6d, 0xfa, + 0x6c, 0x76, 0x61, 0x1c, 0x71, 0x75, 0x61, 0x72, + 0x74, 0x65, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x14, 0x65, 0x7a, 0x20, 0x61, 0x20, + 0x68, 0xf3, 0x6e, 0x61, 0x70, 0x1f, 0x6b, 0x00, + 0xf6, 0x00, 0x76, 0x00, 0x65, 0x00, 0x74, 0x00, + 0x6b, 0x00, 0x65, 0x00, 0x7a, 0x00, 0x51, 0x01, + 0x20, 0x00, 0x68, 0x00, 0xf3, 0x00, 0x6e, 0x00, + 0x61, 0x00, 0x70, 0x00, 0x17, 0x65, 0x00, 0x6c, + 0x00, 0x51, 0x01, 0x7a, 0x00, 0x51, 0x01, 0x20, + 0x00, 0x68, 0x00, 0xf3, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x70, 0x00, 0x1e, 0x7b, 0x30, 0x7d, 0x20, + 0x68, 0xf3, 0x6e, 0x61, 0x70, 0x20, 0x6d, 0xfa, + 0x6c, 0x76, 0x61, 0x29, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x68, 0x00, 0xf3, 0x00, + 0x6e, 0x00, 0x61, 0x00, 0x70, 0x00, 0x70, 0x00, + 0x61, 0x00, 0x6c, 0x00, 0x20, 0x00, 0x65, 0x00, + 0x7a, 0x00, 0x65, 0x00, 0x6c, 0x00, 0x51, 0x01, + 0x74, 0x00, 0x74, 0x00, 0x0a, 0x6d, 0x6f, 0x6e, + 0x74, 0x68, 0x16, 0x6d, 0x6f, 0x6e, 0x74, 0x68, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x18, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x10, 0x65, 0x7a, 0x20, 0x61, + 0x20, 0x68, 0xe9, 0x74, 0x1b, 0x6b, 0x00, 0xf6, + 0x00, 0x76, 0x00, 0x65, 0x00, 0x74, 0x00, 0x6b, + 0x00, 0x65, 0x00, 0x7a, 0x00, 0x51, 0x01, 0x20, + 0x00, 0x68, 0x00, 0xe9, 0x00, 0x74, 0x00, 0x13, + 0x65, 0x00, 0x6c, 0x00, 0x51, 0x01, 0x7a, 0x00, + 0x51, 0x01, 0x20, 0x00, 0x68, 0x00, 0xe9, 0x00, + 0x74, 0x00, 0x1a, 0x7b, 0x30, 0x7d, 0x20, 0x68, + 0xe9, 0x74, 0x20, 0x6d, 0xfa, 0x6c, 0x76, 0x61, + 0x25, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x68, 0x00, 0xe9, 0x00, 0x74, 0x00, 0x74, + 0x00, 0x65, 0x00, 0x6c, 0x00, 0x20, 0x00, 0x65, + 0x00, 0x7a, 0x00, 0x65, 0x00, 0x6c, 0x00, 0x51, + 0x01, 0x74, 0x00, 0x74, 0x00, 0x08, 0x77, 0x65, + 0x65, 0x6b, 0x14, 0x77, 0x65, 0x65, 0x6b, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, 0x77, 0x65, + 0x65, 0x6b, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x04, 0x6d, 0x61, 0x0c, 0x68, 0x6f, 0x6c, + 0x6e, 0x61, 0x70, 0x14, 0x68, 0x6f, 0x6c, 0x6e, + 0x61, 0x70, 0x75, 0x74, 0xe1, 0x6e, 0x17, 0x74, + 0x00, 0x65, 0x00, 0x67, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x70, 0x00, 0x65, 0x00, 0x6c, 0x00, 0x51, + 0x01, 0x74, 0x00, 0x74, 0x00, 0x04, 0x2d, 0x32, + 0x0c, 0x74, 0x65, 0x67, 0x6e, 0x61, 0x70, 0x1a, + 0x7b, 0x30, 0x7d, 0x20, 0x6e, 0x61, 0x70, 0x20, + 0x6d, 0xfa, 0x6c, 0x76, 0x61, 0x25, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x6e, 0x00, + 0x61, 0x00, 0x70, 0x00, 0x70, 0x00, 0x61, 0x00, + 0x6c, 0x00, 0x20, 0x00, 0x65, 0x00, 0x7a, 0x00, + 0x65, 0x00, 0x6c, 0x00, 0x51, 0x01, 0x74, 0x00, + 0x74, 0x00, 0x06, 0x64, 0x61, 0x79, 0x12, 0x7b, + 0x30, 0x7d, 0x20, 0x6e, 0x61, 0x70, 0x6a, 0x61, + 0x12, 0x64, 0x61, 0x79, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x14, 0x64, 0x61, 0x79, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x1e, 0x65, 0x62, + 0x62, 0x65, 0x6e, 0x20, 0x61, 0x7a, 0x20, 0xf3, + 0x72, 0xe1, 0x62, 0x61, 0x6e, 0x1a, 0x7b, 0x30, + 0x7d, 0x20, 0xf3, 0x72, 0x61, 0x20, 0x6d, 0xfa, + 0x6c, 0x76, 0x61, 0x25, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0xf3, 0x00, 0x72, 0x00, + 0xe1, 0x00, 0x76, 0x00, 0x61, 0x00, 0x6c, 0x00, + 0x20, 0x00, 0x65, 0x00, 0x7a, 0x00, 0x65, 0x00, + 0x6c, 0x00, 0x51, 0x01, 0x74, 0x00, 0x74, 0x00, + 0x08, 0x68, 0x6f, 0x75, 0x72, 0x14, 0x68, 0x6f, + 0x75, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x16, 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x1e, 0x65, 0x62, 0x62, + 0x65, 0x6e, 0x20, 0x61, 0x20, 0x70, 0x65, 0x72, + 0x63, 0x62, 0x65, 0x6e, 0x1c, 0x7b, 0x30, 0x7d, + 0x20, 0x70, 0x65, 0x72, 0x63, 0x20, 0x6d, 0xfa, + 0x6c, 0x76, 0x61, 0x27, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x70, 0x00, 0x65, 0x00, + 0x72, 0x00, 0x63, 0x00, 0x63, 0x00, 0x65, 0x00, + 0x6c, 0x00, 0x20, 0x00, 0x65, 0x00, 0x7a, 0x00, + 0x65, 0x00, 0x6c, 0x00, 0x51, 0x01, 0x74, 0x00, + 0x74, 0x00, 0x0c, 0x6d, 0x69, 0x6e, 0x75, 0x74, + 0x65, 0x18, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x6d, + 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x08, 0x6d, 0x6f, 0x73, + 0x74, 0x26, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0xe1, + 0x73, 0x6f, 0x64, 0x70, 0x65, 0x72, 0x63, 0x20, + 0x6d, 0xfa, 0x6c, 0x76, 0x61, 0x31, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x6d, 0x00, + 0xe1, 0x00, 0x73, 0x00, 0x6f, 0x00, 0x64, 0x00, + 0x70, 0x00, 0x65, 0x00, 0x72, 0x00, 0x63, 0x00, + 0x63, 0x00, 0x65, 0x00, 0x6c, 0x00, 0x20, 0x00, + 0x65, 0x00, 0x7a, 0x00, 0x65, 0x00, 0x6c, 0x00, + 0x51, 0x01, 0x74, 0x00, 0x74, 0x00, 0x0c, 0x73, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x18, 0x73, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x1a, 0x73, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, 0x75, + 0x08, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6e, 0x6f, + 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2d, + 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2d, 0x66, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x2f, 0x6c, 0x6f, 0x63, + 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, + 0x2f, 0x68, 0x75, 0x2e, 0x6a, 0x73, 0x0d, 0x00, + 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, 0x07, + 0x00, 0x00, 0xd6, 0x0f, 0x01, 0xa0, 0x01, 0x00, + 0x00, 0x00, 0x06, 0xc8, 0x04, 0xd0, 0x00, 0x00, + 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, + 0x00, 0x00, 0x00, 0xaa, 0x6a, 0xc1, 0x07, 0x00, + 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, + 0x00, 0x00, 0x00, 0x43, 0xd0, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xd3, 0x00, 0x00, 0x00, 0x4d, 0xd4, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xd5, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd5, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd5, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe2, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xe3, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe5, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe2, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xe3, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe5, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xe8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe2, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xe3, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe9, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe9, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xea, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xec, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xee, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xee, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xef, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xf0, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xec, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xee, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xee, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xef, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xf1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xec, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xee, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xee, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xef, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xf2, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf3, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xf4, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf6, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf6, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf7, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xf8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf3, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xf4, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf6, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf6, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf7, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xf9, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf3, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xf4, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf6, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf6, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf7, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xfa, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfb, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xfc, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, 0x02, + 0x00, 0x00, 0x80, 0x04, 0xfe, 0x00, 0x00, 0x00, + 0x4d, 0xff, 0x00, 0x00, 0x00, 0x04, 0x00, 0x01, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x02, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0x03, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xfc, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xfd, 0x00, + 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, + 0xfe, 0x00, 0x00, 0x00, 0x4d, 0xff, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x01, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x01, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x04, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0x05, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xfb, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xfc, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, 0x02, + 0x00, 0x00, 0x80, 0x04, 0xfe, 0x00, 0x00, 0x00, + 0x4d, 0xff, 0x00, 0x00, 0x00, 0x04, 0x00, 0x01, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x04, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0x06, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x08, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x08, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x09, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0x0a, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x08, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x0b, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x09, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0x0c, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x0e, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0e, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0f, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0x10, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x0e, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x11, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x0f, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0x12, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x14, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x14, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0x16, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x14, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x17, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0x18, 0x01, 0x00, 0x00, + 0x04, 0x19, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x1a, 0x01, 0x00, 0x00, 0x4d, 0x1b, 0x01, + 0x00, 0x00, 0x24, 0x01, 0x00, 0xc8, 0xc4, 0x28, + 0xb8, 0x04, 0x01, 0xaf, 0x02, 0x76, 0x53, 0x35, + 0x08, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x1c, + 0x12, 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_it_size = 3695; + +const uint8_t intl_relative_it[3695] = { + 0x01, 0x6e, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x04, 0x69, 0x74, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x15, 0x71, 0x00, 0x75, + 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, 0x19, + 0x20, 0x61, 0x00, 0x6e, 0x00, 0x6e, 0x00, 0x6f, + 0x00, 0x1a, 0x61, 0x6e, 0x6e, 0x6f, 0x20, 0x70, + 0x72, 0x6f, 0x73, 0x73, 0x69, 0x6d, 0x6f, 0x16, + 0x61, 0x6e, 0x6e, 0x6f, 0x20, 0x73, 0x63, 0x6f, + 0x72, 0x73, 0x6f, 0x04, 0x2d, 0x31, 0x18, 0x74, + 0x72, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x61, + 0x6e, 0x6e, 0x6f, 0x06, 0x6f, 0x6e, 0x65, 0x18, + 0x74, 0x72, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x61, 0x6e, 0x6e, 0x69, 0x0a, 0x6f, 0x74, 0x68, + 0x65, 0x72, 0x0c, 0x66, 0x75, 0x74, 0x75, 0x72, + 0x65, 0x16, 0x7b, 0x30, 0x7d, 0x20, 0x61, 0x6e, + 0x6e, 0x6f, 0x20, 0x66, 0x61, 0x16, 0x7b, 0x30, + 0x7d, 0x20, 0x61, 0x6e, 0x6e, 0x69, 0x20, 0x66, + 0x61, 0x08, 0x70, 0x61, 0x73, 0x74, 0x08, 0x79, + 0x65, 0x61, 0x72, 0x14, 0x79, 0x65, 0x61, 0x72, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, 0x79, + 0x65, 0x61, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x20, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x6f, 0x20, 0x74, 0x72, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x72, 0x65, 0x24, 0x74, 0x72, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x72, 0x65, 0x20, 0x70, 0x72, + 0x6f, 0x73, 0x73, 0x69, 0x6d, 0x6f, 0x20, 0x74, + 0x72, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x72, 0x65, + 0x20, 0x73, 0x63, 0x6f, 0x72, 0x73, 0x6f, 0x22, + 0x74, 0x72, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x74, 0x72, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x72, + 0x65, 0x22, 0x74, 0x72, 0x61, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x74, 0x72, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x72, 0x69, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x74, 0x72, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x72, + 0x65, 0x20, 0x66, 0x61, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x74, 0x72, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x72, 0x69, 0x20, 0x66, 0x61, 0x0e, 0x71, 0x75, + 0x61, 0x72, 0x74, 0x65, 0x72, 0x18, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x6f, 0x20, 0x74, 0x72, 0x69, + 0x6d, 0x2e, 0x1c, 0x74, 0x72, 0x69, 0x6d, 0x2e, + 0x20, 0x70, 0x72, 0x6f, 0x73, 0x73, 0x69, 0x6d, + 0x6f, 0x18, 0x74, 0x72, 0x69, 0x6d, 0x2e, 0x20, + 0x73, 0x63, 0x6f, 0x72, 0x73, 0x6f, 0x1a, 0x74, + 0x72, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x74, + 0x72, 0x69, 0x6d, 0x2e, 0x18, 0x7b, 0x30, 0x7d, + 0x20, 0x74, 0x72, 0x69, 0x6d, 0x2e, 0x20, 0x66, + 0x61, 0x1a, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, + 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1c, + 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x16, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x6f, 0x20, 0x6d, 0x65, + 0x73, 0x65, 0x1a, 0x6d, 0x65, 0x73, 0x65, 0x20, + 0x70, 0x72, 0x6f, 0x73, 0x73, 0x69, 0x6d, 0x6f, + 0x16, 0x6d, 0x65, 0x73, 0x65, 0x20, 0x73, 0x63, + 0x6f, 0x72, 0x73, 0x6f, 0x18, 0x74, 0x72, 0x61, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x65, 0x73, + 0x65, 0x18, 0x74, 0x72, 0x61, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x6d, 0x65, 0x73, 0x69, 0x16, 0x7b, + 0x30, 0x7d, 0x20, 0x6d, 0x65, 0x73, 0x65, 0x20, + 0x66, 0x61, 0x16, 0x7b, 0x30, 0x7d, 0x20, 0x6d, + 0x65, 0x73, 0x69, 0x20, 0x66, 0x61, 0x0a, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x16, 0x6d, 0x6f, 0x6e, + 0x74, 0x68, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x18, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x20, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x61, 0x20, 0x73, 0x65, 0x74, + 0x74, 0x69, 0x6d, 0x61, 0x6e, 0x61, 0x24, 0x73, + 0x65, 0x74, 0x74, 0x69, 0x6d, 0x61, 0x6e, 0x61, + 0x20, 0x70, 0x72, 0x6f, 0x73, 0x73, 0x69, 0x6d, + 0x61, 0x20, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6d, + 0x61, 0x6e, 0x61, 0x20, 0x73, 0x63, 0x6f, 0x72, + 0x73, 0x61, 0x22, 0x74, 0x72, 0x61, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x73, 0x65, 0x74, 0x74, 0x69, + 0x6d, 0x61, 0x6e, 0x61, 0x22, 0x74, 0x72, 0x61, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, 0x74, + 0x74, 0x69, 0x6d, 0x61, 0x6e, 0x65, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x73, 0x65, 0x74, 0x74, 0x69, + 0x6d, 0x61, 0x6e, 0x61, 0x20, 0x66, 0x61, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, 0x74, 0x74, + 0x69, 0x6d, 0x61, 0x6e, 0x65, 0x20, 0x66, 0x61, + 0x08, 0x77, 0x65, 0x65, 0x6b, 0x1a, 0x74, 0x72, + 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, + 0x74, 0x74, 0x2e, 0x18, 0x7b, 0x30, 0x7d, 0x20, + 0x73, 0x65, 0x74, 0x74, 0x2e, 0x20, 0x66, 0x61, + 0x14, 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x16, 0x77, 0x65, 0x65, 0x6b, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x08, + 0x6f, 0x67, 0x67, 0x69, 0x0c, 0x64, 0x6f, 0x6d, + 0x61, 0x6e, 0x69, 0x14, 0x64, 0x6f, 0x70, 0x6f, + 0x64, 0x6f, 0x6d, 0x61, 0x6e, 0x69, 0x19, 0x6c, + 0x00, 0x19, 0x20, 0x61, 0x00, 0x6c, 0x00, 0x74, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x69, + 0x00, 0x65, 0x00, 0x72, 0x00, 0x69, 0x00, 0x04, + 0x2d, 0x32, 0x08, 0x69, 0x65, 0x72, 0x69, 0x1c, + 0x74, 0x72, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x67, 0x69, 0x6f, 0x72, 0x6e, 0x6f, 0x1c, 0x74, + 0x72, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x67, + 0x69, 0x6f, 0x72, 0x6e, 0x69, 0x1a, 0x7b, 0x30, + 0x7d, 0x20, 0x67, 0x69, 0x6f, 0x72, 0x6e, 0x6f, + 0x20, 0x66, 0x61, 0x1a, 0x7b, 0x30, 0x7d, 0x20, + 0x67, 0x69, 0x6f, 0x72, 0x6e, 0x69, 0x20, 0x66, + 0x61, 0x06, 0x64, 0x61, 0x79, 0x12, 0x74, 0x72, + 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x67, 0x14, + 0x74, 0x72, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x67, 0x67, 0x10, 0x7b, 0x30, 0x7d, 0x20, 0x67, + 0x20, 0x66, 0x61, 0x12, 0x7b, 0x30, 0x7d, 0x20, + 0x67, 0x67, 0x20, 0x66, 0x61, 0x12, 0x64, 0x61, + 0x79, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x14, + 0x64, 0x61, 0x79, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x13, 0x71, 0x00, 0x75, 0x00, 0x65, + 0x00, 0x73, 0x00, 0x74, 0x00, 0x19, 0x20, 0x6f, + 0x00, 0x72, 0x00, 0x61, 0x00, 0x16, 0x74, 0x72, + 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6f, 0x72, + 0x61, 0x16, 0x74, 0x72, 0x61, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x6f, 0x72, 0x65, 0x14, 0x7b, 0x30, + 0x7d, 0x20, 0x6f, 0x72, 0x61, 0x20, 0x66, 0x61, + 0x14, 0x7b, 0x30, 0x7d, 0x20, 0x6f, 0x72, 0x65, + 0x20, 0x66, 0x61, 0x08, 0x68, 0x6f, 0x75, 0x72, + 0x12, 0x74, 0x72, 0x61, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x68, 0x10, 0x7b, 0x30, 0x7d, 0x20, 0x68, + 0x20, 0x66, 0x61, 0x14, 0x68, 0x6f, 0x75, 0x72, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, 0x68, + 0x6f, 0x75, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x1a, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x6f, 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x6f, + 0x1c, 0x74, 0x72, 0x61, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x6f, 0x1c, + 0x74, 0x72, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x69, 0x1a, 0x7b, + 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x74, + 0x6f, 0x20, 0x66, 0x61, 0x1a, 0x7b, 0x30, 0x7d, + 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x69, 0x20, + 0x66, 0x61, 0x0c, 0x6d, 0x69, 0x6e, 0x75, 0x74, + 0x65, 0x16, 0x74, 0x72, 0x61, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x14, 0x7b, 0x30, + 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x20, 0x66, 0x61, + 0x18, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x06, 0x6f, 0x72, 0x61, 0x1e, + 0x74, 0x72, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x6f, 0x1e, + 0x74, 0x72, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x69, 0x1c, + 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x6f, 0x20, 0x66, 0x61, 0x1c, 0x7b, + 0x30, 0x7d, 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x69, 0x20, 0x66, 0x61, 0x0c, 0x73, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x12, 0x74, 0x72, 0x61, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x18, 0x74, + 0x72, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, + 0x65, 0x63, 0x2e, 0x10, 0x7b, 0x30, 0x7d, 0x20, + 0x73, 0x20, 0x66, 0x61, 0x16, 0x7b, 0x30, 0x7d, + 0x20, 0x73, 0x65, 0x63, 0x2e, 0x20, 0x66, 0x61, + 0x18, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x73, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x08, 0x6c, 0x61, 0x74, 0x6e, + 0x04, 0x6e, 0x75, 0x08, 0x64, 0x61, 0x74, 0x61, + 0x70, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, + 0x74, 0x6c, 0x2d, 0x72, 0x65, 0x6c, 0x61, 0x74, + 0x69, 0x76, 0x65, 0x2d, 0x74, 0x69, 0x6d, 0x65, + 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2f, + 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, + 0x61, 0x74, 0x61, 0x2f, 0x69, 0x74, 0x2e, 0x6a, + 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, + 0x01, 0x00, 0x07, 0x00, 0x00, 0xd6, 0x0f, 0x01, + 0xa0, 0x01, 0x00, 0x00, 0x00, 0x06, 0xc8, 0x04, + 0xd0, 0x00, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, + 0x00, 0x42, 0xd2, 0x00, 0x00, 0x00, 0xaa, 0x6a, + 0xc1, 0x07, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, + 0x00, 0x42, 0xd2, 0x00, 0x00, 0x00, 0x43, 0xd0, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd3, 0x00, 0x00, + 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xe6, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe7, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xee, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xef, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xf0, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0xf1, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xee, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xef, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xf0, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0xf2, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xf5, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf6, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xf9, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0xfa, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xf5, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf6, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xf9, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0xfb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xf5, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf6, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xf9, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0xfc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xff, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x00, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0x04, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xff, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x05, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0x07, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xff, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x05, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0x08, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0x0b, 0x01, 0x00, + 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, 0x0c, + 0x01, 0x00, 0x00, 0x4d, 0x0d, 0x01, 0x00, 0x00, + 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x0f, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x10, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x11, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x12, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x13, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x09, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x0a, + 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, 0x02, 0x00, + 0x00, 0x80, 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, + 0x0d, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x01, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x14, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x17, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0x18, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0x0b, 0x01, 0x00, + 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, 0x0c, + 0x01, 0x00, 0x00, 0x4d, 0x0d, 0x01, 0x00, 0x00, + 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x14, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x17, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x19, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x1a, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, + 0x1b, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x1c, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x1e, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0x1f, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x20, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x20, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x21, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x21, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x22, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x20, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x20, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x21, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x21, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x23, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x24, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, + 0x25, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x27, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x28, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0x29, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x2a, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x2a, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x2b, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x2b, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x2c, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x2a, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x2a, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x2b, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x2b, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x2d, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x2e, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, + 0x2f, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x30, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x31, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x32, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0x33, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x34, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x35, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x36, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x37, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x38, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x34, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x34, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x36, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x36, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x39, + 0x01, 0x00, 0x00, 0x04, 0x3a, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x3b, 0x01, 0x00, 0x00, + 0x4d, 0x3c, 0x01, 0x00, 0x00, 0x24, 0x01, 0x00, + 0xc8, 0xc4, 0x28, 0xfa, 0x04, 0x01, 0xaf, 0x02, + 0x76, 0x53, 0x35, 0x08, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x1c, 0x12, 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_ja_size = 2749; + +const uint8_t intl_relative_ja[2749] = { + 0x01, 0x5a, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x04, 0x6a, 0x61, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x05, 0xca, 0x4e, 0x74, + 0x5e, 0x05, 0x65, 0x67, 0x74, 0x5e, 0x05, 0x28, + 0x66, 0x74, 0x5e, 0x04, 0x2d, 0x31, 0x0d, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x74, + 0x5e, 0x8c, 0x5f, 0x0a, 0x6f, 0x74, 0x68, 0x65, + 0x72, 0x0c, 0x66, 0x75, 0x74, 0x75, 0x72, 0x65, + 0x0d, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x74, 0x5e, 0x4d, 0x52, 0x08, 0x70, 0x61, + 0x73, 0x74, 0x08, 0x79, 0x65, 0x61, 0x72, 0x14, + 0x79, 0x65, 0x61, 0x72, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x0b, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x74, 0x5e, 0x8c, 0x5f, 0x0b, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x74, 0x5e, 0x4d, 0x52, + 0x16, 0x79, 0x65, 0x61, 0x72, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x09, 0xca, 0x4e, 0xdb, + 0x56, 0x4a, 0x53, 0x1f, 0x67, 0x09, 0xcc, 0x7f, + 0xdb, 0x56, 0x4a, 0x53, 0x1f, 0x67, 0x09, 0x4d, + 0x52, 0xdb, 0x56, 0x4a, 0x53, 0x1f, 0x67, 0x11, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0xdb, 0x56, 0x4a, 0x53, 0x1f, 0x67, 0x8c, 0x5f, + 0x11, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0xdb, 0x56, 0x4a, 0x53, 0x1f, 0x67, 0x4d, + 0x52, 0x0e, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, + 0x72, 0x1a, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, + 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0f, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0xdb, 0x56, + 0x4a, 0x53, 0x1f, 0x67, 0x8c, 0x5f, 0x0f, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0xdb, 0x56, 0x4a, + 0x53, 0x1f, 0x67, 0x4d, 0x52, 0x1c, 0x71, 0x75, + 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x05, 0xca, 0x4e, 0x08, + 0x67, 0x05, 0x65, 0x67, 0x08, 0x67, 0x05, 0x48, + 0x51, 0x08, 0x67, 0x0f, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x4b, 0x30, 0x08, 0x67, + 0x8c, 0x5f, 0x0f, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x4b, 0x30, 0x08, 0x67, 0x4d, + 0x52, 0x0a, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x16, + 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x0d, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x4b, 0x30, 0x08, 0x67, 0x8c, 0x5f, + 0x0d, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x4b, + 0x30, 0x08, 0x67, 0x4d, 0x52, 0x18, 0x6d, 0x6f, + 0x6e, 0x74, 0x68, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x05, 0xca, 0x4e, 0x31, 0x90, 0x05, + 0x65, 0x67, 0x31, 0x90, 0x05, 0x48, 0x51, 0x31, + 0x90, 0x0f, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x31, 0x90, 0x93, 0x95, 0x8c, 0x5f, + 0x0f, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x31, 0x90, 0x93, 0x95, 0x4d, 0x52, 0x08, + 0x77, 0x65, 0x65, 0x6b, 0x14, 0x77, 0x65, 0x65, + 0x6b, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0d, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x31, 0x90, + 0x93, 0x95, 0x8c, 0x5f, 0x0d, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x31, 0x90, 0x93, 0x95, 0x4d, + 0x52, 0x16, 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x05, 0xca, 0x4e, + 0xe5, 0x65, 0x05, 0x0e, 0x66, 0xe5, 0x65, 0x07, + 0x0e, 0x66, 0x8c, 0x5f, 0xe5, 0x65, 0x07, 0x00, + 0x4e, 0x28, 0x66, 0xe5, 0x65, 0x04, 0x2d, 0x32, + 0x05, 0x28, 0x66, 0xe5, 0x65, 0x0d, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xe5, 0x65, + 0x8c, 0x5f, 0x0d, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0xe5, 0x65, 0x4d, 0x52, 0x06, + 0x64, 0x61, 0x79, 0x12, 0x64, 0x61, 0x79, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0b, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0xe5, 0x65, 0x8c, 0x5f, + 0x0b, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0xe5, + 0x65, 0x4d, 0x52, 0x14, 0x64, 0x61, 0x79, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0d, 0x31, + 0x00, 0x20, 0x00, 0x42, 0x66, 0x93, 0x95, 0xe5, + 0x4e, 0x85, 0x51, 0x0f, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x42, 0x66, 0x93, 0x95, + 0x8c, 0x5f, 0x0f, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x42, 0x66, 0x93, 0x95, 0x4d, + 0x52, 0x08, 0x68, 0x6f, 0x75, 0x72, 0x14, 0x68, + 0x6f, 0x75, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x0d, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x42, 0x66, 0x93, 0x95, 0x8c, 0x5f, 0x0d, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x42, 0x66, 0x93, + 0x95, 0x4d, 0x52, 0x16, 0x68, 0x6f, 0x75, 0x72, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0b, + 0x31, 0x00, 0x20, 0x00, 0x06, 0x52, 0xe5, 0x4e, + 0x85, 0x51, 0x0d, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x06, 0x52, 0x8c, 0x5f, 0x0d, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x06, 0x52, 0x4d, 0x52, 0x0c, 0x6d, 0x69, 0x6e, + 0x75, 0x74, 0x65, 0x18, 0x6d, 0x69, 0x6e, 0x75, + 0x74, 0x65, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x0b, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x06, + 0x52, 0x8c, 0x5f, 0x0b, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x06, 0x52, 0x4d, 0x52, 0x1a, 0x6d, + 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x03, 0xca, 0x4e, 0x0d, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0xd2, 0x79, 0x8c, 0x5f, 0x0d, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0xd2, 0x79, 0x4d, + 0x52, 0x0c, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, + 0x18, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0b, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0xd2, 0x79, 0x8c, 0x5f, + 0x0b, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0xd2, + 0x79, 0x4d, 0x52, 0x1a, 0x73, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, + 0x75, 0x08, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6e, + 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, + 0x2d, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, + 0x65, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2d, 0x66, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2f, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, + 0x61, 0x2f, 0x6a, 0x61, 0x2e, 0x6a, 0x73, 0x0d, + 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, + 0x07, 0x00, 0x00, 0xf6, 0x0b, 0x01, 0xa0, 0x01, + 0x00, 0x00, 0x00, 0x06, 0xc8, 0x04, 0xd0, 0x00, + 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, + 0xd2, 0x00, 0x00, 0x00, 0xaa, 0x6a, 0xe1, 0x05, + 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, + 0xd2, 0x00, 0x00, 0x00, 0x43, 0xd0, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd3, 0x00, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xd5, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xd7, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd5, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe1, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe3, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xe4, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xe5, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe3, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe7, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe3, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xe4, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xe5, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xea, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xec, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xed, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf0, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf1, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xf2, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xee, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xef, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xf3, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xed, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf4, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf5, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xf6, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xf8, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xf9, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xfc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf7, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfa, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfb, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xfd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xf8, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xf9, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x01, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, + 0x02, 0x00, 0x00, 0x80, 0x04, 0x04, 0x01, 0x00, + 0x00, 0x4d, 0x05, 0x01, 0x00, 0x00, 0x04, 0x06, + 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0x09, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x01, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, + 0x02, 0x00, 0x00, 0x80, 0x04, 0x04, 0x01, 0x00, + 0x00, 0x4d, 0x05, 0x01, 0x00, 0x00, 0x04, 0x06, + 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0x0a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x01, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, + 0x02, 0x00, 0x00, 0x80, 0x04, 0x04, 0x01, 0x00, + 0x00, 0x4d, 0x05, 0x01, 0x00, 0x00, 0x04, 0x06, + 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0x0d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x0e, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x0b, 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0x11, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x0f, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x10, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x12, + 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x13, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x14, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x15, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x17, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x18, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x19, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x17, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x18, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0x1a, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x1b, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x1c, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0x1d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x1e, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x0b, 0x04, 0x1f, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x20, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0x21, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x1f, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x20, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x22, + 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x23, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x24, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x25, 0x01, 0x00, + 0x00, 0x04, 0x26, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x27, 0x01, 0x00, 0x00, 0x4d, 0x28, + 0x01, 0x00, 0x00, 0x24, 0x01, 0x00, 0xc8, 0xc4, + 0x28, 0xd2, 0x04, 0x01, 0xff, 0x01, 0x76, 0x53, + 0x35, 0x08, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, + 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, + 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, + 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, + 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, + 0x1c, 0x12, 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_ja_JP_size = 2755; + +const uint8_t intl_relative_ja_JP[2755] = { + 0x01, 0x5a, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x0a, 0x6a, 0x61, 0x2d, 0x4a, 0x50, + 0x0c, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x05, + 0xca, 0x4e, 0x74, 0x5e, 0x05, 0x65, 0x67, 0x74, + 0x5e, 0x05, 0x28, 0x66, 0x74, 0x5e, 0x04, 0x2d, + 0x31, 0x0d, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x74, 0x5e, 0x8c, 0x5f, 0x0a, 0x6f, + 0x74, 0x68, 0x65, 0x72, 0x0c, 0x66, 0x75, 0x74, + 0x75, 0x72, 0x65, 0x0d, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x74, 0x5e, 0x4d, 0x52, + 0x08, 0x70, 0x61, 0x73, 0x74, 0x08, 0x79, 0x65, + 0x61, 0x72, 0x14, 0x79, 0x65, 0x61, 0x72, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0b, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x74, 0x5e, 0x8c, 0x5f, + 0x0b, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x74, + 0x5e, 0x4d, 0x52, 0x16, 0x79, 0x65, 0x61, 0x72, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x09, + 0xca, 0x4e, 0xdb, 0x56, 0x4a, 0x53, 0x1f, 0x67, + 0x09, 0xcc, 0x7f, 0xdb, 0x56, 0x4a, 0x53, 0x1f, + 0x67, 0x09, 0x4d, 0x52, 0xdb, 0x56, 0x4a, 0x53, + 0x1f, 0x67, 0x11, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0xdb, 0x56, 0x4a, 0x53, 0x1f, + 0x67, 0x8c, 0x5f, 0x11, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0xdb, 0x56, 0x4a, 0x53, + 0x1f, 0x67, 0x4d, 0x52, 0x0e, 0x71, 0x75, 0x61, + 0x72, 0x74, 0x65, 0x72, 0x1a, 0x71, 0x75, 0x61, + 0x72, 0x74, 0x65, 0x72, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x0f, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0xdb, 0x56, 0x4a, 0x53, 0x1f, 0x67, 0x8c, + 0x5f, 0x0f, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0xdb, 0x56, 0x4a, 0x53, 0x1f, 0x67, 0x4d, 0x52, + 0x1c, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x05, + 0xca, 0x4e, 0x08, 0x67, 0x05, 0x65, 0x67, 0x08, + 0x67, 0x05, 0x48, 0x51, 0x08, 0x67, 0x0f, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x4b, + 0x30, 0x08, 0x67, 0x8c, 0x5f, 0x0f, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x4b, 0x30, + 0x08, 0x67, 0x4d, 0x52, 0x0a, 0x6d, 0x6f, 0x6e, + 0x74, 0x68, 0x16, 0x6d, 0x6f, 0x6e, 0x74, 0x68, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0d, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x4b, 0x30, 0x08, + 0x67, 0x8c, 0x5f, 0x0d, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x4b, 0x30, 0x08, 0x67, 0x4d, 0x52, + 0x18, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x05, 0xca, 0x4e, + 0x31, 0x90, 0x05, 0x65, 0x67, 0x31, 0x90, 0x05, + 0x48, 0x51, 0x31, 0x90, 0x0f, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x31, 0x90, 0x93, + 0x95, 0x8c, 0x5f, 0x0f, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x31, 0x90, 0x93, 0x95, + 0x4d, 0x52, 0x08, 0x77, 0x65, 0x65, 0x6b, 0x14, + 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x0d, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x31, 0x90, 0x93, 0x95, 0x8c, 0x5f, 0x0d, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x31, 0x90, + 0x93, 0x95, 0x4d, 0x52, 0x16, 0x77, 0x65, 0x65, + 0x6b, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x05, 0xca, 0x4e, 0xe5, 0x65, 0x05, 0x0e, 0x66, + 0xe5, 0x65, 0x07, 0x0e, 0x66, 0x8c, 0x5f, 0xe5, + 0x65, 0x07, 0x00, 0x4e, 0x28, 0x66, 0xe5, 0x65, + 0x04, 0x2d, 0x32, 0x05, 0x28, 0x66, 0xe5, 0x65, + 0x0d, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0xe5, 0x65, 0x8c, 0x5f, 0x0d, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xe5, 0x65, + 0x4d, 0x52, 0x06, 0x64, 0x61, 0x79, 0x12, 0x64, + 0x61, 0x79, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x0b, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0xe5, + 0x65, 0x8c, 0x5f, 0x0b, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0xe5, 0x65, 0x4d, 0x52, 0x14, 0x64, + 0x61, 0x79, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x0d, 0x31, 0x00, 0x20, 0x00, 0x42, 0x66, + 0x93, 0x95, 0xe5, 0x4e, 0x85, 0x51, 0x0f, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x42, + 0x66, 0x93, 0x95, 0x8c, 0x5f, 0x0f, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x42, 0x66, + 0x93, 0x95, 0x4d, 0x52, 0x08, 0x68, 0x6f, 0x75, + 0x72, 0x14, 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x0d, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x42, 0x66, 0x93, 0x95, 0x8c, + 0x5f, 0x0d, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x42, 0x66, 0x93, 0x95, 0x4d, 0x52, 0x16, 0x68, + 0x6f, 0x75, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x0b, 0x31, 0x00, 0x20, 0x00, 0x06, + 0x52, 0xe5, 0x4e, 0x85, 0x51, 0x0d, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x06, 0x52, + 0x8c, 0x5f, 0x0d, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x06, 0x52, 0x4d, 0x52, 0x0c, + 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x18, 0x6d, + 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x0b, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x06, 0x52, 0x8c, 0x5f, 0x0b, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x06, 0x52, 0x4d, + 0x52, 0x1a, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x03, + 0xca, 0x4e, 0x0d, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0xd2, 0x79, 0x8c, 0x5f, 0x0d, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0xd2, 0x79, 0x4d, 0x52, 0x0c, 0x73, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x18, 0x73, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x0b, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0xd2, + 0x79, 0x8c, 0x5f, 0x0b, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0xd2, 0x79, 0x4d, 0x52, 0x1a, 0x73, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x08, 0x6c, 0x61, 0x74, + 0x6e, 0x04, 0x6e, 0x75, 0x08, 0x64, 0x61, 0x74, + 0x61, 0x76, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, + 0x6e, 0x74, 0x6c, 0x2d, 0x72, 0x65, 0x6c, 0x61, + 0x74, 0x69, 0x76, 0x65, 0x2d, 0x74, 0x69, 0x6d, + 0x65, 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, + 0x64, 0x61, 0x74, 0x61, 0x2f, 0x6a, 0x61, 0x2d, + 0x4a, 0x50, 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, + 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, 0x07, 0x00, + 0x00, 0xf6, 0x0b, 0x01, 0xa0, 0x01, 0x00, 0x00, + 0x00, 0x06, 0xc8, 0x04, 0xd0, 0x00, 0x00, 0x00, + 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, 0x00, + 0x00, 0x00, 0xaa, 0x6a, 0xe1, 0x05, 0x00, 0x00, + 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, 0x00, + 0x00, 0x00, 0x43, 0xd0, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd3, 0x00, 0x00, 0x00, 0x4d, 0xd4, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xd5, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xd6, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd5, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xd6, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe1, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe3, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe7, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe3, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xe4, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe7, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe3, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xec, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xed, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xee, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xf0, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xf1, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0xf2, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xef, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf0, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf1, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xf3, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xed, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xee, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xf4, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xf5, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0xf6, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xf9, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xfb, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xfc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf7, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xf8, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xfa, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xfb, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0xfd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xf9, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xfe, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xff, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x01, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x02, + 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0x02, 0x00, + 0x00, 0x80, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, + 0x05, 0x01, 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x07, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x08, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x09, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x01, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x02, + 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0x02, 0x00, + 0x00, 0x80, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, + 0x05, 0x01, 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x07, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x08, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x0a, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x01, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x02, + 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0x02, 0x00, + 0x00, 0x80, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, + 0x05, 0x01, 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x0b, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x0c, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x0d, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x0e, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, + 0x0f, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x10, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x11, + 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x0f, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x10, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x12, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x13, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x14, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0x15, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x0b, 0x04, 0x17, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x18, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0x19, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x18, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0x1a, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x1b, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x1c, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x1d, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x1e, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, + 0x1f, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x20, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x21, + 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x1f, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x20, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x22, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x23, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x24, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0x25, 0x01, 0x00, 0x00, 0x04, + 0x26, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x27, 0x01, 0x00, 0x00, 0x4d, 0x28, 0x01, 0x00, + 0x00, 0x24, 0x01, 0x00, 0xc8, 0xc4, 0x28, 0xd2, + 0x04, 0x01, 0xff, 0x01, 0x76, 0x53, 0x35, 0x08, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, + 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, + 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x1c, + 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x1c, + 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x1c, + 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, + 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, + 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x1c, 0x12, + 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_ka_size = 3583; + +const uint8_t intl_relative_ka[3583] = { + 0x01, 0x51, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x04, 0x6b, 0x61, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x0f, 0xd0, 0x10, 0xdb, + 0x10, 0x20, 0x00, 0xec, 0x10, 0xd4, 0x10, 0xda, + 0x10, 0xe1, 0x10, 0x19, 0xdb, 0x10, 0xdd, 0x10, + 0xdb, 0x10, 0xd0, 0x10, 0xd5, 0x10, 0xd0, 0x10, + 0xda, 0x10, 0x20, 0x00, 0xec, 0x10, 0xd4, 0x10, + 0xda, 0x10, 0xe1, 0x10, 0x15, 0xd2, 0x10, 0xd0, + 0x10, 0xe1, 0x10, 0xe3, 0x10, 0xda, 0x10, 0x20, + 0x00, 0xec, 0x10, 0xd4, 0x10, 0xda, 0x10, 0xe1, + 0x10, 0x04, 0x2d, 0x31, 0x1b, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0xec, 0x10, 0xd4, + 0x10, 0xda, 0x10, 0xd8, 0x10, 0xec, 0x10, 0xd0, + 0x10, 0xd3, 0x10, 0xe8, 0x10, 0xd8, 0x10, 0x06, + 0x6f, 0x6e, 0x65, 0x0a, 0x6f, 0x74, 0x68, 0x65, + 0x72, 0x0c, 0x66, 0x75, 0x74, 0x75, 0x72, 0x65, + 0x19, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0xec, 0x10, 0xda, 0x10, 0xd8, 0x10, 0xe1, + 0x10, 0x20, 0x00, 0xec, 0x10, 0xd8, 0x10, 0xdc, + 0x10, 0x08, 0x70, 0x61, 0x73, 0x74, 0x08, 0x79, + 0x65, 0x61, 0x72, 0x13, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0xec, 0x10, 0xd4, 0x10, + 0xda, 0x10, 0xe8, 0x10, 0xd8, 0x10, 0x14, 0x79, + 0x65, 0x61, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x16, 0x79, 0x65, 0x61, 0x72, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x19, 0xd0, 0x10, + 0xdb, 0x10, 0x20, 0x00, 0xd9, 0x10, 0xd5, 0x10, + 0xd0, 0x10, 0xe0, 0x10, 0xe2, 0x10, 0xd0, 0x10, + 0xda, 0x10, 0xe8, 0x10, 0xd8, 0x10, 0x21, 0xe8, + 0x10, 0xd4, 0x10, 0xdb, 0x10, 0xd3, 0x10, 0xd4, + 0x10, 0xd2, 0x10, 0x20, 0x00, 0xd9, 0x10, 0xd5, + 0x10, 0xd0, 0x10, 0xe0, 0x10, 0xe2, 0x10, 0xd0, + 0x10, 0xda, 0x10, 0xe8, 0x10, 0xd8, 0x10, 0x1f, + 0xd2, 0x10, 0xd0, 0x10, 0xe1, 0x10, 0xe3, 0x10, + 0xda, 0x10, 0x20, 0x00, 0xd9, 0x10, 0xd5, 0x10, + 0xd0, 0x10, 0xe0, 0x10, 0xe2, 0x10, 0xd0, 0x10, + 0xda, 0x10, 0xe8, 0x10, 0xd8, 0x10, 0x1b, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xd9, + 0x10, 0xd5, 0x10, 0xd0, 0x10, 0xe0, 0x10, 0xe2, + 0x10, 0xd0, 0x10, 0xda, 0x10, 0xe8, 0x10, 0xd8, + 0x10, 0x23, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0xd9, 0x10, 0xd5, 0x10, 0xd0, 0x10, + 0xe0, 0x10, 0xe2, 0x10, 0xd0, 0x10, 0xda, 0x10, + 0xd8, 0x10, 0xe1, 0x10, 0x20, 0x00, 0xec, 0x10, + 0xd8, 0x10, 0xdc, 0x10, 0x0e, 0x71, 0x75, 0x61, + 0x72, 0x74, 0x65, 0x72, 0x1d, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0xd9, 0x10, 0xd5, + 0x10, 0xd0, 0x10, 0xe0, 0x10, 0xe2, 0x10, 0x2e, + 0x00, 0x20, 0x00, 0xec, 0x10, 0xd8, 0x10, 0xdc, + 0x10, 0x1a, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, + 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1c, + 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x11, 0xd0, + 0x10, 0xdb, 0x10, 0x20, 0x00, 0xd7, 0x10, 0xd5, + 0x10, 0xd4, 0x10, 0xe8, 0x10, 0xd8, 0x10, 0x19, + 0xdb, 0x10, 0xdd, 0x10, 0xdb, 0x10, 0xd0, 0x10, + 0xd5, 0x10, 0xd0, 0x10, 0xda, 0x10, 0x20, 0x00, + 0xd7, 0x10, 0xd5, 0x10, 0xd4, 0x10, 0xe1, 0x10, + 0x15, 0xd2, 0x10, 0xd0, 0x10, 0xe1, 0x10, 0xe3, + 0x10, 0xda, 0x10, 0x20, 0x00, 0xd7, 0x10, 0xd5, + 0x10, 0xd4, 0x10, 0xe1, 0x10, 0x13, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xd7, 0x10, + 0xd5, 0x10, 0xd4, 0x10, 0xe8, 0x10, 0xd8, 0x10, + 0x19, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0xd7, 0x10, 0xd5, 0x10, 0xd8, 0x10, 0xe1, + 0x10, 0x20, 0x00, 0xec, 0x10, 0xd8, 0x10, 0xdc, + 0x10, 0x0a, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x16, + 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x18, 0x6d, 0x6f, 0x6e, 0x74, + 0x68, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x15, 0xd0, 0x10, 0xdb, 0x10, 0x20, 0x00, 0xd9, + 0x10, 0xd5, 0x10, 0xd8, 0x10, 0xe0, 0x10, 0xd0, + 0x10, 0xe8, 0x10, 0xd8, 0x10, 0x1f, 0xdb, 0x10, + 0xdd, 0x10, 0xdb, 0x10, 0xd0, 0x10, 0xd5, 0x10, + 0xd0, 0x10, 0xda, 0x10, 0x20, 0x00, 0xd9, 0x10, + 0xd5, 0x10, 0xd8, 0x10, 0xe0, 0x10, 0xd0, 0x10, + 0xe8, 0x10, 0xd8, 0x10, 0x1b, 0xd2, 0x10, 0xd0, + 0x10, 0xe1, 0x10, 0xe3, 0x10, 0xda, 0x10, 0x20, + 0x00, 0xd9, 0x10, 0xd5, 0x10, 0xd8, 0x10, 0xe0, + 0x10, 0xd0, 0x10, 0xe8, 0x10, 0xd8, 0x10, 0x17, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0xd9, 0x10, 0xd5, 0x10, 0xd8, 0x10, 0xe0, 0x10, + 0xd0, 0x10, 0xe8, 0x10, 0xd8, 0x10, 0x1d, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xd9, + 0x10, 0xd5, 0x10, 0xd8, 0x10, 0xe0, 0x10, 0xd8, + 0x10, 0xe1, 0x10, 0x20, 0x00, 0xec, 0x10, 0xd8, + 0x10, 0xdc, 0x10, 0x08, 0x77, 0x65, 0x65, 0x6b, + 0x17, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0xd9, 0x10, 0xd5, 0x10, 0x2e, 0x00, 0x20, + 0x00, 0xec, 0x10, 0xd8, 0x10, 0xdc, 0x10, 0x14, + 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x16, 0x77, 0x65, 0x65, 0x6b, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x09, 0xd3, + 0x10, 0xe6, 0x10, 0xd4, 0x10, 0xe1, 0x10, 0x09, + 0xee, 0x10, 0xd5, 0x10, 0xd0, 0x10, 0xda, 0x10, + 0x07, 0xd6, 0x10, 0xd4, 0x10, 0xd2, 0x10, 0x11, + 0xd2, 0x10, 0xe3, 0x10, 0xe8, 0x10, 0xd8, 0x10, + 0xdc, 0x10, 0xec, 0x10, 0xd8, 0x10, 0xdc, 0x10, + 0x04, 0x2d, 0x32, 0x0b, 0xd2, 0x10, 0xe3, 0x10, + 0xe8, 0x10, 0xd8, 0x10, 0xdc, 0x10, 0x13, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xd3, + 0x10, 0xe6, 0x10, 0xd4, 0x10, 0xe8, 0x10, 0xd8, + 0x10, 0x19, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0xd3, 0x10, 0xe6, 0x10, 0xd8, 0x10, + 0xe1, 0x10, 0x20, 0x00, 0xec, 0x10, 0xd8, 0x10, + 0xdc, 0x10, 0x06, 0x64, 0x61, 0x79, 0x12, 0x64, + 0x61, 0x79, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x14, 0x64, 0x61, 0x79, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x13, 0xd0, 0x10, 0xdb, 0x10, + 0x20, 0x00, 0xe1, 0x10, 0xd0, 0x10, 0xd0, 0x10, + 0xd7, 0x10, 0xe8, 0x10, 0xd8, 0x10, 0x15, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xe1, + 0x10, 0xd0, 0x10, 0xd0, 0x10, 0xd7, 0x10, 0xe8, + 0x10, 0xd8, 0x10, 0x1d, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0xe1, 0x10, 0xd0, 0x10, + 0xd0, 0x10, 0xd7, 0x10, 0xd8, 0x10, 0xe1, 0x10, + 0x20, 0x00, 0xec, 0x10, 0xd8, 0x10, 0xdc, 0x10, + 0x08, 0x68, 0x6f, 0x75, 0x72, 0x15, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xe1, 0x10, + 0xd7, 0x10, 0x20, 0x00, 0xec, 0x10, 0xd8, 0x10, + 0xdc, 0x10, 0x14, 0x68, 0x6f, 0x75, 0x72, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, 0x68, 0x6f, + 0x75, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x11, 0xd0, 0x10, 0xdb, 0x10, 0x20, 0x00, + 0xec, 0x10, 0xe3, 0x10, 0xd7, 0x10, 0xe8, 0x10, + 0xd8, 0x10, 0x13, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0xec, 0x10, 0xe3, 0x10, 0xd7, + 0x10, 0xe8, 0x10, 0xd8, 0x10, 0x1b, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xec, 0x10, + 0xe3, 0x10, 0xd7, 0x10, 0xd8, 0x10, 0xe1, 0x10, + 0x20, 0x00, 0xec, 0x10, 0xd8, 0x10, 0xdc, 0x10, + 0x0c, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x15, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0xec, 0x10, 0xd7, 0x10, 0x20, 0x00, 0xec, 0x10, + 0xd8, 0x10, 0xdc, 0x10, 0x18, 0x6d, 0x69, 0x6e, + 0x75, 0x74, 0x65, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x1a, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x09, + 0xd0, 0x10, 0xee, 0x10, 0xda, 0x10, 0xd0, 0x10, + 0x13, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0xec, 0x10, 0xd0, 0x10, 0xdb, 0x10, 0xe8, + 0x10, 0xd8, 0x10, 0x1b, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0xec, 0x10, 0xd0, 0x10, + 0xdb, 0x10, 0xd8, 0x10, 0xe1, 0x10, 0x20, 0x00, + 0xec, 0x10, 0xd8, 0x10, 0xdc, 0x10, 0x0c, 0x73, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x15, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xec, 0x10, + 0xdb, 0x10, 0x20, 0x00, 0xec, 0x10, 0xd8, 0x10, + 0xdc, 0x10, 0x18, 0x73, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1a, + 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x08, 0x6c, 0x61, + 0x74, 0x6e, 0x04, 0x6e, 0x75, 0x08, 0x64, 0x61, + 0x74, 0x61, 0x70, 0x6e, 0x6f, 0x64, 0x65, 0x5f, + 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, + 0x69, 0x6e, 0x74, 0x6c, 0x2d, 0x72, 0x65, 0x6c, + 0x61, 0x74, 0x69, 0x76, 0x65, 0x2d, 0x74, 0x69, + 0x6d, 0x65, 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, + 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x6b, 0x61, + 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, + 0x01, 0x00, 0x01, 0x00, 0x07, 0x00, 0x00, 0x9a, + 0x0f, 0x01, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x06, + 0xc8, 0x04, 0xd0, 0x00, 0x00, 0x00, 0x39, 0xd1, + 0x00, 0x00, 0x00, 0x42, 0xd2, 0x00, 0x00, 0x00, + 0xaa, 0x6a, 0x85, 0x07, 0x00, 0x00, 0x39, 0xd1, + 0x00, 0x00, 0x00, 0x42, 0xd2, 0x00, 0x00, 0x00, + 0x43, 0xd0, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd3, + 0x00, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xd7, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xd7, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xd7, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe3, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xe4, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xe5, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe7, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe7, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe9, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xe9, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xea, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xec, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xef, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xef, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf0, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0xf1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xec, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xef, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xef, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf0, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0xf2, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xec, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xef, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xef, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf0, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0xf3, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf4, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf7, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf8, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0xf9, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf4, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf7, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0xfb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf4, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf7, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf8, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0xfc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfd, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, + 0x02, 0x00, 0x00, 0x80, 0x04, 0x00, 0x01, 0x00, + 0x00, 0x4d, 0x01, 0x01, 0x00, 0x00, 0x04, 0x02, + 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x04, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x04, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0x05, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xfe, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xff, + 0x00, 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, + 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x01, + 0x00, 0x00, 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x03, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x03, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x04, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0x06, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xfd, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, + 0x02, 0x00, 0x00, 0x80, 0x04, 0x00, 0x01, 0x00, + 0x00, 0x4d, 0x01, 0x01, 0x00, 0x00, 0x04, 0x02, + 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x04, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x04, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0x07, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x09, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x09, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x0a, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0x0b, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x09, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x0c, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0x0d, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x09, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x0c, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0c, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0x0e, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x10, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x10, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x11, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0x12, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x10, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x13, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0x14, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x10, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x13, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x13, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0x15, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x17, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x17, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x18, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x18, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0x19, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x17, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x1a, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x1a, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0x1b, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x17, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x1a, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x1a, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0x1c, 0x01, 0x00, + 0x00, 0x04, 0x1d, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x1e, 0x01, 0x00, 0x00, 0x4d, 0x1f, + 0x01, 0x00, 0x00, 0x24, 0x01, 0x00, 0xc8, 0xc4, + 0x28, 0xc0, 0x04, 0x01, 0xa9, 0x02, 0x76, 0x53, + 0x35, 0x08, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x1c, 0x12, 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_kk_size = 3780; + +const uint8_t intl_relative_kk[3780] = { + 0x01, 0x58, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x04, 0x6b, 0x6b, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x15, 0x31, 0x04, 0x38, + 0x04, 0x4b, 0x04, 0x3b, 0x04, 0x93, 0x04, 0x4b, + 0x04, 0x20, 0x00, 0x36, 0x04, 0x4b, 0x04, 0x3b, + 0x04, 0x15, 0x3a, 0x04, 0x35, 0x04, 0x3b, 0x04, + 0x35, 0x04, 0x41, 0x04, 0x56, 0x04, 0x20, 0x00, + 0x36, 0x04, 0x4b, 0x04, 0x3b, 0x04, 0x19, 0x31, + 0x04, 0x4b, 0x04, 0x3b, 0x04, 0x42, 0x04, 0x4b, + 0x04, 0x40, 0x04, 0x93, 0x04, 0x4b, 0x04, 0x20, + 0x00, 0x36, 0x04, 0x4b, 0x04, 0x3b, 0x04, 0x04, + 0x2d, 0x31, 0x21, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x36, 0x04, 0x4b, 0x04, 0x3b, + 0x04, 0x34, 0x04, 0x30, 0x04, 0x3d, 0x04, 0x20, + 0x00, 0x3a, 0x04, 0x35, 0x04, 0x39, 0x04, 0x56, + 0x04, 0x3d, 0x04, 0x06, 0x6f, 0x6e, 0x65, 0x0a, + 0x6f, 0x74, 0x68, 0x65, 0x72, 0x0c, 0x66, 0x75, + 0x74, 0x75, 0x72, 0x65, 0x1b, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x36, 0x04, 0x4b, + 0x04, 0x3b, 0x04, 0x20, 0x00, 0x31, 0x04, 0xb1, + 0x04, 0x40, 0x04, 0x4b, 0x04, 0x3d, 0x04, 0x08, + 0x70, 0x61, 0x73, 0x74, 0x08, 0x79, 0x65, 0x61, + 0x72, 0x19, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x36, 0x04, 0x2e, 0x00, 0x20, 0x00, + 0x3a, 0x04, 0x35, 0x04, 0x39, 0x04, 0x56, 0x04, + 0x3d, 0x04, 0x19, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x36, 0x04, 0x2e, 0x00, 0x20, + 0x00, 0x31, 0x04, 0xb1, 0x04, 0x40, 0x04, 0x4b, + 0x04, 0x3d, 0x04, 0x14, 0x79, 0x65, 0x61, 0x72, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, 0x79, + 0x65, 0x61, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x15, 0x3e, 0x04, 0x41, 0x04, 0x4b, + 0x04, 0x20, 0x00, 0x42, 0x04, 0x3e, 0x04, 0x9b, + 0x04, 0x41, 0x04, 0x30, 0x04, 0x3d, 0x04, 0x1b, + 0x3a, 0x04, 0x35, 0x04, 0x3b, 0x04, 0x35, 0x04, + 0x41, 0x04, 0x56, 0x04, 0x20, 0x00, 0x42, 0x04, + 0x3e, 0x04, 0x9b, 0x04, 0x41, 0x04, 0x30, 0x04, + 0x3d, 0x04, 0x19, 0xe9, 0x04, 0x42, 0x04, 0x3a, + 0x04, 0x35, 0x04, 0x3d, 0x04, 0x20, 0x00, 0x42, + 0x04, 0x3e, 0x04, 0x9b, 0x04, 0x41, 0x04, 0x30, + 0x04, 0x3d, 0x04, 0x27, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x42, 0x04, 0x3e, 0x04, + 0x9b, 0x04, 0x41, 0x04, 0x30, 0x04, 0x3d, 0x04, + 0x3d, 0x04, 0x30, 0x04, 0x3d, 0x04, 0x20, 0x00, + 0x3a, 0x04, 0x35, 0x04, 0x39, 0x04, 0x56, 0x04, + 0x3d, 0x04, 0x21, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x42, 0x04, 0x3e, 0x04, 0x9b, + 0x04, 0x41, 0x04, 0x30, 0x04, 0x3d, 0x04, 0x20, + 0x00, 0x31, 0x04, 0xb1, 0x04, 0x40, 0x04, 0x4b, + 0x04, 0x3d, 0x04, 0x0e, 0x71, 0x75, 0x61, 0x72, + 0x74, 0x65, 0x72, 0x1d, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x42, 0x04, 0x9b, 0x04, + 0x41, 0x04, 0x2e, 0x00, 0x20, 0x00, 0x3a, 0x04, + 0x35, 0x04, 0x39, 0x04, 0x56, 0x04, 0x3d, 0x04, + 0x1d, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x42, 0x04, 0x9b, 0x04, 0x41, 0x04, 0x2e, + 0x00, 0x20, 0x00, 0x31, 0x04, 0xb1, 0x04, 0x40, + 0x04, 0x4b, 0x04, 0x3d, 0x04, 0x1a, 0x71, 0x75, + 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x1c, 0x71, 0x75, 0x61, 0x72, + 0x74, 0x65, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x0d, 0x3e, 0x04, 0x41, 0x04, 0x4b, + 0x04, 0x20, 0x00, 0x30, 0x04, 0x39, 0x04, 0x13, + 0x3a, 0x04, 0x35, 0x04, 0x3b, 0x04, 0x35, 0x04, + 0x41, 0x04, 0x56, 0x04, 0x20, 0x00, 0x30, 0x04, + 0x39, 0x04, 0x11, 0xe9, 0x04, 0x42, 0x04, 0x3a, + 0x04, 0x35, 0x04, 0x3d, 0x04, 0x20, 0x00, 0x30, + 0x04, 0x39, 0x04, 0x1f, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x30, 0x04, 0x39, 0x04, + 0x34, 0x04, 0x30, 0x04, 0x3d, 0x04, 0x20, 0x00, + 0x3a, 0x04, 0x35, 0x04, 0x39, 0x04, 0x56, 0x04, + 0x3d, 0x04, 0x19, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x30, 0x04, 0x39, 0x04, 0x20, + 0x00, 0x31, 0x04, 0xb1, 0x04, 0x40, 0x04, 0x4b, + 0x04, 0x3d, 0x04, 0x0a, 0x6d, 0x6f, 0x6e, 0x74, + 0x68, 0x16, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x18, 0x6d, 0x6f, + 0x6e, 0x74, 0x68, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x11, 0x3e, 0x04, 0x41, 0x04, 0x4b, + 0x04, 0x20, 0x00, 0x30, 0x04, 0x3f, 0x04, 0x42, + 0x04, 0x30, 0x04, 0x17, 0x3a, 0x04, 0x35, 0x04, + 0x3b, 0x04, 0x35, 0x04, 0x41, 0x04, 0x56, 0x04, + 0x20, 0x00, 0x30, 0x04, 0x3f, 0x04, 0x42, 0x04, + 0x30, 0x04, 0x15, 0xe9, 0x04, 0x42, 0x04, 0x3a, + 0x04, 0x35, 0x04, 0x3d, 0x04, 0x20, 0x00, 0x30, + 0x04, 0x3f, 0x04, 0x42, 0x04, 0x30, 0x04, 0x23, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x30, 0x04, 0x3f, 0x04, 0x42, 0x04, 0x30, 0x04, + 0x34, 0x04, 0x30, 0x04, 0x3d, 0x04, 0x20, 0x00, + 0x3a, 0x04, 0x35, 0x04, 0x39, 0x04, 0x56, 0x04, + 0x3d, 0x04, 0x1d, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x30, 0x04, 0x3f, 0x04, 0x42, + 0x04, 0x30, 0x04, 0x20, 0x00, 0x31, 0x04, 0xb1, + 0x04, 0x40, 0x04, 0x4b, 0x04, 0x3d, 0x04, 0x08, + 0x77, 0x65, 0x65, 0x6b, 0x1b, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x30, 0x04, 0x3f, + 0x04, 0x2e, 0x00, 0x20, 0x00, 0x3a, 0x04, 0x35, + 0x04, 0x39, 0x04, 0x56, 0x04, 0x3d, 0x04, 0x1b, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x30, 0x04, 0x3f, 0x04, 0x2e, 0x00, 0x20, 0x00, + 0x31, 0x04, 0xb1, 0x04, 0x40, 0x04, 0x4b, 0x04, + 0x3d, 0x04, 0x14, 0x77, 0x65, 0x65, 0x6b, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, 0x77, 0x65, + 0x65, 0x6b, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x0b, 0x31, 0x04, 0xaf, 0x04, 0x33, 0x04, + 0x56, 0x04, 0x3d, 0x04, 0x0b, 0x35, 0x04, 0x40, + 0x04, 0x42, 0x04, 0x35, 0x04, 0xa3, 0x04, 0x13, + 0x31, 0x04, 0xaf, 0x04, 0x40, 0x04, 0x41, 0x04, + 0x56, 0x04, 0x33, 0x04, 0xaf, 0x04, 0x3d, 0x04, + 0x56, 0x04, 0x13, 0x30, 0x04, 0x3b, 0x04, 0x34, + 0x04, 0x4b, 0x04, 0xa3, 0x04, 0x33, 0x04, 0xaf, + 0x04, 0x3d, 0x04, 0x56, 0x04, 0x04, 0x2d, 0x32, + 0x09, 0x3a, 0x04, 0x35, 0x04, 0x48, 0x04, 0x35, + 0x04, 0x21, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x3a, 0x04, 0xaf, 0x04, 0x3d, 0x04, + 0x3d, 0x04, 0x35, 0x04, 0x3d, 0x04, 0x20, 0x00, + 0x3a, 0x04, 0x35, 0x04, 0x39, 0x04, 0x56, 0x04, + 0x3d, 0x04, 0x1b, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x3a, 0x04, 0xaf, 0x04, 0x3d, + 0x04, 0x20, 0x00, 0x31, 0x04, 0xb1, 0x04, 0x40, + 0x04, 0x4b, 0x04, 0x3d, 0x04, 0x06, 0x64, 0x61, + 0x79, 0x19, 0x30, 0x04, 0x3b, 0x04, 0x34, 0x04, + 0x4b, 0x04, 0xa3, 0x04, 0x93, 0x04, 0x4b, 0x04, + 0x20, 0x00, 0x3a, 0x04, 0xaf, 0x04, 0x3d, 0x04, + 0x56, 0x04, 0x12, 0x64, 0x61, 0x79, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x14, 0x64, 0x61, 0x79, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x13, + 0x3e, 0x04, 0x41, 0x04, 0x4b, 0x04, 0x20, 0x00, + 0x41, 0x04, 0x30, 0x04, 0x93, 0x04, 0x30, 0x04, + 0x42, 0x04, 0x25, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x41, 0x04, 0x30, 0x04, 0x93, + 0x04, 0x30, 0x04, 0x42, 0x04, 0x42, 0x04, 0x30, + 0x04, 0x3d, 0x04, 0x20, 0x00, 0x3a, 0x04, 0x35, + 0x04, 0x39, 0x04, 0x56, 0x04, 0x3d, 0x04, 0x1f, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x41, 0x04, 0x30, 0x04, 0x93, 0x04, 0x30, 0x04, + 0x42, 0x04, 0x20, 0x00, 0x31, 0x04, 0xb1, 0x04, + 0x40, 0x04, 0x4b, 0x04, 0x3d, 0x04, 0x08, 0x68, + 0x6f, 0x75, 0x72, 0x1d, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x41, 0x04, 0x30, 0x04, + 0x93, 0x04, 0x2e, 0x00, 0x20, 0x00, 0x3a, 0x04, + 0x35, 0x04, 0x39, 0x04, 0x56, 0x04, 0x3d, 0x04, + 0x1d, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x41, 0x04, 0x30, 0x04, 0x93, 0x04, 0x2e, + 0x00, 0x20, 0x00, 0x31, 0x04, 0xb1, 0x04, 0x40, + 0x04, 0x4b, 0x04, 0x3d, 0x04, 0x14, 0x68, 0x6f, + 0x75, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x16, 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x13, 0x3e, 0x04, 0x41, + 0x04, 0x4b, 0x04, 0x20, 0x00, 0x3c, 0x04, 0x38, + 0x04, 0x3d, 0x04, 0x43, 0x04, 0x42, 0x04, 0x25, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x3c, 0x04, 0x38, 0x04, 0x3d, 0x04, 0x43, 0x04, + 0x42, 0x04, 0x42, 0x04, 0x30, 0x04, 0x3d, 0x04, + 0x20, 0x00, 0x3a, 0x04, 0x35, 0x04, 0x39, 0x04, + 0x56, 0x04, 0x3d, 0x04, 0x1f, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3c, 0x04, 0x38, + 0x04, 0x3d, 0x04, 0x43, 0x04, 0x42, 0x04, 0x20, + 0x00, 0x31, 0x04, 0xb1, 0x04, 0x40, 0x04, 0x4b, + 0x04, 0x3d, 0x04, 0x0c, 0x6d, 0x69, 0x6e, 0x75, + 0x74, 0x65, 0x1d, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x3c, 0x04, 0x38, 0x04, 0x3d, + 0x04, 0x2e, 0x00, 0x20, 0x00, 0x3a, 0x04, 0x35, + 0x04, 0x39, 0x04, 0x56, 0x04, 0x3d, 0x04, 0x1d, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x3c, 0x04, 0x38, 0x04, 0x3d, 0x04, 0x2e, 0x00, + 0x20, 0x00, 0x31, 0x04, 0xb1, 0x04, 0x40, 0x04, + 0x4b, 0x04, 0x3d, 0x04, 0x18, 0x6d, 0x69, 0x6e, + 0x75, 0x74, 0x65, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x1a, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0b, + 0x9b, 0x04, 0x30, 0x04, 0x37, 0x04, 0x56, 0x04, + 0x40, 0x04, 0x27, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x41, 0x04, 0x35, 0x04, 0x3a, + 0x04, 0x43, 0x04, 0x3d, 0x04, 0x34, 0x04, 0x42, + 0x04, 0x30, 0x04, 0x3d, 0x04, 0x20, 0x00, 0x3a, + 0x04, 0x35, 0x04, 0x39, 0x04, 0x56, 0x04, 0x3d, + 0x04, 0x21, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x41, 0x04, 0x35, 0x04, 0x3a, 0x04, + 0x43, 0x04, 0x3d, 0x04, 0x34, 0x04, 0x20, 0x00, + 0x31, 0x04, 0xb1, 0x04, 0x40, 0x04, 0x4b, 0x04, + 0x3d, 0x04, 0x0c, 0x73, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x1d, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x41, 0x04, 0x35, 0x04, 0x3a, 0x04, + 0x2e, 0x00, 0x20, 0x00, 0x3a, 0x04, 0x35, 0x04, + 0x39, 0x04, 0x56, 0x04, 0x3d, 0x04, 0x1d, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x41, + 0x04, 0x35, 0x04, 0x3a, 0x04, 0x2e, 0x00, 0x20, + 0x00, 0x31, 0x04, 0xb1, 0x04, 0x40, 0x04, 0x4b, + 0x04, 0x3d, 0x04, 0x18, 0x73, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x1a, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x08, 0x6c, + 0x61, 0x74, 0x6e, 0x04, 0x6e, 0x75, 0x08, 0x64, + 0x61, 0x74, 0x61, 0x70, 0x6e, 0x6f, 0x64, 0x65, + 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, + 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2d, 0x72, 0x65, + 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x2d, 0x74, + 0x69, 0x6d, 0x65, 0x2d, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x6b, + 0x6b, 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, + 0x9e, 0x01, 0x00, 0x01, 0x00, 0x07, 0x00, 0x00, + 0xa2, 0x0e, 0x01, 0xa0, 0x01, 0x00, 0x00, 0x00, + 0x06, 0xc8, 0x04, 0xd0, 0x00, 0x00, 0x00, 0x39, + 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, 0x00, 0x00, + 0x00, 0xaa, 0x6a, 0x0d, 0x07, 0x00, 0x00, 0x39, + 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, 0x00, 0x00, + 0x00, 0x43, 0xd0, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd3, 0x00, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0xd5, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe1, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xe1, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xe2, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe1, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xe1, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe4, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe7, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0xea, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0xec, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xed, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xee, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xef, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xf0, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xf1, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf2, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf2, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xf3, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xee, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xef, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xf0, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xf1, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf2, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf2, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xf4, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xee, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xef, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xf0, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xf1, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf2, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf2, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xf5, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xf6, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xf7, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xf8, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xf9, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfa, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xfa, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xfb, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xfc, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xfc, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfd, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xfe, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xfc, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xff, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x00, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x02, 0x01, 0x00, 0x00, + 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, 0x03, 0x01, + 0x00, 0x00, 0x4d, 0x04, 0x01, 0x00, 0x00, 0x04, + 0x05, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x07, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x07, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x08, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x00, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x01, 0x01, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0x02, 0x01, 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, + 0x80, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0x04, + 0x01, 0x00, 0x00, 0x04, 0x05, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x06, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x0a, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x00, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x02, 0x01, 0x00, 0x00, + 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, 0x09, 0x01, + 0x00, 0x00, 0x4d, 0x04, 0x01, 0x00, 0x00, 0x04, + 0x05, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x07, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x07, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x0b, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x0c, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x0d, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x0f, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x11, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0x12, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x10, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x11, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x11, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x13, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x14, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x17, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x18, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x18, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x19, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0x1a, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x18, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x18, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x19, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x19, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x1b, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x1c, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x1d, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x1f, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x20, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x20, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x21, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0x22, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x20, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x20, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x21, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x21, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x23, 0x01, + 0x00, 0x00, 0x04, 0x24, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x25, 0x01, 0x00, 0x00, 0x4d, + 0x26, 0x01, 0x00, 0x00, 0x24, 0x01, 0x00, 0xc8, + 0xc4, 0x28, 0xce, 0x04, 0x01, 0x9d, 0x02, 0x76, + 0x53, 0x35, 0x08, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x1c, + 0x12, 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_km_size = 3113; + +const uint8_t intl_relative_km[3113] = { + 0x01, 0x4e, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x04, 0x6b, 0x6d, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x13, 0x86, 0x17, 0xd2, + 0x17, 0x93, 0x17, 0xb6, 0x17, 0xc6, 0x17, 0x0b, + 0x20, 0x93, 0x17, 0xc1, 0x17, 0xc7, 0x17, 0x17, + 0x86, 0x17, 0xd2, 0x17, 0x93, 0x17, 0xb6, 0x17, + 0xc6, 0x17, 0x0b, 0x20, 0x80, 0x17, 0xd2, 0x17, + 0x9a, 0x17, 0xc4, 0x17, 0x99, 0x17, 0x13, 0x86, + 0x17, 0xd2, 0x17, 0x93, 0x17, 0xb6, 0x17, 0xc6, + 0x17, 0x0b, 0x20, 0x98, 0x17, 0xbb, 0x17, 0x93, + 0x17, 0x04, 0x2d, 0x31, 0x19, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x86, 0x17, 0xd2, + 0x17, 0x93, 0x17, 0xb6, 0x17, 0xc6, 0x17, 0x91, + 0x17, 0xc0, 0x17, 0x8f, 0x17, 0x0a, 0x6f, 0x74, + 0x68, 0x65, 0x72, 0x0c, 0x66, 0x75, 0x74, 0x75, + 0x72, 0x65, 0x1b, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x86, 0x17, 0xd2, 0x17, 0x93, + 0x17, 0xb6, 0x17, 0xc6, 0x17, 0x0b, 0x20, 0x98, + 0x17, 0xbb, 0x17, 0x93, 0x17, 0x08, 0x70, 0x61, + 0x73, 0x74, 0x08, 0x79, 0x65, 0x61, 0x72, 0x14, + 0x79, 0x65, 0x61, 0x72, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x16, 0x79, 0x65, 0x61, 0x72, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x17, 0x8f, + 0x17, 0xd2, 0x17, 0x9a, 0x17, 0xb8, 0x17, 0x98, + 0x17, 0xb6, 0x17, 0x9f, 0x17, 0x0b, 0x20, 0x93, + 0x17, 0xc1, 0x17, 0xc7, 0x17, 0x1b, 0x8f, 0x17, + 0xd2, 0x17, 0x9a, 0x17, 0xb8, 0x17, 0x98, 0x17, + 0xb6, 0x17, 0x9f, 0x17, 0x0b, 0x20, 0x80, 0x17, + 0xd2, 0x17, 0x9a, 0x17, 0xc4, 0x17, 0x99, 0x17, + 0x17, 0x8f, 0x17, 0xd2, 0x17, 0x9a, 0x17, 0xb8, + 0x17, 0x98, 0x17, 0xb6, 0x17, 0x9f, 0x17, 0x0b, + 0x20, 0x98, 0x17, 0xbb, 0x17, 0x93, 0x17, 0x1d, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x8f, 0x17, 0xd2, 0x17, 0x9a, 0x17, 0xb8, 0x17, + 0x98, 0x17, 0xb6, 0x17, 0x9f, 0x17, 0x91, 0x17, + 0xc0, 0x17, 0x8f, 0x17, 0x1f, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x8f, 0x17, 0xd2, + 0x17, 0x9a, 0x17, 0xb8, 0x17, 0x98, 0x17, 0xb6, + 0x17, 0x9f, 0x17, 0x0b, 0x20, 0x98, 0x17, 0xbb, + 0x17, 0x93, 0x17, 0x0e, 0x71, 0x75, 0x61, 0x72, + 0x74, 0x65, 0x72, 0x1a, 0x71, 0x75, 0x61, 0x72, + 0x74, 0x65, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x1c, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, + 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x0d, 0x81, 0x17, 0xc2, 0x17, 0x0b, 0x20, 0x93, + 0x17, 0xc1, 0x17, 0xc7, 0x17, 0x11, 0x81, 0x17, + 0xc2, 0x17, 0x0b, 0x20, 0x80, 0x17, 0xd2, 0x17, + 0x9a, 0x17, 0xc4, 0x17, 0x99, 0x17, 0x0d, 0x81, + 0x17, 0xc2, 0x17, 0x0b, 0x20, 0x98, 0x17, 0xbb, + 0x17, 0x93, 0x17, 0x13, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x81, 0x17, 0xc2, 0x17, + 0x91, 0x17, 0xc0, 0x17, 0x8f, 0x17, 0x13, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x81, + 0x17, 0xc2, 0x17, 0x98, 0x17, 0xbb, 0x17, 0x93, + 0x17, 0x0a, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x16, + 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x18, 0x6d, 0x6f, 0x6e, 0x74, + 0x68, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x17, 0x9f, 0x17, 0x94, 0x17, 0xd2, 0x17, 0x8a, + 0x17, 0xb6, 0x17, 0xa0, 0x17, 0xcd, 0x17, 0x0b, + 0x20, 0x93, 0x17, 0xc1, 0x17, 0xc7, 0x17, 0x1b, + 0x9f, 0x17, 0x94, 0x17, 0xd2, 0x17, 0x8a, 0x17, + 0xb6, 0x17, 0xa0, 0x17, 0xcd, 0x17, 0x0b, 0x20, + 0x80, 0x17, 0xd2, 0x17, 0x9a, 0x17, 0xc4, 0x17, + 0x99, 0x17, 0x17, 0x9f, 0x17, 0x94, 0x17, 0xd2, + 0x17, 0x8a, 0x17, 0xb6, 0x17, 0xa0, 0x17, 0xcd, + 0x17, 0x0b, 0x20, 0x98, 0x17, 0xbb, 0x17, 0x93, + 0x17, 0x1d, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x9f, 0x17, 0x94, 0x17, 0xd2, 0x17, + 0x8a, 0x17, 0xb6, 0x17, 0xa0, 0x17, 0xcd, 0x17, + 0x91, 0x17, 0xc0, 0x17, 0x8f, 0x17, 0x1f, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x9f, + 0x17, 0x94, 0x17, 0xd2, 0x17, 0x8a, 0x17, 0xb6, + 0x17, 0xa0, 0x17, 0xcd, 0x17, 0x0b, 0x20, 0x98, + 0x17, 0xbb, 0x17, 0x93, 0x17, 0x08, 0x77, 0x65, + 0x65, 0x6b, 0x14, 0x77, 0x65, 0x65, 0x6b, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, 0x77, 0x65, + 0x65, 0x6b, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x11, 0x90, 0x17, 0xd2, 0x17, 0x84, 0x17, + 0xc3, 0x17, 0x0b, 0x20, 0x93, 0x17, 0xc1, 0x17, + 0xc7, 0x17, 0x15, 0x90, 0x17, 0xd2, 0x17, 0x84, + 0x17, 0xc3, 0x17, 0x0b, 0x20, 0x9f, 0x17, 0xd2, + 0x17, 0xa2, 0x17, 0xc2, 0x17, 0x80, 0x17, 0x15, + 0x0b, 0x20, 0x81, 0x17, 0xb6, 0x17, 0x93, 0x17, + 0x0b, 0x20, 0x9f, 0x17, 0xd2, 0x17, 0xa2, 0x17, + 0xc2, 0x17, 0x80, 0x17, 0x17, 0x98, 0x17, 0xd2, + 0x17, 0x9f, 0x17, 0xb7, 0x17, 0x9b, 0x17, 0x0b, + 0x20, 0x98, 0x17, 0xc9, 0x17, 0xd2, 0x17, 0x84, + 0x17, 0xc3, 0x17, 0x04, 0x2d, 0x32, 0x11, 0x98, + 0x17, 0xd2, 0x17, 0x9f, 0x17, 0xb7, 0x17, 0x9b, + 0x17, 0x98, 0x17, 0xb7, 0x17, 0x89, 0x17, 0x17, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x90, 0x17, 0xd2, 0x17, 0x84, 0x17, 0xc3, 0x17, + 0x91, 0x17, 0xc0, 0x17, 0x8f, 0x17, 0x19, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x90, + 0x17, 0xd2, 0x17, 0x84, 0x17, 0xc3, 0x17, 0x0b, + 0x20, 0x98, 0x17, 0xbb, 0x17, 0x93, 0x17, 0x06, + 0x64, 0x61, 0x79, 0x13, 0x90, 0x17, 0xd2, 0x17, + 0x84, 0x17, 0xc3, 0x17, 0x9f, 0x17, 0xd2, 0x17, + 0xa2, 0x17, 0xc2, 0x17, 0x80, 0x17, 0x1b, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x90, + 0x17, 0xd2, 0x17, 0x84, 0x17, 0xc3, 0x17, 0x0b, + 0x20, 0x0b, 0x20, 0x98, 0x17, 0xbb, 0x17, 0x93, + 0x17, 0x12, 0x64, 0x61, 0x79, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x14, 0x64, 0x61, 0x79, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0f, 0x98, + 0x17, 0xc9, 0x17, 0xc4, 0x17, 0x84, 0x17, 0x93, + 0x17, 0xc1, 0x17, 0xc7, 0x17, 0x2d, 0x80, 0x17, + 0xd2, 0x17, 0x93, 0x17, 0xbb, 0x17, 0x84, 0x17, + 0x0b, 0x20, 0x9a, 0x17, 0x99, 0x17, 0xc8, 0x17, + 0x0b, 0x20, 0x96, 0x17, 0xc1, 0x17, 0x9b, 0x17, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x98, 0x17, 0xc9, 0x17, 0xc4, 0x17, + 0x84, 0x17, 0x19, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x98, 0x17, 0xc9, 0x17, 0xc4, + 0x17, 0x84, 0x17, 0x0b, 0x20, 0x98, 0x17, 0xbb, + 0x17, 0x93, 0x17, 0x08, 0x68, 0x6f, 0x75, 0x72, + 0x17, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x98, 0x17, 0xc9, 0x17, 0xc4, 0x17, 0x84, + 0x17, 0x91, 0x17, 0xc0, 0x17, 0x8f, 0x17, 0x14, + 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x16, 0x68, 0x6f, 0x75, 0x72, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0f, 0x93, + 0x17, 0xb6, 0x17, 0x91, 0x17, 0xb8, 0x17, 0x93, + 0x17, 0xc1, 0x17, 0xc7, 0x17, 0x17, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x93, 0x17, + 0xb6, 0x17, 0x91, 0x17, 0xb8, 0x17, 0x91, 0x17, + 0xc0, 0x17, 0x8f, 0x17, 0x19, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x93, 0x17, 0xb6, + 0x17, 0x91, 0x17, 0xb8, 0x17, 0x0b, 0x20, 0x98, + 0x17, 0xbb, 0x17, 0x93, 0x17, 0x0c, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x65, 0x1b, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x93, 0x17, 0xb6, + 0x17, 0x91, 0x17, 0xb8, 0x17, 0x0b, 0x20, 0x0b, + 0x20, 0x98, 0x17, 0xbb, 0x17, 0x93, 0x17, 0x18, + 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x6d, 0x69, 0x6e, + 0x75, 0x74, 0x65, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x09, 0xa5, 0x17, 0xa1, 0x17, 0xbc, + 0x17, 0x9c, 0x17, 0x1b, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x9c, 0x17, 0xb7, 0x17, + 0x93, 0x17, 0xb6, 0x17, 0x91, 0x17, 0xb8, 0x17, + 0x91, 0x17, 0xc0, 0x17, 0x8f, 0x17, 0x1d, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x9c, + 0x17, 0xb7, 0x17, 0x93, 0x17, 0xb6, 0x17, 0x91, + 0x17, 0xb8, 0x17, 0x0b, 0x20, 0x98, 0x17, 0xbb, + 0x17, 0x93, 0x17, 0x0c, 0x73, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x18, 0x73, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1a, + 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x08, 0x6c, 0x61, + 0x74, 0x6e, 0x04, 0x6e, 0x75, 0x08, 0x64, 0x61, + 0x74, 0x61, 0x70, 0x6e, 0x6f, 0x64, 0x65, 0x5f, + 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, + 0x69, 0x6e, 0x74, 0x6c, 0x2d, 0x72, 0x65, 0x6c, + 0x61, 0x74, 0x69, 0x76, 0x65, 0x2d, 0x74, 0x69, + 0x6d, 0x65, 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, + 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x6b, 0x6d, + 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, + 0x01, 0x00, 0x01, 0x00, 0x07, 0x00, 0x00, 0xf6, + 0x0b, 0x01, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x06, + 0xc8, 0x04, 0xd0, 0x00, 0x00, 0x00, 0x39, 0xd1, + 0x00, 0x00, 0x00, 0x42, 0xd2, 0x00, 0x00, 0x00, + 0xaa, 0x6a, 0xe1, 0x05, 0x00, 0x00, 0x39, 0xd1, + 0x00, 0x00, 0x00, 0x42, 0xd2, 0x00, 0x00, 0x00, + 0x43, 0xd0, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd3, + 0x00, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xd7, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd5, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xd7, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe1, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xe2, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xe3, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe4, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe5, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe1, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xe2, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xe3, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe1, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xe2, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xe3, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe4, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe5, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xee, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe9, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xec, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xed, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xef, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xf0, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf1, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf4, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf5, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xf6, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xf2, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xf3, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xf7, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf1, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf4, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf5, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xf8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xfa, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xfb, + 0x00, 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, + 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xfd, 0x00, + 0x00, 0x00, 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xff, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x00, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0x02, 0x01, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xfb, + 0x00, 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, + 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xfd, 0x00, + 0x00, 0x00, 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xff, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x03, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x04, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0x02, 0x01, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xfb, + 0x00, 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, + 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xfd, 0x00, + 0x00, 0x00, 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xff, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x03, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x05, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x07, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x08, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x09, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x0a, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x08, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0x0b, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0x0c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x0d, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x0b, 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0x10, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x0e, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x11, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x12, + 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x0e, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x11, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x13, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x17, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0x18, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0x19, 0x01, 0x00, 0x00, 0x04, 0x1a, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x1b, 0x01, + 0x00, 0x00, 0x4d, 0x1c, 0x01, 0x00, 0x00, 0x24, + 0x01, 0x00, 0xc8, 0xc4, 0x28, 0xba, 0x04, 0x01, + 0xff, 0x01, 0x76, 0x53, 0x35, 0x08, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, + 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, + 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, + 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x1c, 0x08, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x1c, 0x08, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x1c, 0x08, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x1c, 0x08, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x1c, 0x08, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x1c, + 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x1c, + 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x1c, + 0x08, 0x35, 0x1c, 0x1c, 0x1c, 0x12, 0x1c, 0x1c, + 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_kn_size = 4264; + +const uint8_t intl_relative_kn[4264] = { + 0x01, 0x60, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x04, 0x6b, 0x6e, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x0d, 0x88, 0x0c, 0x20, + 0x00, 0xb5, 0x0c, 0xb0, 0x0c, 0xcd, 0x0c, 0xb7, + 0x0c, 0x17, 0xae, 0x0c, 0xc1, 0x0c, 0x82, 0x0c, + 0xa6, 0x0c, 0xbf, 0x0c, 0xa8, 0x0c, 0x20, 0x00, + 0xb5, 0x0c, 0xb0, 0x0c, 0xcd, 0x0c, 0xb7, 0x0c, + 0x17, 0xb9, 0x0c, 0xbf, 0x0c, 0x82, 0x0c, 0xa6, + 0x0c, 0xbf, 0x0c, 0xa8, 0x0c, 0x20, 0x00, 0xb5, + 0x0c, 0xb0, 0x0c, 0xcd, 0x0c, 0xb7, 0x0c, 0x04, + 0x2d, 0x31, 0x1b, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0xb5, 0x0c, 0xb0, 0x0c, 0xcd, + 0x0c, 0xb7, 0x0c, 0xa6, 0x0c, 0xb2, 0x0c, 0xcd, + 0x0c, 0xb2, 0x0c, 0xbf, 0x0c, 0x06, 0x6f, 0x6e, + 0x65, 0x1d, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0xb5, 0x0c, 0xb0, 0x0c, 0xcd, 0x0c, + 0xb7, 0x0c, 0x97, 0x0c, 0xb3, 0x0c, 0xb2, 0x0c, + 0xcd, 0x0c, 0xb2, 0x0c, 0xbf, 0x0c, 0x0a, 0x6f, + 0x74, 0x68, 0x65, 0x72, 0x0c, 0x66, 0x75, 0x74, + 0x75, 0x72, 0x65, 0x1f, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0xb5, 0x0c, 0xb0, 0x0c, + 0xcd, 0x0c, 0xb7, 0x0c, 0xa6, 0x0c, 0x20, 0x00, + 0xb9, 0x0c, 0xbf, 0x0c, 0x82, 0x0c, 0xa6, 0x0c, + 0xc6, 0x0c, 0x21, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0xb5, 0x0c, 0xb0, 0x0c, 0xcd, + 0x0c, 0xb7, 0x0c, 0x97, 0x0c, 0xb3, 0x0c, 0x20, + 0x00, 0xb9, 0x0c, 0xbf, 0x0c, 0x82, 0x0c, 0xa6, + 0x0c, 0xc6, 0x0c, 0x08, 0x70, 0x61, 0x73, 0x74, + 0x08, 0x79, 0x65, 0x61, 0x72, 0x13, 0x95, 0x0c, + 0xb3, 0x0c, 0xc6, 0x0c, 0xa6, 0x0c, 0x20, 0x00, + 0xb5, 0x0c, 0xb0, 0x0c, 0xcd, 0x0c, 0xb7, 0x0c, + 0x14, 0x79, 0x65, 0x61, 0x72, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x16, 0x79, 0x65, 0x61, 0x72, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x17, + 0x88, 0x0c, 0x20, 0x00, 0xa4, 0x0c, 0xcd, 0x0c, + 0xb0, 0x0c, 0xc8, 0x0c, 0xae, 0x0c, 0xbe, 0x0c, + 0xb8, 0x0c, 0xbf, 0x0c, 0x95, 0x0c, 0x21, 0xae, + 0x0c, 0xc1, 0x0c, 0x82, 0x0c, 0xa6, 0x0c, 0xbf, + 0x0c, 0xa8, 0x0c, 0x20, 0x00, 0xa4, 0x0c, 0xcd, + 0x0c, 0xb0, 0x0c, 0xc8, 0x0c, 0xae, 0x0c, 0xbe, + 0x0c, 0xb8, 0x0c, 0xbf, 0x0c, 0x95, 0x0c, 0x21, + 0xb9, 0x0c, 0xbf, 0x0c, 0x82, 0x0c, 0xa6, 0x0c, + 0xbf, 0x0c, 0xa8, 0x0c, 0x20, 0x00, 0xa4, 0x0c, + 0xcd, 0x0c, 0xb0, 0x0c, 0xc8, 0x0c, 0xae, 0x0c, + 0xbe, 0x0c, 0xb8, 0x0c, 0xbf, 0x0c, 0x95, 0x0c, + 0x25, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0xa4, 0x0c, 0xcd, 0x0c, 0xb0, 0x0c, 0xc8, + 0x0c, 0xae, 0x0c, 0xbe, 0x0c, 0xb8, 0x0c, 0xbf, + 0x0c, 0x95, 0x0c, 0xa6, 0x0c, 0xb2, 0x0c, 0xcd, + 0x0c, 0xb2, 0x0c, 0xbf, 0x0c, 0x27, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xa4, 0x0c, + 0xcd, 0x0c, 0xb0, 0x0c, 0xc8, 0x0c, 0xae, 0x0c, + 0xbe, 0x0c, 0xb8, 0x0c, 0xbf, 0x0c, 0x95, 0x0c, + 0x97, 0x0c, 0xb3, 0x0c, 0xb2, 0x0c, 0xcd, 0x0c, + 0xb2, 0x0c, 0xbf, 0x0c, 0x29, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0xa4, 0x0c, 0xcd, + 0x0c, 0xb0, 0x0c, 0xc8, 0x0c, 0xae, 0x0c, 0xbe, + 0x0c, 0xb8, 0x0c, 0xbf, 0x0c, 0x95, 0x0c, 0xa6, + 0x0c, 0x20, 0x00, 0xb9, 0x0c, 0xbf, 0x0c, 0x82, + 0x0c, 0xa6, 0x0c, 0xc6, 0x0c, 0x2b, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xa4, 0x0c, + 0xcd, 0x0c, 0xb0, 0x0c, 0xc8, 0x0c, 0xae, 0x0c, + 0xbe, 0x0c, 0xb8, 0x0c, 0xbf, 0x0c, 0x95, 0x0c, + 0x97, 0x0c, 0xb3, 0x0c, 0x20, 0x00, 0xb9, 0x0c, + 0xbf, 0x0c, 0x82, 0x0c, 0xa6, 0x0c, 0xc6, 0x0c, + 0x0e, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, + 0x1d, 0x95, 0x0c, 0xb3, 0x0c, 0xc6, 0x0c, 0xa6, + 0x0c, 0x20, 0x00, 0xa4, 0x0c, 0xcd, 0x0c, 0xb0, + 0x0c, 0xc8, 0x0c, 0xae, 0x0c, 0xbe, 0x0c, 0xb8, + 0x0c, 0xbf, 0x0c, 0x95, 0x0c, 0x23, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xa4, 0x0c, + 0xcd, 0x0c, 0xb0, 0x0c, 0xc8, 0x0c, 0x2e, 0x00, + 0xae, 0x0c, 0xbe, 0x0c, 0x2e, 0x00, 0xa6, 0x0c, + 0xb2, 0x0c, 0xcd, 0x0c, 0xb2, 0x0c, 0xbf, 0x0c, + 0x25, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0xa4, 0x0c, 0xcd, 0x0c, 0xb0, 0x0c, 0xc8, + 0x0c, 0x2e, 0x00, 0xae, 0x0c, 0xbe, 0x0c, 0x2e, + 0x00, 0x20, 0x00, 0xb9, 0x0c, 0xbf, 0x0c, 0x82, + 0x0c, 0xa6, 0x0c, 0xc6, 0x0c, 0x1a, 0x71, 0x75, + 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x1c, 0x71, 0x75, 0x61, 0x72, + 0x74, 0x65, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x11, 0x88, 0x0c, 0x20, 0x00, 0xa4, + 0x0c, 0xbf, 0x0c, 0x82, 0x0c, 0x97, 0x0c, 0xb3, + 0x0c, 0xc1, 0x0c, 0x1b, 0xae, 0x0c, 0xc1, 0x0c, + 0x82, 0x0c, 0xa6, 0x0c, 0xbf, 0x0c, 0xa8, 0x0c, + 0x20, 0x00, 0xa4, 0x0c, 0xbf, 0x0c, 0x82, 0x0c, + 0x97, 0x0c, 0xb3, 0x0c, 0xc1, 0x0c, 0x17, 0x95, + 0x0c, 0xb3, 0x0c, 0xc6, 0x0c, 0xa6, 0x0c, 0x20, + 0x00, 0xa4, 0x0c, 0xbf, 0x0c, 0x82, 0x0c, 0x97, + 0x0c, 0xb3, 0x0c, 0xc1, 0x0c, 0x1b, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xa4, 0x0c, + 0xbf, 0x0c, 0x82, 0x0c, 0x97, 0x0c, 0xb3, 0x0c, + 0xb2, 0x0c, 0xcd, 0x0c, 0xb2, 0x0c, 0xbf, 0x0c, + 0x21, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0xa4, 0x0c, 0xbf, 0x0c, 0x82, 0x0c, 0x97, + 0x0c, 0xb3, 0x0c, 0xc1, 0x0c, 0x97, 0x0c, 0xb3, + 0x0c, 0xb2, 0x0c, 0xcd, 0x0c, 0xb2, 0x0c, 0xbf, + 0x0c, 0x1f, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0xa4, 0x0c, 0xbf, 0x0c, 0x82, 0x0c, + 0x97, 0x0c, 0xb3, 0x0c, 0x20, 0x00, 0xb9, 0x0c, + 0xbf, 0x0c, 0x82, 0x0c, 0xa6, 0x0c, 0xc6, 0x0c, + 0x25, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0xa4, 0x0c, 0xbf, 0x0c, 0x82, 0x0c, 0x97, + 0x0c, 0xb3, 0x0c, 0xc1, 0x0c, 0x97, 0x0c, 0xb3, + 0x0c, 0x20, 0x00, 0xb9, 0x0c, 0xbf, 0x0c, 0x82, + 0x0c, 0xa6, 0x0c, 0xc6, 0x0c, 0x0a, 0x6d, 0x6f, + 0x6e, 0x74, 0x68, 0x21, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0xa4, 0x0c, 0xbf, 0x0c, + 0x82, 0x0c, 0x97, 0x0c, 0xb3, 0x0c, 0xc1, 0x0c, + 0x20, 0x00, 0xb9, 0x0c, 0xbf, 0x0c, 0x82, 0x0c, + 0xa6, 0x0c, 0xc6, 0x0c, 0x16, 0x6d, 0x6f, 0x6e, + 0x74, 0x68, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x18, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0b, 0x88, 0x0c, + 0x20, 0x00, 0xb5, 0x0c, 0xbe, 0x0c, 0xb0, 0x0c, + 0x15, 0xae, 0x0c, 0xc1, 0x0c, 0x82, 0x0c, 0xa6, + 0x0c, 0xbf, 0x0c, 0xa8, 0x0c, 0x20, 0x00, 0xb5, + 0x0c, 0xbe, 0x0c, 0xb0, 0x0c, 0x11, 0x95, 0x0c, + 0xb3, 0x0c, 0xc6, 0x0c, 0xa6, 0x0c, 0x20, 0x00, + 0xb5, 0x0c, 0xbe, 0x0c, 0xb0, 0x0c, 0x19, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xb5, + 0x0c, 0xbe, 0x0c, 0xb0, 0x0c, 0xa6, 0x0c, 0xb2, + 0x0c, 0xcd, 0x0c, 0xb2, 0x0c, 0xbf, 0x0c, 0x1b, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0xb5, 0x0c, 0xbe, 0x0c, 0xb0, 0x0c, 0x97, 0x0c, + 0xb3, 0x0c, 0xb2, 0x0c, 0xcd, 0x0c, 0xb2, 0x0c, + 0xbf, 0x0c, 0x1d, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0xb5, 0x0c, 0xbe, 0x0c, 0xb0, + 0x0c, 0xa6, 0x0c, 0x20, 0x00, 0xb9, 0x0c, 0xbf, + 0x0c, 0x82, 0x0c, 0xa6, 0x0c, 0xc6, 0x0c, 0x1f, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0xb5, 0x0c, 0xbe, 0x0c, 0xb0, 0x0c, 0x97, 0x0c, + 0xb3, 0x0c, 0x20, 0x00, 0xb9, 0x0c, 0xbf, 0x0c, + 0x82, 0x0c, 0xa6, 0x0c, 0xc6, 0x0c, 0x08, 0x77, + 0x65, 0x65, 0x6b, 0x14, 0x77, 0x65, 0x65, 0x6b, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, 0x77, + 0x65, 0x65, 0x6b, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x09, 0x87, 0x0c, 0x82, 0x0c, 0xa6, + 0x0c, 0xc1, 0x0c, 0x09, 0xa8, 0x0c, 0xbe, 0x0c, + 0xb3, 0x0c, 0xc6, 0x0c, 0x11, 0xa8, 0x0c, 0xbe, + 0x0c, 0xa1, 0x0c, 0xbf, 0x0c, 0xa6, 0x0c, 0xcd, + 0x0c, 0xa6, 0x0c, 0xc1, 0x0c, 0x0d, 0xae, 0x0c, + 0xca, 0x0c, 0xa8, 0x0c, 0xcd, 0x0c, 0xa8, 0x0c, + 0xc6, 0x0c, 0x04, 0x2d, 0x32, 0x0d, 0xa8, 0x0c, + 0xbf, 0x0c, 0xa8, 0x0c, 0xcd, 0x0c, 0xa8, 0x0c, + 0xc6, 0x0c, 0x19, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0xa6, 0x0c, 0xbf, 0x0c, 0xa8, + 0x0c, 0xa6, 0x0c, 0xb2, 0x0c, 0xcd, 0x0c, 0xb2, + 0x0c, 0xbf, 0x0c, 0x1b, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0xa6, 0x0c, 0xbf, 0x0c, + 0xa8, 0x0c, 0x97, 0x0c, 0xb3, 0x0c, 0xb2, 0x0c, + 0xcd, 0x0c, 0xb2, 0x0c, 0xbf, 0x0c, 0x1d, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xa6, + 0x0c, 0xbf, 0x0c, 0xa8, 0x0c, 0xa6, 0x0c, 0x20, + 0x00, 0xb9, 0x0c, 0xbf, 0x0c, 0x82, 0x0c, 0xa6, + 0x0c, 0xc6, 0x0c, 0x1f, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0xa6, 0x0c, 0xbf, 0x0c, + 0xa8, 0x0c, 0x97, 0x0c, 0xb3, 0x0c, 0x20, 0x00, + 0xb9, 0x0c, 0xbf, 0x0c, 0x82, 0x0c, 0xa6, 0x0c, + 0xc6, 0x0c, 0x06, 0x64, 0x61, 0x79, 0x12, 0x64, + 0x61, 0x79, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x14, 0x64, 0x61, 0x79, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x0d, 0x88, 0x0c, 0x20, 0x00, + 0x97, 0x0c, 0x82, 0x0c, 0x9f, 0x0c, 0xc6, 0x0c, + 0x1b, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x97, 0x0c, 0x82, 0x0c, 0x9f, 0x0c, 0xc6, + 0x0c, 0xaf, 0x0c, 0xb2, 0x0c, 0xcd, 0x0c, 0xb2, + 0x0c, 0xbf, 0x0c, 0x1d, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x97, 0x0c, 0x82, 0x0c, + 0x9f, 0x0c, 0xc6, 0x0c, 0x97, 0x0c, 0xb3, 0x0c, + 0xb2, 0x0c, 0xcd, 0x0c, 0xb2, 0x0c, 0xbf, 0x0c, + 0x1d, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x97, 0x0c, 0x82, 0x0c, 0x9f, 0x0c, 0xc6, + 0x0c, 0x20, 0x00, 0xb9, 0x0c, 0xbf, 0x0c, 0x82, + 0x0c, 0xa6, 0x0c, 0xc6, 0x0c, 0x21, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x97, 0x0c, + 0x82, 0x0c, 0x9f, 0x0c, 0xc6, 0x0c, 0x97, 0x0c, + 0xb3, 0x0c, 0x20, 0x00, 0xb9, 0x0c, 0xbf, 0x0c, + 0x82, 0x0c, 0xa6, 0x0c, 0xc6, 0x0c, 0x08, 0x68, + 0x6f, 0x75, 0x72, 0x14, 0x68, 0x6f, 0x75, 0x72, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, 0x68, + 0x6f, 0x75, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x0f, 0x88, 0x0c, 0x20, 0x00, 0xa8, + 0x0c, 0xbf, 0x0c, 0xae, 0x0c, 0xbf, 0x0c, 0xb7, + 0x0c, 0x1d, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0xa8, 0x0c, 0xbf, 0x0c, 0xae, 0x0c, + 0xbf, 0x0c, 0xb7, 0x0c, 0xa6, 0x0c, 0xb2, 0x0c, + 0xcd, 0x0c, 0xb2, 0x0c, 0xbf, 0x0c, 0x1f, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xa8, + 0x0c, 0xbf, 0x0c, 0xae, 0x0c, 0xbf, 0x0c, 0xb7, + 0x0c, 0x97, 0x0c, 0xb3, 0x0c, 0xb2, 0x0c, 0xcd, + 0x0c, 0xb2, 0x0c, 0xbf, 0x0c, 0x21, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xa8, 0x0c, + 0xbf, 0x0c, 0xae, 0x0c, 0xbf, 0x0c, 0xb7, 0x0c, + 0xa6, 0x0c, 0x20, 0x00, 0xb9, 0x0c, 0xbf, 0x0c, + 0x82, 0x0c, 0xa6, 0x0c, 0xc6, 0x0c, 0x23, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xa8, + 0x0c, 0xbf, 0x0c, 0xae, 0x0c, 0xbf, 0x0c, 0xb7, + 0x0c, 0x97, 0x0c, 0xb3, 0x0c, 0x20, 0x00, 0xb9, + 0x0c, 0xbf, 0x0c, 0x82, 0x0c, 0xa6, 0x0c, 0xc6, + 0x0c, 0x0c, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, + 0x18, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x05, 0x88, 0x0c, 0x97, 0x0c, + 0x23, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0xb8, 0x0c, 0xc6, 0x0c, 0x95, 0x0c, 0xc6, + 0x0c, 0x82, 0x0c, 0xa1, 0x0c, 0xcd, 0x0c, 0x0c, + 0x20, 0xa8, 0x0c, 0xb2, 0x0c, 0xcd, 0x0c, 0xb2, + 0x0c, 0xbf, 0x0c, 0x25, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0xb8, 0x0c, 0xc6, 0x0c, + 0x95, 0x0c, 0xc6, 0x0c, 0x82, 0x0c, 0xa1, 0x0c, + 0xcd, 0x0c, 0x0c, 0x20, 0x97, 0x0c, 0xb3, 0x0c, + 0xb2, 0x0c, 0xcd, 0x0c, 0xb2, 0x0c, 0xbf, 0x0c, + 0x23, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0xb8, 0x0c, 0xc6, 0x0c, 0x95, 0x0c, 0xc6, + 0x0c, 0x82, 0x0c, 0xa1, 0x0c, 0xcd, 0x0c, 0x20, + 0x00, 0xb9, 0x0c, 0xbf, 0x0c, 0x82, 0x0c, 0xa6, + 0x0c, 0xc6, 0x0c, 0x27, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0xb8, 0x0c, 0xc6, 0x0c, + 0x95, 0x0c, 0xc6, 0x0c, 0x82, 0x0c, 0xa1, 0x0c, + 0xc1, 0x0c, 0x97, 0x0c, 0xb3, 0x0c, 0x20, 0x00, + 0xb9, 0x0c, 0xbf, 0x0c, 0x82, 0x0c, 0xa6, 0x0c, + 0xc6, 0x0c, 0x0c, 0x73, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x18, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x73, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x08, 0x6c, 0x61, 0x74, + 0x6e, 0x04, 0x6e, 0x75, 0x08, 0x64, 0x61, 0x74, + 0x61, 0x70, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, + 0x6e, 0x74, 0x6c, 0x2d, 0x72, 0x65, 0x6c, 0x61, + 0x74, 0x69, 0x76, 0x65, 0x2d, 0x74, 0x69, 0x6d, + 0x65, 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, + 0x64, 0x61, 0x74, 0x61, 0x2f, 0x6b, 0x6e, 0x2e, + 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, + 0x00, 0x01, 0x00, 0x07, 0x00, 0x00, 0xd6, 0x0f, + 0x01, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x06, 0xc8, + 0x04, 0xd0, 0x00, 0x00, 0x00, 0x39, 0xd1, 0x00, + 0x00, 0x00, 0x42, 0xd2, 0x00, 0x00, 0x00, 0xaa, + 0x6a, 0xc1, 0x07, 0x00, 0x00, 0x39, 0xd1, 0x00, + 0x00, 0x00, 0x42, 0xd2, 0x00, 0x00, 0x00, 0x43, + 0xd0, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd3, 0x00, + 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xe2, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xe2, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xe7, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xec, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xed, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xf0, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xed, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xf1, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xf3, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xf4, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xf8, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xf9, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xf3, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xf4, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xf8, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xfb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xf3, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xf4, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xf8, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xfc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xfe, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xff, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0x04, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xfe, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xff, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0x05, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xfe, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xff, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0x06, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0x08, 0x01, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x09, 0x01, + 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, + 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x0b, 0x01, 0x00, + 0x00, 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0d, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0e, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0f, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0x11, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x07, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0x08, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0x02, + 0x00, 0x00, 0x80, 0x04, 0x0a, 0x01, 0x00, 0x00, + 0x4d, 0x0b, 0x01, 0x00, 0x00, 0x04, 0x0c, 0x01, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x10, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0x12, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0x08, 0x01, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x09, 0x01, + 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, + 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x0b, 0x01, 0x00, + 0x00, 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0d, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0e, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0f, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0x13, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x14, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x18, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0x19, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x17, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x18, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x1a, 0x01, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x16, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x17, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x18, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0x1b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x1c, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, + 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x1f, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x20, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0x21, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x1e, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x1f, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x20, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x22, 0x01, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x1d, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x1e, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x1f, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x20, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0x23, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x24, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, + 0x04, 0x25, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x27, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x28, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0x29, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x25, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x26, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x27, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x28, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x2a, 0x01, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x25, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x26, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x27, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x28, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0x2b, 0x01, 0x00, 0x00, 0x04, 0x2c, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x2d, 0x01, 0x00, + 0x00, 0x4d, 0x2e, 0x01, 0x00, 0x00, 0x24, 0x01, + 0x00, 0xc8, 0xc4, 0x28, 0xde, 0x04, 0x01, 0xaf, + 0x02, 0x76, 0x53, 0x35, 0x08, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x1c, 0x12, 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_ko_size = 2193; + +const uint8_t intl_relative_ko[2193] = { + 0x01, 0x4a, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x04, 0x6b, 0x6f, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x05, 0x2c, 0xc6, 0x74, + 0xd5, 0x05, 0xb4, 0xb0, 0x44, 0xb1, 0x05, 0x91, + 0xc7, 0x44, 0xb1, 0x04, 0x2d, 0x31, 0x0d, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x44, 0xb1, 0x20, + 0x00, 0xc4, 0xd6, 0x0a, 0x6f, 0x74, 0x68, 0x65, + 0x72, 0x0c, 0x66, 0x75, 0x74, 0x75, 0x72, 0x65, + 0x0d, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x44, + 0xb1, 0x20, 0x00, 0x04, 0xc8, 0x08, 0x70, 0x61, + 0x73, 0x74, 0x08, 0x79, 0x65, 0x61, 0x72, 0x14, + 0x79, 0x65, 0x61, 0x72, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x16, 0x79, 0x65, 0x61, 0x72, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0b, 0x74, + 0xc7, 0x88, 0xbc, 0x20, 0x00, 0x84, 0xbd, 0x30, + 0xae, 0x0b, 0xe4, 0xb2, 0x4c, 0xc7, 0x20, 0x00, + 0x84, 0xbd, 0x30, 0xae, 0x0b, 0xc0, 0xc9, 0x9c, + 0xb0, 0x20, 0x00, 0x84, 0xbd, 0x30, 0xae, 0x0f, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x84, 0xbd, + 0x30, 0xae, 0x20, 0x00, 0xc4, 0xd6, 0x0f, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x84, 0xbd, 0x30, + 0xae, 0x20, 0x00, 0x04, 0xc8, 0x0e, 0x71, 0x75, + 0x61, 0x72, 0x74, 0x65, 0x72, 0x1a, 0x71, 0x75, + 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x1c, 0x71, 0x75, 0x61, 0x72, + 0x74, 0x65, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x09, 0x74, 0xc7, 0x88, 0xbc, 0x20, + 0x00, 0xec, 0xb2, 0x09, 0xe4, 0xb2, 0x4c, 0xc7, + 0x20, 0x00, 0xec, 0xb2, 0x07, 0xc0, 0xc9, 0x9c, + 0xb0, 0xec, 0xb2, 0x0f, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x1c, 0xac, 0xd4, 0xc6, 0x20, 0x00, + 0xc4, 0xd6, 0x0f, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x1c, 0xac, 0xd4, 0xc6, 0x20, 0x00, 0x04, + 0xc8, 0x0a, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x16, + 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x18, 0x6d, 0x6f, 0x6e, 0x74, + 0x68, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x09, 0x74, 0xc7, 0x88, 0xbc, 0x20, 0x00, 0xfc, + 0xc8, 0x09, 0xe4, 0xb2, 0x4c, 0xc7, 0x20, 0x00, + 0xfc, 0xc8, 0x07, 0xc0, 0xc9, 0x9c, 0xb0, 0xfc, + 0xc8, 0x0d, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0xfc, 0xc8, 0x20, 0x00, 0xc4, 0xd6, 0x0d, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0xfc, 0xc8, 0x20, + 0x00, 0x04, 0xc8, 0x08, 0x77, 0x65, 0x65, 0x6b, + 0x14, 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x16, 0x77, 0x65, 0x65, 0x6b, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x05, + 0x24, 0xc6, 0x98, 0xb2, 0x05, 0xb4, 0xb0, 0x7c, + 0xc7, 0x05, 0xa8, 0xba, 0x08, 0xb8, 0x07, 0xf8, + 0xad, 0x00, 0xc8, 0xd8, 0xae, 0x04, 0x2d, 0x32, + 0x05, 0xb4, 0xc5, 0x1c, 0xc8, 0x0d, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x7c, 0xc7, 0x20, 0x00, + 0xc4, 0xd6, 0x0d, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x7c, 0xc7, 0x20, 0x00, 0x04, 0xc8, 0x06, + 0x64, 0x61, 0x79, 0x12, 0x64, 0x61, 0x79, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x14, 0x64, 0x61, + 0x79, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x0b, 0x04, 0xd6, 0xac, 0xc7, 0x20, 0x00, 0xdc, + 0xc2, 0x04, 0xac, 0x0f, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0xdc, 0xc2, 0x04, 0xac, 0x20, 0x00, + 0xc4, 0xd6, 0x0f, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0xdc, 0xc2, 0x04, 0xac, 0x20, 0x00, 0x04, + 0xc8, 0x08, 0x68, 0x6f, 0x75, 0x72, 0x14, 0x68, + 0x6f, 0x75, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x16, 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x09, 0x04, 0xd6, + 0xac, 0xc7, 0x20, 0x00, 0x84, 0xbd, 0x0d, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x84, 0xbd, 0x20, + 0x00, 0xc4, 0xd6, 0x0d, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x84, 0xbd, 0x20, 0x00, 0x04, 0xc8, + 0x0c, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x18, + 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x6d, 0x69, 0x6e, + 0x75, 0x74, 0x65, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x05, 0xc0, 0xc9, 0x08, 0xae, 0x0d, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x08, 0xcd, + 0x20, 0x00, 0xc4, 0xd6, 0x0d, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x08, 0xcd, 0x20, 0x00, 0x04, + 0xc8, 0x0c, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, + 0x18, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x73, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x08, 0x6c, 0x61, 0x74, 0x6e, + 0x04, 0x6e, 0x75, 0x08, 0x64, 0x61, 0x74, 0x61, + 0x70, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, + 0x74, 0x6c, 0x2d, 0x72, 0x65, 0x6c, 0x61, 0x74, + 0x69, 0x76, 0x65, 0x2d, 0x74, 0x69, 0x6d, 0x65, + 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2f, + 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, + 0x61, 0x74, 0x61, 0x2f, 0x6b, 0x6f, 0x2e, 0x6a, + 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, + 0x01, 0x00, 0x07, 0x00, 0x00, 0xa2, 0x09, 0x01, + 0xa0, 0x01, 0x00, 0x00, 0x00, 0x06, 0xc8, 0x04, + 0xd0, 0x00, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, + 0x00, 0x42, 0xd2, 0x00, 0x00, 0x00, 0xaa, 0x6a, + 0x8d, 0x04, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, + 0x00, 0x42, 0xd2, 0x00, 0x00, 0x00, 0x43, 0xd0, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd3, 0x00, 0x00, + 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xd9, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0xd9, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe1, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xe2, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xe3, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe5, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xe6, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xe4, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe5, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0xe4, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe5, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xec, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xed, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xee, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xec, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xed, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xef, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0xec, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xed, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0xf0, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xf3, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf5, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xf6, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xf4, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf5, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xf7, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0xf4, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xf5, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0xf8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xfb, 0x00, 0x00, + 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, 0xfc, + 0x00, 0x00, 0x00, 0x4d, 0xfd, 0x00, 0x00, 0x00, + 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xff, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x00, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0x02, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0xff, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x00, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x03, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x04, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, + 0x05, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x06, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x07, + 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x05, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x06, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x08, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x05, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x06, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0x09, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x0b, 0x04, 0x0b, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x0c, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0x0d, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0x0e, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x0b, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x0c, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x0f, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x10, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, + 0x11, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x12, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x13, + 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x11, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x12, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x14, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x11, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x12, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0x15, 0x01, 0x00, 0x00, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x17, 0x01, 0x00, 0x00, 0x4d, 0x18, 0x01, 0x00, + 0x00, 0x24, 0x01, 0x00, 0xc8, 0xc4, 0x28, 0xb2, + 0x04, 0x01, 0xdd, 0x01, 0x76, 0x53, 0x35, 0x08, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x1c, 0x08, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x1c, 0x08, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, + 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x1c, + 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x1c, + 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x1c, 0x08, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x1c, 0x08, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x1c, 0x08, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x1c, 0x08, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x1c, 0x08, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x1c, + 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x1c, + 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x1c, + 0x08, 0x35, 0x1c, 0x1c, 0x1c, 0x12, 0x1c, 0x1c, + 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_lo_size = 2991; + +const uint8_t intl_relative_lo[2991] = { + 0x01, 0x56, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x04, 0x6c, 0x6f, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x0b, 0x9b, 0x0e, 0xb5, + 0x0e, 0x99, 0x0e, 0xb5, 0x0e, 0xc9, 0x0e, 0x0b, + 0x9b, 0x0e, 0xb5, 0x0e, 0xdc, 0x0e, 0xc9, 0x0e, + 0xb2, 0x0e, 0x0b, 0x9b, 0x0e, 0xb5, 0x0e, 0x81, + 0x0e, 0xb2, 0x0e, 0x8d, 0x0e, 0x04, 0x2d, 0x31, + 0x19, 0xc3, 0x0e, 0x99, 0x0e, 0xad, 0x0e, 0xb5, + 0x0e, 0x81, 0x0e, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x9b, 0x0e, 0xb5, + 0x0e, 0x0a, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x0c, + 0x66, 0x75, 0x74, 0x75, 0x72, 0x65, 0x15, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x9b, + 0x0e, 0xb5, 0x0e, 0x81, 0x0e, 0xc8, 0x0e, 0xad, + 0x0e, 0x99, 0x0e, 0x08, 0x70, 0x61, 0x73, 0x74, + 0x08, 0x79, 0x65, 0x61, 0x72, 0x14, 0x79, 0x65, + 0x61, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x16, 0x79, 0x65, 0x61, 0x72, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x13, 0xc4, 0x0e, 0x95, + 0x0e, 0xa3, 0x0e, 0xa1, 0x0e, 0xb2, 0x0e, 0x94, + 0x0e, 0x99, 0x0e, 0xb5, 0x0e, 0xc9, 0x0e, 0x13, + 0xc4, 0x0e, 0x95, 0x0e, 0xa3, 0x0e, 0xa1, 0x0e, + 0xb2, 0x0e, 0x94, 0x0e, 0xdc, 0x0e, 0xc9, 0x0e, + 0xb2, 0x0e, 0x1b, 0xc4, 0x0e, 0x95, 0x0e, 0xa3, + 0x0e, 0xa1, 0x0e, 0xb2, 0x0e, 0x94, 0x0e, 0x81, + 0x0e, 0xc8, 0x0e, 0xad, 0x0e, 0x99, 0x0e, 0xdc, + 0x0e, 0xc9, 0x0e, 0xb2, 0x0e, 0x21, 0xc3, 0x0e, + 0x99, 0x0e, 0xad, 0x0e, 0xb5, 0x0e, 0x81, 0x0e, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0xc4, 0x0e, 0x95, 0x0e, 0xa3, 0x0e, + 0xa1, 0x0e, 0xb2, 0x0e, 0x94, 0x0e, 0x1d, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xc4, + 0x0e, 0x95, 0x0e, 0xa3, 0x0e, 0xa1, 0x0e, 0xb2, + 0x0e, 0x94, 0x0e, 0x81, 0x0e, 0xc8, 0x0e, 0xad, + 0x0e, 0x99, 0x0e, 0x0e, 0x71, 0x75, 0x61, 0x72, + 0x74, 0x65, 0x72, 0x15, 0xc3, 0x0e, 0x99, 0x0e, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x95, 0x0e, 0xa1, 0x0e, 0x2e, 0x00, + 0x19, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x95, 0x0e, 0xa1, 0x0e, 0x2e, 0x00, 0x20, + 0x00, 0x81, 0x0e, 0xc8, 0x0e, 0xad, 0x0e, 0x99, + 0x0e, 0x1a, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, + 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1c, + 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x11, 0xc0, + 0x0e, 0x94, 0x0e, 0xb7, 0x0e, 0xad, 0x0e, 0x99, + 0x0e, 0x99, 0x0e, 0xb5, 0x0e, 0xc9, 0x0e, 0x11, + 0xc0, 0x0e, 0x94, 0x0e, 0xb7, 0x0e, 0xad, 0x0e, + 0x99, 0x0e, 0xdc, 0x0e, 0xc9, 0x0e, 0xb2, 0x0e, + 0x13, 0xc0, 0x0e, 0x94, 0x0e, 0xb7, 0x0e, 0xad, + 0x0e, 0x99, 0x0e, 0xc1, 0x0e, 0xa5, 0x0e, 0xc9, + 0x0e, 0xa7, 0x0e, 0x1f, 0xc3, 0x0e, 0x99, 0x0e, + 0xad, 0x0e, 0xb5, 0x0e, 0x81, 0x0e, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0xc0, 0x0e, 0x94, 0x0e, 0xb7, 0x0e, 0xad, 0x0e, + 0x99, 0x0e, 0x1b, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0xc0, 0x0e, 0x94, 0x0e, 0xb7, + 0x0e, 0xad, 0x0e, 0x99, 0x0e, 0x81, 0x0e, 0xc8, + 0x0e, 0xad, 0x0e, 0x99, 0x0e, 0x0a, 0x6d, 0x6f, + 0x6e, 0x74, 0x68, 0x19, 0xc3, 0x0e, 0x99, 0x0e, + 0xad, 0x0e, 0xb5, 0x0e, 0x81, 0x0e, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x94, 0x0e, 0x2e, 0x00, 0x17, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x94, 0x0e, 0x2e, + 0x00, 0x20, 0x00, 0x81, 0x0e, 0xc8, 0x0e, 0xad, + 0x0e, 0x99, 0x0e, 0x16, 0x6d, 0x6f, 0x6e, 0x74, + 0x68, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x18, + 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x11, 0xad, 0x0e, 0xb2, + 0x0e, 0x97, 0x0e, 0xb4, 0x0e, 0x94, 0x0e, 0x99, + 0x0e, 0xb5, 0x0e, 0xc9, 0x0e, 0x11, 0xad, 0x0e, + 0xb2, 0x0e, 0x97, 0x0e, 0xb4, 0x0e, 0x94, 0x0e, + 0xdc, 0x0e, 0xc9, 0x0e, 0xb2, 0x0e, 0x13, 0xad, + 0x0e, 0xb2, 0x0e, 0x97, 0x0e, 0xb4, 0x0e, 0x94, + 0x0e, 0xc1, 0x0e, 0xa5, 0x0e, 0xc9, 0x0e, 0xa7, + 0x0e, 0x1f, 0xc3, 0x0e, 0x99, 0x0e, 0xad, 0x0e, + 0xb5, 0x0e, 0x81, 0x0e, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xad, 0x0e, + 0xb2, 0x0e, 0x97, 0x0e, 0xb4, 0x0e, 0x94, 0x0e, + 0x1b, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0xad, 0x0e, 0xb2, 0x0e, 0x97, 0x0e, 0xb4, + 0x0e, 0x94, 0x0e, 0x81, 0x0e, 0xc8, 0x0e, 0xad, + 0x0e, 0x99, 0x0e, 0x08, 0x77, 0x65, 0x65, 0x6b, + 0x1b, 0xc3, 0x0e, 0x99, 0x0e, 0xad, 0x0e, 0xb5, + 0x0e, 0x81, 0x0e, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0xad, 0x0e, 0x97, + 0x0e, 0x2e, 0x00, 0x19, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0xad, 0x0e, 0x97, 0x0e, + 0x2e, 0x00, 0x20, 0x00, 0x81, 0x0e, 0xc8, 0x0e, + 0xad, 0x0e, 0x99, 0x0e, 0x14, 0x77, 0x65, 0x65, + 0x6b, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, + 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x0d, 0xa1, 0x0e, 0xb7, 0x0e, + 0xc9, 0x0e, 0x99, 0x0e, 0xb5, 0x0e, 0xc9, 0x0e, + 0x0f, 0xa1, 0x0e, 0xb7, 0x0e, 0xc9, 0x0e, 0xad, + 0x0e, 0xb7, 0x0e, 0xc8, 0x0e, 0x99, 0x0e, 0x0b, + 0xa1, 0x0e, 0xb7, 0x0e, 0xc9, 0x0e, 0xae, 0x0e, + 0xb7, 0x0e, 0x0f, 0xa1, 0x0e, 0xb7, 0x0e, 0xc9, + 0x0e, 0x81, 0x0e, 0xc8, 0x0e, 0xad, 0x0e, 0x99, + 0x0e, 0x04, 0x2d, 0x32, 0x0d, 0xa1, 0x0e, 0xb7, + 0x0e, 0xc9, 0x0e, 0xa7, 0x0e, 0xb2, 0x0e, 0x99, + 0x0e, 0x1b, 0xc3, 0x0e, 0x99, 0x0e, 0xad, 0x0e, + 0xb5, 0x0e, 0x81, 0x0e, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xa1, 0x0e, + 0xb7, 0x0e, 0xc9, 0x0e, 0x17, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0xa1, 0x0e, 0xb7, + 0x0e, 0xc9, 0x0e, 0x81, 0x0e, 0xc8, 0x0e, 0xad, + 0x0e, 0x99, 0x0e, 0x06, 0x64, 0x61, 0x79, 0x12, + 0x64, 0x61, 0x79, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x14, 0x64, 0x61, 0x79, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x15, 0x8a, 0x0e, 0xbb, + 0x0e, 0xc8, 0x0e, 0xa7, 0x0e, 0xc2, 0x0e, 0xa1, + 0x0e, 0x87, 0x0e, 0x99, 0x0e, 0xb5, 0x0e, 0xc9, + 0x0e, 0x23, 0xc3, 0x0e, 0x99, 0x0e, 0xad, 0x0e, + 0xb5, 0x0e, 0x81, 0x0e, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x8a, 0x0e, + 0xbb, 0x0e, 0xc8, 0x0e, 0xa7, 0x0e, 0xc2, 0x0e, + 0xa1, 0x0e, 0x87, 0x0e, 0x1f, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x8a, 0x0e, 0xbb, + 0x0e, 0xc8, 0x0e, 0xa7, 0x0e, 0xc2, 0x0e, 0xa1, + 0x0e, 0x87, 0x0e, 0x81, 0x0e, 0xc8, 0x0e, 0xad, + 0x0e, 0x99, 0x0e, 0x08, 0x68, 0x6f, 0x75, 0x72, + 0x1b, 0xc3, 0x0e, 0x99, 0x0e, 0xad, 0x0e, 0xb5, + 0x0e, 0x81, 0x0e, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x8a, 0x0e, 0xa1, + 0x0e, 0x2e, 0x00, 0x19, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x8a, 0x0e, 0xa1, 0x0e, + 0x2e, 0x00, 0x20, 0x00, 0x81, 0x0e, 0xc8, 0x0e, + 0xad, 0x0e, 0x99, 0x0e, 0x14, 0x68, 0x6f, 0x75, + 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, + 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x0f, 0x99, 0x0e, 0xb2, 0x0e, + 0x97, 0x0e, 0xb5, 0x0e, 0x99, 0x0e, 0xb5, 0x0e, + 0xc9, 0x0e, 0x1d, 0xc3, 0x0e, 0x99, 0x0e, 0xad, + 0x0e, 0xb5, 0x0e, 0x81, 0x0e, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x99, + 0x0e, 0xb2, 0x0e, 0x97, 0x0e, 0xb5, 0x0e, 0x19, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x99, 0x0e, 0xb2, 0x0e, 0x97, 0x0e, 0xb5, 0x0e, + 0x81, 0x0e, 0xc8, 0x0e, 0xad, 0x0e, 0x99, 0x0e, + 0x0c, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x15, + 0xc3, 0x0e, 0x99, 0x0e, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x99, 0x0e, + 0x97, 0x0e, 0x2e, 0x00, 0x19, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x99, 0x0e, 0x97, + 0x0e, 0x2e, 0x00, 0x20, 0x00, 0x81, 0x0e, 0xc8, + 0x0e, 0xad, 0x0e, 0x99, 0x0e, 0x18, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x1a, 0x6d, 0x69, 0x6e, 0x75, 0x74, + 0x65, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x0d, 0x95, 0x0e, 0xad, 0x0e, 0x99, 0x0e, 0x99, + 0x0e, 0xb5, 0x0e, 0xc9, 0x0e, 0x21, 0xc3, 0x0e, + 0x99, 0x0e, 0xad, 0x0e, 0xb5, 0x0e, 0x81, 0x0e, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0xa7, 0x0e, 0xb4, 0x0e, 0x99, 0x0e, + 0xb2, 0x0e, 0x97, 0x0e, 0xb5, 0x0e, 0x1d, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xa7, + 0x0e, 0xb4, 0x0e, 0x99, 0x0e, 0xb2, 0x0e, 0x97, + 0x0e, 0xb5, 0x0e, 0x81, 0x0e, 0xc8, 0x0e, 0xad, + 0x0e, 0x99, 0x0e, 0x0c, 0x73, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x15, 0xc3, 0x0e, 0x99, 0x0e, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0xa7, 0x0e, 0xb4, 0x0e, 0x2e, 0x00, 0x19, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0xa7, 0x0e, 0xb4, 0x0e, 0x2e, 0x00, 0x20, 0x00, + 0x81, 0x0e, 0xc8, 0x0e, 0xad, 0x0e, 0x99, 0x0e, + 0x18, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x73, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x08, 0x6c, 0x61, 0x74, 0x6e, + 0x04, 0x6e, 0x75, 0x08, 0x64, 0x61, 0x74, 0x61, + 0x70, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, + 0x74, 0x6c, 0x2d, 0x72, 0x65, 0x6c, 0x61, 0x74, + 0x69, 0x76, 0x65, 0x2d, 0x74, 0x69, 0x6d, 0x65, + 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2f, + 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, + 0x61, 0x74, 0x61, 0x2f, 0x6c, 0x6f, 0x2e, 0x6a, + 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, + 0x01, 0x00, 0x07, 0x00, 0x00, 0x80, 0x0a, 0x01, + 0xa0, 0x01, 0x00, 0x00, 0x00, 0x06, 0xc8, 0x04, + 0xd0, 0x00, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, + 0x00, 0x42, 0xd2, 0x00, 0x00, 0x00, 0xaa, 0x6a, + 0xeb, 0x04, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, + 0x00, 0x42, 0xd2, 0x00, 0x00, 0x00, 0x43, 0xd0, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd3, 0x00, 0x00, + 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xd9, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0xd9, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe1, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xe2, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xe3, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe5, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xe6, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xe7, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe8, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0xe7, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x39, 0x44, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xec, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xed, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xf0, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0xf1, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xf3, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xf1, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf2, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xf4, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xf6, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xf7, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xfa, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0xfb, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xfd, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xfb, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfc, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xfe, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x01, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x01, + 0x01, 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, + 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, 0x03, 0x01, + 0x00, 0x00, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x05, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x06, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x07, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x01, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x01, + 0x01, 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, + 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, 0x03, 0x01, + 0x00, 0x00, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x05, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x06, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x08, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x01, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x01, + 0x01, 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, + 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, 0x03, 0x01, + 0x00, 0x00, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x05, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x06, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x09, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x0b, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0c, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x0d, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x0e, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x0f, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0x10, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0x11, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x12, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x0b, 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0x15, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x17, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x18, + 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x17, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x19, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x1a, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x1b, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x1c, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x1d, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x1e, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x1f, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0x20, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x1f, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0x21, 0x01, 0x00, 0x00, 0x04, 0x22, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x23, 0x01, + 0x00, 0x00, 0x4d, 0x24, 0x01, 0x00, 0x00, 0x24, + 0x01, 0x00, 0xc8, 0xc4, 0x28, 0xca, 0x04, 0x01, + 0xe5, 0x01, 0x76, 0x53, 0x35, 0x08, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, + 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x1c, + 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x1c, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x1c, 0x08, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x1c, 0x08, 0x35, + 0x1c, 0x1c, 0x1c, 0x12, 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_lt_size = 5975; + +const uint8_t intl_relative_lt[5975] = { + 0x01, 0x7c, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x04, 0x6c, 0x74, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x19, 0x61, 0x01, 0x69, + 0x00, 0x61, 0x00, 0x69, 0x00, 0x73, 0x00, 0x20, + 0x00, 0x6d, 0x00, 0x65, 0x00, 0x74, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x73, 0x00, 0x1a, 0x6b, 0x69, + 0x74, 0x61, 0x69, 0x73, 0x20, 0x6d, 0x65, 0x74, + 0x61, 0x69, 0x73, 0x25, 0x70, 0x00, 0x72, 0x00, + 0x61, 0x00, 0x17, 0x01, 0x6a, 0x00, 0x75, 0x00, + 0x73, 0x00, 0x69, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x73, 0x00, 0x20, 0x00, 0x6d, 0x00, 0x65, 0x00, + 0x74, 0x00, 0x61, 0x00, 0x69, 0x00, 0x73, 0x00, + 0x04, 0x2d, 0x31, 0x17, 0x70, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x74, 0x00, + 0x73, 0x01, 0x06, 0x6f, 0x6e, 0x65, 0x06, 0x66, + 0x65, 0x77, 0x08, 0x6d, 0x61, 0x6e, 0x79, 0x0a, + 0x6f, 0x74, 0x68, 0x65, 0x72, 0x0c, 0x66, 0x75, + 0x74, 0x75, 0x72, 0x65, 0x1f, 0x70, 0x00, 0x72, + 0x00, 0x69, 0x00, 0x65, 0x00, 0x61, 0x01, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x6d, 0x00, 0x65, 0x00, 0x74, 0x00, 0x75, + 0x00, 0x73, 0x00, 0x1d, 0x70, 0x00, 0x72, 0x00, + 0x69, 0x00, 0x65, 0x00, 0x61, 0x01, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x6d, 0x00, 0x65, 0x00, 0x74, 0x00, 0x73, 0x01, + 0x08, 0x70, 0x61, 0x73, 0x74, 0x08, 0x79, 0x65, + 0x61, 0x72, 0x12, 0x70, 0x6f, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x6d, 0x2e, 0x19, 0x70, 0x00, 0x72, + 0x00, 0x69, 0x00, 0x65, 0x00, 0x61, 0x01, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x6d, 0x00, 0x2e, 0x00, 0x14, 0x79, 0x65, + 0x61, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x16, 0x79, 0x65, 0x61, 0x72, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x1b, 0x61, 0x01, 0x69, + 0x00, 0x73, 0x00, 0x20, 0x00, 0x6b, 0x00, 0x65, + 0x00, 0x74, 0x00, 0x76, 0x00, 0x69, 0x00, 0x72, + 0x00, 0x74, 0x00, 0x69, 0x00, 0x73, 0x00, 0x1e, + 0x6b, 0x69, 0x74, 0x61, 0x73, 0x20, 0x6b, 0x65, + 0x74, 0x76, 0x69, 0x72, 0x74, 0x69, 0x73, 0x23, + 0x70, 0x00, 0x72, 0x00, 0x61, 0x00, 0x17, 0x01, + 0x6a, 0x00, 0x19, 0x01, 0x73, 0x00, 0x20, 0x00, + 0x6b, 0x00, 0x65, 0x00, 0x74, 0x00, 0x76, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x74, 0x00, 0x69, 0x00, + 0x73, 0x00, 0x21, 0x70, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x6b, 0x00, 0x65, 0x00, 0x74, 0x00, 0x76, + 0x00, 0x69, 0x00, 0x72, 0x00, 0x0d, 0x01, 0x69, + 0x00, 0x6f, 0x00, 0x21, 0x70, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x6b, 0x00, 0x65, 0x00, 0x74, 0x00, + 0x76, 0x00, 0x69, 0x00, 0x72, 0x00, 0x0d, 0x01, + 0x69, 0x00, 0x73, 0x01, 0x25, 0x70, 0x00, 0x72, + 0x00, 0x69, 0x00, 0x65, 0x00, 0x61, 0x01, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x6b, 0x00, 0x65, 0x00, 0x74, 0x00, 0x76, + 0x00, 0x69, 0x00, 0x72, 0x00, 0x74, 0x00, 0x2f, + 0x01, 0x29, 0x70, 0x00, 0x72, 0x00, 0x69, 0x00, + 0x65, 0x00, 0x61, 0x01, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x6b, 0x00, + 0x65, 0x00, 0x74, 0x00, 0x76, 0x00, 0x69, 0x00, + 0x72, 0x00, 0x0d, 0x01, 0x69, 0x00, 0x75, 0x00, + 0x73, 0x00, 0x27, 0x70, 0x00, 0x72, 0x00, 0x69, + 0x00, 0x65, 0x00, 0x61, 0x01, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x6b, + 0x00, 0x65, 0x00, 0x74, 0x00, 0x76, 0x00, 0x69, + 0x00, 0x72, 0x00, 0x0d, 0x01, 0x69, 0x00, 0x6f, + 0x00, 0x27, 0x70, 0x00, 0x72, 0x00, 0x69, 0x00, + 0x65, 0x00, 0x61, 0x01, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x6b, 0x00, + 0x65, 0x00, 0x74, 0x00, 0x76, 0x00, 0x69, 0x00, + 0x72, 0x00, 0x0d, 0x01, 0x69, 0x00, 0x73, 0x01, + 0x0e, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, + 0x18, 0x70, 0x6f, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x6b, 0x65, 0x74, 0x76, 0x2e, 0x1f, 0x70, 0x00, + 0x72, 0x00, 0x69, 0x00, 0x65, 0x00, 0x61, 0x01, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x6b, 0x00, 0x65, 0x00, 0x74, 0x00, + 0x76, 0x00, 0x2e, 0x00, 0x1a, 0x71, 0x75, 0x61, + 0x72, 0x74, 0x65, 0x72, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x1c, 0x71, 0x75, 0x61, 0x72, 0x74, + 0x65, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x13, 0x61, 0x01, 0x2f, 0x01, 0x20, 0x00, + 0x6d, 0x00, 0x17, 0x01, 0x6e, 0x00, 0x65, 0x00, + 0x73, 0x00, 0x2f, 0x01, 0x17, 0x6b, 0x00, 0x69, + 0x00, 0x74, 0x00, 0x05, 0x01, 0x20, 0x00, 0x6d, + 0x00, 0x17, 0x01, 0x6e, 0x00, 0x65, 0x00, 0x73, + 0x00, 0x2f, 0x01, 0x1f, 0x70, 0x00, 0x72, 0x00, + 0x61, 0x00, 0x17, 0x01, 0x6a, 0x00, 0x75, 0x00, + 0x73, 0x00, 0x2f, 0x01, 0x20, 0x00, 0x6d, 0x00, + 0x17, 0x01, 0x6e, 0x00, 0x65, 0x00, 0x73, 0x00, + 0x2f, 0x01, 0x1d, 0x70, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x6d, 0x00, 0x17, 0x01, 0x6e, 0x00, 0x65, + 0x00, 0x73, 0x00, 0x69, 0x00, 0x6f, 0x00, 0x1d, + 0x70, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x6d, 0x00, + 0x17, 0x01, 0x6e, 0x00, 0x65, 0x00, 0x73, 0x00, + 0x69, 0x00, 0x73, 0x01, 0x21, 0x70, 0x00, 0x72, + 0x00, 0x69, 0x00, 0x65, 0x00, 0x61, 0x01, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x6d, 0x00, 0x17, 0x01, 0x6e, 0x00, 0x65, + 0x00, 0x73, 0x00, 0x2f, 0x01, 0x25, 0x70, 0x00, + 0x72, 0x00, 0x69, 0x00, 0x65, 0x00, 0x61, 0x01, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x6d, 0x00, 0x17, 0x01, 0x6e, 0x00, + 0x65, 0x00, 0x73, 0x00, 0x69, 0x00, 0x75, 0x00, + 0x73, 0x00, 0x23, 0x70, 0x00, 0x72, 0x00, 0x69, + 0x00, 0x65, 0x00, 0x61, 0x01, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x6d, + 0x00, 0x17, 0x01, 0x6e, 0x00, 0x65, 0x00, 0x73, + 0x00, 0x69, 0x00, 0x6f, 0x00, 0x23, 0x70, 0x00, + 0x72, 0x00, 0x69, 0x00, 0x65, 0x00, 0x61, 0x01, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x6d, 0x00, 0x17, 0x01, 0x6e, 0x00, + 0x65, 0x00, 0x73, 0x00, 0x69, 0x00, 0x73, 0x01, + 0x0a, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x17, 0x70, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x6d, 0x00, 0x17, + 0x01, 0x6e, 0x00, 0x2e, 0x00, 0x1d, 0x70, 0x00, + 0x72, 0x00, 0x69, 0x00, 0x65, 0x00, 0x61, 0x01, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x6d, 0x00, 0x17, 0x01, 0x6e, 0x00, + 0x2e, 0x00, 0x16, 0x6d, 0x6f, 0x6e, 0x74, 0x68, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x18, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x17, 0x61, 0x01, 0x69, 0x00, + 0x05, 0x01, 0x20, 0x00, 0x73, 0x00, 0x61, 0x00, + 0x76, 0x00, 0x61, 0x00, 0x69, 0x00, 0x74, 0x00, + 0x19, 0x01, 0x19, 0x6b, 0x00, 0x69, 0x00, 0x74, + 0x00, 0x05, 0x01, 0x20, 0x00, 0x73, 0x00, 0x61, + 0x00, 0x76, 0x00, 0x61, 0x00, 0x69, 0x00, 0x74, + 0x00, 0x19, 0x01, 0x23, 0x70, 0x00, 0x72, 0x00, + 0x61, 0x00, 0x17, 0x01, 0x6a, 0x00, 0x75, 0x00, + 0x73, 0x00, 0x69, 0x00, 0x05, 0x01, 0x20, 0x00, + 0x73, 0x00, 0x61, 0x00, 0x76, 0x00, 0x61, 0x00, + 0x69, 0x00, 0x74, 0x00, 0x19, 0x01, 0x1f, 0x70, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x73, 0x00, 0x61, + 0x00, 0x76, 0x00, 0x61, 0x00, 0x69, 0x00, 0x74, + 0x00, 0x17, 0x01, 0x73, 0x00, 0x1f, 0x70, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x73, 0x00, 0x61, 0x00, + 0x76, 0x00, 0x61, 0x00, 0x69, 0x00, 0x0d, 0x01, + 0x69, 0x00, 0x73, 0x01, 0x23, 0x70, 0x00, 0x72, + 0x00, 0x69, 0x00, 0x65, 0x00, 0x61, 0x01, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x73, 0x00, 0x61, 0x00, 0x76, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x74, 0x00, 0x19, 0x01, 0x25, + 0x70, 0x00, 0x72, 0x00, 0x69, 0x00, 0x65, 0x00, + 0x61, 0x01, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x73, 0x00, 0x61, 0x00, + 0x76, 0x00, 0x61, 0x00, 0x69, 0x00, 0x74, 0x00, + 0x65, 0x00, 0x73, 0x00, 0x25, 0x70, 0x00, 0x72, + 0x00, 0x69, 0x00, 0x65, 0x00, 0x61, 0x01, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x73, 0x00, 0x61, 0x00, 0x76, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x74, 0x00, 0x17, 0x01, 0x73, + 0x00, 0x25, 0x70, 0x00, 0x72, 0x00, 0x69, 0x00, + 0x65, 0x00, 0x61, 0x01, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x73, 0x00, + 0x61, 0x00, 0x76, 0x00, 0x61, 0x00, 0x69, 0x00, + 0x0d, 0x01, 0x69, 0x00, 0x73, 0x01, 0x08, 0x77, + 0x65, 0x65, 0x6b, 0x16, 0x70, 0x6f, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x73, 0x61, 0x76, 0x2e, 0x1d, + 0x70, 0x00, 0x72, 0x00, 0x69, 0x00, 0x65, 0x00, + 0x61, 0x01, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x73, 0x00, 0x61, 0x00, + 0x76, 0x00, 0x2e, 0x00, 0x14, 0x77, 0x65, 0x65, + 0x6b, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, + 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x11, 0x61, 0x01, 0x69, 0x00, + 0x61, 0x00, 0x6e, 0x00, 0x64, 0x00, 0x69, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x0a, 0x72, 0x79, 0x74, + 0x6f, 0x6a, 0x0a, 0x70, 0x6f, 0x72, 0x79, 0x74, + 0x0f, 0x75, 0x00, 0x7e, 0x01, 0x76, 0x00, 0x61, + 0x00, 0x6b, 0x00, 0x61, 0x00, 0x72, 0x00, 0x04, + 0x2d, 0x32, 0x0a, 0x76, 0x61, 0x6b, 0x61, 0x72, + 0x1a, 0x70, 0x6f, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x64, 0x69, 0x65, 0x6e, 0x6f, 0x73, 0x19, 0x70, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x64, 0x00, 0x69, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, 0x01, 0x1f, + 0x70, 0x00, 0x72, 0x00, 0x69, 0x00, 0x65, 0x00, + 0x61, 0x01, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x64, 0x00, 0x69, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x05, 0x01, 0x21, 0x70, + 0x00, 0x72, 0x00, 0x69, 0x00, 0x65, 0x00, 0x61, + 0x01, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x64, 0x00, 0x69, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x73, 0x00, 0x21, + 0x70, 0x00, 0x72, 0x00, 0x69, 0x00, 0x65, 0x00, + 0x61, 0x01, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x64, 0x00, 0x69, 0x00, + 0x65, 0x00, 0x6e, 0x00, 0x6f, 0x00, 0x73, 0x00, + 0x1f, 0x70, 0x00, 0x72, 0x00, 0x69, 0x00, 0x65, + 0x00, 0x61, 0x01, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x64, 0x00, 0x69, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x73, 0x01, 0x06, + 0x64, 0x61, 0x79, 0x12, 0x70, 0x6f, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x64, 0x2e, 0x19, 0x70, 0x00, + 0x72, 0x00, 0x69, 0x00, 0x65, 0x00, 0x61, 0x01, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x64, 0x00, 0x2e, 0x00, 0x12, 0x64, + 0x61, 0x79, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x14, 0x64, 0x61, 0x79, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x17, 0x61, 0x01, 0x69, 0x00, + 0x05, 0x01, 0x20, 0x00, 0x76, 0x00, 0x61, 0x00, + 0x6c, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x64, 0x00, + 0x05, 0x01, 0x1e, 0x70, 0x6f, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x76, 0x61, 0x6c, 0x61, 0x6e, 0x64, + 0x6f, 0x73, 0x1d, 0x70, 0x00, 0x6f, 0x00, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x76, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x64, 0x00, 0x73, 0x01, 0x23, + 0x70, 0x00, 0x72, 0x00, 0x69, 0x00, 0x65, 0x00, + 0x61, 0x01, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x76, 0x00, 0x61, 0x00, + 0x6c, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x64, 0x00, + 0x05, 0x01, 0x25, 0x70, 0x00, 0x72, 0x00, 0x69, + 0x00, 0x65, 0x00, 0x61, 0x01, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x76, + 0x00, 0x61, 0x00, 0x6c, 0x00, 0x61, 0x00, 0x6e, + 0x00, 0x64, 0x00, 0x61, 0x00, 0x73, 0x00, 0x25, + 0x70, 0x00, 0x72, 0x00, 0x69, 0x00, 0x65, 0x00, + 0x61, 0x01, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x76, 0x00, 0x61, 0x00, + 0x6c, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x64, 0x00, + 0x6f, 0x00, 0x73, 0x00, 0x23, 0x70, 0x00, 0x72, + 0x00, 0x69, 0x00, 0x65, 0x00, 0x61, 0x01, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x76, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x64, 0x00, 0x73, 0x01, 0x08, + 0x68, 0x6f, 0x75, 0x72, 0x16, 0x70, 0x6f, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x76, 0x61, 0x6c, 0x2e, + 0x1d, 0x70, 0x00, 0x72, 0x00, 0x69, 0x00, 0x65, + 0x00, 0x61, 0x01, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x76, 0x00, 0x61, + 0x00, 0x6c, 0x00, 0x2e, 0x00, 0x14, 0x68, 0x6f, + 0x75, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x16, 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x15, 0x61, 0x01, 0x69, + 0x00, 0x05, 0x01, 0x20, 0x00, 0x6d, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x75, 0x00, 0x74, 0x00, 0x19, + 0x01, 0x1d, 0x70, 0x00, 0x6f, 0x00, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x6d, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x75, 0x00, + 0x74, 0x00, 0x17, 0x01, 0x73, 0x00, 0x1d, 0x70, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x6d, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x75, 0x00, 0x0d, 0x01, 0x69, + 0x00, 0x73, 0x01, 0x21, 0x70, 0x00, 0x72, 0x00, + 0x69, 0x00, 0x65, 0x00, 0x61, 0x01, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x6d, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x75, 0x00, + 0x74, 0x00, 0x19, 0x01, 0x23, 0x70, 0x00, 0x72, + 0x00, 0x69, 0x00, 0x65, 0x00, 0x61, 0x01, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x6d, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x75, + 0x00, 0x74, 0x00, 0x65, 0x00, 0x73, 0x00, 0x23, + 0x70, 0x00, 0x72, 0x00, 0x69, 0x00, 0x65, 0x00, + 0x61, 0x01, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x6d, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x75, 0x00, 0x74, 0x00, 0x17, 0x01, + 0x73, 0x00, 0x23, 0x70, 0x00, 0x72, 0x00, 0x69, + 0x00, 0x65, 0x00, 0x61, 0x01, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x6d, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x75, 0x00, 0x0d, + 0x01, 0x69, 0x00, 0x73, 0x01, 0x0c, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x65, 0x16, 0x70, 0x6f, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x2e, + 0x1d, 0x70, 0x00, 0x72, 0x00, 0x69, 0x00, 0x65, + 0x00, 0x61, 0x01, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x6d, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x2e, 0x00, 0x18, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x1a, 0x6d, 0x69, 0x6e, 0x75, 0x74, + 0x65, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x0a, 0x64, 0x61, 0x62, 0x61, 0x72, 0x1f, 0x70, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x73, 0x00, 0x65, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x64, + 0x00, 0x17, 0x01, 0x73, 0x00, 0x21, 0x70, 0x00, + 0x6f, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x73, 0x00, 0x65, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x64, 0x00, + 0x7e, 0x01, 0x69, 0x00, 0x73, 0x01, 0x23, 0x70, + 0x00, 0x72, 0x00, 0x69, 0x00, 0x65, 0x00, 0x61, + 0x01, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x73, 0x00, 0x65, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x64, 0x00, 0x19, + 0x01, 0x25, 0x70, 0x00, 0x72, 0x00, 0x69, 0x00, + 0x65, 0x00, 0x61, 0x01, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x73, 0x00, + 0x65, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6e, 0x00, + 0x64, 0x00, 0x65, 0x00, 0x73, 0x00, 0x25, 0x70, + 0x00, 0x72, 0x00, 0x69, 0x00, 0x65, 0x00, 0x61, + 0x01, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x73, 0x00, 0x65, 0x00, 0x6b, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x64, 0x00, 0x17, + 0x01, 0x73, 0x00, 0x27, 0x70, 0x00, 0x72, 0x00, + 0x69, 0x00, 0x65, 0x00, 0x61, 0x01, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x73, 0x00, 0x65, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x64, 0x00, 0x7e, 0x01, 0x69, 0x00, + 0x73, 0x01, 0x0c, 0x73, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x16, 0x70, 0x6f, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x73, 0x65, 0x6b, 0x2e, 0x1d, 0x70, 0x00, + 0x72, 0x00, 0x69, 0x00, 0x65, 0x00, 0x61, 0x01, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x73, 0x00, 0x65, 0x00, 0x6b, 0x00, + 0x2e, 0x00, 0x18, 0x73, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x10, + 0x70, 0x6f, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, + 0x17, 0x70, 0x00, 0x72, 0x00, 0x69, 0x00, 0x65, + 0x00, 0x61, 0x01, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x73, 0x00, 0x1a, + 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x08, 0x6c, 0x61, + 0x74, 0x6e, 0x04, 0x6e, 0x75, 0x08, 0x64, 0x61, + 0x74, 0x61, 0x70, 0x6e, 0x6f, 0x64, 0x65, 0x5f, + 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, + 0x69, 0x6e, 0x74, 0x6c, 0x2d, 0x72, 0x65, 0x6c, + 0x61, 0x74, 0x69, 0x76, 0x65, 0x2d, 0x74, 0x69, + 0x6d, 0x65, 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, + 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x6c, 0x74, + 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, + 0x01, 0x00, 0x01, 0x00, 0x07, 0x00, 0x00, 0xda, + 0x16, 0x01, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x06, + 0xc8, 0x04, 0xd0, 0x00, 0x00, 0x00, 0x39, 0xd1, + 0x00, 0x00, 0x00, 0x42, 0xd2, 0x00, 0x00, 0x00, + 0xaa, 0x6a, 0x45, 0x0b, 0x00, 0x00, 0x39, 0xd1, + 0x00, 0x00, 0x00, 0x42, 0xd2, 0x00, 0x00, 0x00, + 0x43, 0xd0, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd3, + 0x00, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xd7, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x04, 0xd9, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xdf, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x04, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xd7, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe3, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xe3, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x04, 0xe3, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0xe3, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x04, 0xe4, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xe4, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xd7, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe3, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xe3, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x04, 0xe3, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0xe3, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x04, 0xe4, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xe4, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xe8, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xe9, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xea, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x04, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xec, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x04, 0xee, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xef, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x4d, 0xf0, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0xf1, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf1, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x04, + 0xf1, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xf2, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x04, 0xf2, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x4d, 0xf3, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xf1, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xf1, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0xf1, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xf2, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf2, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x04, + 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x4d, 0xf4, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf5, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf8, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xf9, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0xf9, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xfa, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xfb, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x04, + 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x4d, 0xfe, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf5, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xff, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xff, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0xff, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x00, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x00, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x04, + 0x00, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xf5, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xff, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xff, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0xff, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x00, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x00, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x04, + 0x00, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x4d, 0x02, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x03, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x06, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x07, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x08, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x09, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x04, + 0x0a, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x4d, 0x0c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x03, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0d, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x0d, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x0d, 0x01, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x0e, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0e, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x04, + 0x0e, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x4d, 0x0f, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x03, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0d, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x0d, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x0d, 0x01, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x0e, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0e, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x04, + 0x0e, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x4d, 0x10, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x11, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, + 0x02, 0x00, 0x00, 0x80, 0x04, 0x14, 0x01, 0x00, + 0x00, 0x4d, 0x15, 0x01, 0x00, 0x00, 0x04, 0x16, + 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x18, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x04, 0x17, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x18, 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x19, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x1a, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x04, 0x1b, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x1c, 0x01, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x4d, 0x1d, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0x12, 0x01, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x13, + 0x01, 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, + 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, 0x15, 0x01, + 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x1e, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x1e, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x1e, 0x01, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x1f, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x1f, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x04, + 0x1f, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x1f, 0x01, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x4d, 0x20, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x11, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, + 0x02, 0x00, 0x00, 0x80, 0x04, 0x14, 0x01, 0x00, + 0x00, 0x4d, 0x15, 0x01, 0x00, 0x00, 0x04, 0x16, + 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x1e, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x04, 0x1e, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x1e, 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x1f, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x1f, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x04, 0x1f, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x1f, 0x01, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x4d, 0x21, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x22, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x23, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x24, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x04, 0x23, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x24, 0x01, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x25, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x26, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x04, + 0x27, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x28, 0x01, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x4d, 0x29, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x2a, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x2a, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x04, 0x2a, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x2a, 0x01, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x2b, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x2b, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x04, 0x2b, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x2b, 0x01, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x4d, 0x2c, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x2a, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x2a, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x04, 0x2a, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x2a, 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x2b, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x2b, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x04, 0x2b, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x2b, 0x01, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x4d, 0x2d, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x2e, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x2f, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x30, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x30, 0x01, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x31, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x32, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x04, + 0x33, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x34, 0x01, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x4d, 0x35, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x36, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x36, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x04, 0x36, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x36, 0x01, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x37, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x37, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x04, 0x37, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x37, 0x01, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x4d, 0x38, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x36, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x36, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x04, 0x36, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x36, 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x37, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x37, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x04, 0x37, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x37, 0x01, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x4d, 0x39, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x3a, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x3b, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x3c, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x04, 0x3b, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x3c, 0x01, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x3d, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x3e, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x04, + 0x3f, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x40, 0x01, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x4d, 0x41, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x42, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x42, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x04, 0x42, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x42, 0x01, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x43, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x43, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x04, 0x43, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x43, 0x01, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x4d, 0x44, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x45, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x04, 0x45, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x45, 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x4d, 0x47, 0x01, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x49, 0x01, 0x00, 0x00, 0x4d, 0x4a, + 0x01, 0x00, 0x00, 0x24, 0x01, 0x00, 0xc8, 0xc4, + 0x28, 0x96, 0x05, 0x01, 0x89, 0x03, 0x76, 0x53, + 0x35, 0x08, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x1c, 0x1c, 0x1c, 0x12, 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_lv_size = 5174; + +const uint8_t intl_relative_lv[5174] = { + 0x01, 0x7f, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x04, 0x6c, 0x76, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x13, 0x61, 0x01, 0x61, + 0x00, 0x6a, 0x00, 0x01, 0x01, 0x20, 0x00, 0x67, + 0x00, 0x61, 0x00, 0x64, 0x00, 0x01, 0x01, 0x1b, + 0x6e, 0x00, 0x01, 0x01, 0x6b, 0x00, 0x61, 0x00, + 0x6d, 0x00, 0x61, 0x00, 0x6a, 0x00, 0x01, 0x01, + 0x20, 0x00, 0x67, 0x00, 0x61, 0x00, 0x64, 0x00, + 0x01, 0x01, 0x1f, 0x70, 0x00, 0x61, 0x00, 0x67, + 0x00, 0x01, 0x01, 0x6a, 0x00, 0x75, 0x00, 0x61, + 0x01, 0x61, 0x00, 0x6a, 0x00, 0x01, 0x01, 0x20, + 0x00, 0x67, 0x00, 0x61, 0x00, 0x64, 0x00, 0x01, + 0x01, 0x04, 0x2d, 0x31, 0x1d, 0x70, 0x00, 0x13, + 0x01, 0x63, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x67, 0x00, 0x61, + 0x00, 0x64, 0x00, 0x69, 0x00, 0x65, 0x00, 0x6d, + 0x00, 0x08, 0x7a, 0x65, 0x72, 0x6f, 0x19, 0x70, + 0x00, 0x13, 0x01, 0x63, 0x00, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x67, + 0x00, 0x61, 0x00, 0x64, 0x00, 0x61, 0x00, 0x06, + 0x6f, 0x6e, 0x65, 0x0a, 0x6f, 0x74, 0x68, 0x65, + 0x72, 0x0c, 0x66, 0x75, 0x74, 0x75, 0x72, 0x65, + 0x20, 0x70, 0x69, 0x72, 0x6d, 0x73, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x67, 0x61, 0x64, 0x69, 0x65, + 0x6d, 0x1c, 0x70, 0x69, 0x72, 0x6d, 0x73, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x67, 0x61, 0x64, 0x61, + 0x08, 0x70, 0x61, 0x73, 0x74, 0x08, 0x79, 0x65, + 0x61, 0x72, 0x0f, 0x61, 0x01, 0x61, 0x00, 0x6a, + 0x00, 0x01, 0x01, 0x20, 0x00, 0x67, 0x00, 0x2e, + 0x00, 0x13, 0x6e, 0x00, 0x01, 0x01, 0x6b, 0x00, + 0x2e, 0x00, 0x20, 0x00, 0x67, 0x00, 0x61, 0x00, + 0x64, 0x00, 0x01, 0x01, 0x13, 0x70, 0x00, 0x61, + 0x00, 0x67, 0x00, 0x2e, 0x00, 0x20, 0x00, 0x67, + 0x00, 0x61, 0x00, 0x64, 0x00, 0x01, 0x01, 0x15, + 0x70, 0x00, 0x13, 0x01, 0x63, 0x00, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x67, 0x00, 0x2e, 0x00, 0x18, 0x70, 0x69, 0x72, + 0x6d, 0x73, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x67, + 0x2e, 0x14, 0x79, 0x65, 0x61, 0x72, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x16, 0x79, 0x65, 0x61, + 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x1d, 0x61, 0x01, 0x69, 0x00, 0x73, 0x00, 0x20, + 0x00, 0x63, 0x00, 0x65, 0x00, 0x74, 0x00, 0x75, + 0x00, 0x72, 0x00, 0x6b, 0x00, 0x73, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x73, 0x00, 0x27, 0x6e, 0x00, + 0x01, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x6d, 0x00, + 0x61, 0x00, 0x69, 0x00, 0x73, 0x00, 0x20, 0x00, + 0x63, 0x00, 0x65, 0x00, 0x74, 0x00, 0x75, 0x00, + 0x72, 0x00, 0x6b, 0x00, 0x73, 0x00, 0x6e, 0x00, + 0x69, 0x00, 0x73, 0x00, 0x27, 0x70, 0x00, 0x13, + 0x01, 0x64, 0x00, 0x13, 0x01, 0x6a, 0x00, 0x61, + 0x00, 0x69, 0x00, 0x73, 0x00, 0x20, 0x00, 0x63, + 0x00, 0x65, 0x00, 0x74, 0x00, 0x75, 0x00, 0x72, + 0x00, 0x6b, 0x00, 0x73, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x73, 0x00, 0x27, 0x70, 0x00, 0x13, 0x01, + 0x63, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0xa0, 0x00, 0x63, 0x00, 0x65, 0x00, + 0x74, 0x00, 0x75, 0x00, 0x72, 0x00, 0x6b, 0x00, + 0x61, 0x01, 0x46, 0x01, 0x69, 0x00, 0x65, 0x00, + 0x6d, 0x00, 0x23, 0x70, 0x00, 0x13, 0x01, 0x63, + 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0xa0, 0x00, 0x63, 0x00, 0x65, 0x00, 0x74, + 0x00, 0x75, 0x00, 0x72, 0x00, 0x6b, 0x00, 0x61, + 0x01, 0x46, 0x01, 0x61, 0x00, 0x2b, 0x70, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x6d, 0x00, 0x73, 0x00, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0xa0, 0x00, 0x63, 0x00, 0x65, 0x00, 0x74, 0x00, + 0x75, 0x00, 0x72, 0x00, 0x6b, 0x00, 0x61, 0x01, + 0x46, 0x01, 0x69, 0x00, 0x65, 0x00, 0x6d, 0x00, + 0x27, 0x70, 0x00, 0x69, 0x00, 0x72, 0x00, 0x6d, + 0x00, 0x73, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0xa0, 0x00, 0x63, 0x00, 0x65, + 0x00, 0x74, 0x00, 0x75, 0x00, 0x72, 0x00, 0x6b, + 0x00, 0x61, 0x01, 0x46, 0x01, 0x61, 0x00, 0x0e, + 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x19, + 0x70, 0x00, 0x13, 0x01, 0x63, 0x00, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0xa0, 0x00, + 0x63, 0x00, 0x65, 0x00, 0x74, 0x00, 0x2e, 0x00, + 0x1c, 0x70, 0x69, 0x72, 0x6d, 0x73, 0x20, 0x7b, + 0x30, 0x7d, 0xa0, 0x63, 0x65, 0x74, 0x2e, 0x1a, + 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1c, 0x71, 0x75, + 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x17, 0x61, 0x01, 0x61, + 0x00, 0x6a, 0x00, 0x01, 0x01, 0x20, 0x00, 0x6d, + 0x00, 0x13, 0x01, 0x6e, 0x00, 0x65, 0x00, 0x73, + 0x00, 0x2b, 0x01, 0x1f, 0x6e, 0x00, 0x01, 0x01, + 0x6b, 0x00, 0x61, 0x00, 0x6d, 0x00, 0x61, 0x00, + 0x6a, 0x00, 0x01, 0x01, 0x20, 0x00, 0x6d, 0x00, + 0x13, 0x01, 0x6e, 0x00, 0x65, 0x00, 0x73, 0x00, + 0x2b, 0x01, 0x23, 0x70, 0x00, 0x61, 0x00, 0x67, + 0x00, 0x01, 0x01, 0x6a, 0x00, 0x75, 0x00, 0x61, + 0x01, 0x61, 0x00, 0x6a, 0x00, 0x01, 0x01, 0x20, + 0x00, 0x6d, 0x00, 0x13, 0x01, 0x6e, 0x00, 0x65, + 0x00, 0x73, 0x00, 0x2b, 0x01, 0x21, 0x70, 0x00, + 0x13, 0x01, 0x63, 0x00, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x6d, 0x00, + 0x13, 0x01, 0x6e, 0x00, 0x65, 0x00, 0x61, 0x01, + 0x69, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x1d, 0x70, + 0x00, 0x13, 0x01, 0x63, 0x00, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x6d, + 0x00, 0x13, 0x01, 0x6e, 0x00, 0x65, 0x00, 0x61, + 0x01, 0x61, 0x00, 0x25, 0x70, 0x00, 0x69, 0x00, + 0x72, 0x00, 0x6d, 0x00, 0x73, 0x00, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x6d, 0x00, 0x13, 0x01, 0x6e, 0x00, 0x65, 0x00, + 0x61, 0x01, 0x69, 0x00, 0x65, 0x00, 0x6d, 0x00, + 0x21, 0x70, 0x00, 0x69, 0x00, 0x72, 0x00, 0x6d, + 0x00, 0x73, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x6d, 0x00, 0x13, + 0x01, 0x6e, 0x00, 0x65, 0x00, 0x61, 0x01, 0x61, + 0x00, 0x0a, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x13, + 0x61, 0x01, 0x61, 0x00, 0x6a, 0x00, 0x01, 0x01, + 0x20, 0x00, 0x6d, 0x00, 0x13, 0x01, 0x6e, 0x00, + 0x2e, 0x00, 0x13, 0x6e, 0x00, 0x01, 0x01, 0x6b, + 0x00, 0x2e, 0x00, 0x20, 0x00, 0x6d, 0x00, 0x13, + 0x01, 0x6e, 0x00, 0x2e, 0x00, 0x13, 0x70, 0x00, + 0x61, 0x00, 0x67, 0x00, 0x2e, 0x00, 0x20, 0x00, + 0x6d, 0x00, 0x13, 0x01, 0x6e, 0x00, 0x2e, 0x00, + 0x19, 0x70, 0x00, 0x13, 0x01, 0x63, 0x00, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x6d, 0x00, 0x13, 0x01, 0x6e, 0x00, 0x2e, + 0x00, 0x1d, 0x70, 0x00, 0x69, 0x00, 0x72, 0x00, + 0x6d, 0x00, 0x73, 0x00, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x6d, 0x00, + 0x13, 0x01, 0x6e, 0x00, 0x2e, 0x00, 0x16, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x18, 0x6d, 0x6f, 0x6e, 0x74, 0x68, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x17, + 0x61, 0x01, 0x61, 0x00, 0x6a, 0x00, 0x01, 0x01, + 0x20, 0x00, 0x6e, 0x00, 0x65, 0x00, 0x64, 0x00, + 0x13, 0x01, 0x3c, 0x01, 0x01, 0x01, 0x1f, 0x6e, + 0x00, 0x01, 0x01, 0x6b, 0x00, 0x61, 0x00, 0x6d, + 0x00, 0x61, 0x00, 0x6a, 0x00, 0x01, 0x01, 0x20, + 0x00, 0x6e, 0x00, 0x65, 0x00, 0x64, 0x00, 0x13, + 0x01, 0x3c, 0x01, 0x01, 0x01, 0x23, 0x70, 0x00, + 0x61, 0x00, 0x67, 0x00, 0x01, 0x01, 0x6a, 0x00, + 0x75, 0x00, 0x61, 0x01, 0x61, 0x00, 0x6a, 0x00, + 0x01, 0x01, 0x20, 0x00, 0x6e, 0x00, 0x65, 0x00, + 0x64, 0x00, 0x13, 0x01, 0x3c, 0x01, 0x01, 0x01, + 0x1f, 0x70, 0x00, 0x13, 0x01, 0x63, 0x00, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x6e, 0x00, 0x65, 0x00, 0x64, 0x00, 0x13, + 0x01, 0x3c, 0x01, 0x01, 0x01, 0x6d, 0x00, 0x1f, + 0x70, 0x00, 0x13, 0x01, 0x63, 0x00, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x6e, 0x00, 0x65, 0x00, 0x64, 0x00, 0x13, 0x01, + 0x3c, 0x01, 0x61, 0x00, 0x73, 0x00, 0x23, 0x70, + 0x00, 0x69, 0x00, 0x72, 0x00, 0x6d, 0x00, 0x73, + 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x6e, 0x00, 0x65, 0x00, 0x64, + 0x00, 0x13, 0x01, 0x3c, 0x01, 0x01, 0x01, 0x6d, + 0x00, 0x23, 0x70, 0x00, 0x69, 0x00, 0x72, 0x00, + 0x6d, 0x00, 0x73, 0x00, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x6e, 0x00, + 0x65, 0x00, 0x64, 0x00, 0x13, 0x01, 0x3c, 0x01, + 0x61, 0x00, 0x73, 0x00, 0x08, 0x77, 0x65, 0x65, + 0x6b, 0x13, 0x61, 0x01, 0x61, 0x00, 0x6a, 0x00, + 0x01, 0x01, 0x20, 0x00, 0x6e, 0x00, 0x65, 0x00, + 0x64, 0x00, 0x2e, 0x00, 0x13, 0x6e, 0x00, 0x01, + 0x01, 0x6b, 0x00, 0x2e, 0x00, 0x20, 0x00, 0x6e, + 0x00, 0x65, 0x00, 0x64, 0x00, 0x2e, 0x00, 0x12, + 0x70, 0x61, 0x67, 0x2e, 0x20, 0x6e, 0x65, 0x64, + 0x2e, 0x19, 0x70, 0x00, 0x13, 0x01, 0x63, 0x00, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x6e, 0x00, 0x65, 0x00, 0x64, 0x00, + 0x2e, 0x00, 0x1c, 0x70, 0x69, 0x72, 0x6d, 0x73, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6e, 0x65, 0x64, + 0x2e, 0x14, 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x16, 0x77, 0x65, 0x65, + 0x6b, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x0d, 0x61, 0x01, 0x6f, 0x00, 0x64, 0x00, 0x69, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x07, 0x72, 0x00, + 0x2b, 0x01, 0x74, 0x00, 0x0b, 0x70, 0x00, 0x61, + 0x00, 0x72, 0x00, 0x2b, 0x01, 0x74, 0x00, 0x10, + 0x61, 0x69, 0x7a, 0x76, 0x61, 0x6b, 0x61, 0x72, + 0x04, 0x2d, 0x32, 0x0a, 0x76, 0x61, 0x6b, 0x61, + 0x72, 0x1d, 0x70, 0x00, 0x13, 0x01, 0x63, 0x00, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x64, 0x00, 0x69, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x01, 0x01, 0x6d, 0x00, 0x1d, 0x70, + 0x00, 0x13, 0x01, 0x63, 0x00, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x64, + 0x00, 0x69, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x73, 0x00, 0x21, 0x70, 0x00, 0x69, 0x00, + 0x72, 0x00, 0x6d, 0x00, 0x73, 0x00, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x64, 0x00, 0x69, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x01, 0x01, 0x6d, 0x00, 0x20, 0x70, 0x69, 0x72, + 0x6d, 0x73, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x64, + 0x69, 0x65, 0x6e, 0x61, 0x73, 0x06, 0x64, 0x61, + 0x79, 0x15, 0x70, 0x00, 0x13, 0x01, 0x63, 0x00, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x64, 0x00, 0x2e, 0x00, 0x15, 0x70, + 0x00, 0x13, 0x01, 0x63, 0x00, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0xa0, 0x00, 0x64, + 0x00, 0x2e, 0x00, 0x18, 0x70, 0x69, 0x72, 0x6d, + 0x73, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x64, 0x2e, + 0x18, 0x70, 0x69, 0x72, 0x6d, 0x73, 0x20, 0x7b, + 0x30, 0x7d, 0xa0, 0x64, 0x2e, 0x12, 0x64, 0x61, + 0x79, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x14, + 0x64, 0x61, 0x79, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x17, 0x61, 0x01, 0x61, 0x00, 0x6a, + 0x00, 0x01, 0x01, 0x20, 0x00, 0x73, 0x00, 0x74, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x64, 0x00, 0x01, + 0x01, 0x1f, 0x70, 0x00, 0x13, 0x01, 0x63, 0x00, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x73, 0x00, 0x74, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x64, 0x00, 0x01, 0x01, 0x6d, 0x00, + 0x1f, 0x70, 0x00, 0x13, 0x01, 0x63, 0x00, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x73, 0x00, 0x74, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x64, 0x00, 0x61, 0x00, 0x73, 0x00, 0x23, + 0x70, 0x00, 0x69, 0x00, 0x72, 0x00, 0x6d, 0x00, + 0x73, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x73, 0x00, 0x74, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x64, 0x00, 0x01, 0x01, + 0x6d, 0x00, 0x22, 0x70, 0x69, 0x72, 0x6d, 0x73, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x74, 0x75, + 0x6e, 0x64, 0x61, 0x73, 0x08, 0x68, 0x6f, 0x75, + 0x72, 0x17, 0x70, 0x00, 0x13, 0x01, 0x63, 0x00, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0xa0, 0x00, 0x73, 0x00, 0x74, 0x00, 0x2e, 0x00, + 0x1a, 0x70, 0x69, 0x72, 0x6d, 0x73, 0x20, 0x7b, + 0x30, 0x7d, 0xa0, 0x73, 0x74, 0x2e, 0x14, 0x68, + 0x6f, 0x75, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x13, 0x70, 0x00, 0x13, 0x01, 0x63, 0x00, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x68, 0x00, 0x16, 0x70, 0x69, 0x72, + 0x6d, 0x73, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x68, + 0x16, 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x17, 0x61, 0x01, 0x61, + 0x00, 0x6a, 0x00, 0x01, 0x01, 0x20, 0x00, 0x6d, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6b, 0x01, 0x74, + 0x00, 0x13, 0x01, 0x1f, 0x70, 0x00, 0x13, 0x01, + 0x63, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x6d, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x6b, 0x01, 0x74, 0x00, 0x13, 0x01, + 0x6d, 0x00, 0x1f, 0x70, 0x00, 0x13, 0x01, 0x63, + 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x6d, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x6b, 0x01, 0x74, 0x00, 0x65, 0x00, 0x73, + 0x00, 0x23, 0x70, 0x00, 0x69, 0x00, 0x72, 0x00, + 0x6d, 0x00, 0x73, 0x00, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x6d, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x6b, 0x01, 0x74, 0x00, + 0x13, 0x01, 0x6d, 0x00, 0x23, 0x70, 0x00, 0x69, + 0x00, 0x72, 0x00, 0x6d, 0x00, 0x73, 0x00, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x6d, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x6b, + 0x01, 0x74, 0x00, 0x65, 0x00, 0x73, 0x00, 0x0c, + 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x19, 0x70, + 0x00, 0x13, 0x01, 0x63, 0x00, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x6d, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x2e, 0x00, 0x1c, + 0x70, 0x69, 0x72, 0x6d, 0x73, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x2e, 0x18, 0x6d, + 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x17, 0x70, 0x00, 0x13, 0x01, + 0x63, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x6d, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x17, 0x70, 0x00, 0x13, 0x01, 0x63, + 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0xa0, 0x00, 0x6d, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x1a, 0x70, 0x69, 0x72, 0x6d, 0x73, 0x20, + 0x7b, 0x30, 0x7d, 0xa0, 0x6d, 0x69, 0x6e, 0x1a, + 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0a, 0x74, 0x61, + 0x67, 0x61, 0x64, 0x21, 0x70, 0x00, 0x13, 0x01, + 0x63, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x73, 0x00, 0x65, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x64, 0x00, + 0x13, 0x01, 0x6d, 0x00, 0x21, 0x70, 0x00, 0x13, + 0x01, 0x63, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x73, 0x00, 0x65, + 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x64, + 0x00, 0x65, 0x00, 0x73, 0x00, 0x25, 0x70, 0x00, + 0x69, 0x00, 0x72, 0x00, 0x6d, 0x00, 0x73, 0x00, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x73, 0x00, 0x65, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x64, 0x00, 0x13, 0x01, + 0x6d, 0x00, 0x24, 0x70, 0x69, 0x72, 0x6d, 0x73, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, 0x6b, + 0x75, 0x6e, 0x64, 0x65, 0x73, 0x0c, 0x73, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x19, 0x70, 0x00, 0x13, + 0x01, 0x63, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x73, 0x00, 0x65, + 0x00, 0x6b, 0x00, 0x2e, 0x00, 0x1c, 0x70, 0x69, + 0x72, 0x6d, 0x73, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x73, 0x65, 0x6b, 0x2e, 0x18, 0x73, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x13, 0x70, 0x00, 0x13, 0x01, 0x63, 0x00, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0xa0, 0x00, 0x73, 0x00, 0x16, 0x70, 0x69, 0x72, + 0x6d, 0x73, 0x20, 0x7b, 0x30, 0x7d, 0xa0, 0x73, + 0x16, 0x70, 0x69, 0x72, 0x6d, 0x73, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x73, 0x1a, 0x73, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, + 0x6e, 0x75, 0x08, 0x64, 0x61, 0x74, 0x61, 0x70, + 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, + 0x6c, 0x2d, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, + 0x76, 0x65, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2d, + 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2f, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, + 0x74, 0x61, 0x2f, 0x6c, 0x76, 0x2e, 0x6a, 0x73, + 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, + 0x00, 0x07, 0x00, 0x00, 0x96, 0x12, 0x01, 0xa0, + 0x01, 0x00, 0x00, 0x00, 0x06, 0xc8, 0x04, 0xd0, + 0x00, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, + 0x42, 0xd2, 0x00, 0x00, 0x00, 0xaa, 0x6a, 0x01, + 0x09, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, + 0x42, 0xd2, 0x00, 0x00, 0x00, 0x43, 0xd0, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd3, 0x00, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xdf, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xdf, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe3, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xe4, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xe5, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xe6, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe7, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, + 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe3, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xe5, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xe7, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xe7, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x4d, 0xe9, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xec, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xee, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xed, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xef, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, + 0x00, 0x4d, 0xf1, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0xf2, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf3, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf3, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x4d, + 0xf4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xf2, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xf3, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xf3, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x4d, 0xf5, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xf6, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xf7, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xf8, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xfa, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xf9, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfb, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, + 0x00, 0x4d, 0xfd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xfe, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x00, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x01, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x02, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x02, + 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x4d, 0x03, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xfe, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xff, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0x00, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x01, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x01, + 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x02, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, + 0x00, 0x4d, 0x04, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x05, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x07, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x08, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x0b, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x0a, + 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x4d, 0x0c, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x0d, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x0e, 0x01, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0x0f, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x10, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x10, + 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x11, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, + 0x00, 0x4d, 0x12, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x0d, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x0f, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x10, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x11, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x11, + 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x4d, 0x13, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x14, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, + 0x80, 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, 0x18, + 0x01, 0x00, 0x00, 0x04, 0x19, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x1a, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x1b, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x1a, 0x01, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x1c, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x1d, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x1c, + 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x4d, 0x1e, 0x01, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x1f, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x20, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x1f, 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x22, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x21, 0x01, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x4d, 0x23, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x1f, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x20, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x1f, + 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x21, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x22, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, + 0x00, 0x4d, 0x24, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x25, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x27, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x26, + 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x28, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x29, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x28, 0x01, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, + 0x00, 0x4d, 0x2a, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x2b, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x2b, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x2b, 0x01, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x2c, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x2c, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x2c, 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x4d, + 0x2d, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x2e, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x2e, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x2e, 0x01, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x2f, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x2f, + 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x4d, 0x30, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x31, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x32, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x33, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x32, 0x01, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x34, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x35, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x34, + 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x4d, 0x36, 0x01, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x37, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x37, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x37, 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x38, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x38, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x38, 0x01, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x4d, 0x39, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x3a, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x3b, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x3a, + 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x3c, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x3c, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x3c, 0x01, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, + 0x00, 0x4d, 0x3d, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x3e, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x3f, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x40, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x3f, + 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x41, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x42, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x41, 0x01, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, + 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x44, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x44, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x44, 0x01, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x45, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x45, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x45, 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x4d, + 0x46, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x47, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x48, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x48, + 0x01, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x4d, 0x4a, 0x01, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x4d, + 0x4d, 0x01, 0x00, 0x00, 0x24, 0x01, 0x00, 0xc8, + 0xc4, 0x28, 0x9c, 0x05, 0x01, 0xcf, 0x02, 0x76, + 0x53, 0x35, 0x08, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x08, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x08, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x1c, + 0x1c, 0x1c, 0x12, 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_mk_size = 4416; + +const uint8_t intl_relative_mk[4416] = { + 0x01, 0x66, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x04, 0x6d, 0x6b, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x17, 0x3e, 0x04, 0x32, + 0x04, 0x30, 0x04, 0x30, 0x04, 0x20, 0x00, 0x33, + 0x04, 0x3e, 0x04, 0x34, 0x04, 0x38, 0x04, 0x3d, + 0x04, 0x30, 0x04, 0x1f, 0x41, 0x04, 0x3b, 0x04, + 0x35, 0x04, 0x34, 0x04, 0x3d, 0x04, 0x30, 0x04, + 0x42, 0x04, 0x30, 0x04, 0x20, 0x00, 0x33, 0x04, + 0x3e, 0x04, 0x34, 0x04, 0x38, 0x04, 0x3d, 0x04, + 0x30, 0x04, 0x1f, 0x3c, 0x04, 0x38, 0x04, 0x3d, + 0x04, 0x30, 0x04, 0x42, 0x04, 0x30, 0x04, 0x42, + 0x04, 0x30, 0x04, 0x20, 0x00, 0x33, 0x04, 0x3e, + 0x04, 0x34, 0x04, 0x38, 0x04, 0x3d, 0x04, 0x30, + 0x04, 0x04, 0x2d, 0x31, 0x1b, 0x37, 0x04, 0x30, + 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x33, 0x04, 0x3e, 0x04, 0x34, + 0x04, 0x38, 0x04, 0x3d, 0x04, 0x30, 0x04, 0x06, + 0x6f, 0x6e, 0x65, 0x1b, 0x37, 0x04, 0x30, 0x04, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x33, 0x04, 0x3e, 0x04, 0x34, 0x04, + 0x38, 0x04, 0x3d, 0x04, 0x38, 0x04, 0x0a, 0x6f, + 0x74, 0x68, 0x65, 0x72, 0x0c, 0x66, 0x75, 0x74, + 0x75, 0x72, 0x65, 0x1f, 0x3f, 0x04, 0x40, 0x04, + 0x35, 0x04, 0x34, 0x04, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x33, 0x04, + 0x3e, 0x04, 0x34, 0x04, 0x38, 0x04, 0x3d, 0x04, + 0x30, 0x04, 0x1f, 0x3f, 0x04, 0x40, 0x04, 0x35, + 0x04, 0x34, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x33, 0x04, 0x3e, + 0x04, 0x34, 0x04, 0x38, 0x04, 0x3d, 0x04, 0x38, + 0x04, 0x08, 0x70, 0x61, 0x73, 0x74, 0x08, 0x79, + 0x65, 0x61, 0x72, 0x13, 0x3e, 0x04, 0x32, 0x04, + 0x30, 0x04, 0x30, 0x04, 0x20, 0x00, 0x33, 0x04, + 0x3e, 0x04, 0x34, 0x04, 0x2e, 0x00, 0x1b, 0x41, + 0x04, 0x3b, 0x04, 0x35, 0x04, 0x34, 0x04, 0x3d, + 0x04, 0x30, 0x04, 0x42, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x33, 0x04, 0x3e, 0x04, 0x34, 0x04, 0x2e, + 0x00, 0x1b, 0x3c, 0x04, 0x38, 0x04, 0x3d, 0x04, + 0x30, 0x04, 0x42, 0x04, 0x30, 0x04, 0x42, 0x04, + 0x30, 0x04, 0x20, 0x00, 0x33, 0x04, 0x3e, 0x04, + 0x34, 0x04, 0x2e, 0x00, 0x17, 0x37, 0x04, 0x30, + 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x33, 0x04, 0x3e, 0x04, 0x34, + 0x04, 0x2e, 0x00, 0x1b, 0x3f, 0x04, 0x40, 0x04, + 0x35, 0x04, 0x34, 0x04, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x33, 0x04, + 0x3e, 0x04, 0x34, 0x04, 0x2e, 0x00, 0x14, 0x79, + 0x65, 0x61, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x16, 0x79, 0x65, 0x61, 0x72, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x1d, 0x3e, 0x04, + 0x32, 0x04, 0x30, 0x04, 0x20, 0x00, 0x42, 0x04, + 0x40, 0x04, 0x3e, 0x04, 0x3c, 0x04, 0x35, 0x04, + 0x41, 0x04, 0x35, 0x04, 0x47, 0x04, 0x58, 0x04, + 0x35, 0x04, 0x27, 0x41, 0x04, 0x3b, 0x04, 0x35, + 0x04, 0x34, 0x04, 0x3d, 0x04, 0x3e, 0x04, 0x42, + 0x04, 0x3e, 0x04, 0x20, 0x00, 0x42, 0x04, 0x40, + 0x04, 0x3e, 0x04, 0x3c, 0x04, 0x35, 0x04, 0x41, + 0x04, 0x35, 0x04, 0x47, 0x04, 0x58, 0x04, 0x35, + 0x04, 0x2b, 0x3f, 0x04, 0x3e, 0x04, 0x41, 0x04, + 0x3b, 0x04, 0x35, 0x04, 0x34, 0x04, 0x3d, 0x04, + 0x3e, 0x04, 0x42, 0x04, 0x3e, 0x04, 0x20, 0x00, + 0x42, 0x04, 0x40, 0x04, 0x3e, 0x04, 0x3c, 0x04, + 0x35, 0x04, 0x41, 0x04, 0x35, 0x04, 0x47, 0x04, + 0x58, 0x04, 0x35, 0x04, 0x23, 0x37, 0x04, 0x30, + 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x42, 0x04, 0x40, 0x04, 0x3e, + 0x04, 0x3c, 0x04, 0x35, 0x04, 0x41, 0x04, 0x35, + 0x04, 0x47, 0x04, 0x58, 0x04, 0x35, 0x04, 0x23, + 0x37, 0x04, 0x30, 0x04, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x42, 0x04, + 0x40, 0x04, 0x3e, 0x04, 0x3c, 0x04, 0x35, 0x04, + 0x41, 0x04, 0x35, 0x04, 0x47, 0x04, 0x58, 0x04, + 0x30, 0x04, 0x27, 0x3f, 0x04, 0x40, 0x04, 0x35, + 0x04, 0x34, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x42, 0x04, 0x40, + 0x04, 0x3e, 0x04, 0x3c, 0x04, 0x35, 0x04, 0x41, + 0x04, 0x35, 0x04, 0x47, 0x04, 0x58, 0x04, 0x35, + 0x04, 0x27, 0x3f, 0x04, 0x40, 0x04, 0x35, 0x04, + 0x34, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x42, 0x04, 0x40, 0x04, + 0x3e, 0x04, 0x3c, 0x04, 0x35, 0x04, 0x41, 0x04, + 0x35, 0x04, 0x47, 0x04, 0x58, 0x04, 0x30, 0x04, + 0x0e, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, + 0x1d, 0x37, 0x04, 0x30, 0x04, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x42, + 0x04, 0x40, 0x04, 0x3e, 0x04, 0x3c, 0x04, 0x35, + 0x04, 0x41, 0x04, 0x2e, 0x00, 0x21, 0x3f, 0x04, + 0x40, 0x04, 0x35, 0x04, 0x34, 0x04, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x42, 0x04, 0x40, 0x04, 0x3e, 0x04, 0x3c, 0x04, + 0x35, 0x04, 0x41, 0x04, 0x2e, 0x00, 0x1a, 0x71, + 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x1c, 0x71, 0x75, 0x61, + 0x72, 0x74, 0x65, 0x72, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x15, 0x3e, 0x04, 0x32, 0x04, + 0x3e, 0x04, 0x58, 0x04, 0x20, 0x00, 0x3c, 0x04, + 0x35, 0x04, 0x41, 0x04, 0x35, 0x04, 0x46, 0x04, + 0x1d, 0x41, 0x04, 0x3b, 0x04, 0x35, 0x04, 0x34, + 0x04, 0x3d, 0x04, 0x38, 0x04, 0x3e, 0x04, 0x42, + 0x04, 0x20, 0x00, 0x3c, 0x04, 0x35, 0x04, 0x41, + 0x04, 0x35, 0x04, 0x46, 0x04, 0x1d, 0x3c, 0x04, + 0x38, 0x04, 0x3d, 0x04, 0x30, 0x04, 0x42, 0x04, + 0x38, 0x04, 0x3e, 0x04, 0x42, 0x04, 0x20, 0x00, + 0x3c, 0x04, 0x35, 0x04, 0x41, 0x04, 0x35, 0x04, + 0x46, 0x04, 0x19, 0x37, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x3c, 0x04, 0x35, 0x04, 0x41, 0x04, 0x35, + 0x04, 0x46, 0x04, 0x1b, 0x37, 0x04, 0x30, 0x04, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x3c, 0x04, 0x35, 0x04, 0x41, 0x04, + 0x35, 0x04, 0x46, 0x04, 0x38, 0x04, 0x1d, 0x3f, + 0x04, 0x40, 0x04, 0x35, 0x04, 0x34, 0x04, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x3c, 0x04, 0x35, 0x04, 0x41, 0x04, 0x35, + 0x04, 0x46, 0x04, 0x1f, 0x3f, 0x04, 0x40, 0x04, + 0x35, 0x04, 0x34, 0x04, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3c, 0x04, + 0x35, 0x04, 0x41, 0x04, 0x35, 0x04, 0x46, 0x04, + 0x38, 0x04, 0x0a, 0x6d, 0x6f, 0x6e, 0x74, 0x68, + 0x16, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x18, 0x6d, 0x6f, 0x6e, + 0x74, 0x68, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x19, 0x3e, 0x04, 0x32, 0x04, 0x30, 0x04, + 0x30, 0x04, 0x20, 0x00, 0x41, 0x04, 0x35, 0x04, + 0x34, 0x04, 0x3c, 0x04, 0x38, 0x04, 0x46, 0x04, + 0x30, 0x04, 0x21, 0x41, 0x04, 0x3b, 0x04, 0x35, + 0x04, 0x34, 0x04, 0x3d, 0x04, 0x30, 0x04, 0x42, + 0x04, 0x30, 0x04, 0x20, 0x00, 0x41, 0x04, 0x35, + 0x04, 0x34, 0x04, 0x3c, 0x04, 0x38, 0x04, 0x46, + 0x04, 0x30, 0x04, 0x21, 0x3c, 0x04, 0x38, 0x04, + 0x3d, 0x04, 0x30, 0x04, 0x42, 0x04, 0x30, 0x04, + 0x42, 0x04, 0x30, 0x04, 0x20, 0x00, 0x41, 0x04, + 0x35, 0x04, 0x34, 0x04, 0x3c, 0x04, 0x38, 0x04, + 0x46, 0x04, 0x30, 0x04, 0x1d, 0x37, 0x04, 0x30, + 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x41, 0x04, 0x35, 0x04, 0x34, + 0x04, 0x3c, 0x04, 0x38, 0x04, 0x46, 0x04, 0x30, + 0x04, 0x1d, 0x37, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x41, 0x04, 0x35, 0x04, 0x34, 0x04, 0x3c, 0x04, + 0x38, 0x04, 0x46, 0x04, 0x38, 0x04, 0x21, 0x3f, + 0x04, 0x40, 0x04, 0x35, 0x04, 0x34, 0x04, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x41, 0x04, 0x35, 0x04, 0x34, 0x04, 0x3c, + 0x04, 0x38, 0x04, 0x46, 0x04, 0x30, 0x04, 0x21, + 0x3f, 0x04, 0x40, 0x04, 0x35, 0x04, 0x34, 0x04, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x41, 0x04, 0x35, 0x04, 0x34, 0x04, + 0x3c, 0x04, 0x38, 0x04, 0x46, 0x04, 0x38, 0x04, + 0x08, 0x77, 0x65, 0x65, 0x6b, 0x14, 0x77, 0x65, + 0x65, 0x6b, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x16, 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x0b, 0x34, 0x04, 0x35, + 0x04, 0x3d, 0x04, 0x35, 0x04, 0x41, 0x04, 0x09, + 0x43, 0x04, 0x42, 0x04, 0x40, 0x04, 0x35, 0x04, + 0x0f, 0x37, 0x04, 0x30, 0x04, 0x34, 0x04, 0x43, + 0x04, 0x42, 0x04, 0x40, 0x04, 0x35, 0x04, 0x0f, + 0x37, 0x04, 0x30, 0x04, 0x32, 0x04, 0x47, 0x04, + 0x35, 0x04, 0x40, 0x04, 0x30, 0x04, 0x04, 0x2d, + 0x32, 0x0b, 0x32, 0x04, 0x47, 0x04, 0x35, 0x04, + 0x40, 0x04, 0x30, 0x04, 0x15, 0x37, 0x04, 0x30, + 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x34, 0x04, 0x35, 0x04, 0x3d, + 0x04, 0x17, 0x37, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x34, 0x04, 0x35, 0x04, 0x3d, 0x04, 0x30, 0x04, + 0x19, 0x3f, 0x04, 0x40, 0x04, 0x35, 0x04, 0x34, + 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x34, 0x04, 0x35, 0x04, 0x3d, + 0x04, 0x1b, 0x3f, 0x04, 0x40, 0x04, 0x35, 0x04, + 0x34, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x34, 0x04, 0x35, 0x04, + 0x3d, 0x04, 0x30, 0x04, 0x06, 0x64, 0x61, 0x79, + 0x12, 0x64, 0x61, 0x79, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x14, 0x64, 0x61, 0x79, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0b, 0x47, 0x04, + 0x30, 0x04, 0x41, 0x04, 0x3e, 0x04, 0x32, 0x04, + 0x15, 0x37, 0x04, 0x30, 0x04, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x47, + 0x04, 0x30, 0x04, 0x41, 0x04, 0x17, 0x37, 0x04, + 0x30, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x47, 0x04, 0x30, 0x04, + 0x41, 0x04, 0x30, 0x04, 0x19, 0x3f, 0x04, 0x40, + 0x04, 0x35, 0x04, 0x34, 0x04, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x47, + 0x04, 0x30, 0x04, 0x41, 0x04, 0x1b, 0x3f, 0x04, + 0x40, 0x04, 0x35, 0x04, 0x34, 0x04, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x47, 0x04, 0x30, 0x04, 0x41, 0x04, 0x30, 0x04, + 0x08, 0x68, 0x6f, 0x75, 0x72, 0x14, 0x68, 0x6f, + 0x75, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x16, 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x17, 0x3e, 0x04, 0x32, + 0x04, 0x30, 0x04, 0x30, 0x04, 0x20, 0x00, 0x3c, + 0x04, 0x38, 0x04, 0x3d, 0x04, 0x43, 0x04, 0x42, + 0x04, 0x30, 0x04, 0x1b, 0x37, 0x04, 0x30, 0x04, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x3c, 0x04, 0x38, 0x04, 0x3d, 0x04, + 0x43, 0x04, 0x42, 0x04, 0x30, 0x04, 0x1b, 0x37, + 0x04, 0x30, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3c, 0x04, 0x38, + 0x04, 0x3d, 0x04, 0x43, 0x04, 0x42, 0x04, 0x38, + 0x04, 0x1f, 0x3f, 0x04, 0x40, 0x04, 0x35, 0x04, + 0x34, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x3c, 0x04, 0x38, 0x04, + 0x3d, 0x04, 0x43, 0x04, 0x42, 0x04, 0x30, 0x04, + 0x1f, 0x3f, 0x04, 0x40, 0x04, 0x35, 0x04, 0x34, + 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x3c, 0x04, 0x38, 0x04, 0x3d, + 0x04, 0x43, 0x04, 0x42, 0x04, 0x38, 0x04, 0x0c, + 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x17, 0x37, + 0x04, 0x30, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3c, 0x04, 0x38, + 0x04, 0x3d, 0x04, 0x2e, 0x00, 0x1b, 0x3f, 0x04, + 0x40, 0x04, 0x35, 0x04, 0x34, 0x04, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x3c, 0x04, 0x38, 0x04, 0x3d, 0x04, 0x2e, 0x00, + 0x18, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x09, 0x41, 0x04, 0x35, 0x04, + 0x33, 0x04, 0x30, 0x04, 0x1d, 0x37, 0x04, 0x30, + 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x41, 0x04, 0x35, 0x04, 0x3a, + 0x04, 0x43, 0x04, 0x3d, 0x04, 0x34, 0x04, 0x30, + 0x04, 0x1d, 0x37, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x41, 0x04, 0x35, 0x04, 0x3a, 0x04, 0x43, 0x04, + 0x3d, 0x04, 0x34, 0x04, 0x38, 0x04, 0x21, 0x3f, + 0x04, 0x40, 0x04, 0x35, 0x04, 0x34, 0x04, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x41, 0x04, 0x35, 0x04, 0x3a, 0x04, 0x43, + 0x04, 0x3d, 0x04, 0x34, 0x04, 0x30, 0x04, 0x21, + 0x3f, 0x04, 0x40, 0x04, 0x35, 0x04, 0x34, 0x04, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x41, 0x04, 0x35, 0x04, 0x3a, 0x04, + 0x43, 0x04, 0x3d, 0x04, 0x34, 0x04, 0x38, 0x04, + 0x0c, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x17, + 0x37, 0x04, 0x30, 0x04, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x41, 0x04, + 0x35, 0x04, 0x3a, 0x04, 0x2e, 0x00, 0x1b, 0x3f, + 0x04, 0x40, 0x04, 0x35, 0x04, 0x34, 0x04, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x41, 0x04, 0x35, 0x04, 0x3a, 0x04, 0x2e, + 0x00, 0x18, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x73, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x08, 0x6c, 0x61, 0x74, + 0x6e, 0x04, 0x6e, 0x75, 0x08, 0x64, 0x61, 0x74, + 0x61, 0x70, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, + 0x6e, 0x74, 0x6c, 0x2d, 0x72, 0x65, 0x6c, 0x61, + 0x74, 0x69, 0x76, 0x65, 0x2d, 0x74, 0x69, 0x6d, + 0x65, 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, + 0x64, 0x61, 0x74, 0x61, 0x2f, 0x6d, 0x6b, 0x2e, + 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, + 0x00, 0x01, 0x00, 0x07, 0x00, 0x00, 0xd6, 0x0f, + 0x01, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x06, 0xc8, + 0x04, 0xd0, 0x00, 0x00, 0x00, 0x39, 0xd1, 0x00, + 0x00, 0x00, 0x42, 0xd2, 0x00, 0x00, 0x00, 0xaa, + 0x6a, 0xc1, 0x07, 0x00, 0x00, 0x39, 0xd1, 0x00, + 0x00, 0x00, 0x42, 0xd2, 0x00, 0x00, 0x00, 0x43, + 0xd0, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd3, 0x00, + 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe2, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xe3, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xe4, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe2, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xe3, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xe4, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xef, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xf0, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xf2, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xf3, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xf2, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xf4, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xf6, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xf7, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xfb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xfc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xf6, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xf7, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xfb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xfd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xf6, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xf7, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xfb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xfe, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0x00, 0x01, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x01, 0x01, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x05, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0x06, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0x00, 0x01, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x01, 0x01, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x05, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0x07, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0x00, 0x01, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x01, 0x01, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x05, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0x08, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0x0a, 0x01, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x0b, 0x01, + 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, + 0x0c, 0x01, 0x00, 0x00, 0x4d, 0x0d, 0x01, 0x00, + 0x00, 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0f, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x10, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x11, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0x13, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x09, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, 0x02, + 0x00, 0x00, 0x80, 0x04, 0x0c, 0x01, 0x00, 0x00, + 0x4d, 0x0d, 0x01, 0x00, 0x00, 0x04, 0x0e, 0x01, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x12, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0x14, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0x0a, 0x01, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x0b, 0x01, + 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, + 0x0c, 0x01, 0x00, 0x00, 0x4d, 0x0d, 0x01, 0x00, + 0x00, 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0f, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x10, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x11, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0x15, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, + 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x18, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x1a, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0x1b, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x18, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x19, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x1a, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x1c, 0x01, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x17, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x18, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x19, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x1a, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0x1d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x1e, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, + 0x04, 0x1f, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x20, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x22, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0x23, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x24, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x24, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x25, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x25, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x26, 0x01, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x24, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x24, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x25, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x25, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0x27, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x28, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, + 0x04, 0x29, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x2a, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x2b, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x2c, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0x2d, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x2e, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x2e, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x2f, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x2f, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x30, 0x01, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x2e, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x2e, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x2f, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0x31, 0x01, 0x00, 0x00, 0x04, 0x32, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x33, 0x01, 0x00, + 0x00, 0x4d, 0x34, 0x01, 0x00, 0x00, 0x24, 0x01, + 0x00, 0xc8, 0xc4, 0x28, 0xea, 0x04, 0x01, 0xaf, + 0x02, 0x76, 0x53, 0x35, 0x08, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x1c, 0x12, 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_ml_size = 3587; + +const uint8_t intl_relative_ml[3587] = { + 0x01, 0x4b, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x04, 0x6d, 0x6c, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x0f, 0x08, 0x0d, 0x20, + 0x00, 0x35, 0x0d, 0x7c, 0x0d, 0x0c, 0x20, 0x37, + 0x0d, 0x02, 0x0d, 0x15, 0x05, 0x0d, 0x1f, 0x0d, + 0x41, 0x0d, 0x24, 0x0d, 0x4d, 0x0d, 0x24, 0x0d, + 0x35, 0x0d, 0x7c, 0x0d, 0x37, 0x0d, 0x02, 0x0d, + 0x17, 0x15, 0x0d, 0x34, 0x0d, 0x3f, 0x0d, 0x1e, + 0x0d, 0x4d, 0x0d, 0x1e, 0x0d, 0x20, 0x00, 0x35, + 0x0d, 0x7c, 0x0d, 0x37, 0x0d, 0x02, 0x0d, 0x04, + 0x2d, 0x31, 0x19, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x35, 0x0d, 0x7c, 0x0d, 0x37, + 0x0d, 0x24, 0x0d, 0x4d, 0x0d, 0x24, 0x0d, 0x3f, + 0x0d, 0x7d, 0x0d, 0x06, 0x6f, 0x6e, 0x65, 0x0a, + 0x6f, 0x74, 0x68, 0x65, 0x72, 0x0c, 0x66, 0x75, + 0x74, 0x75, 0x72, 0x65, 0x1f, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x35, 0x0d, 0x7c, + 0x0d, 0x37, 0x0d, 0x02, 0x0d, 0x20, 0x00, 0x2e, + 0x0d, 0x41, 0x0d, 0x2e, 0x0d, 0x4d, 0x0d, 0x2a, + 0x0d, 0x4d, 0x0d, 0x08, 0x70, 0x61, 0x73, 0x74, + 0x08, 0x79, 0x65, 0x61, 0x72, 0x14, 0x79, 0x65, + 0x61, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x16, 0x79, 0x65, 0x61, 0x72, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x0d, 0x08, 0x0d, 0x20, + 0x00, 0x2a, 0x0d, 0x3e, 0x0d, 0x26, 0x0d, 0x02, + 0x0d, 0x17, 0x05, 0x0d, 0x1f, 0x0d, 0x41, 0x0d, + 0x24, 0x0d, 0x4d, 0x0d, 0x24, 0x0d, 0x20, 0x00, + 0x2a, 0x0d, 0x3e, 0x0d, 0x26, 0x0d, 0x02, 0x0d, + 0x17, 0x15, 0x0d, 0x34, 0x0d, 0x3f, 0x0d, 0x1e, + 0x0d, 0x4d, 0x0d, 0x1e, 0x0d, 0x20, 0x00, 0x2a, + 0x0d, 0x3e, 0x0d, 0x26, 0x0d, 0x02, 0x0d, 0x19, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x2a, 0x0d, 0x3e, 0x0d, 0x26, 0x0d, 0x24, 0x0d, + 0x4d, 0x0d, 0x24, 0x0d, 0x3f, 0x0d, 0x7d, 0x0d, + 0x1f, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x2a, 0x0d, 0x3e, 0x0d, 0x26, 0x0d, 0x02, + 0x0d, 0x20, 0x00, 0x2e, 0x0d, 0x41, 0x0d, 0x2e, + 0x0d, 0x4d, 0x0d, 0x2a, 0x0d, 0x4d, 0x0d, 0x0e, + 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x1a, + 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1c, 0x71, 0x75, + 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x0d, 0x08, 0x0d, 0x20, + 0x00, 0x2e, 0x0d, 0x3e, 0x0d, 0x38, 0x0d, 0x02, + 0x0d, 0x17, 0x05, 0x0d, 0x1f, 0x0d, 0x41, 0x0d, + 0x24, 0x0d, 0x4d, 0x0d, 0x24, 0x0d, 0x20, 0x00, + 0x2e, 0x0d, 0x3e, 0x0d, 0x38, 0x0d, 0x02, 0x0d, + 0x17, 0x15, 0x0d, 0x34, 0x0d, 0x3f, 0x0d, 0x1e, + 0x0d, 0x4d, 0x0d, 0x1e, 0x0d, 0x20, 0x00, 0x2e, + 0x0d, 0x3e, 0x0d, 0x38, 0x0d, 0x02, 0x0d, 0x19, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x2e, 0x0d, 0x3e, 0x0d, 0x38, 0x0d, 0x24, 0x0d, + 0x4d, 0x0d, 0x24, 0x0d, 0x3f, 0x0d, 0x7d, 0x0d, + 0x1f, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x2e, 0x0d, 0x3e, 0x0d, 0x38, 0x0d, 0x02, + 0x0d, 0x20, 0x00, 0x2e, 0x0d, 0x41, 0x0d, 0x2e, + 0x0d, 0x4d, 0x0d, 0x2a, 0x0d, 0x4d, 0x0d, 0x0a, + 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x16, 0x6d, 0x6f, + 0x6e, 0x74, 0x68, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x18, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0d, 0x08, + 0x0d, 0x20, 0x00, 0x06, 0x0d, 0x34, 0x0d, 0x4d, + 0x0d, 0x1a, 0x0d, 0x17, 0x05, 0x0d, 0x1f, 0x0d, + 0x41, 0x0d, 0x24, 0x0d, 0x4d, 0x0d, 0x24, 0x0d, + 0x20, 0x00, 0x06, 0x0d, 0x34, 0x0d, 0x4d, 0x0d, + 0x1a, 0x0d, 0x19, 0x15, 0x0d, 0x34, 0x0d, 0x3f, + 0x0d, 0x1e, 0x0d, 0x4d, 0x0d, 0x1e, 0x0d, 0x20, + 0x00, 0x06, 0x0d, 0x34, 0x0d, 0x4d, 0x0d, 0x0c, + 0x20, 0x1a, 0x0d, 0x17, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x06, 0x0d, 0x34, 0x0d, + 0x4d, 0x0d, 0x1a, 0x0d, 0x2f, 0x0d, 0x3f, 0x0d, + 0x7d, 0x0d, 0x1f, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x06, 0x0d, 0x34, 0x0d, 0x4d, + 0x0d, 0x1a, 0x0d, 0x20, 0x00, 0x2e, 0x0d, 0x41, + 0x0d, 0x2e, 0x0d, 0x4d, 0x0d, 0x2a, 0x0d, 0x4d, + 0x0d, 0x08, 0x77, 0x65, 0x65, 0x6b, 0x14, 0x77, + 0x65, 0x65, 0x6b, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x16, 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0b, 0x07, 0x0d, + 0x28, 0x0d, 0x4d, 0x0d, 0x28, 0x0d, 0x4d, 0x0d, + 0x09, 0x28, 0x0d, 0x3e, 0x0d, 0x33, 0x0d, 0x46, + 0x0d, 0x13, 0x2e, 0x0d, 0x31, 0x0d, 0x4d, 0x0d, + 0x31, 0x0d, 0x28, 0x0d, 0x4d, 0x0d, 0x28, 0x0d, + 0x3e, 0x0d, 0x7e, 0x0d, 0x19, 0x2e, 0x0d, 0x3f, + 0x0d, 0x28, 0x0d, 0x3f, 0x0d, 0x1e, 0x0d, 0x4d, + 0x0d, 0x1e, 0x0d, 0x3e, 0x0d, 0x28, 0x0d, 0x4d, + 0x0d, 0x28, 0x0d, 0x4d, 0x0d, 0x04, 0x2d, 0x32, + 0x0d, 0x07, 0x0d, 0x28, 0x0d, 0x4d, 0x0d, 0x28, + 0x0d, 0x32, 0x0d, 0x46, 0x0d, 0x1b, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x26, 0x0d, + 0x3f, 0x0d, 0x35, 0x0d, 0x38, 0x0d, 0x24, 0x0d, + 0x4d, 0x0d, 0x24, 0x0d, 0x3f, 0x0d, 0x7d, 0x0d, + 0x21, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x26, 0x0d, 0x3f, 0x0d, 0x35, 0x0d, 0x38, + 0x0d, 0x02, 0x0d, 0x20, 0x00, 0x2e, 0x0d, 0x41, + 0x0d, 0x2e, 0x0d, 0x4d, 0x0d, 0x2a, 0x0d, 0x4d, + 0x0d, 0x06, 0x64, 0x61, 0x79, 0x12, 0x64, 0x61, + 0x79, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x14, + 0x64, 0x61, 0x79, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x19, 0x08, 0x0d, 0x20, 0x00, 0x2e, + 0x0d, 0x23, 0x0d, 0x3f, 0x0d, 0x15, 0x0d, 0x4d, + 0x0d, 0x15, 0x0d, 0x42, 0x0d, 0x31, 0x0d, 0x3f, + 0x0d, 0x7d, 0x0d, 0x1d, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x2e, 0x0d, 0x23, 0x0d, + 0x3f, 0x0d, 0x15, 0x0d, 0x4d, 0x0d, 0x15, 0x0d, + 0x42, 0x0d, 0x31, 0x0d, 0x3f, 0x0d, 0x7d, 0x0d, + 0x27, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x2e, 0x0d, 0x23, 0x0d, 0x3f, 0x0d, 0x15, + 0x0d, 0x4d, 0x0d, 0x15, 0x0d, 0x42, 0x0d, 0x7c, + 0x0d, 0x20, 0x00, 0x2e, 0x0d, 0x41, 0x0d, 0x2e, + 0x0d, 0x4d, 0x0d, 0x2a, 0x0d, 0x4d, 0x0d, 0x08, + 0x68, 0x6f, 0x75, 0x72, 0x14, 0x68, 0x6f, 0x75, + 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, + 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x17, 0x08, 0x0d, 0x20, 0x00, + 0x2e, 0x0d, 0x3f, 0x0d, 0x28, 0x0d, 0x3f, 0x0d, + 0x31, 0x0d, 0x4d, 0x0d, 0x31, 0x0d, 0x3f, 0x0d, + 0x7d, 0x0d, 0x1b, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x2e, 0x0d, 0x3f, 0x0d, 0x28, + 0x0d, 0x3f, 0x0d, 0x31, 0x0d, 0x4d, 0x0d, 0x31, + 0x0d, 0x3f, 0x0d, 0x7d, 0x0d, 0x27, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x2e, 0x0d, + 0x3f, 0x0d, 0x28, 0x0d, 0x3f, 0x0d, 0x31, 0x0d, + 0x4d, 0x0d, 0x31, 0x0d, 0x4d, 0x0d, 0x20, 0x00, + 0x2e, 0x0d, 0x41, 0x0d, 0x2e, 0x0d, 0x4d, 0x0d, + 0x2a, 0x0d, 0x4d, 0x0d, 0x0c, 0x6d, 0x69, 0x6e, + 0x75, 0x74, 0x65, 0x18, 0x6d, 0x69, 0x6e, 0x75, + 0x74, 0x65, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x1a, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0d, 0x07, + 0x0d, 0x2a, 0x0d, 0x4d, 0x0d, 0x2a, 0x0d, 0x4b, + 0x0d, 0x7e, 0x0d, 0x1b, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x38, 0x0d, 0x46, 0x0d, + 0x15, 0x0d, 0x4d, 0x0d, 0x15, 0x0d, 0x7b, 0x0d, + 0x21, 0x0d, 0x3f, 0x0d, 0x7d, 0x0d, 0x27, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x38, + 0x0d, 0x46, 0x0d, 0x15, 0x0d, 0x4d, 0x0d, 0x15, + 0x0d, 0x7b, 0x0d, 0x21, 0x0d, 0x4d, 0x0d, 0x20, + 0x00, 0x2e, 0x0d, 0x41, 0x0d, 0x2e, 0x0d, 0x4d, + 0x0d, 0x2a, 0x0d, 0x4d, 0x0d, 0x0c, 0x73, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x18, 0x73, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x1a, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x08, + 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, 0x75, 0x08, + 0x64, 0x61, 0x74, 0x61, 0x70, 0x6e, 0x6f, 0x64, + 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, + 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2d, 0x72, + 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x2d, + 0x74, 0x69, 0x6d, 0x65, 0x2d, 0x66, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x2f, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, + 0x6d, 0x6c, 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, + 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, 0x07, 0x00, + 0x00, 0xd6, 0x0f, 0x01, 0xa0, 0x01, 0x00, 0x00, + 0x00, 0x06, 0xc8, 0x04, 0xd0, 0x00, 0x00, 0x00, + 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, 0x00, + 0x00, 0x00, 0xaa, 0x6a, 0xc1, 0x07, 0x00, 0x00, + 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, 0x00, + 0x00, 0x00, 0x43, 0xd0, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd3, 0x00, 0x00, 0x00, 0x4d, 0xd4, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xd5, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xd6, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xd9, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd5, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xd6, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xd9, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd5, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xd6, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xd9, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe2, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xe3, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe5, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe5, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe2, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xe3, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe5, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe5, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe2, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xe3, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe5, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe5, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe9, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xed, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xed, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xee, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xee, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xef, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xed, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xed, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xee, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xee, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xf0, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xed, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xed, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xee, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xee, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xf1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf2, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xf3, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xf5, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf5, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf6, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xf6, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xf7, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf2, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xf3, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xf5, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf5, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf6, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xf6, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xf8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf2, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xf3, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xf5, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf5, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf6, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xf6, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xf9, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfa, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xfb, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, 0x02, 0x00, + 0x00, 0x80, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, + 0xfe, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x00, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x01, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0x02, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xfc, 0x00, 0x00, + 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, 0xfd, + 0x00, 0x00, 0x00, 0x4d, 0xfe, 0x00, 0x00, 0x00, + 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x00, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x00, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x01, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x01, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x03, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0xfa, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xfb, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, 0x02, 0x00, + 0x00, 0x80, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, + 0xfe, 0x00, 0x00, 0x00, 0x04, 0xff, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x00, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x01, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0x04, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x0b, 0x04, 0x06, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x06, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x07, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x07, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x08, + 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x06, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x06, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x07, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0x09, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x06, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0x0a, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x0b, 0x04, 0x0c, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0c, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0d, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x0d, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x0e, + 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x0c, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x0c, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x0d, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0x0f, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x0c, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x0d, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0x10, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x0b, 0x04, 0x12, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x12, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x13, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x13, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x14, + 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x12, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x12, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x13, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0x15, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x12, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x13, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0x16, 0x01, 0x00, 0x00, 0x04, + 0x17, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x18, 0x01, 0x00, 0x00, 0x4d, 0x19, 0x01, 0x00, + 0x00, 0x24, 0x01, 0x00, 0xc8, 0xc4, 0x28, 0xb4, + 0x04, 0x01, 0xaf, 0x02, 0x76, 0x53, 0x35, 0x08, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x1c, 0x12, + 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_mn_size = 3712; + +const uint8_t intl_relative_mn[3712] = { + 0x01, 0x56, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x04, 0x6d, 0x6e, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x0f, 0x4d, 0x04, 0x3d, + 0x04, 0x4d, 0x04, 0x20, 0x00, 0x36, 0x04, 0x38, + 0x04, 0x3b, 0x04, 0x11, 0x38, 0x04, 0x40, 0x04, + 0x4d, 0x04, 0x45, 0x04, 0x20, 0x00, 0x36, 0x04, + 0x38, 0x04, 0x3b, 0x04, 0x19, 0xe9, 0x04, 0x3d, + 0x04, 0x33, 0x04, 0xe9, 0x04, 0x40, 0x04, 0x41, + 0x04, 0xe9, 0x04, 0x3d, 0x04, 0x20, 0x00, 0x36, + 0x04, 0x38, 0x04, 0x3b, 0x04, 0x04, 0x2d, 0x31, + 0x21, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x36, 0x04, 0x38, 0x04, 0x3b, 0x04, 0x38, + 0x04, 0x39, 0x04, 0x3d, 0x04, 0x20, 0x00, 0x34, + 0x04, 0x30, 0x04, 0x40, 0x04, 0x30, 0x04, 0x30, + 0x04, 0x06, 0x6f, 0x6e, 0x65, 0x0a, 0x6f, 0x74, + 0x68, 0x65, 0x72, 0x0c, 0x66, 0x75, 0x74, 0x75, + 0x72, 0x65, 0x1f, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x36, 0x04, 0x38, 0x04, 0x3b, + 0x04, 0x38, 0x04, 0x39, 0x04, 0x3d, 0x04, 0x20, + 0x00, 0xe9, 0x04, 0x3c, 0x04, 0x3d, 0x04, 0xe9, + 0x04, 0x08, 0x70, 0x61, 0x73, 0x74, 0x08, 0x79, + 0x65, 0x61, 0x72, 0x14, 0x79, 0x65, 0x61, 0x72, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, 0x79, + 0x65, 0x61, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x15, 0x4d, 0x04, 0x3d, 0x04, 0x4d, + 0x04, 0x20, 0x00, 0x43, 0x04, 0x3b, 0x04, 0x38, + 0x04, 0x40, 0x04, 0x30, 0x04, 0x3b, 0x04, 0x21, + 0x34, 0x04, 0x30, 0x04, 0x40, 0x04, 0x30, 0x04, + 0x30, 0x04, 0x33, 0x04, 0x38, 0x04, 0x39, 0x04, + 0x3d, 0x04, 0x20, 0x00, 0x43, 0x04, 0x3b, 0x04, + 0x38, 0x04, 0x40, 0x04, 0x30, 0x04, 0x3b, 0x04, + 0x1f, 0xe9, 0x04, 0x3d, 0x04, 0x33, 0x04, 0xe9, + 0x04, 0x40, 0x04, 0x41, 0x04, 0xe9, 0x04, 0x3d, + 0x04, 0x20, 0x00, 0x43, 0x04, 0x3b, 0x04, 0x38, + 0x04, 0x40, 0x04, 0x30, 0x04, 0x3b, 0x04, 0x23, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x43, 0x04, 0x3b, 0x04, 0x38, 0x04, 0x40, 0x04, + 0x3b, 0x04, 0x4b, 0x04, 0x3d, 0x04, 0x20, 0x00, + 0x34, 0x04, 0x30, 0x04, 0x40, 0x04, 0x30, 0x04, + 0x30, 0x04, 0x21, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x43, 0x04, 0x3b, 0x04, 0x38, + 0x04, 0x40, 0x04, 0x3b, 0x04, 0x4b, 0x04, 0x3d, + 0x04, 0x20, 0x00, 0xe9, 0x04, 0x3c, 0x04, 0x3d, + 0x04, 0xe9, 0x04, 0x0e, 0x71, 0x75, 0x61, 0x72, + 0x74, 0x65, 0x72, 0x1a, 0x71, 0x75, 0x61, 0x72, + 0x74, 0x65, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x1c, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, + 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x0f, 0x4d, 0x04, 0x3d, 0x04, 0x4d, 0x04, 0x20, + 0x00, 0x41, 0x04, 0x30, 0x04, 0x40, 0x04, 0x11, + 0x38, 0x04, 0x40, 0x04, 0x4d, 0x04, 0x45, 0x04, + 0x20, 0x00, 0x41, 0x04, 0x30, 0x04, 0x40, 0x04, + 0x19, 0xe9, 0x04, 0x3d, 0x04, 0x33, 0x04, 0xe9, + 0x04, 0x40, 0x04, 0x41, 0x04, 0xe9, 0x04, 0x3d, + 0x04, 0x20, 0x00, 0x41, 0x04, 0x30, 0x04, 0x40, + 0x04, 0x1f, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x41, 0x04, 0x30, 0x04, 0x40, 0x04, + 0x4b, 0x04, 0x3d, 0x04, 0x20, 0x00, 0x34, 0x04, + 0x30, 0x04, 0x40, 0x04, 0x30, 0x04, 0x30, 0x04, + 0x1d, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x41, 0x04, 0x30, 0x04, 0x40, 0x04, 0x4b, + 0x04, 0x3d, 0x04, 0x20, 0x00, 0xe9, 0x04, 0x3c, + 0x04, 0x3d, 0x04, 0xe9, 0x04, 0x0a, 0x6d, 0x6f, + 0x6e, 0x74, 0x68, 0x16, 0x6d, 0x6f, 0x6e, 0x74, + 0x68, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x18, + 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x1f, 0x4d, 0x04, 0x3d, + 0x04, 0x4d, 0x04, 0x20, 0x00, 0x34, 0x04, 0x3e, + 0x04, 0x3b, 0x04, 0x3e, 0x04, 0x3e, 0x04, 0x20, + 0x00, 0x45, 0x04, 0x3e, 0x04, 0x3d, 0x04, 0x3e, + 0x04, 0x33, 0x04, 0x21, 0x38, 0x04, 0x40, 0x04, + 0x4d, 0x04, 0x45, 0x04, 0x20, 0x00, 0x34, 0x04, + 0x3e, 0x04, 0x3b, 0x04, 0x3e, 0x04, 0x3e, 0x04, + 0x20, 0x00, 0x45, 0x04, 0x3e, 0x04, 0x3d, 0x04, + 0x3e, 0x04, 0x33, 0x04, 0x29, 0xe9, 0x04, 0x3d, + 0x04, 0x33, 0x04, 0xe9, 0x04, 0x40, 0x04, 0x41, + 0x04, 0xe9, 0x04, 0x3d, 0x04, 0x20, 0x00, 0x34, + 0x04, 0x3e, 0x04, 0x3b, 0x04, 0x3e, 0x04, 0x3e, + 0x04, 0x20, 0x00, 0x45, 0x04, 0x3e, 0x04, 0x3d, + 0x04, 0x3e, 0x04, 0x33, 0x04, 0x31, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x34, 0x04, + 0x3e, 0x04, 0x3b, 0x04, 0x3e, 0x04, 0x3e, 0x04, + 0x20, 0x00, 0x45, 0x04, 0x3e, 0x04, 0x3d, 0x04, + 0x3e, 0x04, 0x33, 0x04, 0x38, 0x04, 0x39, 0x04, + 0x3d, 0x04, 0x20, 0x00, 0x34, 0x04, 0x30, 0x04, + 0x40, 0x04, 0x30, 0x04, 0x30, 0x04, 0x2f, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x34, + 0x04, 0x3e, 0x04, 0x3b, 0x04, 0x3e, 0x04, 0x3e, + 0x04, 0x20, 0x00, 0x45, 0x04, 0x3e, 0x04, 0x3d, + 0x04, 0x3e, 0x04, 0x33, 0x04, 0x38, 0x04, 0x39, + 0x04, 0x3d, 0x04, 0x20, 0x00, 0xe9, 0x04, 0x3c, + 0x04, 0x3d, 0x04, 0xe9, 0x04, 0x08, 0x77, 0x65, + 0x65, 0x6b, 0x17, 0x4d, 0x04, 0x3d, 0x04, 0x4d, + 0x04, 0x20, 0x00, 0x37, 0x00, 0x20, 0x00, 0x45, + 0x04, 0x3e, 0x04, 0x3d, 0x04, 0x3e, 0x04, 0x33, + 0x04, 0x19, 0x38, 0x04, 0x40, 0x04, 0x4d, 0x04, + 0x45, 0x04, 0x20, 0x00, 0x37, 0x00, 0x20, 0x00, + 0x45, 0x04, 0x3e, 0x04, 0x3d, 0x04, 0x3e, 0x04, + 0x33, 0x04, 0x21, 0xe9, 0x04, 0x3d, 0x04, 0x33, + 0x04, 0xe9, 0x04, 0x40, 0x04, 0x41, 0x04, 0xe9, + 0x04, 0x3d, 0x04, 0x20, 0x00, 0x37, 0x00, 0x20, + 0x00, 0x45, 0x04, 0x3e, 0x04, 0x3d, 0x04, 0x3e, + 0x04, 0x33, 0x04, 0x29, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x37, 0x00, 0x20, 0x00, + 0x45, 0x04, 0x3e, 0x04, 0x3d, 0x04, 0x3e, 0x04, + 0x33, 0x04, 0x38, 0x04, 0x39, 0x04, 0x3d, 0x04, + 0x20, 0x00, 0x34, 0x04, 0x30, 0x04, 0x40, 0x04, + 0x30, 0x04, 0x30, 0x04, 0x27, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x37, 0x00, 0x20, + 0x00, 0x45, 0x04, 0x3e, 0x04, 0x3d, 0x04, 0x3e, + 0x04, 0x33, 0x04, 0x38, 0x04, 0x39, 0x04, 0x3d, + 0x04, 0x20, 0x00, 0xe9, 0x04, 0x3c, 0x04, 0x3d, + 0x04, 0xe9, 0x04, 0x14, 0x77, 0x65, 0x65, 0x6b, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, 0x77, + 0x65, 0x65, 0x6b, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x0f, 0xe9, 0x04, 0x3d, 0x04, 0xe9, + 0x04, 0xe9, 0x04, 0x34, 0x04, 0xe9, 0x04, 0x40, + 0x04, 0x0f, 0x3c, 0x04, 0x30, 0x04, 0x40, 0x04, + 0x33, 0x04, 0x30, 0x04, 0x30, 0x04, 0x48, 0x04, + 0x11, 0x3d, 0x04, 0xe9, 0x04, 0x33, 0x04, 0xe9, + 0x04, 0xe9, 0x04, 0x34, 0x04, 0xe9, 0x04, 0x40, + 0x04, 0x11, 0x43, 0x04, 0x40, 0x04, 0x36, 0x04, + 0x38, 0x04, 0x33, 0x04, 0x34, 0x04, 0x30, 0x04, + 0x40, 0x04, 0x04, 0x2d, 0x32, 0x0f, 0xe9, 0x04, + 0x47, 0x04, 0x38, 0x04, 0x33, 0x04, 0x34, 0x04, + 0xe9, 0x04, 0x40, 0x04, 0x21, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0xe9, 0x04, 0x34, + 0x04, 0x40, 0x04, 0x38, 0x04, 0x39, 0x04, 0x3d, + 0x04, 0x20, 0x00, 0x34, 0x04, 0x30, 0x04, 0x40, + 0x04, 0x30, 0x04, 0x30, 0x04, 0x1f, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xe9, 0x04, + 0x34, 0x04, 0x40, 0x04, 0x38, 0x04, 0x39, 0x04, + 0x3d, 0x04, 0x20, 0x00, 0xe9, 0x04, 0x3c, 0x04, + 0x3d, 0x04, 0xe9, 0x04, 0x06, 0x64, 0x61, 0x79, + 0x12, 0x64, 0x61, 0x79, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x14, 0x64, 0x61, 0x79, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0f, 0x4d, 0x04, + 0x3d, 0x04, 0x4d, 0x04, 0x20, 0x00, 0x46, 0x04, + 0x30, 0x04, 0x33, 0x04, 0x21, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x46, 0x04, 0x30, + 0x04, 0x33, 0x04, 0x38, 0x04, 0x39, 0x04, 0x3d, + 0x04, 0x20, 0x00, 0x34, 0x04, 0x30, 0x04, 0x40, + 0x04, 0x30, 0x04, 0x30, 0x04, 0x1f, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x46, 0x04, + 0x30, 0x04, 0x33, 0x04, 0x38, 0x04, 0x39, 0x04, + 0x3d, 0x04, 0x20, 0x00, 0xe9, 0x04, 0x3c, 0x04, + 0x3d, 0x04, 0xe9, 0x04, 0x08, 0x68, 0x6f, 0x75, + 0x72, 0x17, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x46, 0x04, 0x20, 0x00, 0x34, 0x04, + 0x30, 0x04, 0x40, 0x04, 0x30, 0x04, 0x30, 0x04, + 0x15, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x46, 0x04, 0x20, 0x00, 0xe9, 0x04, 0x3c, + 0x04, 0x3d, 0x04, 0xe9, 0x04, 0x14, 0x68, 0x6f, + 0x75, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x16, 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x13, 0x4d, 0x04, 0x3d, + 0x04, 0x4d, 0x04, 0x20, 0x00, 0x3c, 0x04, 0x38, + 0x04, 0x3d, 0x04, 0x43, 0x04, 0x42, 0x04, 0x23, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x3c, 0x04, 0x38, 0x04, 0x3d, 0x04, 0x43, 0x04, + 0x42, 0x04, 0x4b, 0x04, 0x3d, 0x04, 0x20, 0x00, + 0x34, 0x04, 0x30, 0x04, 0x40, 0x04, 0x30, 0x04, + 0x30, 0x04, 0x21, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x3c, 0x04, 0x38, 0x04, 0x3d, + 0x04, 0x43, 0x04, 0x42, 0x04, 0x4b, 0x04, 0x3d, + 0x04, 0x20, 0x00, 0xe9, 0x04, 0x3c, 0x04, 0x3d, + 0x04, 0xe9, 0x04, 0x0c, 0x6d, 0x69, 0x6e, 0x75, + 0x74, 0x65, 0x1b, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x3c, 0x04, 0x38, 0x04, 0x3d, + 0x04, 0x20, 0x00, 0x34, 0x04, 0x30, 0x04, 0x40, + 0x04, 0x30, 0x04, 0x30, 0x04, 0x19, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3c, 0x04, + 0x38, 0x04, 0x3d, 0x04, 0x20, 0x00, 0xe9, 0x04, + 0x3c, 0x04, 0x3d, 0x04, 0xe9, 0x04, 0x18, 0x6d, + 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x1a, 0x6d, 0x69, 0x6e, 0x75, + 0x74, 0x65, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x09, 0x3e, 0x04, 0x34, 0x04, 0x3e, 0x04, + 0x3e, 0x04, 0x25, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x41, 0x04, 0x35, 0x04, 0x3a, + 0x04, 0x43, 0x04, 0x3d, 0x04, 0x34, 0x04, 0x4b, + 0x04, 0x3d, 0x04, 0x20, 0x00, 0x34, 0x04, 0x30, + 0x04, 0x40, 0x04, 0x30, 0x04, 0x30, 0x04, 0x23, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x41, 0x04, 0x35, 0x04, 0x3a, 0x04, 0x43, 0x04, + 0x3d, 0x04, 0x34, 0x04, 0x4b, 0x04, 0x3d, 0x04, + 0x20, 0x00, 0xe9, 0x04, 0x3c, 0x04, 0x3d, 0x04, + 0xe9, 0x04, 0x0c, 0x73, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x1b, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x41, 0x04, 0x35, 0x04, 0x3a, 0x04, + 0x20, 0x00, 0x34, 0x04, 0x30, 0x04, 0x40, 0x04, + 0x30, 0x04, 0x30, 0x04, 0x19, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x41, 0x04, 0x35, + 0x04, 0x3a, 0x04, 0x20, 0x00, 0xe9, 0x04, 0x3c, + 0x04, 0x3d, 0x04, 0xe9, 0x04, 0x18, 0x73, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x1a, 0x73, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, 0x75, + 0x08, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6e, 0x6f, + 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2d, + 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2d, 0x66, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x2f, 0x6c, 0x6f, 0x63, + 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, + 0x2f, 0x6d, 0x6e, 0x2e, 0x6a, 0x73, 0x0d, 0x00, + 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, 0x07, + 0x00, 0x00, 0xbe, 0x0d, 0x01, 0xa0, 0x01, 0x00, + 0x00, 0x00, 0x06, 0xc8, 0x04, 0xd0, 0x00, 0x00, + 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, + 0x00, 0x00, 0x00, 0xaa, 0x6a, 0xa9, 0x06, 0x00, + 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, + 0x00, 0x00, 0x00, 0x43, 0xd0, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xd3, 0x00, 0x00, 0x00, 0x4d, 0xd4, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xd5, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe2, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xe3, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xe4, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe6, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe8, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe5, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xe9, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xed, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xed, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xee, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xef, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xed, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xf0, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xee, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0xf1, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xf3, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xf4, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xf6, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0xf7, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xf9, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xfa, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xfc, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0xfd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xf9, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xfa, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xfc, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0xfe, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0x00, 0x01, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x01, 0x01, + 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, + 0x02, 0x01, 0x00, 0x00, 0x4d, 0x03, 0x01, 0x00, + 0x00, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x05, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x05, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x06, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0x07, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x05, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x08, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0x09, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x0b, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0b, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0c, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0x0d, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x0e, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x10, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x0f, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0x11, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x13, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x13, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x14, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0x15, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x16, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x18, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x17, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0x19, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x1a, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x1b, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x1b, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x1c, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x1c, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0x1d, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x1e, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x1f, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x1f, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x20, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x1f, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x1f, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0x21, 0x01, 0x00, 0x00, + 0x04, 0x22, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x23, 0x01, 0x00, 0x00, 0x4d, 0x24, 0x01, + 0x00, 0x00, 0x24, 0x01, 0x00, 0xc8, 0xc4, 0x28, + 0xca, 0x04, 0x01, 0x93, 0x02, 0x76, 0x53, 0x35, + 0x08, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x1c, 0x12, 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_mr_size = 4657; + +const uint8_t intl_relative_mr[4657] = { + 0x01, 0x69, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x04, 0x6d, 0x72, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x0f, 0x39, 0x09, 0x47, + 0x09, 0x20, 0x00, 0x35, 0x09, 0x30, 0x09, 0x4d, + 0x09, 0x37, 0x09, 0x15, 0x2a, 0x09, 0x41, 0x09, + 0x22, 0x09, 0x40, 0x09, 0x32, 0x09, 0x20, 0x00, + 0x35, 0x09, 0x30, 0x09, 0x4d, 0x09, 0x37, 0x09, + 0x15, 0x2e, 0x09, 0x3e, 0x09, 0x17, 0x09, 0x40, + 0x09, 0x32, 0x09, 0x20, 0x00, 0x35, 0x09, 0x30, + 0x09, 0x4d, 0x09, 0x37, 0x09, 0x04, 0x2d, 0x31, + 0x2b, 0x2f, 0x09, 0x47, 0x09, 0x24, 0x09, 0x4d, + 0x09, 0x2f, 0x09, 0x3e, 0x09, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x35, + 0x09, 0x30, 0x09, 0x4d, 0x09, 0x37, 0x09, 0x3e, + 0x09, 0x2e, 0x09, 0x27, 0x09, 0x4d, 0x09, 0x2f, + 0x09, 0x47, 0x09, 0x06, 0x6f, 0x6e, 0x65, 0x2d, + 0x2f, 0x09, 0x47, 0x09, 0x24, 0x09, 0x4d, 0x09, + 0x2f, 0x09, 0x3e, 0x09, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x35, 0x09, + 0x30, 0x09, 0x4d, 0x09, 0x37, 0x09, 0x3e, 0x09, + 0x02, 0x09, 0x2e, 0x09, 0x27, 0x09, 0x4d, 0x09, + 0x2f, 0x09, 0x47, 0x09, 0x0a, 0x6f, 0x74, 0x68, + 0x65, 0x72, 0x0c, 0x66, 0x75, 0x74, 0x75, 0x72, + 0x65, 0x1f, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x35, 0x09, 0x30, 0x09, 0x4d, 0x09, + 0x37, 0x09, 0x3e, 0x09, 0x2a, 0x09, 0x42, 0x09, + 0x30, 0x09, 0x4d, 0x09, 0x35, 0x09, 0x40, 0x09, + 0x21, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x35, 0x09, 0x30, 0x09, 0x4d, 0x09, 0x37, + 0x09, 0x3e, 0x09, 0x02, 0x09, 0x2a, 0x09, 0x42, + 0x09, 0x30, 0x09, 0x4d, 0x09, 0x35, 0x09, 0x40, + 0x09, 0x08, 0x70, 0x61, 0x73, 0x74, 0x08, 0x79, + 0x65, 0x61, 0x72, 0x1d, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x35, 0x09, 0x30, 0x09, + 0x4d, 0x09, 0x37, 0x09, 0x3e, 0x09, 0x2e, 0x09, + 0x27, 0x09, 0x4d, 0x09, 0x2f, 0x09, 0x47, 0x09, + 0x1f, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x35, 0x09, 0x30, 0x09, 0x4d, 0x09, 0x37, + 0x09, 0x3e, 0x09, 0x02, 0x09, 0x2e, 0x09, 0x27, + 0x09, 0x4d, 0x09, 0x2f, 0x09, 0x47, 0x09, 0x14, + 0x79, 0x65, 0x61, 0x72, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x16, 0x79, 0x65, 0x61, 0x72, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x13, 0x39, + 0x09, 0x40, 0x09, 0x20, 0x00, 0x24, 0x09, 0x3f, + 0x09, 0x2e, 0x09, 0x3e, 0x09, 0x39, 0x09, 0x40, + 0x09, 0x19, 0x2a, 0x09, 0x41, 0x09, 0x22, 0x09, + 0x40, 0x09, 0x32, 0x09, 0x20, 0x00, 0x24, 0x09, + 0x3f, 0x09, 0x2e, 0x09, 0x3e, 0x09, 0x39, 0x09, + 0x40, 0x09, 0x19, 0x2e, 0x09, 0x3e, 0x09, 0x17, + 0x09, 0x40, 0x09, 0x32, 0x09, 0x20, 0x00, 0x24, + 0x09, 0x3f, 0x09, 0x2e, 0x09, 0x3e, 0x09, 0x39, + 0x09, 0x40, 0x09, 0x1f, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x24, 0x09, 0x3f, 0x09, + 0x2e, 0x09, 0x3e, 0x09, 0x39, 0x09, 0x40, 0x09, + 0x2e, 0x09, 0x27, 0x09, 0x4d, 0x09, 0x2f, 0x09, + 0x47, 0x09, 0x21, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x24, 0x09, 0x3f, 0x09, 0x2e, + 0x09, 0x3e, 0x09, 0x39, 0x09, 0x40, 0x09, 0x02, + 0x09, 0x2e, 0x09, 0x27, 0x09, 0x4d, 0x09, 0x2f, + 0x09, 0x47, 0x09, 0x21, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x24, 0x09, 0x3f, 0x09, + 0x2e, 0x09, 0x3e, 0x09, 0x39, 0x09, 0x40, 0x09, + 0x2a, 0x09, 0x42, 0x09, 0x30, 0x09, 0x4d, 0x09, + 0x35, 0x09, 0x40, 0x09, 0x23, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x24, 0x09, 0x3f, + 0x09, 0x2e, 0x09, 0x3e, 0x09, 0x39, 0x09, 0x40, + 0x09, 0x02, 0x09, 0x2a, 0x09, 0x42, 0x09, 0x30, + 0x09, 0x4d, 0x09, 0x35, 0x09, 0x40, 0x09, 0x0e, + 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, + 0x2f, 0x09, 0x47, 0x09, 0x24, 0x09, 0x4d, 0x09, + 0x2f, 0x09, 0x3e, 0x09, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x24, 0x09, + 0x3f, 0x09, 0x2e, 0x09, 0x3e, 0x09, 0x39, 0x09, + 0x40, 0x09, 0x2e, 0x09, 0x27, 0x09, 0x4d, 0x09, + 0x2f, 0x09, 0x47, 0x09, 0x2f, 0x2f, 0x09, 0x47, + 0x09, 0x24, 0x09, 0x4d, 0x09, 0x2f, 0x09, 0x3e, + 0x09, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x24, 0x09, 0x3f, 0x09, 0x2e, + 0x09, 0x3e, 0x09, 0x39, 0x09, 0x40, 0x09, 0x02, + 0x09, 0x2e, 0x09, 0x27, 0x09, 0x4d, 0x09, 0x2f, + 0x09, 0x47, 0x09, 0x1a, 0x71, 0x75, 0x61, 0x72, + 0x74, 0x65, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x1c, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, + 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x11, 0x39, 0x09, 0x3e, 0x09, 0x20, 0x00, 0x2e, + 0x09, 0x39, 0x09, 0x3f, 0x09, 0x28, 0x09, 0x3e, + 0x09, 0x17, 0x2a, 0x09, 0x41, 0x09, 0x22, 0x09, + 0x40, 0x09, 0x32, 0x09, 0x20, 0x00, 0x2e, 0x09, + 0x39, 0x09, 0x3f, 0x09, 0x28, 0x09, 0x3e, 0x09, + 0x17, 0x2e, 0x09, 0x3e, 0x09, 0x17, 0x09, 0x40, + 0x09, 0x32, 0x09, 0x20, 0x00, 0x2e, 0x09, 0x39, + 0x09, 0x3f, 0x09, 0x28, 0x09, 0x3e, 0x09, 0x2f, + 0x2f, 0x09, 0x47, 0x09, 0x24, 0x09, 0x4d, 0x09, + 0x2f, 0x09, 0x3e, 0x09, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x2e, 0x09, + 0x39, 0x09, 0x3f, 0x09, 0x28, 0x09, 0x4d, 0x09, + 0x2f, 0x09, 0x3e, 0x09, 0x2e, 0x09, 0x27, 0x09, + 0x4d, 0x09, 0x2f, 0x09, 0x47, 0x09, 0x31, 0x2f, + 0x09, 0x47, 0x09, 0x24, 0x09, 0x4d, 0x09, 0x2f, + 0x09, 0x3e, 0x09, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x2e, 0x09, 0x39, + 0x09, 0x3f, 0x09, 0x28, 0x09, 0x4d, 0x09, 0x2f, + 0x09, 0x3e, 0x09, 0x02, 0x09, 0x2e, 0x09, 0x27, + 0x09, 0x4d, 0x09, 0x2f, 0x09, 0x47, 0x09, 0x23, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x2e, 0x09, 0x39, 0x09, 0x3f, 0x09, 0x28, 0x09, + 0x4d, 0x09, 0x2f, 0x09, 0x3e, 0x09, 0x2a, 0x09, + 0x42, 0x09, 0x30, 0x09, 0x4d, 0x09, 0x35, 0x09, + 0x40, 0x09, 0x25, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x2e, 0x09, 0x39, 0x09, 0x3f, + 0x09, 0x28, 0x09, 0x4d, 0x09, 0x2f, 0x09, 0x3e, + 0x09, 0x02, 0x09, 0x2a, 0x09, 0x42, 0x09, 0x30, + 0x09, 0x4d, 0x09, 0x35, 0x09, 0x40, 0x09, 0x0a, + 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x21, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x2e, 0x09, + 0x39, 0x09, 0x3f, 0x09, 0x28, 0x09, 0x4d, 0x09, + 0x2f, 0x09, 0x3e, 0x09, 0x2e, 0x09, 0x27, 0x09, + 0x4d, 0x09, 0x2f, 0x09, 0x47, 0x09, 0x16, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x23, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x2e, 0x09, 0x39, 0x09, 0x3f, + 0x09, 0x28, 0x09, 0x4d, 0x09, 0x2f, 0x09, 0x3e, + 0x09, 0x02, 0x09, 0x2e, 0x09, 0x27, 0x09, 0x4d, + 0x09, 0x2f, 0x09, 0x47, 0x09, 0x18, 0x6d, 0x6f, + 0x6e, 0x74, 0x68, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x11, 0x39, 0x09, 0x3e, 0x09, 0x20, + 0x00, 0x06, 0x09, 0x20, 0x09, 0x35, 0x09, 0x21, + 0x09, 0x3e, 0x09, 0x17, 0x2a, 0x09, 0x41, 0x09, + 0x22, 0x09, 0x40, 0x09, 0x32, 0x09, 0x20, 0x00, + 0x06, 0x09, 0x20, 0x09, 0x35, 0x09, 0x21, 0x09, + 0x3e, 0x09, 0x17, 0x2e, 0x09, 0x3e, 0x09, 0x17, + 0x09, 0x40, 0x09, 0x32, 0x09, 0x20, 0x00, 0x06, + 0x09, 0x20, 0x09, 0x35, 0x09, 0x21, 0x09, 0x3e, + 0x09, 0x21, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x06, 0x09, 0x20, 0x09, 0x35, 0x09, + 0x21, 0x09, 0x4d, 0x09, 0x2f, 0x09, 0x3e, 0x09, + 0x2e, 0x09, 0x27, 0x09, 0x4d, 0x09, 0x2f, 0x09, + 0x47, 0x09, 0x23, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x06, 0x09, 0x20, 0x09, 0x35, + 0x09, 0x21, 0x09, 0x4d, 0x09, 0x2f, 0x09, 0x3e, + 0x09, 0x02, 0x09, 0x2e, 0x09, 0x27, 0x09, 0x4d, + 0x09, 0x2f, 0x09, 0x47, 0x09, 0x23, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x06, 0x09, + 0x20, 0x09, 0x35, 0x09, 0x21, 0x09, 0x4d, 0x09, + 0x2f, 0x09, 0x3e, 0x09, 0x2a, 0x09, 0x42, 0x09, + 0x30, 0x09, 0x4d, 0x09, 0x35, 0x09, 0x40, 0x09, + 0x25, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x06, 0x09, 0x20, 0x09, 0x35, 0x09, 0x21, + 0x09, 0x4d, 0x09, 0x2f, 0x09, 0x3e, 0x09, 0x02, + 0x09, 0x2a, 0x09, 0x42, 0x09, 0x30, 0x09, 0x4d, + 0x09, 0x35, 0x09, 0x40, 0x09, 0x08, 0x77, 0x65, + 0x65, 0x6b, 0x2f, 0x2f, 0x09, 0x47, 0x09, 0x24, + 0x09, 0x4d, 0x09, 0x2f, 0x09, 0x3e, 0x09, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x06, 0x09, 0x20, 0x09, 0x35, 0x09, 0x21, + 0x09, 0x4d, 0x09, 0x2f, 0x09, 0x3e, 0x09, 0x2e, + 0x09, 0x27, 0x09, 0x4d, 0x09, 0x2f, 0x09, 0x47, + 0x09, 0x31, 0x2f, 0x09, 0x47, 0x09, 0x24, 0x09, + 0x4d, 0x09, 0x2f, 0x09, 0x3e, 0x09, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x06, 0x09, 0x20, 0x09, 0x35, 0x09, 0x21, 0x09, + 0x4d, 0x09, 0x2f, 0x09, 0x3e, 0x09, 0x02, 0x09, + 0x2e, 0x09, 0x27, 0x09, 0x4d, 0x09, 0x2f, 0x09, + 0x47, 0x09, 0x14, 0x77, 0x65, 0x65, 0x6b, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, 0x77, 0x65, + 0x65, 0x6b, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x05, 0x06, 0x09, 0x1c, 0x09, 0x0b, 0x09, + 0x09, 0x26, 0x09, 0x4d, 0x09, 0x2f, 0x09, 0x3e, + 0x09, 0x07, 0x15, 0x09, 0x3e, 0x09, 0x32, 0x09, + 0x2b, 0x2f, 0x09, 0x47, 0x09, 0x24, 0x09, 0x4d, + 0x09, 0x2f, 0x09, 0x3e, 0x09, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x26, + 0x09, 0x3f, 0x09, 0x35, 0x09, 0x38, 0x09, 0x3e, + 0x09, 0x2e, 0x09, 0x27, 0x09, 0x4d, 0x09, 0x2f, + 0x09, 0x47, 0x09, 0x2d, 0x2f, 0x09, 0x47, 0x09, + 0x24, 0x09, 0x4d, 0x09, 0x2f, 0x09, 0x3e, 0x09, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x26, 0x09, 0x3f, 0x09, 0x35, 0x09, + 0x38, 0x09, 0x3e, 0x09, 0x02, 0x09, 0x2e, 0x09, + 0x27, 0x09, 0x4d, 0x09, 0x2f, 0x09, 0x47, 0x09, + 0x1f, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x26, 0x09, 0x3f, 0x09, 0x35, 0x09, 0x38, + 0x09, 0x3e, 0x09, 0x2a, 0x09, 0x42, 0x09, 0x30, + 0x09, 0x4d, 0x09, 0x35, 0x09, 0x40, 0x09, 0x21, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x26, 0x09, 0x3f, 0x09, 0x35, 0x09, 0x38, 0x09, + 0x3e, 0x09, 0x02, 0x09, 0x2a, 0x09, 0x42, 0x09, + 0x30, 0x09, 0x4d, 0x09, 0x35, 0x09, 0x40, 0x09, + 0x06, 0x64, 0x61, 0x79, 0x1d, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x26, 0x09, 0x3f, + 0x09, 0x35, 0x09, 0x38, 0x09, 0x3e, 0x09, 0x2e, + 0x09, 0x27, 0x09, 0x4d, 0x09, 0x2f, 0x09, 0x47, + 0x09, 0x12, 0x64, 0x61, 0x79, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x1f, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x26, 0x09, 0x3f, 0x09, + 0x35, 0x09, 0x38, 0x09, 0x3e, 0x09, 0x02, 0x09, + 0x2e, 0x09, 0x27, 0x09, 0x4d, 0x09, 0x2f, 0x09, + 0x47, 0x09, 0x14, 0x64, 0x61, 0x79, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0b, 0x24, 0x09, + 0x3e, 0x09, 0x38, 0x09, 0x3e, 0x09, 0x24, 0x09, + 0x1b, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x24, 0x09, 0x3e, 0x09, 0x38, 0x09, 0x3e, + 0x09, 0x2e, 0x09, 0x27, 0x09, 0x4d, 0x09, 0x2f, + 0x09, 0x47, 0x09, 0x1d, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x24, 0x09, 0x3e, 0x09, + 0x38, 0x09, 0x3e, 0x09, 0x02, 0x09, 0x2e, 0x09, + 0x27, 0x09, 0x4d, 0x09, 0x2f, 0x09, 0x47, 0x09, + 0x1d, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x24, 0x09, 0x3e, 0x09, 0x38, 0x09, 0x3e, + 0x09, 0x2a, 0x09, 0x42, 0x09, 0x30, 0x09, 0x4d, + 0x09, 0x35, 0x09, 0x40, 0x09, 0x1f, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x24, 0x09, + 0x3e, 0x09, 0x38, 0x09, 0x3e, 0x09, 0x02, 0x09, + 0x2a, 0x09, 0x42, 0x09, 0x30, 0x09, 0x4d, 0x09, + 0x35, 0x09, 0x40, 0x09, 0x08, 0x68, 0x6f, 0x75, + 0x72, 0x14, 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x29, 0x2f, 0x09, 0x47, + 0x09, 0x24, 0x09, 0x4d, 0x09, 0x2f, 0x09, 0x3e, + 0x09, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x24, 0x09, 0x3e, 0x09, 0x38, + 0x09, 0x3e, 0x09, 0x2e, 0x09, 0x27, 0x09, 0x4d, + 0x09, 0x2f, 0x09, 0x47, 0x09, 0x2b, 0x2f, 0x09, + 0x47, 0x09, 0x24, 0x09, 0x4d, 0x09, 0x2f, 0x09, + 0x3e, 0x09, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x24, 0x09, 0x3e, 0x09, + 0x38, 0x09, 0x3e, 0x09, 0x02, 0x09, 0x2e, 0x09, + 0x27, 0x09, 0x4d, 0x09, 0x2f, 0x09, 0x47, 0x09, + 0x16, 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x15, 0x2f, 0x09, 0x3e, + 0x09, 0x20, 0x00, 0x2e, 0x09, 0x3f, 0x09, 0x28, + 0x09, 0x3f, 0x09, 0x1f, 0x09, 0x3e, 0x09, 0x24, + 0x09, 0x1f, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x2e, 0x09, 0x3f, 0x09, 0x28, 0x09, + 0x3f, 0x09, 0x1f, 0x09, 0x3e, 0x09, 0x2e, 0x09, + 0x27, 0x09, 0x4d, 0x09, 0x2f, 0x09, 0x47, 0x09, + 0x21, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x2e, 0x09, 0x3f, 0x09, 0x28, 0x09, 0x3f, + 0x09, 0x1f, 0x09, 0x3e, 0x09, 0x02, 0x09, 0x2e, + 0x09, 0x27, 0x09, 0x4d, 0x09, 0x2f, 0x09, 0x47, + 0x09, 0x21, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x2e, 0x09, 0x3f, 0x09, 0x28, 0x09, + 0x3f, 0x09, 0x1f, 0x09, 0x3e, 0x09, 0x2a, 0x09, + 0x42, 0x09, 0x30, 0x09, 0x4d, 0x09, 0x35, 0x09, + 0x40, 0x09, 0x23, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x2e, 0x09, 0x3f, 0x09, 0x28, + 0x09, 0x3f, 0x09, 0x1f, 0x09, 0x3e, 0x09, 0x02, + 0x09, 0x2a, 0x09, 0x42, 0x09, 0x30, 0x09, 0x4d, + 0x09, 0x35, 0x09, 0x40, 0x09, 0x0c, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x65, 0x1f, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x2e, 0x09, 0x3f, + 0x09, 0x28, 0x09, 0x3f, 0x09, 0x2e, 0x00, 0x20, + 0x00, 0x2e, 0x09, 0x27, 0x09, 0x4d, 0x09, 0x2f, + 0x09, 0x47, 0x09, 0x21, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x2e, 0x09, 0x3f, 0x09, + 0x28, 0x09, 0x3f, 0x09, 0x2e, 0x00, 0x20, 0x00, + 0x2a, 0x09, 0x42, 0x09, 0x30, 0x09, 0x4d, 0x09, + 0x35, 0x09, 0x40, 0x09, 0x18, 0x6d, 0x69, 0x6e, + 0x75, 0x74, 0x65, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x1a, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0b, + 0x06, 0x09, 0x24, 0x09, 0x4d, 0x09, 0x24, 0x09, + 0x3e, 0x09, 0x1f, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x38, 0x09, 0x47, 0x09, 0x15, + 0x09, 0x02, 0x09, 0x26, 0x09, 0x3e, 0x09, 0x2e, + 0x09, 0x27, 0x09, 0x4d, 0x09, 0x2f, 0x09, 0x47, + 0x09, 0x21, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x38, 0x09, 0x47, 0x09, 0x15, 0x09, + 0x02, 0x09, 0x26, 0x09, 0x3e, 0x09, 0x02, 0x09, + 0x2e, 0x09, 0x27, 0x09, 0x4d, 0x09, 0x2f, 0x09, + 0x47, 0x09, 0x21, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x38, 0x09, 0x47, 0x09, 0x15, + 0x09, 0x02, 0x09, 0x26, 0x09, 0x3e, 0x09, 0x2a, + 0x09, 0x42, 0x09, 0x30, 0x09, 0x4d, 0x09, 0x35, + 0x09, 0x40, 0x09, 0x23, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x38, 0x09, 0x47, 0x09, + 0x15, 0x09, 0x02, 0x09, 0x26, 0x09, 0x3e, 0x09, + 0x02, 0x09, 0x2a, 0x09, 0x42, 0x09, 0x30, 0x09, + 0x4d, 0x09, 0x35, 0x09, 0x40, 0x09, 0x0c, 0x73, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x1b, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x38, 0x09, + 0x47, 0x09, 0x2e, 0x00, 0x20, 0x00, 0x2e, 0x09, + 0x27, 0x09, 0x4d, 0x09, 0x2f, 0x09, 0x47, 0x09, + 0x1d, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x38, 0x09, 0x47, 0x09, 0x2e, 0x00, 0x20, + 0x00, 0x2a, 0x09, 0x42, 0x09, 0x30, 0x09, 0x4d, + 0x09, 0x35, 0x09, 0x40, 0x09, 0x18, 0x73, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x29, 0x2f, 0x09, 0x47, 0x09, 0x24, + 0x09, 0x4d, 0x09, 0x2f, 0x09, 0x3e, 0x09, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x38, 0x09, 0x47, 0x09, 0x2e, 0x00, 0x20, + 0x00, 0x2e, 0x09, 0x27, 0x09, 0x4d, 0x09, 0x2f, + 0x09, 0x47, 0x09, 0x1a, 0x73, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x08, 0x64, 0x65, 0x76, 0x61, 0x04, 0x6e, + 0x75, 0x08, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6e, + 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, + 0x2d, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, + 0x65, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2d, 0x66, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2f, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, + 0x61, 0x2f, 0x6d, 0x72, 0x2e, 0x6a, 0x73, 0x0d, + 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, + 0x07, 0x00, 0x00, 0xde, 0x0e, 0x01, 0xa0, 0x01, + 0x00, 0x00, 0x00, 0x06, 0xc8, 0x04, 0xd0, 0x00, + 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, + 0xd2, 0x00, 0x00, 0x00, 0xaa, 0x6a, 0x49, 0x07, + 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, + 0xd2, 0x00, 0x00, 0x00, 0x43, 0xd0, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd3, 0x00, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xd5, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd5, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe2, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xe3, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0xe4, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd5, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0xe5, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe9, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0xed, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xee, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xef, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0xf0, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe9, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0xf1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf2, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf5, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xf6, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0xf9, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf2, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfa, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0xfb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf2, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfa, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0xfd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfe, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x01, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x02, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x03, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0x05, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xfe, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x06, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x07, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x03, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0x08, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xfe, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x06, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x07, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x03, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0x09, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x0a, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0d, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x0e, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x0f, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0x11, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x12, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x10, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0x13, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x0f, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x10, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x15, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x17, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x18, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x19, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x1a, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0x1b, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x17, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x18, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x1a, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0x1c, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x1e, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x19, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x1a, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x1f, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x20, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x21, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x22, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x23, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x24, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0x25, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x26, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x27, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x27, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0x28, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x26, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x27, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x27, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x29, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x2a, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x2b, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x2c, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x2d, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x2e, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0x2f, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x30, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x30, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x31, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x31, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0x32, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x30, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x33, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x31, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x31, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x34, 0x01, 0x00, + 0x00, 0x04, 0x35, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x36, 0x01, 0x00, 0x00, 0x4d, 0x37, + 0x01, 0x00, 0x00, 0x24, 0x01, 0x00, 0xc8, 0xc4, + 0x28, 0xf0, 0x04, 0x01, 0xa3, 0x02, 0x76, 0x53, + 0x35, 0x08, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x1c, 0x12, 0x1c, 0x1c, + 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_ms_size = 3016; + +const uint8_t intl_relative_ms[3016] = { + 0x01, 0x64, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x04, 0x6d, 0x73, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x12, 0x74, 0x61, 0x68, + 0x75, 0x6e, 0x20, 0x69, 0x6e, 0x69, 0x16, 0x74, + 0x61, 0x68, 0x75, 0x6e, 0x20, 0x64, 0x65, 0x70, + 0x61, 0x6e, 0x14, 0x74, 0x61, 0x68, 0x75, 0x6e, + 0x20, 0x6c, 0x61, 0x6c, 0x75, 0x04, 0x2d, 0x31, + 0x1e, 0x64, 0x61, 0x6c, 0x61, 0x6d, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x74, 0x61, 0x68, 0x75, 0x6e, + 0x0a, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x0c, 0x66, + 0x75, 0x74, 0x75, 0x72, 0x65, 0x1c, 0x7b, 0x30, + 0x7d, 0x20, 0x74, 0x61, 0x68, 0x75, 0x6e, 0x20, + 0x6c, 0x61, 0x6c, 0x75, 0x08, 0x70, 0x61, 0x73, + 0x74, 0x08, 0x79, 0x65, 0x61, 0x72, 0x0e, 0x74, + 0x68, 0x6e, 0x20, 0x69, 0x6e, 0x69, 0x12, 0x74, + 0x68, 0x6e, 0x20, 0x64, 0x65, 0x70, 0x61, 0x6e, + 0x12, 0x74, 0x68, 0x6e, 0x20, 0x6c, 0x65, 0x70, + 0x61, 0x73, 0x1a, 0x64, 0x61, 0x6c, 0x61, 0x6d, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x74, 0x68, 0x6e, + 0x18, 0x7b, 0x30, 0x7d, 0x20, 0x74, 0x68, 0x6e, + 0x20, 0x6c, 0x61, 0x6c, 0x75, 0x14, 0x79, 0x65, + 0x61, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x16, 0x79, 0x65, 0x61, 0x72, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x1c, 0x73, 0x75, 0x6b, + 0x75, 0x20, 0x74, 0x61, 0x68, 0x75, 0x6e, 0x20, + 0x69, 0x6e, 0x69, 0x2a, 0x73, 0x75, 0x6b, 0x75, + 0x20, 0x74, 0x61, 0x68, 0x75, 0x6e, 0x20, 0x73, + 0x65, 0x74, 0x65, 0x72, 0x75, 0x73, 0x6e, 0x79, + 0x61, 0x1e, 0x73, 0x75, 0x6b, 0x75, 0x20, 0x74, + 0x61, 0x68, 0x75, 0x6e, 0x20, 0x6c, 0x61, 0x6c, + 0x75, 0x28, 0x64, 0x61, 0x6c, 0x61, 0x6d, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x75, 0x6b, 0x75, + 0x20, 0x74, 0x61, 0x68, 0x75, 0x6e, 0x26, 0x7b, + 0x30, 0x7d, 0x20, 0x73, 0x75, 0x6b, 0x75, 0x20, + 0x74, 0x61, 0x68, 0x75, 0x6e, 0x20, 0x6c, 0x61, + 0x6c, 0x75, 0x0e, 0x71, 0x75, 0x61, 0x72, 0x74, + 0x65, 0x72, 0x10, 0x73, 0x75, 0x6b, 0x75, 0x20, + 0x69, 0x6e, 0x69, 0x1e, 0x73, 0x75, 0x6b, 0x75, + 0x20, 0x73, 0x65, 0x74, 0x65, 0x72, 0x75, 0x73, + 0x6e, 0x79, 0x61, 0x14, 0x73, 0x75, 0x6b, 0x75, + 0x20, 0x6c, 0x65, 0x70, 0x61, 0x73, 0x20, 0x64, + 0x6c, 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, + 0x75, 0x6b, 0x75, 0x20, 0x74, 0x68, 0x6e, 0x22, + 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x75, 0x6b, 0x75, + 0x20, 0x74, 0x68, 0x6e, 0x20, 0x6c, 0x61, 0x6c, + 0x75, 0x1a, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, + 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1c, + 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x12, 0x62, + 0x75, 0x6c, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x69, + 0x16, 0x62, 0x75, 0x6c, 0x61, 0x6e, 0x20, 0x64, + 0x65, 0x70, 0x61, 0x6e, 0x14, 0x62, 0x75, 0x6c, + 0x61, 0x6e, 0x20, 0x6c, 0x61, 0x6c, 0x75, 0x1e, + 0x64, 0x61, 0x6c, 0x61, 0x6d, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x62, 0x75, 0x6c, 0x61, 0x6e, 0x1c, + 0x7b, 0x30, 0x7d, 0x20, 0x62, 0x75, 0x6c, 0x61, + 0x6e, 0x20, 0x6c, 0x61, 0x6c, 0x75, 0x0a, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x0e, 0x62, 0x6c, 0x6e, + 0x20, 0x69, 0x6e, 0x69, 0x12, 0x62, 0x6c, 0x6e, + 0x20, 0x64, 0x65, 0x70, 0x61, 0x6e, 0x10, 0x62, + 0x6c, 0x6e, 0x20, 0x6c, 0x61, 0x6c, 0x75, 0x16, + 0x64, 0x6c, 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x62, 0x6c, 0x6e, 0x18, 0x7b, 0x30, 0x7d, 0x20, + 0x62, 0x6c, 0x6e, 0x20, 0x6c, 0x61, 0x6c, 0x75, + 0x16, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x18, 0x6d, 0x6f, 0x6e, + 0x74, 0x68, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x14, 0x6d, 0x69, 0x6e, 0x67, 0x67, 0x75, + 0x20, 0x69, 0x6e, 0x69, 0x18, 0x6d, 0x69, 0x6e, + 0x67, 0x67, 0x75, 0x20, 0x64, 0x65, 0x70, 0x61, + 0x6e, 0x16, 0x6d, 0x69, 0x6e, 0x67, 0x67, 0x75, + 0x20, 0x6c, 0x61, 0x6c, 0x75, 0x20, 0x64, 0x61, + 0x6c, 0x61, 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x6d, 0x69, 0x6e, 0x67, 0x67, 0x75, 0x1e, 0x7b, + 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x67, 0x67, + 0x75, 0x20, 0x6c, 0x61, 0x6c, 0x75, 0x08, 0x77, + 0x65, 0x65, 0x6b, 0x0e, 0x6d, 0x67, 0x75, 0x20, + 0x69, 0x6e, 0x69, 0x12, 0x6d, 0x67, 0x75, 0x20, + 0x64, 0x65, 0x70, 0x61, 0x6e, 0x12, 0x6d, 0x67, + 0x75, 0x20, 0x6c, 0x65, 0x70, 0x61, 0x73, 0x16, + 0x64, 0x6c, 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x6d, 0x67, 0x75, 0x18, 0x7b, 0x30, 0x7d, 0x20, + 0x6d, 0x67, 0x75, 0x20, 0x6c, 0x61, 0x6c, 0x75, + 0x14, 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x16, 0x77, 0x65, 0x65, 0x6b, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x10, + 0x68, 0x61, 0x72, 0x69, 0x20, 0x69, 0x6e, 0x69, + 0x08, 0x65, 0x73, 0x6f, 0x6b, 0x08, 0x6c, 0x75, + 0x73, 0x61, 0x10, 0x6b, 0x65, 0x6c, 0x6d, 0x61, + 0x72, 0x69, 0x6e, 0x04, 0x2d, 0x32, 0x0e, 0x73, + 0x65, 0x6d, 0x61, 0x6c, 0x61, 0x6d, 0x1c, 0x64, + 0x61, 0x6c, 0x61, 0x6d, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x68, 0x61, 0x72, 0x69, 0x1a, 0x7b, 0x30, + 0x7d, 0x20, 0x68, 0x61, 0x72, 0x69, 0x20, 0x6c, + 0x61, 0x6c, 0x75, 0x06, 0x64, 0x61, 0x79, 0x18, + 0x64, 0x6c, 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x68, 0x61, 0x72, 0x69, 0x12, 0x64, 0x61, 0x79, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0a, 0x73, + 0x65, 0x6d, 0x6c, 0x6d, 0x14, 0x64, 0x61, 0x79, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0e, + 0x6a, 0x61, 0x6d, 0x20, 0x69, 0x6e, 0x69, 0x1a, + 0x64, 0x61, 0x6c, 0x61, 0x6d, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x6a, 0x61, 0x6d, 0x18, 0x7b, 0x30, + 0x7d, 0x20, 0x6a, 0x61, 0x6d, 0x20, 0x6c, 0x61, + 0x6c, 0x75, 0x08, 0x68, 0x6f, 0x75, 0x72, 0x16, + 0x64, 0x6c, 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x6a, 0x61, 0x6d, 0x14, 0x68, 0x6f, 0x75, 0x72, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, 0x68, + 0x6f, 0x75, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x1c, 0x70, 0x61, 0x64, 0x61, 0x20, + 0x6d, 0x69, 0x6e, 0x69, 0x74, 0x20, 0x69, 0x6e, + 0x69, 0x1e, 0x64, 0x61, 0x6c, 0x61, 0x6d, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x69, + 0x74, 0x1c, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, + 0x6e, 0x69, 0x74, 0x20, 0x6c, 0x61, 0x6c, 0x75, + 0x0c, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x16, + 0x64, 0x6c, 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x6d, 0x69, 0x6e, 0x18, 0x7b, 0x30, 0x7d, 0x20, + 0x6d, 0x69, 0x6e, 0x20, 0x6c, 0x61, 0x6c, 0x75, + 0x18, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x10, 0x73, 0x65, 0x6b, 0x61, + 0x72, 0x61, 0x6e, 0x67, 0x1c, 0x64, 0x61, 0x6c, + 0x61, 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, + 0x61, 0x61, 0x74, 0x1a, 0x7b, 0x30, 0x7d, 0x20, + 0x73, 0x61, 0x61, 0x74, 0x20, 0x6c, 0x61, 0x6c, + 0x75, 0x0c, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, + 0x18, 0x64, 0x6c, 0x6d, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x73, 0x61, 0x61, 0x74, 0x18, 0x73, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x1a, 0x73, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, 0x75, + 0x08, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6e, 0x6f, + 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2d, + 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2d, 0x66, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x2f, 0x6c, 0x6f, 0x63, + 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, + 0x2f, 0x6d, 0x73, 0x2e, 0x6a, 0x73, 0x0d, 0x00, + 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, 0x07, + 0x00, 0x00, 0x9e, 0x0c, 0x01, 0xa0, 0x01, 0x00, + 0x00, 0x00, 0x06, 0xc8, 0x04, 0xd0, 0x00, 0x00, + 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, + 0x00, 0x00, 0x00, 0xaa, 0x6a, 0x09, 0x06, 0x00, + 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, + 0x00, 0x00, 0x00, 0x43, 0xd0, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xd3, 0x00, 0x00, 0x00, 0x4d, 0xd4, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xd5, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xdf, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xe1, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe2, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe3, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xe4, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xdf, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xe1, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe2, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe3, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xe7, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xe8, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xea, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xeb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xec, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xed, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xef, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf0, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xf1, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xed, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xee, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xf2, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf3, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xf4, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf6, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf7, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xf8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xfa, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xfb, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xfe, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf9, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xfa, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfc, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf7, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xff, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0x01, 0x01, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x02, 0x01, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0x05, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x06, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0x07, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x09, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0a, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0x0b, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0x07, 0x01, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x08, 0x01, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0x0c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x0d, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0x0e, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, 0x02, + 0x00, 0x00, 0x80, 0x04, 0x10, 0x01, 0x00, 0x00, + 0x4d, 0x11, 0x01, 0x00, 0x00, 0x04, 0x12, 0x01, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0x15, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x0d, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0x0e, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, 0x02, + 0x00, 0x00, 0x80, 0x04, 0x10, 0x01, 0x00, 0x00, + 0x4d, 0x11, 0x01, 0x00, 0x00, 0x04, 0x12, 0x01, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0x17, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x0d, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0x0e, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, 0x02, + 0x00, 0x00, 0x80, 0x04, 0x10, 0x01, 0x00, 0x00, + 0x4d, 0x11, 0x01, 0x00, 0x00, 0x04, 0x18, 0x01, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0x19, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x1a, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, + 0x04, 0x1b, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x1c, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0x1d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x1a, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, + 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x1c, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0x1f, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x1a, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, + 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x1c, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0x20, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x21, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, + 0x04, 0x22, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x23, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0x24, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x25, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x26, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x27, 0x01, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x25, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x26, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0x28, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x29, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x2a, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x2b, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0x2c, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x29, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x2d, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x2b, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0x2e, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x29, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x2d, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x2b, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0x2f, 0x01, 0x00, 0x00, + 0x04, 0x30, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x31, 0x01, 0x00, 0x00, 0x4d, 0x32, 0x01, + 0x00, 0x00, 0x24, 0x01, 0x00, 0xc8, 0xc4, 0x28, + 0xe6, 0x04, 0x01, 0x83, 0x02, 0x76, 0x53, 0x35, + 0x08, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, + 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, + 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, + 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, + 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, + 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x1c, 0x08, + 0x35, 0x1c, 0x1c, 0x1c, 0x12, 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_my_MM_size = 3053; + +const uint8_t intl_relative_my_MM[3053] = { + 0x01, 0x4e, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x0a, 0x6d, 0x79, 0x2d, 0x4d, 0x4d, + 0x0c, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x0f, + 0x1a, 0x10, 0x01, 0x10, 0x2f, 0x10, 0x14, 0x10, + 0x3e, 0x10, 0x05, 0x10, 0x3a, 0x10, 0x15, 0x1c, + 0x10, 0x2c, 0x10, 0x19, 0x10, 0x0a, 0x10, 0x37, + 0x10, 0x3a, 0x10, 0x14, 0x10, 0x3e, 0x10, 0x05, + 0x10, 0x3a, 0x10, 0x11, 0x1a, 0x10, 0x19, 0x10, + 0x14, 0x10, 0x3a, 0x10, 0x14, 0x10, 0x3e, 0x10, + 0x05, 0x10, 0x3a, 0x10, 0x04, 0x2d, 0x31, 0x1d, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x14, 0x10, 0x3e, 0x10, 0x05, 0x10, 0x3a, 0x10, + 0x21, 0x10, 0x10, 0x10, 0x3d, 0x10, 0x04, 0x10, + 0x3a, 0x10, 0x38, 0x10, 0x0a, 0x6f, 0x74, 0x68, + 0x65, 0x72, 0x0c, 0x66, 0x75, 0x74, 0x75, 0x72, + 0x65, 0x29, 0x15, 0x10, 0x3c, 0x10, 0x2e, 0x10, + 0x38, 0x10, 0x01, 0x10, 0x32, 0x10, 0x37, 0x10, + 0x1e, 0x10, 0x0a, 0x10, 0x37, 0x10, 0x3a, 0x10, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x14, 0x10, 0x3e, 0x10, 0x05, 0x10, + 0x3a, 0x10, 0x08, 0x70, 0x61, 0x73, 0x74, 0x08, + 0x79, 0x65, 0x61, 0x72, 0x14, 0x79, 0x65, 0x61, + 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, + 0x79, 0x65, 0x61, 0x72, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x19, 0x1a, 0x10, 0x01, 0x10, + 0x2f, 0x10, 0x20, 0x00, 0x1e, 0x10, 0x2f, 0x10, + 0x36, 0x10, 0x38, 0x10, 0x1c, 0x10, 0x15, 0x10, + 0x10, 0x10, 0x3a, 0x10, 0x1f, 0x1c, 0x10, 0x2c, + 0x10, 0x19, 0x10, 0x0a, 0x10, 0x37, 0x10, 0x3a, + 0x10, 0x20, 0x00, 0x1e, 0x10, 0x2f, 0x10, 0x36, + 0x10, 0x38, 0x10, 0x1c, 0x10, 0x15, 0x10, 0x10, + 0x10, 0x3a, 0x10, 0x29, 0x15, 0x10, 0x3c, 0x10, + 0x2e, 0x10, 0x38, 0x10, 0x01, 0x10, 0x32, 0x10, + 0x37, 0x10, 0x1e, 0x10, 0x0a, 0x10, 0x37, 0x10, + 0x3a, 0x10, 0x20, 0x00, 0x1e, 0x10, 0x2f, 0x10, + 0x36, 0x10, 0x38, 0x10, 0x1c, 0x10, 0x15, 0x10, + 0x10, 0x10, 0x3a, 0x10, 0x2d, 0x1e, 0x10, 0x2f, + 0x10, 0x36, 0x10, 0x38, 0x10, 0x1c, 0x10, 0x15, + 0x10, 0x10, 0x10, 0x3a, 0x10, 0x00, 0x10, 0x2c, + 0x10, 0x1c, 0x10, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x21, 0x10, 0x10, + 0x10, 0x3d, 0x10, 0x04, 0x10, 0x3a, 0x10, 0x38, + 0x10, 0x49, 0x15, 0x10, 0x3c, 0x10, 0x2e, 0x10, + 0x38, 0x10, 0x01, 0x10, 0x32, 0x10, 0x37, 0x10, + 0x1e, 0x10, 0x0a, 0x10, 0x37, 0x10, 0x3a, 0x10, + 0x20, 0x00, 0x1e, 0x10, 0x2f, 0x10, 0x36, 0x10, + 0x38, 0x10, 0x1c, 0x10, 0x15, 0x10, 0x10, 0x10, + 0x3a, 0x10, 0x00, 0x10, 0x2c, 0x10, 0x1c, 0x10, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x01, 0x10, 0x2f, 0x10, 0x21, 0x10, + 0x10, 0x10, 0x3d, 0x10, 0x04, 0x10, 0x3a, 0x10, + 0x38, 0x10, 0x0e, 0x71, 0x75, 0x61, 0x72, 0x74, + 0x65, 0x72, 0x17, 0x1a, 0x10, 0x01, 0x10, 0x2f, + 0x10, 0x1e, 0x10, 0x2f, 0x10, 0x36, 0x10, 0x38, + 0x10, 0x1c, 0x10, 0x15, 0x10, 0x10, 0x10, 0x3a, + 0x10, 0x27, 0x14, 0x10, 0x31, 0x10, 0x2c, 0x10, + 0x00, 0x10, 0x3a, 0x10, 0x1c, 0x10, 0x2c, 0x10, + 0x19, 0x10, 0x0a, 0x10, 0x37, 0x10, 0x3a, 0x10, + 0x1e, 0x10, 0x2f, 0x10, 0x36, 0x10, 0x38, 0x10, + 0x1c, 0x10, 0x15, 0x10, 0x10, 0x10, 0x3a, 0x10, + 0x25, 0x15, 0x10, 0x3c, 0x10, 0x2e, 0x10, 0x38, + 0x10, 0x01, 0x10, 0x32, 0x10, 0x37, 0x10, 0x1e, + 0x10, 0x31, 0x10, 0x2c, 0x10, 0x1e, 0x10, 0x2f, + 0x10, 0x36, 0x10, 0x38, 0x10, 0x1c, 0x10, 0x15, + 0x10, 0x10, 0x10, 0x3a, 0x10, 0x31, 0x1e, 0x10, + 0x2f, 0x10, 0x36, 0x10, 0x38, 0x10, 0x1c, 0x10, + 0x15, 0x10, 0x10, 0x10, 0x3a, 0x10, 0x00, 0x10, + 0x2c, 0x10, 0x1c, 0x10, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x01, 0x10, + 0x2f, 0x10, 0x21, 0x10, 0x10, 0x10, 0x3d, 0x10, + 0x04, 0x10, 0x3a, 0x10, 0x38, 0x10, 0x1a, 0x71, + 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x1c, 0x71, 0x75, 0x61, + 0x72, 0x74, 0x65, 0x72, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x09, 0x1a, 0x10, 0x01, 0x10, + 0x2f, 0x10, 0x1c, 0x10, 0x0f, 0x1c, 0x10, 0x2c, + 0x10, 0x19, 0x10, 0x0a, 0x10, 0x37, 0x10, 0x3a, + 0x10, 0x1c, 0x10, 0x19, 0x15, 0x10, 0x3c, 0x10, + 0x2e, 0x10, 0x38, 0x10, 0x01, 0x10, 0x32, 0x10, + 0x37, 0x10, 0x1e, 0x10, 0x0a, 0x10, 0x37, 0x10, + 0x3a, 0x10, 0x1c, 0x10, 0x17, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x1c, 0x10, 0x21, + 0x10, 0x10, 0x10, 0x3d, 0x10, 0x04, 0x10, 0x3a, + 0x10, 0x38, 0x10, 0x23, 0x15, 0x10, 0x3c, 0x10, + 0x2e, 0x10, 0x38, 0x10, 0x01, 0x10, 0x32, 0x10, + 0x37, 0x10, 0x1e, 0x10, 0x0a, 0x10, 0x37, 0x10, + 0x3a, 0x10, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x1c, 0x10, 0x0a, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x16, 0x6d, 0x6f, 0x6e, + 0x74, 0x68, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x18, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x1b, 0x1a, 0x10, + 0x01, 0x10, 0x2f, 0x10, 0x20, 0x00, 0x1e, 0x10, + 0x2e, 0x10, 0x10, 0x10, 0x04, 0x10, 0x3a, 0x10, + 0x38, 0x10, 0x15, 0x10, 0x10, 0x10, 0x3a, 0x10, + 0x21, 0x1c, 0x10, 0x2c, 0x10, 0x19, 0x10, 0x0a, + 0x10, 0x37, 0x10, 0x3a, 0x10, 0x20, 0x00, 0x1e, + 0x10, 0x2e, 0x10, 0x10, 0x10, 0x04, 0x10, 0x3a, + 0x10, 0x38, 0x10, 0x15, 0x10, 0x10, 0x10, 0x3a, + 0x10, 0x2b, 0x15, 0x10, 0x3c, 0x10, 0x2e, 0x10, + 0x38, 0x10, 0x01, 0x10, 0x32, 0x10, 0x37, 0x10, + 0x1e, 0x10, 0x0a, 0x10, 0x37, 0x10, 0x3a, 0x10, + 0x20, 0x00, 0x1e, 0x10, 0x2e, 0x10, 0x10, 0x10, + 0x04, 0x10, 0x3a, 0x10, 0x38, 0x10, 0x15, 0x10, + 0x10, 0x10, 0x3a, 0x10, 0x1b, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x15, 0x10, 0x10, + 0x10, 0x3a, 0x10, 0x21, 0x10, 0x10, 0x10, 0x3d, + 0x10, 0x04, 0x10, 0x3a, 0x10, 0x38, 0x10, 0x27, + 0x15, 0x10, 0x3c, 0x10, 0x2e, 0x10, 0x38, 0x10, + 0x01, 0x10, 0x32, 0x10, 0x37, 0x10, 0x1e, 0x10, + 0x0a, 0x10, 0x37, 0x10, 0x3a, 0x10, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x15, 0x10, 0x10, 0x10, 0x3a, 0x10, 0x08, 0x77, + 0x65, 0x65, 0x6b, 0x14, 0x77, 0x65, 0x65, 0x6b, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, 0x77, + 0x65, 0x65, 0x6b, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x09, 0x1a, 0x10, 0x14, 0x10, 0x31, + 0x10, 0x37, 0x10, 0x11, 0x19, 0x10, 0x14, 0x10, + 0x00, 0x10, 0x3a, 0x10, 0x16, 0x10, 0x3c, 0x10, + 0x14, 0x10, 0x3a, 0x10, 0x11, 0x1e, 0x10, 0x14, + 0x10, 0x3a, 0x10, 0x18, 0x10, 0x00, 0x10, 0x3a, + 0x10, 0x01, 0x10, 0x2b, 0x10, 0x0f, 0x10, 0x10, + 0x05, 0x10, 0x3a, 0x10, 0x14, 0x10, 0x31, 0x10, + 0x37, 0x10, 0x00, 0x10, 0x04, 0x2d, 0x32, 0x0b, + 0x19, 0x10, 0x14, 0x10, 0x31, 0x10, 0x37, 0x10, + 0x00, 0x10, 0x1b, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x1b, 0x10, 0x00, 0x10, 0x3a, + 0x10, 0x21, 0x10, 0x10, 0x10, 0x3d, 0x10, 0x04, + 0x10, 0x3a, 0x10, 0x38, 0x10, 0x27, 0x15, 0x10, + 0x3c, 0x10, 0x2e, 0x10, 0x38, 0x10, 0x01, 0x10, + 0x32, 0x10, 0x37, 0x10, 0x1e, 0x10, 0x0a, 0x10, + 0x37, 0x10, 0x3a, 0x10, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x1b, 0x10, + 0x00, 0x10, 0x3a, 0x10, 0x06, 0x64, 0x61, 0x79, + 0x12, 0x64, 0x61, 0x79, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x14, 0x64, 0x61, 0x79, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0f, 0x24, 0x10, + 0x21, 0x10, 0x01, 0x10, 0x3b, 0x10, 0x2d, 0x10, + 0x14, 0x10, 0x3a, 0x10, 0x1d, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x14, 0x10, 0x2c, + 0x10, 0x1b, 0x10, 0x2e, 0x10, 0x21, 0x10, 0x10, + 0x10, 0x3d, 0x10, 0x04, 0x10, 0x3a, 0x10, 0x38, + 0x10, 0x29, 0x15, 0x10, 0x3c, 0x10, 0x2e, 0x10, + 0x38, 0x10, 0x01, 0x10, 0x32, 0x10, 0x37, 0x10, + 0x1e, 0x10, 0x0a, 0x10, 0x37, 0x10, 0x3a, 0x10, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x14, 0x10, 0x2c, 0x10, 0x1b, 0x10, + 0x2e, 0x10, 0x08, 0x68, 0x6f, 0x75, 0x72, 0x14, + 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x16, 0x68, 0x6f, 0x75, 0x72, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0d, 0x24, + 0x10, 0x19, 0x10, 0x2d, 0x10, 0x14, 0x10, 0x05, + 0x10, 0x3a, 0x10, 0x1f, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x19, 0x10, 0x2d, 0x10, + 0x14, 0x10, 0x05, 0x10, 0x3a, 0x10, 0x21, 0x10, + 0x10, 0x10, 0x3d, 0x10, 0x04, 0x10, 0x3a, 0x10, + 0x38, 0x10, 0x2b, 0x15, 0x10, 0x3c, 0x10, 0x2e, + 0x10, 0x38, 0x10, 0x01, 0x10, 0x32, 0x10, 0x37, + 0x10, 0x1e, 0x10, 0x0a, 0x10, 0x37, 0x10, 0x3a, + 0x10, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x19, 0x10, 0x2d, 0x10, 0x14, + 0x10, 0x05, 0x10, 0x3a, 0x10, 0x0c, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x65, 0x18, 0x6d, 0x69, 0x6e, + 0x75, 0x74, 0x65, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x1a, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x07, + 0x1a, 0x10, 0x01, 0x10, 0x2f, 0x10, 0x23, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x05, + 0x10, 0x00, 0x10, 0x39, 0x10, 0x00, 0x10, 0x14, + 0x10, 0x37, 0x10, 0x3a, 0x10, 0x21, 0x10, 0x10, + 0x10, 0x3d, 0x10, 0x04, 0x10, 0x3a, 0x10, 0x38, + 0x10, 0x2f, 0x15, 0x10, 0x3c, 0x10, 0x2e, 0x10, + 0x38, 0x10, 0x01, 0x10, 0x32, 0x10, 0x37, 0x10, + 0x1e, 0x10, 0x0a, 0x10, 0x37, 0x10, 0x3a, 0x10, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x05, 0x10, 0x00, 0x10, 0x39, 0x10, + 0x00, 0x10, 0x14, 0x10, 0x37, 0x10, 0x3a, 0x10, + 0x0c, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x18, + 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x73, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x08, 0x6d, 0x79, 0x6d, 0x72, 0x04, + 0x6e, 0x75, 0x08, 0x64, 0x61, 0x74, 0x61, 0x76, + 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, + 0x6c, 0x2d, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, + 0x76, 0x65, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2d, + 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2f, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, + 0x74, 0x61, 0x2f, 0x6d, 0x79, 0x2d, 0x4d, 0x4d, + 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, + 0x01, 0x00, 0x01, 0x00, 0x07, 0x00, 0x00, 0xde, + 0x09, 0x01, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x06, + 0xc8, 0x04, 0xd0, 0x00, 0x00, 0x00, 0x39, 0xd1, + 0x00, 0x00, 0x00, 0x42, 0xd2, 0x00, 0x00, 0x00, + 0xaa, 0x6a, 0xc9, 0x04, 0x00, 0x00, 0x39, 0xd1, + 0x00, 0x00, 0x00, 0x42, 0xd2, 0x00, 0x00, 0x00, + 0x43, 0xd0, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd3, + 0x00, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xd7, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xd9, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe1, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xe2, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xe3, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe7, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe5, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xe8, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xe9, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xea, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xec, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xed, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf0, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf1, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xf2, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0xf0, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xf1, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0xf3, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xf4, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf5, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf8, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf9, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xfa, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0xf8, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xf9, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0xfb, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xfc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfd, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, + 0x02, 0x00, 0x00, 0x80, 0x04, 0x00, 0x01, 0x00, + 0x00, 0x4d, 0x01, 0x01, 0x00, 0x00, 0x04, 0x02, + 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0x05, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x03, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x04, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x06, + 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x03, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x04, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x07, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x09, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0a, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x0b, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x09, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x0a, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0x0c, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0x0d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x0e, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x0b, 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0x11, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x0f, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x10, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x12, + 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x0f, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x10, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x13, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x17, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0x18, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0x19, 0x01, 0x00, 0x00, 0x04, 0x1a, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x1b, 0x01, + 0x00, 0x00, 0x4d, 0x1c, 0x01, 0x00, 0x00, 0x24, + 0x01, 0x00, 0xc8, 0xc4, 0x28, 0xba, 0x04, 0x01, + 0xe3, 0x01, 0x76, 0x53, 0x35, 0x08, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, + 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, + 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, + 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, + 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, + 0x1c, 0x12, 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_nb_size = 3859; + +const uint8_t intl_relative_nb[3859] = { + 0x01, 0x7d, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x04, 0x6e, 0x62, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x08, 0x69, 0x20, 0xe5, + 0x72, 0x10, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x20, + 0xe5, 0x72, 0x0c, 0x69, 0x20, 0x66, 0x6a, 0x6f, + 0x72, 0x04, 0x2d, 0x31, 0x12, 0x6f, 0x6d, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0xe5, 0x72, 0x06, 0x6f, + 0x6e, 0x65, 0x0a, 0x6f, 0x74, 0x68, 0x65, 0x72, + 0x0c, 0x66, 0x75, 0x74, 0x75, 0x72, 0x65, 0x20, + 0x66, 0x6f, 0x72, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0xe5, 0x72, 0x20, 0x73, 0x69, 0x64, 0x65, 0x6e, + 0x08, 0x70, 0x61, 0x73, 0x74, 0x08, 0x79, 0x65, + 0x61, 0x72, 0x14, 0x79, 0x65, 0x61, 0x72, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0e, 0x2b, 0x7b, + 0x30, 0x7d, 0x20, 0xe5, 0x72, 0x0f, 0x13, 0x20, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0xe5, 0x00, 0x72, 0x00, 0x16, 0x79, 0x65, 0x61, + 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x1e, 0x64, 0x65, 0x74, 0x74, 0x65, 0x20, 0x6b, + 0x76, 0x61, 0x72, 0x74, 0x61, 0x6c, 0x65, 0x74, + 0x1a, 0x6e, 0x65, 0x73, 0x74, 0x65, 0x20, 0x6b, + 0x76, 0x61, 0x72, 0x74, 0x61, 0x6c, 0x1e, 0x66, + 0x6f, 0x72, 0x72, 0x69, 0x67, 0x65, 0x20, 0x6b, + 0x76, 0x61, 0x72, 0x74, 0x61, 0x6c, 0x1c, 0x6f, + 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6b, 0x76, + 0x61, 0x72, 0x74, 0x61, 0x6c, 0x20, 0x6f, 0x6d, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6b, 0x76, 0x61, + 0x72, 0x74, 0x61, 0x6c, 0x65, 0x72, 0x2a, 0x66, + 0x6f, 0x72, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6b, + 0x76, 0x61, 0x72, 0x74, 0x61, 0x6c, 0x20, 0x73, + 0x69, 0x64, 0x65, 0x6e, 0x2e, 0x66, 0x6f, 0x72, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6b, 0x76, 0x61, + 0x72, 0x74, 0x61, 0x6c, 0x65, 0x72, 0x20, 0x73, + 0x69, 0x64, 0x65, 0x6e, 0x0e, 0x71, 0x75, 0x61, + 0x72, 0x74, 0x65, 0x72, 0x12, 0x64, 0x65, 0x74, + 0x74, 0x65, 0x20, 0x6b, 0x76, 0x2e, 0x12, 0x6e, + 0x65, 0x73, 0x74, 0x65, 0x20, 0x6b, 0x76, 0x2e, + 0x16, 0x66, 0x6f, 0x72, 0x72, 0x69, 0x67, 0x65, + 0x20, 0x6b, 0x76, 0x2e, 0x14, 0x6f, 0x6d, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x6b, 0x76, 0x2e, 0x22, + 0x66, 0x6f, 0x72, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x6b, 0x76, 0x2e, 0x20, 0x73, 0x69, 0x64, 0x65, + 0x6e, 0x1a, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, + 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x10, + 0x2b, 0x7b, 0x30, 0x7d, 0x20, 0x6b, 0x76, 0x2e, + 0x11, 0x13, 0x20, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x6b, 0x00, 0x76, 0x00, 0x2e, + 0x00, 0x1c, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, + 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x1a, 0x64, 0x65, 0x6e, 0x6e, 0x65, 0x20, 0x6d, + 0xe5, 0x6e, 0x65, 0x64, 0x65, 0x6e, 0x16, 0x6e, + 0x65, 0x73, 0x74, 0x65, 0x20, 0x6d, 0xe5, 0x6e, + 0x65, 0x64, 0x1a, 0x66, 0x6f, 0x72, 0x72, 0x69, + 0x67, 0x65, 0x20, 0x6d, 0xe5, 0x6e, 0x65, 0x64, + 0x18, 0x6f, 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x6d, 0xe5, 0x6e, 0x65, 0x64, 0x1c, 0x6f, 0x6d, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0xe5, 0x6e, + 0x65, 0x64, 0x65, 0x72, 0x26, 0x66, 0x6f, 0x72, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0xe5, 0x6e, + 0x65, 0x64, 0x20, 0x73, 0x69, 0x64, 0x65, 0x6e, + 0x2a, 0x66, 0x6f, 0x72, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x6d, 0xe5, 0x6e, 0x65, 0x64, 0x65, 0x72, + 0x20, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x0a, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x12, 0x64, 0x65, 0x6e, + 0x6e, 0x65, 0x20, 0x6d, 0x64, 0x2e, 0x12, 0x6e, + 0x65, 0x73, 0x74, 0x65, 0x20, 0x6d, 0x64, 0x2e, + 0x16, 0x66, 0x6f, 0x72, 0x72, 0x69, 0x67, 0x65, + 0x20, 0x6d, 0x64, 0x2e, 0x14, 0x6f, 0x6d, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x64, 0x2e, 0x22, + 0x66, 0x6f, 0x72, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x6d, 0x64, 0x2e, 0x20, 0x73, 0x69, 0x64, 0x65, + 0x6e, 0x16, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x10, 0x2b, 0x7b, + 0x30, 0x7d, 0x20, 0x6d, 0x64, 0x2e, 0x10, 0x2d, + 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x64, 0x2e, 0x18, + 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x14, 0x64, 0x65, 0x6e, + 0x6e, 0x65, 0x20, 0x75, 0x6b, 0x65, 0x6e, 0x12, + 0x6e, 0x65, 0x73, 0x74, 0x65, 0x20, 0x75, 0x6b, + 0x65, 0x16, 0x66, 0x6f, 0x72, 0x72, 0x69, 0x67, + 0x65, 0x20, 0x75, 0x6b, 0x65, 0x14, 0x6f, 0x6d, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x75, 0x6b, 0x65, + 0x16, 0x6f, 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x75, 0x6b, 0x65, 0x72, 0x22, 0x66, 0x6f, 0x72, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x75, 0x6b, 0x65, + 0x20, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x24, 0x66, + 0x6f, 0x72, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x75, + 0x6b, 0x65, 0x72, 0x20, 0x73, 0x69, 0x64, 0x65, + 0x6e, 0x08, 0x77, 0x65, 0x65, 0x6b, 0x12, 0x6f, + 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x75, 0x2e, + 0x20, 0x66, 0x6f, 0x72, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x75, 0x2e, 0x20, 0x73, 0x69, 0x64, 0x65, + 0x6e, 0x14, 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x0e, 0x2b, 0x7b, 0x30, + 0x7d, 0x20, 0x75, 0x2e, 0x0e, 0x2d, 0x7b, 0x30, + 0x7d, 0x20, 0x75, 0x2e, 0x16, 0x77, 0x65, 0x65, + 0x6b, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x0a, 0x69, 0x20, 0x64, 0x61, 0x67, 0x10, 0x69, + 0x20, 0x6d, 0x6f, 0x72, 0x67, 0x65, 0x6e, 0x18, + 0x69, 0x20, 0x6f, 0x76, 0x65, 0x72, 0x6d, 0x6f, + 0x72, 0x67, 0x65, 0x6e, 0x12, 0x69, 0x20, 0x66, + 0x6f, 0x72, 0x67, 0xe5, 0x72, 0x73, 0x04, 0x2d, + 0x32, 0x0a, 0x69, 0x20, 0x67, 0xe5, 0x72, 0x16, + 0x6f, 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x64, + 0xf8, 0x67, 0x6e, 0x24, 0x66, 0x6f, 0x72, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x64, 0xf8, 0x67, 0x6e, + 0x20, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x06, 0x64, + 0x61, 0x79, 0x12, 0x6f, 0x6d, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x64, 0x2e, 0x20, 0x66, 0x6f, 0x72, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x64, 0x2e, 0x20, + 0x73, 0x69, 0x64, 0x65, 0x6e, 0x12, 0x64, 0x61, + 0x79, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0a, + 0x2b, 0x32, 0x20, 0x64, 0x2e, 0x0a, 0x2d, 0x32, + 0x20, 0x64, 0x2e, 0x0e, 0x2b, 0x7b, 0x30, 0x7d, + 0x20, 0x64, 0x2e, 0x0e, 0x2d, 0x7b, 0x30, 0x7d, + 0x20, 0x64, 0x2e, 0x14, 0x64, 0x61, 0x79, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x16, 0x64, + 0x65, 0x6e, 0x6e, 0x65, 0x20, 0x74, 0x69, 0x6d, + 0x65, 0x6e, 0x16, 0x6f, 0x6d, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x6f, + 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x74, 0x69, + 0x6d, 0x65, 0x72, 0x24, 0x66, 0x6f, 0x72, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x74, 0x69, 0x6d, 0x65, + 0x20, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x26, 0x66, + 0x6f, 0x72, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x74, + 0x69, 0x6d, 0x65, 0x72, 0x20, 0x73, 0x69, 0x64, + 0x65, 0x6e, 0x08, 0x68, 0x6f, 0x75, 0x72, 0x10, + 0x6f, 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x74, + 0x1e, 0x66, 0x6f, 0x72, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x74, 0x20, 0x73, 0x69, 0x64, 0x65, 0x6e, + 0x14, 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x0c, 0x2b, 0x7b, 0x30, 0x7d, + 0x20, 0x74, 0x0c, 0x2d, 0x7b, 0x30, 0x7d, 0x20, + 0x74, 0x16, 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x1c, 0x64, 0x65, + 0x74, 0x74, 0x65, 0x20, 0x6d, 0x69, 0x6e, 0x75, + 0x74, 0x74, 0x65, 0x74, 0x1a, 0x6f, 0x6d, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x75, + 0x74, 0x74, 0x1e, 0x6f, 0x6d, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x74, + 0x65, 0x72, 0x28, 0x66, 0x6f, 0x72, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x74, + 0x74, 0x20, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x2c, + 0x66, 0x6f, 0x72, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x74, 0x65, 0x72, + 0x20, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x0c, 0x6d, + 0x69, 0x6e, 0x75, 0x74, 0x65, 0x14, 0x6f, 0x6d, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, + 0x22, 0x66, 0x6f, 0x72, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x6d, 0x69, 0x6e, 0x20, 0x73, 0x69, 0x64, + 0x65, 0x6e, 0x18, 0x6d, 0x69, 0x6e, 0x75, 0x74, + 0x65, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x10, + 0x2b, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, + 0x10, 0x2d, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, + 0x6e, 0x1a, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x04, + 0x6e, 0xe5, 0x1a, 0x6f, 0x6d, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x73, 0x65, 0x6b, 0x75, 0x6e, 0x64, + 0x1e, 0x6f, 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x73, 0x65, 0x6b, 0x75, 0x6e, 0x64, 0x65, 0x72, + 0x28, 0x66, 0x6f, 0x72, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x73, 0x65, 0x6b, 0x75, 0x6e, 0x64, 0x20, + 0x73, 0x69, 0x64, 0x65, 0x6e, 0x2c, 0x66, 0x6f, + 0x72, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, + 0x6b, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x73, + 0x69, 0x64, 0x65, 0x6e, 0x0c, 0x73, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x14, 0x6f, 0x6d, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x73, 0x65, 0x6b, 0x22, 0x66, + 0x6f, 0x72, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, + 0x65, 0x6b, 0x20, 0x73, 0x69, 0x64, 0x65, 0x6e, + 0x18, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x2b, 0x7b, + 0x30, 0x7d, 0x20, 0x73, 0x0c, 0x2d, 0x7b, 0x30, + 0x7d, 0x20, 0x73, 0x1a, 0x73, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, + 0x75, 0x08, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6e, + 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, + 0x2d, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, + 0x65, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2d, 0x66, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2f, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, + 0x61, 0x2f, 0x6e, 0x62, 0x2e, 0x6a, 0x73, 0x0d, + 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, + 0x07, 0x00, 0x00, 0xea, 0x0f, 0x01, 0xa0, 0x01, + 0x00, 0x00, 0x00, 0x06, 0xc8, 0x04, 0xd0, 0x00, + 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, + 0xd2, 0x00, 0x00, 0x00, 0xaa, 0x6a, 0xd5, 0x07, + 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, + 0xd2, 0x00, 0x00, 0x00, 0x43, 0xd0, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd3, 0x00, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xd5, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd5, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd5, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe1, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xe1, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe2, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xe2, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe4, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe7, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xe8, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xea, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xec, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xef, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xef, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf0, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0xf1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xec, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf2, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf3, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0xf4, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf5, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf8, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xf9, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0xfc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfd, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x00, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x00, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x01, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0x02, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xfd, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x03, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x03, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x04, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0x05, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x06, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x09, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x0a, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x0b, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0x0d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x06, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0e, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x0e, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x0f, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0x10, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x06, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x11, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x11, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x12, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0x13, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x14, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, + 0x02, 0x00, 0x00, 0x80, 0x04, 0x17, 0x01, 0x00, + 0x00, 0x4d, 0x18, 0x01, 0x00, 0x00, 0x04, 0x19, + 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x1a, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x1a, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x1b, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x1b, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0x1c, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x16, + 0x01, 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, + 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, 0x18, 0x01, + 0x00, 0x00, 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x1d, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x1d, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x1e, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0x1f, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x14, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0x20, 0x01, 0x00, 0x00, 0x4d, + 0x02, 0x00, 0x00, 0x80, 0x04, 0x21, 0x01, 0x00, + 0x00, 0x4d, 0x18, 0x01, 0x00, 0x00, 0x04, 0x19, + 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x22, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x22, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x23, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x23, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0x24, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x25, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x26, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x27, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x28, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x29, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0x2a, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x2b, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x2b, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x2c, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x2c, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0x2d, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x2e, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x2e, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x2f, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x2f, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0x30, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x31, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x32, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x33, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x34, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x35, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0x36, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x37, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x37, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x38, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x38, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0x39, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x3a, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x3a, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x3b, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x3b, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0x3c, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x3d, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x3e, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x3f, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x40, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x41, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0x42, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x3d, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x0b, 0x04, 0x43, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x43, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x44, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x44, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0x45, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x3d, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0x48, 0x01, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x4a, 0x01, + 0x00, 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x24, + 0x01, 0x00, 0xc8, 0xc4, 0x28, 0x98, 0x05, 0x01, + 0xb1, 0x02, 0x76, 0x53, 0x35, 0x08, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x1c, 0x12, + 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_ne_size = 3288; + +const uint8_t intl_relative_ne[3288] = { + 0x01, 0x4e, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x04, 0x6e, 0x65, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x0f, 0x2f, 0x09, 0x4b, + 0x09, 0x20, 0x00, 0x35, 0x09, 0x30, 0x09, 0x4d, + 0x09, 0x37, 0x09, 0x15, 0x06, 0x09, 0x17, 0x09, + 0x3e, 0x09, 0x2e, 0x09, 0x40, 0x09, 0x20, 0x00, + 0x35, 0x09, 0x30, 0x09, 0x4d, 0x09, 0x37, 0x09, + 0x0f, 0x17, 0x09, 0x24, 0x09, 0x20, 0x00, 0x35, + 0x09, 0x30, 0x09, 0x4d, 0x09, 0x37, 0x09, 0x04, + 0x2d, 0x31, 0x15, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x35, 0x09, 0x30, 0x09, 0x4d, + 0x09, 0x37, 0x09, 0x2e, 0x09, 0x3e, 0x09, 0x06, + 0x6f, 0x6e, 0x65, 0x0a, 0x6f, 0x74, 0x68, 0x65, + 0x72, 0x0c, 0x66, 0x75, 0x74, 0x75, 0x72, 0x65, + 0x19, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x35, 0x09, 0x30, 0x09, 0x4d, 0x09, 0x37, + 0x09, 0x20, 0x00, 0x05, 0x09, 0x18, 0x09, 0x3f, + 0x09, 0x08, 0x70, 0x61, 0x73, 0x74, 0x08, 0x79, + 0x65, 0x61, 0x72, 0x14, 0x79, 0x65, 0x61, 0x72, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, 0x79, + 0x65, 0x61, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x0f, 0x2f, 0x09, 0x4b, 0x09, 0x20, + 0x00, 0x38, 0x09, 0x24, 0x09, 0x4d, 0x09, 0x30, + 0x09, 0x15, 0x05, 0x09, 0x30, 0x09, 0x4d, 0x09, + 0x15, 0x09, 0x4b, 0x09, 0x20, 0x00, 0x38, 0x09, + 0x24, 0x09, 0x4d, 0x09, 0x30, 0x09, 0x19, 0x05, + 0x09, 0x18, 0x09, 0x3f, 0x09, 0x32, 0x09, 0x4d, + 0x09, 0x32, 0x09, 0x4b, 0x09, 0x20, 0x00, 0x38, + 0x09, 0x24, 0x09, 0x4d, 0x09, 0x30, 0x09, 0x17, + 0x2b, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x38, 0x09, 0x24, 0x09, 0x4d, 0x09, + 0x30, 0x09, 0x2e, 0x09, 0x3e, 0x09, 0x13, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x38, 0x09, 0x24, + 0x09, 0x4d, 0x09, 0x30, 0x09, 0x2e, 0x09, 0x3e, + 0x09, 0x17, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x38, 0x09, 0x24, 0x09, 0x4d, 0x09, 0x30, 0x09, + 0x20, 0x00, 0x05, 0x09, 0x18, 0x09, 0x3f, 0x09, + 0x0e, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, + 0x1a, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1c, 0x71, + 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x11, 0x2f, 0x09, + 0x4b, 0x09, 0x20, 0x00, 0x2e, 0x09, 0x39, 0x09, + 0x3f, 0x09, 0x28, 0x09, 0x3e, 0x09, 0x17, 0x05, + 0x09, 0x30, 0x09, 0x4d, 0x09, 0x15, 0x09, 0x4b, + 0x09, 0x20, 0x00, 0x2e, 0x09, 0x39, 0x09, 0x3f, + 0x09, 0x28, 0x09, 0x3e, 0x09, 0x11, 0x17, 0x09, + 0x24, 0x09, 0x20, 0x00, 0x2e, 0x09, 0x39, 0x09, + 0x3f, 0x09, 0x28, 0x09, 0x3e, 0x09, 0x17, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x2e, + 0x09, 0x39, 0x09, 0x3f, 0x09, 0x28, 0x09, 0x3e, + 0x09, 0x2e, 0x09, 0x3e, 0x09, 0x1f, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x2e, 0x09, + 0x39, 0x09, 0x3f, 0x09, 0x28, 0x09, 0x3e, 0x09, + 0x20, 0x00, 0x2a, 0x09, 0x39, 0x09, 0x3f, 0x09, + 0x32, 0x09, 0x47, 0x09, 0x0a, 0x6d, 0x6f, 0x6e, + 0x74, 0x68, 0x17, 0x06, 0x09, 0x17, 0x09, 0x3e, + 0x09, 0x2e, 0x09, 0x40, 0x09, 0x20, 0x00, 0x2e, + 0x09, 0x39, 0x09, 0x3f, 0x09, 0x28, 0x09, 0x3e, + 0x09, 0x16, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x18, 0x6d, 0x6f, + 0x6e, 0x74, 0x68, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x11, 0x2f, 0x09, 0x4b, 0x09, 0x20, + 0x00, 0x39, 0x09, 0x2a, 0x09, 0x4d, 0x09, 0x24, + 0x09, 0x3e, 0x09, 0x15, 0x06, 0x09, 0x09, 0x09, + 0x28, 0x09, 0x47, 0x09, 0x20, 0x00, 0x39, 0x09, + 0x2a, 0x09, 0x4d, 0x09, 0x24, 0x09, 0x3e, 0x09, + 0x11, 0x17, 0x09, 0x24, 0x09, 0x20, 0x00, 0x39, + 0x09, 0x2a, 0x09, 0x4d, 0x09, 0x24, 0x09, 0x3e, + 0x09, 0x17, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x39, 0x09, 0x2a, 0x09, 0x4d, 0x09, + 0x24, 0x09, 0x3e, 0x09, 0x2e, 0x09, 0x3e, 0x09, + 0x1f, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x39, 0x09, 0x2a, 0x09, 0x4d, 0x09, 0x24, + 0x09, 0x3e, 0x09, 0x20, 0x00, 0x2a, 0x09, 0x39, + 0x09, 0x3f, 0x09, 0x32, 0x09, 0x47, 0x09, 0x08, + 0x77, 0x65, 0x65, 0x6b, 0x17, 0x06, 0x09, 0x17, + 0x09, 0x3e, 0x09, 0x2e, 0x09, 0x40, 0x09, 0x20, + 0x00, 0x39, 0x09, 0x2a, 0x09, 0x4d, 0x09, 0x24, + 0x09, 0x3e, 0x09, 0x14, 0x77, 0x65, 0x65, 0x6b, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, 0x77, + 0x65, 0x65, 0x6b, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x05, 0x06, 0x09, 0x1c, 0x09, 0x09, + 0x2d, 0x09, 0x4b, 0x09, 0x32, 0x09, 0x3f, 0x09, + 0x0b, 0x2a, 0x09, 0x30, 0x09, 0x4d, 0x09, 0x38, + 0x09, 0x3f, 0x09, 0x0b, 0x05, 0x09, 0x38, 0x09, + 0x4d, 0x09, 0x24, 0x09, 0x3f, 0x09, 0x04, 0x2d, + 0x32, 0x09, 0x39, 0x09, 0x3f, 0x09, 0x1c, 0x09, + 0x4b, 0x09, 0x13, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x26, 0x09, 0x3f, 0x09, 0x28, + 0x09, 0x2e, 0x09, 0x3e, 0x09, 0x1b, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x26, 0x09, + 0x3f, 0x09, 0x28, 0x09, 0x20, 0x00, 0x2a, 0x09, + 0x39, 0x09, 0x3f, 0x09, 0x32, 0x09, 0x47, 0x09, + 0x06, 0x64, 0x61, 0x79, 0x12, 0x64, 0x61, 0x79, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x14, 0x64, + 0x61, 0x79, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x11, 0x2f, 0x09, 0x38, 0x09, 0x20, 0x00, + 0x18, 0x09, 0x21, 0x09, 0x40, 0x09, 0x2e, 0x09, + 0x3e, 0x09, 0x17, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x18, 0x09, 0x23, 0x09, 0x4d, + 0x09, 0x1f, 0x09, 0x3e, 0x09, 0x2e, 0x09, 0x3e, + 0x09, 0x1f, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x18, 0x09, 0x23, 0x09, 0x4d, 0x09, + 0x1f, 0x09, 0x3e, 0x09, 0x20, 0x00, 0x2a, 0x09, + 0x39, 0x09, 0x3f, 0x09, 0x32, 0x09, 0x47, 0x09, + 0x08, 0x68, 0x6f, 0x75, 0x72, 0x14, 0x68, 0x6f, + 0x75, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x16, 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x17, 0x2f, 0x09, 0x39, + 0x09, 0x40, 0x09, 0x20, 0x00, 0x2e, 0x09, 0x3f, + 0x09, 0x28, 0x09, 0x47, 0x09, 0x1f, 0x09, 0x2e, + 0x09, 0x3e, 0x09, 0x17, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x2e, 0x09, 0x3f, 0x09, + 0x28, 0x09, 0x47, 0x09, 0x1f, 0x09, 0x2e, 0x09, + 0x3e, 0x09, 0x1f, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x2e, 0x09, 0x3f, 0x09, 0x28, + 0x09, 0x47, 0x09, 0x1f, 0x09, 0x20, 0x00, 0x2a, + 0x09, 0x39, 0x09, 0x3f, 0x09, 0x32, 0x09, 0x47, + 0x09, 0x0c, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, + 0x18, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x0b, 0x05, 0x09, 0x39, 0x09, + 0x3f, 0x09, 0x32, 0x09, 0x47, 0x09, 0x1b, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x38, + 0x09, 0x47, 0x09, 0x15, 0x09, 0x47, 0x09, 0x28, + 0x09, 0x4d, 0x09, 0x21, 0x09, 0x2e, 0x09, 0x3e, + 0x09, 0x23, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x38, 0x09, 0x47, 0x09, 0x15, 0x09, + 0x47, 0x09, 0x28, 0x09, 0x4d, 0x09, 0x21, 0x09, + 0x20, 0x00, 0x2a, 0x09, 0x39, 0x09, 0x3f, 0x09, + 0x32, 0x09, 0x47, 0x09, 0x0c, 0x73, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x18, 0x73, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x1a, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x08, 0x64, + 0x65, 0x76, 0x61, 0x04, 0x6e, 0x75, 0x08, 0x64, + 0x61, 0x74, 0x61, 0x70, 0x6e, 0x6f, 0x64, 0x65, + 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, + 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2d, 0x72, 0x65, + 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x2d, 0x74, + 0x69, 0x6d, 0x65, 0x2d, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x6e, + 0x65, 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, + 0x9e, 0x01, 0x00, 0x01, 0x00, 0x07, 0x00, 0x00, + 0xfa, 0x0d, 0x01, 0xa0, 0x01, 0x00, 0x00, 0x00, + 0x06, 0xc8, 0x04, 0xd0, 0x00, 0x00, 0x00, 0x39, + 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, 0x00, 0x00, + 0x00, 0xaa, 0x6a, 0xe5, 0x06, 0x00, 0x00, 0x39, + 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, 0x00, 0x00, + 0x00, 0x43, 0xd0, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd3, 0x00, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0xd5, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xd9, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe2, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xe3, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xe4, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe5, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xe7, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe7, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe7, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xea, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xec, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xed, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xee, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xef, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xef, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xf0, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xf1, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xed, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xee, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xef, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xef, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xf2, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xf1, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xed, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xee, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xef, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xef, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xf3, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xf4, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xf5, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xf6, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xf7, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf8, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf8, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xf9, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xf4, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xfa, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xf6, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xf7, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf8, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf8, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xfb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xf4, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xfa, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xf6, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xf7, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf8, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf8, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xfc, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xfd, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xfe, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xff, 0x00, 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, + 0x80, 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x01, 0x00, 0x00, 0x04, 0x02, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x03, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x05, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x04, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0x06, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x04, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x04, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x07, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x08, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x09, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x0b, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x0a, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0x0c, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x09, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0a, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0a, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x0d, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x0e, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x0f, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x11, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x10, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0x12, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x0f, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x10, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x10, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x13, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x14, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x17, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0x18, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x16, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x16, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x19, 0x01, + 0x00, 0x00, 0x04, 0x1a, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x1b, 0x01, 0x00, 0x00, 0x4d, + 0x1c, 0x01, 0x00, 0x00, 0x24, 0x01, 0x00, 0xc8, + 0xc4, 0x28, 0xba, 0x04, 0x01, 0x99, 0x02, 0x76, + 0x53, 0x35, 0x08, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x1c, 0x12, 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_nl_size = 3616; + +const uint8_t intl_relative_nl[3616] = { + 0x01, 0x5d, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x04, 0x6e, 0x6c, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x10, 0x64, 0x69, 0x74, + 0x20, 0x6a, 0x61, 0x61, 0x72, 0x18, 0x76, 0x6f, + 0x6c, 0x67, 0x65, 0x6e, 0x64, 0x20, 0x6a, 0x61, + 0x61, 0x72, 0x14, 0x76, 0x6f, 0x72, 0x69, 0x67, + 0x20, 0x6a, 0x61, 0x61, 0x72, 0x04, 0x2d, 0x31, + 0x1a, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x6a, 0x61, 0x61, 0x72, 0x06, 0x6f, + 0x6e, 0x65, 0x0a, 0x6f, 0x74, 0x68, 0x65, 0x72, + 0x0c, 0x66, 0x75, 0x74, 0x75, 0x72, 0x65, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x6a, 0x61, 0x61, 0x72, + 0x20, 0x67, 0x65, 0x6c, 0x65, 0x64, 0x65, 0x6e, + 0x08, 0x70, 0x61, 0x73, 0x74, 0x08, 0x79, 0x65, + 0x61, 0x72, 0x14, 0x79, 0x65, 0x61, 0x72, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, 0x79, 0x65, + 0x61, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x18, 0x64, 0x69, 0x74, 0x20, 0x6b, 0x77, + 0x61, 0x72, 0x74, 0x61, 0x61, 0x6c, 0x20, 0x76, + 0x6f, 0x6c, 0x67, 0x65, 0x6e, 0x64, 0x20, 0x6b, + 0x77, 0x61, 0x72, 0x74, 0x61, 0x61, 0x6c, 0x1c, + 0x76, 0x6f, 0x72, 0x69, 0x67, 0x20, 0x6b, 0x77, + 0x61, 0x72, 0x74, 0x61, 0x61, 0x6c, 0x22, 0x6f, + 0x76, 0x65, 0x72, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x6b, 0x77, 0x61, 0x72, 0x74, 0x61, 0x61, 0x6c, + 0x24, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x6b, 0x77, 0x61, 0x72, 0x74, 0x61, + 0x6c, 0x65, 0x6e, 0x28, 0x7b, 0x30, 0x7d, 0x20, + 0x6b, 0x77, 0x61, 0x72, 0x74, 0x61, 0x61, 0x6c, + 0x20, 0x67, 0x65, 0x6c, 0x65, 0x64, 0x65, 0x6e, + 0x2a, 0x7b, 0x30, 0x7d, 0x20, 0x6b, 0x77, 0x61, + 0x72, 0x74, 0x61, 0x6c, 0x65, 0x6e, 0x20, 0x67, + 0x65, 0x6c, 0x65, 0x64, 0x65, 0x6e, 0x0e, 0x71, + 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x1a, 0x71, + 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x18, 0x6f, 0x76, 0x65, + 0x72, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6b, 0x77, + 0x2e, 0x1c, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, + 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x14, 0x64, 0x65, 0x7a, 0x65, 0x20, 0x6d, 0x61, + 0x61, 0x6e, 0x64, 0x1c, 0x76, 0x6f, 0x6c, 0x67, + 0x65, 0x6e, 0x64, 0x65, 0x20, 0x6d, 0x61, 0x61, + 0x6e, 0x64, 0x18, 0x76, 0x6f, 0x72, 0x69, 0x67, + 0x65, 0x20, 0x6d, 0x61, 0x61, 0x6e, 0x64, 0x1c, + 0x6f, 0x76, 0x65, 0x72, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x6d, 0x61, 0x61, 0x6e, 0x64, 0x20, 0x6f, + 0x76, 0x65, 0x72, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x6d, 0x61, 0x61, 0x6e, 0x64, 0x65, 0x6e, 0x22, + 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x61, 0x61, 0x6e, + 0x64, 0x20, 0x67, 0x65, 0x6c, 0x65, 0x64, 0x65, + 0x6e, 0x26, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x61, + 0x61, 0x6e, 0x64, 0x65, 0x6e, 0x20, 0x67, 0x65, + 0x6c, 0x65, 0x64, 0x65, 0x6e, 0x0a, 0x6d, 0x6f, + 0x6e, 0x74, 0x68, 0x16, 0x6d, 0x6f, 0x6e, 0x74, + 0x68, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x18, + 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x12, 0x64, 0x65, 0x7a, + 0x65, 0x20, 0x77, 0x65, 0x65, 0x6b, 0x1a, 0x76, + 0x6f, 0x6c, 0x67, 0x65, 0x6e, 0x64, 0x65, 0x20, + 0x77, 0x65, 0x65, 0x6b, 0x16, 0x76, 0x6f, 0x72, + 0x69, 0x67, 0x65, 0x20, 0x77, 0x65, 0x65, 0x6b, + 0x1a, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x77, 0x65, 0x65, 0x6b, 0x1c, 0x6f, + 0x76, 0x65, 0x72, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x77, 0x65, 0x6b, 0x65, 0x6e, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x77, 0x65, 0x65, 0x6b, 0x20, 0x67, + 0x65, 0x6c, 0x65, 0x64, 0x65, 0x6e, 0x22, 0x7b, + 0x30, 0x7d, 0x20, 0x77, 0x65, 0x6b, 0x65, 0x6e, + 0x20, 0x67, 0x65, 0x6c, 0x65, 0x64, 0x65, 0x6e, + 0x08, 0x77, 0x65, 0x65, 0x6b, 0x14, 0x77, 0x65, + 0x65, 0x6b, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x16, 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x0e, 0x76, 0x61, 0x6e, + 0x64, 0x61, 0x61, 0x67, 0x0c, 0x6d, 0x6f, 0x72, + 0x67, 0x65, 0x6e, 0x14, 0x6f, 0x76, 0x65, 0x72, + 0x6d, 0x6f, 0x72, 0x67, 0x65, 0x6e, 0x16, 0x65, + 0x65, 0x72, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, + 0x65, 0x6e, 0x04, 0x2d, 0x32, 0x10, 0x67, 0x69, + 0x73, 0x74, 0x65, 0x72, 0x65, 0x6e, 0x18, 0x6f, + 0x76, 0x65, 0x72, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x64, 0x61, 0x67, 0x1c, 0x6f, 0x76, 0x65, 0x72, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x64, 0x61, 0x67, + 0x65, 0x6e, 0x1e, 0x7b, 0x30, 0x7d, 0x20, 0x64, + 0x61, 0x67, 0x20, 0x67, 0x65, 0x6c, 0x65, 0x64, + 0x65, 0x6e, 0x22, 0x7b, 0x30, 0x7d, 0x20, 0x64, + 0x61, 0x67, 0x65, 0x6e, 0x20, 0x67, 0x65, 0x6c, + 0x65, 0x64, 0x65, 0x6e, 0x06, 0x64, 0x61, 0x79, + 0x18, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x64, 0x67, 0x6e, 0x1e, 0x7b, 0x30, + 0x7d, 0x20, 0x64, 0x67, 0x6e, 0x20, 0x67, 0x65, + 0x6c, 0x65, 0x64, 0x65, 0x6e, 0x12, 0x64, 0x61, + 0x79, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x14, + 0x64, 0x61, 0x79, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x1c, 0x62, 0x69, 0x6e, 0x6e, 0x65, + 0x6e, 0x20, 0x65, 0x65, 0x6e, 0x20, 0x75, 0x75, + 0x72, 0x18, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x75, 0x75, 0x72, 0x1e, 0x7b, + 0x30, 0x7d, 0x20, 0x75, 0x75, 0x72, 0x20, 0x67, + 0x65, 0x6c, 0x65, 0x64, 0x65, 0x6e, 0x08, 0x68, + 0x6f, 0x75, 0x72, 0x14, 0x68, 0x6f, 0x75, 0x72, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, 0x68, + 0x6f, 0x75, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x22, 0x62, 0x69, 0x6e, 0x6e, 0x65, + 0x6e, 0x20, 0x65, 0x65, 0x6e, 0x20, 0x6d, 0x69, + 0x6e, 0x75, 0x75, 0x74, 0x1e, 0x6f, 0x76, 0x65, + 0x72, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, + 0x6e, 0x75, 0x75, 0x74, 0x20, 0x6f, 0x76, 0x65, + 0x72, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x65, 0x6e, 0x24, 0x7b, 0x30, + 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x75, 0x74, + 0x20, 0x67, 0x65, 0x6c, 0x65, 0x64, 0x65, 0x6e, + 0x26, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, + 0x75, 0x74, 0x65, 0x6e, 0x20, 0x67, 0x65, 0x6c, + 0x65, 0x64, 0x65, 0x6e, 0x0c, 0x6d, 0x69, 0x6e, + 0x75, 0x74, 0x65, 0x1a, 0x6f, 0x76, 0x65, 0x72, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, + 0x2e, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, + 0x6e, 0x2e, 0x20, 0x67, 0x65, 0x6c, 0x65, 0x64, + 0x65, 0x6e, 0x18, 0x6d, 0x69, 0x6e, 0x75, 0x74, + 0x65, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1a, + 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x04, 0x6e, 0x75, + 0x20, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, + 0x65, 0x22, 0x6f, 0x76, 0x65, 0x72, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x73, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x65, 0x6e, 0x26, 0x7b, 0x30, 0x7d, 0x20, + 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x65, 0x20, + 0x67, 0x65, 0x6c, 0x65, 0x64, 0x65, 0x6e, 0x28, + 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x65, 0x6e, 0x20, 0x67, 0x65, 0x6c, + 0x65, 0x64, 0x65, 0x6e, 0x0c, 0x73, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x1a, 0x6f, 0x76, 0x65, 0x72, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, 0x63, + 0x2e, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, + 0x63, 0x2e, 0x20, 0x67, 0x65, 0x6c, 0x65, 0x64, + 0x65, 0x6e, 0x18, 0x73, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1a, + 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x08, 0x6c, 0x61, + 0x74, 0x6e, 0x08, 0x64, 0x61, 0x74, 0x61, 0x70, + 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, + 0x6c, 0x2d, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, + 0x76, 0x65, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2d, + 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2f, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, + 0x74, 0x61, 0x2f, 0x6e, 0x6c, 0x2e, 0x6a, 0x73, + 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, + 0x00, 0x07, 0x00, 0x00, 0x92, 0x10, 0x01, 0xa0, + 0x01, 0x00, 0x00, 0x00, 0x06, 0xc8, 0x04, 0xd0, + 0x00, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, + 0x42, 0xd2, 0x00, 0x00, 0x00, 0xaa, 0x6a, 0xfd, + 0x07, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, + 0x42, 0xd2, 0x00, 0x00, 0x00, 0x43, 0xd0, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd3, 0x00, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe2, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xe3, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xe4, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe5, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe2, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xe3, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xe4, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe5, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe2, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xe3, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xe4, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xec, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xed, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xef, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf0, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xf4, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xed, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xef, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf0, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xf5, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xed, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xef, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf0, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xf6, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf7, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xf9, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfa, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xfe, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf7, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xf9, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfa, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xff, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf7, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xf9, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfa, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x01, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x03, 0x01, 0x00, 0x00, + 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, 0x04, 0x01, + 0x00, 0x00, 0x4d, 0x05, 0x01, 0x00, 0x00, 0x04, + 0x06, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x08, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x09, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0a, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x0b, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x01, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x02, 0x01, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0x03, 0x01, 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, + 0x80, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0x05, + 0x01, 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x07, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x0e, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x01, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x03, 0x01, 0x00, 0x00, + 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, 0x04, 0x01, + 0x00, 0x00, 0x4d, 0x05, 0x01, 0x00, 0x00, 0x04, + 0x06, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x0c, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x09, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0d, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x0f, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x10, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x11, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x13, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x10, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x11, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x12, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x12, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x14, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x10, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x11, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x15, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x18, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x19, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x1a, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x1b, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x1c, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x1c, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x1e, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x1c, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x1c, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x1d, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x1d, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x1f, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x20, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x21, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x22, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x23, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x24, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x25, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x20, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x26, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x27, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x27, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x28, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x20, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x26, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x27, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x27, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x29, 0x01, 0x00, 0x00, 0x04, 0x2a, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x20, + 0x01, 0x00, 0x00, 0x4d, 0x2b, 0x01, 0x00, 0x00, + 0x24, 0x01, 0x00, 0xc8, 0xc4, 0x28, 0xd8, 0x04, + 0x01, 0xb5, 0x02, 0x76, 0x53, 0x35, 0x08, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x1c, 0x12, 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_or_size = 3461; + +const uint8_t intl_relative_or[3461] = { + 0x01, 0x55, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x04, 0x6f, 0x72, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x11, 0x0f, 0x0b, 0x39, + 0x0b, 0x3f, 0x0b, 0x20, 0x00, 0x2c, 0x0b, 0x30, + 0x0b, 0x4d, 0x0b, 0x37, 0x0b, 0x15, 0x06, 0x0b, + 0x17, 0x0b, 0x3e, 0x0b, 0x2e, 0x0b, 0x40, 0x0b, + 0x20, 0x00, 0x2c, 0x0b, 0x30, 0x0b, 0x4d, 0x0b, + 0x37, 0x0b, 0x0f, 0x17, 0x0b, 0x24, 0x0b, 0x20, + 0x00, 0x2c, 0x0b, 0x30, 0x0b, 0x4d, 0x0b, 0x37, + 0x0b, 0x04, 0x2d, 0x31, 0x15, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x2c, 0x0b, 0x30, + 0x0b, 0x4d, 0x0b, 0x37, 0x0b, 0x30, 0x0b, 0x47, + 0x0b, 0x06, 0x6f, 0x6e, 0x65, 0x0a, 0x6f, 0x74, + 0x68, 0x65, 0x72, 0x0c, 0x66, 0x75, 0x74, 0x75, + 0x72, 0x65, 0x1f, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x2c, 0x0b, 0x30, 0x0b, 0x4d, + 0x0b, 0x37, 0x0b, 0x20, 0x00, 0x2a, 0x0b, 0x42, + 0x0b, 0x30, 0x0b, 0x4d, 0x0b, 0x2c, 0x0b, 0x47, + 0x0b, 0x08, 0x70, 0x61, 0x73, 0x74, 0x08, 0x79, + 0x65, 0x61, 0x72, 0x13, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x2c, 0x0b, 0x2e, 0x00, + 0x20, 0x00, 0x30, 0x0b, 0x47, 0x0b, 0x1b, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x2c, + 0x0b, 0x2e, 0x00, 0x20, 0x00, 0x2a, 0x0b, 0x42, + 0x0b, 0x30, 0x0b, 0x4d, 0x0b, 0x2c, 0x0b, 0x47, + 0x0b, 0x14, 0x79, 0x65, 0x61, 0x72, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x16, 0x79, 0x65, 0x61, + 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x15, 0x17, 0x0b, 0x24, 0x0b, 0x20, 0x00, 0x24, + 0x0b, 0x4d, 0x0b, 0x30, 0x0b, 0x5f, 0x0b, 0x2e, + 0x0b, 0x3e, 0x0b, 0x38, 0x0b, 0x1b, 0x06, 0x0b, + 0x17, 0x0b, 0x3e, 0x0b, 0x2e, 0x0b, 0x40, 0x0b, + 0x20, 0x00, 0x24, 0x0b, 0x4d, 0x0b, 0x30, 0x0b, + 0x5f, 0x0b, 0x2e, 0x0b, 0x3e, 0x0b, 0x38, 0x0b, + 0x1b, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x24, 0x0b, 0x4d, 0x0b, 0x30, 0x0b, 0x5f, + 0x0b, 0x2e, 0x0b, 0x3e, 0x0b, 0x38, 0x0b, 0x30, + 0x0b, 0x47, 0x0b, 0x25, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x24, 0x0b, 0x4d, 0x0b, + 0x30, 0x0b, 0x5f, 0x0b, 0x2e, 0x0b, 0x3e, 0x0b, + 0x38, 0x0b, 0x20, 0x00, 0x2a, 0x0b, 0x42, 0x0b, + 0x30, 0x0b, 0x4d, 0x0b, 0x2c, 0x0b, 0x47, 0x0b, + 0x0e, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, + 0x19, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x24, 0x0b, 0x4d, 0x0b, 0x30, 0x0b, 0x5f, + 0x0b, 0x2e, 0x00, 0x20, 0x00, 0x30, 0x0b, 0x47, + 0x0b, 0x21, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x24, 0x0b, 0x4d, 0x0b, 0x30, 0x0b, + 0x5f, 0x0b, 0x2e, 0x00, 0x20, 0x00, 0x2a, 0x0b, + 0x42, 0x0b, 0x30, 0x0b, 0x4d, 0x0b, 0x2c, 0x0b, + 0x47, 0x0b, 0x1a, 0x71, 0x75, 0x61, 0x72, 0x74, + 0x65, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x1c, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0f, + 0x0f, 0x0b, 0x39, 0x0b, 0x3f, 0x0b, 0x20, 0x00, + 0x2e, 0x0b, 0x3e, 0x0b, 0x38, 0x0b, 0x13, 0x06, + 0x0b, 0x17, 0x0b, 0x3e, 0x0b, 0x2e, 0x0b, 0x40, + 0x0b, 0x20, 0x00, 0x2e, 0x0b, 0x3e, 0x0b, 0x38, + 0x0b, 0x0d, 0x17, 0x0b, 0x24, 0x0b, 0x20, 0x00, + 0x2e, 0x0b, 0x3e, 0x0b, 0x38, 0x0b, 0x13, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x2e, + 0x0b, 0x3e, 0x0b, 0x38, 0x0b, 0x30, 0x0b, 0x47, + 0x0b, 0x1d, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x2e, 0x0b, 0x3e, 0x0b, 0x38, 0x0b, + 0x20, 0x00, 0x2a, 0x0b, 0x42, 0x0b, 0x30, 0x0b, + 0x4d, 0x0b, 0x2c, 0x0b, 0x47, 0x0b, 0x0a, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x15, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x2e, 0x0b, 0x3e, + 0x0b, 0x2e, 0x00, 0x20, 0x00, 0x30, 0x0b, 0x47, + 0x0b, 0x1d, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x2e, 0x0b, 0x3e, 0x0b, 0x2e, 0x00, + 0x20, 0x00, 0x2a, 0x0b, 0x42, 0x0b, 0x30, 0x0b, + 0x4d, 0x0b, 0x2c, 0x0b, 0x47, 0x0b, 0x16, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x18, 0x6d, 0x6f, 0x6e, 0x74, 0x68, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x15, + 0x0f, 0x0b, 0x39, 0x0b, 0x3f, 0x0b, 0x20, 0x00, + 0x38, 0x0b, 0x2a, 0x0b, 0x4d, 0x0b, 0x24, 0x0b, + 0x3e, 0x0b, 0x39, 0x0b, 0x19, 0x06, 0x0b, 0x17, + 0x0b, 0x3e, 0x0b, 0x2e, 0x0b, 0x40, 0x0b, 0x20, + 0x00, 0x38, 0x0b, 0x2a, 0x0b, 0x4d, 0x0b, 0x24, + 0x0b, 0x3e, 0x0b, 0x39, 0x0b, 0x13, 0x17, 0x0b, + 0x24, 0x0b, 0x20, 0x00, 0x38, 0x0b, 0x2a, 0x0b, + 0x4d, 0x0b, 0x24, 0x0b, 0x3e, 0x0b, 0x39, 0x0b, + 0x19, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x38, 0x0b, 0x2a, 0x0b, 0x4d, 0x0b, 0x24, + 0x0b, 0x3e, 0x0b, 0x39, 0x0b, 0x30, 0x0b, 0x47, + 0x0b, 0x23, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x38, 0x0b, 0x2a, 0x0b, 0x4d, 0x0b, + 0x24, 0x0b, 0x3e, 0x0b, 0x39, 0x0b, 0x20, 0x00, + 0x2a, 0x0b, 0x42, 0x0b, 0x30, 0x0b, 0x4d, 0x0b, + 0x2c, 0x0b, 0x47, 0x0b, 0x08, 0x77, 0x65, 0x65, + 0x6b, 0x1b, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x38, 0x0b, 0x2a, 0x0b, 0x4d, 0x0b, + 0x24, 0x0b, 0x3e, 0x0b, 0x2e, 0x00, 0x20, 0x00, + 0x30, 0x0b, 0x47, 0x0b, 0x23, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x38, 0x0b, 0x2a, + 0x0b, 0x4d, 0x0b, 0x24, 0x0b, 0x3e, 0x0b, 0x2e, + 0x00, 0x20, 0x00, 0x2a, 0x0b, 0x42, 0x0b, 0x30, + 0x0b, 0x4d, 0x0b, 0x2c, 0x0b, 0x47, 0x0b, 0x14, + 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x16, 0x77, 0x65, 0x65, 0x6b, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x07, 0x06, + 0x0b, 0x1c, 0x0b, 0x3f, 0x0b, 0x15, 0x06, 0x0b, + 0x38, 0x0b, 0x28, 0x0b, 0x4d, 0x0b, 0x24, 0x0b, + 0x3e, 0x0b, 0x15, 0x0b, 0x3e, 0x0b, 0x32, 0x0b, + 0x3f, 0x0b, 0x0d, 0x17, 0x0b, 0x24, 0x0b, 0x15, + 0x0b, 0x3e, 0x0b, 0x32, 0x0b, 0x3f, 0x0b, 0x13, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x26, 0x0b, 0x3f, 0x0b, 0x28, 0x0b, 0x30, 0x0b, + 0x47, 0x0b, 0x1d, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x26, 0x0b, 0x3f, 0x0b, 0x28, + 0x0b, 0x20, 0x00, 0x2a, 0x0b, 0x42, 0x0b, 0x30, + 0x0b, 0x4d, 0x0b, 0x2c, 0x0b, 0x47, 0x0b, 0x06, + 0x64, 0x61, 0x79, 0x12, 0x64, 0x61, 0x79, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x14, 0x64, 0x61, + 0x79, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x13, 0x0f, 0x0b, 0x39, 0x0b, 0x3f, 0x0b, 0x20, + 0x00, 0x18, 0x0b, 0x23, 0x0b, 0x4d, 0x0b, 0x1f, + 0x0b, 0x3e, 0x0b, 0x17, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x18, 0x0b, 0x23, 0x0b, + 0x4d, 0x0b, 0x1f, 0x0b, 0x3e, 0x0b, 0x30, 0x0b, + 0x47, 0x0b, 0x21, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x18, 0x0b, 0x23, 0x0b, 0x4d, + 0x0b, 0x1f, 0x0b, 0x3e, 0x0b, 0x20, 0x00, 0x2a, + 0x0b, 0x42, 0x0b, 0x30, 0x0b, 0x4d, 0x0b, 0x2c, + 0x0b, 0x47, 0x0b, 0x08, 0x68, 0x6f, 0x75, 0x72, + 0x13, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x18, 0x0b, 0x2e, 0x00, 0x20, 0x00, 0x30, + 0x0b, 0x47, 0x0b, 0x1b, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x18, 0x0b, 0x2e, 0x00, + 0x20, 0x00, 0x2a, 0x0b, 0x42, 0x0b, 0x30, 0x0b, + 0x4d, 0x0b, 0x2c, 0x0b, 0x47, 0x0b, 0x14, 0x68, + 0x6f, 0x75, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x16, 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x15, 0x0f, 0x0b, + 0x39, 0x0b, 0x3f, 0x0b, 0x20, 0x00, 0x2e, 0x0b, + 0x3f, 0x0b, 0x28, 0x0b, 0x3f, 0x0b, 0x1f, 0x0b, + 0x4d, 0x0b, 0x1d, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x2e, 0x0b, 0x3f, 0x0b, 0x28, + 0x0b, 0x3f, 0x0b, 0x1f, 0x0b, 0x4d, 0x0b, 0x0c, + 0x20, 0x0c, 0x20, 0x30, 0x0b, 0x47, 0x0b, 0x23, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x2e, 0x0b, 0x3f, 0x0b, 0x28, 0x0b, 0x3f, 0x0b, + 0x1f, 0x0b, 0x4d, 0x0b, 0x20, 0x00, 0x2a, 0x0b, + 0x42, 0x0b, 0x30, 0x0b, 0x4d, 0x0b, 0x2c, 0x0b, + 0x47, 0x0b, 0x0c, 0x6d, 0x69, 0x6e, 0x75, 0x74, + 0x65, 0x15, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x2e, 0x0b, 0x3f, 0x0b, 0x2e, 0x00, + 0x20, 0x00, 0x30, 0x0b, 0x47, 0x0b, 0x1d, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x2e, + 0x0b, 0x3f, 0x0b, 0x2e, 0x00, 0x20, 0x00, 0x2a, + 0x0b, 0x42, 0x0b, 0x30, 0x0b, 0x4d, 0x0b, 0x2c, + 0x0b, 0x47, 0x0b, 0x18, 0x6d, 0x69, 0x6e, 0x75, + 0x74, 0x65, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x1a, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x13, 0x2c, + 0x0b, 0x30, 0x0b, 0x4d, 0x0b, 0x24, 0x0b, 0x4d, + 0x0b, 0x24, 0x0b, 0x2e, 0x0b, 0x3e, 0x0b, 0x28, + 0x0b, 0x1b, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x38, 0x0b, 0x47, 0x0b, 0x15, 0x0b, + 0x47, 0x0b, 0x23, 0x0b, 0x4d, 0x0b, 0x21, 0x0b, + 0x30, 0x0b, 0x47, 0x0b, 0x25, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x38, 0x0b, 0x47, + 0x0b, 0x15, 0x0b, 0x47, 0x0b, 0x23, 0x0b, 0x4d, + 0x0b, 0x21, 0x0b, 0x20, 0x00, 0x2a, 0x0b, 0x42, + 0x0b, 0x30, 0x0b, 0x4d, 0x0b, 0x2c, 0x0b, 0x47, + 0x0b, 0x0c, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, + 0x15, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x38, 0x0b, 0x47, 0x0b, 0x2e, 0x00, 0x20, + 0x00, 0x30, 0x0b, 0x47, 0x0b, 0x1d, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x38, 0x0b, + 0x47, 0x0b, 0x2e, 0x00, 0x20, 0x00, 0x2a, 0x0b, + 0x42, 0x0b, 0x30, 0x0b, 0x4d, 0x0b, 0x2c, 0x0b, + 0x47, 0x0b, 0x18, 0x73, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1a, + 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x08, 0x6c, 0x61, + 0x74, 0x6e, 0x04, 0x6e, 0x75, 0x08, 0x64, 0x61, + 0x74, 0x61, 0x70, 0x6e, 0x6f, 0x64, 0x65, 0x5f, + 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, + 0x69, 0x6e, 0x74, 0x6c, 0x2d, 0x72, 0x65, 0x6c, + 0x61, 0x74, 0x69, 0x76, 0x65, 0x2d, 0x74, 0x69, + 0x6d, 0x65, 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, + 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x6f, 0x72, + 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, + 0x01, 0x00, 0x01, 0x00, 0x07, 0x00, 0x00, 0xee, + 0x0c, 0x01, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x06, + 0xc8, 0x04, 0xd0, 0x00, 0x00, 0x00, 0x39, 0xd1, + 0x00, 0x00, 0x00, 0x42, 0xd2, 0x00, 0x00, 0x00, + 0xaa, 0x6a, 0x59, 0x06, 0x00, 0x00, 0x39, 0xd1, + 0x00, 0x00, 0x00, 0x42, 0xd2, 0x00, 0x00, 0x00, + 0x43, 0xd0, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd3, + 0x00, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xd7, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe1, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xe1, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe2, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe1, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xe1, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe4, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe7, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0xe9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xea, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xe9, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0xec, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xee, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xef, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xf0, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xf1, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf1, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0xf2, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0xf3, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf3, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf4, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xf5, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xf3, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xf3, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0xf6, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf7, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfa, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0xfc, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0xfd, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xfe, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xff, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xfd, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xfe, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xfe, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0x02, 0x01, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x03, + 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x04, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x05, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x05, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0x06, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x04, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x04, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x05, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x05, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x07, + 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x04, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x04, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x05, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0x08, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x09, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x0b, 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x0a, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x0b, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0b, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0x0c, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x0d, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0d, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0e, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x0e, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x0f, + 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x0d, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x0d, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x0e, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0x10, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x11, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x0b, 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x12, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x13, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x13, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0x14, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x17, + 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0x18, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x19, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x0b, 0x04, 0x1a, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x1a, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x1b, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x1b, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0x1c, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x1d, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x1d, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x1e, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x1e, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x1f, + 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x1d, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x1d, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x1e, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0x20, 0x01, 0x00, 0x00, 0x04, 0x21, 0x01, + 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x22, 0x01, + 0x00, 0x00, 0x4d, 0x23, 0x01, 0x00, 0x00, 0x24, + 0x01, 0x00, 0xc8, 0xc4, 0x28, 0xc8, 0x04, 0x01, + 0x8b, 0x02, 0x76, 0x53, 0x35, 0x08, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x1c, 0x12, 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_pa_size = 3925; + +const uint8_t intl_relative_pa[3925] = { + 0x01, 0x55, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x04, 0x70, 0x61, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x0d, 0x07, 0x0a, 0x39, + 0x0a, 0x20, 0x00, 0x38, 0x0a, 0x3e, 0x0a, 0x32, + 0x0a, 0x11, 0x05, 0x0a, 0x17, 0x0a, 0x32, 0x0a, + 0x3e, 0x0a, 0x20, 0x00, 0x38, 0x0a, 0x3e, 0x0a, + 0x32, 0x0a, 0x13, 0x2a, 0x0a, 0x3f, 0x0a, 0x1b, + 0x0a, 0x32, 0x0a, 0x3e, 0x0a, 0x20, 0x00, 0x38, + 0x0a, 0x3e, 0x0a, 0x32, 0x0a, 0x04, 0x2d, 0x31, + 0x19, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x38, 0x0a, 0x3e, 0x0a, 0x32, 0x0a, 0x20, + 0x00, 0x35, 0x0a, 0x3f, 0x0a, 0x71, 0x0a, 0x1a, + 0x0a, 0x06, 0x6f, 0x6e, 0x65, 0x1d, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x38, 0x0a, + 0x3e, 0x0a, 0x32, 0x0a, 0x3e, 0x0a, 0x02, 0x0a, + 0x20, 0x00, 0x35, 0x0a, 0x3f, 0x0a, 0x71, 0x0a, + 0x1a, 0x0a, 0x0a, 0x6f, 0x74, 0x68, 0x65, 0x72, + 0x0c, 0x66, 0x75, 0x74, 0x75, 0x72, 0x65, 0x1d, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x38, 0x0a, 0x3e, 0x0a, 0x32, 0x0a, 0x20, 0x00, + 0x2a, 0x0a, 0x39, 0x0a, 0x3f, 0x0a, 0x32, 0x0a, + 0x3e, 0x0a, 0x02, 0x0a, 0x08, 0x70, 0x61, 0x73, + 0x74, 0x08, 0x79, 0x65, 0x61, 0x72, 0x14, 0x79, + 0x65, 0x61, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x16, 0x79, 0x65, 0x61, 0x72, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x13, 0x07, 0x0a, + 0x38, 0x0a, 0x20, 0x00, 0x24, 0x0a, 0x3f, 0x0a, + 0x2e, 0x0a, 0x3e, 0x0a, 0x39, 0x0a, 0x40, 0x0a, + 0x17, 0x05, 0x0a, 0x17, 0x0a, 0x32, 0x0a, 0x40, + 0x0a, 0x20, 0x00, 0x24, 0x0a, 0x3f, 0x0a, 0x2e, + 0x0a, 0x3e, 0x0a, 0x39, 0x0a, 0x40, 0x0a, 0x19, + 0x2a, 0x0a, 0x3f, 0x0a, 0x1b, 0x0a, 0x32, 0x0a, + 0x40, 0x0a, 0x20, 0x00, 0x24, 0x0a, 0x3f, 0x0a, + 0x2e, 0x0a, 0x3e, 0x0a, 0x39, 0x0a, 0x40, 0x0a, + 0x1f, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x24, 0x0a, 0x3f, 0x0a, 0x2e, 0x0a, 0x3e, + 0x0a, 0x39, 0x0a, 0x40, 0x0a, 0x20, 0x00, 0x35, + 0x0a, 0x3f, 0x0a, 0x71, 0x0a, 0x1a, 0x0a, 0x23, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x24, 0x0a, 0x3f, 0x0a, 0x2e, 0x0a, 0x3e, 0x0a, + 0x39, 0x0a, 0x40, 0x0a, 0x06, 0x0a, 0x02, 0x0a, + 0x20, 0x00, 0x35, 0x0a, 0x3f, 0x0a, 0x71, 0x0a, + 0x1a, 0x0a, 0x23, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x24, 0x0a, 0x3f, 0x0a, 0x2e, + 0x0a, 0x3e, 0x0a, 0x39, 0x0a, 0x40, 0x0a, 0x20, + 0x00, 0x2a, 0x0a, 0x39, 0x0a, 0x3f, 0x0a, 0x32, + 0x0a, 0x3e, 0x0a, 0x02, 0x0a, 0x27, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x24, 0x0a, + 0x3f, 0x0a, 0x2e, 0x0a, 0x3e, 0x0a, 0x39, 0x0a, + 0x40, 0x0a, 0x06, 0x0a, 0x02, 0x0a, 0x20, 0x00, + 0x2a, 0x0a, 0x39, 0x0a, 0x3f, 0x0a, 0x32, 0x0a, + 0x3e, 0x0a, 0x02, 0x0a, 0x0e, 0x71, 0x75, 0x61, + 0x72, 0x74, 0x65, 0x72, 0x13, 0x07, 0x0a, 0x39, + 0x0a, 0x20, 0x00, 0x24, 0x0a, 0x3f, 0x0a, 0x2e, + 0x0a, 0x3e, 0x0a, 0x39, 0x0a, 0x40, 0x0a, 0x1a, + 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1c, 0x71, 0x75, + 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x11, 0x07, 0x0a, 0x39, + 0x0a, 0x20, 0x00, 0x2e, 0x0a, 0x39, 0x0a, 0x40, + 0x0a, 0x28, 0x0a, 0x3e, 0x0a, 0x15, 0x05, 0x0a, + 0x17, 0x0a, 0x32, 0x0a, 0x3e, 0x0a, 0x20, 0x00, + 0x2e, 0x0a, 0x39, 0x0a, 0x40, 0x0a, 0x28, 0x0a, + 0x3e, 0x0a, 0x17, 0x2a, 0x0a, 0x3f, 0x0a, 0x1b, + 0x0a, 0x32, 0x0a, 0x3e, 0x0a, 0x20, 0x00, 0x2e, + 0x0a, 0x39, 0x0a, 0x40, 0x0a, 0x28, 0x0a, 0x3e, + 0x0a, 0x1d, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x2e, 0x0a, 0x39, 0x0a, 0x40, 0x0a, + 0x28, 0x0a, 0x47, 0x0a, 0x20, 0x00, 0x35, 0x0a, + 0x3f, 0x0a, 0x71, 0x0a, 0x1a, 0x0a, 0x21, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x2e, + 0x0a, 0x39, 0x0a, 0x40, 0x0a, 0x28, 0x0a, 0x3f, + 0x0a, 0x06, 0x0a, 0x02, 0x0a, 0x20, 0x00, 0x35, + 0x0a, 0x3f, 0x0a, 0x71, 0x0a, 0x1a, 0x0a, 0x21, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x2e, 0x0a, 0x39, 0x0a, 0x40, 0x0a, 0x28, 0x0a, + 0x3e, 0x0a, 0x20, 0x00, 0x2a, 0x0a, 0x39, 0x0a, + 0x3f, 0x0a, 0x32, 0x0a, 0x3e, 0x0a, 0x02, 0x0a, + 0x21, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x2e, 0x0a, 0x39, 0x0a, 0x40, 0x0a, 0x28, + 0x0a, 0x47, 0x0a, 0x20, 0x00, 0x2a, 0x0a, 0x39, + 0x0a, 0x3f, 0x0a, 0x32, 0x0a, 0x3e, 0x0a, 0x02, + 0x0a, 0x0a, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x16, + 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x18, 0x6d, 0x6f, 0x6e, 0x74, + 0x68, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x11, 0x07, 0x0a, 0x39, 0x0a, 0x20, 0x00, 0x39, + 0x0a, 0x2b, 0x0a, 0x3c, 0x0a, 0x24, 0x0a, 0x3e, + 0x0a, 0x15, 0x05, 0x0a, 0x17, 0x0a, 0x32, 0x0a, + 0x3e, 0x0a, 0x20, 0x00, 0x39, 0x0a, 0x2b, 0x0a, + 0x3c, 0x0a, 0x24, 0x0a, 0x3e, 0x0a, 0x17, 0x2a, + 0x0a, 0x3f, 0x0a, 0x1b, 0x0a, 0x32, 0x0a, 0x3e, + 0x0a, 0x20, 0x00, 0x39, 0x0a, 0x2b, 0x0a, 0x3c, + 0x0a, 0x24, 0x0a, 0x3e, 0x0a, 0x1d, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x39, 0x0a, + 0x2b, 0x0a, 0x3c, 0x0a, 0x24, 0x0a, 0x47, 0x0a, + 0x20, 0x00, 0x35, 0x0a, 0x3f, 0x0a, 0x71, 0x0a, + 0x1a, 0x0a, 0x21, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x39, 0x0a, 0x2b, 0x0a, 0x3c, + 0x0a, 0x24, 0x0a, 0x3f, 0x0a, 0x06, 0x0a, 0x02, + 0x0a, 0x20, 0x00, 0x35, 0x0a, 0x3f, 0x0a, 0x71, + 0x0a, 0x1a, 0x0a, 0x21, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x39, 0x0a, 0x2b, 0x0a, + 0x3c, 0x0a, 0x24, 0x0a, 0x3e, 0x0a, 0x20, 0x00, + 0x2a, 0x0a, 0x39, 0x0a, 0x3f, 0x0a, 0x32, 0x0a, + 0x3e, 0x0a, 0x02, 0x0a, 0x21, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x39, 0x0a, 0x2b, + 0x0a, 0x3c, 0x0a, 0x24, 0x0a, 0x47, 0x0a, 0x20, + 0x00, 0x2a, 0x0a, 0x39, 0x0a, 0x3f, 0x0a, 0x32, + 0x0a, 0x3e, 0x0a, 0x02, 0x0a, 0x08, 0x77, 0x65, + 0x65, 0x6b, 0x14, 0x77, 0x65, 0x65, 0x6b, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, 0x77, 0x65, + 0x65, 0x6b, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x07, 0x05, 0x0a, 0x71, 0x0a, 0x1c, 0x0a, + 0x09, 0x2d, 0x0a, 0x32, 0x0a, 0x15, 0x0a, 0x47, + 0x0a, 0x17, 0x2c, 0x0a, 0x40, 0x0a, 0x24, 0x0a, + 0x3f, 0x0a, 0x06, 0x0a, 0x20, 0x00, 0x15, 0x0a, + 0x71, 0x0a, 0x32, 0x0a, 0x4d, 0x0a, 0x39, 0x0a, + 0x19, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x26, 0x0a, 0x3f, 0x0a, 0x28, 0x0a, 0x20, + 0x00, 0x35, 0x0a, 0x3f, 0x0a, 0x71, 0x0a, 0x1a, + 0x0a, 0x1d, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x26, 0x0a, 0x3f, 0x0a, 0x28, 0x0a, + 0x3e, 0x0a, 0x02, 0x0a, 0x20, 0x00, 0x35, 0x0a, + 0x3f, 0x0a, 0x71, 0x0a, 0x1a, 0x0a, 0x1d, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x26, + 0x0a, 0x3f, 0x0a, 0x28, 0x0a, 0x20, 0x00, 0x2a, + 0x0a, 0x39, 0x0a, 0x3f, 0x0a, 0x32, 0x0a, 0x3e, + 0x0a, 0x02, 0x0a, 0x06, 0x64, 0x61, 0x79, 0x12, + 0x64, 0x61, 0x79, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x14, 0x64, 0x61, 0x79, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x0f, 0x07, 0x0a, 0x38, + 0x0a, 0x20, 0x00, 0x18, 0x0a, 0x70, 0x0a, 0x1f, + 0x0a, 0x47, 0x0a, 0x1b, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x18, 0x0a, 0x70, 0x0a, + 0x1f, 0x0a, 0x47, 0x0a, 0x20, 0x00, 0x35, 0x0a, + 0x3f, 0x0a, 0x71, 0x0a, 0x1a, 0x0a, 0x1f, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x18, + 0x0a, 0x70, 0x0a, 0x1f, 0x0a, 0x3f, 0x0a, 0x06, + 0x0a, 0x02, 0x0a, 0x20, 0x00, 0x35, 0x0a, 0x3f, + 0x0a, 0x71, 0x0a, 0x1a, 0x0a, 0x1f, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x18, 0x0a, + 0x70, 0x0a, 0x1f, 0x0a, 0x3e, 0x0a, 0x20, 0x00, + 0x2a, 0x0a, 0x39, 0x0a, 0x3f, 0x0a, 0x32, 0x0a, + 0x3e, 0x0a, 0x02, 0x0a, 0x1f, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x18, 0x0a, 0x70, + 0x0a, 0x1f, 0x0a, 0x47, 0x0a, 0x20, 0x00, 0x2a, + 0x0a, 0x39, 0x0a, 0x3f, 0x0a, 0x32, 0x0a, 0x3e, + 0x0a, 0x02, 0x0a, 0x08, 0x68, 0x6f, 0x75, 0x72, + 0x14, 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x16, 0x68, 0x6f, 0x75, 0x72, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0f, + 0x07, 0x0a, 0x38, 0x0a, 0x20, 0x00, 0x2e, 0x0a, + 0x3f, 0x0a, 0x70, 0x0a, 0x1f, 0x0a, 0x1b, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x2e, + 0x0a, 0x3f, 0x0a, 0x70, 0x0a, 0x1f, 0x0a, 0x20, + 0x00, 0x35, 0x0a, 0x3f, 0x0a, 0x71, 0x0a, 0x1a, + 0x0a, 0x1f, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x2e, 0x0a, 0x3f, 0x0a, 0x70, 0x0a, + 0x1f, 0x0a, 0x3e, 0x0a, 0x02, 0x0a, 0x20, 0x00, + 0x35, 0x0a, 0x3f, 0x0a, 0x71, 0x0a, 0x1a, 0x0a, + 0x1f, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x2e, 0x0a, 0x3f, 0x0a, 0x70, 0x0a, 0x1f, + 0x0a, 0x20, 0x00, 0x2a, 0x0a, 0x39, 0x0a, 0x3f, + 0x0a, 0x32, 0x0a, 0x3e, 0x0a, 0x02, 0x0a, 0x0c, + 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x18, 0x6d, + 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x1a, 0x6d, 0x69, 0x6e, 0x75, + 0x74, 0x65, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x07, 0x39, 0x0a, 0x41, 0x0a, 0x23, 0x0a, + 0x1d, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x38, 0x0a, 0x15, 0x0a, 0x3f, 0x0a, 0x70, + 0x0a, 0x1f, 0x0a, 0x20, 0x00, 0x35, 0x0a, 0x3f, + 0x0a, 0x71, 0x0a, 0x1a, 0x0a, 0x21, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x38, 0x0a, + 0x15, 0x0a, 0x3f, 0x0a, 0x70, 0x0a, 0x1f, 0x0a, + 0x3e, 0x0a, 0x02, 0x0a, 0x20, 0x00, 0x35, 0x0a, + 0x3f, 0x0a, 0x71, 0x0a, 0x1a, 0x0a, 0x21, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x38, + 0x0a, 0x15, 0x0a, 0x3f, 0x0a, 0x70, 0x0a, 0x1f, + 0x0a, 0x20, 0x00, 0x2a, 0x0a, 0x39, 0x0a, 0x3f, + 0x0a, 0x32, 0x0a, 0x3e, 0x0a, 0x02, 0x0a, 0x0c, + 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x18, 0x73, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x1a, 0x73, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, + 0x75, 0x08, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6e, + 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, + 0x2d, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, + 0x65, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2d, 0x66, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2f, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, + 0x61, 0x2f, 0x70, 0x61, 0x2e, 0x6a, 0x73, 0x0d, + 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, + 0x07, 0x00, 0x00, 0xd6, 0x0f, 0x01, 0xa0, 0x01, + 0x00, 0x00, 0x00, 0x06, 0xc8, 0x04, 0xd0, 0x00, + 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, + 0xd2, 0x00, 0x00, 0x00, 0xaa, 0x6a, 0xc1, 0x07, + 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, + 0xd2, 0x00, 0x00, 0x00, 0x43, 0xd0, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd3, 0x00, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xd5, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd5, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd5, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, + 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe3, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xe7, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe8, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xe7, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe8, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, + 0x4d, 0xec, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xe7, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe8, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, + 0x4d, 0xed, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xee, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf1, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf3, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, + 0x4d, 0xf5, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xee, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf1, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf3, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, + 0x4d, 0xf6, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xee, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf1, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf3, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, + 0x4d, 0xf7, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf8, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfb, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xfd, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, + 0x4d, 0xff, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf8, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfb, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xfd, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xf8, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfb, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xfd, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x02, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x05, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x06, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x07, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, + 0x4d, 0x08, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x02, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x05, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x06, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x07, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, + 0x4d, 0x09, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x02, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x05, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x06, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x07, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, + 0x4d, 0x0a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x0b, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x0b, 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x0d, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x0e, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0f, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x00, 0x4d, 0x10, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x0c, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x0d, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x0e, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, + 0x4d, 0x11, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x0b, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x0b, 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x0d, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x0e, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0f, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x00, 0x4d, 0x12, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x14, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, + 0x4d, 0x17, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x13, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x0b, 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x00, 0x4d, 0x18, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x14, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, + 0x4d, 0x19, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x1a, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x0b, 0x04, 0x1b, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x1c, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x1d, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x1d, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x00, 0x4d, 0x1e, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x1a, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x1b, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x1c, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x1d, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, + 0x4d, 0x1f, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x1a, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x0b, 0x04, 0x1b, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x1c, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x1d, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x1d, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x00, 0x4d, 0x20, 0x01, 0x00, + 0x00, 0x04, 0x21, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x22, 0x01, 0x00, 0x00, 0x4d, 0x23, + 0x01, 0x00, 0x00, 0x24, 0x01, 0x00, 0xc8, 0xc4, + 0x28, 0xc8, 0x04, 0x01, 0xaf, 0x02, 0x76, 0x53, + 0x35, 0x08, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x1c, 0x12, 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_pl_size = 5844; + +const uint8_t intl_relative_pl[5844] = { + 0x01, 0x8f, 0x01, 0x1e, 0x5f, 0x5f, 0x61, 0x64, + 0x64, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, + 0x61, 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, + 0x24, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x04, 0x70, 0x6c, 0x0c, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x14, 0x77, 0x20, + 0x74, 0x79, 0x6d, 0x20, 0x72, 0x6f, 0x6b, 0x75, + 0x21, 0x77, 0x00, 0x20, 0x00, 0x70, 0x00, 0x72, + 0x00, 0x7a, 0x00, 0x79, 0x00, 0x73, 0x00, 0x7a, + 0x00, 0x42, 0x01, 0x79, 0x00, 0x6d, 0x00, 0x20, + 0x00, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x1d, 0x77, 0x00, 0x20, 0x00, 0x7a, 0x00, + 0x65, 0x00, 0x73, 0x00, 0x7a, 0x00, 0x42, 0x01, + 0x79, 0x00, 0x6d, 0x00, 0x20, 0x00, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x04, 0x2d, + 0x31, 0x14, 0x7a, 0x61, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x72, 0x6f, 0x6b, 0x06, 0x6f, 0x6e, 0x65, + 0x16, 0x7a, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x6c, 0x61, 0x74, 0x61, 0x06, 0x66, 0x65, 0x77, + 0x14, 0x7a, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x6c, 0x61, 0x74, 0x08, 0x6d, 0x61, 0x6e, 0x79, + 0x16, 0x7a, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x72, 0x6f, 0x6b, 0x75, 0x0a, 0x6f, 0x74, 0x68, + 0x65, 0x72, 0x0c, 0x66, 0x75, 0x74, 0x75, 0x72, + 0x65, 0x18, 0x7b, 0x30, 0x7d, 0x20, 0x72, 0x6f, + 0x6b, 0x20, 0x74, 0x65, 0x6d, 0x75, 0x1a, 0x7b, + 0x30, 0x7d, 0x20, 0x6c, 0x61, 0x74, 0x61, 0x20, + 0x74, 0x65, 0x6d, 0x75, 0x18, 0x7b, 0x30, 0x7d, + 0x20, 0x6c, 0x61, 0x74, 0x20, 0x74, 0x65, 0x6d, + 0x75, 0x1a, 0x7b, 0x30, 0x7d, 0x20, 0x72, 0x6f, + 0x6b, 0x75, 0x20, 0x74, 0x65, 0x6d, 0x75, 0x08, + 0x70, 0x61, 0x73, 0x74, 0x08, 0x79, 0x65, 0x61, + 0x72, 0x14, 0x79, 0x65, 0x61, 0x72, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x16, 0x79, 0x65, 0x61, + 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x1c, 0x77, 0x20, 0x74, 0x79, 0x6d, 0x20, 0x6b, + 0x77, 0x61, 0x72, 0x74, 0x61, 0x6c, 0x65, 0x29, + 0x77, 0x00, 0x20, 0x00, 0x70, 0x00, 0x72, 0x00, + 0x7a, 0x00, 0x79, 0x00, 0x73, 0x00, 0x7a, 0x00, + 0x42, 0x01, 0x79, 0x00, 0x6d, 0x00, 0x20, 0x00, + 0x6b, 0x00, 0x77, 0x00, 0x61, 0x00, 0x72, 0x00, + 0x74, 0x00, 0x61, 0x00, 0x6c, 0x00, 0x65, 0x00, + 0x25, 0x77, 0x00, 0x20, 0x00, 0x7a, 0x00, 0x65, + 0x00, 0x73, 0x00, 0x7a, 0x00, 0x42, 0x01, 0x79, + 0x00, 0x6d, 0x00, 0x20, 0x00, 0x6b, 0x00, 0x77, + 0x00, 0x61, 0x00, 0x72, 0x00, 0x74, 0x00, 0x61, + 0x00, 0x6c, 0x00, 0x65, 0x00, 0x1d, 0x7a, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x6b, 0x00, 0x77, 0x00, + 0x61, 0x00, 0x72, 0x00, 0x74, 0x00, 0x61, 0x00, + 0x42, 0x01, 0x1f, 0x7a, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x6b, 0x00, 0x77, 0x00, 0x61, 0x00, 0x72, + 0x00, 0x74, 0x00, 0x61, 0x00, 0x42, 0x01, 0x79, + 0x00, 0x21, 0x7a, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x6b, 0x00, 0x77, 0x00, 0x61, 0x00, 0x72, 0x00, + 0x74, 0x00, 0x61, 0x00, 0x42, 0x01, 0xf3, 0x00, + 0x77, 0x00, 0x1f, 0x7a, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x6b, 0x00, 0x77, 0x00, 0x61, 0x00, 0x72, + 0x00, 0x74, 0x00, 0x61, 0x00, 0x42, 0x01, 0x75, + 0x00, 0x21, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x6b, 0x00, 0x77, 0x00, 0x61, 0x00, + 0x72, 0x00, 0x74, 0x00, 0x61, 0x00, 0x42, 0x01, + 0x20, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6d, 0x00, + 0x75, 0x00, 0x23, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x6b, 0x00, 0x77, 0x00, 0x61, + 0x00, 0x72, 0x00, 0x74, 0x00, 0x61, 0x00, 0x42, + 0x01, 0x79, 0x00, 0x20, 0x00, 0x74, 0x00, 0x65, + 0x00, 0x6d, 0x00, 0x75, 0x00, 0x25, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x6b, 0x00, + 0x77, 0x00, 0x61, 0x00, 0x72, 0x00, 0x74, 0x00, + 0x61, 0x00, 0x42, 0x01, 0xf3, 0x00, 0x77, 0x00, + 0x20, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6d, 0x00, + 0x75, 0x00, 0x23, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x6b, 0x00, 0x77, 0x00, 0x61, + 0x00, 0x72, 0x00, 0x74, 0x00, 0x61, 0x00, 0x42, + 0x01, 0x75, 0x00, 0x20, 0x00, 0x74, 0x00, 0x65, + 0x00, 0x6d, 0x00, 0x75, 0x00, 0x0e, 0x71, 0x75, + 0x61, 0x72, 0x74, 0x65, 0x72, 0x14, 0x7a, 0x61, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6b, 0x77, 0x2e, + 0x18, 0x7b, 0x30, 0x7d, 0x20, 0x6b, 0x77, 0x2e, + 0x20, 0x74, 0x65, 0x6d, 0x75, 0x1a, 0x71, 0x75, + 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x1c, 0x71, 0x75, 0x61, 0x72, + 0x74, 0x65, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x1d, 0x77, 0x00, 0x20, 0x00, 0x74, + 0x00, 0x79, 0x00, 0x6d, 0x00, 0x20, 0x00, 0x6d, + 0x00, 0x69, 0x00, 0x65, 0x00, 0x73, 0x00, 0x69, + 0x00, 0x05, 0x01, 0x63, 0x00, 0x75, 0x00, 0x29, + 0x77, 0x00, 0x20, 0x00, 0x70, 0x00, 0x72, 0x00, + 0x7a, 0x00, 0x79, 0x00, 0x73, 0x00, 0x7a, 0x00, + 0x42, 0x01, 0x79, 0x00, 0x6d, 0x00, 0x20, 0x00, + 0x6d, 0x00, 0x69, 0x00, 0x65, 0x00, 0x73, 0x00, + 0x69, 0x00, 0x05, 0x01, 0x63, 0x00, 0x75, 0x00, + 0x25, 0x77, 0x00, 0x20, 0x00, 0x7a, 0x00, 0x65, + 0x00, 0x73, 0x00, 0x7a, 0x00, 0x42, 0x01, 0x79, + 0x00, 0x6d, 0x00, 0x20, 0x00, 0x6d, 0x00, 0x69, + 0x00, 0x65, 0x00, 0x73, 0x00, 0x69, 0x00, 0x05, + 0x01, 0x63, 0x00, 0x75, 0x00, 0x1d, 0x7a, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x6d, 0x00, 0x69, 0x00, + 0x65, 0x00, 0x73, 0x00, 0x69, 0x00, 0x05, 0x01, + 0x63, 0x00, 0x1f, 0x7a, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x6d, 0x00, 0x69, 0x00, 0x65, 0x00, 0x73, + 0x00, 0x69, 0x00, 0x05, 0x01, 0x63, 0x00, 0x65, + 0x00, 0x1f, 0x7a, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x6d, 0x00, 0x69, 0x00, 0x65, 0x00, 0x73, 0x00, + 0x69, 0x00, 0x19, 0x01, 0x63, 0x00, 0x79, 0x00, + 0x1f, 0x7a, 0x00, 0x61, 0x00, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x6d, + 0x00, 0x69, 0x00, 0x65, 0x00, 0x73, 0x00, 0x69, + 0x00, 0x05, 0x01, 0x63, 0x00, 0x61, 0x00, 0x21, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x6d, 0x00, 0x69, 0x00, 0x65, 0x00, 0x73, 0x00, + 0x69, 0x00, 0x05, 0x01, 0x63, 0x00, 0x20, 0x00, + 0x74, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x75, 0x00, + 0x23, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x6d, 0x00, 0x69, 0x00, 0x65, 0x00, 0x73, + 0x00, 0x69, 0x00, 0x05, 0x01, 0x63, 0x00, 0x65, + 0x00, 0x20, 0x00, 0x74, 0x00, 0x65, 0x00, 0x6d, + 0x00, 0x75, 0x00, 0x23, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x6d, 0x00, 0x69, 0x00, + 0x65, 0x00, 0x73, 0x00, 0x69, 0x00, 0x19, 0x01, + 0x63, 0x00, 0x79, 0x00, 0x20, 0x00, 0x74, 0x00, + 0x65, 0x00, 0x6d, 0x00, 0x75, 0x00, 0x23, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x6d, + 0x00, 0x69, 0x00, 0x65, 0x00, 0x73, 0x00, 0x69, + 0x00, 0x05, 0x01, 0x63, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x74, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x75, + 0x00, 0x0a, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x16, + 0x77, 0x20, 0x74, 0x79, 0x6d, 0x20, 0x6d, 0x69, + 0x65, 0x73, 0x2e, 0x23, 0x77, 0x00, 0x20, 0x00, + 0x70, 0x00, 0x72, 0x00, 0x7a, 0x00, 0x79, 0x00, + 0x73, 0x00, 0x7a, 0x00, 0x42, 0x01, 0x79, 0x00, + 0x6d, 0x00, 0x20, 0x00, 0x6d, 0x00, 0x69, 0x00, + 0x65, 0x00, 0x73, 0x00, 0x2e, 0x00, 0x1f, 0x77, + 0x00, 0x20, 0x00, 0x7a, 0x00, 0x65, 0x00, 0x73, + 0x00, 0x7a, 0x00, 0x42, 0x01, 0x79, 0x00, 0x6d, + 0x00, 0x20, 0x00, 0x6d, 0x00, 0x69, 0x00, 0x65, + 0x00, 0x73, 0x00, 0x2e, 0x00, 0x18, 0x7a, 0x61, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x65, + 0x73, 0x2e, 0x1c, 0x7b, 0x30, 0x7d, 0x20, 0x6d, + 0x69, 0x65, 0x73, 0x2e, 0x20, 0x74, 0x65, 0x6d, + 0x75, 0x16, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x18, 0x6d, 0x6f, + 0x6e, 0x74, 0x68, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x1c, 0x77, 0x20, 0x74, 0x79, 0x6d, + 0x20, 0x74, 0x79, 0x67, 0x6f, 0x64, 0x6e, 0x69, + 0x75, 0x29, 0x77, 0x00, 0x20, 0x00, 0x70, 0x00, + 0x72, 0x00, 0x7a, 0x00, 0x79, 0x00, 0x73, 0x00, + 0x7a, 0x00, 0x42, 0x01, 0x79, 0x00, 0x6d, 0x00, + 0x20, 0x00, 0x74, 0x00, 0x79, 0x00, 0x67, 0x00, + 0x6f, 0x00, 0x64, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x75, 0x00, 0x25, 0x77, 0x00, 0x20, 0x00, 0x7a, + 0x00, 0x65, 0x00, 0x73, 0x00, 0x7a, 0x00, 0x42, + 0x01, 0x79, 0x00, 0x6d, 0x00, 0x20, 0x00, 0x74, + 0x00, 0x79, 0x00, 0x67, 0x00, 0x6f, 0x00, 0x64, + 0x00, 0x6e, 0x00, 0x69, 0x00, 0x75, 0x00, 0x1d, + 0x7a, 0x00, 0x61, 0x00, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x74, 0x00, + 0x79, 0x00, 0x64, 0x00, 0x7a, 0x00, 0x69, 0x00, + 0x65, 0x00, 0x44, 0x01, 0x1e, 0x7a, 0x61, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x74, 0x79, 0x67, 0x6f, + 0x64, 0x6e, 0x69, 0x65, 0x1c, 0x7a, 0x61, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x74, 0x79, 0x67, 0x6f, + 0x64, 0x6e, 0x69, 0x1e, 0x7a, 0x61, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x74, 0x79, 0x67, 0x6f, 0x64, + 0x6e, 0x69, 0x61, 0x21, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x74, 0x00, 0x79, 0x00, + 0x64, 0x00, 0x7a, 0x00, 0x69, 0x00, 0x65, 0x00, + 0x44, 0x01, 0x20, 0x00, 0x74, 0x00, 0x65, 0x00, + 0x6d, 0x00, 0x75, 0x00, 0x22, 0x7b, 0x30, 0x7d, + 0x20, 0x74, 0x79, 0x67, 0x6f, 0x64, 0x6e, 0x69, + 0x65, 0x20, 0x74, 0x65, 0x6d, 0x75, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x74, 0x79, 0x67, 0x6f, 0x64, + 0x6e, 0x69, 0x20, 0x74, 0x65, 0x6d, 0x75, 0x22, + 0x7b, 0x30, 0x7d, 0x20, 0x74, 0x79, 0x67, 0x6f, + 0x64, 0x6e, 0x69, 0x61, 0x20, 0x74, 0x65, 0x6d, + 0x75, 0x08, 0x77, 0x65, 0x65, 0x6b, 0x14, 0x77, + 0x20, 0x74, 0x79, 0x6d, 0x20, 0x74, 0x79, 0x67, + 0x2e, 0x21, 0x77, 0x00, 0x20, 0x00, 0x70, 0x00, + 0x72, 0x00, 0x7a, 0x00, 0x79, 0x00, 0x73, 0x00, + 0x7a, 0x00, 0x42, 0x01, 0x79, 0x00, 0x6d, 0x00, + 0x20, 0x00, 0x74, 0x00, 0x79, 0x00, 0x67, 0x00, + 0x2e, 0x00, 0x1d, 0x77, 0x00, 0x20, 0x00, 0x7a, + 0x00, 0x65, 0x00, 0x73, 0x00, 0x7a, 0x00, 0x42, + 0x01, 0x79, 0x00, 0x6d, 0x00, 0x20, 0x00, 0x74, + 0x00, 0x79, 0x00, 0x67, 0x00, 0x2e, 0x00, 0x18, + 0x7a, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x74, + 0x79, 0x64, 0x7a, 0x2e, 0x16, 0x7a, 0x61, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x74, 0x79, 0x67, 0x2e, + 0x1c, 0x7b, 0x30, 0x7d, 0x20, 0x74, 0x79, 0x64, + 0x7a, 0x2e, 0x20, 0x74, 0x65, 0x6d, 0x75, 0x1a, + 0x7b, 0x30, 0x7d, 0x20, 0x74, 0x79, 0x67, 0x2e, + 0x20, 0x74, 0x65, 0x6d, 0x75, 0x14, 0x77, 0x65, + 0x65, 0x6b, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x16, 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x0e, 0x64, 0x7a, 0x69, + 0x73, 0x69, 0x61, 0x6a, 0x0a, 0x6a, 0x75, 0x74, + 0x72, 0x6f, 0x10, 0x70, 0x6f, 0x6a, 0x75, 0x74, + 0x72, 0x7a, 0x65, 0x18, 0x70, 0x72, 0x7a, 0x65, + 0x64, 0x77, 0x63, 0x7a, 0x6f, 0x72, 0x61, 0x6a, + 0x04, 0x2d, 0x32, 0x0e, 0x77, 0x63, 0x7a, 0x6f, + 0x72, 0x61, 0x6a, 0x19, 0x7a, 0x00, 0x61, 0x00, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x64, 0x00, 0x7a, 0x00, 0x69, 0x00, + 0x65, 0x00, 0x44, 0x01, 0x14, 0x7a, 0x61, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x64, 0x6e, 0x69, 0x16, + 0x7a, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x64, + 0x6e, 0x69, 0x61, 0x1d, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x64, 0x00, 0x7a, 0x00, + 0x69, 0x00, 0x65, 0x00, 0x44, 0x01, 0x20, 0x00, + 0x74, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x75, 0x00, + 0x18, 0x7b, 0x30, 0x7d, 0x20, 0x64, 0x6e, 0x69, + 0x20, 0x74, 0x65, 0x6d, 0x75, 0x1a, 0x7b, 0x30, + 0x7d, 0x20, 0x64, 0x6e, 0x69, 0x61, 0x20, 0x74, + 0x65, 0x6d, 0x75, 0x06, 0x64, 0x61, 0x79, 0x12, + 0x64, 0x61, 0x79, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x09, 0x64, 0x00, 0x7a, 0x00, 0x69, 0x00, + 0x5b, 0x01, 0x08, 0x77, 0x63, 0x7a, 0x2e, 0x14, + 0x64, 0x61, 0x79, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x14, 0x74, 0x61, 0x20, 0x67, 0x6f, + 0x64, 0x7a, 0x69, 0x6e, 0x61, 0x1d, 0x7a, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x67, 0x00, 0x6f, 0x00, + 0x64, 0x00, 0x7a, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x19, 0x01, 0x1c, 0x7a, 0x61, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x67, 0x6f, 0x64, 0x7a, 0x69, 0x6e, + 0x79, 0x1a, 0x7a, 0x61, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x67, 0x6f, 0x64, 0x7a, 0x69, 0x6e, 0x21, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x67, 0x00, 0x6f, 0x00, 0x64, 0x00, 0x7a, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x19, 0x01, 0x20, 0x00, + 0x74, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x75, 0x00, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x67, 0x6f, 0x64, + 0x7a, 0x69, 0x6e, 0x79, 0x20, 0x74, 0x65, 0x6d, + 0x75, 0x1e, 0x7b, 0x30, 0x7d, 0x20, 0x67, 0x6f, + 0x64, 0x7a, 0x69, 0x6e, 0x20, 0x74, 0x65, 0x6d, + 0x75, 0x08, 0x68, 0x6f, 0x75, 0x72, 0x18, 0x7a, + 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x67, 0x6f, + 0x64, 0x7a, 0x2e, 0x1c, 0x7b, 0x30, 0x7d, 0x20, + 0x67, 0x6f, 0x64, 0x7a, 0x2e, 0x20, 0x74, 0x65, + 0x6d, 0x75, 0x14, 0x68, 0x6f, 0x75, 0x72, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x12, 0x7a, 0x61, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x67, 0x2e, 0x16, + 0x7b, 0x30, 0x7d, 0x20, 0x67, 0x2e, 0x20, 0x74, + 0x65, 0x6d, 0x75, 0x16, 0x68, 0x6f, 0x75, 0x72, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x12, + 0x74, 0x61, 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x74, + 0x61, 0x1b, 0x7a, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x6d, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x75, 0x00, + 0x74, 0x00, 0x19, 0x01, 0x1a, 0x7a, 0x61, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x75, + 0x74, 0x79, 0x18, 0x7a, 0x61, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x1f, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x6d, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x75, 0x00, + 0x74, 0x00, 0x19, 0x01, 0x20, 0x00, 0x74, 0x00, + 0x65, 0x00, 0x6d, 0x00, 0x75, 0x00, 0x1e, 0x7b, + 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x74, + 0x79, 0x20, 0x74, 0x65, 0x6d, 0x75, 0x1c, 0x7b, + 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x74, + 0x20, 0x74, 0x65, 0x6d, 0x75, 0x0c, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x65, 0x14, 0x7a, 0x61, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x18, + 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x20, + 0x74, 0x65, 0x6d, 0x75, 0x18, 0x6d, 0x69, 0x6e, + 0x75, 0x74, 0x65, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x1a, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0a, + 0x74, 0x65, 0x72, 0x61, 0x7a, 0x1d, 0x7a, 0x00, + 0x61, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x73, 0x00, 0x65, 0x00, + 0x6b, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x64, 0x00, + 0x19, 0x01, 0x1c, 0x7a, 0x61, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x73, 0x65, 0x6b, 0x75, 0x6e, 0x64, + 0x79, 0x1a, 0x7a, 0x61, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x73, 0x65, 0x6b, 0x75, 0x6e, 0x64, 0x21, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x73, 0x00, 0x65, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x64, 0x00, 0x19, 0x01, 0x20, 0x00, + 0x74, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x75, 0x00, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, 0x6b, + 0x75, 0x6e, 0x64, 0x79, 0x20, 0x74, 0x65, 0x6d, + 0x75, 0x1e, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, + 0x6b, 0x75, 0x6e, 0x64, 0x20, 0x74, 0x65, 0x6d, + 0x75, 0x0c, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, + 0x16, 0x7a, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x73, 0x65, 0x6b, 0x2e, 0x1a, 0x7b, 0x30, 0x7d, + 0x20, 0x73, 0x65, 0x6b, 0x2e, 0x20, 0x74, 0x65, + 0x6d, 0x75, 0x18, 0x73, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x10, + 0x7a, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, + 0x14, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x20, 0x74, + 0x65, 0x6d, 0x75, 0x1a, 0x73, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, + 0x75, 0x08, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6e, + 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, + 0x2d, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, + 0x65, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2d, 0x66, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2f, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, + 0x61, 0x2f, 0x70, 0x6c, 0x2e, 0x6a, 0x73, 0x0d, + 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, + 0x07, 0x00, 0x00, 0xf8, 0x16, 0x01, 0xa0, 0x01, + 0x00, 0x00, 0x00, 0x06, 0xc8, 0x04, 0xd0, 0x00, + 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, + 0xd2, 0x00, 0x00, 0x00, 0xaa, 0x6a, 0x63, 0x0b, + 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, + 0xd2, 0x00, 0x00, 0x00, 0x43, 0xd0, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd3, 0x00, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xd5, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe2, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe3, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd5, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe2, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe3, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd5, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe2, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe3, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xe9, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xed, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xee, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0xf0, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xf1, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf2, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0xf3, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xf5, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf6, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xf6, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0xf6, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xf7, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf7, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xf8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf6, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xf6, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0xf6, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xf7, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf7, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xf9, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfa, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfd, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xfe, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x01, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x02, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x03, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0x05, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x06, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x09, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x09, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0x09, 0x01, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x0a, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0a, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x0a, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0x0b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x06, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x09, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x09, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0x09, 0x01, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x0a, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0a, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x0a, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0x0c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x0d, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x10, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x11, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0x13, 0x01, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x14, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0x18, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x19, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0x1a, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0x1b, 0x01, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x1c, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x1d, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0x1d, 0x01, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x1e, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x1f, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x1f, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0x1f, 0x01, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0x20, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x19, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0x1a, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0x1b, 0x01, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x1c, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x1d, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0x1d, 0x01, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x1e, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x1f, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x1f, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0x1f, 0x01, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0x21, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x22, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0x23, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0x24, 0x01, 0x00, 0x00, 0x4d, + 0x02, 0x00, 0x00, 0x80, 0x04, 0x25, 0x01, 0x00, + 0x00, 0x4d, 0x26, 0x01, 0x00, 0x00, 0x04, 0x27, + 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x28, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x29, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x29, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x2a, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x2b, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x2c, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x2c, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x2d, 0x01, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0x2e, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x24, 0x01, 0x00, 0x00, 0x4d, + 0x02, 0x00, 0x00, 0x80, 0x04, 0x25, 0x01, 0x00, + 0x00, 0x4d, 0x26, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x28, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x29, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x29, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x2a, 0x01, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x2b, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x2c, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x2c, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0x2d, 0x01, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0x2f, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x30, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0x23, 0x01, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0x24, 0x01, 0x00, + 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, 0x25, + 0x01, 0x00, 0x00, 0x4d, 0x26, 0x01, 0x00, 0x00, + 0x04, 0x31, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x28, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x29, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x29, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0x2a, 0x01, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x2b, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x2c, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x2c, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x2d, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0x32, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x33, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, + 0x34, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x35, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x36, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x35, 0x01, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x37, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x38, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x39, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0x38, 0x01, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0x3a, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x3b, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x3b, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x3b, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x3b, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x3c, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x3c, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x3c, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x3c, 0x01, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0x3d, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x3e, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x3e, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x3e, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0x3e, 0x01, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x3f, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x3f, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x3f, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x3f, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0x40, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x41, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, + 0x42, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x43, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x44, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x43, 0x01, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x45, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0x48, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x49, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x4a, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0x4b, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x4a, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0x4c, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x4f, 0x01, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0x54, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x55, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x55, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x55, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0x57, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x59, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x59, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x59, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x59, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0x5a, + 0x01, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x5c, 0x01, 0x00, 0x00, + 0x4d, 0x5d, 0x01, 0x00, 0x00, 0x24, 0x01, 0x00, + 0xc8, 0xc4, 0x28, 0xbc, 0x05, 0x01, 0x8c, 0x03, + 0x76, 0x53, 0x35, 0x08, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x1c, + 0x12, 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_pt_size = 3448; + +const uint8_t intl_relative_pt[3448] = { + 0x01, 0x65, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x04, 0x70, 0x74, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x10, 0x65, 0x73, 0x74, + 0x65, 0x20, 0x61, 0x6e, 0x6f, 0x16, 0x70, 0x72, + 0xf3, 0x78, 0x69, 0x6d, 0x6f, 0x20, 0x61, 0x6e, + 0x6f, 0x16, 0x61, 0x6e, 0x6f, 0x20, 0x70, 0x61, + 0x73, 0x73, 0x61, 0x64, 0x6f, 0x04, 0x2d, 0x31, + 0x14, 0x65, 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x61, 0x6e, 0x6f, 0x06, 0x6f, 0x6e, 0x65, 0x16, + 0x65, 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x61, + 0x6e, 0x6f, 0x73, 0x0a, 0x6f, 0x74, 0x68, 0x65, + 0x72, 0x0c, 0x66, 0x75, 0x74, 0x75, 0x72, 0x65, + 0x14, 0x68, 0xe1, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x61, 0x6e, 0x6f, 0x16, 0x68, 0xe1, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x61, 0x6e, 0x6f, 0x73, 0x08, + 0x70, 0x61, 0x73, 0x74, 0x08, 0x79, 0x65, 0x61, + 0x72, 0x14, 0x79, 0x65, 0x61, 0x72, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x16, 0x79, 0x65, 0x61, + 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x1c, 0x65, 0x73, 0x74, 0x65, 0x20, 0x74, 0x72, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x72, 0x65, 0x22, + 0x70, 0x72, 0xf3, 0x78, 0x69, 0x6d, 0x6f, 0x20, + 0x74, 0x72, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x72, + 0x65, 0x20, 0xfa, 0x6c, 0x74, 0x69, 0x6d, 0x6f, + 0x20, 0x74, 0x72, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x72, 0x65, 0x20, 0x65, 0x6d, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x74, 0x72, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x72, 0x65, 0x22, 0x65, 0x6d, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x74, 0x72, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x72, 0x65, 0x73, 0x20, 0x68, 0xe1, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x74, 0x72, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x72, 0x65, 0x22, 0x68, + 0xe1, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x74, 0x72, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x72, 0x65, 0x73, + 0x0e, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, + 0x18, 0x65, 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x74, 0x72, 0x69, 0x6d, 0x2e, 0x18, 0x68, 0xe1, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x74, 0x72, 0x69, + 0x6d, 0x2e, 0x1a, 0x71, 0x75, 0x61, 0x72, 0x74, + 0x65, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x1c, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x10, + 0x65, 0x73, 0x74, 0x65, 0x20, 0x6d, 0xea, 0x73, + 0x16, 0x70, 0x72, 0xf3, 0x78, 0x69, 0x6d, 0x6f, + 0x20, 0x6d, 0xea, 0x73, 0x16, 0x6d, 0xea, 0x73, + 0x20, 0x70, 0x61, 0x73, 0x73, 0x61, 0x64, 0x6f, + 0x14, 0x65, 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x6d, 0xea, 0x73, 0x18, 0x65, 0x6d, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x6d, 0x65, 0x73, 0x65, 0x73, + 0x14, 0x68, 0xe1, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x6d, 0xea, 0x73, 0x18, 0x68, 0xe1, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x6d, 0x65, 0x73, 0x65, 0x73, + 0x0a, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x16, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x18, 0x6d, 0x6f, 0x6e, 0x74, 0x68, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x16, + 0x65, 0x73, 0x74, 0x61, 0x20, 0x73, 0x65, 0x6d, + 0x61, 0x6e, 0x61, 0x1c, 0x70, 0x72, 0xf3, 0x78, + 0x69, 0x6d, 0x61, 0x20, 0x73, 0x65, 0x6d, 0x61, + 0x6e, 0x61, 0x1c, 0x73, 0x65, 0x6d, 0x61, 0x6e, + 0x61, 0x20, 0x70, 0x61, 0x73, 0x73, 0x61, 0x64, + 0x61, 0x1a, 0x65, 0x6d, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x61, 0x1c, + 0x65, 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, + 0x65, 0x6d, 0x61, 0x6e, 0x61, 0x73, 0x1a, 0x68, + 0xe1, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, + 0x6d, 0x61, 0x6e, 0x61, 0x1c, 0x68, 0xe1, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, 0x6d, 0x61, + 0x6e, 0x61, 0x73, 0x08, 0x77, 0x65, 0x65, 0x6b, + 0x16, 0x65, 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x73, 0x65, 0x6d, 0x2e, 0x16, 0x68, 0xe1, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, 0x6d, 0x2e, + 0x14, 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x16, 0x77, 0x65, 0x65, 0x6b, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x08, + 0x68, 0x6f, 0x6a, 0x65, 0x0c, 0x61, 0x6d, 0x61, + 0x6e, 0x68, 0xe3, 0x20, 0x64, 0x65, 0x70, 0x6f, + 0x69, 0x73, 0x20, 0x64, 0x65, 0x20, 0x61, 0x6d, + 0x61, 0x6e, 0x68, 0xe3, 0x12, 0x61, 0x6e, 0x74, + 0x65, 0x6f, 0x6e, 0x74, 0x65, 0x6d, 0x04, 0x2d, + 0x32, 0x0a, 0x6f, 0x6e, 0x74, 0x65, 0x6d, 0x14, + 0x65, 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x64, + 0x69, 0x61, 0x16, 0x65, 0x6d, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x64, 0x69, 0x61, 0x73, 0x14, 0x68, + 0xe1, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x64, 0x69, + 0x61, 0x16, 0x68, 0xe1, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x64, 0x69, 0x61, 0x73, 0x06, 0x64, 0x61, + 0x79, 0x12, 0x64, 0x61, 0x79, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x14, 0x64, 0x61, 0x79, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x12, 0x65, + 0x73, 0x74, 0x61, 0x20, 0x68, 0x6f, 0x72, 0x61, + 0x16, 0x65, 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x68, 0x6f, 0x72, 0x61, 0x18, 0x65, 0x6d, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x68, 0x6f, 0x72, 0x61, + 0x73, 0x16, 0x68, 0xe1, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x68, 0x6f, 0x72, 0x61, 0x18, 0x68, 0xe1, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x68, 0x6f, 0x72, + 0x61, 0x73, 0x08, 0x68, 0x6f, 0x75, 0x72, 0x10, + 0x65, 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x68, + 0x10, 0x68, 0xe1, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x68, 0x14, 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x16, 0x68, 0x6f, 0x75, + 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x16, 0x65, 0x73, 0x74, 0x65, 0x20, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x6f, 0x1a, 0x65, 0x6d, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x75, + 0x74, 0x6f, 0x1c, 0x65, 0x6d, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x6f, + 0x73, 0x1a, 0x68, 0xe1, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x6f, 0x1c, + 0x68, 0xe1, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, + 0x69, 0x6e, 0x75, 0x74, 0x6f, 0x73, 0x0c, 0x6d, + 0x69, 0x6e, 0x75, 0x74, 0x65, 0x16, 0x65, 0x6d, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, + 0x2e, 0x16, 0x68, 0xe1, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x6d, 0x69, 0x6e, 0x2e, 0x18, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x1a, 0x6d, 0x69, 0x6e, 0x75, 0x74, + 0x65, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x0a, 0x61, 0x67, 0x6f, 0x72, 0x61, 0x1c, 0x65, + 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, + 0x67, 0x75, 0x6e, 0x64, 0x6f, 0x1e, 0x65, 0x6d, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, 0x67, + 0x75, 0x6e, 0x64, 0x6f, 0x73, 0x1c, 0x68, 0xe1, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, 0x67, + 0x75, 0x6e, 0x64, 0x6f, 0x1e, 0x68, 0xe1, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, 0x67, 0x75, + 0x6e, 0x64, 0x6f, 0x73, 0x0c, 0x73, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x16, 0x65, 0x6d, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x73, 0x65, 0x67, 0x2e, 0x16, + 0x68, 0xe1, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, + 0x65, 0x67, 0x2e, 0x18, 0x73, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x1a, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x08, 0x6c, + 0x61, 0x74, 0x6e, 0x04, 0x6e, 0x75, 0x08, 0x64, + 0x61, 0x74, 0x61, 0x70, 0x6e, 0x6f, 0x64, 0x65, + 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, + 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2d, 0x72, 0x65, + 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x2d, 0x74, + 0x69, 0x6d, 0x65, 0x2d, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x70, + 0x74, 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, + 0x9e, 0x01, 0x00, 0x01, 0x00, 0x07, 0x00, 0x00, + 0x9a, 0x0f, 0x01, 0xa0, 0x01, 0x00, 0x00, 0x00, + 0x06, 0xc8, 0x04, 0xd0, 0x00, 0x00, 0x00, 0x39, + 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, 0x00, 0x00, + 0x00, 0xaa, 0x6a, 0x85, 0x07, 0x00, 0x00, 0x39, + 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, 0x00, 0x00, + 0x00, 0x43, 0xd0, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd3, 0x00, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0xd5, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdf, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd5, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdf, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe2, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd5, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdf, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe3, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe4, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xe5, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xe8, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe9, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe4, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xe5, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xec, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xed, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xed, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xee, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe4, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xe5, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xec, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xed, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xed, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xef, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xf0, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xf1, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xf4, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf5, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf6, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xf7, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xf0, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xf1, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xf4, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf5, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf6, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xf8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xf0, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xf1, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xf4, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf5, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf6, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xf9, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xfa, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xfb, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xfe, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xff, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xfa, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xfb, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x02, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x03, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x03, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x04, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xfa, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xfb, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x02, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x03, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x03, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x05, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x06, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x07, 0x01, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0x08, 0x01, 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, + 0x80, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0x0a, + 0x01, 0x00, 0x00, 0x04, 0x0b, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0c, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0x10, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x08, 0x01, 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, + 0x80, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0x0a, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x0c, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0d, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0e, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0x11, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x08, 0x01, + 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, + 0x09, 0x01, 0x00, 0x00, 0x4d, 0x0a, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x0d, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0e, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0f, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x12, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x13, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x14, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0x18, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x1a, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x1a, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0x1b, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x19, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x1a, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x1a, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x1c, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x1d, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x1e, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x1f, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x20, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0x22, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x23, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x23, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x24, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x24, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0x25, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x23, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x23, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x24, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x24, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x26, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x27, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x28, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x29, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x2a, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x2b, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0x2c, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x2d, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x2d, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x2e, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x2e, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0x2f, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x2d, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x2d, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x2e, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x2e, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x30, 0x01, + 0x00, 0x00, 0x04, 0x31, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x32, 0x01, 0x00, 0x00, 0x4d, + 0x33, 0x01, 0x00, 0x00, 0x24, 0x01, 0x00, 0xc8, + 0xc4, 0x28, 0xe8, 0x04, 0x01, 0xa9, 0x02, 0x76, + 0x53, 0x35, 0x08, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x1c, 0x12, 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_pt_PT_size = 3884; + +const uint8_t intl_relative_pt_PT[3884] = { + 0x01, 0x7c, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x0a, 0x70, 0x74, 0x2d, 0x50, 0x54, + 0x0c, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x22, + 0x64, 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x20, 0x64, + 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, + 0x6e, 0x06, 0x6f, 0x6e, 0x65, 0x0a, 0x6f, 0x74, + 0x68, 0x65, 0x72, 0x0c, 0x66, 0x75, 0x74, 0x75, + 0x72, 0x65, 0x14, 0x68, 0xe1, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x08, 0x70, 0x61, + 0x73, 0x74, 0x18, 0x6d, 0x69, 0x6e, 0x75, 0x74, + 0x65, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x10, + 0x2b, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, + 0x10, 0x2d, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, + 0x6e, 0x1a, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x1e, + 0x64, 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x20, 0x64, + 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x10, + 0x68, 0xe1, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, + 0x18, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x2b, 0x7b, + 0x30, 0x7d, 0x20, 0x73, 0x0c, 0x2d, 0x7b, 0x30, + 0x7d, 0x20, 0x73, 0x1a, 0x73, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x10, 0x65, 0x73, 0x74, 0x65, 0x20, 0x61, + 0x6e, 0x6f, 0x16, 0x70, 0x72, 0xf3, 0x78, 0x69, + 0x6d, 0x6f, 0x20, 0x61, 0x6e, 0x6f, 0x16, 0x61, + 0x6e, 0x6f, 0x20, 0x70, 0x61, 0x73, 0x73, 0x61, + 0x64, 0x6f, 0x04, 0x2d, 0x31, 0x22, 0x64, 0x65, + 0x6e, 0x74, 0x72, 0x6f, 0x20, 0x64, 0x65, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x61, 0x6e, 0x6f, 0x24, + 0x64, 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x20, 0x64, + 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x61, 0x6e, + 0x6f, 0x73, 0x14, 0x68, 0xe1, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x61, 0x6e, 0x6f, 0x16, 0x68, 0xe1, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x61, 0x6e, 0x6f, + 0x73, 0x08, 0x79, 0x65, 0x61, 0x72, 0x14, 0x79, + 0x65, 0x61, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x10, 0x2b, 0x7b, 0x30, 0x7d, 0x20, 0x61, + 0x6e, 0x6f, 0x12, 0x2b, 0x7b, 0x30, 0x7d, 0x20, + 0x61, 0x6e, 0x6f, 0x73, 0x10, 0x2d, 0x7b, 0x30, + 0x7d, 0x20, 0x61, 0x6e, 0x6f, 0x12, 0x2d, 0x7b, + 0x30, 0x7d, 0x20, 0x61, 0x6e, 0x6f, 0x73, 0x16, + 0x79, 0x65, 0x61, 0x72, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x1c, 0x65, 0x73, 0x74, 0x65, + 0x20, 0x74, 0x72, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x72, 0x65, 0x22, 0x70, 0x72, 0xf3, 0x78, 0x69, + 0x6d, 0x6f, 0x20, 0x74, 0x72, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x72, 0x65, 0x22, 0x74, 0x72, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x72, 0x65, 0x20, 0x70, + 0x61, 0x73, 0x73, 0x61, 0x64, 0x6f, 0x2e, 0x64, + 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x20, 0x64, 0x65, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x74, 0x72, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x72, 0x65, 0x30, 0x64, + 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x20, 0x64, 0x65, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x74, 0x72, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x72, 0x65, 0x73, 0x20, + 0x68, 0xe1, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x74, + 0x72, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x72, 0x65, + 0x22, 0x68, 0xe1, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x74, 0x72, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x72, + 0x65, 0x73, 0x0e, 0x71, 0x75, 0x61, 0x72, 0x74, + 0x65, 0x72, 0x14, 0x65, 0x73, 0x74, 0x65, 0x20, + 0x74, 0x72, 0x69, 0x6d, 0x2e, 0x1a, 0x70, 0x72, + 0xf3, 0x78, 0x69, 0x6d, 0x6f, 0x20, 0x74, 0x72, + 0x69, 0x6d, 0x2e, 0x1a, 0x74, 0x72, 0x69, 0x6d, + 0x2e, 0x20, 0x70, 0x61, 0x73, 0x73, 0x61, 0x64, + 0x6f, 0x26, 0x64, 0x65, 0x6e, 0x74, 0x72, 0x6f, + 0x20, 0x64, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x74, 0x72, 0x69, 0x6d, 0x2e, 0x18, 0x68, 0xe1, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x74, 0x72, 0x69, + 0x6d, 0x2e, 0x1a, 0x71, 0x75, 0x61, 0x72, 0x74, + 0x65, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x14, 0x2b, 0x7b, 0x30, 0x7d, 0x20, 0x74, 0x72, + 0x69, 0x6d, 0x2e, 0x14, 0x2d, 0x7b, 0x30, 0x7d, + 0x20, 0x74, 0x72, 0x69, 0x6d, 0x2e, 0x1c, 0x71, + 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x10, 0x65, 0x73, + 0x74, 0x65, 0x20, 0x6d, 0xea, 0x73, 0x16, 0x70, + 0x72, 0xf3, 0x78, 0x69, 0x6d, 0x6f, 0x20, 0x6d, + 0xea, 0x73, 0x16, 0x6d, 0xea, 0x73, 0x20, 0x70, + 0x61, 0x73, 0x73, 0x61, 0x64, 0x6f, 0x22, 0x64, + 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x20, 0x64, 0x65, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0xea, 0x73, + 0x26, 0x64, 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x20, + 0x64, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, + 0x65, 0x73, 0x65, 0x73, 0x14, 0x68, 0xe1, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0xea, 0x73, 0x18, + 0x68, 0xe1, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, + 0x65, 0x73, 0x65, 0x73, 0x0a, 0x6d, 0x6f, 0x6e, + 0x74, 0x68, 0x16, 0x6d, 0x6f, 0x6e, 0x74, 0x68, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x10, 0x2b, + 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0xea, 0x73, 0x14, + 0x2b, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x65, 0x73, + 0x65, 0x73, 0x10, 0x2d, 0x7b, 0x30, 0x7d, 0x20, + 0x6d, 0xea, 0x73, 0x14, 0x2d, 0x7b, 0x30, 0x7d, + 0x20, 0x6d, 0x65, 0x73, 0x65, 0x73, 0x18, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x16, 0x65, 0x73, 0x74, 0x61, + 0x20, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x61, 0x1c, + 0x70, 0x72, 0xf3, 0x78, 0x69, 0x6d, 0x61, 0x20, + 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x61, 0x1c, 0x73, + 0x65, 0x6d, 0x61, 0x6e, 0x61, 0x20, 0x70, 0x61, + 0x73, 0x73, 0x61, 0x64, 0x61, 0x28, 0x64, 0x65, + 0x6e, 0x74, 0x72, 0x6f, 0x20, 0x64, 0x65, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, 0x6d, 0x61, + 0x6e, 0x61, 0x2a, 0x64, 0x65, 0x6e, 0x74, 0x72, + 0x6f, 0x20, 0x64, 0x65, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x61, 0x73, + 0x1a, 0x68, 0xe1, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x61, 0x1c, 0x68, + 0xe1, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, + 0x6d, 0x61, 0x6e, 0x61, 0x73, 0x08, 0x77, 0x65, + 0x65, 0x6b, 0x24, 0x64, 0x65, 0x6e, 0x74, 0x72, + 0x6f, 0x20, 0x64, 0x65, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x73, 0x65, 0x6d, 0x2e, 0x16, 0x68, 0xe1, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, 0x6d, + 0x2e, 0x14, 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x12, 0x2b, 0x7b, 0x30, + 0x7d, 0x20, 0x73, 0x65, 0x6d, 0x2e, 0x12, 0x2d, + 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, 0x6d, 0x2e, + 0x16, 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x08, 0x68, 0x6f, 0x6a, + 0x65, 0x0c, 0x61, 0x6d, 0x61, 0x6e, 0x68, 0xe3, + 0x20, 0x64, 0x65, 0x70, 0x6f, 0x69, 0x73, 0x20, + 0x64, 0x65, 0x20, 0x61, 0x6d, 0x61, 0x6e, 0x68, + 0xe3, 0x12, 0x61, 0x6e, 0x74, 0x65, 0x6f, 0x6e, + 0x74, 0x65, 0x6d, 0x04, 0x2d, 0x32, 0x0a, 0x6f, + 0x6e, 0x74, 0x65, 0x6d, 0x22, 0x64, 0x65, 0x6e, + 0x74, 0x72, 0x6f, 0x20, 0x64, 0x65, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x64, 0x69, 0x61, 0x24, 0x64, + 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x20, 0x64, 0x65, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x64, 0x69, 0x61, + 0x73, 0x14, 0x68, 0xe1, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x64, 0x69, 0x61, 0x16, 0x68, 0xe1, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x64, 0x69, 0x61, 0x73, + 0x06, 0x64, 0x61, 0x79, 0x12, 0x64, 0x61, 0x79, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x10, 0x2b, + 0x7b, 0x30, 0x7d, 0x20, 0x64, 0x69, 0x61, 0x12, + 0x2b, 0x7b, 0x30, 0x7d, 0x20, 0x64, 0x69, 0x61, + 0x73, 0x14, 0x64, 0x61, 0x79, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x12, 0x65, 0x73, 0x74, + 0x61, 0x20, 0x68, 0x6f, 0x72, 0x61, 0x24, 0x64, + 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x20, 0x64, 0x65, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x68, 0x6f, 0x72, + 0x61, 0x26, 0x64, 0x65, 0x6e, 0x74, 0x72, 0x6f, + 0x20, 0x64, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x68, 0x6f, 0x72, 0x61, 0x73, 0x16, 0x68, 0xe1, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x68, 0x6f, 0x72, + 0x61, 0x18, 0x68, 0xe1, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x68, 0x6f, 0x72, 0x61, 0x73, 0x08, 0x68, + 0x6f, 0x75, 0x72, 0x1e, 0x64, 0x65, 0x6e, 0x74, + 0x72, 0x6f, 0x20, 0x64, 0x65, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x68, 0x10, 0x68, 0xe1, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x68, 0x14, 0x68, 0x6f, 0x75, + 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, + 0x2b, 0x7b, 0x30, 0x7d, 0x20, 0x68, 0x0c, 0x2d, + 0x7b, 0x30, 0x7d, 0x20, 0x68, 0x16, 0x68, 0x6f, + 0x75, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x16, 0x65, 0x73, 0x74, 0x65, 0x20, 0x6d, + 0x69, 0x6e, 0x75, 0x74, 0x6f, 0x28, 0x64, 0x65, + 0x6e, 0x74, 0x72, 0x6f, 0x20, 0x64, 0x65, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x75, + 0x74, 0x6f, 0x2a, 0x64, 0x65, 0x6e, 0x74, 0x72, + 0x6f, 0x20, 0x64, 0x65, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x6f, 0x73, + 0x1a, 0x68, 0xe1, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x6f, 0x1c, 0x68, + 0xe1, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x6f, 0x73, 0x0c, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x65, 0x0a, 0x61, 0x67, 0x6f, + 0x72, 0x61, 0x2a, 0x64, 0x65, 0x6e, 0x74, 0x72, + 0x6f, 0x20, 0x64, 0x65, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x73, 0x65, 0x67, 0x75, 0x6e, 0x64, 0x6f, + 0x2c, 0x64, 0x65, 0x6e, 0x74, 0x72, 0x6f, 0x20, + 0x64, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, + 0x65, 0x67, 0x75, 0x6e, 0x64, 0x6f, 0x73, 0x1c, + 0x68, 0xe1, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, + 0x65, 0x67, 0x75, 0x6e, 0x64, 0x6f, 0x1e, 0x68, + 0xe1, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, + 0x67, 0x75, 0x6e, 0x64, 0x6f, 0x73, 0x0c, 0x73, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x08, 0x6c, 0x61, + 0x74, 0x6e, 0x04, 0x6e, 0x75, 0x08, 0x64, 0x61, + 0x74, 0x61, 0x76, 0x6e, 0x6f, 0x64, 0x65, 0x5f, + 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, + 0x69, 0x6e, 0x74, 0x6c, 0x2d, 0x72, 0x65, 0x6c, + 0x61, 0x74, 0x69, 0x76, 0x65, 0x2d, 0x74, 0x69, + 0x6d, 0x65, 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, + 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x70, 0x74, + 0x2d, 0x50, 0x54, 0x2e, 0x6a, 0x73, 0x0d, 0x00, + 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, 0x07, + 0x00, 0x00, 0xd6, 0x0f, 0x01, 0xa0, 0x01, 0x00, + 0x00, 0x00, 0x06, 0xc8, 0x04, 0xd0, 0x00, 0x00, + 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, + 0x00, 0x00, 0x00, 0xaa, 0x6a, 0xc1, 0x07, 0x00, + 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, + 0x00, 0x00, 0x00, 0x43, 0xd0, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xd3, 0x00, 0x00, 0x00, 0x4d, 0xd4, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x0b, 0x04, 0xd5, + 0x00, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, + 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xd6, 0x00, + 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, + 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xd6, 0x00, + 0x00, 0x00, 0x04, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xd6, 0x00, 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0xdf, 0x00, 0x00, 0x00, 0x4d, + 0xd6, 0x00, 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, + 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, 0x04, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xe2, 0x00, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, 0x04, 0xe2, + 0x00, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe3, + 0x00, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, + 0x04, 0xe3, 0x00, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xe4, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe5, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe9, 0x00, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, 0x04, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, + 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xed, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe5, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe9, 0x00, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, 0x04, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, + 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xee, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe5, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xef, 0x00, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, 0x04, 0xf0, + 0x00, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf1, + 0x00, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, + 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xf3, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf4, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xf5, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf7, 0x00, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, 0x04, 0xf8, + 0x00, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf9, + 0x00, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, + 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xfb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfc, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xfd, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xff, 0x00, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, 0x04, 0xff, + 0x00, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x00, + 0x01, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xfc, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xfd, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x02, 0x01, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, 0x04, 0x02, + 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x03, + 0x01, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, + 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0x04, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x05, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0x06, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x08, 0x01, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, 0x04, 0x09, + 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0a, + 0x01, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, + 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0x0c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x05, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0x06, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x08, 0x01, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, 0x04, 0x09, + 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0a, + 0x01, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, + 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0x0d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x05, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0x06, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0e, 0x01, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, 0x04, 0x0f, + 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x10, + 0x01, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, + 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0x12, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x13, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0x14, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x16, 0x01, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, 0x04, 0x17, + 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x18, + 0x01, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, + 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0x1a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x13, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0x14, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x1b, 0x01, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, 0x04, 0x1b, + 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x1c, + 0x01, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, + 0x04, 0x1c, 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0x1d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x13, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0x14, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, 0xe8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x1e, 0x01, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, 0x04, 0x1e, + 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x1f, + 0x01, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, + 0x04, 0x1f, 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0x20, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x21, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0x22, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0x23, 0x01, 0x00, 0x00, 0x4d, 0x02, + 0x00, 0x00, 0x80, 0x04, 0x24, 0x01, 0x00, 0x00, + 0x4d, 0x25, 0x01, 0x00, 0x00, 0x04, 0x26, 0x01, + 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x27, 0x01, 0x00, 0x00, 0x4d, 0xd6, 0x00, + 0x00, 0x00, 0x04, 0x28, 0x01, 0x00, 0x00, 0x4d, + 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x29, 0x01, 0x00, 0x00, 0x4d, + 0xd6, 0x00, 0x00, 0x00, 0x04, 0x2a, 0x01, 0x00, + 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0x2b, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0x22, 0x01, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x23, 0x01, + 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, + 0x26, 0x01, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, + 0x00, 0x04, 0x24, 0x01, 0x00, 0x00, 0x4d, 0x25, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x27, 0x01, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, 0x04, 0x28, + 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x29, + 0x01, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, + 0x04, 0x2a, 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0x2c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x21, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0x22, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0x23, 0x01, 0x00, 0x00, 0x4d, 0x02, + 0x00, 0x00, 0x80, 0x04, 0x26, 0x01, 0x00, 0x00, + 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x04, 0x24, 0x01, + 0x00, 0x00, 0x4d, 0x25, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x2d, 0x01, 0x00, 0x00, 0x4d, 0xd6, 0x00, + 0x00, 0x00, 0x04, 0x2e, 0x01, 0x00, 0x00, 0x4d, + 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x2a, 0x01, 0x00, 0x00, 0x4d, + 0xd6, 0x00, 0x00, 0x00, 0x04, 0x2a, 0x01, 0x00, + 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0x2f, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x30, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x31, 0x01, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, 0x04, 0x32, + 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x33, + 0x01, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, + 0x04, 0x34, 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0x35, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x36, + 0x01, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, + 0x04, 0x36, 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x37, 0x01, 0x00, 0x00, 0x4d, 0xd6, 0x00, + 0x00, 0x00, 0x04, 0x37, 0x01, 0x00, 0x00, 0x4d, + 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0x38, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x39, 0x01, 0x00, 0x00, 0x4d, 0xd6, 0x00, + 0x00, 0x00, 0x04, 0x39, 0x01, 0x00, 0x00, 0x4d, + 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x3a, 0x01, 0x00, 0x00, 0x4d, + 0xd6, 0x00, 0x00, 0x00, 0x04, 0x3a, 0x01, 0x00, + 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0x3b, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x3c, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x3d, 0x01, 0x00, + 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, 0x04, 0x3e, + 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x3f, + 0x01, 0x00, 0x00, 0x4d, 0xd6, 0x00, 0x00, 0x00, + 0x04, 0x40, 0x01, 0x00, 0x00, 0x4d, 0xd7, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0x41, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x42, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, + 0x04, 0x43, 0x01, 0x00, 0x00, 0x4d, 0xd6, 0x00, + 0x00, 0x00, 0x04, 0x44, 0x01, 0x00, 0x00, 0x4d, + 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x45, 0x01, 0x00, 0x00, 0x4d, + 0xd6, 0x00, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, + 0x00, 0x4d, 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0x47, 0x01, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x49, 0x01, 0x00, 0x00, 0x4d, 0x4a, 0x01, + 0x00, 0x00, 0x24, 0x01, 0x00, 0xc8, 0xc4, 0x28, + 0x96, 0x05, 0x01, 0xaf, 0x02, 0x76, 0x53, 0x35, + 0x08, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x1c, + 0x12, 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_ro_size = 5198; + +const uint8_t intl_relative_ro[5198] = { + 0x01, 0x92, 0x01, 0x1e, 0x5f, 0x5f, 0x61, 0x64, + 0x64, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, + 0x61, 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, + 0x24, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x04, 0x72, 0x6f, 0x0c, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x16, 0x61, 0x6e, + 0x75, 0x6c, 0x20, 0x61, 0x63, 0x65, 0x73, 0x74, + 0x61, 0x16, 0x61, 0x6e, 0x75, 0x6c, 0x20, 0x76, + 0x69, 0x69, 0x74, 0x6f, 0x72, 0x16, 0x61, 0x6e, + 0x75, 0x6c, 0x20, 0x74, 0x72, 0x65, 0x63, 0x75, + 0x74, 0x04, 0x2d, 0x31, 0x18, 0x70, 0x65, 0x73, + 0x74, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x61, + 0x6e, 0x06, 0x6f, 0x6e, 0x65, 0x1a, 0x70, 0x65, + 0x73, 0x74, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x61, 0x6e, 0x69, 0x06, 0x66, 0x65, 0x77, 0x20, + 0x70, 0x65, 0x73, 0x74, 0x65, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x64, 0x65, 0x20, 0x61, 0x6e, 0x69, + 0x0a, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x0c, 0x66, + 0x75, 0x74, 0x75, 0x72, 0x65, 0x16, 0x61, 0x63, + 0x75, 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x61, + 0x6e, 0x18, 0x61, 0x63, 0x75, 0x6d, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x61, 0x6e, 0x69, 0x1e, 0x61, + 0x63, 0x75, 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x64, 0x65, 0x20, 0x61, 0x6e, 0x69, 0x08, 0x70, + 0x61, 0x73, 0x74, 0x08, 0x79, 0x65, 0x61, 0x72, + 0x14, 0x79, 0x65, 0x61, 0x72, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x0e, 0x2b, 0x7b, 0x30, 0x7d, + 0x20, 0x61, 0x6e, 0x10, 0x2b, 0x7b, 0x30, 0x7d, + 0x20, 0x61, 0x6e, 0x69, 0x0e, 0x2d, 0x7b, 0x30, + 0x7d, 0x20, 0x61, 0x6e, 0x10, 0x2d, 0x7b, 0x30, + 0x7d, 0x20, 0x61, 0x6e, 0x69, 0x16, 0x79, 0x65, + 0x61, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x22, 0x74, 0x72, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x72, 0x75, 0x6c, 0x20, 0x61, 0x63, 0x65, + 0x73, 0x74, 0x61, 0x22, 0x74, 0x72, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x72, 0x75, 0x6c, 0x20, 0x76, + 0x69, 0x69, 0x74, 0x6f, 0x72, 0x22, 0x74, 0x72, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x72, 0x75, 0x6c, + 0x20, 0x74, 0x72, 0x65, 0x63, 0x75, 0x74, 0x26, + 0x70, 0x65, 0x73, 0x74, 0x65, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x74, 0x72, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x72, 0x75, 0x26, 0x70, 0x65, 0x73, 0x74, + 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x74, 0x72, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x72, 0x65, 0x2c, + 0x70, 0x65, 0x73, 0x74, 0x65, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x64, 0x65, 0x20, 0x74, 0x72, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x72, 0x65, 0x24, 0x61, + 0x63, 0x75, 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x74, 0x72, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x72, + 0x75, 0x24, 0x61, 0x63, 0x75, 0x6d, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x74, 0x72, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x72, 0x65, 0x2a, 0x61, 0x63, 0x75, + 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x64, 0x65, + 0x20, 0x74, 0x72, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x72, 0x65, 0x0e, 0x71, 0x75, 0x61, 0x72, 0x74, + 0x65, 0x72, 0x18, 0x74, 0x72, 0x69, 0x6d, 0x2e, + 0x20, 0x61, 0x63, 0x65, 0x73, 0x74, 0x61, 0x18, + 0x74, 0x72, 0x69, 0x6d, 0x2e, 0x20, 0x76, 0x69, + 0x69, 0x74, 0x6f, 0x72, 0x18, 0x74, 0x72, 0x69, + 0x6d, 0x2e, 0x20, 0x74, 0x72, 0x65, 0x63, 0x75, + 0x74, 0x1e, 0x70, 0x65, 0x73, 0x74, 0x65, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x74, 0x72, 0x69, 0x6d, + 0x2e, 0x1c, 0x61, 0x63, 0x75, 0x6d, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x74, 0x72, 0x69, 0x6d, 0x2e, + 0x1a, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x14, 0x2b, + 0x7b, 0x30, 0x7d, 0x20, 0x74, 0x72, 0x69, 0x6d, + 0x2e, 0x14, 0x2d, 0x7b, 0x30, 0x7d, 0x20, 0x74, + 0x72, 0x69, 0x6d, 0x2e, 0x1c, 0x71, 0x75, 0x61, + 0x72, 0x74, 0x65, 0x72, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x18, 0x6c, 0x75, 0x6e, 0x61, + 0x20, 0x61, 0x63, 0x65, 0x61, 0x73, 0x74, 0x61, + 0x1a, 0x6c, 0x75, 0x6e, 0x61, 0x20, 0x76, 0x69, + 0x69, 0x74, 0x6f, 0x61, 0x72, 0x65, 0x19, 0x6c, + 0x00, 0x75, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, + 0x00, 0x74, 0x00, 0x72, 0x00, 0x65, 0x00, 0x63, + 0x00, 0x75, 0x00, 0x74, 0x00, 0x03, 0x01, 0x1d, + 0x70, 0x00, 0x65, 0x00, 0x73, 0x00, 0x74, 0x00, + 0x65, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x6c, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x03, 0x01, 0x1c, 0x70, 0x65, 0x73, + 0x74, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6c, + 0x75, 0x6e, 0x69, 0x22, 0x70, 0x65, 0x73, 0x74, + 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x64, 0x65, + 0x20, 0x6c, 0x75, 0x6e, 0x69, 0x1b, 0x61, 0x00, + 0x63, 0x00, 0x75, 0x00, 0x6d, 0x00, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x6c, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x03, 0x01, + 0x1a, 0x61, 0x63, 0x75, 0x6d, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x6c, 0x75, 0x6e, 0x69, 0x20, 0x61, + 0x63, 0x75, 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x64, 0x65, 0x20, 0x6c, 0x75, 0x6e, 0x69, 0x0a, + 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x16, 0x6d, 0x6f, + 0x6e, 0x74, 0x68, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x13, 0x2b, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x6c, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x03, 0x01, 0x12, 0x2b, 0x7b, 0x30, + 0x7d, 0x20, 0x6c, 0x75, 0x6e, 0x69, 0x13, 0x2d, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x6c, 0x00, 0x75, 0x00, 0x6e, 0x00, 0x03, + 0x01, 0x12, 0x2d, 0x7b, 0x30, 0x7d, 0x20, 0x6c, + 0x75, 0x6e, 0x69, 0x18, 0x6d, 0x6f, 0x6e, 0x74, + 0x68, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x23, 0x73, 0x00, 0x03, 0x01, 0x70, 0x00, 0x74, + 0x00, 0x03, 0x01, 0x6d, 0x00, 0xe2, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x61, 0x00, 0x63, + 0x00, 0x65, 0x00, 0x61, 0x00, 0x73, 0x00, 0x74, + 0x00, 0x61, 0x00, 0x25, 0x73, 0x00, 0x03, 0x01, + 0x70, 0x00, 0x74, 0x00, 0x03, 0x01, 0x6d, 0x00, + 0xe2, 0x00, 0x6e, 0x00, 0x61, 0x00, 0x20, 0x00, + 0x76, 0x00, 0x69, 0x00, 0x69, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, + 0x23, 0x73, 0x00, 0x03, 0x01, 0x70, 0x00, 0x74, + 0x00, 0x03, 0x01, 0x6d, 0x00, 0xe2, 0x00, 0x6e, + 0x00, 0x61, 0x00, 0x20, 0x00, 0x74, 0x00, 0x72, + 0x00, 0x65, 0x00, 0x63, 0x00, 0x75, 0x00, 0x74, + 0x00, 0x03, 0x01, 0x27, 0x70, 0x00, 0x65, 0x00, + 0x73, 0x00, 0x74, 0x00, 0x65, 0x00, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x73, 0x00, 0x03, 0x01, 0x70, 0x00, 0x74, 0x00, + 0x03, 0x01, 0x6d, 0x00, 0xe2, 0x00, 0x6e, 0x00, + 0x03, 0x01, 0x27, 0x70, 0x00, 0x65, 0x00, 0x73, + 0x00, 0x74, 0x00, 0x65, 0x00, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x73, + 0x00, 0x03, 0x01, 0x70, 0x00, 0x74, 0x00, 0x03, + 0x01, 0x6d, 0x00, 0xe2, 0x00, 0x6e, 0x00, 0x69, + 0x00, 0x2d, 0x70, 0x00, 0x65, 0x00, 0x73, 0x00, + 0x74, 0x00, 0x65, 0x00, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x64, 0x00, + 0x65, 0x00, 0x20, 0x00, 0x73, 0x00, 0x03, 0x01, + 0x70, 0x00, 0x74, 0x00, 0x03, 0x01, 0x6d, 0x00, + 0xe2, 0x00, 0x6e, 0x00, 0x69, 0x00, 0x25, 0x61, + 0x00, 0x63, 0x00, 0x75, 0x00, 0x6d, 0x00, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x73, 0x00, 0x03, 0x01, 0x70, 0x00, 0x74, + 0x00, 0x03, 0x01, 0x6d, 0x00, 0xe2, 0x00, 0x6e, + 0x00, 0x03, 0x01, 0x25, 0x61, 0x00, 0x63, 0x00, + 0x75, 0x00, 0x6d, 0x00, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x73, 0x00, + 0x03, 0x01, 0x70, 0x00, 0x74, 0x00, 0x03, 0x01, + 0x6d, 0x00, 0xe2, 0x00, 0x6e, 0x00, 0x69, 0x00, + 0x2b, 0x61, 0x00, 0x63, 0x00, 0x75, 0x00, 0x6d, + 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x64, 0x00, 0x65, 0x00, 0x20, + 0x00, 0x73, 0x00, 0x03, 0x01, 0x70, 0x00, 0x74, + 0x00, 0x03, 0x01, 0x6d, 0x00, 0xe2, 0x00, 0x6e, + 0x00, 0x69, 0x00, 0x08, 0x77, 0x65, 0x65, 0x6b, + 0x1b, 0x73, 0x00, 0x03, 0x01, 0x70, 0x00, 0x74, + 0x00, 0x2e, 0x00, 0x20, 0x00, 0x61, 0x00, 0x63, + 0x00, 0x65, 0x00, 0x61, 0x00, 0x73, 0x00, 0x74, + 0x00, 0x61, 0x00, 0x1d, 0x73, 0x00, 0x03, 0x01, + 0x70, 0x00, 0x74, 0x00, 0x2e, 0x00, 0x20, 0x00, + 0x76, 0x00, 0x69, 0x00, 0x69, 0x00, 0x74, 0x00, + 0x6f, 0x00, 0x61, 0x00, 0x72, 0x00, 0x65, 0x00, + 0x1b, 0x73, 0x00, 0x03, 0x01, 0x70, 0x00, 0x74, + 0x00, 0x2e, 0x00, 0x20, 0x00, 0x74, 0x00, 0x72, + 0x00, 0x65, 0x00, 0x63, 0x00, 0x75, 0x00, 0x74, + 0x00, 0x03, 0x01, 0x1f, 0x70, 0x00, 0x65, 0x00, + 0x73, 0x00, 0x74, 0x00, 0x65, 0x00, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x73, 0x00, 0x03, 0x01, 0x70, 0x00, 0x74, 0x00, + 0x2e, 0x00, 0x1d, 0x61, 0x00, 0x63, 0x00, 0x75, + 0x00, 0x6d, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x73, 0x00, 0x03, + 0x01, 0x70, 0x00, 0x74, 0x00, 0x2e, 0x00, 0x14, + 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x15, 0x2b, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x73, 0x00, 0x03, + 0x01, 0x70, 0x00, 0x74, 0x00, 0x2e, 0x00, 0x15, + 0x2d, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x73, 0x00, 0x03, 0x01, 0x70, 0x00, + 0x74, 0x00, 0x2e, 0x00, 0x16, 0x77, 0x65, 0x65, + 0x6b, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x06, 0x61, 0x7a, 0x69, 0x0a, 0x6d, 0xe2, 0x69, + 0x6e, 0x65, 0x10, 0x70, 0x6f, 0x69, 0x6d, 0xe2, + 0x69, 0x6e, 0x65, 0x15, 0x61, 0x00, 0x6c, 0x00, + 0x61, 0x00, 0x6c, 0x00, 0x74, 0x00, 0x03, 0x01, + 0x69, 0x00, 0x65, 0x00, 0x72, 0x00, 0x69, 0x00, + 0x04, 0x2d, 0x32, 0x08, 0x69, 0x65, 0x72, 0x69, + 0x18, 0x70, 0x65, 0x73, 0x74, 0x65, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x7a, 0x69, 0x1c, 0x70, 0x65, + 0x73, 0x74, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x7a, 0x69, 0x6c, 0x65, 0x22, 0x70, 0x65, 0x73, + 0x74, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x64, + 0x65, 0x20, 0x7a, 0x69, 0x6c, 0x65, 0x16, 0x61, + 0x63, 0x75, 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x7a, 0x69, 0x1a, 0x61, 0x63, 0x75, 0x6d, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x7a, 0x69, 0x6c, 0x65, + 0x20, 0x61, 0x63, 0x75, 0x6d, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x64, 0x65, 0x20, 0x7a, 0x69, 0x6c, + 0x65, 0x06, 0x64, 0x61, 0x79, 0x12, 0x64, 0x61, + 0x79, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0e, + 0x2b, 0x7b, 0x30, 0x7d, 0x20, 0x7a, 0x69, 0x12, + 0x2b, 0x7b, 0x30, 0x7d, 0x20, 0x7a, 0x69, 0x6c, + 0x65, 0x0e, 0x2d, 0x7b, 0x30, 0x7d, 0x20, 0x7a, + 0x69, 0x12, 0x2d, 0x7b, 0x30, 0x7d, 0x20, 0x7a, + 0x69, 0x6c, 0x65, 0x14, 0x64, 0x61, 0x79, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x16, 0x6f, + 0x72, 0x61, 0x20, 0x61, 0x63, 0x65, 0x61, 0x73, + 0x74, 0x61, 0x1b, 0x70, 0x00, 0x65, 0x00, 0x73, + 0x00, 0x74, 0x00, 0x65, 0x00, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x6f, + 0x00, 0x72, 0x00, 0x03, 0x01, 0x1a, 0x70, 0x65, + 0x73, 0x74, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x6f, 0x72, 0x65, 0x20, 0x70, 0x65, 0x73, 0x74, + 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x64, 0x65, + 0x20, 0x6f, 0x72, 0x65, 0x19, 0x61, 0x00, 0x63, + 0x00, 0x75, 0x00, 0x6d, 0x00, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x6f, + 0x00, 0x72, 0x00, 0x03, 0x01, 0x18, 0x61, 0x63, + 0x75, 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6f, + 0x72, 0x65, 0x1e, 0x61, 0x63, 0x75, 0x6d, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x64, 0x65, 0x20, 0x6f, + 0x72, 0x65, 0x08, 0x68, 0x6f, 0x75, 0x72, 0x16, + 0x70, 0x65, 0x73, 0x74, 0x65, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x68, 0x14, 0x61, 0x63, 0x75, 0x6d, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x68, 0x14, 0x68, + 0x6f, 0x75, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x0c, 0x2b, 0x7b, 0x30, 0x7d, 0x20, 0x68, + 0x0c, 0x2d, 0x7b, 0x30, 0x7d, 0x20, 0x68, 0x16, + 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x1c, 0x6d, 0x69, 0x6e, 0x75, + 0x74, 0x75, 0x6c, 0x20, 0x61, 0x63, 0x65, 0x73, + 0x74, 0x61, 0x1e, 0x70, 0x65, 0x73, 0x74, 0x65, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, + 0x75, 0x74, 0x20, 0x70, 0x65, 0x73, 0x74, 0x65, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, + 0x75, 0x74, 0x65, 0x26, 0x70, 0x65, 0x73, 0x74, + 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x64, 0x65, + 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x1c, + 0x61, 0x63, 0x75, 0x6d, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x1e, 0x61, + 0x63, 0x75, 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x24, 0x61, + 0x63, 0x75, 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x64, 0x65, 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x74, + 0x65, 0x0c, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, + 0x1c, 0x70, 0x65, 0x73, 0x74, 0x65, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x2e, 0x1a, + 0x61, 0x63, 0x75, 0x6d, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x6d, 0x69, 0x6e, 0x2e, 0x18, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x0c, 0x2b, 0x7b, 0x30, 0x7d, 0x20, + 0x6d, 0x0c, 0x2d, 0x7b, 0x30, 0x7d, 0x20, 0x6d, + 0x1a, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x08, 0x61, + 0x63, 0x75, 0x6d, 0x23, 0x70, 0x00, 0x65, 0x00, + 0x73, 0x00, 0x74, 0x00, 0x65, 0x00, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x73, 0x00, 0x65, 0x00, 0x63, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x64, 0x00, 0x03, 0x01, 0x22, 0x70, + 0x65, 0x73, 0x74, 0x65, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x73, 0x65, 0x63, 0x75, 0x6e, 0x64, 0x65, + 0x28, 0x70, 0x65, 0x73, 0x74, 0x65, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x64, 0x65, 0x20, 0x73, 0x65, + 0x63, 0x75, 0x6e, 0x64, 0x65, 0x21, 0x61, 0x00, + 0x63, 0x00, 0x75, 0x00, 0x6d, 0x00, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x73, 0x00, 0x65, 0x00, 0x63, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x64, 0x00, 0x03, 0x01, 0x20, 0x61, + 0x63, 0x75, 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x73, 0x65, 0x63, 0x75, 0x6e, 0x64, 0x65, 0x26, + 0x61, 0x63, 0x75, 0x6d, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x64, 0x65, 0x20, 0x73, 0x65, 0x63, 0x75, + 0x6e, 0x64, 0x65, 0x0c, 0x73, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x1c, 0x70, 0x65, 0x73, 0x74, 0x65, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, 0x63, + 0x2e, 0x1a, 0x61, 0x63, 0x75, 0x6d, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x73, 0x65, 0x63, 0x2e, 0x18, + 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x2b, 0x7b, 0x30, + 0x7d, 0x20, 0x73, 0x0c, 0x2d, 0x7b, 0x30, 0x7d, + 0x20, 0x73, 0x1a, 0x73, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, 0x75, + 0x08, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6e, 0x6f, + 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2d, + 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2d, 0x66, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x2f, 0x6c, 0x6f, 0x63, + 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, + 0x2f, 0x72, 0x6f, 0x2e, 0x6a, 0x73, 0x0d, 0x00, + 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, 0x07, + 0x00, 0x00, 0xf2, 0x13, 0x01, 0xa0, 0x01, 0x00, + 0x00, 0x00, 0x06, 0xc8, 0x04, 0xd0, 0x00, 0x00, + 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, + 0x00, 0x00, 0x00, 0xaa, 0x6a, 0xdd, 0x09, 0x00, + 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, + 0x00, 0x00, 0x00, 0x43, 0xd0, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xd3, 0x00, 0x00, 0x00, 0x4d, 0xd4, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xd5, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xe1, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0xe2, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe1, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0xe2, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x4d, + 0xe5, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd5, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe7, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0xe9, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xec, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xed, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0xf0, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf1, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf2, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x4d, + 0xf4, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf5, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xf6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf8, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf8, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0xf9, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x00, 0x4d, 0xfa, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xf6, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xf7, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0xfb, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfc, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xfc, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x4d, + 0xfd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfe, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xff, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x01, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x02, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x00, 0x4d, 0x07, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xff, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x00, 0x01, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x02, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x04, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x05, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x4d, + 0x08, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xfe, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xff, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x09, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0a, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x0c, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x00, 0x4d, 0x0d, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0x0f, 0x01, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x10, 0x01, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x13, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x14, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x4d, + 0x17, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x18, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0x19, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0x1a, 0x01, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x1b, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x1b, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x1b, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x1c, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x1c, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x1c, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe3, + 0x00, 0x00, 0x00, 0x4d, 0x1d, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x18, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0x19, 0x01, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x01, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x1e, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x1f, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x1f, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x1f, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x4d, + 0x20, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x21, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0x22, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0x23, 0x01, 0x00, 0x00, 0x4d, 0x02, + 0x00, 0x00, 0x80, 0x04, 0x24, 0x01, 0x00, 0x00, + 0x4d, 0x25, 0x01, 0x00, 0x00, 0x04, 0x26, 0x01, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x27, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x28, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x29, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x2a, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x2b, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x2c, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x4d, + 0x2d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x21, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0x22, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0x23, 0x01, 0x00, 0x00, 0x4d, 0x02, + 0x00, 0x00, 0x80, 0x04, 0x24, 0x01, 0x00, 0x00, + 0x4d, 0x25, 0x01, 0x00, 0x00, 0x04, 0x26, 0x01, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x27, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x28, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x29, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x2a, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x2b, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x2c, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x4d, + 0x2e, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x21, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0x22, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0x23, 0x01, 0x00, 0x00, 0x4d, 0x02, + 0x00, 0x00, 0x80, 0x04, 0x24, 0x01, 0x00, 0x00, + 0x4d, 0x25, 0x01, 0x00, 0x00, 0x04, 0x26, 0x01, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x30, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x30, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x31, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x32, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x32, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x4d, + 0x33, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x34, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, + 0x04, 0x35, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x36, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x37, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x38, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x39, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x3a, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x4d, + 0x3b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x34, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, + 0x04, 0x3c, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x3c, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x3c, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x3d, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x3d, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x3d, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x4d, + 0x3e, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x34, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, + 0x04, 0x3f, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x3f, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x3f, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x40, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x40, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x40, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x4d, + 0x41, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x42, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, + 0x04, 0x43, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x44, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x45, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x46, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x47, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x48, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x4d, + 0x49, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x42, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x4b, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x4d, + 0x4c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x42, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x4d, + 0x4f, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x55, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x56, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x4d, + 0x57, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, + 0x04, 0x58, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x59, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x59, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x4d, + 0x5a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, + 0x04, 0x5b, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x5b, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x5c, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x5c, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x4d, + 0x5d, 0x01, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x5f, 0x01, 0x00, + 0x00, 0x4d, 0x60, 0x01, 0x00, 0x00, 0x24, 0x01, + 0x00, 0xc8, 0xc4, 0x28, 0xc2, 0x05, 0x01, 0xe5, + 0x02, 0x76, 0x53, 0x35, 0x08, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x08, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, + 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x1c, + 0x1c, 0x1c, 0x12, 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_ru_size = 7225; + +const uint8_t intl_relative_ru[7225] = { + 0x01, 0xa9, 0x01, 0x1e, 0x5f, 0x5f, 0x61, 0x64, + 0x64, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, + 0x61, 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, + 0x24, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x04, 0x72, 0x75, 0x0c, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x17, 0x32, 0x04, + 0x20, 0x00, 0x4d, 0x04, 0x42, 0x04, 0x3e, 0x04, + 0x3c, 0x04, 0x20, 0x00, 0x33, 0x04, 0x3e, 0x04, + 0x34, 0x04, 0x43, 0x04, 0x21, 0x32, 0x04, 0x20, + 0x00, 0x41, 0x04, 0x3b, 0x04, 0x35, 0x04, 0x34, + 0x04, 0x43, 0x04, 0x4e, 0x04, 0x49, 0x04, 0x35, + 0x04, 0x3c, 0x04, 0x20, 0x00, 0x33, 0x04, 0x3e, + 0x04, 0x34, 0x04, 0x43, 0x04, 0x1d, 0x32, 0x04, + 0x20, 0x00, 0x3f, 0x04, 0x40, 0x04, 0x3e, 0x04, + 0x48, 0x04, 0x3b, 0x04, 0x3e, 0x04, 0x3c, 0x04, + 0x20, 0x00, 0x33, 0x04, 0x3e, 0x04, 0x34, 0x04, + 0x43, 0x04, 0x04, 0x2d, 0x31, 0x1b, 0x47, 0x04, + 0x35, 0x04, 0x40, 0x04, 0x35, 0x04, 0x37, 0x04, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x33, 0x04, 0x3e, 0x04, 0x34, 0x04, + 0x06, 0x6f, 0x6e, 0x65, 0x1d, 0x47, 0x04, 0x35, + 0x04, 0x40, 0x04, 0x35, 0x04, 0x37, 0x04, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x33, 0x04, 0x3e, 0x04, 0x34, 0x04, 0x30, + 0x04, 0x06, 0x66, 0x65, 0x77, 0x1b, 0x47, 0x04, + 0x35, 0x04, 0x40, 0x04, 0x35, 0x04, 0x37, 0x04, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x3b, 0x04, 0x35, 0x04, 0x42, 0x04, + 0x08, 0x6d, 0x61, 0x6e, 0x79, 0x0a, 0x6f, 0x74, + 0x68, 0x65, 0x72, 0x0c, 0x66, 0x75, 0x74, 0x75, + 0x72, 0x65, 0x1b, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x33, 0x04, 0x3e, 0x04, 0x34, + 0x04, 0x20, 0x00, 0x3d, 0x04, 0x30, 0x04, 0x37, + 0x04, 0x30, 0x04, 0x34, 0x04, 0x1d, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x33, 0x04, + 0x3e, 0x04, 0x34, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x3d, 0x04, 0x30, 0x04, 0x37, 0x04, 0x30, 0x04, + 0x34, 0x04, 0x1b, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x3b, 0x04, 0x35, 0x04, 0x42, + 0x04, 0x20, 0x00, 0x3d, 0x04, 0x30, 0x04, 0x37, + 0x04, 0x30, 0x04, 0x34, 0x04, 0x08, 0x70, 0x61, + 0x73, 0x74, 0x08, 0x79, 0x65, 0x61, 0x72, 0x13, + 0x32, 0x04, 0x20, 0x00, 0x4d, 0x04, 0x42, 0x04, + 0x3e, 0x04, 0x3c, 0x04, 0x20, 0x00, 0x33, 0x04, + 0x2e, 0x00, 0x15, 0x32, 0x04, 0x20, 0x00, 0x41, + 0x04, 0x3b, 0x04, 0x35, 0x04, 0x34, 0x04, 0x2e, + 0x00, 0x20, 0x00, 0x33, 0x04, 0x2e, 0x00, 0x19, + 0x32, 0x04, 0x20, 0x00, 0x3f, 0x04, 0x40, 0x04, + 0x3e, 0x04, 0x48, 0x04, 0x3b, 0x04, 0x3e, 0x04, + 0x3c, 0x04, 0x20, 0x00, 0x33, 0x04, 0x2e, 0x00, + 0x19, 0x47, 0x04, 0x35, 0x04, 0x40, 0x04, 0x35, + 0x04, 0x37, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x33, 0x04, 0x2e, + 0x00, 0x19, 0x47, 0x04, 0x35, 0x04, 0x40, 0x04, + 0x35, 0x04, 0x37, 0x04, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3b, 0x04, + 0x2e, 0x00, 0x19, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x33, 0x04, 0x2e, 0x00, 0x20, + 0x00, 0x3d, 0x04, 0x30, 0x04, 0x37, 0x04, 0x30, + 0x04, 0x34, 0x04, 0x19, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x3b, 0x04, 0x2e, 0x00, + 0x20, 0x00, 0x3d, 0x04, 0x30, 0x04, 0x37, 0x04, + 0x30, 0x04, 0x34, 0x04, 0x14, 0x79, 0x65, 0x61, + 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x11, + 0x32, 0x04, 0x20, 0x00, 0x4d, 0x04, 0x42, 0x04, + 0x2e, 0x00, 0x20, 0x00, 0x33, 0x04, 0x2e, 0x00, + 0x11, 0x32, 0x04, 0x20, 0x00, 0x41, 0x04, 0x3b, + 0x04, 0x2e, 0x00, 0x20, 0x00, 0x33, 0x04, 0x2e, + 0x00, 0x11, 0x32, 0x04, 0x20, 0x00, 0x3f, 0x04, + 0x40, 0x04, 0x2e, 0x00, 0x20, 0x00, 0x33, 0x04, + 0x2e, 0x00, 0x0f, 0x2b, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x33, 0x04, 0x2e, + 0x00, 0x0f, 0x2b, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x3b, 0x04, 0x2e, 0x00, + 0x0f, 0x2d, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x33, 0x04, 0x2e, 0x00, 0x0f, + 0x2d, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x3b, 0x04, 0x2e, 0x00, 0x16, 0x79, + 0x65, 0x61, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x25, 0x32, 0x04, 0x20, 0x00, 0x42, + 0x04, 0x35, 0x04, 0x3a, 0x04, 0x43, 0x04, 0x49, + 0x04, 0x35, 0x04, 0x3c, 0x04, 0x20, 0x00, 0x3a, + 0x04, 0x32, 0x04, 0x30, 0x04, 0x40, 0x04, 0x42, + 0x04, 0x30, 0x04, 0x3b, 0x04, 0x35, 0x04, 0x29, + 0x32, 0x04, 0x20, 0x00, 0x41, 0x04, 0x3b, 0x04, + 0x35, 0x04, 0x34, 0x04, 0x43, 0x04, 0x4e, 0x04, + 0x49, 0x04, 0x35, 0x04, 0x3c, 0x04, 0x20, 0x00, + 0x3a, 0x04, 0x32, 0x04, 0x30, 0x04, 0x40, 0x04, + 0x42, 0x04, 0x30, 0x04, 0x3b, 0x04, 0x35, 0x04, + 0x25, 0x32, 0x04, 0x20, 0x00, 0x3f, 0x04, 0x40, + 0x04, 0x3e, 0x04, 0x48, 0x04, 0x3b, 0x04, 0x3e, + 0x04, 0x3c, 0x04, 0x20, 0x00, 0x3a, 0x04, 0x32, + 0x04, 0x30, 0x04, 0x40, 0x04, 0x42, 0x04, 0x30, + 0x04, 0x3b, 0x04, 0x35, 0x04, 0x23, 0x47, 0x04, + 0x35, 0x04, 0x40, 0x04, 0x35, 0x04, 0x37, 0x04, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x3a, 0x04, 0x32, 0x04, 0x30, 0x04, + 0x40, 0x04, 0x42, 0x04, 0x30, 0x04, 0x3b, 0x04, + 0x25, 0x47, 0x04, 0x35, 0x04, 0x40, 0x04, 0x35, + 0x04, 0x37, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3a, 0x04, 0x32, + 0x04, 0x30, 0x04, 0x40, 0x04, 0x42, 0x04, 0x30, + 0x04, 0x3b, 0x04, 0x30, 0x04, 0x27, 0x47, 0x04, + 0x35, 0x04, 0x40, 0x04, 0x35, 0x04, 0x37, 0x04, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x3a, 0x04, 0x32, 0x04, 0x30, 0x04, + 0x40, 0x04, 0x42, 0x04, 0x30, 0x04, 0x3b, 0x04, + 0x3e, 0x04, 0x32, 0x04, 0x23, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3a, 0x04, 0x32, + 0x04, 0x30, 0x04, 0x40, 0x04, 0x42, 0x04, 0x30, + 0x04, 0x3b, 0x04, 0x20, 0x00, 0x3d, 0x04, 0x30, + 0x04, 0x37, 0x04, 0x30, 0x04, 0x34, 0x04, 0x25, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x3a, 0x04, 0x32, 0x04, 0x30, 0x04, 0x40, 0x04, + 0x42, 0x04, 0x30, 0x04, 0x3b, 0x04, 0x30, 0x04, + 0x20, 0x00, 0x3d, 0x04, 0x30, 0x04, 0x37, 0x04, + 0x30, 0x04, 0x34, 0x04, 0x27, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3a, 0x04, 0x32, + 0x04, 0x30, 0x04, 0x40, 0x04, 0x42, 0x04, 0x30, + 0x04, 0x3b, 0x04, 0x3e, 0x04, 0x32, 0x04, 0x20, + 0x00, 0x3d, 0x04, 0x30, 0x04, 0x37, 0x04, 0x30, + 0x04, 0x34, 0x04, 0x0e, 0x71, 0x75, 0x61, 0x72, + 0x74, 0x65, 0x72, 0x17, 0x42, 0x04, 0x35, 0x04, + 0x3a, 0x04, 0x43, 0x04, 0x49, 0x04, 0x38, 0x04, + 0x39, 0x04, 0x20, 0x00, 0x3a, 0x04, 0x32, 0x04, + 0x2e, 0x00, 0x1b, 0x41, 0x04, 0x3b, 0x04, 0x35, + 0x04, 0x34, 0x04, 0x43, 0x04, 0x4e, 0x04, 0x49, + 0x04, 0x38, 0x04, 0x39, 0x04, 0x20, 0x00, 0x3a, + 0x04, 0x32, 0x04, 0x2e, 0x00, 0x1b, 0x3f, 0x04, + 0x3e, 0x04, 0x41, 0x04, 0x3b, 0x04, 0x35, 0x04, + 0x34, 0x04, 0x3d, 0x04, 0x38, 0x04, 0x39, 0x04, + 0x20, 0x00, 0x3a, 0x04, 0x32, 0x04, 0x2e, 0x00, + 0x1b, 0x47, 0x04, 0x35, 0x04, 0x40, 0x04, 0x35, + 0x04, 0x37, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3a, 0x04, 0x32, + 0x04, 0x2e, 0x00, 0x1b, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x3a, 0x04, 0x32, 0x04, + 0x2e, 0x00, 0x20, 0x00, 0x3d, 0x04, 0x30, 0x04, + 0x37, 0x04, 0x30, 0x04, 0x34, 0x04, 0x1a, 0x71, + 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x11, 0x42, 0x04, 0x35, + 0x04, 0x3a, 0x04, 0x2e, 0x00, 0x20, 0x00, 0x3a, + 0x04, 0x32, 0x04, 0x2e, 0x00, 0x13, 0x41, 0x04, + 0x3b, 0x04, 0x35, 0x04, 0x34, 0x04, 0x2e, 0x00, + 0x20, 0x00, 0x3a, 0x04, 0x32, 0x04, 0x2e, 0x00, + 0x13, 0x3f, 0x04, 0x3e, 0x04, 0x41, 0x04, 0x3b, + 0x04, 0x2e, 0x00, 0x20, 0x00, 0x3a, 0x04, 0x32, + 0x04, 0x2e, 0x00, 0x11, 0x2b, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3a, 0x04, + 0x32, 0x04, 0x2e, 0x00, 0x11, 0x2d, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3a, + 0x04, 0x32, 0x04, 0x2e, 0x00, 0x1c, 0x71, 0x75, + 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x1b, 0x32, 0x04, 0x20, + 0x00, 0x4d, 0x04, 0x42, 0x04, 0x3e, 0x04, 0x3c, + 0x04, 0x20, 0x00, 0x3c, 0x04, 0x35, 0x04, 0x41, + 0x04, 0x4f, 0x04, 0x46, 0x04, 0x35, 0x04, 0x25, + 0x32, 0x04, 0x20, 0x00, 0x41, 0x04, 0x3b, 0x04, + 0x35, 0x04, 0x34, 0x04, 0x43, 0x04, 0x4e, 0x04, + 0x49, 0x04, 0x35, 0x04, 0x3c, 0x04, 0x20, 0x00, + 0x3c, 0x04, 0x35, 0x04, 0x41, 0x04, 0x4f, 0x04, + 0x46, 0x04, 0x35, 0x04, 0x21, 0x32, 0x04, 0x20, + 0x00, 0x3f, 0x04, 0x40, 0x04, 0x3e, 0x04, 0x48, + 0x04, 0x3b, 0x04, 0x3e, 0x04, 0x3c, 0x04, 0x20, + 0x00, 0x3c, 0x04, 0x35, 0x04, 0x41, 0x04, 0x4f, + 0x04, 0x46, 0x04, 0x35, 0x04, 0x1f, 0x47, 0x04, + 0x35, 0x04, 0x40, 0x04, 0x35, 0x04, 0x37, 0x04, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x3c, 0x04, 0x35, 0x04, 0x41, 0x04, + 0x4f, 0x04, 0x46, 0x04, 0x21, 0x47, 0x04, 0x35, + 0x04, 0x40, 0x04, 0x35, 0x04, 0x37, 0x04, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x3c, 0x04, 0x35, 0x04, 0x41, 0x04, 0x4f, + 0x04, 0x46, 0x04, 0x30, 0x04, 0x23, 0x47, 0x04, + 0x35, 0x04, 0x40, 0x04, 0x35, 0x04, 0x37, 0x04, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x3c, 0x04, 0x35, 0x04, 0x41, 0x04, + 0x4f, 0x04, 0x46, 0x04, 0x35, 0x04, 0x32, 0x04, + 0x1f, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x3c, 0x04, 0x35, 0x04, 0x41, 0x04, 0x4f, + 0x04, 0x46, 0x04, 0x20, 0x00, 0x3d, 0x04, 0x30, + 0x04, 0x37, 0x04, 0x30, 0x04, 0x34, 0x04, 0x21, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x3c, 0x04, 0x35, 0x04, 0x41, 0x04, 0x4f, 0x04, + 0x46, 0x04, 0x30, 0x04, 0x20, 0x00, 0x3d, 0x04, + 0x30, 0x04, 0x37, 0x04, 0x30, 0x04, 0x34, 0x04, + 0x23, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x3c, 0x04, 0x35, 0x04, 0x41, 0x04, 0x4f, + 0x04, 0x46, 0x04, 0x35, 0x04, 0x32, 0x04, 0x20, + 0x00, 0x3d, 0x04, 0x30, 0x04, 0x37, 0x04, 0x30, + 0x04, 0x34, 0x04, 0x0a, 0x6d, 0x6f, 0x6e, 0x74, + 0x68, 0x17, 0x32, 0x04, 0x20, 0x00, 0x4d, 0x04, + 0x42, 0x04, 0x3e, 0x04, 0x3c, 0x04, 0x20, 0x00, + 0x3c, 0x04, 0x35, 0x04, 0x41, 0x04, 0x2e, 0x00, + 0x21, 0x32, 0x04, 0x20, 0x00, 0x41, 0x04, 0x3b, + 0x04, 0x35, 0x04, 0x34, 0x04, 0x43, 0x04, 0x4e, + 0x04, 0x49, 0x04, 0x35, 0x04, 0x3c, 0x04, 0x20, + 0x00, 0x3c, 0x04, 0x35, 0x04, 0x41, 0x04, 0x2e, + 0x00, 0x1d, 0x32, 0x04, 0x20, 0x00, 0x3f, 0x04, + 0x40, 0x04, 0x3e, 0x04, 0x48, 0x04, 0x3b, 0x04, + 0x3e, 0x04, 0x3c, 0x04, 0x20, 0x00, 0x3c, 0x04, + 0x35, 0x04, 0x41, 0x04, 0x2e, 0x00, 0x1d, 0x47, + 0x04, 0x35, 0x04, 0x40, 0x04, 0x35, 0x04, 0x37, + 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x3c, 0x04, 0x35, 0x04, 0x41, + 0x04, 0x2e, 0x00, 0x1d, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x3c, 0x04, 0x35, 0x04, + 0x41, 0x04, 0x2e, 0x00, 0x20, 0x00, 0x3d, 0x04, + 0x30, 0x04, 0x37, 0x04, 0x30, 0x04, 0x34, 0x04, + 0x16, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x15, 0x32, 0x04, 0x20, + 0x00, 0x4d, 0x04, 0x42, 0x04, 0x2e, 0x00, 0x20, + 0x00, 0x3c, 0x04, 0x35, 0x04, 0x41, 0x04, 0x2e, + 0x00, 0x19, 0x32, 0x04, 0x20, 0x00, 0x41, 0x04, + 0x3b, 0x04, 0x35, 0x04, 0x34, 0x04, 0x2e, 0x00, + 0x20, 0x00, 0x3c, 0x04, 0x35, 0x04, 0x41, 0x04, + 0x2e, 0x00, 0x15, 0x32, 0x04, 0x20, 0x00, 0x3f, + 0x04, 0x40, 0x04, 0x2e, 0x00, 0x20, 0x00, 0x3c, + 0x04, 0x35, 0x04, 0x41, 0x04, 0x2e, 0x00, 0x13, + 0x2b, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x3c, 0x04, 0x35, 0x04, 0x41, 0x04, + 0x2e, 0x00, 0x13, 0x2d, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3c, 0x04, 0x35, + 0x04, 0x41, 0x04, 0x2e, 0x00, 0x18, 0x6d, 0x6f, + 0x6e, 0x74, 0x68, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x1d, 0x3d, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x4d, 0x04, 0x42, 0x04, 0x3e, 0x04, 0x39, + 0x04, 0x20, 0x00, 0x3d, 0x04, 0x35, 0x04, 0x34, + 0x04, 0x35, 0x04, 0x3b, 0x04, 0x35, 0x04, 0x27, + 0x3d, 0x04, 0x30, 0x04, 0x20, 0x00, 0x41, 0x04, + 0x3b, 0x04, 0x35, 0x04, 0x34, 0x04, 0x43, 0x04, + 0x4e, 0x04, 0x49, 0x04, 0x35, 0x04, 0x39, 0x04, + 0x20, 0x00, 0x3d, 0x04, 0x35, 0x04, 0x34, 0x04, + 0x35, 0x04, 0x3b, 0x04, 0x35, 0x04, 0x23, 0x3d, + 0x04, 0x30, 0x04, 0x20, 0x00, 0x3f, 0x04, 0x40, + 0x04, 0x3e, 0x04, 0x48, 0x04, 0x3b, 0x04, 0x3e, + 0x04, 0x39, 0x04, 0x20, 0x00, 0x3d, 0x04, 0x35, + 0x04, 0x34, 0x04, 0x35, 0x04, 0x3b, 0x04, 0x35, + 0x04, 0x21, 0x47, 0x04, 0x35, 0x04, 0x40, 0x04, + 0x35, 0x04, 0x37, 0x04, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3d, 0x04, + 0x35, 0x04, 0x34, 0x04, 0x35, 0x04, 0x3b, 0x04, + 0x4e, 0x04, 0x21, 0x47, 0x04, 0x35, 0x04, 0x40, + 0x04, 0x35, 0x04, 0x37, 0x04, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3d, + 0x04, 0x35, 0x04, 0x34, 0x04, 0x35, 0x04, 0x3b, + 0x04, 0x38, 0x04, 0x21, 0x47, 0x04, 0x35, 0x04, + 0x40, 0x04, 0x35, 0x04, 0x37, 0x04, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x3d, 0x04, 0x35, 0x04, 0x34, 0x04, 0x35, 0x04, + 0x3b, 0x04, 0x4c, 0x04, 0x21, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3d, 0x04, 0x35, + 0x04, 0x34, 0x04, 0x35, 0x04, 0x3b, 0x04, 0x4e, + 0x04, 0x20, 0x00, 0x3d, 0x04, 0x30, 0x04, 0x37, + 0x04, 0x30, 0x04, 0x34, 0x04, 0x21, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3d, 0x04, + 0x35, 0x04, 0x34, 0x04, 0x35, 0x04, 0x3b, 0x04, + 0x38, 0x04, 0x20, 0x00, 0x3d, 0x04, 0x30, 0x04, + 0x37, 0x04, 0x30, 0x04, 0x34, 0x04, 0x21, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3d, + 0x04, 0x35, 0x04, 0x34, 0x04, 0x35, 0x04, 0x3b, + 0x04, 0x4c, 0x04, 0x20, 0x00, 0x3d, 0x04, 0x30, + 0x04, 0x37, 0x04, 0x30, 0x04, 0x34, 0x04, 0x08, + 0x77, 0x65, 0x65, 0x6b, 0x19, 0x3d, 0x04, 0x30, + 0x04, 0x20, 0x00, 0x4d, 0x04, 0x42, 0x04, 0x3e, + 0x04, 0x39, 0x04, 0x20, 0x00, 0x3d, 0x04, 0x35, + 0x04, 0x34, 0x04, 0x2e, 0x00, 0x23, 0x3d, 0x04, + 0x30, 0x04, 0x20, 0x00, 0x41, 0x04, 0x3b, 0x04, + 0x35, 0x04, 0x34, 0x04, 0x43, 0x04, 0x4e, 0x04, + 0x49, 0x04, 0x35, 0x04, 0x39, 0x04, 0x20, 0x00, + 0x3d, 0x04, 0x35, 0x04, 0x34, 0x04, 0x2e, 0x00, + 0x1f, 0x3d, 0x04, 0x30, 0x04, 0x20, 0x00, 0x3f, + 0x04, 0x40, 0x04, 0x3e, 0x04, 0x48, 0x04, 0x3b, + 0x04, 0x3e, 0x04, 0x39, 0x04, 0x20, 0x00, 0x3d, + 0x04, 0x35, 0x04, 0x34, 0x04, 0x2e, 0x00, 0x1d, + 0x47, 0x04, 0x35, 0x04, 0x40, 0x04, 0x35, 0x04, + 0x37, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x3d, 0x04, 0x35, 0x04, + 0x34, 0x04, 0x2e, 0x00, 0x1d, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3d, 0x04, 0x35, + 0x04, 0x34, 0x04, 0x2e, 0x00, 0x20, 0x00, 0x3d, + 0x04, 0x30, 0x04, 0x37, 0x04, 0x30, 0x04, 0x34, + 0x04, 0x14, 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x17, 0x3d, 0x04, 0x30, + 0x04, 0x20, 0x00, 0x4d, 0x04, 0x42, 0x04, 0x2e, + 0x00, 0x20, 0x00, 0x3d, 0x04, 0x35, 0x04, 0x34, + 0x04, 0x2e, 0x00, 0x1b, 0x3d, 0x04, 0x30, 0x04, + 0x20, 0x00, 0x41, 0x04, 0x3b, 0x04, 0x35, 0x04, + 0x34, 0x04, 0x2e, 0x00, 0x20, 0x00, 0x3d, 0x04, + 0x35, 0x04, 0x34, 0x04, 0x2e, 0x00, 0x17, 0x3d, + 0x04, 0x30, 0x04, 0x20, 0x00, 0x3f, 0x04, 0x40, + 0x04, 0x2e, 0x00, 0x20, 0x00, 0x3d, 0x04, 0x35, + 0x04, 0x34, 0x04, 0x2e, 0x00, 0x13, 0x2b, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x3d, 0x04, 0x35, 0x04, 0x34, 0x04, 0x2e, 0x00, + 0x13, 0x2d, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x3d, 0x04, 0x35, 0x04, 0x34, + 0x04, 0x2e, 0x00, 0x16, 0x77, 0x65, 0x65, 0x6b, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0f, + 0x41, 0x04, 0x35, 0x04, 0x33, 0x04, 0x3e, 0x04, + 0x34, 0x04, 0x3d, 0x04, 0x4f, 0x04, 0x0d, 0x37, + 0x04, 0x30, 0x04, 0x32, 0x04, 0x42, 0x04, 0x40, + 0x04, 0x30, 0x04, 0x17, 0x3f, 0x04, 0x3e, 0x04, + 0x41, 0x04, 0x3b, 0x04, 0x35, 0x04, 0x37, 0x04, + 0x30, 0x04, 0x32, 0x04, 0x42, 0x04, 0x40, 0x04, + 0x30, 0x04, 0x13, 0x3f, 0x04, 0x3e, 0x04, 0x37, + 0x04, 0x30, 0x04, 0x32, 0x04, 0x47, 0x04, 0x35, + 0x04, 0x40, 0x04, 0x30, 0x04, 0x04, 0x2d, 0x32, + 0x0b, 0x32, 0x04, 0x47, 0x04, 0x35, 0x04, 0x40, + 0x04, 0x30, 0x04, 0x1d, 0x47, 0x04, 0x35, 0x04, + 0x40, 0x04, 0x35, 0x04, 0x37, 0x04, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x34, 0x04, 0x35, 0x04, 0x3d, 0x04, 0x4c, 0x04, + 0x1b, 0x47, 0x04, 0x35, 0x04, 0x40, 0x04, 0x35, + 0x04, 0x37, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x34, 0x04, 0x3d, + 0x04, 0x4f, 0x04, 0x1d, 0x47, 0x04, 0x35, 0x04, + 0x40, 0x04, 0x35, 0x04, 0x37, 0x04, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x34, 0x04, 0x3d, 0x04, 0x35, 0x04, 0x39, 0x04, + 0x1d, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x34, 0x04, 0x35, 0x04, 0x3d, 0x04, 0x4c, + 0x04, 0x20, 0x00, 0x3d, 0x04, 0x30, 0x04, 0x37, + 0x04, 0x30, 0x04, 0x34, 0x04, 0x1b, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x34, 0x04, + 0x3d, 0x04, 0x4f, 0x04, 0x20, 0x00, 0x3d, 0x04, + 0x30, 0x04, 0x37, 0x04, 0x30, 0x04, 0x34, 0x04, + 0x1d, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x34, 0x04, 0x3d, 0x04, 0x35, 0x04, 0x39, + 0x04, 0x20, 0x00, 0x3d, 0x04, 0x30, 0x04, 0x37, + 0x04, 0x30, 0x04, 0x34, 0x04, 0x06, 0x64, 0x61, + 0x79, 0x1b, 0x47, 0x04, 0x35, 0x04, 0x40, 0x04, + 0x35, 0x04, 0x37, 0x04, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x34, 0x04, + 0x3d, 0x04, 0x2e, 0x00, 0x1b, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x34, 0x04, 0x3d, + 0x04, 0x2e, 0x00, 0x20, 0x00, 0x3d, 0x04, 0x30, + 0x04, 0x37, 0x04, 0x30, 0x04, 0x34, 0x04, 0x12, + 0x64, 0x61, 0x79, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x11, 0x2b, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x34, 0x04, 0x3d, 0x04, + 0x2e, 0x00, 0x11, 0x2d, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x34, 0x04, 0x3d, + 0x04, 0x2e, 0x00, 0x14, 0x64, 0x61, 0x79, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x15, 0x32, + 0x04, 0x20, 0x00, 0x4d, 0x04, 0x42, 0x04, 0x3e, + 0x04, 0x42, 0x04, 0x20, 0x00, 0x47, 0x04, 0x30, + 0x04, 0x41, 0x04, 0x1b, 0x47, 0x04, 0x35, 0x04, + 0x40, 0x04, 0x35, 0x04, 0x37, 0x04, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x47, 0x04, 0x30, 0x04, 0x41, 0x04, 0x1d, 0x47, + 0x04, 0x35, 0x04, 0x40, 0x04, 0x35, 0x04, 0x37, + 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x47, 0x04, 0x30, 0x04, 0x41, + 0x04, 0x30, 0x04, 0x1f, 0x47, 0x04, 0x35, 0x04, + 0x40, 0x04, 0x35, 0x04, 0x37, 0x04, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x47, 0x04, 0x30, 0x04, 0x41, 0x04, 0x3e, 0x04, + 0x32, 0x04, 0x1b, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x47, 0x04, 0x30, 0x04, 0x41, + 0x04, 0x20, 0x00, 0x3d, 0x04, 0x30, 0x04, 0x37, + 0x04, 0x30, 0x04, 0x34, 0x04, 0x1d, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x47, 0x04, + 0x30, 0x04, 0x41, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x3d, 0x04, 0x30, 0x04, 0x37, 0x04, 0x30, 0x04, + 0x34, 0x04, 0x1f, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x47, 0x04, 0x30, 0x04, 0x41, + 0x04, 0x3e, 0x04, 0x32, 0x04, 0x20, 0x00, 0x3d, + 0x04, 0x30, 0x04, 0x37, 0x04, 0x30, 0x04, 0x34, + 0x04, 0x08, 0x68, 0x6f, 0x75, 0x72, 0x17, 0x47, + 0x04, 0x35, 0x04, 0x40, 0x04, 0x35, 0x04, 0x37, + 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x47, 0x04, 0x17, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x47, 0x04, + 0x20, 0x00, 0x3d, 0x04, 0x30, 0x04, 0x37, 0x04, + 0x30, 0x04, 0x34, 0x04, 0x14, 0x68, 0x6f, 0x75, + 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0d, + 0x2b, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x47, 0x04, 0x0d, 0x2d, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x47, + 0x04, 0x16, 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x19, 0x32, 0x04, + 0x20, 0x00, 0x4d, 0x04, 0x42, 0x04, 0x43, 0x04, + 0x20, 0x00, 0x3c, 0x04, 0x38, 0x04, 0x3d, 0x04, + 0x43, 0x04, 0x42, 0x04, 0x43, 0x04, 0x21, 0x47, + 0x04, 0x35, 0x04, 0x40, 0x04, 0x35, 0x04, 0x37, + 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x3c, 0x04, 0x38, 0x04, 0x3d, + 0x04, 0x43, 0x04, 0x42, 0x04, 0x43, 0x04, 0x21, + 0x47, 0x04, 0x35, 0x04, 0x40, 0x04, 0x35, 0x04, + 0x37, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x3c, 0x04, 0x38, 0x04, + 0x3d, 0x04, 0x43, 0x04, 0x42, 0x04, 0x4b, 0x04, + 0x1f, 0x47, 0x04, 0x35, 0x04, 0x40, 0x04, 0x35, + 0x04, 0x37, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3c, 0x04, 0x38, + 0x04, 0x3d, 0x04, 0x43, 0x04, 0x42, 0x04, 0x21, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x3c, 0x04, 0x38, 0x04, 0x3d, 0x04, 0x43, 0x04, + 0x42, 0x04, 0x43, 0x04, 0x20, 0x00, 0x3d, 0x04, + 0x30, 0x04, 0x37, 0x04, 0x30, 0x04, 0x34, 0x04, + 0x21, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x3c, 0x04, 0x38, 0x04, 0x3d, 0x04, 0x43, + 0x04, 0x42, 0x04, 0x4b, 0x04, 0x20, 0x00, 0x3d, + 0x04, 0x30, 0x04, 0x37, 0x04, 0x30, 0x04, 0x34, + 0x04, 0x1f, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x3c, 0x04, 0x38, 0x04, 0x3d, 0x04, + 0x43, 0x04, 0x42, 0x04, 0x20, 0x00, 0x3d, 0x04, + 0x30, 0x04, 0x37, 0x04, 0x30, 0x04, 0x34, 0x04, + 0x0c, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x1d, + 0x47, 0x04, 0x35, 0x04, 0x40, 0x04, 0x35, 0x04, + 0x37, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x3c, 0x04, 0x38, 0x04, + 0x3d, 0x04, 0x2e, 0x00, 0x1d, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3c, 0x04, 0x38, + 0x04, 0x3d, 0x04, 0x2e, 0x00, 0x20, 0x00, 0x3d, + 0x04, 0x30, 0x04, 0x37, 0x04, 0x30, 0x04, 0x34, + 0x04, 0x18, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x11, 0x2b, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x3c, 0x04, 0x38, 0x04, 0x3d, 0x04, 0x11, + 0x2d, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x3c, 0x04, 0x38, 0x04, 0x3d, 0x04, + 0x1a, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0d, 0x41, + 0x04, 0x35, 0x04, 0x39, 0x04, 0x47, 0x04, 0x30, + 0x04, 0x41, 0x04, 0x23, 0x47, 0x04, 0x35, 0x04, + 0x40, 0x04, 0x35, 0x04, 0x37, 0x04, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x41, 0x04, 0x35, 0x04, 0x3a, 0x04, 0x43, 0x04, + 0x3d, 0x04, 0x34, 0x04, 0x43, 0x04, 0x23, 0x47, + 0x04, 0x35, 0x04, 0x40, 0x04, 0x35, 0x04, 0x37, + 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x41, 0x04, 0x35, 0x04, 0x3a, + 0x04, 0x43, 0x04, 0x3d, 0x04, 0x34, 0x04, 0x4b, + 0x04, 0x21, 0x47, 0x04, 0x35, 0x04, 0x40, 0x04, + 0x35, 0x04, 0x37, 0x04, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x41, 0x04, + 0x35, 0x04, 0x3a, 0x04, 0x43, 0x04, 0x3d, 0x04, + 0x34, 0x04, 0x23, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x41, 0x04, 0x35, 0x04, 0x3a, + 0x04, 0x43, 0x04, 0x3d, 0x04, 0x34, 0x04, 0x43, + 0x04, 0x20, 0x00, 0x3d, 0x04, 0x30, 0x04, 0x37, + 0x04, 0x30, 0x04, 0x34, 0x04, 0x23, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x41, 0x04, + 0x35, 0x04, 0x3a, 0x04, 0x43, 0x04, 0x3d, 0x04, + 0x34, 0x04, 0x4b, 0x04, 0x20, 0x00, 0x3d, 0x04, + 0x30, 0x04, 0x37, 0x04, 0x30, 0x04, 0x34, 0x04, + 0x21, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x41, 0x04, 0x35, 0x04, 0x3a, 0x04, 0x43, + 0x04, 0x3d, 0x04, 0x34, 0x04, 0x20, 0x00, 0x3d, + 0x04, 0x30, 0x04, 0x37, 0x04, 0x30, 0x04, 0x34, + 0x04, 0x0c, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, + 0x1d, 0x47, 0x04, 0x35, 0x04, 0x40, 0x04, 0x35, + 0x04, 0x37, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0xa0, 0x00, 0x41, 0x04, 0x35, + 0x04, 0x3a, 0x04, 0x2e, 0x00, 0x1d, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x41, 0x04, + 0x35, 0x04, 0x3a, 0x04, 0x2e, 0x00, 0x20, 0x00, + 0x3d, 0x04, 0x30, 0x04, 0x37, 0x04, 0x30, 0x04, + 0x34, 0x04, 0x18, 0x73, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0d, + 0x2b, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x41, 0x04, 0x0d, 0x2d, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x41, + 0x04, 0x1a, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x08, + 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, 0x75, 0x08, + 0x64, 0x61, 0x74, 0x61, 0x70, 0x6e, 0x6f, 0x64, + 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, + 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2d, 0x72, + 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x2d, + 0x74, 0x69, 0x6d, 0x65, 0x2d, 0x66, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x2f, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, + 0x72, 0x75, 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, + 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, 0x07, 0x00, + 0x00, 0xaa, 0x17, 0x01, 0xa0, 0x01, 0x00, 0x00, + 0x00, 0x06, 0xc8, 0x04, 0xd0, 0x00, 0x00, 0x00, + 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, 0x00, + 0x00, 0x00, 0xaa, 0x6a, 0x95, 0x0b, 0x00, 0x00, + 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, 0x00, + 0x00, 0x00, 0x43, 0xd0, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd3, 0x00, 0x00, 0x00, 0x4d, 0xd4, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xd5, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xd6, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe1, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xe2, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xe3, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0xe2, 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xe5, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xe7, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe9, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe9, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xec, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xed, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xee, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xef, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xf1, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf1, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xf3, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xf4, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0xf3, 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xf5, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf6, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xf7, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xf9, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xfa, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0xfb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xfd, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xfe, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0xfd, 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xff, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x00, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x01, + 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x03, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x03, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x03, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x04, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x04, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x04, 0x01, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0x05, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x06, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x07, + 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x09, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x09, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x09, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x0a, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x0a, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x0a, 0x01, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0x0b, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x0c, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x0d, + 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x0f, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x10, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x11, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x13, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x14, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x13, 0x01, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0x15, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x16, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x17, + 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0x18, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x19, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x19, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x19, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x1a, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x1a, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x1a, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x1a, 0x01, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0x1b, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x1c, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x1d, + 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x1f, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x1f, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x1f, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0x1f, 0x01, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x20, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x20, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x20, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x20, 0x01, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0x21, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x22, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x23, + 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0x24, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x25, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x26, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x27, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x28, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x29, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x2a, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x29, 0x01, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0x2b, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x2c, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x2d, + 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0x2e, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x2f, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x2f, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x2f, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x30, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x30, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x30, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x30, 0x01, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0x31, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x32, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x33, + 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0x34, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x35, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x35, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x35, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0x35, 0x01, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x36, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x36, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x36, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x36, 0x01, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0x37, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x38, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x39, + 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0x3a, 0x01, 0x00, 0x00, 0x4d, 0x02, 0x00, + 0x00, 0x80, 0x04, 0x3b, 0x01, 0x00, 0x00, 0x4d, + 0x3c, 0x01, 0x00, 0x00, 0x04, 0x3d, 0x01, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x3e, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x3f, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x40, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x3f, 0x01, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x41, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x42, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x43, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0x42, 0x01, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x4d, 0xe4, 0x00, + 0x00, 0x00, 0x4d, 0x44, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x38, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0x39, 0x01, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0x3a, 0x01, 0x00, + 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, 0x3b, + 0x01, 0x00, 0x00, 0x4d, 0x3c, 0x01, 0x00, 0x00, + 0x04, 0x3d, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x45, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x45, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x45, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0x45, 0x01, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x46, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0x47, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x38, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x39, + 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0x3a, 0x01, 0x00, 0x00, 0x4d, 0x02, 0x00, + 0x00, 0x80, 0x04, 0x3b, 0x01, 0x00, 0x00, 0x4d, + 0x3c, 0x01, 0x00, 0x00, 0x04, 0x3d, 0x01, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x48, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x48, 0x01, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x49, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x49, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0x49, 0x01, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x4d, 0xe4, 0x00, + 0x00, 0x00, 0x4d, 0x4a, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x0b, 0x04, 0x4c, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x4e, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x51, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x50, 0x01, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0x52, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4b, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x54, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x54, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x4d, 0xe4, 0x00, + 0x00, 0x00, 0x4d, 0x55, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x0b, 0x04, 0x56, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x56, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0x56, 0x01, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x57, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0x58, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x59, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x5b, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x5c, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x5b, 0x01, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x5d, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x5f, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x4d, 0xe4, 0x00, + 0x00, 0x00, 0x4d, 0x60, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x61, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x61, 0x01, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x62, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x62, 0x01, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x4d, + 0xe4, 0x00, 0x00, 0x00, 0x4d, 0x63, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x65, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0x66, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x67, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, + 0x68, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x6a, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x69, 0x01, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x6b, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x6c, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x6d, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0x6c, 0x01, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x4d, 0xe4, 0x00, + 0x00, 0x00, 0x4d, 0x6e, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x6f, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x6f, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x6f, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x6f, 0x01, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x70, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x70, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x70, 0x01, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x4d, + 0xe4, 0x00, 0x00, 0x00, 0x4d, 0x71, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x72, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x72, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x72, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0x72, 0x01, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x73, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x73, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x73, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x73, 0x01, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0x74, + 0x01, 0x00, 0x00, 0x04, 0x75, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x76, 0x01, 0x00, 0x00, + 0x4d, 0x77, 0x01, 0x00, 0x00, 0x24, 0x01, 0x00, + 0xc8, 0xc4, 0x28, 0xf0, 0x05, 0x01, 0x91, 0x03, + 0x76, 0x53, 0x35, 0x08, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x1c, 0x1c, 0x1c, 0x12, 0x1c, 0x1c, + 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_si_size = 3628; + +const uint8_t intl_relative_si[3628] = { + 0x01, 0x56, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x04, 0x73, 0x69, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x0f, 0xb8, 0x0d, 0xd9, + 0x0d, 0xb8, 0x0d, 0x20, 0x00, 0xc0, 0x0d, 0xc3, + 0x0d, 0xbb, 0x0d, 0x0f, 0x8a, 0x0d, 0xc5, 0x0d, + 0x9f, 0x0d, 0x20, 0x00, 0xc0, 0x0d, 0xc3, 0x0d, + 0xbb, 0x0d, 0x15, 0xb4, 0x0d, 0xc3, 0x0d, 0xd4, + 0x0d, 0x9c, 0x0d, 0xd2, 0x0d, 0xba, 0x0d, 0x20, + 0x00, 0xc0, 0x0d, 0xc3, 0x0d, 0xbb, 0x0d, 0x04, + 0x2d, 0x31, 0x17, 0xc0, 0x0d, 0xc3, 0x0d, 0xbb, + 0x0d, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x9a, 0x0d, 0xd2, 0x0d, 0xb1, 0x0d, 0xca, + 0x0d, 0x06, 0x6f, 0x6e, 0x65, 0x0a, 0x6f, 0x74, + 0x68, 0x65, 0x72, 0x0c, 0x66, 0x75, 0x74, 0x75, + 0x72, 0x65, 0x1b, 0xc0, 0x0d, 0xc3, 0x0d, 0xbb, + 0x0d, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x9a, 0x0d, 0xa7, 0x0d, 0x20, 0x00, 0xb4, + 0x0d, 0xd9, 0x0d, 0xbb, 0x0d, 0x08, 0x70, 0x61, + 0x73, 0x74, 0x08, 0x79, 0x65, 0x61, 0x72, 0x14, + 0x79, 0x65, 0x61, 0x72, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x16, 0x79, 0x65, 0x61, 0x72, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x17, 0xb8, + 0x0d, 0xd9, 0x0d, 0xb8, 0x0d, 0x20, 0x00, 0x9a, + 0x0d, 0xcf, 0x0d, 0xbb, 0x0d, 0xca, 0x0d, 0xad, + 0x0d, 0xd4, 0x0d, 0xc0, 0x0d, 0x17, 0x8a, 0x0d, + 0xc5, 0x0d, 0x9f, 0x0d, 0x20, 0x00, 0x9a, 0x0d, + 0xcf, 0x0d, 0xbb, 0x0d, 0xca, 0x0d, 0xad, 0x0d, + 0xd4, 0x0d, 0xc0, 0x0d, 0x1d, 0xb4, 0x0d, 0xc3, + 0x0d, 0xd4, 0x0d, 0x9c, 0x0d, 0xd2, 0x0d, 0xba, + 0x0d, 0x20, 0x00, 0x9a, 0x0d, 0xcf, 0x0d, 0xbb, + 0x0d, 0xca, 0x0d, 0xad, 0x0d, 0xd4, 0x0d, 0xc0, + 0x0d, 0x1d, 0x9a, 0x0d, 0xcf, 0x0d, 0xbb, 0x0d, + 0xca, 0x0d, 0xad, 0x0d, 0xd4, 0x0d, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x9a, 0x0d, + 0xd2, 0x0d, 0xb1, 0x0d, 0xca, 0x0d, 0x21, 0x9a, + 0x0d, 0xcf, 0x0d, 0xbb, 0x0d, 0xca, 0x0d, 0xad, + 0x0d, 0xd4, 0x0d, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x9a, 0x0d, 0xa7, 0x0d, 0x20, + 0x00, 0xb4, 0x0d, 0xd9, 0x0d, 0xbb, 0x0d, 0x0e, + 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x13, + 0xb8, 0x0d, 0xd9, 0x0d, 0xb8, 0x0d, 0x20, 0x00, + 0x9a, 0x0d, 0xcf, 0x0d, 0xbb, 0x0d, 0xca, 0x0d, + 0x2e, 0x00, 0x13, 0x8a, 0x0d, 0xc5, 0x0d, 0x9f, + 0x0d, 0x20, 0x00, 0x9a, 0x0d, 0xcf, 0x0d, 0xbb, + 0x0d, 0xca, 0x0d, 0x2e, 0x00, 0x19, 0xb4, 0x0d, + 0xc3, 0x0d, 0xd4, 0x0d, 0x9c, 0x0d, 0xd2, 0x0d, + 0xba, 0x0d, 0x20, 0x00, 0x9a, 0x0d, 0xcf, 0x0d, + 0xbb, 0x0d, 0xca, 0x0d, 0x2e, 0x00, 0x1b, 0x9a, + 0x0d, 0xcf, 0x0d, 0xbb, 0x0d, 0xca, 0x0d, 0x2e, + 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x9a, 0x0d, 0xd2, 0x0d, 0xb1, 0x0d, 0xca, + 0x0d, 0x1f, 0x9a, 0x0d, 0xcf, 0x0d, 0xbb, 0x0d, + 0xca, 0x0d, 0x2e, 0x00, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x9a, 0x0d, 0xa7, 0x0d, + 0x20, 0x00, 0xb4, 0x0d, 0xd9, 0x0d, 0xbb, 0x0d, + 0x1a, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1c, 0x71, + 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x11, 0xb8, 0x0d, + 0xd9, 0x0d, 0xb8, 0x0d, 0x20, 0x00, 0xb8, 0x0d, + 0xcf, 0x0d, 0xc3, 0x0d, 0xba, 0x0d, 0x11, 0x8a, + 0x0d, 0xc5, 0x0d, 0x9f, 0x0d, 0x20, 0x00, 0xb8, + 0x0d, 0xcf, 0x0d, 0xc3, 0x0d, 0xba, 0x0d, 0x17, + 0xb4, 0x0d, 0xc3, 0x0d, 0xd4, 0x0d, 0x9c, 0x0d, + 0xd2, 0x0d, 0xba, 0x0d, 0x20, 0x00, 0xb8, 0x0d, + 0xcf, 0x0d, 0xc3, 0x0d, 0xba, 0x0d, 0x17, 0xb8, + 0x0d, 0xcf, 0x0d, 0xc3, 0x0d, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x9a, 0x0d, 0xd2, + 0x0d, 0xb1, 0x0d, 0xca, 0x0d, 0x1b, 0xb8, 0x0d, + 0xcf, 0x0d, 0xc3, 0x0d, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x9a, 0x0d, 0xa7, 0x0d, + 0x20, 0x00, 0xb4, 0x0d, 0xd9, 0x0d, 0xbb, 0x0d, + 0x0a, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x11, 0xb8, + 0x0d, 0xd9, 0x0d, 0xb8, 0x0d, 0x20, 0x00, 0xb8, + 0x0d, 0xcf, 0x0d, 0xc3, 0x0d, 0x2e, 0x00, 0x11, + 0x8a, 0x0d, 0xc5, 0x0d, 0x9f, 0x0d, 0x20, 0x00, + 0xb8, 0x0d, 0xcf, 0x0d, 0xc3, 0x0d, 0x2e, 0x00, + 0x17, 0xb4, 0x0d, 0xc3, 0x0d, 0xd4, 0x0d, 0x9c, + 0x0d, 0xd2, 0x0d, 0xba, 0x0d, 0x20, 0x00, 0xb8, + 0x0d, 0xcf, 0x0d, 0xc3, 0x0d, 0x2e, 0x00, 0x16, + 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x18, 0x6d, 0x6f, 0x6e, 0x74, + 0x68, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x11, 0xb8, 0x0d, 0xd9, 0x0d, 0xb8, 0x0d, 0x20, + 0x00, 0xc3, 0x0d, 0xad, 0x0d, 0xd2, 0x0d, 0xba, + 0x0d, 0x11, 0x8a, 0x0d, 0xc5, 0x0d, 0x9f, 0x0d, + 0x20, 0x00, 0xc3, 0x0d, 0xad, 0x0d, 0xd2, 0x0d, + 0xba, 0x0d, 0x17, 0xb4, 0x0d, 0xc3, 0x0d, 0xd4, + 0x0d, 0x9c, 0x0d, 0xd2, 0x0d, 0xba, 0x0d, 0x20, + 0x00, 0xc3, 0x0d, 0xad, 0x0d, 0xd2, 0x0d, 0xba, + 0x0d, 0x17, 0xc3, 0x0d, 0xad, 0x0d, 0xd2, 0x0d, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x9a, 0x0d, 0xd2, 0x0d, 0xb1, 0x0d, 0xca, 0x0d, + 0x1b, 0xc3, 0x0d, 0xad, 0x0d, 0xd2, 0x0d, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x9a, + 0x0d, 0xa7, 0x0d, 0x20, 0x00, 0xb4, 0x0d, 0xd9, + 0x0d, 0xbb, 0x0d, 0x08, 0x77, 0x65, 0x65, 0x6b, + 0x11, 0xb8, 0x0d, 0xd9, 0x0d, 0xb8, 0x0d, 0x20, + 0x00, 0xc3, 0x0d, 0xad, 0x0d, 0xd2, 0x0d, 0x2e, + 0x00, 0x11, 0x8a, 0x0d, 0xc5, 0x0d, 0x9f, 0x0d, + 0x20, 0x00, 0xc3, 0x0d, 0xad, 0x0d, 0xd2, 0x0d, + 0x2e, 0x00, 0x17, 0xb4, 0x0d, 0xc3, 0x0d, 0xd4, + 0x0d, 0x9c, 0x0d, 0xd2, 0x0d, 0xba, 0x0d, 0x20, + 0x00, 0xc3, 0x0d, 0xad, 0x0d, 0xd2, 0x0d, 0x2e, + 0x00, 0x14, 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x16, 0x77, 0x65, 0x65, + 0x6b, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x05, 0x85, 0x0d, 0xaf, 0x0d, 0x07, 0xc4, 0x0d, + 0xd9, 0x0d, 0xa7, 0x0d, 0x0f, 0x85, 0x0d, 0xb1, + 0x0d, 0xd2, 0x0d, 0xaf, 0x0d, 0xca, 0x0d, 0xaf, + 0x0d, 0xcf, 0x0d, 0x0d, 0xb4, 0x0d, 0xd9, 0x0d, + 0xbb, 0x0d, 0xda, 0x0d, 0xaf, 0x0d, 0xcf, 0x0d, + 0x04, 0x2d, 0x32, 0x07, 0x8a, 0x0d, 0xba, 0x0d, + 0xda, 0x0d, 0x13, 0xaf, 0x0d, 0xd2, 0x0d, 0xb1, + 0x0d, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0xb1, 0x0d, 0xca, 0x0d, 0x1b, 0xaf, 0x0d, + 0xd2, 0x0d, 0xb1, 0x0d, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x9a, 0x0d, 0xa7, 0x0d, + 0x20, 0x00, 0xb4, 0x0d, 0xd9, 0x0d, 0xbb, 0x0d, + 0x06, 0x64, 0x61, 0x79, 0x12, 0x64, 0x61, 0x79, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x14, 0x64, + 0x61, 0x79, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x0f, 0xb8, 0x0d, 0xd9, 0x0d, 0xb8, 0x0d, + 0x20, 0x00, 0xb4, 0x0d, 0xd0, 0x0d, 0xba, 0x0d, + 0x17, 0xb4, 0x0d, 0xd0, 0x0d, 0xba, 0x0d, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x9a, + 0x0d, 0xd2, 0x0d, 0xb1, 0x0d, 0xca, 0x0d, 0x1b, + 0xb4, 0x0d, 0xd0, 0x0d, 0xba, 0x0d, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x9a, 0x0d, + 0xa7, 0x0d, 0x20, 0x00, 0xb4, 0x0d, 0xd9, 0x0d, + 0xbb, 0x0d, 0x08, 0x68, 0x6f, 0x75, 0x72, 0x14, + 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x16, 0x68, 0x6f, 0x75, 0x72, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x1b, 0xb8, + 0x0d, 0xd9, 0x0d, 0xb8, 0x0d, 0x20, 0x00, 0xb8, + 0x0d, 0xd2, 0x0d, 0xb1, 0x0d, 0xd2, 0x0d, 0xad, + 0x0d, 0xca, 0x0d, 0xad, 0x0d, 0xd4, 0x0d, 0xc0, + 0x0d, 0x21, 0xb8, 0x0d, 0xd2, 0x0d, 0xb1, 0x0d, + 0xd2, 0x0d, 0xad, 0x0d, 0xca, 0x0d, 0xad, 0x0d, + 0xd4, 0x0d, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x9a, 0x0d, 0xd2, 0x0d, 0xb1, 0x0d, + 0xca, 0x0d, 0x25, 0xb8, 0x0d, 0xd2, 0x0d, 0xb1, + 0x0d, 0xd2, 0x0d, 0xad, 0x0d, 0xca, 0x0d, 0xad, + 0x0d, 0xd4, 0x0d, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x9a, 0x0d, 0xa7, 0x0d, 0x20, + 0x00, 0xb4, 0x0d, 0xd9, 0x0d, 0xbb, 0x0d, 0x0c, + 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x18, 0x6d, + 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x1a, 0x6d, 0x69, 0x6e, 0x75, + 0x74, 0x65, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x09, 0xaf, 0x0d, 0xd0, 0x0d, 0xb1, 0x0d, + 0xca, 0x0d, 0x1b, 0xad, 0x0d, 0xad, 0x0d, 0xca, + 0x0d, 0xb4, 0x0d, 0xbb, 0x0d, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x9a, 0x0d, 0xd2, + 0x0d, 0xb1, 0x0d, 0xca, 0x0d, 0x1f, 0xad, 0x0d, + 0xad, 0x0d, 0xca, 0x0d, 0xb4, 0x0d, 0xbb, 0x0d, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x9a, 0x0d, 0xa7, 0x0d, 0x20, 0x00, 0xb4, 0x0d, + 0xd9, 0x0d, 0xbb, 0x0d, 0x0c, 0x73, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x18, 0x73, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x1a, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x08, 0x6c, + 0x61, 0x74, 0x6e, 0x04, 0x6e, 0x75, 0x08, 0x64, + 0x61, 0x74, 0x61, 0x70, 0x6e, 0x6f, 0x64, 0x65, + 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, + 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2d, 0x72, 0x65, + 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x2d, 0x74, + 0x69, 0x6d, 0x65, 0x2d, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x73, + 0x69, 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, + 0x9e, 0x01, 0x00, 0x01, 0x00, 0x07, 0x00, 0x00, + 0xf2, 0x0e, 0x01, 0xa0, 0x01, 0x00, 0x00, 0x00, + 0x06, 0xc8, 0x04, 0xd0, 0x00, 0x00, 0x00, 0x39, + 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, 0x00, 0x00, + 0x00, 0xaa, 0x6a, 0x5d, 0x07, 0x00, 0x00, 0x39, + 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, 0x00, 0x00, + 0x00, 0x43, 0xd0, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd3, 0x00, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0xd5, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd5, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd5, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xd9, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe2, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xe3, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe6, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe8, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xe9, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xec, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xec, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xed, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe8, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xe9, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xec, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xec, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xee, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xef, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xf0, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xf1, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xf2, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf3, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf3, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xf4, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xf5, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xf6, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xf2, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf3, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf3, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xf8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xf5, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xf6, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xf2, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf3, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf3, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xf9, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xfa, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xfb, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xfd, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfe, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xfe, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xff, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x00, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x01, 0x01, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0x02, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xfd, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfe, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xfe, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x03, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x00, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x01, 0x01, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0x02, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xfd, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfe, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xfe, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x04, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x05, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x06, 0x01, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0x07, 0x01, 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, + 0x80, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, 0x09, + 0x01, 0x00, 0x00, 0x04, 0x0a, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0b, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x0d, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x0c, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0x0e, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x0b, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0c, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0c, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x0f, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x10, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x11, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x13, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x12, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0x14, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x11, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x12, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x12, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x15, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x17, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x18, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x18, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x19, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x18, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x18, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0x1a, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x17, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x18, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x18, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x1b, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x1c, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x1d, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x1f, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x1e, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0x20, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x1d, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x1e, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x1e, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x21, 0x01, + 0x00, 0x00, 0x04, 0x22, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x23, 0x01, 0x00, 0x00, 0x4d, + 0x24, 0x01, 0x00, 0x00, 0x24, 0x01, 0x00, 0xc8, + 0xc4, 0x28, 0xca, 0x04, 0x01, 0xa5, 0x02, 0x76, + 0x53, 0x35, 0x08, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x1c, + 0x12, 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_sk_size = 5517; + +const uint8_t intl_relative_sk[5517] = { + 0x01, 0x8a, 0x01, 0x1e, 0x5f, 0x5f, 0x61, 0x64, + 0x64, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, + 0x61, 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, + 0x24, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x04, 0x73, 0x6b, 0x0c, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x12, 0x74, 0x65, + 0x6e, 0x74, 0x6f, 0x20, 0x72, 0x6f, 0x6b, 0x14, + 0x62, 0x75, 0x64, 0xfa, 0x63, 0x69, 0x20, 0x72, + 0x6f, 0x6b, 0x14, 0x6d, 0x69, 0x6e, 0x75, 0x6c, + 0xfd, 0x20, 0x72, 0x6f, 0x6b, 0x04, 0x2d, 0x31, + 0x12, 0x6f, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x72, + 0x6f, 0x6b, 0x06, 0x6f, 0x6e, 0x65, 0x14, 0x6f, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x72, 0x6f, 0x6b, + 0x79, 0x06, 0x66, 0x65, 0x77, 0x14, 0x6f, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x72, 0x6f, 0x6b, 0x61, + 0x08, 0x6d, 0x61, 0x6e, 0x79, 0x16, 0x6f, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x72, 0x6f, 0x6b, 0x6f, + 0x76, 0x0a, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x0c, + 0x66, 0x75, 0x74, 0x75, 0x72, 0x65, 0x1c, 0x70, + 0x72, 0x65, 0x64, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x72, 0x6f, 0x6b, 0x6f, 0x6d, 0x1c, 0x70, 0x72, + 0x65, 0x64, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x72, + 0x6f, 0x6b, 0x6d, 0x69, 0x1a, 0x70, 0x72, 0x65, + 0x64, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x72, 0x6f, + 0x6b, 0x61, 0x08, 0x70, 0x61, 0x73, 0x74, 0x08, + 0x79, 0x65, 0x61, 0x72, 0x10, 0x6f, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x72, 0x2e, 0x16, 0x70, 0x72, + 0x65, 0x64, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x72, + 0x2e, 0x14, 0x79, 0x65, 0x61, 0x72, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x16, 0x79, 0x65, 0x61, + 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x1d, 0x74, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x20, 0x00, 0x61, 0x01, 0x74, + 0x00, 0x76, 0x00, 0x72, 0x00, 0x65, 0x01, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x1f, 0x62, 0x00, + 0x75, 0x00, 0x64, 0x00, 0xfa, 0x00, 0x63, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x61, 0x01, 0x74, 0x00, + 0x76, 0x00, 0x72, 0x00, 0x65, 0x01, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x1f, 0x6d, 0x00, 0x69, + 0x00, 0x6e, 0x00, 0x75, 0x00, 0x6c, 0x00, 0xfd, + 0x00, 0x20, 0x00, 0x61, 0x01, 0x74, 0x00, 0x76, + 0x00, 0x72, 0x00, 0x65, 0x01, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x1d, 0x6f, 0x00, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x61, 0x01, 0x74, 0x00, 0x76, 0x00, 0x72, 0x00, + 0x65, 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x1f, 0x6f, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x61, 0x01, 0x74, + 0x00, 0x76, 0x00, 0x72, 0x00, 0x65, 0x01, 0x72, + 0x00, 0x6f, 0x00, 0x6b, 0x00, 0x79, 0x00, 0x1f, + 0x6f, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x61, 0x01, 0x74, 0x00, + 0x76, 0x00, 0x72, 0x00, 0x65, 0x01, 0x72, 0x00, + 0x6f, 0x00, 0x6b, 0x00, 0x61, 0x00, 0x21, 0x6f, + 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x61, 0x01, 0x74, 0x00, 0x76, + 0x00, 0x72, 0x00, 0x65, 0x01, 0x72, 0x00, 0x6f, + 0x00, 0x6b, 0x00, 0x6f, 0x00, 0x76, 0x00, 0x27, + 0x70, 0x00, 0x72, 0x00, 0x65, 0x00, 0x64, 0x00, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x61, 0x01, 0x74, 0x00, 0x76, 0x00, + 0x72, 0x00, 0x65, 0x01, 0x72, 0x00, 0x6f, 0x00, + 0x6b, 0x00, 0x6f, 0x00, 0x6d, 0x00, 0x27, 0x70, + 0x00, 0x72, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x61, 0x01, 0x74, 0x00, 0x76, 0x00, 0x72, + 0x00, 0x65, 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, + 0x00, 0x6d, 0x00, 0x69, 0x00, 0x25, 0x70, 0x00, + 0x72, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x61, 0x01, 0x74, 0x00, 0x76, 0x00, 0x72, 0x00, + 0x65, 0x01, 0x72, 0x00, 0x6f, 0x00, 0x6b, 0x00, + 0x61, 0x00, 0x0e, 0x71, 0x75, 0x61, 0x72, 0x74, + 0x65, 0x72, 0x1b, 0x74, 0x00, 0x65, 0x00, 0x6e, + 0x00, 0x74, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x61, + 0x01, 0x74, 0x00, 0x76, 0x00, 0x72, 0x00, 0x65, + 0x01, 0x72, 0x00, 0x2e, 0x00, 0x1d, 0x62, 0x00, + 0x75, 0x00, 0x64, 0x00, 0xfa, 0x00, 0x63, 0x00, + 0x69, 0x00, 0x20, 0x00, 0x61, 0x01, 0x74, 0x00, + 0x76, 0x00, 0x72, 0x00, 0x65, 0x01, 0x72, 0x00, + 0x2e, 0x00, 0x1d, 0x6d, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x75, 0x00, 0x6c, 0x00, 0xfd, 0x00, 0x20, + 0x00, 0x61, 0x01, 0x74, 0x00, 0x76, 0x00, 0x72, + 0x00, 0x65, 0x01, 0x72, 0x00, 0x2e, 0x00, 0x1b, + 0x6f, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x61, 0x01, 0x74, 0x00, + 0x76, 0x00, 0x72, 0x00, 0x65, 0x01, 0x72, 0x00, + 0x2e, 0x00, 0x21, 0x70, 0x00, 0x72, 0x00, 0x65, + 0x00, 0x64, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x61, 0x01, 0x74, + 0x00, 0x76, 0x00, 0x72, 0x00, 0x65, 0x01, 0x72, + 0x00, 0x2e, 0x00, 0x1a, 0x71, 0x75, 0x61, 0x72, + 0x74, 0x65, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x1c, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, + 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x18, 0x74, 0x65, 0x6e, 0x74, 0x6f, 0x20, 0x6d, + 0x65, 0x73, 0x69, 0x61, 0x63, 0x1a, 0x62, 0x75, + 0x64, 0xfa, 0x63, 0x69, 0x20, 0x6d, 0x65, 0x73, + 0x69, 0x61, 0x63, 0x1a, 0x6d, 0x69, 0x6e, 0x75, + 0x6c, 0xfd, 0x20, 0x6d, 0x65, 0x73, 0x69, 0x61, + 0x63, 0x18, 0x6f, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x6d, 0x65, 0x73, 0x69, 0x61, 0x63, 0x1a, 0x6f, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x65, 0x73, + 0x69, 0x61, 0x63, 0x65, 0x1a, 0x6f, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x6d, 0x65, 0x73, 0x69, 0x61, + 0x63, 0x61, 0x1c, 0x6f, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x6d, 0x65, 0x73, 0x69, 0x61, 0x63, 0x6f, + 0x76, 0x22, 0x70, 0x72, 0x65, 0x64, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x6d, 0x65, 0x73, 0x69, 0x61, + 0x63, 0x6f, 0x6d, 0x22, 0x70, 0x72, 0x65, 0x64, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x65, 0x73, + 0x69, 0x61, 0x63, 0x6d, 0x69, 0x20, 0x70, 0x72, + 0x65, 0x64, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, + 0x65, 0x73, 0x69, 0x61, 0x63, 0x61, 0x0a, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x14, 0x74, 0x65, 0x6e, + 0x74, 0x6f, 0x20, 0x6d, 0x65, 0x73, 0x2e, 0x16, + 0x62, 0x75, 0x64, 0xfa, 0x63, 0x69, 0x20, 0x6d, + 0x65, 0x73, 0x2e, 0x16, 0x6d, 0x69, 0x6e, 0x75, + 0x6c, 0xfd, 0x20, 0x6d, 0x65, 0x73, 0x2e, 0x14, + 0x6f, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x65, + 0x73, 0x2e, 0x1a, 0x70, 0x72, 0x65, 0x64, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x65, 0x73, 0x2e, + 0x16, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x18, 0x6d, 0x6f, 0x6e, + 0x74, 0x68, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x19, 0x74, 0x00, 0x65, 0x00, 0x6e, 0x00, + 0x74, 0x00, 0x6f, 0x00, 0x20, 0x00, 0x74, 0x00, + 0xfd, 0x00, 0x7e, 0x01, 0x64, 0x00, 0x65, 0x00, + 0x48, 0x01, 0x1b, 0x62, 0x00, 0x75, 0x00, 0x64, + 0x00, 0xfa, 0x00, 0x63, 0x00, 0x69, 0x00, 0x20, + 0x00, 0x74, 0x00, 0xfd, 0x00, 0x7e, 0x01, 0x64, + 0x00, 0x65, 0x00, 0x48, 0x01, 0x1b, 0x6d, 0x00, + 0x69, 0x00, 0x6e, 0x00, 0x75, 0x00, 0x6c, 0x00, + 0xfd, 0x00, 0x20, 0x00, 0x74, 0x00, 0xfd, 0x00, + 0x7e, 0x01, 0x64, 0x00, 0x65, 0x00, 0x48, 0x01, + 0x19, 0x6f, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x74, 0x00, 0xfd, + 0x00, 0x7e, 0x01, 0x64, 0x00, 0x65, 0x00, 0x48, + 0x01, 0x19, 0x6f, 0x00, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x74, 0x00, + 0xfd, 0x00, 0x7e, 0x01, 0x64, 0x00, 0x6e, 0x00, + 0x65, 0x00, 0x19, 0x6f, 0x00, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x74, + 0x00, 0xfd, 0x00, 0x7e, 0x01, 0x64, 0x00, 0x48, + 0x01, 0x61, 0x00, 0x1b, 0x6f, 0x00, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x74, 0x00, 0xfd, 0x00, 0x7e, 0x01, 0x64, 0x00, + 0x48, 0x01, 0x6f, 0x00, 0x76, 0x00, 0x21, 0x70, + 0x00, 0x72, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x74, 0x00, 0xfd, 0x00, 0x7e, 0x01, 0x64, + 0x00, 0x48, 0x01, 0x6f, 0x00, 0x6d, 0x00, 0x23, + 0x70, 0x00, 0x72, 0x00, 0x65, 0x00, 0x64, 0x00, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x74, 0x00, 0xfd, 0x00, 0x7e, 0x01, + 0x64, 0x00, 0x48, 0x01, 0x61, 0x00, 0x6d, 0x00, + 0x69, 0x00, 0x1f, 0x70, 0x00, 0x72, 0x00, 0x65, + 0x00, 0x64, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x74, 0x00, 0xfd, + 0x00, 0x7e, 0x01, 0x64, 0x00, 0x48, 0x01, 0x61, + 0x00, 0x08, 0x77, 0x65, 0x65, 0x6b, 0x15, 0x74, + 0x00, 0x65, 0x00, 0x6e, 0x00, 0x74, 0x00, 0x6f, + 0x00, 0x20, 0x00, 0x74, 0x00, 0xfd, 0x00, 0x7e, + 0x01, 0x2e, 0x00, 0x17, 0x62, 0x00, 0x75, 0x00, + 0x64, 0x00, 0xfa, 0x00, 0x63, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x74, 0x00, 0xfd, 0x00, 0x7e, 0x01, + 0x2e, 0x00, 0x17, 0x6d, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x75, 0x00, 0x6c, 0x00, 0xfd, 0x00, 0x20, + 0x00, 0x74, 0x00, 0xfd, 0x00, 0x7e, 0x01, 0x2e, + 0x00, 0x15, 0x6f, 0x00, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x74, 0x00, + 0xfd, 0x00, 0x7e, 0x01, 0x2e, 0x00, 0x1b, 0x70, + 0x00, 0x72, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x74, 0x00, 0xfd, 0x00, 0x7e, 0x01, 0x2e, + 0x00, 0x14, 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x16, 0x77, 0x65, 0x65, + 0x6b, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x08, 0x64, 0x6e, 0x65, 0x73, 0x0c, 0x7a, 0x61, + 0x6a, 0x74, 0x72, 0x61, 0x10, 0x70, 0x6f, 0x7a, + 0x61, 0x6a, 0x74, 0x72, 0x61, 0x15, 0x70, 0x00, + 0x72, 0x00, 0x65, 0x00, 0x64, 0x00, 0x76, 0x00, + 0x0d, 0x01, 0x65, 0x00, 0x72, 0x00, 0x6f, 0x00, + 0x6d, 0x00, 0x04, 0x2d, 0x32, 0x0b, 0x76, 0x00, + 0x0d, 0x01, 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, + 0x13, 0x6f, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x64, 0x00, 0x65, + 0x00, 0x48, 0x01, 0x12, 0x6f, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x64, 0x6e, 0x69, 0x13, 0x6f, 0x00, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x64, 0x00, 0x48, 0x01, 0x61, 0x00, + 0x12, 0x6f, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x64, + 0x6e, 0xed, 0x1b, 0x70, 0x00, 0x72, 0x00, 0x65, + 0x00, 0x64, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x64, 0x00, 0x48, + 0x01, 0x6f, 0x00, 0x6d, 0x00, 0x1d, 0x70, 0x00, + 0x72, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x64, 0x00, 0x48, 0x01, 0x61, 0x00, 0x6d, 0x00, + 0x69, 0x00, 0x19, 0x70, 0x00, 0x72, 0x00, 0x65, + 0x00, 0x64, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x64, 0x00, 0x48, + 0x01, 0x61, 0x00, 0x06, 0x64, 0x61, 0x79, 0x10, + 0x6f, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x64, 0x2e, + 0x16, 0x70, 0x72, 0x65, 0x64, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x64, 0x2e, 0x12, 0x64, 0x61, 0x79, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x14, 0x64, + 0x61, 0x79, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x1c, 0x76, 0x20, 0x74, 0x65, 0x6a, 0x74, + 0x6f, 0x20, 0x68, 0x6f, 0x64, 0x69, 0x6e, 0x65, + 0x18, 0x6f, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x68, + 0x6f, 0x64, 0x69, 0x6e, 0x75, 0x18, 0x6f, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x68, 0x6f, 0x64, 0x69, + 0x6e, 0x79, 0x16, 0x6f, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x68, 0x6f, 0x64, 0xed, 0x6e, 0x20, 0x70, + 0x72, 0x65, 0x64, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x68, 0x6f, 0x64, 0x69, 0x6e, 0x6f, 0x75, 0x22, + 0x70, 0x72, 0x65, 0x64, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x68, 0x6f, 0x64, 0x69, 0x6e, 0x61, 0x6d, + 0x69, 0x08, 0x68, 0x6f, 0x75, 0x72, 0x0e, 0x6f, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x68, 0x14, 0x70, + 0x72, 0x65, 0x64, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x68, 0x14, 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x16, 0x68, 0x6f, 0x75, + 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x1c, 0x76, 0x20, 0x74, 0x65, 0x6a, 0x74, 0x6f, + 0x20, 0x6d, 0x69, 0x6e, 0xfa, 0x74, 0x65, 0x18, + 0x6f, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, + 0x6e, 0xfa, 0x74, 0x75, 0x18, 0x6f, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0xfa, 0x74, + 0x79, 0x16, 0x6f, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x6d, 0x69, 0x6e, 0xfa, 0x74, 0x20, 0x70, 0x72, + 0x65, 0x64, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, + 0x69, 0x6e, 0xfa, 0x74, 0x6f, 0x75, 0x22, 0x70, + 0x72, 0x65, 0x64, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x6d, 0x69, 0x6e, 0xfa, 0x74, 0x61, 0x6d, 0x69, + 0x1e, 0x70, 0x72, 0x65, 0x64, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0xfa, 0x74, 0x79, + 0x0c, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x12, + 0x6f, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, + 0x6e, 0x18, 0x70, 0x72, 0x65, 0x64, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x18, 0x6d, + 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x1a, 0x6d, 0x69, 0x6e, 0x75, + 0x74, 0x65, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x0a, 0x74, 0x65, 0x72, 0x61, 0x7a, 0x1a, + 0x6f, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, + 0x6b, 0x75, 0x6e, 0x64, 0x75, 0x1a, 0x6f, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, 0x6b, 0x75, + 0x6e, 0x64, 0x79, 0x18, 0x6f, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x73, 0x65, 0x6b, 0xfa, 0x6e, 0x64, + 0x22, 0x70, 0x72, 0x65, 0x64, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x73, 0x65, 0x6b, 0x75, 0x6e, 0x64, + 0x6f, 0x75, 0x24, 0x70, 0x72, 0x65, 0x64, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, 0x6b, 0x75, + 0x6e, 0x64, 0x61, 0x6d, 0x69, 0x20, 0x70, 0x72, + 0x65, 0x64, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, + 0x65, 0x6b, 0x75, 0x6e, 0x64, 0x79, 0x0c, 0x73, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x0e, 0x6f, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x14, 0x70, 0x72, + 0x65, 0x64, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, + 0x18, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x73, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x08, 0x6c, 0x61, 0x74, 0x6e, + 0x04, 0x6e, 0x75, 0x08, 0x64, 0x61, 0x74, 0x61, + 0x70, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, + 0x74, 0x6c, 0x2d, 0x72, 0x65, 0x6c, 0x61, 0x74, + 0x69, 0x76, 0x65, 0x2d, 0x74, 0x69, 0x6d, 0x65, + 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2f, + 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, + 0x61, 0x74, 0x61, 0x2f, 0x73, 0x6b, 0x2e, 0x6a, + 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, + 0x01, 0x00, 0x07, 0x00, 0x00, 0xda, 0x16, 0x01, + 0xa0, 0x01, 0x00, 0x00, 0x00, 0x06, 0xc8, 0x04, + 0xd0, 0x00, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, + 0x00, 0x42, 0xd2, 0x00, 0x00, 0x00, 0xaa, 0x6a, + 0x45, 0x0b, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, + 0x00, 0x42, 0xd2, 0x00, 0x00, 0x00, 0x43, 0xd0, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd3, 0x00, 0x00, + 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0xdf, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe2, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xe3, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0xe3, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, + 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe7, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0xe7, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0xe7, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe8, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xe8, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0xe8, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, + 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe7, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0xe7, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0xe7, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe8, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xe8, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0xe8, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, + 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xed, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xee, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0xf0, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0xf1, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf2, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xf3, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0xf3, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, + 0x00, 0x00, 0x4d, 0xf5, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xf8, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0xf9, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0xf9, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfa, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0xfa, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, + 0x00, 0x00, 0x4d, 0xfb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xf8, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0xf9, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0xf9, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfa, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0xfa, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, + 0x00, 0x00, 0x4d, 0xfc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xff, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x00, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x02, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x03, 0x01, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x04, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x05, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0x05, 0x01, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, + 0x00, 0x00, 0x4d, 0x07, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x01, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x0b, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x0b, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x0b, 0x01, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0c, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x0c, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0x0c, 0x01, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, + 0x00, 0x00, 0x4d, 0x0d, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x0b, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x0b, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x0b, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x0c, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x0c, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x0c, 0x01, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe5, 0x00, 0x00, 0x00, 0x4d, 0x0e, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0x10, 0x01, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x11, + 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x13, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x14, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x18, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x17, 0x01, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe5, 0x00, 0x00, 0x00, 0x4d, 0x19, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x1a, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x01, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x1c, + 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x1d, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x1d, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x1d, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x1e, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x1e, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x1e, 0x01, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe5, 0x00, 0x00, 0x00, 0x4d, 0x1f, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x1d, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x1d, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x1d, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x1e, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x1e, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x1e, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0x20, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x21, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x22, + 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0x23, 0x01, 0x00, 0x00, 0x4d, 0x02, 0x00, + 0x00, 0x80, 0x04, 0x24, 0x01, 0x00, 0x00, 0x4d, + 0x25, 0x01, 0x00, 0x00, 0x04, 0x26, 0x01, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x27, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x28, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x29, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x2a, 0x01, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x2b, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x2c, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x2d, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0x2c, 0x01, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, + 0x00, 0x00, 0x4d, 0x2e, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0x22, 0x01, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0x23, 0x01, 0x00, + 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, 0x24, + 0x01, 0x00, 0x00, 0x4d, 0x25, 0x01, 0x00, 0x00, + 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x2f, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x2f, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x2f, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x30, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x30, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x30, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x30, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0x31, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x21, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x22, + 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0x23, 0x01, 0x00, 0x00, 0x4d, 0x02, 0x00, + 0x00, 0x80, 0x04, 0x24, 0x01, 0x00, 0x00, 0x4d, + 0x25, 0x01, 0x00, 0x00, 0x04, 0x26, 0x01, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x2f, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x2f, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x2f, 0x01, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x30, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x30, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x30, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0x30, 0x01, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, + 0x00, 0x00, 0x4d, 0x32, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x33, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x0b, 0x04, 0x34, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x35, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x35, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0x36, 0x01, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x37, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x38, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x37, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x38, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0x39, + 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x3a, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x3a, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x3a, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0x3a, 0x01, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x3b, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x3b, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x3b, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0x3b, 0x01, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x00, + 0x4d, 0x3c, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x3a, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x3a, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x3a, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x3a, 0x01, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x3b, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x3b, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x3b, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0x3b, 0x01, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, + 0x00, 0x00, 0x4d, 0x3d, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x3e, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x0b, 0x04, 0x3f, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x40, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x40, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0x41, 0x01, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x42, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x43, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x44, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x43, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0x45, + 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x00, + 0x4d, 0x48, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x46, 0x01, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x47, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, + 0x00, 0x00, 0x4d, 0x49, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x0b, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x4c, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x4c, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x4f, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0x51, + 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x00, + 0x4d, 0x54, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x52, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x52, 0x01, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x53, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x53, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, + 0x00, 0x00, 0x4d, 0x55, 0x01, 0x00, 0x00, 0x04, + 0x56, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x57, 0x01, 0x00, 0x00, 0x4d, 0x58, 0x01, 0x00, + 0x00, 0x24, 0x01, 0x00, 0xc8, 0xc4, 0x28, 0xb2, + 0x05, 0x01, 0x89, 0x03, 0x76, 0x53, 0x35, 0x08, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, + 0x1c, 0x12, 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_sl_size = 5806; + +const uint8_t intl_relative_sl[5806] = { + 0x01, 0x84, 0x01, 0x1e, 0x5f, 0x5f, 0x61, 0x64, + 0x64, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, + 0x61, 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, + 0x24, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x04, 0x73, 0x6c, 0x0c, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x0a, 0x6c, 0x65, + 0x74, 0x6f, 0x73, 0x1c, 0x6e, 0x61, 0x73, 0x6c, + 0x65, 0x64, 0x6e, 0x6a, 0x65, 0x20, 0x6c, 0x65, + 0x74, 0x6f, 0x08, 0x6c, 0x61, 0x6e, 0x69, 0x04, + 0x2d, 0x31, 0x19, 0x0d, 0x01, 0x65, 0x00, 0x7a, + 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x6c, 0x00, 0x65, 0x00, 0x74, + 0x00, 0x6f, 0x00, 0x06, 0x6f, 0x6e, 0x65, 0x19, + 0x0d, 0x01, 0x65, 0x00, 0x7a, 0x00, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x6c, 0x00, 0x65, 0x00, 0x74, 0x00, 0x69, 0x00, + 0x06, 0x74, 0x77, 0x6f, 0x19, 0x0d, 0x01, 0x65, + 0x00, 0x7a, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x6c, 0x00, 0x65, + 0x00, 0x74, 0x00, 0x61, 0x00, 0x06, 0x66, 0x65, + 0x77, 0x17, 0x0d, 0x01, 0x65, 0x00, 0x7a, 0x00, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x6c, 0x00, 0x65, 0x00, 0x74, 0x00, + 0x0a, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x0c, 0x66, + 0x75, 0x74, 0x75, 0x72, 0x65, 0x1c, 0x70, 0x72, + 0x65, 0x64, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6c, + 0x65, 0x74, 0x6f, 0x6d, 0x1e, 0x70, 0x72, 0x65, + 0x64, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6c, 0x65, + 0x74, 0x6f, 0x6d, 0x61, 0x1a, 0x70, 0x72, 0x65, + 0x64, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6c, 0x65, + 0x74, 0x69, 0x08, 0x70, 0x61, 0x73, 0x74, 0x08, + 0x79, 0x65, 0x61, 0x72, 0x14, 0x79, 0x65, 0x61, + 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, + 0x79, 0x65, 0x61, 0x72, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x1b, 0x74, 0x00, 0x6f, 0x00, + 0x20, 0x00, 0x0d, 0x01, 0x65, 0x00, 0x74, 0x00, + 0x72, 0x00, 0x74, 0x00, 0x6c, 0x00, 0x65, 0x00, + 0x74, 0x00, 0x6a, 0x00, 0x65, 0x00, 0x29, 0x6e, + 0x00, 0x61, 0x00, 0x73, 0x00, 0x6c, 0x00, 0x65, + 0x00, 0x64, 0x00, 0x6e, 0x00, 0x6a, 0x00, 0x65, + 0x00, 0x20, 0x00, 0x0d, 0x01, 0x65, 0x00, 0x74, + 0x00, 0x72, 0x00, 0x74, 0x00, 0x6c, 0x00, 0x65, + 0x00, 0x74, 0x00, 0x6a, 0x00, 0x65, 0x00, 0x23, + 0x7a, 0x00, 0x61, 0x00, 0x64, 0x00, 0x6e, 0x00, + 0x6a, 0x00, 0x65, 0x00, 0x20, 0x00, 0x0d, 0x01, + 0x65, 0x00, 0x74, 0x00, 0x72, 0x00, 0x74, 0x00, + 0x6c, 0x00, 0x65, 0x00, 0x74, 0x00, 0x6a, 0x00, + 0x65, 0x00, 0x25, 0x0d, 0x01, 0x65, 0x00, 0x7a, + 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x0d, 0x01, 0x65, 0x00, 0x74, + 0x00, 0x72, 0x00, 0x74, 0x00, 0x6c, 0x00, 0x65, + 0x00, 0x74, 0x00, 0x6a, 0x00, 0x65, 0x00, 0x25, + 0x0d, 0x01, 0x65, 0x00, 0x7a, 0x00, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x0d, 0x01, 0x65, 0x00, 0x74, 0x00, 0x72, 0x00, + 0x74, 0x00, 0x6c, 0x00, 0x65, 0x00, 0x74, 0x00, + 0x6a, 0x00, 0x69, 0x00, 0x25, 0x0d, 0x01, 0x65, + 0x00, 0x7a, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x0d, 0x01, 0x65, + 0x00, 0x74, 0x00, 0x72, 0x00, 0x74, 0x00, 0x6c, + 0x00, 0x65, 0x00, 0x74, 0x00, 0x6a, 0x00, 0x61, + 0x00, 0x25, 0x0d, 0x01, 0x65, 0x00, 0x7a, 0x00, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x0d, 0x01, 0x65, 0x00, 0x74, 0x00, + 0x72, 0x00, 0x74, 0x00, 0x6c, 0x00, 0x65, 0x00, + 0x74, 0x00, 0x69, 0x00, 0x6a, 0x00, 0x29, 0x70, + 0x00, 0x72, 0x00, 0x65, 0x00, 0x64, 0x00, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x0d, 0x01, 0x65, 0x00, 0x74, 0x00, 0x72, + 0x00, 0x74, 0x00, 0x6c, 0x00, 0x65, 0x00, 0x74, + 0x00, 0x6a, 0x00, 0x65, 0x00, 0x6d, 0x00, 0x2b, + 0x70, 0x00, 0x72, 0x00, 0x65, 0x00, 0x64, 0x00, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x0d, 0x01, 0x65, 0x00, 0x74, 0x00, + 0x72, 0x00, 0x74, 0x00, 0x6c, 0x00, 0x65, 0x00, + 0x74, 0x00, 0x6a, 0x00, 0x65, 0x00, 0x6d, 0x00, + 0x61, 0x00, 0x27, 0x70, 0x00, 0x72, 0x00, 0x65, + 0x00, 0x64, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x0d, 0x01, 0x65, + 0x00, 0x74, 0x00, 0x72, 0x00, 0x74, 0x00, 0x6c, + 0x00, 0x65, 0x00, 0x74, 0x00, 0x6a, 0x00, 0x69, + 0x00, 0x0e, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, + 0x72, 0x1f, 0x0d, 0x01, 0x65, 0x00, 0x7a, 0x00, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x0d, 0x01, 0x65, 0x00, 0x74, 0x00, + 0x72, 0x00, 0x74, 0x00, 0x6c, 0x00, 0x2e, 0x00, + 0x21, 0x70, 0x00, 0x72, 0x00, 0x65, 0x00, 0x64, + 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x0d, 0x01, 0x65, 0x00, 0x74, + 0x00, 0x72, 0x00, 0x74, 0x00, 0x6c, 0x00, 0x2e, + 0x00, 0x1a, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, + 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1b, + 0x0d, 0x01, 0x65, 0x00, 0x7a, 0x00, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x0d, 0x01, 0x65, 0x00, 0x74, 0x00, 0x72, 0x00, + 0x2e, 0x00, 0x1d, 0x70, 0x00, 0x72, 0x00, 0x65, + 0x00, 0x64, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x0d, 0x01, 0x65, + 0x00, 0x74, 0x00, 0x72, 0x00, 0x2e, 0x00, 0x1c, + 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x10, 0x74, + 0x61, 0x20, 0x6d, 0x65, 0x73, 0x65, 0x63, 0x1e, + 0x6e, 0x61, 0x73, 0x6c, 0x65, 0x64, 0x6e, 0x6a, + 0x69, 0x20, 0x6d, 0x65, 0x73, 0x65, 0x63, 0x1d, + 0x70, 0x00, 0x72, 0x00, 0x65, 0x00, 0x6a, 0x00, + 0x61, 0x01, 0x6e, 0x00, 0x6a, 0x00, 0x69, 0x00, + 0x20, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x73, 0x00, + 0x65, 0x00, 0x63, 0x00, 0x1b, 0x0d, 0x01, 0x65, + 0x00, 0x7a, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x6d, 0x00, 0x65, + 0x00, 0x73, 0x00, 0x65, 0x00, 0x63, 0x00, 0x1d, + 0x0d, 0x01, 0x65, 0x00, 0x7a, 0x00, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x6d, 0x00, 0x65, 0x00, 0x73, 0x00, 0x65, 0x00, + 0x63, 0x00, 0x61, 0x00, 0x1d, 0x0d, 0x01, 0x65, + 0x00, 0x7a, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x6d, 0x00, 0x65, + 0x00, 0x73, 0x00, 0x65, 0x00, 0x63, 0x00, 0x65, + 0x00, 0x1f, 0x0d, 0x01, 0x65, 0x00, 0x7a, 0x00, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x73, 0x00, + 0x65, 0x00, 0x63, 0x00, 0x65, 0x00, 0x76, 0x00, + 0x20, 0x70, 0x72, 0x65, 0x64, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x6d, 0x65, 0x73, 0x65, 0x63, 0x65, + 0x6d, 0x22, 0x70, 0x72, 0x65, 0x64, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x6d, 0x65, 0x73, 0x65, 0x63, + 0x65, 0x6d, 0x61, 0x1e, 0x70, 0x72, 0x65, 0x64, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x65, 0x73, + 0x65, 0x63, 0x69, 0x0a, 0x6d, 0x6f, 0x6e, 0x74, + 0x68, 0x19, 0x0d, 0x01, 0x65, 0x00, 0x7a, 0x00, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x6d, 0x00, 0x65, 0x00, 0x73, 0x00, + 0x2e, 0x00, 0x1a, 0x70, 0x72, 0x65, 0x64, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x65, 0x73, 0x2e, + 0x16, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x18, 0x6d, 0x6f, 0x6e, + 0x74, 0x68, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x10, 0x74, 0x61, 0x20, 0x74, 0x65, 0x64, + 0x65, 0x6e, 0x1e, 0x6e, 0x61, 0x73, 0x6c, 0x65, + 0x64, 0x6e, 0x6a, 0x69, 0x20, 0x74, 0x65, 0x64, + 0x65, 0x6e, 0x1d, 0x70, 0x00, 0x72, 0x00, 0x65, + 0x00, 0x6a, 0x00, 0x61, 0x01, 0x6e, 0x00, 0x6a, + 0x00, 0x69, 0x00, 0x20, 0x00, 0x74, 0x00, 0x65, + 0x00, 0x64, 0x00, 0x65, 0x00, 0x6e, 0x00, 0x1b, + 0x0d, 0x01, 0x65, 0x00, 0x7a, 0x00, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x65, 0x00, + 0x6e, 0x00, 0x1b, 0x0d, 0x01, 0x65, 0x00, 0x7a, + 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, + 0x00, 0x6e, 0x00, 0x61, 0x00, 0x1b, 0x0d, 0x01, + 0x65, 0x00, 0x7a, 0x00, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x74, 0x00, + 0x65, 0x00, 0x64, 0x00, 0x6e, 0x00, 0x65, 0x00, + 0x1d, 0x0d, 0x01, 0x65, 0x00, 0x7a, 0x00, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, 0x00, 0x6e, + 0x00, 0x6f, 0x00, 0x76, 0x00, 0x1e, 0x70, 0x72, + 0x65, 0x64, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x74, + 0x65, 0x64, 0x6e, 0x6f, 0x6d, 0x20, 0x70, 0x72, + 0x65, 0x64, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x74, + 0x65, 0x64, 0x6e, 0x6f, 0x6d, 0x61, 0x1c, 0x70, + 0x72, 0x65, 0x64, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x74, 0x65, 0x64, 0x6e, 0x69, 0x08, 0x77, 0x65, + 0x65, 0x6b, 0x19, 0x0d, 0x01, 0x65, 0x00, 0x7a, + 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x74, 0x00, 0x65, 0x00, 0x64, + 0x00, 0x2e, 0x00, 0x1a, 0x70, 0x72, 0x65, 0x64, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x74, 0x65, 0x64, + 0x2e, 0x14, 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x16, 0x77, 0x65, 0x65, + 0x6b, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x0a, 0x64, 0x61, 0x6e, 0x65, 0x73, 0x0a, 0x6a, + 0x75, 0x74, 0x72, 0x69, 0x19, 0x70, 0x00, 0x6f, + 0x00, 0x6a, 0x00, 0x75, 0x00, 0x74, 0x00, 0x72, + 0x00, 0x69, 0x00, 0x61, 0x01, 0x6e, 0x00, 0x6a, + 0x00, 0x65, 0x00, 0x6d, 0x00, 0x1f, 0x70, 0x00, + 0x72, 0x00, 0x65, 0x00, 0x64, 0x00, 0x76, 0x00, + 0x0d, 0x01, 0x65, 0x00, 0x72, 0x00, 0x61, 0x00, + 0x6a, 0x00, 0x61, 0x01, 0x6e, 0x00, 0x6a, 0x00, + 0x69, 0x00, 0x6d, 0x00, 0x04, 0x2d, 0x32, 0x0d, + 0x76, 0x00, 0x0d, 0x01, 0x65, 0x00, 0x72, 0x00, + 0x61, 0x00, 0x6a, 0x00, 0x17, 0x0d, 0x01, 0x65, + 0x00, 0x7a, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x64, 0x00, 0x61, + 0x00, 0x6e, 0x00, 0x1b, 0x0d, 0x01, 0x65, 0x00, + 0x7a, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x64, 0x00, 0x6e, 0x00, + 0x65, 0x00, 0x76, 0x00, 0x61, 0x00, 0x17, 0x0d, + 0x01, 0x65, 0x00, 0x7a, 0x00, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x64, + 0x00, 0x6e, 0x00, 0x69, 0x00, 0x1e, 0x70, 0x72, + 0x65, 0x64, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x64, + 0x6e, 0x65, 0x76, 0x6f, 0x6d, 0x20, 0x70, 0x72, + 0x65, 0x64, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x64, + 0x6e, 0x65, 0x76, 0x6f, 0x6d, 0x61, 0x1c, 0x70, + 0x72, 0x65, 0x64, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x64, 0x6e, 0x65, 0x76, 0x69, 0x06, 0x64, 0x61, + 0x79, 0x12, 0x64, 0x61, 0x79, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x14, 0x64, 0x61, 0x79, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x12, 0x76, + 0x20, 0x74, 0x65, 0x6a, 0x20, 0x75, 0x72, 0x69, + 0x17, 0x0d, 0x01, 0x65, 0x00, 0x7a, 0x00, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x75, 0x00, 0x72, 0x00, 0x6f, 0x00, 0x17, + 0x0d, 0x01, 0x65, 0x00, 0x7a, 0x00, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x75, 0x00, 0x72, 0x00, 0x69, 0x00, 0x17, 0x0d, + 0x01, 0x65, 0x00, 0x7a, 0x00, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x75, + 0x00, 0x72, 0x00, 0x65, 0x00, 0x15, 0x0d, 0x01, + 0x65, 0x00, 0x7a, 0x00, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x75, 0x00, + 0x72, 0x00, 0x18, 0x70, 0x72, 0x65, 0x64, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x75, 0x72, 0x6f, 0x1c, + 0x70, 0x72, 0x65, 0x64, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x75, 0x72, 0x61, 0x6d, 0x61, 0x1c, 0x70, + 0x72, 0x65, 0x64, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x75, 0x72, 0x61, 0x6d, 0x69, 0x08, 0x68, 0x6f, + 0x75, 0x72, 0x14, 0x68, 0x6f, 0x75, 0x72, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x13, 0x0d, 0x01, + 0x65, 0x00, 0x7a, 0x00, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x68, 0x00, + 0x14, 0x70, 0x72, 0x65, 0x64, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x68, 0x16, 0x68, 0x6f, 0x75, 0x72, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x12, + 0x74, 0x6f, 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x74, + 0x6f, 0x1d, 0x0d, 0x01, 0x65, 0x00, 0x7a, 0x00, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x6d, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x75, 0x00, 0x74, 0x00, 0x6f, 0x00, 0x1d, 0x0d, + 0x01, 0x65, 0x00, 0x7a, 0x00, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x6d, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x75, 0x00, 0x74, + 0x00, 0x69, 0x00, 0x1d, 0x0d, 0x01, 0x65, 0x00, + 0x7a, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x6d, 0x00, 0x69, 0x00, + 0x6e, 0x00, 0x75, 0x00, 0x74, 0x00, 0x65, 0x00, + 0x1b, 0x0d, 0x01, 0x65, 0x00, 0x7a, 0x00, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x6d, 0x00, 0x69, 0x00, 0x6e, 0x00, 0x75, + 0x00, 0x74, 0x00, 0x1e, 0x70, 0x72, 0x65, 0x64, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, + 0x75, 0x74, 0x6f, 0x22, 0x70, 0x72, 0x65, 0x64, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, + 0x75, 0x74, 0x61, 0x6d, 0x61, 0x22, 0x70, 0x72, + 0x65, 0x64, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, + 0x69, 0x6e, 0x75, 0x74, 0x61, 0x6d, 0x69, 0x0c, + 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x19, 0x0d, + 0x01, 0x65, 0x00, 0x7a, 0x00, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x6d, + 0x00, 0x69, 0x00, 0x6e, 0x00, 0x2e, 0x00, 0x1a, + 0x70, 0x72, 0x65, 0x64, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x6d, 0x69, 0x6e, 0x2e, 0x18, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x17, 0x0d, 0x01, 0x65, 0x00, 0x7a, + 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x6d, 0x00, 0x69, 0x00, 0x6e, + 0x00, 0x18, 0x70, 0x72, 0x65, 0x64, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x1a, 0x6d, + 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x08, 0x7a, 0x64, 0x61, + 0x6a, 0x1f, 0x0d, 0x01, 0x65, 0x00, 0x7a, 0x00, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x73, 0x00, 0x65, 0x00, 0x6b, 0x00, + 0x75, 0x00, 0x6e, 0x00, 0x64, 0x00, 0x6f, 0x00, + 0x1f, 0x0d, 0x01, 0x65, 0x00, 0x7a, 0x00, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x73, 0x00, 0x65, 0x00, 0x6b, 0x00, 0x75, + 0x00, 0x6e, 0x00, 0x64, 0x00, 0x69, 0x00, 0x1f, + 0x0d, 0x01, 0x65, 0x00, 0x7a, 0x00, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x73, 0x00, 0x65, 0x00, 0x6b, 0x00, 0x75, 0x00, + 0x6e, 0x00, 0x64, 0x00, 0x65, 0x00, 0x1d, 0x0d, + 0x01, 0x65, 0x00, 0x7a, 0x00, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x73, + 0x00, 0x65, 0x00, 0x6b, 0x00, 0x75, 0x00, 0x6e, + 0x00, 0x64, 0x00, 0x20, 0x70, 0x72, 0x65, 0x64, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, 0x6b, + 0x75, 0x6e, 0x64, 0x6f, 0x24, 0x70, 0x72, 0x65, + 0x64, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, + 0x6b, 0x75, 0x6e, 0x64, 0x61, 0x6d, 0x61, 0x24, + 0x70, 0x72, 0x65, 0x64, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x73, 0x65, 0x6b, 0x75, 0x6e, 0x64, 0x61, + 0x6d, 0x69, 0x0c, 0x73, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x13, 0x0d, 0x01, 0x65, 0x00, 0x7a, 0x00, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x73, 0x00, 0x14, 0x70, 0x72, 0x65, + 0x64, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x18, + 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x73, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, + 0x6e, 0x75, 0x08, 0x64, 0x61, 0x74, 0x61, 0x70, + 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, + 0x6c, 0x2d, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, + 0x76, 0x65, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2d, + 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2f, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, + 0x74, 0x61, 0x2f, 0x73, 0x6c, 0x2e, 0x6a, 0x73, + 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, + 0x00, 0x07, 0x00, 0x00, 0x96, 0x17, 0x01, 0xa0, + 0x01, 0x00, 0x00, 0x00, 0x06, 0xc8, 0x04, 0xd0, + 0x00, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, + 0x42, 0xd2, 0x00, 0x00, 0x00, 0xaa, 0x6a, 0x81, + 0x0b, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, + 0x42, 0xd2, 0x00, 0x00, 0x00, 0x43, 0xd0, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd3, 0x00, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe2, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe3, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe2, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe3, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe2, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe3, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe9, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xec, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0xef, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf0, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf1, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0xf3, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe9, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf4, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0xf4, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf5, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf5, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0xf6, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe9, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf7, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0xf7, 0x00, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf8, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf8, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0xf9, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xfa, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xfc, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfd, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x01, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x02, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0x04, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xfa, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xfc, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x05, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0x05, 0x01, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x06, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x06, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0x07, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xfa, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xfc, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x05, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0x05, 0x01, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x06, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x06, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0x08, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x09, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x0b, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0c, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0x0f, 0x01, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x10, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x11, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0x13, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x09, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x0b, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x14, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0x16, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x09, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x0b, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x14, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x15, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0x17, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x18, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x1a, 0x01, 0x00, 0x00, + 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x01, + 0x00, 0x00, 0x4d, 0x1c, 0x01, 0x00, 0x00, 0x04, + 0x1d, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x1f, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x20, + 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x04, 0x20, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x22, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x23, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x23, + 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0x24, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x18, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x19, 0x01, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0x1a, 0x01, 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, + 0x80, 0x04, 0x1b, 0x01, 0x00, 0x00, 0x4d, 0x1c, + 0x01, 0x00, 0x00, 0x04, 0x1d, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x1e, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x1f, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x20, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0x20, 0x01, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x21, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x22, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x23, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x04, 0x23, 0x01, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0x25, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x18, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x1a, 0x01, 0x00, 0x00, + 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x01, + 0x00, 0x00, 0x4d, 0x1c, 0x01, 0x00, 0x00, 0x04, + 0x1d, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x1f, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x20, + 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x04, 0x20, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x22, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x23, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x23, + 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0x26, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x27, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x28, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x29, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x2a, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0x2b, 0x01, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x2c, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x2d, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x2e, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x04, 0x2e, 0x01, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0x2f, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x28, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x29, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x2a, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x2b, + 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x2c, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x2d, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x2e, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0x2e, 0x01, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, + 0x00, 0x00, 0x00, 0x4d, 0x30, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x31, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x31, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x31, + 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x04, 0x31, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x32, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x32, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x32, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x32, + 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0x33, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x34, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x35, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x36, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x37, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0x38, 0x01, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x39, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x3a, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x3b, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x04, 0x3b, 0x01, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0x3c, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x3d, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x3d, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x3d, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x3d, + 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x3e, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x3e, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x3e, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0x3e, 0x01, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, + 0x00, 0x00, 0x00, 0x4d, 0x3f, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x40, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x40, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x40, + 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x04, 0x40, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x41, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x41, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x41, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x41, + 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0x42, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x43, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x44, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x45, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x46, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x49, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0x4b, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe5, + 0x00, 0x00, 0x00, 0x4d, 0x4e, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x4c, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x4c, + 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x04, 0x4c, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x4d, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0x4f, 0x01, + 0x00, 0x00, 0x04, 0x50, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, 0x4d, + 0x52, 0x01, 0x00, 0x00, 0x24, 0x01, 0x00, 0xc8, + 0xc4, 0x28, 0xa6, 0x05, 0x01, 0x8f, 0x03, 0x76, + 0x53, 0x35, 0x08, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x1c, 0x1c, 0x12, 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_sr_size = 5528; + +const uint8_t intl_relative_sr[5528] = { + 0x01, 0x88, 0x01, 0x1e, 0x5f, 0x5f, 0x61, 0x64, + 0x64, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, + 0x61, 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, + 0x24, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x04, 0x73, 0x72, 0x0c, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x15, 0x3e, 0x04, + 0x32, 0x04, 0x35, 0x04, 0x20, 0x00, 0x33, 0x04, + 0x3e, 0x04, 0x34, 0x04, 0x38, 0x04, 0x3d, 0x04, + 0x35, 0x04, 0x1d, 0x41, 0x04, 0x3b, 0x04, 0x35, + 0x04, 0x34, 0x04, 0x35, 0x04, 0x5b, 0x04, 0x35, + 0x04, 0x20, 0x00, 0x33, 0x04, 0x3e, 0x04, 0x34, + 0x04, 0x38, 0x04, 0x3d, 0x04, 0x35, 0x04, 0x1b, + 0x3f, 0x04, 0x40, 0x04, 0x3e, 0x04, 0x48, 0x04, + 0x3b, 0x04, 0x35, 0x04, 0x20, 0x00, 0x33, 0x04, + 0x3e, 0x04, 0x34, 0x04, 0x38, 0x04, 0x3d, 0x04, + 0x35, 0x04, 0x04, 0x2d, 0x31, 0x1b, 0x37, 0x04, + 0x30, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x33, 0x04, 0x3e, 0x04, + 0x34, 0x04, 0x38, 0x04, 0x3d, 0x04, 0x43, 0x04, + 0x06, 0x6f, 0x6e, 0x65, 0x1b, 0x37, 0x04, 0x30, + 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x33, 0x04, 0x3e, 0x04, 0x34, + 0x04, 0x38, 0x04, 0x3d, 0x04, 0x35, 0x04, 0x06, + 0x66, 0x65, 0x77, 0x1b, 0x37, 0x04, 0x30, 0x04, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x33, 0x04, 0x3e, 0x04, 0x34, 0x04, + 0x38, 0x04, 0x3d, 0x04, 0x30, 0x04, 0x0a, 0x6f, + 0x74, 0x68, 0x65, 0x72, 0x0c, 0x66, 0x75, 0x74, + 0x75, 0x72, 0x65, 0x1d, 0x3f, 0x04, 0x40, 0x04, + 0x35, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x33, 0x04, 0x3e, 0x04, + 0x34, 0x04, 0x38, 0x04, 0x3d, 0x04, 0x35, 0x04, + 0x1d, 0x3f, 0x04, 0x40, 0x04, 0x35, 0x04, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x33, 0x04, 0x3e, 0x04, 0x34, 0x04, 0x38, + 0x04, 0x3d, 0x04, 0x30, 0x04, 0x08, 0x70, 0x61, + 0x73, 0x74, 0x08, 0x79, 0x65, 0x61, 0x72, 0x11, + 0x3e, 0x04, 0x32, 0x04, 0x35, 0x04, 0x20, 0x00, + 0x33, 0x04, 0x3e, 0x04, 0x34, 0x04, 0x2e, 0x00, + 0x19, 0x41, 0x04, 0x3b, 0x04, 0x35, 0x04, 0x34, + 0x04, 0x35, 0x04, 0x5b, 0x04, 0x35, 0x04, 0x20, + 0x00, 0x33, 0x04, 0x3e, 0x04, 0x34, 0x04, 0x2e, + 0x00, 0x17, 0x3f, 0x04, 0x40, 0x04, 0x3e, 0x04, + 0x48, 0x04, 0x3b, 0x04, 0x35, 0x04, 0x20, 0x00, + 0x33, 0x04, 0x3e, 0x04, 0x34, 0x04, 0x2e, 0x00, + 0x17, 0x37, 0x04, 0x30, 0x04, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x33, + 0x04, 0x3e, 0x04, 0x34, 0x04, 0x2e, 0x00, 0x19, + 0x3f, 0x04, 0x40, 0x04, 0x35, 0x04, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x33, 0x04, 0x3e, 0x04, 0x34, 0x04, 0x2e, 0x00, + 0x14, 0x79, 0x65, 0x61, 0x72, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x0d, 0x3e, 0x04, 0x32, 0x04, + 0x35, 0x04, 0x20, 0x00, 0x33, 0x04, 0x2e, 0x00, + 0x15, 0x41, 0x04, 0x3b, 0x04, 0x35, 0x04, 0x34, + 0x04, 0x35, 0x04, 0x5b, 0x04, 0x35, 0x04, 0x20, + 0x00, 0x33, 0x04, 0x2e, 0x00, 0x13, 0x3f, 0x04, + 0x40, 0x04, 0x3e, 0x04, 0x48, 0x04, 0x3b, 0x04, + 0x35, 0x04, 0x20, 0x00, 0x33, 0x04, 0x2e, 0x00, + 0x13, 0x37, 0x04, 0x30, 0x04, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x33, + 0x04, 0x2e, 0x00, 0x15, 0x3f, 0x04, 0x40, 0x04, + 0x35, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x33, 0x04, 0x2e, 0x00, + 0x16, 0x79, 0x65, 0x61, 0x72, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x1b, 0x3e, 0x04, 0x32, + 0x04, 0x3e, 0x04, 0x33, 0x04, 0x20, 0x00, 0x3a, + 0x04, 0x32, 0x04, 0x30, 0x04, 0x40, 0x04, 0x42, + 0x04, 0x30, 0x04, 0x3b, 0x04, 0x30, 0x04, 0x23, + 0x41, 0x04, 0x3b, 0x04, 0x35, 0x04, 0x34, 0x04, + 0x35, 0x04, 0x5b, 0x04, 0x35, 0x04, 0x33, 0x04, + 0x20, 0x00, 0x3a, 0x04, 0x32, 0x04, 0x30, 0x04, + 0x40, 0x04, 0x42, 0x04, 0x30, 0x04, 0x3b, 0x04, + 0x30, 0x04, 0x21, 0x3f, 0x04, 0x40, 0x04, 0x3e, + 0x04, 0x48, 0x04, 0x3b, 0x04, 0x3e, 0x04, 0x33, + 0x04, 0x20, 0x00, 0x3a, 0x04, 0x32, 0x04, 0x30, + 0x04, 0x40, 0x04, 0x42, 0x04, 0x30, 0x04, 0x3b, + 0x04, 0x30, 0x04, 0x1d, 0x37, 0x04, 0x30, 0x04, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x3a, 0x04, 0x32, 0x04, 0x30, 0x04, + 0x40, 0x04, 0x42, 0x04, 0x30, 0x04, 0x3b, 0x04, + 0x1f, 0x37, 0x04, 0x30, 0x04, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3a, + 0x04, 0x32, 0x04, 0x30, 0x04, 0x40, 0x04, 0x42, + 0x04, 0x30, 0x04, 0x3b, 0x04, 0x30, 0x04, 0x21, + 0x3f, 0x04, 0x40, 0x04, 0x35, 0x04, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x3a, 0x04, 0x32, 0x04, 0x30, 0x04, 0x40, 0x04, + 0x42, 0x04, 0x30, 0x04, 0x3b, 0x04, 0x30, 0x04, + 0x0e, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, + 0x15, 0x37, 0x04, 0x30, 0x04, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3a, + 0x04, 0x32, 0x04, 0x2e, 0x00, 0x17, 0x3f, 0x04, + 0x40, 0x04, 0x35, 0x04, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3a, 0x04, + 0x32, 0x04, 0x2e, 0x00, 0x1a, 0x71, 0x75, 0x61, + 0x72, 0x74, 0x65, 0x72, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x1c, 0x71, 0x75, 0x61, 0x72, 0x74, + 0x65, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x17, 0x3e, 0x04, 0x32, 0x04, 0x3e, 0x04, + 0x33, 0x04, 0x20, 0x00, 0x3c, 0x04, 0x35, 0x04, + 0x41, 0x04, 0x35, 0x04, 0x46, 0x04, 0x30, 0x04, + 0x1f, 0x41, 0x04, 0x3b, 0x04, 0x35, 0x04, 0x34, + 0x04, 0x35, 0x04, 0x5b, 0x04, 0x35, 0x04, 0x33, + 0x04, 0x20, 0x00, 0x3c, 0x04, 0x35, 0x04, 0x41, + 0x04, 0x35, 0x04, 0x46, 0x04, 0x30, 0x04, 0x1d, + 0x3f, 0x04, 0x40, 0x04, 0x3e, 0x04, 0x48, 0x04, + 0x3b, 0x04, 0x3e, 0x04, 0x33, 0x04, 0x20, 0x00, + 0x3c, 0x04, 0x35, 0x04, 0x41, 0x04, 0x35, 0x04, + 0x46, 0x04, 0x30, 0x04, 0x19, 0x37, 0x04, 0x30, + 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x3c, 0x04, 0x35, 0x04, 0x41, + 0x04, 0x35, 0x04, 0x46, 0x04, 0x1b, 0x37, 0x04, + 0x30, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x3c, 0x04, 0x35, 0x04, + 0x41, 0x04, 0x35, 0x04, 0x46, 0x04, 0x30, 0x04, + 0x1b, 0x37, 0x04, 0x30, 0x04, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3c, + 0x04, 0x35, 0x04, 0x41, 0x04, 0x35, 0x04, 0x46, + 0x04, 0x38, 0x04, 0x1d, 0x3f, 0x04, 0x40, 0x04, + 0x35, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x3c, 0x04, 0x35, 0x04, + 0x41, 0x04, 0x35, 0x04, 0x46, 0x04, 0x30, 0x04, + 0x1d, 0x3f, 0x04, 0x40, 0x04, 0x35, 0x04, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x3c, 0x04, 0x35, 0x04, 0x41, 0x04, 0x35, + 0x04, 0x46, 0x04, 0x38, 0x04, 0x0a, 0x6d, 0x6f, + 0x6e, 0x74, 0x68, 0x13, 0x3e, 0x04, 0x32, 0x04, + 0x3e, 0x04, 0x33, 0x04, 0x20, 0x00, 0x3c, 0x04, + 0x35, 0x04, 0x41, 0x04, 0x2e, 0x00, 0x1b, 0x41, + 0x04, 0x3b, 0x04, 0x35, 0x04, 0x34, 0x04, 0x35, + 0x04, 0x5b, 0x04, 0x35, 0x04, 0x33, 0x04, 0x20, + 0x00, 0x3c, 0x04, 0x35, 0x04, 0x41, 0x04, 0x2e, + 0x00, 0x19, 0x3f, 0x04, 0x40, 0x04, 0x3e, 0x04, + 0x48, 0x04, 0x3b, 0x04, 0x3e, 0x04, 0x33, 0x04, + 0x20, 0x00, 0x3c, 0x04, 0x35, 0x04, 0x41, 0x04, + 0x2e, 0x00, 0x17, 0x37, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x3c, 0x04, 0x35, 0x04, 0x41, 0x04, 0x2e, + 0x00, 0x19, 0x3f, 0x04, 0x40, 0x04, 0x35, 0x04, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x3c, 0x04, 0x35, 0x04, 0x41, 0x04, + 0x2e, 0x00, 0x16, 0x6d, 0x6f, 0x6e, 0x74, 0x68, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0f, 0x3e, + 0x04, 0x32, 0x04, 0x3e, 0x04, 0x33, 0x04, 0x20, + 0x00, 0x3c, 0x04, 0x2e, 0x00, 0x17, 0x41, 0x04, + 0x3b, 0x04, 0x35, 0x04, 0x34, 0x04, 0x35, 0x04, + 0x5b, 0x04, 0x35, 0x04, 0x33, 0x04, 0x20, 0x00, + 0x3c, 0x04, 0x2e, 0x00, 0x15, 0x3f, 0x04, 0x40, + 0x04, 0x3e, 0x04, 0x48, 0x04, 0x3b, 0x04, 0x3e, + 0x04, 0x33, 0x04, 0x20, 0x00, 0x3c, 0x04, 0x2e, + 0x00, 0x13, 0x37, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x3c, 0x04, 0x2e, 0x00, 0x15, 0x3f, 0x04, 0x40, + 0x04, 0x35, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3c, 0x04, 0x2e, + 0x00, 0x18, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x15, 0x3e, + 0x04, 0x32, 0x04, 0x35, 0x04, 0x20, 0x00, 0x3d, + 0x04, 0x35, 0x04, 0x34, 0x04, 0x35, 0x04, 0x59, + 0x04, 0x35, 0x04, 0x1d, 0x41, 0x04, 0x3b, 0x04, + 0x35, 0x04, 0x34, 0x04, 0x35, 0x04, 0x5b, 0x04, + 0x35, 0x04, 0x20, 0x00, 0x3d, 0x04, 0x35, 0x04, + 0x34, 0x04, 0x35, 0x04, 0x59, 0x04, 0x35, 0x04, + 0x1b, 0x3f, 0x04, 0x40, 0x04, 0x3e, 0x04, 0x48, + 0x04, 0x3b, 0x04, 0x35, 0x04, 0x20, 0x00, 0x3d, + 0x04, 0x35, 0x04, 0x34, 0x04, 0x35, 0x04, 0x59, + 0x04, 0x35, 0x04, 0x1b, 0x37, 0x04, 0x30, 0x04, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x3d, 0x04, 0x35, 0x04, 0x34, 0x04, + 0x35, 0x04, 0x59, 0x04, 0x43, 0x04, 0x1b, 0x37, + 0x04, 0x30, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3d, 0x04, 0x35, + 0x04, 0x34, 0x04, 0x35, 0x04, 0x59, 0x04, 0x35, + 0x04, 0x1b, 0x37, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x3d, 0x04, 0x35, 0x04, 0x34, 0x04, 0x35, 0x04, + 0x59, 0x04, 0x30, 0x04, 0x1d, 0x3f, 0x04, 0x40, + 0x04, 0x35, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3d, 0x04, 0x35, + 0x04, 0x34, 0x04, 0x35, 0x04, 0x59, 0x04, 0x35, + 0x04, 0x1d, 0x3f, 0x04, 0x40, 0x04, 0x35, 0x04, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x3d, 0x04, 0x35, 0x04, 0x34, 0x04, + 0x35, 0x04, 0x59, 0x04, 0x30, 0x04, 0x08, 0x77, + 0x65, 0x65, 0x6b, 0x11, 0x3e, 0x04, 0x32, 0x04, + 0x35, 0x04, 0x20, 0x00, 0x3d, 0x04, 0x35, 0x04, + 0x34, 0x04, 0x2e, 0x00, 0x19, 0x41, 0x04, 0x3b, + 0x04, 0x35, 0x04, 0x34, 0x04, 0x35, 0x04, 0x5b, + 0x04, 0x35, 0x04, 0x20, 0x00, 0x3d, 0x04, 0x35, + 0x04, 0x34, 0x04, 0x2e, 0x00, 0x17, 0x3f, 0x04, + 0x40, 0x04, 0x3e, 0x04, 0x48, 0x04, 0x3b, 0x04, + 0x35, 0x04, 0x20, 0x00, 0x3d, 0x04, 0x35, 0x04, + 0x34, 0x04, 0x2e, 0x00, 0x17, 0x37, 0x04, 0x30, + 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x3d, 0x04, 0x35, 0x04, 0x34, + 0x04, 0x2e, 0x00, 0x19, 0x3f, 0x04, 0x40, 0x04, + 0x35, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x3d, 0x04, 0x35, 0x04, + 0x34, 0x04, 0x2e, 0x00, 0x14, 0x77, 0x65, 0x65, + 0x6b, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0d, + 0x3e, 0x04, 0x32, 0x04, 0x35, 0x04, 0x20, 0x00, + 0x3d, 0x04, 0x2e, 0x00, 0x15, 0x41, 0x04, 0x3b, + 0x04, 0x35, 0x04, 0x34, 0x04, 0x35, 0x04, 0x5b, + 0x04, 0x35, 0x04, 0x20, 0x00, 0x3d, 0x04, 0x2e, + 0x00, 0x13, 0x3f, 0x04, 0x40, 0x04, 0x3e, 0x04, + 0x48, 0x04, 0x3b, 0x04, 0x35, 0x04, 0x20, 0x00, + 0x3d, 0x04, 0x2e, 0x00, 0x13, 0x37, 0x04, 0x30, + 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x3d, 0x04, 0x2e, 0x00, 0x15, + 0x3f, 0x04, 0x40, 0x04, 0x35, 0x04, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x3d, 0x04, 0x2e, 0x00, 0x16, 0x77, 0x65, 0x65, + 0x6b, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x0b, 0x34, 0x04, 0x30, 0x04, 0x3d, 0x04, 0x30, + 0x04, 0x41, 0x04, 0x0b, 0x41, 0x04, 0x43, 0x04, + 0x42, 0x04, 0x40, 0x04, 0x30, 0x04, 0x15, 0x3f, + 0x04, 0x40, 0x04, 0x35, 0x04, 0x3a, 0x04, 0x3e, + 0x04, 0x41, 0x04, 0x43, 0x04, 0x42, 0x04, 0x40, + 0x04, 0x30, 0x04, 0x11, 0x3f, 0x04, 0x40, 0x04, + 0x35, 0x04, 0x3a, 0x04, 0x58, 0x04, 0x43, 0x04, + 0x47, 0x04, 0x35, 0x04, 0x04, 0x2d, 0x32, 0x09, + 0x58, 0x04, 0x43, 0x04, 0x47, 0x04, 0x35, 0x04, + 0x15, 0x37, 0x04, 0x30, 0x04, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x34, + 0x04, 0x30, 0x04, 0x3d, 0x04, 0x17, 0x37, 0x04, + 0x30, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x34, 0x04, 0x30, 0x04, + 0x3d, 0x04, 0x30, 0x04, 0x19, 0x3f, 0x04, 0x40, + 0x04, 0x35, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x34, 0x04, 0x30, + 0x04, 0x3d, 0x04, 0x30, 0x04, 0x06, 0x64, 0x61, + 0x79, 0x13, 0x37, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x34, 0x04, 0x2e, 0x00, 0x15, 0x3f, 0x04, 0x40, + 0x04, 0x35, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x34, 0x04, 0x2e, + 0x00, 0x12, 0x64, 0x61, 0x79, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x14, 0x64, 0x61, 0x79, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x13, 0x3e, + 0x04, 0x32, 0x04, 0x3e, 0x04, 0x33, 0x04, 0x20, + 0x00, 0x41, 0x04, 0x30, 0x04, 0x42, 0x04, 0x30, + 0x04, 0x15, 0x37, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x41, 0x04, 0x30, 0x04, 0x42, 0x04, 0x17, 0x37, + 0x04, 0x30, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x41, 0x04, 0x30, + 0x04, 0x42, 0x04, 0x30, 0x04, 0x17, 0x37, 0x04, + 0x30, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x41, 0x04, 0x30, 0x04, + 0x42, 0x04, 0x38, 0x04, 0x19, 0x3f, 0x04, 0x40, + 0x04, 0x35, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x41, 0x04, 0x30, + 0x04, 0x42, 0x04, 0x30, 0x04, 0x19, 0x3f, 0x04, + 0x40, 0x04, 0x35, 0x04, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x41, 0x04, + 0x30, 0x04, 0x42, 0x04, 0x38, 0x04, 0x08, 0x68, + 0x6f, 0x75, 0x72, 0x13, 0x37, 0x04, 0x30, 0x04, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x47, 0x04, 0x2e, 0x00, 0x15, 0x3f, + 0x04, 0x40, 0x04, 0x35, 0x04, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x47, + 0x04, 0x2e, 0x00, 0x14, 0x68, 0x6f, 0x75, 0x72, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, 0x68, + 0x6f, 0x75, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x17, 0x3e, 0x04, 0x32, 0x04, 0x3e, + 0x04, 0x33, 0x04, 0x20, 0x00, 0x3c, 0x04, 0x38, + 0x04, 0x3d, 0x04, 0x43, 0x04, 0x42, 0x04, 0x30, + 0x04, 0x19, 0x37, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x3c, 0x04, 0x38, 0x04, 0x3d, 0x04, 0x43, 0x04, + 0x42, 0x04, 0x1b, 0x37, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x3c, 0x04, 0x38, 0x04, 0x3d, 0x04, 0x43, + 0x04, 0x42, 0x04, 0x30, 0x04, 0x1d, 0x3f, 0x04, + 0x40, 0x04, 0x35, 0x04, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3c, 0x04, + 0x38, 0x04, 0x3d, 0x04, 0x43, 0x04, 0x42, 0x04, + 0x30, 0x04, 0x0c, 0x6d, 0x69, 0x6e, 0x75, 0x74, + 0x65, 0x17, 0x37, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x3c, 0x04, 0x38, 0x04, 0x3d, 0x04, 0x2e, 0x00, + 0x19, 0x3f, 0x04, 0x40, 0x04, 0x35, 0x04, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x3c, 0x04, 0x38, 0x04, 0x3d, 0x04, 0x2e, + 0x00, 0x18, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x6d, + 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x09, 0x41, 0x04, 0x30, + 0x04, 0x34, 0x04, 0x30, 0x04, 0x1d, 0x37, 0x04, + 0x30, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x41, 0x04, 0x35, 0x04, + 0x3a, 0x04, 0x43, 0x04, 0x3d, 0x04, 0x34, 0x04, + 0x43, 0x04, 0x1d, 0x37, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x41, 0x04, 0x35, 0x04, 0x3a, 0x04, 0x43, + 0x04, 0x3d, 0x04, 0x34, 0x04, 0x35, 0x04, 0x1d, + 0x37, 0x04, 0x30, 0x04, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x41, 0x04, + 0x35, 0x04, 0x3a, 0x04, 0x43, 0x04, 0x3d, 0x04, + 0x34, 0x04, 0x38, 0x04, 0x1f, 0x3f, 0x04, 0x40, + 0x04, 0x35, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x41, 0x04, 0x35, + 0x04, 0x3a, 0x04, 0x43, 0x04, 0x3d, 0x04, 0x34, + 0x04, 0x35, 0x04, 0x1f, 0x3f, 0x04, 0x40, 0x04, + 0x35, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x41, 0x04, 0x35, 0x04, + 0x3a, 0x04, 0x43, 0x04, 0x3d, 0x04, 0x34, 0x04, + 0x38, 0x04, 0x0c, 0x73, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x17, 0x37, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x41, 0x04, 0x35, 0x04, 0x3a, 0x04, 0x2e, 0x00, + 0x19, 0x3f, 0x04, 0x40, 0x04, 0x35, 0x04, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x41, 0x04, 0x35, 0x04, 0x3a, 0x04, 0x2e, + 0x00, 0x18, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x13, 0x37, + 0x04, 0x30, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x41, 0x04, 0x2e, + 0x00, 0x15, 0x3f, 0x04, 0x40, 0x04, 0x35, 0x04, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x41, 0x04, 0x2e, 0x00, 0x1a, 0x73, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x08, 0x6c, 0x61, 0x74, + 0x6e, 0x04, 0x6e, 0x75, 0x08, 0x64, 0x61, 0x74, + 0x61, 0x70, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, + 0x6e, 0x74, 0x6c, 0x2d, 0x72, 0x65, 0x6c, 0x61, + 0x74, 0x69, 0x76, 0x65, 0x2d, 0x74, 0x69, 0x6d, + 0x65, 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, + 0x64, 0x61, 0x74, 0x61, 0x2f, 0x73, 0x72, 0x2e, + 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, + 0x00, 0x01, 0x00, 0x07, 0x00, 0x00, 0xb6, 0x13, + 0x01, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x06, 0xc8, + 0x04, 0xd0, 0x00, 0x00, 0x00, 0x39, 0xd1, 0x00, + 0x00, 0x00, 0x42, 0xd2, 0x00, 0x00, 0x00, 0xaa, + 0x6a, 0xa1, 0x09, 0x00, 0x00, 0x39, 0xd1, 0x00, + 0x00, 0x00, 0x42, 0xd2, 0x00, 0x00, 0x00, 0x43, + 0xd0, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd3, 0x00, + 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0xe1, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x4d, + 0xe3, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe4, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xe5, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe7, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe7, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0xe8, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe2, + 0x00, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xec, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0xed, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xee, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xee, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x4d, + 0xef, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf0, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xf1, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf3, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf4, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0xf5, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe2, + 0x00, 0x00, 0x00, 0x4d, 0xf6, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xf1, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xf2, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0xf7, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf8, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf8, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x4d, + 0xf9, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf0, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xf1, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf7, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf7, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0xf8, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe2, + 0x00, 0x00, 0x00, 0x4d, 0xfa, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xfc, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xfd, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x01, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x01, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x4d, + 0x03, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x04, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0x05, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x07, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x07, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x08, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe2, + 0x00, 0x00, 0x00, 0x4d, 0x09, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0x0b, 0x01, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x0c, 0x01, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x0d, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0e, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0e, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x4d, + 0x0f, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x10, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0x11, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x13, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x14, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x17, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe2, + 0x00, 0x00, 0x00, 0x4d, 0x18, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0x1a, 0x01, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x1b, 0x01, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x1c, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x1c, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x1c, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x1d, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x1d, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x4d, + 0x1e, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x1f, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0x20, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x22, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x22, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x22, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x23, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x23, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x23, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe2, + 0x00, 0x00, 0x00, 0x4d, 0x24, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x25, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0x26, 0x01, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x27, 0x01, + 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, + 0x28, 0x01, 0x00, 0x00, 0x4d, 0x29, 0x01, 0x00, + 0x00, 0x04, 0x2a, 0x01, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x2b, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x2c, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x2c, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x2d, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x2d, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x2d, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe2, + 0x00, 0x00, 0x00, 0x4d, 0x2e, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x25, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0x26, 0x01, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x27, 0x01, + 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, + 0x28, 0x01, 0x00, 0x00, 0x4d, 0x29, 0x01, 0x00, + 0x00, 0x04, 0x2a, 0x01, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x2f, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x2f, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x30, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x30, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x30, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe2, + 0x00, 0x00, 0x00, 0x4d, 0x31, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x25, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0x26, 0x01, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x27, 0x01, + 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, + 0x28, 0x01, 0x00, 0x00, 0x4d, 0x29, 0x01, 0x00, + 0x00, 0x04, 0x2a, 0x01, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x2f, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x2f, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x30, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x30, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x30, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe2, + 0x00, 0x00, 0x00, 0x4d, 0x32, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x33, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x34, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x35, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x36, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x37, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x37, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x38, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe2, + 0x00, 0x00, 0x00, 0x4d, 0x39, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x3a, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x3a, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x3a, + 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x3b, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x3b, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x3b, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x00, 0x4d, 0x3c, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x3a, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x3a, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x3a, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x3b, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x3b, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x3b, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x4d, + 0x3d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x3e, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, + 0x04, 0x3f, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x40, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x40, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x41, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x41, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x41, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x4d, + 0x42, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x43, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x43, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x43, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x44, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x44, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x44, + 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x4d, 0x45, 0x01, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x43, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x43, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x43, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x44, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x44, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x44, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe2, + 0x00, 0x00, 0x00, 0x4d, 0x46, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x47, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x48, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x49, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x4a, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x4b, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x4c, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe2, + 0x00, 0x00, 0x00, 0x4d, 0x4d, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x4e, + 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x4f, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, + 0x00, 0x4d, 0x50, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x51, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x52, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x52, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x04, 0x52, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x4d, + 0x53, 0x01, 0x00, 0x00, 0x04, 0x54, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x55, 0x01, 0x00, + 0x00, 0x4d, 0x56, 0x01, 0x00, 0x00, 0x24, 0x01, + 0x00, 0xc8, 0xc4, 0x28, 0xae, 0x05, 0x01, 0xdf, + 0x02, 0x76, 0x53, 0x35, 0x08, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x08, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x08, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x1c, 0x1c, 0x1c, 0x12, 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_sv_size = 4000; + +const uint8_t intl_relative_sv[4000] = { + 0x01, 0x83, 0x01, 0x1e, 0x5f, 0x5f, 0x61, 0x64, + 0x64, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, + 0x61, 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, + 0x24, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x04, 0x73, 0x76, 0x0c, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x08, 0x69, 0x20, + 0xe5, 0x72, 0x10, 0x6e, 0xe4, 0x73, 0x74, 0x61, + 0x20, 0xe5, 0x72, 0x0c, 0x69, 0x20, 0x66, 0x6a, + 0x6f, 0x6c, 0x04, 0x2d, 0x31, 0x12, 0x6f, 0x6d, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0xe5, 0x72, 0x06, + 0x6f, 0x6e, 0x65, 0x0a, 0x6f, 0x74, 0x68, 0x65, + 0x72, 0x0c, 0x66, 0x75, 0x74, 0x75, 0x72, 0x65, + 0x20, 0x66, 0xf6, 0x72, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0xe5, 0x72, 0x20, 0x73, 0x65, 0x64, 0x61, + 0x6e, 0x08, 0x70, 0x61, 0x73, 0x74, 0x08, 0x79, + 0x65, 0x61, 0x72, 0x1c, 0x66, 0xf6, 0x72, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0xe5, 0x72, 0x20, 0x73, + 0x65, 0x6e, 0x14, 0x79, 0x65, 0x61, 0x72, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0e, 0x2b, 0x7b, + 0x30, 0x7d, 0x20, 0xe5, 0x72, 0x0f, 0x12, 0x22, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0xe5, 0x00, 0x72, 0x00, 0x16, 0x79, 0x65, 0x61, + 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x1a, 0x64, 0x65, 0x74, 0x74, 0x61, 0x20, 0x6b, + 0x76, 0x61, 0x72, 0x74, 0x61, 0x6c, 0x1a, 0x6e, + 0xe4, 0x73, 0x74, 0x61, 0x20, 0x6b, 0x76, 0x61, + 0x72, 0x74, 0x61, 0x6c, 0x1e, 0x66, 0xf6, 0x72, + 0x72, 0x61, 0x20, 0x6b, 0x76, 0x61, 0x72, 0x74, + 0x61, 0x6c, 0x65, 0x74, 0x1c, 0x6f, 0x6d, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x6b, 0x76, 0x61, 0x72, + 0x74, 0x61, 0x6c, 0x2a, 0x66, 0xf6, 0x72, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x6b, 0x76, 0x61, 0x72, + 0x74, 0x61, 0x6c, 0x20, 0x73, 0x65, 0x64, 0x61, + 0x6e, 0x0e, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, + 0x72, 0x12, 0x64, 0x65, 0x74, 0x74, 0x61, 0x20, + 0x6b, 0x76, 0x2e, 0x12, 0x6e, 0xe4, 0x73, 0x74, + 0x61, 0x20, 0x6b, 0x76, 0x2e, 0x12, 0x66, 0xf6, + 0x72, 0x72, 0x61, 0x20, 0x6b, 0x76, 0x2e, 0x14, + 0x6f, 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6b, + 0x76, 0x2e, 0x1e, 0x66, 0xf6, 0x72, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x6b, 0x76, 0x2e, 0x20, 0x73, + 0x65, 0x6e, 0x1a, 0x71, 0x75, 0x61, 0x72, 0x74, + 0x65, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x10, 0x2b, 0x7b, 0x30, 0x7d, 0x20, 0x6b, 0x76, + 0x2e, 0x0f, 0x12, 0x22, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x6b, 0x00, 0x76, 0x00, + 0x1c, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x16, + 0x64, 0x65, 0x6e, 0x6e, 0x61, 0x20, 0x6d, 0xe5, + 0x6e, 0x61, 0x64, 0x16, 0x6e, 0xe4, 0x73, 0x74, + 0x61, 0x20, 0x6d, 0xe5, 0x6e, 0x61, 0x64, 0x1a, + 0x66, 0xf6, 0x72, 0x72, 0x61, 0x20, 0x6d, 0xe5, + 0x6e, 0x61, 0x64, 0x65, 0x6e, 0x18, 0x6f, 0x6d, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0xe5, 0x6e, + 0x61, 0x64, 0x1c, 0x6f, 0x6d, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x6d, 0xe5, 0x6e, 0x61, 0x64, 0x65, + 0x72, 0x26, 0x66, 0xf6, 0x72, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x6d, 0xe5, 0x6e, 0x61, 0x64, 0x20, + 0x73, 0x65, 0x64, 0x61, 0x6e, 0x2a, 0x66, 0xf6, + 0x72, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0xe5, + 0x6e, 0x61, 0x64, 0x65, 0x72, 0x20, 0x73, 0x65, + 0x64, 0x61, 0x6e, 0x0a, 0x6d, 0x6f, 0x6e, 0x74, + 0x68, 0x14, 0x64, 0x65, 0x6e, 0x6e, 0x61, 0x20, + 0x6d, 0xe5, 0x6e, 0x2e, 0x14, 0x6e, 0xe4, 0x73, + 0x74, 0x61, 0x20, 0x6d, 0xe5, 0x6e, 0x2e, 0x14, + 0x66, 0xf6, 0x72, 0x72, 0x61, 0x20, 0x6d, 0xe5, + 0x6e, 0x2e, 0x16, 0x6f, 0x6d, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x6d, 0xe5, 0x6e, 0x2e, 0x20, 0x66, + 0xf6, 0x72, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, + 0xe5, 0x6e, 0x2e, 0x20, 0x73, 0x65, 0x6e, 0x16, + 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x12, 0x2b, 0x7b, 0x30, 0x7d, + 0x20, 0x6d, 0xe5, 0x6e, 0x2e, 0x11, 0x12, 0x22, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x6d, 0x00, 0xe5, 0x00, 0x6e, 0x00, 0x18, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x16, 0x64, 0x65, 0x6e, 0x6e, + 0x61, 0x20, 0x76, 0x65, 0x63, 0x6b, 0x61, 0x16, + 0x6e, 0xe4, 0x73, 0x74, 0x61, 0x20, 0x76, 0x65, + 0x63, 0x6b, 0x61, 0x18, 0x66, 0xf6, 0x72, 0x72, + 0x61, 0x20, 0x76, 0x65, 0x63, 0x6b, 0x61, 0x6e, + 0x18, 0x6f, 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x76, 0x65, 0x63, 0x6b, 0x61, 0x1a, 0x6f, 0x6d, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x76, 0x65, 0x63, + 0x6b, 0x6f, 0x72, 0x26, 0x66, 0xf6, 0x72, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x76, 0x65, 0x63, 0x6b, + 0x61, 0x20, 0x73, 0x65, 0x64, 0x61, 0x6e, 0x28, + 0x66, 0xf6, 0x72, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x76, 0x65, 0x63, 0x6b, 0x6f, 0x72, 0x20, 0x73, + 0x65, 0x64, 0x61, 0x6e, 0x08, 0x77, 0x65, 0x65, + 0x6b, 0x10, 0x64, 0x65, 0x6e, 0x6e, 0x61, 0x20, + 0x76, 0x2e, 0x10, 0x6e, 0xe4, 0x73, 0x74, 0x61, + 0x20, 0x76, 0x2e, 0x10, 0x66, 0xf6, 0x72, 0x72, + 0x61, 0x20, 0x76, 0x2e, 0x12, 0x6f, 0x6d, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x76, 0x2e, 0x20, 0x66, + 0xf6, 0x72, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x76, + 0x2e, 0x20, 0x73, 0x65, 0x64, 0x61, 0x6e, 0x14, + 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x0e, 0x2b, 0x7b, 0x30, 0x7d, 0x20, + 0x76, 0x2e, 0x0d, 0x12, 0x22, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x76, 0x00, 0x16, + 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x0a, 0x69, 0x20, 0x64, 0x61, + 0x67, 0x10, 0x69, 0x20, 0x6d, 0x6f, 0x72, 0x67, + 0x6f, 0x6e, 0x18, 0x69, 0x20, 0xf6, 0x76, 0x65, + 0x72, 0x6d, 0x6f, 0x72, 0x67, 0x6f, 0x6e, 0x12, + 0x69, 0x20, 0x66, 0xf6, 0x72, 0x72, 0x67, 0xe5, + 0x72, 0x04, 0x2d, 0x32, 0x0a, 0x69, 0x20, 0x67, + 0xe5, 0x72, 0x14, 0x6f, 0x6d, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x64, 0x61, 0x67, 0x18, 0x6f, 0x6d, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x64, 0x61, 0x67, + 0x61, 0x72, 0x22, 0x66, 0xf6, 0x72, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x64, 0x61, 0x67, 0x20, 0x73, + 0x65, 0x64, 0x61, 0x6e, 0x26, 0x66, 0xf6, 0x72, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x64, 0x61, 0x67, + 0x61, 0x72, 0x20, 0x73, 0x65, 0x64, 0x61, 0x6e, + 0x06, 0x64, 0x61, 0x79, 0x10, 0x6f, 0x6d, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x64, 0x1e, 0x66, 0xf6, + 0x72, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x64, 0x20, + 0x73, 0x65, 0x64, 0x61, 0x6e, 0x1e, 0x66, 0xf6, + 0x72, 0xa0, 0x7b, 0x30, 0x7d, 0xa0, 0x64, 0x20, + 0x73, 0x65, 0x64, 0x61, 0x6e, 0x12, 0x64, 0x61, + 0x79, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x08, + 0x69, 0x64, 0x61, 0x67, 0x0e, 0x69, 0x6d, 0x6f, + 0x72, 0x67, 0x6f, 0x6e, 0x08, 0x69, 0x67, 0xe5, + 0x72, 0x0c, 0x2b, 0x7b, 0x30, 0x7d, 0x20, 0x64, + 0x0d, 0x12, 0x22, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x64, 0x00, 0x14, 0x64, 0x61, + 0x79, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x16, 0x64, 0x65, 0x6e, 0x6e, 0x61, 0x20, 0x74, + 0x69, 0x6d, 0x6d, 0x65, 0x18, 0x6f, 0x6d, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x74, 0x69, 0x6d, 0x6d, + 0x65, 0x1a, 0x6f, 0x6d, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x74, 0x69, 0x6d, 0x6d, 0x61, 0x72, 0x26, + 0x66, 0xf6, 0x72, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x74, 0x69, 0x6d, 0x6d, 0x65, 0x20, 0x73, 0x65, + 0x64, 0x61, 0x6e, 0x28, 0x66, 0xf6, 0x72, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x74, 0x69, 0x6d, 0x6d, + 0x61, 0x72, 0x20, 0x73, 0x65, 0x64, 0x61, 0x6e, + 0x08, 0x68, 0x6f, 0x75, 0x72, 0x14, 0x6f, 0x6d, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x74, 0x69, 0x6d, + 0x22, 0x66, 0xf6, 0x72, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x74, 0x69, 0x6d, 0x20, 0x73, 0x65, 0x64, + 0x61, 0x6e, 0x14, 0x68, 0x6f, 0x75, 0x72, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0c, 0x2b, 0x7b, + 0x30, 0x7d, 0x20, 0x68, 0x0d, 0x12, 0x22, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x68, + 0x00, 0x16, 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x16, 0x64, 0x65, + 0x6e, 0x6e, 0x61, 0x20, 0x6d, 0x69, 0x6e, 0x75, + 0x74, 0x18, 0x6f, 0x6d, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x1c, 0x6f, + 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x65, 0x72, 0x26, 0x66, 0xf6, + 0x72, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x20, 0x73, 0x65, 0x64, 0x61, + 0x6e, 0x2a, 0x66, 0xf6, 0x72, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, + 0x72, 0x20, 0x73, 0x65, 0x64, 0x61, 0x6e, 0x0c, + 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x14, 0x6f, + 0x6d, 0xa0, 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, + 0x6e, 0x1e, 0x66, 0xf6, 0x72, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x20, 0x73, 0x65, + 0x6e, 0x18, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x10, 0x2b, + 0x7b, 0x30, 0x7d, 0x20, 0x6d, 0x69, 0x6e, 0x11, + 0x12, 0x22, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x6d, 0x00, 0x69, 0x00, 0x6e, 0x00, + 0x1a, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x04, 0x6e, + 0x75, 0x1a, 0x6f, 0x6d, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x73, 0x65, 0x6b, 0x75, 0x6e, 0x64, 0x1e, + 0x6f, 0x6d, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, + 0x65, 0x6b, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x28, + 0x66, 0xf6, 0x72, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x73, 0x65, 0x6b, 0x75, 0x6e, 0x64, 0x20, 0x73, + 0x65, 0x64, 0x61, 0x6e, 0x2c, 0x66, 0xf6, 0x72, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, 0x6b, + 0x75, 0x6e, 0x64, 0x65, 0x72, 0x20, 0x73, 0x65, + 0x64, 0x61, 0x6e, 0x0c, 0x73, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x14, 0x6f, 0x6d, 0xa0, 0x7b, 0x30, + 0x7d, 0x20, 0x73, 0x65, 0x6b, 0x14, 0x6f, 0x6d, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x65, 0x6b, + 0x1a, 0x66, 0xf6, 0x72, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x73, 0x20, 0x73, 0x65, 0x6e, 0x18, 0x73, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x0c, 0x2b, 0x7b, 0x30, 0x7d, + 0x20, 0x73, 0x0d, 0x12, 0x22, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x73, 0x00, 0x1a, + 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x08, 0x6c, 0x61, + 0x74, 0x6e, 0x08, 0x64, 0x61, 0x74, 0x61, 0x70, + 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, + 0x6c, 0x2d, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, + 0x76, 0x65, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2d, + 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2f, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, + 0x74, 0x61, 0x2f, 0x73, 0x76, 0x2e, 0x6a, 0x73, + 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, + 0x00, 0x07, 0x00, 0x00, 0x92, 0x10, 0x01, 0xa0, + 0x01, 0x00, 0x00, 0x00, 0x06, 0xc8, 0x04, 0xd0, + 0x00, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, + 0x42, 0xd2, 0x00, 0x00, 0x00, 0xaa, 0x6a, 0xfd, + 0x07, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, + 0x42, 0xd2, 0x00, 0x00, 0x00, 0x43, 0xd0, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd3, 0x00, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe2, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xe2, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe3, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xe3, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xe4, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xe7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe8, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xed, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xee, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xf0, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xed, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf1, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xf3, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf4, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xf6, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf7, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xfb, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xfc, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xfe, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xff, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xfc, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xfe, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x02, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x04, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x05, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x07, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x08, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x0c, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x0d, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x0f, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x10, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x12, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x0d, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x0f, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x13, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x15, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x18, 0x01, 0x00, 0x00, + 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, 0x19, 0x01, + 0x00, 0x00, 0x4d, 0x1a, 0x01, 0x00, 0x00, 0x04, + 0x1b, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x1c, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x1d, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x1e, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x1f, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x20, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x17, 0x01, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0x18, 0x01, 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, + 0x80, 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, 0x1a, + 0x01, 0x00, 0x00, 0x04, 0x1b, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x21, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x22, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x23, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x24, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x25, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x18, 0x01, 0x00, 0x00, + 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, 0x19, 0x01, + 0x00, 0x00, 0x4d, 0x1a, 0x01, 0x00, 0x00, 0x04, + 0x27, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x28, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x28, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x29, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x29, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x2a, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x2b, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x2c, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x2d, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x2e, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x30, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x2b, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x31, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x31, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x32, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x32, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x33, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x2b, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x34, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x34, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x35, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x35, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x36, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x37, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x38, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x39, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x3a, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x3b, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x3c, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x37, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x3d, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x3d, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x3e, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x3e, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x3f, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x37, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x40, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x40, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x41, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x41, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x42, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x43, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x44, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x45, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x46, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x48, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x43, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x49, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x4b, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x4b, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x4c, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x43, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x4d, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x4d, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x4e, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x4e, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x4f, 0x01, 0x00, 0x00, 0x04, 0x50, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x43, + 0x01, 0x00, 0x00, 0x4d, 0x51, 0x01, 0x00, 0x00, + 0x24, 0x01, 0x00, 0xc8, 0xc4, 0x28, 0xa4, 0x05, + 0x01, 0xb5, 0x02, 0x76, 0x53, 0x35, 0x08, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x1c, 0x12, 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_sw_size = 3290; + +const uint8_t intl_relative_sw[3290] = { + 0x01, 0x59, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x04, 0x73, 0x77, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x12, 0x6d, 0x77, 0x61, + 0x6b, 0x61, 0x20, 0x68, 0x75, 0x75, 0x14, 0x6d, + 0x77, 0x61, 0x6b, 0x61, 0x20, 0x75, 0x6a, 0x61, + 0x6f, 0x1c, 0x6d, 0x77, 0x61, 0x6b, 0x61, 0x20, + 0x75, 0x6c, 0x69, 0x6f, 0x70, 0x69, 0x74, 0x61, + 0x04, 0x2d, 0x31, 0x24, 0x62, 0x61, 0x61, 0x64, + 0x61, 0x20, 0x79, 0x61, 0x20, 0x6d, 0x77, 0x61, + 0x6b, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x06, 0x6f, + 0x6e, 0x65, 0x24, 0x62, 0x61, 0x61, 0x64, 0x61, + 0x20, 0x79, 0x61, 0x20, 0x6d, 0x69, 0x61, 0x6b, + 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x0a, 0x6f, 0x74, + 0x68, 0x65, 0x72, 0x0c, 0x66, 0x75, 0x74, 0x75, + 0x72, 0x65, 0x24, 0x6d, 0x77, 0x61, 0x6b, 0x61, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x75, 0x6c, 0x69, + 0x6f, 0x70, 0x69, 0x74, 0x61, 0x26, 0x6d, 0x69, + 0x61, 0x6b, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x69, 0x6c, 0x69, 0x79, 0x6f, 0x70, 0x69, 0x74, + 0x61, 0x08, 0x70, 0x61, 0x73, 0x74, 0x08, 0x79, + 0x65, 0x61, 0x72, 0x14, 0x79, 0x65, 0x61, 0x72, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, 0x79, + 0x65, 0x61, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x22, 0x72, 0x6f, 0x62, 0x6f, 0x20, + 0x68, 0x69, 0x69, 0x20, 0x79, 0x61, 0x20, 0x6d, + 0x77, 0x61, 0x6b, 0x61, 0x30, 0x72, 0x6f, 0x62, + 0x6f, 0x20, 0x79, 0x61, 0x20, 0x6d, 0x77, 0x61, + 0x6b, 0x61, 0x20, 0x69, 0x6e, 0x61, 0x79, 0x6f, + 0x66, 0x75, 0x61, 0x74, 0x61, 0x2e, 0x72, 0x6f, + 0x62, 0x6f, 0x20, 0x79, 0x61, 0x20, 0x6d, 0x77, + 0x61, 0x6b, 0x61, 0x20, 0x69, 0x6c, 0x69, 0x79, + 0x6f, 0x70, 0x69, 0x74, 0x61, 0x22, 0x62, 0x61, + 0x61, 0x64, 0x61, 0x20, 0x79, 0x61, 0x20, 0x72, + 0x6f, 0x62, 0x6f, 0x20, 0x7b, 0x30, 0x7d, 0x24, + 0x72, 0x6f, 0x62, 0x6f, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x69, 0x6c, 0x69, 0x79, 0x6f, 0x70, 0x69, + 0x74, 0x61, 0x26, 0x72, 0x6f, 0x62, 0x6f, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x7a, 0x69, 0x6c, 0x69, + 0x7a, 0x6f, 0x70, 0x69, 0x74, 0x61, 0x0e, 0x71, + 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x1a, 0x71, + 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x1c, 0x71, 0x75, 0x61, + 0x72, 0x74, 0x65, 0x72, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x12, 0x6d, 0x77, 0x65, 0x7a, + 0x69, 0x20, 0x68, 0x75, 0x75, 0x14, 0x6d, 0x77, + 0x65, 0x7a, 0x69, 0x20, 0x75, 0x6a, 0x61, 0x6f, + 0x1c, 0x6d, 0x77, 0x65, 0x7a, 0x69, 0x20, 0x75, + 0x6c, 0x69, 0x6f, 0x70, 0x69, 0x74, 0x61, 0x24, + 0x62, 0x61, 0x61, 0x64, 0x61, 0x20, 0x79, 0x61, + 0x20, 0x6d, 0x77, 0x65, 0x7a, 0x69, 0x20, 0x7b, + 0x30, 0x7d, 0x24, 0x62, 0x61, 0x61, 0x64, 0x61, + 0x20, 0x79, 0x61, 0x20, 0x6d, 0x69, 0x65, 0x7a, + 0x69, 0x20, 0x7b, 0x30, 0x7d, 0x24, 0x6d, 0x77, + 0x65, 0x7a, 0x69, 0x20, 0x7b, 0x30, 0x7d, 0x20, + 0x75, 0x6c, 0x69, 0x6f, 0x70, 0x69, 0x74, 0x61, + 0x26, 0x6d, 0x69, 0x65, 0x7a, 0x69, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x69, 0x6c, 0x69, 0x79, 0x6f, + 0x70, 0x69, 0x74, 0x61, 0x0a, 0x6d, 0x6f, 0x6e, + 0x74, 0x68, 0x16, 0x6d, 0x6f, 0x6e, 0x74, 0x68, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x18, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x10, 0x77, 0x69, 0x6b, 0x69, + 0x20, 0x68, 0x69, 0x69, 0x14, 0x77, 0x69, 0x6b, + 0x69, 0x20, 0x69, 0x6a, 0x61, 0x79, 0x6f, 0x1c, + 0x77, 0x69, 0x6b, 0x69, 0x20, 0x69, 0x6c, 0x69, + 0x79, 0x6f, 0x70, 0x69, 0x74, 0x61, 0x22, 0x62, + 0x61, 0x61, 0x64, 0x61, 0x20, 0x79, 0x61, 0x20, + 0x77, 0x69, 0x6b, 0x69, 0x20, 0x7b, 0x30, 0x7d, + 0x24, 0x77, 0x69, 0x6b, 0x69, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x69, 0x6c, 0x69, 0x79, 0x6f, 0x70, + 0x69, 0x74, 0x61, 0x26, 0x77, 0x69, 0x6b, 0x69, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x7a, 0x69, 0x6c, + 0x69, 0x7a, 0x6f, 0x70, 0x69, 0x74, 0x61, 0x08, + 0x77, 0x65, 0x65, 0x6b, 0x14, 0x77, 0x65, 0x65, + 0x6b, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, + 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x06, 0x6c, 0x65, 0x6f, 0x0a, + 0x6b, 0x65, 0x73, 0x68, 0x6f, 0x16, 0x6b, 0x65, + 0x73, 0x68, 0x6f, 0x20, 0x6b, 0x75, 0x74, 0x77, + 0x61, 0x08, 0x6a, 0x75, 0x7a, 0x69, 0x04, 0x2d, + 0x32, 0x08, 0x6a, 0x61, 0x6e, 0x61, 0x22, 0x62, + 0x61, 0x61, 0x64, 0x61, 0x20, 0x79, 0x61, 0x20, + 0x73, 0x69, 0x6b, 0x75, 0x20, 0x7b, 0x30, 0x7d, + 0x24, 0x73, 0x69, 0x6b, 0x75, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x69, 0x6c, 0x69, 0x79, 0x6f, 0x70, + 0x69, 0x74, 0x61, 0x26, 0x73, 0x69, 0x6b, 0x75, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x7a, 0x69, 0x6c, + 0x69, 0x7a, 0x6f, 0x70, 0x69, 0x74, 0x61, 0x06, + 0x64, 0x61, 0x79, 0x12, 0x64, 0x61, 0x79, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x14, 0x64, 0x61, + 0x79, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x0e, 0x73, 0x61, 0x61, 0x20, 0x68, 0x69, 0x69, + 0x20, 0x62, 0x61, 0x61, 0x64, 0x61, 0x20, 0x79, + 0x61, 0x20, 0x73, 0x61, 0x61, 0x20, 0x7b, 0x30, + 0x7d, 0x22, 0x73, 0x61, 0x61, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x69, 0x6c, 0x69, 0x79, 0x6f, 0x70, + 0x69, 0x74, 0x61, 0x24, 0x73, 0x61, 0x61, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x7a, 0x69, 0x6c, 0x69, + 0x7a, 0x6f, 0x70, 0x69, 0x74, 0x61, 0x08, 0x68, + 0x6f, 0x75, 0x72, 0x14, 0x68, 0x6f, 0x75, 0x72, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x22, 0x53, + 0x61, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x69, + 0x6c, 0x69, 0x79, 0x6f, 0x70, 0x69, 0x74, 0x61, + 0x24, 0x53, 0x61, 0x61, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x7a, 0x69, 0x6c, 0x69, 0x7a, 0x6f, 0x70, + 0x69, 0x74, 0x61, 0x16, 0x68, 0x6f, 0x75, 0x72, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x14, + 0x64, 0x61, 0x6b, 0x69, 0x6b, 0x61, 0x20, 0x68, + 0x69, 0x69, 0x26, 0x62, 0x61, 0x61, 0x64, 0x61, + 0x20, 0x79, 0x61, 0x20, 0x64, 0x61, 0x6b, 0x69, + 0x6b, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x28, 0x64, + 0x61, 0x6b, 0x69, 0x6b, 0x61, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x69, 0x6c, 0x69, 0x79, 0x6f, 0x70, + 0x69, 0x74, 0x61, 0x2a, 0x64, 0x61, 0x6b, 0x69, + 0x6b, 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x7a, + 0x69, 0x6c, 0x69, 0x7a, 0x6f, 0x70, 0x69, 0x74, + 0x61, 0x0c, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, + 0x18, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x12, 0x73, 0x61, 0x73, 0x61, + 0x20, 0x68, 0x69, 0x76, 0x69, 0x28, 0x62, 0x61, + 0x61, 0x64, 0x61, 0x20, 0x79, 0x61, 0x20, 0x73, + 0x65, 0x6b, 0x75, 0x6e, 0x64, 0x65, 0x20, 0x7b, + 0x30, 0x7d, 0x2a, 0x53, 0x65, 0x6b, 0x75, 0x6e, + 0x64, 0x65, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x69, + 0x6c, 0x69, 0x79, 0x6f, 0x70, 0x69, 0x74, 0x61, + 0x2c, 0x53, 0x65, 0x6b, 0x75, 0x6e, 0x64, 0x65, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x7a, 0x69, 0x6c, + 0x69, 0x7a, 0x6f, 0x70, 0x69, 0x74, 0x61, 0x0c, + 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2a, 0x73, + 0x65, 0x6b, 0x75, 0x6e, 0x64, 0x65, 0x20, 0x7b, + 0x30, 0x7d, 0x20, 0x69, 0x6c, 0x69, 0x79, 0x6f, + 0x70, 0x69, 0x74, 0x61, 0x2c, 0x73, 0x65, 0x6b, + 0x75, 0x6e, 0x64, 0x65, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x7a, 0x69, 0x6c, 0x69, 0x7a, 0x6f, 0x70, + 0x69, 0x74, 0x61, 0x18, 0x73, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x1a, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x08, 0x6c, + 0x61, 0x74, 0x6e, 0x04, 0x6e, 0x75, 0x08, 0x64, + 0x61, 0x74, 0x61, 0x70, 0x6e, 0x6f, 0x64, 0x65, + 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, + 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2d, 0x72, 0x65, + 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x2d, 0x74, + 0x69, 0x6d, 0x65, 0x2d, 0x66, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, + 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x73, + 0x77, 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, + 0x9e, 0x01, 0x00, 0x01, 0x00, 0x07, 0x00, 0x00, + 0xe6, 0x0d, 0x01, 0xa0, 0x01, 0x00, 0x00, 0x00, + 0x06, 0xc8, 0x04, 0xd0, 0x00, 0x00, 0x00, 0x39, + 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, 0x00, 0x00, + 0x00, 0xaa, 0x6a, 0xd1, 0x06, 0x00, 0x00, 0x39, + 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, 0x00, 0x00, + 0x00, 0x43, 0xd0, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd3, 0x00, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0xd5, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdf, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xd9, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdf, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe2, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe4, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe7, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xe9, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xeb, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xe7, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe8, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe9, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xec, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xed, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xee, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xef, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xf1, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf2, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf3, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xf4, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xf0, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf1, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf2, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xf5, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xf0, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xf6, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf7, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xf9, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfa, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xfd, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xfc, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xfe, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xfa, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfb, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xfc, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xff, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x00, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x01, 0x01, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0x02, 0x01, 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, + 0x80, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0x04, + 0x01, 0x00, 0x00, 0x04, 0x05, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x06, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0x09, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x00, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x02, 0x01, 0x00, 0x00, + 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, 0x03, 0x01, + 0x00, 0x00, 0x4d, 0x04, 0x01, 0x00, 0x00, 0x04, + 0x05, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x06, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x07, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x08, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x0a, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x00, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x01, 0x01, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0x02, 0x01, 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, + 0x80, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0x04, + 0x01, 0x00, 0x00, 0x04, 0x05, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x06, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0x0b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x0c, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x0d, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0e, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0f, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x10, 0x01, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x0d, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0d, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0e, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0x11, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x0d, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0x14, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x15, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x17, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x18, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x19, 0x01, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x16, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x16, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x17, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x18, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0x1a, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x16, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x18, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0x1b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x1c, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x1d, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x1e, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x1f, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x20, 0x01, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x1d, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x1d, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x21, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x22, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0x23, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x1d, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x22, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0x24, 0x01, 0x00, 0x00, 0x04, 0x25, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x26, + 0x01, 0x00, 0x00, 0x4d, 0x27, 0x01, 0x00, 0x00, + 0x24, 0x01, 0x00, 0xc8, 0xc4, 0x28, 0xd0, 0x04, + 0x01, 0x97, 0x02, 0x76, 0x53, 0x35, 0x08, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x1c, 0x12, 0x1c, + 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_ta_size = 4894; + +const uint8_t intl_relative_ta[4894] = { + 0x01, 0x76, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x04, 0x74, 0x61, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x15, 0x87, 0x0b, 0xa8, + 0x0b, 0xcd, 0x0b, 0xa4, 0x0b, 0x20, 0x00, 0x86, + 0x0b, 0xa3, 0x0b, 0xcd, 0x0b, 0x9f, 0x0b, 0xc1, + 0x0b, 0x19, 0x85, 0x0b, 0x9f, 0x0b, 0xc1, 0x0b, + 0xa4, 0x0b, 0xcd, 0x0b, 0xa4, 0x0b, 0x20, 0x00, + 0x86, 0x0b, 0xa3, 0x0b, 0xcd, 0x0b, 0x9f, 0x0b, + 0xc1, 0x0b, 0x17, 0x95, 0x0b, 0x9f, 0x0b, 0xa8, + 0x0b, 0xcd, 0x0b, 0xa4, 0x0b, 0x20, 0x00, 0x86, + 0x0b, 0xa3, 0x0b, 0xcd, 0x0b, 0x9f, 0x0b, 0xc1, + 0x0b, 0x04, 0x2d, 0x31, 0x17, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x86, 0x0b, 0xa3, + 0x0b, 0xcd, 0x0b, 0x9f, 0x0b, 0xbf, 0x0b, 0xb2, + 0x0b, 0xcd, 0x0b, 0x06, 0x6f, 0x6e, 0x65, 0x1d, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x86, 0x0b, 0xa3, 0x0b, 0xcd, 0x0b, 0x9f, 0x0b, + 0xc1, 0x0b, 0x95, 0x0b, 0xb3, 0x0b, 0xbf, 0x0b, + 0xb2, 0x0b, 0xcd, 0x0b, 0x0a, 0x6f, 0x74, 0x68, + 0x65, 0x72, 0x0c, 0x66, 0x75, 0x74, 0x75, 0x72, + 0x65, 0x25, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x86, 0x0b, 0xa3, 0x0b, 0xcd, 0x0b, + 0x9f, 0x0b, 0xbf, 0x0b, 0xb1, 0x0b, 0xcd, 0x0b, + 0x95, 0x0b, 0xc1, 0x0b, 0x20, 0x00, 0xae, 0x0b, + 0xc1, 0x0b, 0xa9, 0x0b, 0xcd, 0x0b, 0x2b, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x86, + 0x0b, 0xa3, 0x0b, 0xcd, 0x0b, 0x9f, 0x0b, 0xc1, + 0x0b, 0x95, 0x0b, 0xb3, 0x0b, 0xc1, 0x0b, 0x95, + 0x0b, 0xcd, 0x0b, 0x95, 0x0b, 0xc1, 0x0b, 0x20, + 0x00, 0xae, 0x0b, 0xc1, 0x0b, 0xa9, 0x0b, 0xcd, + 0x0b, 0x08, 0x70, 0x61, 0x73, 0x74, 0x08, 0x79, + 0x65, 0x61, 0x72, 0x14, 0x79, 0x65, 0x61, 0x72, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0d, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x86, + 0x0b, 0x2e, 0x00, 0x17, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x86, 0x0b, 0x2e, 0x00, + 0x20, 0x00, 0xae, 0x0b, 0xc1, 0x0b, 0xa9, 0x0b, + 0xcd, 0x0b, 0x16, 0x79, 0x65, 0x61, 0x72, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x1b, 0x87, + 0x0b, 0xa8, 0x0b, 0xcd, 0x0b, 0xa4, 0x0b, 0x20, + 0x00, 0x95, 0x0b, 0xbe, 0x0b, 0xb2, 0x0b, 0xbe, + 0x0b, 0xa3, 0x0b, 0xcd, 0x0b, 0x9f, 0x0b, 0xc1, + 0x0b, 0x1f, 0x85, 0x0b, 0x9f, 0x0b, 0xc1, 0x0b, + 0xa4, 0x0b, 0xcd, 0x0b, 0xa4, 0x0b, 0x20, 0x00, + 0x95, 0x0b, 0xbe, 0x0b, 0xb2, 0x0b, 0xbe, 0x0b, + 0xa3, 0x0b, 0xcd, 0x0b, 0x9f, 0x0b, 0xc1, 0x0b, + 0x1d, 0x95, 0x0b, 0x9f, 0x0b, 0xa8, 0x0b, 0xcd, + 0x0b, 0xa4, 0x0b, 0x20, 0x00, 0x95, 0x0b, 0xbe, + 0x0b, 0xb2, 0x0b, 0xbe, 0x0b, 0xa3, 0x0b, 0xcd, + 0x0b, 0x9f, 0x0b, 0xc1, 0x0b, 0x1f, 0x2b, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x95, 0x0b, 0xbe, 0x0b, 0xb2, 0x0b, 0xbe, 0x0b, + 0xa3, 0x0b, 0xcd, 0x0b, 0x9f, 0x0b, 0xbf, 0x0b, + 0xb2, 0x0b, 0xcd, 0x0b, 0x23, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x95, 0x0b, 0xbe, + 0x0b, 0xb2, 0x0b, 0xbe, 0x0b, 0xa3, 0x0b, 0xcd, + 0x0b, 0x9f, 0x0b, 0xc1, 0x0b, 0x95, 0x0b, 0xb3, + 0x0b, 0xbf, 0x0b, 0xb2, 0x0b, 0xcd, 0x0b, 0x2b, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x95, 0x0b, 0xbe, 0x0b, 0xb2, 0x0b, 0xbe, 0x0b, + 0xa3, 0x0b, 0xcd, 0x0b, 0x9f, 0x0b, 0xc1, 0x0b, + 0x95, 0x0b, 0xcd, 0x0b, 0x95, 0x0b, 0xc1, 0x0b, + 0x20, 0x00, 0xae, 0x0b, 0xc1, 0x0b, 0xa9, 0x0b, + 0xcd, 0x0b, 0x31, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x95, 0x0b, 0xbe, 0x0b, 0xb2, + 0x0b, 0xbe, 0x0b, 0xa3, 0x0b, 0xcd, 0x0b, 0x9f, + 0x0b, 0xc1, 0x0b, 0x95, 0x0b, 0xb3, 0x0b, 0xc1, + 0x0b, 0x95, 0x0b, 0xcd, 0x0b, 0x95, 0x0b, 0xc1, + 0x0b, 0x20, 0x00, 0xae, 0x0b, 0xc1, 0x0b, 0xa9, + 0x0b, 0xcd, 0x0b, 0x0e, 0x71, 0x75, 0x61, 0x72, + 0x74, 0x65, 0x72, 0x1d, 0x87, 0x0b, 0xb1, 0x0b, + 0xc1, 0x0b, 0xa4, 0x0b, 0xbf, 0x0b, 0x20, 0x00, + 0x95, 0x0b, 0xbe, 0x0b, 0xb2, 0x0b, 0xbe, 0x0b, + 0xa3, 0x0b, 0xcd, 0x0b, 0x9f, 0x0b, 0xc1, 0x0b, + 0x13, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x95, 0x0b, 0xbe, 0x0b, 0xb2, 0x0b, 0xbe, + 0x0b, 0x2e, 0x00, 0x1d, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x95, 0x0b, 0xbe, 0x0b, + 0xb2, 0x0b, 0xbe, 0x0b, 0x2e, 0x00, 0x20, 0x00, + 0xae, 0x0b, 0xc1, 0x0b, 0xa9, 0x0b, 0xcd, 0x0b, + 0x1a, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0f, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x95, + 0x0b, 0xbe, 0x0b, 0x2e, 0x00, 0x19, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x95, 0x0b, + 0xbe, 0x0b, 0x2e, 0x00, 0x20, 0x00, 0xae, 0x0b, + 0xc1, 0x0b, 0xa9, 0x0b, 0xcd, 0x0b, 0x1c, 0x71, + 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x15, 0x87, 0x0b, + 0xa8, 0x0b, 0xcd, 0x0b, 0xa4, 0x0b, 0x20, 0x00, + 0xae, 0x0b, 0xbe, 0x0b, 0xa4, 0x0b, 0xae, 0x0b, + 0xcd, 0x0b, 0x19, 0x85, 0x0b, 0x9f, 0x0b, 0xc1, + 0x0b, 0xa4, 0x0b, 0xcd, 0x0b, 0xa4, 0x0b, 0x20, + 0x00, 0xae, 0x0b, 0xbe, 0x0b, 0xa4, 0x0b, 0xae, + 0x0b, 0xcd, 0x0b, 0x17, 0x95, 0x0b, 0x9f, 0x0b, + 0xa8, 0x0b, 0xcd, 0x0b, 0xa4, 0x0b, 0x20, 0x00, + 0xae, 0x0b, 0xbe, 0x0b, 0xa4, 0x0b, 0xae, 0x0b, + 0xcd, 0x0b, 0x1b, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0xae, 0x0b, 0xbe, 0x0b, 0xa4, + 0x0b, 0xa4, 0x0b, 0xcd, 0x0b, 0xa4, 0x0b, 0xbf, + 0x0b, 0xb2, 0x0b, 0xcd, 0x0b, 0x1d, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xae, 0x0b, + 0xbe, 0x0b, 0xa4, 0x0b, 0x99, 0x0b, 0xcd, 0x0b, + 0x95, 0x0b, 0xb3, 0x0b, 0xbf, 0x0b, 0xb2, 0x0b, + 0xcd, 0x0b, 0x29, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0xae, 0x0b, 0xbe, 0x0b, 0xa4, + 0x0b, 0xa4, 0x0b, 0xcd, 0x0b, 0xa4, 0x0b, 0xc1, + 0x0b, 0x95, 0x0b, 0xcd, 0x0b, 0x95, 0x0b, 0xc1, + 0x0b, 0x20, 0x00, 0xae, 0x0b, 0xc1, 0x0b, 0xa9, + 0x0b, 0xcd, 0x0b, 0x2b, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0xae, 0x0b, 0xbe, 0x0b, + 0xa4, 0x0b, 0x99, 0x0b, 0xcd, 0x0b, 0x95, 0x0b, + 0xb3, 0x0b, 0xc1, 0x0b, 0x95, 0x0b, 0xcd, 0x0b, + 0x95, 0x0b, 0xc1, 0x0b, 0x20, 0x00, 0xae, 0x0b, + 0xc1, 0x0b, 0xa9, 0x0b, 0xcd, 0x0b, 0x0a, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x11, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0xae, 0x0b, 0xbe, + 0x0b, 0xa4, 0x0b, 0x2e, 0x00, 0x1b, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xae, 0x0b, + 0xbe, 0x0b, 0xa4, 0x0b, 0x2e, 0x00, 0x20, 0x00, + 0xae, 0x0b, 0xc1, 0x0b, 0xa9, 0x0b, 0xcd, 0x0b, + 0x16, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x0f, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0xae, 0x0b, 0xbe, + 0x0b, 0x2e, 0x00, 0x19, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0xae, 0x0b, 0xbe, 0x0b, + 0x2e, 0x00, 0x20, 0x00, 0xae, 0x0b, 0xc1, 0x0b, + 0xa9, 0x0b, 0xcd, 0x0b, 0x18, 0x6d, 0x6f, 0x6e, + 0x74, 0x68, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x15, 0x87, 0x0b, 0xa8, 0x0b, 0xcd, 0x0b, + 0xa4, 0x0b, 0x20, 0x00, 0xb5, 0x0b, 0xbe, 0x0b, + 0xb0, 0x0b, 0xae, 0x0b, 0xcd, 0x0b, 0x19, 0x85, + 0x0b, 0x9f, 0x0b, 0xc1, 0x0b, 0xa4, 0x0b, 0xcd, + 0x0b, 0xa4, 0x0b, 0x20, 0x00, 0xb5, 0x0b, 0xbe, + 0x0b, 0xb0, 0x0b, 0xae, 0x0b, 0xcd, 0x0b, 0x17, + 0x95, 0x0b, 0x9f, 0x0b, 0xa8, 0x0b, 0xcd, 0x0b, + 0xa4, 0x0b, 0x20, 0x00, 0xb5, 0x0b, 0xbe, 0x0b, + 0xb0, 0x0b, 0xae, 0x0b, 0xcd, 0x0b, 0x1b, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xb5, + 0x0b, 0xbe, 0x0b, 0xb0, 0x0b, 0xa4, 0x0b, 0xcd, + 0x0b, 0xa4, 0x0b, 0xbf, 0x0b, 0xb2, 0x0b, 0xcd, + 0x0b, 0x1d, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0xb5, 0x0b, 0xbe, 0x0b, 0xb0, 0x0b, + 0x99, 0x0b, 0xcd, 0x0b, 0x95, 0x0b, 0xb3, 0x0b, + 0xbf, 0x0b, 0xb2, 0x0b, 0xcd, 0x0b, 0x29, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xb5, + 0x0b, 0xbe, 0x0b, 0xb0, 0x0b, 0xa4, 0x0b, 0xcd, + 0x0b, 0xa4, 0x0b, 0xbf, 0x0b, 0xb1, 0x0b, 0xcd, + 0x0b, 0x95, 0x0b, 0xc1, 0x0b, 0x20, 0x00, 0xae, + 0x0b, 0xc1, 0x0b, 0xa9, 0x0b, 0xcd, 0x0b, 0x2b, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0xb5, 0x0b, 0xbe, 0x0b, 0xb0, 0x0b, 0x99, 0x0b, + 0xcd, 0x0b, 0x95, 0x0b, 0xb3, 0x0b, 0xc1, 0x0b, + 0x95, 0x0b, 0xcd, 0x0b, 0x95, 0x0b, 0xc1, 0x0b, + 0x20, 0x00, 0xae, 0x0b, 0xc1, 0x0b, 0xa9, 0x0b, + 0xcd, 0x0b, 0x08, 0x77, 0x65, 0x65, 0x6b, 0x11, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0xb5, 0x0b, 0xbe, 0x0b, 0xb0, 0x0b, 0x2e, 0x00, + 0x1b, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0xb5, 0x0b, 0xbe, 0x0b, 0xb0, 0x0b, 0x2e, + 0x00, 0x20, 0x00, 0xae, 0x0b, 0xc1, 0x0b, 0xa9, + 0x0b, 0xcd, 0x0b, 0x14, 0x77, 0x65, 0x65, 0x6b, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x0f, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xb5, + 0x0b, 0xbe, 0x0b, 0x2e, 0x00, 0x19, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xb5, 0x0b, + 0xbe, 0x0b, 0x2e, 0x00, 0x20, 0x00, 0xae, 0x0b, + 0xc1, 0x0b, 0xa9, 0x0b, 0xcd, 0x0b, 0x16, 0x77, + 0x65, 0x65, 0x6b, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x0b, 0x87, 0x0b, 0xa9, 0x0b, 0xcd, + 0x0b, 0xb1, 0x0b, 0xc1, 0x0b, 0x09, 0xa8, 0x0b, + 0xbe, 0x0b, 0xb3, 0x0b, 0xc8, 0x0b, 0x19, 0xa8, + 0x0b, 0xbe, 0x0b, 0xb3, 0x0b, 0xc8, 0x0b, 0x20, + 0x00, 0xae, 0x0b, 0xb1, 0x0b, 0xc1, 0x0b, 0xa8, + 0x0b, 0xbe, 0x0b, 0xb3, 0x0b, 0xcd, 0x0b, 0x23, + 0xa8, 0x0b, 0xc7, 0x0b, 0xb1, 0x0b, 0xcd, 0x0b, + 0xb1, 0x0b, 0xc1, 0x0b, 0x20, 0x00, 0xae, 0x0b, + 0xc1, 0x0b, 0xa9, 0x0b, 0xcd, 0x0b, 0x20, 0x00, + 0xa4, 0x0b, 0xbf, 0x0b, 0xa9, 0x0b, 0xae, 0x0b, + 0xcd, 0x0b, 0x04, 0x2d, 0x32, 0x0d, 0xa8, 0x0b, + 0xc7, 0x0b, 0xb1, 0x0b, 0xcd, 0x0b, 0xb1, 0x0b, + 0xc1, 0x0b, 0x15, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0xa8, 0x0b, 0xbe, 0x0b, 0xb3, + 0x0b, 0xbf, 0x0b, 0xb2, 0x0b, 0xcd, 0x0b, 0x1b, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0xa8, 0x0b, 0xbe, 0x0b, 0x9f, 0x0b, 0xcd, 0x0b, + 0x95, 0x0b, 0xb3, 0x0b, 0xbf, 0x0b, 0xb2, 0x0b, + 0xcd, 0x0b, 0x23, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0xa8, 0x0b, 0xbe, 0x0b, 0xb3, + 0x0b, 0xc1, 0x0b, 0x95, 0x0b, 0xcd, 0x0b, 0x95, + 0x0b, 0xc1, 0x0b, 0x20, 0x00, 0xae, 0x0b, 0xc1, + 0x0b, 0xa9, 0x0b, 0xcd, 0x0b, 0x29, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xa8, 0x0b, + 0xbe, 0x0b, 0x9f, 0x0b, 0xcd, 0x0b, 0x95, 0x0b, + 0xb3, 0x0b, 0xc1, 0x0b, 0x95, 0x0b, 0xcd, 0x0b, + 0x95, 0x0b, 0xc1, 0x0b, 0x20, 0x00, 0xae, 0x0b, + 0xc1, 0x0b, 0xa9, 0x0b, 0xcd, 0x0b, 0x06, 0x64, + 0x61, 0x79, 0x12, 0x64, 0x61, 0x79, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x0f, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0xa8, 0x0b, 0xbe, + 0x0b, 0x2e, 0x00, 0x19, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0xa8, 0x0b, 0xbe, 0x0b, + 0x2e, 0x00, 0x20, 0x00, 0xae, 0x0b, 0xc1, 0x0b, + 0xa9, 0x0b, 0xcd, 0x0b, 0x14, 0x64, 0x61, 0x79, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x2b, + 0x87, 0x0b, 0xa8, 0x0b, 0xcd, 0x0b, 0xa4, 0x0b, + 0x20, 0x00, 0x92, 0x0b, 0xb0, 0x0b, 0xc1, 0x0b, + 0x20, 0x00, 0xae, 0x0b, 0xa3, 0x0b, 0xbf, 0x0b, + 0xa8, 0x0b, 0xc7, 0x0b, 0xb0, 0x0b, 0xa4, 0x0b, + 0xcd, 0x0b, 0xa4, 0x0b, 0xbf, 0x0b, 0xb2, 0x0b, + 0xcd, 0x0b, 0x21, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0xae, 0x0b, 0xa3, 0x0b, 0xbf, + 0x0b, 0xa8, 0x0b, 0xc7, 0x0b, 0xb0, 0x0b, 0xa4, + 0x0b, 0xcd, 0x0b, 0xa4, 0x0b, 0xbf, 0x0b, 0xb2, + 0x0b, 0xcd, 0x0b, 0x23, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0xae, 0x0b, 0xa3, 0x0b, + 0xbf, 0x0b, 0xa8, 0x0b, 0xc7, 0x0b, 0xb0, 0x0b, + 0xae, 0x0b, 0xcd, 0x0b, 0x20, 0x00, 0xae, 0x0b, + 0xc1, 0x0b, 0xa9, 0x0b, 0xcd, 0x0b, 0x08, 0x68, + 0x6f, 0x75, 0x72, 0x11, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0xae, 0x0b, 0xa3, 0x0b, + 0xbf, 0x0b, 0x2e, 0x00, 0x1b, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0xae, 0x0b, 0xa3, + 0x0b, 0xbf, 0x0b, 0x2e, 0x00, 0x20, 0x00, 0xae, + 0x0b, 0xc1, 0x0b, 0xa9, 0x0b, 0xcd, 0x0b, 0x14, + 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x0d, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0xae, 0x0b, 0x2e, 0x00, 0x17, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0xae, 0x0b, 0x2e, 0x00, 0x20, 0x00, 0xae, 0x0b, + 0xc1, 0x0b, 0xa9, 0x0b, 0xcd, 0x0b, 0x16, 0x68, + 0x6f, 0x75, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x29, 0x87, 0x0b, 0xa8, 0x0b, 0xcd, + 0x0b, 0xa4, 0x0b, 0x20, 0x00, 0x92, 0x0b, 0xb0, + 0x0b, 0xc1, 0x0b, 0x20, 0x00, 0xa8, 0x0b, 0xbf, + 0x0b, 0xae, 0x0b, 0xbf, 0x0b, 0x9f, 0x0b, 0xa4, + 0x0b, 0xcd, 0x0b, 0xa4, 0x0b, 0xbf, 0x0b, 0xb2, + 0x0b, 0xcd, 0x0b, 0x1f, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0xa8, 0x0b, 0xbf, 0x0b, + 0xae, 0x0b, 0xbf, 0x0b, 0x9f, 0x0b, 0xa4, 0x0b, + 0xcd, 0x0b, 0xa4, 0x0b, 0xbf, 0x0b, 0xb2, 0x0b, + 0xcd, 0x0b, 0x21, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0xa8, 0x0b, 0xbf, 0x0b, 0xae, + 0x0b, 0xbf, 0x0b, 0x9f, 0x0b, 0x99, 0x0b, 0xcd, + 0x0b, 0x95, 0x0b, 0xb3, 0x0b, 0xbf, 0x0b, 0xb2, + 0x0b, 0xcd, 0x0b, 0x2d, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0xa8, 0x0b, 0xbf, 0x0b, + 0xae, 0x0b, 0xbf, 0x0b, 0x9f, 0x0b, 0xa4, 0x0b, + 0xcd, 0x0b, 0xa4, 0x0b, 0xbf, 0x0b, 0xb1, 0x0b, + 0xcd, 0x0b, 0x95, 0x0b, 0xc1, 0x0b, 0x20, 0x00, + 0xae, 0x0b, 0xc1, 0x0b, 0xa9, 0x0b, 0xcd, 0x0b, + 0x2f, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0xa8, 0x0b, 0xbf, 0x0b, 0xae, 0x0b, 0xbf, + 0x0b, 0x9f, 0x0b, 0x99, 0x0b, 0xcd, 0x0b, 0x95, + 0x0b, 0xb3, 0x0b, 0xc1, 0x0b, 0x95, 0x0b, 0xcd, + 0x0b, 0x95, 0x0b, 0xc1, 0x0b, 0x20, 0x00, 0xae, + 0x0b, 0xc1, 0x0b, 0xa9, 0x0b, 0xcd, 0x0b, 0x0c, + 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x13, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xa8, + 0x0b, 0xbf, 0x0b, 0xae, 0x0b, 0xbf, 0x0b, 0x2e, + 0x00, 0x1d, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0xa8, 0x0b, 0xbf, 0x0b, 0xae, 0x0b, + 0xbf, 0x0b, 0x2e, 0x00, 0x20, 0x00, 0xae, 0x0b, + 0xc1, 0x0b, 0xa9, 0x0b, 0xcd, 0x0b, 0x18, 0x6d, + 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x0f, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0xa8, 0x0b, 0xbf, 0x0b, + 0x2e, 0x00, 0x19, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0xa8, 0x0b, 0xbf, 0x0b, 0x2e, + 0x00, 0x20, 0x00, 0xae, 0x0b, 0xc1, 0x0b, 0xa9, + 0x0b, 0xcd, 0x0b, 0x1a, 0x6d, 0x69, 0x6e, 0x75, + 0x74, 0x65, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x0f, 0x87, 0x0b, 0xaa, 0x0b, 0xcd, 0x0b, + 0xaa, 0x0b, 0xcb, 0x0b, 0xa4, 0x0b, 0xc1, 0x0b, + 0x1d, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0xb5, 0x0b, 0xbf, 0x0b, 0xa8, 0x0b, 0xbe, + 0x0b, 0x9f, 0x0b, 0xbf, 0x0b, 0xaf, 0x0b, 0xbf, + 0x0b, 0xb2, 0x0b, 0xcd, 0x0b, 0x1f, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xb5, 0x0b, + 0xbf, 0x0b, 0xa8, 0x0b, 0xbe, 0x0b, 0x9f, 0x0b, + 0xbf, 0x0b, 0x95, 0x0b, 0xb3, 0x0b, 0xbf, 0x0b, + 0xb2, 0x0b, 0xcd, 0x0b, 0x27, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0xb5, 0x0b, 0xbf, + 0x0b, 0xa8, 0x0b, 0xbe, 0x0b, 0x9f, 0x0b, 0xbf, + 0x0b, 0x95, 0x0b, 0xcd, 0x0b, 0x95, 0x0b, 0xc1, + 0x0b, 0x20, 0x00, 0xae, 0x0b, 0xc1, 0x0b, 0xa9, + 0x0b, 0xcd, 0x0b, 0x2d, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0xb5, 0x0b, 0xbf, 0x0b, + 0xa8, 0x0b, 0xbe, 0x0b, 0x9f, 0x0b, 0xbf, 0x0b, + 0x95, 0x0b, 0xb3, 0x0b, 0xc1, 0x0b, 0x95, 0x0b, + 0xcd, 0x0b, 0x95, 0x0b, 0xc1, 0x0b, 0x20, 0x00, + 0xae, 0x0b, 0xc1, 0x0b, 0xa9, 0x0b, 0xcd, 0x0b, + 0x0c, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x13, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0xb5, 0x0b, 0xbf, 0x0b, 0xa8, 0x0b, 0xbe, 0x0b, + 0x2e, 0x00, 0x1d, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0xb5, 0x0b, 0xbf, 0x0b, 0xa8, + 0x0b, 0xbe, 0x0b, 0x2e, 0x00, 0x20, 0x00, 0xae, + 0x0b, 0xc1, 0x0b, 0xa9, 0x0b, 0xcd, 0x0b, 0x18, + 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x0f, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0xb5, 0x0b, 0xbf, + 0x0b, 0x2e, 0x00, 0x19, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0xb5, 0x0b, 0xbf, 0x0b, + 0x2e, 0x00, 0x20, 0x00, 0xae, 0x0b, 0xc1, 0x0b, + 0xa9, 0x0b, 0xcd, 0x0b, 0x1a, 0x73, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, + 0x6e, 0x75, 0x08, 0x64, 0x61, 0x74, 0x61, 0x70, + 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, + 0x6c, 0x2d, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, + 0x76, 0x65, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2d, + 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2f, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, + 0x74, 0x61, 0x2f, 0x74, 0x61, 0x2e, 0x6a, 0x73, + 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, + 0x00, 0x07, 0x00, 0x00, 0xd6, 0x0f, 0x01, 0xa0, + 0x01, 0x00, 0x00, 0x00, 0x06, 0xc8, 0x04, 0xd0, + 0x00, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, + 0x42, 0xd2, 0x00, 0x00, 0x00, 0xaa, 0x6a, 0xc1, + 0x07, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, + 0x42, 0xd2, 0x00, 0x00, 0x00, 0x43, 0xd0, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd3, 0x00, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe3, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xe3, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe5, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xe8, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe9, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xea, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xed, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xee, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xef, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xf1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xee, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf2, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xf4, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xf7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf8, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xfc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xf7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfd, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xff, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xf7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x00, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0x02, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x03, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x05, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x06, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0x0a, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x03, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x05, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0b, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0x0d, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x03, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x05, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0e, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0x10, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x11, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x13, 0x01, 0x00, 0x00, + 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, 0x14, 0x01, + 0x00, 0x00, 0x4d, 0x15, 0x01, 0x00, 0x00, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x18, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x19, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x1a, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x1b, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x11, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x12, 0x01, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0x13, 0x01, 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, + 0x80, 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, 0x15, + 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x17, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x18, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x1a, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0x1c, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x11, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x13, 0x01, 0x00, 0x00, + 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, 0x14, 0x01, + 0x00, 0x00, 0x4d, 0x15, 0x01, 0x00, 0x00, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x1d, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x1d, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x1e, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x1e, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x1f, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x20, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x21, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x22, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x22, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0x23, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x24, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x24, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x25, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x25, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0x26, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x27, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x27, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x28, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x28, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x29, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x2a, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x2b, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x2c, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x2d, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x2e, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0x2f, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x30, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x30, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x31, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x31, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0x32, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x33, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x33, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x34, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x34, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x35, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x36, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x37, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x38, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x39, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x3a, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0x3b, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x3c, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x3c, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x3d, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x3d, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0x3e, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x3f, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x3f, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x40, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x40, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x41, 0x01, + 0x00, 0x00, 0x04, 0x42, 0x01, 0x00, 0x00, 0x26, + 0x01, 0x00, 0x4d, 0x43, 0x01, 0x00, 0x00, 0x4d, + 0x44, 0x01, 0x00, 0x00, 0x24, 0x01, 0x00, 0xc8, + 0xc4, 0x28, 0x8a, 0x05, 0x01, 0xaf, 0x02, 0x76, + 0x53, 0x35, 0x08, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x1c, 0x12, 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_te_size = 4436; + +const uint8_t intl_relative_te[4436] = { + 0x01, 0x6e, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x04, 0x74, 0x65, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x15, 0x08, 0x0c, 0x20, + 0x00, 0x38, 0x0c, 0x02, 0x0c, 0x35, 0x0c, 0x24, + 0x0c, 0x4d, 0x0c, 0x38, 0x0c, 0x30, 0x0c, 0x02, + 0x0c, 0x1f, 0x24, 0x0c, 0x26, 0x0c, 0x41, 0x0c, + 0x2a, 0x0c, 0x30, 0x0c, 0x3f, 0x0c, 0x20, 0x00, + 0x38, 0x0c, 0x02, 0x0c, 0x35, 0x0c, 0x24, 0x0c, + 0x4d, 0x0c, 0x38, 0x0c, 0x30, 0x0c, 0x02, 0x0c, + 0x17, 0x17, 0x0c, 0x24, 0x0c, 0x20, 0x00, 0x38, + 0x0c, 0x02, 0x0c, 0x35, 0x0c, 0x24, 0x0c, 0x4d, + 0x0c, 0x38, 0x0c, 0x30, 0x0c, 0x02, 0x0c, 0x04, + 0x2d, 0x31, 0x1d, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x38, 0x0c, 0x02, 0x0c, 0x35, + 0x0c, 0x24, 0x0c, 0x4d, 0x0c, 0x38, 0x0c, 0x30, + 0x0c, 0x02, 0x0c, 0x32, 0x0c, 0x4b, 0x0c, 0x06, + 0x6f, 0x6e, 0x65, 0x21, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x38, 0x0c, 0x02, 0x0c, + 0x35, 0x0c, 0x24, 0x0c, 0x4d, 0x0c, 0x38, 0x0c, + 0x30, 0x0c, 0x3e, 0x0c, 0x32, 0x0c, 0x4d, 0x0c, + 0x32, 0x0c, 0x4b, 0x0c, 0x0a, 0x6f, 0x74, 0x68, + 0x65, 0x72, 0x0c, 0x66, 0x75, 0x74, 0x75, 0x72, + 0x65, 0x27, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x38, 0x0c, 0x02, 0x0c, 0x35, 0x0c, + 0x24, 0x0c, 0x4d, 0x0c, 0x38, 0x0c, 0x30, 0x0c, + 0x02, 0x0c, 0x20, 0x00, 0x15, 0x0c, 0x4d, 0x0c, + 0x30, 0x0c, 0x3f, 0x0c, 0x24, 0x0c, 0x02, 0x0c, + 0x29, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x38, 0x0c, 0x02, 0x0c, 0x35, 0x0c, 0x24, + 0x0c, 0x4d, 0x0c, 0x38, 0x0c, 0x30, 0x0c, 0x3e, + 0x0c, 0x32, 0x0c, 0x20, 0x00, 0x15, 0x0c, 0x4d, + 0x0c, 0x30, 0x0c, 0x3f, 0x0c, 0x24, 0x0c, 0x02, + 0x0c, 0x08, 0x70, 0x61, 0x73, 0x74, 0x08, 0x79, + 0x65, 0x61, 0x72, 0x0d, 0x08, 0x0c, 0x20, 0x00, + 0x38, 0x0c, 0x02, 0x0c, 0x35, 0x0c, 0x2e, 0x00, + 0x17, 0x24, 0x0c, 0x26, 0x0c, 0x41, 0x0c, 0x2a, + 0x0c, 0x30, 0x0c, 0x3f, 0x0c, 0x20, 0x00, 0x38, + 0x0c, 0x02, 0x0c, 0x35, 0x0c, 0x2e, 0x00, 0x0f, + 0x17, 0x0c, 0x24, 0x0c, 0x20, 0x00, 0x38, 0x0c, + 0x02, 0x0c, 0x35, 0x0c, 0x2e, 0x00, 0x13, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x38, + 0x0c, 0x02, 0x0c, 0x2e, 0x00, 0x32, 0x0c, 0x4b, + 0x0c, 0x17, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x38, 0x0c, 0x02, 0x0c, 0x2e, 0x00, + 0x32, 0x0c, 0x4d, 0x0c, 0x32, 0x0c, 0x4b, 0x0c, + 0x1d, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x38, 0x0c, 0x02, 0x0c, 0x2e, 0x00, 0x20, + 0x00, 0x15, 0x0c, 0x4d, 0x0c, 0x30, 0x0c, 0x3f, + 0x0c, 0x24, 0x0c, 0x02, 0x0c, 0x14, 0x79, 0x65, + 0x61, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x0b, 0x08, 0x0c, 0x20, 0x00, 0x38, 0x0c, 0x02, + 0x0c, 0x2e, 0x00, 0x15, 0x24, 0x0c, 0x26, 0x0c, + 0x41, 0x0c, 0x2a, 0x0c, 0x30, 0x0c, 0x3f, 0x0c, + 0x20, 0x00, 0x38, 0x0c, 0x02, 0x0c, 0x2e, 0x00, + 0x0d, 0x17, 0x0c, 0x24, 0x0c, 0x20, 0x00, 0x38, + 0x0c, 0x02, 0x0c, 0x2e, 0x00, 0x16, 0x79, 0x65, + 0x61, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x19, 0x08, 0x0c, 0x20, 0x00, 0x24, 0x0c, + 0x4d, 0x0c, 0x30, 0x0c, 0x48, 0x0c, 0x2e, 0x0c, + 0x3e, 0x0c, 0x38, 0x0c, 0x3f, 0x0c, 0x15, 0x0c, + 0x02, 0x0c, 0x23, 0x24, 0x0c, 0x26, 0x0c, 0x41, + 0x0c, 0x2a, 0x0c, 0x30, 0x0c, 0x3f, 0x0c, 0x20, + 0x00, 0x24, 0x0c, 0x4d, 0x0c, 0x30, 0x0c, 0x48, + 0x0c, 0x2e, 0x0c, 0x3e, 0x0c, 0x38, 0x0c, 0x3f, + 0x0c, 0x15, 0x0c, 0x02, 0x0c, 0x1b, 0x17, 0x0c, + 0x24, 0x0c, 0x20, 0x00, 0x24, 0x0c, 0x4d, 0x0c, + 0x30, 0x0c, 0x48, 0x0c, 0x2e, 0x0c, 0x3e, 0x0c, + 0x38, 0x0c, 0x3f, 0x0c, 0x15, 0x0c, 0x02, 0x0c, + 0x21, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x24, 0x0c, 0x4d, 0x0c, 0x30, 0x0c, 0x48, + 0x0c, 0x2e, 0x0c, 0x3e, 0x0c, 0x38, 0x0c, 0x3f, + 0x0c, 0x15, 0x0c, 0x02, 0x0c, 0x32, 0x0c, 0x4b, + 0x0c, 0x25, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x24, 0x0c, 0x4d, 0x0c, 0x30, 0x0c, + 0x48, 0x0c, 0x2e, 0x0c, 0x3e, 0x0c, 0x38, 0x0c, + 0x3f, 0x0c, 0x15, 0x0c, 0x3e, 0x0c, 0x32, 0x0c, + 0x4d, 0x0c, 0x32, 0x0c, 0x4b, 0x0c, 0x2b, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x24, + 0x0c, 0x4d, 0x0c, 0x30, 0x0c, 0x48, 0x0c, 0x2e, + 0x0c, 0x3e, 0x0c, 0x38, 0x0c, 0x3f, 0x0c, 0x15, + 0x0c, 0x02, 0x0c, 0x20, 0x00, 0x15, 0x0c, 0x4d, + 0x0c, 0x30, 0x0c, 0x3f, 0x0c, 0x24, 0x0c, 0x02, + 0x0c, 0x2d, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x24, 0x0c, 0x4d, 0x0c, 0x30, 0x0c, + 0x48, 0x0c, 0x2e, 0x0c, 0x3e, 0x0c, 0x38, 0x0c, + 0x3f, 0x0c, 0x15, 0x0c, 0x3e, 0x0c, 0x32, 0x0c, + 0x20, 0x00, 0x15, 0x0c, 0x4d, 0x0c, 0x30, 0x0c, + 0x3f, 0x0c, 0x24, 0x0c, 0x02, 0x0c, 0x0e, 0x71, + 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x1b, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x24, + 0x0c, 0x4d, 0x0c, 0x30, 0x0c, 0x48, 0x0c, 0x2e, + 0x0c, 0x3e, 0x0c, 0x2e, 0x00, 0x32, 0x0c, 0x4b, + 0x0c, 0x1f, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x24, 0x0c, 0x4d, 0x0c, 0x30, 0x0c, + 0x48, 0x0c, 0x2e, 0x0c, 0x3e, 0x0c, 0x2e, 0x00, + 0x32, 0x0c, 0x4d, 0x0c, 0x32, 0x0c, 0x4b, 0x0c, + 0x25, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x24, 0x0c, 0x4d, 0x0c, 0x30, 0x0c, 0x48, + 0x0c, 0x2e, 0x0c, 0x3e, 0x0c, 0x2e, 0x00, 0x20, + 0x00, 0x15, 0x0c, 0x4d, 0x0c, 0x30, 0x0c, 0x3f, + 0x0c, 0x24, 0x0c, 0x02, 0x0c, 0x1a, 0x71, 0x75, + 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x1c, 0x71, 0x75, 0x61, 0x72, + 0x74, 0x65, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x0b, 0x08, 0x0c, 0x20, 0x00, 0x28, + 0x0c, 0x46, 0x0c, 0x32, 0x0c, 0x15, 0x24, 0x0c, + 0x26, 0x0c, 0x41, 0x0c, 0x2a, 0x0c, 0x30, 0x0c, + 0x3f, 0x0c, 0x20, 0x00, 0x28, 0x0c, 0x46, 0x0c, + 0x32, 0x0c, 0x0d, 0x17, 0x0c, 0x24, 0x0c, 0x20, + 0x00, 0x28, 0x0c, 0x46, 0x0c, 0x32, 0x0c, 0x13, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x28, 0x0c, 0x46, 0x0c, 0x32, 0x0c, 0x32, 0x0c, + 0x4b, 0x0c, 0x17, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x28, 0x0c, 0x46, 0x0c, 0x32, + 0x0c, 0x32, 0x0c, 0x4d, 0x0c, 0x32, 0x0c, 0x4b, + 0x0c, 0x1d, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x28, 0x0c, 0x46, 0x0c, 0x32, 0x0c, + 0x20, 0x00, 0x15, 0x0c, 0x4d, 0x0c, 0x30, 0x0c, + 0x3f, 0x0c, 0x24, 0x0c, 0x02, 0x0c, 0x1f, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x28, + 0x0c, 0x46, 0x0c, 0x32, 0x0c, 0x32, 0x0c, 0x20, + 0x00, 0x15, 0x0c, 0x4d, 0x0c, 0x30, 0x0c, 0x3f, + 0x0c, 0x24, 0x0c, 0x02, 0x0c, 0x0a, 0x6d, 0x6f, + 0x6e, 0x74, 0x68, 0x16, 0x6d, 0x6f, 0x6e, 0x74, + 0x68, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x18, + 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x0d, 0x08, 0x0c, 0x20, + 0x00, 0x35, 0x0c, 0x3e, 0x0c, 0x30, 0x0c, 0x02, + 0x0c, 0x17, 0x24, 0x0c, 0x26, 0x0c, 0x41, 0x0c, + 0x2a, 0x0c, 0x30, 0x0c, 0x3f, 0x0c, 0x20, 0x00, + 0x35, 0x0c, 0x3e, 0x0c, 0x30, 0x0c, 0x02, 0x0c, + 0x0f, 0x17, 0x0c, 0x24, 0x0c, 0x20, 0x00, 0x35, + 0x0c, 0x3e, 0x0c, 0x30, 0x0c, 0x02, 0x0c, 0x15, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x35, 0x0c, 0x3e, 0x0c, 0x30, 0x0c, 0x02, 0x0c, + 0x32, 0x0c, 0x4b, 0x0c, 0x19, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x35, 0x0c, 0x3e, + 0x0c, 0x30, 0x0c, 0x3e, 0x0c, 0x32, 0x0c, 0x4d, + 0x0c, 0x32, 0x0c, 0x4b, 0x0c, 0x1f, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x35, 0x0c, + 0x3e, 0x0c, 0x30, 0x0c, 0x02, 0x0c, 0x20, 0x00, + 0x15, 0x0c, 0x4d, 0x0c, 0x30, 0x0c, 0x3f, 0x0c, + 0x24, 0x0c, 0x02, 0x0c, 0x21, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x35, 0x0c, 0x3e, + 0x0c, 0x30, 0x0c, 0x3e, 0x0c, 0x32, 0x0c, 0x20, + 0x00, 0x15, 0x0c, 0x4d, 0x0c, 0x30, 0x0c, 0x3f, + 0x0c, 0x24, 0x0c, 0x02, 0x0c, 0x08, 0x77, 0x65, + 0x65, 0x6b, 0x14, 0x77, 0x65, 0x65, 0x6b, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, 0x77, 0x65, + 0x65, 0x6b, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x0d, 0x08, 0x0c, 0x20, 0x00, 0x30, 0x0c, + 0x4b, 0x0c, 0x1c, 0x0c, 0x41, 0x0c, 0x09, 0x30, + 0x0c, 0x47, 0x0c, 0x2a, 0x0c, 0x41, 0x0c, 0x11, + 0x0e, 0x0c, 0x32, 0x0c, 0x4d, 0x0c, 0x32, 0x0c, + 0x41, 0x0c, 0x02, 0x0c, 0x21, 0x0c, 0x3f, 0x0c, + 0x0b, 0x2e, 0x0c, 0x4a, 0x0c, 0x28, 0x0c, 0x4d, + 0x0c, 0x28, 0x0c, 0x04, 0x2d, 0x32, 0x0b, 0x28, + 0x0c, 0x3f, 0x0c, 0x28, 0x0c, 0x4d, 0x0c, 0x28, + 0x0c, 0x15, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x30, 0x0c, 0x4b, 0x0c, 0x1c, 0x0c, + 0x41, 0x0c, 0x32, 0x0c, 0x4b, 0x0c, 0x19, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x30, + 0x0c, 0x4b, 0x0c, 0x1c, 0x0c, 0x41, 0x0c, 0x32, + 0x0c, 0x4d, 0x0c, 0x32, 0x0c, 0x4b, 0x0c, 0x1f, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x30, 0x0c, 0x4b, 0x0c, 0x1c, 0x0c, 0x41, 0x0c, + 0x20, 0x00, 0x15, 0x0c, 0x4d, 0x0c, 0x30, 0x0c, + 0x3f, 0x0c, 0x24, 0x0c, 0x02, 0x0c, 0x21, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x30, + 0x0c, 0x4b, 0x0c, 0x1c, 0x0c, 0x41, 0x0c, 0x32, + 0x0c, 0x20, 0x00, 0x15, 0x0c, 0x4d, 0x0c, 0x30, + 0x0c, 0x3f, 0x0c, 0x24, 0x0c, 0x02, 0x0c, 0x06, + 0x64, 0x61, 0x79, 0x12, 0x64, 0x61, 0x79, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x14, 0x64, 0x61, + 0x79, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x0b, 0x08, 0x0c, 0x20, 0x00, 0x17, 0x0c, 0x02, + 0x0c, 0x1f, 0x0c, 0x13, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x17, 0x0c, 0x02, 0x0c, + 0x1f, 0x0c, 0x32, 0x0c, 0x4b, 0x0c, 0x17, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x17, + 0x0c, 0x02, 0x0c, 0x1f, 0x0c, 0x32, 0x0c, 0x4d, + 0x0c, 0x32, 0x0c, 0x4b, 0x0c, 0x1d, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x17, 0x0c, + 0x02, 0x0c, 0x1f, 0x0c, 0x20, 0x00, 0x15, 0x0c, + 0x4d, 0x0c, 0x30, 0x0c, 0x3f, 0x0c, 0x24, 0x0c, + 0x02, 0x0c, 0x1f, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x17, 0x0c, 0x02, 0x0c, 0x1f, + 0x0c, 0x32, 0x0c, 0x20, 0x00, 0x15, 0x0c, 0x4d, + 0x0c, 0x30, 0x0c, 0x3f, 0x0c, 0x24, 0x0c, 0x02, + 0x0c, 0x08, 0x68, 0x6f, 0x75, 0x72, 0x13, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x17, + 0x0c, 0x02, 0x0c, 0x2e, 0x00, 0x32, 0x0c, 0x4b, + 0x0c, 0x1d, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x17, 0x0c, 0x02, 0x0c, 0x2e, 0x00, + 0x20, 0x00, 0x15, 0x0c, 0x4d, 0x0c, 0x30, 0x0c, + 0x3f, 0x0c, 0x24, 0x0c, 0x02, 0x0c, 0x14, 0x68, + 0x6f, 0x75, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x16, 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x11, 0x08, 0x0c, + 0x20, 0x00, 0x28, 0x0c, 0x3f, 0x0c, 0x2e, 0x0c, + 0x3f, 0x0c, 0x37, 0x0c, 0x02, 0x0c, 0x19, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x28, + 0x0c, 0x3f, 0x0c, 0x2e, 0x0c, 0x3f, 0x0c, 0x37, + 0x0c, 0x02, 0x0c, 0x32, 0x0c, 0x4b, 0x0c, 0x1d, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x28, 0x0c, 0x3f, 0x0c, 0x2e, 0x0c, 0x3f, 0x0c, + 0x37, 0x0c, 0x3e, 0x0c, 0x32, 0x0c, 0x4d, 0x0c, + 0x32, 0x0c, 0x4b, 0x0c, 0x23, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x28, 0x0c, 0x3f, + 0x0c, 0x2e, 0x0c, 0x3f, 0x0c, 0x37, 0x0c, 0x02, + 0x0c, 0x20, 0x00, 0x15, 0x0c, 0x4d, 0x0c, 0x30, + 0x0c, 0x3f, 0x0c, 0x24, 0x0c, 0x02, 0x0c, 0x25, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x28, 0x0c, 0x3f, 0x0c, 0x2e, 0x0c, 0x3f, 0x0c, + 0x37, 0x0c, 0x3e, 0x0c, 0x32, 0x0c, 0x20, 0x00, + 0x15, 0x0c, 0x4d, 0x0c, 0x30, 0x0c, 0x3f, 0x0c, + 0x24, 0x0c, 0x02, 0x0c, 0x0c, 0x6d, 0x69, 0x6e, + 0x75, 0x74, 0x65, 0x17, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x28, 0x0c, 0x3f, 0x0c, + 0x2e, 0x0c, 0x3f, 0x0c, 0x2e, 0x00, 0x32, 0x0c, + 0x4b, 0x0c, 0x21, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x28, 0x0c, 0x3f, 0x0c, 0x2e, + 0x0c, 0x3f, 0x0c, 0x2e, 0x00, 0x20, 0x00, 0x15, + 0x0c, 0x4d, 0x0c, 0x30, 0x0c, 0x3f, 0x0c, 0x24, + 0x0c, 0x02, 0x0c, 0x18, 0x6d, 0x69, 0x6e, 0x75, + 0x74, 0x65, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x13, 0x2a, 0x0c, 0x4d, 0x0c, 0x30, 0x0c, 0x38, + 0x0c, 0x4d, 0x0c, 0x24, 0x0c, 0x41, 0x0c, 0x24, + 0x0c, 0x02, 0x0c, 0x17, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x38, 0x0c, 0x46, 0x0c, + 0x15, 0x0c, 0x28, 0x0c, 0x41, 0x0c, 0x32, 0x0c, + 0x4b, 0x0c, 0x19, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x38, 0x0c, 0x46, 0x0c, 0x15, + 0x0c, 0x28, 0x0c, 0x4d, 0x0c, 0x32, 0x0c, 0x32, + 0x0c, 0x4b, 0x0c, 0x21, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x38, 0x0c, 0x46, 0x0c, + 0x15, 0x0c, 0x28, 0x0c, 0x41, 0x0c, 0x20, 0x00, + 0x15, 0x0c, 0x4d, 0x0c, 0x30, 0x0c, 0x3f, 0x0c, + 0x24, 0x0c, 0x02, 0x0c, 0x23, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x38, 0x0c, 0x46, + 0x0c, 0x15, 0x0c, 0x28, 0x0c, 0x4d, 0x0c, 0x32, + 0x0c, 0x20, 0x00, 0x15, 0x0c, 0x4d, 0x0c, 0x30, + 0x0c, 0x3f, 0x0c, 0x24, 0x0c, 0x02, 0x0c, 0x0c, + 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x1f, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x38, + 0x0c, 0x46, 0x0c, 0x15, 0x0c, 0x2e, 0x00, 0x20, + 0x00, 0x15, 0x0c, 0x4d, 0x0c, 0x30, 0x0c, 0x3f, + 0x0c, 0x24, 0x0c, 0x02, 0x0c, 0x18, 0x73, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x15, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x38, 0x0c, 0x46, 0x0c, 0x15, + 0x0c, 0x2e, 0x00, 0x32, 0x0c, 0x4b, 0x0c, 0x17, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x38, 0x0c, 0x46, 0x0c, 0x15, 0x0c, 0x2e, 0x00, + 0x20, 0x00, 0x32, 0x0c, 0x4b, 0x0c, 0x1a, 0x73, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x1a, 0x6d, 0x69, 0x6e, + 0x75, 0x74, 0x65, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, + 0x6e, 0x75, 0x08, 0x64, 0x61, 0x74, 0x61, 0x70, + 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, + 0x6c, 0x2d, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, + 0x76, 0x65, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2d, + 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2f, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, + 0x74, 0x61, 0x2f, 0x74, 0x65, 0x2e, 0x6a, 0x73, + 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, + 0x00, 0x07, 0x00, 0x00, 0x9a, 0x0f, 0x01, 0xa0, + 0x01, 0x00, 0x00, 0x00, 0x06, 0xc8, 0x04, 0xd0, + 0x00, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, + 0x42, 0xd2, 0x00, 0x00, 0x00, 0xaa, 0x6a, 0x85, + 0x07, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, + 0x42, 0xd2, 0x00, 0x00, 0x00, 0x43, 0xd0, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd3, 0x00, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xdf, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe2, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xe3, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xe4, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe5, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe9, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe5, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xec, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xed, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xee, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xef, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf0, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xf4, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xf7, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xf8, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xf1, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf7, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf7, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xf9, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xfa, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xfb, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xfe, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xff, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xfa, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xfb, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xfe, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xff, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x02, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0xfa, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xfb, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xfe, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xff, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x03, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x04, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x05, 0x01, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0x06, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x08, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x09, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0a, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x0b, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x04, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x05, 0x01, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0x06, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x08, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x09, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0a, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x0c, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x04, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x05, 0x01, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0x06, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x08, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x09, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0a, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x0d, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x0e, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x01, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0x10, 0x01, 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, + 0x80, 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, 0x12, + 0x01, 0x00, 0x00, 0x04, 0x13, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x14, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0x18, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x0e, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0x10, 0x01, 0x00, 0x00, + 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, 0x11, 0x01, + 0x00, 0x00, 0x4d, 0x12, 0x01, 0x00, 0x00, 0x04, + 0x13, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x16, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x17, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x19, 0x01, + 0x00, 0x00, 0x0b, 0x04, 0x0e, 0x01, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x0f, 0x01, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0x10, 0x01, 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, + 0x80, 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, 0x12, + 0x01, 0x00, 0x00, 0x04, 0x13, 0x01, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x14, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x15, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0x1a, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x1b, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x1c, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x1d, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x1e, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x1f, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x20, 0x01, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x21, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x21, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x22, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x22, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0x23, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x21, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x22, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x22, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0x24, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x25, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x26, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x27, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x28, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x29, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x2a, 0x01, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x2b, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x2b, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x2c, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x2c, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0x2d, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x2e, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, + 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x30, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x31, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x32, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0x33, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x30, 0x01, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x34, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x34, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x35, 0x01, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x36, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x37, + 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x34, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x34, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0x38, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x2b, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x2b, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x2c, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x2c, 0x01, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0x39, 0x01, 0x00, 0x00, 0x04, 0x3a, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x3b, + 0x01, 0x00, 0x00, 0x4d, 0x3c, 0x01, 0x00, 0x00, + 0x24, 0x01, 0x00, 0xc8, 0xc4, 0x28, 0xfa, 0x04, + 0x01, 0xa9, 0x02, 0x76, 0x53, 0x35, 0x08, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x1c, + 0x12, 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_th_size = 3501; + +const uint8_t intl_relative_th[3501] = { + 0x01, 0x58, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x04, 0x74, 0x68, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x0b, 0x1b, 0x0e, 0x35, + 0x0e, 0x19, 0x0e, 0x35, 0x0e, 0x49, 0x0e, 0x0d, + 0x1b, 0x0e, 0x35, 0x0e, 0x2b, 0x0e, 0x19, 0x0e, + 0x49, 0x0e, 0x32, 0x0e, 0x13, 0x1b, 0x0e, 0x35, + 0x0e, 0x17, 0x0e, 0x35, 0x0e, 0x48, 0x0e, 0x41, + 0x0e, 0x25, 0x0e, 0x49, 0x0e, 0x27, 0x0e, 0x04, + 0x2d, 0x31, 0x19, 0x43, 0x0e, 0x19, 0x0e, 0x2d, + 0x0e, 0x35, 0x0e, 0x01, 0x0e, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x1b, + 0x0e, 0x35, 0x0e, 0x0a, 0x6f, 0x74, 0x68, 0x65, + 0x72, 0x0c, 0x66, 0x75, 0x74, 0x75, 0x72, 0x65, + 0x1b, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x1b, 0x0e, 0x35, 0x0e, 0x17, 0x0e, 0x35, + 0x0e, 0x48, 0x0e, 0x41, 0x0e, 0x25, 0x0e, 0x49, + 0x0e, 0x27, 0x0e, 0x08, 0x70, 0x61, 0x73, 0x74, + 0x08, 0x79, 0x65, 0x61, 0x72, 0x13, 0x43, 0x0e, + 0x19, 0x0e, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x1b, 0x0e, 0x35, 0x0e, + 0x14, 0x79, 0x65, 0x61, 0x72, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x16, 0x79, 0x65, 0x61, 0x72, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x13, + 0x44, 0x0e, 0x15, 0x0e, 0x23, 0x0e, 0x21, 0x0e, + 0x32, 0x0e, 0x2a, 0x0e, 0x19, 0x0e, 0x35, 0x0e, + 0x49, 0x0e, 0x15, 0x44, 0x0e, 0x15, 0x0e, 0x23, + 0x0e, 0x21, 0x0e, 0x32, 0x0e, 0x2a, 0x0e, 0x2b, + 0x0e, 0x19, 0x0e, 0x49, 0x0e, 0x32, 0x0e, 0x1b, + 0x44, 0x0e, 0x15, 0x0e, 0x23, 0x0e, 0x21, 0x0e, + 0x32, 0x0e, 0x2a, 0x0e, 0x17, 0x0e, 0x35, 0x0e, + 0x48, 0x0e, 0x41, 0x0e, 0x25, 0x0e, 0x49, 0x0e, + 0x27, 0x0e, 0x21, 0x43, 0x0e, 0x19, 0x0e, 0x2d, + 0x0e, 0x35, 0x0e, 0x01, 0x0e, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x44, + 0x0e, 0x15, 0x0e, 0x23, 0x0e, 0x21, 0x0e, 0x32, + 0x0e, 0x2a, 0x0e, 0x23, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x44, 0x0e, 0x15, 0x0e, + 0x23, 0x0e, 0x21, 0x0e, 0x32, 0x0e, 0x2a, 0x0e, + 0x17, 0x0e, 0x35, 0x0e, 0x48, 0x0e, 0x41, 0x0e, + 0x25, 0x0e, 0x49, 0x0e, 0x27, 0x0e, 0x0e, 0x71, + 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x1b, 0x43, + 0x0e, 0x19, 0x0e, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x44, 0x0e, 0x15, + 0x0e, 0x23, 0x0e, 0x21, 0x0e, 0x32, 0x0e, 0x2a, + 0x0e, 0x1a, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, + 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1c, + 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x11, 0x40, + 0x0e, 0x14, 0x0e, 0x37, 0x0e, 0x2d, 0x0e, 0x19, + 0x0e, 0x19, 0x0e, 0x35, 0x0e, 0x49, 0x0e, 0x13, + 0x40, 0x0e, 0x14, 0x0e, 0x37, 0x0e, 0x2d, 0x0e, + 0x19, 0x0e, 0x2b, 0x0e, 0x19, 0x0e, 0x49, 0x0e, + 0x32, 0x0e, 0x19, 0x40, 0x0e, 0x14, 0x0e, 0x37, + 0x0e, 0x2d, 0x0e, 0x19, 0x0e, 0x17, 0x0e, 0x35, + 0x0e, 0x48, 0x0e, 0x41, 0x0e, 0x25, 0x0e, 0x49, + 0x0e, 0x27, 0x0e, 0x1f, 0x43, 0x0e, 0x19, 0x0e, + 0x2d, 0x0e, 0x35, 0x0e, 0x01, 0x0e, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x40, 0x0e, 0x14, 0x0e, 0x37, 0x0e, 0x2d, 0x0e, + 0x19, 0x0e, 0x25, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x40, 0x0e, 0x14, 0x0e, 0x37, + 0x0e, 0x2d, 0x0e, 0x19, 0x0e, 0x17, 0x0e, 0x35, + 0x0e, 0x48, 0x0e, 0x1c, 0x0e, 0x48, 0x0e, 0x32, + 0x0e, 0x19, 0x0e, 0x21, 0x0e, 0x32, 0x0e, 0x0a, + 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x19, 0x43, 0x0e, + 0x19, 0x0e, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x40, 0x0e, 0x14, 0x0e, + 0x37, 0x0e, 0x2d, 0x0e, 0x19, 0x0e, 0x21, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x40, + 0x0e, 0x14, 0x0e, 0x37, 0x0e, 0x2d, 0x0e, 0x19, + 0x0e, 0x17, 0x0e, 0x35, 0x0e, 0x48, 0x0e, 0x41, + 0x0e, 0x25, 0x0e, 0x49, 0x0e, 0x27, 0x0e, 0x16, + 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x18, 0x6d, 0x6f, 0x6e, 0x74, + 0x68, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x15, 0x2a, 0x0e, 0x31, 0x0e, 0x1b, 0x0e, 0x14, + 0x0e, 0x32, 0x0e, 0x2b, 0x0e, 0x4c, 0x0e, 0x19, + 0x0e, 0x35, 0x0e, 0x49, 0x0e, 0x17, 0x2a, 0x0e, + 0x31, 0x0e, 0x1b, 0x0e, 0x14, 0x0e, 0x32, 0x0e, + 0x2b, 0x0e, 0x4c, 0x0e, 0x2b, 0x0e, 0x19, 0x0e, + 0x49, 0x0e, 0x32, 0x0e, 0x1d, 0x2a, 0x0e, 0x31, + 0x0e, 0x1b, 0x0e, 0x14, 0x0e, 0x32, 0x0e, 0x2b, + 0x0e, 0x4c, 0x0e, 0x17, 0x0e, 0x35, 0x0e, 0x48, + 0x0e, 0x41, 0x0e, 0x25, 0x0e, 0x49, 0x0e, 0x27, + 0x0e, 0x23, 0x43, 0x0e, 0x19, 0x0e, 0x2d, 0x0e, + 0x35, 0x0e, 0x01, 0x0e, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x2a, 0x0e, + 0x31, 0x0e, 0x1b, 0x0e, 0x14, 0x0e, 0x32, 0x0e, + 0x2b, 0x0e, 0x4c, 0x0e, 0x29, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x2a, 0x0e, 0x31, + 0x0e, 0x1b, 0x0e, 0x14, 0x0e, 0x32, 0x0e, 0x2b, + 0x0e, 0x4c, 0x0e, 0x17, 0x0e, 0x35, 0x0e, 0x48, + 0x0e, 0x1c, 0x0e, 0x48, 0x0e, 0x32, 0x0e, 0x19, + 0x0e, 0x21, 0x0e, 0x32, 0x0e, 0x08, 0x77, 0x65, + 0x65, 0x6b, 0x1d, 0x43, 0x0e, 0x19, 0x0e, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x2a, 0x0e, 0x31, 0x0e, 0x1b, 0x0e, 0x14, + 0x0e, 0x32, 0x0e, 0x2b, 0x0e, 0x4c, 0x0e, 0x25, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x2a, 0x0e, 0x31, 0x0e, 0x1b, 0x0e, 0x14, 0x0e, + 0x32, 0x0e, 0x2b, 0x0e, 0x4c, 0x0e, 0x17, 0x0e, + 0x35, 0x0e, 0x48, 0x0e, 0x41, 0x0e, 0x25, 0x0e, + 0x49, 0x0e, 0x27, 0x0e, 0x14, 0x77, 0x65, 0x65, + 0x6b, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, + 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x0d, 0x27, 0x0e, 0x31, 0x0e, + 0x19, 0x0e, 0x19, 0x0e, 0x35, 0x0e, 0x49, 0x0e, + 0x11, 0x1e, 0x0e, 0x23, 0x0e, 0x38, 0x0e, 0x48, + 0x0e, 0x07, 0x0e, 0x19, 0x0e, 0x35, 0x0e, 0x49, + 0x0e, 0x11, 0x21, 0x0e, 0x30, 0x0e, 0x23, 0x0e, + 0x37, 0x0e, 0x19, 0x0e, 0x19, 0x0e, 0x35, 0x0e, + 0x49, 0x0e, 0x17, 0x40, 0x0e, 0x21, 0x0e, 0x37, + 0x0e, 0x48, 0x0e, 0x2d, 0x0e, 0x27, 0x0e, 0x32, + 0x0e, 0x19, 0x0e, 0x0b, 0x0e, 0x37, 0x0e, 0x19, + 0x0e, 0x04, 0x2d, 0x32, 0x11, 0x40, 0x0e, 0x21, + 0x0e, 0x37, 0x0e, 0x48, 0x0e, 0x2d, 0x0e, 0x27, + 0x0e, 0x32, 0x0e, 0x19, 0x0e, 0x1b, 0x43, 0x0e, + 0x19, 0x0e, 0x2d, 0x0e, 0x35, 0x0e, 0x01, 0x0e, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x27, 0x0e, 0x31, 0x0e, 0x19, 0x0e, + 0x21, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x27, 0x0e, 0x31, 0x0e, 0x19, 0x0e, 0x17, + 0x0e, 0x35, 0x0e, 0x48, 0x0e, 0x1c, 0x0e, 0x48, + 0x0e, 0x32, 0x0e, 0x19, 0x0e, 0x21, 0x0e, 0x32, + 0x0e, 0x06, 0x64, 0x61, 0x79, 0x15, 0x43, 0x0e, + 0x19, 0x0e, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x27, 0x0e, 0x31, 0x0e, + 0x19, 0x0e, 0x1d, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x27, 0x0e, 0x31, 0x0e, 0x19, + 0x0e, 0x17, 0x0e, 0x35, 0x0e, 0x48, 0x0e, 0x41, + 0x0e, 0x25, 0x0e, 0x49, 0x0e, 0x27, 0x0e, 0x12, + 0x64, 0x61, 0x79, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x14, 0x64, 0x61, 0x79, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x15, 0x0a, 0x0e, 0x31, + 0x0e, 0x48, 0x0e, 0x27, 0x0e, 0x42, 0x0e, 0x21, + 0x0e, 0x07, 0x0e, 0x19, 0x0e, 0x35, 0x0e, 0x49, + 0x0e, 0x23, 0x43, 0x0e, 0x19, 0x0e, 0x2d, 0x0e, + 0x35, 0x0e, 0x01, 0x0e, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x0a, 0x0e, + 0x31, 0x0e, 0x48, 0x0e, 0x27, 0x0e, 0x42, 0x0e, + 0x21, 0x0e, 0x07, 0x0e, 0x29, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x0a, 0x0e, 0x31, + 0x0e, 0x48, 0x0e, 0x27, 0x0e, 0x42, 0x0e, 0x21, + 0x0e, 0x07, 0x0e, 0x17, 0x0e, 0x35, 0x0e, 0x48, + 0x0e, 0x1c, 0x0e, 0x48, 0x0e, 0x32, 0x0e, 0x19, + 0x0e, 0x21, 0x0e, 0x32, 0x0e, 0x08, 0x68, 0x6f, + 0x75, 0x72, 0x15, 0x43, 0x0e, 0x19, 0x0e, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x0a, 0x0e, 0x21, 0x0e, 0x2e, 0x00, 0x1f, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x0a, 0x0e, 0x21, 0x0e, 0x2e, 0x00, 0x20, 0x00, + 0x17, 0x0e, 0x35, 0x0e, 0x48, 0x0e, 0x41, 0x0e, + 0x25, 0x0e, 0x49, 0x0e, 0x27, 0x0e, 0x14, 0x68, + 0x6f, 0x75, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x16, 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0f, 0x19, 0x0e, + 0x32, 0x0e, 0x17, 0x0e, 0x35, 0x0e, 0x19, 0x0e, + 0x35, 0x0e, 0x49, 0x0e, 0x1d, 0x43, 0x0e, 0x19, + 0x0e, 0x2d, 0x0e, 0x35, 0x0e, 0x01, 0x0e, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x19, 0x0e, 0x32, 0x0e, 0x17, 0x0e, 0x35, + 0x0e, 0x23, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x19, 0x0e, 0x32, 0x0e, 0x17, 0x0e, + 0x35, 0x0e, 0x17, 0x0e, 0x35, 0x0e, 0x48, 0x0e, + 0x1c, 0x0e, 0x48, 0x0e, 0x32, 0x0e, 0x19, 0x0e, + 0x21, 0x0e, 0x32, 0x0e, 0x0c, 0x6d, 0x69, 0x6e, + 0x75, 0x74, 0x65, 0x17, 0x43, 0x0e, 0x19, 0x0e, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x19, 0x0e, 0x32, 0x0e, 0x17, 0x0e, + 0x35, 0x0e, 0x1f, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x19, 0x0e, 0x32, 0x0e, 0x17, + 0x0e, 0x35, 0x0e, 0x17, 0x0e, 0x35, 0x0e, 0x48, + 0x0e, 0x41, 0x0e, 0x25, 0x0e, 0x49, 0x0e, 0x27, + 0x0e, 0x1a, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0d, + 0x02, 0x0e, 0x13, 0x0e, 0x30, 0x0e, 0x19, 0x0e, + 0x35, 0x0e, 0x49, 0x0e, 0x21, 0x43, 0x0e, 0x19, + 0x0e, 0x2d, 0x0e, 0x35, 0x0e, 0x01, 0x0e, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x27, 0x0e, 0x34, 0x0e, 0x19, 0x0e, 0x32, + 0x0e, 0x17, 0x0e, 0x35, 0x0e, 0x27, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x27, 0x0e, + 0x34, 0x0e, 0x19, 0x0e, 0x32, 0x0e, 0x17, 0x0e, + 0x35, 0x0e, 0x17, 0x0e, 0x35, 0x0e, 0x48, 0x0e, + 0x1c, 0x0e, 0x48, 0x0e, 0x32, 0x0e, 0x19, 0x0e, + 0x21, 0x0e, 0x32, 0x0e, 0x0c, 0x73, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x1b, 0x43, 0x0e, 0x19, 0x0e, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x27, 0x0e, 0x34, 0x0e, 0x19, 0x0e, + 0x32, 0x0e, 0x17, 0x0e, 0x35, 0x0e, 0x23, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x27, + 0x0e, 0x34, 0x0e, 0x19, 0x0e, 0x32, 0x0e, 0x17, + 0x0e, 0x35, 0x0e, 0x17, 0x0e, 0x35, 0x0e, 0x48, + 0x0e, 0x41, 0x0e, 0x25, 0x0e, 0x49, 0x0e, 0x27, + 0x0e, 0x18, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x73, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x18, 0x6d, 0x69, 0x6e, + 0x75, 0x74, 0x65, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, + 0x75, 0x08, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6e, + 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, + 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, + 0x2d, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, + 0x65, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2d, 0x66, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2f, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, + 0x61, 0x2f, 0x74, 0x68, 0x2e, 0x6a, 0x73, 0x0d, + 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, + 0x07, 0x00, 0x00, 0xf6, 0x0b, 0x01, 0xa0, 0x01, + 0x00, 0x00, 0x00, 0x06, 0xc8, 0x04, 0xd0, 0x00, + 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, + 0xd2, 0x00, 0x00, 0x00, 0xaa, 0x6a, 0xe1, 0x05, + 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, + 0xd2, 0x00, 0x00, 0x00, 0x43, 0xd0, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd3, 0x00, 0x00, 0x00, 0x4d, + 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xd5, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xd7, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xdf, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd5, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xdf, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xdc, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe2, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xe3, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xe4, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe2, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xe3, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe8, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xe9, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe2, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xe3, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xe4, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xea, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xee, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xef, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xf0, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xec, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xed, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xf3, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xeb, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf1, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf2, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xf4, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xf6, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xf7, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xfa, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf5, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfb, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xfc, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xfd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xf6, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xf7, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xfe, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xff, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, + 0x02, 0x00, 0x00, 0x80, 0x04, 0x02, 0x01, 0x00, + 0x00, 0x4d, 0x03, 0x01, 0x00, 0x00, 0x04, 0x04, + 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0x07, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xff, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, + 0x02, 0x00, 0x00, 0x80, 0x04, 0x02, 0x01, 0x00, + 0x00, 0x4d, 0x03, 0x01, 0x00, 0x00, 0x04, 0x04, + 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0x0a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xff, + 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, + 0x02, 0x00, 0x00, 0x80, 0x04, 0x02, 0x01, 0x00, + 0x00, 0x4d, 0x03, 0x01, 0x00, 0x00, 0x04, 0x04, + 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0x0b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x0c, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x0b, 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0x0f, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x10, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x11, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x12, + 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x10, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x11, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x13, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x15, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x16, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x17, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x18, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x19, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0x1a, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x1b, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x0b, 0x04, 0x1c, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x1d, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0x1e, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x1f, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x20, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0x21, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0x1f, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x20, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x22, + 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x18, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x19, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x23, 0x01, 0x00, + 0x00, 0x04, 0x24, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x25, 0x01, 0x00, 0x00, 0x4d, 0x26, + 0x01, 0x00, 0x00, 0x24, 0x01, 0x00, 0xc8, 0xc4, + 0x28, 0xce, 0x04, 0x01, 0xff, 0x01, 0x76, 0x53, + 0x35, 0x08, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, + 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, + 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, + 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, + 0x1c, 0x12, 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_tr_size = 3415; + +const uint8_t intl_relative_tr[3415] = { + 0x01, 0x5b, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x04, 0x74, 0x72, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x0d, 0x62, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x79, 0x00, 0x31, 0x01, 0x6c, + 0x00, 0x17, 0x67, 0x00, 0x65, 0x00, 0x6c, 0x00, + 0x65, 0x00, 0x63, 0x00, 0x65, 0x00, 0x6b, 0x00, + 0x20, 0x00, 0x79, 0x00, 0x31, 0x01, 0x6c, 0x00, + 0x13, 0x67, 0x00, 0x65, 0x00, 0xe7, 0x00, 0x65, + 0x00, 0x6e, 0x00, 0x20, 0x00, 0x79, 0x00, 0x31, + 0x01, 0x6c, 0x00, 0x04, 0x2d, 0x31, 0x1b, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x79, + 0x00, 0x31, 0x01, 0x6c, 0x00, 0x20, 0x00, 0x73, + 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x72, 0x00, 0x61, + 0x00, 0x06, 0x6f, 0x6e, 0x65, 0x0a, 0x6f, 0x74, + 0x68, 0x65, 0x72, 0x0c, 0x66, 0x75, 0x74, 0x75, + 0x72, 0x65, 0x19, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x79, 0x00, 0x31, 0x01, 0x6c, + 0x00, 0x20, 0x00, 0xf6, 0x00, 0x6e, 0x00, 0x63, + 0x00, 0x65, 0x00, 0x08, 0x70, 0x61, 0x73, 0x74, + 0x08, 0x79, 0x65, 0x61, 0x72, 0x14, 0x79, 0x65, + 0x61, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x16, 0x79, 0x65, 0x61, 0x72, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x12, 0x62, 0x75, 0x20, + 0xe7, 0x65, 0x79, 0x72, 0x65, 0x6b, 0x1c, 0x67, + 0x65, 0x6c, 0x65, 0x63, 0x65, 0x6b, 0x20, 0xe7, + 0x65, 0x79, 0x72, 0x65, 0x6b, 0x18, 0x67, 0x65, + 0xe7, 0x65, 0x6e, 0x20, 0xe7, 0x65, 0x79, 0x72, + 0x65, 0x6b, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0xe7, + 0x65, 0x79, 0x72, 0x65, 0x6b, 0x20, 0x73, 0x6f, + 0x6e, 0x72, 0x61, 0x1e, 0x7b, 0x30, 0x7d, 0x20, + 0xe7, 0x65, 0x79, 0x72, 0x65, 0x6b, 0x20, 0xf6, + 0x6e, 0x63, 0x65, 0x0e, 0x71, 0x75, 0x61, 0x72, + 0x74, 0x65, 0x72, 0x0e, 0x62, 0x75, 0x20, 0xe7, + 0x79, 0x72, 0x2e, 0x18, 0x67, 0x65, 0x6c, 0x65, + 0x63, 0x65, 0x6b, 0x20, 0xe7, 0x79, 0x72, 0x2e, + 0x14, 0x67, 0x65, 0xe7, 0x65, 0x6e, 0x20, 0xe7, + 0x79, 0x72, 0x2e, 0x1c, 0x7b, 0x30, 0x7d, 0x20, + 0xe7, 0x79, 0x72, 0x2e, 0x20, 0x73, 0x6f, 0x6e, + 0x72, 0x61, 0x1a, 0x7b, 0x30, 0x7d, 0x20, 0xe7, + 0x79, 0x72, 0x2e, 0x20, 0xf6, 0x6e, 0x63, 0x65, + 0x1a, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1c, 0x71, + 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0a, 0x62, 0x75, + 0x20, 0x61, 0x79, 0x14, 0x67, 0x65, 0x6c, 0x65, + 0x63, 0x65, 0x6b, 0x20, 0x61, 0x79, 0x10, 0x67, + 0x65, 0xe7, 0x65, 0x6e, 0x20, 0x61, 0x79, 0x18, + 0x7b, 0x30, 0x7d, 0x20, 0x61, 0x79, 0x20, 0x73, + 0x6f, 0x6e, 0x72, 0x61, 0x16, 0x7b, 0x30, 0x7d, + 0x20, 0x61, 0x79, 0x20, 0xf6, 0x6e, 0x63, 0x65, + 0x0a, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x16, 0x6d, + 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x18, 0x6d, 0x6f, 0x6e, 0x74, 0x68, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x10, + 0x62, 0x75, 0x20, 0x68, 0x61, 0x66, 0x74, 0x61, + 0x1a, 0x67, 0x65, 0x6c, 0x65, 0x63, 0x65, 0x6b, + 0x20, 0x68, 0x61, 0x66, 0x74, 0x61, 0x16, 0x67, + 0x65, 0xe7, 0x65, 0x6e, 0x20, 0x68, 0x61, 0x66, + 0x74, 0x61, 0x1e, 0x7b, 0x30, 0x7d, 0x20, 0x68, + 0x61, 0x66, 0x74, 0x61, 0x20, 0x73, 0x6f, 0x6e, + 0x72, 0x61, 0x1c, 0x7b, 0x30, 0x7d, 0x20, 0x68, + 0x61, 0x66, 0x74, 0x61, 0x20, 0xf6, 0x6e, 0x63, + 0x65, 0x08, 0x77, 0x65, 0x65, 0x6b, 0x0c, 0x62, + 0x75, 0x20, 0x68, 0x66, 0x2e, 0x16, 0x67, 0x65, + 0x6c, 0x65, 0x63, 0x65, 0x6b, 0x20, 0x68, 0x66, + 0x2e, 0x12, 0x67, 0x65, 0xe7, 0x65, 0x6e, 0x20, + 0x68, 0x66, 0x2e, 0x1a, 0x7b, 0x30, 0x7d, 0x20, + 0x68, 0x66, 0x2e, 0x20, 0x73, 0x6f, 0x6e, 0x72, + 0x61, 0x18, 0x7b, 0x30, 0x7d, 0x20, 0x68, 0x66, + 0x2e, 0x20, 0xf6, 0x6e, 0x63, 0x65, 0x14, 0x77, + 0x65, 0x65, 0x6b, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x16, 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0a, 0x62, 0x75, + 0x67, 0xfc, 0x6e, 0x0b, 0x79, 0x00, 0x61, 0x00, + 0x72, 0x00, 0x31, 0x01, 0x6e, 0x00, 0x10, 0xf6, + 0x62, 0xfc, 0x72, 0x20, 0x67, 0xfc, 0x6e, 0x16, + 0x65, 0x76, 0x76, 0x65, 0x6c, 0x73, 0x69, 0x20, + 0x67, 0xfc, 0x6e, 0x04, 0x2d, 0x32, 0x06, 0x64, + 0xfc, 0x6e, 0x1a, 0x7b, 0x30, 0x7d, 0x20, 0x67, + 0xfc, 0x6e, 0x20, 0x73, 0x6f, 0x6e, 0x72, 0x61, + 0x18, 0x7b, 0x30, 0x7d, 0x20, 0x67, 0xfc, 0x6e, + 0x20, 0xf6, 0x6e, 0x63, 0x65, 0x06, 0x64, 0x61, + 0x79, 0x12, 0x64, 0x61, 0x79, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x14, 0x64, 0x61, 0x79, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0e, 0x62, + 0x75, 0x20, 0x73, 0x61, 0x61, 0x74, 0x1c, 0x7b, + 0x30, 0x7d, 0x20, 0x73, 0x61, 0x61, 0x74, 0x20, + 0x73, 0x6f, 0x6e, 0x72, 0x61, 0x1a, 0x7b, 0x30, + 0x7d, 0x20, 0x73, 0x61, 0x61, 0x74, 0x20, 0xf6, + 0x6e, 0x63, 0x65, 0x08, 0x68, 0x6f, 0x75, 0x72, + 0x1a, 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x61, 0x2e, + 0x20, 0x73, 0x6f, 0x6e, 0x72, 0x61, 0x18, 0x7b, + 0x30, 0x7d, 0x20, 0x73, 0x61, 0x2e, 0x20, 0xf6, + 0x6e, 0x63, 0x65, 0x14, 0x68, 0x6f, 0x75, 0x72, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, 0x68, + 0x6f, 0x75, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x12, 0x62, 0x75, 0x20, 0x64, 0x61, + 0x6b, 0x69, 0x6b, 0x61, 0x20, 0x7b, 0x30, 0x7d, + 0x20, 0x64, 0x61, 0x6b, 0x69, 0x6b, 0x61, 0x20, + 0x73, 0x6f, 0x6e, 0x72, 0x61, 0x1e, 0x7b, 0x30, + 0x7d, 0x20, 0x64, 0x61, 0x6b, 0x69, 0x6b, 0x61, + 0x20, 0xf6, 0x6e, 0x63, 0x65, 0x0c, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x65, 0x1a, 0x7b, 0x30, 0x7d, + 0x20, 0x64, 0x6b, 0x2e, 0x20, 0x73, 0x6f, 0x6e, + 0x72, 0x61, 0x18, 0x7b, 0x30, 0x7d, 0x20, 0x64, + 0x6b, 0x2e, 0x20, 0xf6, 0x6e, 0x63, 0x65, 0x18, + 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x6d, 0x69, 0x6e, + 0x75, 0x74, 0x65, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x0b, 0x5f, 0x01, 0x69, 0x00, 0x6d, + 0x00, 0x64, 0x00, 0x69, 0x00, 0x20, 0x7b, 0x30, + 0x7d, 0x20, 0x73, 0x61, 0x6e, 0x69, 0x79, 0x65, + 0x20, 0x73, 0x6f, 0x6e, 0x72, 0x61, 0x1e, 0x7b, + 0x30, 0x7d, 0x20, 0x73, 0x61, 0x6e, 0x69, 0x79, + 0x65, 0x20, 0xf6, 0x6e, 0x63, 0x65, 0x0c, 0x73, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x1a, 0x7b, 0x30, + 0x7d, 0x20, 0x73, 0x6e, 0x2e, 0x20, 0x73, 0x6f, + 0x6e, 0x72, 0x61, 0x18, 0x7b, 0x30, 0x7d, 0x20, + 0x73, 0x6e, 0x2e, 0x20, 0xf6, 0x6e, 0x63, 0x65, + 0x18, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x73, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x08, 0x6c, 0x61, 0x74, 0x6e, + 0x04, 0x6e, 0x75, 0x08, 0x64, 0x61, 0x74, 0x61, + 0x70, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, + 0x74, 0x6c, 0x2d, 0x72, 0x65, 0x6c, 0x61, 0x74, + 0x69, 0x76, 0x65, 0x2d, 0x74, 0x69, 0x6d, 0x65, + 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2f, + 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, + 0x61, 0x74, 0x61, 0x2f, 0x74, 0x72, 0x2e, 0x6a, + 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, + 0x01, 0x00, 0x07, 0x00, 0x00, 0xd6, 0x0f, 0x01, + 0xa0, 0x01, 0x00, 0x00, 0x00, 0x06, 0xc8, 0x04, + 0xd0, 0x00, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, + 0x00, 0x42, 0xd2, 0x00, 0x00, 0x00, 0xaa, 0x6a, + 0xc1, 0x07, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, + 0x00, 0x42, 0xd2, 0x00, 0x00, 0x00, 0x43, 0xd0, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd3, 0x00, 0x00, + 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe2, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xe3, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xe4, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe5, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xec, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xed, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xea, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xec, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xee, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xf1, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xf3, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xf4, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xf1, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xf3, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xf5, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xf1, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xf3, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xf6, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xf9, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xfb, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xfc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xff, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x00, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x01, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0x02, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xff, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x00, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x01, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0x03, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0x06, 0x01, 0x00, + 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, 0x07, + 0x01, 0x00, 0x00, 0x4d, 0x08, 0x01, 0x00, 0x00, + 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x0a, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0a, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0b, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x0b, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x0c, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x04, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x05, + 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, 0x02, 0x00, + 0x00, 0x80, 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, + 0x08, 0x01, 0x00, 0x00, 0x04, 0x09, 0x01, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x0a, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x0b, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0x0d, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0x06, 0x01, 0x00, + 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, 0x07, + 0x01, 0x00, 0x00, 0x4d, 0x08, 0x01, 0x00, 0x00, + 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x0a, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0a, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0b, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x0b, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x0e, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x0f, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, + 0x10, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x11, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0x12, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x13, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x14, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x14, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0x15, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x13, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x13, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x14, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x14, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x16, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x17, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, + 0x18, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x18, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x19, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0x1a, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x1b, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x1b, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x1c, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x1c, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0x1d, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x1b, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x1b, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x1c, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x1c, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x1e, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x1f, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, + 0x20, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x20, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x21, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0x22, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x23, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x23, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x24, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x24, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0x25, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x23, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x23, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x24, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x24, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x26, + 0x01, 0x00, 0x00, 0x04, 0x27, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x28, 0x01, 0x00, 0x00, + 0x4d, 0x29, 0x01, 0x00, 0x00, 0x24, 0x01, 0x00, + 0xc8, 0xc4, 0x28, 0xd4, 0x04, 0x01, 0xaf, 0x02, + 0x76, 0x53, 0x35, 0x08, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x1c, 0x12, 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_uk_size = 7043; + +const uint8_t intl_relative_uk[7043] = { + 0x01, 0x9d, 0x01, 0x1e, 0x5f, 0x5f, 0x61, 0x64, + 0x64, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, + 0x61, 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, + 0x24, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, + 0x65, 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x04, 0x75, 0x6b, 0x0c, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x15, 0x46, 0x04, + 0x4c, 0x04, 0x3e, 0x04, 0x33, 0x04, 0x3e, 0x04, + 0x20, 0x00, 0x40, 0x04, 0x3e, 0x04, 0x3a, 0x04, + 0x43, 0x04, 0x1f, 0x3d, 0x04, 0x30, 0x04, 0x41, + 0x04, 0x42, 0x04, 0x43, 0x04, 0x3f, 0x04, 0x3d, + 0x04, 0x3e, 0x04, 0x33, 0x04, 0x3e, 0x04, 0x20, + 0x00, 0x40, 0x04, 0x3e, 0x04, 0x3a, 0x04, 0x43, + 0x04, 0x1b, 0x3c, 0x04, 0x38, 0x04, 0x3d, 0x04, + 0x43, 0x04, 0x3b, 0x04, 0x3e, 0x04, 0x33, 0x04, + 0x3e, 0x04, 0x20, 0x00, 0x40, 0x04, 0x3e, 0x04, + 0x3a, 0x04, 0x43, 0x04, 0x04, 0x2d, 0x31, 0x1b, + 0x47, 0x04, 0x35, 0x04, 0x40, 0x04, 0x35, 0x04, + 0x37, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x40, 0x04, 0x56, 0x04, + 0x3a, 0x04, 0x06, 0x6f, 0x6e, 0x65, 0x1d, 0x47, + 0x04, 0x35, 0x04, 0x40, 0x04, 0x35, 0x04, 0x37, + 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x40, 0x04, 0x3e, 0x04, 0x3a, + 0x04, 0x38, 0x04, 0x06, 0x66, 0x65, 0x77, 0x1f, + 0x47, 0x04, 0x35, 0x04, 0x40, 0x04, 0x35, 0x04, + 0x37, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x40, 0x04, 0x3e, 0x04, + 0x3a, 0x04, 0x56, 0x04, 0x32, 0x04, 0x08, 0x6d, + 0x61, 0x6e, 0x79, 0x1d, 0x47, 0x04, 0x35, 0x04, + 0x40, 0x04, 0x35, 0x04, 0x37, 0x04, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x40, 0x04, 0x3e, 0x04, 0x3a, 0x04, 0x43, 0x04, + 0x0a, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x0c, 0x66, + 0x75, 0x74, 0x75, 0x72, 0x65, 0x19, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x40, 0x04, + 0x56, 0x04, 0x3a, 0x04, 0x20, 0x00, 0x42, 0x04, + 0x3e, 0x04, 0x3c, 0x04, 0x43, 0x04, 0x1b, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x40, + 0x04, 0x3e, 0x04, 0x3a, 0x04, 0x38, 0x04, 0x20, + 0x00, 0x42, 0x04, 0x3e, 0x04, 0x3c, 0x04, 0x43, + 0x04, 0x1d, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x40, 0x04, 0x3e, 0x04, 0x3a, 0x04, + 0x56, 0x04, 0x32, 0x04, 0x20, 0x00, 0x42, 0x04, + 0x3e, 0x04, 0x3c, 0x04, 0x43, 0x04, 0x1b, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x40, + 0x04, 0x3e, 0x04, 0x3a, 0x04, 0x43, 0x04, 0x20, + 0x00, 0x42, 0x04, 0x3e, 0x04, 0x3c, 0x04, 0x43, + 0x04, 0x08, 0x70, 0x61, 0x73, 0x74, 0x08, 0x79, + 0x65, 0x61, 0x72, 0x11, 0x46, 0x04, 0x4c, 0x04, + 0x3e, 0x04, 0x33, 0x04, 0x3e, 0x04, 0x40, 0x04, + 0x56, 0x04, 0x47, 0x04, 0x15, 0x3d, 0x04, 0x30, + 0x04, 0x41, 0x04, 0x42, 0x04, 0x2e, 0x00, 0x20, + 0x00, 0x40, 0x04, 0x3e, 0x04, 0x3a, 0x04, 0x43, + 0x04, 0x0b, 0x42, 0x04, 0x3e, 0x04, 0x40, 0x04, + 0x56, 0x04, 0x3a, 0x04, 0x19, 0x47, 0x04, 0x35, + 0x04, 0x40, 0x04, 0x35, 0x04, 0x37, 0x04, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x40, 0x04, 0x2e, 0x00, 0x17, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x40, 0x04, + 0x2e, 0x00, 0x20, 0x00, 0x42, 0x04, 0x3e, 0x04, + 0x3c, 0x04, 0x43, 0x04, 0x14, 0x79, 0x65, 0x61, + 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x11, + 0x3d, 0x04, 0x30, 0x04, 0x41, 0x04, 0x42, 0x04, + 0x2e, 0x00, 0x20, 0x00, 0x40, 0x04, 0x2e, 0x00, + 0x13, 0x37, 0x04, 0x30, 0x04, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x40, + 0x04, 0x2e, 0x00, 0x16, 0x79, 0x65, 0x61, 0x72, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x1d, + 0x46, 0x04, 0x4c, 0x04, 0x3e, 0x04, 0x33, 0x04, + 0x3e, 0x04, 0x20, 0x00, 0x3a, 0x04, 0x32, 0x04, + 0x30, 0x04, 0x40, 0x04, 0x42, 0x04, 0x30, 0x04, + 0x3b, 0x04, 0x43, 0x04, 0x27, 0x3d, 0x04, 0x30, + 0x04, 0x41, 0x04, 0x42, 0x04, 0x43, 0x04, 0x3f, + 0x04, 0x3d, 0x04, 0x3e, 0x04, 0x33, 0x04, 0x3e, + 0x04, 0x20, 0x00, 0x3a, 0x04, 0x32, 0x04, 0x30, + 0x04, 0x40, 0x04, 0x42, 0x04, 0x30, 0x04, 0x3b, + 0x04, 0x43, 0x04, 0x23, 0x3c, 0x04, 0x38, 0x04, + 0x3d, 0x04, 0x43, 0x04, 0x3b, 0x04, 0x3e, 0x04, + 0x33, 0x04, 0x3e, 0x04, 0x20, 0x00, 0x3a, 0x04, + 0x32, 0x04, 0x30, 0x04, 0x40, 0x04, 0x42, 0x04, + 0x30, 0x04, 0x3b, 0x04, 0x43, 0x04, 0x23, 0x47, + 0x04, 0x35, 0x04, 0x40, 0x04, 0x35, 0x04, 0x37, + 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x3a, 0x04, 0x32, 0x04, 0x30, + 0x04, 0x40, 0x04, 0x42, 0x04, 0x30, 0x04, 0x3b, + 0x04, 0x25, 0x47, 0x04, 0x35, 0x04, 0x40, 0x04, + 0x35, 0x04, 0x37, 0x04, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3a, 0x04, + 0x32, 0x04, 0x30, 0x04, 0x40, 0x04, 0x42, 0x04, + 0x30, 0x04, 0x3b, 0x04, 0x38, 0x04, 0x27, 0x47, + 0x04, 0x35, 0x04, 0x40, 0x04, 0x35, 0x04, 0x37, + 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x3a, 0x04, 0x32, 0x04, 0x30, + 0x04, 0x40, 0x04, 0x42, 0x04, 0x30, 0x04, 0x3b, + 0x04, 0x56, 0x04, 0x32, 0x04, 0x25, 0x47, 0x04, + 0x35, 0x04, 0x40, 0x04, 0x35, 0x04, 0x37, 0x04, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x3a, 0x04, 0x32, 0x04, 0x30, 0x04, + 0x40, 0x04, 0x42, 0x04, 0x30, 0x04, 0x3b, 0x04, + 0x43, 0x04, 0x21, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x3a, 0x04, 0x32, 0x04, 0x30, + 0x04, 0x40, 0x04, 0x42, 0x04, 0x30, 0x04, 0x3b, + 0x04, 0x20, 0x00, 0x42, 0x04, 0x3e, 0x04, 0x3c, + 0x04, 0x43, 0x04, 0x23, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x3a, 0x04, 0x32, 0x04, + 0x30, 0x04, 0x40, 0x04, 0x42, 0x04, 0x30, 0x04, + 0x3b, 0x04, 0x38, 0x04, 0x20, 0x00, 0x42, 0x04, + 0x3e, 0x04, 0x3c, 0x04, 0x43, 0x04, 0x25, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3a, + 0x04, 0x32, 0x04, 0x30, 0x04, 0x40, 0x04, 0x42, + 0x04, 0x30, 0x04, 0x3b, 0x04, 0x56, 0x04, 0x32, + 0x04, 0x20, 0x00, 0x42, 0x04, 0x3e, 0x04, 0x3c, + 0x04, 0x43, 0x04, 0x23, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x3a, 0x04, 0x32, 0x04, + 0x30, 0x04, 0x40, 0x04, 0x42, 0x04, 0x30, 0x04, + 0x3b, 0x04, 0x43, 0x04, 0x20, 0x00, 0x42, 0x04, + 0x3e, 0x04, 0x3c, 0x04, 0x43, 0x04, 0x0e, 0x71, + 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x13, 0x46, + 0x04, 0x4c, 0x04, 0x3e, 0x04, 0x33, 0x04, 0x3e, + 0x04, 0x20, 0x00, 0x3a, 0x04, 0x32, 0x04, 0x2e, + 0x00, 0x1d, 0x3d, 0x04, 0x30, 0x04, 0x41, 0x04, + 0x42, 0x04, 0x43, 0x04, 0x3f, 0x04, 0x3d, 0x04, + 0x3e, 0x04, 0x33, 0x04, 0x3e, 0x04, 0x20, 0x00, + 0x3a, 0x04, 0x32, 0x04, 0x2e, 0x00, 0x19, 0x3c, + 0x04, 0x38, 0x04, 0x3d, 0x04, 0x43, 0x04, 0x3b, + 0x04, 0x3e, 0x04, 0x33, 0x04, 0x3e, 0x04, 0x20, + 0x00, 0x3a, 0x04, 0x32, 0x04, 0x2e, 0x00, 0x1b, + 0x47, 0x04, 0x35, 0x04, 0x40, 0x04, 0x35, 0x04, + 0x37, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x3a, 0x04, 0x32, 0x04, + 0x2e, 0x00, 0x19, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x3a, 0x04, 0x32, 0x04, 0x2e, + 0x00, 0x20, 0x00, 0x42, 0x04, 0x3e, 0x04, 0x3c, + 0x04, 0x43, 0x04, 0x1a, 0x71, 0x75, 0x61, 0x72, + 0x74, 0x65, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x15, 0x37, 0x04, 0x30, 0x04, 0x20, 0x00, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x3a, 0x04, 0x32, 0x04, 0x2e, 0x00, 0x1c, 0x71, + 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x19, 0x46, 0x04, + 0x4c, 0x04, 0x3e, 0x04, 0x33, 0x04, 0x3e, 0x04, + 0x20, 0x00, 0x3c, 0x04, 0x56, 0x04, 0x41, 0x04, + 0x4f, 0x04, 0x46, 0x04, 0x4f, 0x04, 0x23, 0x3d, + 0x04, 0x30, 0x04, 0x41, 0x04, 0x42, 0x04, 0x43, + 0x04, 0x3f, 0x04, 0x3d, 0x04, 0x3e, 0x04, 0x33, + 0x04, 0x3e, 0x04, 0x20, 0x00, 0x3c, 0x04, 0x56, + 0x04, 0x41, 0x04, 0x4f, 0x04, 0x46, 0x04, 0x4f, + 0x04, 0x1f, 0x3c, 0x04, 0x38, 0x04, 0x3d, 0x04, + 0x43, 0x04, 0x3b, 0x04, 0x3e, 0x04, 0x33, 0x04, + 0x3e, 0x04, 0x20, 0x00, 0x3c, 0x04, 0x56, 0x04, + 0x41, 0x04, 0x4f, 0x04, 0x46, 0x04, 0x4f, 0x04, + 0x21, 0x47, 0x04, 0x35, 0x04, 0x40, 0x04, 0x35, + 0x04, 0x37, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3c, 0x04, 0x56, + 0x04, 0x41, 0x04, 0x4f, 0x04, 0x46, 0x04, 0x4c, + 0x04, 0x21, 0x47, 0x04, 0x35, 0x04, 0x40, 0x04, + 0x35, 0x04, 0x37, 0x04, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3c, 0x04, + 0x56, 0x04, 0x41, 0x04, 0x4f, 0x04, 0x46, 0x04, + 0x56, 0x04, 0x23, 0x47, 0x04, 0x35, 0x04, 0x40, + 0x04, 0x35, 0x04, 0x37, 0x04, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3c, + 0x04, 0x56, 0x04, 0x41, 0x04, 0x4f, 0x04, 0x46, + 0x04, 0x56, 0x04, 0x32, 0x04, 0x21, 0x47, 0x04, + 0x35, 0x04, 0x40, 0x04, 0x35, 0x04, 0x37, 0x04, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x3c, 0x04, 0x56, 0x04, 0x41, 0x04, + 0x4f, 0x04, 0x46, 0x04, 0x4f, 0x04, 0x1f, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3c, + 0x04, 0x56, 0x04, 0x41, 0x04, 0x4f, 0x04, 0x46, + 0x04, 0x4c, 0x04, 0x20, 0x00, 0x42, 0x04, 0x3e, + 0x04, 0x3c, 0x04, 0x43, 0x04, 0x1f, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3c, 0x04, + 0x56, 0x04, 0x41, 0x04, 0x4f, 0x04, 0x46, 0x04, + 0x56, 0x04, 0x20, 0x00, 0x42, 0x04, 0x3e, 0x04, + 0x3c, 0x04, 0x43, 0x04, 0x21, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3c, 0x04, 0x56, + 0x04, 0x41, 0x04, 0x4f, 0x04, 0x46, 0x04, 0x56, + 0x04, 0x32, 0x04, 0x20, 0x00, 0x42, 0x04, 0x3e, + 0x04, 0x3c, 0x04, 0x43, 0x04, 0x1f, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3c, 0x04, + 0x56, 0x04, 0x41, 0x04, 0x4f, 0x04, 0x46, 0x04, + 0x4f, 0x04, 0x20, 0x00, 0x42, 0x04, 0x3e, 0x04, + 0x3c, 0x04, 0x43, 0x04, 0x0a, 0x6d, 0x6f, 0x6e, + 0x74, 0x68, 0x1d, 0x47, 0x04, 0x35, 0x04, 0x40, + 0x04, 0x35, 0x04, 0x37, 0x04, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x3c, + 0x04, 0x56, 0x04, 0x41, 0x04, 0x2e, 0x00, 0x1b, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x3c, 0x04, 0x56, 0x04, 0x41, 0x04, 0x2e, 0x00, + 0x20, 0x00, 0x42, 0x04, 0x3e, 0x04, 0x3c, 0x04, + 0x43, 0x04, 0x16, 0x6d, 0x6f, 0x6e, 0x74, 0x68, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x15, 0x46, + 0x04, 0x4c, 0x04, 0x3e, 0x04, 0x33, 0x04, 0x3e, + 0x04, 0x20, 0x00, 0x3c, 0x04, 0x56, 0x04, 0x41, + 0x04, 0x2e, 0x00, 0x15, 0x3d, 0x04, 0x30, 0x04, + 0x41, 0x04, 0x42, 0x04, 0x2e, 0x00, 0x20, 0x00, + 0x3c, 0x04, 0x56, 0x04, 0x41, 0x04, 0x2e, 0x00, + 0x13, 0x3c, 0x04, 0x38, 0x04, 0x3d, 0x04, 0x2e, + 0x00, 0x20, 0x00, 0x3c, 0x04, 0x56, 0x04, 0x41, + 0x04, 0x2e, 0x00, 0x17, 0x37, 0x04, 0x30, 0x04, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x3c, 0x04, 0x56, 0x04, 0x41, 0x04, + 0x2e, 0x00, 0x18, 0x6d, 0x6f, 0x6e, 0x74, 0x68, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x17, + 0x46, 0x04, 0x4c, 0x04, 0x3e, 0x04, 0x33, 0x04, + 0x3e, 0x04, 0x20, 0x00, 0x42, 0x04, 0x38, 0x04, + 0x36, 0x04, 0x3d, 0x04, 0x4f, 0x04, 0x21, 0x3d, + 0x04, 0x30, 0x04, 0x41, 0x04, 0x42, 0x04, 0x43, + 0x04, 0x3f, 0x04, 0x3d, 0x04, 0x3e, 0x04, 0x33, + 0x04, 0x3e, 0x04, 0x20, 0x00, 0x42, 0x04, 0x38, + 0x04, 0x36, 0x04, 0x3d, 0x04, 0x4f, 0x04, 0x1d, + 0x3c, 0x04, 0x38, 0x04, 0x3d, 0x04, 0x43, 0x04, + 0x3b, 0x04, 0x3e, 0x04, 0x33, 0x04, 0x3e, 0x04, + 0x20, 0x00, 0x42, 0x04, 0x38, 0x04, 0x36, 0x04, + 0x3d, 0x04, 0x4f, 0x04, 0x23, 0x47, 0x04, 0x35, + 0x04, 0x40, 0x04, 0x35, 0x04, 0x37, 0x04, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x42, 0x04, 0x38, 0x04, 0x36, 0x04, 0x34, + 0x04, 0x35, 0x04, 0x3d, 0x04, 0x4c, 0x04, 0x1f, + 0x47, 0x04, 0x35, 0x04, 0x40, 0x04, 0x35, 0x04, + 0x37, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x42, 0x04, 0x38, 0x04, + 0x36, 0x04, 0x3d, 0x04, 0x56, 0x04, 0x21, 0x47, + 0x04, 0x35, 0x04, 0x40, 0x04, 0x35, 0x04, 0x37, + 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x42, 0x04, 0x38, 0x04, 0x36, + 0x04, 0x3d, 0x04, 0x56, 0x04, 0x32, 0x04, 0x1f, + 0x47, 0x04, 0x35, 0x04, 0x40, 0x04, 0x35, 0x04, + 0x37, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x42, 0x04, 0x38, 0x04, + 0x36, 0x04, 0x3d, 0x04, 0x4f, 0x04, 0x21, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x42, + 0x04, 0x38, 0x04, 0x36, 0x04, 0x34, 0x04, 0x35, + 0x04, 0x3d, 0x04, 0x4c, 0x04, 0x20, 0x00, 0x42, + 0x04, 0x3e, 0x04, 0x3c, 0x04, 0x43, 0x04, 0x1d, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x42, 0x04, 0x38, 0x04, 0x36, 0x04, 0x3d, 0x04, + 0x56, 0x04, 0x20, 0x00, 0x42, 0x04, 0x3e, 0x04, + 0x3c, 0x04, 0x43, 0x04, 0x1f, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x42, 0x04, 0x38, + 0x04, 0x36, 0x04, 0x3d, 0x04, 0x56, 0x04, 0x32, + 0x04, 0x20, 0x00, 0x42, 0x04, 0x3e, 0x04, 0x3c, + 0x04, 0x43, 0x04, 0x1d, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x42, 0x04, 0x38, 0x04, + 0x36, 0x04, 0x3d, 0x04, 0x4f, 0x04, 0x20, 0x00, + 0x42, 0x04, 0x3e, 0x04, 0x3c, 0x04, 0x43, 0x04, + 0x08, 0x77, 0x65, 0x65, 0x6b, 0x17, 0x3d, 0x04, + 0x30, 0x04, 0x41, 0x04, 0x42, 0x04, 0x2e, 0x00, + 0x20, 0x00, 0x42, 0x04, 0x38, 0x04, 0x36, 0x04, + 0x3d, 0x04, 0x4f, 0x04, 0x15, 0x3c, 0x04, 0x38, + 0x04, 0x3d, 0x04, 0x2e, 0x00, 0x20, 0x00, 0x42, + 0x04, 0x38, 0x04, 0x36, 0x04, 0x3d, 0x04, 0x4f, + 0x04, 0x1d, 0x47, 0x04, 0x35, 0x04, 0x40, 0x04, + 0x35, 0x04, 0x37, 0x04, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x42, 0x04, + 0x38, 0x04, 0x36, 0x04, 0x2e, 0x00, 0x1b, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x42, + 0x04, 0x38, 0x04, 0x36, 0x04, 0x2e, 0x00, 0x20, + 0x00, 0x42, 0x04, 0x3e, 0x04, 0x3c, 0x04, 0x43, + 0x04, 0x14, 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x17, 0x37, 0x04, 0x30, + 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x42, 0x04, 0x38, 0x04, 0x36, + 0x04, 0x2e, 0x00, 0x16, 0x77, 0x65, 0x65, 0x6b, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x11, + 0x41, 0x04, 0x4c, 0x04, 0x3e, 0x04, 0x33, 0x04, + 0x3e, 0x04, 0x34, 0x04, 0x3d, 0x04, 0x56, 0x04, + 0x0d, 0x37, 0x04, 0x30, 0x04, 0x32, 0x04, 0x42, + 0x04, 0x40, 0x04, 0x30, 0x04, 0x17, 0x3f, 0x04, + 0x56, 0x04, 0x41, 0x04, 0x3b, 0x04, 0x4f, 0x04, + 0x37, 0x04, 0x30, 0x04, 0x32, 0x04, 0x42, 0x04, + 0x40, 0x04, 0x30, 0x04, 0x13, 0x3f, 0x04, 0x3e, + 0x04, 0x37, 0x04, 0x30, 0x04, 0x32, 0x04, 0x47, + 0x04, 0x3e, 0x04, 0x40, 0x04, 0x30, 0x04, 0x04, + 0x2d, 0x32, 0x0b, 0x43, 0x04, 0x47, 0x04, 0x3e, + 0x04, 0x40, 0x04, 0x30, 0x04, 0x1d, 0x47, 0x04, + 0x35, 0x04, 0x40, 0x04, 0x35, 0x04, 0x37, 0x04, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x34, 0x04, 0x35, 0x04, 0x3d, 0x04, + 0x4c, 0x04, 0x1b, 0x47, 0x04, 0x35, 0x04, 0x40, + 0x04, 0x35, 0x04, 0x37, 0x04, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x34, + 0x04, 0x3d, 0x04, 0x56, 0x04, 0x1d, 0x47, 0x04, + 0x35, 0x04, 0x40, 0x04, 0x35, 0x04, 0x37, 0x04, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x34, 0x04, 0x3d, 0x04, 0x56, 0x04, + 0x32, 0x04, 0x1b, 0x47, 0x04, 0x35, 0x04, 0x40, + 0x04, 0x35, 0x04, 0x37, 0x04, 0x20, 0x00, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x34, + 0x04, 0x3d, 0x04, 0x4f, 0x04, 0x1b, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x34, 0x04, + 0x35, 0x04, 0x3d, 0x04, 0x4c, 0x04, 0x20, 0x00, + 0x42, 0x04, 0x3e, 0x04, 0x3c, 0x04, 0x43, 0x04, + 0x19, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x34, 0x04, 0x3d, 0x04, 0x56, 0x04, 0x20, + 0x00, 0x42, 0x04, 0x3e, 0x04, 0x3c, 0x04, 0x43, + 0x04, 0x1b, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x34, 0x04, 0x3d, 0x04, 0x56, 0x04, + 0x32, 0x04, 0x20, 0x00, 0x42, 0x04, 0x3e, 0x04, + 0x3c, 0x04, 0x43, 0x04, 0x19, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x34, 0x04, 0x3d, + 0x04, 0x4f, 0x04, 0x20, 0x00, 0x42, 0x04, 0x3e, + 0x04, 0x3c, 0x04, 0x43, 0x04, 0x06, 0x64, 0x61, + 0x79, 0x1b, 0x47, 0x04, 0x35, 0x04, 0x40, 0x04, + 0x35, 0x04, 0x37, 0x04, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x34, 0x04, + 0x3d, 0x04, 0x2e, 0x00, 0x19, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x34, 0x04, 0x3d, + 0x04, 0x2e, 0x00, 0x20, 0x00, 0x42, 0x04, 0x3e, + 0x04, 0x3c, 0x04, 0x43, 0x04, 0x12, 0x64, 0x61, + 0x79, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x13, + 0x37, 0x04, 0x30, 0x04, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x34, 0x04, + 0x2e, 0x00, 0x17, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x34, 0x04, 0x2e, 0x00, 0x20, + 0x00, 0x42, 0x04, 0x3e, 0x04, 0x3c, 0x04, 0x43, + 0x04, 0x11, 0x2d, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x34, 0x04, 0x3d, 0x04, + 0x2e, 0x00, 0x14, 0x64, 0x61, 0x79, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x17, 0x46, 0x04, + 0x56, 0x04, 0x54, 0x04, 0x57, 0x04, 0x20, 0x00, + 0x33, 0x04, 0x3e, 0x04, 0x34, 0x04, 0x38, 0x04, + 0x3d, 0x04, 0x38, 0x04, 0x21, 0x47, 0x04, 0x35, + 0x04, 0x40, 0x04, 0x35, 0x04, 0x37, 0x04, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x33, 0x04, 0x3e, 0x04, 0x34, 0x04, 0x38, + 0x04, 0x3d, 0x04, 0x43, 0x04, 0x21, 0x47, 0x04, + 0x35, 0x04, 0x40, 0x04, 0x35, 0x04, 0x37, 0x04, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x33, 0x04, 0x3e, 0x04, 0x34, 0x04, + 0x38, 0x04, 0x3d, 0x04, 0x38, 0x04, 0x1f, 0x47, + 0x04, 0x35, 0x04, 0x40, 0x04, 0x35, 0x04, 0x37, + 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x33, 0x04, 0x3e, 0x04, 0x34, + 0x04, 0x38, 0x04, 0x3d, 0x04, 0x1f, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x33, 0x04, + 0x3e, 0x04, 0x34, 0x04, 0x38, 0x04, 0x3d, 0x04, + 0x43, 0x04, 0x20, 0x00, 0x42, 0x04, 0x3e, 0x04, + 0x3c, 0x04, 0x43, 0x04, 0x1f, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x33, 0x04, 0x3e, + 0x04, 0x34, 0x04, 0x38, 0x04, 0x3d, 0x04, 0x38, + 0x04, 0x20, 0x00, 0x42, 0x04, 0x3e, 0x04, 0x3c, + 0x04, 0x43, 0x04, 0x1d, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x33, 0x04, 0x3e, 0x04, + 0x34, 0x04, 0x38, 0x04, 0x3d, 0x04, 0x20, 0x00, + 0x42, 0x04, 0x3e, 0x04, 0x3c, 0x04, 0x43, 0x04, + 0x08, 0x68, 0x6f, 0x75, 0x72, 0x1b, 0x47, 0x04, + 0x35, 0x04, 0x40, 0x04, 0x35, 0x04, 0x37, 0x04, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x33, 0x04, 0x3e, 0x04, 0x34, 0x04, + 0x19, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x33, 0x04, 0x3e, 0x04, 0x34, 0x04, 0x20, + 0x00, 0x42, 0x04, 0x3e, 0x04, 0x3c, 0x04, 0x43, + 0x04, 0x14, 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x15, 0x37, 0x04, 0x30, + 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x33, 0x04, 0x3e, 0x04, 0x34, + 0x04, 0x16, 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x19, 0x46, 0x04, + 0x56, 0x04, 0x54, 0x04, 0x57, 0x04, 0x20, 0x00, + 0x45, 0x04, 0x32, 0x04, 0x38, 0x04, 0x3b, 0x04, + 0x38, 0x04, 0x3d, 0x04, 0x38, 0x04, 0x23, 0x47, + 0x04, 0x35, 0x04, 0x40, 0x04, 0x35, 0x04, 0x37, + 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x45, 0x04, 0x32, 0x04, 0x38, + 0x04, 0x3b, 0x04, 0x38, 0x04, 0x3d, 0x04, 0x43, + 0x04, 0x23, 0x47, 0x04, 0x35, 0x04, 0x40, 0x04, + 0x35, 0x04, 0x37, 0x04, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x45, 0x04, + 0x32, 0x04, 0x38, 0x04, 0x3b, 0x04, 0x38, 0x04, + 0x3d, 0x04, 0x38, 0x04, 0x21, 0x47, 0x04, 0x35, + 0x04, 0x40, 0x04, 0x35, 0x04, 0x37, 0x04, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x45, 0x04, 0x32, 0x04, 0x38, 0x04, 0x3b, + 0x04, 0x38, 0x04, 0x3d, 0x04, 0x21, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x45, 0x04, + 0x32, 0x04, 0x38, 0x04, 0x3b, 0x04, 0x38, 0x04, + 0x3d, 0x04, 0x43, 0x04, 0x20, 0x00, 0x42, 0x04, + 0x3e, 0x04, 0x3c, 0x04, 0x43, 0x04, 0x21, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x45, + 0x04, 0x32, 0x04, 0x38, 0x04, 0x3b, 0x04, 0x38, + 0x04, 0x3d, 0x04, 0x38, 0x04, 0x20, 0x00, 0x42, + 0x04, 0x3e, 0x04, 0x3c, 0x04, 0x43, 0x04, 0x1f, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x45, 0x04, 0x32, 0x04, 0x38, 0x04, 0x3b, 0x04, + 0x38, 0x04, 0x3d, 0x04, 0x20, 0x00, 0x42, 0x04, + 0x3e, 0x04, 0x3c, 0x04, 0x43, 0x04, 0x0c, 0x6d, + 0x69, 0x6e, 0x75, 0x74, 0x65, 0x19, 0x47, 0x04, + 0x35, 0x04, 0x40, 0x04, 0x35, 0x04, 0x37, 0x04, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x45, 0x04, 0x32, 0x04, 0x17, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x45, + 0x04, 0x32, 0x04, 0x20, 0x00, 0x42, 0x04, 0x3e, + 0x04, 0x3c, 0x04, 0x43, 0x04, 0x18, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x13, 0x37, 0x04, 0x30, 0x04, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x45, 0x04, 0x32, 0x04, 0x1a, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x0b, 0x37, 0x04, 0x30, 0x04, + 0x40, 0x04, 0x30, 0x04, 0x37, 0x04, 0x23, 0x47, + 0x04, 0x35, 0x04, 0x40, 0x04, 0x35, 0x04, 0x37, + 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x41, 0x04, 0x35, 0x04, 0x3a, + 0x04, 0x43, 0x04, 0x3d, 0x04, 0x34, 0x04, 0x43, + 0x04, 0x23, 0x47, 0x04, 0x35, 0x04, 0x40, 0x04, + 0x35, 0x04, 0x37, 0x04, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x41, 0x04, + 0x35, 0x04, 0x3a, 0x04, 0x43, 0x04, 0x3d, 0x04, + 0x34, 0x04, 0x38, 0x04, 0x21, 0x47, 0x04, 0x35, + 0x04, 0x40, 0x04, 0x35, 0x04, 0x37, 0x04, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x41, 0x04, 0x35, 0x04, 0x3a, 0x04, 0x43, + 0x04, 0x3d, 0x04, 0x34, 0x04, 0x21, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x41, 0x04, + 0x35, 0x04, 0x3a, 0x04, 0x43, 0x04, 0x3d, 0x04, + 0x34, 0x04, 0x43, 0x04, 0x20, 0x00, 0x42, 0x04, + 0x3e, 0x04, 0x3c, 0x04, 0x43, 0x04, 0x21, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x41, + 0x04, 0x35, 0x04, 0x3a, 0x04, 0x43, 0x04, 0x3d, + 0x04, 0x34, 0x04, 0x38, 0x04, 0x20, 0x00, 0x42, + 0x04, 0x3e, 0x04, 0x3c, 0x04, 0x43, 0x04, 0x1f, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x41, 0x04, 0x35, 0x04, 0x3a, 0x04, 0x43, 0x04, + 0x3d, 0x04, 0x34, 0x04, 0x20, 0x00, 0x42, 0x04, + 0x3e, 0x04, 0x3c, 0x04, 0x43, 0x04, 0x0c, 0x73, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x17, 0x47, 0x04, + 0x35, 0x04, 0x40, 0x04, 0x35, 0x04, 0x37, 0x04, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x41, 0x04, 0x15, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x41, 0x04, 0x20, + 0x00, 0x42, 0x04, 0x3e, 0x04, 0x3c, 0x04, 0x43, + 0x04, 0x18, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x11, 0x37, + 0x04, 0x30, 0x04, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x41, 0x04, 0x1a, + 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x08, 0x6c, 0x61, + 0x74, 0x6e, 0x04, 0x6e, 0x75, 0x08, 0x64, 0x61, + 0x74, 0x61, 0x70, 0x6e, 0x6f, 0x64, 0x65, 0x5f, + 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, + 0x69, 0x6e, 0x74, 0x6c, 0x2d, 0x72, 0x65, 0x6c, + 0x61, 0x74, 0x69, 0x76, 0x65, 0x2d, 0x74, 0x69, + 0x6d, 0x65, 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, + 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, 0x75, 0x6b, + 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, + 0x01, 0x00, 0x01, 0x00, 0x07, 0x00, 0x00, 0xd2, + 0x17, 0x01, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x06, + 0xc8, 0x04, 0xd0, 0x00, 0x00, 0x00, 0x39, 0xd1, + 0x00, 0x00, 0x00, 0x42, 0xd2, 0x00, 0x00, 0x00, + 0xaa, 0x6a, 0xbd, 0x0b, 0x00, 0x00, 0x39, 0xd1, + 0x00, 0x00, 0x00, 0x42, 0xd2, 0x00, 0x00, 0x00, + 0x43, 0xd0, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd3, + 0x00, 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xd7, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0xdf, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe2, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xe3, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0xe4, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0xe5, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xe9, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xec, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0xec, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0xec, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xed, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xee, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xef, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xef, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0xef, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xec, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0xec, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0xec, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xf0, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xf2, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xf3, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xf5, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0xf6, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf8, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0xfa, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0xfb, 0x00, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xfc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xfe, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xff, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x00, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x00, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x01, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x01, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x01, 0x01, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0x02, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0xfe, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xff, + 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x03, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x03, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x03, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x03, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x01, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x01, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x01, 0x01, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0x04, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0x06, 0x01, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x07, + 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x09, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x0a, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x0b, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x0c, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x0e, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x0f, 0x01, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0x10, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0x06, 0x01, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x07, + 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x11, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x11, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x11, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x12, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x12, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x12, 0x01, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0x13, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x16, + 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x17, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x17, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x17, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x12, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x12, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x12, 0x01, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0x18, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x01, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x1b, + 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x1c, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x1d, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x1e, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x1f, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x20, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x21, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x22, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x23, 0x01, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0x24, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0x25, 0x01, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x26, + 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x27, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x27, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x27, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x27, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x28, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x28, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x28, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x28, 0x01, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0x29, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x19, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0x1a, 0x01, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x1b, + 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x2a, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x2a, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x2a, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x2a, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x28, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x28, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x28, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x28, 0x01, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0x2b, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x2c, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0x2d, 0x01, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x2e, + 0x01, 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, + 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, 0x30, 0x01, + 0x00, 0x00, 0x04, 0x31, 0x01, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x32, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x33, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x34, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0x35, 0x01, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x36, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x37, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x38, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0x39, 0x01, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0x3a, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x2c, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x04, 0x2d, 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, + 0x00, 0x80, 0x04, 0x2e, 0x01, 0x00, 0x00, 0x4d, + 0x02, 0x00, 0x00, 0x80, 0x04, 0x2f, 0x01, 0x00, + 0x00, 0x4d, 0x30, 0x01, 0x00, 0x00, 0x04, 0x31, + 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x3b, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x3b, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x3b, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x3b, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x3c, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x3c, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x3c, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x3c, 0x01, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0x3d, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x2c, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x04, 0x2d, 0x01, 0x00, + 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0x2e, + 0x01, 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, + 0x04, 0x2f, 0x01, 0x00, 0x00, 0x4d, 0x30, 0x01, + 0x00, 0x00, 0x04, 0x31, 0x01, 0x00, 0x00, 0x4d, + 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x3e, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x3e, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x3e, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0x3e, 0x01, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x3f, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x40, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x40, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0x40, 0x01, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0x41, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x42, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x0b, 0x04, 0x43, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x44, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x45, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x44, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x46, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x47, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x48, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x47, 0x01, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0x49, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x42, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x4a, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x4a, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0x4a, 0x01, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0x4c, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x42, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x0b, 0x04, 0x4d, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x4d, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x4d, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x4d, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x4b, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x4b, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x4b, 0x01, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0x4e, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x50, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x51, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x52, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0x51, 0x01, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x53, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x54, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x55, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0x54, 0x01, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0x56, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x4f, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x0b, 0x04, 0x57, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x57, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x57, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x57, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0x59, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x4f, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x5a, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x5a, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0x5a, 0x01, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x58, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x58, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x58, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0x58, 0x01, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0x5b, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x0b, 0x04, 0x5d, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x5e, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x5f, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x5e, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x60, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x61, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x62, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x61, 0x01, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0x63, 0x01, 0x00, + 0x00, 0x0b, 0x04, 0x5c, 0x01, 0x00, 0x00, 0x4d, + 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, 0x64, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x64, 0x01, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x04, 0x64, 0x01, 0x00, 0x00, + 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, 0xe1, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0x66, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x5c, + 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, + 0x0b, 0x04, 0x67, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x67, 0x01, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x67, 0x01, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, + 0x67, 0x01, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, + 0x00, 0x4d, 0xe1, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x65, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x04, 0x65, 0x01, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x04, 0x65, 0x01, + 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0x68, 0x01, 0x00, + 0x00, 0x04, 0x69, 0x01, 0x00, 0x00, 0x26, 0x01, + 0x00, 0x4d, 0x6a, 0x01, 0x00, 0x00, 0x4d, 0x6b, + 0x01, 0x00, 0x00, 0x24, 0x01, 0x00, 0xc8, 0xc4, + 0x28, 0xd8, 0x05, 0x01, 0x95, 0x03, 0x76, 0x53, + 0x35, 0x08, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x08, 0x35, 0x35, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x1c, 0x1c, 0x1c, 0x12, + 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_ur_size = 3881; + +const uint8_t intl_relative_ur[3881] = { + 0x01, 0x5d, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x04, 0x75, 0x72, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x0d, 0x27, 0x06, 0x33, + 0x06, 0x20, 0x00, 0x33, 0x06, 0x27, 0x06, 0x44, + 0x06, 0x11, 0x27, 0x06, 0xaf, 0x06, 0x44, 0x06, + 0xd2, 0x06, 0x20, 0x00, 0x33, 0x06, 0x27, 0x06, + 0x44, 0x06, 0x13, 0xaf, 0x06, 0x32, 0x06, 0x34, + 0x06, 0x2a, 0x06, 0xc1, 0x06, 0x20, 0x00, 0x33, + 0x06, 0x27, 0x06, 0x44, 0x06, 0x04, 0x2d, 0x31, + 0x17, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x33, 0x06, 0x27, 0x06, 0x44, 0x06, 0x20, + 0x00, 0x45, 0x06, 0xcc, 0x06, 0xba, 0x06, 0x06, + 0x6f, 0x6e, 0x65, 0x0a, 0x6f, 0x74, 0x68, 0x65, + 0x72, 0x0c, 0x66, 0x75, 0x74, 0x75, 0x72, 0x65, + 0x19, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x33, 0x06, 0x27, 0x06, 0x44, 0x06, 0x20, + 0x00, 0x7e, 0x06, 0xc1, 0x06, 0x44, 0x06, 0xd2, + 0x06, 0x08, 0x70, 0x61, 0x73, 0x74, 0x08, 0x79, + 0x65, 0x61, 0x72, 0x14, 0x79, 0x65, 0x61, 0x72, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, 0x79, + 0x65, 0x61, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x15, 0x27, 0x06, 0x33, 0x06, 0x20, + 0x00, 0x33, 0x06, 0xc1, 0x06, 0x20, 0x00, 0x45, + 0x06, 0x27, 0x06, 0xc1, 0x06, 0xcc, 0x06, 0x19, + 0x27, 0x06, 0xaf, 0x06, 0x44, 0x06, 0xd2, 0x06, + 0x20, 0x00, 0x33, 0x06, 0xc1, 0x06, 0x20, 0x00, + 0x45, 0x06, 0x27, 0x06, 0xc1, 0x06, 0xcc, 0x06, + 0x1b, 0xaf, 0x06, 0x32, 0x06, 0x34, 0x06, 0x2a, + 0x06, 0xc1, 0x06, 0x20, 0x00, 0x33, 0x06, 0xc1, + 0x06, 0x20, 0x00, 0x45, 0x06, 0x27, 0x06, 0xc1, + 0x06, 0xcc, 0x06, 0x1f, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x33, 0x06, 0xc1, 0x06, + 0x20, 0x00, 0x45, 0x06, 0x27, 0x06, 0xc1, 0x06, + 0xcc, 0x06, 0x20, 0x00, 0x45, 0x06, 0xcc, 0x06, + 0xba, 0x06, 0x21, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x33, 0x06, 0xc1, 0x06, 0x20, + 0x00, 0x45, 0x06, 0x27, 0x06, 0xc1, 0x06, 0xcc, + 0x06, 0x20, 0x00, 0x7e, 0x06, 0xc1, 0x06, 0x44, + 0x06, 0xd2, 0x06, 0x0e, 0x71, 0x75, 0x61, 0x72, + 0x74, 0x65, 0x72, 0x1f, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x33, 0x06, 0xc1, 0x06, + 0x20, 0x00, 0x45, 0x06, 0x27, 0x06, 0xc1, 0x06, + 0xcc, 0x06, 0x20, 0x00, 0x42, 0x06, 0x28, 0x06, + 0x44, 0x06, 0x1a, 0x71, 0x75, 0x61, 0x72, 0x74, + 0x65, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x1c, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0d, + 0x27, 0x06, 0x33, 0x06, 0x20, 0x00, 0x45, 0x06, + 0x27, 0x06, 0xc1, 0x06, 0x15, 0x27, 0x06, 0xaf, + 0x06, 0x44, 0x06, 0x27, 0x06, 0x20, 0x00, 0x45, + 0x06, 0xc1, 0x06, 0xcc, 0x06, 0x46, 0x06, 0xc1, + 0x06, 0x13, 0xaf, 0x06, 0x32, 0x06, 0x34, 0x06, + 0x2a, 0x06, 0xc1, 0x06, 0x20, 0x00, 0x45, 0x06, + 0x27, 0x06, 0xc1, 0x06, 0x1b, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x45, 0x06, 0xc1, + 0x06, 0xcc, 0x06, 0x46, 0x06, 0xc1, 0x06, 0x20, + 0x00, 0x45, 0x06, 0xcc, 0x06, 0xba, 0x06, 0x1b, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x45, 0x06, 0xc1, 0x06, 0xcc, 0x06, 0x46, 0x06, + 0xd2, 0x06, 0x20, 0x00, 0x45, 0x06, 0xcc, 0x06, + 0xba, 0x06, 0x1d, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x45, 0x06, 0xc1, 0x06, 0xcc, + 0x06, 0x46, 0x06, 0xc1, 0x06, 0x20, 0x00, 0x7e, + 0x06, 0xc1, 0x06, 0x44, 0x06, 0xd2, 0x06, 0x1d, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x45, 0x06, 0xc1, 0x06, 0xcc, 0x06, 0x46, 0x06, + 0xd2, 0x06, 0x20, 0x00, 0x7e, 0x06, 0xc1, 0x06, + 0x44, 0x06, 0xd2, 0x06, 0x0a, 0x6d, 0x6f, 0x6e, + 0x74, 0x68, 0x11, 0x27, 0x06, 0x33, 0x06, 0x20, + 0x00, 0x45, 0x06, 0xc1, 0x06, 0xcc, 0x06, 0x46, + 0x06, 0xc1, 0x06, 0x15, 0x27, 0x06, 0xaf, 0x06, + 0x44, 0x06, 0xd2, 0x06, 0x20, 0x00, 0x45, 0x06, + 0xc1, 0x06, 0xcc, 0x06, 0x46, 0x06, 0xc1, 0x06, + 0x17, 0x7e, 0x06, 0x86, 0x06, 0xbe, 0x06, 0x44, + 0x06, 0xd2, 0x06, 0x20, 0x00, 0x45, 0x06, 0xc1, + 0x06, 0xcc, 0x06, 0x46, 0x06, 0xc1, 0x06, 0x17, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x45, 0x06, 0x27, 0x06, 0xc1, 0x06, 0x20, 0x00, + 0x45, 0x06, 0xcc, 0x06, 0xba, 0x06, 0x17, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x45, + 0x06, 0x27, 0x06, 0xc1, 0x06, 0x20, 0x00, 0x42, + 0x06, 0x28, 0x06, 0x44, 0x06, 0x16, 0x6d, 0x6f, + 0x6e, 0x74, 0x68, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x11, 0x27, 0x06, 0xaf, 0x06, 0x44, 0x06, + 0xd2, 0x06, 0x20, 0x00, 0x45, 0x06, 0x27, 0x06, + 0xc1, 0x06, 0x19, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x45, 0x06, 0x27, 0x06, 0xc1, + 0x06, 0x20, 0x00, 0x7e, 0x06, 0xc1, 0x06, 0x44, + 0x06, 0xd2, 0x06, 0x18, 0x6d, 0x6f, 0x6e, 0x74, + 0x68, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x0f, 0x27, 0x06, 0x33, 0x06, 0x20, 0x00, 0xc1, + 0x06, 0x41, 0x06, 0x2a, 0x06, 0xc1, 0x06, 0x13, + 0x27, 0x06, 0xaf, 0x06, 0x44, 0x06, 0xd2, 0x06, + 0x20, 0x00, 0xc1, 0x06, 0x41, 0x06, 0x2a, 0x06, + 0xd2, 0x06, 0x15, 0xaf, 0x06, 0x32, 0x06, 0x34, + 0x06, 0x2a, 0x06, 0xc1, 0x06, 0x20, 0x00, 0xc1, + 0x06, 0x41, 0x06, 0x2a, 0x06, 0xd2, 0x06, 0x19, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0xc1, 0x06, 0x41, 0x06, 0x2a, 0x06, 0xc1, 0x06, + 0x20, 0x00, 0x45, 0x06, 0xcc, 0x06, 0xba, 0x06, + 0x19, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0xc1, 0x06, 0x41, 0x06, 0x2a, 0x06, 0xd2, + 0x06, 0x20, 0x00, 0x45, 0x06, 0xcc, 0x06, 0xba, + 0x06, 0x1b, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0xc1, 0x06, 0x41, 0x06, 0x2a, 0x06, + 0xc1, 0x06, 0x20, 0x00, 0x7e, 0x06, 0xc1, 0x06, + 0x44, 0x06, 0xd2, 0x06, 0x1b, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0xc1, 0x06, 0x41, + 0x06, 0x2a, 0x06, 0xd2, 0x06, 0x20, 0x00, 0x7e, + 0x06, 0xc1, 0x06, 0x44, 0x06, 0xd2, 0x06, 0x08, + 0x77, 0x65, 0x65, 0x6b, 0x13, 0x27, 0x06, 0xaf, + 0x06, 0x44, 0x06, 0xd2, 0x06, 0x20, 0x00, 0xc1, + 0x06, 0x41, 0x06, 0x2a, 0x06, 0xc1, 0x06, 0x15, + 0x7e, 0x06, 0x86, 0x06, 0xbe, 0x06, 0x44, 0x06, + 0xd2, 0x06, 0x20, 0x00, 0xc1, 0x06, 0x41, 0x06, + 0x2a, 0x06, 0xc1, 0x06, 0x14, 0x77, 0x65, 0x65, + 0x6b, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, + 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x05, 0x22, 0x06, 0x2c, 0x06, + 0x11, 0x22, 0x06, 0x26, 0x06, 0x46, 0x06, 0x2f, + 0x06, 0xc1, 0x06, 0x20, 0x00, 0xa9, 0x06, 0x44, + 0x06, 0x1d, 0x22, 0x06, 0x46, 0x06, 0xd2, 0x06, + 0x20, 0x00, 0x48, 0x06, 0x27, 0x06, 0x44, 0x06, + 0x27, 0x06, 0x20, 0x00, 0x7e, 0x06, 0x31, 0x06, + 0x33, 0x06, 0x48, 0x06, 0xba, 0x06, 0x17, 0xaf, + 0x06, 0x32, 0x06, 0x34, 0x06, 0x2a, 0x06, 0xc1, + 0x06, 0x20, 0x00, 0x7e, 0x06, 0x31, 0x06, 0x33, + 0x06, 0x48, 0x06, 0xba, 0x06, 0x04, 0x2d, 0x32, + 0x11, 0xaf, 0x06, 0x32, 0x06, 0x34, 0x06, 0x2a, + 0x06, 0xc1, 0x06, 0x20, 0x00, 0xa9, 0x06, 0x44, + 0x06, 0x15, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x2f, 0x06, 0x46, 0x06, 0x20, 0x00, + 0x45, 0x06, 0xcc, 0x06, 0xba, 0x06, 0x19, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x2f, + 0x06, 0x46, 0x06, 0x48, 0x06, 0xba, 0x06, 0x20, + 0x00, 0x45, 0x06, 0xcc, 0x06, 0xba, 0x06, 0x17, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x2f, 0x06, 0x46, 0x06, 0x20, 0x00, 0x7e, 0x06, + 0xc1, 0x06, 0x44, 0x06, 0xd2, 0x06, 0x1b, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x2f, + 0x06, 0x46, 0x06, 0x48, 0x06, 0xba, 0x06, 0x20, + 0x00, 0x7e, 0x06, 0xc1, 0x06, 0x44, 0x06, 0xd2, + 0x06, 0x06, 0x64, 0x61, 0x79, 0x12, 0x64, 0x61, + 0x79, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x14, + 0x64, 0x61, 0x79, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x11, 0x27, 0x06, 0x33, 0x06, 0x20, + 0x00, 0xaf, 0x06, 0xbe, 0x06, 0x46, 0x06, 0x79, + 0x06, 0xd2, 0x06, 0x1b, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0xaf, 0x06, 0xbe, 0x06, + 0x46, 0x06, 0x79, 0x06, 0xd2, 0x06, 0x20, 0x00, + 0x45, 0x06, 0xcc, 0x06, 0xba, 0x06, 0x1d, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0xaf, + 0x06, 0xbe, 0x06, 0x46, 0x06, 0x79, 0x06, 0xc1, + 0x06, 0x20, 0x00, 0x7e, 0x06, 0xc1, 0x06, 0x44, + 0x06, 0xd2, 0x06, 0x1d, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0xaf, 0x06, 0xbe, 0x06, + 0x46, 0x06, 0x79, 0x06, 0xd2, 0x06, 0x20, 0x00, + 0x7e, 0x06, 0xc1, 0x06, 0x44, 0x06, 0xd2, 0x06, + 0x08, 0x68, 0x6f, 0x75, 0x72, 0x14, 0x68, 0x6f, + 0x75, 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x1d, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0xaf, 0x06, 0xbe, 0x06, 0x46, 0x06, 0x79, + 0x06, 0x48, 0x06, 0xba, 0x06, 0x20, 0x00, 0x45, + 0x06, 0xcc, 0x06, 0xba, 0x06, 0x16, 0x68, 0x6f, + 0x75, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x0d, 0x27, 0x06, 0x33, 0x06, 0x20, 0x00, + 0x45, 0x06, 0x46, 0x06, 0x79, 0x06, 0x17, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x45, + 0x06, 0x46, 0x06, 0x79, 0x06, 0x20, 0x00, 0x45, + 0x06, 0xcc, 0x06, 0xba, 0x06, 0x19, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x45, 0x06, + 0x46, 0x06, 0x79, 0x06, 0x20, 0x00, 0x7e, 0x06, + 0xc1, 0x06, 0x44, 0x06, 0xd2, 0x06, 0x0c, 0x6d, + 0x69, 0x6e, 0x75, 0x74, 0x65, 0x18, 0x6d, 0x69, + 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x1a, 0x6d, 0x69, 0x6e, 0x75, 0x74, + 0x65, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x05, 0x27, 0x06, 0x28, 0x06, 0x1b, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x33, 0x06, + 0xcc, 0x06, 0xa9, 0x06, 0x46, 0x06, 0x88, 0x06, + 0x20, 0x00, 0x45, 0x06, 0xcc, 0x06, 0xba, 0x06, + 0x1d, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x33, 0x06, 0xcc, 0x06, 0xa9, 0x06, 0x46, + 0x06, 0x88, 0x06, 0x20, 0x00, 0x7e, 0x06, 0xc1, + 0x06, 0x44, 0x06, 0xd2, 0x06, 0x0c, 0x73, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x18, 0x73, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x1a, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x08, + 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, 0x75, 0x08, + 0x64, 0x61, 0x74, 0x61, 0x70, 0x6e, 0x6f, 0x64, + 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, 0x65, + 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2d, 0x72, + 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x2d, + 0x74, 0x69, 0x6d, 0x65, 0x2d, 0x66, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x2f, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, 0x2f, + 0x75, 0x72, 0x2e, 0x6a, 0x73, 0x0d, 0x00, 0x06, + 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, 0x07, 0x00, + 0x00, 0x9a, 0x0f, 0x01, 0xa0, 0x01, 0x00, 0x00, + 0x00, 0x06, 0xc8, 0x04, 0xd0, 0x00, 0x00, 0x00, + 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, 0x00, + 0x00, 0x00, 0xaa, 0x6a, 0x85, 0x07, 0x00, 0x00, + 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, 0x00, + 0x00, 0x00, 0x43, 0xd0, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd3, 0x00, 0x00, 0x00, 0x4d, 0xd4, 0x00, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xd5, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xd6, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xd9, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xdf, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd5, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xd6, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xd9, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd5, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xd6, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xd9, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe1, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe2, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xe3, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe5, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe5, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe6, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xe5, 0x00, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0xe5, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe8, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x4d, 0xe9, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0xe5, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe6, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xed, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xee, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf0, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xf1, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xf2, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xf5, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf6, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xf7, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xf8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xed, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf6, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0xf6, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0xfa, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0xfb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xfe, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xff, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x02, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0x03, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0x05, 0x01, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x00, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x02, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0x06, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0x05, 0x01, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xff, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x02, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0x07, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x01, 0x00, + 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, 0x0b, + 0x01, 0x00, 0x00, 0x4d, 0x0c, 0x01, 0x00, 0x00, + 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x0e, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0f, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x10, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x11, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x12, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x08, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0x09, + 0x01, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x02, 0x00, + 0x00, 0x80, 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, + 0x0c, 0x01, 0x00, 0x00, 0x04, 0x0d, 0x01, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0x0e, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x0f, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x10, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0x13, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0x09, 0x01, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0x0a, 0x01, 0x00, + 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, 0x0b, + 0x01, 0x00, 0x00, 0x4d, 0x0c, 0x01, 0x00, 0x00, + 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x0e, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0f, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x10, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x10, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x14, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, + 0x16, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x17, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x18, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0x19, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x16, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x18, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x18, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0x1a, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x16, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x1b, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x17, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x18, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x1c, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x1d, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, + 0x1e, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x1f, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x1f, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0x20, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x1e, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x1e, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x1f, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x1f, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0x21, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x1e, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x1e, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x1f, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x1f, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x22, + 0x01, 0x00, 0x00, 0x0b, 0x04, 0x23, 0x01, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, 0x04, + 0x24, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x04, 0x24, 0x01, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0x25, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x25, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x4d, 0x26, 0x01, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0x24, 0x01, 0x00, 0x00, 0x4d, 0xda, + 0x00, 0x00, 0x00, 0x04, 0x24, 0x01, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x25, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x25, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x4d, 0x27, 0x01, 0x00, + 0x00, 0x0b, 0x0b, 0x04, 0x24, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x24, 0x01, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, + 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x25, 0x01, + 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, + 0x25, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x28, + 0x01, 0x00, 0x00, 0x04, 0x29, 0x01, 0x00, 0x00, + 0x26, 0x01, 0x00, 0x4d, 0x2a, 0x01, 0x00, 0x00, + 0x4d, 0x2b, 0x01, 0x00, 0x00, 0x24, 0x01, 0x00, + 0xc8, 0xc4, 0x28, 0xd8, 0x04, 0x01, 0xa9, 0x02, + 0x76, 0x53, 0x35, 0x08, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x1c, 0x12, 0x1c, 0x1c, + 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_uz_size = 3072; + +const uint8_t intl_relative_uz[3072] = { + 0x01, 0x4c, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x04, 0x75, 0x7a, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x0e, 0x73, 0x68, 0x75, + 0x20, 0x79, 0x69, 0x6c, 0x16, 0x6b, 0x65, 0x79, + 0x69, 0x6e, 0x67, 0x69, 0x20, 0x79, 0x69, 0x6c, + 0x15, 0x6f, 0x00, 0x18, 0x20, 0x74, 0x00, 0x67, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x79, + 0x00, 0x69, 0x00, 0x6c, 0x00, 0x04, 0x2d, 0x31, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x79, 0x69, 0x6c, + 0x64, 0x61, 0x6e, 0x20, 0x6b, 0x65, 0x79, 0x69, + 0x6e, 0x06, 0x6f, 0x6e, 0x65, 0x0a, 0x6f, 0x74, + 0x68, 0x65, 0x72, 0x0c, 0x66, 0x75, 0x74, 0x75, + 0x72, 0x65, 0x1a, 0x7b, 0x30, 0x7d, 0x20, 0x79, + 0x69, 0x6c, 0x20, 0x6f, 0x6c, 0x64, 0x69, 0x6e, + 0x08, 0x70, 0x61, 0x73, 0x74, 0x08, 0x79, 0x65, + 0x61, 0x72, 0x0c, 0x62, 0x75, 0x20, 0x79, 0x69, + 0x6c, 0x17, 0x6f, 0x00, 0x18, 0x20, 0xbb, 0x02, + 0x74, 0x00, 0x67, 0x00, 0x61, 0x00, 0x6e, 0x00, + 0x20, 0x00, 0x79, 0x00, 0x69, 0x00, 0x6c, 0x00, + 0x14, 0x79, 0x65, 0x61, 0x72, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x16, 0x79, 0x65, 0x61, 0x72, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x14, + 0x73, 0x68, 0x75, 0x20, 0x63, 0x68, 0x6f, 0x72, + 0x61, 0x6b, 0x1c, 0x6b, 0x65, 0x79, 0x69, 0x6e, + 0x67, 0x69, 0x20, 0x63, 0x68, 0x6f, 0x72, 0x61, + 0x6b, 0x1b, 0x6f, 0x00, 0x18, 0x20, 0x74, 0x00, + 0x67, 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, + 0x63, 0x00, 0x68, 0x00, 0x6f, 0x00, 0x72, 0x00, + 0x61, 0x00, 0x6b, 0x00, 0x26, 0x7b, 0x30, 0x7d, + 0x20, 0x63, 0x68, 0x6f, 0x72, 0x61, 0x6b, 0x64, + 0x61, 0x6e, 0x20, 0x6b, 0x65, 0x79, 0x69, 0x6e, + 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x63, 0x68, 0x6f, + 0x72, 0x61, 0x6b, 0x20, 0x6f, 0x6c, 0x64, 0x69, + 0x6e, 0x0e, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, + 0x72, 0x1a, 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, + 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1c, + 0x71, 0x75, 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0c, 0x73, + 0x68, 0x75, 0x20, 0x6f, 0x79, 0x14, 0x6b, 0x65, + 0x79, 0x69, 0x6e, 0x67, 0x69, 0x20, 0x6f, 0x79, + 0x13, 0x6f, 0x00, 0x18, 0x20, 0x74, 0x00, 0x67, + 0x00, 0x61, 0x00, 0x6e, 0x00, 0x20, 0x00, 0x6f, + 0x00, 0x79, 0x00, 0x1e, 0x7b, 0x30, 0x7d, 0x20, + 0x6f, 0x79, 0x64, 0x61, 0x6e, 0x20, 0x6b, 0x65, + 0x79, 0x69, 0x6e, 0x18, 0x7b, 0x30, 0x7d, 0x20, + 0x6f, 0x79, 0x20, 0x6f, 0x6c, 0x64, 0x69, 0x6e, + 0x0a, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x0a, 0x62, + 0x75, 0x20, 0x6f, 0x79, 0x16, 0x6d, 0x6f, 0x6e, + 0x74, 0x68, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x18, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x12, 0x73, 0x68, + 0x75, 0x20, 0x68, 0x61, 0x66, 0x74, 0x61, 0x1a, + 0x6b, 0x65, 0x79, 0x69, 0x6e, 0x67, 0x69, 0x20, + 0x68, 0x61, 0x66, 0x74, 0x61, 0x19, 0x6f, 0x00, + 0x18, 0x20, 0x74, 0x00, 0x67, 0x00, 0x61, 0x00, + 0x6e, 0x00, 0x20, 0x00, 0x68, 0x00, 0x61, 0x00, + 0x66, 0x00, 0x74, 0x00, 0x61, 0x00, 0x24, 0x7b, + 0x30, 0x7d, 0x20, 0x68, 0x61, 0x66, 0x74, 0x61, + 0x64, 0x61, 0x6e, 0x20, 0x6b, 0x65, 0x79, 0x69, + 0x6e, 0x1e, 0x7b, 0x30, 0x7d, 0x20, 0x68, 0x61, + 0x66, 0x74, 0x61, 0x20, 0x6f, 0x6c, 0x64, 0x69, + 0x6e, 0x08, 0x77, 0x65, 0x65, 0x6b, 0x10, 0x62, + 0x75, 0x20, 0x68, 0x61, 0x66, 0x74, 0x61, 0x14, + 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x16, 0x77, 0x65, 0x65, 0x6b, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0a, 0x62, + 0x75, 0x67, 0x75, 0x6e, 0x0c, 0x65, 0x72, 0x74, + 0x61, 0x67, 0x61, 0x0a, 0x6b, 0x65, 0x63, 0x68, + 0x61, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x6b, 0x75, + 0x6e, 0x64, 0x61, 0x6e, 0x20, 0x6b, 0x65, 0x79, + 0x69, 0x6e, 0x1a, 0x7b, 0x30, 0x7d, 0x20, 0x6b, + 0x75, 0x6e, 0x20, 0x6f, 0x6c, 0x64, 0x69, 0x6e, + 0x06, 0x64, 0x61, 0x79, 0x12, 0x64, 0x61, 0x79, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x14, 0x64, + 0x61, 0x79, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x14, 0x73, 0x68, 0x75, 0x20, 0x73, 0x6f, + 0x61, 0x74, 0x64, 0x61, 0x22, 0x7b, 0x30, 0x7d, + 0x20, 0x73, 0x6f, 0x61, 0x74, 0x64, 0x61, 0x6e, + 0x20, 0x6b, 0x65, 0x79, 0x69, 0x6e, 0x1c, 0x7b, + 0x30, 0x7d, 0x20, 0x73, 0x6f, 0x61, 0x74, 0x20, + 0x6f, 0x6c, 0x64, 0x69, 0x6e, 0x08, 0x68, 0x6f, + 0x75, 0x72, 0x14, 0x68, 0x6f, 0x75, 0x72, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, 0x68, 0x6f, + 0x75, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x18, 0x73, 0x68, 0x75, 0x20, 0x64, 0x61, + 0x71, 0x69, 0x71, 0x61, 0x64, 0x61, 0x26, 0x7b, + 0x30, 0x7d, 0x20, 0x64, 0x61, 0x71, 0x69, 0x71, + 0x61, 0x64, 0x61, 0x6e, 0x20, 0x6b, 0x65, 0x79, + 0x69, 0x6e, 0x20, 0x7b, 0x30, 0x7d, 0x20, 0x64, + 0x61, 0x71, 0x69, 0x71, 0x61, 0x20, 0x6f, 0x6c, + 0x64, 0x69, 0x6e, 0x0c, 0x6d, 0x69, 0x6e, 0x75, + 0x74, 0x65, 0x18, 0x6d, 0x69, 0x6e, 0x75, 0x74, + 0x65, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1a, + 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x6e, + 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0a, 0x68, 0x6f, + 0x7a, 0x69, 0x72, 0x26, 0x7b, 0x30, 0x7d, 0x20, + 0x73, 0x6f, 0x6e, 0x69, 0x79, 0x61, 0x64, 0x61, + 0x6e, 0x20, 0x6b, 0x65, 0x79, 0x69, 0x6e, 0x20, + 0x7b, 0x30, 0x7d, 0x20, 0x73, 0x6f, 0x6e, 0x69, + 0x79, 0x61, 0x20, 0x6f, 0x6c, 0x64, 0x69, 0x6e, + 0x0c, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x18, + 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x73, 0x65, 0x63, + 0x6f, 0x6e, 0x64, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, + 0x6e, 0x75, 0x08, 0x64, 0x61, 0x74, 0x61, 0x70, + 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, + 0x6c, 0x2d, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, + 0x76, 0x65, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2d, + 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2f, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, + 0x74, 0x61, 0x2f, 0x75, 0x7a, 0x2e, 0x6a, 0x73, + 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, + 0x00, 0x07, 0x00, 0x00, 0xa2, 0x0e, 0x01, 0xa0, + 0x01, 0x00, 0x00, 0x00, 0x06, 0xc8, 0x04, 0xd0, + 0x00, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, + 0x42, 0xd2, 0x00, 0x00, 0x00, 0xaa, 0x6a, 0x0d, + 0x07, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, + 0x42, 0xd2, 0x00, 0x00, 0x00, 0x43, 0xd0, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd3, 0x00, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xe1, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xe2, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe0, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xe3, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe4, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xe6, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe7, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0xe9, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe8, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xe8, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x4d, 0xea, 0x00, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0xe7, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xe7, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe8, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xe8, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xeb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xec, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xed, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xee, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xef, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf0, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf0, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xf1, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xf2, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xed, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xee, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xef, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf0, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf0, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xf3, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xf2, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xed, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xee, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xef, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xef, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf0, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf0, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xf4, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xf5, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xf6, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xf8, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf9, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf9, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xfa, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xfb, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xf6, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xf8, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf9, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf9, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xfc, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xfb, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xf6, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xf7, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf8, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0xf8, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf9, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0xf9, + 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0xfd, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xfe, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xff, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0x00, 0x01, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x01, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x02, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x02, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x03, 0x01, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x01, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x01, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x02, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0x04, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x01, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x01, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x02, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x05, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x06, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x07, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x08, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x08, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x09, 0x01, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x07, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x07, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x08, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0x0a, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x07, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x07, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x08, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x0b, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x0c, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x0d, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0e, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0e, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x0f, 0x01, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x0d, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x0d, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0e, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0x10, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x0d, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x0d, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x0e, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x11, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x12, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x04, 0x13, 0x01, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xdc, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x14, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x14, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, 0x15, 0x01, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x13, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x04, 0x13, + 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, + 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x14, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, 0x4d, + 0x16, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x13, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x04, 0x13, 0x01, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x4d, 0xdc, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x04, 0x14, 0x01, 0x00, 0x00, 0x4d, + 0xdb, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, + 0x00, 0x4d, 0x17, 0x01, 0x00, 0x00, 0x04, 0x18, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x19, + 0x01, 0x00, 0x00, 0x4d, 0x1a, 0x01, 0x00, 0x00, + 0x24, 0x01, 0x00, 0xc8, 0xc4, 0x28, 0xb6, 0x04, + 0x01, 0x9d, 0x02, 0x76, 0x53, 0x35, 0x08, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, + 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, + 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, + 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, + 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, + 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, + 0x35, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, + 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, 0x1c, 0x08, + 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, 0x35, 0x1c, + 0x1c, 0x08, 0x08, 0x35, 0x35, 0x1c, 0x08, 0x35, + 0x35, 0x1c, 0x1c, 0x1c, 0x12, 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_vi_size = 2882; + +const uint8_t intl_relative_vi[2882] = { + 0x01, 0x4a, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x04, 0x76, 0x69, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x0f, 0x6e, 0x00, 0x03, + 0x01, 0x6d, 0x00, 0x20, 0x00, 0x6e, 0x00, 0x61, + 0x00, 0x79, 0x00, 0x0f, 0x6e, 0x00, 0x03, 0x01, + 0x6d, 0x00, 0x20, 0x00, 0x73, 0x00, 0x61, 0x00, + 0x75, 0x00, 0x13, 0x6e, 0x00, 0x03, 0x01, 0x6d, + 0x00, 0x20, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x6f, + 0x00, 0xe1, 0x00, 0x69, 0x00, 0x04, 0x2d, 0x31, + 0x1f, 0x73, 0x00, 0x61, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x6e, 0x00, 0x03, 0x01, 0x6d, 0x00, 0x20, + 0x00, 0x6e, 0x00, 0xef, 0x1e, 0x61, 0x00, 0x0a, + 0x6f, 0x74, 0x68, 0x65, 0x72, 0x0c, 0x66, 0x75, + 0x74, 0x75, 0x72, 0x65, 0x1b, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x6e, 0x00, 0x03, + 0x01, 0x6d, 0x00, 0x20, 0x00, 0x74, 0x00, 0x72, + 0x00, 0xb0, 0x01, 0xdb, 0x1e, 0x63, 0x00, 0x08, + 0x70, 0x61, 0x73, 0x74, 0x08, 0x79, 0x65, 0x61, + 0x72, 0x14, 0x79, 0x65, 0x61, 0x72, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x16, 0x79, 0x65, 0x61, + 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x0e, 0x71, 0x75, 0xfd, 0x20, 0x6e, 0xe0, 0x79, + 0x0e, 0x71, 0x75, 0xfd, 0x20, 0x73, 0x61, 0x75, + 0x13, 0x71, 0x00, 0x75, 0x00, 0xfd, 0x00, 0x20, + 0x00, 0x74, 0x00, 0x72, 0x00, 0xb0, 0x01, 0xdb, + 0x1e, 0x63, 0x00, 0x1f, 0x73, 0x00, 0x61, 0x00, + 0x75, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x71, 0x00, 0x75, 0x00, + 0xfd, 0x00, 0x20, 0x00, 0x6e, 0x00, 0xef, 0x1e, + 0x61, 0x00, 0x1b, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x71, 0x00, 0x75, 0x00, 0xfd, + 0x00, 0x20, 0x00, 0x74, 0x00, 0x72, 0x00, 0xb0, + 0x01, 0xdb, 0x1e, 0x63, 0x00, 0x0e, 0x71, 0x75, + 0x61, 0x72, 0x74, 0x65, 0x72, 0x1a, 0x71, 0x75, + 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x1c, 0x71, 0x75, 0x61, 0x72, + 0x74, 0x65, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x12, 0x74, 0x68, 0xe1, 0x6e, 0x67, + 0x20, 0x6e, 0xe0, 0x79, 0x12, 0x74, 0x68, 0xe1, + 0x6e, 0x67, 0x20, 0x73, 0x61, 0x75, 0x17, 0x74, + 0x00, 0x68, 0x00, 0xe1, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0x20, 0x00, 0x74, 0x00, 0x72, 0x00, 0xb0, + 0x01, 0xdb, 0x1e, 0x63, 0x00, 0x23, 0x73, 0x00, + 0x61, 0x00, 0x75, 0x00, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x74, 0x00, + 0x68, 0x00, 0xe1, 0x00, 0x6e, 0x00, 0x67, 0x00, + 0x20, 0x00, 0x6e, 0x00, 0xef, 0x1e, 0x61, 0x00, + 0x1f, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x74, 0x00, 0x68, 0x00, 0xe1, 0x00, 0x6e, + 0x00, 0x67, 0x00, 0x20, 0x00, 0x74, 0x00, 0x72, + 0x00, 0xb0, 0x01, 0xdb, 0x1e, 0x63, 0x00, 0x0a, + 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x16, 0x6d, 0x6f, + 0x6e, 0x74, 0x68, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x18, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x11, 0x74, + 0x00, 0x75, 0x00, 0xa7, 0x1e, 0x6e, 0x00, 0x20, + 0x00, 0x6e, 0x00, 0xe0, 0x00, 0x79, 0x00, 0x11, + 0x74, 0x00, 0x75, 0x00, 0xa7, 0x1e, 0x6e, 0x00, + 0x20, 0x00, 0x73, 0x00, 0x61, 0x00, 0x75, 0x00, + 0x15, 0x74, 0x00, 0x75, 0x00, 0xa7, 0x1e, 0x6e, + 0x00, 0x20, 0x00, 0x74, 0x00, 0x72, 0x00, 0xb0, + 0x01, 0xdb, 0x1e, 0x63, 0x00, 0x21, 0x73, 0x00, + 0x61, 0x00, 0x75, 0x00, 0x20, 0x00, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x74, 0x00, + 0x75, 0x00, 0xa7, 0x1e, 0x6e, 0x00, 0x20, 0x00, + 0x6e, 0x00, 0xef, 0x1e, 0x61, 0x00, 0x1d, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x74, + 0x00, 0x75, 0x00, 0xa7, 0x1e, 0x6e, 0x00, 0x20, + 0x00, 0x74, 0x00, 0x72, 0x00, 0xb0, 0x01, 0xdb, + 0x1e, 0x63, 0x00, 0x08, 0x77, 0x65, 0x65, 0x6b, + 0x14, 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x16, 0x77, 0x65, 0x65, 0x6b, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x0e, + 0x48, 0xf4, 0x6d, 0x20, 0x6e, 0x61, 0x79, 0x10, + 0x4e, 0x67, 0xe0, 0x79, 0x20, 0x6d, 0x61, 0x69, + 0x10, 0x4e, 0x67, 0xe0, 0x79, 0x20, 0x6b, 0x69, + 0x61, 0x0e, 0x48, 0xf4, 0x6d, 0x20, 0x6b, 0x69, + 0x61, 0x04, 0x2d, 0x32, 0x0e, 0x48, 0xf4, 0x6d, + 0x20, 0x71, 0x75, 0x61, 0x21, 0x73, 0x00, 0x61, + 0x00, 0x75, 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x6e, 0x00, 0x67, + 0x00, 0xe0, 0x00, 0x79, 0x00, 0x20, 0x00, 0x6e, + 0x00, 0xef, 0x1e, 0x61, 0x00, 0x1d, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x6e, 0x00, + 0x67, 0x00, 0xe0, 0x00, 0x79, 0x00, 0x20, 0x00, + 0x74, 0x00, 0x72, 0x00, 0xb0, 0x01, 0xdb, 0x1e, + 0x63, 0x00, 0x06, 0x64, 0x61, 0x79, 0x12, 0x64, + 0x61, 0x79, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, + 0x14, 0x64, 0x61, 0x79, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x0f, 0x67, 0x00, 0x69, 0x00, + 0xdd, 0x1e, 0x20, 0x00, 0x6e, 0x00, 0xe0, 0x00, + 0x79, 0x00, 0x1f, 0x73, 0x00, 0x61, 0x00, 0x75, + 0x00, 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x67, 0x00, 0x69, 0x00, 0xdd, + 0x1e, 0x20, 0x00, 0x6e, 0x00, 0xef, 0x1e, 0x61, + 0x00, 0x1b, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x67, 0x00, 0x69, 0x00, 0xdd, 0x1e, + 0x20, 0x00, 0x74, 0x00, 0x72, 0x00, 0xb0, 0x01, + 0xdb, 0x1e, 0x63, 0x00, 0x08, 0x68, 0x6f, 0x75, + 0x72, 0x14, 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x16, 0x68, 0x6f, 0x75, + 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x10, 0x70, 0x68, 0xfa, 0x74, 0x20, 0x6e, 0xe0, + 0x79, 0x21, 0x73, 0x00, 0x61, 0x00, 0x75, 0x00, + 0x20, 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x70, 0x00, 0x68, 0x00, 0xfa, 0x00, + 0x74, 0x00, 0x20, 0x00, 0x6e, 0x00, 0xef, 0x1e, + 0x61, 0x00, 0x1d, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x70, 0x00, 0x68, 0x00, 0xfa, + 0x00, 0x74, 0x00, 0x20, 0x00, 0x74, 0x00, 0x72, + 0x00, 0xb0, 0x01, 0xdb, 0x1e, 0x63, 0x00, 0x0c, + 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x18, 0x6d, + 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x1a, 0x6d, 0x69, 0x6e, 0x75, + 0x74, 0x65, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x0f, 0x62, 0x00, 0xe2, 0x00, 0x79, 0x00, + 0x20, 0x00, 0x67, 0x00, 0x69, 0x00, 0xdd, 0x1e, + 0x21, 0x73, 0x00, 0x61, 0x00, 0x75, 0x00, 0x20, + 0x00, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x67, 0x00, 0x69, 0x00, 0xe2, 0x00, 0x79, + 0x00, 0x20, 0x00, 0x6e, 0x00, 0xef, 0x1e, 0x61, + 0x00, 0x1d, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x67, 0x00, 0x69, 0x00, 0xe2, 0x00, + 0x79, 0x00, 0x20, 0x00, 0x74, 0x00, 0x72, 0x00, + 0xb0, 0x01, 0xdb, 0x1e, 0x63, 0x00, 0x0c, 0x73, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x18, 0x73, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x1a, 0x73, 0x65, 0x63, 0x6f, 0x6e, + 0x64, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, + 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, 0x75, + 0x08, 0x64, 0x61, 0x74, 0x61, 0x70, 0x6e, 0x6f, + 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x75, 0x6c, + 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, 0x6c, 0x2d, + 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2d, 0x66, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x2f, 0x6c, 0x6f, 0x63, + 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, 0x74, 0x61, + 0x2f, 0x76, 0x69, 0x2e, 0x6a, 0x73, 0x0d, 0x00, + 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, 0x00, 0x07, + 0x00, 0x00, 0xba, 0x0b, 0x01, 0xa0, 0x01, 0x00, + 0x00, 0x00, 0x06, 0xc8, 0x04, 0xd0, 0x00, 0x00, + 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, + 0x00, 0x00, 0x00, 0xaa, 0x6a, 0xa5, 0x05, 0x00, + 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, 0x42, 0xd2, + 0x00, 0x00, 0x00, 0x43, 0xd0, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xd3, 0x00, 0x00, 0x00, 0x4d, 0xd4, + 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0xd5, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd5, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe1, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xe2, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xe3, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xe6, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe1, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xe2, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xe3, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe4, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xe7, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe1, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xe2, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xe3, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xe8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe9, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xec, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xed, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xee, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xef, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe9, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xec, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xed, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xf0, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xf2, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xf3, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xf6, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf1, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xf2, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf4, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf5, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xf7, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xf2, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xf3, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xf8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf9, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xfa, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xfb, 0x00, 0x00, 0x00, 0x4d, 0x02, + 0x00, 0x00, 0x80, 0x04, 0xfc, 0x00, 0x00, 0x00, + 0x4d, 0xfd, 0x00, 0x00, 0x00, 0x04, 0xfe, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x01, 0x00, 0x00, 0x0b, 0x04, 0xfb, 0x00, + 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, + 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xfd, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0x02, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xfb, 0x00, 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, + 0x80, 0x04, 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xfd, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xff, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x00, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0x03, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x05, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x06, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0x07, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0x08, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0x09, 0x01, 0x00, 0x00, 0x0b, 0x04, 0x0a, 0x01, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x0b, + 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0x0d, 0x01, 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x0b, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0c, + 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0x0e, 0x01, + 0x00, 0x00, 0x0b, 0x0b, 0x04, 0x0b, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0c, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0x0f, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x11, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x12, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0x13, 0x01, 0x00, 0x00, + 0x0b, 0x0b, 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0x14, 0x01, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0x15, 0x01, 0x00, 0x00, 0x04, 0x16, 0x01, 0x00, + 0x00, 0x26, 0x01, 0x00, 0x4d, 0x17, 0x01, 0x00, + 0x00, 0x4d, 0x18, 0x01, 0x00, 0x00, 0x24, 0x01, + 0x00, 0xc8, 0xc4, 0x28, 0xb2, 0x04, 0x01, 0xf9, + 0x01, 0x76, 0x53, 0x35, 0x08, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, + 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x1c, 0x08, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x1c, 0x08, + 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x1c, 0x08, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x1c, + 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x1c, + 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, 0x1c, + 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, + 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x08, 0x35, + 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x1c, 0x12, 0x1c, + 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_zh_size = 2609; + +const uint8_t intl_relative_zh[2609] = { + 0x01, 0x4c, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x04, 0x7a, 0x68, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x05, 0xca, 0x4e, 0x74, + 0x5e, 0x05, 0x0e, 0x66, 0x74, 0x5e, 0x05, 0xbb, + 0x53, 0x74, 0x5e, 0x04, 0x2d, 0x31, 0x0b, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x74, 0x5e, 0x0e, + 0x54, 0x0a, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x0c, + 0x66, 0x75, 0x74, 0x75, 0x72, 0x65, 0x0b, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x74, 0x5e, 0x4d, + 0x52, 0x08, 0x70, 0x61, 0x73, 0x74, 0x08, 0x79, + 0x65, 0x61, 0x72, 0x14, 0x79, 0x65, 0x61, 0x72, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, 0x79, + 0x65, 0x61, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x07, 0x2c, 0x67, 0x63, 0x5b, 0xa6, + 0x5e, 0x07, 0x0b, 0x4e, 0x63, 0x5b, 0xa6, 0x5e, + 0x07, 0x0a, 0x4e, 0x63, 0x5b, 0xa6, 0x5e, 0x0f, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x2a, 0x4e, + 0x63, 0x5b, 0xa6, 0x5e, 0x0e, 0x54, 0x0f, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x2a, 0x4e, 0x63, + 0x5b, 0xa6, 0x5e, 0x4d, 0x52, 0x0e, 0x71, 0x75, + 0x61, 0x72, 0x74, 0x65, 0x72, 0x1a, 0x71, 0x75, + 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x1c, 0x71, 0x75, 0x61, 0x72, + 0x74, 0x65, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x05, 0x2c, 0x67, 0x08, 0x67, 0x07, + 0x0b, 0x4e, 0x2a, 0x4e, 0x08, 0x67, 0x07, 0x0a, + 0x4e, 0x2a, 0x4e, 0x08, 0x67, 0x0d, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x2a, 0x4e, 0x08, 0x67, + 0x0e, 0x54, 0x0d, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x2a, 0x4e, 0x08, 0x67, 0x4d, 0x52, 0x0a, + 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x16, 0x6d, 0x6f, + 0x6e, 0x74, 0x68, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x18, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x05, 0x2c, + 0x67, 0x68, 0x54, 0x05, 0x0b, 0x4e, 0x68, 0x54, + 0x05, 0x0a, 0x4e, 0x68, 0x54, 0x0b, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x68, 0x54, 0x0e, 0x54, + 0x0b, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x68, + 0x54, 0x4d, 0x52, 0x08, 0x77, 0x65, 0x65, 0x6b, + 0x14, 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x16, 0x77, 0x65, 0x65, 0x6b, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x05, + 0xca, 0x4e, 0x29, 0x59, 0x05, 0x0e, 0x66, 0x29, + 0x59, 0x05, 0x0e, 0x54, 0x29, 0x59, 0x05, 0x4d, + 0x52, 0x29, 0x59, 0x04, 0x2d, 0x32, 0x05, 0x28, + 0x66, 0x29, 0x59, 0x0b, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x29, 0x59, 0x0e, 0x54, 0x0b, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x29, 0x59, 0x4d, + 0x52, 0x06, 0x64, 0x61, 0x79, 0x12, 0x64, 0x61, + 0x79, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x14, + 0x64, 0x61, 0x79, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x13, 0xd9, 0x8f, 0x00, 0x4e, 0xf6, + 0x65, 0xf4, 0x95, 0x20, 0x00, 0x2f, 0x00, 0x20, + 0x00, 0x64, 0x6b, 0xf6, 0x65, 0x0d, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x0f, 0x5c, 0xf6, 0x65, + 0x0e, 0x54, 0x0d, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x0f, 0x5c, 0xf6, 0x65, 0x4d, 0x52, 0x08, + 0x68, 0x6f, 0x75, 0x72, 0x14, 0x68, 0x6f, 0x75, + 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, + 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x05, 0x64, 0x6b, 0x3b, 0x52, + 0x0d, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x06, + 0x52, 0x9f, 0x94, 0x0e, 0x54, 0x0d, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x06, 0x52, 0x9f, 0x94, + 0x4d, 0x52, 0x0c, 0x6d, 0x69, 0x6e, 0x75, 0x74, + 0x65, 0x18, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x6d, + 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x05, 0xb0, 0x73, 0x28, + 0x57, 0x0d, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0xd2, 0x79, 0x9f, 0x94, 0x0e, 0x54, 0x0d, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0xd2, 0x79, 0x9f, + 0x94, 0x4d, 0x52, 0x0c, 0x73, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x0b, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0xd2, 0x79, 0x0e, 0x54, 0x0b, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0xd2, 0x79, 0x4d, 0x52, + 0x18, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x73, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x08, 0x6c, 0x61, 0x74, 0x6e, + 0x04, 0x6e, 0x75, 0x08, 0x64, 0x61, 0x74, 0x61, + 0x70, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, + 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, + 0x74, 0x6c, 0x2d, 0x72, 0x65, 0x6c, 0x61, 0x74, + 0x69, 0x76, 0x65, 0x2d, 0x74, 0x69, 0x6d, 0x65, + 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2f, + 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, + 0x61, 0x74, 0x61, 0x2f, 0x7a, 0x68, 0x2e, 0x6a, + 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, + 0x01, 0x00, 0x07, 0x00, 0x00, 0xb2, 0x0c, 0x01, + 0xa0, 0x01, 0x00, 0x00, 0x00, 0x06, 0xc8, 0x04, + 0xd0, 0x00, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, + 0x00, 0x42, 0xd2, 0x00, 0x00, 0x00, 0xaa, 0x6a, + 0x1d, 0x06, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, + 0x00, 0x42, 0xd2, 0x00, 0x00, 0x00, 0x43, 0xd0, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd3, 0x00, 0x00, + 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, + 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xde, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd5, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xd6, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xdc, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xe0, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe1, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xe2, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xe3, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe4, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe5, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe1, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xe2, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xe3, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe5, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xe7, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe1, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xe2, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xe3, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe4, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe5, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xec, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xed, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xee, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe9, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xea, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xec, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xed, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0xef, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xea, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xeb, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xec, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xed, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xf0, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf1, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xf2, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xf4, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xf5, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0xf6, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xf3, 0x00, 0x00, + 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf5, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, + 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xf7, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf1, 0x00, 0x00, + 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xf2, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, + 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xf4, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xf5, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0xf8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xfb, 0x00, 0x00, + 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, 0xfc, + 0x00, 0x00, 0x00, 0x4d, 0xfd, 0x00, 0x00, 0x00, + 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xff, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x00, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xfb, 0x00, 0x00, + 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, 0xfc, + 0x00, 0x00, 0x00, 0x4d, 0xfd, 0x00, 0x00, 0x00, + 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xff, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x00, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0x02, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, + 0x01, 0x00, 0x00, 0x80, 0x04, 0xfb, 0x00, 0x00, + 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, 0xfc, + 0x00, 0x00, 0x00, 0x4d, 0xfd, 0x00, 0x00, 0x00, + 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xff, 0x00, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x00, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0x03, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x0b, 0x04, 0x05, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x06, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0x07, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x0b, 0x04, 0x05, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x06, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0x08, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x0b, 0x04, 0x05, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x06, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0x09, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x0b, 0x04, 0x0b, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x0c, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0x0d, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x0b, 0x04, 0x0b, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x0c, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0x0e, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x0b, 0x04, 0x0b, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x0c, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0x0f, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x0b, 0x04, 0x11, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x12, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0x13, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x0b, 0x04, 0x14, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0x16, 0x01, 0x00, 0x00, 0x0b, + 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, + 0x00, 0x80, 0x0b, 0x04, 0x14, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0x15, 0x01, 0x00, 0x00, + 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, + 0x00, 0x00, 0x4d, 0x17, 0x01, 0x00, 0x00, 0x04, + 0x18, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, + 0x19, 0x01, 0x00, 0x00, 0x4d, 0x1a, 0x01, 0x00, + 0x00, 0x24, 0x01, 0x00, 0xc8, 0xc4, 0x28, 0xb6, + 0x04, 0x01, 0x85, 0x02, 0x76, 0x53, 0x35, 0x08, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, + 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, + 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x1c, + 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, + 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, + 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x1c, 0x08, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x1c, + 0x08, 0x35, 0x1c, 0x1c, 0x1c, 0x12, 0x1c, 0x1c, + 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_zh_Hans_CN_size = 2626; + +const uint8_t intl_relative_zh_Hans_CN[2626] = { + 0x01, 0x4c, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x14, 0x7a, 0x68, 0x2d, 0x48, 0x61, + 0x6e, 0x73, 0x2d, 0x43, 0x4e, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x05, 0xca, 0x4e, 0x74, + 0x5e, 0x05, 0x0e, 0x66, 0x74, 0x5e, 0x05, 0xbb, + 0x53, 0x74, 0x5e, 0x04, 0x2d, 0x31, 0x0b, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x74, 0x5e, 0x0e, + 0x54, 0x0a, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x0c, + 0x66, 0x75, 0x74, 0x75, 0x72, 0x65, 0x0b, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x74, 0x5e, 0x4d, + 0x52, 0x08, 0x70, 0x61, 0x73, 0x74, 0x08, 0x79, + 0x65, 0x61, 0x72, 0x14, 0x79, 0x65, 0x61, 0x72, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, 0x79, + 0x65, 0x61, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x07, 0x2c, 0x67, 0x63, 0x5b, 0xa6, + 0x5e, 0x07, 0x0b, 0x4e, 0x63, 0x5b, 0xa6, 0x5e, + 0x07, 0x0a, 0x4e, 0x63, 0x5b, 0xa6, 0x5e, 0x0f, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x2a, 0x4e, + 0x63, 0x5b, 0xa6, 0x5e, 0x0e, 0x54, 0x0f, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x2a, 0x4e, 0x63, + 0x5b, 0xa6, 0x5e, 0x4d, 0x52, 0x0e, 0x71, 0x75, + 0x61, 0x72, 0x74, 0x65, 0x72, 0x1a, 0x71, 0x75, + 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x1c, 0x71, 0x75, 0x61, 0x72, + 0x74, 0x65, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x05, 0x2c, 0x67, 0x08, 0x67, 0x07, + 0x0b, 0x4e, 0x2a, 0x4e, 0x08, 0x67, 0x07, 0x0a, + 0x4e, 0x2a, 0x4e, 0x08, 0x67, 0x0d, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x2a, 0x4e, 0x08, 0x67, + 0x0e, 0x54, 0x0d, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x2a, 0x4e, 0x08, 0x67, 0x4d, 0x52, 0x0a, + 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x16, 0x6d, 0x6f, + 0x6e, 0x74, 0x68, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x18, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x05, 0x2c, + 0x67, 0x68, 0x54, 0x05, 0x0b, 0x4e, 0x68, 0x54, + 0x05, 0x0a, 0x4e, 0x68, 0x54, 0x0b, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x68, 0x54, 0x0e, 0x54, + 0x0b, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x68, + 0x54, 0x4d, 0x52, 0x08, 0x77, 0x65, 0x65, 0x6b, + 0x14, 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x16, 0x77, 0x65, 0x65, 0x6b, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x05, + 0xca, 0x4e, 0x29, 0x59, 0x05, 0x0e, 0x66, 0x29, + 0x59, 0x05, 0x0e, 0x54, 0x29, 0x59, 0x05, 0x4d, + 0x52, 0x29, 0x59, 0x04, 0x2d, 0x32, 0x05, 0x28, + 0x66, 0x29, 0x59, 0x0b, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x29, 0x59, 0x0e, 0x54, 0x0b, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x29, 0x59, 0x4d, + 0x52, 0x06, 0x64, 0x61, 0x79, 0x12, 0x64, 0x61, + 0x79, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x14, + 0x64, 0x61, 0x79, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x13, 0xd9, 0x8f, 0x00, 0x4e, 0xf6, + 0x65, 0xf4, 0x95, 0x20, 0x00, 0x2f, 0x00, 0x20, + 0x00, 0x64, 0x6b, 0xf6, 0x65, 0x0d, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x0f, 0x5c, 0xf6, 0x65, + 0x0e, 0x54, 0x0d, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x0f, 0x5c, 0xf6, 0x65, 0x4d, 0x52, 0x08, + 0x68, 0x6f, 0x75, 0x72, 0x14, 0x68, 0x6f, 0x75, + 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, + 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x05, 0x64, 0x6b, 0x3b, 0x52, + 0x0d, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x06, + 0x52, 0x9f, 0x94, 0x0e, 0x54, 0x0d, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x06, 0x52, 0x9f, 0x94, + 0x4d, 0x52, 0x0c, 0x6d, 0x69, 0x6e, 0x75, 0x74, + 0x65, 0x18, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x6d, + 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x05, 0xb0, 0x73, 0x28, + 0x57, 0x0d, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0xd2, 0x79, 0x9f, 0x94, 0x0e, 0x54, 0x0d, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0xd2, 0x79, 0x9f, + 0x94, 0x4d, 0x52, 0x0c, 0x73, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x0b, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0xd2, 0x79, 0x0e, 0x54, 0x0b, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0xd2, 0x79, 0x4d, 0x52, + 0x18, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x73, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x08, 0x6c, 0x61, 0x74, 0x6e, + 0x04, 0x6e, 0x75, 0x08, 0x64, 0x61, 0x74, 0x61, + 0x80, 0x01, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, + 0x6e, 0x74, 0x6c, 0x2d, 0x72, 0x65, 0x6c, 0x61, + 0x74, 0x69, 0x76, 0x65, 0x2d, 0x74, 0x69, 0x6d, + 0x65, 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, + 0x64, 0x61, 0x74, 0x61, 0x2f, 0x7a, 0x68, 0x2d, + 0x48, 0x61, 0x6e, 0x73, 0x2d, 0x43, 0x4e, 0x2e, + 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, + 0x00, 0x01, 0x00, 0x07, 0x00, 0x00, 0xb2, 0x0c, + 0x01, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x06, 0xc8, + 0x04, 0xd0, 0x00, 0x00, 0x00, 0x39, 0xd1, 0x00, + 0x00, 0x00, 0x42, 0xd2, 0x00, 0x00, 0x00, 0xaa, + 0x6a, 0x1d, 0x06, 0x00, 0x00, 0x39, 0xd1, 0x00, + 0x00, 0x00, 0x42, 0xd2, 0x00, 0x00, 0x00, 0x43, + 0xd0, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd3, 0x00, + 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd5, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe1, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xe2, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xe3, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe4, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe1, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xe2, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xe3, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe1, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xe2, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xe3, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe4, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xee, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe9, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xec, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xed, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xef, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xf0, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf1, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xf2, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf4, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf5, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xf6, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xf2, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xf3, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xf7, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf1, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xf2, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf4, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf5, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xf8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xfa, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xfb, 0x00, + 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, + 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xfd, 0x00, 0x00, + 0x00, 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xff, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x00, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xfa, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xfb, 0x00, + 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, + 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xfd, 0x00, 0x00, + 0x00, 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xff, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x00, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0x02, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xfa, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xfb, 0x00, + 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, + 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xfd, 0x00, 0x00, + 0x00, 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xff, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x00, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0x03, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x05, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x06, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0x07, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x05, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x06, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0x08, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x05, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x06, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0x09, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x0b, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0c, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0x0d, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x0b, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0c, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0x0e, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x0b, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0c, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0x0f, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x11, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x12, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0x13, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x14, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0x16, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x14, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x15, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0x17, 0x01, 0x00, 0x00, + 0x04, 0x18, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x19, 0x01, 0x00, 0x00, 0x4d, 0x1a, 0x01, + 0x00, 0x00, 0x24, 0x01, 0x00, 0xc8, 0xc4, 0x28, + 0xb6, 0x04, 0x01, 0x85, 0x02, 0x76, 0x53, 0x35, + 0x08, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, + 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, + 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, + 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, + 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, + 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x1c, 0x08, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x1c, + 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, + 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x1c, 0x12, 0x1c, + 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_zh_Hans_HK_size = 2600; + +const uint8_t intl_relative_zh_Hans_HK[2600] = { + 0x01, 0x4a, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x14, 0x7a, 0x68, 0x2d, 0x48, 0x61, + 0x6e, 0x73, 0x2d, 0x48, 0x4b, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x05, 0xca, 0x4e, 0x74, + 0x5e, 0x05, 0x0e, 0x66, 0x74, 0x5e, 0x05, 0xbb, + 0x53, 0x74, 0x5e, 0x04, 0x2d, 0x31, 0x0b, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x74, 0x5e, 0x0e, + 0x54, 0x0a, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x0c, + 0x66, 0x75, 0x74, 0x75, 0x72, 0x65, 0x0b, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x74, 0x5e, 0x4d, + 0x52, 0x08, 0x70, 0x61, 0x73, 0x74, 0x08, 0x79, + 0x65, 0x61, 0x72, 0x14, 0x79, 0x65, 0x61, 0x72, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, 0x79, + 0x65, 0x61, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x07, 0x2c, 0x67, 0x63, 0x5b, 0xa6, + 0x5e, 0x07, 0x0b, 0x4e, 0x63, 0x5b, 0xa6, 0x5e, + 0x07, 0x0a, 0x4e, 0x63, 0x5b, 0xa6, 0x5e, 0x0f, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x2a, 0x4e, + 0x63, 0x5b, 0xa6, 0x5e, 0x0e, 0x54, 0x0f, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x2a, 0x4e, 0x63, + 0x5b, 0xa6, 0x5e, 0x4d, 0x52, 0x0e, 0x71, 0x75, + 0x61, 0x72, 0x74, 0x65, 0x72, 0x1a, 0x71, 0x75, + 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x1c, 0x71, 0x75, 0x61, 0x72, + 0x74, 0x65, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x05, 0x2c, 0x67, 0x08, 0x67, 0x07, + 0x0b, 0x4e, 0x2a, 0x4e, 0x08, 0x67, 0x07, 0x0a, + 0x4e, 0x2a, 0x4e, 0x08, 0x67, 0x0d, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x2a, 0x4e, 0x08, 0x67, + 0x0e, 0x54, 0x0d, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x2a, 0x4e, 0x08, 0x67, 0x4d, 0x52, 0x0a, + 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x16, 0x6d, 0x6f, + 0x6e, 0x74, 0x68, 0x2d, 0x73, 0x68, 0x6f, 0x72, + 0x74, 0x18, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x05, 0x2c, + 0x67, 0x68, 0x54, 0x05, 0x0b, 0x4e, 0x68, 0x54, + 0x05, 0x0a, 0x4e, 0x68, 0x54, 0x0b, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x68, 0x54, 0x0e, 0x54, + 0x0b, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x68, + 0x54, 0x4d, 0x52, 0x08, 0x77, 0x65, 0x65, 0x6b, + 0x14, 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x16, 0x77, 0x65, 0x65, 0x6b, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x05, + 0xca, 0x4e, 0x29, 0x59, 0x05, 0x0e, 0x66, 0x29, + 0x59, 0x05, 0x0e, 0x54, 0x29, 0x59, 0x05, 0x4d, + 0x52, 0x29, 0x59, 0x04, 0x2d, 0x32, 0x05, 0x28, + 0x66, 0x29, 0x59, 0x0b, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x29, 0x59, 0x0e, 0x54, 0x0b, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x29, 0x59, 0x4d, + 0x52, 0x06, 0x64, 0x61, 0x79, 0x12, 0x64, 0x61, + 0x79, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x14, + 0x64, 0x61, 0x79, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x13, 0xd9, 0x8f, 0x00, 0x4e, 0xf6, + 0x65, 0xf4, 0x95, 0x20, 0x00, 0x2f, 0x00, 0x20, + 0x00, 0x64, 0x6b, 0xf6, 0x65, 0x0d, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x0f, 0x5c, 0xf6, 0x65, + 0x0e, 0x54, 0x0d, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x0f, 0x5c, 0xf6, 0x65, 0x4d, 0x52, 0x08, + 0x68, 0x6f, 0x75, 0x72, 0x14, 0x68, 0x6f, 0x75, + 0x72, 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, + 0x68, 0x6f, 0x75, 0x72, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x05, 0x64, 0x6b, 0x3b, 0x52, + 0x0d, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x06, + 0x52, 0x9f, 0x94, 0x0e, 0x54, 0x0d, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x06, 0x52, 0x9f, 0x94, + 0x4d, 0x52, 0x0c, 0x6d, 0x69, 0x6e, 0x75, 0x74, + 0x65, 0x18, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, + 0x2d, 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x6d, + 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x6e, 0x61, + 0x72, 0x72, 0x6f, 0x77, 0x05, 0xb0, 0x73, 0x28, + 0x57, 0x0b, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0xd2, 0x79, 0x0e, 0x54, 0x0b, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0xd2, 0x79, 0x4d, 0x52, 0x0c, + 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x18, 0x73, + 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x1a, 0x73, 0x65, 0x63, 0x6f, + 0x6e, 0x64, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x08, 0x6c, 0x61, 0x74, 0x6e, 0x04, 0x6e, + 0x75, 0x08, 0x64, 0x61, 0x74, 0x61, 0x80, 0x01, + 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, 0x6f, 0x64, + 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, 0x6e, 0x74, + 0x6c, 0x2d, 0x72, 0x65, 0x6c, 0x61, 0x74, 0x69, + 0x76, 0x65, 0x2d, 0x74, 0x69, 0x6d, 0x65, 0x2d, + 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x2f, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, 0x64, 0x61, + 0x74, 0x61, 0x2f, 0x7a, 0x68, 0x2d, 0x48, 0x61, + 0x6e, 0x73, 0x2d, 0x48, 0x4b, 0x2e, 0x6a, 0x73, + 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, 0x00, 0x01, + 0x00, 0x07, 0x00, 0x00, 0xb2, 0x0c, 0x01, 0xa0, + 0x01, 0x00, 0x00, 0x00, 0x06, 0xc8, 0x04, 0xd0, + 0x00, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, + 0x42, 0xd2, 0x00, 0x00, 0x00, 0xaa, 0x6a, 0x1d, + 0x06, 0x00, 0x00, 0x39, 0xd1, 0x00, 0x00, 0x00, + 0x42, 0xd2, 0x00, 0x00, 0x00, 0x43, 0xd0, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd3, 0x00, 0x00, 0x00, + 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, 0x0b, 0x04, + 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xde, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xd5, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xd6, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xdc, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xdc, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xe0, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe1, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xe2, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xe3, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe1, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xe2, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xe3, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe4, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe5, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xe7, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe1, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xe2, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xe3, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe9, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xec, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xed, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xee, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xe9, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xea, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0xef, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xe9, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xea, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xeb, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xec, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xed, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xf0, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xf1, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xf2, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xf3, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0xf6, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf1, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xf2, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xf3, 0x00, 0x00, 0x00, + 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf4, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf5, + 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, + 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, 0xf7, 0x00, + 0x00, 0x00, 0x0b, 0x04, 0xf1, 0x00, 0x00, 0x00, + 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, 0xf2, 0x00, + 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, + 0xf3, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0xf8, 0x00, 0x00, 0x00, 0x0b, 0x04, + 0xf9, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xfb, 0x00, 0x00, 0x00, + 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, 0xfc, 0x00, + 0x00, 0x00, 0x4d, 0xfd, 0x00, 0x00, 0x00, 0x04, + 0xfe, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0x01, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xf9, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xfb, 0x00, 0x00, 0x00, + 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, 0xfc, 0x00, + 0x00, 0x00, 0x4d, 0xfd, 0x00, 0x00, 0x00, 0x04, + 0xfe, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0x02, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0xf9, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x04, 0xfa, 0x00, 0x00, 0x00, 0x4d, 0x01, + 0x00, 0x00, 0x80, 0x04, 0xfb, 0x00, 0x00, 0x00, + 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, 0xfc, 0x00, + 0x00, 0x00, 0x4d, 0xfd, 0x00, 0x00, 0x00, 0x04, + 0xfe, 0x00, 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0xff, 0x00, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x00, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0x03, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x04, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0x07, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x04, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0x08, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x04, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x05, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x06, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0x09, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0x0d, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0x0e, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x0b, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x0c, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0x0f, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x10, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0x13, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x10, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0x14, 0x01, 0x00, 0x00, 0x0b, 0x04, + 0x10, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, + 0x80, 0x0b, 0x04, 0x11, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, + 0x00, 0x0b, 0x04, 0x12, 0x01, 0x00, 0x00, 0x4d, + 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, + 0x00, 0x4d, 0x15, 0x01, 0x00, 0x00, 0x04, 0x16, + 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, 0x4d, 0x17, + 0x01, 0x00, 0x00, 0x4d, 0x18, 0x01, 0x00, 0x00, + 0x24, 0x01, 0x00, 0xc8, 0xc4, 0x28, 0xb2, 0x04, + 0x01, 0x85, 0x02, 0x76, 0x53, 0x35, 0x08, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, + 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x1c, 0x08, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x1c, + 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, + 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, + 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x1c, 0x08, + 0x35, 0x1c, 0x1c, 0x1c, 0x12, 0x1c, 0x1c, 0x17, +}; + +/* File generated automatically by the QuickJS compiler. */ + +#include + +const uint32_t intl_relative_zh_Hant_TW_size = 2618; + +const uint8_t intl_relative_zh_Hant_TW[2618] = { + 0x01, 0x4a, 0x1e, 0x5f, 0x5f, 0x61, 0x64, 0x64, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x08, 0x49, 0x6e, 0x74, 0x6c, 0x24, + 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x54, 0x69, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x6d, + 0x61, 0x74, 0x14, 0x7a, 0x68, 0x2d, 0x48, 0x61, + 0x6e, 0x74, 0x2d, 0x54, 0x57, 0x0c, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x65, 0x05, 0xca, 0x4e, 0x74, + 0x5e, 0x05, 0x0e, 0x66, 0x74, 0x5e, 0x05, 0xbb, + 0x53, 0x74, 0x5e, 0x04, 0x2d, 0x31, 0x0d, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x74, + 0x5e, 0x8c, 0x5f, 0x0a, 0x6f, 0x74, 0x68, 0x65, + 0x72, 0x0c, 0x66, 0x75, 0x74, 0x75, 0x72, 0x65, + 0x0d, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x74, 0x5e, 0x4d, 0x52, 0x08, 0x70, 0x61, + 0x73, 0x74, 0x08, 0x79, 0x65, 0x61, 0x72, 0x14, + 0x79, 0x65, 0x61, 0x72, 0x2d, 0x73, 0x68, 0x6f, + 0x72, 0x74, 0x16, 0x79, 0x65, 0x61, 0x72, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x07, 0x19, + 0x90, 0x00, 0x4e, 0x63, 0x5b, 0x07, 0x0b, 0x4e, + 0x00, 0x4e, 0x63, 0x5b, 0x07, 0x0a, 0x4e, 0x00, + 0x4e, 0x63, 0x5b, 0x0d, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x63, 0x5b, 0x8c, 0x5f, + 0x0d, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x63, 0x5b, 0x4d, 0x52, 0x0e, 0x71, 0x75, + 0x61, 0x72, 0x74, 0x65, 0x72, 0x1a, 0x71, 0x75, + 0x61, 0x72, 0x74, 0x65, 0x72, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x1c, 0x71, 0x75, 0x61, 0x72, + 0x74, 0x65, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x05, 0x2c, 0x67, 0x08, 0x67, 0x07, + 0x0b, 0x4e, 0x0b, 0x50, 0x08, 0x67, 0x07, 0x0a, + 0x4e, 0x0b, 0x50, 0x08, 0x67, 0x0f, 0x7b, 0x00, + 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x0b, 0x50, + 0x08, 0x67, 0x8c, 0x5f, 0x0f, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0x0b, 0x50, 0x08, + 0x67, 0x4d, 0x52, 0x0a, 0x6d, 0x6f, 0x6e, 0x74, + 0x68, 0x16, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x18, 0x6d, 0x6f, + 0x6e, 0x74, 0x68, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x05, 0x2c, 0x67, 0x31, 0x90, 0x05, + 0x0b, 0x4e, 0x31, 0x90, 0x05, 0x0a, 0x4e, 0x31, + 0x90, 0x0d, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x31, 0x90, 0x8c, 0x5f, 0x0d, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x31, + 0x90, 0x4d, 0x52, 0x08, 0x77, 0x65, 0x65, 0x6b, + 0x14, 0x77, 0x65, 0x65, 0x6b, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x16, 0x77, 0x65, 0x65, 0x6b, + 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x05, + 0xca, 0x4e, 0x29, 0x59, 0x05, 0x0e, 0x66, 0x29, + 0x59, 0x05, 0x8c, 0x5f, 0x29, 0x59, 0x05, 0x4d, + 0x52, 0x29, 0x59, 0x04, 0x2d, 0x32, 0x05, 0x28, + 0x66, 0x29, 0x59, 0x0d, 0x7b, 0x00, 0x30, 0x00, + 0x7d, 0x00, 0x20, 0x00, 0x29, 0x59, 0x8c, 0x5f, + 0x0d, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, + 0x00, 0x29, 0x59, 0x4d, 0x52, 0x06, 0x64, 0x61, + 0x79, 0x12, 0x64, 0x61, 0x79, 0x2d, 0x73, 0x68, + 0x6f, 0x72, 0x74, 0x14, 0x64, 0x61, 0x79, 0x2d, + 0x6e, 0x61, 0x72, 0x72, 0x6f, 0x77, 0x09, 0x19, + 0x90, 0x00, 0x4e, 0x0f, 0x5c, 0x42, 0x66, 0x0f, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0x0f, 0x5c, 0x42, 0x66, 0x8c, 0x5f, 0x0f, 0x7b, + 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, 0x0f, + 0x5c, 0x42, 0x66, 0x4d, 0x52, 0x08, 0x68, 0x6f, + 0x75, 0x72, 0x14, 0x68, 0x6f, 0x75, 0x72, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x16, 0x68, 0x6f, + 0x75, 0x72, 0x2d, 0x6e, 0x61, 0x72, 0x72, 0x6f, + 0x77, 0x09, 0x19, 0x90, 0x00, 0x4e, 0x06, 0x52, + 0x18, 0x94, 0x0f, 0x7b, 0x00, 0x30, 0x00, 0x7d, + 0x00, 0x20, 0x00, 0x06, 0x52, 0x18, 0x94, 0x8c, + 0x5f, 0x0f, 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, + 0x20, 0x00, 0x06, 0x52, 0x18, 0x94, 0x4d, 0x52, + 0x0c, 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x18, + 0x6d, 0x69, 0x6e, 0x75, 0x74, 0x65, 0x2d, 0x73, + 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x6d, 0x69, 0x6e, + 0x75, 0x74, 0x65, 0x2d, 0x6e, 0x61, 0x72, 0x72, + 0x6f, 0x77, 0x05, 0xfe, 0x73, 0x28, 0x57, 0x0d, + 0x7b, 0x00, 0x30, 0x00, 0x7d, 0x00, 0x20, 0x00, + 0xd2, 0x79, 0x8c, 0x5f, 0x0d, 0x7b, 0x00, 0x30, + 0x00, 0x7d, 0x00, 0x20, 0x00, 0xd2, 0x79, 0x4d, + 0x52, 0x0c, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, + 0x18, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x2d, + 0x73, 0x68, 0x6f, 0x72, 0x74, 0x1a, 0x73, 0x65, + 0x63, 0x6f, 0x6e, 0x64, 0x2d, 0x6e, 0x61, 0x72, + 0x72, 0x6f, 0x77, 0x08, 0x6c, 0x61, 0x74, 0x6e, + 0x04, 0x6e, 0x75, 0x08, 0x64, 0x61, 0x74, 0x61, + 0x80, 0x01, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x6d, + 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x73, 0x2f, 0x69, + 0x6e, 0x74, 0x6c, 0x2d, 0x72, 0x65, 0x6c, 0x61, + 0x74, 0x69, 0x76, 0x65, 0x2d, 0x74, 0x69, 0x6d, + 0x65, 0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x2f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x2d, + 0x64, 0x61, 0x74, 0x61, 0x2f, 0x7a, 0x68, 0x2d, + 0x48, 0x61, 0x6e, 0x74, 0x2d, 0x54, 0x57, 0x2e, + 0x6a, 0x73, 0x0d, 0x00, 0x06, 0x00, 0x9e, 0x01, + 0x00, 0x01, 0x00, 0x07, 0x00, 0x00, 0xb2, 0x0c, + 0x01, 0xa0, 0x01, 0x00, 0x00, 0x00, 0x06, 0xc8, + 0x04, 0xd0, 0x00, 0x00, 0x00, 0x39, 0xd1, 0x00, + 0x00, 0x00, 0x42, 0xd2, 0x00, 0x00, 0x00, 0xaa, + 0x6a, 0x1d, 0x06, 0x00, 0x00, 0x39, 0xd1, 0x00, + 0x00, 0x00, 0x42, 0xd2, 0x00, 0x00, 0x00, 0x43, + 0xd0, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd3, 0x00, + 0x00, 0x00, 0x4d, 0xd4, 0x00, 0x00, 0x00, 0x0b, + 0x0b, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xde, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd5, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xd6, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xd7, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xd9, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xdc, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xdf, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xd5, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xd6, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xd7, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xd9, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xdc, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xe0, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe1, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xe2, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xe3, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe4, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xe6, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe1, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xe2, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xe3, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe4, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xe5, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xe7, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe1, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xe2, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xe3, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe4, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe5, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xe8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xee, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xe9, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xea, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xeb, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xec, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xed, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xef, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xe9, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xea, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xeb, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xec, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xed, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xf0, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf1, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xf2, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf4, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf5, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xf6, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf1, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xf2, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xf3, 0x00, + 0x00, 0x00, 0x4d, 0xd8, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf4, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdb, 0x00, 0x00, 0x00, 0x0b, + 0x04, 0xf5, 0x00, 0x00, 0x00, 0x4d, 0xda, 0x00, + 0x00, 0x00, 0x4d, 0xdd, 0x00, 0x00, 0x00, 0x4d, + 0xf7, 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf1, 0x00, + 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x80, 0x04, + 0xf2, 0x00, 0x00, 0x00, 0x4d, 0x01, 0x00, 0x00, + 0x80, 0x04, 0xf3, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf4, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xf5, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0xf8, 0x00, 0x00, 0x00, + 0x0b, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xfa, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xfb, 0x00, + 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, + 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xfd, 0x00, 0x00, + 0x00, 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xff, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x00, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0x01, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xfa, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xfb, 0x00, + 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, + 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xfd, 0x00, 0x00, + 0x00, 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xff, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x00, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0x02, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0xf9, 0x00, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x04, 0xfa, 0x00, 0x00, 0x00, + 0x4d, 0x01, 0x00, 0x00, 0x80, 0x04, 0xfb, 0x00, + 0x00, 0x00, 0x4d, 0x02, 0x00, 0x00, 0x80, 0x04, + 0xfc, 0x00, 0x00, 0x00, 0x4d, 0xfd, 0x00, 0x00, + 0x00, 0x04, 0xfe, 0x00, 0x00, 0x00, 0x4d, 0xd8, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0xff, 0x00, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x00, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0x03, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x05, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x06, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0x07, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x05, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x06, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0x08, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x04, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x05, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x06, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0x09, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x0b, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0c, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0x0d, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x0b, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0c, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0x0e, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x0a, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x0b, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x0c, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0x0f, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x11, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x12, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0x13, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x11, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x12, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0x14, 0x01, 0x00, 0x00, + 0x0b, 0x04, 0x10, 0x01, 0x00, 0x00, 0x4d, 0x00, + 0x00, 0x00, 0x80, 0x0b, 0x04, 0x11, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdb, + 0x00, 0x00, 0x00, 0x0b, 0x04, 0x12, 0x01, 0x00, + 0x00, 0x4d, 0xda, 0x00, 0x00, 0x00, 0x4d, 0xdd, + 0x00, 0x00, 0x00, 0x4d, 0x15, 0x01, 0x00, 0x00, + 0x04, 0x16, 0x01, 0x00, 0x00, 0x26, 0x01, 0x00, + 0x4d, 0x17, 0x01, 0x00, 0x00, 0x4d, 0x18, 0x01, + 0x00, 0x00, 0x24, 0x01, 0x00, 0xc8, 0xc4, 0x28, + 0xb2, 0x04, 0x01, 0x85, 0x02, 0x76, 0x53, 0x35, + 0x08, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, + 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, + 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, + 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x08, 0x35, + 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x35, + 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x35, 0x35, 0x35, 0x35, + 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x35, 0x35, 0x35, 0x35, 0x08, 0x35, 0x1c, + 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, + 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, + 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, + 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x08, + 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, 0x1c, + 0x08, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, 0x1c, + 0x1c, 0x08, 0x35, 0x08, 0x35, 0x1c, 0x08, 0x35, + 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x1c, 0x08, + 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, 0x1c, + 0x08, 0x35, 0x1c, 0x1c, 0x08, 0x35, 0x08, 0x35, + 0x1c, 0x08, 0x35, 0x1c, 0x1c, 0x1c, 0x12, 0x1c, + 0x1c, 0x17, +}; + diff --git a/frameworks/bridge/js_frontend/engine/quickjs/intl/intl_support.cpp b/frameworks/bridge/js_frontend/engine/quickjs/intl/intl_support.cpp new file mode 100644 index 00000000..6f74feb4 --- /dev/null +++ b/frameworks/bridge/js_frontend/engine/quickjs/intl/intl_support.cpp @@ -0,0 +1,326 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// Automatically generated file; DO NOT EDIT. + +#include "frameworks/bridge/js_frontend/engine/quickjs/intl/intl_support.h" + +std::unordered_map> g_localeDatas = { + { "intl_en", std::vector {static_cast(&intl_en_size), + static_cast(intl_en)} }, + { "intl_relative_en", std::vector {static_cast(&intl_relative_en_size), + static_cast(intl_relative_en)} }, + { "intl_ar", std::vector {static_cast(&intl_ar_size), + static_cast(intl_ar)} }, + { "intl_relative_ar", std::vector {static_cast(&intl_relative_ar_size), + static_cast(intl_relative_ar)} }, + { "intl_az", std::vector {static_cast(&intl_az_size), + static_cast(intl_az)} }, + { "intl_relative_az", std::vector {static_cast(&intl_relative_az_size), + static_cast(intl_relative_az)} }, + { "intl_be", std::vector {static_cast(&intl_be_size), + static_cast(intl_be)} }, + { "intl_relative_be", std::vector {static_cast(&intl_relative_be_size), + static_cast(intl_relative_be)} }, + { "intl_bg", std::vector {static_cast(&intl_bg_size), + static_cast(intl_bg)} }, + { "intl_relative_bg", std::vector {static_cast(&intl_relative_bg_size), + static_cast(intl_relative_bg)} }, + { "intl_bn", std::vector {static_cast(&intl_bn_size), + static_cast(intl_bn)} }, + { "intl_relative_bn", std::vector {static_cast(&intl_relative_bn_size), + static_cast(intl_relative_bn)} }, + { "intl_bo_CN", std::vector {static_cast(&intl_bo_CN_size), + static_cast(intl_bo_CN)} }, + { "intl_relative_bo_CN", std::vector {static_cast(&intl_relative_bo_CN_size), + static_cast(intl_relative_bo_CN)} }, + { "intl_bs", std::vector {static_cast(&intl_bs_size), + static_cast(intl_bs)} }, + { "intl_relative_bs", std::vector {static_cast(&intl_relative_bs_size), + static_cast(intl_relative_bs)} }, + { "intl_ca", std::vector {static_cast(&intl_ca_size), + static_cast(intl_ca)} }, + { "intl_relative_ca", std::vector {static_cast(&intl_relative_ca_size), + static_cast(intl_relative_ca)} }, + { "intl_cs", std::vector {static_cast(&intl_cs_size), + static_cast(intl_cs)} }, + { "intl_relative_cs", std::vector {static_cast(&intl_relative_cs_size), + static_cast(intl_relative_cs)} }, + { "intl_da", std::vector {static_cast(&intl_da_size), + static_cast(intl_da)} }, + { "intl_relative_da", std::vector {static_cast(&intl_relative_da_size), + static_cast(intl_relative_da)} }, + { "intl_de", std::vector {static_cast(&intl_de_size), + static_cast(intl_de)} }, + { "intl_relative_de", std::vector {static_cast(&intl_relative_de_size), + static_cast(intl_relative_de)} }, + { "intl_el", std::vector {static_cast(&intl_el_size), + static_cast(intl_el)} }, + { "intl_relative_el", std::vector {static_cast(&intl_relative_el_size), + static_cast(intl_relative_el)} }, + { "intl_en_GB", std::vector {static_cast(&intl_en_GB_size), + static_cast(intl_en_GB)} }, + { "intl_relative_en_GB", std::vector {static_cast(&intl_relative_en_GB_size), + static_cast(intl_relative_en_GB)} }, + { "intl_es", std::vector {static_cast(&intl_es_size), + static_cast(intl_es)} }, + { "intl_relative_es", std::vector {static_cast(&intl_relative_es_size), + static_cast(intl_relative_es)} }, + { "intl_es_US", std::vector {static_cast(&intl_es_US_size), + static_cast(intl_es_US)} }, + { "intl_relative_es_US", std::vector {static_cast(&intl_relative_es_US_size), + static_cast(intl_relative_es_US)} }, + { "intl_et", std::vector {static_cast(&intl_et_size), + static_cast(intl_et)} }, + { "intl_relative_et", std::vector {static_cast(&intl_relative_et_size), + static_cast(intl_relative_et)} }, + { "intl_eu", std::vector {static_cast(&intl_eu_size), + static_cast(intl_eu)} }, + { "intl_relative_eu", std::vector {static_cast(&intl_relative_eu_size), + static_cast(intl_relative_eu)} }, + { "intl_fa", std::vector {static_cast(&intl_fa_size), + static_cast(intl_fa)} }, + { "intl_relative_fa", std::vector {static_cast(&intl_relative_fa_size), + static_cast(intl_relative_fa)} }, + { "intl_fi", std::vector {static_cast(&intl_fi_size), + static_cast(intl_fi)} }, + { "intl_relative_fi", std::vector {static_cast(&intl_relative_fi_size), + static_cast(intl_relative_fi)} }, + { "intl_fr", std::vector {static_cast(&intl_fr_size), + static_cast(intl_fr)} }, + { "intl_relative_fr", std::vector {static_cast(&intl_relative_fr_size), + static_cast(intl_relative_fr)} }, + { "intl_gl", std::vector {static_cast(&intl_gl_size), + static_cast(intl_gl)} }, + { "intl_relative_gl", std::vector {static_cast(&intl_relative_gl_size), + static_cast(intl_relative_gl)} }, + { "intl_hi", std::vector {static_cast(&intl_hi_size), + static_cast(intl_hi)} }, + { "intl_relative_hi", std::vector {static_cast(&intl_relative_hi_size), + static_cast(intl_relative_hi)} }, + { "intl_hr", std::vector {static_cast(&intl_hr_size), + static_cast(intl_hr)} }, + { "intl_relative_hr", std::vector {static_cast(&intl_relative_hr_size), + static_cast(intl_relative_hr)} }, + { "intl_hu", std::vector {static_cast(&intl_hu_size), + static_cast(intl_hu)} }, + { "intl_relative_hu", std::vector {static_cast(&intl_relative_hu_size), + static_cast(intl_relative_hu)} }, + { "intl_it", std::vector {static_cast(&intl_it_size), + static_cast(intl_it)} }, + { "intl_relative_it", std::vector {static_cast(&intl_relative_it_size), + static_cast(intl_relative_it)} }, + { "intl_ja", std::vector {static_cast(&intl_ja_size), + static_cast(intl_ja)} }, + { "intl_relative_ja", std::vector {static_cast(&intl_relative_ja_size), + static_cast(intl_relative_ja)} }, + { "intl_ka", std::vector {static_cast(&intl_ka_size), + static_cast(intl_ka)} }, + { "intl_relative_ka", std::vector {static_cast(&intl_relative_ka_size), + static_cast(intl_relative_ka)} }, + { "intl_kk", std::vector {static_cast(&intl_kk_size), + static_cast(intl_kk)} }, + { "intl_relative_kk", std::vector {static_cast(&intl_relative_kk_size), + static_cast(intl_relative_kk)} }, + { "intl_km", std::vector {static_cast(&intl_km_size), + static_cast(intl_km)} }, + { "intl_relative_km", std::vector {static_cast(&intl_relative_km_size), + static_cast(intl_relative_km)} }, + { "intl_ko", std::vector {static_cast(&intl_ko_size), + static_cast(intl_ko)} }, + { "intl_relative_ko", std::vector {static_cast(&intl_relative_ko_size), + static_cast(intl_relative_ko)} }, + { "intl_lo", std::vector {static_cast(&intl_lo_size), + static_cast(intl_lo)} }, + { "intl_relative_lo", std::vector {static_cast(&intl_relative_lo_size), + static_cast(intl_relative_lo)} }, + { "intl_lt", std::vector {static_cast(&intl_lt_size), + static_cast(intl_lt)} }, + { "intl_relative_lt", std::vector {static_cast(&intl_relative_lt_size), + static_cast(intl_relative_lt)} }, + { "intl_lv", std::vector {static_cast(&intl_lv_size), + static_cast(intl_lv)} }, + { "intl_relative_lv", std::vector {static_cast(&intl_relative_lv_size), + static_cast(intl_relative_lv)} }, + { "intl_mk", std::vector {static_cast(&intl_mk_size), + static_cast(intl_mk)} }, + { "intl_relative_mk", std::vector {static_cast(&intl_relative_mk_size), + static_cast(intl_relative_mk)} }, + { "intl_ms", std::vector {static_cast(&intl_ms_size), + static_cast(intl_ms)} }, + { "intl_relative_ms", std::vector {static_cast(&intl_relative_ms_size), + static_cast(intl_relative_ms)} }, + { "intl_my_MM", std::vector {static_cast(&intl_my_MM_size), + static_cast(intl_my_MM)} }, + { "intl_relative_my_MM", std::vector {static_cast(&intl_relative_my_MM_size), + static_cast(intl_relative_my_MM)} }, + { "intl_nb", std::vector {static_cast(&intl_nb_size), + static_cast(intl_nb)} }, + { "intl_relative_nb", std::vector {static_cast(&intl_relative_nb_size), + static_cast(intl_relative_nb)} }, + { "intl_ne", std::vector {static_cast(&intl_ne_size), + static_cast(intl_ne)} }, + { "intl_relative_ne", std::vector {static_cast(&intl_relative_ne_size), + static_cast(intl_relative_ne)} }, + { "intl_nl", std::vector {static_cast(&intl_nl_size), + static_cast(intl_nl)} }, + { "intl_relative_nl", std::vector {static_cast(&intl_relative_nl_size), + static_cast(intl_relative_nl)} }, + { "intl_pl", std::vector {static_cast(&intl_pl_size), + static_cast(intl_pl)} }, + { "intl_relative_pl", std::vector {static_cast(&intl_relative_pl_size), + static_cast(intl_relative_pl)} }, + { "intl_pt", std::vector {static_cast(&intl_pt_size), + static_cast(intl_pt)} }, + { "intl_relative_pt", std::vector {static_cast(&intl_relative_pt_size), + static_cast(intl_relative_pt)} }, + { "intl_pt_PT", std::vector {static_cast(&intl_pt_PT_size), + static_cast(intl_pt_PT)} }, + { "intl_relative_pt_PT", std::vector {static_cast(&intl_relative_pt_PT_size), + static_cast(intl_relative_pt_PT)} }, + { "intl_ro", std::vector {static_cast(&intl_ro_size), + static_cast(intl_ro)} }, + { "intl_relative_ro", std::vector {static_cast(&intl_relative_ro_size), + static_cast(intl_relative_ro)} }, + { "intl_ru", std::vector {static_cast(&intl_ru_size), + static_cast(intl_ru)} }, + { "intl_relative_ru", std::vector {static_cast(&intl_relative_ru_size), + static_cast(intl_relative_ru)} }, + { "intl_si", std::vector {static_cast(&intl_si_size), + static_cast(intl_si)} }, + { "intl_relative_si", std::vector {static_cast(&intl_relative_si_size), + static_cast(intl_relative_si)} }, + { "intl_sk", std::vector {static_cast(&intl_sk_size), + static_cast(intl_sk)} }, + { "intl_relative_sk", std::vector {static_cast(&intl_relative_sk_size), + static_cast(intl_relative_sk)} }, + { "intl_sl", std::vector {static_cast(&intl_sl_size), + static_cast(intl_sl)} }, + { "intl_relative_sl", std::vector {static_cast(&intl_relative_sl_size), + static_cast(intl_relative_sl)} }, + { "intl_sr", std::vector {static_cast(&intl_sr_size), + static_cast(intl_sr)} }, + { "intl_relative_sr", std::vector {static_cast(&intl_relative_sr_size), + static_cast(intl_relative_sr)} }, + { "intl_sv", std::vector {static_cast(&intl_sv_size), + static_cast(intl_sv)} }, + { "intl_relative_sv", std::vector {static_cast(&intl_relative_sv_size), + static_cast(intl_relative_sv)} }, + { "intl_th", std::vector {static_cast(&intl_th_size), + static_cast(intl_th)} }, + { "intl_relative_th", std::vector {static_cast(&intl_relative_th_size), + static_cast(intl_relative_th)} }, + { "intl_tr", std::vector {static_cast(&intl_tr_size), + static_cast(intl_tr)} }, + { "intl_relative_tr", std::vector {static_cast(&intl_relative_tr_size), + static_cast(intl_relative_tr)} }, + { "intl_uk", std::vector {static_cast(&intl_uk_size), + static_cast(intl_uk)} }, + { "intl_relative_uk", std::vector {static_cast(&intl_relative_uk_size), + static_cast(intl_relative_uk)} }, + { "intl_ur", std::vector {static_cast(&intl_ur_size), + static_cast(intl_ur)} }, + { "intl_relative_ur", std::vector {static_cast(&intl_relative_ur_size), + static_cast(intl_relative_ur)} }, + { "intl_uz", std::vector {static_cast(&intl_uz_size), + static_cast(intl_uz)} }, + { "intl_relative_uz", std::vector {static_cast(&intl_relative_uz_size), + static_cast(intl_relative_uz)} }, + { "intl_vi", std::vector {static_cast(&intl_vi_size), + static_cast(intl_vi)} }, + { "intl_relative_vi", std::vector {static_cast(&intl_relative_vi_size), + static_cast(intl_relative_vi)} }, + { "intl_zh", std::vector {static_cast(&intl_zh_size), + static_cast(intl_zh)} }, + { "intl_relative_zh", std::vector {static_cast(&intl_relative_zh_size), + static_cast(intl_relative_zh)} }, + { "intl_zh_Hans_HK", std::vector {static_cast(&intl_zh_Hans_HK_size), + static_cast(intl_zh_Hans_HK)} }, + { "intl_relative_zh_Hans_HK", std::vector {static_cast(&intl_relative_zh_Hans_HK_size), + static_cast(intl_relative_zh_Hans_HK)} }, + { "intl_zh_Hant_TW", std::vector {static_cast(&intl_zh_Hant_TW_size), + static_cast(intl_zh_Hant_TW)} }, + { "intl_relative_zh_Hant_TW", std::vector {static_cast(&intl_relative_zh_Hant_TW_size), + static_cast(intl_relative_zh_Hant_TW)} }, + { "intl_mn", std::vector {static_cast(&intl_mn_size), + static_cast(intl_mn)} }, + { "intl_relative_mn", std::vector {static_cast(&intl_relative_mn_size), + static_cast(intl_relative_mn)} }, + { "intl_sw", std::vector {static_cast(&intl_sw_size), + static_cast(intl_sw)} }, + { "intl_relative_sw", std::vector {static_cast(&intl_relative_sw_size), + static_cast(intl_relative_sw)} }, + { "intl_am", std::vector {static_cast(&intl_am_size), + static_cast(intl_am)} }, + { "intl_relative_am", std::vector {static_cast(&intl_relative_am_size), + static_cast(intl_relative_am)} }, + { "intl_or", std::vector {static_cast(&intl_or_size), + static_cast(intl_or)} }, + { "intl_relative_or", std::vector {static_cast(&intl_relative_or_size), + static_cast(intl_relative_or)} }, + { "intl_as", std::vector {static_cast(&intl_as_size), + static_cast(intl_as)} }, + { "intl_relative_as", std::vector {static_cast(&intl_relative_as_size), + static_cast(intl_relative_as)} }, + { "intl_pa", std::vector {static_cast(&intl_pa_size), + static_cast(intl_pa)} }, + { "intl_relative_pa", std::vector {static_cast(&intl_relative_pa_size), + static_cast(intl_relative_pa)} }, + { "intl_ta", std::vector {static_cast(&intl_ta_size), + static_cast(intl_ta)} }, + { "intl_relative_ta", std::vector {static_cast(&intl_relative_ta_size), + static_cast(intl_relative_ta)} }, + { "intl_ml", std::vector {static_cast(&intl_ml_size), + static_cast(intl_ml)} }, + { "intl_relative_ml", std::vector {static_cast(&intl_relative_ml_size), + static_cast(intl_relative_ml)} }, + { "intl_kn", std::vector {static_cast(&intl_kn_size), + static_cast(intl_kn)} }, + { "intl_relative_kn", std::vector {static_cast(&intl_relative_kn_size), + static_cast(intl_relative_kn)} }, + { "intl_gu", std::vector {static_cast(&intl_gu_size), + static_cast(intl_gu)} }, + { "intl_relative_gu", std::vector {static_cast(&intl_relative_gu_size), + static_cast(intl_relative_gu)} }, + { "intl_mr", std::vector {static_cast(&intl_mr_size), + static_cast(intl_mr)} }, + { "intl_relative_mr", std::vector {static_cast(&intl_relative_mr_size), + static_cast(intl_relative_mr)} }, + { "intl_te", std::vector {static_cast(&intl_te_size), + static_cast(intl_te)} }, + { "intl_relative_te", std::vector {static_cast(&intl_relative_te_size), + static_cast(intl_relative_te)} }, + { "intl_zh_Hans_CN", std::vector {static_cast(&intl_zh_Hans_CN_size), + static_cast(intl_zh_Hans_CN)} }, + { "intl_relative_zh_Hans_CN", std::vector {static_cast(&intl_relative_zh_Hans_CN_size), + static_cast(intl_relative_zh_Hans_CN)} }, + { "intl_en_US", std::vector {static_cast(&intl_en_US_size), + static_cast(intl_en_US)} }, + { "intl_relative_en_US", std::vector {static_cast(&intl_relative_en_US_size), + static_cast(intl_relative_en_US)} }, + { "intl_de_DE", std::vector {static_cast(&intl_de_DE_size), + static_cast(intl_de_DE)} }, + { "intl_relative_de_DE", std::vector {static_cast(&intl_relative_de_DE_size), + static_cast(intl_relative_de_DE)} }, + { "intl_ja_JP", std::vector {static_cast(&intl_ja_JP_size), + static_cast(intl_ja_JP)} }, + { "intl_relative_ja_JP", std::vector {static_cast(&intl_relative_ja_JP_size), + static_cast(intl_relative_ja_JP)} }, +}; + +std::unordered_map> GetLocaleDatasMap() +{ + return g_localeDatas; +} diff --git a/frameworks/bridge/js_frontend/engine/quickjs/intl/intl_support.h b/frameworks/bridge/js_frontend/engine/quickjs/intl/intl_support.h new file mode 100644 index 00000000..202d3e57 --- /dev/null +++ b/frameworks/bridge/js_frontend/engine/quickjs/intl/intl_support.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// Automatically generated file; DO NOT EDIT. + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_QUICKJS_INTL_SUPPORT_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_QUICKJS_INTL_SUPPORT_H + +#include +#include +#include + +#include "frameworks/bridge/js_frontend/engine/quickjs/intl/intl.h" +#include "frameworks/bridge/js_frontend/engine/quickjs/intl/intl_locales.h" + +std::unordered_map> GetLocaleDatasMap(); + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_QUICKJS_INTL_SUPPORT_H diff --git a/frameworks/bridge/js_frontend/engine/quickjs/list_bridge.cpp b/frameworks/bridge/js_frontend/engine/quickjs/list_bridge.cpp new file mode 100644 index 00000000..a4671538 --- /dev/null +++ b/frameworks/bridge/js_frontend/engine/quickjs/list_bridge.cpp @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/js_frontend/engine/quickjs/list_bridge.h" + +#include "frameworks/bridge/common/dom/dom_list.h" + +namespace OHOS::Ace::Framework { + +JSValue ListBridge::JsGetCurrentOffset(JSContext* ctx, NodeId nodeId) +{ + auto instance = static_cast(JS_GetContextOpaque(ctx)); + auto page = instance->GetRunningPage(); + if (!page) { + return JS_NULL; + } + double offsetX = 0.0; + double offsetY = 0.0; + auto task = [nodeId, page, &offsetX, &offsetY]() { + auto domDoc = page->GetDomDocument(); + if (!domDoc) { + return; + } + + auto domList = AceType::DynamicCast(domDoc->GetDOMNodeById(nodeId)); + if (!domList) { + return; + } + auto offset = domList->GetCurrentOffset(); + offsetX = offset.GetX(); + offsetY = offset.GetY(); + }; + instance->GetDelegate()->PostSyncTaskToPage(task); + JSValue offsetContext = JS_NewObject(ctx); + JS_SetPropertyStr(ctx, offsetContext, "x", JS_NewFloat64(ctx, offsetX)); + JS_SetPropertyStr(ctx, offsetContext, "y", JS_NewFloat64(ctx, offsetY)); + return offsetContext; +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/js_frontend/engine/quickjs/list_bridge.h b/frameworks/bridge/js_frontend/engine/quickjs/list_bridge.h new file mode 100644 index 00000000..1c267b8f --- /dev/null +++ b/frameworks/bridge/js_frontend/engine/quickjs/list_bridge.h @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_QUICKJS_LIST_BRIDGE_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_QUICKJS_LIST_BRIDGE_H + +#include "frameworks/bridge/common/dom/dom_node.h" +#include "frameworks/bridge/js_frontend/engine/quickjs/qjs_engine.h" +#include "frameworks/bridge/js_frontend/engine/quickjs/qjs_utils.h" + +namespace OHOS::Ace::Framework { + +class JsAcePage; + +class ListBridge { +public: + static JSValue JsGetCurrentOffset(JSContext* ctx, NodeId nodeId); +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_QUICKJS_LIST_BRIDGE_H diff --git a/frameworks/bridge/js_frontend/engine/quickjs/qjs_engine.cpp b/frameworks/bridge/js_frontend/engine/quickjs/qjs_engine.cpp new file mode 100644 index 00000000..fc8494bf --- /dev/null +++ b/frameworks/bridge/js_frontend/engine/quickjs/qjs_engine.cpp @@ -0,0 +1,2689 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/js_frontend/engine/quickjs/qjs_engine.h" + +#include +#include +#include +#include + +#include "third_party/quickjs/message_server.h" + +#include "base/i18n/localization.h" +#include "base/json/json_util.h" +#include "base/log/ace_trace.h" +#include "base/log/event_report.h" +#include "base/log/log.h" +#include "base/utils/linear_map.h" +#include "base/utils/system_properties.h" +#include "base/utils/time_util.h" +#include "base/utils/utils.h" +#include "core/common/ace_application_info.h" +#include "core/event/ace_event_helper.h" +#include "core/event/back_end_event_manager.h" +#include "frameworks/bridge/common/dom/dom_type.h" +#include "frameworks/bridge/common/media_query/media_query_info.h" +#include "frameworks/bridge/common/utils/utils.h" +#include "frameworks/bridge/js_frontend/engine/common/js_api_perf.h" +#include "frameworks/bridge/js_frontend/engine/common/js_constants.h" +#include "frameworks/bridge/js_frontend/engine/common/runtime_constants.h" +#include "frameworks/bridge/js_frontend/engine/quickjs/badge_bridge.h" +#include "frameworks/bridge/js_frontend/engine/quickjs/canvas_bridge.h" +#include "frameworks/bridge/js_frontend/engine/quickjs/chart_bridge.h" +#include "frameworks/bridge/js_frontend/engine/quickjs/clock_bridge.h" +#include "frameworks/bridge/js_frontend/engine/quickjs/component_api_bridge.h" +#include "frameworks/bridge/js_frontend/engine/quickjs/image_animator_bridge.h" +#include "frameworks/bridge/js_frontend/engine/quickjs/intl/intl_support.h" +#include "frameworks/bridge/js_frontend/engine/quickjs/list_bridge.h" +#include "frameworks/bridge/js_frontend/engine/quickjs/qjs_group_js_bridge.h" +#include "frameworks/bridge/js_frontend/engine/quickjs/qjs_utils.h" +#include "frameworks/bridge/js_frontend/engine/quickjs/stepper_bridge.h" + +extern const uint32_t js_framework_size; +extern const uint8_t js_framework[]; + +namespace OHOS::Ace::Framework { +namespace { + +#ifndef ENABLE_JS_DEBUG +const char JS_MAIN_ENTRY[] = "___mainEntry___"; +const char JS_EXT[] = ".js"; +const char BIN_EXT[] = ".bin"; +#endif +const char MAP_EXT[] = ".map"; +constexpr int32_t CUSTOM_FULL_WINDOW_LENGTH = 3; +constexpr int32_t ARGS_FULL_WINDOW_LENGTH = 2; + +int32_t CallEvalBuf( + JSContext* ctx, const char* buf, size_t bufLen, const char* filename, int32_t evalFlags, int32_t instanceId) +{ + JSValue val = JS_Eval(ctx, buf, bufLen, filename, evalFlags); + int32_t ret = JS_CALL_SUCCESS; + if (JS_IsException(val)) { + LOGE("[Qjs Native] EvalBuf failed!"); + QjsUtils::JsStdDumpErrorAce(ctx, JsErrorType::EVAL_BUFFER_ERROR, instanceId); + ret = JS_CALL_FAIL; + } + JS_FreeValue(ctx, val); + return ret; +} + +JSValue CallReadObject(JSContext* ctx, const uint8_t* buf, size_t bufLen, bool persist = false, int32_t instanceId = 0, + const char* pageUrl = nullptr) +{ + int32_t flags = persist ? (JS_READ_OBJ_ROM_DATA | JS_READ_OBJ_BYTECODE) : JS_READ_OBJ_BYTECODE; + JSValue obj = JS_ReadObject(ctx, buf, bufLen, flags); + if (JS_IsException(obj)) { + LOGE("[Qjs Native] ReadObject failed!"); + QjsUtils::JsStdDumpErrorAce(ctx, JsErrorType::READ_OBJECT_ERROR, instanceId, pageUrl); + return obj; + } + return JS_EvalFunction(ctx, obj); +} + +RefPtr GetRunningPage(JSContext* ctx) +{ + auto instance = static_cast(JS_GetContextOpaque(ctx)); + ACE_DCHECK(instance); + return instance->GetRunningPage(); +} + +RefPtr GetStagingPage(JSContext* ctx) +{ + auto instance = static_cast(JS_GetContextOpaque(ctx)); + ACE_DCHECK(instance); + return instance->GetStagingPage(); +} + +void GetArrayValue(JSContext* ctx, JSValueConst arrayVal, std::string& result) +{ + int32_t length = QjsUtils::JsGetArrayLength(ctx, arrayVal); + for (int32_t i = 0; i < length; ++i) { + if (i != 0) { + result.append(1, DOM_PICKER_SPLIT_ARRAY); // only need one char to split. + } + JSValue itemVal = JS_GetPropertyUint32(ctx, arrayVal, i); + if (JS_IsString(itemVal) || JS_IsNumber(itemVal) || JS_IsBool(itemVal)) { + ScopedString val(ctx, itemVal); + const char* itemStr = val.get(); + result.append(itemStr); + JS_FreeValue(ctx, itemVal); + continue; + } + if (JS_IsArray(ctx, itemVal)) { + int32_t subLength = QjsUtils::JsGetArrayLength(ctx, itemVal); + for (int32_t j = 0; j < subLength; ++j) { + if (j != 0) { + result.append(1, DOM_PICKER_SPLIT_ITEM); // only need one char to split + } + JSValue subItemVal = JS_GetPropertyUint32(ctx, itemVal, j); + ScopedString subVal(ctx, subItemVal); + const char* subItemStr = subVal.get(); + result.append(subItemStr); + JS_FreeValue(ctx, subItemVal); + } + JS_FreeValue(ctx, itemVal); + continue; + } + JS_FreeValue(ctx, itemVal); + } +} + +void GetAttrImage(JSContext* ctx, JSValueConst valObject, ImageProperties& imageProperties) +{ + JSPropertyEnum* pTab = nullptr; + uint32_t len = 0; + if (!CheckAndGetJsProperty(ctx, valObject, &pTab, &len)) { + return; + } + for (uint32_t i = 0; i < len; ++i) { + const char* key = JS_AtomToCString(ctx, pTab[i].atom); + if (key == nullptr) { + JS_FreeAtom(ctx, pTab[i].atom); + LOGW("key is null. Ignoring!"); + continue; + } + JSValue valItem = JS_GetProperty(ctx, valObject, pTab[i].atom); + if (JS_IsString(valItem) || JS_IsNumber(valItem) || JS_IsBool(valItem)) { + ScopedString styleVal(ctx, valItem); + const char* valStr = styleVal.get(); + if (strcmp(key, "src") == 0) { + imageProperties.src = valStr; + } else if (strcmp(key, "width") == 0) { + imageProperties.width = valStr; + } else if (strcmp(key, "height") == 0) { + imageProperties.height = valStr; + } else if (strcmp(key, "top") == 0) { + imageProperties.top = valStr; + } else if (strcmp(key, "left") == 0) { + imageProperties.left = valStr; + } else if (strcmp(key, "duration") == 0) { + imageProperties.duration = valStr; + } else { + LOGD("key : %{public}s unsupported. Ignoring!", key); + } + } else { + LOGD("value of unsupported type. Ignoring!"); + } + JS_FreeAtom(ctx, pTab[i].atom); + JS_FreeCString(ctx, key); + JS_FreeValue(ctx, valItem); + } + js_free(ctx, pTab); +} + +void GetAttrImages(JSContext* ctx, JSValueConst arrayVal, std::vector& images) +{ + int32_t length = QjsUtils::JsGetArrayLength(ctx, arrayVal); + for (int32_t i = 0; i < length; ++i) { + JSValue valArray = JS_GetPropertyUint32(ctx, arrayVal, i); + ImageProperties imageProperties; + if (JS_IsObject(valArray)) { + GetAttrImage(ctx, valArray, imageProperties); + images.push_back(imageProperties); + } + JS_FreeValue(ctx, valArray); + } +} + +bool SetDomAttributes(JSContext* ctx, JSValueConst fromMap, JsCommandDomElementOperator& command) +{ + ACE_SCOPED_TRACE("SetDomAttributes"); + + bool hasShowAttr = false; + JSPropertyEnum* pTab = nullptr; + uint32_t len = 0; + if (!CheckAndGetJsProperty(ctx, fromMap, &pTab, &len)) { + return hasShowAttr; + } + + std::vector> attrs; + for (uint32_t i = 0; i < len; i++) { + const char* key = JS_AtomToCString(ctx, pTab[i].atom); + if (key == nullptr) { + JS_FreeAtom(ctx, pTab[i].atom); + LOGW("key is null. Ignoring!"); + continue; + } + JSValue val = JS_GetProperty(ctx, fromMap, pTab[i].atom); + if (JS_IsString(val) || JS_IsNumber(val) || JS_IsBool(val)) { + ScopedString styleVal(ctx, val); + const char* valStr = styleVal.get(); + LOGD("SetDomAttributes: key: %{private}s, attr: %{private}s", key, valStr); + if (strcmp(key, DOM_ID) == 0) { + command.SetId(valStr); + } else if (strcmp(key, DOM_TARGET) == 0) { + command.SetTarget(valStr); + } else if (strcmp(key, DOM_SHARE_ID) == 0) { + command.SetShareId(valStr); + } + attrs.emplace_back(key, valStr); + if (strcmp(key, DOM_SHOW) == 0) { + hasShowAttr = true; + } + } else if (JS_IsArray(ctx, val)) { + if (strcmp(key, "datasets") == 0) { + auto chartBridge = AceType::MakeRefPtr(); + chartBridge->GetAttrDatasets(ctx, val); + command.SetDatasets(chartBridge->GetDatasets()); + } else if (strcmp(key, "images") == 0) { + std::vector images; + GetAttrImages(ctx, val, images); + command.SetImagesAttr(std::move(images)); + } else if (strcmp(key, "segments") == 0) { + auto chartBridge = AceType::MakeRefPtr(); + chartBridge->ParseAttrSegmentArray(ctx, val); + command.SetSegments(chartBridge->GetSegments()); + } else { + std::string valStr; + GetArrayValue(ctx, val, valStr); + LOGD("SetDomAttributes: key: %{private}s, attr: %{private}s", key, valStr.c_str()); + attrs.emplace_back(key, valStr); + } + } else if (JS_IsObject(val)) { + if (strcmp(key, "options") == 0) { + auto chartBridge = AceType::MakeRefPtr(); + chartBridge->GetAttrOptionsObject(ctx, val); + command.SetOptions(chartBridge->GetChartOptions()); + } else if (strcmp(key, "segments") == 0) { + auto chartBridge = AceType::MakeRefPtr(); + chartBridge->ParseAttrSingleSegment(ctx, val); + command.SetSegments(chartBridge->GetSegments()); + } else if (strcmp(key, DOM_CLOCK_CONFIG) == 0) { + auto clockBridge = AceType::MakeRefPtr(); + clockBridge->ParseClockConfig(ctx, val); + command.SetClockConfig(clockBridge->GetClockConfig()); + } else if (strcmp(key, DOM_NODE_TAG_LABEL) == 0) { + auto stepperBridge = AceType::MakeRefPtr(); + StepperLabels label; + stepperBridge->GetAttrLabel(ctx, val, label); + command.SetStepperLabel(label); + } else if (strcmp(key, DOM_BADGE_CONFIG) == 0) { + auto badgeBridge = AceType::MakeRefPtr(); + badgeBridge->ParseBadgeConfig(ctx, val); + command.SetBadgeConfig(badgeBridge->GetBadgeConfig()); + } else { + LOGD("key %{public}s unsupported. Ignoring!", key); + } + } else if (JS_IsUndefined(val)) { + LOGE("value of key[%{private}s] is undefined. Ignoring!", key); + } else { + LOGE("value of key[%{private}s] of unsupported type. Ignoring!", key); + } + JS_FreeAtom(ctx, pTab[i].atom); + JS_FreeCString(ctx, key); + JS_FreeValue(ctx, val); + } + + command.SetAttributes(std::move(attrs)); + js_free(ctx, pTab); + return hasShowAttr; +} + +void GetAndRegisterFamily(JSContext* ctx, JSValueConst valArray, std::string& familyStyle) +{ + JSPropertyEnum* tab = nullptr; + uint32_t aLen = 0; + JS_GetOwnPropertyNames(ctx, &tab, &aLen, valArray, JS_GPN_STRING_MASK); + + std::string familyVal; + std::string srcVal; + for (uint32_t j = 0; j < aLen; j++) { + // ValObject is one row of family object + JSValue valObject = JS_GetProperty(ctx, valArray, tab[j].atom); + const char* keyObject = JS_AtomToCString(ctx, tab[j].atom); + if (JS_IsString(valObject)) { + ScopedString styleVal(ctx, valObject); + const char* valStr = styleVal.get(); + auto instance = static_cast(JS_GetContextOpaque(ctx)); + ACE_DCHECK(instance); + if (keyObject != nullptr && strcmp(keyObject, "fontFamily") == 0) { + familyVal = valStr; + if (!srcVal.empty()) { + instance->GetDelegate()->RegisterFont(familyVal, srcVal); + familyVal.erase(); + srcVal.erase(); + } + if (familyStyle.length() > 0) { + familyStyle.append(","); + } + familyStyle.append(valStr); + } else if (keyObject != nullptr && strcmp(keyObject, "src") == 0) { + srcVal = valStr; + // The format of font src is: url("src"), here get the src. + srcVal = srcVal.substr(5, srcVal.length() - 7); + if (!familyVal.empty()) { + instance->GetDelegate()->RegisterFont(familyVal, srcVal); + familyVal.erase(); + srcVal.erase(); + } + } + } + JS_FreeAtom(ctx, tab[j].atom); + JS_FreeCString(ctx, keyObject); + JS_FreeValue(ctx, valObject); + } + js_free(ctx, tab); +} + +void GetStyleFamilyValue(JSContext* ctx, JSValueConst arrayVal, std::string& familyStyle) +{ + int32_t length = QjsUtils::JsGetArrayLength(ctx, arrayVal); + for (int32_t i = 0; i < length; ++i) { + // ValArray is one row of family array + JSValue valArray = JS_GetPropertyUint32(ctx, arrayVal, i); + if (JS_IsObject(valArray)) { + GetAndRegisterFamily(ctx, valArray, familyStyle); + } + JS_FreeValue(ctx, valArray); + } +} + +void GetStyleAnimationName( + JSContext* ctx, JSValueConst arrayVal, std::vector>& styleVec) +{ + int32_t length = QjsUtils::JsGetArrayLength(ctx, arrayVal); + for (int32_t i = 0; i < length; ++i) { + std::unordered_map animationNameKeyFrame; + JSValue valArray = JS_GetPropertyUint32(ctx, arrayVal, i); + if (JS_IsObject(valArray)) { + JSPropertyEnum* tab = nullptr; + uint32_t anotherLen = 0; + JS_GetOwnPropertyNames(ctx, &tab, &anotherLen, valArray, JS_GPN_STRING_MASK); + for (uint32_t j = 0; j < anotherLen; ++j) { + const char* key = JS_AtomToCString(ctx, tab[j].atom); + if (key == nullptr) { + JS_FreeAtom(ctx, tab[j].atom); + JS_FreeValue(ctx, valArray); + LOGW("key is null. Ignoring!"); + continue; + } + JSValue valObject = JS_GetProperty(ctx, valArray, tab[j].atom); + if (JS_IsString(valObject) || JS_IsNumber(valObject)) { + ScopedString styleVal(ctx, valObject); + const char* valStr = styleVal.get(); + animationNameKeyFrame.emplace(key, valStr); + } else { + LOGD("GetStyleAnimationName: unsupported type :%{public}d", JS_VALUE_GET_TAG(valObject)); + } + JS_FreeAtom(ctx, tab[j].atom); + JS_FreeCString(ctx, key); + JS_FreeValue(ctx, valObject); + } + js_free(ctx, tab); + } + if (animationNameKeyFrame.size() > 0) { + styleVec.emplace_back(animationNameKeyFrame); + } + JS_FreeValue(ctx, valArray); + } +} + +void SetDomStyle(JSContext* ctx, JSValueConst fromMap, JsCommandDomElementOperator& command) +{ + ACE_SCOPED_TRACE("SetDomStyle"); + + JSPropertyEnum* pTab = nullptr; + uint32_t len = 0; + if (!CheckAndGetJsProperty(ctx, fromMap, &pTab, &len)) { + return; + } + + std::vector> styles; + for (uint32_t i = 0; i < len; i++) { + const char* key = JS_AtomToCString(ctx, pTab[i].atom); + if (key == nullptr) { + JS_FreeAtom(ctx, pTab[i].atom); + LOGW("key is null. Ignoring!"); + continue; + } + JSValue val = JS_GetProperty(ctx, fromMap, pTab[i].atom); + if (JS_IsString(val) || JS_IsNumber(val) || JS_IsBool(val)) { + ScopedString styleVal(ctx, val); + const char* valStr = styleVal.get(); + LOGD("SetDomStyle: key: %{private}s, style: %{private}s", key, valStr); + styles.emplace_back(key, valStr); + } else if (JS_IsArray(ctx, val)) { + if (strcmp(key, DOM_TEXT_FONT_FAMILY) == 0) { + // Deal with special case such as fontFamily, suppose all the keys in the array are the same. + std::string familyStyle; + GetStyleFamilyValue(ctx, val, familyStyle); + styles.emplace_back(key, familyStyle); + } else if (strcmp(key, DOM_ANIMATION_NAME) == 0) { + // Deal with special case animationName, it different with fontfamily, + // the keys in the array are different. + std::vector> animationStyles; + GetStyleAnimationName(ctx, val, animationStyles); + command.SetAnimationStyles(std::move(animationStyles)); + } else if (strcmp(key, DOM_TRANSITION_ENTER) == 0) { + std::vector> transitionEnter; + GetStyleAnimationName(ctx, val, transitionEnter); + command.SetTransitionEnter(std::move(transitionEnter)); + } else if (strcmp(key, DOM_TRANSITION_EXIT) == 0) { + std::vector> transitionExit; + GetStyleAnimationName(ctx, val, transitionExit); + command.SetTransitionExit(std::move(transitionExit)); + } else if (strcmp(key, DOM_SHARED_TRANSITION_NAME) == 0) { + std::vector> sharedTransitionName; + GetStyleAnimationName(ctx, val, sharedTransitionName); + command.SetSharedTransitionName(std::move(sharedTransitionName)); + } else { + LOGD("value is array, key unsupported. Ignoring!"); + } + } else if (JS_IsUndefined(val)) { + LOGD("value is undefined. Ignoring!"); + } else { + LOGD("value of unsupported type. Ignoring!"); + } + JS_FreeAtom(ctx, pTab[i].atom); + JS_FreeCString(ctx, key); + JS_FreeValue(ctx, val); + } + + QjsEngineInstance* instance = static_cast(JS_GetContextOpaque(ctx)); + auto pipelineContext = instance->GetDelegate()->GetPipelineContext(); + command.SetPipelineContext(pipelineContext); + command.SetStyles(std::move(styles)); + js_free(ctx, pTab); +} + +void AddDomEvent(JSContext* ctx, JSValueConst fromArray, JsCommandDomElementOperator& command) +{ + ACE_SCOPED_TRACE("AddDomEvent"); + + std::vector eventsMap; + int32_t length = QjsUtils::JsGetArrayLength(ctx, fromArray); + for (int32_t i = 0; i < length; i++) { + JSValue val = JS_GetPropertyUint32(ctx, fromArray, i); + if (JS_IsString(val)) { + ScopedString styleVal(ctx, val); + const char* valStr = styleVal.get(); + eventsMap.emplace_back(valStr); + } else { + LOGW("value of unsupported type. Ignoring!"); + } + JS_FreeValue(ctx, val); + } + command.AddEvents(std::move(eventsMap)); +} + +JSValue JsRemoveElement(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + if ((argv == nullptr) || (argc != REMOVE_ELEMENT_ARGS_LEN)) { + LOGE("JsRemoveElement: the arg is error when call removeElement"); + return JS_EXCEPTION; + } + + auto page = GetRunningPage(ctx); + if (page == nullptr) { + return JS_EXCEPTION; + } + + int32_t instanceId = 0; + JS_ToInt32(ctx, &instanceId, argv[REMOVE_ELEMENT_INSTANCE_ID]); + if (page->GetPageId() != instanceId) { + auto instance = static_cast(JS_GetContextOpaque(ctx)); + ACE_DCHECK(instance); + page = instance->GetDelegate()->GetPage(instanceId); + if (page == nullptr) { + LOGE("JsRemoveElement fail to get page, pageId: %{public}d", instanceId); + return JS_EXCEPTION; + } + } + + int32_t nodeId = 0; + JS_ToInt32(ctx, &nodeId, argv[0]); + nodeId = (nodeId == 0) ? DOM_ROOT_NODE_ID_BASE + page->GetPageId() : nodeId; + page->PushCommand(Referenced::MakeRefPtr(nodeId)); + return JS_NULL; +} + +JSValue JsUpdateElementAttrs(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + if ((argv == nullptr) || (argc != UPLOAD_ELEMENT_ARGS_LEN)) { + LOGE("the arg is error"); + return JS_EXCEPTION; + } + + auto page = GetRunningPage(ctx); + if (page == nullptr) { + return JS_EXCEPTION; + } + + int32_t instanceId = 0; + JS_ToInt32(ctx, &instanceId, argv[UPLOAD_ELEMENT_INSTANCE_ID]); + if (page->GetPageId() != instanceId) { + auto instance = static_cast(JS_GetContextOpaque(ctx)); + ACE_DCHECK(instance); + page = instance->GetDelegate()->GetPage(instanceId); + if (page == nullptr) { + LOGE("JsUpdateElementAttrs fail to get page, pageId :%{public}d", instanceId); + return JS_EXCEPTION; + } + } + + int32_t nodeId = 0; + JS_ToInt32(ctx, &nodeId, argv[0]); + nodeId = (nodeId == 0) ? DOM_ROOT_NODE_ID_BASE + page->GetPageId() : nodeId; + auto command = Referenced::MakeRefPtr(nodeId); + if (SetDomAttributes(ctx, argv[1], *command)) { + page->ReserveShowCommand(command); + } + page->PushCommand(command); + return JS_NULL; +} + +JSValue JsUpdateElementStyles(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + if ((argv == nullptr) || (argc != UPLOAD_ELEMENT_ARGS_LEN)) { + LOGE("the arg is error"); + return JS_EXCEPTION; + } + + auto page = GetRunningPage(ctx); + if (page == nullptr) { + return JS_EXCEPTION; + } + + int32_t instanceId = 0; + JS_ToInt32(ctx, &instanceId, argv[UPLOAD_ELEMENT_INSTANCE_ID]); + if (page->GetPageId() != instanceId) { + auto instance = static_cast(JS_GetContextOpaque(ctx)); + ACE_DCHECK(instance); + page = instance->GetDelegate()->GetPage(instanceId); + if (page == nullptr) { + LOGE("JsUpdateElementStyles fail to get page, pageId: %{public}d", instanceId); + return JS_EXCEPTION; + } + } + + int32_t nodeId = 0; + JS_ToInt32(ctx, &nodeId, argv[0]); + nodeId = (nodeId == 0) ? DOM_ROOT_NODE_ID_BASE + page->GetPageId() : nodeId; + auto command = Referenced::MakeRefPtr(nodeId); + SetDomStyle(ctx, argv[1], *command); + page->PushCommand(command); + return JS_NULL; +} + +JSValue JsDomCreateBody(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + if ((argv == nullptr) || (argc != 5)) { + LOGE("the arg is error"); + return JS_EXCEPTION; + } + + auto page = GetStagingPage(ctx); + if (page == nullptr) { + return JS_EXCEPTION; + } + + int32_t nodeId = DOM_ROOT_NODE_ID_BASE + page->GetPageId(); + LOGD("JsDomCreateBody: pageId: %{private}d, nodeId: %{private}d:", page->GetPageId(), nodeId); + + ScopedString tag(ctx, argv[1]); + auto command = Referenced::MakeRefPtr(tag.get(), nodeId); + + SetDomAttributes(ctx, argv[2], *command); + SetDomStyle(ctx, argv[3], *command); + AddDomEvent(ctx, argv[4], *command); + page->PushCommand(command); + return JS_NULL; +} + +JSValue JsDomAddElement(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + ACE_SCOPED_TRACE("JsDomAddElement"); + + if ((argv == nullptr) || (argc != ADD_ELEMENT_ARGS_LEN)) { + LOGE("the arg is error"); + return JS_EXCEPTION; + } + + auto page = GetStagingPage(ctx); + if (page == nullptr) { + return JS_EXCEPTION; + } + + int32_t instanceId = 0; + JS_ToInt32(ctx, &instanceId, argv[ADD_ELEMENT_INSTANCE_ID]); + if (page->GetPageId() != instanceId) { + auto instance = static_cast(JS_GetContextOpaque(ctx)); + ACE_DCHECK(instance); + page = instance->GetDelegate()->GetPage(instanceId); + if (page == nullptr) { + LOGE("JsDomAddElement fail to get page, pageId: %{public}d", instanceId); + return JS_EXCEPTION; + } + } + + int32_t parentNodeId; + JS_ToInt32(ctx, &parentNodeId, argv[0]); + parentNodeId = parentNodeId ? parentNodeId : (DOM_ROOT_NODE_ID_BASE + page->GetPageId()); + + int32_t nodeId; + JS_ToInt32(ctx, &nodeId, argv[1]); + ScopedString tag(ctx, argv[2]); + LOGD("JsDomAddElement: pageId: %{private}d, parentNodeId: %{private}d, nodeId: %{private}d, tag: %{private}s", + page->GetPageId(), parentNodeId, nodeId, tag.get()); + auto command = Referenced::MakeRefPtr(tag.get(), nodeId, parentNodeId); + SetDomAttributes(ctx, argv[3], *command); + SetDomStyle(ctx, argv[4], *command); + AddDomEvent(ctx, argv[5], *command); + + ScopedString customFlag(ctx, argv[6]); + if (customFlag.get()) { + std::unique_ptr customPtr = JsonUtil::ParseJsonString(customFlag.get()); + if (customPtr && customPtr->IsBool()) { + command->SetIsCustomComponent(customPtr->GetBool()); + } + } + int32_t itemIndex; + JS_ToInt32(ctx, &itemIndex, argv[7]); + command->SetForIndex(itemIndex); + page->PushCommand(command); + // Flush command as fragment immediately when pushed too many commands. + if (!page->CheckPageCreated() && page->GetCommandSize() > FRAGMENT_SIZE) { + page->FlushCommands(); + } + return JS_NULL; +} + +// JS Framework calls this function after initial loading of the page has been done. +JSValue JsOnCreateFinish(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + LOGD("JsOnCreateFinish"); + auto page = GetStagingPage(ctx); + if (page == nullptr) { + return JS_EXCEPTION; + } + page->SetPageCreated(); + return JS_NULL; +} + +// JS Framework calls this function after JS framework has finished processing an event. +JSValue JsOnUpdateFinish(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + LOGD("JsOnUpdateFinish"); + auto page = GetRunningPage(ctx); + if (page == nullptr) { + return JS_EXCEPTION; + } + + if (page->CheckPageCreated()) { + QjsEngineInstance* instance = static_cast(JS_GetContextOpaque(ctx)); + ACE_DCHECK(instance); + instance->GetDelegate()->TriggerPageUpdate(page->GetPageId()); + } + return JS_NULL; +} + +std::string JsParseRouteUrl(JSContext* ctx, JSValueConst argv, const std::string& key) +{ + std::string pageRoute; + ScopedString args(ctx, argv); + std::unique_ptr argsPtr = JsonUtil::ParseJsonString(args.get()); + if (argsPtr != nullptr && argsPtr->GetValue(key) != nullptr && argsPtr->GetValue(key)->IsString()) { + pageRoute = argsPtr->GetValue(key)->GetString(); + } + LOGI("JsParseRouteUrl pageRoute = %{private}s", pageRoute.c_str()); + return pageRoute; +} + +std::string JsParseRouteParams(JSContext* ctx, JSValueConst argv, const std::string& key) +{ + std::string params; + ScopedString args(ctx, argv); + + std::unique_ptr argsPtr = JsonUtil::ParseJsonString(args.get()); + if (argsPtr != nullptr && argsPtr->Contains(key) && argsPtr->GetValue(key)->IsObject()) { + params = argsPtr->GetValue(key)->ToString(); + } + return params; +} + +std::vector> JsParseDialogButtons( + JSContext* ctx, JSValueConst argv, const std::string& key) +{ + std::vector> dialogButtons; + ScopedString args(ctx, argv); + std::unique_ptr argsPtr = JsonUtil::ParseJsonString(args.get()); + if (argsPtr != nullptr && argsPtr->GetValue(key) != nullptr && argsPtr->GetValue(key)->IsArray()) { + for (int32_t i = 0; i < argsPtr->GetValue(key)->GetArraySize(); ++i) { + auto button = argsPtr->GetValue(key)->GetArrayItem(i); + if (!button) { + continue; + } + std::string buttonText; + std::string buttonColor; + if (button->GetValue("text")) { + buttonText = button->GetValue("text")->GetString(); + } + if (button->GetValue("color")) { + buttonColor = button->GetValue("color")->GetString(); + } + dialogButtons.emplace_back(buttonText, buttonColor); + } + } + return dialogButtons; +} + +JSValue JsHandlePageRoute(JSContext* ctx, JSValueConst argv, const std::string& methodName) +{ + std::string uri = JsParseRouteUrl(ctx, argv, ROUTE_KEY_URI); + if (methodName == ROUTE_PAGE_BACK) { + uri = JsParseRouteUrl(ctx, argv, ROUTE_KEY_PATH); + } + std::string params = JsParseRouteParams(ctx, argv, ROUTE_KEY_PARAMS); + + auto instance = static_cast(JS_GetContextOpaque(ctx)); + // Operator map for page route. + static const LinearMapNode + pageRouteOperators[] = { + { ROUTE_PAGE_BACK, + [](const std::string& uri, const std::string& params, QjsEngineInstance& instance) { + LOGD("JsBackRoute uri = %{private}s", uri.c_str()); + instance.GetDelegate()->Back(uri); + return JS_NULL; + } }, + { ROUTE_PAGE_CLEAR, + [](const std::string& uri, const std::string& params, QjsEngineInstance& instance) { + LOGD("Clear Page Route"); + instance.GetDelegate()->Clear(); + return JS_NULL; + } }, + { ROUTE_PAGE_GET_LENGTH, + [](const std::string& uri, const std::string& params, QjsEngineInstance& instance) { + int32_t routeLength = instance.GetDelegate()->GetStackSize(); + std::string indexLength = std::to_string(routeLength); + LOGD("JsGetLengthRoute routeLength=%{private}s", indexLength.c_str()); + auto ctx = instance.GetQjsContext(); + return JS_NewString(ctx, indexLength.c_str()); + } }, + { ROUTE_PAGE_GET_STATE, + [](const std::string& uri, const std::string& params, QjsEngineInstance& instance) { + int32_t routeIndex = 0; + std::string routeName; + std::string routePath; + instance.GetDelegate()->GetState(routeIndex, routeName, routePath); + LOGD("JsGetStateRoute index=%{private}d name=%{private}s path=%{private}s", routeIndex, + routeName.c_str(), routePath.c_str()); + + auto ctx = instance.GetQjsContext(); + JSValue routeData = JS_NewObject(ctx); + JS_SetPropertyStr(ctx, routeData, "index", JS_NewInt32(ctx, routeIndex)); + JS_SetPropertyStr(ctx, routeData, "name", JS_NewString(ctx, routeName.c_str())); + JS_SetPropertyStr(ctx, routeData, "path", JS_NewString(ctx, routePath.c_str())); + return routeData; + } }, + { ROUTE_PAGE_PUSH, + [](const std::string& uri, const std::string& params, QjsEngineInstance& instance) { + LOGD("JsPushRoute uri = %{private}s", uri.c_str()); + instance.GetDelegate()->Push(uri, params); + return JS_NULL; + } }, + { ROUTE_PAGE_REPLACE, + [](const std::string& uri, const std::string& params, QjsEngineInstance& instance) { + LOGD("JsReplaceRoute uri = %{private}s", uri.c_str()); + instance.GetDelegate()->Replace(uri, params); + return JS_NULL; + } }, + }; + auto operatorIter = BinarySearchFindIndex(pageRouteOperators, ArraySize(pageRouteOperators), methodName.c_str()); + if (operatorIter != -1) { + return pageRouteOperators[operatorIter].value(uri, params, *instance); + } else { + LOGW("system.router not support method = %{private}s", methodName.c_str()); + } + return JS_NULL; +} + +JSValue JsShowToast(JSContext* ctx, JSValueConst argv) +{ + ScopedString args(ctx, argv); + std::unique_ptr argsPtr = JsonUtil::ParseJsonString(args.get()); + std::string message; + int32_t duration = 0; + std::string bottom; + if (argsPtr != nullptr) { + if (argsPtr->GetValue(PROMPT_KEY_MESSAGE) != nullptr) { + if (argsPtr->GetValue(PROMPT_KEY_MESSAGE)->IsString()) { + message = argsPtr->GetValue(PROMPT_KEY_MESSAGE)->GetString(); + } else { + message = argsPtr->GetValue(PROMPT_KEY_MESSAGE)->ToString(); + } + } + if (argsPtr->GetValue(PROMPT_KEY_DURATION) != nullptr && argsPtr->GetValue(PROMPT_KEY_DURATION)->IsNumber()) { + duration = argsPtr->GetValue(PROMPT_KEY_DURATION)->GetInt(); + } + if (argsPtr->GetValue(PROMPT_KEY_BOTTOM) != nullptr && argsPtr->GetValue(PROMPT_KEY_BOTTOM)->IsString()) { + bottom = argsPtr->GetValue(PROMPT_KEY_BOTTOM)->GetString(); + } + } + LOGD("JsShowToast message = %{private}s duration = %{private}d bottom = %{private}s", message.c_str(), duration, + bottom.c_str()); + auto instance = static_cast(JS_GetContextOpaque(ctx)); + ACE_DCHECK(instance); + instance->GetDelegate()->ShowToast(message, duration, bottom); + return JS_NULL; +} + +JSValue JsShowDialog(JSContext* ctx, JSValueConst argv) +{ + const std::string title = JsParseRouteUrl(ctx, argv, PROMPT_KEY_TITLE); + const std::string message = JsParseRouteUrl(ctx, argv, PROMPT_KEY_MESSAGE); + std::vector> buttons = JsParseDialogButtons(ctx, argv, PROMPT_KEY_BUTTONS); + const std::string success = JsParseRouteUrl(ctx, argv, COMMON_SUCCESS); + const std::string cancel = JsParseRouteUrl(ctx, argv, COMMON_CANCEL); + const std::string complete = JsParseRouteUrl(ctx, argv, COMMON_COMPLETE); + bool autoCancel = true; + + ScopedString args(ctx, argv); + std::unique_ptr argsPtr = JsonUtil::ParseJsonString(args.get()); + if (argsPtr != nullptr && argsPtr->GetValue(PROMPT_DIALOG_AUTO_CANCEL) != nullptr && + argsPtr->GetValue(PROMPT_DIALOG_AUTO_CANCEL)->IsBool()) { + autoCancel = argsPtr->GetValue(PROMPT_DIALOG_AUTO_CANCEL)->GetBool(); + } + + std::set callbacks; + if (!success.empty()) { + callbacks.emplace(COMMON_SUCCESS); + } + if (!cancel.empty()) { + callbacks.emplace(COMMON_CANCEL); + } + if (!complete.empty()) { + callbacks.emplace(COMMON_COMPLETE); + } + + auto instance = static_cast(JS_GetContextOpaque(ctx)); + auto callback = [instance, success, cancel, complete](int32_t callbackType, int32_t successType) { + switch (callbackType) { + case 0: + instance->CallJs(success.c_str(), + std::string("{\"index\":").append(std::to_string(successType)).append("}").c_str(), false); + break; + case 1: + instance->CallJs(cancel.c_str(), std::string("\"cancel\",null").c_str(), false); + break; + case 2: + instance->CallJs(complete.c_str(), std::string("\"complete\",null").c_str(), false); + break; + default: + break; + } + }; + instance->GetDelegate()->ShowDialog(title, message, buttons, autoCancel, std::move(callback), callbacks); + return JS_NULL; +} + +JSValue JsHandlePrompt(JSContext* ctx, JSValueConst argv, const std::string& methodName) +{ + if (methodName == PROMPT_SHOW_TOAST) { + return JsShowToast(ctx, argv); + } else if (methodName == PROMPT_SHOW_DIALOG) { + return JsShowDialog(ctx, argv); + } else { + LOGW("system.prompt not support method = %{private}s", methodName.c_str()); + } + return JS_NULL; +} + +JSValue JsHandleAnimationFrame(JSContext* ctx, JSValueConst argv, const std::string& methodName) +{ + auto instance = static_cast(JS_GetContextOpaque(ctx)); + if (instance == nullptr) { + return JS_NULL; + } + const char* callbackIdJsStr = JS_ToCString(ctx, argv); + if (callbackIdJsStr == nullptr) { + LOGW("system animation callbackId is null"); + return JS_NULL; + } + if (methodName == ANIMATION_REQUEST_ANIMATION_FRAME) { + instance->GetDelegate()->RequestAnimationFrame(std::string(callbackIdJsStr)); + } else if (methodName == ANIMATION_CANCEL_ANIMATION_FRAME) { + instance->GetDelegate()->CancelAnimationFrame(std::string(callbackIdJsStr)); + } else { + LOGW("animationFrame not support method = %{private}s", methodName.c_str()); + } + JS_FreeCString(ctx, callbackIdJsStr); + return JS_NULL; +} + +JSValue JsAddListener(JSContext* ctx, JSValueConst argv) +{ + auto instance = static_cast(JS_GetContextOpaque(ctx)); + if (instance == nullptr) { + return JS_NULL; + } + JSPropertyEnum* pTab = nullptr; + uint32_t len = 0; + if (JS_IsObject(argv) && JS_IsArray(ctx, argv)) { + JS_GetOwnPropertyNames(ctx, &pTab, &len, argv, JS_GPN_STRING_MASK); + if (len == 0) { + js_free(ctx, pTab); + return JS_NULL; + } + JSValue jsListenerId = JS_GetProperty(ctx, argv, pTab[0].atom); + const char* listenerId = JS_ToCString(ctx, jsListenerId); + auto mediaQuery = instance->GetDelegate()->GetMediaQueryInfoInstance(); + if (mediaQuery) { + mediaQuery->SetListenerId(std::string(listenerId)); + } + JS_FreeCString(ctx, listenerId); + JS_FreeValue(ctx, jsListenerId); + js_free(ctx, pTab); + } + return JS_NULL; +} + +void JsParseCallbackResult(JSContext* ctx, JSValueConst jsResult, const std::string& key, std::string& result) +{ + ScopedString args(ctx, jsResult); + std::unique_ptr argsPtr = JsonUtil::ParseJsonString(args.get()); + if (argsPtr != nullptr && argsPtr->GetValue(key) != nullptr) { + if (argsPtr->GetValue(key)->IsString()) { + result = argsPtr->GetValue(key)->GetString(); + } else if (argsPtr->GetValue(key)->IsNumber()) { + result = argsPtr->GetValue(key)->ToString(); + } + } +} + +JSValue JsHandleCallback(JSContext* ctx, JSValueConst argv, const std::string& methodName) +{ + if (methodName == CALLBACK_NATIVE) { + if (JS_IsObject(argv) && JS_IsArray(ctx, argv)) { + JSValue jsCallbackId = JS_GetPropertyUint32(ctx, argv, 0); + JSValue jsResult = JS_GetPropertyUint32(ctx, argv, 1); + const char* callbackId = JS_ToCString(ctx, jsCallbackId); + std::string result = JS_ToCString(ctx, jsResult); + JsParseCallbackResult(ctx, jsResult, KEY_STEPPER_PENDING_INDEX, result); + auto instance = static_cast(JS_GetContextOpaque(ctx)); + ACE_DCHECK(instance); + instance->GetDelegate()->SetCallBackResult(std::string(callbackId), result); + + JS_FreeCString(ctx, callbackId); + JS_FreeValue(ctx, jsCallbackId); + JS_FreeValue(ctx, jsResult); + } + } else if (methodName == APP_DESTROY_FINISH) { + LOGD("JsHandleCallback: appDestroyFinish should release resource here"); + } else { + LOGW("internal.jsResult not support method = %{private}s", methodName.c_str()); + } + return JS_NULL; +} + +JSValue JsHandleImage(JSContext* ctx, JSValueConst argv) +{ + auto src = JsParseRouteUrl(ctx, argv, "src"); + auto success = JsParseRouteUrl(ctx, argv, "success"); + auto fail = JsParseRouteUrl(ctx, argv, "fail"); + + std::set callbacks; + if (!success.empty()) { + callbacks.emplace("success"); + } + if (!fail.empty()) { + callbacks.emplace("fail"); + } + + auto instance = static_cast(JS_GetContextOpaque(ctx)); + if (instance == nullptr) { + return JS_NULL; + } + + auto&& callback = [instance, success, fail](int32_t callbackType) { + switch (callbackType) { + case 0: + instance->CallJs(success.c_str(), std::string("\"success\",null").c_str(), false); + break; + case 1: + instance->CallJs(fail.c_str(), std::string("\"fail\",null").c_str(), false); + break; + default: + break; + } + }; + instance->GetDelegate()->HandleImage(src, callback, callbacks); + return JS_NULL; +} + +void JsSetTimer(JSContext* ctx, JSValueConst argv, bool isInterval) +{ + JSPropertyEnum* pTab = nullptr; + uint32_t len = 0; + if (JS_IsObject(argv) && JS_IsArray(ctx, argv)) { + JS_GetOwnPropertyNames(ctx, &pTab, &len, argv, JS_GPN_STRING_MASK); + if (len < 2) { + LOGW("JsSetTimer: invalid callback value"); + return; + } + + JSValue jsCallBackId = JS_GetProperty(ctx, argv, pTab[0].atom); + JSValue jsDelay = JS_GetProperty(ctx, argv, pTab[1].atom); + const char* callBackId = JS_ToCString(ctx, jsCallBackId); + const char* delay = JS_ToCString(ctx, jsDelay); + auto instance = static_cast(JS_GetContextOpaque(ctx)); + ACE_DCHECK(instance); + LOGD("JsSetTimer callbackId: %{private}s, delay: %{private}s", callBackId, delay); + instance->GetDelegate()->WaitTimer(std::string(callBackId), std::string(delay), isInterval, true); + + JS_FreeCString(ctx, callBackId); + JS_FreeCString(ctx, delay); + JS_FreeValue(ctx, jsCallBackId); + JS_FreeValue(ctx, jsDelay); + js_free(ctx, pTab); + } +} + +void JsClearTimeout(JSContext* ctx, JSValueConst argv) +{ + JSPropertyEnum* pTab = nullptr; + uint32_t len = 0; + if (JS_IsObject(argv) && JS_IsArray(ctx, argv)) { + JS_GetOwnPropertyNames(ctx, &pTab, &len, argv, JS_GPN_STRING_MASK); + if (len < 1) { + LOGW("JsClearTimeout: invalid callback value"); + return; + } + + JSValue jsCallBackId = JS_GetProperty(ctx, argv, pTab[0].atom); + const char* callBackId = JS_ToCString(ctx, jsCallBackId); + auto instance = static_cast(JS_GetContextOpaque(ctx)); + ACE_DCHECK(instance); + LOGD("ClearTimeOut callBackId: %{private}s", callBackId); + instance->GetDelegate()->ClearTimer(std::string(callBackId)); + + JS_FreeCString(ctx, callBackId); + JS_FreeValue(ctx, jsCallBackId); + js_free(ctx, pTab); + } +} + +JSValue JsSetLocale(JSContext* ctx, JSValueConst argv) +{ + ScopedString args(ctx, argv); + std::unique_ptr localeJson = JsonUtil::ParseJsonString(args.get()); + if (localeJson) { + std::string language; + if (localeJson->GetValue(LOCALE_LANGUAGE) != nullptr && localeJson->GetValue(LOCALE_LANGUAGE)->IsString()) { + language = localeJson->GetValue(LOCALE_LANGUAGE)->GetString(); + } + std::string countryOrRegion; + if (localeJson->GetValue(LOCALE_COUNTRY_OR_REGION) != nullptr && + localeJson->GetValue(LOCALE_COUNTRY_OR_REGION)->IsString()) { + countryOrRegion = localeJson->GetValue(LOCALE_COUNTRY_OR_REGION)->GetString(); + } + if (!countryOrRegion.empty() && !language.empty()) { + auto instance = static_cast(JS_GetContextOpaque(ctx)); + ACE_DCHECK(instance); + instance->ChangeLocale(language, countryOrRegion); + } + } + return JS_NULL; +} + +JSValue JsHandleSetTimeout(JSContext* ctx, JSValueConst argv, const std::string& methodName) +{ + if (methodName == SET_TIMEOUT) { + JsSetTimer(ctx, argv, false); + } else if (methodName == CLEAR_TIMEOUT || methodName == CLEAR_INTERVAL) { + JsClearTimeout(ctx, argv); + } else if (methodName == SET_INTERVAL) { + JsSetTimer(ctx, argv, true); + } else { + LOGW("Unsupported method for timer module!"); + return JS_NULL; + } + return JS_NULL; +} + +JSValue JsHandleMediaQuery(JSContext* ctx, JSValueConst argv, const std::string& methodName) +{ + if (methodName == ADD_LISTENER) { + JsAddListener(ctx, argv); + } else if (methodName == GET_DEVICE_TYPE) { + auto instance = static_cast(JS_GetContextOpaque(ctx)); + if (instance != nullptr) { + auto mediaQuery = instance->GetDelegate()->GetMediaQueryInfoInstance(); + if (mediaQuery) { + return JS_NewString(ctx, mediaQuery->GetDeviceType().c_str()); + } + } + } else { + LOGW("system.meidaquery not support method = %{private}s", methodName.c_str()); + } + return JS_NULL; +} + +JSValue GetAppInfo(JSContext* ctx) +{ + QjsEngineInstance* instance = static_cast(JS_GetContextOpaque(ctx)); + JSValue appName = JS_NewString(ctx, instance->GetDelegate()->GetAppName().c_str()); + JSValue versionName = JS_NewString(ctx, instance->GetDelegate()->GetVersionName().c_str()); + JSValue versionCode = JS_NewInt32(ctx, instance->GetDelegate()->GetVersionCode()); + + JSValue resData = JS_NewObject(ctx); + JS_SetPropertyStr(ctx, resData, "appName", appName); + JS_SetPropertyStr(ctx, resData, "versionName", versionName); + JS_SetPropertyStr(ctx, resData, "versionCode", versionCode); + + return resData; +} + +JSValue Terminate(JSContext* ctx) +{ + QjsEngineInstance* instance = static_cast(JS_GetContextOpaque(ctx)); + WeakPtr pipelineContextWeak = instance->GetDelegate()->GetPipelineContext(); + auto uiTaskExecutor = instance->GetDelegate()->GetUiTask(); + uiTaskExecutor.PostTask([pipelineContextWeak]() mutable { + auto pipelineContext = pipelineContextWeak.Upgrade(); + if (pipelineContext) { + pipelineContext->Finish(); + } + }); + return JS_NULL; +} + +void ParseFullWindowParams(JSContext* ctx, JSValue params, std::string& duration) +{ + JSPropertyEnum* tab = nullptr; + uint32_t paramLen = 0; + if (JS_IsObject(params)) { + JS_GetOwnPropertyNames(ctx, &tab, ¶mLen, params, JS_GPN_STRING_MASK); + const char* jsDurationKey = JS_AtomToCString(ctx, tab[0].atom); + if (jsDurationKey == nullptr) { + JS_FreeAtom(ctx, tab[0].atom); + js_free(ctx, tab); + LOGE("jsDurationKey is null."); + return; + } + if (std::strcmp(jsDurationKey, "duration") == 0) { + JSValue valObject = JS_GetProperty(ctx, params, tab[0].atom); + if (JS_IsString(valObject) || JS_IsNumber(valObject)) { + ScopedString styleVal(ctx, valObject); + const char* valDuration = styleVal.get(); + duration = valDuration; + } + JS_FreeValue(ctx, valObject); + } + JS_FreeAtom(ctx, tab[0].atom); + JS_FreeCString(ctx, jsDurationKey); + } + js_free(ctx, tab); +} + +JSValue RequestFullWindow(JSContext* ctx, JSValueConst argv) +{ + JSPropertyEnum* pTab = nullptr; + uint32_t len = 0; + int32_t duration = -1; // default scene + if (JS_IsObject(argv) && JS_IsArray(ctx, argv)) { + JS_GetOwnPropertyNames(ctx, &pTab, &len, argv, JS_GPN_STRING_MASK); + if (len < ARGS_FULL_WINDOW_LENGTH) { + LOGW("RequestFullWindow: invalid callback value"); + js_free(ctx, pTab); + return JS_NULL; + } + + if (len == CUSTOM_FULL_WINDOW_LENGTH) { + JSValue jsDuration = JS_GetProperty(ctx, argv, pTab[0].atom); + std::string valDuration; + ParseFullWindowParams(ctx, jsDuration, valDuration); + if (!valDuration.empty()) { + duration = StringToInt(valDuration); + } + if (duration < 0) { + duration = -1; // default scene + } + JS_FreeValue(ctx, jsDuration); + } + js_free(ctx, pTab); + } + QjsEngineInstance* instance = static_cast(JS_GetContextOpaque(ctx)); + WeakPtr pipelineContextWeak = instance->GetDelegate()->GetPipelineContext(); + auto uiTaskExecutor = instance->GetDelegate()->GetUiTask(); + uiTaskExecutor.PostTask([pipelineContextWeak, duration]() mutable { + auto pipelineContext = pipelineContextWeak.Upgrade(); + if (pipelineContext) { + pipelineContext->RequestFullWindow(duration); + } + }); + return JS_NULL; +} + +void GetPackageInfoCallback(JSContext* ctx, JSValueConst jsMessage, const char* callbackId) +{ + auto instance = static_cast(JS_GetContextOpaque(ctx)); + if (!JS_IsObject(jsMessage)) { + LOGE("GetPackageInfoCallback: jsMessage is not Object"); + instance->CallJs( + callbackId, std::string("{\"arguments\":[\"jsMessage is not Object\",200],\"method\":\"fail\"}"), false); + return; + } + JSValue jsPackageName = JS_GetPropertyStr(ctx, jsMessage, APP_PACKAGE_NAME); + if (!JS_IsString(jsPackageName)) { + LOGE("GetPackageInfoCallback: package name is not String"); + instance->CallJs(callbackId, + std::string("{\"arguments\":[\"packageName is not available string\",202],\"method\":\"fail\"}"), false); + } else { + ScopedString packageName(ctx, jsPackageName); + AceBundleInfo bundleInfo; + if (AceApplicationInfo::GetInstance().GetBundleInfo(packageName.get(), bundleInfo)) { + auto infoList = JsonUtil::Create(true); + infoList->Put("versionName", bundleInfo.versionName.c_str()); + infoList->Put("versionCode", std::to_string(bundleInfo.versionCode).c_str()); + instance->CallJs(callbackId, + std::string("{\"arguments\":[").append(infoList->ToString()).append("],\"method\":\"success\"}"), + false); + } else { + LOGE("can not get info by GetBundleInfo"); + instance->CallJs( + callbackId, std::string("{\"arguments\":[\"can not get info\",200],\"method\":\"fail\"}"), false); + } + } + JS_FreeValue(ctx, jsPackageName); +} + +JSValue GetPackageInfo(JSContext* ctx, JSValueConst argv) +{ + if (!JS_IsObject(argv)) { + LOGE("GetPackageInfo: argv is not Object"); + return JS_NULL; + } + + if (!JS_IsArray(ctx, argv)) { + LOGE("GetPackageInfo: argv is not Array"); + return JS_NULL; + } + + JSPropertyEnum* pTab = nullptr; + uint32_t len = 0; + + JS_GetOwnPropertyNames(ctx, &pTab, &len, argv, JS_GPN_STRING_MASK); + if (len < 2) { + LOGE("GetPackageInfo: invalid callback value"); + js_free(ctx, pTab); + return JS_EXCEPTION; + } + + JSValue jsMessage = JS_GetProperty(ctx, argv, pTab[0].atom); + JSValue jsCallbackId = JS_GetProperty(ctx, argv, pTab[1].atom); + const char* callbackId = JS_ToCString(ctx, jsCallbackId); + LOGD("system app getPackageInfo callBackID is %{public}s", callbackId); + GetPackageInfoCallback(ctx, jsMessage, callbackId); + + JS_FreeCString(ctx, callbackId); + JS_FreeValue(ctx, jsMessage); + JS_FreeValue(ctx, jsCallbackId); + js_free(ctx, pTab); + + return JS_NULL; +} + +JSValue SetScreenOnVisible(JSContext* ctx, JSValueConst argv) +{ + if (!JS_IsObject(argv) || !JS_IsArray(ctx, argv)) { + LOGE("SetScreenOnVisible: argv is not illegal"); + return JS_NULL; + } + JSPropertyEnum* pTab = nullptr; + uint32_t len = 0; + JS_GetOwnPropertyNames(ctx, &pTab, &len, argv, JS_GPN_STRING_MASK); + if (len < 2) { + LOGE("SetScreenOnVisible: invalid callback value"); + js_free(ctx, pTab); + return JS_EXCEPTION; + } + JSValue jsObject = JS_GetProperty(ctx, argv, pTab[0].atom); + std::string flag = "false"; + if (JS_IsObject(jsObject)) { + JSValue flagValue = JS_GetPropertyStr(ctx, jsObject, APP_SCREEN_ON_VISIBLE_FLAG); + if (JS_IsBool(flagValue)) { + ScopedString flagValueStr(ctx, flagValue); + flag = flagValueStr.get(); + } + } + JSValue jsCallbackId = JS_GetProperty(ctx, argv, pTab[1].atom); + ScopedString callbackId(ctx, jsCallbackId); + auto instance = static_cast(JS_GetContextOpaque(ctx)); + if (StringToBool(flag)) { + instance->CallJs(callbackId.get(), R"({"arguments":[], "method":"success"})"); + } else { + instance->CallJs( + callbackId.get(), R"({"arguments":["fail to set false flag in rich platform", 200],"method":"fail"})"); + } + JS_FreeValue(ctx, jsObject); + JS_FreeValue(ctx, jsCallbackId); + js_free(ctx, pTab); + return JS_NULL; +} + +JSValue SetSwipeToDismiss(JSContext* ctx, JSValueConst argv) +{ + if (!JS_IsObject(argv) || !JS_IsArray(ctx, argv)) { + LOGE("SetSwipeToDismiss: argv is not illegal"); + return JS_NULL; + } + bool forbideQuit = false; + ScopedString args(ctx, argv); + std::unique_ptr argsPtr = JsonUtil::ParseJsonString(args.get()); + if (argsPtr != nullptr && argsPtr->IsBool()) { + forbideQuit = argsPtr->GetBool(); + } + QjsEngineInstance* instance = static_cast(JS_GetContextOpaque(ctx)); + WeakPtr pipelineContextWeak = instance->GetDelegate()->GetPipelineContext(); + auto uiTaskExecutor = instance->GetDelegate()->GetUiTask(); + uiTaskExecutor.PostTask([pipelineContextWeak, forbideQuit]() mutable { + auto pipelineContext = pipelineContextWeak.Upgrade(); + if (pipelineContext) { + pipelineContext->SetForbidePlatformQuit(forbideQuit); + } + }); + + return JS_NULL; +} + +JSValue JsHandleAppApi(JSContext* ctx, JSValueConst argv, const std::string& methodName) +{ + if (methodName == APP_GET_INFO) { + return GetAppInfo(ctx); + } else if (methodName == APP_TERMINATE) { + return Terminate(ctx); + } else if (methodName == APP_GET_PACKAGE_INFO) { + return GetPackageInfo(ctx, argv); + } else if (methodName == APP_REQUEST_FULL_WINDOW) { + return RequestFullWindow(ctx, argv); + } else if (methodName == APP_SCREEN_ON_VISIBLE) { + return SetScreenOnVisible(ctx, argv); + } else if (methodName == APP_SET_SWIPE_TO_DISMISS) { + return SetSwipeToDismiss(ctx, argv); + } else { + return JS_NULL; + } +} + +void ProcessSystemParam(std::unique_ptr& infoList) +{ + std::string tmp = SystemProperties::GetBrand(); + if (tmp != SystemProperties::INVALID_PARAM) { + infoList->Put("brand", tmp.c_str()); + } + tmp = SystemProperties::GetManufacturer(); + if (tmp != SystemProperties::INVALID_PARAM) { + infoList->Put("manufacturer", tmp.c_str()); + } + tmp = SystemProperties::GetModel(); + if (tmp != SystemProperties::INVALID_PARAM) { + infoList->Put("model", tmp.c_str()); + } + tmp = SystemProperties::GetProduct(); + if (tmp != SystemProperties::INVALID_PARAM) { + infoList->Put("product", tmp.c_str()); + } + tmp = SystemProperties::GetApiVersion(); + if (tmp != SystemProperties::INVALID_PARAM) { + char* tmpEnd = nullptr; + infoList->Put( + "apiVersion", static_cast(std::strtol(SystemProperties::GetApiVersion().c_str(), &tmpEnd, 10))); + } + tmp = SystemProperties::GetReleaseType(); + if (tmp != SystemProperties::INVALID_PARAM) { + infoList->Put("releaseType", tmp.c_str()); + } + tmp = SystemProperties::GetParamDeviceType(); + if (tmp != SystemProperties::INVALID_PARAM) { + infoList->Put("deviceType", tmp.c_str()); + } +} + +std::pair GetDeviceInfo() +{ + static constexpr uint8_t paramNumber = 13; + auto infoList = JsonUtil::Create(true); + ProcessSystemParam(infoList); + + if (!AceApplicationInfo::GetInstance().GetLanguage().empty()) { + infoList->Put("language", AceApplicationInfo::GetInstance().GetLanguage().c_str()); + } + if (!AceApplicationInfo::GetInstance().GetCountryOrRegion().empty()) { + infoList->Put("region", AceApplicationInfo::GetInstance().GetCountryOrRegion().c_str()); + } + + int32_t width = SystemProperties::GetWidth(); + if (width != 0) { + infoList->Put("windowWidth", width); + } + int32_t height = SystemProperties::GetHeight(); + if (height != 0) { + infoList->Put("windowHeight", height); + } + infoList->Put("screenDensity", SystemProperties::GetResolution()); + + bool isRound = SystemProperties::GetIsScreenRound(); + if (isRound) { + infoList->Put("screenShape", "circle"); + } else { + infoList->Put("screenShape", "rect"); + } + + bool isParamValid = false; + uint8_t count = 0; + auto child = infoList->GetChild(); + while (child->IsValid()) { + child = child->GetNext(); + ++count; + } + if (count == paramNumber) { + isParamValid = true; + } + return std::make_pair(infoList->ToString(), std::move(isParamValid)); +} + +JSValue JsGetDeviceInfo(JSContext* ctx, JSValueConst argv) +{ + const char* callbackId = JS_ToCString(ctx, argv); + if (callbackId == nullptr) { + LOGE("system device getInfo callBackID is null"); + } else { + LOGD("system device getInfo callBackID = %{public}s", callbackId); + auto instance = static_cast(JS_GetContextOpaque(ctx)); + std::pair ret = GetDeviceInfo(); + if (ret.second) { + instance->CallJs(callbackId, + std::string("{\"arguments\":[").append(ret.first).append("],\"method\":\"success\"}"), false); + } else { + instance->CallJs(callbackId, + std::string("{\"arguments\":[").append(ret.first).append(",200],\"method\":\"fail\"}"), false); + } + JS_FreeCString(ctx, callbackId); + } + + return JS_NULL; +} + +JSValue GetLocale(JSContext* ctx) +{ + JSValue language = JS_NewString(ctx, AceApplicationInfo::GetInstance().GetLanguage().c_str()); + JSValue countryOrRegion = JS_NewString(ctx, AceApplicationInfo::GetInstance().GetCountryOrRegion().c_str()); + JSValue dir = JS_NewString( + ctx, AceApplicationInfo::GetInstance().IsRightToLeft() ? LOCALE_TEXT_DIR_RTL : LOCALE_TEXT_DIR_LTR); + JSValue unicodeSetting = JS_NewString(ctx, AceApplicationInfo::GetInstance().GetUnicodeSetting().c_str()); + + JSValue resData = JS_NewObject(ctx); + JS_SetPropertyStr(ctx, resData, LOCALE_LANGUAGE, language); + JS_SetPropertyStr(ctx, resData, LOCALE_COUNTRY_OR_REGION, countryOrRegion); + JS_SetPropertyStr(ctx, resData, LOCALE_TEXT_DIR, dir); + JS_SetPropertyStr(ctx, resData, LOCALE_UNICODE_SETTING, unicodeSetting); + + return resData; +} + +JSValue JsCallComponent(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + if ((argv == nullptr) || (argc != 3)) { + LOGE("argc error, argc = %{private}d", argc); + return JS_NULL; + } + auto instance = static_cast(JS_GetContextOpaque(ctx)); + if (instance == nullptr) { + LOGE("JsCallComponent failed, instance is null."); + return JS_NULL; + } + auto page = GetRunningPage(ctx); + if (!page) { + LOGE("JsCallComponent failed, page is null."); + return JS_NULL; + } + int32_t nodeId; + JS_ToInt32(ctx, &nodeId, argv[0]); + nodeId = (nodeId == 0) ? DOM_ROOT_NODE_ID_BASE + page->GetPageId() : nodeId; + ScopedString methodName(ctx, argv[1]); + ScopedString args(ctx, argv[2]); + LOGD("nodeId = %{private}d, methodName = %{private}s, args = %{private}s", nodeId, methodName.get(), args.get()); + // handle canvas getContext + if (std::strcmp(methodName.get(), "getContext") == 0) { + auto bridge = AceType::DynamicCast(page->GetBridgeById(nodeId)); + if (bridge) { + bridge->HandleJsContext(ctx, nodeId, args.get()); + return bridge->GetRenderContext(); + } + return JS_NULL; + } else if (std::strcmp(methodName.get(), "toDataURL") == 0) { + auto bridge = AceType::DynamicCast(page->GetBridgeById(nodeId)); + if (bridge) { + bridge->HandleToDataURL(ctx, nodeId, args.get()); + return bridge->GetDataURL(); + } + return JS_NULL; + } else if (std::strcmp(methodName.get(), "getScrollOffset") == 0) { + // handle getScrollOffset method of scroll view, like div, stack and list. + return CompoentApiBridge::JsGetScrollOffset(ctx, nodeId); + } else if (std::strcmp(methodName.get(), "getBoundingClientRect") == 0) { + return CompoentApiBridge::JsGetBoundingRect(ctx, nodeId); + } + + auto resultValue = JSValue(); + // handle animation animate method + if (std::strcmp(methodName.get(), "animate") == 0) { + resultValue = AnimationBridgeUtils::CreateAnimationContext(ctx, page->GetPageId(), nodeId); + auto animationBridge = AceType::MakeRefPtr(ctx, resultValue, nodeId); + auto task = AceType::MakeRefPtr(animationBridge, args.get()); + instance->AddAnimationBridge(animationBridge); + page->PushCommand(Referenced::MakeRefPtr(nodeId, task)); + } else if (std::strcmp(methodName.get(), "currentOffset") == 0) { + // handle list currentOffset method + return ListBridge::JsGetCurrentOffset(ctx, nodeId); + } else if (std::strcmp(methodName.get(), "getState") == 0) { + // handle image animator getState method. + return ImageAnimatorBridge::JsGetState(ctx, nodeId); + } else { + page->PushCommand(Referenced::MakeRefPtr(nodeId, methodName.get(), args.get())); + } + // focus method should delayed util show attribute update. + if (page->CheckPageCreated() && strcmp(DOM_FOCUS, methodName.get()) != 0) { + QjsEngineInstance* instance = static_cast(JS_GetContextOpaque(ctx)); + ACE_DCHECK(instance); + instance->GetDelegate()->TriggerPageUpdate(page->GetPageId(), true); + } + return resultValue; +} + +JSValue JsCallConfiguration(JSContext* ctx, const std::string& method, JSValueConst argv) +{ + if (CONFIGURATION_GET_LOCALE == method) { + return GetLocale(ctx); + } else if (CONFIGURATION_SET_LOCALE == method) { + return JsSetLocale(ctx, argv); + } + return JS_NULL; +} + +JSValue JsHandleModule(std::string moduleName, std::string methodName, JSContext* ctx, JSValueConst* argv) +{ + static const LinearMapNode jsHandleMap[] = { + { "animation", + [](JSContext* ctx, JSValueConst* argv, const std::string& methodName) { + return JsHandleAnimationFrame(ctx, argv[1], methodName); + } }, + { "internal.jsResult", + [](JSContext* ctx, JSValueConst* argv, const std::string& methodName) { + return JsHandleCallback(ctx, argv[1], methodName); + } }, + { "system.app", [](JSContext* ctx, JSValueConst* argv, + const std::string& methodName) { return JsHandleAppApi(ctx, argv[1], methodName); } }, + { "system.configuration", + [](JSContext* ctx, JSValueConst* argv, const std::string& methodName) { + return JsCallConfiguration(ctx, methodName, argv[1]); + } }, + { "system.device", + [](JSContext* ctx, JSValueConst* argv, const std::string& methodName) { + if (methodName == "getInfo") { + return JsGetDeviceInfo(ctx, argv[1]); + } else { + return JS_NULL; + } + } }, + { "system.image", [](JSContext* ctx, JSValueConst* argv, + const std::string& methodName) { return JsHandleImage(ctx, argv[1]); } }, + { "system.mediaquery", + [](JSContext* ctx, JSValueConst* argv, const std::string& methodName) { + return JsHandleMediaQuery(ctx, argv[1], methodName); + } }, + { "system.prompt", [](JSContext* ctx, JSValueConst* argv, + const std::string& methodName) { return JsHandlePrompt(ctx, argv[1], methodName); } }, + { "system.router", [](JSContext* ctx, JSValueConst* argv, + const std::string& methodName) { return JsHandlePageRoute(ctx, argv[1], methodName); } }, + { "timer", [](JSContext* ctx, JSValueConst* argv, + const std::string& methodName) { return JsHandleSetTimeout(ctx, argv[1], methodName); } }, + }; + + auto jsHandleIter = BinarySearchFindIndex(jsHandleMap, ArraySize(jsHandleMap), moduleName.c_str()); + if (jsHandleIter != -1) { + return jsHandleMap[jsHandleIter].value(ctx, argv, methodName); + } + + return JS_NULL; +} + +JSValue JsCallNative(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + ACE_SCOPED_TRACE("JsCallNative"); + + if ((argv == nullptr) || (argc != 2)) { + LOGE("the arg is error"); + return JS_EXCEPTION; + } + + ScopedString moduleAndMethod(ctx, argv[0]); + ScopedString args(ctx, argv[1]); + LOGD("JsCallNative moduleAndMethod = %{private}s, args = %{private}s", moduleAndMethod.get(), args.get()); + + std::unique_ptr moduleAndMethodPtr = JsonUtil::ParseJsonString(moduleAndMethod.get()); + if (!moduleAndMethodPtr) { + LOGE("Get moduleAndMethod from argv failed"); + return JS_NULL; + } + + std::unique_ptr modulePtr = moduleAndMethodPtr->GetValue("module"); + if (!modulePtr) { + LOGE("Get module from moduleAndMethodPtr failed"); + return JS_NULL; + } + + std::unique_ptr methodPtr = moduleAndMethodPtr->GetValue("method"); + if (!methodPtr) { + LOGE("Get method from moduleAndMethodPtr failed"); + return JS_NULL; + } + + const std::string moduleName = modulePtr->GetString(); + const std::string methodName = methodPtr->GetString(); + + return JsHandleModule(moduleName, methodName, ctx, argv); +} + +#ifdef ENABLE_JS_DEBUG +JSValue JsCompileAndRunBundle(JSContext* ctx, JSValueConst thisVal, int argc, JSValueConst* argv) +{ + ScopedString str(ctx, argv[0]); + ScopedString url(ctx, argv[1]); + JSValue CppToJSRet = JS_Eval(ctx, str.get(), strlen(str.get()), url.get(), JS_EVAL_TYPE_GLOBAL); + + if (JS_IsException(CppToJSRet)) { + LOGE("Qjs JsCompileAndRunBundle FAILED !!"); + QjsUtils::JsStdDumpErrorAce(ctx, JsErrorType::COMPILE_AND_RUN_BUNDLE_ERROR); + return JS_NULL; + } + + js_std_loop(ctx); + return CppToJSRet; +} +#endif + +JSValue AppLogPrint(JSContext* ctx, JsLogLevel level, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + ACE_SCOPED_TRACE("AppLogPrint(level=%d)", static_cast(level)); + + // Should have 1 parameters. + if ((argv == nullptr) || (argc == 0)) { + LOGE("the arg is error"); + return JS_EXCEPTION; + } + ScopedString printLog(ctx, argv[0]); + + switch (level) { + case JsLogLevel::DEBUG: + APP_LOGD("app Log: %{public}s", printLog.get()); + break; + case JsLogLevel::INFO: + APP_LOGI("app Log: %{public}s", printLog.get()); + break; + case JsLogLevel::WARNING: + APP_LOGW("app Log: %{public}s", printLog.get()); + break; + case JsLogLevel::ERROR: + APP_LOGE("app Log: %{public}s", printLog.get()); + break; + default: + break; + } + + return JS_NULL; +} + +JSValue AppLogPrint(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + return AppLogPrint(ctx, JsLogLevel::DEBUG, value, argc, argv); +} + +JSValue AppDebugLogPrint(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + return AppLogPrint(ctx, JsLogLevel::DEBUG, value, argc, argv); +} + +JSValue AppInfoLogPrint(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + return AppLogPrint(ctx, JsLogLevel::INFO, value, argc, argv); +} + +JSValue AppWarnLogPrint(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + return AppLogPrint(ctx, JsLogLevel::WARNING, value, argc, argv); +} + +JSValue AppErrorLogPrint(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + return AppLogPrint(ctx, JsLogLevel::ERROR, value, argc, argv); +} + +JSValue JsLogPrint(JSContext* ctx, JsLogLevel level, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + ACE_SCOPED_TRACE("JsLogPrint(level=%d)", static_cast(level)); + + // Should have 1 parameters. + if ((argv == nullptr) || (argc == 0)) { + LOGE("the arg is error"); + return JS_EXCEPTION; + } + ScopedString printLog(ctx, argv[0]); + + switch (level) { + case JsLogLevel::DEBUG: + LOGD("ace Log: %{public}s", printLog.get()); + break; + case JsLogLevel::INFO: + LOGI("ace Log: %{public}s", printLog.get()); + break; + case JsLogLevel::WARNING: + LOGW("ace Log: %{public}s", printLog.get()); + break; + case JsLogLevel::ERROR: + LOGE("ace Log: %{public}s", printLog.get()); + break; + } + + return JS_NULL; +} + +JSValue JsLogPrint(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + return JsLogPrint(ctx, JsLogLevel::DEBUG, value, argc, argv); +} + +JSValue JsDebugLogPrint(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + return JsLogPrint(ctx, JsLogLevel::DEBUG, value, argc, argv); +} + +JSValue JsInfoLogPrint(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + return JsLogPrint(ctx, JsLogLevel::INFO, value, argc, argv); +} + +JSValue JsWarnLogPrint(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + return JsLogPrint(ctx, JsLogLevel::WARNING, value, argc, argv); +} + +JSValue JsErrorLogPrint(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + return JsLogPrint(ctx, JsLogLevel::ERROR, value, argc, argv); +} + +JSValue JsPerfPrint(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + std::string ret = JsApiPerf::GetInstance().PrintToLogs(); + + JSValue retString = JS_NewString(ctx, ret.c_str()); + + return retString; +} + +JSValue JsPerfSleep(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + int32_t valInt = 0; + JS_ToInt32(ctx, &valInt, argv[0]); + + usleep(valInt); + + return JS_NULL; +} + +JSValue JsPerfBegin(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + int64_t currentTime = GetMicroTickCount(); + ScopedString functionName(ctx, argv[0]); + + JsApiPerf::GetInstance().InsertJsBeginLog(functionName.get(), currentTime); + + return JS_NULL; +} + +JSValue JsPerfEnd(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + int64_t currentTime = GetMicroTickCount(); + ScopedString functionName(ctx, argv[0]); + + JsApiPerf::GetInstance().InsertJsEndLog(functionName.get(), currentTime); + + return JS_NULL; +} + +JSValue JSHiViewReport(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + // Should have 2 parameters. + if ((argv == nullptr) || (argc != 2)) { + LOGE("the arg is error %{public}d", argc); + return JS_EXCEPTION; + } + if (JS_IsInteger(argv[0]) && JS_IsString(argv[1])) { + ScopedString eventId(ctx, argv[0]); + ScopedString eventJsonStr(ctx, argv[1]); + std::string jsonStr = eventJsonStr.get(); + EventReport::JsEventReport(StringToInt(eventId.get()), jsonStr); + LOGD("JsEventReport success"); + return JS_NULL; + } else { + LOGE("parameter type error "); + return JS_EXCEPTION; + } +} + +JSValue JsPluralRulesFormat(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + // Should have one parameters. + if ((argv == nullptr) || (argc != 1)) { + LOGE("the arg is error %{public}d", argc); + return JS_NULL; + } + if (JS_IsInteger(argv[0])) { + ScopedString choice(ctx, argv[0]); + JSValue result = + JS_NewString(ctx, Localization::GetInstance()->PluralRulesFormat(StringToDouble(choice.get())).c_str()); + return result; + } else { + LOGE("parameter type error "); + return JS_NULL; + } +} + +JSValue JsLoadIntl(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + ACE_SCOPED_TRACE("QjsEngine::LoadIntl"); + LOGI("JsLoadIntl"); + + JSValue ret = CallReadObject(ctx, js_intl_support, js_intl_support_size, true); + if (JS_IsException(ret)) { + LOGE("JsLoadIntl failed!"); + } + + return ret; +} + +JSValue JsLoadLocaleData(JSContext* ctx, JSValueConst value, int32_t argc, JSValueConst* argv) +{ + ACE_SCOPED_TRACE("QjsEngine::LoadLocaleData"); + LOGI("Add LocaleData"); + + ScopedString lib(ctx, argv[0]); // select which lib(intl or intl-relative-time-format) to use + ScopedString locale(ctx, argv[1]); // select locale + + std::string key; + if (strcmp(lib.get(), "intl") == 0) { + key.append("intl_"); + } else { + key.append("intl_relative_"); + } + key.append(locale.get()); + std::replace(key.begin(), key.end(), '-', '_'); + + std::unordered_map> data = GetLocaleDatasMap(); + if (data.find(key) != data.end()) { + std::vector val = data[key]; + const uint32_t* len = static_cast(val[0]); + const uint8_t* data = static_cast(val[1]); + JSValue ret = CallReadObject(ctx, data, *len, true); + LOGI("load data: %s", key.c_str()); + return ret; + } else { + LOGE("load data: %s not found!", key.c_str()); + return JS_NULL; + } +} + +// Follow definition in quickjs. +#define JS_CFUNC_DEF_CPP(name, length, func) \ + { \ + name, JS_PROP_WRITABLE | JS_PROP_CONFIGURABLE, JS_DEF_CFUNC, 0, \ + { \ + { \ + length, JS_CFUNC_generic, \ + { \ + func \ + } \ + } \ + } \ + } + +const JSCFunctionListEntry JS_ACE_FUNCS[] = { + JS_CFUNC_DEF_CPP("domCreateBody", 5, JsDomCreateBody), + JS_CFUNC_DEF_CPP("domAddElement", 9, JsDomAddElement), + JS_CFUNC_DEF_CPP("updateElementAttrs", 3, JsUpdateElementAttrs), + JS_CFUNC_DEF_CPP("updateElementStyles", 3, JsUpdateElementStyles), + JS_CFUNC_DEF_CPP("onCreateFinish", 0, JsOnCreateFinish), + JS_CFUNC_DEF_CPP("onUpdateFinish", 0, JsOnUpdateFinish), + JS_CFUNC_DEF_CPP("removeElement", 2, JsRemoveElement), + JS_CFUNC_DEF_CPP("callNative", 1, JsCallNative), + JS_CFUNC_DEF_CPP("callComponent", 3, JsCallComponent), + JS_CFUNC_DEF_CPP("loadIntl", 0, JsLoadIntl), + JS_CFUNC_DEF_CPP("loadLocaleData", 0, JsLoadLocaleData), +#ifdef ENABLE_JS_DEBUG + JS_CFUNC_DEF_CPP("compileAndRunBundle", 4, JsCompileAndRunBundle), +#endif +}; + +int32_t JsAceInit(JSContext* ctx, JSModuleDef* moduleDef) +{ + return JS_SetModuleExportList(ctx, moduleDef, JS_ACE_FUNCS, countof(JS_ACE_FUNCS)); +} + +JSModuleDef* InitAceModules(JSContext* ctx) +{ + LOGD("QjsEngine: InitAceModules"); + JSModuleDef* jsModule = JS_NewCModule(ctx, "ace", JsAceInit); + if (jsModule == nullptr) { + return nullptr; + } + JS_AddModuleExportList(ctx, jsModule, JS_ACE_FUNCS, countof(JS_ACE_FUNCS)); + return jsModule; +} + +void InitJsConsoleObject(JSContext* ctx, const JSValue& globalObj) +{ + JSValue console, aceConsole; + // app log method + console = JS_NewObject(ctx); + JS_SetPropertyStr(ctx, console, "log", JS_NewCFunction(ctx, AppLogPrint, "log", 1)); + JS_SetPropertyStr(ctx, console, "debug", JS_NewCFunction(ctx, AppDebugLogPrint, "debug", 1)); + JS_SetPropertyStr(ctx, console, "info", JS_NewCFunction(ctx, AppInfoLogPrint, "info", 1)); + JS_SetPropertyStr(ctx, console, "warn", JS_NewCFunction(ctx, AppWarnLogPrint, "warn", 1)); + JS_SetPropertyStr(ctx, console, "error", JS_NewCFunction(ctx, AppErrorLogPrint, "error", 1)); + JS_SetPropertyStr(ctx, globalObj, "console", console); + + // js framework log method + aceConsole = JS_NewObject(ctx); + JS_SetPropertyStr(ctx, aceConsole, "log", JS_NewCFunction(ctx, JsLogPrint, "log", 1)); + JS_SetPropertyStr(ctx, aceConsole, "debug", JS_NewCFunction(ctx, JsDebugLogPrint, "debug", 1)); + JS_SetPropertyStr(ctx, aceConsole, "info", JS_NewCFunction(ctx, JsInfoLogPrint, "info", 1)); + JS_SetPropertyStr(ctx, aceConsole, "warn", JS_NewCFunction(ctx, JsWarnLogPrint, "warn", 1)); + JS_SetPropertyStr(ctx, aceConsole, "error", JS_NewCFunction(ctx, JsErrorLogPrint, "error", 1)); + JS_SetPropertyStr(ctx, globalObj, "aceConsole", aceConsole); +} + +bool InitJsContext(JSContext* ctx, size_t maxStackSize, int32_t instanceId, const QjsEngineInstance* qjsEngineInstance) +{ + LOGI("QjsEngine: InitJsContext"); + if (ctx == nullptr) { + LOGE("Qjs cannot allocate JS context"); + EventReport::SendJsException(JsExcepType::JS_ENGINE_INIT_ERR); + return false; + } + + // Note: default 256KB is not enough + JS_SetMaxStackSize(ctx, maxStackSize); + + // Inject ace native functions module + InitAceModules(ctx); + + JSValue globalObj, perfUtil; + globalObj = JS_GetGlobalObject(ctx); + perfUtil = JS_NewObject(ctx); + + InitJsConsoleObject(ctx, globalObj); + + JS_SetPropertyStr(ctx, perfUtil, "printlog", JS_NewCFunction(ctx, JsPerfPrint, "printlog", 0)); + JS_SetPropertyStr(ctx, perfUtil, "sleep", JS_NewCFunction(ctx, JsPerfSleep, "sleep", 1)); + JS_SetPropertyStr(ctx, perfUtil, "begin", JS_NewCFunction(ctx, JsPerfBegin, "begin", 1)); + JS_SetPropertyStr(ctx, perfUtil, "end", JS_NewCFunction(ctx, JsPerfEnd, "end", 1)); + JS_SetPropertyStr(ctx, globalObj, "perfutil", perfUtil); + + NativeObjectInfo* nativeObjectInfo = new NativeObjectInfo(); + nativeObjectInfo->nativeObject = qjsEngineInstance->GetDelegate()->GetAbility(); + JSValue abilityValue = JS_NewExternal(ctx, nativeObjectInfo, [](JSContext* ctx, void *data, void *hint) { + NativeObjectInfo *info = (NativeObjectInfo *)data; + if (info) { + delete info; + } + }, nullptr); + JS_SetPropertyStr(ctx, globalObj, "ability", abilityValue); + + JSValue hiView; + hiView = JS_NewObject(ctx); + JS_SetPropertyStr(ctx, hiView, "report", JS_NewCFunction(ctx, JSHiViewReport, "report", 2)); + JS_SetPropertyStr(ctx, globalObj, "hiView", hiView); + + JSValue i18nPluralRules; + i18nPluralRules = JS_NewObject(ctx); + JS_SetPropertyStr(ctx, i18nPluralRules, "select", JS_NewCFunction(ctx, JsPluralRulesFormat, "select", 1)); + JS_SetPropertyStr(ctx, globalObj, "i18nPluralRules", i18nPluralRules); + + const char* str = "import * as ace from 'ace';\n" + "var global = globalThis;\n" + "global.ace = ace;\n" +#ifdef ENABLE_JS_DEBUG + "global.compileAndRunBundle = ace.compileAndRunBundle;\n" +#endif + "global.callNative = ace.callNative;\n"; + + if (JS_CALL_FAIL == CallEvalBuf(ctx, str, strlen(str), "", JS_EVAL_TYPE_MODULE, instanceId)) { + LOGW("Qjs created JS context but failed to init Ace modules!"); + } + + JS_FreeValue(ctx, globalObj); + return true; +} + +JSValue LoadJsFramework(JSContext* ctx, const uint8_t buf[], const uint32_t bufSize, int32_t instanceId) +{ + ACE_SCOPED_TRACE("LoadJsFramework"); + + LOGI("Qjs loading JS framework"); + JSValue ret = CallReadObject(ctx, buf, bufSize, true, instanceId); + if (JS_IsException(ret)) { + LOGD("Qjs loading JSFramework failed!"); + QjsUtils::JsStdDumpErrorAce(ctx, JsErrorType::LOAD_JS_FRAMEWORK_ERROR, instanceId); + } + + return ret; +} + +} // namespace + +// ----------------------- +// Start QjsEngineInstance +// ----------------------- +void QjsEngineInstance::FlushCommandBuffer(void* context, const std::string& command) +{ + LOGI("flush command buffer"); + auto ctx = static_cast(context); + int32_t result = CallEvalBuf(ctx, command.c_str(), command.size(), "", JS_EVAL_TYPE_GLOBAL, instanceId_); + if (JS_CALL_FAIL == result) { + LOGE("failed to flush command buffer"); + } +} +bool QjsEngineInstance::InitJsEnv(JSRuntime* runtime, JSContext* context) +{ + LOGI("InitJsEnv"); + if (runtime == nullptr) { + runtime = JS_NewRuntime(); + } + if (runtime_ != nullptr) { + JS_FreeRuntime(runtime_); + } + runtime_ = runtime; + if (runtime_ == nullptr) { + LOGE("Qjs cannot allocate JS runtime"); + EventReport::SendJsException(JsExcepType::JS_ENGINE_INIT_ERR); + return false; + } + + if (context == nullptr) { + context = JS_NewContext(runtime_); + } + if (context_ != nullptr) { + JS_FreeContext(context_); + } + context_ = context; + if (!InitJsContext(context_, MAX_STACK_SIZE, instanceId_, this)) { + LOGE("Qjs cannot allocate JS context"); + EventReport::SendJsException(JsExcepType::JS_ENGINE_INIT_ERR); + JS_FreeRuntime(runtime_); + return false; + } + + auto groupJsBridge = AceType::DynamicCast(frontendDelegate_->GetGroupJsBridge()); + if (!groupJsBridge || JS_CALL_FAIL == groupJsBridge->InitializeGroupJsBridge(context_)) { + LOGE("Qjs Initialize GroupJsBridge failed!"); + EventReport::SendJsException(JsExcepType::JS_ENGINE_INIT_ERR); + return false; + } + + JSValue retVal = LoadJsFramework(GetQjsContext(), js_framework, js_framework_size, instanceId_); + bool result = JS_IsException(retVal) ? false : true; + if (context) { + JS_FreeValue(context, retVal); + } + + std::string intlHook(" \ + globalThis.Intl = { \ + NumberFormat: function() { \ + delete globalThis.Intl; \ + ace.loadIntl(); \ + return Intl.NumberFormat(...arguments); \ + }, \ + DateTimeFormat: function() { \ + delete globalThis.Intl; \ + ace.loadIntl(); \ + return Intl.DateTimeFormat(...arguments); \ + }, \ + RelativeTimeFormat: function() { \ + delete globalThis.Intl; \ + ace.loadIntl(); \ + return new Intl.RelativeTimeFormat(...arguments);\ + } \ + } \ + "); + + if (JS_CALL_FAIL == + CallEvalBuf(context, intlHook.c_str(), intlHook.size(), "", JS_EVAL_TYPE_GLOBAL, instanceId_)) { + LOGE("Intl init failed!"); + } + + return result; +} + +void QjsEngineInstance::AddAnimationBridge(const WeakPtr& value) +{ + animations_.emplace_back(value); +} + +void QjsEngineInstance::RemoveAnimationBridge() +{ + for (auto it = animations_.begin(); it != animations_.end();) { + auto ref = it->Upgrade(); + if (!ref) { + it = animations_.erase(it); + } else { + ++it; + } + } +} + +void QjsEngineInstance::FreeGroupJsBridge() +{ + // free JSValue reference of channel bridge and animation bridge + if (!frontendDelegate_) { + LOGE("frontend delegate is null."); + return; + } + + auto groupJsBridge = AceType::DynamicCast(frontendDelegate_->GetGroupJsBridge()); + if (!groupJsBridge) { + LOGE("group js bridge is null."); + return; + } + + groupJsBridge->Uninitialize(); +} + +void QjsEngineInstance::FreeAnimationBridges() +{ + for (auto& weak : animations_) { + auto ref = weak.Upgrade(); + if (!ref) { + continue; + } + ref->Uninitialize(); + } + animations_.clear(); +} + +QjsEngineInstance::~QjsEngineInstance() +{ + FreeGroupJsBridge(); + FreeAnimationBridges(); + + if (context_) { + JS_FreeContext(context_); + } + if (runtime_) { + JS_FreeRuntime(runtime_); + } +} + +JSValue QjsEngineInstance::FireJsEvent(const std::string& param) +{ + LOGI("FireJsEvent"); + JSContext* ctx = GetQjsContext(); + ACE_DCHECK(ctx); + QjsHandleScope handleScope(ctx); + JSValue globalObj = JS_GetGlobalObject(ctx); + JSValue callJsFunc = QjsUtils::GetPropertyStr(ctx, globalObj, "callJS"); + if (!JS_IsFunction(ctx, callJsFunc)) { + LOGE("cannot find 'callJS' function from global object, this should not happen!"); + JS_FreeValue(ctx, globalObj); + return JS_UNDEFINED; + } + + if (!runningPage_) { + LOGE("runningPage_ is null!"); + JS_FreeValue(ctx, globalObj); + return JS_UNDEFINED; + } + JSValueConst argv[] = { + QjsUtils::NewString(ctx, std::to_string(runningPage_->GetPageId()).c_str()), + QjsUtils::ParseJSON(ctx, param.c_str(), param.size(), nullptr), + }; + + JSValue retVal = JS_Call(ctx, callJsFunc, JS_UNDEFINED, countof(argv), argv); + + JS_FreeValue(ctx, globalObj); + + // It is up to the caller to check this value. No exception checks here. + return retVal; +} + +void QjsEngineInstance::CallJs(const std::string& callbackId, const std::string& args, bool keepAlive, bool isGlobal) +{ + ACE_SCOPED_TRACE("QjsEngineInstance::CallJS"); + + std::string keepAliveStr = keepAlive ? "true" : "false"; + std::string callBuff = std::string("[{\"args\": [\"") + .append(callbackId) + .append("\",") + .append(args) + .append(",") + .append(keepAliveStr) + .append("], \"method\":\"callback\"}]"); + LOGD("CallJs string: %{private}s", callBuff.c_str()); + + JSContext* ctx = GetQjsContext(); + QjsHandleScope handleScope(ctx); + JSValue globalObj = JS_GetGlobalObject(ctx); + JSValue callJsFunc = QjsUtils::GetPropertyStr(ctx, globalObj, "callJS"); + if (!JS_IsFunction(ctx, callJsFunc)) { + LOGE("cannot find 'callJS' function from global object, this should not happen!"); + JS_FreeValue(ctx, globalObj); + return; + } + + int32_t instanceId = isGlobal ? DEFAULT_APP_ID : stagingPage_->GetPageId(); + JSValueConst argv[] = { + QjsUtils::NewString(ctx, std::to_string(instanceId).c_str()), + QjsUtils::ParseJSON(ctx, callBuff.c_str(), callBuff.size(), nullptr), + }; + QjsUtils::Call(ctx, callJsFunc, JS_UNDEFINED, countof(argv), argv); + + JS_FreeValue(ctx, globalObj); +} + +void QjsEngineInstance::CallAnimationFinishJs(JSValue animationContext) +{ + JSContext* ctx = GetQjsContext(); + QjsHandleScope handleScope(ctx); + auto proto = QjsUtils::GetPropertyStr(ctx, animationContext, "onfinish"); + if (!JS_IsFunction(ctx, proto)) { + LOGD("cannot find 'CallAnimationFinishJs' function from global object, this should not happen!"); + return; + } + LOGD("animation onfinish event call"); + QjsUtils::Call(ctx, proto, animationContext, 0, {}); +} + +void QjsEngineInstance::CallAnimationCancelJs(JSValue animationContext) +{ + JSContext* ctx = GetQjsContext(); + QjsHandleScope handleScope(ctx); + auto proto = QjsUtils::GetPropertyStr(ctx, animationContext, "oncancel"); + if (!JS_IsFunction(ctx, proto)) { + return; + } + + LOGD("animation oncancel event call"); + QjsUtils::Call(ctx, proto, animationContext, 0, {}); +} + +void QjsEngineInstance::CallAnimationRepeatJs(JSValue animationContext) +{ + JSContext* ctx = GetQjsContext(); + QjsHandleScope handleScope(ctx); + auto proto = QjsUtils::GetPropertyStr(ctx, animationContext, "onrepeat"); + if (!JS_IsFunction(ctx, proto)) { + return; + } + + LOGD("animation onrepeat event call"); + QjsUtils::Call(ctx, proto, animationContext, 0, {}); +} + +// ----------------------- +// Start QjsEngine +// ----------------------- +bool QjsEngine::Initialize(const RefPtr& delegate) +{ + ACE_SCOPED_TRACE("QjsEngine::Initialize"); + LOGI("Initialize"); + + JSRuntime* runtime = nullptr; + JSContext* context = nullptr; + + // put JS_NewContext as early as possible to make stack_top in context + // closer to the top stack frame pointer of JS thread. + runtime = JS_NewRuntime(); + if (runtime != nullptr) { + context = JS_NewContext(runtime); + } + + LOGD("QjsEngine initialize"); + +#ifdef ENABLE_JS_DEBUG + LOGI("QjsEngine debug mode"); + std::string instanceName = GetInstanceName(); + if (instanceName.empty()) { + LOGE("GetInstanceName fail, %s", instanceName.c_str()); + return false; + } + constexpr int32_t COMPONENT_NAME_MAX_LEN = 100; + char componentName[COMPONENT_NAME_MAX_LEN]; + if (!DBG_CopyComponentNameFromAce(instanceName.c_str(), componentName, COMPONENT_NAME_MAX_LEN)) { + LOGE("GetInstanceName strcpy_s fail"); + return false; + } + DBG_SetComponentName(componentName, strlen(componentName)); +#endif + nativeEngine_ = new QuickJSNativeEngine(runtime, context); + ACE_DCHECK(delegate); + delegate->AddTaskObserver([nativeEngine = nativeEngine_](){ + nativeEngine->Loop(); + }); + + engineInstance_ = AceType::MakeRefPtr(delegate, instanceId_); + return engineInstance_->InitJsEnv(runtime, context); +} + +QjsEngine::~QjsEngine() +{ + engineInstance_->GetDelegate()->RemoveTaskObserver(); + if (nativeEngine_ != nullptr) { + delete nativeEngine_; + } + ACE_DCHECK(engineInstance_); + JS_RunGC(engineInstance_->GetQjsRuntime()); +} + +void QjsEngine::GetLoadOptions(std::string& optionStr, bool isMainPage, const RefPtr& page) +{ + auto renderOption = JsonUtil::Create(true); + auto mediaQuery = engineInstance_->GetDelegate()->GetMediaQueryInfoInstance(); + if (mediaQuery) { + int32_t width = SystemProperties::GetWidth(); + int32_t height = SystemProperties::GetHeight(); + double aspectRatio = (height != 0) ? (1.0 * width / height) : 1.0; + renderOption->Put("width", width); + renderOption->Put("height", height); + renderOption->Put("aspectRatio", aspectRatio); + renderOption->Put("isInit", mediaQuery->GetIsInit()); + renderOption->Put("deviceType", mediaQuery->GetDeviceType().c_str()); + renderOption->Put("deviceWidth", SystemProperties::GetDeviceWidth()); + renderOption->Put("deviceHeight", SystemProperties::GetDeviceHeight()); + renderOption->Put("orientation", mediaQuery->GetOrientation().c_str()); + renderOption->Put("roundScreen", SystemProperties::GetIsScreenRound()); + renderOption->Put("resolution", SystemProperties::GetResolution()); + renderOption->Put("bundleUrl", page->GetUrl().c_str()); + } + renderOption->Put("appInstanceId", "10002"); + renderOption->Put("pcPreview", PC_PREVIEW); + renderOption->Put("packageName", engineInstance_->GetDelegate()->GetAppID().c_str()); + + // get resourceConfig + engineInstance_->GetDelegate()->GetResourceConfiguration(renderOption); + + // get i18n message + std::string language = AceApplicationInfo::GetInstance().GetLanguage(); + std::string region = AceApplicationInfo::GetInstance().GetCountryOrRegion(); + engineInstance_->GetDelegate()->GetI18nData(renderOption); + std::string local = language + "_" + region; + renderOption->Put("language", local.c_str()); + + if (isMainPage) { + std::string code; + std::string appMap; + if (engineInstance_->GetDelegate()->GetAssetContent("app.js.map", appMap)) { + page->SetAppMap(appMap); + } else { + LOGW("sourceMap of app.js is missing!"); + } + + if (engineInstance_->GetDelegate()->GetAssetContent("app.js", code)) { + renderOption->Put("appCreate", "true"); + renderOption->Put("appCode", code.c_str()); + } else { + LOGE("app.js is missing!"); + } + } else { + renderOption->Put("appCreate", "false"); + } + optionStr = renderOption->ToString(); +} + +void QjsEngine::LoadJs(const std::string& url, const RefPtr& page, bool isMainPage) +{ + LOGI("QjsEngine LoadJs"); + ACE_SCOPED_TRACE("QjsEngine::LoadJs"); + ACE_DCHECK(engineInstance_); + + engineInstance_->SetStagingPage(page); + if (isMainPage) { + ACE_DCHECK(!engineInstance_->GetRunningPage()); + engineInstance_->SetRunningPage(page); + } + JSContext* ctx = engineInstance_->GetQjsContext(); + + // Create a stack-allocated handle scope. + QjsHandleScope handleScope(ctx); + + // Memorize the context that this JSContext is working with. + JS_SetContextOpaque(ctx, reinterpret_cast(AceType::RawPtr(engineInstance_))); + + JSValue globalObj = JS_GetGlobalObject(ctx); + JSValue createInstanceFunc = QjsUtils::GetPropertyStr(ctx, globalObj, "createInstance"); + if (!JS_IsFunction(ctx, createInstanceFunc)) { + LOGD("createInstance is not found, cannot load js!"); + JS_FreeValue(ctx, globalObj); + return; + } +#ifdef ENABLE_JS_DEBUG + std::string jsContent; + if (!engineInstance_->GetDelegate()->GetAssetContent(url, jsContent)) { + LOGE("js file load failed!"); + JS_FreeValue(ctx, globalObj); + return; + } +#else + JSValue jsCode = JS_UNDEFINED; + auto pos = url.rfind(JS_EXT); + if (pos != std::string::npos && pos == url.length() - (sizeof(JS_EXT) - 1)) { + std::vector binContent; + if (engineInstance_->GetDelegate()->GetAssetContent(url.substr(0, pos) + BIN_EXT, binContent)) { + jsCode = + CallReadObject(ctx, binContent.data(), binContent.size(), false, instanceId_, page->GetUrl().c_str()); + if (!JS_IsException(jsCode)) { + JS_FreeValue(ctx, jsCode); + jsCode = QjsUtils::GetPropertyStr(ctx, globalObj, JS_MAIN_ENTRY); + JS_SetPropertyStr(ctx, globalObj, JS_MAIN_ENTRY, JS_UNDEFINED); + } else { + QjsUtils::JsStdDumpErrorAce(ctx, JsErrorType::READ_OBJECT_ERROR, instanceId_, page->GetUrl().c_str(), + page); + } + } + } + + if (JS_IsFunction(ctx, jsCode)) { + LOGI("Using binary source code"); + } else { + std::string jsContent; + if (!engineInstance_->GetDelegate()->GetAssetContent(url, jsContent)) { + LOGE("js file load failed!"); + JS_FreeValue(ctx, globalObj); + return; + } + jsCode = QjsUtils::NewStringLen(ctx, jsContent.c_str(), jsContent.size()); + } +#endif + std::string pageMap; + if (engineInstance_->GetDelegate()->GetAssetContent(url + MAP_EXT, pageMap)) { + page->SetPageMap(pageMap); + } else { + LOGW("source map of page load failed!"); + } + std::string jsonData = page->GetPageParams(); + if (jsonData.empty()) { + jsonData = "{}"; + } + std::string optionStr; + GetLoadOptions(optionStr, isMainPage, page); + JSValue instanceId = QjsUtils::NewString(ctx, std::to_string(page->GetPageId()).c_str()); + JSValue renderOptions = QjsUtils::ParseJSON(ctx, optionStr.c_str(), optionStr.size(), nullptr); + JSValue data = QjsUtils::ParseJSON(ctx, jsonData.c_str(), jsonData.size(), nullptr); + JSValue info = QjsUtils::NewObject(ctx); +#ifdef ENABLE_JS_DEBUG + JSValue jsSrc = QjsUtils::NewStringLen(ctx, jsContent.c_str(), jsContent.length()); + JSValueConst argv[] = { instanceId, jsSrc, renderOptions, data, info }; +#else + JSValueConst argv[] = { instanceId, jsCode, renderOptions, data, info }; +#endif + JSValue retVal = QjsUtils::Call(ctx, createInstanceFunc, JS_UNDEFINED, countof(argv), argv); + + if (JS_IsException(retVal)) { + LOGE("JS framework load js bundle failed!"); + JS_FreeValue(ctx, globalObj); + QjsUtils::JsStdDumpErrorAce(ctx, JsErrorType::LOAD_JS_BUNDLE_ERROR, instanceId_, page->GetUrl().c_str(), page); + return; + } + + JS_FreeValue(ctx, retVal); + JS_FreeValue(ctx, globalObj); + js_std_loop(ctx); +} + +void QjsEngine::UpdateRunningPage(const RefPtr& page) +{ + ACE_DCHECK(engineInstance_); + engineInstance_->SetRunningPage(page); +} + +void QjsEngine::UpdateStagingPage(const RefPtr& page) +{ + ACE_DCHECK(engineInstance_); + engineInstance_->SetStagingPage(page); +} + +void QjsEngine::ResetStagingPage() +{ + ACE_DCHECK(engineInstance_); + auto runningPage = engineInstance_->GetRunningPage(); + engineInstance_->ResetStagingPage(runningPage); +} + +void QjsEngine::DestroyPageInstance(int32_t pageId) +{ + LOGI("QjsEngine DestroyPageInstance"); + JSContext* ctx = engineInstance_->GetQjsContext(); + ACE_DCHECK(ctx); + + QjsHandleScope handleScope(ctx); + JSValue globalObj = JS_GetGlobalObject(ctx); + JSValue destroyInstanceFunc = QjsUtils::GetPropertyStr(ctx, globalObj, "destroyInstance"); + if (!JS_IsFunction(ctx, destroyInstanceFunc)) { + LOGE("destroyInstance is not found, cannot destroy page instance!"); + JS_FreeValue(ctx, globalObj); + return; + } + + JSValue instanceId = QjsUtils::NewString(ctx, std::to_string(pageId).c_str()); + JSValueConst argv[] = { instanceId }; + JSValue retVal = QjsUtils::Call(ctx, destroyInstanceFunc, JS_UNDEFINED, countof(argv), argv); + + if (JS_IsException(retVal)) { + LOGE("Qjs DestroyPageInstance FAILED!"); + JS_FreeValue(ctx, globalObj); + + auto page = engineInstance_->GetDelegate()->GetPage(pageId); + if (page) { + QjsUtils::JsStdDumpErrorAce(ctx, JsErrorType::DESTROY_PAGE_ERROR, instanceId_, page->GetUrl().c_str(), + page); + } else { + QjsUtils::JsStdDumpErrorAce(ctx, JsErrorType::DESTROY_PAGE_ERROR, instanceId_); + } + return; + } + + RunGarbageCollection(); + JS_FreeValue(ctx, globalObj); +} + +void QjsEngine::DestroyApplication(const std::string& packageName) +{ + LOGI("DestroyApplication: destroy app instance from jsfwk, packageName %{public}s", packageName.c_str()); + JSContext* ctx = engineInstance_->GetQjsContext(); + ACE_DCHECK(ctx); + + QjsHandleScope handleScope(ctx); + JSValue globalObj = JS_GetGlobalObject(ctx); + JSValue appDestroyFunc = QjsUtils::GetPropertyStr(ctx, globalObj, "appDestroy"); + if (!JS_IsFunction(ctx, appDestroyFunc)) { + LOGE("appDestroyFunc is not found, cannot destroy page instance!"); + JS_FreeValue(ctx, globalObj); + return; + } + + JSValue name = QjsUtils::NewString(ctx, packageName.c_str()); + JSValueConst argv[] = { name }; + JSValue retVal = QjsUtils::Call(ctx, appDestroyFunc, JS_UNDEFINED, countof(argv), argv); + + if (JS_IsException(retVal)) { + LOGE("Qjs appDestroyFunc FAILED!"); + QjsUtils::JsStdDumpErrorAce(ctx, JsErrorType::DESTROY_APP_ERROR, instanceId_, nullptr, + engineInstance_->GetRunningPage()); + } + + JS_FreeValue(ctx, globalObj); +} + +void QjsEngine::TimerCallback(const std::string& callbackId, const std::string& delay, bool isInterval) +{ + if (isInterval) { + engineInstance_->CallJs(callbackId, std::string("{}"), true, true); + engineInstance_->GetDelegate()->WaitTimer(callbackId, delay, isInterval, false); + } else { + engineInstance_->CallJs(callbackId, std::string("{}"), false, true); + engineInstance_->GetDelegate()->ClearTimer(callbackId); + } +} + +void QjsEngine::MediaQueryCallback(const std::string& callbackId, const std::string& args) +{ + if (engineInstance_) { + engineInstance_->CallJs(callbackId.c_str(), args.c_str(), true, false); + } +} + +void QjsEngine::RequestAnimationCallback(const std::string& callbackId, uint64_t timeStamp) +{ + if (engineInstance_) { + engineInstance_->CallJs(callbackId.c_str(), std::to_string(timeStamp).c_str(), false, true); + engineInstance_->GetDelegate()->CancelAnimationFrame(callbackId); + } +} + +void QjsEngine::JsCallback(const std::string& callbackId, const std::string& args) +{ + if (engineInstance_) { + engineInstance_->CallJs(callbackId.c_str(), args.c_str(), true, false); + } +} + +void QjsEngine::FireAsyncEvent(const std::string& eventId, const std::string& param) +{ + std::string callBuf = std::string("[{\"args\": [\"") + .append(eventId) + .append("\",") + .append(param) + .append("], \"method\":\"fireEvent\"}]"); + LOGD("FireAsyncEvent string: %{private}s", callBuf.c_str()); + + ACE_DCHECK(engineInstance_); + JSValue cppToJsRet = engineInstance_->FireJsEvent(callBuf); + if (JS_IsException(cppToJsRet)) { + LOGE("Qjs FireAsyncEvent FAILED !! jsCall: %{private}s", callBuf.c_str()); + QjsUtils::JsStdDumpErrorAce(engineInstance_->GetQjsContext(), JsErrorType::FIRE_EVENT_ERROR, instanceId_, + nullptr, engineInstance_->GetRunningPage()); + } + JS_FreeValue(engineInstance_->GetQjsContext(), cppToJsRet); +} + +void QjsEngine::FireSyncEvent(const std::string& eventId, const std::string& param) +{ + std::string callBuf = std::string("[{\"args\": [\"") + .append(eventId) + .append("\",") + .append(param) + .append("], \"method\":\"fireEventSync\"}]"); + LOGD("FireSyncEvent string: %{private}s", callBuf.c_str()); + + ACE_DCHECK(engineInstance_); + JSValue cppToJsRet = engineInstance_->FireJsEvent(callBuf.c_str()); + if (JS_IsException(cppToJsRet)) { + LOGE("Qjs FireSyncEvent FAILED !! jsCall: %{private}s", callBuf.c_str()); + QjsUtils::JsStdDumpErrorAce(engineInstance_->GetQjsContext(), JsErrorType::FIRE_EVENT_ERROR, instanceId_, + nullptr, engineInstance_->GetRunningPage()); + } + JS_FreeValue(engineInstance_->GetQjsContext(), cppToJsRet); +} + +void QjsEngine::SetJsMessageDispatcher(const RefPtr& dispatcher) +{ + ACE_DCHECK(engineInstance_); + engineInstance_->SetJsMessageDispatcher(dispatcher); +} + +void QjsEngine::RunGarbageCollection() +{ + if (engineInstance_ && engineInstance_->GetQjsRuntime()) { + JS_RunGC(engineInstance_->GetQjsRuntime()); + } +} + +RefPtr QjsEngine::GetGroupJsBridge() +{ + return AceType::MakeRefPtr(); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/js_frontend/engine/quickjs/qjs_engine.h b/frameworks/bridge/js_frontend/engine/quickjs/qjs_engine.h new file mode 100644 index 00000000..bdc983e6 --- /dev/null +++ b/frameworks/bridge/js_frontend/engine/quickjs/qjs_engine.h @@ -0,0 +1,222 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_QUICKJS_QJS_ENGINE_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_QUICKJS_QJS_ENGINE_H + +#include +#include +#include + +#include "third_party/quickjs/quickjs.h" + +#include "base/memory/ace_type.h" +#include "base/utils/noncopyable.h" +#include "core/common/ace_page.h" +#include "core/common/js_message_dispatcher.h" +#include "frameworks/bridge/js_frontend/engine/common/js_engine.h" +#include "native_engine/impl/quickjs/quickjs_native_engine.h" +#include "frameworks/bridge/js_frontend/engine/quickjs/animation_bridge.h" + +namespace OHOS::Ace::Framework { + +// Each JsFrontend holds only one QjsEngineInstance. +class QjsEngineInstance final : public AceType, public JsEngineInstance { +public: + explicit QjsEngineInstance(const RefPtr& delegate, int32_t instanceId) + : frontendDelegate_(delegate), instanceId_(instanceId) + {} + ~QjsEngineInstance() override; + + void FlushCommandBuffer(void* context, const std::string& command) override; + + bool InitJsEnv(JSRuntime* runtime, JSContext* context); + + JSRuntime* GetQjsRuntime() const + { + return runtime_; + } + + JSContext* GetQjsContext() const + { + return context_; + } + + void CallJs(const std::string& callbackId, const std::string& args, bool keepAlive = false, bool isGlobal = false); + + void CallAnimationFinishJs(JSValue animationContext); + void CallAnimationCancelJs(JSValue animationContext); + void CallAnimationRepeatJs(JSValue animationContext); + + JSValue FireJsEvent(const std::string& param); + + void AddAnimationBridge(const WeakPtr& value); + void RemoveAnimationBridge(); + void FreeAnimationBridges(); + void FreeGroupJsBridge(); + + void SetRunningPage(const RefPtr& page) + { + std::lock_guard lock(mutex_); + runningPage_ = page; + } + + RefPtr GetRunningPage() const + { + std::lock_guard lock(mutex_); + return runningPage_; + } + + void SetStagingPage(const RefPtr& page) + { + std::lock_guard lock(mutex_); + stagingPage_ = page; + } + + RefPtr GetStagingPage() const + { + std::lock_guard lock(mutex_); + return stagingPage_; + } + + void ResetStagingPage(const RefPtr& page) + { + std::lock_guard lock(mutex_); + stagingPage_ = page; + } + + void SetJsMessageDispatcher(const RefPtr& dispatcher) + { + dispatcher_ = dispatcher; + } + + RefPtr GetDelegate() const + { + return frontendDelegate_; + } + + bool CallPlatformFunction(const std::string& channel, std::vector&& data, int32_t id) + { + auto dispatcher = dispatcher_.Upgrade(); + if (dispatcher) { + dispatcher->Dispatch(channel, std::move(data), id); + return true; + } else { + LOGW("Dispatcher Upgrade fail when dispatch request mesaage to platform"); + return false; + } + } + + bool PluginErrorCallback(int32_t callbackId, int32_t errorCode, std::string&& errorMessage) + { + auto dispatcher = dispatcher_.Upgrade(); + if (dispatcher) { + dispatcher->DispatchPluginError(callbackId, errorCode, std::move(errorMessage)); + return true; + } else { + LOGW("Dispatcher Upgrade fail when dispatch error mesaage to platform"); + return false; + } + } + + void ChangeLocale(const std::string& language, const std::string& countryOrRegion) + { + if (frontendDelegate_) { + frontendDelegate_->ChangeLocale(language, countryOrRegion); + } + } + +private: + JSRuntime* runtime_ = nullptr; + JSContext* context_ = nullptr; + RefPtr frontendDelegate_; + int32_t instanceId_; + std::vector> animations_; + + // runningPage_ is the page that is loaded and rendered successfully, while stagingPage_ is to + // handle all page routing situation, which include two stages: + // - Loading stage: when a new page is loaded by qjs engine but not rendered, stagingPage_ point to + // a new created page, which is different with runningPage_, the DOM build operations should call + // this one, such as domCreateBody, domAddElement. + // - Running stage: If the stagingPage_ rendered successfully, the runningPage_ will update to stagingPage_. + // If the stagingPage_ render failed, it will reset to runningPage_. So in running stage, runningPage_ + // and stagingPage_ point to the same page. But it's better to use runningPage_ in dom update tasks, + // such as removeElement, updateElementAttrs and updateElementStyles. + RefPtr runningPage_; + RefPtr stagingPage_; + + WeakPtr dispatcher_; + mutable std::mutex mutex_; + + ACE_DISALLOW_COPY_AND_MOVE(QjsEngineInstance); +}; + +class QjsEngine : public JsEngine { +public: + explicit QjsEngine(int32_t instanceId) : instanceId_(instanceId) {}; + ~QjsEngine() override; + + bool Initialize(const RefPtr& delegate) override; + + // Load and initialize a JS bundle into the JS Framework + void LoadJs(const std::string& url, const RefPtr& page, bool isMainPage) override; + + // Update running page + void UpdateRunningPage(const RefPtr& page) override; + + // Update staging page + void UpdateStagingPage(const RefPtr& page) override; + + // Reset staging page + void ResetStagingPage() override; + + void SetJsMessageDispatcher(const RefPtr& dispatcher) override; + + // Fire AsyncEvent on JS + void FireAsyncEvent(const std::string& eventId, const std::string& param) override; + + // Fire SyncEvent on JS + void FireSyncEvent(const std::string& eventId, const std::string& param) override; + + // Timer callback + void TimerCallback(const std::string& callbackId, const std::string& delay, bool isInterval) override; + + // destroy page instance + void DestroyPageInstance(int32_t pageId) override; + + virtual void MediaQueryCallback(const std::string& callbackId, const std::string& args) override; + + virtual void RequestAnimationCallback(const std::string& callbackId, uint64_t timeStamp) override; + + virtual void JsCallback(const std::string& callbackId, const std::string& args) override; + + // destroy application instance according packageName + void DestroyApplication(const std::string& packageName) override; + + void RunGarbageCollection() override; + + RefPtr GetGroupJsBridge() override; + +private: + void GetLoadOptions(std::string& optionStr, bool isMainPage, const RefPtr& page); + RefPtr engineInstance_; + int32_t instanceId_; + QuickJSNativeEngine* nativeEngine_ = nullptr; + ACE_DISALLOW_COPY_AND_MOVE(QjsEngine); +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_QUICKJS_QJS_ENGINE_H diff --git a/frameworks/bridge/js_frontend/engine/quickjs/qjs_engine_loader.cpp b/frameworks/bridge/js_frontend/engine/quickjs/qjs_engine_loader.cpp new file mode 100644 index 00000000..87677118 --- /dev/null +++ b/frameworks/bridge/js_frontend/engine/quickjs/qjs_engine_loader.cpp @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/js_frontend/engine/quickjs/qjs_engine_loader.h" + +#include "base/utils/macros.h" +#include "frameworks/bridge/js_frontend/engine/quickjs/canvas_bridge.h" +#include "frameworks/bridge/js_frontend/engine/quickjs/qjs_engine.h" + +namespace OHOS::Ace::Framework { + +QjsEngineLoader::QjsEngineLoader() = default; +QjsEngineLoader::~QjsEngineLoader() = default; + +RefPtr QjsEngineLoader::CreateJsEngine(int32_t instanceId) const +{ + return AceType::MakeRefPtr(instanceId); +} + +RefPtr QjsEngineLoader::CreateCanvasBridge() const +{ + return AceType::MakeRefPtr(); +} + +#if defined(BUILT_IN_JS_ENGINE) +JsEngineLoader& JsEngineLoader::Get() +{ + return QjsEngineLoader::GetInstance(); +} +#else +extern "C" ACE_EXPORT void* OHOS_ACE_GetJsEngineLoader() +{ + return &QjsEngineLoader::GetInstance(); +} +#endif + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/js_frontend/engine/quickjs/qjs_engine_loader.h b/frameworks/bridge/js_frontend/engine/quickjs/qjs_engine_loader.h new file mode 100644 index 00000000..d4024346 --- /dev/null +++ b/frameworks/bridge/js_frontend/engine/quickjs/qjs_engine_loader.h @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_QUICKJS_QJS_ENGINE_LOADER_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_QUICKJS_QJS_ENGINE_LOADER_H + +#include "base/utils/singleton.h" +#include "frameworks/bridge/js_frontend/engine/common/js_engine_loader.h" + +namespace OHOS::Ace::Framework { + +class QjsEngineLoader : public JsEngineLoader, public Singleton { + DECLARE_SINGLETON(QjsEngineLoader); + +public: + RefPtr CreateJsEngine(int32_t instanceId) const final; + RefPtr CreateCanvasBridge() const final; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_QUICKJS_QJS_ENGINE_LOADER_H diff --git a/frameworks/bridge/js_frontend/engine/quickjs/qjs_group_js_bridge.cpp b/frameworks/bridge/js_frontend/engine/quickjs/qjs_group_js_bridge.cpp new file mode 100644 index 00000000..8ef46c9d --- /dev/null +++ b/frameworks/bridge/js_frontend/engine/quickjs/qjs_group_js_bridge.cpp @@ -0,0 +1,568 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/js_frontend/engine/quickjs/qjs_group_js_bridge.h" + +#include "base/json/json_util.h" +#include "base/log/ace_trace.h" +#include "base/log/event_report.h" +#include "base/log/log.h" +#include "frameworks/bridge/codec/function_call.h" +#include "frameworks/bridge/codec/standard_function_codec.h" +#include "frameworks/bridge/js_frontend/engine/common/js_constants.h" +#include "frameworks/bridge/js_frontend/engine/quickjs/qjs_engine.h" + +namespace OHOS::Ace::Framework { +namespace { + +const int32_t PLUGIN_REQUEST_MIN_ARGC_NUM = 4; +const int32_t PLUGIN_REQUEST_ARG_RESOLVE_INDEX = 0; +const int32_t PLUGIN_REQUEST_ARG_REJECT_INDEX = 1; +const int32_t PLUGIN_REQUEST_ARG_GROUP_NAME_INDEX = 2; +const int32_t PLUGIN_REQUEST_ARG_FUNCTION_NAME_INDEX = 3; +const int32_t PLUGIN_REQUEST_ARG_APP_PARAMS_INDEX = 4; + +} // namespace + +int32_t QuickJsGroupJsBridge::InitializeGroupJsBridge(JSContext* jsContext) +{ + if (jsContext == nullptr) { + LOGE("jsContext is null"); + EventReport::SendAPIChannelException(APIChannelExcepType::JS_BRIDGE_INIT_ERR); + return JS_CALL_FAIL; + } + + context_ = jsContext; + + if (JS_CALL_SUCCESS != LoadJsBridgeFunction()) { + LOGE("Load JSBridge function failed!"); + EventReport::SendAPIChannelException(APIChannelExcepType::JS_BRIDGE_INIT_ERR); + return JS_CALL_FAIL; + } + + eventCallBackFuncs_.clear(); + moduleCallBackFuncs_.clear(); + requestIdCallbackIdMap_.clear(); + pendingCallbackId_ = 1; + + return JS_CALL_SUCCESS; +} + +void QuickJsGroupJsBridge::Uninitialize() +{ + if (!context_) { + LOGE("qjs context is null"); + return; + } + + for (auto& cb : eventCallBackFuncs_) { + JS_FreeValue(context_, cb.second); + } + eventCallBackFuncs_.clear(); + + for (auto& cb : moduleCallBackFuncs_) { + JS_FreeValue(context_, cb.second.resolveCallback); + JS_FreeValue(context_, cb.second.rejectCallback); + } + moduleCallBackFuncs_.clear(); +} + +int32_t QuickJsGroupJsBridge::LoadJsBridgeFunction() +{ + JSValue group = JS_NewObject(context_); + // 3 means parameter number + int32_t ret = JS_SetPropertyStr( + context_, group, "sendGroupMessage", JS_NewCFunction(context_, ProcessJsRequest, "sendGroupMessage", 3)); + if (ret < 0) { + LOGE("set sendGroupMessage mapping failed!"); + EventReport::SendAPIChannelException(APIChannelExcepType::SET_FUNCTION_ERR); + JS_FreeValue(context_, group); + return JS_CALL_FAIL; + } + + JSValue globalObj = JS_GetGlobalObject(context_); + ret = JS_SetPropertyStr(context_, globalObj, "group", group); + if (ret < 0) { + LOGE("set globalObj group mapping failed!"); + EventReport::SendAPIChannelException(APIChannelExcepType::SET_FUNCTION_ERR); + JS_FreeValue(context_, group); + JS_FreeValue(context_, globalObj); + return JS_CALL_FAIL; + } + + JS_FreeValue(context_, globalObj); + return JS_CALL_SUCCESS; +} + +void QuickJsGroupJsBridge::LoadPluginJsCode(std::string&& jsCode) +{ + LOGI("Load Plugin Js Code, code len:%{public}d", static_cast(jsCode.length())); + if (JS_CALL_SUCCESS != CallEvalBuf(context_, jsCode.c_str(), jsCode.length(), "", JS_EVAL_TYPE_MODULE)) { + LOGE("CallEvalBuf failed!"); + } +} + +void QuickJsGroupJsBridge::QuickJsPrintException(JSContext* context, int32_t expLine, int32_t line) +{ + std::string expMsg = "Unknown"; + QjsHandleScope handleScope(context); + JSValue jsExp = JS_GetException(context); + JSValue jsMsg = QjsUtils::GetPropertyStr(context, jsExp, "message"); + if (JS_IsString(jsMsg)) { + size_t msgLen = 0; + const char* msg = JS_ToCStringLen(context, &msgLen, jsMsg); + if (msg == NULL) { + JS_FreeValue(context, JS_GetException(context)); + } else { + expMsg.assign(msg, msgLen); + JS_FreeCString(context, msg); + } + } + + JS_FreeValue(context, jsExp); + + LOGE("Exception at line %{private}d: %{private}s at line %{private}d", line, expMsg.c_str(), expLine); +} + +bool QuickJsGroupJsBridge::QuickJsCheckException(JSContext* context, JSValueConst object, int32_t line) +{ + if (JS_IsException(object)) { + QuickJsPrintException(context, JS_VALUE_GET_INT(object), line); + return true; + } + return false; +} + +#define QUICK_JS_PRINT_EXCEPTION(ctx) QuickJsGroupJsBridge::QuickJsPrintException(ctx, 0, __LINE__) +#define QUICK_JS_CHECK_EXCEPTION(ctx, obj) QuickJsGroupJsBridge::QuickJsCheckException(ctx, obj, __LINE__) + +int32_t QuickJsGroupJsBridge::QuickJsGetLengthIfObjectIsArray(JSContext* ctx, JSValueConst obj) +{ + int32_t result = JS_IsArray(ctx, obj); + if (result < 0) { + QUICK_JS_PRINT_EXCEPTION(ctx); + return -1; + } + if (!result) { + return -1; + } + QjsHandleScope handleScope(ctx); + JSValue valLen = QjsUtils::GetPropertyStr(ctx, obj, "length"); + int32_t length = -1; + if ((JS_IsInteger(valLen)) && (JS_ToInt32(ctx, &length, valLen)) < 0) { + QUICK_JS_PRINT_EXCEPTION(ctx); + return -1; + } + return length; +} + +std::string QuickJsGroupJsBridge::SerializationObjectToString(JSContext* ctx, JSValue& val) +{ + JSValue strValue = JS_UNDEFINED; + JSValue global = JS_UNDEFINED; + JSValue json = JS_UNDEFINED; + JSValue func = JS_UNDEFINED; + + QjsHandleScope handleScope(ctx); + do { + global = JS_GetGlobalObject(ctx); + json = QjsUtils::GetPropertyStr(ctx, global, "JSON"); + if (!JS_IsObject(json)) { + break; + } + func = QjsUtils::GetPropertyStr(ctx, json, "stringify"); + if (!JS_IsFunction(ctx, func)) { + break; + } + } while (false); + + JS_FreeValue(ctx, global); + + strValue = QjsUtils::Call(ctx, func, json, 1, &(val)); + if (QUICK_JS_CHECK_EXCEPTION(ctx, strValue)) { + LOGE("SerializationObjectToString error"); + return ""; + } else { + JSValue tempString = JS_ToString(ctx, strValue); + ScopedString para(ctx, tempString); + std::string functionPara(para.get()); + JS_FreeValue(ctx, tempString); + return functionPara; + } +} + +ParseJsDataResult QuickJsGroupJsBridge::ParseJsPara(JSContext* ctx, int32_t argc, + JSValueConst* argv, std::vector& args, int32_t requestId) +{ + if (argc < PLUGIN_REQUEST_ARG_APP_PARAMS_INDEX) { + return ParseJsDataResult::PARSE_JS_SUCCESS; + } + + for (int32_t i = PLUGIN_REQUEST_ARG_APP_PARAMS_INDEX; i < argc; i++) { + JSValue val = argv[i]; + if (JS_IsString(val)) { + ScopedString para(ctx, val); + std::string functionPara(para.get()); + CodecData arg(functionPara); + args.push_back(arg); + } else if (JS_IsNumber(val)) { + if (JS_IsInteger(val)) { + int32_t valInt = 0; + JS_ToInt32(ctx, &valInt, val); + CodecData arg(valInt); + args.push_back(arg); + LOGD("Process callNative para type:Int"); + } else { + double valDouble; + JS_ToFloat64(ctx, &valDouble, val); + CodecData arg(valDouble); + args.push_back(arg); + LOGD("Process callNative para type:Double"); + } + } else if (JS_IsBool(val)) { + bool valBool = JS_ToBool(ctx, val); + CodecData arg(valBool); + args.push_back(arg); + LOGD("Process callNative para type:bool"); + } else if (JS_IsNull(val)) { + CodecData argNull; + args.push_back(argNull); + LOGD("Process callNative para type:null"); + } else if (JS_IsFunction(ctx, val)) { + int32_t functionId = GetPendingCallbackIdAndIncrement(); + CodecData arg(functionId, BufferDataType::TYPE_FUNCTION); + args.push_back(arg); + SetEventGroupCallBackFuncs(ctx, val, functionId, requestId); + } else if (JS_IsArray(ctx, val) || JS_IsObject(val)) { + std::string objStr = SerializationObjectToString(ctx, val); + if (objStr.empty()) { + return ParseJsDataResult::PARSE_JS_ERR_UNSUPPORTED_TYPE; + } + CodecData arg(objStr, BufferDataType::TYPE_OBJECT); + args.push_back(arg); + } else if (JS_IsUndefined(val)) { + LOGD("Process callNative para type:undefined"); + } else { + LOGE("Process callNative para type: unsupported type"); + JS_FreeValue(ctx, val); + return ParseJsDataResult::PARSE_JS_ERR_UNSUPPORTED_TYPE; + } + } + return ParseJsDataResult::PARSE_JS_SUCCESS; +} + +bool QuickJsGroupJsBridge::SetModuleGroupCallbackFuncs( + JSContext* ctx, const JSValue& resolveCallback, const JSValue& rejectCallback, int32_t callbackId) +{ + if (!JS_IsFunction(ctx, resolveCallback) || JS_IsNull(resolveCallback) || !JS_IsFunction(ctx, rejectCallback) || + JS_IsNull(rejectCallback)) { + LOGE("resolve or reject callback function is invalid"); + return false; + } + + PromiseCallback promiseCallJsFunc; + promiseCallJsFunc.resolveCallback = resolveCallback; + promiseCallJsFunc.rejectCallback = rejectCallback; + + auto result = moduleCallBackFuncs_.try_emplace(callbackId, promiseCallJsFunc); + if (!result.second) { + LOGE("module callback function has been existed!"); + return false; + } else { + JS_DupValue(ctx, promiseCallJsFunc.resolveCallback); + JS_DupValue(ctx, promiseCallJsFunc.rejectCallback); + } + + return true; +} + +bool QuickJsGroupJsBridge::SetEventGroupCallBackFuncs( + JSContext* ctx, const JSValue& eventCallbackFunc, int32_t callbackId, int32_t requestId) +{ + if (JS_IsNull(eventCallbackFunc) || !JS_IsFunction(ctx, eventCallbackFunc)) { + LOGE("callback function is invalid!"); + return false; + } + + LOGI("record event callback, requestId:%{private}d, callbackId:%{private}d", requestId, callbackId); + auto result = eventCallBackFuncs_.try_emplace(callbackId, eventCallbackFunc); + if (result.second) { + JS_DupValue(ctx, eventCallbackFunc); + } else { + JS_FreeValue(ctx, result.first->second); + result.first->second = JS_DupValue(ctx, eventCallbackFunc); + } + + AddRequestIdCallbackIdRelation(callbackId, requestId); + + return true; +} + +void QuickJsGroupJsBridge::RemoveEventGroupCallBackFuncs(int32_t callbackId) +{ + LOGI("remove event callback, callbackId:%{private}d", callbackId); + auto itFunc = eventCallBackFuncs_.find(callbackId); + if (itFunc != eventCallBackFuncs_.end()) { + JS_FreeValue(context_, itFunc->second); + eventCallBackFuncs_.erase(callbackId); + } +} + +void QuickJsGroupJsBridge::AddRequestIdCallbackIdRelation(int32_t eventId, int32_t requestId) +{ + auto result = requestIdCallbackIdMap_.try_emplace(requestId, eventId); + if (!result.second) { + result.first->second = eventId; + } +} + +void QuickJsGroupJsBridge::RemoveRequestIdCallbackIdRelation(int32_t requestId, bool removeEventCallback) +{ + auto eventId = requestIdCallbackIdMap_.find(requestId); + if (eventId != requestIdCallbackIdMap_.end()) { + if (removeEventCallback) { + RemoveEventGroupCallBackFuncs(eventId->second); + } + requestIdCallbackIdMap_.erase(requestId); + } +} + +JSValue QuickJsGroupJsBridge::ProcessJsRequest(JSContext* ctx, JSValueConst thisVal, int32_t argc, JSValueConst* argv) +{ + ACE_SCOPED_TRACE("ProcessJsRequest"); + QjsEngineInstance* instance = static_cast(JS_GetContextOpaque(ctx)); + if (instance == nullptr) { + LOGE("invalid args, failed to get QjsEngineInstance from the JSContext"); + return JS_EXCEPTION; + } + + auto groupJsBridge = AceType::DynamicCast(instance->GetDelegate()->GetGroupJsBridge()); + if (groupJsBridge == nullptr) { + LOGE("invalid args, failed to get GroupJsBridge from the JSContext"); + return JS_EXCEPTION; + } + + // Should have at least 4 parameters + if (argv == nullptr || argc < PLUGIN_REQUEST_MIN_ARGC_NUM) { + LOGE("invalid args number:%{public}d", argc); + return JS_EXCEPTION; + } + + int32_t callbackId = groupJsBridge->GetPendingCallbackIdAndIncrement(); + if (!groupJsBridge->SetModuleGroupCallbackFuncs(ctx, argv[PLUGIN_REQUEST_ARG_RESOLVE_INDEX], + argv[PLUGIN_REQUEST_ARG_REJECT_INDEX], callbackId)) { + LOGE("set module callback function failed!"); + return JS_EXCEPTION; + } + ScopedString groupName(ctx, argv[PLUGIN_REQUEST_ARG_GROUP_NAME_INDEX]); + if (groupName.get() == nullptr) { + LOGE("invalid paras, groupName:%{private}s", groupName.get()); + return JS_EXCEPTION; + } + std::string strGroupName(groupName.get()); + LOGI("send message, groupName: %{private}s, callbackId: %{private}d", strGroupName.c_str(), callbackId); + + ScopedString functionName(ctx, argv[PLUGIN_REQUEST_ARG_FUNCTION_NAME_INDEX]); + std::string strFunctionName(functionName.get()); + + std::vector args; + ParseJsDataResult parseJsResult = groupJsBridge->ParseJsPara(ctx, argc, argv, args, callbackId); + if (parseJsResult != ParseJsDataResult::PARSE_JS_SUCCESS) { + ProcessParseJsError(parseJsResult, ctx, callbackId); + return JS_NULL; + } + + FunctionCall functionCall(strFunctionName, args); + StandardFunctionCodec codec; + std::vector encodeBuf; + if (!codec.EncodeFunctionCall(functionCall, encodeBuf)) { + groupJsBridge->TriggerModulePluginGetErrorCallback(callbackId, PLUGIN_REQUEST_FAIL, + "encode request message failed"); + return JS_NULL; + } + + if (!instance->CallPlatformFunction(strGroupName, std::move(encodeBuf), callbackId)) { + LOGE("CallPlatformFunction fail"); + groupJsBridge->TriggerModulePluginGetErrorCallback(callbackId, PLUGIN_REQUEST_FAIL, "send message failed"); + return JS_NULL; + } + + return JS_NULL; +} + +int32_t QuickJsGroupJsBridge::CallEvalBuf( + JSContext* ctx, const char* buf, size_t bufLen, const char* filename, int32_t evalFlags) +{ + int32_t ret = JS_CALL_SUCCESS; + JSValue val = JS_Eval(ctx, buf, bufLen, filename, evalFlags); + if (QUICK_JS_CHECK_EXCEPTION(ctx, val)) { + LOGE("EvalBuf failed!"); + ret = JS_CALL_FAIL; + } + JS_FreeValue(ctx, val); + return ret; +} + +void QuickJsGroupJsBridge::ProcessParseJsError(ParseJsDataResult errorType, JSContext* ctx, int32_t callbackId) +{ + QjsEngineInstance* instance = static_cast(JS_GetContextOpaque(ctx)); + if (instance == nullptr) { + LOGE("get quick js engine instance failed!"); + return; + } + + std::string errMessage; + switch (errorType) { + case ParseJsDataResult::PARSE_JS_ERR_UNSUPPORTED_TYPE: + errMessage = "unsupporteded js parameter type"; + instance->PluginErrorCallback(callbackId, + static_cast(ParseJsDataResult::PARSE_JS_ERR_UNSUPPORTED_TYPE), std::move(errMessage)); + break; + case ParseJsDataResult::PARSE_JS_ERR_TOO_MANY_PARAM: + errMessage = "the number of parameters exceeds 255"; + instance->PluginErrorCallback(callbackId, + static_cast(ParseJsDataResult::PARSE_JS_ERR_TOO_MANY_PARAM), std::move(errMessage)); + break; + default: + break; + } +} + +void QuickJsGroupJsBridge::TriggerModuleJsCallback(int32_t callbackId, int32_t code, std::vector&& messageData) +{ + JSValue callBackResult = JS_NULL; + CodecData codecResult; + StandardFunctionCodec codec; + if (codec.DecodePlatformMessage(messageData, codecResult)) { + std::string resultString = codecResult.GetStringValue(); + if (resultString.empty()) { + callBackResult = JS_NULL; + } else { + callBackResult = JS_NewString(context_, resultString.c_str()); + } + } else { + LOGE("trigger JS result function error, decode message fail, callbackId:%{private}d", + callbackId); + code = PLUGIN_REQUEST_FAIL; + callBackResult = JS_NewString(context_, std::string("{\"code\":").append(std::to_string(code)).append(",") + .append("\"data\":\"invalid response data\"}").c_str()); + } + + CallModuleJsCallback(callbackId, code, callBackResult); + + messageData.clear(); +} + +void QuickJsGroupJsBridge::CallModuleJsCallback(int32_t callbackId, int32_t code, JSValue callBackResult) +{ + RemoveRequestIdCallbackIdRelation(callbackId, code != PLUGIN_REQUEST_SUCCESS); + + auto itFunc = moduleCallBackFuncs_.find(callbackId); + if (itFunc != moduleCallBackFuncs_.end()) { + PromiseCallback callback = itFunc->second; + JSValue jsFunc = (code == PLUGIN_REQUEST_SUCCESS ? callback.resolveCallback : callback.rejectCallback); + if (!JS_IsFunction(context_, jsFunc) || JS_IsNull(jsFunc)) { + LOGE("trigger JS result function error, it is not a function, callbackId:%{private}d", + callbackId); + return; + } + + // Pass only 1 parameter, call promise resolve call back. + JS_Call(context_, jsFunc, JS_UNDEFINED, 1, &callBackResult); + js_std_loop(context_); + JS_FreeValue(context_, callback.resolveCallback); + JS_FreeValue(context_, callback.rejectCallback); + JS_FreeValue(context_, callBackResult); + moduleCallBackFuncs_.erase(itFunc); + LOGI("trigger JS result function success, callbackId:%{private}d, code:%{private}d", callbackId, code); + } else { + LOGE("trigger JS result function is not exists, callbackId:%{private}d, code:%{private}d", callbackId, code); + } +} + +void QuickJsGroupJsBridge::TriggerModulePluginGetErrorCallback( + int32_t callbackId, int32_t errorCode, std::string&& errorMessage) +{ + RemoveRequestIdCallbackIdRelation(callbackId, true); + + auto itFunc = moduleCallBackFuncs_.find(callbackId); + if (itFunc != moduleCallBackFuncs_.end()) { + PromiseCallback jsCallbackFunc = itFunc->second; + if (!JS_IsFunction(context_, jsCallbackFunc.rejectCallback) || JS_IsNull(jsCallbackFunc.rejectCallback)) { + LOGE("trigger JS result function error, reject is not a function, callbackId:%{private}d", + callbackId); + return; + } + + auto resultJson = JsonUtil::Create(true); + resultJson->Put(std::string("code").c_str(), errorCode); + resultJson->Put(std::string("data").c_str(), errorMessage.c_str()); + + JSValue emptyReplyCallBack = JS_NewString(context_, resultJson->ToString().c_str()); + // Pass only 1 parameter, call promise reject call back for error get in plugin. + JS_Call(context_, jsCallbackFunc.rejectCallback, JS_UNDEFINED, 1, &emptyReplyCallBack); + js_std_loop(context_); + JS_FreeValue(context_, jsCallbackFunc.resolveCallback); + JS_FreeValue(context_, jsCallbackFunc.rejectCallback); + JS_FreeValue(context_, emptyReplyCallBack); + moduleCallBackFuncs_.erase(itFunc); + } +} + +void QuickJsGroupJsBridge::CallEventJsCallback(int32_t callbackId, std::vector&& eventData) +{ + JSValue callBackEvent = JS_NULL; + CodecData codecEvent; + StandardFunctionCodec codec; + if (codec.DecodePlatformMessage(eventData, codecEvent)) { + std::string eventString = codecEvent.GetStringValue(); + if (eventString.empty()) { + callBackEvent = JS_NULL; + } else { + callBackEvent = JS_NewString(context_, eventString.c_str()); + } + } else { + LOGE("trigger JS callback function error, decode message fail, callbackId:%{private}d", callbackId); + callBackEvent = JS_NULL; + } + + auto itFunc = eventCallBackFuncs_.find(callbackId); + if (itFunc != eventCallBackFuncs_.end()) { + JSValue jsEventCallbackFunc = itFunc->second; + if (!JS_IsFunction(context_, jsEventCallbackFunc) || JS_IsNull(jsEventCallbackFunc)) { + LOGE("trigger JS callback function error, callback is not a function, " + "callbackId:%{private}d", callbackId); + return; + } + + // Pass only 1 parameter + JS_Call(context_, jsEventCallbackFunc, JS_UNDEFINED, 1, &callBackEvent); + js_std_loop(context_); + JS_FreeValue(context_, callBackEvent); + } else { + LOGE("trigger JS callback function error, it is not exists, callbackId:%{private}d", callbackId); + } + eventData.clear(); +} + +void QuickJsGroupJsBridge::TriggerEventJsCallback(int32_t callbackId, int32_t code, std::vector&& eventData) +{ + if (code == PLUGIN_CALLBACK_DESTROY) { + RemoveEventGroupCallBackFuncs(callbackId); + } else { + CallEventJsCallback(callbackId, std::move(eventData)); + } +} +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/js_frontend/engine/quickjs/qjs_group_js_bridge.h b/frameworks/bridge/js_frontend/engine/quickjs/qjs_group_js_bridge.h new file mode 100644 index 00000000..b1896d4b --- /dev/null +++ b/frameworks/bridge/js_frontend/engine/quickjs/qjs_group_js_bridge.h @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_QUICKJS_QJS_GROUP_JS_BRIDGE_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_QUICKJS_QJS_GROUP_JS_BRIDGE_H + +#include +#include + +#include "base/memory/ace_type.h" +#include "base/utils/singleton.h" +#include "frameworks/bridge/codec/codec_data.h" +#include "frameworks/bridge/js_frontend/engine/common/group_js_bridge.h" +#include "frameworks/bridge/js_frontend/engine/quickjs/qjs_utils.h" + +namespace OHOS::Ace::Framework { + +struct PromiseCallback final { + JSValue resolveCallback; + JSValue rejectCallback; +}; + +using EventCallbackMap = std::map; +using ModuleCallbackMap = std::map; +using RequestIdCallbackIdMap = std::map; + +// for parse js data +enum class ParseJsDataResult { + PARSE_JS_SUCCESS = 0, + PARSE_JS_ERR_UNSUPPORTED_TYPE = 101, + PARSE_JS_ERR_TOO_MANY_PARAM = 102, +}; + +class QuickJsGroupJsBridge : public GroupJsBridge { + DECLARE_ACE_TYPE(QuickJsGroupJsBridge, GroupJsBridge) + +public: + QuickJsGroupJsBridge() = default; + ~QuickJsGroupJsBridge() override = default; + + int32_t InitializeGroupJsBridge(JSContext* jsContext); + void Uninitialize(); + + void TriggerModuleJsCallback(int32_t callbackId, int32_t code, std::vector&& data) override; + + void TriggerModulePluginGetErrorCallback( + int32_t callbackId, int32_t errorCode, std::string&& errorMessage) override; + + void TriggerEventJsCallback(int32_t callbackId, int32_t code, std::vector&& data) override; + + void LoadPluginJsCode(std::string&& jsCode) override; + + void Destroy() override {} + +private: + int32_t GetPendingCallbackIdAndIncrement() + { + return pendingCallbackId_++; + } + + // JS bridge functions are used for the mapping between the JS and CPP functions. + int32_t LoadJsBridgeFunction(); + + // load the js source code work on qjs engine + int32_t CallEvalBuf(JSContext* ctx, const char* buf, size_t bufLen, const char* filename, int32_t evalFlags); + + bool SetModuleGroupCallbackFuncs(JSContext* ctx, const JSValue& resolveCallback, + const JSValue& rejectCallback, int32_t callbackId); + bool SetEventGroupCallBackFuncs(JSContext* ctx, const JSValue& eventCallbackFunc, int32_t callbackId, + int32_t requestId); + void RemoveEventGroupCallBackFuncs(int32_t callbackId); + void AddRequestIdCallbackIdRelation(int32_t callbackId, int32_t requestId); + void RemoveRequestIdCallbackIdRelation(int32_t requestId, bool removeEventCallback); + + void CallModuleJsCallback(int32_t callbackId, int32_t code, JSValue callBackResult); + void CallEventJsCallback(int32_t callbackId, std::vector&& data); + + // process when parse data from js engine failed + static void ProcessParseJsError(ParseJsDataResult errorType, JSContext* ctx, int32_t callbackId); + ParseJsDataResult ParseJsPara(JSContext* ctx, int32_t argc, JSValueConst* argv, std::vector& args, + int32_t requestId); + + static void QuickJsPrintException(JSContext* context, int32_t expLine, int32_t line); + static bool QuickJsCheckException(JSContext* context, JSValueConst object, int32_t line); + static int32_t QuickJsGetLengthIfObjectIsArray(JSContext* ctx, JSValueConst obj); + static std::string SerializationObjectToString(JSContext* ctx, JSValue& val); + + // JsSendGroupMessage is mapped to the JS function[SendGroupMessage] + // contains three parameters: groupName, message, callbackfunction + static JSValue ProcessJsRequest(JSContext* ctx, JSValueConst thisVal, int32_t argc, JSValueConst* argv); + + // JsSetEventMsgHandler is mapped to the JS function[SetEventMsgHandler] + // contains two parameters: groupName, eventCallbackFunction + static JSValue JsSetEventMessageHandler(JSContext* ctx, JSValueConst thisVal, int32_t argc, JSValueConst* argv); + + EventCallbackMap eventCallBackFuncs_; + ModuleCallbackMap moduleCallBackFuncs_; + RequestIdCallbackIdMap requestIdCallbackIdMap_; + + JSContext* context_ = nullptr; + std::atomic_int pendingCallbackId_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_QUICKJS_QJS_GROUP_JS_BRIDGE_H diff --git a/frameworks/bridge/js_frontend/engine/quickjs/qjs_utils.cpp b/frameworks/bridge/js_frontend/engine/quickjs/qjs_utils.cpp new file mode 100644 index 00000000..5fbca1bf --- /dev/null +++ b/frameworks/bridge/js_frontend/engine/quickjs/qjs_utils.cpp @@ -0,0 +1,556 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/js_frontend/engine/quickjs/qjs_utils.h" + +#include +#include + +#include "base/log/event_report.h" +#include "base/log/log.h" +#include "base/utils/macros.h" +#include "core/common/ace_application_info.h" +#include "core/common/ace_engine.h" + +namespace OHOS::Ace::Framework { + +namespace { + +const char JS_CRASH[] = "Js Crash"; +const char DESTROY_APP_ERROR[] = "Destroy application failed"; +const char DESTROY_PAGE_FAILED[] = "Destroy page instance failed"; +const char LOAD_JS_BUNDLE_FAILED[] = "JS framework load js bundle failed"; +const char EVAL_BUFFER_FAILED[] = "Eval buffer failed"; +const char READ_OBJECT_FAILED[] = "Read object failed"; +const char COMPILE_AND_RUN_BUNDLE_FAILED[] = "Js compile and run bundle failed"; +const char LOAD_JS_FRAMEWORK_FAILED[] = "Loading JS framework failed"; +const char FIRE_EVENT_FAILED[] = "Fire event failed"; + +std::string GetReason(JsErrorType errorType) +{ + std::string reasonStr; + switch (errorType) { + case OHOS::Ace::Framework::JsErrorType::JS_CRASH: + reasonStr = JS_CRASH; + break; + case OHOS::Ace::Framework::JsErrorType::EVAL_BUFFER_ERROR: + reasonStr = EVAL_BUFFER_FAILED; + break; + case OHOS::Ace::Framework::JsErrorType::DESTROY_APP_ERROR: + reasonStr = DESTROY_APP_ERROR; + break; + case OHOS::Ace::Framework::JsErrorType::DESTROY_PAGE_ERROR: + reasonStr = DESTROY_PAGE_FAILED; + break; + case OHOS::Ace::Framework::JsErrorType::LOAD_JS_BUNDLE_ERROR: + reasonStr = LOAD_JS_BUNDLE_FAILED; + break; + case OHOS::Ace::Framework::JsErrorType::READ_OBJECT_ERROR: + reasonStr = READ_OBJECT_FAILED; + break; + case OHOS::Ace::Framework::JsErrorType::COMPILE_AND_RUN_BUNDLE_ERROR: + reasonStr = COMPILE_AND_RUN_BUNDLE_FAILED; + break; + case OHOS::Ace::Framework::JsErrorType::LOAD_JS_FRAMEWORK_ERROR: + reasonStr = LOAD_JS_FRAMEWORK_FAILED; + break; + case OHOS::Ace::Framework::JsErrorType::FIRE_EVENT_ERROR: + reasonStr = FIRE_EVENT_FAILED; + break; + default: + reasonStr = JS_CRASH; + break; + } + + return reasonStr; +} + +std::string GenerateSummaryBody( + const char* exceptionStr, const char* stackTrace, int32_t instanceId, const char* pageUrl) +{ + std::string abilityName; + if (AceEngine::Get().GetContainer(instanceId) != nullptr) { + abilityName = AceEngine::Get().GetContainer(instanceId)->GetHostClassName(); + } + + std::string summaryBody; + summaryBody.append("Lifetime: ") + .append(std::to_string(OHOS::Ace::AceApplicationInfo::GetInstance().GetLifeTime())) + .append("s") + .append("\n"); + + if (!abilityName.empty()) { + summaryBody.append("Ability: ").append(abilityName).append("\n"); + } + + if (pageUrl != nullptr) { + summaryBody.append("page: ").append(pageUrl).append("\n"); + } + + summaryBody.append("Js-Engine: Quick JS\n"); + if (exceptionStr == nullptr && stackTrace == nullptr) { + return summaryBody; + } + + summaryBody.append("Stacktrace: "); + if (exceptionStr != nullptr) { + summaryBody.append(exceptionStr).append("\n"); + } + if (stackTrace != nullptr) { + summaryBody.append(stackTrace); + } + + return summaryBody; +} + +} // namespace + +thread_local std::stack QjsHandleScope::qjsHandleScopeStack; + +ScopedString::ScopedString(JSContext* ctx, JSValueConst val) : context_(ctx) +{ + ACE_DCHECK(ctx != nullptr); + stringValue_ = JS_ToCString(ctx, val); +} + +ScopedString::ScopedString(JSContext* ctx, JSAtom atom) : context_(ctx) +{ + ACE_DCHECK(ctx != nullptr); + stringValue_ = JS_AtomToCString(ctx, atom); +} + +ScopedString::ScopedString(JSValueConst val) : context_(QJSContext::current()) +{ + stringValue_ = JS_ToCString(context_, val); +} + +ScopedString::ScopedString(JSAtom atom) : context_(QJSContext::current()) +{ + stringValue_ = JS_AtomToCString(context_, atom); +} + +ScopedString::~ScopedString() +{ + JS_FreeCString(context_, stringValue_); +} + +bool ScopedString::operator==(const char* rhs) +{ + return std::strcmp(get(), rhs) == 0; +} +bool ScopedString::operator==(const std::string& rhs) +{ + return rhs == get(); +} +bool ScopedString::operator==(const ScopedString& rhs) +{ + return std::strcmp(get(), rhs.get()) == 0; +} + +const char* ScopedString::get() const +{ + return stringValue_; +} + +std::string ScopedString::str() +{ + return stringValue_; +} + +std::string ScopedString::Stringify(JSValueConst val) +{ + JSContext* ctx = QJSContext::current(); + JSValue globalObj = JS_GetGlobalObject(ctx); + JSValue thisObj = JS_GetPropertyStr(ctx, globalObj, "JSON"); + JSValue funcObj = JS_GetPropertyStr(ctx, thisObj, "stringify"); + JSValue retVal = JS_Call(ctx, funcObj, thisObj, 1, &val); + std::string str = ScopedString(retVal).str(); + JS_FreeValue(ctx, retVal); + JS_FreeValue(ctx, funcObj); + JS_FreeValue(ctx, thisObj); + JS_FreeValue(ctx, globalObj); + return str; +} + +ScopedString::operator std::string() const +{ + return stringValue_; +} + +JSValue QjsUtils::NewStringLen(JSContext* ctx, const char* str, size_t len) +{ + ACE_DCHECK(!QjsHandleScope::qjsHandleScopeStack.empty()); + QjsHandleScope* scope = QjsHandleScope::qjsHandleScopeStack.top(); + JSValue retVal = JS_NewStringLen(ctx, str, len); + scope->jsValues_.push_back(retVal); + return retVal; +} + +JSValue QjsUtils::NewString(JSContext* ctx, const char* str) +{ + ACE_DCHECK(!QjsHandleScope::qjsHandleScopeStack.empty()); + QjsHandleScope* scope = QjsHandleScope::qjsHandleScopeStack.top(); + JSValue retVal = JS_NewString(ctx, str); + scope->jsValues_.push_back(retVal); + return retVal; +} + +JSValue QjsUtils::ParseJSON(JSContext* ctx, const char* buf, size_t bufLen, const char* filename) +{ + ACE_DCHECK(!QjsHandleScope::qjsHandleScopeStack.empty()); + QjsHandleScope* scope = QjsHandleScope::qjsHandleScopeStack.top(); + JSValue retVal = JS_ParseJSON(ctx, buf, bufLen, filename); + scope->jsValues_.push_back(retVal); + return retVal; +} + +JSValue QjsUtils::NewObject(JSContext* ctx) +{ + ACE_DCHECK(!QjsHandleScope::qjsHandleScopeStack.empty()); + QjsHandleScope* scope = QjsHandleScope::qjsHandleScopeStack.top(); + JSValue retVal = JS_NewObject(ctx); + scope->jsValues_.push_back(retVal); + return retVal; +} + +JSValue QjsUtils::Call(JSContext* ctx, JSValueConst funcObj, JSValueConst thisObj, int32_t argc, JSValueConst* argv) +{ + ACE_DCHECK(!QjsHandleScope::qjsHandleScopeStack.empty()); + QjsHandleScope* scope = QjsHandleScope::qjsHandleScopeStack.top(); + JSValue retVal = JS_Call(ctx, funcObj, thisObj, argc, argv); + scope->jsValues_.push_back(retVal); + return retVal; +} + +JSValue QjsUtils::Eval(JSContext* ctx, const char* input, size_t inputLen, const char* filename, int32_t evalFlags) +{ + ACE_DCHECK(!QjsHandleScope::qjsHandleScopeStack.empty()); + QjsHandleScope* scope = QjsHandleScope::qjsHandleScopeStack.top(); + JSValue retVal = JS_Eval(ctx, input, inputLen, filename, evalFlags); + scope->jsValues_.push_back(retVal); + return retVal; +} + +JSValue QjsUtils::GetPropertyStr(JSContext* ctx, JSValueConst thisObj, const char* prop) +{ + ACE_DCHECK(!QjsHandleScope::qjsHandleScopeStack.empty()); + QjsHandleScope* scope = QjsHandleScope::qjsHandleScopeStack.top(); + JSValue retVal = JS_GetPropertyStr(ctx, thisObj, prop); + scope->jsValues_.push_back(retVal); + return retVal; +} + +int32_t QjsUtils::JsGetArrayLength(JSContext* ctx, JSValueConst arrayObject) +{ + int32_t result = JS_IsArray(ctx, arrayObject); + if (result == TRUE) { + QjsHandleScope handleScope(ctx); + JSValue propLength = QjsUtils::GetPropertyStr(ctx, arrayObject, "length"); + int32_t length = -1; + + if (JS_ToInt32(ctx, &length, propLength) < 0) { + length = -1; + } + + JS_FreeValue(ctx, propLength); + return length; + } + if (result < 0) { + JsStdDumpErrorAce(ctx); + } + return -1; +} + +void QjsUtils::JsStdDumpErrorAce(JSContext* ctx, JsErrorType errorType, int32_t instanceId, const char* pageUrl, + const RefPtr& page) +{ + RefPtr pageMap; + RefPtr appMap; + if (page != nullptr) { + pageMap = page->GetPageMap(); + appMap = page->GetAppMap(); + } + JSValue exceptionVal = JS_GetException(ctx); + BOOL isError = JS_IsError(ctx, exceptionVal); + if (!isError) { + LOGE("Throw: "); + } + ScopedString printLog(ctx, exceptionVal); + LOGE("[DUMP] %{public}s", printLog.get()); + QjsHandleScope handleScope(ctx); + if (isError) { + JSValue val = QjsUtils::GetPropertyStr(ctx, exceptionVal, "stack"); + if (!JS_IsUndefined(val)) { + const char* stack = JS_ToCString(ctx, val); + if (stack != nullptr) { + if (pageMap || appMap) { + const std::string& standardStack = JsDumpSourceFile(stack, pageMap, appMap); + LOGE("%{public}s", standardStack.c_str()); + } else { + LOGE("%{public}s", stack); + } + std::string reasonStr = GetReason(errorType); + std::string summaryBody = GenerateSummaryBody(printLog.get(), stack, instanceId, pageUrl); + EventReport::JsErrReport( + AceEngine::Get().GetUid(), AceEngine::Get().GetPackageName(), reasonStr, summaryBody); + JS_FreeValue(ctx, exceptionVal); + JS_FreeCString(ctx, stack); + } + } + } +} + +std::string QjsUtils::JsDumpSourceFile(const char* stack, const RefPtr& pageMap, + const RefPtr& appMap) +{ + const std::string closeBrace = ")"; + const std::string openBrace = "("; + const std::string appFile = "app.js"; + std::string tempStack = stack; + std::string sourceInfo; + std::string line = ""; + + int32_t appFlag = tempStack.find(appFile); + int32_t closeBracePos = tempStack.find(closeBrace); + int32_t openBracePos = tempStack.find(openBrace); + + for (int32_t i = closeBracePos - 1; i > 0; i--) { + if (tempStack[i] >= '0' && tempStack[i] <= '9') { + line = tempStack[i] + line; + } else { + break; + } + } + if (!line.empty()) { + if (appFlag > 0 && appMap) { + sourceInfo = appMap->Find(std::stoi(line), 1).ToString(); + } else { + sourceInfo = pageMap->Find(std::stoi(line), 1).ToString(); + } + } + tempStack.replace(openBracePos, closeBracePos - openBracePos + 1, sourceInfo); + return tempStack; +} + +void QjsUtils::JsDumpMemoryStats(JSContext* ctx) +{ +#if ACE_DEBUG + LOGD("JS Memory ---------------------"); + JSMemoryUsage s; + JSRuntime* rt = JS_GetRuntime(ctx); + if (!rt) { + return; + } + + JS_ComputeMemoryUsage(rt, &s); + + LOGD("malloc limit: %ld ------------", (int64_t)(ssize_t)s.malloc_limit); + + LOGD(" COUNT SIZE"); + + if (s.malloc_count) { + LOGD("%8ld %8ld Bytes Memory allocated (%0.1f per block)", s.malloc_count, s.malloc_size, + (double)s.malloc_size / s.malloc_count); + LOGD("%8ld %8ld Bytes Memory used (%d overhead, %0.1f average slack)", s.memory_used_count, + s.memory_used_size, 8, ((double)(s.malloc_size - s.memory_used_size) / s.memory_used_count)); + } + if (s.atom_count) { + LOGD("%8ld %8ld Bytes Atoms (%0.1f per atom)", s.atom_count, s.atom_size, (double)s.atom_size / s.atom_count); + } + if (s.str_count) { + LOGD("%8ld %8ld Bytes Strings (%0.1f per string)", s.str_count, s.str_size, (double)s.str_size / s.str_count); + } + if (s.obj_count) { + LOGD("%8ld %8ld Bytes Objects (%0.1f per object)", s.obj_count, s.obj_size, (double)s.obj_size / s.obj_count); + LOGD("%8ld %8ld Bytes Properties (%0.1f per object)", s.prop_count, s.prop_size, + (double)s.prop_count / s.obj_count); + LOGD("%8ld %8ld Bytes Shapes (%0.1f per shape)", s.shape_count, s.shape_size, + (double)s.shape_size / s.shape_count); + } + if (s.js_func_count) { + LOGD("%8ld %8ld Bytes Bytecode functions", s.js_func_count, s.js_func_size); + LOGD("%8ld %8ld Bytes Bytecode (%0.1f per function) ", s.js_func_count, s.js_func_code_size, + (double)s.js_func_code_size / s.js_func_count); + if (s.js_func_pc2line_count) { + LOGD("%8ld %8ld Bytes Pc2line (%0.1f per function)", s.js_func_pc2line_count, s.js_func_pc2line_size, + (double)s.js_func_pc2line_size / s.js_func_pc2line_count); + } + } + if (s.c_func_count) { + LOGD("%8ld C functions", s.c_func_count); + } + if (s.array_count) { + LOGD("%8ld arrays", s.array_count); + if (s.fast_array_count) { + LOGD("%8ld fast arrays", s.fast_array_count); + LOGD("%8ld %8ld (%0.1f per fast array) elements", s.fast_array_elements, + s.fast_array_elements * (int)sizeof(JSValue), (double)s.fast_array_elements / s.fast_array_count); + } + } + if (s.binary_object_count) { + LOGD("%8ld %8ld binary objects", s.binary_object_count, s.binary_object_size); + } +#endif + LOGD("JS Memory ---------------------"); +} + +std::vector QjsUtils::GetObjectKeys(JSValueConst obj, int flags) +{ + return QjsUtils::GetObjectKeys(QJSContext::current(), obj, flags); +} + +bool AlwaysMatch(std::string) +{ + return true; +} + +std::vector QjsUtils::GetObjectKeys(JSContext* ctx, JSValueConst obj, int flags) +{ + return QjsUtils::GetFilteredObjectKeys(ctx, obj, AlwaysMatch, flags); +} + +std::vector QjsUtils::GetFilteredObjectKeys( + JSContext* ctx, JSValueConst obj, bool (*matcherFunc)(std::string), int flags) +{ + std::vector result; + if (JS_IsUndefined(obj)) { + return result; + } + + if (!JS_IsObject(obj)) { + return result; + } + + JSPropertyEnum* properties = nullptr; + uint32_t propLength = 0; + int res = JS_GetOwnPropertyNames(ctx, &properties, &propLength, obj, flags); + if (res == -1) { + free(properties); + return result; + } + + for (uint32_t i = 0; i < propLength; i++) { + ScopedString keyStr(ctx, properties[i].atom); + if (matcherFunc(keyStr.get())) { + result.push_back(keyStr.get()); + } + JS_FreeAtom(ctx, properties[i].atom); + } + + free(properties); + return result; +} + +/** + * obtain the properties of given object fromMap and return in pTab and len. + * @param ctx: context + * @param fromMap: elmt's attributes object + * @param pTab: result array of properties + * @param len: length of the result array + * NOTE: caller needs to free pTab array after use + */ +bool QjsUtils::CheckAndGetJsProperty(JSContext* ctx, JSValueConst jsObj, JSPropertyEnum** pTab, uint32_t* len) +{ + int err = JS_GetOwnPropertyNames(ctx, pTab, len, jsObj, JS_GPN_STRING_MASK); + if (err < 0) { + LOGE("the object's Property enum is nullptr"); + return false; + } + return true; +} + +// get the top -level registered variable types +// this function is called during the initial variable registration process +std::string QjsUtils::typeAsString(JSValueConst targetValue) +{ + JSContext* ctx = QJSContext::current(); + if (JS_IsNumber(targetValue) || JS_IsInteger(targetValue) || JS_IsBigFloat(targetValue)) { + return "number"; + } else if (JS_IsBool(targetValue)) { + return "boolean"; + } else if (JS_IsString(targetValue)) { + return "string"; + } else if (JS_IsArray(ctx, targetValue)) { + return "array"; + } else if (JS_IsObject(targetValue)) { + return "object"; + } else if (JS_IsFunction(ctx, targetValue)) { + return "function"; + } else if (JS_IsNull(targetValue)) { + return "null"; + } else if (JS_IsUndefined(targetValue)) { + return "undefined"; + } else { + LOGW("typeAsString, cannot guess type "); + } + + return "undefined"; +} + +JSValue QjsUtils::GetArgvSafe(int idx, int argc, JSValueConst* argv) +{ + if (idx < 0 || idx >= argc) { + return JS_UNDEFINED; + } + + return argv[idx]; +} + +void QjsUtils::DefineGlobalFunction(JSContext* ctx, JSCFunction cFunc, const char* name, const int paramNum) +{ + JSValue global = JS_GetGlobalObject(ctx); + JSValue jsFuncVal = JS_NewCFunction2(ctx, cFunc, name, paramNum, JS_CFUNC_generic, 0); + JS_SetPropertyStr(ctx, global, name, jsFuncVal); + JS_FreeValue(ctx, global); +} + +thread_local std::stack QJSContext::s_qjsContextStack; + +JSContext* QJSContext::current() +{ + ACE_DCHECK(s_qjsContextStack.size() > 0 && + "QJSContext::current() called outside of the lifetime of a QJSContext::Scope " + "object. Did you forget QJSContext::Scope scope(ctx); ?"); + return s_qjsContextStack.top(); +} + +QJSContext::Scope::Scope(JSContext* ctx) +{ + s_qjsContextStack.push(ctx); +} + +QJSContext::Scope::~Scope() +{ + s_qjsContextStack.pop(); +} + +QjsHandleScope::QjsHandleScope(JSContext* ctx) +{ + ACE_DCHECK(ctx != nullptr); + static int scopeId = 0; + scopeId_ = scopeId++; + context_ = ctx; + qjsHandleScopeStack.push(this); +} + +QjsHandleScope::~QjsHandleScope() +{ + qjsHandleScopeStack.pop(); + for (const auto& val : jsValues_) { + JS_FreeValue(context_, val); + } +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/js_frontend/engine/quickjs/qjs_utils.h b/frameworks/bridge/js_frontend/engine/quickjs/qjs_utils.h new file mode 100644 index 00000000..f41ac98b --- /dev/null +++ b/frameworks/bridge/js_frontend/engine/quickjs/qjs_utils.h @@ -0,0 +1,181 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_QUICKJS_QJS_UTILS_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_QUICKJS_QJS_UTILS_H + +#include +#include +#include +#include + +#include "frameworks/bridge/js_frontend/js_ace_page.h" +#ifdef __cplusplus +extern "C" { +#endif +#include "third_party/quickjs/cutils.h" +#include "third_party/quickjs/quickjs-libc.h" +#ifdef __cplusplus +} +#endif + +namespace OHOS::Ace::Framework { + +enum class JsErrorType { + JS_CRASH = 0, + FIRE_EVENT_ERROR, + EVAL_BUFFER_ERROR, + READ_OBJECT_ERROR, + DESTROY_APP_ERROR, + DESTROY_PAGE_ERROR, + LOAD_JS_BUNDLE_ERROR, + COMPILE_AND_RUN_BUNDLE_ERROR, + LOAD_JS_FRAMEWORK_ERROR, +}; + +class ScopedString { +public: + ScopedString(JSContext* ctx, JSValueConst val); + ScopedString(JSContext* ctx, JSAtom val); + ScopedString(JSValueConst val); + ScopedString(JSAtom val); + ScopedString(const ScopedString& rhs) = delete; + ScopedString& operator=(const ScopedString& rhs) = delete; + ScopedString(ScopedString&& rhs) = delete; + ScopedString& operator=(ScopedString&& rhs) = delete; + ~ScopedString(); + + bool operator==(const char* rhs); + bool operator==(const std::string& rhs); + bool operator==(const ScopedString& rhs); + + const char* get() const; + std::string str(); + + static std::string Stringify(JSValueConst val); + + operator std::string() const; + +private: + JSContext* context_ = nullptr; + const char* stringValue_ = nullptr; +}; + +class QjsUtils { +public: + using FilterFunction = bool (*)(std::string); + + static JSValue NewStringLen(JSContext* ctx, const char* str, size_t len); + static JSValue NewString(JSContext* ctx, const char* str); + static JSValue ParseJSON(JSContext* ctx, const char* buf, size_t bufLen, const char* filename = nullptr); + static JSValue NewObject(JSContext* ctx); + static JSValue Call(JSContext* ctx, JSValueConst funcObj, JSValueConst thisObj, int32_t argc, JSValueConst* argv); + static JSValue Eval(JSContext* ctx, const char* input, size_t inputLen, const char* filename, int32_t evalFlags); + static JSValue GetPropertyStr(JSContext* ctx, JSValueConst thisObj, const char* prop); + static int32_t JsGetArrayLength(JSContext* ctx, JSValueConst arrayObject); + static void JsStdDumpErrorAce(JSContext* ctx, JsErrorType errorType = JsErrorType::JS_CRASH, int32_t instanceId = 0, + const char* pageUrl = nullptr, const RefPtr& page = nullptr); + static void JsDumpMemoryStats(JSContext* ctx); + static std::vector GetObjectKeys(JSContext* ctx, JSValueConst obj, int flags = JS_GPN_STRING_MASK); + static std::vector GetObjectKeys(JSValueConst obj, int flags = JS_GPN_STRING_MASK); + static std::vector GetFilteredObjectKeys( + JSContext* ctx, JSValueConst obj, FilterFunction filterFunc, int flags = JS_GPN_STRING_MASK); + static bool CheckAndGetJsProperty(JSContext* ctx, JSValueConst jsObj, JSPropertyEnum** pTab, uint32_t* len); + static std::string typeAsString(JSValueConst val); + static JSValue GetArgvSafe(int idx, int argc, JSValueConst* argv); + static void DefineGlobalFunction(JSContext* ctx, JSCFunction jsFunc, const char* name, const int paramNum); + static std::string JsDumpSourceFile(const char* stack, const RefPtr& pageMap, + const RefPtr& appMap); +}; + +/** + * @brief A class maintaining a stack of JSContext pointers. + * + */ +class QJSContext { +public: + /** + * @brief A class that acquires a JSContext to be retrieved further in a call stack by QJSContext::current(). + * + * This is used to relieve the QJS embedder of passing JSContext* as an argument. + * + * @note QJSContext::Scope is thread-safe, but not reentrant. + */ + class Scope { + public: + Scope(JSContext* ctx); + ~Scope(); + + static void* operator new(size_t) = delete; + static void* operator new[](size_t) = delete; + static void operator delete(void*) = delete; + static void operator delete[](void*) = delete; + Scope(const Scope&) = delete; + void operator=(const Scope&) = delete; + }; + + /** + * @brief Get the context on the top of the stack + * + * @return JSContext* + */ + static JSContext* current(); + + static void* operator new(size_t) = delete; + static void* operator new[](size_t) = delete; + static void operator delete(void*) = delete; + static void operator delete[](void*) = delete; + QJSContext(const QJSContext&) = delete; + void operator=(const QJSContext&) = delete; + +private: + static thread_local std::stack s_qjsContextStack; +}; + +class QjsHandleScope { +public: + QjsHandleScope(JSContext* ctx); + ~QjsHandleScope(); + + static void* operator new(size_t) = delete; + static void* operator new[](size_t) = delete; + static void operator delete(void*) = delete; + static void operator delete[](void*) = delete; + +private: + friend class QjsUtils; + static thread_local std::stack qjsHandleScopeStack; + + int32_t scopeId_ = 0; + std::vector jsValues_; + JSContext* context_ = nullptr; +}; + +inline bool CheckAndGetJsProperty(JSContext* ctx, JSValueConst fromMap, JSPropertyEnum** pTab, uint32_t* len) +{ + if (!JS_IsObject(fromMap)) { + return false; + } + + JS_GetOwnPropertyNames(ctx, pTab, len, fromMap, JS_GPN_STRING_MASK); + if (*pTab == nullptr) { + return false; + } + return true; +} + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_QUICKJS_QJS_UTILS_H diff --git a/frameworks/bridge/js_frontend/engine/quickjs/stepper_bridge.cpp b/frameworks/bridge/js_frontend/engine/quickjs/stepper_bridge.cpp new file mode 100644 index 00000000..feb0635e --- /dev/null +++ b/frameworks/bridge/js_frontend/engine/quickjs/stepper_bridge.cpp @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/js_frontend/engine/quickjs/stepper_bridge.h" + +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace::Framework { + +void StepperBridge::GetAttrLabel(JSContext* ctx, JSValueConst valObject, StepperLabels& stepperLabel) +{ + JSPropertyEnum* pTab = nullptr; + uint32_t len = 0; + if (!CheckAndGetJsProperty(ctx, valObject, &pTab, &len)) { + return; + } + for (uint32_t i = 0; i < len; i++) { + const char* key = JS_AtomToCString(ctx, pTab[i].atom); + if (key == nullptr) { + JS_FreeAtom(ctx, pTab[i].atom); + LOGW("key is null. Ignoring!"); + continue; + } + JSValue val = JS_GetProperty(ctx, valObject, pTab[i].atom); + if (JS_IsNumber(val) || JS_IsBool(val) || JS_IsString(val)) { + ScopedString styleVal(ctx, val); + const char* valStr = styleVal.get(); + if (strcmp(key, DOM_STEPPER_LEFT_LABEL) == 0) { + stepperLabel.leftLabel = valStr; + } else if (strcmp(key, DOM_STEPPER_RIGHT_LABEL) == 0) { + stepperLabel.rightLabel = valStr; + } else if (strcmp(key, DOM_STEPPER_INITIAL_STATUS) == 0) { + stepperLabel.initialStatus = valStr; + } else { + LOGD("key : %{public}s unsupported. Ignoring!", key); + } + } else { + LOGD("value of unsupported type. Ignoring!"); + } + JS_FreeAtom(ctx, pTab[i].atom); + JS_FreeCString(ctx, key); + JS_FreeValue(ctx, val); + } + js_free(ctx, pTab); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/js_frontend/engine/quickjs/stepper_bridge.h b/frameworks/bridge/js_frontend/engine/quickjs/stepper_bridge.h new file mode 100644 index 00000000..53f6f2e7 --- /dev/null +++ b/frameworks/bridge/js_frontend/engine/quickjs/stepper_bridge.h @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_QUICKJS_STEPPER_BRIDGE_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_QUICKJS_STEPPER_BRIDGE_H + +#include "frameworks/bridge/common/dom/dom_stepper.h" +#include "frameworks/bridge/js_frontend/engine/quickjs/qjs_utils.h" + +namespace OHOS::Ace::Framework { + +class StepperBridge : virtual public AceType { + DECLARE_ACE_TYPE(StepperBridge, AceType) + +public: + void GetAttrLabel(JSContext* ctx, JSValueConst valObject, StepperLabels& stepperLabel); +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_ENGINE_QUICKJS_STEPPER_BRIDGE_H diff --git a/frameworks/bridge/js_frontend/frontend_delegate.h b/frameworks/bridge/js_frontend/frontend_delegate.h new file mode 100644 index 00000000..4ab421f2 --- /dev/null +++ b/frameworks/bridge/js_frontend/frontend_delegate.h @@ -0,0 +1,150 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_FRONTEND_DELEGATE_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_FRONTEND_DELEGATE_H + +#include + +#include "base/json/json_util.h" +#include "base/memory/ace_type.h" +#include "base/utils/noncopyable.h" +#include "core/event/ace_event_helper.h" +#include "core/pipeline/pipeline_context.h" +#include "frameworks/bridge/common/media_query/media_query_info.h" +#include "frameworks/bridge/js_frontend/engine/common/group_js_bridge.h" +#include "frameworks/bridge/js_frontend/engine/common/js_constants.h" +#include "frameworks/bridge/js_frontend/js_ace_page.h" + +namespace OHOS::Ace::Framework { + +// A virtual interface which must be implemented as a backing for +// FrontendDelegateImpl instances. +// +// This is the primary interface by which the JsFrontend delegates +// FrontendDelegateImpl behavior out to QjsEngine for js to native calls. +class FrontendDelegate : public AceType { + DECLARE_ACE_TYPE(FrontendDelegate, AceType); + +public: + FrontendDelegate() = default; + ~FrontendDelegate() override = default; + + virtual void AttachPipelineContext(const RefPtr& context) = 0; + virtual void SetAssetManager(const RefPtr& assetManager) = 0; + + // ---------------- + // system.router + // ---------------- + // Jump to the specified page. + virtual void Push(const std::string& uri, const std::string& params) = 0; + // Jump to the specified page, but current page will be removed from the stack. + virtual void Replace(const std::string& uri, const std::string& params) = 0; + // Back to specified page or the previous page if url not set. + virtual void Back(const std::string& uri) = 0; + // Clear all the pages in stack except the top page, that is current page. + virtual void Clear() = 0; + // Gets the number of pages in the page stack. + virtual int32_t GetStackSize() const = 0; + // Gets current page's states + virtual void GetState(int32_t& index, std::string& name, std::string& path) = 0; + + virtual void TriggerPageUpdate(int32_t pageId, bool directExecute = false) = 0; + + // posting js task from jsengine + virtual void PostJsTask(std::function&& task) = 0; + + // ---------------- + // system.app + // ---------------- + virtual const std::string& GetAppID() const = 0; + virtual const std::string& GetAppName() const = 0; + virtual const std::string& GetVersionName() const = 0; + virtual int32_t GetVersionCode() const = 0; + + // ---------------- + // system.prompt + // ---------------- + virtual void ShowToast(const std::string& message, int32_t duration, const std::string& bottom) = 0; + virtual void ShowDialog(const std::string& title, const std::string& message, + const std::vector>& buttons, bool autoCancel, + std::function&& callback, const std::set& callbacks) = 0; + + virtual Rect GetBoundingRectData(NodeId nodeId) = 0; + + // ---------------- + // system.configuration + // ---------------- + virtual void ChangeLocale(const std::string& language, const std::string& countryOrRegion) = 0; + + // ---------------- + // system.image + // ---------------- + virtual void HandleImage( + const std::string& src, std::function&& callback, const std::set& callbacks) = 0; + + // ---------------- + // internal.jsResult + // ---------------- + virtual void SetCallBackResult(const std::string& callBackId, const std::string& result) = 0; + + // ---------------- + // system.animation + // ---------------- + virtual void RequestAnimationFrame(const std::string& callbackId) = 0; + virtual void CancelAnimationFrame(const std::string& callbackId) = 0; + + virtual bool GetAssetContent(const std::string& url, std::string& content) = 0; + virtual bool GetAssetContent(const std::string& url, std::vector& content) = 0; + + virtual void WaitTimer(const std::string& callbackId, const std::string& delay, bool isInterval, bool isFirst) = 0; + virtual void ClearTimer(const std::string& callbackId) = 0; + + virtual void PostSyncTaskToPage(std::function&& task) = 0; + + virtual void AddTaskObserver(std::function&& task) = 0; + + virtual void RemoveTaskObserver() = 0; + + virtual void GetI18nData(std::unique_ptr& json) = 0; + + virtual void GetResourceConfiguration(std::unique_ptr& json) = 0; + + virtual void GetConfigurationCommon(const std::string& filePath, std::unique_ptr& data) = 0; + + virtual const RefPtr& GetMediaQueryInfoInstance() = 0; + + virtual void OnMediaQueryUpdate() = 0; + + virtual void RegisterFont(const std::string& familyName, const std::string& familySrc) = 0; + + virtual SingleTaskExecutor GetAnimationJsTask() = 0; + + virtual SingleTaskExecutor GetUiTask() = 0; + + virtual RefPtr GetPipelineContext() = 0; + + virtual const RefPtr& GetGroupJsBridge() = 0; + + virtual RefPtr GetPage(int32_t pageId) const = 0; + + virtual void* GetAbility() = 0; + + ACE_DISALLOW_COPY_AND_MOVE(FrontendDelegate); +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_FRONTEND_DELEGATE_H diff --git a/frameworks/bridge/js_frontend/frontend_delegate_impl.cpp b/frameworks/bridge/js_frontend/frontend_delegate_impl.cpp new file mode 100644 index 00000000..70d15ff0 --- /dev/null +++ b/frameworks/bridge/js_frontend/frontend_delegate_impl.cpp @@ -0,0 +1,1411 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "frameworks/bridge/js_frontend/frontend_delegate_impl.h" + +#include +#include + +#include "ability.h" +#include "ability_info.h" +#include "base/log/ace_trace.h" +#include "base/log/event_report.h" +#include "base/utils/utils.h" +#include "core/common/ace_application_info.h" +#include "core/common/platform_bridge.h" +#include "core/components/dialog/dialog_component.h" +#include "core/components/toast/toast_component.h" +#include "frameworks/bridge/common/manifest/manifest_parser.h" +#include "frameworks/bridge/common/utils/utils.h" +#include "frameworks/bridge/js_frontend/js_ace_page.h" + +namespace OHOS::Ace::Framework { +namespace { + +constexpr int32_t INVALID_PAGE_ID = -1; +constexpr int32_t MAX_ROUTER_STACK = 32; +constexpr int32_t TOAST_TIME_MAX = 10000; // ms +constexpr int32_t TOAST_TIME_DEFAULT = 1500; // ms +constexpr int32_t MAX_PAGE_ID_SIZE = sizeof(uint64_t) * 8; +constexpr int32_t NANO_TO_MILLI = 1000000; // nanosecond to millisecond +constexpr int32_t TO_MILLI = 1000; // second to millisecond +constexpr int32_t COMPATIBLE_VERSION = 4; + +const char MANIFEST_JSON[] = "manifest.json"; +const char FILE_TYPE_JSON[] = ".json"; +const char I18N_FOLDER[] = "i18n/"; +const char RESOURCES_FOLDER[] = "resources/"; +} // namespace + +int32_t FrontendDelegateImpl::GenerateNextPageId() +{ + for (int32_t idx = 0; idx < MAX_PAGE_ID_SIZE; ++idx) { + uint64_t bitMask = (1ULL << idx); + if ((bitMask & pageIdPool_.fetch_or(bitMask, std::memory_order_relaxed)) == 0) { + return idx; + } + } + return INVALID_PAGE_ID; +} + +void FrontendDelegateImpl::RecyclePageId(int32_t pageId) +{ + if (pageId < 0 && pageId >= MAX_PAGE_ID_SIZE) { + return; + } + uint64_t bitMask = (1ULL << pageId); + pageIdPool_.fetch_and(~bitMask, std::memory_order_relaxed); +} + +FrontendDelegateImpl::FrontendDelegateImpl(const FrontendDelegateImplBuilder& builder) + : loadJs_(builder.loadCallback), dispatcherCallback_(builder.transferCallback), + asyncEvent_(builder.asyncEventCallback), syncEvent_(builder.syncEventCallback), + updatePage_(builder.updatePageCallback), resetStagingPage_(builder.resetStagingPageCallback), + destroyPage_(builder.destroyPageCallback), destroyApplication_(builder.destroyApplicationCallback), + timer_(builder.timerCallback), mediaQueryCallback_(builder.mediaQueryCallback), + requestAnimationCallback_(builder.requestAnimationCallback), jsCallback_(builder.jsCallback), + manifestParser_(AceType::MakeRefPtr()), +#if !defined(WINDOWS_PLATFORM) and !defined(MAC_PLATFORM) + jsAccessibilityManager_(AceType::MakeRefPtr()), +#else + jsAccessibilityManager_(AceType::MakeRefPtr()), +#endif + ability_(builder.ability), + mediaQueryInfo_(AceType::MakeRefPtr()), taskExecutor_(builder.taskExecutor) +{} + +void FrontendDelegateImpl::ParseManifest() +{ + std::call_once(onceFlag_, [this]() { + std::string jsonContent; + if (!GetAssetContent(MANIFEST_JSON, jsonContent)) { + LOGE("RunPage parse manifest.json failed"); + EventReport::SendFormException(FormExcepType::RUN_PAGE_ERR); + return; + } + manifestParser_->Parse(jsonContent); + }); +} + +void FrontendDelegateImpl::RunPage(const std::string& url, const std::string& params) +{ + ACE_SCOPED_TRACE("FrontendDelegateImpl::RunPage"); + + LOGD("FrontendDelegateImpl RunPage url=%{private}s", url.c_str()); + ParseManifest(); + if (!url.empty()) { + mainPagePath_ = manifestParser_->GetRouter()->GetPagePath(url); + } else { + mainPagePath_ = manifestParser_->GetRouter()->GetEntry(); + } + LoadPage(GenerateNextPageId(), mainPagePath_, true, params); +} + +void FrontendDelegateImpl::ChangeLocale(const std::string& language, const std::string& countryOrRegion) +{ + LOGD("JsFrontend ChangeLocale"); + taskExecutor_->PostTask( + [language, countryOrRegion]() { AceApplicationInfo::GetInstance().ChangeLocale(language, countryOrRegion); }, + TaskExecutor::TaskType::PLATFORM); +} + +void FrontendDelegateImpl::GetI18nData(std::unique_ptr& json) +{ + auto data = JsonUtil::CreateArray(true); + GetConfigurationCommon(I18N_FOLDER, data); + auto i18nData = JsonUtil::Create(true); + i18nData->Put("resources", data); + json->Put("i18n", i18nData); +} + +void FrontendDelegateImpl::GetResourceConfiguration(std::unique_ptr& json) +{ + auto data = JsonUtil::CreateArray(true); + GetConfigurationCommon(RESOURCES_FOLDER, data); + json->Put("resourcesConfiguration", data); +} + +void FrontendDelegateImpl::GetConfigurationCommon(const std::string& filePath, std::unique_ptr& data) +{ + std::vector files; + if (!AceApplicationInfo::GetInstance().GetFiles(filePath, files)) { + LOGE("Get resources files fail!"); + return; + } + + std::vector fileNameList; + for (const auto& file : files) { + if (EndWith(file, FILE_TYPE_JSON)) { + fileNameList.emplace_back(file.substr(0, file.size() - (sizeof(FILE_TYPE_JSON) - 1))); + } + } + + std::vector priorityFileName; + if (filePath.compare(I18N_FOLDER) == 0) { + priorityFileName = AceApplicationInfo::GetInstance().GetLocaleFallback(fileNameList); + } + + for (const auto& fileName : priorityFileName) { + auto fileFullPath = filePath + fileName + std::string(FILE_TYPE_JSON); + std::string content; + if (GetAssetContent(fileFullPath, content)) { + auto fileData = ParseFileData(content); + if (fileData == nullptr) { + LOGW("parse %{private}s.json i18n content failed", filePath.c_str()); + } else { + data->Put(fileData); + } + } + } +} + +void FrontendDelegateImpl::OnJsCallback(const std::string& callbackId, const std::string& data) +{ + taskExecutor_->PostTask( + [weak = AceType::WeakClaim(this), callbackId, args = std::move(data)] { + auto delegate = weak.Upgrade(); + if (delegate) { + delegate->jsCallback_(callbackId, args); + } + }, + TaskExecutor::TaskType::JS); +} + +void FrontendDelegateImpl::SetJsMessageDispatcher(const RefPtr& dispatcher) const +{ + LOGD("JsFrontend SetJsMessageDispatcher"); + taskExecutor_->PostTask([dispatcherCallback = dispatcherCallback_, dispatcher] { dispatcherCallback(dispatcher); }, + TaskExecutor::TaskType::JS); +} + +void FrontendDelegateImpl::TransferComponentResponseData(int32_t callbackId, int32_t code, std::vector&& data) +{ + LOGD("JsFrontend TransferComponentResponseData"); + auto pipelineContext = pipelineContextHolder_.Get(); + WeakPtr contextWeak(pipelineContext); + taskExecutor_->PostTask( + [callbackId, data = std::move(data), contextWeak]() mutable { + auto context = contextWeak.Upgrade(); + if (!context) { + LOGE("context is null"); + } else if (!context->GetMessageBridge()) { + LOGE("messageBridge is null"); + } else { + context->GetMessageBridge()->HandleCallback(callbackId, std::move(data)); + } + }, + TaskExecutor::TaskType::UI); +} + +void FrontendDelegateImpl::TransferJsResponseData(int32_t callbackId, int32_t code, std::vector&& data) const +{ + LOGD("JsFrontend TransferJsResponseData"); + taskExecutor_->PostTask( + [callbackId, code, data = std::move(data), groupJsBridge = groupJsBridge_]() mutable { + if (groupJsBridge) { + groupJsBridge->TriggerModuleJsCallback(callbackId, code, std::move(data)); + } + }, + TaskExecutor::TaskType::JS); +} + +void FrontendDelegateImpl::TransferJsPluginGetError( + int32_t callbackId, int32_t errorCode, std::string&& errorMessage) const +{ + LOGD("JsFrontend TransferJsPluginGetError"); + taskExecutor_->PostTask( + [callbackId, errorCode, errorMessage = std::move(errorMessage), groupJsBridge = groupJsBridge_]() mutable { + if (groupJsBridge) { + groupJsBridge->TriggerModulePluginGetErrorCallback(callbackId, errorCode, std::move(errorMessage)); + } + }, + TaskExecutor::TaskType::JS); +} + +void FrontendDelegateImpl::TransferJsEventData(int32_t callbackId, int32_t code, std::vector&& data) const +{ + taskExecutor_->PostTask( + [callbackId, code, data = std::move(data), groupJsBridge = groupJsBridge_]() mutable { + if (groupJsBridge) { + groupJsBridge->TriggerEventJsCallback(callbackId, code, std::move(data)); + } + }, + TaskExecutor::TaskType::JS); +} + +void FrontendDelegateImpl::LoadPluginJsCode(std::string&& jsCode) const +{ + taskExecutor_->PostTask( + [jsCode = std::move(jsCode), groupJsBridge = groupJsBridge_]() mutable { + if (groupJsBridge) { + groupJsBridge->LoadPluginJsCode(std::move(jsCode)); + } + }, + TaskExecutor::TaskType::JS); +} + +bool FrontendDelegateImpl::OnPageBackPress() +{ + bool result = FireSyncEvent("_root", std::string("\"clickbackitem\","), std::string("")); + LOGD("OnPageBackPress: jsframework callback result: %{public}d", result); + return result; +} + +void FrontendDelegateImpl::OnActive() +{ + LOGD("JsFrontend onActive"); + FireAsyncEvent("_root", std::string("\"viewactive\",null,null"), std::string("")); +} + +void FrontendDelegateImpl::OnInactive() +{ + LOGD("JsFrontend OnInactive"); + FireAsyncEvent("_root", std::string("\"viewinactive\",null,null"), std::string("")); + // TODO: Deprecated + FireAsyncEvent("_root", std::string("\"viewsuspended\",null,null"), std::string("")); +} + +void FrontendDelegateImpl::OnBackGround() +{ + OnPageHide(); +} + +void FrontendDelegateImpl::OnForground() +{ + OnPageShow(); +} + +bool FrontendDelegateImpl::OnStartContinuation() +{ + return FireSyncEvent("_root", std::string("\"onStartContinuation\","), std::string("")); +} + +void FrontendDelegateImpl::OnCompleteContinuation(int32_t code) +{ + FireSyncEvent("_root", std::string("\"onCompleteContinuation\","), std::to_string(code)); +} + +void FrontendDelegateImpl::OnSaveData(std::string& data) +{ + std::string savedData; + FireSyncEvent("_root", std::string("\"onSaveData\","), std::string(""), savedData); + std::string pageUri = GetRunningPageUrl(); + data = std::string("{\"url\":\"").append(pageUri).append("\",\"__remoteData\":").append(savedData).append("}"); +} + +bool FrontendDelegateImpl::OnRestoreData(const std::string& data) +{ + LOGD("OnRestoreData: restores the user data to shareData from remote ability"); + return FireSyncEvent("_root", std::string("\"onRestoreData\","), data); +} + +void FrontendDelegateImpl::OnNewRequest(const std::string& data) +{ + FireSyncEvent("_root", std::string("\"onNewRequest\","), data); +} + +void FrontendDelegateImpl::CallPopPage() +{ + PopPage(); +} + +void FrontendDelegateImpl::ResetStagingPage() +{ + taskExecutor_->PostTask([resetStagingPage = resetStagingPage_] { resetStagingPage(); }, TaskExecutor::TaskType::JS); +} + +void FrontendDelegateImpl::OnApplicationDestroy(const std::string& packageName) +{ + taskExecutor_->PostSyncTask( + [destroyApplication = destroyApplication_, packageName] { destroyApplication(packageName); }, + TaskExecutor::TaskType::JS); +} + +void FrontendDelegateImpl::FireAsyncEvent( + const std::string& eventId, const std::string& param, const std::string& jsonArgs) +{ + LOGD("FireAsyncEvent eventId: %{public}s", eventId.c_str()); + std::string args = param; + args.append(",null").append(",null"); // callback and dom changes + if (!jsonArgs.empty()) { + args.append(",").append(jsonArgs); // method args + } + taskExecutor_->PostTask( + [weak = AceType::WeakClaim(this), eventId, args = std::move(args)] { + auto delegate = weak.Upgrade(); + if (delegate) { + delegate->asyncEvent_(eventId, args); + } + }, + TaskExecutor::TaskType::JS); +} + +bool FrontendDelegateImpl::FireSyncEvent( + const std::string& eventId, const std::string& param, const std::string& jsonArgs) +{ + std::string resultStr; + FireSyncEvent(eventId, param, jsonArgs, resultStr); + return (resultStr == "true"); +} + +void FrontendDelegateImpl::FireSyncEvent( + const std::string& eventId, const std::string& param, const std::string& jsonArgs, std::string& result) +{ + int32_t callbackId = callbackCnt_++; + std::string args = param; + args.append("{\"_callbackId\":\"").append(std::to_string(callbackId)).append("\"}").append(",null"); + if (!jsonArgs.empty()) { + args.append(",").append(jsonArgs); // method args + } + taskExecutor_->PostSyncTask( + [weak = AceType::WeakClaim(this), eventId, args = std::move(args)] { + auto delegate = weak.Upgrade(); + if (delegate) { + delegate->syncEvent_(eventId, args); + } + }, + TaskExecutor::TaskType::JS); + + result = jsCallBackResult_[callbackId]; + LOGD("FireSyncEvent eventId: %{public}s, callbackId: %{public}d", eventId.c_str(), callbackId); + jsCallBackResult_.erase(callbackId); +} + +void FrontendDelegateImpl::FireAccessibilityEvent(const AccessibilityEvent& accessibilityEvent) +{ + jsAccessibilityManager_->SendAccessibilityAsyncEvent(accessibilityEvent); +} + +void FrontendDelegateImpl::InitializeAccessibilityCallback() +{ + jsAccessibilityManager_->InitializeCallback(); +} + +// Start FrontendDelegate overrides. +void FrontendDelegateImpl::Push(const std::string& uri, const std::string& params) +{ + if (uri.empty()) { + LOGE("router.Push uri is empty"); + return; + } + if (isRouteStackFull_) { + LOGE("the router stack has reached its max size, you can't push any more pages."); + EventReport::SendPageRouterException(PageRouterExcepType::PAGE_STACK_OVERFLOW_ERR, uri); + return; + } + std::string pagePath = manifestParser_->GetRouter()->GetPagePath(uri); + LOGD("router.Push pagePath = %{private}s", pagePath.c_str()); + if (!pagePath.empty()) { + LoadPage(GenerateNextPageId(), pagePath, false, params); + } else { + LOGW("this uri not support in route push."); + } +} + +void FrontendDelegateImpl::Replace(const std::string& uri, const std::string& params) +{ + if (uri.empty()) { + LOGE("router.Replace uri is empty"); + return; + } + std::string pagePath = manifestParser_->GetRouter()->GetPagePath(uri); + LOGD("router.Replace pagePath = %{private}s", pagePath.c_str()); + if (!pagePath.empty()) { + LoadReplacePage(GenerateNextPageId(), pagePath, params); + } else { + LOGW("this uri not support in route replace."); + } +} + +void FrontendDelegateImpl::Back(const std::string& uri) +{ + LOGD("router.Back path = %{private}s", uri.c_str()); + if (uri.empty()) { + PopPage(); + } else { + std::string pagePath = manifestParser_->GetRouter()->GetPagePath(uri); + LOGD("router.Back pagePath = %{private}s", pagePath.c_str()); + if (!pagePath.empty()) { + PopToPage(pagePath); + } else { + LOGW("this uri not support in route Back."); + } + } + + auto context = pipelineContextHolder_.Get(); + if (context) { + context->NotifyRouterBackDismiss(); + } +} + +void FrontendDelegateImpl::Clear() +{ + ClearInvisiblePages(); +} + +int32_t FrontendDelegateImpl::GetStackSize() const +{ + std::lock_guard lock(mutex_); + return static_cast(pageRouteStack_.size()); +} + +void FrontendDelegateImpl::GetState(int32_t& index, std::string& name, std::string& path) +{ + std::string url; + { + std::lock_guard lock(mutex_); + if (pageRouteStack_.empty()) { + return; + } + index = static_cast(pageRouteStack_.size()); + url = pageRouteStack_.back().url; + } + auto pos = url.rfind(".js"); + if (pos == url.length() - 3) { + url = url.substr(0, pos); + } + pos = url.rfind("/"); + if (pos != std::string::npos) { + name = url.substr(pos + 1); + path = url.substr(0, pos + 1); + } +} + +void FrontendDelegateImpl::TriggerPageUpdate(int32_t pageId, bool directExecute) +{ + auto page = GetPage(pageId); + if (!page) { + return; + } + + auto jsPage = AceType::DynamicCast(page); + ACE_DCHECK(jsPage); + + // Pop all JS command and execute them in UI thread. + auto jsCommands = std::make_shared>>(); + jsPage->PopAllCommands(*jsCommands); + + auto pipelineContext = pipelineContextHolder_.Get(); + WeakPtr jsPageWeak(jsPage); + WeakPtr contextWeak(pipelineContext); + auto updateTask = [weak = AceType::WeakClaim(this), jsPageWeak, contextWeak, jsCommands] { + ACE_SCOPED_TRACE("FlushUpdateCommands"); + auto delegate = weak.Upgrade(); + auto jsPage = jsPageWeak.Upgrade(); + auto context = contextWeak.Upgrade(); + if (!delegate || !jsPage || !context) { + LOGE("Page update failed. page or context is null."); + EventReport::SendPageRouterException(PageRouterExcepType::UPDATE_PAGE_ERR); + return; + } +#if !defined(WINDOWS_PLATFORM) and !defined(MAC_PLATFORM) + bool useLiteStyle = delegate->GetWindowConfig().minSdkVersion < COMPATIBLE_VERSION && context->UseLiteStyle(); +#else + bool useLiteStyle = + delegate->GetWindowConfig().minSdkVersion < COMPATIBLE_VERSION && delegate->GetWindowConfig().useLiteStyle; +#endif + jsPage->SetUseLiteStyle(useLiteStyle); + jsPage->SetUseBoxWrap(delegate->GetWindowConfig().boxWrap); + // Flush all JS commands. + for (const auto& command : *jsCommands) { + command->Execute(jsPage); + } + if (jsPage->GetDomDocument()) { + jsPage->GetDomDocument()->HandleComponentPostBinding(); + } + if (context->GetAccessibilityManager()) { + context->GetAccessibilityManager()->HandleComponentPostBinding(); + } + + jsPage->ClearShowCommand(); + std::vector dirtyNodes; + jsPage->PopAllDirtyNodes(dirtyNodes); + for (auto nodeId : dirtyNodes) { + auto patchComponent = jsPage->BuildPagePatch(nodeId); + if (patchComponent) { + context->ScheduleUpdate(patchComponent); + } + } + }; + + taskExecutor_->PostTask( + [updateTask, pipelineContext, directExecute]() { + pipelineContext->AddPageUpdateTask(std::move(updateTask), directExecute); + }, + TaskExecutor::TaskType::UI); +} + +void FrontendDelegateImpl::PostJsTask(std::function&& task) +{ + taskExecutor_->PostTask(task, TaskExecutor::TaskType::JS); +} + +const std::string& FrontendDelegateImpl::GetAppID() const +{ + return manifestParser_->GetAppInfo()->GetAppID(); +} + +const std::string& FrontendDelegateImpl::GetAppName() const +{ + return manifestParser_->GetAppInfo()->GetAppName(); +} + +const std::string& FrontendDelegateImpl::GetVersionName() const +{ + return manifestParser_->GetAppInfo()->GetVersionName(); +} + +int32_t FrontendDelegateImpl::GetVersionCode() const +{ + return manifestParser_->GetAppInfo()->GetVersionCode(); +} + +const WindowConfig& FrontendDelegateImpl::GetWindowConfig() +{ + ParseManifest(); + return manifestParser_->GetWindowConfig(); +} + +void FrontendDelegateImpl::ShowToast(const std::string& message, int32_t duration, const std::string& bottom) +{ + LOGD("FrontendDelegateImpl ShowToast."); + int32_t durationTime = std::clamp(duration, TOAST_TIME_DEFAULT, TOAST_TIME_MAX); + auto pipelineContext = pipelineContextHolder_.Get(); + bool isRightToLeft = AceApplicationInfo::GetInstance().IsRightToLeft(); + taskExecutor_->PostTask( + [durationTime, message, bottom, isRightToLeft, context = pipelineContext] { + ToastComponent::GetInstance().Show(context, message, durationTime, bottom, isRightToLeft); + }, + TaskExecutor::TaskType::UI); +} + +Rect FrontendDelegateImpl::GetBoundingRectData(NodeId nodeId) +{ + Rect rect; + auto task = [context = pipelineContextHolder_.Get(), nodeId, &rect]() { + context->GetBoundingRectData(nodeId, rect); + }; + PostSyncTaskToPage(task); + return rect; +} + +void FrontendDelegateImpl::ShowDialog(const std::string& title, const std::string& message, + const std::vector>& buttons, bool autoCancel, + std::function&& callback, const std::set& callbacks) +{ + if (!taskExecutor_) { + LOGE("task executor is null."); + return; + } + + std::unordered_map callbackMarkers; + if (callbacks.find(COMMON_SUCCESS) != callbacks.end()) { + auto successEventMarker = BackEndEventManager::GetInstance().GetAvailableMarker(); + BackEndEventManager::GetInstance().BindBackendEvent( + successEventMarker, [callback, taskExecutor = taskExecutor_](int32_t successType) { + taskExecutor->PostTask( + [callback, successType]() { callback(0, successType); }, TaskExecutor::TaskType::JS); + }); + callbackMarkers.emplace(COMMON_SUCCESS, successEventMarker); + } + + if (callbacks.find(COMMON_CANCEL) != callbacks.end()) { + auto cancelEventMarker = BackEndEventManager::GetInstance().GetAvailableMarker(); + BackEndEventManager::GetInstance().BindBackendEvent( + cancelEventMarker, [callback, taskExecutor = taskExecutor_] { + taskExecutor->PostTask([callback]() { callback(1, 0); }, TaskExecutor::TaskType::JS); + }); + callbackMarkers.emplace(COMMON_CANCEL, cancelEventMarker); + } + + if (callbacks.find(COMMON_COMPLETE) != callbacks.end()) { + auto completeEventMarker = BackEndEventManager::GetInstance().GetAvailableMarker(); + BackEndEventManager::GetInstance().BindBackendEvent( + completeEventMarker, [callback, taskExecutor = taskExecutor_] { + taskExecutor->PostTask([callback]() { callback(2, 0); }, TaskExecutor::TaskType::JS); + }); + callbackMarkers.emplace(COMMON_COMPLETE, completeEventMarker); + } + + DialogProperties dialogProperties = { + .title = title, + .content = message, + .autoCancel = autoCancel, + .buttons = buttons, + .callbacks = std::move(callbackMarkers), + }; + taskExecutor_->PostTask( + [context = pipelineContextHolder_.Get(), dialogProperties, + isRightToLeft = AceApplicationInfo::GetInstance().IsRightToLeft()]() { + if (context) { + context->ShowDialog(dialogProperties, isRightToLeft); + } + }, + TaskExecutor::TaskType::UI); +} + +void FrontendDelegateImpl::SetCallBackResult(const std::string& callBackId, const std::string& result) +{ + jsCallBackResult_.try_emplace(StringToInt(callBackId), result); +} + +void FrontendDelegateImpl::WaitTimer( + const std::string& callbackId, const std::string& delay, bool isInterval, bool isFirst) +{ + if (!isFirst) { + auto timeoutTaskIter = timeoutTaskMap_.find(callbackId); + // If not find the callbackId in map, means this timer already was removed, + // no need create a new cancelableTimer again. + if (timeoutTaskIter == timeoutTaskMap_.end()) { + return; + } + } + + int32_t delayTime = StringToInt(delay); + // CancelableCallback class can only be executed once. + CancelableCallback cancelableTimer; + cancelableTimer.Reset([callbackId, delay, isInterval, call = timer_] { call(callbackId, delay, isInterval); }); + auto result = timeoutTaskMap_.try_emplace(callbackId, cancelableTimer); + if (!result.second) { + result.first->second = cancelableTimer; + } + taskExecutor_->PostDelayedTask(cancelableTimer, TaskExecutor::TaskType::JS, delayTime); +} + +void FrontendDelegateImpl::ClearTimer(const std::string& callbackId) +{ + auto timeoutTaskIter = timeoutTaskMap_.find(callbackId); + if (timeoutTaskIter != timeoutTaskMap_.end()) { + timeoutTaskIter->second.Cancel(); + timeoutTaskMap_.erase(timeoutTaskIter); + } else { + LOGW("ClearTimer callbackId not found"); + } +} + +void FrontendDelegateImpl::PostSyncTaskToPage(std::function&& task) +{ + pipelineContextHolder_.Get(); // Wait until Pipeline Context is attached. + taskExecutor_->PostSyncTask(task, TaskExecutor::TaskType::UI); +} + +void FrontendDelegateImpl::AddTaskObserver(std::function&& task) +{ + taskExecutor_->AddTaskObserver(std::move(task)); +} + +void FrontendDelegateImpl::RemoveTaskObserver() +{ + taskExecutor_->RemoveTaskObserver(); +} + +bool FrontendDelegateImpl::GetAssetContent(const std::string& url, std::string& content) +{ + return GetAssetContentImpl(assetManager_, url, content); +} + +bool FrontendDelegateImpl::GetAssetContent(const std::string& url, std::vector& content) +{ + return GetAssetContentImpl(assetManager_, url, content); +} + +void FrontendDelegateImpl::LoadPage(int32_t pageId, const std::string& url, bool isMainPage, const std::string& params) +{ + LOGD("FrontendDelegateImpl LoadPage[%{private}d]: %{private}s.", pageId, url.c_str()); + if (pageId == INVALID_PAGE_ID) { + LOGE("FrontendDelegateImpl, invalid page id"); + EventReport::SendPageRouterException(PageRouterExcepType::LOAD_PAGE_ERR, url); + return; + } + + std::unique_lock lock(loadPageMutex_); + if (isStagingPageExist_) { + if (condition_.wait_for(lock, std::chrono::seconds(1)) == std::cv_status::timeout) { + LOGE("FrontendDelegateImpl, load page failed, waiting for current page loading finish."); + return; + } + } + + isStagingPageExist_ = true; + auto document = AceType::MakeRefPtr(pageId); + auto page = AceType::MakeRefPtr(pageId, document, url); + page->SetPageParams(params); + page->SetFlushCallback([weak = AceType::WeakClaim(this), isMainPage](const RefPtr& acePage) { + auto delegate = weak.Upgrade(); + if (delegate && acePage) { + delegate->FlushPageCommand(acePage, acePage->GetUrl(), isMainPage); + } + }); + taskExecutor_->PostTask( + [weak = AceType::WeakClaim(this), page, url, isMainPage] { + auto delegate = weak.Upgrade(); + if (!delegate) { + return; + } + delegate->loadJs_(url, page, isMainPage); + page->FlushCommands(); + // just make sure the pipelineContext is created. + delegate->pipelineContextHolder_.Get(); + delegate->taskExecutor_->PostTask( + [weak, page] { + auto delegate = weak.Upgrade(); + if (delegate && delegate->pipelineContextHolder_.Get()) { + delegate->pipelineContextHolder_.Get()->FlushFocus(); + } + if (page->GetDomDocument()) { + page->GetDomDocument()->HandlePageLoadFinish(); + } + }, + TaskExecutor::TaskType::UI); + }, + TaskExecutor::TaskType::JS); +} + +void FrontendDelegateImpl::OnSurfaceChanged() +{ + if (mediaQueryInfo_->GetIsInit()) { + mediaQueryInfo_->SetIsInit(false); +#if !defined(WINDOWS_PLATFORM) and !defined(MAC_PLATFORM) + OnPageShow(); +#endif + } + mediaQueryInfo_->EnsureListenerIdValid(); + OnMediaQueryUpdate(); +} + +void FrontendDelegateImpl::OnMediaQueryUpdate() +{ + if (mediaQueryInfo_->GetIsInit()) { + return; + } + + taskExecutor_->PostTask( + [weak = AceType::WeakClaim(this)] { + auto delegate = weak.Upgrade(); + if (!delegate) { + return; + } + const auto& info = delegate->mediaQueryInfo_->GetMediaQueryInfo(); + // request css mediaquery + std::string param("\"viewsizechanged\","); + param.append(info); + delegate->asyncEvent_("_root", param); + + // request js mediaquery + const auto& listenerId = delegate->mediaQueryInfo_->GetListenerId(); + if (listenerId.empty()) { + return; + } + delegate->mediaQueryCallback_(listenerId, info); + delegate->mediaQueryInfo_->ResetListenerId(); + }, + TaskExecutor::TaskType::JS); +} + +void FrontendDelegateImpl::OnPageReady(const RefPtr& page, const std::string& url, bool isMainPage) +{ + LOGI("OnPageReady url = %{private}s", url.c_str()); + // Pop all JS command and execute them in UI thread. + auto jsCommands = std::make_shared>>(); + page->PopAllCommands(*jsCommands); + + auto pipelineContext = pipelineContextHolder_.Get(); + page->SetPipelineContext(pipelineContext); + taskExecutor_->PostTask( + [weak = AceType::WeakClaim(this), page, url, jsCommands, isMainPage] { + auto delegate = weak.Upgrade(); + if (!delegate) { + return; + } + std::unique_lock lock(delegate->loadPageMutex_); + delegate->SetCurrentReadyPage(page); + auto pipelineContext = delegate->pipelineContextHolder_.Get(); +#if !defined(WINDOWS_PLATFORM) and !defined(MAC_PLATFORM) + bool useLiteStyle = + delegate->GetWindowConfig().minSdkVersion < COMPATIBLE_VERSION && pipelineContext->UseLiteStyle(); +#else + bool useLiteStyle = delegate->GetWindowConfig().minSdkVersion < COMPATIBLE_VERSION && + delegate->GetWindowConfig().useLiteStyle; +#endif + page->SetUseLiteStyle(useLiteStyle); + page->SetUseBoxWrap(delegate->GetWindowConfig().boxWrap); + // Flush all JS commands. + for (const auto& command : *jsCommands) { + command->Execute(page); + } + // Just clear all dirty nodes. + page->ClearAllDirtyNodes(); + if (page->GetDomDocument()) { + page->GetDomDocument()->HandleComponentPostBinding(); + } + if (pipelineContext->GetAccessibilityManager()) { + pipelineContext->GetAccessibilityManager()->HandleComponentPostBinding(); + } + if (pipelineContext->CanPushPage()) { + if (!isMainPage) { + delegate->OnPageHide(); + } + pipelineContext->PushPage(page->BuildPage(url)); + delegate->OnPushPageSuccess(page, url); + delegate->SetCurrentPage(page->GetPageId()); + delegate->OnMediaQueryUpdate(); + } else { + // This page has been loaded but become useless now, the corresponding js instance + // must be destroyed to avoid memory leak. + delegate->OnPageDestroy(page->GetPageId()); + delegate->ResetStagingPage(); + } + delegate->isStagingPageExist_ = false; + delegate->condition_.notify_one(); +#if defined(WINDOWS_PLATFORM) || defined(MAC_PLATFORM) + if (isMainPage) { + delegate->OnPageShow(); + } +#endif + }, + TaskExecutor::TaskType::UI); +} + +void FrontendDelegateImpl::FlushPageCommand(const RefPtr& page, const std::string& url, bool isMainPage) +{ + if (!page) { + return; + } + LOGI("FlushPageCommand FragmentCount(%{public}d)", page->FragmentCount()); + if (page->FragmentCount() == 1) { + OnPageReady(page, url, isMainPage); + } else { + TriggerPageUpdate(page->GetPageId()); + } +} + +void FrontendDelegateImpl::AddPageLocked(const RefPtr& page) +{ + auto result = pageMap_.try_emplace(page->GetPageId(), page); + if (!result.second) { + LOGW("the page has already in the map"); + } +} + +void FrontendDelegateImpl::SetCurrentPage(int32_t pageId) +{ + LOGD("FrontendDelegateImpl SetCurrentPage pageId=%{private}d", pageId); + auto page = GetPage(pageId); + if (page != nullptr) { + jsAccessibilityManager_->SetRunningPage(page); + taskExecutor_->PostTask([updatePage = updatePage_, page] { updatePage(page); }, TaskExecutor::TaskType::JS); + } else { + LOGE("FrontendDelegateImpl SetCurrentPage page is null."); + } +} + +void FrontendDelegateImpl::OnPushPageSuccess(const RefPtr& page, const std::string& url) +{ + std::lock_guard lock(mutex_); + AddPageLocked(page); + pageRouteStack_.emplace_back(PageInfo { page->GetPageId(), url }); + if (pageRouteStack_.size() >= MAX_ROUTER_STACK) { + isRouteStackFull_ = true; + EventReport::SendPageRouterException(PageRouterExcepType::PAGE_STACK_OVERFLOW_ERR, page->GetUrl()); + } + LOGI("OnPushPageSuccess size=%{private}zu,pageId=%{private}d,url=%{private}s", pageRouteStack_.size(), + pageRouteStack_.back().pageId, pageRouteStack_.back().url.c_str()); +} + +void FrontendDelegateImpl::OnPopToPageSuccess(const std::string& url) +{ + std::lock_guard lock(mutex_); + while (!pageRouteStack_.empty()) { + if (pageRouteStack_.back().url == url) { + break; + } + OnPageDestroy(pageRouteStack_.back().pageId); + pageMap_.erase(pageRouteStack_.back().pageId); + pageRouteStack_.pop_back(); + } + if (isRouteStackFull_) { + isRouteStackFull_ = false; + } +} + +void FrontendDelegateImpl::PopToPage(const std::string& url) +{ + LOGD("FrontendDelegateImpl PopToPage url = %{private}s", url.c_str()); + taskExecutor_->PostTask( + [weak = AceType::WeakClaim(this), url] { + auto delegate = weak.Upgrade(); + if (!delegate) { + return; + } + auto pageId = delegate->GetPageIdByUrl(url); + if (pageId == INVALID_PAGE_ID) { + return; + } + auto pipelineContext = delegate->pipelineContextHolder_.Get(); + if (!pipelineContext->CanPopPage()) { + delegate->ResetStagingPage(); + return; + } + delegate->OnPageHide(); + pipelineContext->RemovePageTransitionListener(delegate->pageTransitionListenerId_); + delegate->pageTransitionListenerId_ = pipelineContext->AddPageTransitionListener( + [weak, url, pageId]( + const TransitionEvent& event, const WeakPtr& in, const WeakPtr& out) { + auto delegate = weak.Upgrade(); + if (delegate) { + delegate->PopToPageTransitionListener(event, url, pageId); + } + }); + pipelineContext->PopToPage(pageId); + }, + TaskExecutor::TaskType::UI); +} + +void FrontendDelegateImpl::PopToPageTransitionListener( + const TransitionEvent& event, const std::string& url, int32_t pageId) +{ + if (event == TransitionEvent::POP_END) { + OnPopToPageSuccess(url); + SetCurrentPage(pageId); + OnPageShow(); + OnMediaQueryUpdate(); + } +} + +int32_t FrontendDelegateImpl::OnPopPageSuccess() +{ + std::lock_guard lock(mutex_); + pageMap_.erase(pageRouteStack_.back().pageId); + pageRouteStack_.pop_back(); + if (isRouteStackFull_) { + isRouteStackFull_ = false; + } + if (!pageRouteStack_.empty()) { + return pageRouteStack_.back().pageId; + } + return INVALID_PAGE_ID; +} + +void FrontendDelegateImpl::PopPage() +{ + taskExecutor_->PostTask( + [weak = AceType::WeakClaim(this)] { + auto delegate = weak.Upgrade(); + if (!delegate) { + return; + } + auto pipelineContext = delegate->pipelineContextHolder_.Get(); + if (delegate->GetStackSize() == 1) { + auto ability = static_cast(delegate->ability_); + std::shared_ptr info = ability->GetAbilityInfo(); + if (info != nullptr && info->isLauncherAbility) { + LOGW("launcher ability, return"); + return; + } +#if !defined(WINDOWS_PLATFORM) and !defined(MAC_PLATFORM) + delegate->OnPageHide(); + delegate->OnPageDestroy(delegate->GetRunningPageId()); + delegate->OnPopPageSuccess(); + pipelineContext->Finish(); +#else + LOGW("Can't back because this is the last page!"); +#endif + return; + } + if (!pipelineContext->CanPopPage()) { + delegate->ResetStagingPage(); + return; + } + delegate->OnPageHide(); + pipelineContext->RemovePageTransitionListener(delegate->pageTransitionListenerId_); + delegate->pageTransitionListenerId_ = pipelineContext->AddPageTransitionListener( + [weak, destroyPageId = delegate->GetRunningPageId()]( + const TransitionEvent& event, const WeakPtr& in, const WeakPtr& out) { + auto delegate = weak.Upgrade(); + if (delegate) { + delegate->PopPageTransitionListener(event, destroyPageId); + } + }); + pipelineContext->PopPage(); + }, + TaskExecutor::TaskType::UI); +} + +void FrontendDelegateImpl::PopPageTransitionListener(const TransitionEvent& event, int32_t destroyPageId) +{ + if (event == TransitionEvent::POP_END) { + OnPageDestroy(destroyPageId); + auto pageId = OnPopPageSuccess(); + SetCurrentPage(pageId); + OnPageShow(); + OnMediaQueryUpdate(); + } +} + +int32_t FrontendDelegateImpl::OnClearInvisiblePagesSuccess() +{ + std::lock_guard lock(mutex_); + PageInfo pageInfo = std::move(pageRouteStack_.back()); + pageRouteStack_.pop_back(); + for (const auto& info : pageRouteStack_) { + OnPageDestroy(info.pageId); + pageMap_.erase(info.pageId); + } + pageRouteStack_.clear(); + int32_t resPageId = pageInfo.pageId; + pageRouteStack_.emplace_back(std::move(pageInfo)); + if (isRouteStackFull_) { + isRouteStackFull_ = false; + } + return resPageId; +} + +void FrontendDelegateImpl::ClearInvisiblePages() +{ + taskExecutor_->PostTask( + [weak = AceType::WeakClaim(this)] { + auto delegate = weak.Upgrade(); + if (!delegate) { + return; + } + auto pipelineContext = delegate->pipelineContextHolder_.Get(); + if (pipelineContext->ClearInvisiblePages()) { + auto pageId = delegate->OnClearInvisiblePagesSuccess(); + delegate->SetCurrentPage(pageId); + } + }, + TaskExecutor::TaskType::UI); +} + +void FrontendDelegateImpl::OnReplacePageSuccess(const RefPtr& page, const std::string& url) +{ + if (!page) { + return; + } + std::lock_guard lock(mutex_); + AddPageLocked(page); + if (!pageRouteStack_.empty()) { + pageMap_.erase(pageRouteStack_.back().pageId); + pageRouteStack_.pop_back(); + } + pageRouteStack_.emplace_back(PageInfo { page->GetPageId(), url }); +} + +void FrontendDelegateImpl::ReplacePage(const RefPtr& page, const std::string& url) +{ + LOGI("ReplacePage url = %{private}s", url.c_str()); + // Pop all JS command and execute them in UI thread. + auto jsCommands = std::make_shared>>(); + page->PopAllCommands(*jsCommands); + + auto pipelineContext = pipelineContextHolder_.Get(); + page->SetPipelineContext(pipelineContext); + taskExecutor_->PostTask( + [weak = AceType::WeakClaim(this), page, url, jsCommands] { + auto delegate = weak.Upgrade(); + if (!delegate) { + return; + } + std::unique_lock lock(delegate->loadPageMutex_); + auto pipelineContext = delegate->pipelineContextHolder_.Get(); +#if !defined(WINDOWS_PLATFORM) and !defined(MAC_PLATFORM) + bool useLiteStyle = + delegate->GetWindowConfig().minSdkVersion < COMPATIBLE_VERSION && pipelineContext->UseLiteStyle(); +#else + bool useLiteStyle = delegate->GetWindowConfig().minSdkVersion < COMPATIBLE_VERSION && + delegate->GetWindowConfig().useLiteStyle; +#endif + page->SetUseLiteStyle(useLiteStyle); + page->SetUseBoxWrap(delegate->GetWindowConfig().boxWrap); + // Flush all JS commands. + for (const auto& command : *jsCommands) { + command->Execute(page); + } + // Just clear all dirty nodes. + page->ClearAllDirtyNodes(); + page->GetDomDocument()->HandleComponentPostBinding(); + pipelineContext->GetAccessibilityManager()->HandleComponentPostBinding(); + if (pipelineContext->CanReplacePage()) { + delegate->OnPageHide(); + delegate->OnPageDestroy(delegate->GetRunningPageId()); + pipelineContext->ReplacePage(page->BuildPage(url)); + delegate->OnReplacePageSuccess(page, url); + delegate->SetCurrentPage(page->GetPageId()); + delegate->OnMediaQueryUpdate(); + } else { + // This page has been loaded but become useless now, the corresponding js instance + // must be destroyed to avoid memory leak. + delegate->OnPageDestroy(page->GetPageId()); + delegate->ResetStagingPage(); + } + delegate->isStagingPageExist_ = false; + delegate->condition_.notify_one(); + }, + TaskExecutor::TaskType::UI); +} + +void FrontendDelegateImpl::LoadReplacePage(int32_t pageId, const std::string& url, const std::string& params) +{ + LOGD("FrontendDelegateImpl LoadReplacePage[%{private}d]: %{private}s.", pageId, url.c_str()); + if (pageId == INVALID_PAGE_ID) { + LOGE("FrontendDelegateImpl, invalid page id"); + EventReport::SendPageRouterException(PageRouterExcepType::REPLACE_PAGE_ERR, url); + return; + } + + std::unique_lock lock(loadPageMutex_); + if (isStagingPageExist_) { + if (condition_.wait_for(lock, std::chrono::seconds(1)) == std::cv_status::timeout) { + LOGE("FrontendDelegateImpl, replace page failed, waiting for current page loading finish."); + EventReport::SendPageRouterException(PageRouterExcepType::REPLACE_PAGE_ERR, url); + return; + } + } + isStagingPageExist_ = true; + auto document = AceType::MakeRefPtr(pageId); + auto page = AceType::MakeRefPtr(pageId, document, url); + page->SetPageParams(params); + taskExecutor_->PostTask( + [page, url, weak = AceType::WeakClaim(this)] { + auto delegate = weak.Upgrade(); + if (delegate) { + delegate->loadJs_(url, page, false); + delegate->ReplacePage(page, url); + } + }, + TaskExecutor::TaskType::JS); +} + +void FrontendDelegateImpl::RebuildAllPages() +{ + std::unordered_map> pages; + { + std::lock_guard lock(mutex_); + pages.insert(pageMap_.begin(), pageMap_.end()); + } + for (const auto& [pageId, page] : pages) { + taskExecutor_->PostTask( + [weakPage = WeakPtr(page)] { + auto page = weakPage.Upgrade(); + if (!page) { + return; + } + auto domDoc = page->GetDomDocument(); + if (!domDoc) { + return; + } + auto rootNode = domDoc->GetDOMNodeById(domDoc->GetRootNodeId()); + if (!rootNode) { + return; + } + rootNode->UpdateStyleWithChildren(); + }, + TaskExecutor::TaskType::UI); + } +} + +void FrontendDelegateImpl::OnPageShow() +{ + FireAsyncEvent("_root", std::string("\"viewappear\",null,null"), std::string("")); +} + +void FrontendDelegateImpl::OnPageHide() +{ + FireAsyncEvent("_root", std::string("\"viewdisappear\",null,null"), std::string("")); +} + +void FrontendDelegateImpl::OnConfigurationUpdated(const std::string& configurationData) +{ + FireSyncEvent("_root", std::string("\"onConfigurationUpdated\","), configurationData); +} + +void FrontendDelegateImpl::OnPageDestroy(int32_t pageId) +{ + taskExecutor_->PostTask( + [weak = AceType::WeakClaim(this), pageId] { + auto delegate = weak.Upgrade(); + if (delegate) { + delegate->destroyPage_(pageId); + delegate->RecyclePageId(pageId); + } + }, + TaskExecutor::TaskType::JS); +} + +int32_t FrontendDelegateImpl::GetRunningPageId() const +{ + std::lock_guard lock(mutex_); + if (pageRouteStack_.empty()) { + return INVALID_PAGE_ID; + } + return pageRouteStack_.back().pageId; +} + +std::string FrontendDelegateImpl::GetRunningPageUrl() const +{ + std::lock_guard lock(mutex_); + if (pageRouteStack_.empty()) { + return std::string(); + } + const auto& pageUrl = pageRouteStack_.back().url; + auto pos = pageUrl.rfind(".js"); + if (pos == pageUrl.length() - 3) { + return pageUrl.substr(0, pos); + } + return pageUrl; +} + +int32_t FrontendDelegateImpl::GetPageIdByUrl(const std::string& url) +{ + std::lock_guard lock(mutex_); + auto pageIter = std::find_if(std::rbegin(pageRouteStack_), std::rend(pageRouteStack_), + [&url](const PageInfo& pageRoute) { return url == pageRoute.url; }); + if (pageIter != std::rend(pageRouteStack_)) { + LOGD("GetPageIdByUrl pageId=%{private}d url=%{private}s", pageIter->pageId, url.c_str()); + return pageIter->pageId; + } + return INVALID_PAGE_ID; +} + +RefPtr FrontendDelegateImpl::GetPage(int32_t pageId) const +{ + std::lock_guard lock(mutex_); + auto itPage = pageMap_.find(pageId); + if (itPage == pageMap_.end()) { + LOGE("the page is not in the map"); + return nullptr; + } + return itPage->second; +} + +void FrontendDelegateImpl::RegisterFont(const std::string& familyName, const std::string& familySrc) +{ + pipelineContextHolder_.Get()->RegisterFont(familyName, familySrc); +} + +void FrontendDelegateImpl::HandleImage( + const std::string& src, std::function&& callback, const std::set& callbacks) +{ + if (src.empty() || !callback) { + return; + } + std::map callbackMarkers; + if (callbacks.find("success") != callbacks.end()) { + auto successEventMarker = BackEndEventManager::GetInstance().GetAvailableMarker(); + successEventMarker.SetPreFunction([callback, taskExecutor = taskExecutor_]() { + taskExecutor->PostTask([callback] { callback(0); }, TaskExecutor::TaskType::JS); + }); + callbackMarkers.emplace("success", successEventMarker); + } + + if (callbacks.find("fail") != callbacks.end()) { + auto failEventMarker = BackEndEventManager::GetInstance().GetAvailableMarker(); + failEventMarker.SetPreFunction([callback, taskExecutor = taskExecutor_]() { + taskExecutor->PostTask([callback] { callback(1); }, TaskExecutor::TaskType::JS); + }); + callbackMarkers.emplace("fail", failEventMarker); + } + pipelineContextHolder_.Get()->CanLoadImage(src, callbackMarkers); +} + +void FrontendDelegateImpl::RequestAnimationFrame(const std::string& callbackId) +{ + CancelableCallback cancelableTask; + cancelableTask.Reset([callbackId, call = requestAnimationCallback_, weak = AceType::WeakClaim(this)] { + auto delegate = weak.Upgrade(); + if (delegate && call) { + call(callbackId, delegate->GetSystemRealTime()); + } + }); + animationFrameTaskMap_.try_emplace(callbackId, cancelableTask); + animationFrameTaskIds_.emplace(callbackId); +} + +uint64_t FrontendDelegateImpl::GetSystemRealTime() +{ + struct timespec ts; + clock_gettime(CLOCK_REALTIME, &ts); + return ts.tv_sec * TO_MILLI + ts.tv_nsec / NANO_TO_MILLI; +} + +void FrontendDelegateImpl::CancelAnimationFrame(const std::string& callbackId) +{ + auto animationTaskIter = animationFrameTaskMap_.find(callbackId); + if (animationTaskIter != animationFrameTaskMap_.end()) { + animationTaskIter->second.Cancel(); + animationFrameTaskMap_.erase(animationTaskIter); + } else { + LOGW("cancelAnimationFrame callbackId not found"); + } +} + +void FrontendDelegateImpl::FlushAnimationTasks() +{ + while (!animationFrameTaskIds_.empty()) { + const auto& callbackId = animationFrameTaskIds_.front(); + if (!callbackId.empty()) { + auto taskIter = animationFrameTaskMap_.find(callbackId); + if (taskIter != animationFrameTaskMap_.end()) { + taskExecutor_->PostTask(taskIter->second, TaskExecutor::TaskType::JS); + } + } + animationFrameTaskIds_.pop(); + } +} + +SingleTaskExecutor FrontendDelegateImpl::GetAnimationJsTask() +{ + return SingleTaskExecutor::Make(taskExecutor_, TaskExecutor::TaskType::JS); +} + +SingleTaskExecutor FrontendDelegateImpl::GetUiTask() +{ + return SingleTaskExecutor::Make(taskExecutor_, TaskExecutor::TaskType::UI); +} + +void FrontendDelegateImpl::AttachPipelineContext(const RefPtr& context) +{ + context->SetOnPageShow([weak = AceType::WeakClaim(this)] { + auto delegate = weak.Upgrade(); + if (delegate) { + delegate->OnPageShow(); + } + }); + context->SetAnimationCallback([weak = AceType::WeakClaim(this)] { + auto delegate = weak.Upgrade(); + if (delegate) { + delegate->FlushAnimationTasks(); + } + }); + pipelineContextHolder_.Attach(context); + jsAccessibilityManager_->SetPipelineContext(context); + jsAccessibilityManager_->InitializeCallback(); +} + +void FrontendDelegateImpl::SetAssetManager(const RefPtr& assetManager) +{ + assetManager_ = assetManager; +} + +RefPtr FrontendDelegateImpl::GetPipelineContext() +{ + return pipelineContextHolder_.Get(); +} + +void FrontendDelegateImpl::SetColorMode(ColorMode colorMode) +{ + OnMediaQueryUpdate(); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/js_frontend/frontend_delegate_impl.h b/frameworks/bridge/js_frontend/frontend_delegate_impl.h new file mode 100644 index 00000000..f8617784 --- /dev/null +++ b/frameworks/bridge/js_frontend/frontend_delegate_impl.h @@ -0,0 +1,335 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_FRONTEND_DELEGATE_IMPL_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_FRONTEND_DELEGATE_IMPL_H + +#include +#include +#include + +#include "base/memory/ace_type.h" +#include "base/thread/cancelable_callback.h" +#include "core/common/js_message_dispatcher.h" +#include "core/pipeline/pipeline_context.h" +#include "frameworks/bridge/common/accessibility/accessibility_node_manager.h" +#if !defined(WINDOWS_PLATFORM) and !defined(MAC_PLATFORM) +#include "frameworks/bridge/common/accessibility/js_accessibility_manager.h" +#else +#include "frameworks/bridge/common/inspector/js_inspector_manager.h" +#endif +#include "frameworks/bridge/common/manifest/manifest_parser.h" +#include "frameworks/bridge/js_frontend/engine/common/group_js_bridge.h" +#include "frameworks/bridge/js_frontend/frontend_delegate.h" +#include "frameworks/bridge/js_frontend/js_ace_page.h" + +namespace OHOS::Ace::Framework { + +using LoadJsCallback = std::function&, bool isMainPage)>; +using JsMessageDispatcherSetterCallback = std::function&)>; +using EventCallback = std::function; +using UpdatePageCallback = std::function&)>; +using ResetStagingPageCallback = std::function; +using MediaQueryCallback = std::function; +using DestroyPageCallback = std::function; +using DestroyApplicationCallback = std::function; +using TimerCallback = std::function; +using RequestAnimationCallback = std::function; +using JsCallback = std::function; + +struct PageInfo { + int32_t pageId = -1; + std::string url; +}; + +class PipelineContextHolder { +public: + void Attach(const RefPtr& context) + { + if (attached_ || !context) { + return; + } + + attached_ = true; + promise_.set_value(context); + } + + const RefPtr& Get() + { + if (!pipelineContext_) { + pipelineContext_ = future_.get(); + ACE_DCHECK(pipelineContext_); + } + return pipelineContext_; + } + +private: + bool attached_ = false; + std::promise> promise_; + std::future> future_ = promise_.get_future(); + RefPtr pipelineContext_; +}; + +struct FrontendDelegateImplBuilder { + RefPtr taskExecutor; + LoadJsCallback loadCallback; + JsMessageDispatcherSetterCallback transferCallback; + EventCallback asyncEventCallback; + EventCallback syncEventCallback; + UpdatePageCallback updatePageCallback; + ResetStagingPageCallback resetStagingPageCallback; + DestroyPageCallback destroyPageCallback; + DestroyApplicationCallback destroyApplicationCallback; + TimerCallback timerCallback; + MediaQueryCallback mediaQueryCallback; + RequestAnimationCallback requestAnimationCallback; + JsCallback jsCallback; + void* ability; +}; + +class FrontendDelegateImpl : public FrontendDelegate { + DECLARE_ACE_TYPE(FrontendDelegateImpl, FrontendDelegate); + +public: + explicit FrontendDelegateImpl(const FrontendDelegateImplBuilder& builder); + ~FrontendDelegateImpl() override = default; + + void AttachPipelineContext(const RefPtr& context) override; + void SetAssetManager(const RefPtr& assetManager) override; + + // JsFrontend delegate functions. + void RunPage(const std::string& url, const std::string& params); + void SetJsMessageDispatcher(const RefPtr& dispatcher) const; + void TransferComponentResponseData(int32_t callbackId, int32_t code, std::vector&& data); + void TransferJsResponseData(int32_t callbackId, int32_t code, std::vector&& data) const; + void TransferJsPluginGetError(int32_t callbackId, int32_t errorCode, std::string&& errorMessage) const; + void TransferJsEventData(int32_t callbackId, int32_t code, std::vector&& data) const; + void LoadPluginJsCode(std::string&& jsCode) const; + void OnJsCallback(const std::string& callbackId, const std::string& data); + bool OnPageBackPress(); + void OnBackGround(); + void OnForground(); + void OnConfigurationUpdated(const std::string& configurationData); + void OnActive(); + void OnInactive(); + bool OnStartContinuation(); + void OnCompleteContinuation(int32_t code); + void OnSaveData(std::string& data); + bool OnRestoreData(const std::string& data); + void OnNewRequest(const std::string& data); + void CallPopPage(); + void OnApplicationDestroy(const std::string& packageName); + void SetColorMode(ColorMode colorMode); + + // Accessibility delegate functions. + RefPtr GetJsAccessibilityManager() const + { + return jsAccessibilityManager_; + } + void FireAccessibilityEvent(const AccessibilityEvent& accessibilityEvent); + void InitializeAccessibilityCallback(); + + void OnMediaQueryUpdate() override; + void OnSurfaceChanged(); + // JsEventHandler delegate functions. + void FireAsyncEvent(const std::string& eventId, const std::string& param, const std::string& jsonArgs); + bool FireSyncEvent(const std::string& eventId, const std::string& param, const std::string& jsonArgs); + void FireSyncEvent( + const std::string& eventId, const std::string& param, const std::string& jsonArgs, std::string& result); + + // FrontendDelegate overrides. + void Push(const std::string& uri, const std::string& params) override; + void Replace(const std::string& uri, const std::string& params) override; + void Back(const std::string& uri) override; + void Clear() override; + int32_t GetStackSize() const override; + void GetState(int32_t& index, std::string& name, std::string& path) override; + void TriggerPageUpdate(int32_t pageId, bool directExecute = false) override; + + void PostJsTask(std::function&& task) override; + + const std::string& GetAppID() const override; + const std::string& GetAppName() const override; + const std::string& GetVersionName() const override; + int32_t GetVersionCode() const override; + const WindowConfig& GetWindowConfig(); + + void ShowToast(const std::string& message, int32_t duration, const std::string& bottom) override; + void ShowDialog(const std::string& title, const std::string& message, + const std::vector>& buttons, bool autoCancel, + std::function&& callback, const std::set& callbacks) override; + + Rect GetBoundingRectData(NodeId nodeId) override; + // For async event. + void SetCallBackResult(const std::string& callBackId, const std::string& result) override; + + void WaitTimer(const std::string& callbackId, const std::string& delay, bool isInterval, bool isFirst) override; + void ClearTimer(const std::string& callbackId) override; + + void PostSyncTaskToPage(std::function&& task) override; + void AddTaskObserver(std::function&& task) override; + void RemoveTaskObserver() override; + + bool GetAssetContent(const std::string& url, std::string& content) override; + bool GetAssetContent(const std::string& url, std::vector& content) override; + + // i18n + void GetI18nData(std::unique_ptr& json) override; + + void GetResourceConfiguration(std::unique_ptr& json) override; + + void GetConfigurationCommon(const std::string& filePath, std::unique_ptr& data) override; + + void ChangeLocale(const std::string& language, const std::string& countryOrRegion) override; + + void RegisterFont(const std::string& familyName, const std::string& familySrc) override; + + void HandleImage(const std::string& src, std::function&& callback, + const std::set& callbacks) override; + + void RequestAnimationFrame(const std::string& callbackId) override; + + void CancelAnimationFrame(const std::string& callbackId) override; + + SingleTaskExecutor GetAnimationJsTask() override; + + SingleTaskExecutor GetUiTask() override; + + const RefPtr& GetMediaQueryInfoInstance() override + { + return mediaQueryInfo_; + } + + const RefPtr& GetGroupJsBridge() override + { + return groupJsBridge_; + } + + RefPtr GetPipelineContext() override; + + void SetGroupJsBridge(const RefPtr& groupJsBridge) + { + groupJsBridge_ = groupJsBridge; + } + + RefPtr GetPage(int32_t pageId) const override; + + + WeakPtr GetCurrentReadyPage() const + { + return currentReadyPage_; + } + + void* GetAbility() override + { + return ability_; + } + + void RebuildAllPages(); + +private: + int32_t GenerateNextPageId(); + void RecyclePageId(int32_t pageId); + + void LoadPage(int32_t pageId, const std::string& url, bool isMainPage, const std::string& params); + void OnPageReady(const RefPtr& page, const std::string& url, bool isMainPage); + void FlushPageCommand(const RefPtr& page, const std::string& url, bool isMainPage); + void AddPageLocked(const RefPtr& page); + void SetCurrentPage(int32_t pageId); + void SetCurrentReadyPage(const WeakPtr& page) + { + currentReadyPage_ = page; + } + + void OnPushPageSuccess(const RefPtr& page, const std::string& url); + void OnPopToPageSuccess(const std::string& url); + void PopToPage(const std::string& url); + int32_t OnPopPageSuccess(); + void PopPage(); + + void PopPageTransitionListener(const TransitionEvent& event, int32_t destroyPageId); + + void PopToPageTransitionListener(const TransitionEvent& event, const std::string& url, int32_t pageId); + + int32_t OnClearInvisiblePagesSuccess(); + void ClearInvisiblePages(); + + void OnReplacePageSuccess(const RefPtr& page, const std::string& url); + void ReplacePage(const RefPtr& page, const std::string& url); + void LoadReplacePage(int32_t pageId, const std::string& url, const std::string& params); + + uint64_t GetSystemRealTime(); + + // Page lifecycle + void OnPageShow(); + void OnPageHide(); + void OnPageDestroy(int32_t pageId); + + int32_t GetRunningPageId() const; + std::string GetRunningPageUrl() const; + int32_t GetPageIdByUrl(const std::string& url); + + void ResetStagingPage(); + void FlushAnimationTasks(); + void ParseManifest(); + + std::atomic pageIdPool_ = 0; + int32_t callbackCnt_ = 0; + bool isRouteStackFull_ = false; + bool isStagingPageExist_ = false; + std::string mainPagePath_; + std::vector pageRouteStack_; + std::unordered_map> pageMap_; + std::unordered_map jsCallBackResult_; + WeakPtr currentReadyPage_; + + LoadJsCallback loadJs_; + JsMessageDispatcherSetterCallback dispatcherCallback_; + EventCallback asyncEvent_; + EventCallback syncEvent_; + UpdatePageCallback updatePage_; + ResetStagingPageCallback resetStagingPage_; + DestroyPageCallback destroyPage_; + DestroyApplicationCallback destroyApplication_; + TimerCallback timer_; + std::unordered_map> timeoutTaskMap_; + MediaQueryCallback mediaQueryCallback_; + RequestAnimationCallback requestAnimationCallback_; + JsCallback jsCallback_; + RefPtr manifestParser_; + RefPtr jsAccessibilityManager_; + void* ability_; + RefPtr mediaQueryInfo_; + RefPtr groupJsBridge_; + + RefPtr taskExecutor_; + RefPtr assetManager_; + + PipelineContextHolder pipelineContextHolder_; + + BaseId::IdType pageTransitionListenerId_ = 0L; + std::queue animationFrameTaskIds_; + std::unordered_map> animationFrameTaskMap_; + + mutable std::mutex mutex_; + mutable std::once_flag onceFlag_; + + std::mutex loadPageMutex_; + std::condition_variable condition_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_FRONTEND_DELEGATE_IMPL_H diff --git a/frameworks/bridge/js_frontend/js_ace_page.cpp b/frameworks/bridge/js_frontend/js_ace_page.cpp new file mode 100644 index 00000000..5c996343 --- /dev/null +++ b/frameworks/bridge/js_frontend/js_ace_page.cpp @@ -0,0 +1,191 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/js_frontend/js_ace_page.h" + +#include "base/utils/system_properties.h" +#include "core/components/focus_collaboration/focus_collaboration_component.h" +#include "core/components/page/page_component.h" +#include "core/components/page_transition/page_transition_component.h" + +namespace OHOS::Ace::Framework { + +JsAcePage::~JsAcePage() +{ + auto pipelineContext = pipelineContext_.Upgrade(); + if (!pipelineContext) { + return; + } + + auto accessibilityManager = pipelineContext->GetAccessibilityManager(); + if (!accessibilityManager) { + LOGE("accessibilityManager not exists"); + return; + } + + auto taskExecutor = pipelineContext->GetTaskExecutor(); + if (!taskExecutor) { + LOGE("taskExecutor not exists"); + return; + } + + RefPtr domDoc; + domDoc.Swap(domDoc_); + taskExecutor->PostTask( + [domDoc, accessibilityManager] { accessibilityManager->ClearPageAccessibilityNodes(domDoc->GetRootNodeId()); }, + TaskExecutor::TaskType::UI); +} + +RefPtr JsAcePage::BuildPage(const std::string& url) +{ + auto pageId = GetPageId(); + auto rootStack = domDoc_->GetRootStackComponent(); + auto rootComposedStack = domDoc_->GetRootComposedStack(); + auto focusCollaboration = AceType::MakeRefPtr(true); + if (!pageTransition_) { + pageTransition_ = AceType::MakeRefPtr(); + } + if ((!rootStack || !rootComposedStack) && !component_) { + LOGW("Page[%{public}d] can't be loaded. no root component.", pageId); + pageTransition_->SetContent(nullptr); + } else { + if (component_) { + focusCollaboration->InsertChild(0, component_); + } else if (rootComposedStack) { + focusCollaboration->InsertChild(0, rootComposedStack); + } + pageTransition_->SetContent(focusCollaboration); + if ((SystemProperties::GetDeviceType() == DeviceType::TV) && (!pageTransition_->GetIsSetOption())) { + pageTransition_->SetSeparation(true); + SwapBackgroundDecoration(pageTransition_); + } + } + std::unique_ptr argsValue = JsonUtil::ParseJsonString(pageParams_); + if (argsValue && argsValue->IsObject()) { + const std::string& cardComposeId = argsValue->GetString(DOM_TRANSITION_CARD_COMPOSEID); + if (!cardComposeId.empty()) { + return AceType::MakeRefPtr(pageId, cardComposeId, pageTransition_); + } + } + return AceType::MakeRefPtr(pageId, pageTransition_); +} + +RefPtr JsAcePage::BuildPagePatch(int32_t nodeId) +{ + RefPtr dirtyComponent = domDoc_->GetComponentById(nodeId); + if (!dirtyComponent) { + LOGE("Node[%{public}d] can't be reached.", nodeId); + return nullptr; + } + + auto composedComponent = AceType::DynamicCast(dirtyComponent); + ACE_DCHECK(composedComponent); + return composedComponent; +} + +void JsAcePage::SwapBackgroundDecoration(const RefPtr& transition) +{ + if (!transition) { + LOGW("swap background decoration failed. transition is null."); + return; + } + + auto rootNode = domDoc_->GetDOMNodeById(DOM_ROOT_NODE_ID_BASE + GetPageId()); + if (!rootNode) { + LOGW("swap background decoration failed. root node is null."); + return; + } + + auto box = rootNode->GetBoxComponent(); + if (!box) { + LOGW("swap background decoration failed. box is null."); + return; + } + + auto decoration = box->GetBackDecoration(); + if (!decoration) { + LOGW("swap background decoration failed. decoration is null."); + return; + } + + auto backgroundBox = AceType::MakeRefPtr(); + backgroundBox->SetBackDecoration(decoration); + backgroundBox->SetWidth(box->GetWidthDimension().Value(), box->GetWidthDimension().Unit()); + backgroundBox->SetHeight(box->GetHeightDimension().Value(), box->GetHeightDimension().Unit()); + backgroundBox->SetFlex(BoxFlex::FLEX_XY); + transition->SetBackground(backgroundBox); + box->SetBackDecoration(nullptr); +} + +RefPtr JsAcePage::GetBridgeById(NodeId nodeId) +{ + auto iter = canvasBridges_.find(nodeId); + if (iter == canvasBridges_.end()) { + LOGE("the canvas is not in the map"); + return nullptr; + } + return iter->second; +} + +RefPtr JsAcePage::GetAnimationBridge(NodeId nodeId) +{ + auto bridge = animationBridges_.find(nodeId); + if (bridge == animationBridges_.end()) { + LOGW("the animation bridge is not in the map, nodeId: %{public}d", nodeId); + return nullptr; + } + return bridge->second; +} + +void JsAcePage::RemoveAnimationBridge(NodeId nodeId) +{ + animationBridges_.erase(nodeId); +} + +void JsAcePage::AddAnimationBridge(NodeId nodeId, const RefPtr& animationBridge) +{ + if (!animationBridge) { + LOGE("AddAnimationBridge failed. Animation bridge is null."); + return; + } + animationBridges_[nodeId] = animationBridge; +} + +void JsAcePage::PushCanvasBridge(NodeId nodeId, const RefPtr& bridge) +{ + if (!bridge) { + LOGE("PushCanvasBridge failed. Canvas bridge is null."); + return; + } + canvasBridges_[nodeId] = bridge; +} + +void JsAcePage::AddNodeEvent(int32_t nodeId, const std::string& actionType, const std::string& eventAction) +{ + nodeEvent_[nodeId][actionType] = eventAction; +} + +std::string& JsAcePage::GetNodeEventAction(int32_t nodeId, const std::string& actionType) +{ + // in error case just use empty string. + return nodeEvent_[nodeId][actionType]; +} + +std::shared_ptr JsAcePage::GetRadioGroups() +{ + return radioGroups_; +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/js_frontend/js_ace_page.h b/frameworks/bridge/js_frontend/js_ace_page.h new file mode 100644 index 00000000..7c6db3c8 --- /dev/null +++ b/frameworks/bridge/js_frontend/js_ace_page.h @@ -0,0 +1,279 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_JS_ACE_PAGE_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_JS_ACE_PAGE_H + +#include +#include +#include + +#include "base/utils/macros.h" +#include "core/common/ace_page.h" +#include "core/components/checkable/radio_group_component.h" +#include "core/components/page_transition/page_transition_component.h" +#include "frameworks/bridge/common/dom/dom_document.h" +#include "frameworks/bridge/common/utils/source_map.h" +#include "frameworks/bridge/common/utils/utils.h" +#include "frameworks/bridge/js_frontend/engine/common/base_animation_bridge.h" +#include "frameworks/bridge/js_frontend/engine/common/base_canvas_bridge.h" +#include "frameworks/bridge/js_frontend/js_command.h" + +namespace OHOS::Ace::Framework { + +using JsPageRadioGroups = std::unordered_map>; + +// One JsAcePage corresponding to a JS bundle, so it should maintain page's lifecycle. +class ACE_EXPORT JsAcePage final : public AcePage { + DECLARE_ACE_TYPE(JsAcePage, AcePage); + +public: + JsAcePage(int32_t pageId, const RefPtr& document, const std::string& url) + : AcePage(pageId), domDoc_(document), url_(url), radioGroups_(std::make_shared()) + { + ACE_DCHECK(domDoc_); + } + + ~JsAcePage() override; + + RefPtr BuildPage(const std::string& url) override; + RefPtr BuildPagePatch(int32_t nodeId); + + RefPtr GetDomDocument() const + { + return domDoc_; + } + + const std::string& GetUrl() const + { + return url_; + } + + bool CheckPageCreated() const + { + return pageCreated_; + } + + void SetPageCreated() + { + pageCreated_ = true; + } + + void SetPageTransition(const RefPtr& pageTransition) + { + pageTransition_ = pageTransition; + } + + void PushCommand(const RefPtr& jsCommand) + { + jsCommands_.emplace_back(jsCommand); + } + + void PopAllCommands(std::vector>& jsCommands) + { + jsCommands = std::move(jsCommands_); + } + + void PushNewNode(NodeId nodeId, NodeId parentNodeId) + { + dirtyNodes_.emplace(nodeId); + PushDirtyNode(parentNodeId); + } + + void PushDirtyNode(NodeId nodeId) + { + auto result = dirtyNodes_.emplace(nodeId); + if (result.second) { + dirtyNodesOrderedByTime_.emplace_back(nodeId); + } + } + + void PopAllDirtyNodes(std::vector& dirtyNodes) + { + dirtyNodes = std::move(dirtyNodesOrderedByTime_); + dirtyNodes_.clear(); + } + + void ClearAllDirtyNodes() + { + dirtyNodesOrderedByTime_.clear(); + dirtyNodes_.clear(); + } + + void ReserveShowCommand(const RefPtr& command) + { + if (command) { + showCommands_.emplace_back(command); + } + } + + void UpdateShowAttr() + { + if (showCommands_.empty()) { + return; + } + + for (auto& command : showCommands_) { + command->Execute(AceType::Claim(this)); + } + showCommandConsumed_ = true; + } + + bool CheckShowCommandConsumed() const + { + return showCommandConsumed_; + } + + void ClearShowCommand() + { + showCommands_.clear(); + showCommandConsumed_ = false; + } + + RefPtr GetBridgeById(NodeId nodeId); + void PushCanvasBridge(NodeId nodeId, const RefPtr& bridge); + + RefPtr GetAnimationBridge(NodeId nodeId); + void RemoveAnimationBridge(NodeId nodeId); + void AddAnimationBridge(NodeId nodeId, const RefPtr& animationBridge); + + void SetPageParams(const std::string& params) + { + pageParams_ = params; + } + + const std::string& GetPageParams() const + { + return pageParams_; + } + + void SetFlushCallback(std::function&)>&& callback) + { + flushCallback_ = std::move(callback); + } + + void FlushCommands() + { + if (flushCallback_) { + fragmentCount_++; + flushCallback_(AceType::Claim(this)); + } + } + + int32_t FragmentCount() const + { + return fragmentCount_; + } + + size_t GetCommandSize() const + { + return jsCommands_.size(); + } + + void SetPipelineContext(const WeakPtr& pipelineContext) + { + pipelineContext_ = pipelineContext; + } + + WeakPtr GetPipelineContext() const + { + return pipelineContext_; + } + + bool IsLiteStyle() const + { + return useLiteStyle_; + } + + void SetUseLiteStyle(bool useLiteStyle) + { + useLiteStyle_ = useLiteStyle; + } + + bool IsUseBoxWrap() const + { + return useBoxWrap_; + } + + void SetUseBoxWrap(bool useBoxWrap) + { + useBoxWrap_ = useBoxWrap; + } + + void AddNodeEvent(int32_t nodeId, const std::string& actionType, const std::string& eventAction); + + std::string& GetNodeEventAction(int32_t nodeId, const std::string& actionType); + std::shared_ptr GetRadioGroups(); + + void SetRootComponent(const RefPtr& component) + { + component_ = component; + } + + void SetPageMap(const std::string& pageMap) + { + pageMap_ = AceType::MakeRefPtr(); + pageMap_->Init(pageMap); + } + + RefPtr GetPageMap() const + { + return pageMap_; + } + + void SetAppMap(const std::string& appMap) + { + appMap_ = AceType::MakeRefPtr(); + appMap_->Init(appMap); + } + + RefPtr GetAppMap() const + { + return appMap_; + } + +private: + void SwapBackgroundDecoration(const RefPtr& transition); + + bool pageCreated_ = false; + bool showCommandConsumed_ = false; + int32_t fragmentCount_ = 0; + + WeakPtr pipelineContext_; + RefPtr pageTransition_; + RefPtr component_; + RefPtr domDoc_; + std::string url_; + + RefPtr pageMap_; + RefPtr appMap_; + bool useLiteStyle_ = false; + bool useBoxWrap_ = false; + + std::vector> jsCommands_; + std::vector dirtyNodesOrderedByTime_; + std::unordered_set dirtyNodes_; + std::vector> showCommands_; + std::function&)> flushCallback_; + std::string pageParams_; + std::unordered_map> nodeEvent_; + std::unordered_map> animationBridges_; + std::unordered_map> canvasBridges_; + std::shared_ptr radioGroups_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_JS_ACE_PAGE_H diff --git a/frameworks/bridge/js_frontend/js_command.cpp b/frameworks/bridge/js_frontend/js_command.cpp new file mode 100644 index 00000000..d9a5a773 --- /dev/null +++ b/frameworks/bridge/js_frontend/js_command.cpp @@ -0,0 +1,542 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/js_frontend/js_command.h" + +#include "base/log/event_report.h" +#include "base/log/log.h" +#include "frameworks/bridge/common/dom/dom_proxy.h" +#include "frameworks/bridge/common/dom/dom_search.h" +#include "frameworks/bridge/common/dom/dom_textarea.h" +#include "frameworks/bridge/common/dom/dom_type.h" +#include "frameworks/bridge/js_frontend/engine/common/js_engine_loader.h" +#include "frameworks/bridge/js_frontend/js_ace_page.h" + +namespace OHOS::Ace::Framework { +namespace { + +inline RefPtr GetNodeFromPage(const RefPtr& page, NodeId nodeId) +{ + auto domDocument = page ? page->GetDomDocument() : nullptr; + if (domDocument) { + return domDocument->GetDOMNodeById(nodeId); + } + LOGE("Failed to get DOM document"); + EventReport::SendJsException(JsExcepType::GET_NODE_ERR); + return nullptr; +} + +inline RefPtr GetAccessibilityManager(const RefPtr& page) +{ + if (!page) { + return nullptr; + } + auto pipelineContext = page->GetPipelineContext().Upgrade(); + if (!pipelineContext) { + return nullptr; + } + return pipelineContext->GetAccessibilityManager(); +} + +inline void TrySaveTargetAndIdNode(const std::string& id, const std::string& target, + const RefPtr& domDocument, const RefPtr& node) +{ + if (!id.empty()) { + domDocument->AddNodeWithId(id, node); + } + if (!target.empty()) { + domDocument->AddNodeWithTarget(target, node); + } +} + +} // namespace + +void JsCommandDomElementOperator::UpdateForChart(const RefPtr& node) const +{ + if (chartDatasets_ || chartOptions_ || segments_) { + auto chart = AceType::DynamicCast(node); + if (chart) { + if (chartDatasets_) { + chart->SetChartAttrDatasets(*chartDatasets_); + } + if (chartOptions_) { + chart->SetChartAttrOptions(*chartOptions_); + } + if (segments_) { + chart->SetChartAttrSegments(*segments_); + } + } + } +} + +void JsCommandDomElementOperator::UpdateForImageAnimator(const RefPtr& node) const +{ + if (images_) { + auto imageAnimator = AceType::DynamicCast(node); + if (imageAnimator) { + imageAnimator->SetImagesAttr(*images_); + } + } +} + +void JsCommandDomElementOperator::UpdateForClock(const RefPtr& node) const +{ + if (clockConfig_) { + auto domClock = AceType::DynamicCast(node); + if (domClock) { + domClock->SetClockConfig(*clockConfig_); + } + } +} + +void JsCommandDomElementOperator::UpdateForBadge(const RefPtr& node) const +{ + if (badgeConfig_) { + auto domBadge = AceType::DynamicCast(node); + if (domBadge) { + domBadge->SetBadgeConfig(*badgeConfig_); + } + } +} + +void JsCommandDomElementOperator::UpdateForStepperLabel(const RefPtr& node) const +{ + if (stepperLabel_) { + auto domStepperItem = AceType::DynamicCast(node); + if (domStepperItem) { + domStepperItem->SetLabel(*stepperLabel_); + } + } +} + +void JsCommandDomElementOperator::UpdateForInput(const RefPtr& node) const +{ + if (!node || !inputOptions_) { + return; + } + + auto input = AceType::DynamicCast(node); + if (input) { + input->SetInputOptions(*inputOptions_); + return; + } + auto textarea = AceType::DynamicCast(node); + if (textarea) { + textarea->SetInputOptions(*inputOptions_); + return; + } + auto search = AceType::DynamicCast(node); + if (search) { + search->SetInputOptions(*inputOptions_); + } +} + +RefPtr JsCommandDomElementCreator::CreateDomNode(const RefPtr& page, NodeId parentNodeId) const +{ + if (!page) { + return nullptr; + } + auto pageId = page->GetPageId(); + auto domDocument = page->GetDomDocument(); + ACE_DCHECK(domDocument); + RefPtr parentNode; + if (parentNodeId != -1) { + parentNode = domDocument->GetDOMNodeById(parentNodeId); + if (!parentNode) { + LOGE("Parent node %{private}d not exists", nodeId_); + EventReport::SendJsException(JsExcepType::CREATE_NODE_ERR); + return nullptr; + } + } + + std::string tagName = tagName_; + if (parentNode && parentNode->HasSvgTag() && tagName_ == DOM_NODE_TAG_TEXT) { + // the input tag of ace text and svg text is same. + tagName = std::string(DOM_NODE_TAG_SVG_TEXT); + } + auto node = domDocument->CreateNodeWithId(tagName, nodeId_, itemIndex_); + if (!node) { + LOGE("Failed to create DOM node %{public}s", tagName.c_str()); + EventReport::SendJsException(JsExcepType::CREATE_NODE_ERR); + return nullptr; + } + if (page->IsLiteStyle()) { + node->AdjustParamInLiteMode(); + } + node->SetBoxWrap(page->IsUseBoxWrap()); + + // supplement: set svg tag by parentNode.hasSvgTag_ or tagName_ + node->SetParentNode(parentNode); + + TrySaveTargetAndIdNode(id_, target_, domDocument, node); + node->SetShareId(shareId_); + node->SetPipelineContext(pipelineContext_); + node->SetIsCustomComponent(isCustomComponent_); + node->InitializeStyle(); + node->SetAttr(attrs_); + if (animationStyles_) { + node->SetAnimationStyle(*animationStyles_); + } + if (transitionEnter_) { + node->SetIsTransition(true); + node->SetIsEnter(true); + node->SetAnimationStyle(*transitionEnter_); + } + if (transitionExit_) { + node->SetIsTransition(true); + node->SetIsEnter(false); + node->SetAnimationStyle(*transitionExit_); + } + if (sharedTransitionName_) { + node->SetSharedTransitionStyle(*sharedTransitionName_); + } + + UpdateForChart(node); + UpdateForImageAnimator(node); + UpdateForClock(node); + UpdateForBadge(node); + UpdateForStepperLabel(node); + UpdateForInput(node); + + node->SetStyle(styles_); + node->AddEvent(pageId, events_); + return node; +} + +void JsCommandDomElementCreator::MountDomNode( + const RefPtr& node, const RefPtr& domDocument, NodeId parentNodeId) const +{ + if (!node || !domDocument) { + return; + } + // useProxyNode flag is used for the dom node which is out of its previous order. + // For example, navigation bar is used to set outside the root div, thus there should be a proxy node in + // its previous order. + bool useProxyNode = false; + bool isIgnored = false; + if (tagName_ == DOM_NODE_TAG_NAVIGATION_BAR) { + auto rootStack = domDocument->GetRootStackComponent(); + if (rootStack && !rootStack->HasNavigationBar()) { + node->GenerateComponentNode(); + rootStack->SetNavigationBar(node->GetRootComponent()); + LOGD("added navigation bar node"); + useProxyNode = true; + isIgnored = true; + } + } else if (node->GetPosition() == PositionType::FIXED) { + const auto& rootStack = domDocument->GetRootStackComponent(); + if (rootStack) { + rootStack->AppendChild(node->GetRootComponent()); + // mount node to root + node->Mount(-1); + ScheduleUpdateForFixedNode(domDocument); + useProxyNode = true; + } + } + LOGD("parent(=%{private}d) add child(=%{private}d) in slot(=%{private}d)", parentNodeId, nodeId_, itemIndex_); + if (useProxyNode) { + // mount proxy dom node to replace the position of original node + auto proxy = CreateDomProxy(domDocument, parentNodeId); + if (proxy) { + proxy->ConnectWith(node); + proxy->SetIsIgnored(isIgnored); + proxy->Mount(itemIndex_); + } + } else { + node->Mount(itemIndex_); + } +} + +RefPtr JsCommandDomElementCreator::CreateDomProxy( + const RefPtr& domDocument, NodeId parentNodeId) const +{ + RefPtr parentNode; + if (parentNodeId != -1) { + parentNode = domDocument->GetDOMNodeById(parentNodeId); + if (!parentNode) { + return nullptr; + } + } + // generate proxy id in DomDocument + auto proxy = domDocument->CreateProxyNodeWithId(tagName_, nodeId_); + if (!proxy) { + return nullptr; + } + + proxy->SetParentNode(parentNode); + proxy->SetPipelineContext(pipelineContext_); + proxy->SetProxyNode(true); + return proxy; +} + +void JsCommandDomElementCreator::ScheduleUpdateForFixedNode(const RefPtr& domDocument) const +{ + const auto& rootComposedStack = domDocument->GetRootComposedStack(); + if (rootComposedStack) { + rootComposedStack->MarkNeedUpdate(); + auto context = pipelineContext_.Upgrade(); + if (context) { + context->ScheduleUpdate(rootComposedStack); + } + } +} + +void JsCommandCreateDomBody::Execute(const RefPtr& page) const +{ + auto domDocument = page ? page->GetDomDocument() : nullptr; + if (!domDocument) { + LOGE("Failed to get DOM document"); + EventReport::SendJsException(JsExcepType::CREATE_DOM_BODY_ERR); + return; + } + + auto node = CreateDomNode(page); + if (!node) { + return; + } + + auto transition = node->BuildTransitionComponent(); + page->SetPageTransition(transition); + node->GenerateComponentNode(); + domDocument->SetPipelineContext(pipelineContext_); + domDocument->SetUpRootComponent(node); + + if (tagName_ == DOM_NODE_TAG_OPTION) { + return; // option of menu and select for popup do not need auto creating + } + + // create root accessibility node + auto accessibilityManager = GetAccessibilityManager(page); + if (!accessibilityManager) { + LOGW("accessibilityManager not exists"); + return; + } + + accessibilityManager->SetRootNodeId(domDocument->GetRootNodeId()); + auto accessibilityNode = accessibilityManager->CreateAccessibilityNode(tagName_, nodeId_, -1, itemIndex_); + if (!accessibilityNode) { + LOGD("Failed to create accessibility node %{public}s", tagName_.c_str()); + return; + } + accessibilityManager->TrySaveTargetAndIdNode(id_, target_, accessibilityNode); + accessibilityNode->SetAttr(attrs_); +#if defined(WINDOWS_PLATFORM) || defined(MAC_PLATFORM) + accessibilityNode->SetStyle(styles_); +#endif + accessibilityNode->AddEvent(page->GetPageId(), events_); +} + +void JsCommandAddDomElement::Execute(const RefPtr& page) const +{ + auto domDocument = page ? page->GetDomDocument() : nullptr; + if (!domDocument) { + LOGE("Failed to get DOM document"); + EventReport::SendJsException(JsExcepType::CREATE_NODE_ERR); + return; + } + + auto node = CreateDomNode(page, parentNodeId_); + if (!node) { + return; + } + MountDomNode(node, domDocument, parentNodeId_); + + if (tagName_ == DOM_NODE_TAG_CANVAS) { + auto bridge = JsEngineLoader::Get().CreateCanvasBridge(); + page->PushCanvasBridge(nodeId_, bridge); + } + page->PushNewNode(nodeId_, parentNodeId_); + + // create other accessibility node + auto accessibilityManager = GetAccessibilityManager(page); + if (!accessibilityManager) { + LOGW("accessibilityManager not exists"); + return; + } + if (tagName_ == DOM_NODE_TAG_OPTION) { + return; // option of menu and select for popup do not need auto creating + } + auto accessibilityNode = + accessibilityManager->CreateAccessibilityNode(tagName_, nodeId_, parentNodeId_, itemIndex_); + if (!accessibilityNode) { + LOGD("Failed to create accessibility node %{public}s", tagName_.c_str()); + return; + } + accessibilityManager->TrySaveTargetAndIdNode(id_, target_, accessibilityNode); + accessibilityNode->SetAttr(attrs_); +#if defined(WINDOWS_PLATFORM) || defined(MAC_PLATFORM) + accessibilityNode->SetStyle(styles_); +#endif + accessibilityNode->AddEvent(page->GetPageId(), events_); +} + +void JsCommandRemoveDomElement::Execute(const RefPtr& page) const +{ + auto domDocument = page ? page->GetDomDocument() : nullptr; + if (!domDocument) { + LOGE("Failed to get DOM document"); + EventReport::SendJsException(JsExcepType::REMOVE_DOM_ELEMENT_ERR); + return; + } + + auto node = domDocument->GetDOMNodeById(nodeId_); + if (!node) { + LOGE("Node %{private}d not exists", nodeId_); + EventReport::SendJsException(JsExcepType::REMOVE_DOM_ELEMENT_ERR); + return; + } + + auto parentNodeId = node->GetParentId(); + domDocument->RemoveNodes(node, true); + page->PushDirtyNode(parentNodeId); + + // remove accessibility node and it's children + auto accessibilityManager = GetAccessibilityManager(page); + if (!accessibilityManager) { + LOGW("accessibilityManager not exists"); + return; + } + auto accessibilityNode = accessibilityManager->GetAccessibilityNodeById(nodeId_); + if (!accessibilityNode) { + LOGE("Accessibility Node %{private}d not exists", nodeId_); + return; + } + accessibilityManager->RemoveAccessibilityNodes(accessibilityNode); +} + +void JsCommandUpdateDomElementAttrs::Execute(const RefPtr& page) const +{ + auto node = GetNodeFromPage(page, nodeId_); + if (!node) { + LOGE("Node %{private}d not exists", nodeId_); + EventReport::SendJsException(JsExcepType::UPDATE_DOM_ELEMENT_ERR); + return; + } + if (page->IsLiteStyle()) { + node->AdjustParamInLiteMode(); + } + node->SetBoxWrap(page->IsUseBoxWrap()); + if (page->CheckShowCommandConsumed()) { + auto showAttr = std::find_if(std::begin(attrs_), std::end(attrs_), + [](const std::pair& attr) { return attr.first == DOM_SHOW; }); + if (showAttr != std::end(attrs_)) { + return; + } + } + TrySaveTargetAndIdNode(id_, target_, page->GetDomDocument(), node); + node->SetAttr(attrs_); + node->SetShareId(shareId_); + UpdateForChart(node); + UpdateForImageAnimator(node); + UpdateForClock(node); + UpdateForBadge(node); + UpdateForStepperLabel(node); + UpdateForInput(node); + + node->GenerateComponentNode(); + page->PushDirtyNode(nodeId_); + + // update accessibility node + auto accessibilityManager = GetAccessibilityManager(page); + if (!accessibilityManager) { + LOGW("accessibilityManager not exists"); + return; + } + auto accessibilityNode = accessibilityManager->GetAccessibilityNodeById(nodeId_); + if (!accessibilityNode) { + LOGE("Accessibility Node %{private}d not exists", nodeId_); + return; + } + accessibilityManager->TrySaveTargetAndIdNode(id_, target_, accessibilityNode); + accessibilityNode->SetAttr(attrs_); +} + +void JsCommandUpdateDomElementStyles::Execute(const RefPtr& page) const +{ + auto node = GetNodeFromPage(page, nodeId_); + if (!node) { + LOGE("Node %{private}d not exists", nodeId_); + EventReport::SendJsException(JsExcepType::UPDATE_DOM_ELEMENT_ERR); + return; + } + if (animationStyles_) { + node->SetAnimationStyle(*animationStyles_); + } + node->SetStyle(styles_); + node->GenerateComponentNode(); + page->PushDirtyNode(nodeId_); + +#if defined(WINDOWS_PLATFORM) || defined(MAC_PLATFORM) + // update accessibility node + auto accessibilityManager = GetAccessibilityManager(page); + if (!accessibilityManager) { + LOGE("accessibilityManager not exists"); + return; + } + auto accessibilityNode = accessibilityManager->GetAccessibilityNodeById(nodeId_); + if (!accessibilityNode) { + LOGE("Accessibility Node %{private}d not exists", nodeId_); + return; + } + accessibilityManager->TrySaveTargetAndIdNode(id_, target_, accessibilityNode); + accessibilityNode->SetStyle(styles_); +#endif +} + +void JsCommandCallDomElementMethod::Execute(const RefPtr& page) const +{ + auto node = GetNodeFromPage(page, nodeId_); + if (!node) { + LOGE("Node %{private}d not exists", nodeId_); + return; + } + if (method_ == DOM_FOCUS) { + page->UpdateShowAttr(); + } + node->CallMethod(method_, param_); +} + +void JsCommandContextOperation::Execute(const RefPtr& page) const +{ + if (!task_) { + return; + } + auto canvas = AceType::DynamicCast(GetNodeFromPage(page, nodeId_)); + if (!canvas) { + LOGE("Node %{private}d not exists or not a canvas", nodeId_); + return; + } + auto paintChild = AceType::DynamicCast(canvas->GetSpecializedComponent()); + ACE_DCHECK(paintChild); + auto pool = paintChild->GetTaskPool(); + if (!pool) { + LOGE("canvas get pool failed"); + return; + } + task_(pool); +} + +void JsCommandAnimation::Execute(const RefPtr& page) const +{ + if (!page) { + LOGE("execute animation command failed. page is null."); + return; + } + if (task_) { + task_->AnimationBridgeTaskFunc(page, nodeId_); + } +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/js_frontend/js_command.h b/frameworks/bridge/js_frontend/js_command.h new file mode 100644 index 00000000..68455af7 --- /dev/null +++ b/frameworks/bridge/js_frontend/js_command.h @@ -0,0 +1,335 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_JS_COMMAND_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_JS_COMMAND_H + +#include +#include + +#include "base/memory/referenced.h" +#include "base/utils/macros.h" +#include "core/accessibility/accessibility_manager.h" +#include "core/pipeline/pipeline_context.h" +#include "frameworks/bridge/common/dom/dom_badge.h" +#include "frameworks/bridge/common/dom/dom_canvas.h" +#include "frameworks/bridge/common/dom/dom_chart.h" +#include "frameworks/bridge/common/dom/dom_clock.h" +#include "frameworks/bridge/common/dom/dom_document.h" +#include "frameworks/bridge/common/dom/dom_image_animator.h" +#include "frameworks/bridge/common/dom/dom_input.h" +#include "frameworks/bridge/common/dom/dom_proxy.h" +#include "frameworks/bridge/common/dom/dom_stepper.h" +#include "frameworks/bridge/common/dom/dom_stepper_item.h" + +namespace OHOS::Ace::Framework { + +class JsAcePage; + +// Basic class of command from JS framework +class ACE_EXPORT JsCommand : public Referenced { +public: + JsCommand() : Referenced(false) {} + ~JsCommand() override = default; + + virtual void Execute(const RefPtr& page) const = 0; +}; + +class ACE_EXPORT JsCommandDomElementOperator : public JsCommand { +public: + ~JsCommandDomElementOperator() override = default; + + void SetAttributes(std::vector>&& attrs) + { + attrs_ = std::move(attrs); + } + + void SetStyles(std::vector>&& styles) + { + styles_ = std::move(styles); + } + + void AddEvents(std::vector&& events) + { + events_ = std::move(events); + } + + void SetAnimationStyles(std::vector>&& animationStyles) + { + if (!animationStyles.empty()) { + animationStyles_ = + std::make_unique>>(std::move(animationStyles)); + } + } + + void SetTransitionEnter(std::vector>&& transitionEnter) + { + if (!transitionEnter.empty()) { + transitionEnter_ = + std::make_unique>>(std::move(transitionEnter)); + } + } + + void SetTransitionExit(std::vector>&& transitionExit) + { + if (!transitionExit.empty()) { + transitionExit_ = + std::make_unique>>(std::move(transitionExit)); + } + } + + void SetSharedTransitionName(std::vector>&& sharedTransitionName) + { + if (!sharedTransitionName.empty()) { + sharedTransitionName_ = std::make_unique>>( + std::move(sharedTransitionName)); + } + } + + void SetId(const std::string& id) + { + id_ = id; + } + + void SetShareId(const std::string& shareId) + { + shareId_ = shareId; + } + + void SetTarget(const std::string& target) + { + target_ = target; + } + + void SetSegments(const std::vector& segments) + { + segments_ = std::make_unique>(segments); + } + + void SetOptions(const ChartOptions& chartOptions) + { + chartOptions_ = std::make_unique(chartOptions); + } + + void SetDatasets(const std::vector& datasets) + { + if (!datasets.empty()) { + chartDatasets_ = std::make_unique>(datasets); + } + } + + void SetImagesAttr(std::vector&& images) + { + if (!images.empty()) { + images_ = std::make_unique>(std::move(images)); + } + } + + void SetClockConfig(const ClockConfig& clockConfig) + { + clockConfig_ = std::make_unique(clockConfig); + } + + void SetBadgeConfig(const BadgeConfig& badgeConfig) + { + badgeConfig_ = std::make_unique(badgeConfig); + } + + void SetStepperLabel(const StepperLabels& stepperLabel) + { + stepperLabel_ = std::make_unique(stepperLabel); + } + + void SetInputOptions(const std::vector& inputOptions) + { + inputOptions_ = std::make_unique>(inputOptions); + } + + void SetForIndex(const int32_t& itemIndex) + { + itemIndex_ = itemIndex; + } + + void SetPipelineContext(const WeakPtr& pipelineContext) + { + pipelineContext_ = pipelineContext; + } + + void SetIsCustomComponent(bool isCustom) + { + isCustomComponent_ = isCustom; + } + +protected: + explicit JsCommandDomElementOperator(NodeId nodeId) : nodeId_(nodeId) {} + + void UpdateForChart(const RefPtr& node) const; + void UpdateForImageAnimator(const RefPtr& node) const; + void UpdateForClock(const RefPtr& node) const; + void UpdateForBadge(const RefPtr& node) const; + void UpdateForStepperLabel(const RefPtr& node) const; + void UpdateForInput(const RefPtr& node) const; + + NodeId nodeId_ = -1; + int32_t itemIndex_ = -1; + std::vector> attrs_; + std::vector> styles_; + std::vector events_; + bool isCustomComponent_ = false; + std::unique_ptr>> animationStyles_; + std::unique_ptr>> transitionEnter_; + std::unique_ptr>> transitionExit_; + std::unique_ptr>> sharedTransitionName_; + std::string id_; + std::string shareId_; + std::string target_; + std::unique_ptr> segments_; + std::unique_ptr chartOptions_; + std::unique_ptr> chartDatasets_; + std::unique_ptr> images_; + std::unique_ptr clockConfig_; + std::unique_ptr badgeConfig_; + std::unique_ptr stepperLabel_; + std::unique_ptr> inputOptions_; + WeakPtr pipelineContext_; + bool useLiteStyle_ = false; +}; + +class ACE_EXPORT JsCommandDomElementCreator : public JsCommandDomElementOperator { +public: + ~JsCommandDomElementCreator() override = default; + +protected: + JsCommandDomElementCreator(const std::string& tagName, NodeId nodeId) + : JsCommandDomElementOperator(nodeId), tagName_(tagName) + {} + + RefPtr CreateDomNode(const RefPtr& page, NodeId parentNodeId = -1) const; + + void MountDomNode(const RefPtr& node, const RefPtr& domDocument, NodeId parentNodeId) const; + + RefPtr CreateDomProxy(const RefPtr& domDocument, NodeId parentNodeId = -1) const; + + void ScheduleUpdateForFixedNode(const RefPtr& domDocument) const; + + std::string tagName_; +}; + +// JS command, which used to create body of DOM tree. +class ACE_EXPORT JsCommandCreateDomBody final : public JsCommandDomElementCreator { +public: + JsCommandCreateDomBody(const std::string& tagName, NodeId nodeId) : JsCommandDomElementCreator(tagName, nodeId) {} + ~JsCommandCreateDomBody() override = default; + + void Execute(const RefPtr& page) const final; +}; + +// JS command, which used to create and add new element into DOM tree. +class ACE_EXPORT JsCommandAddDomElement final : public JsCommandDomElementCreator { +public: + JsCommandAddDomElement(const std::string& tagName, NodeId nodeId, NodeId parentNodeId) + : JsCommandDomElementCreator(tagName, nodeId), parentNodeId_(parentNodeId) + {} + ~JsCommandAddDomElement() override = default; + + void Execute(const RefPtr& page) const final; + +private: + NodeId parentNodeId_ = -1; +}; + +// JS command, which used to remove element from DOM tree. +class ACE_EXPORT JsCommandRemoveDomElement final : public JsCommand { +public: + explicit JsCommandRemoveDomElement(NodeId nodeId) : nodeId_(nodeId) {} + ~JsCommandRemoveDomElement() final = default; + + void Execute(const RefPtr& page) const final; + +private: + NodeId nodeId_ = -1; +}; + +// JS command, which used to update attributes of element in DOM tree. +class ACE_EXPORT JsCommandUpdateDomElementAttrs final : public JsCommandDomElementOperator { +public: + explicit JsCommandUpdateDomElementAttrs(NodeId nodeId) : JsCommandDomElementOperator(nodeId) {} + ~JsCommandUpdateDomElementAttrs() final = default; + + void Execute(const RefPtr& page) const final; +}; + +// JS command, which used to update styles of element in DOM tree. +class ACE_EXPORT JsCommandUpdateDomElementStyles final : public JsCommandDomElementOperator { +public: + explicit JsCommandUpdateDomElementStyles(NodeId nodeId) : JsCommandDomElementOperator(nodeId) {} + ~JsCommandUpdateDomElementStyles() final = default; + + void Execute(const RefPtr& page) const final; +}; + +// JS command, which used to call native method of element in DOM tree. +class ACE_EXPORT JsCommandCallDomElementMethod final : public JsCommand { +public: + JsCommandCallDomElementMethod(NodeId nodeId, const std::string& method, const std::string& param) + : nodeId_(nodeId), method_(method), param_(param) + {} + ~JsCommandCallDomElementMethod() final = default; + + void Execute(const RefPtr& page) const final; + +private: + NodeId nodeId_ = -1; + std::string method_; + std::string param_; +}; + +class ACE_EXPORT JsCommandContextOperation final : public JsCommand { +public: + JsCommandContextOperation(NodeId nodeId, std::function&)> task) + : nodeId_(nodeId), task_(std::move(task)) + {} + ~JsCommandContextOperation() final = default; + void Execute(const RefPtr& page) const final; + +private: + NodeId nodeId_ = -1; + std::function&)> task_; +}; + +class ACE_EXPORT AnimationBridgeTask : public AceType { + DECLARE_ACE_TYPE(AnimationBridgeTask, AceType) + +public: + AnimationBridgeTask() = default; + ~AnimationBridgeTask() override = default; + virtual void AnimationBridgeTaskFunc(const RefPtr&, NodeId) = 0; +}; + +class ACE_EXPORT JsCommandAnimation final : public JsCommand { +public: + JsCommandAnimation(NodeId nodeId, RefPtr task) : nodeId_(nodeId), task_(std::move(task)) {} + ~JsCommandAnimation() final = default; + + void Execute(const RefPtr& page) const final; + +private: + NodeId nodeId_ = -1; + RefPtr task_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_JS_COMMAND_H diff --git a/frameworks/bridge/js_frontend/js_frontend.cpp b/frameworks/bridge/js_frontend/js_frontend.cpp new file mode 100644 index 00000000..ed671a6e --- /dev/null +++ b/frameworks/bridge/js_frontend/js_frontend.cpp @@ -0,0 +1,592 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/js_frontend/js_frontend.h" + +#include "base/log/dump_log.h" +#include "base/log/event_report.h" + +namespace OHOS::Ace { +namespace { + +void TouchInfoToString(const BaseEventInfo& info, std::string& eventParam) +{ + eventParam.append("{\"touches\":[{"); + const auto touchInfo = TypeInfoHelper::DynamicCast(&info); + if (touchInfo) { + auto touchList = touchInfo->GetTouches(); + for (const auto& location : touchList) { + auto globalLocation = location.GetGlobalLocation(); + eventParam.append("\"globalX\":") + .append(std::to_string(globalLocation.GetX())) + .append(",\"globalY\":") + .append(std::to_string(globalLocation.GetY())) + .append(","); + auto localLocation = location.GetLocalLocation(); + eventParam.append("\"localX\":") + .append(std::to_string(localLocation.GetX())) + .append(",\"localY\":") + .append(std::to_string(localLocation.GetY())) + .append(","); + eventParam.append("\"size\":").append(std::to_string(location.GetSize())).append(","); + } + if (eventParam.back() == ',') { + eventParam.pop_back(); + } + eventParam.append("}],\"changedTouches\":[{"); + auto changeTouch = touchInfo->GetChangedTouches(); + for (const auto& change : changeTouch) { + auto globalLocation = change.GetGlobalLocation(); + eventParam.append("\"globalX\":") + .append(std::to_string(globalLocation.GetX())) + .append(",\"globalY\":") + .append(std::to_string(globalLocation.GetY())) + .append(","); + auto localLocation = change.GetLocalLocation(); + eventParam.append("\"localX\":") + .append(std::to_string(localLocation.GetX())) + .append(",\"localY\":") + .append(std::to_string(localLocation.GetY())) + .append(","); + eventParam.append("\"size\":").append(std::to_string(change.GetSize())).append(","); + } + if (eventParam.back() == ',') { + eventParam.pop_back(); + } + } + eventParam.append("}]}"); +} + +void MouseInfoToString(const BaseEventInfo& info, std::string& eventParam) +{ + const auto mouseInfo = TypeInfoHelper::DynamicCast(&info); + eventParam.append("{\"mouse\":{"); + if (mouseInfo) { + auto globalMouse = mouseInfo->GetGlobalMouse(); + eventParam.append("\"globalX\":") + .append(std::to_string(globalMouse.x)) + .append(",\"globalY\":") + .append(std::to_string(globalMouse.y)) + .append(",\"globalZ\":") + .append(std::to_string(globalMouse.z)) + .append(",\"localX\":") + .append(std::to_string(globalMouse.x)) + .append(",\"localY\":") + .append(std::to_string(globalMouse.y)) + .append(",\"localZ\":") + .append(std::to_string(globalMouse.z)) + .append(",\"deltaX\":") + .append(std::to_string(globalMouse.deltaX)) + .append(",\"deltaY\":") + .append(std::to_string(globalMouse.deltaY)) + .append(",\"deltaZ\":") + .append(std::to_string(globalMouse.deltaZ)) + .append(",\"scrollX\":") + .append(std::to_string(globalMouse.scrollX)) + .append(",\"scrollY\":") + .append(std::to_string(globalMouse.scrollY)) + .append(",\"scrollZ\":") + .append(std::to_string(globalMouse.scrollZ)) + .append(",\"action\":") + .append(std::to_string(static_cast(globalMouse.action))) + .append(",\"button\":") + .append(std::to_string(static_cast(globalMouse.button))) + .append(",\"pressedButtons\":") + .append(std::to_string(globalMouse.pressedButtons)); + } + eventParam.append("}}"); +} + +void SwipeInfoToString(const BaseEventInfo& info, std::string& eventParam) +{ + const auto& swipeInfo = TypeInfoHelper::DynamicCast(&info); + eventParam = swipeInfo->ToJsonParamInfo(); +} + +} // namespace + +RefPtr Frontend::Create() +{ + return AceType::MakeRefPtr(); +} + +JsFrontend::~JsFrontend() noexcept +{ + // To guarantee the jsEngine_ and delegate_ released in js thread + auto jsTaskExecutor = delegate_->GetAnimationJsTask(); + RefPtr jsEngine; + jsEngine.Swap(jsEngine_); + RefPtr delegate; + delegate.Swap(delegate_); + jsTaskExecutor.PostTask([jsEngine, delegate] {}); +} + +bool JsFrontend::Initialize(FrontendType type, const RefPtr& taskExecutor) +{ + LOGI("JsFrontend initialize begin."); + type_ = type; + ACE_DCHECK(type_ == FrontendType::JS); + InitializeFrontendDelegate(taskExecutor); + taskExecutor->PostTask( + [weakEngine = WeakPtr(jsEngine_), delegate = delegate_] { + auto jsEngine = weakEngine.Upgrade(); + if (!jsEngine) { + return; + } + jsEngine->Initialize(delegate); + }, + TaskExecutor::TaskType::JS); + + LOGI("JsFrontend initialize end."); + return true; +} + +void JsFrontend::AttachPipelineContext(const RefPtr& context) +{ + handler_ = AceType::MakeRefPtr(delegate_); + context->RegisterEventHandler(handler_); + delegate_->AttachPipelineContext(context); +} + +void JsFrontend::SetAssetManager(const RefPtr& assetManager) +{ + delegate_->SetAssetManager(assetManager); +} + +void JsFrontend::InitializeFrontendDelegate(const RefPtr& taskExecutor) +{ + Framework::FrontendDelegateImplBuilder builder; + builder.loadCallback = [weakEngine = WeakPtr(jsEngine_)](const std::string& url, + const RefPtr& jsPage, bool isMainPage) { + auto jsEngine = weakEngine.Upgrade(); + if (!jsEngine) { + return; + } + jsEngine->LoadJs(url, jsPage, isMainPage); + }; + + builder.transferCallback = [weakEngine = WeakPtr(jsEngine_)]( + const RefPtr& dispatcher) { + auto jsEngine = weakEngine.Upgrade(); + if (!jsEngine) { + return; + } + jsEngine->SetJsMessageDispatcher(dispatcher); + }; + + builder.asyncEventCallback = [weakEngine = WeakPtr(jsEngine_)]( + const std::string& eventId, const std::string& param) { + auto jsEngine = weakEngine.Upgrade(); + if (!jsEngine) { + return; + } + jsEngine->FireAsyncEvent(eventId, param); + }; + + builder.syncEventCallback = [weakEngine = WeakPtr(jsEngine_)]( + const std::string& eventId, const std::string& param) { + auto jsEngine = weakEngine.Upgrade(); + if (!jsEngine) { + return; + } + jsEngine->FireSyncEvent(eventId, param); + }; + + builder.updatePageCallback = [weakEngine = WeakPtr(jsEngine_)]( + const RefPtr& jsPage) { + auto jsEngine = weakEngine.Upgrade(); + if (!jsEngine) { + return; + } + jsEngine->UpdateRunningPage(jsPage); + jsEngine->UpdateStagingPage(jsPage); + }; + + builder.resetStagingPageCallback = [weakEngine = WeakPtr(jsEngine_)]() { + auto jsEngine = weakEngine.Upgrade(); + if (!jsEngine) { + return; + } + jsEngine->ResetStagingPage(); + }; + + builder.destroyPageCallback = [weakEngine = WeakPtr(jsEngine_)](int32_t pageId) { + auto jsEngine = weakEngine.Upgrade(); + if (!jsEngine) { + return; + } + jsEngine->DestroyPageInstance(pageId); + }; + + builder.destroyApplicationCallback = [weakEngine = WeakPtr(jsEngine_)]( + const std::string& packageName) { + auto jsEngine = weakEngine.Upgrade(); + if (!jsEngine) { + return; + } + jsEngine->DestroyApplication(packageName); + }; + + builder.timerCallback = [weakEngine = WeakPtr(jsEngine_)]( + const std::string& callbackId, const std::string& delay, bool isInterval) { + auto jsEngine = weakEngine.Upgrade(); + if (!jsEngine) { + return; + } + jsEngine->TimerCallback(callbackId, delay, isInterval); + }; + + builder.mediaQueryCallback = [weakEngine = WeakPtr(jsEngine_)]( + const std::string& callbackId, const std::string& args) { + auto jsEngine = weakEngine.Upgrade(); + if (!jsEngine) { + return; + } + jsEngine->MediaQueryCallback(callbackId, args); + }; + + builder.requestAnimationCallback = [weakEngine = WeakPtr(jsEngine_)]( + const std::string& callbackId, uint64_t timeStamp) { + auto jsEngine = weakEngine.Upgrade(); + if (!jsEngine) { + return; + } + jsEngine->RequestAnimationCallback(callbackId, timeStamp); + }; + + builder.jsCallback = [weakEngine = WeakPtr(jsEngine_)]( + const std::string& callbackId, const std::string& args) { + auto jsEngine = weakEngine.Upgrade(); + if (!jsEngine) { + return; + } + jsEngine->JsCallback(callbackId, args); + }; + builder.taskExecutor = taskExecutor; + builder.ability = ability_; + delegate_ = AceType::MakeRefPtr(builder); + if (jsEngine_) { + delegate_->SetGroupJsBridge(jsEngine_->GetGroupJsBridge()); + } else { + LOGE("the js engine is nullptr"); + EventReport::SendAppStartException(AppStartExcepType::JS_ENGINE_CREATE_ERR); + } +} + +void JsFrontend::RunPage(int32_t pageId, const std::string& url, const std::string& params) +{ + // Not use this pageId from backend, manage it in FrontendDelegateImpl. + delegate_->RunPage(url, params); +} + +void JsFrontend::PushPage(const std::string& url, const std::string& params) +{ + delegate_->Push(url, params); +} + +void JsFrontend::SendCallbackMessage(const std::string& callbackId, const std::string& data) const +{ + delegate_->OnJsCallback(callbackId, data); +} + +void JsFrontend::SetJsMessageDispatcher(const RefPtr& dispatcher) const +{ + delegate_->SetJsMessageDispatcher(dispatcher); +} + +void JsFrontend::TransferComponentResponseData(int callbackId, int32_t code, std::vector&& data) const +{ + delegate_->TransferComponentResponseData(callbackId, code, std::move(data)); +} + +void JsFrontend::TransferJsResponseData(int callbackId, int32_t code, std::vector&& data) const +{ + delegate_->TransferJsResponseData(callbackId, code, std::move(data)); +} + +void JsFrontend::TransferJsPluginGetError(int callbackId, int32_t errorCode, std::string&& errorMessage) const +{ + delegate_->TransferJsPluginGetError(callbackId, errorCode, std::move(errorMessage)); +} + +void JsFrontend::TransferJsEventData(int32_t callbackId, int32_t code, std::vector&& data) const +{ + delegate_->TransferJsEventData(callbackId, code, std::move(data)); +} + +void JsFrontend::LoadPluginJsCode(std::string&& jsCode) const +{ + delegate_->LoadPluginJsCode(std::move(jsCode)); +} + +void JsFrontend::UpdateState(Frontend::State state) +{ + switch (state) { + case Frontend::State::ON_CREATE: + break; + case Frontend::State::ON_DESTROY: + delegate_->OnApplicationDestroy(delegate_->GetAppID()); + break; + default: + LOGE("error State: %d", state); + } +} + +RefPtr JsFrontend::GetAccessibilityManager() const +{ + if (!delegate_) { + LOGE("GetAccessibilityManager delegate is null"); + return nullptr; + } + return delegate_->GetJsAccessibilityManager(); +} + +const WindowConfig& JsFrontend::GetWindowConfig() const +{ + return delegate_->GetWindowConfig(); +} + +bool JsFrontend::OnBackPressed() +{ + return delegate_->OnPageBackPress(); +} + +void JsFrontend::OnShow() +{ + delegate_->OnForground(); + foregroundFrontend_ = true; +} + +void JsFrontend::OnHide() +{ + delegate_->OnBackGround(); + foregroundFrontend_ = false; +} + +void JsFrontend::OnConfigurationUpdated(const std::string& data) +{ + delegate_->OnConfigurationUpdated(data); +} + +void JsFrontend::OnActive() +{ + delegate_->InitializeAccessibilityCallback(); + delegate_->OnActive(); +} + +void JsFrontend::OnInactive() +{ + delegate_->OnInactive(); +} + +bool JsFrontend::OnStartContinuation() +{ + return delegate_->OnStartContinuation(); +} + +void JsFrontend::OnCompleteContinuation(int32_t code) +{ + delegate_->OnCompleteContinuation(code); +} + +void JsFrontend::OnSaveData(std::string& data) +{ + delegate_->OnSaveData(data); +} + +bool JsFrontend::OnRestoreData(const std::string& data) +{ + return delegate_->OnRestoreData(data); +} + +void JsFrontend::OnNewRequest(const std::string& data) +{ + delegate_->OnNewRequest(data); +} + +void JsFrontend::CallRouterBack() +{ + delegate_->CallPopPage(); +} + +void JsFrontend::OnSurfaceChanged(int32_t width, int32_t height) +{ + delegate_->OnSurfaceChanged(); +} + +void JsFrontend::DumpFrontend() const +{ + int32_t routerIndex = 0; + std::string routerName; + std::string routerPath; + delegate_->GetState(routerIndex, routerName, routerPath); + + if (DumpLog::GetInstance().GetDumpFile()) { + DumpLog::GetInstance().AddDesc("Path: " + routerPath); + DumpLog::GetInstance().AddDesc("Length: " + std::to_string(routerIndex)); + DumpLog::GetInstance().Print(0, routerName, 0); + } +} + +void JsFrontend::TriggerGarbageCollection() +{ + jsEngine_->RunGarbageCollection(); +} + +void JsFrontend::RebuildAllPages() +{ + delegate_->RebuildAllPages(); +} + +void JsFrontend::SetColorMode(ColorMode colorMode) +{ + delegate_->SetColorMode(colorMode); +} + +void JsEventHandler::HandleAsyncEvent(const EventMarker& eventMarker) +{ + LOGD("HandleAsyncEvent pageId: %{private}d, eventId: %{private}s, eventType: %{private}s", + eventMarker.GetData().pageId, eventMarker.GetData().eventId.c_str(), eventMarker.GetData().eventType.c_str()); + std::string param = eventMarker.GetData().GetEventParam(); + delegate_->FireAsyncEvent(eventMarker.GetData().eventId, param.append("null"), std::string("")); + + AccessibilityEvent accessibilityEvent; + accessibilityEvent.nodeId = StringUtils::StringToInt(eventMarker.GetData().eventId); + accessibilityEvent.eventType = eventMarker.GetData().eventType; + delegate_->FireAccessibilityEvent(accessibilityEvent); +} + +void JsEventHandler::HandleAsyncEvent(const EventMarker& eventMarker, const BaseEventInfo& info) +{ + std::string eventParam; + if (eventMarker.GetData().eventType.find("touch") != std::string::npos) { + TouchInfoToString(info, eventParam); + } else if (eventMarker.GetData().eventType.find("mouse") != std::string::npos) { + MouseInfoToString(info, eventParam); + } else if (eventMarker.GetData().eventType == "swipe") { + SwipeInfoToString(info, eventParam); + } + + LOGD("HandleAsyncEvent pageId: %{public}d, eventId: %{public}s, eventType: %{public}s", + eventMarker.GetData().pageId, eventMarker.GetData().eventId.c_str(), eventMarker.GetData().eventType.c_str()); + std::string param; + auto adapter = TypeInfoHelper::DynamicCast(&info); + if (adapter) { + LOGD("HandleAsyncEvent pageId: %{public}d, eventId: %{public}s", eventMarker.GetData().pageId, + eventMarker.GetData().eventId.c_str()); + param = adapter->ToJSONString(); + } else { + param = eventMarker.GetData().GetEventParam(); + if (eventParam.empty()) { + param.append("null"); + } else { + param.append(eventParam); + } + } + delegate_->FireAsyncEvent(eventMarker.GetData().eventId, param, ""); + + AccessibilityEvent accessibilityEvent; + accessibilityEvent.nodeId = StringUtils::StringToInt(eventMarker.GetData().eventId); + accessibilityEvent.eventType = eventMarker.GetData().eventType; + delegate_->FireAccessibilityEvent(accessibilityEvent); +} + +void JsEventHandler::HandleSyncEvent(const EventMarker& eventMarker, const KeyEvent& info, bool& result) +{ + LOGD("HandleSyncEvent pageId: %{public}d, eventId: %{public}s, eventType: %{public}s", eventMarker.GetData().pageId, + eventMarker.GetData().eventId.c_str(), eventMarker.GetData().eventType.c_str()); + std::string param = std::string("\"") + .append(eventMarker.GetData().eventType) + .append("\",{\"code\":") + .append(std::to_string(static_cast(info.code))) + .append(",\"action\":") + .append(std::to_string(static_cast(info.action))) + .append(",\"repeatCount\":") + .append(std::to_string(static_cast(info.repeatTime))) + .append(",\"timestamp\":") + .append(std::to_string(static_cast(info.timeStamp))) + .append(",\"timestampStart\":") + .append(std::to_string(static_cast(info.timeStampStart))) + .append(",\"key\":\"") + .append(info.key) + .append("\"},"); + + result = delegate_->FireSyncEvent(eventMarker.GetData().eventId, param, ""); + + AccessibilityEvent accessibilityEvent; + accessibilityEvent.nodeId = StringUtils::StringToInt(eventMarker.GetData().eventId); + accessibilityEvent.eventType = std::to_string(static_cast(info.code)); + delegate_->FireAccessibilityEvent(accessibilityEvent); +} + +void JsEventHandler::HandleAsyncEvent(const EventMarker& eventMarker, int32_t param) +{ + LOGW("js event handler does not support this event type!"); + AccessibilityEvent accessibilityEvent; + accessibilityEvent.nodeId = StringUtils::StringToInt(eventMarker.GetData().eventId); + accessibilityEvent.eventType = eventMarker.GetData().eventType; + delegate_->FireAccessibilityEvent(accessibilityEvent); +} + +void JsEventHandler::HandleAsyncEvent(const EventMarker& eventMarker, const KeyEvent& info) +{ + LOGW("js event handler does not support this event type!"); + AccessibilityEvent accessibilityEvent; + accessibilityEvent.nodeId = StringUtils::StringToInt(eventMarker.GetData().eventId); + accessibilityEvent.eventType = eventMarker.GetData().eventType; + delegate_->FireAccessibilityEvent(accessibilityEvent); +} + +void JsEventHandler::HandleAsyncEvent(const EventMarker& eventMarker, const std::string& param) +{ + LOGD("HandleAsyncEvent pageId: %{public}d, eventId: %{public}s", eventMarker.GetData().pageId, + eventMarker.GetData().eventId.c_str()); + delegate_->FireAsyncEvent(eventMarker.GetData().eventId, param, ""); + + AccessibilityEvent accessibilityEvent; + accessibilityEvent.nodeId = StringUtils::StringToInt(eventMarker.GetData().eventId); + accessibilityEvent.eventType = eventMarker.GetData().eventType; + delegate_->FireAccessibilityEvent(accessibilityEvent); +} + +void JsEventHandler::HandleSyncEvent(const EventMarker& eventMarker, bool& result) +{ + LOGW("js event handler does not support this event type!"); + AccessibilityEvent accessibilityEvent; + accessibilityEvent.nodeId = StringUtils::StringToInt(eventMarker.GetData().eventId); + accessibilityEvent.eventType = eventMarker.GetData().eventType; + delegate_->FireAccessibilityEvent(accessibilityEvent); +} + +void JsEventHandler::HandleSyncEvent(const EventMarker& eventMarker, const BaseEventInfo& info, bool& result) +{ + LOGW("js event handler does not support this event type!"); + AccessibilityEvent accessibilityEvent; + accessibilityEvent.nodeId = StringUtils::StringToInt(eventMarker.GetData().eventId); + accessibilityEvent.eventType = eventMarker.GetData().eventType; + delegate_->FireAccessibilityEvent(accessibilityEvent); +} + +void JsEventHandler::HandleSyncEvent(const EventMarker& eventMarker, const std::string& param, std::string& result) +{ + LOGW("js event handler does not support this event type!"); + AccessibilityEvent accessibilityEvent; + accessibilityEvent.nodeId = StringUtils::StringToInt(eventMarker.GetData().eventId); + accessibilityEvent.eventType = eventMarker.GetData().eventType; + delegate_->FireAccessibilityEvent(accessibilityEvent); + delegate_->FireSyncEvent(eventMarker.GetData().eventId, param, std::string(""), result); +} + +} // namespace OHOS::Ace diff --git a/frameworks/bridge/js_frontend/js_frontend.h b/frameworks/bridge/js_frontend/js_frontend.h new file mode 100644 index 00000000..814f11a3 --- /dev/null +++ b/frameworks/bridge/js_frontend/js_frontend.h @@ -0,0 +1,203 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_JS_FRONTEND_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_JS_FRONTEND_H + +#include +#include + +#include "base/memory/ace_type.h" +#include "base/utils/string_utils.h" +#include "core/common/ace_page.h" +#include "core/common/container.h" +#include "core/common/frontend.h" +#include "core/common/js_message_dispatcher.h" +#include "frameworks/bridge/js_frontend/engine/common/js_engine.h" +#include "frameworks/bridge/js_frontend/frontend_delegate_impl.h" +#include "frameworks/bridge/js_frontend/js_ace_page.h" + +namespace OHOS::Ace { + +// JsFrontend is the unique entrance from ACE backend to frontend. +// The relationship between AceActivity, AceContainer and JsFrontend is 1:1:1. +// So JsFrontend would be responsible for below things: +// - Create and initialize QuickJS engine. +// - Load pages of a JS app, and parse the manifest.json before loading main page. +// - Maintain the page stack of JS app by FrontendDelegateImpl. +// - Lifecycle of JS app (also AceActivity). +class JsFrontend : public Frontend { + DECLARE_ACE_TYPE(JsFrontend, Frontend); + +public: + JsFrontend() = default; + ~JsFrontend() override; + + bool Initialize(FrontendType type, const RefPtr& taskExecutor) override; + + void AttachPipelineContext(const RefPtr& context) override; + + void SetAssetManager(const RefPtr& assetManager) override; + + void RunPage(int32_t pageId, const std::string& url, const std::string& params) override; + + void PushPage(const std::string& url, const std::string& params) override; + + // Js frontend manages all pages self. + void AddPage(const RefPtr& page) override {}; + + RefPtr GetPage(int32_t pageId) const override + { + return delegate_->GetPage(pageId); + }; + + WeakPtr GetCurrentReadyPage() const + { + return delegate_->GetCurrentReadyPage(); + } + + void TriggerGarbageCollection() override; + + void SendCallbackMessage(const std::string& callbackId, const std::string& data) const override; + // platform channel. + void SetJsMessageDispatcher(const RefPtr& dispatcher) const override; + void TransferComponentResponseData(int32_t callbackId, int32_t code, + std::vector&& data) const override; + void TransferJsResponseData(int32_t callbackId, int32_t code, std::vector&& data) const override; + void TransferJsPluginGetError(int32_t callbackId, int32_t errorCode, std::string&& errorMessage) const override; + void TransferJsEventData(int32_t callbackId, int32_t code, std::vector&& data) const override; + void LoadPluginJsCode(std::string&& jsCode) const override; + + // application lifecycle. + void UpdateState(Frontend::State state) override; + + // page lifecycle. + bool OnBackPressed() override; + void OnShow() override; + void OnHide() override; + void OnConfigurationUpdated(const std::string& data) override; + void OnActive() override; + void OnInactive() override; + bool OnStartContinuation() override; + void OnCompleteContinuation(int32_t code) override; + void OnSaveData(std::string& data) override; + bool OnRestoreData(const std::string& data) override; + void OnNewRequest(const std::string& data) override; + void CallRouterBack() override; + void SetColorMode(ColorMode colorMode) override; + + void OnSurfaceChanged(int32_t width, int32_t height) override; + + void DumpFrontend() const override; + + RefPtr GetEventHandler() override + { + return handler_; + }; + + FrontendType GetType() override + { + return type_; + } + + // judge frontend is foreground frontend. + bool IsForeground() override + { + return foregroundFrontend_; + } + + RefPtr GetAccessibilityManager() const override; + const WindowConfig& GetWindowConfig() const override; + + void SetJsEngine(const RefPtr& jsEngine) + { + jsEngine_ = jsEngine; + } + + void SetNeedDebugBreakPoint(bool value) + { + if (jsEngine_) { + jsEngine_->SetNeedDebugBreakPoint(value); + } + } + + void SetDebugVersion(bool value) + { + if (jsEngine_) { + jsEngine_->SetDebugVersion(value); + } + } + + void SetInstanceName(const std::string& name) + { + if (jsEngine_) { + jsEngine_->SetInstanceName(name); + } + } + + void SetAbility(void* ability) + { + ability_ = ability; + } + + void RebuildAllPages() override; + + +private: + void InitializeFrontendDelegate(const RefPtr& taskExecutor); + + FrontendType type_ = FrontendType::JS; + RefPtr delegate_; + RefPtr handler_; + RefPtr jsEngine_; + RefPtr accessibilityManager_; + bool foregroundFrontend_ = false; + void* ability_ = nullptr; +}; + +class JsEventHandler : public AceEventHandler { +public: + explicit JsEventHandler(const RefPtr& delegate) : delegate_(delegate) + { + ACE_DCHECK(delegate_); + } + + ~JsEventHandler() override = default; + + void HandleAsyncEvent(const EventMarker& eventMarker) override; + + void HandleAsyncEvent(const EventMarker& eventMarker, int32_t param) override; + + void HandleAsyncEvent(const EventMarker& eventMarker, const BaseEventInfo& info) override; + + void HandleAsyncEvent(const EventMarker& eventMarker, const KeyEvent& info) override; + + void HandleAsyncEvent(const EventMarker& eventMarker, const std::string& param) override; + + void HandleSyncEvent(const EventMarker& eventMarker, bool& result) override; + + void HandleSyncEvent(const EventMarker& eventMarker, const BaseEventInfo& info, bool& result) override; + + void HandleSyncEvent(const EventMarker& eventMarker, const KeyEvent& info, bool& result) override; + + void HandleSyncEvent(const EventMarker& eventMarker, const std::string& param, std::string& result) override; + +private: + RefPtr delegate_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_JS_FRONTEND_JS_FRONTEND_H diff --git a/frameworks/bridge/test/BUILD.gn b/frameworks/bridge/test/BUILD.gn new file mode 100644 index 00000000..18bbd123 --- /dev/null +++ b/frameworks/bridge/test/BUILD.gn @@ -0,0 +1,66 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +group("unittest") { + testonly = true + + deps = [ + "unittest/jsfrontend/animation:unittest", + "unittest/jsfrontend/dombutton:unittest", + "unittest/jsfrontend/domdiv:unittest", + "unittest/jsfrontend/domdivider:unittest", + "unittest/jsfrontend/domimage:unittest", + "unittest/jsfrontend/domimageanimator:unittest", + "unittest/jsfrontend/dominput:unittest", + "unittest/jsfrontend/domlabel:unittest", + "unittest/jsfrontend/domlist:unittest", + "unittest/jsfrontend/domnode:unittest", + "unittest/jsfrontend/domspan:unittest", + "unittest/jsfrontend/domsvg:unittest", + "unittest/jsfrontend/domsvgtext:unittest", + "unittest/jsfrontend/domtext:unittest", + "unittest/jsfrontend/event:unittest", + "unittest/jsfrontend/manifest:unittest", + "unittest/jsfrontend/progress:unittest", + "unittest/jsfrontend/slider:unittest", + "unittest/jsfrontend/swiper:unittest", + "unittest/jsfrontend/switch:unittest", + "unittest/jsfrontend/utils:unittest", + ] + + if (!is_wearable_product) { + deps += [ + "unittest/cardfrontend/dombutton:unittest", + "unittest/cardfrontend/domclock:unittest", + "unittest/cardfrontend/domdiv:unittest", + "unittest/cardfrontend/domimage:unittest", + "unittest/cardfrontend/domprogress:unittest", + "unittest/cardfrontend/domstack:unittest", + "unittest/cardfrontend/domtext:unittest", + "unittest/cardfrontend/frontend:unittest", + "unittest/cardfrontend/mediaquery:unittest", + "unittest/jsfrontend/dompiece:unittest", + "unittest/jsfrontend/dompopup:unittest", + "unittest/jsfrontend/domrating:unittest", + "unittest/jsfrontend/domrefresh:unittest", + "unittest/jsfrontend/domsearch:unittest", + "unittest/jsfrontend/domtab:unittest", + "unittest/jsfrontend/domtextarea:unittest", + "unittest/jsfrontend/marquee:unittest", + "unittest/jsfrontend/video:unittest", + ] + } +} diff --git a/frameworks/bridge/test/unittest/cardfrontend/card_test_factory.cpp b/frameworks/bridge/test/unittest/cardfrontend/card_test_factory.cpp new file mode 100644 index 00000000..e80f060b --- /dev/null +++ b/frameworks/bridge/test/unittest/cardfrontend/card_test_factory.cpp @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/test/unittest/cardfrontend/card_test_factory.h" + +#include + +#include "frameworks/bridge/test/unittest/jsfrontend/dom_mock.h" + +#define private public +#include "frameworks/bridge/card_frontend/card_frontend.h" + +namespace OHOS::Ace::Framework { + +CardTestFactory::CardTestFactory() = default; +CardTestFactory::~CardTestFactory() = default; + +void CardTestFactory::ParseCardDsl(const RefPtr& page, const std::string& content) +{ + ParseCardDslWithParams(page, content, ""); +} + +void CardTestFactory::FlushCommands(const RefPtr& page) +{ + auto jsCommands = std::make_shared>>(); + page->PopAllCommands(*jsCommands); + + for (const auto& command : *jsCommands) { + command->Execute(page); + } +} + +void CardTestFactory::ParseCardDslWithParams( + const RefPtr& page, const std::string& content, const std::string& params) +{ + page->SetFlushCallback( + [](const RefPtr& page) { CardTestFactory::GetInstance().FlushCommands(page); }); + CardFrontend cardFrontend; + if (!context_) { + auto frontend = AceType::MakeRefPtr(); + auto platformWindow = std::make_unique(); + auto window = std::make_unique(std::move(platformWindow)); + context_ = AceType::MakeRefPtr(std::move(window), nullptr, nullptr, nullptr, frontend, 0); + } + cardFrontend.Initialize(FrontendType::JS_CARD, nullptr); + cardFrontend.ParsePage(context_, content, params, page); + nodeCnt_ = cardFrontend.parseJsCard_->GetNumberOfNodes(); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/test/unittest/cardfrontend/card_test_factory.h b/frameworks/bridge/test/unittest/cardfrontend/card_test_factory.h new file mode 100644 index 00000000..6edeef41 --- /dev/null +++ b/frameworks/bridge/test/unittest/cardfrontend/card_test_factory.h @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_TEST_UNITTEST_CARDFRONTEND_CARD_TEST_FACTORY_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_TEST_UNITTEST_CARDFRONTEND_CARD_TEST_FACTORY_H + +#include + +#include "base/memory/referenced.h" +#include "base/utils/noncopyable.h" +#include "base/utils/singleton.h" +#include "frameworks/bridge/card_frontend/js_card_parser.h" + +namespace OHOS::Ace::Framework { + +class CardTestFactory : public Singleton { + DECLARE_SINGLETON(CardTestFactory); + ACE_DISALLOW_MOVE(CardTestFactory); + +public: + void ParseCardDsl(const RefPtr& page, const std::string& content); + void ParseCardDslWithParams(const RefPtr& page, const std::string& content, const std::string& params); + + int32_t GetNodeNumber() + { + int32_t cnt = nodeCnt_; + nodeCnt_ = 0; + return cnt; + } + +private: + void FlushCommands(const RefPtr& page); + int32_t nodeCnt_ = 0; + RefPtr context_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_TEST_UNITTEST_CARDFRONTEND_CARD_TEST_FACTORY_H diff --git a/frameworks/bridge/test/unittest/cardfrontend/dombutton/BUILD.gn b/frameworks/bridge/test/unittest/cardfrontend/dombutton/BUILD.gn new file mode 100644 index 00000000..5e781a15 --- /dev/null +++ b/frameworks/bridge/test/unittest/cardfrontend/dombutton/BUILD.gn @@ -0,0 +1,56 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/jscard/cardbutton" + +ohos_unittest("DomCardButtonTest") { + module_out_path = module_output_path + + sources = [ + "../card_test_factory.cpp", + "dom_button_test.cpp", + ] + + configs = [ + ":config_domnode_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_domnode_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":DomCardButtonTest" ] +} diff --git a/frameworks/bridge/test/unittest/cardfrontend/dombutton/dom_button_test.cpp b/frameworks/bridge/test/unittest/cardfrontend/dombutton/dom_button_test.cpp new file mode 100644 index 00000000..3068690e --- /dev/null +++ b/frameworks/bridge/test/unittest/cardfrontend/dombutton/dom_button_test.cpp @@ -0,0 +1,187 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/json/json_util.h" +#include "base/utils/utils.h" +#include "frameworks/bridge/common/dom/dom_button.h" +#include "frameworks/bridge/common/dom/dom_document.h" +#include "frameworks/bridge/test/unittest/cardfrontend/card_test_factory.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace::Framework { + +class DomCardButtonTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); +}; + +void DomCardButtonTest::SetUpTestCase() {} +void DomCardButtonTest::TearDownTestCase() {} +void DomCardButtonTest::SetUp() {} +void DomCardButtonTest::TearDown() {} + +/** + * @tc.name: DomCardButtonTest001 + * @tc.desc: Verify that DomButton can be created successfully. + * @tc.type: FUNC + * @tc.require: AR000F2BB8 + * @tc.author: lixingchi + */ +HWTEST_F(DomCardButtonTest, DomCardButtonTest001, TestSize.Level1) +{ + const std::string index = "{" + " \"template\": { " + " \"type\": \"button\" " + " }, " + " \"styles\": {}, " + " \"actions\": {}, " + " \"data\": {} " + "} "; + /** + * @tc.steps: step1. parse card dsl by CardTestFactory. + */ + auto document = AceType::MakeRefPtr(0); + auto page = AceType::MakeRefPtr(0, document, ""); + CardTestFactory::GetInstance().ParseCardDsl(page, index); + auto domButton = document->GetDOMNodeById(DOM_ROOT_NODE_ID_BASE); + ASSERT_TRUE(domButton != nullptr); + ASSERT_TRUE(domButton->GetTag() == "button"); + ASSERT_TRUE(CardTestFactory::GetInstance().GetNodeNumber() == 1); +} + +/** + * @tc.name: DomCardButtonTest002 + * @tc.desc: Verify that DomButton data binding successfully. + * @tc.type: FUNC + * @tc.require: AR000F2BB8 + * @tc.author: lixingchi + */ +HWTEST_F(DomCardButtonTest, DomCardButtonTest002, TestSize.Level1) +{ + const std::string index = "{" + " \"template\": { " + " \"type\": \"button\", " + " \"shown\": \"{{show}}\" " + " }, " + " \"styles\": {}, " + " \"actions\": {}, " + " \"data\": { " + " \"show\": false " + " } " + "} "; + /** + * @tc.steps: step1. parse card dsl by CardTestFactory. + */ + auto document = AceType::MakeRefPtr(0); + auto page = AceType::MakeRefPtr(0, document, ""); + CardTestFactory::GetInstance().ParseCardDsl(page, index); + auto domButton = document->GetDOMNodeById(DOM_ROOT_NODE_ID_BASE); + ASSERT_TRUE(domButton != nullptr); + ASSERT_TRUE(domButton->GetTag() == "button"); + ASSERT_TRUE(domButton->IsShow() == false); + ASSERT_TRUE(CardTestFactory::GetInstance().GetNodeNumber() == 1); +} + +/** + * @tc.name: DomCardButtonTest003 + * @tc.desc: Verify that DomButton styles set successfully. + * @tc.type: FUNC + * @tc.require: AR000F2BB8 + * @tc.author: lixingchi + */ +HWTEST_F(DomCardButtonTest, DomCardButtonTest003, TestSize.Level1) +{ + const std::string index = "{ " + " \"template\": { " + " \"type\": \"button\", " + " \"classList\": [ " + " \"container\" " + " ] " + " }, " + " \"styles\": { " + " \".container\": { " + " \"height\": \"300px\", " + " \"width\": \"300px\", " + " \"marginTop\": \"30px\", " + " \"marginBottom\": \"30px\", " + " \"marginLeft\": \"30px\", " + " \"marginRight\": \"30px\" " + " } " + " }, " + " \"actions\": {}, " + " \"data\": {} " + "}"; + /** + * @tc.steps: step1. parse card dsl by CardTestFactory. + */ + auto document = AceType::MakeRefPtr(0); + auto page = AceType::MakeRefPtr(0, document, ""); + CardTestFactory::GetInstance().ParseCardDsl(page, index); + auto domButton = document->GetDOMNodeById(DOM_ROOT_NODE_ID_BASE); + ASSERT_TRUE(domButton != nullptr); + ASSERT_TRUE(domButton->GetTag() == "button"); + ASSERT_TRUE(static_cast(domButton->GetHeight().Value()) == 300); + ASSERT_TRUE(static_cast(domButton->GetWidth().Value()) == 300); + ASSERT_TRUE(static_cast(domButton->GetMarginTop().Value()) == 30); + ASSERT_TRUE(static_cast(domButton->GetMarginBottom().Value()) == 30); + ASSERT_TRUE(static_cast(domButton->GetMarginLeft().Value()) == 30); + ASSERT_TRUE(static_cast(domButton->GetMarginRight().Value()) == 30); + ASSERT_TRUE(CardTestFactory::GetInstance().GetNodeNumber() == 1); +} + +/** + * @tc.name: DomCardButtonTest004 + * @tc.desc: Verify that DomButton event binding successfully. + * @tc.type: FUNC + * @tc.require: AR000F2BB8 + * @tc.author: lixingchi + */ +HWTEST_F(DomCardButtonTest, DomCardButtonTest004, TestSize.Level1) +{ + const std::string index = "{ " + " \"template\": { " + " \"type\": \"button\", " + " \"events\": { " + " \"click\": \"test\" " + " } " + " }, " + " \"styles\": {}, " + " \"actions\": {}, " + " \"data\": {} " + "}"; + /** + * @tc.steps: step1. parse card dsl by CardTestFactory. + */ + auto document = AceType::MakeRefPtr(0); + auto page = AceType::MakeRefPtr(0, document, ""); + CardTestFactory::GetInstance().ParseCardDsl(page, index); + auto domButton = document->GetDOMNodeById(DOM_ROOT_NODE_ID_BASE); + ASSERT_TRUE(domButton->GetTag() == "button"); + ASSERT_TRUE(domButton != nullptr); + auto buttonComponent = AceType::DynamicCast(domButton->GetSpecializedComponent()); + ASSERT_TRUE(buttonComponent != nullptr); + EXPECT_TRUE(buttonComponent->GetClickedEventId().GetData().eventType == DOM_CLICK); + EXPECT_TRUE(buttonComponent->GetClickedEventId().GetData().eventId == DOM_DEFAULT_ROOT_NODE_ID); + ASSERT_TRUE(CardTestFactory::GetInstance().GetNodeNumber() == 1); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/test/unittest/cardfrontend/domchart/dom_chart_test.cpp b/frameworks/bridge/test/unittest/cardfrontend/domchart/dom_chart_test.cpp new file mode 100644 index 00000000..2c45d5ad --- /dev/null +++ b/frameworks/bridge/test/unittest/cardfrontend/domchart/dom_chart_test.cpp @@ -0,0 +1,284 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "file_ex.h" +#include "gtest/gtest.h" + +#include "base/json/json_util.h" +#include "frameworks/bridge/common/dom/dom_document.h" +#include "frameworks/bridge/test/unittest/cardfrontend/card_test_factory.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace::Framework { +namespace { + +const std::string CORRECT_PATH = "/data/test/resource/carddomchart/correct.json"; +const std::string ERROR_PATH = "/data/test/resource/carddomchart/error.json"; +constexpr int32_t DOM_CHART_INDEX = 1; + +} // namespace + +class DomCardChartTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; +}; + +void DomCardChartTest::SetUpTestCase() {} +void DomCardChartTest::TearDownTestCase() {} +void DomCardChartTest::SetUp() {} +void DomCardChartTest::TearDown() {} + +/** + * @tc.name: DomChartDataParse001 + * @tc.desc: Verify that dom chart can be created successfully and the attr is correct. + * @tc.type: FUNC + * @tc.require: AR000F2BBA + * @tc.author: gaoquan + */ +HWTEST_F(DomCardChartTest, DomCardChartDataParse001, TestSize.Level1) +{ + /** + * @tc.steps: step1. read the correct card template file. + * @tc.expected: step1. read file successfully. + */ + std::string index; + bool isSuccess = LoadStringFromFile(CORRECT_PATH, index); + ASSERT_TRUE(isSuccess); + + /** + * @tc.steps: step2. use factory to parse template file. + * @tc.expected: step2. parse successfully and can get the dom chart. + */ + auto document = AceType::MakeRefPtr(0); + auto page = AceType::MakeRefPtr(0, document, ""); + CardTestFactory::GetInstance().ParseCardDsl(page, index); + auto domChart = AceType::DynamicCast(document->GetDOMNodeById(DOM_CHART_INDEX)); + ASSERT_TRUE(domChart != nullptr); + ASSERT_TRUE(domChart->GetTag() == "chart"); + + /** + * @tc.steps: step3. read chart attr. + * @tc.expected: step3. chart attr is correct. + */ + auto chartComponent = AceType::DynamicCast(domChart->GetSpecializedComponent()); + ASSERT_TRUE(chartComponent != nullptr); + auto mainCharts = chartComponent->GetMainCharts(); + ASSERT_EQ(mainCharts.size(), 1UL); + // MainChart Info. + auto mainChart = mainCharts[0]; + + auto stockColor = mainChart.GetStrokeColor(); + ASSERT_EQ(stockColor, Color::FromString("#0081ff")); + auto fillColor = mainChart.GetFillColor(); + ASSERT_EQ(fillColor, Color::FromString("#cce5ff")); + auto lineWidth = mainChart.GetLineWidth(); + ASSERT_EQ(lineWidth, 3); + auto smoothFlag = mainChart.GetSmoothFlag(); + ASSERT_EQ(smothFlag, true); + + auto dataSets = mainChart.GetData(); + ASSERT_EQ(dataSets.size(), 5UL); + + auto lineInfo = dataSets[0]; + // check SegmentInfo + auto segmentInfo = lineInfo.GetSegmentInfo(); + ASSERT_EQ(segmentInfo.GetLineType(), LineType::DASHED); + ASSERT_EQ(segmentInfo.GetSolidWidth(), 10); + ASSERT_EQ(segmentInfo.GetSegmentColor(), Color::FromString("#4cffffff")); + + // check TextInfo + auto textInfo = lineInfo.GetTextInfo(); + ASSERT_EQ(textInfo.GetTextValue(), -5); + ASSERT_EQ(textInfo.GetPlacement(), Placement::TOP); + ASSERT_EQ(textInfo.GetColor(), Color::FromString("#4cffffff")); + // check PointInfo + auto pointInfo = lineInfo.GetPointInfo(); + ASSERT_EQ(pointInfo.GetPointShape(), PointShape::CIRCLE); + ASSERT_EQ(pointInfo.GetPointSize(), 15); + ASSERT_EQ(pointInfo.GetPointStrokeWidth(), 5); + ASSERT_EQ(pointInfo.GetFillColor(), Color::FromString("#4cffffff")); + ASSERT_EQ(pointInfo.GetStrokeColor(), Color::FromString('#00ffffff')); + ASSERT_EQ(pointInfo.GetDisplay(), true); + + // check xAxis + auto horizontalOption = chartComponent->GetHorizontalOption(); + ASSERT_EQ(horizontalOption.min, 0); + ASSERT_EQ(horizontalOption.max, 4); + ASSERT_EQ(horizontalOption.display, false); + + // check yAxis + auto verticalOption = chartComponent->GetVerticalOption(); + ASSERT_EQ(verticalOption.min, -10); + ASSERT_EQ(verticalOption.max, 40); + ASSERT_EQ(verticalOption.display, false); +} + +/** + * @tc.name: DomChartDataParse002 + * @tc.desc: Verify that dom chart can be created successfully and the attr is error. + * @tc.type: FUNC + * @tc.require: AR000F2BBA + * @tc.author: gaoquan + */ +HWTEST_F(DomCardChartTest, DomCardChartDataParse002, TestSize.Level1) +{ + /** + * @tc.steps: step1. read the correct card template file. + * @tc.expected: step1. read file successfully. + */ + std::string index; + bool isSuccess = LoadStringFromFile(ERROR_PATH, index); + ASSERT_TRUE(isSuccess); + + /** + * @tc.steps: step2. use factory to parse template file. + * @tc.expected: step2. parse successfully and can get the dom chart. + */ + auto document = AceType::MakeRefPtr(0); + auto page = AceType::MakeRefPtr(0, document, ""); + CardTestFactory::GetInstance().ParseCardDsl(page, index); + auto domChart = AceType::DynamicCast(document->GetDOMNodeById(DOM_CHART_INDEX)); + ASSERT_TRUE(domChart != nullptr); + ASSERT_TRUE(domChart->GetTag() == "chart"); + + /** + * @tc.steps: step3. read chart attr. + * @tc.expected: step3. chart attr is correct except for the lineOps + */ + auto chartComponent = AceType::DynamicCast(domChart->GetSpecializedComponent()); + ASSERT_TRUE(chartComponent != nullptr); + auto mainCharts = chartComponent->GetMainCharts(); + ASSERT_EQ(mainCharts.size(), 1UL); + // MainChart Info. + auto mainChart = mainCharts[0]; + + auto stockColor = mainChart.GetStrokeColor(); + ASSERT_EQ(stockColor, Color::FromString("#0081ff")); + auto fillColor = mainChart.GetFillColor(); + ASSERT_EQ(fillColor, Color::FromString("#cce5ff")); + auto lineWidth = mainChart.GetLineWidth(); + ASSERT_EQ(lineWidth, 3); + auto smoothFlag = mainChart.GetSmoothFlag(); + ASSERT_EQ(smothFlag, true); + + auto dataSets = mainChart.GetData(); + ASSERT_EQ(dataSets.size(), 5UL); + + auto lineInfo = dataSets[0]; + // check SegmentInfo + auto segmentInfo = lineInfo.GetSegmentInfo(); + ASSERT_EQ(segmentInfo.GetLineType(), LineType::DASHED); + ASSERT_EQ(segmentInfo.GetSolidWidth(), 10); + ASSERT_EQ(segmentInfo.GetSegmentColor(), Color::FromString("#4cffffff")); + + // check TextInfo + auto textInfo = lineInfo.GetTextInfo(); + ASSERT_EQ(textInfo.GetTextValue(), -5); + ASSERT_EQ(textInfo.GetPlacement(), Placement::TOP); + ASSERT_EQ(textInfo.GetColor(), Color::FromString("#4cffffff")); + // check PointInfo + auto pointInfo = lineInfo.GetPointInfo(); + ASSERT_EQ(pointInfo.GetPointShape(), PointShape::CIRCLE); + ASSERT_EQ(pointInfo.GetPointSize(), 15); + ASSERT_EQ(pointInfo.GetPointStrokeWidth(), 5); + ASSERT_EQ(pointInfo.GetFillColor(), Color::FromString("#4cffffff")); + ASSERT_EQ(pointInfo.GetStrokeColor(), Color::FromString('#00ffffff')); + ASSERT_EQ(pointInfo.GetDisplay(), true); + + // check xAxis which should be default + auto horizontalOption = chartComponent->GetHorizontalOption(); + ASSERT_EQ(horizontalOption.min, 0); + ASSERT_EQ(horizontalOption.max, 100); + ASSERT_EQ(horizontalOption.display, false); + + // check yAxis which should be default + auto verticalOption = chartComponent->GetVerticalOption(); + ASSERT_EQ(verticalOption.min, 0); + ASSERT_EQ(verticalOption.max, 100); + ASSERT_EQ(verticalOption.display, false); +} + +/** + * @tc.name: DomChartDataParse003 + * @tc.desc: Verify that dom chart can be created successfully and updated successfully. + * @tc.type: FUNC + * @tc.require: AR000F2BBA + * @tc.author: gaoquan + */ +HWTEST_F(DomCardChartTest, DomCardChartDataParse003, TestSize.Level1) +{ + /** + * @tc.steps: step1. read the correct card template file. + * @tc.expected: step1. read file successfully. + */ + std::string index; + bool isSuccess = LoadStringFromFile(CORRECT_PATH, index); + ASSERT_TRUE(isSuccess); + + /** + * @tc.steps: step2. use factory to parse template file. + * @tc.expected: step2. parse successfully and can get the dom chart. + */ + auto document = AceType::MakeRefPtr(0); + auto page = AceType::MakeRefPtr(0, document, ""); + auto params = "{\n" + " \"lineOps\": {\n" + " \"xAxis\": {\n" + " \"min\": 2,\n" + " \"max\": 6,\n" + " \"display\": true\n" + " },\n" + " \"yAxis\": {\n" + " \"min\": -20,\n" + " \"max\": 80,\n" + " \"display\": true\n" + " },\n" + " \"series\": {\n" + " \"lineStyle\": {\n" + " \"width\": \"3px\",\n" + " \"smooth\": true\n" + " }\n" + " }\n" + " }\n" + "}"; + CardTestFactory::GetInstance().ParseCardDslWithParams(page, index, params); + auto domChart = AceType::DynamicCast(document->GetDOMNodeById(DOM_CHART_INDEX)); + ASSERT_TRUE(domChart != nullptr); + ASSERT_TRUE(domChart->GetTag() == "chart"); + /** + * @tc.steps: step3. read chart attr. + * @tc.expected: step3. chart attr is correct. + */ + auto chartComponent = AceType::DynamicCast(domChart->GetSpecializedComponent()); + ASSERT_TRUE(chartComponent != nullptr); + + // check xAxis which should be updated + auto horizontalOption = chartComponent->GetHorizontalOption(); + ASSERT_EQ(horizontalOption.min, 2); + ASSERT_EQ(horizontalOption.max, 6); + ASSERT_EQ(horizontalOption.display, true); + + // check yAxis which should be updated + auto verticalOption = chartComponent->GetVerticalOption(); + ASSERT_EQ(verticalOption.min, -20); + ASSERT_EQ(verticalOption.max, 80); + ASSERT_EQ(verticalOption.display, true); +} +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/test/unittest/cardfrontend/domclock/BUILD.gn b/frameworks/bridge/test/unittest/cardfrontend/domclock/BUILD.gn new file mode 100644 index 00000000..1eaec1c0 --- /dev/null +++ b/frameworks/bridge/test/unittest/cardfrontend/domclock/BUILD.gn @@ -0,0 +1,57 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/jscard/cardclock" + +ohos_unittest("DomCardClockTest") { + module_out_path = module_output_path + + sources = [ + "../card_test_factory.cpp", + "dom_clock_test.cpp", + ] + + configs = [ + ":config_domnode_test", + "$ace_root:ace_test_config", + "//utils/native/base:static_utils_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_domnode_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":DomCardClockTest" ] +} diff --git a/frameworks/bridge/test/unittest/cardfrontend/domclock/dom_clock_test.cpp b/frameworks/bridge/test/unittest/cardfrontend/domclock/dom_clock_test.cpp new file mode 100644 index 00000000..07cdbef5 --- /dev/null +++ b/frameworks/bridge/test/unittest/cardfrontend/domclock/dom_clock_test.cpp @@ -0,0 +1,322 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "file_ex.h" +#include "gtest/gtest.h" + +#include "base/json/json_util.h" +#include "frameworks/bridge/common/dom/dom_document.h" +#include "frameworks/bridge/test/unittest/cardfrontend/card_test_factory.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace::Framework { +namespace { + +const std::string CORRECT_PATH = "/data/test/resource/carddomclock/correct.json"; +const std::string ERROR_PATH = "/data/test/resource/carddomclock/error.json"; +constexpr int32_t DOM_CLOCK_INDEX = 2; + +} // namespace + +class DomCardClockTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; +}; + +void DomCardClockTest::SetUpTestCase() {} +void DomCardClockTest::TearDownTestCase() {} +void DomCardClockTest::SetUp() {} +void DomCardClockTest::TearDown() {} + +/** + * @tc.name: DomClockDataParse001 + * @tc.desc: Verify that dom clock can be created successfully and the attr is correct. + * @tc.type: FUNC + * @tc.require: AR000F2BBA + * @tc.author: yanshuifeng + */ +HWTEST_F(DomCardClockTest, DomClockDataParse001, TestSize.Level1) +{ + /** + * @tc.steps: step1. read the correct card template file. + * @tc.expected: step1. read file successfully. + */ + std::string index; + bool isSuccess = LoadStringFromFile(CORRECT_PATH, index); + ASSERT_TRUE(isSuccess); + + /** + * @tc.steps: step2. use factory to parse template file. + * @tc.expected: step2. parse successfully and can get the dom clock. + */ + auto document = AceType::MakeRefPtr(0); + auto page = AceType::MakeRefPtr(0, document, ""); + CardTestFactory::GetInstance().ParseCardDsl(page, index); + auto domClock = AceType::DynamicCast(document->GetDOMNodeById(DOM_CLOCK_INDEX)); + ASSERT_TRUE(domClock != nullptr); + ASSERT_TRUE(domClock->GetTag() == "clock"); + + /** + * @tc.steps: step3. read clock component attr. + * @tc.expected: step3. clock component attr is correct. + */ + auto clockComponent = AceType::DynamicCast(domClock->GetSpecializedComponent()); + ASSERT_TRUE(clockComponent != nullptr); + auto hourswest = clockComponent->GetHoursWest(); + ASSERT_EQ(hourswest, 8); + auto digitRadiusRatio = clockComponent->GetDigitRadiusRatio(); + ASSERT_DOUBLE_EQ(digitRadiusRatio, 0.7); + auto digitSizeRatio = clockComponent->GetDigitSizeRatio(); + ASSERT_DOUBLE_EQ(digitSizeRatio, 0.08); + auto face = clockComponent->GetClockFaceSrc(); + ASSERT_EQ(face, "common/clock_widget.png"); + auto hourHand = clockComponent->GetHourHandSrc(); + ASSERT_EQ(hourHand, "common/clock_widget_hour.png"); + auto minuteHand = clockComponent->GetMinuteHandSrc(); + ASSERT_EQ(minuteHand, "common/clock_widget_minute.png"); + auto secondHand = clockComponent->GetSecondHandSrc(); + ASSERT_EQ(secondHand, "common/clock_widget_second.png"); + auto faceNight = clockComponent->GetClockFaceNightSrc(); + ASSERT_EQ(faceNight, "common/black_clock_widget.png"); + auto hourHandNight = clockComponent->GetHourHandNightSrc(); + ASSERT_EQ(hourHandNight, "common/black_clock_widget_hour.png"); + auto minuteHandNight = clockComponent->GetMinuteHandNightSrc(); + ASSERT_EQ(minuteHandNight, "common/black_clock_widget_minute.png"); + auto digitColor = clockComponent->GetDigitColor(); + ASSERT_EQ(digitColor, Color::FromString("#000000")); + auto digitColorNight = clockComponent->GetDigitColorNight(); + ASSERT_EQ(digitColorNight, Color::FromString("#FFFFFF")); +} + +/** + * @tc.name: DomClockDataParse002 + * @tc.desc: Verify that dom clock can be created successfully and the style is correct. + * @tc.type: FUNC + * @tc.require: AR000F2BBA + * @tc.author: yanshuifeng + */ +HWTEST_F(DomCardClockTest, DomClockDataParse002, TestSize.Level1) +{ + /** + * @tc.steps: step1. read the correct card template file. + * @tc.expected: step1. read file successfully. + */ + std::string index; + bool isSuccess = LoadStringFromFile(CORRECT_PATH, index); + ASSERT_TRUE(isSuccess); + + /** + * @tc.steps: step2. use factory to parse template file. + * @tc.expected: step2. parse successfully and can get the dom clock. + */ + auto document = AceType::MakeRefPtr(0); + auto page = AceType::MakeRefPtr(0, document, ""); + CardTestFactory::GetInstance().ParseCardDsl(page, index); + auto domClock = AceType::DynamicCast(document->GetDOMNodeById(DOM_CLOCK_INDEX)); + ASSERT_TRUE(domClock != nullptr); + ASSERT_TRUE(domClock->GetTag() == "clock"); + + /** + * @tc.steps: step3. read clock component style. + * @tc.expected: step3. clock component style is correct. + */ + auto clockComponent = AceType::DynamicCast(domClock->GetSpecializedComponent()); + ASSERT_TRUE(clockComponent != nullptr); + auto fontFamilies = clockComponent->GetFontFamilies(); + ASSERT_EQ(fontFamilies.size(), 1UL); + ASSERT_EQ(fontFamilies[0], "Courier"); +} + +/** + * @tc.name: DomClockDataParse003 + * @tc.desc: Verify that dom clock can be created successfully and the style is incorrect. + * @tc.type: FUNC + * @tc.require: AR000F2BBA + * @tc.author: gaoquan + */ +HWTEST_F(DomCardClockTest, DomClockDataParse003, TestSize.Level1) +{ + /** + * @tc.steps: step1. read the Error card template file. + * @tc.expected: step1. read file successfully. + */ + std::string index; + bool isSuccess = LoadStringFromFile(ERROR_PATH, index); + ASSERT_TRUE(isSuccess); + + /** + * @tc.steps: step2. use factory to parse template file. + * @tc.expected: step2. parse successfully and can get the dom clock. + */ + auto document = AceType::MakeRefPtr(0); + auto page = AceType::MakeRefPtr(0, document, ""); + CardTestFactory::GetInstance().ParseCardDsl(page, index); + auto domClock = AceType::DynamicCast(document->GetDOMNodeById(DOM_CLOCK_INDEX)); + ASSERT_TRUE(domClock != nullptr); + ASSERT_TRUE(domClock->GetTag() == "clock"); + + /** + * @tc.steps: step3. read clock component style. + * @tc.expected: step3. clock component style is incorrect. + */ + auto clockComponent = AceType::DynamicCast(domClock->GetSpecializedComponent()); + ASSERT_TRUE(clockComponent != nullptr); + auto hoursWest = clockComponent->GetHoursWest(); + ASSERT_EQ(hoursWest, DBL_MAX); +} + +/** + * @tc.name: DomClockDataUpdate001 + * @tc.desc: Verify that dom clock can be created and updated successfully. + * @tc.type: FUNC + * @tc.require: AR000F2BBA + * @tc.author: gaoquan + */ +HWTEST_F(DomCardClockTest, DomClockDataUpdate001, TestSize.Level1) +{ + /** + * @tc.steps: step1. read the correct card template file. + * @tc.expected: step1. read file successfully. + */ + std::string index; + bool isSuccess = LoadStringFromFile(CORRECT_PATH, index); + ASSERT_TRUE(isSuccess); + + /** + * @tc.steps: step2. use factory to parse template file. + * @tc.expected: step2. parse successfully and can get the dom clock. + */ + auto document = AceType::MakeRefPtr(0); + auto page = AceType::MakeRefPtr(0, document, ""); + // update config value, the data key in json file is clockconfig. + // digitSizeRatio: 0.08 -> 1.2. + auto params = "{\n" + " \"timeRegion\": \"8\",\n" + " \"fontFamily\": \"Courier\",\n" + " \"clockconfig\": {\n" + " \"digitRadiusRatio\": 1.2,\n" + " \"digitSizeRatio\": 1.2,\n" + " \"face\": \"common/clock_widget.png\",\n" + " \"hourHand\": \"common/clock_widget_hour.png\",\n" + " \"minuteHand\": \"common/clock_widget_minute.png\",\n" + " \"secondHand\": \"common/clock_widget_second.png\",\n" + " \"faceNight\": \"common/black_clock_widget.png\",\n" + " \"hourHandNight\": \"common/black_clock_widget_hour.png\",\n" + " \"minuteHandNight\": \"common/black_clock_widget_minute.png\",\n" + " \"digitColor\": \"#000000\",\n" + " \"digitColorNight\": \"#FFFFFF\"\n" + " }\n" + " }"; + CardTestFactory::GetInstance().ParseCardDslWithParams(page, index, params); + auto domClock = AceType::DynamicCast(document->GetDOMNodeById(DOM_CLOCK_INDEX)); + ASSERT_TRUE(domClock != nullptr); + ASSERT_TRUE(domClock->GetTag() == "clock"); + + /** + * @tc.steps: step3. read clock component style. + * @tc.expected: step3. clock component config is updated. + */ + auto clockComponent = AceType::DynamicCast(domClock->GetSpecializedComponent()); + ASSERT_TRUE(clockComponent != nullptr); + auto digitSizeRatio = clockComponent->GetDigitSizeRatio(); + ASSERT_EQ(digitSizeRatio, 1.2); +} + +/** + * @tc.name: DomClockDataUpdate002 + * @tc.desc: Verify that dom clock can be created and updated successfully. + * @tc.type: FUNC + * @tc.require: AR000F2BBA + * @tc.author: gaoquan + */ +HWTEST_F(DomCardClockTest, DomClockDataUpdate002, TestSize.Level1) +{ + /** + * @tc.steps: step1. read the correct card template file. + * @tc.expected: step1. read file successfully. + */ + std::string index; + bool isSuccess = LoadStringFromFile(CORRECT_PATH, index); + ASSERT_TRUE(isSuccess); + + /** + * @tc.steps: step2. use factory to parse template file. + * @tc.expected: step2. parse successfully and can get the dom clock. + */ + auto document = AceType::MakeRefPtr(0); + auto page = AceType::MakeRefPtr(0, document, ""); + // update config value, the data key in json file is clockconfig. + auto params = "{\n" + " \"timeRegion\": \"8\",\n" + " \"fontFamily\": \"Couriery\",\n" + " \"clockconfig\": {\n" + " \"digitRadiusRatio\": 1,\n" + " \"digitSizeRatio\": 2,\n" + " \"face\": \"common/clockwidget.png\",\n" + " \"hourHand\": \"common/clockwidget_hour.png\",\n" + " \"minuteHand\": \"common/clockwidget_minute.png\",\n" + " \"secondHand\": \"common/clockwidget_second.png\",\n" + " \"faceNight\": \"common/blackclock_widget.png\",\n" + " \"hourHandNight\": \"common/blackclock_widget_hour.png\",\n" + " \"minuteHandNight\": \"common/blackclock_widget_minute.png\",\n" + " \"digitColor\": \"#000001\",\n" + " \"digitColorNight\": \"#FFFFFE\"\n" + " }\n" + " }"; + CardTestFactory::GetInstance().ParseCardDslWithParams(page, index, params); + auto domClock = AceType::DynamicCast(document->GetDOMNodeById(DOM_CLOCK_INDEX)); + ASSERT_TRUE(domClock != nullptr); + ASSERT_TRUE(domClock->GetTag() == "clock"); + + /** + * @tc.steps: step3. read clock component style. + * @tc.expected: step3. clock component config is updated. + */ + auto clockComponent = AceType::DynamicCast(domClock->GetSpecializedComponent()); + ASSERT_TRUE(clockComponent != nullptr); + auto hourswest = clockComponent->GetHoursWest(); + ASSERT_EQ(hourswest, 8); + auto fontFamilies = clockComponent->GetFontFamilies(); + ASSERT_EQ(fontFamilies[0], "Couriery"); + auto digitRadiusRatio = clockComponent->GetDigitRadiusRatio(); + ASSERT_DOUBLE_EQ(digitRadiusRatio, 1); + auto digitSizeRatio = clockComponent->GetDigitSizeRatio(); + ASSERT_DOUBLE_EQ(digitSizeRatio, 2); + auto face = clockComponent->GetClockFaceSrc(); + ASSERT_EQ(face, "common/clockwidget.png"); + auto hourHand = clockComponent->GetHourHandSrc(); + ASSERT_EQ(hourHand, "common/clockwidget_hour.png"); + auto minuteHand = clockComponent->GetMinuteHandSrc(); + ASSERT_EQ(minuteHand, "common/clockwidget_minute.png"); + auto secondHand = clockComponent->GetSecondHandSrc(); + ASSERT_EQ(secondHand, "common/clockwidget_second.png"); + auto faceNight = clockComponent->GetClockFaceNightSrc(); + ASSERT_EQ(faceNight, "common/blackclock_widget.png"); + auto hourHandNight = clockComponent->GetHourHandNightSrc(); + ASSERT_EQ(hourHandNight, "common/blackclock_widget_hour.png"); + auto minuteHandNight = clockComponent->GetMinuteHandNightSrc(); + ASSERT_EQ(minuteHandNight, "common/blackclock_widget_minute.png"); + auto digitColor = clockComponent->GetDigitColor(); + ASSERT_EQ(digitColor, Color::FromString("#000001")); + auto digitColorNight = clockComponent->GetDigitColorNight(); + ASSERT_EQ(digitColorNight, Color::FromString("#FFFFFE")); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/test/unittest/cardfrontend/domdiv/BUILD.gn b/frameworks/bridge/test/unittest/cardfrontend/domdiv/BUILD.gn new file mode 100644 index 00000000..7447f2b6 --- /dev/null +++ b/frameworks/bridge/test/unittest/cardfrontend/domdiv/BUILD.gn @@ -0,0 +1,56 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/jscard/carddiv" + +ohos_unittest("DomCardDivTest") { + module_out_path = module_output_path + + sources = [ + "../card_test_factory.cpp", + "dom_div_test.cpp", + ] + + configs = [ + ":config_domnode_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_domnode_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":DomCardDivTest" ] +} diff --git a/frameworks/bridge/test/unittest/cardfrontend/domdiv/dom_div_test.cpp b/frameworks/bridge/test/unittest/cardfrontend/domdiv/dom_div_test.cpp new file mode 100644 index 00000000..673715c2 --- /dev/null +++ b/frameworks/bridge/test/unittest/cardfrontend/domdiv/dom_div_test.cpp @@ -0,0 +1,233 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/json/json_util.h" +#include "base/utils/utils.h" +#include "frameworks/bridge/common/dom/dom_div.h" +#include "frameworks/bridge/common/dom/dom_document.h" +#include "frameworks/bridge/common/dom/dom_text.h" +#include "frameworks/bridge/test/unittest/cardfrontend/card_test_factory.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace::Framework { + +class DomCardDivTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); +}; + +void DomCardDivTest::SetUpTestCase() {} +void DomCardDivTest::TearDownTestCase() {} +void DomCardDivTest::SetUp() {} +void DomCardDivTest::TearDown() {} + +/** + * @tc.name: DomCardDivTest001 + * @tc.desc: Verify that DomDiv can be created successfully. + * @tc.type: FUNC + * @tc.require: AR000F2B2D + * @tc.author: lixingchi + */ +HWTEST_F(DomCardDivTest, DomCardDivTest001, TestSize.Level1) +{ + const std::string index = "{" + " \"template\": { " + " \"type\": \"div\" " + " }, " + " \"styles\": {}, " + " \"actions\": {}, " + " \"data\": {} " + "} "; + /** + * @tc.steps: step1. parse card dsl by CardTestFactory. + */ + auto document = AceType::MakeRefPtr(0); + auto page = AceType::MakeRefPtr(0, document, ""); + CardTestFactory::GetInstance().ParseCardDsl(page, index); + auto domDiv = document->GetDOMNodeById(DOM_ROOT_NODE_ID_BASE); + ASSERT_TRUE(domDiv != nullptr); + ASSERT_TRUE(domDiv->GetTag() == "div"); + ASSERT_TRUE(CardTestFactory::GetInstance().GetNodeNumber() == 1); +} + +/** + * @tc.name: DomCardDivTest002 + * @tc.desc: Verify that DomDiv data binding successfully. + * @tc.type: FUNC + * @tc.require: AR000F2B2D + * @tc.author: lixingchi + */ +HWTEST_F(DomCardDivTest, DomCardDivTest002, TestSize.Level1) +{ + const std::string index = "{" + " \"template\": { " + " \"type\": \"div\", " + " \"shown\": \"{{show}}\" " + " }, " + " \"styles\": {}, " + " \"actions\": {}, " + " \"data\": { " + " \"show\": false " + " } " + "} "; + /** + * @tc.steps: step1. parse card dsl by CardTestFactory. + */ + auto document = AceType::MakeRefPtr(0); + auto page = AceType::MakeRefPtr(0, document, ""); + CardTestFactory::GetInstance().ParseCardDsl(page, index); + auto domDiv = document->GetDOMNodeById(DOM_ROOT_NODE_ID_BASE); + ASSERT_TRUE(domDiv != nullptr); + ASSERT_TRUE(domDiv->GetTag() == "div"); + ASSERT_TRUE(domDiv->IsShow() == false); + ASSERT_TRUE(CardTestFactory::GetInstance().GetNodeNumber() == 1); +} + +/** + * @tc.name: DomCardDivTest003 + * @tc.desc: Verify that DomDiv append child successfully. + * @tc.type: FUNC + * @tc.require: AR000F2B2D + * @tc.author: lixingchi + */ +HWTEST_F(DomCardDivTest, DomCardDivTest003, TestSize.Level1) +{ + const std::string index = "{" + " \"template\": { " + " \"type\": \"div\", " + " \"shown\": \"{{show}}\", " + " \"children\": [ " + " { " + " \"type\": \"text\" " + " }, " + " { " + " \"type\": \"text\" " + " }, " + " { " + " \"type\": \"text\" " + " } " + " ] " + " }, " + " \"styles\": {}, " + " \"actions\": {}, " + " \"data\": { " + " \"show\": true " + " } " + "} "; + /** + * @tc.steps: step1. parse card dsl by CardTestFactory. + */ + auto document = AceType::MakeRefPtr(0); + auto page = AceType::MakeRefPtr(0, document, ""); + CardTestFactory::GetInstance().ParseCardDsl(page, index); + auto domDiv = document->GetDOMNodeById(DOM_ROOT_NODE_ID_BASE); + ASSERT_TRUE(domDiv != nullptr); + ASSERT_TRUE(domDiv->GetTag() == "div"); + ASSERT_TRUE(domDiv->IsShow() == true); + ASSERT_TRUE(domDiv->GetChildList().size() == 3); + ASSERT_TRUE(CardTestFactory::GetInstance().GetNodeNumber() == 4); +} + +/** + * @tc.name: DomCardDivTest004 + * @tc.desc: Verify that DomDiv styles set successfully. + * @tc.type: FUNC + * @tc.require: AR000F2B2D + * @tc.author: lixingchi + */ +HWTEST_F(DomCardDivTest, DomCardDivTest004, TestSize.Level1) +{ + const std::string index = "{ " + " \"template\": { " + " \"type\": \"div\", " + " \"classList\": [ " + " \"container\" " + " ] " + " }, " + " \"styles\": { " + " \".container\": { " + " \"height\": \"300px\", " + " \"width\": \"300px\", " + " \"marginTop\": \"30px\", " + " \"marginBottom\": \"30px\", " + " \"marginLeft\": \"30px\", " + " \"marginRight\": \"30px\" " + " } " + " }, " + " \"actions\": {}, " + " \"data\": {} " + "}"; + /** + * @tc.steps: step1. parse card dsl by CardTestFactory. + */ + auto document = AceType::MakeRefPtr(0); + auto page = AceType::MakeRefPtr(0, document, ""); + CardTestFactory::GetInstance().ParseCardDsl(page, index); + auto domDiv = document->GetDOMNodeById(DOM_ROOT_NODE_ID_BASE); + ASSERT_TRUE(domDiv != nullptr); + ASSERT_TRUE(domDiv->GetTag() == "div"); + ASSERT_TRUE(static_cast(domDiv->GetHeight().Value()) == 300); + ASSERT_TRUE(static_cast(domDiv->GetWidth().Value()) == 300); + ASSERT_TRUE(static_cast(domDiv->GetMarginTop().Value()) == 30); + ASSERT_TRUE(static_cast(domDiv->GetMarginBottom().Value()) == 30); + ASSERT_TRUE(static_cast(domDiv->GetMarginLeft().Value()) == 30); + ASSERT_TRUE(static_cast(domDiv->GetMarginRight().Value()) == 30); + ASSERT_TRUE(CardTestFactory::GetInstance().GetNodeNumber() == 1); +} + +/** + * @tc.name: DomCardDivTest005 + * @tc.desc: Verify that DomDiv event binding successfully. + * @tc.type: FUNC + * @tc.require: AR000F2B2D + * @tc.author: lixingchi + */ +HWTEST_F(DomCardDivTest, DomCardDivTest005, TestSize.Level1) +{ + const std::string index = "{ " + " \"template\": { " + " \"type\": \"div\", " + " \"events\": { " + " \"click\": \"test\" " + " } " + " }, " + " \"styles\": {}, " + " \"actions\": {}, " + " \"data\": {} " + "}"; + /** + * @tc.steps: step1. parse card dsl by CardTestFactory. + */ + auto document = AceType::MakeRefPtr(0); + auto page = AceType::MakeRefPtr(0, document, ""); + CardTestFactory::GetInstance().ParseCardDsl(page, index); + auto domDiv = document->GetDOMNodeById(DOM_ROOT_NODE_ID_BASE); + ASSERT_TRUE(domDiv != nullptr); + auto gestureEventComponent = domDiv->GetGestureListenerComponent(); + ASSERT_TRUE(gestureEventComponent != nullptr); + ASSERT_TRUE(domDiv->GetTag() == "div"); + EXPECT_TRUE(gestureEventComponent->GetOnClickId().GetData().eventType == DOM_CLICK); + EXPECT_TRUE(gestureEventComponent->GetOnClickId().GetData().eventId == DOM_DEFAULT_ROOT_NODE_ID); + ASSERT_TRUE(CardTestFactory::GetInstance().GetNodeNumber() == 1); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/test/unittest/cardfrontend/domimage/BUILD.gn b/frameworks/bridge/test/unittest/cardfrontend/domimage/BUILD.gn new file mode 100644 index 00000000..7fc013d6 --- /dev/null +++ b/frameworks/bridge/test/unittest/cardfrontend/domimage/BUILD.gn @@ -0,0 +1,56 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/jscard/cardimage1" + +ohos_unittest("DomCardImageTest") { + module_out_path = module_output_path + + sources = [ + "../card_test_factory.cpp", + "dom_image_test.cpp", + ] + + configs = [ + ":config_domnode_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_domnode_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":DomCardImageTest" ] +} diff --git a/frameworks/bridge/test/unittest/cardfrontend/domimage/dom_image_test.cpp b/frameworks/bridge/test/unittest/cardfrontend/domimage/dom_image_test.cpp new file mode 100644 index 00000000..e0e7c205 --- /dev/null +++ b/frameworks/bridge/test/unittest/cardfrontend/domimage/dom_image_test.cpp @@ -0,0 +1,187 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/json/json_util.h" +#include "base/utils/utils.h" +#include "frameworks/bridge/common/dom/dom_document.h" +#include "frameworks/bridge/common/dom/dom_image.h" +#include "frameworks/bridge/test/unittest/cardfrontend/card_test_factory.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace::Framework { + +class DomCardImageTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); +}; + +void DomCardImageTest::SetUpTestCase() {} +void DomCardImageTest::TearDownTestCase() {} +void DomCardImageTest::SetUp() {} +void DomCardImageTest::TearDown() {} + +/** + * @tc.name: DomCardImageTest001 + * @tc.desc: Verify that DomImage can be created successfully. + * @tc.type: FUNC + * @tc.require: AR000F2BBC + * @tc.author: lixingchi + */ +HWTEST_F(DomCardImageTest, DomCardImageTest001, TestSize.Level1) +{ + const std::string index = "{" + " \"template\": { " + " \"type\": \"image\" " + " }, " + " \"styles\": {}, " + " \"actions\": {}, " + " \"data\": {} " + "} "; + /** + * @tc.steps: step1. parse card dsl by CardTestFactory. + */ + auto document = AceType::MakeRefPtr(0); + auto page = AceType::MakeRefPtr(0, document, ""); + CardTestFactory::GetInstance().ParseCardDsl(page, index); + auto domImage = document->GetDOMNodeById(DOM_ROOT_NODE_ID_BASE); + ASSERT_TRUE(domImage != nullptr); + ASSERT_TRUE(domImage->GetTag() == "image"); + ASSERT_TRUE(CardTestFactory::GetInstance().GetNodeNumber() == 1); +} + +/** + * @tc.name: DomCardImageTest002 + * @tc.desc: Verify that DomImage data binding successfully. + * @tc.type: FUNC + * @tc.require: AR000F2BBC + * @tc.author: lixingchi + */ +HWTEST_F(DomCardImageTest, DomCardImageTest002, TestSize.Level1) +{ + const std::string index = "{" + " \"template\": { " + " \"type\": \"image\", " + " \"shown\": \"{{show}}\" " + " }, " + " \"styles\": {}, " + " \"actions\": {}, " + " \"data\": { " + " \"show\": false " + " } " + "} "; + /** + * @tc.steps: step1. parse card dsl by CardTestFactory. + */ + auto document = AceType::MakeRefPtr(0); + auto page = AceType::MakeRefPtr(0, document, ""); + CardTestFactory::GetInstance().ParseCardDsl(page, index); + auto domImage = document->GetDOMNodeById(DOM_ROOT_NODE_ID_BASE); + ASSERT_TRUE(domImage != nullptr); + ASSERT_TRUE(domImage->GetTag() == "image"); + ASSERT_TRUE(domImage->IsShow() == false); + ASSERT_TRUE(CardTestFactory::GetInstance().GetNodeNumber() == 1); +} + +/** + * @tc.name: DomCardImageTest003 + * @tc.desc: Verify that DomImage styles set successfully. + * @tc.type: FUNC + * @tc.require: AR000F2BBC + * @tc.author: lixingchi + */ +HWTEST_F(DomCardImageTest, DomCardImageTest003, TestSize.Level1) +{ + const std::string index = "{ " + " \"template\": { " + " \"type\": \"image\", " + " \"classList\": [ " + " \"container\" " + " ] " + " }, " + " \"styles\": { " + " \".container\": { " + " \"height\": \"300px\", " + " \"width\": \"300px\", " + " \"marginTop\": \"30px\", " + " \"marginBottom\": \"30px\", " + " \"marginLeft\": \"30px\", " + " \"marginRight\": \"30px\" " + " } " + " }, " + " \"actions\": {}, " + " \"data\": {} " + "}"; + /** + * @tc.steps: step1. parse card dsl by CardTestFactory. + */ + auto document = AceType::MakeRefPtr(0); + auto page = AceType::MakeRefPtr(0, document, ""); + CardTestFactory::GetInstance().ParseCardDsl(page, index); + auto domImage = document->GetDOMNodeById(DOM_ROOT_NODE_ID_BASE); + ASSERT_TRUE(domImage != nullptr); + ASSERT_TRUE(domImage->GetTag() == "image"); + ASSERT_TRUE(static_cast(domImage->GetHeight().Value()) == 300); + ASSERT_TRUE(static_cast(domImage->GetWidth().Value()) == 300); + ASSERT_TRUE(static_cast(domImage->GetMarginTop().Value()) == 30); + ASSERT_TRUE(static_cast(domImage->GetMarginBottom().Value()) == 30); + ASSERT_TRUE(static_cast(domImage->GetMarginLeft().Value()) == 30); + ASSERT_TRUE(static_cast(domImage->GetMarginRight().Value()) == 30); + ASSERT_TRUE(CardTestFactory::GetInstance().GetNodeNumber() == 1); +} + +/** + * @tc.name: DomCardImageTest004 + * @tc.desc: Verify that DomImage event binding successfully. + * @tc.type: FUNC + * @tc.require: AR000F2BBC + * @tc.author: lixingchi + */ +HWTEST_F(DomCardImageTest, DomCardImageTest004, TestSize.Level1) +{ + const std::string index = "{ " + " \"template\": { " + " \"type\": \"image\", " + " \"events\": { " + " \"click\": \"test\" " + " } " + " }, " + " \"styles\": {}, " + " \"actions\": {}, " + " \"data\": {} " + "}"; + /** + * @tc.steps: step1. parse card dsl by CardTestFactory. + */ + auto document = AceType::MakeRefPtr(0); + auto page = AceType::MakeRefPtr(0, document, ""); + CardTestFactory::GetInstance().ParseCardDsl(page, index); + auto domImage = document->GetDOMNodeById(DOM_ROOT_NODE_ID_BASE); + ASSERT_TRUE(domImage != nullptr); + ASSERT_TRUE(domImage->GetTag() == "image"); + auto gestureEventComponent = domImage->GetGestureListenerComponent(); + ASSERT_TRUE(gestureEventComponent != nullptr); + EXPECT_TRUE(gestureEventComponent->GetOnClickId().GetData().eventType == DOM_CLICK); + EXPECT_TRUE(gestureEventComponent->GetOnClickId().GetData().eventId == DOM_DEFAULT_ROOT_NODE_ID); + ASSERT_TRUE(CardTestFactory::GetInstance().GetNodeNumber() == 1); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/test/unittest/cardfrontend/domprogress/BUILD.gn b/frameworks/bridge/test/unittest/cardfrontend/domprogress/BUILD.gn new file mode 100644 index 00000000..9a3c6aa3 --- /dev/null +++ b/frameworks/bridge/test/unittest/cardfrontend/domprogress/BUILD.gn @@ -0,0 +1,56 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/jscard/cardprogress" + +ohos_unittest("DomCardProgressTest") { + module_out_path = module_output_path + + sources = [ + "../card_test_factory.cpp", + "dom_progress_test.cpp", + ] + + configs = [ + ":config_domnode_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_domnode_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":DomCardProgressTest" ] +} diff --git a/frameworks/bridge/test/unittest/cardfrontend/domprogress/dom_progress_test.cpp b/frameworks/bridge/test/unittest/cardfrontend/domprogress/dom_progress_test.cpp new file mode 100644 index 00000000..6d26fd62 --- /dev/null +++ b/frameworks/bridge/test/unittest/cardfrontend/domprogress/dom_progress_test.cpp @@ -0,0 +1,187 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/json/json_util.h" +#include "base/utils/utils.h" +#include "frameworks/bridge/common/dom/dom_document.h" +#include "frameworks/bridge/common/dom/dom_progress.h" +#include "frameworks/bridge/test/unittest/cardfrontend/card_test_factory.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace::Framework { + +class DomCardProgressTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); +}; + +void DomCardProgressTest::SetUpTestCase() {} +void DomCardProgressTest::TearDownTestCase() {} +void DomCardProgressTest::SetUp() {} +void DomCardProgressTest::TearDown() {} + +/** + * @tc.name: DomCardProgressTest001 + * @tc.desc: Verify that DomProgress can be created successfully. + * @tc.type: FUNC + * @tc.require: AR000F2BBE + * @tc.author: lixingchi + */ +HWTEST_F(DomCardProgressTest, DomCardProgressTest001, TestSize.Level1) +{ + const std::string index = "{" + " \"template\": { " + " \"type\": \"progress\" " + " }, " + " \"styles\": {}, " + " \"actions\": {}, " + " \"data\": {} " + "} "; + /** + * @tc.steps: step1. parse card dsl by CardTestFactory. + */ + auto document = AceType::MakeRefPtr(0); + auto page = AceType::MakeRefPtr(0, document, ""); + CardTestFactory::GetInstance().ParseCardDsl(page, index); + auto domProgress = document->GetDOMNodeById(DOM_ROOT_NODE_ID_BASE); + ASSERT_TRUE(domProgress != nullptr); + ASSERT_TRUE(domProgress->GetTag() == "progress"); + ASSERT_TRUE(CardTestFactory::GetInstance().GetNodeNumber() == 1); +} + +/** + * @tc.name: DomCardProgressTest002 + * @tc.desc: Verify that DomProgress data binding successfully. + * @tc.type: FUNC + * @tc.require: AR000F2BBE + * @tc.author: lixingchi + */ +HWTEST_F(DomCardProgressTest, DomCardProgressTest002, TestSize.Level1) +{ + const std::string index = "{" + " \"template\": { " + " \"type\": \"progress\", " + " \"shown\": \"{{show}}\" " + " }, " + " \"styles\": {}, " + " \"actions\": {}, " + " \"data\": { " + " \"show\": false " + " } " + "} "; + /** + * @tc.steps: step1. parse card dsl by CardTestFactory. + */ + auto document = AceType::MakeRefPtr(0); + auto page = AceType::MakeRefPtr(0, document, ""); + CardTestFactory::GetInstance().ParseCardDsl(page, index); + auto domProgress = document->GetDOMNodeById(DOM_ROOT_NODE_ID_BASE); + ASSERT_TRUE(domProgress != nullptr); + ASSERT_TRUE(domProgress->GetTag() == "progress"); + ASSERT_TRUE(domProgress->IsShow() == false); + ASSERT_TRUE(CardTestFactory::GetInstance().GetNodeNumber() == 1); +} + +/** + * @tc.name: DomCardProgressTest003 + * @tc.desc: Verify that DomProgress styles set successfully. + * @tc.type: FUNC + * @tc.require: AR000F2BBE + * @tc.author: lixingchi + */ +HWTEST_F(DomCardProgressTest, DomCardProgressTest003, TestSize.Level1) +{ + const std::string index = "{ " + " \"template\": { " + " \"type\": \"progress\", " + " \"classList\": [ " + " \"container\" " + " ] " + " }, " + " \"styles\": { " + " \".container\": { " + " \"height\": \"300px\", " + " \"width\": \"300px\", " + " \"marginTop\": \"30px\", " + " \"marginBottom\": \"30px\", " + " \"marginLeft\": \"30px\", " + " \"marginRight\": \"30px\" " + " } " + " }, " + " \"actions\": {}, " + " \"data\": {} " + "}"; + /** + * @tc.steps: step1. parse card dsl by CardTestFactory. + */ + auto document = AceType::MakeRefPtr(0); + auto page = AceType::MakeRefPtr(0, document, ""); + CardTestFactory::GetInstance().ParseCardDsl(page, index); + auto domProgress = document->GetDOMNodeById(DOM_ROOT_NODE_ID_BASE); + ASSERT_TRUE(domProgress != nullptr); + ASSERT_TRUE(domProgress->GetTag() == "progress"); + ASSERT_TRUE(static_cast(domProgress->GetHeight().Value()) == 300); + ASSERT_TRUE(static_cast(domProgress->GetWidth().Value()) == 300); + ASSERT_TRUE(static_cast(domProgress->GetMarginTop().Value()) == 30); + ASSERT_TRUE(static_cast(domProgress->GetMarginBottom().Value()) == 30); + ASSERT_TRUE(static_cast(domProgress->GetMarginLeft().Value()) == 30); + ASSERT_TRUE(static_cast(domProgress->GetMarginRight().Value()) == 30); + ASSERT_TRUE(CardTestFactory::GetInstance().GetNodeNumber() == 1); +} + +/** + * @tc.name: DomCardProgressTest004 + * @tc.desc: Verify that DomProgress event binding successfully. + * @tc.type: FUNC + * @tc.require: AR000F2BBE + * @tc.author: lixingchi + */ +HWTEST_F(DomCardProgressTest, DomCardProgressTest004, TestSize.Level1) +{ + const std::string index = "{ " + " \"template\": { " + " \"type\": \"progress\", " + " \"events\": { " + " \"click\": \"test\" " + " } " + " }, " + " \"styles\": {}, " + " \"actions\": {}, " + " \"data\": {} " + "}"; + /** + * @tc.steps: step1. parse card dsl by CardTestFactory. + */ + auto document = AceType::MakeRefPtr(0); + auto page = AceType::MakeRefPtr(0, document, ""); + CardTestFactory::GetInstance().ParseCardDsl(page, index); + auto domProgress = document->GetDOMNodeById(DOM_ROOT_NODE_ID_BASE); + ASSERT_TRUE(domProgress != nullptr); + ASSERT_TRUE(domProgress->GetTag() == "progress"); + auto gestureEventComponent = domProgress->GetGestureListenerComponent(); + ASSERT_TRUE(gestureEventComponent != nullptr); + EXPECT_TRUE(gestureEventComponent->GetOnClickId().GetData().eventType == DOM_CLICK); + EXPECT_TRUE(gestureEventComponent->GetOnClickId().GetData().eventId == DOM_DEFAULT_ROOT_NODE_ID); + ASSERT_TRUE(CardTestFactory::GetInstance().GetNodeNumber() == 1); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/test/unittest/cardfrontend/domstack/BUILD.gn b/frameworks/bridge/test/unittest/cardfrontend/domstack/BUILD.gn new file mode 100644 index 00000000..631b913c --- /dev/null +++ b/frameworks/bridge/test/unittest/cardfrontend/domstack/BUILD.gn @@ -0,0 +1,56 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/jscard/cardstack" + +ohos_unittest("DomCardStackTest") { + module_out_path = module_output_path + + sources = [ + "../card_test_factory.cpp", + "dom_stack_test.cpp", + ] + + configs = [ + ":config_domnode_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_domnode_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":DomCardStackTest" ] +} diff --git a/frameworks/bridge/test/unittest/cardfrontend/domstack/dom_stack_test.cpp b/frameworks/bridge/test/unittest/cardfrontend/domstack/dom_stack_test.cpp new file mode 100644 index 00000000..8a7e6b86 --- /dev/null +++ b/frameworks/bridge/test/unittest/cardfrontend/domstack/dom_stack_test.cpp @@ -0,0 +1,234 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/json/json_util.h" +#include "base/utils/utils.h" +#include "frameworks/bridge/common/dom/dom_document.h" +#include "frameworks/bridge/common/dom/dom_stack.h" +#include "frameworks/bridge/common/dom/dom_text.h" +#include "frameworks/bridge/test/unittest/cardfrontend/card_test_factory.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace::Framework { + +class DomCardStackTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); +}; + +void DomCardStackTest::SetUpTestCase() {} +void DomCardStackTest::TearDownTestCase() {} +void DomCardStackTest::SetUp() {} +void DomCardStackTest::TearDown() {} + +/** + * @tc.name: DomCardStackTest001 + * @tc.desc: Verify that DomStack can be created successfully. + * @tc.type: FUNC + * @tc.require: AR000F2BBG + * @tc.author: lixingchi + */ +HWTEST_F(DomCardStackTest, DomCardStackTest001, TestSize.Level1) +{ + const std::string index = "{" + " \"template\": { " + " \"type\": \"stack\" " + " }, " + " \"styles\": {}, " + " \"actions\": {}, " + " \"data\": {} " + "} "; + /** + * @tc.steps: step1. parse card dsl by CardTestFactory. + */ + auto document = AceType::MakeRefPtr(0); + auto page = AceType::MakeRefPtr(0, document, ""); + CardTestFactory::GetInstance().ParseCardDsl(page, index); + auto domStack = document->GetDOMNodeById(DOM_ROOT_NODE_ID_BASE); + ASSERT_TRUE(domStack != nullptr); + ASSERT_TRUE(domStack->GetTag() == "stack"); + ASSERT_TRUE(CardTestFactory::GetInstance().GetNodeNumber() == 1); +} + +/** + * @tc.name: DomCardStackTest002 + * @tc.desc: Verify that DomStack data binding successfully. + * @tc.type: FUNC + * @tc.require: AR000F2BBG + * @tc.author: lixingchi + */ +HWTEST_F(DomCardStackTest, DomCardStackTest002, TestSize.Level1) +{ + const std::string index = "{" + " \"template\": { " + " \"type\": \"stack\", " + " \"shown\": \"{{show}}\" " + " }, " + " \"styles\": {}, " + " \"actions\": {}, " + " \"data\": { " + " \"show\": false " + " } " + "} "; + /** + * @tc.steps: step1. parse card dsl by CardTestFactory. + */ + auto document = AceType::MakeRefPtr(0); + auto page = AceType::MakeRefPtr(0, document, ""); + CardTestFactory::GetInstance().ParseCardDsl(page, index); + auto domStack = document->GetDOMNodeById(DOM_ROOT_NODE_ID_BASE); + ASSERT_TRUE(domStack != nullptr); + ASSERT_TRUE(domStack->GetTag() == "stack"); + ASSERT_TRUE(domStack->IsShow() == false); + ASSERT_TRUE(CardTestFactory::GetInstance().GetNodeNumber() == 1); +} + +/** + * @tc.name: DomCardStackTest003 + * @tc.desc: Verify that DomStack append child successfully. + * @tc.type: FUNC + * @tc.require: AR000F2BBG + * @tc.author: lixingchi + */ +HWTEST_F(DomCardStackTest, DomCardStackTest003, TestSize.Level1) +{ + const std::string index = "{" + " \"template\": { " + " \"type\": \"stack\", " + " \"shown\": \"{{show}}\", " + " \"children\": [ " + " { " + " \"type\": \"text\" " + " }, " + " { " + " \"type\": \"text\" " + " }, " + " { " + " \"type\": \"text\" " + " } " + " ] " + " }, " + " \"styles\": {}, " + " \"actions\": {}, " + " \"data\": { " + " \"show\": true " + " } " + "}"; + /** + * @tc.steps: step1. parse card dsl by CardTestFactory. + */ + auto document = AceType::MakeRefPtr(0); + auto page = AceType::MakeRefPtr(0, document, ""); + CardTestFactory::GetInstance().ParseCardDsl(page, index); + auto domStack = document->GetDOMNodeById(DOM_ROOT_NODE_ID_BASE); + ASSERT_TRUE(domStack != nullptr); + ASSERT_TRUE(domStack->GetTag() == "stack"); + ASSERT_TRUE(domStack->IsShow() == true); + ASSERT_TRUE(domStack->GetChildList().size() == 3); + ASSERT_TRUE(CardTestFactory::GetInstance().GetNodeNumber() == 4); +} + +/** + * @tc.name: DomCardStackTest004 + * @tc.desc: Verify that DomStack styles set successfully. + * @tc.type: FUNC + * @tc.require: AR000F2BBG + * @tc.author: lixingchi + */ +HWTEST_F(DomCardStackTest, DomCardStackTest004, TestSize.Level1) +{ + const std::string index = "{ " + " \"template\": { " + " \"type\": \"stack\", " + " \"classList\": [ " + " \"container\" " + " ] " + " }, " + " \"styles\": { " + " \".container\": { " + " \"height\": \"300px\", " + " \"width\": \"300px\", " + " \"marginTop\": \"30px\", " + " \"marginBottom\": \"30px\", " + " \"marginLeft\": \"30px\", " + " \"marginRight\": \"30px\" " + " } " + " }, " + " \"actions\": {}, " + " \"data\": {} " + "}"; + + /** + * @tc.steps: step1. parse card dsl by CardTestFactory. + */ + auto document = AceType::MakeRefPtr(0); + auto page = AceType::MakeRefPtr(0, document, ""); + CardTestFactory::GetInstance().ParseCardDsl(page, index); + auto domStack = document->GetDOMNodeById(DOM_ROOT_NODE_ID_BASE); + ASSERT_TRUE(domStack != nullptr); + ASSERT_TRUE(domStack->GetTag() == "stack"); + ASSERT_TRUE(static_cast(domStack->GetHeight().Value()) == 300); + ASSERT_TRUE(static_cast(domStack->GetWidth().Value()) == 300); + ASSERT_TRUE(static_cast(domStack->GetMarginTop().Value()) == 30); + ASSERT_TRUE(static_cast(domStack->GetMarginBottom().Value()) == 30); + ASSERT_TRUE(static_cast(domStack->GetMarginLeft().Value()) == 30); + ASSERT_TRUE(static_cast(domStack->GetMarginRight().Value()) == 30); + ASSERT_TRUE(CardTestFactory::GetInstance().GetNodeNumber() == 1); +} + +/** + * @tc.name: DomCardStackTest005 + * @tc.desc: Verify that DomStack event binding successfully. + * @tc.type: FUNC + * @tc.require: AR000F2BBG + * @tc.author: lixingchi + */ +HWTEST_F(DomCardStackTest, DomCardStackTest005, TestSize.Level1) +{ + const std::string index = "{ " + " \"template\": { " + " \"type\": \"stack\", " + " \"events\": { " + " \"click\": \"test\" " + " } " + " }, " + " \"styles\": {}, " + " \"actions\": {}, " + " \"data\": {} " + "}"; + /** + * @tc.steps: step1. parse card dsl by CardTestFactory. + */ + auto document = AceType::MakeRefPtr(0); + auto page = AceType::MakeRefPtr(0, document, ""); + CardTestFactory::GetInstance().ParseCardDsl(page, index); + auto domStack = document->GetDOMNodeById(DOM_ROOT_NODE_ID_BASE); + ASSERT_TRUE(domStack != nullptr); + auto gestureEventComponent = domStack->GetGestureListenerComponent(); + ASSERT_TRUE(gestureEventComponent != nullptr); + ASSERT_TRUE(domStack->GetTag() == "stack"); + EXPECT_TRUE(gestureEventComponent->GetOnClickId().GetData().eventType == DOM_CLICK); + EXPECT_TRUE(gestureEventComponent->GetOnClickId().GetData().eventId == DOM_DEFAULT_ROOT_NODE_ID); + ASSERT_TRUE(CardTestFactory::GetInstance().GetNodeNumber() == 1); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/test/unittest/cardfrontend/domtext/BUILD.gn b/frameworks/bridge/test/unittest/cardfrontend/domtext/BUILD.gn new file mode 100644 index 00000000..f2bc6001 --- /dev/null +++ b/frameworks/bridge/test/unittest/cardfrontend/domtext/BUILD.gn @@ -0,0 +1,56 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/jscard/cardtext" + +ohos_unittest("DomCardTextTest") { + module_out_path = module_output_path + + sources = [ + "../card_test_factory.cpp", + "dom_text_test.cpp", + ] + + configs = [ + ":config_domnode_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_domnode_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":DomCardTextTest" ] +} diff --git a/frameworks/bridge/test/unittest/cardfrontend/domtext/dom_text_test.cpp b/frameworks/bridge/test/unittest/cardfrontend/domtext/dom_text_test.cpp new file mode 100644 index 00000000..45255fa8 --- /dev/null +++ b/frameworks/bridge/test/unittest/cardfrontend/domtext/dom_text_test.cpp @@ -0,0 +1,234 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/json/json_util.h" +#include "base/utils/utils.h" +#include "frameworks/bridge/common/dom/dom_document.h" +#include "frameworks/bridge/common/dom/dom_text.h" +#include "frameworks/bridge/test/unittest/cardfrontend/card_test_factory.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace::Framework { + +class DomCardTextTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); +}; + +void DomCardTextTest::SetUpTestCase() {} +void DomCardTextTest::TearDownTestCase() {} +void DomCardTextTest::SetUp() {} +void DomCardTextTest::TearDown() {} + +/** + * @tc.name: DomCardTextTest001 + * @tc.desc: Verify that DomText can be created successfully. + * @tc.type: FUNC + * @tc.require: AR000F2BBA + * @tc.author: lixingchi + */ +HWTEST_F(DomCardTextTest, DomCardTextTest001, TestSize.Level1) +{ + const std::string index = "{" + " \"template\": { " + " \"type\": \"text\" " + " }, " + " \"styles\": {}, " + " \"actions\": {}, " + " \"data\": {} " + "} "; + /** + * @tc.steps: step1. parse card dsl by CardTestFactory. + */ + auto document = AceType::MakeRefPtr(0); + auto page = AceType::MakeRefPtr(0, document, ""); + CardTestFactory::GetInstance().ParseCardDsl(page, index); + auto domText = document->GetDOMNodeById(DOM_ROOT_NODE_ID_BASE); + ASSERT_TRUE(domText != nullptr); + ASSERT_TRUE(domText->GetTag() == "text"); + ASSERT_TRUE(CardTestFactory::GetInstance().GetNodeNumber() == 1); +} + +/** + * @tc.name: DomCardTextTest002 + * @tc.desc: Verify that DomText data binding successfully. + * @tc.type: FUNC + * @tc.require: AR000F2BBA + * @tc.author: lixingchi + */ +HWTEST_F(DomCardTextTest, DomCardTextTest002, TestSize.Level1) +{ + const std::string index = "{" + " \"template\": { " + " \"type\": \"text\", " + " \"attr\": { " + " \"value\": \"{{tag}}\" " + " } " + " }, " + " \"styles\": {}, " + " \"actions\": {}, " + " \"data\": { " + " \"tag\": \"hi\" " + " } " + "} "; + /** + * @tc.steps: step1. parse card dsl by CardTestFactory. + */ + auto document = AceType::MakeRefPtr(0); + auto page = AceType::MakeRefPtr(0, document, ""); + CardTestFactory::GetInstance().ParseCardDsl(page, index); + auto domText = document->GetDOMNodeById(DOM_ROOT_NODE_ID_BASE); + ASSERT_TRUE(domText != nullptr); + ASSERT_TRUE(domText->GetTag() == "text"); + auto textComponent = AceType::DynamicCast(domText->GetSpecializedComponent()); + ASSERT_TRUE(textComponent != nullptr); + ASSERT_TRUE(textComponent->GetData() == "hi"); + ASSERT_TRUE(CardTestFactory::GetInstance().GetNodeNumber() == 1); +} + +/** + * @tc.name: DomCardTextTest003 + * @tc.desc: Verify that DomText append child successfully. + * @tc.type: FUNC + * @tc.require: AR000F2BBA + * @tc.author: lixingchi + */ +HWTEST_F(DomCardTextTest, DomCardTextTest003, TestSize.Level1) +{ + const std::string index = "{" + " \"template\": { " + " \"type\": \"text\", " + " \"children\": [ " + " { " + " \"type\": \"span\" " + " }, " + " { " + " \"type\": \"span\" " + " }, " + " { " + " \"type\": \"span\" " + " } " + " ] " + " }, " + " \"styles\": {}, " + " \"actions\": {}, " + " \"data\": {} " + "} "; + /** + * @tc.steps: step1. parse card dsl by CardTestFactory. + */ + auto document = AceType::MakeRefPtr(0); + auto page = AceType::MakeRefPtr(0, document, ""); + CardTestFactory::GetInstance().ParseCardDsl(page, index); + auto domText = document->GetDOMNodeById(DOM_ROOT_NODE_ID_BASE); + ASSERT_TRUE(domText != nullptr); + ASSERT_TRUE(domText->GetTag() == "text"); + ASSERT_TRUE(domText->GetChildList().size() == 3); + auto domSpan = document->GetDOMNodeById(1); + ASSERT_TRUE(domSpan->GetTag() == "span"); + ASSERT_TRUE(CardTestFactory::GetInstance().GetNodeNumber() == 4); +} + +/** + * @tc.name: DomCardTextTest004 + * @tc.desc: Verify that DomText styles set successfully. + * @tc.type: FUNC + * @tc.require: AR000F2BBA + * @tc.author: lixingchi + */ +HWTEST_F(DomCardTextTest, DomCardTextTest004, TestSize.Level1) +{ + const std::string index = "{ " + " \"template\": { " + " \"type\": \"text\", " + " \"classList\": [ " + " \"container\" " + " ] " + " }, " + " \"styles\": { " + " \".container\": { " + " \"height\": \"300px\", " + " \"width\": \"300px\", " + " \"marginTop\": \"30px\", " + " \"marginBottom\": \"30px\", " + " \"marginLeft\": \"30px\", " + " \"marginRight\": \"30px\" " + " } " + " }, " + " \"actions\": {}, " + " \"data\": {} " + "}"; + /** + * @tc.steps: step1. parse card dsl by CardTestFactory. + */ + auto document = AceType::MakeRefPtr(0); + auto page = AceType::MakeRefPtr(0, document, ""); + CardTestFactory::GetInstance().ParseCardDsl(page, index); + auto domText = document->GetDOMNodeById(DOM_ROOT_NODE_ID_BASE); + ASSERT_TRUE(domText != nullptr); + ASSERT_TRUE(domText->GetTag() == "text"); + ASSERT_TRUE(static_cast(domText->GetHeight().Value()) == 300); + ASSERT_TRUE(static_cast(domText->GetWidth().Value()) == 300); + ASSERT_TRUE(static_cast(domText->GetMarginTop().Value()) == 30); + ASSERT_TRUE(static_cast(domText->GetMarginBottom().Value()) == 30); + ASSERT_TRUE(static_cast(domText->GetMarginLeft().Value()) == 30); + ASSERT_TRUE(static_cast(domText->GetMarginRight().Value()) == 30); + ASSERT_TRUE(CardTestFactory::GetInstance().GetNodeNumber() == 1); +} + +/** + * @tc.name: DomCardTextTest005 + * @tc.desc: Verify that DomText event binding successfully. + * @tc.type: FUNC + * @tc.require: AR000F2BBA + * @tc.author: lixingchi + */ +HWTEST_F(DomCardTextTest, DomCardTextTest005, TestSize.Level1) +{ + const std::string index = "{ " + " \"template\": { " + " \"type\": \"text\", " + " \"events\": { " + " \"click\": \"test\" " + " } " + " }, " + " \"styles\": {}, " + " \"actions\": {}, " + " \"data\": {} " + "}"; + /** + * @tc.steps: step1. parse card dsl by CardTestFactory. + */ + auto document = AceType::MakeRefPtr(0); + auto page = AceType::MakeRefPtr(0, document, ""); + CardTestFactory::GetInstance().ParseCardDsl(page, index); + auto domText = document->GetDOMNodeById(DOM_ROOT_NODE_ID_BASE); + ASSERT_TRUE(domText != nullptr); + auto gestureEventComponent = domText->GetGestureListenerComponent(); + ASSERT_TRUE(gestureEventComponent != nullptr); + ASSERT_TRUE(domText->GetTag() == "text"); + EXPECT_TRUE(gestureEventComponent->GetOnClickId().GetData().eventType == DOM_CLICK); + EXPECT_TRUE(gestureEventComponent->GetOnClickId().GetData().eventId == DOM_DEFAULT_ROOT_NODE_ID); + ASSERT_TRUE(CardTestFactory::GetInstance().GetNodeNumber() == 1); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/test/unittest/cardfrontend/frontend/BUILD.gn b/frameworks/bridge/test/unittest/cardfrontend/frontend/BUILD.gn new file mode 100644 index 00000000..62fb766c --- /dev/null +++ b/frameworks/bridge/test/unittest/cardfrontend/frontend/BUILD.gn @@ -0,0 +1,56 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/jscard/card" + +ohos_unittest("CardFrontendTest") { + module_out_path = module_output_path + + sources = [ + "../card_test_factory.cpp", + "card_frontend_test.cpp", + ] + + configs = [ + ":config_domnode_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_domnode_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":CardFrontendTest" ] +} diff --git a/frameworks/bridge/test/unittest/cardfrontend/frontend/card_frontend_test.cpp b/frameworks/bridge/test/unittest/cardfrontend/frontend/card_frontend_test.cpp new file mode 100644 index 00000000..7bb9c511 --- /dev/null +++ b/frameworks/bridge/test/unittest/cardfrontend/frontend/card_frontend_test.cpp @@ -0,0 +1,1055 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "frameworks/bridge/card_frontend/js_card_parser.h" +#include "frameworks/bridge/common/utils/utils.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace::Framework { +namespace { + +constexpr int32_t COMMAND_SIZE = 1; + +} // namespace + +class CardFrontendTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; +}; + +void CardFrontendTest::SetUpTestCase() {} +void CardFrontendTest::TearDownTestCase() {} +void CardFrontendTest::SetUp() {} +void CardFrontendTest::TearDown() {} + +/** + * @tc.name: CardFrontendTest001 + * @tc.desc: Test data binding. + * @tc.type: FUNC + * @tc.require: AR000F2BC2 + * @tc.author: jiangyingjie + */ +HWTEST_F(CardFrontendTest, CardFrontendTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct json string. + */ + const std::string rootJson = "{\n" + "\t\"template\": {\n" + "\t\t\"attr\": {\n" + "\t\t\t\"value\": \"{{variable}}\"\n" + "\t\t},\n" + "\t\t\"type\": \"text\",\n" + "\t\t\"shown\": \"{{show}}\"\n" + "\t},\n" + "\t\"styles\": {},\n" + "\t\"actions\": {},\n" + "\t\"data\": {\n" + "\t\t\"show\": false,\n" + "\t\t\"variable\": \"hello!\"\n" + "\t}\n" + "}"; + auto rootBody = JsonUtil::ParseJsonString(rootJson); + auto rootTemplate = rootBody->GetValue("template"); + auto jsCardParser = AceType::MakeRefPtr(nullptr, nullptr, std::move(rootBody)); + jsCardParser->Initialize(); + auto shown = rootTemplate->GetValue("shown"); + auto shownValue = shown->GetString(); + int32_t nodeId = 1; + + /** + * @tc.steps: step2. Get the value of the shown attribute. + * @tc.expected: step2. shown value is false. + */ + jsCardParser->GetShownValue(shownValue); + ASSERT_TRUE(shownValue == "false"); + + /** + * @tc.steps: step3. Get the value of the attribute. + * @tc.expected: step3. Property value is correct. + */ + std::vector> attrs; + auto type = rootTemplate->GetValue("type")->GetString(); + RefPtr command = + Referenced::MakeRefPtr(type, nodeId, 0); + auto ptr = Referenced::RawPtr(command); + jsCardParser->ParseAttributes(rootTemplate, nodeId, attrs, (Framework::JsCommandDomElementOperator*)ptr); + ASSERT_TRUE(attrs.size() == COMMAND_SIZE); + ASSERT_TRUE(attrs[0].first == "value" && attrs[0].second == "hello!"); +} + +/** + * @tc.name: CardFrontendTest002 + * @tc.desc: Test data binding. + * @tc.type: FUNC + * @tc.require: AR000F2BC2 + * @tc.author: jiangyingjie + */ +HWTEST_F(CardFrontendTest, CardFrontendTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct json string. + */ + const std::string rootJson = "{\n" + "\t\"template\": {\n" + "\t\t\"attr\": {\n" + "\t\t\t\"value\": \"{{}}\"\n" + "\t\t},\n" + "\t\t\"type\": \"text\",\n" + "\t\t\"shown\": \"{{}\"\n" + "\t},\n" + "\t\"styles\": {},\n" + "\t\"actions\": {},\n" + "\t\"data\": {}\n" + "}"; + auto rootBody = JsonUtil::ParseJsonString(rootJson); + auto rootTemplate = rootBody->GetValue("template"); + auto jsCardParser = AceType::MakeRefPtr(nullptr, nullptr, std::move(rootBody)); + jsCardParser->Initialize(); + + /** + * @tc.steps: step2. Get the value of the shown attribute. + * @tc.expected: step2. shown value is not true. + */ + auto shown = rootTemplate->GetValue("shown"); + auto shownValue = shown->GetString(); + int32_t nodeId = 1; + jsCardParser->GetShownValue(shownValue); + ASSERT_TRUE(shownValue != "true"); + + /** + * @tc.steps: step3. Get the value of the attribute. + * @tc.expected: step3. Property value is "{{}}". + */ + std::vector> attrs; + auto type = rootTemplate->GetValue("type")->GetString(); + RefPtr command = + Referenced::MakeRefPtr(type, nodeId, 0); + auto ptr = Referenced::RawPtr(command); + jsCardParser->ParseAttributes(rootTemplate, nodeId, attrs, (Framework::JsCommandDomElementOperator*)ptr); + ASSERT_TRUE(attrs.size() == COMMAND_SIZE); + ASSERT_TRUE(attrs[0].first == "value" && attrs[0].second == "{{}}"); +} + +/** + * @tc.name: CardFrontendTest003 + * @tc.desc: Test data binding. + * @tc.type: FUNC + * @tc.require: AR000F2BC2 + * @tc.author: jiangyingjie + */ +HWTEST_F(CardFrontendTest, CardFrontendTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct json string. + */ + const std::string rootJson = "{\n" + "\t\"template\": {\n" + "\t\t\"attr\": {},\n" + "\t\t\"type\": \"text\",\n" + "\t\t\"style\": {\n" + "\t\t\t\"color\": \"{{{variable}}\",\n" + "\t\t\t\"strokeColor\": \"{{variable}}\"\n" + "\t\t}\n" + "\t},\n" + "\t\"styles\": {},\n" + "\t\"actions\": {},\n" + "\t\"data\": {\n" + "\t\t\"variable\": \"0xffffff\"\n" + "\t}\n" + "}"; + auto rootBody = JsonUtil::ParseJsonString(rootJson); + auto rootTemplate = rootBody->GetValue("template"); + auto jsCardParser = AceType::MakeRefPtr(nullptr, nullptr, std::move(rootBody)); + jsCardParser->Initialize(); + + /** + * @tc.steps: step2. Get the value of the style. + * @tc.expected: step2. The style value meets expectations. + */ + int32_t nodeId = 1; + std::vector> styles; + auto type = rootTemplate->GetValue("type")->GetString(); + jsCardParser->ParseStyles(rootTemplate, nodeId, styles); + ASSERT_TRUE(styles.size() == 2); + ASSERT_TRUE(styles[0].first == "color" && styles[0].second == "{{{variable}}"); + ASSERT_TRUE(styles[1].first == "strokeColor" && styles[1].second == "0xffffff"); +} + +/** + * @tc.name: CardFrontendTest004 + * @tc.desc: Test condition rendering. + * @tc.type: FUNC + * @tc.require: AR000F2BC4 + * @tc.author: jiangyingjie + */ +HWTEST_F(CardFrontendTest, CardFrontendTest004, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct json string. + */ + const std::string rootJson = "{\n" + "\t\"template\": {\n" + "\t\t\"attr\": {},\n" + "\t\t\"type\": \"text\",\n" + "\t\t\"shown\": \"{{show}} && {{display}}\"\n" + "\t},\n" + "\t\"styles\": {},\n" + "\t\"actions\": {},\n" + "\t\"data\": {\n" + "\t\t\"display\": true,\n" + "\t\t\"show\": false\n" + "\t}\n" + "}"; + auto rootBody = JsonUtil::ParseJsonString(rootJson); + auto rootTemplate = rootBody->GetValue("template"); + auto jsCardParser = AceType::MakeRefPtr(nullptr, nullptr, std::move(rootBody)); + jsCardParser->Initialize(); + + /** + * @tc.steps: step2. Get the value of the shown. + * @tc.expected: step2. The shown value meets expectations. + */ + auto shown = rootTemplate->GetValue("shown"); + auto shownValue = shown->GetString(); + jsCardParser->GetShownValue(shownValue); + ASSERT_TRUE(shownValue == "false"); +} + +/** + * @tc.name: CardFrontendTest005 + * @tc.desc: Test condition rendering. + * @tc.type: FUNC + * @tc.require: AR000F2BC4 + * @tc.author: jiangyingjie + */ +HWTEST_F(CardFrontendTest, CardFrontendTest005, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct json string. + */ + const std::string rootJson = "{\n" + "\t\"template\": {\n" + "\t\t\"attr\": {},\n" + "\t\t\"type\": \"text\",\n" + "\t\t\"shown\": \"{{show}} && !{{display}}\"\n" + "\t},\n" + "\t\"styles\": {},\n" + "\t\"actions\": {},\n" + "\t\"data\": {\n" + "\t\t\"display\": false,\n" + "\t\t\"show\": false\n" + "\t}\n" + "}"; + auto rootBody = JsonUtil::ParseJsonString(rootJson); + auto rootTemplate = rootBody->GetValue("template"); + auto jsCardParser = AceType::MakeRefPtr(nullptr, nullptr, std::move(rootBody)); + jsCardParser->Initialize(); + + /** + * @tc.steps: step2. Get the value of the shown. + * @tc.expected: step2. The shown value meets expectations. + */ + auto shown = rootTemplate->GetValue("shown"); + auto shownValue = shown->GetString(); + jsCardParser->GetShownValue(shownValue); + ASSERT_TRUE(shownValue == "false"); +} + +/** + * @tc.name: CardFrontendTest006 + * @tc.desc: Test condition rendering. + * @tc.type: FUNC + * @tc.require: AR000F2BC4 + * @tc.author: jiangyingjie + */ +HWTEST_F(CardFrontendTest, CardFrontendTest006, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct json string. + */ + const std::string rootJson = "{\n" + "\t\"template\": {\n" + "\t\t\"attr\": {},\n" + "\t\t\"type\": \"text\",\n" + "\t\t\"shown\": \"!{{show}} && !{{display}}\"\n" + "\t},\n" + "\t\"styles\": {},\n" + "\t\"actions\": {},\n" + "\t\"data\": {\n" + "\t\t\"display\": false,\n" + "\t\t\"show\": false\n" + "\t}\n" + "}"; + auto rootBody = JsonUtil::ParseJsonString(rootJson); + auto rootTemplate = rootBody->GetValue("template"); + auto jsCardParser = AceType::MakeRefPtr(nullptr, nullptr, std::move(rootBody)); + jsCardParser->Initialize(); + + /** + * @tc.steps: step2. Get the value of the shown. + * @tc.expected: step2. The shown value meets expectations. + */ + auto shown = rootTemplate->GetValue("shown"); + auto shownValue = shown->GetString(); + jsCardParser->GetShownValue(shownValue); + ASSERT_TRUE(shownValue == "true"); +} + +/** + * @tc.name: CardFrontendTest007 + * @tc.desc: Test condition rendering. + * @tc.type: FUNC + * @tc.require: AR000F2BC4 + * @tc.author: jiangyingjie + */ +HWTEST_F(CardFrontendTest, CardFrontendTest007, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct json string. + */ + const std::string rootJson = "{\n" + "\t\"template\": {\n" + "\t\t\"attr\": {},\n" + "\t\t\"type\": \"text\",\n" + "\t\t\"shown\": \"{{show}} && {{xdisplay}}\"\n" + "\t},\n" + "\t\"styles\": {},\n" + "\t\"actions\": {},\n" + "\t\"data\": {\n" + "\t\t\"display\": true,\n" + "\t\t\"show\": true\n" + "\t}\n" + "}"; + auto rootBody = JsonUtil::ParseJsonString(rootJson); + auto rootTemplate = rootBody->GetValue("template"); + auto jsCardParser = AceType::MakeRefPtr(nullptr, nullptr, std::move(rootBody)); + jsCardParser->Initialize(); + + /** + * @tc.steps: step2. Get the value of the shown. + * @tc.expected: step2. The shown value meets expectations. + */ + auto shown = rootTemplate->GetValue("shown"); + auto shownValue = shown->GetString(); + jsCardParser->GetShownValue(shownValue); + ASSERT_TRUE(shownValue != "true"); +} + +/** + * @tc.name: CardFrontendTest008 + * @tc.desc: Test "repeat" attr: for = "{{list}}". + * @tc.type: FUNC + * @tc.require: AR000F2BC4 + * @tc.author: jiangdayuan + */ +HWTEST_F(CardFrontendTest, CardFrontendTest008, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct json string. + */ + const std::string rootJson = "{\n" + "\t\"template\": {\n" + "\t\t\"attr\": {},\n" + "\t\t\"type\": \"text\",\n" + "\t\t\"repeat\": \"{{list}}\"\n" + "\t},\n" + "\t\"styles\": {},\n" + "\t\"actions\": {},\n" + "\t\"data\": {\n" + "\t\t\"list\": [\n" + "\t\t\t{\n" + "\t\t\t\t\"name\": \"aa\",\n" + "\t\t\t\t\"idx\": 1\n" + "\t\t\t},\n" + "\t\t\t{\n" + "\t\t\t\t\"name\": \"bb\",\n" + "\t\t\t\t\"idx\": 2\n" + "\t\t\t},\n" + "\t\t\t{\n" + "\t\t\t\t\"name\": \"cc\",\n" + "\t\t\t\t\"idx\": 1\n" + "\t\t\t}\n" + "\t\t]\n" + "\t}\n" + "}"; + auto rootBody = JsonUtil::ParseJsonString(rootJson); + auto rootTemplate = rootBody->GetValue("template"); + auto jsCardParser = AceType::MakeRefPtr(nullptr, nullptr, std::move(rootBody)); + jsCardParser->Initialize(); + + /** + * @tc.steps: step2. Get the value of the repeat. + * @tc.expected: step2. The repeat value meets expectations. + */ + auto repeatValue = rootTemplate->GetValue("repeat"); + std::string key; + jsCardParser->GetRepeatData(repeatValue, key); + + ASSERT_EQ(repeatValue->GetArraySize(), 3); + auto item = repeatValue->GetChild(); + auto itemName = item->GetValue("name")->GetString(); + auto itemIndex = item->GetValue("idx")->GetInt(); + ASSERT_EQ(itemName, "aa"); + ASSERT_EQ(itemIndex, 1); +} + +/** + * @tc.name: CardFrontendTest009 + * @tc.desc: Test "repeat" attr: for = "value in list". + * @tc.type: FUNC + * @tc.require: AR000F2BC4 + * @tc.author: jiangdayuan + */ +HWTEST_F(CardFrontendTest, CardFrontendTest009, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct json string. + */ + const std::string rootJson = "{\n" + "\t\"template\": {\n" + "\t\t\"attr\": {\n" + "\t\t\t\"value\": \"{{item.name}}\",\n" + "\t\t\t\"index\": \"{{item.idx}}\"\n" + "\t\t},\n" + "\t\t\"type\": \"text\",\n" + "\t\t\"repeat\": {\n" + "\t\t\t\"exp\": \"{{list}}\",\n" + "\t\t\t\"value\": \"item\"\n" + "\t\t}\n" + "\t},\n" + "\t\"styles\": {},\n" + "\t\"actions\": {},\n" + "\t\"data\": {\n" + "\t\t\"list\": [\n" + "\t\t\t{\n" + "\t\t\t\t\"name\": \"aa\",\n" + "\t\t\t\t\"idx\": 1\n" + "\t\t\t},\n" + "\t\t\t{\n" + "\t\t\t\t\"name\": \"bb\",\n" + "\t\t\t\t\"idx\": 2\n" + "\t\t\t},\n" + "\t\t\t{\n" + "\t\t\t\t\"name\": \"cc\",\n" + "\t\t\t\t\"idx\": 1\n" + "\t\t\t}\n" + "\t\t]\n" + "\t}\n" + "}"; + auto rootBody = JsonUtil::ParseJsonString(rootJson); + auto rootTemplate = rootBody->GetValue("template"); + auto jsCardParser = AceType::MakeRefPtr(nullptr, nullptr, std::move(rootBody)); + jsCardParser->Initialize(); + jsCardParser->SetIsRepeat(true); + + /** + * @tc.steps: step2. Get the value of the repeat and parse data. + */ + auto repeatValue = rootTemplate->GetValue("repeat"); + jsCardParser->ParseRepeatIndexItem(repeatValue); + auto expValue = repeatValue->GetValue("exp"); + std::string key; + jsCardParser->GetRepeatData(expValue, key); + jsCardParser->SetRepeatItemValue(0, expValue, true); + + /** + * @tc.steps: step3. Parse repeat attr and assert value of repeat. + * @tc.expected: step3. The repeat value meets expectations. + */ + std::vector> attrs; + auto type = rootTemplate->GetValue("type")->GetString(); + RefPtr command = + Referenced::MakeRefPtr(type, 1, 0); + auto ptr = Referenced::RawPtr(command); + jsCardParser->ParseAttributes(rootTemplate, 1, attrs, (Framework::JsCommandDomElementOperator*)ptr); + + ASSERT_EQ(attrs.begin()->first, "value"); + ASSERT_EQ(attrs.begin()->second, "aa"); + + ASSERT_EQ(attrs.rbegin()->first, "index"); + ASSERT_EQ(attrs.rbegin()->second, "1"); + + jsCardParser->SetRepeatItemValue(1, expValue, true); + attrs.clear(); + jsCardParser->ParseAttributes(rootTemplate, 1, attrs, (Framework::JsCommandDomElementOperator*)ptr); + ASSERT_EQ(attrs.begin()->first, "value"); + ASSERT_EQ(attrs.begin()->second, "bb"); + + ASSERT_EQ(attrs.rbegin()->first, "index"); + ASSERT_EQ(attrs.rbegin()->second, "2"); +} + +/** + * @tc.name: CardFrontendTest010 + * @tc.desc: Test "repeat" attr: for = "(index, item) in list". + * @tc.type: FUNC + * @tc.require: AR000F2BC4 + * @tc.author: jiangdayuan + */ +HWTEST_F(CardFrontendTest, CardFrontendTest010, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct json string. + */ + const std::string rootJson = "{\n" + "\t\"template\": {\n" + "\t\t\"attr\": {\n" + "\t\t\t\"value\": \"{{$item.name}}\",\n" + "\t\t\t\"index\": \"{{$idx}}\"\n" + "\t\t},\n" + "\t\t\"type\": \"text\",\n" + "\t\t\"repeat\": {\n" + "\t\t\t\"exp\": \"{{list}}\",\n" + "\t\t\t\"key\": \"index\",\n" + "\t\t\t\"value\": \"item\"\n" + "\t\t}\n" + "\t},\n" + "\t\"styles\": {},\n" + "\t\"actions\": {},\n" + "\t\"data\": {\n" + "\t\t\"list\": [\n" + "\t\t\t{\n" + "\t\t\t\t\"name\": \"aa\",\n" + "\t\t\t\t\"idx\": 1\n" + "\t\t\t},\n" + "\t\t\t{\n" + "\t\t\t\t\"name\": \"bb\",\n" + "\t\t\t\t\"idx\": 2\n" + "\t\t\t},\n" + "\t\t\t{\n" + "\t\t\t\t\"name\": \"cc\",\n" + "\t\t\t\t\"idx\": 3\n" + "\t\t\t}\n" + "\t\t]\n" + "\t}\n" + "}"; + auto rootBody = JsonUtil::ParseJsonString(rootJson); + auto rootTemplate = rootBody->GetValue("template"); + auto jsCardParser = AceType::MakeRefPtr(nullptr, nullptr, std::move(rootBody)); + jsCardParser->Initialize(); + jsCardParser->SetIsRepeat(true); + + /** + * @tc.steps: step2. Get the value of the repeat and parse data. + */ + auto repeatValue = rootTemplate->GetValue("repeat"); + jsCardParser->ParseRepeatIndexItem(repeatValue); + auto expValue = repeatValue->GetValue("exp"); + std::string key; + jsCardParser->GetRepeatData(expValue, key); + jsCardParser->SetRepeatItemValue(2, expValue, true); + + /** + * @tc.steps: step3. Parse repeat attr and assert value of repeat. + * @tc.expected: step3. The repeat value meets expectations. + */ + std::vector> attrs; + auto type = rootTemplate->GetValue("type")->GetString(); + RefPtr command = + Referenced::MakeRefPtr(type, 1, 0); + auto ptr = Referenced::RawPtr(command); + jsCardParser->ParseAttributes(rootTemplate, 1, attrs, (Framework::JsCommandDomElementOperator*)ptr); + + ASSERT_EQ(attrs.begin()->first, "value"); + ASSERT_EQ(attrs.begin()->second, "cc"); + + ASSERT_EQ(attrs.rbegin()->first, "index"); + ASSERT_EQ(attrs.rbegin()->second, "2"); + + jsCardParser->SetRepeatItemValue(1, expValue, true); + attrs.clear(); + jsCardParser->ParseAttributes(rootTemplate, 1, attrs, (Framework::JsCommandDomElementOperator*)ptr); + ASSERT_EQ(attrs.begin()->first, "value"); + ASSERT_EQ(attrs.begin()->second, "bb"); + + ASSERT_EQ(attrs.rbegin()->first, "index"); + ASSERT_EQ(attrs.rbegin()->second, "1"); +} + +/** + * @tc.name: CardFrontendTest011 + * @tc.desc: Test point operation. + * @tc.type: FUNC + * @tc.require: AR000FDGO7 + * @tc.author: jiangyingjie + */ +HWTEST_F(CardFrontendTest, CardFrontendTest011, TestSize.Level1) +{ + const std::string rootJson = "{\n" + "\t\"template\": {\n" + "\t\t\"attr\": {},\n" + "\t\t\"type\": \"text\"\n" + "\t},\n" + "\t\"styles\": {},\n" + "\t\"actions\": {},\n" + "\t\"data\": {\n" + "\t\t\"number\": {\n" + "\t\t\t\"key\": 1\n" + "\t\t}\n" + "\t}\n" + "}"; + auto rootBody = JsonUtil::ParseJsonString(rootJson); + auto jsCardParser = AceType::MakeRefPtr(nullptr, nullptr, std::move(rootBody)); + jsCardParser->Initialize(); + std::string value = "{{number.key}}"; + jsCardParser->ParseVariable(value); + ASSERT_EQ(value, "1"); +} + +/** + * @tc.name: CardFrontendTest012 + * @tc.desc: Test array operations. + * @tc.type: FUNC + * @tc.require: AR000FDGO8 + * @tc.author: jiangyingjie + */ +HWTEST_F(CardFrontendTest, CardFrontendTest012, TestSize.Level1) +{ + const std::string rootJson = "{\n" + "\t\"template\": {\n" + "\t\t\"attr\": {},\n" + "\t\t\"type\": \"text\"\n" + "\t},\n" + "\t\"styles\": {},\n" + "\t\"actions\": {},\n" + "\t\"data\": {\n" + "\t\t\"index\": [\n" + "\t\t\t0,\n" + "\t\t\t3,\n" + "\t\t\t4\n" + "\t\t]\n" + "\t}\n" + "}"; + auto rootBody = JsonUtil::ParseJsonString(rootJson); + auto jsCardParser = AceType::MakeRefPtr(nullptr, nullptr, std::move(rootBody)); + jsCardParser->Initialize(); + std::string value = "{{index[0]}}"; + jsCardParser->ParseVariable(value); + ASSERT_EQ(value, "0"); + value = "{{index[1]}}"; + jsCardParser->ParseVariable(value); + ASSERT_EQ(value, "3"); + value = "{{index[2]}}"; + jsCardParser->ParseVariable(value); + ASSERT_EQ(value, "4"); +} + +/** + * @tc.name: CardFrontendTest013 + * @tc.desc: Test complex expressions. + * @tc.type: FUNC + * @tc.require: AR000FDGO9 + * @tc.author: jiangyingjie + */ +HWTEST_F(CardFrontendTest, CardFrontendTest013, TestSize.Level1) +{ + const std::string rootJson = "{\n" + "\t\"template\": {\n" + "\t\t\"attr\": {},\n" + "\t\t\"type\": \"text\"\n" + "\t},\n" + "\t\"styles\": {},\n" + "\t\"actions\": {},\n" + "\t\"data\": {\n" + "\t\t\"hours\": [\n" + "\t\t\t{\n" + "\t\t\t\t\"time\": [\n" + "\t\t\t\t\t8,\n" + "\t\t\t\t\t2,\n" + "\t\t\t\t\t3\n" + "\t\t\t\t],\n" + "\t\t\t\t\"src\": \"src/XXX.png\",\n" + "\t\t\t\t\"prop\": 10,\n" + "\t\t\t\t\"isPast\": false,\n" + "\t\t\t\t\"temperature\": \"22°\",\n" + "\t\t\t\t\"description\": \"\"\n" + "\t\t\t},\n" + "\t\t\t{\n" + "\t\t\t\t\"time\": \"3:00\",\n" + "\t\t\t\t\"src\": \"src/XXX.png\",\n" + "\t\t\t\t\"prop\": 11,\n" + "\t\t\t\t\"isPast\": false,\n" + "\t\t\t\t\"temperature\": \"22°\",\n" + "\t\t\t\t\"description\": \"\"\n" + "\t\t\t}\n" + "\t\t],\n" + "\t\t\"number\": {\n" + "\t\t\t\"key\": 1\n" + "\t\t}\n" + "\t}\n" + "}"; + auto rootBody = JsonUtil::ParseJsonString(rootJson); + auto jsCardParser = AceType::MakeRefPtr(nullptr, nullptr, std::move(rootBody)); + jsCardParser->Initialize(); + std::string value = "{{hours[0].time[0]}}"; + jsCardParser->ParseVariable(value); + ASSERT_EQ(value, "8"); + value = "{{hours[number.key].time}}"; + jsCardParser->ParseVariable(value); + ASSERT_EQ(value, "3:00"); + value = "{{hours[0].time}}"; + jsCardParser->ParseVariable(value); + ASSERT_EQ(value, "[8,2,3]"); +} + +/** + * @tc.name: CardFrontendTest014 + * @tc.desc: Test error expression. + * @tc.type: FUNC + * @tc.require: AR000FDGO8 + * @tc.author: jiangyingjie + */ +HWTEST_F(CardFrontendTest, CardFrontendTest014, TestSize.Level1) +{ + const std::string rootJson = "{\n" + "\t\"template\": {\n" + "\t\t\"attr\": {},\n" + "\t\t\"type\": \"text\"\n" + "\t},\n" + "\t\"styles\": {},\n" + "\t\"actions\": {},\n" + "\t\"data\": {\n" + "\t\t\"hours\": [\n" + "\t\t\t{\n" + "\t\t\t\t\"time\": [\n" + "\t\t\t\t\t8,\n" + "\t\t\t\t\t2,\n" + "\t\t\t\t\t3\n" + "\t\t\t\t],\n" + "\t\t\t\t\"src\": \"src/XXX.png\",\n" + "\t\t\t\t\"prop\": 10,\n" + "\t\t\t\t\"isPast\": false,\n" + "\t\t\t\t\"temperature\": \"22°\",\n" + "\t\t\t\t\"description\": \"\"\n" + "\t\t\t},\n" + "\t\t\t{\n" + "\t\t\t\t\"time\": \"3:00\",\n" + "\t\t\t\t\"src\": \"src/XXX.png\",\n" + "\t\t\t\t\"prop\": 11,\n" + "\t\t\t\t\"isPast\": false,\n" + "\t\t\t\t\"temperature\": \"22°\",\n" + "\t\t\t\t\"description\": \"\"\n" + "\t\t\t}\n" + "\t\t],\n" + "\t\t\"number\": {\n" + "\t\t\t\"key\": 1\n" + "\t\t}\n" + "\t}\n" + "}"; + auto rootBody = JsonUtil::ParseJsonString(rootJson); + auto jsCardParser = AceType::MakeRefPtr(nullptr, nullptr, std::move(rootBody)); + jsCardParser->Initialize(); + std::string value = "{{hours[key].time}}"; + jsCardParser->ParseVariable(value); + ASSERT_EQ(value, "{{hours[key].time}}"); + value = "{{key.number}}"; + jsCardParser->ParseVariable(value); + ASSERT_EQ(value, "{{key.number}}"); + value = "{{number.key}}}"; + jsCardParser->ParseVariable(value); + ASSERT_EQ(value, "{{number.key}}}"); +} + +/** + * @tc.name: CardFrontendTest015 + * @tc.desc: Test data binding for {{key1}}.{{key2}. + * @tc.type: FUNC + * @tc.require: AR000FLCJU + * @tc.author: jiangdayuan + */ +HWTEST_F(CardFrontendTest, CardFrontendTest015, TestSize.Level1) +{ + const std::string rootJson = "{\n" + "\t\"template\": {\n" + "\t\t\"attr\": {\n" + "\t\t\t\"value\": \"$f({{aaa}}.{{ddd}})\",\n" + "\t\t\t\"index\": \"$f({{aaa}}.{{bbb}}.{{ccc}})\"\n" + "\t\t},\n" + "\t\t\"type\": \"text\"\n" + "\t},\n" + "\t\"styles\": {},\n" + "\t\"actions\": {},\n" + "\t\"data\": {\n" + "\t\t\"aaa\": \"abc\",\n" + "\t\t\"bbb\": \"true\",\n" + "\t\t\"ccc\": \"false\",\n" + "\t\t\"ddd\": \"123\"\n" + "\t}\n" + "}"; + auto rootBody = JsonUtil::ParseJsonString(rootJson); + auto rootTemplate = rootBody->GetValue("template"); + auto jsCardParser = AceType::MakeRefPtr(nullptr, nullptr, std::move(rootBody)); + jsCardParser->Initialize(); + + auto attrValue = rootTemplate->GetValue("attr"); + auto value = attrValue->GetValue("value")->GetString(); + + // {{aaa}}.{{ddd}} == abc.123 + jsCardParser->ParseMultiVariable(value); + ASSERT_EQ(value, "abc.123"); + + // {{aaa}}.{{bbb}}.{{ccc}} = abc.true.false + value = attrValue->GetValue("index")->GetString(); + jsCardParser->ParseMultiVariable(value); + ASSERT_EQ(value, "abc.true.false"); +} + +/** + * @tc.name: CardFrontendTest016 + * @tc.desc: Test data binding for {{flag1 ? key1 : key2}}. + * @tc.type: FUNC + * @tc.require: AR000FLCKP + * @tc.author: jiangdayuan + */ +HWTEST_F(CardFrontendTest, CardFrontendTest016, TestSize.Level1) +{ + const std::string rootJson = "{\n" + "\t\"template\": {\n" + "\t\t\"attr\": {\n" + "\t\t\t\"value\": \"{{bbb ? aaa : bbb}}\",\n" + "\t\t\t\"index\": \"{{ccc ? ddd : eee}}\"\n" + "\t\t},\n" + "\t\t\"type\": \"text\"\n" + "\t},\n" + "\t\"styles\": {},\n" + "\t\"actions\": {},\n" + "\t\"data\": {\n" + "\t\t\"aaa\": \"abc\",\n" + "\t\t\"bbb\": \"true\",\n" + "\t\t\"ccc\": \"false\",\n" + "\t\t\"ddd\": \"123\"\n" + "\t}\n" + "}"; + auto rootBody = JsonUtil::ParseJsonString(rootJson); + auto rootTemplate = rootBody->GetValue("template"); + auto jsCardParser = AceType::MakeRefPtr(nullptr, nullptr, std::move(rootBody)); + jsCardParser->Initialize(); + + auto attrValue = rootTemplate->GetValue("attr"); + auto value = attrValue->GetValue("value")->GetString(); + + // bbb = true, value = {{aaa}} + jsCardParser->ParseVariable(value); + ASSERT_EQ(value, "abc"); + + // ccc = false, value = {{eee}}, eee dose not belong to the data field. + value = attrValue->GetValue("index")->GetString(); + jsCardParser->ParseVariable(value); + ASSERT_EQ(value, "eee"); +} + +/** + * @tc.name: CardFrontendTest017 + * @tc.desc: Test data binding for {{flag1 && flag2}}. + * @tc.type: FUNC + * @tc.require: AR000FLCK0 + * @tc.author: jiangdayuan + */ +HWTEST_F(CardFrontendTest, CardFrontendTest017, TestSize.Level1) +{ + const std::string rootJson = "{\n" + "\t\"template\": {\n" + "\t\t\"attr\": {\n" + "\t\t\t\"value\": \"{{bbb && ccc}}\",\n" + "\t\t\t\"index\": \"{{bbb && bbb}}\"\n" + "\t\t},\n" + "\t\t\"type\": \"text\"\n" + "\t},\n" + "\t\"styles\": {},\n" + "\t\"actions\": {},\n" + "\t\"data\": {\n" + "\t\t\"aaa\": \"abc\",\n" + "\t\t\"bbb\": \"true\",\n" + "\t\t\"ccc\": \"false\",\n" + "\t\t\"ddd\": \"123\"\n" + "\t}\n" + "}"; + auto rootBody = JsonUtil::ParseJsonString(rootJson); + auto rootTemplate = rootBody->GetValue("template"); + auto jsCardParser = AceType::MakeRefPtr(nullptr, nullptr, std::move(rootBody)); + jsCardParser->Initialize(); + + auto attrValue = rootTemplate->GetValue("attr"); + auto value = attrValue->GetValue("value")->GetString(); + + // bbb = true, ccc = false, value = (bbb && ccc) = false. + jsCardParser->ParseVariable(value); + ASSERT_EQ(value, "false"); + + // bbb = true, value = (bbb && bbb) = true. + value = attrValue->GetValue("index")->GetString(); + jsCardParser->ParseVariable(value); + ASSERT_EQ(value, "true"); +} + +/** + * @tc.name: CardFrontendTest018 + * @tc.desc: Test data binding for {{flag1 || flag2}}. + * @tc.type: FUNC + * @tc.require: AR000FLCK0 + * @tc.author: jiangdayuan + */ +HWTEST_F(CardFrontendTest, CardFrontendTest018, TestSize.Level1) +{ + const std::string rootJson = "{\n" + "\t\"template\": {\n" + "\t\t\"attr\": {\n" + "\t\t\t\"value\": \"{{bbb || ccc}}\",\n" + "\t\t\t\"index\": \"{{ccc || ccc}}\"\n" + "\t\t},\n" + "\t\t\"type\": \"text\"\n" + "\t},\n" + "\t\"styles\": {},\n" + "\t\"actions\": {},\n" + "\t\"data\": {\n" + "\t\t\"aaa\": \"abc\",\n" + "\t\t\"bbb\": \"true\",\n" + "\t\t\"ccc\": \"false\",\n" + "\t\t\"ddd\": \"123\"\n" + "\t}\n" + "}"; + auto rootBody = JsonUtil::ParseJsonString(rootJson); + auto rootTemplate = rootBody->GetValue("template"); + auto jsCardParser = AceType::MakeRefPtr(nullptr, nullptr, std::move(rootBody)); + jsCardParser->Initialize(); + + auto attrValue = rootTemplate->GetValue("attr"); + auto value = attrValue->GetValue("value")->GetString(); + + // bbb = true, ccc = false, value = (bbb || ccc) = true. + jsCardParser->ParseVariable(value); + ASSERT_EQ(value, "true"); + + // ccc = false, value = (ccc || ccc) = false. + value = attrValue->GetValue("index")->GetString(); + jsCardParser->ParseVariable(value); + ASSERT_EQ(value, "false"); +} + +/** + * @tc.name: CardFrontendTest019 + * @tc.desc: Test data binding for {{!flag1}}. + * @tc.type: FUNC + * @tc.require: AR000FLCK0 + * @tc.author: jiangdayuan + */ +HWTEST_F(CardFrontendTest, CardFrontendTest019, TestSize.Level1) +{ + const std::string rootJson = "{\n" + "\t\"template\": {\n" + "\t\t\"attr\": {\n" + "\t\t\t\"value\": \"{{!bbb}}\",\n" + "\t\t\t\"index\": \"{{!ccc}}\"\n" + "\t\t},\n" + "\t\t\"type\": \"text\"\n" + "\t},\n" + "\t\"styles\": {},\n" + "\t\"actions\": {},\n" + "\t\"data\": {\n" + "\t\t\"aaa\": \"abc\",\n" + "\t\t\"bbb\": \"true\",\n" + "\t\t\"ccc\": \"false\",\n" + "\t\t\"ddd\": \"123\"\n" + "\t}\n" + "}"; + auto rootBody = JsonUtil::ParseJsonString(rootJson); + auto rootTemplate = rootBody->GetValue("template"); + auto jsCardParser = AceType::MakeRefPtr(nullptr, nullptr, std::move(rootBody)); + jsCardParser->Initialize(); + + auto attrValue = rootTemplate->GetValue("attr"); + auto value = attrValue->GetValue("value")->GetString(); + + // bbb = true, !bbb = false. + jsCardParser->ParseVariable(value); + ASSERT_EQ(value, "false"); + + // ccc = false, !ccc = true. + value = attrValue->GetValue("index")->GetString(); + jsCardParser->ParseVariable(value); + ASSERT_EQ(value, "true"); +} + +/** + * @tc.name: CardFrontendTest020 + * @tc.desc: Test data binding for error expression. + * @tc.type: FUNC + * @tc.require: SR000FLCGT + * @tc.author: jiangdayuan + */ +HWTEST_F(CardFrontendTest, CardFrontendTest020, TestSize.Level1) +{ + const std::string rootJson = "{\n" + "\t\"template\": {\n" + "\t\t\"attr\": {\n" + "\t\t\t\"value\": \"$f({{aaa}}.{{eee}})\",\n" + "\t\t\t\"value1\": \"{{aaa ? bbb : ddd}}\",\n" + "\t\t\t\"value2\": \"{{aaa && ddd}}\",\n" + "\t\t\t\"value3\": \"{{aaa || ddd}}\",\n" + "\t\t\t\"value4\": \"{{!ddd}}\"\n" + "\t\t},\n" + "\t\t\"type\": \"text\"\n" + "\t},\n" + "\t\"styles\": {},\n" + "\t\"actions\": {},\n" + "\t\"data\": {\n" + "\t\t\"aaa\": \"abc\",\n" + "\t\t\"bbb\": \"true\",\n" + "\t\t\"ccc\": \"false\",\n" + "\t\t\"ddd\": \"123\"\n" + "\t}\n" + "}"; + auto rootBody = JsonUtil::ParseJsonString(rootJson); + auto rootTemplate = rootBody->GetValue("template"); + auto jsCardParser = AceType::MakeRefPtr(nullptr, nullptr, std::move(rootBody)); + jsCardParser->Initialize(); + + auto attrValue = rootTemplate->GetValue("attr"); + auto value = attrValue->GetValue("value")->GetString(); + + // {{aaa}}.{{eee}}, eee does not belong to the data field. + jsCardParser->ParseMultiVariable(value); + ASSERT_EQ(value, "abc.{{eee}}"); + + // aaa ? bbb : ddd, aaa is not bool variable, the default setting is false. + value = attrValue->GetValue("value1")->GetString(); + jsCardParser->ParseVariable(value); + ASSERT_EQ(value, "123"); + + // aaa && ddd, aaa and ddd are not bool variables, the default setting is false. + value = attrValue->GetValue("value2")->GetString(); + jsCardParser->ParseVariable(value); + ASSERT_EQ(value, "false"); + + // aaa || ddd, aaa and ddd are not bool variables, the default setting is false. + value = attrValue->GetValue("value3")->GetString(); + jsCardParser->ParseVariable(value); + ASSERT_EQ(value, "false"); + + // ddd is not a bool variable, the default setting is false. + value = attrValue->GetValue("value4")->GetString(); + jsCardParser->ParseVariable(value); + ASSERT_EQ(value, "true"); +} + +} // namespace OHOS::Ace::Framework \ No newline at end of file diff --git a/frameworks/bridge/test/unittest/cardfrontend/mediaquery/BUILD.gn b/frameworks/bridge/test/unittest/cardfrontend/mediaquery/BUILD.gn new file mode 100644 index 00000000..dcdc7873 --- /dev/null +++ b/frameworks/bridge/test/unittest/cardfrontend/mediaquery/BUILD.gn @@ -0,0 +1,50 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/jscard/cardmediaquery" + +ohos_unittest("MediaQueryTest") { + module_out_path = module_output_path + + sources = [ "media_query_test.cpp" ] + + configs = [ ":config_media_query_test" ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_media_query_test") { + visibility = [ ":*" ] + include_dirs = [ + "$ace_root", + "$ace_root/frameworks", + ] +} + +group("unittest") { + testonly = true + deps = [ ":MediaQueryTest" ] +} diff --git a/frameworks/bridge/test/unittest/cardfrontend/mediaquery/media_query_test.cpp b/frameworks/bridge/test/unittest/cardfrontend/mediaquery/media_query_test.cpp new file mode 100644 index 00000000..4a6da92c --- /dev/null +++ b/frameworks/bridge/test/unittest/cardfrontend/mediaquery/media_query_test.cpp @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "frameworks/bridge/card_frontend/media_queryer.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace::Framework { + +class MediaQueryTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); +}; + +void MediaQueryTest::SetUpTestCase() {} +void MediaQueryTest::TearDownTestCase() {} +void MediaQueryTest::SetUp() {} +void MediaQueryTest::TearDown() {} + +/** + * @tc.name: MediaQueryTest001 + * @tc.desc: Verify that media query condition can match right result. + * @tc.type: FUNC + * @tc.require: AR000FL26S, AR000FLCEI + * @tc.author: kouxinxin + */ +HWTEST_F(MediaQueryTest, MediaQueryTest001, TestSize.Level1) +{ + OHOS::Ace::Framework::MediaFeature mediaFeature = JsonUtil::Create(true); + mediaFeature->Put("width", 1500); + mediaFeature->Put("device-type", "tv"); + mediaFeature->Put("round-screen", true); + + struct ConditionTestCase { + std::string condition; + bool result; + }; + std::vector conditions = { + { "(max-width: )", false }, + { "(min-width: 1000)", true }, + { "(width < 2000)", true }, + { "(width << 2000)", false }, + { "(1000 < width)", true }, + { "(1000 < width < 2000)", true }, + { "(round-screen: true) (device-type:tv)", false }, + { "screen and (round-screen: true) and (device-type:tv)", true }, + { "not screen and (round-screen: true) and (device-type:tv)", false }, + { "not screen and (round-screen: false) and (device-type:tv)", true }, + { "not screen and (round-screen: true) and (device-type:phone)", true }, + { "screen and (round-screen: false), (device-type:tv)", true }, + { "only screen and (1000 < width < 2000), (device-type:phone)", true }, + { "(device-height < 2000) and (device-width < 2000) and (round-screen: true) and (device-type:phone)", false }, + { "(device-height > 2000) or (device-width > 2000) or (round-screen: false) or (device-type:tv)", true }, + { "(round-screen: true) or (device-type:phone)", true }, + { "(round-screen: true), screen and (1000 < width < 2000), (device-type:phone)", false }, + }; + + MediaQueryer mediaQueryer; + for (const auto& item : conditions) { + bool result = mediaQueryer.MatchCondition(item.condition, mediaFeature); + ASSERT_EQ(result, item.result) << "condition = " << item.condition; + } +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/test/unittest/jsfrontend/animation/BUILD.gn b/frameworks/bridge/test/unittest/jsfrontend/animation/BUILD.gn new file mode 100644 index 00000000..0f549720 --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/animation/BUILD.gn @@ -0,0 +1,53 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/jsframework/animation" + +ohos_unittest("AnimationDomTest") { + module_out_path = module_output_path + + sources = [ "dom_animation_test.cpp" ] + + configs = [ + ":config_domnode_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_domnode_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":AnimationDomTest" ] +} diff --git a/frameworks/bridge/test/unittest/jsfrontend/animation/dom_animation_test.cpp b/frameworks/bridge/test/unittest/jsfrontend/animation/dom_animation_test.cpp new file mode 100644 index 00000000..db93a0a7 --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/animation/dom_animation_test.cpp @@ -0,0 +1,865 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "frameworks/bridge/common/utils/utils.h" +#include "frameworks/bridge/js_frontend/engine/quickjs/animation_bridge.h" +#include "frameworks/core/animation/curve.h" + +using namespace testing; +using namespace testing::ext; +namespace OHOS::Ace::Framework { + +namespace { + +const int32_t ANIMATION_ITERATIONS_DEFAULT = 1; +const double ANIMATION_DURATIONS_DEFAULT = 3000; +const double ANIMATION_DELAY_DEFAULT = 1000; +const std::string TRANSFORM_ORIGIN_DEFAULT_FROM = "left top"; +const std::string TRANSFORM_ORIGIN_DEFAULT_TO = "right center"; +const std::string TRANSFORM_SCALE_DEFAULT_FROM = "1"; +const std::string TRANSFORM_TRANSLATE_DEFAULT_FROM = "50"; +const std::string TRANSFORM_ROTATE_DEFAULT_FROM = "0"; +const std::string TRANSFORM_SCALE_DEFAULT_TO = "3"; +const std::string TRANSFORM_TRANSLATE_DEFAULT_TO = "100"; +const std::string TRANSFORM_ROTATE_DEFAULT_TO = "360"; +const std::string ANIMATION_HEIGHT_DEFAULT = "150"; +const std::string ANIMATION_OFFSET_FROM = "0.0"; +const std::string ANIMATION_OFFSET_MIDDLE = "0.5"; +const std::string ANIMATION_OFFSET_TO = "1.0"; +const std::string ANIMATION_WIDTH_DEFAULT = "200"; +const std::string ANIMATION_OPACITY_DEFAULT = "1"; +const std::string ANIMATION_COLOR_DEFAULT = "#ff0000"; +const std::string ANIMATION_EASING_DEFAULT = "linear"; +const std::string ANIMATION_FILL_DEFAULT = "forwards"; +const std::string ANIMATION_EASING_ANTICIPATE = "anticipate"; +const std::string ANIMATION_EASING_CUBIC = "cubic-bezier(0.0, 0.0, 0.0, 1.0)"; + +const std::string TRANSFORM_ORIGIN_TEST = "" + "[ " + " [ " + " { " + " \"transformOrigin\": \"left top\" " + " }, " + " { " + " \"transformOrigin\": \"right center\" " + " } " + " ] " + "]"; + +const std::string TRANSFORM_TEST = "" + "[ " + " [ " + " { " + " \"transform\": { " + " \"translate\": \"50\", " + " \"rotate\": \"0\" , " + " \"scale\": \"1\" " + " } " + " }, " + " { " + " \"transform\": { " + " \"translate\": \"100\", " + " \"rotate\": \"360\" , " + " \"scale\" : \"3\" " + " } " + " } " + " ] " + "]"; + +const std::string HEIGHT_WIDTH_TEST = "" + "[ " + " [ " + " { " + " \"height\": \"150\", " + " \"width\": \"200\" " + " }, " + " { " + " \"height\": \"150\", " + " \"width\": \"200\" " + " } " + " ] " + "]"; + +const std::string OPACITY_COLOR_TEST = "" + "[ " + " [ " + " { " + " \"opacity\": \"1\", " + " \"backgroundColor\": \"#ff0000\" " + " }, " + " { " + " \"opacity\": \"1\", " + " \"backgroundColor\": \"#ff0000\" " + " } " + " ] " + "]"; + +const std::string OPTIONS_TEST = "" + "[ " + " [ " + " { " + " }, " + " { " + " } " + " ], " + " { " + " \"duration\": 3000, " + " \"easing\": \"linear\", " + " \"delay\": 1000, " + " \"fill\": \"forwards\", " + " \"iterations\": 1 " + " } " + "]"; + +const std::string ANTICIPATE_CURVE_TEST = "" + "[ " + " [ " + " { " + " }, " + " { " + " } " + " ], " + " { " + " \"duration\": 3000, " + " \"easing\": \"anticipate\"," + " \"delay\": 1000, " + " \"fill\": \"forwards\", " + " \"iterations\": 1 " + " } " + "]"; + +const std::string CUBIC_CURVE_TEST = "" + "[ " + " [ " + " { " + " }, " + " { " + " } " + " ], " + " { " + " \"duration\": 3000, " + " \"easing\": \"cubic-bezier(0.0, 0.0, 0.0, 1.0)\"," + " \"delay\": 1000, " + " \"fill\": \"forwards\", " + " \"iterations\": 1 " + " } " + "]"; + +const std::string NO_OFFSET_TEST = "" + "[ " + " [ " + " { " + " \"height\": \"150\" " + " }, " + " { " + " \"height\": \"150\" " + " } " + " ] " + "]"; + +const std::string MULTI_ANIMATION_TEST = "" + "[ " + " [ " + " { " + " \"height\": \"150\", " + " \"opacity\": \"1\" " + " }, " + " { " + " \"height\": \"150\", " + " \"opacity\": \"1\", " + " \"offset\": \"0.5\" " + " }, " + " { " + " \"height\": \"150\", " + " \"opacity\": \"1\" " + " } " + " ] " + "]"; + +const std::string SERIAL_ANIMATION_TEST = "" + "[ " + " [ " + " { " + " \"height\": \"150\", " + " \"offset\": \"0.0\" " + " }, " + " { " + " \"height\": \"150\", " + " \"offset\": \"0.5\" " + " }, " + " { " + " \"height\": \"150\", " + " \"offset\": \"1.0\" " + " } " + " ] " + "]"; + +const std::string SERIAL_TRANSFORM_TEST = "" + "[ " + " [ " + " { " + " \"transform\": { " + " \"translate\": \"50\", " + " \"scale\": \"1\" " + " }, " + " \"offset\": \"0.0\" " + " }, " + " { " + " \"transform\": { " + " \"translate\": \"100\", " + " \"scale\" : \"3\" " + " }, " + " \"offset\": \"1.0\" " + " } " + " ] " + "]"; + +const std::string ERROR_OFFSET_TEST = "" + "[ " + " [ " + " { " + " \"height\": \"150\" " + " }, " + " { " + " \"height\": \"150\", " + " \"offset\": \"0.5\" " + " }, " + " { " + " \"height\": \"150\", " + " \"offset\": \"0.7\" " + " } " + " ] " + "]"; + +} // namespace + +class AnimationDomTest : public testing::Test, public BaseAnimationBridgeUtils { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; +}; + +void AnimationDomTest::SetUpTestCase() {} +void AnimationDomTest::TearDownTestCase() {} +void AnimationDomTest::SetUp() {} +void AnimationDomTest::TearDown() {} + +/** + * @tc.name: AnimationDomTest001 + * @tc.desc: Animation JS api parse + * @tc.type: FUNC + * @tc.require: AR000DQ20L + * @tc.author: jiachunhui + */ +HWTEST_F(AnimationDomTest, AnimationDomTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. parse the param of transformOrigin. + */ + std::vector> animationFrames; + JsParseAnimationFrames(TRANSFORM_ORIGIN_TEST, animationFrames); + + /** + * @tc.steps: step2. get the transformOrigin from the map. + */ + auto transformOriginForm = animationFrames[0].find(DOM_TRANSFORM_ORIGIN)->second; + auto transformOriginTo = animationFrames[1].find(DOM_TRANSFORM_ORIGIN)->second; + + /** + * @tc.steps: step3. Judge whether the parameter resolution is successful. + * @tc.expected: step3. The value of transformOrigin is as expected. + */ + EXPECT_EQ(TRANSFORM_ORIGIN_DEFAULT_FROM, transformOriginForm); + EXPECT_EQ(TRANSFORM_ORIGIN_DEFAULT_TO, transformOriginTo); +} + +/** + * @tc.name: AnimationDomTest002 + * @tc.desc: Animation JS api parse + * @tc.type: FUNC + * @tc.require: AR000DQ20M + * @tc.author: jiachunhui + */ +HWTEST_F(AnimationDomTest, AnimationDomTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. parse the param of transform. + */ + std::vector> animationFrames; + JsParseAnimationFrames(TRANSFORM_TEST, animationFrames); + + /** + * @tc.steps: step2. get the transform from the map. + */ + auto transformScaleForm = animationFrames[0].find(SCALE)->second; + auto transformTranslateForm = animationFrames[0].find(DOM_TRANSLATE)->second; + auto transformRotateForm = animationFrames[0].find(DOM_ROTATE)->second; + auto transformScaleTo = animationFrames[1].find(SCALE)->second; + auto transformTranslateTo = animationFrames[1].find(DOM_TRANSLATE)->second; + auto transformRotateTo = animationFrames[1].find(DOM_ROTATE)->second; + + /** + * @tc.steps: step3. Judge whether the parameter resolution is successful. + * @tc.expected: step3. The value of transform is as expected. + */ + EXPECT_EQ(TRANSFORM_SCALE_DEFAULT_FROM, transformScaleForm); + EXPECT_EQ(TRANSFORM_TRANSLATE_DEFAULT_FROM, transformTranslateForm); + EXPECT_EQ(TRANSFORM_ROTATE_DEFAULT_FROM, transformRotateForm); + EXPECT_EQ(TRANSFORM_SCALE_DEFAULT_TO, transformScaleTo); + EXPECT_EQ(TRANSFORM_TRANSLATE_DEFAULT_TO, transformTranslateTo); + EXPECT_EQ(TRANSFORM_ROTATE_DEFAULT_TO, transformRotateTo); +} + +/** + * @tc.name: AnimationDomTest003 + * @tc.desc: Animation JS api parse + * @tc.type: FUNC + * @tc.require: AR000DQ20M + * @tc.author: jiachunhui + */ +HWTEST_F(AnimationDomTest, AnimationDomTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. parse the param of height and width. + */ + std::vector> animationFrames; + JsParseAnimationFrames(HEIGHT_WIDTH_TEST, animationFrames); + + /** + * @tc.steps: step2. get the params from the map. + */ + auto heightForm = animationFrames[0].find(DOM_ANIMATION_HEIGHT)->second; + auto widthForm = animationFrames[0].find(DOM_ANIMATION_WIDTH)->second; + auto heightTo = animationFrames[1].find(DOM_ANIMATION_HEIGHT)->second; + auto widthTo = animationFrames[1].find(DOM_ANIMATION_WIDTH)->second; + + /** + * @tc.steps: step3. Judge whether the parameter resolution is successful. + * @tc.expected: step3. The value of the params are as expected. + */ + EXPECT_EQ(ANIMATION_HEIGHT_DEFAULT, heightForm); + EXPECT_EQ(ANIMATION_WIDTH_DEFAULT, widthForm); + EXPECT_EQ(ANIMATION_HEIGHT_DEFAULT, heightTo); + EXPECT_EQ(ANIMATION_WIDTH_DEFAULT, widthTo); +} + +/** + * @tc.name: AnimationDomTest004 + * @tc.desc: Animation JS api parse + * @tc.type: FUNC + * @tc.require: AR000DQ20M + * @tc.author: jiachunhui + */ +HWTEST_F(AnimationDomTest, AnimationDomTest004, TestSize.Level1) +{ + /** + * @tc.steps: step1. parse the param of opacity and color. + */ + std::vector> animationFrames; + JsParseAnimationFrames(OPACITY_COLOR_TEST, animationFrames); + + /** + * @tc.steps: step2. get the params from the map. + */ + auto opacityForm = animationFrames[0].find(DOM_ANIMATION_OPACITY)->second; + auto colorForm = animationFrames[0].find(DOM_ANIMATION_COLOR)->second; + auto opacityTo = animationFrames[1].find(DOM_ANIMATION_OPACITY)->second; + auto colorTo = animationFrames[1].find(DOM_ANIMATION_COLOR)->second; + + /** + * @tc.steps: step3. Judge whether the parameter resolution is successful. + * @tc.expected: step3. The value of the params are as expected. + */ + EXPECT_EQ(ANIMATION_OPACITY_DEFAULT, opacityForm); + EXPECT_EQ(ANIMATION_COLOR_DEFAULT, colorForm); + EXPECT_EQ(ANIMATION_OPACITY_DEFAULT, opacityTo); + EXPECT_EQ(ANIMATION_COLOR_DEFAULT, colorTo); +} + +/** + * @tc.name: AnimationDomTest005 + * @tc.desc: Animation JS api parse + * @tc.type: FUNC + * @tc.require: AR000DQ20K + * @tc.author: jiachunhui + */ +HWTEST_F(AnimationDomTest, AnimationDomTest005, TestSize.Level1) +{ + /** + * @tc.steps: step1. parse the param of options. + */ + int32_t iterations = 0; + std::unordered_map animationDoubleOptions; + std::unordered_map animationStringOptions; + JsParseAnimationOptions(OPTIONS_TEST, iterations, animationDoubleOptions, animationStringOptions); + + /** + * @tc.steps: step2. get the params from the map. + */ + auto easing = animationStringOptions.find(DOM_ANIMATION_EASING)->second; + auto fill = animationStringOptions.find(DOM_ANIMATION_FILL)->second; + auto duration = animationDoubleOptions.find(DOM_ANIMATION_DURATION_API)->second; + auto delay = animationDoubleOptions.find(DOM_ANIMATION_DELAY_API)->second; + + /** + * @tc.steps: step3. Judge whether the parameter resolution is successful. + * @tc.expected: step3. The value of the params are as expected. + */ + EXPECT_EQ(ANIMATION_ITERATIONS_DEFAULT, iterations); + EXPECT_EQ(ANIMATION_DURATIONS_DEFAULT, duration); + EXPECT_EQ(ANIMATION_DELAY_DEFAULT, delay); + EXPECT_EQ(ANIMATION_EASING_DEFAULT, easing); + EXPECT_EQ(ANIMATION_FILL_DEFAULT, fill); +} + +/** + * @tc.name: AnimationDomTest006 + * @tc.desc: Serial animation JS api parse + * @tc.type: FUNC + * @tc.require: AR000DQ2V6 + * @tc.author: jiangdayuan + */ +HWTEST_F(AnimationDomTest, AnimationDomTest006, TestSize.Level1) +{ + /** + * @tc.steps: step1. parse the param. + */ + std::vector> animationFrames; + JsParseAnimationFrames(NO_OFFSET_TEST, animationFrames); + + /** + * @tc.steps: step2. get the params from the map. + */ + auto heightForm = animationFrames[0].find(DOM_ANIMATION_HEIGHT)->second; + auto offsetFrom = animationFrames[0].find(DOM_ANIMATION_OFFSET)->second; + auto heightTo = animationFrames[1].find(DOM_ANIMATION_HEIGHT)->second; + auto offsetTo = animationFrames[1].find(DOM_ANIMATION_OFFSET)->second; + + /** + * @tc.steps: step3. Judge whether the parameter resolution is successful. + * @tc.expected: step3. The value of the params are as expected. + */ + EXPECT_EQ(ANIMATION_HEIGHT_DEFAULT, heightForm); + EXPECT_EQ(ANIMATION_OFFSET_FROM, offsetFrom); + EXPECT_EQ(ANIMATION_HEIGHT_DEFAULT, heightTo); + EXPECT_EQ(ANIMATION_OFFSET_TO, offsetTo); +} + +/** + * @tc.name: AnimationDomTest007 + * @tc.desc: Serial animation JS api parse + * @tc.type: FUNC + * @tc.require: AR000DQ20O + * @tc.author: jiangdayuan + */ +HWTEST_F(AnimationDomTest, AnimationDomTest007, TestSize.Level1) +{ + /** + * @tc.steps: step1. parse the param. + */ + std::vector> animationFrames; + JsParseAnimationFrames(MULTI_ANIMATION_TEST, animationFrames); + + /** + * @tc.steps: step2. get the params from the map. + */ + auto heightForm = animationFrames[0].find(DOM_ANIMATION_HEIGHT)->second; + auto opacityFrom = animationFrames[0].find(DOM_ANIMATION_OPACITY)->second; + auto offsetFrom = animationFrames[0].find(DOM_ANIMATION_OFFSET)->second; + auto heightMiddle = animationFrames[1].find(DOM_ANIMATION_HEIGHT)->second; + auto opacityMiddle = animationFrames[1].find(DOM_ANIMATION_OPACITY)->second; + auto offsetMiddle = animationFrames[1].find(DOM_ANIMATION_OFFSET)->second; + auto heightTo = animationFrames[2].find(DOM_ANIMATION_HEIGHT)->second; + auto opacityTo = animationFrames[2].find(DOM_ANIMATION_OPACITY)->second; + auto offsetTo = animationFrames[2].find(DOM_ANIMATION_OFFSET)->second; + + /** + * @tc.steps: step3. Judge whether the parameter resolution is successful. + * @tc.expected: step3. The value of the params are as expected. + */ + EXPECT_EQ(ANIMATION_HEIGHT_DEFAULT, heightForm); + EXPECT_EQ(ANIMATION_OPACITY_DEFAULT, opacityFrom); + EXPECT_EQ(ANIMATION_OFFSET_FROM, offsetFrom); + EXPECT_EQ(ANIMATION_HEIGHT_DEFAULT, heightMiddle); + EXPECT_EQ(ANIMATION_OPACITY_DEFAULT, opacityMiddle); + EXPECT_EQ(ANIMATION_OFFSET_MIDDLE, offsetMiddle); + EXPECT_EQ(ANIMATION_HEIGHT_DEFAULT, heightTo); + EXPECT_EQ(ANIMATION_OPACITY_DEFAULT, opacityTo); + EXPECT_EQ(ANIMATION_OFFSET_TO, offsetTo); +} + +/** + * @tc.name: AnimationDomTest008 + * @tc.desc: Serial animation JS api parse + * @tc.type: FUNC + * @tc.require: AR000DQ20P + * @tc.author: jiangdayuan + */ +HWTEST_F(AnimationDomTest, AnimationDomTest008, TestSize.Level1) +{ + /** + * @tc.steps: step1. parse the param. + */ + std::vector> animationFrames; + JsParseAnimationFrames(SERIAL_ANIMATION_TEST, animationFrames); + + /** + * @tc.steps: step2. get the params from the map. + */ + auto heightForm = animationFrames[0].find(DOM_ANIMATION_HEIGHT)->second; + auto offsetFrom = animationFrames[0].find(DOM_ANIMATION_OFFSET)->second; + auto heightMiddle = animationFrames[1].find(DOM_ANIMATION_HEIGHT)->second; + auto offsetMiddle = animationFrames[1].find(DOM_ANIMATION_OFFSET)->second; + auto heightTo = animationFrames[2].find(DOM_ANIMATION_HEIGHT)->second; + auto offsetTo = animationFrames[2].find(DOM_ANIMATION_OFFSET)->second; + + /** + * @tc.steps: step3. Judge whether the parameter resolution is successful. + * @tc.expected: step3. The value of the params are as expected. + */ + EXPECT_EQ(ANIMATION_HEIGHT_DEFAULT, heightForm); + EXPECT_EQ(ANIMATION_OFFSET_FROM, offsetFrom); + EXPECT_EQ(ANIMATION_HEIGHT_DEFAULT, heightMiddle); + EXPECT_EQ(ANIMATION_OFFSET_MIDDLE, offsetMiddle); + EXPECT_EQ(ANIMATION_HEIGHT_DEFAULT, heightTo); + EXPECT_EQ(ANIMATION_OFFSET_TO, offsetTo); +} + +/** + * @tc.name: AnimationDomTest009 + * @tc.desc: Serial animation JS api parse + * @tc.type: FUNC + * @tc.require: AR000DQ20Q + * @tc.author: jiangdayuan + */ +HWTEST_F(AnimationDomTest, AnimationDomTest009, TestSize.Level1) +{ + /** + * @tc.steps: step1. parse the param. + */ + std::vector> animationFrames; + JsParseAnimationFrames(HEIGHT_WIDTH_TEST, animationFrames); + + /** + * @tc.steps: step2. get the params from the map. + */ + auto heightForm = animationFrames[0].find(DOM_ANIMATION_HEIGHT)->second; + auto offsetFrom = animationFrames[0].find(DOM_ANIMATION_OFFSET)->second; + auto heightTo = animationFrames[1].find(DOM_ANIMATION_HEIGHT)->second; + auto offsetTo = animationFrames[1].find(DOM_ANIMATION_OFFSET)->second; + + /** + * @tc.steps: step3. Judge whether the parameter resolution is successful. + * @tc.expected: step3. The value of the params are as expected. + */ + EXPECT_EQ(ANIMATION_HEIGHT_DEFAULT, heightForm); + EXPECT_EQ(ANIMATION_OFFSET_FROM, offsetFrom); + EXPECT_EQ(ANIMATION_HEIGHT_DEFAULT, heightTo); + EXPECT_EQ(ANIMATION_OFFSET_TO, offsetTo); +} + +/** + * @tc.name: AnimationDomTest010 + * @tc.desc: Serial animation JS api parse + * @tc.type: FUNC + * @tc.require: AR000DQ20Q + * @tc.author: jiangdayuan + */ +HWTEST_F(AnimationDomTest, AnimationDomTest010, TestSize.Level1) +{ + /** + * @tc.steps: step1. parse the param. + */ + std::vector> animationFrames; + JsParseAnimationFrames(SERIAL_TRANSFORM_TEST, animationFrames); + + /** + * @tc.steps: step2. get the params from the map. + */ + auto transformScaleForm = animationFrames[0].find(SCALE)->second; + auto transformTranslateForm = animationFrames[0].find(DOM_TRANSLATE)->second; + auto offsetFrom = animationFrames[0].find(DOM_ANIMATION_OFFSET)->second; + + auto transformScaleTo = animationFrames[1].find(SCALE)->second; + auto transformTranslateTo = animationFrames[1].find(DOM_TRANSLATE)->second; + auto offsetTo = animationFrames[1].find(DOM_ANIMATION_OFFSET)->second; + + /** + * @tc.steps: step3. Judge whether the parameter resolution is successful. + * @tc.expected: step3. The value of the params are as expected. + */ + EXPECT_EQ(TRANSFORM_SCALE_DEFAULT_FROM, transformScaleForm); + EXPECT_EQ(TRANSFORM_TRANSLATE_DEFAULT_FROM, transformTranslateForm); + EXPECT_EQ(ANIMATION_OFFSET_FROM, offsetFrom); + + EXPECT_EQ(TRANSFORM_SCALE_DEFAULT_TO, transformScaleTo); + EXPECT_EQ(TRANSFORM_TRANSLATE_DEFAULT_TO, transformTranslateTo); + EXPECT_EQ(ANIMATION_OFFSET_TO, offsetTo); +} + +/** + * @tc.name: AnimationDomTest011 + * @tc.desc: Serial animation JS api parse + * @tc.type: FUNC + * @tc.require: AR000DQ20Q + * @tc.author: jiangdayuan + */ +HWTEST_F(AnimationDomTest, AnimationDomTest011, TestSize.Level1) +{ + /** + * @tc.steps: step1. parse the param. + */ + std::vector> animationFrames; + JsParseAnimationFrames(ERROR_OFFSET_TEST, animationFrames); + + /** + * @tc.steps: step2. get the params from the map. + */ + auto heightForm = animationFrames[0].find(DOM_ANIMATION_HEIGHT)->second; + auto offsetFrom = animationFrames[0].find(DOM_ANIMATION_OFFSET)->second; + + auto heightMiddle = animationFrames[1].find(DOM_ANIMATION_HEIGHT)->second; + auto offsetMiddle = animationFrames[1].find(DOM_ANIMATION_OFFSET)->second; + + auto heightTo = animationFrames[2].find(DOM_ANIMATION_HEIGHT)->second; + auto offsetTo = animationFrames[2].find(DOM_ANIMATION_OFFSET)->second; + + /** + * @tc.steps: step3. Judge whether the parameter resolution is successful. + * @tc.expected: step3. The value of the params are as expected. + */ + EXPECT_EQ(ANIMATION_HEIGHT_DEFAULT, heightForm); + EXPECT_EQ(ANIMATION_OFFSET_FROM, offsetFrom); + + EXPECT_EQ(ANIMATION_HEIGHT_DEFAULT, heightMiddle); + EXPECT_EQ(ANIMATION_OFFSET_MIDDLE, offsetMiddle); + + EXPECT_EQ(ANIMATION_HEIGHT_DEFAULT, heightTo); + EXPECT_EQ(ANIMATION_OFFSET_TO, offsetTo); +} + +/** + * @tc.name: AnimationDomTest012 + * @tc.desc: backgroundPosition parse + * @tc.type: FUNC + * @tc.require: AR000FL0U9 + * @tc.author: zhouzebin + */ +HWTEST_F(AnimationDomTest, AnimationDomTest012, TestSize.Level1) +{ + /** + * @tc.steps: step1. parse the param. + * @tc.expected: step2. The value of the params are as expected. + */ + BackgroundImagePosition backgroundImagePosition; + EXPECT_TRUE(ParseBackgroundImagePosition("10% 20%", backgroundImagePosition)); + EXPECT_EQ(10, backgroundImagePosition.GetSizeValueX()); + EXPECT_EQ(BackgroundImagePositionType::PERCENT, backgroundImagePosition.GetSizeTypeX()); + EXPECT_EQ(20, backgroundImagePosition.GetSizeValueY()); + EXPECT_EQ(BackgroundImagePositionType::PERCENT, backgroundImagePosition.GetSizeTypeY()); +} + +/** + * @tc.name: AnimationDomTest013 + * @tc.desc: backgroundPosition parse + * @tc.type: FUNC + * @tc.require: AR000FL0U9 + * @tc.author: zhouzebin + */ +HWTEST_F(AnimationDomTest, AnimationDomTest013, TestSize.Level1) +{ + /** + * @tc.steps: step1. parse the param. + * @tc.expected: step2. The value of the params are as expected. + */ + BackgroundImagePosition backgroundImagePosition; + EXPECT_TRUE(ParseBackgroundImagePosition("10%", backgroundImagePosition)); + EXPECT_EQ(10, backgroundImagePosition.GetSizeValueX()); + EXPECT_EQ(BackgroundImagePositionType::PERCENT, backgroundImagePosition.GetSizeTypeX()); + EXPECT_EQ(50, backgroundImagePosition.GetSizeValueY()); + EXPECT_EQ(BackgroundImagePositionType::PERCENT, backgroundImagePosition.GetSizeTypeY()); + + /** + * @tc.steps: step3. parse the param. + * @tc.expected: step4. The value of the params are as expected. + */ + EXPECT_TRUE(ParseBackgroundImagePosition("10% 100px", backgroundImagePosition)); + EXPECT_EQ(10, backgroundImagePosition.GetSizeValueX()); + EXPECT_EQ(BackgroundImagePositionType::PERCENT, backgroundImagePosition.GetSizeTypeX()); + EXPECT_EQ(100, backgroundImagePosition.GetSizeValueY()); + EXPECT_EQ(BackgroundImagePositionType::PX, backgroundImagePosition.GetSizeTypeY()); + + /** + * @tc.steps: step5. parse the param. + * @tc.expected: step6. The value of the params are as expected. + */ + EXPECT_TRUE(ParseBackgroundImagePosition(" 30px 45% ", backgroundImagePosition)); + EXPECT_EQ(30, backgroundImagePosition.GetSizeValueX()); + EXPECT_EQ(BackgroundImagePositionType::PX, backgroundImagePosition.GetSizeTypeX()); + EXPECT_EQ(45, backgroundImagePosition.GetSizeValueY()); + EXPECT_EQ(BackgroundImagePositionType::PERCENT, backgroundImagePosition.GetSizeTypeY()); +} + +/** + * @tc.name: AnimationDomTest014 + * @tc.desc: backgroundPosition parse + * @tc.type: FUNC + * @tc.require: AR000FL0U9 + * @tc.author: zhouzebin + */ +HWTEST_F(AnimationDomTest, AnimationDomTest014, TestSize.Level1) +{ + BackgroundImagePosition backgroundImagePosition; + /** + * @tc.steps: step1. parse the param. + * @tc.expected: step2. The value of the params are as expected. + */ + EXPECT_TRUE(ParseBackgroundImagePosition("left", backgroundImagePosition)); + EXPECT_EQ(0, backgroundImagePosition.GetSizeValueX()); + EXPECT_EQ(BackgroundImagePositionType::PERCENT, backgroundImagePosition.GetSizeTypeX()); + EXPECT_EQ(50, backgroundImagePosition.GetSizeValueY()); + EXPECT_EQ(BackgroundImagePositionType::PERCENT, backgroundImagePosition.GetSizeTypeY()); + + /** + * @tc.steps: step3. parse the param. + * @tc.expected: step4. The value of the params are as expected. + */ + EXPECT_TRUE(ParseBackgroundImagePosition("bottom", backgroundImagePosition)); + EXPECT_EQ(50, backgroundImagePosition.GetSizeValueX()); + EXPECT_EQ(BackgroundImagePositionType::PERCENT, backgroundImagePosition.GetSizeTypeX()); + EXPECT_EQ(100, backgroundImagePosition.GetSizeValueY()); + EXPECT_EQ(BackgroundImagePositionType::PERCENT, backgroundImagePosition.GetSizeTypeY()); + + /** + * @tc.steps: step5. parse the param. + * @tc.expected: step6. The value of the params are as expected. + */ + EXPECT_TRUE(ParseBackgroundImagePosition("right bottom", backgroundImagePosition)); + EXPECT_EQ(100, backgroundImagePosition.GetSizeValueX()); + EXPECT_EQ(BackgroundImagePositionType::PERCENT, backgroundImagePosition.GetSizeTypeX()); + EXPECT_EQ(100, backgroundImagePosition.GetSizeValueY()); + EXPECT_EQ(BackgroundImagePositionType::PERCENT, backgroundImagePosition.GetSizeTypeY()); + + /** + * @tc.steps: step7. parse the param. + * @tc.expected: step8. The value of the params are as expected. + */ + EXPECT_TRUE(ParseBackgroundImagePosition("bottom right", backgroundImagePosition)); + EXPECT_EQ(100, backgroundImagePosition.GetSizeValueX()); + EXPECT_EQ(BackgroundImagePositionType::PERCENT, backgroundImagePosition.GetSizeTypeX()); + EXPECT_EQ(100, backgroundImagePosition.GetSizeValueY()); + EXPECT_EQ(BackgroundImagePositionType::PERCENT, backgroundImagePosition.GetSizeTypeY()); + + /** + * @tc.steps: step9. parse the param. + * @tc.expected: step10. The value of the params are as expected. + */ + EXPECT_TRUE(ParseBackgroundImagePosition("center 50px", backgroundImagePosition)); + EXPECT_EQ(50, backgroundImagePosition.GetSizeValueX()); + EXPECT_EQ(BackgroundImagePositionType::PERCENT, backgroundImagePosition.GetSizeTypeX()); + EXPECT_EQ(50, backgroundImagePosition.GetSizeValueY()); + EXPECT_EQ(BackgroundImagePositionType::PX, backgroundImagePosition.GetSizeTypeY()); + + /** + * @tc.steps: step11. parse the param. + * @tc.expected: step12. The value of the params are as expected. + */ + EXPECT_TRUE(ParseBackgroundImagePosition("70px bottom", backgroundImagePosition)); + EXPECT_EQ(70, backgroundImagePosition.GetSizeValueX()); + EXPECT_EQ(BackgroundImagePositionType::PX, backgroundImagePosition.GetSizeTypeX()); + EXPECT_EQ(100, backgroundImagePosition.GetSizeValueY()); + EXPECT_EQ(BackgroundImagePositionType::PERCENT, backgroundImagePosition.GetSizeTypeY()); +} + +/** + * @tc.name: AnimationDomCurveTest002 + * @tc.desc: Animation JS api parse + * @tc.type: FUNC + * @tc.require: AR000DQ2SB + * @tc.author: jiachunhui + */ +HWTEST_F(AnimationDomTest, AnimationDomCurveTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. parse the param of anticipate curve. + */ + int32_t iterations = 0; + std::unordered_map animationDoubleOptions; + std::unordered_map animationStringOptions; + JsParseAnimationOptions(ANTICIPATE_CURVE_TEST, iterations, animationDoubleOptions, animationStringOptions); + + /** + * @tc.steps: step2. get the params from the map. + */ + auto easing = animationStringOptions.find(DOM_ANIMATION_EASING)->second; + + /** + * @tc.steps: step3. Judge whether the parameter resolution is successful. + * @tc.expected: step3. The value of the params are as expected. + */ + EXPECT_EQ(ANIMATION_EASING_ANTICIPATE, easing); +} + +/** + * @tc.name: AnimationDomCurveTest003 + * @tc.desc: Animation JS api parse + * @tc.type: FUNC + * @tc.require: AR000DQ1VC + * @tc.author: jiachunhui + */ +HWTEST_F(AnimationDomTest, AnimationDomCurveTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. parse the param of cubic curve. + */ + int32_t iterations = 0; + std::unordered_map animationDoubleOptions; + std::unordered_map animationStringOptions; + JsParseAnimationOptions(CUBIC_CURVE_TEST, iterations, animationDoubleOptions, animationStringOptions); + + /** + * @tc.steps: step2. get the params from the map. + */ + auto easing = animationStringOptions.find(DOM_ANIMATION_EASING)->second; + + /** + * @tc.steps: step3. Judge whether the parameter resolution is successful. + * @tc.expected: step3. The value of the params are as expected. + */ + EXPECT_EQ(ANIMATION_EASING_CUBIC, easing); +} + +/** + * @tc.name: AnimationDomCurveTest004 + * @tc.desc: Animation steps parse check + * @tc.type: FUNC + * @tc.require: AR000DQ1VC + * @tc.author: zhouzebin + */ +HWTEST_F(AnimationDomTest, AnimationDomCurveTest004, TestSize.Level1) +{ + /** + * @tc.steps: step1. parse the param of steps curve. + * @tc.expected: step1. steps curve parsed success. + */ + auto curve = AceType::DynamicCast(CreateCurve("steps(2, start)")); + EXPECT_EQ(curve->MoveInternal(0.0), 0.5); +} + +} diff --git a/frameworks/bridge/test/unittest/jsfrontend/codec/BUILD.gn b/frameworks/bridge/test/unittest/jsfrontend/codec/BUILD.gn new file mode 100644 index 00000000..f8bc982a --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/codec/BUILD.gn @@ -0,0 +1,60 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/frameworkbasicability/apigroup" + +ohos_unittest("GroupMessageCodecTest") { + module_out_path = module_output_path + + sources = [ + "$ace_root/frameworks/bridge/codec/byte_buffer_operator.cpp", + "$ace_root/frameworks/bridge/codec/byte_buffer_operator.h", + "$ace_root/frameworks/bridge/codec/codec_data.h", + "$ace_root/frameworks/bridge/codec/function_call.h", + "$ace_root/frameworks/bridge/codec/function_codec.h", + "$ace_root/frameworks/bridge/codec/message_codec.h", + "$ace_root/frameworks/bridge/codec/standard_codec_buffer_operator.cpp", + "$ace_root/frameworks/bridge/codec/standard_codec_buffer_operator.h", + "$ace_root/frameworks/bridge/codec/standard_function_codec.cpp", + "$ace_root/frameworks/bridge/codec/standard_function_codec.h", + "group_message_codec_test.cpp", + ] + + configs = [ "$ace_root:ace_test_config" ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_domnode_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":GroupMessageCodecTest" ] +} diff --git a/frameworks/bridge/test/unittest/jsfrontend/codec/group_message_codec_test.cpp b/frameworks/bridge/test/unittest/jsfrontend/codec/group_message_codec_test.cpp new file mode 100644 index 00000000..97d49283 --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/codec/group_message_codec_test.cpp @@ -0,0 +1,498 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/log/log.h" +#include "frameworks/bridge/codec/codec_data.h" +#include "frameworks/bridge/codec/function_call.h" +#include "frameworks/bridge/codec/standard_function_codec.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace::Framework { +namespace { + +const std::string FUNCTION_NAME_VALUE = "getInfo"; +const std::string FUNCTION_PARA_STRING_VALUE = "onePara"; +const int32_t FUNCTION_PARA_INT_VALUE = 100; +const std::vector FUNCTION_PARA_INT8_ARRAY = { 127, 0, 100 }; +const std::vector INT8_ARRAY_ENCODE_RESULT = { 22, 7, 0, 0, 0, 103, 101, 116, 73, 110, 102, 111, + 1, 25, 3, 0, 0, 0, 127, 0, 100 }; +const std::vector FUNCTION_PARA_INT16_ARRAY = { 32767, 0, 100 }; +const std::vector INT16_ARRAY_ENCODE_RESULT = { 22, 7, 0, 0, 0, 103, 101, 116, 73, 110, 102, 111, + 1, 26, 3, 0, 0, 0, 255, 127, 0, 0, 100, 0 }; +const std::vector FUNCTION_PARA_INT32_ARRAY = { 2147483647, 0, 100 }; +const std::vector INT32_ARRAY_ENCODE_RESULT = { 22, 7, 0, 0, 0, 103, 101, 116, 73, 110, 102, 111, + 1, 27, 3, 0, 0, 0, 255, 255, 255, 127, 0, 0, 0, 0, 100, 0, 0, 0 }; +const std::set FUNCTION_PARA_SET = { "1", "2", "3" }; +const std::vector SET_ENCODE_RESULT = { 22, 7, 0, 0, 0, 103, 101, 116, 73, 110, 102, 111, + 1, 24, 3, 0, 0, 0, 1, 0, 0, 0, 49, 1, 0, 0, 0, 50, 1, 0, 0, 0, 51 }; +const std::map FUNCTION_PARA_MAP = { { "1", "value1" }, { "2", "value2" } }; +const std::vector MAP_ENCODE_RESULT = { 22, 7, 0, 0, 0, 103, 101, 116, 73, 110, 102, 111, + 1, 23, 2, 0, 0, 0, 1, 0, 0, 0, 49, 6, 0, 0, 0, 118, 97, 108, 117, 101, 49, 1, 0, 0, 0, 50, 6, + 0, 0, 0, 118, 97, 108, 117, 101, 50 }; + +} // namespace + +class GroupMessageCodecTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); +}; + +void GroupMessageCodecTest::SetUpTestCase() {} +void GroupMessageCodecTest::TearDownTestCase() {} +void GroupMessageCodecTest::SetUp() {} +void GroupMessageCodecTest::TearDown() {} + +/** + * @tc.name: PrimitiveTypeCodecTest001 + * @tc.desc: Encode a function with one null para to binary, then decode and check decode result. + * @tc.type: FUNC + * @tc.require: AR000DB9T1 + * @tc.author: laoyitong + */ +HWTEST_F(GroupMessageCodecTest, PrimitiveTypeCodecTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Prepare FunctionCall instance & test data:NULL. + * @tc.expected: step1. test data is NULL. + */ + std::vector args; + CodecData arg1; + ASSERT_TRUE(arg1.IsNull()); + args.push_back(arg1); + FunctionCall functionCall(FUNCTION_NAME_VALUE, args); + + /** + * @tc.steps: step2. Prepare codec instance & encode the function call. + */ + std::vector encodeBuf; + StandardFunctionCodec codec; + codec.EncodeFunctionCall(functionCall, encodeBuf); + + /** + * @tc.steps: step3. Decode the binary to FunctionCall, check function Name & para type and value. + * @tc.expected: step3. check function name & para type and value. + */ + FunctionCall result; + codec.DecodeFunctionCall(encodeBuf, result); + ASSERT_EQ(FUNCTION_NAME_VALUE, result.GetFuncName()); + std::vector resultArgs = result.GetArgs(); + ASSERT_TRUE(resultArgs[0].IsNull()); +} + +/** + * @tc.name: PrimitiveTypeCodecTest002 + * @tc.desc: Encode a function with one True para to binary, then decode and check decode result. + * @tc.type: FUNC + * @tc.require: AR000DB9T1 + * @tc.author: laoyitong + */ +HWTEST_F(GroupMessageCodecTest, PrimitiveTypeCodecTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Prepare FunctionCall instance & test data:True. + * @tc.expected: step1. test data is True. + */ + std::vector args; + CodecData arg1(true); + ASSERT_TRUE(arg1.IsBool()); + ASSERT_TRUE(arg1.GetBoolValue()); + args.push_back(arg1); + FunctionCall functionCall(FUNCTION_NAME_VALUE, args); + + /** + * @tc.steps: step2. Prepare codec instance & encode the function call. + */ + std::vector encodeBuf; + StandardFunctionCodec codec; + codec.EncodeFunctionCall(functionCall, encodeBuf); + + /** + * @tc.steps: step3. Decode the binary to FunctionCall, check function Name & para type and value. + * @tc.expected: step3. check function name & para type and value. + */ + FunctionCall result; + codec.DecodeFunctionCall(encodeBuf, result); + ASSERT_EQ(FUNCTION_NAME_VALUE, result.GetFuncName()); + std::vector resultArgs = result.GetArgs(); + ASSERT_TRUE(resultArgs[0].IsBool()); + ASSERT_TRUE(resultArgs[0].GetBoolValue()); +} + +/** + * @tc.name: PrimitiveTypeCodecTest003 + * @tc.desc: Encode a function with one False para to binary, then decode and check decode result. + * @tc.type: FUNC + * @tc.require: AR000DB9T1 + * @tc.author: laoyitong + */ +HWTEST_F(GroupMessageCodecTest, PrimitiveTypeCodecTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. Prepare FunctionCall instance & test data:False. + * @tc.expected: step1. test data is False. + */ + std::vector args; + CodecData arg1(false); + ASSERT_TRUE(arg1.IsBool()); + ASSERT_FALSE(arg1.GetBoolValue()); + args.push_back(arg1); + FunctionCall functionCall(FUNCTION_NAME_VALUE, args); + + /** + * @tc.steps: step2. Prepare codec instance & encode the function call. + */ + std::vector encodeBuf; + StandardFunctionCodec codec; + codec.EncodeFunctionCall(functionCall, encodeBuf); + + /** + * @tc.steps: step3. Decode the binary to FunctionCall, check function Name & para type and value. + * @tc.expected: step3. check function name & para type and value. + */ + FunctionCall result; + codec.DecodeFunctionCall(encodeBuf, result); + ASSERT_EQ(FUNCTION_NAME_VALUE, result.GetFuncName()); + std::vector resultArgs = result.GetArgs(); + ASSERT_TRUE(resultArgs[0].IsBool()); + ASSERT_FALSE(resultArgs[0].GetBoolValue()); +} + +/** + * @tc.name: PrimitiveTypeCodecTest004 + * @tc.desc: Encode a function with one int para to binary, then decode and check decode result. + * @tc.type: FUNC + * @tc.require: AR000DB9T1 + * @tc.author: laoyitong + */ +HWTEST_F(GroupMessageCodecTest, PrimitiveTypeCodecTest004, TestSize.Level1) +{ + /** + * @tc.steps: step1. Prepare FunctionCall instance & test data 100(int). + * @tc.expected: step1. test data is 100. + */ + std::vector args; + CodecData arg1(FUNCTION_PARA_INT_VALUE); + ASSERT_TRUE(arg1.IsInt()); + args.push_back(arg1); + FunctionCall functionCall(FUNCTION_NAME_VALUE, args); + + /** + * @tc.steps: step2. Prepare codec instance & encode the function call. + */ + std::vector encodeBuf; + StandardFunctionCodec codec; + codec.EncodeFunctionCall(functionCall, encodeBuf); + + /** + * @tc.steps: step3. Decode the binary to FunctionCall, check function Name & para type and value. + * @tc.expected: step3. check function name & para type and value. + */ + FunctionCall result; + codec.DecodeFunctionCall(encodeBuf, result); + ASSERT_EQ(FUNCTION_NAME_VALUE, result.GetFuncName()); + std::vector resultArgs = result.GetArgs(); + ASSERT_TRUE(resultArgs[0].IsInt()); + ASSERT_EQ(FUNCTION_PARA_INT_VALUE, resultArgs[0].GetIntValue()); +} + +/** + * @tc.name: PrimitiveTypeCodecTest005 + * @tc.desc: Encode a function with one String para to binary, then decode and check decode result. + * @tc.type: FUNC + * @tc.require: AR000DB9T1 + * @tc.author: laoyitong + */ +HWTEST_F(GroupMessageCodecTest, PrimitiveTypeCodecTest005, TestSize.Level1) +{ + /** + * @tc.steps: step1. Prepare FunctionCall instance & test data 'onePara'. + * @tc.expected: step1. test data is 'onePara'. + */ + std::vector args; + CodecData arg1(FUNCTION_PARA_STRING_VALUE); + ASSERT_TRUE(arg1.IsString()); + args.push_back(arg1); + FunctionCall functionCall(FUNCTION_NAME_VALUE, args); + + /** + * @tc.steps: step2. Prepare codec instance & encode the function call. + */ + std::vector encodeBuf; + StandardFunctionCodec codec; + codec.EncodeFunctionCall(functionCall, encodeBuf); + + /** + * @tc.steps: step3. Decode the binary to FunctionCall, check function Name & para type and value. + * @tc.expected: step3. check function name & para type and value. + */ + FunctionCall result; + codec.DecodeFunctionCall(encodeBuf, result); + ASSERT_EQ(FUNCTION_NAME_VALUE, result.GetFuncName()); + std::vector resultArgs = result.GetArgs(); + ASSERT_TRUE(resultArgs[0].IsString()); + ASSERT_EQ(FUNCTION_PARA_STRING_VALUE, resultArgs[0].GetStringValue()); +} + +/** + * @tc.name: PrimitiveTypeCodecTest006 + * @tc.desc: Encode a function with int8 array para to binary and check the encode result, + * then decode and check decode result. + * @tc.type: FUNC + * @tc.require: AR000DB9T1 + * @tc.author: laoyitong + */ +HWTEST_F(GroupMessageCodecTest, PrimitiveTypeCodecTest006, TestSize.Level1) +{ + /** + * @tc.steps: step1. Prepare FunctionCall instance & test data . + */ + CodecData arg1(FUNCTION_PARA_INT8_ARRAY); + std::vector args; + args.push_back(arg1); + FunctionCall functionCall(FUNCTION_NAME_VALUE, args); + + /** + * @tc.steps: step2. Prepare codec instance & encode the function call. + * @tc.expected: step2. encode data equals to prepared binary data. + */ + std::vector encodeBuf; + StandardFunctionCodec codec; + codec.EncodeFunctionCall(functionCall, encodeBuf); + for (size_t idx = 0; idx < encodeBuf.size(); idx++) { + ASSERT_EQ(encodeBuf.at(idx), INT8_ARRAY_ENCODE_RESULT.at(idx)); + } + + /** + * @tc.steps: step3. Decode the binary to FunctionCall, check function Name & para type and value. + * @tc.expected: step3. check function name & para type and value. + */ + FunctionCall result; + codec.DecodeFunctionCall(encodeBuf, result); + ASSERT_EQ(FUNCTION_NAME_VALUE, result.GetFuncName()); + std::vector resultArgs = result.GetArgs(); + ASSERT_EQ(resultArgs[0].GetType(), BufferDataType::TYPE_INT8_ARRAY); + + std::vector data = resultArgs[0].GetInt8ArrayValue(); + for (size_t idx = 0; idx < data.size(); idx++) { + ASSERT_EQ(data.at(idx), FUNCTION_PARA_INT8_ARRAY[idx]); + } +} + +/** + * @tc.name: PrimitiveTypeCodecTest007 + * @tc.desc: Encode a function with int8 array para to binary and check the encode result ,then decode and check decode + * result. + * @tc.type: FUNC + * @tc.require: AR000DB9T1 + * @tc.author: laoyitong + */ +HWTEST_F(GroupMessageCodecTest, PrimitiveTypeCodecTest007, TestSize.Level1) +{ + /** + * @tc.steps: step1. Prepare FunctionCall instance & test data . + */ + CodecData arg1(FUNCTION_PARA_INT16_ARRAY); + + std::vector args; + args.push_back(arg1); + FunctionCall functionCall(FUNCTION_NAME_VALUE, args); + + /** + * @tc.steps: step2. Prepare codec instance & encode the function call. + * @tc.expected: step2. encode data equals to prepared binary data. + */ + std::vector encodeBuf; + StandardFunctionCodec codec; + codec.EncodeFunctionCall(functionCall, encodeBuf); + + for (size_t idx = 0; idx < encodeBuf.size(); idx++) { + ASSERT_EQ(encodeBuf.at(idx), INT16_ARRAY_ENCODE_RESULT.at(idx)); + } + + /** + * @tc.steps: step3. Decode the binary to FunctionCall, check function Name & para type and value. + * @tc.expected: step3. check function name & para type and value. + */ + FunctionCall result; + codec.DecodeFunctionCall(encodeBuf, result); + ASSERT_EQ(FUNCTION_NAME_VALUE, result.GetFuncName()); + std::vector resultArgs = result.GetArgs(); + ASSERT_EQ(resultArgs[0].GetType(), BufferDataType::TYPE_INT16_ARRAY); + + std::vector data = resultArgs[0].GetInt16ArrayValue(); + for (size_t idx = 0; idx < data.size(); idx++) { + ASSERT_EQ(data.at(idx), FUNCTION_PARA_INT16_ARRAY.at(idx)); + } +} + +/** + * @tc.name: PrimitiveTypeCodecTest008 + * @tc.desc: Encode a function with int8 array para to binary and check the encode result ,then decode and check decode + * result. + * @tc.type: FUNC + * @tc.require: AR000DB9T1 + * @tc.author: laoyitong + */ +HWTEST_F(GroupMessageCodecTest, PrimitiveTypeCodecTest008, TestSize.Level1) +{ + /** + * @tc.steps: step1. Prepare FunctionCall instance & test data . + */ + CodecData arg1(FUNCTION_PARA_INT32_ARRAY); + std::vector args; + args.push_back(arg1); + FunctionCall functionCall(FUNCTION_NAME_VALUE, args); + + /** + * @tc.steps: step2. Prepare codec instance & encode the function call. + * @tc.expected: step2. encode data equals to prepared binary data. + */ + std::vector encodeBuf; + StandardFunctionCodec codec; + codec.EncodeFunctionCall(functionCall, encodeBuf); + for (size_t idx = 0; idx < encodeBuf.size(); idx++) { + ASSERT_EQ(encodeBuf.at(idx), INT32_ARRAY_ENCODE_RESULT.at(idx)); + } + + /** + * @tc.steps: step3. Decode the binary to FunctionCall, check function Name & para type and value. + * @tc.expected: step3. check function name & para type and value. + */ + FunctionCall result; + codec.DecodeFunctionCall(encodeBuf, result); + ASSERT_EQ(FUNCTION_NAME_VALUE, result.GetFuncName()); + std::vector resultArgs = result.GetArgs(); + ASSERT_EQ(resultArgs[0].GetType(), BufferDataType::TYPE_INT32_ARRAY); + + std::vector data = resultArgs[0].GetInt32ArrayValue(); + for (size_t idx = 0; idx < data.size(); idx++) { + ASSERT_EQ(data.at(idx), FUNCTION_PARA_INT32_ARRAY.at(idx)); + } +} + +/** + * @tc.name: PrimitiveTypeCodecTest009 + * @tc.desc: Encode a function with int8 array para to binary and check the encode result ,then decode and check decode + * @tc.type: FUNC + * @tc.require: AR000DB9T1 + * @tc.author: laoyitong + */ +HWTEST_F(GroupMessageCodecTest, PrimitiveTypeCodecTest009, TestSize.Level1) +{ + /** + * @tc.steps: step1. Prepare FunctionCall instance & test data . + */ + CodecData arg1(FUNCTION_PARA_SET); + std::vector args; + args.push_back(arg1); + FunctionCall functionCall(FUNCTION_NAME_VALUE, args); + + /** + * @tc.steps: step2. Prepare codec instance & encode the function call. + * @tc.expected: step2. encode data equals to prepared binary data. + */ + std::vector encodeBuf; + StandardFunctionCodec codec; + codec.EncodeFunctionCall(functionCall, encodeBuf); + std::vector::iterator encodeIter = encodeBuf.begin(); + std::vector::const_iterator encodeIter1 = SET_ENCODE_RESULT.begin(); + + while (encodeIter != encodeBuf.end()) { + ASSERT_EQ(*encodeIter, *encodeIter1); + encodeIter++; + encodeIter1++; + } + + /** + * @tc.steps: step3. Decode the binary to FunctionCall, check function Name & para type and value. + * @tc.expected: step3. check function name & para type and value. + */ + FunctionCall result; + codec.DecodeFunctionCall(encodeBuf, result); + std::vector resultArgs = result.GetArgs(); + std::set data = resultArgs[0].GetSetValue(); + std::set::iterator iter = data.begin(); + std::set::iterator iter1 = FUNCTION_PARA_SET.begin(); + + while (iter != data.end()) { + ASSERT_EQ(*iter, *iter1); + iter++; + iter1++; + } +} + +/** + * @tc.name: PrimitiveTypeCodecTest010 + * @tc.desc: Encode a function with int8 array para to binary and check the encode result ,then decode and check decode + * @tc.type: FUNC + * @tc.require: AR000DB9T1 + * @tc.author: laoyitong + */ +HWTEST_F(GroupMessageCodecTest, PrimitiveTypeCodecTest010, TestSize.Level1) +{ + /** + * @tc.steps: step1. Prepare FunctionCall instance & test data . + */ + CodecData arg1(FUNCTION_PARA_MAP); + std::vector args; + args.push_back(arg1); + FunctionCall functionCall(FUNCTION_NAME_VALUE, args); + + /** + * @tc.steps: step2. Prepare codec instance & encode the function call. + * @tc.expected: step2. encode data equals to prepared binary data. + */ + std::vector encodeBuf; + StandardFunctionCodec codec; + codec.EncodeFunctionCall(functionCall, encodeBuf); + std::vector::iterator encodeIter = encodeBuf.begin(); + std::vector::const_iterator encodeIter1 = MAP_ENCODE_RESULT.begin(); + + while (encodeIter != encodeBuf.end()) { + ASSERT_EQ(*encodeIter, *encodeIter1); + encodeIter++; + encodeIter1++; + } + + /** + * @tc.steps: step3. Decode the binary to FunctionCall, check function Name & para type and value. + * @tc.expected: step3. check function name & para type and value. + */ + FunctionCall result; + codec.DecodeFunctionCall(encodeBuf, result); + ASSERT_EQ(FUNCTION_NAME_VALUE, result.GetFuncName()); + std::vector resultArgs = result.GetArgs(); + ASSERT_EQ(resultArgs[0].GetType(), BufferDataType::TYPE_MAP); + + std::map data = resultArgs[0].GetMapValue(); + std::map::iterator iter = data.begin(); + std::map::const_iterator iter1 = FUNCTION_PARA_MAP.begin(); + + while (iter != data.end()) { + ASSERT_EQ(iter->first, iter1->first); + ASSERT_EQ(iter->second, iter1->second); + iter++; + iter1++; + } +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/test/unittest/jsfrontend/dom_mock.h b/frameworks/bridge/test/unittest/jsfrontend/dom_mock.h new file mode 100644 index 00000000..aa433872 --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/dom_mock.h @@ -0,0 +1,126 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_TEST_UNITTEST_JSFRONTEND_DOM_MOCK_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_TEST_UNITTEST_JSFRONTEND_DOM_MOCK_H + +#include "core/common/frontend.h" +#include "core/common/platform_window.h" +#include "core/common/window.h" +#include "core/pipeline/pipeline_context.h" + +namespace OHOS::Ace::Framework { + +class MockPlatformWindow : public PlatformWindow { +public: + MockPlatformWindow() = default; + ~MockPlatformWindow() override = default; + + // Request next vsync. + void RequestFrame() override {}; + + // Register Vsync callback. + void RegisterVsyncCallback(AceVsyncCallback&& callback) override {}; + + // Attach root render node to container + void SetRootRenderNode(const RefPtr& root) override {}; +}; + +class MockFrontend : public Frontend { +public: + MockFrontend() = default; + ~MockFrontend() override = default; + + bool Initialize(FrontendType type, const RefPtr& taskExecutor) override + { + return false; + } + + RefPtr GetPage(int32_t pageId) const override + { + return nullptr; + } + + RefPtr GetEventHandler() override + { + return nullptr; + } + + const WindowConfig& GetWindowConfig() const override + { + return windowConfig_; + } + + FrontendType GetType() override + { + return FrontendType::JS; + } + + bool OnBackPressed() override + { + return false; + } + + bool OnStartContinuation() override + { + return false; + } + + bool IsForeground() override + { + return false; + } + + RefPtr GetAccessibilityManager() const override + { + return nullptr; + } + + bool OnRestoreData(const std::string& data) override + { + return false; + } + + void AttachPipelineContext(const RefPtr& context) override {} + void SetAssetManager(const RefPtr& assetManager) override {} + void DumpFrontend() const override {} + void AddPage(const RefPtr& page) override {} + void RunPage(int32_t pageId, const std::string& content, const std::string& params) override {} + void PushPage(const std::string& content, const std::string& params) override {} + void UpdateState(State state) override {} + void SendCallbackMessage(const std::string& callbackId, const std::string& data) const override {} + void SetJsMessageDispatcher(const RefPtr& transfer) const override {} + void TransferComponentResponseData(int32_t callbackId, int32_t code, std::vector&& data) const override {} + void TransferJsResponseData(int32_t callbackId, int32_t code, std::vector&& data) const override {} + void TransferJsPluginGetError(int32_t callbackId, int32_t errorCode, std::string&& errorMessage) const override {} + void TransferJsEventData(int32_t callbackId, int32_t code, std::vector&& data) const override {} + void LoadPluginJsCode(std::string&& jsCode) const override {} + void OnShow() override {} + void OnHide() override {} + void OnActive() override {} + void OnInactive() override {} + void OnCompleteContinuation(int32_t code) override {} + void OnSaveData(std::string& data) override {} + void OnNewRequest(const std::string& data) override {} + void CallRouterBack() override {} + void OnSurfaceChanged(int32_t width, int32_t height) override {} + +private: + WindowConfig windowConfig_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_TEST_UNITTEST_JSFRONTEND_DOM_MOCK_H diff --git a/frameworks/bridge/test/unittest/jsfrontend/dom_node_factory.cpp b/frameworks/bridge/test/unittest/jsfrontend/dom_node_factory.cpp new file mode 100644 index 00000000..bda9f3dc --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/dom_node_factory.cpp @@ -0,0 +1,300 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/bridge/test/unittest/jsfrontend/dom_node_factory.h" + +#include + +#include "gtest/gtest.h" + +#include "base/json/json_util.h" +#include "base/log/log.h" +#include "base/utils/utils.h" +#include "frameworks/bridge/common/dom/dom_document.h" +#include "frameworks/bridge/test/unittest/jsfrontend/dom_mock.h" +#include "frameworks/bridge/test/unittest/jsfrontend/dom_test_constants.h" + +namespace OHOS::Ace::Framework { +namespace { + +const std::map&> DOMSTYLELIST = { + { DOM_NODE_TAG_DIV, DIV_STYLE_LIST }, + { DOM_NODE_TAG_TEXT, TEXT_STYLE_LIST }, + { DOM_NODE_TAG_PROGRESS, PROGRESS_STYLE_LIST }, + { DOM_NODE_TAG_SLIDER, SLIDER_STYLE_LIST }, + { DOM_NODE_TAG_SWIPER, SWIPER_STYLE_LIST }, + { DOM_NODE_TAG_REFRESH, REFRESH_STYLE_LIST }, + { DOM_NODE_TAG_IMAGE, IMAGE_STYLE_LIST }, + { DOM_NODE_TAG_SPAN, SPAN_STYLE_LIST }, + { DOM_NODE_TAG_VIDEO, VIDEO_STYLE_LIST }, + { DOM_NODE_TAG_RATING, RATING_STYLE_LIST }, + { DOM_NODE_TAG_MARQUEE, MARQUEE_STYLE_LIST }, + { DOM_NODE_TAG_TEXTAREA, TEXTAREA_STYLE_LIST }, + { DOM_NODE_TAG_POPUP, POPUP_STYLE_LIST }, + { DOM_NODE_TAG_LIST, LIST_STYLE_LIST }, + { DOM_NODE_TAG_INPUT, INPUT_STYLE_LIST }, + { DOM_NODE_TAG_LABEL, TEXT_STYLE_LIST }, + { DOM_NODE_TAG_DIVIDER, DIVIDER_STYLE_LIST }, + { DOM_NODE_TAG_SWITCH, SWITCH_STYLE_LIST }, + { DOM_NODE_TAG_BUTTON, BUTTON_STYLE_LIST }, + { DOM_NODE_TAG_SEARCH, SEARCH_STYLE_LIST }, +}; + +const std::map> DOMATTRLIST = { + { DOM_NODE_TAG_PROGRESS, PROGRESS_ATTR_LIST }, + { DOM_NODE_TAG_SLIDER, SLIDER_ATTR_LIST }, + { DOM_NODE_TAG_SWIPER, SWIPER_ATTR_LIST }, + { DOM_NODE_TAG_SWITCH, SWITCH_ATTR_LIST }, + { DOM_NODE_TAG_TEXT, TEXT_ATTR_LIST }, + { DOM_NODE_TAG_SVG_TEXT, SVG_TEXT_ATTR_LIST }, + { DOM_NODE_TAG_TEXT_PATH, SVG_TEXT_PATH_ATTR_LIST}, + { DOM_NODE_TAG_TSPAN, SVG_TSPAN_ATTR_LIST}, + { DOM_NODE_TAG_IMAGE, IMAGE_ATTR_LIST }, + { DOM_NODE_TAG_SPAN, SPAN_ATTR_LIST }, + { DOM_NODE_TAG_TABS, TABS_ATTR_LIST }, + { DOM_NODE_TAG_TAB_BAR, TABBAR_ATTR_LIST }, + { DOM_NODE_TAG_TAB_CONTENT, TABCONTENT_ATTR_LIST }, + { DOM_NODE_TAG_REFRESH, REFRESH_ATTR_LIST }, + { DOM_NODE_TAG_VIDEO, VIDEO_ATTR_LIST }, + { DOM_NODE_TAG_RATING, RATING_ATTR_LIST }, + { DOM_NODE_TAG_MARQUEE, MARQUEE_ATTR_LIST }, + { DOM_NODE_TAG_TEXTAREA, TEXTAREA_ATTR_LIST }, + { DOM_NODE_TAG_POPUP, POPUP_ATTR_LIST }, + { DOM_NODE_TAG_LIST, LIST_ATTR_LIST }, + { DOM_NODE_TAG_INPUT, INPUT_ATTR_LIST }, + { DOM_NODE_TAG_LABEL, LABEL_ATTR_LIST }, + { DOM_NODE_TAG_BUTTON, BUTTON_ATTR_LIST }, + { DOM_NODE_TAG_DIVIDER, DIVIDER_ATTR_LIST }, + { DOM_NODE_TAG_SEARCH, SEARCH_ATTR_LIST }, + { DOM_NODE_TAG_IMAGE_ANIMATOR, IMAGE_ANIMATOR_ATTR_LIST }, + { DOM_NODE_TAG_PIECE, PIECE_ATTR_LIST }, + { DOM_NODE_TAG_DIV, DIV_ATTR_LIST }, + { DOM_NODE_TAG_SVG, SVG_ATTR_LIST }, + { DOM_NODE_TAG_RECT, SVG_RECT_ATTR_LIST }, + { DOM_NODE_TAG_CIRCLE, SVG_CIRCLE_ATTR_LIST }, + { DOM_NODE_TAG_ELLIPSE, SVG_ELLIPSE_ATTR_LIST }, + { DOM_NODE_TAG_PATH, SVG_PATH_ATTR_LIST }, + { DOM_NODE_TAG_LINE, SVG_LINE_ATTR_LIST }, + { DOM_NODE_TAG_POLYLINE, SVG_POLYLINE_ATTR_LIST }, + { DOM_NODE_TAG_POLYGON, SVG_POLYGON_ATTR_LIST }, + { DOM_NODE_TAG_ANIMATE, SVG_ANIMATE_ATTR_LIST }, + { DOM_NODE_TAG_ANIMATE_MOTION, SVG_ANIMATE_MOTION_ATTR_LIST }, +}; +const std::map> DOMEVENTLIST = { + { DOM_NODE_TAG_SWIPER, SWIPER_EVENT_LIST }, + { DOM_NODE_TAG_SLIDER, SLIDER_EVENT_LIST }, + { DOM_NODE_TAG_SWITCH, SWITCH_EVENT_LIST }, + { DOM_NODE_TAG_IMAGE, IMAGE_EVENT_LIST }, + { DOM_NODE_TAG_VIDEO, VIDEO_EVENT_LIST }, + { DOM_NODE_TAG_REFRESH, REFRESH_EVENT_LIST }, + { DOM_NODE_TAG_RATING, RATING_EVENT_LIST }, + { DOM_NODE_TAG_MARQUEE, MARQUEE_EVENT_LIST }, + { DOM_NODE_TAG_TEXTAREA, TEXTAREA_EVENT_LIST }, + { DOM_NODE_TAG_POPUP, POPUP_EVENT_LIST }, + { DOM_NODE_TAG_INPUT, INPUT_EVENT_LIST }, + { DOM_NODE_TAG_SEARCH, SEARCH_EVENT_LIST }, + { DOM_NODE_TAG_PIECE, PIECE_EVENT_LIST }, +}; + +std::unique_ptr ParseJsonString(const std::string& jsonValue) +{ + return JsonUtil::ParseJsonString(jsonValue); +} + +RefPtr CreateDomNode(const JsonValue& componentValue, int32_t nodeId) +{ + if (!componentValue.Contains(DOM_TAG)) { + LOGE("not have tag field."); + return nullptr; + } + + auto typeValue = componentValue.GetValue(DOM_TAG); + std::string type = typeValue->GetString(); + return DOMNodeFactory::GetInstance().GetDocument()->CreateNodeWithId(type, nodeId); +} + +void AppendChildNode(const JsonValue& jsonValue, const RefPtr& parentNode) +{ + NodeId nodeId = parentNode->GetNodeId() + 1; + if (!jsonValue.IsArray()) { + auto child = CreateDomNode(jsonValue, nodeId); + parentNode->AddNode(child); + return; + } + + int32_t arraySize = jsonValue.GetArraySize(); + for (int32_t index = 0; index < arraySize; ++index, nodeId++) { + auto item = jsonValue.GetArrayItem(index); + auto child = CreateDomNode(*item, nodeId); + parentNode->AddNode(child); + if (jsonValue.Contains(CHILD_TAG)) { + const auto childValue = jsonValue.GetValue(CHILD_TAG); + if (childValue != nullptr) { + AppendChildNode(*childValue, child); + } + } + } +} + +void SetStyleFromJson(const std::string& jsonStr, const RefPtr& domNode) +{ + auto domJson = ParseJsonString(jsonStr); + std::vector> styles; + if (domJson->Contains(COMMON_STYLE)) { + const auto commonStyleValue = domJson->GetValue(COMMON_STYLE); + int32_t size = commonStyleValue->GetArraySize(); + for (int32_t index = 0; index < size; index++) { + auto item = commonStyleValue->GetArrayItem(index); + for (const auto& commonStyle : COMMON_STYLE_LIST) { + if (item->Contains(commonStyle)) { + styles.emplace_back(commonStyle, item->GetValue(commonStyle)->GetString()); + break; + } + } + } + } + std::string type = domJson->GetValue(DOM_TAG)->GetString(); + if (DOMSTYLELIST.find(type) == DOMSTYLELIST.end()) { + LOGD("json file not define style for %s", type.c_str()); + } else { + const std::vector styleList = DOMSTYLELIST.find(type)->second; + if (domJson->Contains(DOM_STYLE)) { + const auto styleValue = domJson->GetValue(DOM_STYLE); + int32_t size = styleValue->GetArraySize(); + for (int32_t index = 0; index < size; index++) { + auto item = styleValue->GetArrayItem(index); + for (const auto& style : styleList) { + if (item->Contains(style)) { + styles.emplace_back(style, item->GetValue(style)->GetString()); + break; + } + } + } + } + } + domNode->SetStyle(styles); +} + +void SetAttrFromJson(const std::string& jsonStr, const RefPtr& domNode) +{ + auto domJson = ParseJsonString(jsonStr); + std::string type = domJson->GetValue(DOM_TAG)->GetString(); + if (DOMATTRLIST.find(type) == DOMATTRLIST.end()) { + LOGD("json file not define attribute for %s", type.c_str()); + return; + } + const std::vector attrList = DOMATTRLIST.find(type)->second; + std::vector> attrs; + if (domJson->Contains(DOM_ATTR)) { + const auto attrValue = domJson->GetValue(DOM_ATTR); + int32_t size = attrValue->GetArraySize(); + for (int32_t index = 0; index < size; index++) { + auto item = attrValue->GetArrayItem(index); + for (const auto& attr : attrList) { + if (item->Contains(attr)) { + attrs.emplace_back(attr, item->GetValue(attr)->GetString()); + break; + } + } + } + } + domNode->SetAttr(attrs); +} + +void SetEventFromJson(const std::string& jsonStr, const RefPtr& domNode) +{ + auto domJson = ParseJsonString(jsonStr); + std::vector events; + if (domJson->Contains(COMMON_EVENT)) { + const auto commonEventValue = domJson->GetValue(COMMON_EVENT); + int32_t size = commonEventValue->GetArraySize(); + for (int32_t index = 0; index < size; index++) { + auto itemStr = commonEventValue->GetArrayItem(index)->GetString(); + auto eventIter = std::find_if(std::begin(COMMON_EVENT_LIST), std::end(COMMON_EVENT_LIST), + [itemStr](const std::string& commonEvent) { return itemStr == commonEvent; }); + if (eventIter != std::end(COMMON_EVENT_LIST)) { + events.emplace_back(*eventIter); + } + } + } + std::string type = domJson->GetValue(DOM_TAG)->GetString(); + if (DOMEVENTLIST.find(type) == DOMEVENTLIST.end()) { + LOGD("json file not define event for %s", type.c_str()); + } else { + const std::vector eventList = DOMEVENTLIST.find(type)->second; + if (domJson->Contains(DOM_EVENT)) { + const auto eventValue = domJson->GetValue(DOM_EVENT); + int32_t size = eventValue->GetArraySize(); + for (int32_t index = 0; index < size; index++) { + auto item = eventValue->GetArrayItem(index); + if (!item->IsString()) { + continue; + } + + auto itemStr = item->GetString(); + auto eventIter = std::find_if(std::begin(eventList), std::end(eventList), + [itemStr](const std::string& event) { return itemStr == event; }); + if (eventIter != std::end(COMMON_EVENT_LIST)) { + events.emplace_back(*eventIter); + } + } + } + } + domNode->AddEvent(PAGE_ID, events); +} + +} // namespace + +DOMNodeFactory::DOMNodeFactory() = default; +DOMNodeFactory::~DOMNodeFactory() = default; + +RefPtr DOMNodeFactory::CreateDOMNodeFromDsl(const std::string& jsonStr) +{ + auto domJson = ParseJsonString(jsonStr); + auto typeValue = domJson->GetValue(DOM_TAG); + std::string type = typeValue->GetString(); + document_ = AceType::MakeRefPtr(DOM_ROOT_NODE_ID_BASE); + RefPtr domNodeRoot = document_->CreateNodeWithId(type, DOM_ROOT_NODE_ID_BASE); + + if (!context_) { + auto frontend = AceType::MakeRefPtr(); + auto platformWindow = std::make_unique(); + auto window = std::make_unique(std::move(platformWindow)); + context_ = AceType::MakeRefPtr(std::move(window), nullptr, nullptr, nullptr, frontend, 0); + } + + domNodeRoot->SetPipelineContext(context_); + domNodeRoot->InitializeStyle(); + SetAttrFromJson(jsonStr, domNodeRoot); + SetStyleFromJson(jsonStr, domNodeRoot); + SetEventFromJson(jsonStr, domNodeRoot); + domNodeRoot->GenerateComponentNode(); + + if (domJson->Contains(CHILD_TAG)) { + const auto childValue = domJson->GetValue(CHILD_TAG); + if (childValue != nullptr) { + AppendChildNode(*childValue, domNodeRoot); + } + } + return domNodeRoot; +} + +RefPtr DOMNodeFactory::GetBoxChildComponent(const RefPtr& domNode) +{ + RefPtr boxComponent = domNode->GetBoxComponent(); + return boxComponent; +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/test/unittest/jsfrontend/dom_node_factory.h b/frameworks/bridge/test/unittest/jsfrontend/dom_node_factory.h new file mode 100644 index 00000000..b99af7cb --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/dom_node_factory.h @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_TEST_UNITTEST_JSFRONTEND_DOM_NODE_FACTORY_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_TEST_UNITTEST_JSFRONTEND_DOM_NODE_FACTORY_H + +#include + +#include "base/memory/referenced.h" +#include "base/utils/noncopyable.h" +#include "base/utils/singleton.h" +#include "frameworks/bridge/common/dom/dom_document.h" +#include "frameworks/bridge/common/dom/dom_node.h" + +namespace OHOS::Ace::Framework { + +// DOMNodeFactory is for create a DOMNode using dsl data. +class DOMNodeFactory : public Singleton { + DECLARE_SINGLETON(DOMNodeFactory); + ACE_DISALLOW_MOVE(DOMNodeFactory); + +public: + RefPtr CreateDOMNodeFromDsl(const std::string& jsonStr); + RefPtr GetBoxChildComponent(const RefPtr& domNode); + const RefPtr GetDocument() + { + return document_; + } + +private: + RefPtr document_; + RefPtr context_; +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_TEST_UNITTEST_JSFRONTEND_DOM_NODE_FACTORY_H diff --git a/frameworks/bridge/test/unittest/jsfrontend/dom_test_constants.h b/frameworks/bridge/test/unittest/jsfrontend/dom_test_constants.h new file mode 100644 index 00000000..352ac501 --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/dom_test_constants.h @@ -0,0 +1,764 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_BRIDGE_TEST_UNITTEST_JSFRONTEND_DOM_TEST_CONSTANTS_H +#define FOUNDATION_ACE_FRAMEWORKS_BRIDGE_TEST_UNITTEST_JSFRONTEND_DOM_TEST_CONSTANTS_H + +#include + +#include "frameworks/bridge/common/dom/dom_type.h" + +namespace OHOS::Ace::Framework { + +const std::string CHILD_TAG = "child"; +const std::string COMMON_EVENT = "commonEvent"; +const std::string COMMON_STYLE = "commonStyle"; +const std::string DOM_ATTR = "attr"; +const std::string DOM_EVENT = "event"; +const std::string DOM_STYLE = "style"; +const std::string DOM_TAG = "tag"; +constexpr int32_t PAGE_ID = 1; + +// common style list +const std::vector COMMON_STYLE_LIST = { + DOM_WIDTH, + DOM_HEIGHT, + DOM_PADDING_TOP, + DOM_PADDING_RIGHT, + DOM_PADDING_BOTTOM, + DOM_PADDING_LEFT, + DOM_MARGIN_TOP, + DOM_MARGIN_RIGHT, + DOM_MARGIN_BOTTOM, + DOM_MARGIN_LEFT, + DOM_BACKGROUND_COLOR, + DOM_FLEX_DIRECTION, + DOM_FLEX_ROW, + DOM_FLEX_COLUMN, + DOM_FLEX, + DOM_FLEX_GROW, + DOM_FLEX_SHRINK, + DOM_FLEX_BASIS, + DOM_BORDER_TOP_WIDTH, + DOM_BORDER_RIGHT_WIDTH, + DOM_BORDER_BOTTOM_WIDTH, + DOM_BORDER_LEFT_WIDTH, + DOM_BORDER_STYLE, + DOM_BORDER_TOP_COLOR, + DOM_BORDER_RIGHT_COLOR, + DOM_BORDER_BOTTOM_COLOR, + DOM_BORDER_LEFT_COLOR, + DOM_BORDER_TOP_LEFT_RADIUS, + DOM_BORDER_TOP_RIGHT_RADIUS, + DOM_BORDER_BOTTOM_LEFT_RADIUS, + DOM_BORDER_BOTTOM_RIGHT_RADIUS, + DOM_BACKGROUND_COLOR, + DOM_BACKGROUND_IMAGE, + DOM_BACKGROUND_IMAGE_SIZE, + DOM_BACKGROUND_IMAGE_POSITION, + DOM_BACKGROUND_IMAGE_REPEAT, + DOM_FOCUSABLE, + DOM_FLEX_WEIGHT, + DOM_BOX_SHADOW_H, + DOM_BOX_SHADOW_V, + DOM_BOX_SHADOW_BLUR, + DOM_BOX_SHADOW_SPREAD, + DOM_BOX_SHADOW_COLOR, + DOM_FILTER, + DOM_BACKDROP_FILTER, + DOM_TRANSITION_EFFECT, + DOM_WINDOW_FILTER, + DOM_TRANSFORM_ORIGIN, +}; + +// common event list +const std::vector COMMON_EVENT_LIST = { + DOM_TOUCH_START, + DOM_TOUCH_MOVE, + DOM_TOUCH_CANCEL, + DOM_TOUCH_END, + DOM_CLICK, + DOM_LONG_PRESS, + DOM_FOCUS, + DOM_BLUR, + DOM_KEY +}; + +// div node style list +const std::vector DIV_STYLE_LIST = { + DOM_DISPLAY, + DOM_GRID_TEMPLATE_COLUMNS, + DOM_GRID_TEMPLATE_ROWS, + DOM_GRID_COLUMN_GAP, + DOM_GRID_ROW_GAP, + DOM_GRID_COLUMN_START, + DOM_GRID_COLUMN_END, + DOM_GRID_ROW_START, + DOM_GRID_ROW_END, + DOM_FLEX_DIRECTION, + DOM_JUSTIFY_CONTENT, + DOM_ALIGN_ITEMS, +}; + +// image node attribute list +const std::vector IMAGE_ATTR_LIST = { + DOM_SRC, + DOM_IMAGE_ALT, +}; + +// image node style list +const std::vector IMAGE_STYLE_LIST = { + DOM_IMAGE_FIT, +}; + +// image node event list +const std::vector IMAGE_EVENT_LIST = { + DOM_ERROR, + DOM_COMPLETE, +}; + +// imageanimator node attribute list +const std::vector IMAGE_ANIMATOR_ATTR_LIST = { + DOM_IMAGES, + DOM_ITERATION, + DOM_REVERSE, + DOM_FIXEDSIZE, +}; + +// text node style list +const std::vector TEXT_STYLE_LIST = { + DOM_TEXT_MAX_LINES, + DOM_TEXT_COLOR, + DOM_TEXT_LETTER_SPACING, + DOM_TEXT_FONT_SIZE, + DOM_TEXT_FONT_STYLE, + DOM_TEXT_FONT_WEIGHT, + DOM_TEXT_DECORATION, + DOM_TEXT_ALIGN, + DOM_TEXT_LINE_HEIGHT, + DOM_TEXT_OVERFLOW, + DOM_TEXT_FONT_FAMILY, + DOM_TEXT_LINES, + DOM_TEXT_MIN_FONT_SIZE, + DOM_TEXT_MAX_FONT_SIZE, + DOM_TEXT_FONT_SIZE_STEP, + DOM_TEXT_PREFER_FONT_SIZES, +}; + +// text node attribute list +const std::vector TEXT_ATTR_LIST = { + DOM_VALUE, +}; + +// svg text node attribute list +const std::vector SVG_TEXT_ATTR_LIST = { + DOM_VALUE, + DOM_SVG_X, + DOM_SVG_Y, + DOM_SVG_DX, + DOM_SVG_DY, + DOM_SVG_ROTATE, + DOM_SVG_TEXT_LENGTH, + DOM_SVG_LENGTH_ADJUST, + DOM_SVG_STROKE, + DOM_SVG_STROKE_OPACITY, + DOM_SVG_STROKE_WIDTH, + DOM_SVG_FONT_SIZE, + DOM_SVG_FILL, + DOM_SVG_FILL_OPACITY, +}; + +// svg textpath node attribute list +const std::vector SVG_TEXT_PATH_ATTR_LIST = { + DOM_VALUE, + DOM_SVG_ATTR_PATH, + DOM_SVG_START_OFFSET, + DOM_SVG_TEXT_LENGTH, + DOM_SVG_LENGTH_ADJUST, + DOM_SVG_STROKE, + DOM_SVG_STROKE_OPACITY, + DOM_SVG_STROKE_WIDTH, + DOM_SVG_FONT_SIZE, + DOM_SVG_FILL, + DOM_SVG_FILL_OPACITY, +}; + +// svg tspan node attribute list +const std::vector SVG_TSPAN_ATTR_LIST = { + DOM_VALUE, + DOM_SVG_X, + DOM_SVG_Y, + DOM_SVG_DX, + DOM_SVG_DY, + DOM_SVG_ROTATE, + DOM_SVG_TEXT_LENGTH, + DOM_SVG_LENGTH_ADJUST, + DOM_SVG_STROKE, + DOM_SVG_STROKE_OPACITY, + DOM_SVG_STROKE_WIDTH, + DOM_SVG_FONT_SIZE, + DOM_SVG_FILL, + DOM_SVG_FILL_OPACITY, +}; + +// progress node style and attribute list +const std::vector PROGRESS_STYLE_LIST = { + DOM_PROGRESS_COLOR, + DOM_PROGRESS_STROKE_WIDTH, +}; + +const std::vector PROGRESS_ATTR_LIST = { + DOM_PROGRESS_TYPE, + DOM_PROGRESS_PERCENT, + DOM_PROGRESS_SECONDARY_PERCENT, +}; + +// slider node style and attribute list +const std::vector SLIDER_ATTR_LIST = { + DOM_MIN, + DOM_MAX, + DOM_STEP, + DOM_VALUE, + DOM_SHOW_TIPS, + DOM_SHOW_STEPS, + DOM_SLIDER_MODE, +}; +const std::vector SLIDER_STYLE_LIST = { + DOM_COLOR, + DOM_SELECTED_COLOR, + DOM_BLOCK_COLOR, + DOM_PADDING_LEFT, + DOM_PADDING_RIGHT, +}; +const std::vector SLIDER_EVENT_LIST = { + DOM_CHANGE, +}; +// swiper node style and attribute list +const std::vector SWIPER_ATTR_LIST = { + DOM_INDEX, + DOM_AUTOPLAY, + DOM_INTERVAL, + DOM_INDICATOR, + DOM_LOOP, + DOM_DURATION, + DOM_VERTICAL, +}; +const std::vector SWIPER_STYLE_LIST = { + DOM_INDICATOR_COLOR, + DOM_INDICATOR_SELECTEDCOLOR, + DOM_INDICATOR_SIZE, + DOM_INDICATOR_TOP, + DOM_INDICATOR_LEFT, + DOM_INDICATOR_RIGHT, + DOM_INDICATOR_BOTTOM, +}; +const std::vector SWIPER_EVENT_LIST = { + DOM_CHANGE, +}; + +// refresh node style and attribute list +const std::vector REFRESH_ATTR_LIST = { + DOM_REFRESH_OFFSET, + DOM_REFRESH_REFRESHING, + DOM_REFRESH_TYPE, + DOM_REFRESH_LASTTIME, +}; + +const std::vector REFRESH_STYLE_LIST = { + DOM_REFRESH_BACKGROUND_COLOR, + DOM_REFRESH_PROGRESS_COLOR, +}; + +const std::vector REFRESH_EVENT_LIST = { + DOM_REFRESH, +}; + +// switch node attribute, style and event list +const std::vector SWITCH_ATTR_LIST = { + DOM_CHECKED, + DOM_DISABLED, + DOM_SHOW_TEXT, + DOM_TEXT_ON, + DOM_TEXT_OFF, +}; +const std::vector SWITCH_STYLE_LIST = { + DOM_TEXT_FONT_SIZE, + DOM_TEXT_FONT_WEIGHT, + DOM_TEXT_FONT_FAMILY, + DOM_TEXT_DECORATION, + DOM_TEXT_LETTER_SPACING, + DOM_TEXT_FONT_STYLE, + DOM_TEXT_PADDING, + DOM_TEXT_ON_COLOR, + DOM_TEXT_OFF_COLOR, + DOM_TRACK_COLOR_ON, + DOM_TRACK_COLOR_OFF, +}; +const std::vector SWITCH_EVENT_LIST = { + DOM_CHANGE +}; + +// span node style list +const std::vector SPAN_STYLE_LIST = { + DOM_TEXT_COLOR, + DOM_TEXT_FONT_SIZE, + DOM_TEXT_FONT_STYLE, + DOM_TEXT_FONT_WEIGHT, + DOM_TEXT_DECORATION, + DOM_TEXT_FONT_FAMILY, +}; + +// span node attribute list +const std::vector SPAN_ATTR_LIST = { + DOM_VALUE, +}; + +// popup node attribute list +const std::vector POPUP_ATTR_LIST = { + DOM_TARGET, + DOM_PLACEMENT, +}; + +// popup node style list +const std::vector POPUP_STYLE_LIST = { + DOM_MASK_COLOR, +}; + +// popup node event list +const std::vector POPUP_EVENT_LIST = { + DOM_VISIBILITY_CHANGE, +}; + +// list node attribute list +const std::vector LIST_ATTR_LIST = { + DOM_SCROLL_EFFECT, + DOM_SCROLL_SCROLLBAR, + DOM_SCROLL_SHAPE_MODE, + DOM_LIST_UPDATE_EFFECT, +}; + +// list node style list +const std::vector LIST_STYLE_LIST = { + DOM_FADE_COLOR, + DOM_LIST_ITEM_EXTENT, +}; + +// tabs node attribute list +const std::vector TABS_ATTR_LIST = { + TAB_INDEX, + TAB_IS_VERTICAL, +}; + +// tab-bar node attribute list +const std::vector TABBAR_ATTR_LIST = { + DOM_TAB_BAR_MODE, +}; + +// tab-content node attribute list +const std::vector TABCONTENT_ATTR_LIST = { + DOM_TAB_CONTENT_SCROLLABEL, +}; + +// video node attribute, style and event list +const std::vector VIDEO_ATTR_LIST = { + DOM_VIDEO_MUTED, + DOM_VIDEO_SRC, + DOM_VIDEO_AUTOPLAY, + DOM_VIDEO_POSTER, + DOM_VIDEO_CONTROLS, +}; +const std::vector VIDEO_STYLE_LIST = { + DOM_VIDEO_FIT, +}; +const std::vector VIDEO_EVENT_LIST = { + DOM_VIDEO_EVENT_PREPARED, + DOM_VIDEO_EVENT_START, + DOM_VIDEO_EVENT_PAUSE, + DOM_VIDEO_EVENT_FINISH, + DOM_VIDEO_EVENT_ERROR, + DOM_VIDEO_EVENT_SEEKING, + DOM_VIDEO_EVENT_SEEKED, + DOM_VIDEO_EVENT_TIMEUPDATE, + DOM_VIDEO_EVENT_FULLSCREENCHANGE, +}; +const std::vector RATING_ATTR_LIST = { + DOM_STAR_NUM, + DOM_RATING_SCORE, + DOM_RATING_STEP, + DOM_RATING_INDICATOR, +}; +const std::vector RATING_STYLE_LIST = { + DOM_BACKGROUND_SRC, + DOM_FOREGROUND_SRC, + DOM_SECONDARY_SRC, + DOM_WIDTH, + DOM_HEIGHT, +}; +const std::vector RATING_EVENT_LIST = { + DOM_CHANGE, +}; + +// marquee node attribute, style and event list +const std::vector MARQUEE_ATTR_LIST = { + DOM_MARQUEE_VALUE, + DOM_MARQUEE_LOOP, + DOM_MARQUEE_SCROLL_AMOUNT, + DOM_MARQUEE_DIRECTION, +}; +const std::vector MARQUEE_STYLE_LIST = { + DOM_MARQUEE_COLOR, + DOM_MARQUEE_FONT_SIZE, + DOM_MARQUEE_FONT_WEIGHT, + DOM_MARQUEE_FONT_FAMILY, +}; +const std::vector MARQUEE_EVENT_LIST = { + DOM_MARQUEE_EVENT_BOUNCE, + DOM_MARQUEE_EVENT_FINISH, + DOM_MARQUEE_EVENT_START, +}; + +// textarea node style list +const std::vector TEXTAREA_STYLE_LIST = { + DOM_TEXTAREA_COLOR, + DOM_TEXTAREA_FONT_SIZE, + DOM_TEXTAREA_FONT_WEIGHT, + DOM_TEXTAREA_PLACEHOLDER_COLOR, + DOM_TEXTAREA_FONT_FAMILY, + DOM_TEXTAREA_CURSOR_COLOR, +}; + +// textarea node attribute list +const std::vector TEXTAREA_ATTR_LIST = { + DOM_DISABLED, + DOM_TEXTAREA_OBSCURE, + DOM_TEXTAREA_VALUE, + DOM_TEXTAREA_PLACEHOLDER, + DOM_TEXTAREA_MAXLENGTH, + DOM_TEXTAREA_MAXLINES, + DOM_TEXTAREA_OBSCURE, + DOM_TEXTAREA_EXTEND, + DOM_ICON_SRC, +}; + +// textarea node event list +const std::vector TEXTAREA_EVENT_LIST = { + DOM_CHANGE, +}; + +// input node style list +const std::vector INPUT_STYLE_LIST = { + DOM_INPUT_COLOR, + DOM_INPUT_FONT_SIZE, + DOM_INPUT_FONT_WEIGHT, + DOM_INPUT_CURSOR_COLOR, + DOM_INPUT_PLACEHOLDER_COLOR, + DOM_INPUT_WIDTH, + DOM_INPUT_HEIGHT, + DOM_INPUT_FONT_FAMILY, + DOM_INPUT_RECT_RADIUS, + DOM_INPUT_BACKGROUND_COLOR, + DOM_INPUT_CLICKED_COLOR, + DOM_INPUT_DISABLE_COLOR, + DOM_INPUT_FOCUS_COLOR, +}; + +// input node attribute list +const std::vector INPUT_ATTR_LIST = { + DOM_DISABLED, + DOM_INPUT_TYPE, + DOM_INPUT_CHECKED, + DOM_INPUT_NAME, + DOM_INPUT_VALUE, + DOM_INPUT_PLACEHOLDER, + DOM_INPUT_MAXLENGTH, + DOM_INPUT_ENTERKEYTYPE, + DOM_INPUT_OBSCURE, + DOM_INPUT_AUTO_FOCUS, + DOM_ICON_SRC, +}; + +// input node event list +const std::vector INPUT_EVENT_LIST = { + DOM_CHANGE, + DOM_CLICK, + DOM_FOCUS, + DOM_INPUT_EVENT_NAME, + DOM_INPUT_EVENT_VALUE, + DOM_INPUT_EVENT_CHECKED, + DOM_INPUT_EVENT_ENTERKEYCLICK, +}; + +// label node attribute list +const std::vector LABEL_ATTR_LIST = { + DOM_VALUE, + DOM_TARGET, +}; + +// input node style list +const std::vector DIVIDER_STYLE_LIST = { + DOM_DIVIDER_STROKE_WIDTH, + DIVIDER_COLOR, + DOM_DIVIDER_LINE_CAP, +}; + +// input node attribute list +const std::vector DIVIDER_ATTR_LIST = { + DOM_DIVIDER_VERTICAL, +}; + +// button node attribute list +const std::vector BUTTON_ATTR_LIST = { + DOM_DISABLED, + DOM_BUTTON_TYPE, + DOM_BUTTON_WAITING, + DOM_BUTTON_AUTO_FOCUS, + DOM_BUTTON_TEXT_DATA, + DOM_BUTTON_ICON, +}; + +// button node style list +const std::vector BUTTON_STYLE_LIST = { + DOM_BUTTON_MIN_WIDTH, + DOM_BUTTON_WIDTH, + DOM_BUTTON_HEIGHT, + DOM_BUTTON_TEXT_COLOR, + DOM_BUTTON_FONT_SIZE, + DOM_BUTTON_FONT_WEIGHT, + DOM_BUTTON_FONT_FAMILY, + DOM_BUTTON_RRECT_RADIUS, + DOM_BUTTON_DEFAULT_COLOR, + DOM_BUTTON_CLICKED_COLOR, + DOM_BUTTON_DISABLE_COLOR, + DOM_BUTTON_FOCUS_COLOR, + BUTTON_SHADOW, + DOM_BUTTON_BORDER_WIDTH, + DOM_BUTTON_BORDER_COLOR, + DOM_BUTTON_PROGRESS_DIAMETER, + DOM_BUTTON_PROGRESS_COLOR, + DOM_BUTTON_INNER_PADDING, +}; + +const std::vector SEARCH_ATTR_LIST = { + DOM_SEARCH_ICON, + DOM_SEARCH_HINT, + DOM_SEARCH_VALUE, +}; + +const std::vector SEARCH_STYLE_LIST = { + DOM_TEXT_FONT_SIZE, + DOM_TEXT_FONT_WEIGHT, + DOM_TEXT_FONT_FAMILY, + DOM_COLOR, + DOM_INPUT_PLACEHOLDER_COLOR, + DOM_PADDING_LEFT, + DOM_PADDING_TOP, + DOM_PADDING_RIGHT, + DOM_PADDING_BOTTOM, + DOM_PADDING_START, + DOM_PADDING_END, + DOM_BACKGROUND_COLOR, +}; + +const std::vector SEARCH_EVENT_LIST = { + DOM_CHANGE, + DOM_SUBMIT +}; + +// piece node attribute list +const std::vector PIECE_ATTR_LIST = { + DOM_PIECE_CONTENT, + DOM_PIECE_CLOSABLE, + DOM_PIECE_ICON, +}; + +// piece node event list +const std::vector PIECE_EVENT_LIST = { + DOM_PIECE_EVENT_CLOSE, +}; + +const std::vector DIV_ATTR_LIST = { + DOM_CLICK_EFFECT, +}; + +// svg node attribute list +const std::vector SVG_ATTR_LIST = { + DOM_SVG_VIEW_BOX, + DOM_SVG_X, + DOM_SVG_Y, + DOM_SVG_WIDTH, + DOM_SVG_HEIGHT, + DOM_SVG_FILL, + DOM_SVG_FILL_OPACITY, + DOM_SVG_STROKE, + DOM_SVG_STROKE_DASHARRAY, + DOM_SVG_STROKE_DASHOFFSET, + DOM_SVG_STROKE_LINECAP, + DOM_SVG_STROKE_LINEJOIN, + DOM_SVG_STROKE_MITERLIMIT, + DOM_SVG_STROKE_OPACITY, + DOM_SVG_STROKE_WIDTH, + DOM_SVG_OPACITY, +}; + +const std::vector SVG_RECT_ATTR_LIST = { + DOM_SVG_X, + DOM_SVG_Y, + DOM_SVG_WIDTH, + DOM_SVG_HEIGHT, + DOM_SVG_RX, + DOM_SVG_RY, + DOM_SVG_FILL, + DOM_SVG_FILL_OPACITY, + DOM_SVG_STROKE, + DOM_SVG_STROKE_DASHARRAY, + DOM_SVG_STROKE_DASHOFFSET, + DOM_SVG_STROKE_LINECAP, + DOM_SVG_STROKE_LINEJOIN, + DOM_SVG_STROKE_MITERLIMIT, + DOM_SVG_STROKE_OPACITY, + DOM_SVG_STROKE_WIDTH, + DOM_SVG_OPACITY, +}; + +const std::vector SVG_CIRCLE_ATTR_LIST = { + DOM_SVG_CX, + DOM_SVG_CY, + DOM_SVG_R, + DOM_SVG_FILL, + DOM_SVG_FILL_OPACITY, + DOM_SVG_STROKE, + DOM_SVG_STROKE_DASHARRAY, + DOM_SVG_STROKE_DASHOFFSET, + DOM_SVG_STROKE_LINECAP, + DOM_SVG_STROKE_LINEJOIN, + DOM_SVG_STROKE_MITERLIMIT, + DOM_SVG_STROKE_OPACITY, + DOM_SVG_STROKE_WIDTH, + DOM_SVG_OPACITY, +}; + +const std::vector SVG_ELLIPSE_ATTR_LIST = { + DOM_SVG_CX, + DOM_SVG_CY, + DOM_SVG_RX, + DOM_SVG_RY, + DOM_SVG_FILL, + DOM_SVG_FILL_OPACITY, + DOM_SVG_STROKE, + DOM_SVG_STROKE_DASHARRAY, + DOM_SVG_STROKE_DASHOFFSET, + DOM_SVG_STROKE_LINECAP, + DOM_SVG_STROKE_LINEJOIN, + DOM_SVG_STROKE_MITERLIMIT, + DOM_SVG_STROKE_OPACITY, + DOM_SVG_STROKE_WIDTH, + DOM_SVG_OPACITY, +}; + +const std::vector SVG_PATH_ATTR_LIST = { + DOM_SVG_D, + DOM_SVG_FILL, + DOM_SVG_FILL_OPACITY, + DOM_SVG_STROKE, + DOM_SVG_STROKE_DASHARRAY, + DOM_SVG_STROKE_DASHOFFSET, + DOM_SVG_STROKE_LINECAP, + DOM_SVG_STROKE_LINEJOIN, + DOM_SVG_STROKE_MITERLIMIT, + DOM_SVG_STROKE_OPACITY, + DOM_SVG_STROKE_WIDTH, + DOM_SVG_OPACITY, +}; + +const std::vector SVG_LINE_ATTR_LIST = { + DOM_SVG_X1, + DOM_SVG_X2, + DOM_SVG_Y1, + DOM_SVG_Y2, + DOM_SVG_FILL, + DOM_SVG_FILL_OPACITY, + DOM_SVG_STROKE, + DOM_SVG_STROKE_DASHARRAY, + DOM_SVG_STROKE_DASHOFFSET, + DOM_SVG_STROKE_LINECAP, + DOM_SVG_STROKE_LINEJOIN, + DOM_SVG_STROKE_MITERLIMIT, + DOM_SVG_STROKE_OPACITY, + DOM_SVG_STROKE_WIDTH, + DOM_SVG_OPACITY, +}; + +const std::vector SVG_POLYLINE_ATTR_LIST = { + DOM_SVG_POINTS, + DOM_SVG_FILL, + DOM_SVG_FILL_OPACITY, + DOM_SVG_STROKE, + DOM_SVG_STROKE_DASHARRAY, + DOM_SVG_STROKE_DASHOFFSET, + DOM_SVG_STROKE_LINECAP, + DOM_SVG_STROKE_LINEJOIN, + DOM_SVG_STROKE_MITERLIMIT, + DOM_SVG_STROKE_OPACITY, + DOM_SVG_STROKE_WIDTH, + DOM_SVG_OPACITY, +}; + +const std::vector SVG_POLYGON_ATTR_LIST = { + DOM_SVG_POINTS, + DOM_SVG_FILL, + DOM_SVG_FILL_OPACITY, + DOM_SVG_STROKE, + DOM_SVG_STROKE_DASHARRAY, + DOM_SVG_STROKE_DASHOFFSET, + DOM_SVG_STROKE_LINECAP, + DOM_SVG_STROKE_LINEJOIN, + DOM_SVG_STROKE_MITERLIMIT, + DOM_SVG_STROKE_OPACITY, + DOM_SVG_STROKE_WIDTH, + DOM_SVG_OPACITY, +}; + +const std::vector SVG_ANIMATE_ATTR_LIST = { + DOM_SVG_ANIMATION_BEGIN, + DOM_SVG_ANIMATION_DUR, + DOM_SVG_ANIMATION_END, + DOM_SVG_ANIMATION_REPEAT_COUNT, + DOM_SVG_ANIMATION_FILL, + DOM_SVG_ANIMATION_CALC_MODE, + DOM_SVG_ANIMATION_VALUES, + DOM_SVG_ANIMATION_KEY_TIMES, + DOM_SVG_ANIMATION_KEY_SPLINES, + DOM_SVG_ANIMATION_FROM, + DOM_SVG_ANIMATION_TO, + DOM_SVG_ANIMATION_ATTRIBUTE_NAME, +}; + +const std::vector SVG_ANIMATE_MOTION_ATTR_LIST = { + DOM_SVG_ANIMATION_BEGIN, + DOM_SVG_ANIMATION_DUR, + DOM_SVG_ANIMATION_END, + DOM_SVG_ANIMATION_REPEAT_COUNT, + DOM_SVG_ANIMATION_FILL, + DOM_SVG_ANIMATION_CALC_MODE, + DOM_SVG_ANIMATION_KEY_TIMES, + DOM_SVG_ANIMATION_KEY_SPLINES, + DOM_SVG_ANIMATION_KEY_POINTS, + DOM_SVG_ANIMATION_PATH, + DOM_SVG_ANIMATION_ROTATE, +}; + +} // namespace OHOS::Ace::Framework + +#endif // FOUNDATION_ACE_FRAMEWORKS_BRIDGE_TEST_UNITTEST_JSFRONTEND_DOM_TEST_CONSTANTS_H diff --git a/frameworks/bridge/test/unittest/jsfrontend/dombutton/BUILD.gn b/frameworks/bridge/test/unittest/jsfrontend/dombutton/BUILD.gn new file mode 100644 index 00000000..0fc663ca --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/dombutton/BUILD.gn @@ -0,0 +1,57 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/jsframework/button" + +ohos_unittest("DomButtonTest") { + module_out_path = module_output_path + + sources = [ + "../dom_node_factory.cpp", + "dom_button_test.cpp", + ] + + configs = [ + ":config_domnode_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + external_deps = [ "hiviewdfx_hilog_native:libhilog" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_domnode_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":DomButtonTest" ] +} diff --git a/frameworks/bridge/test/unittest/jsfrontend/dombutton/dom_button_test.cpp b/frameworks/bridge/test/unittest/jsfrontend/dombutton/dom_button_test.cpp new file mode 100644 index 00000000..60deca17 --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/dombutton/dom_button_test.cpp @@ -0,0 +1,310 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "core/components/button/button_component.h" +#include "core/components/button/button_theme.h" +#include "core/components/progress/loading_progress_component.h" +#include "core/components/theme/theme_manager.h" +#include "frameworks/bridge/common/dom/dom_button.h" +#include "frameworks/bridge/test/unittest/jsfrontend/dom_node_factory.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace::Framework { +namespace { + +constexpr uint32_t BG_COLOR_CAPSULE = 0xffff0000; +constexpr uint32_t BG_COLOR_TEXT = 0x00000000; +#ifndef WEARABLE_PRODUCT +constexpr uint32_t PROGRESS_COLOR_TEST = 0xff00ff00; +#endif +constexpr uint32_t CLICKED_COLOR_TEST = 0xff00aa00; +constexpr uint32_t FOCUS_COLOR_TEST = 0xff00bb00; +constexpr uint32_t TEXT_COLOR_TEST = 0xff00cc00; +constexpr uint32_t BORDER_COLOR_TEST = 0xff00dd00; + +constexpr double CIRCLE_RADIUS = 50.0; +#ifndef WEARABLE_PRODUCT +constexpr double PROGRESS_DIAMETER_TEST = 50.0; +#endif +constexpr double WIDTH_TEST = 200.0; +constexpr double HEIGHT_TEST = 100.0; +constexpr double BORDER_WIDTH_TEST = 3.0; +constexpr double FONT_SIZE_TEST = 40.0; + +const std::string ICON_SRC_TEST = "pages/index/ic_test.png"; + +} // namespace + +class DomButtonTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; +}; + +void DomButtonTest::SetUpTestCase() {} +void DomButtonTest::TearDownTestCase() {} +void DomButtonTest::SetUp() {} +void DomButtonTest::TearDown() {} + +/** + * @tc.name: SetAttributesAndStyles001 + * @tc.desc: All attribute and style values are equal to the default from theme when there are no user-defined + * attributes or styles. + * @tc.type: FUNC + * @tc.require: AR000DQ1OE AR000DQ1OI + * @tc.author: changjia + */ +HWTEST_F(DomButtonTest, SetAttributesAndStyles001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Create json string for testing, just value attribute set. + */ + const std::string jsonButtonStr = "" + "{ " + " \"tag\": \"button\" " + "}"; + + /** + * @tc.steps: step2. Verify whether attributes and styles are equal to default values. + * @tc.expected: step2. All attribute and style values are equal to the default from theme. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonButtonStr); + ASSERT_TRUE(domNodeRoot); + auto buttonComponent = AceType::DynamicCast(domNodeRoot->GetSpecializedComponent()); + auto themeManager = AceType::MakeRefPtr(); + RefPtr buttonTheme = themeManager->GetTheme(); + ASSERT_TRUE(buttonTheme); + ASSERT_TRUE(buttonComponent); + ASSERT_TRUE(buttonComponent->GetBackgroundColor() == buttonTheme->GetBgColor()); + ASSERT_TRUE(buttonComponent->GetFocusColor() == buttonTheme->GetBgFocusColor()); + ASSERT_TRUE(buttonComponent->GetFocusAnimationColor() == buttonTheme->GetBgFocusColor()); + + auto children = buttonComponent->GetChildren(); + ASSERT_TRUE(children.size() > 0); + auto paddingChild = AceType::DynamicCast(children.front()); + ASSERT_TRUE(paddingChild); + auto textChild = AceType::DynamicCast(paddingChild->GetChild()); + ASSERT_TRUE(textChild); + ASSERT_TRUE(textChild->GetFocusColor() == buttonTheme->GetTextFocusColor()); + ASSERT_TRUE(textChild->GetTextStyle().GetMaxLines() == uint32_t(buttonTheme->GetTextMaxLines())); + auto textStyle = textChild->GetTextStyle(); + ASSERT_TRUE(textStyle.GetAdaptTextSize()); + ASSERT_TRUE(textStyle.GetAdaptMinFontSize() == buttonTheme->GetMinFontSize()); +} + +/** + * @tc.name: SetAttributesAndStyles002 + * @tc.desc: The focus color is equal to background color when type is capsule and background color defined by user. + * @tc.type: FUNC + * @tc.require: AR000DQ1OE AR000DQ1OI + * @tc.author: changjia + */ +HWTEST_F(DomButtonTest, SetAttributesAndStyles002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Create json string for testing, the type is capsule, background color defined. + */ + const std::string jsonButtonStr = "" + "{ " + " \"tag\": \"button\", " + " \"attr\": [{ \"value\" : \"test\" }, " + " { \"type\" : \"capsule\" }], " + " \"style\": [{ \"backgroundColor\" : \"#ff0000\" }] " + "}"; + + /** + * @tc.steps: step2. Verify whether focus color is equal to user-defined background. + * @tc.expected: step2. The focus color is equal to background color. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonButtonStr); + ASSERT_TRUE(domNodeRoot); + auto buttonComponent = AceType::DynamicCast(domNodeRoot->GetSpecializedComponent()); + ASSERT_TRUE(buttonComponent); + ASSERT_TRUE(buttonComponent->GetBackgroundColor() == Color(BG_COLOR_CAPSULE)); +} + +/** + * @tc.name: SetAttributesAndStyles003 + * @tc.desc: The background color is transparent when type is text. + * @tc.type: FUNC + * @tc.require: AR000DQ1OE AR000DQ1OI + * @tc.author: changjia + */ +HWTEST_F(DomButtonTest, SetAttributesAndStyles003, TestSize.Level1) +{ + /** + * @tc.steps: step1. Create json string for testing, the type is text. + */ + const std::string jsonButtonStr = "" + "{ " + " \"tag\": \"button\", " + " \"attr\": [{ \"value\" : \"test\" }, " + " { \"type\" : \"text\" }] " + "}"; + + /** + * @tc.steps: step2. Verify whether background color is transparent. + * @tc.expected: step2. The background color is transparent. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonButtonStr); + ASSERT_TRUE(domNodeRoot); + auto buttonComponent = AceType::DynamicCast(domNodeRoot->GetSpecializedComponent()); + ASSERT_TRUE(buttonComponent); + ASSERT_TRUE(buttonComponent->GetBackgroundColor() == Color(BG_COLOR_TEXT)); +} + +/** + * @tc.name: SetAttributesAndStyles004 + * @tc.desc: The width and height are equal to double radius when type is circle and just radius defined. + * @tc.type: FUNC + * @tc.require: AR000DQ1OE AR000DQ1OI + * @tc.author: changjia + */ +HWTEST_F(DomButtonTest, SetAttributesAndStyles004, TestSize.Level1) +{ + /** + * @tc.steps: step1. Create json string for testing, the type is circle, radius style defined. + */ + const std::string jsonButtonStr = "" + "{ " + " \"tag\": \"button\", " + " \"attr\": [{ \"type\" : \"circle\" }, " + " { \"icon\" : \"pages/index/ic_test.png\" }], " + " \"style\": [{ \"radius\" : \"50\" }] " + "}"; + + /** + * @tc.steps: step2. Verify whether width and height are equal to double radius. + * @tc.expected: step2. The width and height are equal to double radius. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonButtonStr); + ASSERT_TRUE(domNodeRoot); + auto buttonComponent = AceType::DynamicCast(domNodeRoot->GetSpecializedComponent()); + ASSERT_TRUE(buttonComponent); + ASSERT_TRUE(buttonComponent->GetRectRadius() == Dimension(CIRCLE_RADIUS)); + + auto children = buttonComponent->GetChildren(); + ASSERT_TRUE(children.size() > 0); + auto paddingChild = AceType::DynamicCast(children.front()); + ASSERT_TRUE(paddingChild); + auto imageChild = AceType::DynamicCast(paddingChild->GetChild()); + ASSERT_TRUE(imageChild->GetSrc() == ICON_SRC_TEST); +} + +#ifndef WEARABLE_PRODUCT +/** + * @tc.name: SetAttributesAndStyles005 + * @tc.desc: The diameter and color of progress are equal to user-defined in waiting state. + * @tc.type: FUNC + * @tc.require: AR000DQ1OE AR000DQ1OI + * @tc.author: changjia + */ +HWTEST_F(DomButtonTest, SetAttributesAndStyles005, TestSize.Level1) +{ + /** + * @tc.steps: step1. Create json string for testing, the type is circle, the waiting is true, + * diameter and progress color style defined. + */ + const std::string jsonButtonStr = "" + "{ " + " \"tag\": \"button\", " + " \"attr\": [{ \"type\" : \"circle\" }, " + " { \"waiting\" : \"true\" }], " + " \"style\": [{ \"radius\" : \"50\" }, " + " { \"progressColor\" : \"#00ff00\" }] " + "}"; + + /** + * @tc.steps: step2. Verify whether diameter and color of progress are equal to user-defined. + * @tc.expected: step2. The diameter and color of progress are equal to user-defined. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonButtonStr); + ASSERT_TRUE(domNodeRoot); + auto buttonComponent = AceType::DynamicCast(domNodeRoot->GetSpecializedComponent()); + ASSERT_TRUE(buttonComponent); + auto children = buttonComponent->GetChildren(); + ASSERT_TRUE(children.size() > 0); + auto paddingChild = AceType::DynamicCast(children.front()); + ASSERT_TRUE(paddingChild); + auto progressChild = AceType::DynamicCast(paddingChild->GetChild()); + ASSERT_TRUE(progressChild); + ASSERT_TRUE(NearEqual(progressChild->GetDiameter().Value(), PROGRESS_DIAMETER_TEST)); + ASSERT_TRUE(progressChild->GetProgressColor() == Color(PROGRESS_COLOR_TEST)); +} +#endif + +/** + * @tc.name: SetAttributesAndStyles006 + * @tc.desc: The attributes and styles are equal to user-defined. + * @tc.type: FUNC + * @tc.require: AR000DQ1OE AR000DQ1OI + * @tc.author: changjia + */ +HWTEST_F(DomButtonTest, SetAttributesAndStyles006, TestSize.Level1) +{ + /** + * @tc.steps: step1. Create json string for testing. + */ + const std::string jsonButtonStr = "" + "{ " + " \"tag\": \"button\", " + " \"attr\": [{ \"value\" : \"test\" }, " + " { \"autofocus\" : \"true\" }], " + " \"style\": [{ \"width\" : \"200\" }, " + " { \"height\" : \"100\" }, " + " { \"clickedColor\" : \"#00aa00\" }, " + " { \"focusColor\" : \"#00bb00\" }, " + " { \"textColor\" : \"#00cc00\" }, " + " { \"fontSize\" : \"40\" }, " + " { \"fontWeight\" : \"bolder\" }, " + " { \"borderWidth\" : \"3\" }, " + " { \"borderColor\" : \"#00dd00\" }] " + "}"; + + /** + * @tc.steps: step2. Verify whether attributes and styles are equal to default values. + * @tc.expected: step2. All attribute and style values are equal to the default from theme. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonButtonStr); + ASSERT_TRUE(domNodeRoot); + auto buttonComponent = AceType::DynamicCast(domNodeRoot->GetSpecializedComponent()); + ASSERT_TRUE(buttonComponent); + ASSERT_TRUE(buttonComponent->GetAutoFocusState()); + ASSERT_TRUE(buttonComponent->GetWidth() == Dimension(WIDTH_TEST)); + ASSERT_TRUE(buttonComponent->GetHeight() == Dimension(HEIGHT_TEST)); + ASSERT_TRUE(buttonComponent->GetClickedColor() == Color(CLICKED_COLOR_TEST)); + ASSERT_TRUE(buttonComponent->GetFocusColor() == Color(FOCUS_COLOR_TEST)); + ASSERT_TRUE(buttonComponent->GetBorderEdge().GetColor() == Color(BORDER_COLOR_TEST)); + ASSERT_TRUE(NearEqual(buttonComponent->GetBorderEdge().GetWidth().Value(), BORDER_WIDTH_TEST)); + + auto children = buttonComponent->GetChildren(); + ASSERT_TRUE(children.size() > 0); + auto paddingChild = AceType::DynamicCast(children.front()); + ASSERT_TRUE(paddingChild); + auto textChild = AceType::DynamicCast(paddingChild->GetChild()); + ASSERT_TRUE(textChild); + auto textStyle = textChild->GetTextStyle(); + ASSERT_TRUE(textStyle.GetTextColor() == Color(TEXT_COLOR_TEST)); + ASSERT_TRUE(textStyle.GetFontSize() == Dimension(FONT_SIZE_TEST)); + ASSERT_TRUE(textStyle.GetFontWeight() == FontWeight::BOLDER); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/test/unittest/jsfrontend/domdiv/BUILD.gn b/frameworks/bridge/test/unittest/jsfrontend/domdiv/BUILD.gn new file mode 100644 index 00000000..ad24cf90 --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/domdiv/BUILD.gn @@ -0,0 +1,57 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/jsframework/div" + +ohos_unittest("DomDivTest") { + module_out_path = module_output_path + + sources = [ + "../dom_node_factory.cpp", + "dom_div_test.cpp", + ] + + configs = [ + ":config_domnode_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + external_deps = [ "hiviewdfx_hilog_native:libhilog" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_domnode_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":DomDivTest" ] +} diff --git a/frameworks/bridge/test/unittest/jsfrontend/domdiv/dom_div_test.cpp b/frameworks/bridge/test/unittest/jsfrontend/domdiv/dom_div_test.cpp new file mode 100644 index 00000000..7a44d65f --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/domdiv/dom_div_test.cpp @@ -0,0 +1,196 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/json/json_util.h" +#include "base/utils/utils.h" +#include "core/components/common/layout/constants.h" +#include "frameworks/bridge/common/dom/dom_div.h" +#include "frameworks/bridge/common/dom/dom_document.h" +#include "frameworks/bridge/common/dom/dom_text.h" +#include "frameworks/bridge/test/unittest/jsfrontend/dom_node_factory.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace::Framework { +namespace { + +constexpr int32_t SINGLE_CHILD_COUNT = 2; +constexpr int32_t TEST_CROSS_ALIGN = 2; +constexpr int32_t TEST_DIRECTION_FLEX = 1; +constexpr int32_t TEST_MAIN_ALIGN = 3; + +} // namespace + +class DomDivTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); +}; + +void DomDivTest::SetUpTestCase() {} +void DomDivTest::TearDownTestCase() {} +void DomDivTest::SetUp() {} +void DomDivTest::TearDown() {} + +/** + * @tc.name: DomDivTest001 + * @tc.desc: Verify that DomDiv can be created and appended children. + * @tc.type: FUNC + * @tc.require: AR000DD66K + * @tc.author: liwenzhen + */ +HWTEST_F(DomDivTest, DomDivTest001, TestSize.Level1) +{ + const std::string jsonDivStr = "" + "{ " + " \"tag\": \"div\", " + " \"child\": [{ " + " \"tag\":\"text\" " + " }," + " {" + " \"tag\":\"text\" " + " }] " + "}"; + + /** + * @tc.steps: step1. call JsonUtil interface and create DomDiv and its children. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonDivStr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + RefPtr flexChild = AceType::DynamicCast(boxChild->GetChild()); + + /** + * @tc.steps: step2. Verify whether the DomDiv and its children are created. + * @tc.expected: step2. DomDiv is not null and children size is 2. + */ + ASSERT_TRUE(domNodeRoot != nullptr); + ASSERT_TRUE(flexChild->GetChildren().size() == SINGLE_CHILD_COUNT); +} + +/** + * @tc.name: DomDivTest002 + * @tc.desc: Verify that DomDiv can be set styles. + * @tc.type: FUNC + * @tc.require: AR000DD66K + * @tc.author: liwenzhen + */ +HWTEST_F(DomDivTest, DomDivTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of DomDiv with three attributes: + * alignItems, flexDirection, justify-content. + */ + const std::string jsonDivStr = "" + "{ " + " \"tag\": \"div\", " + " \"style\": [{ " + " \"alignItems\":\"center\" " + " }," + " {" + " \"flexDirection\":\"column\" " + " }, " + " {" + " \"justifyContent\":\"flex-end\" " + " }]" + "}"; + + /** + * @tc.steps: step1. call JsonUtil interface, create DomDiv and set its style. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonDivStr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + RefPtr flexChild = AceType::DynamicCast(boxChild->GetChild()); + int32_t crossAxisAlign = static_cast(flexChild->GetCrossAxisAlign()); + int32_t flexDirectionValue = static_cast(flexChild->GetDirection()); + int32_t mainAxisAlign = static_cast(flexChild->GetMainAxisAlign()); + + /** + * @tc.steps: step2. Verify the DomDiv's style is set correctly. + * @tc.expected: step2. crossAxisAlign is 2,flexDirectionValue is 1, mainAxisAlign is 3. + */ + EXPECT_TRUE(crossAxisAlign == TEST_CROSS_ALIGN); + EXPECT_TRUE(flexDirectionValue == TEST_DIRECTION_FLEX); + EXPECT_TRUE(mainAxisAlign == TEST_MAIN_ALIGN); +} + +/** + * @tc.name: DomDivTest003 + * @tc.desc: Verify that DomDiv can be set styles as grid. + * @tc.type: FUNC + * @tc.require: AR000DQ1SM AR000DQ1SN + * @tc.author: zhongjianfei + */ +HWTEST_F(DomDivTest, DomDivTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of DomDiv with three attributes: + * columns, rows, gap. + */ + const std::string jsonDivStr = "" + "{ " + " \"tag\": \"div\", " + " \"style\": [{ " + " \"display\":\"grid\" " + " }, " + " { " + " \"gridTemplateColumns\":\"100px 200px 300px\" " + " }, " + " { " + " \"gridTemplateRows\":\"20% 30% 30% 20%\" " + " }, " + " { " + " \"gridColumnsGap\":\"10px\" " + " }, " + " { " + " \"gridRowsGap\":\"20px\" " + " }, " + " { " + " \"flexDirection\":\"row\" " + " }, " + " { " + " \"justifyContent\":\"flex-end\" " + " }] " + "}"; + + + /** + * @tc.steps: step1. call JsonUtil interface, create DomDiv and set its style. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonDivStr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + RefPtr flexChild = AceType::DynamicCast(boxChild->GetChild()); + RefPtr grid = AceType::DynamicCast(flexChild->GetChildren().front()); + EXPECT_TRUE(grid != nullptr); + int32_t flexDirectionValue = static_cast(flexChild->GetDirection()); + int32_t mainAxisAlign = static_cast(flexChild->GetMainAxisAlign()); + + /** + * @tc.steps: step2. Verify the DomDiv's style is set correctly. + * @tc.expected: step2. columns, rows, gap is correctly. + */ + EXPECT_TRUE(flexDirectionValue == 0); + EXPECT_TRUE(mainAxisAlign == TEST_MAIN_ALIGN); + EXPECT_TRUE(grid->GetColumnsArgs() == "100px 200px 300px"); + EXPECT_TRUE(grid->GetRowsArgs() == "20% 30% 30% 20%"); + EXPECT_TRUE(static_cast(grid->GetColumnGap()) == 10); + EXPECT_TRUE(static_cast(grid->GetRowGap()) == 20); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/test/unittest/jsfrontend/domdivider/BUILD.gn b/frameworks/bridge/test/unittest/jsfrontend/domdivider/BUILD.gn new file mode 100644 index 00000000..65163c71 --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/domdivider/BUILD.gn @@ -0,0 +1,57 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/jsframework/divider" + +ohos_unittest("DomDividerTest") { + module_out_path = module_output_path + + sources = [ + "../dom_node_factory.cpp", + "dom_divider_test.cpp", + ] + + configs = [ + ":config_domnode_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + external_deps = [ "hiviewdfx_hilog_native:libhilog" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_domnode_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":DomDividerTest" ] +} diff --git a/frameworks/bridge/test/unittest/jsfrontend/domdivider/dom_divider_test.cpp b/frameworks/bridge/test/unittest/jsfrontend/domdivider/dom_divider_test.cpp new file mode 100644 index 00000000..b68e2fb1 --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/domdivider/dom_divider_test.cpp @@ -0,0 +1,127 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "core/components/divider/divider_component.h" +#include "core/components/divider/divider_theme.h" +#include "frameworks/bridge/test/unittest/jsfrontend/dom_node_factory.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace::Framework { +namespace { + +const Dimension DEFAULT_STROKE_WIDTH = Dimension(1.0); +const Dimension STROKE_WIDTH = Dimension(1.0); +const Color DIVIDER_COLOR = Color(0xffff0000); + +const std::string DIVIDER_TEST_001 = "" + "{ " + " \"tag\": \"divider\" " + "}"; +const std::string DIVIDER_TEST_002 = "" + "{ " + " \"tag\": \"divider\", " + " \"attr\": [{ " + " \"vertical\": \"true\" " + " }], " + " \"style\": [{ " + " \"strokeWidth\": \"1px\" " + " }, " + " { " + " \"lineCap\": \"round\" " + " }, " + " { " + " \"color\": \"#ff0000\" " + " }] " + "}"; + +} // namespace + +class DomDividerTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; +}; + +void DomDividerTest::SetUpTestCase() {} +void DomDividerTest::TearDownTestCase() {} +void DomDividerTest::SetUp() {} +void DomDividerTest::TearDown() {} + +/** + * @tc.name: DomDividerCreatorTest001 + * @tc.desc: Test divider node are created as expected. + * @tc.type: FUNC + * @tc.require: AR000DQ1Q5 AR000DQ1Q6 + * @tc.author: jiangyingjie + */ +HWTEST_F(DomDividerTest, DomDividerCreatorTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create divider node with it. + * @tc.expected: step1. divider node are created successfully. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(DIVIDER_TEST_001); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + auto divider = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(divider); + + /** + * @tc.steps: step2. Check styles and attributes of created divider node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + auto themeManager = AceType::MakeRefPtr(); + auto theme = themeManager->GetTheme(); + ASSERT_TRUE(theme); + EXPECT_EQ(divider->GetStrokeWidth(), DEFAULT_STROKE_WIDTH); + ASSERT_FALSE(divider->IsVertical()); + EXPECT_EQ(divider->GetDividerColor(), theme->GetColor()); + EXPECT_EQ(divider->GetLineCap(), LineCap::BUTT); +} + +/** + * @tc.name: DomDividerCreatorTest002 + * @tc.desc: Test divider node are created as expected. + * @tc.type: FUNC + * @tc.require: AR000DQ1Q4 AR000DQ1Q6 + * @tc.author: jiangyingjie + */ +HWTEST_F(DomDividerTest, DomDividerCreatorTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create divider node with it. + * @tc.expected: step1. divider node are created successfully. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(DIVIDER_TEST_002); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + auto divider = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(divider); + + /** + * @tc.steps: step2. Check styles and attributes of created divider node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + EXPECT_EQ(divider->GetStrokeWidth(), STROKE_WIDTH); + ASSERT_TRUE(divider->IsVertical()); + EXPECT_EQ(divider->GetDividerColor(), DIVIDER_COLOR); + EXPECT_EQ(divider->GetLineCap(), LineCap::ROUND); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/test/unittest/jsfrontend/domimage/BUILD.gn b/frameworks/bridge/test/unittest/jsfrontend/domimage/BUILD.gn new file mode 100644 index 00000000..1a2c3a42 --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/domimage/BUILD.gn @@ -0,0 +1,57 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/jsframework/image" + +ohos_unittest("DomImageTest") { + module_out_path = module_output_path + + sources = [ + "../dom_node_factory.cpp", + "dom_image_test.cpp", + ] + + configs = [ + ":config_domnode_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + external_deps = [ "hiviewdfx_hilog_native:libhilog" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_domnode_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":DomImageTest" ] +} diff --git a/frameworks/bridge/test/unittest/jsfrontend/domimage/dom_image_test.cpp b/frameworks/bridge/test/unittest/jsfrontend/domimage/dom_image_test.cpp new file mode 100644 index 00000000..38094aeb --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/domimage/dom_image_test.cpp @@ -0,0 +1,304 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "core/components/clip/clip_component.h" +#include "frameworks/bridge/common/dom/dom_image.h" +#include "frameworks/bridge/test/unittest/jsfrontend/dom_node_factory.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace::Framework { +namespace { + +const std::string IMAGE_SRC_VALUE = "/example/src"; +const std::string IMAGE_ALT_VALUE = "/example/alt"; +const ImageFit IMAGE_FIT_NONE = ImageFit::NONE; +const ImageFit IMAGE_FIT_COVER = ImageFit::COVER; +const ImageFit IMAGE_FIT_SCALEDOWN = ImageFit::SCALEDOWN; +const ImageFit IMAGE_FIT_CONTAIN = ImageFit::CONTAIN; +const ImageFit IMAGE_FIT_FILL = ImageFit::FILL; + +} // namespace + +class DomImageTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); +}; + +void DomImageTest::SetUpTestCase() {} +void DomImageTest::TearDownTestCase() {} +void DomImageTest::SetUp() {} +void DomImageTest::TearDown() {} + +/** + * @tc.name: SetImageAttributes001 + * @tc.desc: Verify that DomImage can create imageComponent correctly with all attributes set, object-fit is "none". + * @tc.type: FUNC + * @tc.require: AR000DD668 + * @tc.author: chenxuankai + */ +HWTEST_F(DomImageTest, SetImageAttributes001, TestSize.Level1) +{ + /** + * @tc.steps: step1. the json string of DomImage with all attributes set, object-fit is "none". + */ + const std::string jsonImageStr = "" + "{ " + " \"tag\": \"image\", " + " \"attr\": [{ " + " \"src\" : \"/example/src\" " + " }, " + " { " + " \"alt\" : \"/example/alt\" " + " }], " + " \"style\": [{ " + " \"objectFit\":\"none\" " + " }], " + " \"event\": [ \"error\", \"complete\" ] " + " }] " + "}"; + + /** + * @tc.steps: step2. call JsonUtil interface and create DomImage. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonImageStr); + auto imageComponent = AceType::DynamicCast(domNodeRoot->GetSpecializedComponent()); + + /** + * @tc.steps: step3. Verify whether all attributes of imageComponent are as excepted. + * @tc.expected: step3. All attributes of imageComponent are as excepted. + */ + ASSERT_TRUE(imageComponent != nullptr); + ASSERT_TRUE(imageComponent->GetSrc() == IMAGE_SRC_VALUE); + ASSERT_TRUE(imageComponent->GetAlt() == IMAGE_ALT_VALUE); + ASSERT_TRUE(imageComponent->GetImageFit() == IMAGE_FIT_NONE); + ASSERT_TRUE(imageComponent->GetLoadSuccessEventId() == std::to_string(domNodeRoot->GetNodeId())); + ASSERT_TRUE(imageComponent->GetLoadFailEventId() == std::to_string(domNodeRoot->GetNodeId())); +} + +/** + * @tc.name: SetImageAttributes002 + * @tc.desc: Verify that DomImage can create imageComponent correctly width no attribute set. + * @tc.type: FUNC + * @tc.require: AR000DD668 + * @tc.author: chenxuankai + */ +HWTEST_F(DomImageTest, SetImageAttributes002, TestSize.Level1) +{ + /** + * @tc.steps: step1. the json string of DomImage with no attribute. + */ + const std::string jsonImageStr = "" + "{ " + " \"tag\": \"image\", " + " \"attr\": [], " + " \"style\": [], " + " \"event\": [] " + "}"; + + /** + * @tc.steps: step2. call JsonUtil interface and create DomImage. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonImageStr); + auto imageComponent = AceType::DynamicCast(domNodeRoot->GetSpecializedComponent()); + + /** + * @tc.steps: step3. Verify whether all attributes of imageComponent are as excepted. + * @tc.expected: step3. All attributes of imageComponent are as excepted. + */ + ASSERT_TRUE(imageComponent != nullptr); + ASSERT_TRUE(imageComponent->GetSrc().empty()); + ASSERT_TRUE(imageComponent->GetAlt().empty()); + ASSERT_TRUE(imageComponent->GetImageFit() == IMAGE_FIT_COVER); + ASSERT_TRUE(imageComponent->GetLoadSuccessEventId().IsEmpty()); + ASSERT_TRUE(imageComponent->GetLoadFailEventId().IsEmpty()); +} + +/** + * @tc.name: SetImageAttributes003 + * @tc.desc: Verify that DomImage can create imageComponent correctly when object-fit is "fill". + * @tc.type: FUNC + * @tc.require: AR000DD668 + * @tc.author: chenxuankai + */ +HWTEST_F(DomImageTest, SetImageAttributes003, TestSize.Level1) +{ + /** + * @tc.steps: step1. the json string of DomImage when object-fit is "fill". + */ + const std::string jsonImageStr = "" + "{ " + " \"tag\": \"image\", " + " \"style\": [{ " + " \"objectFit\":\"fill\" " + " }] " + "}"; + + /** + * @tc.steps: step2. call JsonUtil interface and create DomImage. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonImageStr); + auto imageComponent = AceType::DynamicCast(domNodeRoot->GetSpecializedComponent()); + + /** + * @tc.steps: step3. Verify whether imageFit attribute of imageComponent is as excepted. + * @tc.expected: step3. imageFit attribute of imageComponent is as excepted. + */ + ASSERT_TRUE(imageComponent != nullptr); + ASSERT_TRUE(imageComponent->GetImageFit() == IMAGE_FIT_FILL); +} + +/** + * @tc.name: SetImageAttributes004 + * @tc.desc: Verify that DomImage can create imageComponent correctly when object-fit is "cover". + * @tc.type: FUNC + * @tc.require: AR000DD668 + * @tc.author: chenxuankai + */ +HWTEST_F(DomImageTest, SetImageAttributes004, TestSize.Level1) +{ + /** + * @tc.steps: step1. the json string of DomImage when object-fit is "cover". + */ + const std::string jsonImageStr = "" + "{ " + " \"tag\": \"image\", " + " \"style\": [{ " + " \"objectFit\":\"cover\" " + " }] " + "}"; + + /** + * @tc.steps: step2. call JsonUtil interface and create DomImage. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonImageStr); + auto imageComponent = AceType::DynamicCast(domNodeRoot->GetSpecializedComponent()); + + /** + * @tc.steps: step3. Verify whether imageFit attribute of imageComponent is as excepted. + * @tc.expected: step3. imageFit attribute of imageComponent is as excepted. + */ + ASSERT_TRUE(imageComponent != nullptr); + ASSERT_TRUE(imageComponent->GetImageFit() == IMAGE_FIT_COVER); +} + +/** + * @tc.name: SetImageAttributes005 + * @tc.desc: Verify that DomImage can create imageComponent correctly when object-fit is "scale-down". + * @tc.type: FUNC + * @tc.require: AR000DD668 + * @tc.author: chenxuankai + */ +HWTEST_F(DomImageTest, SetImageAttributes005, TestSize.Level1) +{ + /** + * @tc.steps: step1. the json string of DomImage when object-fit is "scale-down". + */ + const std::string jsonImageStr = "" + "{ " + " \"tag\": \"image\", " + " \"style\": [{ " + " \"objectFit\":\"scale-down\" " + " }] " + "}"; + + /** + * @tc.steps: step2. call JsonUtil interface and create DomImage. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonImageStr); + auto imageComponent = AceType::DynamicCast(domNodeRoot->GetSpecializedComponent()); + /** + * @tc.steps: step3. Verify whether imageFit attribute of imageComponent is as excepted. + * @tc.expected: step3. imageFit attribute of imageComponent is as excepted. + */ + ASSERT_TRUE(imageComponent != nullptr); + ASSERT_TRUE(imageComponent->GetImageFit() == IMAGE_FIT_SCALEDOWN); +} + +/** + * @tc.name: SetImageAttributes006 + * @tc.desc: Verify that DomImage can create imageComponent correctly when object-fit is "contain". + * @tc.type: FUNC + * @tc.require: AR000DD668 + * @tc.author: chenxuankai + */ +HWTEST_F(DomImageTest, SetImageAttributes006, TestSize.Level1) +{ + /** + * @tc.steps: step1. the json string of DomImage when object-fit is "contain". + */ + const std::string jsonImageStr = "" + "{ " + " \"tag\": \"image\", " + " \"style\": [{ " + " \"objectFit\":\"contain\" " + " }] " + "}"; + + /** + * @tc.steps: step2. call JsonUtil interface and create DomImage. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonImageStr); + auto imageComponent = AceType::DynamicCast(domNodeRoot->GetSpecializedComponent()); + + /** + * @tc.steps: step3. Verify whether imageFit attribute of imageComponent is as excepted. + * @tc.expected: step3. imageFit attribute of imageComponent is as excepted. + */ + ASSERT_TRUE(imageComponent != nullptr); + ASSERT_TRUE(imageComponent->GetImageFit() == IMAGE_FIT_CONTAIN); +} + +/** + * @tc.name: SetImageAttributes007 + * @tc.desc: Verify that DomImage can create imageComponent correctly when object-fit value is invalid. + * @tc.type: FUNC + * @tc.require: AR000DD668 + * @tc.author: chenxuankai + */ +HWTEST_F(DomImageTest, SetImageAttributes007, TestSize.Level1) +{ + /** + * @tc.steps: step1. the json string of DomImage when object-fit value is invalid. + */ + const std::string jsonImageStr = "" + "{ " + " \"tag\": \"image\", " + " \"style\": [{ " + " \"objectFit\":\"center\" " + " }] " + "}"; + + /** + * @tc.steps: step2. call JsonUtil interface and create DomImage. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonImageStr); + auto imageComponent = AceType::DynamicCast(domNodeRoot->GetSpecializedComponent()); + + /** + * @tc.steps: step3. Verify whether imageFit attribute of imageComponent is as excepted. + * @tc.expected: step3. imageFit attribute of imageComponent is as excepted. + */ + ASSERT_TRUE(imageComponent != nullptr); + ASSERT_TRUE(imageComponent->GetImageFit() == IMAGE_FIT_COVER); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/test/unittest/jsfrontend/domimageanimator/BUILD.gn b/frameworks/bridge/test/unittest/jsfrontend/domimageanimator/BUILD.gn new file mode 100644 index 00000000..5dbc1580 --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/domimageanimator/BUILD.gn @@ -0,0 +1,56 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/jsframework/domimageanimator" + +ohos_unittest("DomImageAnimatorTest") { + module_out_path = module_output_path + + sources = [ + "../dom_node_factory.cpp", + "dom_image_animator_test.cpp", + ] + + configs = [ + ":config_domnode_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + if (is_standard_system) { + external_deps = [ "hiviewdfx_hilog_native:libhilog" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_domnode_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":DomImageAnimatorTest" ] +} diff --git a/frameworks/bridge/test/unittest/jsfrontend/domimageanimator/dom_image_animator_test.cpp b/frameworks/bridge/test/unittest/jsfrontend/domimageanimator/dom_image_animator_test.cpp new file mode 100644 index 00000000..47dba250 --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/domimageanimator/dom_image_animator_test.cpp @@ -0,0 +1,148 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "frameworks/bridge/common/dom/dom_image_animator.h" +#include "frameworks/bridge/test/unittest/jsfrontend/dom_node_factory.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace::Framework { +namespace { + + const int32_t ITERATION_TEST = 0; + const int32_t IMAGES_SIZE_TEST = 0; + +} // namespace + +class DomImageAnimatorTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; +}; + +void DomImageAnimatorTest::SetUpTestCase() {} +void DomImageAnimatorTest::TearDownTestCase() {} +void DomImageAnimatorTest::SetUp() {} +void DomImageAnimatorTest::TearDown() {} + +/** + * @tc.name: SetAttributes001 + * @tc.desc: Verify that DomImageAnimator can create imageAnimatorComponent correctly. + * @tc.type: FUNC + * @tc.require: AR000E3DMF + * @tc.author: jiachunhui + */ +HWTEST_F(DomImageAnimatorTest, SetAttributes001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "DomImageAnimatorTest SetAttributes001 start"; + /** + * @tc.steps: step1. the json string of DomImageAnimator with empty attributes set. + */ + const std::string jsonImageAnimatorStr = "" + "{ " + " \"tag\" : \"image-animator\", " + " \"attr\" : [] " + "}"; + + /** + * @tc.steps: step2. call JsonUtil interface and create DomImageAnimator. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonImageAnimatorStr); + auto imageAnimatorComponent = AceType::DynamicCast(domNodeRoot->GetSpecializedComponent()); + + /** + * @tc.steps: step3. Verify whether the imageAnimatorComponent is created correctly. + * @tc.expected: step3. imageAnimatorComponent is created as excepted. + */ + ASSERT_TRUE(imageAnimatorComponent != nullptr); +} + +/** + * @tc.name: SetAttributes002 + * @tc.desc: Verify that the attributes of imageAnimatorComponent can be set correctly. + * @tc.type: FUNC + * @tc.require: AR000E3DMF + * @tc.author: jiachunhui + */ +HWTEST_F(DomImageAnimatorTest, SetAttributes002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "DomImageAnimatorTest SetAttributes002 start"; + /** + * @tc.steps: step1. the json string of DomImageAnimator with some attributes set. + */ + const std::string jsonImageAnimatorStr = "" + "{ " + " \"tag\" : \"image-animator\", " + " \"attr\" : [{ " + " \"iteration\" : \"0\" " + " }, " + " { " + " \"reverse\" : \"true\" " + " }] " + "}"; + + /** + * @tc.steps: step2. call JsonUtil interface and create DomImageAnimator. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonImageAnimatorStr); + auto imageAnimatorComponent = AceType::DynamicCast(domNodeRoot->GetSpecializedComponent()); + + /** + * @tc.steps: step3. Verify whether the attributes of imageAnimatorComponent is set correctly. + * @tc.expected: step3. the attributes are set as excepted. + */ + ASSERT_TRUE(imageAnimatorComponent->GetIteration() == ITERATION_TEST); + ASSERT_TRUE(imageAnimatorComponent->GetIsReverse()); +} + +/** + * @tc.name: SetAttributes003 + * @tc.desc: Verify that the attribute of images can be set correctly. + * @tc.type: FUNC + * @tc.require: AR000E3DMF + * @tc.author: jiachunhui + */ +HWTEST_F(DomImageAnimatorTest, SetAttributes003, TestSize.Level1) +{ + /** + * @tc.steps: step1. the json string of DomImageAnimator with images set. + */ + const std::string jsonImageAnimatorStr = "" + "{ " + " \"tag\" : \"image-animator\", " + " \"attr\" : [{ " + " \"images\" : [] " + " }] " + "}"; + + /** + * @tc.steps: step2. call JsonUtil interface and create DomImageAnimator. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonImageAnimatorStr); + auto imageAnimatorComponent = AceType::DynamicCast(domNodeRoot->GetSpecializedComponent()); + + /** + * @tc.steps: step3. Verify whether the attribute of images is set correctly. + * @tc.expected: step3. the attribute is set as excepted. + */ + ASSERT_TRUE(imageAnimatorComponent->GetImageProperties().size() == IMAGES_SIZE_TEST); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/test/unittest/jsfrontend/dominput/BUILD.gn b/frameworks/bridge/test/unittest/jsfrontend/dominput/BUILD.gn new file mode 100644 index 00000000..af7849c3 --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/dominput/BUILD.gn @@ -0,0 +1,57 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/jsframework/input" + +ohos_unittest("DomInputTest") { + module_out_path = module_output_path + + sources = [ + "../dom_node_factory.cpp", + "dom_input_test.cpp", + ] + + configs = [ + ":config_domnode_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + external_deps = [ "hiviewdfx_hilog_native:libhilog" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_domnode_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":DomInputTest" ] +} diff --git a/frameworks/bridge/test/unittest/jsfrontend/dominput/dom_input_test.cpp b/frameworks/bridge/test/unittest/jsfrontend/dominput/dom_input_test.cpp new file mode 100644 index 00000000..c1309f5f --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/dominput/dom_input_test.cpp @@ -0,0 +1,583 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/geometry/dimension.h" +#include "core/components/button/button_component.h" +#include "core/components/button/button_theme.h" +#include "core/components/checkable/checkable_component.h" +#include "core/components/checkable/checkable_theme.h" +#include "core/components/common/layout/constants.h" +#include "core/components/text_field/text_field_component.h" +#include "core/components/text_field/textfield_theme.h" +#include "core/components/theme/theme_manager.h" +#include "frameworks/bridge/common/dom/dom_document.h" +#include "frameworks/bridge/common/dom/dom_input.h" +#include "frameworks/bridge/test/unittest/jsfrontend/dom_node_factory.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace::Framework { +namespace { + +const bool INPUT_CHECKED_VALUE_DEFAULT = false; + +#ifndef WEARABLE_PRODUCT +constexpr uint32_t INPUT_MAXLENGTH_VALUE_DEFAULT = std::numeric_limits::max(); +const FontWeight INPUT_FONT_WEIGHT_VALUE_DEFAULT = FontWeight::W400; +const std::string INPUT_FONT_FAMILY_VALUE_DEFAULT = "sans-serif"; + +const std::string INPUT_PLACEHOLDER_VALUE = "please input"; +const std::string INPUT_PLACEHOLDER_COLOR_STR_VALUE = "#12345678"; +const std::string INPUT_CURCOR_COLOR_STR_VALUE = "#12345678"; +constexpr uint32_t INPUT_MAXLENGTH_VALUE = 100; +const TextInputAction INPUT_TEXTINPUTACTION_VALUE = TextInputAction::NEXT; +const std::string INPUT_HEADER_ICON = "test.png"; +const std::string INPUT_COLOR_STR_VALUE = "#12345678"; +const Dimension INPUT_FONT_SIZE_VALUE = Dimension(30.0, DimensionUnit::PX); +const FontWeight INPUT_FONT_WEIGHT_VALUE = FontWeight::W600; +const std::string INPUT_FONT_FAMILY_VALUE = "serif"; +#endif + +const bool INPUT_CHECKED_VALUE = true; +const std::string INPUT_NAME_VALUE = "input name"; +const std::string INPUT_VALUE_VALUE = "input value"; +const Dimension INPUT_WIDTH_VALUE = Dimension(100, DimensionUnit::PX); +const Dimension INPUT_HEIGHT_VALUE = Dimension(50, DimensionUnit::PX); +const Dimension BUTTON_WIDTH_INIT = Dimension(-1.0, DimensionUnit::PX); +const RefPtr THEME_MANAGER = AceType::MakeRefPtr(); + +} // namespace + +class DomInputTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); +}; + +void DomInputTest::SetUpTestCase() {} +void DomInputTest::TearDownTestCase() {} +void DomInputTest::SetUp() {} +void DomInputTest::TearDown() {} + +/** + * @tc.name: DomInputCreatorTest001 + * @tc.desc: Test textfield component are created as default. + * @tc.type: FUNC + * @tc.require: AR000DAR18 + * @tc.author: hushilong + */ +HWTEST_F(DomInputTest, DomInputCreatorTest001, TestSize.Level1) +{ + const std::string inputTestJsonStr = "{" + " \"tag\": \"input\", " + " \"attr\": [{ " + " \"type\": \"text\" " + " }] " + "}"; + /** + * @tc.steps: step1. Construct string without style and attribute, then create input node with it + * @tc.expected: step1. input component are created successfully. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(inputTestJsonStr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + ASSERT_TRUE(boxChild); + +#ifndef WEARABLE_PRODUCT + RefPtr textareaComponent = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(textareaComponent); + + /** + * @tc.steps: step2. Check styles and attributes of created input node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + RefPtr theme = THEME_MANAGER->GetTheme(); + ASSERT_TRUE(theme); + + EXPECT_EQ(textareaComponent->GetPlaceholderColor(), theme->GetPlaceholderColor()); + EXPECT_EQ(textareaComponent->GetMaxLength(), INPUT_MAXLENGTH_VALUE_DEFAULT); + + auto style = textareaComponent->GetTextStyle(); + EXPECT_EQ(style.GetTextColor(), theme->GetTextColor()); + EXPECT_EQ(style.GetFontSize(), theme->GetFontSize()); + EXPECT_EQ(style.GetFontWeight(), INPUT_FONT_WEIGHT_VALUE_DEFAULT); + EXPECT_EQ(style.GetFontFamilies()[0], INPUT_FONT_FAMILY_VALUE_DEFAULT); + + RefPtr decoration = textareaComponent->GetDecoration(); + EXPECT_EQ(decoration->GetBackgroundColor(), theme->GetBgColor()); +#endif +} + +/** + * @tc.name: DomInputCreatorTest002 + * @tc.desc: Test textfield component are created with all style and attribute. + * @tc.type: FUNC + * @tc.require: AR000DD674 AR000DAR18 AR000DAR14 AR000DAR15 AR000DAR19 AR000DBI81 AR000DBI82 + * @tc.author: hushilong + */ +HWTEST_F(DomInputTest, DomInputCreatorTest002, TestSize.Level1) +{ + const std::string inputTestJsonStr = "{" + " \"tag\": \"input\", " + " \"attr\": [{ " + " \"type\": \"text\" " + " }, " + " { " + " \"placeholder\": \"please input\" " + " }, " + " { " + " \"maxlength\": \"100\" " + " }, " + " { " + " \"enterkeytype\": \"next\" " + " }, " + " { " + " \"disabled\": \"true\" " + " }, " + " { " + " \"headerIcon\": \"test.png\" " + " }, " + " { " + " \"obscure\": \"true\" " + " }], " + " \"style\": [{ " + " \"color\" : \"#12345678\" " + " }, " + " { " + " \"cursorColor\": \"#12345678\" " + " }, " + " { " + " \"placeholderColor\": \"#12345678\" " + " }, " + " { " + " \"fontSize\": \"30.0\" " + " }, " + " { " + " \"fontWeight\": \"600\" " + " }, " + " { " + " \"fontFamily\": \"serif\" " + " }] " + "}"; + /** + * @tc.steps: step1. Construct string with all style and attribute, then create input node with it + * @tc.expected: step1. input component are created successfully. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(inputTestJsonStr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + ASSERT_TRUE(boxChild); + +#ifndef WEARABLE_PRODUCT + RefPtr textareaComponent = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(textareaComponent); + + /** + * @tc.steps: step2. Check styles and attributes of created input node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + EXPECT_EQ(textareaComponent->GetPlaceholder(), INPUT_PLACEHOLDER_VALUE); + EXPECT_EQ(textareaComponent->GetPlaceholderColor(), Color::FromString(INPUT_PLACEHOLDER_COLOR_STR_VALUE)); + EXPECT_EQ(textareaComponent->GetCursorColor(), Color::FromString(INPUT_CURCOR_COLOR_STR_VALUE)); + EXPECT_EQ(textareaComponent->GetMaxLength(), INPUT_MAXLENGTH_VALUE); + EXPECT_EQ(textareaComponent->GetAction(), INPUT_TEXTINPUTACTION_VALUE); + EXPECT_EQ(textareaComponent->IsEnabled(), false); + EXPECT_EQ(textareaComponent->NeedObscure(), true); + EXPECT_EQ(textareaComponent->GetIconImage(), INPUT_HEADER_ICON); + + auto style = textareaComponent->GetTextStyle(); + EXPECT_EQ(style.GetTextColor(), Color::FromString(INPUT_COLOR_STR_VALUE)); + EXPECT_EQ(style.GetFontSize(), INPUT_FONT_SIZE_VALUE); + EXPECT_EQ(style.GetFontWeight(), INPUT_FONT_WEIGHT_VALUE); + EXPECT_EQ(style.GetFontFamilies()[0], INPUT_FONT_FAMILY_VALUE); +#endif +} + +/** + * @tc.name: DomInputCreatorTest003 + * @tc.desc: Test input component are created with event. + * @tc.type: FUNC + * @tc.require: AR000DD674 AR000BDI8S + * @tc.author: hushilong + */ +HWTEST_F(DomInputTest, DomInputCreatorTest003, TestSize.Level1) +{ + const std::string inputTestJsonStr = "{" + " \"tag\": \"input\", " + " \"attr\": [{ " + " \"type\": \"text\" " + " }], " + " \"event\": [ " + " \"change\", " + " \"enterkeyclick\" " + " ] " + "}"; + /** + * @tc.steps: step1. Construct string with event, then create input node with it + * @tc.expected: step1. input component are created successfully. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(inputTestJsonStr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + ASSERT_TRUE(boxChild); + +#ifndef WEARABLE_PRODUCT + RefPtr textareaComponent = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(textareaComponent); + + /** + * @tc.steps: step2. Check event of created input node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + EXPECT_EQ(textareaComponent->GetOnTextChange(), std::to_string(domNodeRoot->GetNodeId())); + EXPECT_EQ(textareaComponent->GetOnFinishInput(), std::to_string(domNodeRoot->GetNodeId())); +#endif +} + +/** + * @tc.name: DomInputCreatorTest004 + * @tc.desc: Test button component are created as default. + * @tc.type: FUNC + * @tc.require: AR000DD674 + * @tc.author: hushilong + */ +HWTEST_F(DomInputTest, DomInputCreatorTest004, TestSize.Level1) +{ + const std::string inputTestJsonStr = "{" + " \"tag\": \"input\", " + " \"attr\": [{ " + " \"type\": \"button\" " + " }, " + " { " + " \"name\": \"input name\" " + " }] " + "}"; + /** + * @tc.steps: step1. Construct string without style and attribute, then create input node with it + * @tc.expected: step1. input component are created successfully. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(inputTestJsonStr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + ASSERT_TRUE(boxChild); + RefPtr buttonComponent = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(buttonComponent); + + /** + * @tc.steps: step2. Check styles and attributes of created input node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + RefPtr theme = THEME_MANAGER->GetTheme(); + ASSERT_TRUE(theme); + + EXPECT_EQ(buttonComponent->GetType(), ButtonType::NORMAL); + EXPECT_EQ(buttonComponent->GetWidth(), BUTTON_WIDTH_INIT); +} + +/** + * @tc.name: DomInputCreatorTest005 + * @tc.desc: Test button component are created with all style and attribute. + * @tc.type: FUNC + * @tc.require: AR000DD674 + * @tc.author: hushilong + */ +HWTEST_F(DomInputTest, DomInputCreatorTest005, TestSize.Level1) +{ + const std::string inputTestJsonStr = "{" + " \"tag\": \"input\", " + " \"attr\": [{ " + " \"type\": \"button\" " + " }, " + " { " + " \"name\": \"input name\" " + " }, " + " { " + " \"value\": \"input value\" " + " }, " + " { " + " \"disabled\": \"true\" " + " }], " + " \"style\": [{ " + " \"color\" : \"#12345678\" " + " }, " + " { " + " \"fontSize\": \"30.0\" " + " }, " + " { " + " \"fontWeight\": \"600\" " + " }, " + " { " + " \"width\": \"100\" " + " }, " + " { " + " \"height\": \"50\" " + " }, " + " { " + " \"fontFamily\": \"serif\" " + " }] " + "}"; + /** + * @tc.steps: step1. Construct string without style and attribute, then create input node with it + * @tc.expected: step1. input component are created successfully. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(inputTestJsonStr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + ASSERT_TRUE(boxChild); + RefPtr buttonComponent = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(buttonComponent); + + /** + * @tc.steps: step2. Check styles and attributes of created input node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + EXPECT_EQ(buttonComponent->GetType(), ButtonType::NORMAL); + EXPECT_EQ(buttonComponent->GetDisabledState(), true); + EXPECT_EQ(boxChild->GetWidthDimension().Value(), INPUT_WIDTH_VALUE.Value()); + EXPECT_EQ(boxChild->GetHeightDimension().Value(), INPUT_HEIGHT_VALUE.Value()); +} + +/** + * @tc.name: DomInputCreatorTest006 + * @tc.desc: Test input component are created with event. + * @tc.type: FUNC + * @tc.require: AR000DD674 + * @tc.author: hushilong + */ +HWTEST_F(DomInputTest, DomInputCreatorTest006, TestSize.Level1) +{ + const std::string inputTestJsonStr = "{" + " \"tag\": \"input\", " + " \"attr\": [{ " + " \"type\": \"button\" " + " }], " + " \"event\": [ " + " \"click\" " + " ] " + "}"; + /** + * @tc.steps: step1. Construct string with event, then create input node with it + * @tc.expected: step1. input component are created successfully. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(inputTestJsonStr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + ASSERT_TRUE(boxChild); + RefPtr buttonComponent = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(buttonComponent); + + /** + * @tc.steps: step2. Check event of created input node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + EXPECT_EQ(buttonComponent->GetClickedEventId(), std::to_string(domNodeRoot->GetNodeId())); +} + +/** + * @tc.name: DomInputCreatorTest007 + * @tc.desc: Test checkbox component are created as default. + * @tc.type: FUNC + * @tc.require: AR000DD674 + * @tc.author: hushilong + */ +HWTEST_F(DomInputTest, DomInputCreatorTest007, TestSize.Level1) +{ + const std::string inputTestJsonStr = "{" + " \"tag\": \"input\", " + " \"attr\": [{ " + " \"type\": \"checkbox\" " + " }] " + "}"; + /** + * @tc.steps: step1. Construct string without style and attribute, then create input node with it + * @tc.expected: step1. input component are created successfully. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(inputTestJsonStr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + ASSERT_TRUE(boxChild); + RefPtr checkboxComponent = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(checkboxComponent); + + /** + * @tc.steps: step2. Check styles and attributes of created input node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + RefPtr theme = THEME_MANAGER->GetTheme(); + ASSERT_TRUE(theme); + + EXPECT_EQ(checkboxComponent->GetValue(), INPUT_CHECKED_VALUE_DEFAULT); + EXPECT_EQ(checkboxComponent->GetWidth(), theme->GetWidth()); + EXPECT_EQ(checkboxComponent->GetHeight(), theme->GetHeight()); +} + +/** + * @tc.name: DomInputCreatorTest008 + * @tc.desc: Test checkbox component are created with all style and attribute. + * @tc.type: FUNC + * @tc.require: AR000DD674 + * @tc.author: hushilong + */ +HWTEST_F(DomInputTest, DomInputCreatorTest008, TestSize.Level1) +{ + const std::string inputTestJsonStr = "{" + " \"tag\": \"input\", " + " \"attr\": [{ " + " \"type\": \"checkbox\" " + " }, " + " { " + " \"checked\": \"true\" " + " }, " + " { " + " \"name\": \"input name\" " + " }, " + " { " + " \"value\": \"input value\" " + " }, " + " { " + " \"disabled\": \"true\" " + " }], " + " \"style\": [{ " + " \"width\": \"100\" " + " }, " + " { " + " \"height\": \"50\" " + " }] " + "}"; + /** + * @tc.steps: step1. Construct string without style and attribute, then create input node with it + * @tc.expected: step1. input component are created successfully. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(inputTestJsonStr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + ASSERT_TRUE(boxChild); + RefPtr checkboxComponent = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(checkboxComponent); + + /** + * @tc.steps: step2. Check styles and attributes of created input node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + EXPECT_EQ(checkboxComponent->IsDisabled(), true); + EXPECT_EQ(checkboxComponent->GetValue(), INPUT_CHECKED_VALUE); + EXPECT_EQ(boxChild->GetWidthDimension().Value(), INPUT_WIDTH_VALUE.Value()); + EXPECT_EQ(boxChild->GetHeightDimension().Value(), INPUT_HEIGHT_VALUE.Value()); +} + +/** + * @tc.name: DomInputCreatorTest009 + * @tc.desc: Test input component are created with event. + * @tc.type: FUNC + * @tc.require: AR000DD674 + * @tc.author: hushilong + */ +HWTEST_F(DomInputTest, DomInputCreatorTest009, TestSize.Level1) +{ + const std::string inputTestJsonStr = "{" + " \"tag\": \"input\", " + " \"attr\": [{ " + " \"type\": \"checkbox\" " + " }], " + " \"event\": [ " + " \"change\" " + " ] " + "}"; + /** + * @tc.steps: step1. Construct string with event, then create input node with it + * @tc.expected: step1. input component are created successfully. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(inputTestJsonStr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + ASSERT_TRUE(boxChild); + RefPtr checkboxComponent = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(checkboxComponent); + + /** + * @tc.steps: step2. Check event of created input node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + EXPECT_EQ(checkboxComponent->GetChangeEvent(), std::to_string(domNodeRoot->GetNodeId())); +} + +/** + * @tc.name: DomInputCreatorTest010 + * @tc.desc: Test radio component are created as default. + * @tc.type: FUNC + * @tc.require: AR000DD674 + * @tc.author: hushilong + */ +HWTEST_F(DomInputTest, DomInputCreatorTest010, TestSize.Level1) +{ + const std::string inputTestJsonStr = "{" + " \"tag\": \"input\", " + " \"attr\": [{ " + " \"type\": \"radio\" " + " }] " + "}"; + /** + * @tc.steps: step1. Construct string without style and attribute, then create input node with it + * @tc.expected: step1. input component are created successfully. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(inputTestJsonStr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + ASSERT_TRUE(boxChild); + RefPtr> radioComponent = + AceType::DynamicCast>(boxChild->GetChild()); + ASSERT_TRUE(radioComponent); + + /** + * @tc.steps: step2. Check styles and attributes of created input node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + RefPtr theme = THEME_MANAGER->GetTheme(); + ASSERT_TRUE(theme); + + EXPECT_EQ(radioComponent->GetWidth(), theme->GetWidth()); + EXPECT_EQ(radioComponent->GetHeight(), theme->GetHeight()); +} + +/** + * @tc.name: DomInputCreatorTest012 + * @tc.desc: Test input component are created with event. + * @tc.type: FUNC + * @tc.require: AR000DD674 + * @tc.author: hushilong + */ +HWTEST_F(DomInputTest, DomInputCreatorTest012, TestSize.Level1) +{ + const std::string inputTestJsonStr = "{" + " \"tag\": \"input\", " + " \"attr\": [{ " + " \"type\": \"radio\" " + " }], " + " \"event\": [ \"change\" ] " + "}"; + /** + * @tc.steps: step1. Construct string with event, then create input node with it + * @tc.expected: step1. input component are created successfully. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(inputTestJsonStr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + ASSERT_TRUE(boxChild); + RefPtr> radioComponent = + AceType::DynamicCast>(boxChild->GetChild()); + ASSERT_TRUE(radioComponent); + + /** + * @tc.steps: step2. Check event of created input node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + EXPECT_EQ(radioComponent->GetChangeEvent(), std::to_string(domNodeRoot->GetNodeId())); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/test/unittest/jsfrontend/domlabel/BUILD.gn b/frameworks/bridge/test/unittest/jsfrontend/domlabel/BUILD.gn new file mode 100644 index 00000000..0f940597 --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/domlabel/BUILD.gn @@ -0,0 +1,57 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/jsframework/label" + +ohos_unittest("DomLabelTest") { + module_out_path = module_output_path + + sources = [ + "../dom_node_factory.cpp", + "dom_label_test.cpp", + ] + + configs = [ + ":config_domnode_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + external_deps = [ "hiviewdfx_hilog_native:libhilog" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_domnode_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":DomLabelTest" ] +} diff --git a/frameworks/bridge/test/unittest/jsfrontend/domlabel/dom_label_test.cpp b/frameworks/bridge/test/unittest/jsfrontend/domlabel/dom_label_test.cpp new file mode 100644 index 00000000..ed516680 --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/domlabel/dom_label_test.cpp @@ -0,0 +1,186 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/json/json_util.h" +#include "base/utils/utils.h" +#include "core/components/common/layout/constants.h" +#include "core/components/text/text_theme.h" +#include "core/components/theme/theme_manager.h" +#include "frameworks/bridge/common/dom/dom_div.h" +#include "frameworks/bridge/common/dom/dom_document.h" +#include "frameworks/bridge/common/dom/dom_label.h" +#include "frameworks/bridge/test/unittest/jsfrontend/dom_node_factory.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace::Framework { +namespace { + +const std::string TEXT_DATA = "ohos1234@?!"; +constexpr int32_t TEST_OVER_FLOW = 1; +constexpr double TEST_FONT_SIZE = 50.0; +constexpr int32_t TEST_FONT_WEIGHT = 1; +const std::string TEST_COLOR_VALUE = "#0x0000ff"; +constexpr double TEST_LINE_HEIGHT = 11.0; +constexpr int32_t TEST_FONT_STYLE = 1; +constexpr int32_t TEST_TEXT_DECORATION = 2; +constexpr uint32_t TEST_MAX_LINE = 10; +constexpr double TEST_LETTER_SPACING = 11.0; +constexpr int32_t TEST_TEXT_ALIGN = 1; +const std::string TEST_FONT_FAMILY = "serif"; +constexpr int32_t DEFAULT_OVER_FLOW = 0; +constexpr int32_t DEFAULT_TEXT_ALIGN = 4; + +} // namespace + +class DomLabelTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); +}; + +void DomLabelTest::SetUpTestCase() {} +void DomLabelTest::TearDownTestCase() {} +void DomLabelTest::SetUp() {} +void DomLabelTest::TearDown() {} + +/** + * @tc.name: DomLabelTest001 + * @tc.desc: Verify that DomLabel can be created. + * @tc.type: FUNC + * @tc.require: AR000DAR18 + * @tc.author: hushilong + */ +HWTEST_F(DomLabelTest, DomLabelTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of DomLabel without attributes and style. + */ + const std::string jsonTextStr = "" + "{ " + " \"tag\": \"text\" " + "}"; + /** + * @tc.steps: step2. call JsonUtil interface, create DomLabel and set its style. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonTextStr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + RefPtr textChild = AceType::DynamicCast(boxChild->GetChild()); + const auto textStyle = textChild->GetTextStyle(); + + /** + * @tc.steps: step3. Check all the attributes matched with the default values. + * @tc.expected: step3. All the attributes are matched. + */ + auto themeManager = AceType::MakeRefPtr(); + RefPtr theme = themeManager->GetTheme(); + ASSERT_TRUE(theme); + EXPECT_TRUE(static_cast(textChild->GetTextStyle().GetTextOverflow()) == DEFAULT_OVER_FLOW); + EXPECT_EQ(textStyle.GetFontSize().Unit(), theme->GetTextStyle().GetFontSize().Unit()); + EXPECT_TRUE(NearEqual(textStyle.GetFontSize().Value(), theme->GetTextStyle().GetFontSize().Value())); + EXPECT_EQ(textStyle.GetFontWeight(), theme->GetTextStyle().GetFontWeight()); + EXPECT_EQ(textStyle.GetTextColor().GetValue(), theme->GetTextStyle().GetTextColor().GetValue()); + EXPECT_EQ(textStyle.GetLineHeight(), theme->GetTextStyle().GetLineHeight()); + EXPECT_EQ(textStyle.GetFontStyle(), theme->GetTextStyle().GetFontStyle()); + EXPECT_EQ(textStyle.GetTextDecoration(), theme->GetTextStyle().GetTextDecoration()); + EXPECT_TRUE(NearEqual(textStyle.GetLetterSpacing(), theme->GetTextStyle().GetLetterSpacing())); + EXPECT_EQ(static_cast(textChild->GetTextStyle().GetTextAlign()), DEFAULT_TEXT_ALIGN); +} + +/** + * @tc.name: DomLabelTest002 + * @tc.desc: Verify that DomLabel can be set styles. + * @tc.type: FUNC + * @tc.require: AR000DAR18 + * @tc.author: hushilong + */ +HWTEST_F(DomLabelTest, DomLabelTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of DomLabel with all attributes. + */ + const std::string jsonTextStr = "" + "{ " + " \"tag\": \"text\", " + " \"attr\" : [{ " + " \"value\" : \"ohos1234@?!\" " + " }], " + " \"style\": [{ " + " \"textOverflow\":\"ellipsis\" " + " }," + " { " + " \"fontSize\":\"50.0\" " + " }, " + " {" + " \"fontWeight\":\"200\" " + " }," + " {" + " \"color\":\"#0x0000ff\" " + " }," + " {" + " \"lineHeight\":\"11.0\" " + " }," + " {" + " \"fontStyle\":\"italic\" " + " }," + " {" + " \"textDecoration\":\"overline\"" + " }," + " { " + " \"maxLines\":\"10\" " + " }," + " {" + " \"letterSpacing\":\"11.0\" " + " }," + " { " + " \"textAlign\":\"right\" " + " }," + " { " + " \"fontFamily\":\"serif\" " + " }]" + "}"; + + /** + * @tc.steps: step2. call JsonUtil interface, create DomLabel and set its style. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonTextStr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + RefPtr textChild = AceType::DynamicCast(boxChild->GetChild()); + const auto textStyle = textChild->GetTextStyle(); + + /** + * @tc.steps: step3. Check all the attributes matched. + * @tc.expected: step3. All the attributes are matched. + */ + EXPECT_EQ(textChild->GetData(), TEXT_DATA); + EXPECT_TRUE(static_cast(textChild->GetTextStyle().GetTextOverflow()) == TEST_OVER_FLOW); + EXPECT_TRUE(NearEqual(textStyle.GetFontSize().Value(), TEST_FONT_SIZE)); + EXPECT_EQ(static_cast(textStyle.GetFontWeight()), TEST_FONT_WEIGHT); + EXPECT_EQ(textStyle.GetTextColor(), Color::FromString(TEST_COLOR_VALUE)); + EXPECT_TRUE(NearEqual(textStyle.GetLineHeight().Value(), TEST_LINE_HEIGHT)); + EXPECT_TRUE(NearEqual(static_cast(textStyle.GetFontStyle()), TEST_FONT_STYLE)); + EXPECT_TRUE(NearEqual(static_cast(textStyle.GetTextDecoration()), TEST_TEXT_DECORATION)); + EXPECT_TRUE(NearEqual(textChild->GetTextStyle().GetMaxLines(), TEST_MAX_LINE)); + EXPECT_TRUE(NearEqual(textStyle.GetLetterSpacing(), TEST_LETTER_SPACING)); + EXPECT_EQ(static_cast(textChild->GetTextStyle().GetTextAlign()), TEST_TEXT_ALIGN); + EXPECT_EQ(textStyle.GetFontFamilies()[0], TEST_FONT_FAMILY); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/test/unittest/jsfrontend/domlist/BUILD.gn b/frameworks/bridge/test/unittest/jsfrontend/domlist/BUILD.gn new file mode 100644 index 00000000..cf041576 --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/domlist/BUILD.gn @@ -0,0 +1,57 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/jsframework/list" + +ohos_unittest("DomListTest") { + module_out_path = module_output_path + + sources = [ + "../dom_node_factory.cpp", + "dom_list_test.cpp", + ] + + configs = [ + ":config_domnode_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + external_deps = [ "hiviewdfx_hilog_native:libhilog" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_domnode_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":DomListTest" ] +} diff --git a/frameworks/bridge/test/unittest/jsfrontend/domlist/dom_list_test.cpp b/frameworks/bridge/test/unittest/jsfrontend/domlist/dom_list_test.cpp new file mode 100644 index 00000000..6d2ccaf3 --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/domlist/dom_list_test.cpp @@ -0,0 +1,509 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "gtest/gtest.h" + +#include "core/components/common/layout/constants.h" +#include "core/components/scroll/scroll_fade_effect.h" +#include "frameworks/bridge/common/dom/dom_document.h" +#include "frameworks/bridge/common/dom/dom_list_item_group.h" +#include "frameworks/bridge/test/unittest/jsfrontend/dom_node_factory.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace::Framework { +namespace { + +const std::string LIST_MOTION_TEST_001 = "" + "{ " + " \"tag\": \"list\" " + "}"; + +const std::string LIST_MOTION_TEST_002 = "" + "{ " + " \"tag\": \"list\" , " + " \"attr\": [{ " + " \"scrolleffect\" : \"fade\" " + " }] " + "}"; + +const std::string LIST_MOTION_TEST_003 = "" + "{ " + " \"tag\": \"list\" , " + " \"attr\": [{ " + " \"scrolleffect\" : \"fade\" " + " }]," + " \"style\": [{" + " \"fadeColor\" : \"#FF0000\" " + " }] " + "}"; + +const std::string LIST_MOTION_TEST_004 = "" + "{ " + " \"tag\": \"list\" , " + " \"attr\": [{ " + " \"scrolleffect\" : \"no\" " + " }] " + "}"; + +const std::string LIST_MOTION_TEST_005 = "" + "{ " + " \"tag\": \"list\" , " + " \"attr\": [{ " + " \"scrollbar\" : \"off\" " + " }] " + "}"; + +const std::string LIST_MOTION_TEST_006 = "" + "{ " + " \"tag\": \"list\" , " + " \"attr\": [{ " + " \"scrollbar\" : \"auto\" " + " }] " + "}"; + +const std::string LIST_MOTION_TEST_007 = "" + "{ " + " \"tag\": \"list\" , " + " \"attr\": [{ " + " \"scrollbar\" : \"on\" " + " }, " + " { " + " \"shapemode\" : \"round\" " + " }] " + "}"; + +const std::string LIST_MOTION_TEST_008 = "" + "{ " + " \"tag\": \"list\" , " + " \"style\": [{ " + " \"itemExtent\" : \"60px\" " + " }] " + "}"; + +const std::string LIST_MOTION_TEST_009 = "" + "{ " + " \"tag\": \"list\" , " + " \"style\": [{ " + " \"itemExtent\" : \"20%\" " + " }] " + "}"; + +const std::string ITEM_GROUP_TEST_010 = "" + "{ " + " \"tag\": \"list-item-group\" " + "}"; + + +const std::string LIST_UPDATE_TEST_001 = "" + "{ " + " \"tag\": \"list\" , " + " \"attr\": [{ " + " \"updateeffect\" : \"false\" " + " }] " + "}"; + +const std::string LIST_UPDATE_TEST_002 = "" + "{ " + " \"tag\": \"list\" , " + " \"attr\": [{ " + " \"updateeffect\" : \"true\" " + " }] " + "}"; + +} // namespace + +class DomListTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); +}; + +void DomListTest::SetUpTestCase() {} +void DomListTest::TearDownTestCase() {} +void DomListTest::SetUp() {} +void DomListTest::TearDown() {} + +/** + * @tc.name: DomListMotionTest001 + * @tc.desc: Test list node are created as expected. + * @tc.type: FUNC + * @tc.require: AR000DQ1UR + * @tc.author: jinwuwen + */ +HWTEST_F(DomListTest, DomListMotionTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create list node with it. + * @tc.expected: step1. tabs node are created successfully. + */ + auto list = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(LIST_MOTION_TEST_001); + ASSERT_TRUE(list != nullptr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(list); + RefPtr listComponent = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(listComponent != nullptr); + + /** + * @tc.steps: step2. Check styles and attributes of created tabs node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + RefPtr scrollEffect = listComponent->GetScrollEffect(); + ASSERT_TRUE(scrollEffect != nullptr); + ASSERT_TRUE(scrollEffect->IsSpringEffect()); +} + +/** + * @tc.name: DomListMotionTest002 + * @tc.desc: Test list node are created as expected. + * @tc.type: FUNC + * @tc.require: AR000DQ1UR + * @tc.author: jinwuwen + */ +HWTEST_F(DomListTest, DomListMotionTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create list node with it. + * @tc.expected: step1. tabs node are created successfully. + */ + auto list = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(LIST_MOTION_TEST_002); + ASSERT_TRUE(list != nullptr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(list); + RefPtr listComponent = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(listComponent != nullptr); + + /** + * @tc.steps: step2. Check styles and attributes of created tabs node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + RefPtr scrollEffect = listComponent->GetScrollEffect(); + RefPtr fadeEffect = AceType::DynamicCast(scrollEffect); + ASSERT_TRUE(fadeEffect != nullptr); + ASSERT_TRUE(fadeEffect->IsFadeEffect()); + ASSERT_TRUE(fadeEffect->GetFadeColor() == Color::GRAY); +} + +/** + * @tc.name: DomListMotionTest003 + * @tc.desc: Test list node are created as expected. + * @tc.type: FUNC + * @tc.require: AR000DQ1UR + * @tc.author: jinwuwen + */ +HWTEST_F(DomListTest, DomListMotionTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create list node with it. + * @tc.expected: step1. tabs node are created successfully. + */ + auto list = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(LIST_MOTION_TEST_003); + ASSERT_TRUE(list != nullptr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(list); + RefPtr listComponent = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(listComponent != nullptr); + + /** + * @tc.steps: step2. Check styles and attributes of created tabs node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + RefPtr scrollEffect = listComponent->GetScrollEffect(); + RefPtr fadeEffect = AceType::DynamicCast(scrollEffect); + ASSERT_TRUE(fadeEffect != nullptr); + ASSERT_TRUE(fadeEffect->IsFadeEffect()); + ASSERT_TRUE(fadeEffect->GetFadeColor() == Color::RED); +} + +/** + * @tc.name: DomListMotionTest004 + * @tc.desc: Test list node are created as expected. + * @tc.type: FUNC + * @tc.require: AR000DQ1UR + * @tc.author: jinwuwen + */ +HWTEST_F(DomListTest, DomListMotionTest004, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create list node with it. + * @tc.expected: step1. tabs node are created successfully. + */ + auto list = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(LIST_MOTION_TEST_004); + ASSERT_TRUE(list != nullptr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(list); + RefPtr listComponent = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(listComponent != nullptr); + + /** + * @tc.steps: step2. Check styles and attributes of created tabs node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + RefPtr scrollEffect = listComponent->GetScrollEffect(); + ASSERT_TRUE(scrollEffect != nullptr); + ASSERT_TRUE(scrollEffect->GetEdgeEffect() == EdgeEffect::NONE); +} + +/** + * @tc.name: DomListScrollBarTest001 + * @tc.desc: Test list node are created as expected. + * @tc.type: FUNC + * @tc.require: AR000DQ1UJ + * @tc.author: chenlien + */ +HWTEST_F(DomListTest, DomListScrollBarTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create list node with it. + * @tc.expected: step1. tabs node are created successfully. + */ + auto list = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(LIST_MOTION_TEST_005); + ASSERT_TRUE(list != nullptr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(list); + RefPtr listComponent = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(listComponent != nullptr); + + /** + * @tc.steps: step2. Check styles and attributes of created tabs node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + RefPtr scrollBar = listComponent->GetScrollBar(); + ASSERT_TRUE(scrollBar != nullptr); + ASSERT_TRUE(scrollBar->GetDisplayMode() == DisplayMode::OFF); +} + + +/** + * @tc.name: DomListScrollBarTest002 + * @tc.desc: Test list node are created as expected. + * @tc.type: FUNC + * @tc.require: AR000DQ1UJ + * @tc.author: chenlien + */ +HWTEST_F(DomListTest, DomListScrollBarTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create list node with it. + * @tc.expected: step1. tabs node are created successfully. + */ + auto list = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(LIST_MOTION_TEST_006); + ASSERT_TRUE(list != nullptr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(list); + RefPtr listComponent = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(listComponent != nullptr); + + /** + * @tc.steps: step2. Check styles and attributes of created tabs node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + RefPtr scrollBar = listComponent->GetScrollBar(); + ASSERT_TRUE(scrollBar != nullptr); + ASSERT_TRUE(scrollBar->GetDisplayMode() == DisplayMode::AUTO); +} + +/** + * @tc.name: DomListScrollBarPolymorphismTest001 + * @tc.desc: Test list node are created as expected. + * @tc.type: FUNC + * @tc.require: AR000DQ1UM + * @tc.author: chenlien + */ +HWTEST_F(DomListTest, DomListScrollBarPolymorphismTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create list node with it. + * @tc.expected: step1. tabs node are created successfully. + */ + auto list = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(LIST_MOTION_TEST_007); + ASSERT_TRUE(list != nullptr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(list); + RefPtr listComponent = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(listComponent != nullptr); + + /** + * @tc.steps: step2. Check styles and attributes of created tabs node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + RefPtr scrollBar = listComponent->GetScrollBar(); + ASSERT_TRUE(scrollBar != nullptr); + ASSERT_TRUE(scrollBar->GetDisplayMode() == DisplayMode::ON); + ASSERT_TRUE(scrollBar->GetShapeMode() == ShapeMode::ROUND); +} + +/** + * @tc.name: DomListItemExtentTest001 + * @tc.desc: Test list set item extent with length. + * @tc.type: FUNC + * @tc.require: AR000DQ1UD + * @tc.author: zhongjianfei + */ +HWTEST_F(DomListTest, DomListItemExtentTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create list node with it. + * @tc.expected: step1. list node are created successfully. + */ + auto list = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(LIST_MOTION_TEST_008); + ASSERT_TRUE(list != nullptr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(list); + RefPtr listComponent = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(listComponent != nullptr); + + /** + * @tc.steps: step2. Check styles and attributes of created list node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + Dimension itemExtent = listComponent->GetItemExtent(); + ASSERT_TRUE(itemExtent.IsValid()); + ASSERT_TRUE(itemExtent.Unit() == DimensionUnit::PX); + ASSERT_TRUE(NearEqual(itemExtent.Value(), 60.0)); +} + +/** + * @tc.name: DomListItemExtentTest002 + * @tc.desc: Test list set item extent with percentage. + * @tc.type: FUNC + * @tc.require: AR000DQ1UD + * @tc.author: zhongjianfei + */ +HWTEST_F(DomListTest, DomListItemExtentTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create list node with it. + * @tc.expected: step1. list node are created successfully. + */ + auto list = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(LIST_MOTION_TEST_009); + ASSERT_TRUE(list != nullptr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(list); + RefPtr listComponent = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(listComponent != nullptr); + + /** + * @tc.steps: step2. Check styles and attributes of created list node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + Dimension itemExtent = listComponent->GetItemExtent(); + ASSERT_TRUE(itemExtent.IsValid()); + ASSERT_TRUE(itemExtent.Unit() == DimensionUnit::PERCENT); + ASSERT_TRUE(NearEqual(itemExtent.Value(), 0.2)); +} + +/** + * @tc.name: DomListScrollerTest001 + * @tc.desc: Test list node are created as expected. + * @tc.type: FUNC + * @tc.require: AR000DQ1V0 + * @tc.author: chenlien + */ +HWTEST_F(DomListTest, DomListScrollerTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create list node with it. + * @tc.expected: step1. tabs node are created successfully. + */ + auto list = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(LIST_MOTION_TEST_005); + ASSERT_TRUE(list != nullptr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(list); + RefPtr listComponent = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(listComponent != nullptr); + + /** + * @tc.steps: step2. Check styles and attributes of created tabs node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + auto positionController = listComponent->GetPositionController(); + ASSERT_TRUE(positionController != nullptr); + ASSERT_TRUE(NearZero(positionController->GetCurrentPosition())); +} + +/** + * @tc.name: AceListExpansion009 + * @tc.desc: Test list item group node are created as expected. + * @tc.type: FUNC + * @tc.require: AR000DQ1TE + * @tc.author: chenlien + */ +HWTEST_F(DomListTest, AceListExpansion009, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create list node with it. + * @tc.expected: step1. list item group node are created successfully. + */ + auto itemGroup = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(ITEM_GROUP_TEST_010); + ASSERT_TRUE(itemGroup != nullptr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(itemGroup); + RefPtr itemGroupComponent = + AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(itemGroupComponent != nullptr); + + /** + * @tc.steps: step2. Check styles and attributes of created list node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + ASSERT_TRUE(itemGroupComponent->GetDirection() == FlexDirection::COLUMN); + ASSERT_TRUE(!itemGroupComponent->GetExpand()); +} + +/** + * @tc.name: AceListUpdate001 + * @tc.desc: Test list item attr updateeffect can be set false. + * @tc.type: FUNC + * @tc.require: AR000DQ4FT + * @tc.author: chenlien + */ +HWTEST_F(DomListTest, AceListUpdate001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create list node with it. + * @tc.expected: step1. list node are created successfully. + */ + auto list = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(LIST_UPDATE_TEST_001); + ASSERT_TRUE(list != nullptr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(list); + RefPtr listComponent = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(listComponent != nullptr); + + /** + * @tc.steps: step2. Check styles and attributes of update effect. + * @tc.expected: step2. The styles and attributes are as expected. + */ + ASSERT_TRUE(listComponent->GetUpdateEffect() == false); +} + +/** + * @tc.name: AceListUpdate002 + * @tc.desc: Test list item attr updateeffect can be set true. + * @tc.type: FUNC + * @tc.require: AR000DQ4FT + * @tc.author: chenlien + */ +HWTEST_F(DomListTest, AceListUpdate002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create list node with it. + * @tc.expected: step1. list node are created successfully. + */ + auto list = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(LIST_UPDATE_TEST_002); + ASSERT_TRUE(list != nullptr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(list); + RefPtr listComponent = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(listComponent != nullptr); + + /** + * @tc.steps: step2. Check styles and attributes of update effect. + * @tc.expected: step2. The styles and attributes are as expected. + */ + ASSERT_TRUE(listComponent->GetUpdateEffect() == true); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/test/unittest/jsfrontend/domnode/BUILD.gn b/frameworks/bridge/test/unittest/jsfrontend/domnode/BUILD.gn new file mode 100644 index 00000000..94b61c97 --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/domnode/BUILD.gn @@ -0,0 +1,57 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/jsframework/node" + +ohos_unittest("DomNodeTest") { + module_out_path = module_output_path + + sources = [ + "../dom_node_factory.cpp", + "dom_node_test.cpp", + ] + + configs = [ + ":config_domnode_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + external_deps = [ "hiviewdfx_hilog_native:libhilog" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_domnode_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":DomNodeTest" ] +} diff --git a/frameworks/bridge/test/unittest/jsfrontend/domnode/dom_node_test.cpp b/frameworks/bridge/test/unittest/jsfrontend/domnode/dom_node_test.cpp new file mode 100644 index 00000000..4e47867a --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/domnode/dom_node_test.cpp @@ -0,0 +1,1298 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/json/json_util.h" +#include "base/utils/utils.h" +#include "core/components/common/layout/constants.h" +#include "frameworks/bridge/common/dom/dom_div.h" +#include "frameworks/bridge/common/dom/dom_document.h" +#include "frameworks/bridge/common/dom/dom_text.h" +#include "frameworks/bridge/test/unittest/jsfrontend/dom_node_factory.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace::Framework { +namespace { + +const double DIV_WIDTH = 200.0; +const double DIV_HEIGHT = 100.0; +const double DIV_PADDING_TOP = 10.0; +const double DIV_PADDING_RIGHT = 30.0; +const double DIV_PADDING_BOTTOM = 70.0; +const double DIV_PADDING_LEFT = 50.0; +const double DIV_MARGIN_TOP = 10.0; +const double DIV_MARGIN_RIGHT = 30.0; +const double DIV_MARGIN_BOTTOM = 70.0; +const double DIV_MARGIN_LEFT = 50.0; +const double DIV_BORDER_TOP_WIDTH = 10.0; +const double DIV_BORDER_RIGHT_WIDTH = 20.0; +const double DIV_BORDER_BOTTOM_WIDTH = 30.0; +const double DIV_BORDER_LEFT_WIDTH = 40.0; +const double DIV_BOX_SHADOW_H = 50.0; +const double DIV_BOX_SHADOW_V = 100.0; +const double DIV_BOX_SHADOW_BLUR = 10.0; +const double DIV_BOX_SHADOW_SPREAD = 20.0; +const std::string DIV_BOX_SHADOW_COLOR = "#ff0000"; +const std::string DIV_BORDER_TOP_COLOR = "#759432"; +const std::string DIV_BORDER_RIGHT_COLOR = "#521674"; +const std::string DIV_BORDER_BOTTOM_COLOR = "#631482"; +const std::string DIV_BORDER_LEFT_COLOR = "#264798"; +constexpr int32_t DIV_BORDER_STYLE = 2; +const double DIV_BORDER_TOP_LEFT_RADIUS = 10.0; +const double DIV_BORDER_TOP_RIGHT_RADIUS = 20.0; +const double DIV_BORDER_BOTTOM_RIGHT_RADIUS = 30.0; +const double DIV_BORDER_BOTTOM_LEFT_RADIUS = 40.0; +const std::string DIV_BACKGROUND_COLOR = "#759432"; +const std::string DIV_BACKGROUND_IMAGE_SRC = "picture/test2.jpg"; +const double DIV_BACKGROUND_IMAGE_SIZE = 200.0; +const double DIV_BACKGROUND_IMAGE_POSITION_VALUE_X = 100.0; +const double DIV_BACKGROUND_IMAGE_POSITION_VALUE_Y = 200.0; +constexpr int32_t DIV_BACKGROUND_IMAGE_POSITION_TYPE_X = 1; +constexpr int32_t DIV_BACKGROUND_IMAGE_POSITION_TYPE_Y = 1; +constexpr int32_t DIV_BACKGROUND_IMAGE_REPEAT = 1; +const std::string JSON_DIV_TEST_004 = "" + "{ " + " \"tag\": \"div\"," + " \"commonStyle\": [{ " + " \"borderTopWidth\": \"10px\" " + " }," + " {" + " \"borderRightWidth\": \"20px\" " + " }," + " {" + " \"borderBottomWidth\": \"30px\" " + " }," + " {" + " \"borderLeftWidth\": \"40px\" " + " }," + " {" + " \"borderStyle\": \"dotted\" " + " }," + " {" + " \"borderTopColor\": \"#759432\" " + " }," + " {" + " \"borderRightColor\": \"#521674\" " + " }," + " {" + " \"borderBottomColor\": \"#631482\" " + " }," + " {" + " \"borderLeftColor\": \"#264798\" " + " }]" + "}"; + +} // namespace + +class DomNodeTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); +}; + +void DomNodeTest::SetUpTestCase() {} +void DomNodeTest::TearDownTestCase() {} +void DomNodeTest::SetUp() {} +void DomNodeTest::TearDown() {} + +/** + * @tc.name: DomNodeTest001 + * @tc.desc: Verify that DomNode can be set width and height. + * @tc.type: FUNC + * @tc.require: SR000DD67J + * @tc.author: wuhaibin + */ +HWTEST_F(DomNodeTest, DomNodeTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of DomNode with two attributes: + * width, height. + */ + const std::string jsonDivStr = "" + "{ " + " \"tag\": \"div\"," + " \"commonStyle\": [{ " + " \"width\": \"200px\" " + " }," + " {" + " \"height\": \"100px\" " + " }]" + "}"; + /** + * @tc.steps: step2. call JsonUtil interface, create DomNode and set its commonStyle. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonDivStr); + auto boxChildComponent = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + double width = boxChildComponent->GetWidthDimension().Value(); + double height = boxChildComponent->GetHeightDimension().Value(); + + /** + * @tc.steps: step3. Verify the DomNode's commonStyle is set correctly. + * @tc.expected: step3. width is 200.0, height is 100.0 + */ + ASSERT_TRUE(domNodeRoot != nullptr); + EXPECT_TRUE(width == DIV_WIDTH); + EXPECT_TRUE(height == DIV_HEIGHT); +} + +/** + * @tc.name: DomNodeTest002 + * @tc.desc: Verify that DomNode can be set padding . + * @tc.type: FUNC + * @tc.require: SR000DD67J + * @tc.author: wuhaibin + */ +HWTEST_F(DomNodeTest, DomNodeTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of DomNode with four attributes: + * padding-top, padding-right, padding-bottom, padding-left. + */ + const std::string jsonDivStr = "" + "{ " + " \"tag\": \"div\"," + " \"commonStyle\": [{ " + " \"paddingTop\": \"10px\" " + " }," + " {" + " \"paddingRight\": \"30px\" " + " }," + " {" + " \"paddingBottom\": \"70px\" " + " }," + " {" + " \"paddingLeft\": \"50px\" " + " }]" + "}"; + /** + * @tc.steps: step2. call JsonUtil interface, create DomNode and set its commonStyle. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonDivStr); + auto boxChildComponent = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + double top = static_cast(boxChildComponent->GetPadding().Top().Value()); + double right = static_cast(boxChildComponent->GetPadding().Right().Value()); + double bottom = static_cast(boxChildComponent->GetPadding().Bottom().Value()); + double left = static_cast(boxChildComponent->GetPadding().Left().Value()); + + /** + * @tc.steps: step3. Verify the DomNode's commonStyle is set correctly. + * @tc.expected: step3. padding-top is 10, padding-right is 10, padding-bottom is 10, padding-left is 10, + */ + ASSERT_TRUE(domNodeRoot != nullptr); + EXPECT_TRUE(top == DIV_PADDING_TOP); + EXPECT_TRUE(right == DIV_PADDING_RIGHT); + EXPECT_TRUE(bottom == DIV_PADDING_BOTTOM); + EXPECT_TRUE(left == DIV_PADDING_LEFT); +} + +/** + * @tc.name: DomNodeTest003 + * @tc.desc: Verify that DomNode can be set margin . + * @tc.type: FUNC + * @tc.require: SR000DD67J + * @tc.author: wuhaibin + */ +HWTEST_F(DomNodeTest, DomNodeTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of DomNode with four attributes: + * margin-top, margin-right, margin-bottom, margin-left. + */ + const std::string jsonDivStr = "" + "{ " + " \"tag\": \"div\"," + " \"commonStyle\": [{ " + " \"marginTop\": \"10px\" " + " }," + " {" + " \"marginRight\": \"30px\" " + " }," + " {" + " \"marginBottom\": \"70px\" " + " }," + " {" + " \"marginLeft\": \"50px\" " + " }]" + "}"; + /** + * @tc.steps: step2. call JsonUtil interface, create DomNode and set its commonStyle. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonDivStr); + auto boxChildComponent = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + double top = static_cast(boxChildComponent->GetMargin().Top().Value()); + double right = static_cast(boxChildComponent->GetMargin().Right().Value()); + double bottom = static_cast(boxChildComponent->GetMargin().Bottom().Value()); + double left = static_cast(boxChildComponent->GetMargin().Left().Value()); + + /** + * @tc.steps: step3. Verify the DomNode's commonStyle is set correctly. + * @tc.expected: step3. margin-top is 10, margin-right is 10, margin-bottom is 10, margin-left is 10, + */ + ASSERT_TRUE(domNodeRoot != nullptr); + EXPECT_TRUE(top == DIV_MARGIN_TOP); + EXPECT_TRUE(right == DIV_MARGIN_RIGHT); + EXPECT_TRUE(bottom == DIV_MARGIN_BOTTOM); + EXPECT_TRUE(left == DIV_MARGIN_LEFT); +} + +/** + * @tc.name: DomNodeTest004 + * @tc.desc: Verify that DomNode can be set border. + * @tc.type: FUNC + * @tc.require: SR000DD67O + * @tc.author: liwenzhen + */ +HWTEST_F(DomNodeTest, DomNodeTest004, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of DomNode with border-related attributes: + * borderTopWidth, borderRightWidth, borderBottomWidth, borderLeftWidth, borderStyle, + * borderTopColor, borderRightColor, borderBottomColor, borderLeftColor. + */ + const std::string& jsonDivStr = JSON_DIV_TEST_004; + /** + * @tc.steps: step2. call JsonUtil interface, create DomNode and set its border-related common style. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonDivStr); + auto boxChildComponent = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + Border border = boxChildComponent->GetBackDecoration()->GetBorder(); + BorderEdge borderTopEdge = border.Top(); + BorderEdge borderRightEdge = border.Right(); + BorderEdge borderBottomEdge = border.Bottom(); + BorderEdge borderLeftEdge = border.Left(); + + /** + * @tc.steps: step3. Verify the DomNode's bordrt-related common styles can be set correctly. + * @tc.expected: step3. borderTopWidth is 10px, borderRightWidth is 20px, borderBottomWidth is 30px, + * borderLeftWidth is 40px, borderStyle is dotted, borderTopColor is #759432, borderRightColor is #521674, + * borderBottomColor is #631482, borderLeftColor is #264798. + */ + ASSERT_TRUE(domNodeRoot != nullptr); + EXPECT_EQ(borderTopEdge.GetWidth().Value(), DIV_BORDER_TOP_WIDTH); + EXPECT_EQ(borderRightEdge.GetWidth().Value(), DIV_BORDER_RIGHT_WIDTH); + EXPECT_EQ(borderBottomEdge.GetWidth().Value(), DIV_BORDER_BOTTOM_WIDTH); + EXPECT_EQ(borderLeftEdge.GetWidth().Value(), DIV_BORDER_LEFT_WIDTH); + EXPECT_EQ(borderTopEdge.GetColor(), Color::FromString(DIV_BORDER_TOP_COLOR)); + EXPECT_EQ(borderRightEdge.GetColor(), Color::FromString(DIV_BORDER_RIGHT_COLOR)); + EXPECT_EQ(borderBottomEdge.GetColor(), Color::FromString(DIV_BORDER_BOTTOM_COLOR)); + EXPECT_EQ(borderLeftEdge.GetColor(), Color::FromString(DIV_BORDER_LEFT_COLOR)); + EXPECT_EQ(static_cast(borderTopEdge.GetBorderStyle()), DIV_BORDER_STYLE); + EXPECT_EQ(static_cast(borderRightEdge.GetBorderStyle()), DIV_BORDER_STYLE); + EXPECT_EQ(static_cast(borderBottomEdge.GetBorderStyle()), DIV_BORDER_STYLE); + EXPECT_EQ(static_cast(borderLeftEdge.GetBorderStyle()), DIV_BORDER_STYLE); +} + +/** + * @tc.name: DomNodeTest005 + * @tc.desc: Verify that DomNode can be set border radius. + * @tc.type: FUNC + * @tc.require: SR000DD67O + * @tc.author: liwenzhen + */ +HWTEST_F(DomNodeTest, DomNodeTest005, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of DomNode with border radius attributes: + * borderTopLeftRadius, borderTopRightRadius, borderBottomRightRadius, borderBottomLeftRadius. + */ + const std::string jsonDivStr = "" + "{ " + " \"tag\": \"div\"," + " \"commonStyle\": [{ " + " \"borderTopLeftRadius\": \"10px\" " + " }," + " {" + " \"borderTopRightRadius\": \"20px\" " + " }," + " {" + " \"borderBottomRightRadius\": \"30px\" " + " }," + " {" + " \"borderBottomLeftRadius\": \"40px\" " + " }]" + "}"; + /** + * @tc.steps: step2. call JsonUtil interface, create DomNode and set its border radius common style. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonDivStr); + auto boxChildComponent = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + Border border = boxChildComponent->GetBackDecoration()->GetBorder(); + + /** + * @tc.steps: step3. Verify the DomNode's bordrt radius common styles can be set correctly. + * @tc.expected: step3. borderTopLeftRadius is 10px, borderTopRightRadius is 20px, + * borderBottomRightRadius is 30px, borderBottomLeftRadius is 40px. + */ + ASSERT_TRUE(domNodeRoot != nullptr); + EXPECT_EQ(border.TopLeftRadius(), Radius(DIV_BORDER_TOP_LEFT_RADIUS)); + EXPECT_EQ(border.TopRightRadius(), Radius(DIV_BORDER_TOP_RIGHT_RADIUS)); + EXPECT_EQ(border.BottomRightRadius(), Radius(DIV_BORDER_BOTTOM_RIGHT_RADIUS)); + EXPECT_EQ(border.BottomLeftRadius(), Radius(DIV_BORDER_BOTTOM_LEFT_RADIUS)); +} + +/** + * @tc.name: DomNodeTest006 + * @tc.desc: Verify that DomNode can be set background. + * @tc.type: FUNC + * @tc.require: SR000DD67U + * @tc.author: liwenzhen + */ +HWTEST_F(DomNodeTest, DomNodeTest006, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of DomNode with background-related attributes: + * backgroundColor, backgroundImage, backgroundSize, backgroundPosition, backgroundRepeat. + */ + const std::string jsonDivStr = "" + "{ " + " \"tag\": \"div\"," + " \"commonStyle\": [{ " + " \"backgroundColor\": \"#759432\" " + " }," + " {" + " \"backgroundImage\": \"picture/test2.jpg\" " + " }," + " {" + " \"backgroundSize\": \"200px\" " + " }," + " {" + " \"backgroundPosition\": \"100px 200px\" " + " }," + " {" + " \"backgroundRepeat\": \"repeat-x\" " + " }]" + "}"; + /** + * @tc.steps: step2. call JsonUtil interface, create DomNode and set its background-related common style. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonDivStr); + auto boxChildComponent = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + RefPtr decoration = boxChildComponent->GetBackDecoration(); + RefPtr image = decoration->GetImage(); + BackgroundImagePosition backgroundImagePosition = image->GetImagePosition(); + + /** + * @tc.steps: step3. Verify the DomNode's background-related common styles can be set correctly. + * @tc.expected: step3. backgroundColor is #759432, backgroundImage's src is picture/test2.jpg, + * backgroundSize is 200px, backgroundPositionValue is 100px 200px, backgroundPositiontype is px, + * backgroundRepeat is repeat-x. + */ + ASSERT_TRUE(domNodeRoot != nullptr); + EXPECT_EQ(decoration->GetBackgroundColor(), Color::FromString(DIV_BORDER_TOP_COLOR)); + EXPECT_EQ(image->GetSrc(), DIV_BACKGROUND_IMAGE_SRC); + EXPECT_EQ(image->GetImageSize().GetSizeValueX(), DIV_BACKGROUND_IMAGE_SIZE); + EXPECT_EQ(backgroundImagePosition.GetSizeValueX(), DIV_BACKGROUND_IMAGE_POSITION_VALUE_X); + EXPECT_EQ(backgroundImagePosition.GetSizeValueY(), DIV_BACKGROUND_IMAGE_POSITION_VALUE_Y); + EXPECT_EQ(static_cast(backgroundImagePosition.GetSizeTypeX()), DIV_BACKGROUND_IMAGE_POSITION_TYPE_X); + EXPECT_EQ(static_cast(backgroundImagePosition.GetSizeTypeY()), DIV_BACKGROUND_IMAGE_POSITION_TYPE_Y); + EXPECT_EQ(static_cast(image->GetImageRepeat()), DIV_BACKGROUND_IMAGE_REPEAT); +} + +/** + * @tc.name: DomNodeTest007 + * @tc.desc: Verify that DomNode can be set minWidth/minHeight/maxWidth/maxHeight. + * @tc.type: FUNC + * @tc.require: AR000F3BAI AR000F3BAQ + * @tc.author: yangfan + */ +HWTEST_F(DomNodeTest, DomNodeTest007, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of DomNode with constraint attributes: + * flexWeight. + */ + const std::string jsonDivStr = "" + "{ " + " \"tag\": \"div\"," + " \"commonStyle\": [{ " + " \"flexWeight\": \"1\" " + " }]" + "}"; + /** + * @tc.steps: step2. call JsonUtil interface, create DomNode and set its border radius common style. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonDivStr); + ASSERT_TRUE(domNodeRoot != nullptr); + auto weight = domNodeRoot->GetFlexWeight(); + + /** + * @tc.steps: step3. Verify the DomNode's bordrt radius common styles can be set correctly. + * @tc.expected: step3. flexWeight is 1. + */ + EXPECT_EQ(weight, 1); +} + +/** + * @tc.name: BoxShadowTest001 + * @tc.desc: Verify that DomNode can be set box shadow. + * @tc.type: FUNC + * @tc.require: AR000F3CDQ + * @tc.author: jiangdayuan + */ +HWTEST_F(DomNodeTest, BoxShadowTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of DomNode with box shadow offset attributes. + */ + const std::string jsonDivStr = "" + "{ " + " \"tag\": \"div\"," + " \"commonStyle\": [{ " + " \"boxShadowH\": \"50px\" " + " }," + " {" + " \"boxShadowV\": \"100px\" " + " }]" + "}"; + /** + * @tc.steps: step2. call JsonUtil interface, create DomNode and set its box shadow common style. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonDivStr); + auto boxChildComponent = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + RefPtr decoration = boxChildComponent->GetBackDecoration(); + auto shadow = decoration->GetShadows().front(); + + /** + * @tc.steps: step3. Verify the DomNode's box shadow common styles can be set correctly. + * @tc.expected: step3. boxShadowH is 50px, boxShadowV is 100px + */ + ASSERT_TRUE(domNodeRoot != nullptr); + EXPECT_EQ(shadow.GetOffset().GetX(), DIV_BOX_SHADOW_H); + EXPECT_EQ(shadow.GetOffset().GetY(), DIV_BOX_SHADOW_V); +} + +/** + * @tc.name: BoxShadowTest002 + * @tc.desc: Verify that DomNode can be set box shadow. + * @tc.type: FUNC + * @tc.require: AR000F3CDQ + * @tc.author: jiangdayuan + */ +HWTEST_F(DomNodeTest, BoxShadowTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of DomNode with box shadow attributes. + */ + const std::string jsonDivStr = "" + "{ " + " \"tag\": \"div\"," + " \"commonStyle\": [{ " + " \"boxShadowH\": \"50px\" " + " }," + " {" + " \"boxShadowV\": \"100px\" " + " }," + " {" + " \"boxShadowBlur\": \"10px\" " + " }," + " {" + " \"boxShadowSpread\": \"20px\" " + " }," + " {" + " \"boxShadowColor\": \"#ff0000\" " + " }]" + "}"; + /** + * @tc.steps: step2. call JsonUtil interface, create DomNode and set its box shadow common style. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonDivStr); + auto boxChildComponent = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + RefPtr decoration = boxChildComponent->GetBackDecoration(); + auto shadow = decoration->GetShadows().front(); + + /** + * @tc.steps: step3. Verify the DomNode's box shadow common styles can be set correctly. + * @tc.expected: step3. boxShadowH is 50px, boxShadowV is 100px, boxShadowSpread is 20px, boxShadowBlur is 10px + */ + ASSERT_TRUE(domNodeRoot != nullptr); + EXPECT_EQ(shadow.GetOffset().GetX(), DIV_BOX_SHADOW_H); + EXPECT_EQ(shadow.GetOffset().GetY(), DIV_BOX_SHADOW_V); + EXPECT_EQ(shadow.GetSpreadRadius(), DIV_BOX_SHADOW_SPREAD); + EXPECT_EQ(shadow.GetBlurRadius(), DIV_BOX_SHADOW_BLUR); + EXPECT_EQ(shadow.GetColor(), Color::FromString(DIV_BOX_SHADOW_COLOR)); +} + +/* + * @tc.name: ClickEffectTest001 + * @tc.desc: Verify that DomNode can be set click-effect. + * @tc.type: FUNC + * @tc.require: AR000F3CDD AR000F3CDE AR000F3CDF + * @tc.author: jiangtao + */ +HWTEST_F(DomNodeTest, ClickEffectTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of DomNode with constraint attributes: + * click-effect. + */ + const std::string jsonDivStr = "" + "{ " + " \"tag\": \"div\"," + " \"attr\": [{ " + " \"clickEffect\": \"spring-small\" " + " }]" + "}"; + /** + * @tc.steps: step2. call JsonUtil interface, create DomNode and set its click-effect. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonDivStr); + ASSERT_TRUE(domNodeRoot != nullptr); + auto transformComponent = domNodeRoot->GetTransformComponent(); + ASSERT_TRUE(transformComponent != nullptr); + auto effectType = transformComponent->GetClickSpringEffectType(); + /** + * @tc.steps: step3. Verify the DomNode's click-effect attr can be set correctly. + * @tc.expected: step3. effectType is SMALL. + */ + EXPECT_EQ(effectType, ClickSpringEffectType::SMALL); +} + +/* + * @tc.name: ClickEffectTest002 + * @tc.desc: Verify that DomNode can be set click-effect. + * @tc.type: FUNC + * @tc.require: AR000F3CDD AR000F3CDE AR000F3CDF + * @tc.author: jiangtao + */ +HWTEST_F(DomNodeTest, ClickEffectTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of DomNode with constraint attributes: + * click-effect. + */ + const std::string jsonDivStr = "" + "{ " + " \"tag\": \"div\"," + " \"attr\": [{ " + " \"clickEffect\": \"spring-medium\" " + " }]" + "}"; + /** + * @tc.steps: step2. call JsonUtil interface, create DomNode and set its click-effect with spring-medium. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonDivStr); + ASSERT_TRUE(domNodeRoot != nullptr); + auto transformComponent = domNodeRoot->GetTransformComponent(); + ASSERT_TRUE(transformComponent != nullptr); + auto effectType = transformComponent->GetClickSpringEffectType(); + /** + * @tc.steps: step3. Verify the DomNode's click-effect attr can be set correctly. + * @tc.expected: step3. effectType is MEDIUM. + */ + EXPECT_EQ(effectType, ClickSpringEffectType::MEDIUM); +} + +/* + * @tc.name: ClickEffectTest003 + * @tc.desc: Verify that DomNode can be set click-effect. + * @tc.type: FUNC + * @tc.require: AR000F3CDD AR000F3CDE AR000F3CDF + * @tc.author: jiangtao + */ +HWTEST_F(DomNodeTest, ClickEffectTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of DomNode with constraint attributes: + * click-effect. + */ + const std::string jsonDivStr = "" + "{ " + " \"tag\": \"div\"," + " \"attr\": [{ " + " \"clickEffect\": \"spring-large\" " + " }]" + "}"; + /** + * @tc.steps: step2. call JsonUtil interface, create DomNode and set its click-effect. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonDivStr); + ASSERT_TRUE(domNodeRoot != nullptr); + auto transformComponent = domNodeRoot->GetTransformComponent(); + ASSERT_TRUE(transformComponent != nullptr); + auto effectType = transformComponent->GetClickSpringEffectType(); + /** + * @tc.steps: step3. Verify the DomNode's click-effect attr can be set correctly. + * @tc.expected: step3. effectType is LARGE. + */ + EXPECT_EQ(effectType, ClickSpringEffectType::LARGE); +} + +/* + * @tc.name: BoxBlurTest001 + * @tc.desc: Verify that DomNode can be set filter and backdrop-filter. + * @tc.type: FUNC + * @tc.require: AR000F3CDU + * @tc.author: jiangtao + */ +HWTEST_F(DomNodeTest, BoxBlurTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of DomNode with constraint attributes: + * click-effect. + */ + const std::string jsonDivStr = "{" + " \"tag\": \"div\"," + " \"commonStyle\": [" + " {" + " \"filter\": \"blur(20px)\"" + " }," + " {" + " \"backdropFilter\": \"blur(31px)\"" + " }" + " ]" + "}"; + /** + * @tc.steps: step2. call JsonUtil interface, create DomNode and set its click-effect. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonDivStr); + ASSERT_TRUE(domNodeRoot != nullptr); + auto boxComponent = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + ASSERT_TRUE(boxComponent != nullptr); + + /** + * @tc.steps: step3. Verify the DomNode's filter common styles can be set correctly. + * @tc.expected: step3. blurRadius is 20. + */ + auto frontDecoration = boxComponent->GetFrontDecoration(); + ASSERT_TRUE(frontDecoration != nullptr); + EXPECT_EQ(frontDecoration->GetBlurRadius().Value(), 20.0); + + /** + * @tc.steps: step3. Verify the DomNode's backdrop-filter common styles can be set correctly. + * @tc.expected: step3. blurRadius is 31. + */ + auto backDecoration = boxComponent->GetBackDecoration(); + ASSERT_TRUE(backDecoration != nullptr); + EXPECT_EQ(backDecoration->GetBlurRadius().Value(), 31.0); +} + +/* + * @tc.name: DomeNodeTransitionAnimatioOpitionTest001 + * @tc.desc: Verify that DomNode can be set transition-effect. + * @tc.type: FUNC + * @tc.require: AR000F3CA9 + * @tc.author: chenlien + */ +HWTEST_F(DomNodeTest, DomeNodeTransitionAnimatioOpitionTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of DomNode with constraint attributes: transition-effect + */ + const std::string jsonDivStr = "" + "{ " + " \"tag\": \"div\"," + " \"commonStyle\": [{ " + " \"transitionEffect\": \"unfold\" " + " }]" + "}"; + /** + * @tc.steps: step2. call JsonUtil interface, create DomNode and set transition-effect. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonDivStr); + ASSERT_TRUE(domNodeRoot != nullptr); + auto transformComponent = domNodeRoot->GetTransformComponent(); + ASSERT_TRUE(transformComponent != nullptr); + auto transitionEffect = transformComponent->GetTransitionEffect(); + /** + * @tc.steps: step3. Verify the DomNode's transition-effect common styles can be set correctly. + * @tc.expected: step3. effectType is UNFOLD. + */ + EXPECT_EQ(transitionEffect, TransitionEffect::UNFOLD); +} + +/* + * @tc.name: WindowBlurTest001 + * @tc.desc: Verify that DomNode can be set window-filter. + * @tc.type: FUNC + * @tc.require: AR000F3CDV + * @tc.author: jiangtao + */ +HWTEST_F(DomNodeTest, WindowBlurTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of DomNode with constraint attributes: + * windowFilter. + */ + const std::string jsonDivStr = "{" + " \"tag\": \"div\"," + " \"commonStyle\": [" + " {" + " \"windowFilter\": \"blur(50%)\"" + " }" + " ]" + "}"; + /** + * @tc.steps: step2. call JsonUtil interface, create DomNode and set its window-filter. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonDivStr); + ASSERT_TRUE(domNodeRoot != nullptr); + auto boxComponent = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + ASSERT_TRUE(boxComponent != nullptr); + + /** + * @tc.steps: step3. Verify the DomNode's window-filter common styles can be set correctly. + * @tc.expected: step3. window blur progress is 0.5. + */ + auto backDecoration = boxComponent->GetBackDecoration(); + ASSERT_TRUE(backDecoration != nullptr); + EXPECT_EQ(backDecoration->GetWindowBlurProgress(), 0.5f); +} + +/* + * @tc.name: WindowBlurTest002 + * @tc.desc: Verify that DomNode can not be set window-filter invalid value. + * @tc.type: FUNC + * @tc.require: AR000F3CDV + * @tc.author: jiangtao + */ +HWTEST_F(DomNodeTest, WindowBlurTest002, TestSize.Level1) { + /** + * @tc.steps: step1. construct the json string of DomNode with constraint attributes: + * windowFilter. + */ + const std::string jsonDivStr = "{" + " \"tag\": \"div\"," + " \"commonStyle\": [" + " {" + " \"windowFilter\": \"blur(150%)\"" + " }" + " ]" + "}"; + /** + * @tc.steps: step2. call JsonUtil interface, create DomNode and set its window-filter. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonDivStr); + ASSERT_TRUE(domNodeRoot != nullptr); + auto boxComponent = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + ASSERT_TRUE(boxComponent != nullptr); + + /** + * @tc.steps: step3. Verify the DomNode's window-filter common styles can not be set correctly. + * @tc.expected: step3. window blur progress is 0.0. + */ + auto backDecoration = boxComponent->GetBackDecoration(); + ASSERT_TRUE(backDecoration != nullptr); + EXPECT_EQ(backDecoration->GetWindowBlurProgress(), 0.0f); +} + +/* + * @tc.name: WindowBlurTest003 + * @tc.desc: Verify that DomNode can set window-filter boundary value. + * @tc.type: FUNC + * @tc.require: AR000F3CDV + * @tc.author: jiangtao + */ +HWTEST_F(DomNodeTest, WindowBlurTest003, TestSize.Level1) { + /** + * @tc.steps: step1. construct the json string of DomNode with constraint attributes: + * windowFilter. + */ + const std::string jsonDivStr = "{" + " \"tag\": \"div\"," + " \"commonStyle\": [" + " {" + " \"windowFilter\": \"blur(100%)\"" + " }" + " ]" + "}"; + /** + * @tc.steps: step2. call JsonUtil interface, create DomNode and set its window-filter. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonDivStr); + ASSERT_TRUE(domNodeRoot != nullptr); + auto boxComponent = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + ASSERT_TRUE(boxComponent != nullptr); + + /** + * @tc.steps: step3. Verify the DomNode's window-filter common styles can be set correctly. + * @tc.expected: step3. window blur progress is 1.0. + */ + auto backDecoration = boxComponent->GetBackDecoration(); + ASSERT_TRUE(backDecoration != nullptr); + EXPECT_EQ(backDecoration->GetWindowBlurProgress(), 1.0f); +} + +/* + * @tc.name: WindowBlurTest004 + * @tc.desc: Verify that DomNode can not be set window-filter with different unit. + * @tc.type: FUNC + * @tc.require: AR000F3CDV + * @tc.author: jiangtao + */ +HWTEST_F(DomNodeTest, WindowBlurTest004, TestSize.Level1) { + /** + * @tc.steps: step1. construct the json string of DomNode with constraint attributes: + * windowFilter. + */ + const std::string jsonDivStr = "{" + " \"tag\": \"div\"," + " \"commonStyle\": [" + " {" + " \"windowFilter\": \"blur(1px)\"" + " }" + " ]" + "}"; + /** + * @tc.steps: step2. call JsonUtil interface, create DomNode and set its window-filter. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonDivStr); + ASSERT_TRUE(domNodeRoot != nullptr); + auto boxComponent = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + ASSERT_TRUE(boxComponent != nullptr); + + /** + * @tc.steps: step3. Verify the DomNode's window-filter common styles can not be set correctly. + * @tc.expected: step3. window blur progress is 0.0. + */ + auto backDecoration = boxComponent->GetBackDecoration(); + ASSERT_TRUE(backDecoration != nullptr); + EXPECT_EQ(backDecoration->GetWindowBlurProgress(), 0.0f); +} + +/* + * @tc.name: TransformOriginTest001 + * @tc.desc: Verify that DomNode can set transform-origin with one value. + * @tc.type: FUNC + * @tc.require: AR000F3CDV + * @tc.author: jiangtao + */ +HWTEST_F(DomNodeTest, TransformOriginTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of DomNode with constraint attributes: + * windowFilter. + */ + const std::string jsonDivStr = "{" + " \"tag\": \"div\"," + " \"commonStyle\": [" + " {" + " \"transformOrigin\": \"center\"" + " }" + " ]" + "}"; + /** + * @tc.steps: step2. call JsonUtil interface, create DomNode and set its transform-origin. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonDivStr); + ASSERT_TRUE(domNodeRoot != nullptr); + + /** + * @tc.steps: step3. Verify the DomNode's transform-origin common styles can be set correctly. + * @tc.expected: step3. 50% 50% + */ + auto originOffsetX = domNodeRoot->GetTweenOption().GetTransformOriginX(); + auto originOffsetY = domNodeRoot->GetTweenOption().GetTransformOriginY(); + ASSERT_TRUE(originOffsetX.Unit() == DimensionUnit::PERCENT); + ASSERT_EQ(originOffsetX.Value(), 0.5); + ASSERT_TRUE(originOffsetY.Unit() == DimensionUnit::PERCENT); + ASSERT_EQ(originOffsetY.Value(), 0.5); +} + +/* + * @tc.name: TransformOriginTest002 + * @tc.desc: Verify that DomNode can set transform-origin with one value. + * @tc.type: FUNC + * @tc.require: AR000F3CDV + * @tc.author: jiangtao + */ +HWTEST_F(DomNodeTest, TransformOriginTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of DomNode with constraint attributes: + * windowFilter. + */ + const std::string jsonDivStr = "{" + " \"tag\": \"div\"," + " \"commonStyle\": [" + " {" + " \"transformOrigin\": \"left\"" + " }" + " ]" + "}"; + /** + * @tc.steps: step2. call JsonUtil interface, create DomNode and set its transform-origin. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonDivStr); + ASSERT_TRUE(domNodeRoot != nullptr); + + /** + * @tc.steps: step3. Verify the DomNode's transform-origin common styles can be set correctly. + * @tc.expected: step3. 0% 50% + */ + auto originOffsetX = domNodeRoot->GetTweenOption().GetTransformOriginX(); + auto originOffsetY = domNodeRoot->GetTweenOption().GetTransformOriginY(); + ASSERT_TRUE(originOffsetX.Unit() == DimensionUnit::PERCENT); + ASSERT_EQ(originOffsetX.Value(), 0.0); + ASSERT_TRUE(originOffsetY.Unit() == DimensionUnit::PERCENT); + ASSERT_EQ(originOffsetY.Value(), 0.5); +} + +/* + * @tc.name: TransformOriginTest003 + * @tc.desc: Verify that DomNode can set transform-origin with one value. + * @tc.type: FUNC + * @tc.require: AR000F3CDV + * @tc.author: jiangtao + */ +HWTEST_F(DomNodeTest, TransformOriginTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of DomNode with constraint attributes: + * windowFilter. + */ + const std::string jsonDivStr = "{" + " \"tag\": \"div\"," + " \"commonStyle\": [" + " {" + " \"transformOrigin\": \"bottom\"" + " }" + " ]" + "}"; + /** + * @tc.steps: step2. call JsonUtil interface, create DomNode and set its transform-origin. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonDivStr); + ASSERT_TRUE(domNodeRoot != nullptr); + + /** + * @tc.steps: step3. Verify the DomNode's transform-origin common styles can be set correctly. + * @tc.expected: step3. 50% 100% + */ + auto originOffsetX = domNodeRoot->GetTweenOption().GetTransformOriginX(); + auto originOffsetY = domNodeRoot->GetTweenOption().GetTransformOriginY(); + ASSERT_TRUE(originOffsetX.Unit() == DimensionUnit::PERCENT); + ASSERT_EQ(originOffsetX.Value(), 0.5); + ASSERT_TRUE(originOffsetY.Unit() == DimensionUnit::PERCENT); + ASSERT_EQ(originOffsetY.Value(), 1.0); +} + +/* + * @tc.name: TransformOriginTest004 + * @tc.desc: Verify that DomNode can set transform-origin with one value. + * @tc.type: FUNC + * @tc.require: AR000F3CDV + * @tc.author: jiangtao + */ +HWTEST_F(DomNodeTest, TransformOriginTest004, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of DomNode with constraint attributes: + * windowFilter. + */ + const std::string jsonDivStr = "{" + " \"tag\": \"div\"," + " \"commonStyle\": [" + " {" + " \"transformOrigin\": \"top\"" + " }" + " ]" + "}"; + /** + * @tc.steps: step2. call JsonUtil interface, create DomNode and set its transform-origin. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonDivStr); + ASSERT_TRUE(domNodeRoot != nullptr); + + /** + * @tc.steps: step3. Verify the DomNode's transform-origin common styles can be set correctly. + * @tc.expected: step3. 50% 0% + */ + auto originOffsetX = domNodeRoot->GetTweenOption().GetTransformOriginX(); + auto originOffsetY = domNodeRoot->GetTweenOption().GetTransformOriginY(); + ASSERT_TRUE(originOffsetX.Unit() == DimensionUnit::PERCENT); + ASSERT_EQ(originOffsetX.Value(), 0.5); + ASSERT_TRUE(originOffsetY.Unit() == DimensionUnit::PERCENT); + ASSERT_EQ(originOffsetY.Value(), 0.0); +} + +/* + * @tc.name: TransformOriginTest005 + * @tc.desc: Verify that DomNode can set transform-origin with one value. + * @tc.type: FUNC + * @tc.require: AR000F3CDV + * @tc.author: jiangtao + */ +HWTEST_F(DomNodeTest, TransformOriginTest005, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of DomNode with constraint attributes: + * windowFilter. + */ + const std::string jsonDivStr = "{" + " \"tag\": \"div\"," + " \"commonStyle\": [" + " {" + " \"transformOrigin\": \"bottom\"" + " }" + " ]" + "}"; + /** + * @tc.steps: step2. call JsonUtil interface, create DomNode and set its transform-origin. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonDivStr); + ASSERT_TRUE(domNodeRoot != nullptr); + + /** + * @tc.steps: step3. Verify the DomNode's transform-origin common styles can be set correctly. + * @tc.expected: step3. 50% 100% + */ + auto originOffsetX = domNodeRoot->GetTweenOption().GetTransformOriginX(); + auto originOffsetY = domNodeRoot->GetTweenOption().GetTransformOriginY(); + ASSERT_TRUE(originOffsetX.Unit() == DimensionUnit::PERCENT); + ASSERT_EQ(originOffsetX.Value(), 0.5); + ASSERT_TRUE(originOffsetY.Unit() == DimensionUnit::PERCENT); + ASSERT_EQ(originOffsetY.Value(), 1.0); +} + +/* + * @tc.name: TransformOriginTest006 + * @tc.desc: Verify that DomNode can set transform-origin with one value. + * @tc.type: FUNC + * @tc.require: AR000F3CDV + * @tc.author: jiangtao + */ +HWTEST_F(DomNodeTest, TransformOriginTest006, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of DomNode with constraint attributes: + * windowFilter. + */ + const std::string jsonDivStr = "{" + " \"tag\": \"div\"," + " \"commonStyle\": [" + " {" + " \"transformOrigin\": \"40px\"" + " }" + " ]" + "}"; + /** + * @tc.steps: step2. call JsonUtil interface, create DomNode and set its transform-origin. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonDivStr); + ASSERT_TRUE(domNodeRoot != nullptr); + + /** + * @tc.steps: step3. Verify the DomNode's transform-origin common styles can be set correctly. + * @tc.expected: step3. 40px 50% + */ + auto originOffsetX = domNodeRoot->GetTweenOption().GetTransformOriginX(); + auto originOffsetY = domNodeRoot->GetTweenOption().GetTransformOriginY(); + ASSERT_TRUE(originOffsetX.Unit() == DimensionUnit::PX); + ASSERT_EQ(originOffsetX.Value(), 40); + ASSERT_TRUE(originOffsetY.Unit() == DimensionUnit::PERCENT); + ASSERT_EQ(originOffsetY.Value(), 0.5); +} + +/* + * @tc.name: TransformOriginTest007 + * @tc.desc: Verify that DomNode can set transform-origin with one value. + * @tc.type: FUNC + * @tc.require: AR000F3CDV + * @tc.author: jiangtao + */ +HWTEST_F(DomNodeTest, TransformOriginTest007, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of DomNode with constraint attributes: + * windowFilter. + */ + const std::string jsonDivStr = "{" + " \"tag\": \"div\"," + " \"commonStyle\": [" + " {" + " \"transformOrigin\": \"30%\"" + " }" + " ]" + "}"; + /** + * @tc.steps: step2. call JsonUtil interface, create DomNode and set its transform-origin. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonDivStr); + ASSERT_TRUE(domNodeRoot != nullptr); + + /** + * @tc.steps: step3. Verify the DomNode's transform-origin common styles can be set correctly. + * @tc.expected: step3. 30% 50% + */ + auto originOffsetX = domNodeRoot->GetTweenOption().GetTransformOriginX(); + auto originOffsetY = domNodeRoot->GetTweenOption().GetTransformOriginY(); + ASSERT_TRUE(originOffsetX.Unit() == DimensionUnit::PERCENT); + ASSERT_EQ(originOffsetX.Value(), 0.3); + ASSERT_TRUE(originOffsetY.Unit() == DimensionUnit::PERCENT); + ASSERT_EQ(originOffsetY.Value(), 0.5); +} + +/* + * @tc.name: TransformOriginTest008 + * @tc.desc: Verify that DomNode can set transform-origin with one value. + * @tc.type: FUNC + * @tc.require: AR000F3CDV + * @tc.author: jiangtao + */ +HWTEST_F(DomNodeTest, TransformOriginTest008, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of DomNode with constraint attributes: + * windowFilter. + */ + const std::string jsonDivStr = "{" + " \"tag\": \"div\"," + " \"commonStyle\": [" + " {" + " \"transformOrigin\": \"0% 0px\"" + " }" + " ]" + "}"; + /** + * @tc.steps: step2. call JsonUtil interface, create DomNode and set its transform-origin. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonDivStr); + ASSERT_TRUE(domNodeRoot != nullptr); + + /** + * @tc.steps: step3. Verify the DomNode's transform-origin common styles can be set correctly. + * @tc.expected: step3. 0% 0px + */ + auto originOffsetX = domNodeRoot->GetTweenOption().GetTransformOriginX(); + auto originOffsetY = domNodeRoot->GetTweenOption().GetTransformOriginY(); + ASSERT_TRUE(originOffsetX.Unit() == DimensionUnit::PERCENT); + ASSERT_EQ(originOffsetX.Value(), 0.0); + ASSERT_TRUE(originOffsetY.Unit() == DimensionUnit::PX); + ASSERT_EQ(originOffsetY.Value(), 0.0); +} + +/* + * @tc.name: TransformOriginTest009 + * @tc.desc: Verify that DomNode can set transform-origin with one value. + * @tc.type: FUNC + * @tc.require: AR000F3CDV + * @tc.author: jiangtao + */ +HWTEST_F(DomNodeTest, TransformOriginTest009, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of DomNode with constraint attributes: + * windowFilter. + */ + const std::string jsonDivStr = "{" + " \"tag\": \"div\"," + " \"commonStyle\": [" + " {" + " \"transformOrigin\": \"left 30px\"" + " }" + " ]" + "}"; + /** + * @tc.steps: step2. call JsonUtil interface, create DomNode and set its transform-origin. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonDivStr); + ASSERT_TRUE(domNodeRoot != nullptr); + + /** + * @tc.steps: step3. Verify the DomNode's transform-origin common styles can be set correctly. + * @tc.expected: step3. 0% 30px + */ + auto originOffsetX = domNodeRoot->GetTweenOption().GetTransformOriginX(); + auto originOffsetY = domNodeRoot->GetTweenOption().GetTransformOriginY(); + ASSERT_TRUE(originOffsetX.Unit() == DimensionUnit::PERCENT); + ASSERT_EQ(originOffsetX.Value(), 0.0); + ASSERT_TRUE(originOffsetY.Unit() == DimensionUnit::PX); + ASSERT_EQ(originOffsetY.Value(), 30); +} + +/* + * @tc.name: TransformOriginTest010 + * @tc.desc: Verify that DomNode can set transform-origin with one value. + * @tc.type: FUNC + * @tc.require: AR000F3CDV + * @tc.author: jiangtao + */ +HWTEST_F(DomNodeTest, TransformOriginTest010, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of DomNode with constraint attributes: + * windowFilter. + */ + const std::string jsonDivStr = "{" + " \"tag\": \"div\"," + " \"commonStyle\": [" + " {" + " \"transformOrigin\": \"left bottom\"" + " }" + " ]" + "}"; + /** + * @tc.steps: step2. call JsonUtil interface, create DomNode and set its transform-origin. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonDivStr); + ASSERT_TRUE(domNodeRoot != nullptr); + + /** + * @tc.steps: step3. Verify the DomNode's transform-origin common styles can be set correctly. + * @tc.expected: step3. 0% 100% + */ + auto originOffsetX = domNodeRoot->GetTweenOption().GetTransformOriginX(); + auto originOffsetY = domNodeRoot->GetTweenOption().GetTransformOriginY(); + ASSERT_TRUE(originOffsetX.Unit() == DimensionUnit::PERCENT); + ASSERT_EQ(originOffsetX.Value(), 0.0); + ASSERT_TRUE(originOffsetY.Unit() == DimensionUnit::PERCENT); + ASSERT_EQ(originOffsetY.Value(), 1.0); +} + +/* + * @tc.name: TransformOriginTest011 + * @tc.desc: Verify that DomNode can set transform-origin with one value. + * @tc.type: FUNC + * @tc.require: AR000F3CDV + * @tc.author: jiangtao + */ +HWTEST_F(DomNodeTest, TransformOriginTest011, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of DomNode with constraint attributes: + * windowFilter. + */ + const std::string jsonDivStr = "{" + " \"tag\": \"div\"," + " \"commonStyle\": [" + " {" + " \"transformOrigin\": \"bottom bottom\"" + " }" + " ]" + "}"; + /** + * @tc.steps: step2. call JsonUtil interface, create DomNode and set its transform-origin. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonDivStr); + ASSERT_TRUE(domNodeRoot != nullptr); + + /** + * @tc.steps: step3. Verify the DomNode's transform-origin common styles can be set correctly. + * @tc.expected: step3. 50% 100% + */ + auto originOffsetX = domNodeRoot->GetTweenOption().GetTransformOriginX(); + auto originOffsetY = domNodeRoot->GetTweenOption().GetTransformOriginY(); + ASSERT_TRUE(originOffsetX.Unit() == DimensionUnit::PERCENT); + ASSERT_EQ(originOffsetX.Value(), 0.5); + ASSERT_TRUE(originOffsetY.Unit() == DimensionUnit::PERCENT); + ASSERT_EQ(originOffsetY.Value(), 1.0); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/test/unittest/jsfrontend/dompiece/BUILD.gn b/frameworks/bridge/test/unittest/jsfrontend/dompiece/BUILD.gn new file mode 100644 index 00000000..1f61a720 --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/dompiece/BUILD.gn @@ -0,0 +1,57 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/jsframework/piece" + +ohos_unittest("DomPieceTest") { + module_out_path = module_output_path + + sources = [ + "../dom_node_factory.cpp", + "dom_piece_test.cpp", + ] + + configs = [ + ":config_domnode_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + external_deps = [ "hiviewdfx_hilog_native:libhilog" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_domnode_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":DomPieceTest" ] +} diff --git a/frameworks/bridge/test/unittest/jsfrontend/dompiece/dom_piece_test.cpp b/frameworks/bridge/test/unittest/jsfrontend/dompiece/dom_piece_test.cpp new file mode 100644 index 00000000..dce930a5 --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/dompiece/dom_piece_test.cpp @@ -0,0 +1,126 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/utils/system_properties.h" +#include "core/components/piece/piece_theme.h" +#include "core/pipeline/base/constants.h" +#include "frameworks/bridge/common/dom/dom_piece.h" +#include "frameworks/bridge/test/unittest/jsfrontend/dom_node_factory.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace::Framework { +namespace { + +const std::string PIECE_CONTENT_VALUE = "Chips"; +const std::string PIECE_ICON_SRC = "test.svg"; + +} // namespace + +class DomPieceTest : public testing::Test { +public: + static void SetUpTestCase() {} + static void TearDownTestCase() {} + void SetUp() {} + void TearDown() {} +}; + +/** + * @tc.name: CreateDOMNodeFromDsl001 + * @tc.desc: Verify that DomPiece can create PieceComponent correctly with all attributes set. + * @tc.type: FUNC + * @tc.require: AR000F3L32 + * @tc.author: caocan + */ +HWTEST_F(DomPieceTest, CreateDOMNodeFromDsl001, TestSize.Level1) +{ + if (SystemProperties::GetDeviceType() == DeviceType::PHONE) { + /** + * @tc.steps: step1. the json string of DomPiece with all attributes set. + */ + const std::string jsonPieceStr = "" + "{ " + " \"tag\": \"piece\", " + " \"attr\": [{ " + " \"content\" : \"Chips\" " + " }, " + " { " + " \"closable\" : \"true\" " + " }, " + " { " + " \"icon\" : \"test.svg\" " + " }], " + " \"event\": [ \"close\" ] " + "}"; + + /** + * @tc.steps: step2. call JsonUtil interface and create DomPiece. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonPieceStr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + auto pieceComponent = AceType::DynamicCast(boxChild->GetChild()); + + /** + * @tc.steps: step3. Verify whether all attributes of PieceComponent are as excepted. + * @tc.expected: step3. All attributes of PieceComponent are as excepted. + */ + EXPECT_TRUE(pieceComponent); + EXPECT_TRUE(pieceComponent->ShowDelete()); + EXPECT_TRUE(pieceComponent->GetContent() == PIECE_CONTENT_VALUE); + EXPECT_TRUE(pieceComponent->GetIcon() == PIECE_ICON_SRC); + EXPECT_TRUE(pieceComponent->GetOnDelete() == std::to_string(domNodeRoot->GetNodeId())); + } +} + +/** + * @tc.name: CreateDOMNodeFromDsl002 + * @tc.desc: Verify that DomPiece can create PieceComponent correctly with no attribute set. + * @tc.type: FUNC + * @tc.require: AR000F3L32 + * @tc.author: caocan + */ +HWTEST_F(DomPieceTest, CreateDOMNodeFromDsl002, TestSize.Level1) +{ + if (SystemProperties::GetDeviceType() == DeviceType::PHONE) { + /** + * @tc.steps: step1. the json string of DomPiece with no attribute set. + */ + const std::string jsonPieceStr = "" + "{ " + " \"tag\": \"piece\" " + "}"; + + /** + * @tc.steps: step2. call JsonUtil interface and create DomPiece. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonPieceStr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + auto pieceComponent = AceType::DynamicCast(boxChild->GetChild()); + + /** + * @tc.steps: step3. Verify whether all attributes of PieceComponent are as excepted. + * @tc.expected: step3. All attributes of PieceComponent are as excepted. + */ + EXPECT_TRUE(pieceComponent); + EXPECT_TRUE(!pieceComponent->ShowDelete()); + EXPECT_TRUE(pieceComponent->GetContent().empty()); + EXPECT_TRUE(pieceComponent->GetIcon().empty()); + } +} + +} // namespace OHOS::Ace::Framework \ No newline at end of file diff --git a/frameworks/bridge/test/unittest/jsfrontend/dompopup/BUILD.gn b/frameworks/bridge/test/unittest/jsfrontend/dompopup/BUILD.gn new file mode 100644 index 00000000..0988ffaa --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/dompopup/BUILD.gn @@ -0,0 +1,57 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/jsframework/popup" + +ohos_unittest("DomPopupTest") { + module_out_path = module_output_path + + sources = [ + "../dom_node_factory.cpp", + "dom_popup_test.cpp", + ] + + configs = [ + ":config_domnode_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + external_deps = [ "hiviewdfx_hilog_native:libhilog" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_domnode_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":DomPopupTest" ] +} diff --git a/frameworks/bridge/test/unittest/jsfrontend/dompopup/dom_popup_test.cpp b/frameworks/bridge/test/unittest/jsfrontend/dompopup/dom_popup_test.cpp new file mode 100644 index 00000000..ff76903c --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/dompopup/dom_popup_test.cpp @@ -0,0 +1,143 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "core/components/common/layout/constants.h" +#include "core/components/popup/popup_component.h" +#include "frameworks/bridge/common/dom/dom_document.h" +#include "frameworks/bridge/common/dom/dom_popup.h" +#include "frameworks/bridge/test/unittest/jsfrontend/dom_node_factory.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace::Framework { +namespace { + +const Placement PLACEMENT_VALUE = Placement::LEFT; +const std::string MASK_COLOR_DEFAULT = "#0x0000ff"; + +} // namespace + +class DomPopupTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; +}; + +void DomPopupTest::SetUpTestCase() {} +void DomPopupTest::TearDownTestCase() {} +void DomPopupTest::SetUp() {} +void DomPopupTest::TearDown() {} + +/** + * @tc.name: DomPopupCreatorTest001 + * @tc.desc: Test create popup node successfully and popupcomponent create as desire. + * @tc.type: FUNC + * @tc.require: AR000DD66M + * @tc.author: chenbenzhi + */ +HWTEST_F(DomPopupTest, DomPopupCreatorTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of popup component with tag only. + */ + const std::string jsonPopupStr = "" + "{ " + " \"tag\": \"popup\" " + "}"; + /** + * @tc.steps: step2. Verify whether the DomPopup. + * @tc.expected: step3. DomPopup is not null. + */ + auto popup = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonPopupStr); + EXPECT_TRUE(popup); +} + +/** + * @tc.name: DomPopupTest002 + * @tc.desc: Verify that DomPopup can be set attributes and styles. + * @tc.type: FUNC + * @tc.require: AR000DD66M + * @tc.author: chenbenzhi + */ +HWTEST_F(DomPopupTest, DomPopupTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of DomPopup with attributes and styles. + */ + const std::string jsonPopupStr = "" + "{ " + " \"tag\": \"popup\", " + " \"attr\": [ " + " {" + " \"placement\" : \"left\" " + " }], " + " \"style\": [{ " + " \"maskColor\" : \"#0x0000ff\" " + " }]" + "}"; + + /** + * @tc.steps: step2. call jsonPopupStr interface, create DomPopup and set its style. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonPopupStr); + auto popupChild = AceType::DynamicCast(domNodeRoot->GetSpecializedComponent()); + ACE_DCHECK(popupChild); + + /** + * @tc.steps: step3. Check all the attributes and styles matched. + * @tc.expected: step3. All the attributes and styles are matched. + */ + EXPECT_TRUE(popupChild); + EXPECT_EQ(popupChild->GetPopupParam()->GetPlacement(), PLACEMENT_VALUE); + EXPECT_EQ(popupChild->GetPopupParam()->GetMaskColor(), Color::FromString(MASK_COLOR_DEFAULT)); +} + +/** + * @tc.name: DomPopupTest003 + * @tc.desc: Test add event to popup component successfully. + * @tc.type: FUNC + * @tc.require: AR000DD66M + * @tc.author: chenbenzhi + */ +HWTEST_F(DomPopupTest, DomPopupTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create popup node with it. + * @tc.expected: step1. Popup node and is created successfully. + */ + const std::string jsonPopupStr = "" + "{ " + " \"tag\": \"popup\", " + " \"event\": [ \"visibilitychange\" ] " + "}"; + + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonPopupStr); + auto popupChild = AceType::DynamicCast(domNodeRoot->GetSpecializedComponent()); + ACE_DCHECK(popupChild); + + /** + * @tc.steps: step2. Check eventId of created popup component. + * @tc.expected: step2. The eventId value of popup component is as expected. + */ + EXPECT_TRUE(popupChild); + EXPECT_EQ(popupChild->GetPopupParam()->GetOnVisibilityChange(), std::to_string(domNodeRoot->GetNodeId())); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/test/unittest/jsfrontend/domrating/BUILD.gn b/frameworks/bridge/test/unittest/jsfrontend/domrating/BUILD.gn new file mode 100644 index 00000000..79836e7a --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/domrating/BUILD.gn @@ -0,0 +1,57 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/jsframework/rating" + +ohos_unittest("DomRatingTest") { + module_out_path = module_output_path + + sources = [ + "../dom_node_factory.cpp", + "dom_rating_test.cpp", + ] + + configs = [ + ":config_domnode_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + external_deps = [ "hiviewdfx_hilog_native:libhilog" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_domnode_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":DomRatingTest" ] +} diff --git a/frameworks/bridge/test/unittest/jsfrontend/domrating/dom_rating_test.cpp b/frameworks/bridge/test/unittest/jsfrontend/domrating/dom_rating_test.cpp new file mode 100644 index 00000000..409a1792 --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/domrating/dom_rating_test.cpp @@ -0,0 +1,165 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "core/components/rating/rating_theme.h" +#include "core/pipeline/base/constants.h" +#include "frameworks/bridge/common/dom/dom_rating.h" +#include "frameworks/bridge/test/unittest/jsfrontend/dom_node_factory.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace::Framework { +namespace { + +const std::string FOREGROUND_SRC_VALUE = "/example/foreground"; +const std::string SECONDARY_SRC_VALUE = "/example/secondary"; +const std::string BACKGROUND_SRC_VALUE = "/example/background"; +const double RATING_WIDTH_VALUE = 600.0; +const double RATING_HEIGHT_VALUE = 200.0; +const double RATING_SCORE_VALUE = 2.5; +const double RATING_STEPSIZE_VALUE = 0.5; +const int32_t RATING_STAR_NUM_VALUE = 5; + +} // namespace + +class DomRatingTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); +}; + +void DomRatingTest::SetUpTestCase() {} +void DomRatingTest::TearDownTestCase() {} +void DomRatingTest::SetUp() {} +void DomRatingTest::TearDown() {} + +/** + * @tc.name: CreateDOMNodeFromDsl001 + * @tc.desc: Verify that DomRating can create ratingComponent correctly with all attributes set. + * @tc.type: FUNC + * @tc.require: AR000DD66G + * @tc.author: chenxuankai + */ +HWTEST_F(DomRatingTest, CreateDOMNodeFromDsl001, TestSize.Level1) +{ + /** + * @tc.steps: step1. the json string of DomRating with all attributes set. + */ + const std::string jsonRatingStr = "" + "{ " + " \"tag\": \"rating\", " + " \"attr\": [{ " + " \"numstars\" : \"5\" " + " }, " + " { " + " \"rating\" : \"2.5\" " + " }, " + " { " + " \"stepsize\" : \"0.5\" " + " }, " + " { " + " \"indicator\" : \"true\" " + " }], " + " \"style\": [{ " + " \"starBackground\":\"/example/background\" " + " }, " + " { " + " \"starSecondary\" : \"/example/secondary\" " + " }, " + " { " + " \"starForeground\" : \"/example/foreground\" " + " }, " + " { " + " \"height\" : \"200px\" " + " }, " + " { " + " \"width\" : \"600px\" " + " }], " + " \"event\": [ \"change\" ] " + "}"; + + /** + * @tc.steps: step2. call JsonUtil interface and create DomRating. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonRatingStr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + RefPtr ratingComponent = AceType::DynamicCast(boxChild->GetChild()); + + /** + * @tc.steps: step3. Verify whether all attributes of ratingComponent are as excepted. + * @tc.expected: step3. All attributes of ratingComponent are as excepted. + */ + ASSERT_TRUE(ratingComponent != nullptr); + ASSERT_TRUE(ratingComponent->GetStarNum() == RATING_STAR_NUM_VALUE); + ASSERT_TRUE(ratingComponent->GetRatingScore() == RATING_SCORE_VALUE); + ASSERT_TRUE(ratingComponent->GetStepSize() == RATING_STEPSIZE_VALUE); + ASSERT_TRUE(ratingComponent->GetIndicator()); + ASSERT_TRUE(ratingComponent->GetForegroundSrc() == FOREGROUND_SRC_VALUE); + ASSERT_TRUE(ratingComponent->GetSecondarySrc() == SECONDARY_SRC_VALUE); + ASSERT_TRUE(ratingComponent->GetBackgroundSrc() == BACKGROUND_SRC_VALUE); + ASSERT_TRUE(boxChild->GetWidthDimension().Value() == RATING_WIDTH_VALUE); + ASSERT_TRUE(boxChild->GetHeightDimension().Value() == RATING_HEIGHT_VALUE); + ASSERT_TRUE(ratingComponent->GetChangeEventId() == std::to_string(domNodeRoot->GetNodeId())); +} + +/** + * @tc.name: CreateDOMNodeFromDsl002 + * @tc.desc: Verify that DomRating can create ratingComponent correctly with no attribute set. + * @tc.type: FUNC + * @tc.require: AR000DD66G + * @tc.author: chenxuankai + */ +HWTEST_F(DomRatingTest, CreateDOMNodeFromDsl002, TestSize.Level1) +{ + /** + * @tc.steps: step1. the json string of DomRating with no attribute set. + */ + const std::string jsonRatingStr = "" + "{ " + " \"tag\": \"rating\" " + "}"; + + /** + * @tc.steps: step2. call JsonUtil interface and create DomRating. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonRatingStr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + RefPtr ratingComponent = AceType::DynamicCast(boxChild->GetChild()); + + /** + * @tc.steps: step3. Verify whether all attributes of ratingComponent are as excepted. + * @tc.expected: step3. All attributes of ratingComponent are as excepted. + */ + auto themeManager = AceType::MakeRefPtr(); + RefPtr theme = themeManager->GetTheme(); + ASSERT_TRUE(theme); + ASSERT_TRUE(ratingComponent != nullptr); + ASSERT_TRUE(ratingComponent->GetStarNum() == theme->GetStarNum()); + ASSERT_TRUE(ratingComponent->GetRatingScore() == theme->GetRatingScore()); + ASSERT_TRUE(ratingComponent->GetStepSize() == theme->GetStepSize()); + ASSERT_TRUE(!ratingComponent->GetIndicator()); + ASSERT_TRUE(ratingComponent->GetForegroundSrc().empty()); + ASSERT_TRUE(ratingComponent->GetSecondarySrc().empty()); + ASSERT_TRUE(ratingComponent->GetBackgroundSrc().empty()); + ASSERT_TRUE(boxChild->GetWidthDimension().Value() == theme->GetRatingWidth().Value()); + ASSERT_TRUE(boxChild->GetHeightDimension().Value() == theme->GetRatingHeight().Value()); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/test/unittest/jsfrontend/domrefresh/BUILD.gn b/frameworks/bridge/test/unittest/jsfrontend/domrefresh/BUILD.gn new file mode 100644 index 00000000..ffd7bc07 --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/domrefresh/BUILD.gn @@ -0,0 +1,57 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/jsframework/refresh" + +ohos_unittest("DomRefreshTest") { + module_out_path = module_output_path + + sources = [ + "../dom_node_factory.cpp", + "dom_refresh_test.cpp", + ] + + configs = [ + ":config_domnode_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + external_deps = [ "hiviewdfx_hilog_native:libhilog" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_domnode_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":DomRefreshTest" ] +} diff --git a/frameworks/bridge/test/unittest/jsfrontend/domrefresh/dom_refresh_test.cpp b/frameworks/bridge/test/unittest/jsfrontend/domrefresh/dom_refresh_test.cpp new file mode 100644 index 00000000..3a94595d --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/domrefresh/dom_refresh_test.cpp @@ -0,0 +1,367 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "core/components/common/layout/constants.h" +#include "frameworks/bridge/common/dom/dom_refresh.h" +#include "frameworks/bridge/test/unittest/jsfrontend/dom_node_factory.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace::Framework { +namespace { + +constexpr double LOADING_DISTANCE = 16.0; +constexpr double REFRESH_DISTANCE = 64.0; + +const std::string REFRESH_TEST_001 = "" + "{ " + " \"tag\": \"refresh\" " + "}"; + +const std::string REFRESH_TEST_002 = "" + "{ " + " \"tag\": \"refresh\", " + " \"attr\": [{ " + " \"offset\" : \"500px\" " + " }] " + "}"; + +const std::string REFRESH_TEST_003 = "" + "{ " + " \"tag\": \"refresh\", " + " \"attr\": [{ " + " \"refreshing\" : \"true\" " + " }] " + "}"; + +const std::string REFRESH_TEST_004 = "" + "{ " + " \"tag\": \"refresh\", " + " \"attr\": [{ " + " \"lasttime\" : \"true\" " + " }] " + "}"; + +const std::string REFRESH_TEST_005 = "" + "{ " + " \"tag\": \"refresh\", " + " \"attr\": [{ " + " \"type\" : \"pulldown\" " + " }] " + "}"; + +const std::string REFRESH_TEST_006 = "" + "{ " + " \"tag\": \"refresh\" , " + " \"style\": [{ " + " \"backgroundColor\" : \"#bbbbbb\" " + " }] " + "}"; + +const std::string REFRESH_TEST_007 = "" + "{ " + " \"tag\": \"refresh\" , " + " \"style\": [{ " + " \"progressColor\" : \"#bbbbbb\" " + " }] " + "}"; + +const std::string REFRESH_TEST_008 = "" + "{ " + " \"tag\": \"refresh\" , " + " \"event\": [ " + " \"refresh\" " + " ] " + "}"; + +const std::string REFRESH_TEST_009 = "" + "{" + " \"tag\": \"refresh\" ," + " \"child\":" + "[{" + " \"tag\":\"div\"" + "}]" + "}"; +} // namespace + +class DomRefreshTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); +}; + +void DomRefreshTest::SetUpTestCase() {} +void DomRefreshTest::TearDownTestCase() {} +void DomRefreshTest::SetUp() {} +void DomRefreshTest::TearDown() {} + +/** + * @tc.name: DomRefreshTest001 + * @tc.desc: Test refresh node are created as expected. + * @tc.type: FUNC + * @tc.require: AR000DQ1RH + * @tc.author: liujinwei + */ +HWTEST_F(DomRefreshTest, DomRefreshTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create node with it. + * @tc.expected: step1. node are created successfully. + */ + auto refresh = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(REFRESH_TEST_001); + ASSERT_TRUE(refresh != nullptr); + + /** + * @tc.steps: step2. Check styles and attributes of created dom node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + auto refreshComponent = AceType::DynamicCast(refresh)->GetSpecializedComponent(); + + ASSERT_TRUE(AceType::DynamicCast(refreshComponent)->GetRefreshType() == RefreshType::AUTO); + ASSERT_TRUE(AceType::DynamicCast(refreshComponent)->IsRefreshing() == false); +} + +/** + * @tc.name: DomRefreshTest002 + * @tc.desc: Test refresh node are created as expected. + * @tc.type: FUNC + * @tc.require: AR000DQ1RK + * @tc.author: liujinwei + */ +HWTEST_F(DomRefreshTest, DomRefreshTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create node with it. + * @tc.expected: step1. node are created successfully. + */ + auto refresh = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(REFRESH_TEST_002); + ASSERT_TRUE(refresh != nullptr); + + /** + * @tc.steps: step2. Check styles and attributes of created dom node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + auto refreshComponent = AceType::DynamicCast(refresh)->GetSpecializedComponent(); + + ASSERT_TRUE(AceType::DynamicCast(refreshComponent)->GetIndicatorOffset() == + Dimension(500.0, DimensionUnit::PX)); +} + +/** + * @tc.name: DomRefreshTest003 + * @tc.desc: Test refresh node are created as expected. + * @tc.type: FUNC + * @tc.require: AR000DQ1RK + * @tc.author: liujinwei + */ +HWTEST_F(DomRefreshTest, DomRefreshTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create node with it. + * @tc.expected: step1. node are created successfully. + */ + auto refresh = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(REFRESH_TEST_003); + ASSERT_TRUE(refresh != nullptr); + + /** + * @tc.steps: step2. Check styles and attributes of created dom node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + auto refreshComponent = AceType::DynamicCast(refresh)->GetSpecializedComponent(); + + ASSERT_TRUE(AceType::DynamicCast(refreshComponent)->IsRefreshing() == true); +} + +/** + * @tc.name: DomRefreshTest004 + * @tc.desc: Test refresh node are created as expected. + * @tc.type: FUNC + * @tc.require: AR000DQ1RK + * @tc.author: liujinwei + */ +HWTEST_F(DomRefreshTest, DomRefreshTest004, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create node with it. + * @tc.expected: step1. node are created successfully. + */ + auto refresh = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(REFRESH_TEST_004); + ASSERT_TRUE(refresh != nullptr); + + /** + * @tc.steps: step2. Check styles and attributes of created dom node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + auto refreshComponent = AceType::DynamicCast(refresh)->GetSpecializedComponent(); + ASSERT_TRUE(AceType::DynamicCast(refreshComponent)->IsShowLastTime() == true); +} + +/** + * @tc.name: DomRefreshTest005 + * @tc.desc: Test refresh node are created as expected. + * @tc.type: FUNC + * @tc.require: AR000DQ1RK + * @tc.author: liujinwei + */ +HWTEST_F(DomRefreshTest, DomRefreshTest005, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create node with it. + * @tc.expected: step1. node are created successfully. + */ + auto refresh = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(REFRESH_TEST_005); + ASSERT_TRUE(refresh != nullptr); + + /** + * @tc.steps: step2. Check styles and attributes of created dom node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + auto refreshComponent = AceType::DynamicCast(refresh)->GetSpecializedComponent(); + ASSERT_TRUE(AceType::DynamicCast(refreshComponent)->GetRefreshType() == RefreshType::PULL_DOWN); +} + +/** + * @tc.name: DomRefreshTest006 + * @tc.desc: Test refresh node are created as expected. + * @tc.type: FUNC + * @tc.require: AR000DQ1RL + * @tc.author: liujinwei + */ +HWTEST_F(DomRefreshTest, DomRefreshTest006, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create node with it. + * @tc.expected: step1. node are created successfully. + */ + auto refresh = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(REFRESH_TEST_006); + ASSERT_TRUE(refresh != nullptr); + + /** + * @tc.steps: step2. Check styles and attributes of created dom node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + auto refreshComponent = AceType::DynamicCast(refresh)->GetSpecializedComponent(); + ASSERT_TRUE(AceType::DynamicCast(refreshComponent)->GetBackgroundColor() == Color(0xffbbbbbb)); +} + +/** + * @tc.name: DomRefreshTest007 + * @tc.desc: Test refresh node are created as expected. + * @tc.type: FUNC + * @tc.require: AR000DQ1RL + * @tc.author: liujinwei + */ +HWTEST_F(DomRefreshTest, DomRefreshTest007, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create node with it. + * @tc.expected: step1. node are created successfully. + */ + auto refresh = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(REFRESH_TEST_007); + ASSERT_TRUE(refresh != nullptr); + + /** + * @tc.steps: step2. Check styles and attributes of created dom node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + auto refreshComponent = AceType::DynamicCast(refresh)->GetSpecializedComponent(); + ASSERT_TRUE(AceType::DynamicCast(refreshComponent)->GetProgressColor() == Color(0xffbbbbbb)); +} + +/** + * @tc.name: DomRefreshTest008 + * @tc.desc: Test refresh node are created as expected. + * @tc.type: FUNC + * @tc.require: AR000DQ1RJ + * @tc.author: liujinwei + */ +HWTEST_F(DomRefreshTest, DomRefreshTest008, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create node with it. + * @tc.expected: step1. node are created successfully. + */ + auto refresh = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(REFRESH_TEST_008); + ASSERT_TRUE(refresh != nullptr); + + /** + * @tc.steps: step2. Check styles and attributes of created dom node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + auto refreshComponent = AceType::DynamicCast(refresh)->GetSpecializedComponent(); + EXPECT_EQ(AceType::DynamicCast(refreshComponent)->GetRefreshEventId(), + std::to_string(refresh->GetNodeId())); +} + +/** + * @tc.name: DomRefreshTest009 + * @tc.desc: Test refresh node are created as expected. + * @tc.type: FUNC + * @tc.require: AR000DQ1RI + * @tc.author: liujinwei + */ +HWTEST_F(DomRefreshTest, DomRefreshTest009, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create node with it. + * @tc.expected: step1. node are created successfully. + */ + auto refresh = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(REFRESH_TEST_009); + ASSERT_TRUE(refresh != nullptr); + + /** + * @tc.steps: step2. Check styles and attributes of created dom node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + auto refreshComponent = AceType::DynamicCast(refresh)->GetSpecializedComponent(); + auto column = AceType::DynamicCast(refreshComponent)->GetChild(); + ASSERT_TRUE(column != nullptr); + ASSERT_EQ(AceType::DynamicCast(column)->GetChildren().size(), 1U); +} + +/** + * @tc.name: DomRefreshTest010 + * @tc.desc: Test refresh node are created as expected. + * @tc.type: FUNC + * @tc.require: AR000DQ4EG + * @tc.author: liujinwei + */ +HWTEST_F(DomRefreshTest, DomRefreshTest010, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create node with it. + * @tc.expected: step1. node are created successfully. + */ + auto refresh = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(REFRESH_TEST_001); + ASSERT_TRUE(refresh != nullptr); + + /** + * @tc.steps: step2. Check styles and attributes of created dom node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + auto refreshComponent = AceType::DynamicCast(refresh)->GetSpecializedComponent(); + + ASSERT_TRUE( + AceType::DynamicCast(refreshComponent)->GetLoadingDistance().Value() == LOADING_DISTANCE); + ASSERT_TRUE( + AceType::DynamicCast(refreshComponent)->GetRefreshDistance().Value() == REFRESH_DISTANCE); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/test/unittest/jsfrontend/domsearch/BUILD.gn b/frameworks/bridge/test/unittest/jsfrontend/domsearch/BUILD.gn new file mode 100644 index 00000000..9fae5e58 --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/domsearch/BUILD.gn @@ -0,0 +1,55 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/jsframework/search" + +ohos_unittest("DomSearchTest") { + module_out_path = module_output_path + + sources = [ + "$ace_root/frameworks/bridge/test/unittest/jsfrontend/dom_node_factory.cpp", + "dom_search_test.cpp", + ] + + configs = [ + ":config_domnode_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + external_deps = [ "hiviewdfx_hilog_native:libhilog" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_domnode_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + deps = [ ":DomSearchTest" ] +} diff --git a/frameworks/bridge/test/unittest/jsfrontend/domsearch/dom_search_test.cpp b/frameworks/bridge/test/unittest/jsfrontend/domsearch/dom_search_test.cpp new file mode 100644 index 00000000..3434a509 --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/domsearch/dom_search_test.cpp @@ -0,0 +1,308 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/utils/system_properties.h" +#include "core/components/common/layout/constants.h" +#include "frameworks/bridge/common/dom/dom_document.h" +#define private public +#include "frameworks/bridge/common/dom/dom_search.h" +#undef private +#include "frameworks/bridge/test/unittest/jsfrontend/dom_node_factory.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace::Framework { +namespace { + +const std::string TEST_ICON_SRC = "Common/email.png"; +const std::string TEST_HINT = "this is hint"; +const std::string TEST_VALUE = "this is value"; +const std::string EMPTY_STRING = ""; +const std::string TEST_TEXT_COLOR = "#FF0000"; +const std::string TEST_PLACEHOLDER_COLOR = "#0000FF"; +const std::string TEST_BACKGROUND_COLOR = "#00ff00"; +const std::string TEST_TEXT_FONT_FAMILY = "sans-serif"; +constexpr FontWeight TEST_TEXT_FONT_WEIGHT = FontWeight::W400; +constexpr double TEST_TEXT_FONT_SIZE = 30.0; +const std::string DEFAULT_COLOR = "#000000"; +const std::string DEFAULT_BACKGROUND_COLOR = "#0C000000"; +const std::string DEFAULT_TEXT_COLOR = "#E5000000"; +const std::string DEFAULT_PLACEHOLDER_COLOR = "#99000000"; +constexpr FontWeight DEFAULT_TEXT_FONT_WEIGHT = FontWeight::W400; +constexpr FontWeight DEFAULT_FONT_WEIGHT_VALUE = FontWeight::NORMAL; +constexpr double DEFAULT_TEXT_FONT_SIZE = 16.0; +constexpr double INVALID_TEXT_FONT_SIZE = 0.0; +constexpr double TEST_PADDING_LEFT_VALUE = 10.0; +constexpr double TEST_PADDING_TOP_VALUE = 20.0; +constexpr double TEST_PADDING_RIGHT_VALUE = 70.0; +constexpr double TEST_PADDING_BOTTOM_VALUE = 40.0; +constexpr double DEFAULT_PADDING_LEFT_VALUE = 4.0; +constexpr double DEFAULT_PADDING_TOP_VALUE = 0.0; +constexpr double DEFAULT_PADDING_RIGHT_VALUE = 40.0; +constexpr double DEFAULT_PADDING_BOTTOM_VALUE = 0.0; +constexpr double ERROR_PADDING_LEFT_VALUE = 0.0; + +const std::string SEARCH_JSON = "{ " + " \"tag\": \"search\", " + " \"attr\": [{ " + " \"icon\" : \"Common/email.png\" " + " }, " + " { " + " \"hint\" : \"this is hint\" " + " }, " + " { " + " \"value\" : \"this is value\" " + " }], " + " \"style\": [{ " + " \"fontSize\":\"30.0\" " + " }, " + " { " + " \"fontWeight\":\"400\" " + " }, " + " { " + " \"color\":\"#ff0000\" " + " }, " + " { " + " \"placeholderColor\":\"#0000ff\" " + " }, " + " { " + " \"fontFamily\":\"sans-serif\" " + " }, " + " { " + " \"backgroundColor\":\"#00ff00\" " + " }, " + " { " + " \"paddingLeft\":\"10px\" " + " }, " + " { " + " \"paddingTop\":\"20px\" " + " }, " + " { " + " \"paddingRight\":\"30px\" " + " }, " + " { " + " \"paddingBottom\":\"40px\" " + " }] " + "} "; +const std::string INVALID_SEARCH_JSON = "{ " + " \"tag\": \"search\", " + " \"style\": [{ " + " \"fontSize\":\"abcd\" " + " }, " + " { " + " \"fontWeight\":\"abcd\" " + " }, " + " { " + " \"color\":\"abcd\" " + " }, " + " { " + " \"placeholderColor\":\"abcd\" " + " }, " + " { " + " \"paddingLeft\":\"abcd\" " + " }, " + " { " + " \"paddingTop\":\"abcd\" " + " }, " + " { " + " \"paddingRight\":\"abcd\" " + " }, " + " { " + " \"paddingBottom\":\"abcd\" " + " }] " + "} "; + +const std::string PADDING_SEARCH_JSON = "{ " + " \"tag\": \"search\", " + " \"style\": [{ " + " \"paddingStart\":\"10px\" " + " }, " + " { " + " \"paddingEnd\":\"30px\" " + " }] " + "} "; +} // namespace + +class DomSearchTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); +}; + +void DomSearchTest::SetUpTestCase() {} +void DomSearchTest::TearDownTestCase() {} +void DomSearchTest::SetUp() {} +void DomSearchTest::TearDown() {} + +bool IsTv() +{ + return SystemProperties::GetDeviceType() == DeviceType::TV; +} + +/** + * @tc.name: CreateSearchFromDsl001 + * @tc.desc: Test search node and search component created successfully with all attributes set. + * @tc.type: FUNC + * @tc.require: AR000DQ1RC + */ +HWTEST_F(DomSearchTest, CreateSearchFromDsl001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct json string with attributes set, then create search node with it . + * @tc.expected: step1. Search node and child search component are created with correct attributes and styles. + */ + auto domSearch = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(SEARCH_JSON); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(domSearch); + RefPtr searchComponent = AceType::DynamicCast(boxChild->GetChild()); + EXPECT_TRUE(searchComponent); + RefPtr textFieldComponent = + AceType::DynamicCast(searchComponent->GetChild()); + EXPECT_TRUE(textFieldComponent); + + /** + * @tc.steps: step2. Check styles and attributes of created search node. + * @tc.expected: step2. Search node's attrs and styles are as expected. + */ + const auto& textStyle = AceType::DynamicCast(domSearch)->textStyle_; + EXPECT_EQ(textStyle.GetFontSize().Value(), TEST_TEXT_FONT_SIZE); + EXPECT_TRUE(textStyle.GetFontWeight() == TEST_TEXT_FONT_WEIGHT); + EXPECT_EQ(textStyle.GetFontFamilies()[0], TEST_TEXT_FONT_FAMILY); + EXPECT_EQ(textFieldComponent->GetFocusTextColor(), Color::FromString(TEST_TEXT_COLOR)); + EXPECT_EQ(textFieldComponent->GetPlaceholderColor(), Color::FromString(TEST_PLACEHOLDER_COLOR)); + EXPECT_EQ(textFieldComponent->GetBgColor(), Color::FromString(TEST_BACKGROUND_COLOR)); + EXPECT_EQ(textFieldComponent->GetIconImage(), (IsTv() ? "" : TEST_ICON_SRC)); + EXPECT_EQ(textFieldComponent->GetPlaceholder(), TEST_HINT); + EXPECT_EQ(textFieldComponent->GetValue(), TEST_VALUE); + EXPECT_EQ(textFieldComponent->GetDecoration()->GetPadding().Left().Value(), TEST_PADDING_LEFT_VALUE); + EXPECT_EQ(textFieldComponent->GetDecoration()->GetPadding().Top().Value(), TEST_PADDING_TOP_VALUE); + EXPECT_EQ(textFieldComponent->GetDecoration()->GetPadding().Right().Value(), TEST_PADDING_RIGHT_VALUE); + EXPECT_EQ(textFieldComponent->GetDecoration()->GetPadding().Bottom().Value(), TEST_PADDING_BOTTOM_VALUE); +} + +/** + * @tc.name: CreateSearchFromDsl002 + * @tc.desc: Test search node and search component created correctly with no styles and attributes set. + * @tc.type: FUNC + * @tc.require: AR000DQ1RC + */ +HWTEST_F(DomSearchTest, CreateSearchFromDsl002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct json string with no styles and attributes set, then create search node with it . + * @tc.expected: step1. Search node and child search component are created with default attributes and styles. + */ + std::string searchDsl = "{ \"tag\": \"search\" }"; + auto domSearch = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(searchDsl); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(domSearch); + RefPtr searchComponent = AceType::DynamicCast(boxChild->GetChild()); + EXPECT_TRUE(searchComponent); + RefPtr textFieldComponent = + AceType::DynamicCast(searchComponent->GetChild()); + EXPECT_TRUE(textFieldComponent); + + /** + * @tc.steps: step2. Check styles and attributes of created search node. + * @tc.expected: step2. Search node's attrs and styles are as default. + */ + const auto& textStyle = AceType::DynamicCast(domSearch)->textStyle_; + EXPECT_EQ(textStyle.GetFontSize().Value(), DEFAULT_TEXT_FONT_SIZE); + EXPECT_TRUE(textStyle.GetFontWeight() == DEFAULT_TEXT_FONT_WEIGHT); + EXPECT_EQ(textStyle.GetFontFamilies()[0], TEST_TEXT_FONT_FAMILY); + EXPECT_EQ(textFieldComponent->GetIconImage(), EMPTY_STRING); + EXPECT_EQ(textFieldComponent->GetPlaceholder(), EMPTY_STRING); + EXPECT_EQ(textFieldComponent->GetTextEditController()->GetText(), EMPTY_STRING); + EXPECT_EQ(textFieldComponent->GetFocusTextColor(), Color::FromString(DEFAULT_TEXT_COLOR)); + EXPECT_EQ(textFieldComponent->GetPlaceholderColor(), Color::FromString(DEFAULT_PLACEHOLDER_COLOR)); + EXPECT_EQ(textFieldComponent->GetBgColor(), Color::FromString(DEFAULT_BACKGROUND_COLOR)); + EXPECT_EQ(textFieldComponent->GetDecoration()->GetPadding().Left().Value(), DEFAULT_PADDING_LEFT_VALUE); + EXPECT_EQ(textFieldComponent->GetDecoration()->GetPadding().Top().Value(), DEFAULT_PADDING_TOP_VALUE); + EXPECT_EQ(textFieldComponent->GetDecoration()->GetPadding().Right().Value(), DEFAULT_PADDING_RIGHT_VALUE); + EXPECT_EQ(textFieldComponent->GetDecoration()->GetPadding().Bottom().Value(), DEFAULT_PADDING_BOTTOM_VALUE); +} + +/** + * @tc.name: CreateSearchFromDsl003 + * @tc.desc: Test search node and search component created correctly with invalid text styles and attributes set. + * @tc.type: FUNC + * @tc.require: AR000DQ1RC + */ +HWTEST_F(DomSearchTest, CreateSearchFromDsl003, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with invalid text styles and attributes set, then create search node with it. + * @tc.expected: step1. Search node and child search component are created with default text attributes and styles. + */ + auto domSearch = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(INVALID_SEARCH_JSON); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(domSearch); + RefPtr searchComponent = AceType::DynamicCast(boxChild->GetChild()); + EXPECT_TRUE(searchComponent); + RefPtr textFieldComponent = + AceType::DynamicCast(searchComponent->GetChild()); + EXPECT_TRUE(textFieldComponent); + + /** + * @tc.steps: step2. Check styles and attributes of created search node. + * @tc.expected: step2. Search node's attrs and styles are as default. + */ + const auto& textStyle = AceType::DynamicCast(domSearch)->textStyle_; + EXPECT_EQ(textStyle.GetFontSize().Value(), INVALID_TEXT_FONT_SIZE); + EXPECT_TRUE(textStyle.GetFontWeight() == DEFAULT_FONT_WEIGHT_VALUE); + EXPECT_EQ(textStyle.GetFontFamilies()[0], TEST_TEXT_FONT_FAMILY); + EXPECT_EQ(textFieldComponent->GetFocusTextColor(), Color::FromString(DEFAULT_COLOR)); + EXPECT_EQ(textFieldComponent->GetPlaceholderColor(), Color::FromString(DEFAULT_COLOR)); + EXPECT_EQ(textFieldComponent->GetBgColor(), Color::FromString(DEFAULT_BACKGROUND_COLOR)); + EXPECT_EQ(textFieldComponent->GetDecoration()->GetPadding().Left().Value(), ERROR_PADDING_LEFT_VALUE); + EXPECT_EQ(textFieldComponent->GetDecoration()->GetPadding().Top().Value(), DEFAULT_PADDING_TOP_VALUE); + EXPECT_EQ(textFieldComponent->GetDecoration()->GetPadding().Right().Value(), DEFAULT_PADDING_RIGHT_VALUE); + EXPECT_EQ(textFieldComponent->GetDecoration()->GetPadding().Bottom().Value(), DEFAULT_PADDING_BOTTOM_VALUE); + EXPECT_EQ(textFieldComponent->GetIconImage(), EMPTY_STRING); + EXPECT_EQ(textFieldComponent->GetPlaceholder(), EMPTY_STRING); + EXPECT_EQ(textFieldComponent->GetTextEditController()->GetText(), EMPTY_STRING); +} + +/** + * @tc.name: CreateSearchFromDsl004 + * @tc.desc: Test search node and search component created correctly with paddingStart and paddingEnd styles. + * @tc.type: FUNC + * @tc.require: AR000DQ1RC + */ +HWTEST_F(DomSearchTest, CreateSearchFromDsl004, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with paddingStart and paddingEnd set, then create search node with it. + * @tc.expected: step1. Search node and child search component are created with correct paddingStart and paddingEnd. + */ + auto domSearch = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(PADDING_SEARCH_JSON); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(domSearch); + RefPtr searchComponent = AceType::DynamicCast(boxChild->GetChild()); + EXPECT_TRUE(searchComponent); + RefPtr textFieldComponent = + AceType::DynamicCast(searchComponent->GetChild()); + EXPECT_TRUE(textFieldComponent); + + /** + * @tc.steps: step2. Check padding values of created search node. + * @tc.expected: step2. Search node's padding values are as expected. + */ + EXPECT_EQ(textFieldComponent->GetDecoration()->GetPadding().Left().Value(), TEST_PADDING_LEFT_VALUE); + EXPECT_EQ(textFieldComponent->GetDecoration()->GetPadding().Right().Value(), TEST_PADDING_RIGHT_VALUE); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/test/unittest/jsfrontend/domspan/BUILD.gn b/frameworks/bridge/test/unittest/jsfrontend/domspan/BUILD.gn new file mode 100644 index 00000000..5dbb9994 --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/domspan/BUILD.gn @@ -0,0 +1,57 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/jsframework/span" + +ohos_unittest("DomSpanTest") { + module_out_path = module_output_path + + sources = [ + "../dom_node_factory.cpp", + "dom_span_test.cpp", + ] + + configs = [ + ":config_domnode_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + external_deps = [ "hiviewdfx_hilog_native:libhilog" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_domnode_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":DomSpanTest" ] +} diff --git a/frameworks/bridge/test/unittest/jsfrontend/domspan/dom_span_test.cpp b/frameworks/bridge/test/unittest/jsfrontend/domspan/dom_span_test.cpp new file mode 100644 index 00000000..d08983e0 --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/domspan/dom_span_test.cpp @@ -0,0 +1,185 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "core/components/common/layout/constants.h" +#include "frameworks/bridge/common/dom/dom_document.h" +#include "frameworks/bridge/common/dom/dom_span.h" +#include "frameworks/bridge/test/unittest/jsfrontend/dom_node_factory.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace::Framework { +namespace { + +const std::string SPAN_DATA = "ohos1234@?!"; +constexpr double TEST_FONT_SIZE = 50.0; +constexpr int32_t TEST_FONT_WEIGHT = 1; +constexpr int32_t TEST_FONT_STYLE = 1; +constexpr int32_t TEST_TEXT_DECORATION = 2; +const std::string TEST_FONT_FAMILY = "serif"; + +constexpr int32_t DEFAULT_FONT_WEIGHT = 10; +constexpr int32_t DEFAULT_FONT_STYLE = 0; +constexpr int32_t DEFAULT_TEXT_DECORATION = 0; + +} // namespace + +class DomSpanTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; +}; + +void DomSpanTest::SetUpTestCase() {} +void DomSpanTest::TearDownTestCase() {} +void DomSpanTest::SetUp() {} +void DomSpanTest::TearDown() {} + +/** + * @tc.name: DomSpanTest001 + * @tc.desc: Verify that DomSpan can be created. + * @tc.type: FUNC + * @tc.require: AR000DD66C + * @tc.author: wangchun + */ +HWTEST_F(DomSpanTest, DomSpanTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. call JsonUtil interface and create DomSpan. + */ + const std::string jsonSpanStr = "" + "{ " + " \"tag\": \"span\" " + "}"; + + /** + * @tc.steps: step2. call JsonUtil interface and create DomSpan. + */ + auto domNodeSpan = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonSpanStr); + + /** + * @tc.steps: step3. Verify whether the DomSpan. + * @tc.expected: step3. DomSpan is not null. + */ + ASSERT_TRUE(domNodeSpan != nullptr); +} + +/** + * @tc.name: DomSpanTest002 + * @tc.desc: Verify that DomSpan can be set styles. + * @tc.type: FUNC + * @tc.require: AR000DD66C + * @tc.author: wangchun + */ +HWTEST_F(DomSpanTest, DomSpanTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of DomSpan with all attributes. + */ + const std::string jsonSpanStr = "" + "{ " + " \"tag\": \"span\", " + " \"attr\" : [{ " + " \"value\" : \"ohos1234@?!\" " + " }], " + " \"style\": [{ " + " \"fontSize\":\"50.0\" " + " }, " + " {" + " \"fontWeight\":\"200\" " + " }," + " {" + " \"color\":\"#000000ff\" " + " }," + " {" + " \"fontStyle\":\"italic\" " + " }," + " {" + " \"textDecoration\":\"overline\"" + " }," + " { " + " \"fontFamily\":\"serif\" " + " }]" + "}"; + + /** + * @tc.steps: step2. call JsonUtil interface, create DomSpan and set its style. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonSpanStr); + auto rootComponent = domNodeRoot->GetRootComponent(); + RefPtr spanChild = AceType::DynamicCast(rootComponent->GetChild()); + const auto& spanStyle = spanChild->GetTextStyle(); + + /** + * @tc.steps: step3. Check all the attributes matched. + * @tc.expected: step3. All the attributes are matched. + */ + EXPECT_EQ(spanChild->GetSpanData(), SPAN_DATA); + EXPECT_TRUE(NearEqual(spanStyle.GetFontSize().Value(), TEST_FONT_SIZE)); + EXPECT_EQ(static_cast(spanStyle.GetFontWeight()), TEST_FONT_WEIGHT); + EXPECT_EQ(spanStyle.GetTextColor(), Color::FromString("#000000ff")); + EXPECT_TRUE(NearEqual(static_cast(spanStyle.GetFontStyle()), TEST_FONT_STYLE)); + EXPECT_TRUE(NearEqual(static_cast(spanStyle.GetTextDecoration()), TEST_TEXT_DECORATION)); + EXPECT_EQ(spanStyle.GetFontFamilies()[0], TEST_FONT_FAMILY); +} + +/** + * @tc.name: DomSpanTest003 + * @tc.desc: Verify that DomSpan can be set styles to the default values when styles' attributes are invalid. + * @tc.type: FUNC + * @tc.require: AR000DD66C + * @tc.author: wangchun + */ +HWTEST_F(DomSpanTest, DomSpanTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of DomSpan with invalid attributes. + */ + const std::string jsonSpanStr = "" + "{ " + " \"tag\": \"span\", " + " \"style\": [{ " + " \"fontWeight\":\"invalidValue\" " + " }," + " {" + " \"fontStyle\":\"invalidValue\" " + " }," + " {" + " \"textDecoration\":\"invalidValue\" " + " }]" + "}"; + + /** + * @tc.steps: step2. call JsonUtil interface, create DomSpan and set attributes' value. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonSpanStr); + auto rootComponent = domNodeRoot->GetRootComponent(); + RefPtr spanChild = AceType::DynamicCast(rootComponent->GetChild()); + const auto& spanStyle = spanChild->GetTextStyle(); + + /** + * @tc.steps: step3. Check all the attributes matched with default values. + * @tc.expected: step3. All the attributes are matched. + */ + EXPECT_EQ(static_cast(spanStyle.GetFontWeight()), DEFAULT_FONT_WEIGHT); + EXPECT_TRUE(NearEqual(static_cast(spanStyle.GetFontStyle()), DEFAULT_FONT_STYLE)); + EXPECT_TRUE(NearEqual(static_cast(spanStyle.GetTextDecoration()), DEFAULT_TEXT_DECORATION)); +} +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/test/unittest/jsfrontend/domsvg/BUILD.gn b/frameworks/bridge/test/unittest/jsfrontend/domsvg/BUILD.gn new file mode 100644 index 00000000..fb8c32df --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/domsvg/BUILD.gn @@ -0,0 +1,57 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/jsframework/svg" + +ohos_unittest("DomSvgTest") { + module_out_path = module_output_path + + sources = [ + "../dom_node_factory.cpp", + "dom_svg_test.cpp", + ] + + configs = [ + ":config_domnode_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + external_deps = [ "hiviewdfx_hilog_native:libhilog" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_domnode_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":DomSvgTest" ] +} diff --git a/frameworks/bridge/test/unittest/jsfrontend/domsvg/dom_svg_test.cpp b/frameworks/bridge/test/unittest/jsfrontend/domsvg/dom_svg_test.cpp new file mode 100644 index 00000000..3ef031ab --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/domsvg/dom_svg_test.cpp @@ -0,0 +1,608 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/json/json_util.h" +#include "base/utils/utils.h" +#include "core/components/common/layout/constants.h" +#include "frameworks/bridge/common/dom/dom_document.h" +#include "frameworks/bridge/common/dom/dom_svg.h" +#include "frameworks/bridge/common/dom/dom_svg_animate.h" +#include "frameworks/bridge/common/dom/dom_svg_animate_motion.h" +#include "frameworks/bridge/common/dom/dom_svg_circle.h" +#include "frameworks/bridge/common/dom/dom_svg_ellipse.h" +#include "frameworks/bridge/common/dom/dom_svg_line.h" +#include "frameworks/bridge/common/dom/dom_svg_path.h" +#include "frameworks/bridge/common/dom/dom_svg_polygon.h" +#include "frameworks/bridge/common/dom/dom_svg_polyline.h" +#include "frameworks/bridge/common/dom/dom_svg_rect.h" +#include "frameworks/bridge/test/unittest/jsfrontend/dom_node_factory.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace::Framework { + +class DomSvgTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); + void CheckPresentationAttrs(const RefPtr& svgSharp); +}; + +void DomSvgTest::SetUpTestCase() {} +void DomSvgTest::TearDownTestCase() {} +void DomSvgTest::SetUp() {} +void DomSvgTest::TearDown() {} + +void DomSvgTest::CheckPresentationAttrs(const RefPtr& svgSharp) +{ + /** + * @tc.steps: step1. Check styles and attributes of created node. + * @tc.expected: step1. The styles and attributes are as expected. + */ + EXPECT_NEAR(svgSharp->GetOpacity(), 0.8, FLT_EPSILON); + ASSERT_TRUE(svgSharp->GetFillState().GetColor() == Color::RED); + EXPECT_NEAR(svgSharp->GetFillState().GetOpacity(), 0.5, FLT_EPSILON); + ASSERT_TRUE(svgSharp->GetStrokeState().GetColor() == Color::BLUE); + EXPECT_NEAR(svgSharp->GetStrokeState().GetOpacity(), 0.3, FLT_EPSILON); + EXPECT_NEAR(svgSharp->GetStrokeState().GetLineDash().dashOffset, 2.0, FLT_EPSILON); + ASSERT_TRUE(svgSharp->GetStrokeState().GetLineDash().lineDash.size() == 2); + EXPECT_NEAR(svgSharp->GetStrokeState().GetLineDash().lineDash.at(0), 8.0, FLT_EPSILON); + EXPECT_NEAR(svgSharp->GetStrokeState().GetLineDash().lineDash.at(1), 4.0, FLT_EPSILON); + ASSERT_TRUE(svgSharp->GetStrokeState().GetLineCap() == LineCapStyle::BUTT); + ASSERT_TRUE(svgSharp->GetStrokeState().GetLineJoin() == LineJoinStyle::MITER); + EXPECT_NEAR(svgSharp->GetStrokeState().GetMiterLimit(), 2.0, FLT_EPSILON); +} + +/** + * @tc.name: DomSvgTest001 + * @tc.desc: Verify that DomSvg can be created and set attrs correctly. + * @tc.type: FUNC + * @tc.require: AR000FL0TG + * @tc.author: chenlien + */ +HWTEST_F(DomSvgTest, DomSvgTest001, TestSize.Level1) +{ + const std::string jsonStr = "" + "{ " + " \"tag\": \"svg\", " + " \"attr\": [{ " + " \"x\" : \"10\" " + " }, " + " { " + " \"y\" : \"20\" " + " }, " + " { " + " \"width\" : \"100\" " + " }, " + " { " + " \"height\" : \"50\" " + " }, " + " { " + " \"viewbox\" : \"0 0 100 50\" " + " }] " + "}"; + + /** + * @tc.steps: step1. Construct string with right fields, then create svg node with it. + * @tc.expected: step1. svg node are created successfully. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonStr); + ASSERT_TRUE(domNodeRoot != nullptr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + RefPtr svgComponent = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(svgComponent != nullptr); + /** + * @tc.steps: step2. Check styles and attributes of created node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + EXPECT_NEAR(svgComponent->GetX().Value(), 10.0, FLT_EPSILON); + EXPECT_NEAR(svgComponent->GetY().Value(), 20.0, FLT_EPSILON); + EXPECT_NEAR(svgComponent->GetWidth().Value(), 100.0, FLT_EPSILON); + EXPECT_NEAR(svgComponent->GetHeight().Value(), 50.0, FLT_EPSILON); + ASSERT_TRUE(svgComponent->GetViewBox() == Rect(0.0, 0.0, 100.0, 50.0)); +} + +/** + * @tc.name: DomSvgTest002 + * @tc.desc: Verify that DomSvg can be created and set common attrs correctly. + * @tc.type: FUNC + * @tc.require: AR000FL0TG + * @tc.author: chenlien + */ +HWTEST_F(DomSvgTest, DomSvgTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create svg node with it. + * @tc.expected: step1. svg node are created successfully. + */ + const std::string jsonStr = "" + "{ " + " \"tag\": \"svg\", " + " \"attr\": [{ " + " \"fill\" : \"red\" " + " }, " + " { " + " \"fillOpacity\" : \"0.5\" " + " }, " + " { " + " \"stroke\" : \"blue\" " + " }, " + " { " + " \"strokeWidth\" : \"5\" " + " }, " + " { " + " \"strokeDasharray\" : \"8 4\" " + " }, " + " { " + " \"strokeDashoffset\" : \"2\" " + " }, " + " { " + " \"strokeLinecap\" : \"butt\" " + " }, " + " { " + " \"strokeLinejoin\" : \"miter\"" + " }, " + " { " + " \"strokeMiterlimit\" : \"2\" " + " }, " + " { " + " \"strokeOpacity\" : \"0.3\" " + " }, " + " { " + " \"opacity\" : \"0.8\" " + " }] " + "}"; + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonStr); + ASSERT_TRUE(domNodeRoot != nullptr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + RefPtr svgComponent = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(svgComponent != nullptr); + /** + * @tc.steps: step2. Check styles and attributes of created svg node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + CheckPresentationAttrs(svgComponent); +} + +/** + * @tc.name: DomSvgTest003 + * @tc.desc: Verify that DomSvgRect can be created and set attrs correctly. + * @tc.type: FUNC + * @tc.require: AR000FL0TH + * @tc.author: chenlien + */ +HWTEST_F(DomSvgTest, DomSvgTest003, TestSize.Level1) +{ + const std::string jsonStr = "" + "{ " + " \"tag\": \"rect\", " + " \"attr\": [{ " + " \"x\" : \"10\" " + " }, " + " { " + " \"y\" : \"20\" " + " }, " + " { " + " \"width\" : \"100\" " + " }, " + " { " + " \"height\" : \"50\" " + " }, " + " { " + " \"rx\" : \"5\" " + " }, " + " { " + " \"ry\" : \"3\" " + " }] " + "}"; + + /** + * @tc.steps: step1. Construct string with right fields, then create svg rect node with it. + * @tc.expected: step1. svg rect node are created successfully. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonStr); + ASSERT_TRUE(domNodeRoot != nullptr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + RefPtr component = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(component != nullptr); + /** + * @tc.steps: step2. Check styles and attributes of created rect node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + EXPECT_NEAR(component->GetX().Value(), 10.0, FLT_EPSILON); + EXPECT_NEAR(component->GetY().Value(), 20.0, FLT_EPSILON); + EXPECT_NEAR(component->GetWidth().Value(), 100.0, FLT_EPSILON); + EXPECT_NEAR(component->GetHeight().Value(), 50.0, FLT_EPSILON); + EXPECT_NEAR(component->GetRx().Value(), 5.0, FLT_EPSILON); + EXPECT_NEAR(component->GetRy().Value(), 3.0, FLT_EPSILON); +} + +/** + * @tc.name: DomSvgTest004 + * @tc.desc: Verify that DomSvgCircle can be created and set attrs correctly. + * @tc.type: FUNC + * @tc.require: AR000FL0TH + * @tc.author: chenlien + */ +HWTEST_F(DomSvgTest, DomSvgTest004, TestSize.Level1) +{ + const std::string jsonStr = "" + "{ " + " \"tag\": \"circle\", " + " \"attr\": [{ " + " \"cx\" : \"20\" " + " }, " + " { " + " \"cy\" : \"30\" " + " }, " + " { " + " \"r\" : \"50\" " + " }] " + "}"; + + /** + * @tc.steps: step1. Construct string with right fields, then create svg circle node with it. + * @tc.expected: step1. svg circle node are created successfully. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonStr); + ASSERT_TRUE(domNodeRoot != nullptr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + RefPtr component = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(component != nullptr); + /** + * @tc.steps: step2. Check styles and attributes of created circle node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + EXPECT_NEAR(component->GetCx().Value(), 20.0, FLT_EPSILON); + EXPECT_NEAR(component->GetCy().Value(), 30.0, FLT_EPSILON); + EXPECT_NEAR(component->GetR().Value(), 50.0, FLT_EPSILON); +} + +/** + * @tc.name: DomSvgTest005 + * @tc.desc: Verify that DomSvgEllipse can be created and set attrs correctly. + * @tc.type: FUNC + * @tc.require: AR000FL0TJ + * @tc.author: chenlien + */ +HWTEST_F(DomSvgTest, DomSvgTest005, TestSize.Level1) +{ + const std::string jsonStr = "" + "{ " + " \"tag\": \"ellipse\", " + " \"attr\": [{ " + " \"cx\" : \"20\" " + " }, " + " { " + " \"cy\" : \"30\" " + " }, " + " { " + " \"rx\" : \"50\" " + " }, " + " { " + " \"ry\" : \"40\" " + " }] " + "}"; + + /** + * @tc.steps: step1. Construct string with right fields, then create svg ellipse node with it. + * @tc.expected: step1. svg ellipse node are created successfully. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonStr); + ASSERT_TRUE(domNodeRoot != nullptr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + RefPtr component = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(component != nullptr); + /** + * @tc.steps: step2. Check styles and attributes of created ellipse node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + EXPECT_NEAR(component->GetCx().Value(), 20.0, FLT_EPSILON); + EXPECT_NEAR(component->GetCy().Value(), 30.0, FLT_EPSILON); + EXPECT_NEAR(component->GetRx().Value(), 50.0, FLT_EPSILON); + EXPECT_NEAR(component->GetRy().Value(), 40.0, FLT_EPSILON); +} + +/** + * @tc.name: DomSvgTest006 + * @tc.desc: Verify that DomSvgPath can be created and set attrs correctly. + * @tc.type: FUNC + * @tc.require: AR000FL0TK + * @tc.author: chenlien + */ +HWTEST_F(DomSvgTest, DomSvgTest006, TestSize.Level1) +{ + const std::string jsonStr = "" + "{ " + " \"tag\": \"path\", " + " \"attr\": [{ " + " \"d\" : \"M20,50 C20,-50 180,150 180,50 C180,-50 20,150 20,50 z\"" + " }] " + "}"; + + /** + * @tc.steps: step1. Construct string with right fields, then create svg path node with it. + * @tc.expected: step1. svg path node are created successfully. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonStr); + ASSERT_TRUE(domNodeRoot != nullptr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + RefPtr component = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(component != nullptr); + /** + * @tc.steps: step2. Check styles and attributes of created path node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + ASSERT_TRUE(component->GetD() == "M20,50 C20,-50 180,150 180,50 C180,-50 20,150 20,50 z"); +} + +/** + * @tc.name: DomSvgTest007 + * @tc.desc: Verify that DomSvgLine can be created and set attrs correctly. + * @tc.type: FUNC + * @tc.require: AR000FL0TL + * @tc.author: chenlien + */ +HWTEST_F(DomSvgTest, DomSvgTest007, TestSize.Level1) +{ + const std::string jsonStr = "" + "{ " + " \"tag\": \"line\", " + " \"attr\": [{ " + " \"x1\" : \"10\" " + " }, " + " { " + " \"y1\" : \"20\" " + " }, " + " { " + " \"x2\" : \"60\" " + " }, " + " { " + " \"y2\" : \"50\" " + " }] " + "}"; + + /** + * @tc.steps: step1. Construct string with right fields, then create svg line node with it. + * @tc.expected: step1. svg line node are created successfully. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonStr); + ASSERT_TRUE(domNodeRoot != nullptr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + RefPtr component = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(component != nullptr); + /** + * @tc.steps: step2. Check styles and attributes of created line node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + EXPECT_NEAR(component->GetX1().Value(), 10.0, FLT_EPSILON); + EXPECT_NEAR(component->GetY1().Value(), 20.0, FLT_EPSILON); + EXPECT_NEAR(component->GetX2().Value(), 60.0, FLT_EPSILON); + EXPECT_NEAR(component->GetY2().Value(), 50.0, FLT_EPSILON); +} + +/** + * @tc.name: DomSvgTest008 + * @tc.desc: Verify that DomSvgPolyline can be created and set attrs correctly. + * @tc.type: FUNC + * @tc.require: AR000FL0TM + * @tc.author: chenlien + */ +HWTEST_F(DomSvgTest, DomSvgTest008, TestSize.Level1) +{ + const std::string jsonStr = "" + "{ " + " \"tag\": \"polyline\", " + " \"attr\": [{ " + " \"points\" : \"0,400 60,325 70,375 100,300\"" + " }] " + "}"; + + /** + * @tc.steps: step1. Construct string with right fields, then create svg polyline node with it. + * @tc.expected: step1. svg polyline node are created successfully. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonStr); + ASSERT_TRUE(domNodeRoot != nullptr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + RefPtr component = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(component != nullptr); + /** + * @tc.steps: step2. Check styles and attributes of created polyline node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + ASSERT_TRUE(component->GetPoints() == "0,400 60,325 70,375 100,300"); +} + +/** + * @tc.name: DomSvgTest009 + * @tc.desc: Verify that DomSvgPolygon can be created and set attrs correctly. + * @tc.type: FUNC + * @tc.require: AR000FL0TN + * @tc.author: chenlien + */ +HWTEST_F(DomSvgTest, DomSvgTest009, TestSize.Level1) +{ + const std::string jsonStr = "" + "{ " + " \"tag\": \"polygon\", " + " \"attr\": [{ " + " \"points\" : \"0,400 60,325 70,375 100,300\"" + " }] " + "}"; + + /** + * @tc.steps: step1. Construct string with right fields, then create svg polygon node with it. + * @tc.expected: step1. svg polygon node are created successfully. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonStr); + ASSERT_TRUE(domNodeRoot != nullptr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + RefPtr component = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(component != nullptr); + /** + * @tc.steps: step2. Check styles and attributes of created polygon node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + ASSERT_TRUE(component->GetPoints() == "0,400 60,325 70,375 100,300"); +} + +/** + * @tc.name: DomSvgTest010 + * @tc.desc: Verify that DomSvgAnimate can be created and set attrs correctly. + * @tc.type: FUNC + * @tc.require: AR000FL0TR + * @tc.author: chenlien + */ +HWTEST_F(DomSvgTest, DomSvgTest010, TestSize.Level1) +{ + const std::string jsonStr = "" + "{ " + " \"tag\": \"animate\", " + " \"attr\": [{ " + " \"begin\" : \"200\" " + " }, " + " { " + " \"dur\" : \"2000\" " + " }, " + " { " + " \"repeatcount\" : \"3\" " + " }, " + " { " + " \"fill\" : \"freeze\" " + " }, " + " { " + " \"calcmode\" : \"linear\" " + " }, " + " { " + " \"from\" : \"100\" " + " }, " + " { " + " \"to\" : \"300\" " + " }, " + " { " + " \"attributename\" : \"width\" " + " }] " + "}"; + + /** + * @tc.steps: step1. Construct string with right fields, then create svg animate node with it. + * @tc.expected: step1. svg animate node are created successfully. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonStr); + ASSERT_TRUE(domNodeRoot != nullptr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + RefPtr component = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(component != nullptr); + /** + * @tc.steps: step2. Check styles and attributes of created animate node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + ASSERT_TRUE(component->GetBegin() == 200); + ASSERT_TRUE(component->GetDur() == 2000); + ASSERT_TRUE(component->GetRepeatCount() == 3); + ASSERT_TRUE(component->GetFillMode() == FillMode::FORWARDS); + ASSERT_TRUE(component->GetCalcMode() == CalcMode::LINEAR); + ASSERT_TRUE(component->GetAttributeName() == "width"); + ASSERT_TRUE(component->GetFrom() == "100"); + ASSERT_TRUE(component->GetTo() == "300"); +} + +/** + * @tc.name: DomSvgTest011 + * @tc.desc: Verify that DomSvgAnimateMotion can be created and set attrs correctly. + * @tc.type: FUNC + * @tc.require: AR000FL0TS + * @tc.author: chenlien + */ +HWTEST_F(DomSvgTest, DomSvgTest011, TestSize.Level1) +{ + const std::string jsonStr = "" + "{ " + " \"tag\": \"animatemotion\", " + " \"attr\": [{ " + " \"begin\" : \"200\" " + " }, " + " { " + " \"dur\" : \"2000\" " + " }, " + " { " + " \"repeatcount\" : \"3\" " + " }, " + " { " + " \"fill\" : \"freeze\" " + " }, " + " { " + " \"calcmode\" : \"spline\" " + " }, " + " { " + " \"keypoints\" : \"0;0.2;0.5;1\" " + " }, " + " { " + " \"keytimes\" : \"0;0.1;0.8;1\" " + " }, " + " { " + " \"path\" : \"M20,50 C20,-50 180,150 180,50 C180,-50 20,150 20,50 z\"" + " }, " + " { " + " \"rotate\" : \"auto\" " + " }, " + " { " + " \"keysplines\" : \"0.5 0 0.5 1; 0.5 0 0.5 1; 0.5 0 0.5 1\" " + " }] " + "}"; + + /** + * @tc.steps: step1. Construct string with right fields, then create svg animate motion node with it. + * @tc.expected: step1. svg animate motion node are created successfully. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonStr); + ASSERT_TRUE(domNodeRoot != nullptr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + RefPtr component = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(component != nullptr); + /** + * @tc.steps: step2. Check styles and attributes of created animate motion node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + ASSERT_TRUE(component->GetBegin() == 200); + ASSERT_TRUE(component->GetDur() == 2000); + ASSERT_TRUE(component->GetRepeatCount() == 3); + ASSERT_TRUE(component->GetFillMode() == FillMode::FORWARDS); + ASSERT_TRUE(component->GetCalcMode() == CalcMode::SPLINE); + ASSERT_TRUE(component->GetKeyTimes().size() == 4); + EXPECT_NEAR(component->GetKeyTimes().at(0), 0.0, FLT_EPSILON); + EXPECT_NEAR(component->GetKeyTimes().at(1), 0.1, FLT_EPSILON); + EXPECT_NEAR(component->GetKeyTimes().at(2), 0.8, FLT_EPSILON); + EXPECT_NEAR(component->GetKeyTimes().at(3), 1.0, FLT_EPSILON); + ASSERT_TRUE(component->GetKeyPoints().size() == 4); + ASSERT_TRUE(component->GetKeyPoints().at(0) == "0"); + ASSERT_TRUE(component->GetKeyPoints().at(1) == "0.2"); + ASSERT_TRUE(component->GetKeyPoints().at(2) == "0.5"); + ASSERT_TRUE(component->GetKeyPoints().at(3) == "1"); + ASSERT_TRUE(component->GetKeySplines().size() == 3); + ASSERT_TRUE(component->GetKeySplines().at(0) == "0.5 0 0.5 1"); + ASSERT_TRUE(component->GetKeySplines().at(1) == "0.5 0 0.5 1"); + ASSERT_TRUE(component->GetKeySplines().at(2) == "0.5 0 0.5 1"); + ASSERT_TRUE(component->GetPath() == "M20,50 C20,-50 180,150 180,50 C180,-50 20,150 20,50 z"); + ASSERT_TRUE(component->GetRotate() == "auto"); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/test/unittest/jsfrontend/domsvgtext/BUILD.gn b/frameworks/bridge/test/unittest/jsfrontend/domsvgtext/BUILD.gn new file mode 100644 index 00000000..ade3bd32 --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/domsvgtext/BUILD.gn @@ -0,0 +1,57 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/jsframework/text" + +ohos_unittest("DomSvgTextTest") { + module_out_path = module_output_path + + sources = [ + "../dom_node_factory.cpp", + "dom_svg_text_test.cpp", + ] + + configs = [ + ":config_domnode_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + external_deps = [ "hiviewdfx_hilog_native:libhilog" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_domnode_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":DomSvgTextTest" ] +} diff --git a/frameworks/bridge/test/unittest/jsfrontend/domsvgtext/dom_svg_text_test.cpp b/frameworks/bridge/test/unittest/jsfrontend/domsvgtext/dom_svg_text_test.cpp new file mode 100644 index 00000000..83c5668b --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/domsvgtext/dom_svg_text_test.cpp @@ -0,0 +1,361 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "frameworks/bridge/common/dom/dom_svg_text.h" +#include "frameworks/bridge/common/dom/dom_svg_text_path.h" +#include "frameworks/bridge/common/dom/dom_svg_tspan.h" +#include "frameworks/bridge/test/unittest/jsfrontend/dom_node_factory.h" +#include "frameworks/core/components/svg/svg_tspan_component.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace::Framework { +namespace { + +const std::string TEXT_DATA = "ohos1234@?!"; +const std::string SVG_LENGTH_ADJUST_VALUE = "spacingAndGlyphs"; +const std::string SVG_PATH_VALUE = "M40,1160 Q360,1160 360,980 Q360,840 200,840 Q40," + "840 40,960 Q40,1080 180,1080 Q280,1080 300,1000"; +const Dimension SVG_TEXT_FONT_SIZE = Dimension(50.0); +const Dimension SVG_OFFSET_X = Dimension(10.0); +const Dimension SVG_OFFSET_Y = Dimension(20.0); +const Dimension SVG_OFFSET_DX = Dimension(30.0); +const Dimension SVG_OFFSET_DY = Dimension(40.0); +const Dimension SVG_START_OFFSET_VALUE = Dimension(50.0); +const Dimension SVG_TEXT_LENGTH_VALUE = Dimension(100.0); +const Dimension SVG_STROKE_WIDTH_VALUE = Dimension(2.0); +const Color SVG_FILL_COLOR = Color::FromString("#0x0000ff"); +const Color SVG_STROKE_COLOR = Color::FromString("#0x0000ee"); +constexpr double SVG_ROTATE_VALUE = 10.0; +constexpr double SVG_FILL_OPACITY_VALUE = 0.5; +constexpr double SVG_STROKE_OPACITY_VALUE = 0.6; + +const std::string JSON_SVG_TEXT_TAG = "" + "{ " + " \"tag\": \"svg-text\", "; +const std::string JSON_SVG_TSPAN_TAG = "" + "{ " + " \"tag\": \"tspan\", "; +const std::string JSON_SVG_TEXT_STR = " \"attr\": [{ " + " \"value\": \"ohos1234@?!\" " + " }," + " { " + " \"fontSize\":\"50.0\" " + " }, " + " {" + " \"x\":\"10\" " + " }," + " {" + " \"y\":\"20\" " + " }," + " {" + " \"dx\":\"30\" " + " }," + " {" + " \"dy\":\"40\" " + " }," + " { " + " \"rotate\":\"10.0\" " + " }, " + " { " + " \"TextLength\":\"100.0\" " + " }," + " { " + " \"LengthAdjust\":\"spacingAndGlyphs\" " + " }," + " {" + " \"fill\":\"#0x0000ff\" " + " }," + " {" + " \"fillOpacity\":\"0.5\" " + " }," + " {" + " \"stroke\":\"0x0000ee\" " + " }," + " {" + " \"strokeWidth\":\"2\" " + " }," + " { " + " \"strokeOpacity\":\"0.6\" " + " }]" + "}"; + +const std::string JSON_SVG_TEXT_PATH_STR = "" + "{ " + " \"tag\": \"textpath\", " + " \"attr\": [{ " + " \"value\": \"ohos1234@?!\" " + " }," + " { " + " \"fontSize\":\"50.0\" " + " }, " + " { " + " \"startOffset\":\"50.0\" " + " }, " + " { " + " \"path\":\"M40,1160 Q360,1160 360,980 Q360," + "840 200,840 Q40,840 40,960 Q40,1080 180,1080 Q280,1080 300,1000\"" + " }, " + " { " + " \"TextLength\":\"100.0\" " + " }," + " { " + " \"LengthAdjust\":\"spacingAndGlyphs\" " + " }," + " {" + " \"fill\":\"#0x0000ff\" " + " }," + " {" + " \"fillOpacity\":\"0.5\" " + " }," + " {" + " \"stroke\":\"0x0000ee\" " + " }," + " {" + " \"strokeWidth\":\"2\" " + " }," + " { " + " \"strokeOpacity\":\"0.6\" " + " }]" + "}"; +} // namespace + +class DomSvgTextTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); +}; + +void DomSvgTextTest::SetUpTestCase() {} +void DomSvgTextTest::TearDownTestCase() {} +void DomSvgTextTest::SetUp() {} +void DomSvgTextTest::TearDown() {} + +/** + * @tc.name: DomSvgTextTest001 + * @tc.desc: Verify that DomSvgText can be created. + * @tc.type: FUNC + * @tc.require: AR000FL0TO + * @tc.author: huye + */ +HWTEST_F(DomSvgTextTest, DomSvgTextTest001, TestSize.Level1) +{ + const std::string jsonTextStr = "" + "{ " + " \"tag\": \"svg-text\" " + "}"; + + /** + * @tc.steps: step1. call JsonUtil interface and create DomSvgText. + */ + auto domNode = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonTextStr); + RefPtr svgText = AceType::DynamicCast(domNode); + + /** + * @tc.steps: step2. Verify whether the DomSvgText. + * @tc.expected: step2. DomSvgText is not null. + */ + ASSERT_TRUE(svgText != nullptr); +} + +/** + * @tc.name: DomSvgTextTest002 + * @tc.desc: Verify that DomSvgText can be set styles. + * @tc.type: FUNC + * @tc.require: AR000FL0TO + * @tc.author: huye + */ +HWTEST_F(DomSvgTextTest, DomSvgTextTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of DomSvgText with all attributes. + */ + const std::string& jsonTextStr = JSON_SVG_TEXT_TAG + JSON_SVG_TEXT_STR; + + /** + * @tc.steps: step2. call JsonUtil interface, create DomSvgText and set its attr. + */ + auto domSvgText = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonTextStr); + ASSERT_TRUE(domSvgText != nullptr); + + RefPtr svgText = + AceType::DynamicCast(domSvgText->GetSpecializedComponent()); + ASSERT_TRUE(svgText != nullptr); + + /** + * @tc.steps: step3. Check all the attributes matched. + * @tc.expected: step3. All the attributes are matched. + */ + EXPECT_EQ(svgText->GetTextData(), TEXT_DATA); + EXPECT_EQ(svgText->GetX().Value(), SVG_OFFSET_X.Value()); + EXPECT_EQ(svgText->GetY().Value(), SVG_OFFSET_Y.Value()); + EXPECT_EQ(svgText->GetDx().Value(), SVG_OFFSET_DX.Value()); + EXPECT_EQ(svgText->GetDy().Value(), SVG_OFFSET_DY.Value()); + EXPECT_EQ(svgText->GetRotate(), SVG_ROTATE_VALUE); + EXPECT_EQ(svgText->GetLengthAdjust(), SVG_LENGTH_ADJUST_VALUE); + EXPECT_EQ(svgText->GetTextLength().Value(), SVG_TEXT_LENGTH_VALUE.Value()); + EXPECT_EQ(svgText->GetTextStyle().GetFontSize().Value(), SVG_TEXT_FONT_SIZE.Value()); + EXPECT_EQ(svgText->GetFillState().GetColor().GetValue(), SVG_FILL_COLOR.GetValue()); + EXPECT_EQ(svgText->GetFillState().GetOpacity(), SVG_FILL_OPACITY_VALUE); + EXPECT_EQ(svgText->GetStrokeState().GetColor().GetValue(), SVG_STROKE_COLOR.GetValue()); + EXPECT_EQ(svgText->GetStrokeState().GetOpacity(), SVG_STROKE_OPACITY_VALUE); + EXPECT_EQ(svgText->GetStrokeState().GetLineWidth().Value(), SVG_STROKE_WIDTH_VALUE.Value()); +} + +/** + * @tc.name: DomSvgTspanTest001 + * @tc.desc: Verify that DomSvgTspan can be created. + * @tc.type: FUNC + * @tc.require: AR000FL0TP + * @tc.author: huye + */ +HWTEST_F(DomSvgTextTest, DomSvgTspanTest001, TestSize.Level1) +{ + const std::string jsonTextStr = "" + "{ " + " \"tag\": \"tspan\" " + "}"; + + /** + * @tc.steps: step1. call JsonUtil interface and create DomSvgTspan. + */ + auto domNode = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonTextStr); + RefPtr svgTspan = AceType::DynamicCast(domNode); + + /** + * @tc.steps: step2. Verify whether the DomSvgTspan. + * @tc.expected: step2. DomSvgTspan is not null. + */ + ASSERT_TRUE(svgTspan != nullptr); +} + +/** + * @tc.name: DomSvgTspanTest002 + * @tc.desc: Verify that DomSvgTspan can be set styles. + * @tc.type: FUNC + * @tc.require: AR000FL0TP + * @tc.author: huye + */ +HWTEST_F(DomSvgTextTest, DomSvgTspanTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of DomSvgTspan with all attributes. + */ + const std::string& jsonTextStr = JSON_SVG_TSPAN_TAG + JSON_SVG_TEXT_STR; + + /** + * @tc.steps: step2. call JsonUtil interface, create DomSvgTspan and set its attr. + */ + auto domSvgTspan = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonTextStr); + ASSERT_TRUE(domSvgTspan != nullptr); + + RefPtr svgTspan = + AceType::DynamicCast(domSvgTspan->GetSpecializedComponent()); + ASSERT_TRUE(svgTspan != nullptr); + + /** + * @tc.steps: step3. Check all the attributes matched. + * @tc.expected: step3. All the attributes are matched. + */ + EXPECT_EQ(svgTspan->GetTextData(), TEXT_DATA); + EXPECT_EQ(svgTspan->GetX().Value(), SVG_OFFSET_X.Value()); + EXPECT_EQ(svgTspan->GetY().Value(), SVG_OFFSET_Y.Value()); + EXPECT_EQ(svgTspan->GetDx().Value(), SVG_OFFSET_DX.Value()); + EXPECT_EQ(svgTspan->GetDy().Value(), SVG_OFFSET_DY.Value()); + EXPECT_EQ(svgTspan->GetRotate(), SVG_ROTATE_VALUE); + EXPECT_EQ(svgTspan->GetLengthAdjust(), SVG_LENGTH_ADJUST_VALUE); + EXPECT_EQ(svgTspan->GetTextLength().Value(), SVG_TEXT_LENGTH_VALUE.Value()); + EXPECT_EQ(svgTspan->GetTextStyle().GetFontSize().Value(), SVG_TEXT_FONT_SIZE.Value()); + EXPECT_EQ(svgTspan->GetFillState().GetColor().GetValue(), SVG_FILL_COLOR.GetValue()); + EXPECT_EQ(svgTspan->GetFillState().GetOpacity(), SVG_FILL_OPACITY_VALUE); + EXPECT_EQ(svgTspan->GetStrokeState().GetColor().GetValue(), SVG_STROKE_COLOR.GetValue()); + EXPECT_EQ(svgTspan->GetStrokeState().GetOpacity(), SVG_STROKE_OPACITY_VALUE); + EXPECT_EQ(svgTspan->GetStrokeState().GetLineWidth().Value(), SVG_STROKE_WIDTH_VALUE.Value()); +} + +/** + * @tc.name: DomSvgTextPathTest001 + * @tc.desc: Verify that DomSvgTextPath can be created. + * @tc.type: FUNC + * @tc.require: AR000FL0TQ + * @tc.author: huye + */ +HWTEST_F(DomSvgTextTest, DomSvgTextPathTest001, TestSize.Level1) +{ + const std::string jsonTextStr = "" + "{ " + " \"tag\": \"textpath\" " + "}"; + + /** + * @tc.steps: step1. call JsonUtil interface and create DomSvgTextPath. + */ + auto domNode = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonTextStr); + RefPtr svgTextPath = AceType::DynamicCast(domNode); + + /** + * @tc.steps: step2. Verify whether the DOMSvgTextPath. + * @tc.expected: step2. DOMSvgTextPath is not null. + */ + ASSERT_TRUE(svgTextPath != nullptr); +} + +/** + * @tc.name: DomSvgTextPathTest002 + * @tc.desc: Verify that DomSvgTextPath can be set styles. + * @tc.type: FUNC + * @tc.require: AR000FL0TQ + * @tc.author: huye + */ +HWTEST_F(DomSvgTextTest, DomSvgTextPathTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of DomSvgTextPath with all attributes. + */ + const std::string& jsonTextStr = JSON_SVG_TEXT_PATH_STR; + + /** + * @tc.steps: step2. call JsonUtil interface, create DomSvgTextPath and set its attr. + */ + auto domNode = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonTextStr); + ASSERT_TRUE(domNode != nullptr); + + RefPtr svgTextPath = + AceType::DynamicCast(domNode->GetSpecializedComponent()); + ASSERT_TRUE(svgTextPath != nullptr); + + /** + * @tc.steps: step3. Check all the attributes matched. + * @tc.expected: step3. All the attributes are matched. + */ + EXPECT_EQ(svgTextPath->GetTextData(), TEXT_DATA); + EXPECT_EQ(svgTextPath->GetPath(), SVG_PATH_VALUE); + EXPECT_EQ(svgTextPath->GetStartOffset().Value(), SVG_START_OFFSET_VALUE.Value()); + EXPECT_EQ(svgTextPath->GetLengthAdjust(), SVG_LENGTH_ADJUST_VALUE); + EXPECT_EQ(svgTextPath->GetTextLength().Value(), SVG_TEXT_LENGTH_VALUE.Value()); + EXPECT_EQ(svgTextPath->GetTextStyle().GetFontSize().Value(), SVG_TEXT_FONT_SIZE.Value()); + EXPECT_EQ(svgTextPath->GetFillState().GetColor().GetValue(), SVG_FILL_COLOR.GetValue()); + EXPECT_EQ(svgTextPath->GetFillState().GetOpacity(), SVG_FILL_OPACITY_VALUE); + EXPECT_EQ(svgTextPath->GetStrokeState().GetColor().GetValue(), SVG_STROKE_COLOR.GetValue()); + EXPECT_EQ(svgTextPath->GetStrokeState().GetOpacity(), SVG_STROKE_OPACITY_VALUE); + EXPECT_EQ(svgTextPath->GetStrokeState().GetLineWidth().Value(), SVG_STROKE_WIDTH_VALUE.Value()); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/test/unittest/jsfrontend/domtab/BUILD.gn b/frameworks/bridge/test/unittest/jsfrontend/domtab/BUILD.gn new file mode 100644 index 00000000..44cd5b66 --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/domtab/BUILD.gn @@ -0,0 +1,57 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/jsframework/tab" + +ohos_unittest("DomTabTest") { + module_out_path = module_output_path + + sources = [ + "../dom_node_factory.cpp", + "dom_tab_test.cpp", + ] + + configs = [ + ":config_domnode_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + external_deps = [ "hiviewdfx_hilog_native:libhilog" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_domnode_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":DomTabTest" ] +} diff --git a/frameworks/bridge/test/unittest/jsfrontend/domtab/dom_tab_test.cpp b/frameworks/bridge/test/unittest/jsfrontend/domtab/dom_tab_test.cpp new file mode 100644 index 00000000..145b5ef4 --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/domtab/dom_tab_test.cpp @@ -0,0 +1,369 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "core/components/common/layout/constants.h" +#include "frameworks/bridge/common/dom/dom_document.h" +#include "frameworks/bridge/common/dom/dom_tab_bar.h" +#include "frameworks/bridge/common/dom/dom_tab_content.h" +#include "frameworks/bridge/common/dom/dom_tabs.h" +#include "frameworks/bridge/test/unittest/jsfrontend/dom_node_factory.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace::Framework { +namespace { + +const std::string TABS_TEST_001 = "" + "{ " + " \"tag\": \"tabs\" " + "}"; + +const std::string TABS_TEST_002 = "" + "{ " + " \"tag\": \"tabs\", " + " \"attr\": [{ " + " \"index\" : \"2\" " + " }] " + "}"; + +const std::string TABS_TEST_003 = "" + "{ " + " \"tag\": \"tabs\", " + " \"attr\": [{ " + " \"vertical\" : \"true\" " + " }] " + "}"; + +const std::string TABS_TEST_004 = "" + "{ " + " \"tag\": \"tabs\", " + " \"attr\": [{ " + " \"vertical\" : \"false\" " + " }] " + "}"; + +const std::string TABS_TEST_005 = "" + "{ " + " \"tag\": \"tabs\", " + " \"attr\": [{ " + " \"index\" : \"2\" " + " }] " + "}"; + +const std::string TABBAR_TEST_001 = "" + "{ " + " \"tag\": \"tab-bar\" " + "}"; + +const std::string TABBAR_TEST_002 = "" + "{ " + " \"tag\": \"tab-bar\" , " + " \"attr\": [{ " + " \"mode\" : \"fixed\" " + " }] " + "}"; + +const std::string TABCONTENT_TEST_001 = "" + "{ " + " \"tag\": \"tab-content\" " + "}"; + +const std::string TABCONTENT_TEST_002 = "" + "{ " + " \"tag\": \"tab-content\" , " + " \"attr\": [{ " + " \"scrollable\" : \"false\" " + " }] " + "}"; + +const std::string TABCONTENT_TEST_003 = " " + "{ " + " \"tag\": \"tab-content\" , " + " \"commonStyle\": [{ " + " \"height\": \"1000px\" " + " }], " + " \"attr\": [{ " + " \"scrollable\" : \"false\" " + " }], " + " \"child\": " + "{ " + " \"tag\":\"div\", " + " \"attr\": {}, " + " \"commonStyle\": [{ " + " \"height\": \"2000px\" " + " }] " + "} " + "}"; + +} // namespace + +class DomTabTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); +}; + +void DomTabTest::SetUpTestCase() {} +void DomTabTest::TearDownTestCase() {} +void DomTabTest::SetUp() {} +void DomTabTest::TearDown() {} + +/** + * @tc.name: DomTabsCreatorTest001 + * @tc.desc: Test tabs node are created as expected. + * @tc.type: FUNC + * @tc.require: AR000DD66U + * @tc.author: litianyu + */ +HWTEST_F(DomTabTest, DomTabsCreatorTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create tabs node with it. + * @tc.expected: step1. tabs node are created successfully. + */ + auto tabs = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(TABS_TEST_001); + ASSERT_TRUE(tabs != nullptr); + + /** + * @tc.steps: step2. Check styles and attributes of created tabs node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + EXPECT_EQ(AceType::DynamicCast(tabs)->GetTabIndex(), 0U); + EXPECT_EQ(AceType::DynamicCast(tabs)->GetTabControllerId(), 1U); +} + +/** + * @tc.name: DomTabsCreatorTest002 + * @tc.desc: Test tabs node are created as expected. + * @tc.type: FUNC + * @tc.require: AR000DD66U + * @tc.author: litianyu + */ +HWTEST_F(DomTabTest, DomTabsCreatorTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create tabs node with it. + * @tc.expected: step1. tabs node are created successfully. + */ + auto tabs = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(TABS_TEST_002); + ASSERT_TRUE(tabs != nullptr); + + /** + * @tc.steps: step2. Check styles and attributes of created tabs node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + EXPECT_EQ(AceType::DynamicCast(tabs)->GetTabIndex(), 2U); + EXPECT_EQ(AceType::DynamicCast(tabs)->GetTabControllerId(), 2U); +} + +/** + * @tc.name: DomTabsCreatorTest003 + * @tc.desc: Test tabs node are created as expected. + * @tc.type: FUNC + * @tc.require: AR000DQ1V3 AR000DQ1V2 + * @tc.author: liujinwei + */ +HWTEST_F(DomTabTest, DomTabsCreatorTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create tabs node with it. + * @tc.expected: step1. tabs node are created successfully. + */ + auto tabs = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(TABS_TEST_003); + ASSERT_TRUE(tabs != nullptr); + + /** + * @tc.steps: step2. Check styles and attributes of created tabs node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + EXPECT_EQ(AceType::DynamicCast(tabs)->IsVertical(), true); +} + +/** + * @tc.name: DomTabsCreatorTest004 + * @tc.desc: Test tabs node are created as expected. + * @tc.type: FUNC + * @tc.require: AR000DQ1V3 AR000DQ1V2 + * @tc.author: liujinwei + */ +HWTEST_F(DomTabTest, DomTabsCreatorTest004, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create tabs node with it. + * @tc.expected: step1. tabs node are created successfully. + */ + auto tabs = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(TABS_TEST_004); + ASSERT_TRUE(tabs != nullptr); + + /** + * @tc.steps: step2. Check styles and attributes of created tabs node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + EXPECT_EQ(AceType::DynamicCast(tabs)->IsVertical(), false); +} + +/** + * @tc.name: DomTabsCreatorTest005 + * @tc.desc: Test tabs node are created as expected. + * @tc.type: FUNC + * @tc.require: AR000DQ1V3 AR000DQ1V2 + * @tc.author: liujinwei + */ +HWTEST_F(DomTabTest, DomTabsCreatorTest005, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create tabs node with it. + * @tc.expected: step1. tabs node are created successfully. + */ + auto tabs = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(TABS_TEST_005); + ASSERT_TRUE(tabs != nullptr); + + /** + * @tc.steps: step2. Check styles and attributes of created tabs node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + EXPECT_EQ(AceType::DynamicCast(tabs)->IsVertical(), false); +} + +/** + * @tc.name: DomTabBarCreatorTest001 + * @tc.desc: Test tab-bar node are created as expected. + * @tc.type: FUNC + * @tc.require: AR000DD670 + * @tc.author: litianyu + */ +HWTEST_F(DomTabTest, DomTabBarCreatorTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create tab-bar node with it. + * @tc.expected: step1. tab-bar node and its component are created successfully. + */ + auto tabBarNode = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(TABBAR_TEST_001); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(tabBarNode); + RefPtr tabBarComponent = AceType::DynamicCast(boxChild->GetChild()); + + ASSERT_TRUE(tabBarComponent != nullptr); + + /** + * @tc.steps: step2. Check styles and attributes of created tab-bar node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + EXPECT_EQ(tabBarComponent->GetMode(), TabBarMode::SCROLLABEL); +} + +/** + * @tc.name: DomTabBarCreatorTest002 + * @tc.desc: Test tab-bar node are created as expected. + * @tc.type: FUNC + * @tc.require: AR000DD670 + * @tc.author: litianyu + */ +HWTEST_F(DomTabTest, DomTabBarCreatorTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create tab-bar node with it. + * @tc.expected: step1. tab-bar node and its component are created successfully. + */ + auto tabBarNode = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(TABBAR_TEST_002); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(tabBarNode); + RefPtr tabBarComponent = AceType::DynamicCast(boxChild->GetChild()); + + ASSERT_TRUE(tabBarComponent != nullptr); + + /** + * @tc.steps: step2. Check styles and attributes of created tab-bar node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + EXPECT_EQ(tabBarComponent->GetMode(), TabBarMode::FIXED); +} + +/** + * @tc.name: DomTabContentCreatorTest001 + * @tc.desc: Test tab-content node are created as expected. + * @tc.type: FUNC + * @tc.require: AR000DD672 + * @tc.author: litianyu + */ +HWTEST_F(DomTabTest, DomTabContentCreatorTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create tab-content node with it. + * @tc.expected: step1. tab-content node and its component are created successfully. + */ + auto tabContentNode = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(TABCONTENT_TEST_001); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(tabContentNode); + RefPtr tabContentComponent = AceType::DynamicCast(boxChild->GetChild()); + + ASSERT_TRUE(tabContentComponent != nullptr); + + /** + * @tc.steps: step2. Check styles and attributes of created tab-content node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + EXPECT_EQ(tabContentComponent->IsScrollable(), true); +} + +/** + * @tc.name: DomTabContentCreatorTest002 + * @tc.desc: Test tab-content node are created as expected. + * @tc.type: FUNC + * @tc.require: AR000DD672 + * @tc.author: litianyu + */ +HWTEST_F(DomTabTest, DomTabContentCreatorTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create tab-content node with it. + * @tc.expected: step1. tab-content node and its component are created successfully. + */ + auto tabContentNode = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(TABCONTENT_TEST_002); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(tabContentNode); + RefPtr tabContentComponent = AceType::DynamicCast(boxChild->GetChild()); + + ASSERT_TRUE(tabContentComponent != nullptr); + + /** + * @tc.steps: step2. Check styles and attributes of created tab-content node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + EXPECT_EQ(tabContentComponent->IsScrollable(), false); +} + +/** + * @tc.name: DomTabContentCreatorTest003 + * @tc.desc: Test tab-content node are created as expected. + * @tc.type: FUNC + * @tc.require: AR000DSCD1 + * @tc.author: liujinwei + */ +HWTEST_F(DomTabTest, DomTabContentCreatorTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create tab-content node with it. + * @tc.expected: step1. tab-content node and its component are created successfully. + */ + auto tabContentNode = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(TABCONTENT_TEST_003); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(tabContentNode); + RefPtr tabContentComponent = AceType::DynamicCast(boxChild->GetChild()); + + ASSERT_TRUE(tabContentComponent != nullptr); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/test/unittest/jsfrontend/domtext/BUILD.gn b/frameworks/bridge/test/unittest/jsfrontend/domtext/BUILD.gn new file mode 100644 index 00000000..e7940c4a --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/domtext/BUILD.gn @@ -0,0 +1,57 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/jsframework/text" + +ohos_unittest("DomTextTest") { + module_out_path = module_output_path + + sources = [ + "../dom_node_factory.cpp", + "dom_text_test.cpp", + ] + + configs = [ + ":config_domnode_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + external_deps = [ "hiviewdfx_hilog_native:libhilog" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_domnode_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":DomTextTest" ] +} diff --git a/frameworks/bridge/test/unittest/jsfrontend/domtext/dom_text_test.cpp b/frameworks/bridge/test/unittest/jsfrontend/domtext/dom_text_test.cpp new file mode 100644 index 00000000..956bcc22 --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/domtext/dom_text_test.cpp @@ -0,0 +1,289 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/json/json_util.h" +#include "base/utils/utils.h" +#include "core/components/common/layout/constants.h" +#include "core/components/text/text_theme.h" +#include "core/components/theme/theme_manager.h" +#include "frameworks/bridge/common/dom/dom_div.h" +#include "frameworks/bridge/common/dom/dom_document.h" +#include "frameworks/bridge/common/dom/dom_text.h" +#include "frameworks/bridge/test/unittest/jsfrontend/dom_node_factory.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace::Framework { +namespace { + +const std::string TEXT_DATA = "ohos1234@?!"; +constexpr int32_t TEST_OVER_FLOW = 1; +constexpr double TEST_FONT_SIZE = 50.0; +constexpr int32_t TEST_FONT_WEIGHT = 1; +const std::string TEST_COLOR_VALUE = "#0x0000ff"; +constexpr double TEST_LINE_HEIGHT = 11.0; +constexpr int32_t TEST_FONT_STYLE = 1; +constexpr int32_t TEST_TEXT_DECORATION = 2; +constexpr uint32_t TEST_MAX_LINE = 10; +constexpr double TEST_LETTER_SPACING = 11.0; +constexpr int32_t TEST_TEXT_ALIGN = 1; +const std::string TEST_FONT_FAMILY = "serif"; +constexpr int32_t DEFAULT_OVER_FLOW = 0; +constexpr int32_t DEFAULT_TEXT_ALIGN = 4; +constexpr int32_t DEFAULT_TEXT_ALIGN_INVALIDVALUE = 2; +const Dimension TEST_MIN_FONT_SIZE = Dimension(10.0); +const Dimension TEST_MAX_FONT_SIZE = Dimension(20.0); +const Dimension TEST_FONT_SIZE_STEP = Dimension(2.0); +constexpr uint32_t TEST_PREFER_FONT_SIZES_SIZE = 3; +const RefPtr THEME_MANAGER = AceType::MakeRefPtr(); +const std::string JSON_TEXT_STR = "" + "{ " + " \"tag\": \"text\", " + " \"attr\" : [{ " + " \"value\" : \"ohos1234@?!\" " + " }], " + " \"style\": [{ " + " \"textOverflow\":\"ellipsis\" " + " }," + " { " + " \"fontSize\":\"50.0\" " + " }, " + " {" + " \"fontWeight\":\"200\" " + " }," + " {" + " \"color\":\"#0x0000ff\" " + " }," + " {" + " \"lineHeight\":\"11.0\" " + " }," + " {" + " \"fontStyle\":\"italic\" " + " }," + " {" + " \"textDecoration\":\"overline\"" + " }," + " { " + " \"maxLines\":\"10\" " + " }," + " {" + " \"letterSpacing\":\"11.0\" " + " }," + " {" + " \"minFontSize\":\"10.0px\" " + " }," + " {" + " \"maxFontSize\":\"20.0px\" " + " }," + " {" + " \"fontSizeStep\":\"2px\" " + " }," + " {" + " \"preferFontSizes\":\"20px, 18px, 16px\" " + " }," + " { " + " \"textAlign\":\"right\" " + " }," + " { " + " \"fontFamily\":\"serif\" " + " }]" + "}"; + +} // namespace + +class DomTextTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); +}; + +void DomTextTest::SetUpTestCase() {} +void DomTextTest::TearDownTestCase() {} +void DomTextTest::SetUp() {} +void DomTextTest::TearDown() {} + +/** + * @tc.name: DomTextTest001 + * @tc.desc: Verify that DomText can be created. + * @tc.type: FUNC + * @tc.require: AR000DD66E + * @tc.author: liwenzhen + */ +HWTEST_F(DomTextTest, DomTextTest001, TestSize.Level1) +{ + const std::string jsonTextStr = "" + "{ " + " \"tag\": \"text\" " + "}"; + + /** + * @tc.steps: step1. call JsonUtil interface and create DomText. + */ + auto domNodeText = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonTextStr); + + /** + * @tc.steps: step2. Verify whether the DomText. + * @tc.expected: step2. DomText is not null. + */ + ASSERT_TRUE(domNodeText != nullptr); +} + +/** + * @tc.name: DomTextTest002 + * @tc.desc: Verify that DomText can be set styles. + * @tc.type: FUNC + * @tc.require: AR000DD66E + * @tc.author: liwenzhen + */ +HWTEST_F(DomTextTest, DomTextTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of DomText with all attributes. + */ + const std::string& jsonTextStr = JSON_TEXT_STR; + + /** + * @tc.steps: step2. call JsonUtil interface, create DomText and set its style. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonTextStr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + RefPtr textChild = AceType::DynamicCast(boxChild->GetChild()); + const auto textStyle = textChild->GetTextStyle(); + + /** + * @tc.steps: step3. Check all the attributes matched. + * @tc.expected: step3. All the attributes are matched. + */ + EXPECT_EQ(textChild->GetData(), TEXT_DATA); + EXPECT_TRUE(static_cast(textChild->GetTextStyle().GetTextOverflow()) == TEST_OVER_FLOW); + EXPECT_TRUE(NearEqual(textStyle.GetFontSize().Value(), TEST_FONT_SIZE)); + EXPECT_EQ(static_cast(textStyle.GetFontWeight()), TEST_FONT_WEIGHT); + EXPECT_EQ(textStyle.GetTextColor(), Color::FromString(TEST_COLOR_VALUE)); + EXPECT_TRUE(NearEqual(textStyle.GetLineHeight().Value(), TEST_LINE_HEIGHT)); + EXPECT_TRUE(NearEqual(static_cast(textStyle.GetFontStyle()), TEST_FONT_STYLE)); + EXPECT_TRUE(NearEqual(static_cast(textStyle.GetTextDecoration()), TEST_TEXT_DECORATION)); + EXPECT_TRUE(NearEqual(textChild->GetTextStyle().GetMaxLines(), TEST_MAX_LINE)); + EXPECT_TRUE(NearEqual(textStyle.GetLetterSpacing(), TEST_LETTER_SPACING)); + EXPECT_EQ(static_cast(textChild->GetTextStyle().GetTextAlign()), TEST_TEXT_ALIGN); + EXPECT_EQ(textStyle.GetFontFamilies()[0], TEST_FONT_FAMILY); + EXPECT_EQ(textStyle.GetMaxLines(), TEST_MAX_LINE); + EXPECT_EQ(textStyle.GetAdaptMinFontSize(), TEST_MIN_FONT_SIZE); + EXPECT_EQ(textStyle.GetAdaptMaxFontSize(), TEST_MAX_FONT_SIZE); + EXPECT_EQ(textStyle.GetAdaptFontSizeStep(), TEST_FONT_SIZE_STEP); + EXPECT_EQ(textStyle.GetPreferFontSizes().size(), TEST_PREFER_FONT_SIZES_SIZE); +} + +/** + * @tc.name: DomTextTest003 + * @tc.desc: Verify that DomText can be set styles to the default values when styles' attributes are invalid. + * @tc.type: FUNC + * @tc.require: AR000DD66E + * @tc.author: liwenzhen + */ +HWTEST_F(DomTextTest, DomTextTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of DomText with invalid attributes. + */ + const std::string jsonTextStr = "" + "{ " + " \"tag\": \"text\", " + " \"style\": [{ " + " \"textOverflow\":\"invalidValue\" " + " }," + " {" + " \"fontWeight\":\"invalidValue\" " + " }," + " {" + " \"fontStyle\":\"invalidValue\" " + " }," + " {" + " \"textDecoration\":\"invalidValue\" " + " }," + " { " + " \"textAlign\":\"invalidValue\" " + " }]" + "}"; + + /** + * @tc.steps: step2. call JsonUtil interface, create DomText and set attributes' value. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonTextStr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + RefPtr textChild = AceType::DynamicCast(boxChild->GetChild()); + const auto textStyle = textChild->GetTextStyle(); + + /** + * @tc.steps: step3. Check all the attributes matched with default values. + * @tc.expected: step3. All the attributes are matched. + */ + RefPtr theme = THEME_MANAGER->GetTheme(); + ASSERT_TRUE(theme); + EXPECT_EQ(static_cast(textChild->GetTextStyle().GetTextOverflow()), DEFAULT_OVER_FLOW); + EXPECT_EQ(textStyle.GetFontWeight(), theme->GetTextStyle().GetFontWeight()); + EXPECT_EQ(textStyle.GetFontStyle(), theme->GetTextStyle().GetFontStyle()); + EXPECT_EQ(static_cast(textChild->GetTextStyle().GetTextAlign()), DEFAULT_TEXT_ALIGN_INVALIDVALUE); + EXPECT_EQ(textStyle.GetTextDecoration(), theme->GetTextStyle().GetTextDecoration()); +} + +/** + * @tc.name: DomTextTest004 + * @tc.desc: Verify that DomText's style can be initialized to default values when no styles are set manually. + * @tc.type: FUNC + * @tc.require: AR000DD66E + * @tc.author: liwenzhen + */ +HWTEST_F(DomTextTest, DomTextTest004, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of DomText with all attributes. + */ + const std::string jsonTextStr = "" + "{ " + " \"tag\": \"text\" " + "}"; + + /** + * @tc.steps: step2. call JsonUtil interface, create DomText and set its style. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(jsonTextStr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + RefPtr textChild = AceType::DynamicCast(boxChild->GetChild()); + const auto textStyle = textChild->GetTextStyle(); + + /** + * @tc.steps: step3. Check all the attributes matched with the default values. + * @tc.expected: step3. All the attributes are matched. + */ + RefPtr theme = THEME_MANAGER->GetTheme(); + ASSERT_TRUE(theme); + EXPECT_TRUE(static_cast(textChild->GetTextStyle().GetTextOverflow()) == DEFAULT_OVER_FLOW); + EXPECT_EQ(textStyle.GetFontSize().Unit(), theme->GetTextStyle().GetFontSize().Unit()); + EXPECT_TRUE(NearEqual(textStyle.GetFontSize().Value(), theme->GetTextStyle().GetFontSize().Value())); + EXPECT_EQ(textStyle.GetFontWeight(), theme->GetTextStyle().GetFontWeight()); + EXPECT_EQ(textStyle.GetTextColor().GetValue(), theme->GetTextStyle().GetTextColor().GetValue()); + EXPECT_EQ(textStyle.GetLineHeight(), theme->GetTextStyle().GetLineHeight()); + EXPECT_EQ(textStyle.GetFontStyle(), theme->GetTextStyle().GetFontStyle()); + EXPECT_EQ(textStyle.GetTextDecoration(), theme->GetTextStyle().GetTextDecoration()); + EXPECT_TRUE(NearEqual(textStyle.GetLetterSpacing(), theme->GetTextStyle().GetLetterSpacing())); + EXPECT_EQ(static_cast(textChild->GetTextStyle().GetTextAlign()), DEFAULT_TEXT_ALIGN); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/test/unittest/jsfrontend/domtextarea/BUILD.gn b/frameworks/bridge/test/unittest/jsfrontend/domtextarea/BUILD.gn new file mode 100644 index 00000000..bd3730eb --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/domtextarea/BUILD.gn @@ -0,0 +1,57 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/jsframework/textarea" + +ohos_unittest("DomTextareaTest") { + module_out_path = module_output_path + + sources = [ + "../dom_node_factory.cpp", + "dom_textarea_test.cpp", + ] + + configs = [ + ":config_domnode_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + external_deps = [ "hiviewdfx_hilog_native:libhilog" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_domnode_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":DomTextareaTest" ] +} diff --git a/frameworks/bridge/test/unittest/jsfrontend/domtextarea/dom_textarea_test.cpp b/frameworks/bridge/test/unittest/jsfrontend/domtextarea/dom_textarea_test.cpp new file mode 100644 index 00000000..5df851a1 --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/domtextarea/dom_textarea_test.cpp @@ -0,0 +1,169 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "core/components/common/layout/constants.h" +#include "core/components/text_field/textfield_theme.h" +#include "core/components/theme/theme_manager.h" +#include "frameworks/bridge/common/dom/dom_document.h" +#include "frameworks/bridge/common/dom/dom_textarea.h" +#include "frameworks/bridge/test/unittest/jsfrontend/dom_node_factory.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace::Framework { +namespace { + +constexpr uint32_t TEXTAREA_MAXLENGTH_VALUE_DEFAULT = std::numeric_limits::max(); +const FontWeight TEXTAREA_FONT_WEIGHT_VALUE_DEFAULT = FontWeight::W400; +const std::string TEXTAREA_FONT_FAMILY_VALUE_DEFAULT = "sans-serif"; + +const std::string TEXTAREA_DATA_VALUE = "test dom textarea"; +const std::string TEXTAREA_PLACEHOLDER_VALUE = "please input"; +constexpr uint32_t TEXTAREA_MAXLENGTH_VALUE = 100; +const std::string TEXTAREA_COLOR_STR_VALUE = "#12345678"; +const std::string TEXTAREA_PLACEHOLDER_COLOR_STR_VALUE = "#12345678"; +constexpr double TEXTAREA_FONT_SIZE_VALUE = 30.0; +const FontWeight TEXTAREA_FONT_WEIGHT_VALUE = FontWeight::W600; +const std::string TEXTAREA_FONT_FAMILY_VALUE = "serif"; +const std::string TEXTAREA_HEADER_ICON = "test.png"; + +} // namespace + +class DomTextareaTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); +}; + +void DomTextareaTest::SetUpTestCase() {} +void DomTextareaTest::TearDownTestCase() {} +void DomTextareaTest::SetUp() {} +void DomTextareaTest::TearDown() {} + +/** + * @tc.name: DomTextareaCreatorTest001 + * @tc.desc: Test textarea component are created as default. + * @tc.type: FUNC + * @tc.require: AR000DAR18 + * @tc.author: hushilong + */ +HWTEST_F(DomTextareaTest, DomTextareaCreatorTest001, TestSize.Level1) +{ + const std::string textareaTestJsonStr = "{" + " \"tag\": \"textarea\" " + "}"; + /** + * @tc.steps: step1. Construct string without style and attribute, then create textarea node with it + * @tc.expected: step1. textarea component are created successfully. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(textareaTestJsonStr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + ASSERT_TRUE(boxChild); + RefPtr textareaComponent = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(textareaComponent); + + /** + * @tc.steps: step2. Check styles and attributes of created textarea node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + auto themeManager = AceType::MakeRefPtr(); + RefPtr theme = themeManager->GetTheme(); + ASSERT_TRUE(theme); + + EXPECT_EQ(textareaComponent->GetPlaceholderColor(), theme->GetPlaceholderColor()); + EXPECT_EQ(textareaComponent->GetMaxLength(), TEXTAREA_MAXLENGTH_VALUE_DEFAULT); + + auto style = textareaComponent->GetTextStyle(); + EXPECT_EQ(style.GetTextColor(), theme->GetTextColor()); + EXPECT_EQ(style.GetFontSize(), theme->GetFontSize()); + EXPECT_EQ(style.GetFontWeight(), TEXTAREA_FONT_WEIGHT_VALUE_DEFAULT); + EXPECT_EQ(style.GetFontFamilies()[0], TEXTAREA_FONT_FAMILY_VALUE_DEFAULT); +} + +/** + * @tc.name: DomTextareaCreatorTest002 + * @tc.desc: Test textarea component are created with all style and attribute. + * @tc.type: FUNC + * @tc.require: AR000DAR18 + * @tc.author: hushilong + */ +HWTEST_F(DomTextareaTest, DomTextareaCreatorTest002, TestSize.Level1) +{ + const std::string textareaTestJsonStr = "{" + " \"tag\": \"textarea\", " + " \"attr\": [{ " + " \"value\": \"test dom textarea\" " + " }, " + " { " + " \"placeholder\": \"please input\" " + " }, " + " { " + " \"maxlength\": \"100\" " + " }, " + " { " + " \"extend\": \"true\" " + " }, " + " { " + " \"headerIcon\": \"test.png\" " + " }], " + " \"style\": [{ " + " \"color\" : \"#12345678\" " + " }, " + " { " + " \"placeholderColor\": \"#12345678\" " + " }, " + " { " + " \"fontSize\": \"30.0\" " + " }, " + " { " + " \"fontWeight\": \"600\" " + " }, " + " { " + " \"fontFamily\": \"serif\" " + " }] " + "}"; + /** + * @tc.steps: step1. Construct string with all style and attribute, then create textarea node with it + * @tc.expected: step1. textarea component are created successfully. + */ + auto domNodeRoot = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(textareaTestJsonStr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNodeRoot); + ASSERT_TRUE(boxChild); + RefPtr textareaComponent = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(textareaComponent); + + /** + * @tc.steps: step2. Check styles and attributes of created textarea node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + EXPECT_EQ(textareaComponent->GetPlaceholder(), TEXTAREA_PLACEHOLDER_VALUE); + EXPECT_EQ(textareaComponent->GetPlaceholderColor(), Color::FromString(TEXTAREA_COLOR_STR_VALUE)); + EXPECT_EQ(textareaComponent->GetMaxLength(), TEXTAREA_MAXLENGTH_VALUE); + EXPECT_TRUE(textareaComponent->IsExtend()); + EXPECT_EQ(textareaComponent->GetIconImage(), TEXTAREA_HEADER_ICON); + + auto style = textareaComponent->GetTextStyle(); + EXPECT_EQ(style.GetTextColor(), Color::FromString(TEXTAREA_PLACEHOLDER_COLOR_STR_VALUE)); + EXPECT_EQ(style.GetFontSize().Value(), TEXTAREA_FONT_SIZE_VALUE); + EXPECT_EQ(style.GetFontWeight(), TEXTAREA_FONT_WEIGHT_VALUE); + EXPECT_EQ(style.GetFontFamilies()[0], TEXTAREA_FONT_FAMILY_VALUE); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/test/unittest/jsfrontend/event/BUILD.gn b/frameworks/bridge/test/unittest/jsfrontend/event/BUILD.gn new file mode 100644 index 00000000..4deadfd5 --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/event/BUILD.gn @@ -0,0 +1,57 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/jsframework/event" + +ohos_unittest("CommonEventTest") { + module_out_path = module_output_path + + sources = [ + "../dom_node_factory.cpp", + "common_event_test.cpp", + ] + + configs = [ + ":config_domnode_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + external_deps = [ "hiviewdfx_hilog_native:libhilog" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_domnode_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":CommonEventTest" ] +} diff --git a/frameworks/bridge/test/unittest/jsfrontend/event/common_event_test.cpp b/frameworks/bridge/test/unittest/jsfrontend/event/common_event_test.cpp new file mode 100644 index 00000000..03dd484e --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/event/common_event_test.cpp @@ -0,0 +1,255 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "frameworks/bridge/common/dom/dom_div.h" +#include "frameworks/bridge/common/dom/dom_document.h" +#include "frameworks/bridge/common/dom/dom_rating.h" +#include "frameworks/bridge/common/dom/dom_swiper.h" +#include "frameworks/bridge/common/dom/dom_text.h" +#include "frameworks/bridge/test/unittest/jsfrontend/dom_node_factory.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace::Framework { + +namespace { + +const std::string EVENT_TEST_001 = "" + "{ " + " \"tag\": \"swiper\", " + " \"commonEvent\": [ " + " \"touchstart\", " + " \"touchmove\", " + " \"touchcancel\", " + " \"touchend\" " + " ] " + "}"; + +const std::string EVENT_TEST_002 = "" + "{ " + " \"tag\": \"text\", " + " \"commonEvent\": [ " + " \"click\", " + " \"longpress\" " + " ] " + "}"; + +const std::string EVENT_TEST_003 = "" + "{ " + " \"tag\": \"text\", " + " \"commonEvent\": [ " + " \"touchstart\", " + " \"touchmove\", " + " \"touchcancel\", " + " \"touchend\", " + " \"click\", " + " \"longpress\" " + " ] " + "}"; + +const std::string EVENT_TEST_004 = "" + "{ " + " \"tag\": \"rating\", " + " \"event\": [ " + " \"change\" " + " ], " + " \"commonEvent\": [ " + " \"touchstart\", " + " \"click\" " + " ] " + "}"; + +const std::string EVENT_TEST_005 = "" + "{ " + " \"tag\": \"swiper\" " + "}"; + +const std::string EVENT_TEST_006 = "" + "{ " + " \"tag\": \"swiper\", " + " \"commonEvent\": [ " + " \"focus\", " + " \"blur\", " + " \"key\" " + " ], " + " \"commonStyle\": [{ " + " \"focusable\" : \"true\" " + " } " + " ] " + "}"; + +} // namespace + +class CommonEventTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); +}; + +void CommonEventTest::SetUpTestCase() {} +void CommonEventTest::TearDownTestCase() {} +void CommonEventTest::SetUp() {} +void CommonEventTest::TearDown() {} + +/** + * @tc.name: DomCommonEventTest001 + * @tc.desc: Test add touch events to dom swiper successfully. + * @tc.type: FUNC + * @tc.require: AR000DD68M + */ +HWTEST_F(CommonEventTest, DomCommonEventTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create swiper node with it. + * @tc.expected: step1. Swiper node is created successfully. + */ + auto swiper = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(EVENT_TEST_001); + RefPtr touchEventComponent = swiper->GetTouchListenerComponent(); + ASSERT_TRUE(touchEventComponent != nullptr); + + /** + * @tc.steps: step2. Check touch eventId of created swiper node. + * @tc.expected: step2. The value of touch eventId is as expected. + */ + EXPECT_TRUE(touchEventComponent->GetOnTouchDownId() == std::to_string(swiper->GetNodeId())); + EXPECT_TRUE(touchEventComponent->GetOnTouchDownId().GetData().eventType == DOM_TOUCH_START); + EXPECT_TRUE(touchEventComponent->GetOnTouchMoveId() == std::to_string(swiper->GetNodeId())); + EXPECT_TRUE(touchEventComponent->GetOnTouchMoveId().GetData().eventType == DOM_TOUCH_MOVE); + EXPECT_TRUE(touchEventComponent->GetOnTouchUpId() == std::to_string(swiper->GetNodeId())); + EXPECT_TRUE(touchEventComponent->GetOnTouchUpId().GetData().eventType == DOM_TOUCH_END); + EXPECT_TRUE(touchEventComponent->GetOnTouchCancelId() == std::to_string(swiper->GetNodeId())); + EXPECT_TRUE(touchEventComponent->GetOnTouchCancelId().GetData().eventType == DOM_TOUCH_CANCEL); +} + +/** + * @tc.name: DomCommonEventTest002 + * @tc.desc: Test add click and longpress event to dom text successfully. + * @tc.type: FUNC + * @tc.require: AR000DD68M + */ +HWTEST_F(CommonEventTest, DomCommonEventTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create text node with it. + * @tc.expected: step1. Text node is created successfully. + */ + auto text = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(EVENT_TEST_002); + RefPtr gestureEventComponent = text->GetGestureListenerComponent(); + ASSERT_TRUE(gestureEventComponent != nullptr); + + /** + * @tc.steps: step2. Check click and longpress eventId of created text node. + * @tc.expected: step2. The value of click and longpress eventId is as expected. + */ + EXPECT_TRUE(gestureEventComponent->GetOnClickId().GetData().eventType == DOM_CLICK); + EXPECT_TRUE(gestureEventComponent->GetOnClickId() == std::to_string(text->GetNodeId())); + EXPECT_TRUE(gestureEventComponent->GetOnLongPressId().GetData().eventType == DOM_LONG_PRESS); + EXPECT_TRUE(gestureEventComponent->GetOnLongPressId() == std::to_string(text->GetNodeId())); +} + +/** + * @tc.name: DomCommonEventTest003 + * @tc.desc: Test add touch events and click/longpress event to dom text successfully. + * @tc.type: FUNC + * @tc.require: AR000DD68M + */ +HWTEST_F(CommonEventTest, DomCommonEventTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create text node with it. + * @tc.expected: step1. Text node is created successfully. + */ + auto text = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(EVENT_TEST_003); + RefPtr touchEventComponent = text->GetTouchListenerComponent(); + RefPtr gestureEventComponent = text->GetGestureListenerComponent(); + ASSERT_TRUE(gestureEventComponent != nullptr); + ASSERT_TRUE(touchEventComponent != nullptr); + + /** + * @tc.steps: step2. Check all event eventId of created text node. + * @tc.expected: step2. The value of eventId about all events is as expected. + */ + EXPECT_TRUE(touchEventComponent->GetOnTouchDownId() == std::to_string(text->GetNodeId())); + EXPECT_TRUE(touchEventComponent->GetOnTouchDownId().GetData().eventType == DOM_TOUCH_START); + EXPECT_TRUE(touchEventComponent->GetOnTouchMoveId() == std::to_string(text->GetNodeId())); + EXPECT_TRUE(touchEventComponent->GetOnTouchMoveId().GetData().eventType == DOM_TOUCH_MOVE); + EXPECT_TRUE(touchEventComponent->GetOnTouchUpId() == std::to_string(text->GetNodeId())); + EXPECT_TRUE(touchEventComponent->GetOnTouchUpId().GetData().eventType == DOM_TOUCH_END); + EXPECT_TRUE(touchEventComponent->GetOnTouchCancelId() == std::to_string(text->GetNodeId())); + EXPECT_TRUE(touchEventComponent->GetOnTouchCancelId().GetData().eventType == DOM_TOUCH_CANCEL); + EXPECT_TRUE(gestureEventComponent->GetOnClickId().GetData().eventType == DOM_CLICK); + EXPECT_TRUE(gestureEventComponent->GetOnClickId() == std::to_string(text->GetNodeId())); + EXPECT_TRUE(gestureEventComponent->GetOnLongPressId().GetData().eventType == DOM_LONG_PRESS); + EXPECT_TRUE(gestureEventComponent->GetOnLongPressId() == std::to_string(text->GetNodeId())); +} + +/** + * @tc.name: DomCommonEventTest004 + * @tc.desc: Test private change event and common gesture event to dom rating successfully. + * @tc.type: FUNC + * @tc.require: AR000DD68M + */ +HWTEST_F(CommonEventTest, DomCommonEventTest004, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create rating node with it. + * @tc.expected: step1. Swiper node is created successfully. + */ + auto rating = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(EVENT_TEST_004); + RefPtr touchEventComponent = rating->GetTouchListenerComponent(); + RefPtr gestureEventComponent = rating->GetGestureListenerComponent(); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(rating); + RefPtr ratingComponent = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(gestureEventComponent != nullptr); + ASSERT_TRUE(touchEventComponent != nullptr); + ASSERT_TRUE(ratingComponent != nullptr); + + /** + * @tc.steps: step2. Check all event eventId of created rating node. + * @tc.expected: step2. The value of eventId about all events is as expected. + */ + EXPECT_TRUE(touchEventComponent->GetOnTouchDownId() == std::to_string(rating->GetNodeId())); + EXPECT_TRUE(touchEventComponent->GetOnTouchDownId().GetData().eventType == DOM_TOUCH_START); + EXPECT_TRUE(gestureEventComponent->GetOnClickId().GetData().eventType == DOM_CLICK); + EXPECT_TRUE(gestureEventComponent->GetOnClickId() == std::to_string(rating->GetNodeId())); + EXPECT_TRUE(ratingComponent->GetChangeEventId() == std::to_string(rating->GetNodeId())); + EXPECT_TRUE(ratingComponent->GetChangeEventId().GetData().eventType == DOM_CHANGE); +} + +/** + * @tc.name: DomCommonEventTest005 + * @tc.desc: Test default event value without add event to swiper node. + * @tc.type: FUNC + * @tc.require: AR000DD68M + */ +HWTEST_F(CommonEventTest, DomCommonEventTest005, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create swiper node with it. + * @tc.expected: step1. Swiper node is created successfully and has no event. + */ + auto swiper = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(EVENT_TEST_005); + RefPtr touchEventComponent = swiper->GetTouchListenerComponent(); + RefPtr gestureEventComponent = swiper->GetGestureListenerComponent(); + ASSERT_TRUE(gestureEventComponent == nullptr); + ASSERT_TRUE(touchEventComponent == nullptr); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/test/unittest/jsfrontend/manifest/BUILD.gn b/frameworks/bridge/test/unittest/jsfrontend/manifest/BUILD.gn new file mode 100644 index 00000000..2c8e4063 --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/manifest/BUILD.gn @@ -0,0 +1,53 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/jsframework/manifest_window" + +ohos_unittest("ManifestWindowTest") { + module_out_path = module_output_path + + sources = [ "manifest_window_test.cpp" ] + + configs = [ + ":config_manifest_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_manifest_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":ManifestWindowTest" ] +} diff --git a/frameworks/bridge/test/unittest/jsfrontend/manifest/manifest_window_test.cpp b/frameworks/bridge/test/unittest/jsfrontend/manifest/manifest_window_test.cpp new file mode 100644 index 00000000..1fd16e65 --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/manifest/manifest_window_test.cpp @@ -0,0 +1,285 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include "gtest/gtest.h" + +#include "frameworks/bridge/common/manifest/manifest_window.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace::Framework { +namespace { + +#ifndef WEARABLE_PRODUCT +constexpr int32_t DESIGN_WIDTH_DEFAULT = 720; +#else +constexpr int32_t DESIGN_WIDTH_DEFAULT = 454; +#endif +constexpr int32_t DESIGN_WIDTH_CUSTOM = 800; +constexpr int32_t DESIGN_WIDTH_MAX = std::numeric_limits::max(); + +const std::string MANIFEST_DESIGN_WIDTH_CUSTOM = "" + "{ " + " \"window\": { " + " \"designWidth\" : 800, " + " \"autoDesignWidth\" : false " + " } " + "}"; + +const std::string MANIFEST_DESIGN_WIDTH_NEGATIVE = "" + "{ " + " \"window\": { " + " \"designWidth\" : -1, " + " \"autoDesignWidth\" : false " + " } " + "}"; + +const std::string MANIFEST_DESIGN_WIDTH_ZERO = "" + "{ " + " \"window\": { " + " \"designWidth\" : 0, " + " \"autoDesignWidth\" : false " + " } " + "}"; + +const std::string MANIFEST_DESIGN_WIDTH_OVER_LIMIT = "" + "{ " + " \"window\": { " + " \"designWidth\" : 2147483648, " + " \"autoDesignWidth\" : false " + " } " + "}"; + +const std::string MANIFEST_DESIGN_WIDTH_FORMAT_ERR = "" + "{ " + " \"window\": { " + " \"designWidth\" : \"800\", " + " \"autoDesignWidth\" : false " + " } " + "}"; + +const std::string MANIFEST_DESIGN_WIDTH_NONE = "" + "{ " + " \"window\": { " + " \"autoDesignWidth\" : false " + " } " + "}"; + +const std::string MANIFEST_AUTO_DESIGN_WIDTH_TRUE = "" + "{ " + " \"window\": { " + " \"autoDesignWidth\" : true " + " } " + "}"; + +const std::string MANIFEST_AUTO_DESIGN_WIDTH_FALSE = "" + "{ " + " \"window\": { " + " \"autoDesignWidth\" : false " + " } " + "}"; + +const std::string MANIFEST_AUTO_DESIGN_WIDTH_FORMAT_ERR = "" + "{ " + " \"window\": { " + " \"autoDesignWidth\" : \"true\" " + " } " + "}"; + +const std::string MANIFEST_AUTO_DESIGN_WIDTH_NONE = "" + "{ " + " \"window\": { " + " } " + "}"; + +void AssertParseMenifest(const std::string& json, int32_t expectDesignWidth, bool expectAutoDesignWidth) +{ + auto manifestWindow = AceType::MakeRefPtr(); + auto rootJson = JsonUtil::ParseJsonString(json); + manifestWindow->WindowParse(rootJson); + const auto& config = manifestWindow->GetWindowConfig(); + ASSERT_EQ(config.designWidth, expectDesignWidth); + ASSERT_EQ(config.autoDesignWidth, expectAutoDesignWidth); +} + +} // namespace + +class ManifestWindowTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; +}; + +void ManifestWindowTest::SetUpTestCase() {} +void ManifestWindowTest::TearDownTestCase() {} +void ManifestWindowTest::SetUp() {} +void ManifestWindowTest::TearDown() {} + +/** + * @tc.name: ManifestParseDesignWidth001 + * @tc.desc: Design width in manifest can be parsed correctly. + * @tc.type: FUNC + * @tc.require: AR000DSSAT + */ +HWTEST_F(ManifestWindowTest, ManifestParseDesignWidth001, TestSize.Level0) +{ + /** + * @tc.steps: step1. Construct ManifestWindow and parse json with normal value. + * @tc.expected: step1. "designWidth" and "autoDesignWidth" can be parsed correctly. + */ + AssertParseMenifest(MANIFEST_DESIGN_WIDTH_CUSTOM, DESIGN_WIDTH_CUSTOM, false); +} + +/** + * @tc.name: ManifestParseDesignWidth002 + * @tc.desc: Design width of negative value in manifest can be parsed correctly. + * @tc.type: FUNC + * @tc.require: AR000DSSAT + */ +HWTEST_F(ManifestWindowTest, ManifestParseDesignWidth002, TestSize.Level0) +{ + /** + * @tc.steps: step1. Construct ManifestWindow and parse json with negative value. + * @tc.expected: step1. "designWidth" and "autoDesignWidth" can be parsed correctly. + */ + AssertParseMenifest(MANIFEST_DESIGN_WIDTH_NEGATIVE, DESIGN_WIDTH_DEFAULT, false); +} + +/** + * @tc.name: ManifestParseDesignWidth003 + * @tc.desc: Design width of zero value in manifest can be parsed correctly. + * @tc.type: FUNC + * @tc.require: AR000DSSAT + */ +HWTEST_F(ManifestWindowTest, ManifestParseDesignWidth003, TestSize.Level0) +{ + /** + * @tc.steps: step1. Construct ManifestWindow and parse json with zero value. + * @tc.expected: step1. "designWidth" and "autoDesignWidth" can be parsed correctly. + */ + AssertParseMenifest(MANIFEST_DESIGN_WIDTH_ZERO, DESIGN_WIDTH_DEFAULT, false); +} + +/** + * @tc.name: ManifestParseDesignWidth004 + * @tc.desc: Design width of over limit value in manifest can be parsed correctly. + * @tc.type: FUNC + * @tc.require: AR000DSSAT + */ +HWTEST_F(ManifestWindowTest, ManifestParseDesignWidth004, TestSize.Level0) +{ + /** + * @tc.steps: step1. Construct ManifestWindow and parse json with over limit value. + * @tc.expected: step1. "designWidth" and "autoDesignWidth" can be parsed correctly. + */ + AssertParseMenifest(MANIFEST_DESIGN_WIDTH_OVER_LIMIT, DESIGN_WIDTH_MAX, false); +} + +/** + * @tc.name: ManifestParseDesignWidth005 + * @tc.desc: Design width of value not number in manifest can be parsed correctly. + * @tc.type: FUNC + * @tc.require: AR000DSSAT + */ +HWTEST_F(ManifestWindowTest, ManifestParseDesignWidth005, TestSize.Level0) +{ + /** + * @tc.steps: step1. Construct ManifestWindow and parse json with value not number. + * @tc.expected: step1. "designWidth" and "autoDesignWidth" can be parsed correctly. + */ + AssertParseMenifest(MANIFEST_DESIGN_WIDTH_FORMAT_ERR, DESIGN_WIDTH_DEFAULT, false); +} + +/** + * @tc.name: ManifestParseDesignWidth006 + * @tc.desc: No design width config in manifest can be parsed correctly. + * @tc.type: FUNC + * @tc.require: AR000DSSAT + */ +HWTEST_F(ManifestWindowTest, ManifestParseDesignWidth006, TestSize.Level0) +{ + /** + * @tc.steps: step1. Construct ManifestWindow and parse json with no design width. + * @tc.expected: step1. "designWidth" and "autoDesignWidth" can be parsed correctly. + */ + AssertParseMenifest(MANIFEST_DESIGN_WIDTH_NONE, DESIGN_WIDTH_DEFAULT, false); +} + +/** + * @tc.name: ManifestParseAutoDesignWidth001 + * @tc.desc: Auto design width in manifest can be parsed correctly. + * @tc.type: FUNC + * @tc.require: AR000DSSAT + */ +HWTEST_F(ManifestWindowTest, ManifestParseAutoDesignWidth001, TestSize.Level0) +{ + /** + * @tc.steps: step1. Construct ManifestWindow and parse json with autoDesignWidth = true. + * @tc.expected: step1. "designWidth" and "autoDesignWidth" can be parsed correctly. + */ + AssertParseMenifest(MANIFEST_AUTO_DESIGN_WIDTH_TRUE, DESIGN_WIDTH_DEFAULT, true); +} + +/** + * @tc.name: ManifestParseAutoDesignWidth002 + * @tc.desc: Auto design width of "false" in manifest can be parsed correctly. + * @tc.type: FUNC + * @tc.require: AR000DSSAT + */ +HWTEST_F(ManifestWindowTest, ManifestParseAutoDesignWidth002, TestSize.Level0) +{ + /** + * @tc.steps: step1. Construct ManifestWindow and parse json with autoDesignWidth = false. + * @tc.expected: step1. "designWidth" and "autoDesignWidth" can be parsed correctly. + */ + AssertParseMenifest(MANIFEST_AUTO_DESIGN_WIDTH_FALSE, DESIGN_WIDTH_DEFAULT, false); +} + +/** + * @tc.name: ManifestParseAutoDesignWidth003 + * @tc.desc: Auto design width with wrong format in manifest can be parsed correctly. + * @tc.type: FUNC + * @tc.require: AR000DSSAT + */ +HWTEST_F(ManifestWindowTest, ManifestParseAutoDesignWidth003, TestSize.Level0) +{ + /** + * @tc.steps: step1. Construct ManifestWindow and parse json with autoDesignWidth of wrong format. + * @tc.expected: step1. "designWidth" and "autoDesignWidth" can be parsed correctly. + */ + AssertParseMenifest(MANIFEST_AUTO_DESIGN_WIDTH_FORMAT_ERR, DESIGN_WIDTH_DEFAULT, false); +} + +/** + * @tc.name: ManifestParseAutoDesignWidth004 + * @tc.desc: Auto design width not config in manifest can be parsed correctly. + * @tc.type: FUNC + * @tc.require: AR000DSSAT + */ +HWTEST_F(ManifestWindowTest, ManifestParseAutoDesignWidth004, TestSize.Level0) +{ + /** + * @tc.steps: step1. Construct ManifestWindow and parse json with autoDesignWidth not config. + * @tc.expected: step1. "designWidth" and "autoDesignWidth" can be parsed correctly. + */ + AssertParseMenifest(MANIFEST_AUTO_DESIGN_WIDTH_NONE, DESIGN_WIDTH_DEFAULT, false); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/test/unittest/jsfrontend/marquee/BUILD.gn b/frameworks/bridge/test/unittest/jsfrontend/marquee/BUILD.gn new file mode 100644 index 00000000..e215a1eb --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/marquee/BUILD.gn @@ -0,0 +1,56 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/jsframework/marquee" + +ohos_unittest("DomMarqueeTest") { + module_out_path = module_output_path + + sources = [ + "../dom_node_factory.cpp", + "dom_marquee_test.cpp", + ] + + configs = [ + ":config_domnode_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_domnode_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":DomMarqueeTest" ] +} diff --git a/frameworks/bridge/test/unittest/jsfrontend/marquee/dom_marquee_test.cpp b/frameworks/bridge/test/unittest/jsfrontend/marquee/dom_marquee_test.cpp new file mode 100644 index 00000000..18966d0e --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/marquee/dom_marquee_test.cpp @@ -0,0 +1,172 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "core/components/common/layout/constants.h" +#include "core/components/theme/theme_constants.h" +#include "frameworks/bridge/common/dom/dom_document.h" +#include "frameworks/bridge/common/dom/dom_marquee.h" +#include "frameworks/bridge/test/unittest/jsfrontend/dom_node_factory.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace::Framework { +namespace { + +const std::string CUSTOM_VALUE = "testValue"; +const Color CUSTOM_TEXT_COLOR = Color(0xffff8888); +const Dimension CUSTOM_FONT_SIZE = Dimension(50.0, DimensionUnit::PX); +const FontWeight CUSTOM_FONT_WEIGHT = FontWeight::BOLDER; +const std::vector CUSTOM_FONT_FAMILIES = { "serif" }; +constexpr double CUSTOM_SCROLL_AMOUNT = 30.0; +constexpr int32_t CUSTOM_LOOP = 3; +const MarqueeDirection CUSTOM_DIRECTION = MarqueeDirection::RIGHT; +const std::vector DEFAULT_FONT_FAMILIES = {}; +const Dimension DEFAULT_MARQUEE_FONT_SIZE = Dimension(37.5, DimensionUnit::PX); + +const std::string MARQUEE_JS_CUSTOM = "" + "{ " + " \"tag\": \"marquee\", " + " \"attr\": [{ " + " \"scrollamount\" : \"30px\" " + " }, " + " {" + " \"direction\" : \"right\" " + " }, " + " {" + " \"loop\" : \"3\" " + " }, " + " {" + " \"value\" : \"testValue\" " + " }], " + " \"style\": [{ " + " \"fontSize\" : \"50px\" " + " }, " + " { " + " \"color\" : \"#ff8888\" " + " }, " + " {" + " \"fontWeight\" : \"bolder\" " + " }, " + " {" + " \"fontFamily\" : \"serif\" " + " }]," + " \"event\": [ \"bounce\", \"finish\", \"start\" ] " + "}"; + +const std::string MARQUEE_JS_DEFAULT = "" + "{ " + " \"tag\": \"marquee\" " + "}"; + +} // namespace + +class DomMarqueeTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); +}; + +void DomMarqueeTest::SetUpTestCase() {} +void DomMarqueeTest::TearDownTestCase() {} +void DomMarqueeTest::SetUp() {} +void DomMarqueeTest::TearDown() {} + +/** + * @tc.name: DomMarqueeCreateFromDsl001 + * @tc.desc: Test DOMMarquee can be created with custom attributes. + * @tc.type: FUNC + * @tc.require: AR000DD66I + * @tc.author: liruokun + */ +HWTEST_F(DomMarqueeTest, DomMarqueeCreateFromDsl001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with custom fields, create marquee node with it. + * @tc.expected: step1. Marquee node and marquee component are created successfully. + */ + auto domNode = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(MARQUEE_JS_CUSTOM); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNode); + RefPtr marquee = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(marquee); + + /** + * @tc.steps: step2. Check styles and attributes of MarqueeComponent. + * @tc.expected: step2. The styles and attributes are same as defined in js dsl. + */ + EXPECT_EQ(marquee->GetValue(), CUSTOM_VALUE); + + const auto& textStyle = marquee->GetTextStyle(); + EXPECT_EQ(textStyle.GetTextColor().GetValue(), CUSTOM_TEXT_COLOR.GetValue()); + EXPECT_EQ(textStyle.GetFontSize().Unit(), CUSTOM_FONT_SIZE.Unit()); + EXPECT_TRUE(NearEqual(textStyle.GetFontSize().Value(), CUSTOM_FONT_SIZE.Value())); + EXPECT_EQ(textStyle.GetFontWeight(), CUSTOM_FONT_WEIGHT); + EXPECT_EQ(textStyle.GetFontFamilies(), CUSTOM_FONT_FAMILIES); + + EXPECT_TRUE(NearEqual(marquee->GetScrollAmount(), CUSTOM_SCROLL_AMOUNT)); + EXPECT_EQ(marquee->GetLoop(), CUSTOM_LOOP); + EXPECT_EQ(marquee->GetDirection(), CUSTOM_DIRECTION); + EXPECT_EQ(marquee->GetBounceEventId(), std::to_string(domNode->GetNodeId())); + EXPECT_EQ(marquee->GetFinishEventId(), std::to_string(domNode->GetNodeId())); + EXPECT_EQ(marquee->GetStartEventId(), std::to_string(domNode->GetNodeId())); +} + +/** + * @tc.name: DomMarqueeCreateFromDsl002 + * @tc.desc: Test DOMMarquee can be created with default attributes. + * @tc.type: FUNC + * @tc.require: AR000DD66I + * @tc.author: liruokun + */ +HWTEST_F(DomMarqueeTest, DomMarqueeCreateFromDsl002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with default fields, create marquee node with it. + * @tc.expected: step1. Marquee node and marquee component are created successfully. + */ + auto domNode = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(MARQUEE_JS_DEFAULT); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(domNode); + RefPtr marquee = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(marquee); + + /** + * @tc.steps: step2. Check styles and attributes of MarqueeComponent. + * @tc.expected: step2. The styles and attributes are same as defined in js dsl. + */ + EXPECT_EQ(marquee->GetValue(), ""); + + const auto& textStyle = marquee->GetTextStyle(); + auto themeManager = AceType::MakeRefPtr(); + auto themeConstants = themeManager->GetThemeConstants(); + ASSERT_NE(themeConstants, nullptr); + EXPECT_EQ(textStyle.GetTextColor().GetValue(), themeConstants->GetColor(THEME_OHOS_COLOR_TEXT_PRIMARY).GetValue()); + EXPECT_EQ(textStyle.GetFontSize().Unit(), DEFAULT_MARQUEE_FONT_SIZE.Unit()); + EXPECT_TRUE(NearEqual(textStyle.GetFontSize().Value(), DEFAULT_MARQUEE_FONT_SIZE.Value())); + EXPECT_EQ(textStyle.GetFontWeight(), FontWeight::NORMAL); + EXPECT_EQ(textStyle.GetFontFamilies(), DEFAULT_FONT_FAMILIES); + + EXPECT_TRUE(NearEqual(marquee->GetScrollAmount(), DEFAULT_MARQUEE_SCROLL_AMOUNT)); + EXPECT_EQ(marquee->GetLoop(), DEFAULT_MARQUEE_LOOP); + EXPECT_EQ(marquee->GetDirection(), MarqueeDirection::LEFT); + EXPECT_TRUE(marquee->GetBounceEventId().IsEmpty()); + EXPECT_TRUE(marquee->GetFinishEventId().IsEmpty()); + EXPECT_TRUE(marquee->GetStartEventId().IsEmpty()); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/test/unittest/jsfrontend/progress/BUILD.gn b/frameworks/bridge/test/unittest/jsfrontend/progress/BUILD.gn new file mode 100644 index 00000000..81e78b91 --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/progress/BUILD.gn @@ -0,0 +1,56 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/jsframework/progress" + +ohos_unittest("DomProgressTest") { + module_out_path = module_output_path + + sources = [ + "../dom_node_factory.cpp", + "dom_progress_test.cpp", + ] + + configs = [ + ":config_domnode_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_domnode_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":DomProgressTest" ] +} diff --git a/frameworks/bridge/test/unittest/jsfrontend/progress/dom_progress_test.cpp b/frameworks/bridge/test/unittest/jsfrontend/progress/dom_progress_test.cpp new file mode 100644 index 00000000..b5eb8280 --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/progress/dom_progress_test.cpp @@ -0,0 +1,394 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "core/components/common/layout/constants.h" +#include "frameworks/bridge/common/dom/dom_document.h" +#include "frameworks/bridge/common/dom/dom_progress.h" +#include "frameworks/bridge/test/unittest/jsfrontend/dom_node_factory.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace::Framework { +namespace { + +constexpr double PERCENT = 20.0; +constexpr double PERCENT_MAX = 100.0; +constexpr double PERCENT_MIN = 0.0; + +} // namespace + +class DomProgressTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; +}; + +void DomProgressTest::SetUpTestCase() {} +void DomProgressTest::TearDownTestCase() {} +void DomProgressTest::SetUp() {} +void DomProgressTest::TearDown() {} + +/** + * @tc.name: DomProgressCreatorTest001 + * @tc.desc: Test create progress node successfully and progress component create as desire. + * @tc.type: FUNC + * @tc.require: AR000DD66A AR000DQ1OQ + * @tc.author: wangchun + */ +HWTEST_F(DomProgressTest, DomProgressCreatorTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string of DomProgress with two attributes and a style: + * type, percent, color. + */ + const std::string progressTest001 = "" + "{ " + " \"tag\": \"progress\", " + " \"attr\": [{ " + " \"type\" : \"horizontal\" " + " }, " + " {" + " \"percent\" : \"20\" " + " }," + " {" + " \"secondaryPercent\" : \"20\" " + " }], " + " \"style\": [{ " + " \"color\" : \"#12345678\" " + " }]" + "}"; + /** + * @tc.steps: step2. Create progress node with the string. + * @tc.expected: step2. Progress node and child progress component are created successfully. + */ + auto progress = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(progressTest001); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(progress); + RefPtr progressComponent = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(progressComponent != nullptr); + + /** + * @tc.steps: step3. Check the style and attributes of created progress node. + * @tc.expected: step3. The style and attributes are as expected. + */ + EXPECT_TRUE(progressComponent->GetType() == ProgressType::LINEAR); + double percent = progressComponent->GetValue(); + double cachedPercent = progressComponent->GetCachedValue(); + EXPECT_TRUE(NearEqual(percent, PERCENT)); + EXPECT_TRUE(NearEqual(cachedPercent, PERCENT)); + auto progressTrack = progressComponent->GetTrack(); + ASSERT_TRUE(progressTrack != nullptr); + Color selectedColor = progressTrack->GetSelectColor(); + EXPECT_EQ(selectedColor, Color::FromString("#12345678")); +} + +/** + * @tc.name: DomProgressCreatorTest002 + * @tc.desc: Set percent,secondaryPercent = 100 when percent > 100 secondaryPercent > 100. + * @tc.type: FUNC + * @tc.require: AR000DD66A AR000DQ1OQ + * @tc.author: wangchun + */ +HWTEST_F(DomProgressTest, DomProgressCreatorTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string of DomProgress with percent > 100 and secondarypercent > 100 + */ + const std::string progressTest002 = "" + "{ " + " \"tag\": \"progress\", " + " \"attr\": [{ " + " \"type\" : \"horizontal\" " + " }, " + " {" + " \"percent\" : \"200\" " + " }, " + " {" + " \"secondaryPercent\" : \"200\" " + " }], " + " \"style\": [{ " + " \"color\" : \"#12345678\" " + " }]" + "}"; + /** + * @tc.steps: step2. Create progress node with the string. + * @tc.expected: step2. Progress node and child progress component are created successfully. + */ + auto progress = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(progressTest002); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(progress); + RefPtr progressComponent = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(progressComponent != nullptr); + + /** + * @tc.steps: step3. Check the percent of created progress node. + * @tc.expected: step3. The percent = 100. + */ + double percent = progressComponent->GetValue(); + double secondaryPercent = progressComponent->GetCachedValue(); + EXPECT_TRUE(NearEqual(percent, PERCENT_MAX)); + EXPECT_TRUE(NearEqual(secondaryPercent, PERCENT_MAX)); +} + +/** + * @tc.name: DomProgressCreatorTest003 + * @tc.desc: Test create progress node successfully and stroke-width create as desire. + * @tc.type: FUNC + * @tc.require: AR000DD66A + * @tc.author: wangchun + */ +HWTEST_F(DomProgressTest, DomProgressCreatorTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string of DomProgress with two attributes and a style: + * type, percent, strokeWidth. + */ + const std::string progressTest003 = "" + "{ " + " \"tag\": \"progress\", " + " \"attr\": [{ " + " \"type\" : \"horizontal\" " + " }, " + " {" + " \"percent\" : \"20\" " + " }], " + " \"style\": [{ " + " \"strokeWidth\" : \"32\" " + " }]" + "}"; + /** + * @tc.steps: step2. Create progress node with the string. + * @tc.expected: step2. Progress node and child progress component are created successfully. + */ + auto progress = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(progressTest003); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(progress); + RefPtr progressComponent = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(progressComponent != nullptr); + + /** + * @tc.steps: step3. Check the stroke-width of created progress node. + * @tc.expected: step3. The stroke-width is as expected. + */ + auto progressTrack = progressComponent->GetTrack(); + ASSERT_TRUE(progressTrack != nullptr); + Dimension defaultThickness = Dimension(32.0, DimensionUnit::VP); + Dimension thickness = progressTrack->GetTrackThickness(); + EXPECT_TRUE(NearEqual(thickness.Value(), defaultThickness.Value())); +} + +/** + * @tc.name: DomProgressCreatorTest004 + * @tc.desc: Set percent, secondaryPercent = 0 when percent < 0, secondaryPercent < 0. + * @tc.type: FUNC + * @tc.require: AR000DD66A AR000DQ1OQ + * @tc.author: wangchun + */ +HWTEST_F(DomProgressTest, DomProgressCreatorTest004, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string of DomProgress with percent < 0 and secondarypercent < 0: + */ + const std::string progressTest004 = "" + "{ " + " \"tag\": \"progress\", " + " \"attr\": [{ " + " \"type\" : \"horizontal\" " + " }, " + " {" + " \"percent\" : \"-10\" " + " }, " + " {" + " \"secondaryPercent\" : \"-10\" " + " }], " + " \"style\": [{ " + " \"color\" : \"#12345678\" " + " }]" + "}"; + /** + * @tc.steps: step2. Create progress node with the string. + * @tc.expected: step2. Progress node and child progress component are created successfully. + */ + auto progress = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(progressTest004); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(progress); + RefPtr progressComponent = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(progressComponent != nullptr); + + /** + * @tc.steps: step3. Check the percent of created progress node. + * @tc.expected: step3. The percent = 0 and secondarypercent = 0. + */ + double percent = progressComponent->GetValue(); + double secondaryPercent = progressComponent->GetCachedValue(); + EXPECT_TRUE(NearEqual(percent, PERCENT_MIN)); + EXPECT_TRUE(NearEqual(secondaryPercent, PERCENT_MIN)); +} + +/** + * @tc.name: DomProgressCreatorTest005 + * @tc.desc: Set style color and effect to the ring and comet. + * @tc.type: FUNC + * @tc.require: AR000F3CAF + * @tc.author: zhongjianfei + */ +HWTEST_F(DomProgressTest, DomProgressCreatorTest005, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string of DomProgress with type circular: + */ + const std::string progressTest005 = "" + "{ " + " \"tag\": \"progress\", " + " \"attr\": [{ " + " \"type\" : \"circular\" " + " }], " + " \"style\": [{ " + " \"color\" : \"#11111111\" " + " }]" + "}"; + /** + * @tc.steps: step2. Create progress node with the string. + * @tc.expected: step2. Progress node and child progress component are created successfully. + */ + auto progress = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(progressTest005); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(progress); + auto loading005 = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(loading005 != nullptr); + + /** + * @tc.steps: step3. Check the percent of created progress node. + * @tc.expected: step3. The ring color and comet color are correct. + */ + Color progressColor = loading005->GetProgressColor(); + EXPECT_TRUE(progressColor == Color(0x11111111)); +} + +/** + * @tc.name: DomProgressCreatorTest006 + * @tc.desc: Set style color & cometColor and only effect color. + * @tc.type: FUNC + * @tc.require: AR000F3CAG + * @tc.author: zhongjianfei + */ +HWTEST_F(DomProgressTest, DomProgressCreatorTest006, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string of DomProgress with type circular: + */ + const std::string progressTest006 = "" + "{ " + " \"tag\": \"progress\", " + " \"attr\": [{ " + " \"type\" : \"circular\" " + " }], " + " \"style\": [{ " + " \"color\" : \"#22222222\" " + " }]" + "}"; + /** + * @tc.steps: step2. Create progress node with the string. + * @tc.expected: step2. Progress node and child progress component are created successfully. + */ + auto progress = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(progressTest006); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(progress); + auto loading006 = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(loading006 != nullptr); + + /** + * @tc.steps: step3. Check the percent of created progress node. + * @tc.expected: step3. The ring color and comet color are correct. + */ + Color progressColor = loading006->GetProgressColor(); + EXPECT_TRUE(progressColor == Color(0x22222222)); +} + +/** + * @tc.name: DomProgressCreatorTest007 + * @tc.desc: Set style ringColor & cometColor and only effect to ring and comet. + * @tc.type: FUNC + * @tc.require: AR000F3CAH + * @tc.author: zhongjianfei + */ +HWTEST_F(DomProgressTest, DomProgressCreatorTest007, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string of DomProgress with type circular: + */ + const std::string progressTest007 = "" + "{ " + " \"tag\": \"progress\", " + " \"attr\": [{ " + " \"type\" : \"circular\" " + " }], " + " \"style\": [{ " + " \"color\" : \"#88888888\" " + " }]" + "}"; + /** + * @tc.steps: step2. Create progress node with the string. + * @tc.expected: step2. Progress node and child progress component are created successfully. + */ + auto progress = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(progressTest007); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(progress); + auto loading007 = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(loading007 != nullptr); + + /** + * @tc.steps: step3. Check the percent of created progress node. + * @tc.expected: step3. The ring color and comet color are correct. + */ + Color progressColor = loading007->GetProgressColor(); + EXPECT_TRUE(progressColor == Color(0x88888888)); +} + +/** + * @tc.name: DomProgressCreatorTest008 + * @tc.desc: Set none color style and effect the default color. + * @tc.type: FUNC + * @tc.require: AR000F3CAI + * @tc.author: zhongjianfei + */ +HWTEST_F(DomProgressTest, DomProgressCreatorTest008, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string of DomProgress with type circular: + */ + const std::string progressTest008 = "" + "{ " + " \"tag\": \"progress\", " + " \"attr\": [{ " + " \"type\" : \"circular\" " + " }]" + "}"; + /** + * @tc.steps: step2. Create progress node with the string. + * @tc.expected: step2. Progress node and child progress component are created successfully. + */ + auto progress = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(progressTest008); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(progress); + auto loading008 = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(loading008 != nullptr); + + /** + * @tc.steps: step3. Check the percent of created progress node. + * @tc.expected: step3. The ring color and comet color are correct. + */ + Color progressColor = loading008->GetProgressColor(); + EXPECT_TRUE(progressColor == Color(0xff666666) || progressColor == Color(0x99ffffff)); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/test/unittest/jsfrontend/slider/BUILD.gn b/frameworks/bridge/test/unittest/jsfrontend/slider/BUILD.gn new file mode 100644 index 00000000..da4540c2 --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/slider/BUILD.gn @@ -0,0 +1,56 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/jsframework/slider" + +ohos_unittest("DomSliderTest") { + module_out_path = module_output_path + + sources = [ + "../dom_node_factory.cpp", + "dom_slider_test.cpp", + ] + + configs = [ + ":config_domnode_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_domnode_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":DomSliderTest" ] +} diff --git a/frameworks/bridge/test/unittest/jsfrontend/slider/dom_slider_test.cpp b/frameworks/bridge/test/unittest/jsfrontend/slider/dom_slider_test.cpp new file mode 100644 index 00000000..da5ba8f2 --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/slider/dom_slider_test.cpp @@ -0,0 +1,670 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "core/components/theme/theme_constants.h" +#include "frameworks/bridge/common/dom/dom_slider.h" +#include "frameworks/bridge/test/unittest/jsfrontend/dom_node_factory.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace::Framework { +namespace { + +constexpr double VALUE_DEFAULT = 0.0; +constexpr double MIN_DEFAULT = 0.0; +constexpr double MAX_DEFAULT = 100.0; +constexpr double STEP_DEFAULT = 1.0; +constexpr double PADDING_DEFAULT = 32; +constexpr double TEST_PADDING_LEFT = 20.0; +constexpr double TEST_PADDING_RIGHT = 20.0; +constexpr double TEST_MIN_VALUE = 1.0; +constexpr double TEST_MAX_VALUE = 50.0; +constexpr double TEST_STEP_VALUE = 2.0; +constexpr double TEST_VALUE_VALUE = 10.0; +const std::string TEST_COLOR_VALUE = "#12345678"; +constexpr double TEST_MIN_VALUE_004 = -1.0; +constexpr double TEST_MAX_VALUE_004 = 50.0; +constexpr double TEST_STEP_VALUE_004 = 2.0; +constexpr double TEST_VALUE_VALUE_004 = 10.0; +constexpr double TEST_MIN_VALUE_005 = 50.0; +constexpr double TEST_MAX_VALUE_005 = 60.0; +constexpr double TEST_STEP_VALUE_005 = 2.0; +constexpr double TEST_VALUE_VALUE_005 = 10.0; +constexpr double TEST_MIN_VALUE_006 = 10.0; +constexpr double TEST_MAX_VALUE_006 = 50.0; +constexpr double TEST_STEP_VALUE_006 = 2.0; +constexpr double TEST_VALUE_VALUE_006 = 1.0; +constexpr double TEST_MIN_VALUE_007 = 10.0; +constexpr double TEST_MAX_VALUE_007 = 50.0; +constexpr double TEST_STEP_VALUE_007 = 2.0; +constexpr double TEST_VALUE_VALUE_007 = 60.0; +constexpr double TEST_MIN_VALUE_008 = 10.0; +constexpr double TEST_MAX_VALUE_008 = 50.0; +constexpr double TEST_STEP_VALUE_008 = 1.0; +constexpr double TEST_VALUE_VALUE_008 = 20.0; +constexpr double TEST_MIN_VALUE_009 = 10.0; +constexpr double TEST_MAX_VALUE_009 = 50.0; +constexpr double TEST_STEP_VALUE_009 = 40.0; +constexpr double TEST_VALUE_VALUE_009 = 20.0; +const RefPtr THEME_MANAGER = AceType::MakeRefPtr(); + +} // namespace + +class DomSliderTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; +}; + +void DomSliderTest::SetUpTestCase() {} +void DomSliderTest::TearDownTestCase() {} +void DomSliderTest::SetUp() {} +void DomSliderTest::TearDown() {} + +/** + * @tc.name: DomSliderCreator001 + * @tc.desc: Test slider node and child slider component are created as expected. + * @tc.type: FUNC + * @tc.require: AR000DD67C + * @tc.author: lijun + */ +HWTEST_F(DomSliderTest, DomSliderCreatorTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create slider node with it. + * @tc.expected: step1. Slider node and child slider component are created successfully. + */ + const std::string sliderTestStr = "{ " + " \"tag\": \"slider\", " + " \"attr\": [{ " + " \"min\" : \"1.0\" " + " }, " + " {" + " \"max\" : \"50.0\" " + " }, " + " {" + " \"value\" : \"10.0\" " + " }, " + " {" + " \"step\" : \"2.0\" " + " }], " + " \"style\": [{" + " \"color\" : \"#12345678\" " + " }, " + " {" + " \"selectedColor\" : \"#12345678\" " + " }, " + " {" + " \"paddingLeft\" : \"20\" " + " }, " + " {" + " \"paddingRight\" : \"20\" " + " }] " + "}"; + auto slider = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(sliderTestStr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(slider); + ASSERT_TRUE(boxChild); + auto padding = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(padding); + RefPtr sliderComponent = AceType::DynamicCast(padding->GetChild()); + ASSERT_TRUE(sliderComponent); + + /** + * @tc.steps: step2. check all property matched + * @tc.expected: step2. all property match + */ + auto track = sliderComponent->GetTrack(); + auto block = sliderComponent->GetBlock(); + ASSERT_TRUE(track); + ASSERT_TRUE(block); + EXPECT_TRUE(NearEqual(padding->GetPadding().Left().Value(), TEST_PADDING_LEFT)); + EXPECT_TRUE(NearEqual(padding->GetPadding().Right().Value(), TEST_PADDING_RIGHT)); + EXPECT_TRUE(NearEqual(sliderComponent->GetMinValue(), TEST_MIN_VALUE)); + EXPECT_TRUE(NearEqual(sliderComponent->GetMaxValue(), TEST_MAX_VALUE)); + EXPECT_TRUE(NearEqual(sliderComponent->GetStep(), TEST_STEP_VALUE)); + EXPECT_TRUE(NearEqual(sliderComponent->GetValue(), TEST_VALUE_VALUE)); + EXPECT_EQ(track->GetBackgroundColor(), Color::FromString(TEST_COLOR_VALUE)); + EXPECT_EQ(track->GetSelectColor(), Color::FromString(TEST_COLOR_VALUE)); +} + +/** + * @tc.name: DomSliderCreator002 + * @tc.desc: Test slider node and child slider component are created defaultly. + * @tc.type: FUNC + * @tc.require: AR000DD67C + * @tc.author: lijun + */ +HWTEST_F(DomSliderTest, DomSliderCreatorTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create slider node with it. + * @tc.expected: step1. Slider node and child slider component are created successfully. + */ + const std::string sliderTestStr = "{ " + " \"tag\": \"slider\" " + "}"; + auto slider = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(sliderTestStr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(slider); + ASSERT_TRUE(boxChild); + auto padding = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(padding); + RefPtr sliderComponent = AceType::DynamicCast(padding->GetChild()); + ASSERT_TRUE(sliderComponent); + + /** + * @tc.steps: step2. check all property matched + * @tc.expected: step2. all property match + */ + auto track = sliderComponent->GetTrack(); + auto block = sliderComponent->GetBlock(); + ASSERT_TRUE(track); + ASSERT_TRUE(block); + EXPECT_TRUE(NearEqual(padding->GetPadding().Left().Value(), PADDING_DEFAULT)); + EXPECT_TRUE(NearEqual(padding->GetPadding().Right().Value(), PADDING_DEFAULT)); + EXPECT_TRUE(NearEqual(sliderComponent->GetMinValue(), MIN_DEFAULT)); + EXPECT_TRUE(NearEqual(sliderComponent->GetMaxValue(), MAX_DEFAULT)); + EXPECT_TRUE(NearEqual(sliderComponent->GetStep(), STEP_DEFAULT)); + EXPECT_TRUE(NearEqual(sliderComponent->GetValue(), VALUE_DEFAULT)); + auto themeConstants = THEME_MANAGER->GetThemeConstants(); + ASSERT_NE(themeConstants, nullptr); + EXPECT_EQ(track->GetBackgroundColor(), themeConstants->GetColor(THEME_SLIDER_TRACK_BG)); + EXPECT_EQ(track->GetSelectColor(), themeConstants->GetColor(THEME_SLIDER_TRACK_SELECTED)); +} + +/** + * @tc.name: DomSliderCreator003 + * @tc.desc: Test add event to slider component successfully. + * @tc.type: FUNC + * @tc.require: AR000DD67C + * @tc.author: lijun + */ +HWTEST_F(DomSliderTest, DomSliderCreatorTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create slider node with it. + * @tc.expected: step1. Slider node and child slider component are created successfully. + */ + const std::string sliderTestStr = "{ " + " \"tag\": \"slider\", " + " \"event\": [ \"change\" ] " + "}"; + auto slider = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(sliderTestStr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(slider); + ASSERT_TRUE(boxChild); + auto padding = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(padding); + RefPtr sliderComponent = AceType::DynamicCast(padding->GetChild()); + ASSERT_TRUE(sliderComponent); + + /** + * @tc.steps: step2. Check eventId of created slider component. + * @tc.expected: step2. The eventId value of slider component is as expected. + */ + EXPECT_TRUE(sliderComponent->GetOnMovingEventId() == std::to_string(slider->GetNodeId())); +} + +/** + * @tc.name: DomSliderCreator004 + * @tc.desc: Test slider node and child slider component are created successfully when min < 0. + * @tc.type: FUNC + * @tc.require: AR000DD67C + * @tc.author: lijun + */ +HWTEST_F(DomSliderTest, DomSliderCreatorTest004, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create slider node with it. + * @tc.expected: step1. Slider node and child slider component are created successfully. + */ + const std::string sliderTestStr = "{ " + " \"tag\": \"slider\", " + " \"attr\": [{" + " \"min\" : \"-1\" " + " }, " + " {" + " \"max\" : \"50.0\" " + " }, " + " {" + " \"value\" : \"10.0\" " + " }, " + " {" + " \"step\" : \"2.0\" " + " }] " + "}"; + auto slider = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(sliderTestStr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(slider); + ASSERT_TRUE(boxChild); + auto padding = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(padding); + RefPtr sliderComponent = AceType::DynamicCast(padding->GetChild()); + ASSERT_TRUE(sliderComponent); + + /** + * @tc.steps: step2. check all property matched + * @tc.expected: step2. all property match + */ + auto track = sliderComponent->GetTrack(); + auto block = sliderComponent->GetBlock(); + ASSERT_TRUE(track); + ASSERT_TRUE(block); + EXPECT_TRUE(NearEqual(sliderComponent->GetMinValue(), TEST_MIN_VALUE_004)); + EXPECT_TRUE(NearEqual(sliderComponent->GetMaxValue(), TEST_MAX_VALUE_004)); + EXPECT_TRUE(NearEqual(sliderComponent->GetStep(), TEST_STEP_VALUE_004)); + EXPECT_TRUE(NearEqual(sliderComponent->GetValue(), TEST_VALUE_VALUE_004)); +} + +/** + * @tc.name: DomSliderCreator005 + * @tc.desc: Test slider node and child slider component are created successfully when min > max. + * @tc.type: FUNC + * @tc.require: AR000DD67C + * @tc.author: lijun + */ +HWTEST_F(DomSliderTest, DomSliderCreatorTest005, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create slider node with it. + * @tc.expected: step1. Slider node and child slider component are created successfully. + */ + const std::string sliderTestStr = "{ " + " \"tag\": \"slider\", " + " \"attr\": [{" + " \"min\" : \"60.0\" " + " }, " + " {" + " \"max\" : \"50.0\" " + " }, " + " {" + " \"value\" : \"10.0\" " + " }, " + " {" + " \"step\" : \"2.0\" " + " }] " + "}"; + auto slider = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(sliderTestStr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(slider); + ASSERT_TRUE(boxChild); + auto padding = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(padding); + RefPtr sliderComponent = AceType::DynamicCast(padding->GetChild()); + ASSERT_TRUE(sliderComponent); + + /** + * @tc.steps: step2. check all property matched + * @tc.expected: step2. all property match + */ + auto track = sliderComponent->GetTrack(); + auto block = sliderComponent->GetBlock(); + ASSERT_TRUE(track); + ASSERT_TRUE(block); + EXPECT_TRUE(NearEqual(sliderComponent->GetMinValue(), TEST_MIN_VALUE_005)); + EXPECT_TRUE(NearEqual(sliderComponent->GetMaxValue(), TEST_MAX_VALUE_005)); + EXPECT_TRUE(NearEqual(sliderComponent->GetStep(), TEST_STEP_VALUE_005)); + EXPECT_TRUE(NearEqual(sliderComponent->GetValue(), TEST_VALUE_VALUE_005)); +} + +/** + * @tc.name: DomSliderCreator006 + * @tc.desc: Test slider node and child slider component are created successfully when min > value. + * @tc.type: FUNC + * @tc.require: AR000DD67C + * @tc.author: lijun + */ +HWTEST_F(DomSliderTest, DomSliderCreatorTest006, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create slider node with it. + * @tc.expected: step1. Slider node and child slider component are created successfully. + */ + const std::string sliderTestStr = "{ " + " \"tag\": \"slider\", " + " \"attr\": [{" + " \"min\" : \"10.0\" " + " }, " + " {" + " \"max\" : \"50.0\" " + " }, " + " {" + " \"value\" : \"1.0\" " + " }, " + " {" + " \"step\" : \"2.0\" " + " }] " + "}"; + auto slider = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(sliderTestStr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(slider); + ASSERT_TRUE(boxChild); + auto padding = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(padding); + RefPtr sliderComponent = AceType::DynamicCast(padding->GetChild()); + ASSERT_TRUE(sliderComponent); + + /** + * @tc.steps: step2. check all property matched + * @tc.expected: step2. all property match + */ + auto track = sliderComponent->GetTrack(); + auto block = sliderComponent->GetBlock(); + ASSERT_TRUE(track); + ASSERT_TRUE(block); + EXPECT_TRUE(NearEqual(sliderComponent->GetMinValue(), TEST_MIN_VALUE_006)); + EXPECT_TRUE(NearEqual(sliderComponent->GetMaxValue(), TEST_MAX_VALUE_006)); + EXPECT_TRUE(NearEqual(sliderComponent->GetStep(), TEST_STEP_VALUE_006)); + EXPECT_TRUE(NearEqual(sliderComponent->GetValue(), TEST_VALUE_VALUE_006)); +} + +/** + * @tc.name: DomSliderCreator007 + * @tc.desc: Test slider node and child slider component are created successfully when max < value. + * @tc.type: FUNC + * @tc.require: AR000DD67C + * @tc.author: lijun + */ +HWTEST_F(DomSliderTest, DomSliderCreatorTest007, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create slider node with it. + * @tc.expected: step1. Slider node and child slider component are created successfully. + */ + const std::string sliderTestStr = "{ " + " \"tag\": \"slider\", " + " \"attr\": [{" + " \"min\" : \"10.0\" " + " }, " + " {" + " \"max\" : \"50.0\" " + " }, " + " {" + " \"value\" : \"60.0\" " + " }, " + " {" + " \"step\" : \"2.0\" " + " }] " + "}"; + auto slider = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(sliderTestStr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(slider); + ASSERT_TRUE(boxChild); + auto padding = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(padding); + RefPtr sliderComponent = AceType::DynamicCast(padding->GetChild()); + ASSERT_TRUE(sliderComponent); + + /** + * @tc.steps: step2. check all property matched + * @tc.expected: step2. all property match + */ + auto track = sliderComponent->GetTrack(); + auto block = sliderComponent->GetBlock(); + ASSERT_TRUE(track); + ASSERT_TRUE(block); + EXPECT_TRUE(NearEqual(sliderComponent->GetMinValue(), TEST_MIN_VALUE_007)); + EXPECT_TRUE(NearEqual(sliderComponent->GetMaxValue(), TEST_MAX_VALUE_007)); + EXPECT_TRUE(NearEqual(sliderComponent->GetStep(), TEST_STEP_VALUE_007)); + EXPECT_TRUE(NearEqual(sliderComponent->GetValue(), TEST_VALUE_VALUE_007)); +} + +/** + * @tc.name: DomSliderCreator008 + * @tc.desc: Test slider node and child slider component are created successfully when step < 0. + * @tc.type: FUNC + * @tc.require: AR000DD67C + * @tc.author: lijun + */ +HWTEST_F(DomSliderTest, DomSliderCreatorTest008, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create slider node with it. + * @tc.expected: step1. Slider node and child slider component are created successfully. + */ + const std::string sliderTestStr = "{ " + " \"tag\": \"slider\", " + " \"attr\": [{" + " \"min\" : \"10.0\" " + " }, " + " {" + " \"max\" : \"50.0\" " + " }, " + " {" + " \"value\" : \"20.0\" " + " }, " + " {" + " \"step\" : \"-2.0\" " + " }] " + "}"; + auto slider = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(sliderTestStr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(slider); + ASSERT_TRUE(boxChild); + auto padding = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(padding); + RefPtr sliderComponent = AceType::DynamicCast(padding->GetChild()); + ASSERT_TRUE(sliderComponent); + + /** + * @tc.steps: step2. check all property matched + * @tc.expected: step2. all property match + */ + auto track = sliderComponent->GetTrack(); + auto block = sliderComponent->GetBlock(); + ASSERT_TRUE(track); + ASSERT_TRUE(block); + EXPECT_TRUE(NearEqual(sliderComponent->GetMinValue(), TEST_MIN_VALUE_008)); + EXPECT_TRUE(NearEqual(sliderComponent->GetMaxValue(), TEST_MAX_VALUE_008)); + EXPECT_TRUE(NearEqual(sliderComponent->GetStep(), TEST_STEP_VALUE_008)); + EXPECT_TRUE(NearEqual(sliderComponent->GetValue(), TEST_VALUE_VALUE_008)); +} + +/** + * @tc.name: DomSliderCreator009 + * @tc.desc: Test slider node and child slider component are created successfully when step > max - min. + * @tc.type: FUNC + * @tc.require: AR000DD67C + * @tc.author: lijun + */ +HWTEST_F(DomSliderTest, DomSliderCreatorTest009, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create slider node with it. + * @tc.expected: step1. Slider node and child slider component are created successfully. + */ + const std::string sliderTestStr = "{ " + " \"tag\": \"slider\", " + " \"attr\": [{" + " \"min\" : \"10.0\" " + " }, " + " {" + " \"max\" : \"50.0\" " + " }, " + " {" + " \"value\" : \"20.0\" " + " }, " + " {" + " \"step\" : \"50.0\" " + " }] " + "}"; + auto slider = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(sliderTestStr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(slider); + ASSERT_TRUE(boxChild); + auto padding = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(padding); + RefPtr sliderComponent = AceType::DynamicCast(padding->GetChild()); + ASSERT_TRUE(sliderComponent); + + /** + * @tc.steps: step2. check all property matched + * @tc.expected: step2. all property match + */ + auto track = sliderComponent->GetTrack(); + auto block = sliderComponent->GetBlock(); + ASSERT_TRUE(track); + ASSERT_TRUE(block); + EXPECT_TRUE(NearEqual(sliderComponent->GetMinValue(), TEST_MIN_VALUE_009)); + EXPECT_TRUE(NearEqual(sliderComponent->GetMaxValue(), TEST_MAX_VALUE_009)); + EXPECT_TRUE(NearEqual(sliderComponent->GetStep(), TEST_STEP_VALUE_009)); + EXPECT_TRUE(NearEqual(sliderComponent->GetValue(), TEST_VALUE_VALUE_009)); +} + +/** + * @tc.name: DomSliderCreator010 + * @tc.desc: Test slider node and child slider component are created successfully when step > max - min. + * @tc.type: FUNC + * @tc.require: AR000F3L38 + * @tc.author: jinwuwen + */ +HWTEST_F(DomSliderTest, DomSliderCreatorTest010, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create slider node with it. + * @tc.expected: step1. Slider node and child slider component are created successfully. + */ + const std::string sliderTestStr = "{ " + " \"tag\": \"slider\", " + " \"attr\": [{" + " \"min\" : \"10.0\" " + " }, " + " {" + " \"max\" : \"50.0\" " + " }, " + " {" + " \"value\" : \"20.0\" " + " }, " + " {" + " \"step\" : \"50.0\" " + " }] " + "}"; + auto slider = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(sliderTestStr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(slider); + ASSERT_TRUE(boxChild); + auto padding = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(padding); + RefPtr sliderComponent = AceType::DynamicCast(padding->GetChild()); + ASSERT_TRUE(sliderComponent); + + /** + * @tc.steps: step2. check all property matched + * @tc.expected: step2. all property match + */ + auto track = sliderComponent->GetTrack(); + auto block = sliderComponent->GetBlock(); + ASSERT_TRUE(track); + ASSERT_TRUE(block); + EXPECT_FALSE(sliderComponent->NeedShowSteps()); + EXPECT_FALSE(sliderComponent->NeedShowTips()); + EXPECT_FALSE(sliderComponent->GetSliderMode() == SliderMode::INSET); +} + +/** + * @tc.name: DomSliderCreator011 + * @tc.desc: Test slider node and child slider component are created successfully when step > max - min. + * @tc.type: FUNC + * @tc.require: AR000F3L39 + * @tc.author: jinwuwen + */ +HWTEST_F(DomSliderTest, DomSliderCreatorTest011, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create slider node with it. + * @tc.expected: step1. Slider node and child slider component are created successfully. + */ + const std::string sliderTestStr = "{ " + " \"tag\": \"slider\", " + " \"attr\": [{" + " \"mode\" : \"inset\" " + " }, " + " {" + " \"step\" : \"20\" " + " }, " + " {" + " \"showtips\" : \"true\" " + " }, " + " {" + " \"showsteps\" : \"true\" " + " }] " + "}"; + auto slider = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(sliderTestStr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(slider); + ASSERT_TRUE(boxChild); + auto padding = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(padding); + RefPtr sliderComponent = AceType::DynamicCast(padding->GetChild()); + ASSERT_TRUE(sliderComponent); + + /** + * @tc.steps: step2. check all property matched + * @tc.expected: step2. all property match + */ + auto track = sliderComponent->GetTrack(); + auto block = sliderComponent->GetBlock(); + ASSERT_TRUE(track); + ASSERT_TRUE(block); + EXPECT_TRUE(sliderComponent->NeedShowSteps()); + EXPECT_TRUE(sliderComponent->NeedShowTips()); + EXPECT_TRUE(sliderComponent->GetSliderMode() == SliderMode::INSET); +} + +/** + * @tc.name: DomSliderCreator012 + * @tc.desc: Test slider node and child slider component are created successfully when step > max - min. + * @tc.type: FUNC + * @tc.require: AR000F3L39 + * @tc.author: jinwuwen + */ +HWTEST_F(DomSliderTest, DomSliderCreatorTest012, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create slider node with it. + * @tc.expected: step1. Slider node and child slider component are created successfully. + */ + const std::string sliderTestStr = "{ " + " \"tag\": \"slider\", " + " \"attr\": [{" + " \"mode\" : \"inset\" " + " }, " + " {" + " \"step\" : \"120.0\" " + " }, " + " {" + " \"max\" : \"0\" " + " }, " + " {" + " \"min\" : \"100\" " + " }] " + "}"; + auto slider = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(sliderTestStr); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(slider); + ASSERT_TRUE(boxChild); + auto padding = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(padding); + RefPtr sliderComponent = AceType::DynamicCast(padding->GetChild()); + ASSERT_TRUE(sliderComponent); + + /** + * @tc.steps: step2. check all property matched + * @tc.expected: step2. all property match + */ + auto track = sliderComponent->GetTrack(); + auto block = sliderComponent->GetBlock(); + ASSERT_TRUE(track); + ASSERT_TRUE(block); + EXPECT_EQ(sliderComponent->GetStep(), 100.0); + EXPECT_EQ(sliderComponent->GetMaxValue(), 100.0); + EXPECT_EQ(sliderComponent->GetMinValue(), 0.0); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/test/unittest/jsfrontend/swiper/BUILD.gn b/frameworks/bridge/test/unittest/jsfrontend/swiper/BUILD.gn new file mode 100644 index 00000000..10a182c6 --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/swiper/BUILD.gn @@ -0,0 +1,56 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/jsframework/swiper" + +ohos_unittest("DomSwiperTest") { + module_out_path = module_output_path + + sources = [ + "../dom_node_factory.cpp", + "dom_swiper_test.cpp", + ] + + configs = [ + ":config_domnode_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_domnode_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":DomSwiperTest" ] +} diff --git a/frameworks/bridge/test/unittest/jsfrontend/swiper/dom_swiper_test.cpp b/frameworks/bridge/test/unittest/jsfrontend/swiper/dom_swiper_test.cpp new file mode 100644 index 00000000..2c45c2cd --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/swiper/dom_swiper_test.cpp @@ -0,0 +1,334 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "core/components/common/layout/constants.h" +#include "frameworks/bridge/common/dom/dom_document.h" +#include "frameworks/bridge/common/dom/dom_swiper.h" +#include "frameworks/bridge/test/unittest/jsfrontend/dom_node_factory.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace::Framework { +namespace { + +constexpr uint32_t TEST_INDEX_VALUE = 0; +constexpr double TEST_INTERVAL_VALUE = 2000.0; +constexpr double TEST_DURATION_VALUE = 500.0; +constexpr double TEST_INDICATOR_SIZE = 10.0; +constexpr double TEST_INDICATOR_TOP = 20.0; +constexpr double TEST_INDICATOR_LEFT = 20.0; +constexpr double TEST_INDICATOR_RIGHT = 20.0; +constexpr double TEST_INDICATOR_BOTTOM = 20.0; +const std::string TEST_INDICATOR_COLOR = "#12345678"; +const std::string TEST_INDICATOR_SELECT_COLOR = "#87654321"; +constexpr int32_t TEST_AXIS_VALUE = 0; +constexpr int32_t TEST_CHILDREN_SIZE = 2; +constexpr uint32_t TEST_INDEX_VALUE_004 = 3; +constexpr uint32_t DEFAULT_INDEX_VALUE = 0; +constexpr double DEFAULT_INTERVAL_VALUE = 3000.0; +constexpr int32_t DEFAULT_AXIS_VALUE = 1; + +const std::string SWIPER_TEST_001 = "" + "{ " + " \"tag\": \"swiper\", " + " \"attr\": [{ " + " \"index\" : \"0\" " + " }, " + " {" + " \"duration\" : \"500\" " + " }, " + " {" + " \"loop\" : \"false\" " + " }, " + " {" + " \"autoplay\" : \"true\" " + " }, " + " {" + " \"interval\" : \"2000\" " + " }, " + " {" + " \"vertical\" : \"true\" " + " }, " + " {" + " \"indicator\" : \"true\" " + " }], " + " \"style\": [{ " + " \"indicatorColor\" : \"#12345678\" " + " }, " + " { " + " \"indicatorSelectedColor\" : \"#87654321\" " + " }, " + " {" + " \"indicatorSize\" : \"10\" " + " }, " + " {" + " \"indicatorTop\" : \"20\" " + " }, " + " {" + " \"indicatorLeft\" : \"20\" " + " }, " + " {" + " \"indicatorRight\" : \"20\" " + " }, " + " {" + " \"indicatorBottom\" : \"20\" " + " }]" + "}"; + +const std::string SWIPER_TEST_002 = "" + "{ " + " \"tag\": \"swiper\", " + " \"attr\" : [{" + " \"indicator\" : \"false\" " + " }] " + "}"; + +const std::string SWIPER_TEST_003 = "" + "{ " + " \"tag\": \"swiper\", " + " \"child\": [{ " + " \"tag\":\"text\" " + " }," + " { " + " \"tag\":\"text\" " + " }] " + "}"; + +const std::string SWIPER_TEST_004 = "" + "{ " + " \"tag\": \"swiper\", " + " \"attr\" : [{ " + " \"index\" : \"3\" " + " }], " + " \"child\": [{ " + " \"tag\":\"text\" " + " }," + " { " + " \"tag\":\"text\" " + " }," + " { " + " \"tag\":\"text\" " + " }] " + "}"; + +const std::string SWIPER_TEST_005 = "" + "{ " + " \"tag\": \"swiper\" " + "}"; + +const std::string SWIPER_TEST_006 = "" + "{ " + " \"tag\": \"swiper\", " + " \"event\": [ \"change\" ] " + "}"; + +} // namespace + +class DomSwiperTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); +}; + +void DomSwiperTest::SetUpTestCase() {} +void DomSwiperTest::TearDownTestCase() {} +void DomSwiperTest::SetUp() {} +void DomSwiperTest::TearDown() {} + +/** + * @tc.name: DomSwiperCreatorTest001 + * @tc.desc: Test swiper node and child swiper component are created as expected. + * @tc.type: FUNC + * @tc.require: AR000DD66O + * @tc.author: lijun + */ +HWTEST_F(DomSwiperTest, DomSwiperCreatorTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create swiper node with it. + * @tc.expected: step1. Swiper node and child swiper component are created successfully. + */ + auto swiper = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(SWIPER_TEST_001); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(swiper); + RefPtr swiperComponent = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(swiperComponent != nullptr); + + /** + * @tc.steps: step2. Check styles and attributes of created swiper node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + EXPECT_EQ(swiperComponent->GetIndex(), TEST_INDEX_VALUE); + EXPECT_TRUE(swiperComponent->IsAutoPlay()); + EXPECT_TRUE(NearEqual(swiperComponent->GetAutoPlayInterval(), TEST_INTERVAL_VALUE)); + EXPECT_FALSE(swiperComponent->IsLoop()); + EXPECT_TRUE(NearEqual(swiperComponent->GetDuration(), TEST_DURATION_VALUE)); + auto indicator = swiperComponent->GetIndicator(); + EXPECT_TRUE(indicator); + if (indicator) { + EXPECT_TRUE(NearEqual(indicator->GetSize().Value(), TEST_INDICATOR_SIZE)); + EXPECT_TRUE(NearEqual(indicator->GetTop().Value(), TEST_INDICATOR_TOP)); + EXPECT_TRUE(NearEqual(indicator->GetLeft().Value(), TEST_INDICATOR_LEFT)); + EXPECT_TRUE(NearEqual(indicator->GetBottom().Value(), TEST_INDICATOR_BOTTOM)); + EXPECT_TRUE(NearEqual(indicator->GetRight().Value(), TEST_INDICATOR_RIGHT)); + EXPECT_EQ(indicator->GetColor(), Color::FromString(TEST_INDICATOR_COLOR)); + EXPECT_EQ(indicator->GetSelectedColor(), Color::FromString(TEST_INDICATOR_SELECT_COLOR)); + } + EXPECT_EQ(static_cast(swiperComponent->GetAxis()), TEST_AXIS_VALUE); +} + +/** + * @tc.name: DomSwiperCreatorTest002 + * @tc.desc: Test set indicator attribute to swiper component successfully. + * @tc.type: FUNC + * @tc.require: AR000DD66O + * @tc.author: lijun + */ +HWTEST_F(DomSwiperTest, DomSwiperCreatorTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create swiper node with it. + * @tc.expected: step1. Swiper node and child swiper component are created successfully. + */ + auto swiper = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(SWIPER_TEST_002); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(swiper); + RefPtr swiperComponent = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(swiperComponent != nullptr); + + /** + * @tc.steps: step2. Check indicator value of swiper component. + * @tc.expected: step2. The indicator value of swiper component is as expected. + */ + EXPECT_TRUE(swiperComponent->GetIndicator() == nullptr); +} + +/** + * @tc.name: DomSwiperCreatorTest003 + * @tc.desc: Test append child to swiper component successfully. + * @tc.type: FUNC + * @tc.require: AR000DD66O + * @tc.author: lijun + */ +HWTEST_F(DomSwiperTest, DomSwiperCreatorTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create swiper node with it. + * @tc.expected: step1. Swiper node and child swiper component are created successfully. + */ + auto swiper = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(SWIPER_TEST_003); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(swiper); + RefPtr swiperComponent = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(swiperComponent != nullptr); + + /** + * @tc.steps: step2. Check child number of created swiper component. + * @tc.expected: step2. The child number of swiper component is as expected. + */ + EXPECT_TRUE(swiperComponent->GetChildren().size() == TEST_CHILDREN_SIZE); +} + +/** + * @tc.name: DomSwiperCreatorTest004 + * @tc.desc: Test set index attribute to swiper component successfully. + * @tc.type: FUNC + * @tc.require: AR000DD66O + * @tc.author: lijun + */ +HWTEST_F(DomSwiperTest, DomSwiperCreatorTest004, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string include index attribute, then create swiper node with it. + * @tc.expected: step1. Swiper node and child swiper component are created successfully. + */ + auto swiper = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(SWIPER_TEST_004); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(swiper); + RefPtr swiperComponent = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(swiperComponent != nullptr); + + /** + * @tc.steps: step2. Check index value of created swiper node. + * @tc.expected: step2. The index value of swiper node is as expected. + */ + EXPECT_TRUE(swiperComponent->GetIndex() == TEST_INDEX_VALUE_004); +} + +/** + * @tc.name: DomSwiperCreatorTest005 + * @tc.desc: Test swiper node and swiper component created successfully with empty input of style and attribute. + * @tc.type: FUNC + * @tc.require: AR000DD66O + * @tc.author: lijun + */ +HWTEST_F(DomSwiperTest, DomSwiperCreatorTest005, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string without style and attribute, then create swiper node with it . + * @tc.expected: step1. Swiper node and child swiper component are created successfully. + */ + auto swiper = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(SWIPER_TEST_005); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(swiper); + RefPtr swiperComponent = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(swiperComponent != nullptr); + + /** + * @tc.steps: step2. Check styles and attributes of created swiper node. + * @tc.expected: step2. Swiper node's attrs and styles are initialized with default value. + */ + EXPECT_EQ(swiperComponent->GetIndex(), DEFAULT_INDEX_VALUE); + EXPECT_FALSE(swiperComponent->IsAutoPlay()); + EXPECT_TRUE(NearEqual(swiperComponent->GetAutoPlayInterval(), DEFAULT_INTERVAL_VALUE)); + EXPECT_TRUE(swiperComponent->IsLoop()); + auto indicator = swiperComponent->GetIndicator(); + EXPECT_TRUE(indicator); + if (indicator) { + auto themeManager = AceType::MakeRefPtr(); + RefPtr theme = themeManager->GetTheme(); + EXPECT_TRUE(indicator->GetSize() == theme->GetSize()); + EXPECT_EQ(indicator->GetColor(), theme->GetColor()); + EXPECT_EQ(indicator->GetSelectedColor(), theme->GetSelectedColor()); + } + EXPECT_EQ(static_cast(swiperComponent->GetAxis()), DEFAULT_AXIS_VALUE); +} + +/** + * @tc.name: DomSwiperCreatorTest006 + * @tc.desc: Test add event to swiper component successfully. + * @tc.type: FUNC + * @tc.require: AR000DD66O + * @tc.author: lijun + */ +HWTEST_F(DomSwiperTest, DomSwiperCreatorTest006, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create swiper node with it. + * @tc.expected: step1. Swiper node and child swiper component are created successfully. + */ + auto swiper = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(SWIPER_TEST_006); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(swiper); + RefPtr swiperComponent = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(swiperComponent != nullptr); + + /** + * @tc.steps: step2. Check eventId of created swiper component. + * @tc.expected: step2. The eventId value of swiper component is as expected. + */ + EXPECT_TRUE(swiperComponent->GetChangeEventId() == std::to_string(swiper->GetNodeId())); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/test/unittest/jsfrontend/switch/BUILD.gn b/frameworks/bridge/test/unittest/jsfrontend/switch/BUILD.gn new file mode 100644 index 00000000..4ec76ff9 --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/switch/BUILD.gn @@ -0,0 +1,54 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/jsframework/switch" + +ohos_unittest("DomSwitchTest") { + module_out_path = module_output_path + + sources = [ + "$ace_root/frameworks/bridge/test/unittest/jsfrontend/dom_node_factory.cpp", + "dom_switch_test.cpp", + ] + + configs = [ + ":config_domnode_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_domnode_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + deps = [ ":DomSwitchTest" ] +} diff --git a/frameworks/bridge/test/unittest/jsfrontend/switch/dom_switch_test.cpp b/frameworks/bridge/test/unittest/jsfrontend/switch/dom_switch_test.cpp new file mode 100644 index 00000000..ed5d09e2 --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/switch/dom_switch_test.cpp @@ -0,0 +1,308 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/i18n/localization.h" +#include "core/components/common/layout/constants.h" +#include "frameworks/bridge/common/dom/dom_document.h" +#include "frameworks/bridge/common/dom/dom_switch.h" +#include "frameworks/bridge/test/unittest/jsfrontend/dom_node_factory.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace::Framework { +namespace { + +const std::string TEST_TEXT_ON = "Onn"; +const std::string TEST_TEXT_OFF = "Offf"; +const std::string TEST_TEXT_COLOR_ON = "#00FF00"; +const std::string TEST_TEXT_COLOR_OFF = "#0000FF"; +const std::string TEST_TEXT_FONT_FAMILY = "serif"; +constexpr FontWeight TEST_TEXT_FONT_WEIGHT = FontWeight::W400; +constexpr FontStyle TEST_TEXT_FONT_STYLE = FontStyle::NORMAL; +constexpr TextDecoration TEST_TEXT_DECORATION = TextDecoration::NONE; +const double TEST_TEXT_PADDING = 12; +constexpr double TEST_TEXT_FONT_SIZE = 30.0; +constexpr double TEST_TEXT_LETTER_SPACING = 10.0; +const std::string DEFAULT_TEXT_ON = "On"; +const std::string DEFAULT_TEXT_OFF = "Off"; +const std::string DEFAULT_TEXT_COLOR_ON = "#000000"; +const std::string DEFAULT_TEXT_COLOR_OFF = "#000000"; +constexpr FontWeight DEFAULT_TEXT_FONT_WEIGHT = FontWeight::NORMAL; +constexpr FontStyle DEFAULT_TEXT_FONT_STYLE = FontStyle::NORMAL; +constexpr TextDecoration DEFAULT_TEXT_DECORATION = TextDecoration::NONE; +const double DEFAULT_TEXT_PADDING = 0.0; +constexpr double DEFAULT_TEXT_FONT_SIZE = 14.0; +constexpr double INVALID_TEXT_FONT_SIZE = 0.0; +constexpr double DEFAULT_TEXT_LETTER_SPACING = 0.0; +const std::string TEXT_SWITCH_JSON = "{ " + " \"tag\": \"switch\", " + " \"attr\": [{ " + " \"texton\" : \"Onn\" " + " }, " + " { " + " \"textoff\" : \"Offf\" " + " }, " + " { " + " \"showtext\" : \"true\" " + " }], " + " \"style\": [{ " + " \"fontSize\":\"30.0\" " + " }, " + " { " + " \"textPadding\":\"12.0\" " + " }, " + " { " + " \"fontWeight\":\"400\" " + " }, " + " { " + " \"textonColor\":\"#00ff00\" " + " }, " + " { " + " \"textoffColor\":\"#0000ff\" " + " }, " + " { " + " \"fontStyle\":\"normal\" " + " }, " + " { " + " \"textDecoration\":\"none\" " + " }, " + " { " + " \"letterSpacing\":\"10.0\" " + " }, " + " { " + " \"fontFamily\":\"serif\" " + " }] " + "} "; +const std::string INVALID_TEXT_ATTR_SWITCH_JSON = "{ " + " \"tag\": \"switch\", " + " \"attr\": [{ " + " \"showtext\" : \"1111\" " + " }], " + " \"style\": [{ " + " \"fontSize\":\"abcd\" " + " }, " + " { " + " \"textPadding\":\"abcd\" " + " }, " + " { " + " \"fontWeight\":\"abc\" " + " }, " + " { " + " \"textonColor\":\"abcd\" " + " }, " + " { " + " \"textoffColor\":\"#abcd\" " + " }, " + " { " + " \"fontStyle\":\"abcd\" " + " }, " + " { " + " \"textDecoration\":\"abcd\" " + " }, " + " { " + " \"letterSpacing\":\"abcd\" " + " }] " + "} "; +} // namespace + +class DomSwitchTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); +}; + +void DomSwitchTest::SetUpTestCase() {} +void DomSwitchTest::TearDownTestCase() {} +void DomSwitchTest::SetUp() {} +void DomSwitchTest::TearDown() {} + +/** + * @tc.name: DomSwitchCreatorTest001 + * @tc.desc: Test switch node and child switch component are created as expected. + * @tc.type: FUNC + * @tc.require: AR000DD66O + */ +HWTEST_F(DomSwitchTest, DomSwitchCreatorTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with right fields, then create switch node with it. + * @tc.expected: step1. Switch node and switch component are created successfully. + */ + std::string switchDsl = "{ " + " \"tag\": \"switch\", " + " \"attr\": [{ " + " \"checked\" : \"true\" " + " }, " + " { " + " \"disabled\" : \"true\" " + " }], " + " \"event\": [ \"change\" ] " + "} "; + Localization::GetInstance()->SetLocale("en", "US", "", "", "en-US"); + auto domSwitch = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(switchDsl); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(domSwitch); + RefPtr switchComponent = AceType::DynamicCast(boxChild->GetChild()); + EXPECT_TRUE(switchComponent); + + /** + * @tc.steps: step2. Check styles and attributes of created switch node. + * @tc.expected: step2. The styles and attributes are as expected. + */ + EXPECT_TRUE(switchComponent->GetValue()); + EXPECT_TRUE(switchComponent->IsDisabled()); + EXPECT_TRUE(switchComponent->GetChangeEvent() == std::to_string(domSwitch->GetNodeId())); +} + +/** + * @tc.name: DomSwitchCreatorTest002 + * @tc.desc: Test switch node and switch component created successfully with empty input of style and attribute. + * @tc.type: FUNC + * @tc.require: AR000DD66O + */ +HWTEST_F(DomSwitchTest, DomSwitchCreatorTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string without style and attribute, then create switch node with it . + * @tc.expected: step1. Switch node and child switch component are created successfully. + */ + std::string switchDsl = "{ \"tag\": \"switch\" }"; + Localization::GetInstance()->SetLocale("en", "US", "", "", "en-US"); + auto domSwitch = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(switchDsl); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(domSwitch); + RefPtr switchComponent = AceType::DynamicCast(boxChild->GetChild()); + EXPECT_TRUE(switchComponent); + + /** + * @tc.steps: step2. Check styles and attributes of created switch node. + * @tc.expected: step2. Switch node's attrs and styles are initialized with default value. + */ + EXPECT_FALSE(switchComponent->GetValue()); + EXPECT_FALSE(switchComponent->IsDisabled()); +} + +/** + * @tc.name: CreateTextSwitchFromDsl001 + * @tc.desc: Test switch node and switch component created successfully with text styles and attributes set. + * @tc.type: FUNC + * @tc.require: AR000DQ1R7 + */ +HWTEST_F(DomSwitchTest, CreateTextSwitchFromDsl001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string text styles and attributes set, then create switch node with it . + * @tc.expected: step1. Switch node and child switch component are created with correct text attributes and styles. + */ + Localization::GetInstance()->SetLocale("en", "US", "", "", "en-US"); + auto domSwitch = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(TEXT_SWITCH_JSON); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(domSwitch); + RefPtr switchComponent = AceType::DynamicCast(boxChild->GetChild()); + EXPECT_TRUE(switchComponent); + + /** + * @tc.steps: step2. Check styles and attributes of created switch node. + * @tc.expected: step2. Switch node's attrs and styles are as expected. + */ + EXPECT_TRUE(switchComponent->GetShowText()); + EXPECT_EQ(switchComponent->GetTextOn(), TEST_TEXT_ON); + EXPECT_EQ(switchComponent->GetTextOff(), TEST_TEXT_OFF); + EXPECT_EQ(switchComponent->GetTextPadding().Value(), TEST_TEXT_PADDING); + EXPECT_TRUE(switchComponent->GetTextStyle().GetFontWeight() == TEST_TEXT_FONT_WEIGHT); + EXPECT_TRUE(switchComponent->GetTextStyle().GetFontStyle() == TEST_TEXT_FONT_STYLE); + EXPECT_TRUE(switchComponent->GetTextStyle().GetTextDecoration() == TEST_TEXT_DECORATION); + EXPECT_EQ(switchComponent->GetTextStyle().GetFontSize().Value(), TEST_TEXT_FONT_SIZE); + EXPECT_EQ(switchComponent->GetTextColorOn(), Color::FromString(TEST_TEXT_COLOR_ON)); + EXPECT_EQ(switchComponent->GetTextColorOff(), Color::FromString(TEST_TEXT_COLOR_OFF)); + EXPECT_EQ(switchComponent->GetTextStyle().GetLetterSpacing(), TEST_TEXT_LETTER_SPACING); + EXPECT_EQ(switchComponent->GetTextStyle().GetFontFamilies()[0], TEST_TEXT_FONT_FAMILY); +} + +/** + * @tc.name: CreateTextSwitchFromDsl002 + * @tc.desc: Test switch node and switch component created correctly with no text styles and attributes set. + * @tc.type: FUNC + * @tc.require: AR000DQ1R7 + */ +HWTEST_F(DomSwitchTest, CreateTextSwitchFromDsl002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with no text styles and attributes set, then create switch node with it . + * @tc.expected: step1. Switch node and child switch component are created with default text attributes and styles. + */ + std::string defaultTextSwitch = "{ \"tag\": \"switch\" }"; + Localization::GetInstance()->SetLocale("en", "US", "", "", "en-US"); + auto domSwitch = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(defaultTextSwitch); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(domSwitch); + RefPtr switchComponent = AceType::DynamicCast(boxChild->GetChild()); + EXPECT_TRUE(switchComponent); + + /** + * @tc.steps: step2. Check styles and attributes of created switch node. + * @tc.expected: step2. Switch node's attrs and styles are as default. + */ + EXPECT_TRUE(!switchComponent->GetShowText()); + EXPECT_EQ(switchComponent->GetTextOn(), DEFAULT_TEXT_ON); + EXPECT_EQ(switchComponent->GetTextOff(), DEFAULT_TEXT_OFF); + EXPECT_EQ(switchComponent->GetTextPadding().Value(), DEFAULT_TEXT_PADDING); + EXPECT_TRUE(switchComponent->GetTextStyle().GetFontWeight() == DEFAULT_TEXT_FONT_WEIGHT); + EXPECT_TRUE(switchComponent->GetTextStyle().GetFontStyle() == DEFAULT_TEXT_FONT_STYLE); + EXPECT_TRUE(switchComponent->GetTextStyle().GetTextDecoration() == DEFAULT_TEXT_DECORATION); + EXPECT_EQ(switchComponent->GetTextStyle().GetFontSize().Value(), DEFAULT_TEXT_FONT_SIZE); + EXPECT_EQ(switchComponent->GetTextColorOn(), Color::FromString(DEFAULT_TEXT_COLOR_ON)); + EXPECT_EQ(switchComponent->GetTextColorOff(), Color::FromString(DEFAULT_TEXT_COLOR_OFF)); + EXPECT_EQ(switchComponent->GetTextStyle().GetLetterSpacing(), DEFAULT_TEXT_LETTER_SPACING); + EXPECT_TRUE(switchComponent->GetTextStyle().GetFontFamilies().empty()); +} + +/** + * @tc.name: CreateTextSwitchFromDsl003 + * @tc.desc: Test switch node and switch component created correctly with invalid text styles and attributes set. + * @tc.type: FUNC + * @tc.require: AR000DQ1R7 + */ +HWTEST_F(DomSwitchTest, CreateTextSwitchFromDsl003, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string with invalid text styles and attributes set, then create switch node with it . + * @tc.expected: step1. Switch node and child switch component are created with default text attributes and styles. + */ + Localization::GetInstance()->SetLocale("en", "US", "", "", "en-US"); + auto domSwitch = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(INVALID_TEXT_ATTR_SWITCH_JSON); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(domSwitch); + RefPtr switchComponent = AceType::DynamicCast(boxChild->GetChild()); + EXPECT_TRUE(switchComponent); + + /** + * @tc.steps: step2. Check styles and attributes of created switch node. + * @tc.expected: step2. Switch node's attrs and styles are as default. + */ + EXPECT_TRUE(!switchComponent->GetShowText()); + EXPECT_EQ(switchComponent->GetTextOn(), DEFAULT_TEXT_ON); + EXPECT_EQ(switchComponent->GetTextOff(), DEFAULT_TEXT_OFF); + EXPECT_EQ(switchComponent->GetTextPadding().Value(), DEFAULT_TEXT_PADDING); + EXPECT_TRUE(switchComponent->GetTextStyle().GetFontWeight() == DEFAULT_TEXT_FONT_WEIGHT); + EXPECT_TRUE(switchComponent->GetTextStyle().GetFontStyle() == DEFAULT_TEXT_FONT_STYLE); + EXPECT_TRUE(switchComponent->GetTextStyle().GetTextDecoration() == DEFAULT_TEXT_DECORATION); + EXPECT_EQ(switchComponent->GetTextStyle().GetFontSize().Value(), INVALID_TEXT_FONT_SIZE); + EXPECT_EQ(switchComponent->GetTextColorOn(), Color::FromString(DEFAULT_TEXT_COLOR_ON)); + EXPECT_EQ(switchComponent->GetTextColorOff(), Color::FromString(DEFAULT_TEXT_COLOR_OFF)); + EXPECT_EQ(switchComponent->GetTextStyle().GetLetterSpacing(), DEFAULT_TEXT_LETTER_SPACING); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/bridge/test/unittest/jsfrontend/utils/BUILD.gn b/frameworks/bridge/test/unittest/jsfrontend/utils/BUILD.gn new file mode 100644 index 00000000..e5726d1f --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/utils/BUILD.gn @@ -0,0 +1,51 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/jsframework/utils" + +ohos_unittest("JsUtilsTest") { + module_out_path = module_output_path + + sources = [ "js_utils_test.cpp" ] + + configs = [ + ":config_js_utils_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_js_utils_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + deps = [ ":JsUtilsTest" ] +} diff --git a/frameworks/bridge/test/unittest/jsfrontend/utils/js_utils_test.cpp b/frameworks/bridge/test/unittest/jsfrontend/utils/js_utils_test.cpp new file mode 100644 index 00000000..4969f93d --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/utils/js_utils_test.cpp @@ -0,0 +1,127 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "core/components/theme/theme_manager.h" +#include "core/components/theme/theme_utils.h" +#include "frameworks/bridge/common/utils/utils.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace::Framework { +namespace { + +const std::string DIMENSION_ID_NORMAL = "\"@id500\""; +const std::string DIMENSION_ID_NOT_FOUND = "\"@id9999\""; +const std::string DIMENSION_ID_ERROR[] = { "", "\"@id\"", "\"@idabc\"", "\"@idid003\"", "\"@003\"", + "\"@id001@id003\"" }; +const std::string OHOS_THEME_ID_NORMAL = "@ohos_id_500"; + +} // namespace + +class JsUtilsTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; +}; + +void JsUtilsTest::SetUpTestCase() {} +void JsUtilsTest::TearDownTestCase() {} +void JsUtilsTest::SetUp() {} +void JsUtilsTest::TearDown() {} + +/** + * @tc.name: ParseDimensionId001 + * @tc.desc: Test parse string contains platform style id reference. + * @tc.type: FUNC + * @tc.require: AR000DVLH5 + */ +HWTEST_F(JsUtilsTest, ParseDimensionId001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Parse dimension string contains platform id reference. + * @tc.expected: step1. Dimension parse correctly, equal with value in ThemeConstants. + */ + RefPtr themeManager = AceType::MakeRefPtr(); + auto themeConstants = themeManager->GetThemeConstants(); + ASSERT_NE(themeConstants, nullptr); + const auto& parseResult = ThemeUtils::ParseThemeIdReference(DIMENSION_ID_NORMAL); + Dimension dimension = themeConstants->GetDimension(parseResult.id); + ASSERT_EQ(dimension, themeConstants->GetDimension(THEME_OHOS_TEXT_SIZE_HEADLINE1)); +} + +/** + * @tc.name: ParseDimensionId002 + * @tc.desc: Test parse string contains platform style id reference, id not found. + * @tc.type: FUNC + * @tc.require: AR000DVLH5 + */ +HWTEST_F(JsUtilsTest, ParseDimensionId002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Parse dimension string contains platform id reference, id not found. + * @tc.expected: step1. Dimension parse get dimension 0dp. + */ + RefPtr themeManager = AceType::MakeRefPtr(); + auto themeConstants = themeManager->GetThemeConstants(); + ASSERT_NE(themeConstants, nullptr); + const auto& parseResult = ThemeUtils::ParseThemeIdReference(DIMENSION_ID_NOT_FOUND); + Dimension dimension = themeConstants->GetDimension(parseResult.id); + ASSERT_EQ(dimension, Dimension(0.0, DimensionUnit::VP)); +} + +/** + * @tc.name: ParseDimensionId003 + * @tc.desc: Test parse string contains platform style id which format is error. + * @tc.type: FUNC + * @tc.require: AR000DVLH5 + */ +HWTEST_F(JsUtilsTest, ParseDimensionId003, TestSize.Level1) +{ + /** + * @tc.steps: step1. Parse dimension string contains id which format is error. + * @tc.expected: step1. Dimension parse result equal with 0px. + */ + for (size_t i = 0; i < std::size(DIMENSION_ID_ERROR); i++) { + Dimension dimension = StringToDimension(DIMENSION_ID_ERROR[i]); + ASSERT_EQ(dimension, Dimension(0.0, DimensionUnit::PX)); + } +} + +/** + * @tc.name: ParseDimensionId004 + * @tc.desc: Test parse string contains platform style id reference, id not found. + * @tc.type: FUNC + * @tc.require: AR000FDGO4 + */ +HWTEST_F(JsUtilsTest, ParseDimensionId004, TestSize.Level1) +{ + /** + * @tc.steps: step1. Parse dimension string contains platform id reference, id not found. + * @tc.expected: step1. Dimension parse get dimension 0dp. + */ + RefPtr themeManager = AceType::MakeRefPtr(); + auto themeConstants = themeManager->GetThemeConstants(); + ASSERT_NE(themeConstants, nullptr); + const auto& parseResult = ThemeUtils::ParseThemeIdReference(OHOS_THEME_ID_NORMAL); + uint32_t correctId = 117441012; + ASSERT_EQ(parseResult.id, correctId); +} + +} // namespace OHOS::Ace::Framework \ No newline at end of file diff --git a/frameworks/bridge/test/unittest/jsfrontend/video/BUILD.gn b/frameworks/bridge/test/unittest/jsfrontend/video/BUILD.gn new file mode 100644 index 00000000..d1c6b9e6 --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/video/BUILD.gn @@ -0,0 +1,56 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/jsframework/video" + +ohos_unittest("DomVideoTest") { + module_out_path = module_output_path + + sources = [ + "../dom_node_factory.cpp", + "dom_video_test.cpp", + ] + + configs = [ + ":config_domnode_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_domnode_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":DomVideoTest" ] +} diff --git a/frameworks/bridge/test/unittest/jsfrontend/video/dom_video_test.cpp b/frameworks/bridge/test/unittest/jsfrontend/video/dom_video_test.cpp new file mode 100644 index 00000000..c6869c9f --- /dev/null +++ b/frameworks/bridge/test/unittest/jsfrontend/video/dom_video_test.cpp @@ -0,0 +1,225 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "core/components/common/layout/constants.h" +#include "frameworks/bridge/common/dom/dom_document.h" +#include "frameworks/bridge/common/dom/dom_video.h" +#include "frameworks/bridge/test/unittest/jsfrontend/dom_node_factory.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace::Framework { + +class DomVideoTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; +}; + +void DomVideoTest::SetUpTestCase() {} +void DomVideoTest::TearDownTestCase() {} +void DomVideoTest::SetUp() {} +void DomVideoTest::TearDown() {} + +/** + * @tc.name: DomVideoCreatorTest001 + * @tc.desc: Test create video node successfully and videocomponent create as desire. + * @tc.type: FUNC + * @tc.require: AR000DD67I + * @tc.author: hesu + */ +HWTEST_F(DomVideoTest, DomVideoCreatorTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string of DomVideo with all attributes and style. + */ + const std::string videoTest001 = "{ " + " \"tag\": \"video\", " + " \"attr\": [{ " + " \"muted\" : \"true\" " + " }, " + " { " + " \"src\" : \"/1.mp4\" " + " }, " + " { " + " \"autoplay\" : \"true\" " + " }, " + " { " + " \"poster\" : \"/1.png\" " + " }, " + " { " + " \"controls\" : \"false\" " + " }], " + " \"style\": [{ " + " \"objectFit\" : \"cover \" " + " }]" + "}"; + /** + * @tc.steps: step2. Create video node with the string. + * @tc.expected: step2. Video node and child video component are created successfully. + */ + auto video = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(videoTest001); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(video); + RefPtr videoComponent = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(videoComponent != nullptr); + + /** + * @tc.steps: step3. Check the style and attributes of created video node. + * @tc.expected: step3. The style and attributes are as expected. + */ + EXPECT_TRUE(videoComponent->GetSrc() == "/1.mp4"); + EXPECT_TRUE(videoComponent->GetPoster() == "/1.png"); + EXPECT_TRUE(videoComponent->IsMute()); + EXPECT_TRUE(videoComponent->IsAutoPlay()); + EXPECT_TRUE(!videoComponent->NeedControls()); +} + +/** + * @tc.name: DomVideoCreatorTest002 + * @tc.desc: Test the VideoComponent initialized by default value. + * @tc.type: FUNC + * @tc.require: AR000DD67I + * @tc.author: hesu + */ +HWTEST_F(DomVideoTest, DomVideoCreatorTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string of DomVideo with necessary parameters. + */ + const std::string videoTest002 = "{ " + " \"tag\": \"video\", " + " \"attr\": [{ " + " \"src\" : \"/1.mp4\" " + " }] " + "}"; + /** + * @tc.steps: step2. Create video node with the string. + * @tc.expected: step2. Video node and child video component are created successfully. + */ + auto video = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(videoTest002); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(video); + RefPtr videoComponent = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(videoComponent != nullptr); + + /** + * @tc.steps: step3. Check the style and attributes of created video node. + * @tc.expected: step3. The style and attributes are as expected. + */ + EXPECT_TRUE(videoComponent->GetSrc() == "/1.mp4"); + EXPECT_TRUE(videoComponent->GetPoster().empty()); + EXPECT_TRUE(!videoComponent->IsMute()); + EXPECT_TRUE(!videoComponent->IsAutoPlay()); + EXPECT_TRUE(videoComponent->NeedControls()); +} + +/** + * @tc.name: DomVideoCreatorTest003 + * @tc.desc: Test value validation. If src is invalid, create component failed. + * @tc.type: FUNC + * @tc.require: AR000DD67I + * @tc.author: hesu + */ +HWTEST_F(DomVideoTest, DomVideoCreatorTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string of DomVideo without src attributes. + */ + const std::string videoTest003 = "{ " + " \"tag\": \"video\", " + " \"attr\": [{ " + " \"muted\" : \"true\" " + " }, " + " { " + " \"autoplay\" : \"true\" " + " }, " + " { " + " \"poster\" : \"/1.png\" " + " }, " + " { " + " \"controls\" : \"false\" " + " }], " + " \"style\": [{ " + " \"objectFit\" : \"cover \" " + " }]" + "}"; + /** + * @tc.steps: step2. Create video node with the string. + * @tc.expected: step2. Video node created successfully, but child is nullptr. + */ + auto video = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(videoTest003); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(video); + ASSERT_TRUE(boxChild->GetChild() == nullptr); +} + +/** + * @tc.name: DomVideoCreatorTest004 + * @tc.desc: Test add event to Video component. + * @tc.type: FUNC + * @tc.require: AR000DD67I + * @tc.author: hesu + */ +HWTEST_F(DomVideoTest, DomVideoCreatorTest004, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct string of DomVideo with all events. + */ + const std::string videoTest004 = "{ " + " \"tag\": \"video\", " + " \"attr\": [{ " + " \"src\" : \"/1.mp4\" " + " }], " + " \"event\": [ " + " \"prepared\", " + " \"start\", " + " \"pause\", " + " \"finish\", " + " \"error\", " + " \"seeking\", " + " \"seeked\", " + " \"timeupdate\", " + " \"fullscreenchange\" " + " ] " + "}"; + + /** + * @tc.steps: step2. Create video node with the string. + * @tc.expected: step2. Progress node and child video component are created successfully. + */ + auto video = DOMNodeFactory::GetInstance().CreateDOMNodeFromDsl(videoTest004); + auto boxChild = DOMNodeFactory::GetInstance().GetBoxChildComponent(video); + RefPtr videoComponent = AceType::DynamicCast(boxChild->GetChild()); + ASSERT_TRUE(videoComponent != nullptr); + + /** + * @tc.steps: step3. Check events of created video node. + * @tc.expected: step3. The events are as expected. + */ + ASSERT_TRUE(videoComponent->GetPreparedEventId() == std::to_string(video->GetNodeId())); + ASSERT_TRUE(videoComponent->GetStartEventId() == std::to_string(video->GetNodeId())); + ASSERT_TRUE(videoComponent->GetPauseEventId() == std::to_string(video->GetNodeId())); + ASSERT_TRUE(videoComponent->GetFinishEventId() == std::to_string(video->GetNodeId())); + ASSERT_TRUE(videoComponent->GetErrorEventId() == std::to_string(video->GetNodeId())); + ASSERT_TRUE(videoComponent->GetSeekingEventId() == std::to_string(video->GetNodeId())); + ASSERT_TRUE(videoComponent->GetSeekedEventId() == std::to_string(video->GetNodeId())); + ASSERT_TRUE(videoComponent->GetTimeUpdateEventId() == std::to_string(video->GetNodeId())); + ASSERT_TRUE(videoComponent->GetFullscreenChangeEventId() == std::to_string(video->GetNodeId())); +} + +} // namespace OHOS::Ace::Framework diff --git a/frameworks/core/BUILD.gn b/frameworks/core/BUILD.gn new file mode 100644 index 00000000..6fd82075 --- /dev/null +++ b/frameworks/core/BUILD.gn @@ -0,0 +1,246 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +# build core sources +template("ace_core_source_set") { + # get is_ohos_platform + forward_variables_from(invoker, "*") + + ohos_source_set(target_name) { + defines += invoker.defines + + # add common source file needed by all product platform here + sources = [ + # animation + "animation/animator.cpp", + "animation/anticipate_curve.cpp", + "animation/bilateral_spring_adapter.cpp", + "animation/bilateral_spring_node.cpp", + "animation/card_transition_controller.cpp", + "animation/cubic_curve.cpp", + "animation/curves.cpp", + "animation/friction_motion.cpp", + "animation/scheduler.cpp", + "animation/scroll_motion.cpp", + "animation/shared_transition_controller.cpp", + "animation/shared_transition_effect.cpp", + "animation/simple_spring_adapter.cpp", + "animation/simple_spring_chain.cpp", + "animation/simple_spring_node.cpp", + "animation/spring_animation.cpp", + "animation/spring_model.cpp", + "animation/spring_motion.cpp", + "animation/svg_animate.cpp", + + # common + "common/ace_application_info.cpp", + "common/ace_engine.cpp", + "common/clipboard/clipboard_proxy.cpp", + "common/event_manager.cpp", + "common/focus_animation_manager.cpp", + "common/font_loader.cpp", + "common/font_manager.cpp", + "common/platform_bridge.cpp", + "common/text_field_manager.cpp", + "common/vibrator/vibrator_proxy.cpp", + "common/watch_dog.cpp", + "common/window.cpp", + + # gestures + "gestures/click_recognizer.cpp", + "gestures/drag_recognizer.cpp", + "gestures/gesture_recognizer.cpp", + "gestures/gesture_referee.cpp", + "gestures/long_press_recognizer.cpp", + "gestures/press_recognizer.cpp", + "gestures/raw_recognizer.cpp", + "gestures/swipe_recognizer.cpp", + "gestures/velocity_tracker.cpp", + + # event + "event/back_end_event_manager.cpp", + "event/key_event.cpp", + "event/key_event_recognizer.cpp", + "event/mouse_raw_recognizer.cpp", + + # focus + "focus/focus_node.cpp", + + # image + "image/animated_image_player.cpp", + "image/flutter_image_cache.cpp", + "image/image_cache.cpp", + "image/image_provider.cpp", + + # textfield + "common/ime/text_editing_value.cpp", + "common/ime/text_input_action.cpp", + "common/ime/text_input_configuration.cpp", + "common/ime/text_input_connection.cpp", + "common/ime/text_input_formatter.cpp", + "common/ime/text_input_proxy.cpp", + "common/ime/text_input_type.cpp", + ] + + # add sources needed by phone and TV. wearable like watch do not need them + if (!is_wearable_product) { + sources += [ + "event/multimodal/multimodal_manager.cpp", + "event/multimodal/multimodal_scene.cpp", + ] + } + + configs = [ + "$ace_root:ace_config", + "$flutter_root:flutter_config", + "$flutter_root:icu_config_$platform", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_$platform", + "$flutter_root:ace_skia_$platform", + "pipeline:ace_core_pipeline_$platform", + ] + + deps += [ + "$ace_root/frameworks/core/components/align:ace_core_components_align_$platform", + "$ace_root/frameworks/core/components/arc:ace_core_components_arc_$platform", + "$ace_root/frameworks/core/components/badge:ace_core_components_badge_$platform", + "$ace_root/frameworks/core/components/box:ace_core_components_box_$platform", + "$ace_root/frameworks/core/components/bubble:ace_core_components_bubble_$platform", + "$ace_root/frameworks/core/components/button:ace_core_components_button_$platform", + "$ace_root/frameworks/core/components/calendar:ace_core_components_calendar_$platform", + "$ace_root/frameworks/core/components/chart:ace_core_components_chart_$platform", + "$ace_root/frameworks/core/components/checkable:ace_core_components_checkable_$platform", + "$ace_root/frameworks/core/components/clip:ace_core_components_clip_$platform", + "$ace_root/frameworks/core/components/column_split:ace_core_components_column_split_$platform", + "$ace_root/frameworks/core/components/common:ace_core_components_common_$platform", + "$ace_root/frameworks/core/components/custom_dialog:ace_core_components_custom_dialog_$platform", + "$ace_root/frameworks/core/components/custom_paint:ace_core_components_custom_paint_$platform", + "$ace_root/frameworks/core/components/data_panel:ace_core_components_data_panel_$platform", + "$ace_root/frameworks/core/components/dialog:ace_core_components_dialog_$platform", + "$ace_root/frameworks/core/components/dialog_modal:ace_core_components_dialog_modal_$platform", + "$ace_root/frameworks/core/components/dialog_tween:ace_core_components_dialog_tween_$platform", + "$ace_root/frameworks/core/components/display:ace_core_components_display_$platform", + "$ace_root/frameworks/core/components/divider:ace_core_components_divider_$platform", + "$ace_root/frameworks/core/components/drag_bar:ace_core_components_drag_bar_$platform", + "$ace_root/frameworks/core/components/drop_filter:ace_core_components_drop_filter_$platform", + "$ace_root/frameworks/core/components/flex:ace_core_components_flex_$platform", + "$ace_root/frameworks/core/components/focus_animation:ace_core_components_focus_animation_$platform", + "$ace_root/frameworks/core/components/focus_collaboration:ace_core_components_focus_collaboration_$platform", + "$ace_root/frameworks/core/components/focusable:ace_core_components_focusable_$platform", + "$ace_root/frameworks/core/components/font:ace_core_components_font_$platform", + "$ace_root/frameworks/core/components/gesture_listener:ace_core_components_gesture_listener_$platform", + "$ace_root/frameworks/core/components/grid:ace_core_components_grid_$platform", + "$ace_root/frameworks/core/components/grid_layout:ace_core_components_grid_layout_$platform", + "$ace_root/frameworks/core/components/image:ace_core_components_image_$platform", + "$ace_root/frameworks/core/components/indexer:ace_core_components_indexer_$platform", + "$ace_root/frameworks/core/components/list:ace_core_components_list_$platform", + "$ace_root/frameworks/core/components/marquee:ace_core_components_marquee_$platform", + "$ace_root/frameworks/core/components/menu:ace_core_components_menu_$platform", + "$ace_root/frameworks/core/components/mouse_listener:ace_core_components_mouse_listener_$platform", + "$ace_root/frameworks/core/components/navigation_bar:ace_core_components_navigation_bar_$platform", + "$ace_root/frameworks/core/components/navigator:ace_core_components_navigator_$platform", + "$ace_root/frameworks/core/components/option:ace_core_components_option_$platform", + "$ace_root/frameworks/core/components/overlay:ace_core_components_overlay_$platform", + "$ace_root/frameworks/core/components/padding:ace_core_components_padding_$platform", + "$ace_root/frameworks/core/components/page:ace_core_components_page_$platform", + "$ace_root/frameworks/core/components/page_transition:ace_core_components_page_transition_$platform", + "$ace_root/frameworks/core/components/panel:ace_core_components_panel_$platform", + "$ace_root/frameworks/core/components/picker:ace_core_components_picker_$platform", + "$ace_root/frameworks/core/components/positioned:ace_core_components_positioned_$platform", + "$ace_root/frameworks/core/components/progress:ace_core_components_progress_$platform", + "$ace_root/frameworks/core/components/proxy:ace_core_components_proxy_$platform", + "$ace_root/frameworks/core/components/refresh:ace_core_components_refresh_$platform", + "$ace_root/frameworks/core/components/root:ace_core_components_root_$platform", + "$ace_root/frameworks/core/components/scroll:ace_core_components_scroll_$platform", + "$ace_root/frameworks/core/components/search:ace_core_components_search_$platform", + "$ace_root/frameworks/core/components/select_popup:ace_core_components_select_popup_$platform", + "$ace_root/frameworks/core/components/semi_modal:ace_core_components_semi_modal_$platform", + "$ace_root/frameworks/core/components/shadow:ace_core_components_shadow_$platform", + "$ace_root/frameworks/core/components/shared_transition:ace_core_components_shared_transition_$platform", + "$ace_root/frameworks/core/components/slider:ace_core_components_slider_$platform", + "$ace_root/frameworks/core/components/stack:ace_core_components_stack_$platform", + "$ace_root/frameworks/core/components/stage:ace_core_components_stage_$platform", + "$ace_root/frameworks/core/components/stepper:ace_core_components_stepper_$platform", + "$ace_root/frameworks/core/components/svg:ace_core_components_svg_$platform", + "$ace_root/frameworks/core/components/swiper:ace_core_components_swiper_$platform", + "$ace_root/frameworks/core/components/text:ace_core_components_text_$platform", + "$ace_root/frameworks/core/components/text_field:ace_core_components_text_field_$platform", + "$ace_root/frameworks/core/components/text_overlay:ace_core_components_text_overlay_$platform", + "$ace_root/frameworks/core/components/text_span:ace_core_components_text_span_$platform", + "$ace_root/frameworks/core/components/theme:ace_core_components_theme_$platform", + "$ace_root/frameworks/core/components/tip:ace_core_components_tip_$platform", + "$ace_root/frameworks/core/components/toast:ace_core_components_toast_$platform", + "$ace_root/frameworks/core/components/toggle:ace_core_components_toggle_$platform", + "$ace_root/frameworks/core/components/touch_listener:ace_core_components_touch_listener_$platform", + "$ace_root/frameworks/core/components/track:ace_core_components_track_$platform", + "$ace_root/frameworks/core/components/transform:ace_core_components_transform_$platform", + "$ace_root/frameworks/core/components/transition:ace_core_components_transition_$platform", + "$ace_root/frameworks/core/components/triangle:ace_core_components_triangle_$platform", + "$ace_root/frameworks/core/components/tween:ace_core_components_tween_$platform", + "$ace_root/frameworks/core/components/watch_slider:ace_core_components_watch_slider_$platform", + "$ace_root/frameworks/core/components/wrap:ace_core_components_wrap_$platform", + "$flutter_root:ace_skia_$platform", + ] + + if (!use_mingw_win && !use_mac) { + deps += [ "$ace_root/frameworks/core/components/qrcode:ace_core_components_qrcode_$platform" ] + } + + if (!use_mingw_win && !use_mac && !is_wearable_product) { + deps += [ "$ace_root/frameworks/core/components/web:ace_core_components_web_$platform" ] + } + + if (!is_wearable_product) { + deps += [ + "$ace_root/frameworks/core/components/camera:ace_core_components_camera_$platform", + "$ace_root/frameworks/core/components/clock:ace_core_components_clock_$platform", + "$ace_root/frameworks/core/components/multimodal:ace_core_components_multimodal_$platform", + "$ace_root/frameworks/core/components/piece:ace_core_components_piece_$platform", + "$ace_root/frameworks/core/components/popup:ace_core_components_popup_$platform", + "$ace_root/frameworks/core/components/rating:ace_core_components_rating_$platform", + "$ace_root/frameworks/core/components/select:ace_core_components_select_$platform", + "$ace_root/frameworks/core/components/tab_bar:ace_core_components_tab_bar_$platform", + "$ace_root/frameworks/core/components/tool_bar:ace_core_components_tool_bar_$platform", + "$ace_root/frameworks/core/components/video:ace_core_components_video_$platform", + ] + } + + if (use_mingw_win) { + cflags_cc = [ "-std=c++17" ] + defines += [ + "_USE_MATH_DEFINES", + "NOGDI", + ] + } + } +} + +ace_core_source_set("ace_core_ohos") { + defines = ace_ohos_defines + platform = "ohos" +} + +ace_core_source_set("ace_core_windows") { + defines = ace_windows_defines + platform = "windows" +} + +ace_core_source_set("ace_core_mac") { + defines = ace_mac_defines + platform = "mac" +} diff --git a/frameworks/core/accessibility/BUILD.gn b/frameworks/core/accessibility/BUILD.gn new file mode 100644 index 00000000..7549392d --- /dev/null +++ b/frameworks/core/accessibility/BUILD.gn @@ -0,0 +1,58 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +# build accessibility sdk sources +config("ace_accessibility_config") { + include_dirs = [ + "//utils/native/base/include", + "//foundation/ace/ace_engine/frameworks/accessibility", + ] +} + +template("ace_accessibility_source_set") { + # get is_ohos_platform + forward_variables_from(invoker, "*") + + ohos_source_set(target_name) { + defines += invoker.defines + + sources = [ + "accessibility_node.cpp", + "accessibility_utils.cpp", + ] + + configs = [ + ":ace_accessibility_config", + "$ace_root:ace_config", + ] + + if (use_mingw_win || use_mac) { + cflags = [ "-std=c++17" ] + } + } +} + +ace_accessibility_source_set("ace_accessibility_ohos") { + defines = ace_ohos_defines +} + +ace_accessibility_source_set("ace_accessibility_windows") { + defines = ace_windows_defines +} + +ace_accessibility_source_set("ace_accessibility_mac") { + defines = ace_mac_defines +} diff --git a/frameworks/core/accessibility/accessibility_manager.h b/frameworks/core/accessibility/accessibility_manager.h new file mode 100644 index 00000000..a9dd6aea --- /dev/null +++ b/frameworks/core/accessibility/accessibility_manager.h @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_ACCESSIBILITY_ACCESSIBILITY_MANAGER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_ACCESSIBILITY_ACCESSIBILITY_MANAGER_H + +#include "base/memory/ace_type.h" +#include "core/accessibility/accessibility_node.h" + +namespace OHOS::Ace { + +struct AccessibilityEvent { + int32_t nodeId = 0; + std::string eventType; + std::string componentType; + double currentItemIndex = 0.0; + double itemCount = 0.0; +}; + +class AccessibilityManager : public AceType { + DECLARE_ACE_TYPE(AccessibilityManager, AceType); + +public: + AccessibilityManager() = default; + ~AccessibilityManager() override = default; + + virtual void SendAccessibilityAsyncEvent(const AccessibilityEvent& accessibilityEvent) = 0; + virtual int32_t GenerateNextAccessibilityId() = 0; + virtual RefPtr CreateSpecializedNode( + const std::string& tag, int32_t nodeId, int32_t parentNodeId) = 0; + virtual RefPtr CreateAccessibilityNode( + const std::string& tag, int32_t nodeId, int32_t parentNodeId, int32_t itemIndex) = 0; + virtual RefPtr GetAccessibilityNodeById(NodeId nodeId) const = 0; + virtual void RemoveAccessibilityNodes(RefPtr& node) = 0; + virtual void RemoveAccessibilityNodeById(NodeId nodeId) = 0; + virtual void ClearPageAccessibilityNodes(int32_t pageId) = 0; + virtual void SetRootNodeId(int32_t nodeId) = 0; + virtual void TrySaveTargetAndIdNode( + const std::string& id, const std::string& target, const RefPtr& node) = 0; + virtual void HandleComponentPostBinding() = 0; + virtual void DumpHandleEvent(const std::vector& params) = 0; + virtual void DumpProperty(const std::vector& params) = 0; + virtual void DumpTree(int32_t depth, NodeId nodeID) = 0; + virtual void SetCardViewPosition(int id, float offsetX, float offsetY) = 0; + virtual void SetCardViewParams(const std::string& key, bool focus) = 0; + virtual void ClearNodeRectInfo(RefPtr& node, bool isPopDialog) = 0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ACCESSIBILITY_ACCESSIBILITY_MANAGER_H diff --git a/frameworks/core/accessibility/accessibility_node.cpp b/frameworks/core/accessibility/accessibility_node.cpp new file mode 100644 index 00000000..dab0803a --- /dev/null +++ b/frameworks/core/accessibility/accessibility_node.cpp @@ -0,0 +1,425 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/accessibility/accessibility_node.h" + +#include "base/log/ace_trace.h" +#include "base/log/log.h" +#include "base/utils/linear_map.h" +#include "base/utils/utils.h" +#include "core/accessibility/accessibility_utils.h" + +namespace OHOS::Ace { +namespace { + +const char ACCESSIBILITY_VALUE[] = "value"; +const char ACCESSIBILITY_TYPE[] = "type"; +const char ACCESSIBILITY_DISABLED[] = "disabled"; +const char ACCESSIBILITY_GROUP[] = "accessibilitygroup"; +const char ACCESSIBILITY_TEXT[] = "accessibilitytext"; +const char ACCESSIBILITY_DESCRIPTION[] = "accessibilitydescription"; +const char ACCESSIBILITY_IMPORTANCE[] = "accessibilityimportance"; +const char ACCESSIBILITY_SHOW[] = "show"; +const char ID[] = "id"; + +const char INPUT_TYPE_CHECKBOX[] = "checkbox"; +const char INPUT_TYPE_RADIO[] = "radio"; +const char INPUT_TYPE_PASSWORD[] = "password"; + +// common event definition +const char ACCESSIBILITY_EVENT[] = "accessibility"; +const char CLICK[] = "click"; +const char LONG_PRESS[] = "longpress"; +const char FOCUS[] = "focus"; +const char BLUR[] = "blur"; + +inline bool StringToBool(const std::string& value) +{ + return value == "true"; +} + +#if defined(WINDOWS_PLATFORM) || defined(MAC_PLATFORM) +void MergeItems(const std::vector>& newItems, + std::vector>& items) +{ + if (items.empty()) { + items = newItems; + } else { + std::unordered_map originItems; + std::vector> sameVec; + std::vector> diffVec; + for (const auto& item: items) { + originItems[item.first] = item.second; + } + + for (const auto& item: newItems) { + originItems[item.first] = item.second; + } + + // find same element + for (auto item = items.begin(); item != items.end(); item++) { + const auto iter = originItems.find(item->first); + if (iter != originItems.end()) { + sameVec.emplace_back(iter->first, iter->second); + } + } + + // find different element + for (auto newItem = newItems.begin(); newItem != newItems.end(); newItem++) { + size_t diffFlagCount = 0; + for (auto item = items.begin(); item != items.end(); item++) { + if (newItem->first != item->first) { + diffFlagCount++; + } + } + if (diffFlagCount == items.size()) { + diffVec.emplace_back(newItem->first, newItem->second); + } + } + sameVec.insert(sameVec.end(), diffVec.begin(), diffVec.end()); + items.clear(); + items = sameVec; + } +} +#endif + +} // namespace + +AccessibilityNode::AccessibilityNode(NodeId nodeId, const std::string& nodeName) : nodeId_(nodeId), tag_(nodeName) +{ + // Initialize member variable in bitfield + isEnabled_ = true; + visible_ = true; +} + +void AccessibilityNode::SetActionClickImpl(const ActionClickImpl& actionClickImpl) +{ + actionClickImpl_ = actionClickImpl; +} + +bool AccessibilityNode::ActionClick() +{ + if (actionClickImpl_) { + actionClickImpl_(); + return true; + } + return false; +} + +void AccessibilityNode::SetActionLongClickImpl(const ActionLongClickImpl& actionLongClickImpl) +{ + actionLongClickImpl_ = actionLongClickImpl; +} + +bool AccessibilityNode::ActionLongClick() +{ + if (actionLongClickImpl_) { + actionLongClickImpl_(); + return true; + } + return false; +} + +void AccessibilityNode::SetActionScrollForward(const ActionScrollForwardImpl& actionScrollForwardImpl) +{ + actionScrollForwardImpl_ = actionScrollForwardImpl; +} + +bool AccessibilityNode::ActionScrollForward() +{ + if (actionScrollForwardImpl_) { + return actionScrollForwardImpl_(); + } + return false; +} + +void AccessibilityNode::SetActionScrollBackward(const ActionScrollBackwardImpl& actionScrollBackwardImpl) +{ + actionScrollBackwardImpl_ = actionScrollBackwardImpl; +} + +bool AccessibilityNode::ActionScrollBackward() +{ + if (actionScrollBackwardImpl_) { + return actionScrollBackwardImpl_(); + } + return false; +} + +void AccessibilityNode::SetActionFocusImpl(const ActionFocusImpl& actionFocusImpl) +{ + actionFocusImpl_ = actionFocusImpl; +} + +bool AccessibilityNode::ActionFocus() +{ + if (actionFocusImpl_) { + actionFocusImpl_(); + return true; + } + return false; +} + +void AccessibilityNode::SetActionUpdateIdsImpl(const ActionUpdateIdsImpl& actionUpdateIdsImpl) +{ + actionUpdateIdsImpl_ = actionUpdateIdsImpl; +} + +void AccessibilityNode::ActionUpdateIds() +{ + if (actionUpdateIdsImpl_) { + actionUpdateIdsImpl_(); + } +} + +void AccessibilityNode::SetParentNode(const RefPtr& parentNode) +{ + parentNode_ = parentNode; +} + +void AccessibilityNode::SetPositionInfo(const PositionInfo& positionInfo) +{ + rect_.SetRect(positionInfo.left, positionInfo.top, positionInfo.width, positionInfo.height); +} + +void AccessibilityNode::SetAttr(const std::vector>& attrs) +{ +#if defined(WINDOWS_PLATFORM) || defined(MAC_PLATFORM) + MergeItems(attrs, attrs_); +#endif + for (const auto& attr : attrs) { + if (attr.first == ACCESSIBILITY_VALUE) { + text_ = attr.second; + if (tag_ == ACCESSIBILITY_TAG_TEXT && parentNode_.Upgrade() && + parentNode_.Upgrade()->GetTag() == ACCESSIBILITY_TAG_POPUP) { + auto spParent = parentNode_.Upgrade(); + auto parentText = spParent->GetText() + text_; + spParent->SetText(parentText); + } + } else if (attr.first == ACCESSIBILITY_DISABLED) { + isEnabled_ = !StringToBool(attr.second); + } else if (attr.first == ACCESSIBILITY_TYPE) { + inputType_ = attr.second; + } else if (attr.first == ACCESSIBILITY_GROUP) { + accessible_ = StringToBool(attr.second); + } else if (attr.first == ACCESSIBILITY_TEXT) { + accessibilityLabel_ = attr.second; + } else if (attr.first == ACCESSIBILITY_DESCRIPTION) { + accessibilityHint_ = attr.second; + } else if (attr.first == ACCESSIBILITY_IMPORTANCE) { + importantForAccessibility_ = attr.second; + } else if (attr.first == ID) { + jsComponentId_ = attr.second; + } else if (attr.first == ACCESSIBILITY_SHOW) { + shown_ = attr.second == "true"; + } + } + SetOperableInfo(); +} + +#if defined(WINDOWS_PLATFORM) || defined(MAC_PLATFORM) +void AccessibilityNode::SetStyle(const std::vector>& styles) +{ + MergeItems(styles, styles_); +} +#endif + +void AccessibilityNode::AddEvent(int32_t pageId, const std::vector& events) +{ + for (const auto& event : events) { + if (event == ACCESSIBILITY_EVENT) { + onAccessibilityEventId_ = EventMarker(std::to_string(nodeId_), event, pageId); + } else if (event == CLICK) { + onClickId_ = EventMarker(std::to_string(nodeId_), event, pageId); + } else if (event == LONG_PRESS) { + onLongPressId_ = EventMarker(std::to_string(nodeId_), event, pageId); + } else if (event == FOCUS) { + onFocusId_ = EventMarker(std::to_string(nodeId_), event, pageId); + } else if (event == BLUR) { + onBlurId_ = EventMarker(std::to_string(nodeId_), event, pageId); + } + } + AddSupportAction(AceAction::CUSTOM_ACTION); + AddSupportAction(AceAction::GLOBAL_ACTION_BACK); +} + +void AccessibilityNode::AddNode(const RefPtr& node, int32_t slot) +{ + if (!node) { + LOGE("the node is nullptr"); + return; + } + auto isExist = std::find_if(children_.begin(), children_.end(), + [node](const RefPtr& child) { return child->GetNodeId() == node->GetNodeId(); }); + if (isExist != children_.end()) { + LOGD("the accessibility node[%{public}d] has already in the children", node->GetNodeId()); + return; + } + auto pos = children_.begin(); + std::advance(pos, slot); + children_.insert(pos, node); +} + +void AccessibilityNode::RemoveNode(const RefPtr& node) +{ + if (!node) { + LOGE("the node is nullptr"); + return; + } + children_.remove_if( + [node](const RefPtr& child) { return node->GetNodeId() == child->GetNodeId(); }); +} + +void AccessibilityNode::Mount(int32_t slot) +{ + auto parentNode = parentNode_.Upgrade(); + if (!parentNode) { + LOGE("the parent node is nullptr"); + return; + } + parentNode->AddNode(AceType::Claim(this), slot); +} + +void AccessibilityNode::SetOperableInfo() +{ + static const LinearMapNode nodeOperatorMap[] = { + { ACCESSIBILITY_TAG_BUTTON, + { .checkable = false, .clickable = true, .scrollable = false, .longClickable = true, .focusable = true } }, + { ACCESSIBILITY_TAG_CALENDAR, + { .checkable = false, .clickable = true, .scrollable = false, .longClickable = true, .focusable = true } }, + { ACCESSIBILITY_TAG_CANVAS, + { .checkable = false, .clickable = true, .scrollable = false, .longClickable = true, .focusable = true } }, + { ACCESSIBILITY_TAG_CHART, + { .checkable = false, .clickable = true, .scrollable = false, .longClickable = true, .focusable = true } }, + { ACCESSIBILITY_TAG_CLOCK, + { .checkable = false, .clickable = true, .scrollable = false, .longClickable = true, .focusable = true } }, + { ACCESSIBILITY_TAG_DIALOG, + { .checkable = false, .clickable = true, .scrollable = false, .longClickable = true, .focusable = true } }, + { ACCESSIBILITY_TAG_DIV, + { .checkable = false, .clickable = true, .scrollable = false, .longClickable = true, .focusable = true } }, + { ACCESSIBILITY_TAG_DIVIDER, { .checkable = false, .clickable = false, .scrollable = false, + .longClickable = false, .focusable = false } }, + { ACCESSIBILITY_TAG_IMAGE, + { .checkable = false, .clickable = true, .scrollable = false, .longClickable = true, .focusable = true } }, + { ACCESSIBILITY_TAG_INPUT, + { .checkable = false, .clickable = true, .scrollable = false, .longClickable = true, .focusable = true } }, + { ACCESSIBILITY_TAG_LABEL, + { .checkable = false, .clickable = true, .scrollable = false, .longClickable = true, .focusable = true } }, + { ACCESSIBILITY_TAG_LIST, + { .checkable = false, .clickable = true, .scrollable = true, .longClickable = true, .focusable = true } }, + { ACCESSIBILITY_TAG_LIST_ITEM, + { .checkable = false, .clickable = true, .scrollable = true, .longClickable = true, .focusable = true } }, + { ACCESSIBILITY_TAG_LIST_ITEM_GROUP, + { .checkable = false, .clickable = true, .scrollable = true, .longClickable = true, .focusable = true } }, + { ACCESSIBILITY_TAG_MARQUEE, + { .checkable = false, .clickable = true, .scrollable = true, .longClickable = true, .focusable = true } }, + { ACCESSIBILITY_TAG_NAVIGATION_BAR, + { .checkable = false, .clickable = true, .scrollable = true, .longClickable = true, .focusable = true } }, + { ACCESSIBILITY_TAG_OPTION, + { .checkable = false, .clickable = true, .scrollable = false, .longClickable = true, .focusable = true } }, + { ACCESSIBILITY_TAG_POPUP, + { .checkable = false, .clickable = true, .scrollable = false, .longClickable = true, .focusable = true } }, + { ACCESSIBILITY_TAG_PROGRESS, + { .checkable = false, .clickable = true, .scrollable = false, .longClickable = true, .focusable = true } }, + { ACCESSIBILITY_TAG_RATING, + { .checkable = false, .clickable = true, .scrollable = true, .longClickable = true, .focusable = true } }, + { ACCESSIBILITY_TAG_REFRESH, + { .checkable = false, .clickable = true, .scrollable = true, .longClickable = true, .focusable = true } }, + { ACCESSIBILITY_TAG_SELECT, + { .checkable = false, .clickable = true, .scrollable = true, .longClickable = true, .focusable = true } }, + { ACCESSIBILITY_TAG_SLIDER, + { .checkable = false, .clickable = true, .scrollable = true, .longClickable = true, .focusable = true } }, + { ACCESSIBILITY_TAG_SPAN, + { .checkable = false, .clickable = true, .scrollable = false, .longClickable = true, .focusable = true } }, + { ACCESSIBILITY_TAG_STACK, + { .checkable = false, .clickable = true, .scrollable = false, .longClickable = true, .focusable = true } }, + { ACCESSIBILITY_TAG_SWIPER, + { .checkable = false, .clickable = true, .scrollable = true, .longClickable = true, .focusable = true } }, + { ACCESSIBILITY_TAG_SWITCH, + { .checkable = true, .clickable = true, .scrollable = false, .longClickable = true, .focusable = true } }, + { ACCESSIBILITY_TAG_TAB_BAR, + { .checkable = false, .clickable = true, .scrollable = true, .longClickable = true, .focusable = true } }, + { ACCESSIBILITY_TAG_TAB_CONTENT, + { .checkable = false, .clickable = true, .scrollable = true, .longClickable = true, .focusable = true } }, + { ACCESSIBILITY_TAG_TABS, + { .checkable = false, .clickable = true, .scrollable = false, .longClickable = true, .focusable = true } }, + { ACCESSIBILITY_TAG_TEXT, + { .checkable = false, .clickable = true, .scrollable = true, .longClickable = true, .focusable = true } }, + { ACCESSIBILITY_TAG_TEXTAREA, + { .checkable = false, .clickable = true, .scrollable = false, .longClickable = true, .focusable = true } }, + { ACCESSIBILITY_TAG_VIDEO, + { .checkable = false, .clickable = true, .scrollable = false, .longClickable = true, .focusable = true } }, + }; + + // set node operable info + int64_t operateIter = BinarySearchFindIndex(nodeOperatorMap, ArraySize(nodeOperatorMap), tag_.c_str()); + if (operateIter != -1) { + isCheckable_ = nodeOperatorMap[operateIter].value.checkable; + isClickable_ = nodeOperatorMap[operateIter].value.clickable; + if (isClickable_) { + AddSupportAction(AceAction::ACTION_CLICK); + } + isScrollable_ = nodeOperatorMap[operateIter].value.scrollable; + isLongClickable_ = nodeOperatorMap[operateIter].value.longClickable; + if (isLongClickable_) { + AddSupportAction(AceAction::ACTION_LONG_CLICK); + } + isFocusable_ = nodeOperatorMap[operateIter].value.focusable; + if (isFocusable_) { + AddSupportAction(AceAction::ACTION_FOCUS); + } + } else { + LOGW("node type %{public}s not support", tag_.c_str()); + isCheckable_ = false; + isClickable_ = false; + isScrollable_ = false; + isLongClickable_ = false; + isFocusable_ = false; + } + + if (tag_ == ACCESSIBILITY_TAG_INPUT) { + if (inputType_ == INPUT_TYPE_CHECKBOX || inputType_ == INPUT_TYPE_RADIO) { + isCheckable_ = true; + } else if (inputType_ == INPUT_TYPE_PASSWORD) { + isPassword_ = true; + } else { + LOGW("node type %{public}s not support input event", tag_.c_str()); + } + } +} + +std::unordered_set AccessibilityNode::GetSupportAction() const +{ + static const AceAction allActions[] = { + AceAction::ACTION_NONE, AceAction::GLOBAL_ACTION_BACK, AceAction::CUSTOM_ACTION, AceAction::ACTION_CLICK, + AceAction::ACTION_LONG_CLICK, AceAction::ACTION_SCROLL_FORWARD, AceAction::ACTION_SCROLL_BACKWARD, + AceAction::ACTION_FOCUS, AceAction::ACTION_ACCESSIBILITY_FOCUS, AceAction::ACTION_CLEAR_ACCESSIBILITY_FOCUS, + AceAction::ACTION_NEXT_AT_MOVEMENT_GRANULARITY, AceAction::ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY, + }; + + std::unordered_set supportActions; + if (supportActions_ == 0) { + return supportActions; + } + + for (auto action : allActions) { + if ((supportActions_ & (1LL << static_cast(action))) != 0) { + supportActions.emplace(action); + } + } + return supportActions; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/accessibility/accessibility_node.h b/frameworks/core/accessibility/accessibility_node.h new file mode 100644 index 00000000..18212110 --- /dev/null +++ b/frameworks/core/accessibility/accessibility_node.h @@ -0,0 +1,766 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_ACCESSIBILITY_ACCESSIBILITY_NODE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_ACCESSIBILITY_ACCESSIBILITY_NODE_H + +#include +#include +#include +#include +#include +#include + +#include "base/geometry/axis.h" +#include "base/geometry/rect.h" +#include "base/memory/ace_type.h" +#include "base/utils/macros.h" +#include "core/accessibility/accessibility_utils.h" +#include "core/event/ace_event_handler.h" + +namespace OHOS::Ace { + +struct PositionInfo { + double width = 0.0; + double height = 0.0; + double left = 0.0; + double top = 0.0; +}; + +using ActionClickImpl = std::function; +using ActionLongClickImpl = std::function; +using ActionScrollForwardImpl = std::function; +using ActionScrollBackwardImpl = std::function; +using ActionFocusImpl = std::function; +using ActionUpdateIdsImpl = std::function; + +using NodeId = int32_t; +// If no insertion location is specified, new child will be added to the end of children list by default. +constexpr int32_t DEFAULT_INDEX = -1; + +class ACE_EXPORT AccessibilityNode : public AceType { + DECLARE_ACE_TYPE(AccessibilityNode, AceType); + +public: + using ChartValue = std::unordered_map>>; + + AccessibilityNode(NodeId nodeId, const std::string& nodeName); + ~AccessibilityNode() override = default; + + // node event action + void SetActionClickImpl(const ActionClickImpl& actionClickImpl); + bool ActionClick(); + void SetActionLongClickImpl(const ActionLongClickImpl& actionLongClickImpl); + bool ActionLongClick(); + void SetActionScrollForward(const ActionScrollForwardImpl& actionScrollForwardImpl); + bool ActionScrollForward(); + void SetActionScrollBackward(const ActionScrollBackwardImpl& actionScrollBackwardImpl); + bool ActionScrollBackward(); + void SetActionFocusImpl(const ActionFocusImpl& actionFocusImpl); + bool ActionFocus(); + void SetActionUpdateIdsImpl(const ActionUpdateIdsImpl& actionUpdateIdsImpl); + void ActionUpdateIds(); + + // node base + void SetAttr(const std::vector>& attrs); + // used for inspector node in PC preview + void SetStyle(const std::vector>& styles); + void AddEvent(int32_t pageId, const std::vector& events); + void AddNode(const RefPtr& node, int32_t slot = DEFAULT_INDEX); + void RemoveNode(const RefPtr& node); + void Mount(int32_t slot); + + void SetIsRootNode(bool isRootNode) + { + isRootNode_ = isRootNode; + } + + bool IsRootNode() const + { + return isRootNode_; + } + + void ResetChildList(std::list>& children) + { + children_.clear(); + children_.swap(children); + } + + const std::list>& GetChildList() const + { + return children_; + } + + NodeId GetParentId() const + { + auto parentNode = parentNode_.Upgrade(); + return parentNode ? parentNode->GetNodeId() : -1; + } + + RefPtr GetParentNode() const + { + return parentNode_.Upgrade(); + } + + void SetParentNode(const RefPtr& parentNode); + + const std::string& GetTag() const + { + return tag_; + } + + int32_t GetPageId() const + { + return pageId_; + } + + void SetPageId(int32_t pageId) + { + pageId_ = pageId; + } + + void SetPositionInfo(const PositionInfo& positionInfo); + + const EventMarker& GetAccessibilityEventMarker() const + { + return onAccessibilityEventId_; + } + + const EventMarker& GetClickEventMarker() const + { + return onClickId_; + } + + const EventMarker& GetLongPressEventMarker() const + { + return onLongPressId_; + } + + const EventMarker& GetFocusEventMarker() const + { + return onFocusId_; + } + + const EventMarker& GetBlurEventMarker() const + { + return onBlurId_; + } + + // node attr need to barrierfree + NodeId GetNodeId() const + { + return nodeId_; + } + + const std::string& GetText() const + { + return text_; + } + + void SetText(const std::string& text) + { + text_ = text; + } + + const std::string& GetHintText() const + { + return hintText_; + } + + void SetHintText(const std::string& hintText) + { + hintText_ = hintText; + } + + const std::vector& GetChildIds() const + { + return childIds_; + } + + void SetChildIds(const std::vector& ids) + { + childIds_ = ids; + } + + double GetWidth() const + { + return rect_.Width(); + } + + void SetWidth(double width) + { + rect_.SetWidth(width); + } + + double GetHeight() const + { + return rect_.Height(); + } + + void SetHeight(double height) + { + rect_.SetHeight(height); + } + + double GetLeft() const + { + return rect_.Left(); + } + + void SetLeft(double left) + { + return rect_.SetLeft(left); + } + + double GetTop() const + { + return rect_.Top(); + } + + void SetTop(double top) + { + return rect_.SetTop(top); + } + + bool GetCheckedState() const + { + return isChecked_; + } + + void SetCheckedState(bool state) + { + isChecked_ = state; + } + + bool GetEnabledState() const + { + return isEnabled_; + } + + void SetEnabledState(bool state) + { + isEnabled_ = state; + } + + bool GetEditable() const + { + return isEditable_; + } + + void SetEditable(bool editable) + { + isEditable_ = editable; + } + + bool GetFocusedState() const + { + return isFocused_; + } + + void SetFocusedState(bool state) + { + isFocused_ = state; + } + + bool GetSelectedState() const + { + return isSelected_; + } + + void SetSelectedState(bool state) + { + isSelected_ = state; + } + + bool GetCheckableState() const + { + return isCheckable_; + } + + void SetCheckableState(bool state) + { + isCheckable_ = state; + } + + bool GetClickableState() const + { + return isClickable_; + } + + void SetClickableState(bool state) + { + isClickable_ = state; + } + + bool GetFocusableState() const + { + return isFocusable_; + } + + void SetFocusableState(bool state) + { + isFocusable_ = state; + } + + bool GetScrollableState() const + { + return isScrollable_; + } + + void SetScrollableState(bool state) + { + isScrollable_ = state; + } + + bool GetLongClickableState() const + { + return isLongClickable_; + } + + void SetLongClickableState(bool state) + { + isLongClickable_ = state; + } + + bool GetIsMultiLine() const + { + return isMultiLine_; + } + + void SetIsMultiLine(bool multiLine) + { + isMultiLine_ = multiLine; + } + + bool GetIsPassword() const + { + return isPassword_; + } + + void SetIsPassword(bool isPassword) + { + isPassword_ = isPassword; + } + + std::unordered_set GetSupportAction() const; + + void AddSupportAction(AceAction action) + { + supportActions_ |= (1LL << static_cast(action)); + } + + const std::string& GetAccessibilityLabel() const + { + return accessibilityLabel_; + } + + void SetAccessibilityLabel(const std::string& label) + { + accessibilityLabel_ = label; + } + + const std::string& GetAccessibilityHint() const + { + return accessibilityHint_; + } + + void SetAccessibilityHint(const std::string& hint) + { + accessibilityHint_ = hint; + } + + const std::string& GetImportantForAccessibility() const + { + return importantForAccessibility_; + } + + size_t GetMaxTextLength() const + { + return maxTextLength_; + } + + void SetMaxTextLength(size_t length) + { + maxTextLength_ = length; + } + + int32_t GetTextSelectionStart() const + { + return textSelectionStart_; + } + + void SetTextSelectionStart(int32_t start) + { + textSelectionStart_ = start; + } + + int32_t GetTextSelectionEnd() const + { + return textSelectionEnd_; + } + + void SetTextSelectionEnd(int32_t end) + { + textSelectionEnd_ = end; + } + + const std::string& GetErrorText() const + { + return errorText_; + } + + void SetErrorText(const std::string& errorText) + { + errorText_ = errorText; + } + + const std::string& GetJsComponentId() const + { + return jsComponentId_; + } + + void SetJsComponentId(const std::string& jsComponentId) + { + jsComponentId_ = jsComponentId; + } + + bool GetAccessible() const + { + return accessible_; + } + + AccessibilityValue GetAccessibilityValue() const + { + return accessibilityValue_; + } + + void SetAccessibilityValue(double cur, double min = 0.0, double max = 0.0) + { + accessibilityValue_.current = cur; + accessibilityValue_.min = min; + accessibilityValue_.max = max; + } + + const std::unique_ptr& GetChartValue() const + { + return chartValue_; + } + + void PutChartValue(const std::string& groupName, const std::vector>& values) + { + if (!chartValue_) { + chartValue_ = std::make_unique(); + } + + auto result = chartValue_->try_emplace(groupName, values); + if (!result.second) { + result.first->second = values; + } + } + + std::string GetInputType() const + { + return inputType_; + } + + AceTextCategory GetTextInputType() const + { + return textInputType_; + } + + void SetTextInputType(AceTextCategory type) + { + textInputType_ = type; + } + + const AceCollectionInfo& GetCollectionInfo() const + { + return collectionInfo_; + } + + void SetCollectionInfo(const AceCollectionInfo& collectionInfo) + { + collectionInfo_ = collectionInfo; + } + + const AceCollectionItemInfo& GetCollectionItemInfo() const + { + return collectionItemInfo_; + } + + void SetCollectionItemInfo(const AceCollectionItemInfo& collectionItemInfo) + { + collectionItemInfo_ = collectionItemInfo; + } + + bool GetShown() const + { + return shown_; + } + + bool GetVisible() const + { + return visible_; + } + + void SetVisible(bool visible) + { + visible_ = visible; + } + + const Rect& GetRect() const + { + return rect_; + } + + void SetRect(const Rect& rect) + { + isValidRect_ = rect.IsValid(); + if (isValidRect_) { + rect_ = rect; + } + } + + bool IsValidRect() const + { + return isValidRect_; + } + + bool GetClicked() const + { + return isClicked_; + } + + void SetClicked(bool clicked) + { + isClicked_ = clicked; + } + +#if defined(WINDOWS_PLATFORM) || defined(MAC_PLATFORM) + // used for inspector node in PC preview + std::vector> GetAttrs() const + { + return attrs_; + } + + // used for inspector node in PC preview + std::vector> GetStyles() const + { + return styles_; + } + + // used for inspector node in PC preview + bool GetClearRectInfoFlag() const + { + return isClearRectInfo_; + } + + // used for inspector node in PC preview + void SetClearRectInfoFlag(bool isClearRectInfo) + { + isClearRectInfo_ = isClearRectInfo; + } + + // used for inspector node in PC preview + void SetScaleToChild(double scale) + { + for (auto& child : children_) { + child->SetScaleToChild(scale); + } + SetScale(scale); + } + + // used for inspector node in PC preview + void SetScaleCenterToChild(Offset center) + { + for (auto& child : children_) { + child->SetScaleCenterToChild(center); + } + SetScaleCenter(center); + } + + // used for inspector node in PC preview + double GetScale() + { + return scale_; + } + + // used for inspector node in PC preview + void SetScale(double scale) + { + scale_ = scale; + SetIsAnimationNode(true); + } + + // used for inspector node in PC preview + void SetScaleCenter(Offset center) + { + scaleCenter_ = center; + } + + // used for inspector node in PC preview + Offset GetScaleCenter() + { + return scaleCenter_; + } + + // used for inspector node in PC preview + void SetTranslateOffsetToChild(const Offset& offset) + { + for (auto& child : children_) { + child->SetTranslateOffsetToChild(offset); + } + SetTranslateOffset(offset); + } + + void SetTranslateOffset(const Offset& offset) + { + translateOffset_ = offset; + SetIsAnimationNode(true); + } + + Offset GetTranslateOffset() const + { + return translateOffset_; + } + + // used for inspector node in PC preview + void SetRotateToChild(const double& angle, const RotateAxis& Axis) + { + for (auto& child : children_) { + child->SetRotateToChild(angle, Axis); + } + SetRotateAngle(angle); + SetRotateAxis(Axis); + } + + void SetRotateAngle(const double& angle) + { + rotateAngle_ = angle; + SetIsAnimationNode(true); + } + + double GetRotateAngle() const + { + return rotateAngle_; + } + + void SetRotateAxis(const RotateAxis& Axis) + { + rotateAxis_ = Axis; + } + + RotateAxis GetRotateAxis(RotateAxis Axis) const + { + return rotateAxis_; + } + + bool IsAnimationNode() const + { + return isAnimationNode_; + } + + void SetIsAnimationNode(bool IsAnimationNode) + { + isAnimationNode_ = IsAnimationNode; + } +#endif + +protected: + // inner use, don't need to barrierfree + NodeId nodeId_ = -1; + int32_t pageId_ = -1; + bool isRootNode_ = false; + std::string inputType_; + WeakPtr parentNode_; + std::list> children_; + ActionClickImpl actionClickImpl_; + ActionLongClickImpl actionLongClickImpl_; + ActionScrollForwardImpl actionScrollForwardImpl_; + ActionScrollBackwardImpl actionScrollBackwardImpl_; + ActionFocusImpl actionFocusImpl_; + ActionUpdateIdsImpl actionUpdateIdsImpl_; + EventMarker onAccessibilityEventId_; + EventMarker onClickId_; + EventMarker onLongPressId_; + EventMarker onFocusId_; + EventMarker onBlurId_; + +private: + void SetOperableInfo(); + + // node attr need to barrierfree + size_t maxTextLength_ = 0; + int32_t textSelectionStart_ = 0; + int32_t textSelectionEnd_ = 0; + std::string tag_; + std::string text_; + std::string hintText_; + std::string errorText_; + std::string jsComponentId_; + std::string accessibilityLabel_; + std::string accessibilityHint_; + std::string importantForAccessibility_; + AceTextCategory textInputType_ { AceTextCategory::INPUT_TYPE_DEFAULT }; + std::vector childIds_; + uint64_t supportActions_ = 0; + std::unique_ptr chartValue_; + + Rect rect_; + union { + struct { + bool isValidRect_ : 1; + bool isChecked_ : 1; + bool isEditable_ : 1; + bool isEnabled_ : 1; + bool accessible_ : 1; + bool isFocused_ : 1; + bool isSelected_ : 1; + bool isCheckable_ : 1; + bool isClickable_ : 1; + bool isFocusable_ : 1; + bool isScrollable_ : 1; + bool isLongClickable_ : 1; + bool isMultiLine_ : 1; + bool isPassword_ : 1; + bool visible_ : 1; + bool shown_ : 1; + bool isClicked_ : 1; + }; + uint64_t bits_ = 0; + }; + AccessibilityValue accessibilityValue_; + AceCollectionInfo collectionInfo_; + AceCollectionItemInfo collectionItemInfo_; + +#if defined(WINDOWS_PLATFORM) || defined(MAC_PLATFORM) + // used for inspector node in PC preview + std::vector> attrs_; + std::vector> styles_; + // used for inspector node in PC preview + bool isClearRectInfo_ = false; + // focus scale or translateScale for inspector node in PC preview + double scale_ = 1.0; + Offset scaleCenter_ { 0.0, 0.0 }; + Offset translateOffset_ { 0.0, 0.0 }; + double rotateAngle_ = 0.0; + RotateAxis rotateAxis_ = RotateAxis::AXIS_Z; + bool isAnimationNode_ = false; +#endif +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ACCESSIBILITY_ACCESSIBILITY_NODE_H diff --git a/frameworks/core/accessibility/accessibility_utils.cpp b/frameworks/core/accessibility/accessibility_utils.cpp new file mode 100644 index 00000000..8eca5086 --- /dev/null +++ b/frameworks/core/accessibility/accessibility_utils.cpp @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/accessibility/accessibility_utils.h" + +namespace OHOS::Ace { + +const char ACCESSIBILITY_TAG_DIV[] = "div"; +const char ACCESSIBILITY_TAG_CALENDAR[] = "calendar"; +const char ACCESSIBILITY_TAG_TEXT[] = "text"; +const char ACCESSIBILITY_TAG_PICKER[] = "picker"; +const char ACCESSIBILITY_TAG_OPTION[] = "option"; +const char ACCESSIBILITY_TAG_POPUP[] = "popup"; +const char ACCESSIBILITY_TAG_PROGRESS[] = "progress"; +const char ACCESSIBILITY_TAG_SELECT[] = "select"; +const char ACCESSIBILITY_TAG_MENU[] = "menu"; +const char ACCESSIBILITY_TAG_SLIDER[] = "slider"; +const char ACCESSIBILITY_TAG_SPAN[] = "span"; +const char ACCESSIBILITY_TAG_STACK[] = "stack"; +const char ACCESSIBILITY_TAG_SWIPER[] = "swiper"; +const char ACCESSIBILITY_TAG_SWITCH[] = "switch"; +const char ACCESSIBILITY_TAG_TABS[] = "tabs"; +const char ACCESSIBILITY_TAG_TAB_BAR[] = "tab-bar"; +const char ACCESSIBILITY_TAG_TAB_CONTENT[] = "tab-content"; +const char ACCESSIBILITY_TAG_REFRESH[] = "refresh"; +const char ACCESSIBILITY_TAG_IMAGE[] = "image"; +const char ACCESSIBILITY_TAG_LIST[] = "list"; +const char ACCESSIBILITY_TAG_LIST_ITEM[] = "list-item"; +const char ACCESSIBILITY_TAG_LIST_ITEM_GROUP[] = "list-item-group"; +const char ACCESSIBILITY_TAG_VIDEO[] = "video"; +const char ACCESSIBILITY_TAG_RATING[] = "rating"; +const char ACCESSIBILITY_TAG_MARQUEE[] = "marquee"; +const char ACCESSIBILITY_TAG_NAVIGATION_BAR[] = "navigation-bar"; +const char ACCESSIBILITY_TAG_NAVIGATION_MENU[] = "navigation-menu"; +const char ACCESSIBILITY_TAG_TEXTAREA[] = "textarea"; +const char ACCESSIBILITY_TAG_INPUT[] = "input"; +const char ACCESSIBILITY_TAG_LABEL[] = "label"; +const char ACCESSIBILITY_TAG_DIVIDER[] = "divider"; +const char ACCESSIBILITY_TAG_CANVAS[] = "canvas"; +const char ACCESSIBILITY_TAG_BUTTON[] = "button"; +const char ACCESSIBILITY_TAG_CHART[] = "chart"; +const char ACCESSIBILITY_TAG_CLOCK[] = "clock"; +const char ACCESSIBILITY_TAG_DIALOG[] = "dialog"; +const char ACCESSIBILITY_TAG_SEARCH[] = "search"; + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/accessibility/accessibility_utils.h b/frameworks/core/accessibility/accessibility_utils.h new file mode 100644 index 00000000..bb6b22b5 --- /dev/null +++ b/frameworks/core/accessibility/accessibility_utils.h @@ -0,0 +1,148 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_ACCESSIBILITY_ACCESSIBILITY_UTILS_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_ACCESSIBILITY_ACCESSIBILITY_UTILS_H + +#include +#include + +namespace OHOS::Ace { + +// define accessibility node tags +extern const char ACCESSIBILITY_TAG_DIV[]; +extern const char ACCESSIBILITY_TAG_CALENDAR[]; +extern const char ACCESSIBILITY_TAG_TEXT[]; +extern const char ACCESSIBILITY_TAG_PICKER[]; +extern const char ACCESSIBILITY_TAG_OPTION[]; +extern const char ACCESSIBILITY_TAG_POPUP[]; +extern const char ACCESSIBILITY_TAG_PROGRESS[]; +extern const char ACCESSIBILITY_TAG_SELECT[]; +extern const char ACCESSIBILITY_TAG_MENU[]; +extern const char ACCESSIBILITY_TAG_SLIDER[]; +extern const char ACCESSIBILITY_TAG_SPAN[]; +extern const char ACCESSIBILITY_TAG_STACK[]; +extern const char ACCESSIBILITY_TAG_SWIPER[]; +extern const char ACCESSIBILITY_TAG_SWITCH[]; +extern const char ACCESSIBILITY_TAG_TABS[]; +extern const char ACCESSIBILITY_TAG_TAB_BAR[]; +extern const char ACCESSIBILITY_TAG_TAB_CONTENT[]; +extern const char ACCESSIBILITY_TAG_REFRESH[]; +extern const char ACCESSIBILITY_TAG_IMAGE[]; +extern const char ACCESSIBILITY_TAG_LIST[]; +extern const char ACCESSIBILITY_TAG_LIST_ITEM[]; +extern const char ACCESSIBILITY_TAG_LIST_ITEM_GROUP[]; +extern const char ACCESSIBILITY_TAG_VIDEO[]; +extern const char ACCESSIBILITY_TAG_RATING[]; +extern const char ACCESSIBILITY_TAG_MARQUEE[]; +extern const char ACCESSIBILITY_TAG_NAVIGATION_BAR[]; +extern const char ACCESSIBILITY_TAG_NAVIGATION_MENU[]; +extern const char ACCESSIBILITY_TAG_TEXTAREA[]; +extern const char ACCESSIBILITY_TAG_INPUT[]; +extern const char ACCESSIBILITY_TAG_LABEL[]; +extern const char ACCESSIBILITY_TAG_DIVIDER[]; +extern const char ACCESSIBILITY_TAG_CANVAS[]; +extern const char ACCESSIBILITY_TAG_BUTTON[]; +extern const char ACCESSIBILITY_TAG_CHART[]; +extern const char ACCESSIBILITY_TAG_CLOCK[]; +extern const char ACCESSIBILITY_TAG_DIALOG[]; +extern const char ACCESSIBILITY_TAG_SEARCH[]; + +enum class AccessibilityEventType: size_t { + CLICK = 0x00000001, + LONG_PRESS = 0x00000002, + SELECTED = 0x00000004, + BLUR = 0x00000007, + FOCUS = 0x00000008, + TEXT_CHANGE = 0x00000010, + EJECT_DISMISS = 0x00000020, + MOUSE = 149, + KEYBOARD_BACK = 150, + KEYBOARD_UP = 151, + KEYBOARD_DOWN = 152, + KEYBOARD_LEFT = 153, + KEYBOARD_RIGHT = 154, + KEYBOARD_CENTER = 155, + HANDLE_A = 156, + HANDLE_SELECT = 157, + KEYBOARD_TAB = 158, + KEYBOARD_SPACE = 159, + KEYBOARD_ENTER = 160, + KEYBOARD_ESCAPE = 161, + KEYBOARD_NUMBER_ENTER = 162, + TV_CONTROL_MEDIA_PLAY = 163, + PAGE_CHANGE = 200, + TOUCH_START = 0x00000200, + TOUCH_MOVE = 0x00000201, + TOUCH_CANCEL = 0x00000202, + TOUCH_END = 0x00000400, + CHANGE = 0x00000800, + SCROLL_END = 0x00001000, + SCROLL_START = 0x01000000, + UNKNOWN, +}; + +struct OperableInfo { + bool checkable = false; + bool clickable = false; + bool scrollable = false; + bool longClickable = false; + bool focusable = false; +}; + +enum class AceAction : uint32_t { + ACTION_NONE = 0, + GLOBAL_ACTION_BACK, + CUSTOM_ACTION, + ACTION_CLICK = 10, + ACTION_LONG_CLICK, + ACTION_SCROLL_FORWARD, + ACTION_SCROLL_BACKWARD, + ACTION_FOCUS, + ACTION_ACCESSIBILITY_FOCUS, + ACTION_CLEAR_ACCESSIBILITY_FOCUS, + ACTION_NEXT_AT_MOVEMENT_GRANULARITY, + ACTION_PREVIOUS_AT_MOVEMENT_GRANULARITY +}; + +struct AccessibilityValue { + double min = 0.0; + double max = 0.0; + double current = 0.0; +}; + +enum class AceTextCategory { + INPUT_TYPE_DEFAULT = 0, + INPUT_TYPE_TEXT, + INPUT_TYPE_EMAIL, + INPUT_TYPE_DATE, + INPUT_TYPE_TIME, + INPUT_TYPE_NUMBER, + INPUT_TYPE_PASSWORD +}; + +struct AceCollectionInfo { + int32_t rows = 0; + int32_t columns = 0; +}; + +struct AceCollectionItemInfo { + int32_t row = 0; + int32_t column = 0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ACCESSIBILITY_ACCESSIBILITY_UTILS_H diff --git a/frameworks/core/animation/animation.h b/frameworks/core/animation/animation.h new file mode 100644 index 00000000..1886c5be --- /dev/null +++ b/frameworks/core/animation/animation.h @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_ANIMATION_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_ANIMATION_H + +#include "base/utils/listener.h" +#include "core/animation/curve.h" +#include "core/animation/interpolator.h" + +namespace OHOS::Ace { + +template +class Animation : public Interpolator, public ValueListenable { + DECLARE_ACE_TYPE(Animation, Interpolator); + +public: + virtual const T& GetValue() const = 0; + + void OnInitNotify(float normalizedTime, bool reverse) override + { + // If the user sets the initial value, the animation stay at the initial value. + if (inited_) { + ValueListenable::NotifyListener(initValue_); + } else { + OnNormalizedTimestampChanged(normalizedTime, reverse); + } + } + + void SetInitValue(const T& initValue) + { + initValue_ = initValue; + inited_ = true; + } + + bool HasInitValue() const + { + return inited_; + } + + bool ShouldSkipAnimation() const + { + return skipAnimation_; + } + + void SetSkipAnimation(bool skipAnimation) + { + skipAnimation_ = skipAnimation; + } + + bool IsDeclarativeAnimation() const + { + return declarativeAnimation_; + } + + void SetDeclarativeAnimation(bool declarative) + { + declarativeAnimation_ = declarative; + } + + virtual void SetCurve(const RefPtr& curve) {} + + virtual void SetStart(const T& value) {} + + virtual T GetEndValue() + { + return T(); + } + +private: + T initValue_ {}; + bool inited_ = false; + bool declarativeAnimation_ = false; + bool skipAnimation_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_ANIMATION_H diff --git a/frameworks/core/animation/animation_pub.h b/frameworks/core/animation/animation_pub.h new file mode 100644 index 00000000..69f8cb6a --- /dev/null +++ b/frameworks/core/animation/animation_pub.h @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_ANIMATION_PUB_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_ANIMATION_PUB_H + +#include + +namespace OHOS::Ace { + +// Forever animation +static constexpr int32_t ANIMATION_REPEAT_INFINITE { -1 }; + +// normalized max duration time. +static constexpr float NORMALIZED_DURATION_MAX { 1.0f }; + +// normalized min duration time. +static constexpr float NORMALIZED_DURATION_MIN { 0.0f }; + +enum class FillMode { + NONE, + FORWARDS, + BACKWARDS, + BOTH, +}; + +enum class AnimationDirection { + NORMAL, + ALTERNATE, + REVERSE, + ALTERNATE_REVERSE, +}; + +enum class AnimationType { + TRANSLATE, + TRANSLATE_X, + TRANSLATE_Y, + SCALE, + SCALE_X, + SCALE_Y, + ROTATE_Z, + ROTATE_X, + ROTATE_Y, +}; + +enum class TransitionEffect { + NONE, + UNFOLD, +}; + +using ShareId = std::string; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_ANIMATION_PUB_H diff --git a/frameworks/core/animation/animator.cpp b/frameworks/core/animation/animator.cpp new file mode 100644 index 00000000..53e5f374 --- /dev/null +++ b/frameworks/core/animation/animator.cpp @@ -0,0 +1,725 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/animation/animator.h" + +#include "base/utils/utils.h" + +namespace OHOS::Ace { +namespace { + +int32_t g_controllerId = 0; +int32_t AllocControllerId() +{ + return ++g_controllerId; +} + +} // namespace + +// Static Functions. +float Animator::scale_ = 1.0f; + +void Animator::SetDurationScale(float scale) +{ + if (scale < 0.0f) { + LOGE("Invalid scale value: %{public}f", scale); + return; + } + scale_ = scale; +} + +float Animator::GetDurationScale() +{ + return scale_; +} + +// Public Functions. +Animator::Animator() +{ + controllerId_ = AllocControllerId(); +} + +Animator::Animator(const WeakPtr& context) +{ + controllerId_ = AllocControllerId(); + AttachScheduler(context); +} + +Animator::~Animator() +{ + LOGD("Animator destructor. id:%{public}d", controllerId_); + // Clear all listeners first to make its destruction silently. + ClearAllListeners(); + ClearInterpolators(); + if (!IsStopped()) { + Stop(); + } +} + +void Animator::AttachScheduler(const WeakPtr& context) +{ + auto&& callback = [weak = AceType::WeakClaim(this)](uint64_t duration) { + auto controller = weak.Upgrade(); + if (!controller) { + LOGE("controller is nullptr, skip frame callback."); + return; + } + controller->OnFrame(duration); + }; + scheduler_ = SchedulerBuilder::Build(callback, context); +} + +bool Animator::HasScheduler() const +{ + return scheduler_ != nullptr; +} + +void Animator::AddInterpolator(const RefPtr& animation) +{ + if (animation) { + interpolators_.emplace_back(animation); + } +} + +void Animator::RemoveInterpolator(const RefPtr& animation) +{ + interpolators_.remove(animation); +} + +void Animator::ClearInterpolators() +{ + interpolators_.clear(); +} + +void Animator::AddProxyController(const RefPtr& proxy) +{ + if (!proxy) { + LOGE("Add Proxy Controller failed. controller is null."); + return; + } + if (RawPtr(proxy) != this) { + proxyControllers_.emplace_back(proxy); + proxy->Copy(Claim(this)); + proxy->scheduler_.Reset(); + } +} + +void Animator::RemoveProxyController(const RefPtr& proxy) +{ + proxyControllers_.remove(proxy); +} + +void Animator::ClearProxyControllers() +{ + proxyControllers_.clear(); +} + +Animator::Status Animator::GetStatus() const +{ + return status_; +} + +bool Animator::IsStopped() const +{ + return status_ == Status::STOPPED; +} + +bool Animator::IsRunning() const +{ + return status_ == Status::RUNNING; +} + +// When the animation is in the delayed start phase. +bool Animator::IsPending() const +{ + if ((status_ == Status::RUNNING) || (status_ == Status::PAUSED)) { + return elapsedTime_ < startDelay_; + } else { + return false; + } +} + +int32_t Animator::GetDuration() const +{ + return duration_; +} + +void Animator::SetDuration(int32_t duration) +{ + if (duration < 0) { + LOGE("invalid duration time, keep the old. id: %{public}d", controllerId_); + return; + } + LOGD("set duration: %{public}d. id: %{public}d", duration, controllerId_); + if ((status_ == Status::RUNNING || status_ == Status::PAUSED) && duration != 0) { + // Need to update elapsedTime when animation running or paused. + elapsedTime_ = (duration_ / duration) * elapsedTime_; + } + + if (isDeclarativeAnimator) { + // if status is not idle, finish current animation and init animation + if (isLastAnimationInterrupted_) { + duration = elapsedTime_ - startDelay_; + isLastAnimationInterrupted_ = false; + } + elapsedTime_ = 0; + } + + duration_ = duration; + for (auto& controller : proxyControllers_) { + controller->SetDuration(duration); + } +} + +bool Animator::SetIteration(int32_t iteration) +{ + if (iteration_ == iteration) { + return true; + } + if ((iteration < 0) && (iteration != ANIMATION_REPEAT_INFINITE)) { + LOGE("invalid iteration: %{public}d. id: %{public}d", iteration, controllerId_); + return false; + } + // if status is not idle, finish current animation and init animation + if (status_ != Status::IDLE) { + Finish(); + } + LOGD("set iteration: %{public}d. id: %{public}d", iteration, controllerId_); + UpdateIteration(iteration); + repeatTimesLeft_ = repeatTimes_; + for (auto& controller : proxyControllers_) { + controller->SetIteration(iteration); + } + return true; +} + +void Animator::SetStartDelay(int32_t startDelay) +{ + if (startDelay < 0) { + LOGE("invalid startDelay time, keep the old. id: %{public}d", controllerId_); + return; + } + LOGD("set start delay: %{public}d. id: %{public}d", startDelay, controllerId_); + startDelay_ = startDelay; + for (auto& controller : proxyControllers_) { + controller->SetStartDelay(startDelay); + } +} + +void Animator::SetFillMode(FillMode fillMode) +{ + fillMode_ = fillMode; + for (auto& controller : proxyControllers_) { + controller->SetFillMode(fillMode); + } +} + +void Animator::SetAnimationDirection(AnimationDirection direction) +{ + direction_ = direction; + for (auto& controller : proxyControllers_) { + controller->SetAnimationDirection(direction); + } +} + +// return true, the animation is played backward +// return false, the animation is played forward +bool Animator::GetInitAnimationDirection() +{ + if (repeatTimes_ == ANIMATION_REPEAT_INFINITE) { + return false; + } + if (direction_ == AnimationDirection::ALTERNATE_REVERSE || direction_ == AnimationDirection::REVERSE) { + isReverse_ = true; + } + if (direction_ != AnimationDirection::ALTERNATE) { + return isReverse_; + } + return isReverse_ ? (repeatTimesLeft_ % 2) == 0 : false; +} + +void Animator::UpdatePlayedTime(int32_t playedTime) +{ + if (playedTime < 0 || playedTime > duration_) { + LOGE("UpdatePlayedTime failed. Invalid playedTime:%{public}d", playedTime); + return; + } + if (startDelay_ != 0 || motion_) { + LOGE("Unsupported UpdatePlayedTime when startDelay or motion"); + return; + } + // only support go forward. + isReverse_ = false; + isCurDirection_ = false; + float scale = GetDurationScale(); + int32_t scaledPlayedTime = playedTime * scale; + elapsedTime_ = scaledPlayedTime; +} + +void Animator::TriggerFrame(int32_t playedTime) +{ + if (playedTime < 0 || playedTime > duration_) { + LOGE("TriggerFrame failed. Invalid playedTime:%{public}d", playedTime); + return; + } + if (startDelay_ != 0 || motion_) { + LOGE("Unsupported TriggerFrame when startDelay or motion"); + return; + } + UpdatePlayedTime(playedTime); + UpdateScaledTime(); + NotifyPrepareListener(); + NotifyInterpolator(elapsedTime_); +} + +void Animator::PlayMotion(const RefPtr& motion) +{ + if (!motion) { + LOGE("PlayMotion failed, motion is null."); + return; + } + interpolators_.clear(); + isReverse_ = false; + motion_ = motion; + StartInner(false); +} + +void Animator::Play() +{ + if (iteration_ == 0) { + LOGD("no need to play animation, iteration is zero."); + return; + } + LOGD("Play animation in current direction, id: %{public}d", controllerId_); + motion_ = nullptr; + StartInner(false); +} + +void Animator::Reverse() +{ + if (iteration_ == 0) { + LOGD("no need to reverse animation, iteration is zero."); + return; + } + LOGD("Play animation in opposite direction, id: %{public}d", controllerId_); + motion_ = nullptr; + ToggleDirection(); + StartInner(true); +} + +void Animator::Forward() +{ + if (iteration_ == 0) { + LOGD("no need to play animation forward, iteration is zero."); + return; + } + if (isReverse_) { + ToggleDirection(); + } + Play(); +} + +void Animator::Backward() +{ + if (iteration_ == 0) { + LOGD("no need to play animation backward, iteration is zero."); + return; + } + if (isReverse_) { + ToggleDirection(); + } + Reverse(); +} + +void Animator::Pause() +{ + if (iteration_ == 0) { + LOGD("no need to pause animation, iteration is zero."); + return; + } + if (status_ == Status::PAUSED) { + LOGW("Already paused, do not need pause again. id: %{public}d", controllerId_); + return; + } + if (status_ == Status::IDLE) { + Play(); + } + LOGD("animation pause. id: %{public}d", controllerId_); + if (scheduler_ && scheduler_->IsActive()) { + scheduler_->Stop(); + } + status_ = Status::PAUSED; + StatusListenable::NotifyPauseListener(); + for (auto& controller : proxyControllers_) { + controller->Pause(); + } +} + +void Animator::Resume() +{ + if (iteration_ == 0) { + LOGD("no need to resume animation, iteration is zero."); + return; + } + if (status_ == Status::RUNNING) { + LOGW("Already running, do not need resume again. id: %{public}d", controllerId_); + return; + } + LOGD("animation resume. id: %{public}d", controllerId_); + if (scheduler_ && !scheduler_->IsActive()) { + scheduler_->Start(); + } + status_ = Status::RUNNING; + isResume_ = true; + StatusListenable::NotifyResumeListener(); + for (auto& controller : proxyControllers_) { + controller->Resume(); + } +} + +void Animator::Stop() +{ + if (iteration_ == 0) { + LOGD("no need to stop animation, iteration is zero."); + return; + } + if (status_ == Status::STOPPED) { + LOGD("Already stop, do not need stop again. id: %{public}d", controllerId_); + return; + } + LOGD("animation stop. id: %{public}d", controllerId_); + if (!isDeclarativeAnimator) { + elapsedTime_ = 0; + } + + repeatTimesLeft_ = repeatTimes_; + isBothBackwards = false; + UpdateScaledTime(); + if (scheduler_ && scheduler_->IsActive()) { + scheduler_->Stop(); + } + status_ = Status::STOPPED; + StatusListenable::NotifyStopListener(); + for (auto& controller : proxyControllers_) { + controller->Stop(); + } +} + +void Animator::Finish() +{ + if (iteration_ == 0) { + LOGD("no need to finish animation, iteration is zero."); + return; + } + if (status_ == Status::STOPPED) { + LOGW("Already stop, do not need finish again. id: %{public}d", controllerId_); + return; + } + LOGD("animation finish. id: %{public}d", controllerId_); + if (motion_) { + LOGD("end action not supports for motion. just stop it. id: %{public}d", controllerId_); + Stop(); + return; + } + repeatTimesLeft_ = 0; + UpdateScaledTime(); + if (isDeclarativeAnimator) { + Stop(); + repeatTimesLeft_ = 0; + isLastAnimationInterrupted_ = true; + } else { + OnFrame(((int64_t)scaledStartDelay_) + scaledDuration_); + } +} + +void Animator::Cancel() +{ + if (iteration_ == 0) { + LOGD("no need to cancel animation, iteration is zero."); + return; + } + if (status_ == Status::IDLE) { + LOGW("Already in idle, do not need cancel again. id: %{public}d", controllerId_); + return; + } + status_ = Status::IDLE; + LOGE("animation cancel. id: %{public}d", controllerId_); + elapsedTime_ = 0; + repeatTimesLeft_ = repeatTimes_; + UpdateScaledTime(); + NotifyPrepareListener(); + float normalizedTime = GetNormalizedTime(0.0f, true); + for (auto& interpolator : interpolators_) { + interpolator->OnInitNotify(normalizedTime, isReverse_); + } + if (scheduler_ && scheduler_->IsActive()) { + scheduler_->Stop(); + } + NotifyIdleListener(); +} + +// Private Functions. +void Animator::OnFrame(int64_t duration) +{ + // notify child first + for (auto& controller : proxyControllers_) { + controller->OnFrame(duration); + } + if (duration > INT64_MAX - elapsedTime_) { + LOGW("duration is too big, skip it. id:%{public}d", controllerId_); + return; + } + elapsedTime_ += duration; + UpdateScaledTime(); + // skip delay time + if (elapsedTime_ < scaledStartDelay_) { + if ((fillMode_ == FillMode::BACKWARDS || fillMode_ == FillMode::BOTH) && !isBothBackwards) { + for (const auto& interpolator : interpolators_) { + interpolator->OnNormalizedTimestampChanged(0.0f, isReverse_); + } + isBothBackwards = true; + } + return; + } + NotifyPrepareListener(); + // get playedTime + auto playedTime = elapsedTime_ - scaledStartDelay_; + // make playedTime in range 0 ~ INT32_MAX(max duration value) + playedTime = std::clamp(playedTime, 0L, (int64_t)INT32_MAX); + if (!motion_) { + NotifyInterpolator(playedTime); + } else { + NotifyMotion(playedTime); + } +} + +void Animator::NotifyInterpolator(int32_t playedTime) +{ + bool needStop = false; + bool notifyRepeat = false; + // do not notify user when handling playedTime, because users may be change duration or repeat times in callback. + // if they change this parameter, it will take effect next tick. + if (playedTime >= scaledDuration_) { + notifyRepeat = true; + auto isAlternateDirection = + (direction_ == AnimationDirection::ALTERNATE) || (direction_ == AnimationDirection::ALTERNATE_REVERSE); + if ((scaledDuration_ == 0) && isAlternateDirection && (iteration_ % 2 == 0)) { + isCurDirection_ = !isCurDirection_; + } + // make playedTime in range 0 ~ INTERPOLATE_DURATION_MAX + if (repeatTimesLeft_ == 0 || scaledDuration_ == 0) { + LOGD("animation stop, repeatTimesLeft: %{public}d, duration: %{public}d, id: %{public}d", repeatTimesLeft_, + scaledDuration_, controllerId_); + repeatTimesLeft_ = 0; + needStop = true; + } else { + auto playedLoops = GetPlayedLoopsAndRemaining(playedTime); + if (repeatTimesLeft_ != ANIMATION_REPEAT_INFINITE) { + needStop = UpdateRepeatTimesLeftAndCheckFinished(playedLoops); + } + if (isAlternateDirection) { + isCurDirection_ = !isCurDirection_; + } + LOGD("animation next loop. repeat times remaining: %{public}d. id: %{public}d", repeatTimesLeft_, + controllerId_); + } + + // after the above branches, playedTime in range 0 ~ INTERPOLATE_DURATION_MAX + // make elapsedTime_ in range 0 ~ scaledStartDelay_ + INTERPOLATE_DURATION_MAX + elapsedTime_ = playedTime + scaledStartDelay_; + } + + float normalizedTime = GetNormalizedTime(playedTime, needStop); + // all calculation above is done, we can notify user from now. + // users can change controller's configuration, and it will take effect next tick. + if (notifyRepeat && !needStop) { + // notify repeat before on timestamp changed. + StatusListenable::NotifyRepeatListener(); + } + for (const auto& interpolator : interpolators_) { + if (needStop && (fillMode_ == FillMode::NONE || fillMode_ == FillMode::BACKWARDS) && !isDeclarativeAnimator) { + // notify init value set by user. + interpolator->OnInitNotify(normalizedTime, isReverse_); + } else { + // interpolate animation accept normalized time. + interpolator->OnNormalizedTimestampChanged(normalizedTime, isReverse_); + } + } + if (needStop && (!IsStopped())) { + // notify stop after on timestamp changed. + LOGD("animation stop in tick callback."); + Stop(); + } +} + +void Animator::NotifyMotion(int32_t playedTime) +{ + // motion do not have normalized time, because no exact duration in motion. + // just pass actual time to motion, normalized time always zero. + motion_->OnTimestampChanged(playedTime, 0.0f, false); + if (motion_->IsCompleted()) { + Stop(); + } +} + +void Animator::StartInner(bool alwaysNotify) +{ + if (status_ == Status::RUNNING) { + LOGW("controller already running, do not need start again. skip it. id: %{public}d", controllerId_); + if (directionChange_) { + directionChange_ = !directionChange_; + isCurDirection_ = !isCurDirection_; + } + + if (alwaysNotify) { + StatusListenable::NotifyStartListener(); + for (auto& controller : proxyControllers_) { + controller->StartInner(alwaysNotify); + } + } + return; + } + if (scheduler_ && !scheduler_->IsActive()) { + scheduler_->Start(); + } + StatusListenable::NotifyStartListener(); + status_ = Status::RUNNING; + isCurDirection_ = GetInitAnimationDirection(); + for (auto& controller : proxyControllers_) { + controller->StartInner(alwaysNotify); + } +} + +int32_t Animator::GetPlayedLoopsAndRemaining(int32_t& playedTime) +{ + // when duration equals 0, played loop equals INT32_MAX, and playedTime remains unchanged. + int32_t playedLoop = INT32_MAX; + if (scaledDuration_ != 0) { + // in order to make playedTime in range of 0 ~ INTERPOLATE_DURATION_MAX, calc elapsed loop between two vsyncs + playedLoop = std::clamp(playedTime / scaledDuration_, 0, INT32_MAX); + playedTime = playedTime % scaledDuration_; + } + return playedLoop; +} + +bool Animator::UpdateRepeatTimesLeftAndCheckFinished(int32_t playedLoops) +{ + // get the remaining repeatTimesLeft_ + repeatTimesLeft_ -= playedLoops; + if (playedLoops > 1) { + LOGW("too long time between neighbor vsync, elapsed loop count: %{public}d. id: %{public}d", playedLoops, + controllerId_); + } + if (repeatTimesLeft_ < 0) { + LOGD("elapse too long, no repeat remaining. Loop: %{public}d. id: %{public}d", playedLoops, controllerId_); + return true; + } + return false; +} + +void Animator::ToggleDirection() +{ + isReverse_ = !isReverse_; + LOGD("change direction. isReverse change to: %{public}d, id: %{public}d", isReverse_, controllerId_); + directionChange_ = !directionChange_; + if (status_ == Status::IDLE || status_ == Status::STOPPED) { + LOGD("toggle an idle controller, do not change time related params. id: %{public}d", controllerId_); + return; + } + if (repeatTimes_ == ANIMATION_REPEAT_INFINITE) { + elapsedTime_ = scaledDuration_ - elapsedTime_; + LOGI("duration is infinite, can not reverse time related params. id: %{public}d", controllerId_); + return; + } + repeatTimesLeft_ = repeatTimes_ - repeatTimesLeft_; + LOGD("change left repeat times: %{public}d. id: %{public}d", repeatTimesLeft_, controllerId_); + elapsedTime_ = scaledDuration_ - elapsedTime_; +} + +float Animator::GetNormalizedTime(float playedTime, bool needStop) const +{ + float normalizedTime = 0.0f; + if (needStop) { + LOGD("animation stop. set played time to the end value according to fill mode. id: %{public}d", controllerId_); + if (!isDeclarativeAnimator) { + switch (fillMode_) { + case FillMode::FORWARDS: + // Fall through. + case FillMode::BOTH: + LOGD("fill mode is FORWARDS or BOTH. id: %{public}d", controllerId_); + normalizedTime = 1.0f; + break; + case FillMode::NONE: + // Fall through. + case FillMode::BACKWARDS: + LOGD("fill mode is NONE or BACKWARDS. id: %{public}d", controllerId_); + normalizedTime = 0.0f; + break; + default: + LOGD("unknown fill mode, use default mode. id: %{public}d", controllerId_); + normalizedTime = 1.0f; + break; + } + } else { + normalizedTime = scaledDuration_ == 0 ? 1.0f : std::min(1.0f, (1.0f * playedTime) / scaledDuration_); + } + } else { + normalizedTime = scaledDuration_ == 0 ? 1.0f : (1.0f * playedTime) / scaledDuration_; + } + return isCurDirection_ ? 1.0f - normalizedTime : normalizedTime; +} + +void Animator::UpdateScaledTime() +{ + float scale = GetDurationScale(); + scaledDuration_ = duration_ * scale; + scaledStartDelay_ = startDelay_ * scale; +} + +void Animator::UpdateIteration(int32_t iteration) +{ + iteration_ = iteration; + if (iteration <= 0 && iteration != ANIMATION_REPEAT_INFINITE) { + repeatTimes_ = 0; + } else if (iteration == ANIMATION_REPEAT_INFINITE) { + repeatTimes_ = ANIMATION_REPEAT_INFINITE; + } else { + repeatTimes_ = iteration - 1; + } +} + +void Animator::Copy(const RefPtr& controller) +{ + if (!controller) { + return; + } + fillMode_ = controller->fillMode_; + direction_ = controller->direction_; + isCurDirection_ = controller->isCurDirection_; + directionChange_ = controller->directionChange_; + duration_ = controller->duration_; + elapsedTime_ = controller->elapsedTime_; + startDelay_ = controller->startDelay_; + repeatTimes_ = controller->repeatTimes_; + iteration_ = controller->iteration_; + repeatTimesLeft_ = controller->repeatTimesLeft_; + isReverse_ = controller->isReverse_; + isResume_ = controller->isResume_; + status_ = controller->status_; + scaledDuration_ = controller->scaledDuration_; + scaledStartDelay_ = controller->scaledStartDelay_; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/animation/animator.h b/frameworks/core/animation/animator.h new file mode 100644 index 00000000..f28978fb --- /dev/null +++ b/frameworks/core/animation/animator.h @@ -0,0 +1,187 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_ANIMATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_ANIMATOR_H + +#include + +#include "base/utils/macros.h" +#include "core/animation/animation_pub.h" +#include "core/animation/interpolator.h" +#include "core/animation/motion.h" +#include "core/animation/scheduler.h" +#include "core/animation/status_listener.h" +#include "core/animation/time_event.h" + +namespace OHOS::Ace { + +class ACE_EXPORT Animator : public AceType, public StatusListenable { + DECLARE_ACE_TYPE(Animator, AceType); + +public: + enum class Status { + IDLE, // when animation not start or been cancel. + RUNNING, // play in reverse / forward direction. + PAUSED, // paused by call Pause API. + STOPPED, // stopped by call Finish/Stop API or has played to the end. + }; + + // Adjust global animation duration, default scale is 1.0f. + static void SetDurationScale(float scale); + static float GetDurationScale(); + + // Animator can play animations. + // So far, animation has two types: Interpolator and Motion(physical-based animation). + // But only one type will be played at a time. When playing one, the other's setting will be cleared. + // 1. Interpolator: Play/Reverse/Stop/Finish will work + // 2. Motion: PlayMotion will work + explicit Animator(const WeakPtr& context); + + Animator(); + + ~Animator() override; + + void SetDeclarativeAnimator(bool declarative) + { + isDeclarativeAnimator = declarative; + } + + void AttachScheduler(const WeakPtr& context); + bool HasScheduler() const; + + // Every interpolate animation needs to add itself into animator and use the controller to drive. + void AddInterpolator(const RefPtr& animation); + void RemoveInterpolator(const RefPtr& animation); + void ClearInterpolators(); + + // Controller (A) can be added to other controller (B) as a proxy when (B) is running. + void AddProxyController(const RefPtr& proxy); + void RemoveProxyController(const RefPtr& proxy); + void ClearProxyControllers(); + + // Can use these APIs to check controller's current state. + Status GetStatus() const; + bool IsStopped() const; + bool IsRunning() const; + bool IsPending() const; + + // Sets the total running time of the animator to drive the animation. + void SetDuration(int32_t duration); + int32_t GetDuration() const; + void SetStartDelay(int32_t startDelay); + + // At last will run iteration loops. repeatTimes equals 0 as default. + bool SetIteration(int32_t iteration); + + // fillmode used to decided the attr of last frame or first frame. + void SetFillMode(FillMode fillMode); + + // Whether the animation should be played in reverse in turn. + void SetAnimationDirection(AnimationDirection direction); + + // Update the played time, will not trigger OnFrame callback. + void UpdatePlayedTime(int32_t playedTime); + + // Trigger one frame callback by the given time. + void TriggerFrame(int32_t playedTime); + + // Motion not support set duration & repeat & Reverse. + void PlayMotion(const RefPtr& motion); + + // Play the Animation based current direction. + void Play(); + + // Reverse the Animation based current direction. + void Reverse(); + + // Means play forward and set direction reverse false. + void Forward(); + + // Means play backward and set direction reverse true. + void Backward(); + + // Stop at the current frame(Continueable stop). + void Pause(); + + // Resume animtion from the pause frame. + void Resume(); + + // Stop at the current frame(Unrecoverable stop). + void Stop(); + + // Stop at the end frame. + void Finish(); + + // Stop at the start frame. + void Cancel(); + +private: + // Screen refresh callback. duration is in millisecond. + void OnFrame(int64_t duration); + + // Callback the played time to the interpolator animtion. + void NotifyInterpolator(int32_t playedTime); + + // Callback the played time to the motion animtion. + void NotifyMotion(int32_t playedTime); + + void StartInner(bool alwaysNotify); + + // Calculate played loops and remaining in playedTime + int32_t GetPlayedLoopsAndRemaining(int32_t& playedTime); + + bool GetInitAnimationDirection(); + + // update repeatTimesLeft_ and returns true if run out of repeat times. + bool UpdateRepeatTimesLeftAndCheckFinished(int32_t playedLoops); + + void ToggleDirection(); + float GetNormalizedTime(float playedTime, bool needStop) const; + + void UpdateScaledTime(); + void UpdateIteration(int32_t iteration); + + void Copy(const RefPtr& controller); + + std::list> interpolators_; + std::list> proxyControllers_; + RefPtr scheduler_; + RefPtr motion_; + FillMode fillMode_ = FillMode::FORWARDS; + AnimationDirection direction_ = AnimationDirection::NORMAL; + int32_t duration_ = 0; // millisecond. + int64_t elapsedTime_ = 0; // millisecond. in range: 0 ~ startDelay_ + INTERPOLATE_DURATION_MAX + int32_t startDelay_ = 0; // millisecond. + int32_t repeatTimes_ = 0; // user configured repeat times. + int32_t iteration_ = 1; // user configured iteration times. + int32_t repeatTimesLeft_ = 0; // repeat times for controller to play + int32_t scaledDuration_ = 0; + int32_t scaledStartDelay_ = 0; + bool isReverse_ = false; + bool isResume_ = false; + bool isCurDirection_ = false; + bool directionChange_ = false; + Status status_ = Status::IDLE; + int32_t controllerId_ = 0; + static float scale_; + bool isLastAnimationInterrupted_ = false; + bool isDeclarativeAnimator = false; + bool isBothBackwards = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_ANIMATOR_H diff --git a/frameworks/core/animation/anticipate_curve.cpp b/frameworks/core/animation/anticipate_curve.cpp new file mode 100644 index 00000000..4b666c95 --- /dev/null +++ b/frameworks/core/animation/anticipate_curve.cpp @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/animation/anticipate_curve.h" + +namespace OHOS::Ace { + +AnticipateCurve::AnticipateCurve(const float tension) : tension_(tension) +{} + +float AnticipateCurve::MoveInternal(float time) +{ + // a(t) = t * t * ((tension + 1) * t - tension) + return time * time * ((tension_ + 1.0f) * time - tension_); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/animation/anticipate_curve.h b/frameworks/core/animation/anticipate_curve.h new file mode 100644 index 00000000..f031625d --- /dev/null +++ b/frameworks/core/animation/anticipate_curve.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_ANTICIPATE_CURVE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_ANTICIPATE_CURVE_H + +#include "core/animation/curve.h" + +namespace OHOS::Ace { + +class AnticipateCurve : public Curve { +public: + explicit AnticipateCurve(float tension); + ~AnticipateCurve() override = default; + + float MoveInternal(float time) override; + +private: + // Default amount of anticipation. When tension equals 0.0f, there is no anticipation and the interpolator + // becomes a simple acceleration interpolator. + const float tension_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_ANTICIPATE_CURVE_H diff --git a/frameworks/core/animation/bilateral_spring_adapter.cpp b/frameworks/core/animation/bilateral_spring_adapter.cpp new file mode 100644 index 00000000..3a24376b --- /dev/null +++ b/frameworks/core/animation/bilateral_spring_adapter.cpp @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/animation/bilateral_spring_adapter.h" + +namespace OHOS::Ace { + +double BilateralSpringAdapter::ResetControl(int32_t delta) +{ + auto controlNode = GetControlNode(); + if (!controlNode) { + return 0.0; + } + double lastValue = controlNode->GetValue(); + LOGD("BeforeReset: %{public}s", DumpNodes().c_str()); + RefPtr srcNode; + int32_t nodeSize = nodes_.size(); + if (delta < 0) { + for (int32_t index = nodeSize - 1; index >= 0; index--) { + if (index + delta < 0) { + srcNode = nodes_.at(0); + } else { + srcNode = nodes_.at(index + delta); + } + MoveNode(srcNode, index); + } + } else { + for (int32_t index = 0; index < nodeSize; index++) { + if (index + delta >= nodeSize) { + srcNode = nodes_.at(nodeSize - 1); + } else { + srcNode = nodes_.at(index + delta); + } + MoveNode(srcNode, index); + } + } + double ret = controlNode->GetValue() - lastValue; + controlNode->ResetNode(0.0, controlNode->GetVelocity()); + LOGD("AfterReset: %{public}s", DumpNodes().c_str()); + return ret; +} + +void BilateralSpringAdapter::FlushAnimation() +{ + // flush from control to edge. + int32_t controlIndex = GetControlIndex(); + for (int32_t index = 1; index <= controlIndex; index++) { + if (controlIndex + index < GetSize()) { + auto node = GetNode(controlIndex + index); + if (node) { + node->OnAnimation(); + } + } + if (controlIndex - index >= 0) { + auto node = GetNode(controlIndex - index); + if (node) { + node->OnAnimation(); + } + } + } +} + +void BilateralSpringAdapter::MoveNode(const RefPtr& srcNode, int32_t dstIndex) +{ + RefPtr dstNode; + if (srcNode) { + dstNode = nodes_[dstIndex]; + if (dstNode) { + dstNode->ResetNode(srcNode->GetValue(), srcNode->GetVelocity()); + } + } else { + LOGD("Move node. index: %{public}d, control: %{public}d", dstIndex, GetControlIndex()); + dstNode = nodes_[dstIndex]; + if (dstNode) { + dstNode->ResetNode(0.0, 0.0); + } + } +} + +void BilateralSpringAdapter::SetDeltaValue(double delta) +{ + int32_t controlIndex = GetControlIndex(); + RefPtr node; + for (int32_t index = 1; index <= controlIndex; index++) { + if (controlIndex + index < GetSize()) { + node = GetNode(controlIndex + index); + if (node) { + node->SetDeltaValue(delta); + } + } + if (controlIndex - index >= 0) { + node = GetNode(controlIndex - index); + if (node) { + node->SetDeltaValue(delta); + } + } + } +} + +}; // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/animation/bilateral_spring_adapter.h b/frameworks/core/animation/bilateral_spring_adapter.h new file mode 100644 index 00000000..769f27cc --- /dev/null +++ b/frameworks/core/animation/bilateral_spring_adapter.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_BILATERAL_SPRING_ADAPTER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_BILATERAL_SPRING_ADAPTER_H + +#include "base/memory/ace_type.h" +#include "core/animation/simple_spring_adapter.h" + +namespace OHOS::Ace { + +class BilateralSpringAdapter : public SimpleSpringAdapter { + DECLARE_ACE_TYPE(BilateralSpringAdapter, SimpleSpringAdapter); + +public: + int32_t GetControlIndex() const override + { + return nodes_.size() / 2; + } + + double ResetControl(int32_t delta); + + void FlushAnimation() override; + + void SetDeltaValue(double delta) override; + +private: + void MoveNode(const RefPtr& srcNode, int32_t dstIndex); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_BILATERAL_SPRING_ADAPTER_H diff --git a/frameworks/core/animation/bilateral_spring_node.cpp b/frameworks/core/animation/bilateral_spring_node.cpp new file mode 100644 index 00000000..55256bea --- /dev/null +++ b/frameworks/core/animation/bilateral_spring_node.cpp @@ -0,0 +1,151 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/animation/bilateral_spring_node.h" + +namespace OHOS::Ace { +namespace { + +constexpr int64_t NANOS_TO_MILLS = 1000000; + +} // namespace + +void BilateralSpringNode::NotifyNext(double endValue, double initVelocity) +{ + if (!adapter_) { + LOGE("Notify next failed. adapter is null."); + return; + } + if (this != AceType::RawPtr(adapter_->GetControlNode()) || adapter_->GetSize() < 2) { + return; + } + + int32_t controlIndex = adapter_->GetSize() / 2; + RefPtr node; + for (int32_t index = 1; index <= controlIndex; index++) { + if (controlIndex + index < adapter_->GetSize()) { + node = adapter_->GetNode(controlIndex + index); + if (node) { + node->EndToValue(endValue, initVelocity); + } + } + if (controlIndex - index >= 0) { + node = adapter_->GetNode(controlIndex - index); + if (node) { + node->EndToValue(endValue, initVelocity); + } + } + } +} + +void BilateralSpringNode::OnAnimation() +{ + auto context = context_.Upgrade(); + if (!context) { + LOGE("Animate failed, context is null. index: %{public}d", index_); + return; + } + if (!spring_) { + LOGE("Animate failed, spring is null. index: %{public}d", index_); + return; + } + int64_t delta = context->GetTimeFromExternalTimer() - startTime_; + spring_->OnTimestampChanged(delta * 1.0 / NANOS_TO_MILLS, 0.0f, false); + double simpleValue = spring_->GetCurrentPosition(); + FixValue(simpleValue); + DoCollision(); + velocity_ = spring_->GetCurrentVelocity(); + if (spring_->IsCompleted() || spring_->IsCompleted(simpleValue, velocity_)) { + isRunning_ = false; + value_ = spring_->GetEndValue(); + velocity_ = 0.0; + // Node's animation update callback + OnUpdate(value_, velocity_); + NotifyUpdateListener(value_, velocity_); + OnEnd(value_); + if (scheduler_->IsActive()) { + scheduler_->Stop(); + } + LOGD("Animation. index: %{public}d complete at value: %{public}.3lf", index_, value_); + } else { + OnUpdate(value_, velocity_); + NotifyUpdateListener(value_, velocity_); + if (!scheduler_->IsActive()) { + scheduler_->Start(); + } + } +} + +void BilateralSpringNode::DoCollision() +{ + if (!switchCollision_ || !adapter_) { + return; + } + if (adapter_->GetControlIndex() > GetIndex()) { + // up / left node + auto next = adapter_->GetNode(GetIndex() + 1); + if (next) { + double nextBasePosition = next->GetValue() + decoration_; + value_ = std::clamp(value_, nextBasePosition - maxDecoration_, nextBasePosition - minDecoration_); + } + } + if (adapter_->GetControlIndex() < GetIndex()) { + // down / right node + auto prev = adapter_->GetNode(GetIndex() - 1); + if (prev) { + double prevBasePosition = prev->GetValue() - decoration_; + value_ = std::clamp(value_, prevBasePosition + minDecoration_, prevBasePosition + maxDecoration_); + } + } +} + +void BilateralSpringNode::FixValue(double springValue) +{ + if (fixMode_) { + SimpleFixedValue(springValue); + } else { + value_ = springValue; + } +} + +void BilateralSpringNode::SimpleFixedValue(double springValue) +{ + if (!fixMode_) { + value_ = springValue; + return; + } + double delta = springValue - lastTheoryValue_; + lastTheoryValue_ = springValue; + + if (GreatOrEqual(std::abs(delta), 1.0)) { + // The displacement between two frames is greater than 1 pixel, using engine data + value_ = springValue; + } else { + // The displacement between two frames is less than 1 pixel, and +1 processing is performed + if (delta > 0.0) { + value_++; + } else { + value_--; + } + } +} + +void BilateralSpringNode::SetDeltaValue(double delta) +{ + SimpleSpringNode::SetDeltaValue(delta); + DoCollision(); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/animation/bilateral_spring_node.h b/frameworks/core/animation/bilateral_spring_node.h new file mode 100644 index 00000000..4cd2692d --- /dev/null +++ b/frameworks/core/animation/bilateral_spring_node.h @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_BILATERAL_SPRING_NODE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_BILATERAL_SPRING_NODE_H + +#include "base/memory/ace_type.h" +#include "core/animation/bilateral_spring_adapter.h" +#include "core/animation/simple_spring_node.h" + +namespace OHOS::Ace { + +class BilateralSpringNode : public SimpleSpringNode { + DECLARE_ACE_TYPE(BilateralSpringNode, SimpleSpringNode); + +public: + BilateralSpringNode(const WeakPtr& context, int32_t index, double value) + : SimpleSpringNode(context, index, value) {}; + ~BilateralSpringNode() override = default; + + void NotifyNext(double endValue, double initVelocity) override; + + void SetDeltaValue(double delta) override; + +protected: + void OnAnimation() override; + +private: + void DoCollision(); + + void FixValue(double springValue); + + void SimpleFixedValue(double springValue); + + bool switchCollision_ = true; + bool fixMode_ = false; + double lastTheoryValue_ = 0.0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_BILATERAL_SPRING_NODE_H diff --git a/frameworks/core/animation/card_transition_controller.cpp b/frameworks/core/animation/card_transition_controller.cpp new file mode 100644 index 00000000..12710ab0 --- /dev/null +++ b/frameworks/core/animation/card_transition_controller.cpp @@ -0,0 +1,362 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/animation/card_transition_controller.h" + +#include "core/animation/curve_animation.h" +#include "core/components/list/list_item_element.h" +#include "core/components/list/render_list.h" +#include "core/components/page_transition/page_transition_element.h" +#include "core/components/transform/transform_element.h" + +namespace OHOS::Ace { +namespace { + +constexpr float OPACITY_CHANGE_END = 0.286f; +constexpr float OPACITY_CHANGE_START = 0.571f; + +} // namespace + +CardTransitionController::CardTransitionController(const WeakPtr& context) : context_(context) +{ + controller_ = AceType::MakeRefPtr(context); +}; + +void CardTransitionController::RegisterTransitionListener() +{ + auto pipelineContext = context_.Upgrade(); + if (!pipelineContext) { + LOGE("Register Transition listener to stage failed. pipeline context is null."); + return; + } + auto weak = AceType::WeakClaim(this); + pipelineContext->AddPageTransitionListener( + [weak](const TransitionEvent& event, const WeakPtr& in, const WeakPtr& out) { + if ((event != TransitionEvent::POP_START) && (event != TransitionEvent::PUSH_START)) { + LOGE("handle event: %{public}d failed. unknown event.", event); + return; + } + auto controller = weak.Upgrade(); + if (!controller) { + LOGE("handle event: %{public}d failed. controller is null.", event); + return; + } + if (event == TransitionEvent::PUSH_START) { + controller->pageDest_ = in; + controller->pageSrc_ = out; + } else { + controller->pageDest_ = out; + controller->pageSrc_ = in; + } + controller->event_ = event; + controller->PrepareTransition(); + }); +} + +void CardTransitionController::PrepareTransition() +{ + // finish previous transition + controller_->Finish(); + // clear controller + controller_->ClearAllListeners(); + controller_->ClearInterpolators(); + controller_->ClearPrepareListeners(); + auto pipelineContext = context_.Upgrade(); + if (!pipelineContext) { + LOGE("prepare card transition failed. pipeline is null."); + return; + } + auto pageDest = (event_ == TransitionEvent::PUSH_START) ? pageDest_.Upgrade() : pageSrc_.Upgrade(); + if (!pageDest || pageDest->GetCardComposeId().empty()) { + LOGE("prepare card transition failed. page dest is null. event: %{public}d", event_); + return; + } + auto composeId = pageDest->GetCardComposeId(); + auto cardComposeElement = pipelineContext->GetComposedElementById(composeId); + if (!cardComposeElement) { + LOGE("prepare card transition failed. cardComposeElement is null."); + return; + } + auto cardRender = cardComposeElement->GetRenderNode(); + if (!cardRender) { + LOGE("prepare card transition failed. cardRender is null."); + return; + } + auto rrect = GetCardRect(composeId); + CreateCardAnimation(cardComposeElement, cardRender->GetGlobalOffset(), rrect); + CreateCardListAnimation(cardRender); + CreateExternalAnimation(cardRender->GetLayoutSize().Height(), cardRender->GetGlobalOffset().GetY()); +} + +void CardTransitionController::CreateCardAnimation(const RefPtr& cardComposeElement, + const Offset& globalOffset, const RRect& rrect) +{ + auto listItemElement = cardComposeElement->GetFirstChild(); + if (!listItemElement) { + LOGE("create card animation failed. listItemElement is null."); + return; + } + auto displayElement = AceType::DynamicCast(listItemElement->GetFirstChild()); + if (!displayElement) { + LOGE("create card animation failed. displayElement is null."); + return; + } + auto displayRender = displayElement->GetRenderNode(); + if (!displayRender) { + LOGE("create card animation failed. displayRender is null."); + return; + } + auto transformElement = GetCardTransformElement(cardComposeElement); + if (!transformElement) { + LOGE("create card animation failed. transformElement is null."); + return; + } + auto transformRender = AceType::DynamicCast(transformElement->GetRenderNode()); + if (!transformRender) { + LOGE("create card animation failed. transformRender is null."); + return; + } + auto weakTransform = AceType::WeakClaim(AceType::RawPtr(transformRender)); + CreateCardScaleAnimation(weakTransform, rrect); + CreateCardTranslateAnimation(weakTransform, globalOffset, rrect.GetRect().GetOffset() - globalOffset); + CreateCardOpacityAnimation(displayRender); + AddPrepareListener(weakTransform); + AddStopListener(weakTransform); +} + +void CardTransitionController::CreateCardTranslateAnimation(const WeakPtr& weakTransform, + const Offset& globalOffset, const Offset& marginOffset) +{ + auto pipelineContext = context_.Upgrade(); + if (!pipelineContext) { + LOGE("create card translate animation failed. pipeline is null."); + return; + } + Offset startOffset = (event_ == TransitionEvent::PUSH_START) ? Offset() : Offset() - (globalOffset + marginOffset); + Offset endOffset = (event_ == TransitionEvent::PUSH_START) ? Offset() - (globalOffset + marginOffset) : Offset(); + auto offsetAnimation = AceType::MakeRefPtr>(startOffset, endOffset, Curves::FRICTION); + offsetAnimation->AddListener([weakTransform](const Offset& offset) { + auto transform = weakTransform.Upgrade(); + if (transform) { + transform->Translate(Dimension(offset.GetX()), Dimension(offset.GetY())); + } + }); + controller_->AddInterpolator(offsetAnimation); +} + +void CardTransitionController::CreateCardScaleAnimation(const WeakPtr& weakTransform, + const RRect& rrect) +{ + auto pipelineContext = context_.Upgrade(); + if (!pipelineContext) { + LOGE("create card scale animation failed. pipeline is null."); + return; + } + auto transform = weakTransform.Upgrade(); + if (!transform) { + LOGE("create card scale animation failed. transform is null."); + return; + } + auto width = rrect.Width(); + if (NearEqual(width, 0.0)) { + LOGE("create card animation failed. width is zero."); + return; + } + transform->SetDisableClickEffect(true); + transform->ResetTransform(); + transform->SetTransformOrigin(Dimension(), Dimension()); + transform->MarkNeedUpdateOrigin(); + + double startScale = (event_ == TransitionEvent::PUSH_START) ? 1.0 : pipelineContext->GetRootWidth() / width; + double endScale = (event_ == TransitionEvent::PUSH_START) ? pipelineContext->GetRootWidth() / width : 1.0; + auto scaleAnimation = AceType::MakeRefPtr>(startScale, endScale, Curves::FRICTION); + scaleAnimation->AddListener([weakTransform](double value) { + auto transform = weakTransform.Upgrade(); + if (transform) { + transform->Scale(value); + } + }); + controller_->AddInterpolator(scaleAnimation); +} + +void CardTransitionController::CreateCardOpacityAnimation(RefPtr& displayRender) +{ + auto opacityAnimation = AceType::MakeRefPtr>(); + if (event_ == TransitionEvent::PUSH_START) { + auto opacityKeyframe1 = AceType::MakeRefPtr>(0.0f, 255); + auto opacityKeyframe2 = AceType::MakeRefPtr>(OPACITY_CHANGE_END, 0); + opacityKeyframe2->SetCurve(Curves::SHARP); + auto opacityKeyframe3 = AceType::MakeRefPtr>(1.0f, 0); + opacityAnimation->AddKeyframe(opacityKeyframe1); + opacityAnimation->AddKeyframe(opacityKeyframe2); + opacityAnimation->AddKeyframe(opacityKeyframe3); + } else { + auto opacityKeyframe1 = AceType::MakeRefPtr>(0.0f, 0); + auto opacityKeyframe2 = AceType::MakeRefPtr>(OPACITY_CHANGE_START, 0); + auto opacityKeyframe3 = AceType::MakeRefPtr>(1.0f, 255); + opacityKeyframe3->SetCurve(Curves::SHARP); + opacityAnimation->AddKeyframe(opacityKeyframe1); + opacityAnimation->AddKeyframe(opacityKeyframe2); + opacityAnimation->AddKeyframe(opacityKeyframe3); + } + opacityAnimation->AddListener([displayWeak = AceType::WeakClaim(AceType::RawPtr(displayRender))](uint8_t value) { + auto display = displayWeak.Upgrade(); + if (display) { + display->UpdateOpacity(value); + } + }); + controller_->AddInterpolator(opacityAnimation); +} + +void CardTransitionController::CreateCardListAnimation(const RefPtr& renderNode) +{ + auto renderListItem = AceType::DynamicCast(renderNode); + if (!renderListItem) { + LOGW("list item is null"); + return; + } + auto height = renderListItem->GetLayoutSize().Height(); + auto start = (event_ == TransitionEvent::PUSH_START) ? 0.0 : height; + auto end = (event_ == TransitionEvent::PUSH_START) ? height : 0.0; + auto heightAnimation = AceType::MakeRefPtr>(start, end, Curves::FRICTION); + auto listItemWeak = AceType::WeakClaim(AceType::RawPtr(renderListItem)); + heightAnimation->AddListener([listItemWeak](double value) { + auto renderListItem = listItemWeak.Upgrade(); + if (renderListItem) { + renderListItem->RunCardTransitionAnimation(value); + } + }); + controller_->AddInterpolator(heightAnimation); + controller_->AddStopListener([listItemWeak] { + auto renderListItem = listItemWeak.Upgrade(); + if (renderListItem) { + renderListItem->StopCardTransitionAnimation(); + } + }); +} + +void CardTransitionController::CreateExternalAnimation(double height, double cardOffsetY) +{ + auto pageSrc = (event_ == TransitionEvent::PUSH_START) ? pageSrc_.Upgrade() : pageDest_.Upgrade(); + if (!pageSrc) { + return; + } + const auto& transformMap = pageSrc->GetCardTransitionMap(); + for (auto& item : transformMap) { + auto& transformWeak = item.second; + auto transformElement = transformWeak.Upgrade(); + if (!transformElement) { + continue; + } + auto transformRender = AceType::DynamicCast(transformElement->GetRenderNode()); + if (!transformRender) { + continue; + } + auto transformOffsetY = transformRender->GetGlobalOffset().GetY(); + if (NearEqual(transformOffsetY, cardOffsetY)) { + continue; + } + auto shiftHeight = height; + if (transformOffsetY < cardOffsetY) { + shiftHeight = -height; + } + auto start = (event_ == TransitionEvent::PUSH_START) ? 0.0 : shiftHeight; + auto end = (event_ == TransitionEvent::PUSH_START) ? shiftHeight : 0.0; + auto positionAnimation = AceType::MakeRefPtr>(start, end, Curves::FRICTION); + auto weakTransform = AceType::WeakClaim(AceType::RawPtr(transformRender)); + positionAnimation->AddListener([weakTransform](double value) { + auto transform = weakTransform.Upgrade(); + if (transform) { + transform->ResetTransform(); + transform->Translate(Dimension(), Dimension(value)); + } + }); + controller_->AddInterpolator(positionAnimation); + controller_->AddStopListener([weakTransform, event = event_] { + auto transform = weakTransform.Upgrade(); + if (transform && event == TransitionEvent::PUSH_START) { + transform->ResetTransform(); + } + }); + } +} + +void CardTransitionController::AddPrepareListener(const WeakPtr& weakTransform) +{ + controller_->AddPrepareListener([weakTransform, weakContext = context_, weak = AceType::WeakClaim(this)]() { + auto context = weakContext.Upgrade(); + auto cardTransition = weak.Upgrade(); + auto transform = weakTransform.Upgrade(); + if (context && cardTransition && transform) { + auto currentTimestamp = context->GetTimeFromExternalTimer(); + if (cardTransition->currentTimestamp_ != currentTimestamp || cardTransition->currentTimestamp_ == 0) { + transform->ResetTransform(); + cardTransition->currentTimestamp_ = currentTimestamp; + } + } + }); +} + +void CardTransitionController::AddStopListener(const WeakPtr& weakTransform) +{ + controller_->AddStopListener([weakTransform] { + auto transform = weakTransform.Upgrade(); + if (transform) { + transform->ResetTransform(); + transform->SetTransformOrigin(Dimension(transform->GetLayoutSize().Width() * 0.5), + Dimension(transform->GetLayoutSize().Height() * 0.5)); + transform->MarkNeedUpdateOrigin(); + transform->SetDisableClickEffect(false); + } + }); +} + +RefPtr CardTransitionController::GetCardTransformElement(const RefPtr& element) +{ + auto childElement = element->GetFirstChild(); + while (childElement) { + auto composedElement = AceType::DynamicCast(childElement); + if (composedElement) { + return nullptr; + } + auto transformElement = AceType::DynamicCast(childElement); + if (transformElement) { + return transformElement; + } + childElement = childElement->GetFirstChild(); + } + return nullptr; +} + +RRect CardTransitionController::GetCardRect(const ComposeId& composeId) const +{ + auto pipelineContext = context_.Upgrade(); + if (!pipelineContext) { + LOGE("get card rect failed. pipeline is null."); + return RRect(); + } + auto cardComposeElement = pipelineContext->GetComposedElementById(composeId); + if (!cardComposeElement) { + return RRect(); + } + auto renderListItem = AceType::DynamicCast(cardComposeElement->GetRenderNode()); + if (!renderListItem) { + LOGW("list item is null"); + return RRect(); + } + return renderListItem->GetRRect(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/animation/card_transition_controller.h b/frameworks/core/animation/card_transition_controller.h new file mode 100644 index 00000000..67b8473e --- /dev/null +++ b/frameworks/core/animation/card_transition_controller.h @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_CARD_TRANSITION_CONTROLLER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_CARD_TRANSITION_CONTROLLER_H + +#include "base/memory/ace_type.h" +#include "core/animation/animation_pub.h" +#include "core/components/page/page_element.h" +#include "core/components/transform/render_transform.h" +#include "core/pipeline/pipeline_context.h" + +namespace OHOS::Ace { + +class Animator; + +class CardTransitionController : public AceType { +DECLARE_ACE_TYPE(CardTransitionController, AceType); + +public: + explicit CardTransitionController(const WeakPtr& context); + ~CardTransitionController() override = default; + void RegisterTransitionListener(); + RRect GetCardRect(const ComposeId& composeId) const; + + const RefPtr& GetAnimator() const + { + return controller_; + } + +private: + void PrepareTransition(); + void CreateCardAnimation(const RefPtr& cardComposeElement, const Offset& globalOffset, const RRect& rrect); + void CreateCardOpacityAnimation(RefPtr& displayRender); + void CreateCardTranslateAnimation(const WeakPtr& weakTransform, const Offset& globalOffset, + const Offset& marginOffset); + void CreateCardScaleAnimation(const WeakPtr& weakTransform, const RRect& rrect); + void CreateCardListAnimation(const RefPtr& renderNode); + void CreateExternalAnimation(double height, double cardOffsetY); + RefPtr GetCardTransformElement(const RefPtr& element); + void AddPrepareListener(const WeakPtr& weakTransform); + void AddStopListener(const WeakPtr& weakTransform); + + WeakPtr context_; + WeakPtr pageDest_; + WeakPtr pageSrc_; + RefPtr controller_; + TransitionEvent event_ { TransitionEvent::PUSH_START }; + uint64_t currentTimestamp_ = 0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_CARD_TRANSITION_CONTROLLER_H diff --git a/frameworks/core/animation/cubic_curve.cpp b/frameworks/core/animation/cubic_curve.cpp new file mode 100644 index 00000000..5bed39a1 --- /dev/null +++ b/frameworks/core/animation/cubic_curve.cpp @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/animation/cubic_curve.h" + +namespace OHOS::Ace { + +CubicCurve::CubicCurve(const float x0, const float y0, const float x1, const float y1) + : x0_(x0), y0_(y0), x1_(x1), y1_(y1) +{} + +float CubicCurve::MoveInternal(float time) +{ + // let P0 = (0,0), P3 = (1,1) + float start = 0.0f; + float end = 1.0f; + while (true) { + float midpoint = (start + end) / 2; + float estimate = CalculateCubic(x0_, x1_, midpoint); + + if (NearEqual(time, estimate, cubicErrorBound_)) { + return CalculateCubic(y0_, y1_, midpoint); + } + + if (estimate < time) { + start = midpoint; + } else { + end = midpoint; + } + } +} + +float CubicCurve::CalculateCubic(float a, float b, float m) +{ + return 3.0f * a * (1.0f - m) * (1.0f - m) * m + 3.0f * b * (1.0f - m) * m * m + m * m * m; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/animation/cubic_curve.h b/frameworks/core/animation/cubic_curve.h new file mode 100644 index 00000000..6b3b6bad --- /dev/null +++ b/frameworks/core/animation/cubic_curve.h @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_CUBIC_CURVE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_CUBIC_CURVE_H + +#include "core/animation/curve.h" + +namespace OHOS::Ace { + +// Third-order bezier curve. Formula as follows: +// B(m) = (1-m)^3*P0 + 3m(1-m)^2*P1 + 3m^2*P2 + m^3*P3, +// where P0 = (0,0), P1 = (x0_, y0_), P2 = (x1_, y1_), P3 = (1,1) +// so Bx(m) = 3m(1-m)^2*x0_ + 3m^2*x1_ + m^3 +// By(m) = 3m(1-m)^2*y0_ + 3m^2*y1_ + m^3 +// in function MoveInternal, assume time as Bx(m), we let Bx(m) approaching time, and we can get m and the output By(m) +class CubicCurve : public Curve { +public: + CubicCurve(float x0, float y0, float x1, float y1); + ~CubicCurve() override = default; + + float MoveInternal(float time) override; + +private: + // Bx(m) or By(m) = 3m(1-m)^2*a + 3m^2*b + m^3, where a = x0_ ,b = x1_ or a = y0_ ,b = y1_ + static float CalculateCubic(float a, float b, float m); + + const float cubicErrorBound_ = 0.001f; // Control curve accuracy + const float x0_; // X-axis of the first point (P1) + const float y0_; // Y-axis of the first point (P1) + const float x1_; // X-axis of the second point (P2) + const float y1_; // Y-axis of the second point (P2) +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_CUBIC_CURVE_H diff --git a/frameworks/core/animation/curve.h b/frameworks/core/animation/curve.h new file mode 100644 index 00000000..bb5df5e4 --- /dev/null +++ b/frameworks/core/animation/curve.h @@ -0,0 +1,161 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_CURVE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_CURVE_H + +#include "base/log/log.h" +#include "base/memory/ace_type.h" +#include "base/utils/macros.h" +#include "base/utils/utils.h" + +namespace OHOS::Ace { + +constexpr double SQUARE = 2.0; + +// The running time of the curve needs to be normalized to the interval of 0.0 to 1.0; +// Relatively, the corresponding value of the curve also needs to be normalized to the interval of 0.0 to 1.0; +class Curve : public AceType { + DECLARE_ACE_TYPE(Curve, AceType); + +public: + Curve() = default; + ~Curve() override = default; + + // Returns the value at specific time. + // Notice: The value of time must be between 0.0 and 1.0 since the curve uses normalized timestamp. + float Move(float time) + { + // time always between 0.0 and 1.0 + return MoveInternal(time); + } + + // Each subclass needs to override this method to implement motion in the 0.0 to 1.0 time range. + virtual float MoveInternal(float time) = 0; +}; + +// The reverse curve is used to convert the direction of motion. +// It uses the 1.0->0.0 motion of the child curve to achieve the reverse purpose. +class ReverseCurve final : public Curve { +public: + explicit ReverseCurve(const RefPtr& curve) : curve_(curve) {} + ~ReverseCurve() override = default; + + float MoveInternal(float time) final + { + if (!curve_) { + LOGE("Curve is null, illegal constructor input parameter"); + return 0.0f; + } + + if (time > 1.0f || time < 0.0f) { + return curve_->MoveInternal(0.0f); + } + return curve_->MoveInternal(1.0f - time); + } + +private: + const RefPtr curve_; +}; + +class ComplementaryCurve final : public Curve { +public: + explicit ComplementaryCurve(const RefPtr& curve) : curve_(curve) {} + ~ComplementaryCurve() override = default; + + float MoveInternal(float time) final + { + if (!curve_) { + LOGE("Curve is null, illegal constructor input parameter"); + return 0.0f; + } + + if (time > 1.0f || time < 0.0f) { + return curve_->MoveInternal(0.0f); + } + return 1.0f - curve_->MoveInternal(time); + } + +private: + const RefPtr curve_; +}; + +class DecelerationCurve final : public Curve { +public: + float MoveInternal(float time) override + { + return 1.0f - std::pow(1.0f - time, SQUARE); + } +}; + +class LinearCurve final : public Curve { +public: + float MoveInternal(float time) override + { + return time; + } +}; + +class SineCurve final : public Curve { +public: + float MoveInternal(float time) override + { + static constexpr float PI = 3.14f; + return std::sin(PI * time / 2.0f); // half period + } +}; + +class ElasticsCurve final : public Curve { +public: + explicit ElasticsCurve(float tension) : tension_(tension) {}; + ~ElasticsCurve() override = default; + float MoveInternal(float time) override + { + float para = time - 1.0f; + return para * para * ((tension_ + 1.0f) * para + tension_) + 1.0f; + } + +private: + float tension_ = 2.0f; // Default Elastics tension. +}; + +enum class StepsCurvePosition { + START, + END, +}; + +class StepsCurve : public Curve { +public: + explicit StepsCurve(int32_t steps, StepsCurvePosition position = StepsCurvePosition::START) + : steps_(steps <= 0 ? 1 : steps), position_(position) {}; + ~StepsCurve() override = default; + + float MoveInternal(float time) override + { + auto currentStep = static_cast(time * steps_); + if (position_ == StepsCurvePosition::START) { + currentStep++; + } + return static_cast(currentStep) / steps_; + } + +private: + int32_t steps_; + const StepsCurvePosition position_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_CURVE_H diff --git a/frameworks/core/animation/curve_animation.h b/frameworks/core/animation/curve_animation.h new file mode 100644 index 00000000..fb2b01f8 --- /dev/null +++ b/frameworks/core/animation/curve_animation.h @@ -0,0 +1,123 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_CURVE_ANIMATION_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_CURVE_ANIMATION_H + +#include "core/animation/animation.h" +#include "core/animation/curve.h" +#include "core/animation/curves.h" +#include "core/animation/evaluator.h" + +namespace OHOS::Ace { + +template +class CurveAnimation : public Animation { +public: + CurveAnimation(const T& begin, const T& end, const RefPtr& curve) + : begin_(begin), end_(end), currentValue_(begin) + { + if (curve) { + curve_ = curve; + } else { + LOGW("curve is empty when construct animation, use EASE as default."); + curve_ = Curves::EASE; + } + reverseCurve_ = curve_; + } + + ~CurveAnimation() override = default; + + const T& GetValue() const override + { + return currentValue_; + } + + void SetEvaluator(const RefPtr>& evaluator) + { + if (!evaluator) { + LOGE("input evaluator is null, use linear evaluator as default."); + return; + } + evaluator_ = evaluator; + } + + void SetCurve(const RefPtr& curve) override + { + if (!curve) { + LOGE("set curve failed. curve is null."); + return; + } + curve_ = curve; + reverseCurve_ = curve; + } + + void SetStart(const T& value) override + { + begin_ = value; + currentValue_ = value; + } + + T GetEndValue() override + { + return end_; + } + + void SetReverseCurve(const RefPtr& reverseCurve) + { + if (!reverseCurve) { + LOGE("set reverse curve failed. reverse curve is null."); + return; + } + reverseCurve_ = reverseCurve; + } + +private: + // Use the normalized time [0.0, 1.0] to get the current data value. + // Map the value of the curve motion to the real data range. + void Calculate(float time, const RefPtr& curve) + { + if (NearZero(time)) { + currentValue_ = begin_; + return; + } + if (NearEqual(time, 1.0)) { + currentValue_ = end_; + return; + } + currentValue_ = evaluator_->Evaluate(begin_, end_, curve->Move(time)); + } + + void OnNormalizedTimestampChanged(float normalized, bool reverse) override + { + if (normalized < NORMALIZED_DURATION_MIN || normalized > NORMALIZED_DURATION_MAX) { + LOGE("normalized time check failed. normalized: %{public}f", normalized); + return; + } + Calculate(normalized, reverse ? reverseCurve_ : curve_); + ValueListenable::NotifyListener(currentValue_); + } + + T begin_; + T end_; + T currentValue_; + RefPtr curve_; + RefPtr reverseCurve_; + RefPtr> evaluator_ = AceType::MakeRefPtr>(); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_CURVE_ANIMATION_H diff --git a/frameworks/core/animation/curves.cpp b/frameworks/core/animation/curves.cpp new file mode 100644 index 00000000..3accea4a --- /dev/null +++ b/frameworks/core/animation/curves.cpp @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/animation/curves.h" + +namespace OHOS::Ace { + +const RefPtr Curves::DECELE = AceType::MakeRefPtr(); +const RefPtr Curves::LINEAR = AceType::MakeRefPtr(); +const RefPtr Curves::SINE = AceType::MakeRefPtr(); +const RefPtr Curves::EASE = AceType::MakeRefPtr(0.25f, 0.1f, 0.25f, 1.0f); +const RefPtr Curves::EASE_IN = AceType::MakeRefPtr(0.42f, 0.0f, 1.0f, 1.0f); +const RefPtr Curves::EASE_OUT = AceType::MakeRefPtr(0.0f, 0.0f, 0.58f, 1.0f); +const RefPtr Curves::EASE_IN_OUT = AceType::MakeRefPtr(0.42f, 0.0f, 0.58f, 1.0f); +const RefPtr Curves::FAST_OUT_SLOW_IN = AceType::MakeRefPtr(0.4f, 0.0f, 0.2f, 1.0f); +const RefPtr Curves::LINEAR_OUT_SLOW_IN = AceType::MakeRefPtr(0.0f, 0.0f, 0.2f, 1.0f); +const RefPtr Curves::FAST_OUT_LINEAR_IN = AceType::MakeRefPtr(0.4f, 0.0f, 1.0f, 1.0f); +const RefPtr Curves::FRICTION = AceType::MakeRefPtr(0.2f, 0.0f, 0.2f, 1.0f); +const RefPtr Curves::EXTREME_DECELERATION = AceType::MakeRefPtr(0.0f, 0.0f, 0.0f, 1.0f); +const RefPtr Curves::SHARP = AceType::MakeRefPtr(0.33f, 0.0f, 0.67f, 1.0f); +const RefPtr Curves::RHYTHM = AceType::MakeRefPtr(0.7f, 0.0f, 0.2f, 1.0f); +const RefPtr Curves::SMOOTH = AceType::MakeRefPtr(0.4f, 0.0f, 0.4f, 1.0f); +const RefPtr Curves::ANTICIPATE = AceType::MakeRefPtr(2.0f); +const RefPtr Curves::MAGNETIC = AceType::MakeRefPtr(0.8f, 0.0f, 1.0f, 0.6f); +const RefPtr Curves::ELASTICS = AceType::MakeRefPtr(2.0f); + +} // namespace OHOS::Ace diff --git a/frameworks/core/animation/curves.h b/frameworks/core/animation/curves.h new file mode 100644 index 00000000..c62d8aa3 --- /dev/null +++ b/frameworks/core/animation/curves.h @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_CURVES_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_CURVES_H + +#include "base/utils/macros.h" +#include "core/animation/anticipate_curve.h" +#include "core/animation/cubic_curve.h" + +namespace OHOS::Ace { + +class ACE_EXPORT Curves { +public: + Curves() = delete; + ~Curves() = default; + static const RefPtr DECELE; + static const RefPtr LINEAR; + static const RefPtr SINE; + static const RefPtr EASE; + static const RefPtr EASE_IN; + static const RefPtr EASE_OUT; + static const RefPtr EASE_IN_OUT; + static const RefPtr FAST_OUT_SLOW_IN; + static const RefPtr LINEAR_OUT_SLOW_IN; + static const RefPtr FAST_OUT_LINEAR_IN; + static const RefPtr FRICTION; + static const RefPtr EXTREME_DECELERATION; + static const RefPtr SHARP; + static const RefPtr RHYTHM; + static const RefPtr SMOOTH; + static const RefPtr ANTICIPATE; + static const RefPtr MAGNETIC; + static const RefPtr ELASTICS; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_CURVES_H diff --git a/frameworks/core/animation/evaluator.h b/frameworks/core/animation/evaluator.h new file mode 100644 index 00000000..21a7c053 --- /dev/null +++ b/frameworks/core/animation/evaluator.h @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_EVALUATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_EVALUATOR_H + +#include + +#include "base/memory/ace_type.h" +#include "core/components/common/properties/color.h" + +namespace OHOS::Ace { + +template +class Evaluator : public AceType { +public: + virtual T Evaluate(const T& begin, const T& end, float fraction) = 0; +}; + +template +class LinearEvaluator : public Evaluator { +public: + LinearEvaluator() = default; + + ~LinearEvaluator() override = default; + + T Evaluate(const T& begin, const T& end, float fraction) override + { + return begin + (end - begin) * fraction; + } +}; + +class ColorEvaluator : public Evaluator { +public: + ColorEvaluator() = default; + + ~ColorEvaluator() override = default; + + Color Evaluate(const Color& begin, const Color& end, float fraction) override + { + // convert begin color from ARGB to linear + double beginLinearRed = 0.0; + double beginLinearGreen = 0.0; + double beginLinearBlue = 0.0; + double beginAlpha = begin.GetAlpha(); + ConvertGammaToLinear(begin, beginLinearRed, beginLinearGreen, beginLinearBlue); + + // convert end color from ARGB to linear + double endLinearRed = 0.0; + double endLinearGreen = 0.0; + double endLinearBlue = 0.0; + double endAlpha = end.GetAlpha(); + ConvertGammaToLinear(end, endLinearRed, endLinearGreen, endLinearBlue); + + // evaluate the result + double linearRed = beginLinearRed + (endLinearRed - beginLinearRed) * fraction; + double linearGreen = beginLinearGreen + (endLinearGreen - beginLinearGreen) * fraction; + double linearBlue = beginLinearBlue + (endLinearBlue - beginLinearBlue) * fraction; + double alpha = beginAlpha + (endAlpha - beginAlpha) * fraction; + + return ConvertLinearToGamma(alpha, linearRed, linearGreen, linearBlue); + } + +private: + const double GAMMA_FACTOR = 2.2; + + double ConvertGammaToLinear(uint8_t value) + { + return pow(value, GAMMA_FACTOR); + } + + void ConvertGammaToLinear(const Color& gammaColor, double& linearRed, double& linearGreen, double& linearBlue) + { + linearRed = ConvertGammaToLinear(gammaColor.GetRed()); + linearGreen = ConvertGammaToLinear(gammaColor.GetGreen()); + linearBlue = ConvertGammaToLinear(gammaColor.GetBlue()); + } + + uint8_t ConvertLinearToGamma(double value) + { + return std::clamp(static_cast(std::pow(value, 1.0 / GAMMA_FACTOR)), 0, UINT8_MAX); + } + + Color ConvertLinearToGamma(double alpha, double linearRed, double linearGreen, double linearBlue) + { + uint8_t gammaRed = ConvertLinearToGamma(linearRed); + uint8_t gammaGreen = ConvertLinearToGamma(linearGreen); + uint8_t gammaBlue = ConvertLinearToGamma(linearBlue); + uint8_t gammaAlpha = std::clamp(static_cast(alpha), 0, UINT8_MAX); + + return Color::FromARGB(gammaAlpha, gammaRed, gammaGreen, gammaBlue); + } +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_EVALUATOR_H diff --git a/frameworks/core/animation/flush_event.h b/frameworks/core/animation/flush_event.h new file mode 100644 index 00000000..7701e615 --- /dev/null +++ b/frameworks/core/animation/flush_event.h @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_FLUSH_EVENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_FLUSH_EVENT_H + +#include "base/memory/ace_type.h" + +namespace OHOS::Ace { + +class FlushEvent : public virtual AceType { + DECLARE_ACE_TYPE(FlushEvent, AceType); + +public: + // Will be called before flush every vsync. + virtual void OnPreFlush() {}; + + // Will be called after flush every vsync. + virtual void OnPostFlush() = 0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_FLUSH_EVENT_H diff --git a/frameworks/core/animation/friction_motion.cpp b/frameworks/core/animation/friction_motion.cpp new file mode 100644 index 00000000..8f780624 --- /dev/null +++ b/frameworks/core/animation/friction_motion.cpp @@ -0,0 +1,130 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/animation/friction_motion.h" + +#include "base/log/log.h" +#include "base/utils/utils.h" + +namespace OHOS::Ace { +namespace { + +constexpr float UNIT_CONVERT = 1000.0f; +constexpr float FRICTION_SCALE = -4.2f; +constexpr float DEFAULT_THRESHOLD = 0.75f; + +} // namespace + +FrictionMotion::FrictionMotion(double friction, double initPosition, double initVelocity) +{ + Reset(friction, initPosition, initVelocity); +} + +void FrictionMotion::Reset(double friction, double initPosition, double initVelocity, double threshold) +{ + if (!IsValid(friction)) { + return; + } + friction_ = friction * FRICTION_SCALE; + initVelocity_ = std::abs(initVelocity); + currentTime_ = 0.0; + initPosition_ = initPosition; + valueThreshold_ = DEFAULT_THRESHOLD; + velocityThreshold_ = valueThreshold_ * threshold; + + if (NearZero(initVelocity_)) { + signum_ = 0.0; + finalTime_ = 0.0; + } else { + signum_ = GreatNotEqual(initVelocity, 0.0) ? 1.0 : -1.0; + finalTime_ = UNIT_CONVERT * std::log(velocityThreshold_ / initVelocity_) / friction_; + } + finalTime_ = std::max(finalTime_, 0.0); + finalPosition_ = GetPosition(finalTime_ / UNIT_CONVERT); +} + +bool FrictionMotion::IsValid(double friction) const +{ + if (friction < 0.0 || NearZero(friction)) { + LOGE("Invalid friction:%{public}lf.", friction); + return false; + } + return true; +} + +void FrictionMotion::Move(float offsetTime) +{ + // change millisecond to second. + currentTime_ = offsetTime / UNIT_CONVERT; +} + +double FrictionMotion::GetPosition(float offsetTime) const +{ + return initPosition_ + signum_ * (initVelocity_ / friction_) * (std::exp(friction_ * offsetTime) - 1.0); +} + +double FrictionMotion::GetVelocityByFinalPosition(double final, double threshold) const +{ + return valueThreshold_ * threshold * signum_ - (final - initPosition_) * friction_; +} + +double FrictionMotion::GetVelocity(float offsetTime) const +{ + return signum_ * initVelocity_ * std::exp(friction_ * offsetTime); +} + +double FrictionMotion::GetCurrentPosition() +{ + return GetPosition(currentTime_); +} + +double FrictionMotion::GetCurrentVelocity() +{ + return GetVelocity(currentTime_); +} + +bool FrictionMotion::IsCompleted() +{ + return NearZero(GetCurrentVelocity(), velocityThreshold_) || + NearEqual(finalPosition_, GetCurrentPosition(), 1.0); +} + +double FrictionMotion::GetFinalPosition() const +{ + return finalPosition_; +} + +bool FrictionMotion::GetTimeByPosition(double position, double& time) const +{ + time = 0.0; + if (NearZero(initVelocity_)) { + return false; + } + + double rangeStart = 0.0; + double rangeEnd = finalPosition_; + if (finalPosition_ < 0.0) { + rangeStart = finalPosition_; + rangeEnd = 0.0; + } + if (position < rangeStart || position > rangeEnd) { + return false; + } + // Deduced by formula of Func(GetPosition) + time = std::log(position * friction_ / initVelocity_ + 1.0) / friction_; + return true; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/animation/friction_motion.h b/frameworks/core/animation/friction_motion.h new file mode 100644 index 00000000..410b1946 --- /dev/null +++ b/frameworks/core/animation/friction_motion.h @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_FRICTION_MOTION_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_FRICTION_MOTION_H + +#include "core/animation/motion.h" + +namespace OHOS::Ace { + +constexpr float DEFAULT_MULTIPLIER = 60.0f; + +class FrictionMotion : public Motion { +public: + FrictionMotion(double friction, double initPosition, double initVelocity); + ~FrictionMotion() override = default; + + // Called when do a new friction motion + void Reset(double friction, double initPosition, double initVelocity, double threshold = DEFAULT_MULTIPLIER); + + double GetCurrentPosition() override; + double GetCurrentVelocity() override; + bool IsCompleted() override; + + double GetVelocityByFinalPosition(double final, double threshold = DEFAULT_MULTIPLIER) const; + // Get the Position and Velocity by offsetTime(Unit:second). + double GetPosition(float offsetTime) const; + double GetVelocity(float offsetTime) const; + + // Trigger motion in each vsync timestamp(Unit:millisecond). + void Move(float offsetTime) override; + + double GetFinalPosition() const; + bool GetTimeByPosition(double position, double& time) const; + +private: + bool IsValid(double friction) const; + + double friction_ { 1.0 }; + double initVelocity_ { 0.0 }; + double signum_ { 0.0 }; // Rules: V < 0 [-1], V = 0 [0], V > 0 [1]. + double currentTime_ { 0.0 }; + double valueThreshold_ { 0.0 }; + double velocityThreshold_ { 0.0 }; + double finalTime_ { 0.0 }; + double finalPosition_ { 0.0 }; + double initPosition_ { 0.0 }; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_FRICTION_MOTION_H diff --git a/frameworks/core/animation/interpolator.h b/frameworks/core/animation/interpolator.h new file mode 100644 index 00000000..09055a98 --- /dev/null +++ b/frameworks/core/animation/interpolator.h @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_INTERPOLATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_INTERPOLATOR_H + +#include "base/log/log.h" +#include "core/animation/animation_pub.h" +#include "core/animation/time_event.h" + +namespace OHOS::Ace { + +class Interpolator : public TimeEvent { + DECLARE_ACE_TYPE(Interpolator, TimeEvent); + +public: + Interpolator() = default; + ~Interpolator() override = default; + + // interpolate animations must have duration, and accept normalized timestamp. + // so far, do not support play in sequence, always return 1.0, besides picture animation. + float GetDuration() const + { + return duration_; + } + + void SetDuration(float duration) + { + duration_ = duration; + } + + // Interpolator use OnNormalizedTimestampChanged instead. + void OnTimestampChanged(float timestamp, float normalizedTime, bool reverse) final + { + if (normalizedTime < NORMALIZED_DURATION_MIN || normalizedTime > NORMALIZED_DURATION_MAX) { + LOGE("Interpolator only accepts normalized time, invalid time: %{public}f", normalizedTime); + return; + } + // just pass normalized time to subclass. + OnNormalizedTimestampChanged(normalizedTime, reverse); + } + + // when a Interpolator starts, animator will notify it through this interface. + virtual void OnNormalizedTimestampChanged(float normalized, bool reverse) = 0; + + virtual void OnInitNotify(float normalizedTime, bool reverse) = 0; + +protected: + // so far, do not support play multi interpolate animations in sequence. so always set it to 1.0 + // but do not change it to const, picture animation's duration may be not equals 1.0 + // and this variable will change to modifiable when support play animations in sequence. + float duration_ { NORMALIZED_DURATION_MAX }; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_INTERPOLATOR_H diff --git a/frameworks/core/animation/keyframe.h b/frameworks/core/animation/keyframe.h new file mode 100644 index 00000000..0296d1a4 --- /dev/null +++ b/frameworks/core/animation/keyframe.h @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_KEYFRAME_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_KEYFRAME_H + +#include "base/memory/ace_type.h" +#include "core/animation/curve.h" + +namespace OHOS::Ace { + +template +class Keyframe : public AceType { +public: + // keyTime is normalized time. + Keyframe(float keyTime, const T& keyValue) : keyTime_(keyTime), keyValue_(keyValue) {} + + ~Keyframe() override = default; + + bool IsValid() const + { + if (keyTime_ < NORMALIZED_DURATION_MIN || keyTime_ > NORMALIZED_DURATION_MAX) { + LOGE("invalid normalized key time: %{public}f", keyTime_); + return false; + } + return true; + } + + float GetKeyTime() const + { + return keyTime_; + } + + void SetKeyValue(const T& keyValue) + { + keyValue_ = keyValue; + } + + const T& GetKeyValue() const + { + return keyValue_; + } + + void SetCurve(const RefPtr& curve) + { + if (!curve) { + LOGE("set curve failed, input curve is null."); + return; + } + curve_ = curve; + } + + const RefPtr& GetCurve() const + { + return curve_; + } + +private: + const float keyTime_ { 0.0f }; + T keyValue_; + RefPtr curve_ { Curves::EASE }; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_KEYFRAME_H diff --git a/frameworks/core/animation/keyframe_animation.h b/frameworks/core/animation/keyframe_animation.h new file mode 100644 index 00000000..13e68987 --- /dev/null +++ b/frameworks/core/animation/keyframe_animation.h @@ -0,0 +1,162 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_KEYFRAME_ANIMATION_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_KEYFRAME_ANIMATION_H + +#include + +#include "core/animation/animation.h" +#include "core/animation/curve.h" +#include "core/animation/curves.h" +#include "core/animation/evaluator.h" +#include "core/animation/keyframe.h" + +namespace OHOS::Ace { + +template +class KeyframeAnimation : public Animation { +public: + KeyframeAnimation() = default; + + ~KeyframeAnimation() override = default; + + void AddKeyframe(const RefPtr>& keyframe) + { + if (!keyframe) { + LOGE("add key frame failed. empty keyframe."); + return; + } + if (!keyframe->IsValid()) { + LOGE("add key frame failed. invalid keyframe."); + return; + } + + keyframes_.emplace_back(keyframe); + ++keyframeNum_; + } + + const T& GetValue() const override + { + return currentValue_; + } + + const std::list>>& GetKeyframes() const + { + return keyframes_; + } + + void SetEvaluator(const RefPtr>& evaluator) + { + if (!evaluator) { + LOGE("input evaluator is null, use linear evaluator as default."); + return; + } + evaluator_ = evaluator; + } + + void SetCurve(const RefPtr& curve) override + { + if (!curve) { + LOGE("set curve failed. curve is null."); + return; + } + for (auto& keyframe : keyframes_) { + keyframe->SetCurve(curve); + } + } + + void SetStart(const T& value) override + { + auto keyframe = AceType::MakeRefPtr>(0.0f, value); + if (!keyframe) { + LOGE("add key frame failed. empty keyframe."); + return; + } + if (!keyframe->IsValid()) { + LOGE("add key frame failed. invalid keyframe."); + return; + } + + keyframes_.emplace_front(keyframe); + ++keyframeNum_; + } + + T GetEndValue() override + { + return keyframes_.back()->GetKeyValue(); + } + +private: + void Calculate(float keyTime) + { + if (keyframes_.empty()) { + return; + } + auto begin = keyframes_.front()->GetKeyValue(); + auto end = keyframes_.back()->GetKeyValue(); + // The initial state is maintained when keyTime < 0. + if (keyTime < 0.0f) { + currentValue_ = begin; + return; + } else if (keyTime > 1.0f || keyframeNum_ == 1) { + // The final state is maintained when keyTime > 1 or keyframeNum_ = 1. + currentValue_ = end; + return; + } + auto preKeyframe = keyframes_.front(); + // Iteratively calculate the value between each keyframe. + for (const auto& keyframe : keyframes_) { + if (keyTime < keyframe->GetKeyTime()) { + float preKeyTime = preKeyframe->GetKeyTime(); + if (NearEqual(keyframe->GetKeyTime(), preKeyTime)) { + return; + } + float intervalKeyTime = (keyTime - preKeyTime) / (keyframe->GetKeyTime() - preKeyTime); + auto& curve = keyframe->GetCurve(); + begin = preKeyframe->GetKeyValue(); + end = keyframe->GetKeyValue(); + if (curve) { + currentValue_ = evaluator_->Evaluate(begin, end, curve->Move(intervalKeyTime)); + return; + } else { + currentValue_ = evaluator_->Evaluate(begin, end, Curves::EASE->Move(intervalKeyTime)); + return; + } + } + preKeyframe = keyframe; + } + currentValue_ = end; + } + + void OnNormalizedTimestampChanged(float normalized, bool reverse) override + { + if (normalized < NORMALIZED_DURATION_MIN || normalized > NORMALIZED_DURATION_MAX) { + LOGE("normalized time check failed. normalized: %{public}f", normalized); + return; + } + Calculate(normalized); + ValueListenable::NotifyListener(currentValue_); + } + + T currentValue_ {}; + int32_t keyframeNum_ = 0; + std::list>> keyframes_; + RefPtr> evaluator_ = AceType::MakeRefPtr>(); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_KEYFRAME_ANIMATION_H diff --git a/frameworks/core/animation/motion.h b/frameworks/core/animation/motion.h new file mode 100644 index 00000000..6ccd312c --- /dev/null +++ b/frameworks/core/animation/motion.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_MOTION_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_MOTION_H + +#include "base/utils/listener.h" +#include "core/animation/time_event.h" + +namespace OHOS::Ace { + +class Motion : public TimeEvent, public ValueListenable { + DECLARE_ACE_TYPE(Motion, TimeEvent); + +public: + virtual double GetCurrentPosition() = 0; + virtual double GetCurrentVelocity() = 0; + virtual bool IsCompleted() = 0; + + // Each subclass should override this method to perform motion in each timestamp. + virtual void Move(float offsetTime) = 0; + + // Motion do not have duration, normalizedTime always zero + void OnTimestampChanged(float timestamp, float normalizedTime, bool reverse) final + { + Move(timestamp); + NotifyListener(GetCurrentPosition()); + } +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_MOTION_H diff --git a/frameworks/core/animation/page_transition_listener.h b/frameworks/core/animation/page_transition_listener.h new file mode 100644 index 00000000..d7de961c --- /dev/null +++ b/frameworks/core/animation/page_transition_listener.h @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_PAGE_TRANSITION_LISTENER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_PAGE_TRANSITION_LISTENER_H + +#include + +#include "base/log/log.h" +#include "base/memory/referenced.h" +#include "base/utils/event_callback.h" + +namespace OHOS::Ace { + +// Notify Event when stage handle page event in PostFlush at the same vsync when stage's performBuild happens. +// Because in PushPage scene, the page transition of the Stage needs to know whether this jump has shared transition. +// Further, shared transition needs to know dest page's size after performLayout, So Notify this Event in +// PostFlush. +enum class TransitionEvent { + POP_START, + POP_END, + PUSH_START, + PUSH_END, +}; + +class PageElement; + +class PageTransitionListenable { +public: + using Callback = EventCallback& pageIn, const WeakPtr& pageOut)>; + using CallbackFuncType = Callback::FunctionType; + + PageTransitionListenable() = default; + virtual ~PageTransitionListenable() = default; + + void AddPageTransitionListener(const Callback& callback) + { + callbacks_.emplace(callback.GetId(), callback); + } + + typename Callback::IdType AddPageTransitionListener(const CallbackFuncType& funcObject) + { + Callback callback(funcObject); + AddPageTransitionListener(callback); + return callback.GetId(); + } + + void RemovePageTransitionListener(const Callback& callback) + { + callbacks_.erase(callback.GetId()); + } + + void RemovePageTransitionListener(typename Callback::IdType id) + { + callbacks_.erase(id); + } + + void ClearPageTransitionListeners() + { + callbacks_.clear(); + } + + void NotifyPageTransitionListeners( + const TransitionEvent event, const WeakPtr& pageIn, const WeakPtr& pageOut) const + { + for (auto&& [id, callback] : callbacks_) { + if (callback) { + callback(event, pageIn, pageOut); + } + } + } + +private: + std::unordered_map callbacks_; +}; +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_PAGE_TRANSITION_LISTENER_H diff --git a/frameworks/core/animation/param_transfer.h b/frameworks/core/animation/param_transfer.h new file mode 100644 index 00000000..cf6b9d9f --- /dev/null +++ b/frameworks/core/animation/param_transfer.h @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_PARAM_TRANSFER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_PARAM_TRANSFER_H + +#include "base/memory/ace_type.h" +#include "base/utils/utils.h" + +namespace OHOS::Ace { + +class ParamTransfer : public AceType { + DECLARE_ACE_TYPE(ParamTransfer, AceType); + +public: + explicit ParamTransfer(double value) : value_(value) {} + ~ParamTransfer() override = default; + + static constexpr double CURVE_COEFFICIENT = 0.18; + + // value control value + // delta the distance between current index and control index + virtual double Transfer(double value, int32_t delta) = 0; + + double GetParam() const + { + return value_; + } + + void SetParam(double value) + { + value_ = value; + } + +protected: + double value_ = 0.0; +}; + +// Linear Transfer +class LinearParamTransfer : public ParamTransfer { + DECLARE_ACE_TYPE(LinearParamTransfer, ParamTransfer); + +public: + explicit LinearParamTransfer(double value) : ParamTransfer(value) {} + ~LinearParamTransfer() override = default; + + double Transfer(double value, int32_t delta) override + { + return value - value_ * delta; + } +}; + +// Exponential Transfer +class ExpParamTransfer : public ParamTransfer { + DECLARE_ACE_TYPE(ExpParamTransfer, ParamTransfer); + +public: + explicit ExpParamTransfer(double value) : ParamTransfer(value) {} + ~ExpParamTransfer() override = default; + + double Transfer(double value, int32_t delta) override + { + return std::pow(delta + 1, -value_ * CURVE_COEFFICIENT) * value; + } +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_PARAM_TRANSFER_H diff --git a/frameworks/core/animation/picture_animation.h b/frameworks/core/animation/picture_animation.h new file mode 100644 index 00000000..0c1aa00b --- /dev/null +++ b/frameworks/core/animation/picture_animation.h @@ -0,0 +1,158 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_PICTURE_ANIMATION_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_PICTURE_ANIMATION_H + +#include + +#include "core/animation/animation.h" +#include "core/animation/curve.h" + +namespace OHOS::Ace { + +template +class PictureFrame : public AceType { +public: + PictureFrame() = default; + PictureFrame(float duration, const T& pictureInfo) : duration_(duration), pictureInfo_(pictureInfo) {} + + ~PictureFrame() override = default; + + float GetDuration() const + { + return duration_; + } + const T& GetPictureInfo() const + { + return pictureInfo_; + } + + void UpdateDurationWithScale(float scale) + { + if (scale <= 0.0f) { + LOGE("update picture with scale failed. scale is invalid."); + return; + } + + duration_ /= scale; + LOGD("update with scale. duration: %{public}f, scale: %{public}f", duration_, scale); + } + +private: + float duration_ { 0.0f }; + const T pictureInfo_ {}; +}; + +template +class PictureAnimation : public Animation { +public: + PictureAnimation() = default; + + ~PictureAnimation() override = default; + + // add picture. duration in normalized time. + bool AddPicture(float duration, const T& pictureInfo) + { + if (duration <= NORMALIZED_DURATION_MIN || duration > NORMALIZED_DURATION_MAX) { + LOGE("duration time check failed. duration: %{public}f", duration); + return false; + } + if (pictures_.empty()) { + this->duration_ = 0.0f; + } + LOGD("picture animation: add picture ref, duration: %{public}f", duration); + pictures_.emplace_back(AceType::MakeRefPtr>(duration, pictureInfo)); + this->duration_ += duration; + return true; + } + + void ClearPictures() + { + this->duration_ = 0.0f; + pictures_.clear(); + } + + const T& GetValue() const override + { + return currentPicture_->GetPictureInfo(); + } + + // if total normalized duration of all pictures not equals 1.0, scale it to 1.0 + // usually call it after all pictures had been added. + void AutoScale() + { + if (NearZero(this->duration_)) { + return; + } + if (pictures_.empty()) { + return; + } + + // already equals to 1.0 + if (NearEqual(this->duration_, NORMALIZED_DURATION_MAX)) { + return; + } + + for (const auto& picture : pictures_) { + picture->UpdateDurationWithScale(this->duration_); + } + + LOGD("auto scale. scale: %{public}f", this->duration_); + this->duration_ = NORMALIZED_DURATION_MAX; + } + +private: + void UpdateAndNotifyPicture(const RefPtr>& picture) + { + if (!picture) { + LOGE("update picture is null."); + return; + } + if (currentPicture_ != picture) { + ValueListenable::NotifyListener(picture->GetPictureInfo()); + currentPicture_ = picture; + } + } + + void OnNormalizedTimestampChanged(float normalized, bool revserse) override + { + if (normalized < NORMALIZED_DURATION_MIN || normalized > NORMALIZED_DURATION_MAX) { + LOGE("normalized time check failed. normalized: %{public}f", normalized); + return; + } + if (pictures_.empty()) { + return; + } + + float elapsedPictureTime = 0.0f; + for (const auto& picture : pictures_) { + elapsedPictureTime += picture->GetDuration(); + if (normalized < elapsedPictureTime) { + UpdateAndNotifyPicture(picture); + return; + } + } + // timestampInMillisecond larger than total picture duration + UpdateAndNotifyPicture(pictures_.back()); + } + + RefPtr> currentPicture_ = AceType::MakeRefPtr>(); + std::list>> pictures_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_PICTURE_ANIMATION_H diff --git a/frameworks/core/animation/property_animatable.h b/frameworks/core/animation/property_animatable.h new file mode 100644 index 00000000..c1f3dd88 --- /dev/null +++ b/frameworks/core/animation/property_animatable.h @@ -0,0 +1,201 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_PROPERTY_ANIMATABLE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_PROPERTY_ANIMATABLE_H + +#include + +#include "base/memory/ace_type.h" +#include "core/animation/animation.h" +#include "core/components/common/properties/color.h" +#include "core/components/common/properties/decoration.h" + +namespace OHOS::Ace { + +enum class PropertyAnimatableType { + PROPERTY_WIDTH, + PROPERTY_HEIGHT, + PROPERTY_BACK_DECORATION_COLOR, + PROPERTY_FRONT_DECORATION_COLOR, + PROPERTY_BACKGROUND_POSITION, + PROPERTY_OFFSET_X, + PROPERTY_OFFSET_Y, + PROPERTY_BORDER_RADIUS, + PROPERTY_PADDING_LEFT, + PROPERTY_PADDING_TOP, + PROPERTY_PADDING_RIGHT, + PROPERTY_PADDING_BOTTOM, + PROPERTY_MARGIN_LEFT, + PROPERTY_MARGIN_TOP, + PROPERTY_MARGIN_RIGHT, + PROPERTY_MARGIN_BOTTOM, +}; + +template +class TypePropertyAnimatable { +public: + using Setter = std::function; + using Getter = std::function; + using SetterMap = std::map; + using GetterMap = std::map; + using Type = T; +}; + +using FloatPropertyAnimatable = TypePropertyAnimatable; +using ColorPropertyAnimatable = TypePropertyAnimatable; +using BackgroundPositionPropertyAnimatable = TypePropertyAnimatable; + +using PropertyAnimationFloat = RefPtr>; +using PropertyAnimationFloatMap = std::map; + +class PropertyAnimatable : public virtual AceType { + DECLARE_ACE_TYPE(PropertyAnimatable, AceType); + +public: + template + static bool AddPropertyAnimation(const RefPtr& propertyAnimatable, + PropertyAnimatableType property, RefPtr>& animation, typename U::Type& initValue) + { + U u {}; + if (!propertyAnimatable) { + LOGE("Create property animation failed. animatable is null."); + return false; + } + if (!animation) { + LOGE("Create property animation failed. animation is null."); + return false; + } + LOGD("Create Property Animation. property: %{public}d.", property); + typename U::SetterMap setterMap = propertyAnimatable->GetPropertySetterMap(u); + typename U::GetterMap getterMap = propertyAnimatable->GetPropertyGetterMap(u); + + auto setterIter = setterMap.find(property); + if (setterIter == setterMap.end()) { + LOGW("Create property animation failed. no setter found for property: %{public}d", property); + return false; + } + auto& setter = setterIter->second; + if (!setter) { + LOGE("Create property animation failed. setter is null for property: %{public}d", property); + return false; + } + auto getterIter = getterMap.find(property); + if (getterIter == getterMap.end()) { + LOGW("Create property animation failed. no getter found for property: %{public}d", property); + return false; + } + auto& getter = getterIter->second; + if (!getter) { + LOGE("Create property animation failed. getter is null for property: %{public}d", property); + return false; + } + animation->AddListener(setter); + initValue = getter(); + if (animation->IsDeclarativeAnimation()) { + animation->SetStart(getter()); + } + return true; + } + + template + static bool SetProperty(const RefPtr& propertyAnimatable, PropertyAnimatableType property, + RefPtr>& animation) + { + U u {}; + if (!propertyAnimatable) { + LOGE("Inavlid property animation. animatable is null."); + return false; + } + if (!animation) { + LOGE("Invalid property animation failed. animation is null."); + return false; + } + if (!animation->IsDeclarativeAnimation()) { + LOGE("SetProperty supports only for declarative frontend."); + return false; + } + + LOGD("Property Animation. property: %{public}d.", property); + typename U::SetterMap setterMap = propertyAnimatable->GetPropertySetterMap(u); + + auto setterIter = setterMap.find(property); + if (setterIter == setterMap.end()) { + LOGW("Property animation failed. no setter found for property: %{public}d", property); + return false; + } + auto& setter = setterIter->second; + if (!setter) { + LOGE("Property animation failed. setter is null for property: %{public}d", property); + return false; + } + setter(animation->GetEndValue()); + return true; + } + +private: + const FloatPropertyAnimatable::SetterMap GetPropertySetterMap(FloatPropertyAnimatable&) + { + return GetFloatPropertySetterMap(); + }; + const FloatPropertyAnimatable::GetterMap GetPropertyGetterMap(FloatPropertyAnimatable&) + { + return GetFloatPropertyGetterMap(); + }; + const ColorPropertyAnimatable::SetterMap GetPropertySetterMap(ColorPropertyAnimatable&) + { + return GetColorPropertySetterMap(); + }; + const ColorPropertyAnimatable::GetterMap GetPropertyGetterMap(ColorPropertyAnimatable&) + { + return GetColorPropertyGetterMap(); + }; + const BackgroundPositionPropertyAnimatable::SetterMap GetPropertySetterMap(BackgroundPositionPropertyAnimatable&) + { + return GetBackgroundPositionPropertySetterMap(); + }; + const BackgroundPositionPropertyAnimatable::GetterMap GetPropertyGetterMap(BackgroundPositionPropertyAnimatable&) + { + return GetBackgroundPositionPropertyGetterMap(); + }; + virtual FloatPropertyAnimatable::SetterMap GetFloatPropertySetterMap() + { + return FloatPropertyAnimatable::SetterMap(); + }; + virtual FloatPropertyAnimatable::GetterMap GetFloatPropertyGetterMap() + { + return FloatPropertyAnimatable::GetterMap(); + }; + virtual ColorPropertyAnimatable::SetterMap GetColorPropertySetterMap() + { + return ColorPropertyAnimatable::SetterMap(); + }; + virtual ColorPropertyAnimatable::GetterMap GetColorPropertyGetterMap() + { + return ColorPropertyAnimatable::GetterMap(); + }; + virtual BackgroundPositionPropertyAnimatable::SetterMap GetBackgroundPositionPropertySetterMap() + { + return BackgroundPositionPropertyAnimatable::SetterMap(); + }; + virtual BackgroundPositionPropertyAnimatable::GetterMap GetBackgroundPositionPropertyGetterMap() + { + return BackgroundPositionPropertyAnimatable::GetterMap(); + }; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_PROPERTY_ANIMATABLE_H diff --git a/frameworks/core/animation/schedule_task.h b/frameworks/core/animation/schedule_task.h new file mode 100644 index 00000000..59ca1da8 --- /dev/null +++ b/frameworks/core/animation/schedule_task.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_SCHEDULE_TASK_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_SCHEDULE_TASK_H + +#include "base/memory/ace_type.h" + +namespace OHOS::Ace { + +class ScheduleTask : public AceType { + DECLARE_ACE_TYPE(ScheduleTask, AceType); + +public: + virtual void OnFrame(uint64_t nanoTimestamp) = 0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_SCHEDULE_TASK_H diff --git a/frameworks/core/animation/scheduler.cpp b/frameworks/core/animation/scheduler.cpp new file mode 100644 index 00000000..a43bb32e --- /dev/null +++ b/frameworks/core/animation/scheduler.cpp @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/animation/scheduler.h" + +#include "base/log/log.h" + +namespace OHOS::Ace { + +void Scheduler::Start() +{ + if (isRunning_) { + LOGW("Already running, no need to start again."); + return; + } + auto context = context_.Upgrade(); + if (!context) { + LOGE("Start failed, context is null."); + return; + } + isRunning_ = true; + startupTimestamp_ = context->GetTimeFromExternalTimer(); + scheduleId_ = context->AddScheduleTask(AceType::Claim(this)); +} + +void Scheduler::Stop() +{ + if (!isRunning_) { + LOGD("Already stopped, no need to stop again."); + return; + } + auto context = context_.Upgrade(); + if (!context) { + LOGE("Stop failed, context is null."); + return; + } + isRunning_ = false; + context->RemoveScheduleTask(scheduleId_); + scheduleId_ = 0; +} + +void Scheduler::OnFrame(uint64_t nanoTimestamp) +{ + if (!isRunning_) { + LOGD("Already stopped, no need to send frame event."); + return; + } + + // Refresh the startup time every frame. + uint64_t elapsedTime = nanoTimestamp - startupTimestamp_; + startupTimestamp_ = nanoTimestamp; + + // Consume previous schedule as default. + scheduleId_ = 0; + if (callback_) { + // Need to convert nanoseconds to milliseconds + callback_(elapsedTime / 1000000); + } + + // Schedule next frame task. + auto context = context_.Upgrade(); + if (!context) { + LOGE("Schedule next frame task failed, context is null."); + return; + } + if (IsActive()) { + scheduleId_ = context->AddScheduleTask(AceType::Claim(this)); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/animation/scheduler.h b/frameworks/core/animation/scheduler.h new file mode 100644 index 00000000..3b041baa --- /dev/null +++ b/frameworks/core/animation/scheduler.h @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_SCHEDULER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_SCHEDULER_H + +#include + +#include "core/animation/schedule_task.h" +#include "core/pipeline/pipeline_context.h" + +namespace OHOS::Ace { + +class Scheduler : public ScheduleTask { + DECLARE_ACE_TYPE(Scheduler, ScheduleTask); + +public: + using OnFrameCallback = std::function; + + Scheduler(OnFrameCallback&& callback, const WeakPtr& context) + : callback_(std::move(callback)), context_(context) + {} + + Scheduler() = delete; + + ~Scheduler() override + { + if (IsActive()) { + Stop(); + } + } + + void OnFrame(uint64_t nanoTimestamp) override; + + void Start(); + + void Stop(); + + bool IsActive() const + { + return isRunning_; + } + +private: + int32_t scheduleId_ = 0; + bool isRunning_ = false; + uint64_t startupTimestamp_ = 0; + OnFrameCallback callback_ = nullptr; + WeakPtr context_; +}; + +class SchedulerBuilder { +public: + static RefPtr Build(Scheduler::OnFrameCallback&& callback, const WeakPtr& context) + { + return AceType::MakeRefPtr(std::move(callback), context); + } +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_SCHEDULER_H diff --git a/frameworks/core/animation/scroll_motion.cpp b/frameworks/core/animation/scroll_motion.cpp new file mode 100644 index 00000000..d723ff74 --- /dev/null +++ b/frameworks/core/animation/scroll_motion.cpp @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/animation/scroll_motion.h" + +#include "base/log/log.h" + +namespace OHOS::Ace { +namespace { + +constexpr double DEFAULT_SPRING_MASS = 1.0; +constexpr double DEFAULT_SPRING_STIFFNESS = 500.0; +constexpr double DEFAULT_SPRING_DAMPING = 45.0; + +} // namespace + +ScrollMotion::ScrollMotion(double position, double velocity, const ExtentPair& extent, + const ExtentPair& initExtent, const RefPtr& spring) + : position_(position), velocity_(velocity), leadingExtent_(extent.Leading()), trailingExtent_(extent.Trailing()) +{ + if (spring && spring->IsValid()) { + spring_ = spring; + } else { + LOGW("construct scroll motion error. empty or invalid spring property, use default spring property."); + spring_ = + AceType::MakeRefPtr(DEFAULT_SPRING_MASS, DEFAULT_SPRING_STIFFNESS, DEFAULT_SPRING_DAMPING); + } + + if (position > initExtent.Trailing()) { + springMotion_ = MakeOverScrollMotion(position, velocity); + } else if (position < initExtent.Leading()) { + springMotion_ = MakeUnderScrollMotion(position, velocity); + } else { + LOGW("No available motion."); + } +} + +void ScrollMotion::Move(float offsetTime) +{ + // SpringMotion is null when not OverScoll&UnderScroll. + if (!springMotion_) { + return; + } + springMotion_->Move(offsetTime); +} + +double ScrollMotion::GetCurrentPosition() +{ + if (!springMotion_) { + // do not move yet, return init position. + return position_; + } + return springMotion_->GetCurrentPosition(); +} + +double ScrollMotion::GetCurrentVelocity() +{ + if (!springMotion_) { + // do not move yet, return init velocity. + return velocity_; + } + return springMotion_->GetCurrentVelocity(); +} + +bool ScrollMotion::IsCompleted() +{ + if (!springMotion_) { + // do not move yet + return false; + } + return springMotion_->IsCompleted(); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/animation/scroll_motion.h b/frameworks/core/animation/scroll_motion.h new file mode 100644 index 00000000..2be32875 --- /dev/null +++ b/frameworks/core/animation/scroll_motion.h @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_SCROLL_MOTION_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_SCROLL_MOTION_H + +#include "core/animation/friction_motion.h" +#include "core/animation/motion.h" +#include "core/animation/spring_motion.h" + +namespace OHOS::Ace { + +class ExtentPair { +public: + ExtentPair(double leading, double trailing) : leading_(leading), trailing_(trailing) {} + ExtentPair() = delete; + ~ExtentPair() = default; + + double Leading() const + { + return leading_; + } + + double Trailing() const + { + return trailing_; + } + +private: + double leading_ = 0.0; + double trailing_ = 0.0; +}; + +class ScrollMotion : public Motion { +public: + ScrollMotion(double position, double velocity, const ExtentPair& extent, const ExtentPair& initExtent, + const RefPtr& spring); + ~ScrollMotion() override = default; + + double GetCurrentPosition() override; + double GetCurrentVelocity() override; + bool IsCompleted() override; + + // Perform motion in each timestamp + void Move(float offsetTime) override; + +private: + RefPtr MakeUnderScrollMotion(double position, double velocity) + { + return AceType::MakeRefPtr(position, leadingExtent_, velocity, spring_); + } + + RefPtr MakeOverScrollMotion(double position, double velocity) + { + return AceType::MakeRefPtr(position, trailingExtent_, velocity, spring_); + } + + // init position + const double position_ { 0.0 }; + // init velocity + const double velocity_ { 0.0 }; + double leadingExtent_ { 0.0 }; + double trailingExtent_ { 0.0 }; + RefPtr spring_; + RefPtr springMotion_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_SCROLL_MOTION_H diff --git a/frameworks/core/animation/shared_transition_controller.cpp b/frameworks/core/animation/shared_transition_controller.cpp new file mode 100644 index 00000000..db3ed6e3 --- /dev/null +++ b/frameworks/core/animation/shared_transition_controller.cpp @@ -0,0 +1,243 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/animation/shared_transition_controller.h" + +#include "core/components/common/properties/tween_option.h" +#include "core/components/overlay/overlay_element.h" +#include "core/components/page/page_element.h" +#include "core/components/page_transition/page_transition_element.h" + +namespace OHOS::Ace { +namespace { + +RefPtr GetSharedEffect(const ShareId& shareId, const WeakPtr& destWeak, + const WeakPtr& srcWeak) +{ + auto dest = destWeak.Upgrade(); + auto src = srcWeak.Upgrade(); + if ((!src) && (!dest)) { + LOGE("No Shared element found. share id: %{public}s", shareId.c_str()); + return nullptr; + } + RefPtr effect = dest ? dest->GetEffect() : nullptr; + if (!effect) { + effect = src ? src->GetEffect() : nullptr; + } + if (!effect) { + // use default effect. + effect = SharedTransitionEffect::GetSharedTransitionEffect( + SharedTransitionEffectType::SHARED_EFFECT_EXCHANGE, shareId); + } + return effect; +} + +} // namespace + +SharedTransitionController::SharedTransitionController(const WeakPtr& context) : context_(context) +{ + controller_ = AceType::MakeRefPtr(context); +}; + +void SharedTransitionController::RegisterTransitionListener() +{ + auto pipelineContext = context_.Upgrade(); + if (!pipelineContext) { + LOGE("Register Transition listener to stage failed. pipeline context is null."); + return; + } + auto weak = AceType::WeakClaim(this); + pipelineContext->AddPageTransitionListener( + [weak](const TransitionEvent& event, const WeakPtr& in, const WeakPtr& out) { + if ((event != TransitionEvent::POP_START) && (event != TransitionEvent::PUSH_START)) { + LOGD("handle event: %{public}d failed. unknown event.", event); + return; + } + auto controller = weak.Upgrade(); + if (!controller) { + LOGE("handle event: %{public}d failed. controller is null.", event); + return; + } + auto context = controller->context_.Upgrade(); + if (!context) { + LOGE("Add shared transition to pipeline failed. context is null."); + return; + } + if (event == TransitionEvent::PUSH_START) { + controller->pageDest_ = in; + controller->pageSrc_ = out; + } else { + controller->pageDest_ = out; + controller->pageSrc_ = in; + } + controller->event_ = event; + LOGD("Add shared transition controller to pipeline. event: %{public}d.", event); + + // when page pushed in, new pushed page's layout parameters is valid after perform layout. + // And shared transition needs new pushed page's layout parameters. + // So start shared transition in prepare animation. + controller->StartSharedTransition(); + }); +} + +void SharedTransitionController::StartSharedTransition() +{ + // finish previous transition + controller_->Finish(); + // clear controller + controller_->ClearAllListeners(); + controller_->ClearInterpolators(); + controller_->ClearProxyControllers(); + auto pipelineContext = context_.Upgrade(); + if (!pipelineContext) { + LOGE("Start shared transition failed. pipeline is null."); + return; + } + auto overlay = pipelineContext->GetOverlayElement(); + if (!overlay) { + LOGE("Start shared transition failed. overlay is null."); + return; + } + KickoffSharedTransition(event_, overlay); +} + +void SharedTransitionController::KickoffSharedTransition(TransitionEvent event, RefPtr& overlay) +{ + auto pageDest = pageDest_.Upgrade(); + if (!pageDest) { + LOGE("Kickoff shared transition failed. page dest is null. event: %{public}d", event); + return; + } + auto destTransition = PageTransitionElement::GetTransitionElement(pageDest); + auto pageId = pageDest->GetPageId(); + if (!destTransition) { + LOGE("Kickoff shared transition failed. page transition is null. page id: %{public}d", pageId); + return; + } + hasSharedTransition_ = PrepareTransition(overlay); + if (!hasSharedTransition_) { + LOGI("No shared elements found. event: %{public}d. dest page id: %{public}d", event_, pageId); + return; + } + controller_->AddStopListener([overlayWeak = WeakClaim(RawPtr(overlay))]() { + auto overlay = overlayWeak.Upgrade(); + if (overlay) { + // shared element will be removed when get off shuttle, just make sure no shared left on the overlay + overlay->Clear(); + } + }); + controller_->SetFillMode(FillMode::FORWARDS); + // Play together with page transition in stage element. +} + +bool SharedTransitionController::PrepareTransition(RefPtr overlay, bool preCheck) +{ + auto pageDest = pageDest_.Upgrade(); + auto pageSrc = pageSrc_.Upgrade(); + if ((!pageSrc) || (!pageDest)) { + LOGD("Prepare shared transition failed. page src / dest is null. event: %{public}d", event_); + return false; + } + LOGD("Kickoff shared transition. event: %{public}d. src page id: %{public}d, dest page id: %{public}d", event_, + pageSrc->GetPageId(), pageDest->GetPageId()); + const auto& srcMap = pageSrc->GetSharedTransitionMap(); + const auto& destMap = pageDest->GetSharedTransitionMap(); + bool hasShared = false; + WeakPtr srcWeak; + for (auto& item : destMap) { + auto shareId = item.first; + auto& destWeak = item.second; + auto srcSharedIter = srcMap.find(shareId); + if (srcSharedIter == srcMap.end()) { + LOGD("Shared src not found, maybe the effect do not need it. share id: %{public}s", shareId.c_str()); + srcWeak.Reset(); + } else { + srcWeak = srcSharedIter->second; + } + RefPtr effect = GetSharedEffect(shareId, destWeak, srcWeak); + if (!effect) { + LOGE("Shared effect is null, maybe no shared element at all. share id: %{public}s", shareId.c_str()); + continue; + } + effect->SetSharedElement(srcWeak, destWeak); + if (!effect->Allow(event_)) { + LOGD("Shared transition not allowed, event: %{public}d, share id: %{public}s", event_, shareId.c_str()); + continue; + } + if (preCheck) { + // Return true, when find the first shared transition. + return true; + } + if (!PrepareEachTransition(shareId, effect, overlay)) { + LOGE("Prepare shared transition failed. share id: %{public}s", shareId.c_str()); + continue; + } + hasShared = true; + } + if (!hasShared) { + LOGD("No shared elements found. event: %{public}d. Shared size: dest: %{public}zu, src: %{public}zu", event_, + destMap.size(), srcMap.size()); + } + return hasShared; +} + +bool SharedTransitionController::PrepareEachTransition( + const ShareId& shareId, RefPtr& effect, RefPtr& overlay) +{ + auto destWeak = effect->GetDestSharedElement(); + auto dest = destWeak.Upgrade(); + if (!dest) { + LOGE("Prepare each transition failed. dest is null. share id: %{public}s", shareId.c_str()); + return false; + } + auto option = dest->GetOption(); + if (!effect->CreateAnimation(option, event_, false)) { + LOGE("Create animation failed. event: %{public}d, share id: %{public}s", event_, shareId.c_str()); + return false; + } + if (!effect->ApplyAnimation(overlay, controller_, option, event_)) { + LOGE("Apply animation failed. event: %{public}d, share id: %{public}s", event_, shareId.c_str()); + return false; + } + LOGD("Prepare Shared Transition. event: %{public}d, share id: %{public}s", event_, shareId.c_str()); + + dest->SetVisible(false); + auto weakDestShared = effect->GetDestSharedElement(); + controller_->AddStopListener([destWeak, shareId, event = event_]() { + auto dest = destWeak.Upgrade(); + if (!dest) { + LOGE("Stop shared element failed. shared in element is null. event: %{public}d, shareId: %{public}s", event, + shareId.c_str()); + return; + } + dest->SetVisible(true); + }); + return true; +} + +bool SharedTransitionController::HasSharedTransition(TransitionEvent event) +{ + if (event_ == event) { + return hasSharedTransition_; + } else { + auto originEvent = event_; + event_ = event; + bool hasSharedTransition = PrepareTransition(nullptr, true); + event_ = originEvent; + return hasSharedTransition; + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/animation/shared_transition_controller.h b/frameworks/core/animation/shared_transition_controller.h new file mode 100644 index 00000000..5f90e01d --- /dev/null +++ b/frameworks/core/animation/shared_transition_controller.h @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_SHARED_TRANSITION_CONTROLLER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_SHARED_TRANSITION_CONTROLLER_H + +#include "base/memory/ace_type.h" +#include "core/animation/animation_pub.h" +#include "core/components/page/page_element.h" +#include "core/pipeline/pipeline_context.h" + +namespace OHOS::Ace { + +class Animator; +class SharedTransitionElement; +class SharedTransitionEffect; + +class SharedTransitionController : public AceType { + DECLARE_ACE_TYPE(SharedTransitionController, AceType); + +public: + explicit SharedTransitionController(const WeakPtr& context); + ~SharedTransitionController() override = default; + void RegisterTransitionListener(); + bool HasSharedTransition(TransitionEvent event); + const RefPtr& GetAnimator() const + { + return controller_; + } + +private: + void StartSharedTransition(); + void KickoffSharedTransition(TransitionEvent event, RefPtr& overlay); + bool PrepareTransition(RefPtr overlay, bool preCheck = false); + bool PrepareEachTransition( + const ShareId& shareId, RefPtr& effect, RefPtr& overlay); + WeakPtr context_; + WeakPtr pageDest_; + WeakPtr pageSrc_; + RefPtr controller_; + TransitionEvent event_ { TransitionEvent::PUSH_START }; + bool hasSharedTransition_ = { false }; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_SHARED_TRANSITION_CONTROLLER_H diff --git a/frameworks/core/animation/shared_transition_effect.cpp b/frameworks/core/animation/shared_transition_effect.cpp new file mode 100644 index 00000000..53a485b6 --- /dev/null +++ b/frameworks/core/animation/shared_transition_effect.cpp @@ -0,0 +1,434 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/animation/shared_transition_effect.h" + +#include "core/animation/animation_pub.h" +#include "core/animation/curve_animation.h" +#include "core/animation/keyframe.h" +#include "core/components/common/properties/page_transition_option.h" +#include "core/components/overlay/overlay_element.h" +#include "core/components/positioned/positioned_component.h" +#include "core/components/positioned/render_positioned.h" +#include "core/components/shared_transition/shared_transition_element.h" +#include "core/components/tween/tween_component.h" + +namespace OHOS::Ace { + +SharedTransitionEffect::SharedTransitionEffect(const ShareId& shareId, SharedTransitionEffectType type) + : shareId_(shareId), type_(type) +{ + controller_ = AceType::MakeRefPtr(); +} + +bool SharedTransitionEffect::CheckIn( + TransitionEvent event, WeakPtr& sharedWeak, Offset& ticket) +{ + if (!controller_) { + LOGE("Check In failed. controller is null. share id: %{public}s", shareId_.c_str()); + return false; + } + auto shared = sharedWeak.Upgrade(); + if (!shared) { + LOGE("Check In failed. passenger element is null. share id: %{public}s", shareId_.c_str()); + return false; + } + // Check-in + if (!shared->AboardShuttle(ticket)) { + LOGE("Check In failed. aboard shuttle failed. share id: %{public}s.", shareId_.c_str()); + return false; + } + // Arrange Return Shuttle + controller_->AddStopListener([sharedWeak, shareId = shareId_]() { + auto shared = sharedWeak.Upgrade(); + if (!shared) { + // In Pop Scene, target page may be removed, and will reach this branch. + LOGD("Passenger missing return shuttle. shared element is null. shareId: %{public}s", shareId.c_str()); + return; + } + shared->GetOffShuttle(); + }); + controller_->AddStopListener([destWeak = dest_, srcWeak = src_]() { + auto dest = destWeak.Upgrade(); + if (dest) { + dest->SetSizeModified(nullptr); + } + auto src = srcWeak.Upgrade(); + if (src) { + src->SetSizeModified(nullptr); + } + }); + return true; +} + +bool SharedTransitionEffect::TakeOff(TransitionEvent event, RefPtr& overlay, + WeakPtr& sharedWeak, const Offset& ticket, TweenOption& option) +{ + if (!controller_) { + LOGE("TakeOff failed. controller is null. share id: %{public}s", shareId_.c_str()); + return false; + } + if (!overlay) { + LOGE("TakeOff failed. overlay is null. event: %{public}d, share id: %{public}s", event, shareId_.c_str()); + return false; + } + auto shared = sharedWeak.Upgrade(); + if (!shared) { + LOGE("TakeOff failed. shared is null. event: %{public}d, share id: %{public}s", event, shareId_.c_str()); + return false; + } + auto passengerComponent = shared->GetPassengerComponent(); + auto passengerElement = shared->GetPassengerElement(); + if (!passengerComponent || !passengerElement) { + LOGE("TakeOff failed. passenger not found. event: %{public}d, share id: %{public}s.", event, shareId_.c_str()); + return false; + } + auto tweenSeat = AceType::MakeRefPtr("TweenSeat"); + // Find Seat. + auto seat = AceType::MakeRefPtr(tweenSeat); + LOGD("TakeOff. event: %{public}d, share id: %{public}s. x: %{public}lf, y: %{public}lf", event, shareId_.c_str(), + ticket.GetX(), ticket.GetY()); + seat->SetLeft(Dimension(ticket.GetX(), DimensionUnit::PX)); + seat->SetTop(Dimension(ticket.GetY(), DimensionUnit::PX)); + // Take Off, + overlay->PushComponent(seat, true); + auto seatElement = AceType::DynamicCast(overlay->GetLastChild()); + if (!seatElement) { + LOGE("TakeOff failed. seat not found. event: %{public}d, share id: %{public}s.", event, shareId_.c_str()); + return false; + } + // make overlay un-focusable. + seatElement->SetFocusable(false); + auto seatRender = seatElement->GetRenderNode(); + if (!seatRender) { + LOGE("TakeOff failed, render is nullptr"); + return false; + } + seatRender->SetDisableTouchEvent(true); + return TakeOffTween(seatElement->GetFirstChild(), passengerComponent, passengerElement, option); +} + +bool SharedTransitionEffect::TakeOffTween(const RefPtr& tweenElement, + const RefPtr& passengerComponent, const RefPtr& passengerElement, TweenOption& option) +{ + auto tweenSeatElement = AceType::DynamicCast(tweenElement); + if (!tweenSeatElement) { + LOGE("TakeOff failed. tween not found. share id: %{public}s.", shareId_.c_str()); + return false; + } + auto contentParent = tweenSeatElement->GetContentParent(); + if (!contentParent) { + LOGE("TakeOff failed. content parent not found. share id: %{public}s.", shareId_.c_str()); + return false; + } + passengerElement->SetNewComponent(passengerComponent); + passengerElement->Mount(contentParent); + auto passengerRender = passengerElement->GetRenderNode(); + auto parentRender = contentParent->GetRenderNode(); + if (passengerRender && parentRender) { + // Follow parent's hidden status. + passengerRender->SetHidden(parentRender->GetHidden()); + } + tweenSeatElement->SetController(controller_); + tweenSeatElement->SetOption(option); + tweenSeatElement->ApplyKeyframes(); + tweenSeatElement_ = tweenSeatElement; + return true; +} + +RefPtr SharedTransitionEffect::GetSharedTransitionEffect( + SharedTransitionEffectType effect, const ShareId& shareId) +{ + LOGD("Get shared transition effect. effect: %{public}d, share id: %{public}s", effect, shareId.c_str()); + switch (effect) { + case SharedTransitionEffectType::SHARED_EFFECT_EXCHANGE: { + return AceType::MakeRefPtr(shareId); + } + case SharedTransitionEffectType::SHARED_EFFECT_STATIC: { + return AceType::MakeRefPtr(shareId); + } + default: { + LOGE("Unknown effect. effect: %{public}d, share id: %{public}s", effect, shareId.c_str()); + return nullptr; + } + } +} + +bool SharedTransitionEffect::ApplyAnimation(RefPtr& overlay, RefPtr& controller, + TweenOption& option, TransitionEvent event) +{ + if (!controller) { + LOGE("Add proxy controller failed. controller is null. event: %{public}d, share id: %{public}s", event, + shareId_.c_str()); + return false; + } + controller_->ClearAllListeners(); + controller_->ClearInterpolators(); + controller->AddProxyController(controller_); + return true; +} + +bool SharedTransitionExchange::Allow(TransitionEvent event) +{ + auto dest = dest_.Upgrade(); + auto src = src_.Upgrade(); + if (!dest || !src) { + LOGD("Check allow exchange failed. dest or src is null. event: %{public}d, share id: %{public}s", event, + shareId_.c_str()); + return false; + } + bool allow = false; + if (event == TransitionEvent::PUSH_START) { + // In Push Scene, dest means Enter and Source means Exit + allow = dest->IsEnablePushEnter() && src->IsEnablePushExit(); + } else if (event == TransitionEvent::POP_START) { + // In Pop Scene, dest means Enter and Source means Exit + allow = dest->IsEnablePopEnter() && src->IsEnablePopExit(); + } + LOGD("Exchange Allow status: %{public}d, event: %{public}d, share id: %{public}s", allow, event, shareId_.c_str()); + return allow; +} + +void SharedTransitionExchange::AddLazyLoadCallback(TransitionEvent event) +{ + auto src = src_.Upgrade(); + auto dest = dest_.Upgrade(); + if (!dest || !src) { + LOGE("Add Lazy callback failed. Dest or src is null. event: %{public}d, share id: %{public}s", event, + shareId_.c_str()); + return; + } + // Lazy load child size. make width and height animation later. + auto effectWeak = AceType::WeakClaim(this); + dest->SetSizeModified([effectWeak, event, shareId = shareId_]() { + LOGD("Lazy load size callback. event: %{public}d, share id: %{public}s", event, shareId.c_str()); + auto effect = effectWeak.Upgrade(); + if (!effect) { + LOGE("Create Lazy load animation failed. effect is null."); + return; + } + auto tweenSeatElement = effect->tweenSeatElement_.Upgrade(); + if (!tweenSeatElement) { + LOGE("Create Lazy load animation failed. tween Seat Element is null."); + return; + } + TweenOption option = tweenSeatElement->GetOption(); + option.ClearListeners(); + if (!effect->CreateAnimation(option, event, true)) { + LOGE("Create animation failed. event: %{public}d, share id: %{public}s", event, shareId.c_str()); + return; + } + + tweenSeatElement->SetOption(option); + effect->controller_->ClearInterpolators(); + tweenSeatElement->ApplyKeyframes(); + }); +} + +bool SharedTransitionExchange::CreateTranslateAnimation( + TweenOption& option, TransitionEvent event, bool calledByLazyLoad) +{ + auto src = src_.Upgrade(); + auto dest = dest_.Upgrade(); + if (!dest || !src) { + LOGE("Create exchange animation failed. dest or src is null. event: %{public}d, share id: %{public}s", event, + shareId_.c_str()); + return false; + } + auto& translateMap = option.GetTranslateAnimations(); + auto translateIter = translateMap.find(AnimationType::TRANSLATE); + if ((calledByLazyLoad && autoTranslate_) || (translateIter == translateMap.end())) { + // if no custom translate animation, add exchange translate animation. + auto destOffset = dest->GetGlobalOffset(); + auto srcOffset = src->GetGlobalOffset(); + LOGD("Get Offset for event: %{public}d, share id: %{public}s. dest: x: %{public}lf, y: %{public}lf; " + "src: x: %{public}lf, y: %{public}lf", + event, shareId_.c_str(), destOffset.GetX(), destOffset.GetY(), srcOffset.GetX(), srcOffset.GetY()); + if (destOffset != srcOffset) { + auto translateAnimation = AceType::MakeRefPtr>( + Offset(0, 0), destOffset - srcOffset, Curves::FRICTION); + option.SetTranslateAnimations(AnimationType::TRANSLATE, translateAnimation); + autoTranslate_ = true; + LOGD("Create shared exchange animation for translate. event: %{public}d, share id: %{public}s", event, + shareId_.c_str()); + } + } + return true; +} + +bool SharedTransitionExchange::CreateSizeAnimation(TweenOption& option, TransitionEvent event, bool isLazy) +{ + auto src = src_.Upgrade(); + auto dest = dest_.Upgrade(); + if (!dest || !src) { + LOGE("Create exchange animation failed. dest or src is null. event: %{public}d, share id: %{public}s", event, + shareId_.c_str()); + return false; + } + auto destSize = dest->GetSuitSize(); + auto srcSize = src->GetSuitSize(); + LOGD("Get Size for event: %{public}d, share id: %{public}s. dest: w: %{public}lf, h: %{public}lf; " + "srcSize: w: %{public}lf, h: %{public}lf", + event, shareId_.c_str(), destSize.Width(), destSize.Height(), srcSize.Width(), srcSize.Height()); + + // add width shared transition + auto& propertyMap = option.GetFloatPropertyAnimation(); + auto widthIter = propertyMap.find(PropertyAnimatableType::PROPERTY_WIDTH); + if (((isLazy && autoWidth_) || (widthIter == propertyMap.end())) && !NearEqual(destSize.Width(), srcSize.Width())) { + auto widthAnimation = + AceType::MakeRefPtr>(srcSize.Width(), destSize.Width(), Curves::FRICTION); + option.SetPropertyAnimationFloat(PropertyAnimatableType::PROPERTY_WIDTH, widthAnimation); + autoWidth_ = true; + LOGD("Create shared exchange animation for width. share id: %{public}s", shareId_.c_str()); + } + + // add scaleY shared transition + auto heightIter = propertyMap.find(PropertyAnimatableType::PROPERTY_HEIGHT); + if (((isLazy && autoHeight_) || (heightIter == propertyMap.end())) && + !NearEqual(destSize.Height(), srcSize.Height())) { + auto heightAnimation = + AceType::MakeRefPtr>(srcSize.Height(), destSize.Height(), Curves::FRICTION); + option.SetPropertyAnimationFloat(PropertyAnimatableType::PROPERTY_HEIGHT, heightAnimation); + LOGD("Create shared exchange animation for height. share id: %{public}s", shareId_.c_str()); + autoHeight_ = true; + } + return true; +} + +bool SharedTransitionExchange::CreateAnimation(TweenOption& option, TransitionEvent event, bool isLazy) +{ + auto src = src_.Upgrade(); + auto dest = dest_.Upgrade(); + if (!dest || !src) { + LOGE("Create exchange animation failed. dest or src is null. event: %{public}d, share id: %{public}s", event, + shareId_.c_str()); + return false; + } + if (!isLazy) { + autoTranslate_ = false; + autoWidth_ = false; + autoHeight_ = false; + } + + // add translate shared transition + if (!CreateTranslateAnimation(option, event, isLazy)) { + return false; + } + if (!CreateSizeAnimation(option, event, isLazy)) { + return false; + } + AddLazyLoadCallback(event); + return true; +} + +bool SharedTransitionExchange::ApplyAnimation(RefPtr& overlay, RefPtr& controller, + TweenOption& option, TransitionEvent event) +{ + if (!SharedTransitionEffect::ApplyAnimation(overlay, controller, option, event)) { + return false; + } + Offset ticket; + if (!CheckIn(event, src_, ticket)) { + LOGE( + "Apply exchange failed. check in failed. event: %{public}d, share id: %{public}s", event, shareId_.c_str()); + return false; + } + return TakeOff(event, overlay, src_, ticket, option); +} + +bool SharedTransitionStatic::Allow(TransitionEvent event) +{ + auto dest = dest_.Upgrade(); + if (!dest) { + LOGD("Check allow static failed. dest null. event: %{public}d, share id: %{public}s", event, shareId_.c_str()); + return false; + } + bool allow = false; + if (event == TransitionEvent::PUSH_START) { + // In Push Scene, dest means Enter and Source means Exit + allow = dest->IsEnablePushEnter(); + } else if (event == TransitionEvent::POP_START) { + // In Pop Scene, dest means Enter and Source means Exit + allow = dest->IsEnablePopEnter(); + } + LOGD("Static Allow status: %{public}d, event: %{public}d, share id: %{public}s", allow, event, shareId_.c_str()); + return allow; +} + +bool SharedTransitionStatic::CreateAnimation(TweenOption& option, TransitionEvent event, bool isLazy) +{ + auto opacityAnimation = option.GetOpacityAnimation(); + if (!opacityAnimation) { + TransitionTweenOptionFactory::CreateSharedTweenOption(SharedTransitionEffectType::SHARED_EFFECT_STATIC, option); + } + return true; +} + +bool SharedTransitionStatic::ApplyAnimation(RefPtr& overlay, RefPtr& controller, + TweenOption& option, TransitionEvent event) +{ + if (!SharedTransitionEffect::ApplyAnimation(overlay, controller, option, event)) { + return false; + } + Offset ticket; + // Currently only the dest page elements are in effect + if (!CheckIn(event, dest_, ticket)) { + LOGE("Apply static fail. check in failed. event: %{public}d, share id: %{public}s", event, shareId_.c_str()); + return false; + } + AddLazyLoadCallback(); + return TakeOff(event, overlay, dest_, ticket, option); +} + +void SharedTransitionStatic::AddLazyLoadCallback() +{ + auto dest = dest_.Upgrade(); + if (!dest) { + LOGE("Add Lazy load Callback failed. dest is null."); + return; + } + dest->SetSizeModified([effectWeak = WeakClaim(this)]() { + auto effect = effectWeak.Upgrade(); + if (!effect) { + LOGE("Fix static shared element position failed. effect is null"); + return; + } + auto tweenSeatElement = effect->tweenSeatElement_.Upgrade(); + if (!tweenSeatElement) { + LOGE("Fix static shared element position failed. tween element is null"); + return; + } + auto positionedElement = + AceType::DynamicCast(tweenSeatElement->GetElementParent().Upgrade()); + if (!positionedElement) { + LOGE("Fix static shared element position failed. positioned element is null"); + return; + } + auto positionedRender = AceType::DynamicCast(positionedElement->GetRenderNode()); + if (!positionedRender) { + LOGE("Fix static shared element position failed. positioned render is null"); + return; + } + auto dest = effect->dest_.Upgrade(); + if (!dest) { + return; + } + auto offset = dest->GetGlobalOffset(); + positionedRender->SetTop(Dimension(offset.GetY(), DimensionUnit::PX)); + positionedRender->SetLeft(Dimension(offset.GetX(), DimensionUnit::PX)); + }); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/animation/shared_transition_effect.h b/frameworks/core/animation/shared_transition_effect.h new file mode 100644 index 00000000..b4f6c094 --- /dev/null +++ b/frameworks/core/animation/shared_transition_effect.h @@ -0,0 +1,123 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_SHARED_TRANSITION_EFFECT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_SHARED_TRANSITION_EFFECT_H + +#include "base/memory/ace_type.h" +#include "core/animation/animator.h" +#include "core/animation/page_transition_listener.h" +#include "core/components/common/properties/tween_option.h" +#include "core/pipeline/base/component.h" +#include "core/pipeline/base/element.h" + +namespace OHOS::Ace { + +class SharedTransitionElement; +class OverlayElement; +class Animator; +class TweenElement; + +enum class SharedTransitionEffectType { + SHARED_EFFECT_STATIC, + SHARED_EFFECT_EXCHANGE, +}; + +class SharedTransitionEffect : public AceType { + DECLARE_ACE_TYPE(SharedTransitionEffect, AceType); + +public: + explicit SharedTransitionEffect(const ShareId& shareId, SharedTransitionEffectType type); + ~SharedTransitionEffect() override = default; + SharedTransitionEffectType GetType() const + { + return type_; + } + void SetSharedElement(const WeakPtr& src, const WeakPtr& dest) + { + dest_ = dest; + src_ = src; + } + const WeakPtr& GetDestSharedElement() const + { + return dest_; + } + const WeakPtr& GetSrcSharedElement() const + { + return src_; + } + virtual bool CreateAnimation(TweenOption& option, TransitionEvent event, bool isLazy) = 0; + virtual bool ApplyAnimation(RefPtr& overlay, RefPtr& controller, + TweenOption& option, TransitionEvent event) = 0; + virtual bool Allow(TransitionEvent event) = 0; + static RefPtr GetSharedTransitionEffect( + SharedTransitionEffectType effect, const ShareId& shareId); + +protected: + bool CheckIn(TransitionEvent event, WeakPtr& sharedWeak, Offset& ticket); + bool TakeOff(TransitionEvent event, RefPtr& overlay, WeakPtr& sharedWeak, + const Offset& ticket, TweenOption& option); + bool TakeOffTween(const RefPtr& tweenElement, const RefPtr& passengerComponent, + const RefPtr& passengerElement, TweenOption& option); + + ShareId shareId_; + const SharedTransitionEffectType type_; + WeakPtr dest_; + WeakPtr src_; + RefPtr controller_; + WeakPtr tweenSeatElement_; +}; + +class SharedTransitionExchange : public SharedTransitionEffect { + DECLARE_ACE_TYPE(SharedTransitionExchange, SharedTransitionEffect); + +public: + explicit SharedTransitionExchange(const ShareId& shareId) + : SharedTransitionEffect(shareId, SharedTransitionEffectType::SHARED_EFFECT_EXCHANGE) {}; + ~SharedTransitionExchange() override = default; + bool CreateAnimation(TweenOption& option, TransitionEvent event, bool isLazy) override; + bool ApplyAnimation(RefPtr& overlay, RefPtr& controller, TweenOption& option, + TransitionEvent event) override; + bool Allow(TransitionEvent event) override; + +private: + bool CreateTranslateAnimation(TweenOption& option, TransitionEvent event, bool calledByLazyLoad); + bool CreateSizeAnimation(TweenOption& option, TransitionEvent event, bool isLazy); + void AddLazyLoadCallback(TransitionEvent event); + bool autoWidth_ = true; + bool autoHeight_ = true; + bool autoTranslate_ = true; +}; + +class SharedTransitionStatic : public SharedTransitionEffect { + DECLARE_ACE_TYPE(SharedTransitionStatic, SharedTransitionEffect); + +public: + explicit SharedTransitionStatic(const ShareId& shareId) + : SharedTransitionEffect(shareId, SharedTransitionEffectType::SHARED_EFFECT_STATIC) {}; + ~SharedTransitionStatic() override = default; + bool CreateAnimation(TweenOption& option, TransitionEvent event, bool isLazy) override; + // The static effect only works on the dest page + bool ApplyAnimation(RefPtr& overlay, RefPtr& controller, TweenOption& option, + TransitionEvent event) override; + bool Allow(TransitionEvent event) override; + +private: + void AddLazyLoadCallback(); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_SHARED_TRANSITION_EFFECT_H diff --git a/frameworks/core/animation/simple_spring_adapter.cpp b/frameworks/core/animation/simple_spring_adapter.cpp new file mode 100644 index 00000000..154644e6 --- /dev/null +++ b/frameworks/core/animation/simple_spring_adapter.cpp @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/animation/simple_spring_adapter.h" + +namespace OHOS::Ace { + +void SimpleSpringAdapter::AddNode(RefPtr node) +{ + if (!node) { + LOGE("AddNode failed. node is null."); + return; + } + nodes_[node->GetIndex()] = node; + NotifyNodeAdd(node); +} + +RefPtr SimpleSpringAdapter::GetNext(const RefPtr& node) +{ + if (!node) { + LOGE("Get next failed. node is null."); + return nullptr; + } + return GetNode(node->GetIndex() + 1); +} + +RefPtr SimpleSpringAdapter::GetNode(int32_t index) const +{ + auto iter = nodes_.find(index); + if (iter == nodes_.end()) { + return nullptr; + } + return iter->second; +} + +std::string SimpleSpringAdapter::DumpNodes() +{ + int32_t nodeSize = nodes_.size(); + int32_t zeroCount = 0; + std::string dumpInfo; + for (int32_t index = 0; index < nodeSize; index++) { + auto node = AceType::DynamicCast(nodes_.at(index)); + if (!node) { + continue; + } + dumpInfo += std::to_string(node->GetIndex()) + ":" + std::to_string(node->GetValue()) + ", " + + std::to_string(node->GetTransferParams()->Stiffness()) + "; "; + if (NearZero(node->GetValue())) { + zeroCount++; + } + } + if (zeroCount == nodeSize) { + return std::string(" All Zeros"); + } else { + return dumpInfo; + } +} + +void SimpleSpringAdapter::FlushAnimation() +{ + // flush from control to edge. + for (int32_t index = 0; index < GetSize(); index++) { + auto node = GetNode(index); + if (node) { + node->OnAnimation(); + } + } +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/animation/simple_spring_adapter.h b/frameworks/core/animation/simple_spring_adapter.h new file mode 100644 index 00000000..b621160e --- /dev/null +++ b/frameworks/core/animation/simple_spring_adapter.h @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_SIMPLE_SPRING_ADAPTER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_SIMPLE_SPRING_ADAPTER_H + +#include + +#include "core/animation/simple_spring_node.h" +#include "core/animation/spring_adapter.h" + +namespace OHOS::Ace { + +class SimpleSpringAdapter : public SpringAdapter { + DECLARE_ACE_TYPE(SimpleSpringAdapter, SpringAdapter); + +public: + void AddNode(RefPtr node); + + RefPtr GetNext(const RefPtr& node) override; + + int32_t GetSize() const override + { + return nodes_.size(); + } + + RefPtr GetControlNode() const override + { + return GetNode(GetControlIndex()); + } + + RefPtr GetNode(int32_t index) const override; + + int32_t GetControlIndex() const override + { + return 0; + } + + std::string DumpNodes(); + + void FlushAnimation() override; + + virtual void SetDeltaValue(double delta) + { + for (int32_t index = 0; index < GetSize(); index++) { + auto node = GetNode(index); + if (node) { + node->SetDeltaValue(delta); + } + } + } + +protected: + std::unordered_map> nodes_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_SIMPLE_SPRING_ADAPTER_H diff --git a/frameworks/core/animation/simple_spring_chain.cpp b/frameworks/core/animation/simple_spring_chain.cpp new file mode 100644 index 00000000..4db68e85 --- /dev/null +++ b/frameworks/core/animation/simple_spring_chain.cpp @@ -0,0 +1,153 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/animation/simple_spring_chain.h" + +#include "base/utils/utils.h" + +namespace OHOS::Ace { +namespace { + +constexpr double DEFAULT_CHAIN_STIFFNESS = 228.0; +constexpr double DEFAULT_CHAIN_DAMPING = 30.0; +const RefPtr DEFAULT_OVER_SPRING_PROPERTY = + AceType::MakeRefPtr(1.0, DEFAULT_CHAIN_STIFFNESS, DEFAULT_CHAIN_DAMPING); +constexpr double DEFAULT_FRICTION = 1.0; +constexpr int32_t DEFAULT_CHAIN_FRAME_DELTA = 1; + +} // namespace + +SimpleSpringChain::SimpleSpringChain(const RefPtr& springAdapter) +{ + if (springAdapter) { + springAdapter_ = springAdapter; + } else { + springAdapter_ = AceType::MakeRefPtr(); + } + springAdapter_->SetObserve(AceType::WeakClaim(this)); + stiffnessTransfer_ = AceType::MakeRefPtr(1.0); + dampingTransfer_ = AceType::MakeRefPtr(0.0); + controlStiffness_ = DEFAULT_CHAIN_STIFFNESS; + controlDamping_ = DEFAULT_CHAIN_DAMPING; + frameDelta_ = DEFAULT_CHAIN_FRAME_DELTA; +} + +void SimpleSpringChain::OnNodeAdd(RefPtr& node) +{ + if (!node) { + return; + } + SetParams(node); +} + +void SimpleSpringChain::OnNodeDelete(RefPtr& node) +{ + if (!node) { + return; + } + auto next = springAdapter_->GetNext(node); + while (next) { + next->SetIndex(next->GetIndex() - 1); + SetParams(next); + next = springAdapter_->GetNext(next); + } +} + +void SimpleSpringChain::SetDeltaValue(double delta) +{ + for (int32_t index = 0; index < springAdapter_->GetSize(); index++) { + auto node = springAdapter_->GetNode(index); + if (node) { + node->SetDeltaValue(delta); + } + } +} + +void SimpleSpringChain::SetValue(double value) +{ + auto node = springAdapter_->GetControlNode(); + if (node) { + node->SetValue(value); + } +} + +void SimpleSpringChain::FlushAnimation() +{ + // flush from control to edge. + springAdapter_->FlushAnimation(); +} + +void SimpleSpringChain::EndToPosition(double value, double velocity) +{ + auto node = springAdapter_->GetControlNode(); + if (node) { + node->EndToValue(value, velocity); + } +} + +void SimpleSpringChain::Cancel() +{ + auto currentNode = springAdapter_->GetControlNode(); + for (int32_t idx = 0; idx < springAdapter_->GetSize(); idx++) { + if (currentNode) { + currentNode->Cancel(); + currentNode = springAdapter_->GetNext(currentNode); + } else { + LOGW("Node size mismatch. size: %{public}d, current size: %{public}d", springAdapter_->GetSize(), idx + 1); + break; + } + } +} + +void SimpleSpringChain::TransferParamsInternal() +{ + for (int32_t idx = 0; idx < springAdapter_->GetSize(); idx++) { + auto currentNode = springAdapter_->GetNode(idx); + SetParams(currentNode); + } +} + +void SimpleSpringChain::SetParams(RefPtr& node) +{ + int32_t index = node->GetIndex(); + auto controlNode = springAdapter_->GetControlNode(); + if (!controlNode) { + controlNode = node; + } + int32_t delta = std::abs(index - controlNode->GetIndex()); + double transferStiffness = stiffnessTransfer_->Transfer(controlStiffness_, delta); + double transferDamping = dampingTransfer_->Transfer(controlDamping_, delta); + node->TransferParams(transferStiffness, transferDamping); + node->SetFrameDelta(frameDelta_); + node->SetDecoration(decoration_); + // make sure minDecoration <= decoration <= maxDecoration + node->SetMinDecoration(std::min(minDecoration_, decoration_)); + node->SetMaxDecoration(std::max(maxDecoration_, decoration_)); + if (!node->GetAdapter()) { + node->SetAdapter(springAdapter_); + } +} + +const RefPtr& SpringChainProperty::GetDefaultOverSpringProperty() +{ + return DEFAULT_OVER_SPRING_PROPERTY; +} + +double SpringChainProperty::GetDefaultFriction() +{ + return DEFAULT_FRICTION; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/animation/simple_spring_chain.h b/frameworks/core/animation/simple_spring_chain.h new file mode 100644 index 00000000..f153eed1 --- /dev/null +++ b/frameworks/core/animation/simple_spring_chain.h @@ -0,0 +1,280 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_SIMPLE_SPRING_CHAIN_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_SIMPLE_SPRING_CHAIN_H + +#include "base/geometry/dimension.h" +#include "core/animation/param_transfer.h" +#include "core/animation/simple_spring_adapter.h" + +namespace OHOS::Ace { + +class SpringChainProperty { +public: + void SetControlStiffness(double stiffness) + { + controlStiffness_ = stiffness; + } + + double ControlStiffness() const + { + return controlStiffness_; + } + + void SetControlDamping(double damping) + { + controlDamping_ = damping; + } + + double ControlDamping() const + { + return controlDamping_; + } + + static const RefPtr& GetDefaultOverSpringProperty(); + + static double GetDefaultFriction(); + + void SetStiffnessTransfer(bool useCurve) + { + stiffnessTransfer_ = useCurve; + } + + bool StiffnessTransfer() const + { + return stiffnessTransfer_; + } + + void SetDampingTransfer(bool useCurve) + { + dampingTransfer_ = useCurve; + } + + bool DampingTransfer() const + { + return dampingTransfer_; + } + + void SetStiffnessCoefficient(double stiffnessCoefficient) + { + stiffnessCoefficient_ = stiffnessCoefficient; + } + + double StiffnessCoefficient() const + { + return stiffnessCoefficient_; + } + + void SetDampingCoefficient(double dampingCoefficient) + { + dampingCoefficient_ = dampingCoefficient; + } + + double DampingCoefficient() const + { + return dampingCoefficient_; + } + + void SetInterval(const Dimension& interval) + { + interval_ = interval; + } + + const Dimension& Interval() const + { + return interval_; + } + + void SetMinInterval(const Dimension& minInterval) + { + minInterval_ = minInterval; + } + + const Dimension& MinInterval() const + { + return minInterval_; + } + + void SetMaxInterval(const Dimension& maxInterval) + { + maxInterval_ = maxInterval; + } + + const Dimension& MaxInterval() const + { + return maxInterval_; + } + + void SetFrameDelay(int32_t frameDelay) + { + frameDelay_ = frameDelay; + } + + int32_t FrameDelay() const + { + return frameDelay_; + } + +private: + static constexpr double CHAIN_CONTROL_DAMPING = 30.0; + static constexpr double CHAIN_CONTROL_STIFFNESS = 228.0; + static constexpr Dimension CHAIN_INTERVAL_DEFAULT = 20.0_vp; + static constexpr Dimension CHAIN_MIN_INTERVAL_DEFAULT = 10.0_vp; + static constexpr Dimension CHAIN_MAX_INTERVAL_DEFAULT = 40.0_vp; + + double controlStiffness_ { CHAIN_CONTROL_STIFFNESS }; + double controlDamping_ { CHAIN_CONTROL_DAMPING }; + bool stiffnessTransfer_ { true }; // true for curve + bool dampingTransfer_ { true }; + double dampingCoefficient_ { 0.0 }; + double stiffnessCoefficient_ { 1.0 }; + Dimension interval_ { CHAIN_INTERVAL_DEFAULT }; + Dimension minInterval_ { CHAIN_MIN_INTERVAL_DEFAULT }; + Dimension maxInterval_ { CHAIN_MAX_INTERVAL_DEFAULT }; + int32_t frameDelay_ { 1 }; +}; + +class SimpleSpringChain : public SpringAdapter::AdapterObserve { + DECLARE_ACE_TYPE(SimpleSpringChain, SpringAdapter::AdapterObserve); + +public: + explicit SimpleSpringChain(const RefPtr& springAdapter); + ~SimpleSpringChain() override = default; + + void OnControlNodeChange() override + { + TransferParamsInternal(); + } + + void OnNodeAdd(RefPtr& node) override; + + void OnNodeDelete(RefPtr& node) override; + + void SetDeltaValue(double delta); + + void SetValue(double value); + + void FlushAnimation(); + + void EndToPosition(double value, double velocity); + + void Cancel(); + + RefPtr GetControlNode() const + { + return springAdapter_->GetControlNode(); + } + + int32_t GetSize() const + { + return springAdapter_->GetSize(); + } + + double GetControlStiffness() const + { + return controlStiffness_; + } + + void SetControlStiffness(double controlStiffness) + { + if (controlStiffness > 0.0) { + controlStiffness_ = controlStiffness; + } + } + + double GetControlDamping() const + { + return controlDamping_; + } + + void SetControlDamping(double controlDamping) + { + if (controlDamping > 0.0) { + controlDamping_ = controlDamping; + } + } + + const RefPtr& GetSpringAdapter() const + { + return springAdapter_; + } + + void SetSpringAdapter(const RefPtr& springAdapter) + { + if (springAdapter) { + springAdapter_ = springAdapter; + } + } + + int32_t GetFrameDelta() const + { + return frameDelta_; + } + + void SetFrameDelta(int32_t frameDelta) + { + frameDelta_ = frameDelta; + } + + void SetDampingTransfer(const RefPtr& dampingTransfer) + { + if (dampingTransfer) { + dampingTransfer_ = dampingTransfer; + } + } + + void SetStiffnessTransfer(const RefPtr& stiffnessTransfer) + { + if (stiffnessTransfer) { + stiffnessTransfer_ = stiffnessTransfer; + } + } + + void SetDecoration(double decoration) + { + decoration_ = decoration; + } + + void SetMinDecoration(double minDecoration) + { + minDecoration_ = minDecoration; + } + + void SetMaxDecoration(double maxDecoration) + { + maxDecoration_ = maxDecoration; + } + +protected: + RefPtr springAdapter_; + +private: + void TransferParamsInternal(); + void SetParams(RefPtr& node); + + double controlStiffness_ = 0.0; + double controlDamping_ = 0.0; + double decoration_ = 0.0; + double minDecoration_ = 0.0; + double maxDecoration_ = 0.0; + int32_t frameDelta_ = 0; + RefPtr stiffnessTransfer_; + RefPtr dampingTransfer_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_SIMPLE_SPRING_CHAIN_H diff --git a/frameworks/core/animation/simple_spring_node.cpp b/frameworks/core/animation/simple_spring_node.cpp new file mode 100644 index 00000000..5fba87e0 --- /dev/null +++ b/frameworks/core/animation/simple_spring_node.cpp @@ -0,0 +1,169 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/animation/simple_spring_node.h" + +namespace OHOS::Ace { +namespace { + +constexpr int32_t FRAME_SCHEDULED = 16; +constexpr int64_t NANOS_TO_MILLS = 1000000; + +} // namespace + +SimpleSpringNode::SimpleSpringNode(const WeakPtr& context, int32_t index, double value) + : SpringNode(index), context_(context), value_(value) +{ + springProperty_ = AceType::MakeRefPtr(); + spring_ = AceType::MakeRefPtr(0.0, 0.0, 0.0, springProperty_); + spring_->SetAccuracy(valueAccuracy_); + auto&& callback = [weak = AceType::WeakClaim(this)](uint64_t duration) { + auto node = weak.Upgrade(); + if (!node || !node->adapter_) { + LOGE("Empty node or adapter, skip tick callback."); + return; + } + auto context = node->context_.Upgrade(); + if (!context) { + return; + } + node->adapter_->TickAnimation(context->GetTimeFromExternalTimer()); + }; + scheduler_ = AceType::MakeRefPtr(callback, context); +} + +void SimpleSpringNode::SetValue(double value) +{ + SpringNode::SetValue(value); + value_ = value; + OnUpdate(value_, velocity_); + NotifyUpdateListener(value_, velocity_); + NotifyNext(value_, velocity_); +} + +void SimpleSpringNode::NotifyNext(double endValue, double initVelocity) +{ + if (!adapter_) { + LOGE("Notify next failed. Adapter is null. index: %{public}d", index_); + return; + } + if (this != AceType::RawPtr(adapter_->GetControlNode())) { + return; + } + auto currentNode = adapter_->GetNext(AceType::WeakClaim(this).Upgrade()); + while (currentNode) { + currentNode->EndToValue(endValue, initVelocity); + currentNode = adapter_->GetNext(currentNode); + } +} + +void SimpleSpringNode::EndToValue(double endValue, double velocity) +{ + if (!adapter_) { + LOGE("End to value failed. adapter is null. index: %{public}d", index_); + return; + } + auto context = context_.Upgrade(); + if (!context) { + LOGE("End to value failed, context is null. index: %{public}d", index_); + } + SpringNode::EndToValue(endValue, velocity); + if (isRunning_) { + LOGD("EndToValue when running. index: %{public}d, endValue: %{public}.3lf, velocity: %{public}.3lf", index_, + endValue, velocity); + auto controlNode = adapter_->GetControlNode(); + if (!controlNode) { + LOGE("End to value failed. control node is null. index: %{public}d", index_); + return; + } + if (controlNode->IsAnimateToEnd()) { + startTime_ = context->GetTimeFromExternalTimer() - FRAME_SCHEDULED; + } else { + startTime_ = context->GetTimeFromExternalTimer() - (int64_t)(GetFrameDelta() * FRAME_SCHEDULED); + } + spring_->SetAccuracy(valueAccuracy_); + spring_->Reset(value_, endValue, velocity_, springProperty_); + } else { + LOGD("EndToValue first time. index: %{public}d, endValue: %{public}.3lf, velocity: %{public}.3lf", index_, + endValue, velocity); + startTime_ = context->GetTimeFromExternalTimer(); + isRunning_ = true; + spring_->SetAccuracy(valueAccuracy_); + spring_->Reset(value_, endValue, velocity_, springProperty_); + OnAnimation(); + } + NotifyNext(endValue, velocity); +} + +void SimpleSpringNode::OnAnimation() +{ + if (!isRunning_) { + return; + } + auto context = context_.Upgrade(); + if (!context) { + LOGE("Animate failed, context is null. index: %{public}d", index_); + return; + } + if (!spring_) { + LOGE("Animate failed, spring is null. index: %{public}d", index_); + return; + } + int64_t delta = context->GetTimeFromExternalTimer() - startTime_; + spring_->OnTimestampChanged(delta / NANOS_TO_MILLS, 0.0f, false); + value_ = spring_->GetCurrentPosition(); + velocity_ = spring_->GetCurrentVelocity(); + if (spring_->IsCompleted()) { + isRunning_ = false; + value_ = spring_->GetEndValue(); + velocity_ = 0.0; + // Node's animation update callback + OnUpdate(value_, velocity_); + NotifyUpdateListener(value_, velocity_); + OnEnd(value_); + scheduler_->Stop(); + } else { + OnUpdate(value_, velocity_); + NotifyUpdateListener(value_, velocity_); + scheduler_->Start(); + } +} + +void SimpleSpringNode::Cancel() +{ + scheduler_->Stop(); + isRunning_ = false; + velocity_ = 0.0; + OnEnd(value_); +} + +void SimpleSpringNode::ResetNode(double value, double velocity) +{ + LOGD("ResetNode. value: %{public}.3lf, velocity: %{public}.3lf", value, velocity); + value_ = value; + velocity_ = velocity; + OnUpdate(value_, velocity_); + NotifyUpdateListener(value_, velocity_); +} + +void SimpleSpringNode::TransferParams(double stiffness, double damping) +{ + if (springProperty_) { + springProperty_->SetStiffness(stiffness); + springProperty_->SetDamping(damping); + } +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/animation/simple_spring_node.h b/frameworks/core/animation/simple_spring_node.h new file mode 100644 index 00000000..fd1aa98a --- /dev/null +++ b/frameworks/core/animation/simple_spring_node.h @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_SIMPLE_SPRING_NODE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_SIMPLE_SPRING_NODE_H + +#include "core/animation/scheduler.h" +#include "core/animation/spring_motion.h" +#include "core/animation/spring_node.h" +#include "core/pipeline/pipeline_context.h" + +namespace OHOS::Ace { + +class SimpleSpringNode : public SpringNode { + DECLARE_ACE_TYPE(SimpleSpringNode, SpringNode); + +public: + SimpleSpringNode(const WeakPtr& context, int32_t index, double value); + ~SimpleSpringNode() override = default; + + void EndToValue(double endValue, double velocity) override; + + void TransferParams(double stiffness, double damping) override; + + double GetValue() const override + { + return value_; + } + + void SetValue(double value) override; + + void SetDeltaValue(double delta) override + { + value_ += delta; + } + + void ResetNode(double value, double velocity) override; + + double GetVelocity() const override + { + return velocity_; + } + + void SetVelocity(double velocity) + { + velocity_ = velocity; + } + + const RefPtr GetTransferParams() const + { + return springProperty_; + } + + void OnAnimation() override; + +protected: + static constexpr double DEFAULT_CHAIN_VALUE_ACCURACY = 1.0; + virtual void NotifyNext(double endValue, double initVelocity); + RefPtr spring_; + RefPtr springProperty_; + RefPtr scheduler_; + const WeakPtr context_; + double value_ = 0.0; + double velocity_ = 0.0; + double valueAccuracy_ = DEFAULT_CHAIN_VALUE_ACCURACY; + + void Cancel() override; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_SIMPLE_SPRING_NODE_H diff --git a/frameworks/core/animation/spring_adapter.h b/frameworks/core/animation/spring_adapter.h new file mode 100644 index 00000000..516ffeba --- /dev/null +++ b/frameworks/core/animation/spring_adapter.h @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_SPRING_ADAPTER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_SPRING_ADAPTER_H + +#include "base/memory/ace_type.h" + +namespace OHOS::Ace { + +class SpringNode; + +class SpringAdapter : public AceType { + DECLARE_ACE_TYPE(SpringAdapter, AceType); + +public: + class AdapterObserve : public AceType { + DECLARE_ACE_TYPE(AdapterObserve, AceType); + + public: + virtual void OnControlNodeChange() = 0; + virtual void OnNodeAdd(RefPtr& node) = 0; + virtual void OnNodeDelete(RefPtr& node) = 0; + }; + + void SetObserve(WeakPtr observe) + { + observe_ = observe; + } + + virtual RefPtr GetNext(const RefPtr& node) = 0; + + virtual int32_t GetSize() const = 0; + + virtual RefPtr GetControlNode() const = 0; + + virtual int32_t GetControlIndex() const = 0; + + virtual RefPtr GetNode(int32_t index) const = 0; + + void NotifyControlIndexChange() + { + if (observe_.Upgrade()) { + observe_.Upgrade()->OnControlNodeChange(); + } + } + + void NotifyNodeAdd(RefPtr& node) + { + if (observe_.Upgrade()) { + observe_.Upgrade()->OnNodeAdd(node); + } + } + + void NotifyNodeDelete(RefPtr& node) + { + if (observe_.Upgrade()) { + observe_.Upgrade()->OnNodeDelete(node); + } + } + + virtual void FlushAnimation() = 0; + + void TickAnimation(uint64_t timestamp) + { + if (timestamp_ == timestamp) { + return; + } + FlushAnimation(); + timestamp_ = timestamp; + } + +private: + WeakPtr observe_; + uint64_t timestamp_ = 0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_SPRING_ADAPTER_H diff --git a/frameworks/core/animation/spring_animation.cpp b/frameworks/core/animation/spring_animation.cpp new file mode 100644 index 00000000..c8c64449 --- /dev/null +++ b/frameworks/core/animation/spring_animation.cpp @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/animation/spring_animation.h" + +namespace OHOS::Ace { +namespace { + +constexpr float DEFAULT_VALUE_THRESHOLD = 0.001f; +constexpr float VELOCITY_THRESHOLD_RATIO = 25.0f; +constexpr float DEFAULT_START_POSITION = 0.0f; +constexpr float DEFAULT_END_POSITION = 1.0f; +constexpr float DEFAULT_START_VELOCITY = 0.0f; +constexpr int32_t DEFAULT_ESTIMATE_STEPS = 100; + +} // namespace + +SpringAnimation::SpringAnimation(const RefPtr& property) +{ + property_ = property; + valueThreshold_ = (DEFAULT_END_POSITION - DEFAULT_START_POSITION) * DEFAULT_VALUE_THRESHOLD; + SetEndPosition(DEFAULT_END_POSITION, DEFAULT_START_VELOCITY); +} + +SpringAnimation::SpringAnimation(const RefPtr& property, float velocity) +{ + property_ = property; + valueThreshold_ = (DEFAULT_END_POSITION - DEFAULT_START_POSITION) * DEFAULT_VALUE_THRESHOLD; + SetEndPosition(DEFAULT_END_POSITION, velocity); +} + +SpringAnimation::SpringAnimation(const RefPtr& property, float velocity, float valueThreshold) +{ + property_ = property; + valueThreshold_ = valueThreshold; + SetEndPosition(DEFAULT_END_POSITION, velocity); +} + +void SpringAnimation::SetEndPosition(float endPosition, float startVelocity) +{ + startPosition_ = 0.0f; + endPosition_ = endPosition; + currentVelocity_ = startVelocity; + currentPosition_ = startPosition_; + velocityThreshold_ = valueThreshold_ * VELOCITY_THRESHOLD_RATIO; + solution_ = SpringModel::Build(endPosition_, startVelocity, property_); + InitEstimateDuration(); +} + +void SpringAnimation::UpdatePosition(float normalized) +{ + currentPosition_ = endPosition_ - solution_->Position(normalized * estimateDuration_); + currentVelocity_ = solution_->Velocity(normalized * estimateDuration_); + if (NearEqual(currentPosition_, endPosition_, valueThreshold_) && + NearZero(currentVelocity_, velocityThreshold_)) { + currentPosition_ = endPosition_; + currentVelocity_ = 0.0f; + } + LOGD("Time:%{public}f Position:%{public}f Velocity:%{public}f", normalized, currentPosition_, currentVelocity_); +} + +void SpringAnimation::InitEstimateDuration() +{ + float position = 0.0f; + float velocity = 0.0f; + float time = 1.0f / DEFAULT_ESTIMATE_STEPS; + for (int32_t i = 1; i < DEFAULT_ESTIMATE_STEPS; ++i) { + position = endPosition_ - solution_->Position(time * i); + velocity = solution_->Velocity(time * i); + if (NearEqual(position, endPosition_, valueThreshold_) && NearZero(velocity, velocityThreshold_)) { + estimateDuration_ = time * i; + break; + } + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/animation/spring_animation.h b/frameworks/core/animation/spring_animation.h new file mode 100644 index 00000000..64e23300 --- /dev/null +++ b/frameworks/core/animation/spring_animation.h @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_SPRING_ANIMATION_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_SPRING_ANIMATION_H + +#include "core/animation/animation.h" +#include "core/animation/interpolator.h" +#include "core/animation/spring_motion.h" + +namespace OHOS::Ace { + +// Spring interpolator for elastic animation. Reference config:Mass(1.0) stiffness(100.0) damping(15.0). +class SpringAnimation : public Animation { + DECLARE_ACE_TYPE(SpringAnimation, Animation); + +public: + explicit SpringAnimation(const RefPtr& property); + SpringAnimation(const RefPtr& property, float velocity); + SpringAnimation(const RefPtr& property, float velocity, float valueThreshold); + ~SpringAnimation() override = default; + + const float& GetValue() const override + { + return currentPosition_; + } + +private: + void SetEndPosition(float endPosition, float startVelocity); + + void UpdatePosition(float normalized); + + void InitEstimateDuration(); + + void OnNormalizedTimestampChanged(float normalized, bool reverse) override + { + if (normalized < NORMALIZED_DURATION_MIN || normalized > NORMALIZED_DURATION_MAX) { + LOGE("normalized time check failed. normalized: %{public}f", normalized); + return; + } + UpdatePosition(normalized); + NotifyListener(currentPosition_); + } + + float estimateDuration_ = 1.0f; + float currentPosition_ = 0.0f; + float currentVelocity_ = 0.0f; + float valueThreshold_ = 0.001f; + float velocityThreshold_ = 0.001f; + float startPosition_ = 0.0f; + float endPosition_ = 0.0f; + RefPtr property_; // Contain: mass & stiffness & damping + RefPtr solution_; // Maybe: CriticalDamped or Overdamped or Underdamped +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_SPRING_ANIMATION_H diff --git a/frameworks/core/animation/spring_model.cpp b/frameworks/core/animation/spring_model.cpp new file mode 100644 index 00000000..84cebeb6 --- /dev/null +++ b/frameworks/core/animation/spring_model.cpp @@ -0,0 +1,181 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/animation/spring_model.h" + +#include "base/log/log.h" +#include "base/utils/utils.h" + +namespace OHOS::Ace { +namespace { + +constexpr double HIGH_RATIO = 4.0; +constexpr double LOW_RATIO = 2.0; + +} // namespace + +bool SpringProperty::IsValid() const +{ + if (LessOrEqual(mass_, 0.0) || LessOrEqual(stiffness_, 0.0) || LessOrEqual(damping_, 0.0)) { + return false; + } + return true; +} + +void SpringProperty::SetMass(double mass) +{ + if (mass > 0.0) { + mass_ = mass; + } +} + +double SpringProperty::Mass() const +{ + return mass_; +} + +void SpringProperty::SetStiffness(double stiffness) +{ + if (stiffness > 0.0) { + stiffness_ = stiffness; + } +} + +double SpringProperty::Stiffness() const +{ + return stiffness_; +} + +void SpringProperty::SetDamping(double damping) +{ + if (damping > 0.0) { + damping_ = damping; + } +} + +double SpringProperty::Damping() const +{ + return damping_; +} + +RefPtr SpringModel::Build(double distance, double velocity, const RefPtr& spring) +{ + if (!spring || !spring->IsValid()) { + LOGE("SpringProperty can not be nullptr."); + return nullptr; + } else { + double cmk = spring->Damping() * spring->Damping() - HIGH_RATIO * spring->Mass() * spring->Stiffness(); + if (NearZero(cmk)) { + if (NearZero(distance)) { + LOGE("create CriticalDamped failed, distance can not be zero."); + return nullptr; + } + return AceType::MakeRefPtr(distance, velocity, spring); + } else if (cmk > 0.0) { + return AceType::MakeRefPtr(distance, velocity, spring); + } else { + return AceType::MakeRefPtr(distance, velocity, spring); + } + } +} + +// Overdamping calculation model. +CriticalDampedModel::CriticalDampedModel(double distance, double velocity, const RefPtr& spring) +{ + if (spring && spring->IsValid() && !NearZero(distance)) { + r_ = -spring->Damping() / (LOW_RATIO * spring->Mass()); + c1_ = distance; + c2_ = velocity / (r_ * distance); + } +} + +double CriticalDampedModel::Position(double time) const +{ + return (c1_ + c2_ * time) * exp(r_ * time); +} + +double CriticalDampedModel::Velocity(double time) const +{ + const double power = exp(r_ * time); + return r_ * (c1_ + c2_ * time) * power + c2_ * power; +} + +SpringModelType CriticalDampedModel::GetType() const +{ + return SpringModelType::CRITICAL_DAMPED; +} + +// Overdamping calculation model. +OverdampedModel::OverdampedModel(double distance, double velocity, const RefPtr& spring) +{ + if (spring && spring->IsValid()) { + double cmk = spring->Damping() * spring->Damping() - HIGH_RATIO * spring->Mass() * spring->Stiffness(); + r1_ = (-spring->Damping() - sqrt(cmk)) / (LOW_RATIO * spring->Mass()); + r2_ = (-spring->Damping() + sqrt(cmk)) / (LOW_RATIO * spring->Mass()); + if (!NearEqual(r2_, r1_)) { + c2_ = (velocity - r1_ * distance) / (r2_ - r1_); + c1_ = distance - c2_; + } + } +} + +double OverdampedModel::Position(double time) const +{ + return c1_ * exp(r1_ * time) + c2_ * exp(r2_ * time); +} + +double OverdampedModel::Velocity(double time) const +{ + return c1_ * r1_ * exp(r1_ * time) + c2_ * r2_ * exp(r2_ * time); +} + +SpringModelType OverdampedModel::GetType() const +{ + return SpringModelType::OVER_DAMPED; +} + +// Underdamped calculation model +UnderdampedModel::UnderdampedModel(double distance, double velocity, const RefPtr& spring) +{ + if (spring && spring->IsValid()) { + w_ = sqrt(HIGH_RATIO * spring->Mass() * spring->Stiffness() - spring->Damping() * spring->Damping()) / + (LOW_RATIO * spring->Mass()); + r_ = -(spring->Damping() / LOW_RATIO * spring->Mass()); + c1_ = distance; + if (!NearEqual(w_, 0.0)) { + c2_ = (velocity - r_ * distance) / w_; + } + } +} + +double UnderdampedModel::Position(double time) const +{ + return exp(r_ * time) * (c1_ * cos(w_ * time) + c2_ * sin(w_ * time)); +} + +double UnderdampedModel::Velocity(double time) const +{ + double power = exp(r_ * time); + double cosine = cos(w_ * time); + double sine = sin(w_ * time); + return power * (c2_ * w_ * cosine - c1_ * w_ * sine) + r_ * power * (c2_ * sine + c1_ * cosine); +} + +SpringModelType UnderdampedModel::GetType() const +{ + return SpringModelType::UNDER_DAMPED; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/animation/spring_model.h b/frameworks/core/animation/spring_model.h new file mode 100644 index 00000000..eb8e21a6 --- /dev/null +++ b/frameworks/core/animation/spring_model.h @@ -0,0 +1,157 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_SPRING_MODEL_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_SPRING_MODEL_H + +#include "base/memory/ace_type.h" + +namespace OHOS::Ace { + +enum class SpringModelType { + CRITICAL_DAMPED, // critical damped calculation model + UNDER_DAMPED, // under damped calculation model + OVER_DAMPED, // over damping calculation model +}; + +class SpringProperty : public AceType { + DECLARE_ACE_TYPE(SpringProperty, AceType); + +public: + SpringProperty(double mass, double stiffness, double damping) + : mass_(mass), stiffness_(stiffness), damping_(damping) + {} + + SpringProperty() = default; + + ~SpringProperty() override = default; + + void SetMass(double mass); + + double Mass() const; + + void SetStiffness(double stiffness); + + double Stiffness() const; + + void SetDamping(double damping); + + double Damping() const; + + bool IsValid() const; + +private: + // Default stiffness of spring. + static constexpr double DEFAULT_STIFFNESS = 228.0; + // Default damping of spring. + static constexpr double DEFAULT_DAMPING = 30.0; + // Default mass of spring + static constexpr double DEFAULT_MASS = 1.0; + + // the mass of the spring. + double mass_ = DEFAULT_MASS; + // the stiffness of spring, generally, a spring stiffness is constant. + double stiffness_ = DEFAULT_STIFFNESS; + // damping ratio of spring + double damping_ = DEFAULT_DAMPING; +}; + +class SpringModel : public AceType { + DECLARE_ACE_TYPE(SpringModel, AceType); + +public: + // calculate position, the unit of time is second. + virtual double Position(double time) const = 0; + + // calculate velocity, the unit of time is second. + virtual double Velocity(double time) const = 0; + + // get current calculation type. + virtual SpringModelType GetType() const = 0; + + /** + * Judge the type of the spring and get the calculation according to the type. + */ + static RefPtr Build(double distance, double velocity, const RefPtr& spring); +}; + +// Critical Damped calculation model. +class CriticalDampedModel : public SpringModel { + DECLARE_ACE_TYPE(CriticalDampedModel, SpringModel); + +public: + CriticalDampedModel(double distance, double velocity, const RefPtr& spring); + + ~CriticalDampedModel() override = default; + + double Position(double time) const override; + + double Velocity(double time) const override; + + SpringModelType GetType() const override; + +private: + double r_ = 0.0; + double c1_ = 0.0; + double c2_ = 0.0; +}; + +// Overdamping calculation model. +class OverdampedModel : public SpringModel { + DECLARE_ACE_TYPE(OverdampedModel, SpringModel); + +public: + OverdampedModel(double distance, double velocity, const RefPtr& spring); + + ~OverdampedModel() override = default; + + double Position(double time) const override; + + double Velocity(double time) const override; + + SpringModelType GetType() const override; + +private: + double r1_ = 0.0; + double r2_ = 0.0; + double c1_ = 0.0; + double c2_ = 0.0; +}; + +// Underdamped calculation model +class UnderdampedModel : public SpringModel { + DECLARE_ACE_TYPE(UnderdampedModel, SpringModel); + +public: + UnderdampedModel(double distance, double velocity, const RefPtr& spring); + + ~UnderdampedModel() override = default; + + double Position(double time) const override; + + double Velocity(double time) const override; + + SpringModelType GetType() const override; + +private: + double w_ = 0.0; + double r_ = 0.0; + double c1_ = 0.0; + double c2_ = 0.0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_SPRING_MODEL_H diff --git a/frameworks/core/animation/spring_motion.cpp b/frameworks/core/animation/spring_motion.cpp new file mode 100644 index 00000000..71f7fdde --- /dev/null +++ b/frameworks/core/animation/spring_motion.cpp @@ -0,0 +1,111 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/animation/spring_motion.h" + +#include "base/log/log.h" + +namespace OHOS::Ace { +namespace { + +constexpr float UNIT_CONVERT = 1000.0f; + +} // namespace + +SpringMotion::SpringMotion(double start, double end, double velocity, const RefPtr& spring) +{ + Reset(start, end, velocity, spring); +} + +SpringModelType SpringMotion::GetType() +{ + return model_->GetType(); +} + +double SpringMotion::GetCurrentPosition() +{ + return currentPosition_; +} + +double SpringMotion::GetCurrentVelocity() +{ + return currentVelocity_; +} + +double SpringMotion::GetEndValue() const +{ + return endPosition_; +} + +bool SpringMotion::IsCompleted(double value, double velocity) const +{ + return NearZero(value - endPosition_, accuracy_) && NearZero(velocity, accuracy_); +} + +bool SpringMotion::IsCompleted() +{ + return IsCompleted(currentPosition_, currentVelocity_); +} + +void SpringMotion::SetAccuracy(double accuracy) +{ + accuracy_ = std::abs(accuracy); +} + +void SpringMotion::Reset(double start, double end, double velocity, const RefPtr& spring) +{ + currentPosition_ = start; + currentVelocity_ = velocity; + endPosition_ = end; + model_ = SpringModel::Build(start - end, velocity, spring); +} + +void SpringMotion::Move(float offsetTime) +{ + // change millisecond to second. + float offsetTimeInSecond = offsetTime / UNIT_CONVERT; + currentPosition_ = endPosition_ + model_->Position(offsetTimeInSecond); + currentVelocity_ = model_->Velocity(offsetTimeInSecond); + if (IsCompleted()) { + currentPosition_ = endPosition_; + currentVelocity_ = 0.0; + } +} + +ScrollSpringMotion::ScrollSpringMotion(double start, double end, double velocity, const RefPtr& spring) + : SpringMotion(start, end, velocity, spring) +{} + +bool ScrollSpringMotion::IsCompleted() +{ + return NearZero(currentPosition_ - endPosition_, accuracy_); +} + +double ScrollSpringMotion::GetCurrentPosition() +{ + return currentPosition_; +} + +void ScrollSpringMotion::Move(float offsetTime) +{ + // change millisecond to second. + float offsetTimeInSecond = offsetTime / UNIT_CONVERT; + currentPosition_ = endPosition_ + model_->Position(offsetTimeInSecond); + if (IsCompleted()) { + currentPosition_ = endPosition_; + } +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/animation/spring_motion.h b/frameworks/core/animation/spring_motion.h new file mode 100644 index 00000000..5be5c70a --- /dev/null +++ b/frameworks/core/animation/spring_motion.h @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_SPRING_MOTION_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_SPRING_MOTION_H + +#include + +#include "base/utils/utils.h" +#include "core/animation/motion.h" +#include "core/animation/spring_model.h" + +namespace OHOS::Ace { + +class SpringMotion : public Motion { + DECLARE_ACE_TYPE(SpringMotion, Motion); + +public: + SpringMotion(double start, double end, double velocity, const RefPtr& spring); + + ~SpringMotion() override = default; + + void Move(float offsetTime) override; + + SpringModelType GetType(); + + double GetCurrentPosition() override; + + double GetCurrentVelocity() override; + + double GetEndValue() const; + + bool IsCompleted(double value, double velocity) const; + + bool IsCompleted() override; + + void SetAccuracy(double accuracy); + + void Reset(double start, double end, double velocity, const RefPtr& spring); + +protected: + double endPosition_ = 0.0; + double currentPosition_ = 0.0; + double currentVelocity_ = 0.0; + double accuracy_ = NEAR_ZERO; + RefPtr model_; + +private: + // the threshold close to zero + static constexpr double NEAR_ZERO = 0.001; +}; + +class ScrollSpringMotion : public SpringMotion { + DECLARE_ACE_TYPE(ScrollSpringMotion, SpringMotion); + +public: + ScrollSpringMotion(double start, double end, double velocity, const RefPtr& spring); + + ~ScrollSpringMotion() override = default; + + void Move(float offsetTime) override; + + bool IsCompleted() override; + + double GetCurrentPosition() override; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_SPRING_MOTION_H diff --git a/frameworks/core/animation/spring_node.h b/frameworks/core/animation/spring_node.h new file mode 100644 index 00000000..005ae088 --- /dev/null +++ b/frameworks/core/animation/spring_node.h @@ -0,0 +1,156 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_SPRING_NODE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_SPRING_NODE_H + +#include "base/memory/ace_type.h" +#include "core/animation/spring_adapter.h" +#include "core/animation/spring_node_listenable.h" + +namespace OHOS::Ace { + +class SpringNode : public AceType, public SpringNodeListenable { + DECLARE_ACE_TYPE(SpringNode, AceType); + +public: + explicit SpringNode(int32_t index) + { + index_ = index; + } + + ~SpringNode() override = default; + + static constexpr int32_t UNSET_DISTANCE = -1; + + int32_t GetIndex() const + { + return index_; + } + + void SetIndex(int32_t index) + { + index_ = index; + } + + int32_t GetFrameDelta() const + { + return frameDelta_; + } + + void SetFrameDelta(int32_t frameDelta) + { + frameDelta_ = frameDelta; + } + + void SetAdapter(const RefPtr& adapter) + { + if (adapter) { + adapter_ = adapter; + } + } + + void SetMinDecoration(double minDecoration) + { + if (GreatOrEqual(minDecoration, 0.0)) { + minDecoration_ = minDecoration; + } + } + + void SetMaxDecoration(double maxDecoration) + { + if (GreatOrEqual(maxDecoration, 0.0)) { + maxDecoration_ = maxDecoration; + } + } + + void SetDecoration(double decoration) + { + if (GreatOrEqual(decoration, 0.0)) { + decoration_ = decoration; + } + } + + const RefPtr& GetAdapter() const + { + return adapter_; + } + + // Set control node's value + virtual void SetValue(double value) + { + isAnimateToEnd_ = false; + } + + virtual void EndToValue(double endValue, double velocity) + { + isAnimateToEnd_ = true; + } + + virtual void Cancel() = 0; + + virtual void TransferParams(double stiffness, double damping) = 0; + + virtual double GetValue() const = 0; + virtual double GetVelocity() const = 0; + + virtual void OnAnimation() = 0; + + void OnUpdate(double value, double velocity) {} + + void OnEnd(double value) {} + + virtual void SetDeltaValue(double delta) {} + + virtual void ResetNode(double value, double velocity) {} + + bool IsRunning() const + { + return isRunning_; + } + + bool IsAnimateToEnd() const + { + return isAnimateToEnd_; + } + + int32_t GetDistance() const + { + return distance_; + } + + void SetDistance(int32_t distance) + { + distance_ = distance; + } + +protected: + uint64_t startTime_ = 0; // The start time when the node starts to move + bool isRunning_ = false; // Whether the node is moving + RefPtr adapter_; + int32_t index_ = 0; // Node's index + double decoration_ = 0.0; + double minDecoration_ = 0.0; + double maxDecoration_ = 0.0; + +private: + int32_t frameDelta_ = 1; + bool isAnimateToEnd_ = false; + int32_t distance_ = UNSET_DISTANCE; // Distance to control point +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_SPRING_NODE_H diff --git a/frameworks/core/animation/spring_node_listenable.h b/frameworks/core/animation/spring_node_listenable.h new file mode 100644 index 00000000..5589b9c7 --- /dev/null +++ b/frameworks/core/animation/spring_node_listenable.h @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_SPRING_NODE_LISTENABLE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_SPRING_NODE_LISTENABLE_H + +#include + +#include "base/utils/event_callback.h" +#include "base/utils/utils.h" + +namespace OHOS::Ace { + +class SpringNodeListenable { +public: + using UpdateCallback = EventCallback; // value and velocity + + void AddUpdateListener(const UpdateCallback& callback) + { + updateCallbacks_.emplace(callback.GetId(), callback); + } + + template + UpdateCallback::IdType AddUpdateListener(const F& funcObject) + { + UpdateCallback callback(funcObject); + AddUpdateListener(callback); + return callback.GetId(); + } + + void NotifyUpdateListener(double value, double velocity) const + { + for (auto&& [id, callback] : updateCallbacks_) { + if (callback) { + callback(value, velocity); + } + } + } + + void RemoveUpdateListener(typename UpdateCallback::IdType id) + { + updateCallbacks_.erase(id); + } + +private: + std::unordered_map updateCallbacks_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_SPRING_NODE_LISTENABLE_H diff --git a/frameworks/core/animation/status_listener.h b/frameworks/core/animation/status_listener.h new file mode 100644 index 00000000..e80c1215 --- /dev/null +++ b/frameworks/core/animation/status_listener.h @@ -0,0 +1,315 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_STATUS_LISTENER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_STATUS_LISTENER_H + +#include + +#include "base/log/log.h" +#include "base/utils/event_callback.h" + +namespace OHOS::Ace { + +class StatusListenable { +public: + using StatusCallback = EventCallback; + + StatusListenable() = default; + virtual ~StatusListenable() = default; + + void AddStartListener(const StatusCallback& callback) + { + startCallbacks_.emplace(callback.GetId(), callback); + } + + void AddStopListener(const StatusCallback& callback) + { + stopCallbacks_.emplace(callback.GetId(), callback); + } + + void AddRepeatListener(const StatusCallback& callback) + { + repeatCallbacks_.emplace(callback.GetId(), callback); + } + + void AddPauseListener(const StatusCallback& callback) + { + pauseCallbacks_.emplace(callback.GetId(), callback); + } + + void AddResumeListener(const StatusCallback& callback) + { + resumeCallbacks_.emplace(callback.GetId(), callback); + } + + void AddIdleListener(const StatusCallback& callback) + { + idleCallbacks_.emplace(callback.GetId(), callback); + } + + void AddPrepareListener(const StatusCallback& callback) + { + prepareCallbacks_.emplace(callback.GetId(), callback); + } + + template + StatusCallback::IdType AddStartListener(const F& funcObject) + { + StatusCallback callback(funcObject); + AddStartListener(callback); + return callback.GetId(); + } + + template + StatusCallback::IdType AddStopListener(const F& funcObject) + { + StatusCallback callback(funcObject); + AddStopListener(callback); + return callback.GetId(); + } + + template + StatusCallback::IdType AddRepeatListener(const F& funcObject) + { + StatusCallback callback(funcObject); + AddRepeatListener(callback); + return callback.GetId(); + } + + template + StatusCallback::IdType AddPauseListener(const F& funcObject) + { + StatusCallback callback(funcObject); + AddPauseListener(callback); + return callback.GetId(); + } + + template + StatusCallback::IdType AddResumeListener(const F& funcObject) + { + StatusCallback callback(funcObject); + AddResumeListener(callback); + return callback.GetId(); + } + + template + StatusCallback::IdType AddIdleListener(const F& funcObject) + { + StatusCallback callback(funcObject); + AddIdleListener(callback); + return callback.GetId(); + } + + template + StatusCallback::IdType AddPrepareListener(const F& funcObject) + { + StatusCallback callback(funcObject); + AddPrepareListener(callback); + return callback.GetId(); + } + + void RemoveStartListener(const StatusCallback& callback) + { + startCallbacks_.erase(callback.GetId()); + } + + void RemoveStartListener(typename StatusCallback::IdType id) + { + startCallbacks_.erase(id); + } + + void RemoveStopListener(const StatusCallback& callback) + { + stopCallbacks_.erase(callback.GetId()); + } + + void RemoveStopListener(typename StatusCallback::IdType id) + { + stopCallbacks_.erase(id); + } + + void RemoveRepeatListener(const StatusCallback& callback) + { + repeatCallbacks_.erase(callback.GetId()); + } + + void RemoveRepeatListener(typename StatusCallback::IdType id) + { + repeatCallbacks_.erase(id); + } + + void RemovePauseListener(const StatusCallback& callback) + { + pauseCallbacks_.erase(callback.GetId()); + } + + void RemovePauseListener(typename StatusCallback::IdType id) + { + pauseCallbacks_.erase(id); + } + + void RemoveResumeListener(const StatusCallback& callback) + { + resumeCallbacks_.erase(callback.GetId()); + } + + void RemoveResumeListener(typename StatusCallback::IdType id) + { + resumeCallbacks_.erase(id); + } + + void RemoveIdleListener(const StatusCallback& callback) + { + idleCallbacks_.erase(callback.GetId()); + } + + void RemoveIdleListener(typename StatusCallback::IdType id) + { + idleCallbacks_.erase(id); + } + + void RemovePrepareListener(const StatusCallback& callback) + { + prepareCallbacks_.erase(callback.GetId()); + } + + void RemovePrepareListener(typename StatusCallback::IdType id) + { + prepareCallbacks_.erase(id); + } + + void ClearStartListeners() + { + startCallbacks_.clear(); + } + + void ClearStopListeners() + { + stopCallbacks_.clear(); + } + + void ClearRepeatListeners() + { + repeatCallbacks_.clear(); + } + + void ClearPauseListeners() + { + pauseCallbacks_.clear(); + } + + void ClearResumeListeners() + { + resumeCallbacks_.clear(); + } + + void ClearIdleListeners() + { + idleCallbacks_.clear(); + } + + void ClearPrepareListeners() + { + prepareCallbacks_.clear(); + } + + void ClearAllListeners() + { + ClearStartListeners(); + ClearStopListeners(); + ClearRepeatListeners(); + ClearPauseListeners(); + ClearResumeListeners(); + ClearIdleListeners(); + ClearPrepareListeners(); + } + + void NotifyStartListener() const + { + for (auto&& [id, callback] : startCallbacks_) { + if (callback) { + callback(); + } + } + } + + void NotifyStopListener() const + { + for (auto&& [id, callback] : stopCallbacks_) { + if (callback) { + callback(); + } + } + } + + void NotifyRepeatListener() const + { + for (auto&& [id, callback] : repeatCallbacks_) { + if (callback) { + callback(); + } + } + } + + void NotifyPauseListener() const + { + for (auto&& [id, callback] : pauseCallbacks_) { + if (callback) { + callback(); + } + } + } + + void NotifyResumeListener() const + { + for (auto&& [id, callback] : resumeCallbacks_) { + if (callback) { + callback(); + } + } + } + + void NotifyIdleListener() const + { + for (auto&& [id, callback] : idleCallbacks_) { + if (callback) { + callback(); + } + } + } + + void NotifyPrepareListener() const + { + for (auto&& [id, callback] : prepareCallbacks_) { + if (callback) { + callback(); + } + } + } + +private: + std::unordered_map startCallbacks_; + std::unordered_map stopCallbacks_; + std::unordered_map pauseCallbacks_; + std::unordered_map resumeCallbacks_; + std::unordered_map repeatCallbacks_; + std::unordered_map idleCallbacks_; + std::unordered_map prepareCallbacks_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_STATUS_LISTENER_H diff --git a/frameworks/core/animation/svg_animate.cpp b/frameworks/core/animation/svg_animate.cpp new file mode 100644 index 00000000..fa35a597 --- /dev/null +++ b/frameworks/core/animation/svg_animate.cpp @@ -0,0 +1,534 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/animation/svg_animate.h" + +#include "base/log/log.h" + +namespace OHOS::Ace { + +template +void SvgAnimate::CreateKeyframe(const RefPtr>& animation, const T& value, float time, + const RefPtr& curve) +{ + if (!animation) { + LOGE("create discrete calcMode animate failed, animation is null"); + return; + } + if (!curve) { + LOGE("Create keyframe failed, curve is null"); + return; + } + auto keyframe = AceType::MakeRefPtr>(time, value); + keyframe->SetCurve(curve); + animation->AddKeyframe(keyframe); +} + +template +void SvgAnimate::CreateFirstKeyframe(const RefPtr>& animation, const T& value) +{ + if (!animation) { + LOGE("create discrete calcMode animate failed, animation is null"); + return; + } + auto keyframe = AceType::MakeRefPtr>(0.0f, value); + animation->AddKeyframe(keyframe); +} + +template +bool SvgAnimate::CreatePropertyAnimate(std::function&& callback, const T& originalValue, + const RefPtr>& evaluator, const RefPtr& animator) +{ + bool ret = false; + switch (calcMode_) { + case CalcMode::DISCRETE: + ret = CreateDiscreteAnimate(std::move(callback), originalValue, evaluator, animator); + break; + case CalcMode::LINEAR: + ret = CreateLinearAnimate(std::move(callback), originalValue, evaluator, animator); + break; + case CalcMode::PACED: + ret = CreatePacedAnimate(std::move(callback), originalValue, evaluator, animator); + break; + case CalcMode::SPLINE: + ret = CreateSplineAnimate(std::move(callback), originalValue, evaluator, animator); + break; + default: + LOGE("invalid calcMode"); + break; + } + return ret; +} + +bool SvgAnimate::CreateMotionAnimate(std::function&& callback, const RefPtr& animator) +{ + RefPtr> evaluator = AceType::MakeRefPtr>(); + if (keyPoints_.empty() || calcMode_ == CalcMode::PACED) { + auto animation = AceType::MakeRefPtr>(0.0, 1.0, GetCurve()); + animation->SetEvaluator(evaluator); + animation->AddListener(callback); + animator->AddInterpolator(animation); + animator->SetDuration(GetDur()); + animator->SetFillMode(GetFillMode()); + animator->SetIteration(repeatCount_); + animator->SetStartDelay(GetBegin()); + animator->Play(); + return true; + } + bool ret = false; + double originalValue = 0.0; + switch (calcMode_) { + case CalcMode::DISCRETE: + ret = CreateDiscreteAnimate(std::move(callback), originalValue, evaluator, animator); + break; + case CalcMode::LINEAR: + ret = CreateLinearAnimate(std::move(callback), originalValue, evaluator, animator); + break; + case CalcMode::SPLINE: + ret = CreateSplineAnimate(std::move(callback), originalValue, evaluator, animator); + break; + default: + LOGE("invalid calcMode"); + break; + } + return ret; +} + +template +bool SvgAnimate::CreateDiscreteAnimate(std::function&& callback, const T& originalValue, + const RefPtr>& evaluator, const RefPtr& animator) +{ + if (calcMode_ != CalcMode::DISCRETE) { + LOGW("invalid calcMode"); + return false; + } + RefPtr> animation = AceType::MakeRefPtr>(); + const auto& values = GetKeyValues(); + if (values.empty()) { + T startValue = GetStartValue(originalValue); + T endValue = GetEndValue(startValue); + if (!DiscreteAnimate(animation, originalValue, startValue, endValue)) { + LOGW("discreteAnimate, create discrete animate failed"); + return false; + } + } else { + if (!DiscreteAnimate(animation, originalValue)) { + LOGW("discreteAnimate with value, create discrete animate failed"); + return false; + } + } + animation->SetEvaluator(evaluator); + animation->AddListener(std::move(callback)); + animator->AddInterpolator(animation); + animator->SetDuration(GetDur()); + animator->SetFillMode(GetFillMode()); + animator->SetIteration(repeatCount_); + animator->SetStartDelay(GetBegin()); + animator->Play(); + return true; +} + +template +bool SvgAnimate::DiscreteAnimate(const RefPtr>& animation, + const T& originalValue, const T& startValue, const T& endValue) +{ + if (startValue == endValue && startValue == originalValue) { + LOGW("the start value and end value are the same as the original value"); + return false; + } + CreateFirstKeyframe(animation, originalValue); + CreateKeyframe(animation, startValue, 0.5f, GetCurve()); + CreateKeyframe(animation, endValue, 1.0f, GetCurve()); + return true; +} + +template +bool SvgAnimate::DiscreteAnimate(const RefPtr>& animation, const T& originalValue) +{ + const auto& values = GetKeyValues(); + if (values.empty()) { + LOGW("create discrete calcMode animate failed, values is null"); + return false; + } + if (values.size() == 1) { + CreateFirstKeyframe(animation, originalValue); + CreateKeyframe(animation, GetValue(values.front()), 1.0f, GetCurve()); + return true; + } else if (values.size() == 2) { + return DiscreteAnimate(animation, originalValue, GetValue(values.front()), + GetValue(values.back())); + } else { + if (!keyTimes_.empty()) { + return DiscreteWithValues(animation, originalValue); + } else { + return DiscreteWithKeyTimes(animation, originalValue); + } + } +} + +template +bool SvgAnimate::DiscreteWithValues(const RefPtr>& animation, const T& originalValue) +{ + if (!animation) { + LOGE("create discrete calcMode animate failed, animation is null"); + return false; + } + const auto& values = GetKeyValues(); + if (values.size() < 3) { + LOGW("create discrete calcMode animate failed, values is null"); + return false; + } + // In discrete calcMode, if without keyTimes, the first value is the original value + // For example: values = {2, 3, 4} and originalValue=1, the keyframe values will be {1, 2, 3, 4} + float keyTime = ((int)(100.0f / (values.size()))) / 100.0f; + CreateFirstKeyframe(animation, originalValue); + auto valueIter = values.begin(); + while (valueIter != (values.end() - 1)) { + CreateKeyframe(animation, GetValue(*valueIter), keyTime, GetCurve()); + keyTime += keyTime; + ++valueIter; + } + CreateKeyframe(animation, GetValue(values.back()), 1.0f, GetCurve()); + return true; +} + +template +bool SvgAnimate::DiscreteWithKeyTimes(const RefPtr>& animation, const T& originalValue) +{ + if (!animation) { + LOGE("create discrete calcMode animate failed, animation is null"); + return false; + } + const auto& values = GetKeyValues(); + if (values.size() < 3 || keyTimes_.size() != values.size()) { + LOGW("create discrete calcMode animate failed, values or keyTimes invalid"); + return false; + } + // In discrete calcMode, if has keyTimes, the first value is the original value and the last value of + // values is invalid. For example: values = {2, 3, 4} and originalValue=1, the keyframe values will be {1, 2, 3} + CreateFirstKeyframe(animation, originalValue); + auto valueIter = values.begin(); + auto keyTimeIter = keyTimes_.begin() + 1; + while (valueIter != (values.end() - 2)) { + CreateKeyframe(animation, GetValue(*valueIter), *keyTimeIter, GetCurve()); + ++valueIter; + ++keyTimeIter; + } + CreateKeyframe(animation, GetValue(*(values.end() - 2)), 1.0f, GetCurve()); + return true; +} + +template +bool SvgAnimate::CreateLinearAnimate(std::function&& callback, const T& originalValue, + const RefPtr>& evaluator, const RefPtr& animator) +{ + if (calcMode_ != CalcMode::LINEAR) { + LOGW("invalid calcMode"); + return false; + } + const auto& values = GetKeyValues(); + if (!values.empty()) { + RefPtr> animation = AceType::MakeRefPtr>(); + if (!LinearAnimate(animation)) { + LOGW("create linear animate failed"); + return false; + } + animation->SetEvaluator(evaluator); + animation->AddListener(std::move(callback)); + animator->AddInterpolator(animation); + } else { + if (!LinearAnimate(std::move(callback), originalValue, evaluator, animator)) { + LOGW("create linear animate failed"); + return false; + } + } + animator->SetDuration(GetDur()); + animator->SetFillMode(GetFillMode()); + animator->SetIteration(repeatCount_); + animator->SetStartDelay(GetBegin()); + animator->Play(); + return true; +} + +template +bool SvgAnimate::LinearAnimate(std::function&& callback, const T& originalValue, + const RefPtr>& evaluator, const RefPtr& animator) +{ + if (!animator) { + LOGE("create linear calcMode animate failed, animation is null"); + return false; + } + T startValue = GetStartValue(originalValue); + T endValue = GetEndValue(startValue); + if (startValue == endValue) { + if (startValue == originalValue) { + LOGW("the start value and end value are the same as the original value, startValue=%{public}s", + from_.c_str()); + return false; + } + startValue = originalValue; + } + auto animation = AceType::MakeRefPtr>(startValue, endValue, GetCurve()); + animation->SetEvaluator(evaluator); + animation->AddListener(std::move(callback)); + animator->AddInterpolator(animation); + return true; +} + +template +bool SvgAnimate::LinearAnimate(const RefPtr>& animation) +{ + const auto& values = GetKeyValues(); + if (values.empty()) { + LOGW("create linear calcMode animate failed, values is invalid"); + return false; + } + if (values.size() <= 2) { + CreateFirstKeyframe(animation, GetValue(values.front())); + CreateKeyframe(animation, GetValue(values.back()), 1.0f, GetCurve()); + return true; + } + if (!keyTimes_.empty()) { + return LinearWithKeyTimes(animation); + } else { + return LinearWithValues(animation); + } +} + +template +bool SvgAnimate::LinearWithValues(const RefPtr>& animation) +{ + if (!animation) { + LOGE("create linear calcMode animate failed, animation is null"); + return false; + } + const auto& values = GetKeyValues(); + if (values.size() < 3) { + LOGW("create linear calcMode animate failed, values is invalid"); + return false; + } + CreateFirstKeyframe(animation, GetValue(values.front())); + float keyTime = ((int)(100.0f / (values.size() - 1))) / 100.0f; + auto valueIter = values.begin() + 1; + while (valueIter != (values.end() - 1)) { + CreateKeyframe(animation, GetValue(*valueIter), keyTime, GetCurve()); + keyTime += keyTime; + ++valueIter; + } + CreateKeyframe(animation, GetValue(values.back()), 1.0f, GetCurve()); + return true; +} + +template +bool SvgAnimate::LinearWithKeyTimes(const RefPtr>& animation) +{ + if (!animation) { + LOGE("create linear calcMode animate failed, animation is null"); + return false; + } + const auto& values = GetKeyValues(); + if (values.size() < 3 || keyTimes_.size() != values.size()) { + LOGW("create linear calcMode animate failed, values is invalid"); + return false; + } + CreateFirstKeyframe(animation, GetValue(values.front())); + auto valueIter = values.begin() + 1; + auto keyTimeIter = keyTimes_.begin() + 1; + while (valueIter != (values.end() - 1)) { + CreateKeyframe(animation, GetValue(*valueIter), *keyTimeIter, GetCurve()); + ++valueIter; + ++keyTimeIter; + } + CreateKeyframe(animation, GetValue(values.back()), 1.0f, GetCurve()); + return true; +} + +template +bool SvgAnimate::CreatePacedAnimate(std::function&& callback, const T& originalValue, + const RefPtr>& evaluator, const RefPtr& animator) +{ + if (calcMode_ != CalcMode::PACED) { + LOGW("invalid calcMode"); + return false; + } + const auto& values = GetKeyValues(); + if (!values.empty()) { + RefPtr> animation = AceType::MakeRefPtr>(); + if (values.size() <= 2) { + CreateFirstKeyframe(animation, GetValue(values.front())); + CreateKeyframe(animation, GetValue(values.back()), 1.0f, GetCurve()); + } else { + if (!LinearWithValues(animation)) { + LOGW("linearWithValues, create paced animate failed"); + return false; + } + } + animation->SetEvaluator(evaluator); + animation->AddListener(std::move(callback)); + animator->AddInterpolator(animation); + } else { + if (!LinearAnimate(std::move(callback), originalValue, evaluator, animator)) { + LOGW("create linear animate failed"); + return false; + } + } + animator->SetDuration(GetDur()); + animator->SetFillMode(GetFillMode()); + animator->SetIteration(repeatCount_); + animator->SetStartDelay(GetBegin()); + animator->Play(); + return true; +} + +template +bool SvgAnimate::CreateSplineAnimate(std::function&& callback, const T& originalValue, + const RefPtr>& evaluator, const RefPtr& animator) +{ + if (calcMode_ != CalcMode::SPLINE) { + LOGW("invalid calcMode"); + return false; + } + const auto& values = GetKeyValues(); + if (values.empty() && !SplineAnimate(std::move(callback), originalValue, evaluator, animator)) { + LOGW("create spline animate failed"); + return false; + } + RefPtr> animation = AceType::MakeRefPtr>(); + if (!SplineAnimate(animation)) { + LOGW("create spline animate failed"); + return false; + } + animation->SetEvaluator(evaluator); + animation->AddListener(std::move(callback)); + animator->AddInterpolator(animation); + animator->SetDuration(GetDur()); + animator->SetFillMode(GetFillMode()); + animator->SetIteration(repeatCount_); + animator->SetStartDelay(GetBegin()); + animator->Play(); + return true; +} + +template +bool SvgAnimate::SplineAnimate(std::function&& callback, const T& originalValue, + const RefPtr>& evaluator, const RefPtr& animator) +{ + if (!animator) { + LOGE("create linear calcMode animate failed, animation is null"); + return false; + } + if (keySplines_.empty()) { + LOGW("create linear calcMode animate failed, keySplines is invalid"); + return false; + } + T startValue = GetStartValue(originalValue); + T endValue = GetEndValue(startValue); + if (startValue == endValue) { + if (startValue == originalValue) { + return false; + } + startValue = originalValue; + } + auto animation = AceType::MakeRefPtr>(startValue, endValue, GetCurve(keySplines_[0])); + animation->SetEvaluator(evaluator); + animation->AddListener(std::move(callback)); + animator->AddInterpolator(animation); + return true; +} + +template +bool SvgAnimate::SplineAnimate(const RefPtr>& animation) +{ + const auto& values = GetKeyValues(); + if (values.size() < 2) { + LOGW("animation invalid, values is invalid"); + return false; + } + if (values.size() == 2) { + if (keySplines_.size() != 1) { + LOGW("animation invalid, the curve is not defined."); + return false; + } + CreateFirstKeyframe(animation, GetValue(values.front())); + CreateKeyframe(animation, GetValue(values.back()), 1.0f, CubicCurveCreator(keySplines_.front())); + return true; + } + if (keyTimes_.empty()) { + return SplineWithKeySplines(animation); + } else { + return SplineWithKeyTimes(animation); + } +} + +template +bool SvgAnimate::SplineWithKeySplines(const RefPtr>& animation) +{ + if (!animation) { + LOGE("create spline calcMode animate failed, animation is null"); + return false; + } + const auto& values = GetKeyValues(); + if (values.size() < 3 || keySplines_.size() != (values.size() - 1)) { + LOGW("create spline calcMode animate failed, keySplines_ is invalid"); + return false; + } + float keyTime = ((int)(100.0f / values.size() - 1)) / 100.0f; + CreateFirstKeyframe(animation, GetValue(values.front())); + auto valueIter = values.begin() + 1; + auto keySplineIter = keySplines_.begin(); + while (valueIter != (values.end() - 1)) { + CreateKeyframe(animation, GetValue(*valueIter), keyTime, CubicCurveCreator(*keySplineIter)); + ++valueIter; + ++keySplineIter; + keyTime += keyTime; + } + CreateKeyframe(animation, GetValue(values.back()), 1.0f, CubicCurveCreator(keySplines_.back())); + return true; +} + +template +bool SvgAnimate::SplineWithKeyTimes(const RefPtr>& animation) +{ + if (!animation) { + LOGE("create spline calcMode animate failed, animation is null"); + return false; + } + const auto& values = GetKeyValues(); + if (values.size() < 3 || keySplines_.size() != (values.size() - 1) || values.size() != keyTimes_.size()) { + LOGW("create spline calcMode animate failed"); + return false; + } + CreateFirstKeyframe(animation, GetValue(values.front())); + auto valueIter = values.begin() + 1; + auto keySplineIter = keySplines_.begin() + 1; + auto keyTimeIter = keyTimes_.begin() + 1; + while (valueIter != (values.end() - 1)) { + CreateKeyframe(animation, GetValue(*valueIter), *keyTimeIter, CubicCurveCreator(*keySplineIter)); + ++valueIter; + ++keySplineIter; + ++keyTimeIter; + } + CreateKeyframe(animation, GetValue(values.back()), 1.0f, CubicCurveCreator(keySplines_.back())); + return true; +} + +template bool SvgAnimate::CreatePropertyAnimate(std::function&& callback, const double& originalValue, + const RefPtr>& evaluator, const RefPtr& animator); +template bool SvgAnimate::CreatePropertyAnimate(std::function&& callback, + const Dimension& originalValue, const RefPtr>& evaluator, const RefPtr& animator); +template bool SvgAnimate::CreatePropertyAnimate(std::function&& callback, const Color& originalValue, + const RefPtr>& evaluator, const RefPtr& animator); + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/animation/svg_animate.h b/frameworks/core/animation/svg_animate.h new file mode 100644 index 00000000..6a972312 --- /dev/null +++ b/frameworks/core/animation/svg_animate.h @@ -0,0 +1,525 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_SVG_ANIMATE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_SVG_ANIMATE_H + +#include "base/log/log.h" +#include "base/memory/ace_type.h" +#include "frameworks/core/animation/animator.h" +#include "frameworks/core/animation/curve_animation.h" +#include "frameworks/core/animation/keyframe_animation.h" + +namespace OHOS::Ace { + +enum class Fill { + FREEZE, + REMOVE +}; + +enum class Restart { + ALWAYS, + WHEN_NOT_ACTIVE, + NEVER +}; + +enum class CalcMode { + LINEAR, + PACED, + DISCRETE, + SPLINE +}; + +enum class Additive { + REPLACE, + SUM_ADD +}; + +enum class Accumulate { + NONE, + SUM_ACC +}; + +enum class SvgAnimateType { + ANIMATE, + MOTION, + TRANSFORM, +}; + +class SvgAnimate : public AceType { + DECLARE_ACE_TYPE(SvgAnimate, AceType); + +public: + SvgAnimate() = default; + ~SvgAnimate() override = default; + + template + bool CreatePropertyAnimate(std::function&& callback, const T& originalValue, + const RefPtr>& evaluator, const RefPtr& animator); + bool CreateMotionAnimate(std::function&& callback, const RefPtr& animator); + + RefPtr GetCurve(const std::string& param = "") const + { + if (calcMode_ == CalcMode::DISCRETE) { + return AceType::MakeRefPtr(1, StepsCurvePosition::START); + } else if (calcMode_ == CalcMode::PACED) { + return Curves::LINEAR; + } else if (calcMode_ == CalcMode::SPLINE) { + return CubicCurveCreator(param); + } else { + return Curves::LINEAR; + } + } + + FillMode GetFillMode() const + { + if (fillMode_ == Fill::FREEZE) { + return FillMode::FORWARDS; + } else { + return FillMode::NONE; + } + } + + RefPtr CubicCurveCreator(const std::string& paramStr) const + { + std::vector params; + StringUtils::SplitStr(paramStr, " ", params); + if (params.size() != 4) { + LOGE("cubic curve accept only 4 parameters"); + return Curves::LINEAR; + } + double x1 = StringUtils::StringToDouble(params.at(0)); + double y1 = StringUtils::StringToDouble(params.at(1)); + double x2 = StringUtils::StringToDouble(params.at(2)); + double y2 = StringUtils::StringToDouble(params.at(3)); + return AceType::MakeRefPtr(x1, y1, x2, y2); + } + + template + T GetStartValue(const T& originalValue) const + { + if (!from_.empty()) { + return StringUtils::StringToDouble(from_); + } else { + return originalValue; + } + } + + template<> + Color GetStartValue(const Color& originalValue) const + { + if (!from_.empty()) { + return Color::FromString(from_); + } else { + return originalValue; + } + } + + template<> + Dimension GetStartValue(const Dimension& originalValue) const + { + if (!from_.empty()) { + return StringUtils::StringToDimension(from_); + } else { + return originalValue; + } + } + + template + T GetEndValue(const T& startValue) const + { + if (!to_.empty()) { + return StringUtils::StringToDouble(to_); + } else if (!by_.empty()) { + return startValue + StringUtils::StringToDouble(by_); + } else { + return startValue; + } + } + + template<> + Color GetEndValue(const Color& startValue) const + { + if (!to_.empty()) { + return Color::FromString(to_); + } else if (!by_.empty()) { + return startValue + Color::FromString(by_); + } else { + return startValue; + } + } + + template<> + Dimension GetEndValue(const Dimension& startValue) const + { + if (!to_.empty()) { + return StringUtils::StringToDimension(to_); + } else if (!by_.empty()) { + return startValue + StringUtils::StringToDimension(by_); + } else { + return startValue; + } + } + + template + T GetValue(const std::string& value) const + { + return StringUtils::StringToDouble(value); + } + + template<> + Dimension GetValue(const std::string& value) const + { + return StringUtils::StringToDimension(value); + } + + template<> + Color GetValue(const std::string& value) const + { + return Color::FromString(value); + } + + void SetAttributeName(const std::string& attributeName) + { + attributeName_ = attributeName; + } + + void SetBegin(int32_t begin) + { + begin_ = begin; + } + + void SetDur(int32_t dur) + { + dur_ = dur; + } + + void SetEnd(int32_t end) + { + end_ = end; + } + + void SetMin(int32_t min) + { + min_ = min; + } + + void SetMax(int32_t max) + { + max_ = max; + } + + void SetRestart(Restart restart) + { + restart_ = restart; + } + + void SetRepeatCount(int32_t repeatCount) + { + repeatCount_ = repeatCount; + } + + void SetRepeatDur(int32_t repeatDur) + { + repeatDur_ = repeatDur; + } + + void SetFillMode(Fill fillMode) + { + fillMode_ = fillMode; + } + + void SetCalcMode(CalcMode calcMode) + { + calcMode_ = calcMode; + } + + void SetAdditive(Additive additive) + { + additive_ = additive; + } + + void SetAccumulate(Accumulate accumulate) + { + accumulate_ = accumulate; + } + + void SetValues(const std::vector& values) + { + if (!values.empty()) { + values_.clear(); + values_.assign(values.begin(), values.end()); + } + } + + void SetKeyTimes(const std::vector& keyTimes) + { + if (!keyTimes.empty()) { + keyTimes_.clear(); + keyTimes_.assign(keyTimes.begin(), keyTimes.end()); + } + } + + void SetKeySplines(const std::vector& keySplines) + { + if (!keySplines.empty()) { + keySplines_.clear(); + keySplines_.assign(keySplines.begin(), keySplines.end()); + } + } + + void SetFrom(const std::string& from) + { + from_ = from; + } + + void SetTo(const std::string& to) + { + to_ = to; + } + + void SetBy(const std::string& by) + { + by_ = by; + } + + int32_t GetBegin() const + { + return std::max(begin_, 0); + } + + int32_t GetDur() const + { + if (dur_ > 0) { + return dur_; + } + if (GetEnd() - GetBegin() > 0) { + return GetEnd() - GetBegin(); + } + return 0; + } + + int32_t GetEnd() const + { + return std::max(end_, 0); + } + + const std::string& GetFrom() const + { + return from_; + } + + const std::string& GetTo() const + { + return to_; + } + + const std::string& GetBy() const + { + return by_; + } + + const std::string& GetAttributeName() const + { + return attributeName_; + } + + const std::vector& GetValues() const + { + return values_; + } + + const std::vector& GetKeyTimes() const + { + return keyTimes_; + } + + const std::vector& GetKeySplines() const + { + return keySplines_; + } + + int32_t GetRepeatCount() const + { + return repeatCount_; + } + + CalcMode GetCalcMode() const + { + return calcMode_; + } + + void SetKeyPoints(const std::vector& keyPoints) + { + if (!keyPoints.empty()) { + keyPoints_.clear(); + keyPoints_.assign(keyPoints.begin(), keyPoints.end()); + } + } + + void SetPath(const std::string& path) + { + path_ = path; + } + + void SetRotate(const std::string& rotate) + { + rotate_ = rotate; + } + + const std::vector& GetKeyPoints() const + { + return keyPoints_; + } + + const std::string& GetPath() const + { + return path_; + } + + const std::string& GetRotate() const + { + return rotate_; + } + + void SetTransformType(const std::string& transformType) + { + transformType_ = transformType; + } + + SvgAnimateType GetSvgAnimateType() const + { + return svgAnimateType_; + } + + void SetSvgAnimateType(SvgAnimateType svgAnimateType) + { + svgAnimateType_ = svgAnimateType; + } + + const std::vector& GetKeyValues() const + { + if (svgAnimateType_ == SvgAnimateType::MOTION) { + return keyPoints_; + } + return values_; + } + + void Copy(RefPtr& svgAnimate) + { + svgAnimate->SetAttributeName(attributeName_); + svgAnimate->SetBegin(begin_); + svgAnimate->SetDur(dur_); + svgAnimate->SetEnd(end_); + svgAnimate->SetMin(min_); + svgAnimate->SetMax(max_); + svgAnimate->SetRestart(restart_); + svgAnimate->SetRepeatCount(repeatCount_); + svgAnimate->SetRepeatDur(repeatDur_); + svgAnimate->SetFillMode(fillMode_); + svgAnimate->SetCalcMode(calcMode_); + svgAnimate->SetAdditive(additive_); + svgAnimate->SetAccumulate(accumulate_); + svgAnimate->SetValues(values_); + svgAnimate->SetKeyTimes(keyTimes_); + svgAnimate->SetKeySplines(keySplines_); + svgAnimate->SetFrom(from_); + svgAnimate->SetTo(to_); + svgAnimate->SetBy(by_); + svgAnimate->SetSvgAnimateType(svgAnimateType_); + } + +protected: + std::string attributeName_; + int32_t begin_ = 0; + int32_t dur_ = 0; + int32_t end_ = 0; + int32_t min_ = 0; + int32_t max_ = 0; + Restart restart_ = Restart::ALWAYS; + int32_t repeatCount_ = 1; + int32_t repeatDur_ = 0; + Fill fillMode_ = Fill::REMOVE; + CalcMode calcMode_ = CalcMode::LINEAR; + Additive additive_ = Additive::REPLACE; + Accumulate accumulate_ = Accumulate::NONE; + std::vector values_; + std::vector keyTimes_; + std::vector keySplines_; + std::string from_; + std::string to_; + std::string by_; + + std::vector keyPoints_; + std::string path_; + std::string rotate_; + + std::string transformType_; + SvgAnimateType svgAnimateType_ = SvgAnimateType::ANIMATE; + +private: + template + void CreateKeyframe(const RefPtr>& animation, const T& value, float time, + const RefPtr& curve); + template + void CreateFirstKeyframe(const RefPtr>& animation, const T& value); + + template + bool CreateDiscreteAnimate(std::function&& callback, const T& originalValue, + const RefPtr>& evaluator, const RefPtr& animator); + template + bool DiscreteAnimate(const RefPtr>& animation, const T& originalValue, const T& startValue, + const T& endValue); + template + bool DiscreteAnimate(const RefPtr>& animation, const T& originalValue); + template + bool DiscreteWithValues(const RefPtr>& animation, const T& originalValue); + template + bool DiscreteWithKeyTimes(const RefPtr>& animation, const T& originalValue); + + template + bool CreateLinearAnimate(std::function&& callback, const T& originalValue, + const RefPtr>& evaluator, const RefPtr& animator); + template + bool LinearAnimate(std::function&& callback, const T& originalValue, + const RefPtr>& evaluator, const RefPtr& animator); + template + bool LinearAnimate(const RefPtr>& animation); + template + bool LinearWithKeyTimes(const RefPtr>& animation); + template + bool LinearWithValues(const RefPtr>& animation); + + template + bool CreatePacedAnimate(std::function&& callback, const T& originalValue, + const RefPtr>& evaluator, const RefPtr& animator); + + template + bool CreateSplineAnimate(std::function&& callback, const T& originalValue, + const RefPtr>& evaluator, const RefPtr& animator); + template + bool SplineAnimate(std::function&& callback, const T& originalValue, + const RefPtr>& evaluator, const RefPtr& animator); + template + bool SplineAnimate(const RefPtr>& animation); + template + bool SplineWithKeySplines(const RefPtr>& animation); + template + bool SplineWithKeyTimes(const RefPtr>& animation); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_SVG_ANIMATE_H diff --git a/frameworks/core/animation/test/BUILD.gn b/frameworks/core/animation/test/BUILD.gn new file mode 100644 index 00000000..f6a1553e --- /dev/null +++ b/frameworks/core/animation/test/BUILD.gn @@ -0,0 +1,23 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") + +group("unittest") { + testonly = true + deps = [ + "unittest/framework:unittest", + "unittest/spring_chain:unittest", + "unittest/svg_animate:unittest", + ] +} diff --git a/frameworks/core/animation/test/unittest/framework/BUILD.gn b/frameworks/core/animation/test/unittest/framework/BUILD.gn new file mode 100644 index 00000000..1d65cdc7 --- /dev/null +++ b/frameworks/core/animation/test/unittest/framework/BUILD.gn @@ -0,0 +1,207 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/animation/animationtest" + +ohos_unittest("AnimationTest") { + module_out_path = module_output_path + + sources = [ + "$ace_root/frameworks/core/animation/test/unittest/mock/animation_mock.cpp", + "animation_framework_test.cpp", + + # animation + "$ace_root/frameworks/core/animation/animator.cpp", + "$ace_root/frameworks/core/animation/anticipate_curve.cpp", + "$ace_root/frameworks/core/animation/card_transition_controller.cpp", + "$ace_root/frameworks/core/animation/cubic_curve.cpp", + "$ace_root/frameworks/core/animation/curves.cpp", + "$ace_root/frameworks/core/animation/friction_motion.cpp", + "$ace_root/frameworks/core/animation/scheduler.cpp", + "$ace_root/frameworks/core/animation/scroll_motion.cpp", + "$ace_root/frameworks/core/animation/shared_transition_controller.cpp", + "$ace_root/frameworks/core/animation/shared_transition_effect.cpp", + "$ace_root/frameworks/core/animation/spring_animation.cpp", + "$ace_root/frameworks/core/animation/spring_model.cpp", + "$ace_root/frameworks/core/animation/spring_motion.cpp", + + # common + "$ace_root/frameworks/core/common/ace_engine.cpp", + "$ace_root/frameworks/core/common/event_manager.cpp", + "$ace_root/frameworks/core/common/focus_animation_manager.cpp", + "$ace_root/frameworks/core/common/font_loader.cpp", + "$ace_root/frameworks/core/common/font_manager.cpp", + "$ace_root/frameworks/core/common/vibrator/vibrator_proxy.cpp", + "$ace_root/frameworks/core/common/window.cpp", + "$ace_root/frameworks/core/components/box/box_component.cpp", + "$ace_root/frameworks/core/components/display/display_component.cpp", + "$ace_root/frameworks/core/components/overlay/overlay_component.cpp", + "$ace_root/frameworks/core/components/page/page_component.cpp", + "$ace_root/frameworks/core/components/test/json/json_frontend.cpp", + "$ace_root/frameworks/core/gestures/raw_recognizer.cpp", + "$ace_root/frameworks/core/mock/mock_watch_dog.cpp", + "$ace_root/frameworks/core/pipeline/base/composed_component.cpp", + "$ace_root/frameworks/core/pipeline/pipeline_context.cpp", + + # components + "$ace_root/frameworks/core/components/root/root_component.cpp", + "$ace_root/frameworks/core/components/transform/transform_component.cpp", + "$ace_root/frameworks/core/components/tween/tween_component.cpp", + "$ace_root/frameworks/core/pipeline/base/component.cpp", + "$ace_root/frameworks/core/pipeline/base/component_group_element.cpp", + "$ace_root/frameworks/core/pipeline/base/composed_element.cpp", + + # elements + "$ace_root/frameworks/core/components/bubble/bubble_element.cpp", + "$ace_root/frameworks/core/components/dialog_modal/dialog_modal_element.cpp", + "$ace_root/frameworks/core/components/display/display_element.cpp", + "$ace_root/frameworks/core/components/flex/flex_element.cpp", + "$ace_root/frameworks/core/components/overlay/overlay_element.cpp", + "$ace_root/frameworks/core/components/page/page_element.cpp", + "$ace_root/frameworks/core/components/page_transition/page_transition_element.cpp", + "$ace_root/frameworks/core/components/root/root_element.cpp", + "$ace_root/frameworks/core/components/semi_modal/semi_modal_element.cpp", + "$ace_root/frameworks/core/components/shared_transition/shared_transition_element.cpp", + "$ace_root/frameworks/core/components/stack/stack_element.cpp", + "$ace_root/frameworks/core/components/stage/stage_element.cpp", + "$ace_root/frameworks/core/components/transform/transform_element.cpp", + "$ace_root/frameworks/core/components/transition/transition_element.cpp", + "$ace_root/frameworks/core/components/tween/tween_element.cpp", + "$ace_root/frameworks/core/pipeline/base/element.cpp", + "$ace_root/frameworks/core/pipeline/base/render_element.cpp", + "$ace_root/frameworks/core/pipeline/base/sole_child_element.cpp", + + # event + "$ace_root/frameworks/core/event/back_end_event_manager.cpp", + "$ace_root/frameworks/core/event/multimodal/multimodal_manager.cpp", + "$ace_root/frameworks/core/event/multimodal/multimodal_scene.cpp", + + # focus + "$ace_root/frameworks/core/focus/focus_node.cpp", + + # gestures + "$ace_root/frameworks/core/gestures/drag_recognizer.cpp", + "$ace_root/frameworks/core/gestures/gesture_recognizer.cpp", + "$ace_root/frameworks/core/gestures/gesture_referee.cpp", + "$ace_root/frameworks/core/gestures/velocity_tracker.cpp", + + # image + "$ace_root/frameworks/core/image/flutter_image_cache.cpp", + "$ace_root/frameworks/core/image/image_cache.cpp", + + # layout + "$ace_root/frameworks/core/components/common/layout/grid_column_info.cpp", + "$ace_root/frameworks/core/components/common/layout/grid_container_info.cpp", + "$ace_root/frameworks/core/components/common/layout/grid_system_manager.cpp", + + # others + "$ace_root/frameworks/core/components/box/render_box.cpp", + "$ace_root/frameworks/core/components/box/render_box_base.cpp", + "$ace_root/frameworks/core/components/common/properties/alignment.cpp", + "$ace_root/frameworks/core/components/common/properties/border.cpp", + "$ace_root/frameworks/core/components/common/properties/border_edge.cpp", + "$ace_root/frameworks/core/components/common/properties/color.cpp", + "$ace_root/frameworks/core/components/common/properties/decoration.cpp", + "$ace_root/frameworks/core/components/common/properties/edge.cpp", + "$ace_root/frameworks/core/components/common/properties/page_transition_option.cpp", + "$ace_root/frameworks/core/components/common/properties/scroll_bar.cpp", + "$ace_root/frameworks/core/components/common/properties/text_style.cpp", + "$ace_root/frameworks/core/components/display/render_display.cpp", + "$ace_root/frameworks/core/components/focus_animation/render_focus_animation.cpp", + + # rendering + "$ace_root/frameworks/core/components/bubble/render_bubble.cpp", + "$ace_root/frameworks/core/components/clip/render_clip.cpp", + "$ace_root/frameworks/core/components/dialog_modal/render_dialog_modal.cpp", + "$ace_root/frameworks/core/components/drag_bar/render_drag_bar.cpp", + "$ace_root/frameworks/core/components/positioned/render_positioned.cpp", + "$ace_root/frameworks/core/components/proxy/render_proxy.cpp", + "$ace_root/frameworks/core/components/refresh/render_refresh.cpp", + "$ace_root/frameworks/core/components/root/render_root.cpp", + "$ace_root/frameworks/core/components/scroll/render_multi_child_scroll.cpp", + "$ace_root/frameworks/core/components/scroll/render_scroll.cpp", + "$ace_root/frameworks/core/components/scroll/render_single_child_scroll.cpp", + "$ace_root/frameworks/core/components/scroll/scroll_bar_controller.cpp", + "$ace_root/frameworks/core/components/semi_modal/render_semi_modal.cpp", + "$ace_root/frameworks/core/components/stack/render_stack.cpp", + "$ace_root/frameworks/core/components/stage/render_stage.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/mock_flutter_font_manager.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/mock_render_node_factory.cpp", + "$ace_root/frameworks/core/components/theme/app_theme.cpp", + "$ace_root/frameworks/core/components/theme/theme_attributes.cpp", + "$ace_root/frameworks/core/components/theme/theme_constants.cpp", + "$ace_root/frameworks/core/components/theme/theme_manager.cpp", + "$ace_root/frameworks/core/components/theme/theme_utils.cpp", + "$ace_root/frameworks/core/components/transform/click_spring_effect.cpp", + "$ace_root/frameworks/core/components/transform/render_transform.cpp", + "$ace_root/frameworks/core/mock/mock_ace_application_info.cpp", + "$ace_root/frameworks/core/pipeline/base/render_node.cpp", + "$root_out_dir/ace/framework/core/components/theme/theme_constants_default.cpp", + + #mock + "$ace_root/adapter/common/cpp/thread_util.cpp", + "$ace_root/adapter/ohos/osal/log_wrapper.cpp", + "$ace_root/frameworks/base/geometry/matrix4.cpp", + "$ace_root/frameworks/base/log/dump_log.cpp", + "$ace_root/frameworks/base/thread/background_task_executor.cpp", + "$ace_root/frameworks/base/utils/base_id.cpp", + ] + + # add sources only needed by wearable like watch. + if (is_wearable_product) { + sources += [ "$root_out_dir/ace/framework/core/components/theme/theme_constants_watch.cpp" ] + } + + # add sources needed by phone and TV. wearable like watch do not need them + if (!is_wearable_product) { + sources += [ + # theme + "$root_out_dir/ace/framework/core/components/theme/theme_constants_tv.cpp", + ] + } + + configs = [ + "$ace_root:ace_test_config", + ":config_animation_test", + "$flutter_root:flutter_config", + ] + + deps = [ + "$ace_root/frameworks/core/components/theme:build_theme_code", + "$flutter_root:ace_skia_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + if (is_standard_system) { + external_deps = [ "hiviewdfx_hilog_native:libhilog" ] + deps += [ "//base/global/resmgr_standard/frameworks/resmgr:global_resmgr" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_animation_test") { + visibility = [ ":*" ] + include_dirs = [ + "//utils/native/base/include", + "$ace_root", + ] +} + +group("unittest") { + testonly = true + deps = [ ":AnimationTest" ] +} diff --git a/frameworks/core/animation/test/unittest/framework/animation_framework_test.cpp b/frameworks/core/animation/test/unittest/framework/animation_framework_test.cpp new file mode 100644 index 00000000..94371985 --- /dev/null +++ b/frameworks/core/animation/test/unittest/framework/animation_framework_test.cpp @@ -0,0 +1,3602 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "adapter/ohos/osal/fake_asset_manager.h" +#include "adapter/ohos/osal/fake_task_executor.h" +#include "base/log/log.h" +#include "core/animation/card_transition_controller.h" +#include "core/animation/friction_motion.h" +#include "core/animation/scroll_motion.h" +#include "core/animation/spring_motion.h" +#include "core/animation/test/unittest/mock/animation_mock.h" +#include "core/animation/test/unittest/mock/animation_test_utils.h" +#include "core/components/test/json/json_frontend.h" +#include "core/mock/mock_resource_register.h" +#include "core/pipeline/pipeline_context.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +constexpr int32_t NANOSECOND_TO_MILLISECOND = 1000000; +constexpr int32_t PICTURE_ANIMATION_COUNT = 3; +constexpr int32_t FRAME_TIME_IN_MILLISECOND = 10; +constexpr int32_t ANIMATION_REPEAT_LOOP = 10; +constexpr uint32_t ANIMATION_DURATION_MULTIPLE = 3; +constexpr uint32_t PICTURE_ANIMATION_DURATION_MULTIPLE = 2; +constexpr uint32_t KEYFRAME_ANIMATION_DURATION_MULTIPLE = 2; +constexpr uint64_t NANO_FRAME_TIME = static_cast(1e9 / 60); +constexpr float CUBIC_ERROR_BOUND = 0.01f; + +} // namespace + +class AnimationFrameworkTest : public testing::Test { +public: + static void SetUpTestCase() + { + GTEST_LOG_(INFO) << "AnimationFrameworkTest SetUpTestCase"; + } + + static void TearDownTestCase() + { + GTEST_LOG_(INFO) << "AnimationFrameworkTest TearDownTestCase"; + } + + void SetUp() override + { + std::unique_ptr platformWindow = AnimationTestUtils::CreatePlatformWindow(); + platformWindowRaw_ = reinterpret_cast(platformWindow.get()); + auto window = AnimationTestUtils::CreateWindow(std::move(platformWindow)); + auto taskExecutor = AceType::MakeRefPtr(); + auto assetManager = Referenced::MakeRefPtr(); + auto resRegister = Referenced::MakeRefPtr(); + RefPtr frontend = Frontend::CreateDefault(); + context_ = AceType::MakeRefPtr( + std::move(window), taskExecutor, assetManager, resRegister, frontend, 0); + context_->SetTimeProvider( + [this] { return this->platformWindowRaw_->GetCurrentTimestampNano() + NANOSECOND_TO_MILLISECOND * 10; }); + flushEventMock_ = AceType::MakeRefPtr(); + + context_->SetupRootElement(); + context_->OnSurfaceChanged(100, 200); + } + + void TearDown() override {} + + void TriggerAndCheckBasicPropertyFirstFrame(TweenOperation operation, float init) + { + /** + * @tc.steps: step2. trigger one frame to make prepare animation work + */ + platformWindowRaw_->TriggerOneFrame(); + switch (operation) { + case TweenOperation::PLAY: + case TweenOperation::REVERSE: { + EXPECT_EQ(init - 1, flushEventMock_->animationIntValue_); + EXPECT_TRUE(flushEventMock_->animationStartStatus_); + EXPECT_FALSE(flushEventMock_->animationStopStatus_); + break; + } + case TweenOperation::PAUSE: { + EXPECT_TRUE(flushEventMock_->animationStartStatus_); + EXPECT_TRUE(flushEventMock_->animationPauseStatus_); + EXPECT_FALSE(flushEventMock_->animationStopStatus_); + break; + } + case TweenOperation::FINISH: { + EXPECT_TRUE(flushEventMock_->animationStopStatus_); + break; + } + case TweenOperation::CANCEL: { + EXPECT_FALSE(flushEventMock_->animationIdleStatus_); + EXPECT_FALSE(flushEventMock_->animationStartStatus_); + EXPECT_FALSE(flushEventMock_->animationPauseStatus_); + EXPECT_FALSE(flushEventMock_->animationStopStatus_); + break; + } + default: + break; + } + } + + void InitBasicAnimationDirectionPropertyTest(int32_t duration, int32_t iteration, + AnimationDirection animationDirection, TweenOperation operation, FillMode fillMode) + { + /** + * @tc.steps: step1. init animation and simulation controller + */ + float init = 0.0f; + float begin = 1.0f; + float end = 9.0f; + + platformWindowRaw_->SetNanoFrameTime(NANOSECOND_TO_MILLISECOND * 10); + flushEventMock_->InitController(context_); + auto controller = flushEventMock_->GetAnimator(); + // verify curve animation + flushEventMock_->animationInt_ = + AceType::MakeRefPtr>(static_cast(begin), static_cast(end), Curves::LINEAR); + + // verify keyframe animation + auto keyframe1 = AceType::MakeRefPtr>(0.0f, begin); + auto keyframe2 = AceType::MakeRefPtr>(1.0f, end); + keyframe2->SetCurve(Curves::LINEAR); + flushEventMock_->keyframeAnimation_ = AceType::MakeRefPtr>(); + flushEventMock_->keyframeAnimation_->AddKeyframe(keyframe1); + flushEventMock_->keyframeAnimation_->AddKeyframe(keyframe2); + + flushEventMock_->animationInt_->SetInitValue(static_cast(init)); + flushEventMock_->keyframeAnimation_->SetInitValue(init); + + // set duration / fill-mode / animationDirection / reverse / repeatTimes + flushEventMock_->animationDuration_ = duration; + controller->SetFillMode(fillMode); + controller->SetAnimationDirection(animationDirection); + flushEventMock_->operation_ = operation; + flushEventMock_->iteration_ = iteration; + + flushEventMock_->animationIntValue_ = init - 1; + context_->AddPostFlushListener(flushEventMock_); + TriggerAndCheckBasicPropertyFirstFrame(operation, init); + } + + void InitBasicPropertyTest( + int32_t duration, int32_t iteration, TweenOperation operation, FillMode fillMode, bool setInit) + { + /** + * @tc.steps: step1. init animation and animator + */ + float init = 0.0f; + float begin = 1.0f; + float end = 9.0f; + platformWindowRaw_->SetNanoFrameTime(NANOSECOND_TO_MILLISECOND * 10); + flushEventMock_->InitController(context_); + auto controller = flushEventMock_->GetAnimator(); + // verify curve animation + flushEventMock_->animationInt_ = + AceType::MakeRefPtr>(static_cast(begin), static_cast(end), Curves::LINEAR); + + // verify keyframe animation + auto keyframe1 = AceType::MakeRefPtr>(0.0f, begin); + auto keyframe2 = AceType::MakeRefPtr>(1.0f, end); + keyframe2->SetCurve(Curves::LINEAR); + flushEventMock_->keyframeAnimation_ = AceType::MakeRefPtr>(); + flushEventMock_->keyframeAnimation_->AddKeyframe(keyframe1); + flushEventMock_->keyframeAnimation_->AddKeyframe(keyframe2); + + if (setInit) { + flushEventMock_->animationInt_->SetInitValue(static_cast(init)); + flushEventMock_->keyframeAnimation_->SetInitValue(init); + } + + // set duration / fill-mode / reverse / repeatTimes / startDelay + flushEventMock_->animationDuration_ = duration; + controller->SetFillMode(fillMode); + flushEventMock_->operation_ = operation; + flushEventMock_->iteration_ = iteration; + if (iteration == 2) { + flushEventMock_->startDelay_ = 10; + } + + flushEventMock_->animationIntValue_ = init - 1; + context_->AddPostFlushListener(flushEventMock_); + + TriggerAndCheckBasicPropertyFirstFrame(operation, init); + } + + void RunAndCheckBasicPropertyTestInterpolateValueReverse(float endValue) + { + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(5, flushEventMock_->animationIntValue_); + EXPECT_NEAR(5.0f, flushEventMock_->keyframeAnimationValue_, FLT_EPSILON); + EXPECT_FALSE(flushEventMock_->animationStopStatus_); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(static_cast(endValue), flushEventMock_->animationIntValue_); + EXPECT_NEAR(endValue, flushEventMock_->keyframeAnimationValue_, FLT_EPSILON); + EXPECT_TRUE(flushEventMock_->animationStopStatus_); + } + + void RunAndCheckBasicPropertyTestInterpolateValueForward(float endValue) + { + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(5, flushEventMock_->animationIntValue_); + EXPECT_NEAR(5.0f, flushEventMock_->keyframeAnimationValue_, FLT_EPSILON); + EXPECT_FALSE(flushEventMock_->animationStopStatus_); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(static_cast(endValue), flushEventMock_->animationIntValue_); + EXPECT_NEAR(endValue, flushEventMock_->keyframeAnimationValue_, FLT_EPSILON); + EXPECT_TRUE(flushEventMock_->animationStopStatus_); + } + + void RunAndCheckBasicPropertyTestInterpolateValue(float endValue) + { + if (flushEventMock_->startDelay_ == 10) { + platformWindowRaw_->TriggerOneFrame(); + } + // duration equals 0, stop immediately + if (flushEventMock_->animationDuration_ == 0) { + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(static_cast(endValue), flushEventMock_->animationIntValue_); + EXPECT_NEAR(endValue, flushEventMock_->keyframeAnimationValue_, FLT_EPSILON); + EXPECT_TRUE(flushEventMock_->animationStopStatus_); + return; + } + + switch (flushEventMock_->operation_) { + case TweenOperation::REVERSE: { + RunAndCheckBasicPropertyTestInterpolateValueReverse(endValue); + break; + } + case TweenOperation::PLAY: { + RunAndCheckBasicPropertyTestInterpolateValueForward(endValue); + break; + } + default: + break; + } + } + + void RunAndCheckBasicAnimationDirectionPropertyTestReverse() + { + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(5, flushEventMock_->animationIntValue_); + EXPECT_NEAR(5.0f, flushEventMock_->keyframeAnimationValue_, FLT_EPSILON); + EXPECT_FALSE(flushEventMock_->animationStopStatus_); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(1, flushEventMock_->animationIntValue_); + EXPECT_NEAR(1.0f, flushEventMock_->keyframeAnimationValue_, FLT_EPSILON); + EXPECT_FALSE(flushEventMock_->animationStopStatus_); + } + + void RunAndCheckBasicAnimationDirectionPropertyTestForward() + { + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(5, flushEventMock_->animationIntValue_); + EXPECT_NEAR(5.0f, flushEventMock_->keyframeAnimationValue_, FLT_EPSILON); + EXPECT_FALSE(flushEventMock_->animationStopStatus_); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(9, flushEventMock_->animationIntValue_); + EXPECT_NEAR(9.0f, flushEventMock_->keyframeAnimationValue_, FLT_EPSILON); + EXPECT_FALSE(flushEventMock_->animationStopStatus_); + } + + void RunAndCheckBasicAnimationDirectionPropertyTest(float endValue, int iteration) + { + if (iteration == 2) { + RunAndCheckBasicAnimationDirectionPropertyTestForward(); + + /** + * @tc.steps1: repeat animation + * @tc.expected: check repeat animation value is correct + */ + RunAndCheckBasicPropertyTestInterpolateValueReverse(endValue); + } else { + // iteration is 3 + switch (flushEventMock_->operation_) { + case TweenOperation::REVERSE: { + RunAndCheckBasicAnimationDirectionPropertyTestReverse(); + + /** + * @tc.steps1: repeat animation + * @tc.expected: check repeat animation value is correct + */ + RunAndCheckBasicAnimationDirectionPropertyTestForward(); + + /** + * @tc.steps2: repeat animation + * @tc.expected: check repeat animation value is correct + */ + RunAndCheckBasicPropertyTestInterpolateValueReverse(endValue); + break; + } + case TweenOperation::PLAY: { + RunAndCheckBasicAnimationDirectionPropertyTestForward(); + + /** + * @tc.steps1: repeat animation + * @tc.expected: check repeat animation value is correct + */ + RunAndCheckBasicAnimationDirectionPropertyTestReverse(); + + /** + * @tc.steps2: repeat animation + * @tc.expected: check repeat animation value is correct + */ + RunAndCheckBasicPropertyTestInterpolateValueForward(endValue); + break; + } + default: + break; + } + } + } + + void InitAnimationAndAnimator(int32_t frameTimeMs, int32_t iteration, int32_t startDelay) + { + InitAnimationAndAnimator(frameTimeMs, iteration, startDelay, frameTimeMs * ANIMATION_DURATION_MULTIPLE); + } + + void InitAnimationAndAnimator(int32_t frameTimeMs, int32_t iteration, int32_t startDelay, int32_t duration) + { + platformWindowRaw_->SetNanoFrameTime(NANOSECOND_TO_MILLISECOND * frameTimeMs); + flushEventMock_->InitController(context_); + flushEventMock_->animationInt_ = AceType::MakeRefPtr>(1, 4, Curves::LINEAR); + flushEventMock_->animationDuration_ = duration; + flushEventMock_->startDelay_ = startDelay; + flushEventMock_->iteration_ = iteration; + context_->AddPostFlushListener(flushEventMock_); + } + +protected: + RefPtr context_; + RefPtr flushEventMock_; + MockPlatformWindow* platformWindowRaw_ = nullptr; +}; + +/** + * @tc.name: AnimationFrameworkTest001 + * @tc.desc: Verify the common property animation process for type int + * @tc.type: FUNC + * @tc.require: AR000DAIGS + * @tc.author: zhouzebin + */ +HWTEST_F(AnimationFrameworkTest, AnimationFrameworkTest001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationFrameworkTest001 start"; + /** + * @tc.steps: step1. init animation and animator + */ + flushEventMock_->InitController(context_); + int32_t duration = 30; + flushEventMock_->animationInt_ = AceType::MakeRefPtr>(1, 6, Curves::LINEAR); + flushEventMock_->animationDuration_ = duration; + context_->AddPostFlushListener(flushEventMock_); + + /** + * @tc.steps: step2. trigger one frame to make prepare animation work + * @tc.expected: step2. postFlush has been called. + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(1, flushEventMock_->postFlushCallTimes_); + + /** + * @tc.steps: step3. trigger 2 frames to let animation done + * @tc.expected: step3. check linear curve's value in every frame + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(3, flushEventMock_->animationIntValue_); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(6, flushEventMock_->animationIntValue_); + EXPECT_TRUE(flushEventMock_->animationStopStatus_); +} + +/** + * @tc.name: AnimationFrameworkTest002 + * @tc.desc: Verify the common property animation process for type float + * @tc.type: FUNC + * @tc.require: AR000DAIGS + * @tc.author: zhouzebin + */ +HWTEST_F(AnimationFrameworkTest, AnimationFrameworkTest002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationFrameworkTest002 start"; + /** + * @tc.steps: step1. init animation and animator + */ + flushEventMock_->InitController(context_); + int32_t duration = 30; + // default curve is linear. test it with nullptr. + flushEventMock_->animationFloat_ = AceType::MakeRefPtr>(1.0f, 6.0f, nullptr); + flushEventMock_->animationDuration_ = duration; + context_->AddPostFlushListener(flushEventMock_); + + /** + * @tc.steps: step2. trigger one frame to make prepare animation work + * @tc.expected: step2. postFlush has been called. + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(1, flushEventMock_->postFlushCallTimes_); + + /** + * @tc.steps: step3. trigger 2 frames to let animation done + * @tc.expected: step3. check linear curve's value in every frame + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(5.164f, flushEventMock_->animationFloatValue_, CUBIC_ERROR_BOUND); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(6.0f, flushEventMock_->animationFloatValue_, CUBIC_ERROR_BOUND); + EXPECT_TRUE(flushEventMock_->animationStopStatus_); +} + +/** + * @tc.name: AnimationFrameworkTest003 + * @tc.desc: when destruct animator, stop it first. + * @tc.type: FUNC + * @tc.require: AR000DAIGS + * @tc.author: zhouzebin + */ +HWTEST_F(AnimationFrameworkTest, AnimationFrameworkTest003, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationFrameworkTest003 start"; + /** + * @tc.steps: step1. init animation and animator + */ + flushEventMock_->InitController(context_); + int32_t duration = 30; + flushEventMock_->animationInt_ = AceType::MakeRefPtr>(1, 6, Curves::LINEAR); + int32_t previousValue = 0; + flushEventMock_->animationInt_->AddListener([&previousValue](const int& value) { + // check different value every callback. + EXPECT_NE(previousValue, value); + previousValue = value; + }); + flushEventMock_->animationDuration_ = duration; + context_->AddPostFlushListener(flushEventMock_); + + /** + * @tc.steps: step2. trigger one frame to make prepare animation work + * @tc.expected: step2. postFlush has been called. + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(1, flushEventMock_->postFlushCallTimes_); + + /** + * @tc.steps: step3. free the old controller and write data to the freed memory + * @tc.expected: step3. no fault happened, and no call back has been called. + */ + // get the reference for controller and set the value after the controller is destructed. + Animator& controller = *flushEventMock_->GetAnimator(); + + // replace controller with a new one. and the old controller's destructor will be called + flushEventMock_->InitController(context_); + // clear all callbacks in destructor + EXPECT_FALSE(flushEventMock_->animationStopStatus_); + + // set the freed old controller's memory to test do not call back to old memory. + controller.SetDuration(0); + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(0, flushEventMock_->animationIntValue_); +} + +/** + * @tc.name: AnimationFrameworkTest004 + * @tc.desc: use color curve animation + * @tc.type: FUNC + * @tc.require: AR000DAIGS + * @tc.author: zhouzebin + */ +HWTEST_F(AnimationFrameworkTest, AnimationFrameworkTest004, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationFrameworkTest004 start"; + /** + * @tc.steps: step1. init animation and animator + */ + int32_t frameTimeMs = FRAME_TIME_IN_MILLISECOND; + platformWindowRaw_->SetNanoFrameTime(NANOSECOND_TO_MILLISECOND * frameTimeMs); + flushEventMock_->InitController(context_); + int32_t duration = 30; + flushEventMock_->animationColor_ = + AceType::MakeRefPtr>(Color::BLACK, Color::WHITE, Curves::LINEAR); + flushEventMock_->animationColor_->SetEvaluator(AceType::MakeRefPtr()); + flushEventMock_->animationDuration_ = duration; + context_->AddPostFlushListener(flushEventMock_); + + /** + * @tc.steps: step2. trigger one frame to make prepare animation work + * @tc.expected: step2. postFlush has been called. + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(1, flushEventMock_->postFlushCallTimes_); + + /** + * @tc.steps: step3. trigger frames to make it done. + * @tc.expected: step3. verify the first and last frame + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(Color(0xff9A9A9A), flushEventMock_->animationColorValue_); + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(Color::WHITE, flushEventMock_->animationColorValue_); + EXPECT_TRUE(flushEventMock_->animationStopStatus_); +} + +/** + * @tc.name: AnimationCurveTest001 + * @tc.desc: Verify the linear Curve + * @tc.type: FUNC + * @tc.require: AR000DATTR + * @tc.author: jiachunhui + */ +HWTEST_F(AnimationFrameworkTest, AnimationCurveTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. set the testValue of time to test LinearCurve. + */ + float testValueFirst = 0.2f; + float testValueSecond = 0.5f; + float testValueThird = 0.8f; + + /** + * @tc.steps: step2. verify the result of LinearCurve. + * @tc.expected: step2. the result is right. + */ + EXPECT_NEAR(testValueFirst, Curves::LINEAR->MoveInternal(testValueFirst), FLT_EPSILON); + EXPECT_NEAR(testValueSecond, Curves::LINEAR->MoveInternal(testValueSecond), FLT_EPSILON); + EXPECT_NEAR(testValueThird, Curves::LINEAR->MoveInternal(testValueThird), FLT_EPSILON); +} + +/** + * @tc.name: AnimationCurveTest002 + * @tc.desc: Verify the Sine Curve + * @tc.type: FUNC + * @tc.require: AR000DATTR + * @tc.author: jiachunhui + */ +HWTEST_F(AnimationFrameworkTest, AnimationCurveTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. set the testValue of time to test SineCurve. + */ + float testValueFirst = 0.2f; + float testValueSecond = 0.5f; + float testValueThird = 0.8f; + + /** + * @tc.steps: step2. set the targetValue of time to test SineCurve. + */ + float pi = 3.14f; + float targetValueFirst = std::sin(pi * testValueFirst / 2); + float targetValueSecond = std::sin(pi * testValueSecond / 2); + float targetValueThird = std::sin(pi * testValueThird / 2); + + /** + * @tc.steps: step3. verify the result of SineCurve. + * @tc.expected: step3. the result is right. + */ + EXPECT_NEAR(targetValueFirst, Curves::SINE->MoveInternal(testValueFirst), FLT_EPSILON); + EXPECT_NEAR(targetValueSecond, Curves::SINE->MoveInternal(testValueSecond), FLT_EPSILON); + EXPECT_NEAR(targetValueThird, Curves::SINE->MoveInternal(testValueThird), FLT_EPSILON); +} + +/** + * @tc.name: AnimationCurveTest003 + * @tc.desc: Verify the Cubic Curve + * @tc.type: FUNC + * @tc.require: AR000DATTR + * @tc.author: jiachunhui + */ +HWTEST_F(AnimationFrameworkTest, AnimationCurveTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. set the testValue of time to test CubicCurve. + */ + float testValueFirst = 0.2f; + float testValueSecond = 0.5f; + float testValueThird = 0.8f; + + /** + * @tc.steps: step2. set the targetValue and actualValue of time to test CubicCurve. + */ + float targetValueFirst = 0.30836f; + float targetValueSecond = 0.68465f; + float targetValueThird = 0.93772f; + + float actualValueFirst = Curves::EASE_OUT->MoveInternal(testValueFirst); + float actualValueSecond = Curves::EASE_OUT->MoveInternal(testValueSecond); + float actualValueThird = Curves::EASE_OUT->MoveInternal(testValueThird); + + /** + * @tc.steps: step3. verify the result of CubicCurve. + * @tc.expected: step3. the result is right. + */ + EXPECT_NEAR(targetValueFirst, actualValueFirst, CUBIC_ERROR_BOUND); + EXPECT_NEAR(targetValueSecond, actualValueSecond, CUBIC_ERROR_BOUND); + EXPECT_NEAR(targetValueThird, actualValueThird, CUBIC_ERROR_BOUND); +} + +/** + * @tc.name: AnimationCurveTest004 + * @tc.desc: Verify the decelerate Curve + * @tc.type: FUNC + * @tc.require: AR000DQ1UQ + * @tc.author: jinwuwen + */ +HWTEST_F(AnimationFrameworkTest, AnimationCurveTest004, TestSize.Level1) +{ + /** + * @tc.steps: step1. set the testValue of time to test decelerate Curve. + */ + float testValueFirst = 0.2f; + float testValueSecond = 0.5f; + float testValueThird = 0.8f; + + /** + * @tc.steps: step2. set the targetValue of time to test decelerate Curve. + */ + float targetValueFirst = 1.0 - std::pow(1.0 - testValueFirst, 2.0); + float targetValueSecond = 1.0 - std::pow(1.0 - testValueSecond, 2.0); + float targetValueThird = 1.0 - std::pow(1.0 - testValueThird, 2.0); + + /** + * @tc.steps: step3. verify the result of decelerate Curve. + * @tc.expected: step3. the result is right. + */ + EXPECT_NEAR(targetValueFirst, Curves::DECELE->MoveInternal(testValueFirst), FLT_EPSILON); + EXPECT_NEAR(targetValueSecond, Curves::DECELE->MoveInternal(testValueSecond), FLT_EPSILON); + EXPECT_NEAR(targetValueThird, Curves::DECELE->MoveInternal(testValueThird), FLT_EPSILON); +} + +/** + * @tc.name: AnimationCurveTest005 + * @tc.desc: Verify the Steps Curve with start position + * @tc.type: FUNC + * @tc.require: AR000DQ20F + * @tc.author: zhouzebin + */ +HWTEST_F(AnimationFrameworkTest, AnimationCurveTest005, TestSize.Level1) +{ + int32_t steps = 4; + float stepValue = 1.0f / steps; + StepsCurve stepsCurveStart(steps, StepsCurvePosition::START); + /** + * @tc.steps: step1. set the testValue of time to test steps Curve. + */ + float testValueFirst = 0.2f; + float testValueSecond = 0.5f; + float testValueThird = 0.8f; + + /** + * @tc.steps: step2. set the targetValue of time to test steps Curve. + */ + float targetValueFirst = stepValue; + float targetValueSecond = stepValue * 3; + float targetValueThird = stepValue * 4; + + /** + * @tc.steps: step3. verify the result of steps Curve. + * @tc.expected: step3. the result is right. + */ + EXPECT_NEAR(targetValueFirst, stepsCurveStart.MoveInternal(testValueFirst), FLT_EPSILON); + EXPECT_NEAR(targetValueSecond, stepsCurveStart.MoveInternal(testValueSecond), FLT_EPSILON); + EXPECT_NEAR(targetValueThird, stepsCurveStart.MoveInternal(testValueThird), FLT_EPSILON); +} + +/** + * @tc.name: AnimationDomCurveTest001 + * @tc.desc: Verify the anticipate Curve + * @tc.type: FUNC + * @tc.require: AR000DSB24 + * @tc.author: jiachunhui + */ +HWTEST_F(AnimationFrameworkTest, AnimationDomCurveTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. set the testValue of time to test anticipate Curve. + */ + float testValueFirst = 0.2f; + float testValueSecond = 0.5f; + float testValueThird = 0.8f; + + /** + * @tc.steps: step2. set the targetValue of time to test anticipate Curve. + */ + float targetValueFirst = -0.056f; + float targetValueSecond = -0.125f; + float targetValueThird = 0.256f; + + /** + * @tc.steps: step3. verify the result of anticipate Curve. + * @tc.expected: step3. the result is right. + */ + EXPECT_NEAR(targetValueFirst, Curves::ANTICIPATE->MoveInternal(testValueFirst), FLT_EPSILON); + EXPECT_NEAR(targetValueSecond, Curves::ANTICIPATE->MoveInternal(testValueSecond), FLT_EPSILON); + EXPECT_NEAR(targetValueThird, Curves::ANTICIPATE->MoveInternal(testValueThird), FLT_EPSILON); +} + +/** + * @tc.name: AnimationCurveTest007 + * @tc.desc: Verify the Steps Curve with end position + * @tc.type: FUNC + * @tc.require: AR000DQ20G + * @tc.author: zhouzebin + */ +HWTEST_F(AnimationFrameworkTest, AnimationCurveTest007, TestSize.Level1) +{ + int32_t steps = 4; + float stepValue = 1.0f / steps; + StepsCurve stepsCurveEnd(steps, StepsCurvePosition::END); + /** + * @tc.steps: step1. set the testValue of time to test steps Curve. + */ + float testValueFirst = 0.2f; + float testValueSecond = 0.5f; + float testValueThird = 0.8f; + + /** + * @tc.steps: step2. set the targetValue of time to test steps Curve. + */ + float targetValueFirst = 0; + float targetValueSecond = stepValue * 2; + float targetValueThird = stepValue * 3; + + /** + * @tc.steps: step3. verify the result of steps Curve. + * @tc.expected: step3. the result is right. + */ + EXPECT_NEAR(targetValueFirst, stepsCurveEnd.MoveInternal(testValueFirst), FLT_EPSILON); + EXPECT_NEAR(targetValueSecond, stepsCurveEnd.MoveInternal(testValueSecond), FLT_EPSILON); + EXPECT_NEAR(targetValueThird, stepsCurveEnd.MoveInternal(testValueThird), FLT_EPSILON); +} + +/** + * @tc.name: AnimationCurveTest008 + * @tc.desc: Verify the Steps Curve with steps zero + * @tc.type: FUNC + * @tc.require: AR000DQ20I + * @tc.author: zhouzebin + */ +HWTEST_F(AnimationFrameworkTest, AnimationCurveTest008, TestSize.Level1) +{ + StepsCurve stepsCurveStart(0); + /** + * @tc.steps: step1. set the testValue of time to test steps Curve. + */ + float testValueFirst = 0.2f; + float testValueSecond = 0.8f; + + /** + * @tc.steps: step2. verify the result of steps Curve. + * @tc.expected: step2. the result is right. + */ + EXPECT_NEAR(1.0f, stepsCurveStart.MoveInternal(testValueFirst), FLT_EPSILON); + EXPECT_NEAR(1.0f, stepsCurveStart.MoveInternal(testValueSecond), FLT_EPSILON); +} + +/** + * @tc.name: AnimationCurveTest009 + * @tc.desc: Verify the Steps Curve with steps zero + * @tc.type: FUNC + * @tc.require: AR000DQ20I + * @tc.author: zhouzebin + */ +HWTEST_F(AnimationFrameworkTest, AnimationCurveTest009, TestSize.Level1) +{ + RefPtr stepsCurveStart = AceType::MakeRefPtr(2); + ComplementaryCurve complementaryCurve = ComplementaryCurve(stepsCurveStart); + /** + * @tc.steps: step1. set the testValue of time to test steps Curve. + */ + float testValueFirst = 0.2f; + float testValueSecond = 0.8f; + + /** + * @tc.steps: step2. verify the result of steps Curve. + * @tc.expected: step2. the result is right. + */ + EXPECT_NEAR(0.5f, complementaryCurve.MoveInternal(testValueFirst), FLT_EPSILON); + EXPECT_NEAR(0.0f, complementaryCurve.MoveInternal(testValueSecond), FLT_EPSILON); +} + +/** + * @tc.name: AnimationListenableTest001 + * @tc.desc: Verify the whether listen the value of animation + * @tc.type: FUNC + * @tc.require: AR000DAIGT + * @tc.author: jiachunhui + */ +HWTEST_F(AnimationFrameworkTest, AnimationListenableTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. init animation and animator + */ + flushEventMock_->InitController(context_); + int32_t duration = 15; + flushEventMock_->animationInt_ = AceType::MakeRefPtr>(1, 2, Curves::LINEAR); + flushEventMock_->animationDuration_ = duration; + context_->AddPostFlushListener(flushEventMock_); + + /** + * @tc.steps: step2. trigger one frame to make prepare animation work + */ + platformWindowRaw_->TriggerOneFrame(); + + /** + * @tc.steps: step3. trigger one frame to let animation done + * @tc.expected: step3. listen the LINEAR curve's value in every frame + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(2, flushEventMock_->animationIntValue_); +} + +/** + * @tc.name: AnimationListenableTest002 + * @tc.desc: Verify the whether listen the status of animator + * @tc.type: FUNC + * @tc.require: AR000DAIGT + * @tc.author: jiachunhui + */ +HWTEST_F(AnimationFrameworkTest, AnimationListenableTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. init animation and animator + */ + flushEventMock_->InitController(context_); + int32_t duration = 15; + flushEventMock_->animationInt_ = AceType::MakeRefPtr>(1, 2, Curves::LINEAR); + flushEventMock_->animationDuration_ = duration; + context_->AddPostFlushListener(flushEventMock_); + + /** + * @tc.steps: step2. trigger one frame to make prepare animation work + */ + platformWindowRaw_->TriggerOneFrame(); + + /** + * @tc.steps: step3. trigger 3 frames to let animation done + * @tc.expected: step3. listen the linear curve's value in every frame + */ + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + EXPECT_TRUE(flushEventMock_->animationStartStatus_); + EXPECT_TRUE(flushEventMock_->animationStopStatus_); + EXPECT_EQ(0, flushEventMock_->repeatDoneTimes_); + EXPECT_EQ(flushEventMock_->animationIntValue_, flushEventMock_->animationIntStopValue_); +} + +/** + * @tc.name: PictureAnimationTest001 + * @tc.desc: Verify the picture animation process for type int + * @tc.type: FUNC + * @tc.require: AR000DBTQE + * @tc.author: zhouzebin + */ +HWTEST_F(AnimationFrameworkTest, PictureAnimationTest001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest PictureAnimationTest001 start"; + /** + * @tc.steps: step1. init animation and animator + */ + uint32_t frameTimeMs = FRAME_TIME_IN_MILLISECOND; + platformWindowRaw_->SetNanoFrameTime(NANOSECOND_TO_MILLISECOND * frameTimeMs); + flushEventMock_->InitController(context_); + int32_t duration = frameTimeMs * PICTURE_ANIMATION_DURATION_MULTIPLE; + int32_t durationTotal = 0; + flushEventMock_->pictureInt_ = AceType::MakeRefPtr>(); + for (int32_t idx = 0; idx < PICTURE_ANIMATION_COUNT; idx++) { + flushEventMock_->pictureInt_->AddPicture(1.0f / PICTURE_ANIMATION_COUNT, idx + 10); + durationTotal += duration; + } + flushEventMock_->animationDuration_ = durationTotal; + context_->AddPostFlushListener(flushEventMock_); + + /** + * @tc.steps: step2. trigger one frame to make prepare animation work + * @tc.expected: step2. postFlush has been called. + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(1, flushEventMock_->postFlushCallTimes_); + + /** + * @tc.steps: step3. trigger frames to see the begin and end for the first picture. + * @tc.expected: step3. check 1st picture's last time + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(10, flushEventMock_->pictureIntValue_); + platformWindowRaw_->TriggerFrame(NANOSECOND_TO_MILLISECOND * (frameTimeMs - 1), 1); + EXPECT_EQ(10, flushEventMock_->pictureIntValue_); + + /** + * @tc.steps: step4. trigger frames to see the begin and end for the 2nd picture + * @tc.expected: step4. check 2nd picture's last time + */ + platformWindowRaw_->TriggerFrame(NANOSECOND_TO_MILLISECOND, 1); + EXPECT_EQ(11, flushEventMock_->pictureIntValue_); + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(11, flushEventMock_->pictureIntValue_); + platformWindowRaw_->TriggerFrame(NANOSECOND_TO_MILLISECOND * (frameTimeMs - 1), 1); + EXPECT_EQ(11, flushEventMock_->pictureIntValue_); + + /** + * @tc.steps: step5. trigger frames to see the last frame + * @tc.expected: step5. check the last picture's last time + */ + platformWindowRaw_->TriggerFrame(NANOSECOND_TO_MILLISECOND, 1); + EXPECT_EQ(12, flushEventMock_->pictureIntValue_); + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(12, flushEventMock_->pictureIntValue_); + + /** + * @tc.steps: step6. in no repeat case, stay in last picture + * @tc.expected: step6. check stay in last picture + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(12, flushEventMock_->pictureIntValue_); +} + +/** + * @tc.name: PictureAnimationTest002 + * @tc.desc: Verify the picture animation process for type string with repeat forever + * @tc.type: FUNC + * @tc.require: AR000DBTQE + * @tc.author: zhouzebin + */ +HWTEST_F(AnimationFrameworkTest, PictureAnimationTest002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest PictureAnimationTest002 start"; + /** + * @tc.steps: step1. init animation and animator + */ + uint32_t frameTimeMs = FRAME_TIME_IN_MILLISECOND; + platformWindowRaw_->SetNanoFrameTime(NANOSECOND_TO_MILLISECOND * frameTimeMs); + flushEventMock_->InitController(context_); + int32_t duration = frameTimeMs * 1; + int32_t durationTotal = 0; + flushEventMock_->pictureString_ = AceType::MakeRefPtr>(); + for (int32_t idx = 0; idx < PICTURE_ANIMATION_COUNT; idx++) { + flushEventMock_->pictureString_->AddPicture(1.0f / (PICTURE_ANIMATION_COUNT + 1), std::to_string(idx)); + durationTotal += duration; + } + flushEventMock_->pictureString_->AutoScale(); + flushEventMock_->animationDuration_ = durationTotal; + flushEventMock_->iteration_ = ANIMATION_REPEAT_INFINITE; + context_->AddPostFlushListener(flushEventMock_); + + /** + * @tc.steps: step2. trigger one frame to make prepare animation work + * @tc.expected: step2. postFlush has been called. + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(1, flushEventMock_->postFlushCallTimes_); + + /** + * @tc.steps: step3. check 1st loop. trigger frames to let animation done + * @tc.expected: step3. check all the frames in first loop + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ("1", flushEventMock_->pictureStringValue_); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ("2", flushEventMock_->pictureStringValue_); + + /** + * @tc.steps: step4. run 10 loops and check. trigger 3 frames to let animation done + * @tc.expected: step4. check all the frames after 10 loops as the first loop + */ + for (int32_t loop = 0; loop < ANIMATION_REPEAT_LOOP; loop++) { + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + } + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ("0", flushEventMock_->pictureStringValue_); +} + +/** + * @tc.name: PictureAnimationTest003 + * @tc.desc: Verify the picture animation process for type int + * @tc.type: FUNC + * @tc.require: AR000DBTQE + * @tc.author: zhouzebin + */ +HWTEST_F(AnimationFrameworkTest, PictureAnimationTest003, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest PictureAnimationTest003 start"; + /** + * @tc.steps: step1. init picture animation + */ + flushEventMock_->pictureString_ = AceType::MakeRefPtr>(); + + /** + * @tc.steps: step2. verify adding picture with error duration + * @tc.expected: step2. return false + */ + EXPECT_FALSE(flushEventMock_->pictureString_->AddPicture(-1.0f, "invalid duration, negative")); + EXPECT_FALSE(flushEventMock_->pictureString_->AddPicture(0.0f, "invalid duration, zero")); + EXPECT_FALSE(flushEventMock_->pictureString_->AddPicture(2.0f, "invalid duration, not normalized")); + + /** + * @tc.steps: step3. verify adding picture with valid edge + * @tc.expected: step3. return true + */ + EXPECT_TRUE(flushEventMock_->pictureString_->AddPicture(1.0f, "valid duration")); +} + +/** + * @tc.name: AnimationRepeatTest001 + * @tc.desc: test repeat animation for repeat 1 time + * @tc.type: FUNC + * @tc.require: AR000DAIGS + * @tc.author: zhouzebin + */ +HWTEST_F(AnimationFrameworkTest, AnimationRepeatTest001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationRepeatTest001 start"; + /** + * @tc.steps: step1. init animation and animator + */ + uint32_t frameTimeMs = FRAME_TIME_IN_MILLISECOND; + platformWindowRaw_->SetNanoFrameTime(NANOSECOND_TO_MILLISECOND * frameTimeMs); + flushEventMock_->InitController(context_); + int32_t duration = frameTimeMs * ANIMATION_DURATION_MULTIPLE; + flushEventMock_->animationInt_ = AceType::MakeRefPtr>(1, 4, Curves::LINEAR); + flushEventMock_->animationDuration_ = duration; + flushEventMock_->iteration_ = 2; + context_->AddPostFlushListener(flushEventMock_); + + /** + * @tc.steps: step2. trigger one frame to make prepare animation work + * @tc.expected: step2. postFlush has been called. + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(1, flushEventMock_->postFlushCallTimes_); + + /** + * @tc.steps: step3. 1st round trigger 2 frames to let animation done + * @tc.expected: step3. check linear curve's value in every frame + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(2, flushEventMock_->animationIntValue_); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(3, flushEventMock_->animationIntValue_); + + /** + * @tc.steps: step4. 2nd round. trigger 3 frames to let animation done + * @tc.expected: step4. check linear curve's value in every frame + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(1, flushEventMock_->animationIntValue_); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(2, flushEventMock_->animationIntValue_); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(3, flushEventMock_->animationIntValue_); + + /** + * @tc.steps: step5. 3rd round. trigger 2 frames. + * @tc.expected: step5. verify animation stopped + */ + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(4, flushEventMock_->animationIntValue_); + EXPECT_EQ(flushEventMock_->iteration_, flushEventMock_->repeatDoneTimes_ + 1); +} + +/** + * @tc.name: AnimationRepeatTest002 + * @tc.desc: test repeat animation for repeat forever + * @tc.type: FUNC + * @tc.require: AR000DAIGS + * @tc.author: zhouzebin + */ +HWTEST_F(AnimationFrameworkTest, AnimationRepeatTest002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationRepeatTest002 start"; + /** + * @tc.steps: step1. init animation and animator + */ + uint32_t frameTimeMs = FRAME_TIME_IN_MILLISECOND; + platformWindowRaw_->SetNanoFrameTime(NANOSECOND_TO_MILLISECOND * frameTimeMs); + flushEventMock_->InitController(context_); + int32_t duration = frameTimeMs * ANIMATION_DURATION_MULTIPLE; + flushEventMock_->animationInt_ = AceType::MakeRefPtr>(1, 4, Curves::LINEAR); + flushEventMock_->animationDuration_ = duration; + flushEventMock_->iteration_ = ANIMATION_REPEAT_INFINITE; + context_->AddPostFlushListener(flushEventMock_); + platformWindowRaw_->TriggerOneFrame(); + + /** + * @tc.steps: step2. go for 10 loops and check. + * @tc.expected: step2. check values in every frame. + */ + for (int32_t loop = 0; loop < ANIMATION_REPEAT_LOOP; loop++) { + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(2, flushEventMock_->animationIntValue_); + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(3, flushEventMock_->animationIntValue_); + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(1, flushEventMock_->animationIntValue_); + } + EXPECT_FALSE(flushEventMock_->animationStopStatus_); +} + +/** + * @tc.name: AnimationRepeatTest003 + * @tc.desc: test repeat animation for skip multi frames + * @tc.type: FUNC + * @tc.require: AR000DAIGS + * @tc.author: zhouzebin + */ +HWTEST_F(AnimationFrameworkTest, AnimationRepeatTest003, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationRepeatTest003 start"; + /** + * @tc.steps: step1. init animation and animator + */ + uint32_t frameTimeMs = FRAME_TIME_IN_MILLISECOND; + platformWindowRaw_->SetNanoFrameTime(NANOSECOND_TO_MILLISECOND * frameTimeMs); + flushEventMock_->InitController(context_); + int32_t duration = frameTimeMs * ANIMATION_DURATION_MULTIPLE; + flushEventMock_->animationInt_ = AceType::MakeRefPtr>(1, 4, Curves::LINEAR); + flushEventMock_->animationDuration_ = duration; + flushEventMock_->iteration_ = 3; + context_->AddPostFlushListener(flushEventMock_); + + /** + * @tc.steps: step2. trigger one frame to make prepare animation work + * @tc.expected: step2. postFlush has been called. + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(1, flushEventMock_->postFlushCallTimes_); + + /** + * @tc.steps: step3. skip 2 loops and check + * @tc.expected: step3. check the last loop + */ + platformWindowRaw_->TriggerFrame(NANOSECOND_TO_MILLISECOND * duration * 2, 3); + EXPECT_EQ(1, flushEventMock_->animationIntValue_); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(2, flushEventMock_->animationIntValue_); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(3, flushEventMock_->animationIntValue_); + + /** + * @tc.steps: step4. check loop ends + * @tc.expected: step4. get the end value + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(4, flushEventMock_->animationIntValue_); +} + +/** + * @tc.name: AnimationRepeatTest004 + * @tc.desc: test repeat animation for skip all loops + * @tc.type: FUNC + * @tc.require: AR000DAIGS + * @tc.author: zhouzebin + */ +HWTEST_F(AnimationFrameworkTest, AnimationRepeatTest004, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationRepeatTest004 start"; + /** + * @tc.steps: step1. init animation and animator + */ + int32_t frameTimeMs = FRAME_TIME_IN_MILLISECOND; + platformWindowRaw_->SetNanoFrameTime(NANOSECOND_TO_MILLISECOND * frameTimeMs); + flushEventMock_->InitController(context_); + int32_t duration = frameTimeMs * ANIMATION_DURATION_MULTIPLE; + flushEventMock_->animationInt_ = AceType::MakeRefPtr>(1, 4, Curves::LINEAR); + flushEventMock_->animationDuration_ = duration; + flushEventMock_->iteration_ = 3; + context_->AddPostFlushListener(flushEventMock_); + + /** + * @tc.steps: step2. trigger one frame to make prepare animation work + * @tc.expected: step2. postFlush has been called. + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(1, flushEventMock_->postFlushCallTimes_); + + /** + * @tc.steps: step3. skip 2 loops and check + * @tc.expected: step3. check animation stop + */ + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerFrame(NANOSECOND_TO_MILLISECOND * (static_cast(duration)) * 4, 3); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(4, flushEventMock_->animationIntValue_); + // skip all loops, only last loop trigger repeat callback + EXPECT_EQ(0, flushEventMock_->repeatDoneTimes_); +} + +/** + * @tc.name: AnimationRepeatTest005 + * @tc.desc: test repeat animation for invalid repeat times + * @tc.type: FUNC + * @tc.require: AR000DAIGS + * @tc.author: zhouzebin + */ +HWTEST_F(AnimationFrameworkTest, AnimationRepeatTest005, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationRepeatTest005 start"; + /** + * @tc.steps: step1. init animation and animator + */ + int32_t frameTimeMs = FRAME_TIME_IN_MILLISECOND; + platformWindowRaw_->SetNanoFrameTime(NANOSECOND_TO_MILLISECOND * frameTimeMs); + flushEventMock_->InitController(context_); + int32_t duration = frameTimeMs * ANIMATION_DURATION_MULTIPLE; + flushEventMock_->animationInt_ = AceType::MakeRefPtr>(1, 4, Curves::LINEAR); + flushEventMock_->animationDuration_ = duration; + flushEventMock_->iteration_ = -2; + context_->AddPostFlushListener(flushEventMock_); + + /** + * @tc.steps: step2. trigger one frame to make prepare animation work + * @tc.expected: step2. postFlush has been called. repeat set failed. + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(1, flushEventMock_->postFlushCallTimes_); + EXPECT_FALSE(flushEventMock_->setRepeatSucc_); +} + +/** + * @tc.name: AnimationRepeatTest006 + * @tc.desc: test repeat animation for no repeat times with very large start delay and duration + * @tc.type: FUNC + * @tc.require: AR000DAIGS + * @tc.author: zhouzebin + */ +HWTEST_F(AnimationFrameworkTest, AnimationRepeatTest006, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationRepeatTest006 start"; + /** + * @tc.steps: step1. init animation and animator + */ + InitAnimationAndAnimator(1, 1, INT32_MAX, INT32_MAX); + platformWindowRaw_->TriggerOneFrame(); + + /** + * @tc.steps: step2. trigger long time to reach start delay's end + * @tc.expected: step2. check reaches start delay's end + */ + platformWindowRaw_->TriggerFrame(((uint64_t)(INT32_MAX - 1)) * NANOSECOND_TO_MILLISECOND, 1); + EXPECT_EQ(0, flushEventMock_->animationIntValue_); + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(1, flushEventMock_->animationIntValue_); + + /** + * @tc.steps: step3. trigger long time to make duration's end + * @tc.expected: step3. check reaches start duration's end + */ + platformWindowRaw_->TriggerFrame(((uint64_t)(INT32_MAX - 1)) * NANOSECOND_TO_MILLISECOND, 1); + EXPECT_FALSE(flushEventMock_->animationStopStatus_); + platformWindowRaw_->TriggerOneFrame(); + EXPECT_TRUE(flushEventMock_->animationStopStatus_); +} + +/** + * @tc.name: AnimationRepeatTest007 + * @tc.desc: test repeat animation for no repeat times with very large repeat times + * @tc.type: FUNC + * @tc.require: AR000DAIGS + * @tc.author: zhouzebin + */ +HWTEST_F(AnimationFrameworkTest, AnimationRepeatTest007, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationRepeatTest007 start"; + /** + * @tc.steps: step1. init animation and animator + */ + InitAnimationAndAnimator(1, INT32_MAX, 1, 1); + + /** + * @tc.steps: step2. trigger one frame to reach start delay's end + * @tc.expected: step2. check reaches start delay's end + */ + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(1, flushEventMock_->repeatDoneTimes_); + + /** + * @tc.steps: step3. trigger very long frame to reach duration's end + * @tc.expected: step3. check reaches animation's end + */ + platformWindowRaw_->TriggerFrame(((uint64_t)(INT32_MAX - 2)) * NANOSECOND_TO_MILLISECOND, 1); + EXPECT_EQ(2, flushEventMock_->repeatDoneTimes_); + EXPECT_FALSE(flushEventMock_->animationStopStatus_); + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(3, flushEventMock_->repeatDoneTimes_ + 1); + EXPECT_TRUE(flushEventMock_->animationStopStatus_); +} + +/** + * @tc.name: AnimationStartDelayTest001 + * @tc.desc: test start delay for animation + * @tc.type: FUNC + * @tc.require: AR000DAIGS + * @tc.author: zhouzebin + */ +HWTEST_F(AnimationFrameworkTest, AnimationStartDelayTest001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationStartDelayTest001 start"; + /** + * @tc.steps: step1. init animation and animator + */ + int32_t frameTimeMs = FRAME_TIME_IN_MILLISECOND; + platformWindowRaw_->SetNanoFrameTime(NANOSECOND_TO_MILLISECOND * frameTimeMs); + flushEventMock_->InitController(context_); + int32_t duration = frameTimeMs * ANIMATION_DURATION_MULTIPLE; + flushEventMock_->animationInt_ = AceType::MakeRefPtr>(1, 4, Curves::LINEAR); + flushEventMock_->animationDuration_ = duration; + flushEventMock_->startDelay_ = frameTimeMs; + context_->AddPostFlushListener(flushEventMock_); + + /** + * @tc.steps: step2. trigger one frame to make prepare animation work + * @tc.expected: step2. postFlush has been called. + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(1, flushEventMock_->postFlushCallTimes_); + + /** + * @tc.steps: step3. trigger start delay and check + * @tc.expected: step3. check start dely + */ + platformWindowRaw_->TriggerFrame(NANOSECOND_TO_MILLISECOND * (frameTimeMs - 1), 1); + EXPECT_EQ(0, flushEventMock_->animationIntValue_); + + /** + * @tc.steps: step4. go with the left animation + * @tc.expected: step4. check timestamp at start millisecond + */ + platformWindowRaw_->TriggerFrame(NANOSECOND_TO_MILLISECOND, 1); + EXPECT_EQ(1, flushEventMock_->animationIntValue_); + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(2, flushEventMock_->animationIntValue_); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(3, flushEventMock_->animationIntValue_); + + /** + * @tc.steps: step5. check animation at the end + * @tc.expected: step5. check the end + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(4, flushEventMock_->animationIntValue_); +} + +/** + * @tc.name: AnimationStartDelayTest002 + * @tc.desc: test repeat & start delay animation + * @tc.type: FUNC + * @tc.require: AR000DAIGS + * @tc.author: zhouzebin + */ +HWTEST_F(AnimationFrameworkTest, AnimationStartDelayTest002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationStartDelayTest002 start"; + /** + * @tc.steps: step1. init animation and animator + */ + int32_t frameTimeMs = FRAME_TIME_IN_MILLISECOND; + platformWindowRaw_->SetNanoFrameTime(NANOSECOND_TO_MILLISECOND * frameTimeMs); + flushEventMock_->InitController(context_); + int32_t duration = frameTimeMs * ANIMATION_DURATION_MULTIPLE; + flushEventMock_->animationInt_ = AceType::MakeRefPtr>(1, 4, Curves::LINEAR); + flushEventMock_->animationDuration_ = duration; + flushEventMock_->startDelay_ = frameTimeMs; + flushEventMock_->iteration_ = 2; + context_->AddPostFlushListener(flushEventMock_); + + /** + * @tc.steps: step2. trigger one frame to make prepare animation work + * @tc.expected: step2. postFlush has been called. + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(1, flushEventMock_->postFlushCallTimes_); + + /** + * @tc.steps: step3. trigger start delay and check + * @tc.expected: step3. check start dely + */ + platformWindowRaw_->TriggerFrame(NANOSECOND_TO_MILLISECOND * (frameTimeMs - 1), 1); + EXPECT_EQ(0, flushEventMock_->animationIntValue_); + + /** + * @tc.steps: step4. go with repeat loops and check + * @tc.expected: step4. check timestamp at last millisecond + */ + for (int32_t loop = 0; loop < 2; loop++) { + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(1, flushEventMock_->animationIntValue_); + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(2, flushEventMock_->animationIntValue_); + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(3, flushEventMock_->animationIntValue_); + } + + /** + * @tc.steps: step5. check animation at the end + * @tc.expected: step5. check the end + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(4, flushEventMock_->animationIntValue_); +} + +/** + * @tc.name: AnimationStartDelayTest003 + * @tc.desc: test repeat & start delay animation with time scale + * @tc.type: FUNC + * @tc.require: AR000DAIGS + * @tc.author: zhouzebin + */ +HWTEST_F(AnimationFrameworkTest, AnimationStartDelayTest003, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationStartDelayTest003 start"; + /** + * @tc.steps: step1. init animation and animator + */ + int32_t frameTimeMs = FRAME_TIME_IN_MILLISECOND; + platformWindowRaw_->SetNanoFrameTime(NANOSECOND_TO_MILLISECOND * frameTimeMs); + flushEventMock_->InitController(context_); + int32_t duration = frameTimeMs * ANIMATION_DURATION_MULTIPLE; + flushEventMock_->animationInt_ = AceType::MakeRefPtr>(1, 4, Curves::LINEAR); + flushEventMock_->animationDuration_ = duration; + flushEventMock_->startDelay_ = frameTimeMs; + auto controller = flushEventMock_->GetAnimator(); + controller->SetDurationScale(2.0f); + context_->AddPostFlushListener(flushEventMock_); + /** + * @tc.steps: step2. trigger start delay and check + * @tc.expected: step2. check start delay + */ + platformWindowRaw_->TriggerFrames(2); + EXPECT_EQ(0, flushEventMock_->animationIntValue_); + + /** + * @tc.steps: step3. go forward and check + * @tc.expected: step3. check timestamp at last millisecond + */ + platformWindowRaw_->TriggerFrames(2); + EXPECT_EQ(1, flushEventMock_->animationIntValue_); + platformWindowRaw_->TriggerFrames(2); + EXPECT_EQ(2, flushEventMock_->animationIntValue_); + platformWindowRaw_->TriggerFrames(2); + EXPECT_EQ(3, flushEventMock_->animationIntValue_); + + /** + * @tc.steps: step4. check animation at the end + * @tc.expected: step4. check the end + */ + platformWindowRaw_->TriggerFrames(2); + EXPECT_EQ(4, flushEventMock_->animationIntValue_); + controller->SetDurationScale(1.0f); +} + +/** + * @tc.name: AnimationPauseTest001 + * @tc.desc: test pause animation + * @tc.type: FUNC + * @tc.require: AR000DAIGS + * @tc.author: zhouzebin + */ +HWTEST_F(AnimationFrameworkTest, AnimationPauseTest001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationPauseTest001 start"; + /** + * @tc.steps: step1. init animation and animator + */ + int32_t frameTimeMs = FRAME_TIME_IN_MILLISECOND; + platformWindowRaw_->SetNanoFrameTime(NANOSECOND_TO_MILLISECOND * frameTimeMs); + flushEventMock_->InitController(context_); + int32_t duration = frameTimeMs * ANIMATION_DURATION_MULTIPLE; + flushEventMock_->animationInt_ = AceType::MakeRefPtr>(1, 4, Curves::LINEAR); + flushEventMock_->animationDuration_ = duration; + context_->AddPostFlushListener(flushEventMock_); + + /** + * @tc.steps: step2. trigger one frame to make prepare animation work + * @tc.expected: step2. postFlush has been called. + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(1, flushEventMock_->postFlushCallTimes_); + + /** + * @tc.steps: step3. trigger frame after resume ahead + * @tc.expected: step3. check linear curve's value in every frame + */ + auto controller = flushEventMock_->GetAnimator(); + controller->Resume(); + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(2, flushEventMock_->animationIntValue_); + + controller->Pause(); + + /** + * @tc.steps: step4. pause animator + * @tc.expected: step4. check linear curve's value do not change. + */ + for (int32_t i = 0; i < 10; i++) { + platformWindowRaw_->TriggerOneFrame(); + controller->Pause(); + EXPECT_EQ(2, flushEventMock_->animationIntValue_); + } + + /** + * @tc.steps: step5. resume animator and trigger last frame + * @tc.expected: step5. check linear curve's value reach the end value. + */ + controller->Resume(); + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(3, flushEventMock_->animationIntValue_); +} + +/** + * @tc.name: AnimationPauseTest002 + * @tc.desc: test pause animation + * @tc.type: FUNC + * @tc.require: AR000DAIGS + * @tc.author: zhouzebin + */ +HWTEST_F(AnimationFrameworkTest, AnimationPauseTest002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationPauseTest002 start"; + /** + * @tc.steps: step1. init animation and animator + */ + int32_t frameTimeMs = FRAME_TIME_IN_MILLISECOND; + platformWindowRaw_->SetNanoFrameTime(NANOSECOND_TO_MILLISECOND * frameTimeMs); + flushEventMock_->InitController(context_); + int32_t duration = frameTimeMs * ANIMATION_DURATION_MULTIPLE; + flushEventMock_->animationInt_ = AceType::MakeRefPtr>(1, 4, Curves::LINEAR); + flushEventMock_->animationDuration_ = duration; + context_->AddPostFlushListener(flushEventMock_); + + /** + * @tc.steps: step2. trigger frames to make prepare animation work + * @tc.expected: step2. postFlush has been called. + */ + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(3, flushEventMock_->animationIntValue_); + + /** + * @tc.steps: step3. pause -> stop -> goforward + */ + auto controller = flushEventMock_->GetAnimator(); + controller->Pause(); + controller->Stop(); + controller->Play(); + + /** + * @tc.steps: step4. trigger one frame + * @tc.expected: step4. check linear curve's value change. + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(2, flushEventMock_->animationIntValue_); + + /** + * @tc.steps: step5. trigger the last frame + * @tc.expected: step5. check linear curve's value change. + */ + controller->Resume(); + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(3, flushEventMock_->animationIntValue_); +} + +/** + * @tc.name: KeyframeAnimationTest001 + * @tc.desc: Verify the keyframe animation with only one keyframe. + * @tc.type: FUNC + * @tc.require: AR000DBTLS + * @tc.author: jiangdayuan + */ +HWTEST_F(AnimationFrameworkTest, KeyframeAnimationTest001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest KeyframeAnimationTest001 start"; + /** + * @tc.steps: step1. init keyframe animation and animator. + */ + int32_t frameTimeMs = FRAME_TIME_IN_MILLISECOND; + platformWindowRaw_->SetNanoFrameTime(NANOSECOND_TO_MILLISECOND * frameTimeMs); + flushEventMock_->InitController(context_); + int32_t duration = frameTimeMs * KEYFRAME_ANIMATION_DURATION_MULTIPLE; + float begin = 1.0f; + auto kf1 = AceType::MakeRefPtr>(1.0f, begin); + flushEventMock_->keyframeAnimation_ = AceType::MakeRefPtr>(); + flushEventMock_->keyframeAnimation_->AddKeyframe(kf1); + flushEventMock_->animationDuration_ = duration; + context_->AddPostFlushListener(flushEventMock_); + + /** + * @tc.steps: step2. trigger one frame to make prepare animation work + * @tc.expected: step2. postFlush has been called. + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(1, flushEventMock_->postFlushCallTimes_); + + /** + * @tc.steps: step3. trigger 3 frames to verify keyframe animation + * @tc.expected: step3. the value of each frame remains the same as the beginning value. + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(begin, flushEventMock_->keyframeAnimationValue_, CUBIC_ERROR_BOUND); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(begin, flushEventMock_->keyframeAnimationValue_, CUBIC_ERROR_BOUND); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(begin, flushEventMock_->keyframeAnimationValue_, CUBIC_ERROR_BOUND); +} + +/** + * @tc.name: KeyframeAnimationTest002 + * @tc.desc: Verify the keyframe animation with two keyframes and set curve to linear curve. + * @tc.type: FUNC + * @tc.require: AR000DBTLS + * @tc.author: jiangdayuan + */ +HWTEST_F(AnimationFrameworkTest, KeyframeAnimationTest002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest KeyframeAnimationTest002 start"; + /** + * @tc.steps: step1. init keyframe animation and animator,set curve to linear curve. + */ + int32_t frameTimeMs = FRAME_TIME_IN_MILLISECOND; + platformWindowRaw_->SetNanoFrameTime(NANOSECOND_TO_MILLISECOND * frameTimeMs); + flushEventMock_->InitController(context_); + int32_t duration = frameTimeMs * KEYFRAME_ANIMATION_DURATION_MULTIPLE; + float begin = 1.0f; + float end = 10.0f; + auto kf1 = AceType::MakeRefPtr>(0.0f, begin); + auto kf2 = AceType::MakeRefPtr>(1.0f, end); + kf2->SetCurve(Curves::LINEAR); + flushEventMock_->keyframeAnimation_ = AceType::MakeRefPtr>(); + flushEventMock_->keyframeAnimation_->AddKeyframe(kf1); + flushEventMock_->keyframeAnimation_->AddKeyframe(kf2); + flushEventMock_->animationDuration_ = duration; + context_->AddPostFlushListener(flushEventMock_); + + /** + * @tc.steps: step2. trigger one frame to make prepare animation work + * @tc.expected: step2. postFlush has been called. + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(1, flushEventMock_->postFlushCallTimes_); + + /** + * @tc.steps: step3. trigger 2 frames to verify keyframe animation + * @tc.expected: step3. the value of each frame changes linearly + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR((begin + end) / 2.0f, flushEventMock_->keyframeAnimationValue_, CUBIC_ERROR_BOUND); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(end, flushEventMock_->keyframeAnimationValue_, CUBIC_ERROR_BOUND); +} + +/** + * @tc.name: KeyframeAnimationTest003 + * @tc.desc: Verify the keyframe animation with two keyframes and without setting curve. + * @tc.type: FUNC + * @tc.require: AR000DBTLS + * @tc.author: jiangdayuan + */ +HWTEST_F(AnimationFrameworkTest, KeyframeAnimationTest003, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest KeyframeAnimationTest003 start"; + /** + * @tc.steps: step1. init keyframe animation and animator. + */ + int32_t frameTimeMs = FRAME_TIME_IN_MILLISECOND; + platformWindowRaw_->SetNanoFrameTime(NANOSECOND_TO_MILLISECOND * frameTimeMs); + flushEventMock_->InitController(context_); + int32_t duration = frameTimeMs * KEYFRAME_ANIMATION_DURATION_MULTIPLE; + float begin = 1.0f; + float end = 10.0f; + auto kf1 = AceType::MakeRefPtr>(0.0f, begin); + auto kf2 = AceType::MakeRefPtr>(1.0f, end); + + flushEventMock_->keyframeAnimation_ = AceType::MakeRefPtr>(); + flushEventMock_->keyframeAnimation_->AddKeyframe(kf1); + flushEventMock_->keyframeAnimation_->AddKeyframe(kf2); + flushEventMock_->animationDuration_ = duration; + context_->AddPostFlushListener(flushEventMock_); + + /** + * @tc.steps: step2. trigger one frame to make prepare animation work + * @tc.expected: step2. postFlush has been called. + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(1, flushEventMock_->postFlushCallTimes_); + + /** + * @tc.steps: step3. trigger 2 frames to verify keyframe animation + * @tc.expected: step3. the value of each frame changes linearly + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(8.21793, flushEventMock_->keyframeAnimationValue_, CUBIC_ERROR_BOUND); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(end, flushEventMock_->keyframeAnimationValue_, CUBIC_ERROR_BOUND); +} + +/** + * @tc.name: KeyframeAnimationTest004 + * @tc.desc: Verify the keyframe animation with three keyframes and set all curves to linear curve. + * @tc.type: FUNC + * @tc.require: AR000DBTLS + * @tc.author: jiangdayuan + */ +HWTEST_F(AnimationFrameworkTest, KeyframeAnimationTest004, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest KeyframeAnimationTest004 start"; + /** + * @tc.steps: step1. init keyframe animation and animator. + */ + int32_t frameTimeMs = FRAME_TIME_IN_MILLISECOND; + platformWindowRaw_->SetNanoFrameTime(NANOSECOND_TO_MILLISECOND * frameTimeMs); + flushEventMock_->InitController(context_); + int32_t duration = frameTimeMs * KEYFRAME_ANIMATION_DURATION_MULTIPLE; + float begin = 1.0f; + float middle = 5.0f; + float end = 10.0f; + + auto kf1 = AceType::MakeRefPtr>(0.0f, begin); + auto kf2 = AceType::MakeRefPtr>(0.5f, middle); + auto kf3 = AceType::MakeRefPtr>(1.0f, end); + + kf2->SetCurve(Curves::LINEAR); + kf3->SetCurve(Curves::LINEAR); + + flushEventMock_->keyframeAnimation_ = AceType::MakeRefPtr>(); + flushEventMock_->keyframeAnimation_->AddKeyframe(kf1); + flushEventMock_->keyframeAnimation_->AddKeyframe(kf2); + flushEventMock_->keyframeAnimation_->AddKeyframe(kf3); + flushEventMock_->animationDuration_ = duration; + context_->AddPostFlushListener(flushEventMock_); + + /** + * @tc.steps: step2. trigger one frame to make prepare animation work + * @tc.expected: step2. postFlush has been called. + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(1, flushEventMock_->postFlushCallTimes_); + + /** + * @tc.steps: step3. trigger 2 frames to verify keyframe animation + * @tc.expected: step3. the value of each frame changes linearly + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(middle, flushEventMock_->keyframeAnimationValue_, CUBIC_ERROR_BOUND); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(end, flushEventMock_->keyframeAnimationValue_, CUBIC_ERROR_BOUND); +} + +/** + * @tc.name: KeyframeAnimationTest005 + * @tc.desc: Verify the keyframe animation with three keyframes and set different curve. + * @tc.type: FUNC + * @tc.require: AR000DBTLS + * @tc.author: jiangdayuan + */ +HWTEST_F(AnimationFrameworkTest, KeyframeAnimationTest005, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest KeyframeAnimationTest005 start"; + /** + * @tc.steps: step1. init keyframe animation and animator. + */ + int32_t frameTimeMs = FRAME_TIME_IN_MILLISECOND; + platformWindowRaw_->SetNanoFrameTime(NANOSECOND_TO_MILLISECOND * frameTimeMs); + flushEventMock_->InitController(context_); + int32_t duration = frameTimeMs * KEYFRAME_ANIMATION_DURATION_MULTIPLE; + float begin = 1.0f; + float middle = 5.0f; + float end = 10.0f; + + auto kf1 = AceType::MakeRefPtr>(0.0f, begin); + auto kf2 = AceType::MakeRefPtr>(0.5f, middle); + auto kf3 = AceType::MakeRefPtr>(1.0f, end); + + kf2->SetCurve(Curves::LINEAR); + kf3->SetCurve(Curves::SINE); + + flushEventMock_->keyframeAnimation_ = AceType::MakeRefPtr>(); + flushEventMock_->keyframeAnimation_->AddKeyframe(kf1); + flushEventMock_->keyframeAnimation_->AddKeyframe(kf2); + flushEventMock_->keyframeAnimation_->AddKeyframe(kf3); + flushEventMock_->animationDuration_ = duration; + context_->AddPostFlushListener(flushEventMock_); + + /** + * @tc.steps: step2. trigger one frame to make prepare animation work + * @tc.expected: step2. postFlush has been called. + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(1, flushEventMock_->postFlushCallTimes_); + + /** + * @tc.steps: step3. trigger 2 frames to verify keyframe animation + * @tc.expected: step3. the value of each frame changes correctly + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(middle, flushEventMock_->keyframeAnimationValue_, FLT_EPSILON); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(end, flushEventMock_->keyframeAnimationValue_, FLT_EPSILON); +} + +/** + * @tc.name: AnimationInterpolateTest001 + * @tc.desc: duration equals zero + * @tc.type: FUNC + * @tc.require: AR000DAIGS + * @tc.author: zhouzebin + */ +HWTEST_F(AnimationFrameworkTest, AnimationInterpolateTest001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationInterpolateTest001 start"; + /** + * @tc.steps: step1. init animation and animator + */ + flushEventMock_->InitController(context_); + int32_t duration = 0; + // default curve is linear. test it with nullptr. + flushEventMock_->animationFloat_ = AceType::MakeRefPtr>(1.0f, 6.0f, nullptr); + flushEventMock_->animationDuration_ = duration; + context_->AddPostFlushListener(flushEventMock_); + + /** + * @tc.steps: step2. trigger one frame to make prepare animation work + * @tc.expected: step2. postFlush has been called. + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(1, flushEventMock_->postFlushCallTimes_); + + /** + * @tc.steps: step3. trigger 1 frame to let animation done + * @tc.expected: step3. stop status is true + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_TRUE(flushEventMock_->animationStopStatus_); +} + +/** + * @tc.name: AnimationInterpolateTest002 + * @tc.desc: start interpolate animation without set it. + * @tc.type: FUNC + * @tc.require: AR000DAIGS + * @tc.author: zhouzebin + */ +HWTEST_F(AnimationFrameworkTest, AnimationInterpolateTest002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationInterpolateTest001 start"; + /** + * @tc.steps: step1. init animation and animator + */ + flushEventMock_->InitController(context_); + int32_t duration = 0; + // default curve is linear. test it with nullptr. + flushEventMock_->animationDuration_ = duration; + context_->AddPostFlushListener(flushEventMock_); + + /** + * @tc.steps: step2. trigger one frame to make prepare animation work + * @tc.expected: step2. postFlush has been called. + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(1, flushEventMock_->postFlushCallTimes_); + + /** + * @tc.steps: step3. trigger 1 frame to let animation done + * @tc.expected: step3. check no animation get listener callback + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(0.0f, flushEventMock_->animationFloatValue_, FLT_EPSILON); +} + +/** + * @tc.name: AnimationFrictionMotionTest001 + * @tc.desc: play friction motion in a very short duration (less than a frame) + * @tc.type: FUNC + * @tc.require: AR000DAIGS + * @tc.author: zhouzebin + */ +HWTEST_F(AnimationFrameworkTest, AnimationFrictionMotionTest001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationFrictionMotionTest001 start"; + /** + * @tc.steps: step1. init friction motion and animator + */ + platformWindowRaw_->SetNanoFrameTime(NANO_FRAME_TIME * 1000); + flushEventMock_->InitController(context_); + auto frictionMotion = AceType::MakeRefPtr(0.0, 1.0, 1.0); + auto controller = flushEventMock_->GetAnimator(); + controller->PlayMotion(frictionMotion); + + /** + * @tc.steps: step2. trigger one frame to make it done + * @tc.expected: step2. scroll has been done. + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_TRUE(frictionMotion->IsCompleted()); +} + +/** + * @tc.name: AnimationFrictionMotionTest002 + * @tc.desc: play friction motion in positive velocity. + * @tc.type: FUNC + * @tc.require: AR000DAIGS + * @tc.author: zhouzebin + */ +HWTEST_F(AnimationFrameworkTest, AnimationFrictionMotionTest002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationFrictionMotionTest002 start"; + /** + * @tc.steps: step1. init friction motion and animator + */ + platformWindowRaw_->SetNanoFrameTime(NANO_FRAME_TIME * 1000); + flushEventMock_->InitController(context_); + auto frictionMotion = AceType::MakeRefPtr(1.0, 100.0, 100.0); + + EXPECT_NEAR(100.0, frictionMotion->GetPosition(0.0), 0.1); + EXPECT_NEAR(100.0, frictionMotion->GetVelocity(0.0), 0.1); + + EXPECT_NEAR(120.89, frictionMotion->GetPosition(0.5), 1.0); + EXPECT_NEAR(113.09, frictionMotion->GetFinalPosition(), 0.1); +} + +/** + * @tc.name: AnimationSpringMotionTest001 + * @tc.desc: Verify critical damped motion + * @tc.type: FUNC + * @tc.require: AR000DBULF + * @tc.author: jiangdayuan + */ +HWTEST_F(AnimationFrameworkTest, AnimationSpringMotionTest001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationSpringMotionTest001 start"; + /** + * @tc.steps: step1. init SpringMotion with critical damped SpringProperty. + */ + auto springDescription = AceType::MakeRefPtr(1.0, 100.0, 20.0); + auto springMotion = AceType::MakeRefPtr(0.0, 500.0, 0.0, springDescription); + EXPECT_EQ(springMotion->GetType(), SpringModelType::CRITICAL_DAMPED); + + /** + * @tc.steps: step2. verify springMotion start point. + * @tc.expected: step2. result is correct. + */ + springMotion->Move(0.0f); + EXPECT_FALSE(springMotion->IsCompleted()); + EXPECT_NEAR(springMotion->GetCurrentPosition(), 0.0, DBL_EPSILON); + EXPECT_NEAR(springMotion->GetCurrentVelocity(), 5000.0, DBL_EPSILON); + + /** + * @tc.steps: step3. verify springMotion middle point. + * @tc.expected: step3. result is correct. + */ + springMotion->Move(500.0f); + EXPECT_FALSE(springMotion->IsCompleted()); + EXPECT_EQ(floor(springMotion->GetCurrentPosition()), 496); + EXPECT_EQ(floor(springMotion->GetCurrentVelocity()), 33); + + /** + * @tc.steps: step4. verify springMotion end point. + * @tc.expected: step4. result is correct. + */ + springMotion->Move(1600.0f); + EXPECT_TRUE(springMotion->IsCompleted()); + EXPECT_NEAR(springMotion->GetCurrentPosition(), 500.0, DBL_EPSILON); + EXPECT_NEAR(springMotion->GetCurrentVelocity(), 0.0, DBL_EPSILON); +} + +/** + * @tc.name: AnimationSpringMotionTest002 + * @tc.desc: Verify overdamped motion + * @tc.type: FUNC + * @tc.require: AR000DBULF + * @tc.author: jiangdayuan + */ +HWTEST_F(AnimationFrameworkTest, AnimationSpringMotionTest002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationSpringMotionTest002 start"; + /** + * @tc.steps: step1. init SpringMotion with overdamped SpringProperty. + */ + auto springDescription = AceType::MakeRefPtr(1.0, 100.0, 25.0); + auto springMotion = AceType::MakeRefPtr(0.0, 500.0, 0.0, springDescription); + EXPECT_EQ(springMotion->GetType(), SpringModelType::OVER_DAMPED); + + /** + * @tc.steps: step2. verify springMotion start point. + * @tc.expected: step2. result is correct. + */ + springMotion->Move(0.0f); + EXPECT_FALSE(springMotion->IsCompleted()); + EXPECT_NEAR(springMotion->GetCurrentPosition(), 0.0, DBL_EPSILON); + + /** + * @tc.steps: step3. verify springMotion middle point. + * @tc.expected: step3. result is correct. + */ + springMotion->Move(500.0f); + EXPECT_FALSE(springMotion->IsCompleted()); + EXPECT_EQ(floor(springMotion->GetCurrentPosition()), 445); + EXPECT_EQ(floor(springMotion->GetCurrentVelocity()), 273); + + /** + * @tc.steps: step4. verify springMotion end point. + * @tc.expected: step4. result is correct. + */ + springMotion->Move(3100.0f); + EXPECT_TRUE(springMotion->IsCompleted()); + EXPECT_NEAR(springMotion->GetCurrentPosition(), 500.0, DBL_EPSILON); + EXPECT_NEAR(springMotion->GetCurrentVelocity(), 0.0, DBL_EPSILON); +} + +/** + * @tc.name: AnimationSpringMotionTest003 + * @tc.desc: Verify underdamped motion + * @tc.type: FUNC + * @tc.require: AR000DBULF + * @tc.author: jiangdayuan + */ +HWTEST_F(AnimationFrameworkTest, AnimationSpringMotionTest003, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationSpringMotionTest003 start"; + /** + * @tc.steps: step1. init SpringMotion with underdamped SpringProperty. + */ + auto springDescription = AceType::MakeRefPtr(1.0, 100.0, 5.0); + auto springMotion = AceType::MakeRefPtr(0.0, 300.0, 0.0, springDescription); + EXPECT_EQ(springMotion->GetType(), SpringModelType::UNDER_DAMPED); + + /** + * @tc.steps: step2. verify springMotion start point. + * @tc.expected: step2. result is correct. + */ + springMotion->Move(0.0f); + EXPECT_FALSE(springMotion->IsCompleted()); + EXPECT_NEAR(springMotion->GetCurrentPosition(), 0.0, DBL_EPSILON); + + /** + * @tc.steps: step3. verify springMotion middle point. + * @tc.expected: step3. result is correct. + */ + springMotion->Move(1000.0f); + EXPECT_FALSE(springMotion->IsCompleted()); + EXPECT_EQ(floor(springMotion->GetCurrentPosition()), 325); + EXPECT_EQ(floor(springMotion->GetCurrentVelocity()), -65); + + /** + * @tc.steps: step4. verify springMotion end point. + * @tc.expected: step4. result is correct. + */ + springMotion->Move(6000.0f); + EXPECT_TRUE(springMotion->IsCompleted()); + EXPECT_NEAR(springMotion->GetCurrentPosition(), 300.0, DBL_EPSILON); + EXPECT_NEAR(springMotion->GetCurrentVelocity(), 0.0, DBL_EPSILON); +} + +/** + * @tc.name: AnimationSpringMotionTest004 + * @tc.desc: Verify Scroll Spring motion + * @tc.type: FUNC + * @tc.require: AR000DBULF + * @tc.author: jiangdayuan + */ +HWTEST_F(AnimationFrameworkTest, AnimationSpringMotionTest004, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationSpringMotionTest004 start"; + /** + * @tc.steps: step1. init ScrollSpringMotion with critical damped SpringProperty. + */ + auto springDescription = AceType::MakeRefPtr(1.0, 100.0, 20.0); + auto scrollSpringMotion = AceType::MakeRefPtr(0.0, 500.0, 0.0, springDescription); + EXPECT_EQ(scrollSpringMotion->GetType(), SpringModelType::CRITICAL_DAMPED); + + /** + * @tc.steps: step2. verify ScrollSpringMotion start point. + * @tc.expected: step2. result is correct. + */ + scrollSpringMotion->Move(0.0f); + EXPECT_FALSE(scrollSpringMotion->IsCompleted()); + EXPECT_NEAR(scrollSpringMotion->GetCurrentPosition(), 0.0, DBL_EPSILON); + + /** + * @tc.steps: step3. verify ScrollSpringMotion middle point. + * @tc.expected: step3. result is correct. + */ + scrollSpringMotion->Move(500.0f); + EXPECT_FALSE(scrollSpringMotion->IsCompleted()); + EXPECT_EQ(floor(scrollSpringMotion->GetCurrentPosition()), 496); + + /** + * @tc.steps: step4. verify ScrollSpringMotion end point. + * @tc.expected: step4. result is correct. + */ + scrollSpringMotion->Move(1500.0f); + EXPECT_TRUE(scrollSpringMotion->IsCompleted()); + EXPECT_NEAR(scrollSpringMotion->GetCurrentPosition(), 500.0, DBL_EPSILON); +} + +/** + * @tc.name: AnimationScrollMotionTest001 + * @tc.desc: play scroll motion: always spring + * @tc.type: FUNC + * @tc.require: AR000DAIGS + * @tc.author: zhouzebin + */ +HWTEST_F(AnimationFrameworkTest, AnimationScrollMotionTest001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationScrollMotionTest001 start"; + /** + * @tc.steps: step1. init motion and animator + */ + auto spring = AceType::MakeRefPtr(1.0, 170.0, 28.684); + platformWindowRaw_->SetNanoFrameTime(NANOSECOND_TO_MILLISECOND * 1000); + flushEventMock_->InitController(context_); + auto scrollMotion = + AceType::MakeRefPtr(500.0, -7500.0, ExtentPair(0.0, 1000.0), ExtentPair(0.0, 1000.0), spring); + scrollMotion->AddListener([this](const double& position) { flushEventMock_->SetPositionResult(position); }); + auto controller = flushEventMock_->GetAnimator(); + controller->PlayMotion(scrollMotion); + + /** + * @tc.steps: step2. trigger frames to make it done + * @tc.expected: step2. friction has been done. + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_FALSE(scrollMotion->IsCompleted()); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_FALSE(scrollMotion->IsCompleted()); + EXPECT_NEAR(500.0, flushEventMock_->GetPositionResult(), CUBIC_ERROR_BOUND); +} + +/** + * @tc.name: AnimationBasicPropertyTest001 + * @tc.desc: Test combination for no delay, no repeat. init: 0, from 1 -> 9; reverse, fill-mode: none, duration: 0 + * @tc.type: FUNC + * @tc.require: AR000DAIGS + * @tc.author: zhouzebin + */ +HWTEST_F(AnimationFrameworkTest, AnimationBasicPropertyTest001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationBasicPropertyTest001 start"; + /** + * @tc.steps: step1. init animation and animator + */ + InitBasicPropertyTest(0, 1, TweenOperation::REVERSE, FillMode::NONE, true); + + /** + * @tc.steps: step2. trigger frames to make animation done + * @tc.expected: step2. check interpolateValue and end value is correct + */ + RunAndCheckBasicPropertyTestInterpolateValue(0.0f); +} + +/** + * @tc.name: AnimationBasicPropertyTest002 + * @tc.desc: Test combination for no delay, no repeat. init: 0, from 1 -> 9; reverse, fill-mode: none, duration: 20 + * @tc.type: FUNC + * @tc.require: AR000DAIGS + * @tc.author: zhouzebin + */ +HWTEST_F(AnimationFrameworkTest, AnimationBasicPropertyTest002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationBasicPropertyTest002 start"; + /** + * @tc.steps: step1. init animation and animator + */ + InitBasicPropertyTest(20, 1, TweenOperation::REVERSE, FillMode::NONE, true); + + /** + * @tc.steps: step2. trigger frames to make animation done + * @tc.expected: step2. check interpolateValue and end value is correct + */ + RunAndCheckBasicPropertyTestInterpolateValue(0.0f); +} + +/** + * @tc.name: AnimationBasicPropertyTest003 + * @tc.desc: Test combination for no delay, no repeat. init: 0, from 1 -> 9; reverse, fill-mode: forward, duration: 0 + * @tc.type: FUNC + * @tc.require: AR000DAIGS + * @tc.author: zhouzebin + */ +HWTEST_F(AnimationFrameworkTest, AnimationBasicPropertyTest003, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationBasicPropertyTest003 start"; + /** + * @tc.steps: step1. init animation and animator + */ + InitBasicPropertyTest(0, 1, TweenOperation::REVERSE, FillMode::FORWARDS, true); + + /** + * @tc.steps: step2. trigger frames to make animation done + * @tc.expected: step2. check interpolateValue and end value is correct + */ + RunAndCheckBasicPropertyTestInterpolateValue(1.0f); +} + +/** + * @tc.name: AnimationBasicPropertyTest004 + * @tc.desc: Test combination for no delay, no repeat. init: 0, from 1 -> 9; reverse, fill-mode: forward, duration: 20 + * @tc.type: FUNC + * @tc.require: AR000DAIGS + * @tc.author: zhouzebin + */ +HWTEST_F(AnimationFrameworkTest, AnimationBasicPropertyTest004, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationBasicPropertyTest004 start"; + /** + * @tc.steps: step1. init animation and animator + */ + InitBasicPropertyTest(20, 1, TweenOperation::REVERSE, FillMode::FORWARDS, true); + + /** + * @tc.steps: step2. trigger frames to make animation done + * @tc.expected: step2. check interpolateValue and end value is correct + */ + RunAndCheckBasicPropertyTestInterpolateValue(1.0f); +} + +/** + * @tc.name: AnimationBasicPropertyTest005 + * @tc.desc: Test combination for no delay, no repeat. init: 0, from 1 -> 9; normal, fill-mode: none, duration: 0 + * @tc.type: FUNC + * @tc.require: AR000DAIGS + * @tc.author: zhouzebin + */ +HWTEST_F(AnimationFrameworkTest, AnimationBasicPropertyTest005, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationBasicPropertyTest005 start"; + /** + * @tc.steps: step1. init animation and animator + */ + InitBasicPropertyTest(0, 1, TweenOperation::PLAY, FillMode::NONE, true); + + /** + * @tc.steps: step2. trigger frames to make animation done + * @tc.expected: step2. check interpolateValue and end value is correct + */ + RunAndCheckBasicPropertyTestInterpolateValue(0.0f); +} + +/** + * @tc.name: AnimationBasicPropertyTest006 + * @tc.desc: Test combination for no delay, no repeat. init: 0, from 1 -> 9; normal, fill-mode: none, duration: 20 + * @tc.type: FUNC + * @tc.require: AR000DAIGS + * @tc.author: zhouzebin + */ +HWTEST_F(AnimationFrameworkTest, AnimationBasicPropertyTest006, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationBasicPropertyTest006 start"; + /** + * @tc.steps: step1. init animation and animator + */ + InitBasicPropertyTest(20, 1, TweenOperation::PLAY, FillMode::NONE, true); + + /** + * @tc.steps: step2. trigger frames to make animation done + * @tc.expected: step2. check interpolateValue and end value is correct + */ + RunAndCheckBasicPropertyTestInterpolateValue(0.0f); +} + +/** + * @tc.name: AnimationBasicPropertyTest007 + * @tc.desc: Test combination for no delay, no repeat. init: 0, from 1 -> 9; normal, fill-mode: forward, duration: 0 + * @tc.type: FUNC + * @tc.require: AR000DAIGS + * @tc.author: zhouzebin + */ +HWTEST_F(AnimationFrameworkTest, AnimationBasicPropertyTest007, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationBasicPropertyTest007 start"; + /** + * @tc.steps: step1. init animation and animator + */ + InitBasicPropertyTest(0, 1, TweenOperation::PLAY, FillMode::FORWARDS, true); + + /** + * @tc.steps: step2. trigger frames to make animation done + * @tc.expected: step2. check interpolateValue and end value is correct + */ + RunAndCheckBasicPropertyTestInterpolateValue(9.0f); +} + +/** + * @tc.name: AnimationBasicPropertyTest008 + * @tc.desc: Test combination for no delay, no repeat. init: 0, from 1 -> 9; normal, fill-mode: forward, duration: 20 + * @tc.type: FUNC + * @tc.require: AR000DAIGS + * @tc.author: zhouzebin + */ +HWTEST_F(AnimationFrameworkTest, AnimationBasicPropertyTest008, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationBasicPropertyTest008 start"; + /** + * @tc.steps: step1. init animation and animator + */ + InitBasicPropertyTest(20, 1, TweenOperation::PLAY, FillMode::FORWARDS, true); + + /** + * @tc.steps: step2. trigger frames to make animation done + * @tc.expected: step2. check interpolateValue and end value is correct + */ + RunAndCheckBasicPropertyTestInterpolateValue(9.0f); +} + +/** + * @tc.name: AnimationBasicPropertyTest009 + * @tc.desc: Test combination for init: null, from 1 -> 9; reverse, fill-mode: none, duration: 0,repeat: 1, delay: 10 + * @tc.type: FUNC + * @tc.require: AR000DAIGS + * @tc.author: jiangdayuan + */ +HWTEST_F(AnimationFrameworkTest, AnimationBasicPropertyTest009, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationBasicPropertyTest009 start"; + /** + * @tc.steps: step1. init animation and animator + */ + InitBasicPropertyTest(0, 2, TweenOperation::REVERSE, FillMode::NONE, false); + + /** + * @tc.steps: step2. trigger frames to make animation done + * @tc.expected: step2. check interpolateValue and end value is correct + */ + RunAndCheckBasicPropertyTestInterpolateValue(9.0f); +} + +/** + * @tc.name: AnimationBasicPropertyTest010 + * @tc.desc: Test combination for init: null, from 1 -> 9; reverse, fill-mode: none, duration: 20,repeat: 1, delay: 10 + * @tc.type: FUNC + * @tc.require: AR000DAIGS + * @tc.author: jiangdayuan + */ +HWTEST_F(AnimationFrameworkTest, AnimationBasicPropertyTest010, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationBasicPropertyTest010 start"; + /** + * @tc.steps: step1. init animation and animator + */ + InitBasicPropertyTest(20, 2, TweenOperation::REVERSE, FillMode::NONE, false); + + /** + * @tc.steps: step2. trigger frames to make animation done + * @tc.expected: step2. check interpolateValue and end value is correct + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(9, flushEventMock_->animationIntValue_); + EXPECT_NEAR(9.0f, flushEventMock_->keyframeAnimationValue_, FLT_EPSILON); + EXPECT_FALSE(flushEventMock_->animationStopStatus_); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(5, flushEventMock_->animationIntValue_); + EXPECT_NEAR(5.0f, flushEventMock_->keyframeAnimationValue_, FLT_EPSILON); + EXPECT_FALSE(flushEventMock_->animationStopStatus_); + + /** + * @tc.steps: step3. repeat animation + * @tc.expected: step3. check repeat animation value is correct + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(9, flushEventMock_->animationIntValue_); + EXPECT_NEAR(9.0f, flushEventMock_->keyframeAnimationValue_, FLT_EPSILON); + EXPECT_FALSE(flushEventMock_->animationStopStatus_); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(5, flushEventMock_->animationIntValue_); + EXPECT_NEAR(5.0f, flushEventMock_->keyframeAnimationValue_, FLT_EPSILON); + EXPECT_FALSE(flushEventMock_->animationStopStatus_); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(9, flushEventMock_->animationIntValue_); + EXPECT_NEAR(9.0f, flushEventMock_->keyframeAnimationValue_, FLT_EPSILON); + EXPECT_TRUE(flushEventMock_->animationStopStatus_); +} + +/** + * @tc.name: AnimationBasicPropertyTest011 + * @tc.desc: Test combination for init: null, from 1 -> 9; reverse, fill-mode: forwards, duration: 0,repeat: 1, delay: + * 10 + * @tc.type: FUNC + * @tc.require: AR000DAIGS + * @tc.author: jiangdayuan + */ +HWTEST_F(AnimationFrameworkTest, AnimationBasicPropertyTest011, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationBasicPropertyTest011 start"; + /** + * @tc.steps: step1. init animation and animator + */ + InitBasicPropertyTest(0, 2, TweenOperation::REVERSE, FillMode::FORWARDS, false); + + /** + * @tc.steps: step2. trigger frames to make animation done + * @tc.expected: step2. check interpolateValue and end value is correct + */ + RunAndCheckBasicPropertyTestInterpolateValue(1.0f); +} + +/** + * @tc.name: AnimationBasicPropertyTest012 + * @tc.desc: Test combination for init: null, from 1 -> 9; reverse, fill-mode: forwards, duration: 20,repeat: 1, delay: + * 10 + * @tc.type: FUNC + * @tc.require: AR000DAIGS + * @tc.author: jiangdayuan + */ +HWTEST_F(AnimationFrameworkTest, AnimationBasicPropertyTest012, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationBasicPropertyTest012 start"; + /** + * @tc.steps: step1. init animation and animator + */ + InitBasicPropertyTest(20, 2, TweenOperation::REVERSE, FillMode::FORWARDS, false); + + /** + * @tc.steps: step2. trigger frames to make animation done + * @tc.expected: step2. check interpolateValue and end value is correct + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(9, flushEventMock_->animationIntValue_); + EXPECT_NEAR(9.0f, flushEventMock_->keyframeAnimationValue_, FLT_EPSILON); + EXPECT_FALSE(flushEventMock_->animationStopStatus_); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(5, flushEventMock_->animationIntValue_); + EXPECT_NEAR(5.0f, flushEventMock_->keyframeAnimationValue_, FLT_EPSILON); + EXPECT_FALSE(flushEventMock_->animationStopStatus_); + + /** + * @tc.steps: step3. repeat animation + * @tc.expected: step3. check repeat animation value is correct + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(9, flushEventMock_->animationIntValue_); + EXPECT_NEAR(9.0f, flushEventMock_->keyframeAnimationValue_, FLT_EPSILON); + EXPECT_FALSE(flushEventMock_->animationStopStatus_); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(5, flushEventMock_->animationIntValue_); + EXPECT_NEAR(5.0f, flushEventMock_->keyframeAnimationValue_, FLT_EPSILON); + EXPECT_FALSE(flushEventMock_->animationStopStatus_); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(1, flushEventMock_->animationIntValue_); + EXPECT_NEAR(1.0f, flushEventMock_->keyframeAnimationValue_, FLT_EPSILON); + EXPECT_TRUE(flushEventMock_->animationStopStatus_); +} + +/** + * @tc.name: AnimationBasicPropertyTest013 + * @tc.desc: Test combination for init: null, from 1 -> 9; normal, fill-mode: none, duration: 0,repeat: 1, delay: 10 + * @tc.type: FUNC + * @tc.require: AR000DAIGS + * @tc.author: jiangdayuan + */ +HWTEST_F(AnimationFrameworkTest, AnimationBasicPropertyTest013, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationBasicPropertyTest013 start"; + /** + * @tc.steps: step1. init animation and animator + */ + InitBasicPropertyTest(0, 2, TweenOperation::PLAY, FillMode::NONE, false); + + /** + * @tc.steps: step2. trigger frames to make animation done + * @tc.expected: step2. check interpolateValue and end value is correct + */ + RunAndCheckBasicPropertyTestInterpolateValue(1.0f); +} + +/** + * @tc.name: AnimationBasicPropertyTest014 + * @tc.desc: Test combination for init: null, from 1 -> 9; normal, fill-mode: none, duration: 20,repeat: 1, delay: 10 + * @tc.type: FUNC + * @tc.require: AR000DAIGS + * @tc.author: jiangdayuan + */ +HWTEST_F(AnimationFrameworkTest, AnimationBasicPropertyTest014, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationBasicPropertyTest014 start"; + /** + * @tc.steps: step1. init animation and animator + */ + InitBasicPropertyTest(20, 2, TweenOperation::PLAY, FillMode::NONE, false); + + /** + * @tc.steps: step2. trigger frames to make animation done + * @tc.expected: step2. check interpolateValue and end value is correct + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(1, flushEventMock_->animationIntValue_); + EXPECT_NEAR(1.0f, flushEventMock_->keyframeAnimationValue_, FLT_EPSILON); + EXPECT_FALSE(flushEventMock_->animationStopStatus_); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(5, flushEventMock_->animationIntValue_); + EXPECT_NEAR(5.0f, flushEventMock_->keyframeAnimationValue_, FLT_EPSILON); + EXPECT_FALSE(flushEventMock_->animationStopStatus_); + + /** + * @tc.steps: step3. repeat animation + * @tc.expected: step3. check repeat animation value is correct + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(1, flushEventMock_->animationIntValue_); + EXPECT_NEAR(1.0f, flushEventMock_->keyframeAnimationValue_, FLT_EPSILON); + EXPECT_FALSE(flushEventMock_->animationStopStatus_); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(5, flushEventMock_->animationIntValue_); + EXPECT_NEAR(5.0f, flushEventMock_->keyframeAnimationValue_, FLT_EPSILON); + EXPECT_FALSE(flushEventMock_->animationStopStatus_); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(1, flushEventMock_->animationIntValue_); + EXPECT_NEAR(1.0f, flushEventMock_->keyframeAnimationValue_, FLT_EPSILON); + EXPECT_TRUE(flushEventMock_->animationStopStatus_); +} + +/** + * @tc.name: AnimationBasicPropertyTest015 + * @tc.desc: Test combination for init: null, from 1 -> 9; normal, fill-mode: forwards, duration: 0,repeat: 1, delay: + * 10 + * @tc.type: FUNC + * @tc.require: AR000DAIGS + * @tc.author: jiangdayuan + */ +HWTEST_F(AnimationFrameworkTest, AnimationBasicPropertyTest015, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationBasicPropertyTest015 start"; + /** + * @tc.steps: step1. init animation and animator + */ + InitBasicPropertyTest(0, 2, TweenOperation::PLAY, FillMode::FORWARDS, false); + + /** + * @tc.steps: step2. trigger frames to make animation done + * @tc.expected: step2. check interpolateValue and end value is correct + */ + RunAndCheckBasicPropertyTestInterpolateValue(9.0f); +} + +/** + * @tc.name: AnimationBasicPropertyTest016 + * @tc.desc: Test combination for init: null, from 1 -> 9; normal, fill-mode: forwards, duration: 20,repeat: 1, delay: + * 10 + * @tc.type: FUNC + * @tc.require: AR000DAIGS + * @tc.author: jiangdayuan + */ +HWTEST_F(AnimationFrameworkTest, AnimationBasicPropertyTest016, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationBasicPropertyTest016 start"; + /** + * @tc.steps: step1. init animation and animator + */ + InitBasicPropertyTest(20, 2, TweenOperation::PLAY, FillMode::FORWARDS, false); + + /** + * @tc.steps: step2. trigger frames to make animation done + * @tc.expected: step2. check interpolateValue and end value is correct + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(1, flushEventMock_->animationIntValue_); + EXPECT_NEAR(1.0f, flushEventMock_->keyframeAnimationValue_, FLT_EPSILON); + EXPECT_FALSE(flushEventMock_->animationStopStatus_); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(5, flushEventMock_->animationIntValue_); + EXPECT_NEAR(5.0f, flushEventMock_->keyframeAnimationValue_, FLT_EPSILON); + EXPECT_FALSE(flushEventMock_->animationStopStatus_); + + /** + * @tc.steps: step3. repeat animation + * @tc.expected: step3. check repeat animation value is correct + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(1, flushEventMock_->animationIntValue_); + EXPECT_NEAR(1.0f, flushEventMock_->keyframeAnimationValue_, FLT_EPSILON); + EXPECT_FALSE(flushEventMock_->animationStopStatus_); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(5, flushEventMock_->animationIntValue_); + EXPECT_NEAR(5.0f, flushEventMock_->keyframeAnimationValue_, FLT_EPSILON); + EXPECT_FALSE(flushEventMock_->animationStopStatus_); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(9, flushEventMock_->animationIntValue_); + EXPECT_NEAR(9.0f, flushEventMock_->keyframeAnimationValue_, FLT_EPSILON); + EXPECT_TRUE(flushEventMock_->animationStopStatus_); +} + +/** + * @tc.name: AnimationEndTest001 + * @tc.desc: End controller for animation when in start delay + * @tc.type: FUNC + * @tc.require: AR000DAIGS + * @tc.author: zhouzebin + */ +HWTEST_F(AnimationFrameworkTest, AnimationEndTest001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationEndTest001 start"; + /** + * @tc.steps: step1. init animation and animator + */ + InitAnimationAndAnimator(FRAME_TIME_IN_MILLISECOND, 2, FRAME_TIME_IN_MILLISECOND); + + /** + * @tc.steps: step2. trigger one frame to make prepare animation work + * @tc.expected: step2. postFlush has been called. + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(1, flushEventMock_->postFlushCallTimes_); + + /** + * @tc.steps: step3. end when in start delay + */ + platformWindowRaw_->TriggerOneFrame(); + flushEventMock_->GetAnimator()->Finish(); + + /** + * @tc.expected: step4. check the end + */ + EXPECT_EQ(4, flushEventMock_->animationIntValue_); + EXPECT_TRUE(flushEventMock_->animationStopStatus_); +} + +/** + * @tc.name: AnimationEndTest002 + * @tc.desc: End controller for animation when in first loop + * @tc.type: FUNC + * @tc.require: AR000DAIGS + * @tc.author: zhouzebin + */ +HWTEST_F(AnimationFrameworkTest, AnimationEndTest002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationEndTest002 start"; + /** + * @tc.steps: step1. init animation and animator + */ + InitAnimationAndAnimator(FRAME_TIME_IN_MILLISECOND, 2, FRAME_TIME_IN_MILLISECOND); + + /** + * @tc.steps: step2. trigger one frame to make prepare animation work + * @tc.expected: step2. postFlush has been called. + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(1, flushEventMock_->postFlushCallTimes_); + + /** + * @tc.steps: step3. skip start delay. + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(1, flushEventMock_->animationIntValue_); + flushEventMock_->GetAnimator()->Finish(); + + /** + * @tc.expected: step4. check the end + */ + EXPECT_EQ(4, flushEventMock_->animationIntValue_); + EXPECT_TRUE(flushEventMock_->animationStopStatus_); +} + +/** + * @tc.name: AnimationEndTest003 + * @tc.desc: End controller for animation when in last loop + * @tc.type: FUNC + * @tc.require: AR000DAIGS + * @tc.author: zhouzebin + */ +HWTEST_F(AnimationFrameworkTest, AnimationEndTest003, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationEndTest003 start"; + /** + * @tc.steps: step1. init animation and animator + */ + InitAnimationAndAnimator(FRAME_TIME_IN_MILLISECOND, 1, FRAME_TIME_IN_MILLISECOND); + + /** + * @tc.steps: step2. trigger one frame to make prepare animation work + * @tc.expected: step2. postFlush has been called. + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(1, flushEventMock_->postFlushCallTimes_); + + /** + * @tc.steps: step3. skip start delay. + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(1, flushEventMock_->animationIntValue_); + flushEventMock_->GetAnimator()->Finish(); + + /** + * @tc.expected: step4. check the end + */ + EXPECT_EQ(4, flushEventMock_->animationIntValue_); + EXPECT_TRUE(flushEventMock_->animationStopStatus_); +} + +/** + * @tc.name: AnimationPlayTest001 + * @tc.desc: play controller for animation when is playing + * @tc.type: FUNC + * @tc.require: AR000DQ20L + * @tc.author: zhouzebin + */ +HWTEST_F(AnimationFrameworkTest, AnimationPlayTest001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationBasicPropertyTest001 start"; + /** + * @tc.steps: step1. init animation and animator + */ + InitBasicPropertyTest(20, 1, TweenOperation::PLAY, FillMode::NONE, true); + + /** + * @tc.steps: step2. trigger frames to make animation done + * @tc.expected: step2. check interpolateValue and end value is correct + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(5, flushEventMock_->animationIntValue_); + EXPECT_FALSE(flushEventMock_->animationStopStatus_); + auto controller = flushEventMock_->GetAnimator(); + controller->Play(); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(0, flushEventMock_->animationIntValue_); + EXPECT_TRUE(flushEventMock_->animationStopStatus_); +} + +/** + * @tc.name: AnimationPlayTest002 + * @tc.desc: play controller for animation when is reverse playing + * @tc.type: FUNC + * @tc.require: AR000DQ20L + * @tc.author: zhouzebin + */ +HWTEST_F(AnimationFrameworkTest, AnimationPlayTest002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationBasicPropertyTest001 start"; + /** + * @tc.steps: step1. init animation and animator + */ + InitBasicPropertyTest(20, 1, TweenOperation::REVERSE, FillMode::NONE, true); + + /** + * @tc.steps: step2. trigger frames to make animation done + * @tc.expected: step2. check interpolateValue and end value is correct + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(5, flushEventMock_->animationIntValue_); + EXPECT_FALSE(flushEventMock_->animationStopStatus_); + auto controller = flushEventMock_->GetAnimator(); + controller->Play(); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(0, flushEventMock_->animationIntValue_); + EXPECT_TRUE(flushEventMock_->animationStopStatus_); +} + +/** + * @tc.name: AnimationPlayTest003 + * @tc.desc: play controller for animation when is finished + * @tc.type: FUNC + * @tc.require: AR000DQ20L + * @tc.author: zhouzebin + */ +HWTEST_F(AnimationFrameworkTest, AnimationPlayTest003, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationBasicPropertyTest003 start"; + /** + * @tc.steps: step1. init animation and animator + */ + InitBasicPropertyTest(20, 1, TweenOperation::FINISH, FillMode::FORWARDS, true); + + /** + * @tc.steps: step2. trigger frames to make animation done + * @tc.expected: step2. check interpolateValue and end value is correct + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(9, flushEventMock_->animationIntValue_); + EXPECT_TRUE(flushEventMock_->animationStopStatus_); + flushEventMock_->animationStopStatus_ = false; + auto controller = flushEventMock_->GetAnimator(); + controller->Play(); + + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(9, flushEventMock_->animationIntValue_); + EXPECT_TRUE(flushEventMock_->animationStopStatus_); +} + +/** + * @tc.name: AnimationPlayTest004 + * @tc.desc: play controller for animation when is paused + * @tc.type: FUNC + * @tc.require: AR000DQ20L + * @tc.author: zhouzebin + */ +HWTEST_F(AnimationFrameworkTest, AnimationPlayTest004, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationBasicPropertyTest004 start"; + /** + * @tc.steps: step1. init animation and animator + */ + InitBasicPropertyTest(20, 1, TweenOperation::PAUSE, FillMode::FORWARDS, true); + + /** + * @tc.steps: step2. trigger frames to make animation done + * @tc.expected: step2. check interpolateValue and end value is correct + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(-1, flushEventMock_->animationIntValue_); + auto controller = flushEventMock_->GetAnimator(); + controller->Play(); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(5, flushEventMock_->animationIntValue_); + EXPECT_FALSE(flushEventMock_->animationStopStatus_); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(9, flushEventMock_->animationIntValue_); + EXPECT_TRUE(flushEventMock_->animationStopStatus_); +} + +/** + * @tc.name: AnimationPlayTest005 + * @tc.desc: play controller for animation when is canceled + * @tc.type: FUNC + * @tc.require: AR000DQ20L + * @tc.author: zhouzebin + */ +HWTEST_F(AnimationFrameworkTest, AnimationPlayTest005, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationBasicPropertyTest005 start"; + /** + * @tc.steps: step1. init animation and animator + */ + InitBasicPropertyTest(20, 1, TweenOperation::CANCEL, FillMode::FORWARDS, true); + + /** + * @tc.steps: step2. trigger frames to make animation done + * @tc.expected: step2. check interpolateValue and end value is correct + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(-1, flushEventMock_->animationIntValue_); + auto controller = flushEventMock_->GetAnimator(); + controller->Play(); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(5, flushEventMock_->animationIntValue_); + EXPECT_FALSE(flushEventMock_->animationStopStatus_); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(9, flushEventMock_->animationIntValue_); + EXPECT_TRUE(flushEventMock_->animationStopStatus_); +} + +/** + * @tc.name: AnimationBasicPropertyTest017 + * @tc.desc: Test combination for no delay, no repeat. init: 0, from 1 -> 9; reverse, fill-mode: forwards, + * AnimationDirection: alternate, duration: 0 + * @tc.type: FUNC + * @tc.require: AR000FL0VN + * @tc.author: wanyanglan + */ +HWTEST_F(AnimationFrameworkTest, AnimationBasicPropertyTest017, TestSize.Level1) +{ + /** + * @tc.steps: step1. init animation and simulation controller + */ + InitBasicAnimationDirectionPropertyTest( + 0, 1, AnimationDirection::ALTERNATE, TweenOperation::REVERSE, FillMode::FORWARDS); + + /** + * @tc.steps: step2. trigger frames to make animation done + * @tc.expected: step2. check interpolateValue and end value is correct + */ + RunAndCheckBasicPropertyTestInterpolateValue(1.0f); +} + +/** + * @tc.name: AnimationBasicPropertyTest018 + * @tc.desc: Test combination for no delay, no repeat. init: 0, from 1 -> 9; reverse, fill-mode: forward, + * AnimationDirection: alternate, duration: 20 + * @tc.type: FUNC + * @tc.require: AR000FL0VN + * @tc.author: wanyanglan + */ +HWTEST_F(AnimationFrameworkTest, AnimationBasicPropertyTest018, TestSize.Level1) +{ + /** + * @tc.steps: step1. init animation and simulation controller + */ + InitBasicAnimationDirectionPropertyTest( + 20, 1, AnimationDirection::ALTERNATE, TweenOperation::REVERSE, FillMode::FORWARDS); + + /** + * @tc.steps: step2. trigger frames to make animation done + * @tc.expected: step2. check interpolateValue and end value is correct + */ + RunAndCheckBasicPropertyTestInterpolateValue(1.0f); +} + +/** + * @tc.name: AnimationBasicPropertyTest019 + * @tc.desc: Test combination for no delay, no repeat. init: 0, from 1 -> 9; normal, fill-mode: forward, + * AnimationDirection: alternate, duration: 20 + * @tc.type: FUNC + * @tc.require: AR000FL0VN + * @tc.author: wanyanglan + */ +HWTEST_F(AnimationFrameworkTest, AnimationBasicPropertyTest019, TestSize.Level1) +{ + /** + * @tc.steps: step1. init animation and simulation controller + */ + InitBasicAnimationDirectionPropertyTest( + 20, 1, AnimationDirection::ALTERNATE, TweenOperation::PLAY, FillMode::FORWARDS); + + /** + * @tc.steps: step2. trigger frames to make animation done + * @tc.expected: step2. check interpolateValue and end value is correct + */ + RunAndCheckBasicPropertyTestInterpolateValue(9.0f); +} + +/** + * @tc.name: AnimationBasicPropertyTest020 + * @tc.desc: Test combination for no delay. init: 0, from 1 -> 9; reverse, fill-mode: forward, AnimationDirection: + * alternate, duration: 0, repeat: 2 + * @tc.type: FUNC + * @tc.require: AR000FL0VN + * @tc.author: wanyanglan + */ +HWTEST_F(AnimationFrameworkTest, AnimationBasicPropertyTest020, TestSize.Level1) +{ + /** + * @tc.steps: step1. init animation and simulation controller + */ + InitBasicAnimationDirectionPropertyTest( + 0, 2, AnimationDirection::ALTERNATE, TweenOperation::REVERSE, FillMode::FORWARDS); + + /** + * @tc.steps: step2. trigger frames to make animation done + * @tc.expected: step2. check interpolateValue and end value is correct + */ + RunAndCheckBasicPropertyTestInterpolateValue(1.0f); +} + +/** + * @tc.name: AnimationBasicPropertyTest021 + * @tc.desc: Test combination for no delay. init: 0, from 1 -> 9; reverse, fill-mode: forward, AnimationDirection: + * alternate, duration: 20, repeat: 2 + * @tc.type: FUNC + * @tc.require: AR000FL0VN + * @tc.author: wanyanglan + */ +HWTEST_F(AnimationFrameworkTest, AnimationBasicPropertyTest021, TestSize.Level1) +{ + /** + * @tc.steps: step1. init animation and simulation controller + */ + InitBasicAnimationDirectionPropertyTest( + 20, 2, AnimationDirection::ALTERNATE, TweenOperation::REVERSE, FillMode::FORWARDS); + + /** + * @tc.steps: step2. trigger frames to make animation done + * @tc.expected: step2. check interpolateValue and end value is correct + */ + RunAndCheckBasicAnimationDirectionPropertyTest(1.0f, 2); + GTEST_LOG_(INFO) << "AnimationFrameworkTest AnimationBasicPropertyTest021 start"; +} + +/** + * @tc.name: AnimationBasicPropertyTest022 + * @tc.desc: Test combination for no delay. init: 0, from 1 -> 9; normal, fill-mode: forward, AnimationDirection: + * alternate, duration: 20, repeat: 2 + * @tc.type: FUNC + * @tc.require: AR000FL0VN + * @tc.author: wanyanglan + */ +HWTEST_F(AnimationFrameworkTest, AnimationBasicPropertyTest022, TestSize.Level1) +{ + /** + * @tc.steps: step1. init animation and simulation controller + */ + InitBasicAnimationDirectionPropertyTest( + 20, 2, AnimationDirection::ALTERNATE, TweenOperation::PLAY, FillMode::FORWARDS); + + /** + * @tc.steps: step2. trigger frames to make animation done + * @tc.expected: step2. check interpolateValue and end value is correct + */ + RunAndCheckBasicAnimationDirectionPropertyTest(1.0f, 2); +} + +/** + * @tc.name: AnimationBasicPropertyTest023 + * @tc.desc: Test combination for no delay. init: 0, from 1 -> 9; normal, fill-mode: forward, AnimationDirection: + * normal, duration: 0, repeat: 2 + * @tc.type: FUNC + * @tc.require: AR000FL0VN + * @tc.author: wanyanglan + */ +HWTEST_F(AnimationFrameworkTest, AnimationBasicPropertyTest023, TestSize.Level1) +{ + /** + * @tc.steps: step1. init animation and simulation controller + */ + InitBasicAnimationDirectionPropertyTest(0, 2, AnimationDirection::NORMAL, TweenOperation::PLAY, FillMode::FORWARDS); + + /** + * @tc.steps: step2. trigger frames to make animation done + * @tc.expected: step2. check interpolateValue and end value is correct + */ + RunAndCheckBasicPropertyTestInterpolateValue(9.0f); +} + +/** + * @tc.name: AnimationBasicPropertyTest024 + * @tc.desc: Test combination for no delay. init: 0, from 1 -> 9; reverse, fill-mode: forward, AnimationDirection: + * alternate, duration: 0, repeat: 3 + * @tc.type: FUNC + * @tc.require: AR000FL0VN + * @tc.author: wanyanglan + */ +HWTEST_F(AnimationFrameworkTest, AnimationBasicPropertyTest024, TestSize.Level1) +{ + /** + * @tc.steps: step1. init animation and simulation controller + */ + InitBasicAnimationDirectionPropertyTest( + 0, 3, AnimationDirection::ALTERNATE, TweenOperation::REVERSE, FillMode::FORWARDS); + + /** + * @tc.steps: step2. trigger frames to make animation done + * @tc.expected: step2. check interpolateValue and end value is correct + */ + RunAndCheckBasicPropertyTestInterpolateValue(1.0f); +} + +/** + * @tc.name: AnimationBasicPropertyTest025 + * @tc.desc: Test combination for no delay. init: 0, from 1 -> 9; reverse, fill-mode: forward, AnimationDirection: + * alternate, duration: 20, repeat: 3 + * @tc.type: FUNC + * @tc.require: AR000FL0VN + * @tc.author: wanyanglan + */ +HWTEST_F(AnimationFrameworkTest, AnimationBasicPropertyTest025, TestSize.Level1) +{ + /** + * @tc.steps: step1. init animation and simulation controller + */ + InitBasicAnimationDirectionPropertyTest( + 20, 3, AnimationDirection::ALTERNATE, TweenOperation::REVERSE, FillMode::FORWARDS); + + /** + * @tc.steps: step2. trigger frames to make animation done + * @tc.expected: step2. check interpolateValue and end value is correct + */ + RunAndCheckBasicAnimationDirectionPropertyTest(1.0f, 3); +} + +/** + * @tc.name: AnimationBasicPropertyTest026 + * @tc.desc: Test combination for no delay. init: 0, from 1 -> 9; normal, fill-mode: forward, AnimationDirection: + * alternate, duration: 20, repeat: 3 + * @tc.type: FUNC + * @tc.require: AR000FL0VN + * @tc.author: wanyanglan + */ +HWTEST_F(AnimationFrameworkTest, AnimationBasicPropertyTest026, TestSize.Level1) +{ + /** + * @tc.steps: step1. init animation and simulation controller + */ + InitBasicAnimationDirectionPropertyTest( + 20, 3, AnimationDirection::ALTERNATE, TweenOperation::PLAY, FillMode::FORWARDS); + + RunAndCheckBasicAnimationDirectionPropertyTest(9.0f, 3); +} + +/** + * @tc.name: AnimationBasicPropertyTest027 + * @tc.desc: Test combination for no delay. init: 0, from 1 -> 9; normal, fill-mode: forward, AnimationDirection: + * alternate, duration: 0, repeat: 3 + * @tc.type: FUNC + * @tc.require: AR000FL0VN + * @tc.author: wanyanglan + */ +HWTEST_F(AnimationFrameworkTest, AnimationBasicPropertyTest027, TestSize.Level1) +{ + /** + * @tc.steps: step1. init animation and simulation controller + */ + InitBasicAnimationDirectionPropertyTest( + 0, 3, AnimationDirection::ALTERNATE, TweenOperation::PLAY, FillMode::FORWARDS); + + /** + * @tc.steps: step2. trigger frames to make animation done + * @tc.expected: step2. check interpolateValue and end value is correct + */ + RunAndCheckBasicPropertyTestInterpolateValue(9.0f); +} + +/** + * @tc.name: AnimationBasicPropertyTest028 + * @tc.desc: Test combination for no delay. init: 0, from 1 -> 9; reverse, fill-mode: forward, AnimationDirection: + * alternate, duration: 20, repeat: infinite + * @tc.type: FUNC + * @tc.require: AR000FL0VN + * @tc.author: wanyanglan + */ +HWTEST_F(AnimationFrameworkTest, AnimationBasicPropertyTest028, TestSize.Level1) +{ + /** + * @tc.steps: step1. init animation and simulation controller + */ + InitBasicAnimationDirectionPropertyTest( + 20, -1, AnimationDirection::ALTERNATE, TweenOperation::REVERSE, FillMode::FORWARDS); + + /** + * @tc.steps: step2. trigger frames to make animation done + * @tc.expected: step2. check interpolateValue and end value is correct + */ + RunAndCheckBasicAnimationDirectionPropertyTestForward(); + + /** + * @tc.steps: step3. repeat animation + * @tc.expected: step3. check repeat animation value is correct + */ + RunAndCheckBasicAnimationDirectionPropertyTestReverse(); + + /** + * @tc.steps: step4. repeat animation + * @tc.expected: step4. check repeat animation value is correct + */ + RunAndCheckBasicAnimationDirectionPropertyTestForward(); + + /** + * @tc.steps: step5. repeat animation + * @tc.expected: step5. check repeat animation value is correct + */ + RunAndCheckBasicAnimationDirectionPropertyTestReverse(); +} + +/** + * @tc.name: AnimationBasicPropertyTest029 + * @tc.desc: Test combination for no delay. init: 0, from 1 -> 9; normal, fill-mode: forward, AnimationDirection: + * alternate, duration: 20, repeat: infinite + * @tc.type: FUNC + * @tc.require: AR000FL0VN + * @tc.author: wanyanglan + */ +HWTEST_F(AnimationFrameworkTest, AnimationBasicPropertyTest029, TestSize.Level1) +{ + /** + * @tc.steps: step1. init animation and simulation controller + */ + InitBasicAnimationDirectionPropertyTest( + 20, -1, AnimationDirection::ALTERNATE, TweenOperation::PLAY, FillMode::FORWARDS); + + /** + * @tc.steps: step2. trigger frames to make animation done + * @tc.expected: step2. check interpolateValue and end value is correct + */ + RunAndCheckBasicAnimationDirectionPropertyTestForward(); + + /** + * @tc.steps: step3. trigger frames to make animation done + * @tc.expected: step3. check interpolateValue and end value is correct + */ + RunAndCheckBasicAnimationDirectionPropertyTestReverse(); + + /** + * @tc.steps: step4. repeat animation + * @tc.expected: step4. check repeat animation value is correct + */ + RunAndCheckBasicAnimationDirectionPropertyTestForward(); + + /** + * @tc.steps: step5. repeat animation + * @tc.expected: step5. check repeat animation value is correct + */ + RunAndCheckBasicAnimationDirectionPropertyTestReverse(); +} + +/** + * @tc.name: AnimationBasicPropertyTest030 + * @tc.desc: Test combination for no delay. init: 0, from 1 -> 9; normal, fill-mode: forward, AnimationDirection: + * alternate, duration: 40, repeat: 3 + * @tc.type: FUNC + * @tc.require: AR000FL0VN + * @tc.author: wanyanglan + */ +HWTEST_F(AnimationFrameworkTest, AnimationBasicPropertyTest030, TestSize.Level1) +{ + /** + * @tc.steps: step1. init animation and simulation controller + */ + InitBasicAnimationDirectionPropertyTest( + 40, -1, AnimationDirection::ALTERNATE, TweenOperation::PLAY, FillMode::FORWARDS); + + /** + * @tc.steps: step2. trigger frames to make animation done + * @tc.expected: step2. check interpolateValue and end value is correct + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(3, flushEventMock_->animationIntValue_); + EXPECT_NEAR(3.0f, flushEventMock_->keyframeAnimationValue_, FLT_EPSILON); + EXPECT_FALSE(flushEventMock_->animationStopStatus_); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(5, flushEventMock_->animationIntValue_); + EXPECT_NEAR(5.0f, flushEventMock_->keyframeAnimationValue_, FLT_EPSILON); + EXPECT_FALSE(flushEventMock_->animationStopStatus_); + flushEventMock_->GetAnimator()->Reverse(); + + /** + * @tc.steps: step3. repeat animation + * @tc.expected: step3. check repeat animation value is correct + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(3, flushEventMock_->animationIntValue_); + EXPECT_NEAR(3.0f, flushEventMock_->keyframeAnimationValue_, FLT_EPSILON); + EXPECT_FALSE(flushEventMock_->animationStopStatus_); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(1, flushEventMock_->animationIntValue_); + EXPECT_NEAR(1.0f, flushEventMock_->keyframeAnimationValue_, FLT_EPSILON); + EXPECT_FALSE(flushEventMock_->animationStopStatus_); + + /** + * @tc.steps: step3. repeat animation + * @tc.expected: step3. check repeat animation value is correct + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(3, flushEventMock_->animationIntValue_); + EXPECT_NEAR(3.0f, flushEventMock_->keyframeAnimationValue_, FLT_EPSILON); + EXPECT_FALSE(flushEventMock_->animationStopStatus_); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(5, flushEventMock_->animationIntValue_); + EXPECT_NEAR(5.0f, flushEventMock_->keyframeAnimationValue_, FLT_EPSILON); + EXPECT_FALSE(flushEventMock_->animationStopStatus_); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(7, flushEventMock_->animationIntValue_); + EXPECT_NEAR(7.0f, flushEventMock_->keyframeAnimationValue_, FLT_EPSILON); + EXPECT_FALSE(flushEventMock_->animationStopStatus_); + flushEventMock_->GetAnimator()->Play(); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(9, flushEventMock_->animationIntValue_); + EXPECT_NEAR(9.0f, flushEventMock_->keyframeAnimationValue_, FLT_EPSILON); + EXPECT_FALSE(flushEventMock_->animationStopStatus_); + flushEventMock_->GetAnimator()->Play(); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(7, flushEventMock_->animationIntValue_); + EXPECT_NEAR(7.0f, flushEventMock_->keyframeAnimationValue_, FLT_EPSILON); + EXPECT_FALSE(flushEventMock_->animationStopStatus_); +} + +/** + * @tc.name: AnimationBasicPropertyTest031 + * @tc.desc: Test combination for no delay, no repeat. init: 0, from 1 -> 9; normal, fill-mode: none, + * AnimationDirection: normal, duration: 0 + * @tc.type: FUNC + * @tc.require: AR000FL0VN + * @tc.author: wanyanglan + */ +HWTEST_F(AnimationFrameworkTest, AnimationBasicPropertyTest031, TestSize.Level1) +{ + /** + * @tc.steps: step1. init animation and simulation controller + */ + InitBasicAnimationDirectionPropertyTest(0, 1, AnimationDirection::NORMAL, TweenOperation::PLAY, FillMode::NONE); + + /** + * @tc.steps: step2. trigger frames to make animation done + * @tc.expected: step2. check interpolateValue and end value is correct + */ + RunAndCheckBasicPropertyTestInterpolateValue(0.0f); +} + +/** + * @tc.name: AnimationBasicPropertyTest032 + * @tc.desc: Test combination for no delay, no repeat. init: 0, from 1 -> 9; normal, fill-mode: forwards, + * AnimationDirection: alternate-reverse, duration: 0 + * @tc.type: FUNC + * @tc.require: AR000FL0VN + * @tc.author: jiangdayuan + */ +HWTEST_F(AnimationFrameworkTest, AnimationBasicPropertyTest032, TestSize.Level1) +{ + /** + * @tc.steps: step1. init animation and simulation controller + */ + InitBasicAnimationDirectionPropertyTest( + 0, 1, AnimationDirection::ALTERNATE_REVERSE, TweenOperation::PLAY, FillMode::FORWARDS); + + /** + * @tc.steps: step2. trigger frames to make animation done + * @tc.expected: step2. check interpolateValue and end value is correct + */ + RunAndCheckBasicPropertyTestInterpolateValue(1.0f); +} + +/** + * @tc.name: AnimationBasicPropertyTest033 + * @tc.desc: Test combination for no delay, no repeat. init: 0, from 1 -> 9; normal, fill-mode: forwards, + * AnimationDirection: alternate-reverse, duration: 20 + * @tc.type: FUNC + * @tc.require: AR000FL0VN + * @tc.author: jiangdayuan + */ +HWTEST_F(AnimationFrameworkTest, AnimationBasicPropertyTest033, TestSize.Level1) +{ + /** + * @tc.steps: step1. init animation and simulation controller + */ + InitBasicAnimationDirectionPropertyTest( + 20, 1, AnimationDirection::ALTERNATE_REVERSE, TweenOperation::PLAY, FillMode::FORWARDS); + + /** + * @tc.steps: step2. trigger frames to make animation done + * @tc.expected: step2. check interpolateValue and end value is correct + */ + RunAndCheckBasicPropertyTestInterpolateValue(1.0f); +} + +/** + * @tc.name: AnimationBasicPropertyTest034 + * @tc.desc: Test combination for no delay, no repeat. init: 0, from 1 -> 9; normal, fill-mode: none, + * AnimationDirection: alternate-reverse, duration: 20 + * @tc.type: FUNC + * @tc.require: AR000FL0VN + * @tc.author: jiangdayuan + */ +HWTEST_F(AnimationFrameworkTest, AnimationBasicPropertyTest034, TestSize.Level1) +{ + /** + * @tc.steps: step1. init animation and simulation controller + */ + InitBasicAnimationDirectionPropertyTest( + 20, 1, AnimationDirection::ALTERNATE_REVERSE, TweenOperation::PLAY, FillMode::NONE); + + /** + * @tc.steps: step2. trigger frames to make animation done + * @tc.expected: step2. check interpolateValue and end value is correct + */ + RunAndCheckBasicPropertyTestInterpolateValue(0.0f); +} + +/** + * @tc.name: AnimationBasicPropertyTest035 + * @tc.desc: Test combination for no delay. init: 0, from 1 -> 9; reverse, fill-mode: forwards, AnimationDirection: + * alternate-reverse, duration: 0, repeat: 2 + * @tc.type: FUNC + * @tc.require: AR000FL0VN + * @tc.author: jiangdayuan + */ +HWTEST_F(AnimationFrameworkTest, AnimationBasicPropertyTest035, TestSize.Level1) +{ + /** + * @tc.steps: step1. init animation and simulation controller + */ + InitBasicAnimationDirectionPropertyTest( + 0, 2, AnimationDirection::ALTERNATE_REVERSE, TweenOperation::PLAY, FillMode::FORWARDS); + + /** + * @tc.steps: step2. trigger frames to make animation done + * @tc.expected: step2. check interpolateValue and end value is correct + */ + RunAndCheckBasicPropertyTestInterpolateValue(9.0f); +} + +/** + * @tc.name: AnimationBasicPropertyTest036 + * @tc.desc: Test combination for no delay. init: 0, from 1 -> 9; reverse, fill-mode: forwards, AnimationDirection: + * alternate-reverse, duration: 20, repeat: 2 + * @tc.type: FUNC + * @tc.require: AR000FL0VN + * @tc.author: jiangdayuan + */ +HWTEST_F(AnimationFrameworkTest, AnimationBasicPropertyTest036, TestSize.Level1) +{ + /** + * @tc.steps: step1. init animation and simulation controller + */ + InitBasicAnimationDirectionPropertyTest( + 20, 2, AnimationDirection::ALTERNATE_REVERSE, TweenOperation::PLAY, FillMode::FORWARDS); + + /** + * @tc.steps: step2. trigger frames to make animation done + * @tc.expected: step2. check interpolateValue and end value is correct + */ + RunAndCheckBasicAnimationDirectionPropertyTestReverse(); + + RunAndCheckBasicPropertyTestInterpolateValueForward(9.0f); +} + +/** + * @tc.name: AnimationBasicPropertyTest037 + * @tc.desc: Test combination for no delay. init: 0, from 1 -> 9; reverse, fill-mode: forwards, AnimationDirection: + * alternate-reverse, duration: 20, repeat: 3 + * @tc.type: FUNC + * @tc.require: AR000FL0VN + * @tc.author: jiangdayuan + */ +HWTEST_F(AnimationFrameworkTest, AnimationBasicPropertyTest037, TestSize.Level1) +{ + /** + * @tc.steps: step1. init animation and simulation controller + */ + InitBasicAnimationDirectionPropertyTest( + 20, 3, AnimationDirection::ALTERNATE_REVERSE, TweenOperation::PLAY, FillMode::FORWARDS); + + /** + * @tc.steps: step2. trigger frames to make animation done + * @tc.expected: step2. check interpolateValue and end value is correct + */ + RunAndCheckBasicAnimationDirectionPropertyTestReverse(); + + RunAndCheckBasicAnimationDirectionPropertyTestForward(); + + RunAndCheckBasicPropertyTestInterpolateValueReverse(1.0f); +} + +/** + * @tc.name: AnimationBasicPropertyTest038 + * @tc.desc: Test combination for no delay. init: 0, from 1 -> 9; reverse, fill-mode: none, AnimationDirection: + * alternate-reverse, duration: 20, repeat: 3 + * @tc.type: FUNC + * @tc.require: AR000FL0VN + * @tc.author: jiangdayuan + */ +HWTEST_F(AnimationFrameworkTest, AnimationBasicPropertyTest038, TestSize.Level1) +{ + /** + * @tc.steps: step1. init animation and simulation controller + */ + InitBasicAnimationDirectionPropertyTest( + 20, 3, AnimationDirection::ALTERNATE_REVERSE, TweenOperation::PLAY, FillMode::NONE); + + /** + * @tc.steps: step2. trigger frames to make animation done + * @tc.expected: step2. check interpolateValue and end value is correct + */ + RunAndCheckBasicAnimationDirectionPropertyTestReverse(); + + RunAndCheckBasicAnimationDirectionPropertyTestForward(); + + RunAndCheckBasicPropertyTestInterpolateValueReverse(0.0f); +} + +/** + * @tc.name: AnimationBasicPropertyTest039 + * @tc.desc: Test combination for no delay. init: 0, from 1 -> 9; reverse, fill-mode: forwards, AnimationDirection: + * reverse, duration: 0, repeat: 2 + * @tc.type: FUNC + * @tc.require: AR000FL0VN + * @tc.author: jiangdayuan + */ +HWTEST_F(AnimationFrameworkTest, AnimationBasicPropertyTest039, TestSize.Level1) +{ + /** + * @tc.steps: step1. init animation and simulation controller + */ + InitBasicAnimationDirectionPropertyTest( + 0, 2, AnimationDirection::REVERSE, TweenOperation::PLAY, FillMode::FORWARDS); + + /** + * @tc.steps: step2. trigger frames to make animation done + * @tc.expected: step2. check interpolateValue and end value is correct + */ + RunAndCheckBasicPropertyTestInterpolateValue(1.0f); +} + +/** + * @tc.name: AnimationBasicPropertyTest040 + * @tc.desc: Test combination for no delay. init: 0, from 1 -> 9; normal, fill-mode: forwards, AnimationDirection: + * reverse, duration: 20, repeat: 2 + * @tc.type: FUNC + * @tc.require: AR000FL0VN + * @tc.author: jiangdayuan + */ +HWTEST_F(AnimationFrameworkTest, AnimationBasicPropertyTest040, TestSize.Level1) +{ + /** + * @tc.steps: step1. init animation and simulation controller + */ + InitBasicAnimationDirectionPropertyTest( + 20, 2, AnimationDirection::REVERSE, TweenOperation::PLAY, FillMode::FORWARDS); + + /** + * @tc.steps: step2. trigger frames to make animation done + * @tc.expected: step2. check interpolateValue and end value is correct + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(5, flushEventMock_->animationIntValue_); + EXPECT_NEAR(5.0f, flushEventMock_->keyframeAnimationValue_, FLT_EPSILON); + EXPECT_FALSE(flushEventMock_->animationStopStatus_); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(9, flushEventMock_->animationIntValue_); + EXPECT_NEAR(9.0f, flushEventMock_->keyframeAnimationValue_, FLT_EPSILON); + EXPECT_FALSE(flushEventMock_->animationStopStatus_); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(5, flushEventMock_->animationIntValue_); + EXPECT_NEAR(5.0f, flushEventMock_->keyframeAnimationValue_, FLT_EPSILON); + EXPECT_FALSE(flushEventMock_->animationStopStatus_); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(1, flushEventMock_->animationIntValue_); + EXPECT_NEAR(1.0f, flushEventMock_->keyframeAnimationValue_, FLT_EPSILON); + EXPECT_TRUE(flushEventMock_->animationStopStatus_); +} + +/** + * @tc.name: AnimationBasicPropertyTest041 + * @tc.desc: Test combination for no delay. init: 0, from 1 -> 9; normal, fill-mode: none, AnimationDirection: + * reverse, duration: 20, repeat: 2 + * @tc.type: FUNC + * @tc.require: AR000FL0VN + * @tc.author: jiangdayuan + */ +HWTEST_F(AnimationFrameworkTest, AnimationBasicPropertyTest041, TestSize.Level1) +{ + /** + * @tc.steps: step1. init animation and simulation controller + */ + InitBasicAnimationDirectionPropertyTest(20, 2, AnimationDirection::REVERSE, TweenOperation::PLAY, FillMode::NONE); + + /** + * @tc.steps: step2. trigger frames to make animation done + * @tc.expected: step2. check interpolateValue and end value is correct + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(5, flushEventMock_->animationIntValue_); + EXPECT_NEAR(5.0f, flushEventMock_->keyframeAnimationValue_, FLT_EPSILON); + EXPECT_FALSE(flushEventMock_->animationStopStatus_); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(9, flushEventMock_->animationIntValue_); + EXPECT_NEAR(9.0f, flushEventMock_->keyframeAnimationValue_, FLT_EPSILON); + EXPECT_FALSE(flushEventMock_->animationStopStatus_); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(5, flushEventMock_->animationIntValue_); + EXPECT_NEAR(5.0f, flushEventMock_->keyframeAnimationValue_, FLT_EPSILON); + EXPECT_FALSE(flushEventMock_->animationStopStatus_); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(0, flushEventMock_->animationIntValue_); + EXPECT_NEAR(0.0f, flushEventMock_->keyframeAnimationValue_, FLT_EPSILON); + EXPECT_TRUE(flushEventMock_->animationStopStatus_); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/animation/test/unittest/mock/animation_mock.cpp b/frameworks/core/animation/test/unittest/mock/animation_mock.cpp new file mode 100644 index 00000000..98cdf570 --- /dev/null +++ b/frameworks/core/animation/test/unittest/mock/animation_mock.cpp @@ -0,0 +1,246 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/animation/test/unittest/mock/animation_mock.h" + +#include "base/log/ace_trace.h" +#include "base/log/event_report.h" +#include "base/log/log.h" +#include "base/utils/system_properties.h" +#include "core/components/dialog_modal/dialog_modal_component.h" +#include "core/components/list/render_list_item.h" +#include "core/components/semi_modal/semi_modal_component.h" + +namespace OHOS::Ace { + +void AnimationMock::OnPostFlush() +{ + LOGD("AnimationMock PostFlush start"); + postFlushCallTimes_++; + CreateInterpolators(); + AddListeners(); + animator_->SetDuration(animationDuration_); + setRepeatSucc_ = animator_->SetIteration(iteration_); + animator_->SetStartDelay(startDelay_); + ExecuteOperation(); + LOGD("AnimationMock PostFlush end"); +} + +void AnimationMock::ExecuteOperation() +{ + switch (operation_) { + case TweenOperation::PLAY: + animator_->Play(); + break; + case TweenOperation::REVERSE: + animator_->Reverse(); + break; + case TweenOperation::FINISH: + animator_->Finish(); + break; + case TweenOperation::PAUSE: + animator_->Pause(); + break; + case TweenOperation::CANCEL: + animator_->Cancel(); + break; + case TweenOperation::NONE: + default: + break; + } +} + +void AnimationMock::AddListeners() +{ + auto weak = AceType::WeakClaim(this); + animator_->AddStartListener([weak]() { + auto simulator = weak.Upgrade(); + if (simulator) { + LOGD("AnimationMock vsync triggered. start listener called."); + simulator->animationStartStatus_ = true; + } + }); + animator_->AddStopListener([weak]() { + auto simulator = weak.Upgrade(); + if (simulator) { + LOGD("AnimationMock vsync triggered. stop listener called."); + simulator->animationStopStatus_ = true; + simulator->animationIntStopValue_ = simulator->animationIntValue_; + } + }); + animator_->AddRepeatListener([weak]() { + auto simulator = weak.Upgrade(); + if (simulator) { + LOGD("AnimationMock vsync triggered. repeat listener called."); + ++(simulator->repeatDoneTimes_); + } + }); + animator_->AddIdleListener([weak]() { + auto simulator = weak.Upgrade(); + if (simulator) { + LOGD("AnimationMock vsync triggered. idle listener called."); + simulator->animationIdleStatus_ = true; + } + }); + animator_->AddPauseListener([weak]() { + auto simulator = weak.Upgrade(); + if (simulator) { + LOGD("AnimationMock vsync triggered. resume listener called."); + simulator->animationPauseStatus_ = true; + } + }); +} + +void AnimationMock::CreatePictureInterpolators() +{ + auto weak = AceType::WeakClaim(this); + if (pictureInt_) { + pictureInt_->AddListener([weak](const int& value) { + auto simulator = weak.Upgrade(); + if (simulator) { + LOGD("AnimationMock vsync triggered. pictureIntValue_ int value: %{public}d", value); + simulator->pictureIntValue_ = value; + } + }); + animator_->AddInterpolator(pictureInt_); + } + if (pictureString_) { + pictureString_->AddListener([weak](const std::string& value) { + auto simulator = weak.Upgrade(); + if (simulator) { + LOGD("AnimationMock vsync triggered. pictureStringValue_ int value: %{public}s", value.data()); + simulator->pictureStringValue_ = value; + } + }); + animator_->AddInterpolator(pictureString_); + } +} + +void AnimationMock::CreateInterpolators() +{ + auto weak = AceType::WeakClaim(this); + if (animationInt_) { + animationInt_->AddListener([weak](const int& value) { + auto simulator = weak.Upgrade(); + if (simulator) { + LOGD("AnimationMock vsync triggered. int value: %{public}d", value); + simulator->animationIntValue_ = value; + } + }); + LOGD("AnimationMock PostFlush. animationInt_ has been added."); + animator_->AddInterpolator(animationInt_); + } + if (animationFloat_) { + animationFloat_->AddListener([weak](const float& value) { + auto simulator = weak.Upgrade(); + if (simulator) { + LOGD("AnimationMock vsync triggered. float value: %{public}f", value); + simulator->animationFloatValue_ = value; + } + }); + LOGD("AnimationMock PostFlush. animationFloat_ has been add."); + animator_->AddInterpolator(animationFloat_); + } + if (keyframeAnimation_) { + keyframeAnimation_->AddListener([weak](const float& value) { + auto simulator = weak.Upgrade(); + if (simulator) { + LOGD("AnimationMock vsync triggered. keyframeAnimation_ float value: %{public}f", value); + simulator->keyframeAnimationValue_ = value; + } + }); + LOGD("AnimationMock PostFlush. keyframeAnimation_ has been added."); + animator_->AddInterpolator(keyframeAnimation_); + } + if (animationColor_) { + animationColor_->AddListener([weak](const Color& value) { + auto simulator = weak.Upgrade(); + if (simulator) { + simulator->animationColorValue_ = value; + } + }); + animator_->AddInterpolator(animationColor_); + } + CreatePictureInterpolators(); +} + +const RefPtr& AnimationMock::GetAnimator() const +{ + return animator_; +} + +double AnimationMock::GetPositionResult() const +{ + return positionResult_; +} + +void AnimationMock::SetPositionResult(double positionResult) +{ + positionResult_ = positionResult; +} + +RefPtr SemiModalComponent::Create( + RefPtr child, bool isFullScreen, int32_t modalHeight, uint32_t color) +{ + return nullptr; +} + +RefPtr DialogModalComponent::Create(RefPtr child) +{ + return nullptr; +} + +AceScopedTrace::AceScopedTrace(const char* format, ...) +{ + traceEnabled_ = false; +} + +AceScopedTrace::~AceScopedTrace() +{ +} + +void EventReport::SendAppStartException(AppStartExcepType type) +{ +} + +void EventReport::SendRenderException(RenderExcepType type) +{ +} + +float SystemProperties::GetFontWeightScale() +{ + // Default value of font weight scale is 1.0. + return 1.0; +} + +DeviceType SystemProperties::GetDeviceType() +{ + return DeviceType::PHONE; +} + +RRect RenderListItem::GetRRect() const +{ + return RRect(); +} + +void RenderListItem::RunCardTransitionAnimation(double shiftHeight) +{ +} + +void RenderListItem::StopCardTransitionAnimation() +{ +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/animation/test/unittest/mock/animation_mock.h b/frameworks/core/animation/test/unittest/mock/animation_mock.h new file mode 100644 index 00000000..f599ab26 --- /dev/null +++ b/frameworks/core/animation/test/unittest/mock/animation_mock.h @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_TEST_UNITTEST_MOCK_ANIMATION_MOCK_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_TEST_UNITTEST_MOCK_ANIMATION_MOCK_H + +#include "core/animation/animator.h" +#include "core/animation/curve_animation.h" +#include "core/animation/flush_event.h" +#include "core/animation/keyframe_animation.h" +#include "core/animation/picture_animation.h" +#include "core/components/common/properties/color.h" +#include "core/components/common/properties/tween_option.h" + +namespace OHOS::Ace { + +class AnimationMock : public FlushEvent { + DECLARE_ACE_TYPE(AnimationMock, FlushEvent); + +public: + AnimationMock() = default; + ~AnimationMock() override = default; + + void OnPostFlush() override; + + void InitController(const WeakPtr& context) + { + animator_ = AceType::MakeRefPtr(context); + } + + double GetPositionResult() const; + const RefPtr& GetAnimator() const; + + void SetPositionResult(double positionResult); + bool animationStartStatus_ { false }; + bool animationStopStatus_ { false }; + bool animationIdleStatus_ { false }; + bool animationPauseStatus_ { false }; + TweenOperation operation_ { TweenOperation::PLAY }; + + bool setRepeatSucc_ { false }; + int32_t postFlushCallTimes_ { 0 }; + int32_t iteration_ { 1 }; + int32_t repeatDoneTimes_ { 0 }; + int32_t animationIntValue_ { 0 }; + int32_t animationIntStopValue_ { 0 }; + + int32_t pictureIntValue_ { 0 }; + int32_t animationDuration_ { 0 }; + int32_t startDelay_ { 0 }; + float animationFloatValue_ { 0.0f }; + Color animationColorValue_ { Color::WHITE }; + + float keyframeAnimationValue_ { 0.0f }; + std::string pictureStringValue_; + RefPtr> animationInt_; + RefPtr> animationColor_; + RefPtr> animationFloat_; + RefPtr> pictureInt_; + RefPtr> pictureString_; + RefPtr> keyframeAnimation_; + +private: + void CreatePictureInterpolators(); + void CreateInterpolators(); + void AddListeners(); + void ExecuteOperation(); + RefPtr animator_; + double positionResult_ { 0.0 }; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_TEST_UNITTEST_MOCK_ANIMATION_MOCK_H diff --git a/frameworks/core/animation/test/unittest/mock/animation_test_utils.h b/frameworks/core/animation/test/unittest/mock/animation_test_utils.h new file mode 100644 index 00000000..37f1e3ea --- /dev/null +++ b/frameworks/core/animation/test/unittest/mock/animation_test_utils.h @@ -0,0 +1,180 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_TEST_UNITTEST_MOCK_ANIMATION_TEST_UTILS_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_TEST_UNITTEST_MOCK_ANIMATION_TEST_UTILS_H + +#include + +#include "core/common/platform_window.h" +#include "core/common/window.h" +#include "core/components/box/render_box.h" +#include "core/components/display/render_display.h" +#include "core/components/root/render_root.h" +#include "core/components/stack/render_stack.h" +#include "core/components/transform/render_transform.h" +#include "core/pipeline/base/render_context.h" + +namespace OHOS::Ace { + +class MockPlatformWindow final : public PlatformWindow { +public: + MockPlatformWindow() = default; + ~MockPlatformWindow() override = default; + + // Request next vsync. + void RequestFrame() override + { + LOGD("MockPlatformWindow RequestFrame"); + requestFrameCnt_++; + } + + int32_t GetRequestFrameCnt() const + { + return requestFrameCnt_; + } + + void ResetRequestFrameCnt() + { + requestFrameCnt_ = 0; + } + + void TriggerOneFrame() + { + TriggerFrame(nanoFrameTime_, 1); + } + + void TriggerFrames(int32_t frameCount) + { + for (int32_t loop = 0; loop < frameCount; loop++) { + TriggerOneFrame(); + } + } + + uint64_t GetCurrentTimestampNano() const + { + return nanoTimestamp_; + } + + void TriggerFrame(uint64_t deltaNanoTimestamp, uint32_t deltaFrameCount) + { + nanoTimestamp_ += deltaNanoTimestamp; + frameCount_ += deltaFrameCount; + LOGD("MockPlatformWindow TriggerFrame. nanoTimestamp: %{public}" PRIu64 ", frameCount: %{public}u", + nanoTimestamp_, frameCount_); + if (callback_) { + callback_(nanoTimestamp_, frameCount_); + } + } + + // Register Vsync callback. + void RegisterVsyncCallback(AceVsyncCallback&& callback) override + { + callback_ = std::move(callback); + } + + // Attach root render node to container + void SetRootRenderNode(const RefPtr& root) override {} + + void SetNanoFrameTime(uint64_t nanoFrameTime) + { + nanoFrameTime_ = nanoFrameTime; + } + +private: + static constexpr uint16_t SCREEN_FREQUENCY = 60; + static constexpr uint64_t NANO_FRAME_TIME = static_cast(1e9 / SCREEN_FREQUENCY); + uint32_t frameCount_ = 0; + uint32_t requestFrameCnt_ = 0; + uint64_t nanoFrameTime_ = NANO_FRAME_TIME; + uint64_t nanoTimestamp_ = 0; + AceVsyncCallback callback_; +}; + +class MockRenderContext : public RenderContext { +public: + void Repaint(const RefPtr& node) override {}; + void PaintChild(const RefPtr& child, const Offset& offset) override {}; +}; + +RefPtr RenderContext::Create() +{ + return AceType::MakeRefPtr(); +} + +class MockRenderRoot : public RenderRoot {}; +class MockRenderStack : public RenderStack {}; +class MockRenderDisplay : public RenderDisplay {}; +class MockRenderPositioned : public RenderPositioned {}; +class MockRenderTransform : public RenderTransform {}; +class MockRenderBox : public RenderBox {}; +class MockRenderBoxBase : public RenderBoxBase {}; +class MockRenderImage : public RenderImage { +public: + Size Measure() override + { + return Size(); + } +}; + +RefPtr RenderRoot::Create() +{ + return AceType::MakeRefPtr(); +} + +RefPtr RenderStack::Create() +{ + return AceType::MakeRefPtr(); +} + +RefPtr RenderDisplay::Create() +{ + return AceType::MakeRefPtr(); +} + +RefPtr RenderTransform::Create() +{ + return AceType::MakeRefPtr(); +} + +RefPtr RenderBox::Create() +{ + return AceType::MakeRefPtr(); +} + +RefPtr RenderImage::Create() +{ + return AceType::MakeRefPtr(); +} + +class AnimationTestUtils { +public: + AnimationTestUtils() = delete; + ~AnimationTestUtils() = delete; + + static std::unique_ptr CreatePlatformWindow() + { + return std::make_unique(); + } + + static std::unique_ptr CreateWindow(std::unique_ptr platformWindow) + { + return std::make_unique(std::move(platformWindow)); + } +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_TEST_UNITTEST_MOCK_ANIMATION_TEST_UTILS_H diff --git a/frameworks/core/animation/test/unittest/mock/spring_chain_item.h b/frameworks/core/animation/test/unittest/mock/spring_chain_item.h new file mode 100644 index 00000000..5010c143 --- /dev/null +++ b/frameworks/core/animation/test/unittest/mock/spring_chain_item.h @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_TEST_UNITTEST_MOCK_SPRING_CHAIN_ITEM_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_TEST_UNITTEST_MOCK_SPRING_CHAIN_ITEM_H + +#include "base/memory/ace_type.h" + +namespace OHOS::Ace { + +class SpringChainItem : public AceType { + DECLARE_ACE_TYPE(SpringChainItem, AceType); + +public: + explicit SpringChainItem(int32_t index) : index_(index) {} + ~SpringChainItem() override = default; + + int32_t GetIndex() const + { + return index_; + } + + void SetValue(double value) + { + value_ = value; + } + + double Value() const + { + return value_; + } + + void SetVelocity(double velocity) + { + velocity_ = velocity; + } + + double Velocity() const + { + return velocity_; + } + +private: + int32_t index_ = 0; + double value_ = 0.0; + double velocity_ = 0.0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_TEST_UNITTEST_MOCK_SPRING_CHAIN_ITEM_H diff --git a/frameworks/core/animation/test/unittest/spring_chain/BUILD.gn b/frameworks/core/animation/test/unittest/spring_chain/BUILD.gn new file mode 100644 index 00000000..c8a05817 --- /dev/null +++ b/frameworks/core/animation/test/unittest/spring_chain/BUILD.gn @@ -0,0 +1,211 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/animation/springchaintest" + +ohos_unittest("SpringChainTest") { + module_out_path = module_output_path + + sources = [ + "$ace_root/frameworks/core/animation/test/unittest/mock/animation_mock.cpp", + "spring_chain_test.cpp", + + # animation + "$ace_root/frameworks/core/animation/animator.cpp", + "$ace_root/frameworks/core/animation/anticipate_curve.cpp", + "$ace_root/frameworks/core/animation/cubic_curve.cpp", + "$ace_root/frameworks/core/animation/curves.cpp", + "$ace_root/frameworks/core/animation/friction_motion.cpp", + "$ace_root/frameworks/core/animation/scheduler.cpp", + "$ace_root/frameworks/core/animation/scroll_motion.cpp", + "$ace_root/frameworks/core/animation/shared_transition_controller.cpp", + "$ace_root/frameworks/core/animation/shared_transition_effect.cpp", + "$ace_root/frameworks/core/animation/simple_spring_adapter.cpp", + "$ace_root/frameworks/core/animation/simple_spring_chain.cpp", + "$ace_root/frameworks/core/animation/simple_spring_node.cpp", + "$ace_root/frameworks/core/animation/spring_animation.cpp", + "$ace_root/frameworks/core/animation/spring_model.cpp", + "$ace_root/frameworks/core/animation/spring_motion.cpp", + + # common + "$ace_root/frameworks/core/common/ace_engine.cpp", + "$ace_root/frameworks/core/common/event_manager.cpp", + "$ace_root/frameworks/core/common/focus_animation_manager.cpp", + "$ace_root/frameworks/core/common/font_loader.cpp", + "$ace_root/frameworks/core/common/font_manager.cpp", + "$ace_root/frameworks/core/common/vibrator/vibrator_proxy.cpp", + "$ace_root/frameworks/core/common/window.cpp", + "$ace_root/frameworks/core/components/box/box_component.cpp", + "$ace_root/frameworks/core/components/display/display_component.cpp", + "$ace_root/frameworks/core/components/overlay/overlay_component.cpp", + "$ace_root/frameworks/core/components/page/page_component.cpp", + "$ace_root/frameworks/core/components/test/json/json_frontend.cpp", + "$ace_root/frameworks/core/gestures/raw_recognizer.cpp", + "$ace_root/frameworks/core/mock/mock_watch_dog.cpp", + "$ace_root/frameworks/core/pipeline/base/component_group_element.cpp", + "$ace_root/frameworks/core/pipeline/base/composed_component.cpp", + "$ace_root/frameworks/core/pipeline/pipeline_context.cpp", + + # components + "$ace_root/frameworks/core/components/root/root_component.cpp", + "$ace_root/frameworks/core/components/transform/transform_component.cpp", + "$ace_root/frameworks/core/components/tween/tween_component.cpp", + "$ace_root/frameworks/core/pipeline/base/component.cpp", + "$ace_root/frameworks/core/pipeline/base/composed_element.cpp", + + # elements + "$ace_root/frameworks/core/components/bubble/bubble_element.cpp", + "$ace_root/frameworks/core/components/dialog_modal/dialog_modal_element.cpp", + "$ace_root/frameworks/core/components/display/display_element.cpp", + "$ace_root/frameworks/core/components/flex/flex_element.cpp", + "$ace_root/frameworks/core/components/overlay/overlay_element.cpp", + "$ace_root/frameworks/core/components/page/page_element.cpp", + "$ace_root/frameworks/core/components/page_transition/page_transition_element.cpp", + "$ace_root/frameworks/core/components/root/root_element.cpp", + "$ace_root/frameworks/core/components/semi_modal/semi_modal_element.cpp", + "$ace_root/frameworks/core/components/shared_transition/shared_transition_element.cpp", + "$ace_root/frameworks/core/components/stack/stack_element.cpp", + "$ace_root/frameworks/core/components/stage/stage_element.cpp", + "$ace_root/frameworks/core/components/transform/transform_element.cpp", + "$ace_root/frameworks/core/components/transition/transition_element.cpp", + "$ace_root/frameworks/core/components/tween/tween_element.cpp", + "$ace_root/frameworks/core/pipeline/base/element.cpp", + "$ace_root/frameworks/core/pipeline/base/render_element.cpp", + "$ace_root/frameworks/core/pipeline/base/sole_child_element.cpp", + + # event + "$ace_root/frameworks/core/event/back_end_event_manager.cpp", + "$ace_root/frameworks/core/event/multimodal/multimodal_manager.cpp", + "$ace_root/frameworks/core/event/multimodal/multimodal_scene.cpp", + + # focus + "$ace_root/frameworks/core/focus/focus_node.cpp", + "$ace_root/frameworks/core/gestures/drag_recognizer.cpp", + "$ace_root/frameworks/core/gestures/gesture_recognizer.cpp", + "$ace_root/frameworks/core/gestures/gesture_referee.cpp", + + # gestures + "$ace_root/frameworks/core/gestures/velocity_tracker.cpp", + + # image + "$ace_root/frameworks/core/image/flutter_image_cache.cpp", + "$ace_root/frameworks/core/image/image_cache.cpp", + + # layout + "$ace_root/frameworks/core/components/common/layout/grid_column_info.cpp", + "$ace_root/frameworks/core/components/common/layout/grid_container_info.cpp", + "$ace_root/frameworks/core/components/common/layout/grid_system_manager.cpp", + + # others + "$ace_root/frameworks/core/components/box/render_box.cpp", + "$ace_root/frameworks/core/components/box/render_box_base.cpp", + "$ace_root/frameworks/core/components/common/properties/alignment.cpp", + "$ace_root/frameworks/core/components/common/properties/border.cpp", + "$ace_root/frameworks/core/components/common/properties/border_edge.cpp", + "$ace_root/frameworks/core/components/common/properties/color.cpp", + "$ace_root/frameworks/core/components/common/properties/decoration.cpp", + "$ace_root/frameworks/core/components/common/properties/edge.cpp", + "$ace_root/frameworks/core/components/common/properties/page_transition_option.cpp", + "$ace_root/frameworks/core/components/common/properties/scroll_bar.cpp", + "$ace_root/frameworks/core/components/common/properties/text_style.cpp", + "$ace_root/frameworks/core/components/display/render_display.cpp", + "$ace_root/frameworks/core/components/focus_animation/render_focus_animation.cpp", + + # rendering + "$ace_root/frameworks/core/components/bubble/render_bubble.cpp", + "$ace_root/frameworks/core/components/clip/render_clip.cpp", + "$ace_root/frameworks/core/components/dialog_modal/render_dialog_modal.cpp", + "$ace_root/frameworks/core/components/drag_bar/render_drag_bar.cpp", + "$ace_root/frameworks/core/components/positioned/render_positioned.cpp", + "$ace_root/frameworks/core/components/proxy/render_proxy.cpp", + "$ace_root/frameworks/core/components/refresh/render_refresh.cpp", + "$ace_root/frameworks/core/components/root/render_root.cpp", + "$ace_root/frameworks/core/components/scroll/render_multi_child_scroll.cpp", + "$ace_root/frameworks/core/components/scroll/render_scroll.cpp", + "$ace_root/frameworks/core/components/scroll/render_single_child_scroll.cpp", + "$ace_root/frameworks/core/components/scroll/scroll_bar_controller.cpp", + "$ace_root/frameworks/core/components/semi_modal/render_semi_modal.cpp", + "$ace_root/frameworks/core/components/stack/render_stack.cpp", + "$ace_root/frameworks/core/components/stage/render_stage.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/mock_flutter_font_manager.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/mock_render_node_factory.cpp", + "$ace_root/frameworks/core/components/theme/app_theme.cpp", + "$ace_root/frameworks/core/components/theme/theme_attributes.cpp", + "$ace_root/frameworks/core/components/theme/theme_constants.cpp", + "$ace_root/frameworks/core/components/theme/theme_manager.cpp", + "$ace_root/frameworks/core/components/theme/theme_utils.cpp", + "$ace_root/frameworks/core/components/transform/click_spring_effect.cpp", + "$ace_root/frameworks/core/components/transform/render_transform.cpp", + "$ace_root/frameworks/core/mock/mock_ace_application_info.cpp", + "$ace_root/frameworks/core/pipeline/base/render_node.cpp", + "$root_out_dir/ace/framework/core/components/theme/theme_constants_default.cpp", + + #mock + "$ace_root/adapter/common/cpp/thread_util.cpp", + "$ace_root/adapter/ohos/osal/log_wrapper.cpp", + "$ace_root/frameworks/base/geometry/matrix4.cpp", + "$ace_root/frameworks/base/log/dump_log.cpp", + "$ace_root/frameworks/base/thread/background_task_executor.cpp", + "$ace_root/frameworks/base/utils/base_id.cpp", + ] + + # add sources only needed by wearable like watch. + if (is_wearable_product) { + sources += [ "$root_out_dir/ace/framework/core/components/theme/theme_constants_watch.cpp" ] + } + + # add sources needed by phone and TV. wearable like watch do not need them + if (!is_wearable_product) { + sources += [ + # theme + "$root_out_dir/ace/framework/core/components/theme/theme_constants_tv.cpp", + ] + } + + configs = [ + "$ace_root:ace_test_config", + ":config_animation_test", + "$flutter_root:flutter_config", + ] + + deps = [ + "$ace_root/frameworks/core/components/theme:build_theme_code", + "$flutter_root:ace_skia_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + configs += [ "//third_party/curl:curl_config" ] + deps += [ "//third_party/curl:curl" ] + external_deps = [ "hiviewdfx_hilog_native:libhilog" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_animation_test") { + visibility = [ ":*" ] + include_dirs = [ + "//utils/native/base/include", + "$ace_root", + ] +} + +group("unittest") { + testonly = true + deps = [ ":SpringChainTest" ] +} diff --git a/frameworks/core/animation/test/unittest/spring_chain/spring_chain_test.cpp b/frameworks/core/animation/test/unittest/spring_chain/spring_chain_test.cpp new file mode 100644 index 00000000..4ab44769 --- /dev/null +++ b/frameworks/core/animation/test/unittest/spring_chain/spring_chain_test.cpp @@ -0,0 +1,229 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "adapter/ohos/osal/fake_asset_manager.h" +#include "adapter/ohos/osal/fake_task_executor.h" +#include "base/log/log.h" +#include "core/animation/card_transition_controller.h" +#include "core/animation/simple_spring_adapter.h" +#include "core/animation/simple_spring_chain.h" +#include "core/animation/simple_spring_node.h" +#include "core/animation/spring_motion.h" +#include "core/animation/test/unittest/mock/animation_test_utils.h" +#include "core/animation/test/unittest/mock/spring_chain_item.h" +#include "core/components/test/json/json_frontend.h" +#include "core/mock/mock_resource_register.h" +#include "core/pipeline/pipeline_context.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { + +CardTransitionController::CardTransitionController(const WeakPtr& context) {}; + +void CardTransitionController::RegisterTransitionListener() {}; + +RRect CardTransitionController::GetCardRect(const ComposeId& composeId) const +{ + return RRect(); +} + +namespace { + +constexpr int32_t NANOSECOND_TO_MILLISECOND = 1000000; +constexpr int32_t CHAIN_ITEM_COUNT = 10; +constexpr int32_t CHAIN_ITEM_DISTANCE_DEFAULT = 50; +constexpr double CONTROL_DAMPING_DEFAULT = 500.0; +constexpr double CONTROL_STIFFNESS_DEFAULT = 200.0; +constexpr float ERROR_BOUND = 0.01f; + +} // namespace + +class SpringChainTest : public testing::Test { +public: + static void SetUpTestCase() + { + GTEST_LOG_(INFO) << "SpringChainTest SetUpTestCase"; + } + + static void TearDownTestCase() + { + GTEST_LOG_(INFO) << "SpringChainTest TearDownTestCase"; + } + + void SetUp() override + { + std::unique_ptr platformWindow = AnimationTestUtils::CreatePlatformWindow(); + platformWindowRaw_ = reinterpret_cast(platformWindow.get()); + auto window = AnimationTestUtils::CreateWindow(std::move(platformWindow)); + auto taskExecutor = AceType::MakeRefPtr(); + auto assetManager = Referenced::MakeRefPtr(); + auto resRegister = Referenced::MakeRefPtr(); + RefPtr frontend = Frontend::CreateDefault(); + context_ = AceType::MakeRefPtr( + std::move(window), taskExecutor, assetManager, resRegister, frontend, 0); + context_->SetTimeProvider( + [this] { return this->platformWindowRaw_->GetCurrentTimestampNano() + NANOSECOND_TO_MILLISECOND * 10; }); + + context_->SetupRootElement(); + context_->OnSurfaceChanged(100, 200); + } + + void TearDown() override + { + nodes_.clear(); + } + + void InitSpringChain(int32_t chainItemCount, bool useLinearTransfer) + { + adapter_ = AceType::MakeRefPtr(); + chain_ = AceType::MakeRefPtr(adapter_); + chain_->SetControlDamping(CONTROL_DAMPING_DEFAULT); + chain_->SetControlStiffness(CONTROL_STIFFNESS_DEFAULT); + if (useLinearTransfer) { + chain_->SetDampingTransfer(AceType::MakeRefPtr(0.0)); + chain_->SetStiffnessTransfer(AceType::MakeRefPtr(1.0)); + } + for (int32_t idx = 0; idx < chainItemCount; idx++) { + RefPtr item = AceType::MakeRefPtr(idx); + nodes_[idx] = item; + RefPtr node = + AceType::MakeRefPtr(context_, idx, idx * CHAIN_ITEM_DISTANCE_DEFAULT); + node->AddUpdateListener([idx, item](double value, double velocity) { + LOGI("Spring Node Update. index: %{public}d, value: %{public}lf, velocity: %{public}lf", idx, value, + velocity); + item->SetValue(value); + item->SetVelocity(velocity); + }); + node->SetValue(idx * CHAIN_ITEM_DISTANCE_DEFAULT); + adapter_->AddNode(node); + } + } + +protected: + RefPtr context_; + MockPlatformWindow* platformWindowRaw_ = nullptr; + RefPtr adapter_; + RefPtr chain_; + std::unordered_map> nodes_; +}; + +/** + * @tc.name: SpringChainTest001 + * @tc.desc: Test SpringChain init + * @tc.type: FUNC + * @tc.require: AR000F3CD8 + * @tc.author: zhouzebin + */ +HWTEST_F(SpringChainTest, SpringChainTest001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "SpringChainTest SpringChainTest001 start"; + /** + * @tc.steps: step1. init spring chain + * @tc.expected: step1. check size and node index + */ + InitSpringChain(CHAIN_ITEM_COUNT, false); + EXPECT_EQ(CHAIN_ITEM_COUNT, adapter_->GetSize()); + for (int32_t idx = 0; idx < CHAIN_ITEM_COUNT; idx++) { + auto node = adapter_->GetNode(idx); + EXPECT_EQ(idx, node->GetIndex()); + EXPECT_EQ(idx * CHAIN_ITEM_DISTANCE_DEFAULT, nodes_[idx]->Value()); + } +} + +/** + * @tc.name: SpringChainTest002 + * @tc.desc: Test SpringChain default Param Transfer + * @tc.type: FUNC + * @tc.require: AR000F3CD9 + * @tc.author: zhouzebin + */ +HWTEST_F(SpringChainTest, SpringChainTest002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "SpringChainTest SpringChainTest002 start"; + /** + * @tc.steps: step1. init spring chain + * @tc.expected: step1. check transfer params in chain node + */ + InitSpringChain(CHAIN_ITEM_COUNT, false); + auto controlNode = AceType::DynamicCast(adapter_->GetControlNode()); + + EXPECT_EQ(CONTROL_DAMPING_DEFAULT, controlNode->GetTransferParams()->Damping()); + auto node = AceType::DynamicCast(adapter_->GetNext(controlNode)); + EXPECT_EQ(1, node->GetIndex()); + EXPECT_EQ(CONTROL_DAMPING_DEFAULT, node->GetTransferParams()->Damping()); + EXPECT_NEAR(176.54, node->GetTransferParams()->Stiffness(), ERROR_BOUND); + node = AceType::DynamicCast(adapter_->GetNode(CHAIN_ITEM_COUNT - 1)); + EXPECT_EQ(CONTROL_DAMPING_DEFAULT, node->GetTransferParams()->Damping()); + EXPECT_NEAR(132.13, node->GetTransferParams()->Stiffness(), ERROR_BOUND); +} + +/** + * @tc.name: SpringChainTest003 + * @tc.desc: Test SpringChain Linear Param Transfer + * @tc.type: FUNC + * @tc.require: AR000F3CDB + * @tc.author: zhouzebin + */ +HWTEST_F(SpringChainTest, SpringChainTest003, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "SpringChainTest SpringChainTest003 start"; + /** + * @tc.steps: step1. init spring chain with linear param transfer + * @tc.expected: step1. check param in node with linear spread + */ + InitSpringChain(CHAIN_ITEM_COUNT, true); + auto controlNode = AceType::DynamicCast(adapter_->GetControlNode()); + + EXPECT_EQ(CONTROL_DAMPING_DEFAULT, controlNode->GetTransferParams()->Damping()); + auto node = AceType::DynamicCast(adapter_->GetNext(controlNode)); + EXPECT_EQ(1, node->GetIndex()); + EXPECT_EQ(CONTROL_DAMPING_DEFAULT, node->GetTransferParams()->Damping()); + EXPECT_NEAR(199.0, node->GetTransferParams()->Stiffness(), ERROR_BOUND); + node = AceType::DynamicCast(adapter_->GetNode(CHAIN_ITEM_COUNT - 1)); + EXPECT_EQ(CONTROL_DAMPING_DEFAULT, node->GetTransferParams()->Damping()); + EXPECT_NEAR(191.0, node->GetTransferParams()->Stiffness(), ERROR_BOUND); +} + +/** + * @tc.name: SpringChainTest004 + * @tc.desc: Test SpringChain Transfer Next + * @tc.type: FUNC + * @tc.require: AR000F3CDA + * @tc.author: zhouzebin + */ +HWTEST_F(SpringChainTest, SpringChainTest004, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "SpringChainTest SpringChainTest004 start"; + /** + * @tc.steps: step1. init spring chain + */ + int32_t chainItemCount = 3; + InitSpringChain(chainItemCount, false); + + /** + * @tc.steps: step2. end to position + * @tc.expected: step2. spring chain node moves + */ + chain_->EndToPosition(20, -100); + platformWindowRaw_->TriggerOneFrame(); + auto controlNode = AceType::DynamicCast(adapter_->GetControlNode()); + EXPECT_NEAR(0.111, nodes_[adapter_->GetControlIndex()]->Value(), ERROR_BOUND); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/animation/test/unittest/svg_animate/BUILD.gn b/frameworks/core/animation/test/unittest/svg_animate/BUILD.gn new file mode 100644 index 00000000..cf7e74f3 --- /dev/null +++ b/frameworks/core/animation/test/unittest/svg_animate/BUILD.gn @@ -0,0 +1,209 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/animation/svganimatetest" + +ohos_unittest("SvgAnimateTest") { + module_out_path = module_output_path + + sources = [ + "$ace_root/frameworks/core/animation/test/unittest/mock/animation_mock.cpp", + "svg_animate_test.cpp", + + # animation + "$ace_root/frameworks/core/animation/animator.cpp", + "$ace_root/frameworks/core/animation/anticipate_curve.cpp", + "$ace_root/frameworks/core/animation/card_transition_controller.cpp", + "$ace_root/frameworks/core/animation/cubic_curve.cpp", + "$ace_root/frameworks/core/animation/curves.cpp", + "$ace_root/frameworks/core/animation/friction_motion.cpp", + "$ace_root/frameworks/core/animation/scheduler.cpp", + "$ace_root/frameworks/core/animation/scroll_motion.cpp", + "$ace_root/frameworks/core/animation/shared_transition_controller.cpp", + "$ace_root/frameworks/core/animation/shared_transition_effect.cpp", + "$ace_root/frameworks/core/animation/spring_animation.cpp", + "$ace_root/frameworks/core/animation/spring_model.cpp", + "$ace_root/frameworks/core/animation/spring_motion.cpp", + "$ace_root/frameworks/core/animation/svg_animate.cpp", + + # common + "$ace_root/frameworks/core/common/ace_engine.cpp", + "$ace_root/frameworks/core/common/event_manager.cpp", + "$ace_root/frameworks/core/common/focus_animation_manager.cpp", + "$ace_root/frameworks/core/common/font_loader.cpp", + "$ace_root/frameworks/core/common/font_manager.cpp", + "$ace_root/frameworks/core/common/vibrator/vibrator_proxy.cpp", + "$ace_root/frameworks/core/common/window.cpp", + "$ace_root/frameworks/core/components/box/box_component.cpp", + "$ace_root/frameworks/core/components/display/display_component.cpp", + "$ace_root/frameworks/core/components/overlay/overlay_component.cpp", + "$ace_root/frameworks/core/components/page/page_component.cpp", + "$ace_root/frameworks/core/components/test/json/json_frontend.cpp", + "$ace_root/frameworks/core/gestures/raw_recognizer.cpp", + "$ace_root/frameworks/core/mock/mock_watch_dog.cpp", + "$ace_root/frameworks/core/pipeline/base/composed_component.cpp", + "$ace_root/frameworks/core/pipeline/pipeline_context.cpp", + + # components + "$ace_root/frameworks/core/components/root/root_component.cpp", + "$ace_root/frameworks/core/components/transform/transform_component.cpp", + "$ace_root/frameworks/core/components/tween/tween_component.cpp", + "$ace_root/frameworks/core/pipeline/base/component.cpp", + "$ace_root/frameworks/core/pipeline/base/component_group_element.cpp", + "$ace_root/frameworks/core/pipeline/base/composed_element.cpp", + + # elements + "$ace_root/frameworks/core/components/bubble/bubble_element.cpp", + "$ace_root/frameworks/core/components/dialog_modal/dialog_modal_element.cpp", + "$ace_root/frameworks/core/components/display/display_element.cpp", + "$ace_root/frameworks/core/components/flex/flex_element.cpp", + "$ace_root/frameworks/core/components/overlay/overlay_element.cpp", + "$ace_root/frameworks/core/components/page/page_element.cpp", + "$ace_root/frameworks/core/components/page_transition/page_transition_element.cpp", + "$ace_root/frameworks/core/components/root/root_element.cpp", + "$ace_root/frameworks/core/components/semi_modal/semi_modal_element.cpp", + "$ace_root/frameworks/core/components/shared_transition/shared_transition_element.cpp", + "$ace_root/frameworks/core/components/stack/stack_element.cpp", + "$ace_root/frameworks/core/components/stage/stage_element.cpp", + "$ace_root/frameworks/core/components/transform/transform_element.cpp", + "$ace_root/frameworks/core/components/transition/transition_element.cpp", + "$ace_root/frameworks/core/components/tween/tween_element.cpp", + "$ace_root/frameworks/core/pipeline/base/element.cpp", + "$ace_root/frameworks/core/pipeline/base/render_element.cpp", + "$ace_root/frameworks/core/pipeline/base/sole_child_element.cpp", + + # event + "$ace_root/frameworks/core/event/back_end_event_manager.cpp", + "$ace_root/frameworks/core/event/multimodal/multimodal_manager.cpp", + "$ace_root/frameworks/core/event/multimodal/multimodal_scene.cpp", + + # focus + "$ace_root/frameworks/core/focus/focus_node.cpp", + + # gestures + "$ace_root/frameworks/core/gestures/drag_recognizer.cpp", + "$ace_root/frameworks/core/gestures/gesture_recognizer.cpp", + "$ace_root/frameworks/core/gestures/gesture_referee.cpp", + "$ace_root/frameworks/core/gestures/velocity_tracker.cpp", + + # image + "$ace_root/frameworks/core/image/flutter_image_cache.cpp", + "$ace_root/frameworks/core/image/image_cache.cpp", + + # layout + "$ace_root/frameworks/core/components/common/layout/grid_column_info.cpp", + "$ace_root/frameworks/core/components/common/layout/grid_container_info.cpp", + "$ace_root/frameworks/core/components/common/layout/grid_system_manager.cpp", + + # others + "$ace_root/frameworks/core/components/box/render_box.cpp", + "$ace_root/frameworks/core/components/box/render_box_base.cpp", + "$ace_root/frameworks/core/components/common/properties/alignment.cpp", + "$ace_root/frameworks/core/components/common/properties/border.cpp", + "$ace_root/frameworks/core/components/common/properties/border_edge.cpp", + "$ace_root/frameworks/core/components/common/properties/color.cpp", + "$ace_root/frameworks/core/components/common/properties/decoration.cpp", + "$ace_root/frameworks/core/components/common/properties/edge.cpp", + "$ace_root/frameworks/core/components/common/properties/page_transition_option.cpp", + "$ace_root/frameworks/core/components/common/properties/scroll_bar.cpp", + "$ace_root/frameworks/core/components/common/properties/text_style.cpp", + "$ace_root/frameworks/core/components/display/render_display.cpp", + "$ace_root/frameworks/core/components/focus_animation/render_focus_animation.cpp", + + # rendering + "$ace_root/frameworks/core/components/bubble/render_bubble.cpp", + "$ace_root/frameworks/core/components/clip/render_clip.cpp", + "$ace_root/frameworks/core/components/dialog_modal/render_dialog_modal.cpp", + "$ace_root/frameworks/core/components/drag_bar/render_drag_bar.cpp", + "$ace_root/frameworks/core/components/positioned/render_positioned.cpp", + "$ace_root/frameworks/core/components/proxy/render_proxy.cpp", + "$ace_root/frameworks/core/components/refresh/render_refresh.cpp", + "$ace_root/frameworks/core/components/root/render_root.cpp", + "$ace_root/frameworks/core/components/scroll/render_multi_child_scroll.cpp", + "$ace_root/frameworks/core/components/scroll/render_scroll.cpp", + "$ace_root/frameworks/core/components/scroll/render_single_child_scroll.cpp", + "$ace_root/frameworks/core/components/scroll/scroll_bar_controller.cpp", + "$ace_root/frameworks/core/components/semi_modal/render_semi_modal.cpp", + "$ace_root/frameworks/core/components/stack/render_stack.cpp", + "$ace_root/frameworks/core/components/stage/render_stage.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/mock_flutter_font_manager.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/mock_render_node_factory.cpp", + "$ace_root/frameworks/core/components/theme/app_theme.cpp", + "$ace_root/frameworks/core/components/theme/theme_attributes.cpp", + "$ace_root/frameworks/core/components/theme/theme_constants.cpp", + "$ace_root/frameworks/core/components/theme/theme_manager.cpp", + "$ace_root/frameworks/core/components/theme/theme_utils.cpp", + "$ace_root/frameworks/core/components/transform/click_spring_effect.cpp", + "$ace_root/frameworks/core/components/transform/render_transform.cpp", + "$ace_root/frameworks/core/mock/mock_ace_application_info.cpp", + "$ace_root/frameworks/core/pipeline/base/render_node.cpp", + "$root_out_dir/ace/framework/core/components/theme/theme_constants_default.cpp", + + #mock + "$ace_root/adapter/common/cpp/thread_util.cpp", + "$ace_root/adapter/ohos/osal/log_wrapper.cpp", + "$ace_root/frameworks/base/geometry/matrix4.cpp", + "$ace_root/frameworks/base/log/dump_log.cpp", + "$ace_root/frameworks/base/thread/background_task_executor.cpp", + "$ace_root/frameworks/base/utils/base_id.cpp", + ] + + # add sources only needed by wearable like watch. + if (is_wearable_product) { + sources += [ "$root_out_dir/ace/framework/core/components/theme/theme_constants_watch.cpp" ] + } + + # add sources needed by phone and TV. wearable like watch do not need them + if (!is_wearable_product) { + sources += [ + # theme + "$root_out_dir/ace/framework/core/components/theme/theme_constants_tv.cpp", + ] + } + + configs = [ + "$ace_root:ace_test_config", + ":config_animation_test", + "$flutter_root:flutter_config", + ] + + deps = [ + "$ace_root/frameworks/core/components/theme:build_theme_code", + "$flutter_root:ace_skia_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + external_deps = [ "hiviewdfx_hilog_native:libhilog" ] + deps += [ "//base/global/resmgr_standard/frameworks/resmgr:global_resmgr" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_animation_test") { + visibility = [ ":*" ] + include_dirs = [ + "//utils/native/base/include", + "$ace_root", + ] +} + +group("unittest") { + testonly = true + deps = [ ":SvgAnimateTest" ] +} diff --git a/frameworks/core/animation/test/unittest/svg_animate/svg_animate_test.cpp b/frameworks/core/animation/test/unittest/svg_animate/svg_animate_test.cpp new file mode 100644 index 00000000..cfe2fd23 --- /dev/null +++ b/frameworks/core/animation/test/unittest/svg_animate/svg_animate_test.cpp @@ -0,0 +1,540 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "adapter/ohos/osal/fake_asset_manager.h" +#include "adapter/ohos/osal/fake_task_executor.h" +#include "base/log/log.h" +#include "core/animation/card_transition_controller.h" +#include "core/animation/flush_event.h" +#include "core/animation/svg_animate.h" +#include "core/animation/test/unittest/mock/animation_test_utils.h" +#include "core/components/test/json/json_frontend.h" +#include "core/mock/mock_resource_register.h" +#include "core/pipeline/pipeline_context.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +constexpr int32_t NANOSECOND_TO_MILLISECOND = 1000000; +constexpr double CUBIC_ERROR_BOUND = 0.001; + +} // namespace + +template +class SvgAnimationMock : public FlushEvent { + DECLARE_ACE_TYPE(SvgAnimationMock, FlushEvent); + +public: + SvgAnimationMock(T originValue, const RefPtr>& evaluator, const RefPtr& svgAnimate, + const WeakPtr& context) + : FlushEvent() + { + originValue_ = originValue; + currentValue_ = originValue_; + evaluator_ = evaluator; + svgAnimate_ = svgAnimate; + animator_ = AceType::MakeRefPtr(context); + } + ~SvgAnimationMock() = default; + + void CreatePropertyAnimate() + { + if (!svgAnimate_) { + return; + } + std::function callback; + callback = [weak = AceType::WeakClaim(this)](T value) { + auto mock = weak.Upgrade(); + if (!mock) { + LOGE("mock is null"); + return; + } + mock->currentValue_ = value; + }; + svgAnimate_->CreatePropertyAnimate(std::move(callback), originValue_, evaluator_, animator_); + } + + void CreateMotionAnimate() + { + if (!svgAnimate_) { + return; + } + std::function callback; + callback = [weak = AceType::WeakClaim(this)](double value) { + auto mock = weak.Upgrade(); + if (!mock) { + LOGE("mock is null"); + return; + } + mock->motionValue_ = value; + }; + svgAnimate_->CreateMotionAnimate(std::move(callback), animator_); + } + + void OnPostFlush() override + { + if (!svgAnimate_) { + return; + } + if (svgAnimate_->GetSvgAnimateType() == SvgAnimateType::ANIMATE) { + CreatePropertyAnimate(); + } else if (svgAnimate_->GetSvgAnimateType() == SvgAnimateType::MOTION) { + CreateMotionAnimate(); + } else { + LOGE("invalid animation type"); + } + } + + T currentValue_; + T originValue_; + double motionValue_ = 0.0; + +private: + RefPtr svgAnimate_; + RefPtr animator_; + RefPtr> evaluator_; +}; + +class SvgAnimateTest : public testing::Test { +public: + static void SetUpTestCase() + { + GTEST_LOG_(INFO) << "SvgAnimateTest SetUpTestCase"; + } + + static void TearDownTestCase() + { + GTEST_LOG_(INFO) << "SvgAnimateTest TearDownTestCase"; + } + + void SetUp() override + { + std::unique_ptr platformWindow = AnimationTestUtils::CreatePlatformWindow(); + platformWindowRaw_ = reinterpret_cast(platformWindow.get()); + auto window = AnimationTestUtils::CreateWindow(std::move(platformWindow)); + auto taskExecutor = AceType::MakeRefPtr(); + auto assetManager = Referenced::MakeRefPtr(); + auto resRegister = Referenced::MakeRefPtr(); + RefPtr frontend = Frontend::CreateDefault(); + context_ = AceType::MakeRefPtr( + std::move(window), taskExecutor, assetManager, resRegister, frontend, 0); + context_->SetTimeProvider( + [this] { return this->platformWindowRaw_->GetCurrentTimestampNano() + NANOSECOND_TO_MILLISECOND * 10; }); + context_->SetupRootElement(); + context_->OnSurfaceChanged(100, 200); + } + + void TearDown() override {} + +protected: + RefPtr context_; + MockPlatformWindow* platformWindowRaw_ = nullptr; +}; + +/** + * @tc.name: SvgAnimateTest + * @tc.desc: Verify the property animation process for type double + * @tc.type: FUNC + * @tc.require: AR000FL0TR + * @tc.author: chenlien + */ +HWTEST_F(SvgAnimateTest, SvgAnimateTest001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "SvgAnimateTest SvgAnimateTest001 start"; + /** + * @tc.steps: step1. init svg animate and animator + */ + RefPtr> evaluator = AceType::MakeRefPtr>(); + RefPtr svgAnimate = AceType::MakeRefPtr(); + svgAnimate->SetAttributeName("opacity"); + svgAnimate->SetBegin(0); + svgAnimate->SetDur(1600); + svgAnimate->SetRepeatCount(1); + svgAnimate->SetFillMode(Fill::FREEZE); + svgAnimate->SetCalcMode(CalcMode::LINEAR); + svgAnimate->SetFrom("0.1"); + svgAnimate->SetTo("1.0"); + svgAnimate->SetSvgAnimateType(SvgAnimateType::ANIMATE); + auto flushEventMock = AceType::MakeRefPtr>(0.0, evaluator, svgAnimate, context_); + context_->AddPostFlushListener(flushEventMock); + + /** + * @tc.steps: step2. trigger one frame to make prepare animation work + * @tc.expected: step2. postFlush has been called. + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(flushEventMock->currentValue_, 0.0, CUBIC_ERROR_BOUND); + platformWindowRaw_->TriggerFrames(10); + EXPECT_NEAR(flushEventMock->currentValue_, 0.19, CUBIC_ERROR_BOUND); + platformWindowRaw_->TriggerFrames(20); + EXPECT_NEAR(flushEventMock->currentValue_, 0.37, CUBIC_ERROR_BOUND); + platformWindowRaw_->TriggerFrames(70); + EXPECT_NEAR(flushEventMock->currentValue_, 1.0, CUBIC_ERROR_BOUND); +} + +/** + * @tc.name: SvgAnimateTest002 + * @tc.desc: Verify the property animation process for type color + * @tc.type: FUNC + * @tc.require: AR000FL0TR + * @tc.author: chenlien + */ +HWTEST_F(SvgAnimateTest, SvgAnimateTest002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "SvgAnimateTest SvgAnimateTest002 start"; + /** + * @tc.steps: step1. init svg animate and animator + */ + RefPtr> evaluator = AceType::MakeRefPtr(); + RefPtr svgAnimate = AceType::MakeRefPtr(); + svgAnimate->SetAttributeName("fill"); + svgAnimate->SetBegin(0); + svgAnimate->SetDur(1600); + svgAnimate->SetRepeatCount(1); + svgAnimate->SetFillMode(Fill::FREEZE); + svgAnimate->SetCalcMode(CalcMode::LINEAR); + svgAnimate->SetFrom("red"); + svgAnimate->SetTo("blue"); + svgAnimate->SetSvgAnimateType(SvgAnimateType::ANIMATE); + auto flushEventMock = AceType::MakeRefPtr>(Color::RED, evaluator, svgAnimate, context_); + context_->AddPostFlushListener(flushEventMock); + + /** + * @tc.steps: step2. trigger one frame to make prepare animation work + * @tc.expected: step2. postFlush has been called. + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_TRUE(flushEventMock->currentValue_.GetValue() == Color::RED.GetValue()); + platformWindowRaw_->TriggerFrames(10); + EXPECT_TRUE(flushEventMock->currentValue_.GetValue() == 4294115417); + platformWindowRaw_->TriggerFrames(20); + EXPECT_TRUE(flushEventMock->currentValue_.GetValue() == 4292346003); + platformWindowRaw_->TriggerFrames(70); + EXPECT_TRUE(flushEventMock->currentValue_.GetValue() == Color::BLUE.GetValue()); +} + +/** + * @tc.name: SvgAnimateTest003 + * @tc.desc: Verify the property animation process for type dimension + * @tc.type: FUNC + * @tc.require: AR000FL0TR + * @tc.author: chenlien + */ +HWTEST_F(SvgAnimateTest, SvgAnimateTest003, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "SvgAnimateTest SvgAnimateTest003 start"; + /** + * @tc.steps: step1. init svg animate and animator + */ + RefPtr> evaluator = AceType::MakeRefPtr>(); + RefPtr svgAnimate = AceType::MakeRefPtr(); + svgAnimate->SetAttributeName("width"); + svgAnimate->SetBegin(0); + svgAnimate->SetDur(1600); + svgAnimate->SetRepeatCount(1); + svgAnimate->SetFillMode(Fill::FREEZE); + svgAnimate->SetCalcMode(CalcMode::LINEAR); + svgAnimate->SetFrom("100"); + svgAnimate->SetTo("300"); + svgAnimate->SetSvgAnimateType(SvgAnimateType::ANIMATE); + auto flushEventMock = + AceType::MakeRefPtr>(Dimension(50.0), evaluator, svgAnimate, context_); + context_->AddPostFlushListener(flushEventMock); + + /** + * @tc.steps: step2. trigger one frame to make prepare animation work + * @tc.expected: step2. postFlush has been called. + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(flushEventMock->currentValue_.Value(), 50.0, CUBIC_ERROR_BOUND); + platformWindowRaw_->TriggerFrames(10); + EXPECT_NEAR(flushEventMock->currentValue_.Value(), 120.0, CUBIC_ERROR_BOUND); + platformWindowRaw_->TriggerFrames(20); + EXPECT_NEAR(flushEventMock->currentValue_.Value(), 160.0, CUBIC_ERROR_BOUND); + platformWindowRaw_->TriggerFrames(70); + EXPECT_NEAR(flushEventMock->currentValue_.Value(), 300.0, CUBIC_ERROR_BOUND); +} + +/** + * @tc.name: SvgAnimateTest004 + * @tc.desc: Verify the property keyframe animation process for type dimension + * @tc.type: FUNC + * @tc.require: AR000FL0TR + * @tc.author: chenlien + */ +HWTEST_F(SvgAnimateTest, SvgAnimateTest004, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "SvgAnimateTest SvgAnimateTest004 start"; + /** + * @tc.steps: step1. init svg animate and animator + */ + RefPtr> evaluator = AceType::MakeRefPtr>(); + + RefPtr svgAnimate = AceType::MakeRefPtr(); + svgAnimate->SetAttributeName("width"); + svgAnimate->SetBegin(0); + svgAnimate->SetDur(1600); + svgAnimate->SetRepeatCount(1); + svgAnimate->SetFillMode(Fill::FREEZE); + svgAnimate->SetCalcMode(CalcMode::LINEAR); + std::vector values = { "50", "100", "200", "300" }; + svgAnimate->SetValues(values); + svgAnimate->SetSvgAnimateType(SvgAnimateType::ANIMATE); + auto flushEventMock = + AceType::MakeRefPtr>(Dimension(50.0), evaluator, svgAnimate, context_); + context_->AddPostFlushListener(flushEventMock); + + /** + * @tc.steps: step2. trigger one frame to make prepare animation work + * @tc.expected: step2. postFlush has been called. + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(flushEventMock->currentValue_.Value(), 50.0, CUBIC_ERROR_BOUND); + platformWindowRaw_->TriggerFrames(10); + EXPECT_NEAR(flushEventMock->currentValue_.Value(), 65.1515, CUBIC_ERROR_BOUND); + platformWindowRaw_->TriggerFrames(20); + EXPECT_NEAR(flushEventMock->currentValue_.Value(), 95.4545, CUBIC_ERROR_BOUND); + platformWindowRaw_->TriggerFrames(70); + EXPECT_NEAR(flushEventMock->currentValue_.Value(), 300.0, CUBIC_ERROR_BOUND); +} + +/** + * @tc.name: SvgAnimateTest005 + * @tc.desc: Verify the property keyframe with keyTimes animation process for type dimension + * @tc.type: FUNC + * @tc.require: AR000FL0TR + * @tc.author: chenlien + */ +HWTEST_F(SvgAnimateTest, SvgAnimateTest005, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "SvgAnimateTest SvgAnimateTest005 start"; + /** + * @tc.steps: step1. init svg animate and animator + */ + RefPtr> evaluator = AceType::MakeRefPtr>(); + RefPtr svgAnimate = AceType::MakeRefPtr(); + svgAnimate->SetAttributeName("width"); + svgAnimate->SetBegin(0); + svgAnimate->SetDur(1600); + svgAnimate->SetRepeatCount(1); + svgAnimate->SetFillMode(Fill::FREEZE); + svgAnimate->SetCalcMode(CalcMode::LINEAR); + std::vector values = { "50", "100", "200", "300" }; + svgAnimate->SetValues(values); + std::vector keyTimes = { 0.0, 0.2, 0.7, 1.0 }; + svgAnimate->SetKeyTimes(keyTimes); + svgAnimate->SetSvgAnimateType(SvgAnimateType::ANIMATE); + auto flushEventMock = + AceType::MakeRefPtr>(Dimension(50.0), evaluator, svgAnimate, context_); + context_->AddPostFlushListener(flushEventMock); + + /** + * @tc.steps: step2. trigger one frame to make prepare animation work + * @tc.expected: step2. postFlush has been called. + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(flushEventMock->currentValue_.Value(), 50.0, CUBIC_ERROR_BOUND); + platformWindowRaw_->TriggerFrames(10); + EXPECT_NEAR(flushEventMock->currentValue_.Value(), 75.0, CUBIC_ERROR_BOUND); + platformWindowRaw_->TriggerFrames(20); + EXPECT_NEAR(flushEventMock->currentValue_.Value(), 120.0, CUBIC_ERROR_BOUND); + platformWindowRaw_->TriggerFrames(70); + EXPECT_NEAR(flushEventMock->currentValue_.Value(), 300.0, CUBIC_ERROR_BOUND); +} + +/** + * @tc.name: SvgAnimateTest006 + * @tc.desc: Verify the property keyframe animation with keysplines process for type dimension + * @tc.type: FUNC + * @tc.require: AR000FL0TR + * @tc.author: chenlien + */ +HWTEST_F(SvgAnimateTest, SvgAnimateTest006, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "SvgAnimateTest SvgAnimateTest006 start"; + /** + * @tc.steps: step1. init svg animate and animator + */ + RefPtr> evaluator = AceType::MakeRefPtr>(); + RefPtr svgAnimate = AceType::MakeRefPtr(); + svgAnimate->SetAttributeName("width"); + svgAnimate->SetBegin(0); + svgAnimate->SetDur(1600); + svgAnimate->SetRepeatCount(1); + svgAnimate->SetFillMode(Fill::FREEZE); + svgAnimate->SetCalcMode(CalcMode::SPLINE); + std::vector values = { "50", "100", "200", "300" }; + svgAnimate->SetValues(values); + std::vector keyTimes = { 0.0, 0.2, 0.7, 1.0 }; + svgAnimate->SetKeyTimes(keyTimes); + std::vector keySplines = { "0.5 0 0.5 1", "0.5 0 0.5 1", "0.5 0 0.5 1" }; + svgAnimate->SetKeySplines(keySplines); + svgAnimate->SetSvgAnimateType(SvgAnimateType::ANIMATE); + auto flushEventMock = + AceType::MakeRefPtr>(Dimension(50.0), evaluator, svgAnimate, context_); + context_->AddPostFlushListener(flushEventMock); + + /** + * @tc.steps: step2. trigger one frame to make prepare animation work + * @tc.expected: step2. postFlush has been called. + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(flushEventMock->currentValue_.Value(), 50.0, CUBIC_ERROR_BOUND); + platformWindowRaw_->TriggerFrames(10); + EXPECT_NEAR(flushEventMock->currentValue_.Value(), 75.0, CUBIC_ERROR_BOUND); + platformWindowRaw_->TriggerFrames(20); + EXPECT_NEAR(flushEventMock->currentValue_.Value(), 106.408, CUBIC_ERROR_BOUND); + platformWindowRaw_->TriggerFrames(70); + EXPECT_NEAR(flushEventMock->currentValue_.Value(), 300.0, CUBIC_ERROR_BOUND); +} + +/** + * @tc.name: SvgAnimateTest007 + * @tc.desc: Verify the property keyframe animation with discrete calcMode process for type dimension + * @tc.type: FUNC + * @tc.require: AR000FL0TR + * @tc.author: chenlien + */ +HWTEST_F(SvgAnimateTest, SvgAnimateTest007, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "SvgAnimateTest SvgAnimateTest007 start"; + /** + * @tc.steps: step1. init svg animate and animator + */ + RefPtr> evaluator = AceType::MakeRefPtr>(); + + RefPtr svgAnimate = AceType::MakeRefPtr(); + svgAnimate->SetAttributeName("width"); + svgAnimate->SetBegin(0); + svgAnimate->SetDur(1600); + svgAnimate->SetRepeatCount(1); + svgAnimate->SetFillMode(Fill::FREEZE); + svgAnimate->SetCalcMode(CalcMode::DISCRETE); + std::vector values = { "100", "200", "300" }; + svgAnimate->SetValues(values); + std::vector keyTimes = { 0.0, 0.2, 0.7, 1.0 }; + svgAnimate->SetKeyTimes(keyTimes); + svgAnimate->SetSvgAnimateType(SvgAnimateType::ANIMATE); + auto flushEventMock = + AceType::MakeRefPtr>(Dimension(50.0), evaluator, svgAnimate, context_); + context_->AddPostFlushListener(flushEventMock); + + /** + * @tc.steps: step2. trigger one frame to make prepare animation work + * @tc.expected: step2. postFlush has been called. + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(flushEventMock->currentValue_.Value(), 50.0, CUBIC_ERROR_BOUND); + platformWindowRaw_->TriggerFrames(20); + EXPECT_NEAR(flushEventMock->currentValue_.Value(), 100.0, CUBIC_ERROR_BOUND); + platformWindowRaw_->TriggerFrames(20); + EXPECT_NEAR(flushEventMock->currentValue_.Value(), 200.0, CUBIC_ERROR_BOUND); + platformWindowRaw_->TriggerFrames(40); + EXPECT_NEAR(flushEventMock->currentValue_.Value(), 300.0, CUBIC_ERROR_BOUND); +} + +/** + * @tc.name: SvgAnimateTest008 + * @tc.desc: Verify the property keyframe animation with paced calcMode process for type dimension + * @tc.type: FUNC + * @tc.require: AR000FL0TR + * @tc.author: chenlien + */ +HWTEST_F(SvgAnimateTest, SvgAnimateTest008, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "SvgAnimateTest SvgAnimateTest008 start"; + /** + * @tc.steps: step1. init svg animate and animator + */ + RefPtr> evaluator = AceType::MakeRefPtr>(); + + RefPtr svgAnimate = AceType::MakeRefPtr(); + svgAnimate->SetAttributeName("width"); + svgAnimate->SetBegin(0); + svgAnimate->SetDur(1600); + svgAnimate->SetRepeatCount(1); + svgAnimate->SetFillMode(Fill::FREEZE); + svgAnimate->SetCalcMode(CalcMode::PACED); + std::vector values = { "50", "100", "200", "300" }; + svgAnimate->SetValues(values); + std::vector keyTimes = { 0.0, 0.2, 0.7, 1.0 }; + svgAnimate->SetKeyTimes(keyTimes); + svgAnimate->SetSvgAnimateType(SvgAnimateType::ANIMATE); + auto flushEventMock = + AceType::MakeRefPtr>(Dimension(50.0), evaluator, svgAnimate, context_); + context_->AddPostFlushListener(flushEventMock); + + /** + * @tc.steps: step2. trigger one frame to make prepare animation work + * @tc.expected: step2. postFlush has been called. + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(flushEventMock->currentValue_.Value(), 50.0, CUBIC_ERROR_BOUND); + platformWindowRaw_->TriggerFrames(10); + EXPECT_NEAR(flushEventMock->currentValue_.Value(), 65.1515, CUBIC_ERROR_BOUND); + platformWindowRaw_->TriggerFrames(20); + EXPECT_NEAR(flushEventMock->currentValue_.Value(), 95.4545, CUBIC_ERROR_BOUND); + platformWindowRaw_->TriggerFrames(70); + EXPECT_NEAR(flushEventMock->currentValue_.Value(), 300.0, CUBIC_ERROR_BOUND); +} + +/** + * @tc.name: SvgAnimateTest009 + * @tc.desc: Verify the motion animate + * @tc.type: FUNC + * @tc.require: AR000FL0TS + * @tc.author: chenlien + */ +HWTEST_F(SvgAnimateTest, SvgAnimateTest009, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "SvgAnimateTest SvgAnimateTest009 start"; + /** + * @tc.steps: step1. init svg animate and animator + */ + RefPtr> evaluator = AceType::MakeRefPtr>(); + RefPtr svgAnimate = AceType::MakeRefPtr(); + svgAnimate->SetBegin(0); + svgAnimate->SetDur(1600); + svgAnimate->SetFillMode(Fill::FREEZE); + svgAnimate->SetRepeatCount(1); + svgAnimate->SetCalcMode(CalcMode::LINEAR); + std::vector keyPoints = { "0", "0.5", "1" }; + svgAnimate->SetKeyPoints(keyPoints); + std::vector keyTimes = { 0.0, 0.4, 1.0 }; + svgAnimate->SetKeyTimes(keyTimes); + svgAnimate->SetSvgAnimateType(SvgAnimateType::MOTION); + auto flushEventMock = AceType::MakeRefPtr>(0.0, evaluator, svgAnimate, context_); + context_->AddPostFlushListener(flushEventMock); + + /** + * @tc.steps: step2. trigger one frame to make prepare animation work + * @tc.expected: step2. postFlush has been called. + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(flushEventMock->motionValue_, 0.0, CUBIC_ERROR_BOUND); + platformWindowRaw_->TriggerFrames(10); + EXPECT_NEAR(flushEventMock->motionValue_, 0.125, CUBIC_ERROR_BOUND); + platformWindowRaw_->TriggerFrames(20); + EXPECT_NEAR(flushEventMock->motionValue_, 0.375, CUBIC_ERROR_BOUND); + platformWindowRaw_->TriggerFrames(70); + EXPECT_NEAR(flushEventMock->motionValue_, 1.0, CUBIC_ERROR_BOUND); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/animation/time_event.h b/frameworks/core/animation/time_event.h new file mode 100644 index 00000000..83d57ca1 --- /dev/null +++ b/frameworks/core/animation/time_event.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_TIME_EVENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_TIME_EVENT_H + +#include "base/memory/ace_type.h" + +namespace OHOS::Ace { + +class TimeEvent : public AceType { + DECLARE_ACE_TYPE(TimeEvent, AceType); + +public: + // Called by Animator on each frame. + // timestamp: the time elapsed since the animation start, time unit is millisecond + // normalizedTime: use the time of the overall animation as a unit to normalize the current elapsed time + // only available when inherited by interpolate animation; for Motion, always 0.0 + // reverse: the current animation direction. motion always go forward. + virtual void OnTimestampChanged(float timestamp, float normalizedTime, bool reverse) = 0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_TIME_EVENT_H diff --git a/frameworks/core/common/ace_application_info.cpp b/frameworks/core/common/ace_application_info.cpp new file mode 100644 index 00000000..ff5d951e --- /dev/null +++ b/frameworks/core/common/ace_application_info.cpp @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/common/ace_application_info.h" + +#include + +#include "base/json/json_util.h" +#include "base/log/log.h" +#include "base/utils/string_utils.h" +#include "core/common/ace_page.h" + +namespace OHOS::Ace { + +std::string AceApplicationInfo::GetUnicodeSetting() const +{ + std::vector keyValuePairs; + StringUtils::StringSpliter(keywordsAndValues_, ';', keyValuePairs); + auto keyValuePairsJson = JsonUtil::Create(true); + for (const auto& pair : keyValuePairs) { + // [pair] is like "nu=arab" or "nu=" for most occasions, but may be "=" under extreme scenarios + std::vector res; + StringUtils::StringSpliter(pair, '=', res); + if (res.size() == 0) { + continue; + } + auto value = (res.size() == 2) ? res[1] : ""; + keyValuePairsJson->Put(res[0].c_str(), value.c_str()); + } + return keyValuePairsJson->ToString(); // Return a string in json format +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/common/ace_application_info.h b/frameworks/core/common/ace_application_info.h new file mode 100644 index 00000000..e4c36e13 --- /dev/null +++ b/frameworks/core/common/ace_application_info.h @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_ACE_APPLICATION_INFO_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_ACE_APPLICATION_INFO_H + +#include +#include +#include + +#include "base/json/json_util.h" +#include "base/utils/macros.h" +#include "base/utils/noncopyable.h" +#include "base/utils/string_utils.h" +#include "resource_manager.h" + +namespace OHOS::Ace { + +struct AceBundleInfo { + uint32_t versionCode = 0; + std::string versionName; +}; + +class ACE_EXPORT AceApplicationInfo : public NonCopyable { +public: + ACE_EXPORT static AceApplicationInfo& GetInstance(); + + virtual void SetLocale(const std::string& language, const std::string& countryOrRegion, const std::string& script, + const std::string& keywordsAndValues) = 0; + virtual void ChangeLocale(const std::string& language, const std::string& countryOrRegion) = 0; + virtual std::vector GetLocaleFallback(const std::vector& localeList) const = 0; + virtual std::vector GetResourceFallback(const std::vector& resourceList) const = 0; + virtual bool GetFiles(const std::string& filePath, std::vector& fileList) const = 0; + virtual bool GetFiles(int32_t instanceId, const std::string& filePath, std::vector& fileList) const + { + return false; + }; + void SetUserId(int userId) + { + userId_ = userId; + } + + int GetUserId() const + { + return userId_; + } + + virtual bool GetBundleInfo(const std::string& packageName, AceBundleInfo& bundleInfo) = 0; + virtual double GetLifeTime() const = 0; + virtual std::string GetJsEngineParam(const std::string& key) const = 0; + virtual std::string GetCurrentDeviceResTag() const = 0; + virtual void SetResourceManager(std::shared_ptr& resourceManager) = 0; + + const std::string& GetCountryOrRegion() const + { + return countryOrRegion_; + } + + const std::string& GetLanguage() const + { + return language_; + } + + const std::string& GetScript() const + { + return script_; + } + + std::string GetUnicodeSetting() const; + + bool IsRightToLeft() const + { + return isRightToLeft_; + } + + bool IsDebugVersion() const + { + return isDebugVersion_; + } + + bool IsNeedDebugBreakPoint() const + { + return needDebugBreakpoint_; + } + + void SetCardType() + { + isCardType_ = true; + } + + bool GetIsCardType() const + { + return isCardType_; + } + +protected: + std::string countryOrRegion_; + std::string language_; + std::string script_; + std::string localeTag_; + std::string keywordsAndValues_; + + bool isRightToLeft_ = false; + bool isDebugVersion_ = false; + bool needDebugBreakpoint_ = false; + bool isCardType_ = false; + + int userId_ = 0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_ACE_APPLICATION_INFO_H diff --git a/frameworks/core/common/ace_engine.cpp b/frameworks/core/common/ace_engine.cpp new file mode 100644 index 00000000..b54ae1c8 --- /dev/null +++ b/frameworks/core/common/ace_engine.cpp @@ -0,0 +1,146 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/common/ace_engine.h" + +#include + +#include "base/log/log.h" +#include "core/common/ace_page.h" + +namespace OHOS::Ace { + +static std::unique_ptr g_aceEngine; + +AceEngine::AceEngine() +{ + watchDog_ = AceType::MakeRefPtr(); +} + +AceEngine& AceEngine::Get() +{ + if (!g_aceEngine) { + LOGI("AceEngine initialized in first time"); + g_aceEngine.reset(new AceEngine()); + } + return *g_aceEngine; +} + +void AceEngine::AddContainer(int32_t instanceId, const RefPtr& container) +{ + const auto result = containerMap_.try_emplace(instanceId, container); + if (!result.second) { + LOGW("already have container of this instance id: %{public}d", instanceId); + } +} + +void AceEngine::RemoveContainer(int32_t instanceId) +{ + auto num = containerMap_.erase(instanceId); + if (num == 0) { + LOGW("container not found with instance id: %{public}d", instanceId); + } + watchDog_->Unregister(instanceId); +} + +void AceEngine::Dump(const std::vector& params) const +{ + for (const auto& container : containerMap_) { + auto pipelineContext = container.second->GetPipelineContext(); + pipelineContext->GetTaskExecutor()->PostSyncTask( + [params, container = container.second]() { container->Dump(params); }, TaskExecutor::TaskType::UI); + } +} + +RefPtr AceEngine::GetContainer(int32_t instanceId) +{ + auto container = containerMap_.find(instanceId); + if (container != containerMap_.end()) { + return container->second; + } else { + return nullptr; + } +} + +void AceEngine::RegisterToWatchDog(int32_t instanceId, const RefPtr& taskExecutor) +{ + watchDog_->Register(instanceId, taskExecutor); +} + +void AceEngine::SetPackageName(const std::string& packageName) +{ + packageName_ = packageName; +} + +const std::string& AceEngine::GetPackageName() const +{ + return packageName_; +} + +void AceEngine::SetPackagePath(const std::string& packagePath) +{ + packagePath_ = packagePath; +} + +const std::string& AceEngine::GetPackagePath() const +{ + return packagePath_; +} + +void AceEngine::SetAssetBasePath(const std::string& assetBasePath) +{ + assetBasePathSet_.insert(assetBasePath); +} + +const std::set& AceEngine::GetAssetBasePath() const +{ + return assetBasePathSet_; +} + +RefPtr AceEngine::GetForegroundFrontend() const +{ + for (const auto& [first, second] : containerMap_) { + auto frontend = second->GetFrontend(); + if (frontend && (frontend->GetType() == FrontendType::JS)) { + if (frontend->IsForeground()) { + return frontend; + } + } + } + LOGW("container not found foreground frontend"); + return nullptr; +} + +void AceEngine::SetUid(int32_t uid) +{ + uid_ = uid; +} + +int32_t AceEngine::GetUid() const +{ + return uid_; +} + +void AceEngine::SetProcessName(const std::string& processName) +{ + processName_ = processName; +} + +const std::string& AceEngine::GetProcessName() const +{ + return processName_; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/common/ace_engine.h b/frameworks/core/common/ace_engine.h new file mode 100644 index 00000000..2d148518 --- /dev/null +++ b/frameworks/core/common/ace_engine.h @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_ACE_ENGINE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_ACE_ENGINE_H + +#include +#include +#include + +#include "base/utils/macros.h" +#include "base/utils/noncopyable.h" +#include "core/common/ace_page.h" +#include "core/common/container.h" +#include "core/common/frontend.h" +#include "core/common/watch_dog.h" +#include "core/common/window.h" + +namespace OHOS::Ace { + +class AcePage; + +class ACE_EXPORT AceEngine { +public: + ~AceEngine() = default; + + void AddContainer(int32_t instanceId, const RefPtr& container); + void RemoveContainer(int32_t instanceId); + RefPtr GetContainer(int32_t instanceId); + void RegisterToWatchDog(int32_t instanceId, const RefPtr& taskExecutor); + static AceEngine& Get(); + void Dump(const std::vector& params) const; + void SetPackageName(const std::string& packageName); + const std::string& GetPackageName() const; + void SetPackagePath(const std::string& packagePath); + const std::string& GetPackagePath() const; + void SetAssetBasePath(const std::string& assetBasePath); + const std::set& GetAssetBasePath() const; + RefPtr GetForegroundFrontend() const; + void SetUid(int32_t uid); + int32_t GetUid() const; + void SetProcessName(const std::string& processName); + const std::string& GetProcessName() const; + +private: + AceEngine(); + + std::unordered_map> containerMap_; + RefPtr watchDog_; + std::string packageName_; + std::string packagePath_; + std::set assetBasePathSet_; + int32_t uid_; + std::string processName_; + + ACE_DISALLOW_COPY_AND_MOVE(AceEngine); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_ACE_ENGINE_H diff --git a/frameworks/core/common/ace_page.h b/frameworks/core/common/ace_page.h new file mode 100644 index 00000000..756166ad --- /dev/null +++ b/frameworks/core/common/ace_page.h @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_ACE_PAGE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_ACE_PAGE_H + +#include + +#include "base/memory/ace_type.h" +#include "base/utils/noncopyable.h" +#include "core/components/page/page_component.h" + +namespace OHOS::Ace { + +class Container; + +class AcePage : public virtual AceType { + DECLARE_ACE_TYPE(AcePage, AceType); + +public: + explicit AcePage(int32_t pageId) : pageId_(pageId) {}; + ~AcePage() override = default; + + virtual RefPtr BuildPage(const std::string& content) = 0; + + int32_t GetPageId() const + { + return pageId_; + } + +private: + int32_t pageId_ = 0; + + ACE_DISALLOW_COPY_AND_MOVE(AcePage); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_ACE_PAGE_H diff --git a/frameworks/core/common/ace_view.h b/frameworks/core/common/ace_view.h new file mode 100644 index 00000000..c0ffaf01 --- /dev/null +++ b/frameworks/core/common/ace_view.h @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_ACE_VIEW_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_ACE_VIEW_H + +#include "flutter/lib/ui/window/pointer_data_packet.h" + +#include "base/resource/asset_manager.h" +#include "base/utils/noncopyable.h" +#include "core/common/container.h" +#include "core/common/draw_delegate.h" +#include "core/common/platform_res_register.h" +#include "core/common/platform_window.h" + +namespace OHOS::Ace { + +class AceView { +public: + enum class ViewType : int32_t { + SURFACE_VIEW = 0, + NATIVE_VIEW, + AGP_COMPONENT, + }; + + AceView() = default; + virtual ~AceView() = default; + + virtual void RegisterTouchEventCallback(TouchEventCallback&& callback) = 0; + virtual void RegisterKeyEventCallback(KeyEventCallback&& callback) = 0; + virtual void RegisterMouseEventCallback(MouseEventCallback&& callback) = 0; + virtual void RegisterRotationEventCallback(RotationEventCallBack&& callback) = 0; + virtual void RegisterCardViewPositionCallback(CardViewPositionCallBack&& callback) = 0; + virtual void Launch() = 0; + virtual int32_t GetInstanceId() const = 0; + virtual const RefPtr& GetPlatformResRegister() const = 0; + + using CardViewAccessibilityParamsCallback = std::function; + virtual void RegisterCardViewAccessibilityParamsCallback(CardViewAccessibilityParamsCallback&& callback) = 0; + + using ViewChangeCallback = std::function; + virtual void RegisterViewChangeCallback(ViewChangeCallback&& callback) = 0; + + using DensityChangeCallback = std::function; + virtual void RegisterDensityChangeCallback(DensityChangeCallback&& callback) = 0; + + using SystemBarHeightChangeCallbak = std::function; + virtual void RegisterSystemBarHeightChangeCallback(SystemBarHeightChangeCallbak&& callback) = 0; + + using SurfaceDestroyCallback = std::function; + virtual void RegisterSurfaceDestroyCallback(SurfaceDestroyCallback&& callback) = 0; + + using IdleCallback = std::function; + virtual void RegisterIdleCallback(IdleCallback&& callback) = 0; + + using ViewReleaseCallback = std::function; + using ViewDestoryCallback = std::function; + virtual void RegisterViewDestroyCallback(ViewDestoryCallback&& callback) = 0; + + virtual bool Dump(const std::vector& params) = 0; + + // Use to receive event from glfw window + virtual bool HandleTouchEvent(std::unique_ptr packet) + { + return false; + } + // Use to receive event from pc previewer + virtual bool HandleTouchEvent(const TouchPoint& touchEvent) + { + return false; + } + + virtual ViewType GetViewType() const = 0; + virtual std::unique_ptr GetDrawDelegate() = 0; + virtual std::unique_ptr GetPlatformWindow() = 0; + virtual void UpdateWindowBlurRegion(const std::vector>& blurRRects) {}; + virtual void UpdateWindowblurDrawOp() {}; + + void SetBackgroundColor(const Color& color) + { + backgroundColor_ = color; + } + + const Color& GetBackgroundColor() const + { + return backgroundColor_; + } + +private: + Color backgroundColor_; + + ACE_DISALLOW_COPY_AND_MOVE(AceView); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_ACE_VIEW_H diff --git a/frameworks/core/common/clipboard/clipboard.h b/frameworks/core/common/clipboard/clipboard.h new file mode 100644 index 00000000..2a0d535c --- /dev/null +++ b/frameworks/core/common/clipboard/clipboard.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_CLIPBOARD_CLIPBOARD_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_CLIPBOARD_CLIPBOARD_H + +#include "base/memory/ace_type.h" +#include "base/thread/task_executor.h" + +namespace OHOS::Ace { + +class Clipboard : public AceType { + DECLARE_ACE_TYPE(Clipboard, AceType); + +public: + ~Clipboard() override = default; + + virtual void SetData(const std::string& data) = 0; + virtual void GetData(const std::function& callback) = 0; + virtual void Clear() = 0; + +protected: + explicit Clipboard(const RefPtr& taskExecutor) : taskExecutor_(taskExecutor) {} + RefPtr taskExecutor_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_CLIPBOARD_CLIPBOARD_H diff --git a/frameworks/core/common/clipboard/clipboard_interface.h b/frameworks/core/common/clipboard/clipboard_interface.h new file mode 100644 index 00000000..0468990d --- /dev/null +++ b/frameworks/core/common/clipboard/clipboard_interface.h @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_CLIPBOARD_CLIPBOARD_INTERFACE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_CLIPBOARD_CLIPBOARD_INTERFACE_H + +#include "base/memory/referenced.h" +#include "base/thread/task_executor.h" +#include "core/common/clipboard/clipboard.h" + +namespace OHOS::Ace { + +class ClipboardInterface { +public: + virtual ~ClipboardInterface() = default; + + virtual RefPtr GetClipboard(const RefPtr& taskExecutor) const = 0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_CLIPBOARD_CLIPBOARD_INTERFACE_H diff --git a/frameworks/core/common/clipboard/clipboard_proxy.cpp b/frameworks/core/common/clipboard/clipboard_proxy.cpp new file mode 100644 index 00000000..abcc0ef1 --- /dev/null +++ b/frameworks/core/common/clipboard/clipboard_proxy.cpp @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/common/clipboard/clipboard_proxy.h" + +namespace OHOS::Ace { + +ClipboardProxy::ClipboardProxy() = default; + +ClipboardProxy::~ClipboardProxy() = default; + +void ClipboardProxy::SetDelegate(std::unique_ptr&& delegate) +{ + delegate_ = std::move(delegate); +} + +RefPtr ClipboardProxy::GetClipboard(const RefPtr& taskExecutor) const +{ + if (!delegate_) { + return nullptr; + } + return delegate_->GetClipboard(taskExecutor); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/common/clipboard/clipboard_proxy.h b/frameworks/core/common/clipboard/clipboard_proxy.h new file mode 100644 index 00000000..65800757 --- /dev/null +++ b/frameworks/core/common/clipboard/clipboard_proxy.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_CLIPBOARD_CLIPBOARD_PROXY_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_CLIPBOARD_CLIPBOARD_PROXY_H + +#include "base/utils/singleton.h" +#include "core/common/clipboard/clipboard_interface.h" + +namespace OHOS::Ace { + +class ClipboardProxy : public Singleton, public ClipboardInterface { + DECLARE_SINGLETON(ClipboardProxy); + +public: + void SetDelegate(std::unique_ptr&& delegate); + RefPtr GetClipboard(const RefPtr& taskExecutor) const override; + +private: + std::unique_ptr delegate_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_CLIPBOARD_CLIPBOARD_PROXY_H diff --git a/frameworks/core/common/container.h b/frameworks/core/common/container.h new file mode 100644 index 00000000..918c830c --- /dev/null +++ b/frameworks/core/common/container.h @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_CONTAINER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_CONTAINER_H + +#include "base/memory/ace_type.h" +#include "base/resource/asset_manager.h" +#include "base/resource/shared_image_manager.h" +#include "base/thread/task_executor.h" +#include "base/utils/noncopyable.h" +#include "core/common/frontend.h" +#include "core/common/platform_res_register.h" +#include "core/common/window.h" +#include "core/pipeline/pipeline_context.h" + +namespace OHOS::Ace { + +using PageTask = std::function; +using TouchEventCallback = std::function; +using KeyEventCallback = std::function; +using MouseEventCallback = std::function; +using RotationEventCallBack = std::function; +using CardViewPositionCallBack = std::function; + +class Container : public virtual AceType { + DECLARE_ACE_TYPE(Container, AceType); + +public: + Container() = default; + ~Container() override = default; + + // Get the instance id of this container + virtual int32_t GetInstanceId() const = 0; + + // Get the package path of this container + virtual std::string GetPackagePath() const + { + return ""; + }; + + // Get the ability name of this container + virtual std::string GetHostClassName() const = 0; + + // Get the frontend of container + virtual RefPtr GetFrontend() const = 0; + + // Get task executor. + virtual RefPtr GetTaskExecutor() const = 0; + + // Get assert manager. + virtual RefPtr GetAssetManager() const = 0; + + // Get platform resource register. + virtual RefPtr GetPlatformResRegister() const = 0; + + // Get the pipelineContext of container. + virtual RefPtr GetPipelineContext() const = 0; + + // Dump container. + virtual bool Dump(const std::vector& params) = 0; + +private: + ACE_DISALLOW_COPY_AND_MOVE(Container); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_CONTAINER_H diff --git a/frameworks/core/common/draw_delegate.h b/frameworks/core/common/draw_delegate.h new file mode 100644 index 00000000..e1c86d90 --- /dev/null +++ b/frameworks/core/common/draw_delegate.h @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_DRAW_DELEGATE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_DRAW_DELEGATE_H + +#include "core/pipeline/layers/layer.h" + +namespace OHOS::Ace { + +class DrawDelegate { +public: + using DoDrawFrame = std::function&, const Rect&)>; + using DoDrawLastFrame = std::function; + + DrawDelegate() = default; + ~DrawDelegate() = default; + + void DrawFrame(RefPtr& rootLayer, const Rect& dirty) + { + if (doDrawFrameCallback_) { + doDrawFrameCallback_(rootLayer, dirty); + } + } + + void DrawLastFrame(const Rect& dirty) + { + if (doDrawLastFrameCallback_) { + doDrawLastFrameCallback_(dirty); + } + } + + void SetDrawFrameCallback(DoDrawFrame&& doFrameCallback) + { + doDrawFrameCallback_ = doFrameCallback; + } + + void SetDrawFrameRepeatCallback(DoDrawLastFrame&& doFrameCallback) + { + doDrawLastFrameCallback_ = doFrameCallback; + } + +private: + DoDrawFrame doDrawFrameCallback_; + DoDrawLastFrame doDrawLastFrameCallback_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_DRAW_DELEGATE_H diff --git a/frameworks/core/common/event_manager.cpp b/frameworks/core/common/event_manager.cpp new file mode 100644 index 00000000..3a1fe783 --- /dev/null +++ b/frameworks/core/common/event_manager.cpp @@ -0,0 +1,153 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/common/event_manager.h" + +#include "base/log/ace_trace.h" +#include "core/gestures/gesture_referee.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +void EventManager::TouchTest( + const TouchPoint& touchPoint, const RefPtr& renderNode, const TouchRestrict& touchRestrict) +{ + ACE_FUNCTION_TRACE(); + if (!renderNode) { + LOGW("renderNode is null."); + return; + } + // first clean. + GestureReferee::GetInstance().CleanGestureScope(touchPoint.id); + // collect + TouchTestResult hitTestResult; + const Point point { touchPoint.x, touchPoint.y }; + // For root node, the parent local point is the same as global point. + renderNode->TouchTest(point, point, touchRestrict, hitTestResult); + if (hitTestResult.empty()) { + LOGI("hit test result is empty"); + } + touchTestResults_[touchPoint.id] = std::move(hitTestResult); +} + +bool EventManager::DispatchTouchEvent(const TouchPoint& point) +{ + ACE_FUNCTION_TRACE(); + const auto iter = touchTestResults_.find(point.id); + if (iter != touchTestResults_.end()) { + bool dispatchSuccess = true; + for (auto entry = iter->second.rbegin(); entry != iter->second.rend(); ++entry) { + if (!(*entry)->DispatchEvent(point)) { + dispatchSuccess = false; + break; + } + } + // If one gesture recognizer has already been won, other gesture recognizers will still be affected by + // the event, each recognizer needs to filter the extra events by itself. + if (dispatchSuccess) { + for (const auto& entry : iter->second) { + if (!entry->HandleEvent(point)) { + break; + } + } + } + if (point.type == TouchType::UP) { + GestureReferee::GetInstance().AdjudicateGestureSequence(point.id); + } else if (point.type == TouchType::CANCEL) { + GestureReferee::GetInstance().CleanGestureScope(point.id); + } + return true; + } + LOGI("the %{public}d touch test result does not exist!", point.id); + return false; +} + +bool EventManager::DispatchKeyEvent(const KeyEvent& event, const RefPtr& focusNode) +{ + if (!focusNode) { + LOGW("focusNode is null."); + return false; + } + LOGD("The key code is %{public}d, the key action is %{public}d, the repeat time is %{public}d.", event.code, + event.action, event.repeatTime); + if (!focusNode->HandleKeyEvent(event)) { + LOGD("use platform to handle this event"); + return false; + } + return true; +} + +void EventManager::MouseTest(const MouseEvent& event, const RefPtr& renderNode) +{ + if (!renderNode) { + LOGW("renderNode is null."); + return; + } + MouseTestResult hitTestResult; + + const Point point { event.x, event.y }; + // For root node, the parent local point is the same as global point. + renderNode->MouseTest(point, point, hitTestResult); + if (hitTestResult.empty()) { + LOGI("mouse test result is empty"); + } + mouseTestResults_[event.GetId()] = std::move(hitTestResult); +} + +void EventManager::MouseHoverTest(const MouseEvent& event, const RefPtr& renderNode) +{ + if (!renderNode) { + LOGW("renderNode is null."); + return; + } + const Point point { event.x, event.y }; + renderNode->MouseHoverTest(point); +} + +bool EventManager::DispatchRotationEvent( + const RotationEvent& event, const RefPtr& renderNode, const RefPtr& requestFocusNode) +{ + if (!renderNode) { + LOGW("renderNode is null."); + return false; + } + + if (requestFocusNode && renderNode->RotationMatchTest(requestFocusNode)) { + LOGD("RotationMatchTest: dispatch rotation to request node."); + return requestFocusNode->RotationTestForward(event); + } else { + LOGD("RotationMatchTest: dispatch rotation to statck render node."); + return renderNode->RotationTest(event); + } +} + +bool EventManager::DispatchMouseEvent(const MouseEvent& event) +{ + const auto iter = mouseTestResults_.find(event.GetId()); + if (iter != mouseTestResults_.end()) { + // If one mouse recognizer has already been won, other mouse recognizers will still be affected by + // the event, each recognizer needs to filter the extra events by itself. + for (const auto& entry : iter->second) { + entry->HandleEvent(event); + } + + return true; + } + + LOGI("the %{public}d mouse test result does not exist!", event.GetId()); + return false; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/common/event_manager.h b/frameworks/core/common/event_manager.h new file mode 100644 index 00000000..d87a55cd --- /dev/null +++ b/frameworks/core/common/event_manager.h @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_EVENT_MANAGER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_EVENT_MANAGER_H + +#include + +#include "base/memory/ace_type.h" +#include "core/event/key_event.h" +#include "core/event/mouse_event.h" +#include "core/event/rotation_event.h" +#include "core/focus/focus_node.h" +#include "core/gestures/touch_event.h" + +namespace OHOS::Ace { + +class RenderNode; + +class EventManager { +public: + // After the touch down event is triggered, the touch test is performed to collect the corresponding + // touch event target list. + void TouchTest( + const TouchPoint& touchPoint, const RefPtr& renderNode, const TouchRestrict& touchRestrict); + + bool DispatchTouchEvent(const TouchPoint& point); + + // Distribute the key event to the corresponding root node. If the root node is not processed, return false and the + // platform will handle it. + static bool DispatchKeyEvent(const KeyEvent& event, const RefPtr& focusNode); + + // Distribute the rotation event to the corresponding render tree or requested render node. If the render is not + // processed, return false and the platform will handle it. + static bool DispatchRotationEvent(const RotationEvent& event, const RefPtr& renderNode, + const RefPtr& requestFocusNode); + + // mouse event target list. + void MouseTest(const MouseEvent& touchPoint, const RefPtr& renderNode); + static void MouseHoverTest(const MouseEvent& touchPoint, const RefPtr& renderNode); + + bool DispatchMouseEvent(const MouseEvent& event); + +private: + std::unordered_map touchTestResults_; + std::unordered_map mouseTestResults_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_EVENT_MANAGER_H diff --git a/frameworks/core/common/focus_animation_manager.cpp b/frameworks/core/common/focus_animation_manager.cpp new file mode 100644 index 00000000..ca268980 --- /dev/null +++ b/frameworks/core/common/focus_animation_manager.cpp @@ -0,0 +1,268 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/common/focus_animation_manager.h" + +#include "core/components/focus_animation/render_focus_animation.h" +#include "core/components/shadow/render_shadow.h" +#include "core/components/shadow/shadow_element.h" +#include "core/components/stack/stack_element.h" + +namespace OHOS::Ace { + +void FocusAnimationManager::SetFocusAnimationProperties( + const RRect& rrect, const Color& color, const Offset& offset, bool isIndented) const +{ + if (focusAnimationStack_.empty() || (useRoot_ && rootFocusAnimationStack_.empty())) { + LOGE("focus animation stack is empty"); + return; + } + auto focusAnimation = useRoot_ ? rootFocusAnimationStack_.top().Upgrade() : focusAnimationStack_.top().Upgrade(); + if (!focusAnimation) { + LOGE("focusAnimation get failed"); + return; + } + if (useRoot_) { + auto renderFocusAnimation = focusAnimationStack_.top().Upgrade(); + if (renderFocusAnimation) { + renderFocusAnimation->CancelFocusAnimation(); + } + } + focusAnimation->SetFocusAnimationProperties(rrect, color, offset, isIndented); +} + +void FocusAnimationManager::SetAvailableRect(const Rect& paintRect) +{ + availableRect_ = paintRect; +} + +void FocusAnimationManager::CancelFocusAnimation() const +{ + if (focusAnimationStack_.empty() || (useRoot_ && rootFocusAnimationStack_.empty())) { + LOGE("focus animation stack is empty"); + return; + } + auto focusAnimation = useRoot_ ? rootFocusAnimationStack_.top().Upgrade() : focusAnimationStack_.top().Upgrade(); + if (!focusAnimation) { + LOGE("focusAnimation get failed"); + return; + } + focusAnimation->CancelFocusAnimation(); +} + +void FocusAnimationManager::PushFocusAnimationElement(const RefPtr& element) +{ + auto focusElement = AceType::DynamicCast(element); + if (!focusElement) { + LOGE("fail to get FocusAnimationElement"); + return; + } + auto renderFocus = AceType::DynamicCast(focusElement->GetRenderNode()); + if (!renderFocus) { + LOGE("fail to get RenderFocusAnimation"); + return; + } + renderFocus->SetPaintRect(availableRect_); + if (focusElement->IsRoot()) { + if (!rootFocusAnimationStack_.empty()) { + auto focusAnimation = rootFocusAnimationStack_.top().Upgrade(); + if (focusAnimation) { + focusAnimation->CancelFocusAnimation(); + } + } + rootFocusAnimationStack_.push(renderFocus); + } else { + if (!focusAnimationStack_.empty()) { + auto focusAnimation = focusAnimationStack_.top().Upgrade(); + if (focusAnimation) { + focusAnimation->CancelFocusAnimation(); + } + } + focusAnimationStack_.push(renderFocus); + } +} + +void FocusAnimationManager::PopFocusAnimationElement() +{ + if (focusAnimationStack_.empty()) { + LOGE("focus animation stack is empty"); + return; + } + focusAnimationStack_.pop(); + if (!focusAnimationStack_.empty()) { + auto focusAnimation = focusAnimationStack_.top().Upgrade(); + if (!useRoot_ && focusAnimation) { + focusAnimation->StartFocusAnimation(); + } + } +} + +void FocusAnimationManager::PopRootFocusAnimationElement() +{ + if (rootFocusAnimationStack_.empty()) { + LOGE("focus animation stack is empty"); + return; + } + rootFocusAnimationStack_.pop(); +} + +void FocusAnimationManager::StartFocusAnimation() const +{ + if (focusAnimationStack_.empty()) { + LOGE("focus animation stack is empty"); + return; + } + auto focusAnimation = focusAnimationStack_.top().Upgrade(); + if (!focusAnimation) { + LOGE("focusAnimation get failed"); + return; + } + focusAnimation->StartFocusAnimation(); +} + +void FocusAnimationManager::StopFocusAnimation() const +{ + if (focusAnimationStack_.empty()) { + LOGE("focus animation stack is empty"); + return; + } + auto focusAnimation = focusAnimationStack_.top().Upgrade(); + if (!focusAnimation) { + LOGE("focusAnimation get failed"); + return; + } + focusAnimation->StopFocusAnimation(); +} + +void FocusAnimationManager::SetFocusAnimationProperties( + const RRect& rrect, const Color& color, const Offset& offset, const Rect& clipRect) const +{ + if (focusAnimationStack_.empty()) { + LOGE("focus animation stack is empty"); + return; + } + auto focusAnimation = focusAnimationStack_.top().Upgrade(); + if (!focusAnimation) { + LOGE("focusAnimation get failed"); + return; + } + focusAnimation->SetFocusAnimationProperties(rrect, color, offset, clipRect); +} + +void FocusAnimationManager::PushShadow(const RefPtr& element) +{ + auto shadowElement = AceType::DynamicCast(element); + if (!shadowElement) { + LOGE("fail to get shadowElement"); + return; + } + auto renderShadow = AceType::DynamicCast(shadowElement->GetRenderNode()); + if (!renderShadow) { + LOGE("fail to get renderShadow"); + return; + } + shadowStack_.push(renderShadow); +} + +void FocusAnimationManager::PopShadow() +{ + if (shadowStack_.empty()) { + LOGE("shadow stack is empty"); + return; + } + shadowStack_.pop(); +} + +void FocusAnimationManager::SetShadowProperties(const RRect& rrect, const Offset& offset) +{ + if (shadowStack_.empty()) { + LOGE("shadow stack is empty"); + return; + } + auto shadow = shadowStack_.top().Upgrade(); + if (!shadow) { + LOGE("shadow get failed"); + return; + } + shadow->SetShadowProperties(rrect, offset); +} + +void FocusAnimationManager::SetShadowProperties(const RRect& rrect, const Offset& offset, const Rect& clipRect) +{ + if (shadowStack_.empty()) { + LOGE("shadow stack is empty"); + return; + } + auto shadow = shadowStack_.top().Upgrade(); + if (!shadow) { + LOGE("shadow get failed"); + return; + } + shadow->SetShadowProperties(rrect, offset, clipRect); +} + +void FocusAnimationManager::CancelShadow() const +{ + if (shadowStack_.empty()) { + LOGE("shadow stack is empty"); + return; + } + auto shadow = shadowStack_.top().Upgrade(); + if (!shadow) { + LOGE("shadow get failed"); + return; + } + shadow->CancelShadow(); +} + +RefPtr FocusAnimationManager::GetRenderFocusAnimation() const +{ + if (focusAnimationStack_.empty() || (useRoot_ && rootFocusAnimationStack_.empty())) { + return nullptr; + } + auto focusAnimation = useRoot_ ? rootFocusAnimationStack_.top().Upgrade() : focusAnimationStack_.top().Upgrade(); + if (!focusAnimation) { + LOGE("focusAnimation get failed"); + return nullptr; + } + return focusAnimation; +} + +void FocusAnimationManager::SetUseRoot(bool useRoot) +{ + useRoot_ = useRoot; + if (!useRoot_ && !rootFocusAnimationStack_.empty()) { + auto focusAnimation = rootFocusAnimationStack_.top().Upgrade(); + if (focusAnimation) { + focusAnimation->CancelFocusAnimation(); + } + } +} + +void FocusAnimationManager::SetIsKeyEvent(bool isKeyEvent) +{ + if (focusAnimationStack_.empty() || (useRoot_ && rootFocusAnimationStack_.empty())) { + LOGE("focus animation stack is empty"); + return; + } + auto focusAnimation = useRoot_ ? rootFocusAnimationStack_.top().Upgrade() : focusAnimationStack_.top().Upgrade(); + if (!focusAnimation) { + LOGE("focusAnimation get failed"); + return; + } + focusAnimation->SetIsKeyEvent(isKeyEvent); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/common/focus_animation_manager.h b/frameworks/core/common/focus_animation_manager.h new file mode 100644 index 00000000..7acb5991 --- /dev/null +++ b/frameworks/core/common/focus_animation_manager.h @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_FOCUS_ANIMATION_MANAGER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_FOCUS_ANIMATION_MANAGER_H + +#include + +#include "base/geometry/rrect.h" +#include "base/memory/ace_type.h" +#include "core/components/common/properties/color.h" + +namespace OHOS::Ace { + +class Element; +class RenderFocusAnimation; +class RenderShadow; + +class FocusAnimationManager : public virtual AceType { + DECLARE_ACE_TYPE(FocusAnimationManager, AceType); + +public: + FocusAnimationManager() = default; + ~FocusAnimationManager() override = default; + + void SetFocusAnimationProperties( + const RRect& rrect, const Color& color, const Offset& offset, bool isIndented) const; + void SetFocusAnimationProperties( + const RRect& rrect, const Color& color, const Offset& offset, const Rect& clipRect) const; + void SetAvailableRect(const Rect& paintRect); + void CancelFocusAnimation() const; + void PushFocusAnimationElement(const RefPtr& element); + void PopFocusAnimationElement(); + void PopRootFocusAnimationElement(); + void PushShadow(const RefPtr& element); + void PopShadow(); + void StartFocusAnimation() const; + void StopFocusAnimation() const; + void SetShadowProperties(const RRect& rrect, const Offset& offset); + void SetShadowProperties(const RRect& rrect, const Offset& offset, const Rect& clipRect); + void CancelShadow() const; + void SetUseRoot(bool useRoot); + void SetIsKeyEvent(bool isKeyEvent); + RefPtr GetRenderFocusAnimation() const; + +private: + Rect availableRect_; + bool useRoot_ = false; + std::stack> rootFocusAnimationStack_; + std::stack> focusAnimationStack_; + std::stack> shadowStack_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_FOCUS_ANIMATION_MANAGER_H diff --git a/frameworks/core/common/font_loader.cpp b/frameworks/core/common/font_loader.cpp new file mode 100644 index 00000000..cd455f76 --- /dev/null +++ b/frameworks/core/common/font_loader.cpp @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/common/font_loader.h" + +namespace OHOS::Ace { + +FontLoader::FontLoader(const std::string& familyName, const std::string& familySrc) + : familyName_(familyName), familySrc_(familySrc) {}; + +const std::string& FontLoader::GetFamilyName() const +{ + return familyName_; +} + +void FontLoader::SetOnLoaded(const WeakPtr& node, const std::function& callback) +{ + if (!callback) { + return; + } + if (isLoaded_) { + callback(); + } else { + callbacks_.emplace(node, callback); + } +} + +void FontLoader::RemoveCallback(const WeakPtr& node) +{ + callbacks_.erase(node); +} + +void FontLoader::SetVariationChanged(const std::function& variationChanged) +{ + variationChanged_ = variationChanged; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/common/font_loader.h b/frameworks/core/common/font_loader.h new file mode 100644 index 00000000..fb25e761 --- /dev/null +++ b/frameworks/core/common/font_loader.h @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_FONT_LOADER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_FONT_LOADER_H + +#include "base/memory/ace_type.h" +#include "core/pipeline/pipeline_context.h" + +namespace OHOS::Ace { + +class FontLoader : public virtual AceType { + DECLARE_ACE_TYPE(FontLoader, AceType); + +public: + FontLoader(const std::string& familyName, const std::string& familySrc); + ~FontLoader() override = default; + + virtual void AddFont(const RefPtr& context) = 0; + + static RefPtr Create(const std::string& familyName, const std::string& familySrc); + + const std::string& GetFamilyName() const; + void SetOnLoaded(const WeakPtr& node, const std::function& callback); + void RemoveCallback(const WeakPtr& node); + void SetVariationChanged(const std::function& variationChanged); + +protected: + std::string familyName_; + std::string familySrc_; + std::map, std::function> callbacks_; + bool isLoaded_ = false; + std::function variationChanged_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_FONT_LOADER_H diff --git a/frameworks/core/common/font_manager.cpp b/frameworks/core/common/font_manager.cpp new file mode 100644 index 00000000..fe5a6bc5 --- /dev/null +++ b/frameworks/core/common/font_manager.cpp @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/common/font_manager.h" + +#include "core/components/text/render_text.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +float FontManager::fontWeightScale_ = 1.0f; + +void FontManager::RegisterFont( + const std::string& familyName, const std::string& familySrc, const RefPtr& context) +{ + if (std::find(std::begin(fontNames_), std::end(fontNames_), familyName) == std::end(fontNames_)) { + fontNames_.emplace_back(familyName); + } + + for (auto iter = fontLoaders_.begin(); iter != fontLoaders_.end(); ++iter) { + auto& fontLoader = *iter; + if (fontLoader->GetFamilyName() == familyName) { + LOGI("Font is already loaded!"); + return; + } + } + RefPtr fontLoader = FontLoader::Create(familyName, familySrc); + fontLoaders_.emplace_back(fontLoader); + fontLoader->AddFont(context); + + fontLoader->SetVariationChanged([weak = WeakClaim(this), familyName]() { + auto fontManager = weak.Upgrade(); + if (fontManager) { + fontManager->VaryFontCollectionWithFontWeightScale(); + } + }); +} + +void FontManager::RegisterCallback( + const WeakPtr& node, const std::string& familyName, const std::function& callback) +{ + if (!callback) { + return; + } + for (auto& fontLoader : fontLoaders_) { + if (fontLoader->GetFamilyName() == familyName) { + fontLoader->SetOnLoaded(node, callback); + } + } +} + +const std::vector& FontManager::GetFontNames() const +{ + return fontNames_; +} + +void FontManager::AddFontNode(const WeakPtr& node) +{ + if (fontNodes_.find(node) == fontNodes_.end()) { + fontNodes_.emplace(node); + } +} + +void FontManager::RemoveFontNode(const WeakPtr& node) +{ + fontNodes_.erase(node); +} + +void FontManager::RebuildFontNode() +{ + for (auto iter = fontNodes_.begin(); iter != fontNodes_.end();) { + auto fontNode = iter->Upgrade(); + if (fontNode) { + fontNode->MarkNeedLayout(); + ++iter; + } else { + iter = fontNodes_.erase(iter); + } + } +} + +void FontManager::UnRegisterCallback(const WeakPtr& node) +{ + for (auto& fontLoader : fontLoaders_) { + fontLoader->RemoveCallback(node); + } +} + +void FontManager::UpdateFontWeightScale() +{ + float fontWeightScale = SystemProperties::GetFontWeightScale(); + if (!NearEqual(fontWeightScale, fontWeightScale_)) { + fontWeightScale_ = fontWeightScale; + VaryFontCollectionWithFontWeightScale(); + } +} + +void FontManager::AddVariationNode(const WeakPtr& node) +{ + if (variationNodes_.find(node) == variationNodes_.end()) { + variationNodes_.emplace(node); + } +} + +void FontManager::RemoveVariationNode(const WeakPtr& node) +{ + variationNodes_.erase(node); +} + +void FontManager::NotifyVariationNodes() +{ + for (const auto& node : variationNodes_) { + auto refNode = node.Upgrade(); + if (refNode) { + auto text = DynamicCast(refNode); + if (text) { + text->MarkNeedMeasure(); + } + refNode->MarkNeedLayout(); + } + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/common/font_manager.h b/frameworks/core/common/font_manager.h new file mode 100644 index 00000000..bbfe12ba --- /dev/null +++ b/frameworks/core/common/font_manager.h @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_FONT_MANAGER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_FONT_MANAGER_H + +#include +#include +#include + +#include "base/memory/ace_type.h" +#include "core/common/font_loader.h" +#include "core/pipeline/pipeline_context.h" + +namespace OHOS::Ace { + +class FontManager : public virtual AceType { + DECLARE_ACE_TYPE(FontManager, AceType); + +public: + FontManager() = default; + ~FontManager() override = default; + + virtual void VaryFontCollectionWithFontWeightScale() = 0; + + static RefPtr Create(); + + void RegisterFont( + const std::string& familyName, const std::string& familySrc, const RefPtr& context); + void RegisterCallback( + const WeakPtr& node, const std::string& familyName, const std::function& callback); + void UnRegisterCallback(const WeakPtr& node); + const std::vector& GetFontNames() const; + void AddFontNode(const WeakPtr& node); + void RemoveFontNode(const WeakPtr& node); + void RebuildFontNode(); + void UpdateFontWeightScale(); + void AddVariationNode(const WeakPtr& node); + void RemoveVariationNode(const WeakPtr& node); + void NotifyVariationNodes(); + +protected: + static float fontWeightScale_; + +private: + std::list> fontLoaders_; + std::vector fontNames_; + std::set> fontNodes_; + // Render nodes need to layout when wght scale is changed. + std::set> variationNodes_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_FONT_MANAGER_H diff --git a/frameworks/core/common/frontend.h b/frameworks/core/common/frontend.h new file mode 100644 index 00000000..cd2a03b9 --- /dev/null +++ b/frameworks/core/common/frontend.h @@ -0,0 +1,166 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_FRONTEND_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_FRONTEND_H + +#include "base/memory/ace_type.h" +#include "base/utils/macros.h" +#include "core/accessibility/accessibility_manager.h" +#include "core/common/ace_page.h" +#include "core/common/js_message_dispatcher.h" +#include "core/event/ace_event_handler.h" +#include "core/pipeline/pipeline_context.h" +#include "frameworks/base/utils/device_config.h" + +namespace OHOS::Ace { + +#ifndef WEARABLE_PRODUCT +constexpr int32_t DEFAULT_DESIGN_WIDTH = 720; +#else +constexpr int32_t DEFAULT_DESIGN_WIDTH = 454; +#endif + +// Window config of frontend. +struct WindowConfig { + // NOT runtime real design width, this is config value set by user. + // Runtime design width should be considered together with autoDesignWidth. + int32_t designWidth = DEFAULT_DESIGN_WIDTH; + bool autoDesignWidth = false; + bool useLiteStyle = false; + int32_t minSdkVersion = 1; + bool boxWrap = false; +}; + +enum class FrontendType { JSON, JS, JS_CARD, DECLARATIVE_JS }; + +class ACE_EXPORT Frontend : public AceType { + DECLARE_ACE_TYPE(Frontend, AceType); + +public: + Frontend() = default; + ~Frontend() override = default; + + enum class State { ON_CREATE, ON_DESTROY }; + + static RefPtr Create(); + static RefPtr CreateDefault(); + + virtual bool Initialize(FrontendType type, const RefPtr& taskExecutor) = 0; + + virtual void AttachPipelineContext(const RefPtr& context) = 0; + + virtual void SetAssetManager(const RefPtr& assetManager) = 0; + + virtual void AddPage(const RefPtr& page) = 0; + + virtual RefPtr GetPage(int32_t pageId) const = 0; + + virtual void RunPage(int32_t pageId, const std::string& content, const std::string& params) = 0; + + virtual void PushPage(const std::string& url, const std::string& params) = 0; + + // Gets front-end event handler to handle ace event. + virtual RefPtr GetEventHandler() = 0; + + // Get window config of front end, which is used to calculate the pixel ratio of the real device. + virtual const WindowConfig& GetWindowConfig() const = 0; + + virtual FrontendType GetType() = 0; + + // inform the frontend that onCreate or onDestroy + virtual void UpdateState(State) = 0; + + // dump frontend info + virtual void DumpFrontend() const = 0; + + // send the message by js callback + virtual void SendCallbackMessage(const std::string& callbackId, const std::string& data) const = 0; + + // set the message transfer to js instance + virtual void SetJsMessageDispatcher(const RefPtr& transfer) const = 0; + + // transfer data back from platform side to component side + virtual void TransferComponentResponseData(int32_t callbackId, int32_t code, std::vector&& data) const = 0; + + // transfer data back from platform side to js side + virtual void TransferJsResponseData(int32_t callbackId, int32_t code, std::vector&& data) const = 0; + + // transfer error message get in plugin from platform side to js side + virtual void TransferJsPluginGetError(int32_t callbackId, int32_t errorCode, std::string&& errorMessage) const = 0; + + // transfer event data from platform side to js side + virtual void TransferJsEventData(int32_t callbackId, int32_t code, std::vector&& data) const = 0; + + // get js code from plugin and load in js engine + virtual void LoadPluginJsCode(std::string&& jsCode) const = 0; + + // when this is foreground frontend + virtual bool IsForeground() = 0; + + // get accessibility manager handler. + virtual RefPtr GetAccessibilityManager() const = 0; + + // when back pressed + virtual bool OnBackPressed() = 0; + + // when interface show up + virtual void OnShow() = 0; + + // when interface hide + virtual void OnHide() = 0; + + // when configuration update + virtual void OnConfigurationUpdated(const std::string& data) {}; + + // when front on active + virtual void OnActive() = 0; + + // when front on inactive + virtual void OnInactive() = 0; + + // when front on asks a user whether to start the migration + virtual bool OnStartContinuation() = 0; + + // when front on a local ability migration is complete + virtual void OnCompleteContinuation(int32_t code) = 0; + + // interface to save the user data + virtual void OnSaveData(std::string& data) = 0; + + // interface to restores the user data on the remote device + virtual bool OnRestoreData(const std::string& data) = 0; + + // start the ability when it's running + virtual void OnNewRequest(const std::string& data) = 0; + + // call router back + virtual void CallRouterBack() = 0; + + virtual void OnSurfaceChanged(int32_t width, int32_t height) = 0; + + virtual void TriggerGarbageCollection() {}; + + virtual void RebuildAllPages() {}; + + virtual void SetColorMode(ColorMode colorMode) {}; + + // navigator component call router + virtual void NavigatePage(uint8_t type, const std::string& url) {}; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_FRONTEND_H diff --git a/frameworks/core/common/ime/constant.h b/frameworks/core/common/ime/constant.h new file mode 100644 index 00000000..8c64e925 --- /dev/null +++ b/frameworks/core/common/ime/constant.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_IME_CONSTANT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_IME_CONSTANT_H + +namespace OHOS::Ace { + +// Invalid client id. +constexpr int32_t IME_CLIENT_ID_NONE = 0; +// Where client id start from. +constexpr int32_t IME_CLIENT_ID_START = 1; + +enum class TextAffinity { + // The affinity of [upstream], which means the caret is tightly beside prev glyphs. + // For example, we have a text named "abcde", and assume extent=3, it will result in the offset after 'c' + // rather than before 'd'. + // In most cases it doesn't matter much, but it matters if 'c' and 'd' have different style. + UPSTREAM, + DOWNSTREAM, +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_IME_CONSTANT_H diff --git a/frameworks/core/common/ime/text_edit_controller.h b/frameworks/core/common/ime/text_edit_controller.h new file mode 100644 index 00000000..fbac1d5e --- /dev/null +++ b/frameworks/core/common/ime/text_edit_controller.h @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_IME_TEXT_EDIT_CONTROLLER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_IME_TEXT_EDIT_CONTROLLER_H + +#include + +#include "base/utils/value_change_notifier.h" +#include "core/common/ime/text_editing_value.h" + +namespace OHOS::Ace { + +class TextEditController : public ValueChangeNotifier { +public: + void SetText(const std::string& newText, bool needFireChangeEvent = true) + { + auto value = GetValue(); + value.text = newText; + // Default set selection to the end of text is more consistent with the intuition of user. + value.selection.Update(value.GetWideText().length()); + SetValue(std::move(value), needFireChangeEvent); + } + + void SetSelection(const TextSelection& selection) + { + auto value = GetValue(); + value.selection = selection; + SetValue(std::move(value)); + } + + void Clear() + { + SetValue(TextEditingValue()); + } + + const std::string& GetText() const + { + return GetValue().text; + } + + const TextSelection& GetSelection() const + { + return GetValue().selection; + } +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_IME_TEXT_EDIT_CONTROLLER_H diff --git a/frameworks/core/common/ime/text_editing_value.cpp b/frameworks/core/common/ime/text_editing_value.cpp new file mode 100644 index 00000000..08f1d44e --- /dev/null +++ b/frameworks/core/common/ime/text_editing_value.cpp @@ -0,0 +1,263 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/common/ime/text_editing_value.h" + +#include "base/json/json_util.h" +#include "base/log/log.h" +#include "base/utils/macros.h" +#include "base/utils/string_utils.h" + +namespace OHOS::Ace { +namespace { + +const char TEXT[] = "text"; +const char SELECTION_START[] = "selectionStart"; +const char SELECTION_END[] = "selectionEnd"; + +} // namespace + +void TextEditingValue::ParseFromJson(const JsonValue& json) +{ + text = json.GetString(TEXT); + selection.baseOffset = json.GetInt(SELECTION_START, -1); + selection.extentOffset = json.GetInt(SELECTION_END, -1); +} + +std::string TextEditingValue::ToJsonString() const +{ + auto json = JsonUtil::Create(true); + json->Put(TEXT, text.c_str()); + json->Put(SELECTION_START, selection.baseOffset); + json->Put(SELECTION_END, selection.extentOffset); + return json->ToString(); +} + +bool TextEditingValue::operator==(const TextEditingValue& other) const +{ + if (selection != other.selection) { + return false; + } + + return text == other.text; +} + +bool TextEditingValue::operator!=(const TextEditingValue& other) const +{ + return !operator==(other); +} + +std::wstring TextEditingValue::GetWideText() const +{ + return StringUtils::ToWstring(text); +} + +void TextEditingValue::MoveLeft() +{ + if (selection.extentOffset <= 1) { + selection.Update(0); + return; + } + + auto utf16Text = StringUtils::Str8ToStr16(text); + int32_t prevCharIndex = std::min(selection.extentOffset - 1, static_cast(utf16Text.length())); + selection.Update(StringUtils::NotInUtf16Bmp(utf16Text[prevCharIndex]) ? prevCharIndex - 1 : prevCharIndex); +} + +void TextEditingValue::MoveRight() +{ + auto utf16Text = StringUtils::Str8ToStr16(text); + if (static_cast(selection.extentOffset) >= utf16Text.length() - 1) { + selection.Update(utf16Text.length()); + return; + } + + int32_t nextCharIndex = selection.extentOffset; + selection.Update(StringUtils::NotInUtf16Bmp(utf16Text[nextCharIndex]) + ? std::min(static_cast(utf16Text.length()), nextCharIndex + 2) + : nextCharIndex + 1); +} + +void TextEditingValue::MoveToPosition(int32_t position) +{ + if (position < 0) { + selection.Update(0); + return; + } + auto utf16Text = StringUtils::Str8ToStr16(text); + if (static_cast(position) >= utf16Text.length()) { + selection.Update(utf16Text.length()); + return; + } + selection.Update(position); +} + +void TextEditingValue::UpdateSelection(int32_t both) +{ + UpdateSelection(both, both); +} + +void TextEditingValue::UpdateSelection(int32_t start, int32_t end) +{ + if (start < 0) { + start = 0; + } + if (static_cast(end) > GetWideText().length()) { + end = GetWideText().length(); + } + selection.Update(start, end); +} + +void TextEditingValue::SelectionAwareTextManipulation(const TextManipulation& manipulation) +{ + if (!manipulation) { + return; + } + + auto wideText = GetWideText(); + int32_t start = selection.GetStart(); + int32_t end = selection.GetEnd(); + if (static_cast(end) > wideText.length() || start > end) { + LOGD("Illegal selection for manipulate: start %{public}d, end %{public}d", start, end); + return; + } + + if ((start <= 0) && (end <= 0)) { + manipulation(wideText); + } else { + std::wstring beforeSelection; + if ((start > 0) && (static_cast(start) <= wideText.length())) { + beforeSelection = wideText.substr(0, start); + manipulation(beforeSelection); + } + + std::wstring inSelection; + if (start != end) { + inSelection = wideText.substr(start, end - start); + manipulation(inSelection); + } + + std::wstring afterSelection; + size_t lenLeft = wideText.length() - static_cast(end); + if (lenLeft > 0) { + afterSelection = wideText.substr(end, lenLeft); + manipulation(afterSelection); + } + + wideText = beforeSelection + inSelection + afterSelection; + if (selection.baseOffset > selection.extentOffset) { + selection.Update(beforeSelection.length() + inSelection.length(), beforeSelection.length()); + } else { + selection.Update(beforeSelection.length(), beforeSelection.length() + inSelection.length()); + } + } + + text = StringUtils::ToString(wideText); +} + +std::string TextEditingValue::GetBeforeSelection() const +{ + auto wideText = GetWideText(); + int32_t start = selection.GetStart(); + if (static_cast(start) > wideText.length()) { + LOGD("Illegal selection for GetBeforeSelection: start %{public}d", start); + return ""; + } + + std::string beforeText; + if (start > 0) { + std::wstring beforeSelection = wideText.substr(0, start); + beforeText = StringUtils::ToString(beforeSelection); + } + return beforeText; +} + +std::string TextEditingValue::GetSelectedText() const +{ + auto wideText = GetWideText(); + int32_t start = selection.GetStart(); + int32_t end = selection.GetEnd(); + if (static_cast(end) > wideText.length() || start > end) { + LOGD("Illegal selection for GetSelectedText: start %{public}d, end %{public}d", start, end); + return ""; + } + + std::string selectedText; + if (start < 0) { + start = 0; + } + if (end > 0 && start != end) { + std::wstring inSelection = wideText.substr(start, end - start); + selectedText = StringUtils::ToString(inSelection); + } + return selectedText; +} + +std::string TextEditingValue::GetSelectedText(const TextSelection& textSelection) const +{ + auto wideText = GetWideText(); + int32_t start = textSelection.GetStart(); + int32_t end = textSelection.GetEnd(); + std::string selectedText; + if (start < 0) { + start = 0; + } + if (static_cast(end) > wideText.length()) { + end = wideText.length(); + } + + if (end > 0 && start < end) { + std::wstring inSelection = wideText.substr(start, end - start); + selectedText = StringUtils::ToString(inSelection); + } + return selectedText; +} + +std::string TextEditingValue::GetAfterSelection() const +{ + auto wideText = GetWideText(); + int32_t end = selection.GetEnd(); + if (static_cast(end) > wideText.length()) { + LOGD("Illegal selection for GetAfterSelection: start %{public}d", end); + return ""; + } + + std::string afterText; + if (end <= 0) { + afterText = StringUtils::ToString(wideText); + } else { + std::wstring afterSelection = wideText.substr(end); + afterText = StringUtils::ToString(afterSelection); + } + return afterText; +} + +void TextEditingValue::Delete(int32_t start, int32_t end) +{ + int32_t startPos = std::max(start, 0); + int32_t endPos = std::max(end, 0); + startPos = std::min(start, end); + endPos = std::max(start, end); + if (startPos >= endPos) { + return; + } + + auto wideText = GetWideText(); + auto textAfterDelete = wideText.substr(0, startPos) + wideText.substr(endPos); + text = StringUtils::ToString(textAfterDelete); + selection.Update(startPos); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/common/ime/text_editing_value.h b/frameworks/core/common/ime/text_editing_value.h new file mode 100644 index 00000000..edbca620 --- /dev/null +++ b/frameworks/core/common/ime/text_editing_value.h @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_IME_TEXT_EDITING_VALUE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_IME_TEXT_EDITING_VALUE_H + +#include +#include + +#include "core/common/ime/text_selection.h" + +namespace OHOS::Ace { + +class JsonValue; + +using TextManipulation = std::function; + +struct TextEditingValue { + void ParseFromJson(const JsonValue& json); + std::string ToJsonString() const; + + bool operator==(const TextEditingValue& other) const; + bool operator!=(const TextEditingValue& other) const; + + std::wstring GetWideText() const; + + /** + * @brief Selection offset of text is designed for 2 bytes per offset, so if glyphs out range of UTF-16 BMP, + * like emoji, will be counted as 2 offsets. For example, here is a string contains emoji [smile]: + * abc[smile] + * The offset between 'c' and '[smile]' is 3, and the offset after '[smile]' will be 5. + * + * Internal implementation: We recognize this case by judging UTF-16 characters. If an code unit is out of + * UTF-16 BMP, then offset to move will for it will be two. + */ + void MoveLeft(); + void MoveRight(); + void MoveToPosition(int32_t position); + void UpdateSelection(int32_t both); + void UpdateSelection(int32_t start, int32_t end); + + /** + * @brief Manipulate the text by [manipulation] func, meanwhile update the selection. + * + * @param[in] manipulation The function for manipulation. + */ + void SelectionAwareTextManipulation(const TextManipulation& manipulation); + std::string GetBeforeSelection() const; + std::string GetSelectedText() const; + std::string GetSelectedText(const TextSelection& textSelection) const; + std::string GetAfterSelection() const; + + // Delete text of start to end. + void Delete(int32_t start, int32_t end); + + std::string text; + TextSelection selection; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_IME_TEXT_EDITING_VALUE_H diff --git a/frameworks/core/common/ime/text_input.h b/frameworks/core/common/ime/text_input.h new file mode 100644 index 00000000..f522be8a --- /dev/null +++ b/frameworks/core/common/ime/text_input.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_IME_TEXT_INPUT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_IME_TEXT_INPUT_H + +#include "base/memory/referenced.h" +#include "base/thread/task_executor.h" +#include "core/common/ime/text_input_client.h" +#include "core/common/ime/text_input_configuration.h" +#include "core/common/ime/text_input_connection.h" + +namespace OHOS::Ace { + +class TextInput { +public: + virtual ~TextInput() = default; + + virtual RefPtr Attach(const WeakPtr& client, + const TextInputConfiguration& config, const RefPtr& taskExecutor, int32_t instanceId) = 0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_IME_TEXT_INPUT_H diff --git a/frameworks/core/common/ime/text_input_action.cpp b/frameworks/core/common/ime/text_input_action.cpp new file mode 100644 index 00000000..35075312 --- /dev/null +++ b/frameworks/core/common/ime/text_input_action.cpp @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/common/ime/text_input_action.h" + +namespace OHOS::Ace { + +TextInputAction CastToTextInputAction(int32_t value) +{ + if (value < static_cast(TextInputAction::BEGIN) || value > static_cast(TextInputAction::END)) { + return TextInputAction::UNSPECIFIED; + } + return static_cast(value); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/common/ime/text_input_action.h b/frameworks/core/common/ime/text_input_action.h new file mode 100644 index 00000000..8f1e6b93 --- /dev/null +++ b/frameworks/core/common/ime/text_input_action.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_IME_TEXT_INPUT_ACTION_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_IME_TEXT_INPUT_ACTION_H + +#include + +namespace OHOS::Ace { + +/** + * Define what kind of action when "enter" pressed stands for. + * Attention: Should keep sync with C++. + */ +enum class TextInputAction { + BEGIN = 0, + UNSPECIFIED = BEGIN, + NONE = 1, + GO = 2, + SEARCH = 3, + SEND = 4, + NEXT = 5, + DONE = 6, + PREVIOUS = 7, + END = PREVIOUS, +}; + +TextInputAction CastToTextInputAction(int32_t value); + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_IME_TEXT_INPUT_ACTION_H diff --git a/frameworks/core/common/ime/text_input_client.h b/frameworks/core/common/ime/text_input_client.h new file mode 100644 index 00000000..16356a26 --- /dev/null +++ b/frameworks/core/common/ime/text_input_client.h @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_IME_TEXT_INPUT_CLIENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_IME_TEXT_INPUT_CLIENT_H + +#include "base/memory/ace_type.h" +#include "core/common/ime/text_input_action.h" + +namespace OHOS::Ace { + +struct TextEditingValue; + +class TextInputClient : public virtual AceType { + DECLARE_ACE_TYPE(TextInputClient, AceType); + +public: + // Requests that this client update its editing state to the given value. + virtual void UpdateEditingValue( + const std::shared_ptr& value, bool needFireChangeEvent = true) = 0; + + // Requests that this client perform the given action. + virtual void PerformAction(TextInputAction action, bool forceCloseKeyboard = false) = 0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_IME_TEXT_INPUT_CLIENT_H diff --git a/frameworks/core/common/ime/text_input_configuration.cpp b/frameworks/core/common/ime/text_input_configuration.cpp new file mode 100644 index 00000000..8ddd0067 --- /dev/null +++ b/frameworks/core/common/ime/text_input_configuration.cpp @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/common/ime/text_input_configuration.h" + +#include "base/json/json_util.h" + +namespace OHOS::Ace { +namespace { + +const char TYPE[] = "type"; +const char OBSCURE_TEXT[] = "obscureText"; +const char ACTION_LABEL[] = "actionLabel"; +const char ACTION[] = "action"; +const char AUTO_CORRECT[] = "autoCorrect"; +const char CAPITALIZATION[] = "capitalization"; +const char KEYBOARD_APPEARANCE[] = "keyboardAppearance"; + +} // namespace + +std::string TextInputConfiguration::ToJsonString() const +{ + auto json = JsonUtil::Create(true); + json->Put(TYPE, static_cast(type)); + json->Put(OBSCURE_TEXT, obscureText); + json->Put(ACTION, static_cast(action)); + if (!actionLabel.empty()) { + json->Put(ACTION_LABEL, actionLabel.c_str()); + } + + json->Put(AUTO_CORRECT, autoCorrect); + if (!capitalization.empty()) { + json->Put(CAPITALIZATION, capitalization.c_str()); + } + if (!keyboardAppearance.empty()) { + json->Put(KEYBOARD_APPEARANCE, keyboardAppearance.c_str()); + } + + return json->ToString(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/common/ime/text_input_configuration.h b/frameworks/core/common/ime/text_input_configuration.h new file mode 100644 index 00000000..37f589bc --- /dev/null +++ b/frameworks/core/common/ime/text_input_configuration.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_IME_TEXT_INPUT_CONFIGURATION_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_IME_TEXT_INPUT_CONFIGURATION_H + +#include + +#include "core/common/ime/text_input_action.h" +#include "core/common/ime/text_input_type.h" + +namespace OHOS::Ace { + +struct TextInputConfiguration { + std::string ToJsonString() const; + + // Currently this is which only supported. + TextInputType type = TextInputType::TEXT; + // Obscure support for password and so on. + bool obscureText = false; + // What label to show on action button. For e.g. GO / Search! + std::string actionLabel; + TextInputAction action = TextInputAction::UNSPECIFIED; + + // Below maybe supported in the future. Just keep for placeholder. + bool autoCorrect = false; + std::string capitalization; + std::string keyboardAppearance; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_IME_TEXT_INPUT_CONFIGURATION_H diff --git a/frameworks/core/common/ime/text_input_connection.cpp b/frameworks/core/common/ime/text_input_connection.cpp new file mode 100644 index 00000000..439f59f9 --- /dev/null +++ b/frameworks/core/common/ime/text_input_connection.cpp @@ -0,0 +1,22 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/common/ime/text_input_connection.h" + +namespace OHOS::Ace { + +std::atomic_int32_t TextInputConnection::id_ = IME_CLIENT_ID_START; + +} // namespace OHOS::Ace diff --git a/frameworks/core/common/ime/text_input_connection.h b/frameworks/core/common/ime/text_input_connection.h new file mode 100644 index 00000000..dfa79edc --- /dev/null +++ b/frameworks/core/common/ime/text_input_connection.h @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_IME_TEXT_INPUT_CONNECTION_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_IME_TEXT_INPUT_CONNECTION_H + +#include + +#include "base/memory/ace_type.h" +#include "base/thread/task_executor.h" +#include "core/common/ime/constant.h" +#include "core/common/ime/text_editing_value.h" +#include "core/common/ime/text_input_client.h" + +namespace OHOS::Ace { + +class TextInputConnection : public AceType { + DECLARE_ACE_TYPE(TextInputConnection, AceType); + +public: + TextInputConnection() = delete; + TextInputConnection(const WeakPtr& client, const RefPtr& taskExecutor) + : clientId_(id_++), client_(client), taskExecutor_(taskExecutor) + {} + + ~TextInputConnection() override = default; + + virtual void Show(bool isFocusViewChanged, int32_t instanceId) = 0; + virtual void SetEditingState( + const TextEditingValue& value, int32_t instanceId, bool needFireChangeEvent = true) = 0; + virtual void Close(int32_t instanceId) = 0; + + int32_t GetClientId() const + { + return clientId_; + } + + RefPtr GetClient() const + { + return client_.Upgrade(); + } + + RefPtr GetTaskExecutor() const + { + return taskExecutor_; + } + +protected: + // May be incremented on multi Ace UI threads. + static std::atomic_int32_t id_; + + int32_t clientId_; + WeakPtr client_; + RefPtr taskExecutor_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_IME_TEXT_INPUT_CONNECTION_H diff --git a/frameworks/core/common/ime/text_input_formatter.cpp b/frameworks/core/common/ime/text_input_formatter.cpp new file mode 100644 index 00000000..761a94c1 --- /dev/null +++ b/frameworks/core/common/ime/text_input_formatter.cpp @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/common/ime/text_input_formatter.h" + +#include "base/utils/macros.h" +#include "base/utils/string_utils.h" +#include "core/common/ime/text_editing_value.h" + +namespace OHOS::Ace { + +BlackListCharsFormatter::BlackListCharsFormatter(std::wregex&& regex) : regex_(regex) {} + +void BlackListCharsFormatter::Format(const TextEditingValue& oldValue, TextEditingValue& newValue) const +{ + newValue.SelectionAwareTextManipulation( + [this](std::wstring& manipulateText) { manipulateText = std::regex_replace(manipulateText, regex_, L""); }); +} + +NumberFormatter::NumberFormatter() : BlackListCharsFormatter(std::wregex(L"\\D")) {} + +// Only allow \d-+ +PhoneNumberFormatter::PhoneNumberFormatter() : BlackListCharsFormatter(std::wregex(L"[^\\d\\-\\+]+")) {} + +// Only allow \d\w-_.@ +EmailFormatter::EmailFormatter() : BlackListCharsFormatter(std::wregex(L"[^\\d\\w\\-\\._@]+")) {} + +// Allow \d\w-_.~!*'();:@&=+$,/?#[] +UriFormatter::UriFormatter() : BlackListCharsFormatter(std::wregex(L"[^\\d\\w-_.~!*'();:@&=+$,/?#[\\]]+")) {} + +SingleLineFormatter::SingleLineFormatter() : BlackListCharsFormatter(std::wregex(L"\n")) {} + +void LengthLimitingFormatter::Format(const TextEditingValue& oldValue, TextEditingValue& newValue) const +{ + auto text = newValue.GetWideText(); + if (text.length() > limit_) { + int32_t exceedLen = text.length() - limit_; + int32_t removeBeforeExtent = std::min(exceedLen, newValue.selection.extentOffset); + int32_t removeAfterExtent = exceedLen - removeBeforeExtent; + if (removeBeforeExtent > 0) { + int32_t eraseStart = newValue.selection.extentOffset - removeBeforeExtent; + if (static_cast(eraseStart + exceedLen) > text.length()) { + return; + } + text.erase(eraseStart, removeBeforeExtent); + newValue.selection.Update(eraseStart); + } + if (removeAfterExtent > 0) { + int32_t eraseStart = text.length() - removeAfterExtent; + if (eraseStart >= 0 && (text.length() - eraseStart > 0)) { + text.erase(eraseStart); + } + } + if (exceedLen > 0) { + newValue.text = StringUtils::ToString(text); + } + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/common/ime/text_input_formatter.h b/frameworks/core/common/ime/text_input_formatter.h new file mode 100644 index 00000000..0a47dae5 --- /dev/null +++ b/frameworks/core/common/ime/text_input_formatter.h @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_IME_TEXT_INPUT_FORMATTER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_IME_TEXT_INPUT_FORMATTER_H + +#include + +namespace OHOS::Ace { + +struct TextEditingValue; + +class TextInputFormatter { +public: + virtual ~TextInputFormatter() = default; + + /** + * @brief Format the input text. + * + * @param[in] oldValue If multiple formatters called, this is the original value of the format chain. + * @param[out] newValue The value after formatting. + */ + virtual void Format(const TextEditingValue& oldValue, TextEditingValue& newValue) const = 0; +}; + +class BlackListCharsFormatter : public TextInputFormatter { +public: + explicit BlackListCharsFormatter(std::wregex&& regex); + ~BlackListCharsFormatter() override = default; + + void Format(const TextEditingValue& oldValue, TextEditingValue& newValue) const override; + +private: + std::wregex regex_; +}; + +class WhiteListCharsFormatter : public TextInputFormatter { +public: + void Format(const TextEditingValue& oldValue, TextEditingValue& newValue) const override {} +}; + +class NumberFormatter : public BlackListCharsFormatter { +public: + NumberFormatter(); + ~NumberFormatter() override = default; +}; + +class PhoneNumberFormatter : public BlackListCharsFormatter { +public: + PhoneNumberFormatter(); + ~PhoneNumberFormatter() override = default; +}; + +class UriFormatter : public BlackListCharsFormatter { +public: + UriFormatter(); + ~UriFormatter() override = default; +}; + +class EmailFormatter : public BlackListCharsFormatter { +public: + EmailFormatter(); + ~EmailFormatter() override = default; +}; + +class SingleLineFormatter : public BlackListCharsFormatter { +public: + SingleLineFormatter(); + ~SingleLineFormatter() override = default; +}; + +class LengthLimitingFormatter : public TextInputFormatter { +public: + explicit LengthLimitingFormatter(uint32_t limit) : limit_(limit) {} + ~LengthLimitingFormatter() override = default; + void Format(const TextEditingValue& oldValue, TextEditingValue& newValue) const override; + +private: + const uint32_t limit_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_IME_TEXT_INPUT_FORMATTER_H diff --git a/frameworks/core/common/ime/text_input_proxy.cpp b/frameworks/core/common/ime/text_input_proxy.cpp new file mode 100644 index 00000000..6b4598aa --- /dev/null +++ b/frameworks/core/common/ime/text_input_proxy.cpp @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/common/ime/text_input_proxy.h" + +namespace OHOS::Ace { + +TextInputProxy::TextInputProxy() = default; + +TextInputProxy::~TextInputProxy() = default; + +void TextInputProxy::SetDelegate(std::unique_ptr&& delegate) +{ + delegate_ = std::move(delegate); +} + +RefPtr TextInputProxy::Attach(const WeakPtr& client, + const TextInputConfiguration& config, const RefPtr& taskExecutor, int32_t instanceId) +{ + if (!delegate_) { + return nullptr; + } + return delegate_->Attach(client, config, taskExecutor, instanceId); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/common/ime/text_input_proxy.h b/frameworks/core/common/ime/text_input_proxy.h new file mode 100644 index 00000000..94a0c7ac --- /dev/null +++ b/frameworks/core/common/ime/text_input_proxy.h @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_IME_TEXT_INPUT_PROXY_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_IME_TEXT_INPUT_PROXY_H + +#include + +#include "base/utils/singleton.h" +#include "core/common/ime/text_input.h" + +namespace OHOS::Ace { + +class TextInputProxy : public Singleton, public TextInput { + DECLARE_SINGLETON(TextInputProxy); + +public: + void SetDelegate(std::unique_ptr&& delegate); + + /** + * @brief When component needs to interact with IME, it is the first step. + * + * Internally an auto-increment `clientId` will be generated to identify each connection. + * + * @param[in] client The event receiver to handle IME event. Make it weak. + * @param[in] config Indicate how to show the keyboard. + * @param[in] taskExecutor The task executor to be posted to run task. + * + * @return A connection which can interact with IME. + */ + RefPtr Attach(const WeakPtr& client, const TextInputConfiguration& config, + const RefPtr& taskExecutor, int32_t instanceId) override; + +private: + std::unique_ptr delegate_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_IME_TEXT_INPUT_PROXY_H diff --git a/frameworks/core/common/ime/text_input_type.cpp b/frameworks/core/common/ime/text_input_type.cpp new file mode 100644 index 00000000..e442ca96 --- /dev/null +++ b/frameworks/core/common/ime/text_input_type.cpp @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/common/ime/text_input_type.h" + +namespace OHOS::Ace { + +TextInputType CastToTextInputType(int32_t value) +{ + if (value < static_cast(TextInputType::BEGIN) || value >= static_cast(TextInputType::END)) { + return TextInputType::TEXT; + } + return static_cast(value); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/common/ime/text_input_type.h b/frameworks/core/common/ime/text_input_type.h new file mode 100644 index 00000000..d2333dfe --- /dev/null +++ b/frameworks/core/common/ime/text_input_type.h @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_IME_TEXT_INPUT_TYPE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_IME_TEXT_INPUT_TYPE_H + +#include + +namespace OHOS::Ace { + +enum class TextInputType { + BEGIN = 0, + // Default type. + TEXT = BEGIN, + // Specialized [TEXT] which support press Enter key to new line. + MULTILINE = 1, + NUMBER = 2, + PHONE = 3, + DATETIME = 4, + EMAIL_ADDRESS = 5, + URL = 6, + VISIBLE_PASSWORD = 7, + END, +}; + +TextInputType CastToTextInputType(int32_t value); + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_IME_TEXT_INPUT_TYPE_H diff --git a/frameworks/core/common/ime/text_range.h b/frameworks/core/common/ime/text_range.h new file mode 100644 index 00000000..1dbaa4e1 --- /dev/null +++ b/frameworks/core/common/ime/text_range.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_IME_TEXT_RANGE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_IME_TEXT_RANGE_H + +#include + +namespace OHOS::Ace { + +struct TextRange { + int32_t start = -1; + int32_t end = -1; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_IME_TEXT_RANGE_H diff --git a/frameworks/core/common/ime/text_selection.h b/frameworks/core/common/ime/text_selection.h new file mode 100644 index 00000000..51db5a45 --- /dev/null +++ b/frameworks/core/common/ime/text_selection.h @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_IME_TEXT_SELECTION_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_IME_TEXT_SELECTION_H + +#include + +#include "core/common/ime/constant.h" + +namespace OHOS::Ace { + +/** + * Stands for what text is selected and how the directional is. + * We use base/extent to indicate the start/end position because of uncertain direction. + */ +struct TextSelection { + TextSelection() = default; + TextSelection(int32_t base, int32_t extent) : baseOffset(base), extentOffset(extent) {} + + void Update(int32_t base, int32_t extent) + { + baseOffset = base; + extentOffset = extent; + } + + // Usually called when none is selected. + void Update(int32_t both) + { + baseOffset = both; + extentOffset = both; + } + + bool operator==(const TextSelection& other) const + { + return baseOffset == other.baseOffset && extentOffset == other.extentOffset; + } + + bool operator!=(const TextSelection& other) const + { + return !operator==(other); + } + + /** + * @brief Get first selected character in the text. + */ + inline int32_t GetStart() const + { + return std::min(baseOffset, extentOffset); + } + + /** + * @brief Get last selected character in the text. + */ + inline int32_t GetEnd() const + { + return std::max(baseOffset, extentOffset); + } + + // May larger than, smaller than or equal to extentOffset. + int32_t baseOffset = -1; + + // When paints caret, this is where the caret position is. + int32_t extentOffset = -1; + + TextAffinity affinity = TextAffinity::UPSTREAM; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_IME_TEXT_SELECTION_H diff --git a/frameworks/core/common/js_message_dispatcher.h b/frameworks/core/common/js_message_dispatcher.h new file mode 100644 index 00000000..2b4c7eef --- /dev/null +++ b/frameworks/core/common/js_message_dispatcher.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_JS_MESSAGE_DISPATCHER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_JS_MESSAGE_DISPATCHER_H + +#include "base/memory/ace_type.h" + +namespace OHOS::Ace { + +class JsMessageDispatcher : public virtual AceType { + DECLARE_ACE_TYPE(JsMessageDispatcher, AceType); + +public: + JsMessageDispatcher() = default; + ~JsMessageDispatcher() override = default; + + virtual void Dispatch(const std::string& channel, std::vector&& data, int32_t id, + bool replyToComponent = false) const = 0; + + virtual void DispatchPluginError(int32_t callbackId, int32_t errorCode, std::string&& errorMessage) const = 0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_JS_MESSAGE_DISPATCHER_H diff --git a/frameworks/core/common/manager_interface.h b/frameworks/core/common/manager_interface.h new file mode 100644 index 00000000..3eed53d5 --- /dev/null +++ b/frameworks/core/common/manager_interface.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_MANAGER_INTERFACE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_MANAGER_INTERFACE_H + +#include "base/geometry/offset.h" +#include "base/memory/ace_type.h" +#include "core/components/stack/stack_element.h" + +namespace OHOS::Ace { + +class ManagerInterface : public AceType { + DECLARE_ACE_TYPE(ManagerInterface, AceType); + +public: + virtual void SetClickPosition(const Offset& position) = 0; + virtual void MovePage(const RefPtr& stackElement, const Offset& rootRect, double offsetHeight) = 0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_MANAGER_INTERFACE_H diff --git a/frameworks/core/common/message_bridge.h b/frameworks/core/common/message_bridge.h new file mode 100644 index 00000000..1ba6c240 --- /dev/null +++ b/frameworks/core/common/message_bridge.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_MESSAGE_BRIDGE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_MESSAGE_BRIDGE_H + +#include + +#include "base/memory/ace_type.h" + +namespace OHOS::Ace { + +class MessageBridge : public virtual AceType { +public: + virtual void SendMessage(const std::string& action, const std::function& handler) = 0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_MESSAGE_BRIDGE_H diff --git a/frameworks/core/common/message_dispatcher.h b/frameworks/core/common/message_dispatcher.h new file mode 100644 index 00000000..dfc8b63f --- /dev/null +++ b/frameworks/core/common/message_dispatcher.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_MESSAGE_DISPATCHER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_MESSAGE_DISPATCHER_H + +#include "base/memory/ace_type.h" + +namespace OHOS::Ace { + +class MessageDispatcher : public virtual AceType { + DECLARE_ACE_TYPE(MessageDispatcher, AceType); + +public: + MessageDispatcher() = default; + ~MessageDispatcher() override = default; + + virtual void Dispatch(const std::string& channel, std::vector&& data, int32_t id, + int32_t groupType, bool replyToComponent = false) const = 0; + + virtual void DispatchPluginError(int32_t callbackId, int32_t errorCode, std::string&& errorMessage) const = 0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_MESSAGE_DISPATCHER_H diff --git a/frameworks/core/common/page_scroller.cpp b/frameworks/core/common/page_scroller.cpp new file mode 100644 index 00000000..ac0ba8df --- /dev/null +++ b/frameworks/core/common/page_scroller.cpp @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/common/page_scroller.h" + +#include "core/components/scroll/render_scroll.h" +#include "core/components/scroll/scroll_element.h" +#include "core/pipeline/base/composed_element.h" + +namespace OHOS::Ace { + +void PageScroller::SetClickPosition(const Offset& position) +{ + position_ = position; +} + +void PageScroller::MovePage(const RefPtr& stackElement, const Offset& rootRect, double offsetHeight) +{ + if (!stackElement) { + return; + } + + const auto& composedElement = AceType::DynamicCast(stackElement->GetChildren().front()); + if (!composedElement) { + return; + } + const auto& scrollElement = AceType::DynamicCast(composedElement->GetChildren().front()); + if (!scrollElement) { + return; + } + + const auto& scroll = AceType::DynamicCast(scrollElement->GetRenderNode()); + if (!scroll) { + return; + } + + if (GreatNotEqual(position_.GetY(), rootRect.GetY())) { + hasMove_ = true; + scroll->SetNeedMove(true); + } + + if (LessNotEqual(offsetHeight, 0.0) && hasMove_) { + scroll->SetNeedMove(false); + hasMove_ = false; + } +} + +}; // namespace OHOS::Ace diff --git a/frameworks/core/common/page_scroller.h b/frameworks/core/common/page_scroller.h new file mode 100644 index 00000000..04f7fc02 --- /dev/null +++ b/frameworks/core/common/page_scroller.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_TEXT_FIELD_MANAGER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_TEXT_FIELD_MANAGER_H + +#include "base/geometry/offset.h" +#include "base/memory/ace_type.h" +#include "base/utils/macros.h" +#include "core/components/stack/stack_element.h" + +namespace OHOS::Ace { + +class ACE_EXPORT PageScroller : public AceType { + DECLARE_ACE_TYPE(PageScroller, AceType); + +public: + PageScroller() = default; + ~PageScroller() override = default; + + void SetClickPosition(const Offset& position); + void MovePage(const RefPtr& stackElement, const Offset& rootRect, double offsetHeight); + +private: + bool hasMove_ = false; + Offset position_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_TEXT_FIELD_MANAGER_H diff --git a/frameworks/core/common/platform_bridge.cpp b/frameworks/core/common/platform_bridge.cpp new file mode 100644 index 00000000..10b37486 --- /dev/null +++ b/frameworks/core/common/platform_bridge.cpp @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/common/platform_bridge.h" + +#include "base/log/log.h" +#include "frameworks/bridge/codec/function_call.h" +#include "frameworks/bridge/codec/standard_function_codec.h" + +namespace OHOS::Ace { + +const char INTERNAL_MODULE_GROUP[] = "AcePluginGroup/FeatureAbility"; +const char FUNCTION_NAME[] = "callAbility"; + +using namespace Framework; + +void PlatformBridge::SendMessage(const std::vector& args, const PlatformCallbackHandler& handler) +{ + int32_t callbackId = callbackIds_++; + auto result = callBackHandlers_.try_emplace(callbackId, handler); + if (!result.second) { + LOGE("module callback function has been existed!"); + return; + } + + FunctionCall functionCall(FUNCTION_NAME, args); + StandardFunctionCodec codec; + std::vector dataBuf; + codec.EncodeFunctionCall(functionCall, dataBuf); + + auto dispatcher = dispatcher_.Upgrade(); + if (dispatcher) { + dispatcher->Dispatch(INTERNAL_MODULE_GROUP, std::move(dataBuf), callbackId, true); + } else { + LOGE("SendMessage failed: dispatcher is null"); + } +} + +void PlatformBridge::HandleCallback(int32_t callbackId, std::vector&& messageData) +{ + std::string resultString; + CodecData codecResult; + StandardFunctionCodec codec; + if (codec.DecodePlatformMessage(messageData, codecResult)) { + resultString = codecResult.GetStringValue(); + if (resultString.empty()) { + LOGE("reply message is empty!"); + return; + } + } else { + LOGE("decode platform reply message failed!"); + return; + } + + auto itFunc = callBackHandlers_.find(callbackId); + if (itFunc != callBackHandlers_.end()) { + auto handler = itFunc->second; + if (handler) { + handler(resultString); + } + callBackHandlers_.erase(itFunc); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/common/platform_bridge.h b/frameworks/core/common/platform_bridge.h new file mode 100644 index 00000000..b73cf566 --- /dev/null +++ b/frameworks/core/common/platform_bridge.h @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_PLATFORM_BRIDGE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_PLATFORM_BRIDGE_H + +#include +#include +#include + +#include "base/utils/macros.h" +#include "base/utils/noncopyable.h" +#include "bridge/codec/codec_data.h" +#include "core/common/js_message_dispatcher.h" + +namespace OHOS::Ace { + +using PlatformCallbackHandler = std::function; +using PlatformCallbackMap = std::map; + +class PlatformBridge : public AceType { + DECLARE_ACE_TYPE(PlatformBridge, AceType); + +public: + PlatformBridge() = default; + virtual ~PlatformBridge() = default; + + void SetJsMessageDispatcher(const RefPtr& dispatcher) + { + dispatcher_ = dispatcher; + } + + void SendMessage(const std::vector& args, const PlatformCallbackHandler& handler); + void HandleCallback(int32_t callbackId, std::vector&& messageData); + +private: + WeakPtr dispatcher_; + PlatformCallbackMap callBackHandlers_; + std::atomic_int callbackIds_ = 1; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_PLATFORM_BRIDGE_H diff --git a/frameworks/core/common/platform_res_register.h b/frameworks/core/common/platform_res_register.h new file mode 100644 index 00000000..00e77735 --- /dev/null +++ b/frameworks/core/common/platform_res_register.h @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_PLATFORM_RES_REGISTER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_PLATFORM_RES_REGISTER_H + +#include +#include + +#include "base/log/log.h" +#include "base/memory/referenced.h" + +namespace OHOS::Ace { + +class PlatformResRegister : public Referenced { +public: + using EventCallback = std::function; + + ~PlatformResRegister() override = default; + + void RegisterEvent(const std::string& eventId, const EventCallback&& eventCallback) + { + eventMap_[eventId] = std::move(eventCallback); + } + + void UnregisterEvent(const std::string& eventId) + { + eventMap_.erase(eventId); + } + + void OnEvent(const std::string& eventId, const std::string& param) + { + auto event = eventMap_.find(eventId); + if (event != eventMap_.end() && event->second) { + event->second(param); + } else { + LOGW("failed to find eventId = %{public}s", eventId.c_str()); + } + } + + virtual bool OnMethodCall(const std::string& method, const std::string& param, std::string& result) = 0; + virtual int64_t CreateResource(const std::string& resourceType, const std::string& param) = 0; + virtual bool ReleaseResource(const std::string& resourceHash) = 0; + +private: + std::unordered_map eventMap_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_PLATFORM_RES_REGISTER_H diff --git a/frameworks/core/common/platform_window.h b/frameworks/core/common/platform_window.h new file mode 100644 index 00000000..a804cea8 --- /dev/null +++ b/frameworks/core/common/platform_window.h @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_PLATFORM_WINDOW_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_PLATFORM_WINDOW_H + +#include +#include + +#include "base/memory/ace_type.h" +#include "base/utils/macros.h" +#include "base/utils/noncopyable.h" + +namespace OHOS::Ace { + +using AceVsyncCallback = std::function; +class AceView; +class RenderNode; + +class ACE_EXPORT PlatformWindow { +public: + PlatformWindow() = default; + virtual ~PlatformWindow() = default; + + static std::unique_ptr Create(AceView* aceView); + + // Request next vsync. + virtual void RequestFrame() = 0; + + // Register Vsync callback. + virtual void RegisterVsyncCallback(AceVsyncCallback&& callback) = 0; + + // Attach root render node to container + virtual void SetRootRenderNode(const RefPtr& root) = 0; + +private: + ACE_DISALLOW_COPY_AND_MOVE(PlatformWindow); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_PLATFORM_WINDOW_H diff --git a/frameworks/core/common/text_field_manager.cpp b/frameworks/core/common/text_field_manager.cpp new file mode 100644 index 00000000..18b2379a --- /dev/null +++ b/frameworks/core/common/text_field_manager.cpp @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/common/text_field_manager.h" + +#include "core/components/scroll/render_scroll.h" +#include "core/components/scroll/scroll_element.h" +#include "core/pipeline/base/composed_element.h" + +namespace OHOS::Ace { + +void TextFieldManager::SetClickPosition(const Offset& position) +{ + position_ = position; +} + +void TextFieldManager::MovePage(const RefPtr& stackElement, const Offset& rootRect, double offsetHeight) +{ + if (!stackElement) { + return; + } + + const auto& composedElement = AceType::DynamicCast(stackElement->GetChildren().front()); + if (!composedElement) { + return; + } + const auto& scrollElement = AceType::DynamicCast(composedElement->GetChildren().front()); + if (!scrollElement) { + return; + } + + const auto& scroll = AceType::DynamicCast(scrollElement->GetRenderNode()); + if (!scroll) { + return; + } + + if (GreatNotEqual(position_.GetY(), rootRect.GetY())) { + hasMove_ = true; + scroll->SetNeedMove(true); + } + + if (LessNotEqual(offsetHeight, 0) && hasMove_) { + scroll->SetNeedMove(false); + hasMove_ = false; + } +} + +}; // namespace OHOS::Ace diff --git a/frameworks/core/common/text_field_manager.h b/frameworks/core/common/text_field_manager.h new file mode 100644 index 00000000..e6374f24 --- /dev/null +++ b/frameworks/core/common/text_field_manager.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_TEXT_FIELD_MANAGER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_TEXT_FIELD_MANAGER_H + +#include "base/geometry/offset.h" +#include "base/memory/ace_type.h" +#include "base/utils/macros.h" +#include "core/common/manager_interface.h" +#include "core/components/stack/stack_element.h" + +namespace OHOS::Ace { + +class ACE_EXPORT TextFieldManager : public ManagerInterface { + DECLARE_ACE_TYPE(TextFieldManager, ManagerInterface); + +public: + TextFieldManager() = default; + ~TextFieldManager() override = default; + + void SetClickPosition(const Offset& position) override; + void MovePage(const RefPtr& stackElement, const Offset& rootRect, double offsetHeight) override; + +private: + bool hasMove_ = false; + Offset position_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_TEXT_FIELD_MANAGER_H diff --git a/frameworks/core/common/vibrator/vibrator.h b/frameworks/core/common/vibrator/vibrator.h new file mode 100644 index 00000000..00f73d3d --- /dev/null +++ b/frameworks/core/common/vibrator/vibrator.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_VIBRATOR_VIBRATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_VIBRATOR_VIBRATOR_H + +#include "base/memory/ace_type.h" +#include "base/thread/task_executor.h" + +namespace OHOS::Ace { + +class Vibrator : public AceType { +DECLARE_ACE_TYPE(Vibrator, AceType); + +public: + ~Vibrator() override = default; + + virtual void Vibrate(int32_t duration) = 0; + +protected: + explicit Vibrator(const RefPtr& taskExecutor) : taskExecutor_(taskExecutor) {} + RefPtr taskExecutor_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_VIBRATOR_VIBRATOR_H diff --git a/frameworks/core/common/vibrator/vibrator_interface.h b/frameworks/core/common/vibrator/vibrator_interface.h new file mode 100644 index 00000000..c2d665b9 --- /dev/null +++ b/frameworks/core/common/vibrator/vibrator_interface.h @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_VIBRATOR_VIBRATOR_INTERFACE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_VIBRATOR_VIBRATOR_INTERFACE_H + +#include "base/memory/referenced.h" +#include "base/thread/task_executor.h" +#include "core/common/vibrator/vibrator.h" + +namespace OHOS::Ace { + +class VibratorInterface { +public: + virtual ~VibratorInterface() = default; + + virtual RefPtr GetVibrator(const RefPtr& taskExecutor) = 0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_VIBRATOR_VIBRATOR_INTERFACE_H diff --git a/frameworks/core/common/vibrator/vibrator_proxy.cpp b/frameworks/core/common/vibrator/vibrator_proxy.cpp new file mode 100644 index 00000000..fd5a43a6 --- /dev/null +++ b/frameworks/core/common/vibrator/vibrator_proxy.cpp @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/common/vibrator/vibrator_proxy.h" + +namespace OHOS::Ace { + +VibratorProxy::VibratorProxy() = default; + +VibratorProxy::~VibratorProxy() = default; + +void VibratorProxy::SetDelegate(std::unique_ptr&& delegate) +{ + delegate_ = std::move(delegate); +} + +RefPtr VibratorProxy::GetVibrator(const RefPtr& taskExecutor) +{ + if (!delegate_) { + return nullptr; + } + return delegate_->GetVibrator(taskExecutor); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/common/vibrator/vibrator_proxy.h b/frameworks/core/common/vibrator/vibrator_proxy.h new file mode 100644 index 00000000..a7901384 --- /dev/null +++ b/frameworks/core/common/vibrator/vibrator_proxy.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_VIBRATOR_VIBRATOR_PROXY_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_VIBRATOR_VIBRATOR_PROXY_H + +#include "base/utils/singleton.h" +#include "core/common/vibrator/vibrator.h" +#include "core/common/vibrator/vibrator_interface.h" + +namespace OHOS::Ace { + +class VibratorProxy : public Singleton, public VibratorInterface { + DECLARE_SINGLETON(VibratorProxy); + +public: + void SetDelegate(std::unique_ptr&& delegate); + RefPtr GetVibrator(const RefPtr& taskExecutor) override; + +private: + std::unique_ptr delegate_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_VIBRATOR_VIBRATOR_PROXY_H diff --git a/frameworks/core/common/watch_dog.cpp b/frameworks/core/common/watch_dog.cpp new file mode 100644 index 00000000..368d4d50 --- /dev/null +++ b/frameworks/core/common/watch_dog.cpp @@ -0,0 +1,272 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/common/watch_dog.h" + +#include + +#include "flutter/fml/thread.h" + +#include "base/log/event_report.h" +#include "base/log/log.h" +#include "frameworks/core/common/ace_engine.h" + +namespace OHOS::Ace { +namespace { + +constexpr int32_t NORMAL_CHECK_PERIOD = 3; +constexpr int32_t WARNING_CHECK_PERIOD = 2; +constexpr int32_t FREEZE_CHECK_PERIOD = 1; +constexpr char JS_THREAD_NAME[] = "JS"; +constexpr char UI_THREAD_NAME[] = "UI"; +constexpr char UNKNOWN_THREAD_NAME[] = "unknown thread"; + +enum class State { NORMAL, WARNING, FREEZE }; + +using Task = std::function; +std::unique_ptr g_anrThread; + +bool PostTaskToTaskRunner(Task&& task, uint32_t delayTime) +{ + if (!g_anrThread || !task) { + return false; + } + + auto anrTaskRunner = g_anrThread->GetTaskRunner(); + if (delayTime > 0) { + anrTaskRunner->PostDelayedTask(std::move(task), fml::TimeDelta::FromSeconds(delayTime)); + } else { + anrTaskRunner->PostTask(std::move(task)); + } + return true; +} + +} // namespace + +class ThreadWatcher final : public Referenced { +public: + ThreadWatcher(int32_t instanceId, TaskExecutor::TaskType type); + ~ThreadWatcher() override; + + void SetTaskExecutor(const RefPtr& taskExecutor); + +private: + void InitThreadName(); + void CheckAndResetIfNeeded(); + bool IsThreadStuck(); + void HiviewReport() const; + void RawReport(RawEventType type) const; + void PostCheckTask(); + void TagIncrease(); + void Check(); + + mutable std::shared_mutex mutex_; + int32_t instanceId_; + TaskExecutor::TaskType type_; + std::string threadName_; + int32_t loopTime_ = 0; + int32_t threadTag_ = 0; + int32_t freezeCount_ = 0; + State state_ = State::NORMAL; + WeakPtr taskExecutor_; +}; + +ThreadWatcher::ThreadWatcher(int32_t instanceId, TaskExecutor::TaskType type) : instanceId_(instanceId), type_(type) +{ + InitThreadName(); + PostTaskToTaskRunner( + [weak = Referenced::WeakClaim(this)]() { + auto sp = weak.Upgrade(); + if (sp) { + sp->Check(); + } + }, + NORMAL_CHECK_PERIOD); +} + +ThreadWatcher::~ThreadWatcher() {} + +void ThreadWatcher::SetTaskExecutor(const RefPtr& taskExecutor) +{ + taskExecutor_ = taskExecutor; +} + +void ThreadWatcher::InitThreadName() +{ + switch (type_) { + case TaskExecutor::TaskType::JS: + threadName_ = JS_THREAD_NAME; + break; + case TaskExecutor::TaskType::UI: + threadName_ = UI_THREAD_NAME; + break; + default: + threadName_ = UNKNOWN_THREAD_NAME; + break; + } +} + +void ThreadWatcher::Check() +{ + int32_t period = NORMAL_CHECK_PERIOD; + if (!IsThreadStuck()) { + if (state_ == State::FREEZE) { + RawReport(RawEventType::RECOVER); + } + freezeCount_ = 0; + state_ = State::NORMAL; + } else { + if (state_ == State::NORMAL) { + HiviewReport(); + RawReport(RawEventType::WARNING); + state_ = State::WARNING; + period = WARNING_CHECK_PERIOD; + } else if (state_ == State::WARNING) { + RawReport(RawEventType::FREEZE); + state_ = State::FREEZE; + period = FREEZE_CHECK_PERIOD; + } else { + if (++freezeCount_ >= 5) { + RawReport(RawEventType::FREEZE); + freezeCount_ = 0; + } + period = FREEZE_CHECK_PERIOD; + } + } + + PostTaskToTaskRunner( + [weak = Referenced::WeakClaim(this)]() { + auto sp = weak.Upgrade(); + if (sp) { + sp->Check(); + } + }, + period); +} + +void ThreadWatcher::CheckAndResetIfNeeded() +{ + { + std::shared_lock lock(mutex_); + if (loopTime_ < INT32_MAX) { + return; + } + } + + std::unique_lock lock(mutex_); + loopTime_ = 0; + threadTag_ = 0; +} + +bool ThreadWatcher::IsThreadStuck() +{ + bool res = false; + { + std::shared_lock lock(mutex_); + if (threadTag_ != loopTime_) { + std::string abilityName; + if (AceEngine::Get().GetContainer(instanceId_) != nullptr) { + abilityName = AceEngine::Get().GetContainer(instanceId_)->GetHostClassName(); + } + LOGE("thread stuck, ability: %{public}s, instanceId: %{public}d, thread: %{public}s", abilityName.c_str(), + instanceId_, threadName_.c_str()); + res = true; + } + } + CheckAndResetIfNeeded(); + PostCheckTask(); + return res; +} + +void ThreadWatcher::HiviewReport() const +{ + if (type_ == TaskExecutor::TaskType::JS) { + EventReport::SendJsException(JsExcepType::JS_THREAD_STUCK); + } else if (type_ == TaskExecutor::TaskType::UI) { + EventReport::SendRenderException(RenderExcepType::UI_THREAD_STUCK); + } +} + +void ThreadWatcher::RawReport(RawEventType type) const +{ + EventReport::ANRRawReport( + type, AceEngine::Get().GetUid(), AceEngine::Get().GetPackageName(), AceEngine::Get().GetProcessName()); +} + +void ThreadWatcher::PostCheckTask() +{ + auto taskExecutor = taskExecutor_.Upgrade(); + if (taskExecutor) { + // post task to specified thread to check it + taskExecutor->PostTask( + [weak = Referenced::WeakClaim(this)]() { + auto sp = weak.Upgrade(); + if (sp) { + sp->TagIncrease(); + } + }, + type_); + std::unique_lock lock(mutex_); + ++loopTime_; + } else { + LOGW("task executor with instanceId %{public}d invalid when check %{public}s thread whether stuck or not", + instanceId_, threadName_.c_str()); + } +} + +void ThreadWatcher::TagIncrease() +{ + std::unique_lock lock(mutex_); + ++threadTag_; +} + +WatchDog::WatchDog() +{ + if (!g_anrThread) { + g_anrThread = std::make_unique("anr"); + } +} + +WatchDog::~WatchDog() +{ + g_anrThread.reset(); +} + +void WatchDog::Register(int32_t instanceId, const RefPtr& taskExecutor) +{ + Watchers watchers = { + .jsWatcher = AceType::MakeRefPtr(instanceId, TaskExecutor::TaskType::JS), + .uiWatcher = AceType::MakeRefPtr(instanceId, TaskExecutor::TaskType::UI), + }; + watchers.jsWatcher->SetTaskExecutor(taskExecutor); + watchers.uiWatcher->SetTaskExecutor(taskExecutor); + const auto resExecutor = watchMap_.try_emplace(instanceId, watchers); + if (!resExecutor.second) { + LOGW("Duplicate instance id: %{public}d when register to watch dog", instanceId); + } +} + +void WatchDog::Unregister(int32_t instanceId) +{ + int32_t num = watchMap_.erase(instanceId); + if (num == 0) { + LOGW("Unregister from watch dog failed with instanceID %{public}d", instanceId); + } + if (watchMap_.empty()) { + g_anrThread.reset(); + } +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/common/watch_dog.h b/frameworks/core/common/watch_dog.h new file mode 100644 index 00000000..2d66337a --- /dev/null +++ b/frameworks/core/common/watch_dog.h @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_WATCH_DOG_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_WATCH_DOG_H + +#include + +#include "base/thread/task_executor.h" + +namespace OHOS::Ace { + +class ThreadWatcher; + +struct Watchers { + RefPtr jsWatcher; + RefPtr uiWatcher; +}; + +class WatchDog final : public Referenced { +public: + WatchDog(); + ~WatchDog() override; + + void Register(int32_t instanceId, const RefPtr& taskExecutor); + void Unregister(int32_t instanceId); + +private: + std::unordered_map watchMap_; + + ACE_DISALLOW_COPY_AND_MOVE(WatchDog); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_WATCH_DOG_H diff --git a/frameworks/core/common/window.cpp b/frameworks/core/common/window.cpp new file mode 100644 index 00000000..b33db38b --- /dev/null +++ b/frameworks/core/common/window.cpp @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/common/window.h" + +#include "base/log/log.h" +#include "base/utils/macros.h" + +namespace OHOS::Ace { + +Window::Window(std::unique_ptr platformWindow) : platformWindow_(std::move(platformWindow)) +{ + auto&& callback = [this](uint64_t nanoTimestamp, uint32_t frameCount) { OnVsync(nanoTimestamp, frameCount); }; + platformWindow_->RegisterVsyncCallback(callback); + LOGI("Window Created"); +} + +void Window::RequestFrame() +{ + if (!isRequestVsync_) { + platformWindow_->RequestFrame(); + isRequestVsync_ = true; + } +} + +void Window::SetRootRenderNode(const RefPtr& root) +{ + platformWindow_->SetRootRenderNode(root); +} + +void Window::OnVsync(uint64_t nanoTimestamp, uint32_t frameCount) +{ + isRequestVsync_ = false; + if (callback_) { + callback_(nanoTimestamp, frameCount); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/common/window.h b/frameworks/core/common/window.h new file mode 100644 index 00000000..01650cd2 --- /dev/null +++ b/frameworks/core/common/window.h @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_WINDOW_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_WINDOW_H + +#include + +#include "base/utils/macros.h" +#include "base/utils/noncopyable.h" +#include "core/common/ace_page.h" +#include "core/common/platform_window.h" + +namespace OHOS::Ace { + +class ACE_EXPORT Window { +public: + explicit Window(std::unique_ptr platformWindow); + ~Window() = default; + + void RequestFrame(); + + void SetRootRenderNode(const RefPtr& root); + + void OnVsync(uint64_t nanoTimestamp, uint32_t frameCount); + + void SetVsyncCallback(AceVsyncCallback&& callback) + { + callback_ = std::move(callback); + } + +private: + std::unique_ptr platformWindow_; + AceVsyncCallback callback_; + bool isRequestVsync_ = false; + + ACE_DISALLOW_COPY_AND_MOVE(Window); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_WINDOW_H diff --git a/frameworks/core/components/align/BUILD.gn b/frameworks/core/components/align/BUILD.gn new file mode 100644 index 00000000..1fad6aa1 --- /dev/null +++ b/frameworks/core/components/align/BUILD.gn @@ -0,0 +1,21 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("align") { + sources = [ + "align_component.cpp", + "render_align.cpp", + ] +} diff --git a/frameworks/core/components/align/align_component.cpp b/frameworks/core/components/align/align_component.cpp new file mode 100644 index 00000000..7a3847eb --- /dev/null +++ b/frameworks/core/components/align/align_component.cpp @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/align/align_component.h" + +#include "core/components/align/render_align.h" +#include "core/components/common/properties/alignment.h" + +namespace OHOS::Ace { + +AlignComponent::AlignComponent(const std::list>& children, const Alignment& alignment) + : ComponentGroup(children), alignment_(alignment) +{} + +RefPtr AlignComponent::CreateRenderNode() +{ + return RenderAlign::Create(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/align/align_component.h b/frameworks/core/components/align/align_component.h new file mode 100644 index 00000000..8b173384 --- /dev/null +++ b/frameworks/core/components/align/align_component.h @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_ALIGN_ALIGN_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_ALIGN_ALIGN_COMPONENT_H + +#include "base/utils/utils.h" +#include "core/components/common/properties/alignment.h" +#include "core/pipeline/base/component_group.h" + +namespace OHOS::Ace { + +class AlignComponent : public ComponentGroup { + DECLARE_ACE_TYPE(AlignComponent, ComponentGroup); + +public: + AlignComponent(const std::list>& children, const Alignment& alignment); + ~AlignComponent() override = default; + + RefPtr CreateRenderNode() override; + + void SetAlignment(const Alignment& alignment) + { + alignment_ = alignment; + } + + const Alignment& GetAlignment() const + { + return alignment_; + } + +private: + Alignment alignment_ = Alignment::CENTER; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_ALIGN_ALIGN_COMPONENT_H diff --git a/frameworks/core/components/align/render_align.cpp b/frameworks/core/components/align/render_align.cpp new file mode 100644 index 00000000..36e0686e --- /dev/null +++ b/frameworks/core/components/align/render_align.cpp @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/align/render_align.h" + +#include "base/log/log.h" +#include "core/components/align/align_component.h" +#include "core/components/common/properties/alignment.h" + +namespace OHOS::Ace { + +RefPtr RenderAlign::Create() +{ + return AceType::MakeRefPtr(); +} + +void RenderAlign::Update(const RefPtr& component) +{ + const RefPtr align = AceType::DynamicCast(component); + if (align && ((align->GetAlignment() != alignment_) || !hasUpdated_)) { + hasUpdated_ = true; + alignment_ = align->GetAlignment(); + LOGD("Horizontal: %{public}lf, Vertical: %{public}lf", alignment_.GetHorizontal(), alignment_.GetVertical()); + MarkNeedLayout(); + } +} + +void RenderAlign::PerformLayout() +{ + LOGD("Start PerformLayout"); + const std::list>& children = GetChildren(); + LOGD("align children.size() : %{public}zu", children.size()); + if (!children.empty()) { + const auto& child = children.front(); + const LayoutParam& alignInnerLayout = GetLayoutParam(); + child->Layout(alignInnerLayout); + LOGD("Done child layout."); + if (!alignInnerLayout.GetMaxSize().IsInfinite()) { + SetLayoutSize(alignInnerLayout.GetMaxSize()); + } else { + SetLayoutSize(child->GetLayoutSize()); + } + child->SetPosition(Alignment::GetAlignPosition(GetLayoutSize(), child->GetLayoutSize(), alignment_)); + } else { + LOGD("No child found in Align."); + } + LOGD("Done PerformLayout"); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/align/render_align.h b/frameworks/core/components/align/render_align.h new file mode 100644 index 00000000..c988e848 --- /dev/null +++ b/frameworks/core/components/align/render_align.h @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_ALIGN_RENDER_ALIGN_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_ALIGN_RENDER_ALIGN_H + +#include "core/components/common/properties/alignment.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderAlign final : public RenderNode { + DECLARE_ACE_TYPE(RenderAlign, RenderNode); + +public: + static RefPtr Create(); + + void Update(const RefPtr& component) override; + void PerformLayout() override; + +private: + Alignment alignment_ = Alignment::CENTER; + bool hasUpdated_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_ALIGN_RENDER_ALIGN_H diff --git a/frameworks/core/components/arc/BUILD.gn b/frameworks/core/components/arc/BUILD.gn new file mode 100644 index 00000000..a66adcf2 --- /dev/null +++ b/frameworks/core/components/arc/BUILD.gn @@ -0,0 +1,23 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("arc") { + sources = [ + "arc_component.cpp", + "arc_element.cpp", + "flutter_render_arc.cpp", + "render_arc.cpp", + ] +} diff --git a/frameworks/core/components/arc/arc_component.cpp b/frameworks/core/components/arc/arc_component.cpp new file mode 100644 index 00000000..7fdc5649 --- /dev/null +++ b/frameworks/core/components/arc/arc_component.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/arc/arc_component.h" + +#include "core/components/arc/arc_element.h" +#include "core/components/arc/render_arc.h" + +namespace OHOS::Ace { + +RefPtr ArcComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +RefPtr ArcComponent::CreateRenderNode() +{ + return RenderArc::Create(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/arc/arc_component.h b/frameworks/core/components/arc/arc_component.h new file mode 100644 index 00000000..862429b9 --- /dev/null +++ b/frameworks/core/components/arc/arc_component.h @@ -0,0 +1,182 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_ARC_ARC_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_ARC_ARC_COMPONENT_H + +#include "base/geometry/dimension.h" +#include "base/log/log.h" +#include "core/components/common/properties/color.h" +#include "core/pipeline/base/render_component.h" + +namespace OHOS::Ace { + +enum class ArcFlex { + FLEX_X, + FLEX_Y, + FLEX_XY, +}; + +class ArcComponent : public RenderComponent { + DECLARE_ACE_TYPE(ArcComponent, RenderComponent); + +public: + ArcComponent() = default; + ~ArcComponent() override = default; + RefPtr CreateElement() override; + RefPtr CreateRenderNode() override; + + ArcComponent(double outerRadius, double width) + { + SetOuterRadius(outerRadius); + SetWidth(width); + } + + ArcComponent(double outerRadius, double width, double startAngle, double sweepAngle) + { + SetOuterRadius(outerRadius); + SetWidth(width); + startAngle_ = startAngle; + sweepAngle_ = sweepAngle; + } + + ArcComponent(double outerRadius, double width, double startAngle, double sweepAngle, const Color& color) + { + SetOuterRadius(outerRadius); + SetWidth(width); + startAngle_ = startAngle; + sweepAngle_ = sweepAngle; + color_ = color; + } + + const Dimension& GetOuterRadius() const + { + return outerRadius_; + } + + void SetOuterRadius(const Dimension& outerRadius) + { + if (!outerRadius.IsValid()) { + LOGE("Invalid outerRadius:%{public}lf", outerRadius.Value()); + return; + } + outerRadius_ = outerRadius; + } + + void SetOuterRadius(double outerRadius) + { + if (outerRadius < 0.0) { + LOGE("Invalid outerRadius:%{public}lf", outerRadius); + return; + } + outerRadius_ = Dimension(outerRadius); + } + + const Dimension& GetWidth() const + { + return width_; + } + + void SetWidth(const Dimension& width) + { + if (!width.IsValid()) { + LOGE("Invalid width:%{public}lf", width.Value()); + return; + } + width_ = width; + } + + void SetWidth(double width) + { + if (width < 0.0) { + LOGE("Invalid width:%{public}lf", width); + return; + } + width_ = Dimension(width); + } + + double GetStartAngle() const + { + return startAngle_; + } + + void SetStartAngle(double startAngle) + { + startAngle_ = startAngle; + } + + double GetSweepAngle() const + { + return sweepAngle_; + } + + void SetSweepAngle(double sweepAngle) + { + sweepAngle_ = sweepAngle; + } + + const Color& GetColor() const + { + return color_; + } + + void SetColor(const Color& color) + { + color_ = color; + } + + ArcFlex GetArcFlex() const + { + return flex_; + } + + void SetArcFlex(ArcFlex flex) + { + flex_ = flex; + } + + const Dimension& GetShadowWidth() const + { + return arcShadowWidth_; + } + + void SetShadowWidth(const Dimension& width) + { + arcShadowWidth_ = width; + } + + bool IsAcrValid() const + { + return !NearZero(sweepAngle_); + } + + bool IsArcShow() const + { + return color_.GetAlpha() != 0; + } + +private: + Dimension outerRadius_; + Dimension width_; + Dimension arcShadowWidth_; + ArcFlex flex_ = ArcFlex::FLEX_X; + Color color_ = Color::BLACK; + double startAngle_ = 0.0; + double sweepAngle_ = 0.0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_ARC_ARC_COMPONENT_H diff --git a/frameworks/core/components/arc/arc_element.cpp b/frameworks/core/components/arc/arc_element.cpp new file mode 100644 index 00000000..526bf56e --- /dev/null +++ b/frameworks/core/components/arc/arc_element.cpp @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/arc/arc_element.h" + +#include "core/components/arc/arc_component.h" + +namespace OHOS::Ace { + +void ArcElement::PerformBuild() +{ + RefPtr arc = AceType::DynamicCast(component_); + if (arc) { + RenderElement::PerformBuild(); + } +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/arc/arc_element.h b/frameworks/core/components/arc/arc_element.h new file mode 100644 index 00000000..c0d549d1 --- /dev/null +++ b/frameworks/core/components/arc/arc_element.h @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_ARC_ARC_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_ARC_ARC_ELEMENT_H + +#include "core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +class ArcElement : public RenderElement { + DECLARE_ACE_TYPE(ArcElement, RenderElement); + +public: + ArcElement() = default; + ~ArcElement() override = default; + void PerformBuild() override; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_ARC_ARC_ELEMENT_H diff --git a/frameworks/core/components/arc/flutter_render_arc.cpp b/frameworks/core/components/arc/flutter_render_arc.cpp new file mode 100644 index 00000000..0c87b7df --- /dev/null +++ b/frameworks/core/components/arc/flutter_render_arc.cpp @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/arc/flutter_render_arc.h" + +#include "third_party/skia/include/core/SkMaskFilter.h" + +namespace OHOS::Ace { + +RefPtr RenderArc::Create() +{ + return AceType::MakeRefPtr(); +} + +void FlutterRenderArc::Paint(RenderContext& context, const Offset& offset) +{ + if (!IsAcrValid()) { + LOGE("IsAcrValid is false."); + return; + } + + if (!IsArcShow()) { + LOGE("IsAcrShow is false."); + return; + } + + const auto renderContext = static_cast(&context); + flutter::Canvas* canvas = renderContext->GetCanvas(); + if (canvas == nullptr) { + LOGE("Paint canvas is null"); + return; + } + + double widthHalf = width_ / ARC_RADIUS_TO_DIAMETER; + flutter::Paint paint; + flutter::PaintData paintData; + paint.paint()->setAntiAlias(true); + paint.paint()->setColor(color_.GetValue()); + paint.paint()->setStrokeWidth(width_); + paint.paint()->setStrokeCap(SkPaint::kRound_Cap); + + if (!NearZero(width_)) { + paint.paint()->setStyle(SkPaint::Style::kStroke_Style); + if (!NearZero(shadowWidth_)) { + paint.paint()->setMaskFilter( + SkMaskFilter::MakeBlur(SkBlurStyle::kSolid_SkBlurStyle, static_cast(shadowWidth_))); + } + canvas->drawArc(offset.GetX() + widthHalf, offset.GetY() + widthHalf, + offset.GetX() + arcRadiusX_ * ARC_RADIUS_TO_DIAMETER - widthHalf, + offset.GetY() + arcRadiusY_ * ARC_RADIUS_TO_DIAMETER - widthHalf, startAngle_, sweepAngle_, false, paint, + paintData); + } else { + paint.paint()->setStyle(SkPaint::Style::kFill_Style); + canvas->drawArc(offset.GetX(), offset.GetY(), offset.GetX() + arcRadiusX_ * ARC_RADIUS_TO_DIAMETER, + offset.GetY() + arcRadiusY_ * ARC_RADIUS_TO_DIAMETER, startAngle_, sweepAngle_, true, paint, paintData); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/arc/flutter_render_arc.h b/frameworks/core/components/arc/flutter_render_arc.h new file mode 100644 index 00000000..e0ea3cb8 --- /dev/null +++ b/frameworks/core/components/arc/flutter_render_arc.h @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_ARC_FLUTTER_RENDER_ARC_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_ARC_FLUTTER_RENDER_ARC_H + +#include "core/components/arc/render_arc.h" +#include "core/pipeline/base/flutter_render_context.h" + +namespace OHOS::Ace { + +class FlutterRenderArc final : public RenderArc { + DECLARE_ACE_TYPE(FlutterRenderArc, RenderArc); + +public: + FlutterRenderArc() = default; + ~FlutterRenderArc() override = default; + + void Paint(RenderContext& context, const Offset& offset) override; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_ARC_FLUTTER_RENDER_ARC_H diff --git a/frameworks/core/components/arc/render_arc.cpp b/frameworks/core/components/arc/render_arc.cpp new file mode 100644 index 00000000..e5ba0e90 --- /dev/null +++ b/frameworks/core/components/arc/render_arc.cpp @@ -0,0 +1,188 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/arc/render_arc.h" + +#include "core/components/arc/arc_component.h" + +namespace OHOS::Ace { +namespace { + +constexpr double ROOT = 0.5; + +} // namespace + +void RenderArc::PerformLayout() +{ + // get parameters set by user + arcRadiusX_ = 0.0; + arcRadiusY_ = 0.0; + arcWidth_ = 0.0; + if (!NearZero(outerRadius_)) { + arcRadiusX_ = outerRadius_; + arcRadiusY_ = outerRadius_; + } + if (!NearZero(width_)) { + arcWidth_ = width_; + } + + // calculate self size + const LayoutParam& layoutSetByParent = GetLayoutParam(); + Size arcMax = layoutSetByParent.GetMaxSize(); + + if (NearZero(arcRadiusX_)) { + switch (flex_) { + case ArcFlex::FLEX_X: + arcRadiusX_ = arcMax.Width() / ARC_RADIUS_TO_DIAMETER; + arcRadiusY_ = arcRadiusX_; + outerRadius_ = arcRadiusX_; + break; + case ArcFlex::FLEX_Y: + arcRadiusY_ = arcMax.Height() / ARC_RADIUS_TO_DIAMETER; + arcRadiusX_ = arcRadiusY_; + outerRadius_ = arcRadiusY_; + break; + case ArcFlex::FLEX_XY: + arcRadiusX_ = arcMax.Width() / ARC_RADIUS_TO_DIAMETER; + arcRadiusY_ = arcMax.Height() / ARC_RADIUS_TO_DIAMETER; + outerRadius_ = std::min(arcRadiusX_, arcRadiusY_); + break; + default: + break; + } + } + + SetLayoutSize(Size(arcRadiusX_ * ARC_RADIUS_TO_DIAMETER, arcRadiusY_ * ARC_RADIUS_TO_DIAMETER)); + MarkNeedRender(); +} + +void RenderArc::Update(const RefPtr& component) +{ + RefPtr arcComponent = AceType::DynamicCast(component); + if (arcComponent) { + startAngle_ = arcComponent->GetStartAngle(); + sweepAngle_ = arcComponent->GetSweepAngle(); + color_ = arcComponent->GetColor(); + flex_ = arcComponent->GetArcFlex(); + + auto context = GetContext().Upgrade(); + if (context) { + outerRadius_ = context->NormalizeToPx(arcComponent->GetOuterRadius()); + width_ = context->NormalizeToPx(arcComponent->GetWidth()); + shadowWidth_ = context->NormalizeToPx(arcComponent->GetShadowWidth()); + } else { + LOGE("GetContext failed."); + } + MarkNeedLayout(); + } +} + +double RenderArc::GetOuterRadius() const +{ + return outerRadius_; +} + +double RenderArc::GetWidth() const +{ + return width_; +} + +double RenderArc::GetStartAngle() const +{ + return startAngle_; +} + +double RenderArc::GetSweepAngle() const +{ + return sweepAngle_; +} + +Color RenderArc::GetColor() const +{ + return color_; +} + +void RenderArc::SetOuterRadius(double outerRadius) +{ + if (outerRadius < 0.0) { + LOGE("Invalid outerRadius:%{public}lf", outerRadius); + return; + } + outerRadius_ = outerRadius; +} + +void RenderArc::SetWidth(double width) +{ + if (width < 0.0) { + LOGE("Invalid width:%{public}lf", width); + return; + } + width_ = width; +} + +void RenderArc::SetStartAngle(double startAngle) +{ + startAngle_ = startAngle; +} + +void RenderArc::SetSweepAngle(double sweepAngle) +{ + sweepAngle_ = sweepAngle; +} + +void RenderArc::SetColor(const Color& color) +{ + color_ = color; +} + +bool RenderArc::IsAcrValid() const +{ + return !NearZero(sweepAngle_); +} + +bool RenderArc::IsArcShow() const +{ + return color_.GetAlpha() != 0; +} + +double RenderArc::GetPositionAngle(const Offset& position, double correctOffset) const +{ + double angle = atan2(position.GetY() - arcRadiusY_, position.GetX() - arcRadiusX_); + if (angle < startAngle_ - correctOffset) { + angle += M_PI * ARC_RADIUS_TO_DIAMETER; + } + return angle; +} + +bool RenderArc::IsInRegion(const Point& point) const +{ + double distance = pow(pow(point.GetX() - arcRadiusX_, SQUARE) + pow(point.GetY() - arcRadiusY_, SQUARE), ROOT); + double outArcAngle = width_ / (outerRadius_ - width_ / ARC_RADIUS_TO_DIAMETER) / ARC_RADIUS_TO_DIAMETER; + double angle = GetPositionAngle(Offset(point.GetX(), point.GetY()), outArcAngle); + if (distance > outerRadius_ || distance < outerRadius_ - width_) { + return false; + } + if (angle < startAngle_ - outArcAngle || angle > startAngle_ + sweepAngle_ + outArcAngle) { + return false; + } + return true; +} + +double RenderArc::GetShadowWidth() const +{ + return shadowWidth_; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/arc/render_arc.h b/frameworks/core/components/arc/render_arc.h new file mode 100644 index 00000000..b919930f --- /dev/null +++ b/frameworks/core/components/arc/render_arc.h @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_ARC_RENDER_ARC_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_ARC_RENDER_ARC_H + +#include "core/components/arc/arc_component.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +constexpr double ARC_RADIUS_TO_DIAMETER = 2.0; + +class RenderArc : public RenderNode { + DECLARE_ACE_TYPE(RenderArc, RenderNode); + +public: + static RefPtr Create(); + void Update(const RefPtr& component) override; + void PerformLayout() override; + + double GetOuterRadius() const; + + double GetWidth() const; + + double GetStartAngle() const; + + double GetSweepAngle() const; + + Color GetColor() const; + + void SetOuterRadius(double outerRadius); + + void SetWidth(double width); + + void SetStartAngle(double startAngle); + + void SetSweepAngle(double sweepAngle); + + void SetColor(const Color& color); + + bool IsAcrValid() const; + + bool IsArcShow() const; + + double GetPositionAngle(const Offset& position, double correctOffset) const; + + bool IsInRegion(const Point& point) const; + + double GetShadowWidth() const; + +protected: + double outerRadius_ = 0.0; + double width_ = 0.0; + ArcFlex flex_ = ArcFlex::FLEX_X; + + double startAngle_ = 0.0; + double sweepAngle_ = 0.0; + + Color color_ = Color::BLACK; + + double arcRadiusX_ = 0.0; + double arcRadiusY_ = 0.0; + double arcWidth_ = 0.0; + + double shadowWidth_ = 0.0; +}; // class RenderArc + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_ARC_RENDER_ARC_H diff --git a/frameworks/core/components/badge/BUILD.gn b/frameworks/core/components/badge/BUILD.gn new file mode 100644 index 00000000..4479d8db --- /dev/null +++ b/frameworks/core/components/badge/BUILD.gn @@ -0,0 +1,22 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("badge") { + sources = [ + "badge_component.cpp", + "flutter_render_badge.cpp", + "render_badge.cpp", + ] +} diff --git a/frameworks/core/components/badge/badge_component.cpp b/frameworks/core/components/badge/badge_component.cpp new file mode 100644 index 00000000..0f256870 --- /dev/null +++ b/frameworks/core/components/badge/badge_component.cpp @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/badge/badge_component.h" + +#include "core/components/badge/badge_element.h" +#include "core/components/badge/render_badge.h" + +namespace OHOS::Ace { + +BadgeComponent::BadgeComponent() : SoleChildComponent() {} + +RefPtr BadgeComponent::CreateRenderNode() +{ + return RenderBadge::Create(); +} + +RefPtr BadgeComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/badge/badge_component.h b/frameworks/core/components/badge/badge_component.h new file mode 100644 index 00000000..b364c5c0 --- /dev/null +++ b/frameworks/core/components/badge/badge_component.h @@ -0,0 +1,173 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BADGE_BADGE_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BADGE_BADGE_COMPONENT_H + +#include "base/geometry/dimension.h" +#include "core/components/common/properties/edge.h" +#include "core/pipeline/base/sole_child_component.h" + +namespace OHOS::Ace { + +class ACE_EXPORT BadgeComponent : public SoleChildComponent { + DECLARE_ACE_TYPE(BadgeComponent, SoleChildComponent); + +public: + BadgeComponent(); + ~BadgeComponent() override = default; + + RefPtr CreateRenderNode() override; + RefPtr CreateElement() override; + + const Color& GetBadgeColor() const + { + return badgeColor_; + } + + const Color& GetBadgeTextColor() const + { + return badgeTextColor_; + } + + const Dimension& GetBadgeFontSize() const + { + return badgeFontSize_; + } + + const EventMarker& GetClickEvent() const + { + return clickEvent_; + } + + BadgePosition GetBadgePosition() const + { + return badgePosition_; + } + + const Edge& GetPadding() const + { + return padding_; + } + + const Dimension& GetBadgeCicleSize() const + { + return badgeCircleSize_; + } + + const std::string& GetBadgeLabel() const + { + return badgeLabel_; + } + + void SetPadding(const Edge& padding) + { + padding_ = padding; + } + + int32_t GetMessageCount() const + { + return messageCount_; + } + + bool IsShowMessage() const + { + return showMessage_; + } + + int32_t GetMaxCount() const + { + return maxCount_; + } + + bool IsBadgeCircleSizeDefined() const + { + return badgeCircleSizeDefined_; + } + + void SetBadgeCircleSizeDefined(bool badgeCircleSizeDefined) + { + badgeCircleSizeDefined_ = badgeCircleSizeDefined; + } + + void SetMaxCount(int32_t maxCount) + { + maxCount_ = maxCount; + } + + void SetShowMessage(bool showMessage) + { + showMessage_ = showMessage; + } + + void SetMessageCount(int32_t messageCount) + { + messageCount_ = messageCount; + } + + void SetBadgePosition(BadgePosition badgePostion) + { + badgePosition_ = badgePostion; + } + + void SetBadgeTextColor(const Color& badgeTextColor) + { + badgeTextColor_ = badgeTextColor; + } + + void SetBadgeFontSize(const Dimension& badgeFontSize) + { + badgeFontSize_ = badgeFontSize; + } + + void SetBadgeColor(const Color& color) + { + badgeColor_ = color; + } + + void SetClickEvent(const EventMarker& event) + { + clickEvent_ = event; + } + + void SetBadgeCircleSize(const Dimension& badgeCircleSize) + { + badgeCircleSize_ = badgeCircleSize; + badgeCircleSizeDefined_ = true; + } + + void SetBadgeLabel(const std::string& badgeLabel) + { + badgeLabel_ = badgeLabel; + } + +private: + Color badgeColor_; + Color badgeTextColor_; + Edge padding_; + EventMarker clickEvent_; + Dimension badgeFontSize_; + Dimension badgeCircleSize_; + BadgePosition badgePosition_ { BadgePosition::RIGHT_TOP }; + int32_t messageCount_ = 0; + bool showMessage_ = false; + int32_t maxCount_ = 99; + bool badgeCircleSizeDefined_ = false; + std::string badgeLabel_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BADGE_BADGE_COMPONENT_H diff --git a/frameworks/core/components/badge/badge_element.h b/frameworks/core/components/badge/badge_element.h new file mode 100644 index 00000000..eb85c415 --- /dev/null +++ b/frameworks/core/components/badge/badge_element.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BADGE_BADGE_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BADGE_BADGE_ELEMENT_H + +#include "core/components/badge/badge_component.h" +#include "core/components/badge/render_badge.h" +#include "core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +class BadgeElement : public SoleChildElement { + DECLARE_ACE_TYPE(BadgeElement, SoleChildElement); + +public: + BadgeElement() = default; + ~BadgeElement() override = default; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BADGE_BADGE_ELEMENT_H diff --git a/frameworks/core/components/badge/badge_theme.h b/frameworks/core/components/badge/badge_theme.h new file mode 100644 index 00000000..ed705a60 --- /dev/null +++ b/frameworks/core/components/badge/badge_theme.h @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BADGE_BADGE_THEME_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BADGE_BADGE_THEME_H + +#include "core/components/common/properties/color.h" +#include "core/components/theme/theme.h" +#include "core/components/theme/theme_constants.h" +#include "core/components/theme/theme_manager.h" + +namespace OHOS::Ace { + +class BadgeTheme : public virtual Theme { + DECLARE_ACE_TYPE(BadgeTheme, Theme); + +public: + class Builder { + public: + Builder() = default; + ~Builder() = default; + + RefPtr Build(const RefPtr& themeConstants) const + { + RefPtr theme = AceType::Claim(new BadgeTheme()); + if (!themeConstants) { + return theme; + } + theme->badgeColor_ = themeConstants->GetColor(THEME_BADGE_COLOR); + theme->messageCount_ = themeConstants->GetInt(THEME_BADGE_MESSAGECOUNT); + theme->badgePosition_ = BadgePosition(themeConstants->GetInt(THEME_BADGE_POSITION)); + theme->showMessage_ = themeConstants->GetInt(THEME_BADGE_SHOWMESSAGE); + theme->badgeTextColor_ = themeConstants->GetColor(THEME_BADGE_TEXT_COLOR); + theme->badgeFontSize_ = themeConstants->GetDimension(THEME_BADGE_TEXT_FONT_SIZE); + ParsePattern(themeConstants->GetThemeStyle(), theme); + return theme; + } + + private: + void ParsePattern(const RefPtr& themeStyle, const RefPtr& theme) const + { + if (!themeStyle) { + return; + } + theme->badgeColor_ = themeStyle->GetAttr(THEME_ATTR_COLOR_BADGE_RED, Color::BLACK); + theme->badgeFontSize_ = themeStyle->GetAttr(THEME_ATTR_TEXT_SIZE_CAPTION, 0.0_vp); + theme->badgeTextColor_ = themeStyle->GetAttr(THEME_ATTR_TEXT_COLOR_PRIMARY_INVERSE, Color::BLACK); + } + }; + + ~BadgeTheme() override = default; + + const Color& GetBadgeColor() const + { + return badgeColor_; + } + + int32_t GetMessageCount() const + { + return messageCount_; + } + + BadgePosition GetBadgePosition() const + { + return badgePosition_; + } + + bool GetShowMessage() const + { + return showMessage_; + } + + const Color& GetBadgeTextColor() const + { + return badgeTextColor_; + } + + const Dimension& GetBadgeFontSize() const + { + return badgeFontSize_; + } + +protected: + BadgeTheme() = default; + +private: + Color badgeColor_; + Color badgeTextColor_; + int32_t messageCount_; + BadgePosition badgePosition_; + bool showMessage_; + Dimension badgeFontSize_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BADGE_BADGE_THEME_H diff --git a/frameworks/core/components/badge/flutter_render_badge.cpp b/frameworks/core/components/badge/flutter_render_badge.cpp new file mode 100644 index 00000000..ab075366 --- /dev/null +++ b/frameworks/core/components/badge/flutter_render_badge.cpp @@ -0,0 +1,148 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/badge/flutter_render_badge.h" + +#include "core/components/common/properties/alignment.h" +#include "core/pipeline/base/flutter_render_context.h" +#include "core/pipeline/pipeline_context.h" + +namespace OHOS::Ace { +namespace { + +constexpr Dimension CIRCLE_BADGE_SIZE = 6.0_vp; +constexpr Dimension NUMERICAL_BADGE_CIRCLE_SIZE = 16.0_vp; +constexpr Dimension NUMERICAL_BADGE_PADDING = 6.0_vp; + +} // namespace + +RefPtr RenderBadge::Create() +{ + return AceType::MakeRefPtr(); +} + +void FlutterRenderBadge::Paint(RenderContext& context, const Offset& offset) +{ + auto badgeChild = GetChildren().front(); + if (!badgeChild) { + return; + } + context.PaintChild(badgeChild, offset + badgeChildInitialOffset_); + if (showMessage_) { + DrawBadge(context, offset); + if ((!textData_.empty() || messageCount_ > 0) && showMessage_ && + (LessOrEqual(textSize_.Height(), badgeHeight_))) { + PaintText(offset + textInitialOffset_, context); + } + } +} + +void FlutterRenderBadge::DrawCircleBadge(flutter::Canvas& canvas, const Offset& offset) +{ + flutter::Paint paint; + paint.paint()->setColor(badgeColor_.GetValue()); + paint.paint()->setStyle(SkPaint::Style::kFill_Style); + paint.paint()->setAntiAlias(true); + flutter::RRect rRect; + flutter::PaintData paintData; + badgeCircleDiameter_ = badgeCircleSizeDefined_ ? (badgeCircleSize_.IsValid() ? NormalizeToPx(badgeCircleSize_) : 0) + : NormalizeToPx(CIRCLE_BADGE_SIZE); + badgeCircleRadius_ = badgeCircleDiameter_ / 2; + rRect.sk_rrect.setRectXY( + SkRect::MakeIWH(badgeCircleDiameter_, badgeCircleDiameter_), badgeCircleRadius_, badgeCircleRadius_); + if (badgePosition_ == BadgePosition::RIGHT_TOP) { + rRect.sk_rrect.offset(offset.GetX() + width_ - badgeCircleDiameter_, offset.GetY()); + } else if (badgePosition_ == BadgePosition::RIGHT) { + rRect.sk_rrect.offset( + offset.GetX() + width_ - badgeCircleDiameter_, offset.GetY() + height_ / 2 - badgeCircleRadius_); + } else { + rRect.sk_rrect.offset(offset.GetX(), offset.GetY() + height_ / 2 - badgeCircleRadius_); + } + canvas.drawRRect(rRect, paint, paintData); +} + +void FlutterRenderBadge::DrawNumericalBadge(flutter::Canvas& canvas, const Offset& offset) +{ + flutter::Paint paint; + paint.paint()->setColor(badgeColor_.GetValue()); + paint.paint()->setStyle(SkPaint::Style::kFill_Style); + paint.paint()->setAntiAlias(true); + flutter::RRect rRect; + flutter::PaintData paintData; + textSize_ = CalculateTextSize(textData_, textStyle_, badgeRenderText_); + badgeCircleDiameter_ = badgeCircleSizeDefined_ ? (badgeCircleSize_.IsValid() ? NormalizeToPx(badgeCircleSize_) : 0) + : NormalizeToPx(NUMERICAL_BADGE_CIRCLE_SIZE); + badgeHeight_ = badgeCircleDiameter_; + if (!textData_.empty() || messageCount_ > 0) { + if ((textData_.size() <= 1 && textData_.size() > 0) || + ((messageCount_ < 10 && messageCount_ <= countLimit_) && textData_.empty())) { + badgeCircleRadius_ = badgeCircleDiameter_ / 2; + badgeWidth_ = badgeCircleDiameter_; + } else if (textData_.size() > 1 || messageCount_ > countLimit_) { + badgeWidth_ = textSize_.Width() + NormalizeToPx(NUMERICAL_BADGE_PADDING) * 2; + badgeCircleRadius_ = badgeCircleDiameter_ / 2; + } + } + rRect.sk_rrect.setRectXY(SkRect::MakeIWH(badgeWidth_, badgeHeight_), badgeCircleRadius_, badgeCircleRadius_); + if (badgePosition_ == BadgePosition::RIGHT_TOP) { + textInitialOffset_ = Offset(width_ - badgeCircleDiameter_ + NormalizeToPx(2.0_vp), 0 - NormalizeToPx(2.0_vp)); + rRect.sk_rrect.offset(offset.GetX() + textInitialOffset_.GetX(), offset.GetY() + textInitialOffset_.GetY()); + } else if (badgePosition_ == BadgePosition::RIGHT) { + textInitialOffset_ = Offset(width_ - badgeCircleDiameter_, height_ / 2 - badgeCircleRadius_); + rRect.sk_rrect.offset(offset.GetX() + textInitialOffset_.GetX(), offset.GetY() + textInitialOffset_.GetY()); + } else { + textInitialOffset_ = Offset(0, height_ / 2 - badgeCircleRadius_); + rRect.sk_rrect.offset(offset.GetX(), offset.GetY() + textInitialOffset_.GetY()); + } + canvas.drawRRect(rRect, paint, paintData); +} + +void FlutterRenderBadge::DrawBadge(RenderContext& context, const Offset& offset) +{ + flutter::Canvas* canvas = static_cast(context).GetCanvas(); + if (canvas == nullptr) { + LOGE("Paint canvas is null"); + return; + } + if (!textData_.empty() || messageCount_ > 0) { + DrawNumericalBadge(*canvas, offset); + } else { + DrawCircleBadge(*canvas, offset); + } +} + +void FlutterRenderBadge::PaintText(const Offset& textOffset, RenderContext& context) const +{ + auto textPos = Alignment::GetAlignPosition(Size(badgeWidth_, badgeHeight_), textSize_, Alignment::CENTER); + if (!badgeRenderText_) { + return; + } + badgeRenderText_->Paint(context, textOffset + textPos); +} + +Size FlutterRenderBadge::CalculateTextSize( + const std::string& text, const TextStyle& textStyle, RefPtr& renderText) +{ + if (!renderText) { + LOGW("the render text is nullptr"); + return Size(); + } + renderText->SetTextData(text); + renderText->SetTextStyle(textStyle); + renderText->PerformLayout(); + return renderText->GetLayoutSize(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/badge/flutter_render_badge.h b/frameworks/core/components/badge/flutter_render_badge.h new file mode 100644 index 00000000..6bf77d28 --- /dev/null +++ b/frameworks/core/components/badge/flutter_render_badge.h @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BADGE_FLUTTER_RENDER_BADGE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BADGE_FLUTTER_RENDER_BADGE_H + +#include "flutter/lib/ui/painting/canvas.h" + +#include "core/components/badge/render_badge.h" + +namespace OHOS::Ace { + +class FlutterRenderBadge : public RenderBadge { + DECLARE_ACE_TYPE(FlutterRenderBadge, RenderBadge); + +public: + FlutterRenderBadge() = default; + ~FlutterRenderBadge() override = default; + + void Paint(RenderContext& context, const Offset& offset) override; + +private: + void DrawBadge(RenderContext& context, const Offset& offset); + Size CalculateTextSize(const std::string& text, const TextStyle& textStyle, + RefPtr& renderText) override; + void PaintText(const Offset& textOffset, RenderContext& context) const; + void DrawCircleBadge(flutter::Canvas& canvas, const Offset& offset); + void DrawNumericalBadge(flutter::Canvas& canvas, const Offset& offset); + + double badgeCircleDiameter_ = 0.0; + double badgeCircleRadius_ = 0.0; + double badgeWidth_ = 0.0; + double badgeHeight_ = 0.0; + Size textSize_; + Offset textInitialOffset_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BADGE_FLUTTER_RENDER_BADGE_H diff --git a/frameworks/core/components/badge/render_badge.cpp b/frameworks/core/components/badge/render_badge.cpp new file mode 100644 index 00000000..eb5e1852 --- /dev/null +++ b/frameworks/core/components/badge/render_badge.cpp @@ -0,0 +1,176 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/badge/render_badge.h" + +#include "base/log/event_report.h" +#include "core/common/font_manager.h" +#include "core/components/common/properties/alignment.h" +#include "core/event/ace_event_helper.h" + +namespace OHOS::Ace { + +RenderBadge::RenderBadge() +{ + clickRecognizer_ = AceType::MakeRefPtr(); + clickRecognizer_->SetOnClick([wp = AceType::WeakClaim(this)](const ClickInfo&) { + auto badge = wp.Upgrade(); + if (badge) { + badge->HandleClickEvent(); + } + }); +} + +RenderBadge::~RenderBadge() +{ + auto context = context_.Upgrade(); + if (context) { + context->RemoveFontNode(WeakClaim(this)); + auto fontManager = context->GetFontManager(); + if (fontManager) { + fontManager->RemoveVariationNode(WeakClaim(this)); + } + } +} + +void RenderBadge::HandleClickEvent() +{ + if (onClick_) { + onClick_(); + } +} + +void RenderBadge::OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) +{ + if (!clickRecognizer_) { + return; + } + result.emplace_back(clickRecognizer_); +} + +void RenderBadge::Update(const RefPtr& component) +{ + badge_ = AceType::DynamicCast(component); + if (!badge_) { + LOGE("Update error, badge component is null"); + EventReport::SendRenderException(RenderExcepType::RENDER_COMPONENT_ERR); + return; + } + badgeColor_ = badge_->GetBadgeColor(); + badgePosition_ = badge_->GetBadgePosition(); + messageCount_ = badge_->GetMessageCount(); + showMessage_ = badge_->IsShowMessage(); + countLimit_ = badge_->GetMaxCount(); + padding_ = badge_->GetPadding(); + badgeCircleSizeDefined_ = badge_->IsBadgeCircleSizeDefined(); + badgeCircleSize_ = badge_->GetBadgeCicleSize(); + badgeChildInitialOffset_ = Offset(NormalizeToPx(padding_.Left()), NormalizeToPx(padding_.Top())); + onClick_ = AceAsyncEvent::Create(badge_->GetClickEvent(), context_); + badgeLabel_ = badge_->GetBadgeLabel(); + if (badgeLabel_.empty()) { + if (messageCount_ > 0) { + if (messageCount_ > countLimit_) { + textData_ = std::to_string(countLimit_) + '+'; + } else { + textData_ = std::to_string(messageCount_); + } + } + } else { + textData_ = badgeLabel_; + } + badgeTextComponent_ = AceType::MakeRefPtr(textData_); + if (!badgeRenderText_) { + InitialBadgeText(); + } + UpdateBadgeText(); +} + +void RenderBadge::PerformLayout() +{ + if (!GetChildren().front()) { + SetLayoutSize(Size()); + showMessage_ = false; + return; + } + + auto context = context_.Upgrade(); + if (context) { + dipScale_ = context->GetDipScale(); + } + + // child layout + LayoutParam layoutParam = GetLayoutParam(); + Size minSize = layoutParam.GetMinSize(); + Size maxSize = layoutParam.GetMaxSize(); + LayoutParam innerLayoutParam = layoutParam; + Size paddingSize = padding_.GetLayoutSizeInPx(dipScale_); + innerLayoutParam.SetMinSize(minSize - paddingSize); + innerLayoutParam.SetMaxSize(maxSize - paddingSize); + double maxWidth = minSize.Width(); + double maxHeight = minSize.Height(); + if (!GetChildren().empty()) { + auto child = GetChildren().front(); + child->Layout(innerLayoutParam); + maxWidth = std::max(maxWidth, child->GetLayoutSize().Width() + paddingSize.Width()); + maxHeight = std::max(maxHeight, child->GetLayoutSize().Height() + paddingSize.Height()); + } + + // calculate self layout size + if (maxSize.IsInfinite()) { + // same with child size + badgeSize_ = Size(maxWidth, maxHeight); + } else { + badgeSize_ = maxSize; + } + if (!badgeSize_.IsValid()) { + badgeSize_ = Size(); + showMessage_ = false; + } + SetLayoutSize(badgeSize_); + width_ = badgeSize_.Width(); + height_ = badgeSize_.Height(); +} + +void RenderBadge::InitialBadgeText() +{ + badgeRenderText_ = AceType::DynamicCast(badgeTextComponent_->CreateRenderNode()); + LayoutParam innerLayout; + innerLayout.SetMaxSize(Size(Size::INFINITE_SIZE, Size::INFINITE_SIZE)); + badgeRenderText_->Attach(GetContext()); + badgeRenderText_->Update(badgeTextComponent_); + badgeRenderText_->SetLayoutParam(innerLayout); +} + +void RenderBadge::UpdateBadgeText() +{ + auto context = context_.Upgrade(); + if (context) { + auto fontManager = context->GetFontManager(); + if (fontManager) { + fontManager->AddVariationNode(WeakClaim(this)); + } + } + badgeTextColor_ = badge_->GetBadgeTextColor(); + badgeFontSize_ = badge_->GetBadgeFontSize(); + textStyle_.SetTextColor(badgeTextColor_); + textStyle_.SetFontSize(badgeFontSize_); + textStyle_.SetAllowScale(false); + badgeTextComponent_->SetData(textData_); + badgeTextComponent_->SetTextStyle(textStyle_); + badgeRenderText_->Update(badgeTextComponent_); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/badge/render_badge.h b/frameworks/core/components/badge/render_badge.h new file mode 100644 index 00000000..602d95be --- /dev/null +++ b/frameworks/core/components/badge/render_badge.h @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BADGE_RENDER_BADGE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BADGE_RENDER_BADGE_H + +#include "base/utils/system_properties.h" +#include "core/components/badge/badge_component.h" +#include "core/components/common/properties/color.h" +#include "core/components/text/render_text.h" +#include "core/components/text/text_component.h" +#include "core/gestures/click_recognizer.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderBadge : public RenderNode { + DECLARE_ACE_TYPE(RenderBadge, RenderNode); + +public: + RenderBadge(); + ~RenderBadge() override; + + static RefPtr Create(); + + void Update(const RefPtr& component) override; + void PerformLayout() override; + virtual Size CalculateTextSize(const std::string& text, const TextStyle& textStyle, + RefPtr& renderText) = 0; + +protected: + void OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) override; + void HandleClickEvent(); + void InitialBadgeText(); + void UpdateBadgeText(); + + Color badgeColor_; + Color badgeTextColor_; + double width_ = 0.0; + double height_ = 0.0; + Size badgeSize_; + Dimension badgeFontSize_; + std::string textData_; + BadgePosition badgePosition_ { BadgePosition::RIGHT_TOP }; + Edge padding_; + int32_t messageCount_ = 0; + bool showMessage_ = false; + std::function onClick_; + RefPtr clickRecognizer_; + RefPtr badgeRenderText_; + RefPtr badgeTextComponent_; + TextStyle textStyle_; + RefPtr badge_; + Offset badgeChildInitialOffset_; + double dipScale_ = 1.0; + Dimension badgeCircleSize_; + int32_t countLimit_ = 99; + bool badgeCircleSizeDefined_ = false; + std::string badgeLabel_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BADGE_RENDER_BADGE_H diff --git a/frameworks/core/components/box/BUILD.gn b/frameworks/core/components/box/BUILD.gn new file mode 100644 index 00000000..bbfa09f3 --- /dev/null +++ b/frameworks/core/components/box/BUILD.gn @@ -0,0 +1,23 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("box") { + sources = [ + "box_component.cpp", + "flutter_render_box.cpp", + "render_box.cpp", + "render_box_base.cpp", + ] +} diff --git a/frameworks/core/components/box/box_base_component.cpp b/frameworks/core/components/box/box_base_component.cpp new file mode 100644 index 00000000..ce1989a7 --- /dev/null +++ b/frameworks/core/components/box/box_base_component.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/box/box_base_component.h" + +#include "core/components/box/box_base_element.h" +#include "core/components/box/render_box_base.h" + +namespace OHOS::Ace { + +RefPtr BoxBaseComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +RefPtr BoxBaseComponent::CreateRenderNode() +{ + return RenderBoxBase::Create(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/box/box_base_component.h b/frameworks/core/components/box/box_base_component.h new file mode 100644 index 00000000..c3e043c0 --- /dev/null +++ b/frameworks/core/components/box/box_base_component.h @@ -0,0 +1,244 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BOX_BOX_BASE_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BOX_BOX_BASE_COMPONENT_H + +#include + +#include "base/geometry/dimension.h" +#include "core/components/common/layout/grid_layout_info.h" +#include "core/components/common/properties/alignment.h" +#include "core/components/common/properties/edge.h" +#include "core/pipeline/base/component.h" +#include "core/pipeline/base/component_group.h" +#include "core/pipeline/base/measurable.h" +#include "core/pipeline/base/sole_child_component.h" + +namespace OHOS::Ace { + +constexpr uint32_t PERCENT_FLAG_USE_VIEW_PORT = 1; + +// A component can box other components. +class BoxBaseComponent : public SoleChildComponent, public Measurable { + DECLARE_ACE_TYPE(BoxBaseComponent, SoleChildComponent, Measurable); + +public: + const Alignment& GetAlignment() const + { + return align_; + } + + const LayoutParam& GetConstraints() const + { + return constraints_; + } + + const Edge& GetPadding() const + { + return padding_; + } + + const Edge& GetMargin() const + { + return margin_; + } + + const Edge& GetAdditionalMargin() const + { + return additionalMargin_; + } + + const Dimension& GetWidthDimension() const + { + return GetWidth(); + } + + const Dimension& GetHeightDimension() const + { + return GetHeight(); + } + + BoxFlex GetFlex() const + { + return flex_; + } + + bool GetDeliverMinToChild() const + { + return deliverMinToChild_; + } + + bool GetScrollPage() const + { + return scrollPage_; + } + + uint32_t GetPercentFlag() const + { + return percentFlag_; + } + + bool GetLayoutInBoxFlag() const + { + return layoutInBox_; + } + + void SetAlignment(const Alignment& alignment) + { + align_ = alignment; + } + + void SetConstraints(const LayoutParam& constraints) + { + if (!constraints.IsWidthValid() || !constraints.IsHeightValid()) { + return; + } + constraints_ = constraints; + } + + void SetPadding(const Edge& padding) + { + if (padding.IsValid()) { + padding_ = padding; + } + } + + void SetMargin(const Edge& margin, const Edge& additionalMargin = Edge()) + { + margin_ = margin; + if (additionalMargin.IsValid()) { + additionalMargin_ = additionalMargin; + } + } + + void SetFlex(BoxFlex flex) + { + flex_ = flex; + } + + void SetDeliverMinToChild(bool deliverMinToChild) + { + deliverMinToChild_ = deliverMinToChild; + } + + void SetScrollPage(bool scrollPage) + { + scrollPage_ = scrollPage; + } + + void SetPercentFlag(uint32_t flag) + { + percentFlag_ = flag; + } + + void SetLayoutInBoxFlag(bool layoutInBox) + { + layoutInBox_ = layoutInBox; + } + + void SetAspectRatio(double aspectRatio) + { + aspectRatio_ = aspectRatio; + } + + double GetAspectRatio() const + { + return aspectRatio_; + } + + void SetMinWidth(const Dimension& minWidth) + { + minWidth_ = minWidth; + } + + const Dimension& GetMinWidth() const + { + return minWidth_; + } + + void SetMinHeight(const Dimension& minHeight) + { + minHeight_ = minHeight; + } + + const Dimension& GetMinHeight() const + { + return minHeight_; + } + + void SetMaxWidth(const Dimension& maxWidth) + { + maxWidth_ = maxWidth; + } + + const Dimension& GetMaxWidth() const + { + return maxWidth_; + } + + void SetMaxHeight(const Dimension& maxHeight) + { + maxHeight_ = maxHeight; + } + + const Dimension& GetMaxHeight() const + { + return maxHeight_; + } + + const RefPtr& GetGridLayoutInfo() const + { + return gridLayoutInfo_; + } + + void SetGridLayoutInfo(const RefPtr& gridLayoutInfo) + { + gridLayoutInfo_ = gridLayoutInfo; + } + + void SetUseLiteStyle(bool flag) + { + useLiteStyle_ = flag; + } + + bool UseLiteStyle() const + { + return useLiteStyle_; + } + +private: + Alignment align_; + LayoutParam constraints_ = LayoutParam(Size(), Size()); // no constraints when init + Edge padding_; + Edge margin_; + Edge additionalMargin_; + BoxFlex flex_ { BoxFlex::FLEX_NO }; + bool deliverMinToChild_ = true; + bool scrollPage_ = false; + uint32_t percentFlag_ = 1; + bool layoutInBox_ = false; + double aspectRatio_ = 0.0; + Dimension minWidth_ = Dimension(); + Dimension minHeight_ = Dimension(); + Dimension maxWidth_ = Dimension(); + Dimension maxHeight_ = Dimension(); + RefPtr gridLayoutInfo_; + bool useLiteStyle_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BOX_BOX_BASE_COMPONENT_H diff --git a/frameworks/core/components/box/box_base_element.cpp b/frameworks/core/components/box/box_base_element.cpp new file mode 100644 index 00000000..7416d5c7 --- /dev/null +++ b/frameworks/core/components/box/box_base_element.cpp @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/box/box_base_element.h" + +#include "core/components/box/box_base_component.h" + +namespace OHOS::Ace { + +void BoxBaseElement::PerformBuild() +{ + RefPtr box = AceType::DynamicCast(component_); + if (box) { + RefPtr newComponent = box->GetChild(); + if (newComponent) { + const auto& child = children_.empty() ? nullptr : children_.front(); + UpdateChild(child, newComponent); + } + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/box/box_base_element.h b/frameworks/core/components/box/box_base_element.h new file mode 100644 index 00000000..d797f5bc --- /dev/null +++ b/frameworks/core/components/box/box_base_element.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BOX_BOX_BASE_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BOX_BOX_BASE_ELEMENT_H + +#include "core/pipeline/base/sole_child_element.h" + +namespace OHOS::Ace { + +class BoxBaseElement : public SoleChildElement { + DECLARE_ACE_TYPE(BoxBaseElement, SoleChildElement); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BOX_BOX_BASE_ELEMENT_H diff --git a/frameworks/core/components/box/box_component.cpp b/frameworks/core/components/box/box_component.cpp new file mode 100644 index 00000000..a48b099a --- /dev/null +++ b/frameworks/core/components/box/box_component.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/box/box_component.h" + +#include "core/components/box/box_element.h" +#include "core/components/box/render_box.h" + +namespace OHOS::Ace { + +RefPtr BoxComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +RefPtr BoxComponent::CreateRenderNode() +{ + return RenderBox::Create(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/box/box_component.h b/frameworks/core/components/box/box_component.h new file mode 100644 index 00000000..83b383a3 --- /dev/null +++ b/frameworks/core/components/box/box_component.h @@ -0,0 +1,117 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BOX_BOX_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BOX_BOX_COMPONENT_H + +#include "core/components/box/box_base_component.h" +#include "core/components/common/properties/color.h" +#include "core/components/common/properties/decoration.h" + +namespace OHOS::Ace { + +enum class HoverAnimationType : int32_t { + NONE, + OPACITY, + SCALE, +}; + +// A component can box others components. +class ACE_EXPORT BoxComponent : public BoxBaseComponent { + DECLARE_ACE_TYPE(BoxComponent, BoxBaseComponent); + +public: + RefPtr CreateElement() override; + RefPtr CreateRenderNode() override; + + RefPtr GetBackDecoration() const + { + return backDecoration_; + } + + RefPtr GetFrontDecoration() const + { + return frontDecoration_; + } + + const Color& GetColor() const + { + if (backDecoration_) { + return backDecoration_->GetBackgroundColor(); + } + return Color::TRANSPARENT; + } + + bool GetDecorationUpdateFlag() const + { + return decorationUpdateFlag_; + } + + HoverAnimationType GetMouseAnimationType() const + { + return animationType_; + } + + void SetBackDecoration(const RefPtr& decoration) + { + backDecoration_ = decoration; + SetDecorationUpdateFlag(true); + } + + void SetFrontDecoration(const RefPtr& decoration) + { + frontDecoration_ = decoration; + SetDecorationUpdateFlag(true); + } + + void SetColor(const Color& color) + { + if (!backDecoration_) { + backDecoration_ = AceType::MakeRefPtr(); + } + backDecoration_->SetBackgroundColor(color); + } + + void SetDecorationUpdateFlag(bool flag) + { + decorationUpdateFlag_ = flag; + } + + void SetMouseAnimationType(HoverAnimationType animationType) + { + animationType_ = animationType; + } + + void SetOverflow(Overflow overflow) + { + overflow_ = overflow; + } + + Overflow GetOverflow() const + { + return overflow_; + } + +private: + RefPtr backDecoration_; + RefPtr frontDecoration_; + bool decorationUpdateFlag_ = false; + HoverAnimationType animationType_ = HoverAnimationType::NONE; + Overflow overflow_ = Overflow::OBSERVABLE; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BOX_BOX_COMPONENT_H diff --git a/frameworks/core/components/box/box_element.cpp b/frameworks/core/components/box/box_element.cpp new file mode 100644 index 00000000..0937d800 --- /dev/null +++ b/frameworks/core/components/box/box_element.cpp @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/box/box_element.h" + +#include "core/components/box/box_component.h" + +namespace OHOS::Ace { + +void BoxElement::PerformBuild() +{ + RefPtr box = AceType::DynamicCast(component_); + if (box) { + RefPtr newComponent = box->GetChild(); + if (newComponent) { + const auto& child = children_.empty() ? nullptr : children_.front(); + UpdateChild(child, newComponent); + } + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/box/box_element.h b/frameworks/core/components/box/box_element.h new file mode 100644 index 00000000..99322b56 --- /dev/null +++ b/frameworks/core/components/box/box_element.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BOX_BOX_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BOX_BOX_ELEMENT_H + +#include "core/components/box/box_base_element.h" + +namespace OHOS::Ace { + +class BoxElement : public BoxBaseElement { + DECLARE_ACE_TYPE(BoxElement, BoxBaseElement); + +protected: + RefPtr GetCachedRenderNode() override + { + auto context = GetContext().Upgrade(); + if (context) { + return context->GetRenderFactory()->GetRenderBoxFactory()->Get(); + } + return nullptr; + } +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BOX_BOX_ELEMENT_H diff --git a/frameworks/core/components/box/flutter_render_box.cpp b/frameworks/core/components/box/flutter_render_box.cpp new file mode 100644 index 00000000..30e91b58 --- /dev/null +++ b/frameworks/core/components/box/flutter_render_box.cpp @@ -0,0 +1,302 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/box/flutter_render_box.h" + +#include + +#include "flutter/common/task_runners.h" +#include "flutter/lib/ui/ui_dart_state.h" +#include "third_party/skia/include/core/SkMaskFilter.h" +#include "third_party/skia/include/effects/Sk1DPathEffect.h" +#include "third_party/skia/include/effects/SkDashPathEffect.h" +#include "third_party/skia/include/effects/SkGradientShader.h" + +#include "core/components/common/painter/flutter_decoration_painter.h" +#include "core/components/common/properties/border.h" +#include "core/components/common/properties/border_edge.h" +#include "core/components/common/properties/color.h" +#include "core/pipeline/base/flutter_render_context.h" +#include "core/pipeline/base/scoped_canvas_state.h" +#include "core/pipeline/layers/picture_layer.h" + +namespace OHOS::Ace { +namespace { + +constexpr int32_t DOUBLE_WIDTH = 2; + +} // namespace + +using namespace Flutter; + +RefPtr RenderBox::Create() +{ + return AceType::MakeRefPtr(); +} + +void FlutterRenderBox::Update(const RefPtr& component) +{ + RenderBox::Update(component); + + // use render image to render background image + if (backDecoration_) { + RefPtr backgroundImage = backDecoration_->GetImage(); + UpdateBackgroundImage(backgroundImage); + } +} + +void FlutterRenderBox::UpdateBackgroundImage(const RefPtr& image) +{ + if (!image) { + renderImage_ = nullptr; + return; + } + + if (!renderImage_) { + renderImage_ = AceType::DynamicCast(RenderImage::Create()); + if (!renderImage_) { + return; + } + renderImage_->SetBackgroundImageFlag(true); + renderImage_->Attach(GetContext()); + renderImage_->RegisterImageUpdateFunc([weakRenderBox = AceType::WeakClaim(this)]() { + auto box = weakRenderBox.Upgrade(); + if (box) { + box->MarkNeedLayout(); + } + }); + } + + renderImage_->SetImageSrc(image->GetSrc()); + renderImage_->SetImageRepeat(image->GetImageRepeat()); + // set image size, x direction + renderImage_->SetBgImageSize(image->GetImageSize().GetSizeTypeX(), image->GetImageSize().GetSizeValueX(), true); + // set image size, y direction + renderImage_->SetBgImageSize(image->GetImageSize().GetSizeTypeY(), image->GetImageSize().GetSizeValueY(), false); + renderImage_->SetBgImagePosition(image->GetImagePosition()); +} + +void FlutterRenderBox::PerformLayout() +{ + RenderBox::PerformLayout(); + + // calculate repeatParam. + CalculateRepeatParam(); +} + +void FlutterRenderBox::Paint(RenderContext& context, const Offset& offset) +{ + if (opacity_ == 0) { + RenderNode::Paint(context, offset); + return; + } + auto pipeline = context_.Upgrade(); + if (!pipeline) { + return; + } + Rect paintSize = GetPaintRect() + offset; + if (useLiteStyle_) { + paintSize.SetSize(paintSize_); + } + flutter::RRect outerRRect; + outerRRect.sk_rrect = + SkRRect::MakeRect(SkRect::MakeLTRB(paintSize.Left(), paintSize.Top(), paintSize.Right(), paintSize.Bottom())); + UpdateBlurRRect(outerRRect, offset); + + RefPtr decorationPainter; + if (backDecoration_ || frontDecoration_) { + if (!useLiteStyle_) { + decorationPainter = AceType::MakeRefPtr( + backDecoration_, GetPaintRect(), paintSize_, pipeline->GetDipScale()); + } else { + decorationPainter = AceType::MakeRefPtr( + backDecoration_, paintSize, paintSize_, pipeline->GetDipScale()); + } + decorationPainter->SetAlpha(opacity_); + decorationPainter->SetMargin(margin_); + decorationPainter->SetRenderImage(renderImage_); + } + const auto renderContext = static_cast(&context); + if (backDecoration_) { + flutter::Canvas* canvas = renderContext->GetCanvas(); + if (canvas == nullptr) { + LOGE("Paint canvas is null."); + return; + } + outerRRect = decorationPainter->GetBoxOuterRRect(offset); + UpdateBlurRRect(outerRRect, offset); + + if (GreatNotEqual(backDecoration_->GetWindowBlurProgress(), 0.0)) { + SetWindowBlurProgress(backDecoration_->GetWindowBlurProgress()); + SetWindowBlurStyle(backDecoration_->GetWindowBlurStyle()); + MarkNeedWindowBlur(true); + } + decorationPainter->PaintBlur(outerRRect, canvas->canvas(), backDecoration_->GetBlurRadius()); + decorationPainter->PaintDecoration(offset, canvas->canvas(), context); + } + + RenderNode::Paint(context, offset); + if (frontDecoration_) { + flutter::Canvas* canvas = renderContext->GetCanvas(); + if (canvas == nullptr) { + LOGE("Paint canvas is null."); + return; + } + + decorationPainter->SetDecoration(frontDecoration_); + decorationPainter->PaintDecoration(offset, canvas->canvas(), context); + decorationPainter->PaintBlur(outerRRect, canvas->canvas(), frontDecoration_->GetBlurRadius()); + } +} + +void FlutterRenderBox::CalculateRepeatParam() +{ + if (backDecoration_) { + RefPtr backgroundImage = backDecoration_->GetImage(); + if (backgroundImage && renderImage_) { + renderImage_->SetBgImageBoxPaintSize(paintSize_); + renderImage_->SetBgImageBoxMarginOffset(margin_.GetOffset()); + LayoutParam param; + param.SetFixedSize(paintSize_); + renderImage_->Layout(param); + } + } +} + +void FlutterRenderBox::DrawLayerForBlur(SkCanvas* canvas, Flutter::ContainerLayer* containerLayer) +{ + if (!canvas || !containerLayer) { + return; + } + for (const auto& layer : containerLayer->GetChildren()) { + if (!layer) { + continue; + } + auto pictureLayer = AceType::DynamicCast(layer); + if (pictureLayer) { + auto picture = pictureLayer->GetPicture(); + auto offset = pictureLayer->GetOffset(); + if (offset.GetX() >= 0.0 && picture && picture->picture() && picture->picture().get()) { + canvas->save(); + canvas->translate(offset.GetX(), offset.GetY()); + canvas->drawPicture(picture->picture().get()); + canvas->restore(); + pictureLayer->SetNeedAddToScene(false); + } + continue; + } + auto container = AceType::DynamicCast(layer); + if (container) { + DrawLayerForBlur(canvas, AceType::RawPtr(container)); + } + } +} + +SkVector FlutterRenderBox::GetSkRadii(const Radius& radius, double shrinkFactor, double borderWidth) +{ + SkVector fRadii; + fRadii.set(SkDoubleToScalar(std::max(NormalizeToPx(radius.GetX()) - shrinkFactor * borderWidth, 0.0)), + SkDoubleToScalar(std::max(NormalizeToPx(radius.GetY()) - shrinkFactor * borderWidth, 0.0))); + return fRadii; +} + +bool FlutterRenderBox::CheckBorderEdgeForRRect(const Border& border) +{ + double leftWidth = NormalizeToPx(border.Left().GetWidth()); + if (NearEqual(leftWidth, NormalizeToPx(border.Top().GetWidth())) && + NearEqual(leftWidth, NormalizeToPx(border.Right().GetWidth())) && + NearEqual(leftWidth, NormalizeToPx(border.Bottom().GetWidth()))) { + BorderStyle leftStyle = border.Left().GetBorderStyle(); + return leftStyle == border.Top().GetBorderStyle() && leftStyle == border.Right().GetBorderStyle() && + leftStyle == border.Bottom().GetBorderStyle(); + } + return false; +} + +RenderLayer FlutterRenderBox::GetRenderLayer() +{ + if (overflow_ != Overflow::CLIP) { + LOGD("do not need to create clipLayer."); + return nullptr; + } + Border border; + if (backDecoration_) { + border = backDecoration_->GetBorder(); + } + if (!clipLayer_) { + clipLayer_ = AceType::MakeRefPtr( + 0.0, GetLayoutSize().Width(), 0.0, GetLayoutSize().Height(), Clip::HARD_EDGE); + } + flutter::RRect outerRRect = GetBoxRRect(margin_.GetOffset(), border, 0.0, true); + clipLayer_->SetClipRRect(outerRRect); + return AceType::RawPtr(clipLayer_); +} + +flutter::RRect FlutterRenderBox::GetBoxRRect( + const Offset& offset, const Border& border, double shrinkFactor, bool isRound) +{ + flutter::RRect rRect = flutter::RRect(); + SkRect skRect {}; + SkVector fRadii[4] = { { 0.0, 0.0 }, { 0.0, 0.0 }, { 0.0, 0.0 }, { 0.0, 0.0 } }; + if (CheckBorderEdgeForRRect(border)) { + BorderEdge borderEdge = border.Left(); + double borderWidth = NormalizeToPx(borderEdge.GetWidth()); + skRect.setXYWH(SkDoubleToScalar(offset.GetX() + shrinkFactor * borderWidth), + SkDoubleToScalar(offset.GetY() + shrinkFactor * borderWidth), + SkDoubleToScalar(paintSize_.Width() - shrinkFactor * DOUBLE_WIDTH * borderWidth), + SkDoubleToScalar(paintSize_.Height() - shrinkFactor * DOUBLE_WIDTH * borderWidth)); + if (isRound) { + fRadii[SkRRect::kUpperLeft_Corner] = GetSkRadii(border.TopLeftRadius(), shrinkFactor, borderWidth); + fRadii[SkRRect::kUpperRight_Corner] = GetSkRadii(border.TopRightRadius(), shrinkFactor, borderWidth); + fRadii[SkRRect::kLowerRight_Corner] = GetSkRadii(border.BottomRightRadius(), shrinkFactor, borderWidth); + fRadii[SkRRect::kLowerLeft_Corner] = GetSkRadii(border.BottomLeftRadius(), shrinkFactor, borderWidth); + } + } else { + float offsetX = SkDoubleToScalar(offset.GetX() + shrinkFactor * NormalizeToPx(border.Left().GetWidth())); + float offsetY = SkDoubleToScalar(offset.GetY() + shrinkFactor * NormalizeToPx(border.Top().GetWidth())); + float width = SkDoubleToScalar( + paintSize_.Width() - shrinkFactor * DOUBLE_WIDTH * NormalizeToPx(border.Right().GetWidth())); + float height = SkDoubleToScalar( + paintSize_.Height() - shrinkFactor * DOUBLE_WIDTH * NormalizeToPx(border.Bottom().GetWidth())); + skRect.setXYWH(offsetX, offsetY, width, height); + } + rRect.sk_rrect.setRectRadii(skRect, fRadii); + return rRect; +} + +bool FlutterRenderBox::MaybeRelease() +{ + auto context = GetContext().Upgrade(); + if (context && context->GetRenderFactory()->GetRenderBoxFactory()->Recycle(this)) { + ClearRenderObject(); + return false; + } + return true; +} + +void FlutterRenderBox::UpdateBlurRRect(const flutter::RRect& rRect, const Offset& offset) +{ + // radius of four edge should be same + SkVector radius = rRect.sk_rrect.radii(SkRRect::kUpperLeft_Corner); + const SkRect& rect = rRect.sk_rrect.rect(); + windowBlurRRect_.SetRectWithSimpleRadius( + Rect(rect.left(), rect.top(), rect.width(), rect.height()), radius.fX, radius.fY); + // this is relative offset + Rect innerRect = windowBlurRRect_.GetRect(); + innerRect -= offset; + windowBlurRRect_.SetRect(innerRect); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/box/flutter_render_box.h b/frameworks/core/components/box/flutter_render_box.h new file mode 100644 index 00000000..f06fdae1 --- /dev/null +++ b/frameworks/core/components/box/flutter_render_box.h @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BOX_FLUTTER_RENDER_BOX_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BOX_FLUTTER_RENDER_BOX_H + +#include "flutter/lib/ui/ui_dart_state.h" + +#include "core/components/box/render_box.h" +#include "core/components/common/layout/constants.h" +#include "core/components/common/properties/border_edge.h" +#include "core/image/image_provider.h" +#include "core/pipeline/base/flutter_render_context.h" +#include "core/pipeline/layers/clip_layer.h" +#include "core/pipeline/layers/container_layer.h" + +namespace OHOS::Ace { + +class FlutterRenderBox : public RenderBox { + DECLARE_ACE_TYPE(FlutterRenderBox, RenderBox); + +public: + FlutterRenderBox() = default; + ~FlutterRenderBox() override = default; + + void Update(const RefPtr& component) override; + void PerformLayout() override; + void Paint(RenderContext& context, const Offset& offset) override; + RenderLayer GetRenderLayer() override; + + bool SupportOpacity() override + { + return true; + } + +protected: + virtual bool MaybeRelease() override; + + void OnVisibleChanged() override + { + RenderBox::OnVisibleChanged(); + + if (NeedWindowBlur()) { + if (GetVisible()) { + UpdateWindowBlurRRect(); + } else { + UpdateWindowBlurRRect(true); + } + } + } + + void OnHiddenChanged(bool hidden) override + { + RenderBox::OnHiddenChanged(hidden); + + if (NeedWindowBlur()) { + if (GetHidden()) { + UpdateWindowBlurRRect(true); + } else { + UpdateWindowBlurRRect(); + } + } + } + + void OnWindowBlurChanged() override + { + RenderBox::OnWindowBlurChanged(); + + if (NeedWindowBlur()) { + UpdateWindowBlurRRect(); + } else { + UpdateWindowBlurRRect(true); + } + } + + RRect GetWindowBlurRRect() const override + { + return windowBlurRRect_; + } + + void CalculateRepeatParam(); + +private: + bool CheckBorderEdgeForRRect(const Border& border); + SkVector GetSkRadii(const Radius& radius, double shrinkFactor, double borderWidth); + void UpdateBackgroundImage(const RefPtr& image); + void UpdateBlurRRect(const flutter::RRect& rRect, const Offset& offset); + void DrawLayerForBlur(SkCanvas* canvas, Flutter::ContainerLayer* containerLayer); + flutter::RRect GetBoxRRect(const Offset& offset, const Border& border, double shrinkFactor, bool isRound); + + RefPtr clipLayer_; + RRect windowBlurRRect_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BOX_FLUTTER_RENDER_BOX_H diff --git a/frameworks/core/components/box/flutter_render_box_base.cpp b/frameworks/core/components/box/flutter_render_box_base.cpp new file mode 100644 index 00000000..9a617ad8 --- /dev/null +++ b/frameworks/core/components/box/flutter_render_box_base.cpp @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/box/flutter_render_box_base.h" + +namespace OHOS::Ace { + +RefPtr RenderBoxBase::Create() +{ + return AceType::MakeRefPtr(); +} + +void FlutterRenderBoxBase::Paint(RenderContext& context, const Offset& offset) +{ + const auto renderContext = static_cast(&context); + flutter::Canvas* canvas = renderContext->GetCanvas(); + if (!canvas) { + LOGE("Paint canvas is null"); + return; + } + + RenderNode::Paint(context, offset); // paint child +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/box/flutter_render_box_base.h b/frameworks/core/components/box/flutter_render_box_base.h new file mode 100644 index 00000000..0bb52031 --- /dev/null +++ b/frameworks/core/components/box/flutter_render_box_base.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BOX_FLUTTER_RENDER_BOX_BASE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BOX_FLUTTER_RENDER_BOX_BASE_H + +#include "core/components/box/render_box_base.h" + +#include "core/pipeline/base/flutter_render_context.h" + +namespace OHOS::Ace { + +class FlutterRenderBoxBase final : public RenderBoxBase { + DECLARE_ACE_TYPE(FlutterRenderBoxBase, RenderBoxBase); + +public: + FlutterRenderBoxBase() = default; + ~FlutterRenderBoxBase() override = default; + + void Paint(RenderContext& context, const Offset& offset) override; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BOX_FLUTTER_RENDER_BOX_BASE_H diff --git a/frameworks/core/components/box/render_box.cpp b/frameworks/core/components/box/render_box.cpp new file mode 100644 index 00000000..a19cd325 --- /dev/null +++ b/frameworks/core/components/box/render_box.cpp @@ -0,0 +1,438 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/box/render_box.h" + +#include + +#include "base/geometry/offset.h" +#include "base/log/event_report.h" +#include "base/utils/utils.h" +#include "core/components/box/box_component.h" +#include "core/components/text_field/render_text_field.h" + +namespace OHOS::Ace { +namespace { + +constexpr int32_t HOVER_ANIMATION_DURATION = 250; + +}; // namespace + +Size RenderBox::GetBorderSize() const +{ + auto context = GetContext().Upgrade(); + if (backDecoration_ && context) { + return backDecoration_->GetBorder().GetLayoutSize(context->GetDipScale()); + } + return Size(0.0, 0.0); +} + +Offset RenderBox::GetBorderOffset() const +{ + auto context = GetContext().Upgrade(); + if (backDecoration_ && context) { + return backDecoration_->GetBorder().GetOffset(context->GetDipScale()); + } + return Offset(0.0, 0.0); +} + +void RenderBox::Update(const RefPtr& component) +{ + const RefPtr box = AceType::DynamicCast(component); + if (box) { + RenderBoxBase::Update(component); + // When declarative animation is active for this renderbox, + // the animatbale properties are set by PropertyAnimatable::SetProperty. + // And currently declarative api allow only animating + // PROPERTY_BACK_DECORATION_COLOR + if (!IsDeclarativeAnimationActive()) { + backDecoration_ = box->GetBackDecoration(); + } + frontDecoration_ = box->GetFrontDecoration(); + overflow_ = box->GetOverflow(); + animationType_ = box->GetMouseAnimationType(); + + MarkNeedLayout(); + } +} + +void RenderBox::OnPaintFinish() +{ + auto context = context_.Upgrade(); + if (!context) { + return; + } + auto viewScale = context->GetViewScale(); + if (NearZero(viewScale)) { + LOGE("Get viewScale is zero."); + EventReport::SendRenderException(RenderExcepType::VIEW_SCALE_ERR); + return; + } + auto node = GetAccessibilityNode().Upgrade(); + if (!node) { + return; + } + if (!node->GetVisible()) { // Set 0 to item when whole outside of view port. + node->SetWidth(0.0); + node->SetHeight(0.0); + node->SetTop(0.0); + node->SetLeft(0.0); + return; + } + if (node->IsValidRect()) { + return; // Rect already clamp by viewport, no need to set again. + } + +#if !defined(WINDOWS_PLATFORM) && !defined(MAC_PLATFORM) + Size size = GetLayoutSize() * viewScale; + Offset globalOffset = GetGlobalOffset() * viewScale; +#else + Size size = paintSize_; + Offset globalOffset = GetGlobalOffset(); + globalOffset.SetX(globalOffset.GetX() + margin_.LeftPx()); + globalOffset.SetY(globalOffset.GetY() + margin_.TopPx()); + if (node->IsAnimationNode()) { + CalculateScale(node, globalOffset, size); + CalculateRotate(node, globalOffset, size); + CalculateTranslate(node, globalOffset, size); + } + size = size * viewScale; + globalOffset = globalOffset * viewScale; + node->SetWidth(size.Width()); + node->SetHeight(size.Height()); + node->SetLeft(globalOffset.GetX()); + node->SetTop(globalOffset.GetY()); + if (node->GetTag() == "inspectDialog") { + auto parent = node->GetParentNode(); + parent->SetTop(node->GetTop()); + parent->SetLeft(node->GetLeft()); + parent->SetWidth(node->GetWidth()); + parent->SetHeight(node->GetHeight()); + auto mananger = context->GetAccessibilityManager(); + mananger->RemoveAccessibilityNodes(node); + } + return; +#endif + node->SetWidth(size.Width()); + node->SetHeight(size.Height()); + node->SetLeft(globalOffset.GetX()); + node->SetTop(globalOffset.GetY()); +} + +#if defined(WINDOWS_PLATFORM) || defined(MAC_PLATFORM) +void RenderBox::CalculateScale(RefPtr node, Offset& globalOffset, Size& size) +{ + double scaleFactor = node->GetScale(); + Offset scaleCenter = node->GetScaleCenter(); + if (!NearEqual(scaleFactor, 1.0)) { + if (NearEqual(scaleFactor, 0.0)) { + scaleFactor = 0.01; + } + // parent and children are scaled by the center point of parent. + auto currentOffset = globalOffset; + auto currentSize = size; + auto boxCenter = Offset(currentOffset.GetX() + currentSize.Width() / 2.0, + currentOffset.GetY() + currentSize.Height() / 2.0); + if (boxCenter == scaleCenter) { + globalOffset = Offset(currentSize.Width() * (1 - scaleFactor) / 2.0 + currentOffset.GetX(), + currentSize.Height() * (1 - scaleFactor) / 2.0 + currentOffset.GetY()); + } else { + auto center = scaleCenter; + globalOffset = Offset(scaleFactor * currentOffset.GetX() + (1 - scaleFactor) * center.GetX(), + scaleFactor * currentOffset.GetY() + (1 - scaleFactor) * center.GetY()); + } + size = size * scaleFactor; + } +} + +void RenderBox::CalculateRotate(RefPtr node, Offset& globalOffset, Size& size) +{ + double angle = node->GetRotateAngle(); + if (!NearEqual(angle, 0.0)) { + Point leftTop; + Point rightTop; + Point leftBottom; + Point rightBottom; + Point center = Point(node->GetScaleCenter().GetX(), node->GetScaleCenter().GetY()); + leftTop.SetX(globalOffset.GetX()); + leftTop.SetY(globalOffset.GetY()); + + rightTop.SetX(globalOffset.GetX() + size.Width()); + rightTop.SetY(globalOffset.GetY()); + + leftBottom.SetX(globalOffset.GetX()); + leftBottom.SetY(globalOffset.GetY() + size.Height()); + + rightBottom.SetX(globalOffset.GetX() + size.Width()); + rightBottom.SetY(globalOffset.GetY() + size.Height()); + const double pi = std::acos(-1); + double RotateAngle = angle * pi / 180; + + leftTop.Rotate(center, RotateAngle); + rightTop.Rotate(center, RotateAngle); + leftBottom.Rotate(center, RotateAngle); + rightBottom.Rotate(center, RotateAngle); + + + double min_X = std::min({leftTop.GetX(), rightTop.GetX(), leftBottom.GetX(), rightBottom.GetX()}); + double max_X = std::max({leftTop.GetX(), rightTop.GetX(), leftBottom.GetX(), rightBottom.GetX()}); + double min_Y = std::min({leftTop.GetY(), rightTop.GetY(), leftBottom.GetY(), rightBottom.GetY()}); + double max_Y = std::max({leftTop.GetY(), rightTop.GetY(), leftBottom.GetY(), rightBottom.GetY()}); + globalOffset.SetX(min_X); + globalOffset.SetY(min_Y); + size.SetWidth(max_X - min_X); + size.SetHeight(max_Y - min_Y); + } +} + +void RenderBox::CalculateTranslate(RefPtr node, Offset& globalOffset, Size& size) +{ + // calculate translate + Offset translateOffset = node->GetTranslateOffset(); + globalOffset = globalOffset + translateOffset; +} +#endif + +void RenderBox::SetBackgroundPosition(const BackgroundImagePosition& position) +{ + RefPtr backgroundImage = backDecoration_->GetImage(); + if (!backgroundImage) { + // Suppress error logs when do animation. + LOGD("set background position failed. no background image."); + return; + } + if (backgroundImage->GetImagePosition() == position) { + return; + } + backgroundImage->SetImagePosition(position); + if (renderImage_) { + renderImage_->SetBgImagePosition(backgroundImage->GetImagePosition()); + } + MarkNeedLayout(); +} + +void RenderBox::ClearRenderObject() +{ + RenderBoxBase::ClearRenderObject(); + renderImage_ = nullptr; + backDecoration_ = nullptr; + frontDecoration_ = nullptr; +} + +BackgroundImagePosition RenderBox::GetBackgroundPosition() const +{ + RefPtr backgroundImage = backDecoration_->GetImage(); + if (!backgroundImage) { + LOGE("get background position failed. no background image."); + return BackgroundImagePosition(); + } + return backgroundImage->GetImagePosition(); +} + +void RenderBox::OnMouseHoverEnterAnimation() +{ + // stop the exit animation being played. + ResetController(controllerExit_); + if (!controllerEnter_) { + controllerEnter_ = AceType::MakeRefPtr(context_); + } + colorAnimationEnter_ = AceType::MakeRefPtr>(); + colorAnimationEnter_->SetEvaluator(AceType::MakeRefPtr()); + if (animationType_ == HoverAnimationType::OPACITY) { + if (!backDecoration_) { + backDecoration_ = AceType::MakeRefPtr(); + } + CreateColorAnimation(colorAnimationEnter_, hoverColor_, Color::FromRGBO(0, 0, 0, 0.05)); + colorAnimationEnter_->SetCurve(Curves::FRICTION); + } + controllerEnter_->AddInterpolator(colorAnimationEnter_); + controllerEnter_->SetDuration(HOVER_ANIMATION_DURATION); + controllerEnter_->Play(); + controllerEnter_->SetFillMode(FillMode::FORWARDS); +} + +void RenderBox::OnMouseHoverExitAnimation() +{ + // stop the enter animation being played. + ResetController(controllerEnter_); + if (!controllerExit_) { + controllerExit_ = AceType::MakeRefPtr(context_); + } + colorAnimationExit_ = AceType::MakeRefPtr>(); + colorAnimationExit_->SetEvaluator(AceType::MakeRefPtr()); + if (animationType_ == HoverAnimationType::OPACITY) { + if (!backDecoration_) { + backDecoration_ = AceType::MakeRefPtr(); + } + // The exit animation plays from the current background color. + CreateColorAnimation(colorAnimationExit_, hoverColor_, Color::FromRGBO(0, 0, 0, 0.0)); + if (hoverColor_ == Color::FromRGBO(0, 0, 0, 0.05)) { + colorAnimationExit_->SetCurve(Curves::FRICTION); + } else { + colorAnimationExit_->SetCurve(Curves::FAST_OUT_SLOW_IN); + } + } + controllerExit_->AddInterpolator(colorAnimationExit_); + controllerExit_->SetDuration(HOVER_ANIMATION_DURATION); + controllerExit_->Play(); + controllerExit_->SetFillMode(FillMode::FORWARDS); +} + +void RenderBox::CreateColorAnimation( + RefPtr>& colorAnimation, const Color& beginValue, const Color& endValue) +{ + if (!colorAnimation) { + return; + } + auto keyframeBegin = AceType::MakeRefPtr>(0.0, beginValue); + auto keyframeEnd = AceType::MakeRefPtr>(1.0, endValue); + colorAnimation->AddKeyframe(keyframeBegin); + colorAnimation->AddKeyframe(keyframeEnd); + WeakPtr weakDecoration = WeakPtr(backDecoration_); + colorAnimation->AddListener([weakBox = AceType::WeakClaim(this), weakDecoration](const Color& value) { + auto box = weakBox.Upgrade(); + if (!box) { + return; + } + box->hoverColor_ = value; + auto decoration = weakDecoration.Upgrade(); + if (decoration) { + decoration->SetAnimationColor(box->hoverColor_); + } + box->MarkNeedRender(); + }); +} + +void RenderBox::ResetController(RefPtr& controller) +{ + if (controller) { + if (!controller->IsStopped()) { + controller->Stop(); + } + controller->ClearInterpolators(); + } +} + +void RenderBox::StopMouseHoverAnimation() +{ + if (controllerExit_) { + if (!controllerExit_->IsStopped()) { + controllerExit_->Stop(); + } + controllerExit_->ClearInterpolators(); + } +} + +ColorPropertyAnimatable::SetterMap RenderBox::GetColorPropertySetterMap() +{ + ColorPropertyAnimatable::SetterMap map; + auto weak = AceType::WeakClaim(this); + const RefPtr renderTextField = AceType::DynamicCast(GetFirstChild()); + if (renderTextField) { + WeakPtr textWeak = renderTextField; + map[PropertyAnimatableType::PROPERTY_BACK_DECORATION_COLOR] = [textWeak](Color value) { + auto renderTextField = textWeak.Upgrade(); + if (!renderTextField) { + return; + } + renderTextField->SetColor(value); + }; + } else { + map[PropertyAnimatableType::PROPERTY_BACK_DECORATION_COLOR] = [weak](Color value) { + auto box = weak.Upgrade(); + if (!box) { + return; + } + box->SetColor(value, true); + }; + } + map[PropertyAnimatableType::PROPERTY_FRONT_DECORATION_COLOR] = [weak](Color value) { + auto box = weak.Upgrade(); + if (!box) { + return; + } + box->SetColor(value, false); + }; + return map; +} + +ColorPropertyAnimatable::GetterMap RenderBox::GetColorPropertyGetterMap() +{ + ColorPropertyAnimatable::GetterMap map; + auto weak = AceType::WeakClaim(this); + map[PropertyAnimatableType::PROPERTY_FRONT_DECORATION_COLOR] = [weak]() -> Color { + auto box = weak.Upgrade(); + if (!box) { + return Color(); + } + auto frontDecoration = box->GetFrontDecoration(); + if (frontDecoration) { + return frontDecoration->GetBackgroundColor(); + } + return Color::TRANSPARENT; + }; + const RefPtr renderTextField = AceType::DynamicCast(GetFirstChild()); + if (renderTextField) { + WeakPtr textWeak = renderTextField; + map[PropertyAnimatableType::PROPERTY_BACK_DECORATION_COLOR] = [textWeak]() -> Color { + auto renderTextField = textWeak.Upgrade(); + if (!renderTextField) { + return Color(); + } + return renderTextField->GetColor(); + }; + } else { + map[PropertyAnimatableType::PROPERTY_BACK_DECORATION_COLOR] = [weak]() -> Color { + auto box = weak.Upgrade(); + if (!box) { + return Color(); + } + return box->GetColor(); + }; + } + return map; +} + +BackgroundPositionPropertyAnimatable::SetterMap RenderBox::GetBackgroundPositionPropertySetterMap() +{ + BackgroundPositionPropertyAnimatable::SetterMap map; + auto weak = AceType::WeakClaim(this); + map[PropertyAnimatableType::PROPERTY_BACKGROUND_POSITION] = [weak](BackgroundImagePosition position) { + auto box = weak.Upgrade(); + if (!box) { + LOGE("Set background position failed. box is null."); + return; + } + return box->SetBackgroundPosition(position); + }; + return map; +} + +BackgroundPositionPropertyAnimatable::GetterMap RenderBox::GetBackgroundPositionPropertyGetterMap() +{ + BackgroundPositionPropertyAnimatable::GetterMap map; + auto weak = AceType::WeakClaim(this); + map[PropertyAnimatableType::PROPERTY_BACKGROUND_POSITION] = [weak]() -> BackgroundImagePosition { + auto box = weak.Upgrade(); + if (!box) { + LOGE("Get background position failed. box is null."); + return BackgroundImagePosition(); + } + return box->GetBackgroundPosition(); + }; + return map; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/box/render_box.h b/frameworks/core/components/box/render_box.h new file mode 100644 index 00000000..dfc43712 --- /dev/null +++ b/frameworks/core/components/box/render_box.h @@ -0,0 +1,129 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BOX_RENDER_BOX_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BOX_RENDER_BOX_H + +#include "core/animation/animator.h" +#include "core/animation/keyframe_animation.h" +#include "core/components/box/box_component.h" +#include "core/components/box/render_box_base.h" +#include "core/components/common/properties/color.h" +#include "core/components/common/properties/decoration.h" +#include "core/components/image/render_image.h" + +namespace OHOS::Ace { + +class RenderBox : public RenderBoxBase { + DECLARE_ACE_TYPE(RenderBox, RenderBoxBase); + +public: + static RefPtr Create(); + void Update(const RefPtr& component) override; + void OnPaintFinish() override; + + const Color& GetColor() const override + { + if (backDecoration_) { + return backDecoration_->GetBackgroundColor(); + } + return Color::TRANSPARENT; + } + + RefPtr GetBackDecoration() const + { + return backDecoration_; + } + + RefPtr GetFrontDecoration() const + { + return frontDecoration_; + } + + void SetColor(const Color& color, bool isBackground) // add for animation + { + // create decoration automatically while user had not defined + if (isBackground) { + if (!backDecoration_) { + backDecoration_ = AceType::MakeRefPtr(); + LOGD("[BOX][Dep:%{public}d][LAYOUT]Add backDecoration automatically.", this->GetDepth()); + } + backDecoration_->SetBackgroundColor(color); + } else { + if (!frontDecoration_) { + frontDecoration_ = AceType::MakeRefPtr(); + LOGD("[BOX][Dep:%{public}d][LAYOUT]Add frontDecoration automatically.", this->GetDepth()); + } + frontDecoration_->SetBackgroundColor(color); + } + MarkNeedRender(); + } + + void SetBackDecoration(const RefPtr& decoration) // add for list, do not use to update background image + { + backDecoration_ = decoration; + MarkNeedRender(); + } + + void SetFrontDecoration(const RefPtr& decoration) // add for list + { + frontDecoration_ = decoration; + MarkNeedRender(); + } + + void OnMouseHoverEnterAnimation() override; + void OnMouseHoverExitAnimation() override; + void StopMouseHoverAnimation() override; + + Size GetBorderSize() const override; + ColorPropertyAnimatable::SetterMap GetColorPropertySetterMap() override; + ColorPropertyAnimatable::GetterMap GetColorPropertyGetterMap() override; + BackgroundPositionPropertyAnimatable::SetterMap GetBackgroundPositionPropertySetterMap() override; + BackgroundPositionPropertyAnimatable::GetterMap GetBackgroundPositionPropertyGetterMap() override; + +protected: + void ClearRenderObject() override; + + Offset GetBorderOffset() const override; + + void SetBackgroundPosition(const BackgroundImagePosition& position); + BackgroundImagePosition GetBackgroundPosition() const; + + RefPtr backDecoration_; + RefPtr frontDecoration_; + Overflow overflow_ = Overflow::OBSERVABLE; + RefPtr renderImage_; + RefPtr controllerEnter_; + RefPtr controllerExit_; + RefPtr> colorAnimationEnter_; + RefPtr> colorAnimationExit_; + HoverAnimationType animationType_ = HoverAnimationType::NONE; + Color hoverColor_ = Color::TRANSPARENT; + +private: + void ResetController(RefPtr& controller); + void CreateColorAnimation(RefPtr>& colorAnimation, const Color& beginValue, + const Color& endValue); + +#if defined(WINDOWS_PLATFORM) || defined(MAC_PLATFORM) + void CalculateScale(RefPtr node, Offset& globalOffset, Size& size); + void CalculateRotate(RefPtr node, Offset& globalOffset, Size& size); + void CalculateTranslate(RefPtr node, Offset& globalOffset, Size& size); +#endif +}; // class RenderBox + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BOX_RENDER_BOX_H diff --git a/frameworks/core/components/box/render_box_base.cpp b/frameworks/core/components/box/render_box_base.cpp new file mode 100644 index 00000000..c375ba1f --- /dev/null +++ b/frameworks/core/components/box/render_box_base.cpp @@ -0,0 +1,863 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/box/render_box_base.h" + +#include + +#include "base/geometry/offset.h" +#include "base/log/dump_log.h" +#include "core/components/box/box_base_component.h" +#include "core/components/text_field/render_text_field.h" + +namespace OHOS::Ace { +namespace { + +const double CIRCLE_LAYOUT_IN_BOX_SCALE = sin(M_PI_4); +constexpr double BOX_DIAMETER_TO_RADIUS = 2.0; + +class DimensionHelper { +public: + using Getter = const Dimension& (Edge::*)() const; + using Setter = void (Edge::*)(const Dimension&); + + DimensionHelper(Setter setter, Getter getter) : setter_(setter), getter_(getter) {} + ~DimensionHelper() = default; + + const Dimension& Get(const Edge& edge) const + { + return std::bind(getter_, &edge)(); + } + + bool Set(double value, Edge* edge) const + { + if (LessNotEqual(value, 0.0)) { + return false; + } + Dimension dimension = Get(*edge); + if (NearEqual(dimension.Value(), value)) { + return false; + } + dimension.SetValue(value); + std::bind(setter_, edge, dimension)(); + return true; + } + +private: + Setter setter_ = nullptr; + Getter getter_ = nullptr; +}; + +} + +Size RenderBoxBase::GetBorderSize() const +{ + return Size(0.0, 0.0); +} + +Offset RenderBoxBase::GetBorderOffset() const +{ + return Offset(0.0, 0.0); +} + +bool RenderBoxBase::IsSizeValid(const Dimension& value, double maxLimit) +{ + if (NearZero(value.Value())) { + return false; + } + if ((value.Unit() == DimensionUnit::PERCENT) && (NearEqual(maxLimit, Size::INFINITE_SIZE))) { + // When maxLimit is INFINITE, percent value is invalid, except PERCENT_FLAG_USE_VIEW_PORT is set. + return percentFlag_ == PERCENT_FLAG_USE_VIEW_PORT; + } + return true; +} + +double RenderBoxBase::CalculateHeightPercent(double percent) const +{ + return ConvertVerticalDimensionToPx(Dimension(percent, DimensionUnit::PERCENT)); +} + +double RenderBoxBase::ConvertMarginToPx(Dimension dimension, bool vertical, bool additional) const +{ + if (dimension.Unit() == DimensionUnit::PERCENT) { + double parentLimit = 0.0; + if (vertical) { + parentLimit = GetLayoutParam().GetMaxSize().Height(); + if (NearEqual(parentLimit, Size::INFINITE_SIZE) && !NearEqual(selfMaxHeight_, Size::INFINITE_SIZE)) { + parentLimit = selfMaxHeight_; + } + } else { + parentLimit = GetLayoutParam().GetMaxSize().Width(); + if (NearEqual(parentLimit, Size::INFINITE_SIZE) && !NearEqual(selfMaxWidth_, Size::INFINITE_SIZE)) { + parentLimit = selfMaxWidth_; + } + } + if (NearEqual(parentLimit, Size::INFINITE_SIZE)) { + if (additional || percentFlag_ != PERCENT_FLAG_USE_VIEW_PORT) { + return 0.0; // Additional(from theme) set to 0.0 when INFINITE_SIZE. + } + parentLimit = vertical ? viewPort_.Height() : viewPort_.Width(); + } + return parentLimit * dimension.Value(); + } else if (dimension.Unit() == DimensionUnit::PX) { + return dimension.Value(); + } else { + auto context = context_.Upgrade(); + if (!context) { + return dimension.Value(); + } + return context->NormalizeToPx(dimension); + } +} + +double RenderBoxBase::ConvertDimensionToPx(Dimension dimension, bool vertical, bool defaultZero) const +{ + if (dimension.Unit() == DimensionUnit::PERCENT) { + double parentLimit = GetLayoutParam().GetMaxSize().Width(); + if (vertical) { + parentLimit = GetLayoutParam().GetMaxSize().Height(); + } + if (NearEqual(parentLimit, Size::INFINITE_SIZE)) { + if (percentFlag_ != PERCENT_FLAG_USE_VIEW_PORT) { + return defaultZero ? 0.0 : Size::INFINITE_SIZE; + } else { + parentLimit = vertical ? viewPort_.Height() : viewPort_.Width(); + } + } + return parentLimit * dimension.Value(); + } else if (dimension.Unit() == DimensionUnit::PX) { + return dimension.Value(); + } else { + auto context = context_.Upgrade(); + if (!context) { + return dimension.Value(); + } + return context->NormalizeToPx(dimension); + } +} + +double RenderBoxBase::ConvertHorizontalDimensionToPx(Dimension dimension, bool defaultZero) const +{ + return ConvertDimensionToPx(dimension, false, defaultZero); +} + +double RenderBoxBase::ConvertVerticalDimensionToPx(Dimension dimension, bool defaultZero) const +{ + return ConvertDimensionToPx(dimension, true, defaultZero); +} + +void RenderBoxBase::CalculateWidth() +{ + useFlexWidth_ = true; + selfDefineWidth_ = false; + selfMaxWidth_ = ConvertHorizontalDimensionToPx(width_, false); + selfMinWidth_ = 0.0; + if (GreatOrEqual(selfMaxWidth_, 0.0) && !NearEqual(selfMaxWidth_, Size::INFINITE_SIZE)) { + selfMinWidth_ = 0.0; + selfDefineWidth_ = true; + useFlexWidth_ = false; + } else if (constraints_.IsWidthValid()) { + selfMaxWidth_ = constraints_.GetMaxSize().Width(); + selfMinWidth_ = constraints_.GetMinSize().Width(); + useFlexWidth_ = false; + } else if (flex_ != BoxFlex::FLEX_X && flex_ != BoxFlex::FLEX_XY) { + selfMaxWidth_ = Size::INFINITE_SIZE; + useFlexWidth_ = false; + } else { + // No width, no constrain, no flex, use default min and max, reset selfMaxWidth_ here. + selfMaxWidth_ = Size::INFINITE_SIZE; + } + if (!GetLayoutParam().HasUsedConstraints() && constraints_.IsWidthValid()) { + selfMaxWidth_ = std::clamp(selfMaxWidth_, constraints_.GetMinSize().Width(), constraints_.GetMaxSize().Width()); + selfMinWidth_ = std::clamp(selfMinWidth_, constraints_.GetMinSize().Width(), constraints_.GetMaxSize().Width()); + } +} + +void RenderBoxBase::CalculateHeight() +{ + useFlexHeight_ = true; + selfDefineHeight_ = false; + selfMaxHeight_ = ConvertVerticalDimensionToPx(height_, false); + selfMinHeight_ = 0.0; + if (GreatOrEqual(selfMaxHeight_, 0.0) && !NearEqual(selfMaxHeight_, Size::INFINITE_SIZE)) { + selfMinHeight_ = 0.0; + selfDefineHeight_ = true; + useFlexHeight_ = false; + } else if (constraints_.IsHeightValid()) { + selfMaxHeight_ = constraints_.GetMaxSize().Height(); + selfMinHeight_ = constraints_.GetMinSize().Height(); + useFlexHeight_ = false; + } else if (flex_ != BoxFlex::FLEX_Y && flex_ != BoxFlex::FLEX_XY) { + selfMaxHeight_ = Size::INFINITE_SIZE; + useFlexHeight_ = false; + } else { + // No height, no constrain, no flex, use default min and max, reset selfMaxHeight_ here. + selfMaxHeight_ = Size::INFINITE_SIZE; + } + if (!GetLayoutParam().HasUsedConstraints() && constraints_.IsHeightValid()) { + selfMaxHeight_ = + std::clamp(selfMaxHeight_, constraints_.GetMinSize().Height(), constraints_.GetMaxSize().Height()); + selfMinHeight_ = + std::clamp(selfMinHeight_, constraints_.GetMinSize().Height(), constraints_.GetMaxSize().Height()); + } +} + +EdgePx RenderBoxBase::ConvertEdgeToPx(const Edge& edge, bool additional) +{ + EdgePx edgePx; + edgePx.SetLeft(Dimension(ConvertMarginToPx(edge.Left(), false, additional))); + edgePx.SetRight(Dimension(ConvertMarginToPx(edge.Right(), false, additional))); + edgePx.SetTop(Dimension(ConvertMarginToPx(edge.Top(), true, additional))); + edgePx.SetBottom(Dimension(ConvertMarginToPx(edge.Bottom(), true, additional))); + return edgePx; +} + +void RenderBoxBase::ConvertMarginPaddingToPx() +{ + padding_ = ConvertEdgeToPx(paddingOrigin_, false); + margin_ = ConvertEdgeToPx(marginOrigin_, false) + ConvertEdgeToPx(additionalMargin_, true); +} + +void RenderBoxBase::ConvertConstraintsToPx() +{ + // constraints is set from two ways, one is from BoxComponent::SetConstraints, the other is from DomNode. + // BoxComponent::SetConstraints is higher priority than DOMNode. + if (GetLayoutParam().HasUsedConstraints() || constraints_.IsWidthValid() || constraints_.IsHeightValid()) { + return; + } + double minWidth = ConvertHorizontalDimensionToPx(minWidth_, true); + double minHeight = ConvertVerticalDimensionToPx(minHeight_, true); + double maxWidth = ConvertHorizontalDimensionToPx(maxWidth_, true); + double maxHeight = ConvertVerticalDimensionToPx(maxHeight_, true); + if (LessOrEqual(minWidth, 0.0) && LessOrEqual(minHeight, 0.0) && LessOrEqual(maxWidth, 0.0) && + LessOrEqual(maxHeight, 0.0)) { + return; + } + if (GreatNotEqual(minWidth, 0.0) && NearZero(maxWidth)) { + maxWidth = Size::INFINITE_SIZE; + } + if (GreatNotEqual(minHeight, 0.0) && NearZero(maxHeight)) { + maxHeight = Size::INFINITE_SIZE; + } + if (LessNotEqual(maxWidth, minWidth)) { + maxWidth = minWidth; + } + if (LessNotEqual(maxHeight, minHeight)) { + maxHeight = minHeight; + } + if (GreatNotEqual(minWidth, 0.0) || GreatNotEqual(minHeight, 0.0)) { + deliverMinToChild_ = true; + } + Size minSize = Size(minWidth, minHeight); + Size maxSize = Size(maxWidth, maxHeight); + constraints_ = LayoutParam(maxSize, minSize); +} + +void RenderBoxBase::CalculateGridLayoutSize() +{ + if (gridColumnInfo_) { + auto gridParent = gridColumnInfo_->GetParent(); + if (gridParent && gridParent->GetColumnType() != GridColumnType::NONE) { + gridParent->BuildColumnWidth(GetLayoutParam().GetMaxSize().Width()); + } + + double defaultWidth = gridColumnInfo_->GetWidth(); + double maxWidth = gridColumnInfo_->GetMaxWidth(); + if (!NearEqual(defaultWidth, maxWidth)) { + constraints_.SetMinWidth(defaultWidth); + constraints_.SetMaxWidth(maxWidth); + } else { + width_ = Dimension(gridColumnInfo_->GetWidth(), DimensionUnit::PX); + LayoutParam gridLayoutParam = GetLayoutParam(); + gridLayoutParam.SetMaxSize(Size(width_.Value(), gridLayoutParam.GetMaxSize().Height())); + gridLayoutParam.SetMinSize(Size(width_.Value(), gridLayoutParam.GetMinSize().Height())); + SetLayoutParam(gridLayoutParam); + } + + const auto& offset = gridColumnInfo_->GetOffset(); + if (offset != UNDEFINED_DIMENSION) { + positionParam_.type = PositionType::ABSOLUTE; + positionParam_.left.first = offset; + positionParam_.left.second = true; + } + } +} + +void RenderBoxBase::CalculateSelfLayoutParam() +{ + // first. Calculate width and height with the parameter that user set in box component + ConvertConstraintsToPx(); + CalculateWidth(); + CalculateHeight(); + + if (gridContainerInfo_) { + marginOrigin_ = Edge(gridContainerInfo_->GetMarginLeft(), marginOrigin_.Top(), + gridContainerInfo_->GetMarginRight(), marginOrigin_.Bottom()); + } + ConvertMarginPaddingToPx(); + + if (GreatNotEqual(aspectRatio_, 0.0)) { + AdjustSizeByAspectRatio(); + } + + Size selfMax = Size(selfMaxWidth_, selfMaxHeight_); + Size selfMin = Size(selfMinWidth_, selfMinHeight_); + + // second. constrain parameter with LayoutParam + const LayoutParam& layoutSetByParent = GetLayoutParam(); + Size constrainMax = selfMax; + Size constrainMin = selfMin; + if (width_.Unit() != DimensionUnit::PERCENT) { + // Margin layout width effect to the child when width unit is PERCENT. + constrainMax.SetWidth(constrainMax.Width() + margin_.GetLayoutSize().Width()); + constrainMin.SetWidth(constrainMin.Width() + margin_.GetLayoutSize().Width()); + } + if (height_.Unit() != DimensionUnit::PERCENT) { + // Margin layout height effect to the child when height unit is PERCENT. + constrainMax.SetHeight(constrainMax.Height() + margin_.GetLayoutSize().Height()); + constrainMin.SetHeight(constrainMin.Height() + margin_.GetLayoutSize().Height()); + } + selfMax = layoutSetByParent.Constrain(constrainMax); + selfMin = layoutSetByParent.Constrain(constrainMin); + selfLayoutParam_.SetMaxSize(selfMax); + selfLayoutParam_.SetMinSize(selfMin); + + if (gridContainerInfo_) { + double width = selfMax.Width(); + gridContainerInfo_->BuildColumnWidth(width); + } + + ConvertPaddingForLayoutInBox(); +} + +void RenderBoxBase::AdjustSizeByAspectRatio() +{ + const LayoutParam& layoutSetByParent = GetLayoutParam(); + LayoutParam selfLayout = layoutSetByParent; + if (!layoutSetByParent.HasUsedConstraints() && constraints_.IsWidthValid() && constraints_.IsHeightValid()) { + selfLayout = layoutSetByParent.Enforce(constraints_); + } + auto maxWidth = selfLayout.GetMaxSize().Width(); + auto minWidth = selfLayout.GetMinSize().Width(); + auto maxHeight = selfLayout.GetMaxSize().Height(); + auto minHeight = selfLayout.GetMinSize().Height(); + // Adjust by aspect ratio, firstly pick height based on width. It means that when width, height and aspectRatio are + // all set, the height is not used. + if (selfDefineWidth_) { + selfMaxHeight_ = selfMaxWidth_ / aspectRatio_; + } else if (selfDefineHeight_) { + selfMaxWidth_ = selfMaxHeight_ * aspectRatio_; + } else if (NearEqual(selfMaxWidth_, Size::INFINITE_SIZE)) { + selfMaxWidth_ = selfMaxHeight_ * aspectRatio_; + } else { + selfMaxHeight_ = selfMaxWidth_ / aspectRatio_; + } + if (selfMaxWidth_ > maxWidth) { + selfMaxWidth_ = maxWidth; + selfMaxHeight_ = selfMaxWidth_ / aspectRatio_; + } + if (selfMaxHeight_ > maxHeight) { + selfMaxHeight_ = maxHeight; + selfMaxWidth_ = selfMaxHeight_ * aspectRatio_; + } + if (selfMaxWidth_ < minWidth) { + selfMaxWidth_ = minWidth; + selfMaxHeight_ = selfMaxWidth_ / aspectRatio_; + } + if (selfMaxHeight_ < minHeight) { + selfMaxHeight_ = minHeight; + selfMaxWidth_ = selfMaxHeight_ * aspectRatio_; + } + if (!NearEqual(selfMaxWidth_, Size::INFINITE_SIZE) && !NearEqual(selfMaxHeight_, Size::INFINITE_SIZE)) { + selfDefineWidth_ = true; + selfDefineHeight_ = true; + } +} + +void RenderBoxBase::SetChildLayoutParam() +{ + Size deflate = padding_.GetLayoutSize(); + deflate += margin_.GetLayoutSize(); + deflate += GetBorderSize(); + + if (deliverMinToChild_) { + double minWidth = std::max(selfLayoutParam_.GetMinSize().Width() - deflate.Width(), 0.0); + double minHeight = std::max(selfLayoutParam_.GetMinSize().Height() - deflate.Height(), 0.0); + childLayoutParam_.SetMinSize(Size(minWidth, minHeight)); + } else { + childLayoutParam_.SetMinSize(Size(0.0, 0.0)); + } + + double maxWidth = std::max(selfLayoutParam_.GetMaxSize().Width() - deflate.Width(), 0.0); + double maxHeight = std::max(selfLayoutParam_.GetMaxSize().Height() - deflate.Height(), 0.0); + childLayoutParam_.SetMaxSize(Size(maxWidth, maxHeight)); + + // First time layout all children + for (const auto& item : GetChildren()) { + item->Layout(childLayoutParam_); + } +} + +void RenderBoxBase::ConvertPaddingForLayoutInBox() +{ + if (!layoutInBox_) { + return; + } + + Size layoutParmMax = selfLayoutParam_.GetMaxSize(); + Size borderSize = GetBorderSize(); + double diameter = std::min(layoutParmMax.Width() - margin_.GetLayoutSize().Width() - borderSize.Width(), + layoutParmMax.Height() - margin_.GetLayoutSize().Height() - borderSize.Height()); + + double circlePadding = diameter * (1.0 - CIRCLE_LAYOUT_IN_BOX_SCALE) / BOX_DIAMETER_TO_RADIUS; + + padding_.SetLeft(Dimension(std::max(padding_.LeftPx(), circlePadding))); + padding_.SetTop(Dimension(std::max(padding_.TopPx(), circlePadding))); + padding_.SetRight(Dimension(std::max(padding_.RightPx(), circlePadding))); + padding_.SetBottom(Dimension(std::max(padding_.BottomPx(), circlePadding))); +} + +void RenderBoxBase::CalculateSelfLayoutSize() +{ + Size borderSize = GetBorderSize(); + + const LayoutParam& layoutSetByParent = GetLayoutParam(); + Size selfMax = selfLayoutParam_.GetMaxSize() - margin_.GetLayoutSize(); + if (!GetChildren().empty()) { + childSize_ = GetChildren().front()->GetLayoutSize(); + } + // calculate width + double width = 0.0; + double childWidth = childSize_.Width() + padding_.GetLayoutSize().Width() + borderSize.Width(); + if (selfDefineWidth_) { + width = selfMax.Width(); + } else if (useFlexWidth_) { + if (layoutSetByParent.GetMaxSize().IsWidthInfinite() && viewPort_.Width() < childWidth) { + width = childWidth; + } else { + double flexWidth = layoutSetByParent.GetMaxSize().IsWidthInfinite() && !viewPort_.IsWidthInfinite() + ? viewPort_.Width() + : layoutSetByParent.GetMaxSize().Width(); + width = flexWidth - margin_.GetLayoutSize().Width(); + } + } else { + if (gridColumnInfo_ && NearEqual(gridColumnInfo_->GetWidth(), gridColumnInfo_->GetMaxWidth())) { + width = gridColumnInfo_->GetWidth(); + } else { + width = childWidth; + } + } + // calculate height + double height = 0.0; + double childHeight = childSize_.Height() + padding_.GetLayoutSize().Height() + borderSize.Height(); + if (selfDefineHeight_) { + height = selfMax.Height(); + } else if (useFlexHeight_) { + if (layoutSetByParent.GetMaxSize().IsHeightInfinite() && viewPort_.Height() < childHeight) { + height = childHeight; + } else { + double flexHeight = layoutSetByParent.GetMaxSize().IsHeightInfinite() && !viewPort_.IsHeightInfinite() + ? viewPort_.Height() + : layoutSetByParent.GetMaxSize().Height(); + height = flexHeight - margin_.GetLayoutSize().Height(); + } + } else { + height = childSize_.Height() + padding_.GetLayoutSize().Height() + borderSize.Height(); + } + paintSize_ = Size(width, height); + // box layout size = paint size + margin size + selfLayoutSize_ = GetLayoutParam().Constrain(paintSize_ + margin_.GetLayoutSize()); + paintSize_ = selfLayoutSize_ - margin_.GetLayoutSize(); + touchArea_.SetOffset(margin_.GetOffset()); + touchArea_.SetSize(paintSize_); + SetLayoutSize(selfLayoutSize_); +} + +void RenderBoxBase::CalculateChildPosition() +{ + Offset borderOffset = GetBorderOffset(); + Size parentSize = selfLayoutSize_ - margin_.GetLayoutSize() - padding_.GetLayoutSize(); + parentSize -= GetBorderSize(); + + if (!GetChildren().empty()) { + const auto& child = GetChildren().front(); + childPosition_ = margin_.GetOffset() + borderOffset + padding_.GetOffset() + + Alignment::GetAlignPosition(parentSize, child->GetLayoutSize(), align_); + child->SetPosition(childPosition_); + } +} + +void RenderBoxBase::PerformLayout() +{ + // update scale for margin, padding + auto context = context_.Upgrade(); + if (!context) { + LOGE("[BOX][Dep:%{public}d][LAYOUT]Call Context Upgrade failed. PerformLayout failed.", this->GetDepth()); + return; + } + if (useLiteStyle_) { + PerformLayoutInLiteMode(); + if (layoutCallback_) { + layoutCallback_(); + } + return; + } + CalculateGridLayoutSize(); + // first. calculate self layout param + CalculateSelfLayoutParam(); + // second. set layout param of child to calculate layout size + SetChildLayoutParam(); + // third. using layout size of child, calculate layout size of box + CalculateSelfLayoutSize(); + // forth. calculate position of child + CalculateChildPosition(); + if (layoutCallback_) { + layoutCallback_(); + } +} + +void RenderBoxBase::PerformLayoutInLiteMode() +{ + // Lite must has width and height + CalculateWidth(); + CalculateHeight(); + ConvertMarginPaddingToPx(); + if (NearEqual(selfMaxWidth_, Size::INFINITE_SIZE) && !selfDefineWidth_) { + selfMaxWidth_ = GetLayoutParam().GetMaxSize().Width(); + } + if (NearEqual(selfMaxHeight_, Size::INFINITE_SIZE) && !selfDefineHeight_) { + selfMaxHeight_ = GetLayoutParam().GetMaxSize().Height(); + } + Size selfMax = Size(selfMaxWidth_, selfMaxHeight_) + margin_.GetLayoutSize(); + Size selfMin = Size(selfMinWidth_, selfMinHeight_) + margin_.GetLayoutSize(); + // Do not constrain param in lite mode + selfLayoutParam_.SetMaxSize(selfMax); + selfLayoutParam_.SetMinSize(selfMin); + SetChildLayoutParam(); + double width = 0.0; + double height = 0.0; + Size borderSize = GetBorderSize(); + childSize_ = GetChildren().front()->GetLayoutSize(); + if (selfDefineWidth_) { + width = selfMax.Width() - margin_.GetLayoutSize().Width(); + } else { + width = childSize_.Width() + padding_.GetLayoutSize().Width() + borderSize.Width(); + } + if (selfDefineHeight_) { + height = selfMax.Height() - margin_.GetLayoutSize().Height(); + } else { + height = childSize_.Height() + padding_.GetLayoutSize().Height() + borderSize.Height(); + } + // Determine self size, not use constrain. + paintSize_ = Size(width, height); + selfLayoutSize_ = paintSize_ + margin_.GetLayoutSize(); + touchArea_.SetOffset(margin_.GetOffset()); + touchArea_.SetSize(paintSize_); + SetLayoutSize(selfLayoutSize_); + CalculateChildPosition(); +} + +void RenderBoxBase::Update(const RefPtr& component) +{ + const RefPtr box = AceType::DynamicCast(component); + if (box) { + scrollPage_ = box->GetScrollPage(); + + paddingOrigin_ = box->GetPadding(); + marginOrigin_ = box->GetMargin(); + additionalMargin_ = box->GetAdditionalMargin(); + flex_ = box->GetFlex(); + constraints_ = box->GetConstraints(); + align_ = box->GetAlignment(); + deliverMinToChild_ = box->GetDeliverMinToChild(); + // When declarative animation is active for this renderbox, + // the animatable properties are set by PropertyAnimatable::SetProperty. + // And currently declarative api allow only animating + // PROPERTY_WIDTH, PROPERTY_HEIGHT + if (!IsDeclarativeAnimationActive()) { + width_ = box->GetWidthDimension(); + height_ = box->GetHeightDimension(); + } + auto context = context_.Upgrade(); + if (context && scrollPage_) { + height_ = Dimension(context->GetStageRect().Height(), DimensionUnit::PX); + } + percentFlag_ = box->GetPercentFlag(); + layoutInBox_ = box->GetLayoutInBoxFlag(); + aspectRatio_ = box->GetAspectRatio(); + minWidth_ = box->GetMinWidth(); + minHeight_ = box->GetMinHeight(); + maxWidth_ = box->GetMaxWidth(); + maxHeight_ = box->GetMaxHeight(); + useLiteStyle_ = box->UseLiteStyle(); + auto gridLayoutInfo = box->GetGridLayoutInfo(); + auto gridColumnInfo = AceType::DynamicCast(gridLayoutInfo); + if (gridColumnInfo) { + gridColumnInfo_ = gridColumnInfo; + } else { + auto gridContainerInfo = AceType::DynamicCast(gridLayoutInfo); + if (gridContainerInfo) { + gridContainerInfo_ = gridContainerInfo; + } + } + + MarkNeedLayout(); + } +} + +Offset RenderBoxBase::GetPaintPosition() const +{ + return margin_.GetOffset(); +} + +const Size& RenderBoxBase::GetPaintSize() const +{ + return paintSize_; +} + +void RenderBoxBase::SetPaintSize(const Size& paintSize) +{ + paintSize_ = paintSize; +} + +void RenderBoxBase::Dump() +{ + double dipScale = 1.0; + auto context = context_.Upgrade(); + if (context) { + dipScale = context->GetDipScale(); + } + Size borderSize = GetBorderSize(); + DumpLog::GetInstance().AddDesc(std::string("WH: ").append(Size(width_.Value(), height_.Value()).ToString())); + DumpLog::GetInstance().AddDesc("Flex: " + std::to_string(static_cast(flex_)) + ", LayoutInBox: " + + std::to_string(static_cast(layoutInBox_)) + ", BGcolor: " + std::to_string(GetColor().GetValue())); + DumpLog::GetInstance().AddDesc(std::string("Align: ").append(align_.ToString())); + DumpLog::GetInstance().AddDesc(std::string("Margin: ").append(margin_.GetLayoutSizeInPx(dipScale).ToString())); + DumpLog::GetInstance().AddDesc(std::string("Padding: ").append(padding_.GetLayoutSizeInPx(dipScale).ToString())); + DumpLog::GetInstance().AddDesc(std::string("Border: ").append(borderSize.ToString())); + DumpLog::GetInstance().AddDesc(std::string("Constraints: ").append(constraints_.ToString())); + LayoutParam layoutParam = GetLayoutParam(); + DumpLog::GetInstance().AddDesc(std::string("LayoutParam: ").append(layoutParam.ToString())); + DumpLog::GetInstance().AddDesc(std::string("SelfLayout: ").append(selfLayoutParam_.ToString())); + DumpLog::GetInstance().AddDesc(std::string("ChildLayout: ").append(childLayoutParam_.ToString())); + DumpLog::GetInstance().AddDesc(std::string("PaintSize: ").append(paintSize_.ToString())); + DumpLog::GetInstance().AddDesc(std::string("TouchArea: ").append(touchArea_.ToString())); + DumpLog::GetInstance().AddDesc(std::string("SelfSize: ").append(selfLayoutSize_.ToString())); + DumpLog::GetInstance().AddDesc(std::string("ChildSize: ").append(childSize_.ToString())); + DumpLog::GetInstance().AddDesc(std::string("ChildPos: ").append(childPosition_.ToString())); + if (gridColumnInfo_) { + DumpLog::GetInstance().AddDesc(std::string("GridColumnInfo")); + } + if (gridContainerInfo_) { + DumpLog::GetInstance().AddDesc(std::string("GridContainerInfo")); + } +} + +void RenderBoxBase::ClearRenderObject() +{ + RenderNode::ClearRenderObject(); + width_ = Dimension(-1.0, DimensionUnit::PX); + height_ = Dimension(-1.0, DimensionUnit::PX); + flex_ = BoxFlex::FLEX_NO; + + constraints_ = LayoutParam(Size(), Size()); + padding_ = EdgePx(); + margin_ = EdgePx(); + align_ = Alignment(); + paintSize_ = Size(); + touchArea_ = Rect(); + + deliverMinToChild_ = true; + scrollPage_ = false; + percentFlag_ = 0; + layoutInBox_ = false; + + paddingOrigin_ = Edge(); + marginOrigin_ = Edge(); + additionalMargin_ = Edge(); + + useFlexWidth_ = false; + useFlexHeight_ = false; + selfDefineWidth_ = false; + selfDefineHeight_ = false; + selfMaxWidth_ = Size::INFINITE_SIZE; + selfMinWidth_ = 0.0; + selfMaxHeight_ = Size::INFINITE_SIZE; + selfMinHeight_ = 0.0; + + aspectRatio_ = 0.0; + minWidth_ = Dimension(); + minHeight_ = Dimension(); + maxWidth_ = Dimension(); + maxHeight_ = Dimension(); + + selfLayoutParam_ = LayoutParam(); + selfLayoutSize_ = Size(); + childLayoutParam_ = LayoutParam(); + childSize_ = Size(); + childPosition_ = Offset(); + + layoutCallback_ = nullptr; + gridColumnInfo_ = nullptr; + gridContainerInfo_ = nullptr; +} + +FloatPropertyAnimatable::SetterMap RenderBoxBase::GetFloatPropertySetterMap() +{ + FloatPropertyAnimatable::SetterMap map; + auto weak = AceType::WeakClaim(this); + map[PropertyAnimatableType::PROPERTY_WIDTH] = [weak](float value) { + auto box = weak.Upgrade(); + if (!box) { + LOGE("Set width failed. box is null."); + return; + } + box->SetWidth(value); + }; + const RefPtr renderTextField = AceType::DynamicCast(GetFirstChild()); + if (renderTextField) { + WeakPtr textWeak = renderTextField; + map[PropertyAnimatableType::PROPERTY_HEIGHT] = [textWeak](float value) { + auto renderTextField = textWeak.Upgrade(); + if (!renderTextField) { + LOGE("Set height failed. text is null."); + return; + } + return renderTextField->SetHeight(value); + }; + } else { + map[PropertyAnimatableType::PROPERTY_HEIGHT] = [weak](float value) { + auto box = weak.Upgrade(); + if (!box) { + LOGE("Set height failed. box is null."); + return; + } + box->SetHeight(value); + }; + } + + auto paddingSetFunc = [weak](float value, const DimensionHelper& helper) { + auto box = weak.Upgrade(); + if (!box) { + LOGE("Set Padding value failed. box is null"); + return; + } + if (helper.Set(value, &box->paddingOrigin_)) { + box->MarkNeedLayout(); + } + }; + map[PropertyAnimatableType::PROPERTY_PADDING_LEFT] = + std::bind(paddingSetFunc, std::placeholders::_1, DimensionHelper(&Edge::SetLeft, &Edge::Left)); + map[PropertyAnimatableType::PROPERTY_PADDING_TOP] = + std::bind(paddingSetFunc, std::placeholders::_1, DimensionHelper(&Edge::SetTop, &Edge::Top)); + map[PropertyAnimatableType::PROPERTY_PADDING_RIGHT] = + std::bind(paddingSetFunc, std::placeholders::_1, DimensionHelper(&Edge::SetRight, &Edge::Right)); + map[PropertyAnimatableType::PROPERTY_PADDING_BOTTOM] = + std::bind(paddingSetFunc, std::placeholders::_1, DimensionHelper(&Edge::SetBottom, &Edge::Bottom)); + + auto marginSetFunc = [weak](float value, const DimensionHelper& helper) { + auto box = weak.Upgrade(); + if (!box) { + LOGE("Set Margin value failed. box is null."); + return; + } + if (helper.Set(value, &box->marginOrigin_)) { + box->MarkNeedLayout(); + } + }; + + map[PropertyAnimatableType::PROPERTY_MARGIN_LEFT] = + std::bind(marginSetFunc, std::placeholders::_1, DimensionHelper(&Edge::SetLeft, &Edge::Left)); + map[PropertyAnimatableType::PROPERTY_MARGIN_TOP] = + std::bind(marginSetFunc, std::placeholders::_1, DimensionHelper(&Edge::SetTop, &Edge::Top)); + map[PropertyAnimatableType::PROPERTY_MARGIN_RIGHT] = + std::bind(marginSetFunc, std::placeholders::_1, DimensionHelper(&Edge::SetRight, &Edge::Right)); + map[PropertyAnimatableType::PROPERTY_MARGIN_BOTTOM] = + std::bind(marginSetFunc, std::placeholders::_1, DimensionHelper(&Edge::SetBottom, &Edge::Bottom)); + + return map; +}; + +FloatPropertyAnimatable::GetterMap RenderBoxBase::GetFloatPropertyGetterMap() +{ + FloatPropertyAnimatable::GetterMap map; + auto weak = AceType::WeakClaim(this); + map[PropertyAnimatableType::PROPERTY_WIDTH] = [weak]() -> float { + auto box = weak.Upgrade(); + if (!box) { + LOGE("Get width failed. box is null."); + return 0.0; + } + return box->GetWidth(); + }; + const RefPtr renderTextField = AceType::DynamicCast(GetFirstChild()); + if (renderTextField) { + WeakPtr textWeak = renderTextField; + map[PropertyAnimatableType::PROPERTY_HEIGHT] = [textWeak]() -> float { + auto renderTextField = textWeak.Upgrade(); + if (!renderTextField) { + LOGE("Get height failed. text is null."); + return 0.0; + } + return renderTextField->GetHeight(); + }; + } else { + map[PropertyAnimatableType::PROPERTY_HEIGHT] = [weak]() -> float { + auto box = weak.Upgrade(); + if (!box) { + LOGE("Get height failed. box is null."); + return 0.0; + } + return box->GetHeight(); + }; + } + + auto paddingGetFunc = [weak](const DimensionHelper& helper) -> float { + auto box = weak.Upgrade(); + if (!box) { + LOGE("Get Padding failed, box is null."); + return 0.0f; + } + return helper.Get(box->paddingOrigin_).Value(); + }; + map[PropertyAnimatableType::PROPERTY_PADDING_LEFT] = + std::bind(paddingGetFunc, DimensionHelper(&Edge::SetLeft, &Edge::Left)); + map[PropertyAnimatableType::PROPERTY_PADDING_TOP] = + std::bind(paddingGetFunc, DimensionHelper(&Edge::SetTop, &Edge::Top)); + map[PropertyAnimatableType::PROPERTY_PADDING_RIGHT] = + std::bind(paddingGetFunc, DimensionHelper(&Edge::SetRight, &Edge::Right)); + map[PropertyAnimatableType::PROPERTY_PADDING_BOTTOM] = + std::bind(paddingGetFunc, DimensionHelper(&Edge::SetBottom, &Edge::Bottom)); + + auto marginGetFunc = [weak](const DimensionHelper& helper) -> float { + auto box = weak.Upgrade(); + if (!box) { + LOGE("Get margin failed. box is null."); + return 0.0f; + } + return helper.Get(box->marginOrigin_).Value(); + }; + map[PropertyAnimatableType::PROPERTY_MARGIN_LEFT] = + std::bind(marginGetFunc, DimensionHelper(&Edge::SetLeft, &Edge::Left)); + map[PropertyAnimatableType::PROPERTY_MARGIN_TOP] = + std::bind(marginGetFunc, DimensionHelper(&Edge::SetTop, &Edge::Top)); + map[PropertyAnimatableType::PROPERTY_MARGIN_RIGHT] = + std::bind(marginGetFunc, DimensionHelper(&Edge::SetRight, &Edge::Right)); + map[PropertyAnimatableType::PROPERTY_MARGIN_BOTTOM] = + std::bind(marginGetFunc, DimensionHelper(&Edge::SetBottom, &Edge::Bottom)); + return map; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/box/render_box_base.h b/frameworks/core/components/box/render_box_base.h new file mode 100644 index 00000000..dfce1720 --- /dev/null +++ b/frameworks/core/components/box/render_box_base.h @@ -0,0 +1,186 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BOX_RENDER_BOX_BASE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BOX_RENDER_BOX_BASE_H + +#include "base/geometry/size.h" +#include "core/animation/property_animatable.h" +#include "core/components/box/box_base_component.h" +#include "core/components/common/layout/grid_column_info.h" +#include "core/components/common/properties/edge.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderBoxBase : public RenderNode, public PropertyAnimatable { + DECLARE_ACE_TYPE(RenderBoxBase, RenderNode, PropertyAnimatable); + +public: + using LayoutCallback = std::function; + + void Update(const RefPtr& component) override; + void PerformLayout() override; + void Dump() override; + + Offset GetPaintPosition() const; + const Size& GetPaintSize() const; + void SetPaintSize(const Size& paintSize); + virtual Size GetBorderSize() const; + double CalculateHeightPercent(double percent) const; // add for text filed + + FloatPropertyAnimatable::SetterMap GetFloatPropertySetterMap() override; + FloatPropertyAnimatable::GetterMap GetFloatPropertyGetterMap() override; + + virtual const Color& GetColor() const + { + return Color::TRANSPARENT; + } + + double GetWidth() const // add for animation + { + return width_.Value(); + } + + double GetHeight() const // add for animation + { + return height_.Value(); + } + + void SetWidth(double width) // add for animation + { + if (GreatOrEqual(width, 0.0) && !NearEqual(width_.Value(), width)) { + width_.SetValue(width); + MarkNeedLayout(); + } + } + + void SetHeight(double height) // add for animation + { + if (GreatOrEqual(height, 0.0) && !NearEqual(height_.Value(), height)) { + height_.SetValue(height); + MarkNeedLayout(); + } + } + + EdgePx GetMargin() const + { + return margin_; + } + + Size GetMarginSize() const + { + return margin_.GetLayoutSize(); + } + + Size GetPaddingSize() const + { + return padding_.GetLayoutSize(); + } + + void SetLayoutCallback(LayoutCallback&& layoutCallback) + { + layoutCallback_ = layoutCallback; + } + + const Rect& GetTouchArea() const + { + return touchArea_; + } + + void SetConstraints(const LayoutParam& constraints) + { + constraints_ = constraints; + MarkNeedLayout(); + } + + void SetBoxFlex(BoxFlex flex) + { + flex_ = flex; + } + +protected: + virtual void ClearRenderObject() override; + virtual Offset GetBorderOffset() const; + + EdgePx ConvertEdgeToPx(const Edge& edge, bool additional); + double ConvertMarginToPx(Dimension dimension, bool vertical, bool additional) const; + double ConvertDimensionToPx(Dimension dimension, bool vertical, bool defaultZero = false) const; + double ConvertHorizontalDimensionToPx(Dimension dimension, bool defaultZero = false) const; + double ConvertVerticalDimensionToPx(Dimension dimension, bool defaultZero = false) const; + void CalculateWidth(); + void CalculateHeight(); + void ConvertMarginPaddingToPx(); + void ConvertConstraintsToPx(); + void CalculateGridLayoutSize(); + void CalculateSelfLayoutParam(); + void SetChildLayoutParam(); + void ConvertPaddingForLayoutInBox(); + void CalculateSelfLayoutSize(); + void CalculateChildPosition(); + void AdjustSizeByAspectRatio(); + void PerformLayoutInLiteMode(); + + Dimension width_ = Dimension(-1.0, DimensionUnit::PX); // exclude margin + Dimension height_ = Dimension(-1.0, DimensionUnit::PX); // exclude margin + BoxFlex flex_ = BoxFlex::FLEX_NO; + LayoutParam constraints_ = LayoutParam(Size(), Size()); // exclude margin + EdgePx padding_; + EdgePx margin_; + Alignment align_; + Size paintSize_; // exclude margin + Rect touchArea_; // exclude margin + bool deliverMinToChild_ = true; + bool scrollPage_ = false; + uint32_t percentFlag_ = 0; + bool layoutInBox_ = false; + Edge paddingOrigin_; + LayoutCallback layoutCallback_; + bool useLiteStyle_ = false; + +private: + bool IsSizeValid(const Dimension& value, double maxLimit); + + Edge marginOrigin_; + Edge additionalMargin_; + bool useFlexWidth_ = false; + bool useFlexHeight_ = false; + bool selfDefineWidth_ = false; + bool selfDefineHeight_ = false; + double selfMaxWidth_ = Size::INFINITE_SIZE; // exclude margin + double selfMinWidth_ = 0.0; // exclude margin + double selfMaxHeight_ = Size::INFINITE_SIZE; // exclude margin + double selfMinHeight_ = 0.0; // exclude margin + double aspectRatio_ = 0.0; + Dimension minWidth_ = Dimension(); + Dimension minHeight_ = Dimension(); + Dimension maxWidth_ = Dimension(); + Dimension maxHeight_ = Dimension(); + + // result for layout + LayoutParam selfLayoutParam_; // include margin + Size selfLayoutSize_; // include margin + LayoutParam childLayoutParam_; + Size childSize_; + Offset childPosition_; + + // grid layout + RefPtr gridColumnInfo_; + RefPtr gridContainerInfo_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BOX_RENDER_BOX_BASE_H diff --git a/frameworks/core/components/bubble/BUILD.gn b/frameworks/core/components/bubble/BUILD.gn new file mode 100644 index 00000000..cf04eb5b --- /dev/null +++ b/frameworks/core/components/bubble/BUILD.gn @@ -0,0 +1,23 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("bubble") { + sources = [ + "bubble_component.cpp", + "bubble_element.cpp", + "flutter_render_bubble.cpp", + "render_bubble.cpp", + ] +} diff --git a/frameworks/core/components/bubble/bubble_component.cpp b/frameworks/core/components/bubble/bubble_component.cpp new file mode 100644 index 00000000..abf016ce --- /dev/null +++ b/frameworks/core/components/bubble/bubble_component.cpp @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/bubble/bubble_component.h" + +#include "base/geometry/dimension.h" +#include "core/components/box/box_component.h" +#include "core/components/bubble/bubble_element.h" +#include "core/components/bubble/render_bubble.h" + +namespace OHOS::Ace { +RefPtr BubbleComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +RefPtr BubbleComponent::CreateRenderNode() +{ + return RenderBubble::Create(); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/bubble/bubble_component.h b/frameworks/core/components/bubble/bubble_component.h new file mode 100644 index 00000000..3d8c83de --- /dev/null +++ b/frameworks/core/components/bubble/bubble_component.h @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BUBBLE_BUBBLE_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BUBBLE_BUBBLE_COMPONENT_H + +#include "core/components/common/properties/color.h" +#include "core/components/common/properties/edge.h" +#include "core/components/popup/popup_component.h" +#include "core/pipeline/base/component.h" +#include "core/pipeline/base/sole_child_component.h" + +namespace OHOS::Ace { + +class BubbleComponent : public SoleChildComponent { + DECLARE_ACE_TYPE(BubbleComponent, SoleChildComponent); + +public: + explicit BubbleComponent(const RefPtr& child) : SoleChildComponent(child) {} + ~BubbleComponent() override = default; + + RefPtr CreateElement() override; + RefPtr CreateRenderNode() override; + + void SetPopupParam(const RefPtr& popupParam) + { + popupParam_ = popupParam; + } + + const RefPtr& GetPopupParam() const + { + return popupParam_; + } + + void SetId(const ComposeId& id) + { + id_ = id; + } + + const ComposeId& GetId() const + { + return id_; + } + + void SetWeakStack(const WeakPtr& weakStack) + { + weakStack_ = weakStack; + } + + const WeakPtr& GetWeakStack() const + { + return weakStack_; + } + +private: + ComposeId id_; + RefPtr popupParam_; + WeakPtr weakStack_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BUBBLE_BUBBLE_COMPONENT_H diff --git a/frameworks/core/components/bubble/bubble_element.cpp b/frameworks/core/components/bubble/bubble_element.cpp new file mode 100644 index 00000000..15e0a79a --- /dev/null +++ b/frameworks/core/components/bubble/bubble_element.cpp @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/bubble/bubble_element.h" + +#include "core/components/bubble/bubble_component.h" +#include "core/components/bubble/render_bubble.h" + +namespace OHOS::Ace { + +void BubbleElement::PerformBuild() +{ + RefPtr bubble = AceType::DynamicCast(component_); + if (bubble) { + id_ = bubble->GetId(); + const auto& child = children_.empty() ? nullptr : children_.front(); + UpdateChild(child, bubble->GetChild()); + } +} + +bool BubbleElement::OnKeyEvent(const KeyEvent& keyEvent) +{ + if (keyEvent.code == KeyCode::KEYBOARD_BACK && keyEvent.action == KeyAction::UP) { + const auto& bubble = AceType::DynamicCast(renderNode_); + if (bubble) { + return bubble->PopBubble(); + } + return false; + } + return FocusNode::OnKeyEvent(keyEvent); +} + +bool BubbleElement::RequestNextFocus(bool vertical, bool reverse, const Rect& rect) +{ + return false; +} + +void BubbleElement::FirePopEvent() +{ + auto bubble = AceType::DynamicCast(renderNode_); + if (bubble) { + bubble->FirePopEvent(); + } +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/bubble/bubble_element.h b/frameworks/core/components/bubble/bubble_element.h new file mode 100644 index 00000000..849b23cc --- /dev/null +++ b/frameworks/core/components/bubble/bubble_element.h @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BUBBLE_BUBBLE_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BUBBLE_BUBBLE_ELEMENT_H + +#include "core/focus/focus_node.h" +#include "core/pipeline/base/sole_child_element.h" + +namespace OHOS::Ace { + +class BubbleElement : public SoleChildElement, public FocusGroup { + DECLARE_ACE_TYPE(BubbleElement, SoleChildElement, FocusGroup); + +public: + BubbleElement() = default; + ~BubbleElement() override = default; + + void PerformBuild() override; + + const ComposeId& GetId() + { + return id_; + } + + void FirePopEvent(); + +protected: + bool OnKeyEvent(const KeyEvent& keyEvent) override; + bool RequestNextFocus(bool vertical, bool reverse, const Rect& rect) override; + +private: + ComposeId id_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BUBBLE_BUBBLE_ELEMENT_H diff --git a/frameworks/core/components/bubble/flutter_render_bubble.cpp b/frameworks/core/components/bubble/flutter_render_bubble.cpp new file mode 100644 index 00000000..bf07879c --- /dev/null +++ b/frameworks/core/components/bubble/flutter_render_bubble.cpp @@ -0,0 +1,330 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/bubble/flutter_render_bubble.h" + +#include "flutter/lib/ui/ui_dart_state.h" +#include "third_party/skia/include/core/SkMaskFilter.h" +#include "third_party/skia/include/effects/Sk1DPathEffect.h" +#include "third_party/skia/include/effects/SkDashPathEffect.h" +#include "third_party/skia/include/effects/SkGradientShader.h" + +#include "core/components/common/painter/flutter_decoration_painter.h" +#include "core/components/common/properties/shadow_config.h" +#include "core/pipeline/base/flutter_render_context.h" +#include "core/pipeline/base/scoped_canvas_state.h" + +namespace OHOS::Ace { +namespace { + +constexpr Dimension BEZIER_WIDTH_HALF = 16.0_vp; +constexpr Dimension BEZIER_HORIZON_OFFSET_FIRST = 1.3_vp; +constexpr Dimension BEZIER_HORIZON_OFFSET_SECOND = 3.2_vp; +constexpr Dimension BEZIER_HORIZON_OFFSET_THIRD = 6.6_vp; +constexpr Dimension BEZIER_HORIZON_OFFSET_FOURTH = 16.0_vp; +constexpr Dimension BEZIER_VERTICAL_OFFSET_FIRST = 0.1_vp; +constexpr Dimension BEZIER_VERTICAL_OFFSET_SECOND = 3.0_vp; +constexpr Dimension BEZIER_VERTICAL_OFFSET_THIRD = 8.0_vp; + +} // namespace + +RefPtr RenderBubble::Create() +{ + LOGD("Create"); + return AceType::MakeRefPtr(); +} + +SkCanvas* FlutterRenderBubble::GetSkCanvas(RenderContext& context) +{ + auto canvas = ScopedCanvas::Create(context); + if (!canvas) { + LOGE("canvas fetch failed"); + return nullptr; + } + return canvas->canvas(); +} + +void FlutterRenderBubble::UpdateBorderRadius() +{ + auto rrect = MakeRRect(); + border_.SetTopLeftRadius( + Radius(rrect.radii(SkRRect::kUpperLeft_Corner).fX, rrect.radii(SkRRect::kUpperLeft_Corner).fY)); + border_.SetTopRightRadius( + Radius(rrect.radii(SkRRect::kUpperRight_Corner).fX, rrect.radii(SkRRect::kUpperRight_Corner).fY)); + border_.SetBottomRightRadius( + Radius(rrect.radii(SkRRect::kLowerRight_Corner).fX, rrect.radii(SkRRect::kLowerRight_Corner).fY)); + border_.SetBottomLeftRadius( + Radius(rrect.radii(SkRRect::kLowerLeft_Corner).fX, rrect.radii(SkRRect::kLowerLeft_Corner).fY)); +} + +SkRRect FlutterRenderBubble::MakeRRect() +{ + SkRect rect = SkRect::MakeXYWH(childOffset_.GetX(), childOffset_.GetY(), childSize_.Width(), childSize_.Height()); + SkRRect rrect = SkRRect::MakeEmpty(); + SkVector rectRadii[4] = { { 0.0, 0.0 }, { 0.0, 0.0 }, { 0.0, 0.0 }, { 0.0, 0.0 } }; + rectRadii[SkRRect::kUpperLeft_Corner] = + SkPoint::Make(NormalizeToPx(border_.TopLeftRadius().GetX()), NormalizeToPx(border_.TopLeftRadius().GetY())); + rectRadii[SkRRect::kUpperRight_Corner] = + SkPoint::Make(NormalizeToPx(border_.TopRightRadius().GetX()), NormalizeToPx(border_.TopRightRadius().GetY())); + rectRadii[SkRRect::kLowerRight_Corner] = SkPoint::Make( + NormalizeToPx(border_.BottomRightRadius().GetX()), NormalizeToPx(border_.BottomRightRadius().GetY())); + rectRadii[SkRRect::kLowerLeft_Corner] = SkPoint::Make( + NormalizeToPx(border_.BottomLeftRadius().GetX()), NormalizeToPx(border_.BottomLeftRadius().GetY())); + rrect.setRectRadii(rect, rectRadii); + return rrect; +} + +void FlutterRenderBubble::Paint(RenderContext& context, const Offset& offset) +{ + if (!isShow_) { + return; + } + PaintMask(context); + PaintBubble(context); + RenderNode::Paint(context, offset); + PaintBorder(context); + if (onVisibilityChange_ && !hasEventFired_) { + std::string param = std::string("\"visibilitychange\",{\"visibility\":").append("true}"); + onVisibilityChange_(param); + hasEventFired_ = true; + } +} + +void FlutterRenderBubble::PaintMask(RenderContext& context) +{ + SkCanvas* skCanvas = GetSkCanvas(context); + if (skCanvas == nullptr) { + return; + } + SkPaint paint; + paint.setColor(maskColor_.GetValue()); + skCanvas->drawRect(SkRect::MakeXYWH(0.0, 0.0, GetLayoutSize().Width(), GetLayoutSize().Height()), paint); +} + +void FlutterRenderBubble::PaintBubble(RenderContext& context) +{ + SkCanvas* skCanvas = GetSkCanvas(context); + SkPaint paint; + paint.setAntiAlias(true); + paint.setColor(backgroundColor_.GetValue()); + switch (arrowPlacement_) { + case Placement::TOP: + showTopArrow_ ? PaintTopBubble(skCanvas, paint) : PaintDefaultBubble(skCanvas, paint); + break; + case Placement::BOTTOM: + showBottomArrow_ ? PaintBottomBubble(skCanvas, paint) : PaintDefaultBubble(skCanvas, paint); + break; + default: + PaintDefaultBubble(skCanvas, paint); + break; + } +} + +void FlutterRenderBubble::PaintTopBubble(SkCanvas* skCanvas, SkPaint paint) +{ + if (skCanvas == nullptr) { + return; + } + double childHeight = childSize_.Height(); + double childHalfWidth = childSize_.Width() / 2.0; + double bubbleSpacing = NormalizeToPx(BUBBLE_SPACING); + double arrowOffset = std::clamp(NormalizeToPx(arrowOffset_), + -(childHalfWidth - std::max(NormalizeToPx(padding_.Left()), NormalizeToPx(border_.TopLeftRadius().GetX())) - + NormalizeToPx(BEZIER_WIDTH_HALF)), + childHalfWidth - std::max(NormalizeToPx(padding_.Right()), NormalizeToPx(border_.TopRightRadius().GetY())) - + NormalizeToPx(BEZIER_WIDTH_HALF)); + + path_.reset(); + path_.moveTo(arrowPosition_.GetX() + arrowOffset, arrowPosition_.GetY()); + path_.quadTo(arrowPosition_.GetX() + NormalizeToPx(BEZIER_HORIZON_OFFSET_FIRST) + arrowOffset, + arrowPosition_.GetY() + NormalizeToPx(BEZIER_VERTICAL_OFFSET_FIRST), + arrowPosition_.GetX() + NormalizeToPx(BEZIER_HORIZON_OFFSET_SECOND) + arrowOffset, + arrowPosition_.GetY() - NormalizeToPx(BEZIER_VERTICAL_OFFSET_SECOND)); + path_.quadTo(arrowPosition_.GetX() + NormalizeToPx(BEZIER_HORIZON_OFFSET_THIRD) + arrowOffset, + arrowPosition_.GetY() - NormalizeToPx(BEZIER_VERTICAL_OFFSET_THIRD), + arrowPosition_.GetX() + NormalizeToPx(BEZIER_HORIZON_OFFSET_FOURTH) + arrowOffset, + arrowPosition_.GetY() - NormalizeToPx(BEZIER_VERTICAL_OFFSET_THIRD)); + path_.lineTo(arrowPosition_.GetX() + (childHalfWidth - NormalizeToPx(border_.BottomRightRadius().GetX())), + arrowPosition_.GetY() - bubbleSpacing); + path_.arcTo(NormalizeToPx(border_.BottomRightRadius().GetX()), NormalizeToPx(border_.BottomRightRadius().GetY()), + 0.0f, SkPath::ArcSize::kSmall_ArcSize, SkPath::Direction::kCCW_Direction, + arrowPosition_.GetX() + childHalfWidth, + arrowPosition_.GetY() - bubbleSpacing - NormalizeToPx(border_.BottomRightRadius().GetY())); + path_.lineTo(arrowPosition_.GetX() + childHalfWidth, + arrowPosition_.GetY() - bubbleSpacing - (childHeight - NormalizeToPx(border_.TopRightRadius().GetY()))); + path_.arcTo(NormalizeToPx(border_.TopRightRadius().GetX()), NormalizeToPx(border_.TopRightRadius().GetY()), 0.0f, + SkPath::ArcSize::kSmall_ArcSize, SkPath::Direction::kCCW_Direction, + arrowPosition_.GetX() + childHalfWidth - NormalizeToPx(border_.TopRightRadius().GetX()), + arrowPosition_.GetY() - bubbleSpacing - childHeight); + path_.lineTo(arrowPosition_.GetX() - (childHalfWidth - NormalizeToPx(border_.TopLeftRadius().GetX())), + arrowPosition_.GetY() - bubbleSpacing - childHeight); + path_.arcTo(NormalizeToPx(border_.TopLeftRadius().GetX()), NormalizeToPx(border_.TopLeftRadius().GetY()), 0.0f, + SkPath::ArcSize::kSmall_ArcSize, SkPath::Direction::kCCW_Direction, arrowPosition_.GetX() - childHalfWidth, + arrowPosition_.GetY() - bubbleSpacing - (childHeight - NormalizeToPx(border_.TopLeftRadius().GetY()))); + path_.lineTo(arrowPosition_.GetX() - childHalfWidth, + arrowPosition_.GetY() - bubbleSpacing - NormalizeToPx(border_.BottomLeftRadius().GetY())); + path_.arcTo(NormalizeToPx(border_.BottomLeftRadius().GetX()), NormalizeToPx(border_.BottomLeftRadius().GetY()), + 0.0f, SkPath::ArcSize::kSmall_ArcSize, SkPath::Direction::kCCW_Direction, + arrowPosition_.GetX() - (childHalfWidth - NormalizeToPx(border_.BottomLeftRadius().GetX())), + arrowPosition_.GetY() - bubbleSpacing); + path_.lineTo(arrowPosition_.GetX() - NormalizeToPx(BEZIER_HORIZON_OFFSET_FOURTH) + arrowOffset, + arrowPosition_.GetY() - NormalizeToPx(BEZIER_VERTICAL_OFFSET_THIRD)); + path_.quadTo(arrowPosition_.GetX() - NormalizeToPx(BEZIER_HORIZON_OFFSET_THIRD) + arrowOffset, + arrowPosition_.GetY() - NormalizeToPx(BEZIER_VERTICAL_OFFSET_THIRD), + arrowPosition_.GetX() - NormalizeToPx(BEZIER_HORIZON_OFFSET_SECOND) + arrowOffset, + arrowPosition_.GetY() - NormalizeToPx(BEZIER_VERTICAL_OFFSET_SECOND)); + path_.quadTo(arrowPosition_.GetX() - NormalizeToPx(BEZIER_HORIZON_OFFSET_FIRST) + arrowOffset, + arrowPosition_.GetY() + NormalizeToPx(BEZIER_VERTICAL_OFFSET_FIRST), arrowPosition_.GetX() + arrowOffset, + arrowPosition_.GetY()); + path_.close(); + PaintShadow(skCanvas); + skCanvas->drawPath(path_, paint); + skCanvas->clipPath(path_, SkClipOp::kIntersect); +} + +void FlutterRenderBubble::PaintBottomBubble(SkCanvas* skCanvas, SkPaint paint) +{ + if (skCanvas == nullptr) { + return; + } + double childHeight = childSize_.Height(); + double childHalfWidth = childSize_.Width() / 2.0; + double bubbleSpacing = NormalizeToPx(BUBBLE_SPACING); + double arrowOffset = std::clamp(NormalizeToPx(arrowOffset_), + -(childHalfWidth - std::max(NormalizeToPx(padding_.Left()), NormalizeToPx(border_.BottomLeftRadius().GetX())) - + NormalizeToPx(BEZIER_WIDTH_HALF)), + childHalfWidth - std::max(NormalizeToPx(padding_.Right()), NormalizeToPx(border_.BottomRightRadius().GetY())) - + NormalizeToPx(BEZIER_WIDTH_HALF)); + + path_.reset(); + path_.moveTo(arrowPosition_.GetX() + arrowOffset, arrowPosition_.GetY()); + path_.quadTo(arrowPosition_.GetX() + NormalizeToPx(BEZIER_HORIZON_OFFSET_FIRST) + arrowOffset, + arrowPosition_.GetY() - NormalizeToPx(BEZIER_VERTICAL_OFFSET_FIRST), + arrowPosition_.GetX() + NormalizeToPx(BEZIER_HORIZON_OFFSET_SECOND) + arrowOffset, + arrowPosition_.GetY() + NormalizeToPx(BEZIER_VERTICAL_OFFSET_SECOND)); + path_.quadTo(arrowPosition_.GetX() + NormalizeToPx(BEZIER_HORIZON_OFFSET_THIRD) + arrowOffset, + arrowPosition_.GetY() + NormalizeToPx(BEZIER_VERTICAL_OFFSET_THIRD), + arrowPosition_.GetX() + NormalizeToPx(BEZIER_HORIZON_OFFSET_FOURTH) + arrowOffset, + arrowPosition_.GetY() + NormalizeToPx(BEZIER_VERTICAL_OFFSET_THIRD)); + path_.lineTo(arrowPosition_.GetX() + (childHalfWidth - NormalizeToPx(border_.TopRightRadius().GetX())), + arrowPosition_.GetY() + bubbleSpacing); + path_.arcTo(NormalizeToPx(border_.TopRightRadius().GetX()), NormalizeToPx(border_.TopRightRadius().GetY()), 0.0f, + SkPath::ArcSize::kSmall_ArcSize, SkPath::Direction::kCW_Direction, arrowPosition_.GetX() + childHalfWidth, + arrowPosition_.GetY() + bubbleSpacing + NormalizeToPx(border_.TopRightRadius().GetY())); + path_.lineTo(arrowPosition_.GetX() + childHalfWidth, + arrowPosition_.GetY() + bubbleSpacing + childHeight - NormalizeToPx(border_.BottomRightRadius().GetY())); + path_.arcTo(NormalizeToPx(border_.BottomRightRadius().GetX()), NormalizeToPx(border_.BottomRightRadius().GetY()), + 0.0f, SkPath::ArcSize::kSmall_ArcSize, SkPath::Direction::kCW_Direction, + arrowPosition_.GetX() + childHalfWidth - NormalizeToPx(border_.BottomRightRadius().GetX()), + arrowPosition_.GetY() + bubbleSpacing + childHeight); + path_.lineTo(arrowPosition_.GetX() - (childHalfWidth - NormalizeToPx(border_.BottomLeftRadius().GetX())), + arrowPosition_.GetY() + bubbleSpacing + childHeight); + path_.arcTo(NormalizeToPx(border_.BottomLeftRadius().GetX()), NormalizeToPx(border_.BottomLeftRadius().GetY()), + 0.0f, SkPath::ArcSize::kSmall_ArcSize, SkPath::Direction::kCW_Direction, arrowPosition_.GetX() - childHalfWidth, + arrowPosition_.GetY() + bubbleSpacing + childHeight - NormalizeToPx(border_.BottomLeftRadius().GetY())); + path_.lineTo(arrowPosition_.GetX() - childHalfWidth, + arrowPosition_.GetY() + bubbleSpacing + NormalizeToPx(border_.TopLeftRadius().GetY())); + path_.arcTo(NormalizeToPx(border_.TopLeftRadius().GetX()), NormalizeToPx(border_.TopLeftRadius().GetY()), 0.0f, + SkPath::ArcSize::kSmall_ArcSize, SkPath::Direction::kCW_Direction, + arrowPosition_.GetX() - (childHalfWidth - NormalizeToPx(border_.TopLeftRadius().GetX())), + arrowPosition_.GetY() + bubbleSpacing); + path_.lineTo(arrowPosition_.GetX() - NormalizeToPx(BEZIER_HORIZON_OFFSET_FOURTH) + arrowOffset, + arrowPosition_.GetY() + NormalizeToPx(BEZIER_VERTICAL_OFFSET_THIRD)); + path_.quadTo(arrowPosition_.GetX() - NormalizeToPx(BEZIER_HORIZON_OFFSET_THIRD) + arrowOffset, + arrowPosition_.GetY() + NormalizeToPx(BEZIER_VERTICAL_OFFSET_THIRD), + arrowPosition_.GetX() - NormalizeToPx(BEZIER_HORIZON_OFFSET_SECOND) + arrowOffset, + arrowPosition_.GetY() + NormalizeToPx(BEZIER_VERTICAL_OFFSET_SECOND)); + path_.quadTo(arrowPosition_.GetX() - NormalizeToPx(BEZIER_HORIZON_OFFSET_FIRST) + arrowOffset, + arrowPosition_.GetY() - NormalizeToPx(BEZIER_VERTICAL_OFFSET_FIRST), arrowPosition_.GetX() + arrowOffset, + arrowPosition_.GetY()); + path_.close(); + PaintShadow(skCanvas); + skCanvas->drawPath(path_, paint); + skCanvas->clipPath(path_, SkClipOp::kIntersect); +} + +void FlutterRenderBubble::PaintDefaultBubble(SkCanvas* skCanvas, SkPaint paint) +{ + if (skCanvas == nullptr) { + return; + } + rrect_ = MakeRRect(); + PaintShadow(skCanvas); + skCanvas->drawRRect(rrect_, paint); + skCanvas->clipRRect(rrect_, SkClipOp::kIntersect); +} + +void FlutterRenderBubble::PaintShadow(SkCanvas* skCanvas) +{ + if (skCanvas == nullptr) { + LOGE("Paint shadow failed, skCanvas is null."); + return; + } + + if ((arrowPlacement_ == Placement::TOP || arrowPlacement_ == Placement::BOTTOM) && !path_.isEmpty()) { + FlutterDecorationPainter::PaintShadow(path_, ShadowConfig::DefaultShadowM, skCanvas); + } else { + FlutterDecorationPainter::PaintShadow(SkPath().addRRect(rrect_), ShadowConfig::DefaultShadowM, skCanvas); + } +} + +void FlutterRenderBubble::PaintBorder(RenderContext& context) +{ + SkCanvas* skCanvas = GetSkCanvas(context); + if (skCanvas == nullptr) { + return; + } + BorderEdge edge = border_.Left(); + if (!border_.IsAllEqual()) { + edge = border_.GetValidEdge(); + border_ = Border(edge); + } + if (!border_.HasValue()) { + return; + } + double borderWidth = NormalizeToPx(edge.GetWidth()); + SkPaint paint; + paint.setStrokeWidth(borderWidth); + paint.setColor(edge.GetColor().GetValue()); + paint.setStyle(SkPaint::Style::kStroke_Style); + paint.setAntiAlias(true); + if (edge.GetBorderStyle() == BorderStyle::DOTTED) { + SkPath dotPath; + dotPath.addCircle(0.0f, 0.0f, SkDoubleToScalar(borderWidth / 2.0)); + paint.setPathEffect( + SkPath1DPathEffect::Make(dotPath, borderWidth * 2.0, 0.0, SkPath1DPathEffect::kRotate_Style)); + } else if (edge.GetBorderStyle() == BorderStyle::DASHED) { + const float intervals[] = { SkDoubleToScalar(borderWidth), SkDoubleToScalar(borderWidth) }; + paint.setPathEffect(SkDashPathEffect::Make(intervals, SK_ARRAY_COUNT(intervals), 0.0)); + skCanvas->drawPath(path_, paint); + } else { + paint.setPathEffect(nullptr); + } + + skCanvas->save(); + skCanvas->translate( + childOffset_.GetX() + childSize_.Width() / 2.0, childOffset_.GetY() + childSize_.Height() / 2.0); + skCanvas->scale(1.0 - (borderWidth / childSize_.Width()), 1.0 - (borderWidth / childSize_.Height())); + skCanvas->translate( + -(childOffset_.GetX() + childSize_.Width() / 2.0), -(childOffset_.GetY() + childSize_.Height() / 2.0)); + if ((arrowPlacement_ == Placement::TOP || arrowPlacement_ == Placement::BOTTOM) && !path_.isEmpty()) { + skCanvas->drawPath(path_, paint); + } else { + skCanvas->drawRRect(rrect_, paint); + } + skCanvas->restore(); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/bubble/flutter_render_bubble.h b/frameworks/core/components/bubble/flutter_render_bubble.h new file mode 100644 index 00000000..90c85456 --- /dev/null +++ b/frameworks/core/components/bubble/flutter_render_bubble.h @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "flutter/lib/ui/ui_dart_state.h" +#include "third_party/skia/include/core/SkCanvas.h" + +#include "core/components/bubble/render_bubble.h" +#include "core/pipeline/base/flutter_render_context.h" + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BUBBLE_FLUTTER_RENDER_BUBBLE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BUBBLE_FLUTTER_RENDER_BUBBLE_H + +namespace OHOS::Ace { + +class FlutterRenderBubble : public RenderBubble { + DECLARE_ACE_TYPE(FlutterRenderBubble, RenderBubble); + +public: + FlutterRenderBubble() = default; + ~FlutterRenderBubble() override = default; + + void Paint(RenderContext& context, const Offset& offset) override; + +private: + bool hasEventFired_ = false; + SkPath path_; + SkRRect rrect_; + + SkRRect MakeRRect(); + void UpdateBorderRadius() override; + void PaintMask(RenderContext& context); + void PaintBubble(RenderContext& context); + void PaintTopBubble(SkCanvas* skCanvas, SkPaint paint); + void PaintBottomBubble(SkCanvas* skCanvas, SkPaint paint); + void PaintDefaultBubble(SkCanvas* skCanvas, SkPaint paint); + void PaintShadow(SkCanvas* skCanvas); + void PaintBorder(RenderContext& context); + SkCanvas* GetSkCanvas(RenderContext& context); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BUBBLE_FLUTTER_RENDER_BUBBLE_H diff --git a/frameworks/core/components/bubble/render_bubble.cpp b/frameworks/core/components/bubble/render_bubble.cpp new file mode 100644 index 00000000..0f6b428f --- /dev/null +++ b/frameworks/core/components/bubble/render_bubble.cpp @@ -0,0 +1,389 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/bubble/render_bubble.h" + +#include "base/geometry/offset.h" +#include "base/log/event_report.h" +#include "base/utils/string_utils.h" +#include "base/utils/system_properties.h" +#include "core/accessibility/accessibility_utils.h" +#include "core/components/box/box_component.h" +#include "core/components/box/render_box.h" +#include "core/components/bubble/bubble_element.h" +#include "core/components/stack/stack_element.h" +#include "core/event/ace_event_helper.h" +#include "core/pipeline/base/composed_element.h" + +namespace OHOS::Ace { +namespace { + +constexpr Dimension ARROW_WIDTH = 32.0_vp; +constexpr Dimension GRID_MARGIN_PORTRAIT = 48.0_vp; +constexpr Dimension GRID_SPACING = 24.0_vp; +constexpr Dimension GRID_SPACING_TOTAL = 232.0_vp; +constexpr Dimension HORIZON_SPACING_WITH_SCREEN = 6.0_vp; +constexpr int32_t GRID_NUMBER_LANDSCAPE = 8; +constexpr int32_t BUBBLR_GRID_MAX_LANDSCAPE = 6; + +} // namespace + +const Dimension RenderBubble::BUBBLE_SPACING(8.0, DimensionUnit::VP); + +RenderBubble::RenderBubble() +{ + rawDetector_ = AceType::MakeRefPtr(); + rawDetector_->SetOnTouchDown([weak = WeakClaim(this)](const TouchEventInfo& info) { + auto bubble = weak.Upgrade(); + if (bubble) { + bubble->HandleTouch(); + } + }); +} + +void RenderBubble::Update(const RefPtr& component) +{ + const auto bubble = AceType::DynamicCast(component); + if (!bubble) { + LOGE("RenderBubble update with nullptr"); + EventReport::SendRenderException(RenderExcepType::RENDER_COMPONENT_ERR); + return; + } + if (!bubble->GetPopupParam()) { + return; + } + bubbleComponent_ = bubble; + maskColor_ = bubble->GetPopupParam()->GetMaskColor(); + backgroundColor_ = bubble->GetPopupParam()->GetBackgroundColor(); + placement_ = bubble->GetPopupParam()->GetPlacement(); + onVisibilityChange_ = + AceAsyncEvent::Create(bubble->GetPopupParam()->GetOnVisibilityChange(), context_); + isShow_ = bubble->GetPopupParam()->IsShow(); + padding_ = bubble->GetPopupParam()->GetPadding(); + margin_ = bubble->GetPopupParam()->GetMargin(); + border_ = bubble->GetPopupParam()->GetBorder(); + arrowOffset_ = bubble->GetPopupParam()->GetArrowOffset(); + targetId_ = bubble->GetPopupParam()->GetTargetId(); + weakStack_ = bubble->GetWeakStack(); + SetDisableTouchEvent(bubble->IsDisabledStatus()); + SetInterceptTouchEvent(bubbleComponent_->GetPopupParam()->HasAction() || bubble->IsDisabledStatus()); + + // When app is hide and there is no button in popup, pop popup. + auto context = context_.Upgrade(); + if (context) { + context->SetPopupEventHandler([weak = WeakClaim(this)] { + auto bubble = weak.Upgrade(); + if (bubble) { + auto bubbleComponent = bubble->bubbleComponent_; + if (bubbleComponent && !bubbleComponent->GetPopupParam()->HasAction()) { + bubble->PopBubble(); + } + } + }); + } + + MarkNeedLayout(); +} + +void RenderBubble::UpdateAccessibilityInfo(Size size, Offset offset) +{ + if (!bubbleComponent_) { + return; + } + auto context = context_.Upgrade(); + if (!context) { + LOGE("RenderBubble context is null"); + return; + } + auto viewScale = context->GetViewScale(); + if (NearZero(viewScale)) { + LOGE("RenderBubble viewScale is zero."); + return; + } + auto accessibilityManager = context->GetAccessibilityManager(); + if (!accessibilityManager) { + LOGE("RenderBubble accessibilityManager is null"); + return; + } + auto nodeId = StringUtils::StringToInt(bubbleComponent_->GetId()); + auto accessibilityNode = accessibilityManager->GetAccessibilityNodeById(nodeId); + if (!accessibilityNode) { + LOGE("RenderBubble accessibilityNode is null."); + return; + } + accessibilityNode->SetWidth((size.Width()) * viewScale); + accessibilityNode->SetHeight((size.Height()) * viewScale); + accessibilityNode->SetLeft((offset.GetX()) * viewScale); + accessibilityNode->SetTop((offset.GetY()) * viewScale); + accessibilityNode->SetLongClickableState(true); + accessibilityNode->SetClickableState(false); + + accessibilityNode->AddSupportAction(AceAction::ACTION_LONG_CLICK); + accessibilityNode->SetActionLongClickImpl([weakPtr = WeakClaim(this)]() { + const auto& bubble = weakPtr.Upgrade(); + if (bubble) { + bubble->PopBubble(); + } + }); +} + +void RenderBubble::PerformLayout() +{ + InitTargetSizeAndPosition(); + SetLayoutSize(GetLayoutParam().GetMaxSize()); + LayoutParam innerLayout = GetLayoutParam(); + if (SystemProperties::GetDevcieOrientation() == DeviceOrientation::PORTRAIT) { + innerLayout.SetMaxSize(Size( + innerLayout.GetMaxSize().Width() - NormalizeToPx(GRID_MARGIN_PORTRAIT), innerLayout.GetMaxSize().Height())); + } else { + double colWidth = + (innerLayout.GetMaxSize().Width() - NormalizeToPx(GRID_SPACING_TOTAL)) / GRID_NUMBER_LANDSCAPE; + innerLayout.SetMaxSize(Size( + colWidth * BUBBLR_GRID_MAX_LANDSCAPE + NormalizeToPx(GRID_SPACING) * 5, innerLayout.GetMaxSize().Height())); + } + if (!GetChildren().empty()) { + const auto& child = GetChildren().front(); + child->Layout(innerLayout); + childSize_ = child->GetLayoutSize(); + UpdateBorderRadius(); + childOffset_ = GetChildPosition(childSize_); + child->SetPosition(childOffset_); + UpdateAccessibilityInfo(childSize_, childOffset_); + } +} + +void RenderBubble::InitTargetSizeAndPosition() +{ + auto context = context_.Upgrade(); + if (!context) { + return; + } + auto targetElement = context->GetComposedElementById(targetId_); + if (!targetElement) { + return; + } + auto targetRender = targetElement->GetRenderNode(); + if (!targetRender) { + return; + } + targetSize_ = targetRender->GetLayoutSize(); + targetOffset_ = targetRender->GetOffsetToPage(); + if (bubbleComponent_ && bubbleComponent_->GetPopupParam()) { + auto targetMargin = bubbleComponent_->GetPopupParam()->GetTargetMargin(); + targetSize_ -= targetMargin.GetLayoutSizeInPx(context->GetDipScale()); + targetOffset_ += targetMargin.GetOffsetInPx(context->GetDipScale()); + } +} + +Offset RenderBubble::GetChildPosition(const Size& childSize) +{ + double scaledBubbleSpacing = NormalizeToPx(BUBBLE_SPACING); + double arrowWidth = NormalizeToPx(ARROW_WIDTH); + showTopArrow_ = GreatOrEqual( + childSize_.Width() - + std::max(NormalizePercentToPx(padding_.Left(), false), NormalizeToPx(border_.TopLeftRadius().GetX())) - + std::max(NormalizePercentToPx(padding_.Right(), false), NormalizeToPx(border_.TopRightRadius().GetX())), + arrowWidth); + showBottomArrow_ = GreatOrEqual( + childSize_.Width() - + std::max(NormalizePercentToPx(padding_.Left(), false), NormalizeToPx(border_.BottomLeftRadius().GetX())) - + std::max(NormalizePercentToPx(padding_.Right(), false), NormalizeToPx(border_.BottomRightRadius().GetX())), + arrowWidth); + Offset bottomPosition = Offset(targetOffset_.GetX() + (targetSize_.Width() - childSize.Width()) / 2.0, + targetOffset_.GetY() + targetSize_.Height() + scaledBubbleSpacing + NormalizePercentToPx(margin_.Top(), true)); + if (showBottomArrow_) { + bottomPosition += Offset(0.0, scaledBubbleSpacing); + } + Offset topPosition = Offset(targetOffset_.GetX() + (targetSize_.Width() - childSize.Width()) / 2.0, + targetOffset_.GetY() - childSize.Height() - scaledBubbleSpacing - NormalizePercentToPx(margin_.Bottom(), true)); + if (showTopArrow_) { + topPosition += Offset(0.0, -scaledBubbleSpacing); + } + Offset topArrowPosition = Offset(targetOffset_.GetX() + targetSize_.Width() / 2.0, + targetOffset_.GetY() - scaledBubbleSpacing - NormalizePercentToPx(margin_.Bottom(), true)); + Offset bottomArrowPosition = Offset(targetOffset_.GetX() + targetSize_.Width() / 2.0, + targetOffset_.GetY() + targetSize_.Height() + scaledBubbleSpacing + NormalizePercentToPx(margin_.Top(), true)); + Offset originOffset = + GetPositionWithPlacement(childSize, topPosition, bottomPosition, topArrowPosition, bottomArrowPosition); + Offset childPosition = originOffset; + arrowPlacement_ = placement_; + + // Fit popup to screen range. + ErrorPositionType errorType = GetErrorPositionType(childPosition, childSize); + if (errorType == ErrorPositionType::NORMAL) { + return childPosition; + } + // If childPosition is error, adjust bubble to bottom. + if (placement_ != Placement::TOP || errorType == ErrorPositionType::TOP_LEFT_ERROR) { + childPosition = FitToScreen(bottomPosition, childSize); + arrowPosition_ = bottomArrowPosition + (childPosition - bottomPosition); + arrowPlacement_ = Placement::BOTTOM; + if (GetErrorPositionType(childPosition, childSize) == ErrorPositionType::NORMAL) { + return childPosition; + } + } + // If childPosition is error, adjust bubble to top. + childPosition = FitToScreen(topPosition, childSize); + arrowPosition_ = topArrowPosition + (childPosition - topPosition); + arrowPlacement_ = Placement::TOP; + if (GetErrorPositionType(childPosition, childSize) == ErrorPositionType::NORMAL) { + return childPosition; + } + // If childPosition is error, adjust bubble to origin position. + arrowPlacement_ = placement_; + arrowPosition_ = arrowPlacement_ == Placement::TOP ? topArrowPosition : bottomArrowPosition; + return originOffset; +} + +Offset RenderBubble::GetPositionWithPlacement(const Size& childSize, const Offset& topPosition, + const Offset& bottomPosition, const Offset& topArrowPosition, const Offset& bottomArrowPosition) +{ + Offset childPosition; + double bubbleSpacing = NormalizeToPx(BUBBLE_SPACING); + switch (placement_) { + case Placement::LEFT: + childPosition = Offset( + targetOffset_.GetX() - childSize.Width() - bubbleSpacing - NormalizePercentToPx(margin_.Right(), false), + targetOffset_.GetY() + targetSize_.Height() / 2.0 - childSize.Height() / 2.0); + break; + case Placement::RIGHT: + childPosition = Offset(targetOffset_.GetX() + targetSize_.Width() + bubbleSpacing + + NormalizePercentToPx(margin_.Left(), false), + targetOffset_.GetY() + targetSize_.Height() / 2.0 - childSize.Height() / 2.0); + break; + case Placement::TOP: + childPosition = topPosition; + arrowPosition_ = topArrowPosition; + break; + case Placement::BOTTOM: + childPosition = bottomPosition; + arrowPosition_ = bottomArrowPosition; + break; + case Placement::TOP_LEFT: + childPosition = + Offset(targetOffset_.GetX() - childSize.Width() - NormalizePercentToPx(margin_.Right(), false), + targetOffset_.GetY() - childSize.Height() - NormalizePercentToPx(margin_.Bottom(), true)); + break; + case Placement::TOP_RIGHT: + childPosition = + Offset(targetOffset_.GetX() + targetSize_.Width() + NormalizePercentToPx(margin_.Left(), false), + targetOffset_.GetY() - childSize.Height() - NormalizePercentToPx(margin_.Bottom(), true)); + break; + case Placement::BOTTOM_LEFT: + childPosition = + Offset(targetOffset_.GetX() - childSize.Width() - NormalizePercentToPx(margin_.Right(), false), + targetOffset_.GetY() + targetSize_.Height() + NormalizePercentToPx(margin_.Top(), true)); + break; + case Placement::BOTTOM_RIGHT: + childPosition = + Offset(targetOffset_.GetX() + targetSize_.Width() + NormalizePercentToPx(margin_.Left(), false), + targetOffset_.GetY() + targetSize_.Height() + NormalizePercentToPx(margin_.Top(), true)); + break; + default: + break; + } + return childPosition; +} + +Offset RenderBubble::FitToScreen(const Offset& fitPosition, const Size& childSize) +{ + auto validation = GetErrorPositionType(fitPosition, childSize); + if (validation == ErrorPositionType::NORMAL) { + return fitPosition; + } + Offset childPosition = fitPosition; + double horizonSpacing = NormalizeToPx(HORIZON_SPACING_WITH_SCREEN); + if (validation == ErrorPositionType::TOP_LEFT_ERROR) { + childPosition.SetX(horizonSpacing); + } else { + childPosition.SetX(GetLayoutSize().Width() - childSize.Width() - horizonSpacing); + } + return childPosition; +} + +RenderBubble::ErrorPositionType RenderBubble::GetErrorPositionType(const Offset& childOffset, const Size& childSize) +{ + double horizonSpacing = NormalizeToPx(HORIZON_SPACING_WITH_SCREEN); + TouchRegion validRegion = TouchRegion( + Offset(horizonSpacing, 0.0), Offset(GetLayoutSize().Width() - horizonSpacing, GetLayoutSize().Height())); + if (!validRegion.ContainsInRegion(childOffset.GetX(), childOffset.GetY())) { + return ErrorPositionType::TOP_LEFT_ERROR; + } + if (!validRegion.ContainsInRegion( + childOffset.GetX() + childSize.Width(), childOffset.GetY() + childSize.Height())) { + return ErrorPositionType::BOTTOM_RIGHT_ERROR; + } + return ErrorPositionType::NORMAL; +} + +void RenderBubble::OnHiddenChanged(bool hidden) +{ + if (!bubbleComponent_ || !bubbleComponent_->GetPopupParam()) { + return; + } + // When page is hidden and there is no button in popup, pop bubble. + if (hidden && !bubbleComponent_->GetPopupParam()->HasAction()) { + PopBubble(); + } +} + +void RenderBubble::HandleTouch() +{ + if (!bubbleComponent_ || !bubbleComponent_->GetPopupParam()) { + return; + } + if (!bubbleComponent_->GetPopupParam()->HasAction()) { + PopBubble(); + UpdateAccessibilityInfo(Size(), Offset()); + } +} + +void RenderBubble::OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) +{ + rawDetector_->SetCoordinateOffset(coordinateOffset); + result.emplace_back(rawDetector_); +} + +bool RenderBubble::PopBubble() +{ + auto stackElement = weakStack_.Upgrade(); + if (!stackElement) { + return false; + } + stackElement->PopPopup(bubbleComponent_->GetId()); + + auto context = context_.Upgrade(); + if (!context) { + return false; + } +#if !defined(WINDOWS_PLATFORM) and !defined(MAC_PLATFORM) + const auto& accessibilityManager = context->GetAccessibilityManager(); + if (accessibilityManager) { + accessibilityManager->RemoveAccessibilityNodeById(StringUtils::StringToInt(bubbleComponent_->GetId())); + } +#endif + return true; +} + +void RenderBubble::FirePopEvent() +{ + if (onVisibilityChange_) { + std::string param = std::string("\"visibilitychange\",{\"visibility\":").append("false}"); + onVisibilityChange_(param); + } +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/bubble/render_bubble.h b/frameworks/core/components/bubble/render_bubble.h new file mode 100644 index 00000000..8f3b34f8 --- /dev/null +++ b/frameworks/core/components/bubble/render_bubble.h @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/bubble/bubble_component.h" +#include "core/components/common/properties/edge.h" +#include "core/components/slider/render_slider.h" +#include "core/gestures/raw_recognizer.h" +#include "core/pipeline/base/render_node.h" + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BUBBLE_RENDER_BUBBLE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BUBBLE_RENDER_BUBBLE_H + +namespace OHOS::Ace { + +class RenderBubble : public RenderNode { + DECLARE_ACE_TYPE(RenderBubble, RenderNode); + +public: + ~RenderBubble() override = default; + + static RefPtr Create(); + void Update(const RefPtr& component) override; + void PerformLayout() override; + bool PopBubble(); + void FirePopEvent(); + +protected: + enum class ErrorPositionType { + NORMAL = 0, + TOP_LEFT_ERROR, + BOTTOM_RIGHT_ERROR, + }; + + RenderBubble(); + + void OnHiddenChanged(bool hidden) override; + void OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) override; + + virtual void UpdateBorderRadius() {}; + void HandleTouch(); + Offset GetChildPosition(const Size& childSize); + Offset GetPositionWithPlacement(const Size& childSize, const Offset& topPosition, const Offset& bottomPosition, + const Offset& topArrowPosition, const Offset& bottomArrowPosition); + Offset FitToScreen(const Offset& fitPosition, const Size& childSize); + ErrorPositionType GetErrorPositionType(const Offset& childOffset, const Size& childSize); + void UpdateAccessibilityInfo(Size size, Offset offset); + void InitAccessibilityEventListener(); + + static const Dimension BUBBLE_SPACING; + + bool isShow_ = true; + // Is there has enough space for showing arrow. + bool showTopArrow_ = true; + bool showBottomArrow_ = true; + Edge padding_; + Edge margin_; + Border border_; + Size childSize_; + Size targetSize_; + Offset childOffset_; + Offset targetOffset_; + Offset arrowPosition_; + Dimension arrowOffset_; + Color maskColor_; + Color backgroundColor_; + Placement placement_ = Placement::BOTTOM; + Placement arrowPlacement_; + ComposeId targetId_; + std::function onVisibilityChange_; + RefPtr rawDetector_; + RefPtr bubbleComponent_; + WeakPtr weakStack_; + +private: + // Get size and position of target by targetId. + void InitTargetSizeAndPosition(); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BUBBLE_RENDER_BUBBLE_H diff --git a/frameworks/core/components/button/BUILD.gn b/frameworks/core/components/button/BUILD.gn new file mode 100644 index 00000000..7498fd06 --- /dev/null +++ b/frameworks/core/components/button/BUILD.gn @@ -0,0 +1,23 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("button") { + sources = [ + "button_component.cpp", + "button_element.cpp", + "flutter_render_button.cpp", + "render_button.cpp", + ] +} diff --git a/frameworks/core/components/button/button_component.cpp b/frameworks/core/components/button/button_component.cpp new file mode 100644 index 00000000..a80c8427 --- /dev/null +++ b/frameworks/core/components/button/button_component.cpp @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/button/button_component.h" + +#include "core/components/button/button_element.h" +#include "core/components/button/button_theme.h" +#include "core/components/button/render_button.h" +#include "core/components/padding/padding_component.h" +#include "core/components/text/text_component.h" +#include "core/components/theme/theme_manager.h" + +namespace OHOS::Ace { + +ButtonComponent::ButtonComponent(const std::list>& children) : ComponentGroup(children) +{ + buttonController_ = AceType::MakeRefPtr(); +} + +RefPtr ButtonComponent::CreateRenderNode() +{ + return RenderButton::Create(); +} + +RefPtr ButtonComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +RefPtr ButtonBuilder::Build(const RefPtr& themeManager, const std::string& text) +{ + auto buttonTheme = AceType::DynamicCast(themeManager->GetTheme(ButtonTheme::TypeId())); + if (!buttonTheme) { + TextStyle defaultStyle; + return ButtonBuilder::Build(themeManager, text, defaultStyle); + } + TextStyle textStyle = buttonTheme->GetTextStyle(); + textStyle.SetAdaptTextSize(buttonTheme->GetMaxFontSize(), buttonTheme->GetMinFontSize()); + textStyle.SetMaxLines(buttonTheme->GetTextMaxLines()); + textStyle.SetTextOverflow(TextOverflow::ELLIPSIS); + return ButtonBuilder::Build(themeManager, text, textStyle); +} + +RefPtr ButtonBuilder::Build(const RefPtr& themeManager, const std::string& text, + TextStyle& textStyle, const Color& textFocusColor, bool useTextFocus) +{ + auto textComponent = AceType::MakeRefPtr(text); + auto padding = AceType::MakeRefPtr(); + padding->SetChild(textComponent); + std::list> buttonChildren; + buttonChildren.emplace_back(padding); + auto buttonComponent = AceType::MakeRefPtr(buttonChildren); + auto buttonTheme = AceType::DynamicCast(themeManager->GetTheme(ButtonTheme::TypeId())); + if (!buttonTheme) { + return buttonComponent; + } + if (useTextFocus) { + textComponent->SetFocusColor(textFocusColor); + } else { + textComponent->SetFocusColor(buttonTheme->GetTextFocusColor()); + } + textComponent->SetTextStyle(textStyle); + padding->SetPadding(buttonTheme->GetPadding()); + buttonComponent->SetHeight(buttonTheme->GetHeight()); + buttonComponent->SetRectRadius(buttonTheme->GetHeight() / 2.0); + buttonComponent->SetBackgroundColor(buttonTheme->GetBgColor()); + buttonComponent->SetClickedColor(buttonTheme->GetClickedColor()); + buttonComponent->SetFocusColor(buttonTheme->GetBgFocusColor()); + buttonComponent->SetFocusAnimationColor(buttonTheme->GetBgFocusColor()); + return buttonComponent; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/button/button_component.h b/frameworks/core/components/button/button_component.h new file mode 100644 index 00000000..6ef8432c --- /dev/null +++ b/frameworks/core/components/button/button_component.h @@ -0,0 +1,304 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BUTTON_BUTTON_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BUTTON_BUTTON_COMPONENT_H + +#include "base/geometry/dimension.h" +#include "base/utils/label_target.h" +#include "base/utils/macros.h" +#include "core/components/common/layout/constants.h" +#include "core/components/common/properties/border_edge.h" +#include "core/components/common/properties/color.h" +#include "core/pipeline/base/component_group.h" +#include "core/pipeline/base/measurable.h" + +namespace OHOS::Ace { + +// Layout size extend to max which is specified by parent node when rendering. +constexpr int32_t LAYOUT_FLAG_EXTEND_TO_PARENT = 1; + +using ProgressCallback = std::function; + +class ButtonProgressController : public virtual AceType { + DECLARE_ACE_TYPE(ButtonProgressController, AceType); + +public: + void SetProgress(uint32_t progress) + { + if (progressCallback_) { + progressCallback_(progress); + } + } + + void SetProgressCallback(const ProgressCallback& progressCallback) + { + progressCallback_ = progressCallback; + } + +private: + ProgressCallback progressCallback_; +}; + +class ACE_EXPORT ButtonComponent : public ComponentGroup, public LabelTarget, public Measurable { + DECLARE_ACE_TYPE(ButtonComponent, ComponentGroup, LabelTarget, Measurable); + +public: + explicit ButtonComponent(const std::list>& children); + ~ButtonComponent() override = default; + + RefPtr CreateRenderNode() override; + RefPtr CreateElement() override; + + ButtonType GetType() const + { + return type_; + } + + bool GetDisabledState() const + { + return isDisabled_; + } + + bool GetWaitingState() const + { + return isWaiting_; + } + + const Dimension& GetMinWidth() const + { + return minWidth_; + } + + const Dimension& GetRectRadius() const + { + return rrectRadius_; + } + + const Dimension& GetProgressDiameter() const + { + return progressDiameter_; + } + + const Color& GetBackgroundColor() const + { + return backgroundColor_; + } + + const Color& GetClickedColor() const + { + return clickedColor_; + } + + const Color& GetDisabledColor() const + { + return disabledColor_; + } + + const Color& GetFocusColor() const + { + return focusColor_; + } + + const Color& GetHoverColor() const + { + return hoverColor_; + } + + const Color& GetProgressColor() const + { + return progressColor_; + } + + const Color& GetProgressFocusColor() const + { + return progressFocusColor_; + } + + const Color& GetFocusAnimationColor() const + { + return focusAnimationColor_; + } + + const BorderEdge& GetBorderEdge() const + { + return borderEdge_; + } + + const EventMarker& GetClickedEventId() const + { + return clickEventId_; + } + + bool GetAutoFocusState() const + { + return isAutoFocus_; + } + + bool GetFocusable() const + { + return focusable_; + } + + void SetType(ButtonType type) + { + type_ = type; + } + + void SetDisabledState(bool state) + { + isDisabled_ = state; + } + + void SetWaitingState(bool state) + { + isWaiting_ = state; + } + + void SetMinWidth(const Dimension& width) + { + minWidth_ = width; + } + + void SetRectRadius(const Dimension& radius) + { + rrectRadius_ = radius; + } + + void SetProgressDiameter(const Dimension& diameter) + { + progressDiameter_ = diameter; + } + + void SetBackgroundColor(const Color& color) + { + backgroundColor_ = color; + } + + void SetClickedColor(const Color& color) + { + clickedColor_ = color; + } + + void SetDisabledColor(const Color& color) + { + disabledColor_ = color; + } + + void SetFocusColor(const Color& color) + { + focusColor_ = color; + } + + void SetHoverColor(const Color& color) + { + hoverColor_ = color; + } + + void SetProgressColor(const Color& color) + { + progressColor_ = color; + } + + void SetProgressFocusColor(const Color& color) + { + progressFocusColor_ = color; + } + + void SetFocusAnimationColor(const Color& color) + { + focusAnimationColor_ = color; + } + + void SetBorderEdge(const BorderEdge& borderEdge) + { + borderEdge_ = borderEdge; + } + + void SetClickedEventId(const EventMarker& eventId) + { + clickEventId_ = eventId; + } + + void SetAutoFocusState(bool isAutoFocus) + { + isAutoFocus_ = isAutoFocus; + } + + void SetFocusable(bool focusable) + { + focusable_ = focusable; + } + + RefPtr GetButtonController() const + { + return buttonController_; + } + + uint32_t GetLayoutFlag() const + { + return layoutFlag_; + } + + void SetLayoutFlag(uint32_t flag) + { + layoutFlag_ = flag; + } + + bool IsInnerBorder() const + { + return isInnerBorder_; + } + + void SetIsInnerBorder(bool isInnerBorder) + { + isInnerBorder_ = isInnerBorder; + } + +private: + ButtonType type_ { ButtonType::NORMAL }; + Color backgroundColor_; + Color clickedColor_; + Color disabledColor_; + Color focusColor_ = Color::WHITE; + Color focusAnimationColor_ = Color::WHITE; + Color hoverColor_; + Color progressColor_; + Color progressFocusColor_; + BorderEdge borderEdge_ { Color(0xff000000), Dimension(), BorderStyle::NONE }; + EventMarker clickEventId_; + + bool isInnerBorder_ = false; + bool isDisabled_ = false; + bool isWaiting_ = false; + bool isAutoFocus_ = false; + bool focusable_ = true; + Dimension minWidth_; + Dimension rrectRadius_; + Dimension progressDiameter_; + RefPtr buttonController_; + uint32_t layoutFlag_ = 0; +}; + +class ButtonBuilder { +public: + static RefPtr Build(const RefPtr& themeManager, const std::string& text); + static RefPtr Build(const RefPtr& themeManager, const std::string& text, + TextStyle& textStyle, const Color& textFocusColor = Color(), bool useTextFocus = false); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BUTTON_BUTTON_COMPONENT_H diff --git a/frameworks/core/components/button/button_element.cpp b/frameworks/core/components/button/button_element.cpp new file mode 100644 index 00000000..dc7ccc03 --- /dev/null +++ b/frameworks/core/components/button/button_element.cpp @@ -0,0 +1,128 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/button/button_element.h" + +namespace OHOS::Ace { + +RefPtr ButtonElement::CreateRenderNode() +{ + RefPtr node = ComponentGroupElement::CreateRenderNode(); + if (node) { + auto wp = AceType::WeakClaim(this); + node->SetOnChangeCallback([wp]() { + auto button = wp.Upgrade(); + if (button) { + button->OnChange(); + } + }); + } + return node; +} + +void ButtonElement::Update() +{ + RenderElement::Update(); + + button_ = AceType::DynamicCast(renderNode_); + auto buttonComponent = AceType::DynamicCast(component_); + if (buttonComponent) { + SetFocusable(!buttonComponent->GetDisabledState() && buttonComponent->GetFocusable()); + } + + auto labelTarget = AceType::DynamicCast(component_); + if (!labelTarget) { + // switch is not label target, button are label target + LOGW("not find label target"); + return; + } + auto trigger = labelTarget->GetTrigger(); + if (!trigger) { + // component not set label trigger + LOGW("get label trigger failed"); + return; + } + + auto weak = AceType::WeakClaim(this); + trigger->clickHandler_ = [weak]() { + auto button = weak.Upgrade(); + if (button) { + button->OnClick(); + } + }; +} + +void ButtonElement::Apply(const RefPtr& child) +{ + RenderElement::Apply(child); + auto buttonComponent = AceType::DynamicCast(component_); + if (!buttonComponent) { + return; + } + if (buttonComponent->GetAutoFocusState()) { + auto wp = AceType::WeakClaim(this); + auto buttonElement = wp.Upgrade(); + if (!buttonElement) { + return; + } + + buttonElement->RequestFocus(); + } +} + +void ButtonElement::OnFocus() +{ + if (!button_) { + return; + } + button_->HandleFocusEvent(true); + button_->PlayFocusAnimation(true); + button_->ChangeStatus(RenderStatus::FOCUS); +} + +void ButtonElement::OnClick() +{ + if (!button_) { + return; + } + button_->HandleClickEvent(); +} + +void ButtonElement::OnBlur() +{ + if (!button_) { + return; + } + button_->HandleFocusEvent(false); + button_->PlayFocusAnimation(false); + button_->ChangeStatus(RenderStatus::BLUR); + auto context = context_.Upgrade(); + if (!context) { + LOGE("Pipeline context is nullptr"); + return; + } + context->CancelFocusAnimation(); + context->CancelShadow(); +} + +void ButtonElement::OnChange() +{ + if (button_ && IsCurrentFocus()) { + LOGD("Button OnChange: %{private}p", AceType::RawPtr(button_)); + button_->DisplayFocusAnimation(); + } +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/button/button_element.h b/frameworks/core/components/button/button_element.h new file mode 100644 index 00000000..912ab5eb --- /dev/null +++ b/frameworks/core/components/button/button_element.h @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BUTTON_BUTTON_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BUTTON_BUTTON_ELEMENT_H + +#include "core/components/button/button_component.h" +#include "core/components/button/render_button.h" +#include "core/focus/focus_node.h" +#include "core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +class ButtonElement : public ComponentGroupElement, public FocusNode { + DECLARE_ACE_TYPE(ButtonElement, ComponentGroupElement, FocusNode); + +public: + ButtonElement() = default; + ~ButtonElement() override = default; + + void Apply(const RefPtr& child) override; + void Update() override; + +private: + void OnFocus() override; + void OnClick() override; + void OnBlur() override; + RefPtr CreateRenderNode() override; + + void OnChange(); + + RefPtr button_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BUTTON_BUTTON_ELEMENT_H diff --git a/frameworks/core/components/button/button_theme.h b/frameworks/core/components/button/button_theme.h new file mode 100644 index 00000000..f54e4522 --- /dev/null +++ b/frameworks/core/components/button/button_theme.h @@ -0,0 +1,351 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BUTTON_BUTTON_THEME_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BUTTON_BUTTON_THEME_H + +#include "core/components/common/properties/color.h" +#include "core/components/common/properties/text_style.h" +#include "core/components/theme/theme.h" +#include "core/components/theme/theme_constants.h" + +namespace OHOS::Ace { + +/** + * ButtonTheme defines color and styles of ButtonComponent. ButtonTheme should be built + * using ButtonTheme::Builder. + */ +class ButtonTheme : public virtual Theme { + DECLARE_ACE_TYPE(ButtonTheme, Theme); + +public: + class Builder { + public: + Builder() = default; + ~Builder() = default; + + RefPtr Build(const RefPtr& themeConstants) const + { + RefPtr theme = AceType::Claim(new ButtonTheme()); + if (!themeConstants) { + return theme; + } + theme->radius_ = themeConstants->GetDimension(THEME_BUTTON_RADIUS); + theme->bgColor_ = themeConstants->GetColor(THEME_BUTTON_BACKGROUND_COLOR); + theme->bgFocusColor_ = themeConstants->GetColor(THEME_BUTTON_FOCUS_COLOR); + theme->clickedColor_ = themeConstants->GetColor(THEME_BUTTON_CLICKED_COLOR); + theme->disabledColor_ = themeConstants->GetColor(THEME_BUTTON_DISABLED_COLOR); + theme->bgDisabledAlpha_ = themeConstants->GetDouble(THEME_BUTTON_DISABLED_ALPHA); + theme->hoverColor_ = themeConstants->GetColor(THEME_BUTTON_HOVER_COLOR); + theme->borderColor_ = themeConstants->GetColor(THEME_BUTTON_BORDER_COLOR); + theme->borderWidth_ = themeConstants->GetDimension(THEME_BUTTON_BORDER_WIDTH); + theme->textFocusColor_ = themeConstants->GetColor(THEME_BUTTON_TEXT_FOCUS_COLOR); + theme->textDisabledColor_ = themeConstants->GetColor(THEME_BUTTON_TEXT_DISABLED_COLOR); + theme->textWaitingColor_ = themeConstants->GetColor(THEME_BUTTON_TEXT_WAITING_COLOR); + theme->textStyle_.SetTextColor(themeConstants->GetColor(THEME_BUTTON_TEXT_COLOR)); + theme->textStyle_.SetFontSize(themeConstants->GetDimension(THEME_BUTTON_TEXT_FONTSIZE)); + theme->textStyle_.SetFontWeight(FontWeight(themeConstants->GetInt(THEME_BUTTON_TEXT_FONTWEIGHT))); + theme->minWidth_ = themeConstants->GetDimension(THEME_BUTTON_MIN_WIDTH); + theme->height_ = themeConstants->GetDimension(THEME_BUTTON_HEIGHT); + theme->downloadHeight_ = themeConstants->GetDimension(THEME_BUTTON_DOWNLOAD_HEIGHT); + theme->padding_ = Edge(themeConstants->GetDimension(THEME_BUTTON_PADDING_HORIZONTAL).Value(), + themeConstants->GetDimension(THEME_BUTTON_PADDING_VERTICAL).Value(), + themeConstants->GetDimension(THEME_BUTTON_PADDING_HORIZONTAL).Value(), + themeConstants->GetDimension(THEME_BUTTON_PADDING_VERTICAL).Value(), + themeConstants->GetDimension(THEME_BUTTON_PADDING_VERTICAL).Unit()); + theme->minFontSize_ = themeConstants->GetDimension(THEME_BUTTON_TEXT_FONTSIZE_MIN); + int32_t maxlines = themeConstants->GetInt(THEME_BUTTON_TEXT_MAX_LINES); + theme->textMaxLines_ = maxlines < 0 ? theme->textMaxLines_ : static_cast(maxlines); + theme->minCircleButtonDiameter_ = themeConstants->GetDimension(THEME_BUTTON_CIRCLE_MIN_DIAMETER); + theme->minCircleButtonIcon_ = themeConstants->GetDimension(THEME_BUTTON_CIRCLE_MIN_ICON_SIZE); + theme->minCircleButtonPadding_ = Edge(themeConstants->GetDimension(THEME_BUTTON_CIRCLE_MIN_PADDING)); + theme->maxCircleButtonDiameter_ = themeConstants->GetDimension(THEME_BUTTON_CIRCLE_MAX_DIAMETER); + theme->maxCircleButtonIcon_ = themeConstants->GetDimension(THEME_BUTTON_CIRCLE_MAX_ICON_SIZE); + theme->maxCircleButtonPadding_ = Edge(themeConstants->GetDimension(THEME_BUTTON_CIRCLE_MAX_PADDING)); + theme->progressFocusColor_ = themeConstants->GetColor(THEME_BUTTON_PROGRESS_FOCUS_COLOR); + theme->downloadBorderColor_ = themeConstants->GetColor(THEME_BUTTON_DOWNLOAD_BORDER_COLOR); + theme->normalTextColor_ = themeConstants->GetColor(THEME_BUTTON_NORMAL_TEXT_COLOR); + theme->downloadBackgroundColor_ = themeConstants->GetColor(THEME_BUTTON_DOWNLOAD_BG_COLOR); + theme->downloadTextColor_ = themeConstants->GetColor(THEME_BUTTON_DOWNLOAD_TEXT_COLOR); + theme->downloadFontSize_ = themeConstants->GetDimension(THEME_BUTTON_DOWNLOAD_TEXT_FONTSIZE); + theme->progressColor_ = themeConstants->GetColor(THEME_BUTTON_PROGRESS_COLOR); + theme->progressDiameter_ = themeConstants->GetDimension(THEME_BUTTON_PROGRESS_DIAMETER); + theme->downloadProgressColor_ = themeConstants->GetColor(THEME_BUTTON_DOWNLOAD_PROGRESS_COLOR); + theme->innerPadding_ = themeConstants->GetDimension(THEME_BUTTON_INNER_PADDING); + ParsePattern(themeConstants->GetThemeStyle(), theme); + return theme; + } + + private: + void ParsePattern(const RefPtr& themeStyle, const RefPtr& theme) const + { + if (!themeStyle) { + return; + } + auto buttonPattern = themeStyle->GetAttr>(THEME_PATTERN_BUTTON, nullptr); + if (!buttonPattern) { + return; + } + theme->bgColor_ = buttonPattern->GetAttr(PATTERN_BG_COLOR, Color()); + theme->clickedColor_ = buttonPattern->GetAttr(BUTTON_CLICK_BLEND_COLOR, Color()); + theme->disabledColor_ = buttonPattern->GetAttr(PATTERN_BG_COLOR, Color()) + .BlendOpacity(themeStyle->GetAttr(THEME_ATTR_DISABLED_ALPHA, 0.0)); + theme->hoverColor_ = themeStyle->GetAttr(BUTTON_HOVER_COLOR, Color()); + theme->borderColor_ = buttonPattern->GetAttr(BUTTON_BORDER_COLOR, Color()); + theme->borderWidth_ = buttonPattern->GetAttr(BUTTON_BORDER_WIDTH, 0.0_vp); + theme->textStyle_.SetTextColor(buttonPattern->GetAttr(BUTTON_TEXT_COLOR, Color())); + theme->textDisabledColor_ = buttonPattern->GetAttr(BUTTON_TEXT_COLOR, Color()) + .BlendOpacity(themeStyle->GetAttr(THEME_ATTR_DISABLED_ALPHA, 0.0)); + theme->textWaitingColor_ = buttonPattern->GetAttr(BUTTON_TEXT_COLOR, Color()); + theme->normalTextColor_ = buttonPattern->GetAttr(BUTTON_NORMAL_TEXT_COLOR, Color()); + theme->downloadBackgroundColor_ = themeStyle->GetAttr(BUTTON_DOWNLOAD_BG_COLOR, Color()) + .BlendOpacity(themeStyle->GetAttr(THEME_ATTR_FOURTH_CONTENT_ALPHA, 0.0)); + theme->downloadBorderColor_ = buttonPattern->GetAttr(BUTTON_DOWNLOAD_BORDER_COLOR, Color()) + .BlendOpacity(themeStyle->GetAttr(THEME_ATTR_HIGHLIGHT_BACKGROUND_ALPHA, 0.0)); + theme->downloadProgressColor_ = buttonPattern->GetAttr(BUTTON_DOWNLOAD_BORDER_COLOR, Color()) + .BlendOpacity(themeStyle->GetAttr(THEME_ATTR_HIGHLIGHT_BACKGROUND_ALPHA, 0.0)); + theme->downloadTextColor_ = buttonPattern->GetAttr(BUTTON_DOWNLOAD_TEXT_COLOR, Color()); + theme->progressColor_ = buttonPattern->GetAttr(BUTTON_TEXT_COLOR, Color()); + } + }; + + ~ButtonTheme() override = default; + + const Dimension& GetRadius() const + { + return radius_; + } + + const Color& GetBgColor() const + { + return bgColor_; + } + + const Color& GetBgFocusColor() const + { + return bgFocusColor_; + } + + const Color& GetClickedColor() const + { + return clickedColor_; + } + + const Color& GetDisabledColor() const + { + return disabledColor_; + } + + const Color& GetHoverColor() const + { + return hoverColor_; + } + + const Color& GetBorderColor() const + { + return borderColor_; + } + + const Dimension& GetBorderWidth() const + { + return borderWidth_; + } + + double GetBgDisabledAlpha() const + { + return bgDisabledAlpha_; + } + + const Color& GetTextFocusColor() const + { + return textFocusColor_; + } + + const Color& GetTextDisabledColor() const + { + return textDisabledColor_; + } + + const Color& GetNormalTextColor() const + { + return normalTextColor_; + } + + const Color& GetDownloadBackgroundColor() const + { + return downloadBackgroundColor_; + } + + const Color& GetDownloadTextColor() const + { + return downloadTextColor_; + } + + const Color& GetTextWaitingColor() const + { + return textWaitingColor_; + } + + const TextStyle& GetTextStyle() const + { + return textStyle_; + } + + const Dimension& GetMinWidth() const + { + return minWidth_; + } + + const Dimension& GetHeight() const + { + return height_; + } + + const Dimension& GetDownloadHeight() const + { + return downloadHeight_; + } + + const Edge& GetPadding() const + { + return padding_; + } + + const Dimension& GetMinFontSize() const + { + return minFontSize_; + } + + const Dimension& GetDownloadFontSize() const + { + return downloadFontSize_; + } + + const Dimension& GetMaxFontSize() const + { + return textStyle_.GetFontSize(); + } + + uint32_t GetTextMaxLines() const + { + return textMaxLines_; + } + + const Dimension& GetMinCircleButtonDiameter() const + { + return minCircleButtonDiameter_; + } + + const Dimension& GetMinCircleButtonIcon() const + { + return minCircleButtonIcon_; + } + + const Edge& GetMinCircleButtonPadding() const + { + return minCircleButtonPadding_; + } + + const Dimension& GetMaxCircleButtonDiameter() const + { + return maxCircleButtonDiameter_; + } + + const Dimension& GetMaxCircleButtonIcon() const + { + return maxCircleButtonIcon_; + } + + const Edge& GetMaxCircleButtonPadding() const + { + return maxCircleButtonPadding_; + } + + const Color& GetProgressFocusColor() const + { + return progressFocusColor_; + } + + const Color& GetDownloadBorderColor() const + { + return downloadBorderColor_; + } + + const Color& GetProgressColor() const + { + return progressColor_; + } + + const Dimension& GetProgressDiameter() const + { + return progressDiameter_; + } + + const Color& GetDownloadProgressColor() const + { + return downloadProgressColor_; + } + + const Dimension& GetInnerPadding() const + { + return innerPadding_; + } + +protected: + ButtonTheme() = default; + +private: + Color bgColor_; + Color bgFocusColor_; + Color clickedColor_; + Color disabledColor_; + Color hoverColor_; + Color borderColor_; + Color textFocusColor_; + Color textDisabledColor_; + Color textWaitingColor_; + Color progressColor_; + Color progressFocusColor_; + Color normalTextColor_; + Color downloadBackgroundColor_; + Color downloadTextColor_; + Color downloadBorderColor_; + Color downloadProgressColor_; + TextStyle textStyle_; + Edge padding_; + Edge minCircleButtonPadding_; + Edge maxCircleButtonPadding_; + + Dimension radius_; + Dimension minWidth_; + Dimension height_; + Dimension progressDiameter_; + Dimension innerPadding_; + Dimension minFontSize_; + Dimension downloadFontSize_; + Dimension minCircleButtonDiameter_; + Dimension minCircleButtonIcon_; + Dimension maxCircleButtonDiameter_; + Dimension maxCircleButtonIcon_; + Dimension borderWidth_; + Dimension downloadHeight_; + + double bgDisabledAlpha_ = 1.0; + uint32_t textMaxLines_ = 1; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BUTTON_BUTTON_THEME_H diff --git a/frameworks/core/components/button/flutter_render_button.cpp b/frameworks/core/components/button/flutter_render_button.cpp new file mode 100644 index 00000000..b01a3d8e --- /dev/null +++ b/frameworks/core/components/button/flutter_render_button.cpp @@ -0,0 +1,397 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/button/flutter_render_button.h" + +#include "third_party/skia/include/core/SkMaskFilter.h" + +#include "core/components/box/render_box.h" +#include "core/components/transform/flutter_render_transform.h" +#include "core/pipeline/base/flutter_render_context.h" + +namespace OHOS::Ace { +namespace { + +// Definition for arc button of watch which intersected by circle and ellipse. +constexpr Dimension CIRCLE_DIAMETER = 233.0_vp; +constexpr Dimension OVAL_WIDTH = 260.0_vp; +constexpr Dimension OVAL_HEIGHT = 98.0_vp; +constexpr Dimension OFFSET_X = (OVAL_WIDTH - ARC_BUTTON_WIDTH) / 2.0; +constexpr Dimension OFFSET_Y = CIRCLE_DIAMETER - ARC_BUTTON_HEIGHT; +constexpr double CIRCLE_START_ANGLE = 0.759; +constexpr double CIRCLE_SWEEP_ANGLE = M_PI - CIRCLE_START_ANGLE * 2; +constexpr double OVAL_START_ANGLE = 4.0; +constexpr double OVAL_SWEEP_ANGLE = M_PI * 3 - OVAL_START_ANGLE * 2; + +// Definition for download button in watch +constexpr Dimension CIRCLE_PROGRESS_THICKNESS = 2.0_vp; +constexpr Dimension WATCH_DOWNLOAD_SIZE_DELTA = 8.0_vp; +constexpr double PROGRESS_START_ANGLE = 1.5 * M_PI; + +// Definition for animation +constexpr uint8_t DEFAULT_OPACITY = 255; + +} // namespace + +RefPtr RenderButton::Create() +{ + return AceType::MakeRefPtr(); +} + +RenderLayer FlutterRenderButton::GetRenderLayer() +{ + if (!transformLayer_) { + transformLayer_ = AceType::MakeRefPtr(Matrix4::CreateIdentity(), 0.0, 0.0); + } + return AceType::RawPtr(transformLayer_); +} + +void FlutterRenderButton::OnGlobalPositionChanged() +{ + UpdateLayer(); +} + +void FlutterRenderButton::UpdateLayer() +{ + float translateX = GetLayoutSize().Width() / 2 * (INIT_SCALE - scale_); + // The bottom of the component must be close to the bottom of the circle when the type is arc. + // The center point deviates 2 times downward. + float translateY = (type_ == ButtonType::ARC) ? GetLayoutSize().Height() * (INIT_SCALE - scale_) * 2 + : GetLayoutSize().Height() / 2 * (1.0 - scale_); + Matrix4 translateMatrix = Matrix4::CreateTranslate(translateX, translateY, 0.0); + Matrix4 scaleMatrix = Matrix4::CreateScale(scale_, scale_, 1.0); + Matrix4 transformMatrix = translateMatrix * scaleMatrix; + auto offset = GetGlobalOffset(); + transformMatrix = FlutterRenderTransform::GetTransformByOffset(transformMatrix, offset); + if (transformLayer_) { + transformLayer_->Update(transformMatrix); + } + if (opacityLayer_) { + opacityLayer_->SetOpacity(DEFAULT_OPACITY * opacity_, 0.0, 0.0); + } +} + +void FlutterRenderButton::Paint(RenderContext& context, const Offset& offset) +{ + LOGD("Paint button type : %{public}d", type_); + if (isHover_) { + UpdateLayer(); + isHover_ = false; + } + PaintButtonAnimation(); + flutter::Canvas* canvas = static_cast(context).GetCanvas(); + if (canvas == nullptr) { + LOGE("Paint canvas is null"); + return; + } + if (type_ == ButtonType::ICON) { + RenderNode::Paint(context, offset); + return; + } + DrawButton(*canvas, offset); + RenderNode::Paint(context, offset); +} + +void FlutterRenderButton::PaintButtonAnimation() +{ + if (!animationRunning_) { + return; + } + if (!opacityLayer_ && transformLayer_) { + opacityLayer_ = AceType::MakeRefPtr(DEFAULT_OPACITY, 0.0, 0.0); + transformLayer_->AddChildren(opacityLayer_); + } + UpdateLayer(); + if (isLastFrame_) { + animationRunning_ = false; + isOpacityAnimation_ = false; + isLastFrame_ = false; + isTouchAnimation_ = false; + } +} + +Size FlutterRenderButton::Measure() +{ + // Layout size need includes border width, the border width is half outside of button, + // total width and height needs to add border width defined by user. + widthDelta_ = NormalizeToPx(borderEdge_.GetWidth()); + double delta = widthDelta_ / 2; + offsetDelta_ = Offset(delta, delta); + if (type_ == ButtonType::ARC) { + return buttonSize_ + Size(widthDelta_, widthDelta_); + } + if (NeedLayoutExtendToParant()) { + buttonSize_ = GetLayoutParam().GetMaxSize(); + } + MeasureButtonSize(); + return buttonSize_ + Size(widthDelta_, widthDelta_); +} + +void FlutterRenderButton::MeasureButtonSize() +{ + if (type_ == ButtonType::ICON) { + return; + } + if (NearEqual(GetLayoutParam().GetMaxSize().Width(), Size::INFINITE_SIZE) || (!widthDefined_)) { + buttonSize_.SetWidth(0.0); + } + if (type_ == ButtonType::CAPSULE) { + MeasureCapsule(); + return; + } + if (type_ == ButtonType::CIRCLE) { + MeasureCircle(); + return; + } + if (isWatch_ && (type_ == ButtonType::DOWNLOAD)) { + if (!NearEqual(rrectRadius_, NormalizeToPx(defaultRadius_)) || widthDefined_ || heightDefined_) { + MeasureCircle(); + progressDiameter_ = rrectRadius_ * 2 - NormalizeToPx(WATCH_DOWNLOAD_SIZE_DELTA); + } else { + buttonSize_ = Size(progressDiameter_ + NormalizeToPx(WATCH_DOWNLOAD_SIZE_DELTA), + progressDiameter_ + NormalizeToPx(WATCH_DOWNLOAD_SIZE_DELTA)); + } + } +} + +void FlutterRenderButton::MeasureCapsule() +{ + if (GreatOrEqual(rrectRadius_, buttonSize_.Height() / 2.0)) { + return; + } + rrectRadius_ = buttonSize_.Height() / 2.0; + ResetBoxRadius(); +} + +void FlutterRenderButton::MeasureCircle() +{ + if (NearEqual(rrectRadius_, NormalizeToPx(defaultRadius_))) { + if ((widthDefined_) || (heightDefined_)) { + double min = std::min(GetLayoutParam().GetMaxSize().Width(), GetLayoutParam().GetMaxSize().Height()); + rrectRadius_ = (min - widthDelta_) / 2.0; + } + } else { + auto constrainedSize = + GetLayoutParam().Constrain(Size(rrectRadius_ * 2.0 + widthDelta_, rrectRadius_ * 2.0 + widthDelta_)); + rrectRadius_ = (std::min(constrainedSize.Width(), constrainedSize.Height()) - widthDelta_) / 2.0; + } + buttonSize_.SetWidth(rrectRadius_ * 2.0); + buttonSize_.SetHeight(rrectRadius_ * 2.0); + ResetBoxRadius(); +} + +void FlutterRenderButton::ResetBoxRadius() +{ + auto parent = GetParent().Upgrade(); + if (!parent) { + return; + } + auto box = AceType::DynamicCast(parent); + if (box) { + auto backDecoration = box->GetBackDecoration(); + if (backDecoration) { + auto border = backDecoration->GetBorder(); + backDecoration->SetBorderRadius(Radius(rrectRadius_ + NormalizeToPx(border.Top().GetWidth()))); + } + } +} + +void FlutterRenderButton::DrawShape(flutter::Canvas& canvas, const Offset& offset, bool isStroke) +{ + flutter::Paint paint; + if (isStroke) { + paint.paint()->setColor(needFocusColor_ ? focusColor_.GetValue() : borderEdge_.GetColor().GetValue()); + paint.paint()->setStyle(SkPaint::Style::kStroke_Style); + paint.paint()->setStrokeWidth(NormalizeToPx(borderEdge_.GetWidth())); + } else { + paint.paint()->setColor(GetStateColor()); + paint.paint()->setStyle(SkPaint::Style::kFill_Style); + } + paint.paint()->setAntiAlias(true); + flutter::RRect rRect; + flutter::PaintData paintData; + rRect.sk_rrect.setRectXY(SkRect::MakeIWH(buttonSize_.Width(), buttonSize_.Height()), rrectRadius_, rrectRadius_); + rRect.sk_rrect.offset(offset.GetX(), offset.GetY()); + canvas.drawRRect(rRect, paint, paintData); +} + +void FlutterRenderButton::DrawArc(flutter::Canvas& canvas, const Offset& offset) +{ + canvas.save(); + canvas.translate(offset.GetX() - NormalizeToPx(OFFSET_X), offset.GetY() - NormalizeToPx(OFFSET_Y)); + double offsetDelta = NormalizeToPx((OVAL_WIDTH - CIRCLE_DIAMETER)) / 2; + auto arcPath = flutter::CanvasPath::Create(); + arcPath->addArc(0, NormalizeToPx(OFFSET_Y), NormalizeToPx(OVAL_WIDTH), NormalizeToPx(OVAL_HEIGHT + OFFSET_Y), + OVAL_START_ANGLE, OVAL_SWEEP_ANGLE); + arcPath->addArc(offsetDelta, 0, NormalizeToPx(CIRCLE_DIAMETER) + offsetDelta, NormalizeToPx(CIRCLE_DIAMETER), + CIRCLE_START_ANGLE, CIRCLE_SWEEP_ANGLE); + flutter::Paint paint; + flutter::PaintData paintData; + paint.paint()->setColor(GetStateColor()); + paint.paint()->setStyle(SkPaint::Style::kFill_Style); + paint.paint()->setAntiAlias(true); + canvas.drawPath(arcPath.get(), paint, paintData); + canvas.restore(); +} + +void FlutterRenderButton::DrawLineProgress(flutter::Canvas& canvas, const Offset& offset) +{ + flutter::Paint paint; + paint.paint()->setColor(needFocusColor_ ? progressFocusColor_.GetValue() : progressColor_.GetValue()); + paint.paint()->setStyle(SkPaint::Style::kFill_Style); + paint.paint()->setAntiAlias(true); + flutter::RRect rRect; + rRect.sk_rrect.setRectXY(SkRect::MakeIWH(buttonSize_.Width(), buttonSize_.Height()), rrectRadius_, rrectRadius_); + rRect.sk_rrect.offset(offset.GetX(), offset.GetY()); + flutter::PaintData paintData; + canvas.save(); + canvas.clipRRect(rRect, true); + canvas.drawRect(offset.GetX(), offset.GetY(), progressWidth_ + offset.GetX(), buttonSize_.Height() + offset.GetY(), + paint, paintData); + canvas.restore(); +} + +void FlutterRenderButton::DrawLineProgressAnimation(flutter::Canvas& canvas, const Offset& offset) +{ + double offsetX = offset.GetX(); + double offsetY = offset.GetY(); + double radius = buttonSize_.Height() / 2.0; + auto path = flutter::CanvasPath::Create(); + path->addArc(offsetX, offsetY, buttonSize_.Height() + offsetX, buttonSize_.Height() + offsetY, M_PI * 0.5, M_PI); + if (LessNotEqual(progressWidth_, radius)) { + path->addArc(progressWidth_ + offsetX, offsetY, buttonSize_.Height() - progressWidth_ + offsetX, + buttonSize_.Height() + offsetY, M_PI * 1.5, -M_PI); + } else if (GreatNotEqual(progressWidth_, buttonSize_.Width() - radius)) { + path->addRect(radius + offsetX, offsetY, buttonSize_.Width() - radius + offsetX, + buttonSize_.Height() + offsetY); + path->addArc((buttonSize_.Width() - radius) * 2.0 - progressWidth_ + offsetX, offsetY, + progressWidth_ + offsetX, buttonSize_.Height() + offsetY, M_PI * 1.5, M_PI); + } else { + path->addRect(radius + offsetX, offsetY, progressWidth_ + offsetX, buttonSize_.Height() + offsetY); + } + flutter::Paint paint; + paint.paint()->setColor(progressColor_.GetValue()); + paint.paint()->setStyle(SkPaint::Style::kFill_Style); + paint.paint()->setAntiAlias(true); + flutter::PaintData paintData; + canvas.drawPath(path.get(), paint, paintData); +} + +void FlutterRenderButton::DrawCircleProgress(flutter::Canvas& canvas, const Offset& offset) +{ + flutter::Paint paint; + flutter::PaintData paintData; + paint.paint()->setAntiAlias(true); + paint.paint()->setColor(progressColor_.GetValue()); + paint.paint()->setStyle(SkPaint::Style::kStroke_Style); + paint.paint()->setStrokeWidth(NormalizeToPx(CIRCLE_PROGRESS_THICKNESS)); + paint.paint()->setStrokeCap(SkPaint::kRound_Cap); + canvas.drawArc(offset.GetX(), offset.GetY(), progressDiameter_ + offset.GetX(), progressDiameter_ + offset.GetY(), + PROGRESS_START_ANGLE, 2 * M_PI * progressPercent_, false, paint, paintData); +} + +void FlutterRenderButton::DrawDownloadButton(flutter::Canvas& canvas, const Offset& offset) +{ + if (isWatch_) { + flutter::Paint paint; + flutter::PaintData paintData; + paint.paint()->setAntiAlias(true); + paint.paint()->setStyle(SkPaint::Style::kFill_Style); + canvas.save(); + paint.paint()->setColor(GetStateColor()); + canvas.drawCircle(offset.GetX() + buttonSize_.Width() / 2, offset.GetY() + buttonSize_.Height() / 2, + (progressDiameter_ + NormalizeToPx(WATCH_DOWNLOAD_SIZE_DELTA)) / 2, paint, paintData); + canvas.restore(); + if (progressDisplay_) { + DrawCircleProgress(canvas, offset + Offset((buttonSize_.Width() - progressDiameter_) / 2, + (buttonSize_.Height() - progressDiameter_) / 2)); + } + return; + } + + DrawShape(canvas, offset); + if (isPhone_) { + DrawShape(canvas, offset, true); + if (progressDisplay_) { + if (GreatOrEqual(rrectRadius_, buttonSize_.Height() / 2.0)) { + DrawLineProgressAnimation(canvas, offset); + } else { + DrawLineProgress(canvas, offset); + } + } + return; + } + if (progressDisplay_) { + DrawShape(canvas, offset, true); + DrawLineProgress(canvas, offset); + } +} + +void FlutterRenderButton::DrawButton(flutter::Canvas& canvas, const Offset& inOffset) +{ + Offset offset = inOffset + offsetDelta_; + if (type_ == ButtonType::ARC) { + DrawArc(canvas, offset); + return; + } + if (type_ == ButtonType::DOWNLOAD) { + DrawDownloadButton(canvas, offset); + return; + } + + // Paint button with border + if (NormalizeToPx(borderEdge_.GetWidth()) > 0.0) { + DrawShape(canvas, offset); + DrawShape(canvas, offset, true); + return; + } + DrawShape(canvas, offset); +} + +uint32_t FlutterRenderButton::GetStateColor() +{ + if (needHoverColor_) { + return hoverColor_.GetValue(); + } + if (isDisabled_) { + return disabledColor_.GetValue(); + } + if (needFocusColor_) { + return focusColor_.GetValue(); + } + if (clickedColor_ != defaultClickedColor_) { + return isClicked_ ? clickedColor_.GetValue() : backgroundColor_.GetValue(); + } + if (!isMoveEventValid_) { + maskingOpacity_ = 0.0; + } + uint32_t animationColor; + if (isWatch_) { + animationColor = backgroundColor_.BlendColor(Color::WHITE.ChangeOpacity(maskingOpacity_)).GetValue(); + } else { + animationColor = backgroundColor_.BlendColor(Color::BLACK.ChangeOpacity(maskingOpacity_)).GetValue(); + } + return animationColor; +} + +bool FlutterRenderButton::HasEffectiveTransform() const +{ + if (!transformLayer_) { + return false; + } + return !transformLayer_->GetMatrix4().IsIdentityMatrix(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/button/flutter_render_button.h b/frameworks/core/components/button/flutter_render_button.h new file mode 100644 index 00000000..18808c79 --- /dev/null +++ b/frameworks/core/components/button/flutter_render_button.h @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BUTTON_FLUTTER_RENDER_BUTTON_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BUTTON_FLUTTER_RENDER_BUTTON_H + +#include "flutter/lib/ui/painting/canvas.h" + +#include "core/components/button/render_button.h" +#include "core/pipeline/layers/opacity_layer.h" +#include "core/pipeline/layers/transform_layer.h" + +namespace OHOS::Ace { + +class FlutterRenderButton : public RenderButton { + DECLARE_ACE_TYPE(FlutterRenderButton, RenderButton); + +public: + FlutterRenderButton() = default; + ~FlutterRenderButton() override = default; + + RenderLayer GetRenderLayer() override; + bool HasEffectiveTransform() const override; + void Paint(RenderContext& context, const Offset& offset) override; + void OnGlobalPositionChanged() override; + +private: + Size Measure() override; + + void UpdateLayer(); + void PaintButtonAnimation(); + void MeasureButtonSize(); + void MeasureCircle(); + void MeasureCapsule(); + void ResetBoxRadius(); + void DrawShape(flutter::Canvas& canvas, const Offset& offset, bool isStroke = false); + void DrawArc(flutter::Canvas& canvas, const Offset& offset); + void DrawLineProgress(flutter::Canvas& canvas, const Offset& offset); + void DrawLineProgressAnimation(flutter::Canvas& canvas, const Offset& offset); + void DrawCircleProgress(flutter::Canvas& canvas, const Offset& offset); + void DrawDownloadButton(flutter::Canvas& canvas, const Offset& offset); + void DrawButton(flutter::Canvas& canvas, const Offset& offset); + uint32_t GetStateColor(); + + RefPtr transformLayer_; + RefPtr opacityLayer_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BUTTON_FLUTTER_RENDER_BUTTON_H diff --git a/frameworks/core/components/button/render_button.cpp b/frameworks/core/components/button/render_button.cpp new file mode 100644 index 00000000..54819b68 --- /dev/null +++ b/frameworks/core/components/button/render_button.cpp @@ -0,0 +1,714 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/button/render_button.h" + +#include "base/log/event_report.h" +#include "base/log/log.h" +#include "core/accessibility/accessibility_node.h" +#include "core/animation/keyframe_animation.h" +#include "core/common/frontend.h" +#include "core/components/button/button_theme.h" +#include "core/components/common/properties/alignment.h" +#include "core/components/theme/theme_manager.h" +#include "core/event/ace_event_helper.h" + +namespace OHOS::Ace { +namespace { + +// Watch button definitions +constexpr Dimension TEXT_BUTTON_MAX_WIDTH = 116.5_vp; + +// Download button definitions +constexpr double DOWNLOAD_FULL_PERCENT = 100.0; +constexpr double MAX_TRANSITION_TIME = 5000.0; +constexpr double MIN_TRANSITION_TIME = 200.0; +constexpr double MILLISECOND_PER_PERCENT = 20.0; +constexpr double SECOND_TO_MILLISECOND = 1000.0; + +// Definition for animation +constexpr double TV_EXPAND_SCALE = 1.05; +constexpr double TV_REDUCE_SCALE = 0.95; +constexpr double WATCH_SCALE = 0.8; +constexpr double MASKING_ANIMATION_RATIO = 10.0; +constexpr float KEY_TIME_START = 0.0f; +constexpr float KEY_TIME_MID = 0.5f; +constexpr float KEY_TIME_END = 1.0f; +constexpr float PRESS_UP_OPACITY = 1.0f; +constexpr float PRESS_DOWN_OPACITY = 0.95f; +constexpr int32_t WATCH_DURATION_DOWN = 200; +constexpr int32_t WATCH_DURATION_UP = 250; +constexpr int32_t TV_CLICK_DURATION = 200; +constexpr int32_t TV_FOCUS_SCALE_DURATION = 100; +constexpr int32_t HOVER_ANIMATION_DURATION = 250; +constexpr int32_t PRESS_ANIMATION_DURATION = 100; + +} // namespace + +RenderButton::RenderButton() +{ + Initialize(); +} + +void RenderButton::Initialize() +{ + auto wp = AceType::WeakClaim(this); + touchRecognizer_ = AceType::MakeRefPtr(); + touchRecognizer_->SetOnTouchDown([wp](const TouchEventInfo&) { + auto button = wp.Upgrade(); + if (button) { + button->HandleTouchEvent(true); + } + }); + touchRecognizer_->SetOnTouchUp([wp](const TouchEventInfo&) { + auto button = wp.Upgrade(); + if (button) { + button->HandleTouchEvent(false); + } + }); + touchRecognizer_->SetOnTouchCancel([wp](const TouchEventInfo&) { + auto button = wp.Upgrade(); + if (button) { + button->HandleTouchEvent(false); + } + }); + touchRecognizer_->SetOnTouchMove([wp](const TouchEventInfo& info) { + auto button = wp.Upgrade(); + if (button) { + button->HandleMoveEvent(info); + } + }); + + clickRecognizer_ = AceType::MakeRefPtr(); + clickRecognizer_->SetOnClick([wp](const ClickInfo& info) { + auto button = wp.Upgrade(); + if (!button) { + return; + } + const auto context = button->GetContext().Upgrade(); + if (context && context->GetIsDeclarative()) { + button->HandleClickEvent(info); + } else { + button->HandleClickEvent(); + } + }); +} + +void RenderButton::InitAccessibilityEventListener() +{ + auto refNode = accessibilityNode_.Upgrade(); + if (!refNode) { + return; + } + refNode->AddSupportAction(AceAction::ACTION_CLICK); + refNode->AddSupportAction(AceAction::ACTION_ACCESSIBILITY_FOCUS); + + auto weakPtr = AceType::WeakClaim(this); + refNode->SetActionFocusImpl([weakPtr]() { + auto button = weakPtr.Upgrade(); + if (button) { + button->HandleFocusEvent(true); + } + }); +} + +void RenderButton::OnPaintFinish() +{ + if (isFocus_) { + if (isTv_) { + DisplayFocusAnimation(); + } + if (isPhone_) { + UpdateFocusAnimation(INIT_SCALE); + } + } + UpdateAccessibility(); + InitAccessibilityEventListener(); +} + +void RenderButton::UpdateAccessibility() +{ + const auto& context = context_.Upgrade(); + if (!context) { + return; + } + auto viewScale = context->GetViewScale(); + if (NearZero(viewScale)) { + return; + } + auto accessibilityNode = GetAccessibilityNode().Upgrade(); + if (!accessibilityNode) { + return; + } + Size size = GetLayoutSize(); + Offset globalOffset = GetGlobalOffset(); +#if defined(WINDOWS_PLATFORM) || defined(MAC_PLATFORM) + if (isTv_ && isFocus_) { + Offset scaleCenter = Offset(globalOffset.GetX() + size.Width() / 2.0, + globalOffset.GetY() + size.Height() / 2.0); + accessibilityNode->SetScaleCenter(scaleCenter); + accessibilityNode->SetScale(TV_EXPAND_SCALE); + } +#endif + PositionInfo positionInfo = { (size.Width()) * viewScale, (size.Height()) * viewScale, + (globalOffset.GetX()) * viewScale, (globalOffset.GetY()) * viewScale }; + accessibilityNode->SetPositionInfo(positionInfo); + if (!GetAccessibilityText().empty()) { + accessibilityNode->SetAccessibilityLabel(GetAccessibilityText()); + } +} + +void RenderButton::HandleTouchEvent(bool isTouch) +{ + if (isDisabled_) { + return; + } + isClicked_ = isTouch; + if (isClicked_) { + isMoveEventValid_ = true; + } + if (isMoveEventValid_ || isWatch_) { + PlayTouchAnimation(); + } +} + +void RenderButton::HandleMoveEvent(const TouchEventInfo& info) +{ + if (isDisabled_ || (!isMoveEventValid_)) { + return; + } + if (info.GetTouches().empty()) { + return; + } + const auto& locationInfo = info.GetTouches().front(); + double moveDeltaX = locationInfo.GetLocalLocation().GetX(); + double moveDeltaY = locationInfo.GetLocalLocation().GetY(); + if ((moveDeltaX < 0 || moveDeltaX > buttonSize_.Width()) || (moveDeltaY < 0 || moveDeltaY > buttonSize_.Height())) { + isClicked_ = false; + MarkNeedRender(); + isMoveEventValid_ = false; + } +} + +void RenderButton::HandleClickEvent(const ClickInfo& info) +{ + if (isDisabled_) { + return; + } + if (onClickWithInfo_) { + onClickWithInfo_(info); + } + PlayClickAnimation(); +} + +void RenderButton::HandleClickEvent() +{ + if (isDisabled_) { + return; + } + if (onClick_) { + onClick_(); + } + PlayClickAnimation(); +} + +void RenderButton::OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) +{ + if ((!touchRecognizer_) || (!clickRecognizer_)) { + return; + } + touchRecognizer_->SetCoordinateOffset(coordinateOffset); + result.emplace_back(touchRecognizer_); + result.emplace_back(clickRecognizer_); +} + +void RenderButton::HandleFocusEvent(bool isFocus) +{ + isFocus_ = isFocus; + needFocusColor_ = isFocus_ && isTv_; + MarkNeedRender(); +} + +void RenderButton::DisplayFocusAnimation() +{ + if (!animationRunning_ && isTv_) { + UpdateAnimationParam(TV_EXPAND_SCALE); + } +} + +void RenderButton::OnMouseHoverEnterTest() +{ + if (isPhone_ && ((type_ == ButtonType::TEXT) || (type_ == ButtonType::NORMAL))) { + needHoverColor_ = true; + MarkNeedRender(); + } else { + ResetController(hoverControllerExit_); + if (!hoverControllerEnter_) { + hoverControllerEnter_ = AceType::MakeRefPtr(context_); + } + scaleAnimationEnter_ = AceType::MakeRefPtr>(); + CreateFloatAnimation(scaleAnimationEnter_, 1.0, 1.05); + hoverControllerEnter_->AddInterpolator(scaleAnimationEnter_); + hoverControllerEnter_->SetDuration(HOVER_ANIMATION_DURATION); + hoverControllerEnter_->Play(); + hoverControllerEnter_->SetFillMode(FillMode::FORWARDS); + } +} + +void RenderButton::OnMouseHoverExitTest() +{ + if (needHoverColor_) { + needHoverColor_ = false; + MarkNeedRender(); + } else { + ResetController(hoverControllerEnter_); + if (!hoverControllerExit_) { + hoverControllerExit_ = AceType::MakeRefPtr(context_); + } + scaleAnimationExit_ = AceType::MakeRefPtr>(); + auto begin = scale_; + CreateFloatAnimation(scaleAnimationExit_, begin, 1.0); + hoverControllerExit_->AddInterpolator(scaleAnimationExit_); + hoverControllerExit_->SetDuration(HOVER_ANIMATION_DURATION); + hoverControllerExit_->Play(); + hoverControllerExit_->SetFillMode(FillMode::FORWARDS); + } +} + +void RenderButton::OnMouseClickDownAnimation() +{ + if (!needHoverColor_) { + ResetController(clickControllerUp_); + if (!clickControllerDown_) { + clickControllerDown_ = AceType::MakeRefPtr(context_); + } + scaleAnimationDown_ = AceType::MakeRefPtr>(); + auto begin = scale_; + CreateFloatAnimation(scaleAnimationDown_, begin, 1.0); + clickControllerDown_->AddInterpolator(scaleAnimationDown_); + clickControllerDown_->SetDuration(HOVER_ANIMATION_DURATION); + clickControllerDown_->Play(); + clickControllerDown_->SetFillMode(FillMode::FORWARDS); + } +} + +void RenderButton::OnMouseClickUpAnimation() +{ + if (!needHoverColor_) { + ResetController(clickControllerDown_); + if (!clickControllerUp_) { + clickControllerUp_ = AceType::MakeRefPtr(context_); + } + scaleAnimationUp_ = AceType::MakeRefPtr>(); + auto begin = scale_; + CreateFloatAnimation(scaleAnimationUp_, begin, 1.05); + clickControllerUp_->AddInterpolator(scaleAnimationUp_); + clickControllerUp_->SetDuration(HOVER_ANIMATION_DURATION); + clickControllerUp_->Play(); + clickControllerUp_->SetFillMode(FillMode::FORWARDS); + } +} + +void RenderButton::CreateFloatAnimation( + RefPtr>& floatAnimation, float beginValue, float endValue) +{ + if (!floatAnimation) { + return; + } + auto keyframeBegin = AceType::MakeRefPtr>(0.0, beginValue); + auto keyframeEnd = AceType::MakeRefPtr>(1.0, endValue); + floatAnimation->AddKeyframe(keyframeBegin); + floatAnimation->AddKeyframe(keyframeEnd); + floatAnimation->AddListener([weakButton = AceType::WeakClaim(this)](float value) { + auto button = weakButton.Upgrade(); + if (button) { + button->isHover_ = true; + button->scale_ = value; + button->MarkNeedRender(); + } + }); +} + +void RenderButton::ResetController(RefPtr& controller) +{ + if (controller) { + if (!controller->IsStopped()) { + controller->Stop(); + } + controller->ClearInterpolators(); + } +} + +void RenderButton::Update(const RefPtr& component) +{ + const RefPtr button = AceType::DynamicCast(component); + if (!button) { + LOGE("Update error, button component is null"); + EventReport::SendRenderException(RenderExcepType::RENDER_COMPONENT_ERR); + return; + } + if (!controller_) { + controller_ = AceType::MakeRefPtr(GetContext()); + } + auto theme = GetTheme(); + if (theme) { + defaultRadius_ = theme->GetRadius(); + defaultClickedColor_ = theme->GetClickedColor(); + } + + type_ = button->GetType(); + layoutFlag_ = button->GetLayoutFlag(); + width_ = (type_ == ButtonType::ARC) ? ARC_BUTTON_WIDTH : button->GetWidth(); + height_ = (type_ == ButtonType::ARC) ? ARC_BUTTON_HEIGHT : button->GetHeight(); + minWidth_ = button->GetMinWidth(); + radius_ = button->GetRectRadius(); + widthDefined_ = GreatOrEqual(button->GetWidth().Value(), 0.0); + heightDefined_ = GreatOrEqual(button->GetHeight().Value(), 0.0); + onClickWithInfo_ = AceAsyncEvent::Create(button->GetClickedEventId(), context_); + onClick_ = AceAsyncEvent::Create(button->GetClickedEventId(), context_); + isDisabled_ = button->GetDisabledState(); + backgroundColor_ = button->GetBackgroundColor(); + clickedColor_ = button->GetClickedColor(); + disabledColor_ = button->GetDisabledColor(); + focusColor_ = button->GetFocusColor(); + hoverColor_ = button->GetHoverColor(); + focusAnimationColor_ = button->GetFocusAnimationColor(); + borderEdge_ = button->GetBorderEdge(); + isInnerBorder_ = button->IsInnerBorder(); + isWatch_ = (SystemProperties::GetDeviceType() == DeviceType::WATCH); + isTv_ = (SystemProperties::GetDeviceType() == DeviceType::TV); + isPhone_ = (SystemProperties::GetDeviceType() == DeviceType::PHONE); + SetAccessibilityText(button->GetAccessibilityText()); + UpdateDownloadStyles(button); + MarkNeedLayout(); +} + +void RenderButton::PerformLayout() +{ + buttonSize_ = Size(NormalizeToPx(width_), NormalizeToPx(height_)); + rrectRadius_ = NormalizeToPx(radius_); + layoutSize_ = Measure(); + SetChildrenLayoutSize(); + SetLayoutSize(CalculateLayoutSize()); + SetChildrenAlignment(); + buttonSize_ = GetLayoutSize() - Size(widthDelta_, widthDelta_); +} + +void RenderButton::SetChildrenLayoutSize() +{ + LayoutParam innerLayoutParam; + bool isWatchText = (isWatch_ && (type_ == ButtonType::TEXT)); + double maxWidth = buttonSize_.Width(); + if (NearEqual(buttonSize_.Width(), 0.0)) { + maxWidth = isWatchText ? NormalizeToPx(TEXT_BUTTON_MAX_WIDTH) : GetLayoutParam().GetMaxSize().Width(); + maxWidth -= widthDelta_; + } + innerLayoutParam.SetMaxSize(Size(maxWidth, buttonSize_.Height())); + for (const auto& child : GetChildren()) { + child->Layout(innerLayoutParam); + childrenSize_.SetWidth(child->GetLayoutSize().Width()); + childrenSize_.SetHeight(child->GetLayoutSize().Height()); + } +} + +Size RenderButton::CalculateLayoutSize() +{ + if (((type_ == ButtonType::TEXT) && isWatch_) || (type_ == ButtonType::ICON) || (type_ == ButtonType::NORMAL)) { + double layoutWidth = widthDefined_ ? layoutSize_.Width() : childrenSize_.Width(); + double layoutHeight = heightDefined_ ? layoutSize_.Height() : childrenSize_.Height(); + return Size(layoutWidth, layoutHeight); + } + + Size layoutSize; + if (NearEqual(buttonSize_.Width(), 0.0)) { + double width = + (childrenSize_.Width() > NormalizeToPx(minWidth_)) ? childrenSize_.Width() : NormalizeToPx(minWidth_); + layoutSize = Size(width, buttonSize_.Height()) + Size(widthDelta_, widthDelta_); + } else { + layoutSize = layoutSize_; + } + if (NeedConstrain()) { + layoutSize = GetLayoutParam().Constrain(layoutSize); + } + return layoutSize; +} + +bool RenderButton::NeedConstrain() +{ + if (type_ == ButtonType::CIRCLE) { + return false; + } + if (isWatch_) { + if ((type_ == ButtonType::DOWNLOAD) || (type_ == ButtonType::ARC)) { + return false; + } + } + return true; +} + +void RenderButton::SetChildrenAlignment() +{ + if (GetChildren().empty()) { + return; + } + auto& child = GetChildren().front(); + Alignment alignment = (type_ == ButtonType::ARC) ? Alignment::TOP_CENTER : Alignment::CENTER; + child->SetPosition(Alignment::GetAlignPosition(GetLayoutSize(), child->GetLayoutSize(), alignment)); +} + +void RenderButton::SetProgress(uint32_t progress) +{ + if (isWatch_) { + if (progress >= static_cast(round(DOWNLOAD_FULL_PERCENT))) { + progressDisplay_ = false; + return; + } + progressDisplay_ = progress > 0 ? true : false; + progressPercent_ = progress / DOWNLOAD_FULL_PERCENT; + progressWidth_ = buttonSize_.Width() * progressPercent_; + MarkNeedRender(); + return; + } + needUpdateAnimation_ = false; + if (!NearEqual(progress, previousValue_)) { + animationDuring_ = std::chrono::steady_clock::now() - previousUpdateTime_; + percentChange_ = progress - previousValue_; + previousValue_ = progress; + previousUpdateTime_ = std::chrono::steady_clock::now(); + needUpdateAnimation_ = true; + } + UpdateProgressAnimation(); + MarkNeedLayout(); +} + +void RenderButton::UpdateDownloadStyles(const RefPtr& button) +{ + if (type_ != ButtonType::DOWNLOAD) { + return; + } + auto pipelineContext = GetContext().Upgrade(); + if (pipelineContext) { + if (!progressController_) { + progressController_ = AceType::MakeRefPtr(pipelineContext); + } + } + progressColor_ = button->GetProgressColor(); + progressFocusColor_ = button->GetProgressFocusColor(); + progressDiameter_ = NormalizeToPx(button->GetProgressDiameter()); + const auto& buttonController = button->GetButtonController(); + if (buttonController) { + buttonController->SetProgressCallback([weak = AceType::WeakClaim(this)](uint32_t progress) { + auto renderButton = weak.Upgrade(); + if (renderButton) { + renderButton->SetProgress(progress); + } + }); + } +} + +void RenderButton::UpdateProgressAnimation() +{ + if (!needUpdateAnimation_) { + return; + } + auto animation = AceType::MakeRefPtr>(progressPercent_, previousValue_, Curves::EASE_OUT); + animation->AddListener([this](const double& value) { + progressDisplay_ = GreatNotEqual(value, 0.0) ? true : false; + progressPercent_ = value; + progressWidth_ = buttonSize_.Width() * progressPercent_ / DOWNLOAD_FULL_PERCENT; + if (GreatOrEqual(progressPercent_, DOWNLOAD_FULL_PERCENT)) { + progressDisplay_ = false; + } + MarkNeedRender(); + }); + + if (!progressController_) { + return; + } + double change = percentChange_ * MILLISECOND_PER_PERCENT; + double during = animationDuring_.count() * SECOND_TO_MILLISECOND; + double duration = GreatNotEqual(std::abs(change), during) ? std::abs(change) : during; + if (LessNotEqual(duration, MIN_TRANSITION_TIME) || (previousValue_ == DOWNLOAD_FULL_PERCENT)) { + duration = MIN_TRANSITION_TIME; + } + if (GreatNotEqual(duration, MAX_TRANSITION_TIME)) { + duration = MAX_TRANSITION_TIME; + } + progressController_->ClearInterpolators(); + progressController_->AddInterpolator(animation); + progressController_->SetDuration(static_cast(round(duration))); + progressController_->SetIteration(1); + progressController_->Stop(); + progressController_->Play(); +} + +void RenderButton::UpdateAnimationParam(double value) +{ + UpdateFocusAnimation(value); + if (!animationRunning_) { + return; + } + + if (isWatch_) { + scale_ = value; + } + if (isOpacityAnimation_) { + opacity_ = fabs((value - INIT_SCALE) * ratio_); + } + if (isTouchAnimation_) { + maskingOpacity_ = fabs((value - INIT_SCALE) * ratio_ / MASKING_ANIMATION_RATIO); + } + if (!valueChanged_ && (!NearEqual(value, startValue_))) { + valueChanged_ = true; + } + if ((!isClickAnimation_ && NearEqual(value, endValue_)) || (valueChanged_ && NearEqual(value, startValue_))) { + isLastFrame_ = true; + valueChanged_ = false; + isClickAnimation_ = false; + } + MarkNeedRender(); +} + +void RenderButton::UpdateFocusAnimation(double value) +{ + auto context = context_.Upgrade(); + if (!context || !isFocus_) { + return; + } + Size sizeDelta = buttonSize_ * (value - INIT_SCALE); + Size layoutSize = GetLayoutSize() + sizeDelta; + Offset buttonOffset = Offset(sizeDelta.Width() / 2.0, sizeDelta.Height() / 2.0); + double radius = rrectRadius_; + if ((type_ == ButtonType::CIRCLE) || (type_ == ButtonType::CAPSULE)) { + radius = layoutSize.Height() / 2.0; + } + if (isPhone_ && ((type_ == ButtonType::TEXT) || (type_ == ButtonType::NORMAL))) { + context->ShowFocusAnimation(RRect::MakeRRect(Rect(Offset(0, 0), layoutSize), Radius(radius)), + focusAnimationColor_, GetGlobalOffset() - buttonOffset, true); + return; + } + context->ShowFocusAnimation(RRect::MakeRRect(Rect(Offset(0, 0), layoutSize), Radius(radius)), focusAnimationColor_, + GetGlobalOffset() - buttonOffset); + context->ShowShadow( + RRect::MakeRRect(Rect(Offset(0, 0), layoutSize), Radius(radius)), GetGlobalOffset() - buttonOffset); +} + +void RenderButton::PlayAnimation(double start, double end, int32_t duration, const FillMode& fillMode) +{ + animationRunning_ = true; + startValue_ = start; + endValue_ = end; + if (!NearEqual(start, end)) { + ratio_ = INIT_SCALE / (end - start); + } + auto animation = AceType::MakeRefPtr>(start, end, Curves::FRICTION); + animation->AddListener(Animation::ValueCallback([weak = AceType::WeakClaim(this)](double value) { + auto button = weak.Upgrade(); + if (button) { + button->UpdateAnimationParam(value); + } + })); + if (!controller_) { + return; + } + controller_->ClearInterpolators(); + controller_->SetDuration(duration); + controller_->SetFillMode(fillMode); + controller_->AddInterpolator(animation); + controller_->Play(); +} + +void RenderButton::PlayTouchAnimation() +{ + if (isWatch_) { + isTouchAnimation_ = true; + if (isClicked_) { + PlayAnimation(INIT_SCALE, WATCH_SCALE, WATCH_DURATION_DOWN); + } else { + PlayAnimation(WATCH_SCALE, INIT_SCALE, WATCH_DURATION_UP); + } + } else { + isTouchAnimation_ = true; + if (isClicked_) { + PlayAnimation(PRESS_UP_OPACITY, PRESS_DOWN_OPACITY, PRESS_ANIMATION_DURATION); + } else { + PlayAnimation(PRESS_DOWN_OPACITY, PRESS_UP_OPACITY, PRESS_ANIMATION_DURATION); + } + } +} + +void RenderButton::PlayClickScaleAnimation(float keyTime, int32_t duration) +{ + auto startFrame = AceType::MakeRefPtr>(KEY_TIME_START, TV_EXPAND_SCALE); + auto midFrame = AceType::MakeRefPtr>(keyTime, TV_REDUCE_SCALE); + auto endFrame = AceType::MakeRefPtr>(KEY_TIME_END, TV_EXPAND_SCALE); + midFrame->SetCurve(Curves::FRICTION); + endFrame->SetCurve(Curves::FRICTION); + auto animation = AceType::MakeRefPtr>(); + animation->AddKeyframe(startFrame); + animation->AddKeyframe(midFrame); + animation->AddKeyframe(endFrame); + animation->AddListener([weak = AceType::WeakClaim(this)](double value) { + auto button = weak.Upgrade(); + if (button) { + button->UpdateAnimationParam(value); + } + }); + + if (!controller_) { + return; + } + controller_->ClearInterpolators(); + controller_->AddInterpolator(animation); + controller_->SetDuration(duration); + controller_->Play(); +} + +void RenderButton::PlayClickAnimation() +{ + if (isPhone_ || isWatch_) { + return; + } + if (!isFocus_) { + return; + } + animationRunning_ = true; + isClickAnimation_ = true; + startValue_ = TV_EXPAND_SCALE; + endValue_ = TV_REDUCE_SCALE; + PlayClickScaleAnimation(KEY_TIME_MID, TV_CLICK_DURATION); +} + +void RenderButton::PlayFocusAnimation(bool isFocus) +{ + if (isWatch_) { + return; + } + if (isPhone_) { + UpdateFocusAnimation(INIT_SCALE); + return; + } + if (!isOpacityAnimation_) { + isOpacityAnimation_ = true; + } + if (isFocus) { + PlayAnimation(INIT_SCALE, TV_EXPAND_SCALE, TV_FOCUS_SCALE_DURATION); + } else { + PlayAnimation(TV_EXPAND_SCALE, INIT_SCALE, TV_FOCUS_SCALE_DURATION); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/button/render_button.h b/frameworks/core/components/button/render_button.h new file mode 100644 index 00000000..196c0b9e --- /dev/null +++ b/frameworks/core/components/button/render_button.h @@ -0,0 +1,181 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BUTTON_RENDER_BUTTON_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BUTTON_RENDER_BUTTON_H + +#include "base/utils/system_properties.h" +#include "core/animation/animator.h" +#include "core/animation/curve_animation.h" +#include "core/animation/keyframe_animation.h" +#include "core/components/button/button_component.h" +#include "core/components/common/properties/color.h" +#include "core/components/common/properties/edge.h" +#include "core/components/touch_listener/render_touch_listener.h" +#include "core/gestures/click_recognizer.h" +#include "core/gestures/raw_recognizer.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +constexpr Dimension ARC_BUTTON_WIDTH = 169.0_vp; +constexpr Dimension ARC_BUTTON_HEIGHT = 48.0_vp; + +// Definition for animation +constexpr double INIT_SCALE = 1.0; + +class RenderButton : public RenderNode { + DECLARE_ACE_TYPE(RenderButton, RenderNode); + +public: + ~RenderButton() override = default; + + static RefPtr Create(); + + void Update(const RefPtr& component) override; + void PerformLayout() override; + void OnPaintFinish() override; + + void HandleFocusEvent(bool isFocus); + void HandleClickEvent(const ClickInfo& info); + void HandleClickEvent(); + void DisplayFocusAnimation(); + void PlayFocusAnimation(bool isFocus); + + bool IsDisabled() const + { + return isDisabled_; + } + +protected: + RenderButton(); + virtual Size Measure() = 0; + void OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) override; + + void Initialize(); + void InitAccessibilityEventListener(); + void HandleTouchEvent(bool isTouch); + void HandleMoveEvent(const TouchEventInfo& info); + void UpdateDownloadStyles(const RefPtr& button); + void SetProgress(uint32_t progress); + void OnMouseHoverEnterTest() override; + void OnMouseHoverExitTest() override; + void OnMouseClickDownAnimation() override; + void OnMouseClickUpAnimation() override; + + bool NeedLayoutExtendToParant() const + { + return (layoutFlag_ & LAYOUT_FLAG_EXTEND_TO_PARENT) == LAYOUT_FLAG_EXTEND_TO_PARENT; + } + + RefPtr touchRecognizer_; + RefPtr clickRecognizer_; + RefPtr progressController_; + + ButtonType type_; + Size buttonSize_; + Offset offsetDelta_; + Dimension defaultRadius_; + double rrectRadius_ = 0.0; + double widthDelta_ = 0.0; + double progressWidth_ = 0.0; + double progressPercent_ = 0.0; + double progressDiameter_ = 0.0; + double opacity_ = 1.0; + double maskingOpacity_ = 0.0; + double ratio_ = 0.0; + double previousValue_ = 0.0; + double percentChange_ = 0.0; + float scale_ = 1.0f; + + bool needUpdateAnimation_ = false; + bool isInnerBorder_ = false; + bool isClicked_ = false; + bool isDisabled_ = false; + bool isFocus_ = false; + bool isWatch_ = false; + bool isTv_ = false; + bool isPhone_ = false; + bool widthDefined_ = false; + bool heightDefined_ = false; + bool progressDisplay_ = false; + bool animationRunning_ = false; + bool isLastFrame_ = false; + bool isOpacityAnimation_ = false; + bool isTouchAnimation_ = false; + bool isHover_ = false; + bool needFocusColor_ = false; + bool needHoverColor_ = false; + bool isMoveEventValid_ = false; + uint32_t layoutFlag_ = 0; + + Color backgroundColor_; + Color clickedColor_; + Color disabledColor_; + Color focusColor_; + Color hoverColor_; + Color focusAnimationColor_; + Color progressColor_; + Color progressFocusColor_; + Color defaultClickedColor_; + BorderEdge borderEdge_; + std::function onClickWithInfo_; + std::function onClick_; + std::chrono::steady_clock::time_point previousUpdateTime_ = std::chrono::steady_clock::now(); + std::chrono::duration animationDuring_; + +private: + void UpdateAnimationParam(double value); + void UpdateFocusAnimation(double value); + void UpdateProgressAnimation(); + void PlayAnimation(double start, double end, int32_t duration, const FillMode& fillMode = FillMode::FORWARDS); + void PlayTouchAnimation(); + void PlayClickAnimation(); + void PlayClickScaleAnimation(float keyTime, int32_t duration); + void UpdateAccessibility(); + void SetChildrenLayoutSize(); + void SetChildrenAlignment(); + Size CalculateLayoutSize(); + bool NeedConstrain(); + void ResetController(RefPtr& controller); + void CreateFloatAnimation(RefPtr>& floatAnimation, float beginValue, float endValue); + + Dimension width_; + Dimension height_; + Dimension radius_; + Dimension minWidth_; + bool valueChanged_ = false; + bool isClickAnimation_ = false; + double startValue_ = 0.0; + double endValue_ = 0.0; + Edge arcInitEdge_; + Size layoutSize_; + Size childrenSize_; + + RefPtr controller_; + RefPtr hoverControllerEnter_; + RefPtr hoverControllerExit_; + RefPtr clickControllerDown_; + RefPtr clickControllerUp_; + RefPtr> scaleAnimationEnter_; + RefPtr> scaleAnimationExit_; + RefPtr> scaleAnimationUp_; + RefPtr> scaleAnimationDown_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BUTTON_RENDER_BUTTON_H diff --git a/frameworks/core/components/calendar/BUILD.gn b/frameworks/core/components/calendar/BUILD.gn new file mode 100644 index 00000000..8095f1d2 --- /dev/null +++ b/frameworks/core/components/calendar/BUILD.gn @@ -0,0 +1,35 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("calendar") { + sources = [ + "calendar_component.cpp", + "calendar_data_adapter.cpp", + "calendar_element.cpp", + "flutter_render_calendar.cpp", + "focusable_grid.cpp", + "render_calendar.cpp", + ] + + component_deps = [ + "box", + "button", + "display", + "flex", + "image", + "swiper", + "text", + ] +} diff --git a/frameworks/core/components/calendar/calendar_component.cpp b/frameworks/core/components/calendar/calendar_component.cpp new file mode 100644 index 00000000..ac02ed55 --- /dev/null +++ b/frameworks/core/components/calendar/calendar_component.cpp @@ -0,0 +1,424 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/calendar/calendar_component.h" + +#include "base/i18n/localization.h" +#include "core/components/box/box_component.h" +#include "core/components/button/button_component.h" +#include "core/components/calendar/calendar_element.h" +#include "core/components/calendar/render_calendar.h" +#include "core/components/display/display_component.h" +#include "core/components/flex/flex_item_component.h" +#include "core/components/image/image_component.h" +#include "core/components/text/text_component.h" +#include "core/event/ace_event_helper.h" +#include "core/event/back_end_event_manager.h" + +namespace OHOS::Ace { +namespace { + +constexpr double MAX_OPACITY = 255.0; +constexpr int32_t MAX_MONTH_CACHE_NUM = 3; +constexpr int32_t DISTANCE_FORM_LAST = MAX_MONTH_CACHE_NUM - 1; +constexpr int32_t TODAY_MONTH_INDEX_OF_CONTAINER = 1; +constexpr int32_t NEXT_TO_TODAY_MONTH_INDEX_OF_CONTAINER = 2; +constexpr int32_t LAST_TO_TODAY_MONTH_INDEX_OF_CONTAINER = 0; +constexpr Dimension UPPER_AND_LOWER_MARGIN = 16.0_vp; +constexpr Dimension LEFT_AND_RIGHT_MARGIN = 24.0_vp; + +} // namespace + +CalendarController::CalendarController( + const CalendarDataAdapterAction& dataAdapterAction, const WeakPtr& pipelineContext) + : dataAdapter_(AceType::MakeRefPtr(dataAdapterAction, pipelineContext)) {} + +void CalendarController::Initialize() +{ + currentCalendarMonth_ = dataAdapter_->GetToday().month; + dataAdapter_->SetCurrentMonth(currentCalendarMonth_); + dataAdapter_->SetSelectedChanged(dataAdapter_->GetToday().day, TODAY_MONTH_INDEX_OF_CONTAINER); + dataAdapter_->RequestData({ currentCalendarMonth_, TODAY_MONTH_INDEX_OF_CONTAINER }); + dataAdapter_->AddPendingRequest( + CalendarMonth::GetNextMonth(currentCalendarMonth_), NEXT_TO_TODAY_MONTH_INDEX_OF_CONTAINER); + dataAdapter_->AddPendingRequest( + CalendarMonth::GetLastMonth(currentCalendarMonth_), LAST_TO_TODAY_MONTH_INDEX_OF_CONTAINER); +} + +void CalendarController::GoToPrevMonth(int32_t selected) +{ + GoToMonth(SwipeDirection::PREV, selected); +} + +void CalendarController::GoToNextMonth(int32_t selected) +{ + GoToMonth(SwipeDirection::NEXT, selected); +} + +void CalendarController::GoToMonth(SwipeDirection direction, int32_t selected) +{ + int32_t index; + CalendarMonth calendarMonth; + CalendarMonth cacheMonth; + bool reverse = false; + if (direction == SwipeDirection::PREV) { + index = (currentMonthIndex_ + 1) % MAX_MONTH_CACHE_NUM; + if (--currentMonthIndex_ < 0) { + reverse = true; + currentMonthIndex_ = MAX_MONTH_CACHE_NUM - 1; + } + calendarMonth = CalendarMonth::GetLastMonth(currentCalendarMonth_); + cacheMonth = CalendarMonth::GetLastMonth(calendarMonth); + } else if (direction == SwipeDirection::NEXT) { + index = (currentMonthIndex_ + DISTANCE_FORM_LAST) % MAX_MONTH_CACHE_NUM; + if (++currentMonthIndex_ >= MAX_MONTH_CACHE_NUM) { + reverse = true; + currentMonthIndex_ = 0; + } + calendarMonth = CalendarMonth::GetNextMonth(currentCalendarMonth_); + cacheMonth = CalendarMonth::GetNextMonth(calendarMonth); + } else { + return; + } + + swiperReverseCache_.push({ currentMonthIndex_, reverse }); + dataAdapter_->SetSelectedChanged(selected, currentMonthIndex_); + currentCalendarMonth_ = calendarMonth; + dataAdapter_->SetCurrentMonth(currentCalendarMonth_); + dataAdapter_->RequestData({ cacheMonth, index }); +} + +void CalendarController::JumpToMonth(const CalendarMonth& calendarMonth, int32_t selected, SwipeDirection direction) +{ + if (direction == SwipeDirection::PREV) { + // target -- last(replaced by target) -- current -- next + int32_t destIndex = (currentMonthIndex_ + DISTANCE_FORM_LAST) % MAX_MONTH_CACHE_NUM; + dataAdapter_->RequestData({ calendarMonth, destIndex }); + CalculateNextIndex(currentMonthIndex_ - 1); + dataAdapter_->SetSelectedChanged(selected, currentMonthIndex_); + + int32_t lastIndex = (destIndex + DISTANCE_FORM_LAST) % MAX_MONTH_CACHE_NUM; + dataAdapter_->AddPendingRequest(CalendarMonth::GetLastMonth(calendarMonth), lastIndex); + + // cache the next month date after the animation ends, otherwise the content of the animation page will be + // changed + int32_t nextIndex = (destIndex + 1) % MAX_MONTH_CACHE_NUM; + dataAdapter_->AddPendingRequest(CalendarMonth::GetNextMonth(calendarMonth), nextIndex); + } else if (direction == SwipeDirection::NEXT) { + // last -- current -- next(replaced by target) -- target + int32_t destIndex = (currentMonthIndex_ + 1) % MAX_MONTH_CACHE_NUM; + dataAdapter_->RequestData({ calendarMonth, destIndex }); + CalculateNextIndex(currentMonthIndex_ + 1); + dataAdapter_->SetSelectedChanged(selected, currentMonthIndex_); + + int32_t nextIndex = (destIndex + 1) % MAX_MONTH_CACHE_NUM; + dataAdapter_->AddPendingRequest(CalendarMonth::GetNextMonth(calendarMonth), nextIndex); + + // cache the previous month date after the animation ends, otherwise the content of the animation page will be + // changed + int32_t lastIndex = (destIndex + DISTANCE_FORM_LAST) % MAX_MONTH_CACHE_NUM; + dataAdapter_->AddPendingRequest(CalendarMonth::GetLastMonth(calendarMonth), lastIndex); + } else { + // ignore + } +} + +void CalendarController::GoTo(int32_t year, int32_t month, int32_t day) +{ + if (!dataAdapter_) { + LOGE("calendar data adapter is nullptr"); + return; + } + if (!swiperController_) { + LOGE("swiper controller is nullptr"); + return; + } + + LOGD("go to: year=%{private}d, month=%{private}d, day=%{private}d", year, month, day); + CalendarMonth calendarMonth { year, month }; + auto nextMonth = CalendarMonth::GetNextMonth(currentCalendarMonth_); + auto lastMonth = CalendarMonth::GetLastMonth(currentCalendarMonth_); + if (calendarMonth == lastMonth) { + GoToPrevMonth(day); + } else if (calendarMonth == nextMonth) { + GoToNextMonth(day); + } else if (calendarMonth < lastMonth) { + currentCalendarMonth_ = calendarMonth; + dataAdapter_->SetCurrentMonth(currentCalendarMonth_); + JumpToMonth(calendarMonth, day, SwipeDirection::PREV); + } else if (calendarMonth > nextMonth) { + currentCalendarMonth_ = calendarMonth; + dataAdapter_->SetCurrentMonth(currentCalendarMonth_); + JumpToMonth(calendarMonth, day, SwipeDirection::NEXT); + } else { + dataAdapter_->SetSelectedChanged(day, currentMonthIndex_); + dataAdapter_->NotifySelectedChanged(); + } +} + +void CalendarController::RequestMonthData(int32_t index) +{ + auto tmpPreIndex = (currentMonthIndex_ + 1) % MAX_MONTH_CACHE_NUM; + auto tmpNextIndex = (currentMonthIndex_ + DISTANCE_FORM_LAST) % MAX_MONTH_CACHE_NUM; + auto nextIndex = currentMonthIndex_; + auto preIndex = currentMonthIndex_; + CalendarMonth calendarMonth; + CalendarMonth cacheMonth; + static const int32_t selectedDay = 1; + if (++nextIndex >= MAX_MONTH_CACHE_NUM) { + nextIndex = 0; + } + if (--preIndex < 0) { + preIndex = MAX_MONTH_CACHE_NUM - 1; + } + if (nextIndex == index) { + currentMonthIndex_ = nextIndex; + calendarMonth = CalendarMonth::GetNextMonth(currentCalendarMonth_); + cacheMonth = CalendarMonth::GetNextMonth(calendarMonth); + + dataAdapter_->SetSelectedChanged(selectedDay, currentMonthIndex_); + dataAdapter_->RequestData({ cacheMonth, tmpNextIndex }); + } else if (preIndex == index) { + currentMonthIndex_ = preIndex; + calendarMonth = CalendarMonth::GetLastMonth(currentCalendarMonth_); + cacheMonth = CalendarMonth::GetLastMonth(calendarMonth); + + dataAdapter_->SetSelectedChanged(selectedDay, currentMonthIndex_); + dataAdapter_->RequestData({ cacheMonth, tmpPreIndex }); + } else { + return; + } + currentCalendarMonth_ = calendarMonth; + dataAdapter_->SetCurrentMonth(currentCalendarMonth_); +} + +void CalendarController::CalculateNextIndex(int32_t index) +{ + bool reverse = false; + if (index >= MAX_MONTH_CACHE_NUM) { + reverse = true; + index = 0; + } else if (index < 0) { + reverse = true; + index = MAX_MONTH_CACHE_NUM - 1; + } + currentMonthIndex_ = index; + swiperReverseCache_.push({ currentMonthIndex_, reverse }); +} + +void CalendarController::UpdateTheme() +{ + if (!renderText_) { + return; + } + auto theme = renderText_->GetTheme(); + if (!leftImage_ || !leftImageComponent_ || !rightImageComponent_ || !rightImage_ || !theme) { + return; + } + TextStyle style; + style.SetFontSize(theme->GetCardCalendarTheme().titleFontSize); + style.SetTextColor(theme->GetCardCalendarTheme().titleTextColor); + style.SetFontWeight(FontWeight::W500); + renderText_->SetTextStyle(style); + renderText_->MarkNeedMeasure(); + renderText_->MarkNeedLayout(); + leftImageComponent_->SetColor(theme->GetCardCalendarTheme().titleTextColor); + leftImage_->Update(leftImageComponent_); + leftImage_->MarkNeedLayout(); + rightImageComponent_->SetColor(theme->GetCardCalendarTheme().titleTextColor); + rightImage_->Update(rightImageComponent_); + rightImage_->MarkNeedLayout(); +} + +void CalendarController::UpdateTitle(const CalendarDay& today) +{ + if (!renderText_) { + return; + } + DateTime dateTime; + dateTime.year = today.month.year; + dateTime.month = today.month.month; + auto date = Localization::GetInstance()->FormatDateTime(dateTime, "yyyyMMM"); + renderText_->SetTextData(date); + renderText_->MarkNeedMeasure(); + renderText_->MarkNeedLayout(); +} + +CalendarComponent::CalendarComponent(const ComposeId& id, const std::string& name) : ComposedComponent(id, name) {} + +RefPtr CalendarComponent::Build( + const WeakPtr& pipelineContext, const RefPtr& calendarController) +{ + auto context = pipelineContext.Upgrade(); + if (!context || !calendarController) { + return nullptr; + } + calendarController_ = calendarController; + auto themeManager = context->GetThemeManager(); + if (!themeManager) { + return nullptr; + } + auto calendarTheme = themeManager->GetTheme(); + if (!calendarTheme) { + return nullptr; + } + + auto direction = GetTextDirection(); + + std::list> monthChildren; + for (int32_t index = 0; index < MAX_MONTH_CACHE_NUM; index++) { + auto calendarMonth = AceType::MakeRefPtr(index, calendarController_); + auto display = AceType::MakeRefPtr(calendarMonth); + calendarMonth->SetSelectedChangeEvent(selectedChangeEvent_); + calendarMonth->SetCalendarTheme(calendarTheme); + calendarMonth->SetCardCalendar(cardCalendar_); + calendarMonth->SetTextDirection(direction); + display->SetOpacity(MAX_OPACITY); + monthChildren.emplace_back(display); + } + if (!swiperContainer_) { + swiperContainer_ = AceType::MakeRefPtr(monthChildren); + } + swiperContainer_->SetLoop(false); + swiperContainer_->SetAxis(axis_); + swiperContainer_->SetIndex(TODAY_MONTH_INDEX_OF_CONTAINER); + swiperContainer_->SetTextDirection(direction); + swiperContainer_->SetSlideContinue(true); + calendarController_->SetSwiperController(swiperContainer_->GetSwiperController()); + swiperContainer_->SetMoveCallback([calendarComponent = AceType::WeakClaim(this)](int32_t index) { + auto calendar = calendarComponent.Upgrade(); + if (calendar && calendar->calendarController_) { + calendar->calendarController_->RequestMonthData(index); + } + }); + if (!cardCalendar_) { + return swiperContainer_; + } else { + swiperContainer_->DisableSwipe(true); + RefPtr colComponent; + BuildCardCalendarTitle(calendarTheme, colComponent); + return colComponent; + } +} + +RefPtr CalendarComponent::CreateElement() +{ + return AceType::MakeRefPtr(GetId()); +} + +void CalendarComponent::GoTo(int32_t year, int32_t month, int32_t day) +{ + if (day < 0) { + calendarController_->GoTo(year, month, 1); + } else { + calendarController_->SetNeedFocus(true); + calendarController_->GoTo(year, month, day); + } +} + +void CalendarComponent::BuildCardCalendarTitle(const RefPtr& theme, RefPtr& col) +{ + auto preButton = InitCardButton(theme, true); + auto nextButton = InitCardButton(theme, false); + DateTime dateTime; + dateTime.year = calendarController_->GetCurrentMonth().year; + dateTime.month = calendarController_->GetCurrentMonth().month; + auto date = Localization::GetInstance()->FormatDateTime(dateTime, "yyyyMMM"); + auto text = AceType::MakeRefPtr(date); + TextStyle style; + auto calendarTheme = theme->GetCardCalendarTheme(); + style.SetFontSize(calendarTheme.titleFontSize); + style.SetTextColor(calendarTheme.titleTextColor); + style.SetFontWeight(FontWeight::W500); + text->SetTextStyle(style); + + auto box = AceType::MakeRefPtr(); + Edge edge(LEFT_AND_RIGHT_MARGIN, UPPER_AND_LOWER_MARGIN, LEFT_AND_RIGHT_MARGIN, UPPER_AND_LOWER_MARGIN); + box->SetMargin(edge); + box->SetChild(text); + + std::list> rowChildren; + rowChildren.emplace_back(preButton); + rowChildren.emplace_back(box); + rowChildren.emplace_back(nextButton); + auto rowComponent = AceType::MakeRefPtr(FlexAlign::CENTER, FlexAlign::CENTER, rowChildren); + std::list> colChildren; + colChildren.emplace_back(rowComponent); + colChildren.emplace_back(swiperContainer_); + col = AceType::MakeRefPtr(FlexAlign::FLEX_START, FlexAlign::CENTER, colChildren); +} + +const EventMarker& CalendarComponent::GetSelectedChangeEvent() const +{ + return selectedChangeEvent_; +} + +const EventMarker& CalendarComponent::GetRequestDataEvent() const +{ + return requestDataEvent_; +} + +CalendarMonthComponent::CalendarMonthComponent( + int32_t indexOfContainer, const RefPtr& calendarController) + : indexOfContainer_(indexOfContainer), calendarController_(calendarController) {} + +RefPtr CalendarMonthComponent::CreateRenderNode() +{ + return RenderCalendar::Create(); +} + +RefPtr CalendarMonthComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +void CalendarComponent::SetCalendarData(const std::string& value) +{ + if (calendarController_) { + calendarData_ = value; + auto dataAdapter = calendarController_->GetDataAdapter(); + if (dataAdapter) { + dataAdapter->SetOffDays(offDays_); + dataAdapter->ParseCardCalendarData(calendarData_); + } + calendarController_->UpdateTheme(); + } else { + calendarData_ = value; + } +} + +RefPtr CalendarComponent::InitCardButton(const RefPtr& theme, bool isPreArrow) +{ + auto Arrow = isPreArrow ? AceType::MakeRefPtr(InternalResource::ResourceId::LEFT_ARROW_SVG) + : AceType::MakeRefPtr(InternalResource::ResourceId::RIGHT_ARROW_SVG); + isPreArrow ? calendarController_->SetLeftRowImage(Arrow) : calendarController_->SetRightRowImage(Arrow); + auto calendarTheme = theme->GetCardCalendarTheme(); + Arrow->SetWidth(calendarTheme.arrowWidth); + Arrow->SetHeight(calendarTheme.arrowHeight); + std::list> children; + children.emplace_back(Arrow); + auto button = AceType::MakeRefPtr(children); + button->SetBackgroundColor(Color::TRANSPARENT); + button->SetClickedColor(Color::TRANSPARENT); + button->SetWidth(calendarTheme.buttonWidth); + button->SetHeight(calendarTheme.buttonHeight); + isPreArrow ? preClickId_ = BackEndEventManager::GetInstance().GetAvailableMarker() + : nextClickId_ = BackEndEventManager::GetInstance().GetAvailableMarker(); + isPreArrow ? button->SetClickedEventId(preClickId_) : button->SetClickedEventId(nextClickId_); + + return button; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/calendar/calendar_component.h b/frameworks/core/components/calendar/calendar_component.h new file mode 100644 index 00000000..fe44a385 --- /dev/null +++ b/frameworks/core/components/calendar/calendar_component.h @@ -0,0 +1,405 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CALENDAR_CALENDAR_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CALENDAR_CALENDAR_COMPONENT_H + +#include "core/components/button/button_component.h" +#include "core/components/calendar/calendar_data_adapter.h" +#include "core/components/calendar/calendar_theme.h" +#include "core/components/flex/flex_component.h" +#include "core/components/image/image_component.h" +#include "core/components/swiper/swiper_component.h" +#include "core/pipeline/base/composed_component.h" +#include "core/pipeline/base/render_component.h" + +namespace OHOS::Ace { + +using CalenderRequestFocusImpl = std::function; + +class CalendarController : public AceType { + DECLARE_ACE_TYPE(CalendarController, AceType); + +public: + CalendarController( + const CalendarDataAdapterAction& dataAdapterAction, const WeakPtr& pipelineContext); + ~CalendarController() override = default; + + void Initialize(); + void GoToPrevMonth(int32_t selected); + void GoToNextMonth(int32_t selected); + void GoTo(int32_t year, int32_t month, int32_t day); + + void SetSwiperController(const RefPtr& swiperController) + { + swiperController_ = swiperController; + } + + const RefPtr& GetDataAdapter() const + { + return dataAdapter_; + } + + void SetToday(const CalendarDay& today) + { + dataAdapter_->SetToday(today); + } + + void RequestFocus() + { + if (requestFocusImpl_) { + requestFocusImpl_(); + } + } + + void SetRequestFocusImpl(const CalenderRequestFocusImpl& requestFocusImpl) + { + requestFocusImpl_ = requestFocusImpl; + } + + void SetFirstEnter(bool firstEnter) + { + firstEnter_ = firstEnter; + } + + bool GetFirstEnter() const + { + return firstEnter_; + } + + void SetNeedFocus(bool needFocus) + { + needFocus_ = needFocus; + } + + bool IsNeedFocus() const + { + return needFocus_; + } + + void NotifyFocusChanged(bool focusStatus) const + { + if (dataAdapter_) { + dataAdapter_->NotifyFocusChanged(focusStatus); + } + } + + void SetRenderSwiper(const RefPtr& renderSwiper) + { + renderSwiper_ = renderSwiper; + } + + const RefPtr& GetRenderSwiper() const + { + return renderSwiper_; + } + + int32_t GetCurrentIndex() + { + return currentMonthIndex_; + } + + void JumpMonth() + { + while (!swiperReverseCache_.empty()) { + swiperController_->SwipeTo(swiperReverseCache_.front().first, swiperReverseCache_.front().second); + swiperReverseCache_.pop(); + } + } + + void SetFirstLoad(bool firstLoad) + { + firstLoad_ = firstLoad; + } + + bool GetFirstLoad() const + { + return firstLoad_; + } + + void RequestMonthData(int32_t index); + void CalculateNextIndex(int32_t index); + void UpdateTheme(); + void UpdateTitle(const CalendarDay& today); + + const CalendarMonth& GetCurrentMonth() const + { + return currentCalendarMonth_; + } + + void SetCardTitle(const RefPtr& renderText) + { + renderText_ = renderText; + } + + void SetRightRowImage(const RefPtr& rightRowImage) + { + rightImage_ = rightRowImage; + } + + void SetLeftRowImage(const RefPtr& leftRowImage) + { + leftImage_ = leftRowImage; + } + + void SetRightRowImage(const RefPtr& rightRowImage) + { + rightImageComponent_ = rightRowImage; + } + + void SetLeftRowImage(const RefPtr& leftRowImage) + { + leftImageComponent_ = leftRowImage; + } + +private: + enum class SwipeDirection { + NEXT, + PREV, + }; + + void GoToMonth(SwipeDirection direction, int32_t selected); + void JumpToMonth(const CalendarMonth& calendarMonth, int32_t selected, SwipeDirection direction); + + RefPtr swiperController_; + RefPtr renderSwiper_; + RefPtr dataAdapter_; + CalendarMonth currentCalendarMonth_; + int32_t currentMonthIndex_ = 1; + CalenderRequestFocusImpl requestFocusImpl_; + bool firstEnter_ = true; + bool needFocus_ = false; + bool firstLoad_ = true; + std::queue> swiperReverseCache_; + + RefPtr renderText_; + RefPtr leftImage_; + RefPtr rightImage_; + RefPtr leftImageComponent_; + RefPtr rightImageComponent_; +}; + +class CalendarComponent : public ComposedComponent { + DECLARE_ACE_TYPE(CalendarComponent, ComposedComponent); + +public: + CalendarComponent(const ComposeId& id, const std::string& name); + ~CalendarComponent() override = default; + + RefPtr CreateElement() override; + RefPtr Build( + const WeakPtr& pipelineContext, const RefPtr& calendarController); + void GoTo(int32_t year, int32_t month, int32_t day); + + void SetSelectedChangeEvent(const EventMarker& selectedChangeEvent) + { + selectedChangeEvent_ = selectedChangeEvent; + } + + void SetRequestDataEvent(const EventMarker& requestDataEvent) + { + requestDataEvent_ = requestDataEvent; + } + + void SetDataAdapterAction(const CalendarDataAdapterAction& dataAdapterAction) + { + dataAdapterAction_ = dataAdapterAction; + } + + const CalendarDataAdapterAction& GetDataAdapterAction() + { + return dataAdapterAction_; + } + + void SetCalendarDate(const CalendarDay& date) + { + date_ = date; + isSetToday_ = true; + } + + const RefPtr& GetCalendarController() const + { + return calendarController_; + } + + void RequestMonthData(int32_t index); + + void SetAxis(Axis axis) + { + axis_ = axis; + } + + void SetShowLunar(bool showLunar) + { + showLunar_ = showLunar; + } + + const EventMarker& GetPreClickId() const + { + return preClickId_; + } + + const EventMarker& GetNextClickId() const + { + return nextClickId_; + } + + void SetCardCalendar(bool cardCalendar) + { + cardCalendar_ = cardCalendar; + } + + bool IsCardCalendar() const + { + return cardCalendar_; + } + + void SetStartDayOfWeek(int32_t indexOfWeek) + { + startDayOfWeek_ = indexOfWeek; + } + + int32_t GetStartDayOfWeek() const + { + return startDayOfWeek_; + } + + bool IsShowLunar() const + { + return showLunar_; + } + + bool IsSetToday() const + { + return isSetToday_; + } + + const CalendarDay& GetDate() const + { + return date_; + } + + const std::string& GetCalendarData() const + { + return calendarData_; + } + + void SetShowHoliday(bool showHoliday) + { + showHoliday_ = showHoliday; + } + + bool GetShowHoliday() const + { + return showHoliday_; + } + + void SetOffDays(const std::string& offDays) + { + offDays_ = offDays; + } + + const std::string& GetOffDays() const + { + return offDays_; + } + + void SetCalendarData(const std::string& value); + void BuildCardCalendarTitle(const RefPtr& theme, RefPtr& col); + const EventMarker& GetSelectedChangeEvent() const; + const EventMarker& GetRequestDataEvent() const; + RefPtr InitCardButton(const RefPtr& theme, bool isPreArrow); + +private: + Axis axis_ { Axis::HORIZONTAL }; + int32_t startDayOfWeek_ = 6; // the default is Sunday + bool showHoliday_ = true; + bool showLunar_ = true; + bool isSetToday_ = false; + bool cardCalendar_ = false; + std::string calendarData_; + std::string offDays_ = "5, 6"; // The default day of rest is Saturday and Sunday + ColorMode colorMode_ = ColorMode::LIGHT; + CalendarDay date_; + EventMarker selectedChangeEvent_; + EventMarker requestDataEvent_; + EventMarker preClickId_; + EventMarker nextClickId_; + CalendarDataAdapterAction dataAdapterAction_; + RefPtr calendarController_; + RefPtr swiperContainer_; +}; + +class CalendarMonthComponent : public RenderComponent { + DECLARE_ACE_TYPE(CalendarMonthComponent, RenderComponent); + +public: + CalendarMonthComponent(int32_t indexOfContainer, const RefPtr& calendarController); + ~CalendarMonthComponent() override = default; + + RefPtr CreateRenderNode() override; + RefPtr CreateElement() override; + + int32_t GetIndexOfContainer() const + { + return indexOfContainer_; + } + + void SetSelectedChangeEvent(const EventMarker& selectedChangeEvent) + { + selectedChangeEvent_ = selectedChangeEvent; + } + + const EventMarker& GetSelectedChangeEvent() const + { + return selectedChangeEvent_; + } + + const RefPtr& GetCalendarController() const + { + return calendarController_; + } + + void SetCalendarTheme(const RefPtr& calendarTheme) + { + calendarTheme_ = calendarTheme; + } + + const RefPtr& GetCalendarTheme() const + { + return calendarTheme_; + } + + void SetCardCalendar(bool cardCalendar) + { + cardCalendar_ = cardCalendar; + } + + bool IsCardCalendar() const + { + return cardCalendar_; + } + +private: + bool cardCalendar_ = false; + int32_t indexOfContainer_ = 0; + EventMarker selectedChangeEvent_; + RefPtr calendarController_; + RefPtr calendarTheme_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CALENDAR_CALENDAR_COMPONENT_H diff --git a/frameworks/core/components/calendar/calendar_data_adapter.cpp b/frameworks/core/components/calendar/calendar_data_adapter.cpp new file mode 100644 index 00000000..fbdadb4c --- /dev/null +++ b/frameworks/core/components/calendar/calendar_data_adapter.cpp @@ -0,0 +1,329 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/calendar/calendar_data_adapter.h" + +#include +#include + +#include "base/i18n/localization.h" +#include "base/json/json_util.h" +#include "base/log/log.h" +#include "base/utils/date_util.h" +#include "base/utils/string_utils.h" +#include "core/common/platform_bridge.h" + +namespace OHOS::Ace { +namespace { + +constexpr int32_t CALENDAR_DAYS_FIVE_ROW_COUNT = 35; +constexpr int32_t CALENDAR_DAYS_SIX_ROW_COUNT = 42; + +bool ParseDayNumberProp(const std::unique_ptr& item, const std::string& key, int32_t& value) +{ + if (!item) { + LOGE("item is nullptr"); + return false; + } + if (!item->Contains(key)) { + LOGE("parse day number error, not find key:%{public}s", key.c_str()); + return false; + } + + auto dayValue = item->GetValue(key); + if (dayValue->IsNumber()) { + value = dayValue->GetInt(); + return true; + } else { + LOGW("parse day number type error"); + return false; + } +} + +} // namespace + +std::string CalendarDataAdapter::cachePath_; + +CalendarDataAdapter::CalendarDataAdapter( + const CalendarDataAdapterAction& dataAdapterAction, const WeakPtr& pipelineContext) + : dataAdapterAction_(dataAdapterAction), pipelineContext_(pipelineContext) +{ + Date currentDate = Date::Current(); + today_.day = currentDate.day; + today_.month.year = currentDate.year; + today_.month.month = currentDate.month - 1; +} + +bool CalendarDataAdapter::ParseData(int32_t indexOfContainer, const std::string& source, CalendarDaysOfMonth& result) +{ + static const std::string daysKey = "days"; + auto sourceJsonValue = JsonUtil::ParseJsonString(source); + calendarCache_[indexOfContainer].clear(); + if (!sourceJsonValue || !sourceJsonValue->Contains(daysKey)) { + LOGE("not find days"); + return false; + } + + auto daysValue = sourceJsonValue->GetValue(daysKey); + if (!daysValue || !daysValue->IsArray() || daysValue->GetArraySize() <= 0) { + LOGE("calendar days not array"); + return false; + } + + int daySize = daysValue->GetArraySize(); + if (daySize != CALENDAR_DAYS_FIVE_ROW_COUNT && daySize != CALENDAR_DAYS_SIX_ROW_COUNT) { + LOGE("calendar days size cannot support, size = %{public}d", daySize); + return false; + } + + for (int32_t index = 0; index < daySize; ++index) { + auto item = daysValue->GetArrayItem(index); + if (!item) { + continue; + } + CalendarDay dayInfo; + if (!ParseDayNumberProp(item, CalendarDay::INDEX, dayInfo.index)) { + continue; + } + if (!ParseDayNumberProp(item, CalendarDay::DAY, dayInfo.day)) { + continue; + } + if (!ParseDayNumberProp(item, CalendarDay::MONTH, dayInfo.month.month)) { + continue; + } + if (!ParseDayNumberProp(item, CalendarDay::YEAR, dayInfo.month.year)) { + continue; + } + if (dayInfo.day == CALENDAR_FIRST_DAY_NUM_OF_MONTH && result.firstDayIndex == CALENDAR_INVALID) { + result.firstDayIndex = dayInfo.index; + } + + if (dayInfo.month == result.month) { + result.lastDayIndex = dayInfo.index; + } + + // mark weekend + SetOffDays(dayInfo); + // Mark today. + dayInfo.today = dayInfo.month == today_.month && dayInfo.day == today_.day; + if (dayInfo.today) { + result.today = dayInfo.index; + } + // Get lunarDay information. + dayInfo.lunarMonth = item->GetString(CalendarDay::LUNAR_MONTH, ""); + dayInfo.lunarDay = item->GetString(CalendarDay::LUNAR_DAY, ""); + // Get mark information. + dayInfo.dayMark = item->GetString(CalendarDay::DAY_MARK, ""); + dayInfo.dayMarkValue = item->GetString(CalendarDay::DAY_MARK_VALUE, ""); + result.days.push_back(dayInfo); + calendarCache_[indexOfContainer].push_back(item->ToString()); + } + dayOfMonthCache_[indexOfContainer] = result; + return true; +} + +void CalendarDataAdapter::RequestData(const CalendarDataRequest& request) +{ + auto context = pipelineContext_.Upgrade(); + auto weak = AceType::WeakClaim(this); + if (!context) { + return; + } + if (cardCalendar_) { + indexMap_[request.indexOfContainer] = request.month; + auto json = JsonUtil::Create(true); + json->Put("month", request.month.month); + json->Put("year", request.month.year); + json->Put("currentMonth", currentMonth_.month); + json->Put("currentYear", currentMonth_.year); + if (requestDataEvent_) { + requestDataEvent_(json->ToString()); + } + auto iter = monthCache_.find(request.month); + if (iter != monthCache_.end()) { + auto monthDataJson = JsonUtil::ParseJsonString(monthCache_[iter->first]); + ParseMonthData(monthDataJson); + } + context->GetTaskExecutor()->PostTask( + [weak]() { + auto dataAdapter = weak.Upgrade(); + if (!dataAdapter) { + LOGW("dataAdapter is null"); + return; + } + dataAdapter->RequestNextData(); + }, + TaskExecutor::TaskType::UI); + } else { + GetCacheData(request); + context->GetMessageBridge()->SendMessage(dataAdapterAction_.GetAction(request.month.year, request.month.month), + [weak, request](const std::string& result) { + auto dataAdapter = weak.Upgrade(); + if (!dataAdapter) { + LOGE("date adapter is nullptr"); + return; + } + dataAdapter->HandleDataRequestResult(request, result); + dataAdapter->SaveCacheData(request, result); + }); + } +} + +bool CalendarDataAdapter::GetCacheData(const CalendarDataRequest& request) +{ + std::string filePath = cachePath_; + filePath.append("/") + .append(std::to_string(request.month.year)) + .append(std::to_string(request.month.month)) + .append(Localization::GetInstance()->GetLanguageTag()); + + std::ifstream file(filePath, std::ifstream::in | std::ifstream::binary); + bool isDataCached = false; + if (file.is_open()) { + std::string result((std::istreambuf_iterator(file)), std::istreambuf_iterator()); + if (!result.empty()) { + CalendarDaysOfMonth daysOfMonth; + daysOfMonth.month = request.month; + if (request.indexOfContainer >= 0 && request.indexOfContainer < CALENDAR_CACHE_PAGE) { + if (!ParseData(request.indexOfContainer, result, daysOfMonth)) { + return false; + } + NotifyDataChanged(daysOfMonth, request.indexOfContainer); + } + } + isDataCached = true; + } + return isDataCached; +} + +void CalendarDataAdapter::SaveCacheData(const CalendarDataRequest& request, const std::string& result) +{ + auto context = pipelineContext_.Upgrade(); + auto bkTaskExecutor = SingleTaskExecutor::Make(context->GetTaskExecutor(), TaskExecutor::TaskType::BACKGROUND); + + bkTaskExecutor.PostTask([request, result]() { + std::string url = cachePath_; + url.append("/") + .append(std::to_string(request.month.year)) + .append(std::to_string(request.month.month)) + .append(Localization::GetInstance()->GetLanguageTag()); + std::ofstream outFile(url, std::fstream::out); + if (!outFile) { + LOGE("the file open failed"); + return; + } + outFile.write(reinterpret_cast(result.c_str()), result.size()); + }); +} + +void CalendarDataAdapter::ParseCardCalendarData(const std::string& source) +{ + if (source.empty()) { + return; + } + auto sourceJson = JsonUtil::ParseJsonString(source); + if (!sourceJson->IsValid() || !sourceJson->IsArray()) { + return; + } + + auto child = sourceJson->GetChild(); + while (child->IsValid()) { + ParseMonthData(child); + child = child->GetNext(); + } +} + +void CalendarDataAdapter::UpdateCardCalendarAttr(const CardCalendarAttr& attr) +{ + showLunar_ = attr.showLunar; + startDayOfWeek_ = attr.startDayOfWeek; + cardCalendar_ = attr.cardCalendar; + offDays_ = attr.offDays; + SetRequestDataEvent(attr.requestData); + for (const auto& listen : allListeners_) { + listen->UpdateCardCalendarAttr(attr); + } +} + +void CalendarDataAdapter::ParseMonthData(const std::unique_ptr& monthData) +{ + CalendarMonth calendarMonth; + calendarMonth.month = monthData->GetInt("month", -1); + calendarMonth.year = monthData->GetInt("year", -1); + monthCache_[calendarMonth] = monthData->ToString(); + + int32_t indexOfContainer; + for (const auto& index : indexMap_) { + if (index.second == calendarMonth) { + indexOfContainer = index.first; + } + } + static const int32_t miniIndex = 0; + static const int32_t maxIndex = 2; + if (indexOfContainer < miniIndex || indexOfContainer > maxIndex) { + return; + } + auto data = monthData->GetValue("data"); + if (!data) { + return; + } + auto child = data->GetChild(); + CalendarDaysOfMonth result; + result.month = calendarMonth; + while (child->IsValid()) { + CalendarDay dayInfo; + dayInfo.day = child->GetInt("day"); + dayInfo.index = child->GetInt("index"); + dayInfo.month.month = child->GetInt("month"); + dayInfo.month.year = child->GetInt("year"); + dayInfo.lunarDay = child->GetString("lunarDay", ""); + dayInfo.dayMark = child->GetString("dayMark", ""); + dayInfo.dayMarkValue = child->GetString("dayMarkValue", ""); + dayInfo.isFirstOfLunar = child->GetBool("isFirstOfLunar", false); + dayInfo.hasSchedule = child->GetBool("hasSchedule", false); + dayInfo.markLunarDay = child->GetBool("markLunarDay", false); + SetOffDays(dayInfo); + result.days.push_back(dayInfo); + child = child->GetNext(); + } + dayOfMonthCache_[indexOfContainer] = result; + NotifyDataChanged(result, indexOfContainer); +} + +void CalendarDataAdapter::SetOffDays(CalendarDay& dayInfo) +{ + auto weekday = Date::CalculateWeekDay(dayInfo.month.year, dayInfo.month.month + 1, dayInfo.day); + std::vector days; + StringUtils::StringSpliter(offDays_, ',', days); + bool setOffDay = true; + for (const auto& day : days) { + auto num = StringUtils::StringToInt(day); + if (num < 0 || num > 6) { + setOffDay = false; + break; + } + if (num == weekday) { + dayInfo.weekend = true; + return; + } + } + if (!setOffDay) { + if (weekday == 5 || weekday == 6) { // set default weekend + dayInfo.weekend = true; + } + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/calendar/calendar_data_adapter.h b/frameworks/core/components/calendar/calendar_data_adapter.h new file mode 100644 index 00000000..781e4652 --- /dev/null +++ b/frameworks/core/components/calendar/calendar_data_adapter.h @@ -0,0 +1,416 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CALENDAR_CALENDAR_DATA_ADAPTER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CALENDAR_CALENDAR_DATA_ADAPTER_H + +#include +#include +#include +#include +#include + +#include "base/json/json_util.h" +#include "base/log/log.h" +#include "base/memory/ace_type.h" +#include "base/utils/string_utils.h" +#include "bridge/codec/codec_data.h" +#include "core/event/ace_event_helper.h" +#include "core/pipeline/pipeline_context.h" + +namespace OHOS::Ace { + +constexpr int32_t CALENDAR_MIN_DATE_YEAR = 1970; +constexpr int32_t CALENDAR_MIN_DATE_MONTH = 1; +constexpr int32_t CALENDAR_INVALID = -1; +constexpr int32_t CALENDAR_FIRST_DAY_NUM_OF_MONTH = 1; +constexpr int32_t CALENDAR_TOTAL_MONTH_OF_YEAR = 12; +constexpr int32_t CALENDAR_CACHE_PAGE = 3; + +struct CalendarMonth { + int32_t year = CALENDAR_MIN_DATE_YEAR; + // calendar month value is from 0 to 11 + int32_t month = CALENDAR_MIN_DATE_MONTH; + + bool operator==(const CalendarMonth& calendarMonth) const + { + return calendarMonth.month == month && calendarMonth.year == year; + } + bool operator!=(const CalendarMonth& calendarMonth) const + { + return calendarMonth.month != month || calendarMonth.year != year; + } + bool operator>(const CalendarMonth& calendarMonth) const + { + return year > calendarMonth.year || (year == calendarMonth.year && month > calendarMonth.month); + } + bool operator<(const CalendarMonth& calendarMonth) const + { + return year < calendarMonth.year || (year == calendarMonth.year && month < calendarMonth.month); + } + + static CalendarMonth GetNextMonth(const CalendarMonth& calendarMonth) + { + CalendarMonth nextMonth = calendarMonth; + if (calendarMonth.month + 1 >= CALENDAR_TOTAL_MONTH_OF_YEAR) { + nextMonth.month = 0; + ++nextMonth.year; + } else { + ++nextMonth.month; + } + return nextMonth; + } + + static CalendarMonth GetLastMonth(const CalendarMonth& calendarMonth) + { + CalendarMonth lastMonth = calendarMonth; + if (calendarMonth.month - 1 < 0) { + lastMonth.month = CALENDAR_TOTAL_MONTH_OF_YEAR - 1; + --lastMonth.year; + } else { + --lastMonth.month; + } + return lastMonth; + } + + std::string ToString() const + { + auto json = JsonUtil::Create(true); + json->Put("year", year); + json->Put("month", month); + return json->ToString(); + } +}; + +struct HashFunc { + std::size_t operator()(const CalendarMonth& key) const + { + return ((std::hash()(key.year) ^ (std::hash()(key.month) << 1)) >> 1); + } +}; + +struct CalendarDay { + int32_t index = 0; + int32_t day = 0; + bool weekend = false; + bool today = false; + bool focused = false; + bool touched = false; + bool isFirstOfLunar = false; + bool hasSchedule = false; + bool markLunarDay = false; + std::string lunarMonth; + std::string lunarDay; + std::string dayMark; + std::string dayMarkValue; + CalendarMonth month; + + static constexpr char INDEX[] { "index" }; + static constexpr char DAY[] { "day" }; + static constexpr char MONTH[] { "month" }; + static constexpr char YEAR[] { "year" }; + static constexpr char LUNAR_MONTH[] { "lunarMonth" }; + static constexpr char LUNAR_DAY[] { "lunarDay" }; + static constexpr char DAY_MARK[] { "dayMark" }; + static constexpr char DAY_MARK_VALUE[] { "dayMarkValue" }; + + std::string ToString() const + { + auto json = JsonUtil::Create(true); + json->Put(DAY, day); + json->Put(INDEX, index); + json->Put(MONTH, month.month); + json->Put(YEAR, month.year); + json->Put(LUNAR_MONTH, lunarMonth.c_str()); + json->Put(LUNAR_DAY, lunarDay.c_str()); + return json->ToString(); + } +}; + +struct CalendarDaysOfMonth { + CalendarMonth month; + int32_t firstDayIndex = CALENDAR_INVALID; + int32_t lastDayIndex = CALENDAR_INVALID; + int32_t today = CALENDAR_INVALID; + std::vector days; +}; + +struct CalendarDataRequest { + CalendarDataRequest(const CalendarMonth& month, int32_t indexOfContainer) + : month(month), indexOfContainer(indexOfContainer) + {} + ~CalendarDataRequest() = default; + + int32_t selected = 0; + CalendarMonth month; + int32_t indexOfContainer = 0; +}; + +struct CardCalendarAttr { + int32_t startDayOfWeek = 0; + bool showLunar = true; + bool showHoliday = true; + bool cardCalendar = false; + std::string offDays; + EventMarker requestData; + TextDirection textDirection = TextDirection::LTR; +}; + +using PendingRequestQueue = std::queue; +using RequestDataCompleteCallback = std::function; + +class CalendarDataChangeListener : public AceType { + DECLARE_ACE_TYPE(CalendarDataChangeListener, AceType); + +public: + virtual void OnDataChanged(const CalendarDaysOfMonth& daysOfMonth) = 0; + virtual void OnSelectedDay(int32_t selected) = 0; + virtual void OnFocusChanged(bool focusStatus) = 0; + virtual void UpdateCardCalendarAttr(const CardCalendarAttr& attr) = 0; +}; + +struct DataAdapterAction { + std::string bundleName; + std::string abilityName; + int32_t messageCode = 0; + std::string data; + + std::string GetAction() + { + return "{\"element\":{\"bundleName\":\"" + bundleName + + "\",\"name\":\"" + abilityName + "\",\"type\":1},\"code\":" + + std::to_string(messageCode) + "}"; + } +}; + +struct CalendarDataAdapterAction : public DataAdapterAction { + std::string GetData(int32_t year, int32_t month) + { + return "{\"year\":" + std::to_string(year) + ",\"month\":" + std::to_string(month) + "}"; + } + + std::vector GetAction(int32_t year, int32_t month) + { + std::vector args; + Framework::CodecData header(DataAdapterAction::GetAction()); + args.push_back(header); + Framework::CodecData params(GetData(year, month)); + args.push_back(params); + + return args; + } +}; + +class CalendarDataAdapter : public AceType { + DECLARE_ACE_TYPE(CalendarDataAdapter, AceType); + +public: + explicit CalendarDataAdapter( + const CalendarDataAdapterAction& dataAdapterAction, const WeakPtr& pipelineContext); + ~CalendarDataAdapter() override = default; + + void RegisterDataListener(const RefPtr& listener) + { + allListeners_.push_back(listener); + } + + void AddPendingRequest(const CalendarMonth& month, const int32_t indexOfContainer) + { + requestQueue_.emplace(month, indexOfContainer); + indexMap_[indexOfContainer] = month; + } + + void RequestData(const CalendarDataRequest& request); + + void NotifySelectedChanged() const + { + int32_t listenersSize = allListeners_.size(); + if (indexOfContainer_ >= 0 && indexOfContainer_ < listenersSize) { + auto& listener = allListeners_[indexOfContainer_]; + listener->OnSelectedDay(selectedDay_); + } + } + + const CalendarDay& GetToday() const + { + return today_; + } + + void SetToday(const CalendarDay& today) + { + today_.day = today.day; + today_.month.month = today.month.month; + today_.month.year = today.month.year; + } + + const std::array, 3>& GetCalendarCache() + { + return calendarCache_; + } + + void SetSelectedChanged(int32_t selected, int32_t indexOfContainer) + { + selectedDay_ = selected; + indexOfContainer_ = indexOfContainer; + } + + void NotifyFocusChanged(bool focusStatus) const + { + for (const auto& listener : allListeners_) { + listener->OnFocusChanged(focusStatus); + } + } + + void SetRequestDataEvent(const EventMarker& requestData) + { + if (requestData_ != requestData.GetData().eventId) { + requestData_ = requestData; + requestDataEvent_ = + AceAsyncEvent::Create(requestData, pipelineContext_); + } + } + + void SetCardCalendar(bool cardCalendar) + { + cardCalendar_ = cardCalendar; + } + + bool IsCardCalendar() const + { + return cardCalendar_; + } + + void SetStartDayOfWeek(int32_t indexOfWeek) + { + startDayOfWeek_ = indexOfWeek; + } + + int32_t GetStartDayOfWeek() const + { + return startDayOfWeek_; + } + + static void SetCachePath(const std::string& cachePath) + { + cachePath_ = cachePath; + } + + const std::array& GetDayOfMonthCache() + { + return dayOfMonthCache_; + } + + bool ShowLunar() const + { + return showLunar_; + } + + void SetCurrentMonth(const CalendarMonth& currentMonth) + { + currentMonth_ = currentMonth; + } + + void SetOffDays(const std::string& offDays) + { + offDays_ = offDays; + } + + void ParseCardCalendarData(const std::string& source); + void UpdateCardCalendarAttr(const CardCalendarAttr& attr); + void SetOffDays(CalendarDay& dayInfo); + +private: + bool ParseData(int32_t index, const std::string& source, CalendarDaysOfMonth& result); + + void SaveCacheData(const CalendarDataRequest& request, const std::string& result); + + bool GetCacheData(const CalendarDataRequest& request); + + void ParseMonthData(const std::unique_ptr& monthData); + + void RequestNextData() + { + if (!requestQueue_.empty()) { + CalendarDataRequest request = requestQueue_.front(); + RequestData(request); + requestQueue_.pop(); + } else { + NotifySelectedChanged(); + } + } + + void HandleDataRequestResult(const CalendarDataRequest& request, const std::string& result) + { + CalendarDaysOfMonth daysOfMonth; + daysOfMonth.month = request.month; + if (request.indexOfContainer >= 0 && request.indexOfContainer < CALENDAR_CACHE_PAGE) { + if (!ParseData(request.indexOfContainer, result, daysOfMonth)) { + return; + } + NotifyDataChanged(daysOfMonth, request.indexOfContainer); + RequestNextData(); + } + } + + void NotifyDataChanged(const CalendarDaysOfMonth& data, int32_t indexOfContainer) const + { + int32_t listenersSize = allListeners_.size(); + if (indexOfContainer >= 0 && indexOfContainer < listenersSize) { + auto& listener = allListeners_[indexOfContainer]; + listener->OnDataChanged(data); + } + } + + bool cardCalendar_ = false; + bool showLunar_ = true; + int32_t selectedDay_ = 0; + int32_t indexOfContainer_ = 0; + int32_t startDayOfWeek_ = 0; + std::string offDays_; + CalendarDay today_; + EventMarker requestData_; + CalendarMonth currentMonth_; + PendingRequestQueue requestQueue_; + CalendarDataAdapterAction dataAdapterAction_; + WeakPtr pipelineContext_; + std::array, CALENDAR_CACHE_PAGE> calendarCache_; + std::array dayOfMonthCache_; + std::vector> allListeners_; + std::function requestDataEvent_; + std::unordered_map indexMap_; + std::unordered_map monthCache_; + + static std::string cachePath_; +}; + +namespace StringUtils { + +inline bool StringToCalendarDay(const std::string& str, CalendarDay& day) +{ + std::vector date; + StringSpliter(str, '-', date); + if (date.size() == 3) { + day.month.year = date[0]; + day.month.month = date[1] - 1; + day.day = date[2]; + return true; + } + return false; +} + +} // namespace StringUtils +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CALENDAR_CALENDAR_DATA_ADAPTER_H diff --git a/frameworks/core/components/calendar/calendar_element.cpp b/frameworks/core/components/calendar/calendar_element.cpp new file mode 100644 index 00000000..39126034 --- /dev/null +++ b/frameworks/core/components/calendar/calendar_element.cpp @@ -0,0 +1,250 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/calendar/calendar_element.h" + +#include "base/i18n/localization.h" +#include "core/common/ace_application_info.h" +#include "core/components/calendar/calendar_component.h" +#include "core/components/calendar/render_calendar.h" +#include "core/components/display/render_display.h" +#include "core/components/text/text_element.h" + +namespace OHOS::Ace { + +void CalendarElement::PerformBuild() +{ + RefPtr calendar = AceType::DynamicCast(component_); + if (!calendar) { + LOGE("Can not dynamicCast to CalendarComponent!"); + return; + } + + if (!calendarController_) { + calendarController_ = AceType::MakeRefPtr(calendar->GetDataAdapterAction(), context_); + UpdateAttr(calendar); + calendarController_->Initialize(); + } else { + UpdateAttr(calendar); + return; + } + + const auto& child = children_.empty() ? nullptr : children_.front(); + auto newComponent = calendar->Build(GetContext(), calendarController_); + auto element = UpdateChild(child, newComponent); + if (calendar->IsCardCalendar()) { + BuildCardCalendar(calendar, element); + element = element->GetChildren().back(); + } + + auto swiperElement = AceType::DynamicCast(element); + + calendarController_->SetRequestFocusImpl([weak = WeakClaim(this)]() { + auto element = weak.Upgrade(); + if (!element) { + return; + } + element->RequestFocus(); + }); + if (swiperElement) { + renderSwiper_ = AceType::DynamicCast(swiperElement->GetRenderNode()); + if (renderSwiper_) { + calendarController_->SetRenderSwiper(renderSwiper_); + } + } + + RequestFocusImmediately(); +} + +void CalendarElement::BuildCardCalendar(const RefPtr& calendar, const RefPtr& element) +{ + if (!element || !element->GetChildren().front()) { + return; + } + auto children = element->GetChildren().front()->GetChildren(); + int32_t index = 0; + RefPtr box; + for (const auto& item : children) { + if (index == 0) { + SetArrowImage(item, true); + } + if (index == 1) { + box = item; + } + if (index == 2) { + SetArrowImage(item, false); + } + ++index; + } + auto text = AceType::DynamicCast(box->GetChildren().front()); + if (text) { + auto renderText = AceType::DynamicCast(text->GetRenderNode()); + calendarController_->SetCardTitle(renderText); + auto buttonCallback = [weak = WeakClaim(RawPtr(calendar)), text = WeakClaim(RawPtr(renderText)), + weakController = WeakClaim(RawPtr(calendarController_))](bool pre) { + auto calendar = weak.Upgrade(); + auto controller = weakController.Upgrade(); + if (controller) { + auto swiper = controller->GetRenderSwiper(); + if (swiper && swiper->GetMoveStatus()) { + return; + } + } + if (!calendar) { + return; + } + pre ? calendar->GetCalendarController()->GoToPrevMonth(1) + : calendar->GetCalendarController()->GoToNextMonth(1); + auto renderText = text.Upgrade(); + if (renderText) { + DateTime dateTime; + dateTime.year = calendar->GetCalendarController()->GetCurrentMonth().year; + dateTime.month = calendar->GetCalendarController()->GetCurrentMonth().month; + auto date = Localization::GetInstance()->FormatDateTime(dateTime, "yyyyMMM"); + auto textComponent = AceType::MakeRefPtr(date); + auto cardTheme = renderText->GetTheme(); + if (!cardTheme) { + return; + } + TextStyle style; + style.SetFontSize(cardTheme->GetCardCalendarTheme().titleFontSize); + style.SetTextColor(cardTheme->GetCardCalendarTheme().titleTextColor); + style.SetFontWeight(FontWeight::W500); + textComponent->SetTextStyle(style); + renderText->Update(textComponent); + renderText->MarkNeedLayout(); + } + }; + BackEndEventManager::GetInstance().BindBackendEvent(calendar->GetPreClickId(), [buttonCallback]() { + AceApplicationInfo::GetInstance().IsRightToLeft() ? buttonCallback(false) : buttonCallback(true); + }); + BackEndEventManager::GetInstance().BindBackendEvent(calendar->GetNextClickId(), [buttonCallback]() { + AceApplicationInfo::GetInstance().IsRightToLeft() ? buttonCallback(true) : buttonCallback(false); + }); + } +} + +void CalendarElement::UpdateAttr(const RefPtr& calendar) +{ + auto dataAdapter = calendarController_->GetDataAdapter(); + if (!dataAdapter) { + return; + } + if (calendar->IsSetToday()) { + auto today = dataAdapter->GetToday(); + auto date = calendar->GetDate(); + if (today.day != date.day || today.month != date.month) { + calendarController_->SetToday(date); + calendarController_->GoTo(date.month.year, date.month.month, date.day); + calendarController_->UpdateTitle(date); + } + } + CardCalendarAttr attr; + attr.startDayOfWeek = calendar->GetStartDayOfWeek(); + attr.showLunar = calendar->IsShowLunar(); + attr.textDirection = calendar->GetTextDirection(); + attr.cardCalendar = calendar->IsCardCalendar(); + attr.requestData = calendar->GetRequestDataEvent(); + attr.showHoliday = calendar->GetShowHoliday(); + attr.offDays = calendar->GetOffDays(); + dataAdapter->UpdateCardCalendarAttr(attr); +} + +void CalendarElement::SetArrowImage(const RefPtr& element, bool isLeft) +{ + if (!element) { + return; + } + auto imageElement = element->GetChildren().front(); + if (!imageElement) { + return; + } + auto image = AceType::DynamicCast(imageElement->GetRenderNode()); + if (image) { + isLeft ? calendarController_->SetLeftRowImage(image) : calendarController_->SetRightRowImage(image); + } +} + +void CalendarMonthElement::Update() +{ + RenderElement::Update(); +} + +bool CalendarMonthElement::OnKeyEvent(const KeyEvent& keyEvent) +{ + if (keyEvent.action != KeyAction::UP) { + return false; + } + + auto display = AceType::DynamicCast(renderNode_->GetParent().Upgrade()); + if (display) { + auto swiper = AceType::DynamicCast(display->GetParent().Upgrade()); + if (swiper) { + if (swiper->GetMoveStatus()) { + return true; + } + } + } + + switch (keyEvent.code) { + case KeyCode::TV_CONTROL_UP: + return RequestNextFocus(true, true, GetRect()); + case KeyCode::TV_CONTROL_DOWN: + return RequestNextFocus(true, false, GetRect()); + case KeyCode::TV_CONTROL_LEFT: + return RequestNextFocus(false, true, GetRect()); + case KeyCode::TV_CONTROL_RIGHT: + return RequestNextFocus(false, false, GetRect()); + case KeyCode::KEYBOARD_TAB: + return RequestNextFocus(false, false, GetRect()) || RequestNextFocus(true, false, GetRect()); + default: + return false; + } +} + +bool CalendarMonthElement::RequestNextFocus(bool vertical, bool reverse, const Rect& rect) +{ + RefPtr focusableGrid = AceType::DynamicCast(renderNode_); + if (!focusableGrid) { + LOGE("focusable grid is null."); + return false; + } + bool needFocus = focusableGrid->RequestNextFocus(vertical, reverse) >= 0; + if (needFocus) { + auto calendar = DynamicCast(renderNode_); + if (!calendar) { + LOGE("get render node failed"); + return false; + } + calendar->MarkNeedRender(); + } + return needFocus; +} + +void CalendarMonthElement::OnFocus() +{ + if (renderNode_) { + renderNode_->ChangeStatus(RenderStatus::FOCUS); + } +} + +void CalendarMonthElement::OnBlur() +{ + if (renderNode_) { + renderNode_->ChangeStatus(RenderStatus::BLUR); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/calendar/calendar_element.h b/frameworks/core/components/calendar/calendar_element.h new file mode 100644 index 00000000..cfadb9e0 --- /dev/null +++ b/frameworks/core/components/calendar/calendar_element.h @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CALENDAR_CALENDAR_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CALENDAR_CALENDAR_ELEMENT_H + +#include "core/components/calendar/calendar_component.h" +#include "core/pipeline/base/composed_element.h" +#include "core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +class CalendarElement : public ComposedElement, public FocusGroup { + DECLARE_ACE_TYPE(CalendarElement, ComposedElement, FocusGroup); + +public: + explicit CalendarElement(const ComposeId& id) : ComposedElement(id) {} + ~CalendarElement() override = default; + + void PerformBuild() override; + bool RequestNextFocus(bool vertical, bool reverse, const Rect& rect) override + { + return false; + } + + void OnFocus() override + { + FocusGroup::OnFocus(); + if (calendarController_) { + calendarController_->NotifyFocusChanged(true); + } + } + + void OnBlur() override + { + FocusGroup::OnBlur(); + if (calendarController_) { + calendarController_->NotifyFocusChanged(false); + } + } + + void BuildCardCalendar(const RefPtr& calendar, const RefPtr& element); + +private: + void UpdateAttr(const RefPtr& calendar); + void SetArrowImage(const RefPtr& element, bool isLeft); + + RefPtr calendarController_; + RefPtr renderSwiper_; +}; + +class CalendarMonthElement : public RenderElement, public FocusNode { + DECLARE_ACE_TYPE(CalendarMonthElement, RenderElement, FocusNode); + +public: + CalendarMonthElement() = default; + ~CalendarMonthElement() override = default; + + void Update() override; + bool OnKeyEvent(const KeyEvent& keyEvent) override; + void OnFocus() override; + void OnBlur() override; + +private: + bool RequestNextFocus(bool vertical, bool reverse, const Rect& rect); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CALENDAR_CALENDAR_ELEMENT_H diff --git a/frameworks/core/components/calendar/calendar_theme.h b/frameworks/core/components/calendar/calendar_theme.h new file mode 100644 index 00000000..36e40fa9 --- /dev/null +++ b/frameworks/core/components/calendar/calendar_theme.h @@ -0,0 +1,235 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CALENDAR_CALENDAR_THEME_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CALENDAR_CALENDAR_THEME_H + +#include "base/geometry/dimension.h" +#include "core/components/common/properties/color.h" +#include "core/components/theme/theme.h" +#include "core/components/theme/theme_constants.h" + +namespace OHOS::Ace { + +struct CalendarThemeStructure { + std::string dayFontWeight = "500"; + std::string lunarDayFontWeight = "500"; + std::string workStateFontWeight = "500"; + Color weekColor; + Color dayColor; + Color lunarColor; + Color weekendDayColor; + Color weekendLunarColor; + Color todayColor; + Color todayLunarColor; + Color nonCurrentMonthDayColor; + Color nonCurrentMonthLunarColor; + Color workDayMarkColor; + Color offDayMarkColor; + Color nonCurrentMonthWorkDayMarkColor; + Color nonCurrentMonthOffDayMarkColor; + Color focusedDayColor; + Color focusedLunarColor; + Color focusedAreaBackgroundColor; + Color blurAreaBackgroundColor; + Color titleTextColor; + Color touchColor; + Color markLunarColor; + Dimension weekFontSize; + Dimension dayFontSize; + Dimension lunarDayFontSize; + Dimension workDayMarkSize; + Dimension offDayMarkSize; + Dimension focusedAreaRadius; + Dimension topPadding; + Dimension workStateWidth; + Dimension workStateHorizontalMovingDistance; + Dimension workStateVerticalMovingDistance; + Dimension colSpace; + Dimension weekHeight; + Dimension dayHeight; + Dimension weekWidth; + Dimension dayWidth; + Dimension weekAndDayRowSpace; + Dimension dailyFiveRowSpace; + Dimension dailySixRowSpace; + Dimension gregorianCalendarHeight; + Dimension arrowHeight; + Dimension arrowWidth; + Dimension buttonWidth; + Dimension buttonHeight; + Dimension titleFontSize; +}; + +class CalendarTheme : public virtual Theme { + DECLARE_ACE_TYPE(CalendarTheme, Theme); + +public: + ~CalendarTheme() override = default; + class Builder { + public: + Builder() = default; + ~Builder() = default; + + RefPtr Build(const RefPtr& themeConstants) const + { + RefPtr theme = AceType::Claim(new CalendarTheme()); + if (!themeConstants) { + return theme; + } + theme = AceType::Claim(new CalendarTheme()); + theme->calendarTheme_.weekFontSize = themeConstants->GetDimension(THEME_CALENDAR_WEEK_FONT_SIZE); + theme->calendarTheme_.dayFontSize = themeConstants->GetDimension(THEME_CALENDAR_DAY_FONT_SIZE); + theme->calendarTheme_.lunarDayFontSize = themeConstants->GetDimension(THEME_CALENDAR_LUNAR_FONT_SIZE); + theme->calendarTheme_.weekColor = themeConstants->GetColor(THEME_CALENDAR_WEEK_COLOR); + theme->calendarTheme_.dayColor = themeConstants->GetColor(THEME_CALENDAR_DAY_COLOR); + theme->calendarTheme_.lunarColor = themeConstants->GetColor(THEME_CALENDAR_LUNAR_COLOR); + theme->calendarTheme_.weekendDayColor = themeConstants->GetColor(THEME_CALENDAR_WEEKEND_DAY_COLOR); + theme->calendarTheme_.weekendLunarColor = themeConstants->GetColor(THEME_CALENDAR_WEEKEND_LUNAR_COLOR); + theme->calendarTheme_.todayColor = themeConstants->GetColor(THEME_CALENDAR_TODAY_DAY_COLOR); + theme->calendarTheme_.todayLunarColor = themeConstants->GetColor(THEME_CALENDAR_TODAY_LUNAR_COLOR); + theme->calendarTheme_.nonCurrentMonthDayColor = + themeConstants->GetColor(THEME_CALENDAR_NON_CURRENT_MONTH_DAY_COLOR); + theme->calendarTheme_.nonCurrentMonthLunarColor = + themeConstants->GetColor(THEME_CALENDAR_NON_CURRENT_MONTH_LUNAR_COLOR); + theme->calendarTheme_.workDayMarkSize = + themeConstants->GetDimension(THEME_CALENDAR_WORK_DAY_MARK_FONT_SIZE); + theme->calendarTheme_.offDayMarkSize = themeConstants->GetDimension(THEME_CALENDAR_OFF_DAY_MARK_FONT_SIZE); + theme->calendarTheme_.workDayMarkColor = themeConstants->GetColor(THEME_CALENDAR_WORK_DAY_MARK_COLOR); + theme->calendarTheme_.offDayMarkColor = themeConstants->GetColor(THEME_CALENDAR_OFF_DAY_MARK_COLOR); + theme->calendarTheme_.nonCurrentMonthWorkDayMarkColor = + themeConstants->GetColor(THEME_CALENDAR_NOT_CURRENT_MONTH_WORK_DAY_MARK_COLOR); + theme->calendarTheme_.nonCurrentMonthOffDayMarkColor = + themeConstants->GetColor(THEME_CALENDAR_NOT_CURRENT_MONTH_OFF_DAY_MARK_COLOR); + theme->calendarTheme_.focusedDayColor = themeConstants->GetColor(THEME_CALENDAR_FOCUSED_DAY_COLOR); + theme->calendarTheme_.focusedLunarColor = themeConstants->GetColor(THEME_CALENDAR_FOCUSED_LUNAR_COLOR); + theme->calendarTheme_.focusedAreaRadius = themeConstants->GetDimension(THEME_CALENDAR_FOCUSED_AREA_RADIUS); + theme->calendarTheme_.focusedAreaBackgroundColor = + themeConstants->GetColor(THEME_CALENDAR_FOCUSED_AREA_BACKGROUND_COLOR); + theme->calendarTheme_.topPadding = themeConstants->GetDimension(THEME_CALENDAR_TOP_PADDING); + theme->calendarTheme_.workStateWidth = themeConstants->GetDimension(THEME_CALENDAR_WORK_STATE_WIDTH); + theme->calendarTheme_.workStateHorizontalMovingDistance = + themeConstants->GetDimension(THEME_CALENDAR_WORK_STATE_HORIZONTAL_MOVING_DISTANCE); + theme->calendarTheme_.workStateVerticalMovingDistance = + themeConstants->GetDimension(THEME_CALENDAR_WORK_STATE_VERTICAL_MOVING_DISTANCE); + theme->calendarTheme_.colSpace = themeConstants->GetDimension(THEME_CALENDAR_COL_SPACE); + theme->calendarTheme_.weekHeight = themeConstants->GetDimension(THEME_CALENDAR_WEEK_HEIGHT); + theme->calendarTheme_.dayHeight = themeConstants->GetDimension(THEME_CALENDAR_DAY_HEIGHT); + theme->calendarTheme_.weekWidth = themeConstants->GetDimension(THEME_CALENDAR_WEEK_WIDTH); + theme->calendarTheme_.dayWidth = themeConstants->GetDimension(THEME_CALENDAR_DAY_WIDTH); + theme->calendarTheme_.weekAndDayRowSpace = + themeConstants->GetDimension(THEME_CALENDAR_WEEK_AND_DAY_ROW_SPACE); + theme->calendarTheme_.dailyFiveRowSpace = themeConstants->GetDimension(THEME_CALENDAR_DAILY_FIVE_ROW_SPACE); + theme->calendarTheme_.dailySixRowSpace = themeConstants->GetDimension(THEME_CALENDAR_DAILY_SIX_ROW_SPACE); + theme->calendarTheme_.gregorianCalendarHeight = + themeConstants->GetDimension(THEME_CALENDAR_GREGORIAN_CALENDAR_HEIGHT); + theme->calendarTheme_.blurAreaBackgroundColor = + themeConstants->GetColor(THEME_CALENDAR_BLUR_AREA_BACKGROUND_COLOR); + theme->calendarTheme_.dayFontWeight = themeConstants->GetString(THEME_CALENDAR_DAY_FONT_WIGHT); + theme->calendarTheme_.lunarDayFontWeight = themeConstants->GetString(THEME_CALENDAR_LUNAR_DAY_FONT_WIGHT); + theme->calendarTheme_.workStateFontWeight = themeConstants->GetString(THEME_CALENDAR_WORK_STATE_FONT_WIGHT); + + theme->cardCalendarTheme_.titleTextColor = themeConstants->GetColor(THEME_CARD_CALENDAR_TITLE_TEXT_COLOR); + theme->cardCalendarTheme_.arrowHeight = themeConstants->GetDimension(THEME_CARD_CALENDAR_ARROW_HEIGHT); + theme->cardCalendarTheme_.arrowWidth = themeConstants->GetDimension(THEME_CARD_CALENDAR_ARROW_WIDTH); + theme->cardCalendarTheme_.buttonHeight = themeConstants->GetDimension(THEME_CARD_CALENDAR_BUTTON_HEIGHT); + theme->cardCalendarTheme_.buttonWidth = themeConstants->GetDimension(THEME_CARD_CALENDAR_BUTTON_WIDTH); + theme->cardCalendarTheme_.titleFontSize = themeConstants->GetDimension(THEME_CARD_CALENDAR_TITLE_FONT_SIZE); + theme->cardCalendarTheme_.weekColor = themeConstants->GetColor(THEME_CARD_CALENDAR_WEEK_COLOR); + theme->cardCalendarTheme_.dayColor = themeConstants->GetColor(THEME_CARD_CALENDAR_DAY_COLOR); + theme->cardCalendarTheme_.weekendDayColor = themeConstants->GetColor(THEME_CARD_CALENDAR_WEEKEND_DAY_COLOR); + theme->cardCalendarTheme_.nonCurrentMonthDayColor = + themeConstants->GetColor(THEME_CARD_CALENDAR_NON_CURRENT_MONTH_DAY_COLOR); + theme->cardCalendarTheme_.focusedAreaBackgroundColor = + themeConstants->GetColor(THEME_CARD_CALENDAR_FOCUS_AREA_BACKGROUND_COLOR); + theme->cardCalendarTheme_.focusedDayColor = themeConstants->GetColor(THEME_CARD_CALENDAR_FOCUS_DAY_COLOR); + theme->cardCalendarTheme_.touchColor = themeConstants->GetColor(THEME_CARD_CALENDAR_TOUCH_COLOR); + theme->cardCalendarTheme_.topPadding = themeConstants->GetDimension(THEME_CARD_CALENDAR_TOP_PADDING); + theme->cardCalendarTheme_.weekHeight = themeConstants->GetDimension(THEME_CARD_CALENDAR_WEEK_HEIGHT); + theme->cardCalendarTheme_.dayHeight = themeConstants->GetDimension(THEME_CARD_CALENDAR_DAY_HEIGHT); + theme->cardCalendarTheme_.weekWidth = themeConstants->GetDimension(THEME_CARD_CALENDAR_WEEK_WIDTH); + theme->cardCalendarTheme_.dayWidth = themeConstants->GetDimension(THEME_CARD_CALENDAR_DAY_WIDTH); + theme->cardCalendarTheme_.focusedAreaRadius = + themeConstants->GetDimension(THEME_CARD_CALENDAR_FOCUS_AREA_RADIUS); + theme->cardCalendarTheme_.weekFontSize = themeConstants->GetDimension(THEME_CARD_CALENDAR_WEEK_FONT_SIZE); + theme->cardCalendarTheme_.dayFontSize = themeConstants->GetDimension(THEME_CARD_CALENDAR_DAY_FONT_SIZE); + theme->cardCalendarTheme_.lunarColor = themeConstants->GetColor(THEME_CARD_CALENDAR_LUNAR_COLOR); + theme->cardCalendarTheme_.weekendLunarColor = + themeConstants->GetColor(THEME_CARD_CALENDAR_WEEKEND_LUNAR_COLOR); + theme->cardCalendarTheme_.nonCurrentMonthLunarColor = + themeConstants->GetColor(THEME_CARD_CALENDAR_NON_CURRENT_MONTH_LUNAR_COLOR); + theme->cardCalendarTheme_.gregorianCalendarHeight = + themeConstants->GetDimension(THEME_CARD_CALENDAR_GREGORIAN_CALENDAR_HEIGHT); + theme->cardCalendarTheme_.lunarDayFontSize = + themeConstants->GetDimension(THEME_CARD_CALENDAR_LUNAR_FONT_SIZE); + theme->cardCalendarTheme_.workDayMarkColor = + themeConstants->GetColor(THEME_CARD_CALENDAR_WORK_DAY_MARK_COLOR); + theme->cardCalendarTheme_.weekAndDayRowSpace = + themeConstants->GetDimension(THEME_CARD_CALENDAR_WEEK_AND_DAY_ROW_SPACE); + theme->cardCalendarTheme_.dailyFiveRowSpace = + themeConstants->GetDimension(THEME_CARD_CALENDAR_DAILY_FIVE_ROW_SPACE); + + auto themeStyle = themeConstants->GetThemeStyle(); + if (themeStyle) { + theme->cardCalendarTheme_.focusedAreaBackgroundColor = + themeStyle->GetAttr(THEME_ATTR_COLOR_ACCENT, Color::BLUE); + theme->cardCalendarTheme_.dayColor = + themeStyle->GetAttr(THEME_ATTR_TEXT_COLOR_PRIMARY, Color::BLACK); + theme->cardCalendarTheme_.weekColor = + themeStyle->GetAttr(THEME_ATTR_TEXT_COLOR_PRIMARY, Color::BLACK); + theme->cardCalendarTheme_.nonCurrentMonthDayColor = + themeStyle->GetAttr(THEME_ATTR_COLOR_TERTIARY, Color::BLACK); + theme->cardCalendarTheme_.weekendDayColor = + themeStyle->GetAttr(THEME_ATTR_TEXT_COLOR_SECONDARY, Color::BLACK); + theme->cardCalendarTheme_.weekendLunarColor = + themeStyle->GetAttr(THEME_ATTR_TEXT_COLOR_SECONDARY, Color::BLACK); + theme->cardCalendarTheme_.nonCurrentMonthLunarColor = + themeStyle->GetAttr(THEME_ATTR_COLOR_FOURTH, Color::BLACK); + theme->cardCalendarTheme_.todayColor = + themeStyle->GetAttr(THEME_ATTR_TEXT_COLOR_PRIMARY_INVERSE, Color::WHITE); + theme->cardCalendarTheme_.todayLunarColor = + themeStyle->GetAttr(THEME_ATTR_TEXT_COLOR_PRIMARY_INVERSE, Color::WHITE); + theme->cardCalendarTheme_.lunarColor = + themeStyle->GetAttr(THEME_ATTR_TEXT_COLOR_SECONDARY, Color::BLACK); + theme->cardCalendarTheme_.markLunarColor = + themeStyle->GetAttr(THEME_ATTR_COLOR_TEXT_PRIMARY_ACTIVATED, Color::BLUE); + theme->cardCalendarTheme_.titleTextColor = + themeStyle->GetAttr(THEME_ATTR_TEXT_COLOR_PRIMARY, Color::BLACK); + } + return theme; + } + }; + + const CalendarThemeStructure& GetCalendarTheme() const + { + return calendarTheme_; + } + + const CalendarThemeStructure& GetCardCalendarTheme() const + { + return cardCalendarTheme_; + } + +protected: + CalendarTheme() = default; + +private: + CalendarThemeStructure calendarTheme_; + CalendarThemeStructure cardCalendarTheme_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CALENDAR_CALENDAR_THEME_H diff --git a/frameworks/core/components/calendar/flutter_render_calendar.cpp b/frameworks/core/components/calendar/flutter_render_calendar.cpp new file mode 100644 index 00000000..105313b8 --- /dev/null +++ b/frameworks/core/components/calendar/flutter_render_calendar.cpp @@ -0,0 +1,600 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/calendar/flutter_render_calendar.h" + +#include "flutter/lib/ui/text/font_collection.h" +#include "flutter/lib/ui/text/paragraph_builder.h" + +#include "base/i18n/localization.h" +#include "base/utils/string_utils.h" +#include "core/common/ace_application_info.h" +#include "core/components/calendar/flutter_render_calendar.h" +#include "core/components/common/properties/text_style.h" +#include "core/components/font/flutter_font_collection.h" +#include "core/pipeline/base/scoped_canvas_state.h" + +namespace OHOS::Ace { +namespace { + +const char ELLIPSIS[] = "..."; +constexpr double CURRENT_MONTH_TRANSPARENT = 0xFF; +constexpr double NON_CURRENT_MONTH_TRANSPARENT = 0x32; +constexpr double WEEKEND_TRANSPARENT = 0x7D; +constexpr double SCHEDULE_MARKER_TRANSPARENT = 0x4B; +constexpr Dimension CARD_CALENDAR_TITLE_HEIGHT = 88.0_vp; + +std::unique_ptr GetTextParagraph(const std::string& text, const txt::TextStyle& textStyle) +{ + txt::ParagraphStyle style; + auto fontCollection = FlutterFontCollection::GetInstance().GetFontCollection(); + if (!fontCollection) { + LOGW("MeasureText: fontCollection is null"); + return nullptr; + } + std::unique_ptr builder = txt::ParagraphBuilder::CreateTxtBuilder(style, fontCollection); + builder->PushStyle(textStyle); + builder->AddText(StringUtils::Str8ToStr16(text)); + return builder->Build(); +} + +void DrawCalendarText( + ScopedCanvas& canvas, const std::string& text, const txt::TextStyle& textStyle, const Rect& boxRect, Rect& textRect) +{ + // The lunar calendar description is truncated by more than three characters. + std::string newText { text }; + auto wText = StringUtils::ToWstring(text); + if (wText.size() > 3) { + wText = wText.substr(0, 2); + newText = StringUtils::ToString(wText); + newText += ELLIPSIS; + } + + auto paragraph = GetTextParagraph(newText, textStyle); + if (!paragraph) { + return; + } + const auto& offset = boxRect.GetOffset(); + paragraph->Layout(boxRect.Width()); + double textWidth = paragraph->GetMaxIntrinsicWidth(); + double textHeight = paragraph->GetHeight(); + // paint text in center of item + double textPaintOffsetX = (boxRect.Width() - textWidth) / 2.0; + double textPaintOffsetY = (boxRect.Height() - textHeight) / 2.0; + paragraph->Paint(canvas->canvas(), offset.GetX() + textPaintOffsetX, offset.GetY() + textPaintOffsetY); + textRect.SetRect(offset.GetX() + textPaintOffsetX, offset.GetY() + textPaintOffsetY, textWidth, textHeight); +} + +void DrawCalendarText( + ScopedCanvas& canvas, const std::string& text, const txt::TextStyle& textStyle, const Rect& boxRect) +{ + Rect textRect; + DrawCalendarText(canvas, text, textStyle, boxRect, textRect); +} + +} // namespace + +RefPtr RenderCalendar::Create() +{ + return AceType::MakeRefPtr(); +} + +RenderLayer FlutterRenderCalendar::GetRenderLayer() +{ + if (!layer_) { + layer_ = AceType::MakeRefPtr( + 0, GetLayoutSize().Width(), 0, GetLayoutSize().Height(), Flutter::Clip::HARD_EDGE); + lastLayoutSize_ = GetLayoutSize(); + } else if (lastLayoutSize_ != GetLayoutSize()) { + layer_->SetClip(0, GetLayoutSize().Width(), 0, GetLayoutSize().Height(), Flutter::Clip::HARD_EDGE); + lastLayoutSize_ = GetLayoutSize(); + } + return AceType::RawPtr(layer_); +} + +void FlutterRenderCalendar::Update(const RefPtr& component) +{ + auto calendarMonth = AceType::DynamicCast(component); + if (!calendarMonth) { + LOGE("calendar component is null"); + return; + } + + textDirection_ = calendarMonth->GetTextDirection(); + auto calendarTheme = calendarMonth->GetCalendarTheme(); + calendarTheme_ = AceApplicationInfo::GetInstance().GetIsCardType() ? calendarTheme->GetCardCalendarTheme() + : calendarTheme->GetCalendarTheme(); + cardCalendar_ = calendarMonth->IsCardCalendar(); + RenderCalendar::Update(component); +} + +void FlutterRenderCalendar::Paint(RenderContext& context, const Offset& offset) +{ + SetCalendarTheme(); + auto canvas = ScopedCanvas::Create(context); + if (!canvas) { + LOGE("paint canvas is null"); + return; + } + if (indexOfContainer_ != calendarController_->GetCurrentIndex()) { + selectedDayNumber_ = 1; + } + DrawWeekAndDates(canvas, offset); +} + +void FlutterRenderCalendar::PerformLayout() +{ + RenderCalendar::PerformLayout(); + topPadding_ = NormalizeToPx(calendarTheme_.topPadding); + weekFontSize_ = NormalizeToPx(calendarTheme_.weekFontSize); + dayFontSize_ = NormalizeToPx(calendarTheme_.dayFontSize); + lunarDayFontSize_ = NormalizeToPx(calendarTheme_.lunarDayFontSize); + workDayMarkSize_ = NormalizeToPx(calendarTheme_.workDayMarkSize); + offDayMarkSize_ = NormalizeToPx(calendarTheme_.offDayMarkSize); + focusedAreaRadius_ = NormalizeToPx(calendarTheme_.focusedAreaRadius); + weekHeight_ = NormalizeToPx(calendarTheme_.weekHeight); + dayHeight_ = NormalizeToPx(calendarTheme_.dayHeight); + weekWidth_ = NormalizeToPx(calendarTheme_.weekWidth); + dayWidth_ = NormalizeToPx(calendarTheme_.dayWidth); + const static int32_t daysOfWeek = 7; + const static int32_t fiveRow = 5; + const static int32_t sixRow = 6; + colSpace_ = cardCalendar_ ? (maxWidth_ - weekWidth_ * daysOfWeek) / (daysOfWeek - 1) + : NormalizeToPx(calendarTheme_.colSpace); + weekAndDayRowSpace_ = NormalizeToPx(calendarTheme_.weekAndDayRowSpace); + dailyFiveRowSpace_ = + cardCalendar_ ? (maxHeight_ - NormalizeToPx(CARD_CALENDAR_TITLE_HEIGHT) - weekWidth_ * fiveRow) / (fiveRow - 1) + : NormalizeToPx(calendarTheme_.dailyFiveRowSpace); + dailySixRowSpace_ = + cardCalendar_ ? (maxHeight_ - NormalizeToPx(CARD_CALENDAR_TITLE_HEIGHT) - weekWidth_ * sixRow) / (sixRow - 1) + : NormalizeToPx(calendarTheme_.dailySixRowSpace); + gregorianCalendarHeight_ = NormalizeToPx(calendarTheme_.gregorianCalendarHeight); + workStateWidth_ = NormalizeToPx(calendarTheme_.workStateWidth); + workStateHorizontalMovingDistance_ = NormalizeToPx(calendarTheme_.workStateHorizontalMovingDistance); + workStateVerticalMovingDistance_ = NormalizeToPx(calendarTheme_.workStateVerticalMovingDistance); + if (cardCalendar_ && (maxHeight_ - NormalizeToPx(CARD_CALENDAR_TITLE_HEIGHT)) < (dayWidth_ * rowCount_)) { + needShrink_ = true; + focusedAreaRadius_ = (maxHeight_ - NormalizeToPx(CARD_CALENDAR_TITLE_HEIGHT)) / (rowCount_ * 2); + } else { + needShrink_ = false; + } +} + +void FlutterRenderCalendar::DrawWeekAndDates(ScopedCanvas& canvas, const Offset& offset) +{ + uint32_t totalWeek = weekNumbers_.size(); + uint32_t daysCount = rowCount_ * totalWeek; + if (calendarDays_.size() < daysCount) { + LOGD("not full data"); + return; + } + + DrawWeek(canvas, offset); + + int32_t dateNumber = 0; + double dailyRowSpace = 0.0; + static const Dimension dateOffset = 4.0_vp; + double dayNumberStartY = topPadding_ + weekHeight_ + weekAndDayRowSpace_; + if (rowCount_ == 5) { + dailyRowSpace = dailyFiveRowSpace_; + } else if (rowCount_ == 6) { + dailyRowSpace = dailySixRowSpace_; + } + for (int32_t row = 0; row < rowCount_; row++) { + double y = row * (dayHeight_ + dailyRowSpace) + dayNumberStartY; + for (uint32_t column = 0; column < totalWeek; column++) { + const auto& day = calendarDays_[dateNumber++]; + double x = textDirection_ == TextDirection::LTR ? column * (dayWidth_ + colSpace_) + : (totalWeek - column - 1) * (dayWidth_ + colSpace_); + auto dayOffset = Offset(x, y); + cardCalendar_ + ? DrawCardCalendar(canvas, offset + Offset(0, NormalizeToPx(dateOffset)), dayOffset, day, dateNumber) + : DrawTvCalendar(canvas, offset, dayOffset, day, dateNumber); + } + } +} + +void FlutterRenderCalendar::DrawFocusedArea(ScopedCanvas& canvas, const Offset& offset, double x, double y) const +{ + auto pipelineContext = context_.Upgrade(); + if (!pipelineContext) { + LOGE("pipeline context"); + return; + } + // start focus animation + Offset circleStart = + GetGlobalOffset() + Offset(x - (focusedAreaRadius_ * 2 - dayWidth_) / 2, y - NormalizeToPx(1.0_vp)); + RRect focusAnimationRRect = + RRect::MakeRRect(Rect(0.0, 0.0, focusedAreaRadius_ * 2, focusedAreaRadius_ * 2), Radius(focusedAreaRadius_)); + pipelineContext->ShowFocusAnimation(focusAnimationRRect, Color::WHITE, circleStart); + + // draw focus background circle + flutter::Paint paint; + flutter::PaintData paintData; + paint.paint()->setAntiAlias(true); + paint.paint()->setColor(focusedAreaBackgroundColor_); + Offset circleCenter = Offset(x - (focusedAreaRadius_ * 2 - dayWidth_) / 2 + focusedAreaRadius_, + y - NormalizeToPx(1.0_vp) + focusedAreaRadius_); + Offset bgCircleStart = offset + circleCenter; + canvas->drawCircle(bgCircleStart.GetX(), bgCircleStart.GetY(), focusedAreaRadius_, paint, paintData); +} + +void FlutterRenderCalendar::DrawWeek(ScopedCanvas& canvas, const Offset& offset) const +{ + uint32_t totalWeek = weekNumbers_.size(); + txt::TextStyle weekTextStyle; + weekTextStyle.color = weekColor_; + weekTextStyle.font_size = weekFontSize_; + if (cardCalendar_) { + weekTextStyle.font_weight = static_cast(FontWeight::W500); + } + weekTextStyle.locale = Localization::GetInstance()->GetFontLocale(); + static const int32_t daysOfWeek = 7; + auto startDayOfWeek = dataAdapter_->GetStartDayOfWeek(); + for (uint32_t column = 0; column < totalWeek; column++) { + double x = textDirection_ == TextDirection::LTR ? column * (weekWidth_ + colSpace_) + : (totalWeek - column - 1) * (weekWidth_ + colSpace_); + Offset weekNumberOffset = offset + Offset(x, topPadding_); + Rect boxRect { weekNumberOffset.GetX(), weekNumberOffset.GetY(), weekWidth_, weekHeight_ }; + std::string newText { weekNumbers_[(startDayOfWeek + 1) % daysOfWeek] }; + auto wText = StringUtils::ToWstring(weekNumbers_[column]); + if (wText.size() > 3) { + wText = wText.substr(0, 3); + newText = StringUtils::ToString(wText); + } + DrawCalendarText(canvas, newText, weekTextStyle, boxRect); + ++startDayOfWeek; + } +} + +void FlutterRenderCalendar::DrawBlurArea(ScopedCanvas& canvas, const Offset& offset, double x, double y) const +{ + auto pipelineContext = GetContext().Upgrade(); + if (!pipelineContext) { + LOGE("pipeline context is null"); + return; + } + // start focus animation + flutter::Paint paint; + flutter::PaintData paintData; + paint.paint()->setAntiAlias(true); + paint.paint()->setColor(blurAreaBackgroundColor_); + Offset circleCenter = Offset(x - (focusedAreaRadius_ * 2 - dayWidth_) / 2 + focusedAreaRadius_, + y - NormalizeToPx(1.0_vp) + focusedAreaRadius_); + Offset bgCircleStart = offset + circleCenter; + canvas->drawCircle(bgCircleStart.GetX(), bgCircleStart.GetY(), focusedAreaRadius_, paint, paintData); +} + +void FlutterRenderCalendar::PaintDay( + ScopedCanvas& canvas, const Offset& offset, const CalendarDay& day, const txt::TextStyle& textStyle) const +{ + // paint day + Rect boxRect { offset.GetX(), offset.GetY(), dayWidth_, gregorianCalendarHeight_ }; + Rect textRect; + auto dayStr = std::to_string(day.day); + dayStr = Localization::GetInstance()->NumberFormat(day.day); + DrawCalendarText(canvas, dayStr, textStyle, boxRect, textRect); + + txt::TextStyle workStateStyle; + if (!day.dayMark.empty() && showHoliday_) { + if (cardCalendar_) { + InitWorkStateStyle(day, offset, workStateStyle, boxRect); + } else { + workStateStyle.font_weight = static_cast(workStateFontWeight_); + workStateStyle.locale = Localization::GetInstance()->GetFontLocale(); + boxRect = { textRect.GetOffset().GetX() + textRect.Width() - workStateHorizontalMovingDistance_, + textRect.GetOffset().GetY() + textRect.Height() - workStateVerticalMovingDistance_, workStateWidth_, + workStateWidth_ }; + if (day.month.month == currentMonth_.month) { + if (day.dayMark == "work") { + workStateStyle.font_size = workDayMarkSize_; + workStateStyle.color = workDayMarkColor_; + } else if (day.dayMark == "off") { + workStateStyle.font_size = offDayMarkSize_; + workStateStyle.color = offDayMarkColor_; + } + } else { + if (day.dayMark == "work") { + workStateStyle.font_size = workDayMarkSize_; + workStateStyle.color = nonCurrentMonthWorkDayMarkColor_; + } else if (day.dayMark == "off") { + workStateStyle.font_size = offDayMarkSize_; + workStateStyle.color = nonCurrentMonthOffDayMarkColor_; + } + } + if (day.focused) { + workStateStyle.color = Color::BLACK.GetValue(); + } + } + DrawCalendarText(canvas, day.dayMarkValue, workStateStyle, boxRect); + } +} + +void FlutterRenderCalendar::PaintLunarDay( + ScopedCanvas& canvas, const Offset& offset, const CalendarDay& day, const txt::TextStyle& textStyle) const +{ + Rect boxRect; + static const Dimension cardLunarHeight = 14.0_vp; + cardCalendar_ ? boxRect = { offset.GetX(), offset.GetY(), dayWidth_, NormalizeToPx(cardLunarHeight) } + : boxRect = { offset.GetX(), offset.GetY(), dayWidth_, dayHeight_ - gregorianCalendarHeight_ }; + DrawCalendarText(canvas, day.lunarDay, textStyle, boxRect); +} + +void FlutterRenderCalendar::SetNonFocusStyle( + const CalendarDay& day, txt::TextStyle& dateTextStyle, txt::TextStyle& lunarTextStyle) +{ + SkColor dateTextColor; + SkColor lunarTextColor; + if (day.month.month != currentMonth_.month) { + dateTextColor = nonCurrentMonthDayColor_; + lunarTextColor = day.markLunarDay ? SkColorSetA(markLunarColor_, WEEKEND_TRANSPARENT) + : nonCurrentMonthLunarColor_; + } else if (IsToday(day)) { + dateTextColor = todayDayColor_; + lunarTextColor = todayLunarColor_; + } else if (day.weekend) { + dateTextColor = weekendDayColor_; + lunarTextColor = + day.markLunarDay ? markLunarColor_ : weekendLunarColor_; + } else { + dateTextColor = dayColor_; + lunarTextColor = day.markLunarDay ? markLunarColor_ : lunarColor_; + } + + dateTextStyle.color = dateTextColor; + lunarTextStyle.color = lunarTextColor; +} + +void FlutterRenderCalendar::DrawTouchedArea(ScopedCanvas& canvas, const Offset& offset, double x, double y) const +{ + flutter::Paint paint; + flutter::PaintData paintData; + paint.paint()->setAntiAlias(true); + paint.paint()->setColor(touchColor_); + Offset circleCenter = Offset(x - (focusedAreaRadius_ * 2 - dayWidth_) / 2 + focusedAreaRadius_, + y - NormalizeToPx(1.0_vp) + focusedAreaRadius_); + Offset bgCircleStart = offset + circleCenter; + canvas->drawCircle(bgCircleStart.GetX(), bgCircleStart.GetY(), focusedAreaRadius_, paint, paintData); +} + +void FlutterRenderCalendar::DrawCardCalendar( + ScopedCanvas& canvas, const Offset& offset, const Offset& dayOffset, const CalendarDay& day, int32_t dateNumber) +{ + txt::TextStyle dateTextStyle; + txt::TextStyle lunarTextStyle; + InitTextStyle(dateTextStyle, lunarTextStyle); + SetNonFocusStyle(day, dateTextStyle, lunarTextStyle); + dateTextStyle.locale = Localization::GetInstance()->GetFontLocale(); + auto x = dayOffset.GetX(); + auto y = dayOffset.GetY(); + if (IsToday(day) && (day.month.month == currentMonth_.month)) { + dateTextStyle.color = focusedDayColor_; + lunarTextStyle.color = focusedDayColor_; + DrawFocusedArea(canvas, offset, x, y); + } + + if (day.touched) { + DrawTouchedArea(canvas, offset, x, y); + } + + if (needShrink_) { + Offset dateNumberOffset = offset + Offset(x, y + (focusedAreaRadius_ - gregorianCalendarHeight_ / 2)); + PaintDay(canvas, dateNumberOffset, day, dateTextStyle); + return; + } + + static const Dimension dayYAxisOffset = 4.0_vp; + Offset dateNumberOffset = offset + Offset(x, y + NormalizeToPx(dayYAxisOffset)); + PaintDay(canvas, dateNumberOffset, day, dateTextStyle); + + static const Dimension lunarDayYAxisOffset = 23.0_vp; + Offset lunarDayOffset = offset + Offset(x, y + NormalizeToPx(lunarDayYAxisOffset)); + PaintLunarDay(canvas, lunarDayOffset, day, lunarTextStyle); + + if (day.isFirstOfLunar) { + static const Dimension underscoreXAxisOffset = 12.0_vp; + static const Dimension underscoreYAxisOffset = 36.0_vp; + Offset underscoreOffset = + offset + Offset(x + NormalizeToPx(underscoreXAxisOffset), y + NormalizeToPx(underscoreYAxisOffset)); + PaintUnderscore(canvas, underscoreOffset, day); + } + + if (day.hasSchedule) { + static const Dimension scheduleMarkerXAxisOffset = 22.0_vp; + static const Dimension scheduleMarkerYAxisOffset = 40.0_vp; + Offset scheduleMarkerOffset = + offset + Offset(x + NormalizeToPx(scheduleMarkerXAxisOffset), y + NormalizeToPx(scheduleMarkerYAxisOffset)); + PaintScheduleMarker(canvas, scheduleMarkerOffset, day); + } +} + +void FlutterRenderCalendar::DrawTvCalendar( + ScopedCanvas& canvas, const Offset& offset, const Offset& dayOffset, const CalendarDay& day, int32_t dateNumber) +{ + txt::TextStyle dateTextStyle; + txt::TextStyle lunarTextStyle; + InitTextStyle(dateTextStyle, lunarTextStyle); + dateTextStyle.locale = Localization::GetInstance()->GetFontLocale(); + lunarTextStyle.locale = Localization::GetInstance()->GetFontLocale(); + + auto renderSwiper = calendarController_->GetRenderSwiper(); + if (!renderSwiper) { + return; + } + int32_t selectedDay = selectedDayNumber_ + firstDayIndex_ - 1; + auto x = dayOffset.GetX(); + auto y = dayOffset.GetY(); + if (day.focused && day.month.month == currentMonth_.month && !renderSwiper->GetMoveStatus() && + indexOfContainer_ == calendarController_->GetCurrentIndex()) { + dateTextStyle.color = focusedDayColor_; + lunarTextStyle.color = focusedLunarColor_; + DrawFocusedArea(canvas, offset, x, y); + } else { + SetNonFocusStyle(day, dateTextStyle, lunarTextStyle); + } + + if (selectedDay == (dateNumber - 1) && !calendarFocusStatus_ && !renderSwiper->GetMoveStatus() && + hasRequestFocus_) { + DrawBlurArea(canvas, offset, x, y); + } + + if (dataAdapter_->ShowLunar() && !day.lunarDay.empty()) { + // paint day + Offset dateNumberOffset = offset + Offset(x, y); + PaintDay(canvas, dateNumberOffset, day, dateTextStyle); + + // paint lunar day + Offset lunarDayOffset = offset + Offset(x, y + gregorianCalendarHeight_); + PaintLunarDay(canvas, lunarDayOffset, day, lunarTextStyle); + } else { + // when there is no lunar calendar, the date is displayed in the center + Offset dateNumberOffset = offset + Offset(x, y + (focusedAreaRadius_ - gregorianCalendarHeight_ / 2)); + PaintDay(canvas, dateNumberOffset, day, dateTextStyle); + } +} + +void FlutterRenderCalendar::InitTextStyle(txt::TextStyle& dateTextStyle, txt::TextStyle& lunarTextStyle) +{ + dateTextStyle.font_size = dayFontSize_; + dateTextStyle.font_weight = static_cast(dayFontWeight_); + + lunarTextStyle.font_size = lunarDayFontSize_; + lunarTextStyle.font_weight = static_cast(lunarDayFontWeight_); +} + +bool FlutterRenderCalendar::IsToday(const CalendarDay& day) const +{ + auto today = dataAdapter_->GetToday(); + return today.month == day.month && today.day == day.day; +} + +void FlutterRenderCalendar::PaintUnderscore(ScopedCanvas& canvas, const Offset& offset, const CalendarDay& day) +{ + static const Dimension underscoreWidth = 1.0_vp; + static const Dimension underscoreLength = 20.0_vp; + auto skCanvas = canvas.GetSkCanvas(); + SkPaint paint; + SkColor color; + if (day.month.month != currentMonth_.month) { + color = SkColorSetA(focusedAreaBackgroundColor_, NON_CURRENT_MONTH_TRANSPARENT); + } else if (IsToday(day)) { + color = focusedDayColor_; + } else if (day.weekend) { + color = SkColorSetA(focusedAreaBackgroundColor_, WEEKEND_TRANSPARENT); + } else { + color = SkColorSetA(focusedAreaBackgroundColor_, CURRENT_MONTH_TRANSPARENT); + } + paint.setColor(color); + paint.setStyle(SkPaint::Style::kStroke_Style); + paint.setStrokeWidth(NormalizeToPx(underscoreWidth)); + skCanvas->drawLine(offset.GetX(), offset.GetY() + NormalizeToPx(underscoreWidth) / 2, + offset.GetX() + NormalizeToPx(underscoreLength), offset.GetY() + NormalizeToPx(underscoreWidth) / 2, paint); +} + +void FlutterRenderCalendar::PaintScheduleMarker(ScopedCanvas& canvas, const Offset& offset, const CalendarDay& day) +{ + static const Dimension scheduleMarkerRadius = 2.0_vp; + auto skCanvas = canvas.GetSkCanvas(); + SkPaint paint; + SkColor color; + if (day.month.month != currentMonth_.month) { + color = SkColorSetA(focusedAreaBackgroundColor_, NON_CURRENT_MONTH_TRANSPARENT); + } else if (IsToday(day)) { + color = focusedDayColor_; + } else if (day.weekend) { + color = SkColorSetA(focusedAreaBackgroundColor_, SCHEDULE_MARKER_TRANSPARENT); + } else { + color = SkColorSetA(focusedAreaBackgroundColor_, SCHEDULE_MARKER_TRANSPARENT); + } + paint.setColor(color); + skCanvas->drawCircle(offset.GetX(), offset.GetY(), NormalizeToPx(scheduleMarkerRadius), paint); +} + +void FlutterRenderCalendar::InitWorkStateStyle( + const CalendarDay& day, const Offset& offset, txt::TextStyle& workStateStyle, Rect& boxRect) const +{ + workStateStyle.font_weight = static_cast(FontWeight::W500); + workStateStyle.locale = Localization::GetInstance()->GetFontLocale(); + static const Dimension workStateWidth = 8.0_vp; + static const int32_t twoDigitMaker = 10; + static const Dimension OneDigitXAxisOffset = 26.0_vp; + static const Dimension workStateYAxisOffset = 6.0_vp; + static const Dimension twoDigitXAxisOffset = 31.0_vp; + if (day.day < twoDigitMaker) { + boxRect = { offset.GetX() + NormalizeToPx(OneDigitXAxisOffset), + offset.GetY() + NormalizeToPx(workStateYAxisOffset), NormalizeToPx(workStateWidth), + NormalizeToPx(workStateWidth) }; + } else { + boxRect = { offset.GetX() + NormalizeToPx(twoDigitXAxisOffset), + offset.GetY() + NormalizeToPx(workStateYAxisOffset), NormalizeToPx(workStateWidth), + NormalizeToPx(workStateWidth) }; + } + + workStateStyle.font_size = NormalizeToPx(workStateWidth); + + if (day.month.month != currentMonth_.month) { + auto offColor = SkColorSetA(markLunarColor_, WEEKEND_TRANSPARENT); + auto workColor = SkColorSetA(workDayMarkColor_, WEEKEND_TRANSPARENT); + SetWorkStateStyle(day, workColor, offColor, workStateStyle); + } else if (IsToday(day)) { + SetWorkStateStyle(day, focusedDayColor_, focusedDayColor_, workStateStyle); + } else if (day.weekend) { + auto offColor = markLunarColor_; + auto workColor = workDayMarkColor_; + SetWorkStateStyle(day, workColor, offColor, workStateStyle); + } else { + SetWorkStateStyle(day, workDayMarkColor_, focusedAreaBackgroundColor_, workStateStyle); + } +} + +void FlutterRenderCalendar::SetWorkStateStyle( + const CalendarDay& day, SkColor workColor, SkColor offColor, txt::TextStyle& workStateStyle) const +{ + if (day.dayMark == "work") { + workStateStyle.color = workColor; + } else if (day.dayMark == "off") { + workStateStyle.color = offColor; + } +} + +void FlutterRenderCalendar::SetCalendarTheme() +{ + auto theme = GetTheme(); + auto calendarTheme = cardCalendar_ ? theme->GetCardCalendarTheme() : theme->GetCalendarTheme(); + touchColor_ = SkColor(calendarTheme.touchColor.GetValue()); + weekColor_ = SkColor(calendarTheme.weekColor.GetValue()); + dayColor_ = SkColor(calendarTheme.dayColor.GetValue()); + lunarColor_ = SkColor(calendarTheme.lunarColor.GetValue()); + weekendDayColor_ = SkColor(calendarTheme.weekendDayColor.GetValue()); + weekendLunarColor_ = SkColor(calendarTheme.weekendLunarColor.GetValue()); + todayDayColor_ = SkColor(calendarTheme.todayColor.GetValue()); + todayLunarColor_ = SkColor(calendarTheme.todayLunarColor.GetValue()); + nonCurrentMonthDayColor_ = SkColor(calendarTheme.nonCurrentMonthDayColor.GetValue()); + nonCurrentMonthLunarColor_ = SkColor(calendarTheme.nonCurrentMonthLunarColor.GetValue()); + workDayMarkColor_ = SkColor(calendarTheme.workDayMarkColor.GetValue()); + offDayMarkColor_ = SkColor(calendarTheme.offDayMarkColor.GetValue()); + nonCurrentMonthWorkDayMarkColor_ = SkColor(calendarTheme.nonCurrentMonthOffDayMarkColor.GetValue()); + nonCurrentMonthOffDayMarkColor_ = SkColor(calendarTheme.nonCurrentMonthOffDayMarkColor.GetValue()); + focusedDayColor_ = SkColor(calendarTheme.focusedDayColor.GetValue()); + focusedLunarColor_ = SkColor(calendarTheme.focusedLunarColor.GetValue()); + focusedAreaBackgroundColor_ = SkColor(calendarTheme.focusedAreaBackgroundColor.GetValue()); + blurAreaBackgroundColor_ = SkColor(calendarTheme.blurAreaBackgroundColor.GetValue()); + markLunarColor_ = SkColor(calendarTheme.markLunarColor.GetValue()); + dayFontWeight_ = StringUtils::StringToFontWeight(calendarTheme.dayFontWeight); + lunarDayFontWeight_ = StringUtils::StringToFontWeight(calendarTheme.lunarDayFontWeight); + workStateFontWeight_ = StringUtils::StringToFontWeight(calendarTheme.workStateFontWeight); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/calendar/flutter_render_calendar.h b/frameworks/core/components/calendar/flutter_render_calendar.h new file mode 100644 index 00000000..9c517f46 --- /dev/null +++ b/frameworks/core/components/calendar/flutter_render_calendar.h @@ -0,0 +1,110 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CALENDAR_FLUTTER_RENDER_CALENDAR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CALENDAR_FLUTTER_RENDER_CALENDAR_H + +#include "third_party/skia/include/core/SkColor.h" +#include "third_party/txt/src/txt/text_style.h" + +#include "core/components/calendar/render_calendar.h" +#include "core/pipeline/layers/clip_layer.h" + +namespace OHOS::Ace { + +class ScopedCanvas; + +class FlutterRenderCalendar : public RenderCalendar { + DECLARE_ACE_TYPE(FlutterRenderCalendar, RenderCalendar); + +public: + FlutterRenderCalendar() = default; + ~FlutterRenderCalendar() override = default; + + RenderLayer GetRenderLayer() override; + void Update(const RefPtr& component) override; + void Paint(RenderContext& context, const Offset& offset) override; + void PerformLayout() override; + +private: + void DrawWeekAndDates(ScopedCanvas& canvas, const Offset& offset); + void DrawFocusedArea(ScopedCanvas& canvas, const Offset& offset, double x, double y) const; + void DrawWeek(ScopedCanvas& canvas, const Offset& offset) const; + void DrawBlurArea(ScopedCanvas& canvas, const Offset& offset, double x, double y) const; + void DrawTouchedArea(ScopedCanvas& canvas, const Offset& offset, double x, double y) const; + void PaintDay( + ScopedCanvas& canvas, const Offset& offset, const CalendarDay& day, const txt::TextStyle& textStyle) const; + void PaintLunarDay( + ScopedCanvas& canvas, const Offset& offset, const CalendarDay& day, const txt::TextStyle& textStyle) const; + void SetNonFocusStyle(const CalendarDay& day, txt::TextStyle& dateTextStyle, txt::TextStyle& lunarTextStyle); + void DrawCardCalendar(ScopedCanvas& canvas, const Offset& offset, const Offset& dayOffset, const CalendarDay& day, + int32_t dateNumber); + void DrawTvCalendar(ScopedCanvas& canvas, const Offset& offset, const Offset& dayOffset, const CalendarDay& day, + int32_t dateNumber); + void InitTextStyle(txt::TextStyle& dateTextStyle, txt::TextStyle& lunarTextStyle); + bool IsToday(const CalendarDay& day) const; + void PaintUnderscore(ScopedCanvas& canvas, const Offset& offset, const CalendarDay& day); + void PaintScheduleMarker(ScopedCanvas& canvas, const Offset& offset, const CalendarDay& day); + void InitWorkStateStyle( + const CalendarDay& day, const Offset& offset, txt::TextStyle& workStateStyle, Rect& boxRect) const; + void SetWorkStateStyle( + const CalendarDay& day, SkColor workColor, SkColor offColor, txt::TextStyle& workStateStyle) const; + void SetCalendarTheme(); + + bool needShrink_ = false; + double weekFontSize_ = 0.0; + double dayFontSize_ = 0.0; + double lunarDayFontSize_ = 0.0; + double workDayMarkSize_ = 0.0; + double offDayMarkSize_ = 0.0; + double focusedAreaRadius_ = 0.0; + double topPadding_ = 0.0; + double weekWidth_ = 0.0; + double weekAndDayRowSpace_ = 0.0; + double gregorianCalendarHeight_ = 0.0; + double workStateWidth_ = 0.0; + double workStateHorizontalMovingDistance_ = 0.0; + double workStateVerticalMovingDistance_ = 0.0; + + SkColor weekColor_; + SkColor touchColor_; + SkColor dayColor_; + SkColor lunarColor_; + SkColor weekendDayColor_; + SkColor weekendLunarColor_; + SkColor todayDayColor_; + SkColor todayLunarColor_; + SkColor nonCurrentMonthDayColor_; + SkColor nonCurrentMonthLunarColor_; + SkColor workDayMarkColor_; + SkColor offDayMarkColor_; + SkColor nonCurrentMonthWorkDayMarkColor_; + SkColor nonCurrentMonthOffDayMarkColor_; + SkColor focusedDayColor_; + SkColor focusedLunarColor_; + SkColor focusedAreaBackgroundColor_; + SkColor blurAreaBackgroundColor_; + SkColor markLunarColor_; + + RefPtr layer_; + Size lastLayoutSize_; + FontWeight dayFontWeight_ = FontWeight::W500; + FontWeight lunarDayFontWeight_ = FontWeight::W500; + FontWeight workStateFontWeight_ = FontWeight::W400; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CALENDAR_FLUTTER_RENDER_CALENDAR_H diff --git a/frameworks/core/components/calendar/focusable_grid.cpp b/frameworks/core/components/calendar/focusable_grid.cpp new file mode 100644 index 00000000..38a47525 --- /dev/null +++ b/frameworks/core/components/calendar/focusable_grid.cpp @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/calendar/focusable_grid.h" + +#include "base/log/log.h" +#include "core/common/ace_application_info.h" + +namespace OHOS::Ace { +namespace { + +constexpr bool HORIZONTAL = false; +constexpr bool VERTICAL = true; +constexpr bool FORWARD = false; +constexpr bool REVERSE = true; + +// first bool mean if vertical, second bool mean if reverse +// false, false --> RIGHT +// false, true --> LEFT +// true, false --> DOWN +// true, true ---> UP +// This map will adapter the Grid FlexDirection with Key Direction. +const std::map> DIRECTION_MAP = { + { HORIZONTAL, { { FORWARD, KeyDirection::RIGHT }, { REVERSE, KeyDirection::LEFT } } }, + { VERTICAL, { { FORWARD, KeyDirection::DOWN }, { REVERSE, KeyDirection::UP } } } +}; + +} // namespace + +int32_t FocusableGrid::RequestNextFocus(bool vertical, bool reverse) +{ + KeyDirection key = DIRECTION_MAP.at(vertical).at(reverse); + int32_t index = FocusMove(key); + if (index < 0) { + return index; + } + return focusIndex_; +} + +// Handle direction key move +int32_t FocusableGrid::FocusMove(KeyDirection direction) +{ + int32_t nextRow = focusRow_; + int32_t nextCol = focusCol_; + int32_t next = focusIndex_; + while (focusIndex_ == next || next < 0) { + switch (direction) { + case KeyDirection::UP: + --nextRow; + break; + case KeyDirection::DOWN: + ++nextRow; + break; + case KeyDirection::LEFT: + AceApplicationInfo::GetInstance().IsRightToLeft() ? ++nextCol : --nextCol; + break; + case KeyDirection::RIGHT: + AceApplicationInfo::GetInstance().IsRightToLeft() ? --nextCol : ++nextCol; + break; + default: + return -1; + } + if (nextCol < 0) { + if (nextRow == 0) { + FocusChanged(focusIndex_, -1); + return 1; + } + --nextRow; + nextCol = colCount_ - 1; + } + if (nextCol >= colCount_) { + if (nextRow == rowCount_ - 1) { + FocusChanged(focusIndex_, GetIndexByGrid(nextRow, nextCol)); + return 1; + } + // when move to the end of row, move to newline + ++nextRow; + nextCol = 0; + } + if (nextRow < 0 || nextCol < 0 || nextRow >= rowCount_ || nextCol >= colCount_) { + return -1; + } + next = GetIndexByGrid(nextRow, nextCol); + } + focusRow_ = nextRow; + focusCol_ = nextCol; + if (next < firstDayIndex_ && direction == KeyDirection::UP) { + LOGD("focus move out of calendar"); + return -1; + } + FocusChanged(focusIndex_, next); + focusIndex_ = next; + selectedDayNumber_ = next - firstDayIndex_ + 1; + return next; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/calendar/focusable_grid.h b/frameworks/core/components/calendar/focusable_grid.h new file mode 100644 index 00000000..b39033ff --- /dev/null +++ b/frameworks/core/components/calendar/focusable_grid.h @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CALENDAR_FOCUSABLE_GRID_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CALENDAR_FOCUSABLE_GRID_H + +#include + +#include "base/memory/ace_type.h" +#include "core/components/common/layout/constants.h" + +namespace OHOS::Ace { + +class FocusableGrid : public virtual AceType { + DECLARE_ACE_TYPE(FocusableGrid, AceType); + +public: + int32_t RequestNextFocus(bool vertical, bool reverse); + +protected: + virtual int32_t GetIndexByGrid(int32_t row, int32_t column) = 0; + virtual void FocusChanged(int32_t oldIndex, int32_t newIndex) {} + + int32_t focusRow_ = -1; + int32_t focusCol_ = -1; + int32_t colCount_ = 0; + int32_t rowCount_ = 0; + int32_t focusIndex_ = 0; + int32_t firstDayIndex_ = 0; + int32_t selectedDayNumber_ = 1; + +private: + // Handle direction key move + int32_t FocusMove(KeyDirection direction); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CALENDAR_FOCUSABLE_GRID_H diff --git a/frameworks/core/components/calendar/render_calendar.cpp b/frameworks/core/components/calendar/render_calendar.cpp new file mode 100644 index 00000000..8c9d1283 --- /dev/null +++ b/frameworks/core/components/calendar/render_calendar.cpp @@ -0,0 +1,307 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/calendar/render_calendar.h" + +#include "base/i18n/localization.h" +#include "base/log/event_report.h" +#include "core/components/calendar/calendar_component.h" +#include "core/event/ace_event_helper.h" + +namespace OHOS::Ace { +namespace { + +constexpr int32_t CALENDAR_MIN_WIDTH = 350; +constexpr int32_t CALENDAR_MIN_HEIGHT = 230; +constexpr int32_t DAYS_PER_WEEK = 7; + +} // namespace + +RenderCalendar::RenderCalendar() +{ + weekNumbers_ = Localization::GetInstance()->GetWeekdays(true); +} + +void RenderCalendar::Update(const RefPtr& component) +{ + auto calendarMonth = AceType::DynamicCast(component); + if (!calendarMonth) { + LOGE("calendar month component is null"); + EventReport::SendRenderException(RenderExcepType::RENDER_COMPONENT_ERR); + return; + } + + auto context = context_.Upgrade(); + if (!context) { + return; + } + + selectedChangeEvent_ = + AceAsyncEvent::Create(calendarMonth->GetSelectedChangeEvent(), context_); + indexOfContainer_ = calendarMonth->GetIndexOfContainer(); + calendarController_ = calendarMonth->GetCalendarController(); + dataAdapter_ = calendarController_->GetDataAdapter(); + colCount_ = weekNumbers_.size(); + dataAdapter_->RegisterDataListener(AceType::Claim(this)); + clickDetector_ = AceType::MakeRefPtr(); + clickDetector_->SetOnClick([weak = WeakClaim(this)](const ClickInfo& info) { + auto calendar = weak.Upgrade(); + if (calendar) { + calendar->HandleClick(info.GetLocalLocation()); + } + }); + OnDataChanged(dataAdapter_->GetDayOfMonthCache()[indexOfContainer_]); + MarkNeedLayout(); +} + +void RenderCalendar::OnPaintFinish() +{ + UpdateAccessibility(); +} + +void RenderCalendar::UpdateAccessibility() +{ + auto node = GetAccessibilityNode().Upgrade(); + if (!node) { + return; + } + if (!calendarController_) { + return; + } + auto today = calendarController_->GetDataAdapter()->GetToday(); + DateTime dateTime; + dateTime.year = today.month.year; + dateTime.month = today.month.month; + dateTime.day = today.day; + auto dateText = Localization::GetInstance()->FormatDateTime(dateTime, "yyyyMMdd"); + node->SetText(dateText); +} + +void RenderCalendar::PerformLayout() +{ + Size calendarMinSize(CALENDAR_MIN_WIDTH, CALENDAR_MIN_HEIGHT); + LayoutParam innerLayout = GetLayoutParam(); + Size maxSize = innerLayout.GetMaxSize(); + Size layoutSize; + if (maxSize.IsInfinite()) { + Size minSize = innerLayout.GetMinSize(); + layoutSize = Size( + std::max(minSize.Width(), calendarMinSize.Width()), std::max(minSize.Height(), calendarMinSize.Height())); + } else { + layoutSize = Size( + std::max(maxSize.Width(), calendarMinSize.Width()), std::max(maxSize.Height(), calendarMinSize.Height())); + } + + SetLayoutSize(layoutSize); + maxWidth_ = maxSize.Width(); + maxHeight_ = maxSize.Height(); +} + +void RenderCalendar::OnDataChanged(const CalendarDaysOfMonth& daysOfMonth) +{ + if (currentMonth_ == daysOfMonth.month) { + if (!cardCalendar_ && focusIndex_ >= 0 && focusIndex_ < static_cast(calendarDays_.size()) && + calendarDays_[focusIndex_].focused) { + calendarDays_ = daysOfMonth.days; + calendarDays_[focusIndex_].focused = true; + } else { + calendarDays_ = daysOfMonth.days; + } + MarkNeedRender(); + return; + } + calendarDays_ = daysOfMonth.days; + currentMonth_ = daysOfMonth.month; + firstDayIndex_ = daysOfMonth.firstDayIndex; + lastDayIndex_ = daysOfMonth.lastDayIndex; + if (GetCalendarController()->GetFirstEnter()) { + selectedDayNumber_ = daysOfMonth.today - firstDayIndex_ + 1; + GetCalendarController()->SetFirstEnter(false); + OnStatusChanged(RenderStatus::FOCUS); + } + // the number of rows will be 5 or 6, and week number height is half of the date number + rowCount_ = colCount_ ? daysOfMonth.days.size() / colCount_ : 0; + calendarController_->JumpMonth(); + hasRequestFocus_ = false; + cardCalendar_ ? MarkNeedLayout() : MarkNeedRender(); +} + +void RenderCalendar::OnSelectedDay(int32_t selected) +{ + selectedDayNumber_ = selected; + CalendarDay day; + if (selected < 0) { + day.index = lastDayIndex_; + } else { + day.index = selectedDayNumber_ + firstDayIndex_ - 1; + } + if (!cardCalendar_) { + if (calendarController_->GetFirstLoad()) { + calendarController_->SetFirstLoad(false); + } else { + OnDateSelected(day); + } + } + if (calendarController_->IsNeedFocus()) { + calendarController_->RequestFocus(); + calendarController_->SetNeedFocus(false); + } + hasRequestFocus_ = true; + MarkNeedRender(); +} + +void RenderCalendar::OnStatusChanged(RenderStatus renderStatus) +{ + int32_t calendarDaysSize = calendarDays_.size(); + if (renderStatus == RenderStatus::FOCUS) { + int32_t focusedIndex = selectedDayNumber_ + firstDayIndex_ - 1; + if (selectedDayNumber_ < 0) { + focusedIndex = lastDayIndex_; + } + focusRow_ = focusedIndex / DAYS_PER_WEEK; + focusCol_ = focusedIndex % DAYS_PER_WEEK; + selectedDayNumber_ = focusedIndex - firstDayIndex_ + 1; + focusIndex_ = focusedIndex; + if (focusIndex_ >= 0 && focusIndex_ < calendarDaysSize) { + calendarDays_[focusedIndex].focused = true; + if (!cardCalendar_) { + OnDateSelected(calendarDays_[focusedIndex]); + } + } + } else if (renderStatus == RenderStatus::BLUR) { + focusRow_ = -1; + focusCol_ = -1; + if (focusIndex_ >= 0 && focusIndex_ < calendarDaysSize) { + calendarDays_[focusIndex_].focused = false; + } + } + MarkNeedRender(); +} + +int32_t RenderCalendar::GetIndexByGrid(int32_t row, int32_t column) +{ + return (row * colCount_) + column; +} + +void RenderCalendar::OnDateSelected(const CalendarDay& date) +{ + if (!cardCalendar_) { + auto calendarCache = calendarController_->GetDataAdapter()->GetCalendarCache()[indexOfContainer_]; + if (selectedChangeEvent_ && date.index >= 0 && date.index < static_cast(calendarCache.size())) { + std::string result = std::string("\"selectedchange\",").append(calendarCache[date.index]).append(",null"); + selectedChangeEvent_(result); + } + } else if (date.index >= 0 && date.index < static_cast(calendarDays_.size())) { + auto result = JsonUtil::ParseJsonString(calendarDays_[date.index].ToString()); + if (selectedChangeEvent_) { + selectedChangeEvent_(result->ToString()); + } + } +} + +void RenderCalendar::FocusChanged(int32_t oldIndex, int32_t newIndex) +{ + int32_t calendarDaysSize = calendarDays_.size(); + if (oldIndex < 0 || oldIndex >= calendarDaysSize) { + LOGW("lost focus index is out of calendar days array"); + return; + } + calendarDays_[oldIndex].focused = false; + + auto pipelineContext = GetContext().Upgrade(); + if (!pipelineContext) { + LOGE("pipeline context is null"); + return; + } + pipelineContext->CancelFocusAnimation(); + if (newIndex < 0) { + calendarController_->GoToPrevMonth(-1); + return; + } + if (newIndex >= calendarDaysSize) { + calendarController_->GoToNextMonth(1); + return; + } + + auto& onFocusDay = calendarDays_[newIndex]; + if (onFocusDay.month < currentMonth_) { + LOGD("focus move to last month"); + calendarController_->GoToPrevMonth(onFocusDay.day); + return; + } else if (calendarDays_[newIndex].month > currentMonth_) { + LOGD("focus move to next month"); + calendarController_->GoToNextMonth(onFocusDay.day); + return; + } + + onFocusDay.focused = true; + if (!cardCalendar_) { + OnDateSelected(onFocusDay); + } +} + +void RenderCalendar::OnFocusChanged(bool focusStatus) +{ + calendarFocusStatus_ = focusStatus; +} + +void RenderCalendar::OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) +{ + clickDetector_->SetCoordinateOffset(coordinateOffset); + result.emplace_back(clickDetector_); +} + +void RenderCalendar::HandleClick(const Offset& offset) +{ + if (!cardCalendar_) { + return; + } + auto index = JudgeArea(offset); + if (index < 0 || index >= static_cast(calendarDays_.size())) { + return; + } + CalendarDay day; + day.index = index; + OnDateSelected(day); +} + +int32_t RenderCalendar::JudgeArea(const Offset& offset) +{ + const static int32_t rowsOfData = 5; + auto rowSpace = rowCount_ == rowsOfData ? dailyFiveRowSpace_ : dailySixRowSpace_; + auto topPadding = NormalizeToPx(calendarTheme_.topPadding); + auto maxHeight = weekHeight_ + topPadding + rowCount_ * dayHeight_ + (rowCount_ - 1) * rowSpace; + if ((offset.GetX() < 0) || (offset.GetX() > maxWidth_) || (offset.GetY() < weekHeight_) || + (offset.GetY() > maxHeight) || LessOrEqual(dayHeight_, 0.0) || LessOrEqual(dayWidth_, 0.0)) { + return -1; + } + auto height = offset.GetY() - weekHeight_ - topPadding; + int32_t y = + height < (dayHeight_ + rowSpace / 2) ? 0 : (height - dayHeight_ - rowSpace / 2) / (dayHeight_ + rowSpace) + 1; + int32_t x = offset.GetX() < (dayWidth_ + colSpace_ / 2) + ? 0 + : (offset.GetX() - dayWidth_ - colSpace_ / 2) / (dayWidth_ + colSpace_) + 1; + return (y * colCount_ + x); +} + +void RenderCalendar::UpdateCardCalendarAttr(const CardCalendarAttr& attr) +{ + textDirection_ = attr.textDirection; + showHoliday_ = attr.showHoliday; + MarkNeedRender(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/calendar/render_calendar.h b/frameworks/core/components/calendar/render_calendar.h new file mode 100644 index 00000000..5e05b8fd --- /dev/null +++ b/frameworks/core/components/calendar/render_calendar.h @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CALENDAR_RENDER_CALENDAR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CALENDAR_RENDER_CALENDAR_H + +#include "core/components/calendar/calendar_component.h" +#include "core/components/calendar/focusable_grid.h" +#include "core/gestures/click_recognizer.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderCalendar : public RenderNode, protected FocusableGrid, public CalendarDataChangeListener { + DECLARE_ACE_TYPE(RenderCalendar, RenderNode, FocusableGrid, CalendarDataChangeListener); + +public: + RenderCalendar(); + ~RenderCalendar() override = default; + + static RefPtr Create(); + + void Update(const RefPtr& component) override; + void OnPaintFinish() override; + void PerformLayout() override; + void OnStatusChanged(RenderStatus renderStatus) override; + void OnDataChanged(const CalendarDaysOfMonth& data) override; + void OnSelectedDay(int32_t selected) override; + void OnFocusChanged(bool focusStatus) override; + void HandleClick(const Offset& offset); + void HandleTouchDownEvent(const TouchEventInfo& info); + void HandleTouchUpEvent(const TouchEventInfo& info); + void UpdateCardCalendarAttr(const CardCalendarAttr& attr) override; + + const RefPtr& GetCalendarController() const + { + return calendarController_; + } + +protected: + int32_t GetIndexByGrid(int32_t row, int32_t column) override; + void FocusChanged(int32_t oldIndex, int32_t newIndex) override; + void OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) override; + int32_t JudgeArea(const Offset& offset); + + std::vector weekNumbers_; + std::vector calendarDays_; + CalendarMonth currentMonth_; + CalendarThemeStructure calendarTheme_; + TextDirection textDirection_ = TextDirection::LTR; + int32_t indexOfContainer_ = 0; + int32_t lastDayIndex_ = 0; + int32_t touchIndex_ = -1; + double dayWidth_ = 0.0; + double dayHeight_ = 0.0; + double weekHeight_ = 0.0; + double maxWidth_ = 0.0; + double maxHeight_ = 0.0; + double colSpace_ = 0.0; + double dailyFiveRowSpace_ = 0.0; + double dailySixRowSpace_ = 0.0; + + // default selected first day of month + bool cardCalendar_ = false; + bool calendarFocusStatus_ = false; + bool hasRequestFocus_ = false; + bool hasTouched_ = false; + bool showHoliday_ = true; + RefPtr calendarController_; + RefPtr dataAdapter_; + +private: + void OnDateSelected(const CalendarDay& date); + void UpdateAccessibility(); + + std::function selectedChangeEvent_; + RefPtr clickDetector_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CALENDAR_RENDER_CALENDAR_H diff --git a/frameworks/core/components/camera/BUILD.gn b/frameworks/core/components/camera/BUILD.gn new file mode 100644 index 00000000..085da6ca --- /dev/null +++ b/frameworks/core/components/camera/BUILD.gn @@ -0,0 +1,56 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") +config("standard_camera_config") { + cflags_cc = [ "-Wno-user-defined-warnings" ] + + include_dirs = [ + "//base/hiviewdfx/hilog/interfaces/native/innerkits/include/", + "//drivers/peripheral/codec/interfaces/include", + "//drivers/peripheral/display/interfaces/include", + "//foundation/communication/ipc/interfaces/innerkits/ipc_core/include", + "//foundation/graphic/standard/frameworks/surface/include", + "//foundation/graphic/standard/interfaces/kits/surface", + "//foundation/graphic/standard/window_manager/include", + "//foundation/multimedia/camera_standard/frameworks/include", + "//foundation/multimedia/camera_standard/frameworks/innerkitsimpl/camera/include", + "//foundation/multimedia/camera_standard/interfaces/innerkits/native/include", + "//foundation/multimedia/media_standard/interfaces/kits/native/include", + "//utils/native/base/include", + ] +} + +build_component("camera") { + sources = [ + "camera_component.cpp", + "camera_element.cpp", + ] + + if (is_standard_system) { + configs = [ ":standard_camera_config" ] + + sources += [ "camera.cpp" ] + + deps = [ + "//foundation/graphic/standard:libwms_client", + "//foundation/multimedia/camera_standard/frameworks/innerkitsimpl/camera:camera", + "//utils/native/base:utils", + ] + + external_deps = [ + "ipc:ipc_core", + "multimedia_media_standard:recorder", + ] + } +} diff --git a/frameworks/core/components/camera/camera.cpp b/frameworks/core/components/camera/camera.cpp new file mode 100644 index 00000000..5f4e41bc --- /dev/null +++ b/frameworks/core/components/camera/camera.cpp @@ -0,0 +1,670 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/camera/camera.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "base/log/log.h" +#include "display_type.h" +#include "meta_data.h" + +#include "core/image/image_cache.h" + +namespace OHOS::Ace { +namespace { + +const char SURFACE_BUFFER_SIZE[] = "surface_buffer_size"; +const char IS_SUCESS[] = "isSucceed"; +const char ERROR_CODE[] = "errorcode"; +const char PHOTO_PATH[] = "uri"; +const char NULL_STRING[] = ""; +const char DEFAULT_CATCH_PATH[] = "data/data/"; + +const char SURFACE_STRIDE_ALIGNMENT[] = "surface_stride_Alignment"; +const char SURFACE_WIDTH[] = "surface_width"; +const char SURFACE_HEIGHT[] = "surface_height"; +const char SURFACE_FORMAT[] = "surface_format"; +const char SURFACE_USAGE[] = "surface_usage"; +const char SURFACE_TIMEOUT[] = "surface_timeout"; +const char SURFACE_SIZE[] = "surface_size"; +const char REGION_POSITION_X[] = "region_position_x"; +const char REGION_POSITION_Y[] = "region_position_y"; +const char REGION_WIDTH[] = "region_width"; +const char REGION_HEIGHT[] = "region_height"; + +constexpr int32_t DEFAULT_WIDTH = 1920; +constexpr int32_t DEFAULT_HEIGHT = 1080; +constexpr int32_t SURFACE_STRIDE_ALIGNMENT_VAL = 8; +constexpr int32_t PREVIEW_SURFACE_WIDTH = 720; +constexpr int32_t PREVIEW_SURFACE_HEIGHT = 480; +constexpr int32_t MAX_DURATION = 36000; +constexpr int32_t SAMPLE_RATE = 48000; +constexpr int32_t FRAME_RATE = 30; +constexpr int32_t RATE = 4096; +constexpr double FPS = 30; + +inline void SaveFileData(const std::string& filePath, const char &buffer, uint32_t size, std::string& path) +{ + LOGI("Start saving picture"); + struct timeval tv = {}; + gettimeofday(&tv, nullptr); + struct tm *ltm = localtime(&tv.tv_sec); + if (ltm != nullptr) { + std::ostringstream ss("Capture_"); + ss << "Capture" << ltm->tm_hour << "-" << ltm->tm_min << "-" << ltm->tm_sec << ".jpg"; + path = filePath + ss.str(); + std::ofstream pic(path, std::ofstream::out | std::ofstream::trunc); + pic.write(&buffer, size); + pic.close(); + } +} + +inline int32_t GetRecordFile(const std::string filePath, std::string& path) +{ + LOGI("Camera GetRecordFile."); + struct timeval tv = {}; + gettimeofday(&tv, nullptr); + struct tm *ltm = localtime(&tv.tv_sec); + int32_t fd = -1; + if (ltm != nullptr) { + std::ostringstream ss("Capture_"); + ss << "Record" << ltm->tm_hour << "-" << ltm->tm_min << "-" << ltm->tm_sec << ".mp4"; + path = filePath + ss.str(); + fd = open(path.c_str(), O_WRONLY | O_CREAT | O_CLOEXEC | O_TRUNC, S_IRUSR | S_IWUSR); + } + return fd; +} +} + +void FrameCallback::OnFrameFinished(const Media::Camera &camera, + const Media::FrameConfig &frameConfig, + const Media::FrameResult &frameResult) +{ + if (((Media::FrameConfig &)frameConfig).GetFrameConfigType() != Media::FRAME_CONFIG_CAPTURE) { + LOGI("FrameCallback: FrameConfigType is not FRAME_CONFIG_CAPTURE"); + return; + } + + const auto surfaceList = ((Media::FrameConfig &)frameConfig).GetSurfaces(); + if (surfaceList.empty()) { + return; + } + + for (Surface *surface : surfaceList) { + sptr buffer; + int32_t flushFence; + int64_t timestamp; + OHOS::Rect damage; + SurfaceError ret = surface->AcquireBuffer(buffer, flushFence, timestamp, damage); + if (ret == SURFACE_ERROR_OK) { + char *virtAddr = static_cast(buffer->GetVirAddr()); + if (virtAddr != nullptr) { + int32_t bufferSize = stoi(surface->GetUserData(SURFACE_BUFFER_SIZE)); + std::string path; + SaveFileData(cacheFilePath_, *virtAddr, bufferSize, path); + OnTakePhoto(true, path); + } + surface->ReleaseBuffer(buffer, -1); + } + delete surface; + } + delete &frameConfig; +} + +void FrameCallback::OnFrameError(const Media::Camera &camera, + const Media::FrameConfig &frameConfig, + int32_t errorCode, + const Media::FrameResult &frameResult) +{ + OnTakePhoto(false, NULL_STRING); + delete &frameConfig; + LOGI("Camera: OnFrameError errorCode is %{public}d", errorCode); +} + +void FrameCallback::AddTakePhotoListener(TakePhotoListener&& listener) +{ + takePhotoListener_ = std::move(listener); +} + +void FrameCallback::OnTakePhoto(bool isSucces, std::string info) +{ + LOGI("Camera:FrameCallback OnTakePhoto %{public}d %{public}s--", isSucces, info.c_str()); + if (!takePhotoListener_) { + return; + } + + std::map result; + if (isSucces) { + result[IS_SUCESS] = "1"; + result[PHOTO_PATH] = info; + } else { + result[IS_SUCESS] = "0"; + result[ERROR_CODE] = info; + } + takePhotoListener_(result); + result.clear(); +} + +void FrameCallback::SetCatchFilePath(std::string cacheFilePath) +{ + cacheFilePath_ = cacheFilePath; +} + +void CameraCallback::OnCreated(const Media::Camera &camera) +{ + LOGI("Camera OnCreated."); + auto config = Media::CameraConfig::CreateCameraConfig(); + config->SetFrameStateCallback(frameCallback_, eventHandler_); + + ((Media::Camera &) camera).Configure(*config); + camera_ = (Media::Camera *) &camera; + isReady_ = true; + if (hasCallPreView_) { + StartPreview(); + } +} + +void CameraCallback::OnCreateFailed(const std::string cameraId, int32_t errorCode) +{ + LOGE("CameraCallback: OnCreate Failed!"); +} + +Media::Recorder *CameraCallback::CreateRecorder() +{ + LOGI("Camera CreateRecorder start."); + int ret = 0; + int32_t channelCount = 1; + AudioCodecFormat audioFormat = AAC_LC; + AudioSourceType inputSource = AUDIO_MIC; + int32_t audioEncodingBitRate = SAMPLE_RATE; + Media::VideoSourceType source = Media::VIDEO_SOURCE_SURFACE_ES; + int32_t sourceId = 0; + int32_t audioSourceId = 0; + int32_t width = DEFAULT_WIDTH; + int32_t height = DEFAULT_HEIGHT; + VideoCodecFormat encoder = HEVC; + + Media::Recorder *recorder = new Media::Recorder(); + if ((ret = recorder->SetVideoSource(source, sourceId)) != Media::SUCCESS) { + LOGE("SetVideoSource failed. ret= %{private}d.", ret); + delete recorder; + return nullptr; + } + if ((ret = recorder->SetVideoEncoder(sourceId, encoder)) != Media::SUCCESS) { + LOGE("SetVideoEncoder failed. ret= %{private}d.", ret); + delete recorder; + return nullptr; + } + if ((ret = recorder->SetOutputFormat(Media::FORMAT_MPEG_4)) != Media::SUCCESS) { + LOGE("SetOutputFormat failed. ret= %{private}d.", ret); + delete recorder; + return nullptr; + } + if ((ret = recorder->SetVideoSize(sourceId, width, height)) != Media::SUCCESS) { + LOGE("SetVideoSize failed. ret= %{private}d.", ret); + delete recorder; + return nullptr; + } + if ((ret = recorder->SetVideoFrameRate(sourceId, FRAME_RATE)) != Media::SUCCESS) { + LOGE("SetVideoFrameRate failed. ret= %{private}d.", ret); + delete recorder; + return nullptr; + } + if ((ret = recorder->SetVideoEncodingBitRate(sourceId, RATE)) != Media::SUCCESS) { + LOGE("SetVideoEncodingBitRate failed. ret= %{private}d.", ret); + delete recorder; + return nullptr; + } + if ((ret = recorder->SetCaptureRate(sourceId, FPS)) != Media::SUCCESS) { + LOGE("SetCaptureRate failed. ret= %{private}d.", ret); + delete recorder; + return nullptr; + } + if ((ret = recorder->SetAudioSource(inputSource, audioSourceId)) != Media::SUCCESS) { + LOGE("SetAudioSource failed. ret= %{private}d.", ret); + delete recorder; + return nullptr; + } + if ((ret = recorder->SetAudioEncoder(audioSourceId, audioFormat)) != Media::SUCCESS) { + LOGE("SetAudioEncoder failed. ret= %{private}d.", ret); + delete recorder; + return nullptr; + } + if ((ret = recorder->SetAudioSampleRate(audioSourceId, SAMPLE_RATE)) != Media::SUCCESS) { + LOGE("SetAudioSampleRate failed. ret= %{private}d.", ret); + delete recorder; + return nullptr; + } + if ((ret = recorder->SetAudioChannels(audioSourceId, channelCount)) != Media::SUCCESS) { + LOGE("SetAudioChannels failed. ret= %{private}d.", ret); + delete recorder; + return nullptr; + } + if ((ret = recorder->SetAudioEncodingBitRate(audioSourceId, audioEncodingBitRate)) != Media::SUCCESS) { + LOGE("SetAudioEncodingBitRate failed. ret= %{private}d.", ret); + delete recorder; + return nullptr; + } + if ((ret = recorder->SetMaxDuration(MAX_DURATION)) != Media::SUCCESS) { // 36000s=10h + LOGE("SetAudioEncodingBitRate failed. ret= %{private}d.", ret); + delete recorder; + return nullptr; + } + LOGI("Camera CreateRecorder success."); + return recorder; +} + +int CameraCallback::PrepareRecorder() +{ + LOGI("Camera PrepareRecorder."); + if (camera_ == nullptr) { + LOGE("Camera is not ready."); + return -1; + } + if (recorder_ == nullptr) { + recorder_ = CreateRecorder(); + } + if (recorder_ == nullptr) { + LOGE("Camera: Recorder not available."); + return -1; + } + if (recordFileId_ == -1) { + recordFileId_ = GetRecordFile(cacheFilePath_, recordPath_); + } + if (recordFileId_ == -1) { + LOGE("Camera: Create fd failed."); + return -1; + } + return Media::SUCCESS; +} + +void CameraCallback::CloseRecorder() +{ + if (recordState_ == State::STATE_RUNNING) { + if (recorder_ != nullptr) { + recorder_->Stop(true); + delete recorder_; + recorder_ = nullptr; + } + + if (recordFileId_ != -1) { + onRecord(true, recordPath_); + } + recordFileId_ = -1; + recordState_ = State::STATE_IDLE; + } +} + +void CameraCallback::StartPreview() +{ + if (!isReady_) { + LOGE("Not ready for StartPreview."); + hasCallPreView_ = true; + return; + } + + LOGI("Camera StartPreview."); + if (camera_ == nullptr) { + LOGE("Camera is null."); + return; + } + + auto context = context_.Upgrade(); + if (!context) { + LOGE("Camera:fail to get context to create Camera"); + return; + } + + if (previewState_ == State::STATE_RUNNING) { + LOGE("Camera is already previewing."); + return; + } + + if (!subWindow_) { + OHOS::WindowConfig config; + memset_s(&config, sizeof(OHOS::WindowConfig), 0, sizeof(OHOS::WindowConfig)); + config.height = windowSize_.Width(); + config.width = windowSize_.Height(); + config.format = PIXEL_FMT_RGBA_8888; + config.pos_x = windowOffset_.GetX(); + config.pos_y = windowOffset_.GetY(); + config.subwindow = true; + config.type = WINDOW_TYPE_VIDEO; + + subWindow_ = OHOS::WindowManager::GetInstance()->CreateSubWindow(context->GetWindowId(), &config); + subWindow_->GetSurface()->SetQueueSize(10); + } + + previewSurface_ = subWindow_->GetSurface(); + previewSurface_->SetUserData(SURFACE_STRIDE_ALIGNMENT, std::to_string(SURFACE_STRIDE_ALIGNMENT_VAL)); + previewSurface_->SetUserData(SURFACE_FORMAT, std::to_string(PIXEL_FMT_YCBCR_422_SP)); + previewSurface_->SetUserData(SURFACE_WIDTH, std::to_string(PREVIEW_SURFACE_WIDTH)); + previewSurface_->SetUserData(SURFACE_HEIGHT, std::to_string(PREVIEW_SURFACE_HEIGHT)); + previewSurface_->SetUserData(REGION_WIDTH, std::to_string(windowSize_.Width())); + previewSurface_->SetUserData(REGION_HEIGHT, std::to_string(windowSize_.Height())); + previewSurface_->SetUserData(REGION_POSITION_X, std::to_string(windowOffset_.GetX())); + previewSurface_->SetUserData(REGION_POSITION_Y, std::to_string(windowOffset_.GetY())); + + Media::FrameConfig *preViewFrameConfig = new Media::FrameConfig(Media::FRAME_CONFIG_PREVIEW); + preViewFrameConfig->AddSurface(*previewSurface_); + int32_t ret = camera_->TriggerLoopingCapture(*preViewFrameConfig); + if (ret != 0) { + delete preViewFrameConfig; + LOGE("Camera start preview failed. ret= %{private}d.", ret); + return; + } + previewState_ = State::STATE_RUNNING; + hasCallPreView_ = false; + LOGI("Camera start preview succeed."); +} + +void CameraCallback::StartRecord() +{ + LOGI("Camera Record start."); + if (recordState_ == State::STATE_RUNNING) { + LOGE("Camera is already recording."); + return; + } + int ret = PrepareRecorder(); + if (ret != Media::SUCCESS) { + LOGE("Camera PrepareRecorder failed."); + CloseRecorder(); + onRecord(false, NULL_STRING); + return; + } + ret = recorder_->SetOutputFile(recordFileId_); + if (ret != Media::SUCCESS) { + LOGE("Camera SetOutputPath failed. ret= %{private}d", ret); + CloseRecorder(); + onRecord(false, NULL_STRING); + return; + } + ret = recorder_->Prepare(); + if (ret != Media::SUCCESS) { + LOGE("Prepare failed. ret= %{private}d", ret); + CloseRecorder(); + onRecord(false, NULL_STRING); + return; + } + ret = recorder_->Start(); + if (ret != Media::SUCCESS) { + LOGE("recorder start failed. ret= %{private}d", ret); + CloseRecorder(); + onRecord(false, NULL_STRING); + return; + } + Surface *recorderSurface = (recorder_->GetSurface(0)).get(); + + int queueSize = 10; + int oneKilobytes = 1024; + int surfaceSize = oneKilobytes * oneKilobytes; + int usage = HBM_USE_CPU_READ | HBM_USE_CPU_WRITE | HBM_USE_MEM_DMA; + recorderSurface->SetUserData(SURFACE_WIDTH, std::to_string(DEFAULT_WIDTH)); + recorderSurface->SetUserData(SURFACE_HEIGHT, std::to_string(DEFAULT_HEIGHT)); + recorderSurface->SetQueueSize(queueSize); + recorderSurface->SetUserData(SURFACE_SIZE, std::to_string(surfaceSize)); + recorderSurface->SetUserData(SURFACE_STRIDE_ALIGNMENT, "8"); + recorderSurface->SetUserData(SURFACE_FORMAT, std::to_string(PIXEL_FMT_RGBA_8888)); + recorderSurface->SetUserData(SURFACE_USAGE, std::to_string(usage)); + recorderSurface->SetUserData(SURFACE_TIMEOUT, "0"); + + Media::FrameConfig *recordFrameConfig = new Media::FrameConfig(Media::FRAME_CONFIG_RECORD); + recordFrameConfig->AddSurface(*recorderSurface); + ret = camera_->TriggerLoopingCapture(*recordFrameConfig); + if (ret != 0) { + delete recordFrameConfig; + CloseRecorder(); + LOGE("Camera start recording failed. ret= %{private}d", ret); + onRecord(false, NULL_STRING); + return; + } + recordState_ = State::STATE_RUNNING; + LOGI("Camera start recording succeed."); +} + +void CameraCallback::Capture(Size photoSize) +{ + LOGI("Camera capture start."); + if (camera_ == nullptr) { + LOGE("Camera is not ready."); + return; + } + captureSurface_ = Surface::CreateSurfaceAsConsumer(); + if (captureSurface_ == nullptr) { + LOGE("Camera CreateSurface failed."); + return; + } + + auto refSurface = captureSurface_; + sptr listener = new SurfaceListener(); + captureSurface_->RegisterConsumerListener(listener); + + int usage = HBM_USE_CPU_READ | HBM_USE_CPU_WRITE | HBM_USE_MEM_DMA; + captureSurface_->SetUserData(SURFACE_WIDTH, std::to_string(DEFAULT_WIDTH)); + captureSurface_->SetUserData(SURFACE_HEIGHT, std::to_string(DEFAULT_HEIGHT)); + captureSurface_->SetUserData(SURFACE_STRIDE_ALIGNMENT, "8"); + captureSurface_->SetUserData(SURFACE_FORMAT, std::to_string(PIXEL_FMT_RGBA_8888)); + captureSurface_->SetUserData(SURFACE_USAGE, std::to_string(usage)); + captureSurface_->SetUserData(SURFACE_TIMEOUT, "0"); + + Media::FrameConfig *captureFrameConfig = new Media::FrameConfig(Media::FRAME_CONFIG_CAPTURE); + captureFrameConfig->AddSurface(*refSurface); + int32_t ret = camera_->TriggerSingleCapture(*captureFrameConfig); + if (MEDIA_OK != ret) { + delete captureFrameConfig; + LOGE("Camera: Capture faile. ret = %{private}d", ret); + return; + } + LOGI("Camera capture end."); +} + +void CameraCallback::Stop(bool isClosePreView) +{ + if (camera_ != nullptr) { + camera_->StopLoopingCapture(); + } + + if (recordState_ == State::STATE_RUNNING) { + CloseRecorder(); + } + recordState_ = State::STATE_IDLE; + previewState_ = State::STATE_IDLE; + if (isClosePreView) { + LOGI("CameraCallback: Destroy subWindow."); + subWindow_.reset(); + } +} + +void CameraCallback::AddTakePhotoListener(TakePhotoListener&& listener) +{ + frameCallback_.AddTakePhotoListener(std::move(listener)); +} + +void CameraCallback::AddErrorListener(ErrorListener&& listener) +{ + onErrorListener_ = std::move(listener); +} + +void CameraCallback::AddRecordListener(RecordListener&& listener) +{ + onRecordListener_ = std::move(listener); +} + +void CameraCallback::SetCatchFilePath(std::string cacheFilePath) +{ + cacheFilePath_ = cacheFilePath; + frameCallback_.SetCatchFilePath(cacheFilePath_); +} + +void CameraCallback::onError() +{ + if (onErrorListener_) { + onErrorListener_(NULL_STRING, NULL_STRING); + } +} + +void CameraCallback::onRecord(bool isSucces, std::string info) +{ + LOGI("CameraCallback: onRecord callback."); + if (!onRecordListener_) { + return; + } + + std::map result; + if (isSucces) { + result[IS_SUCESS] = "1"; + result[PHOTO_PATH] = info; + } else { + result[IS_SUCESS] = "0"; + result[ERROR_CODE] = info; + } + onRecordListener_(result); +} + +void CameraCallback::OnCameraSizeChange(int32_t width, int32_t height) +{ + LOGE("CameraCallback:OnCameraSizeChange %{public}d %{public}d %{public}p-", width, height, subWindow_.get()); + if (subWindow_) { + subWindow_->SetSubWindowSize(width, height); + } + windowSize_.SetWidth(width); + windowSize_.SetWidth(height); +} + +void CameraCallback::OnCameraOffsetChange(int32_t x, int32_t y) +{ + if (subWindow_) { + subWindow_->Move(x, y); + } + windowOffset_.SetX(x); + windowOffset_.SetX(y); +} + +void Camera::Release() +{ + LOGI("Camera: Release!"); + Stop(true); + Media::Camera *camera = const_cast(cameraCallback_.GetCameraInstance()); + if (camera != nullptr) { + camera->StopLoopingCapture(); + camera = nullptr; + } +} + +void Camera::CreateCamera() +{ + if (cameraKit_ == nullptr) { + LOGE("Camera: post render failed due to null native object!"); + return; + } + + std::list camList = cameraKit_->GetCameraIds(); + if (camList.empty()) { + LOGE("Camera: empty camera list!"); + return; + } + + const std::string cameraId = camList.front(); + const Media::CameraAbility *ability = cameraKit_->GetCameraAbility(cameraId); + if (ability == nullptr) { + LOGE("Camera: get camera ability failed!"); + return; + } + + cameraKit_->CreateCamera(cameraId, cameraCallback_, cameraCallback_.GetEventHandler()); +} + +void Camera::Create(const std::function& onCreate) +{ + LOGI("Camera: Create start"); + cameraKit_ = Media::CameraKit::GetInstance(); + LOGI("Camera:CameraKit Create"); + + std::string cacheFilePath = ImageCache::GetImageCacheFilePath(); + if (cacheFilePath.empty()) { + cacheFilePath = DEFAULT_CATCH_PATH; + } + cameraCallback_.SetCatchFilePath(cacheFilePath); + cameraCallback_.SetPipelineContext(context_); + + CreateCamera(); + + if (onCreate) { + onCreate(); + } + LOGI("Camera:Create end"); +} + +void Camera::Stop(bool isClosePreView) +{ + LOGI("Camera:Stop"); + cameraCallback_.Stop(isClosePreView); +} + +void Camera::TakePhoto(Size photoSize) +{ + LOGI("Camera:TakePhoto"); + cameraCallback_.Capture(photoSize); +} + +void Camera::StartPreview() +{ + LOGI("Camera:StartPreview"); + cameraCallback_.StartPreview(); +} + +void Camera::StartRecord() +{ + LOGI("Camera:StartRecord"); + cameraCallback_.StartRecord(); +} + +void Camera::AddTakePhotoListener(TakePhotoListener&& listener) +{ + cameraCallback_.AddTakePhotoListener(std::move(listener)); +} + +void Camera::AddErrorListener(ErrorListener&& listener) +{ + cameraCallback_.AddErrorListener(std::move(listener)); +} + +void Camera::AddRecordListener(RecordListener&& listener) +{ + cameraCallback_.AddRecordListener(std::move(listener)); +} + +void Camera::OnCameraSizeChange(int32_t width, int32_t height) +{ + cameraCallback_.OnCameraSizeChange(width, height); +} + +void Camera::OnCameraOffsetChange(int32_t x, int32_t y) +{ + cameraCallback_.OnCameraOffsetChange(x, y); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/camera/camera.h b/frameworks/core/components/camera/camera.h new file mode 100644 index 00000000..870a3a44 --- /dev/null +++ b/frameworks/core/components/camera/camera.h @@ -0,0 +1,186 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CAMERA_CAMERA_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CAMERA_CAMERA_H + +#include +#include "core/components/camera/camera_component.h" +#include "core/components/common/layout/constants.h" + +#include "camera_kit.h" +#include "recorder.h" +#include "window_manager.h" + +namespace OHOS::Ace { + +using TakePhotoListener = std::function&)>; +using ErrorListener = std::function; +using RecordListener = std::function&)>; + +constexpr int32_t TEMPORARY_WINDOW_SIZE = 480; + +enum State : int32_t { + STATE_IDLE, + STATE_RUNNING, + STATE_BUTT +}; + +class FrameCallback final : public Media::FrameStateCallback { +public: + ACE_DISALLOW_COPY_AND_MOVE(FrameCallback); + FrameCallback() = default; + ~FrameCallback() = default; + + void AddTakePhotoListener(TakePhotoListener&& listener); + void SetCatchFilePath(std::string cacheFilePath); + +protected: + void OnFrameFinished(const Media::Camera &camera, + const Media::FrameConfig &frameConfig, + const Media::FrameResult &frameResult) override; + void OnFrameError(const Media::Camera &camera, + const Media::FrameConfig &frameConfig, + int32_t errorCode, + const Media::FrameResult &frameResult) override; + +private: + void OnTakePhoto(bool isSucces, std::string info); + TakePhotoListener takePhotoListener_; + std::string cacheFilePath_; +}; + +class CameraCallback : public Media::CameraStateCallback { +public: + ACE_DISALLOW_COPY_AND_MOVE(CameraCallback); + + explicit CameraCallback(Media::EventHandler &eventHdlr) : eventHandler_(eventHdlr) + {} + ~CameraCallback() + { + Stop(true); + } + + const Media::Camera *GetCameraInstance() + { + return camera_; + } + + Media::EventHandler& GetEventHandler() + { + return eventHandler_; + } + + void SetPipelineContext(const WeakPtr& context) + { + context_ = context; + } + + void Stop(bool isClosePreView); + void Capture(Size photoSize); + void StartPreview(); + void StartRecord(); + + void AddTakePhotoListener(TakePhotoListener&& listener); + void AddErrorListener(ErrorListener&& listener); + void AddRecordListener(RecordListener&& listener); + void SetCatchFilePath(std::string cacheFilePath); + void OnCameraSizeChange(int32_t width, int32_t height); + void OnCameraOffsetChange(int32_t x, int32_t y); + +protected: + void OnCreated(const Media::Camera &camera) override; + void OnCreateFailed(const std::string cameraId, int32_t errorCode) override; + void OnReleased(const Media::Camera &camera) override {} + void CloseRecorder(); + +private: + int PrepareRecorder(); + Media::Recorder *CreateRecorder(); + void onError(); + void onRecord(bool isSucces, std::string info); + + Media::Camera *camera_ = nullptr; + Media::Recorder *recorder_ = nullptr; + sptr previewSurface_; + Media::EventHandler& eventHandler_; + + ErrorListener onErrorListener_; + RecordListener onRecordListener_; + FrameCallback frameCallback_; + int32_t recordFileId_ = -1; + std::string recordPath_; + std::string cacheFilePath_; + + std::unique_ptr subWindow_; + WeakPtr context_; + sptr captureSurface_; + Size windowSize_ = Size(TEMPORARY_WINDOW_SIZE, TEMPORARY_WINDOW_SIZE); + Offset windowOffset_ = Offset(0, 0); + + bool isReady_ = false; + bool hasCallPreView_ = false; + + State previewState_ = State::STATE_IDLE; + State recordState_ = State::STATE_IDLE; +}; + +class SurfaceListener : public IBufferConsumerListener { +public: + void OnBufferAvailable() override + { + LOGI("Camera SurfaceListener OnBufferAvailable"); + } +}; + +class Camera : public virtual AceType { + DECLARE_ACE_TYPE(Camera, AceType); + +public: + Camera(const WeakPtr &context, Media::EventHandler &eventHdlr) + : context_(context), cameraCallback_(eventHdlr) {} + ~Camera() override = default; + + void Release(); + void Create(const std::function& onCreate); + + void Stop(bool isClosePreView); + void TakePhoto(Size photoSize); + void StartPreview(); + void StartRecord(); + + void OnCameraSizeChange(int32_t width, int32_t height); + void OnCameraOffsetChange(int32_t x, int32_t y); + + void AddTakePhotoListener(TakePhotoListener&& listener); + void AddErrorListener(ErrorListener&& listener); + void AddRecordListener(RecordListener&& listener); + +private: + void CreateCamera(); + WeakPtr context_; + + TakePhotoListener takePhotoListener_; + ErrorListener onErrorListener_; + RecordListener onRecordListener_; + + CameraCallback cameraCallback_; + std::unique_ptr window_; + Media::CameraKit *cameraKit_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CAMERA_CAMERA_H diff --git a/frameworks/core/components/camera/camera_component.cpp b/frameworks/core/components/camera/camera_component.cpp new file mode 100644 index 00000000..e60f84b8 --- /dev/null +++ b/frameworks/core/components/camera/camera_component.cpp @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/camera/camera_component.h" + +#include "base/log/log.h" +#include "core/components/camera/camera_element.h" +#include "core/components/video/render_texture.h" + +namespace OHOS::Ace { + +RefPtr CameraComponent::CreateRenderNode() +{ + return RenderTexture::Create(); +} + +RefPtr CameraComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/camera/camera_component.h b/frameworks/core/components/camera/camera_component.h new file mode 100644 index 00000000..692162e2 --- /dev/null +++ b/frameworks/core/components/camera/camera_component.h @@ -0,0 +1,163 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CAMERA_CAMERA_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CAMERA_CAMERA_COMPONENT_H + +#include + +#include "base/utils/utils.h" +#include "core/components/video/texture_component.h" +#include "core/event/ace_event_helper.h" +#include "core/pipeline/base/element.h" + +namespace OHOS::Ace { + +enum class DevicePosition : int32_t { + CAMERA_FACING_FRONT = 0, + CAMERA_FACING_BACK, + CAMERA_FACING_OTHERS, +}; + +enum class FlashType : int32_t { + OFF = 0, + ON, + AUTO, + TORCH, +}; + +struct TakePhotoParams { + std::string quality; + std::string success; + std::string fail; + std::string complete; + + void clear() + { + quality.clear(); + success.clear(); + fail.clear(); + complete.clear(); + } +}; + +class CameraController : public virtual AceType { + DECLARE_ACE_TYPE(CameraController, AceType); + +public: + using TakePhotoImpl = std::function; + using StartRecorderImpl = std::function; + using CloseRecordImpl = std::function; + + void TakePhoto(const TakePhotoParams& params) + { + if (takePhotoImpl_) { + takePhotoImpl_(params); + } + } + + void SetTakePhotoImpl(TakePhotoImpl&& takePhotoImpl) + { + takePhotoImpl_ = std::move(takePhotoImpl); + } + + void StartRecord() + { + if (startRecorderImpl_) { + startRecorderImpl_(); + } + } + + void SetStartRecordImpl(StartRecorderImpl&& startRecorderImpl) + { + startRecorderImpl_ = std::move(startRecorderImpl); + } + + void CloseRecorder(const std::string& recorderId) + { + if (closeRecordImpl_) { + closeRecordImpl_(recorderId); + } + } + + void SetCloseRecorderImpl(CloseRecordImpl&& closeRecordImpl) + { + closeRecordImpl_ = std::move(closeRecordImpl); + } + +private: + TakePhotoImpl takePhotoImpl_; + StartRecorderImpl startRecorderImpl_; + CloseRecordImpl closeRecordImpl_; +}; + +class CameraComponent : public TextureComponent { + DECLARE_ACE_TYPE(CameraComponent, TextureComponent); + +public: + CameraComponent() + { + cameraController_ = AceType::MakeRefPtr(); + }; + ~CameraComponent() override = default; + + RefPtr GetCameraController() const + { + return cameraController_; + } + + void SetFlash(FlashType flash) + { + flash_ = flash; + } + + FlashType GetFlash() const + { + return flash_; + } + + void SetDevicePosition(DevicePosition devicePosition) + { + devicePosition_ = devicePosition; + } + + DevicePosition GetDevicePosition() const + { + return devicePosition_; + } + + void SetErrorEventId(const EventMarker& eventId) + { + errorEventId_ = eventId; + } + + const EventMarker& GetErrorEventId() const + { + return errorEventId_; + } + + RefPtr CreateRenderNode() override; + RefPtr CreateElement() override; + +private: + RefPtr cameraController_; + FlashType flash_ = FlashType::AUTO; + DevicePosition devicePosition_ = DevicePosition::CAMERA_FACING_BACK; + EventMarker errorEventId_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CAMERA_CAMERA_COMPONENT_H diff --git a/frameworks/core/components/camera/camera_element.cpp b/frameworks/core/components/camera/camera_element.cpp new file mode 100644 index 00000000..16be9c03 --- /dev/null +++ b/frameworks/core/components/camera/camera_element.cpp @@ -0,0 +1,418 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/camera/camera_element.h" + +#include + +#include "core/components/camera/camera_component.h" +#include "core/components/video/render_texture.h" + +namespace OHOS::Ace { +namespace { + +const char CALLBACK_COMPLETE[] = "complete"; +const char IS_SUCESS[] = "isSucceed"; +const char PHOTO_PATH[] = "uri"; +const char NULL_STRING[] = ""; +const char ERROR_MSG[] = "errormsg"; +const char ERROR_CODE[] = "errorcode"; + +inline std::string GetStringFromMap(const std::map& map, std::string key) +{ + auto iter = map.find(key); + if (iter != map.end()) { + return iter->second; + } + return NULL_STRING; +} + +} // namespace + +CameraElement::~CameraElement() +{ + ReleasePlatformResource(); +} + +void CameraElement::ReleasePlatformResource() +{ + StopPreview(); + if (camera_) { + camera_->Release(); + camera_.Reset(); + } +} + +void CameraElement::Prepare(const WeakPtr& parent) +{ + auto themeManager = GetThemeManager(); + if (!themeManager) { + return; + } + auto cameraComponent = AceType::DynamicCast(component_); + theme_ = themeManager->GetTheme(); + if (cameraComponent) { + InitEvent(cameraComponent); + SetMethodCall(cameraComponent); + CreatePlatformResource(); + } + + RenderElement::Prepare(parent); + if (renderNode_) { + auto renderTexture = AceType::DynamicCast(renderNode_); + renderTexture->SetTextureSizeChange( + [weak = WeakClaim(this)](int64_t textureId, int32_t textureWidth, int32_t textureHeight) { + auto cameraElement = weak.Upgrade(); + if (cameraElement) { + cameraElement->OnTextureSize(textureId, textureWidth, textureHeight); + } + }); + renderTexture->SetHiddenChangeEvent( + [weak = WeakClaim(this)](bool hidden) { + auto cameraElement = weak.Upgrade(); + if (cameraElement) { + cameraElement->HiddenChange(hidden); + } + }); + renderTexture->SetTextureOffsetChange( + [weak = WeakClaim(this)](int64_t textureId, int32_t x, int32_t y) { + auto cameraElement = weak.Upgrade(); + if (cameraElement) { + cameraElement->OnTextureOffset(textureId, x, y); + } + }); + } +} + +void CameraElement::HiddenChange(bool hidden) +{ + if (hidden) { + ReleasePlatformResource(); + } else { + CreatePlatformResource(); + } +} + +void CameraElement::InitEvent(const RefPtr& cameraComponent) +{ + if (!cameraComponent->GetErrorEventId().IsEmpty()) { + onError_ = AceAsyncEvent::Create(cameraComponent->GetErrorEventId(), context_); + } +} + +void CameraElement::OnTextureSize(int64_t textureId, int32_t textureWidth, int32_t textureHeight) +{ + LOGI("CameraElement::OnTextureSize"); + if (camera_) { + LOGE("CameraElement:OnTextureSize %{public}d %{public}d ", textureWidth, textureHeight); + camera_->OnCameraSizeChange(textureWidth, textureHeight); + } +} + +void CameraElement::OnTextureOffset(int64_t textureId, int32_t x, int32_t y) +{ + LOGI("CameraElement::OnTextureOffset"); + if (camera_) { + camera_->OnCameraOffsetChange(x, y); + LOGE("Camera:OnTextureOffset %{public}d %{public}d", x, y); + StartPreview(); + } +} + +void CameraElement::CreatePlatformResource() +{ + ReleasePlatformResource(); + + auto context = context_.Upgrade(); + if (!context) { + LOGE("fail to get context"); + return; + } + + context->GetTaskExecutor()->PostTask( + [weak = WeakClaim(this)] { + auto cameraElement = weak.Upgrade(); + if (cameraElement) { + cameraElement->CreateCamera(); + } + }, + TaskExecutor::TaskType::PLATFORM); +} + +void CameraElement::CreateCamera() +{ + LOGI("CameraElement::CreateCamera"); + camera_ = AceType::MakeRefPtr(context_, eventHdlr_); + camera_->Create(nullptr); + InitListener(); +} + +void CameraElement::SetMethodCall(const RefPtr& cameraComponent) +{ + auto cameraController = cameraComponent->GetCameraController(); + if (cameraController) { + auto context = context_.Upgrade(); + if (!context) { + return; + } + auto uiTaskExecutor = + SingleTaskExecutor::Make(context->GetTaskExecutor(), TaskExecutor::TaskType::UI); + cameraController->SetTakePhotoImpl( + [weak = WeakClaim(this), uiTaskExecutor]( + const TakePhotoParams& params) { + uiTaskExecutor.PostTask([weak, params] { + auto cameraElement = weak.Upgrade(); + if (cameraElement) { + cameraElement->TakePhoto(params); + } + }); + }); + cameraController->SetStartRecordImpl( + [weak = WeakClaim(this), uiTaskExecutor]() { + uiTaskExecutor.PostTask([weak] { + auto cameraElement = weak.Upgrade(); + if (cameraElement) { + cameraElement->StartRecord(); + } + }); + }); + + cameraController->SetCloseRecorderImpl( + [weak = WeakClaim(this), uiTaskExecutor]( + const std::string& params) { + uiTaskExecutor.PostTask([weak, params] { + auto cameraElement = weak.Upgrade(); + if (cameraElement) { + cameraElement->CloseRecorder(params); + } + }); + }); + } +} + +void CameraElement::InitListener() +{ + auto context = context_.Upgrade(); + if (!context) { + return; + } + + auto uiTaskExecutor = SingleTaskExecutor::Make(context->GetTaskExecutor(), TaskExecutor::TaskType::UI); + auto takePhotoListener = [weak = WeakClaim(this), uiTaskExecutor]( + const std::map result) { + uiTaskExecutor.PostTask([&weak, result] { + auto camera = weak.Upgrade(); + if (camera) { + camera->OnTakePhotoCallBack(result); + } + }); + }; + + auto onError = [weak = WeakClaim(this), uiTaskExecutor](const std::string& errorcode, const std::string& errormsg) { + uiTaskExecutor.PostTask([&weak, errorcode, errormsg] { + auto camera = weak.Upgrade(); + if (camera) { + camera->OnError(errorcode, errormsg); + } + }); + }; + + auto recorderCallBack = [weak = WeakClaim(this), uiTaskExecutor]( + const std::map result) { + uiTaskExecutor.PostTask([&weak, result] { + auto camera = weak.Upgrade(); + if (camera) { + camera->OnRecorderCallBack(result); + } + }); + }; + + if (camera_) { + camera_->AddTakePhotoListener(takePhotoListener); + camera_->AddErrorListener(onError); + camera_->AddRecordListener(recorderCallBack); + } +} + +void CameraElement::OnTakePhotoCallBack(const std::map& result) +{ + std::string callbackId; + if (GetStringFromMap(result, IS_SUCESS) == "1" && !callbackIds_.success.empty()) { + std::string param = std::string("{\"") + .append(PHOTO_PATH) + .append("\":\"file://") + .append(GetStringFromMap(result, PHOTO_PATH)) + .append("\"}"); + ExecuteJsCallback(callbackIds_.success, param); + } else if (GetStringFromMap(result, IS_SUCESS) != "1" && !callbackIds_.fail.empty()) { + std::string param = std::string("{\"") + .append(ERROR_MSG) + .append("\":\"") + .append(GetStringFromMap(result, ERROR_MSG)) + .append("\", \"") + .append(ERROR_CODE) + .append("\":\"") + .append(GetStringFromMap(result, ERROR_CODE)) + .append("\"}"); + ExecuteJsCallback(callbackIds_.fail, param); + } + if (!callbackIds_.complete.empty()) { + std::string param = std::string("{\"").append(CALLBACK_COMPLETE).append("\":\"\"}"); + ExecuteJsCallback(callbackIds_.complete, param); + } +} + +void CameraElement::OnError(const std::string& errorcode, const std::string& errormsg) +{ + if (onError_) { + std::string param = std::string("\"error\",{\"") + .append(ERROR_MSG) + .append("\":\"") + .append(errormsg) + .append("\", \"") + .append(ERROR_CODE) + .append("\":\"") + .append(errorcode) + .append("\"}"); + onError_(param); + } +} + +void CameraElement::TakePhoto(const TakePhotoParams& params) +{ + auto context = context_.Upgrade(); + if (!context) { + LOGE("fail to get context"); + return; + } + + callbackIds_.clear(); + callbackIds_ = params; + context->GetTaskExecutor()->PostTask( + [weak = WeakClaim(this)] { + auto cameraElement = weak.Upgrade(); + if (cameraElement) { + cameraElement->TakePhoto(Size()); + } + }, + TaskExecutor::TaskType::PLATFORM); +} + +void CameraElement::OnRecorderCallBack(const std::map& result) +{ + if (recorderBackId_.empty()) { + return; + } + + std::string param = std::string("{\"arguments\":["); + if (GetStringFromMap(result, IS_SUCESS) == "1") { + param.append("{\"") + .append(PHOTO_PATH) + .append("\":\"file://") + .append(GetStringFromMap(result, PHOTO_PATH)) + .append("\"}],\"method\":\"success\"}"); + ExecuteJsCallback(recorderBackId_, param); + } else if (GetStringFromMap(result, IS_SUCESS) != "1") { + param.append("{\"") + .append(ERROR_MSG) + .append("\":\"") + .append(GetStringFromMap(result, ERROR_MSG)) + .append("\", \"") + .append(ERROR_CODE) + .append("\":\"") + .append(GetStringFromMap(result, ERROR_CODE)) + .append("\"}],\"method\":\"fail\"}"); + ExecuteJsCallback(recorderBackId_, param); + } + + std::string complete = std::string("{\"arguments\":[{\"") + .append(CALLBACK_COMPLETE) + .append("\":\"\"}],\"method\":\"complete\"}"); + ExecuteJsCallback(recorderBackId_, complete); +} + +void CameraElement::StartPreview() +{ + if (camera_ && !isPreViewing_) { + camera_->StartPreview(); + isPreViewing_ = true; + } +} + +void CameraElement::StopPreview() +{ + if (camera_ && isPreViewing_) { + camera_->Stop(true); + isPreViewing_ = true; + } +} + +void CameraElement::TakePhoto(const Size& size) +{ + if (camera_) { + camera_->TakePhoto(size); + } +} + +void CameraElement::StartRecord() +{ + if (camera_ && !isRecording_) { + camera_->StartRecord(); + isRecording_ = true; + } +} + +void CameraElement::CloseRecorder(const std::string& params) +{ + auto context = context_.Upgrade(); + if (!context) { + LOGE("fail to get context"); + return; + } + + if (camera_ && isRecording_) { + recorderBackId_ = params; + + context->GetTaskExecutor()->PostTask( + [weak = WeakClaim(this)] { + auto cameraElement = weak.Upgrade(); + if (cameraElement) { + cameraElement->CloseRecorder(); + } + }, + TaskExecutor::TaskType::PLATFORM); + isRecording_ = false; + } +} + +void CameraElement::CloseRecorder() +{ + if (camera_) { + LOGI("CameraElement:CloseRecorder Task"); + camera_->Stop(false); + } +} + +void CameraElement::ExecuteJsCallback(const std::string& callbackId, const std::string& result) +{ + auto context = context_.Upgrade(); + if (!context) { + return; + } + context->SendCallbackMessageToFrontend(callbackId, result); + LOGI("CameraElement: ExecuteJsCallback %{public}s %{public}s", callbackId.c_str(), result.c_str()); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/camera/camera_element.h b/frameworks/core/components/camera/camera_element.h new file mode 100644 index 00000000..7807b256 --- /dev/null +++ b/frameworks/core/components/camera/camera_element.h @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CAMERA_CAMERA_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CAMERA_CAMERA_ELEMENT_H + +#include "core/components/camera/camera.h" +#include "core/components/camera/camera_component.h" +#include "core/components/camera/camera_theme.h" +#include "core/focus/focus_node.h" +#include "core/pipeline/base/composed_element.h" +#include "core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +class CameraElement : public RenderElement, public FocusNode { + DECLARE_ACE_TYPE(CameraElement, RenderElement, FocusNode); + +public: + using ErrorCallback = std::function; + using EventCallback = std::function; + + CameraElement() = default; + ~CameraElement() override; + + void Prepare(const WeakPtr& parent) override; + void TakePhoto(const TakePhotoParams& params); + + void StartRecord(); + void CloseRecorder(const std::string& params); + void StartPreview(); + void StopPreview(); + +private: + void SetMethodCall(const RefPtr& cameraComponent); + void OnTextureSize(int64_t textureId, int32_t textureWidth, int32_t textureHeight); + void OnTextureOffset(int64_t textureId, int32_t x, int32_t y); + void CreatePlatformResource(); + void ReleasePlatformResource(); + void CreateCamera(); + void InitListener(); + void OnTakePhotoCallBack(const std::map& result); + void ExecuteJsCallback(const std::string& callbackId, const std::string& result); + void InitEvent(const RefPtr& cameraComponent); + void OnError(const std::string& errorcode, const std::string& errormsg); + void HiddenChange(bool hidden); + + void OnRecorderCallBack(const std::map& result); + void TakePhoto(const Size& size); + void CloseRecorder(); + + EventCallback onTakePhotoEvent_; + EventCallback onError_; + TakePhotoParams callbackIds_; + RefPtr theme_; + + RefPtr camera_; + std::string recorderBackId_; + bool isRecording_ = false; + bool isPreViewing_ = false; + Media::EventHandler eventHdlr_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CAMERA_CAMERA_ELEMENT_H diff --git a/frameworks/core/components/camera/camera_theme.h b/frameworks/core/components/camera/camera_theme.h new file mode 100644 index 00000000..29077aa2 --- /dev/null +++ b/frameworks/core/components/camera/camera_theme.h @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CAMERA_CAMERA_THEME_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CAMERA_CAMERA_THEME_H + +#include "base/geometry/size.h" +#include "core/components/common/properties/color.h" +#include "core/components/common/properties/edge.h" +#include "core/components/common/properties/text_style.h" +#include "core/components/theme/theme.h" +#include "core/components/theme/theme_constants.h" + +namespace OHOS::Ace { + +/* + * CameraTheme defines color and styles of Camera. CameraTheme should be built + * using CameraTheme::Builder. + */ +class CameraTheme : public virtual Theme { + DECLARE_ACE_TYPE(CameraTheme, Theme); + +public: + class Builder { + public: + Builder() = default; + ~Builder() = default; + + RefPtr Build(const RefPtr& themeConstants) const + { + RefPtr theme = AceType::Claim(new CameraTheme()); + if (!themeConstants) { + return theme; + } + theme->bufferSize_ = Size(themeConstants->GetDimension(THEME_CAMERA_BUFFER_WIDTH).Value(), + themeConstants->GetDimension(THEME_CAMERA_BUFFER_HEIGHT).Value()); + return theme; + } + }; + + ~CameraTheme() override = default; + + const Size& GetBufferSize() const + { + return bufferSize_; + } + +protected: + CameraTheme() = default; + +private: + Size bufferSize_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CAMERA_CAMERA_THEME_H diff --git a/frameworks/core/components/chart/BUILD.gn b/frameworks/core/components/chart/BUILD.gn new file mode 100644 index 00000000..0ffc9e97 --- /dev/null +++ b/frameworks/core/components/chart/BUILD.gn @@ -0,0 +1,22 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("chart") { + sources = [ + "chart_component.cpp", + "flutter_render_chart.cpp", + "render_chart.cpp", + ] +} diff --git a/frameworks/core/components/chart/chart_component.cpp b/frameworks/core/components/chart/chart_component.cpp new file mode 100644 index 00000000..c63e45c7 --- /dev/null +++ b/frameworks/core/components/chart/chart_component.cpp @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/chart/chart_component.h" + +#include "core/components/chart/render_chart.h" + +namespace OHOS::Ace { + +RefPtr ChartComponent::CreateRenderNode() +{ + return RenderChart::Create(); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/chart/chart_component.h b/frameworks/core/components/chart/chart_component.h new file mode 100644 index 00000000..807781ab --- /dev/null +++ b/frameworks/core/components/chart/chart_component.h @@ -0,0 +1,571 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CHART_CHART_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CHART_CHART_COMPONENT_H + +#include + +#include "base/geometry/point.h" +#include "core/components/chart/chart_element.h" +#include "core/components/common/properties/color.h" +#include "core/components/common/properties/placement.h" +#include "core/pipeline/base/component.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +enum class PointShape { + CIRCLE, + SQUARE, + TRIANGLE, +}; + +enum class ChartType { + LINE, + BAR, + GAUGE, + PROGRESS, + RAINBOW, + LOADING, +}; + +struct AxisOption { + double min = 0.0; + double max = 100.0; + int32_t tickNumber = 10; + bool display = false; + Color color = Color::GRAY; +}; + +class TextInfo final { +public: + void SetTextValue(const std::string& value) + { + value_ = value; + } + + const std::string& GetTextValue() const + { + return value_; + } + + void SetPlacement(Placement placement) + { + placement_ = placement; + } + + Placement GetPlacement() const + { + return placement_; + } + + void SetColor(const Color& color) + { + color_ = color; + } + + const Color& GetColor() const + { + return color_; + } + +private: + std::string value_ = ""; + Placement placement_ = Placement::BOTTOM; + Color color_ = Color::WHITE; +}; + +enum class LineType { + SOLID, + DASHED, +}; + +class SegmentInfo final { +public: + void SetSegmentColor(const Color& color) + { + color_ = color; + } + + const Color& GetSegmentColor() const + { + return color_; + } + + double GetSolidWidth() const + { + return solidWidth_; + } + + void SetSolidWidth(double width) + { + solidWidth_ = width; + } + + double GetSpaceWidth() const + { + return spaceWidth_; + } + + void SetSpaceWidth(double width) + { + spaceWidth_ = width; + } + + LineType GetLineType() const + { + return type_; + } + + void SetLineType(LineType type) + { + type_ = type; + } + + bool operator==(const SegmentInfo& segmentInfo) const + { + return color_ == segmentInfo.color_ && NearEqual(solidWidth_, segmentInfo.solidWidth_) && + NearEqual(spaceWidth_, segmentInfo.spaceWidth_); + } + + bool operator!=(const SegmentInfo& segmentInfo) const + { + return !operator==(segmentInfo); + } + +private: + Color color_ = Color::TRANSPARENT; + double solidWidth_ = 5.0; + double spaceWidth_ = 5.0; + LineType type_ = LineType::SOLID; +}; + +class PointInfo final { +public: + PointInfo() = default; + explicit PointInfo(const Point& point) + { + coordinate_ = point; + } + ~PointInfo() = default; + + PointShape GetPointShape() const + { + return pointShape_; + } + + void SetPointShape(PointShape shape) + { + pointShape_ = shape; + } + + const Dimension& GetPointSize() const + { + return pointSize_; + } + + void SetPointSize(const Dimension& size) + { + pointSize_ = size; + } + + const Color& GetStrokeColor() const + { + return strokeColor_; + } + + void SetStrokeColor(const Color& color) + { + strokeColor_ = color; + } + + const Color& GetFillColor() const + { + return fillColor_; + } + + void SetFillColor(const Color& color) + { + fillColor_ = color; + } + + bool GetDisplay() const + { + return display_; + } + + void SetDisplay(bool display) + { + display_ = display; + } + + double GetX() const + { + return coordinate_.GetX(); + } + + double GetY() const + { + return coordinate_.GetY(); + } + + void SetX(double x) + { + coordinate_.SetX(x); + } + + void SetY(double y) + { + coordinate_.SetY(y); + } + + void SetPointStrokeWidth(const Dimension& dimension) + { + pointStrokeWidth_ = dimension; + } + + const Dimension& GetPointStrokeWidth() const + { + return pointStrokeWidth_; + } + +private: + PointShape pointShape_ = PointShape::CIRCLE; + Dimension pointStrokeWidth_ = Dimension(1.0, DimensionUnit::PX); + Dimension pointSize_ = Dimension(5.0, DimensionUnit::PX); + Color strokeColor_ = Color::FromString("#ff0000"); + Color fillColor_ = Color::FromString("#ff0000"); + Point coordinate_; + bool display_ = false; +}; + +class LineInfo final { +public: + LineInfo() = default; + + explicit LineInfo(const TextInfo& textInfo) + { + textInfo_ = textInfo; + } + + explicit LineInfo(const PointInfo& pointInfo) + { + pointInfo_ = pointInfo; + } + + explicit LineInfo(const SegmentInfo& segmentInfo) + { + segmentInfo_ = segmentInfo; + } + + ~LineInfo() = default; + + void SetTextInfo(const TextInfo& textInfo) + { + textInfo_ = textInfo; + } + + TextInfo GetTextInfo() const + { + return textInfo_; + } + + void SetPointInfo(const PointInfo& pointInfo) + { + pointInfo_ = pointInfo; + } + + PointInfo GetPointInfo() const + { + return pointInfo_; + } + + void SetSegmentInfo(const SegmentInfo& segmentInfo) + { + segmentInfo_ = segmentInfo; + } + + SegmentInfo GetSegmentInfo() const + { + return segmentInfo_; + } + +private: + TextInfo textInfo_; + PointInfo pointInfo_; + SegmentInfo segmentInfo_; +}; + +class MainChart final { +public: + MainChart() = default; + ~MainChart() = default; + + // add data into an exist dataset + void AppendData(const LineInfo& lineInfo) + { + dataSets_.emplace_back(lineInfo); + } + + // clear data in data set + void ClearData() + { + dataSets_.clear(); + } + + // create and add a new data set + void SetData(const std::vector& lineInfo) + { + dataSets_ = lineInfo; + } + + bool ReplaceData(uint32_t index, const LineInfo& lineInfo) + { + if (index >= dataSets_.size()) { + return false; + } + dataSets_[index] = lineInfo; + return true; + } + + std::vector GetData() const + { + return dataSets_; + } + + const Color& GetFillColor() const + { + return fillColor_; + } + + void SetFillColor(const Color& color) + { + fillColor_ = color; + } + + const Color& GetStrokeColor() const + { + return strokeColor_; + } + + void SetStrokeColor(const Color& color) + { + strokeColor_ = color; + } + + bool GetGradient() const + { + return gradient_; + } + + void SetGradient(bool gradient) + { + gradient_ = gradient; + } + + void SetHeadPoint(const PointInfo& point) + { + headPoint_ = point; + } + + const PointInfo& GetHeadPoint() const + { + return headPoint_; + } + + void SetTopPoint(const PointInfo& point) + { + topPoint_ = point; + } + + const PointInfo& GetTopPoint() const + { + return topPoint_; + } + + void SetBottomPoint(const PointInfo& point) + { + bottomPoint_ = point; + } + + const PointInfo& GetBottomPoint() const + { + return bottomPoint_; + } + + bool GetSmoothFlag() const + { + return smoothFlag_; + } + + void SetSmoothFlag(bool flag) + { + smoothFlag_ = flag; + } + + double GetLineWidth() const + { + return lineWidth_; + } + + void SetLineWidth(double lineWidth) + { + lineWidth_ = lineWidth; + } + + void SetErasePointNumber(int32_t number) + { + erasePointNumber_ = number; + } + + int32_t GetErasePointNumber() const + { + return erasePointNumber_; + } + + void SetLineGradient(bool flag) + { + lineGradient_ = flag; + } + + bool GetLineGradient() const + { + return lineGradient_; + } + + void SetHeadPointIndex(int32_t index) + { + headPointIndex_ = index; + } + + int32_t GetHeadPointIndex() const + { + return headPointIndex_; + } + + const Color& GetTextColor() const + { + return textColor_; + } + + void SetTextColor(const Color& textColor) + { + textColor_ = textColor; + } + + double GetTextSize() const + { + return textSize_; + } + + void SetTextSize(double textSize) + { + textSize_ = textSize; + } + + std::vector GetFontFamily() const + { + return fontFamily_; + } + + void SetFontFamily(const std::vector& fonts) + { + fontFamily_ = fonts; + } + +private: + // data set name, vector of data + std::vector dataSets_; + double lineWidth_ = 1.0; + bool smoothFlag_ = false; + bool gradient_ = false; + PointInfo headPoint_; + PointInfo topPoint_; + PointInfo bottomPoint_; + Color fillColor_ = Color::FromString("#ff6384"); + Color strokeColor_ = Color::FromString("#ff6384"); + int32_t erasePointNumber_ = 0; + int32_t headPointIndex_ = -1; + bool lineGradient_ = false; + + Color textColor_; + double textSize_ = 18.0; + std::vector fontFamily_; +}; + +class ChartComponent : public RenderComponent { + DECLARE_ACE_TYPE(ChartComponent, RenderComponent); + +public: + ChartComponent() = default; + explicit ChartComponent(ChartType type) + { + type_ = type; + } + ~ChartComponent() override = default; + + RefPtr CreateRenderNode() override; + + const AxisOption& GetHorizontalOption() const + { + return horizontal_; + } + + void SetHorizontalOption(const AxisOption& xOption) + { + horizontal_ = xOption; + } + + const AxisOption& GetVerticalOption() + { + return vertical_; + } + + void SetVerticalOption(const AxisOption& yOption) + { + vertical_ = yOption; + } + + std::vector GetMainCharts() const + { + return mainCharts_; + } + + void SetMainCharts(const std::vector& mainCharts) + { + mainCharts_ = mainCharts; + } + + ChartType GetChartType() const + { + return type_; + } + + RefPtr CreateElement() override + { + return AceType::MakeRefPtr(); + } + +private: + ChartType type_ = ChartType::LINE; + AxisOption horizontal_; + AxisOption vertical_; + std::vector mainCharts_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CHART_CHART_COMPONENT_H diff --git a/frameworks/core/components/chart/chart_element.h b/frameworks/core/components/chart/chart_element.h new file mode 100644 index 00000000..700768b5 --- /dev/null +++ b/frameworks/core/components/chart/chart_element.h @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CHART_CHART_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CHART_CHART_ELEMENT_H + +#include "core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +class ChartElement : public RenderElement { + DECLARE_ACE_TYPE(ChartElement, RenderElement); + +public: + ChartElement() = default; + ~ChartElement() override = default; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CHART_CHART_ELEMENT_H diff --git a/frameworks/core/components/chart/flutter_render_chart.cpp b/frameworks/core/components/chart/flutter_render_chart.cpp new file mode 100644 index 00000000..9848b81c --- /dev/null +++ b/frameworks/core/components/chart/flutter_render_chart.cpp @@ -0,0 +1,623 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/chart/flutter_render_chart.h" + +#include "flutter/lib/ui/text/font_collection.h" +#include "flutter/lib/ui/ui_dart_state.h" +#include "flutter/third_party/txt/src/txt/paragraph_txt.h" +#include "third_party/skia/include/core/SkColor.h" +#include "third_party/skia/include/effects/Sk1DPathEffect.h" +#include "third_party/skia/include/effects/SkGradientShader.h" + +#include "base/utils/string_utils.h" +#include "core/components/calendar/flutter_render_calendar.h" +#include "core/components/font/flutter_font_collection.h" + +namespace OHOS::Ace { +namespace { + +#ifndef WEARABLE_PRODUCT +constexpr double EDGE_PADDING = 20.0; +constexpr double TEXT_PADDING = 10.0; +#else +constexpr double EDGE_PADDING = 2.0; +constexpr double TEXT_PADDING = 1.0; +#endif +constexpr double TICK_LENGTH = 5.0; +constexpr double RATIO_CONSTANT = 1.732; +constexpr double BARS_INTERVAL_PROPORTION = 0.3; +constexpr double BAR_INTERVAL_PROPORTION = 0.1; +constexpr double DEFAULT_AXISTICK = 10.0; +constexpr double DEFAULT_AXIS_STROKE_WIDTH = 3.0; +constexpr double BEZIER_CONSTANT = 6.0; +constexpr double DOUBLE_TEXT_PADDING = TEXT_PADDING * 2; + +} // namespace + +RefPtr RenderChart::Create() +{ + return AceType::MakeRefPtr(); +} + +RenderLayer FlutterRenderChart::GetRenderLayer() +{ + if (!layer_) { + layer_ = AceType::MakeRefPtr(); + } + return AceType::RawPtr(layer_); +} + +void FlutterRenderChart::Update(const RefPtr& component) +{ + RenderChart::Update(component); +} + +Offset FlutterRenderChart::ConvertDataToPosition(const Rect& paintRegion, const PointInfo& point) +{ + double xLength = horizontal_.max - horizontal_.min; + double yLength = vertical_.max - vertical_.min; + if (NearEqual(xLength, 0.0) || NearEqual(yLength, 0.0)) { + return Offset(0, 0); + } + return Offset(paintRegion.GetOffset().GetX() + (point.GetX() - horizontal_.min) * paintRegion.Width() / xLength, + paintRegion.GetOffset().GetY() + paintRegion.Height() - + (point.GetY() - vertical_.min) * paintRegion.Height() / yLength); +} + +void FlutterRenderChart::Paint(RenderContext& context, const Offset& offset) +{ + if (vertical_.min >= vertical_.max || horizontal_.min >= horizontal_.max) { + return; + } + Rect verticalPaintRegion = + Rect(offset.GetX(), offset.GetY(), GetLayoutSize().Width() * 0.1, GetLayoutSize().Height()); + Rect horizontalPaintRegion = + Rect(offset.GetX(), offset.GetY() + GetLayoutSize().Height() - GetLayoutSize().Height() * 0.1, + GetLayoutSize().Width(), GetLayoutSize().Height() * 0.1); + Rect dataRegion; + if (!vertical_.display && !horizontal_.display && type_ == ChartType::LINE) { + dataRegion = Rect(offset.GetX() + EDGE_PADDING, offset.GetY() + DOUBLE_TEXT_PADDING, + GetLayoutSize().Width() - 2 * EDGE_PADDING, GetLayoutSize().Height() - 2 * DOUBLE_TEXT_PADDING); + } else { + PaintVerticalAxis(context, offset, verticalPaintRegion); + + PaintHorizontalAxis(context, horizontalPaintRegion); + dataRegion = Rect(offset.GetX() + tickHorizontalOffset_ + EDGE_PADDING, offset.GetY() + EDGE_PADDING, + horizontal_.tickNumber * tickHorizontalOffset_, vertical_.tickNumber * tickOffset_); + } + if (!dataRegion.IsValid()) { + LOGW("chart paint data region is not vaild height:%{public}lf, width:%{public}lf. do not paint data", + dataRegion.Height(), dataRegion.Width()); + return; + } + PaintDatas(context, dataRegion); +} + +void FlutterRenderChart::PaintStylePoints( + const ScopedCanvas& canvas, const Rect& paintRegion, const MainChart& chartData) +{ + flutter::Paint paint; + flutter::PaintData paintData; + paint.paint()->setAntiAlias(true); + + for (const auto& points : chartData.GetData()) { + const PointInfo& point = points.GetPointInfo(); + if (point.GetDisplay()) { + PaintPoint(canvas, ConvertDataToPosition(paintRegion, point), paint, paintData, point); + } + } + PointInfo headPoint = chartData.GetHeadPoint(); + if (headPoint.GetDisplay()) { + PaintPoint(canvas, ConvertDataToPosition(paintRegion, headPoint), paint, paintData, headPoint); + } + PointInfo topPoint = chartData.GetTopPoint(); + if (topPoint.GetDisplay()) { + PaintPoint(canvas, ConvertDataToPosition(paintRegion, topPoint), paint, paintData, topPoint); + } + PointInfo bottomPoint = chartData.GetBottomPoint(); + if (bottomPoint.GetDisplay()) { + PaintPoint(canvas, ConvertDataToPosition(paintRegion, bottomPoint), paint, paintData, bottomPoint); + } +} + +void FlutterRenderChart::PaintText(const ScopedCanvas& canvas, const Rect& paintRegion, const MainChart& chartData) +{ + if (chartData.GetData().empty()) { + return; + } + auto fontCollection = FlutterFontCollection::GetInstance().GetFontCollection(); + if (!fontCollection) { + LOGW("PaintText: fontCollection is null"); + return; + } + txt::ParagraphStyle style; + txt::TextStyle txtStyle; + txtStyle.font_size = chartData.GetTextSize(); + txtStyle.font_families = chartData.GetFontFamily(); + txtStyle.font_weight = txt::FontWeight::w400; + std::unique_ptr builder; + double paragraphSize = paintRegion.Width() / chartData.GetData().size(); + style.max_lines = 1; + for (const auto& point : chartData.GetData()) { + const TextInfo& text = point.GetTextInfo(); + const PointInfo& pointInfo = point.GetPointInfo(); + Offset pointPosition = ConvertDataToPosition(paintRegion, pointInfo); + txtStyle.color = text.GetColor().GetValue(); + builder = txt::ParagraphBuilder::CreateTxtBuilder(style, fontCollection); + builder->PushStyle(txtStyle); + builder->AddText(StringUtils::Str8ToStr16(text.GetTextValue())); + auto paragraph = builder->Build(); + paragraph->Layout(paragraphSize); + Size textSize = Size(paragraph->GetMinIntrinsicWidth(), paragraph->GetHeight()); + if (text.GetPlacement() == Placement::TOP) { + paragraph->Paint(canvas->canvas(), pointPosition.GetX() - textSize.Width() / 2, + pointPosition.GetY() - textSize.Height() - TEXT_PADDING); + } else if (text.GetPlacement() == Placement::BOTTOM) { + paragraph->Paint( + canvas->canvas(), pointPosition.GetX() - textSize.Width() / 2, pointPosition.GetY() + TEXT_PADDING); + } + } +} + +void FlutterRenderChart::SetEdgeStyle(const PointInfo& point, flutter::Paint& paint) const +{ + paint.paint()->setStyle(SkPaint::Style::kStroke_Style); + paint.paint()->setStrokeWidth(NormalizeToPx(point.GetPointStrokeWidth())); + paint.paint()->setColor(point.GetStrokeColor().GetValue()); +} + +void FlutterRenderChart::PaintPoint(const ScopedCanvas& canvas, const Offset& offset, flutter::Paint paint, + flutter::PaintData paintData, const PointInfo& point) +{ + paint.paint()->setColor(point.GetFillColor().GetValue()); + paint.paint()->setStyle(SkPaint::Style::kFill_Style); + double pointSize = NormalizeToPx(point.GetPointSize()); + double halfThickness = NormalizeToPx(point.GetPointStrokeWidth()) / 2; + double innerRadius = pointSize / 2 - halfThickness; + // first fill point color, then draw edge of point. + switch (point.GetPointShape()) { + case PointShape::CIRCLE: { + canvas->drawCircle(offset.GetX(), offset.GetY(), innerRadius, paint, paintData); + SetEdgeStyle(point, paint); + canvas->drawCircle(offset.GetX(), offset.GetY(), pointSize / 2, paint, paintData); + break; + } + case PointShape::SQUARE: { + canvas->drawRect(offset.GetX() - innerRadius, + offset.GetY() - innerRadius, offset.GetX() + innerRadius, + offset.GetY() + innerRadius, paint, paintData); + SetEdgeStyle(point, paint); + canvas->drawRect(offset.GetX() - pointSize / 2, offset.GetY() - pointSize / 2, + offset.GetX() + pointSize / 2, offset.GetY() + pointSize / 2, paint, paintData); + break; + } + case PointShape::TRIANGLE: { + auto path = flutter::CanvasPath::Create(); + path->moveTo(offset.GetX(), offset.GetY() - innerRadius); + path->lineTo(offset.GetX() - RATIO_CONSTANT * innerRadius / 2, offset.GetY() + innerRadius / 2); + path->lineTo(offset.GetX() + RATIO_CONSTANT * innerRadius / 2, offset.GetY() + innerRadius / 2); + path->close(); + canvas->drawPath(path.get(), paint, paintData); + path->reset(); + path->moveTo(offset.GetX(), offset.GetY() - pointSize / 2); + path->lineTo(offset.GetX() - RATIO_CONSTANT * pointSize / 4, offset.GetY() + pointSize / 4); + path->lineTo(offset.GetX() + RATIO_CONSTANT * pointSize / 4, offset.GetY() + pointSize / 4); + path->close(); + SetEdgeStyle(point, paint); + canvas->drawPath(path.get(), paint, paintData); + break; + } + default: { + canvas->drawCircle(offset.GetX(), offset.GetY(), innerRadius, paint, paintData); + SetEdgeStyle(point, paint); + canvas->drawCircle(offset.GetX(), offset.GetY(), pointSize / 2, paint, paintData); + break; + } + } +} + +void FlutterRenderChart::PaintDatas(RenderContext& context, const Rect& paintRect) +{ + ScopedCanvas canvas = ScopedCanvas::Create(context); + if (!canvas) { + LOGE("Paint canvas is null"); + return; + } + if (NearEqual(paintRect.Width(), 0.0) || NearEqual(paintRect.Height(), 0.0)) { + LOGE("data paint region width:%{public}lf height:%{public}lf", paintRect.Width(), paintRect.Height()); + return; + } + if (type_ == ChartType::LINE) { + PaintLinearGraph(canvas, paintRect); + } else { + flutter::Paint paint; + paint.paint()->setAntiAlias(true); + paint.paint()->setStyle(SkPaint::Style::kStrokeAndFill_Style); + + const int32_t barGroupNumber = mainCharts_.size(); + auto barsAreaNumber = horizontal_.tickNumber; + for (int32_t barGroupIndex = 0; barGroupIndex < barGroupNumber; ++barGroupIndex) { + auto barGroup = mainCharts_[barGroupIndex]; + paint.paint()->setColor(barGroup.GetFillColor().GetValue()); + PaintBar(canvas, paint, barGroup.GetData(), paintRect, barGroupNumber, barsAreaNumber, barGroupIndex); + } + } +} + +void FlutterRenderChart::UpdateLineGradientPoint( + const std::vector& pointInfo, const MainChart& line, const Rect& paintRect) +{ + if (line.GetHeadPointIndex() > 0 && line.GetErasePointNumber() > 0) { + startGradientIndex_ = line.GetHeadPointIndex() + line.GetErasePointNumber() - 1; + endGradientIndex_ = startGradientIndex_ + 1; + if (static_cast(startGradientIndex_) >= pointInfo.size()) { + startGradientIndex_ = pointInfo.size() - 1; + } + if (static_cast(endGradientIndex_) >= pointInfo.size()) { + endGradientIndex_ = pointInfo.size() - 1; + } + startGradientPoint_ = ConvertDataToPosition(paintRect, pointInfo[startGradientIndex_].GetPointInfo()); + endGradientPoint_ = ConvertDataToPosition(paintRect, pointInfo[endGradientIndex_].GetPointInfo()); + } else { + startGradientPoint_ = Offset(0.0, 0.0); + endGradientPoint_ = Offset(0.0, 0.0); + gradientOfLine_ = false; + } +} + +void FlutterRenderChart::PaintLinearGraph(const ScopedCanvas& canvas, const Rect& paintRect) +{ + for (const auto& line : mainCharts_) { + const auto& pointInfo = line.GetData(); + if (pointInfo.empty()) { + // there is no data in current data set, and skip this line + continue; + } + auto previousSegment = pointInfo[0].GetSegmentInfo(); + auto previousPoint = pointInfo[0].GetPointInfo(); + Offset previousPosition = ConvertDataToPosition(paintRect, previousPoint); + auto edgePath = flutter::CanvasPath::Create(); + auto gradientPath = flutter::CanvasPath::Create(); + edgePath->moveTo(previousPosition.GetX(), previousPosition.GetY()); + gradientPath->moveTo(previousPosition.GetX(), paintRect.Bottom()); + gradientPath->lineTo(previousPosition.GetX(), previousPosition.GetY()); + + UpdateLineGradientPoint(pointInfo, line, paintRect); + + for (size_t index = 1; index < pointInfo.size(); index++) { + const auto& currentPoint = pointInfo[index].GetPointInfo(); + Offset currentPosition = ConvertDataToPosition(paintRect, currentPoint); + if (line.GetSmoothFlag()) { + bool isEnd = previousSegment != pointInfo[index].GetSegmentInfo(); + AddCubicPath(gradientPath, paintRect, line.GetData(), index, isEnd); + AddCubicPath(edgePath, paintRect, line.GetData(), index, isEnd); + } else { + gradientPath->lineTo(currentPosition.GetX(), currentPosition.GetY()); + edgePath->lineTo(currentPosition.GetX(), currentPosition.GetY()); + } + int32_t i = static_cast(index); + if ((line.GetHeadPointIndex() > 0) && (i > line.GetHeadPointIndex()) && + (i <= line.GetHeadPointIndex() + line.GetErasePointNumber())) { + gradientPath->reset(); + if (i < line.GetHeadPointIndex() + line.GetErasePointNumber()) { + edgePath->reset(); + edgePath->moveTo(currentPosition.GetX(), currentPosition.GetY()); + } else { + edgePath->lineTo(currentPosition.GetX(), currentPosition.GetY()); + gradientPath->moveTo(currentPosition.GetX(), paintRect.Bottom()); + gradientPath->lineTo(currentPosition.GetX(), currentPosition.GetY()); + gradientOfLine_ = true; + } + previousSegment = pointInfo[index].GetSegmentInfo(); + previousPoint = currentPoint; + previousPosition = currentPosition; + continue; + } + if (previousSegment != pointInfo[index].GetSegmentInfo() || + (line.GetHeadPointIndex() > 0 && line.GetHeadPointIndex() == i)) { + gradientPath->lineTo(currentPosition.GetX(), paintRect.Bottom()); + gradientPath->close(); + if (line.GetGradient()) { + PaintLineGradient(canvas, gradientPath, paintRect, line.GetFillColor(), line.GetTopPoint()); + } + PaintLineEdge(canvas, edgePath, previousSegment, line.GetLineWidth(), false); + // print gradient + gradientPath->reset(); + edgePath->reset(); + previousSegment = pointInfo[index].GetSegmentInfo(); + previousPoint = currentPoint; + previousPosition = currentPosition; + edgePath->moveTo(previousPosition.GetX(), previousPosition.GetY()); + gradientPath->moveTo(previousPosition.GetX(), paintRect.Bottom()); + gradientPath->lineTo(previousPosition.GetX(), previousPosition.GetY()); + } else { + previousSegment = pointInfo[index].GetSegmentInfo(); + previousPoint = currentPoint; + previousPosition = currentPosition; + } + } + gradientPath->lineTo(previousPosition.GetX(), paintRect.Bottom()); + gradientPath->close(); + if (line.GetGradient()) { + PaintLineGradient(canvas, gradientPath, paintRect, line.GetFillColor(), line.GetTopPoint()); + } + PaintLineEdge(canvas, edgePath, previousSegment, line.GetLineWidth(), true); + PaintStylePoints(canvas, paintRect, line); + PaintText(canvas, paintRect, line); + } +} + +void FlutterRenderChart::PaintLineEdge(const ScopedCanvas& canvas, fml::RefPtr path, + const SegmentInfo segmentInfo, double thickness, bool drawGradient) +{ + flutter::Paint paint; + flutter::PaintData paintData; + paint.paint()->setAntiAlias(true); + paint.paint()->setColor(segmentInfo.GetSegmentColor().GetValue()); + if (segmentInfo.GetLineType() == LineType::DASHED) { + SkPath subPath; + subPath.addRRect( + SkRRect::MakeRectXY(SkRect::MakeXYWH(0.0, -0.5 * thickness, segmentInfo.GetSolidWidth(), thickness), + 0.5 * thickness, 0.5 * thickness)); + paint.paint()->setPathEffect(SkPath1DPathEffect::Make(subPath, + segmentInfo.GetSpaceWidth() + segmentInfo.GetSolidWidth(), 5.0f, SkPath1DPathEffect::kMorph_Style)); + } else { + paint.paint()->setStrokeWidth(thickness); + } + if (gradientOfLine_ && drawGradient) { + SkPoint points[2] = { SkPoint::Make(startGradientPoint_.GetX(), 0.0f), + SkPoint::Make(endGradientPoint_.GetX(), 0.0f) }; + SkColor colors[2] = { segmentInfo.GetSegmentColor().ChangeAlpha(0).GetValue(), + segmentInfo.GetSegmentColor().GetValue() }; +#ifdef USE_SYSTEM_SKIA + paint.paint()->setShader( + SkGradientShader::MakeLinear(points, colors, nullptr, 2, SkShader::kClamp_TileMode, 0, nullptr)); +#else + paint.paint()->setShader( + SkGradientShader::MakeLinear(points, colors, nullptr, 2, SkTileMode::kClamp, 0, nullptr)); +#endif + } + paint.paint()->setStyle(SkPaint::Style::kStroke_Style); + canvas->drawPath(path.get(), paint, paintData); +} + +void FlutterRenderChart::PaintLineGradient(const ScopedCanvas& canvas, fml::RefPtr path, + const Rect& paintRect, Color fillColor, const PointInfo& peekPoint) +{ + flutter::Paint paint; + flutter::PaintData paintData; + paint.paint()->setAntiAlias(true); + paint.paint()->setShader( + CreateFillGradientShader(paintRect, fillColor, ConvertDataToPosition(paintRect, peekPoint).GetY())); + + paint.paint()->setStyle(SkPaint::Style::kStrokeAndFill_Style); + canvas->drawPath(path.get(), paint, paintData); +} + +sk_sp FlutterRenderChart::CreateFillGradientShader(const Rect& paintRect, const Color& fillColor, double top) +{ + SkPoint points[2] = { SkPoint::Make(paintRect.GetOffset().GetX(), top), + SkPoint::Make(paintRect.GetOffset().GetX(), paintRect.GetOffset().GetY() + paintRect.Height()) }; + SkColor colors[2] = { fillColor.GetValue(), fillColor.ChangeAlpha(0).GetValue() }; +#ifdef USE_SYSTEM_SKIA + return SkGradientShader::MakeLinear(points, colors, nullptr, 2, SkShader::kClamp_TileMode, 0, nullptr); +#else + return SkGradientShader::MakeLinear(points, colors, nullptr, 2, SkTileMode::kClamp, 0, nullptr); +#endif +} + +Offset FlutterRenderChart::CalculateControlA(const Offset& prev, const Offset& cur, const Offset& next) +{ + return Offset(cur.GetX() + (next.GetX() - prev.GetX()) / BEZIER_CONSTANT, + cur.GetY() + (next.GetY() - prev.GetY()) / BEZIER_CONSTANT); +} + +Offset FlutterRenderChart::CalculateControlB(const Offset& cur, const Offset& next, const Offset& nextNext) +{ + return Offset(next.GetX() - (nextNext.GetX() - cur.GetX()) / BEZIER_CONSTANT, + next.GetY() - (nextNext.GetY() - cur.GetY()) / BEZIER_CONSTANT); +} + +int32_t FlutterRenderChart::PaintLine(uint32_t startIndex, const std::vector& line, + fml::RefPtr path, const MainChart& data, const Rect& paintRect) +{ + uint32_t index = startIndex; + startIndex_ = startIndex; + bool startPoint = true; + for (; index < line.size(); index++) { + const auto& point = line[index].GetPointInfo(); + if (point.GetX() > horizontal_.max || point.GetX() < horizontal_.min || point.GetY() > vertical_.max || + point.GetY() < vertical_.min) { + continue; + } + if (startPoint) { + Offset position = ConvertDataToPosition(paintRect, point); + if (data.GetGradient() && !drawLine_) { + path->moveTo(position.GetX(), paintRect.GetOffset().GetY() + paintRect.GetSize().Height()); + path->lineTo(position.GetX(), position.GetY()); + } else { + path->moveTo(position.GetX(), position.GetY()); + } + startPoint = false; + } else if (index == line.size() - 1 || + (data.GetHeadPointIndex() >= 0 && (index == static_cast(data.GetHeadPointIndex())))) { + Offset position = ConvertDataToPosition(paintRect, point); + if (data.GetSmoothFlag()) { + AddCubicPath(path, paintRect, line, index, true); + } else { + path->lineTo(position.GetX(), position.GetY()); + } + if (data.GetGradient() && !drawLine_) { + path->lineTo(position.GetX(), paintRect.GetOffset().GetY() + paintRect.GetSize().Height()); + } + index += 1; + break; + } else { + if (data.GetSmoothFlag()) { + AddCubicPath(path, paintRect, line, index, false); + } else { + Offset position = ConvertDataToPosition(paintRect, point); + path->lineTo(position.GetX(), position.GetY()); + } + } + } + return index; +} + +void FlutterRenderChart::AddCubicPath(fml::RefPtr& path, const Rect& paintRect, + const std::vector& line, uint32_t index, bool isEnd) +{ + // use control point A = [(Xi + (Xi+1 - Xi-1) / 4), (Yi + (Yi+1 - Yi-1) / 4)] + // and control point B = [(Xi+1 - (Xi+2 - Xi) / 4), (Yi+1 - (Yi+2 - Yi) / 4)] + if (index > 0 && index < line.size()) { + Offset prev = ConvertDataToPosition( + paintRect, line[(index - 2 < startIndex_ || index < 2) ? startIndex_ : index - 2].GetPointInfo()); + Offset cur = ConvertDataToPosition(paintRect, line[index - 1].GetPointInfo()); + Offset next = ConvertDataToPosition(paintRect, line[index].GetPointInfo()); + Offset nextNext = ConvertDataToPosition(paintRect, + (isEnd || index + 1 >= line.size()) ? line[index].GetPointInfo() : line[index + 1].GetPointInfo()); + Offset controlA = CalculateControlA(prev, cur, next); + Offset controlB = CalculateControlB(cur, next, nextNext); + path->cubicTo(controlA.GetX(), controlA.GetY(), controlB.GetX(), controlB.GetY(), next.GetX(), next.GetY()); + } else { + LOGW("index out of region"); + } +} + +void FlutterRenderChart::PaintHorizontalAxis(RenderContext& context, const Rect& paintRect) +{ + ScopedCanvas canvas = ScopedCanvas::Create(context); + if (!canvas) { + LOGE("Paint canvas is null"); + return; + } + const Offset offset = paintRect.GetOffset(); + + flutter::Paint paint; + flutter::PaintData paintData; + paint.paint()->setAntiAlias(true); + paint.paint()->setColor(horizontal_.color.GetValue()); + paint.paint()->setStyle(SkPaint::Style::kStroke_Style); + paint.paint()->setStrokeWidth(DEFAULT_AXIS_STROKE_WIDTH); + + if ((horizontal_.tickNumber <= 0) || (horizontal_.tickNumber + 1 == 0)) { + horizontal_.tickNumber = DEFAULT_AXISTICK; + } + tickHorizontalOffset_ = (paintRect.Width() - 2 * EDGE_PADDING) / (horizontal_.tickNumber + 1); + + if (!horizontal_.display) { + return; + } + + double tickPosition = EDGE_PADDING + tickHorizontalOffset_; + for (int32_t index = 0; index < horizontal_.tickNumber; index++) { + canvas->drawLine(offset.GetX() + tickPosition, offset.GetY(), offset.GetX() + tickPosition, + offset.GetY() + TICK_LENGTH, paint, paintData); + tickPosition += tickHorizontalOffset_; + } + + canvas->drawLine(offset.GetX(), offset.GetY() + 0.5 * TICK_LENGTH, offset.GetX() + paintRect.Width(), + offset.GetY() + 0.5 * TICK_LENGTH, paint, paintData); +} + +void FlutterRenderChart::PaintVerticalAxis(RenderContext& context, const Offset& offset, const Rect& paintRect) +{ + ScopedCanvas canvas = ScopedCanvas::Create(context); + if (!canvas) { + LOGE("Paint canvas is null"); + return; + } + + flutter::Paint paint; + flutter::PaintData paintData; + paint.paint()->setAntiAlias(true); + paint.paint()->setColor(vertical_.color.GetValue()); + paint.paint()->setStyle(SkPaint::Style::kStroke_Style); + paint.paint()->setStrokeWidth(DEFAULT_AXIS_STROKE_WIDTH); + + if ((vertical_.tickNumber <= 0) || (vertical_.tickNumber + 1 == 0)) { + vertical_.tickNumber = DEFAULT_AXISTICK; + } + tickOffset_ = (paintRect.Height() - 2 * EDGE_PADDING) / (vertical_.tickNumber + 1); + + if (!vertical_.display) { + return; + } + + double tickPosition = EDGE_PADDING + tickOffset_; + for (int32_t index = 0; index < vertical_.tickNumber; index++) { + canvas->drawLine(offset.GetX() + paintRect.Width() - TICK_LENGTH, offset.GetY() + tickPosition, + offset.GetX() + paintRect.Width(), offset.GetY() + tickPosition, paint, paintData); + tickPosition += tickOffset_; + } + + canvas->drawLine(offset.GetX() + paintRect.Width() - 0.5 * TICK_LENGTH, offset.GetY(), + offset.GetX() + paintRect.Width() - 0.5 * TICK_LENGTH, offset.GetY() + paintRect.Height(), paint, paintData); +} + +void FlutterRenderChart::PaintBar(const ScopedCanvas& canvas, flutter::Paint& paint, + const std::vector& barGroupData, const Rect& paintRect, int32_t barGroupNum, int32_t barsAreaNum, + int32_t barGroupIndex) +{ + if (NearEqual(paintRect.Width(), 0.0) || NearEqual(paintRect.Height(), 0.0)) { + LOGE("data paint region width:%{public}lf height:%{public}lf", paintRect.Width(), paintRect.Height()); + return; + } + const int32_t barSize = barGroupData.size(); + for (int32_t barIndex = 0; barIndex < barSize; ++barIndex) { + const auto point = barGroupData[barIndex].GetPointInfo(); + // If the actual number of data exceeds Tick, the extra part will not be laid out + if (barIndex >= barsAreaNum) { + return; + } + auto barsAreaPaintRect = GetBarsAreaPaintRect(paintRect, barIndex); + auto barAreaPaintRect = GetBarAreaPaintRect(barsAreaPaintRect, barGroupIndex, barGroupNum); + Offset position = ConvertDataToPosition(paintRect, point); + flutter::RRect rrect; + flutter::PaintData paintData; + // barAreaPaintRect left add bar interval is originX + auto originX = barAreaPaintRect.GetOffset().GetX() + (BAR_INTERVAL_PROPORTION / 2) * barAreaPaintRect.Width(); + auto originY = position.GetY(); + + canvas->drawRect(originX, originY, originX + barAreaPaintRect.Width() * (1 - BAR_INTERVAL_PROPORTION), + paintRect.GetOffset().GetY() + paintRect.Height(), paint, paintData); + } +} + +Rect FlutterRenderChart::GetBarsAreaPaintRect(const Rect& paintRect, int32_t barsAreaIndex) +{ + auto barsAreaWidth = paintRect.Width() / horizontal_.tickNumber; + auto barsAreaHeight = paintRect.Height(); + Rect barsAreaRect = + Rect(paintRect.Left() + barsAreaIndex * barsAreaWidth, paintRect.Top(), barsAreaWidth, barsAreaHeight); + return barsAreaRect; +} + +Rect FlutterRenderChart::GetBarAreaPaintRect( + const Rect& barsAreaPaintRect, int32_t barGroupIndex, int32_t barGroupNumber) +{ + // Divide 30% of the horizontal space of barsArea into 2 parts as left and right intervals, + // and divide the remaining part by barGroupNumber to get barAreaWidth + auto barAreaWidth = (1 - BARS_INTERVAL_PROPORTION) * barsAreaPaintRect.Width() / barGroupNumber; + auto barAreaHeight = barsAreaPaintRect.Height(); + // After leaving the interval, the left border of the barArea area is obtained + auto barAreaLeft = barsAreaPaintRect.Left() + BARS_INTERVAL_PROPORTION / 2 * barsAreaPaintRect.Width() + + barGroupIndex * barAreaWidth; + Rect barAreaRect = Rect(barAreaLeft, barsAreaPaintRect.Top(), barAreaWidth, barAreaHeight); + return barAreaRect; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/chart/flutter_render_chart.h b/frameworks/core/components/chart/flutter_render_chart.h new file mode 100644 index 00000000..1a5bf891 --- /dev/null +++ b/frameworks/core/components/chart/flutter_render_chart.h @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CHART_FLUTTER_RENDER_CHART_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CHART_FLUTTER_RENDER_CHART_H + +#include "flutter/lib/ui/painting/path.h" +#include "flutter/lib/ui/text/font_collection.h" +#include "flutter/lib/ui/text/paragraph_builder.h" + +#include "base/geometry/offset.h" +#include "base/geometry/rect.h" +#include "core/components/chart/render_chart.h" +#include "core/pipeline/base/scoped_canvas_state.h" +#include "core/pipeline/layers/offset_layer.h" + +namespace OHOS::Ace { + +class FlutterRenderChart : public RenderChart { + DECLARE_ACE_TYPE(FlutterRenderChart, RenderChart); + +public: + FlutterRenderChart() = default; + + ~FlutterRenderChart() override = default; + + RenderLayer GetRenderLayer() override; + + bool IsRepaintBoundary() const override + { + return true; + } + +private: + void Update(const RefPtr& component) override; + + void Paint(RenderContext& context, const Offset& offset) override; + + void PaintDatas(RenderContext& context, const Rect& paintRect); + + void PaintHorizontalAxis(RenderContext& context, const Rect& paintRect); + + void PaintVerticalAxis(RenderContext& context, const Offset& offset, const Rect& paintRect); + + Offset ConvertDataToPosition(const Rect& paintRegion, const PointInfo& point); + + void SetEdgeStyle(const PointInfo& point, flutter::Paint& paint) const; + + void PaintStylePoints(const ScopedCanvas& canvas, const Rect& paintRegion, const MainChart& chartData); + + void PaintPoint(const ScopedCanvas& canvas, const Offset& offset, flutter::Paint paint, + flutter::PaintData paintData, const PointInfo& point); + + void PaintText(const ScopedCanvas& canvas, const Rect& paintRegion, const MainChart& chartData); + + void PaintLinearGraph(const ScopedCanvas& context, const Rect& paintRect); + + void PaintLineEdge(const ScopedCanvas& canvas, fml::RefPtr path, const SegmentInfo segmentInfo, + double thickness, bool drawGradient = false); + + void UpdateLineGradientPoint(const std::vector& pointInfo, const MainChart& line, const Rect& paintRect); + + void PaintLineGradient(const ScopedCanvas& canvas, fml::RefPtr path, const Rect& paintRect, + Color fillColor, const PointInfo& peekPoint); + + int32_t PaintLine(uint32_t index, const std::vector& line, fml::RefPtr path, + const MainChart& data, const Rect& paintRect); + + void AddCubicPath(fml::RefPtr& path, const Rect& paintRect, const std::vector& line, + uint32_t index, bool isEnd); + + sk_sp CreateFillGradientShader(const Rect& paintRect, const Color& fillColor, double top); + + void PaintBar(const ScopedCanvas& canvas, flutter::Paint& paint, const std::vector& barGroupData, + const Rect& paintRect, int32_t barGroupNum, int32_t barsAreaNum, int32_t barGroupIndex); + + Rect GetBarsAreaPaintRect(const Rect& paintRect, int32_t barsAreaIndex); + + Rect GetBarAreaPaintRect(const Rect& barsAreaPaintRect, int32_t barGroupIndex, int32_t barGroupNumber); + + Offset CalculateControlA(const Offset& prev, const Offset& cur, const Offset& next); + + Offset CalculateControlB(const Offset& prev, const Offset& cur, const Offset& next); + + double tickOffset_ = 0.0; + double tickHorizontalOffset_ = 0.0; + + bool drawLine_ = false; + uint32_t startIndex_ = 0; + + RefPtr layer_; + + Offset startGradientPoint_; + Offset endGradientPoint_; + size_t startGradientIndex_ = 0; + size_t endGradientIndex_ = 0; + bool gradientOfLine_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CHART_FLUTTER_RENDER_CHART_H diff --git a/frameworks/core/components/chart/render_chart.cpp b/frameworks/core/components/chart/render_chart.cpp new file mode 100644 index 00000000..d111e076 --- /dev/null +++ b/frameworks/core/components/chart/render_chart.cpp @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/chart/render_chart.h" + +#include "core/common/font_manager.h" + +namespace OHOS::Ace { + +void RenderChart::Update(const RefPtr& component) +{ + auto chartComponent = AceType::DynamicCast(component); + if (!chartComponent) { + LOGI("convert to chart component fail"); + return; + } + type_ = chartComponent->GetChartType(); + horizontal_ = chartComponent->GetHorizontalOption(); + vertical_ = chartComponent->GetVerticalOption(); + mainCharts_ = chartComponent->GetMainCharts(); + + auto context = context_.Upgrade(); + if (!context) { + return; + } + auto fontManager = context->GetFontManager(); + if (!fontManager) { + return; + } + auto finishLoadFontCallback = [weakchart = AceType::WeakClaim(this)] { + auto chart = weakchart.Upgrade(); + if (chart) { + chart->MarkNeedLayout(); + } + }; + if (mainCharts_.empty()) { + return; + } + for (const auto& familyName : mainCharts_[0].GetFontFamily()) { + fontManager->RegisterCallback(AceType::WeakClaim(this), familyName, finishLoadFontCallback); + } +} + +void RenderChart::PerformLayout() +{ + SetLayoutSize(GetLayoutParam().GetMaxSize()); +} + +void RenderChart::OnPaintFinish() +{ + UpdateAccessibilityAttr(); +} + +void RenderChart::UpdateAccessibilityAttr() +{ + auto accessibilityNode = GetAccessibilityNode().Upgrade(); + if (!accessibilityNode) { + return; + } + int index = 0; + for (const auto& data : mainCharts_) { + std::vector> info; + for (const auto& pointInfo : data.GetData()) { + const auto& point = pointInfo.GetPointInfo(); + info.emplace_back(std::make_pair(std::to_string(point.GetX()), point.GetY())); + } + accessibilityNode->PutChartValue(std::to_string(index), info); + index += 1; + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/chart/render_chart.h b/frameworks/core/components/chart/render_chart.h new file mode 100644 index 00000000..a460fb88 --- /dev/null +++ b/frameworks/core/components/chart/render_chart.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CHART_RENDER_CHART_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CHART_RENDER_CHART_H + +#include "core/components/chart/chart_component.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderChart : public RenderNode { + DECLARE_ACE_TYPE(RenderChart, RenderNode); + +public: + static RefPtr Create(); + + void Update(const RefPtr& component) override; + void PerformLayout() override; + + void OnPaintFinish() override; + + void UpdateAccessibilityAttr(); + +protected: + ChartType type_ = ChartType::LINE; + AxisOption horizontal_; + AxisOption vertical_; + std::vector mainCharts_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CHART_RENDER_CHART_H diff --git a/frameworks/core/components/checkable/BUILD.gn b/frameworks/core/components/checkable/BUILD.gn new file mode 100644 index 00000000..5108cd00 --- /dev/null +++ b/frameworks/core/components/checkable/BUILD.gn @@ -0,0 +1,28 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("checkable") { + sources = [ + "checkable_component.cpp", + "checkable_element.cpp", + "flutter_render_checkbox.cpp", + "flutter_render_radio.cpp", + "flutter_render_switch.cpp", + "render_checkable.cpp", + "render_checkbox.cpp", + "render_radio.cpp", + "render_switch.cpp", + ] +} diff --git a/frameworks/core/components/checkable/checkable_component.cpp b/frameworks/core/components/checkable/checkable_component.cpp new file mode 100644 index 00000000..fe3ab903 --- /dev/null +++ b/frameworks/core/components/checkable/checkable_component.cpp @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/checkable/checkable_component.h" + +#include "core/components/checkable/checkable_element.h" +#include "core/components/checkable/render_checkbox.h" +#include "core/components/checkable/render_radio.h" +#include "core/components/checkable/render_switch.h" + +namespace OHOS::Ace { +namespace { + +constexpr bool DEFAULT_SWITCH_VALUE = false; +constexpr bool DEFAULT_CHECKBOX_VALUE = false; + +} // namespace + +CheckableComponent::CheckableComponent(CheckableType type, const RefPtr& theme) : checkableType_(type) +{ + ApplyTheme(theme); +} + +void CheckableComponent::ApplyTheme(const RefPtr& theme) +{ + if (theme) { + width_ = theme->GetWidth(); + height_ = theme->GetHeight(); + hotZoneHorizontalPadding_ = theme->GetHotZoneHorizontalPadding(); + hotZoneVerticalPadding_ = theme->GetHotZoneVerticalPadding(); + aspectRatio_ = theme->GetAspectRatio(); + pointColor_ = theme->GetPointColor(); + activeColor_ = theme->GetActiveColor(); + inactiveColor_ = theme->GetInactiveColor(); + focusColor_ = theme->GetFocusColor(); + defaultWidth_ = theme->GetDefaultWidth(); + defaultHeight_ = theme->GetDefaultHeight(); + radioInnerSizeRatio_ = theme->GetRadioInnerSizeRatio(); + needFocus_ = theme->GetNeedFocus(); + backgroundSolid_ = theme->IsBackgroundSolid(); + hoverColor_ = theme->GetHoverColor(); + inactivePointColor_ = theme->GetInactivePointColor(); + shadowColor_ = theme->GetShadowColor(); + shadowWidth_ = theme->GetShadowWidth(); + hoverRadius_ = theme->GetHoverRadius(); + } +} + +RefPtr CheckableComponent::CreateRenderNode() +{ + if (checkableType_ == CheckableType::CHECKBOX) { + return RenderCheckbox::Create(); + } else if (checkableType_ == CheckableType::SWITCH) { + return RenderSwitch::Create(); + } else if (checkableType_ == CheckableType::RADIO) { + return RenderRadio::Create(); + } else { + LOGW("Unknown checkable type!"); + return nullptr; + } +} + +RefPtr CheckableComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +CheckboxComponent::CheckboxComponent(const RefPtr& theme) + : CheckableComponent(CheckableType::CHECKBOX, theme), CheckableValue(DEFAULT_CHECKBOX_VALUE) +{} + +SwitchComponent::SwitchComponent(const RefPtr& theme) + : CheckableComponent(CheckableType::SWITCH, theme), CheckableValue(DEFAULT_SWITCH_VALUE) +{ + if (theme) { + backgroundSolid_ = theme->IsBackgroundSolid(); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/checkable/checkable_component.h b/frameworks/core/components/checkable/checkable_component.h new file mode 100644 index 00000000..9c2c007e --- /dev/null +++ b/frameworks/core/components/checkable/checkable_component.h @@ -0,0 +1,470 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CHECKABLE_CHECKABLE_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CHECKABLE_CHECKABLE_COMPONENT_H + +#include "base/geometry/dimension.h" +#include "base/utils/label_target.h" +#include "core/components/checkable/checkable_theme.h" +#include "core/pipeline/base/render_component.h" +#include "core/pipeline/base/render_node.h" +#ifndef WEARABLE_PRODUCT +#include "core/event/multimodal/multimodal_properties.h" +#endif + +namespace OHOS::Ace { + +enum class CheckableType { + RADIO, + CHECKBOX, + SWITCH, + UNKNOWN, +}; + +template +class CheckableValue { +public: + CheckableValue() = default; + explicit CheckableValue(T value) : value_(value) {} + virtual ~CheckableValue() = default; + + T GetValue() const + { + return value_; + } + + void SetValue(T value) + { + value_ = value; + } + +private: + T value_; +}; + +class CheckableComponent : public RenderComponent { + DECLARE_ACE_TYPE(CheckableComponent, RenderComponent); + +public: + CheckableComponent(CheckableType type, const RefPtr& theme); + ~CheckableComponent() override = default; + + RefPtr CreateRenderNode() override; + RefPtr CreateElement() override; + + void ApplyTheme(const RefPtr& theme); + + const EventMarker& GetChangeEvent() const + { + return changeEvent_; + } + + void SetChangeEvent(const EventMarker& changeEvent) + { + changeEvent_ = changeEvent; + } + + const EventMarker& GetClickEvent() const + { + return clickEvent_; + } + + void SetClickEvent(const EventMarker& clickEvent) + { + clickEvent_ = clickEvent; + } + + const EventMarker& GetDomChangeEvent() const + { + return domChangeEvent_; + } + + void SetDomChangeEvent(const EventMarker& domChangeEvent) + { + domChangeEvent_ = domChangeEvent; + } + + const Dimension& GetWidth() const + { + return width_; + } + + const Dimension& GetHeight() const + { + return height_; + } + + void SetWidth(const Dimension& width) + { + width_ = width; + } + + void SetHeight(const Dimension& height) + { + height_ = height; + } + + void SetHorizontalPadding(const Dimension& hotZoneHorizontalPadding) + { + hotZoneHorizontalPadding_ = hotZoneHorizontalPadding; + } + + const Dimension& GetHotZoneHorizontalPadding() const + { + return hotZoneHorizontalPadding_; + } + + void SetHotZoneVerticalPadding(const Dimension& hotZoneVerticalPadding) + { + hotZoneVerticalPadding_ = hotZoneVerticalPadding; + } + + const Dimension& GetHotZoneVerticalPadding() const + { + return hotZoneVerticalPadding_; + } + + void SetAspectRatio(double aspectRatio) + { + aspectRatio_ = aspectRatio; + } + + double GetAspectRatio() const + { + return aspectRatio_; + } + + double GetRadioInnerSizeRatio() const + { + return radioInnerSizeRatio_; + } + + bool IsBackgroundSolid() const + { + return backgroundSolid_; + } + + void SetBackgroundSolid(bool backgroundSolid) + { + backgroundSolid_ = backgroundSolid; + } + + bool IsDisabled() const + { + return disabled_; + } + + void SetDisabled(bool disabled) + { + disabled_ = disabled; + } + + const Color& GetPointColor() const + { + return pointColor_; + } + + void SetPointColor(const Color& pointColor) + { + pointColor_ = pointColor; + } + + const Color& GetActiveColor() const + { + return activeColor_; + } + + void SetActiveColor(const Color& activeColor) + { + activeColor_ = activeColor; + } + + const Color& GetInactiveColor() const + { + return inactiveColor_; + } + + void SetInactiveColor(const Color& inactiveColor) + { + inactiveColor_ = inactiveColor; + } + + const Color& GetFocusColor() const + { + return focusColor_; + } + + void SetFocusColor(const Color& focusColor) + { + focusColor_ = focusColor; + } + + void SetDefaultWidth(const Dimension& defaultWidth) + { + defaultWidth_ = defaultWidth; + } + + const Dimension& GetDefaultWidth() const + { + return defaultWidth_; + } + + void SetDefaultHeight(const Dimension& defaultHeight) + { + defaultHeight_ = defaultHeight; + } + + const Dimension& GetDefaultHeight() const + { + return defaultHeight_; + } + + void SetNeedFocus(bool needFocus) + { + needFocus_ = needFocus; + } + + bool GetNeedFocus() const + { + return needFocus_; + } + + void SetHoverColor(const Color& hoverColor) + { + hoverColor_ = hoverColor; + } + + const Color& GetHoverColor() const + { + return hoverColor_; + } + + const Color& GetInactivePointColor() const + { + return inactivePointColor_; + } + + const Color& GetShadowColor() const + { + return shadowColor_; + } + + const Dimension& GetShadowWidth() const + { + return shadowWidth_; + } + + const Dimension& GetHoverRadius() const + { + return hoverRadius_; + } + +protected: + CheckableType checkableType_ = CheckableType::UNKNOWN; + Dimension width_; + Dimension height_; + Dimension hotZoneHorizontalPadding_; + Dimension hotZoneVerticalPadding_; + Dimension defaultWidth_; + Dimension defaultHeight_; + Dimension shadowWidth_; + Dimension hoverRadius_; + bool backgroundSolid_ = true; + bool disabled_ = false; + bool needFocus_ = true; + Color pointColor_; + Color activeColor_; + Color inactiveColor_; + Color inactivePointColor_; + Color focusColor_; + Color hoverColor_; + Color shadowColor_; + EventMarker changeEvent_; + EventMarker clickEvent_; + EventMarker domChangeEvent_; + double aspectRatio_ = 1.0; + double radioInnerSizeRatio_ = 0.5; +}; + +class CheckboxComponent : public CheckableComponent, public CheckableValue, public LabelTarget { + DECLARE_ACE_TYPE(CheckboxComponent, CheckableComponent, LabelTarget); + +public: + CheckboxComponent(const RefPtr& theme); + ~CheckboxComponent() override = default; +}; + +class SwitchComponent : public CheckableComponent, public CheckableValue { + DECLARE_ACE_TYPE(SwitchComponent, CheckableComponent); + +public: + SwitchComponent(const RefPtr& theme); + ~SwitchComponent() override = default; + + void SetTextStyle(const TextStyle& textStyle) + { + textStyle_ = textStyle; + } + + const TextStyle& GetTextStyle() const + { + return textStyle_; + } + + const std::string& GetTextOn() const + { + return textOn_; + } + + void SetTextOn(const std::string& textOn) + { + textOn_ = textOn; + } + + const std::string& GetTextOff() const + { + return textOff_; + } + + void SetTextOff(const std::string& textOff) + { + textOff_ = textOff; + } + + bool GetShowText() const + { + return showText_; + } + + void SetShowText(bool showText) + { + showText_ = showText; + } + + const Color& GetTextColorOn() const + { + return textColorOn_; + } + + void SetTextColorOn(const Color& textColorOn) + { + textColorOn_ = textColorOn; + } + + const Color& GetTextColorOff() const + { + return textColorOff_; + } + + void SetTextColorOff(const Color& textColorOff) + { + textColorOff_ = textColorOff; + } + + const Dimension& GetTextPadding() const + { + return textPadding_; + } + + void SetTextPadding(const Dimension& textPadding) + { + textPadding_ = textPadding; + } + +#ifndef WEARABLE_PRODUCT + const MultimodalProperties& GetMultimodalProperties() const + { + return multimodalProperties_; + } + + void SetMultimodalProperties(const MultimodalProperties& multimodalProperties) + { + multimodalProperties_ = multimodalProperties; + } +#endif + +private: + std::string textOn_ = "On"; + std::string textOff_ = "Off"; + Color textColorOn_ = Color::BLACK; + Color textColorOff_ = Color::BLACK; + bool showText_ = false; + TextStyle textStyle_; +#ifndef WEARABLE_PRODUCT + MultimodalProperties multimodalProperties_; +#endif + Dimension textPadding_ { 0, DimensionUnit::PX }; +}; + +template +class RadioComponent : public CheckableComponent, public CheckableValue, public LabelTarget { + DECLARE_ACE_TYPE(RadioComponent, CheckableComponent, LabelTarget); + +public: + RadioComponent(const RefPtr& theme) : CheckableComponent(CheckableType::RADIO, theme) {} + ~RadioComponent() override = default; + + VALUE_TYPE GetGroupValue() const + { + return groupValue_; + } + + void SetGroupValue(VALUE_TYPE groupValue) + { + groupValue_ = groupValue; + } + + const std::function& GetGroupValueChangedListener() const + { + return groupValueChangedListener_; + } + + void SetGroupValueChangedListener(const std::function& groupValueChangedListener) + { + groupValueChangedListener_ = groupValueChangedListener; + } + + void SetGroupValueUpdateHandler(const std::function& groupValueUpdateHandler) + { + groupValueUpdateHandler_ = groupValueUpdateHandler; + } + + void UpdateGroupValue(VALUE_TYPE groupValue) + { + if (groupValueUpdateHandler_) { + groupValueUpdateHandler_(groupValue); + } + } + + const std::string& GetGroupName() const + { + return groupName_; + } + void SetGroupName(const std::string& groupName) + { + groupName_ = groupName; + } + +private: + VALUE_TYPE groupValue_; + std::string groupName_; + std::function groupValueChangedListener_; + std::function groupValueUpdateHandler_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CHECKABLE_CHECKABLE_COMPONENT_H diff --git a/frameworks/core/components/checkable/checkable_element.cpp b/frameworks/core/components/checkable/checkable_element.cpp new file mode 100644 index 00000000..4f931989 --- /dev/null +++ b/frameworks/core/components/checkable/checkable_element.cpp @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/checkable/checkable_element.h" + +#include "core/components/checkable/render_checkable.h" + +namespace OHOS::Ace { + +void CheckableElement::Update() +{ + RenderElement::Update(); + customComponent_ = component_; + auto labelTarget = AceType::DynamicCast(component_); + if (!labelTarget) { + // switch is not label target, radio and checkbox are label target + LOGD("not find label target"); + return; + } + auto trigger = labelTarget->GetTrigger(); + if (!trigger) { + // component not set label trigger + LOGE("get label trigger failed"); + return; + } + auto weak = AceType::WeakClaim(this); + trigger->clickHandler_ = [weak]() { + auto checkable = weak.Upgrade(); + if (checkable) { + checkable->OnClick(); + } + }; +} + +void CheckableElement::OnClick() +{ + auto renderCheckable = AceType::DynamicCast(renderNode_); + if (!renderCheckable || renderCheckable->Isdisable()) { + return; + } + renderCheckable->HandleClick(); +} + +void CheckableElement::OnFocus() +{ + if (renderNode_ != nullptr) { + renderNode_->ChangeStatus(RenderStatus::FOCUS); + } +} + +void CheckableElement::OnBlur() +{ + if (renderNode_ != nullptr) { + renderNode_->ChangeStatus(RenderStatus::BLUR); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/checkable/checkable_element.h b/frameworks/core/components/checkable/checkable_element.h new file mode 100644 index 00000000..84bfee87 --- /dev/null +++ b/frameworks/core/components/checkable/checkable_element.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CHECKABLE_CHECKABLE_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CHECKABLE_CHECKABLE_ELEMENT_H + +#include "core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +class CheckableElement : public RenderElement, public FocusNode { + DECLARE_ACE_TYPE(CheckableElement, RenderElement, FocusNode); + +public: + CheckableElement() = default; + ~CheckableElement() override = default; + + void Update() override; + void OnClick() override; + void OnFocus() override; + void OnBlur() override; + + bool CanUpdate(const RefPtr& newComponent) override + { + return (newComponent == customComponent_) && Element::CanUpdate(newComponent); + } + +private: + WeakPtr customComponent_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CHECKABLE_CHECKABLE_ELEMENT_H diff --git a/frameworks/core/components/checkable/checkable_theme.h b/frameworks/core/components/checkable/checkable_theme.h new file mode 100644 index 00000000..c3de0ee2 --- /dev/null +++ b/frameworks/core/components/checkable/checkable_theme.h @@ -0,0 +1,344 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CHECKABLE_CHECKABLE_THEME_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CHECKABLE_CHECKABLE_THEME_H + +#include "core/components/theme/theme.h" +#include "core/components/theme/theme_constants.h" + +namespace OHOS::Ace { + +class CheckableTheme : public virtual Theme { + DECLARE_ACE_TYPE(CheckableTheme, Theme); + +public: + ~CheckableTheme() override = default; + + const Color& GetPointColor() const + { + return pointColor_; + } + const Color& GetActiveColor() const + { + return activeColor_; + } + const Color& GetInactiveColor() const + { + return inactiveColor_; + } + const Color& GetFocusColor() const + { + return focusColor_; + } + const Dimension& GetWidth() const + { + return width_; + } + const Dimension& GetHeight() const + { + return height_; + } + const Dimension& GetHotZoneHorizontalPadding() const + { + return hotZoneHorizontalPadding_; + } + const Dimension& GetHotZoneVerticalPadding() const + { + return hotZoneVerticalPadding_; + } + double GetAspectRatio() const + { + return aspectRatio_; + } + const Dimension& GetDefaultWidth() const + { + return defaultWidth_; + } + const Dimension& GetDefaultHeight() const + { + return defaultHeight_; + } + double GetRadioInnerSizeRatio() const + { + return radioInnerSizeRatio_; + } + bool GetNeedFocus() const + { + return needFocus_; + } + bool IsBackgroundSolid() const + { + return backgroundSolid_; + } + const Dimension& GetBorderWidth() const + { + return borderWidth_; + } + + void SetHoverColor(const Color& hoverColor) + { + hoverColor_ = hoverColor; + } + + const Color& GetHoverColor() const + { + return hoverColor_; + } + + const Color& GetInactivePointColor() const + { + return inactivePointColor_; + } + + const Color& GetShadowColor() const + { + return shadowColor_; + } + + const Dimension& GetShadowWidth() const + { + return shadowWidth_; + } + + const Dimension& GetHoverRadius() const + { + return hoverRadius_; + } + +protected: + CheckableTheme() = default; + + Color pointColor_; + Color activeColor_; + Color inactiveColor_; + Color inactivePointColor_; + Color focusColor_; + Color hoverColor_; + Color shadowColor_; + Dimension width_; + Dimension height_; + Dimension hotZoneHorizontalPadding_; + Dimension hotZoneVerticalPadding_; + Dimension defaultWidth_; + Dimension defaultHeight_; + Dimension borderWidth_; + Dimension shadowWidth_; + Dimension hoverRadius_; + double aspectRatio_ = 1.0; + double radioInnerSizeRatio_ = 0.5; + bool needFocus_ = true; + bool backgroundSolid_ = true; +}; + +class CheckboxTheme : public CheckableTheme { + DECLARE_ACE_TYPE(CheckboxTheme, CheckableTheme); + +public: + class Builder { + public: + Builder() = default; + ~Builder() = default; + + RefPtr Build(const RefPtr& themeConstants) const + { + RefPtr theme = AceType::Claim(new CheckboxTheme()); + if (!themeConstants) { + LOGE("Build AppTheme error, themeConstants is null!"); + return theme; + } + theme->width_ = themeConstants->GetDimension(THEME_CHECKBOX_SIZE); + theme->height_ = theme->width_; + theme->hotZoneHorizontalPadding_ = themeConstants->GetDimension(THEME_CHECKBOX_HOTZONE_PADDING); + theme->hotZoneVerticalPadding_ = theme->hotZoneHorizontalPadding_; + theme->pointColor_ = themeConstants->GetColor(THEME_CHECKBOX_POINT_COLOR); + theme->activeColor_ = themeConstants->GetColor(THEME_CHECKBOX_ACTIVE_COLOR); + theme->inactiveColor_ = themeConstants->GetColor(THEME_CHECKBOX_INACTIVE_COLOR); + theme->focusColor_ = themeConstants->GetColor(THEME_CHECKBOX_FOCUS_COLOR); + theme->defaultWidth_ = themeConstants->GetDimension(THEME_CHECKBOX_DEFAULT_SIZE); + theme->defaultHeight_ = theme->defaultWidth_; + theme->needFocus_ = themeConstants->GetInt(THEME_CHECKBOX_NEED_FOCUS); + theme->backgroundSolid_ = themeConstants->GetInt(THEME_CHECKBOX_INACTIVE_BACKGROUND_SOLID); + theme->borderWidth_ = themeConstants->GetDimension(THEME_CHECKBOX_BORDER_WIDTH); + theme->borderRadius_ = themeConstants->GetDimension(THEME_CHECKBOX_BORDER_RADIUS); + theme->checkStroke_ = themeConstants->GetDimension(THEME_CHECKBOX_STROKE_WIDTH); + theme->hoverColor_ = themeConstants->GetColor(THEME_CHECKBOX_HOVER_COLOR); + theme->inactivePointColor_ = themeConstants->GetColor(THEME_CHECKBOX_INACTIVE_POINT_COLOR); + theme->hoverRadius_ = themeConstants->GetDimension(THEME_CHECKBOX_HOVER_RADIUS); + theme->shadowColor_ = themeConstants->GetColor(THEME_CHECKBOX_SHADOW_COLOR); + theme->shadowWidth_ = themeConstants->GetDimension(THEME_CHECKBOX_SHADOW_WIDTH); + ParsePattern(themeConstants->GetThemeStyle(), theme); + return theme; + } + + private: + void ParsePattern(const RefPtr& themeStyle, const RefPtr& theme) const + { + if (!themeStyle) { + return; + } + auto checkboxPattern = themeStyle->GetAttr>(THEME_PATTERN_CHECKBOX, nullptr); + if (!checkboxPattern) { + LOGE("Pattern of checkbox is null, please check!"); + return; + } + theme->pointColor_ = checkboxPattern->GetAttr(FG_COLOR_CHECKED, Color::RED); + theme->activeColor_ = checkboxPattern->GetAttr(BG_COLOR_CHECKED, Color::RED); + theme->inactiveColor_ = checkboxPattern->GetAttr(BG_COLOR_UNCHECKED, Color::RED); + theme->focusColor_ = checkboxPattern->GetAttr(BG_COLOR_UNCHECKED, Color::RED); + theme->borderRadius_ = checkboxPattern->GetAttr(BORDER_RADIUS, 0.0_vp); + theme->hoverColor_ = checkboxPattern->GetAttr(HOVER_EFFECT_COLOR, Color::RED); + theme->inactivePointColor_ = checkboxPattern->GetAttr(FG_COLOR_UNCHECKED, Color::RED); + theme->hoverRadius_ = checkboxPattern->GetAttr(HOVER_EFFECT_RADIUS, 0.0_vp); + } + }; + + const Dimension& GetBorderRadius() const + { + return borderRadius_; + } + + const Dimension& GetCheckStroke() const + { + return checkStroke_; + } + +private: + Dimension borderRadius_; + Dimension checkStroke_; +}; + +class SwitchTheme : public CheckableTheme { + DECLARE_ACE_TYPE(SwitchTheme, CheckableTheme); + +public: + class Builder { + public: + Builder() = default; + ~Builder() = default; + + RefPtr Build(const RefPtr& themeConstants) const + { + RefPtr theme = AceType::Claim(new SwitchTheme()); + if (!themeConstants) { + LOGE("Build AppTheme error, themeConstants is null!"); + return theme; + } + theme->width_ = themeConstants->GetDimension(THEME_SWITCH_WIDTH); + theme->height_ = themeConstants->GetDimension(THEME_SWITCH_HEIGHT); + theme->hotZoneHorizontalPadding_ = themeConstants->GetDimension(THEME_SWITCH_HOTZONE_HORIZONTAL_PADDING); + theme->hotZoneVerticalPadding_ = themeConstants->GetDimension(THEME_SWITCH_HOTZONE_VERTICAL_PADDING); + theme->aspectRatio_ = themeConstants->GetDouble(THEME_SWITCH_ASPECT_RATIO); + theme->backgroundSolid_ = themeConstants->GetInt(THEME_SWITCH_INACTIVE_BACKGROUND_SOLID); + theme->pointColor_ = themeConstants->GetColor(THEME_SWITCH_POINT_COLOR); + theme->activeColor_ = themeConstants->GetColor(THEME_SWITCH_ACTIVE_COLOR); + theme->inactiveColor_ = themeConstants->GetColor(THEME_SWITCH_INACTIVE_COLOR); + theme->focusColor_ = themeConstants->GetColor(THEME_SWITCH_FOCUS_COLOR); + theme->defaultWidth_ = themeConstants->GetDimension(THEME_SWITCH_DEFAULT_WIDTH); + theme->defaultHeight_ = themeConstants->GetDimension(THEME_SWITCH_DEFAULT_HEIGHT); + theme->needFocus_ = themeConstants->GetInt(THEME_SWITCH_NEED_FOCUS); + theme->borderWidth_ = themeConstants->GetDimension(THEME_SWITCH_BORDER_WIDTH); + theme->hoverColor_ = themeConstants->GetColor(THEME_SWITCH_HOVER_COLOR); + theme->hoverRadius_ = themeConstants->GetDimension(THEME_SWITCH_HOVER_RADIUS); + theme->inactivePointColor_ = themeConstants->GetColor(THEME_SWITCH_INACTIVE_POINT_COLOR); + theme->shadowColor_ = themeConstants->GetColor(THEME_SWITCH_SHADOW_COLOR); + theme->shadowWidth_ = themeConstants->GetDimension(THEME_SWITCH_SHADOW_WIDTH); + ParsePattern(themeConstants->GetThemeStyle(), theme); + return theme; + } + + private: + void ParsePattern(const RefPtr& themeStyle, const RefPtr& theme) const + { + if (!themeStyle) { + return; + } + auto switchPattern = themeStyle->GetAttr>(THEME_PATTERN_SWITCH, nullptr); + if (!switchPattern) { + LOGE("Pattern of switch is null, please check!"); + return; + } + theme->pointColor_ = switchPattern->GetAttr(FG_COLOR_CHECKED, Color::RED); + theme->activeColor_ = switchPattern->GetAttr(BG_COLOR_CHECKED, Color::RED); + theme->inactiveColor_ = switchPattern->GetAttr(BG_COLOR_UNCHECKED, Color::RED); + theme->focusColor_ = switchPattern->GetAttr(BG_COLOR_UNCHECKED, Color::RED); + theme->hoverColor_ = switchPattern->GetAttr(HOVER_EFFECT_COLOR, Color::RED); + theme->hoverRadius_ = switchPattern->GetAttr(HOVER_EFFECT_RADIUS, 0.0_vp); + theme->inactivePointColor_ = switchPattern->GetAttr(FG_COLOR_UNCHECKED, Color::RED); + } + }; +}; + +class RadioTheme : public CheckableTheme { + DECLARE_ACE_TYPE(RadioTheme, CheckableTheme); + +public: + class Builder { + public: + Builder() = default; + ~Builder() = default; + + RefPtr Build(const RefPtr& themeConstants) const + { + RefPtr theme = AceType::Claim(new RadioTheme()); + if (!themeConstants) { + return theme; + } + theme->width_ = themeConstants->GetDimension(THEME_RADIO_SIZE); + theme->height_ = theme->width_; + theme->hotZoneHorizontalPadding_ = themeConstants->GetDimension(THEME_RADIO_HOTZONE_PADDING); + theme->hotZoneVerticalPadding_ = theme->hotZoneHorizontalPadding_; + theme->pointColor_ = themeConstants->GetColor(THEME_RADIO_POINT_COLOR); + theme->activeColor_ = themeConstants->GetColor(THEME_RADIO_ACTIVE_COLOR); + theme->inactiveColor_ = themeConstants->GetColor(THEME_RADIO_INACTIVE_COLOR); + theme->focusColor_ = themeConstants->GetColor(THEME_RADIO_FOCUS_COLOR); + theme->defaultWidth_ = themeConstants->GetDimension(THEME_RADIO_DEFAULT_SIZE); + theme->defaultHeight_ = theme->defaultWidth_; + theme->radioInnerSizeRatio_ = themeConstants->GetDouble(THEME_RADIO_INNER_SIZE_RATIO); + theme->needFocus_ = themeConstants->GetInt(THEME_RADIO_NEED_FOCUS); + theme->backgroundSolid_ = themeConstants->GetInt(THEME_RADIO_INACTIVE_BACKGROUND_SOLID); + theme->borderWidth_ = themeConstants->GetDimension(THEME_RADIO_BORDER_WIDTH); + theme->hoverColor_ = themeConstants->GetColor(THEME_RADIO_HOVER_COLOR); + theme->inactivePointColor_ = themeConstants->GetColor(THEME_RADIO_INACTIVE_POINT_COLOR); + theme->shadowColor_ = themeConstants->GetColor(THEME_RADIO_SHADOW_COLOR); + theme->shadowWidth_ = themeConstants->GetDimension(THEME_RADIO_SHADOW_WIDTH); + ParsePattern(themeConstants->GetThemeStyle(), theme); + return theme; + } + + private: + void ParsePattern(const RefPtr& themeStyle, const RefPtr& theme) const + { + if (!themeStyle) { + return; + } + auto radioPattern = themeStyle->GetAttr>(THEME_PATTERN_RADIO, nullptr); + if (!radioPattern) { + LOGE("Pattern of radio is null, please check!"); + return; + } + theme->pointColor_ = radioPattern->GetAttr(FG_COLOR_CHECKED, Color::RED); + theme->activeColor_ = radioPattern->GetAttr(BG_COLOR_CHECKED, Color::RED); + theme->inactiveColor_ = radioPattern->GetAttr(BG_COLOR_UNCHECKED, Color::RED); + theme->inactivePointColor_ = radioPattern->GetAttr(FG_COLOR_UNCHECKED, Color::RED); + theme->focusColor_ = radioPattern->GetAttr(BG_COLOR_UNCHECKED, Color::RED); + theme->hoverColor_ = radioPattern->GetAttr(HOVER_EFFECT_COLOR, Color::RED); + } + }; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CHECKABLE_CHECKABLE_THEME_H diff --git a/frameworks/core/components/checkable/flutter_render_checkbox.cpp b/frameworks/core/components/checkable/flutter_render_checkbox.cpp new file mode 100644 index 00000000..087d2666 --- /dev/null +++ b/frameworks/core/components/checkable/flutter_render_checkbox.cpp @@ -0,0 +1,259 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/checkable/flutter_render_checkbox.h" + +#include "flutter/lib/ui/painting/canvas.h" +#include "third_party/skia/include/core/SkMaskFilter.h" + +#include "core/components/checkable/checkable_component.h" +#include "core/components/common/painter/flutter_checkable_painter.h" +#include "core/components/common/painter/flutter_universal_painter.h" + +namespace OHOS::Ace { +namespace { + +constexpr float CHECK_MARK_START_X_POSITION = 0.25f; +constexpr float CHECK_MARK_START_Y_POSITION = 0.49f; +constexpr float CHECK_MARK_MIDDLE_X_POSITION = 0.44f; +constexpr float CHECK_MARK_MIDDLE_Y_POSITION = 0.68f; +constexpr float CHECK_MARK_END_X_POSITION = 0.76f; +constexpr float CHECK_MARK_END_Y_POSITION = 0.33f; +constexpr double CHECK_MARK_LEFT_ANIMATION_PERCENT = 0.45; +constexpr double CHECK_MARK_RIGHT_ANIMATION_PERCENT = 0.55; +constexpr double DEFAULT_MAX_CHECKBOX_SHAPE_SCALE = 1.0; +constexpr double DEFAULT_MIN_CHECKBOX_SHAPE_SCALE = 0.0; + +} // namespace + +RefPtr RenderCheckbox::Create() +{ + return AceType::MakeRefPtr(); +} + +void FlutterRenderCheckbox::Paint(RenderContext& context, const Offset& offset) +{ + auto canvas = ScopedCanvas::Create(context); + if (!canvas) { + LOGE("Paint canvas is null"); + return; + } + auto paintOffset = offset + paintPosition_; + if (IsPhone() && onFocus_) { + RequestFocusBorder(paintOffset, drawSize_, NormalizeToPx(borderRadius_)); + } + flutter::Paint strokePaint; + flutter::Paint shadowPaint; + if (!strokePaint.paint() || !shadowPaint.paint()) { + LOGE("paint is nullptr!"); + return; + } + shadowPaint.paint()->setColor(shadowColor_); + shadowPaint.paint()->setStrokeCap(SkPaint::kRound_Cap); + SetStrokeWidth(NormalizeToPx(checkStroke_ + shadowWidth_ * 2), shadowPaint); + switch (uiStatus_) { + case UIStatus::SELECTED: { + DrawActiveBorder(canvas, paintOffset, strokePaint); + DrawCheck(canvas, paintOffset, strokePaint, shadowPaint); + break; + } + case UIStatus::UNSELECTED: { + DrawUnselected(canvas, paintOffset, inactiveColor_, strokePaint); + break; + } + case UIStatus::FOCUS: { // focus of unselected + DrawUnselected(canvas, paintOffset, focusColor_, strokePaint); + break; + } + case UIStatus::OFF_TO_ON: { + DrawActiveBorder(canvas, paintOffset, strokePaint); + DrawAnimationOffToOn(canvas, paintOffset, strokePaint, shadowPaint); + break; + } + case UIStatus::ON_TO_OFF: { + DrawActiveBorder(canvas, paintOffset, strokePaint); + DrawAnimationOnToOff(canvas, paintOffset, strokePaint, shadowPaint); + break; + } + default: + LOGE("unknown ui status"); + break; + } +} + +void FlutterRenderCheckbox::DrawActiveBorder( + const ScopedCanvas& canvas, const Offset& paintOffset, flutter::Paint& strokePaint) const +{ + flutter::Paint paint; + auto* skPaint = paint.paint(); + if (skPaint == nullptr) { + LOGE("the sk paint is nullptr"); + return; + } + skPaint->setAntiAlias(true); + skPaint->setColor(activeColor_); + DrawBorder(canvas, paintOffset, paint, drawSize_); + + SetStrokeWidth(NormalizeToPx(checkStroke_), strokePaint); + strokePaint.paint()->setColor(pointColor_); + strokePaint.paint()->setStrokeCap(SkPaint::kRound_Cap); +} + +void FlutterRenderCheckbox::DrawUnselected( + const ScopedCanvas& canvas, const Offset& origin, uint32_t paintColor, flutter::Paint& paint) const +{ + Offset paintOffset = origin; + auto borderWidth = NormalizeToPx(borderWidth_); + SetStrokeWidth(borderWidth, paint); + double strokeOffset = borderWidth / 2; + paintOffset += Offset(strokeOffset, strokeOffset); + Size paintSize = drawSize_; + paintSize.SetWidth(paintSize.Width() - borderWidth); + paintSize.SetHeight(paintSize.Height() - borderWidth); + paint.paint()->setColor(paintColor); + auto bgPaint = paint; + bgPaint.paint()->setColor(inactivePointColor_); + bgPaint.paint()->setStyle(SkPaint::Style::kFill_Style); + DrawBorder(canvas, paintOffset, bgPaint, paintSize); + DrawBorder(canvas, paintOffset, paint, paintSize); +} + +void FlutterRenderCheckbox::DrawCheck(const ScopedCanvas& canvas, const Offset& origin, const flutter::Paint& paint, + const flutter::Paint& shadowPaint) const +{ + flutter::PaintData paintData; + fml::RefPtr path = flutter::CanvasPath::Create(); + if (!path) { + LOGE("path in null"); + return; + } + double originX = origin.GetX(); + double originY = origin.GetY(); + const Offset start = + Offset(drawSize_.Width() * CHECK_MARK_START_X_POSITION, drawSize_.Width() * CHECK_MARK_START_Y_POSITION); + const Offset middle = + Offset(drawSize_.Width() * CHECK_MARK_MIDDLE_X_POSITION, drawSize_.Width() * CHECK_MARK_MIDDLE_Y_POSITION); + const Offset end = + Offset(drawSize_.Width() * CHECK_MARK_END_X_POSITION, drawSize_.Width() * CHECK_MARK_END_Y_POSITION); + + path->moveTo(originX + start.GetX(), originY + start.GetY()); + path->lineTo(originX + middle.GetX(), originY + middle.GetY()); + + canvas->drawPath(path.get(), shadowPaint, paintData); + canvas->drawPath(path.get(), paint, paintData); + path->moveTo(originX + middle.GetX(), originY + middle.GetY()); + path->lineTo(originX + end.GetX(), originY + end.GetY()); + + canvas->drawPath(path.get(), shadowPaint, paintData); + canvas->drawPath(path.get(), paint, paintData); +} + +void FlutterRenderCheckbox::DrawBorder( + const ScopedCanvas& canvas, const Offset& origin, const flutter::Paint& paint, const Size& paintSize) const +{ + flutter::PaintData paintData; + flutter::RRect rrect; + double originX = origin.GetX(); + double originY = origin.GetY(); + double borderRadius = NormalizeToPx(borderRadius_); + rrect.sk_rrect = SkRRect::MakeRectXY( + { originX, originY, paintSize.Width() + originX, paintSize.Height() + originY }, borderRadius, borderRadius); + canvas->drawRRect(rrect, paint, paintData); +} + +void FlutterRenderCheckbox::DrawAnimationOffToOn( + ScopedCanvas& canvas, const Offset& origin, const flutter::Paint& paint, const flutter::Paint& shadowPaint) const +{ + flutter::PaintData paintData; + fml::RefPtr path = flutter::CanvasPath::Create(); + if (!path) { + LOGE("path in null"); + return; + } + double originX = origin.GetX(); + double originY = origin.GetY(); + const Offset start = + Offset(drawSize_.Width() * CHECK_MARK_START_X_POSITION, drawSize_.Width() * CHECK_MARK_START_Y_POSITION); + const Offset middle = + Offset(drawSize_.Width() * CHECK_MARK_MIDDLE_X_POSITION, drawSize_.Width() * CHECK_MARK_MIDDLE_Y_POSITION); + const Offset end = + Offset(drawSize_.Width() * CHECK_MARK_END_X_POSITION, drawSize_.Width() * CHECK_MARK_END_Y_POSITION); + + double deltaX = middle.GetX() - start.GetX(); + double deltaY = middle.GetY() - start.GetY(); + path->moveTo(originX + start.GetX(), originY + start.GetY()); + double ratio = DEFAULT_MIN_CHECKBOX_SHAPE_SCALE; + if (shapeScale_ < CHECK_MARK_LEFT_ANIMATION_PERCENT) { + ratio = shapeScale_ / CHECK_MARK_LEFT_ANIMATION_PERCENT; + path->lineTo(originX + start.GetX() + deltaX * ratio, originY + start.GetY() + deltaY * ratio); + } else { + path->lineTo(originX + middle.GetX(), originY + middle.GetY()); + } + canvas->drawPath(path.get(), shadowPaint, paintData); + canvas->drawPath(path.get(), paint, paintData); + if (shapeScale_ > CHECK_MARK_LEFT_ANIMATION_PERCENT) { + deltaX = end.GetX() - middle.GetX(); + deltaY = middle.GetY() - end.GetY(); + path->moveTo(originX + middle.GetX(), originY + middle.GetY()); + if (shapeScale_ == DEFAULT_MAX_CHECKBOX_SHAPE_SCALE) { + path->lineTo(originX + end.GetX(), originY + end.GetY()); + } else { + ratio = (shapeScale_ - CHECK_MARK_LEFT_ANIMATION_PERCENT) / CHECK_MARK_RIGHT_ANIMATION_PERCENT; + path->lineTo(originX + middle.GetX() + deltaX * ratio, originY + middle.GetY() - deltaY * ratio); + } + canvas->drawPath(path.get(), shadowPaint, paintData); + canvas->drawPath(path.get(), paint, paintData); + } +} + +void FlutterRenderCheckbox::DrawAnimationOnToOff( + ScopedCanvas& canvas, const Offset& origin, const flutter::Paint& paint, const flutter::Paint& shadowPaint) const +{ + if (shapeScale_ == DEFAULT_MIN_CHECKBOX_SHAPE_SCALE) { + return; + } + flutter::PaintData paintData; + fml::RefPtr path = flutter::CanvasPath::Create(); + if (!path) { + LOGE("path in null"); + return; + } + double originX = origin.GetX(); + double originY = origin.GetY(); + const Offset start = + Offset(drawSize_.Width() * CHECK_MARK_START_X_POSITION, drawSize_.Width() * CHECK_MARK_START_Y_POSITION); + const Offset middle = + Offset(drawSize_.Width() * CHECK_MARK_MIDDLE_X_POSITION, drawSize_.Width() * CHECK_MARK_MIDDLE_Y_POSITION); + const Offset end = + Offset(drawSize_.Width() * CHECK_MARK_END_X_POSITION, drawSize_.Width() * CHECK_MARK_END_Y_POSITION); + const Offset middlePoint = Offset(drawSize_.Width() / 2, drawSize_.Height() / 2); + double deltaX = middlePoint.GetX() - start.GetX(); + double deltaY = middlePoint.GetY() - start.GetY(); + double ratio = DEFAULT_MAX_CHECKBOX_SHAPE_SCALE - shapeScale_; + path->moveTo(originX + start.GetX() + deltaX * ratio, originY + start.GetY() + deltaY * ratio); + deltaX = middlePoint.GetX() - middle.GetX(); + deltaY = middle.GetY() - middlePoint.GetY(); + path->lineTo(originX + middle.GetX() + deltaX * ratio, originY + middle.GetY() - deltaY * ratio); + canvas->drawPath(path.get(), shadowPaint, paintData); + canvas->drawPath(path.get(), paint, paintData); + path->moveTo(originX + middle.GetX() + deltaX * ratio, originY + middle.GetY() - deltaY * ratio); + deltaX = end.GetX() - middlePoint.GetX(); + deltaY = middlePoint.GetY() - end.GetY(); + path->lineTo(originX + end.GetX() - deltaX * ratio, originY + end.GetY() + deltaY * ratio); + canvas->drawPath(path.get(), shadowPaint, paintData); + canvas->drawPath(path.get(), paint, paintData); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/checkable/flutter_render_checkbox.h b/frameworks/core/components/checkable/flutter_render_checkbox.h new file mode 100644 index 00000000..06453036 --- /dev/null +++ b/frameworks/core/components/checkable/flutter_render_checkbox.h @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CHECKABLE_FLUTTER_RENDER_CHECKBOX_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CHECKABLE_FLUTTER_RENDER_CHECKBOX_H + +#include "core/components/checkable/render_checkbox.h" +#include "core/components/common/painter/flutter_checkable_painter.h" +#include "core/pipeline/base/scoped_canvas_state.h" + +namespace OHOS::Ace { + +class FlutterRenderCheckbox : public RenderCheckbox, public FlutterCheckablePainter { + DECLARE_ACE_TYPE(FlutterRenderCheckbox, RenderCheckbox); + +public: + FlutterRenderCheckbox() = default; + ~FlutterRenderCheckbox() override = default; + + void Paint(RenderContext& context, const Offset& offset) override; + RenderLayer GetRenderLayer() override + { + return ConfigureOpacityLayer(disabled_); + } + +private: + void DrawCheck(const ScopedCanvas& canvas, const Offset& origin, const flutter::Paint& paint, + const flutter::Paint& shadowPaint) const; + void DrawActiveBorder(const ScopedCanvas& canvas, const Offset& paintOffset, flutter::Paint& strokePaint) const; + void DrawUnselected( + const ScopedCanvas& canvas, const Offset& origin, uint32_t paintColor, flutter::Paint& paint) const; + void DrawBorder( + const ScopedCanvas& canvas, const Offset& origin, const flutter::Paint& paint, const Size& paintSize) const; + void DrawAnimationOffToOn(ScopedCanvas& canvas, const Offset& origin, const flutter::Paint& paint, + const flutter::Paint& shadowPaint) const; + void DrawAnimationOnToOff(ScopedCanvas& canvas, const Offset& origin, const flutter::Paint& paint, + const flutter::Paint& shadowPaint) const; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CHECKABLE_FLUTTER_RENDER_CHECKBOX_H diff --git a/frameworks/core/components/checkable/flutter_render_radio.cpp b/frameworks/core/components/checkable/flutter_render_radio.cpp new file mode 100644 index 00000000..9466f507 --- /dev/null +++ b/frameworks/core/components/checkable/flutter_render_radio.cpp @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/checkable/flutter_render_radio.h" + +#include "core/components/checkable/checkable_component.h" +#include "core/components/common/painter/flutter_universal_painter.h" +#include "core/pipeline/base/scoped_canvas_state.h" + +namespace OHOS::Ace { + +RefPtr RenderRadio::Create() +{ + return AceType::MakeRefPtr(); +} + +void FlutterRenderRadio::Paint(RenderContext& context, const Offset& offset) +{ + auto paintOffset = offset + paintPosition_; + auto canvas = ScopedCanvas::Create(context); + if (!canvas) { + LOGE("Paint canvas is null"); + return; + } + flutter::Paint paint; + auto* skPaint = paint.paint(); + if (skPaint == nullptr) { + LOGE("the sk paint is nullptr"); + return; + } + if (IsPhone() && onFocus_) { + RequestFocusBorder(paintOffset, drawSize_, drawSize_.Width() / 2.0); + } + flutter::PaintData paintData; + double centerX = outCircleRadius_ + paintOffset.GetX(); + double centerY = outCircleRadius_ + paintOffset.GetY(); + auto borderWidth = NormalizeToPx(borderWidth_); + switch (uiStatus_) { + case UIStatus::SELECTED: + // draw stroke border + skPaint->setAntiAlias(true); + skPaint->setColor(activeColor_); + canvas->drawCircle(centerX, centerY, outCircleRadius_ * totalScale_, paint, paintData); + + // draw shadow + if (!NearZero(pointScale_) && !NearEqual(pointScale_, 1.0)) { + skPaint->setColor(shadowColor_); + canvas->drawCircle( + centerX, centerY, outCircleRadius_ * pointScale_ + NormalizeToPx(shadowWidth_), paint, paintData); + } + + // draw inner circle + skPaint->setColor(pointColor_); + canvas->drawCircle(centerX, centerY, outCircleRadius_ * pointScale_, paint, paintData); + break; + case UIStatus::UNSELECTED: + // draw inner circle + skPaint->setColor(inactivePointColor_); + canvas->drawCircle(centerX, centerY, outCircleRadius_ - borderWidth / 2.0, paint, paintData); + + // draw border with unselected color + skPaint->setColor(inactiveColor_); + SetStrokeWidth(borderWidth, paint); + canvas->drawCircle(centerX, centerY, outCircleRadius_ - borderWidth / 2.0, paint, paintData); + break; + case UIStatus::FOCUS: // focus of unselected + // draw inner circle + skPaint->setColor(inactivePointColor_); + canvas->drawCircle(centerX, centerY, outCircleRadius_ - borderWidth / 2.0, paint, paintData); + + // draw border with focus color + SetStrokeWidth(borderWidth, paint); + skPaint->setColor(focusColor_); + canvas->drawCircle(centerX, centerY, outCircleRadius_ - borderWidth / 2.0, paint, paintData); + break; + default: + LOGE("unknown ui status"); + break; + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/checkable/flutter_render_radio.h b/frameworks/core/components/checkable/flutter_render_radio.h new file mode 100644 index 00000000..d12f3330 --- /dev/null +++ b/frameworks/core/components/checkable/flutter_render_radio.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CHECKABLE_FLUTTER_RENDER_RADIO_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CHECKABLE_FLUTTER_RENDER_RADIO_H + +#include "core/components/checkable/render_radio.h" +#include "core/components/common/painter/flutter_checkable_painter.h" + +namespace OHOS::Ace { + +class FlutterRenderRadio final : public RenderRadio, public FlutterCheckablePainter { + DECLARE_ACE_TYPE(FlutterRenderRadio, RenderRadio); + +public: + FlutterRenderRadio() = default; + ~FlutterRenderRadio() override = default; + + void Paint(RenderContext& context, const Offset& offset) override; + + RenderLayer GetRenderLayer() override + { + return ConfigureOpacityLayer(disabled_); + } +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CHECKABLE_FLUTTER_RENDER_RADIO_H diff --git a/frameworks/core/components/checkable/flutter_render_switch.cpp b/frameworks/core/components/checkable/flutter_render_switch.cpp new file mode 100644 index 00000000..5107a13a --- /dev/null +++ b/frameworks/core/components/checkable/flutter_render_switch.cpp @@ -0,0 +1,242 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/checkable/flutter_render_switch.h" + +#include "core/components/checkable/checkable_component.h" +#include "core/components/common/painter/flutter_checkable_painter.h" +#include "core/components/common/painter/flutter_universal_painter.h" +#include "core/components/common/properties/alignment.h" +#include "core/components/text/text_component.h" + +namespace OHOS::Ace { + +RefPtr RenderSwitch::Create() +{ + return AceType::MakeRefPtr(); +} + +void FlutterRenderSwitch::Paint(RenderContext& context, const Offset& offset) +{ + auto canvas = ScopedCanvas::Create(context); + if (!canvas) { + LOGE("Paint canvas is null"); + return; + } + Offset paintOffset = offset + paintPosition_; + flutter::Paint trackPaint; + flutter::Paint paint; + flutter::PaintData paintData; + + double originX = paintOffset.GetX(); + double originY = paintOffset.GetY(); + double pointOriginX = paintOffset.GetX() + currentPointOriginX_; + double pointOriginY = paintOffset.GetY() + NormalizeToPx(pointPadding_); + + uint32_t trackColor = 0; + uint32_t pointColor = 0; + paintTrackSize_ = switchSize_; + SetPaintStyle(originX, originY, trackColor, pointColor, trackPaint); + if (IsPhone() && onFocus_) { + RequestFocusBorder(paintOffset, switchSize_, switchSize_.Height() / 2.0); + } + + // paint track rect + if (!isSwitchDuringAnimation_) { + PaintTrack(canvas, trackPaint, originX, originY, trackColor); + } else { + // current status is during the switch on/off + DrawTrackAnimation(paintOffset, canvas, paintData, trackPaint); + } + + // paint center point + PaintCenterPoint(canvas, paint, pointOriginX, pointOriginY, pointColor); + + // paint text + if (renderTextOn_ && renderTextOff_ && showText_) { + PaintText(Offset(pointOriginX, pointOriginY), context); + } +} + +void FlutterRenderSwitch::PaintTrack( + const ScopedCanvas& canvas, flutter::Paint& trackPaint, double originX, double originY, uint32_t trackColor) const +{ + auto* skPaint = trackPaint.paint(); + if (skPaint == nullptr) { + LOGE("fail to get sk paint"); + return; + } + flutter::PaintData paintData; + flutter::RRect rrect; + double trackRadius = switchSize_.Height() / 2.0; + rrect.sk_rrect = + SkRRect::MakeRectXY({ originX, originY, paintTrackSize_.Width() + originX, paintTrackSize_.Height() + originY }, + trackRadius, trackRadius); + skPaint->setAntiAlias(true); + skPaint->setColor(trackColor); + canvas->drawRRect(rrect, trackPaint, paintData); +} + +void FlutterRenderSwitch::PaintCenterPoint(const ScopedCanvas& canvas, flutter::Paint& paint, double pointOriginX, + double pointOriginY, uint32_t pointColor) const +{ + auto* skPaint = paint.paint(); + if (skPaint == nullptr) { + LOGE("fail to get sk paint"); + return; + } + flutter::PaintData paintData; + flutter::RRect rrect; + skPaint->setAntiAlias(true); + skPaint->setColor(pointColor); + rrect.sk_rrect = SkRRect::MakeRectXY( + { pointOriginX, pointOriginY, rawPointSize_.Width() + pointOriginX, rawPointSize_.Height() + pointOriginY }, + pointRadius_, pointRadius_); + canvas->drawRRect(rrect, paint, paintData); + double shadowBorderWidth = NormalizeToPx(shadowWidth_); + SetStrokeWidth(shadowBorderWidth, paint); + skPaint->setColor(shadowColor_); + rrect.sk_rrect = SkRRect::MakeRectXY({ pointOriginX - shadowBorderWidth, pointOriginY - shadowBorderWidth, + rawPointSize_.Width() + pointOriginX + shadowBorderWidth, + rawPointSize_.Height() + pointOriginY + shadowBorderWidth }, + pointRadius_ + shadowBorderWidth, pointRadius_ + shadowBorderWidth); + canvas->drawRRect(rrect, paint, paintData); +} + +void FlutterRenderSwitch::DrawTrackAnimation( + const Offset& paintOffset, ScopedCanvas& canvas, flutter::PaintData& paintData, flutter::Paint& trackPaint) const +{ + if (!canvas) { + LOGE("DrawTrackAnimation Paint canvas is null"); + return; + } + double trackRadius = switchSize_.Height() / 2.0; + switch (uiStatus_) { + case UIStatus::OFF_TO_ON: + case UIStatus::ON_TO_OFF: + DrawTrackOffAndOn(paintOffset, trackRadius, canvas, paintData, trackPaint); + break; + default: + LOGE("DrawTrackAnimation current uiStatus is not correct"); + break; + } +} + +void FlutterRenderSwitch::DrawTrackOffAndOn(const Offset& paintOffset, double trackRadius, ScopedCanvas& canvas, + flutter::PaintData& paintData, flutter::Paint& trackPaint) const +{ + auto* skPaint = trackPaint.paint(); + if (skPaint == nullptr) { + LOGE("fail to get sk paint"); + return; + } + auto pointPadding = NormalizeToPx(pointPadding_); + double originX = paintOffset.GetX(); + double originY = paintOffset.GetY(); + double pointOriginX = paintOffset.GetX() + currentPointOriginX_; + double pointOriginY = paintOffset.GetY() + pointPadding; + // paint the bottom track rect first + flutter::RRect rrectUpper; + flutter::RRect rrectBottom; + skPaint->setAntiAlias(true); + rrectBottom.sk_rrect = + SkRRect::MakeRectXY({ originX, originY, paintTrackSize_.Width() + originX, paintTrackSize_.Height() + originY }, + trackRadius, trackRadius); + skPaint->setColor(inactiveColor_); + canvas->drawRRect(rrectBottom, trackPaint, paintData); + + // paint the upper track rect + auto width = switchSize_.Width() - rawPointSize_.Width() - pointPadding * 3.0; + if (NearZero(width)) { + LOGE("the width is zero"); + return; + } + double ratio = (currentPointOriginX_ - pointPadding * 2.0) / width; + double trackStartDelta = pointPadding; + double trackStartX = originX + pointPadding - (trackStartDelta * ratio); + double trackEnd = (rawPointSize_.Width() + pointOriginX) + pointPadding * ratio; + double trackHeightDelta = paintTrackSize_.Height() + originY - (rawPointSize_.Height() + pointOriginY); + double radiusDelta = trackRadius - pointRadius_; + double trackStartY = pointOriginY - (pointPadding * ratio); + rrectUpper.sk_rrect = SkRRect::MakeRectXY( + { trackStartX, trackStartY, trackEnd, rawPointSize_.Height() + pointOriginY + trackHeightDelta * ratio }, + pointRadius_ + radiusDelta * ratio, pointRadius_ + radiusDelta * ratio); + skPaint->setColor(activeColor_); + canvas->drawRRect(rrectUpper, trackPaint, paintData); +} + +void FlutterRenderSwitch::SetPaintStyle( + double& originX, double& originY, uint32_t& trackColor, uint32_t& pointColor, flutter::Paint& trackPaint) +{ + auto borderWidth = NormalizeToPx(borderWidth_); + switch (uiStatus_) { + case UIStatus::SELECTED: + trackColor = activeColor_; + pointColor = pointColor_; + isSwitchDuringAnimation_ = false; + break; + case UIStatus::UNSELECTED: { + if (backgroundSolid_) { + trackColor = inactiveColor_; + pointColor = pointColor_; + } else { + SetStrokeWidth(static_cast(borderWidth), trackPaint); + double strokeOffset = borderWidth / 2.0; + paintTrackSize_.SetWidth(switchSize_.Width() - borderWidth); + paintTrackSize_.SetHeight(switchSize_.Height() - borderWidth); + originX += strokeOffset; + originY += strokeOffset; + trackColor = inactiveColor_; + pointColor = inactiveColor_; + } + isSwitchDuringAnimation_ = false; + break; + } + case UIStatus::FOCUS: { // focus of unselected + SetStrokeWidth(static_cast(borderWidth), trackPaint); + double strokeOffset = borderWidth / 2.0; + paintTrackSize_.SetWidth(switchSize_.Width() - borderWidth); + paintTrackSize_.SetHeight(switchSize_.Height() - borderWidth); + originX += strokeOffset; + originY += strokeOffset; + trackColor = focusColor_; + pointColor = focusColor_; + isSwitchDuringAnimation_ = false; + break; + } + case UIStatus::OFF_TO_ON: + case UIStatus::ON_TO_OFF: { + isSwitchDuringAnimation_ = true; + pointColor = pointColor_; + break; + } + default: + LOGE("unknown ui status"); + break; + } +} + +Size FlutterRenderSwitch::CalculateTextSize(const std::string& text, RefPtr& renderText) +{ + if (!renderText) { + LOGW("the render text is nullptr"); + return Size(); + } + renderText->SetTextData(text); + renderText->PerformLayout(); + return renderText->GetLayoutSize(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/checkable/flutter_render_switch.h b/frameworks/core/components/checkable/flutter_render_switch.h new file mode 100644 index 00000000..8f43f1ee --- /dev/null +++ b/frameworks/core/components/checkable/flutter_render_switch.h @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CHECKABLE_FLUTTER_RENDER_SWITCH_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CHECKABLE_FLUTTER_RENDER_SWITCH_H + +#include "core/components/checkable/render_checkable.h" +#include "core/components/checkable/render_switch.h" +#include "core/components/common/painter/flutter_checkable_painter.h" +#include "core/components/text/render_text.h" +#include "core/pipeline/base/flutter_render_context.h" +#include "core/pipeline/base/scoped_canvas_state.h" +#include "core/pipeline/layers/opacity_layer.h" + +namespace OHOS::Ace { + +class FlutterRenderSwitch : public RenderSwitch, public FlutterCheckablePainter { + DECLARE_ACE_TYPE(FlutterRenderSwitch, RenderSwitch); + +public: + FlutterRenderSwitch() = default; + ~FlutterRenderSwitch() override = default; + + void Paint(RenderContext& context, const Offset& offset) override; + void SetPaintStyle( + double& originX, double& originY, uint32_t& trackColor, uint32_t& pointColor, flutter::Paint& trackPaint); + Size CalculateTextSize(const std::string& text, RefPtr& renderText) override; + + RenderLayer GetRenderLayer() override + { + return ConfigureOpacityLayer(disabled_); + } + +private: + void DrawTrackAnimation(const Offset& paintOffset, ScopedCanvas& canvas, flutter::PaintData& paintData, + flutter::Paint& trackPaint) const; + void DrawTrackOffAndOn(const Offset& paintOffset, double trackRadius, ScopedCanvas& canvas, + flutter::PaintData& paintData, flutter::Paint& trackPaint) const; + void PaintCenterPoint(const ScopedCanvas& canvas, flutter::Paint& paint, double pointOriginX, double pointOriginY, + uint32_t pointColor) const; + void PaintTrack(const ScopedCanvas& canvas, flutter::Paint& trackPaint, double originX, double originY, + uint32_t trackColor) const; + + Size paintTrackSize_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CHECKABLE_FLUTTER_RENDER_SWITCH_H diff --git a/frameworks/core/components/checkable/radio_group_component.h b/frameworks/core/components/checkable/radio_group_component.h new file mode 100644 index 00000000..90e19554 --- /dev/null +++ b/frameworks/core/components/checkable/radio_group_component.h @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CHECKABLE_RADIO_GROUP_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CHECKABLE_RADIO_GROUP_COMPONENT_H + +#include "core/components/checkable/checkable_component.h" + +namespace OHOS::Ace { + +template +class RadioGroupComponent { +public: + void AddRadio(const RefPtr>& radio) + { + if (radio) { + radio->SetGroupValueChangedListener(groupValueChangedListener_); + radios_.push_back(radio); + } + } + + void RemoveRadio(const RefPtr>& radio) + { + radios_.remove(radio); + } + + bool IsEmpty() + { + return radios_.empty(); + } + +private: + const std::function groupValueChangedListener_ = [this](T newValue) { + for (const auto& radio : radios_) { + auto refPtr = radio.Upgrade(); + if (refPtr) { + refPtr->SetGroupValue(newValue); + refPtr->UpdateGroupValue(newValue); + } + } + }; + std::list>> radios_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CHECKABLE_RADIO_GROUP_COMPONENT_H diff --git a/frameworks/core/components/checkable/render_checkable.cpp b/frameworks/core/components/checkable/render_checkable.cpp new file mode 100644 index 00000000..ffa0e61b --- /dev/null +++ b/frameworks/core/components/checkable/render_checkable.cpp @@ -0,0 +1,229 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/checkable/render_checkable.h" + +#include "base/log/event_report.h" +#include "core/components/common/properties/alignment.h" +#include "core/components/common/properties/color.h" +#include "core/event/ace_event_helper.h" + +namespace OHOS::Ace { + +void RenderCheckable::Update(const RefPtr& component) +{ + auto checkable = AceType::DynamicCast(component); + if (!checkable) { + LOGW("component is null"); + return; + } + pointColor_ = checkable->GetPointColor().GetValue(); + activeColor_ = checkable->GetActiveColor().GetValue(); + inactiveColor_ = checkable->GetInactiveColor().GetValue(); + inactivePointColor_ = checkable->GetInactivePointColor().GetValue(); + focusColor_ = checkable->GetFocusColor().GetValue(); + shadowColor_ = checkable->GetShadowColor().GetValue(); + shadowWidth_ = checkable->GetShadowWidth(); + defaultWidth_ = checkable->GetDefaultWidth(); + defaultHeight_ = checkable->GetDefaultHeight(); + aspectRatio_ = checkable->GetAspectRatio(); + backgroundSolid_ = checkable->IsBackgroundSolid(); + hotZoneHorizontalPadding_ = checkable->GetHotZoneHorizontalPadding(); + hotZoneVerticalPadding_ = checkable->GetHotZoneVerticalPadding(); + disabled_ = checkable->IsDisabled(); + changeEvent_ = AceAsyncEvent::Create(checkable->GetChangeEvent(), context_); + clickEvent_ = AceAsyncEvent::Create(checkable->GetClickEvent(), context_); + domChangeEvent_ = AceAsyncEvent::Create(checkable->GetDomChangeEvent(), context_); + needFocus_ = checkable->GetNeedFocus(); + InitClickRecognizer(); + AddAccessibilityAction(); + MarkNeedLayout(); +} + +void RenderCheckable::AddAccessibilityAction() +{ + auto accessibilityNode = GetAccessibilityNode().Upgrade(); + if (!accessibilityNode) { + return; + } + accessibilityNode->AddSupportAction(AceAction::ACTION_CLICK); + accessibilityNode->SetActionClickImpl([weakPtr = AceType::WeakClaim(this)]() { + auto renderCheckable = weakPtr.Upgrade(); + if (renderCheckable) { + renderCheckable->HandleClick(); + } + }); +} + +void RenderCheckable::InitSize() +{ + // Get parent(box)'s layoutParam.GetMaxSize as self size. + width_ = GetLayoutParam().GetMaxSize().Width(); + if (NearEqual(Size::INFINITE_SIZE, width_)) { + width_ = NormalizeToPx(defaultWidth_); + } + height_ = GetLayoutParam().GetMaxSize().Height(); + if (NearEqual(Size::INFINITE_SIZE, height_)) { + height_ = NormalizeToPx(defaultHeight_); + } +} + +void RenderCheckable::CalculateSize() +{ + // Fit hot zone to real size. + double hotZoneHorizontalPadding = NormalizePercentToPx(hotZoneHorizontalPadding_, false); + double hotZoneVerticalPadding = NormalizePercentToPx(hotZoneVerticalPadding_, true); + auto defaultWidth = NormalizeToPx(defaultWidth_); + auto defaultHeight = NormalizeToPx(defaultHeight_); + if ((width_ < defaultWidth) && (!NearZero(defaultWidth))) { + hotZoneHorizontalPadding *= width_ / defaultWidth; + } + if ((height_ < defaultHeight) && (!NearZero(defaultHeight))) { + hotZoneVerticalPadding *= height_ / defaultHeight; + } + + // Calculate draw size with hot zone and ratio of (width / height). + drawSize_ = Size(width_ - 2 * hotZoneHorizontalPadding, height_ - 2 * hotZoneVerticalPadding); + ApplyAspectRatio(drawSize_); + paintPosition_ = Alignment::GetAlignPosition(Size(width_, height_), drawSize_, Alignment::CENTER); +} + +void RenderCheckable::InitClickRecognizer() +{ + if (!disabled_ && !clickRecognizer_) { + clickRecognizer_ = AceType::MakeRefPtr(); + clickRecognizer_->SetOnClick([weak = AceType::WeakClaim(this)](const ClickInfo& info) { + auto renderCheckable = weak.Upgrade(); + if (renderCheckable) { + renderCheckable->HandleClick(); + } + }); + } else if (disabled_ && clickRecognizer_) { + clickRecognizer_ = nullptr; + } +} + +void RenderCheckable::ApplyAspectRatio(Size& drawSize) const +{ + // Protect from drawSize.Height() being zero. + double drawAreaAspectRatio = Size::INFINITE_SIZE; + if (!drawSize.IsValid()) { + return; + } + drawAreaAspectRatio = drawSize.Width() / drawSize.Height(); + if (drawAreaAspectRatio > aspectRatio_) { + drawSize.SetWidth(drawSize.Height() * aspectRatio_); + } else if (!NearZero(aspectRatio_)) { + drawSize.SetHeight(drawSize.Width() / aspectRatio_); + } +} + +void RenderCheckable::PerformLayout() +{ + InitSize(); + CalculateSize(); + Size constrainSize = GetLayoutParam().Constrain(Size(width_, height_)); + SetLayoutSize(constrainSize); +} + +void RenderCheckable::OnStatusChanged(RenderStatus renderStatus) +{ + onFocus_ = renderStatus == RenderStatus::FOCUS; + auto context = context_.Upgrade(); + if (context && context->GetRenderFocusAnimation() && (renderStatus == RenderStatus::BLUR)) { + context->GetRenderFocusAnimation()->CancelFocusAnimation(); + } + UpdateUIStatus(); + MarkNeedRender(); +} + +void RenderCheckable::HandleClick() +{ + auto result = GetChangedResult(); + if (!result.empty()) { + MarkNeedRender(); + OnHandleChangedResult(result); + if (changeEvent_) { + changeEvent_(result); + } + } + if (onChange_) { + onChange_(checked_); + } + + if (clickEvent_) { + clickEvent_(); + } +} + +void RenderCheckable::OnHandleChangedResult(const std::string& result) +{ + if (domChangeEvent_) { + domChangeEvent_(result); + } +} + +std::string RenderCheckable::GetChangedResult() +{ + LOGD("handle click"); + checked_ = !checked_; + UpdateUIStatus(); + + std::string checked = checked_ ? "true" : "false"; + std::string result = std::string("\"change\",{\"checked\":").append(checked.append("},null")); + return result; +} + +void RenderCheckable::OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) +{ + LOGD("on touch test hit"); + if (dragRecognizer_) { + dragRecognizer_->SetCoordinateOffset(coordinateOffset); + result.emplace_back(dragRecognizer_); + } + if (clickRecognizer_) { + clickRecognizer_->SetCoordinateOffset(coordinateOffset); + result.emplace_back(clickRecognizer_); + } +} + +void RenderCheckable::OnMouseHoverEnterTest() +{ + MarkNeedRender(); +} + +void RenderCheckable::OnMouseHoverExitTest() +{ + MarkNeedRender(); +} + +void RenderCheckable::RequestFocusBorder(const Offset& focusOffset, const Size& focusSize, double borderRadius) +{ + auto context = context_.Upgrade(); + if (!context) { + LOGE("Pipeline context upgrade fail!"); + return; + } + if (!context->GetRenderFocusAnimation()) { + LOGE("focusAnimation is null!"); + EventReport::SendRenderException(RenderExcepType::RENDER_ANIMATION_ERR); + return; + } + context->ShowFocusAnimation(RRect::MakeRRect(Rect(Offset(), focusSize), borderRadius, borderRadius), Color::BLUE, + focusOffset + GetGlobalOffset()); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/checkable/render_checkable.h b/frameworks/core/components/checkable/render_checkable.h new file mode 100644 index 00000000..d5ba597e --- /dev/null +++ b/frameworks/core/components/checkable/render_checkable.h @@ -0,0 +1,137 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CHECKABLE_RENDER_CHECKABLE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CHECKABLE_RENDER_CHECKABLE_H + +#include "base/utils/system_properties.h" +#include "core/components/checkable/checkable_component.h" +#include "core/components/focus_animation/render_focus_animation.h" +#include "core/gestures/click_recognizer.h" +#include "core/gestures/drag_recognizer.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +constexpr Dimension DEFAULT_CHECKABLE_BORDER_WIDTH = 1.0_vp; + +enum class UIStatus { + SELECTED = 0, + UNSELECTED, + FOCUS, + ON_TO_OFF, + OFF_TO_ON, +}; + +class RenderCheckable : public RenderNode { + DECLARE_ACE_TYPE(RenderCheckable, RenderNode); + +public: + void Update(const RefPtr& component) override; + void PerformLayout() override; + virtual void OnMouseHoverEnterTest() override; + virtual void OnMouseHoverExitTest() override; + virtual void HandleClick(); + void ApplyAspectRatio(Size& drawSize) const; + void InitClickRecognizer(); + void AddAccessibilityAction(); + bool GetChecked() const + { + return checked_; + } + + void SetNeedFocus(bool needFocus) + { + needFocus_ = needFocus; + } + + void SetOnChange(const std::function& value) + { + onChange_ = value; + } + + bool Isdisable() + { + return disabled_; + } + + bool IsPhone() const + { + return SystemProperties::GetDeviceType() == DeviceType::PHONE; + } + bool IsOnHover() const + { + return mouseState_ == MouseState::HOVER; + } + virtual void RequestFocusBorder(const Offset& focusOffset, const Size& focusSize, double borderRadius); + +protected: + void OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) override; + void OnStatusChanged(RenderStatus renderStatus) override; + void InitSize(); + void CalculateSize(); + void UpdateUIStatus() + { + uiStatus_ = checked_ ? UIStatus::SELECTED : ((onFocus_ && needFocus_) ? UIStatus::FOCUS : UIStatus::UNSELECTED); + } + void SetDragPosition(double dragPosition) + { + dragPosition_ = dragPosition; + } + double GetDragPosition() const + { + return dragPosition_; + } + virtual std::string GetChangedResult(); + virtual void OnHandleChangedResult(const std::string& result); + + double width_ = -1.0; + double height_ = -1.0; + Dimension hotZoneHorizontalPadding_ = 0.0_px; + Dimension hotZoneVerticalPadding_ = 0.0_px; + Dimension defaultWidth_ = 1.0_px; + Dimension defaultHeight_ = 1.0_px; + Dimension shadowWidth_ = 1.0_vp; + double aspectRatio_ = 1.0; + double dragPosition_ = 0.0; + Dimension borderWidth_ = 0.0_px; + Dimension borderRadius_ = 0.0_px; + Dimension checkStroke_ = 0.0_px; + Offset paintPosition_; + uint32_t pointColor_ = 0; + uint32_t activeColor_ = 0; + uint32_t inactiveColor_ = 0; + uint32_t focusColor_ = 0; + uint32_t inactivePointColor_ = 0; + uint32_t shadowColor_ = 0x0C000000; + bool disabled_ = false; + bool checked_ = false; + bool onFocus_ = false; + bool needFocus_ = true; + bool backgroundSolid_ = true; + UIStatus uiStatus_ = UIStatus::UNSELECTED; + RefPtr dragRecognizer_; + RefPtr clickRecognizer_; + std::function changeEvent_; + std::function clickEvent_; + std::function domChangeEvent_; + std::function onChange_; + Size drawSize_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CHECKABLE_RENDER_CHECKABLE_H diff --git a/frameworks/core/components/checkable/render_checkbox.cpp b/frameworks/core/components/checkable/render_checkbox.cpp new file mode 100644 index 00000000..5457c5aa --- /dev/null +++ b/frameworks/core/components/checkable/render_checkbox.cpp @@ -0,0 +1,146 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/checkable/render_checkbox.h" + +#include "base/log/event_report.h" + +namespace OHOS::Ace { +namespace { + +constexpr int32_t DEFUALT_CHECKBOX_ANIMATION_DURATION = 150; +constexpr double DEFAULT_MAX_CHECKBOX_SHAPE_SCALE = 1.0; +constexpr double DEFAULT_MIN_CHECKBOX_SHAPE_SCALE = 0.0; + +} // namespace + +void RenderCheckbox::Update(const RefPtr& component) +{ + LOGD("update"); + RenderCheckable::Update(component); + const auto& checkbox = AceType::DynamicCast(component); + if (!checkbox) { + LOGE("cast to checkbox component failed"); + EventReport::SendRenderException(RenderExcepType::RENDER_COMPONENT_ERR); + return; + } + + if (!controller_) { + controller_ = AceType::MakeRefPtr(GetContext()); + auto weak = AceType::WeakClaim(this); + controller_->AddStopListener(Animator::StatusCallback([weak]() { + auto checkBox = weak.Upgrade(); + if (checkBox) { + checkBox->OnAnimationStop(); + } + })); + } + + auto theme = GetTheme(); + if (theme) { + borderWidth_ = theme->GetBorderWidth(); + borderRadius_ = theme->GetBorderRadius(); + checkStroke_ = theme->GetCheckStroke(); + } + if (checkbox->GetUpdateType() == UpdateType::ALL) { + checked_ = checkbox->GetValue(); + } + UpdateUIStatus(); + UpdateAccessibilityAttr(); +} + +void RenderCheckbox::UpdateAccessibilityAttr() +{ + auto accessibilityNode = GetAccessibilityNode().Upgrade(); + if (!accessibilityNode) { + return; + } + accessibilityNode->SetCheckedState(checked_); + if (accessibilityNode->GetClicked()) { + accessibilityNode->SetClicked(false); + auto context = context_.Upgrade(); + if (context) { + AccessibilityEvent checkboxEvent; + checkboxEvent.nodeId = accessibilityNode->GetNodeId(); + checkboxEvent.eventType = "click"; + context->SendEventToAccessibility(checkboxEvent); + } + } +} + +void RenderCheckbox::HandleClick() +{ + UpdateAnimation(); + if (controller_) { + controller_->Play(); + } + if (clickEvent_) { + clickEvent_(); + } +} + +void RenderCheckbox::UpdateAnimation() +{ + if (!controller_) { + LOGE("the controller is nullptr"); + return; + } + double from = 0.0; + double to = 0.0; + if (checked_) { + from = DEFAULT_MAX_CHECKBOX_SHAPE_SCALE; + to = DEFAULT_MIN_CHECKBOX_SHAPE_SCALE; + } else { + from = DEFAULT_MIN_CHECKBOX_SHAPE_SCALE; + to = DEFAULT_MAX_CHECKBOX_SHAPE_SCALE; + } + + if (translate_) { + controller_->RemoveInterpolator(translate_); + } + translate_ = AceType::MakeRefPtr>(from, to, Curves::FRICTION); + auto weak = AceType::WeakClaim(this); + translate_->AddListener(Animation::ValueCallback([weak](double value) { + auto checkBox = weak.Upgrade(); + if (checkBox) { + checkBox->UpdateCheckBoxShape(value); + } + })); + controller_->SetDuration(DEFUALT_CHECKBOX_ANIMATION_DURATION); + controller_->AddInterpolator(translate_); +} + +void RenderCheckbox::UpdateCheckBoxShape(const double value) +{ + if (value < DEFAULT_MIN_CHECKBOX_SHAPE_SCALE || value > DEFAULT_MAX_CHECKBOX_SHAPE_SCALE) { + return; + } + shapeScale_ = value; + if (!checked_) { + uiStatus_ = UIStatus::OFF_TO_ON; + } else { + uiStatus_ = UIStatus::ON_TO_OFF; + } + MarkNeedRender(); +} + +void RenderCheckbox::OnAnimationStop() +{ + // after the animation stopped,we need to update the check status + RenderCheckable::HandleClick(); + UpdateAccessibilityAttr(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/checkable/render_checkbox.h b/frameworks/core/components/checkable/render_checkbox.h new file mode 100644 index 00000000..a0bd1fe5 --- /dev/null +++ b/frameworks/core/components/checkable/render_checkbox.h @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CHECKABLE_RENDER_CHECKBOX_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CHECKABLE_RENDER_CHECKBOX_H + +#include "core/animation/animator.h" +#include "core/animation/curve_animation.h" +#include "core/components/checkable/checkable_component.h" +#include "core/components/checkable/render_checkable.h" + +namespace OHOS::Ace { + +class RenderCheckbox : public RenderCheckable { + DECLARE_ACE_TYPE(RenderCheckbox, RenderCheckable); + +public: + RenderCheckbox() = default; + ~RenderCheckbox() override = default; + + static RefPtr Create(); + void Update(const RefPtr& component) override; + void HandleClick() override; + +protected: + void UpdateAnimation(); + void OnAnimationStop(); + void UpdateCheckBoxShape(double value); + void UpdateAccessibilityAttr(); + + // animation control + RefPtr controller_; + RefPtr> translate_; + + double shapeScale_ = 1.0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CHECKABLE_RENDER_CHECKBOX_H diff --git a/frameworks/core/components/checkable/render_radio.cpp b/frameworks/core/components/checkable/render_radio.cpp new file mode 100644 index 00000000..b6c6fdac --- /dev/null +++ b/frameworks/core/components/checkable/render_radio.cpp @@ -0,0 +1,237 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/checkable/render_radio.h" + +#include "base/json/json_util.h" +#include "base/log/event_report.h" +#include "core/animation/curves.h" +#include "core/common/frontend.h" +#include "core/components/text/text_component.h" + +namespace OHOS::Ace { +namespace { + +constexpr int DEFAULT_RADIO_ANIMATION_DURATION = 300; +constexpr double DEFAULT_MID_TIME_SLOT = 0.5; +constexpr double DEFAULT_END_TIME_SLOT = 1.0; +constexpr double DEFAULT_SHRINK_TIME_SLOT = 0.9; + +} // namespace + +void RenderRadio::Update(const RefPtr& component) +{ + LOGD("update"); + RenderCheckable::Update(component); + const auto& radio = AceType::DynamicCast>(component); + if (!radio) { + LOGE("cast to radio component failed"); + EventReport::SendRenderException(RenderExcepType::RENDER_COMPONENT_ERR); + return; + } + radio->SetGroupValueUpdateHandler([weak = AceType::WeakClaim(this)](const std::string& groupValue) { + LOGD("group value changed"); + auto renderRadio = weak.Upgrade(); + if (renderRadio && renderRadio->UpdateGroupValue(groupValue)) { + renderRadio->MarkNeedRender(); + } + }); + + radioInnerSizeRatio_ = radio->GetRadioInnerSizeRatio(); + + if (radio->GetUpdateType() == UpdateType::ALL) { + radioValue_ = radio->GetValue(); + groupValue_ = radio->GetGroupValue(); + } + if (!radioValue_.empty()) { + checked_ = radioValue_ == groupValue_; + } + auto theme = GetTheme(); + if (theme) { + borderWidth_ = theme->GetBorderWidth(); + } + UpdateUIStatus(); + // set check animation engine + if (!onController_) { + onController_ = AceType::MakeRefPtr(GetContext()); + onController_->AddStartListener(Animator::StatusCallback([weak = AceType::WeakClaim(this)]() { + auto radio = weak.Upgrade(); + if (radio) { + radio->OnAnimationStart(); + } + })); + } + // set uncheck animation engine + if (!offController_) { + offController_ = AceType::MakeRefPtr(GetContext()); + offController_->AddStopListener(Animator::StatusCallback([weak = AceType::WeakClaim(this)]() { + auto radio = weak.Upgrade(); + if (radio) { + radio->OffAnimationEnd(); + } + })); + } + groupValueChangedListener_ = radio->GetGroupValueChangedListener(); + pointScale_ = radio->GetRadioInnerSizeRatio(); + UpdateAccessibilityAttr(); +} + +void RenderRadio::UpdateAccessibilityAttr() const +{ + auto accessibilityNode = GetAccessibilityNode().Upgrade(); + if (!accessibilityNode) { + return; + } + accessibilityNode->SetCheckedState(checked_); + if (accessibilityNode->GetClicked()) { + accessibilityNode->SetClicked(false); + auto context = context_.Upgrade(); + if (context) { + AccessibilityEvent radioEvent; + radioEvent.nodeId = accessibilityNode->GetNodeId(); + radioEvent.eventType = "click"; + context->SendEventToAccessibility(radioEvent); + } + } +} + +bool RenderRadio::UpdateGroupValue(const std::string& groupValue) +{ + LOGD("update group value"); + groupValue_ = groupValue; + + bool needRender = false; + + if (!checked_ && isClicked_) { + checked_ = true; + isClicked_ = false; + needRender = true; + UpdateUIStatus(); + } else if (checked_) { + checked_ = false; + needRender = true; + UpdateAnimation(false); + offController_->Play(); + } + std::string checked = checked_ ? "true" : "false"; + std::string result = std::string("\"change\",{\"checked\":") + .append(checked) + .append(",\"value\":\"") + .append(groupValue_) + .append("\"},null"); + auto context = context_.Upgrade(); + if (context && context->GetFrontend() && context->GetFrontendType() == FrontendType::JS_CARD) { + auto json = JsonUtil::Create(true); + json->Put("checkedItem", groupValue_.c_str()); + result = json->ToString(); + } + OnHandleChangedResult(result); + if (changeEvent_) { + changeEvent_(result); + } + return needRender; +} + +void RenderRadio::PerformLayout() +{ + RenderCheckable::PerformLayout(); + outCircleRadius_ = drawSize_.Width() / 2.0; + innerCircleRadius_ = outCircleRadius_ * radioInnerSizeRatio_; +} + +void RenderRadio::HandleClick() +{ + if (!checked_) { + isClicked_ = true; + if (groupValueChangedListener_) { + LOGE("groupValueChangedListener_"); + groupValueChangedListener_(radioValue_); + } + } + UpdateAnimation(true); + onController_->Play(); + + if (clickEvent_) { + clickEvent_(); + } +} + +void RenderRadio::OffAnimationEnd() +{ + // after the animation stopped, set the stage back to unchecked + UpdateUIStatus(); + UpdateAccessibilityAttr(); +} + +void RenderRadio::OnAnimationStart() +{ + // set the stage to checked and then start animation + UpdateAccessibilityAttr(); +} + +void RenderRadio::UpdateAnimation(bool isOn) +{ + if (!onController_ || !offController_) { + LOGE("update animation failed due to controller is null"); + return; + } + RefPtr> shrinkEngine = AceType::MakeRefPtr>(); + RefPtr> selectEngine = AceType::MakeRefPtr>(); + onController_->ClearInterpolators(); + offController_->ClearInterpolators(); + auto shrinkFrameStart = AceType::MakeRefPtr>(0.0, 1.0); + auto shrinkFrameMid = AceType::MakeRefPtr>(DEFAULT_MID_TIME_SLOT, DEFAULT_SHRINK_TIME_SLOT); + shrinkFrameMid->SetCurve(Curves::FRICTION); + auto shrinkFrameEnd = AceType::MakeRefPtr>(DEFAULT_END_TIME_SLOT, 1.0); + shrinkFrameEnd->SetCurve(Curves::FRICTION); + shrinkEngine->AddKeyframe(shrinkFrameStart); + shrinkEngine->AddKeyframe(shrinkFrameMid); + shrinkEngine->AddKeyframe(shrinkFrameEnd); + shrinkEngine->AddListener(Animation::ValueCallback([weak = AceType::WeakClaim(this)](double value) { + auto radio = weak.Upgrade(); + if (radio) { + radio->totalScale_ = value; + radio->MarkNeedRender(); + } + })); + + auto selectFrameStart = AceType::MakeRefPtr>(0.0, isOn ? 1.0 : radioInnerSizeRatio_); + auto selectFrameMid = AceType::MakeRefPtr>(DEFAULT_MID_TIME_SLOT, 0.0); + selectFrameMid->SetCurve(Curves::FRICTION); + auto selectFrameEnd = + AceType::MakeRefPtr>(DEFAULT_END_TIME_SLOT, isOn ? radioInnerSizeRatio_ : 1.0); + selectFrameEnd->SetCurve(Curves::FRICTION); + selectEngine->AddKeyframe(selectFrameStart); + selectEngine->AddKeyframe(selectFrameMid); + selectEngine->AddKeyframe(selectFrameEnd); + selectEngine->AddListener(Animation::ValueCallback([weak = AceType::WeakClaim(this)](double value) { + auto radio = weak.Upgrade(); + if (radio) { + radio->pointScale_ = value; + radio->MarkNeedRender(); + } + })); + if (isOn) { + onController_->AddInterpolator(shrinkEngine); + onController_->AddInterpolator(selectEngine); + onController_->SetDuration(DEFAULT_RADIO_ANIMATION_DURATION); + } else { + offController_->AddInterpolator(shrinkEngine); + offController_->AddInterpolator(selectEngine); + offController_->SetDuration(DEFAULT_RADIO_ANIMATION_DURATION); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/checkable/render_radio.h b/frameworks/core/components/checkable/render_radio.h new file mode 100644 index 00000000..125be449 --- /dev/null +++ b/frameworks/core/components/checkable/render_radio.h @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CHECKABLE_RENDER_RADIO_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CHECKABLE_RENDER_RADIO_H + +#include + +#include "core/animation/animator.h" +#include "core/animation/keyframe_animation.h" +#include "core/components/checkable/checkable_component.h" +#include "core/components/checkable/render_checkable.h" + +namespace OHOS::Ace { + +class RenderRadio : public RenderCheckable { + DECLARE_ACE_TYPE(RenderRadio, RenderCheckable); + +public: + RenderRadio() = default; + ~RenderRadio() override = default; + + static RefPtr Create(); + void Update(const RefPtr& component) override; + void PerformLayout() override; + bool UpdateGroupValue(const std::string& groupValue); + +protected: + double innerCircleRadius_ = 0.0; + double outCircleRadius_ = 0.0; + double radioInnerSizeRatio_ = 0.0; + std::string radioValue_; + std::string groupValue_; + std::function groupValueChangedListener_; + + void UpdateAnimation(bool isOn); + void OffAnimationEnd(); + void OnAnimationStart(); + void HandleClick() override; + void UpdateAccessibilityAttr() const; + + RefPtr onController_; + RefPtr offController_; + + double totalScale_ = 1.0; + double pointScale_ = 1.0; + bool isClicked_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CHECKABLE_RENDER_RADIO_H diff --git a/frameworks/core/components/checkable/render_switch.cpp b/frameworks/core/components/checkable/render_switch.cpp new file mode 100644 index 00000000..16daf305 --- /dev/null +++ b/frameworks/core/components/checkable/render_switch.cpp @@ -0,0 +1,492 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/checkable/render_switch.h" + +#include "base/log/event_report.h" +#include "core/common/font_manager.h" +#include "core/components/common/properties/alignment.h" +#include "core/components/text/text_component.h" + +namespace OHOS::Ace { +namespace { + +#ifdef WEARABLE_PRODUCT +constexpr int32_t DEFAULT_SWITCH_ANIMATION_DURATION = 250; +#else +constexpr int32_t DEFAULT_SWITCH_ANIMATION_DURATION = 450; +#endif +constexpr Dimension DEFAULT_SWITCH_POINT_PADDING = 2.0_vp; + +} // namespace + +RenderSwitch::~RenderSwitch() +{ +#ifndef WEARABLE_PRODUCT + UnSubscribeMultiModal(); +#endif + auto context = context_.Upgrade(); + if (context) { + context->RemoveFontNode(WeakClaim(this)); + auto fontManager = context->GetFontManager(); + if (fontManager) { + fontManager->RemoveVariationNode(WeakClaim(this)); + } + } +} + +void RenderSwitch::Update(const RefPtr& component) +{ + RenderCheckable::Update(component); + auto switchComponent = AceType::DynamicCast(component); + if (!switchComponent) { + LOGE("cast to switch component failed"); + EventReport::SendRenderException(RenderExcepType::RENDER_COMPONENT_ERR); + return; + } + component_ = switchComponent; + showText_ = switchComponent->GetShowText(); + if (showText_) { + if (!renderTextOn_ || !renderTextOff_) { + InitRenderText(); + } + UpdateRenderText(switchComponent); + } + + if (!controller_) { + controller_ = AceType::MakeRefPtr(GetContext()); + auto weak = AceType::WeakClaim(this); + controller_->AddStopListener(Animator::StatusCallback([weak]() { + auto switchComponent = weak.Upgrade(); + if (switchComponent) { + switchComponent->OnAnimationStop(); + } + })); + } + backgroundSolid_ = switchComponent->IsBackgroundSolid(); + pointPadding_ = DEFAULT_SWITCH_POINT_PADDING; + + if (switchComponent->GetUpdateType() == UpdateType::ALL) { + checked_ = switchComponent->GetValue(); + } + oldChecked_ = checked_; + needReverse_ = (switchComponent->GetTextDirection() == TextDirection::RTL); + auto theme = GetTheme(); + if (theme) { + borderWidth_ = theme->GetBorderWidth(); + } + UpdateUIStatus(); + HandleDrag(); + UpdateAccessibilityAttr(); +#ifndef WEARABLE_PRODUCT + if (!component_->GetMultimodalProperties().IsUnavailable()) { + PrepareMultiModalEvent(); + SubscribeMultiModal(); + } +#endif +} + +void RenderSwitch::UpdateAccessibilityAttr() +{ + std::string text; + if (component_ && showText_) { + if (checked_) { + text = textOn_; + } else { + text = textOff_; + } + } + auto accessibilityNode = GetAccessibilityNode().Upgrade(); + if (!accessibilityNode) { + return; + } + accessibilityNode->SetText(text); + accessibilityNode->SetCheckedState(checked_); + if (accessibilityNode->GetClicked()) { + accessibilityNode->SetClicked(false); + auto context = context_.Upgrade(); + if (context) { + AccessibilityEvent switchEvent; + switchEvent.nodeId = accessibilityNode->GetNodeId(); + switchEvent.eventType = "click"; + context->SendEventToAccessibility(switchEvent); + } + } +} + +void RenderSwitch::InitRenderText() +{ + LayoutParam innerLayout; + innerLayout.SetMaxSize(Size(Size::INFINITE_SIZE, Size::INFINITE_SIZE)); + + textComponent_ = AceType::MakeRefPtr(textOn_); + renderTextOn_ = AceType::DynamicCast(textComponent_->CreateRenderNode()); + renderTextOn_->Attach(GetContext()); + renderTextOn_->Update(textComponent_); + renderTextOn_->SetLayoutParam(innerLayout); + + textComponent_->SetData(textOff_); + renderTextOff_ = AceType::DynamicCast(textComponent_->CreateRenderNode()); + renderTextOff_->Attach(GetContext()); + renderTextOff_->Update(textComponent_); + renderTextOff_->SetLayoutParam(innerLayout); + + auto context = context_.Upgrade(); + if (context) { + auto fontManager = context->GetFontManager(); + if (fontManager) { + fontManager->AddVariationNode(WeakClaim(this)); + } + } +} + +void RenderSwitch::HandleDrag() +{ + if (!disabled_ && !dragRecognizer_) { + dragRecognizer_ = AceType::MakeRefPtr(); + dragRecognizer_->SetOnDragStart([weak = AceType::WeakClaim(this)](const DragStartInfo& info) { + auto renderSwitch = weak.Upgrade(); + if (renderSwitch) { + renderSwitch->HandleDragStart(info.GetLocalLocation()); + } + }); + dragRecognizer_->SetOnDragUpdate([weak = AceType::WeakClaim(this)](const DragUpdateInfo& info) { + auto renderSwitch = weak.Upgrade(); + if (renderSwitch) { + renderSwitch->HandleDragUpdate(info.GetLocalLocation()); + } + }); + dragRecognizer_->SetOnDragEnd([weak = AceType::WeakClaim(this)](const DragEndInfo& info) { + auto renderSwitch = weak.Upgrade(); + if (renderSwitch) { + renderSwitch->HandleDragEnd(info.GetLocalLocation()); + } + }); + } else if (disabled_ && dragRecognizer_) { + dragRecognizer_ = nullptr; + } +} + +void RenderSwitch::PerformLayout() +{ + if (showText_) { + width_ = NormalizeToPx(defaultWidth_); + height_ = NormalizeToPx(defaultHeight_); + textOnSize_ = CalculateTextSize(textOn_, renderTextOn_); + textOffSize_ = CalculateTextSize(textOff_, renderTextOff_); + } else { + RenderCheckable::InitSize(); + } + RenderCheckable::CalculateSize(); + double maxTextWidth = std::max(textOnSize_.Width(), textOffSize_.Width()); + double pointHeight = std::max(textOnSize_.Height(), drawSize_.Height()); + auto pointTextPadding = NormalizeToPx(pointTextPadding_); + rawPointSize_ = Size(std::max(maxTextWidth + pointTextPadding * 2, pointHeight), pointHeight); + bool pointUseTextHeight = (rawPointSize_.Height() > drawSize_.Height()); + bool pointUseHeightAsWidth = (rawPointSize_.Width() == drawSize_.Height()); + auto pointPadding = NormalizeToPx(pointPadding_); + if (showText_) { + if (pointUseTextHeight) { + pointHeight += pointPadding * 2.0; + } + switchSize_ = + Size(pointUseHeightAsWidth ? drawSize_.Width() : (rawPointSize_.Width() + pointPadding) * aspectRatio_, + pointHeight); + pointRadius_ = pointHeight / 2.0 - pointPadding; + } else { + switchSize_ = drawSize_; + pointRadius_ = drawSize_.Height() / 2.0 - pointPadding; + } + rawPointSize_ -= + Size(pointUseHeightAsWidth ? pointPadding * 2.0 : 0.0, pointUseTextHeight ? 0.0 : pointPadding * 2.0); + + Size layoutSize; + if (switchSize_.Width() > width_) { + layoutSize = GetLayoutParam().Constrain(Size(switchSize_.Width() + NormalizeToPx(hotZoneHorizontalPadding_) * 2, + std::max(switchSize_.Height(), height_) + NormalizeToPx(hotZoneVerticalPadding_) * 2)); + } else { + layoutSize = GetLayoutParam().Constrain(Size(width_, height_)); + } + SetLayoutSize(layoutSize); + double widthOverflow = layoutSize.Width() - switchSize_.Width(); + paintPosition_ = Alignment::GetAlignPosition(layoutSize, switchSize_, Alignment::CENTER) + + Offset(widthOverflow > 0.0 ? 0.0 : widthOverflow - NormalizeToPx(hotZoneHorizontalPadding_), 0.0); + InitCurrentPointPosition(); + UpdateAccessibilityPosition(); +} + +void RenderSwitch::HandleDragStart(const Offset& updatePoint) +{ + dragStartPosition_ = updatePoint.GetX(); + oldChecked_ = checked_; +} + +void RenderSwitch::HandleDragUpdate(const OHOS::Ace::Offset& updatePoint) +{ + OnDrag(updatePoint); + MarkNeedRender(); +} + +void RenderSwitch::HandleDragEnd(const OHOS::Ace::Offset& updatePoint) +{ + OnDrag(updatePoint); + dragStartPosition_ = 0.0; + if (changeEvent_ && (oldChecked_ != checked_)) { + std::string res = checked_ ? "true" : "false"; + changeEvent_(std::string("\"change\",{\"checked\":").append(res.append("},null"))); + } + oldChecked_ = checked_; + InitCurrentPointPosition(); + UpdateUIStatus(); + MarkNeedRender(); +} + +void RenderSwitch::UpdateRenderText(const RefPtr& switchComponent) +{ + auto context = context_.Upgrade(); + if (context) { + if (textStyle_.IsAllowScale() || textStyle_.GetFontSize().Unit() == DimensionUnit::FP) { + context->AddFontNode(AceType::WeakClaim(this)); + } + } + + textOn_ = switchComponent->GetTextOn(); + textOff_ = switchComponent->GetTextOff(); + textColorOn_ = switchComponent->GetTextColorOn(); + textColorOff_ = switchComponent->GetTextColorOff(); + pointTextPadding_ = switchComponent->GetTextPadding(); + + textStyle_ = switchComponent->GetTextStyle(); + textStyle_.SetTextColor(textColorOn_); + textComponent_->SetData(textOn_); + textComponent_->SetTextStyle(textStyle_); + renderTextOn_->Update(textComponent_); + + textStyle_.SetTextColor(textColorOff_); + textComponent_->SetData(textOff_); + textComponent_->SetTextStyle(textStyle_); + renderTextOff_->Update(textComponent_); +} + +void RenderSwitch::OnDrag(const Offset& updatePoint) +{ + InitCurrentPointPosition(); + auto pointPadding = NormalizeToPx(pointPadding_); + double pointTrackLength = switchSize_.Width() - rawPointSize_.Width() - pointPadding * 2; + double halfTrackLength = pointTrackLength / 2.0; + pointPositionDelta_ = updatePoint.GetX() - dragStartPosition_; + // let A = [needReverse_], B = [oldChecked_], C = [moveRight], D = [effectiveMove], + // and [A'] represents the reverse of [A]. + // there are four situations in which the checked status needs to be reversed: + // 1. A'B'CD, 2. A'BC'D, 3. AB'C'D, 4. ABCD, + // so [needChangeStatus] = A'B'CD + ABCD + A'BC'D + AB'C'D = (A'B' + AB)CD + (A'B + AB')C'D + bool effectiveMove = abs(pointPositionDelta_) > halfTrackLength; + bool moveRight = pointPositionDelta_ > 0.0; + bool needChangeStatus = ((needReverse_ == oldChecked_) && moveRight && effectiveMove) || + ((needReverse_ != oldChecked_) && !moveRight && effectiveMove); + checked_ = needChangeStatus ^ oldChecked_; + + // let A = [needReverse_], B = [oldChecked_], C = [moveRight], D = [excessiveMove], + // and [A'] represents the reverse of [A]. + // there are eight situations in which [pointPositionDelta_] needs to be constrained to zero: + // 1. A'B'C'D', 2. A'B'C'D, 3. ABC'D', 4. ABC'D, 5. A'BCD', 6. A'BCD, 7. AB'CD', 8. AB'CD, + // so [constrainDeltaToZero] = (A'B'C'D' + A'B'C'D) +( ABC'D' + ABC'D) + (A'BCD' + A'BCD) + (AB'CD' + AB'CD) + // = A'B'C' + ABC' + A'BC + AB'C = (A'B' + AB)C' + (A'B + AB')C + bool excessiveMove = abs(pointPositionDelta_) > pointTrackLength; + bool constrainDeltaToZero = + (moveRight && (needReverse_ != oldChecked_)) || (!moveRight && (needReverse_ == oldChecked_)); + // there are four situations in which the absolute value of [pointPositionDelta_] needs to be constrained to + // trackLength: 1. A'BC'D, 2. AB'C'D, 3. ABCD, 4. A'B'CD, + // so [constrainDeltaToTrackLength] = A'BC'D + AB'C'D + ABCD + A'B'CD = (A'BC' + AB'C' + ABC + A'B'C)D + // = ((A'B + AB')C' + (AB + A'B')C)D + bool constrainDeltaToTrackLength = excessiveMove && + ((!moveRight && (needReverse_ != oldChecked_)) || (moveRight && (needReverse_ == oldChecked_))); + double deltaCoefficient = moveRight ? 1.0 : -1.0; + if (constrainDeltaToZero) { + pointPositionDelta_ = 0.0; + } else if (constrainDeltaToTrackLength) { + pointPositionDelta_ = deltaCoefficient * pointTrackLength; + } + currentPointOriginX_ += pointPositionDelta_; +} + +void RenderSwitch::HandleClick() +{ + UpdateAnimation(); + controller_->Play(); + + if (clickEvent_) { + clickEvent_(); + } +} + +void RenderSwitch::PaintText(const Offset& textOffset, RenderContext& context) const +{ + auto paintRenderText = oldChecked_ ? renderTextOn_ : renderTextOff_; + auto textSize = paintRenderText->GetLayoutSize(); + textSize.SetHeight(textSize.Height() > rawPointSize_.Height() ? rawPointSize_.Height() : textSize.Height()); + auto textPos = Alignment::GetAlignPosition(rawPointSize_, textSize, Alignment::CENTER); + paintRenderText->Paint(context, textOffset + textPos); +} + +void RenderSwitch::OnAnimationStop() +{ + // after the animation stopped,we need to update the check status + RenderCheckable::HandleClick(); + UpdateAccessibilityAttr(); + oldChecked_ = checked_; + InitCurrentPointPosition(); +} + +void RenderSwitch::UpdateAnimation() +{ + double from = 0.0; + double to = 0.0; + auto pointPadding = NormalizeToPx(pointPadding_); + if ((oldChecked_ && !needReverse_) || (!oldChecked_ && needReverse_)) { + from = switchSize_.Width() - pointPadding - rawPointSize_.Width(); + to = pointPadding; + } else { + from = pointPadding; + to = switchSize_.Width() - pointPadding - rawPointSize_.Width(); + } + + if (translate_) { + controller_->RemoveInterpolator(translate_); + } + translate_ = AceType::MakeRefPtr>(from, to, Curves::FRICTION); + auto weak = AceType::WeakClaim(this); + translate_->AddListener(Animation::ValueCallback([weak](double value) { + auto switchComp = weak.Upgrade(); + if (switchComp) { + Offset data(value, 0.0); + switchComp->UpdatePointPosition(data); + } + })); + controller_->SetDuration(DEFAULT_SWITCH_ANIMATION_DURATION); + controller_->AddInterpolator(translate_); +} + +void RenderSwitch::UpdatePointPosition(const Offset& updatePoint) +{ + InitCurrentPointPosition(); + auto pointPadding = NormalizeToPx(pointPadding_); + double pointTrackLength = switchSize_.Width() - rawPointSize_.Width() - pointPadding * 2; + double movingOffset = updatePoint.GetX(); + if (movingOffset < 0.0) { + movingOffset = 0.0; + } else if (movingOffset > pointTrackLength) { + movingOffset = pointTrackLength; + } + if ((oldChecked_ && !needReverse_) || (!oldChecked_ && needReverse_)) { + currentPointOriginX_ = movingOffset; + uiStatus_ = needReverse_ ? UIStatus::OFF_TO_ON : UIStatus::ON_TO_OFF; + } else { + uiStatus_ = needReverse_ ? UIStatus::ON_TO_OFF : UIStatus::OFF_TO_ON; + currentPointOriginX_ += movingOffset; + } + MarkNeedRender(); +} + +#ifndef WEARABLE_PRODUCT +void RenderSwitch::PrepareMultiModalEvent() +{ + if (!multimodalSwitchEvent_) { + multimodalSwitchEvent_ = [weak = WeakClaim(this)](const AceMultimodalEvent& event) { + auto renderSwitch = weak.Upgrade(); + static const int32_t switchOn = 1; + static const int32_t switchOff = 2; + if (renderSwitch) { + if (event.GetVoice().action == switchOn) { + renderSwitch->OpenSwitch(); + } else if (event.GetVoice().action == switchOff) { + renderSwitch->CloseSwitch(); + } + } + }; + } +} + +bool RenderSwitch::SubscribeMultiModal() +{ + if (isSubscribeMultimodal_) { + return true; + } + if (multiModalScene_.Invalid()) { + const auto pipelineContext = GetContext().Upgrade(); + if (!pipelineContext) { + LOGW("the pipeline context is null"); + return false; + } + const auto multimodalManager = pipelineContext->GetMultiModalManager(); + if (!multimodalManager) { + LOGW("the multimodal manager is null"); + return false; + } + const auto scene = multimodalManager->GetCurrentMultiModalScene(); + switchEvent_ = VoiceEvent(component_->GetMultimodalProperties().voiceLabel, SceneLabel::SWITCH); + scene->SubscribeVoiceEvent(switchEvent_, multimodalSwitchEvent_); + + multiModalScene_ = scene; + isSubscribeMultimodal_ = true; + } + return true; +} + +bool RenderSwitch::UnSubscribeMultiModal() +{ + if (!isSubscribeMultimodal_) { + return true; + } + auto multiModalScene = multiModalScene_.Upgrade(); + if (!multiModalScene) { + LOGE("fail to destroy multimodal event due to multiModalScene is null"); + return false; + } + if (!switchEvent_.GetVoiceContent().empty()) { + multiModalScene->UnSubscribeVoiceEvent(switchEvent_); + } + isSubscribeMultimodal_ = false; + return true; +} +#endif + +void RenderSwitch::OpenSwitch() +{ + if (!oldChecked_) { + HandleClick(); + } +} + +void RenderSwitch::CloseSwitch() +{ + if (oldChecked_) { + HandleClick(); + } +} + +void RenderSwitch::InitCurrentPointPosition() +{ + auto pointPadding = NormalizeToPx(pointPadding_); + if (needReverse_) { + currentPointOriginX_ = + oldChecked_ ? pointPadding : (switchSize_.Width() - pointPadding - rawPointSize_.Width()); + } else { + currentPointOriginX_ = + oldChecked_ ? (switchSize_.Width() - pointPadding - rawPointSize_.Width()) : pointPadding; + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/checkable/render_switch.h b/frameworks/core/components/checkable/render_switch.h new file mode 100644 index 00000000..c06144ce --- /dev/null +++ b/frameworks/core/components/checkable/render_switch.h @@ -0,0 +1,104 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CHECKABLE_RENDER_SWITCH_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CHECKABLE_RENDER_SWITCH_H + +#include "core/animation/animator.h" +#include "core/animation/curve_animation.h" +#include "core/components/checkable/checkable_component.h" +#include "core/components/checkable/render_checkable.h" +#include "core/components/text/render_text.h" +#include "core/components/text/text_component.h" + +namespace OHOS::Ace { + +class RenderSwitch : public RenderCheckable { + DECLARE_ACE_TYPE(RenderSwitch, RenderCheckable); + +public: + RenderSwitch() = default; + ~RenderSwitch() override; + + static RefPtr Create(); + void Update(const RefPtr& component) override; + void PerformLayout() override; + + void HandleClick() override; + void HandleDragStart(const Offset& updatePoint); + void HandleDragUpdate(const Offset& updatePoint); + void HandleDragEnd(const Offset& updatePoint); + void OnDrag(const Offset& updatePoint); + void UpdatePointPosition(const Offset& updatePoint); + void OpenSwitch(); + void CloseSwitch(); + + virtual Size CalculateTextSize(const std::string& text, RefPtr& renderText) = 0; + void PaintText(const Offset& textOffset, RenderContext& context) const; + + void InitCurrentPointPosition(); + +protected: + void UpdateRenderText(const RefPtr& component); + void InitRenderText(); + void HandleDrag(); + void UpdateAnimation(); + void OnAnimationStop(); + void UpdateAccessibilityAttr(); +#ifndef WEARABLE_PRODUCT + void PrepareMultiModalEvent(); + bool SubscribeMultiModal(); + bool UnSubscribeMultiModal(); +#endif + // switch attributes + bool oldChecked_ = true; + bool needReverse_ = false; + Dimension pointPadding_ = 0.0_px; + double pointRadius_ = 0.0; + double pointPositionDelta_ = 0.0; + double dragStartPosition_ = 0.0; + double currentPointOriginX_ = 0.0; + Size rawPointSize_; + Size switchSize_; + + // text attributes + bool showText_ = false; + Dimension pointTextPadding_ = 0.0_vp; + std::string textOn_ = "On"; + std::string textOff_ = "Off"; + TextStyle textStyle_; + RefPtr renderTextOn_; + RefPtr renderTextOff_; + Size textOnSize_; + Size textOffSize_; + Color textColorOn_ = Color::BLACK; + Color textColorOff_ = Color::BLACK; + RefPtr textComponent_; +#ifndef WEARABLE_PRODUCT + bool isSubscribeMultimodal_ = false; + VoiceEvent switchEvent_; + WeakPtr multiModalScene_; + MultimodalEventCallback multimodalSwitchEvent_; +#endif + // animation control + RefPtr controller_; + RefPtr> translate_; + bool isSwitchDuringAnimation_ = false; + RefPtr component_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CHECKABLE_RENDER_SWITCH_H diff --git a/frameworks/core/components/clip/BUILD.gn b/frameworks/core/components/clip/BUILD.gn new file mode 100644 index 00000000..184dc7c0 --- /dev/null +++ b/frameworks/core/components/clip/BUILD.gn @@ -0,0 +1,22 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("clip") { + sources = [ + "clip_component.cpp", + "flutter_render_clip.cpp", + "render_clip.cpp", + ] +} diff --git a/frameworks/core/components/clip/clip_component.cpp b/frameworks/core/components/clip/clip_component.cpp new file mode 100644 index 00000000..cbeca822 --- /dev/null +++ b/frameworks/core/components/clip/clip_component.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/clip/clip_component.h" + +#include "core/components/clip/clip_element.h" +#include "core/components/clip/render_clip.h" + +namespace OHOS::Ace { + +RefPtr ClipComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +RefPtr ClipComponent::CreateRenderNode() +{ + return RenderClip::Create(); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/clip/clip_component.h b/frameworks/core/components/clip/clip_component.h new file mode 100644 index 00000000..2556eed2 --- /dev/null +++ b/frameworks/core/components/clip/clip_component.h @@ -0,0 +1,153 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CLIP_CLIP_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CLIP_CLIP_COMPONENT_H + +#include "base/utils/utils.h" +#include "core/components/common/properties/radius.h" +#include "core/pipeline/base/sole_child_component.h" + +namespace OHOS::Ace { + +class ClipComponent : public SoleChildComponent { + DECLARE_ACE_TYPE(ClipComponent, SoleChildComponent); + +public: + explicit ClipComponent(const RefPtr& child) : SoleChildComponent(child) {} + ~ClipComponent() override = default; + + RefPtr CreateElement() override; + + RefPtr CreateRenderNode() override; + + void SetWidth(const Dimension& width) + { + width_ = width; + } + + const Dimension& GetWidth() const + { + return width_; + } + + void SetHeight(const Dimension& height) + { + height_ = height; + } + + const Dimension& GetHeight() const + { + return height_; + } + + const Dimension& GetOffsetX() const + { + return offsetX_; + } + + void SetOffsetX(const Dimension& offsetX) + { + offsetX_ = offsetX; + } + + const Dimension& GetOffsetY() const + { + return offsetY_; + } + + void SetOffsetY(const Dimension& offsetY) + { + offsetY_ = offsetY; + } + + const Radius& GetTopLeftRadius() const + { + return topLeftRadius_; + } + + void SetTopLeftRadius(const Radius& topLeftRadius) + { + topLeftRadius_ = topLeftRadius; + } + + const Radius& GetTopRightRadius() const + { + return topRightRadius_; + } + + void SetTopRightRadius(const Radius& topRightRadius) + { + topRightRadius_ = topRightRadius; + } + + const Radius& GetBottomLeftRadius() const + { + return bottomLeftRadius_; + } + + void SetBottomLeftRadius(const Radius& bottomLeftRadius) + { + bottomLeftRadius_ = bottomLeftRadius; + } + + const Radius& GetBottomRightRadius() const + { + return bottomRightRadius_; + } + + void SetBottomRightRadius(const Radius& bottomRightRadius) + { + bottomRightRadius_ = bottomRightRadius; + } + + bool IsFollowChild() const + { + return followChild_; + } + + void SetFollowChild(bool followChild) + { + followChild_ = followChild; + } + + bool IsClipWithShadow() const + { + return clipWithShadow_; + } + + void SetClipWithShadow(bool clipWithShadow) + { + clipWithShadow_ = clipWithShadow; + } + +private: + Dimension width_ = Dimension(0.0); + Dimension height_ = Dimension(0.0); + Dimension offsetX_ = Dimension(0.0); + Dimension offsetY_ = Dimension(0.0); + + Radius topLeftRadius_; + Radius topRightRadius_; + Radius bottomLeftRadius_; + Radius bottomRightRadius_; + bool followChild_ = true; + // Play clip animation with shadow when set true, shadow should set in box outer of tween component. + bool clipWithShadow_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CLIP_CLIP_COMPONENT_H diff --git a/frameworks/core/components/clip/clip_element.h b/frameworks/core/components/clip/clip_element.h new file mode 100644 index 00000000..022b999d --- /dev/null +++ b/frameworks/core/components/clip/clip_element.h @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CLIP_CLIP_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CLIP_CLIP_ELEMENT_H + +#include "core/pipeline/base/sole_child_element.h" + +namespace OHOS::Ace { + +class ClipElement : public SoleChildElement { + DECLARE_ACE_TYPE(ClipElement, SoleChildElement); + +public: + ClipElement() = default; + ~ClipElement() override = default; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CLIP_CLIP_ELEMENT_H diff --git a/frameworks/core/components/clip/flutter_render_clip.cpp b/frameworks/core/components/clip/flutter_render_clip.cpp new file mode 100644 index 00000000..a04a12cd --- /dev/null +++ b/frameworks/core/components/clip/flutter_render_clip.cpp @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/clip/flutter_render_clip.h" + +#include "third_party/skia/include/core/SkScalar.h" + +namespace OHOS::Ace { + +using namespace Flutter; + +RefPtr RenderClip::Create() +{ + LOGD("Create"); + return AceType::MakeRefPtr(); +} + +void FlutterRenderClip::Paint(RenderContext& context, const Offset& offset) +{ + LOGD("Paint"); + + RRect rrect; + Corner corner = { + Radius(NormalizeToPx(topLeftRadius_.GetX()), NormalizeToPx(topLeftRadius_.GetY())), + Radius(NormalizeToPx(topRightRadius_.GetX()), NormalizeToPx(topRightRadius_.GetY())), + Radius(NormalizeToPx(bottomRightRadius_.GetX()), NormalizeToPx(bottomRightRadius_.GetY())), + Radius(NormalizeToPx(bottomLeftRadius_.GetX()), NormalizeToPx(bottomLeftRadius_.GetY())) + }; + rrect.SetCorner(corner); + rrect.SetRect(GetClipRect(offset)); + layer_->SetClipRRect(rrect, Clip::HARD_EDGE); + + RenderNode::Paint(context, offset); +} + +RenderLayer FlutterRenderClip::GetRenderLayer() +{ + if (!layer_) { + layer_ = AceType::MakeRefPtr( + 0, GetLayoutParam().GetMaxSize().Width(), 0, GetLayoutParam().GetMaxSize().Height(), Clip::HARD_EDGE); + } + return AceType::RawPtr(layer_); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/clip/flutter_render_clip.h b/frameworks/core/components/clip/flutter_render_clip.h new file mode 100644 index 00000000..cbd0d7a8 --- /dev/null +++ b/frameworks/core/components/clip/flutter_render_clip.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CLIP_FLUTTER_RENDER_CLIP_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CLIP_FLUTTER_RENDER_CLIP_H + +#include "core/components/clip/render_clip.h" +#include "core/pipeline/layers/clip_layer.h" + +namespace OHOS::Ace { + +namespace Flutter { + class ClipLayer; +} + +class FlutterRenderClip : public RenderClip { + DECLARE_ACE_TYPE(FlutterRenderClip, RenderClip); + +public: + FlutterRenderClip() = default; + ~FlutterRenderClip() override = default; + + void Paint(RenderContext& context, const Offset& offset) override; + RenderLayer GetRenderLayer() override; + +private: + RefPtr layer_; +}; + +} // namespace OHOS::Ace::Flutter + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CLIP_FLUTTER_RENDER_CLIP_H diff --git a/frameworks/core/components/clip/render_clip.cpp b/frameworks/core/components/clip/render_clip.cpp new file mode 100644 index 00000000..9b2737d5 --- /dev/null +++ b/frameworks/core/components/clip/render_clip.cpp @@ -0,0 +1,219 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/clip/render_clip.h" + +#include "base/log/dump_log.h" +#include "base/log/event_report.h" +#include "base/utils/utils.h" +#include "core/components/box/render_box.h" +#include "core/components/clip/clip_component.h" +#include "core/components/display/render_display.h" +#include "core/components/transform/render_transform.h" + +namespace OHOS::Ace { + +void RenderClip::Update(const RefPtr& component) +{ + const RefPtr clip = AceType::DynamicCast(component); + if (!clip) { + return; + } + clipWithShadow_ = clip->IsClipWithShadow(); + followChildSize_ = clip->IsFollowChild(); + width_ = NormalizeToPx(clip->GetWidth()); + height_ = NormalizeToPx(clip->GetHeight()); + offsetX_ = NormalizeToPx(clip->GetOffsetX()); + offsetY_ = NormalizeToPx(clip->GetOffsetY()); + + topLeftRadius_ = clip->GetTopLeftRadius(); + topRightRadius_ = clip->GetTopRightRadius(); + bottomLeftRadius_ = clip->GetBottomLeftRadius(); + bottomRightRadius_ = clip->GetBottomRightRadius(); + + MarkNeedLayout(); +} + +void RenderClip::PerformLayout() +{ + if (GetChildren().empty()) { + LOGE("RenderClip: no child found in RenderClip!"); + EventReport::SendRenderException(RenderExcepType::CLIP_ERR); + return; + } + auto child = GetChildren().front(); + child->Layout(GetLayoutParam()); + child->SetPosition(Offset::Zero()); + if (followChildSize_) { + SetLayoutSize(child->GetLayoutSize()); + } else { + SetLayoutSize(GetLayoutParam().GetMaxSize()); + } +} + +FloatPropertyAnimatable::SetterMap RenderClip::GetFloatPropertySetterMap() +{ + FloatPropertyAnimatable::SetterMap map; + auto weak = AceType::WeakClaim(this); + map[PropertyAnimatableType::PROPERTY_WIDTH] = [weak](float value) { + auto clip = weak.Upgrade(); + if (!clip) { + LOGE("set width failed. clip is null."); + return; + } + clip->SetWidth(value); + clip->MarkNeedRender(); + }; + map[PropertyAnimatableType::PROPERTY_HEIGHT] = [weak](float value) { + auto clip = weak.Upgrade(); + if (!clip) { + LOGE("set height failed. clip is null."); + return; + } + clip->SetHeight(value); + clip->MarkNeedRender(); + }; + map[PropertyAnimatableType::PROPERTY_OFFSET_X] = [weak](float value) { + auto clip = weak.Upgrade(); + if (!clip) { + LOGE("set offsetX failed. clip is null."); + return; + } + clip->SetOffsetX(value); + clip->UpdateBoxForShadowAnimation(); + clip->MarkNeedRender(); + }; + map[PropertyAnimatableType::PROPERTY_OFFSET_Y] = [weak](float value) { + auto clip = weak.Upgrade(); + if (!clip) { + LOGE("set offsetY failed. clip is null."); + return; + } + clip->SetOffsetY(value); + clip->UpdateBoxForShadowAnimation(); + clip->MarkNeedRender(); + }; + map[PropertyAnimatableType::PROPERTY_BORDER_RADIUS] = [weak](float value) { + auto clip = weak.Upgrade(); + if (!clip) { + LOGE("set border radius failed. clip is null."); + return; + } + clip->topLeftRadius_ = Radius(value); + clip->topRightRadius_ = Radius(value); + clip->bottomLeftRadius_ = Radius(value); + clip->bottomRightRadius_ = Radius(value); + clip->MarkNeedRender(); + }; + return map; +}; + +FloatPropertyAnimatable::GetterMap RenderClip::GetFloatPropertyGetterMap() +{ + FloatPropertyAnimatable::GetterMap map; + auto weak = AceType::WeakClaim(this); + map[PropertyAnimatableType::PROPERTY_WIDTH] = [weak]() -> float { + auto clip = weak.Upgrade(); + if (!clip) { + LOGE("get width failed. clip is null."); + return 0.0; + } + return clip->width_; + }; + map[PropertyAnimatableType::PROPERTY_HEIGHT] = [weak]() -> float { + auto clip = weak.Upgrade(); + if (!clip) { + LOGE("get height failed. clip is null."); + return 0.0; + } + return clip->height_; + }; + map[PropertyAnimatableType::PROPERTY_OFFSET_X] = [weak]() -> float { + auto clip = weak.Upgrade(); + if (!clip) { + LOGE("get offsetX failed. clip is null."); + return 0.0; + } + return clip->offsetX_; + }; + map[PropertyAnimatableType::PROPERTY_OFFSET_Y] = [weak]() -> float { + auto clip = weak.Upgrade(); + if (!clip) { + LOGE("get offsetY failed. clip is null."); + return 0.0; + } + return clip->offsetY_; + }; + + map[PropertyAnimatableType::PROPERTY_BORDER_RADIUS] = [weak]() -> float { + auto clip = weak.Upgrade(); + if (!clip) { + LOGE("get borer radius failed. clip is null."); + return 0.0f; + } + return clip->topLeftRadius_.GetX().Value(); + }; + return map; +}; + +Rect RenderClip::GetClipRect(const Offset& offset) const +{ + double clipWidth = 0.0; + if (!NearZero(width_)) { + clipWidth = width_; + } else { + clipWidth = GetLayoutSize().Width(); + } + double clipHeight = 0.0; + if (!NearZero(height_)) { + clipHeight = height_; + } else { + clipHeight = GetLayoutSize().Height(); + } + return Rect(offset.GetX() + offsetX_, offset.GetY() + offsetY_, clipWidth, clipHeight); +} + +void RenderClip::UpdateBoxForShadowAnimation() +{ + if (!clipWithShadow_) { + return; + } + + // If clip if used for animation, then there will be exist display and transform. + auto renderTransform = AceType::DynamicCast(GetParent().Upgrade()); + if (!renderTransform) { + return; + } + auto renderDisplay = AceType::DynamicCast(renderTransform->GetParent().Upgrade()); + if (!renderDisplay) { + return; + } + // There must be box for shadow animation. + auto renderBox = DynamicCast(renderDisplay->GetParent().Upgrade()); + if (renderBox) { + renderBox->SetPaintSize(GetLayoutSize() - Size(offsetX_, offsetY_)); + renderBox->SetPosition(shadowBoxOffset_ + Offset(offsetX_, offsetY_)); + renderBox->MarkNeedRender(); + SetPosition(Offset(-offsetX_, -offsetY_)); + } +} + +void RenderClip::Dump() +{ + DumpLog::GetInstance().AddDesc(std::string("Clip HW: ").append(Size(width_, height_).ToString())); + DumpLog::GetInstance().AddDesc(std::string("Clip Offset: ").append(Offset(offsetX_, offsetY_).ToString())); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/clip/render_clip.h b/frameworks/core/components/clip/render_clip.h new file mode 100644 index 00000000..f6f5b996 --- /dev/null +++ b/frameworks/core/components/clip/render_clip.h @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CLIP_RENDER_CLIP_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CLIP_RENDER_CLIP_H + +#include "core/animation/property_animatable.h" +#include "core/components/common/properties/radius.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderClip : public RenderNode, public PropertyAnimatable { + DECLARE_ACE_TYPE(RenderClip, RenderNode, PropertyAnimatable); + +public: + static RefPtr Create(); + + void Update(const RefPtr& component) override; + + void PerformLayout() override; + + bool IsFollowChildSize() const + { + return followChildSize_; + } + + void SetOffsetX(double offsetX) + { + if (offsetX < 0.0) { + return; + } + offsetX_ = offsetX; + } + + void SetOffsetY(double offsetY) + { + if (offsetY < 0.0) { + return; + } + offsetY_ = offsetY; + } + + Rect GetClipRect(const Offset& offset) const; + + void SetWidth(double width) + { + if (width < 0.0) { + return; + } + width_ = width; + } + + void SetHeight(double height) + { + if (height < 0.0) { + return; + } + height_ = height; + } + + double GetHeight() const + { + return height_; + } + + void SetShadowBoxOffset(const Offset& shadowBoxOffset) + { + shadowBoxOffset_ = shadowBoxOffset; + } + + void Dump() override; + +protected: + double width_ = 0.0; + double height_ = 0.0; + double offsetX_ = 0.0; + double offsetY_ = 0.0; + + Radius topLeftRadius_; + Radius topRightRadius_; + Radius bottomLeftRadius_; + Radius bottomRightRadius_; + +private: + FloatPropertyAnimatable::SetterMap GetFloatPropertySetterMap() override; + FloatPropertyAnimatable::GetterMap GetFloatPropertyGetterMap() override; + void UpdateBoxForShadowAnimation(); + bool followChildSize_ = false; + bool clipWithShadow_ = false; + Offset shadowBoxOffset_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CLIP_RENDER_CLIP_H diff --git a/frameworks/core/components/clock/BUILD.gn b/frameworks/core/components/clock/BUILD.gn new file mode 100644 index 00000000..5bb6685c --- /dev/null +++ b/frameworks/core/components/clock/BUILD.gn @@ -0,0 +1,21 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("clock") { + sources = [ + "flutter_render_clock.cpp", + "render_clock.cpp", + ] +} diff --git a/frameworks/core/components/clock/clock_component.h b/frameworks/core/components/clock/clock_component.h new file mode 100644 index 00000000..b5dbeb29 --- /dev/null +++ b/frameworks/core/components/clock/clock_component.h @@ -0,0 +1,240 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CLOCK_CLOCK_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CLOCK_CLOCK_COMPONENT_H + +#include "core/components/clock/clock_element.h" +#include "core/components/clock/render_clock.h" + +namespace OHOS::Ace { + +class ClockComponent : public ComponentGroup { + DECLARE_ACE_TYPE(ClockComponent, ComponentGroup); + +public: + ClockComponent() = default; + ~ClockComponent() override = default; + + RefPtr CreateRenderNode() override + { + return RenderClock::Create(); + } + + RefPtr CreateElement() override + { + return AceType::MakeRefPtr(); + } + + void SetClockFaceSrc(const std::string& clockFaceSrc) + { + clockFaceSrc_ = clockFaceSrc; + } + + const std::string& GetClockFaceSrc() const + { + return clockFaceSrc_; + } + + void SetClockFaceNightSrc(const std::string& clockFaceNightSrc) + { + clockFaceNightSrc_ = clockFaceNightSrc; + } + + const std::string& GetClockFaceNightSrc() const + { + return clockFaceNightSrc_; + } + + void SetHourHandSrc(const std::string& hourHandSrc) + { + hourHandSrc_ = hourHandSrc; + } + + const std::string& GetHourHandSrc() const + { + return hourHandSrc_; + } + + void SetHourHandNightSrc(const std::string& hourHandNightSrc) + { + hourHandNightSrc_ = hourHandNightSrc; + } + + const std::string& GetHourHandNightSrc() const + { + return hourHandNightSrc_; + } + + void SetMinuteHandSrc(const std::string& minuteHandSrc) + { + minuteHandSrc_ = minuteHandSrc; + } + + const std::string& GetMinuteHandSrc() const + { + return minuteHandSrc_; + } + + void SetMinuteHandNightSrc(const std::string& minuteHandNightSrc) + { + minuteHandNightSrc_ = minuteHandNightSrc; + } + + const std::string& GetMinuteHandNightSrc() const + { + return minuteHandNightSrc_; + } + + void SetSecondHandSrc(const std::string& secondHandSrc) + { + secondHandSrc_ = secondHandSrc; + } + + const std::string& GetSecondHandSrc() const + { + return secondHandSrc_; + } + + void SetSecondHandNightSrc(const std::string& secondHandNightSrc) + { + secondHandNightSrc_ = secondHandNightSrc; + } + + const std::string& GetSecondHandNightSrc() const + { + return secondHandNightSrc_; + } + + void SetHoursWest(double hoursWest) + { + hoursWest_ = hoursWest; + } + + double GetHoursWest() const + { + return hoursWest_; + } + + void SetDigitColor(const Color& digitColor) + { + digitColor_ = digitColor; + } + + const Color& GetDigitColor() const + { + return digitColor_; + } + + void SetDigitColorNight(const Color& digitColorNight) + { + digitColorNight_ = digitColorNight; + } + + const Color& GetDigitColorNight() const + { + return digitColorNight_; + } + + void SetDefaultSize(const Dimension& defaultSize) + { + defaultSize_ = defaultSize; + } + + const Dimension& GetDefaultSize() const + { + return defaultSize_; + } + + void SetDigitSizeRatio(double digitSizeRatio) + { + digitSizeRatio_ = digitSizeRatio; + } + + double GetDigitSizeRatio() const + { + return digitSizeRatio_; + } + + void SetDigitRadiusRatio(double digitRadiusRatio) + { + digitRadiusRatio_ = digitRadiusRatio; + } + + double GetDigitRadiusRatio() const + { + return digitRadiusRatio_; + } + + const std::vector& GetFontFamilies() const + { + return fontFamilies_; + } + + void SetFontFamilies(const std::vector& fontFamilies) + { + fontFamilies_ = fontFamilies; + } + + bool GetShowDigit() const + { + return showDigit_; + } + + void SetShowDigit(bool showDigit) + { + showDigit_ = showDigit; + } + + void SetOnHourChangeEvent(const EventMarker& onHourChangeEvent) + { + onHourCallback_ = onHourChangeEvent; + } + + const EventMarker& GetOnHourChangeEvent() const + { + return onHourCallback_; + } + +private: + std::string clockFaceSrc_; + std::string hourHandSrc_; + std::string minuteHandSrc_; + std::string secondHandSrc_; + std::string clockFaceNightSrc_; + std::string hourHandNightSrc_; + std::string minuteHandNightSrc_; + std::string secondHandNightSrc_; + // hours west of Greenwich, for e.g., [hoursWest] is [-8] in GMT+8. + // Valid range of [hoursWest] is [-12, 14]. Set default value to DBL_MAX to use current time zone by default. + double hoursWest_ = DBL_MAX; + Color digitColor_; + Color digitColorNight_; + Dimension defaultSize_; + // ratio of digit-radius and half of side length of clock-face-image. + // digit-radius is used to calculate digit offset. + // e.g., when size of clock-face-image is 200 x 200, digit "3" is [200 / 2 x 0.7 = 70] right of the center. + double digitRadiusRatio_ = 0.7; + // ratio of digit-size and side length of clock-face-image, which is used to decide font-size of digit. + // e.g., when size of clock-face-image is 200 x 200, font-size of digit is 200 x 0.08 = 16 + double digitSizeRatio_ = 0.08; + std::vector fontFamilies_; + bool showDigit_ = true; + EventMarker onHourCallback_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CLOCK_CLOCK_COMPONENT_H diff --git a/frameworks/core/components/clock/clock_element.h b/frameworks/core/components/clock/clock_element.h new file mode 100644 index 00000000..c2d6972c --- /dev/null +++ b/frameworks/core/components/clock/clock_element.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CLOCK_CLOCK_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CLOCK_CLOCK_ELEMENT_H + +#include "core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +class ClockElement : public RenderElement { + DECLARE_ACE_TYPE(ClockElement, RenderElement); + +public: + ClockElement() = default; + ~ClockElement() override = default; +}; +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CLOCK_CLOCK_ELEMENT_H diff --git a/frameworks/core/components/clock/clock_theme.h b/frameworks/core/components/clock/clock_theme.h new file mode 100644 index 00000000..d323d19d --- /dev/null +++ b/frameworks/core/components/clock/clock_theme.h @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CLOCK_CLOCK_THEME_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CLOCK_CLOCK_THEME_H + +#include "base/resource/internal_resource.h" +#include "core/components/common/properties/color.h" +#include "core/components/theme/theme.h" +#include "core/components/theme/theme_constants.h" + +namespace OHOS::Ace { + +/** + * ClockTheme defines styles of ClockComponent. ClockTheme should be built + * using ClockTheme::Builder. + */ +class ClockTheme : public virtual Theme { + DECLARE_ACE_TYPE(ClockTheme, Theme); + +public: + class Builder { + public: + Builder() = default; + ~Builder() = default; + + RefPtr Build(const RefPtr& themeConstants) const + { + RefPtr theme = AceType::Claim(new ClockTheme()); + if (!themeConstants) { + return theme; + } + theme = AceType::Claim(new ClockTheme()); + theme->defaultSize_ = themeConstants->GetDimension(THEME_CLOCK_DEFAULT_SIZE); + return theme; + + } + }; + + ~ClockTheme() override = default; + + const Dimension& GetDefaultSize() const + { + return defaultSize_; + } + +protected: + ClockTheme() = default; + +private: + Dimension defaultSize_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CLOCK_CLOCK_THEME_H diff --git a/frameworks/core/components/clock/flutter_render_clock.cpp b/frameworks/core/components/clock/flutter_render_clock.cpp new file mode 100644 index 00000000..fc94d182 --- /dev/null +++ b/frameworks/core/components/clock/flutter_render_clock.cpp @@ -0,0 +1,175 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/clock/flutter_render_clock.h" + +#include "flutter/common/task_runners.h" +#include "third_party/skia/include/core/SkCanvas.h" +#include "third_party/skia/include/core/SkColor.h" +#include "third_party/skia/include/core/SkMaskFilter.h" + +#include "base/json/json_util.h" +#include "core/components/text/text_component.h" +#include "core/pipeline/base/constants.h" +#include "core/pipeline/base/flutter_render_context.h" +#include "core/pipeline/base/scoped_canvas_state.h" + +namespace OHOS::Ace { +namespace { + +constexpr double HOUR_ANGLE_UNIT = 360.0 / 12; +constexpr double MINUTE_ANGLE_UNIT = 360.0 / 60; +constexpr double SECOND_ANGLE_UNIT = 360.0 / 60; +constexpr int32_t INTERVAL_OF_USECOND = 1000000; +constexpr int32_t HALF_SECOND = 500; // time unit is millisecond +constexpr int32_t MICROSECONDS_OF_MILLISECOND = 1000; +constexpr int32_t MILLISECONDS_OF_SECOND = 1000; + +} // namespace + +RefPtr RenderClock::Create() +{ + return AceType::MakeRefPtr(); +} + +RefPtr RenderClockHand::Create() +{ + return AceType::MakeRefPtr(); +} + +void FlutterRenderClock::Paint(RenderContext& context, const Offset& offset) +{ + auto renderOffset = paintOffset_ + offset; + + // paint clock face and digit + context.PaintChild(renderClockFace_, renderOffset); + Offset rotateCenter = renderOffset + Offset(drawSize_.Width() / 2.0, drawSize_.Height() / 2.0); + if (showDigit_) { + RenderDigit(context, rotateCenter); + } + + // paint clock hand + context.PaintChild(renderClockHand_, renderOffset); +} + +void FlutterRenderClock::RenderDigit(RenderContext& context, const Offset& center) +{ + if (radians_.size() == digitRenderNodes_.size()) { + double innerRadius = drawSize_.Width() * digitRadiusRatio_ / 2.0; + for (size_t i = 0; i < radians_.size(); i++) { + auto halfDigitWidth = digitRenderNodes_[i]->GetLayoutSize().Width() / 2.0; + auto halfDigitHeight = digitRenderNodes_[i]->GetLayoutSize().Height() / 2.0; + auto digitOffset = Offset(center.GetX() + sin(radians_[i]) * innerRadius - halfDigitWidth, + center.GetY() - cos(radians_[i]) * innerRadius - halfDigitHeight); + context.PaintChild(digitRenderNodes_[i], digitOffset); + } + return; + } + LOGE("Size of [radians] and [digitRenderNodes] does not match! Please check!"); +} + +void FlutterRenderClockHand::RenderHand(RenderContext& context, const Offset& offset, + const RefPtr& renderHand, const Offset& rotateCenter, double rotateAngle) +{ + auto canvas = ScopedCanvas::Create(context); + if (!canvas) { + LOGE("Paint canvas is null"); + return; + } + canvas->canvas()->rotate(rotateAngle, rotateCenter.GetX(), rotateCenter.GetY()); + context.PaintChild(renderHand, offset); +} + +void FlutterRenderClockHand::RequestRenderForNextSecond(long timeUsec, int32_t& second) +{ + // 1 second = 1000 millisecond = 1000000 microsecond. + // Millisecond is abbreviated as msec. Microsecond is abbreviated as usec. + // unit of [delayTime] is msec, unit of [tv_usec] is usec + // when [tv_usec] is 000100, (INTERVAL_OF_USECOND - timeUsec) / MICROSECONDS_OF_MILLISECOND = 999 msec + // which will cause the delay task still arriving in current second, because 999000 + 000100 = 999100 < 1 second + // so add an additional millisecond to modify the loss of precision during division + int delayTime = (INTERVAL_OF_USECOND - timeUsec) / MICROSECONDS_OF_MILLISECOND + 1; // millisecond + if (delayTime < HALF_SECOND) { + // if current time has passed half second of current second, use next second + delayTime += MILLISECONDS_OF_SECOND; + second += 1; + } + auto pipelineContext = GetContext().Upgrade(); + if (pipelineContext) { + pipelineContext->GetTaskExecutor()->PostDelayedTask( + [wp = WeakClaim(this)] { + auto renderClockHand = wp.Upgrade(); + if (renderClockHand) { + renderClockHand->MarkNeedRender(); + } + }, + TaskExecutor::TaskType::UI, delayTime); + } +} + +void FlutterRenderClockHand::Paint(RenderContext& context, const Offset& offset) +{ + auto timeOfNow = GetTimeOfNow(hoursWest_); + // case [10] means that time travels from light to dark, case [01] means that time travels from dark to light + uint8_t dayNightStatus = (static_cast(isDay_) << 1) | static_cast(IsDayTime(timeOfNow)); + switch (dayNightStatus) { + case 0b10: + dayToNightCallback_(); + return; + case 0b01: + nightToDayCallback_(); + return; + default: + break; + } + + auto minute = static_cast(timeOfNow.minute_); + if (curMinute_ != minute) { + curMinute_ = minute; + accessibilityTimeCallback_(timeOfNow.hour24_, timeOfNow.minute_); + } + + auto pipelineContext = context_.Upgrade(); + if (pipelineContext && (pipelineContext->IsJsCard()) && onHourCallback_) { + auto hour = static_cast(timeOfNow.hour24_); + if (curHour_ != hour) { + curHour_ = hour; + auto json = JsonUtil::Create(true); + json->Put("hour", curHour_); + onHourCallback_(json->ToString()); + } + } + + if (GetHidden() || !GetVisible() || !isAppOnShow_) { + return; + } + + RequestRenderForNextSecond(timeOfNow.timeUsec_, timeOfNow.second_); + auto clockSize = GetLayoutSize(); + auto handOffset = offset + Offset((clockSize.Width() - renderHourHand_->GetLayoutSize().Width()) / 2.0, 0.0); + Offset rotateCenter = offset + Offset(clockSize.Width() / 2.0, clockSize.Height() / 2.0); + + RenderHand(context, handOffset, renderMinuteHand_, rotateCenter, timeOfNow.minute_ * MINUTE_ANGLE_UNIT); + RenderHand(context, handOffset, renderHourHand_, rotateCenter, timeOfNow.hour12_ * HOUR_ANGLE_UNIT); + RenderHand(context, handOffset, renderSecondHand_, rotateCenter, timeOfNow.second_ * SECOND_ANGLE_UNIT); +} + +void FlutterRenderClockHand::OnAppShow() +{ + RenderNode::OnAppShow(); + MarkNeedRender(); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/clock/flutter_render_clock.h b/frameworks/core/components/clock/flutter_render_clock.h new file mode 100644 index 00000000..dfa558df --- /dev/null +++ b/frameworks/core/components/clock/flutter_render_clock.h @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CLOCK_FLUTTER_RENDER_CLOCK_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CLOCK_FLUTTER_RENDER_CLOCK_H + +#include "flutter/fml/memory/ref_counted.h" +#include "flutter/lib/ui/painting/image.h" + +#include "core/components/clock/render_clock.h" +#include "core/pipeline/layers/offset_layer.h" + +namespace OHOS::Ace { + +class FlutterRenderClock final : public RenderClock { + DECLARE_ACE_TYPE(FlutterRenderClock, RenderClock); + +public: + FlutterRenderClock() = default; + ~FlutterRenderClock() override = default; + + void Paint(RenderContext& context, const Offset& offset) override; + void PaintShadowLight(RenderContext& context, const Offset& renderOffset, double faceRadius); + void RenderDigit(RenderContext& context, const Offset& center); +}; + +class FlutterRenderClockHand : public RenderClockHand { + DECLARE_ACE_TYPE(FlutterRenderClockHand, RenderClockHand); + +public: + FlutterRenderClockHand() = default; + ~FlutterRenderClockHand() override = default; + + void Paint(RenderContext& context, const Offset& offset) override; + void RequestRenderForNextSecond(long timeUsec, int32_t& second); + void RenderHand(RenderContext& context, const Offset& offset, const RefPtr& renderHand, + const Offset& rotateCenter, double rotateAngle); + + bool IsRepaintBoundary() const override + { + return true; + } + + RenderLayer GetRenderLayer() override + { + if (IsRepaintBoundary()) { + if (!layer_) { + layer_ = AceType::MakeRefPtr(); + } + } else { + layer_ = nullptr; + } + return AceType::RawPtr(layer_); + } + +protected: + void OnAppShow() override; + +private: + RefPtr layer_; + int32_t curMinute_ = -1; + int32_t curHour_ = -1; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CLOCK_FLUTTER_RENDER_CLOCK_H diff --git a/frameworks/core/components/clock/render_clock.cpp b/frameworks/core/components/clock/render_clock.cpp new file mode 100644 index 00000000..54075ce9 --- /dev/null +++ b/frameworks/core/components/clock/render_clock.cpp @@ -0,0 +1,282 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/clock/render_clock.h" + +#include + +#include "base/i18n/localization.h" +#include "core/components/clock/clock_component.h" +#include "core/components/image/image_component.h" +#include "core/event/ace_event_helper.h" + +namespace OHOS::Ace { +namespace { + +constexpr double HOUR_HAND_RATIO = 0.062; // [width-of-clock-hand-image] / [width-of-clock-face-image] +constexpr double RADIAN_FOR_ONE_HOUR = 30 * 3.1415926 / 180.0; +constexpr double DIGIT_SIZE_RATIO_UPPER_BOUND = 1.0 / 7.0; +constexpr double DIGIT_RADIUS_RATIO_UPPER_BOUND = 1.0; +constexpr double EPSILON = 0.000001; +constexpr int32_t TOTAL_HOURS_OF_ANALOG_CLOCK = 12; + +} // namespace + +RenderClock::RenderClock() +{ + for (int32_t i = 1; i <= TOTAL_HOURS_OF_ANALOG_CLOCK; i++) { + auto digitStr = Localization::GetInstance()->NumberFormat(i); + digits_.emplace_back(digitStr); + auto renderDigit = AceType::DynamicCast(RenderText::Create()); + AddChild(renderDigit); + digitRenderNodes_.emplace_back(renderDigit); + radians_.emplace_back(i * RADIAN_FOR_ONE_HOUR); + } + + renderClockFace_ = AceType::DynamicCast(RenderImage::Create()); + AddChild(renderClockFace_); + + renderClockHand_ = AceType::DynamicCast(RenderClockHand::Create()); + renderClockHand_->SetDayToNightCallback([wp = WeakClaim(this)]() { + auto renderClock = wp.Upgrade(); + if (renderClock) { + renderClock->UseNightConfig(); + renderClock->MarkNeedLayout(); + } + }); + renderClockHand_->SetNightToDayCallback([wp = WeakClaim(this)]() { + auto renderClock = wp.Upgrade(); + if (renderClock) { + renderClock->UseDayConfig(); + renderClock->MarkNeedLayout(); + } + }); + renderClockHand_->SetAccessibilityTimeCallback([wp = WeakClaim(this)](double hour, double minute) { + auto renderClock = wp.Upgrade(); + if (renderClock) { + renderClock->UpdateAccessibilityInfo(hour, minute); + } + }); + renderHourHand_ = AceType::DynamicCast(RenderImage::Create()); + renderMinuteHand_ = AceType::DynamicCast(RenderImage::Create()); + renderSecondHand_ = AceType::DynamicCast(RenderImage::Create()); + AddChild(renderClockHand_); +} + +void RenderClock::Update(const RefPtr& component) +{ + RefPtr clock = AceType::DynamicCast(component); + if (clock) { + hoursWest_ = clock->GetHoursWest(); + defaultSize_ = clock->GetDefaultSize(); + auto inputDigitSizeRatio = clock->GetDigitSizeRatio(); + digitSizeRatio_ = InRegion(EPSILON, DIGIT_SIZE_RATIO_UPPER_BOUND, inputDigitSizeRatio) ? inputDigitSizeRatio + : digitSizeRatio_; + auto inputDigitRadiusRatio = clock->GetDigitRadiusRatio(); + digitRadiusRatio_ = InRegion(EPSILON, DIGIT_RADIUS_RATIO_UPPER_BOUND, inputDigitRadiusRatio) + ? inputDigitRadiusRatio + : digitRadiusRatio_; + fontFamilies_ = clock->GetFontFamilies(); + showDigit_ = clock->GetShowDigit(); + + // update attributes and styles for day mode + clockFaceSrc_ = clock->GetClockFaceSrc(); + hourHandSrc_ = clock->GetHourHandSrc(); + minuteHandSrc_ = clock->GetMinuteHandSrc(); + secondHandSrc_ = clock->GetSecondHandSrc(); + digitColor_ = clock->GetDigitColor(); + + // update attributes and styles for night mode + clockFaceNightSrc_ = clock->GetClockFaceNightSrc(); + hourHandNightSrc_ = clock->GetHourHandNightSrc(); + minuteHandNightSrc_ = clock->GetMinuteHandNightSrc(); + secondHandNightSrc_ = clock->GetSecondHandNightSrc(); + digitColorNight_ = clock->GetDigitColorNight(); + + CheckNightConfig(); + + auto timeOfNow = GetTimeOfNow(hoursWest_); + IsDayTime(timeOfNow) ? UseDayConfig() : UseNightConfig(); + + renderClockHand_->SetHoursWest(hoursWest_); + renderClockHand_->Attach(GetContext()); + renderClockHand_->SetOnHourCallback( + AceAsyncEvent::Create(clock->GetOnHourChangeEvent(), context_)); + } + MarkNeedLayout(); +} + +void RenderClock::UseDayConfig() +{ + UpdateRenderImage(renderClockFace_, clockFaceSrc_); + + UpdateRenderImage(renderHourHand_, hourHandSrc_); + renderClockHand_->SetHourHand(renderHourHand_); + UpdateRenderImage(renderMinuteHand_, minuteHandSrc_); + renderClockHand_->SetMinuteHand(renderMinuteHand_); + UpdateRenderImage(renderSecondHand_, secondHandSrc_); + renderClockHand_->SetSecondHand(renderSecondHand_); + renderClockHand_->SetIsDay(true); +} + +void RenderClock::UseNightConfig() +{ + UpdateRenderImage(renderClockFace_, clockFaceNightSrc_); + + UpdateRenderImage(renderHourHand_, hourHandNightSrc_); + renderClockHand_->SetHourHand(renderHourHand_); + UpdateRenderImage(renderMinuteHand_, minuteHandNightSrc_); + renderClockHand_->SetMinuteHand(renderMinuteHand_); + UpdateRenderImage(renderSecondHand_, secondHandNightSrc_); + renderClockHand_->SetSecondHand(renderSecondHand_); + renderClockHand_->SetIsDay(false); +} + +void RenderClock::CheckNightConfig() +{ + UseDaySourceIfEmpty(clockFaceNightSrc_, clockFaceSrc_); + UseDaySourceIfEmpty(hourHandNightSrc_, hourHandSrc_); + UseDaySourceIfEmpty(minuteHandNightSrc_, minuteHandSrc_); + UseDaySourceIfEmpty(secondHandNightSrc_, secondHandSrc_); + if (digitColorNight_ == Color::TRANSPARENT) { + digitColorNight_ = digitColor_; + } +} + +void RenderClock::UseDaySourceIfEmpty(std::string& nightSource, const std::string& daySource) +{ + if (nightSource.empty()) { + nightSource = daySource; + } +} + +void RenderClock::UpdateAccessibilityInfo(double hour, double minute) +{ + auto node = GetAccessibilityNode().Upgrade(); + if (!node) { + return; + } + std::string content = std::to_string(static_cast(hour)) + .append(":") + .append(std::to_string(static_cast(minute))); + node->SetText(content); + + auto context = context_.Upgrade(); + if (context) { + AccessibilityEvent accessibilityEvent; + accessibilityEvent.nodeId = node->GetNodeId(); + accessibilityEvent.eventType = "textchange"; + context->SendEventToAccessibility(accessibilityEvent); + } +} + +void RenderClock::UpdateRenderText(double digitSize, const Color& digitColor) +{ + if (digits_.size() == digitRenderNodes_.size()) { + RefPtr textComponent = AceType::MakeRefPtr(""); + TextStyle textStyle; + textStyle.SetAllowScale(false); + textStyle.SetTextColor(digitColor); + textStyle.SetFontSize(Dimension(digitSize)); + textStyle.SetFontFamilies(fontFamilies_); + textComponent->SetTextStyle(textStyle); + textComponent->SetFocusColor(digitColor); + + for (size_t i = 0; i < digitRenderNodes_.size(); i++) { + textComponent->SetData(digits_[i]); + digitRenderNodes_[i]->Attach(GetContext()); + digitRenderNodes_[i]->Update(textComponent); + } + return; + } + LOGE("Size of [digits] and [digitRenderNodes] does not match! Please check!"); +} + +void RenderClock::UpdateRenderImage(RefPtr& renderImage, const std::string& imageSrc) +{ + RefPtr imageComponent = AceType::MakeRefPtr(imageSrc); + renderImage->Attach(GetContext()); + renderImage->Update(imageComponent); +} + +void RenderClock::PerformLayout() +{ + defaultSize_ = Dimension(NormalizeToPx(defaultSize_), DimensionUnit::PX); + CalculateLayoutSize(); + SetLayoutSize(GetLayoutParam().Constrain(drawSize_)); + LayoutClockImage(renderClockFace_, drawSize_); + auto textColor = renderClockHand_->GetIsDay() ? digitColor_ : digitColorNight_; + if (showDigit_) { + LayoutParam textLayoutParam = GetLayoutParam(); + textLayoutParam.SetMinSize(Size()); + UpdateRenderText(drawSize_.Width() * digitSizeRatio_, textColor); + for (const auto& renderDigit : digitRenderNodes_) { + renderDigit->Layout(textLayoutParam); + } + } + + LayoutParam layoutParam = GetLayoutParam(); + layoutParam.SetMaxSize(drawSize_); + renderClockHand_->Layout(layoutParam); + + paintOffset_ = Alignment::GetAlignPosition(GetLayoutSize(), drawSize_, Alignment::CENTER); +} + +void RenderClock::CalculateLayoutSize() +{ + auto maxSize = GetLayoutParam().GetMaxSize(); + if (!maxSize.IsValid()) { + LOGE("LayoutParam invalid!"); + return; + } + uint8_t infiniteStatus = + (static_cast(maxSize.IsWidthInfinite()) << 1) | static_cast(maxSize.IsHeightInfinite()); + drawSize_ = maxSize; + switch (infiniteStatus) { + case 0b00: // both width and height are valid + break; + case 0b01: // width is valid but height is infinite + drawSize_.SetHeight(defaultSize_.Value()); + break; + case 0b10: // height is valid but width is infinite + drawSize_.SetWidth(defaultSize_.Value()); + break; + case 0b11: // both width and height are infinite + default: + drawSize_ = Size(defaultSize_.Value(), defaultSize_.Value()); + break; + } + double shorterEdge = std::min(drawSize_.Width(), drawSize_.Height()); + drawSize_ = Size(shorterEdge, shorterEdge); +} + +void RenderClock::LayoutClockImage(const RefPtr& renderImage, const Size& imageComponentSize) +{ + LayoutParam imageLayoutParam; + imageLayoutParam.SetFixedSize(imageComponentSize); + renderImage->SetImageComponentSize(imageComponentSize); + renderImage->Layout(imageLayoutParam); +} + +void RenderClockHand::PerformLayout() +{ + SetLayoutSize(GetLayoutParam().GetMaxSize()); + auto clockSize = GetLayoutSize(); + RenderClock::LayoutClockImage(renderHourHand_, Size(clockSize.Width() * HOUR_HAND_RATIO, clockSize.Height())); + RenderClock::LayoutClockImage(renderMinuteHand_, Size(clockSize.Width() * HOUR_HAND_RATIO, clockSize.Height())); + RenderClock::LayoutClockImage(renderSecondHand_, Size(clockSize.Width() * HOUR_HAND_RATIO, clockSize.Height())); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/clock/render_clock.h b/frameworks/core/components/clock/render_clock.h new file mode 100644 index 00000000..7a2b4951 --- /dev/null +++ b/frameworks/core/components/clock/render_clock.h @@ -0,0 +1,159 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CLOCK_RENDER_CLOCK_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CLOCK_RENDER_CLOCK_H + +#include "base/utils/time_util.h" +#include "core/components/image/render_image.h" +#include "core/components/text/render_text.h" +#include "core/components/text/text_component.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +using DayToNightCallback = std::function; +using NightToDayCallback = std::function; +using OnHourCallback = std::function; +using AccessibilityTimeCallback = std::function; + +class RenderClockHand : public RenderNode { + DECLARE_ACE_TYPE(RenderClockHand, RenderNode); + +public: + static RefPtr Create(); + void Update(const RefPtr& component) override {} + void PerformLayout() override; + void SetHourHand(const RefPtr& renderHourHand) + { + renderHourHand_ = renderHourHand; + AddChild(renderHourHand_); + } + void SetMinuteHand(const RefPtr& renderMinuteHand) + { + renderMinuteHand_ = renderMinuteHand; + AddChild(renderMinuteHand_); + } + void SetSecondHand(const RefPtr& renderSecondHand) + { + renderSecondHand_ = renderSecondHand; + AddChild(renderSecondHand_); + } + void SetHoursWest(double hoursWest) + { + hoursWest_ = hoursWest; + } + void SetDayToNightCallback(const DayToNightCallback& dayToNightCallback) + { + dayToNightCallback_ = dayToNightCallback; + } + void SetNightToDayCallback(const NightToDayCallback& nightToDayCallback) + { + nightToDayCallback_ = nightToDayCallback; + } + void SetOnHourCallback(const OnHourCallback& hourCallback) + { + onHourCallback_ = hourCallback; + } + void SetAccessibilityTimeCallback(const AccessibilityTimeCallback& accessibilityTimeCallback) + { + accessibilityTimeCallback_ = accessibilityTimeCallback; + } + void SetIsDay(bool isLight) + { + isDay_ = isLight; + } + bool GetIsDay() const + { + return isDay_; + } + +protected: + RefPtr renderHourHand_; + RefPtr renderMinuteHand_; + RefPtr renderSecondHand_; + // hours west of Greenwich, for e.g., [hoursWest] is [-8] in UTC+8. + // Valid range of [hoursWest] is [-14, 12]. Set default value to DBL_MAX to use current time zone by default. + double hoursWest_ = DBL_MAX; + DayToNightCallback dayToNightCallback_; + NightToDayCallback nightToDayCallback_; + OnHourCallback onHourCallback_; + AccessibilityTimeCallback accessibilityTimeCallback_; + bool isDay_ = true; +}; + +class RenderClock : public RenderNode { + DECLARE_ACE_TYPE(RenderClock, RenderNode); + +public: + ~RenderClock() override = default; + + static RefPtr Create(); + void Update(const RefPtr& component) override; + void PerformLayout() override; + void CalculateLayoutSize(); + void UpdateAccessibilityInfo(double hour, double minute); + void UpdateRenderText(double digitSize, const Color& digitColor); + void UpdateRenderImage(RefPtr& renderImage, const std::string& imageSrc); + static void LayoutClockImage(const RefPtr& renderImage, const Size& imageComponentSize); + void UseNightConfig(); + void UseDayConfig(); + void CheckNightConfig(); + void UseDaySourceIfEmpty(std::string& nightSource, const std::string& daySource); + +protected: + RenderClock(); + + // hours west of Greenwich, for e.g., [hoursWest] is [-8] in UTC+8. + // Valid range of [hoursWest] is [-14, 12]. Set default value to DBL_MAX to use current time zone by default. + double hoursWest_ = DBL_MAX; + std::vector fontFamilies_; + + std::string clockFaceSrc_; + std::string hourHandSrc_; + std::string minuteHandSrc_; + std::string secondHandSrc_; + Color digitColor_; + + std::string clockFaceNightSrc_; + std::string hourHandNightSrc_; + std::string minuteHandNightSrc_; + std::string secondHandNightSrc_; + Color digitColorNight_ = Color::TRANSPARENT; + + RefPtr renderClockHand_; + RefPtr renderClockFace_; + RefPtr renderHourHand_; + RefPtr renderMinuteHand_; + RefPtr renderSecondHand_; + std::vector> digitRenderNodes_; + std::vector digits_; + std::vector radians_; + Offset paintOffset_; + Dimension defaultSize_; + // ratio of digit-radius and half of side length of clock-face-image. + // digit-radius is used to calculate digit offset. + // e.g., when size of clock-face-image is 200 x 200, digit "3" is [200 / 2 x 0.7 = 70] right of the center. + double digitRadiusRatio_ = 0.7; + // ratio of digit-size and side length of clock-face-image, which is used to decide font-size of digit. + // e.g., when size of clock-face-image is 200 x 200, font-size of digit is 200 x 0.08 = 16 + double digitSizeRatio_ = 0.08; + Size drawSize_; + bool showDigit_ = true; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CLOCK_RENDER_CLOCK_H diff --git a/frameworks/core/components/column_split/BUILD.gn b/frameworks/core/components/column_split/BUILD.gn new file mode 100644 index 00000000..8cb899fc --- /dev/null +++ b/frameworks/core/components/column_split/BUILD.gn @@ -0,0 +1,23 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("column_split") { + sources = [ + "column_split_component.cpp", + "column_split_element.cpp", + "flutter_render_column_split.cpp", + "render_column_split.cpp", + ] +} diff --git a/frameworks/core/components/column_split/column_split_component.cpp b/frameworks/core/components/column_split/column_split_component.cpp new file mode 100644 index 00000000..d80793e9 --- /dev/null +++ b/frameworks/core/components/column_split/column_split_component.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/column_split/column_split_component.h" + +#include "core/components/column_split/column_split_element.h" +#include "core/components/column_split/render_column_split.h" + +namespace OHOS::Ace { + +RefPtr ColumnSplitComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +RefPtr ColumnSplitComponent::CreateRenderNode() +{ + return RenderColumnSplit::Create(); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/column_split/column_split_component.h b/frameworks/core/components/column_split/column_split_component.h new file mode 100644 index 00000000..e0befb26 --- /dev/null +++ b/frameworks/core/components/column_split/column_split_component.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_COLUMN_SPLIT_COLUMN_SPLIT_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_COLUMN_SPLIT_COLUMN_SPLIT_COMPONENT_H + +#include "base/memory/ace_type.h" +#include "core/pipeline/base/component.h" +#include "core/pipeline/base/component_group.h" + +namespace OHOS::Ace { + +class ACE_EXPORT ColumnSplitComponent : public ComponentGroup { + DECLARE_ACE_TYPE(ColumnSplitComponent, ComponentGroup) + +public: + explicit ColumnSplitComponent(const std::list>& children) : ComponentGroup(children) {}; + ~ColumnSplitComponent() override = default; + + RefPtr CreateElement() override; + RefPtr CreateRenderNode() override; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_COLUMN_SPLIT_COLUMN_SPLIT_COMPONENT_H \ No newline at end of file diff --git a/frameworks/core/components/column_split/column_split_element.cpp b/frameworks/core/components/column_split/column_split_element.cpp new file mode 100644 index 00000000..7af199f7 --- /dev/null +++ b/frameworks/core/components/column_split/column_split_element.cpp @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/column_split/column_split_element.h" + +#include "core/pipeline/base/component_group.h" + +namespace OHOS::Ace { + +void ColumnSplitElement::Update() +{ + RenderElement::Update(); +} + +void ColumnSplitElement::PerformBuild() +{ + ComponentGroupElement::PerformBuild(); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/column_split/column_split_element.h b/frameworks/core/components/column_split/column_split_element.h new file mode 100644 index 00000000..9756efd2 --- /dev/null +++ b/frameworks/core/components/column_split/column_split_element.h @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_COLUMN_SPLIT_COLUMN_SPLIT_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_COLUMN_SPLIT_COLUMN_SPLIT_ELEMENT_H + +#include "core/pipeline/base/component_group_element.h" + +namespace OHOS::Ace { + +class ColumnSplitElement : public ComponentGroupElement { + DECLARE_ACE_TYPE(ColumnSplitElement, ComponentGroupElement) + +public: + void Update() override; + void PerformBuild() override; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_COLUMN_SPLIT_COLUMN_SPLIT_ELEMENT_H \ No newline at end of file diff --git a/frameworks/core/components/column_split/flutter_render_column_split.cpp b/frameworks/core/components/column_split/flutter_render_column_split.cpp new file mode 100644 index 00000000..9a73141b --- /dev/null +++ b/frameworks/core/components/column_split/flutter_render_column_split.cpp @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/column_split/flutter_render_column_split.h" + +#include "flutter/lib/ui/painting/paint.h" + +#include "core/pipeline/base/constants.h" +#include "core/pipeline/base/flutter_render_context.h" +#include "core/pipeline/base/scoped_canvas_state.h" + +namespace OHOS::Ace { + +namespace { + +constexpr uint32_t COLUMN_SPLIT_COLOR = 0xFF707B7C; + +} // namespace + +void FlutterRenderColumnSplit::Paint(RenderContext& context, const Offset& offset) +{ + auto children = GetChildren(); + double divderWidth = GetPaintRect().Width(); + for (const auto& item : children) { + if (!item->GetVisible()) { + continue; + } + context.PaintChild(item, offset); + PaintDivider(context, item->GetPosition(), divderWidth); + } +} + +void FlutterRenderColumnSplit::PaintDivider(RenderContext& context, const Offset& offset, double width) +{ + double startPointX = offset.GetX(); + double startPointY = offset.GetY(); + double endPointX = startPointX + width; + double endPointY = startPointY; + flutter::Paint paint; + flutter::PaintData paintData; + auto canvas = ScopedCanvas::Create(context); + if (!canvas) { + LOGE("Paint canvas is null"); + return; + } + paint.paint()->setColor(COLUMN_SPLIT_COLOR); + paint.paint()->setStrokeWidth(DEFAULT_SPLIT_HEIGHT); + canvas->drawLine(startPointX, startPointY, endPointX, endPointY, paint, paintData); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/column_split/flutter_render_column_split.h b/frameworks/core/components/column_split/flutter_render_column_split.h new file mode 100644 index 00000000..f9c7aa20 --- /dev/null +++ b/frameworks/core/components/column_split/flutter_render_column_split.h @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_COLUMN_SPLIT_FLUTTER_RENDER_COLUMN_SPLIT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_COLUMN_SPLIT_FLUTTER_RENDER_COLUMN_SPLIT_H + +#include "base/memory/ace_type.h" +#include "core/components/column_split/render_column_split.h" +#include "core/pipeline/layers/offset_layer.h" + +namespace OHOS::Ace { + +class FlutterRenderColumnSplit : public RenderColumnSplit { + DECLARE_ACE_TYPE(FlutterRenderColumnSplit, RenderColumnSplit); + +public: + FlutterRenderColumnSplit() = default; + ~FlutterRenderColumnSplit() override = default; + + void Paint(RenderContext& context, const Offset& offset) override; + +private: + void PaintDivider(RenderContext& context, const Offset& offset, double width); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_COLUMN_SPLIT_FLUTTER_RENDER_COLUMN_SPLIT_H \ No newline at end of file diff --git a/frameworks/core/components/column_split/render_column_split.cpp b/frameworks/core/components/column_split/render_column_split.cpp new file mode 100644 index 00000000..abc639b8 --- /dev/null +++ b/frameworks/core/components/column_split/render_column_split.cpp @@ -0,0 +1,140 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/column_split/render_column_split.h" + +#include "core/components/column_split/flutter_render_column_split.h" +#include "core/components/flex/render_flex.h" +#include "core/pipeline/base/position_layout_utils.h" + +namespace OHOS::Ace { + +namespace { + +constexpr double DEFAULT_SPLIT_RESPOND_WIDTH = 25.0; +constexpr size_t DEFAULT_DRAG_INDEX = -1; + +} // namespace + +RefPtr RenderColumnSplit::Create() +{ + return AceType::MakeRefPtr(); +} + +void RenderColumnSplit::Update(const RefPtr& component) +{ + InitializeRecognizer(); + MarkNeedLayout(); +} + +void RenderColumnSplit::PerformLayout() +{ + LayoutChildren(); + SetLayoutSize(GetLayoutParam().GetMaxSize()); +} + +void RenderColumnSplit::LayoutChildren() +{ + splitRects_.clear(); + if (dragSplitOffset_.size() == 0) { + dragSplitOffset_ = std::vector(GetChildren().size(), 0.0); + } + Size maxSize = GetLayoutParam().GetMaxSize(); + size_t index = 0; + double childOffsetY = 0.0; + for (const auto& item : GetChildren()) { + Offset offset = Offset(0, childOffsetY); + item->SetPosition(offset); + item->Layout(GetLayoutParam()); + childOffsetY += item->GetPaintRect().Height(); + if (dragSplitOffset_[index] > 0) { + childOffsetY += dragSplitOffset_[index]; + } + double posY = childOffsetY > DEFAULT_SPLIT_RESPOND_WIDTH ? (childOffsetY - DEFAULT_SPLIT_RESPOND_WIDTH) : 0.0; + splitRects_.push_back(Rect(0, posY, maxSize.Width(), 2 * DEFAULT_SPLIT_RESPOND_WIDTH + DEFAULT_SPLIT_HEIGHT)); + childOffsetY += DEFAULT_SPLIT_HEIGHT; + index++; + } +} + +void RenderColumnSplit::InitializeRecognizer() +{ + if (!dragDetector_) { + dragDetector_ = AceType::MakeRefPtr(); + dragDetector_->SetOnDragStart([weak = WeakClaim(this)](const DragStartInfo& startInfo) { + auto columnSplit = weak.Upgrade(); + if (columnSplit) { + columnSplit->HandleDragStart(startInfo.GetLocalLocation()); + } + }); + dragDetector_->SetOnDragUpdate([weakDrag = AceType::WeakClaim(this)](const DragUpdateInfo& info) { + auto columnSplit = weakDrag.Upgrade(); + if (columnSplit) { + columnSplit->HandleDragUpdate(info.GetLocalLocation()); + } + }); + dragDetector_->SetOnDragEnd([weakDrag = AceType::WeakClaim(this)](const DragEndInfo& info) { + auto columnSplit = weakDrag.Upgrade(); + if (columnSplit) { + columnSplit->HandleDragEnd(info.GetLocalLocation(), info.GetMainVelocity()); + } + }); + } +} + +void RenderColumnSplit::HandleDragStart(const Offset& startPoint) +{ + dragedSplitIndex_ = DEFAULT_DRAG_INDEX; + for (std::size_t i = 0; i < splitRects_.size(); i++) { + if (splitRects_[i].IsInRegion(Point(startPoint.GetX(), startPoint.GetY()))) { + dragedSplitIndex_ = i; + LOGD("dragedSplitIndex_ = %lu", dragedSplitIndex_); + break; + } + } + startY_ = startPoint.GetY(); +} + +void RenderColumnSplit::HandleDragUpdate(const Offset& currentPoint) +{ + if (dragedSplitIndex_ == DEFAULT_DRAG_INDEX) { + return; + } + dragSplitOffset_[dragedSplitIndex_] += currentPoint.GetY() - startY_; + startY_ = currentPoint.GetY(); + MarkNeedLayout(); +} + +void RenderColumnSplit::HandleDragEnd(const Offset& endPoint, double velocity) +{ + startY_ = 0.0; +} + +bool RenderColumnSplit::TouchTest(const Point& globalPoint, const Point& parentLocalPoint, + const TouchRestrict& touchRestrict, TouchTestResult& result) +{ + return RenderNode::TouchTest(globalPoint, parentLocalPoint, touchRestrict, result); +} + +void RenderColumnSplit::OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) +{ + if (dragDetector_) { + dragDetector_->SetCoordinateOffset(coordinateOffset); + result.emplace_back(dragDetector_); + } +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/column_split/render_column_split.h b/frameworks/core/components/column_split/render_column_split.h new file mode 100644 index 00000000..c4f85ba8 --- /dev/null +++ b/frameworks/core/components/column_split/render_column_split.h @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_COLUMN_SPLIT_RENDER_COLUMN_SPLIT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_COLUMN_SPLIT_RENDER_COLUMN_SPLIT_H + +#include "core/gestures/drag_recognizer.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderColumnSplit : public RenderNode { + DECLARE_ACE_TYPE(RenderColumnSplit, RenderNode); + +public: + static RefPtr Create(); + void Update(const RefPtr& component) override; + void PerformLayout() override; + void LayoutChildren(); + void InitializeRecognizer(); + void HandleDragStart(const Offset& startPoint); + void HandleDragUpdate(const Offset& currentPoint); + void HandleDragEnd(const Offset& endPoint, double velocity); + bool TouchTest(const Point& globalPoint, const Point& parentLocalPoint, const TouchRestrict& touchRestrict, + TouchTestResult& result) override; + +protected: + void OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) override; + +private: + RefPtr dragDetector_; + Point localPoint_; + double startY_ = 0.0; + std::vector splitRects_; + std::vector dragSplitOffset_; + std::size_t dragedSplitIndex_ = -1; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_COLUMN_SPLIT_RENDER_COLUMN_SPLIT_H \ No newline at end of file diff --git a/frameworks/core/components/common/BUILD.gn b/frameworks/core/components/common/BUILD.gn new file mode 100644 index 00000000..ea7be4da --- /dev/null +++ b/frameworks/core/components/common/BUILD.gn @@ -0,0 +1,45 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +# build core common sources +build_component("common") { + sources = [ + # painter + "painter/flutter_checkable_painter.cpp", + "painter/flutter_decoration_painter.cpp", + "painter/flutter_scroll_bar_painter.cpp", + "painter/flutter_scroll_fade_painter.cpp", + "painter/flutter_svg_painter.cpp", + "painter/flutter_universal_painter.cpp", + + # #properties + "properties/alignment.cpp", + "properties/border.cpp", + "properties/border_edge.cpp", + "properties/color.cpp", + "properties/color_factory.cpp", + "properties/decoration.cpp", + "properties/edge.cpp", + "properties/page_transition_option.cpp", + "properties/scroll_bar.cpp", + "properties/shadow_config.cpp", + "properties/text_style.cpp", + + # layout + "layout/grid_column_info.cpp", + "layout/grid_container_info.cpp", + "layout/grid_system_manager.cpp", + ] +} diff --git a/frameworks/core/components/common/layout/constants.h b/frameworks/core/components/common/layout/constants.h new file mode 100644 index 00000000..b41f979b --- /dev/null +++ b/frameworks/core/components/common/layout/constants.h @@ -0,0 +1,356 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_LAYOUT_CONSTANTS_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_LAYOUT_CONSTANTS_H + +#include + +namespace OHOS::Ace { + +enum class LineCap { + BUTT, + ROUND, + SQUARE, +}; + +enum class ButtonType { + NORMAL, + CAPSULE, + CIRCLE, + TEXT, + ARC, + DOWNLOAD, + ICON, +}; + +// Flex Styles +enum class FlexDirection { + ROW = 0, + COLUMN, + ROW_REVERSE, + COLUMN_REVERSE, +}; + +enum class FlexAlign { + AUTO, + + // align to the start of the axis, can be both used in MainAxisAlign and CrossAxisAlign. + FLEX_START, + + // align to the center of the axis, can be both used in MainAxisAlign and CrossAxisAlign. + CENTER, + + // align to the end of the axis, can be both used in MainAxisAlign and CrossAxisAlign. + FLEX_END, + + // stretch the cross size, only used in CrossAxisAlign. + STRETCH, + + // adjust the cross position according to the textBaseline, only used in CrossAxisAlign. + BASELINE, + + // align the children on both ends, only used in MainAxisAlign. + SPACE_BETWEEN, + + // align the child with equivalent space, only used in MainAxisAlign. + SPACE_AROUND, + + // align the child with space evenly, only used in MainAxisAlign. + SPACE_EVENLY, +}; + +enum class MainAxisSize { + // default setting, fill the max size of the layout param. Only under MAX, mainAxisAlign and FlexItem are valid + MAX, + + // make the size of row/column as large as its children's size. + MIN, +}; + +enum class CrossAxisSize { + // fill the max size of the layout param in cross size of row/column. + MAX, + + // make the cross size of row/column as large as its children's size. + MIN, +}; + +enum class FlexLayoutMode { + // If children do not contains flex weight, use this mode. It is the default mode. + FLEX_ITEM_MODE, + + // If all the children contains flex weight, use this mode. + FLEX_WEIGHT_MODE, +}; + +// Box Style +enum class BoxFlex { + // width and height do not extend to box's parent + FLEX_NO, + + // width extends to box's parent, height does not extend to box's parent + FLEX_X, + + // height extends to box's parent, width does not extend to box's parent + FLEX_Y, + + // width and height extend to box's parent + FLEX_XY, +}; + +// Stack Styles +enum class StackFit { + // keep the child component's size as it is. + KEEP, + + // keep the child component's size as the parent's. + STRETCH, + + // use parent's layoutParam to layout the child + INHERIT, + + // use first child's size as layoutPram max size. + FIRST_CHILD, +}; + +enum class Overflow { + // when the size overflows, clip the exceeding. + CLIP, + + // when the size overflows, observe the exceeding. + OBSERVABLE, + + // when the size overflows, scroll the exceeding. + SCROLL, +}; + +enum class MainStackSize { + MAX, + MIN, + NORMAL, + LAST_CHILD, + MATCH_CHILDREN, +}; + +enum class PositionType { + RELATIVE = 0, + FIXED, + ABSOLUTE, +}; + +enum class TextAlign { + LEFT, + RIGHT, + CENTER, + /* + render the text to fit the size of the text container by adding space + */ + JUSTIFY, + /* + align the text from the start of the text container + + For Direction.ltr, from left side + For Direction.rtl, from right side + */ + START, + /* + align the text from the end of the text container + + For Direction.ltr, from right side + For Direction.rtl, from left side + */ + END, +}; + +enum class TextOverflow { + CLIP, + ELLIPSIS, + NONE, +}; + +enum class TextDirection { + LTR, + RTL, + INHERIT, +}; + +enum class TextDecoration { + NONE, + UNDERLINE, + OVERLINE, + LINE_THROUGH, + INHERIT, +}; + +enum class MarqueeDirection { + LEFT, + RIGHT, +}; + +enum class ImageRepeat { + REPEAT, + REPEATX, + REPEATY, + NOREPEAT, +}; + +enum class ImageFit { + FILL, + CONTAIN, + COVER, + FITWIDTH, + FITHEIGHT, + NONE, + SCALEDOWN, +}; + +enum class EdgeEffect { + SPRING = 0, + FADE, + NONE, +}; + +enum class BorderStyle { + SOLID, + DASHED, + DOTTED, + NONE, +}; + +enum class SrcType { + FILE = 0, + ASSET, + NETWORK, + MEMORY, + BASE64, + INTERNAL, + OTHER, +}; + +enum class WrapAlignment { + START, + CENTER, + END, + SPACE_AROUND, + SPACE_BETWEEN, + STRETCH, +}; + +enum class WrapDirection { + HORIZONTAL, + VERTICAL, +}; + +enum class KeyDirection { + UP = 0, + DOWN, + LEFT, + RIGHT, +}; + +const ImageRepeat IMAGE_REPEATS[] = { + ImageRepeat::REPEAT, + ImageRepeat::REPEATX, + ImageRepeat::REPEATY, + ImageRepeat::NOREPEAT, +}; + +const SrcType SRC_TYPES[] = { + SrcType::FILE, + SrcType::ASSET, + SrcType::NETWORK, + SrcType::MEMORY, + SrcType::OTHER, +}; + +enum class WindowModal : int32_t { + NORMAL = 0, + SEMI_MODAL = 1, + SEMI_MODAL_FULL_SCREEN = 2, + DIALOG_MODAL = 3, + FIRST_VALUE = NORMAL, + LAST_VALUE = DIALOG_MODAL, +}; + +enum class PanelType { + MINI_BAR, + FOLDABLE_BAR, + TEMP_DISPLAY, +}; + +enum class PanelMode { + MINI, + FULL, + HALF, +}; + +enum class ColorScheme : int32_t { + SCHEME_LIGHT = 0, + SCHEME_TRANSPARENT = 1, + SCHEME_DARK = 2, + FIRST_VALUE = SCHEME_LIGHT, + LAST_VALUE = SCHEME_DARK, +}; + +enum class RenderStatus : int32_t { + UNKNOWN = -1, + DEFAULT = 0, + ACTIVITY = 1, + FOCUS = 2, + BLUR = 3, + DISABLE = 4, + WAITING = 5, +}; + +enum class BadgePosition { + RIGHT_TOP, + RIGHT, + LEFT, +}; + +enum class QrcodeType { + RECT, + CIRCLE, +}; + +enum class AnimationCurve { + FRICTION, + STANDARD, +}; + +enum class WindowBlurStyle { + STYLE_BACKGROUND_SMALL_LIGHT = 100, + STYLE_BACKGROUND_MEDIUM_LIGHT = 101, + STYLE_BACKGROUND_LARGE_LIGHT = 102, + STYLE_BACKGROUND_XLARGE_LIGHT = 103, + STYLE_BACKGROUND_SMALL_DARK = 104, + STYLE_BACKGROUND_MEDIUM_DARK = 105, + STYLE_BACKGROUND_LARGE_DARK = 106, + STYLE_BACKGROUND_XLARGE_DARK = 107, +}; + +inline constexpr uint32_t STATE_NORMAL = 0; +inline constexpr uint32_t STATE_PRESSED = 1; +inline constexpr uint32_t STATE_FOCUS = 1 << 1; +inline constexpr uint32_t STATE_CHECKED = 1 << 2; +inline constexpr uint32_t STATE_DISABLED = 1 << 3; +inline constexpr uint32_t STATE_WAITING = 1 << 4; +inline constexpr uint32_t STATE_HOVERED = 1 << 5; +inline constexpr uint32_t STATE_ACTIVE = 1 << 6; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_LAYOUT_CONSTANTS_H diff --git a/frameworks/core/components/common/layout/grid_column_info.cpp b/frameworks/core/components/common/layout/grid_column_info.cpp new file mode 100644 index 00000000..b8b74117 --- /dev/null +++ b/frameworks/core/components/common/layout/grid_column_info.cpp @@ -0,0 +1,123 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/common/layout/grid_column_info.h" + +#include "base/log/log.h" +#include "core/components/common/layout/grid_system_manager.h" + +namespace OHOS::Ace { + +double GridColumnInfo::GetWidth() const +{ + if (!parent_) { + LOGE("no parent info"); + return 0.0; + } + + uint32_t columns = 0; + auto sizeType = parent_->GetSizeType(); + switch (sizeType) { + case GridSizeType::XS: + columns = xsSizeColumn_ > 0 ? xsSizeColumn_ : columns_; + break; + case GridSizeType::SM: + columns = smSizeColumn_ > 0 ? smSizeColumn_ : columns_; + break; + case GridSizeType::MD: + columns = mdSizeColumn_ > 0 ? mdSizeColumn_ : columns_; + break; + case GridSizeType::LG: + columns = lgSizeColumn_ > 0 ? lgSizeColumn_ : columns_; + break; + case GridSizeType::XL: + columns = lgSizeColumn_ > 0 ? lgSizeColumn_ : columns_; + break; + default: + break; + } + + return GetWidth(columns); +} + +double GridColumnInfo::GetWidth(uint32_t columns) const +{ + if (!parent_) { + LOGE("no parent info"); + return 0.0; + } + double dipScale = GridSystemManager::GetInstance().GetDipScale(); + return columns == 0 ? 0.0 + : (columns * parent_->GetColumnWidth()) + + ((columns - 1) * parent_->GetGutterWidth().ConvertToPx(dipScale)); +} + +double GridColumnInfo::GetMaxWidth() const +{ + if (!parent_) { + LOGE("no parent info"); + return 0.0; + } + + uint32_t columns = 0; + auto sizeType = parent_->GetSizeType(); + switch (sizeType) { + case GridSizeType::XS: + columns = xsSizeColumn_ > 0 ? xsSizeColumn_ : columns_; + break; + case GridSizeType::SM: + columns = smSizeMaxColumn_ > 0 ? smSizeMaxColumn_ : smSizeColumn_ > 0 ? smSizeColumn_ : columns_; + break; + case GridSizeType::MD: + columns = mdSizeMaxColumn_ > 0 ? mdSizeMaxColumn_ : mdSizeColumn_ > 0 ? mdSizeColumn_ : columns_; + break; + case GridSizeType::LG: + columns = lgSizeMaxColumn_ > 0 ? lgSizeMaxColumn_ : lgSizeColumn_ > 0 ? lgSizeColumn_ : columns_; + break; + default: + break; + } + + return GetWidth(columns); +} + +const Dimension& GridColumnInfo::GetOffset() const +{ + if (!parent_) { + LOGE("no parent info"); + return UNDEFINED_DIMENSION; + } + auto sizeType = parent_->GetSizeType(); + switch (sizeType) { + case GridSizeType::XS: + return xsSizeOffset_; + break; + case GridSizeType::SM: + return smSizeOffset_; + break; + case GridSizeType::MD: + return mdSizeOffset_; + break; + case GridSizeType::LG: + return lgSizeOffset_; + break; + default: + break; + } + + return UNDEFINED_DIMENSION; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/common/layout/grid_column_info.h b/frameworks/core/components/common/layout/grid_column_info.h new file mode 100644 index 00000000..a9b6353b --- /dev/null +++ b/frameworks/core/components/common/layout/grid_column_info.h @@ -0,0 +1,126 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_LAYOUT_GRID_COLUMN_INFO_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_LAYOUT_GRID_COLUMN_INFO_H + +#include "core/components/common/layout/grid_container_info.h" + +namespace OHOS::Ace { + +constexpr uint32_t DEFAULT_GRID_COLUMN_SPAN = 1; + +class GridColumnInfo : public GridLayoutInfo { + DECLARE_ACE_TYPE(GridColumnInfo, GridLayoutInfo); + +public: + class Builder { + public: + Builder() + { + columnInfo_ = AceType::Claim(new GridColumnInfo()); + } + void SetXsSizeColumn(uint32_t xsSizeColumn, const Dimension& offset = UNDEFINED_DIMENSION) + { + columnInfo_->xsSizeColumn_ = xsSizeColumn; + columnInfo_->xsSizeOffset_ = offset; + } + + void SetSmSizeColumn(uint32_t smSizeColumn, const Dimension& offset = UNDEFINED_DIMENSION) + { + columnInfo_->smSizeColumn_ = smSizeColumn; + columnInfo_->smSizeOffset_ = offset; + } + + void SetMdSizeColumn(uint32_t mdSizeColumn, const Dimension& offset = UNDEFINED_DIMENSION) + { + columnInfo_->mdSizeColumn_ = mdSizeColumn; + columnInfo_->mdSizeOffset_ = offset; + } + + void SetLgSizeColumn(uint32_t lgSizeColumn, const Dimension& offset = UNDEFINED_DIMENSION) + { + columnInfo_->lgSizeColumn_ = lgSizeColumn; + columnInfo_->lgSizeOffset_ = offset; + } + void SetSmSizeMaxColumn(uint32_t smSizeMaxColumn) + { + columnInfo_->smSizeMaxColumn_ = smSizeMaxColumn; + } + void SetMdSizeMaxColumn(uint32_t mdSizeMaxColumn) + { + columnInfo_->mdSizeMaxColumn_ = mdSizeMaxColumn; + } + void SetLgSizeMaxColumn(uint32_t lgSizeMaxColumn) + { + columnInfo_->lgSizeMaxColumn_ = lgSizeMaxColumn; + } + + void SetColumns(uint32_t columns) + { + columnInfo_->columns_ = columns; + } + + void SetParent(const RefPtr& parent) + { + columnInfo_->parent_ = parent; + } + + const RefPtr& Build() const + { + return columnInfo_; + } + + private: + RefPtr columnInfo_; + }; + +public: + ~GridColumnInfo() override = default; + double GetWidth() const; + double GetWidth(uint32_t columns) const; + double GetMaxWidth() const; + const Dimension& GetOffset() const; + const RefPtr& GetParent() const + { + return parent_; + } + +private: + GridColumnInfo() = default; + + uint32_t xsSizeColumn_ = 0; + uint32_t smSizeColumn_ = 0; + uint32_t mdSizeColumn_ = 0; + uint32_t lgSizeColumn_ = 0; + + Dimension xsSizeOffset_ = UNDEFINED_DIMENSION; + Dimension smSizeOffset_ = UNDEFINED_DIMENSION; + Dimension mdSizeOffset_ = UNDEFINED_DIMENSION; + Dimension lgSizeOffset_ = UNDEFINED_DIMENSION; + + uint32_t smSizeMaxColumn_ = 0; + uint32_t mdSizeMaxColumn_ = 0; + uint32_t lgSizeMaxColumn_ = 0; + + // default column which no define column of the size + uint32_t columns_ = DEFAULT_GRID_COLUMN_SPAN; + // parent container grid infos + RefPtr parent_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_LAYOUT_GRID_COLUMN_INFO_H diff --git a/frameworks/core/components/common/layout/grid_container_info.cpp b/frameworks/core/components/common/layout/grid_container_info.cpp new file mode 100644 index 00000000..ee771aed --- /dev/null +++ b/frameworks/core/components/common/layout/grid_container_info.cpp @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/common/layout/grid_container_info.h" + +#include "base/log/log.h" +#include "core/components/common/layout/grid_layout_info.h" +#include "core/components/common/layout/grid_system_manager.h" + +namespace OHOS::Ace { + +template +const T& GetValue(const T& current, const T& system, const T& defaultValue) +{ + if (current == defaultValue) { + return system; + } else { + return current; + } +} + +void GridContainerInfo::BuildColumnWidth() +{ + BuildColumnWidth(GridSystemManager::GetInstance().GetScreenWidth()); +} + +void GridContainerInfo::BuildColumnWidth(double width) +{ + SystemGridInfo systemGridInfo; + if (sizeType_ != GridSizeType::UNDEFINED && currentSizeType_ == GridSizeType::UNDEFINED) { + systemGridInfo = GridSystemManager::GetInstance().GetSystemGridInfo(sizeType_); + // using fix size type + currentSizeType_ = sizeType_; + } else { + systemGridInfo = GridSystemManager::GetInstance().GetCurrentGridInfo(); + if (currentSizeType_ != systemGridInfo.sizeType) { + // system size changed + currentSizeType_ = systemGridInfo.sizeType; + } else { + return; + } + } + double dipScale = GridSystemManager::GetInstance().GetDipScale(); + // if not define the prop, use system grid define + int32_t columns = GetValue(columns_, systemGridInfo.columns, UNDEFINED_INT); + if (columns == 0) { + return; + } + double gutterWidth = GetValue(gutterWidth_, systemGridInfo.gutter, UNDEFINED_DIMENSION).ConvertToPx(dipScale); + double marginLeft = GetValue(marginLeft_, systemGridInfo.margin, UNDEFINED_DIMENSION).ConvertToPx(dipScale); + double marginRight = GetValue(marginRight_, systemGridInfo.margin, UNDEFINED_DIMENSION).ConvertToPx(dipScale); + double padding = paddingLeft_.ConvertToPx(dipScale) + paddingRight_.ConvertToPx(dipScale); + + columnWidth_ = (width - marginLeft - marginRight - padding - (columns - 1) * gutterWidth) / columns; + LOGE("width = %f, columns: %d columnWidth: %f gutterWidth: %f marginLeft: %f marginRight: %f padding: %f", width, + columns, columnWidth_, gutterWidth, marginLeft, marginRight, padding); +} + +GridSizeType GridContainerInfo::GetSizeType() const +{ + // if container don't want to use fix size type, use system current size type default + return sizeType_ != GridSizeType::UNDEFINED ? sizeType_ : currentSizeType_; +} + +int32_t GridContainerInfo::GetColumns() const +{ + if (columns_ == UNDEFINED_INT) { + return GridSystemManager::GetInstance().GetCurrentGridInfo().columns; + } + return columns_; +} + +const Dimension& GridContainerInfo::GetGutterWidth() const +{ + if (gutterWidth_ == UNDEFINED_DIMENSION) { + return GridSystemManager::GetInstance().GetCurrentGridInfo().gutter; + } + return gutterWidth_; +} + +const Dimension& GridContainerInfo::GetMarginLeft() const +{ + if (marginLeft_ == UNDEFINED_DIMENSION) { + return GridSystemManager::GetInstance().GetCurrentGridInfo().margin; + } + return marginLeft_; +} + +const Dimension& GridContainerInfo::GetMarginRight() const +{ + if (marginRight_ == UNDEFINED_DIMENSION) { + return GridSystemManager::GetInstance().GetCurrentGridInfo().margin; + } + return marginRight_; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/common/layout/grid_container_info.h b/frameworks/core/components/common/layout/grid_container_info.h new file mode 100644 index 00000000..f4304c55 --- /dev/null +++ b/frameworks/core/components/common/layout/grid_container_info.h @@ -0,0 +1,130 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_LAYOUT_GRID_CONTAINER_INFO_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_LAYOUT_GRID_CONTAINER_INFO_H + +#include "base/geometry/dimension.h" +#include "core/components/common/layout/grid_layout_info.h" + +namespace OHOS::Ace { + +constexpr int32_t UNDEFINED_INT = -1; +constexpr Dimension UNDEFINED_DIMENSION(-1.0, DimensionUnit::VP); + +class GridContainerInfo : public GridLayoutInfo { + DECLARE_ACE_TYPE(GridContainerInfo, GridLayoutInfo); + +public: + class Builder { + public: + Builder() + { + containerInfo_ = AceType::Claim(new GridContainerInfo()); + } + void SetColumns(int32_t columns) + { + if (columns > 0) { + containerInfo_->columns_ = columns; + } + } + void SetGutterWidth(const Dimension& gutterWidth) + { + if (gutterWidth.Value() > 0.0) { + containerInfo_->gutterWidth_ = gutterWidth; + } + } + void SetMarginLeft(const Dimension& marginLeft) + { + if (marginLeft.Value() > 0.0) { + containerInfo_->marginLeft_ = marginLeft; + } + } + void SetMarginRight(const Dimension& marginRight) + { + if (marginRight.Value() > 0.0) { + containerInfo_->marginRight_ = marginRight; + } + } + void SetPaddingLeft(const Dimension& paddingLeft) + { + if (paddingLeft.Value() > 0.0) { + containerInfo_->paddingLeft_ = paddingLeft; + } + } + void SetPaddingRight(const Dimension& paddingRight) + { + if (paddingRight.Value() > 0.0) { + containerInfo_->paddingRight_ = paddingRight; + } + } + void SetSizeType(const GridSizeType& sizeType) + { + containerInfo_->sizeType_ = sizeType; + } + void SetColumnType(const GridColumnType& columnType) + { + containerInfo_->columnType_ = columnType; + } + const RefPtr& Build() const + { + return containerInfo_; + } + + private: + RefPtr containerInfo_; + }; + ~GridContainerInfo() override = default; + + double GetColumnWidth() const + { + return columnWidth_; + } + + GridColumnType GetColumnType() const + { + return columnType_; + } + GridSizeType GetSizeType() const; + int32_t GetColumns() const; + const Dimension& GetGutterWidth() const; + const Dimension& GetMarginLeft() const; + const Dimension& GetMarginRight() const; + /* + * Use system screen width build column width. + */ + void BuildColumnWidth(); + void BuildColumnWidth(double width); + +private: + GridContainerInfo() = default; + // current used size type + GridSizeType currentSizeType_ = GridSizeType::UNDEFINED; + GridSizeType sizeType_ = GridSizeType::UNDEFINED; + // container total column number + int32_t columns_ = UNDEFINED_INT; + Dimension gutterWidth_ = UNDEFINED_DIMENSION; + Dimension marginLeft_ = UNDEFINED_DIMENSION; + Dimension marginRight_ = UNDEFINED_DIMENSION; + Dimension paddingLeft_ = UNDEFINED_DIMENSION; + Dimension paddingRight_ = UNDEFINED_DIMENSION; + + double columnWidth_ = 0.0; + GridColumnType columnType_ = GridColumnType::NONE; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_LAYOUT_GRID_CONTAINER_INFO_H diff --git a/frameworks/core/components/common/layout/grid_layout_info.h b/frameworks/core/components/common/layout/grid_layout_info.h new file mode 100644 index 00000000..e22f90aa --- /dev/null +++ b/frameworks/core/components/common/layout/grid_layout_info.h @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_LAYOUT_GRID_LAYOUT_INFO_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_LAYOUT_GRID_LAYOUT_INFO_H + +#include "base/memory/ace_type.h" + +namespace OHOS::Ace { + +enum class GridSizeType { + UNDEFINED = 0, + XS, + SM, + MD, + LG, + XL, +}; + +enum class GridColumnType { + NONE = 0, + BUBBLE_TYPE, + BUTTON_TYPE, + CARD_TYPE, + CONTENT_TYPE, + MENU, + TOAST, + PANEL, + TOOL_BAR, + DIALOG, +}; + +class GridLayoutInfo : public virtual AceType { + DECLARE_ACE_TYPE(GridLayoutInfo, AceType); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_LAYOUT_GRID_LAYOUT_INFO_H diff --git a/frameworks/core/components/common/layout/grid_system_manager.cpp b/frameworks/core/components/common/layout/grid_system_manager.cpp new file mode 100644 index 00000000..d680a882 --- /dev/null +++ b/frameworks/core/components/common/layout/grid_system_manager.cpp @@ -0,0 +1,158 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/common/layout/grid_system_manager.h" + +#include +#include + +#include "base/json/json_util.h" +#include "base/log/log.h" + +namespace OHOS::Ace { +namespace { + +constexpr Dimension COLUMN_2_AND_4_BREAKPOINT = 320.0_vp; +constexpr Dimension COLUMN_4_AND_8_BREAKPOINT = 480.0_vp; +constexpr Dimension COLUMN_8_AND_12_BREAKPOINT = 840.0_vp; +constexpr Dimension SMALL_GUTTER = 12.0_vp; +constexpr Dimension SMALL_MARGIN = 12.0_vp; +constexpr Dimension LARGE_GUTTER = 24.0_vp; +constexpr Dimension LARGE_MARGIN = 24.0_vp; +constexpr uint32_t COLUMN_SM = 0; +constexpr uint32_t COLUMN_MD = 1; +constexpr uint32_t COLUMN_LG = 2; + +const SystemGridInfo GRID_COLUMNS_2(GridSizeType::XS, SMALL_GUTTER, SMALL_MARGIN, 2); +const SystemGridInfo GRID_COLUMNS_4(GridSizeType::SM, LARGE_GUTTER, LARGE_MARGIN, 4); +const SystemGridInfo GRID_COLUMNS_8(GridSizeType::MD, LARGE_GUTTER, 32.0_vp, 8); +const SystemGridInfo GRID_COLUMNS_12(GridSizeType::LG, LARGE_GUTTER, 48.0_vp, 12); + +const std::map> SYSTEM_GRID_TYPES = { + { GridColumnType::BUBBLE_TYPE, { SystemGridInfo(GridSizeType::SM, LARGE_GUTTER, LARGE_MARGIN, 4), + SystemGridInfo(GridSizeType::MD, LARGE_GUTTER, LARGE_MARGIN, 6), + SystemGridInfo(GridSizeType::LG, LARGE_GUTTER, LARGE_MARGIN, 6) } }, + { GridColumnType::BUTTON_TYPE, { SystemGridInfo(GridSizeType::SM, LARGE_GUTTER, LARGE_MARGIN, 4), + SystemGridInfo(GridSizeType::MD, LARGE_GUTTER, LARGE_MARGIN, 6), + SystemGridInfo(GridSizeType::LG, LARGE_GUTTER, LARGE_MARGIN, 8) } }, + { GridColumnType::CARD_TYPE, { SystemGridInfo(GridSizeType::SM, SMALL_GUTTER, SMALL_MARGIN, 4), + SystemGridInfo(GridSizeType::MD, SMALL_GUTTER, SMALL_MARGIN, 6), + SystemGridInfo(GridSizeType::LG, SMALL_GUTTER, SMALL_MARGIN, 8) } }, + { GridColumnType::CONTENT_TYPE, { SystemGridInfo(GridSizeType::SM, LARGE_GUTTER, LARGE_MARGIN, 4), + SystemGridInfo(GridSizeType::MD, LARGE_GUTTER, LARGE_MARGIN, 6), + SystemGridInfo(GridSizeType::LG, LARGE_GUTTER, LARGE_MARGIN, 8) } }, + { GridColumnType::MENU, { SystemGridInfo(GridSizeType::SM, LARGE_GUTTER, LARGE_MARGIN, 2, 4), + SystemGridInfo(GridSizeType::MD, LARGE_GUTTER, LARGE_MARGIN, 2, 6), + SystemGridInfo(GridSizeType::LG, LARGE_GUTTER, LARGE_MARGIN, 2, 8) } }, + { GridColumnType::TOAST, { SystemGridInfo(GridSizeType::SM, LARGE_GUTTER, LARGE_MARGIN, 2, 4), + SystemGridInfo(GridSizeType::MD, LARGE_GUTTER, LARGE_MARGIN, 2, 6), + SystemGridInfo(GridSizeType::LG, LARGE_GUTTER, LARGE_MARGIN, 2, 6) } }, + { GridColumnType::TOOL_BAR, { SystemGridInfo(GridSizeType::SM, LARGE_GUTTER, LARGE_MARGIN, 4), + SystemGridInfo(GridSizeType::MD, LARGE_GUTTER, LARGE_MARGIN, 8), + SystemGridInfo(GridSizeType::LG, LARGE_GUTTER, LARGE_MARGIN, 12) } }, + { GridColumnType::PANEL, { SystemGridInfo(GridSizeType::SM, SMALL_GUTTER, SMALL_MARGIN, 4), + SystemGridInfo(GridSizeType::MD, SMALL_GUTTER, SMALL_MARGIN, 6), + SystemGridInfo(GridSizeType::LG, SMALL_GUTTER, SMALL_MARGIN, 6) } }, + { GridColumnType::DIALOG, { SystemGridInfo(GridSizeType::SM, SMALL_GUTTER, SMALL_MARGIN, 3), + SystemGridInfo(GridSizeType::MD, SMALL_GUTTER, SMALL_MARGIN, 4), + SystemGridInfo(GridSizeType::LG, SMALL_GUTTER, SMALL_MARGIN, 5) } }, +}; + +} // namespace + +std::string SystemGridInfo::ToString() const +{ + auto json = JsonUtil::Create(true); + double dipScale = GridSystemManager::GetInstance().GetDipScale(); + json->Put("columns", columns); + json->Put("gutter", gutter.ConvertToPx(dipScale)); + json->Put("margin", margin.ConvertToPx(dipScale)); + return json->ToString(); +} + +GridSystemManager* GridSystemManager::instance_ = nullptr; + +std::mutex GridSystemManager::mutex_; + +GridSystemManager& GridSystemManager::GetInstance() +{ + if (instance_ == nullptr) { + std::lock_guard lock(mutex_); + if (instance_ == nullptr) { + instance_ = new GridSystemManager(); + } + } + return *instance_; +} + +RefPtr GridSystemManager::GetInfoByType(const GridColumnType& columnType) +{ + auto iter = SYSTEM_GRID_TYPES.find(columnType); + if (iter != SYSTEM_GRID_TYPES.end()) { + GridContainerInfo::Builder containerBuilder; + containerBuilder.SetGutterWidth(iter->second[COLUMN_SM].gutter); + containerBuilder.SetMarginLeft(iter->second[COLUMN_SM].margin); + containerBuilder.SetMarginRight(iter->second[COLUMN_SM].margin); + containerBuilder.SetColumnType(columnType); + + GridColumnInfo::Builder columnBuilder; + columnBuilder.SetParent(containerBuilder.Build()); + columnBuilder.SetSmSizeColumn(iter->second[COLUMN_SM].columns); + columnBuilder.SetMdSizeColumn(iter->second[COLUMN_MD].columns); + columnBuilder.SetLgSizeColumn(iter->second[COLUMN_LG].columns); + columnBuilder.SetSmSizeMaxColumn(iter->second[COLUMN_SM].maxColumns); + columnBuilder.SetMdSizeMaxColumn(iter->second[COLUMN_MD].maxColumns); + columnBuilder.SetLgSizeMaxColumn(iter->second[COLUMN_LG].maxColumns); + return columnBuilder.Build(); + } + LOGE("not find column type: %d", columnType); + return nullptr; +} + +SystemGridInfo GridSystemManager::GetSystemGridInfo(const GridSizeType& sizeType) +{ + if (sizeType == GridSizeType::SM) { + return GRID_COLUMNS_4; + } else if (sizeType == GridSizeType::MD) { + return GRID_COLUMNS_8; + } else if (sizeType == GridSizeType::LG) { + return GRID_COLUMNS_12; + } + + return SystemGridInfo(); +} + +void GridSystemManager::OnSurfaceChanged(double width) +{ + screenWidth_ = width; + if (width < COLUMN_2_AND_4_BREAKPOINT.Value() * density_) { + currentSize_ = GridSizeType::XS; + systemGridInfo_ = GRID_COLUMNS_2; + } else if (width < COLUMN_4_AND_8_BREAKPOINT.Value() * density_) { + currentSize_ = GridSizeType::SM; + systemGridInfo_ = GRID_COLUMNS_4; + } else if (width < COLUMN_8_AND_12_BREAKPOINT.Value() * density_) { + currentSize_ = GridSizeType::MD; + systemGridInfo_ = GRID_COLUMNS_8; + } else { + currentSize_ = GridSizeType::LG; + systemGridInfo_ = GRID_COLUMNS_12; + } + currentSize_ = systemGridInfo_.sizeType; + + LOGD("OnSurfaceChanged: %{public}f: sizeType = %{public}d", width, systemGridInfo_.sizeType); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/common/layout/grid_system_manager.h b/frameworks/core/components/common/layout/grid_system_manager.h new file mode 100644 index 00000000..cb343c2a --- /dev/null +++ b/frameworks/core/components/common/layout/grid_system_manager.h @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_LAYOUT_GRID_SYSTEM_MANAGER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_LAYOUT_GRID_SYSTEM_MANAGER_H + +#include + +#include "base/geometry/dimension.h" +#include "base/memory/ace_type.h" +#include "core/components/common/layout/grid_column_info.h" + +namespace OHOS::Ace { + +struct SystemGridInfo { + SystemGridInfo() = default; + SystemGridInfo( + GridSizeType sizeType, const Dimension& gutter, const Dimension& margin, int32_t columns, int32_t maxColumns) + : sizeType(sizeType), gutter(gutter), margin(margin), columns(columns), maxColumns(maxColumns) + {} + SystemGridInfo(GridSizeType sizeType, const Dimension& gutter, const Dimension& margin, int32_t columns) + : sizeType(sizeType), gutter(gutter), margin(margin), columns(columns), maxColumns(columns) + {} + ACE_EXPORT std::string ToString() const; + + GridSizeType sizeType = GridSizeType::UNDEFINED; + Dimension gutter; + Dimension margin; + int32_t columns = 0; + int32_t maxColumns = 0; +}; + +class GridSystemManager final { +public: + ~GridSystemManager() = default; + ACE_EXPORT static GridSystemManager& GetInstance(); + + const SystemGridInfo& GetCurrentGridInfo() + { + return systemGridInfo_; + } + + static SystemGridInfo GetSystemGridInfo(const GridSizeType& sizeType); + static RefPtr GetInfoByType(const GridColumnType& type); + void OnSurfaceChanged(double width); + void SetWindowInfo(double screenWidth, double density, double dipScale) + { + screenWidth_ = screenWidth; + density_ = density; + dipScale_ = dipScale; + } + + double GetScreenWidth() const + { + return screenWidth_; + } + + double GetDipScale() const + { + return dipScale_; + } + + GridSizeType GetCurrentSize() const + { + return currentSize_; + } + +private: + GridSystemManager() = default; + + static GridSystemManager* instance_; + static std::mutex mutex_; + + double screenWidth_ = 0.0; + double density_ = 1.0; + double dipScale_ = 1.0; + GridSizeType currentSize_ = GridSizeType::UNDEFINED; + SystemGridInfo systemGridInfo_; + + ACE_DISALLOW_COPY_AND_MOVE(GridSystemManager); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_LAYOUT_GRID_SYSTEM_MANAGER_H diff --git a/frameworks/core/components/common/layout/layout_param.h b/frameworks/core/components/common/layout/layout_param.h new file mode 100644 index 00000000..eee3e9f5 --- /dev/null +++ b/frameworks/core/components/common/layout/layout_param.h @@ -0,0 +1,155 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_LAYOUT_LAYOUT_PARAM_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_LAYOUT_LAYOUT_PARAM_H + +#include "base/geometry/size.h" + +namespace OHOS::Ace { + +class LayoutParam { +public: + LayoutParam() = default; + ~LayoutParam() = default; + + LayoutParam(Size max, Size min) + { + SetMaxSize(max); + SetMinSize(min); + } + + const Size& GetMaxSize() const + { + return maxSize_; + } + + void SetMaxSize(const Size& size) + { + maxSize_ = size; + } + + const Size& GetMinSize() const + { + return minSize_; + } + + void SetMinSize(const Size& size) + { + minSize_ = size; + } + + void SetFixedSize(const Size& size) + { + minSize_ = size; + maxSize_ = size; + } + + void SetHasUsedConstraints(bool flag) + { + hasUsedConstraints_ = flag; + } + + bool HasUsedConstraints() const + { + return hasUsedConstraints_; + } + + bool IsValid() const + { + return maxSize_.IsValid(); + } + + bool IsTight() const + { + return minSize_.Width() >= maxSize_.Width() && minSize_.Height() >= maxSize_.Height(); + } + + bool IsWidthValid() const + { + return maxSize_.Width() >= minSize_.Width() && maxSize_.Width() > 0.0; + } + + bool IsHeightValid() const + { + return maxSize_.Height() >= minSize_.Height() && maxSize_.Height() > 0.0; + } + + Size Constrain(Size size) const + { + Size constrainSize; + if (size.Width() < 0) { + constrainSize.SetWidth(size.Width()); + } else { + constrainSize.SetWidth(std::clamp(size.Width(), minSize_.Width(), maxSize_.Width())); + } + if (size.Height() < 0) { + constrainSize.SetHeight(size.Height()); + } else { + constrainSize.SetHeight(std::clamp(size.Height(), minSize_.Height(), maxSize_.Height())); + } + return constrainSize; + } + + LayoutParam Enforce(const LayoutParam& layoutParam) const + { + Size min = layoutParam.Constrain(minSize_); + Size max = layoutParam.Constrain(maxSize_); + return LayoutParam(max, min); + } + + bool operator==(const LayoutParam& layoutParam) const + { + return (minSize_ == layoutParam.minSize_) && (maxSize_ == layoutParam.maxSize_); + } + + bool operator!=(const LayoutParam& layoutParam) const + { + return !operator==(layoutParam); + } + + std::string ToString() + { + return std::string("LayoutParam: ") + .append(minSize_.ToString()) + .append(" - ") + .append(maxSize_.ToString()); + } + + void SetMinWidth(double value) + { + minSize_.SetWidth(value); + } + + void SetMaxWidth(double value) + { + maxSize_.SetWidth(value); + } + +private: + Size minSize_ { 0.0f, 0.0f }; + Size maxSize_ { Size::INFINITE_SIZE, Size::INFINITE_SIZE }; + bool hasUsedConstraints_ = false; +}; + +enum class MeasureType { + PARENT, // return the max layout params from parent + CONTENT, // return the current component size + DEFAULT // user hasn't set the component size +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_LAYOUT_LAYOUT_PARAM_H diff --git a/frameworks/core/components/common/layout/position_param.h b/frameworks/core/components/common/layout/position_param.h new file mode 100644 index 00000000..e7096d46 --- /dev/null +++ b/frameworks/core/components/common/layout/position_param.h @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_LAYOUT_POSITION_PARAM_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_LAYOUT_POSITION_PARAM_H + +#include "base/geometry/dimension.h" +#include "core/components/common/layout/constants.h" + +namespace OHOS::Ace { + +struct PositionParam { + std::pair left = { 0.0_px, false }; + std::pair right = { 0.0_px, false }; + std::pair top = { 0.0_px, false }; + std::pair bottom = { 0.0_px, false }; + PositionType type = PositionType::RELATIVE; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_LAYOUT_POSITION_PARAM_H diff --git a/frameworks/core/components/common/painter/flutter_checkable_painter.cpp b/frameworks/core/components/common/painter/flutter_checkable_painter.cpp new file mode 100644 index 00000000..e601b423 --- /dev/null +++ b/frameworks/core/components/common/painter/flutter_checkable_painter.cpp @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/common/painter/flutter_checkable_painter.h" + +#include "third_party/skia/include/core/SkPaint.h" + +namespace OHOS::Ace { +namespace { + +constexpr uint8_t ENABLED_ALPHA = 255; +constexpr uint8_t DISABLED_ALPHA = 102; + +} // namespace + +void FlutterCheckablePainter::SetStrokeWidth(double strokeWidth, flutter::Paint& paint) const +{ + SkPaint* skPaint = paint.paint(); + if (!skPaint) { + LOGE("paint is null"); + return; + } + + skPaint->setAntiAlias(true); + skPaint->setStyle(SkPaint::Style::kStroke_Style); + skPaint->setStrokeWidth(strokeWidth); +} + +RenderLayer FlutterCheckablePainter::ConfigureOpacityLayer(bool disabled) +{ + if (!layer_) { + layer_ = AceType::MakeRefPtr(ENABLED_ALPHA, 0, 0); + } + uint8_t opacity = disabled ? DISABLED_ALPHA : ENABLED_ALPHA; + if (layer_) { + layer_->SetOpacity(opacity, 0.0, 0.0); + } + return AceType::RawPtr(layer_); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/common/painter/flutter_checkable_painter.h b/frameworks/core/components/common/painter/flutter_checkable_painter.h new file mode 100644 index 00000000..0baecdae --- /dev/null +++ b/frameworks/core/components/common/painter/flutter_checkable_painter.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_PAINTER_FLUTTER_CHECKABLE_PAINTER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_PAINTER_FLUTTER_CHECKABLE_PAINTER_H + +#include "flutter/lib/ui/painting/canvas.h" +#include "flutter/lib/ui/painting/paint.h" + +#include "core/pipeline/base/render_node.h" +#include "core/pipeline/layers/opacity_layer.h" + +namespace OHOS::Ace { + +class FlutterCheckablePainter { +public: + FlutterCheckablePainter() = default; + ~FlutterCheckablePainter() = default; + + void SetStrokeWidth(double strokeWidth, flutter::Paint& paint) const; + RenderLayer ConfigureOpacityLayer(bool disabled); + +protected: + RefPtr layer_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_PAINTER_FLUTTER_CHECKABLE_PAINTER_H diff --git a/frameworks/core/components/common/painter/flutter_decoration_painter.cpp b/frameworks/core/components/common/painter/flutter_decoration_painter.cpp new file mode 100644 index 00000000..297ecd7c --- /dev/null +++ b/frameworks/core/components/common/painter/flutter_decoration_painter.cpp @@ -0,0 +1,1082 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/common/painter/flutter_decoration_painter.h" + +#include + +#include "flutter/common/task_runners.h" +#include "flutter/lib/ui/ui_dart_state.h" +#include "include/core/SkColor.h" +#include "include/core/SkMaskFilter.h" +#include "include/effects/Sk1DPathEffect.h" +#include "include/effects/SkBlurImageFilter.h" +#include "include/effects/SkDashPathEffect.h" +#include "include/effects/SkGradientShader.h" +#include "include/utils/SkShadowUtils.h" + +#include "core/components/common/properties/color.h" +#include "core/pipeline/base/flutter_render_context.h" +#include "core/pipeline/base/render_node.h" +#include "core/pipeline/pipeline_context.h" + +namespace OHOS::Ace { +namespace { + +constexpr int32_t DOUBLE_WIDTH = 2; +constexpr int32_t DASHED_LINE_LENGTH = 3; +constexpr float BLUR_SIGMA_SCALE = 0.57735f; +constexpr double DEGREES_90 = 90.0; +constexpr double DEGREES_180 = 180.0; +constexpr double DEGREES_270 = 270.0; +constexpr double DEGREES_360 = 360.0; +constexpr float SHADER_PERCENT_ZERO = 0.0f; + +constexpr float SHADER_PERCENT_FULL = 1.0f; +constexpr float SHADER_PERCENT_NONE_EXIST = -9999.0f; + +} // namespace + +FlutterDecorationPainter::FlutterDecorationPainter( + const RefPtr& decoration, const Rect& paintRect, const Size& paintSize, double dipScale) + : dipScale_(dipScale), paintRect_(paintRect), decoration_(decoration), paintSize_(paintSize) +{} + +void FlutterDecorationPainter::PaintDecoration(const Offset& offset, SkCanvas* canvas, RenderContext& context) +{ + if (!canvas) { + LOGE("PaintDecoration failed, canvas is null."); + return; + } + if (decoration_) { + canvas->save(); + SkPaint paint; + + if (opacity_ != UINT8_MAX) { + paint.setAlpha(opacity_); + } + + Border border = decoration_->GetBorder(); + flutter::RRect outerRRect = GetBoxRRect(offset + margin_.GetOffsetInPx(scale_), border, 0.0, true); + if (clipLayer_) { + // If you want to clip the rounded edges, you need to set a Cliplayer first. + clipLayer_->SetClipRRect(outerRRect); + } + PaintBoxShadows(outerRRect.sk_rrect, decoration_->GetShadows(), canvas); + canvas->clipRRect(outerRRect.sk_rrect, true); + PaintColorAndImage(offset, canvas, paint, context); + if (border.HasValue()) { + // set AntiAlias + paint.setAntiAlias(true); + if (CheckBorderAllEqual(border)) { + flutter::RRect innerRRect = + GetBoxRRect(offset + margin_.GetOffsetInPx(scale_), border, SK_ScalarHalf, true); + PaintAllEqualBorder(innerRRect, border, canvas, paint); + } else { + paint.setStyle(SkPaint::Style::kStroke_Style); + PaintBorder(offset + margin_.GetOffsetInPx(scale_), border, canvas, paint); + } + } + canvas->restore(); + } +} + +void FlutterDecorationPainter::PaintBlur( + const flutter::RRect& outerRRect, SkCanvas* canvas, const Dimension& blurRadius) +{ + auto radius = NormalizeToPx(blurRadius); + if (GreatNotEqual(radius, 0.0)) { + if (canvas) { + canvas->save(); + canvas->clipRRect(outerRRect.sk_rrect, true); + // picture will be discard if nothing draw + canvas->drawColor(Color::TRANSPARENT.GetValue()); + sk_sp filter = + SkBlurImageFilter::Make(ConvertRadiusToSigma(radius), ConvertRadiusToSigma(radius), nullptr); + SkCanvas::SaveLayerRec slr(nullptr, nullptr, filter.get(), SkCanvas::kInitWithPrevious_SaveLayerFlag); + canvas->saveLayer(slr); + canvas->restore(); + canvas->restore(); + } + } +} + +flutter::RRect FlutterDecorationPainter::GetBoxOuterRRect(const Offset& offset) +{ + flutter::RRect outerRRect; + if (decoration_) { + Border border = decoration_->GetBorder(); + outerRRect = GetBoxRRect(offset + margin_.GetOffsetInPx(scale_), border, 0.0, true); + } else { + Rect paintSize = paintRect_ + offset; + outerRRect.sk_rrect = SkRRect::MakeRect( + SkRect::MakeLTRB(paintSize.Left(), paintSize.Top(), paintSize.Right(), paintSize.Bottom())); + } + outerRRect.is_null = false; + return outerRRect; +} + +void FlutterDecorationPainter::PaintColorAndImage( + const Offset& offset, SkCanvas* canvas, SkPaint& paint, RenderContext& renderContext) +{ + if (!decoration_) { + return; + } + + // paint backColor + bool paintBgColor = false; + paint.setStyle(SkPaint::Style::kFill_Style); + Color backColor = decoration_->GetBackgroundColor(); + Color animationColor = decoration_->GetAnimationColor(); + if (backColor != Color::TRANSPARENT) { + paint.setColor(backColor.GetValue()); + canvas->drawRect( + SkRect::MakeXYWH(offset.GetX() + NormalizeToPx(margin_.Left()), + offset.GetY() + NormalizeToPx(margin_.Top()), GetLayoutSize().Width() - NormalizeToPx(margin_.Right()), + GetLayoutSize().Height() - NormalizeToPx(margin_.Bottom())), + paint); + paintBgColor = true; + } + if (animationColor != Color::TRANSPARENT) { + paint.setColor(animationColor.GetValue()); + canvas->drawRect( + SkRect::MakeXYWH(offset.GetX() + NormalizeToPx(margin_.Left()), + offset.GetY() + NormalizeToPx(margin_.Top()), GetLayoutSize().Width() - NormalizeToPx(margin_.Right()), + GetLayoutSize().Height() - NormalizeToPx(margin_.Bottom())), + paint); + } + + // paint background image. + RefPtr arcBG = decoration_->GetArcBackground(); + if (arcBG) { + Color arcColor = arcBG->GetColor(); + if (arcColor != Color::TRANSPARENT) { + paint.setColor(arcColor.GetValue()); + canvas->drawCircle(arcBG->GetCenter().GetX(), arcBG->GetCenter().GetY(), arcBG->GetRadius(), paint); + paintBgColor = true; + } + } + if (paintBgColor) { + return; + } + // paint background image. + if (decoration_->GetImage()) { + PaintImage(offset, renderContext); + return; + } + // paint Gradient color. + if (decoration_->GetGradient().IsValid()) { + PaintGradient(offset, canvas, paint); + } +} + +flutter::RRect FlutterDecorationPainter::GetBoxRRect( + const Offset& offset, const Border& border, double shrinkFactor, bool isRound) +{ + flutter::RRect rrect = flutter::RRect(); + SkRect skRect {}; + SkVector fRadii[4] = { { 0.0, 0.0 }, { 0.0, 0.0 }, { 0.0, 0.0 }, { 0.0, 0.0 } }; + if (CheckBorderEdgeForRRect(border)) { + BorderEdge borderEdge = border.Left(); + double borderWidth = NormalizeToPx(borderEdge.GetWidth()); + skRect.setXYWH(SkDoubleToScalar(offset.GetX() + shrinkFactor * borderWidth), + SkDoubleToScalar(offset.GetY() + shrinkFactor * borderWidth), + SkDoubleToScalar(paintSize_.Width() - shrinkFactor * DOUBLE_WIDTH * borderWidth), + SkDoubleToScalar(paintSize_.Height() - shrinkFactor * DOUBLE_WIDTH * borderWidth)); + if (isRound) { + fRadii[SkRRect::kUpperLeft_Corner].set( + SkDoubleToScalar( + std::max(NormalizeToPx(border.TopLeftRadius().GetX()) - shrinkFactor * borderWidth, 0.0)), + SkDoubleToScalar( + std::max(NormalizeToPx(border.TopLeftRadius().GetY()) - shrinkFactor * borderWidth, 0.0))); + fRadii[SkRRect::kUpperRight_Corner].set( + SkDoubleToScalar( + std::max(NormalizeToPx(border.TopRightRadius().GetX()) - shrinkFactor * borderWidth, 0.0)), + SkDoubleToScalar( + std::max(NormalizeToPx(border.TopRightRadius().GetY()) - shrinkFactor * borderWidth, 0.0))); + fRadii[SkRRect::kLowerRight_Corner].set( + SkDoubleToScalar( + std::max(NormalizeToPx(border.BottomRightRadius().GetX()) - shrinkFactor * borderWidth, 0.0)), + SkDoubleToScalar( + std::max(NormalizeToPx(border.BottomRightRadius().GetY()) - shrinkFactor * borderWidth, 0.0))); + fRadii[SkRRect::kLowerLeft_Corner].set( + SkDoubleToScalar( + std::max(NormalizeToPx(border.BottomLeftRadius().GetX()) - shrinkFactor * borderWidth, 0.0)), + SkDoubleToScalar( + std::max(NormalizeToPx(border.BottomLeftRadius().GetY()) - shrinkFactor * borderWidth, 0.0))); + } + } else { + skRect.setXYWH(SkDoubleToScalar(offset.GetX() + shrinkFactor * NormalizeToPx(border.Left().GetWidth())), + SkDoubleToScalar(offset.GetY() + shrinkFactor * NormalizeToPx(border.Top().GetWidth())), + SkDoubleToScalar( + paintSize_.Width() - shrinkFactor * DOUBLE_WIDTH * NormalizeToPx(border.Right().GetWidth())), + SkDoubleToScalar(paintSize_.Height() - shrinkFactor * (NormalizeToPx(border.Bottom().GetWidth()) + + NormalizeToPx(border.Top().GetWidth())))); + } + rrect.sk_rrect.setRectRadii(skRect, fRadii); + return rrect; +} + +void FlutterDecorationPainter::PaintAllEqualBorder( + const flutter::RRect& rrect, const Border& border, SkCanvas* canvas, SkPaint& paint) +{ + BorderEdge borderEdge = border.Left(); + if (borderEdge.GetColor() == border.Top().GetColor() && borderEdge.GetColor() == border.Right().GetColor() && + borderEdge.GetColor() == border.Bottom().GetColor()) { + SetBorderStyle(borderEdge, paint); + } else { + SetBorderStyle(borderEdge, paint, true); + } + canvas->drawRRect(rrect.sk_rrect, paint); +} + +void FlutterDecorationPainter::SetBorderStyle(const BorderEdge& borderEdge, SkPaint& paint, bool useDefaultColor) +{ + if (borderEdge.HasValue()) { + double width = NormalizeToPx(borderEdge.GetWidth()); + uint32_t color = useDefaultColor ? Color::BLACK.GetValue() : borderEdge.GetColor().GetValue(); + paint.setStrokeWidth(width); + paint.setColor(color); + paint.setStyle(SkPaint::Style::kStroke_Style); + if (borderEdge.GetBorderStyle() == BorderStyle::DOTTED) { + SkPath dotPath; + dotPath.addCircle(0.0f, 0.0f, SkDoubleToScalar(width / 2.0)); + paint.setPathEffect(SkPath1DPathEffect::Make(dotPath, width * 2.0, 0.0, SkPath1DPathEffect::kRotate_Style)); + } else if (borderEdge.GetBorderStyle() == BorderStyle::DASHED) { + const float intervals[] = { SkDoubleToScalar(width * DASHED_LINE_LENGTH), + SkDoubleToScalar(width * DASHED_LINE_LENGTH) }; + paint.setPathEffect(SkDashPathEffect::Make(intervals, SK_ARRAY_COUNT(intervals), 0.0)); + } else { + paint.setPathEffect(nullptr); + } + } +} + +void FlutterDecorationPainter::PaintBorder(const Offset& offset, const Border& border, SkCanvas* canvas, SkPaint& paint) +{ + // paint left border edge. + BorderEdge left = border.Left(); + if (left.HasValue()) { + SetBorderStyle(left, paint); + canvas->drawLine(offset.GetX() + SK_ScalarHalf * NormalizeToPx(left.GetWidth()), offset.GetY(), + offset.GetX() + SK_ScalarHalf * NormalizeToPx(left.GetWidth()), offset.GetY() + paintSize_.Height(), paint); + } + + // paint top border edge. + BorderEdge top = border.Top(); + if (top.HasValue()) { + SetBorderStyle(top, paint); + canvas->drawLine(offset.GetX(), offset.GetY() + SK_ScalarHalf * NormalizeToPx(top.GetWidth()), + offset.GetX() + paintSize_.Width(), offset.GetY() + SK_ScalarHalf * NormalizeToPx(top.GetWidth()), paint); + } + + // paint right border edge. + BorderEdge right = border.Right(); + if (right.HasValue()) { + SetBorderStyle(right, paint); + canvas->drawLine(offset.GetX() + paintSize_.Width() - SK_ScalarHalf * NormalizeToPx(right.GetWidth()), + offset.GetY(), offset.GetX() + paintSize_.Width() - SK_ScalarHalf * NormalizeToPx(right.GetWidth()), + offset.GetY() + paintSize_.Height(), paint); + } + + // paint bottom border edge. + BorderEdge bottom = border.Bottom(); + if (bottom.HasValue()) { + SetBorderStyle(bottom, paint); + canvas->drawLine(offset.GetX(), + offset.GetY() + paintSize_.Height() - SK_ScalarHalf * NormalizeToPx(bottom.GetWidth()), + offset.GetX() + paintSize_.Width(), + offset.GetY() + paintSize_.Height() - SK_ScalarHalf * NormalizeToPx(bottom.GetWidth()), paint); + } +} + +// Add for box-shadow, otherwise using PaintShadow(). +void FlutterDecorationPainter::PaintBoxShadows( + const SkRRect& rrect, const std::vector& shadows, SkCanvas* canvas) +{ + if (!canvas) { + LOGE("PaintBoxShadows failed, canvas is null."); + return; + } + canvas->save(); + // The location of the component itself does not draw a shadow + canvas->clipRRect(rrect, SkClipOp::kDifference, true); + + if (!shadows.empty()) { + for (const auto& shadow : shadows) { + if (!shadow.IsValid()) { + LOGW("The current shadow is not drawn if the shadow is invalid."); + continue; + } + if (shadow.GetHardwareAcceleration()) { + // Do not support blurRadius and spreadRadius to paint shadow, use elevation. + PaintShadow(SkPath().addRRect(rrect), shadow, canvas); + } else { + SkRRect shadowRRect = rrect; + // Keep the original rounded corners. + SkVector fRadii[4] = { + rrect.radii(SkRRect::kUpperLeft_Corner), + rrect.radii(SkRRect::kUpperRight_Corner), + rrect.radii(SkRRect::kLowerRight_Corner), + rrect.radii(SkRRect::kLowerLeft_Corner) + }; + + SkScalar left = rrect.rect().left(); + SkScalar top = rrect.rect().top(); + auto width = rrect.width() + DOUBLE_WIDTH * shadow.GetSpreadRadius(); + auto height = rrect.height() + DOUBLE_WIDTH * shadow.GetSpreadRadius(); + SkRect skRect {}; + skRect.setXYWH(left + SkDoubleToScalar(shadow.GetOffset().GetX() - shadow.GetSpreadRadius()), + top + SkDoubleToScalar(shadow.GetOffset().GetY() - shadow.GetSpreadRadius()), + SkDoubleToScalar(width > 0.0 ? width : 0.0), SkDoubleToScalar(height > 0.0 ? height : 0.0)); + shadowRRect.setRectRadii(skRect, fRadii); + SkPaint paint; + paint.setColor(shadow.GetColor().GetValue()); + paint.setAntiAlias(true); + paint.setMaskFilter(SkMaskFilter::MakeBlur( + SkBlurStyle::kNormal_SkBlurStyle, ConvertRadiusToSigma(shadow.GetBlurRadius()))); + canvas->drawRRect(shadowRRect, paint); + } + } + } + canvas->restore(); +} + +void FlutterDecorationPainter::PaintShadow(const SkPath& path, const Shadow& shadow, SkCanvas* canvas) +{ + if (!canvas) { + LOGE("PaintShadow failed, canvas is null."); + return; + } + if (!shadow.IsValid()) { + LOGW("The current shadow is not drawn if the shadow is invalid."); + return; + } + + canvas->save(); + SkPath skPath = path; + skPath.offset(shadow.GetOffset().GetX(), shadow.GetOffset().GetY()); + SkColor spotColor = shadow.GetColor().GetValue(); + if (shadow.GetHardwareAcceleration()) { + // PlaneParams represents the coordinates of the component, and here we only need to focus on the elevation + // of the component. + SkPoint3 planeParams = { 0.0f, 0.0f, shadow.GetElevation() }; + + // LightPos is the location of a spot light source, which is by default located directly above the center + // of the component. + SkPoint3 lightPos = { skPath.getBounds().centerX(), skPath.getBounds().centerY(), shadow.GetLightHeight() }; + + // Current ambient color is not available. + SkColor ambientColor = SkColorSetARGB(0, 0, 0, 0); + SkShadowUtils::DrawShadow(canvas, skPath, planeParams, lightPos, shadow.GetLightRadius(), ambientColor, + spotColor, SkShadowFlags::kTransparentOccluder_ShadowFlag); + } else { + SkPaint paint; + paint.setColor(spotColor); + paint.setAntiAlias(true); + paint.setMaskFilter(SkMaskFilter::MakeBlur(kNormal_SkBlurStyle, ConvertRadiusToSigma(shadow.GetBlurRadius()))); + canvas->drawPath(skPath, paint); + } + canvas->restore(); +} + +void FlutterDecorationPainter::PaintImage(const Offset& offset, RenderContext& context) +{ + if (decoration_) { + RefPtr backgroundImage = decoration_->GetImage(); + if (backgroundImage && renderImage_) { + renderImage_->RenderWithContext(context, offset); + } + } +} + +void FlutterDecorationPainter::PaintGradient(const Offset& offset, SkCanvas* canvas, SkPaint& paint) +{ + // paint gradient. + Gradient gradient = decoration_->GetGradient(); + if (NearZero(paintSize_.Width()) || NearZero(paintSize_.Height())) { + return; + } + if (gradient.IsValid()) { + if (gradient.GetRepeat()) { + GetShaderForRepeat(offset, gradient, paint); + } else { + GetShaderForClamp(offset, gradient, paint); + } + canvas->drawRect( + SkRect::MakeXYWH(offset.GetX() + margin_.LeftPx(), offset.GetY() + margin_.TopPx(), + GetLayoutSize().Width() - margin_.RightPx(), GetLayoutSize().Height() - margin_.BottomPx()), + paint); + paint.reset(); + } +} + +void FlutterDecorationPainter::GetShaderForRepeat(const Offset& offset, const Gradient& gradient, SkPaint& paint) +{ + std::vector gradientColors = gradient.GetColors(); + const int32_t colorsSize = gradientColors.size(); + SkColor colors[colorsSize]; + int32_t maxPercentIndex = 0; + float pos[colorsSize]; + for (int32_t i = 0; i < colorsSize; ++i) { + const auto& gradientColor = gradientColors[i]; + colors[i] = gradientColor.GetColor().GetValue(); + if (!gradientColor.GetHasValue()) { + if (i == 0) { + pos[i] = SHADER_PERCENT_ZERO; + } else if (i == colorsSize - 1) { + pos[i] = SHADER_PERCENT_FULL; + maxPercentIndex = i; + } else { + pos[i] = SHADER_PERCENT_NONE_EXIST; + } + } else { + pos[i] = GetShaderPercent(gradientColor.GetDimension(), gradient); + if (pos[i] < pos[maxPercentIndex]) { + pos[i] = pos[maxPercentIndex]; + } + if (pos[i] > pos[maxPercentIndex]) { + maxPercentIndex = i; + } + } + } + SkPoint firstPoint = gradientColors.front().GetHasValue() + ? GetShaderStopPoint(offset, gradientColors.front().GetDimension(), gradient) + : GetGradientBeginPoint(offset, gradient); + SkPoint lastPoint = gradientColors.back().GetHasValue() + ? GetShaderStopPoint(offset, gradientColors.at(maxPercentIndex).GetDimension(), gradient) + : GetGradientEndPoint(offset, gradient); + float lastPercent = gradientColors.back().GetHasValue() + ? (GetShaderPercent(gradientColors.at(maxPercentIndex).GetDimension(), gradient) - pos[0]) + : SHADER_PERCENT_FULL; + if (NearZero(lastPercent)) { + lastPercent = SHADER_PERCENT_FULL; + } + SkPoint pts[2] = { firstPoint, lastPoint }; + RecalculatePosition(pos, colorsSize); + float firstPercent = pos[0]; + for (int32_t i = 0; i < colorsSize; ++i) { + pos[i] = (pos[i] - firstPercent) / lastPercent; + } +#ifdef USE_SYSTEM_SKIA + paint.setShader(SkGradientShader::MakeLinear(pts, colors, pos, colorsSize, SkShader::kRepeat_TileMode)); +#else + paint.setShader(SkGradientShader::MakeLinear(pts, colors, pos, colorsSize, SkTileMode::kRepeat)); +#endif +} + +void FlutterDecorationPainter::GetShaderForClamp(const Offset& offset, const Gradient& gradient, SkPaint& paint) const +{ + SkPoint beginPoint = GetGradientBeginPoint(offset, gradient); + SkPoint endPoint = GetGradientEndPoint(offset, gradient); + SkPoint pts[2] = { beginPoint, endPoint }; + std::vector gradientColors = gradient.GetColors(); + SkColor colors[gradientColors.size()]; + float pos[gradientColors.size()]; + int32_t colorsSize = gradientColors.size(); + int32_t maxPercentIndex = 0; + for (auto i = 0; i < colorsSize; ++i) { + const auto& gradientColor = gradientColors[i]; + colors[i] = gradientColor.GetColor().GetValue(); + if (gradientColor.GetHasValue()) { + pos[i] = GetShaderPercent(gradientColor.GetDimension(), gradient); + if (pos[i] < pos[maxPercentIndex]) { + pos[i] = pos[maxPercentIndex]; + } + if (pos[i] > pos[maxPercentIndex]) { + maxPercentIndex = i; + } + } else { + if (i == 0) { + pos[i] = SHADER_PERCENT_ZERO; + } else { + pos[i] = SHADER_PERCENT_NONE_EXIST; + } + } + } + RecalculatePosition(pos, colorsSize); + +#ifdef USE_SYSTEM_SKIA + paint.setShader(SkGradientShader::MakeLinear(pts, colors, pos, gradientColors.size(), SkShader::kClamp_TileMode)); +#else + paint.setShader(SkGradientShader::MakeLinear(pts, colors, pos, gradientColors.size(), SkTileMode::kClamp)); +#endif +} + +float FlutterDecorationPainter::GetShaderPercent(const Dimension& dimension, const Gradient& gradient) const +{ + float percent = 0.0f; + if (gradient.GetUseAngle()) { + double angle = std::fmod(gradient.GetAngle(), DEGREES_360); + if (angle < 0.0) { + angle = DEGREES_360 - std::abs(angle); + } + percent = SkDoubleToScalar(GetShaderPercentByAngle(dimension, angle)); + } else { + percent = SkDoubleToScalar(GetShaderPercentByDirection(dimension, gradient)); + } + if (percent < SHADER_PERCENT_ZERO) { + percent = SHADER_PERCENT_ZERO; + } + if (percent > SHADER_PERCENT_FULL) { + percent = SHADER_PERCENT_FULL; + } + return percent; +} + +double FlutterDecorationPainter::GetShaderPercentByDirection(const Dimension& dimension, const Gradient& gradient) const +{ + double stopPoint = 0.0; + switch (gradient.GetDirection()) { + case GradientDirection::LEFT: + case GradientDirection::RIGHT: + stopPoint = GetShaderPercentEq90Degrees(dimension); + break; + case GradientDirection::TOP: + case GradientDirection::BOTTOM: + stopPoint = GetShaderPercentEq0Degrees(dimension); + break; + case GradientDirection::LEFT_TOP: + case GradientDirection::RIGHT_TOP: + case GradientDirection::RIGHT_BOTTOM: + case GradientDirection::LEFT_BOTTOM: { + if (dimension.Unit() == DimensionUnit::PX || dimension.Unit() == DimensionUnit::VP) { + double hypotenuse = GetRectHypotenuse(); + if (!NearZero(hypotenuse)) { + stopPoint = NormalizeToPx(dimension) / hypotenuse; + } + } else { + stopPoint = dimension.Value() / PERCENT_TRANSLATE; + } + break; + } + default: + break; + } + return stopPoint; +} + +SkPoint FlutterDecorationPainter::GetShaderStopPoint( + const Offset& offset, const Dimension& dimension, const Gradient& gradient) const +{ + SkPoint skPoint; + if (gradient.GetUseAngle()) { + double angle = std::fmod(gradient.GetAngle(), DEGREES_360); + if (angle < 0.0) { + angle = DEGREES_360 - std::abs(angle); + } + skPoint = GetShaderStopPointByAngle(offset, dimension, angle); + } else { + skPoint = GetShaderStopPointByDirection(offset, dimension, gradient); + } + return skPoint; +} + +double FlutterDecorationPainter::GetShaderPercentByAngle(const Dimension& dimension, double angle) const +{ + double percent = 0.0; + if (NearZero(angle)) { + percent = GetShaderPercentEq0Degrees(dimension); + } else if (angle < DEGREES_90) { + double diagonalAngle = GetDiagonalAngle(angle); + percent = GetShaderPercentForAngle(dimension, angle, diagonalAngle); + } else if (NearZero(angle - DEGREES_90)) { + percent = GetShaderPercentEq90Degrees(dimension); + } else if (angle < DEGREES_180) { + double diagonalAngle = GetDiagonalAngle(angle); + percent = GetShaderPercentForAngle(dimension, angle - DEGREES_90, diagonalAngle); + } else if (NearZero(angle - DEGREES_180)) { + percent = GetShaderPercentEq0Degrees(dimension); + } else if (angle < DEGREES_270) { + double diagonalAngle = GetDiagonalAngle(angle); + percent = GetShaderPercentForAngle(dimension, angle - DEGREES_180, diagonalAngle); + } else if (NearZero(angle - DEGREES_270)) { + percent = GetShaderPercentEq90Degrees(dimension); + } else { + double diagonalAngle = GetDiagonalAngle(angle); + percent = GetShaderPercentForAngle(dimension, angle - DEGREES_270, diagonalAngle); + } + return percent; +} + +SkPoint FlutterDecorationPainter::GetShaderStopPointByDirection( + const Offset& offset, const Dimension& dimension, const Gradient& gradient) const +{ + SkPoint skPoint; + switch (gradient.GetDirection()) { + case GradientDirection::LEFT: + skPoint = GetShaderStopPointEq270Degrees(offset, dimension); + break; + case GradientDirection::LEFT_TOP: + skPoint = GetShaderStopPointLeftTop(offset, dimension); + break; + case GradientDirection::TOP: + skPoint = GetShaderStopPointEq0Degrees(offset, dimension); + break; + case GradientDirection::RIGHT_TOP: + skPoint = GetShaderStopPointRightTop(offset, dimension); + break; + case GradientDirection::RIGHT: + skPoint = GetShaderStopPointEq90Degrees(offset, dimension); + break; + case GradientDirection::RIGHT_BOTTOM: + skPoint = GetShaderStopPointRightBottom(offset, dimension); + break; + case GradientDirection::BOTTOM: + skPoint = GetShaderStopPointEq180Degrees(offset, dimension); + break; + case GradientDirection::LEFT_BOTTOM: + skPoint = GetShaderStopPointLeftBottom(offset, dimension); + break; + default: + skPoint = GetShaderStopPointEq0Degrees(offset, dimension); + LOGE("default gradient direction"); + break; + } + return skPoint; +} + +SkPoint FlutterDecorationPainter::GetShaderStopPointByAngle( + const Offset& offset, const Dimension& dimension, double angle) const +{ + SkPoint skPoint; + if (NearZero(angle)) { + skPoint = GetShaderStopPointEq0Degrees(offset, dimension); + } else if (angle < DEGREES_90) { + double diagonalAngle = GetDiagonalAngle(angle); + skPoint = GetShaderStopPointLT90Degrees(offset, dimension, angle, diagonalAngle); + } else if (NearZero(angle - DEGREES_90)) { + skPoint = GetShaderStopPointEq90Degrees(offset, dimension); + } else if (angle < DEGREES_180) { + double diagonalAngle = GetDiagonalAngle(angle); + skPoint = GetShaderStopPointLT180Degrees(offset, dimension, angle - DEGREES_90, diagonalAngle); + } else if (NearZero(angle - DEGREES_180)) { + skPoint = GetShaderStopPointEq180Degrees(offset, dimension); + } else if (angle < DEGREES_270) { + double diagonalAngle = GetDiagonalAngle(angle); + skPoint = GetShaderStopPointLT270Degrees(offset, dimension, angle - DEGREES_180, diagonalAngle); + } else if (NearZero(angle - DEGREES_270)) { + skPoint = GetShaderStopPointEq270Degrees(offset, dimension); + } else { + double diagonalAngle = GetDiagonalAngle(angle); + skPoint = GetShaderStopPointLT360Degrees(offset, dimension, angle - DEGREES_270, diagonalAngle); + } + return skPoint; +} + +SkPoint FlutterDecorationPainter::GetShaderStopPointLeftTop(const Offset& offset, const Dimension& dimension) const +{ + if (dimension.Unit() == DimensionUnit::PX || dimension.Unit() == DimensionUnit::VP) { + double hypotenuse = GetRectHypotenuse(); + double length = std::min(NormalizeToPx(dimension), hypotenuse); + if (NearZero(hypotenuse)) { + return SkPoint::Make(GetRightOffset(offset), GetBottomOffset(offset)); + } else { + return SkPoint::Make(GetRightOffset(offset) - dimension.Value() * paintSize_.Width() / hypotenuse, + GetBottomOffset(offset) - length * paintSize_.Height() / hypotenuse); + } + } else { + double percent = std::min(dimension.Value(), PERCENT_TRANSLATE); + return SkPoint::Make(GetRightOffset(offset) - dimension.Value() * paintSize_.Width() / PERCENT_TRANSLATE, + GetBottomOffset(offset) - percent * paintSize_.Height() / PERCENT_TRANSLATE); + } +} + +SkPoint FlutterDecorationPainter::GetShaderStopPointLeftBottom(const Offset& offset, const Dimension& dimension) const +{ + if (dimension.Unit() == DimensionUnit::PX || dimension.Unit() == DimensionUnit::VP) { + double hypotenuse = GetRectHypotenuse(); + double length = std::min(NormalizeToPx(dimension), hypotenuse); + if (NearZero(hypotenuse)) { + return SkPoint::Make(GetRightOffset(offset), GetTopOffset(offset)); + } else { + return SkPoint::Make(GetRightOffset(offset) - dimension.Value() * paintSize_.Width() / hypotenuse, + GetTopOffset(offset) + length * paintSize_.Height() / hypotenuse); + } + } else { + double percent = std::min(dimension.Value(), PERCENT_TRANSLATE); + return SkPoint::Make(GetRightOffset(offset) - dimension.Value() * paintSize_.Width() / PERCENT_TRANSLATE, + GetTopOffset(offset) + percent * paintSize_.Height() / PERCENT_TRANSLATE); + } +} + +SkPoint FlutterDecorationPainter::GetShaderStopPointRightTop(const Offset& offset, const Dimension& dimension) const +{ + if (dimension.Unit() == DimensionUnit::PX || dimension.Unit() == DimensionUnit::VP) { + double hypotenuse = GetRectHypotenuse(); + double length = std::min(NormalizeToPx(dimension), hypotenuse); + if (NearZero(hypotenuse)) { + return SkPoint::Make(GetLeftOffset(offset), GetBottomOffset(offset)); + } else { + return SkPoint::Make(GetLeftOffset(offset) + length * paintSize_.Width() / hypotenuse, + GetBottomOffset(offset) - dimension.Value() * paintSize_.Height() / hypotenuse); + } + } else { + double percent = std::min(dimension.Value(), PERCENT_TRANSLATE); + return SkPoint::Make(GetLeftOffset(offset) + dimension.Value() * paintSize_.Width() / PERCENT_TRANSLATE, + GetBottomOffset(offset) - percent * paintSize_.Height() / PERCENT_TRANSLATE); + } +} + +SkPoint FlutterDecorationPainter::GetShaderStopPointRightBottom(const Offset& offset, const Dimension& dimension) const +{ + if (dimension.Unit() == DimensionUnit::PX || dimension.Unit() == DimensionUnit::VP) { + double hypotenuse = GetRectHypotenuse(); + double length = std::min(NormalizeToPx(dimension), hypotenuse); + if (NearZero(hypotenuse)) { + return SkPoint::Make(GetLeftOffset(offset), GetTopOffset(offset)); + } else { + return SkPoint::Make(GetLeftOffset(offset) + dimension.Value() * paintSize_.Width() / hypotenuse, + GetTopOffset(offset) + length * paintSize_.Height() / hypotenuse); + } + } else { + double percent = std::min(dimension.Value(), PERCENT_TRANSLATE); + return SkPoint::Make(GetLeftOffset(offset) + dimension.Value() * paintSize_.Width() / PERCENT_TRANSLATE, + GetTopOffset(offset) + percent * paintSize_.Height() / PERCENT_TRANSLATE); + } +} + +double FlutterDecorationPainter::GetShaderPercentEq0Degrees(const Dimension& dimension) const +{ + if (dimension.Unit() == DimensionUnit::PX || dimension.Unit() == DimensionUnit::VP) { + return NormalizeToPx(dimension) / paintSize_.Height(); + } else { + return dimension.Value() / PERCENT_TRANSLATE; + } +} + +double FlutterDecorationPainter::GetShaderPercentEq90Degrees(const Dimension& dimension) const +{ + if (dimension.Unit() == DimensionUnit::PX || dimension.Unit() == DimensionUnit::VP) { + return NormalizeToPx(dimension) / paintSize_.Width(); + } else { + return dimension.Value() / PERCENT_TRANSLATE; + } +} + +SkPoint FlutterDecorationPainter::GetShaderStopPointEq0Degrees(const Offset& offset, const Dimension& dimension) const +{ + if (dimension.Unit() == DimensionUnit::PX || dimension.Unit() == DimensionUnit::VP) { + double length = std::min(NormalizeToPx(dimension), paintSize_.Height()); + return SkPoint::Make(GetLeftOffset(offset), GetBottomOffset(offset) - length); + } else { + double percent = std::min(dimension.Value(), PERCENT_TRANSLATE); + return SkPoint::Make( + GetLeftOffset(offset), GetBottomOffset(offset) - percent * paintSize_.Height() / PERCENT_TRANSLATE); + } +} + +SkPoint FlutterDecorationPainter::GetShaderStopPointEq90Degrees(const Offset& offset, const Dimension& dimension) const +{ + if (dimension.Unit() == DimensionUnit::PX || dimension.Unit() == DimensionUnit::VP) { + double length = std::min(NormalizeToPx(dimension), paintSize_.Width()); + return SkPoint::Make(GetLeftOffset(offset) + length, GetTopOffset(offset)); + } else { + double percent = std::min(dimension.Value(), PERCENT_TRANSLATE); + return SkPoint::Make( + GetLeftOffset(offset) + percent * paintSize_.Width() / PERCENT_TRANSLATE, GetTopOffset(offset)); + } +} + +SkPoint FlutterDecorationPainter::GetShaderStopPointEq180Degrees(const Offset& offset, const Dimension& dimension) const +{ + if (dimension.Unit() == DimensionUnit::PX || dimension.Unit() == DimensionUnit::VP) { + double length = std::min(NormalizeToPx(dimension), paintSize_.Height()); + return SkPoint::Make(GetLeftOffset(offset), GetTopOffset(offset) + length); + } else { + double percent = std::min(dimension.Value(), PERCENT_TRANSLATE); + return SkPoint::Make( + GetLeftOffset(offset), GetTopOffset(offset) + percent * paintSize_.Height() / PERCENT_TRANSLATE); + } +} + +SkPoint FlutterDecorationPainter::GetShaderStopPointEq270Degrees(const Offset& offset, const Dimension& dimension) const +{ + if (dimension.Unit() == DimensionUnit::PX || dimension.Unit() == DimensionUnit::VP) { + double length = std::min(NormalizeToPx(dimension), paintSize_.Width()); + return SkPoint::Make(GetRightOffset(offset) - length, GetTopOffset(offset)); + } else { + double percent = std::min(dimension.Value(), PERCENT_TRANSLATE); + return SkPoint::Make( + GetRightOffset(offset) - percent * paintSize_.Width() / PERCENT_TRANSLATE, GetTopOffset(offset)); + } +} + +SkPoint FlutterDecorationPainter::GetShaderStopPointLT90Degrees( + const Offset& offset, const Dimension& dimension, double angle, double diagonalAngle) const +{ + double hypotenuse = GetHypotenuse(dimension, angle, diagonalAngle); + return SkPoint::Make(GetLeftOffset(offset) + hypotenuse * std::sin(SkDegreesToRadians(angle)), + GetBottomOffset(offset) - hypotenuse * std::sin(SkDegreesToRadians(DEGREES_90 - angle))); +} + +SkPoint FlutterDecorationPainter::GetShaderStopPointLT180Degrees( + const Offset& offset, const Dimension& dimension, double angle, double diagonalAngle) const +{ + double hypotenuse = GetHypotenuse(dimension, angle, diagonalAngle); + return SkPoint::Make(GetLeftOffset(offset) + hypotenuse * std::sin(SkDegreesToRadians(DEGREES_90 - angle)), + GetTopOffset(offset) + hypotenuse * std::sin(SkDegreesToRadians(angle))); +} + +SkPoint FlutterDecorationPainter::GetShaderStopPointLT270Degrees( + const Offset& offset, const Dimension& dimension, double angle, double diagonalAngle) const +{ + double hypotenuse = GetHypotenuse(dimension, angle, diagonalAngle); + return SkPoint::Make(GetRightOffset(offset) - hypotenuse * std::sin(SkDegreesToRadians(angle)), + GetTopOffset(offset) + hypotenuse * std::sin(SkDegreesToRadians(DEGREES_90 - angle))); +} + +SkPoint FlutterDecorationPainter::GetShaderStopPointLT360Degrees( + const Offset& offset, const Dimension& dimension, double angle, double diagonalAngle) const +{ + double hypotenuse = GetHypotenuse(dimension, angle, diagonalAngle); + return SkPoint::Make(GetRightOffset(offset) - hypotenuse * std::sin(SkDegreesToRadians(DEGREES_90 - angle)), + GetBottomOffset(offset) - hypotenuse * std::sin(SkDegreesToRadians(angle))); +} + +double FlutterDecorationPainter::GetHypotenuse(const Dimension& dimension, double angle, double diagonalAngle) const +{ + if (dimension.Unit() == DimensionUnit::PX || dimension.Unit() == DimensionUnit::VP) { + return std::min(NormalizeToPx(dimension), GetRectHypotenuse()); + } else { + double percent = std::min(dimension.Value(), PERCENT_TRANSLATE); + double hypotenuseAngle = GetHypotenuseAngle(angle, diagonalAngle); + return sin(SkDegreesToRadians(hypotenuseAngle)) * percent * + std::sqrt(paintSize_.Width() * paintSize_.Width() + paintSize_.Height() * paintSize_.Height()) / + PERCENT_TRANSLATE; + } +} + +double FlutterDecorationPainter::GetDiagonalAngle(double angle) const +{ + double diagonalAngle; + if (angle < DEGREES_90) { + diagonalAngle = SkRadiansToDegrees(std::atan(paintSize_.Height() / paintSize_.Width())); + } else if (angle < DEGREES_180) { + diagonalAngle = SkRadiansToDegrees(std::atan(paintSize_.Width() / paintSize_.Height())); + } else if (angle < DEGREES_270) { + diagonalAngle = SkRadiansToDegrees(std::atan(paintSize_.Height() / paintSize_.Width())); + } else { + diagonalAngle = SkRadiansToDegrees(std::atan(paintSize_.Width() / paintSize_.Height())); + } + return diagonalAngle; +} + +double FlutterDecorationPainter::GetHypotenuseAngle(double angle, double diagonalAngle) const +{ + double hypotenuseAngle; + if (angle < (DEGREES_90 - diagonalAngle)) { + hypotenuseAngle = diagonalAngle + angle; + } else if (angle > (DEGREES_90 - diagonalAngle)) { + hypotenuseAngle = DEGREES_180 - diagonalAngle - angle; + } else { + hypotenuseAngle = DEGREES_90; + } + return hypotenuseAngle; +} + +double FlutterDecorationPainter::GetShaderPercentForAngle( + const Dimension& dimension, double angle, double diagonalAngle) const +{ + if (dimension.IsValid()) { + if (dimension.Unit() == DimensionUnit::PX || dimension.Unit() == DimensionUnit::VP) { + double hypotenuseAngle = GetHypotenuseAngle(angle, diagonalAngle); + double hypotenuse = GetRectHypotenuse(); + double sinValue = sin(SkDegreesToRadians(hypotenuseAngle)); + if (NearZero(sinValue) || NearZero(hypotenuse)) { + return SHADER_PERCENT_ZERO; + } + return NormalizeToPx(dimension) / sinValue / hypotenuse; + } else { + return SkDoubleToScalar(dimension.Value() / PERCENT_TRANSLATE); + } + } else { + return SHADER_PERCENT_ZERO; + } +} + +SkPoint FlutterDecorationPainter::GetGradientBeginPoint(const Offset& offset, const Gradient& gradient) const +{ + SkPoint skPoint; + if (gradient.GetUseAngle()) { + double angle = std::fmod(gradient.GetAngle(), DEGREES_360); + if (angle < 0.0) { + angle = DEGREES_360 - std::abs(angle); + } + skPoint = GetBeginPointByAngle(offset, angle); + } else { + skPoint = GetBeginPointByDirection(offset, gradient); + } + return skPoint; +} + +SkPoint FlutterDecorationPainter::GetBeginPointByAngle(const Offset& offset, double angle) const +{ + SkPoint skPoint; + if (NearZero(angle)) { + skPoint = SkPoint::Make(GetLeftOffset(offset), GetBottomOffset(offset)); + } else if (angle < DEGREES_90) { + skPoint = SkPoint::Make(GetLeftOffset(offset), GetBottomOffset(offset)); + } else if (NearZero(angle - DEGREES_90)) { + skPoint = SkPoint::Make(GetLeftOffset(offset), GetTopOffset(offset)); + } else if (angle < DEGREES_180) { + skPoint = SkPoint::Make(GetLeftOffset(offset), GetTopOffset(offset)); + } else if (NearZero(angle - DEGREES_180)) { + skPoint = SkPoint::Make(GetLeftOffset(offset), GetTopOffset(offset)); + } else if (angle < DEGREES_270) { + skPoint = SkPoint::Make(GetRightOffset(offset), GetTopOffset(offset)); + } else if (NearZero(angle - DEGREES_270)) { + skPoint = SkPoint::Make(GetRightOffset(offset), GetTopOffset(offset)); + } else if (angle < DEGREES_360) { + skPoint = SkPoint::Make(GetRightOffset(offset), GetBottomOffset(offset)); + } else { + skPoint = SkPoint::Make(GetLeftOffset(offset), GetBottomOffset(offset)); + } + return skPoint; +} + +SkPoint FlutterDecorationPainter::GetBeginPointByDirection(const Offset& offset, const Gradient& gradient) const +{ + double beginX = 0.0; + double beginY = 0.0; + switch (gradient.GetDirection()) { + case GradientDirection::LEFT: + beginX = GetRightOffset(offset); + beginY = GetTopOffset(offset); + break; + case GradientDirection::LEFT_TOP: + beginX = GetRightOffset(offset); + beginY = GetBottomOffset(offset); + break; + case GradientDirection::TOP: + case GradientDirection::RIGHT_TOP: + beginX = GetLeftOffset(offset); + beginY = GetBottomOffset(offset); + break; + case GradientDirection::RIGHT: + beginX = GetLeftOffset(offset); + beginY = GetTopOffset(offset); + break; + case GradientDirection::RIGHT_BOTTOM: + case GradientDirection::BOTTOM: + beginX = GetLeftOffset(offset); + beginY = GetTopOffset(offset); + break; + case GradientDirection::LEFT_BOTTOM: + beginX = GetRightOffset(offset); + beginY = GetTopOffset(offset); + break; + default: + break; + } + return SkPoint::Make(SkDoubleToScalar(beginX), SkDoubleToScalar(beginY)); +} + +SkPoint FlutterDecorationPainter::GetGradientEndPoint(const Offset& offset, const Gradient& gradient) const +{ + Dimension endDimension = Dimension(PERCENT_TRANSLATE, DimensionUnit::PERCENT); + return GetShaderStopPoint(offset, endDimension, gradient); +} + +void FlutterDecorationPainter::RecalculatePosition(float pos[], int32_t colorsSize) const +{ + float preview = SHADER_PERCENT_ZERO; + int32_t num = 0; + for (int32_t i = 0; i < colorsSize; ++i) { + if (pos[i] == SHADER_PERCENT_NONE_EXIST) { + if (i == 0) { + pos[i] = SHADER_PERCENT_ZERO; + } else if (i == colorsSize - 1) { + pos[i] = SHADER_PERCENT_FULL; + } else { + if (num == 0) { + preview = pos[i - 1]; + } + num++; + } + } + if (pos[i] != SHADER_PERCENT_NONE_EXIST && num > 0) { + float avgPercent = (pos[i] - preview) / SkIntToFloat(num + 1); + for (int32_t j = i - num; j < i; ++j) { + pos[j] = pos[j - 1] + avgPercent; + } + preview = SHADER_PERCENT_ZERO; + num = 0; + } + } +} + +double FlutterDecorationPainter::GetRectHypotenuse() const +{ + return std::sqrt(paintSize_.Width() * paintSize_.Width() + paintSize_.Height() * paintSize_.Height()); +} + +float FlutterDecorationPainter::ConvertRadiusToSigma(float radius) +{ + return radius > 0.0f ? BLUR_SIGMA_SCALE * radius + SK_ScalarHalf : 0.0f; +} + +bool FlutterDecorationPainter::CheckBorderAllEqual(const Border& border) +{ + if (CheckBorderEdgeForRRect(border)) { + Color leftColor = border.Left().GetColor(); + return leftColor == border.Top().GetColor() && leftColor == border.Right().GetColor() && + leftColor == border.Bottom().GetColor(); + } + return false; +} + +bool FlutterDecorationPainter::CheckBorderEdgeForRRect(const Border& border) +{ + double leftWidth = NormalizeToPx(border.Left().GetWidth()); + if (NearEqual(leftWidth, NormalizeToPx(border.Top().GetWidth())) && + NearEqual(leftWidth, NormalizeToPx(border.Right().GetWidth())) && + NearEqual(leftWidth, NormalizeToPx(border.Bottom().GetWidth()))) { + BorderStyle leftStyle = border.Left().GetBorderStyle(); + return leftStyle == border.Top().GetBorderStyle() && leftStyle == border.Right().GetBorderStyle() && + leftStyle == border.Bottom().GetBorderStyle(); + } + return false; +} + +double FlutterDecorationPainter::GetLeftOffset(const Offset& offset) const +{ + return offset.GetX() + margin_.LeftPx(); +} + +double FlutterDecorationPainter::GetRightOffset(const Offset& offset) const +{ + return offset.GetX() + GetLayoutSize().Width() - margin_.RightPx(); +} + +double FlutterDecorationPainter::GetTopOffset(const Offset& offset) const +{ + return offset.GetY() + margin_.TopPx(); +} + +double FlutterDecorationPainter::GetBottomOffset(const Offset& offset) const +{ + return offset.GetY() + GetLayoutSize().Height() - margin_.BottomPx(); +} + +double FlutterDecorationPainter::NormalizeToPx(const Dimension& dimension) const +{ + if ((dimension.Unit() == DimensionUnit::VP) || (dimension.Unit() == DimensionUnit::FP)) { + return (dimension.Value() * dipScale_); + } + return dimension.Value(); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/common/painter/flutter_decoration_painter.h b/frameworks/core/components/common/painter/flutter_decoration_painter.h new file mode 100644 index 00000000..31c309d7 --- /dev/null +++ b/frameworks/core/components/common/painter/flutter_decoration_painter.h @@ -0,0 +1,180 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_PAINTER_FLUTTER_DECORATION_PAINTER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_PAINTER_FLUTTER_DECORATION_PAINTER_H + +#include "flutter/lib/ui/ui_dart_state.h" + +#include "base/memory/ace_type.h" +#include "base/utils/utils.h" +#include "core/components/common/layout/constants.h" +#include "core/components/common/properties/border.h" +#include "core/components/common/properties/border_edge.h" +#include "core/components/common/properties/decoration.h" +#include "core/components/common/properties/edge.h" +#include "core/components/image/render_image.h" +#include "core/pipeline/base/flutter_render_context.h" +#include "core/pipeline/layers/clip_layer.h" + +namespace flutter { +class Canvas; +class Paint; +class PaintData; +} // namespace flutter + +namespace OHOS::Ace { + +class Border; +class Offset; +class Size; + +class FlutterDecorationPainter : public virtual AceType { + DECLARE_ACE_TYPE(FlutterDecorationPainter, AceType); + +public: + FlutterDecorationPainter( + const RefPtr& decoration, const Rect& paintRect, const Size& paintSize, double dipScale); + ~FlutterDecorationPainter() override = default; + + static void PaintShadow(const SkPath& path, const Shadow& shadow, SkCanvas* canvas); + + static float ConvertRadiusToSigma(float radius); + + void PaintDecoration(const Offset& offset, SkCanvas* canvas, RenderContext& context); + + void PaintBoxShadows(const SkRRect& rrect, const std::vector& shadows, SkCanvas* canvas); + + void PaintBlur(const flutter::RRect& outerRRect, SkCanvas* canvas, const Dimension& blurRadius); + + flutter::RRect GetBoxOuterRRect(const Offset& offset); + + void SetAlpha(uint8_t opacity) + { + opacity_ = opacity; + } + + void SetMargin(const EdgePx& margin) + { + margin_ = margin; + } + + void SetRenderImage(const RefPtr& renderImage) + { + renderImage_ = renderImage; + } + + void SetClipLayer(const RefPtr& clipLayer) + { + clipLayer_ = clipLayer; + } + + void SetDecoration(const RefPtr& decoration) + { + decoration_ = decoration; + } + + flutter::RRect GetBoxRRect(const Offset& offset, const Border& border, double shrinkFactor, bool isRound); + +protected: + void PaintColorAndImage(const Offset& offset, SkCanvas* canvas, SkPaint& paint, RenderContext& context); + + void PaintAllEqualBorder(const flutter::RRect& rrect, const Border& border, SkCanvas* canvas, SkPaint& paint); + + void SetBorderStyle(const BorderEdge& borderEdge, SkPaint& paint, bool useDefaultColor = false); + + void PaintBorder(const Offset& offset, const Border& border, SkCanvas* canvas, SkPaint& paint); + + void PaintImage(const Offset& offset, RenderContext& context); + + void PaintGradient(const Offset& offset, SkCanvas* canvas, SkPaint& paint); + + void GetShaderForRepeat(const Offset& offset, const Gradient& gradient, SkPaint& paint); + void GetShaderForClamp(const Offset& offset, const Gradient& gradient, SkPaint& paint) const; + + float GetShaderPercent(const Dimension& dimension, const Gradient& gradient) const; + SkPoint GetShaderStopPoint(const Offset& offset, const Dimension& dimension, const Gradient& gradient) const; + + double GetShaderPercentByDirection(const Dimension& dimension, const Gradient& gradient) const; + double GetShaderPercentByAngle(const Dimension& dimension, double angle) const; + SkPoint GetShaderStopPointByAngle(const Offset& offset, const Dimension& dimension, double angle) const; + SkPoint GetBeginPointByAngle(const Offset& offset, double angle) const; + SkPoint GetBeginPointByDirection(const Offset& offset, const Gradient& gradient) const; + SkPoint GetShaderStopPointByDirection( + const Offset& offset, const Dimension& dimension, const Gradient& gradient) const; + SkPoint GetShaderStopPointLeftTop(const Offset& offset, const Dimension& dimension) const; + SkPoint GetShaderStopPointLeftBottom(const Offset& offset, const Dimension& dimension) const; + SkPoint GetShaderStopPointRightTop(const Offset& offset, const Dimension& dimension) const; + SkPoint GetShaderStopPointRightBottom(const Offset& offset, const Dimension& dimension) const; + + double GetShaderPercentEq0Degrees(const Dimension& dimension) const; + double GetDiagonalAngle(double angle) const; + double GetShaderPercentForAngle(const Dimension& dimension, double diagonalAngle, double angle) const; + double GetShaderPercentEq90Degrees(const Dimension& dimension) const; + + SkPoint GetShaderStopPointEq0Degrees(const Offset& offset, const Dimension& dimension) const; + SkPoint GetShaderStopPointEq90Degrees(const Offset& offset, const Dimension& dimension) const; + SkPoint GetShaderStopPointEq180Degrees(const Offset& offset, const Dimension& dimension) const; + SkPoint GetShaderStopPointEq270Degrees(const Offset& offset, const Dimension& dimension) const; + SkPoint GetShaderStopPointLT90Degrees( + const Offset& offset, const Dimension& dimension, double angle, double diagonalAngle) const; + SkPoint GetShaderStopPointLT180Degrees( + const Offset& offset, const Dimension& dimension, double angle, double diagonalAngle) const; + SkPoint GetShaderStopPointLT270Degrees( + const Offset& offset, const Dimension& dimension, double angle, double diagonalAngle) const; + SkPoint GetShaderStopPointLT360Degrees( + const Offset& offset, const Dimension& dimension, double angle, double diagonalAngle) const; + + double GetLeftOffset(const Offset& offset) const; + double GetRightOffset(const Offset& offset) const; + double GetTopOffset(const Offset& offset) const; + double GetBottomOffset(const Offset& offset) const; + + SkPoint GetGradientBeginPoint(const Offset& offset, const Gradient& gradient) const; + SkPoint GetGradientEndPoint(const Offset& offset, const Gradient& gradient) const; + + double GetRectHypotenuse() const; + double GetHypotenuse(const Dimension& dimension, double diagonalAngle, double angle) const; + double GetHypotenuseAngle(double angle, double diagonalAngle) const; + + void RecalculatePosition(float pos[], int32_t colorsSize) const; + + bool CheckBorderAllEqual(const Border& border); + + bool CheckBorderEdgeForRRect(const Border& border); + + double NormalizeToPx(const Dimension& dimension) const; + + Size GetLayoutSize() const + { + return paintRect_.GetSize(); + } + + double dipScale_ = 1.0; + Rect paintRect_; + + RefPtr decoration_; + Size paintSize_; // exclude margin + EdgePx margin_; + double scale_ = 0.0; + uint8_t opacity_ = UINT8_MAX; + + RefPtr renderImage_; + RefPtr clipLayer_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_PAINTER_FLUTTER_DECORATION_PAINTER_H diff --git a/frameworks/core/components/common/painter/flutter_scroll_bar_painter.cpp b/frameworks/core/components/common/painter/flutter_scroll_bar_painter.cpp new file mode 100644 index 00000000..be958d89 --- /dev/null +++ b/frameworks/core/components/common/painter/flutter_scroll_bar_painter.cpp @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/common/painter/flutter_scroll_bar_painter.h" + +#include + +namespace OHOS::Ace { +namespace { + +constexpr double FULL_ALPHA = 255.0; + +} // namespace + +void FlutterScrollBarPainter::PaintBar(flutter::Canvas* canvas, const Offset& offset, const Rect& paintRect, + const RefPtr& scrollBar, const Offset& globalOffset, int32_t alpha) +{ + if ((canvas != nullptr) && scrollBar && scrollBar->NeedScrollBar()) { + if (scrollBar->GetShapeMode() == ShapeMode::RECT) { + PaintRectBar(canvas, offset, scrollBar, alpha); + } else { + PaintCircleBar(canvas, globalOffset, paintRect, scrollBar); + } + } +} + +void FlutterScrollBarPainter::PaintCircleBar( + flutter::Canvas* canvas, const Offset& offset, const Rect& paintRect, const RefPtr& scrollBar) +{ + auto skCanvas = canvas->canvas(); + if (skCanvas && scrollBar->GetTrickSweepAngle() > 0.0) { + SkPaint paint; + paint.setBlendMode(SkBlendMode::kSrcOver); + paint.setAntiAlias(true); + paint.setStyle(SkPaint::Style::kStroke_Style); + paint.setStrokeWidth(scrollBar->GetNormalWidthToPx()); + paint.setStrokeCap(SkPaint::kRound_Cap); + + auto rootSize = scrollBar->GetRootSize(); + // do not draw scrollbar when central is out of scroll viewport + if (rootSize.Height() * SK_ScalarHalf < offset.GetY() || + rootSize.Height() * SK_ScalarHalf > offset.GetY() + paintRect.Height()) { + return; + } + double scrollBarWidth = scrollBar->GetNormalWidthToPx(); + double diameter = rootSize.Width() - scrollBarWidth; + SkRect arcRect = SkRect::MakeXYWH(scrollBarWidth * SK_ScalarHalf, + scrollBarWidth * SK_ScalarHalf, diameter, diameter); + // paint background + double deltaAngle = scrollBar->GetBottomAngle() - scrollBar->GetTopAngle(); + paint.setColor(scrollBar->GetBackgroundColor().GetValue()); + if (scrollBar->GetPositionMode() == PositionMode::LEFT) { + skCanvas->drawArc(arcRect, deltaAngle * SK_ScalarHalf - STRAIGHT_ANGLE, -deltaAngle, false, paint); + } else { + skCanvas->drawArc(arcRect, -deltaAngle * SK_ScalarHalf, deltaAngle, false, paint); + } + + // paint foreground + paint.setColor(scrollBar->GetForegroundColor().GetValue()); + skCanvas->drawArc(arcRect, scrollBar->GetTrickStartAngle(), scrollBar->GetTrickSweepAngle(), false, paint); + } +} + +void FlutterScrollBarPainter::PaintRectBar( + flutter::Canvas* canvas, const Offset& offset, const RefPtr& scrollBar, int32_t alpha) +{ + auto skCanvas = canvas->canvas(); + Rect activeRect = scrollBar->GetActiveRect(); + Rect barRect = scrollBar->GetBarRect(); + if (skCanvas && !NearZero(activeRect.Height()) && !NearZero(barRect.Height())) { + SkPaint paint; + paint.setBlendMode(SkBlendMode::kSrcOver); + paint.setAntiAlias(true); + paint.setStyle(SkPaint::Style::kStrokeAndFill_Style); + paint.setStrokeCap(SkPaint::kRound_Cap); + + // paint background + SkRect backgroundRect = SkRect::MakeLTRB(barRect.Left(), barRect.Top(), barRect.Right(), barRect.Bottom()); + paint.setColor(scrollBar->GetBackgroundColor().GetValue()); + double filletRadius = backgroundRect.width() * SK_ScalarHalf; + skCanvas->drawRoundRect(backgroundRect, filletRadius, filletRadius, paint); + + // paint foreground + paint.setColor(scrollBar->GetForegroundColor().BlendOpacity(alpha / FULL_ALPHA).GetValue()); + SkRect foregroundRect = + SkRect::MakeLTRB(activeRect.Left(), activeRect.Top(), activeRect.Right(), activeRect.Bottom()); + skCanvas->drawRoundRect(foregroundRect, filletRadius, filletRadius, paint); + } +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/common/painter/flutter_scroll_bar_painter.h b/frameworks/core/components/common/painter/flutter_scroll_bar_painter.h new file mode 100644 index 00000000..10452b18 --- /dev/null +++ b/frameworks/core/components/common/painter/flutter_scroll_bar_painter.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_PAINTER_FLUTTER_SCROLL_BAR_PAINTER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_PAINTER_FLUTTER_SCROLL_BAR_PAINTER_H + +#include "base/memory/ace_type.h" +#include "base/utils/utils.h" +#include "core/components/common/properties/scroll_bar.h" +#include "core/pipeline/base/flutter_render_context.h" + +namespace OHOS::Ace { + +class FlutterScrollBarPainter : public virtual AceType { + DECLARE_ACE_TYPE(FlutterScrollBarPainter, AceType); + +public: + FlutterScrollBarPainter() = default; + ~FlutterScrollBarPainter() = default; + + void PaintBar(flutter::Canvas* canvas, const Offset& offset, const Rect& paintRect, + const RefPtr& scrollBar, const Offset& globalOffset, int32_t alpha); + +private: + void PaintCircleBar( + flutter::Canvas* canvas, const Offset& offset, const Rect& paintRect, const RefPtr& scrollBar); + void PaintRectBar(flutter::Canvas* canvas, const Offset& offset, const RefPtr& scrollBar, int32_t alpha); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_PAINTER_FLUTTER_SCROLL_BAR_PAINTER_H diff --git a/frameworks/core/components/common/painter/flutter_scroll_fade_painter.cpp b/frameworks/core/components/common/painter/flutter_scroll_fade_painter.cpp new file mode 100644 index 00000000..78932f02 --- /dev/null +++ b/frameworks/core/components/common/painter/flutter_scroll_fade_painter.cpp @@ -0,0 +1,111 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/common/painter/flutter_scroll_fade_painter.h" + +#include "flutter/lib/ui/text/paragraph_builder.h" + +#include "base/geometry/rect.h" +#include "base/log/log.h" +#include "core/pipeline/base/flutter_render_context.h" + +namespace OHOS::Ace { +namespace { + +constexpr double WIDTH_TO_HEIGHT_FACTOR = 0.20096; // (3.0 / 4.0) * (2.0 - std::sqrt(3)); +constexpr double PI_OVER_2 = 1.5707963; // 3.1415926 / 2.0; + +} // namespace + +RefPtr ScrollFadePainter::CreatePainter() +{ + return AceType::MakeRefPtr(); +} + +void FlutterScrollFadePainter::Paint(flutter::Canvas* canvas, const Size& size, const Offset& offset) +{ + if (canvas == nullptr || NearZero(opacity_) || size.IsEmpty()) { + return; + } + + LOGD("ScrollFadePainter: opacity_(%{public}lf), scaleFactor(%{public}lf)", opacity_, scaleFactor_); + double baseGlowScale = size.Width() > size.Height() ? size.Height() / size.Width() : 1.0; + double radius = size.Width() * 3.0 / 2.0; + double height = std::min(size.Height(), size.Width() * WIDTH_TO_HEIGHT_FACTOR); + double scaleH = scaleFactor_ * baseGlowScale; + const auto& clipRect = Rect(Offset::Zero(), Size(size.Width(), height)); + Offset center = Offset(size.Width() / 2.0, height - radius); + LOGD("center(%{public}lf, %{public}lf), radius(%{public}lf)", center.GetX(), center.GetY(), radius); + + flutter::Paint painter; + flutter::PaintData paintData; + painter.paint()->setColor(color_.GetValue()); + painter.paint()->setAlphaf(opacity_); + painter.paint()->setBlendMode(SkBlendMode::kSrcOver); + + canvas->save(); + canvas->scale(1.0, scaleH); + canvas->clipRect(clipRect.Left(), clipRect.Top(), clipRect.Right(), clipRect.Bottom(), SkClipOp::kIntersect); + canvas->drawCircle(center.GetX(), center.GetY(), radius, painter, paintData); + canvas->restore(); +} + +void FlutterScrollFadePainter::PaintSide(RenderContext& context, const Size& size, const Offset& offset) +{ + const auto renderContext = static_cast(&context); + if (!renderContext) { + return; + } + flutter::Canvas* canvas = renderContext->GetCanvas(); + if (canvas == nullptr) { + return; + } + switch (direction_) { + case OverScrollDirection::UP: + canvas->save(); + canvas->translate(offset.GetX(), offset.GetY()); + Paint(canvas, size, offset); + canvas->restore(); + break; + case OverScrollDirection::DOWN: + canvas->save(); + canvas->translate(offset.GetX(), offset.GetY()); + canvas->translate(0.0, size.Height()); + canvas->scale(1.0, -1.0); + Paint(canvas, size, offset); + canvas->restore(); + break; + case OverScrollDirection::LEFT: + canvas->save(); + canvas->translate(offset.GetX(), offset.GetY()); + canvas->rotate(PI_OVER_2); + canvas->scale(1.0, -1.0); + Paint(canvas, Size(size.Height(), size.Width()), offset); + canvas->restore(); + break; + case OverScrollDirection::RIGHT: + canvas->save(); + canvas->translate(offset.GetX(), offset.GetY()); + canvas->translate(size.Width(), 0.0); + canvas->rotate(PI_OVER_2); + Paint(canvas, Size(size.Height(), size.Width()), offset); + canvas->restore(); + break; + default: + break; + } +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/common/painter/flutter_scroll_fade_painter.h b/frameworks/core/components/common/painter/flutter_scroll_fade_painter.h new file mode 100644 index 00000000..4b5339bf --- /dev/null +++ b/frameworks/core/components/common/painter/flutter_scroll_fade_painter.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_PAINTER_FLUTTER_SCROLL_FADE_PAINTER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_PAINTER_FLUTTER_SCROLL_FADE_PAINTER_H + +#include "base/geometry/offset.h" +#include "base/geometry/size.h" +#include "base/memory/ace_type.h" +#include "core/components/common/properties/color.h" +#include "core/components/scroll/scroll_fade_painter.h" +#include "core/pipeline/base/render_context.h" + +namespace flutter { +class Canvas; +class Paint; +class PaintData; +} // namespace flutter + +namespace OHOS::Ace { + +class FlutterScrollFadePainter : public ScrollFadePainter { +public: + void PaintSide(RenderContext& context, const Size& size, const Offset& offset) override; + +private: + void Paint(flutter::Canvas* canvas, const Size& size, const Offset& offset); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_PAINTER_FLUTTER_SCROLL_FADE_PAINTER_H diff --git a/frameworks/core/components/common/painter/flutter_svg_painter.cpp b/frameworks/core/components/common/painter/flutter_svg_painter.cpp new file mode 100644 index 00000000..3ed16f98 --- /dev/null +++ b/frameworks/core/components/common/painter/flutter_svg_painter.cpp @@ -0,0 +1,342 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/common/painter/flutter_svg_painter.h" + +#include "include/core/SkColor.h" +#include "include/core/SkPathMeasure.h" +#include "include/core/SkRSXform.h" +#include "include/core/SkTextBlob.h" +#include "include/effects/SkDashPathEffect.h" +#include "include/utils/SkParsePath.h" + +#include "frameworks/core/components/transform/flutter_render_transform.h" + +namespace OHOS::Ace { + +namespace { + +constexpr int32_t COL_INDEX = 2; +constexpr int32_t ROW_INDEX = 3; +constexpr float ROTATE_VALUE = 0.0005f; +constexpr float FLAT_ANGLE = 180.0f; +const char ROTATE_TYPE_AUTO[] = "auto"; +const char ROTATE_TYPE_REVERSE[] = "auto-reverse"; +const char FONT_TYPE_HWCHINESE[] = "/system/fonts/HwChinese-Medium.ttf"; +const char FONT_TYPE_DROIDSANS[] = "/system/fonts/DroidSans.ttf"; + +} // namespace + +sk_sp FlutterSvgPainter::fontTypeChinese_ = SkTypeface::MakeFromFile(FONT_TYPE_HWCHINESE); +sk_sp FlutterSvgPainter::fontTypeNormal_ = SkTypeface::MakeFromFile(FONT_TYPE_DROIDSANS); + +void FlutterSvgPainter::SetFillStyle(SkPaint& skPaint, const FillState& fillState, uint8_t opacity) +{ + skPaint.setStyle(SkPaint::Style::kFill_Style); + skPaint.setColor(fillState.GetColor().GetValue()); + skPaint.setAlphaf(fillState.GetOpacity() * opacity * (1.0f / UINT8_MAX)); + skPaint.setAntiAlias(true); +} + +void FlutterSvgPainter::SetFillStyle( + SkCanvas* skCanvas, const SkPath& skPath, const FillState& fillState, uint8_t opacity) +{ + SkPaint paint; + SetFillStyle(paint, fillState, opacity); + skCanvas->drawPath(skPath, paint); +} + +void FlutterSvgPainter::SetStrokeStyle(SkPaint& skPaint, const StrokeState& strokeState, uint8_t opacity) +{ + skPaint.setStyle(SkPaint::Style::kStroke_Style); + skPaint.setColor(strokeState.GetColor().GetValue()); + if (strokeState.GetLineCap() == LineCapStyle::ROUND) { + skPaint.setStrokeCap(SkPaint::Cap::kRound_Cap); + } else if (strokeState.GetLineCap() == LineCapStyle::SQUARE) { + skPaint.setStrokeCap(SkPaint::Cap::kSquare_Cap); + } else { + skPaint.setStrokeCap(SkPaint::Cap::kButt_Cap); + } + if (strokeState.GetLineJoin() == LineJoinStyle::ROUND) { + skPaint.setStrokeJoin(SkPaint::Join::kRound_Join); + } else if (strokeState.GetLineJoin() == LineJoinStyle::BEVEL) { + skPaint.setStrokeJoin(SkPaint::Join::kBevel_Join); + } else { + skPaint.setStrokeJoin(SkPaint::Join::kMiter_Join); + } + skPaint.setStrokeWidth(static_cast(strokeState.GetLineWidth().Value())); + skPaint.setStrokeMiter(static_cast(strokeState.GetMiterLimit())); + skPaint.setAlphaf(strokeState.GetOpacity() * opacity * (1.0f / UINT8_MAX)); + skPaint.setAntiAlias(true); + UpdateLineDash(skPaint, strokeState); +} + +void FlutterSvgPainter::SetStrokeStyle( + SkCanvas* skCanvas, const SkPath& skPath, const StrokeState& strokeState, uint8_t opacity) +{ + SkPaint paint; + SetStrokeStyle(paint, strokeState, opacity); + skCanvas->drawPath(skPath, paint); +} + +void FlutterSvgPainter::UpdateLineDash(SkPaint& paint, const StrokeState& strokeState) +{ + if (!strokeState.GetLineDash().lineDash.empty()) { + auto lineDashState = strokeState.GetLineDash().lineDash; + SkScalar intervals[lineDashState.size()]; + for (size_t i = 0; i < lineDashState.size(); ++i) { + intervals[i] = SkDoubleToScalar(lineDashState[i]); + } + SkScalar phase = SkDoubleToScalar(strokeState.GetLineDash().dashOffset); + paint.setPathEffect(SkDashPathEffect::Make(intervals, lineDashState.size(), phase)); + } +} + +void FlutterSvgPainter::CheckFontType() +{ + if (!fontTypeChinese_) { + LOGW("can't load HwChinese-Medium.ttf"); + } + if (!fontTypeNormal_) { + LOGW("can't load DroidSans.ttf"); + } +} + +double FlutterSvgPainter::GetPathLength(const std::string& path) +{ + SkPath skPath; + SkParsePath::FromSVGString(path.c_str(), &skPath); + SkPathMeasure pathMeasure(skPath, false); + SkScalar length = pathMeasure.getLength(); + return length; +} + +Offset FlutterSvgPainter::GetPathOffset(const std::string& path, double current) +{ + SkPath skPath; + SkParsePath::FromSVGString(path.c_str(), &skPath); + SkPathMeasure pathMeasure(skPath, false); + SkPoint position; + if (!pathMeasure.getPosTan(current, &position, nullptr)) { + return Offset(0.0, 0.0); + } + return Offset(position.fX, position.fY); +} + +Offset FlutterSvgPainter::UpdateText(SkCanvas* canvas, const SvgTextInfo& svgTextInfo, const TextDrawInfo& textDrawInfo) +{ + Offset offset = textDrawInfo.offset; + if (!canvas) { + LOGE("Paint skCanvas is null"); + return offset; + } + + SkFont font; + + font.setSize(svgTextInfo.textStyle.GetFontSize().Value()); + font.setScaleX(1.0); + double space = 0.0; + SkScalar x = SkDoubleToScalar(offset.GetX()); + SkScalar y = SkDoubleToScalar(offset.GetY()); + std::wstring data = StringUtils::ToWstring(svgTextInfo.data); + + SkPaint paint; + SkPaint strokePaint; + FlutterSvgPainter::SetFillStyle(paint, svgTextInfo.fillState, svgTextInfo.opacity); + FlutterSvgPainter::SetStrokeStyle(strokePaint, svgTextInfo.strokeState, svgTextInfo.opacity); + + for (int i = 0; i < (int)data.size(); i++) { + wchar_t temp = data[i]; + if (temp >= 0x4e00 && temp <= 0x9fa5) { + // range of chinese + font.setTypeface(fontTypeChinese_); + } else { + font.setTypeface(fontTypeNormal_); + } + auto blob = SkTextBlob::MakeFromText(&temp, sizeof(temp), font, SkTextEncoding::kUTF16); + auto width = font.measureText(&temp, sizeof(temp), SkTextEncoding::kUTF16); + canvas->save(); + canvas->rotate(textDrawInfo.rotate, x, y); + canvas->drawTextBlob(blob.get(), x, y, paint); + if (svgTextInfo.strokeState.HasStroke() && !NearZero(svgTextInfo.strokeState.GetLineWidth().Value())) { + canvas->drawTextBlob(blob.get(), x, y, strokePaint); + } + canvas->restore(); + x = x + width + space; + } + + return Offset(x, y); +} + +double FlutterSvgPainter::UpdateTextPath( + SkCanvas* canvas, const SvgTextInfo& svgTextInfo, const PathDrawInfo& pathDrawInfo) +{ + double offset = pathDrawInfo.offset; + if (!canvas) { + LOGE("Paint skCanvas is null"); + return offset; + } + + SkFont font; + font.setSize(svgTextInfo.textStyle.GetFontSize().Value()); + font.setScaleX(1.0); + double space = 0.0; + std::wstring data = StringUtils::ToWstring(svgTextInfo.data); + + SkPaint paint; + SkPaint strokePaint; + FlutterSvgPainter::SetFillStyle(paint, svgTextInfo.fillState, svgTextInfo.opacity); + FlutterSvgPainter::SetStrokeStyle(strokePaint, svgTextInfo.strokeState, svgTextInfo.opacity); + + SkPath path; + SkParsePath::FromSVGString(pathDrawInfo.path.c_str(), &path); + SkPathMeasure pathMeasure(path, false); + SkScalar length = pathMeasure.getLength(); + + for (int i = 0; i < (int)data.size(); i++) { + wchar_t temp = data[i]; + if (temp >= 0x4e00 && temp <= 0x9fa5) { + font.setTypeface(fontTypeChinese_); + } else { + font.setTypeface(fontTypeNormal_); + } + auto width = font.measureText(&temp, sizeof(wchar_t), SkTextEncoding::kUTF16); + if (length < offset + width + space) { + LOGD("path length is not enough, length:%{public}lf, next offset:%{public}lf", + length, offset + width + space); + break; + } + if (offset < 0) { + offset += (width + space); + continue; + } + + SkPoint position; + SkVector tangent; + if (!pathMeasure.getPosTan(offset + width / 2.0, &position, &tangent)) { + break; + } + if (!pathMeasure.getPosTan(offset, &position, nullptr)) { + break; + } + SkRSXform rsxForm = SkRSXform::Make(tangent.fX, tangent.fY, position.fX, position.fY); + auto blob = SkTextBlob::MakeFromRSXform(&temp, sizeof(wchar_t), &rsxForm, font, SkTextEncoding::kUTF16); + + canvas->save(); + canvas->rotate(pathDrawInfo.rotate, position.fX, position.fY); + canvas->drawTextBlob(blob.get(), 0.0, 0.0, paint); + if (svgTextInfo.strokeState.HasStroke() && !NearZero(svgTextInfo.strokeState.GetLineWidth().Value())) { + canvas->drawTextBlob(blob.get(), 0.0, 0.0, strokePaint); + } + canvas->restore(); + offset = offset + width + space; + } + + return offset; +} + +static const char* SkipSpace(const char str[]) +{ + if (!str) { + return nullptr; + } + while (isspace(*str)) { + str++; + } + return str; +} + +static const char* SkipSep(const char str[]) +{ + if (!str) { + return nullptr; + } + while (isspace(*str) || *str == ',') { + str++; + } + return str; +} + +static const char* FindDoubleValue(const char str[], double& value) +{ + str = SkipSpace(str); + if (!str) { + return nullptr; + } + char* stop = nullptr; + float v = std::strtod(str, &stop); + if (str == stop || errno == ERANGE) { + return nullptr; + } + value = v; + return stop; +} + +void FlutterSvgPainter::StringToPoints(const char str[], std::vector& points) +{ + for (;;) { + double x = 0.0; + str = FindDoubleValue(str, x); + if (str == nullptr) { + break; + } + str = SkipSep(str); + double y = 0.0; + str = FindDoubleValue(str, y); + if (str == nullptr) { + break; + } + points.emplace_back(SkPoint::Make(x, y)); + } +} + +Matrix4 FlutterSvgPainter::CreateMotionMatrix(const std::string& path, const std::string& rotate, + const Point& startPoint, double percent, bool& isSuccess) +{ + if (path.empty()) { + isSuccess = false; + return Matrix4::CreateIdentity(); + } + SkPath motion; + SkParsePath::FromSVGString(path.c_str(), &motion); + SkPathMeasure pathMeasure(motion, false); + SkPoint position; + SkVector tangent; + bool ret = pathMeasure.getPosTan(pathMeasure.getLength() * percent, &position, &tangent); + if (!ret) { + isSuccess = false; + return Matrix4::CreateIdentity(); + } + float degrees = 0.0f; + if (rotate == ROTATE_TYPE_AUTO) { + degrees = SkRadiansToDegrees(std::atan2(tangent.y(), tangent.x())); + } else if (rotate == ROTATE_TYPE_REVERSE) { + degrees = SkRadiansToDegrees(std::atan2(tangent.y(), tangent.x())) + FLAT_ANGLE; + } else { + degrees = StringUtils::StringToDouble(rotate); + } + auto transform = Matrix4::CreateIdentity(); + auto translate = Matrix4::CreateTranslate(position.x() - startPoint.GetX(), + position.y() - startPoint.GetY(), 0.0); + transform = translate * transform; + Matrix4 rotateMatrix; + rotateMatrix.SetEntry(ROW_INDEX, COL_INDEX, ROTATE_VALUE); + rotateMatrix.Rotate(degrees, 0.0f, 0.0f, 1.0f); + transform = rotateMatrix * transform; + isSuccess = true; + return FlutterRenderTransform::GetTransformByOffset(transform, Offset(position.x(), position.y())); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/common/painter/flutter_svg_painter.h b/frameworks/core/components/common/painter/flutter_svg_painter.h new file mode 100644 index 00000000..511d8aae --- /dev/null +++ b/frameworks/core/components/common/painter/flutter_svg_painter.h @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_PAINTER_FLUTTER_SVG_PAINTER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_PAINTER_FLUTTER_SVG_PAINTER_H + +#include "include/core/SkPoint.h" +#include "include/core/SkTypeface.h" + +#include "flutter/lib/ui/painting/canvas.h" +#include "flutter/lib/ui/painting/paint.h" + +#include "frameworks/base/geometry/matrix4.h" +#include "frameworks/core/components/common/properties/svg_paint_state.h" +#include "frameworks/core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +struct SvgTextInfo { + FillState fillState; + StrokeState strokeState; + SvgTextStyle textStyle; + std::string data; + double opacity = 1.0; +}; + +struct PathDrawInfo { + std::string path; + double offset = 0.0; + double rotate = 0.0; +}; + +struct TextDrawInfo { + Offset offset; + double rotate = 0.0; +}; + +class FlutterSvgPainter { +public: + FlutterSvgPainter() = default; + ~FlutterSvgPainter() = default; + + static void CheckFontType(); + static double GetPathLength(const std::string& path); + static Offset GetPathOffset(const std::string& path, double current); + static void SetFillStyle(SkPaint& skPaint, const FillState& fillState, uint8_t opacity = UINT8_MAX); + static void SetFillStyle(SkCanvas* canvas, const SkPath& skPath, const FillState& fillState, + uint8_t opacity = UINT8_MAX); + static void SetStrokeStyle(SkPaint& skPaint, const StrokeState& strokeState, uint8_t opacity = UINT8_MAX); + static void SetStrokeStyle(SkCanvas* canvas, const SkPath& skPath, const StrokeState& strokeState, + uint8_t opacity = UINT8_MAX); + static void UpdateLineDash(SkPaint& paint, const StrokeState& strokeState); + static Offset UpdateText(SkCanvas* canvas, const SvgTextInfo& svgTextInfo, const TextDrawInfo& textDrawInfo); + static double UpdateTextPath(SkCanvas* canvas, const SvgTextInfo& svgTextInfo, const PathDrawInfo& pathDrawInfo); + static void StringToPoints(const char str[], std::vector& points); + static Matrix4 CreateMotionMatrix(const std::string& path, const std::string& rotate, + const Point& startPoint, double percent, bool& isSuccess); + +private: + static sk_sp fontTypeChinese_; + static sk_sp fontTypeNormal_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_PAINTER_FLUTTER_SVG_PAINTER_H \ No newline at end of file diff --git a/frameworks/core/components/common/painter/flutter_universal_painter.cpp b/frameworks/core/components/common/painter/flutter_universal_painter.cpp new file mode 100644 index 00000000..d1266b7f --- /dev/null +++ b/frameworks/core/components/common/painter/flutter_universal_painter.cpp @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/common/painter/flutter_universal_painter.h" + +#include "third_party/skia/include/core/SkPaint.h" + +namespace OHOS::Ace { + +void FlutterUniversalPainter::DrawHoverBackground( + SkCanvas* canvas, const Rect& paintRect, uint32_t hoverBackgroundColor, double borderRadius) +{ + RRect paintRRect = RRect::MakeRRect(paintRect, borderRadius, borderRadius); + FlutterUniversalPainter::DrawRRectBackground(canvas, paintRRect, hoverBackgroundColor, 1.0); +} + +void FlutterUniversalPainter::DrawRRectBackground( + SkCanvas* canvas, const RRect& paintRRect, uint32_t backgroundColor, double dipScale) +{ + if (!canvas) { + LOGE("canvas is null."); + return; + } + SkPaint skPaint; + + skPaint.setAntiAlias(true); + skPaint.setStyle(SkPaint::Style::kFill_Style); + skPaint.setColor(backgroundColor); + + auto paintRect = paintRRect.GetRect(); + auto corner = paintRRect.GetCorner(); + SkRect skRect = SkRect::MakeXYWH(paintRect.Left(), paintRect.Top(), paintRect.Width(), paintRect.Height()); + SkVector fRadii[4] = { { 0.0, 0.0 }, { 0.0, 0.0 }, { 0.0, 0.0 }, { 0.0, 0.0 } }; + fRadii[SkRRect::kUpperLeft_Corner].set( + SkDoubleToScalar(std::max(FlutterUniversalPainter::NormalizeToPx(corner.topLeftRadius.GetX(), dipScale), 0.0)), + SkDoubleToScalar(std::max(FlutterUniversalPainter::NormalizeToPx(corner.topLeftRadius.GetY(), dipScale), 0.0))); + fRadii[SkRRect::kUpperRight_Corner].set( + SkDoubleToScalar(std::max(FlutterUniversalPainter::NormalizeToPx(corner.topRightRadius.GetX(), dipScale), 0.0)), + SkDoubleToScalar( + std::max(FlutterUniversalPainter::NormalizeToPx(corner.topRightRadius.GetY(), dipScale), 0.0))); + fRadii[SkRRect::kLowerRight_Corner].set( + SkDoubleToScalar( + std::max(FlutterUniversalPainter::NormalizeToPx(corner.bottomRightRadius.GetX(), dipScale), 0.0)), + SkDoubleToScalar( + std::max(FlutterUniversalPainter::NormalizeToPx(corner.bottomRightRadius.GetY(), dipScale), 0.0))); + fRadii[SkRRect::kLowerLeft_Corner].set( + SkDoubleToScalar( + std::max(FlutterUniversalPainter::NormalizeToPx(corner.bottomLeftRadius.GetX(), dipScale), 0.0)), + SkDoubleToScalar( + std::max(FlutterUniversalPainter::NormalizeToPx(corner.bottomLeftRadius.GetY(), dipScale), 0.0))); + SkRRect skRRect; + skRRect.setRectRadii(skRect, fRadii); + canvas->drawRRect(skRRect, skPaint); +} + +double FlutterUniversalPainter::NormalizeToPx(const Dimension& dimension, double scale) +{ + if ((dimension.Unit() == DimensionUnit::VP) || (dimension.Unit() == DimensionUnit::FP)) { + return (dimension.Value() * scale); + } + return dimension.Value(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/common/painter/flutter_universal_painter.h b/frameworks/core/components/common/painter/flutter_universal_painter.h new file mode 100644 index 00000000..861149c1 --- /dev/null +++ b/frameworks/core/components/common/painter/flutter_universal_painter.h @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_PAINTER_FLUTTER_UNIVERSAL_PAINTER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_PAINTER_FLUTTER_UNIVERSAL_PAINTER_H + +#include "flutter/lib/ui/painting/canvas.h" +#include "flutter/lib/ui/painting/paint.h" + +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class FlutterUniversalPainter { +public: + FlutterUniversalPainter() = default; + ~FlutterUniversalPainter() = default; + + static void DrawHoverBackground( + SkCanvas* canvas, const Rect& paintRect, uint32_t hoverBackgroundColor, double borderRadius); + + static void DrawRRectBackground( + SkCanvas* canvas, const RRect& paintRRect, uint32_t backgroundColor, double dipScale); + + static double NormalizeToPx(const Dimension& dimension, double scale); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_PAINTER_FLUTTER_UNIVERSAL_PAINTER_H diff --git a/frameworks/core/components/common/properties/alignment.cpp b/frameworks/core/components/common/properties/alignment.cpp new file mode 100644 index 00000000..a6c56f3d --- /dev/null +++ b/frameworks/core/components/common/properties/alignment.cpp @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/common/properties/alignment.h" + +namespace OHOS::Ace { + +const Alignment Alignment::TOP_LEFT = Alignment(-1.0, -1.0); +const Alignment Alignment::TOP_CENTER = Alignment(0.0, -1.0); +const Alignment Alignment::TOP_RIGHT = Alignment(1.0, -1.0); +const Alignment Alignment::CENTER_LEFT = Alignment(-1.0, 0.0); +const Alignment Alignment::CENTER = Alignment(0.0, 0.0); +const Alignment Alignment::CENTER_RIGHT = Alignment(1.0, 0.0); +const Alignment Alignment::BOTTOM_LEFT = Alignment(-1.0, 1.0); +const Alignment Alignment::BOTTOM_CENTER = Alignment(0.0, 1.0); +const Alignment Alignment::BOTTOM_RIGHT = Alignment(1.0, 1.0); + +/* + * This function is used to calculate the relative position of child rectangle in parent rectangle. + * Note that parentSize should not be less than childSize, + * which means neither width or height of parent rectangle should be less than child's. + * + * @param parentSize Size of parent in which you want to put a child. + * @param childSize Size of child you want to put in parent. + * @param alignment A variable by which to decide the position of a child in parent. + * @return A relative position toward top-left point of parent. + */ +const Offset Alignment::GetAlignPosition(const Size& parentSize, const Size& childSize, const Alignment& alignment) +{ + Offset offset; + if (GreatOrEqual(parentSize.Width(), childSize.Width())) { + offset.SetX((1.0 + alignment.GetHorizontal()) * (parentSize.Width() - childSize.Width()) / 2.0); + } + if (GreatOrEqual(parentSize.Height(), childSize.Height())) { + offset.SetY((1.0 + alignment.GetVertical()) * (parentSize.Height() - childSize.Height()) / 2.0); + } + return offset; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/common/properties/alignment.h b/frameworks/core/components/common/properties/alignment.h new file mode 100644 index 00000000..9363c82f --- /dev/null +++ b/frameworks/core/components/common/properties/alignment.h @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_ALIGNMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_ALIGNMENT_H + +#include + +#include "base/geometry/offset.h" +#include "base/geometry/size.h" +#include "base/utils/macros.h" + +namespace OHOS::Ace { + +class ACE_EXPORT Alignment final { +public: + Alignment() = default; + ~Alignment() = default; + + double GetHorizontal() const + { + return horizontal_; + } + + double GetVertical() const + { + return vertical_; + } + + bool operator==(const Alignment& other) const + { + return NearEqual(horizontal_, other.horizontal_) && NearEqual(vertical_, other.vertical_); + } + + bool operator!=(const Alignment& other) const + { + return !operator==(other); + } + + static const Offset GetAlignPosition(const Size& parentSize, const Size& childSize, const Alignment& alignment); + static const Alignment TOP_LEFT; + static const Alignment TOP_CENTER; + static const Alignment TOP_RIGHT; + static const Alignment CENTER_LEFT; + static const Alignment CENTER; + static const Alignment CENTER_RIGHT; + static const Alignment BOTTOM_LEFT; + static const Alignment BOTTOM_CENTER; + static const Alignment BOTTOM_RIGHT; + + std::string ToString() const + { + return std::string("Alignment (") + .append(std::to_string(horizontal_)) + .append(", ") + .append(std::to_string(vertical_)) + .append(")"); + } + +private: + friend class AlignCreator; + Alignment(double horizontal, double vertical) : horizontal_(horizontal), vertical_(vertical) {} + double horizontal_ = 0.0; + double vertical_ = 0.0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_ALIGNMENT_H diff --git a/frameworks/core/components/common/properties/border.cpp b/frameworks/core/components/common/properties/border.cpp new file mode 100644 index 00000000..ab824797 --- /dev/null +++ b/frameworks/core/components/common/properties/border.cpp @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/common/properties/border.h" + +namespace OHOS::Ace { + +Border::Border(const BorderEdge& left, const BorderEdge& top, const BorderEdge& right, const BorderEdge& bottom) + : left_(left), top_(top), right_(right), bottom_(bottom) +{} + +bool Border::IsAllEqual() const +{ + return (left_ == top_) && (top_ == right_) && (right_ == bottom_); +} + +bool Border::HasValue() const +{ + return left_.HasValue() || top_.HasValue() || right_.HasValue() || bottom_.HasValue(); +} + +bool Border::HasRadius() const +{ + return topLeftRadius_.HasValue() || topRightRadius_.HasValue() || + bottomLeftRadius_.HasValue() || bottomRightRadius_.HasValue(); +} + +Offset Border::GetOffset(double dipScale) const +{ + return Offset(left_.GetWidthInPx(dipScale), top_.GetWidthInPx(dipScale)); +} + +double Border::HorizontalWidth(double dipScale) const +{ + return left_.GetWidthInPx(dipScale) + right_.GetWidthInPx(dipScale); +} + +double Border::VerticalWidth(double dipScale) const +{ + return top_.GetWidthInPx(dipScale) + bottom_.GetWidthInPx(dipScale); +} + +Size Border::GetLayoutSize(double dipScale) const +{ + return Size(HorizontalWidth(dipScale), VerticalWidth(dipScale)); +} + +BorderEdge Border::GetValidEdge() const +{ + if (left_.HasValue()) { + return left_; + } + if (top_.HasValue()) { + return top_; + } + if (right_.HasValue()) { + return right_; + } + if (bottom_.HasValue()) { + return bottom_; + } + return BorderEdge(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/common/properties/border.h b/frameworks/core/components/common/properties/border.h new file mode 100644 index 00000000..f9ee7b92 --- /dev/null +++ b/frameworks/core/components/common/properties/border.h @@ -0,0 +1,165 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_BORDER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_BORDER_H + +#include "base/geometry/offset.h" +#include "base/geometry/size.h" +#include "core/components/common/layout/constants.h" +#include "core/components/common/properties/border_edge.h" +#include "core/components/common/properties/radius.h" + +namespace OHOS::Ace { + +// Border of a box, contains four borderEdges: left, top, right, bottom. +// And four radius: topLeftRadius, topRightRadius, bottomLeftRadius, bottomRightRadius. +// Each borderEdge is a BorderEdge object and each radius is a Radius object. +class ACE_EXPORT Border final { +public: + Border() = default; + explicit Border(const BorderEdge& edge) : Border(edge, edge, edge, edge) {}; + Border(const BorderEdge& edge, const Radius& radius) : Border(edge, edge, edge, edge) + { + SetBorderRadius(radius); + } + Border(const BorderEdge& left, const BorderEdge& top, const BorderEdge& right, const BorderEdge& bottom); + ~Border() = default; + + bool IsAllEqual() const; + bool HasValue() const; + bool HasRadius() const; + Offset GetOffset(double dipScale) const; + double HorizontalWidth(double dipScale) const; + double VerticalWidth(double dipScale) const; + Size GetLayoutSize(double dipScale) const; + BorderEdge GetValidEdge() const; + + void SetBorderRadius(const Radius& radius) + { + topLeftRadius_ = radius; + topRightRadius_ = radius; + bottomLeftRadius_ = radius; + bottomRightRadius_ = radius; + } + + void SetBorderEdge(const BorderEdge& borderEdge) + { + top_ = borderEdge; + left_ = borderEdge; + right_ = borderEdge; + bottom_ = borderEdge; + } + + void SetTopLeftRadius(const Radius& topLeftRadius) + { + topLeftRadius_ = topLeftRadius; + } + + void SetTopRightRadius(const Radius& topRightRadius) + { + topRightRadius_ = topRightRadius; + } + + void SetBottomLeftRadius(const Radius& bottomLeftRadius) + { + bottomLeftRadius_ = bottomLeftRadius; + } + + void SetBottomRightRadius(const Radius& bottomRightRadius) + { + bottomRightRadius_ = bottomRightRadius; + } + + const Radius& TopLeftRadius() const + { + return topLeftRadius_; + } + + const Radius& TopRightRadius() const + { + return topRightRadius_; + } + + const Radius& BottomLeftRadius() const + { + return bottomLeftRadius_; + } + + const Radius& BottomRightRadius() const + { + return bottomRightRadius_; + } + + const BorderEdge& Left() const + { + return left_; + } + + const BorderEdge& Top() const + { + return top_; + } + + const BorderEdge& Right() const + { + return right_; + } + + const BorderEdge& Bottom() const + { + return bottom_; + } + + bool operator==(const Border& border) const + { + return (border.Left() == left_) && (border.Top() == top_) && (border.Right() == right_) && + (border.Bottom() == bottom_); + } + + void SetLeftEdge(const BorderEdge& edge) + { + left_ = edge; + } + + void SetTopEdge(const BorderEdge& edge) + { + top_ = edge; + } + + void SetRightEdge(const BorderEdge& edge) + { + right_ = edge; + } + + void SetBottomEdge(const BorderEdge& edge) + { + bottom_ = edge; + } + +private: + BorderEdge left_; + BorderEdge top_; + BorderEdge right_; + BorderEdge bottom_; + Radius topLeftRadius_; + Radius topRightRadius_; + Radius bottomLeftRadius_; + Radius bottomRightRadius_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_BORDER_H diff --git a/frameworks/core/components/common/properties/border_edge.cpp b/frameworks/core/components/common/properties/border_edge.cpp new file mode 100644 index 00000000..8f3ac02e --- /dev/null +++ b/frameworks/core/components/common/properties/border_edge.cpp @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/common/properties/border_edge.h" + +namespace OHOS::Ace { + +BorderEdge::BorderEdge(const Color& color, const Dimension& width, BorderStyle style) + : color_(color), width_(width), style_(style) +{} + +bool BorderEdge::HasValue() const +{ + return width_.Value() > 0.0; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/common/properties/border_edge.h b/frameworks/core/components/common/properties/border_edge.h new file mode 100644 index 00000000..fd6c8a42 --- /dev/null +++ b/frameworks/core/components/common/properties/border_edge.h @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_BORDER_EDGE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_BORDER_EDGE_H + +#include "base/geometry/dimension.h" +#include "base/utils/utils.h" +#include "core/components/common/layout/constants.h" +#include "core/components/common/properties/color.h" + +namespace OHOS::Ace { + +// A edge of a Border. +class ACE_EXPORT BorderEdge final { +public: + BorderEdge() = default; + ~BorderEdge() = default; + BorderEdge(const Color& color, const Dimension& width, BorderStyle style); + + bool HasValue() const; + + const Color& GetColor() const + { + return color_; + } + + BorderStyle GetBorderStyle() const + { + return style_; + } + + const Dimension& GetWidth() const + { + return width_; + } + + double GetWidthInPx(double dipScale) const + { + return width_.ConvertToPx(dipScale); + } + + bool operator==(const BorderEdge& borderEdge) const + { + return (borderEdge.GetColor() == color_) && NearEqual(borderEdge.GetWidth().Value(), width_.Value()) && + (borderEdge.GetWidth().Unit() == width_.Unit()) && (borderEdge.GetBorderStyle() == style_); + } + + void SetWidth(const Dimension& width) + { + width_ = width; + } + + void SetColor(const Color& color) + { + color_ = color; + } + + void SetStyle(BorderStyle style) + { + style_ = style; + } + +private: + Color color_; + Dimension width_; + BorderStyle style_ { BorderStyle::NONE }; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_BORDER_EDGE_H diff --git a/frameworks/core/components/common/properties/color.cpp b/frameworks/core/components/common/properties/color.cpp new file mode 100644 index 00000000..cd8db0f3 --- /dev/null +++ b/frameworks/core/components/common/properties/color.cpp @@ -0,0 +1,293 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/common/properties/color.h" + +#include +#include + +#include "base/utils/linear_map.h" +#include "base/utils/string_utils.h" +#include "base/utils/utils.h" + +namespace OHOS::Ace { +namespace { + +constexpr uint32_t COLOR_STRING_SIZE_STANDARD = 8; +constexpr uint32_t COLOR_STRING_BASE = 16; +constexpr uint32_t RGB_SUB_MATCH_SIZE = 4; +constexpr uint32_t RGBA_SUB_MATCH_SIZE = 5; + +const std::regex COLOR_WITH_MAGIC("#[0-9A-Fa-f]{6,8}"); +const std::regex COLOR_WITH_RGB(R"(rgb\(([0-9]{1,3})\,([0-9]{1,3})\,([0-9]{1,3})\))", std::regex::icase); +const std::regex COLOR_WITH_RGBA(R"(rgba\(([0-9]{1,3})\,([0-9]{1,3})\,([0-9]{1,3})\,(\d+\.?\d*)\))", std::regex::icase); +constexpr double GAMMA_FACTOR = 2.2; +constexpr float MAX_ALPHA = 255.0f; + +} // namespace + +const Color Color::TRANSPARENT = Color(0x00000000); +const Color Color::WHITE = Color(0xffffffff); +const Color Color::BLACK = Color(0xff000000); +const Color Color::RED = Color(0xffff0000); +const Color Color::GREEN = Color(0xff00ff00); +const Color Color::BLUE = Color(0xff0000ff); +const Color Color::GRAY = Color(0xffc0c0c0); + +Color Color::FromString(std::string colorStr, uint32_t maskAlpha) +{ + if (colorStr.empty()) { + // empty string, return transparent + return Color::TRANSPARENT; + } + + // Remove all " ". + colorStr.erase(std::remove(colorStr.begin(), colorStr.end(), ' '), colorStr.end()); + + std::smatch matches; + // Regex match for #909090 or #90909090. + if (std::regex_match(colorStr, matches, COLOR_WITH_MAGIC)) { + colorStr.erase(0, 1); + auto value = stoul(colorStr, nullptr, COLOR_STRING_BASE); + if (colorStr.length() < COLOR_STRING_SIZE_STANDARD) { + // no alpha specified, set alpha to 0xff + value |= maskAlpha; + } + return Color(value); + } + // Regex match for rgb(90,254,180). + if (std::regex_match(colorStr, matches, COLOR_WITH_RGB)) { + if (matches.size() == RGB_SUB_MATCH_SIZE) { + auto red = static_cast(std::stoi(matches[1])); // red value. + auto green = static_cast(std::stoi(matches[2])); // green value. + auto blue = static_cast(std::stoi(matches[3])); // blue value. + return FromRGB(red, green, blue); + } + } + // Regex match for rgba(90,254,180,0.5). + if (std::regex_match(colorStr, matches, COLOR_WITH_RGBA)) { + if (matches.size() == RGBA_SUB_MATCH_SIZE) { + auto red = static_cast(std::stoi(matches[1])); + auto green = static_cast(std::stoi(matches[2])); + auto blue = static_cast(std::stoi(matches[3])); + auto opacity = static_cast(std::stod(matches[4])); + return FromRGBO(red, green, blue, opacity); + } + } + // match for special string + static const LinearMapNode colorTable[] = { + { "black", Color(0xff000000) }, + { "blue", Color(0xff0000ff) }, + { "gray", Color(0xffc0c0c0) }, + { "green", Color(0xff00ff00) }, + { "red", Color(0xffff0000) }, + { "white", Color(0xffffffff) }, + }; + int64_t colorIndex = BinarySearchFindIndex(colorTable, ArraySize(colorTable), colorStr.c_str()); + if (colorIndex != -1) { + return colorTable[colorIndex].value; + } + + // parse uint32_t color string. + auto uint32Color = StringUtils::StringToUint(colorStr); + if (uint32Color > 0) { + return Color(uint32Color); + } + + // Default color. + return Color::BLACK; +} + +Color Color::FromARGB(uint8_t alpha, uint8_t red, uint8_t green, uint8_t blue) +{ + ColorParam colorValue { { .alpha = alpha, .red = red, .green = green, .blue = blue } }; + return Color(colorValue); +} + +Color Color::FromRGBO(uint8_t red, uint8_t green, uint8_t blue, double opacity) +{ + ColorParam colorValue { + { .alpha = static_cast(round(opacity * 0xff)) & 0xff, .red = red, .green = green, .blue = blue } + }; + return Color(colorValue); +} + +Color Color::FromRGB(uint8_t red, uint8_t green, uint8_t blue) +{ + ColorParam colorValue { { .alpha = 0xff, .red = red, .green = green, .blue = blue } }; + return Color(colorValue); +} + +Color Color::BlendColor(const Color& overlayColor) const +{ + if (GetValue() == Color::TRANSPARENT.GetValue()) { + return overlayColor; + } + if (GetAlpha() < static_cast(MAX_ALPHA)) { + return BlendColorWithAlpha(overlayColor); + } + auto alphaRate = static_cast(overlayColor.GetAlpha()) / MAX_ALPHA; + auto newRed = static_cast(GetRed() * (1.0f - alphaRate) + overlayColor.GetRed() * alphaRate); + auto newGreen = static_cast(GetGreen() * (1.0f - alphaRate) + overlayColor.GetGreen() * alphaRate); + auto newBlue = static_cast(GetBlue() * (1.0f - alphaRate) + overlayColor.GetBlue() * alphaRate); + return Color::FromRGB(newRed, newGreen, newBlue); +} + +float Color::CalculateBlend(float alphaLeft, float alphaRight, float valueLeft, float valueRight) const +{ + return (valueLeft * alphaLeft * (1.0 - alphaRight) + valueRight * alphaRight) / + (alphaLeft + alphaRight - alphaLeft * alphaRight); +} + +Color Color::BlendColorWithAlpha(const Color& overlayColor) const +{ + float alphaA = GetAlpha() / 255.0; + float alphaB = overlayColor.GetAlpha() / 255.0; + float blendAlpha = alphaA + alphaB - alphaA * alphaB; + float blendRed = CalculateBlend(alphaA, alphaB, GetRed() / 255.0, overlayColor.GetRed() / 255.0); + float blendGreen = CalculateBlend(alphaA, alphaB, GetGreen() / 255.0, overlayColor.GetGreen() / 255.0); + float blendBlue = CalculateBlend(alphaA, alphaB, GetBlue() / 255.0, overlayColor.GetBlue() / 255.0); + + return Color::FromARGB(blendAlpha * 255, blendRed * 255, blendGreen * 255, blendBlue * 255); +} + +const Color Color::LineColorTransition(const Color& startColor, const Color& endColor, double percent) +{ + uint8_t red = 0; + uint8_t green = 0; + uint8_t blue = 0; + uint8_t alpha = 0; + + red = (static_cast(endColor.GetRed()) - static_cast(startColor.GetRed())) * percent + startColor.GetRed(); + green = (static_cast(endColor.GetGreen()) - static_cast(startColor.GetGreen())) * percent + + startColor.GetGreen(); + blue = (static_cast(endColor.GetBlue()) - static_cast(startColor.GetBlue())) * percent + + startColor.GetBlue(); + alpha = (static_cast(endColor.GetAlpha()) - static_cast(startColor.GetAlpha())) * percent + + startColor.GetAlpha(); + + return Color::FromARGB(alpha, red, green, blue); +} + +Color Color::BlendOpacity(double opacityRatio) const +{ + int32_t alpha = GetAlpha() * opacityRatio; + alpha = std::clamp(alpha, 0, UINT8_MAX); + return Color::FromARGB(alpha, GetRed(), GetGreen(), GetBlue()); +} + +Color Color::ChangeOpacity(double opacity) const +{ + return Color::FromRGBO(GetRed(), GetGreen(), GetBlue(), opacity); +} + +Color Color::ChangeAlpha(uint8_t alpha) const +{ + return Color::FromARGB(alpha, GetRed(), GetGreen(), GetBlue()); +} + +Color Color::operator+(const Color& color) const +{ + // convert first color from ARGB to linear + double firstLinearRed = 0.0; + double firstLinearGreen = 0.0; + double firstLinearBlue = 0.0; + ConvertGammaToLinear(*this, firstLinearRed, firstLinearGreen, firstLinearBlue); + + // convert second color from ARGB to linear + double secondLinearRed = 0.0; + double secondLinearGreen = 0.0; + double secondLinearBlue = 0.0; + ConvertGammaToLinear(color, secondLinearRed, secondLinearGreen, secondLinearBlue); + + // get linear result and convert to gamma + return ConvertLinearToGamma(GetAlpha() + color.GetAlpha(), firstLinearRed + secondLinearRed, + firstLinearGreen + secondLinearGreen, firstLinearBlue + secondLinearBlue); +} + +Color Color::operator-(const Color& color) const +{ + // convert first color from ARGB to linear + double firstLinearRed = 0.0; + double firstLinearGreen = 0.0; + double firstLinearBlue = 0.0; + ConvertGammaToLinear(*this, firstLinearRed, firstLinearGreen, firstLinearBlue); + + // convert second color from ARGB to linear + double secondLinearRed = 0.0; + double secondLinearGreen = 0.0; + double secondLinearBlue = 0.0; + ConvertGammaToLinear(color, secondLinearRed, secondLinearGreen, secondLinearBlue); + + // get linear result and convert to gamma + return ConvertLinearToGamma(GetAlpha() - color.GetAlpha(), firstLinearRed - secondLinearRed, + firstLinearGreen - secondLinearGreen, firstLinearBlue - secondLinearBlue); +} + +Color Color::operator*(double value) const +{ + // convert color from ARGB to linear + double linearRed = 0.0; + double linearGreen = 0.0; + double linearBlue = 0.0; + ConvertGammaToLinear(*this, linearRed, linearGreen, linearBlue); + + // get linear result and convert to gamma + return ConvertLinearToGamma(GetAlpha() * value, linearRed * value, linearGreen * value, linearBlue * value); +} + +Color Color::operator/(double value) const +{ + if (NearZero(value)) { + return *this; + } + // convert color from ARGB to linear + double linearRed = 0.0; + double linearGreen = 0.0; + double LinearBlue = 0.0; + ConvertGammaToLinear(*this, linearRed, linearGreen, LinearBlue); + + // get linear result and convert to gamma + return ConvertLinearToGamma(GetAlpha() / value, linearRed / value, linearGreen / value, LinearBlue / value); +} + +double Color::ConvertGammaToLinear(uint8_t value) +{ + return std::pow(value, GAMMA_FACTOR); +} + +uint8_t Color::ConvertLinearToGamma(double value) +{ + return std::clamp(static_cast(std::pow(value, 1.0 / GAMMA_FACTOR)), 0, UINT8_MAX); +} + +void Color::ConvertGammaToLinear(const Color& gammaColor, double& linearRed, double& linearGreen, double& linearBlue) +{ + linearRed = ConvertGammaToLinear(gammaColor.GetRed()); + linearGreen = ConvertGammaToLinear(gammaColor.GetGreen()); + linearBlue = ConvertGammaToLinear(gammaColor.GetBlue()); +} + +Color Color::ConvertLinearToGamma(double alpha, double linearRed, double linearGreen, double linearBlue) +{ + uint8_t gammaRed = ConvertLinearToGamma(linearRed); + uint8_t gammaGreen = ConvertLinearToGamma(linearGreen); + uint8_t gammaBlue = ConvertLinearToGamma(linearBlue); + uint8_t gammaAlpha = std::clamp(static_cast(alpha), 0, UINT8_MAX); + + return FromARGB(gammaAlpha, gammaRed, gammaGreen, gammaBlue); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/common/properties/color.h b/frameworks/core/components/common/properties/color.h new file mode 100644 index 00000000..ed57de7c --- /dev/null +++ b/frameworks/core/components/common/properties/color.h @@ -0,0 +1,146 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_COLOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_COLOR_H + +#include +#include + +#include "base/utils/macros.h" +#include "base/utils/string_utils.h" + +namespace OHOS::Ace { + +constexpr uint32_t COLOR_ALPHA_MASK = 0xff000000; + +union ColorParam { +#if BIG_ENDIANNESS + struct { + uint8_t alpha; + uint8_t red; + uint8_t green; + uint8_t blue; + } argb; +#else + struct { + uint8_t blue; + uint8_t green; + uint8_t red; + uint8_t alpha; + } argb; +#endif + uint32_t value; +}; + +// A color value present by 32 bit. +class ACE_EXPORT Color final { +public: + Color() = default; + constexpr explicit Color(uint32_t value) : colorValue_(ColorParam { .value = value }) {} + ~Color() = default; + + static Color FromARGB(uint8_t alpha, uint8_t red, uint8_t green, uint8_t blue); + static Color FromRGBO(uint8_t red, uint8_t green, uint8_t blue, double opacity); + static Color FromRGB(uint8_t red, uint8_t green, uint8_t blue); + // Need to change the input parameters, it is more appropriate to use the passed value here. + static Color FromString(std::string colorStr, uint32_t maskAlpha = COLOR_ALPHA_MASK); + // Return the linear transition color from startColor to endColor. + static const Color LineColorTransition(const Color& startColor, const Color& endColor, double percent); + + static const Color TRANSPARENT; + static const Color WHITE; + static const Color BLACK; + static const Color RED; + static const Color GREEN; + static const Color BLUE; + static const Color GRAY; + + Color BlendColor(const Color& overlayColor) const; + + Color BlendColorWithAlpha(const Color& overlayColor) const; + Color BlendOpacity(double opacityRatio) const; + Color ChangeOpacity(double opacity) const; + Color ChangeAlpha(uint8_t alpha) const; + + uint32_t GetValue() const + { + return colorValue_.value; + } + + uint8_t GetAlpha() const + { + return colorValue_.argb.alpha; + } + + uint8_t GetRed() const + { + return colorValue_.argb.red; + } + + uint8_t GetGreen() const + { + return colorValue_.argb.green; + } + + uint8_t GetBlue() const + { + return colorValue_.argb.blue; + } + + bool operator==(const Color& color) const + { + return colorValue_.value == color.GetValue(); + } + + bool operator!=(const Color& color) const + { + return !operator==(color); + } + + Color operator+(const Color& color) const; + + Color operator-(const Color& color) const; + + Color operator*(double value) const; + + Color operator/(double value) const; + +private: + constexpr explicit Color(ColorParam colorValue) : colorValue_(colorValue) {} + + static double ConvertGammaToLinear(uint8_t value); + static void ConvertGammaToLinear( + const Color& gammaColor, double& linearRed, double& linearGreen, double& linearBlue); + static uint8_t ConvertLinearToGamma(double value); + static Color ConvertLinearToGamma(double alpha, double linearRed, double linearGreen, double linearBlue); + + float CalculateBlend(float alphaLeft, float alphaRight, float valueLeft, float valueRight) const; + ColorParam colorValue_ { .value = 0xff000000 }; +}; + +namespace StringUtils { + +inline void StringSpliter(const std::string& source, char delimiter, std::vector& out) +{ + using Func = Color (*)(const std::string&); + Func func = [](const std::string& value) { return Color::FromString(value); }; + StringSpliter(source, delimiter, func, out); +} + +} // namespace StringUtils +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_COLOR_H diff --git a/frameworks/core/components/common/properties/color_factory.cpp b/frameworks/core/components/common/properties/color_factory.cpp new file mode 100644 index 00000000..b3eb4b7c --- /dev/null +++ b/frameworks/core/components/common/properties/color_factory.cpp @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/common/properties/color_factory.h" + +namespace OHOS::Ace { + +ColorFactory::ColorFactory() +{ + // TODO: this part need to change when the various of theme is applied. + colorMap_["DATA_PANEL_LIGHT_COLOR_1"] = + std::make_pair(Color::FromString("#F7CE00"), Color::FromString("#F99B11")); + colorMap_["DATA_PANEL_LIGHT_COLOR_2"] = + std::make_pair(Color::FromString("#F76223"), Color::FromString("#F2400A")); + colorMap_["DATA_PANEL_LIGHT_COLOR_3"] = + std::make_pair(Color::FromString("#F772AC"), Color::FromString("#E65392")); + colorMap_["DATA_PANEL_LIGHT_COLOR_4"] = + std::make_pair(Color::FromString("#A575EB"), Color::FromString("#A12DF7")); + colorMap_["DATA_PANEL_LIGHT_COLOR_5"] = + std::make_pair(Color::FromString("#7B79F7"), Color::FromString("#4B48F7")); + colorMap_["DATA_PANEL_LIGHT_COLOR_6"] = + std::make_pair(Color::FromString("#4B8AF3"), Color::FromString("#007DFF")); + colorMap_["DATA_PANEL_LIGHT_COLOR_7"] = + std::make_pair(Color::FromString("#73C1E6"), Color::FromString("#4FB4E3")); + colorMap_["DATA_PANEL_LIGHT_COLOR_8"] = + std::make_pair(Color::FromString("#A5D61D"), Color::FromString("#69D14F")); + colorMap_["DATA_PANEL_LIGHT_COLOR_9"] = + std::make_pair(Color::FromString("#A2A2B0"), Color::FromString("#8E8E93")); + + colorMap_["DATA_PANEL_DARK_COLOR_1"] = + std::make_pair(Color::FromString("#D1A738"), Color::FromString("#EB933D")); + colorMap_["DATA_PANEL_DARK_COLOR_2"] = + std::make_pair(Color::FromString("#E67D50"), Color::FromString("#D9542B")); + colorMap_["DATA_PANEL_DARK_COLOR_3"] = + std::make_pair(Color::FromString("#D5749E"), Color::FromString("#D6568D")); + colorMap_["DATA_PANEL_DARK_COLOR_4"] = + std::make_pair(Color::FromString("#9973D1"), Color::FromString("#8639BF")); + colorMap_["DATA_PANEL_DARK_COLOR_5"] = + std::make_pair(Color::FromString("#7977D9"), Color::FromString("#5552D9")); + colorMap_["DATA_PANEL_DARK_COLOR_6"] = + std::make_pair(Color::FromString("#4C81D9"), Color::FromString("#217BD9")); + colorMap_["DATA_PANEL_DARK_COLOR_7"] = + std::make_pair(Color::FromString("#5EA6D1"), Color::FromString("#4895C2")); + colorMap_["DATA_PANEL_DARK_COLOR_8"] = + std::make_pair(Color::FromString("#91C23A"), Color::FromString("#70BA5D")); + colorMap_["DATA_PANEL_DARK_COLOR_9"] = + std::make_pair(Color::FromString("#8C8C99"), Color::FromString("#6B6B76")); + + colorMap_["DATA_PANEL_PROGRESS_LIGHT_COLOR_1"] = + std::make_pair(Color::FromString("#86C1FF"), Color::FromString("#254FF7")); + colorMap_["DATA_PANEL_PROGRESS_DARK_COLOR_1"] = + std::make_pair(Color::FromString("#72A4D9"), Color::FromString("#3B61F7")); +} + +ColorFactory& ColorFactory::GetInstance() +{ + // don't need lock, because of no race condition. + static auto instance = new ColorFactory(); + return *instance; +} + +std::pair ColorFactory::GetColorTuple(const std::string& colorName) +{ + auto colorPair = colorMap_.find(colorName); + if (colorPair != colorMap_.end()) { + return colorPair->second; + } + return std::make_pair(Color(), Color()); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/common/properties/color_factory.h b/frameworks/core/components/common/properties/color_factory.h new file mode 100644 index 00000000..a02b8610 --- /dev/null +++ b/frameworks/core/components/common/properties/color_factory.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_COLOR_FACTORY_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_COLOR_FACTORY_H + +#include + +#include "base/utils/noncopyable.h" +#include "core/components/common/properties/color.h" + +namespace OHOS::Ace { + +class ColorFactory final { +public: + ~ColorFactory() = default; + static ColorFactory& GetInstance(); + + std::pair GetColorTuple(const std::string& colorName); + +private: + ColorFactory(); + std::map> colorMap_; + ACE_DISALLOW_COPY_AND_MOVE(ColorFactory); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_COLOR_FACTORY_H diff --git a/frameworks/core/components/common/properties/decoration.cpp b/frameworks/core/components/common/properties/decoration.cpp new file mode 100644 index 00000000..54e92b60 --- /dev/null +++ b/frameworks/core/components/common/properties/decoration.cpp @@ -0,0 +1,432 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/common/properties/decoration.h" + +namespace OHOS::Ace { + +void Decoration::AddShadow(const Shadow& shadow) +{ + shadows_.push_back(shadow); +} + +void Decoration::ClearAllShadow() +{ + shadows_.clear(); +} + +Size Decoration::GetOccupiedSize(double dipScale) const +{ + return border_.GetLayoutSize(dipScale) + padding_.GetLayoutSizeInPx(dipScale); +} + +Offset Decoration::GetOffset(double dipScale) const +{ + return border_.GetOffset(dipScale) + padding_.GetOffsetInPx(dipScale); +} + +double Decoration::VerticalSpaceOccupied(double dipScale) const +{ + return border_.VerticalWidth(dipScale) + padding_.VerticalInPx(dipScale); +} + +double Decoration::HorizontalSpaceOccupied(double dipScale) const +{ + return border_.HorizontalWidth(dipScale) + padding_.HorizontalInPx(dipScale); +} + +void Gradient::AddColor(const GradientColor& color) +{ + colors_.push_back(color); +} + +void Gradient::ClearColors() +{ + colors_.clear(); +} + +void BackgroundImageSize::SetSizeTypeX(BackgroundImageSizeType type) +{ + typeX_ = type; +} + +void BackgroundImageSize::SetSizeTypeY(BackgroundImageSizeType type) +{ + if (type == BackgroundImageSizeType::CONTAIN || type == BackgroundImageSizeType::COVER) { + return; + } + typeY_ = type; +} + +void BackgroundImageSize::SetSizeValueX(double value) +{ + if (value < -0.0) { + return; + } + valueX_ = value; +} + +void BackgroundImageSize::SetSizeValueY(double value) +{ + if (value < -0.0) { + return; + } + valueY_ = value; +} + +bool BackgroundImageSize::IsValid() const +{ + if (typeY_ == BackgroundImageSizeType::CONTAIN || typeY_ == BackgroundImageSizeType::COVER) { + return false; + } + + if ((typeX_ == BackgroundImageSizeType::LENGTH || typeX_ == BackgroundImageSizeType::PERCENT) && + LessOrEqual(valueX_, 0.0)) { + return false; + } + + if ((typeY_ == BackgroundImageSizeType::LENGTH || typeY_ == BackgroundImageSizeType::PERCENT) && + LessOrEqual(valueY_, 0.0)) { + return false; + } + + return true; +} + +BackgroundImageSizeType BackgroundImageSize::GetSizeTypeX() const +{ + return typeX_; +} + +BackgroundImageSizeType BackgroundImageSize::GetSizeTypeY() const +{ + return typeY_; +} + +double BackgroundImageSize::GetSizeValueX() const +{ + return valueX_; +} + +double BackgroundImageSize::GetSizeValueY() const +{ + return valueY_; +} + +bool BackgroundImageSize::operator==(const BackgroundImageSize& size) const +{ + return typeX_ == size.GetSizeTypeX() && NearEqual(valueX_, size.GetSizeValueX()) && typeY_ == size.GetSizeTypeY() && + NearEqual(valueY_, size.GetSizeValueY()); +} + +bool BackgroundImageSize::operator!=(const BackgroundImageSize& size) const +{ + return !operator==(size); +} + +BackgroundImagePosition BackgroundImagePosition::operator+(const BackgroundImagePosition& rhs) const +{ + auto rhsX = rhs.GetSizeValueX(); + auto rhsY = rhs.GetSizeValueY(); + auto lhsX = GetSizeValueX(); + auto lhsY = GetSizeValueY(); + if ((rhs.GetSizeTypeX() != GetSizeTypeX()) || (rhs.GetSizeTypeY() != GetSizeTypeY())) { + // error: unit not same, just return lhs value + return *this; + } + BackgroundImagePosition position; + position.SetSizeValueX(lhsX + rhsX); + position.SetSizeTypeX(GetSizeTypeX()); + position.SetSizeValueY(lhsY + rhsY); + position.SetSizeTypeY(GetSizeTypeY()); + return position; +} + +BackgroundImagePosition BackgroundImagePosition::operator-(const BackgroundImagePosition& rhs) const +{ + auto rhsX = rhs.GetSizeValueX(); + auto rhsY = rhs.GetSizeValueY(); + auto lhsX = GetSizeValueX(); + auto lhsY = GetSizeValueY(); + if ((rhs.GetSizeTypeX() != GetSizeTypeX()) || (rhs.GetSizeTypeY() != GetSizeTypeY())) { + // error: unit not same, just return lhs value + return *this; + } + BackgroundImagePosition position; + position.SetSizeValueX(lhsX - rhsX); + position.SetSizeTypeX(GetSizeTypeX()); + position.SetSizeValueY(lhsY - rhsY); + position.SetSizeTypeY(GetSizeTypeY()); + return position; +} + +BackgroundImagePosition BackgroundImagePosition::operator*(double value) const +{ + BackgroundImagePosition position; + position.SetSizeValueX(GetSizeValueX() * value); + position.SetSizeTypeX(GetSizeTypeX()); + position.SetSizeValueY(GetSizeValueY() * value); + position.SetSizeTypeY(GetSizeTypeY()); + return position; +} + +bool BackgroundImagePosition::operator==(const BackgroundImagePosition& backgroundImagePosition) const +{ + bool isXAxisEqual = NearEqual(GetSizeValueX(), backgroundImagePosition.GetSizeValueX()) && + GetSizeTypeX() == backgroundImagePosition.GetSizeTypeX(); + bool isYAxisEqual = NearEqual(GetSizeValueY(), backgroundImagePosition.GetSizeValueY()) && + GetSizeTypeY() == backgroundImagePosition.GetSizeTypeY(); + return isXAxisEqual && isYAxisEqual; +} + +bool BackgroundImagePosition::operator!=(const BackgroundImagePosition& backgroundImagePosition) const +{ + return !operator==(backgroundImagePosition); +} + +CanvasPath2D::CanvasPath2D(const std::string& cmds) +{ + PathArgs args; + args.cmds = cmds; + caches_.emplace_back(PathCmd::CMDS, args); +} + +CanvasPath2D::CanvasPath2D(const RefPtr& path) +{ + if (path != nullptr) { + auto caches = path->GetCaches(); + caches_.swap(caches); + } +} + +void CanvasPath2D::AddPath(const RefPtr& path) +{ + if (path != nullptr) { + auto caches = path->GetCaches(); + caches_.insert(caches_.end(), caches.begin(), caches.end()); + } +} + +void CanvasPath2D::SetTransform(double a, double b, double c, double d, double e, double f) +{ + PathArgs args; + args.para1 = a; + args.para2 = b; + args.para3 = c; + args.para4 = d; + args.para5 = e; + args.para6 = f; + caches_.emplace_back(PathCmd::TRANSFORM, args); +} + +void CanvasPath2D::MoveTo(double x, double y) +{ + PathArgs args; + args.para1 = x; + args.para2 = y; + caches_.emplace_back(PathCmd::MOVE_TO, args); +} + +void CanvasPath2D::LineTo(double x, double y) +{ + PathArgs args; + args.para1 = x; + args.para2 = y; + caches_.emplace_back(PathCmd::LINE_TO, args); +} + +void CanvasPath2D::Arc(double x, double y, double radius, double startAngle, double endAngle, double ccw) +{ + PathArgs args; + args.para1 = x; + args.para2 = y; + args.para3 = radius; + args.para4 = startAngle; + args.para5 = endAngle; + args.para6 = ccw; + caches_.emplace_back(PathCmd::ARC, args); +} + +void CanvasPath2D::ArcTo(double x1, double y1, double x2, double y2, double radius) +{ + PathArgs args; + args.para1 = x1; + args.para2 = y1; + args.para3 = x2; + args.para4 = y2; + args.para5 = radius; + caches_.emplace_back(PathCmd::ARC_TO, args); +} + +void CanvasPath2D::QuadraticCurveTo(double cpx, double cpy, double x, double y) +{ + PathArgs args; + args.para1 = cpx; + args.para2 = cpy; + args.para3 = x; + args.para4 = y; + caches_.emplace_back(PathCmd::QUADRATIC_CURVE_TO, args); +} + +void CanvasPath2D::BezierCurveTo(double cp1x, double cp1y, double cp2x, double cp2y, double x, double y) +{ + PathArgs args; + args.para1 = cp1x; + args.para2 = cp1y; + args.para3 = cp2x; + args.para4 = cp2y; + args.para5 = x; + args.para6 = y; + caches_.emplace_back(PathCmd::BEZIER_CURVE_TO, args); +} + +void CanvasPath2D::Ellipse(double x, double y, double radiusX, double radiusY, + double rotation, double startAngle, double endAngle, double ccw) +{ + PathArgs args; + args.para1 = x; + args.para2 = y; + args.para3 = radiusX; + args.para4 = radiusY; + args.para5 = rotation; + args.para6 = startAngle; + args.para7 = endAngle; + args.para8 = ccw; + caches_.emplace_back(PathCmd::ELLIPSE, args); +} + +void CanvasPath2D::Rect(double x, double y, double width, double height) +{ + PathArgs args; + args.para1 = x; + args.para2 = y; + args.para3 = width; + args.para4 = height; + caches_.emplace_back(PathCmd::RECT, args); +} + +void CanvasPath2D::ClosePath() +{ + PathArgs args; + caches_.emplace_back(PathCmd::CLOSE_PATH, args); +} + +const std::vector>& CanvasPath2D::GetCaches() const +{ + return caches_; +} + +std::string CanvasPath2D::ToString() const +{ + std::string str; + for (const auto& cache : caches_) { + switch (cache.first) { + case PathCmd::CMDS: { + str.append("CMDS:"); + str.append(cache.second.cmds).append(" "); + break; + } + case PathCmd::TRANSFORM: { + str.append("TRANSFORM:"); + str.append(std::to_string(cache.second.para1)).append(","); + str.append(std::to_string(cache.second.para2)).append(","); + str.append(std::to_string(cache.second.para3)).append(","); + str.append(std::to_string(cache.second.para4)).append(","); + str.append(std::to_string(cache.second.para5)).append(","); + str.append(std::to_string(cache.second.para6)).append(" "); + break; + } + case PathCmd::MOVE_TO: { + str.append("MOVE_TO:"); + str.append(std::to_string(cache.second.para1)).append(","); + str.append(std::to_string(cache.second.para2)).append(" "); + break; + } + case PathCmd::LINE_TO: { + str.append("LINE_TO:"); + str.append(std::to_string(cache.second.para1)).append(","); + str.append(std::to_string(cache.second.para2)).append(" "); + break; + } + case PathCmd::ARC: { + str.append("ARC:"); + str.append(std::to_string(cache.second.para1)).append(","); + str.append(std::to_string(cache.second.para2)).append(","); + str.append(std::to_string(cache.second.para3)).append(","); + str.append(std::to_string(cache.second.para4)).append(","); + str.append(std::to_string(cache.second.para5)).append(","); + str.append(std::to_string(cache.second.para6)).append(" "); + break; + } + case PathCmd::ARC_TO: { + str.append("ARC_TO:"); + str.append(std::to_string(cache.second.para1)).append(","); + str.append(std::to_string(cache.second.para2)).append(","); + str.append(std::to_string(cache.second.para3)).append(","); + str.append(std::to_string(cache.second.para4)).append(","); + str.append(std::to_string(cache.second.para5)).append(" "); + break; + } + case PathCmd::QUADRATIC_CURVE_TO: { + str.append("QUADRATIC_CURVE_TO:"); + str.append(std::to_string(cache.second.para1)).append(","); + str.append(std::to_string(cache.second.para2)).append(","); + str.append(std::to_string(cache.second.para3)).append(","); + str.append(std::to_string(cache.second.para4)).append(" "); + break; + } + case PathCmd::BEZIER_CURVE_TO: { + str.append("BEZIER_CURVE_TO:"); + str.append(std::to_string(cache.second.para1)).append(","); + str.append(std::to_string(cache.second.para2)).append(","); + str.append(std::to_string(cache.second.para3)).append(","); + str.append(std::to_string(cache.second.para4)).append(","); + str.append(std::to_string(cache.second.para5)).append(","); + str.append(std::to_string(cache.second.para6)).append(" "); + break; + } + case PathCmd::ELLIPSE: { + str.append("ELLIPSE:"); + str.append(std::to_string(cache.second.para1)).append(","); + str.append(std::to_string(cache.second.para2)).append(","); + str.append(std::to_string(cache.second.para3)).append(","); + str.append(std::to_string(cache.second.para4)).append(","); + str.append(std::to_string(cache.second.para5)).append(","); + str.append(std::to_string(cache.second.para6)).append(","); + str.append(std::to_string(cache.second.para7)).append(","); + str.append(std::to_string(cache.second.para8)).append(" "); + break; + } + case PathCmd::RECT: { + str.append("RECT:"); + str.append(std::to_string(cache.second.para1)).append(","); + str.append(std::to_string(cache.second.para2)).append(","); + str.append(std::to_string(cache.second.para3)).append(","); + str.append(std::to_string(cache.second.para4)).append(" "); + break; + } + case PathCmd::CLOSE_PATH: { + str.append("CLOSE_PATH").append(" "); + break; + } + default: { + break; + } + } + } + return str; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/common/properties/decoration.h b/frameworks/core/components/common/properties/decoration.h new file mode 100644 index 00000000..6eff244d --- /dev/null +++ b/frameworks/core/components/common/properties/decoration.h @@ -0,0 +1,783 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_DECORATION_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_DECORATION_H + +#include +#include + +#include "base/geometry/dimension.h" +#include "base/geometry/rect.h" +#include "base/memory/ace_type.h" +#include "base/utils/macros.h" +#include "core/components/common/properties/alignment.h" +#include "core/components/common/properties/border.h" +#include "core/components/common/properties/color.h" +#include "core/components/common/properties/edge.h" +#include "core/components/common/properties/shadow.h" + +namespace OHOS::Ace { + +constexpr double CENTER_OFFSET = 50.0; +constexpr double FULL_IMG_SIZE = 100.0; +constexpr double BOX_BEGIN_SIZE = 0.0; +constexpr double BOX_END_SIZE = 100.0; +constexpr double PERCENT_TRANSLATE = 100.0; + +enum class GradientDirection { + LEFT = 0, + LEFT_TOP, + TOP, + RIGHT_TOP, + RIGHT, + RIGHT_BOTTOM, + BOTTOM, + LEFT_BOTTOM, + START_TO_END, + END_TO_START, +}; + +enum class GradientType { + LINEAR, + RADIAL, + CONIC, +}; + +class GradientColor final { +public: + GradientColor() = default; + ~GradientColor() = default; + + explicit GradientColor(const Color& color) + { + color_ = color; + } + + void SetDimension(double value, DimensionUnit unit = DimensionUnit::PERCENT) + { + if (value < 0.0) { + return; + } + if (unit == DimensionUnit::PERCENT && value > BOX_END_SIZE) { + return; + } + dimension_ = Dimension(value, unit); + } + + void SetDimension(const Dimension& dimension) + { + if (dimension.Value() < 0.0) { + return; + } + if (dimension.Unit() == DimensionUnit::PERCENT && dimension.Value() > BOX_END_SIZE) { + return; + } + dimension_ = dimension; + } + + void SetHasValue(bool hasValue) + { + hasValue_ = hasValue; + } + + void SetColor(const Color& color) + { + color_ = color; + } + + const Color& GetColor() const + { + return color_; + } + + const Dimension& GetDimension() const + { + return dimension_; + } + + bool GetHasValue() const + { + return hasValue_; + } + +private: + bool hasValue_ = true; + Color color_ { Color::TRANSPARENT }; + Dimension dimension_ { BOX_END_SIZE, DimensionUnit::PERCENT }; +}; + +class ACE_EXPORT Gradient final { +public: + void AddColor(const GradientColor& color); + + void ClearColors(); + + bool IsValid() const + { + return colors_.size() > 1; + } + + void SetDirection(GradientDirection direction) + { + direction_ = direction; + } + + void SetRepeat(bool repeat) + { + repeat_ = repeat; + } + + void SetAngle(double angle) + { + angle_ = angle; + } + + void SetUseAngle(bool useAngle) + { + useAngle_ = useAngle; + } + + GradientDirection GetDirection() const + { + return direction_; + } + + bool GetRepeat() const + { + return repeat_; + } + + double GetAngle() const + { + return angle_; + } + + bool GetUseAngle() const + { + return useAngle_; + } + + const std::vector& GetColors() const + { + return colors_; + } + + const Offset& GetBeginOffset() const + { + return beginOffset_; + } + + void SetBeginOffset(const Offset& beginOffset) + { + beginOffset_ = beginOffset; + } + + const Offset& GetEndOffset() const + { + return endOffset_; + } + + void SetEndOffset(const Offset& endOffset) + { + endOffset_ = endOffset; + } + + double GetInnerRadius() const + { + return innerRadius_; + } + + void SetInnerRadius(double innerRadius) + { + innerRadius_ = innerRadius; + } + + double GetOuterRadius() const + { + return outerRadius_; + } + + void SetOuterRadius(double outerRadius) + { + outerRadius_ = outerRadius; + } + + GradientType GetType() const + { + return type_; + } + + void SetType(GradientType type) + { + type_ = type; + } + + std::string ToString() const + { + return std::string("Gradient (") + .append(beginOffset_.ToString()) + .append(",").append(std::to_string(innerRadius_)) + .append(" --- ") + .append(endOffset_.ToString()) + .append(",").append(std::to_string(outerRadius_)) + .append(")"); + } + +private: + GradientDirection direction_ { GradientDirection::LEFT }; + double angle_ = 0.0; + bool repeat_ = false; + std::vector colors_; + bool useAngle_ = false; + + GradientType type_ = GradientType::LINEAR; + // used for CanvasLinearGradient + Offset beginOffset_; + Offset endOffset_; + // used for CanvasRadialGradient + double innerRadius_ = 0.0; + double outerRadius_ = 0.0; +}; + +enum class ACE_EXPORT BackgroundImageSizeType { + CONTAIN = 0, + COVER, + AUTO, + LENGTH, + PERCENT, +}; + +class ACE_EXPORT BackgroundImageSize final { +public: + BackgroundImageSize() = default; + BackgroundImageSize(BackgroundImageSizeType type, double value) : typeX_(type), valueX_(value) {} + BackgroundImageSize(BackgroundImageSizeType typeX, double valueX, BackgroundImageSizeType typeY, double valueY) + : typeX_(typeX), valueX_(valueX), typeY_(typeY), valueY_(valueY) {} + ~BackgroundImageSize() = default; + + void SetSizeTypeX(BackgroundImageSizeType type); + void SetSizeTypeY(BackgroundImageSizeType type); + void SetSizeValueX(double value); + void SetSizeValueY(double value); + bool IsValid() const; + BackgroundImageSizeType GetSizeTypeX() const; + BackgroundImageSizeType GetSizeTypeY() const; + double GetSizeValueX() const; + double GetSizeValueY() const; + + bool operator==(const BackgroundImageSize& size) const; + bool operator!=(const BackgroundImageSize& size) const; + +private: + BackgroundImageSizeType typeX_ { BackgroundImageSizeType::AUTO }; + double valueX_ = 0.0; + BackgroundImageSizeType typeY_ { BackgroundImageSizeType::AUTO }; + double valueY_ = 0.0; +}; + +enum class ACE_EXPORT BackgroundImagePositionType { + PERCENT = 0, + PX, +}; + +class ACE_EXPORT BackgroundImagePosition final { +public: + BackgroundImagePosition() = default; + ~BackgroundImagePosition() = default; + BackgroundImagePosition( + BackgroundImagePositionType typeX, double valueX, BackgroundImagePositionType typeY, double valueY) + : typeX_(typeX), typeY_(typeY), valueX_(valueX), valueY_(valueY) {} + + void SetSizeTypeX(BackgroundImagePositionType type) + { + typeX_ = type; + } + + void SetSizeX(const Dimension& sizeX) + { + if (sizeX.Unit() == DimensionUnit::PERCENT) { + typeX_ = BackgroundImagePositionType::PERCENT; + } else { + typeX_ = BackgroundImagePositionType::PX; + } + valueX_ = sizeX.Value(); + } + + void SetSizeTypeY(BackgroundImagePositionType type) + { + typeY_ = type; + } + + void SetSizeY(const Dimension& sizeY) + { + if (sizeY.Unit() == DimensionUnit::PERCENT) { + typeY_ = BackgroundImagePositionType::PERCENT; + } else { + typeY_ = BackgroundImagePositionType::PX; + } + valueY_ = sizeY.Value(); + } + + void SetSizeValueX(double value) + { + valueX_ = value; + } + + void SetSizeValueY(double value) + { + valueY_ = value; + } + + BackgroundImagePositionType GetSizeTypeX() const + { + return typeX_; + } + + BackgroundImagePositionType GetSizeTypeY() const + { + return typeY_; + } + + double GetSizeValueX() const + { + return valueX_; + } + + double GetSizeValueY() const + { + return valueY_; + } + + BackgroundImagePosition operator+(const BackgroundImagePosition& position) const; + + BackgroundImagePosition operator-(const BackgroundImagePosition& position) const; + + BackgroundImagePosition operator*(double value) const; + + bool operator==(const BackgroundImagePosition& backgroundImagePosition) const; + + bool operator!=(const BackgroundImagePosition& backgroundImagePosition) const; + +private: + BackgroundImagePositionType typeX_ { BackgroundImagePositionType::PX }; + BackgroundImagePositionType typeY_ { BackgroundImagePositionType::PX }; + double valueX_ = 0.0; + double valueY_ = 0.0; +}; + +class BackgroundImage final : public AceType { + DECLARE_ACE_TYPE(BackgroundImage, AceType); + +public: + BackgroundImage() = default; + explicit BackgroundImage(const std::string& src) + { + src_ = src; + } + + ~BackgroundImage() override = default; + + const BackgroundImageSize& GetImageSize() const + { + return imageSize_; + } + + const BackgroundImagePosition& GetImagePosition() const + { + return imagePosition_; + } + + ImageRepeat GetImageRepeat() const + { + return imageRepeat_; + } + + const std::string& GetSrc() const + { + return src_; + } + + void SetImageSize(BackgroundImageSizeType type, double value = FULL_IMG_SIZE) + { + imageSize_ = BackgroundImageSize(type, value); + } + + void SetImageSize(BackgroundImageSizeType typeX, double valueX, BackgroundImageSizeType typeY, double valueY) + { + imageSize_ = BackgroundImageSize(typeX, valueX, typeY, valueY); + } + + void SetImagePosition(const BackgroundImagePosition& imagePosition) + { + imagePosition_ = imagePosition; + } + + void SetImagePosition( + BackgroundImagePositionType typeX, double valueX, BackgroundImagePositionType typeY, double valueY) + { + imagePosition_ = BackgroundImagePosition(typeX, valueX, typeY, valueY); + } + + void SetImageRepeat(const ImageRepeat& imageRepeat) + { + imageRepeat_ = imageRepeat; + } + + void SetSrc(const std::string& src) + { + src_ = src; + } + + bool operator==(const BackgroundImage& image) const + { + bool fileName = src_ == image.GetSrc(); + bool size = imageSize_ == image.GetImageSize(); + bool position = imagePosition_ == image.GetImagePosition(); + bool repeat = imageRepeat_ == image.GetImageRepeat(); + return fileName && size && position && repeat; + } + + bool operator!=(const BackgroundImage& image) const + { + return !operator==(image); + } + +private: + std::string src_; + BackgroundImageSize imageSize_; + BackgroundImagePosition imagePosition_; + ImageRepeat imageRepeat_ { ImageRepeat::REPEAT }; +}; + +class ArcBackground final : public AceType { + DECLARE_ACE_TYPE(ArcBackground, AceType); + +public: + ~ArcBackground() override = default; + ArcBackground(Point center, double radius) + { + SetCenter(center); + SetRadius(radius); + } + + const Point& GetCenter() const + { + return center_; + } + + double GetRadius() const + { + return radius_; + } + + void SetCenter(const Point& center) + { + center_ = center; + } + + void SetRadius(double radius) + { + radius_ = radius; + } + + void SetColor(const Color& color) + { + color_ = color; + } + + const Color& GetColor() const + { + return color_; + } + +private: + Point center_; + double radius_ = 0.0; + Color color_; +}; + +class Decoration final : public AceType { + DECLARE_ACE_TYPE(Decoration, AceType); + +public: + Decoration() = default; + ~Decoration() override = default; + + void AddShadow(const Shadow& shadow); + + void ClearAllShadow(); + + void SetBackgroundColor(const Color& backgroundColor) + { + backgroundColor_ = backgroundColor; + } + + void SetAnimationColor(const Color& animationColor) + { + animationColor_ = animationColor; + } + + void SetGradient(const Gradient& gradient) + { + gradient_ = gradient; + } + + void SetImage(const RefPtr& image) + { + image_ = image; + } + + void SetPadding(const Edge& padding) + { + padding_ = padding; + } + + void SetBorderRadius(const Radius& radius) + { + border_.SetBorderRadius(radius); + } + + void SetBorder(const Border& border) + { + border_ = border; + } + + void SetArcBackground(const RefPtr& arcBG) + { + arcBG_ = arcBG; + } + + void SetBlurRadius(const Dimension& radius) + { + blurRadius_ = radius; + } + + void SetWindowBlurProgress(float progress) + { + windowBlurProgress_ = progress; + } + + void SetWindowBlurStyle(WindowBlurStyle style) + { + windowBlurStyle_ = style; + } + + const Border& GetBorder() const + { + return border_; + } + + const Edge& GetPadding() const + { + return padding_; + } + + const RefPtr& GetImage() const + { + return image_; + } + + const Gradient& GetGradient() const + { + return gradient_; + } + + const Color& GetBackgroundColor() const + { + return backgroundColor_; + } + + const Color& GetAnimationColor() const + { + return animationColor_; + } + + const std::vector& GetShadows() const + { + return shadows_; + } + + const RefPtr& GetArcBackground() const + { + return arcBG_; + } + + bool NeedReloadImage(const RefPtr& lastDecoration) const + { + if (!image_) { + return false; + } + + if (!lastDecoration || !(lastDecoration->GetImage())) { + return true; + } + + return (*image_) != (*(lastDecoration->GetImage())); + } + + const Dimension& GetBlurRadius() const + { + return blurRadius_; + } + + float GetWindowBlurProgress() const + { + return windowBlurProgress_; + } + + WindowBlurStyle GetWindowBlurStyle() const + { + return windowBlurStyle_; + } + + // Indicate how much size the decoration taken, excluding the content size. + Size GetOccupiedSize(double dipScale) const; + double HorizontalSpaceOccupied(double dipScale) const; + double VerticalSpaceOccupied(double dipScale) const; + + Offset GetOffset(double dipScale) const; + +private: + // padding is zero + Edge padding_; + // border contains black color and 1.0f thickness as default + Border border_; + // shadow vector is empty + std::vector shadows_; + // color is transparent + Color backgroundColor_ = Color::TRANSPARENT; + Color animationColor_ = Color::TRANSPARENT; + // Gradient is not implemented + Gradient gradient_ = Gradient(); + RefPtr image_; + RefPtr arcBG_; + // Blur radius + Dimension blurRadius_; + // window blur progress + float windowBlurProgress_ = 0.0f; + // window blur style; + WindowBlurStyle windowBlurStyle_ = WindowBlurStyle::STYLE_BACKGROUND_SMALL_LIGHT; +}; + +class Pattern final { +public: + bool IsValid() const + { + return !imgSrc_.empty(); + } + + const std::string& GetImgSrc() const + { + return imgSrc_; + } + + void SetImgSrc(const std::string& imgSrc) + { + imgSrc_ = imgSrc; + } + + const std::string& GetRepetition() const + { + return repetition_; + } + + void SetRepetition(const std::string& repetition) + { + repetition_ = repetition; + } + + double GetImageWidth() const + { + return imageWidth_; + } + + void SetImageWidth(double imageWidth) + { + imageWidth_ = imageWidth; + } + + double GetImageHeight() const + { + return imageHeight_; + } + + void SetImageHeight(double imageHeight) + { + imageHeight_ = imageHeight; + } + +private: + double imageWidth_ = 0.0; + double imageHeight_ = 0.0; + std::string imgSrc_; + std::string repetition_; +}; + +enum class PathCmd { + CMDS, + TRANSFORM, + MOVE_TO, + LINE_TO, + ARC, + ARC_TO, + QUADRATIC_CURVE_TO, + BEZIER_CURVE_TO, + ELLIPSE, + RECT, + CLOSE_PATH, +}; + +struct PathArgs { + std::string cmds; + double para1 = 0.0; + double para2 = 0.0; + double para3 = 0.0; + double para4 = 0.0; + double para5 = 0.0; + double para6 = 0.0; + double para7 = 0.0; + double para8 = 0.0; +}; + +class ACE_EXPORT CanvasPath2D : virtual public AceType { + DECLARE_ACE_TYPE(CanvasPath2D, AceType) +public: + CanvasPath2D() = default; + ~CanvasPath2D() = default; + explicit CanvasPath2D(const std::string& cmds); + explicit CanvasPath2D(const RefPtr& path); + void AddPath(const RefPtr& path); + void SetTransform(double a, double b, double c, double d, double e, double f); + void MoveTo(double x, double y); + void LineTo(double x, double y); + void Arc(double x, double y, double radius, double startAngle, double endAngle, double ccw); + void ArcTo(double x1, double y1, double x2, double y2, double radius); + void QuadraticCurveTo(double cpx, double cpy, double x, double y); + void BezierCurveTo(double cp1x, double cp1y, double cp2x, double cp2y, double x, double y); + void Ellipse(double x, double y, double radiusX, double radiusY, + double rotation, double startAngle, double endAngle, double ccw); + void Rect(double x, double y, double width, double height); + void ClosePath(); + const std::vector>& GetCaches() const; + std::string ToString() const; + +private: + std::vector> caches_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_DECORATION_H diff --git a/frameworks/core/components/common/properties/edge.cpp b/frameworks/core/components/common/properties/edge.cpp new file mode 100644 index 00000000..37502edd --- /dev/null +++ b/frameworks/core/components/common/properties/edge.cpp @@ -0,0 +1,102 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/common/properties/edge.h" + +#include + +#include "frameworks/base/utils/string_utils.h" + +namespace OHOS::Ace { +namespace { + +double GetValueInPx(const Dimension& value, double dipScale) +{ + if (value.Unit() == DimensionUnit::VP || value.Unit() == DimensionUnit::FP) { + return value.Value() * dipScale; + } else { + return value.Value(); + } +} + +} // namespace + +const Edge Edge::NONE = Edge(0.0, 0.0, 0.0, 0.0); + +bool Edge::FromString(const std::string& value, Edge& edge) +{ + bool result = true; + std::vector offsets; + StringUtils::StringSpliter(value, ' ', offsets); + switch (offsets.size()) { + case 1: // example: 1px + edge.top_ = StringUtils::StringToDimension(offsets[0]); + edge.right_ = StringUtils::StringToDimension(offsets[0]); + edge.bottom_ = StringUtils::StringToDimension(offsets[0]); + edge.left_ = StringUtils::StringToDimension(offsets[0]); + break; + case 2: // example: 1px 2px + edge.top_ = StringUtils::StringToDimension(offsets[0]); + edge.right_ = StringUtils::StringToDimension(offsets[1]); + edge.bottom_ = StringUtils::StringToDimension(offsets[0]); + edge.left_ = StringUtils::StringToDimension(offsets[1]); + break; + case 3: // example: 1px 2px 3px + edge.top_ = StringUtils::StringToDimension(offsets[0]); + edge.right_ = StringUtils::StringToDimension(offsets[1]); + edge.bottom_ = StringUtils::StringToDimension(offsets[2]); + edge.left_ = StringUtils::StringToDimension(offsets[1]); + break; + case 4: // example: 1px 2px 3px 4px + edge.top_ = StringUtils::StringToDimension(offsets[0]); + edge.right_ = StringUtils::StringToDimension(offsets[1]); + edge.bottom_ = StringUtils::StringToDimension(offsets[2]); + edge.left_ = StringUtils::StringToDimension(offsets[3]); + break; + default: + result = false; + break; + } + return result; +} + +bool Edge::IsValid() const +{ + return left_.Value() >= 0.0 && top_.Value() >= 0.0 && right_.Value() >= 0.0 && bottom_.Value() >= 0.0; +} + +Size Edge::GetLayoutSizeInPx(double dipScale) const +{ + double width = GetValueInPx(left_, dipScale) + GetValueInPx(right_, dipScale); + double height = GetValueInPx(top_, dipScale) + GetValueInPx(bottom_, dipScale); + return Size(width, height); +} + +Offset Edge::GetOffsetInPx(double dipScale) const +{ + return Offset(GetValueInPx(left_, dipScale), GetValueInPx(top_, dipScale)); +} + +double Edge::HorizontalInPx(double dipScale) const +{ + return GetValueInPx(left_, dipScale) + GetValueInPx(right_, dipScale); +} + +double Edge::VerticalInPx(double dipScale) const +{ + return GetValueInPx(top_, dipScale) + GetValueInPx(bottom_, dipScale); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/common/properties/edge.h b/frameworks/core/components/common/properties/edge.h new file mode 100644 index 00000000..881281e0 --- /dev/null +++ b/frameworks/core/components/common/properties/edge.h @@ -0,0 +1,209 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_EDGE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_EDGE_H + +#include "base/geometry/dimension.h" +#include "base/geometry/offset.h" +#include "base/geometry/size.h" +#include "base/utils/macros.h" +#include "base/utils/utils.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { + +// Types of padding and margin. Contains four directions: left, top, right and bottom. +class ACE_EXPORT Edge { +public: + Edge() = default; + explicit Edge(double value) : Edge(value, value, value, value) {}; + explicit Edge(const Dimension& value) : Edge(value, value, value, value) {}; + Edge(double left, double top, double right, double bottom, DimensionUnit unit = DimensionUnit::PX) + : left_(Dimension(left, unit)), top_(Dimension(top, unit)), right_(Dimension(right, unit)), + bottom_(Dimension(bottom, unit)) {}; + Edge(const Dimension& left, const Dimension& top, const Dimension& right, const Dimension& bottom) + : left_(left), top_(top), right_(right), bottom_(bottom) {}; + virtual ~Edge() = default; + + static const Edge NONE; + + // Parse string to edge, support four formats(value separated by one space): + // 1. 1px, edge has same value. + // 2. 1px 2px, top and bottom are 1px, left and right are 2px. + // 3. 1px 2px 3px, top is 1px, left and right are 2px, bottom is 3px. + // 4. 1px 2px 3px 4px, top is 1px, right is 2px, bottom is 3px and left is 4px. + static bool FromString(const std::string& value, Edge& edge); + + bool IsValid() const; + Size GetLayoutSizeInPx(double dipScale) const; + Offset GetOffsetInPx(double dipScale) const; + double HorizontalInPx(double dipScale) const; + double VerticalInPx(double dipScale) const; + + const Dimension& Left() const + { + return left_; + } + + virtual void SetLeft(const Dimension& left) + { + left_ = left; + } + + const Dimension& Top() const + { + return top_; + } + + virtual void SetTop(const Dimension& top) + { + top_ = top; + } + + const Dimension& Right() const + { + return right_; + } + + virtual void SetRight(const Dimension& right) + { + right_ = right; + } + + const Dimension& Bottom() const + { + return bottom_; + } + + virtual void SetBottom(const Dimension& bottom) + { + bottom_ = bottom; + } + + Edge operator+(const Edge& edge) const + { + return Edge(left_ + edge.left_, top_ + edge.top_, right_ + edge.right_, bottom_ + edge.bottom_); + } + + Edge operator-(const Edge& edge) const + { + return Edge(left_ - edge.left_, top_ - edge.top_, right_ - edge.right_, bottom_ - edge.bottom_); + } + + Edge operator*(const double factor) const + { + return Edge(left_ * factor, top_ * factor, right_ * factor, bottom_ * factor); + } + + Edge operator/(const double factor) const + { + if (NearZero(factor)) { + return NONE; + } + return Edge(left_ / factor, top_ / factor, right_ / factor, bottom_ / factor); + } + + bool operator==(const Edge& edge) const + { + return (edge.left_ == left_) && (edge.top_ == top_) && (edge.right_ == right_) && (edge.bottom_ == bottom_); + } + +protected: + Dimension left_; + Dimension top_; + Dimension right_; + Dimension bottom_; +}; + +class EdgePx : public Edge { +public: + EdgePx() = default; + explicit EdgePx(double value) : EdgePx(value, value, value, value) {}; + EdgePx(double left, double top, double right, double bottom) : Edge(left, top, right, bottom) {}; + ~EdgePx() override = default; + + double LeftPx() const + { + return left_.Value(); + } + + double TopPx() const + { + return top_.Value(); + } + + double RightPx() const + { + return right_.Value(); + } + + double BottomPx() const + { + return bottom_.Value(); + } + + void SetLeft(const Dimension& left) override + { + if (left.Unit() != DimensionUnit::PX) { + return; + } + left_ = left; + } + + void SetTop(const Dimension& top) override + { + if (top.Unit() != DimensionUnit::PX) { + return; + } + top_ = top; + } + + void SetRight(const Dimension& right) override + { + if (right.Unit() != DimensionUnit::PX) { + return; + } + right_ = right; + } + + void SetBottom(const Dimension& bottom) override + { + if (bottom.Unit() != DimensionUnit::PX) { + return; + } + bottom_ = bottom; + } + + Size GetLayoutSize() const + { + return Size(left_.Value() + right_.Value(), top_.Value() + bottom_.Value()); + } + + Offset GetOffset() const + { + return Offset(left_.Value(), top_.Value()); + } + + EdgePx operator+(const EdgePx& edge) const + { + return EdgePx(LeftPx() + edge.LeftPx(), TopPx() + edge.TopPx(), RightPx() + edge.RightPx(), + BottomPx() + edge.BottomPx()); + } +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_EDGE_H diff --git a/frameworks/core/components/common/properties/page_transition_option.cpp b/frameworks/core/components/common/properties/page_transition_option.cpp new file mode 100644 index 00000000..27105b3c --- /dev/null +++ b/frameworks/core/components/common/properties/page_transition_option.cpp @@ -0,0 +1,619 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/common/properties/page_transition_option.h" + +#include "base/utils/device_type.h" +#include "base/utils/system_properties.h" +#include "core/animation/curve_animation.h" +#include "core/animation/property_animatable.h" + +namespace OHOS::Ace { +namespace { + +constexpr float TRANSITION_FACTOR = 0.8f; +constexpr float TRANSITION_FACTOR_IN = 0.5f; +constexpr float TRANSITION_FACTOR_OUT = 0.2f; +constexpr float TRANSITION_FACTOR_WATCH = 0.5f; +constexpr float BLACK_OPACITY = 0.3f; +constexpr float SHARED_TRANSITION_ENTER_START_OFFSET_X = 68.0f; + +void CreateSharedInOption(bool isRightToLeft, double deviceViewScale, double deviceWidth, TweenOption& option) +{ + // opacity. parameters only have local meaning, no need to define const variables. + auto opacityKeyframe1 = AceType::MakeRefPtr>(0.0f, 0.0f); // start with invisible + auto opacityKeyframe2 = AceType::MakeRefPtr>(0.428f, 0.0f); // invisible at 42.8% of total duration + opacityKeyframe2->SetCurve(Curves::LINEAR); + auto opacityKeyframe3 = AceType::MakeRefPtr>(1.0f, 1.0f); // finally visible + opacityKeyframe3->SetCurve(Curves::FRICTION); + auto opacityAnimation = AceType::MakeRefPtr>(); + opacityAnimation->AddKeyframe(opacityKeyframe1); + opacityAnimation->AddKeyframe(opacityKeyframe2); + opacityAnimation->AddKeyframe(opacityKeyframe3); + option.SetOpacityAnimation(opacityAnimation); + // translate. parameters only have local meaning, no need to define const variables. + double startX = SHARED_TRANSITION_ENTER_START_OFFSET_X / deviceViewScale - deviceWidth; + double endX = 0.0; + if (isRightToLeft) { + startX = -1.0 * startX; + endX = 0.0; + } + auto translateXKeyframe1 = + AceType::MakeRefPtr>(0.0f, Offset(startX, 0)); // start with startX + auto translateXKeyframe2 = + AceType::MakeRefPtr>(0.428f, Offset(startX, 0)); // start at 42.8% of total duration + translateXKeyframe2->SetCurve(Curves::LINEAR); + auto translateXKeyframe3 = AceType::MakeRefPtr>(1.0f, Offset(endX, 0)); // finally at endX + translateXKeyframe3->SetCurve(Curves::FRICTION); + auto translateXAnimation = AceType::MakeRefPtr>(); + translateXAnimation->AddKeyframe(translateXKeyframe1); + translateXAnimation->AddKeyframe(translateXKeyframe2); + translateXAnimation->AddKeyframe(translateXKeyframe3); + option.SetTranslateAnimations(AnimationType::TRANSLATE_X, translateXAnimation); +} + +void CreateSharedOutOption(TweenOption& option) +{ + // opacity. parameters only have local meaning, no need to define const variables. + auto opacityKeyframe1 = AceType::MakeRefPtr>(0.0f, 1.0f); // start with invisible + auto opacityKeyframe2 = AceType::MakeRefPtr>(0.714f, 0.0f); // invisible at 71.4% of total duration + opacityKeyframe2->SetCurve(Curves::FRICTION); + auto opacityKeyframe3 = AceType::MakeRefPtr>(1.0f, 0.0f); // finally visible + opacityKeyframe3->SetCurve(Curves::LINEAR); + auto opacityAnimation = AceType::MakeRefPtr>(); + opacityAnimation->AddKeyframe(opacityKeyframe1); + opacityAnimation->AddKeyframe(opacityKeyframe2); + opacityAnimation->AddKeyframe(opacityKeyframe3); + option.SetOpacityAnimation(opacityAnimation); +} + +// Follow Watch's UI Standard. +void CreateSharedStaticOption(TweenOption& option) +{ + // opacity. parameters only have local meaning, no need to define const variables. + auto opacityKeyframe1 = AceType::MakeRefPtr>(0.0f, 0.0f); // start with invisible + auto opacityKeyframe2 = AceType::MakeRefPtr>(0.428f, 0.0f); // invisible at 42.8% of total duration + opacityKeyframe2->SetCurve(Curves::LINEAR); + auto opacityKeyframe3 = AceType::MakeRefPtr>(1.0f, 1.0f); // finally visible + opacityKeyframe3->SetCurve(Curves::FRICTION); + auto opacityAnimation = AceType::MakeRefPtr>(); + opacityAnimation->AddKeyframe(opacityKeyframe1); + opacityAnimation->AddKeyframe(opacityKeyframe2); + opacityAnimation->AddKeyframe(opacityKeyframe3); + option.SetOpacityAnimation(opacityAnimation); +} + +} // namespace + +constexpr int32_t TRANSITION_PHONE_DURATION = 350; // 0.35s +constexpr int32_t TRANSITION_WATCH_DURATION = 350; // 0.35s +constexpr int32_t TRANSITION_TV_DURATION = 1000; // 1s +constexpr double TRANSITION_DEFAULT_WIDTH = 750.0; +constexpr double TRANSITION_DEFAULT_HEIGHT = 1900.0; +constexpr double TRANSITION_DEFAULT_CORNER_RADIUS = 0.0; + +TransitionTweenOption::TransitionTweenOption(bool isRightToLeft, const WeakPtr& context) +{ + auto pipelineContext = context.Upgrade(); + if (pipelineContext) { + auto deviceWidth = pipelineContext->GetStageRect().Width(); + deviceWidth_ = deviceWidth > 0.0 ? deviceWidth : deviceWidth_; + auto deviceHeight = pipelineContext->GetStageRect().Height(); + deviceHeight_ = deviceHeight > 0.0 ? deviceHeight : deviceHeight_; + auto viewScale = pipelineContext->GetViewScale(); + deviceViewScale_ = viewScale > 0.0 ? viewScale : deviceViewScale_; + isRightToLeft_ = isRightToLeft; + windowModal_ = pipelineContext->GetWindowModal(); + } +} + +const TweenOption& TransitionTweenOption::GetTransitionContentInOption() const +{ + return contentInOption_; +} + +const TweenOption& TransitionTweenOption::GetTransitionContentOutOption() const +{ + return contentOutOption_; +} + +const TweenOption& TransitionTweenOption::GetTransitionBackgroundInOption() const +{ + return backgroundInOption_; +} + +const TweenOption& TransitionTweenOption::GetTransitionBackgroundOutOption() const +{ + return backgroundOutOption_; +} + +const TweenOption& TransitionTweenOption::GetTransitionFrontDecorationOption() const +{ + return frontDecorationOption_; +} + +const TweenOption& TransitionTweenOption::GetSharedTransitionFrontDecorationOption() const +{ + return sharedFrontDecorationOption_; +} + +const TweenOption& TransitionTweenOption::GetSharedInOption() const +{ + return sharedTransitionInOption_; +} + +const TweenOption& TransitionTweenOption::GetSharedOutOption() const +{ + return sharedTransitionOutOption_; +} + +TransitionTvTweenOption::TransitionTvTweenOption(bool isRightToLeft, const WeakPtr& context) + : TransitionTweenOption(isRightToLeft, context) +{ + CreateTransitionInOption(); + CreateTransitionOutOption(); + // Currently, Tv Do not have UI standard, no need to create special shared transition. +} + +void TransitionTvTweenOption::CreateTransitionInOption() +{ + CreateTransitionInContentOption(); + CreateTransitionInBackgroundOption(); +} + +void TransitionTvTweenOption::CreateTransitionInContentOption() +{ + // content opacity. parameters only have local meaning, no need to define const variables. + auto opacityKeyframe1 = AceType::MakeRefPtr>(0.0f, 0.0f); // start with invisible + auto opacityKeyframe2 = AceType::MakeRefPtr>(0.55f, 0.0f); // invisible at 55% of total duration + opacityKeyframe2->SetCurve(Curves::FRICTION); + auto opacityKeyframe3 = AceType::MakeRefPtr>(1.0f, 1.0f); // finally visible + opacityKeyframe3->SetCurve(Curves::FRICTION); + auto opacityAnimation = AceType::MakeRefPtr>(); + opacityAnimation->AddKeyframe(opacityKeyframe1); + opacityAnimation->AddKeyframe(opacityKeyframe2); + opacityAnimation->AddKeyframe(opacityKeyframe3); + contentInOption_.SetOpacityAnimation(opacityAnimation); + + // content scale. parameters only have local meaning, no need to define const variables. + auto scaleKeyframe1 = AceType::MakeRefPtr>(0.0f, 0.0f); // start with invisible + auto scaleKeyframe2 = AceType::MakeRefPtr>(0.55f, 0.9f); // 90% scale at 55% of total duration + scaleKeyframe2->SetCurve(Curves::FRICTION); + auto scaleKeyframe3 = AceType::MakeRefPtr>(1.0f, 1.0f); // finally 100% scale + scaleKeyframe3->SetCurve(Curves::FRICTION); + auto scaleAnimation = AceType::MakeRefPtr>(); + scaleAnimation->AddKeyframe(scaleKeyframe1); + scaleAnimation->AddKeyframe(scaleKeyframe2); + scaleAnimation->AddKeyframe(scaleKeyframe3); + contentInOption_.SetTransformFloatAnimation(AnimationType::SCALE, scaleAnimation); + contentInOption_.SetDuration(TRANSITION_TV_DURATION); +} + +void TransitionTvTweenOption::CreateTransitionInBackgroundOption() +{ + // background opacity. parameters only have local meaning, no need to define const variables. + auto opacityKeyframe1 = AceType::MakeRefPtr>(0.0f, 0.0f); // start with invisible + auto opacityKeyframe2 = AceType::MakeRefPtr>(0.5f, 0.0f); // invisible at 50% of total duration + opacityKeyframe2->SetCurve(Curves::FRICTION); + auto opacityKeyframe3 = AceType::MakeRefPtr>(0.95f, 1.0f); // visible at 95% of total duration + opacityKeyframe3->SetCurve(Curves::FRICTION); + auto opacityKeyframe4 = AceType::MakeRefPtr>(1.0f, 1.0f); // finally visible + opacityKeyframe4->SetCurve(Curves::FRICTION); + auto opacityAnimation = AceType::MakeRefPtr>(); + opacityAnimation->AddKeyframe(opacityKeyframe1); + opacityAnimation->AddKeyframe(opacityKeyframe2); + opacityAnimation->AddKeyframe(opacityKeyframe3); + opacityAnimation->AddKeyframe(opacityKeyframe4); + backgroundInOption_.SetOpacityAnimation(opacityAnimation); + + // background scale. parameters only have local meaning, no need to define const variables. + auto scaleKeyframe1 = AceType::MakeRefPtr>(0.0f, 0.0f); // start with invisible + auto scaleKeyframe2 = AceType::MakeRefPtr>(0.5f, 1.1f); // 110% scale at 50% of total duration + scaleKeyframe2->SetCurve(Curves::FRICTION); + auto scaleKeyframe3 = AceType::MakeRefPtr>(0.95f, 1.0f); // 100% scale at 95% of total duration + scaleKeyframe3->SetCurve(Curves::FRICTION); + auto scaleKeyframe4 = AceType::MakeRefPtr>(1.0f, 1.0f); // finally 100% scale + scaleKeyframe4->SetCurve(Curves::FRICTION); + auto scaleAnimation = AceType::MakeRefPtr>(); + scaleAnimation->AddKeyframe(scaleKeyframe1); + scaleAnimation->AddKeyframe(scaleKeyframe2); + scaleAnimation->AddKeyframe(scaleKeyframe3); + scaleAnimation->AddKeyframe(scaleKeyframe4); + backgroundInOption_.SetTransformFloatAnimation(AnimationType::SCALE, scaleAnimation); +} + +void TransitionTvTweenOption::CreateTransitionOutOption() +{ + CreateTransitionOutContentOption(); + CreateTransitionOutBackgroundOption(); +} + +void TransitionTvTweenOption::CreateTransitionOutContentOption() +{ + CreatTransitionOutOption(contentOutOption_); +} + +void TransitionTvTweenOption::CreateTransitionOutBackgroundOption() +{ + CreatTransitionOutOption(backgroundOutOption_); +} + +void TransitionTvTweenOption::CreatTransitionOutOption(TweenOption& option) +{ + // out opacity. parameters only have local meaning, no need to define const variables. + auto opacityKeyframe1 = AceType::MakeRefPtr>(0.0f, 1.0f); // start with visible + auto opacityKeyframe2 = AceType::MakeRefPtr>(0.1f, 1.0f); // visible at 10% of total duration + opacityKeyframe2->SetCurve(Curves::FRICTION); + auto opacityKeyframe3 = AceType::MakeRefPtr>(0.55f, 0.0f); // invisible at 55% of total duration + opacityKeyframe3->SetCurve(Curves::FRICTION); + auto opacityKeyframe4 = AceType::MakeRefPtr>(1.0f, 0.0f); // finally invisible + opacityKeyframe4->SetCurve(Curves::FRICTION); + auto opacityAnimation = AceType::MakeRefPtr>(); + opacityAnimation->AddKeyframe(opacityKeyframe1); + opacityAnimation->AddKeyframe(opacityKeyframe2); + opacityAnimation->AddKeyframe(opacityKeyframe3); + opacityAnimation->AddKeyframe(opacityKeyframe4); + option.SetOpacityAnimation(opacityAnimation); + + // out scale. parameters only have local meaning, no need to define const variables. + auto scaleKeyframe1 = AceType::MakeRefPtr>(0.0f, 1.0f); // 100% scale at start + auto scaleKeyframe2 = AceType::MakeRefPtr>(0.1f, 1.0f); // 100% scale at 10% of total duration + scaleKeyframe2->SetCurve(Curves::FRICTION); + auto scaleKeyframe3 = AceType::MakeRefPtr>(0.55f, 1.1f); // 110% scale at 55% of total duration + scaleKeyframe3->SetCurve(Curves::FRICTION); + auto scaleKeyframe4 = AceType::MakeRefPtr>(1.0f, 1.0f); // 100% scale at 100% of total duration + scaleKeyframe4->SetCurve(Curves::FRICTION); + auto scaleAnimation = AceType::MakeRefPtr>(); + scaleAnimation->AddKeyframe(scaleKeyframe1); + scaleAnimation->AddKeyframe(scaleKeyframe2); + scaleAnimation->AddKeyframe(scaleKeyframe3); + scaleAnimation->AddKeyframe(scaleKeyframe4); + option.SetTransformFloatAnimation(AnimationType::SCALE, scaleAnimation); + option.SetDuration(TRANSITION_TV_DURATION); +} + +RefPtr TransitionTweenOptionFactory::CreateTransitionTweenOption( + DeviceType deviceType, TransitionEvent event, bool isRightToLeft, const RRect& rrect, + const WeakPtr& context) +{ + switch (deviceType) { + case DeviceType::PHONE: + if (rrect.GetRect().IsValid()) { + return AceType::MakeRefPtr(event, isRightToLeft, rrect, context); + } + return AceType::MakeRefPtr(event, isRightToLeft, context); + case DeviceType::TV: + return AceType::MakeRefPtr(isRightToLeft, context); + case DeviceType::WATCH: + return AceType::MakeRefPtr(event, isRightToLeft, context); + default: + LOGE("unknown transition type: %{public}d, use default type", deviceType); + return AceType::MakeRefPtr(event, isRightToLeft, context); + } +} + +void TransitionTweenOptionFactory::CreateSharedTweenOption(SharedTransitionEffectType type, TweenOption& option) +{ + if (type == SharedTransitionEffectType::SHARED_EFFECT_STATIC) { + CreateSharedStaticOption(option); + } else { + LOGW("Unsupported Shared transition effect type: %{public}d", type); + } +} + +TransitionPhoneTweenOption::TransitionPhoneTweenOption( + TransitionEvent event, bool isRightToLeft, const WeakPtr& context) + : TransitionTweenOption(isRightToLeft, context) +{ + if (windowModal_ == WindowModal::DIALOG_MODAL) { + CreateDialogModalTransitionInOption(event); + CreateDialogModalTransitionOutOption(event); + } else { + CreateTransitionInOption(event); + CreateTransitionOutOption(event); + } + CreateSharedInOption(isRightToLeft_, deviceViewScale_, deviceWidth_, sharedTransitionInOption_); + CreateSharedOutOption(sharedTransitionOutOption_); + // extra options for phone + auto widthAnimation = AceType::MakeRefPtr>(deviceWidth_, deviceWidth_, Curves::FRICTION); + sharedTransitionOutOption_.SetPropertyAnimationFloat(PropertyAnimatableType::PROPERTY_WIDTH, widthAnimation); + + auto translateAnimation = AceType::MakeRefPtr>( + DimensionOffset(Offset()), DimensionOffset(Offset()), Curves::LINEAR); + sharedTransitionOutOption_.SetTranslateAnimations(AnimationType::TRANSLATE_X, translateAnimation); + + auto colorAnimation = AceType::MakeRefPtr>( + Color::FromRGBO(0, 0, 0, 0.0), Color::FromRGBO(0, 0, 0, 0.0), Curves::FRICTION); + sharedFrontDecorationOption_.SetColorAnimation(colorAnimation); + sharedFrontDecorationOption_.SetIsBackground(false); +} + +TransitionPhoneTweenOption::TransitionPhoneTweenOption( + TransitionEvent event, bool isRightToLeft, const RRect& rrect, const WeakPtr& context) + : TransitionTweenOption(isRightToLeft, context) +{ + CreateCardTransitionInOption(event, rrect); + CreateCardTransitionOutOption(event); + + CreateSharedInOption(isRightToLeft_, deviceViewScale_, deviceWidth_, sharedTransitionInOption_); + CreateSharedOutOption(sharedTransitionOutOption_); + // extra options for phone + auto widthAnimation = AceType::MakeRefPtr>(deviceWidth_, deviceWidth_, Curves::FRICTION); + sharedTransitionOutOption_.SetPropertyAnimationFloat(PropertyAnimatableType::PROPERTY_WIDTH, widthAnimation); + + auto translateAnimation = AceType::MakeRefPtr>( + DimensionOffset(Offset()), DimensionOffset(Offset()), Curves::LINEAR); + sharedTransitionOutOption_.SetTranslateAnimations(AnimationType::TRANSLATE_X, translateAnimation); + + auto colorAnimation = AceType::MakeRefPtr>( + Color::FromRGBO(0, 0, 0, 0.0), Color::FromRGBO(0, 0, 0, 0.0), Curves::FRICTION); + sharedFrontDecorationOption_.SetColorAnimation(colorAnimation); + sharedFrontDecorationOption_.SetIsBackground(false); +} + +void TransitionPhoneTweenOption::CreateDialogModalTransitionInOption(TransitionEvent event) +{ + RefPtr> translateAnimation; + if (isRightToLeft_) { + translateAnimation = AceType::MakeRefPtr>( + DimensionOffset(Dimension(-deviceWidth_, DimensionUnit::PX), Dimension()), + DimensionOffset(Dimension(), Dimension()), Curves::FRICTION); + } else { + translateAnimation = AceType::MakeRefPtr>( + DimensionOffset(Dimension(deviceWidth_, DimensionUnit::PX), Dimension()), + DimensionOffset(Dimension(), Dimension()), Curves::FRICTION); + } + contentInOption_.SetTranslateAnimations(AnimationType::TRANSLATE_X, translateAnimation); + contentInOption_.SetDuration(TRANSITION_PHONE_DURATION); +} + +void TransitionPhoneTweenOption::CreateTransitionInOption(TransitionEvent event) +{ + if (isRightToLeft_) { + auto translateAnimation = AceType::MakeRefPtr>( + DimensionOffset(Dimension(-deviceWidth_ * TRANSITION_FACTOR_IN, DimensionUnit::PX), Dimension()), + DimensionOffset(Dimension(), Dimension()), Curves::FRICTION); + auto widthAnimation = AceType::MakeRefPtr>( + deviceWidth_ * TRANSITION_FACTOR_IN, deviceWidth_, Curves::FRICTION); + contentInOption_.SetPropertyAnimationFloat(PropertyAnimatableType::PROPERTY_WIDTH, widthAnimation); + contentInOption_.SetTranslateAnimations(AnimationType::TRANSLATE_X, translateAnimation); + } else { + auto translateAnimation = AceType::MakeRefPtr>( + DimensionOffset(Dimension(deviceWidth_ * TRANSITION_FACTOR_IN, DimensionUnit::PX), Dimension()), + DimensionOffset(Dimension(), Dimension()), Curves::FRICTION); + auto offsetXAnimation = + AceType::MakeRefPtr>(deviceWidth_ * TRANSITION_FACTOR_IN, 0.0f, Curves::FRICTION); + contentInOption_.SetPropertyAnimationFloat(PropertyAnimatableType::PROPERTY_OFFSET_X, offsetXAnimation); + contentInOption_.SetTranslateAnimations(AnimationType::TRANSLATE_X, translateAnimation); + } + if (event == TransitionEvent::POP_START) { + contentInOption_.SetCurve(Curves::FAST_OUT_SLOW_IN); + } + contentInOption_.SetDuration(TRANSITION_PHONE_DURATION); +} + +void TransitionPhoneTweenOption::CreateDialogModalTransitionOutOption(TransitionEvent event) +{ + RefPtr> translateAnimation; + if (isRightToLeft_) { + translateAnimation = AceType::MakeRefPtr>(DimensionOffset(Offset()), + DimensionOffset(Offset(deviceWidth_, 0)), Curves::FRICTION); + } else { + translateAnimation = AceType::MakeRefPtr>(DimensionOffset(Offset()), + DimensionOffset(Offset(-deviceWidth_, 0)), Curves::FRICTION); + } + auto opacityAnimation = AceType::MakeRefPtr>(1.0f, 1.0f, Curves::LINEAR); + contentOutOption_.SetOpacityAnimation(opacityAnimation); + contentOutOption_.SetTranslateAnimations(AnimationType::TRANSLATE_X, translateAnimation); +} + +void TransitionPhoneTweenOption::CreateTransitionOutOption(TransitionEvent event) +{ + if (isRightToLeft_) { + auto translateAnimation = AceType::MakeRefPtr>(DimensionOffset(Offset()), + DimensionOffset(Offset(deviceWidth_ * TRANSITION_FACTOR_OUT, 0)), Curves::FRICTION); + auto offsetXAnimation = + AceType::MakeRefPtr>(0.0f, deviceWidth_ * TRANSITION_FACTOR, Curves::FRICTION); + contentOutOption_.SetPropertyAnimationFloat(PropertyAnimatableType::PROPERTY_OFFSET_X, offsetXAnimation); + contentOutOption_.SetTranslateAnimations(AnimationType::TRANSLATE_X, translateAnimation); + } else { + auto translateAnimation = AceType::MakeRefPtr>(DimensionOffset(Offset()), + DimensionOffset(Offset(-deviceWidth_ * TRANSITION_FACTOR_OUT, 0)), Curves::FRICTION); + auto widthAnimation = AceType::MakeRefPtr>( + deviceWidth_, deviceWidth_ * TRANSITION_FACTOR_OUT, Curves::FRICTION); + contentOutOption_.SetPropertyAnimationFloat(PropertyAnimatableType::PROPERTY_WIDTH, widthAnimation); + contentOutOption_.SetTranslateAnimations(AnimationType::TRANSLATE_X, translateAnimation); + } + auto opacityAnimation = AceType::MakeRefPtr>(1.0f, 1.0f, Curves::LINEAR); + contentOutOption_.SetOpacityAnimation(opacityAnimation); + + auto colorAnimation = AceType::MakeRefPtr>( + Color::FromRGBO(0, 0, 0, 0.0), Color::FromRGBO(0, 0, 0, BLACK_OPACITY), Curves::FRICTION); + frontDecorationOption_.SetColorAnimation(colorAnimation); + frontDecorationOption_.SetIsBackground(false); + + if (event == TransitionEvent::POP_START) { + contentOutOption_.SetCurve(Curves::FAST_OUT_SLOW_IN); + frontDecorationOption_.SetCurve(Curves::FAST_OUT_SLOW_IN); + } +} + +TransitionWatchTweenOption::TransitionWatchTweenOption( + TransitionEvent event, bool isRightToLeft, const WeakPtr& context) + : TransitionTweenOption(isRightToLeft, context) +{ + CreateTransitionInOption(event); + CreateTransitionOutOption(event); + CreateSharedInOption(isRightToLeft_, deviceViewScale_, deviceWidth_, sharedTransitionInOption_); + CreateSharedOutOption(sharedTransitionOutOption_); +} + +void TransitionWatchTweenOption::CreateTransitionInOption(TransitionEvent event) +{ + RefPtr> translateAnimation; + if (isRightToLeft_) { + translateAnimation = AceType::MakeRefPtr>( + DimensionOffset(Dimension(-deviceWidth_, DimensionUnit::PX), Dimension()), + DimensionOffset(Dimension(), Dimension()), Curves::FRICTION); + } else { + translateAnimation = AceType::MakeRefPtr>( + DimensionOffset(Dimension(deviceWidth_, DimensionUnit::PX), Dimension()), + DimensionOffset(Dimension(), Dimension()), Curves::FRICTION); + } + contentInOption_.SetTranslateAnimations(AnimationType::TRANSLATE_X, translateAnimation); + contentInOption_.SetDuration(TRANSITION_WATCH_DURATION); + + if (event == TransitionEvent::POP_START) { + contentInOption_.SetCurve(Curves::FAST_OUT_SLOW_IN); + } +} + +void TransitionWatchTweenOption::CreateTransitionOutOption(TransitionEvent event) +{ + RefPtr> translateAnimation; + if (isRightToLeft_) { + translateAnimation = + AceType::MakeRefPtr>(DimensionOffset(Dimension(), Dimension()), + DimensionOffset(Dimension(deviceWidth_ * TRANSITION_FACTOR_WATCH, DimensionUnit::PX), Dimension()), + Curves::FRICTION); + auto offsetXAnimation = + AceType::MakeRefPtr>(0.0f, deviceWidth_ * TRANSITION_FACTOR_WATCH, Curves::FRICTION); + contentOutOption_.SetPropertyAnimationFloat(PropertyAnimatableType::PROPERTY_OFFSET_X, offsetXAnimation); + } else { + translateAnimation = + AceType::MakeRefPtr>(DimensionOffset(Dimension(), Dimension()), + DimensionOffset(Dimension(-(deviceWidth_ * TRANSITION_FACTOR_WATCH), DimensionUnit::PX), Dimension()), + Curves::FRICTION); + auto widthAnimation = AceType::MakeRefPtr>( + deviceWidth_, deviceWidth_ * TRANSITION_FACTOR_WATCH, Curves::FRICTION); + contentOutOption_.SetPropertyAnimationFloat(PropertyAnimatableType::PROPERTY_WIDTH, widthAnimation); + } + contentOutOption_.SetTranslateAnimations(AnimationType::TRANSLATE_X, translateAnimation); + auto opacityAnimation = AceType::MakeRefPtr>(1.0f, 1.0f, Curves::LINEAR); + contentOutOption_.SetOpacityAnimation(opacityAnimation); + + auto colorAnimation = AceType::MakeRefPtr>( + Color::FromRGBO(0, 0, 0, 0.0), Color::FromRGBO(0, 0, 0, BLACK_OPACITY), Curves::FRICTION); + frontDecorationOption_.SetColorAnimation(colorAnimation); + frontDecorationOption_.SetIsBackground(false); + + if (event == TransitionEvent::POP_START) { + contentOutOption_.SetCurve(Curves::FAST_OUT_SLOW_IN); + frontDecorationOption_.SetCurve(Curves::FAST_OUT_SLOW_IN); + } +} + +void TransitionPhoneTweenOption::CreateCardTransitionOutOption(TransitionEvent event) +{ + contentOutOption_.SetDuration(TRANSITION_PHONE_DURATION); + // blackening treatment + if (event == TransitionEvent::POP_START) { + auto colorAnimation = AceType::MakeRefPtr>(Color::FromRGBO(0, 0, 0, 0.2), + Color::FromRGBO(0, 0, 0, 0.0), Curves::FRICTION); + colorAnimation->SetEvaluator(AceType::MakeRefPtr()); + frontDecorationOption_.SetColorAnimation(colorAnimation); + } else { + auto colorAnimation = AceType::MakeRefPtr>(); + auto colorKeyframe1 = AceType::MakeRefPtr>(0.0f, Color::FromRGBO(0, 0, 0, 0.0)); + auto colorKeyframe2 = AceType::MakeRefPtr>(0.571f, Color::FromRGBO(0, 0, 0, 0.2)); + auto colorKeyframe3 = AceType::MakeRefPtr>(1.0f, Color::FromRGBO(0, 0, 0, 0.2)); + colorKeyframe2->SetCurve(Curves::SHARP); + colorAnimation->AddKeyframe(colorKeyframe1); + colorAnimation->AddKeyframe(colorKeyframe2); + colorAnimation->AddKeyframe(colorKeyframe3); + frontDecorationOption_.SetColorAnimation(colorAnimation); + } + frontDecorationOption_.SetIsBackground(false); +} + +void TransitionPhoneTweenOption::CreateCardTransitionInOption(TransitionEvent event, const RRect& rrect) +{ + const Offset& position = rrect.GetRect().GetOffset(); + const Size& size = rrect.GetRect().GetSize(); + contentInOption_.SetTransformOrigin(Dimension(), Dimension()); + if (event == TransitionEvent::POP_START) { + auto translateAnimation = AceType::MakeRefPtr>(DimensionOffset(Offset()), + DimensionOffset(position), Curves::FRICTION); + auto heightAnimation = AceType::MakeRefPtr>(deviceHeight_, + size.Height() * deviceWidth_ / size.Width(), Curves::FRICTION); + auto scaleAnimation = AceType::MakeRefPtr>(1.0f, size.Width() / deviceWidth_, + Curves::FRICTION); + contentInOption_.SetPropertyAnimationFloat(PropertyAnimatableType::PROPERTY_HEIGHT, heightAnimation); + contentInOption_.SetTranslateAnimations(AnimationType::TRANSLATE, translateAnimation); + contentInOption_.SetTransformFloatAnimation(AnimationType::SCALE, scaleAnimation); + } else { + auto translateAnimation = AceType::MakeRefPtr>(DimensionOffset(position), + DimensionOffset(Offset()), Curves::FRICTION); + auto heightAnimation = AceType::MakeRefPtr>(size.Height() * deviceWidth_ / size.Width(), + deviceHeight_, Curves::FRICTION); + auto scaleAnimation = AceType::MakeRefPtr>(size.Width() / deviceWidth_, 1.0f, + Curves::FRICTION); + contentInOption_.SetPropertyAnimationFloat(PropertyAnimatableType::PROPERTY_HEIGHT, heightAnimation); + contentInOption_.SetTranslateAnimations(AnimationType::TRANSLATE, translateAnimation); + contentInOption_.SetTransformFloatAnimation(AnimationType::SCALE, scaleAnimation); + } + CreateCornerAnimationInOption(event, rrect); + CreateCardOpacityAnimationInOption(event); + contentInOption_.SetDuration(TRANSITION_PHONE_DURATION); +} + +void TransitionPhoneTweenOption::CreateCornerAnimationInOption(TransitionEvent event, const RRect& rrect) +{ + auto cornerRadiusAnimation = AceType::MakeRefPtr>(); + auto cornerRadius = rrect.GetCorner().topLeftRadius.GetX().Value() * deviceWidth_ / rrect.Width(); + if (event == TransitionEvent::POP_START) { + auto cornerKeyframe1 = AceType::MakeRefPtr>(0.0f, TRANSITION_DEFAULT_CORNER_RADIUS); + auto cornerKeyframe2 = AceType::MakeRefPtr>(0.428f, cornerRadius); + auto cornerKeyframe3 = AceType::MakeRefPtr>(1.0f, cornerRadius); + cornerKeyframe2->SetCurve(Curves::FRICTION); + cornerRadiusAnimation->AddKeyframe(cornerKeyframe1); + cornerRadiusAnimation->AddKeyframe(cornerKeyframe2); + cornerRadiusAnimation->AddKeyframe(cornerKeyframe3); + } else { + auto cornerKeyframe1 = AceType::MakeRefPtr>(0.0f, cornerRadius); + auto cornerKeyframe2 = AceType::MakeRefPtr>(0.571f, cornerRadius); + auto cornerKeyframe3 = AceType::MakeRefPtr>(1.0f, TRANSITION_DEFAULT_CORNER_RADIUS); + cornerKeyframe3->SetCurve(Curves::FRICTION); + cornerRadiusAnimation->AddKeyframe(cornerKeyframe1); + cornerRadiusAnimation->AddKeyframe(cornerKeyframe2); + cornerRadiusAnimation->AddKeyframe(cornerKeyframe3); + } + contentInOption_.SetPropertyAnimationFloat(PropertyAnimatableType::PROPERTY_BORDER_RADIUS, cornerRadiusAnimation); +} + +void TransitionPhoneTweenOption::CreateCardOpacityAnimationInOption(TransitionEvent event) +{ + auto opacityAnimation = AceType::MakeRefPtr>(); + if (event == TransitionEvent::POP_START) { + auto opacityKeyframe1 = AceType::MakeRefPtr>(0.0f, 1.0f); + auto opacityKeyframe2 = AceType::MakeRefPtr>(0.571f, 1.0f); + auto opacityKeyframe3 = AceType::MakeRefPtr>(1.0f, 0.0f); + opacityKeyframe3->SetCurve(Curves::SHARP); + opacityAnimation->AddKeyframe(opacityKeyframe1); + opacityAnimation->AddKeyframe(opacityKeyframe2); + opacityAnimation->AddKeyframe(opacityKeyframe3); + } else { + auto opacityKeyframe1 = AceType::MakeRefPtr>(0.0f, 0.0f); + auto opacityKeyframe2 = AceType::MakeRefPtr>(0.286f, 1.0f); + auto opacityKeyframe3 = AceType::MakeRefPtr>(1.0f, 1.0f); + opacityKeyframe2->SetCurve(Curves::SHARP); + opacityAnimation->AddKeyframe(opacityKeyframe1); + opacityAnimation->AddKeyframe(opacityKeyframe2); + opacityAnimation->AddKeyframe(opacityKeyframe3); + } + contentInOption_.SetOpacityAnimation(opacityAnimation); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/common/properties/page_transition_option.h b/frameworks/core/components/common/properties/page_transition_option.h new file mode 100644 index 00000000..289fe6f2 --- /dev/null +++ b/frameworks/core/components/common/properties/page_transition_option.h @@ -0,0 +1,123 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_PAGE_TRANSITION_OPTION_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_PAGE_TRANSITION_OPTION_H + +#include "base/utils/device_type.h" +#include "core/animation/curves.h" +#include "core/animation/interpolator.h" +#include "core/animation/keyframe.h" +#include "core/animation/keyframe_animation.h" +#include "core/animation/page_transition_listener.h" +#include "core/animation/shared_transition_effect.h" +#include "core/components/common/properties/tween_option.h" +#include "core/pipeline/pipeline_context.h" + +namespace OHOS::Ace { + +extern const int32_t TRANSITION_PHONE_DURATION; +extern const int32_t TRANSITION_WATCH_DURATION; +extern const int32_t TRANSITION_TV_DURATION; +extern const double TRANSITION_DEFAULT_WIDTH; +extern const double TRANSITION_DEFAULT_HEIGHT; + +enum class TransitionDirection { + TRANSITION_IN, + TRANSITION_OUT, +}; + +class TransitionTweenOption : public AceType { +public: + TransitionTweenOption(bool isRightToLeft, const WeakPtr& context); + ~TransitionTweenOption() override = default; + const TweenOption& GetTransitionContentInOption() const; + const TweenOption& GetTransitionContentOutOption() const; + const TweenOption& GetTransitionBackgroundInOption() const; + const TweenOption& GetTransitionBackgroundOutOption() const; + const TweenOption& GetTransitionFrontDecorationOption() const; + const TweenOption& GetSharedTransitionFrontDecorationOption() const; + const TweenOption& GetSharedInOption() const; + const TweenOption& GetSharedOutOption() const; + +protected: + double deviceWidth_ = TRANSITION_DEFAULT_WIDTH; // default device width + double deviceHeight_ = TRANSITION_DEFAULT_HEIGHT; // default device height + double deviceViewScale_ = 1.0; // default device view scale + bool isRightToLeft_ = false; // default RTL config + WindowModal windowModal_ = WindowModal::NORMAL; + TweenOption contentInOption_; + TweenOption contentOutOption_; + TweenOption backgroundInOption_; + TweenOption backgroundOutOption_; + TweenOption frontDecorationOption_; + TweenOption sharedFrontDecorationOption_; + TweenOption sharedTransitionInOption_; + TweenOption sharedTransitionOutOption_; +}; + +class TransitionTvTweenOption : public TransitionTweenOption { +public: + TransitionTvTweenOption(bool isRightToLeft, const WeakPtr& context); + ~TransitionTvTweenOption() override = default; + +private: + void CreateTransitionInOption(); + void CreateTransitionInContentOption(); + void CreateTransitionInBackgroundOption(); + void CreateTransitionOutOption(); + void CreateTransitionOutContentOption(); + void CreateTransitionOutBackgroundOption(); + static void CreatTransitionOutOption(TweenOption& option); +}; + +class TransitionPhoneTweenOption : public TransitionTweenOption { +public: + TransitionPhoneTweenOption(TransitionEvent event, bool isRightToLeft, const WeakPtr& context); + TransitionPhoneTweenOption(TransitionEvent event, bool isRightToLeft, const RRect& rrect, + const WeakPtr& context); + ~TransitionPhoneTweenOption() override = default; + +private: + void CreateTransitionInOption(TransitionEvent event); + void CreateTransitionOutOption(TransitionEvent event); + void CreateDialogModalTransitionInOption(TransitionEvent event); + void CreateDialogModalTransitionOutOption(TransitionEvent event); + void CreateCardTransitionOutOption(TransitionEvent event); + void CreateCardTransitionInOption(TransitionEvent event, const RRect& rrect); + void CreateCornerAnimationInOption(TransitionEvent event, const RRect& rrect); + void CreateCardOpacityAnimationInOption(TransitionEvent event); +}; + +class TransitionWatchTweenOption : public TransitionTweenOption { +public: + TransitionWatchTweenOption(TransitionEvent event, bool isRightToLeft, const WeakPtr& context); + ~TransitionWatchTweenOption() override = default; + +private: + void CreateTransitionInOption(TransitionEvent event); + void CreateTransitionOutOption(TransitionEvent event); +}; + +class TransitionTweenOptionFactory { +public: + static void CreateSharedTweenOption(SharedTransitionEffectType type, TweenOption& option); + static RefPtr CreateTransitionTweenOption(DeviceType deviceType, TransitionEvent event, + bool isRightToLeft, const RRect& rect, const WeakPtr& context); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_PAGE_TRANSITION_OPTION_H diff --git a/frameworks/core/components/common/properties/paint_state.h b/frameworks/core/components/common/properties/paint_state.h new file mode 100644 index 00000000..9cae91f1 --- /dev/null +++ b/frameworks/core/components/common/properties/paint_state.h @@ -0,0 +1,348 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_PAINT_STATE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_PAINT_STATE_H + +#include "base/memory/ace_type.h" +#include "core/components/common/layout/constants.h" +#include "core/components/common/properties/color.h" +#include "core/components/common/properties/decoration.h" +#include "core/components/common/properties/text_style.h" + +namespace OHOS::Ace { + +struct BezierCurveParam { + double cp1x = 0.0; // first bezier point x + double cp1y = 0.0; // first bezier point y + double cp2x = 0.0; // second bezier point x + double cp2y = 0.0; // second bezier point y + double x = 0.0; // end point x + double y = 0.0; // end point y +}; + +struct QuadraticCurveParam { + double cpx = 0.0; // bezier point x + double cpy = 0.0; // bezier point y + double x = 0.0; // end point x + double y = 0.0; // end point y +}; + +struct ArcParam { + double x = 0.0; // point x of the circle + double y = 0.0; // point y of the circle + double radius = 0.0; // radius of the circle + double startAngle = 0.0; // start angle of the circle + double endAngle = 0.0; // end angle of the circle + bool anticlockwise = false; // is draw clock wise or not +}; + +struct ArcToParam { + double x1 = 0.0; // start point x + double y1 = 0.0; // start point y + double x2 = 0.0; // end point x + double y2 = 0.0; // end point y + double radius = 0.0; // radius of the circle +}; + +struct EllipseParam { + double x = 0.0; // point x of the ellipse + double y = 0.0; // point y of the ellipse + double radiusX = 0.0; // x axis radius of the ellipse + double radiusY = 0.0; // y axis radius of the ellipse + double rotation = 0.0; // rotation angle of the ellipse + double startAngle = 0.0; // start angle of the ellipse + double endAngle = 0.0; // end angle of the ellipse + bool anticlockwise = false; // is draw clock wise or not +}; + +struct TransformParam { + double scaleX = 0.0; + double skewX = 0.0; + double skewY = 0.0; + double scaleY = 0.0; + double translateX = 0.0; + double translateY = 0.0; +}; + +struct LineDashParam { + std::vector lineDash; + double dashOffset = 0.0; +}; + +struct CanvasImage { + int32_t flag = 0; + double sx = 0.0; + double sy = 0.0; + double sWidth = 0.0; + double sHeight = 0.0; + double dx = 0.0; + double dy = 0.0; + double dWidth = 0.0; + double dHeight = 0.0; + std::string src; +}; + +struct ImageData { + int32_t x = 0; + int32_t y = 0; + int32_t dirtyX = 0; + int32_t dirtyY = 0; + int32_t dirtyWidth = 0; + int32_t dirtyHeight = 0; + std::vector data; +}; + +enum class ContextType { + RENDER_2D, + RENDER_3D, +}; + +// following the definition in skPaint +enum class LineCapStyle { + BUTT = 0, + ROUND, + SQUARE, +}; + +enum class LineJoinStyle { + MITER = 0, + ROUND, + BEVEL, +}; + +enum class CompositeOperation { + SOURCE_OVER = 0, + SOURCE_ATOP, + SOURCE_IN, + SOURCE_OUT, + DESTINATION_OVER, + DESTINATION_ATOP, + DESTINATION_IN, + DESTINATION_OUT, + LIGHTER, + COPY, + XOR, +}; + +class PaintState { +public: + const Color& GetColor() const + { + return color_; + } + + void SetColor(const Color& color) + { + color_ = color; + } + + const Gradient& GetGradient() const + { + return gradient_; + } + + void SetGradient(const Gradient& gradient) + { + gradient_ = gradient; + } + + const TextStyle& GetTextStyle() const + { + return textStyle_; + } + + void SetTextStyle(const TextStyle& textStyle) + { + textStyle_ = textStyle; + } + + TextAlign GetTextAlign() const + { + return textAlign_; + } + + void SetTextAlign(TextAlign textAlign) + { + textAlign_ = textAlign; + } + + void SetTextColor(const Color& color) + { + textStyle_.SetTextColor(color); + } + + void SetFontSize(const Dimension& size) + { + textStyle_.SetFontSize(size); + } + + void SetFontStyle(FontStyle style) + { + textStyle_.SetFontStyle(style); + } + + void SetFontWeight(FontWeight weight) + { + textStyle_.SetFontWeight(weight); + } + + void SetFontFamilies(const std::vector& fontFamilies) + { + textStyle_.SetFontFamilies(fontFamilies); + } + + void SetTextBaseline(TextBaseline baseline) + { + textStyle_.SetTextBaseline(baseline); + } + + const Pattern& GetPattern() const + { + return pattern_; + } + + void SetPattern(const Pattern& pattern) + { + pattern_ = pattern; + } + +protected: + Color color_ = Color::BLACK; + Gradient gradient_; + TextStyle textStyle_; + TextAlign textAlign_ = TextAlign::LEFT; + + Pattern pattern_; +}; + +class StrokePaintState : public PaintState { +public: + LineCapStyle GetLineCap() const + { + return lineCap_; + } + + void SetLineCap(LineCapStyle lineCap) + { + lineCap_ = lineCap; + } + + LineJoinStyle GetLineJoin() const + { + return lineJoin_; + } + + void SetLineJoin(LineJoinStyle lineJoin) + { + lineJoin_ = lineJoin; + } + + double GetLineWidth() const + { + return lineWidth_; + } + + void SetLineWidth(double lineWidth) + { + lineWidth_ = lineWidth; + } + + double GetMiterLimit() const + { + return miterLimit_; + } + + void SetMiterLimit(double miterLimit) + { + miterLimit_ = miterLimit; + } + + const LineDashParam& GetLineDash() const + { + return lineDash_; + } + + void SetLineDash(const LineDashParam& lineDash) + { + lineDash_ = lineDash; + } + + void SetLineDashOffset(double offset) + { + lineDash_.dashOffset = offset; + } + + void SetLineDash(const std::vector& segments) + { + lineDash_.lineDash = segments; + } + +private: + LineCapStyle lineCap_ = LineCapStyle::BUTT; + LineJoinStyle lineJoin_ = LineJoinStyle::MITER; + +#if defined(WINDOWS_PLATFORM) || defined(MAC_PLATFORM) + double lineWidth_ = 2.0; // default lineWidth for pcpreview +#else + double lineWidth_ = 1.0; // default lineWidth +#endif + + double miterLimit_ = 10.0; // default miterLimit + LineDashParam lineDash_; +}; + +class GlobalPaintState { +public: + double GetAlpha() const + { + return alpha_; + } + + void SetAlpha(double alpha) + { + alpha_ = alpha; + } + + CompositeOperation GetType() const + { + return type_; + } + + void SetType(CompositeOperation type) + { + type_ = type; + } + + bool HasGlobalAlpha() const + { + return !NearEqual(alpha_, 1.0); + } + +private: + double alpha_ = 1.0; + CompositeOperation type_ = CompositeOperation::SOURCE_OVER; +}; + +struct PaintHolder { + PaintState fillState; + StrokePaintState strokeState; + GlobalPaintState globalState; + Shadow shadow; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_PAINT_STATE_H diff --git a/frameworks/core/components/common/properties/placement.h b/frameworks/core/components/common/properties/placement.h new file mode 100644 index 00000000..b73b1f22 --- /dev/null +++ b/frameworks/core/components/common/properties/placement.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_PLACEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_PLACEMENT_H + +namespace OHOS::Ace { + +enum class Placement { + LEFT, + RIGHT, + TOP, + BOTTOM, + TOP_LEFT, + TOP_RIGHT, + BOTTOM_LEFT, + BOTTOM_RIGHT, + NONE, +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_PLACEMENT_H diff --git a/frameworks/core/components/common/properties/progress_data.h b/frameworks/core/components/common/properties/progress_data.h new file mode 100644 index 00000000..b5ba8906 --- /dev/null +++ b/frameworks/core/components/common/properties/progress_data.h @@ -0,0 +1,105 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_PROGRESS_DATA_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_PROGRESS_DATA_H + +#include "base/memory/ace_type.h" + +namespace OHOS::Ace { + +class ProgressData : public AceType { + DECLARE_ACE_TYPE(ProgressData, AceType); + +public: + ProgressData() = default; + ~ProgressData() override = default; + + void SetMinValue(double minValue) + { + minValue_ = minValue; + } + + void SetMaxValue(double maxValue) + { + maxValue_ = maxValue; + } + + void SetValue(double value) + { + value_ = value; + } + + void SetStepValue(double stepValue) + { + stepValue_ = stepValue; + } + + void SetCachedValue(double cachedValue) + { + cachedValue_ = cachedValue; + } + + // Change the value by the number of step. Positive number will move forwards and negative number will move + // backwards. + double MoveSteps(int32_t num) + { + double temp = value_ + (stepValue_ * num); + if (temp < minValue_) { + value_ = minValue_; + } else if (temp > maxValue_) { + value_ = maxValue_; + } else { + value_ = temp; + } + return value_; + } + + double GetMinValue() const + { + return minValue_; + } + + double GetMaxValue() const + { + return maxValue_; + } + + double GetValue() const + { + return value_; + } + + double GetStepValue() const + { + return stepValue_; + } + + double GetCachedValue() const + { + return cachedValue_; + } + +private: + double minValue_ { 0.0 }; + double maxValue_ { 1.0 }; + double value_ { 0.0 }; + double stepValue_ { 0.01 }; + double cachedValue_ { 0.0 }; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_PROGRESS_DATA_H diff --git a/frameworks/core/components/common/properties/radius.h b/frameworks/core/components/common/properties/radius.h new file mode 100644 index 00000000..2f3c618d --- /dev/null +++ b/frameworks/core/components/common/properties/radius.h @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_RADIUS_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_RADIUS_H + +#include "base/geometry/dimension.h" +#include "base/utils/utils.h" + +namespace OHOS::Ace { + +// A radius for shapes like rect and etc. +class Radius final { +public: + Radius() = default; + explicit Radius(double value) : Radius(value, value) {}; + explicit Radius(const Dimension& value) : Radius(value, value) {}; + Radius(double x, double y) : x_(Dimension(x)), y_(Dimension(y)) {} + Radius(const Dimension& x, const Dimension& y) : x_(x), y_(y) {}; + ~Radius() = default; + + void ApplyScaleAndRound(double scale) + { + x_.SetValue(round(x_.Value() * scale)); + y_.SetValue(round(y_.Value() * scale)); + } + + bool IsValid() const + { + return GreatOrEqual(x_.Value(), 0.0) && GreatOrEqual(y_.Value(), 0.0); + } + + bool HasValue() const + { + return x_.IsValid() || y_.IsValid(); + } + + const Dimension& GetX() const + { + return x_; + } + + const Dimension& GetY() const + { + return y_; + } + + Radius operator+(const Radius& radius) const + { + return Radius(x_ + radius.GetX(), y_ + radius.GetY()); + } + + Radius operator-(const Radius& radius) const + { + return Radius(x_ - radius.GetX(), y_ - radius.GetY()); + } + + Radius operator*(double scale) const + { + return Radius(x_ * scale, y_ * scale); + } + + bool operator==(const Radius& radius) const + { + return (radius.GetX() == x_) && (radius.GetY() == y_); + } + +private: + Dimension x_; + Dimension y_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_RADIUS_H diff --git a/frameworks/core/components/common/properties/scroll_bar.cpp b/frameworks/core/components/common/properties/scroll_bar.cpp new file mode 100644 index 00000000..56062476 --- /dev/null +++ b/frameworks/core/components/common/properties/scroll_bar.cpp @@ -0,0 +1,216 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/common/properties/scroll_bar.h" + +#include "core/animation/curve_animation.h" + +namespace OHOS::Ace { + +bool ScrollBar::InBarRegion(const Point& point) const +{ + if (NeedScrollBar() && shapeMode_ == ShapeMode::RECT) { + return touchRegion_.IsInRegion(point); + } + return false; +} + +void ScrollBar::UpdateScrollBarRegion( + const Offset& offset, const Size& size, const Offset& lastOffset, double estimatedHeight) +{ + if (!NearZero(estimatedHeight)) { + SetBarRegion(offset, size); + SetTrickRegion(offset, size, lastOffset, estimatedHeight); + } +} + +void ScrollBar::SetBarRegion(const Offset& offset, const Size& size) +{ + double normalWidth = NormalizeToPx(normalWidth_); + if (shapeMode_ == ShapeMode::RECT) { + double height = std::max(size.Height() - NormalizeToPx(reservedHeight_), 0.0); + if (positionMode_ == PositionMode::LEFT) { + barRect_ = Rect(0.0, 0.0, normalWidth, height) + offset; + } else { + barRect_ = Rect(size.Width() - normalWidth - NormalizeToPx(padding_.Right()), 0.0, + normalWidth, height) + offset; + } + } +} + +void ScrollBar::SetTrickRegion(const Offset& offset, const Size& size, const Offset& lastOffset, double estimatedHeight) +{ + if (shapeMode_ == ShapeMode::RECT) { + double height = size.Height(); + double barRegionHeight = std::max(height - NormalizeToPx(reservedHeight_), 0.0); + double activeHeight = barRegionHeight * height / estimatedHeight - outBoundary_; + if (!NearEqual(height, estimatedHeight)) { + double width = size.Width(); + if (!NearZero(outBoundary_)) { + activeHeight = std::max( + std::max(activeHeight, NormalizeToPx(minHeight_) - outBoundary_), NormalizeToPx(minDynamicHeight_)); + } else { + activeHeight = std::max(activeHeight, NormalizeToPx(minHeight_)); + } + double lastOffsetY = std::max(lastOffset.GetY(), 0.0); + double activeOffsetY = (height - activeHeight) * lastOffsetY / (estimatedHeight - height); + activeOffsetY = std::min(activeOffsetY, barRegionHeight - activeHeight); + double normalWidth = NormalizeToPx(normalWidth_); + if (positionMode_ == PositionMode::LEFT) { + activeRect_ = Rect(0.0, activeOffsetY, normalWidth, activeHeight) + offset; + touchRegion_ = activeRect_ + Size(NormalizeToPx(touchWidth_), 0); + } else { + activeRect_ = Rect(width - normalWidth - NormalizeToPx(padding_.Right()), + activeOffsetY, normalWidth, activeHeight) + offset; + // Update the hot region + touchRegion_ = activeRect_ - Offset(NormalizeToPx(touchWidth_ - normalWidth_ - padding_.Right()), 0.0) + + Size(NormalizeToPx(touchWidth_ - normalWidth_), 0); + } + } + } else { + double diameter = std::min(size.Width(), size.Height()); + if (!NearEqual(estimatedHeight, diameter)) { + double maxAngle = bottomAngle_ - topAngle_; + trickSweepAngle_ = std::max(diameter * maxAngle / estimatedHeight, minAngle_); + double lastOffsetY = std::max(lastOffset.GetY(), 0.0); + double trickStartAngle = (maxAngle - trickSweepAngle_) * lastOffsetY / (estimatedHeight - diameter); + trickStartAngle = std::clamp(0.0, trickStartAngle, maxAngle) - maxAngle * FACTOR_HALF; + if (positionMode_ == PositionMode::LEFT) { + if (trickStartAngle > 0.0) { + trickStartAngle_ = STRAIGHT_ANGLE - trickStartAngle; + } else { + trickStartAngle_ = -(trickStartAngle + STRAIGHT_ANGLE); + } + trickSweepAngle_ = -trickSweepAngle_; + } else { + trickStartAngle_ = trickStartAngle; + } + } + } +} + +bool ScrollBar::NeedScrollBar() const +{ + return displayMode_ == DisplayMode::AUTO || displayMode_ == DisplayMode::ON; +} + +bool ScrollBar::NeedPaint() const +{ + return NeedScrollBar() && isScrollable_; +} + +double ScrollBar::GetNormalWidthToPx() const +{ + return NormalizeToPx(normalWidth_); +} + +void ScrollBar::InitScrollBar(const WeakPtr& scroll, const WeakPtr& context) +{ + pipelineContext_ = context; + if (NeedScrollBar()) { + barController_ = AceType::MakeRefPtr(); + barController_->Initialize(context); + barController_->SetScrollNode(scroll); + barController_->SetActiveWidth(activeWidth_); + barController_->SetInactiveWidth(inactiveWidth_); + } +} + +double ScrollBar::NormalizeToPx(const Dimension& dimension) const +{ + auto pipelineContext = pipelineContext_.Upgrade(); + if (!pipelineContext) { + LOGE("NormalizeToPx failed"); + return 0.0; + } + return pipelineContext->NormalizeToPx(dimension); +} + +void ScrollBar::SetCallBack(const ScrollBarPositionCallback& callback, const ScrollBarEndCallback& barEndCallback, + const ScrollBarEventCallback& scrollEndCallback) +{ + if (barController_) { + barController_->SetCallback(callback); + barController_->SetBarEndCallback(barEndCallback); + barController_->SetScrollEndCallback(scrollEndCallback); + barController_->SetTouchDownCallback([weakScrollBar = AceType::WeakClaim(this)](double value) { + auto scrollBar = weakScrollBar.Upgrade(); + if (!scrollBar) { + LOGE("scrollBar is released"); + return; + } + // value is normalized before animation + scrollBar->normalWidth_ = Dimension(value, DimensionUnit::PX); + }); + barController_->SetTouchUpCallback([weakScrollBar = AceType::WeakClaim(this)](double value) { + auto scrollBar = weakScrollBar.Upgrade(); + if (!scrollBar) { + LOGE("scrollBar is released"); + return; + } + // value is normalized before animation + scrollBar->normalWidth_ = Dimension(value, DimensionUnit::PX); + }); + } +} + +void ScrollBar::HandleScrollBarEnd() +{ + if (displayMode_ == DisplayMode::AUTO) { + barController_->HandleScrollBarEnd(); + } +} + +void ScrollBar::AddScrollBarController(const Offset& coordinateOffset, TouchTestResult& result) +{ + if (barController_) { + barController_->SetCoordinateOffset(coordinateOffset); + result.emplace_back(barController_); + } +} + +void ScrollBar::SetActive(bool isActive) +{ + if (barController_) { + barController_->SetActive(isActive); + } +} + +bool ScrollBar::IsActive() const +{ + if (barController_) { + return barController_->IsActive(); + } + return false; +} + +void ScrollBar::SetUndisplay() +{ + displayMode_ = DisplayMode::OFF; +} + +Size ScrollBar::GetRootSize() const +{ + auto context = pipelineContext_.Upgrade(); + if (context) { + auto rootHeight = context->GetRootHeight(); + auto rootWidth = context->GetRootWidth(); + return Size(rootWidth, rootHeight); + } else { + return Size(); + } +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/common/properties/scroll_bar.h b/frameworks/core/components/common/properties/scroll_bar.h new file mode 100644 index 00000000..0d829e21 --- /dev/null +++ b/frameworks/core/components/common/properties/scroll_bar.h @@ -0,0 +1,323 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_SCROLL_BAR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_SCROLL_BAR_H + +#include + +#include "base/geometry/dimension.h" +#include "base/geometry/offset.h" +#include "base/geometry/rect.h" +#include "base/utils/utils.h" +#include "core/components/common/properties/color.h" +#include "core/components/common/properties/edge.h" +#include "core/components/scroll/scroll_bar_controller.h" +#include "core/components/scroll/scroll_position_controller.h" + +namespace OHOS::Ace { + +constexpr double FACTOR_HALF = 0.5; +constexpr double DEFAULT_TOPANGLE = 60.0; +constexpr double DEFAULT_BOTTOMANGLE = 120.0; +constexpr double DEFAULT_MINANGLE = 10.0; +constexpr double STRAIGHT_ANGLE = 180.0; + +enum class ShapeMode { + /* + * unspecified, follow theme. + */ + DEFAULT = 0, + /* + * rect scrollbar. + */ + RECT, + /* + * round scrollbar. + */ + ROUND, +}; + +enum class DisplayMode { + /* + * do not display scrollbar. + */ + OFF = 0, + /* + * display scrollbar on demand. + */ + AUTO, + /* + * always display scrollbar. + */ + ON, +}; + +enum class PositionMode { + /* + * display scrollbar on right. + */ + RIGHT = 0, + /* + * display scrollbar on left. + */ + LEFT, +}; + +class ScrollBar final : public AceType { + DECLARE_ACE_TYPE(ScrollBar, AceType); + +public: + ScrollBar() = default; + explicit ScrollBar( + DisplayMode displayMode, ShapeMode shapeMode = ShapeMode::RECT, PositionMode positionMode = PositionMode::RIGHT) + : displayMode_(displayMode), shapeMode_(shapeMode), positionMode_(positionMode) {}; + ~ScrollBar() override = default; + + bool InBarRegion(const Point& point) const; + bool NeedScrollBar() const; + bool NeedPaint() const; + void UpdateScrollBarRegion( + const Offset& offset, const Size& size, const Offset& lastOffset, double estimatedHeight); + double GetNormalWidthToPx() const; + void InitScrollBar(const WeakPtr& scroll, const WeakPtr& context); + void SetCallBack(const ScrollBarPositionCallback& callback, const ScrollBarEndCallback& barEndCallback, + const ScrollBarEventCallback& scrollEndCallback); + void HandleScrollBarEnd(); + void AddScrollBarController(const Offset& coordinateOffset, TouchTestResult& result); + void SetActive(bool isActive); + bool IsActive() const; + void SetUndisplay(); + Size GetRootSize() const; + + ShapeMode GetShapeMode() const + { + return shapeMode_; + } + + DisplayMode GetDisplayMode() const + { + return displayMode_; + } + + PositionMode GetPositionMode() const + { + return positionMode_; + } + + void SetPadding(const Edge& padding) + { + padding_ = padding; + } + + const Edge& GetPadding() const + { + return padding_; + } + + void SetBackgroundColor(const Color& backgroundColor) + { + backgroundColor_ = backgroundColor; + } + + const Color& GetBackgroundColor() const + { + return backgroundColor_; + } + + void SetForegroundColor(const Color& foregroundColor) + { + foregroundColor_ = foregroundColor; + } + + const Color& GetForegroundColor() const + { + return foregroundColor_; + } + + double GetTopAngle() const + { + return topAngle_; + } + + double GetBottomAngle() const + { + return bottomAngle_; + } + + double GetTrickStartAngle() const + { + return trickStartAngle_; + } + + double GetTrickSweepAngle() const + { + return trickSweepAngle_; + } + + void SetMinHeight(const Dimension& minHeight) + { + minHeight_ = minHeight; + } + + const Dimension& GetMinHeight() const + { + return minHeight_; + } + + void SetMinDynamicHeight(const Dimension& minDynamicHeight) + { + minDynamicHeight_ = minDynamicHeight; + } + + const Dimension& GetMinDynamicHeight() const + { + return minDynamicHeight_; + } + + void SetReservedHeight(const Dimension& height) + { + reservedHeight_ = height; + } + + const Dimension& GetReservedHeight() const + { + return reservedHeight_; + } + + void SetInactiveWidth(const Dimension& inactiveWidth) + { + inactiveWidth_ = inactiveWidth; + } + + void SetActiveWidth(const Dimension& activeWidth) + { + activeWidth_ = activeWidth; + } + + const Dimension& GetActiveWidth() const + { + return activeWidth_; + } + + void SetNormalWidth(const Dimension& normalWidth) + { + normalWidth_ = normalWidth; + } + + const Rect& GetActiveRect() const + { + return activeRect_; + } + + void SetTouchWidth(const Dimension& touchWidth) + { + touchWidth_ = touchWidth; + } + + const Dimension& GetTouchWidth() const + { + return touchWidth_; + } + + const Rect& GetBarRect() const + { + return barRect_; + } + + void SetScrollable(bool isScrollable) + { + isScrollable_ = isScrollable; + } + + bool IsScrollable() const + { + return isScrollable_; + } + + void SetFirstLoad(bool firstLoad) + { + firstLoad_ = firstLoad; + } + + bool GetFirstLoad() const + { + return firstLoad_; + } + + void SetPositionMode(PositionMode positionMode) + { + positionMode_ = positionMode; + } + + void SetShapeMode(ShapeMode shapeMode) + { + shapeMode_ = shapeMode; + } + + void SetDisplayMode(DisplayMode displayMode) + { + displayMode_ = displayMode; + } + + void SetOutBoundary(double outBoundary) + { + outBoundary_ = outBoundary; + } + + RefPtr GetController() + { + return barController_; + } + +private: + void SetBarRegion(const Offset& offset, const Size& size); + void SetTrickRegion(const Offset& offset, const Size& size, const Offset& lastOffset, double mainScrollExtent); + double NormalizeToPx(const Dimension& dimension) const; + + DisplayMode displayMode_ = DisplayMode::OFF; + ShapeMode shapeMode_ = ShapeMode::RECT; + PositionMode positionMode_ = PositionMode::RIGHT; + Edge padding_; + Color backgroundColor_; + Color foregroundColor_; + Rect touchRegion_; + Rect barRect_; + Rect activeRect_; + Dimension minHeight_; // this is min static height + Dimension minDynamicHeight_; // this is min dynamic height when on the top or bottom + Dimension reservedHeight_; // this is reservedHeight on the bottom + Dimension inactiveWidth_; + Dimension activeWidth_; + Dimension normalWidth_; + Dimension touchWidth_; + + double trickStartAngle_ = 0.0; + double trickSweepAngle_ = 0.0; + double topAngle_ = DEFAULT_TOPANGLE; + double bottomAngle_ = DEFAULT_BOTTOMANGLE; + double minAngle_ = DEFAULT_MINANGLE; + double outBoundary_ = 0.0; + + bool isScrollable_ = false; + bool firstLoad_ = true; + + WeakPtr pipelineContext_; + RefPtr barController_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_SCROLL_BAR_H diff --git a/frameworks/core/components/common/properties/shadow.h b/frameworks/core/components/common/properties/shadow.h new file mode 100644 index 00000000..6254775e --- /dev/null +++ b/frameworks/core/components/common/properties/shadow.h @@ -0,0 +1,184 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_SHADOW_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_SHADOW_H + +#include "base/geometry/offset.h" +#include "core/components/common/properties/color.h" + +namespace OHOS::Ace { + +constexpr float LIGHT_HEIGHT = 600.0f; // System recommended value. +constexpr float LIGHT_RADIUS = 800.0f; // System recommended value. + +// A style class indicates the way to render shadow effect +class Shadow final { +public: + Shadow() = default; + ~Shadow() = default; + + // create shadow for hardware rending. + Shadow(float elevation, Offset offset, Color spotColor) : offset_(offset), color_(spotColor) + { + SetElevation(elevation); + }; + + // create shadow for software rending. + Shadow(double blurRadius, double spreadRadius, Offset offset, Color spotColor) + : spreadRadius_(spreadRadius), offset_(offset), color_(spotColor) + { + SetBlurRadius(blurRadius); + }; + + bool operator==(const Shadow& rhs) const + { + return color_ == rhs.color_ && NearEqual(blurRadius_, rhs.blurRadius_) && offset_ == rhs.offset_ && + NearEqual(spreadRadius_, rhs.spreadRadius_) && NearEqual(elevation_, rhs.elevation_); + } + + bool operator!=(const Shadow& rhs) const + { + return !(rhs == *this); + } + + void SetColor(const Color& newColor) + { + color_ = newColor; + } + + const Color& GetColor() const + { + return color_; + } + + void SetBlurRadius(double blurRadius) + { + if (blurRadius >= 0.0) { + blurRadius_ = blurRadius; + isHardwareAcceleration_ = false; + return; + } + blurRadius_ = 0.0; + } + + double GetBlurRadius() const + { + return blurRadius_; + } + + void SetOffset(const Offset& offset) + { + offset_ = offset; + } + + const Offset& GetOffset() const + { + return offset_; + } + + void SetOffsetX(double x) + { + offset_.SetX(x); + } + + void SetOffsetY(double y) + { + offset_.SetY(y); + } + + void SetSpreadRadius(double spreadRadius) + { + spreadRadius_ = spreadRadius; + isHardwareAcceleration_ = false; + } + + double GetSpreadRadius() const + { + return spreadRadius_; + } + + void SetElevation(float elevation) + { + if (elevation >= 0.0f && elevation < LIGHT_HEIGHT) { + elevation_ = elevation; + isHardwareAcceleration_ = true; + return; + } + elevation_ = 0.0f; + } + + float GetElevation() const + { + return elevation_; + } + + void SetHardwareAcceleration(bool acceleration) + { + isHardwareAcceleration_ = acceleration; + } + + bool GetHardwareAcceleration() const + { + return isHardwareAcceleration_; + } + + void SetLightHeight(float lightHeight) + { + if (lightHeight > 0.0f) { + lightHeight_ = lightHeight; + } + } + + float GetLightHeight() const + { + return lightHeight_; + } + + void SetLightRadius(float lightRadius) + { + if (lightRadius > 0.0f) { + lightRadius_ = lightRadius; + } + } + + float GetLightRadius() const + { + return lightRadius_; + } + + bool IsValid() const + { + if (isHardwareAcceleration_) { + return elevation_ > 0.0f && elevation_ < LIGHT_HEIGHT; + } else { + return blurRadius_ > 0.0 || spreadRadius_ > 0.0 || offset_ != Offset::Zero(); + } + } + +private: + float lightHeight_ = LIGHT_HEIGHT; + float lightRadius_ = LIGHT_RADIUS; + float elevation_ = 0.0f; // The default scope:0.0 ~ LIGHT_HEIGHT. + double blurRadius_ = 0.0; + double spreadRadius_ = 0.0; + Offset offset_; + Color color_ = Color::BLACK; + bool isHardwareAcceleration_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_SHADOW_H diff --git a/frameworks/core/components/common/properties/shadow_config.cpp b/frameworks/core/components/common/properties/shadow_config.cpp new file mode 100644 index 00000000..dca36ee5 --- /dev/null +++ b/frameworks/core/components/common/properties/shadow_config.cpp @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/common/properties/shadow_config.h" + +namespace OHOS::Ace { + +const Shadow ShadowConfig::DefaultShadowXS = Shadow(4.0f, Offset(0.0, 0.0), Color(0x2600001E)); +const Shadow ShadowConfig::DefaultShadowS = Shadow(20.0f, Offset(0.0, 0.0), Color(0x1400001E)); +const Shadow ShadowConfig::DefaultShadowM = Shadow(50.0f, Offset(0.0, 10.0), Color(0x2600001E)); +const Shadow ShadowConfig::DefaultShadowL = Shadow(50.0f, Offset(0.0, 10.0), Color(0x4C00001E)); +const Shadow ShadowConfig::FloatingShadowS = Shadow(50.0f, Offset(0.0, 10.0), Color(0x2600001E)); +const Shadow ShadowConfig::FloatingShadowM = Shadow(50.0f, Offset(0.0, 10.0), Color(0x4C00001E)); + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/common/properties/shadow_config.h b/frameworks/core/components/common/properties/shadow_config.h new file mode 100644 index 00000000..3fa2a6a6 --- /dev/null +++ b/frameworks/core/components/common/properties/shadow_config.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_SHADOW_CONFIG_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_SHADOW_CONFIG_H + +#include "base/geometry/offset.h" +#include "core/components/common/properties/color.h" +#include "core/components/common/properties/shadow.h" + +namespace OHOS::Ace { + +class ACE_EXPORT ShadowConfig { +public: + ShadowConfig() = delete; + ~ShadowConfig() = default; + + // For light theme shadow params, from small shadow to large shadow. + static const Shadow DefaultShadowXS; + static const Shadow DefaultShadowS; + static const Shadow DefaultShadowM; + static const Shadow DefaultShadowL; + static const Shadow FloatingShadowS; + static const Shadow FloatingShadowM; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_SHADOW_CONFIG_H diff --git a/frameworks/core/components/common/properties/svg_paint_state.h b/frameworks/core/components/common/properties/svg_paint_state.h new file mode 100644 index 00000000..e3e68195 --- /dev/null +++ b/frameworks/core/components/common/properties/svg_paint_state.h @@ -0,0 +1,391 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_SVG_PAINT_STATE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_SVG_PAINT_STATE_H + +#include "base/memory/ace_type.h" +#include "frameworks/core/components/common/layout/constants.h" +#include "frameworks/core/components/common/properties/color.h" +#include "frameworks/core/components/common/properties/decoration.h" +#include "frameworks/core/components/common/properties/paint_state.h" +#include "frameworks/core/components/common/properties/text_style.h" + +namespace OHOS::Ace { + +const char ATTR_NAME_FILL[] = "fill"; +const char ATTR_NAME_STROKE[] = "stroke"; +const char ATTR_NAME_STROKE_WIDTH[] = "stroke-width"; +const char ATTR_NAME_MITER_LIMIT[] = "stroke-miterlimit"; +const char ATTR_NAME_STROKE_DASHOFFSET[] = "stroke-dashoffset"; +const char ATTR_NAME_FONT_SIZE[] = "font-size"; +const char ATTR_NAME_FILL_OPACITY[] = "fill-opacity"; +const char ATTR_NAME_STROKE_OPACITY[] = "stroke-opacity"; +const char ATTR_NAME_LETTER_SPACING[] = "letter-spacing"; +const char ANIMATOR_TYPE_MOTION[] = "motion"; + +class FillState { +public: + const Color& GetColor() const + { + return color_; + } + + /** + * set fill color + * @param color + * @param isSelf if false the color value inherited from the parent node, otherwise the value is setted by self + */ + void SetColor(const Color& color, bool isSelf = true) + { + color_ = color; + hasColor_ = isSelf; + } + + const Gradient& GetGradient() const + { + return gradient_; + } + + void SetGradient(const Gradient& gradient) + { + gradient_ = gradient; + } + + void SetOpacity(double opacity, bool isSelf = true) + { + opacity_ = opacity; + hasOpacity_ = isSelf; + } + + double GetOpacity() const + { + return opacity_; + } + + void Inherit(const FillState& parent) + { + if (!hasColor_) { + color_ = parent.GetColor(); + } + if (!hasOpacity_) { + opacity_ = parent.GetOpacity(); + } + } + + bool HasColor() const + { + return hasColor_; + } + + bool HasOpacity() const + { + return hasOpacity_; + } + +protected: + Color color_ = Color::BLACK; + double opacity_ = 1.0; + Gradient gradient_; + bool hasColor_ = false; + bool hasOpacity_ = false; +}; + +class StrokeState { +public: + const Color& GetColor() const + { + return color_; + } + + void SetColor(const Color& color, bool isSelf = true) + { + color_ = color; + hasColor_ = isSelf; + } + + void SetOpacity(double opacity, bool isSelf = true) + { + opacity_ = opacity; + hasOpacity_ = isSelf; + } + + double GetOpacity() const + { + return opacity_; + } + + LineCapStyle GetLineCap() const + { + return lineCap_; + } + + void SetLineCap(LineCapStyle lineCap, bool isSelf = true) + { + lineCap_ = lineCap; + hasLineCap_ = isSelf; + } + + LineJoinStyle GetLineJoin() const + { + return lineJoin_; + } + + void SetLineJoin(LineJoinStyle lineJoin, bool isSelf = true) + { + lineJoin_ = lineJoin; + hasLineJoin_ = isSelf; + } + + const Dimension& GetLineWidth() const + { + return lineWidth_; + } + + void SetLineWidth(Dimension lineWidth, bool isSelf = true) + { + lineWidth_ = lineWidth; + hasLineWidth_ = isSelf; + } + + double GetMiterLimit() const + { + return miterLimit_; + } + + void SetMiterLimit(double miterLimit, bool isSelf = true) + { + miterLimit_ = miterLimit; + hasMiterLimit_ = isSelf; + } + + const LineDashParam& GetLineDash() const + { + return lineDash_; + } + + void SetLineDash(const LineDashParam& lineDash, bool isSelf = true) + { + lineDash_ = lineDash; + hasLineDash_ = isSelf; + } + + void SetLineDashOffset(double offset, bool isSelf = true) + { + lineDash_.dashOffset = offset; + hasDashOffset_ = isSelf; + } + + void SetLineDash(const std::vector& segments, bool isSelf = true) + { + lineDash_.lineDash = segments; + hasLineDash_ = isSelf; + } + + bool HasStroke() const + { + // The text outline is drawn only when stroke is set + return color_ != Color::TRANSPARENT; + } + + void Inherit(const StrokeState& strokeState) + { + if (!hasColor_) { + color_ = strokeState.GetColor(); + } + if (!hasOpacity_) { + opacity_ = strokeState.GetOpacity(); + } + if (!hasLineCap_) { + lineCap_ = strokeState.GetLineCap(); + } + if (!hasLineJoin_) { + lineJoin_ = strokeState.GetLineJoin(); + } + if (!hasLineWidth_) { + lineWidth_ = strokeState.GetLineWidth(); + } + if (!hasMiterLimit_) { + miterLimit_ = strokeState.GetMiterLimit(); + } + if (!hasLineDash_) { + lineDash_.lineDash = strokeState.GetLineDash().lineDash; + } + if (!hasDashOffset_) { + lineDash_.dashOffset = strokeState.GetLineDash().dashOffset; + } + } + + bool HasColor() const + { + return hasColor_; + } + + bool HasOpacity() const + { + return hasOpacity_; + } + + bool HasLineWidth() const + { + return hasLineWidth_; + } + + bool HasMiterLimit() const + { + return hasMiterLimit_; + } + + bool HasDashOffset() const + { + return hasDashOffset_; + } + +private: + Color color_ = Color::TRANSPARENT; + double opacity_ = 1.0; + LineCapStyle lineCap_ = LineCapStyle::BUTT; + LineJoinStyle lineJoin_ = LineJoinStyle::MITER; + Dimension lineWidth_ = Dimension(1.0); + double miterLimit_ = 4.0; + LineDashParam lineDash_; + bool hasColor_ = false; + bool hasOpacity_ = false; + bool hasLineCap_ = false; + bool hasLineJoin_ = false; + bool hasLineWidth_ = false; + bool hasMiterLimit_ = false; + bool hasLineDash_ = false; + bool hasDashOffset_ = false; +}; + +class SvgTextStyle { +public: + void SetFontFamilies(const std::vector& fontFamilies, bool isSelf = true) + { + hasFontFamilies_ = isSelf; + textStyle_.SetFontFamilies(fontFamilies); + } + + const std::vector& GetFontFamilies() const + { + return textStyle_.GetFontFamilies(); + } + + void SetFontSize(const Dimension& fontSize, bool isSelf = true) + { + textStyle_.SetFontSize(fontSize); + hasFontSize_ = isSelf; + } + + const Dimension& GetFontSize() const + { + return textStyle_.GetFontSize(); + } + + void SetFontStyle(FontStyle fontStyle, bool isSelf = true) + { + textStyle_.SetFontStyle(fontStyle); + hasFontStyle_ = isSelf; + } + + FontStyle GetFontStyle() const + { + return textStyle_.GetFontStyle(); + } + + void SetFontWeight(FontWeight fontWeight, bool isSelf = true) + { + textStyle_.SetFontWeight(fontWeight); + hasFontWeight_ = isSelf; + } + + FontWeight GetFontWeight() const + { + return textStyle_.GetFontWeight(); + } + + void SetLetterSpacing(double letterSpacing, bool isSelf = true) + { + textStyle_.SetLetterSpacing(letterSpacing); + hasLetterSpacing_ = isSelf; + } + + double GetLetterSpacing() const + { + return textStyle_.GetLetterSpacing(); + } + + void SetTextDecoration(TextDecoration textDecoration, bool isSelf = true) + { + textStyle_.SetTextDecoration(textDecoration); + hasTextDecoration_ = isSelf; + } + + TextDecoration GetTextDecoration() const + { + return textStyle_.GetTextDecoration(); + } + + const TextStyle& GetTextStyle() const + { + return textStyle_; + } + + void Inherit(const SvgTextStyle& parent) + { + if (!hasFontFamilies_) { + textStyle_.SetFontFamilies(parent.GetFontFamilies()); + } + if (!hasFontSize_) { + textStyle_.SetFontSize(parent.GetFontSize()); + } + if (!hasFontStyle_) { + textStyle_.SetFontStyle(parent.GetFontStyle()); + } + if (!hasFontWeight_) { + textStyle_.SetFontWeight(parent.GetFontWeight()); + } + if (!hasLetterSpacing_) { + textStyle_.SetLetterSpacing(parent.GetLetterSpacing()); + } + if (!hasTextDecoration_) { + textStyle_.SetTextDecoration(parent.GetTextDecoration()); + } + } + + bool HasLetterSpacing() const + { + return hasLetterSpacing_; + } + + bool HasFontSize() const + { + return hasFontSize_; + } + +private: + TextStyle textStyle_; + bool hasFontFamilies_ = false; + bool hasFontSize_ = false; + bool hasFontStyle_ = false; + bool hasFontWeight_ = false; + bool hasLetterSpacing_ = false; + bool hasTextDecoration_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_SVG_PAINT_STATE_H diff --git a/frameworks/core/components/common/properties/swiper_indicator.h b/frameworks/core/components/common/properties/swiper_indicator.h new file mode 100644 index 00000000..81cbad1c --- /dev/null +++ b/frameworks/core/components/common/properties/swiper_indicator.h @@ -0,0 +1,262 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_SWIPER_INDICATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_SWIPER_INDICATOR_H + +#include "core/components/common/properties/color.h" +#include "core/components/swiper/swiper_indicator_theme.h" + +namespace OHOS::Ace { + +class ACE_EXPORT SwiperIndicator : public AceType { + DECLARE_ACE_TYPE(SwiperIndicator, AceType); + +public: + void InitStyle(const RefPtr& theme) + { + if (!theme) { + LOGD("param theme is nullptr"); + return; + } + color_ = theme->GetColor(); + selectedColor_ = theme->GetSelectedColor(); + size_ = theme->GetSize(); + selectedSize_ = theme->GetSelectedSize(); + isHasIndicatorMask_ = theme->GetIndicatorMask(); + indicatorPointPadding_ = theme->GetIndicatorPointPadding(); + digitalIndicatorTextStyle_ = theme->GetDigitalIndicatorTextStyle(); + startEndPadding_ = theme->GetStartEndPadding(); + pressPadding_ = theme->GetPressPadding(); + pressPointPadding_ = theme->GetPressPointPadding(); + pressSize_ = theme->GetPressSize(); + hoverSize_ = theme->GetHoverSize(); + hotZoneSize_ = theme->GetHotZoneSize(); + hotZoneColor_ = theme->GetHotZoneColor(); + indicatorTextFocusColor_ = theme->GetIndicatorTextFocusColor(); + isIndicatorDisabled_ = theme->GetIndicatorDisabled(); + } + + const Color& GetColor() const + { + return color_; + } + void SetColor(const Color& color) + { + color_ = color; + } + + const Color& GetSelectedColor() const + { + return selectedColor_; + } + void SetSelectedColor(const Color& selectedColor) + { + selectedColor_ = selectedColor; + } + + const Dimension& GetSize() const + { + return size_; + } + void SetSize(const Dimension& size) + { + size_ = size; + } + + const Dimension& GetSelectedSize() const + { + return selectedSize_; + } + void SetSelectedSize(const Dimension& selectedSize) + { + selectedSize_ = selectedSize; + } + + const Dimension& GetTop() const + { + return top_; + } + void SetTop(const Dimension& top) + { + top_ = top; + } + + const Dimension& GetLeft() const + { + return left_; + } + void SetLeft(const Dimension& left) + { + left_ = left; + } + + const Dimension& GetBottom() const + { + return bottom_; + } + void SetBottom(const Dimension& bottom) + { + bottom_ = bottom; + } + + const Dimension& GetRight() const + { + return right_; + } + + void SetRight(const Dimension& right) + { + right_ = right; + } + + bool GetIndicatorMask() const + { + return isHasIndicatorMask_; + } + + void SetIndicatorMask(bool isHasIndicatorMask) + { + isHasIndicatorMask_ = isHasIndicatorMask; + } + + void SetIndicatorPointPadding(const Dimension& indicatorPointPadding) + { + indicatorPointPadding_ = indicatorPointPadding; + } + + const Dimension& GetIndicatorPointPadding() const + { + return indicatorPointPadding_; + } + + static constexpr double DEFAULT_POSITION { -1.0 }; + + const TextStyle& GetDigitalIndicatorTextStyle() const + { + return digitalIndicatorTextStyle_; + } + + void SetStartEndPadding(const Dimension& startEndPadding) + { + startEndPadding_ = startEndPadding; + } + + const Dimension& GetStartEndPadding() const + { + return startEndPadding_; + } + + void SetPressPadding(const Dimension& pressPadding) + { + pressPadding_ = pressPadding; + } + + const Dimension& GetPressPadding() const + { + return pressPadding_; + } + + void SetPressPointPadding(const Dimension& pressPointPadding) + { + pressPointPadding_ = pressPointPadding; + } + + const Dimension& GetPressPointPadding() const + { + return pressPointPadding_; + } + + void SetPressSize(const Dimension& pressSize) + { + pressSize_ = pressSize; + } + + const Dimension& GetPressSize() const + { + return pressSize_; + } + + void SetHoverSize(const Dimension& hoverSize) + { + hoverSize_ = hoverSize; + } + + const Dimension& GetHoverSize() const + { + return hoverSize_; + } + + void SetHotZoneSize(const Dimension& hotZoneSize) + { + hotZoneSize_ = hotZoneSize; + } + + const Dimension& GetHotZoneSize() const + { + return hotZoneSize_; + } + + void SetHotZoneColor(const Color& hotZoneColor) + { + hotZoneColor_ = hotZoneColor; + } + + const Color& GetHotZoneColor() const + { + return hotZoneColor_; + } + + const Color& GetIndicatorTextFocusColor() const + { + return indicatorTextFocusColor_; + } + + bool GetIndicatorDisabled() const + { + return isIndicatorDisabled_; + } + + void SetIndicatorDisabled(bool isIndicatorDisabled) + { + isIndicatorDisabled_ = isIndicatorDisabled; + } + +private: + Color color_; + Color selectedColor_; + Dimension size_; + Dimension selectedSize_; + Dimension top_ { DEFAULT_POSITION, DimensionUnit::PX }; + Dimension left_ { DEFAULT_POSITION, DimensionUnit::PX }; + Dimension bottom_ { DEFAULT_POSITION, DimensionUnit::PX }; + Dimension right_ { DEFAULT_POSITION, DimensionUnit::PX }; + Dimension indicatorPointPadding_ { 8.0, DimensionUnit::VP }; + bool isHasIndicatorMask_ { false }; + TextStyle digitalIndicatorTextStyle_; + Dimension startEndPadding_; + Dimension pressPadding_; + Dimension pressPointPadding_; + Dimension pressSize_; + Dimension hoverSize_; + Dimension hotZoneSize_; + Color hotZoneColor_; + Color indicatorTextFocusColor_; + bool isIndicatorDisabled_ { false }; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_SWIPER_INDICATOR_H diff --git a/frameworks/core/components/common/properties/test/BUILD.gn b/frameworks/core/components/common/properties/test/BUILD.gn new file mode 100644 index 00000000..9825dbaf --- /dev/null +++ b/frameworks/core/components/common/properties/test/BUILD.gn @@ -0,0 +1,24 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") + +group("unittest") { + testonly = true + deps = [] + + deps += [ + "unittest/alignment:unittest", + "unittest/color:unittest", + ] +} diff --git a/frameworks/core/components/common/properties/test/unittest/alignment/BUILD.gn b/frameworks/core/components/common/properties/test/unittest/alignment/BUILD.gn new file mode 100644 index 00000000..998183ab --- /dev/null +++ b/frameworks/core/components/common/properties/test/unittest/alignment/BUILD.gn @@ -0,0 +1,54 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +if (is_standard_system) { + module_output_path = "ace_engine_standard/backenduicomponent/align" +} + +ohos_unittest("AlignmentTest") { + module_out_path = module_output_path + + sources = [ "alignment_test.cpp" ] + + configs = [ + ":alignment_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + if (is_standard_system) { + deps += [ "$ace_root/frameworks/bridge:js_framework_ohos" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("alignment_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + + deps = [ ":AlignmentTest" ] +} diff --git a/frameworks/core/components/common/properties/test/unittest/alignment/alignment_test.cpp b/frameworks/core/components/common/properties/test/unittest/alignment/alignment_test.cpp new file mode 100644 index 00000000..5ae74c8b --- /dev/null +++ b/frameworks/core/components/common/properties/test/unittest/alignment/alignment_test.cpp @@ -0,0 +1,299 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "core/components/common/properties/alignment.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +constexpr double EXTRA_SMALL_LENGTH = 100.0; +constexpr double SMALL_LENGTH = 200.0; +constexpr double MIDDLE_LENGTH = 300.0; +constexpr double LARGE_LENGTH = 400.0; +constexpr double EXTRA_LARGE_LENGTH = 500.0; + +} // namespace + +class AlignmentTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; +}; + +void AlignmentTest::SetUpTestCase() {} +void AlignmentTest::TearDownTestCase() {} +void AlignmentTest::SetUp() {} +void AlignmentTest::TearDown() {} + +/** + * @tc.name: GetAlignPosition001 + * @tc.desc: Verify that GetAlignPosition can return correct offset value when alignment is Alignment::TOP_LEFT + * @tc.type: FUNC + * @tc.require: AR000DAQUD + * @tc.author: chenxuankai + */ +HWTEST_F(AlignmentTest, GetAlignPosition001, TestSize.Level1) +{ + /** + * @tc.steps: step1. set parentSize, childSize and alignment + */ + Size parentSize = Size(LARGE_LENGTH, EXTRA_LARGE_LENGTH); + Size childSize = Size(SMALL_LENGTH, MIDDLE_LENGTH); + Alignment alignment = Alignment::TOP_LEFT; + + /** + * @tc.steps: step2. call GetAlignPosition to calculate offset. + */ + Offset resultOffset = Alignment::GetAlignPosition(parentSize, childSize, alignment); + + /** + * @tc.steps: step3. Verify whether the offset is Offset(0, 0). + * @tc.expected: step3. The offset is Offset(0, 0). + */ + ASSERT_TRUE(resultOffset == Offset(0, 0)); +} + +/** + * @tc.name: GetAlignPosition002 + * @tc.desc: Verify that GetAlignPosition can return correct offset value when alignment is Alignment::TOP_CENTER + * @tc.type: FUNC + * @tc.require: AR000DAQUD + * @tc.author: chenxuankai + */ +HWTEST_F(AlignmentTest, GetAlignPosition002, TestSize.Level1) +{ + /** + * @tc.steps: step1. set parentSize, childSize and alignment + */ + Size parentSize = Size(LARGE_LENGTH, EXTRA_LARGE_LENGTH); + Size childSize = Size(SMALL_LENGTH, MIDDLE_LENGTH); + Alignment alignment = Alignment::TOP_CENTER; + + /** + * @tc.steps: step2. call GetAlignPosition to calculate offset. + */ + Offset resultOffset = Alignment::GetAlignPosition(parentSize, childSize, alignment); + + /** + * @tc.steps: step3. Verify whether the offset is Offset(EXTRA_SMALL_LENGTH, 0). + * @tc.expected: step3. The offset is Offset(EXTRA_SMALL_LENGTH, 0). + */ + ASSERT_TRUE(resultOffset == Offset(EXTRA_SMALL_LENGTH, 0)); +} + +/** + * @tc.name: GetAlignPosition003 + * @tc.desc: Verify that GetAlignPosition can return correct offset value when alignment is Alignment::TOP_RIGHT + * @tc.type: FUNC + * @tc.require: AR000DAQUD + * @tc.author: chenxuankai + */ +HWTEST_F(AlignmentTest, GetAlignPosition003, TestSize.Level1) +{ + /** + * @tc.steps: step1. set parentSize, childSize and alignment + */ + Size parentSize = Size(LARGE_LENGTH, EXTRA_LARGE_LENGTH); + Size childSize = Size(SMALL_LENGTH, MIDDLE_LENGTH); + Alignment alignment = Alignment::TOP_RIGHT; + + /** + * @tc.steps: step2. call GetAlignPosition to calculate offset. + */ + Offset resultOffset = Alignment::GetAlignPosition(parentSize, childSize, alignment); + + /** + * @tc.steps: step3. Verify whether the offset is Offset(SMALL_LENGTH, 0). + * @tc.expected: step3. The offset is Offset(SMALL_LENGTH, 0). + */ + ASSERT_TRUE(resultOffset == Offset(SMALL_LENGTH, 0)); +} + +/** + * @tc.name: GetAlignPosition004 + * @tc.desc: Verify that GetAlignPosition can return correct offset value when alignment is Alignment::CENTER_LEFT + * @tc.type: FUNC + * @tc.require: AR000DAQUD + * @tc.author: chenxuankai + */ +HWTEST_F(AlignmentTest, GetAlignPosition004, TestSize.Level1) +{ + /** + * @tc.steps: step1. set parentSize, childSize and alignment + */ + Size parentSize = Size(LARGE_LENGTH, EXTRA_LARGE_LENGTH); + Size childSize = Size(SMALL_LENGTH, MIDDLE_LENGTH); + Alignment alignment = Alignment::CENTER_LEFT; + + /** + * @tc.steps: step2. call GetAlignPosition to calculate offset. + */ + Offset resultOffset = Alignment::GetAlignPosition(parentSize, childSize, alignment); + + /** + * @tc.steps: step3. Verify whether the offset is Offset(0, EXTRA_SMALL_LENGTH). + * @tc.expected: step3. The offset is Offset(0, EXTRA_SMALL_LENGTH). + */ + ASSERT_TRUE(resultOffset == Offset(0, EXTRA_SMALL_LENGTH)); +} + +/** + * @tc.name: GetAlignPosition005 + * @tc.desc: Verify that GetAlignPosition can return correct offset value when alignment is set to Alignment::CENTER + * @tc.type: FUNC + * @tc.require: AR000DAQUD + * @tc.author: chenxuankai + */ +HWTEST_F(AlignmentTest, GetAlignPosition005, TestSize.Level1) +{ + /** + * @tc.steps: step1. set parentSize, childSize and alignment + */ + Size parentSize = Size(LARGE_LENGTH, EXTRA_LARGE_LENGTH); + Size childSize = Size(SMALL_LENGTH, MIDDLE_LENGTH); + Alignment alignment = Alignment::CENTER; + + /** + * @tc.steps: step2. call GetAlignPosition to calculate offset. + */ + Offset resultOffset = Alignment::GetAlignPosition(parentSize, childSize, alignment); + + /** + * @tc.steps: step3. Verify whether the offset is Offset(EXTRA_SMALL_LENGTH, EXTRA_SMALL_LENGTH). + * @tc.expected: step3. The offset is Offset(EXTRA_SMALL_LENGTH, EXTRA_SMALL_LENGTH). + */ + ASSERT_TRUE(resultOffset == Offset(EXTRA_SMALL_LENGTH, EXTRA_SMALL_LENGTH)); +} + +/** + * @tc.name: GetAlignPosition006 + * @tc.desc: Verify that GetAlignPosition can return correct offset value when alignment is Alignment::CENTER_RIGHT + * @tc.type: FUNC + * @tc.require: AR000DAQUD + * @tc.author: chenxuankai + */ +HWTEST_F(AlignmentTest, GetAlignPosition006, TestSize.Level1) +{ + /** + * @tc.steps: step1. set parentSize, childSize and alignment + */ + Size parentSize = Size(LARGE_LENGTH, EXTRA_LARGE_LENGTH); + Size childSize = Size(SMALL_LENGTH, MIDDLE_LENGTH); + Alignment alignment = Alignment::CENTER_RIGHT; + + /** + * @tc.steps: step2. call GetAlignPosition to calculate offset. + */ + Offset resultOffset = Alignment::GetAlignPosition(parentSize, childSize, alignment); + + /** + * @tc.steps: step3. Verify whether the offset is Offset(SMALL_LENGTH, EXTRA_SMALL_LENGTH). + * @tc.expected: step3. The offset is Offset(SMALL_LENGTH, EXTRA_SMALL_LENGTH). + */ + ASSERT_TRUE(resultOffset == Offset(SMALL_LENGTH, EXTRA_SMALL_LENGTH)); +} + +/** + * @tc.name: GetAlignPosition007 + * @tc.desc: Verify that GetAlignPosition can return correct offset value when alignment is Alignment::BOTTOM_LEFT + * @tc.type: FUNC + * @tc.require: AR000DAQUD + * @tc.author: chenxuankai + */ +HWTEST_F(AlignmentTest, GetAlignPosition007, TestSize.Level1) +{ + /** + * @tc.steps: step1. set parentSize, childSize and alignment + */ + Size parentSize = Size(LARGE_LENGTH, EXTRA_LARGE_LENGTH); + Size childSize = Size(SMALL_LENGTH, MIDDLE_LENGTH); + Alignment alignment = Alignment::BOTTOM_LEFT; + + /** + * @tc.steps: step2. call GetAlignPosition to calculate offset. + */ + Offset resultOffset = Alignment::GetAlignPosition(parentSize, childSize, alignment); + + /** + * @tc.steps: step3. Verify whether the offset is Offset(0, SMALL_LENGTH). + * @tc.expected: step3. The offset is Offset(0, SMALL_LENGTH). + */ + ASSERT_TRUE(resultOffset == Offset(0, SMALL_LENGTH)); +} + +/** + * @tc.name: GetAlignPosition008 + * @tc.desc: Verify that GetAlignPosition can return correct offset value when alignment is Alignment::BOTTOM_CENTER + * @tc.type: FUNC + * @tc.require: AR000DAQUD + * @tc.author: chenxuankai + */ +HWTEST_F(AlignmentTest, GetAlignPosition008, TestSize.Level1) +{ + /** + * @tc.steps: step1. set parentSize, childSize and alignment + */ + Size parentSize = Size(LARGE_LENGTH, EXTRA_LARGE_LENGTH); + Size childSize = Size(SMALL_LENGTH, MIDDLE_LENGTH); + Alignment alignment = Alignment::BOTTOM_CENTER; + + /** + * @tc.steps: step2. call GetAlignPosition to calculate offset. + */ + Offset resultOffset = Alignment::GetAlignPosition(parentSize, childSize, alignment); + + /** + * @tc.steps: step3. Verify whether the offset is Offset(EXTRA_SMALL_LENGTH, SMALL_LENGTH). + * @tc.expected: step3. The offset is Offset(EXTRA_SMALL_LENGTH, SMALL_LENGTH). + */ + ASSERT_TRUE(resultOffset == Offset(EXTRA_SMALL_LENGTH, SMALL_LENGTH)); +} + +/** + * @tc.name: GetAlignPosition009 + * @tc.desc: Verify that GetAlignPosition can return correct offset value when alignment is Alignment::BOTTOM_RIGHT + * @tc.type: FUNC + * @tc.require: AR000DAQUD + * @tc.author: chenxuankai + */ +HWTEST_F(AlignmentTest, GetAlignPosition009, TestSize.Level1) +{ + /** + * @tc.steps: step1. set parentSize, childSize and alignment + */ + Size parentSize = Size(LARGE_LENGTH, EXTRA_LARGE_LENGTH); + Size childSize = Size(SMALL_LENGTH, MIDDLE_LENGTH); + Alignment alignment = Alignment::BOTTOM_RIGHT; + + /** + * @tc.steps: step2. call GetAlignPosition to calculate offset. + */ + Offset resultOffset = Alignment::GetAlignPosition(parentSize, childSize, alignment); + + /** + * @tc.steps: step3. Verify whether the offset is Offset(SMALL_LENGTH, SMALL_LENGTH). + * @tc.expected: step3. The offset is Offset(SMALL_LENGTH, SMALL_LENGTH). + */ + ASSERT_TRUE(resultOffset == Offset(SMALL_LENGTH, SMALL_LENGTH)); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/common/properties/test/unittest/color/BUILD.gn b/frameworks/core/components/common/properties/test/unittest/color/BUILD.gn new file mode 100644 index 00000000..03f0d73d --- /dev/null +++ b/frameworks/core/components/common/properties/test/unittest/color/BUILD.gn @@ -0,0 +1,55 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +if (is_standard_system) { + module_output_path = "ace_engine_standard/backenduicomponent/color" +} + +ohos_unittest("ColorPropertyTest") { + module_out_path = module_output_path + + sources = [ "color_test.cpp" ] + + configs = [ + ":color_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + deps += [ "$ace_root/frameworks/bridge:js_framework_ohos" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("color_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + + deps = [ ":ColorPropertyTest" ] +} diff --git a/frameworks/core/components/common/properties/test/unittest/color/color_test.cpp b/frameworks/core/components/common/properties/test/unittest/color/color_test.cpp new file mode 100644 index 00000000..80827be6 --- /dev/null +++ b/frameworks/core/components/common/properties/test/unittest/color/color_test.cpp @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include "gtest/gtest.h" + +#include "base/utils/system_properties.h" +#include "core/components/common/properties/color.h" +#include "core/components/theme/theme_constants.h" +#include "core/components/theme/theme_manager.h" +#include "core/components/theme/theme_utils.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +const std::string COLOR_ID_NORMAL = "\"@id003\""; +const std::string COLOR_ID_NOT_FOUND = "\"@id9999\""; +const Color COLOR_ERROR = Color(0xff000000); +const std::string COLOR_ID_ERROR[] = { "", "\"@id\"", "\"@idabc\"", "\"@idid003\"", "\"@003\"", "\"@id001@id003\"" }; +const RefPtr THEME_MANAGER = AceType::MakeRefPtr(); + +Color ParseColor(const std::string& id) +{ + auto themeConstants = THEME_MANAGER->GetThemeConstants(); + const auto& parseResult = ThemeUtils::ParseThemeIdReference(id); + return themeConstants->GetColor(parseResult.id); +} + +} // namespace + +class ColorPropertyTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; +}; + +void ColorPropertyTest::SetUpTestCase() {} +void ColorPropertyTest::TearDownTestCase() {} +void ColorPropertyTest::SetUp() {} +void ColorPropertyTest::TearDown() {} + +/** + * @tc.name: ParseColorId001 + * @tc.desc: Parse string refer to platform style id. + * @tc.type: FUNC + * @tc.require: AR000DVLH5 + */ +HWTEST_F(ColorPropertyTest, ParseColorId001, TestSize.Level0) +{ + /** + * @tc.steps: step1. Parse color string contains id reference. + * @tc.expected: step1. Color parse correctly, equal with color in ThemeConstants. + */ + auto themeConstants = THEME_MANAGER->GetThemeConstants(); + Color color = ParseColor(COLOR_ID_NORMAL); + Color platformColor = themeConstants->GetColor(THEME_OHOS_COLOR_BG); + ASSERT_EQ(color.GetValue(), platformColor.GetValue()); +} + +/** + * @tc.name: ParseColorId002 + * @tc.desc: Parse string refer to platform style id, id not found. + * @tc.type: FUNC + * @tc.require: AR000DVLH5 + */ +HWTEST_F(ColorPropertyTest, ParseColorId002, TestSize.Level0) +{ + /** + * @tc.steps: step1. Parse color string contains id which is not exists. + * @tc.expected: step1. Color parse correctly, equal with error color(black). + */ + Color color = ParseColor(COLOR_ID_NOT_FOUND); + ASSERT_EQ(color.GetValue(), COLOR_ERROR.GetValue()); +} + +/** + * @tc.name: ParseColorId004 + * @tc.desc: Parse string refer to platform style id, id format is error. + * @tc.type: FUNC + * @tc.require: AR000DVLH5 + */ +HWTEST_F(ColorPropertyTest, ParseColorId004, TestSize.Level0) +{ + /** + * @tc.steps: step1. Parse color string contains id which format is error. + * @tc.expected: step1. Color parse correctly, equal with error color(black). + */ + Color color = ParseColor(COLOR_ID_ERROR[0]); + ASSERT_EQ(color.GetValue(), COLOR_ERROR.GetValue()); + for (size_t i = 1; i < std::size(COLOR_ID_ERROR); i++) { + Color color = ParseColor(COLOR_ID_ERROR[i]); + ASSERT_EQ(color.GetValue(), COLOR_ERROR.GetValue()); + } +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/common/properties/text_style.cpp b/frameworks/core/components/common/properties/text_style.cpp new file mode 100644 index 00000000..16cf50e7 --- /dev/null +++ b/frameworks/core/components/common/properties/text_style.cpp @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/common/properties/text_style.h" + +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { + +TextStyle::TextStyle(const std::vector& fontFamilies, double fontSize, FontWeight fontWeight, + FontStyle fontStyle, const Color& textColor) + : fontFamilies_(fontFamilies), fontSize_(fontSize), fontWeight_(fontWeight), fontStyle_(fontStyle), + textColor_(textColor) +{} + +bool TextStyle::operator==(const TextStyle& rhs) const +{ + return fontFamilies_ == rhs.fontFamilies_ && preferFontSizes_ == rhs.preferFontSizes_ && + fontSize_ == rhs.fontSize_ && adaptMinFontSize_ == rhs.adaptMinFontSize_ && + adaptMaxFontSize_ == rhs.adaptMaxFontSize_ && adaptFontSizeStep_ == rhs.adaptFontSizeStep_ && + lineHeight_ == rhs.lineHeight_ && fontWeight_ == rhs.fontWeight_ && fontStyle_ == rhs.fontStyle_ && + textBaseline_ == rhs.textBaseline_ && textOverflow_ == rhs.textOverflow_ && textAlign_ == rhs.textAlign_ && + textColor_ == rhs.textColor_ && textDecoration_ == rhs.textDecoration_ && shadow_ == rhs.shadow_ && + wordSpacing_ == rhs.wordSpacing_ && letterSpacing_ == rhs.letterSpacing_ && maxLines_ == rhs.maxLines_ && + adaptTextSize_ == rhs.adaptTextSize_ && allowScale_ == rhs.allowScale_ && wordBreak_ == rhs.wordBreak_; +} + +bool TextStyle::operator!=(const TextStyle& rhs) const +{ + return !(rhs == *this); +} + +void TextStyle::SetAdaptTextSize( + const Dimension& maxFontSize, const Dimension& minFontSize, const Dimension& fontSizeStep) +{ + adaptMaxFontSize_ = maxFontSize; + adaptMinFontSize_ = minFontSize; + adaptFontSizeStep_ = fontSizeStep; + adaptTextSize_ = true; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/common/properties/text_style.h b/frameworks/core/components/common/properties/text_style.h new file mode 100644 index 00000000..44513dd9 --- /dev/null +++ b/frameworks/core/components/common/properties/text_style.h @@ -0,0 +1,378 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_TEXT_STYLE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_TEXT_STYLE_H + +#include +#include + +#include "base/geometry/dimension.h" +#include "base/utils/linear_map.h" +#include "core/components/common/layout/constants.h" +#include "core/components/common/properties/color.h" +#include "core/components/common/properties/shadow.h" +#include "core/pipeline/base/render_component.h" + +namespace OHOS::Ace { + +// The normal weight is W400, the larger the number after W, the thicker the font will be. +// BOLD is equal to W700 and NORMAL is equal to W400, lighter is W100, BOLDER is W900. +enum class FontWeight { + W100 = 0, + W200, + W300, + W400, + W500, + W600, + W700, + W800, + W900, + BOLD, + NORMAL, + BOLDER, + LIGHTER, +}; + +enum class FontStyle { + NORMAL, + ITALIC, +}; + +enum class TextBaseline { + ALPHABETIC, + IDEOGRAPHIC, + TOP, + BOTTOM, + MIDDLE, + HANGING, +}; + +enum class WordBreak { + NORMAL = 0, + BREAK_ALL, + BREAK_WORD +}; + +struct TextSizeGroup { + Dimension fontSize = 14.0_px; + uint32_t maxLines = INT32_MAX; + TextOverflow textOverflow = TextOverflow::CLIP; +}; + +class ACE_EXPORT TextStyle final { +public: + TextStyle() = default; + TextStyle(const std::vector& fontFamilies, double fontSize, FontWeight fontWeight, FontStyle fontStyle, + const Color& textColor); + ~TextStyle() = default; + + bool operator==(const TextStyle& rhs) const; + bool operator!=(const TextStyle& rhs) const; + + TextBaseline GetTextBaseline() const + { + return textBaseline_; + } + + void SetTextBaseline(TextBaseline baseline) + { + textBaseline_ = baseline; + } + + void SetTextDecoration(TextDecoration textDecoration) + { + textDecoration_ = textDecoration; + } + + FontStyle GetFontStyle() const + { + return fontStyle_; + } + + void SetFontStyle(FontStyle fontStyle) + { + fontStyle_ = fontStyle; + } + + const Dimension& GetFontSize() const + { + return fontSize_; + } + + void SetFontSize(const Dimension& fontSize) + { + fontSize_ = fontSize; + } + + FontWeight GetFontWeight() const + { + return fontWeight_; + } + + void SetFontWeight(FontWeight fontWeight) + { + fontWeight_ = fontWeight; + } + + const Color& GetTextColor() const + { + return textColor_; + } + + void SetTextColor(const Color& textColor) + { + textColor_ = textColor; + } + + TextDecoration GetTextDecoration() const + { + return textDecoration_; + } + + double GetWordSpacing() const + { + return wordSpacing_; + } + + void SetWordSpacing(double wordSpacing) + { + wordSpacing_ = wordSpacing; + } + + const std::vector& GetFontFamilies() const + { + return fontFamilies_; + } + + void SetFontFamilies(const std::vector& fontFamilies) + { + fontFamilies_ = fontFamilies; + } + + const Dimension& GetLineHeight() const + { + return lineHeight_; + } + + void SetLineHeight(const Dimension& lineHeight, bool hasHeightOverride = true) + { + lineHeight_ = lineHeight; + hasHeightOverride_ = hasHeightOverride; + } + + bool HasHeightOverride() const + { + return hasHeightOverride_; + } + + const Shadow& GetShadow() const + { + return shadow_; + } + + void SetShadow(const Shadow& shadow) + { + shadow_ = shadow; + } + + double GetLetterSpacing() const + { + return letterSpacing_; + } + + void SetLetterSpacing(double letterSpacing) + { + letterSpacing_ = letterSpacing; + } + + bool GetAdaptTextSize() const + { + return adaptTextSize_; + } + + void SetAdaptTextSize( + const Dimension& maxFontSize, const Dimension& minFontSize, const Dimension& fontSizeStep = 1.0_px); + + void DisableAdaptTextSize() + { + adaptTextSize_ = false; + } + + uint32_t GetMaxLines() const + { + return maxLines_; + } + + void SetMaxLines(uint32_t maxLines) + { + maxLines_ = maxLines; + } + + void SetPreferFontSizes(const std::vector& preferFontSizes) + { + preferFontSizes_ = preferFontSizes; + adaptTextSize_ = true; + } + + const std::vector& GetPreferFontSizes() const + { + return preferFontSizes_; + } + + // Must use with SetAdaptMinFontSize and SetAdaptMaxFontSize. + void SetAdaptFontSizeStep(const Dimension& adaptTextSizeStep) + { + adaptFontSizeStep_ = adaptTextSizeStep; + } + // Must use with SetAdaptMaxFontSize. + void SetAdaptMinFontSize(const Dimension& adaptMinFontSize) + { + adaptMinFontSize_ = adaptMinFontSize; + adaptTextSize_ = true; + } + // Must use with SetAdaptMinFontSize. + void SetAdaptMaxFontSize(const Dimension& adaptMaxFontSize) + { + adaptMaxFontSize_ = adaptMaxFontSize; + adaptTextSize_ = true; + } + + const Dimension& GetAdaptFontSizeStep() const + { + return adaptFontSizeStep_; + } + + const Dimension& GetAdaptMinFontSize() const + { + return adaptMinFontSize_; + } + + const Dimension& GetAdaptMaxFontSize() const + { + return adaptMaxFontSize_; + } + + const std::vector& GetPreferTextSizeGroups() const + { + return preferTextSizeGroups_; + } + void SetPreferTextSizeGroups(const std::vector& preferTextSizeGroups) + { + preferTextSizeGroups_ = preferTextSizeGroups; + adaptTextSize_ = true; + } + + bool IsAllowScale() const + { + return allowScale_; + } + + void SetAllowScale(bool allowScale) + { + allowScale_ = allowScale; + } + + TextOverflow GetTextOverflow() const + { + return textOverflow_; + } + void SetTextOverflow(TextOverflow textOverflow) + { + textOverflow_ = textOverflow; + } + TextAlign GetTextAlign() const + { + return textAlign_; + } + void SetTextAlign(TextAlign textAlign) + { + textAlign_ = textAlign; + } + + WordBreak GetWordBreak() const + { + return wordBreak_; + } + + void SetWordBreak(WordBreak wordBreak) + { + wordBreak_ = wordBreak; + } + +private: + std::vector fontFamilies_; + std::vector preferFontSizes_; + std::vector preferTextSizeGroups_; + // use 14px for normal font size. + Dimension fontSize_ { 14, DimensionUnit::PX }; + Dimension adaptMinFontSize_; + Dimension adaptMaxFontSize_; + Dimension adaptFontSizeStep_; + Dimension lineHeight_; + bool hasHeightOverride_ = false; + FontWeight fontWeight_ { FontWeight::NORMAL }; + FontStyle fontStyle_ { FontStyle::NORMAL }; + TextBaseline textBaseline_ { TextBaseline::ALPHABETIC }; + TextOverflow textOverflow_ { TextOverflow::CLIP }; + TextAlign textAlign_ { TextAlign::START }; + Color textColor_ { Color::BLACK }; + TextDecoration textDecoration_ { TextDecoration::NONE }; + Shadow shadow_; + double wordSpacing_ = 0.0; + double letterSpacing_ = 0.0; + uint32_t maxLines_ = UINT32_MAX; + bool adaptTextSize_ = false; + bool allowScale_ = true; + WordBreak wordBreak_ { WordBreak::BREAK_WORD }; +}; + +namespace StringUtils { + +inline FontWeight StringToFontWeight(const std::string& weight) +{ + static const LinearMapNode fontWeightTable[] = { + { "100", FontWeight::W100 }, + { "200", FontWeight::W200 }, + { "300", FontWeight::W300 }, + { "400", FontWeight::W400 }, + { "500", FontWeight::W500 }, + { "600", FontWeight::W600 }, + { "700", FontWeight::W700 }, + { "800", FontWeight::W800 }, + { "900", FontWeight::W900 }, + { "bold", FontWeight::BOLD }, + { "bolder", FontWeight::BOLDER }, + { "lighter", FontWeight::LIGHTER }, + }; + auto weightIter = BinarySearchFindIndex(fontWeightTable, ArraySize(fontWeightTable), weight.c_str()); + return weightIter != -1 ? fontWeightTable[weightIter].value : FontWeight::NORMAL; +} + +inline WordBreak StringToWordBreak(const std::string& wordBreak) +{ + static const LinearMapNode wordBreakTable[] = { + { "break-all", WordBreak::BREAK_ALL }, + { "break-word", WordBreak::BREAK_WORD }, + { "normal", WordBreak::NORMAL }, + }; + auto wordBreakIter = BinarySearchFindIndex(wordBreakTable, ArraySize(wordBreakTable), wordBreak.c_str()); + return wordBreakIter != -1 ? wordBreakTable[wordBreakIter].value : WordBreak::BREAK_WORD; +} + +} // namespace StringUtils +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_TEXT_STYLE_H diff --git a/frameworks/core/components/common/properties/tween_option.h b/frameworks/core/components/common/properties/tween_option.h new file mode 100644 index 00000000..b035964f --- /dev/null +++ b/frameworks/core/components/common/properties/tween_option.h @@ -0,0 +1,355 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_TWEEN_OPTION_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_TWEEN_OPTION_H + +#include + +#include "base/geometry/dimension.h" +#include "base/geometry/dimension_offset.h" +#include "core/animation/animation.h" +#include "core/animation/animation_pub.h" +#include "core/animation/curve.h" +#include "core/animation/curves.h" +#include "core/animation/property_animatable.h" +#include "core/components/common/properties/color.h" +#include "core/components/common/properties/decoration.h" + +namespace OHOS::Ace { + +enum class TweenOperation { + NONE, + PLAY, + FINISH, + PAUSE, + CANCEL, + REVERSE, +}; + +class TweenOption final { +public: + void SetCurve(const RefPtr& curve) + { + if (!curve) { + LOGE("set curve failed. curve is null."); + return; + } + curve_ = curve; + } + + const RefPtr& GetCurve() const + { + return curve_; + } + + void SetDelay(int32_t delay) + { + delay_ = delay; + } + + int32_t GetDelay() const + { + return delay_; + } + + void SetIteration(int32_t iteration) + { + iteration_ = iteration; + } + + int32_t GetIteration() const + { + return iteration_; + } + + void SetFillMode(FillMode fillMode) + { + fillMode_ = fillMode; + } + + FillMode GetFillMode() const + { + return fillMode_; + } + + void SetDuration(int32_t duration) + { + duration_ = duration; + changeDuration_ = true; + } + + // Duration in millisecond. + int32_t GetDuration() const + { + return duration_; + } + + void SetAnimationDirection(AnimationDirection direction) + { + direction_ = direction; + } + + AnimationDirection GetAnimationDirection() const + { + return direction_; + } + + void SetTransformOrigin(const Dimension& originX, const Dimension& originY) + { + originX_ = originX; + originY_ = originY; + SetTransformOriginChanged(true); + } + + const Dimension& GetTransformOriginX() const + { + return originX_; + } + + const Dimension& GetTransformOriginY() const + { + return originY_; + } + + void SetIsBackground(bool isBackground) + { + isBackground_ = isBackground; + } + + bool GetIsBackground() const + { + return isBackground_; + } + + void SetTranslateAnimations(AnimationType type, const RefPtr>& transformOffsetAnimation) + { + if (!transformOffsetAnimation) { + LOGE("input translateAnimation is null."); + return; + } + transformOffsetAnimations_[type] = transformOffsetAnimation; + } + + const std::unordered_map>>& GetTranslateAnimations() const + { + return transformOffsetAnimations_; + } + + void SetTransformFloatAnimation(AnimationType type, const RefPtr>& transformFloatAnimation) + { + if (!transformFloatAnimation) { + LOGE("input transformFloatAnimation is null."); + return; + } + transformFloatAnimations_[type] = transformFloatAnimation; + } + + double GetMaxScaleXY() + { + return maxScaleXY_; + } + + void SetMaxScaleXY(double maxScaleXY) + { + maxScaleXY_ = maxScaleXY; + } + + const std::unordered_map>>& GetTransformFloatAnimation() const + { + return transformFloatAnimations_; + } + + void SetOpacityAnimation(const RefPtr>& opacityAnimation) + { + if (!opacityAnimation) { + LOGE("input opacityAnimation is null."); + return; + } + opacityAnimation_ = opacityAnimation; + } + + const RefPtr>& GetOpacityAnimation() const + { + return opacityAnimation_; + } + + void SetColorAnimation(const RefPtr>& colorAnimation) + { + if (!colorAnimation) { + LOGE("input colorAnimation is null."); + return; + } + colorAnimation_ = colorAnimation; + } + + RefPtr>& GetColorAnimation() + { + return colorAnimation_; + } + + void SetBackgroundPositionAnimation(const RefPtr>& backgroundPositionAnimation) + { + if (!backgroundPositionAnimation) { + LOGE("input backgroundPositionAnimation is null."); + return; + } + backgroundPositionAnimation_ = backgroundPositionAnimation; + } + + void SetPropertyAnimationFloat(PropertyAnimatableType property, const RefPtr>& animation) + { + if (!animation) { + LOGE("Set float property animation failed. animation is null. property: %{public}d", property); + return; + } + LOGD("set float property animation. property: %{public}d", property); + floatAnimationMap_[property] = animation; + } + + PropertyAnimationFloatMap& GetFloatPropertyAnimation() + { + return floatAnimationMap_; + } + + RefPtr>& GetBackgroundPositionAnimation() + { + return backgroundPositionAnimation_; + } + + void SetTransformOriginChanged(bool change) + { + changeTransformOrigin_ = change; + } + + bool HasTransformOriginChanged() const + { + return changeTransformOrigin_; + } + + bool HasTransformOffsetChanged() const + { + return !transformOffsetAnimations_.empty(); + } + + bool HasTransformFloatChanged() const + { + return !transformFloatAnimations_.empty(); + } + + bool HasDurationChanged() const + { + return changeDuration_; + } + + bool IsValid() const + { + return (opacityAnimation_ || colorAnimation_ || backgroundPositionAnimation_ || !floatAnimationMap_.empty() || + !transformFloatAnimations_.empty() || !transformOffsetAnimations_.empty()); + } + + void SkipAllPendingAnimation() + { + if (opacityAnimation_) { + opacityAnimation_->SetSkipAnimation(true); + } + + if (colorAnimation_) { + colorAnimation_->SetSkipAnimation(true); + } + + if (backgroundPositionAnimation_) { + backgroundPositionAnimation_->SetSkipAnimation(true); + } + + for (auto&& [type, animation] : floatAnimationMap_) { + if (animation) { + animation->SetSkipAnimation(true); + } + } + for (auto&& [type, animation] : transformOffsetAnimations_) { + if (animation) { + animation->SetSkipAnimation(true); + } + } + for (auto&& [type, animation] : transformFloatAnimations_) { + if (animation) { + animation->SetSkipAnimation(true); + } + } + } + + void ClearListeners() + { + if (opacityAnimation_) { + opacityAnimation_->ClearListeners(); + } + if (colorAnimation_) { + colorAnimation_->ClearListeners(); + } + if (backgroundPositionAnimation_) { + backgroundPositionAnimation_->ClearListeners(); + } + + ClearListeners(floatAnimationMap_); + + for (auto&& [type, animation] : transformOffsetAnimations_) { + if (animation) { + animation->ClearListeners(); + } + } + for (auto&& [type, animation] : transformFloatAnimations_) { + if (animation) { + animation->ClearListeners(); + } + } + } + +private: + template + void ClearListeners(const std::map>>& animations) + { + for (auto&& [type, animation] : animations) { + if (animation) { + animation->ClearListeners(); + } + } + } + +private: + FillMode fillMode_ = FillMode::NONE; + AnimationDirection direction_ = AnimationDirection::NORMAL; + RefPtr curve_; // use animation's curve as default. + RefPtr> opacityAnimation_; + RefPtr> colorAnimation_; + RefPtr> backgroundPositionAnimation_; + PropertyAnimationFloatMap floatAnimationMap_; + std::unordered_map>> transformOffsetAnimations_; + std::unordered_map>> transformFloatAnimations_; + + int32_t duration_ = 0; + int32_t delay_ = 0; + int32_t iteration_ = 1; + bool isBackground_ = true; + bool changeTransformOrigin_ = false; + bool changeDuration_ = false; + double maxScaleXY_ = -1.0; + Dimension originX_; + Dimension originY_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_PROPERTIES_TWEEN_OPTION_H diff --git a/frameworks/core/components/common/rotation/rotation_controller.h b/frameworks/core/components/common/rotation/rotation_controller.h new file mode 100644 index 00000000..46f4828a --- /dev/null +++ b/frameworks/core/components/common/rotation/rotation_controller.h @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_ROTATION_CONTROLLER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_ROTATION_CONTROLLER_H + +#include + +#include "base/memory/ace_type.h" +#include "core/pipeline/pipeline_context.h" + +namespace OHOS::Ace { + +class RenderNode; + +using RequestRotationImpl = std::function; + +class RotationController : public virtual AceType { + DECLARE_ACE_TYPE(RotationController, AceType); + +public: + RotationController() = default; + ~RotationController() override = default; + + void SetRequestRotationImpl(const WeakPtr& weak, const WeakPtr& context) + { + requestRotationImpl_ = [weak, context](bool rotation) { + auto pipeContext = context.Upgrade(); + if (pipeContext) { + rotation ? pipeContext->SetRequestedRotationNode(weak) + : pipeContext->RemoveRequestedRotationNode(weak); + } + }; + } + + void RequestRotation(bool rotation) + { + if (requestRotationImpl_) { + requestRotationImpl_(rotation); + } + } + +private: + RequestRotationImpl requestRotationImpl_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_ROTATION_CONTROLLER_H diff --git a/frameworks/core/components/common/rotation/rotation_node.h b/frameworks/core/components/common/rotation/rotation_node.h new file mode 100644 index 00000000..49c10ed8 --- /dev/null +++ b/frameworks/core/components/common/rotation/rotation_node.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_ROTATION_NODE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_ROTATION_NODE_H + +#include "base/memory/ace_type.h" +#include "core/event/rotation_event.h" + +namespace OHOS::Ace { + +class RotationNode : public virtual AceType { + DECLARE_ACE_TYPE(RotationNode, AceType); + +public: + ~RotationNode() override = default; + + virtual bool OnRotation(const RotationEvent& event) = 0; + +protected: + RotationNode() = default; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_ROTATION_NODE_H diff --git a/frameworks/core/components/components.gni b/frameworks/core/components/components.gni new file mode 100644 index 00000000..c53e2124 --- /dev/null +++ b/frameworks/core/components/components.gni @@ -0,0 +1,103 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +template("build_component") { + forward_variables_from(invoker, "*") + + component_name = target_name + + template("build_component_impl") { + forward_variables_from(invoker, "*") + + platform = target_name + + component_deps = [] + extra_deps = [] + foreach(item, component_deps) { + extra_deps += [ "$ace_root/frameworks/core/components/${item}:ace_core_components_${item}_${platform}" ] + } + + if (defined(platform_deps)) { + foreach(item, platform_deps) { + extra_deps += [ "${item}_${platform}" ] + } + } + + if (defined(deps)) { + extra_deps += deps + } + + ohos_source_set("ace_core_components_${component_name}_${platform}") { + defines += invoker.defines + + sources = [] + sources += invoker.sources + + configs = [] + configs += [ + "$ace_root:ace_config", + "$flutter_root:flutter_config", + "$flutter_root:icu_config_$platform", + ] + if (defined(invoker.configs)) { + configs += invoker.configs + } + + deps = [] + deps += extra_deps + deps += [ + "$ace_root/frameworks/core/components/theme:build_theme_code", + "$flutter_root:ace_skia_$platform", + ] + + if (defined(invoker.public_configs)) { + public_configs = [] + public_configs += invoker.public_configs + } + + if (defined(invoker.external_deps)) { + external_deps = [] + external_deps += invoker.external_deps + } + + if (defined(invoker.external_deps_info)) { + external_deps_info = [] + external_deps_info += invoker.external_deps_info + } + + if (use_mingw_win) { + cflags_cc = [ "-std=c++17" ] + + defines += [ + "_USE_MATH_DEFINES", + "NOGDI", + ] + } + } + } + + build_component_impl("ohos") { + defines = ace_ohos_defines + } + + build_component_impl("windows") { + defines = ace_windows_defines + } + + build_component_impl("mac") { + defines = ace_mac_defines + } +} diff --git a/frameworks/core/components/custom_dialog/BUILD.gn b/frameworks/core/components/custom_dialog/BUILD.gn new file mode 100644 index 00000000..ace42b8f --- /dev/null +++ b/frameworks/core/components/custom_dialog/BUILD.gn @@ -0,0 +1,21 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("custom_dialog") { + sources = [ + "custom_dialog_component.cpp", + "custom_dialog_element.cpp", + ] +} diff --git a/frameworks/core/components/custom_dialog/custom_dialog_component.cpp b/frameworks/core/components/custom_dialog/custom_dialog_component.cpp new file mode 100644 index 00000000..2550bfe5 --- /dev/null +++ b/frameworks/core/components/custom_dialog/custom_dialog_component.cpp @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/custom_dialog/custom_dialog_component.h" + +#include "core/components/custom_dialog/custom_dialog_element.h" + +namespace OHOS::Ace { + +RefPtr CustomDialogComponent::CreateElement() +{ + return AceType::MakeRefPtr(GetId()); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/custom_dialog/custom_dialog_component.h b/frameworks/core/components/custom_dialog/custom_dialog_component.h new file mode 100644 index 00000000..05a51789 --- /dev/null +++ b/frameworks/core/components/custom_dialog/custom_dialog_component.h @@ -0,0 +1,146 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CUSTOM_DIALOG_CUSTOM_DIALOG_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CUSTOM_DIALOG_CUSTOM_DIALOG_COMPONENT_H + +#include + +#include "base/geometry/dimension.h" +#include "core/components/common/properties/edge.h" +#include "core/event/ace_event_handler.h" +#include "core/pipeline/base/composed_component.h" + +namespace OHOS::Ace { + +using BuildDialogImpl = std::function; + +// CustomDialogController is used in CustomDialogElement to build a dialog +class CustomDialogController : public virtual AceType { + DECLARE_ACE_TYPE(CustomDialogController, AceType); + +public: + void ShowDialog() + { + if (showDialogImpl_) { + showDialogImpl_(); + } + } + + void CloseDialog() + { + if (closeDialogImpl_) { + closeDialogImpl_(); + } + } + + void SetShowDialogImpl(const BuildDialogImpl& showDialogImpl) + { + showDialogImpl_ = showDialogImpl; + } + + void SetCloseDialogImpl(const BuildDialogImpl& closeDialogImpl) + { + closeDialogImpl_ = closeDialogImpl; + } + +private: + BuildDialogImpl showDialogImpl_; + BuildDialogImpl closeDialogImpl_; +}; + +class CustomDialogComponent : public ComposedComponent { + DECLARE_ACE_TYPE(CustomDialogComponent, ComposedComponent); + +public: + CustomDialogComponent(const ComposeId& id, const std::string& name, const RefPtr& child) + : ComposedComponent(id, name, child) + { + dialogController_ = AceType::MakeRefPtr(); + }; + + CustomDialogComponent(const ComposeId& id, const std::string& name) : ComposedComponent(id, name) + { + dialogController_ = AceType::MakeRefPtr(); + }; + + ~CustomDialogComponent() override = default; + + RefPtr CreateElement() override; + + const RefPtr& GetDialogController() const + { + return dialogController_; + } + + const EventMarker& GetOnCancel() const + { + return onCancel_; + } + + void SetOnCancel(const EventMarker& value) + { + onCancel_ = value; + } + + const Dimension& GetHeight() const + { + return height_; + } + + void SetHeight(const Dimension& height) + { + height_ = height; + } + + const Dimension& GetWidth() const + { + return width_; + } + + void SetWidth(const Dimension& width) + { + width_ = width; + } + + void SetMargin(const Edge& margin) + { + margin_ = margin; + isSetMargin_ = true; + } + + const Edge& GetMargin() const + { + return margin_; + } + + bool IsSetMargin() const + { + return isSetMargin_; + } + +private: + RefPtr dialogController_; + EventMarker onCancel_; + // initialize height and width to default case + Dimension height_; + Dimension width_; + Edge margin_; + bool isSetMargin_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CUSTOM_DIALOG_CUSTOM_DIALOG_COMPONENT_H diff --git a/frameworks/core/components/custom_dialog/custom_dialog_element.cpp b/frameworks/core/components/custom_dialog/custom_dialog_element.cpp new file mode 100644 index 00000000..60bd75d1 --- /dev/null +++ b/frameworks/core/components/custom_dialog/custom_dialog_element.cpp @@ -0,0 +1,117 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/custom_dialog/custom_dialog_element.h" + +#include "base/utils/string_utils.h" +#include "core/components/dialog/dialog_component.h" +#include "core/components/stack/stack_element.h" + +namespace OHOS::Ace { + +void CustomDialogElement::PerformBuild() +{ + RefPtr customComponent = AceType::DynamicCast(component_); + if (!customComponent) { + return; + } + dialog_ = customComponent; + const auto& controller = customComponent->GetDialogController(); + if (!controller) { + return; + } + controller->SetShowDialogImpl([weak = AceType::WeakClaim(this)]() { + auto dialog = weak.Upgrade(); + if (dialog) { + dialog->ShowDialog(); + } + }); + controller->SetCloseDialogImpl([weak = AceType::WeakClaim(this)]() { + auto dialog = weak.Upgrade(); + if (dialog) { + dialog->CloseDialog(); + } + }); +} + +void CustomDialogElement::ShowDialog() +{ + if (!dialog_) { + return; + } + const auto context = context_.Upgrade(); + if (!context) { + return; + } + auto stackElement = context->GetLastStack(); + if (!stackElement) { + return; + } + DialogProperties dialogProperties; + const auto& baseDialog = DialogBuilder::Build(dialogProperties, context_); + baseDialog->SetTextDirection(dialog_->GetTextDirection()); + baseDialog->SetCustomChild(dialog_->GetChild()); + baseDialog->SetOnCancelId(dialog_->GetOnCancel()); + baseDialog->SetHeight(dialog_->GetHeight()); + baseDialog->SetWidth(dialog_->GetWidth()); + if (dialog_->IsSetMargin()) { + baseDialog->SetMargin(dialog_->GetMargin()); + } + animator_ = baseDialog->GetAnimator(); + stackElement->PushDialog(baseDialog); + isPopDialog_ = false; +#if defined(WINDOWS_PLATFORM) || defined(MAC_PLATFORM) + baseDialog->SetCustomDialogId(StringUtils::StringToInt(GetId())); + auto mananger = context->GetAccessibilityManager(); + if (mananger) { + auto node = mananger->GetAccessibilityNodeById(StringUtils::StringToInt(GetId())); + mananger->ClearNodeRectInfo(node, isPopDialog_); + } +#endif +} + +void CustomDialogElement::CloseDialog() +{ + const auto context = context_.Upgrade(); + if (!context) { + return; + } + const auto& lastStack = context->GetLastStack(); + if (!lastStack) { + return; + } + auto animator = animator_.Upgrade(); + if (animator) { + animator->AddStopListener([weakStack = AceType::WeakClaim(AceType::RawPtr(lastStack))] { + auto lastStack = weakStack.Upgrade(); + if (lastStack) { + lastStack->PopDialog(true); + } + }); + animator->Play(); + } else { + lastStack->PopDialog(true); + } + isPopDialog_ = true; +#if defined(WINDOWS_PLATFORM) || defined(MAC_PLATFORM) + auto manager = context->GetAccessibilityManager(); + if (manager) { + auto node = manager->GetAccessibilityNodeById(StringUtils::StringToInt(GetId())); + manager->ClearNodeRectInfo(node, isPopDialog_); + } +#endif +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/custom_dialog/custom_dialog_element.h b/frameworks/core/components/custom_dialog/custom_dialog_element.h new file mode 100644 index 00000000..2ab47648 --- /dev/null +++ b/frameworks/core/components/custom_dialog/custom_dialog_element.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CUSTOM_DIALOG_CUSTOM_DIALOG_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CUSTOM_DIALOG_CUSTOM_DIALOG_ELEMENT_H + +#include "core/animation/animator.h" +#include "core/components/custom_dialog/custom_dialog_component.h" +#include "core/pipeline/base/composed_element.h" + +namespace OHOS::Ace { + +class CustomDialogElement : public ComposedElement { + DECLARE_ACE_TYPE(CustomDialogElement, ComposedElement); + +public: + explicit CustomDialogElement(const ComposeId& id) : ComposedElement(id) {}; + ~CustomDialogElement() override = default; + + void PerformBuild() override; + +private: + void ShowDialog(); + void CloseDialog(); + + RefPtr dialog_; + WeakPtr animator_; + // used for inspector node in PC preview + bool isPopDialog_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CUSTOM_DIALOG_CUSTOM_DIALOG_ELEMENT_H diff --git a/frameworks/core/components/custom_paint/BUILD.gn b/frameworks/core/components/custom_paint/BUILD.gn new file mode 100644 index 00000000..8cbca6af --- /dev/null +++ b/frameworks/core/components/custom_paint/BUILD.gn @@ -0,0 +1,22 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("custom_paint") { + sources = [ + "custom_paint_component.cpp", + "flutter_render_custom_paint.cpp", + "render_custom_paint.cpp", + ] +} diff --git a/frameworks/core/components/custom_paint/custom_paint_component.cpp b/frameworks/core/components/custom_paint/custom_paint_component.cpp new file mode 100644 index 00000000..682335d7 --- /dev/null +++ b/frameworks/core/components/custom_paint/custom_paint_component.cpp @@ -0,0 +1,438 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/custom_paint/custom_paint_component.h" + +#include "core/components/custom_paint/custom_paint_element.h" +#include "core/components/custom_paint/render_custom_paint.h" + +namespace OHOS::Ace { + +RefPtr CustomPaintComponent::CreateRenderNode() +{ + return RenderCustomPaint::Create(); +} + +RefPtr CustomPaintComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +void CanvasTaskPool::SetRenderNode(const WeakPtr& paint) +{ + renderNode_ = paint; +} + +std::string CanvasTaskPool::ToDataURL(const std::string& args) +{ + auto paint = renderNode_.Upgrade(); + if (!paint) { + return args; + } + if (paint->HasTask()) { + paint->FlushPipelineImmediately(); + } + return paint->ToDataURL(args); +} + +void CanvasTaskPool::SetAntiAlias(bool isEnabled) +{ + auto task = [isEnabled](RenderCustomPaint& interface, const Offset&) { interface.SetAntiAlias(isEnabled); }; + PushTask(task); +} + +void CanvasTaskPool::FillRect(const Rect& rect) +{ + auto task = [rect](RenderCustomPaint& interface, const Offset& offset) { interface.FillRect(offset, rect); }; + PushTask(task); +} + +void CanvasTaskPool::StrokeRect(const Rect& rect) +{ + auto task = [rect](RenderCustomPaint& interface, const Offset& offset) { interface.StrokeRect(offset, rect); }; + PushTask(task); +} + +void CanvasTaskPool::ClearRect(const Rect& rect) +{ + auto task = [rect](RenderCustomPaint& interface, const Offset& offset) { interface.ClearRect(offset, rect); }; + PushTask(task); +} + +void CanvasTaskPool::FillText(const std::string& text, const Offset& textOffset) +{ + auto task = [text, textOffset](RenderCustomPaint& interface, const Offset& offset) { + interface.FillText(offset, text, textOffset.GetX(), textOffset.GetY()); + }; + PushTask(task); +} + +void CanvasTaskPool::StrokeText(const std::string& text, const Offset& textOffset) +{ + auto task = [text, textOffset](RenderCustomPaint& interface, const Offset& offset) { + interface.StrokeText(offset, text, textOffset.GetX(), textOffset.GetY()); + }; + PushTask(task); +} + +double CanvasTaskPool::MeasureText(const std::string& text, const PaintState& state) +{ + auto paint = renderNode_.Upgrade(); + if (!paint) { + return 0.0; + } + return paint->MeasureText(text, state); +} + +void CanvasTaskPool::MoveTo(double x, double y) +{ + auto task = [x, y](RenderCustomPaint& interface, const Offset& offset) { interface.MoveTo(offset, x, y); }; + PushTask(task); +} + +void CanvasTaskPool::LineTo(double x, double y) +{ + auto task = [x, y](RenderCustomPaint& interface, const Offset& offset) { interface.LineTo(offset, x, y); }; + PushTask(task); +} + +void CanvasTaskPool::BezierCurveTo(const BezierCurveParam& param) +{ + auto task = [param](RenderCustomPaint& interface, const Offset& offset) { interface.BezierCurveTo(offset, param); }; + PushTask(task); +} + +void CanvasTaskPool::QuadraticCurveTo(const QuadraticCurveParam& param) +{ + auto task = [param]( + RenderCustomPaint& interface, const Offset& offset) { interface.QuadraticCurveTo(offset, param); }; + PushTask(task); +} + +void CanvasTaskPool::Arc(const ArcParam& param) +{ + auto task = [param](RenderCustomPaint& interface, const Offset& offset) { interface.Arc(offset, param); }; + PushTask(task); +} + +void CanvasTaskPool::AddRect(const Rect& rect) +{ + auto task = [rect](RenderCustomPaint& interface, const Offset& offset) { interface.AddRect(offset, rect); }; + PushTask(task); +} + +void CanvasTaskPool::ArcTo(const OHOS::Ace::ArcToParam& param) +{ + auto task = [param](RenderCustomPaint& interface, const Offset& offset) { interface.ArcTo(offset, param); }; + PushTask(task); +} + +void CanvasTaskPool::Ellipse(const OHOS::Ace::EllipseParam& param) +{ + auto task = [param](RenderCustomPaint& interface, const Offset& offset) { interface.Ellipse(offset, param); }; + PushTask(task); +} + +void CanvasTaskPool::Fill() +{ + auto task = [](RenderCustomPaint& interface, const Offset& offset) { interface.Fill(offset); }; + PushTask(task); +} + +void CanvasTaskPool::Stroke() +{ + auto task = [](RenderCustomPaint& interface, const Offset& offset) { interface.Stroke(offset); }; + PushTask(task); +} + +void CanvasTaskPool::Stroke(const RefPtr& path) +{ + auto task = [path](RenderCustomPaint& interface, const Offset& offset) { interface.Stroke(offset, path); }; + PushTask(task); +} + +void CanvasTaskPool::Clip() +{ + auto task = [](RenderCustomPaint& interface, const Offset& offset) { interface.Clip(); }; + PushTask(task); +} + +void CanvasTaskPool::BeginPath() +{ + auto task = [](RenderCustomPaint& interface, const Offset& offset) { interface.BeginPath(); }; + PushTask(task); +} + +void CanvasTaskPool::ClosePath() +{ + auto task = [](RenderCustomPaint& interface, const Offset& offset) { interface.ClosePath(); }; + PushTask(task); +} + +void CanvasTaskPool::Save() +{ + auto task = [](RenderCustomPaint& interface, const Offset& offset) { interface.Save(); }; + PushTask(task); +} + +void CanvasTaskPool::Restore() +{ + auto task = [](RenderCustomPaint& interface, const Offset& offset) { interface.Restore(); }; + PushTask(task); +} + +void CanvasTaskPool::Rotate(double angle) +{ + auto task = [angle](RenderCustomPaint& interface, const Offset& offset) { interface.Rotate(angle); }; + PushTask(task); +} + +void CanvasTaskPool::Scale(double x, double y) +{ + auto task = [x, y](RenderCustomPaint& interface, const Offset& offset) { interface.Scale(x, y); }; + PushTask(task); +} + +void CanvasTaskPool::SetTransform(const TransformParam& param) +{ + auto task = [param](RenderCustomPaint& interface, const Offset& offset) { interface.SetTransform(param); }; + PushTask(task); +} + +void CanvasTaskPool::Transform(const TransformParam& param) +{ + auto task = [param](RenderCustomPaint& interface, const Offset& offset) { interface.Transform(param); }; + PushTask(task); +} + +void CanvasTaskPool::Translate(double x, double y) +{ + auto task = [x, y](RenderCustomPaint& interface, const Offset& offset) { interface.Translate(x, y); }; + PushTask(task); +} + +void CanvasTaskPool::DrawImage(const CanvasImage& image, double width, double height) +{ + auto task = [image, width, height](RenderCustomPaint& interface, const Offset& offset) { + interface.DrawImage(offset, image, width, height); + }; + PushTask(task); +} + +void CanvasTaskPool::PutImageData(const ImageData& imageData) +{ + auto task = [imageData]( + RenderCustomPaint& interface, const Offset& offset) { interface.PutImageData(offset, imageData); }; + PushTask(task); +} + +std::unique_ptr CanvasTaskPool::GetImageData(double left, double top, double width, double height) +{ + auto paint = renderNode_.Upgrade(); + if (!paint) { + std::unique_ptr data = std::make_unique(); + data->dirtyWidth = width; + data->dirtyHeight = height; + return data; + } + if (paint->HasTask()) { + paint->FlushPipelineImmediately(); + } + return paint->GetImageData(left, top, width, height); +} + +void CanvasTaskPool::UpdateFillColor(const Color& color) +{ + auto task = [color](RenderCustomPaint& interface, const Offset& offset) { + interface.SetFillColor(color); + interface.SetFillPattern(Pattern()); + interface.SetFillGradient(Gradient()); + }; + PushTask(task); +} + +void CanvasTaskPool::UpdateStrokeColor(const Color& color) +{ + auto task = [color](RenderCustomPaint& interface, const Offset& offset) { + interface.SetStrokeColor(color); + interface.SetStrokePattern(Pattern()); + interface.SetStrokeGradient(Gradient()); + }; + PushTask(task); +} + +void CanvasTaskPool::UpdateFillGradient(const Gradient& gradient) +{ + auto task = [gradient](RenderCustomPaint& interface, const Offset& offset) { + interface.SetFillGradient(gradient); + interface.SetFillColor(Color()); + interface.SetFillPattern(Pattern()); + }; + PushTask(task); +} + +void CanvasTaskPool::UpdateStrokeGradient(const Gradient& grad) +{ + auto task = [grad](RenderCustomPaint& interface, const Offset& offset) { + interface.SetStrokeGradient(grad); + interface.SetStrokeColor(Color()); + interface.SetStrokePattern(Pattern()); + }; + PushTask(task); +} + +void CanvasTaskPool::UpdateFillPattern(const Pattern& pattern) +{ + auto task = [pattern](RenderCustomPaint& interface, const Offset& offset) { + interface.SetFillPattern(pattern); + interface.SetFillGradient(Gradient()); + interface.SetFillColor(Color()); + }; + PushTask(task); +} + +void CanvasTaskPool::UpdateStrokePattern(const Pattern& pattern) +{ + auto task = [pattern](RenderCustomPaint& interface, const Offset& offset) { + interface.SetStrokePattern(pattern); + interface.SetStrokeGradient(Gradient()); + interface.SetStrokeColor(Color()); + }; + PushTask(task); +} + +void CanvasTaskPool::UpdateLineWidth(double width) +{ + auto task = [width](RenderCustomPaint& interface, const Offset& offset) { interface.SetLineWidth(width); }; + PushTask(task); +} + +void CanvasTaskPool::UpdateLineCap(LineCapStyle cap) +{ + auto task = [cap](RenderCustomPaint& interface, const Offset& offset) { interface.SetLineCap(cap); }; + PushTask(task); +} + +void CanvasTaskPool::UpdateLineJoin(LineJoinStyle join) +{ + auto task = [join](RenderCustomPaint& interface, const Offset& offset) { interface.SetLineJoin(join); }; + PushTask(task); +} + +void CanvasTaskPool::UpdateMiterLimit(double limit) +{ + auto task = [limit](RenderCustomPaint& interface, const Offset& offset) { interface.SetMiterLimit(limit); }; + PushTask(task); +} + +void CanvasTaskPool::UpdateTextBaseline(TextBaseline baseline) +{ + auto task = [baseline](RenderCustomPaint& interface, const Offset& offset) { interface.SetTextBaseline(baseline); }; + PushTask(task); +} + +void CanvasTaskPool::UpdateTextAlign(TextAlign align) +{ + auto task = [align](RenderCustomPaint& interface, const Offset& offset) { interface.SetTextAlign(align); }; + PushTask(task); +} + +void CanvasTaskPool::UpdateFontSize(const Dimension& size) +{ + auto task = [size](RenderCustomPaint& interface, const Offset& offset) { interface.SetFontSize(size); }; + PushTask(task); +} + +void CanvasTaskPool::UpdateFontFamilies(const std::vector& families) +{ + auto task = [families](RenderCustomPaint& interface, const Offset& offset) { interface.SetFontFamilies(families); }; + PushTask(task); +} + +void CanvasTaskPool::UpdateFontWeight(FontWeight weight) +{ + auto task = [weight](RenderCustomPaint& interface, const Offset& offset) { interface.SetFontWeight(weight); }; + PushTask(task); +} + +void CanvasTaskPool::UpdateFontStyle(FontStyle style) +{ + auto task = [style](RenderCustomPaint& interface, const Offset& offset) { interface.SetFontStyle(style); }; + PushTask(task); +} + +void CanvasTaskPool::UpdateGlobalAlpha(double alpha) +{ + auto task = [alpha](RenderCustomPaint& interface, const Offset& offset) { interface.SetAlpha(alpha); }; + PushTask(task); +} + +void CanvasTaskPool::UpdateLineDashOffset(double dash) +{ + auto task = [dash](RenderCustomPaint& interface, const Offset& offset) { interface.SetLineDashOffset(dash); }; + PushTask(task); +} + +void CanvasTaskPool::UpdateLineDash(const std::vector& segments) +{ + auto task = [segments](RenderCustomPaint& interface, const Offset& offset) { interface.SetLineDash(segments); }; + PushTask(task); +} + +void CanvasTaskPool::UpdateShadowBlur(double blur) +{ + auto task = [blur](RenderCustomPaint& interface, const Offset& offset) { interface.SetShadowBlur(blur); }; + PushTask(task); +} + +void CanvasTaskPool::UpdateShadowColor(const Color& color) +{ + auto task = [color](RenderCustomPaint& interface, const Offset& offset) { interface.SetShadowColor(color); }; + PushTask(task); +} + +void CanvasTaskPool::UpdateShadowOffsetX(double offsetX) +{ + auto task = [offsetX](RenderCustomPaint& interface, const Offset& offset) { interface.SetShadowOffsetX(offsetX); }; + PushTask(task); +} + +void CanvasTaskPool::UpdateShadowOffsetY(double offsetY) +{ + auto task = [offsetY](RenderCustomPaint& interface, const Offset& offset) { interface.SetShadowOffsetY(offsetY); }; + PushTask(task); +} + +void CanvasTaskPool::UpdateCompositeOperation(CompositeOperation type) +{ + auto task = [type](RenderCustomPaint& interface, const Offset& offset) { interface.SetCompositeType(type); }; + PushTask(task); +} + +void CanvasTaskPool::UpdateSmoothingEnabled(bool enabled) +{ + auto task = + [enabled](RenderCustomPaint& interface, const Offset& offset) { interface.SetSmoothingEnabled(enabled); }; + PushTask(task); +} + +void CanvasTaskPool::UpdateSmoothingQuality(const std::string& quality) +{ + auto task = + [quality](RenderCustomPaint& interface, const Offset& offset) { interface.SetSmoothingQuality(quality); }; + PushTask(task); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/custom_paint/custom_paint_component.h b/frameworks/core/components/custom_paint/custom_paint_component.h new file mode 100644 index 00000000..8287abad --- /dev/null +++ b/frameworks/core/components/custom_paint/custom_paint_component.h @@ -0,0 +1,180 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CUSTOM_PAINT_CUSTOM_PAINT_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CUSTOM_PAINT_CUSTOM_PAINT_COMPONENT_H + +#include +#include + +#include "base/geometry/dimension.h" +#include "base/geometry/rect.h" +#include "base/utils/macros.h" +#include "core/components/common/properties/paint_state.h" +#include "core/pipeline/base/render_component.h" +#include "core/pipeline/base/render_context.h" + +namespace OHOS::Ace { + +class RenderCustomPaint; + +using TaskFunc = std::function; +using PushTaskFunc = std::function; + +class ACE_EXPORT CanvasTaskPool : virtual public AceType { + DECLARE_ACE_TYPE(CanvasTaskPool, AceType); + +public: + void PushTask(const TaskFunc& task) + { + if (pushToRenderNodeFunc_) { + pushToRenderNodeFunc_(task); + } else { + tasks_.emplace_back(task); + } + } + + void SetPushToRenderNodeFunc(const PushTaskFunc& pushTaskFunc) + { + pushToRenderNodeFunc_ = pushTaskFunc; + } + + const std::list& GetTasks() const + { + return tasks_; + } + + void ClearTasks() + { + tasks_.clear(); + } + + void SetRenderNode(const WeakPtr& paint); + std::string ToDataURL(const std::string& args); + void SetAntiAlias(bool isEnabled); + void FillRect(const Rect& rect); + void StrokeRect(const Rect& rect); + void ClearRect(const Rect& rect); + void FillText(const std::string& text, const Offset& textOffset); + void StrokeText(const std::string& text, const Offset& textOffset); + double MeasureText(const std::string& text, const PaintState& state); + void MoveTo(double x, double y); + void LineTo(double x, double y); + void BezierCurveTo(const BezierCurveParam& param); + void QuadraticCurveTo(const QuadraticCurveParam& param); + void Arc(const ArcParam& param); + void AddRect(const Rect& rect); + void ArcTo(const ArcToParam& param); + void Ellipse(const EllipseParam& param); + void Fill(); + void Stroke(); + void Stroke(const RefPtr& path); + void Clip(); + void BeginPath(); + void ClosePath(); + void Restore(); + void Save(); + void Rotate(double angle); + void Scale(double x, double y); + void SetTransform(const TransformParam& param); + void Transform(const TransformParam& param); + void Translate(double x, double y); + void DrawImage(const CanvasImage& image, double width, double height); + void PutImageData(const ImageData& imageData); + std::unique_ptr GetImageData(double left, double top, double width, double height); + + void UpdateFillColor(const Color& color); + void UpdateStrokeColor(const Color& color); + void UpdateFillGradient(const Gradient& gradient); + void UpdateFillPattern(const Pattern& pattern); + void UpdateStrokeGradient(const Gradient& gradient); + void UpdateStrokePattern(const Pattern& pattern); + void UpdateLineWidth(double width); + void UpdateLineCap(LineCapStyle cap); + void UpdateLineJoin(LineJoinStyle join); + void UpdateMiterLimit(double miterLimit); + void UpdateTextBaseline(TextBaseline baseline); + void UpdateTextAlign(TextAlign align); + void UpdateFontSize(const Dimension& size); + void UpdateFontFamilies(const std::vector& fontFamilies); + void UpdateFontWeight(FontWeight weight); + void UpdateFontStyle(FontStyle style); + void UpdateGlobalAlpha(double alpha); + void UpdateLineDashOffset(double offset); + void UpdateLineDash(const std::vector& segments); + void UpdateShadowBlur(double blur); + void UpdateShadowColor(const Color& color); + void UpdateShadowOffsetX(double offsetX); + void UpdateShadowOffsetY(double offsetY); + void UpdateCompositeOperation(CompositeOperation type); + void UpdateSmoothingEnabled(bool enabled); + void UpdateSmoothingQuality(const std::string& quality); + +private: + PushTaskFunc pushToRenderNodeFunc_; + std::list tasks_; + WeakPtr renderNode_; +}; + +class ACE_EXPORT CustomPaintComponent : public RenderComponent { + DECLARE_ACE_TYPE(CustomPaintComponent, RenderComponent); + +public: + CustomPaintComponent() : RenderComponent() + { + pool_ = AceType::MakeRefPtr(); + } + + ~CustomPaintComponent() override = default; + + RefPtr CreateElement() override; + + RefPtr CreateRenderNode() override; + + const Dimension& GetWidth() const + { + return width_; + } + + void SetWidth(const Dimension& width) + { + width_ = width; + } + + const Dimension& GetHeight() const + { + return height_; + } + + void SetHeight(const Dimension& height) + { + height_ = height; + } + + const RefPtr& GetTaskPool() const + { + return pool_; + } + +private: + Dimension width_; + Dimension height_; + + RefPtr pool_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CUSTOM_PAINT_CUSTOM_PAINT_COMPONENT_H diff --git a/frameworks/core/components/custom_paint/custom_paint_element.h b/frameworks/core/components/custom_paint/custom_paint_element.h new file mode 100644 index 00000000..2e9fd1b2 --- /dev/null +++ b/frameworks/core/components/custom_paint/custom_paint_element.h @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CUSTOM_PAINT_CUSTOM_PAINT_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CUSTOM_PAINT_CUSTOM_PAINT_ELEMENT_H + +#include "core/components/custom_paint/render_custom_paint.h" +#include "core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +class CustomPaintElement : public RenderElement { + DECLARE_ACE_TYPE(CustomPaintElement, RenderElement); + +public: + CustomPaintElement() = default; + ~CustomPaintElement() override = default; + + void Update() override + { + std::list tasks; + auto paint = AceType::DynamicCast(renderNode_); + if (paint && paint->HasTask()) { + tasks = paint->GetTasks(); + } + customComponent_ = component_; + RenderElement::Update(); + if (paint) { + paint->SetTasks(tasks); + } + } + + bool CanUpdate(const RefPtr& newComponent) override + { + return (newComponent == customComponent_) && Element::CanUpdate(newComponent); + } + +private: + WeakPtr customComponent_; +}; +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CUSTOM_PAINT_CUSTOM_PAINT_ELEMENT_H diff --git a/frameworks/core/components/custom_paint/flutter_render_custom_paint.cpp b/frameworks/core/components/custom_paint/flutter_render_custom_paint.cpp new file mode 100644 index 00000000..f05b21e0 --- /dev/null +++ b/frameworks/core/components/custom_paint/flutter_render_custom_paint.cpp @@ -0,0 +1,1263 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/custom_paint/flutter_render_custom_paint.h" + +#include + +#include "flutter/lib/ui/text/font_collection.h" +#include "flutter/third_party/txt/src/txt/paragraph_builder.h" +#include "flutter/third_party/txt/src/txt/paragraph_style.h" +#include "third_party/skia/include/core/SkBlendMode.h" +#include "third_party/skia/include/core/SkCanvas.h" +#include "third_party/skia/include/core/SkColor.h" +#include "third_party/skia/include/core/SkMaskFilter.h" +#include "third_party/skia/include/core/SkPoint.h" +#include "third_party/skia/include/effects/SkDashPathEffect.h" +#include "third_party/skia/include/effects/SkGradientShader.h" +#include "third_party/skia/include/encode/SkJpegEncoder.h" +#include "third_party/skia/include/encode/SkPngEncoder.h" +#include "third_party/skia/include/encode/SkWebpEncoder.h" +#include "third_party/skia/include/utils/SkBase64.h" +#include "third_party/skia/include/utils/SkParsePath.h" + +#include "base/i18n/localization.h" +#include "base/json/json_util.h" +#include "base/utils/linear_map.h" +#include "base/utils/string_utils.h" +#include "base/utils/utils.h" +#include "core/components/calendar/flutter_render_calendar.h" +#include "core/components/common/painter/flutter_decoration_painter.h" +#include "core/components/font/constants_converter.h" +#include "core/components/font/flutter_font_collection.h" +#include "core/image/image_provider.h" +#include "core/pipeline/base/flutter_render_context.h" + +namespace OHOS::Ace { +namespace { + +constexpr double HANGING_PERCENT = 0.8; +constexpr double HALF_CIRCLE_ANGLE = 180.0; +constexpr double FULL_CIRCLE_ANGLE = 360.0; + +constexpr double DEFAULT_QUALITY = 0.92; +constexpr int32_t MAX_LENGTH = 2048 * 2048; +const std::string UNSUPPORTED = "data:image/png"; +const std::string URL_PREFIX = "data:"; +const std::string URL_SYMBOL = ";base64,"; +const std::string IMAGE_PNG = "image/png"; +const std::string IMAGE_JPEG = "image/jpeg"; +const std::string IMAGE_WEBP = "image/webp"; + +// If args is empty or invalid format, use default: image/png +std::string GetMimeType(const std::string& args) +{ + // Args example: ["image/png"] + std::vector values; + StringUtils::StringSpliter(args, '"', values); + if (values.size() < 3) { + return IMAGE_PNG; + } else { + // Convert to lowercase string. + for (size_t i = 0; i < values[1].size(); ++i) { + values[1][i] = tolower(values[1][i]); + } + return values[1]; + } +} + +// Quality need between 0.0 and 1.0 for MimeType jpeg and webp +double GetQuality(const std::string& args) +{ + // Args example: ["image/jpeg", 0.8] + std::vector values; + StringUtils::StringSpliter(args, ',', values); + if (values.size() < 2) { + return DEFAULT_QUALITY; + } + auto mimeType = GetMimeType(args); + if (mimeType != IMAGE_JPEG && mimeType != IMAGE_WEBP) { + return DEFAULT_QUALITY; + } + double quality = StringUtils::StringToDouble(values[1]); + if (quality < 0.0 || quality > 1.0) { + return DEFAULT_QUALITY; + } + return quality; +} + +template +N ConvertEnumToSkEnum(T key, const LinearEnumMapNode* map, size_t length, N defaultValue) +{ + int64_t index = BinarySearchFindIndex(map, length, key); + return index != -1 ? map[index].value : defaultValue; +} + +const LinearEnumMapNode SK_BLEND_MODE_TABLE[] = { + { CompositeOperation::SOURCE_OVER, SkBlendMode::kSrcOver }, + { CompositeOperation::SOURCE_ATOP, SkBlendMode::kSrcATop }, + { CompositeOperation::SOURCE_IN, SkBlendMode::kSrcIn }, + { CompositeOperation::SOURCE_OUT, SkBlendMode::kSrcOut }, + { CompositeOperation::DESTINATION_OVER, SkBlendMode::kDstOver }, + { CompositeOperation::DESTINATION_ATOP, SkBlendMode::kDstATop }, + { CompositeOperation::DESTINATION_IN, SkBlendMode::kDstIn }, + { CompositeOperation::DESTINATION_OUT, SkBlendMode::kDstOut }, + { CompositeOperation::LIGHTER, SkBlendMode::kLighten }, + { CompositeOperation::COPY, SkBlendMode::kSrc }, + { CompositeOperation::XOR, SkBlendMode::kXor }, +}; +constexpr size_t BLEND_MODE_SIZE = ArraySize(SK_BLEND_MODE_TABLE); + +} // namespace + +RefPtr RenderCustomPaint::Create() +{ + return AceType::MakeRefPtr(); +} + +RenderLayer FlutterRenderCustomPaint::GetRenderLayer() +{ + if (!layer_) { + layer_ = AceType::MakeRefPtr( + 0, GetLayoutSize().Width(), 0, GetLayoutSize().Height(), Flutter::Clip::HARD_EDGE); + } + return AceType::RawPtr(layer_); +} + +void FlutterRenderCustomPaint::Paint(RenderContext& context, const Offset& offset) +{ + auto canvas = ScopedCanvas::Create(context); + if (!canvas) { + return; + } + auto pipeline = context_.Upgrade(); + if (!pipeline) { + return; + } + // use physical pixel to store bitmap + double viewScale = pipeline->GetViewScale(); + if (tasks_.empty()) { + if (canvasCache_.readyToDraw()) { + canvas->canvas()->scale(1.0 / viewScale, 1.0 / viewScale); + canvas->canvas()->drawBitmap(canvasCache_, 0.0f, 0.0f); + } + return; + } + if (!canvasCache_.readyToDraw()) { + auto imageInfo = SkImageInfo::Make(GetLayoutSize().Width() * viewScale, GetLayoutSize().Height() * viewScale, + SkColorType::kRGBA_8888_SkColorType, SkAlphaType::kOpaque_SkAlphaType); + canvasCache_.allocPixels(imageInfo); + cacheBitmap_.allocPixels(imageInfo); +#ifdef USE_SYSTEM_SKIA + canvasCache_.eraseColor(SK_ColorTRANSPARENT); + cacheBitmap_.eraseColor(SK_ColorTRANSPARENT); +#endif + skCanvas_ = std::make_unique(canvasCache_); + cacheCanvas_ = std::make_unique(cacheBitmap_); + } + skCanvas_->scale(viewScale, viewScale); + // paint tasks + for (const auto& task : tasks_) { + task(*this, offset); + } + canvas->canvas()->scale(1.0 / viewScale, 1.0 / viewScale); + canvas->canvas()->drawBitmap(canvasCache_, 0.0f, 0.0f); + skCanvas_->scale(1.0 / viewScale, 1.0 / viewScale); + tasks_.clear(); +} + +SkPaint FlutterRenderCustomPaint::GetStrokePaint() +{ + static const LinearEnumMapNode skLineJoinTable[] = { + { LineJoinStyle::MITER, SkPaint::Join::kMiter_Join }, + { LineJoinStyle::ROUND, SkPaint::Join::kRound_Join }, + { LineJoinStyle::BEVEL, SkPaint::Join::kBevel_Join }, + }; + static const LinearEnumMapNode skLineCapTable[] = { + { LineCapStyle::BUTT, SkPaint::Cap::kButt_Cap }, + { LineCapStyle::ROUND, SkPaint::Cap::kRound_Cap }, + { LineCapStyle::SQUARE, SkPaint::Cap::kSquare_Cap }, + }; + SkPaint paint; + paint.setColor(strokeState_.GetColor().GetValue()); + paint.setStyle(SkPaint::Style::kStroke_Style); + paint.setStrokeJoin(ConvertEnumToSkEnum( + strokeState_.GetLineJoin(), skLineJoinTable, ArraySize(skLineJoinTable), SkPaint::Join::kMiter_Join)); + paint.setStrokeCap(ConvertEnumToSkEnum( + strokeState_.GetLineCap(), skLineCapTable, ArraySize(skLineCapTable), SkPaint::Cap::kButt_Cap)); + paint.setStrokeWidth(static_cast(strokeState_.GetLineWidth())); + paint.setStrokeMiter(static_cast(strokeState_.GetMiterLimit())); + + // set line Dash + UpdateLineDash(paint); + + // set global alpha + if (globalState_.HasGlobalAlpha()) { + paint.setAlphaf(globalState_.GetAlpha()); + } + return paint; +} + +std::string FlutterRenderCustomPaint::ToDataURL(const std::string& args) +{ + std::string mimeType = GetMimeType(args); + double quality = GetQuality(args); + double width = GetLayoutSize().Width(); + double height = GetLayoutSize().Height(); + SkBitmap tempCache; + tempCache.allocPixels(SkImageInfo::Make(width, height, + SkColorType::kBGRA_8888_SkColorType, SkAlphaType::kOpaque_SkAlphaType)); + SkCanvas tempCanvas(tempCache); + auto rect = SkRect::MakeXYWH(0.0, 0.0, width, height); + tempCanvas.drawBitmapRect(canvasCache_, rect, rect, nullptr); + SkPixmap src; + bool success = tempCache.peekPixels(&src); + if (!success) { + LOGE("PeekPixels failed when ToDataURL."); + return UNSUPPORTED; + } + SkDynamicMemoryWStream dst; + if (mimeType == IMAGE_JPEG) { + SkJpegEncoder::Options options; + options.fQuality = quality; + success = SkJpegEncoder::Encode(&dst, src, options); + } else if (mimeType == IMAGE_WEBP) { + SkWebpEncoder::Options options; + options.fQuality = quality * 100.0; + success = SkWebpEncoder::Encode(&dst, src, options); + } else { + mimeType = IMAGE_PNG; + SkPngEncoder::Options options; + success = SkPngEncoder::Encode(&dst, src, options); + } + if (!success) { + LOGE("Encode failed when ToDataURL."); + return UNSUPPORTED; + } + auto result = dst.detachAsData(); + if (result == nullptr) { + LOGE("DetachAsData failed when ToDataURL."); + return UNSUPPORTED; + } + size_t len = SkBase64::Encode(result->data(), result->size(), nullptr); + if (len > MAX_LENGTH) { + LOGE("ToDataURL failed, image too large."); + return UNSUPPORTED; + } + SkString info(len); + SkBase64::Encode(result->data(), result->size(), info.writable_str()); + return std::string(URL_PREFIX).append(mimeType).append(URL_SYMBOL).append(info.c_str()); +} + +void FlutterRenderCustomPaint::SetAntiAlias(bool isEnabled) +{ + antiAlias_ = isEnabled; +} + +void FlutterRenderCustomPaint::FillRect(const Offset& offset, const Rect& rect) +{ + SkPaint paint; + paint.setAntiAlias(antiAlias_); + paint.setColor(fillState_.GetColor().GetValue()); + paint.setStyle(SkPaint::Style::kFill_Style); + SkRect skRect = SkRect::MakeLTRB(rect.Left() + offset.GetX(), rect.Top() + offset.GetY(), + rect.Right() + offset.GetX(), offset.GetY() + rect.Bottom()); + if (HasShadow()) { + SkPath path; + path.addRect(skRect); + FlutterDecorationPainter::PaintShadow(path, shadow_, skCanvas_.get()); + } + if (fillState_.GetGradient().IsValid()) { + UpdatePaintShader(offset, paint, fillState_.GetGradient()); + } + if (fillState_.GetPattern().IsValid()) { + UpdatePaintShader(fillState_.GetPattern(), paint); + } + if (globalState_.HasGlobalAlpha()) { + paint.setAlphaf(globalState_.GetAlpha()); // update the global alpha after setting the color + } + if (globalState_.GetType() == CompositeOperation::SOURCE_OVER) { + skCanvas_->drawRect(skRect, paint); + } else { + InitCachePaint(); + cacheCanvas_->drawRect(skRect, paint); + skCanvas_->drawBitmap(cacheBitmap_, 0, 0, &cachePaint_); + cacheBitmap_.eraseColor(0); + } +} + +void FlutterRenderCustomPaint::StrokeRect(const Offset& offset, const Rect& rect) +{ + SkPaint paint = GetStrokePaint(); + paint.setAntiAlias(antiAlias_); + SkRect skRect = SkRect::MakeLTRB(rect.Left() + offset.GetX(), rect.Top() + offset.GetY(), + rect.Right() + offset.GetX(), offset.GetY() + rect.Bottom()); + if (HasShadow()) { + SkPath path; + path.addRect(skRect); + FlutterDecorationPainter::PaintShadow(path, shadow_, skCanvas_.get()); + } + if (strokeState_.GetGradient().IsValid()) { + UpdatePaintShader(offset, paint, strokeState_.GetGradient()); + } + if (strokeState_.GetPattern().IsValid()) { + UpdatePaintShader(strokeState_.GetPattern(), paint); + } + if (globalState_.GetType() == CompositeOperation::SOURCE_OVER) { + skCanvas_->drawRect(skRect, paint); + } else { + InitCachePaint(); + cacheCanvas_->drawRect(skRect, paint); + skCanvas_->drawBitmap(cacheBitmap_, 0, 0, &cachePaint_); + cacheBitmap_.eraseColor(0); + } +} + +void FlutterRenderCustomPaint::ClearRect(const Offset& offset, const Rect& rect) +{ + SkPaint paint; + paint.setAntiAlias(antiAlias_); + paint.setBlendMode(SkBlendMode::kClear); + auto skRect = SkRect::MakeLTRB(rect.Left() + offset.GetX(), rect.Top() + offset.GetY(), + rect.Right() + offset.GetX(), rect.Bottom() + offset.GetY()); + skCanvas_->drawRect(skRect, paint); +} + +void FlutterRenderCustomPaint::FillText(const Offset& offset, const std::string& text, double x, double y) +{ + if (!UpdateParagraph(offset, text, false)) { + return; + } + PaintText(offset, x, y, false); +} + +void FlutterRenderCustomPaint::StrokeText(const Offset& offset, const std::string& text, double x, double y) +{ + if (HasShadow()) { + if (!UpdateParagraph(offset, text, true, true)) { + return; + } + PaintText(offset, x, y, true); + } + + if (!UpdateParagraph(offset, text, true)) { + return; + } + PaintText(offset, x, y, true); +} + +double FlutterRenderCustomPaint::MeasureText(const std::string& text, const PaintState& state) +{ + using namespace Constants; + txt::ParagraphStyle style; + style.text_align = ConvertTxtTextAlign(state.GetTextAlign()); + auto fontCollection = FlutterFontCollection::GetInstance().GetFontCollection(); + if (!fontCollection) { + LOGW("MeasureText: fontCollection is null"); + return 0.0; + } + std::unique_ptr builder = txt::ParagraphBuilder::CreateTxtBuilder(style, fontCollection); + txt::TextStyle txtStyle; + ConvertTxtStyle(state.GetTextStyle(), context_, txtStyle); + txtStyle.font_size = state.GetTextStyle().GetFontSize().Value(); + builder->PushStyle(txtStyle); + builder->AddText(StringUtils::Str8ToStr16(text)); + auto paragraph = builder->Build(); + paragraph->Layout(Size::INFINITE_SIZE); + return paragraph->GetMaxIntrinsicWidth(); +} + +void FlutterRenderCustomPaint::PaintText(const Offset& offset, double x, double y, bool isStroke, bool hasShadow) +{ + paragraph_->Layout(GetLayoutSize().Width()); + if (GetLayoutSize().Width() > paragraph_->GetMaxIntrinsicWidth()) { + paragraph_->Layout(std::ceil(paragraph_->GetMaxIntrinsicWidth())); + } + auto align = isStroke ? strokeState_.GetTextAlign() : fillState_.GetTextAlign(); + double dx = offset.GetX() + x + GetAlignOffset(align); + auto baseline = + isStroke ? strokeState_.GetTextStyle().GetTextBaseline() : fillState_.GetTextStyle().GetTextBaseline(); + double dy = offset.GetY() + y + GetBaselineOffset(baseline); + + if (hasShadow) { + skCanvas_->save(); + auto shadowOffsetX = shadow_.GetOffset().GetX(); + auto shadowOffsetY = shadow_.GetOffset().GetY(); + paragraph_->Paint(skCanvas_.get(), dx + shadowOffsetX, dy + shadowOffsetY); + skCanvas_->restore(); + return; + } + + paragraph_->Paint(skCanvas_.get(), dx, dy); +} + +double FlutterRenderCustomPaint::GetAlignOffset(TextAlign align) +{ + double x = 0.0; + switch (align) { + case TextAlign::LEFT: + x = 0.0; + break; + case TextAlign::START: + x = (GetTextDirection() == TextDirection::LTR) ? 0.0 : -paragraph_->GetMaxIntrinsicWidth(); + break; + case TextAlign::RIGHT: + x = -paragraph_->GetMaxIntrinsicWidth(); + break; + case TextAlign::END: + x = (GetTextDirection() == TextDirection::LTR) ? -paragraph_->GetMaxIntrinsicWidth() : 0.0; + break; + case TextAlign::CENTER: + x = -paragraph_->GetMaxIntrinsicWidth() / 2; + break; + default: + x = 0.0; + break; + } + return x; +} + +double FlutterRenderCustomPaint::GetBaselineOffset(TextBaseline baseline) +{ + double y = 0.0; + switch (baseline) { + case TextBaseline::ALPHABETIC: + y = -paragraph_->GetAlphabeticBaseline(); + break; + case TextBaseline::IDEOGRAPHIC: + y = -paragraph_->GetIdeographicBaseline(); + break; + case TextBaseline::BOTTOM: + y = -paragraph_->GetHeight(); + break; + case TextBaseline::TOP: + y = 0.0; + break; + case TextBaseline::MIDDLE: + y = -paragraph_->GetHeight() / 2; + break; + case TextBaseline::HANGING: + y = -HANGING_PERCENT * (paragraph_->GetHeight() - paragraph_->GetAlphabeticBaseline()); + break; + default: + y = -paragraph_->GetAlphabeticBaseline(); + break; + } + return y; +} + +void FlutterRenderCustomPaint::MoveTo(const Offset& offset, double x, double y) +{ + skPath_.moveTo(SkDoubleToScalar(x + offset.GetX()), SkDoubleToScalar(y + offset.GetY())); +} + +void FlutterRenderCustomPaint::LineTo(const Offset& offset, double x, double y) +{ + skPath_.lineTo(SkDoubleToScalar(x + offset.GetX()), SkDoubleToScalar(y + offset.GetY())); +} + +void FlutterRenderCustomPaint::BezierCurveTo(const Offset& offset, const BezierCurveParam& param) +{ + skPath_.cubicTo(SkDoubleToScalar(param.cp1x + offset.GetX()), SkDoubleToScalar(param.cp1y + offset.GetY()), + SkDoubleToScalar(param.cp2x + offset.GetX()), SkDoubleToScalar(param.cp2y + offset.GetY()), + SkDoubleToScalar(param.x + offset.GetX()), SkDoubleToScalar(param.y + offset.GetY())); +} + +void FlutterRenderCustomPaint::QuadraticCurveTo(const Offset& offset, const QuadraticCurveParam& param) +{ + skPath_.quadTo(SkDoubleToScalar(param.cpx + offset.GetX()), SkDoubleToScalar(param.cpy + offset.GetY()), + SkDoubleToScalar(param.x + offset.GetX()), SkDoubleToScalar(param.y + offset.GetY())); +} + +void FlutterRenderCustomPaint::Arc(const Offset& offset, const ArcParam& param) +{ + double left = param.x - param.radius + offset.GetX(); + double top = param.y - param.radius + offset.GetY(); + double right = param.x + param.radius + offset.GetX(); + double bottom = param.y + param.radius + offset.GetY(); + double startAngle = param.startAngle * HALF_CIRCLE_ANGLE / M_PI; + double endAngle = param.endAngle * HALF_CIRCLE_ANGLE / M_PI; + double sweepAngle = endAngle - startAngle; + if (param.anticlockwise) { + sweepAngle = + endAngle > startAngle ? (std::fmod(sweepAngle, FULL_CIRCLE_ANGLE) - FULL_CIRCLE_ANGLE) : sweepAngle; + } else { + sweepAngle = + endAngle > startAngle ? sweepAngle : (std::fmod(sweepAngle, FULL_CIRCLE_ANGLE) + FULL_CIRCLE_ANGLE); + } + auto rect = SkRect::MakeLTRB(left, top, right, bottom); + if (NearEqual(std::fmod(sweepAngle, FULL_CIRCLE_ANGLE), 0.0) && !NearEqual(startAngle, endAngle)) { + // draw circle + double half = GreatNotEqual(sweepAngle, 0.0) ? HALF_CIRCLE_ANGLE : -HALF_CIRCLE_ANGLE; + skPath_.arcTo(rect, SkDoubleToScalar(startAngle), SkDoubleToScalar(half), false); + skPath_.arcTo(rect, SkDoubleToScalar(half + startAngle), SkDoubleToScalar(half), false); + } else { + skPath_.arcTo(rect, SkDoubleToScalar(startAngle), SkDoubleToScalar(sweepAngle), false); + } +} + +void FlutterRenderCustomPaint::ArcTo(const Offset& offset, const ArcToParam& param) +{ + double x1 = param.x1 + offset.GetX(); + double y1 = param.y1 + offset.GetY(); + double x2 = param.x2 + offset.GetX(); + double y2 = param.y2 + offset.GetY(); + double radius = param.radius; + skPath_.arcTo(SkDoubleToScalar(x1), SkDoubleToScalar(y1), SkDoubleToScalar(x2), SkDoubleToScalar(y2), + SkDoubleToScalar(radius)); +} + +void FlutterRenderCustomPaint::Ellipse(const Offset& offset, const EllipseParam& param) +{ + // Init the start and end angle, then calculated the sweepAngle. + double startAngle = std::fmod(param.startAngle, M_PI * 2.0); + double endAngle = std::fmod(param.endAngle, M_PI * 2.0); + startAngle = (startAngle < 0.0 ? startAngle + M_PI * 2.0 : startAngle) * HALF_CIRCLE_ANGLE / M_PI; + endAngle = (endAngle < 0.0 ? endAngle + M_PI * 2.0 : endAngle) * HALF_CIRCLE_ANGLE / M_PI; + if (NearEqual(param.startAngle, param.endAngle)) { + return; // Just return when startAngle is same as endAngle. + } + double rotation = param.rotation * HALF_CIRCLE_ANGLE / M_PI; + double sweepAngle = endAngle - startAngle; + if (param.anticlockwise) { + if (sweepAngle > 0.0) { // Make sure the sweepAngle is negative when anticlockwise. + sweepAngle -= FULL_CIRCLE_ANGLE; + } + } else { + if (sweepAngle < 0.0) { // Make sure the sweepAngle is positive when clockwise. + sweepAngle += FULL_CIRCLE_ANGLE; + } + } + + // Init the oval Rect(left, top, right, bottom). + double left = param.x - param.radiusX + offset.GetX(); + double top = param.y - param.radiusY + offset.GetY(); + double right = param.x + param.radiusX + offset.GetX(); + double bottom = param.y + param.radiusY + offset.GetY(); + auto rect = SkRect::MakeLTRB(left, top, right, bottom); + if (!NearZero(rotation)) { + SkMatrix matrix; + matrix.setRotate(-rotation, param.x + offset.GetX(), param.y + offset.GetY()); + skPath_.transform(matrix); + } + if (NearZero(sweepAngle) && !NearZero(param.endAngle - param.startAngle)) { + // The entire ellipse needs to be drawn with two arcTo. + skPath_.arcTo(rect, startAngle, HALF_CIRCLE_ANGLE, false); + skPath_.arcTo(rect, startAngle + HALF_CIRCLE_ANGLE, HALF_CIRCLE_ANGLE, false); + } else { + skPath_.arcTo(rect, startAngle, sweepAngle, false); + } + if (!NearZero(rotation)) { + SkMatrix matrix; + matrix.setRotate(rotation, param.x + offset.GetX(), param.y + offset.GetY()); + skPath_.transform(matrix); + } +} + +void FlutterRenderCustomPaint::AddRect(const Offset& offset, const Rect& rect) +{ + SkRect skRect = SkRect::MakeLTRB(rect.Left() + offset.GetX(), rect.Top() + offset.GetY(), + rect.Right() + offset.GetX(), offset.GetY() + rect.Bottom()); + skPath_.addRect(skRect); +} + +void FlutterRenderCustomPaint::Fill(const Offset& offset) +{ + SkPaint paint; + paint.setAntiAlias(antiAlias_); + paint.setColor(fillState_.GetColor().GetValue()); + paint.setStyle(SkPaint::Style::kFill_Style); + if (HasShadow()) { + FlutterDecorationPainter::PaintShadow(skPath_, shadow_, skCanvas_.get()); + } + if (fillState_.GetGradient().IsValid()) { + UpdatePaintShader(offset, paint, fillState_.GetGradient()); + } + if (fillState_.GetPattern().IsValid()) { + UpdatePaintShader(fillState_.GetPattern(), paint); + } + if (globalState_.HasGlobalAlpha()) { + paint.setAlphaf(globalState_.GetAlpha()); + } + if (globalState_.GetType() == CompositeOperation::SOURCE_OVER) { + skCanvas_->drawPath(skPath_, paint); + } else { + InitCachePaint(); + cacheCanvas_->drawPath(skPath_, paint); + skCanvas_->drawBitmap(cacheBitmap_, 0, 0, &cachePaint_); + cacheBitmap_.eraseColor(0); + } +} + +void FlutterRenderCustomPaint::Stroke(const Offset& offset) +{ + SkPaint paint = GetStrokePaint(); + paint.setAntiAlias(antiAlias_); + if (HasShadow()) { + FlutterDecorationPainter::PaintShadow(skPath_, shadow_, skCanvas_.get()); + } + if (strokeState_.GetGradient().IsValid()) { + UpdatePaintShader(offset, paint, strokeState_.GetGradient()); + } + if (strokeState_.GetPattern().IsValid()) { + UpdatePaintShader(strokeState_.GetPattern(), paint); + } + if (globalState_.GetType() == CompositeOperation::SOURCE_OVER) { + skCanvas_->drawPath(skPath_, paint); + } else { + InitCachePaint(); + cacheCanvas_->drawPath(skPath_, paint); + skCanvas_->drawBitmap(cacheBitmap_, 0, 0, &cachePaint_); + cacheBitmap_.eraseColor(0); + } +} + +void FlutterRenderCustomPaint::Stroke(const Offset& offset, const RefPtr& path) +{ + if (path == nullptr) { + LOGE("Stroke failed, target path is null."); + return; + } + for (const auto& [cmd, args] : path->GetCaches()) { + switch (cmd) { + case PathCmd::CMDS: { + Path2DAddPath(offset, args); + break; + } + case PathCmd::TRANSFORM: { + Path2DSetTransform(offset, args); + break; + } + case PathCmd::MOVE_TO: { + Path2DMoveTo(offset, args); + break; + } + case PathCmd::LINE_TO: { + Path2DLineTo(offset, args); + break; + } + case PathCmd::ARC: { + Path2DArc(offset, args); + break; + } + case PathCmd::ARC_TO: { + Path2DArcTo(offset, args); + break; + } + case PathCmd::QUADRATIC_CURVE_TO: { + Path2DQuadraticCurveTo(offset, args); + break; + } + case PathCmd::BEZIER_CURVE_TO: { + Path2DBezierCurveTo(offset, args); + break; + } + case PathCmd::ELLIPSE: { + Path2DEllipse(offset, args); + break; + } + case PathCmd::RECT: { + Path2DRect(offset, args); + break; + } + case PathCmd::CLOSE_PATH: { + Path2DClosePath(offset, args); + break; + } + default: { + break; + } + } + } + Path2DStroke(offset); +} + +void FlutterRenderCustomPaint::Path2DAddPath(const Offset& offset, const PathArgs& args) +{ + SkPath out; + SkParsePath::FromSVGString(args.cmds.c_str(), &out); + strokePath_.addPath(out); +} + +void FlutterRenderCustomPaint::Path2DSetTransform(const Offset& offset, const PathArgs& args) +{ + SkMatrix skMatrix; + double scaleX = args.para1; + double skewX = args.para2; + double skewY = args.para3; + double scaleY = args.para4; + double translateX = args.para5; + double translateY = args.para6; + skMatrix.setAll(scaleX, skewY, translateX, skewX, scaleY, translateY, 0, 0, 1); + strokePath_.transform(skMatrix); +} + +void FlutterRenderCustomPaint::Path2DMoveTo(const Offset& offset, const PathArgs& args) +{ + double x = args.para1 + offset.GetX(); + double y = args.para2 + offset.GetY(); + strokePath_.moveTo(x, y); +} + +void FlutterRenderCustomPaint::Path2DLineTo(const Offset& offset, const PathArgs& args) +{ + double x = args.para1 + offset.GetX(); + double y = args.para2 + offset.GetY(); + strokePath_.lineTo(x, y); +} + +void FlutterRenderCustomPaint::Path2DArc(const Offset& offset, const PathArgs& args) +{ + double x = args.para1; + double y = args.para2; + double r = args.para3; + auto rect = SkRect::MakeLTRB(x - r + offset.GetX(), y - r + offset.GetY(), + x + r + offset.GetX(), y + r + offset.GetY()); + double startAngle = args.para4 * HALF_CIRCLE_ANGLE / M_PI; + double endAngle = args.para5 * HALF_CIRCLE_ANGLE / M_PI; + double sweepAngle = endAngle - startAngle; + if (!NearZero(args.para6)) { + sweepAngle = endAngle > startAngle ? + (std::fmod(sweepAngle, FULL_CIRCLE_ANGLE) - FULL_CIRCLE_ANGLE) : sweepAngle; + } else { + sweepAngle = endAngle > startAngle ? + sweepAngle : (std::fmod(sweepAngle, FULL_CIRCLE_ANGLE) + FULL_CIRCLE_ANGLE); + } + if (NearEqual(std::fmod(sweepAngle, FULL_CIRCLE_ANGLE), 0.0) && !NearEqual(startAngle, endAngle)) { + strokePath_.arcTo(rect, startAngle, HALF_CIRCLE_ANGLE, false); + strokePath_.arcTo(rect, startAngle + HALF_CIRCLE_ANGLE, HALF_CIRCLE_ANGLE, false); + } else { + strokePath_.arcTo(rect, startAngle, sweepAngle, false); + } +} + +void FlutterRenderCustomPaint::Path2DArcTo(const Offset& offset, const PathArgs& args) +{ + double x1 = args.para1 + offset.GetX(); + double y1 = args.para2 + offset.GetY(); + double x2 = args.para3 + offset.GetX(); + double y2 = args.para4 + offset.GetY(); + double r = args.para5; + strokePath_.arcTo(x1, y1, x2, y2, r); +} + +void FlutterRenderCustomPaint::Path2DQuadraticCurveTo(const Offset& offset, const PathArgs& args) +{ + double cpx = args.para1 + offset.GetX(); + double cpy = args.para2 + offset.GetY(); + double x = args.para3 + offset.GetX(); + double y = args.para4 + offset.GetY(); + strokePath_.quadTo(cpx, cpy, x, y); +} + +void FlutterRenderCustomPaint::Path2DBezierCurveTo(const Offset& offset, const PathArgs& args) +{ + double cp1x = args.para1 + offset.GetX(); + double cp1y = args.para2 + offset.GetY(); + double cp2x = args.para3 + offset.GetX(); + double cp2y = args.para4 + offset.GetY(); + double x = args.para5 + offset.GetX(); + double y = args.para6 + offset.GetY(); + strokePath_.cubicTo(cp1x, cp1y, cp2x, cp2y, x, y); +} + +void FlutterRenderCustomPaint::Path2DEllipse(const Offset& offset, const PathArgs& args) +{ + if (NearEqual(args.para6, args.para7)) { + return; // Just return when startAngle is same as endAngle. + } + + double x = args.para1; + double y = args.para2; + double rx = args.para3; + double ry = args.para4; + double rotation = args.para5 * HALF_CIRCLE_ANGLE / M_PI; + double startAngle = std::fmod(args.para6, M_PI * 2.0); + double endAngle = std::fmod(args.para7, M_PI * 2.0); + bool anticlockwise = NearZero(args.para8) ? false : true; + startAngle = (startAngle < 0.0 ? startAngle + M_PI * 2.0 : startAngle) * HALF_CIRCLE_ANGLE / M_PI; + endAngle = (endAngle < 0.0 ? endAngle + M_PI * 2.0 : endAngle) * HALF_CIRCLE_ANGLE / M_PI; + double sweepAngle = endAngle - startAngle; + if (anticlockwise) { + if (sweepAngle > 0.0) { // Make sure the sweepAngle is negative when anticlockwise. + sweepAngle -= FULL_CIRCLE_ANGLE; + } + } else { + if (sweepAngle < 0.0) { // Make sure the sweepAngle is positive when clockwise. + sweepAngle += FULL_CIRCLE_ANGLE; + } + } + auto rect = SkRect::MakeLTRB(x - rx + offset.GetX(), y - ry + offset.GetY(), + x + rx + offset.GetX(), y + ry + offset.GetY()); + + if (!NearZero(rotation)) { + SkMatrix matrix; + matrix.setRotate(-rotation, x + offset.GetX(), y + offset.GetY()); + strokePath_.transform(matrix); + } + if (NearZero(sweepAngle) && !NearZero(args.para6 - args.para7)) { + // The entire ellipse needs to be drawn with two arcTo. + strokePath_.arcTo(rect, startAngle, HALF_CIRCLE_ANGLE, false); + strokePath_.arcTo(rect, startAngle + HALF_CIRCLE_ANGLE, HALF_CIRCLE_ANGLE, false); + } else { + strokePath_.arcTo(rect, startAngle, sweepAngle, false); + } + if (!NearZero(rotation)) { + SkMatrix matrix; + matrix.setRotate(rotation, x + offset.GetX(), y + offset.GetY()); + strokePath_.transform(matrix); + } +} + +void FlutterRenderCustomPaint::Path2DRect(const Offset& offset, const PathArgs& args) +{ + double left = args.para1 + offset.GetX(); + double top = args.para2 + offset.GetY(); + double right = args.para3 + offset.GetX(); + double bottom = args.para4 + offset.GetY(); + strokePath_.addRect(SkRect::MakeLTRB(left, top, right, bottom)); +} + +void FlutterRenderCustomPaint::Path2DClosePath(const Offset& offset, const PathArgs& args) +{ + strokePath_.close(); +} + +void FlutterRenderCustomPaint::Path2DStroke(const Offset& offset) +{ + SkPaint paint = GetStrokePaint(); + paint.setAntiAlias(antiAlias_); + if (HasShadow()) { + FlutterDecorationPainter::PaintShadow(strokePath_, shadow_, skCanvas_.get()); + } + if (strokeState_.GetGradient().IsValid()) { + UpdatePaintShader(offset, paint, strokeState_.GetGradient()); + } + if (strokeState_.GetPattern().IsValid()) { + UpdatePaintShader(strokeState_.GetPattern(), paint); + } + if (globalState_.GetType() == CompositeOperation::SOURCE_OVER) { + skCanvas_->drawPath(strokePath_, paint); + } else { + InitCachePaint(); + cacheCanvas_->drawPath(strokePath_, paint); + skCanvas_->drawBitmap(cacheBitmap_, 0, 0, &cachePaint_); + cacheBitmap_.eraseColor(0); + } +} + +void FlutterRenderCustomPaint::Clip() +{ + skCanvas_->clipPath(skPath_); +} + +void FlutterRenderCustomPaint::BeginPath() +{ + skPath_.reset(); +} + +void FlutterRenderCustomPaint::ClosePath() +{ + skPath_.close(); +} + +void FlutterRenderCustomPaint::Save() +{ + SaveStates(); + skCanvas_->save(); +} + +void FlutterRenderCustomPaint::Restore() +{ + RestoreStates(); + skCanvas_->restore(); +} + +void FlutterRenderCustomPaint::InitImagePaint() +{ + if (smoothingEnabled_) { + if (smoothingQuality_ == "low") { + imagePaint_.setFilterQuality(SkFilterQuality::kLow_SkFilterQuality); + } else if (smoothingQuality_ == "medium") { + imagePaint_.setFilterQuality(SkFilterQuality::kMedium_SkFilterQuality); + } else if (smoothingQuality_ == "high") { + imagePaint_.setFilterQuality(SkFilterQuality::kHigh_SkFilterQuality); + } else { + LOGE("Unsupported Quality type:%{public}s", smoothingQuality_.c_str()); + } + } else { + imagePaint_.setFilterQuality(SkFilterQuality::kNone_SkFilterQuality); + } +} + +void FlutterRenderCustomPaint::InitCachePaint() +{ + cachePaint_.setBlendMode( + ConvertEnumToSkEnum(globalState_.GetType(), SK_BLEND_MODE_TABLE, BLEND_MODE_SIZE, SkBlendMode::kSrcOver)); +} + +bool FlutterRenderCustomPaint::UpdateParagraph( + const Offset& offset, const std::string& text, bool isStroke, bool hasShadow) +{ + using namespace Constants; + txt::ParagraphStyle style; + if (isStroke) { + style.text_align = ConvertTxtTextAlign(strokeState_.GetTextAlign()); + } else { + style.text_align = ConvertTxtTextAlign(fillState_.GetTextAlign()); + } + auto fontCollection = FlutterFontCollection::GetInstance().GetFontCollection(); + if (!fontCollection) { + LOGW("UpdateParagraph: fontCollection is null"); + return false; + } + std::unique_ptr builder = txt::ParagraphBuilder::CreateTxtBuilder(style, fontCollection); + txt::TextStyle txtStyle; + if (!isStroke && hasShadow) { + txt::TextShadow txtShadow; + txtShadow.color = shadow_.GetColor().GetValue(); + txtShadow.offset.fX = shadow_.GetOffset().GetX(); + txtShadow.offset.fY = shadow_.GetOffset().GetY(); + txtShadow.blur_radius = shadow_.GetBlurRadius(); + txtStyle.text_shadows.emplace_back(txtShadow); + } + txtStyle.locale = Localization::GetInstance()->GetFontLocale(); + UpdateTextStyleForeground(offset, isStroke, txtStyle, hasShadow); + builder->PushStyle(txtStyle); + builder->AddText(StringUtils::Str8ToStr16(text)); + paragraph_ = builder->Build(); + return true; +} + +void FlutterRenderCustomPaint::UpdateTextStyleForeground( + const Offset& offset, bool isStroke, txt::TextStyle& txtStyle, bool hasShadow) +{ + using namespace Constants; + if (!isStroke) { + txtStyle.color = ConvertSkColor(fillState_.GetColor()); + txtStyle.font_size = fillState_.GetTextStyle().GetFontSize().Value(); + ConvertTxtStyle(fillState_.GetTextStyle(), context_, txtStyle); + if (fillState_.GetGradient().IsValid()) { + SkPaint paint; + paint.setStyle(SkPaint::Style::kFill_Style); + UpdatePaintShader(offset, paint, fillState_.GetGradient()); + txtStyle.foreground = paint; + txtStyle.has_foreground = true; + } + if (globalState_.HasGlobalAlpha()) { + if (txtStyle.has_foreground) { + txtStyle.foreground.setColor(fillState_.GetColor().GetValue()); + txtStyle.foreground.setAlphaf(globalState_.GetAlpha()); // set alpha after color + } else { + SkPaint paint; + paint.setColor(fillState_.GetColor().GetValue()); + paint.setAlphaf(globalState_.GetAlpha()); // set alpha after color + txtStyle.foreground = paint; + txtStyle.has_foreground = true; + } + } + } else { + // use foreground to draw stroke + SkPaint paint = GetStrokePaint(); + ConvertTxtStyle(strokeState_.GetTextStyle(), context_, txtStyle); + txtStyle.font_size = strokeState_.GetTextStyle().GetFontSize().Value(); + if (strokeState_.GetGradient().IsValid()) { + UpdatePaintShader(offset, paint, strokeState_.GetGradient()); + } + if (hasShadow) { + paint.setColor(shadow_.GetColor().GetValue()); + paint.setMaskFilter(SkMaskFilter::MakeBlur(SkBlurStyle::kNormal_SkBlurStyle, + FlutterDecorationPainter::ConvertRadiusToSigma(shadow_.GetBlurRadius()))); + } + txtStyle.foreground = paint; + txtStyle.has_foreground = true; + } +} + +bool FlutterRenderCustomPaint::HasShadow() const +{ + return !(NearZero(shadow_.GetOffset().GetX()) && NearZero(shadow_.GetOffset().GetY()) && + NearZero(shadow_.GetBlurRadius())); +} + +void FlutterRenderCustomPaint::UpdatePaintShader(const Offset& offset, SkPaint& paint, const Gradient& gradient) +{ + SkPoint beginPoint = SkPoint::Make(SkDoubleToScalar(gradient.GetBeginOffset().GetX() + offset.GetX()), + SkDoubleToScalar(gradient.GetBeginOffset().GetY() + offset.GetY())); + SkPoint endPoint = SkPoint::Make(SkDoubleToScalar(gradient.GetEndOffset().GetX() + offset.GetX()), + SkDoubleToScalar(gradient.GetEndOffset().GetY() + offset.GetY())); + SkPoint pts[2] = { beginPoint, endPoint }; + auto gradientColors = gradient.GetColors(); + int32_t colorsSize = gradientColors.size(); + SkColor colors[gradientColors.size()]; + float pos[gradientColors.size()]; + for (auto i = 0; i < colorsSize; ++i) { + const auto& gradientColor = gradientColors[i]; + colors[i] = gradientColor.GetColor().GetValue(); + pos[i] = gradientColor.GetDimension().Value(); + } + +#ifdef USE_SYSTEM_SKIA + auto mode = SkShader::kClamp_TileMode; +#else + auto mode = SkTileMode::kClamp; +#endif + + sk_sp skShader = nullptr; + if (gradient.GetType() == GradientType::LINEAR) { + skShader = SkGradientShader::MakeLinear(pts, colors, pos, gradientColors.size(), mode); + } else { + if (gradient.GetInnerRadius() <= 0.0 && beginPoint == endPoint) { + skShader = SkGradientShader::MakeRadial( + endPoint, gradient.GetOuterRadius(), colors, pos, gradientColors.size(), mode); + } else { + skShader = SkGradientShader::MakeTwoPointConical(beginPoint, gradient.GetInnerRadius(), + endPoint, gradient.GetOuterRadius(), colors, pos, gradientColors.size(), mode); + } + } + paint.setShader(skShader); +} + +void FlutterRenderCustomPaint::Rotate(double angle) +{ + skCanvas_->rotate(angle * 180 / M_PI); +} + +void FlutterRenderCustomPaint::Scale(double x, double y) +{ + skCanvas_->scale(x, y); +} + +void FlutterRenderCustomPaint::SetTransform(const TransformParam& param) +{ + auto pipeline = context_.Upgrade(); + if (!pipeline) { + return; + } + // use physical pixel to store bitmap + double viewScale = pipeline->GetViewScale(); + SkMatrix skMatrix; + skMatrix.setAll(param.scaleX * viewScale, param.skewY * viewScale, param.translateX, param.skewX * viewScale, + param.scaleY * viewScale, param.translateY, 0, 0, 1); + skCanvas_->setMatrix(skMatrix); +} + +void FlutterRenderCustomPaint::Transform(const TransformParam& param) +{ + SkMatrix skMatrix; + skMatrix.setAll(param.scaleX, param.skewY, param.translateX, param.skewX, param.scaleY, param.translateY, 0, 0, 1); + skCanvas_->concat(skMatrix); +} + +void FlutterRenderCustomPaint::Translate(double x, double y) +{ + skCanvas_->translate(x, y); +} + +void FlutterRenderCustomPaint::UpdateLineDash(SkPaint& paint) +{ + if (!strokeState_.GetLineDash().lineDash.empty()) { + auto lineDashState = strokeState_.GetLineDash().lineDash; + SkScalar intervals[lineDashState.size()]; + for (size_t i = 0; i < lineDashState.size(); ++i) { + intervals[i] = SkDoubleToScalar(lineDashState[i]); + } + SkScalar phase = SkDoubleToScalar(strokeState_.GetLineDash().dashOffset); + paint.setPathEffect(SkDashPathEffect::Make(intervals, lineDashState.size(), phase)); + } +} + +void FlutterRenderCustomPaint::DrawImage( + const Offset& offset, const CanvasImage& canvasImage, double width, double height) +{ + if (!flutter::UIDartState::Current()) { + return; + } + + auto context = GetContext().Upgrade(); + if (!context) { + return; + } + auto sharedImageManager = context->GetSharedImageManager(); + auto imageProvider = ImageProvider::Create(canvasImage.src, sharedImageManager); + if (imageProvider) { + auto assetManager = context->GetAssetManager(); + auto image = GreatOrEqual(width, 0) && GreatOrEqual(height, 0) + ? imageProvider->GetSkImage(canvasImage.src, assetManager, Size(width, height)) + : imageProvider->GetSkImage(canvasImage.src, assetManager); + + if (!image) { + LOGE("image is null"); + return; + } + InitCachePaint(); + const auto skCanvas = + globalState_.GetType() == CompositeOperation::SOURCE_OVER ? skCanvas_.get() : cacheCanvas_.get(); + InitImagePaint(); + switch (canvasImage.flag) { + case 0: + skCanvas->drawImage(image, canvasImage.dx, canvasImage.dy); + break; + case 1: { + SkRect rect = SkRect::MakeXYWH(canvasImage.dx, canvasImage.dy, canvasImage.dWidth, canvasImage.dHeight); + skCanvas->drawImageRect(image, rect, &imagePaint_); + break; + } + case 2: { + SkRect dstRect = + SkRect::MakeXYWH(canvasImage.dx, canvasImage.dy, canvasImage.dWidth, canvasImage.dHeight); + SkRect srcRect = + SkRect::MakeXYWH(canvasImage.sx, canvasImage.sy, canvasImage.sWidth, canvasImage.sHeight); + skCanvas->drawImageRect(image, srcRect, dstRect, &imagePaint_); + break; + } + default: + break; + } + if (globalState_.GetType() != CompositeOperation::SOURCE_OVER) { + skCanvas_->drawBitmap(cacheBitmap_, 0, 0, &cachePaint_); + cacheBitmap_.eraseColor(0); + } + } +} + +void FlutterRenderCustomPaint::UpdatePaintShader(const Pattern& pattern, SkPaint& paint) +{ + if (!flutter::UIDartState::Current()) { + return; + } + + auto context = GetContext().Upgrade(); + if (!context) { + return; + } + auto sharedImageManager = context->GetSharedImageManager(); + auto imageProvider = ImageProvider::Create(pattern.GetImgSrc(), sharedImageManager); + if (imageProvider) { + auto width = pattern.GetImageWidth(); + auto height = pattern.GetImageHeight(); + auto assetManager = context->GetAssetManager(); + auto image = GreatOrEqual(width, 0) && GreatOrEqual(height, 0) + ? imageProvider->GetSkImage(pattern.GetImgSrc(), assetManager, Size(width, height)) + : imageProvider->GetSkImage(pattern.GetImgSrc(), assetManager); + if (!image) { + LOGE("image is null"); + return; + } + static const LinearMapNode, SkPaint&)> staticPattern[] = { + { "no-repeat", + [](sk_sp image, SkPaint& paint) { +#ifdef USE_SYSTEM_SKIA + paint.setShader(image->makeShader(SkShader::kDecal_TileMode, SkShader::kDecal_TileMode, nullptr)); +#else + paint.setShader(image->makeShader(SkTileMode::kDecal, SkTileMode::kDecal, nullptr)); +#endif + } }, + { "repeat", + [](sk_sp image, SkPaint& paint) { +#ifdef USE_SYSTEM_SKIA + paint.setShader(image->makeShader(SkShader::kRepeat_TileMode, SkShader::kRepeat_TileMode, nullptr)); +#else + paint.setShader(image->makeShader(SkTileMode::kRepeat, SkTileMode::kRepeat, nullptr)); +#endif + } }, + { "repeat-x", + [](sk_sp image, SkPaint& paint) { +#ifdef USE_SYSTEM_SKIA + paint.setShader(image->makeShader(SkShader::kRepeat_TileMode, SkShader::kDecal_TileMode, nullptr)); +#else + paint.setShader(image->makeShader(SkTileMode::kRepeat, SkTileMode::kDecal, nullptr)); +#endif + } }, + { "repeat-y", + [](sk_sp image, SkPaint& paint) { +#ifdef USE_SYSTEM_SKIA + paint.setShader(image->makeShader(SkShader::kDecal_TileMode, SkShader::kRepeat_TileMode, nullptr)); +#else + paint.setShader(image->makeShader(SkTileMode::kDecal, SkTileMode::kRepeat, nullptr)); +#endif + } }, + }; + auto operatorIter = + BinarySearchFindIndex(staticPattern, ArraySize(staticPattern), pattern.GetRepetition().c_str()); + if (operatorIter != -1) { + staticPattern[operatorIter].value(image, paint); + } + } +} + +void FlutterRenderCustomPaint::PutImageData(const Offset& offset, const ImageData& imageData) +{ + if (imageData.data.empty()) { + LOGE("PutImageData failed, image data is empty."); + return; + } + uint32_t* data = new (std::nothrow)uint32_t[imageData.data.size()]; + if (data == nullptr) { + LOGE("PutImageData failed, new data is null."); + return; + } + + for (uint32_t i = 0; i < imageData.data.size(); ++i) { + data[i] = imageData.data[i].GetValue(); + } + SkBitmap skBitmap; + auto imageInfo = SkImageInfo::Make(imageData.dirtyWidth, imageData.dirtyHeight, SkColorType::kBGRA_8888_SkColorType, + SkAlphaType::kOpaque_SkAlphaType); + skBitmap.allocPixels(imageInfo); + skBitmap.setPixels(data); + skCanvas_->drawBitmap(skBitmap, imageData.x, imageData.y); + delete[] data; +} + +std::unique_ptr FlutterRenderCustomPaint::GetImageData(double left, double top, double width, double height) +{ + double viewScale = 1.0; + auto pipeline = context_.Upgrade(); + if (pipeline) { + viewScale = pipeline->GetViewScale(); + } + // copy the bitmap to tempCanvas + auto imageInfo = + SkImageInfo::Make(width, height, SkColorType::kBGRA_8888_SkColorType, SkAlphaType::kOpaque_SkAlphaType); + SkBitmap tempCache; + double scaledLeft = left * viewScale; + double scaledTop = top * viewScale; + double dirtyWidth = width >= 0 ? width : 0; + double dirtyHeight = height >= 0 ? height : 0; + tempCache.allocPixels(imageInfo); + SkCanvas tempCanvas(tempCache); + auto srcRect = SkRect::MakeXYWH(scaledLeft, scaledTop, width * viewScale, height * viewScale); + auto dstRect = SkRect::MakeXYWH(0.0, 0.0, dirtyWidth, dirtyHeight); + tempCanvas.drawBitmapRect(canvasCache_, srcRect, dstRect, nullptr); + int32_t size = dirtyWidth * dirtyHeight; + // write color + std::unique_ptr pixels = std::make_unique(size * 4); + tempCache.readPixels(imageInfo, pixels.get(), dirtyWidth * imageInfo.bytesPerPixel(), 0, 0); + std::unique_ptr imageData = std::make_unique(); + imageData->dirtyWidth = dirtyWidth; + imageData->dirtyHeight = dirtyHeight; + // a pixel include 4 data(blue, green, red, alpha) + for (int i = 0; i < size * 4; i += 4) { + auto blue = pixels[i]; + auto green = pixels[i + 1]; + auto red = pixels[i + 2]; + auto alpha = pixels[i + 3]; + imageData->data.emplace_back(Color::FromARGB(alpha, red, green, blue)); + } + return imageData; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/custom_paint/flutter_render_custom_paint.h b/frameworks/core/components/custom_paint/flutter_render_custom_paint.h new file mode 100644 index 00000000..d47db467 --- /dev/null +++ b/frameworks/core/components/custom_paint/flutter_render_custom_paint.h @@ -0,0 +1,116 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CUSTOM_PAINT_FLUTTER_RENDER_CUSTOM_PAINT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CUSTOM_PAINT_FLUTTER_RENDER_CUSTOM_PAINT_H + +#include "flutter/fml/memory/ref_ptr.h" +#include "flutter/lib/ui/painting/path.h" +#include "flutter/third_party/txt/src/txt/paragraph.h" +#include "third_party/skia/include/core/SkPath.h" + +#include "core/components/custom_paint/render_custom_paint.h" +#include "core/pipeline/base/scoped_canvas_state.h" +#include "core/pipeline/layers/clip_layer.h" + +namespace OHOS::Ace { + +class FlutterRenderCustomPaint : public RenderCustomPaint { + DECLARE_ACE_TYPE(FlutterRenderCustomPaint, RenderCustomPaint); + +public: + FlutterRenderCustomPaint() = default; + ~FlutterRenderCustomPaint() override = default; + + void Paint(RenderContext& context, const Offset& offset) override; + + std::string ToDataURL(const std::string& args) override; + void SetAntiAlias(bool isEnabled) override; + void FillRect(const Offset& offset, const Rect& rect) override; + void StrokeRect(const Offset& offset, const Rect& rect) override; + void ClearRect(const Offset& offset, const Rect& rect) override; + void FillText(const Offset& offset, const std::string& text, double x, double y) override; + void StrokeText(const Offset& offset, const std::string& text, double x, double y) override; + double MeasureText(const std::string& text, const PaintState& state) override; + void MoveTo(const Offset& offset, double x, double y) override; + void LineTo(const Offset& offset, double x, double y) override; + void BezierCurveTo(const Offset& offset, const BezierCurveParam& param) override; + void QuadraticCurveTo(const Offset& offset, const QuadraticCurveParam& param) override; + void Arc(const Offset& offset, const ArcParam& param) override; + void ArcTo(const Offset& offset, const ArcToParam& param) override; + void Ellipse(const Offset& offset, const EllipseParam& param) override; + void AddRect(const Offset& offset, const Rect& rect) override; + void Fill(const Offset& offset) override; + void Stroke(const Offset& offset) override; + void Stroke(const Offset& offset, const RefPtr& path) override; + void Clip() override; + void BeginPath() override; + void ClosePath() override; + void Restore() override; + void Save() override; + void Rotate(double angle) override; + void Scale(double x, double y) override; + void SetTransform(const TransformParam& param) override; + void Transform(const TransformParam& param) override; + void Translate(double x, double y) override; + void DrawImage(const Offset& offset, const CanvasImage& canvasImage, double width, double height) override; + void PutImageData(const Offset& offset, const ImageData& imageData) override; + std::unique_ptr GetImageData(double left, double top, double width, double height) override; + + RenderLayer GetRenderLayer() override; + +private: + void InitImagePaint(); + void InitCachePaint(); + bool UpdateParagraph(const Offset& offset, const std::string& text, bool isStroke, bool hasShadow = false); + void PaintText(const Offset& offset, double x, double y, bool isStroke, bool hasShadow = false); + double GetAlignOffset(TextAlign align); + double GetBaselineOffset(TextBaseline baseline); + SkPaint GetStrokePaint(); + bool HasShadow() const; + void UpdatePaintShader(const Offset& offset, SkPaint& paint, const Gradient& gradient); + void UpdatePaintShader(const Pattern& pattern, SkPaint& paint); + void UpdateLineDash(SkPaint& paint); + void UpdateTextStyleForeground(const Offset& offset, bool isStroke, txt::TextStyle& style, bool hasShadow); + + void Path2DAddPath(const Offset& offset, const PathArgs& args); + void Path2DSetTransform(const Offset& offset, const PathArgs& args); + void Path2DMoveTo(const Offset& offset, const PathArgs& args); + void Path2DLineTo(const Offset& offset, const PathArgs& args); + void Path2DArc(const Offset& offset, const PathArgs& args); + void Path2DArcTo(const Offset& offset, const PathArgs& args); + void Path2DQuadraticCurveTo(const Offset& offset, const PathArgs& args); + void Path2DBezierCurveTo(const Offset& offset, const PathArgs& args); + void Path2DEllipse(const Offset& offset, const PathArgs& args); + void Path2DRect(const Offset& offset, const PathArgs& args); + void Path2DClosePath(const Offset& offset, const PathArgs& args); + void Path2DStroke(const Offset& offset); + + bool antiAlias_ = false; + std::unique_ptr paragraph_; + RefPtr layer_; + SkPath skPath_; + SkPath strokePath_; + SkPaint imagePaint_; + SkPaint cachePaint_; + SkBitmap cacheBitmap_; + SkBitmap canvasCache_; + std::unique_ptr skCanvas_; + std::unique_ptr cacheCanvas_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CUSTOM_PAINT_FLUTTER_RENDER_CUSTOM_PAINT_H diff --git a/frameworks/core/components/custom_paint/render_custom_paint.cpp b/frameworks/core/components/custom_paint/render_custom_paint.cpp new file mode 100644 index 00000000..521a4914 --- /dev/null +++ b/frameworks/core/components/custom_paint/render_custom_paint.cpp @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/custom_paint/render_custom_paint.h" + +#include "core/components/custom_paint/custom_paint_component.h" + +namespace OHOS::Ace { + +RenderCustomPaint::RenderCustomPaint() : RenderNode(true) {} + +void RenderCustomPaint::PushTask(const TaskFunc& func) +{ + tasks_.emplace_back(func); + MarkNeedRender(); +} + +void RenderCustomPaint::FlushPipelineImmediately() +{ + auto context = context_.Upgrade(); + if (context) { + context->FlushPipelineImmediately(); + } +} + +void RenderCustomPaint::Update(const RefPtr& component) +{ + const RefPtr customPaint = AceType::DynamicCast(component); + if (!customPaint) { + return; + } + width_ = customPaint->GetWidth(); + height_ = customPaint->GetHeight(); + SetTextDirection(customPaint->GetTextDirection()); + + const auto& taskPool = customPaint->GetTaskPool(); + if (taskPool) { + taskPool->SetRenderNode(AceType::WeakClaim(this)); + pool_ = taskPool; + tasks_ = std::list(taskPool->GetTasks().begin(), taskPool->GetTasks().end()); + taskPool->ClearTasks(); + pool_->SetPushToRenderNodeFunc([weak = AceType::WeakClaim(this)](const TaskFunc& taskFunc) { + auto client = weak.Upgrade(); + if (client) { + client->PushTask(taskFunc); + } + }); + } + MarkNeedLayout(); +} + +void RenderCustomPaint::PerformLayout() +{ + SetLayoutSize(GetLayoutParam().GetMaxSize()); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/custom_paint/render_custom_paint.h b/frameworks/core/components/custom_paint/render_custom_paint.h new file mode 100644 index 00000000..2c58ba33 --- /dev/null +++ b/frameworks/core/components/custom_paint/render_custom_paint.h @@ -0,0 +1,292 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CUSTOM_PAINT_RENDER_CUSTOM_PAINT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CUSTOM_PAINT_RENDER_CUSTOM_PAINT_H + +#include "core/components/common/properties/paint_state.h" +#include "core/components/custom_paint/custom_paint_component.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderCustomPaint : public RenderNode { + DECLARE_ACE_TYPE(RenderCustomPaint, RenderNode); + +public: + ~RenderCustomPaint() override = default; + + static RefPtr Create(); + void Update(const RefPtr& component) override; + void PerformLayout() override; + + void PushTask(const TaskFunc& func); + + bool HasTask() const + { + return !tasks_.empty(); + } + + const std::list& GetTasks() const + { + return tasks_; + } + + void SetTasks(const std::list& tasks) + { + tasks_ = tasks; + } + + void FlushPipelineImmediately(); + + virtual std::string ToDataURL(const std::string& args) = 0; + virtual void SetAntiAlias(bool isEnabled) = 0; + virtual void FillRect(const Offset& offset, const Rect& rect) = 0; + virtual void StrokeRect(const Offset& offset, const Rect& rect) = 0; + virtual void ClearRect(const Offset& offset, const Rect& rect) = 0; + + virtual void FillText(const Offset& offset, const std::string& text, double x, double y) = 0; + virtual void StrokeText(const Offset& offset, const std::string& text, double x, double y) = 0; + virtual double MeasureText(const std::string& text, const PaintState& state) = 0; + + virtual void MoveTo(const Offset& offset, double x, double y) = 0; + virtual void LineTo(const Offset& offset, double x, double y) = 0; + virtual void BezierCurveTo(const Offset& offset, const BezierCurveParam& param) = 0; + virtual void QuadraticCurveTo(const Offset& offset, const QuadraticCurveParam& param) = 0; + virtual void Arc(const Offset& offset, const ArcParam& param) = 0; + virtual void ArcTo(const Offset& offset, const ArcToParam& param) = 0; + virtual void Ellipse(const Offset& offset, const EllipseParam& param) = 0; + virtual void AddRect(const Offset& offset, const Rect& rect) = 0; + + virtual void Fill(const Offset& offset) = 0; + virtual void Stroke(const Offset& offset) = 0; + virtual void Stroke(const Offset& offset, const RefPtr& path) = 0; + virtual void Clip() = 0; + virtual void BeginPath() = 0; + virtual void ClosePath() = 0; + + // in render node, restore and save are used for clip and matrix operation + virtual void Restore() = 0; + virtual void Save() = 0; + + virtual void Rotate(double angle) = 0; + virtual void Scale(double x, double y) = 0; + virtual void SetTransform(const TransformParam& param) = 0; + virtual void Transform(const TransformParam& param) = 0; + virtual void Translate(double x, double y) = 0; + virtual void DrawImage(const Offset& offset, const CanvasImage& image, double width, double height) = 0; + virtual void PutImageData(const Offset& offset, const ImageData& imageData) = 0; + virtual std::unique_ptr GetImageData(double left, double top, double width, double height) = 0; + + bool IsRepaintBoundary() const override + { + return true; + } + + void SetFillColor(const Color& color) + { + fillState_.SetColor(color); + fillState_.SetTextColor(color); + } + + void SetStrokeColor(const Color& color) + { + strokeState_.SetColor(color); + } + + void SetFillGradient(const Gradient& gradient) + { + fillState_.SetGradient(gradient); + } + + void SetStrokeGradient(const Gradient& gradient) + { + strokeState_.SetGradient(gradient); + } + + void SetFillPattern(const Pattern& pattern) + { + fillState_.SetPattern(pattern); + } + + void SetStrokePattern(const Pattern& pattern) + { + strokeState_.SetPattern(pattern); + } + + void SetShadowBlur(double blur) + { + shadow_.SetBlurRadius(blur); + } + + void SetShadowOffsetX(double x) + { + shadow_.SetOffsetX(x); + } + + void SetShadowOffsetY(double y) + { + shadow_.SetOffsetY(y); + } + + void SetSmoothingEnabled(bool enabled) + { + smoothingEnabled_ = enabled; + } + + void SetSmoothingQuality(const std::string& quality) + { + smoothingQuality_ = quality; + } + + void SetShadowColor(const Color& color) + { + shadow_.SetColor(color); + } + + void SetAlpha(double alpha) + { + globalState_.SetAlpha(alpha); + } + + void SetCompositeType(CompositeOperation operation) + { + globalState_.SetType(operation); + } + + void SetLineDashOffset(double offset) + { + strokeState_.SetLineDashOffset(offset); + } + + void SetLineDash(const std::vector& segments) + { + strokeState_.SetLineDash(segments); + } + + void SetTextAlign(TextAlign align) + { + fillState_.SetTextAlign(align); + strokeState_.SetTextAlign(align); + } + + void SetTextBaseline(TextBaseline baseline) + { + fillState_.SetTextBaseline(baseline); + strokeState_.SetTextBaseline(baseline); + } + + void SetFontWeight(FontWeight weight) + { + fillState_.SetFontWeight(weight); + strokeState_.SetFontWeight(weight); + } + + void SetFontFamilies(const std::vector& fontFamilies) + { + fillState_.SetFontFamilies(fontFamilies); + strokeState_.SetFontFamilies(fontFamilies); + } + + void SetFontStyle(FontStyle style) + { + fillState_.SetFontStyle(style); + strokeState_.SetFontStyle(style); + } + + void SetFontSize(const Dimension& size) + { + fillState_.SetFontSize(size); + strokeState_.SetFontSize(size); + } + + void SetTextStyle(const TextStyle& style) + { + fillState_.SetTextStyle(style); + strokeState_.SetTextStyle(style); + } + + void SetLineWidth(double width) + { + strokeState_.SetLineWidth(width); + } + + void SetLineCap(LineCapStyle style) + { + strokeState_.SetLineCap(style); + } + + void SetLineJoin(LineJoinStyle style) + { + strokeState_.SetLineJoin(style); + } + + void SetMiterLimit(double limit) + { + strokeState_.SetMiterLimit(limit); + } + + void SaveStates() + { + PaintHolder holder; + holder.shadow = shadow_; + holder.fillState = fillState_; + holder.globalState = globalState_; + holder.strokeState = strokeState_; + saveStates_.push(holder); + } + + void RestoreStates() + { + if (saveStates_.empty()) { + return; + } + auto saveState = saveStates_.top(); + shadow_ = saveState.shadow; + fillState_ = saveState.fillState; + strokeState_ = saveState.strokeState; + globalState_ = saveState.globalState; + saveStates_.pop(); + } + +protected: + RenderCustomPaint(); + + PaintState fillState_; + StrokePaintState strokeState_; + + // save alpha and compositeType in GlobalPaintState + GlobalPaintState globalState_; + Shadow shadow_; + + bool smoothingEnabled_ = true; + std::string smoothingQuality_ = "low"; + + // PaintHolder includes fillState, strokeState, globalState and shadow for save + std::stack saveStates_; + + RefPtr pool_; + std::list tasks_; + + ContextType type_ = ContextType::RENDER_2D; + +private: + Dimension width_; + Dimension height_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_CUSTOM_PAINT_RENDER_CUSTOM_PAINT_H diff --git a/frameworks/core/components/data_panel/BUILD.gn b/frameworks/core/components/data_panel/BUILD.gn new file mode 100644 index 00000000..ded24948 --- /dev/null +++ b/frameworks/core/components/data_panel/BUILD.gn @@ -0,0 +1,22 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("data_panel") { + sources = [ + "data_panel_component.cpp", + "flutter_render_data_panel.cpp", + "render_data_panel.cpp", + ] +} diff --git a/frameworks/core/components/data_panel/data_panel_component.cpp b/frameworks/core/components/data_panel/data_panel_component.cpp new file mode 100644 index 00000000..f7ff49d8 --- /dev/null +++ b/frameworks/core/components/data_panel/data_panel_component.cpp @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/data_panel/data_panel_component.h" + +#include "core/components/data_panel/data_panel_element.h" +#include "core/components/data_panel/data_panel_theme.h" +#include "core/components/data_panel/render_data_panel.h" + +namespace OHOS::Ace { +namespace { + +const std::string DATA_PANEL_COLOR_PREFIX = "DATA_PANEL_LIGHT_COLOR_"; + +} + +RefPtr ProgressDataPanelComponent::CreateRenderNode() +{ + return RenderProgressDataPanel::Create(); +} + +RefPtr PercentageDataPanelComponent::CreateRenderNode() +{ + return RenderPercentageDataPanel::Create(); +} + +RefPtr DataPanelComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +void DataPanelComponent::InitalStyle(const RefPtr& themeManager) +{ + auto theme = themeManager->GetTheme(); + if (!theme) { + LOGE("fail to initialize theme because theme is null"); + return; + } + SetTrackColor(theme->GetBackgroundColor()); + SetDefaultHeight(theme->GetDefaultHeight()); + SetDefaultWidth(theme->GetDefaultWidth()); + SetThickness(theme->GetThickness()); +}; + +void PercentageDataPanelComponent::InitalStyle(const RefPtr& themeManager) +{ + if (!themeManager) { + LOGE("fail to initialize, themeManager is null"); + return; + } + DataPanelComponent::InitalStyle(themeManager); + auto theme = themeManager->GetTheme(); + if (!theme) { + LOGE("fail to initialize theme because theme is null"); + return; + } + uint32_t index = 0; + auto colors = theme->GetColorsArray(); + for (auto& segment : segments_) { + if (segment.GetColorType() == SegmentStyleType::NONE && index < colors.size()) { + segment.SetStartColor(colors[index].first); + segment.SetEndColor(colors[index].second); + } + index += 1; + } +} + +void ProgressDataPanelComponent::InitalStyle(const RefPtr& themeManager) +{ + if (!themeManager) { + LOGE("fail to initialize, themeManager is null"); + return; + } + DataPanelComponent::InitalStyle(themeManager); + auto theme = themeManager->GetTheme(); + if (!theme) { + LOGE("fail to initialize theme because theme is null"); + return; + } + if (type_ == ChartType::LOADING) { + startColor_ = theme->GetLoadingColor().first; + endColor_ = theme->GetLoadingColor().second; + } else { + startColor_ = theme->GetProgressColor().first; + endColor_ = theme->GetProgressColor().second; + } +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/data_panel/data_panel_component.h b/frameworks/core/components/data_panel/data_panel_component.h new file mode 100644 index 00000000..c2c35eef --- /dev/null +++ b/frameworks/core/components/data_panel/data_panel_component.h @@ -0,0 +1,352 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DATA_PANEL_DATA_PANEL_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DATA_PANEL_DATA_PANEL_COMPONENT_H + +#include + +#include "core/components/chart/chart_component.h" +#include "core/components/common/properties/color.h" +#include "core/components/theme/theme_manager.h" +#include "core/pipeline/base/render_component.h" + +namespace OHOS::Ace { + +enum class SegmentStyleType { + USE_GRADIENT, + USE_COLOR, + NONE, // user hasn't set color in css. +}; + +class Segment final { +public: + Segment() = default; + ~Segment() = default; + + void SetSegmentName(const std::string& name) + { + name_ = name; + } + + const std::string& GetSegmentName() const + { + return name_; + } + + void SetStartColor(const Color& color) + { + startColor_ = color; + } + + const Color& GetStartColor() const + { + return startColor_; + } + + void SetEndColor(const Color& color) + { + endColor_ = color; + } + + const Color& GetEndColor() const + { + return endColor_; + } + + void SetColorDescriptor(const std::string& colorDescriptor) + { + colorDescriptor_ = colorDescriptor; + } + + const std::string& GetColorDescriptor() const + { + return colorDescriptor_; + } + + SegmentStyleType GetColorType() const + { + return style_; + } + + void SetColorType(SegmentStyleType type) + { + style_ = type; + } + + double GetValue() const + { + return value_; + } + + void SetValue(double value) + { + value_ = value; + } + +private: + std::string name_; + std::string colorDescriptor_; + Color startColor_; + Color endColor_; + double value_ = 0.0; + SegmentStyleType style_ = SegmentStyleType::NONE; +}; + +class DataPanelComponent : public RenderComponent { + DECLARE_ACE_TYPE(DataPanelComponent, RenderComponent); + +public: + RefPtr CreateElement() override; + + // determine the data panel type before call InitalStyle + virtual void InitalStyle(const RefPtr& themeManager); + + void SetMeasureType(MeasureType type) + { + measureType_ = type; + } + + MeasureType GetMeasureType() const + { + return measureType_; + } + + void SetAutoScale(bool autoScale) + { + autoScale_ = autoScale; + } + + bool GetAutoScale() const + { + return autoScale_; + } + + virtual ChartType GetPanelType() const = 0; + + void SetPanelType(ChartType type) + { + type_ = type; + } + + const Dimension& GetDefaultHeight() const + { + return height_; + } + + const Dimension& GetDefaultWidth() const + { + return width_; + } + + const Dimension& GetThickness() const + { + return thickness_; + } + + void SetThickness(const Dimension& thickness) + { + thickness_ = thickness; + } + + void SetEffects(bool effects) + { + showEffects_ = effects; + } + + bool GetEffects() const + { + return showEffects_; + } + + void SetTrackColor(const Color& backgroundTrackColor) + { + backgroundTrackColor_ = backgroundTrackColor; + } + + Color GetTrackColor() const + { + return backgroundTrackColor_; + } + +protected: + void SetDefaultHeight(const Dimension& height) + { + height_ = height; + } + + void SetDefaultWidth(const Dimension& width) + { + width_ = width; + } + + ChartType type_ = ChartType::PROGRESS; + +private: + MeasureType measureType_ = MeasureType::DEFAULT; + Dimension thickness_; + // data panel default height and width + Dimension height_; + Dimension width_; + bool showEffects_ = false; + Color backgroundTrackColor_; + // autoScale is used to resize the thickness based on radius. + bool autoScale_ = false; +}; + +class ProgressDataPanelComponent : public DataPanelComponent { + DECLARE_ACE_TYPE(ProgressDataPanelComponent, DataPanelComponent); + +public: + ProgressDataPanelComponent() = default; + ~ProgressDataPanelComponent() = default; + + explicit ProgressDataPanelComponent(ChartType type) + { + type_ = type; + } + + RefPtr CreateRenderNode() override; + ChartType GetPanelType() const override + { + return type_; + } + + // InitalStyle will assign UX design color. + // call this method after type determined. + // this method will override color. + void InitalStyle(const RefPtr& themeManager) override; + + const Color& GetStartColor() const + { + return startColor_; + } + + void SetStartColor(const Color& color) + { + startColor_ = color; + } + + const Color& GetEndColor() const + { + return endColor_; + } + + void SetEndColor(const Color& color) + { + endColor_ = color; + } + + double GetProgressValue() const + { + return progress_; + } + + void SetProgressValue(double progress) + { + progress_ = progress; + } + + bool IsLoading() const + { + return isLoading_; + } + + void SetIsLoadingType(bool isLoading) + { + isLoading_ = isLoading; + } + +private: + Color startColor_; + Color endColor_; + double progress_ = 0.0; + bool isLoading_ = false; +}; + +class PercentageDataPanelComponent : public DataPanelComponent { + DECLARE_ACE_TYPE(PercentageDataPanelComponent, DataPanelComponent); + +public: + PercentageDataPanelComponent() = default; + ~PercentageDataPanelComponent() = default; + + explicit PercentageDataPanelComponent(ChartType type) + { + type_ = type; + } + + RefPtr CreateRenderNode() override; + + // InitalStyle will assign UX design color + void InitalStyle(const RefPtr& themeManager) override; + + ChartType GetPanelType() const override + { + return type_; + } + + void AppendSegment(const Segment& segment) + { + segments_.push_back(segment); + totalValue_ += segment.GetValue(); + } + + void ClearSegment() + { + segments_.clear(); + totalValue_ = 0.0; + } + + const std::vector& GetSegments() const + { + return segments_; + } + + double GetStartDegree() const + { + return startDegree_; + } + + void SetStartDegree(double startDegree) + { + startDegree_ = startDegree; + } + + double GetSweepDegree() const + { + return sweepDegree_; + } + + void SetSweepDegree(double sweepDegree) + { + sweepDegree_ = sweepDegree; + } + + double GetTotalValue() const + { + return totalValue_; + } + +private: + double startDegree_ = 0.0; + double sweepDegree_ = 360.0; + std::vector segments_; + double totalValue_ = 0.0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DATA_PANEL_DATA_PANEL_COMPONENT_H diff --git a/frameworks/core/components/data_panel/data_panel_element.h b/frameworks/core/components/data_panel/data_panel_element.h new file mode 100644 index 00000000..8120c567 --- /dev/null +++ b/frameworks/core/components/data_panel/data_panel_element.h @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DATA_PANEL_DATA_PANEL_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DATA_PANEL_DATA_PANEL_ELEMENT_H + +#include "core/components/data_panel/data_panel_component.h" +#include "core/focus/focus_node.h" +#include "core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +class DataPanelElement : public RenderElement { + DECLARE_ACE_TYPE(DataPanelElement, RenderElement); + +public: + DataPanelElement() = default; + ~DataPanelElement() override = default; + + void Update() override + { + oldComponent_ = component_; + RenderElement::Update(); + } + + bool CanUpdate(const RefPtr& newComponent) override + { + const auto newDataPanelComponent = AceType::DynamicCast(newComponent); + if (!newDataPanelComponent) { + return false; + } + const auto oldDataPanelComponent = AceType::DynamicCast(oldComponent_); + if (!oldDataPanelComponent) { + return false; + } + return (newDataPanelComponent->GetPanelType() == oldDataPanelComponent->GetPanelType()) && + Element::CanUpdate(newComponent); + } + +private: + RefPtr oldComponent_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DATA_PANEL_DATA_PANEL_ELEMENT_H diff --git a/frameworks/core/components/data_panel/data_panel_theme.h b/frameworks/core/components/data_panel/data_panel_theme.h new file mode 100644 index 00000000..ef95999e --- /dev/null +++ b/frameworks/core/components/data_panel/data_panel_theme.h @@ -0,0 +1,169 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DATA_PANEL_DATA_PANEL_THEME_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DATA_PANEL_DATA_PANEL_THEME_H + +#include "core/components/theme/theme.h" +#include "core/components/theme/theme_constants.h" +#include "core/components/theme/theme_manager.h" + +namespace OHOS::Ace { + +class DataPanelTheme : public virtual Theme { + DECLARE_ACE_TYPE(DataPanelTheme, Theme); + +public: + class Builder { + public: + Builder() = default; + ~Builder() = default; + + RefPtr Build(const RefPtr& themeConstants) const + { + RefPtr theme = AceType::Claim(new DataPanelTheme()); + if (!themeConstants) { + return theme; + } + theme->backgroundColor_ = themeConstants->GetColor(THEME_DATA_PANEL_BACKGROUND_COLOR); + theme->thickness_ = themeConstants->GetDimension(THEME_DATA_PANEL_THICKNESS); + theme->defaultHeight_ = themeConstants->GetDimension(THEME_DATA_PANEL_HEIGHT); + theme->defaultWidth_ = themeConstants->GetDimension(THEME_DATA_PANEL_WIDTH); + theme->loadingColors_.first = themeConstants->GetColor(THEME_DATA_PANEL_LOADING_START_COLOR); + theme->loadingColors_.second = themeConstants->GetColor(THEME_DATA_PANEL_LOADING_END_COLOR); + theme->progressColors_.first = themeConstants->GetColor(THEME_DATA_PANEL_PROGRESS_START_COLOR); + theme->progressColors_.second = themeConstants->GetColor(THEME_DATA_PANEL_PROGRESS_END_COLOR); + theme->percentageColors_.emplace_back(themeConstants->GetColor(THEME_DATA_PANEL_CONFIG_COLOR_1_START), + themeConstants->GetColor(THEME_DATA_PANEL_CONFIG_COLOR_1_END)); + theme->percentageColors_.emplace_back(themeConstants->GetColor(THEME_DATA_PANEL_CONFIG_COLOR_1_START), + themeConstants->GetColor(THEME_DATA_PANEL_CONFIG_COLOR_1_END)); + theme->percentageColors_.emplace_back(themeConstants->GetColor(THEME_DATA_PANEL_CONFIG_COLOR_2_START), + themeConstants->GetColor(THEME_DATA_PANEL_CONFIG_COLOR_2_END)); + theme->percentageColors_.emplace_back(themeConstants->GetColor(THEME_DATA_PANEL_CONFIG_COLOR_3_START), + themeConstants->GetColor(THEME_DATA_PANEL_CONFIG_COLOR_3_END)); + theme->percentageColors_.emplace_back(themeConstants->GetColor(THEME_DATA_PANEL_CONFIG_COLOR_4_START), + themeConstants->GetColor(THEME_DATA_PANEL_CONFIG_COLOR_4_END)); + theme->percentageColors_.emplace_back(themeConstants->GetColor(THEME_DATA_PANEL_CONFIG_COLOR_5_START), + themeConstants->GetColor(THEME_DATA_PANEL_CONFIG_COLOR_5_END)); + theme->percentageColors_.emplace_back(themeConstants->GetColor(THEME_DATA_PANEL_CONFIG_COLOR_6_START), + themeConstants->GetColor(THEME_DATA_PANEL_CONFIG_COLOR_6_END)); + theme->percentageColors_.emplace_back(themeConstants->GetColor(THEME_DATA_PANEL_CONFIG_COLOR_7_START), + themeConstants->GetColor(THEME_DATA_PANEL_CONFIG_COLOR_7_END)); + theme->percentageColors_.emplace_back(themeConstants->GetColor(THEME_DATA_PANEL_CONFIG_COLOR_8_START), + themeConstants->GetColor(THEME_DATA_PANEL_CONFIG_COLOR_8_END)); + theme->percentageColors_.emplace_back(themeConstants->GetColor(THEME_DATA_PANEL_CONFIG_COLOR_9_START), + themeConstants->GetColor(THEME_DATA_PANEL_CONFIG_COLOR_9_END)); + ParsePattern(themeConstants->GetThemeStyle(), theme); + return theme; + } + + private: + void ParsePattern(const RefPtr& themeStyle, const RefPtr& theme) const + { + if (!themeStyle) { + return; + } + auto dataPanelPattern = themeStyle->GetAttr>(THEME_PATTERN_DATA_PANEL, nullptr); + if (!dataPanelPattern) { + return; + } + theme->backgroundColor_ = dataPanelPattern->GetAttr(DATA_PANEL_TRACK_COLOR, Color::BLACK); + theme->loadingColors_.first = dataPanelPattern->GetAttr(DATA_PANEL_LOADING_COLOR_END, Color::BLACK); + theme->loadingColors_.second = + dataPanelPattern->GetAttr(DATA_PANEL_LOADING_COLOR_START, Color::BLACK); + theme->progressColors_.first = + dataPanelPattern->GetAttr(DATA_PANEL_PROGRESS_COLOR_END, Color::BLACK); + theme->progressColors_.second = + dataPanelPattern->GetAttr(DATA_PANEL_PROGRESS_COLOR_START, Color::BLACK); + theme->percentageColors_.clear(); + theme->percentageColors_.emplace_back( + dataPanelPattern->GetAttr(DATA_PANEL_COLOR_1_START, Color::BLACK), + dataPanelPattern->GetAttr(DATA_PANEL_COLOR_1_END, Color::BLACK)); + theme->percentageColors_.emplace_back( + dataPanelPattern->GetAttr(DATA_PANEL_COLOR_2_START, Color::BLACK), + dataPanelPattern->GetAttr(DATA_PANEL_COLOR_2_END, Color::BLACK)); + theme->percentageColors_.emplace_back( + dataPanelPattern->GetAttr(DATA_PANEL_COLOR_3_START, Color::BLACK), + dataPanelPattern->GetAttr(DATA_PANEL_COLOR_3_END, Color::BLACK)); + theme->percentageColors_.emplace_back( + dataPanelPattern->GetAttr(DATA_PANEL_COLOR_4_START, Color::BLACK), + dataPanelPattern->GetAttr(DATA_PANEL_COLOR_4_END, Color::BLACK)); + theme->percentageColors_.emplace_back( + dataPanelPattern->GetAttr(DATA_PANEL_COLOR_5_START, Color::BLACK), + dataPanelPattern->GetAttr(DATA_PANEL_COLOR_5_END, Color::BLACK)); + theme->percentageColors_.emplace_back( + dataPanelPattern->GetAttr(DATA_PANEL_COLOR_6_START, Color::BLACK), + dataPanelPattern->GetAttr(DATA_PANEL_COLOR_6_END, Color::BLACK)); + theme->percentageColors_.emplace_back( + dataPanelPattern->GetAttr(DATA_PANEL_COLOR_7_START, Color::BLACK), + dataPanelPattern->GetAttr(DATA_PANEL_COLOR_7_END, Color::BLACK)); + theme->percentageColors_.emplace_back( + dataPanelPattern->GetAttr(DATA_PANEL_COLOR_8_START, Color::BLACK), + dataPanelPattern->GetAttr(DATA_PANEL_COLOR_8_END, Color::BLACK)); + theme->percentageColors_.emplace_back( + dataPanelPattern->GetAttr(DATA_PANEL_COLOR_9_START, Color::BLACK), + dataPanelPattern->GetAttr(DATA_PANEL_COLOR_9_END, Color::BLACK)); + } + }; + + const std::pair& GetLoadingColor() const + { + return loadingColors_; + } + + const std::pair& GetProgressColor() const + { + return progressColors_; + } + + const Color& GetBackgroundColor() const + { + return backgroundColor_; + } + + const Dimension& GetDefaultHeight() const + { + return defaultHeight_; + } + + const Dimension& GetDefaultWidth() const + { + return defaultWidth_; + } + + const Dimension& GetThickness() const + { + return thickness_; + } + + const std::vector> GetColorsArray() const + { + return percentageColors_; + } + +protected: +private: + std::vector> percentageColors_; + std::pair loadingColors_; + std::pair progressColors_; + Color backgroundColor_; + Dimension defaultHeight_; + Dimension defaultWidth_; + Dimension thickness_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DATA_PANEL_DATA_PANEL_THEME_H diff --git a/frameworks/core/components/data_panel/flutter_render_data_panel.cpp b/frameworks/core/components/data_panel/flutter_render_data_panel.cpp new file mode 100644 index 00000000..ee30b54b --- /dev/null +++ b/frameworks/core/components/data_panel/flutter_render_data_panel.cpp @@ -0,0 +1,537 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/data_panel/flutter_render_data_panel.h" + +#include "flutter/lib/ui/ui_dart_state.h" +#include "third_party/skia/include/core/SkMaskFilter.h" +#include "third_party/skia/include/core/SkShader.h" +#include "third_party/skia/include/effects/Sk1DPathEffect.h" +#include "third_party/skia/include/effects/SkDashPathEffect.h" +#include "third_party/skia/include/effects/SkGradientShader.h" + +namespace OHOS::Ace { +namespace { + +constexpr double START_COLOR_TRANSITION_EDGE = 30.0; +constexpr double HALF_CIRCLE = 180.0; +constexpr double QUARTER_CIRCLE = 90.0; +constexpr double PRECISION_CORRECTION = 0.5; +constexpr double SCAN_DEGREE = 30; +constexpr int32_t CIRCLE_NUMBER = 50; +constexpr float SHADOW_BLUR_RADIUS = 5.0f; +constexpr double DIAMETER_TO_THICKNESS_RATIO = 0.12; + +} // namespace + +void PaintTrackBackground( + const ScopedCanvas& canvas, const Offset& center, double thickness, const Color& color, double diameter) +{ + SkPaint backgroundTrackData; + SkPath backgroundTrackPath; + + SkRect rect = SkRect::MakeXYWH(center.GetX() - diameter / 2 + thickness / 2, + center.GetY() - diameter / 2 + thickness / 2, diameter - thickness, diameter - thickness); + backgroundTrackPath.addArc(rect, 0.0, HALF_CIRCLE * 2); + backgroundTrackData.setStyle(SkPaint::kStroke_Style); + backgroundTrackData.setStrokeWidth(thickness); + backgroundTrackData.setAntiAlias(true); + backgroundTrackData.setColor(color.GetValue()); + + canvas->canvas()->drawPath(backgroundTrackPath, backgroundTrackData); +} + +sk_sp BlendSkShader(SkScalar cx, SkScalar cy, const SkColor colors[], const SkScalar pos[], int colorCount, + SkScalar startAngle, SkScalar drawAngle, const SkMatrix* localMatrix, bool useAnimator = false, + bool useEffect = false) +{ + // the skia interface is more than 5 params. + const Color HIGHLIGHT = Color::FromString("#55ffffff"); + const Color SHADOW = Color::FromString("#00ffffff"); + SkColor scanColors[3] = { SHADOW.GetValue(), HIGHLIGHT.GetValue(), SHADOW.GetValue() }; + SkScalar scanPos[3] = { 0, 0.80, 1 }; + sk_sp scanShader; + sk_sp backgroundShader; + sk_sp blendShader; + + double scanStartDegree = 0.0; + double scanEndDegree = drawAngle; + if (startAngle < SCAN_DEGREE) { + scanStartDegree = 0.0; + scanEndDegree = startAngle; + } else { + scanStartDegree = startAngle - SCAN_DEGREE; + scanEndDegree = startAngle; + } + if (drawAngle < scanEndDegree + 0.1 * drawAngle) { + scanColors[1] = + HIGHLIGHT.ChangeAlpha(((drawAngle - scanEndDegree) / (0.1 * drawAngle)) * HIGHLIGHT.GetAlpha()).GetValue(); + } +#ifdef USE_SYSTEM_SKIA + backgroundShader = + SkGradientShader::MakeSweep(cx, cy, colors, pos, 2, SkShader::kDecal_TileMode, 0.0, drawAngle, 0, nullptr); + scanShader = SkGradientShader::MakeSweep( + cx, cy, scanColors, scanPos, 3, SkShader::kDecal_TileMode, scanStartDegree, scanEndDegree, 0, nullptr); + if (useAnimator) { + blendShader = SkShader::MakeCompose(backgroundShader, scanShader, SkBlendMode::kSrcOver); + } else { + blendShader = backgroundShader; + } +#else + backgroundShader = + SkGradientShader::MakeSweep(cx, cy, colors, pos, 2, SkTileMode::kDecal, 0.0, drawAngle, 0, nullptr); + scanShader = SkGradientShader::MakeSweep( + cx, cy, scanColors, scanPos, 3, SkTileMode::kDecal, scanStartDegree, scanEndDegree, 0, nullptr); + if (useAnimator) { + blendShader = SkShaders::Blend(SkBlendMode::kSrcOver, backgroundShader, scanShader); + } else { + blendShader = backgroundShader; + } +#endif + return blendShader; +} + +void PaintProgress( + ScopedCanvas& canvas, ArcData arcData, bool useEffect = false, bool useAnimator = false, double percent = 0.0) +{ + double thickness = arcData.thickness; + double radius = arcData.radius; + double progress = arcData.progress; + if (GreatNotEqual(progress, 100.0)) { + progress = 100.0; + } + if (LessNotEqual(progress, 0.0)) { + progress = 0.0; + } + Offset center = arcData.center; + // for example whole circle is 100 which is divided into 100 piece 360 / 100 = 3.6 + double drawAngle = arcData.wholeAngle * 0.01 * progress; + double startAngle = arcData.startAngle; + + if (useEffect) { + radius = radius - SHADOW_BLUR_RADIUS; + } + SkPath botPath; + SkRect rect = SkRect::MakeXYWH(center.GetX() - radius + thickness / 2, center.GetY() - radius + thickness / 2, + radius * 2 - thickness, radius * 2 - thickness); + botPath.addArc(rect, 0.0, drawAngle); + SkColor colors[2] = { arcData.startColor.GetValue(), arcData.endColor.GetValue() }; + SkScalar pos[2] = { 0.0, 1.0 }; + SkPaint gradientPaint; + gradientPaint.setStyle(SkPaint::kStroke_Style); + gradientPaint.setStrokeWidth(thickness); + gradientPaint.setAntiAlias(true); + if (NearEqual(progress, 0.0)) { + return; + } + SkPaint startCirclePaint; + startCirclePaint.setStyle(SkPaint::kFill_Style); + startCirclePaint.setAntiAlias(true); + startCirclePaint.setColor(arcData.startColor.GetValue()); + + SkPaint endCirclePaint; + endCirclePaint.setStyle(SkPaint::kFill_Style); + endCirclePaint.setAntiAlias(true); + endCirclePaint.setColor(arcData.endColor.GetValue()); + // this part is used to draw the circle edge + if (useEffect) { + gradientPaint.setMaskFilter(SkMaskFilter::MakeBlur(kNormal_SkBlurStyle, SHADOW_BLUR_RADIUS)); + startCirclePaint.setMaskFilter(SkMaskFilter::MakeBlur(kNormal_SkBlurStyle, SHADOW_BLUR_RADIUS)); + endCirclePaint.setMaskFilter(SkMaskFilter::MakeBlur(kNormal_SkBlurStyle, SHADOW_BLUR_RADIUS)); + } + canvas->canvas()->save(); + + if (progress > 50) { + // this component contains three parts one edge circle, one half circle and a path region. + canvas->canvas()->save(); + canvas->canvas()->rotate(startAngle, center.GetX(), center.GetY()); + canvas->canvas()->drawCircle( + center.GetX(), center.GetY() - radius + thickness / 2, thickness / 2, startCirclePaint); + canvas->canvas()->restore(); + + canvas->canvas()->save(); + + gradientPaint.setShader(BlendSkShader(center.GetX(), center.GetY(), colors, pos, 2, percent * drawAngle, + drawAngle, nullptr, useAnimator, useEffect)); + canvas->canvas()->rotate(startAngle - QUARTER_CIRCLE, center.GetX(), center.GetY()); + canvas->canvas()->drawPath(botPath, gradientPaint); + canvas->canvas()->restore(); + + canvas->canvas()->save(); + canvas->canvas()->rotate(drawAngle + startAngle, center.GetX(), center.GetY()); + canvas->canvas()->drawCircle( + center.GetX(), center.GetY() - radius + thickness / 2, thickness / 2, endCirclePaint); + canvas->canvas()->restore(); + } else { + // this component contains three parts two edge circle and a path region. + if (progress < START_COLOR_TRANSITION_EDGE) { + startCirclePaint.setColor(Color::LineColorTransition( + arcData.endColor, arcData.startColor, progress / START_COLOR_TRANSITION_EDGE).GetValue()); + } else { + startCirclePaint.setColor(arcData.startColor.GetValue()); + } + // draw start edge circle + canvas->canvas()->save(); + canvas->canvas()->rotate(startAngle, center.GetX(), center.GetY()); + canvas->canvas()->drawCircle( + center.GetX(), center.GetY() - radius + thickness / 2, thickness / 2, startCirclePaint); + canvas->canvas()->restore(); + + // draw end edge circle + canvas->canvas()->save(); + canvas->canvas()->rotate(startAngle + drawAngle - PRECISION_CORRECTION, center.GetX(), center.GetY()); + SkRect endOval = SkRect::MakeXYWH(center.GetX() - thickness / 2, center.GetY() - radius, thickness, thickness); + canvas->canvas()->drawArc(endOval, 3 * QUARTER_CIRCLE, HALF_CIRCLE, true, endCirclePaint); + canvas->canvas()->restore(); + + // draw the region between start and end. + canvas->canvas()->save(); + canvas->canvas()->rotate(startAngle - QUARTER_CIRCLE, center.GetX(), center.GetY()); + if (progress < START_COLOR_TRANSITION_EDGE) { + colors[0] = Color::LineColorTransition( + arcData.endColor, arcData.startColor, progress / START_COLOR_TRANSITION_EDGE).GetValue(); + gradientPaint.setShader(BlendSkShader(center.GetX(), center.GetY(), colors, pos, 2, percent * drawAngle, + drawAngle, nullptr, useAnimator, useEffect)); + } else { + gradientPaint.setShader(BlendSkShader(center.GetX(), center.GetY(), colors, pos, 2, percent * drawAngle, + drawAngle, nullptr, useAnimator, useEffect)); + } + canvas->canvas()->drawPath(botPath, gradientPaint); + canvas->canvas()->restore(); + } + canvas->canvas()->restore(); +} + +void PaintProgressFilterMask(ScopedCanvas& canvas, ArcData arcData) +{ + if (LessOrEqual(arcData.progress, 0.0)) { + return; + } + if (GreatNotEqual(arcData.progress, 100.0)) { + arcData.progress = 100.0; + } + double thickness = arcData.thickness; + double radius = arcData.radius - SHADOW_BLUR_RADIUS; + Offset center = arcData.center; + SkPaint filterPaint; + filterPaint.setAntiAlias(true); + filterPaint.setStrokeCap(SkPaint::kButt_Cap); + filterPaint.setStrokeWidth(thickness); + filterPaint.setStyle(SkPaint::kStroke_Style); + filterPaint.setMaskFilter(SkMaskFilter::MakeBlur(kNormal_SkBlurStyle, SHADOW_BLUR_RADIUS)); + SkRect rect = SkRect::MakeXYWH(center.GetX() - radius + thickness / 2, center.GetY() - radius + thickness / 2, + radius * 2 - thickness, radius * 2 - thickness); + double startAngle = arcData.startAngle; + + // paint start circle + SkPaint startCirclePaint; + startCirclePaint.setStyle(SkPaint::kStrokeAndFill_Style); + startCirclePaint.setAntiAlias(true); + startCirclePaint.setColor(arcData.startColor.ChangeAlpha(101).GetValue()); + startCirclePaint.setMaskFilter(SkMaskFilter::MakeBlur(kNormal_SkBlurStyle, SHADOW_BLUR_RADIUS)); + SkPath startCircleArch; + SkRect startCircleArchRect = + SkRect::MakeXYWH(center.GetX() - thickness / 2, center.GetY() - radius, thickness, thickness); + canvas->canvas()->drawCircle( + center.GetX(), center.GetY() - radius + thickness / 2, thickness / 2, startCirclePaint); + canvas->canvas()->drawPath(startCircleArch, startCirclePaint); + + // paint path + canvas->canvas()->save(); + canvas->canvas()->rotate(-QUARTER_CIRCLE + 1, center.GetX(), center.GetY()); + double sweepAngle = arcData.progress * 0.01 * arcData.wholeAngle; + SkPath rainbowFilterPath; + rainbowFilterPath.addArc(rect, startAngle, sweepAngle); + // 101 is Opacity 40% + SkColor colors[2] = { arcData.startColor.ChangeAlpha(101).GetValue(), + arcData.endColor.ChangeAlpha(101).GetValue() }; + SkScalar pos[2] = { 0.0, 1.0 }; + // kClamp_TileMode +#ifdef USE_SYSTEM_SKIA + filterPaint.setShader(SkGradientShader::MakeSweep(center.GetX(), center.GetY(), colors, pos, 2, + SkShader::kDecal_TileMode, startAngle, startAngle + sweepAngle, 0, nullptr)); +#else + filterPaint.setShader(SkGradientShader::MakeSweep(center.GetX(), center.GetY(), colors, pos, 2, SkTileMode::kDecal, + startAngle, startAngle + sweepAngle, 0, nullptr)); +#endif + canvas->canvas()->drawPath(rainbowFilterPath, filterPaint); + startAngle += sweepAngle; + + // paint end circle + canvas->canvas()->save(); + SkPaint endCirclePaint; + endCirclePaint.setStyle(SkPaint::kStrokeAndFill_Style); + endCirclePaint.setAntiAlias(true); + endCirclePaint.setColor(arcData.endColor.ChangeAlpha(101).GetValue()); + endCirclePaint.setMaskFilter(SkMaskFilter::MakeBlur(kNormal_SkBlurStyle, SHADOW_BLUR_RADIUS)); + SkPath endCircleArch; + endCircleArch.addArc(startCircleArchRect, 90.0, -180.0); + canvas->canvas()->rotate(startAngle + QUARTER_CIRCLE, center.GetX(), center.GetY()); + canvas->canvas()->drawPath(endCircleArch, endCirclePaint); + canvas->canvas()->restore(); + + canvas->canvas()->restore(); +} + +void PaintFilterMask(ScopedCanvas& canvas, ArcData arcData) +{ + PaintProgressFilterMask(canvas, arcData); +} + +void PaintRainbowFilterMask(ScopedCanvas& canvas, double factor, const std::vector& segments, ArcData arcData) +{ + if (segments.empty()) { + return; + } + double thickness = arcData.thickness; + double radius = arcData.radius - SHADOW_BLUR_RADIUS; + Offset center = arcData.center; + SkPaint filterPaint; + filterPaint.setAntiAlias(true); + filterPaint.setStrokeCap(SkPaint::kButt_Cap); + filterPaint.setStrokeWidth(thickness); + filterPaint.setStyle(SkPaint::kStroke_Style); + filterPaint.setMaskFilter(SkMaskFilter::MakeBlur(kNormal_SkBlurStyle, SHADOW_BLUR_RADIUS)); + SkRect rect = SkRect::MakeXYWH(center.GetX() - radius + thickness / 2, center.GetY() - radius + thickness / 2, + radius * 2 - thickness, radius * 2 - thickness); + double startAngle = arcData.startAngle; + + canvas->canvas()->save(); + canvas->canvas()->rotate(startAngle, center.GetX(), center.GetY()); + SkPaint startCirclePaint; + startCirclePaint.setStyle(SkPaint::kStrokeAndFill_Style); + startCirclePaint.setAntiAlias(true); + startCirclePaint.setColor(segments[0].GetStartColor().ChangeAlpha(101).GetValue()); + startCirclePaint.setMaskFilter(SkMaskFilter::MakeBlur(kNormal_SkBlurStyle, SHADOW_BLUR_RADIUS)); + SkPath startCircleArch; + SkRect startCircleArchRect = + SkRect::MakeXYWH(center.GetX() - thickness / 2, center.GetY() - radius, thickness, thickness); + startCircleArch.addArc(startCircleArchRect, 90.0, 180.0); + canvas->canvas()->drawPath(startCircleArch, startCirclePaint); + canvas->canvas()->restore(); + + canvas->canvas()->save(); + canvas->canvas()->rotate(-QUARTER_CIRCLE + 1, center.GetX(), center.GetY()); + for (const auto& segment : segments) { + double sweepAngle = segment.GetValue() * 0.01 * arcData.wholeAngle * factor; + if (GreatNotEqual(sweepAngle, arcData.wholeAngle)) { + sweepAngle = arcData.wholeAngle; + } + SkPath rainbowFilterPath; + rainbowFilterPath.addArc(rect, startAngle, sweepAngle); + SkColor colors[2] = { segment.GetStartColor().ChangeAlpha(101).GetValue(), + segment.GetEndColor().ChangeAlpha(101).GetValue() }; + SkScalar pos[2] = { 0.0, 1.0 }; +#ifdef USE_SYSTEM_SKIA + filterPaint.setShader(SkGradientShader::MakeSweep(center.GetX(), center.GetY(), colors, pos, 2, + SkShader::kClamp_TileMode, startAngle, startAngle + sweepAngle, 0, nullptr)); +#else + filterPaint.setShader(SkGradientShader::MakeSweep(center.GetX(), center.GetY(), colors, pos, 2, + SkTileMode::kClamp, startAngle, startAngle + sweepAngle, 0, nullptr)); +#endif + canvas->canvas()->drawPath(rainbowFilterPath, filterPaint); + startAngle += sweepAngle; + } + canvas->canvas()->save(); + SkPaint endCirclePaint; + endCirclePaint.setStyle(SkPaint::kStrokeAndFill_Style); + endCirclePaint.setAntiAlias(true); + endCirclePaint.setColor(segments[segments.size() - 1].GetEndColor().ChangeAlpha(101).GetValue()); + endCirclePaint.setMaskFilter(SkMaskFilter::MakeBlur(kNormal_SkBlurStyle, SHADOW_BLUR_RADIUS)); + SkPath endCircleArch; + endCircleArch.addArc(startCircleArchRect, 90.0, -180.0); + canvas->canvas()->rotate(startAngle + QUARTER_CIRCLE, center.GetX(), center.GetY()); + canvas->canvas()->drawPath(endCircleArch, endCirclePaint); + canvas->canvas()->restore(); + + canvas->canvas()->restore(); +} + +void FlutterRenderProgressDataPanel::Paint(RenderContext& context, const Offset& offset) +{ + if (type_ == ChartType::LOADING) { + if (useEffect_) { + PaintEffectedLoadingProgress(context, offset); + } else { + PaintEffectedLoadingProgress(context, offset); + } + } else { + PaintRingProgress(context, offset); + } +} + +void FlutterRenderProgressDataPanel::PaintEffectedLoadingProgress(RenderContext& context, const Offset& offset) +{ + auto canvas = ScopedCanvas::Create(context); + if (!canvas) { + return; + } + const Offset& center = offset + Offset(GetLayoutSize().Width() / 2, GetLayoutSize().Height() / 2); + double diameter = std::min(GetLayoutSize().Width(), GetLayoutSize().Height()); + double thickness = NormalizeToPx(thickness_); + if (autoScale_) { + thickness = diameter * DIAMETER_TO_THICKNESS_RATIO; + } + if (LessOrEqual(diameter, thickness)) { + LOGE("Loading diameter error: %{public}lf thickness: %{public}lf. thickness is reduce to 1/10 of the diameter", + diameter, thickness); + thickness = diameter * 0.1; + } + PaintTrackBackground(canvas, center, thickness, backgroundTrack_, diameter); + + SkPaint circlePaint; + circlePaint.setStyle(SkPaint::kFill_Style); + circlePaint.setAntiAlias(true); + double angle = sweepDegree_; + double dx = 0.0; + double dy = 0.0; + double radius = diameter / 2 - thickness / 2; + double animateAngle = rotateAngle_; + if (animateAngle - angle < 0.0) { + angle = animateAngle; + } + canvas->canvas()->save(); + canvas->canvas()->rotate(animateAngle, center.GetX(), center.GetY()); // animate + for (int i = 0; i < CIRCLE_NUMBER; i++) { + dx = radius * std::sin((CIRCLE_NUMBER - i) * (angle / CIRCLE_NUMBER) * M_PI / 180.0); + dy = radius * std::cos((CIRCLE_NUMBER - i) * (angle / CIRCLE_NUMBER) * M_PI / 180.0); + circlePaint.setColor( + Color::LineColorTransition(GetStartColor(), GetEndColor(), static_cast(i) / CIRCLE_NUMBER) + .GetValue()); + canvas->canvas()->drawCircle(center.GetX() - dx, center.GetY() - dy, thickness / 2, circlePaint); + } + canvas->canvas()->restore(); +} + +void FlutterRenderProgressDataPanel::PaintLoadingProgress(RenderContext& context, const Offset& offset) +{ + auto canvas = ScopedCanvas::Create(context); + if (!canvas) { + return; + } + const Offset& center = offset + Offset(GetLayoutSize().Width() / 2, GetLayoutSize().Height() / 2); + double diameter = std::min(GetLayoutSize().Width(), GetLayoutSize().Height()); + double thickness = NormalizeToPx(thickness_); + if (autoScale_) { + thickness = diameter * DIAMETER_TO_THICKNESS_RATIO; + } + if (LessOrEqual(diameter, thickness)) { + LOGE("Loading diameter error: %{public}lf thickness: %{public}lf. thickness is reduce to 1/10 of the diameter", + diameter, thickness); + thickness = diameter * 0.1; + } + double animateAngle = rotateAngle_ - sweepDegree_; + + SkPaint botPaint; + SkPath botPath; + SkRect rect = SkRect::MakeXYWH(center.GetX() - diameter / 2 + thickness / 2, + center.GetY() - diameter / 2 + thickness / 2, diameter - thickness, diameter - thickness); + botPath.addArc(rect, 0, sweepDegree_); + + SkColor colors[2] = { GetStartColor().GetValue(), GetEndColor().GetValue() }; + SkScalar pos[2] = { 0.0, 1.0 }; + canvas->canvas()->rotate(-QUARTER_CIRCLE, center.GetX(), center.GetY()); + botPaint.setStrokeCap(SkPaint::kRound_Cap); + botPaint.setStyle(SkPaint::kStroke_Style); + botPaint.setStrokeWidth(thickness); + botPaint.setAntiAlias(true); + +#ifdef USE_SYSTEM_SKIA + botPaint.setShader(SkGradientShader::MakeSweep(center.GetX(), center.GetY(), colors, pos, 2, + SkShader::kDecal_TileMode, 0.0, + sweepDegree_ + 2 * PRECISION_CORRECTION + 180.0 / M_PI * std::asin(thickness / ((diameter) / 2)), 0, nullptr)); +#else + botPaint.setShader(SkGradientShader::MakeSweep(center.GetX(), center.GetY(), colors, pos, 2, SkTileMode::kDecal, + 0.0, sweepDegree_ + 2 * PRECISION_CORRECTION + 180.0 / M_PI * std::asin(thickness / ((diameter) / 2)), 0, + nullptr)); +#endif + canvas->canvas()->save(); + PaintTrackBackground(canvas, center, thickness, backgroundTrack_, diameter); + canvas->canvas()->rotate(animateAngle, center.GetX(), center.GetY()); // animate + canvas->canvas()->drawPath(botPath, botPaint); + canvas->canvas()->restore(); +} + +void FlutterRenderProgressDataPanel::PaintRingProgress(RenderContext& context, const Offset& offset) +{ + auto canvas = ScopedCanvas::Create(context); + if (!canvas) { + return; + } + // whole circle is divided into 100 piece 360 / 100 = 3.6 + ArcData arcData; + arcData.progress = GetProgress(); + arcData.center = offset + Offset(GetLayoutSize().Width() / 2, GetLayoutSize().Height() / 2); + arcData.thickness = NormalizeToPx(thickness_); + arcData.radius = std::min(GetLayoutSize().Width(), GetLayoutSize().Height()) / 2; + if (autoScale_) { + arcData.thickness = arcData.radius * 2 * DIAMETER_TO_THICKNESS_RATIO; + } + arcData.startColor = GetStartColor(); + arcData.endColor = GetEndColor(); + PaintTrackBackground(canvas, arcData.center, arcData.thickness, backgroundTrack_, arcData.radius * 2); + if (useEffect_) { + PaintFilterMask(canvas, arcData); + } + PaintProgress(canvas, arcData, false, useEffect_, percent_); +} + +RefPtr RenderProgressDataPanel::Create() +{ + return AceType::MakeRefPtr(); +} + +RefPtr RenderPercentageDataPanel::Create() +{ + return AceType::MakeRefPtr(); +} + +void FlutterRenderPercentageDataPanel::Paint(RenderContext& context, const Offset& offset) +{ + ArcData arcData; + arcData.center = offset + Offset(GetLayoutSize().Width() / 2, GetLayoutSize().Height() / 2); + arcData.thickness = NormalizeToPx(thickness_); + arcData.radius = std::min(GetLayoutSize().Width(), GetLayoutSize().Height()) / 2; + if (autoScale_) { + arcData.thickness = arcData.radius * 2 * DIAMETER_TO_THICKNESS_RATIO; + } + arcData.wholeAngle = GetSweepDegree(); + arcData.startAngle = GetStartDegree(); + double totalValue = GetTotalValue(); + auto segments = GetSegments(); + auto canvas = ScopedCanvas::Create(context); + if (!canvas) { + return; + } + PaintTrackBackground(canvas, arcData.center, arcData.thickness, backgroundTrack_, arcData.radius * 2); + double factor = 1.0; + if (GreatNotEqual(totalValue, 100.0)) { + factor = 100.0 / totalValue; + } + if (useEffect_ && GreatNotEqual(totalValue, 0.0)) { + PaintRainbowFilterMask(canvas, factor * animationPercent_, segments, arcData); + } + totalValue = totalValue * factor; + for (int i = segments.size() - 1; i >= 0; i--) { + const auto& segment = segments[i]; + arcData.startColor = segment.GetStartColor(); + arcData.endColor = segment.GetEndColor(); + arcData.progress = totalValue * animationPercent_; + PaintProgress(canvas, arcData); + totalValue -= segment.GetValue() * factor; + } +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/data_panel/flutter_render_data_panel.h b/frameworks/core/components/data_panel/flutter_render_data_panel.h new file mode 100644 index 00000000..1e6fe107 --- /dev/null +++ b/frameworks/core/components/data_panel/flutter_render_data_panel.h @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DATA_PANEL_FLUTTER_RENDER_DATA_PANEL_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DATA_PANEL_FLUTTER_RENDER_DATA_PANEL_H + +#include "core/components/data_panel/render_data_panel.h" +#include "core/pipeline/base/scoped_canvas_state.h" +#include "core/pipeline/layers/offset_layer.h" + +namespace OHOS::Ace { + +struct ArcData { + Offset center; + double progress = 0.0; + double radius = 0.0; + double thickness = 0.0; + Color startColor; + Color endColor; + + double wholeAngle = 360.0; + double startAngle = 0.0; +}; + +class FlutterRenderProgressDataPanel : public RenderProgressDataPanel { + DECLARE_ACE_TYPE(FlutterRenderProgressDataPanel, RenderProgressDataPanel); + +public: + void Paint(RenderContext& context, const Offset& offset) override; + + void PaintLoadingProgress(RenderContext& context, const Offset& offset); + void PaintEffectedLoadingProgress(RenderContext& context, const Offset& offset); + void PaintRingProgress(RenderContext& context, const Offset& offset); + + RenderLayer GetRenderLayer() override + { + if (IsRepaintBoundary()) { + if (!layer_) { + layer_ = AceType::MakeRefPtr(); + } + } else { + layer_ = nullptr; + } + return AceType::RawPtr(layer_); + } + +private: + RefPtr layer_; +}; + +class FlutterRenderPercentageDataPanel : public RenderPercentageDataPanel { + DECLARE_ACE_TYPE(FlutterRenderPercentageDataPanel, RenderPercentageDataPanel); + +public: + void Paint(RenderContext& context, const Offset& offset) override; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DATA_PANEL_FLUTTER_RENDER_DATA_PANEL_H diff --git a/frameworks/core/components/data_panel/render_data_panel.cpp b/frameworks/core/components/data_panel/render_data_panel.cpp new file mode 100644 index 00000000..5ecda57c --- /dev/null +++ b/frameworks/core/components/data_panel/render_data_panel.cpp @@ -0,0 +1,245 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/data_panel/render_data_panel.h" + +#include "core/animation/spring_animation.h" + +namespace OHOS::Ace { +namespace { + +constexpr double MILLISECOND_PER_PERCENT = 20.0; +constexpr double MAX_TRANSITION_TIME = 5000.0; +constexpr double MIN_TRANSITION_TIME = 200.0; +constexpr double SECOND_TO_MILLISECOND = 1000.0; + +} // namespace + +RenderDataPanel::RenderDataPanel() : RenderNode(true) {} + +void RenderDataPanel::Update(const RefPtr& component) +{ + const RefPtr dataPanelComponent = AceType::DynamicCast(component); + if (!dataPanelComponent) { + return; + } + height_ = dataPanelComponent->GetDefaultHeight(); + width_ = dataPanelComponent->GetDefaultWidth(); + measureType_ = dataPanelComponent->GetMeasureType(); + type_ = dataPanelComponent->GetPanelType(); + thickness_ = dataPanelComponent->GetThickness(); + useEffect_ = dataPanelComponent->GetEffects(); + backgroundTrack_ = dataPanelComponent->GetTrackColor(); + autoScale_ = dataPanelComponent->GetAutoScale(); + + if (animationInitialized_) { + return; + } + + auto pipelineContext = GetContext().Upgrade(); + if (!pipelineContext) { + return; + } + if (!animator_) { + animator_ = AceType::MakeRefPtr(pipelineContext); + } + if (!progressTransitionController_) { + progressTransitionController_ = AceType::MakeRefPtr(pipelineContext); + } +} + +const Size RenderDataPanel::Measure() +{ + if (measureType_ == MeasureType::CONTENT) { + return Size(NormalizeToPx(width_), NormalizeToPx(height_)); + } else if (measureType_ == MeasureType::PARENT) { + Size maxSize = GetLayoutParam().GetMaxSize(); + return Size(maxSize.Width(), maxSize.Height()); + } else { + Size maxSize = GetLayoutParam().GetMaxSize(); + return Size(maxSize.Width(), maxSize.Height()); + } +} + +void RenderDataPanel::PerformLayout() +{ + Size panelSize = Measure(); + SetLayoutSize(panelSize); + if (type_ == ChartType::LOADING || (type_ == ChartType::RAINBOW && needReplayAnimation_)) { + PlayAnimation(); + } + needReplayAnimation_ = false; +} + +void RenderDataPanel::OnVisibleChanged() +{ + AnimationChanged(); +} + +void RenderDataPanel::OnHiddenChanged(bool hidden) +{ + AnimationChanged(); +} + +void RenderDataPanel::AnimationChanged() +{ + if (type_ == ChartType::LOADING && GetVisible() && !GetHidden()) { + if (animator_) { + // when the dataPanel is visible, reset to user defined state. + isUserSetPlay_ ? animator_->Play() : animator_->Pause(); + } else { + LOGI("fail to start progress animation"); + } + } else { + if (animator_) { + animator_->Pause(); + } else { + LOGI("fail to stop progress animation"); + } + } +} + +void RenderProgressDataPanel::Update(const RefPtr& component) +{ + RenderDataPanel::Update(component); + const RefPtr dataPanelComponent = + AceType::DynamicCast(component); + if (!dataPanelComponent) { + return; + } + startColor_ = dataPanelComponent->GetStartColor(); + endColor_ = dataPanelComponent->GetEndColor(); + // if the type is changed, need to initialize the animator + if (isLoading_ != (dataPanelComponent->GetPanelType() == ChartType::LOADING)) { + animationInitialized_ = false; + } + isLoading_ = dataPanelComponent->GetPanelType() == ChartType::LOADING ? true : false; + auto animationStartProgress = dataPanelComponent->GetProgressValue(); + auto needUpdateAnimation = false; + if (!NearEqual(animationStartProgress, previousPercentValue_)) { + animationDuring_ = std::chrono::steady_clock::now() - previousUpdateTime_; + percentChange_ = animationStartProgress - previousPercentValue_; + previousPercentValue_ = animationStartProgress; + previousUpdateTime_ = std::chrono::steady_clock::now(); + needUpdateAnimation = true; + } + if (GreatNotEqual(progress_, 100.0)) { + LOGI("chart value %{public}lf is larger than 100.0", progress_); + progress_ = 100.0; + } + if (LessNotEqual(progress_, 0.0)) { + LOGI("chart value %{public}lf is smaller than 0.0", progress_); + progress_ = 0.0; + } + if (isLoading_ && !animationInitialized_) { + animation_ = AceType::MakeRefPtr>(0.0, 2.0, Curves::LINEAR); + animation_->AddListener([this](const double& value) { + rotateAngle_ = 360 * (1 - std::cos(M_PI * value / 2.0) + value / 2.0) / 3; + if (value > 1.0) { + sweepDegree_ = 90.0 * (2 - value); + } else { + sweepDegree_ = 90.0 * value; + } + MarkNeedRender(); + }); + PrepareAnimation(); + PlayAnimation(); + animationInitialized_ = true; + } else if (!isLoading_ && needUpdateAnimation) { + animation_ = AceType::MakeRefPtr>(0.0, 1.5, Curves::LINEAR); + animation_->AddListener([this](const double& value) { + percent_ = value; + if (percent_ > 1.0) { + percent_ = 1.0; + } + MarkNeedRender(); + }); + + transitionAnimation_ = + AceType::MakeRefPtr>(progress_, previousPercentValue_, Curves::EASE_OUT); + transitionAnimation_->AddListener([this](const double& value) { + progress_ = value; + MarkNeedRender(); + }); + PrepareAnimation(); + StopAnimation(); + PlayAnimation(); + animationInitialized_ = true; + } +} + +void RenderProgressDataPanel::PrepareAnimation() +{ + if (animator_) { + animator_->AddInterpolator(animation_); + animator_->SetDuration(2000); + animator_->SetIteration(ANIMATION_REPEAT_INFINITE); + } + + if (progressTransitionController_) { + double animationTime = 0.0; + if (std::abs(percentChange_ * MILLISECOND_PER_PERCENT) > animationDuring_.count() * SECOND_TO_MILLISECOND) { + animationTime = std::abs(percentChange_ * MILLISECOND_PER_PERCENT); + } else { + animationTime = animationDuring_.count() * SECOND_TO_MILLISECOND; + } + + if (animationTime < MIN_TRANSITION_TIME || previousPercentValue_ == 100.0) { + animationTime = MIN_TRANSITION_TIME; + } else if (animationTime > MAX_TRANSITION_TIME) { + animationTime = MAX_TRANSITION_TIME; + } + progressTransitionController_->AddInterpolator(transitionAnimation_); + progressTransitionController_->SetDuration(animationTime); + progressTransitionController_->SetIteration(1); + } +} + +void RenderPercentageDataPanel::PrepareAnimation() +{ + if (animator_) { + animator_->SetDuration(3000); + animator_->SetIteration(1); + } +} + +void RenderPercentageDataPanel::Update(const RefPtr& component) +{ + RenderDataPanel::Update(component); + const RefPtr dataPanelComponent = + AceType::DynamicCast(component); + if (!dataPanelComponent) { + return; + } + startDegree_ = dataPanelComponent->GetStartDegree(); + sweepDegree_ = dataPanelComponent->GetSweepDegree(); + segments_ = dataPanelComponent->GetSegments(); + totalValue_ = dataPanelComponent->GetTotalValue(); + if (!animationInitialized_) { + auto springProperty = AceType::MakeRefPtr(1.0f, 100.0f, 15.0f); + auto springAnimation = AceType::MakeRefPtr(springProperty); + springAnimation->AddListener([this](const double& value) { + animationPercent_ = value; + MarkNeedRender(); + }); + animator_->AddInterpolator(springAnimation); + PrepareAnimation(); + animationInitialized_ = true; + } + needReplayAnimation_ = true; + MarkNeedLayout(); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/data_panel/render_data_panel.h b/frameworks/core/components/data_panel/render_data_panel.h new file mode 100644 index 00000000..ae13a3f2 --- /dev/null +++ b/frameworks/core/components/data_panel/render_data_panel.h @@ -0,0 +1,200 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DATA_PANEL_RENDER_DATA_PANEL_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DATA_PANEL_RENDER_DATA_PANEL_H + +#include + +#include "core/animation/animator.h" +#include "core/animation/curve_animation.h" +#include "core/components/data_panel/data_panel_component.h" +#include "core/pipeline/base/component.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderDataPanel : public RenderNode { + DECLARE_ACE_TYPE(RenderDataPanel, RenderNode); + +public: + ~RenderDataPanel() override = default; + void Update(const RefPtr& component) override; + static RefPtr Create(); + virtual void PlayAnimation() = 0; + virtual void StopAnimation() = 0; + +protected: + RenderDataPanel(); + + const Size Measure(); + void PerformLayout() override; + virtual void PrepareAnimation() = 0; + void OnVisibleChanged() override; + void OnHiddenChanged(bool hidden) override; + void AnimationChanged(); + + MeasureType measureType_ = MeasureType::PARENT; + ChartType type_ = ChartType::LINE; + Dimension thickness_; + Color backgroundTrack_ = Color::FromString("#08000000"); + bool autoScale_ = false; + + RefPtr animator_; + RefPtr progressTransitionController_; + double rotateAngle_ = 0.0; + double sweepDegree_ = 0.0; + double percent_ = 0.0; + bool useEffect_ = false; + bool animationInitialized_ = false; + bool isUserSetPlay_ = false; + + double previousPercentValue_ = 0.0; + double percentChange_ = 0.0; + std::chrono::steady_clock::time_point previousUpdateTime_ = std::chrono::steady_clock::now(); + std::chrono::duration animationDuring_; + + bool needReplayAnimation_ = false; + +private: + // data panel default height and width + Dimension height_; + Dimension width_; +}; + +class RenderProgressDataPanel : public RenderDataPanel { + DECLARE_ACE_TYPE(RenderProgressDataPanel, RenderDataPanel); + +public: + static RefPtr Create(); + void Update(const RefPtr& component) override; + + const Color& GetStartColor() const + { + return startColor_; + } + + const Color& GetEndColor() const + { + return endColor_; + } + + bool IsRepaintBoundary() const override + { + return true; + } + + void PlayAnimation() override + { + if (animator_) { + animator_->Play(); + isUserSetPlay_ = true; + } + + if (!isLoading_ && progressTransitionController_) { + progressTransitionController_->Play(); + isUserSetPlay_ = true; + } + } + + void StopAnimation() override + { + if (animator_) { + animator_->Stop(); + isUserSetPlay_ = false; + } + + if (!isLoading_ && progressTransitionController_) { + progressTransitionController_->Stop(); + isUserSetPlay_ = false; + } + } + +protected: + void PrepareAnimation() override; + double GetProgress() const + { + return progress_; + } + +private: + Color startColor_; + Color endColor_; + double progress_ = 0.0; + bool isLoading_ = false; + + RefPtr> animation_; + RefPtr> transitionAnimation_; +}; + +class RenderPercentageDataPanel : public RenderDataPanel { + DECLARE_ACE_TYPE(RenderPercentageDataPanel, RenderDataPanel); + +public: + static RefPtr Create(); + void Update(const RefPtr& component) override; + + void PlayAnimation() override + { + if (animator_) { + animator_->Play(); + isUserSetPlay_ = true; + } + } + + void StopAnimation() override + { + if (animator_) { + animator_->Pause(); + isUserSetPlay_ = false; + } + } + +protected: + void PrepareAnimation() override; + + double GetTotalValue() const + { + return totalValue_; + } + + const std::vector& GetSegments() const + { + return segments_; + } + + double GetStartDegree() const + { + return startDegree_; + } + + double GetSweepDegree() const + { + return sweepDegree_; + } + + double animationPercent_ = 0.0; + +private: + double startDegree_ = 0.0; + double sweepDegree_ = 360.0; + std::vector segments_; + double totalValue_ = 0.0; + RefPtr> animation_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DATA_PANEL_RENDER_DATA_PANEL_H diff --git a/frameworks/core/components/dialog/BUILD.gn b/frameworks/core/components/dialog/BUILD.gn new file mode 100644 index 00000000..6b5fdd55 --- /dev/null +++ b/frameworks/core/components/dialog/BUILD.gn @@ -0,0 +1,23 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("dialog") { + sources = [ + "dialog_component.cpp", + "dialog_element.cpp", + "flutter_render_dialog.cpp", + "render_dialog.cpp", + ] +} diff --git a/frameworks/core/components/dialog/dialog_component.cpp b/frameworks/core/components/dialog/dialog_component.cpp new file mode 100644 index 00000000..05947bc9 --- /dev/null +++ b/frameworks/core/components/dialog/dialog_component.cpp @@ -0,0 +1,700 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/dialog/dialog_component.h" + +#include "base/geometry/dimension.h" +#include "base/i18n/localization.h" +#include "base/log/log.h" +#include "base/resource/internal_resource.h" +#include "base/utils/system_properties.h" +#include "core/animation/curve_animation.h" +#include "core/animation/curves.h" +#include "core/animation/keyframe.h" +#include "core/animation/keyframe_animation.h" +#include "core/components/box/box_component.h" +#include "core/components/button/button_theme.h" +#include "core/components/common/layout/constants.h" +#include "core/components/common/properties/color.h" +#include "core/components/common/properties/decoration.h" +#include "core/components/dialog/dialog_element.h" +#include "core/components/dialog/render_dialog.h" +#include "core/components/focus_collaboration/focus_collaboration_component.h" +#include "core/components/focusable/focusable_component.h" +#include "core/components/image/image_component.h" +#include "core/components/scroll/scroll_component.h" +#include "core/components/theme/theme_manager.h" +#include "core/components/wrap/wrap_component.h" +#include "core/pipeline/pipeline_context.h" + +namespace OHOS::Ace { +namespace { + +constexpr double PHONE_ENTER_CURVE_X0 = 0.38; +constexpr double PHONE_ENTER_CURVE_Y0 = 1.33; +constexpr double PHONE_ENTER_CURVE_X1 = 0.60; +constexpr double PHONE_ENTER_CURVE_Y1 = 1.0; +constexpr double PHONE_OPACITY_MIDDLE_IN = 0.375; +constexpr double PHONE_OPACITY_MIDDLE_OUT = 0.682; + +} // namespace + +const char CALLBACK_SUCCESS[] = "success"; +const char CALLBACK_CANCEL[] = "cancel"; +const char CALLBACK_COMPLETE[] = "complete"; +const char DIALOG_TWEEN_NAME[] = "tween"; +const int32_t DIALOG_BUTTONS_COUNT_WATCH = 2; +const char DIALOG_OK[] = "common.ok"; +const char DIALOG_CANCEL[] = "common.cancel"; +const char SEPARATE[] = " "; + +RefPtr DialogComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +RefPtr DialogComponent::CreateRenderNode() +{ + return RenderDialog::Create(); +} + +void DialogComponent::BuildChild(const RefPtr& themeManager) +{ + if (!themeManager) { + return; + } + dialogTheme_ = AceType::DynamicCast(themeManager->GetTheme(DialogTheme::TypeId())); + if (!dialogTheme_) { + return; + } + if (!isDeviceTypeSet_) { + deviceType_ = SystemProperties::GetDeviceType(); + } + auto box = AceType::MakeRefPtr(); + auto backDecoration = AceType::MakeRefPtr(); + backDecoration->SetBackgroundColor(backgroundColor_); + Border border; + border.SetBorderRadius(dialogTheme_->GetRadius()); + backDecoration->SetBorder(border); + if (deviceType_ == DeviceType::WATCH) { + box->SetFlex(BoxFlex::FLEX_XY); + } else { + box->SetFlex(BoxFlex::FLEX_X); + } + box->SetBackDecoration(backDecoration); + bool isLimit = true; + if (height_.IsValid()) { + box->SetHeight(height_.Value(), height_.Unit()); + isLimit = false; + } + if (width_.IsValid()) { + box->SetWidth(width_.Value(), width_.Unit()); + isLimit = false; + } + if (isSetMargin_) { + box->SetMargin(margin_); + } + auto transition = BuildAnimation(box); + BuildDialogTween(transition, isLimit, margin_); + + auto focusCollaboration = AceType::MakeRefPtr(); + if (!HasCustomChild()) { + std::list> columnChildren; + auto column = AceType::MakeRefPtr(FlexAlign::FLEX_START, FlexAlign::CENTER, columnChildren); + column->SetMainAxisSize(MainAxisSize::MIN); + BuildTitle(column); + BuildContent(column); + BuildActions(themeManager, column); + BuildFocusChild(column, focusCollaboration); + } else { + // build custom child + BuildFocusChild(customComponent_, focusCollaboration); + } + if (deviceType_ == DeviceType::WATCH) { + auto scroll = AceType::MakeRefPtr(focusCollaboration); + box->SetChild(scroll); + } else { + box->SetChild(focusCollaboration); + } + box->SetTextDirection(GetTextDirection()); +} + +void DialogComponent::BuildDialogTween(const RefPtr& transition, bool isLimit, Edge margin) +{ + auto dialogTween = AceType::MakeRefPtr(); + auto controller = AceType::MakeRefPtr(context_); + dialogTween->SetAnimator(controller); + if (animator_) { + animator_->AddProxyController(controller); + } + dialogTween->SetParentAnimator(animator_); + dialogTween->SetAutoCancel(autoCancel_); + dialogTween->SetChild(transition); + dialogTween->SetTextDirection(GetTextDirection()); + dialogTween->SetOnSuccessId(onSuccessId_); + dialogTween->SetOnCancelId(onCancelId_); + dialogTween->SetOnCompleteId(onCompleteId_); + dialogTween->SetOnPositiveSuccessId(onPositiveSuccessId_); + dialogTween->SetOnNegativeSuccessId(onNegativeSuccessId_); + dialogTween->SetOnNeutralSuccessId(onNeutralSuccessId_); + dialogTween->SetData(data_); + dialogTween->SetDialogLimit(isLimit); + if (isSetMargin_) { + dialogTween->SetMargin(margin); + } + if (dialogTweenBox_) { + const auto& dialogComposed = GenerateComposed("dialog", dialogTween, false); + dialogTween->SetComposedId(dialogTweenComposedId_); + dialogTween->SetCustomDialogId(customDialogId_); + dialogTweenBox_->SetChild(dialogComposed); + } +} + +void DialogComponent::BuildFocusChild( + const RefPtr& child, const RefPtr& collaboration) +{ + if (HasCustomChild()) { + // for custom child + collaboration->InsertChild(0, child); + } else if (actions_.empty()) { + auto focusable = AceType::MakeRefPtr(child); + focusable->SetFocusable(true); + focusable->SetFocusNode(true); + collaboration->InsertChild(0, focusable); + } else { + collaboration->InsertChild(0, child); + } +} + +void DialogComponent::BuildTitle(const RefPtr& column) +{ + if (!title_) { + return; + } + auto titlePadding = AceType::MakeRefPtr(); + if (titlePadding_ == Edge::NONE) { + titlePadding_ = (!content_ && actions_.empty()) ? dialogTheme_->GetTitleDefaultPadding() + : dialogTheme_->GetTitleAdjustPadding(); + } + titlePadding->SetPadding(std::move(titlePadding_)); + titlePadding->SetChild(title_); + std::list> rowChildren; + RefPtr row; + if (deviceType_ == DeviceType::PHONE) { + row = AceType::MakeRefPtr(FlexAlign::FLEX_START, FlexAlign::CENTER, rowChildren); + } else { + row = AceType::MakeRefPtr(FlexAlign::CENTER, FlexAlign::CENTER, rowChildren); + } + row->SetStretchToParent(true); + row->AppendChild(titlePadding); + auto titleFlex = AceType::MakeRefPtr(0, 0, 0.0, row); + column->AppendChild(GenerateComposed("dialogTitle", titleFlex, true)); +} + +void DialogComponent::BuildContent(const RefPtr& column) +{ + if (!content_) { + return; + } + auto contentPadding = AceType::MakeRefPtr(); + if (contentPadding_ == Edge::NONE) { + if (!title_) { + contentPadding_ = actions_.empty() ? dialogTheme_->GetDefaultPadding() : dialogTheme_->GetAdjustPadding(); + } else { + contentPadding_ = + actions_.empty() ? dialogTheme_->GetContentDefaultPadding() : dialogTheme_->GetContentAdjustPadding(); + } + } + contentPadding->SetPadding(std::move(contentPadding_)); + RefPtr contentFlex; + if (deviceType_ == DeviceType::WATCH) { + contentPadding->SetChild(content_); + contentFlex = AceType::MakeRefPtr(0, 0, 0.0, contentPadding); + } else { + auto scroll = AceType::MakeRefPtr(content_); + contentPadding->SetChild(scroll); + contentFlex = AceType::MakeRefPtr(0, 1, 0.0, contentPadding); + } + column->AppendChild(GenerateComposed("dialogContent", contentFlex, true)); +} + +void DialogComponent::BuildActions(const RefPtr& themeManager, const RefPtr& column) +{ + if (deviceType_ == DeviceType::WATCH) { + BuildActionsForWatch(column); + return; + } + + if (actions_.empty()) { + LOGW("the action is empty"); + return; + } + + auto actionsPadding = AceType::MakeRefPtr(); + actionsPadding->SetPadding(dialogTheme_->GetActionsPadding()); + if (actions_.size() == 1) { // the button in dialog is one. + std::list> rowChildren; + auto row = AceType::MakeRefPtr(FlexAlign::SPACE_AROUND, FlexAlign::FLEX_START, rowChildren); + row->SetStretchToParent(true); + row->AppendChild(AceType::MakeRefPtr( + 1, 1, 0.0, BuildButton(actions_.front(), onPositiveSuccessId_, Edge::NONE, true))); + actionsPadding->SetChild(row); + } else if (actions_.size() == 2) { // the button in dialog is two. + std::list> rowChildren; + auto row = AceType::MakeRefPtr(FlexAlign::SPACE_AROUND, FlexAlign::CENTER, rowChildren); + row->SetStretchToParent(true); + row->AppendChild(AceType::MakeRefPtr( + 1, 1, 0.0, BuildButton(actions_.front(), onPositiveSuccessId_, Edge::NONE))); + row->AppendChild(AceType::MakeRefPtr(0, 0, 0.0, BuildDivider(themeManager))); + row->AppendChild(AceType::MakeRefPtr( + 1, 1, 0.0, BuildButton(actions_.back(), onNegativeSuccessId_, Edge::NONE, true))); + actionsPadding->SetChild(row); + } else { // the button in dialog is more than two. + std::list> wrapChildren; + auto wrap = AceType::MakeRefPtr(wrapChildren); + wrap->SetDialogStretch(true); + wrap->SetMainAlignment(WrapAlignment::CENTER); + wrap->SetSpacing(dialogTheme_->GetButtonSpacingHorizontal()); + wrap->SetContentSpacing(dialogTheme_->GetButtonSpacingVertical()); + int32_t num = 0; + for (const auto& action : actions_) { + ++num; + if (num == 1) { + wrap->AppendChild(BuildButton(action, onPositiveSuccessId_, Edge::NONE)); + } else if (num == 2) { + wrap->AppendChild(BuildButton(action, onNegativeSuccessId_, Edge::NONE, true)); + } else if (num == 3) { + wrap->AppendChild(BuildButton(action, onNeutralSuccessId_, Edge::NONE)); + } else { + break; + } + } + actionsPadding->SetChild(wrap); + } + auto actionsFlex = AceType::MakeRefPtr(0, 0, 0.0, actionsPadding); + column->AppendChild(actionsFlex); +} + +void DialogComponent::BuildActionsForWatch(const OHOS::Ace::RefPtr& column) +{ + if (actions_.empty() || actions_.size() != DIALOG_BUTTONS_COUNT_WATCH) { + return; + } + + std::list> rowChildren; + auto row = AceType::MakeRefPtr(FlexAlign::SPACE_BETWEEN, FlexAlign::FLEX_START, rowChildren); + row->SetStretchToParent(true); + row->AppendChild(BuildButton(actions_.front(), onPositiveSuccessId_, dialogTheme_->GetButtonPaddingRight())); + row->AppendChild(BuildButton(actions_.back(), onNegativeSuccessId_, dialogTheme_->GetButtonPaddingLeft(), true)); + auto actionsPadding = AceType::MakeRefPtr(); + actionsPadding->SetPadding(dialogTheme_->GetDefaultPadding()); + actionsPadding->SetChild(row); + auto actionsFlex = AceType::MakeRefPtr(0, 0, 0.0, actionsPadding); + column->AppendChild(actionsFlex); +} + +RefPtr DialogComponent::BuildButton( + const RefPtr& button, const EventMarker& callbackId, const Edge& edge, bool isAutoFocus) +{ + button->SetClickedEventId(callbackId); + button->SetAutoFocusState(isAutoFocus); + auto buttonPadding = AceType::MakeRefPtr(); + buttonPadding->SetPadding(edge); + buttonPadding->SetChild(button); + return GenerateComposed("dialogButton", buttonPadding, true); +} + +RefPtr DialogComponent::BuildAnimation(const RefPtr& child) +{ + if (deviceType_ == DeviceType::PHONE) { + return BuildAnimationForPhone(child); + } + // Build scale animation for in. + auto scaleFrameStart = + AceType::MakeRefPtr>(dialogTheme_->GetFrameStart(), dialogTheme_->GetScaleStart()); + auto scaleFrameEnd = AceType::MakeRefPtr>(dialogTheme_->GetFrameEnd(), dialogTheme_->GetScaleEnd()); + auto scaleAnimationIn = AceType::MakeRefPtr>(); + scaleAnimationIn->AddKeyframe(scaleFrameStart); + scaleAnimationIn->AddKeyframe(scaleFrameEnd); + scaleAnimationIn->SetCurve(Curves::FRICTION); + // Build opacity animation for in. + auto opacityKeyframeStart = + AceType::MakeRefPtr>(dialogTheme_->GetFrameStart(), dialogTheme_->GetOpacityStart()); + auto opacityKeyframeEnd = + AceType::MakeRefPtr>(dialogTheme_->GetFrameEnd(), dialogTheme_->GetOpacityEnd()); + auto opacityAnimationIn = AceType::MakeRefPtr>(); + opacityAnimationIn->AddKeyframe(opacityKeyframeStart); + opacityAnimationIn->AddKeyframe(opacityKeyframeEnd); + opacityAnimationIn->SetCurve(Curves::FRICTION); + // Build tween option for in + TweenOption tweenOptionIn; + tweenOptionIn.SetTransformFloatAnimation(AnimationType::SCALE, scaleAnimationIn); + tweenOptionIn.SetOpacityAnimation(opacityAnimationIn); + tweenOptionIn.SetDuration(dialogTheme_->GetAnimationDurationIn()); + tweenOptionIn.SetFillMode(FillMode::FORWARDS); + + // Build scale animation for out. + auto scaleFrameStartOut = + AceType::MakeRefPtr>(dialogTheme_->GetFrameStart(), dialogTheme_->GetScaleEnd()); + auto scaleFrameEndOut = + AceType::MakeRefPtr>(dialogTheme_->GetFrameEnd(), dialogTheme_->GetScaleStart()); + auto scaleAnimationOut = AceType::MakeRefPtr>(); + scaleAnimationOut->AddKeyframe(scaleFrameStartOut); + scaleAnimationOut->AddKeyframe(scaleFrameEndOut); + scaleAnimationOut->SetCurve(Curves::SMOOTH); + // Build opacity animation for out. + auto opacityKeyframeStartOut = + AceType::MakeRefPtr>(dialogTheme_->GetFrameStart(), dialogTheme_->GetOpacityEnd()); + auto opacityKeyframeEndOut = + AceType::MakeRefPtr>(dialogTheme_->GetFrameEnd(), dialogTheme_->GetOpacityStart()); + auto opacityAnimationOut = AceType::MakeRefPtr>(); + opacityAnimationOut->AddKeyframe(opacityKeyframeStartOut); + opacityAnimationOut->AddKeyframe(opacityKeyframeEndOut); + opacityAnimationOut->SetCurve(Curves::SMOOTH); + // Build tween option for out + TweenOption tweenOptionOut; + tweenOptionOut.SetTransformFloatAnimation(AnimationType::SCALE, scaleAnimationOut); + tweenOptionOut.SetOpacityAnimation(opacityAnimationOut); + tweenOptionOut.SetDuration(dialogTheme_->GetAnimationDurationOut()); + tweenOptionOut.SetFillMode(FillMode::FORWARDS); + + // Build transition + auto transition = + AceType::MakeRefPtr(TweenComponent::AllocTweenComponentId(), DIALOG_TWEEN_NAME, child); + transition->SetIsFirstFrameShow(false); + transition->SetTransitionOption(tweenOptionIn, tweenOptionOut); + return transition; +} + +RefPtr DialogComponent::BuildAnimationForPhone(const RefPtr& child) +{ + // Build scale animation for in. + auto scaleFrameStart = + AceType::MakeRefPtr>(dialogTheme_->GetFrameStart(), dialogTheme_->GetScaleStart()); + auto scaleFrameEnd = AceType::MakeRefPtr>(dialogTheme_->GetFrameEnd(), dialogTheme_->GetScaleEnd()); + auto scaleAnimationIn = AceType::MakeRefPtr>(); + scaleAnimationIn->AddKeyframe(scaleFrameStart); + scaleAnimationIn->AddKeyframe(scaleFrameEnd); + auto dialogCurve = AceType::MakeRefPtr(PHONE_ENTER_CURVE_X0, PHONE_ENTER_CURVE_Y0, PHONE_ENTER_CURVE_X1, + PHONE_ENTER_CURVE_Y1); + scaleAnimationIn->SetCurve(dialogCurve); + // Build opacity animation for in. + auto opacityKeyframeStart = + AceType::MakeRefPtr>(dialogTheme_->GetFrameStart(), dialogTheme_->GetOpacityStart()); + auto opacityKeyframeMiddle = + AceType::MakeRefPtr>(PHONE_OPACITY_MIDDLE_IN, dialogTheme_->GetOpacityEnd()); + auto opacityKeyframeEnd = + AceType::MakeRefPtr>(dialogTheme_->GetFrameEnd(), dialogTheme_->GetOpacityEnd()); + auto opacityAnimationIn = AceType::MakeRefPtr>(); + opacityAnimationIn->AddKeyframe(opacityKeyframeStart); + opacityAnimationIn->AddKeyframe(opacityKeyframeMiddle); + opacityAnimationIn->AddKeyframe(opacityKeyframeEnd); + opacityAnimationIn->SetCurve(Curves::SHARP); + // Build tween option for in + TweenOption tweenOptionIn; + tweenOptionIn.SetTransformFloatAnimation(AnimationType::SCALE, scaleAnimationIn); + tweenOptionIn.SetOpacityAnimation(opacityAnimationIn); + tweenOptionIn.SetDuration(dialogTheme_->GetAnimationDurationIn()); + tweenOptionIn.SetFillMode(FillMode::FORWARDS); + // Build scale animation for out. + auto scaleFrameStartOut = + AceType::MakeRefPtr>(dialogTheme_->GetFrameStart(), dialogTheme_->GetScaleEnd()); + auto opacityKeyframeMiddleOut = + AceType::MakeRefPtr>(PHONE_OPACITY_MIDDLE_OUT, dialogTheme_->GetOpacityEnd()); + auto scaleFrameEndOut = + AceType::MakeRefPtr>(dialogTheme_->GetFrameEnd(), dialogTheme_->GetScaleStart()); + auto scaleAnimationOut = AceType::MakeRefPtr>(); + scaleAnimationOut->AddKeyframe(scaleFrameStartOut); + scaleAnimationOut->AddKeyframe(scaleFrameEndOut); + scaleAnimationOut->SetCurve(Curves::SMOOTH); + // Build opacity animation for out. + auto opacityKeyframeStartOut = + AceType::MakeRefPtr>(dialogTheme_->GetFrameStart(), dialogTheme_->GetOpacityEnd()); + auto opacityKeyframeEndOut = + AceType::MakeRefPtr>(dialogTheme_->GetFrameEnd(), dialogTheme_->GetOpacityStart()); + auto opacityAnimationOut = AceType::MakeRefPtr>(); + opacityAnimationOut->AddKeyframe(opacityKeyframeStartOut); + opacityAnimationOut->AddKeyframe(opacityKeyframeEndOut); + opacityAnimationOut->SetCurve(Curves::SMOOTH); + // Build tween option for out + TweenOption tweenOptionOut; + tweenOptionOut.SetTransformFloatAnimation(AnimationType::SCALE, scaleAnimationOut); + tweenOptionOut.SetOpacityAnimation(opacityAnimationOut); + tweenOptionOut.SetDuration(dialogTheme_->GetAnimationDurationOut()); + tweenOptionOut.SetFillMode(FillMode::FORWARDS); + auto transition = + AceType::MakeRefPtr(TweenComponent::AllocTweenComponentId(), DIALOG_TWEEN_NAME, child); + transition->SetIsFirstFrameShow(false); + transition->SetTransitionOption(tweenOptionIn, tweenOptionOut); + return transition; +} + +RefPtr DialogComponent::GenerateComposed( + const std::string& name, const RefPtr& child, bool isDialogTweenChild) +{ + const auto& pipelineContext = context_.Upgrade(); + if (pipelineContext) { + const auto& accessibilityManager = pipelineContext->GetAccessibilityManager(); + if (accessibilityManager) { + const auto& composedId = accessibilityManager->GenerateNextAccessibilityId(); + const auto& composed = AceType::MakeRefPtr(std::to_string(composedId), name, child); + if (isDialogTweenChild) { + accessibilityManager->CreateSpecializedNode(name, composedId, dialogTweenComposedId_); + } else { + dialogTweenComposedId_ = composedId; +#if defined(WINDOWS_PLATFORM) || defined(MAC_PLATFORM) + accessibilityManager->CreateSpecializedNode("inspectDialog", composedId, customDialogId_); +#else + accessibilityManager->CreateSpecializedNode(name, composedId, -1); +#endif + } + return composed; + } + } + return child; +} + +RefPtr DialogComponent::BuildDivider(const RefPtr& themeManager) +{ + if (!themeManager) { + return nullptr; + } + auto padding = AceType::MakeRefPtr(); + auto dialogTheme = + AceType::DynamicCast(themeManager->GetTheme(DialogTheme::TypeId())); + if (!dialogTheme) { + return nullptr; + } + if (SystemProperties::GetDeviceType() == DeviceType::TV) { + padding->SetPadding(Edge(dialogTheme->GetButtonSpacingHorizontal(), Dimension(0.0, DimensionUnit::VP), + Dimension(0.0, DimensionUnit::VP), Dimension(0.0, DimensionUnit::VP))); + return padding; + } + padding->SetPadding(dialogTheme->GetDividerPadding()); + auto dividerBox = AceType::MakeRefPtr(); + dividerBox->SetWidth(dialogTheme->GetDividerWidth().Value(), dialogTheme->GetDividerWidth().Unit()); + dividerBox->SetHeight(dialogTheme->GetDividerHeight().Value(), dialogTheme->GetDividerHeight().Unit()); + auto backDecoration = AceType::MakeRefPtr(); + backDecoration->SetBackgroundColor(dialogTheme->GetDividerColor()); + dividerBox->SetBackDecoration(backDecoration); + padding->SetChild(dividerBox); + return padding; +} + +RefPtr DialogBuilder::Build( + const DialogProperties& dialogProperties, const WeakPtr& context) +{ + auto pipelineContext = context.Upgrade(); + if (!pipelineContext) { + return RefPtr(); + } + auto themeManager = pipelineContext->GetThemeManager(); + if (!themeManager) { + return RefPtr(); + } + auto dialogTheme = + AceType::DynamicCast(themeManager->GetTheme(DialogTheme::TypeId())); + if (!dialogTheme) { + return RefPtr(); + } + std::string data; + auto dialog = AceType::MakeRefPtr(); + dialog->SetContext(context); + dialog->SetBackgroundColor(dialogTheme->GetBackgroundColor()); + // Set title and content of dialog + BuildTitleAndContent(dialog, dialogProperties, dialogTheme, data); + // Set buttons of dialog + BuildButtons(themeManager, dialog, dialogProperties.buttons, dialogTheme, data); + // Build DialogTween + auto controller = AceType::MakeRefPtr(context); + dialog->SetAnimator(controller); + dialog->SetAutoCancel(dialogProperties.autoCancel); + dialog->SetData(data); + // Set eventMarker of dialog component + if (!dialogProperties.callbacks.empty()) { + for (const auto& callback : dialogProperties.callbacks) { + if (callback.first == CALLBACK_SUCCESS) { + dialog->SetOnSuccessId(callback.second); + } + if (callback.first == CALLBACK_CANCEL) { + dialog->SetOnCancelId(callback.second); + } + if (callback.first == CALLBACK_COMPLETE) { + dialog->SetOnCompleteId(callback.second); + } + } + } + return BuildAnimation(dialog, dialogTheme); +} + +void DialogBuilder::BuildTitleAndContent(const RefPtr& dialog, + const DialogProperties& dialogProperties, const RefPtr& dialogTheme, std::string& data) +{ + auto deviceType = SystemProperties::GetDeviceType(); + if ((deviceType != DeviceType::WATCH) && (!dialogProperties.title.empty())) { + auto titleComponent = AceType::MakeRefPtr(dialogProperties.title); + auto style = dialogTheme->GetTitleTextStyle(); + style.SetMaxLines(dialogTheme->GetTitleMaxLines()); + style.SetTextOverflow(TextOverflow::ELLIPSIS); + style.SetAdaptTextSize(style.GetFontSize(), dialogTheme->GetTitleMinFontSize()); + titleComponent->SetTextStyle(style); + titleComponent->SetFocusColor(style.GetTextColor()); + dialog->SetTitle(titleComponent); + data += dialogProperties.title + SEPARATE; + } + if (!dialogProperties.content.empty()) { + auto contentComponent = AceType::MakeRefPtr(dialogProperties.content); + auto contentStyle = dialogTheme->GetContentTextStyle(); + if (deviceType == DeviceType::WATCH) { + std::vector preferTextSizeGroups; + preferTextSizeGroups.push_back({ contentStyle.GetFontSize(), 1 }); + preferTextSizeGroups.push_back({ dialogTheme->GetContentMinFontSize(), UINT32_MAX, TextOverflow::NONE }); + contentStyle.SetPreferTextSizeGroups(preferTextSizeGroups); + contentStyle.SetTextAlign(TextAlign::CENTER); + } + contentComponent->SetTextStyle(contentStyle); + contentComponent->SetFocusColor(dialogTheme->GetContentTextStyle().GetTextColor()); + dialog->SetContent(contentComponent); + data += dialogProperties.content + SEPARATE; + } +} + +void DialogBuilder::BuildButtons(const RefPtr& themeManager, const RefPtr& dialog, + const std::vector>& buttons, const RefPtr& dialogTheme, + std::string& data) +{ + if (SystemProperties::GetDeviceType() == DeviceType::WATCH) { + BuildButtonsForWatch(themeManager, dialog, data); + return; + } + if (buttons.empty()) { + return; + } + auto buttonTheme = AceType::DynamicCast(themeManager->GetTheme(ButtonTheme::TypeId())); + if (!buttonTheme) { + return; + } + std::list> buttonComponents; + for (const auto& button : buttons) { + if (button.first.empty()) { + continue; + } + data += button.first + SEPARATE; + TextStyle buttonTextStyle = buttonTheme->GetTextStyle(); + RefPtr buttonComponent; + if (!button.second.empty()) { + buttonTextStyle.SetTextColor(Color::FromString(button.second)); + buttonComponent = ButtonBuilder::Build(themeManager, button.first, buttonTextStyle, + Color::FromString(button.second), true); + } else { + const Color TEXT_COLOR = Color::FromString("#0a59f4"); + buttonTextStyle.SetTextColor(TEXT_COLOR); + buttonComponent = ButtonBuilder::Build(themeManager, button.first, buttonTextStyle, TEXT_COLOR, true); + } + buttonTextStyle.SetAdaptTextSize(buttonTheme->GetMaxFontSize(), buttonTheme->GetMinFontSize()); + buttonTextStyle.SetMaxLines(1); + buttonTextStyle.SetTextOverflow(TextOverflow::ELLIPSIS); + buttonComponent->SetBackgroundColor(dialogTheme->GetButtonBackgroundColor()); + static const Color buttonHoverColor = Color::FromString("#0C000000"); + buttonComponent->SetHoverColor(buttonHoverColor); + buttonComponent->SetClickedColor(dialogTheme->GetButtonClickedColor()); + buttonComponent->SetType(ButtonType::TEXT); + buttonComponents.emplace_back(buttonComponent); + } + dialog->SetActions(buttonComponents); +} + +void DialogBuilder::BuildButtonsForWatch( + const RefPtr& themeManager, const RefPtr& dialog, std::string& data) +{ + auto buttonTheme = + AceType::DynamicCast(themeManager->GetTheme(ButtonTheme::TypeId())); + auto dialogTheme = + AceType::DynamicCast(themeManager->GetTheme(DialogTheme::TypeId())); + if (!buttonTheme || !dialogTheme) { + return; + } + std::string buttonText; + std::list> buttonComponents; + for (int32_t i = 1; i <= DIALOG_BUTTONS_COUNT_WATCH; ++i) { + auto buttonPadding = AceType::MakeRefPtr(); + buttonPadding->SetPadding(buttonTheme->GetMinCircleButtonPadding()); + RefPtr buttonIcon; + if (i == 1) { + buttonText = Localization::GetInstance()->GetEntryLetters(DIALOG_CANCEL); + buttonIcon = AceType::MakeRefPtr(InternalResource::ResourceId::WRONG_SVG); + } else { + buttonText = Localization::GetInstance()->GetEntryLetters(DIALOG_OK); + buttonIcon = AceType::MakeRefPtr(InternalResource::ResourceId::CORRECT_SVG); + } + data += buttonText + SEPARATE; + buttonIcon->SetWidth(buttonTheme->GetMinCircleButtonIcon()); + buttonIcon->SetHeight(buttonTheme->GetMinCircleButtonIcon()); + buttonPadding->SetChild(buttonIcon); + std::list> buttonChildren; + buttonChildren.emplace_back(buttonPadding); + auto buttonComponent = AceType::MakeRefPtr(buttonChildren); + buttonComponent->SetWidth(buttonTheme->GetMinCircleButtonDiameter()); + buttonComponent->SetHeight(buttonTheme->GetMinCircleButtonDiameter()); + buttonComponent->SetRectRadius(buttonTheme->GetMinCircleButtonDiameter() / 2.0); + buttonComponent->SetBackgroundColor(buttonTheme->GetBgColor()); + buttonComponent->SetClickedColor(buttonTheme->GetClickedColor()); + if (i == 2) { + buttonComponent->SetBackgroundColor(dialogTheme->GetButtonBackgroundColor()); + buttonComponent->SetClickedColor(dialogTheme->GetButtonClickedColor()); + } + buttonComponent->SetFocusColor(buttonTheme->GetBgFocusColor()); + buttonComponent->SetFocusAnimationColor(buttonTheme->GetBgFocusColor()); + buttonComponent->SetAccessibilityText(buttonText); + buttonComponents.emplace_back(buttonComponent); + } + dialog->SetActions(buttonComponents); +} + +RefPtr DialogBuilder::BuildAnimation( + const RefPtr& dialogChild, const RefPtr& dialogTheme) +{ + auto tweenBox = AceType::MakeRefPtr(); + auto decoration = AceType::MakeRefPtr(); + decoration->SetBackgroundColor(Color(dialogTheme->GetMaskColorEnd())); + tweenBox->SetBackDecoration(decoration); + const auto& colorAnimation = AceType::MakeRefPtr>( + dialogTheme->GetMaskColorStart(), dialogTheme->GetMaskColorEnd(), Curves::LINEAR); + colorAnimation->SetEvaluator(AceType::MakeRefPtr()); + // Build tween option of in + TweenOption tweenOptionIn; + tweenOptionIn.SetColorAnimation(colorAnimation); + tweenOptionIn.SetDuration(dialogTheme->GetAnimationDurationIn()); + tweenOptionIn.SetFillMode(FillMode::FORWARDS); + // Build tween option of out + const auto& colorAnimationOut = AceType::MakeRefPtr>( + dialogTheme->GetMaskColorEnd(), dialogTheme->GetMaskColorStart(), Curves::LINEAR); + colorAnimationOut->SetEvaluator(AceType::MakeRefPtr()); + TweenOption tweenOptionOut; + tweenOptionOut.SetColorAnimation(colorAnimationOut); + tweenOptionOut.SetDuration(dialogTheme->GetAnimationDurationOut()); + tweenOptionOut.SetFillMode(FillMode::FORWARDS); + // Build transition + auto transition = + AceType::MakeRefPtr(TweenComponent::AllocTweenComponentId(), "transition", tweenBox); + transition->SetIsFirstFrameShow(false); + transition->SetTransitionOption(tweenOptionIn, tweenOptionOut); + + dialogChild->SetChild(transition); + dialogChild->SetDialogTweenBox(tweenBox); + return dialogChild; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/dialog/dialog_component.h b/frameworks/core/components/dialog/dialog_component.h new file mode 100644 index 00000000..8fc7af87 --- /dev/null +++ b/frameworks/core/components/dialog/dialog_component.h @@ -0,0 +1,337 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIALOG_DIALOG_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIALOG_DIALOG_COMPONENT_H + +#include "base/utils/device_type.h" +#include "core/components/box/box_component.h" +#include "core/components/button/button_component.h" +#include "core/components/common/properties/color.h" +#include "core/components/common/properties/edge.h" +#include "core/components/dialog/dialog_theme.h" +#include "core/components/dialog_tween/dialog_tween_component.h" +#include "core/components/flex/flex_component.h" +#include "core/components/flex/flex_item_component.h" +#include "core/components/focus_animation/focus_animation_component.h" +#include "core/components/focus_collaboration/focus_collaboration_component.h" +#include "core/components/padding/padding_component.h" +#include "core/components/text/text_component.h" +#include "core/components/transition/transition_component.h" +#include "core/components/tween/tween_component.h" +#include "core/pipeline/base/sole_child_component.h" +#include "core/pipeline/pipeline_context.h" + +namespace OHOS::Ace { + +// constants of dialog component +extern const char CALLBACK_SUCCESS[]; +extern const char CALLBACK_CANCEL[]; +extern const char CALLBACK_COMPLETE[]; +extern const char DIALOG_TWEEN_NAME[]; + +struct DialogProperties { + std::string title; + std::string content; + bool autoCancel = true; + std::vector> buttons; + std::unordered_map callbacks; +}; + +class DialogComponent : public SoleChildComponent { + DECLARE_ACE_TYPE(DialogComponent, SoleChildComponent); + +public: + RefPtr CreateElement() override; + RefPtr CreateRenderNode() override; + void BuildChild(const RefPtr& themeManager); + + void SetTitle(const RefPtr& title) + { + title_ = title; + } + + void SetTitlePadding(const Edge& titlePadding) + { + titlePadding_ = titlePadding; + } + + void SetContent(const RefPtr& content) + { + content_ = content; + } + + void SetContentPadding(const Edge& contentPadding) + { + contentPadding_ = contentPadding; + } + + void SetBackgroundColor(const Color& backgroundColor) + { + backgroundColor_ = backgroundColor; + } + + void SetActions(const std::list>& actions) + { + actions_ = actions; + } + + void SetAutoCancel(bool autoCancel) + { + autoCancel_ = autoCancel; + } + + void SetAnimator(const RefPtr& animator) + { + animator_ = animator; + } + + void SetDialogTween(const RefPtr& dialogTween) + { + dialogTween_ = dialogTween; + } + + void SetDialogTweenBox(const RefPtr& dialogTweenBox) + { + dialogTweenBox_ = dialogTweenBox; + } + + void SetOnSuccessId(const EventMarker& onSuccessId) + { + onSuccessId_ = onSuccessId; + } + + void SetOnCancelId(const EventMarker& onCancelId) + { + onCancelId_ = onCancelId; + } + + void SetOnCompleteId(const EventMarker& onCompleteId) + { + onCompleteId_ = onCompleteId; + } + + const RefPtr& GetTitle() const + { + return title_; + } + + const Edge& GetTitlePadding() const + { + return titlePadding_; + } + + const RefPtr& GetContent() const + { + return content_; + } + + const Edge& GetContentPadding() const + { + return contentPadding_; + } + + const Color& GetBackgroundColor() const + { + return backgroundColor_; + } + + const std::list>& GetActions() const + { + return actions_; + } + + bool GetAutoCancel() const + { + return autoCancel_; + } + + const EventMarker& GetOnPositiveSuccessId() const + { + return onPositiveSuccessId_; + } + + const EventMarker& GetOnNegativeSuccessId() const + { + return onNegativeSuccessId_; + } + + const EventMarker& GetOnNeutralSuccessId() const + { + return onNeutralSuccessId_; + } + + const RefPtr& GetAnimator() const + { + return animator_; + } + + const RefPtr& GetDialogTweenComponent() const + { + return dialogTween_; + } + + const RefPtr& GetDialogTweenBox() const + { + return dialogTweenBox_; + } + + bool HasCustomChild() const + { + return customComponent_ != nullptr; + } + + void SetCustomChild(const RefPtr& customChild) + { + customComponent_ = customChild; + } + + void SetDialogComposedId(int32_t dialogComposeId) + { + dialogComposeId_ = dialogComposeId; + } + + void SetDialogTweenComposedId(int32_t dialogTweenComposeId) + { + dialogTweenComposedId_ = dialogTweenComposeId; + } + + void SetContext(const WeakPtr& context) + { + context_ = context; + } + + void SetData(const std::string& data) + { + data_ = data; + } + + // This method is design for unit test, please call this method seriously. + void SetDeviceType(DeviceType deviceType) + { + deviceType_ = deviceType; + isDeviceTypeSet_ = true; + } + + void SetHeight(const Dimension& height) + { + height_ = height; + } + + const Dimension& GetHeight() const + { + return height_; + } + + void SetWidth(const Dimension& width) + { + width_ = width; + } + + const Dimension& GetWidth() const + { + return width_; + } + + void SetMargin(const Edge& margin) + { + margin_ = margin; + isSetMargin_ = true; + } + + const Edge& GetMargin() const + { + return margin_; + } + + bool IsSetMargin() const + { + return isSetMargin_; + } + + // used for inspector node in PC preview + void SetCustomDialogId(int32_t dialogId) + { + customDialogId_ = dialogId; + } + +private: + void BuildFocusChild(const RefPtr& child, const RefPtr& collaboration); + void BuildTitle(const RefPtr& column); + void BuildContent(const RefPtr& column); + void BuildActions(const RefPtr& themeManager, const RefPtr& column); + void BuildActionsForWatch(const RefPtr& column); + RefPtr BuildButton(const RefPtr& button, const EventMarker& callbackId, + const Edge& edge, bool isAutoFocus = false); + RefPtr BuildAnimation(const RefPtr& child); + RefPtr BuildAnimationForPhone(const RefPtr& child); + RefPtr GenerateComposed( + const std::string& name, const RefPtr& child, bool isDialogTweenChild); + void BuildDialogTween(const RefPtr& transition, bool isLimit, Edge margin); + RefPtr BuildDivider(const RefPtr& themeManager); + + std::string data_; + int32_t dialogComposeId_ = 0; + int32_t dialogTweenComposedId_ = 0; + RefPtr title_; + Edge titlePadding_; + RefPtr content_; + Edge contentPadding_; + bool autoCancel_ = true; + Color backgroundColor_; + std::list> actions_; + RefPtr dialogTheme_; + RefPtr dialogTween_; + RefPtr dialogTweenBox_; + RefPtr animator_; + EventMarker onSuccessId_; + EventMarker onCancelId_; + EventMarker onCompleteId_; + EventMarker onPositiveSuccessId_ = BackEndEventManager::GetInstance().GetAvailableMarker(); + EventMarker onNegativeSuccessId_ = BackEndEventManager::GetInstance().GetAvailableMarker(); + EventMarker onNeutralSuccessId_ = BackEndEventManager::GetInstance().GetAvailableMarker(); + WeakPtr context_; + DeviceType deviceType_ = DeviceType::PHONE; + bool isDeviceTypeSet_ = false; + + RefPtr customComponent_; + Dimension height_; + Dimension width_; + Edge margin_; + bool isSetMargin_ = false; + // used for inspector node in PC preview + int32_t customDialogId_ = -1; +}; + +class DialogBuilder { +public: + static RefPtr Build( + const DialogProperties& dialogProperties, const WeakPtr& context); + +private: + static void BuildTitleAndContent(const RefPtr& dialog, const DialogProperties& dialogProperties, + const RefPtr& dialogTheme, std::string& data); + static void BuildButtons(const RefPtr& themeManager, const RefPtr& dialog, + const std::vector>& buttons, const RefPtr& dialogTheme, + std::string& data); + static void BuildButtonsForWatch( + const RefPtr& themeManager, const RefPtr& dialog, std::string& data); + static RefPtr BuildAnimation( + const RefPtr& dialogChild, const RefPtr& dialogTheme); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIALOG_DIALOG_COMPONENT_H diff --git a/frameworks/core/components/dialog/dialog_element.cpp b/frameworks/core/components/dialog/dialog_element.cpp new file mode 100644 index 00000000..a3c2c7b9 --- /dev/null +++ b/frameworks/core/components/dialog/dialog_element.cpp @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/dialog/dialog_element.h" + +#include "core/components/dialog/dialog_component.h" +#include "core/components/dialog/render_dialog.h" +#include "core/components/transition/transition_element.h" + +namespace OHOS::Ace { + +void DialogElement::PerformBuild() +{ + RefPtr dialog = AceType::DynamicCast(component_); + if (!dialog) { + return; + } + dialog->BuildChild(GetThemeManager()); + const auto& child = children_.empty() ? nullptr : children_.front(); + UpdateChild(child, dialog->GetChild()); + const auto& animator = dialog->GetAnimator(); + if (!animator) { + return; + } + auto transitionElement = AceType::DynamicCast(GetChildren().front()); + if (!transitionElement) { + return; + } + animator->AddStopListener([weakTransition = AceType::WeakClaim(AceType::RawPtr(transitionElement)), + weakController = WeakClaim(RawPtr(animator))] { + auto transitionElement = weakTransition.Upgrade(); + if (transitionElement) { + auto animator = weakController.Upgrade(); + if (animator) { + animator->ClearInterpolators(); + } + transitionElement->SwitchTransitionOption(TransitionOptionType::TRANSITION_OUT, true); + } + }); + transitionElement->SetController(animator); + transitionElement->SwitchTransitionOption(TransitionOptionType::TRANSITION_IN, true); + animator->Play(); +} + +bool DialogElement::RequestNextFocus(bool vertical, bool reverse, const Rect& rect) +{ + return false; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/dialog/dialog_element.h b/frameworks/core/components/dialog/dialog_element.h new file mode 100644 index 00000000..73745a7c --- /dev/null +++ b/frameworks/core/components/dialog/dialog_element.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIALOG_DIALOG_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIALOG_DIALOG_ELEMENT_H + +#include "core/focus/focus_node.h" +#include "core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +class DialogElement : public RenderElement, public FocusGroup { + DECLARE_ACE_TYPE(DialogElement, RenderElement, FocusGroup); + +public: + DialogElement() = default; + ~DialogElement() override = default; + + void PerformBuild() override; + +protected: + bool RequestNextFocus(bool vertical, bool reverse, const Rect& rect) override; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIALOG_DIALOG_ELEMENT_H diff --git a/frameworks/core/components/dialog/dialog_theme.h b/frameworks/core/components/dialog/dialog_theme.h new file mode 100644 index 00000000..da3ccff7 --- /dev/null +++ b/frameworks/core/components/dialog/dialog_theme.h @@ -0,0 +1,381 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIALOG_DIALOG_THEME_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIALOG_DIALOG_THEME_H + +#include "core/components/common/properties/color.h" +#include "core/components/common/properties/edge.h" +#include "core/components/common/properties/radius.h" +#include "core/components/common/properties/text_style.h" +#include "core/components/theme/theme.h" +#include "core/components/theme/theme_constants.h" + +namespace OHOS::Ace { + +/** + * DialogTheme defines color and styles of DialogComponent. DialogTheme should be built + * using DialogTheme::Builder. + */ +class DialogTheme : public virtual Theme { + DECLARE_ACE_TYPE(DialogTheme, Theme); + +public: + class Builder { + public: + Builder() = default; + ~Builder() = default; + + RefPtr Build(const RefPtr& themeConstants) const + { + RefPtr theme = AceType::Claim(new DialogTheme()); + if (!themeConstants) { + return theme; + } + // init theme from global data + theme->radius_ = Radius( + themeConstants->GetDimension(THEME_DIALOG_RADIUS), themeConstants->GetDimension(THEME_DIALOG_RADIUS)); + theme->backgroundColor_ = themeConstants->GetColor(THEME_DIALOG_BACKGROUND_COLOR); + theme->titleTextStyle_.SetTextColor(themeConstants->GetColor(THEME_DIALOG_TITLE_TEXT_COLOR)); + theme->titleTextStyle_.SetFontSize(themeConstants->GetDimension(THEME_DIALOG_TITLE_TEXT_FONTSIZE)); + theme->titleTextStyle_.SetFontWeight( + FontWeight(themeConstants->GetInt(THEME_DIALOG_TITLE_TEXT_FONTWEIGHT))); + theme->titleMinFontSize_ = themeConstants->GetDimension(THEME_DIALOG_TITLE_TEXT_FONTSIZE_MIN); + theme->contentMinFontSize_ = themeConstants->GetDimension(THEME_DIALOG_CONTENT_TEXT_FONTSIZE_MIN); + auto titleMaxLines = themeConstants->GetInt(THEME_DIALOG_TITLE_TEXT_MAX_LINES); + theme->titleMaxLines_ = titleMaxLines < 0 ? theme->titleMaxLines_ : static_cast(titleMaxLines); + theme->contentTextStyle_.SetTextColor(themeConstants->GetColor(THEME_DIALOG_CONTENT_TEXT_COLOR)); + theme->contentTextStyle_.SetFontSize(themeConstants->GetDimension(THEME_DIALOG_CONTENT_TEXT_FONTSIZE)); + theme->defaultPadding_ = Edge(themeConstants->GetDimension(THEME_DIALOG_PADDING_LEFT), + themeConstants->GetDimension(THEME_DIALOG_PADDING_TOP), + themeConstants->GetDimension(THEME_DIALOG_PADDING_RIGHT), + themeConstants->GetDimension(THEME_DIALOG_PADDING_BOTTOM)); + theme->adjustPadding_ = Edge(themeConstants->GetDimension(THEME_DIALOG_PADDING_LEFT_ADJUST), + themeConstants->GetDimension(THEME_DIALOG_PADDING_TOP_ADJUST), + themeConstants->GetDimension(THEME_DIALOG_PADDING_RIGHT_ADJUST), + themeConstants->GetDimension(THEME_DIALOG_PADDING_BOTTOM_ADJUST)); + theme->titleDefaultPadding_ = Edge(themeConstants->GetDimension(THEME_DIALOG_PADDING_LEFT), + themeConstants->GetDimension(THEME_DIALOG_TITLE_PADDING_VERTICAL), + themeConstants->GetDimension(THEME_DIALOG_PADDING_RIGHT), + themeConstants->GetDimension(THEME_DIALOG_TITLE_PADDING_VERTICAL)); + theme->titleAdjustPadding_ = Edge(themeConstants->GetDimension(THEME_DIALOG_PADDING_LEFT_ADJUST), + themeConstants->GetDimension(THEME_DIALOG_TITLE_PADDING_VERTICAL), + themeConstants->GetDimension(THEME_DIALOG_PADDING_RIGHT_ADJUST), + themeConstants->GetDimension(THEME_DIALOG_PADDING_BOTTOM_ADJUST)); + theme->contentDefaultPadding_ = Edge(themeConstants->GetDimension(THEME_DIALOG_PADDING_LEFT), + themeConstants->GetDimension(THEME_DIALOG_TITLE_PADDING_VERTICAL), + themeConstants->GetDimension(THEME_DIALOG_PADDING_RIGHT), + themeConstants->GetDimension(THEME_DIALOG_PADDING_BOTTOM)); + theme->contentAdjustPadding_ = Edge(themeConstants->GetDimension(THEME_DIALOG_PADDING_LEFT_ADJUST), + themeConstants->GetDimension(THEME_DIALOG_TITLE_PADDING_VERTICAL), + themeConstants->GetDimension(THEME_DIALOG_PADDING_RIGHT_ADJUST), + themeConstants->GetDimension(THEME_DIALOG_PADDING_BOTTOM_ADJUST)); + theme->actionsPadding_ = Edge(themeConstants->GetDimension(THEME_DIALOG_PADDING_ACTIONS_LEFT), + themeConstants->GetDimension(THEME_DIALOG_PADDING_ACTIONS_TOP), + themeConstants->GetDimension(THEME_DIALOG_PADDING_ACTIONS_RIGHT), + themeConstants->GetDimension(THEME_DIALOG_PADDING_ACTIONS_BOTTOM)); + theme->buttonPaddingLeft_ = + Edge(themeConstants->GetDimension(THEME_DIALOG_PADDING_MIN).Value(), 0.0, 0.0, 0.0, DimensionUnit::VP); + theme->buttonPaddingRight_ = + Edge(0.0, 0.0, themeConstants->GetDimension(THEME_DIALOG_PADDING_MIN).Value(), 0.0, DimensionUnit::VP); + theme->buttonPaddingCenter_ = Edge(0.0, themeConstants->GetDimension(THEME_DIALOG_PADDING_MID).Value(), 0.0, + themeConstants->GetDimension(THEME_DIALOG_PADDING_MID).Value(), DimensionUnit::VP); + theme->buttonSpacingHorizontal_ = themeConstants->GetDimension(THEME_DIALOG_BUTTON_SPACING_HORIZONTAL); + theme->buttonSpacingVertical_ = themeConstants->GetDimension(THEME_DIALOG_BUTTON_SPACING_VERTICAL); + theme->buttonBackgroundColor_ = themeConstants->GetColor(THEME_DIALOG_BUTTON_BG_COLOR); + theme->buttonClickedColor_ = themeConstants->GetColor(THEME_DIALOG_BUTTON_CLICKED_COLOR); + theme->frameStart_ = themeConstants->GetDouble(THEME_DIALOG_FRAME_START); + theme->frameEnd_ = themeConstants->GetDouble(THEME_DIALOG_FRAME_END); + theme->scaleStart_ = themeConstants->GetDouble(THEME_DIALOG_SCALE_START); + theme->scaleEnd_ = themeConstants->GetDouble(THEME_DIALOG_SCALE_END); + theme->opacityStart_ = themeConstants->GetDouble(THEME_DIALOG_OPACITY_START); + theme->opacityEnd_ = themeConstants->GetDouble(THEME_DIALOG_OPACITY_END); + theme->maskColorStart_ = themeConstants->GetColor(THEME_DIALOG_MASK_COLOR_START); + theme->maskColorEnd_ = themeConstants->GetColor(THEME_DIALOG_MASK_COLOR_END); + theme->animationDurationIn_ = themeConstants->GetInt(THEME_DIALOG_ANIMATION_DURATION_IN); + theme->animationDurationOut_ = themeConstants->GetInt(THEME_DIALOG_ANIMATION_DURATION_OUT); + theme->translateValue_ = Dimension(themeConstants->GetDouble(THEME_DIALOG_TRANSLATE), DimensionUnit::PX); + theme->dividerColor_ = themeConstants->GetColor(THEME_DIALOG_DIVIDER_COLOR); + theme->dividerWidth_ = themeConstants->GetDimension(THEME_DIALOG_DIVIDER_WIDTH); + theme->dividerHeight_ = themeConstants->GetDimension(THEME_DIALOG_DIVIDER_HEIGHT); + theme->dividerPadding_ = Edge(themeConstants->GetDimension(THEME_DIALOG_DIVIDER_PADDING_HORIZON), + themeConstants->GetDimension(THEME_DIALOG_DIVIDER_PADDING_VERTICAL), + themeConstants->GetDimension(THEME_DIALOG_DIVIDER_PADDING_HORIZON), + themeConstants->GetDimension(THEME_DIALOG_DIVIDER_PADDING_VERTICAL)); + theme->marginBottom_ = themeConstants->GetDimension(THEME_OHOS_DIMENS_DIALOG_BOTTOM); + theme->marginLeft_ = themeConstants->GetDimension(THEME_OHOS_DIMENS_DIALOG_START); + theme->marginRight_ = themeConstants->GetDimension(THEME_OHOS_DIMENS_DIALOG_END); + ParsePattern(themeConstants->GetThemeStyle(), theme); + return theme; + } + + void ParsePattern(const RefPtr& themeStyle, const RefPtr& theme) const + { + if (!themeStyle) { + LOGI("progress theme style is null"); + return; + } + theme->backgroundColor_ = themeStyle->GetAttr(THEME_ATTR_COLOR_DIALOG_BG, Color::BLACK); + theme->titleTextStyle_.SetTextColor(themeStyle->GetAttr(THEME_ATTR_COLOR_PRIMARY, Color::BLACK)); + theme->contentTextStyle_.SetTextColor(themeStyle->GetAttr(THEME_ATTR_COLOR_PRIMARY, Color::BLACK)); + theme->buttonBackgroundColor_ = themeStyle->GetAttr(THEME_ATTR_COLOR_DIALOG_BG, Color::BLACK); + } + }; + + ~DialogTheme() override = default; + + const Radius& GetRadius() const + { + return radius_; + } + + const Color& GetBackgroundColor() const + { + return backgroundColor_; + } + + const TextStyle& GetTitleTextStyle() const + { + return titleTextStyle_; + } + + const Dimension& GetTitleMinFontSize() const + { + return titleMinFontSize_; + } + + const Dimension& GetContentMinFontSize() const + { + return contentMinFontSize_; + } + + uint32_t GetTitleMaxLines() const + { + return titleMaxLines_; + } + + const TextStyle& GetContentTextStyle() const + { + return contentTextStyle_; + } + + const Edge& GetDefaultPadding() const + { + return defaultPadding_; + } + + const Edge& GetAdjustPadding() const + { + return adjustPadding_; + } + + const Edge& GetTitleDefaultPadding() const + { + return titleDefaultPadding_; + } + + const Edge& GetTitleAdjustPadding() const + { + return titleAdjustPadding_; + } + + const Edge& GetContentDefaultPadding() const + { + return contentDefaultPadding_; + } + + const Edge& GetContentAdjustPadding() const + { + return contentAdjustPadding_; + } + + const Edge& GetActionsPadding() const + { + return actionsPadding_; + } + + const Edge& GetButtonPaddingLeft() const + { + return buttonPaddingLeft_; + } + + const Edge& GetButtonPaddingRight() const + { + return buttonPaddingRight_; + } + + const Edge& GetButtonPaddingCenter() const + { + return buttonPaddingCenter_; + } + + const Dimension& GetButtonSpacingHorizontal() const + { + return buttonSpacingHorizontal_; + } + + const Dimension& GetButtonSpacingVertical() const + { + return buttonSpacingVertical_; + } + + const Color& GetButtonBackgroundColor() const + { + return buttonBackgroundColor_; + } + + const Color& GetButtonClickedColor() const + { + return buttonClickedColor_; + } + + double GetFrameStart() const + { + return frameStart_; + } + + double GetFrameEnd() const + { + return frameEnd_; + } + + double GetScaleStart() const + { + return scaleStart_; + } + + double GetScaleEnd() const + { + return scaleEnd_; + } + + double GetOpacityStart() const + { + return opacityStart_; + } + + double GetOpacityEnd() const + { + return opacityEnd_; + } + + const Dimension& GetTranslateValue() const + { + return translateValue_; + } + + const Color& GetMaskColorStart() const + { + return maskColorStart_; + } + + const Color& GetMaskColorEnd() const + { + return maskColorEnd_; + } + + int32_t GetAnimationDurationIn() const + { + return animationDurationIn_; + } + + int32_t GetAnimationDurationOut() const + { + return animationDurationOut_; + } + + const Color& GetDividerColor() + { + return dividerColor_; + } + + const Dimension& GetDividerWidth() + { + return dividerWidth_; + } + + const Dimension& GetDividerHeight() + { + return dividerHeight_; + } + + const Edge& GetDividerPadding() + { + return dividerPadding_; + } + + const Dimension& GetMarginBottom() const + { + return marginBottom_; + } + + const Dimension& GetMarginLeft() const + { + return marginLeft_; + } + + const Dimension& GetMarginRight() const + { + return marginRight_; + } + +protected: + DialogTheme() = default; + +private: + Radius radius_; + Color backgroundColor_; + TextStyle titleTextStyle_; + TextStyle contentTextStyle_; + Dimension titleMinFontSize_; + Dimension contentMinFontSize_; + uint32_t titleMaxLines_ = 1; + Edge defaultPadding_; + Edge adjustPadding_; + Edge titleDefaultPadding_; + Edge titleAdjustPadding_; + Edge contentDefaultPadding_; + Edge contentAdjustPadding_; + Edge actionsPadding_; + Edge buttonPaddingLeft_; + Edge buttonPaddingRight_; + Edge buttonPaddingCenter_; + Dimension buttonSpacingHorizontal_; + Dimension buttonSpacingVertical_; + Color buttonBackgroundColor_; + Color buttonClickedColor_; + Dimension translateValue_; + double frameStart_ = 0.0; + double frameEnd_ = 1.0; + double scaleStart_ = 0.0; + double scaleEnd_ = 1.0; + double opacityStart_ = 0.0; + double opacityEnd_ = 1.0; + int32_t animationDurationIn_ = 250; + int32_t animationDurationOut_ = 250; + Color maskColorStart_; + Color maskColorEnd_; + Color dividerColor_; + Dimension dividerWidth_; + Dimension dividerHeight_; + Edge dividerPadding_; + Dimension marginLeft_; + Dimension marginRight_; + Dimension marginBottom_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIALOG_DIALOG_THEME_H diff --git a/frameworks/core/components/dialog/flutter_render_dialog.cpp b/frameworks/core/components/dialog/flutter_render_dialog.cpp new file mode 100644 index 00000000..bf5d2b18 --- /dev/null +++ b/frameworks/core/components/dialog/flutter_render_dialog.cpp @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/dialog/flutter_render_dialog.h" + +namespace OHOS::Ace { + +RefPtr RenderDialog::Create() +{ + LOGD("Create"); + return AceType::MakeRefPtr(); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/dialog/flutter_render_dialog.h b/frameworks/core/components/dialog/flutter_render_dialog.h new file mode 100644 index 00000000..7c014c3d --- /dev/null +++ b/frameworks/core/components/dialog/flutter_render_dialog.h @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIALOG_FLUTTER_RENDER_DIALOG_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIALOG_FLUTTER_RENDER_DIALOG_H + +#include "flutter/lib/ui/ui_dart_state.h" + +#include "core/components/dialog/render_dialog.h" +#include "core/pipeline/base/flutter_render_context.h" + +namespace OHOS::Ace { + +class FlutterRenderDialog : public RenderDialog { + DECLARE_ACE_TYPE(FlutterRenderDialog, RenderDialog); + +public: + FlutterRenderDialog() = default; + ~FlutterRenderDialog() override = default; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIALOG_FLUTTER_RENDER_DIALOG_H diff --git a/frameworks/core/components/dialog/render_dialog.cpp b/frameworks/core/components/dialog/render_dialog.cpp new file mode 100644 index 00000000..b3e63b0c --- /dev/null +++ b/frameworks/core/components/dialog/render_dialog.cpp @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/dialog/render_dialog.h" + +namespace OHOS::Ace { + +void RenderDialog::Update(const RefPtr& component) +{ + MarkNeedLayout(); +} + +void RenderDialog::PerformLayout() +{ + if (!GetChildren().empty()) { + const auto& child = GetChildren().front(); + child->Layout(GetLayoutParam()); + auto childSize = child->GetLayoutSize(); + SetLayoutSize(childSize); + } +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/dialog/render_dialog.h b/frameworks/core/components/dialog/render_dialog.h new file mode 100644 index 00000000..c87209d6 --- /dev/null +++ b/frameworks/core/components/dialog/render_dialog.h @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIALOG_RENDER_DIALOG_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIALOG_RENDER_DIALOG_H + +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderDialog : public RenderNode { + DECLARE_ACE_TYPE(RenderDialog, RenderNode); + +public: + static RefPtr Create(); + void Update(const RefPtr& component) override; + void PerformLayout() override; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIALOG_RENDER_DIALOG_H diff --git a/frameworks/core/components/dialog_modal/BUILD.gn b/frameworks/core/components/dialog_modal/BUILD.gn new file mode 100644 index 00000000..87e9e790 --- /dev/null +++ b/frameworks/core/components/dialog_modal/BUILD.gn @@ -0,0 +1,22 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("dialog_modal") { + sources = [ + "dialog_modal_component.cpp", + "dialog_modal_element.cpp", + "render_dialog_modal.cpp", + ] +} diff --git a/frameworks/core/components/dialog_modal/dialog_modal_component.cpp b/frameworks/core/components/dialog_modal/dialog_modal_component.cpp new file mode 100644 index 00000000..073f7b44 --- /dev/null +++ b/frameworks/core/components/dialog_modal/dialog_modal_component.cpp @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/dialog_modal/dialog_modal_component.h" + +#include "core/components/box/box_component.h" +#include "core/components/clip/clip_component.h" +#include "core/components/dialog_modal/dialog_modal_element.h" +#include "core/components/dialog_modal/render_dialog_modal.h" +#include "core/components/tween/tween_component.h" + +namespace OHOS::Ace { +namespace { + +const Dimension BG_MARGIN = 16.0_vp; +const Dimension BG_RADIUS = 16.0_vp; +const Color BG_COLOR = Color(0xfff7f7f7); +const char* DIALOG_TWEEN_NAME = "dialogModalTween"; + +} // namespace + +RefPtr DialogModalComponent::Create(RefPtr child) +{ + auto component = AceType::MakeRefPtr(); + component->SetChild(child); + component->BuildInnerChild(); + return component; +} + +RefPtr DialogModalComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +RefPtr DialogModalComponent::CreateRenderNode() +{ + return RenderDialogModal::Create(); +} + +void DialogModalComponent::BuildInnerChild() +{ + auto bgDecoration = AceType::MakeRefPtr(); + bgDecoration->SetBackgroundColor(BG_COLOR); + auto bgBox = AceType::MakeRefPtr(); + bgBox->SetBackDecoration(bgDecoration); + bgBox->SetChild(GetChild()); + auto clip = AceType::MakeRefPtr(bgBox); + clip->SetTopLeftRadius(Radius(BG_RADIUS)); + clip->SetTopRightRadius(Radius(BG_RADIUS)); + clip->SetBottomLeftRadius(Radius(BG_RADIUS)); + clip->SetBottomRightRadius(Radius(BG_RADIUS)); + clip->SetHeight(0.0_vp); + auto box = AceType::MakeRefPtr(); + auto decoration = AceType::MakeRefPtr(); + Border border; + border.SetBorderRadius(Radius(BG_RADIUS)); + decoration->SetBorder(border); + box->SetMargin(Edge(BG_MARGIN)); + box->SetBackDecoration(decoration); + box->SetChild(clip); + auto tween = AceType::MakeRefPtr(DIALOG_TWEEN_NAME, box); + tween->SetIsFirstFrameShow(false); + SetChild(tween); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/dialog_modal/dialog_modal_component.h b/frameworks/core/components/dialog_modal/dialog_modal_component.h new file mode 100644 index 00000000..3a7334e0 --- /dev/null +++ b/frameworks/core/components/dialog_modal/dialog_modal_component.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIALOG_MODAL_DIALOG_MODAL_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIALOG_MODAL_DIALOG_MODAL_COMPONENT_H + +#include "core/pipeline/base/sole_child_component.h" + +namespace OHOS::Ace { + +class DialogModalComponent : public SoleChildComponent { + DECLARE_ACE_TYPE(DialogModalComponent, SoleChildComponent); + +public: + DialogModalComponent() = default; + ~DialogModalComponent() override = default; + + static RefPtr Create(RefPtr child); + + RefPtr CreateElement() override; + + RefPtr CreateRenderNode() override; + + void BuildInnerChild(); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIALOG_MODAL_DIALOG_MODAL_COMPONENT_H diff --git a/frameworks/core/components/dialog_modal/dialog_modal_element.cpp b/frameworks/core/components/dialog_modal/dialog_modal_element.cpp new file mode 100644 index 00000000..84cd7074 --- /dev/null +++ b/frameworks/core/components/dialog_modal/dialog_modal_element.cpp @@ -0,0 +1,246 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/dialog_modal/dialog_modal_element.h" + +#include "core/animation/curve.h" +#include "core/animation/curve_animation.h" +#include "core/animation/curves.h" +#include "core/components/box/box_element.h" +#include "core/components/clip/clip_element.h" +#include "core/components/dialog_modal/render_dialog_modal.h" +#include "core/components/page/page_element.h" +#include "core/components/root/render_root.h" + +namespace OHOS::Ace { +namespace { + +constexpr int32_t APP_TRANSITION_DURATION = 250; +constexpr double SCALE_BEGIN = 0.9; +constexpr double SCALE_END = 1.0; +constexpr double OPACITY_BEGIN = 0.0; +constexpr double OPACITY_END = 1.0; + +Size GetPageLayoutSize(const RefPtr& page) +{ + if (!page) { + LOGE("Get page layout size failed. page is null."); + return Size(); + } + auto render = page->GetRenderNode(); + if (!render) { + LOGE("Get page layout size failed. render is null."); + return Size(); + } + return render->GetLayoutSize(); +} + +} // namespace + +RefPtr DialogModalElement::GetOverlayElement() const +{ + auto tween = AceType::DynamicCast(GetFirstChild()); + if (!tween) { + LOGE("Get overlay element failed. Tween element is null!"); + return RefPtr(); + } + auto box = AceType::DynamicCast(tween->GetContentElement()); + if (!box) { + LOGE("Get overlay element failed. Box element is null!"); + return RefPtr(); + } + auto clip = AceType::DynamicCast(box->GetFirstChild()); + if (!clip) { + LOGE("Get overlay element failed. Clip element is null!"); + return RefPtr(); + } + auto bgBox = AceType::DynamicCast(clip->GetFirstChild()); + if (!bgBox) { + LOGE("Get overlay element failed. bgBox element is null!"); + return RefPtr(); + } + return AceType::DynamicCast(bgBox->GetFirstChild()); +} + +void DialogModalElement::UpdateSystemBarHeight(double statusBar, double navigationBar) +{ + auto renderNode = AceType::DynamicCast(GetRenderNode()); + if (!renderNode) { + return; + } + renderNode->UpdateSystemBarHeight(statusBar, navigationBar); +} + +void DialogModalElement::RegisterTransitionListener() +{ + auto context = context_.Upgrade(); + if (!context) { + LOGE("Register Transition Listener failed. context is null."); + return; + } + context->AddPageTransitionListener([weak = AceType::WeakClaim(this)](const TransitionEvent& event, + const WeakPtr& in, const WeakPtr& out) { + auto dialog = weak.Upgrade(); + if (!dialog) { + LOGE("Handle transition event failed. dialog is null."); + return; + } + auto dialogRender = AceType::DynamicCast(dialog->GetRenderNode()); + if (!dialogRender) { + LOGE("Handle transition event failed. dialog render is null."); + return; + } + if (event == TransitionEvent::POP_START) { + auto page = AceType::DynamicCast(out.Upgrade()); + if (!page) { + LOGE("Handle pop transition event failed. page out is null."); + return; + } + auto pageHeight = GetPageLayoutSize(page).Height(); + dialogRender->AnimateTo(pageHeight, true); + } else if (event == TransitionEvent::PUSH_START) { + auto page = AceType::DynamicCast(in.Upgrade()); + if (!page) { + // push first page. + dialogRender->SetLayoutNotify([weak]() { + auto dialog = weak.Upgrade(); + if (dialog) { + dialog->AnimateToEnterApp(); + } + }); + return; + } + auto render = page->GetRenderNode(); + if (!render) { + LOGE("Handle push transition event failed. page render is null."); + return; + } + auto fullSize = render->GetLayoutSize(); + auto pageHeight = fullSize.Height(); + dialogRender->AnimateTo(pageHeight, false); + } else { + // Do Nothing for other events. + } + }); +} + +void DialogModalElement::PerformBuild() +{ + SoleChildElement::PerformBuild(); + if (!controller_) { + controller_ = AceType::MakeRefPtr(GetContext()); + controller_->SetDuration(APP_TRANSITION_DURATION); + controller_->SetFillMode(FillMode::FORWARDS); + auto scale = MakeRefPtr>(SCALE_BEGIN, SCALE_END, Curves::FRICTION); + scale->SetReverseCurve(Curves::FAST_OUT_SLOW_IN); + auto opacity = MakeRefPtr>(OPACITY_BEGIN, OPACITY_END, Curves::FAST_OUT_SLOW_IN); + option_.SetTransformFloatAnimation(AnimationType::SCALE, scale); + option_.SetOpacityAnimation(opacity); + + auto tween = AceType::DynamicCast(GetFirstChild()); + if (!tween) { + LOGE("Dialog Modal perform build failed. tween is null."); + return; + } + tween->SetController(controller_); + tween->SetOption(option_); + tween->ApplyKeyframes(); + tween->SetOpacity(OPACITY_BEGIN); + } +} + +void DialogModalElement::CreateOriginAnimation() +{ + auto dialogRender = AceType::DynamicCast(GetRenderNode()); + if (!dialogRender) { + LOGE("Create origin animation failed. dialog Render is null."); + return; + } + const auto& clip = dialogRender->GetRenderClip(); + if (!clip) { + LOGE("Create origin animation failed. clip is null."); + return; + } + option_.ClearListeners(); + if (controller_) { + controller_->ClearInterpolators(); + } + const auto& clipRect = clip->GetClipRect(clip->GetPaintRect().GetOffset()); + double centerX = clipRect.GetOffset().GetX() + clipRect.Width() / 2.0; + double centerY = clipRect.GetOffset().GetY() + clipRect.Height() / 2.0; + option_.SetTransformOrigin(Dimension(centerX), Dimension(centerY)); + auto tween = AceType::DynamicCast(GetFirstChild()); + if (!tween) { + LOGE("Create origin animation failed. tween is null."); + return; + } + tween->SetOption(option_); + tween->ApplyKeyframes(); +} + +void DialogModalElement::AnimateToEnterApp() +{ + if (!controller_) { + LOGE("Animate To Enter App failed. controller is null."); + return; + } + controller_->RemoveStopListener(stopCallbackId_); + CreateOriginAnimation(); + controller_->Forward(); + auto rootElement = GetElementParent().Upgrade(); + if (!rootElement) { + LOGE("Animate To Enter App failed. root element is null."); + return; + } + auto root = AceType::DynamicCast(rootElement->GetRenderNode()); + if (!root) { + LOGE("Animate To Enter App failed. render root is null."); + return; + } + root->AnimateToShow(APP_TRANSITION_DURATION); +} + +void DialogModalElement::AnimateToExitApp() +{ + if (!controller_) { + LOGE("Animate To Exit App failed. controller is null."); + return; + } + controller_->RemoveStopListener(stopCallbackId_); + CreateOriginAnimation(); + controller_->Backward(); + stopCallbackId_ = controller_->AddStopListener([contextWeak = context_]() { + auto context = contextWeak.Upgrade(); + if (!context) { + LOGE("Handle dialog modal exit transition failed. context is null."); + return; + } + // force finish + context->Finish(false); + }); + auto rootElement = GetElementParent().Upgrade(); + if (!rootElement) { + LOGE("Animate To Exit App failed. root element is null."); + return; + } + auto root = AceType::DynamicCast(rootElement->GetRenderNode()); + if (!root) { + LOGE("Animate To Exit App failed. render root is null."); + return; + } + root->AnimateToHide(APP_TRANSITION_DURATION); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/dialog_modal/dialog_modal_element.h b/frameworks/core/components/dialog_modal/dialog_modal_element.h new file mode 100644 index 00000000..c86cfea2 --- /dev/null +++ b/frameworks/core/components/dialog_modal/dialog_modal_element.h @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIALOG_MODAL_DIALOG_MODAL_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIALOG_MODAL_DIALOG_MODAL_ELEMENT_H + +#include "core/components/overlay/overlay_element.h" +#include "core/components/tween/tween_element.h" +#include "core/pipeline/base/sole_child_element.h" + +namespace OHOS::Ace { + +class DialogModalElement : public SoleChildElement { + DECLARE_ACE_TYPE(DialogModalElement, SoleChildElement); + +public: + DialogModalElement() = default; + ~DialogModalElement() override = default; + + RefPtr GetOverlayElement() const; + + void UpdateSystemBarHeight(double statusBar, double navigationBar); + + void AnimateToEnterApp(); + + void AnimateToExitApp(); + + void RegisterTransitionListener(); + + void PerformBuild() override; + +private: + void CreateOriginAnimation(); + + TweenOption option_; + RefPtr controller_; + BaseId::IdType stopCallbackId_ = -1; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIALOG_MODAL_DIALOG_MODAL_ELEMENT_H diff --git a/frameworks/core/components/dialog_modal/render_dialog_modal.cpp b/frameworks/core/components/dialog_modal/render_dialog_modal.cpp new file mode 100644 index 00000000..785727d2 --- /dev/null +++ b/frameworks/core/components/dialog_modal/render_dialog_modal.cpp @@ -0,0 +1,260 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/dialog_modal/render_dialog_modal.h" + +#include "base/log/event_report.h" +#include "core/animation/curve.h" +#include "core/animation/curves.h" +#include "core/animation/keyframe.h" +#include "core/animation/keyframe_animation.h" +#include "core/components/dialog_modal/dialog_modal_component.h" +#include "core/components/page/page_element.h" +#include "core/components/root/render_root.h" +#include "core/components/stage/stage_element.h" + +namespace OHOS::Ace { +namespace { + +constexpr Dimension BG_MARGIN = 16.0_vp; +constexpr int32_t TRANSITION_DURATION = 350; +constexpr double MAX_HEIGHT_PERCENT = 0.8; + +} // namespace + +RefPtr RenderDialogModal::Create() +{ + return AceType::MakeRefPtr(); +} + +void RenderDialogModal::Update(const RefPtr& component) +{ + if (!controller_) { + controller_ = AceType::MakeRefPtr(GetContext()); + } + MarkNeedLayout(); +} + +void RenderDialogModal::PerformLayout() +{ + auto child = GetFirstChild(); + if (!child) { + LOGE("Child is null!"); + return; + } + auto statusBarPx = NormalizeToPx(Dimension(statusBarHeight_, DimensionUnit::VP)); + auto navigationBarPx = NormalizeToPx(Dimension(navigationBarHeight_, DimensionUnit::VP)); + auto innerLayoutParam = GetLayoutParam(); + auto maxSize = GetLayoutParam().GetMaxSize(); + bool exceeds = false; + double dialogHeight = maxSize.Height() * MAX_HEIGHT_PERCENT + NormalizeToPx(BG_MARGIN) * 2; + if (dialogHeight + statusBarPx + navigationBarPx > maxSize.Height()) { + // exceeds total height. + exceeds = true; + dialogHeight = maxSize.Height() - navigationBarPx - NormalizeToPx(BG_MARGIN); + } + maxSize.SetHeight(dialogHeight); + // Layout as max as possible. + innerLayoutParam.SetMaxSize(maxSize); + innerLayoutParam.SetMinSize(Size(maxSize.Width(), innerLayoutParam.GetMinSize().Height())); + viewPort_.SetHeight(maxSize.Height() - NormalizeToPx(BG_MARGIN) * 2); + viewPort_.SetWidth(maxSize.Width() - NormalizeToPx(BG_MARGIN) * 2); + child->Layout(innerLayoutParam); + auto childY = GetLayoutParam().GetMaxSize().Height() - navigationBarPx - maxSize.Height(); + child->SetPosition(Offset(0.0, childY)); + Size selfSize; + if (!exceeds) { + selfSize = Size(GetLayoutParam().GetMaxSize().Width(), + GetLayoutParam().GetMaxSize().Height() - statusBarPx - navigationBarPx); + } else { + selfSize = Size(GetLayoutParam().GetMaxSize().Width(), + dialogHeight - statusBarPx); + } + SetLayoutSize(selfSize); + PerformClip(); + if (notify_) { + decltype(notify_) notify = std::move(notify_); + notify(); + } +} + +void RenderDialogModal::UpdateSystemBarHeight(double statusBar, double navigationBar) +{ + statusBarHeight_ = statusBar; + double delta = NormalizeToPx(Dimension(navigationBar - navigationBarHeight_, DimensionUnit::VP)); + navigationBarHeight_ = navigationBar; + MovePage(delta); + MarkNeedLayout(); +} + +void RenderDialogModal::AnimateTo(double pageHeight, bool reverse) +{ + animateTargetHeight_ = pageHeight; + animatingPush_ = !reverse; + if (controller_->IsRunning()) { + controller_->Stop(); + lastAnimateFrame_ = false; + } + controller_->ClearInterpolators(); + controller_->ClearAllListeners(); + auto clip = GetRenderClip(); + if (!clip) { + LOGE("AnimateTo failed. render clip is null."); + EventReport::SendRenderException(RenderExcepType::CLIP_ERR); + return; + } + double from = clip->GetHeight(); + auto keyframeFrom = AceType::MakeRefPtr>(0.0, reverse ? pageHeight : from); + auto keyframeTo = AceType::MakeRefPtr>(1.0, reverse ? from : pageHeight); + auto heightAnimation = AceType::MakeRefPtr>(); + heightAnimation->AddKeyframe(keyframeFrom); + heightAnimation->AddKeyframe(keyframeTo); + heightAnimation->SetCurve(Curves::FRICTION); + + heightAnimation->AddListener([weak = AceType::WeakClaim(this)](const double& height) { + auto dialogModal = weak.Upgrade(); + if (!dialogModal) { + LOGE("Semi modal is null."); + return; + } + if (LessNotEqual(height, 0.0)) { + LOGE("Height less than zero, do not animate it."); + return; + } + dialogModal->animatingPageHeight_ = height; + dialogModal->MarkNeedLayout(); + }); + controller_->AddInterpolator(heightAnimation); + controller_->SetDuration(TRANSITION_DURATION); + controller_->SetFillMode(FillMode::FORWARDS); + if (reverse) { + controller_->Backward(); + } else { + controller_->Forward(); + } + controller_->AddStopListener([weak = AceType::WeakClaim(this)]() { + auto dialog = weak.Upgrade(); + if (!dialog) { + return; + } + dialog->lastAnimateFrame_ = true; + }); +} + +Size RenderDialogModal::GetTopPageLayoutSize() const +{ + auto context = context_.Upgrade(); + if (!context) { + LOGE("Get Top page layout Size failed. context is null"); + return Size(); + } + auto stage = context->GetStageElement(); + if (!stage) { + LOGE("Get Top page layout Size failed. stage is null"); + return Size(); + } + auto topPage = stage->GetLastChild(); + if (!topPage) { + LOGE("Get Top page layout Size failed. topPage is null"); + return Size(); + } + auto render = topPage->GetRenderNode(); + if (!render) { + LOGE("Get Top page layout Size failed. render is null"); + return Size(); + } + return render->GetLayoutSize(); +} + +bool RenderDialogModal::CanRouterPage() const +{ + auto context = context_.Upgrade(); + if (!context) { + LOGE("Query can router page failed. context is null."); + return false; + } + auto stage = context->GetStageElement(); + if (!stage) { + LOGE("Query can router page failed. stage is null."); + return false; + } + return stage->CanRouterPage(); +} + +void RenderDialogModal::PerformClip() +{ + auto clip = GetRenderClip(); + if (!clip) { + LOGE("Perform build failed. render clip is null"); + EventReport::SendRenderException(RenderExcepType::CLIP_ERR); + return; + } + double pageHeight = 0.0; + if (IsAnimating()) { + pageHeight = animatingPageHeight_; + if (!NearEqual(GetTopPageLayoutSize().Height(), animateTargetHeight_) && animatingPush_) { + // Page height has changed during push page animation, change animation target height. + AnimateTo(GetTopPageLayoutSize().Height(), false); + } + lastAnimateFrame_ = false; + } else { + if (!CanRouterPage()) { + LOGD("Stage in page transition, do nothing."); + return; + } + pageHeight = GetTopPageLayoutSize().Height(); + } + clip->SetOffsetY(clip->GetLayoutSize().Height() - pageHeight); + clip->SetHeight(pageHeight); + clip->MarkNeedRender(); +} + +RefPtr RenderDialogModal::GetRenderClip() const +{ + auto transform = GetFirstChild(); + if (!transform) { + LOGE("Get Clip Render failed. transform is null."); + return nullptr; + } + auto display = transform->GetFirstChild(); + if (!display) { + LOGE("Get Clip Render failed. transform is null."); + return nullptr; + } + auto box = display->GetFirstChild(); + if (!box) { + LOGE("Get Clip Render failed. box is null."); + return nullptr; + } + return AceType::DynamicCast(box->GetFirstChild()); +} + +void RenderDialogModal::MovePage(double delta) +{ + auto context = context_.Upgrade(); + if (!context) { + LOGE("Move failed, context is null"); + return; + } + auto clip = GetRenderClip(); + if (!clip) { + LOGE("Move failed, clip is null"); + return; + } + double newHeight = clip->GetGlobalOffset().GetY() + clip->GetPaintRect().Height() - delta; + context->MovePage(Offset(clip->GetPaintRect().Width(), newHeight), delta); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/dialog_modal/render_dialog_modal.h b/frameworks/core/components/dialog_modal/render_dialog_modal.h new file mode 100644 index 00000000..21ef84e0 --- /dev/null +++ b/frameworks/core/components/dialog_modal/render_dialog_modal.h @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIALOG_MODAL_RENDER_DIALOG_MODAL_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIALOG_MODAL_RENDER_DIALOG_MODAL_H + +#include "core/animation/animator.h" +#include "core/components/clip/render_clip.h" +#include "core/components/dialog_modal/dialog_modal_component.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderDialogModal : public RenderNode { + DECLARE_ACE_TYPE(RenderDialogModal, RenderNode); + +public: + static RefPtr Create(); + + void Update(const RefPtr& component) override; + + void PerformLayout() override; + + void UpdateSystemBarHeight(double statusBar, double navigationBar); + + void AnimateTo(double childHeight, bool reverse); + + RefPtr GetRenderClip() const; + + using LayoutNotify = std::function; + void SetLayoutNotify(LayoutNotify&& layoutNotify) + { + notify_ = std::move(layoutNotify); + } + +private: + void PerformClip(); + double PerformClipAnimation(const RefPtr& clip); + bool CanRouterPage() const; + Size GetTopPageLayoutSize() const; + bool IsAnimating() const + { + return controller_->IsRunning() || lastAnimateFrame_; + } + void MovePage(double delta); + + RefPtr controller_; + bool lastAnimateFrame_ = false; + double animatingPageHeight_ = 0.0; + double animateTargetHeight_ = 0.0; + bool animatingPush_ = true; + double statusBarHeight_ = 0.0; + double navigationBarHeight_ = 0.0; + LayoutNotify notify_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIALOG_MODAL_RENDER_DIALOG_MODAL_H diff --git a/frameworks/core/components/dialog_tween/BUILD.gn b/frameworks/core/components/dialog_tween/BUILD.gn new file mode 100644 index 00000000..49be12de --- /dev/null +++ b/frameworks/core/components/dialog_tween/BUILD.gn @@ -0,0 +1,22 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("dialog_tween") { + sources = [ + "dialog_tween_component.cpp", + "dialog_tween_element.cpp", + "render_dialog_tween.cpp", + ] +} diff --git a/frameworks/core/components/dialog_tween/dialog_tween_component.cpp b/frameworks/core/components/dialog_tween/dialog_tween_component.cpp new file mode 100644 index 00000000..d0def9ee --- /dev/null +++ b/frameworks/core/components/dialog_tween/dialog_tween_component.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/dialog_tween/dialog_tween_component.h" + +#include "core/components/dialog_tween/dialog_tween_element.h" +#include "core/components/dialog_tween/render_dialog_tween.h" + +namespace OHOS::Ace { + +RefPtr DialogTweenComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +RefPtr DialogTweenComponent::CreateRenderNode() +{ + return RenderDialogTween::Create(); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/dialog_tween/dialog_tween_component.h b/frameworks/core/components/dialog_tween/dialog_tween_component.h new file mode 100644 index 00000000..8b9f923e --- /dev/null +++ b/frameworks/core/components/dialog_tween/dialog_tween_component.h @@ -0,0 +1,202 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIALOG_TWEEN_DIALOG_TWEEN_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIALOG_TWEEN_DIALOG_TWEEN_COMPONENT_H + +#include "core/animation/animator.h" +#include "core/components/common/properties/edge.h" +#include "core/pipeline/base/sole_child_component.h" + +namespace OHOS::Ace { + +class DialogTweenComponent : public SoleChildComponent { + DECLARE_ACE_TYPE(DialogTweenComponent, SoleChildComponent); + +public: + RefPtr CreateElement() override; + RefPtr CreateRenderNode() override; + + void SetAutoCancel(bool autoCancel) + { + autoCancel_ = autoCancel; + } + + void SetOnSuccessId(const EventMarker& onSuccessId) + { + onSuccessId_ = onSuccessId; + } + + void SetOnCancelId(const EventMarker& onCancelId) + { + onCancelId_ = onCancelId; + } + + void SetOnCompleteId(const EventMarker& onCompleteId) + { + onCompleteId_ = onCompleteId; + } + + void SetOnPositiveSuccessId(const EventMarker& onPositiveSuccessId) + { + onPositiveSuccessId_ = onPositiveSuccessId; + } + + void SetOnNegativeSuccessId(const EventMarker& onNegativeSuccessId) + { + onNegativeSuccessId_ = onNegativeSuccessId; + } + + void SetOnNeutralSuccessId(const EventMarker& onNeutralSuccessId) + { + onNeutralSuccessId_ = onNeutralSuccessId; + } + + void SetAnimator(const RefPtr& animator) + { + animator_ = animator; + } + + void SetParentAnimator(const RefPtr& parentAnimator) + { + parentAnimator_ = parentAnimator; + } + + bool GetAutoCancel() const + { + return autoCancel_; + } + + const EventMarker& GetOnSuccessId() const + { + return onSuccessId_; + } + + const EventMarker& GetOnCancelId() const + { + return onCancelId_; + } + + const EventMarker& GetOnCompleteId() const + { + return onCompleteId_; + } + + const EventMarker& GetOnPositiveSuccessId() const + { + return onPositiveSuccessId_; + } + + const EventMarker& GetOnNegativeSuccessId() const + { + return onNegativeSuccessId_; + } + + const EventMarker& GetOnNeutralSuccessId() const + { + return onNeutralSuccessId_; + } + + const RefPtr& GetAnimator() const + { + return animator_; + } + + const RefPtr& GetParentAnimator() const + { + return parentAnimator_; + } + + void SetComposedId(int32_t composedId) + { + composedId_ = composedId; + } + + int32_t GetComposedId() const + { + return composedId_; + } + + // used for inspector node in PC preview + void SetCustomDialogId(int32_t dialogId) + { + customDialogId_ = dialogId; + } + + // used for inspector node in PC preview + int32_t GetCustomDialogId() + { + return customDialogId_; + } + + void SetData(const std::string& data) + { + data_ = data; + } + + const std::string& GetData() const + { + return data_; + } + + void SetMargin(const Edge& edge) + { + margin_ = edge; + isSetMargin_ = true; + } + + const Edge& GetMargin() const + { + return margin_; + } + + void SetDialogLimit(bool flag) + { + isLimit_ = flag; + } + + bool GetDialogLimit() const + { + return isLimit_; + } + + bool IsSetMargin() const + { + return isSetMargin_; + } + +private: + bool autoCancel_ = true; + RefPtr animator_; + RefPtr parentAnimator_; + EventMarker onSuccessId_; + EventMarker onCancelId_; + EventMarker onCompleteId_; + EventMarker onPositiveSuccessId_; + EventMarker onNegativeSuccessId_; + EventMarker onNeutralSuccessId_; + int32_t composedId_ = 0; + // used for inspector node in PC preview + int32_t customDialogId_ = -1; + std::string data_; + + Edge margin_; + bool isSetMargin_ = false; + bool isLimit_ = true; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIALOG_TWEEN_DIALOG_TWEEN_COMPONENT_H diff --git a/frameworks/core/components/dialog_tween/dialog_tween_element.cpp b/frameworks/core/components/dialog_tween/dialog_tween_element.cpp new file mode 100644 index 00000000..a1ee3a33 --- /dev/null +++ b/frameworks/core/components/dialog_tween/dialog_tween_element.cpp @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/dialog_tween/dialog_tween_element.h" + +#include "core/components/dialog_tween/dialog_tween_component.h" +#include "core/components/dialog_tween/render_dialog_tween.h" +#include "core/components/transition/transition_element.h" + +namespace OHOS::Ace { + +void DialogTweenElement::PerformBuild() +{ + RefPtr dialogTween = AceType::DynamicCast(component_); + if (!dialogTween) { + return; + } + const auto& child = children_.empty() ? nullptr : children_.front(); + UpdateChild(child, dialogTween->GetChild()); + auto animator = dialogTween->GetAnimator(); + if (!animator) { + return; + } + auto transitionElement = AceType::DynamicCast(GetChildren().front()); + if (!transitionElement) { + return; + } + auto renderDialogTween = AceType::DynamicCast(renderNode_); + animator->AddStartListener([weakDialog = AceType::WeakClaim(AceType::RawPtr(renderDialogTween))] { + auto renderDialogTween = weakDialog.Upgrade(); + if (renderDialogTween) { + renderDialogTween->SetDisableTouchEvent(true); + } + }); + animator->AddStopListener([weakDialog = AceType::WeakClaim(AceType::RawPtr(renderDialogTween)), + weakTransition = AceType::WeakClaim(AceType::RawPtr(transitionElement)), + weakController = WeakClaim(RawPtr(animator))] { + auto renderDialogTween = weakDialog.Upgrade(); + if (renderDialogTween) { + renderDialogTween->SetDisableTouchEvent(false); + } + auto transitionElement = weakTransition.Upgrade(); + if (transitionElement) { + auto animator = weakController.Upgrade(); + if (animator) { + animator->ClearInterpolators(); + } + transitionElement->SwitchTransitionOption(TransitionOptionType::TRANSITION_OUT, true); + } + }); + + transitionElement->SetController(animator); + transitionElement->SwitchTransitionOption(TransitionOptionType::TRANSITION_IN, true); +} + +bool DialogTweenElement::OnKeyEvent(const KeyEvent& keyEvent) +{ + if (keyEvent.code == KeyCode::KEYBOARD_BACK && keyEvent.action == KeyAction::UP) { + const auto& dialog = AceType::DynamicCast(renderNode_); + if (dialog) { + return dialog->PopDialog(); + } + return false; + } + return FocusGroup::OnKeyEvent(keyEvent); +} + +bool DialogTweenElement::RequestNextFocus(bool vertical, bool reverse, const Rect& rect) +{ + return false; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/dialog_tween/dialog_tween_element.h b/frameworks/core/components/dialog_tween/dialog_tween_element.h new file mode 100644 index 00000000..59a8200d --- /dev/null +++ b/frameworks/core/components/dialog_tween/dialog_tween_element.h @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIALOG_TWEEN_DIALOG_TWEEN_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIALOG_TWEEN_DIALOG_TWEEN_ELEMENT_H + +#include "core/focus/focus_node.h" +#include "core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +class DialogTweenElement : public RenderElement, public FocusGroup { + DECLARE_ACE_TYPE(DialogTweenElement, RenderElement, FocusGroup); + +public: + DialogTweenElement() = default; + ~DialogTweenElement() override = default; + + void PerformBuild() override; + +protected: + bool OnKeyEvent(const KeyEvent& keyEvent) override; + bool RequestNextFocus(bool vertical, bool reverse, const Rect& rect) override; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIALOG_TWEEN_DIALOG_TWEEN_ELEMENT_H diff --git a/frameworks/core/components/dialog_tween/render_dialog_tween.cpp b/frameworks/core/components/dialog_tween/render_dialog_tween.cpp new file mode 100644 index 00000000..7bdf9197 --- /dev/null +++ b/frameworks/core/components/dialog_tween/render_dialog_tween.cpp @@ -0,0 +1,376 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/dialog_tween/render_dialog_tween.h" + +#include "base/geometry/dimension.h" +#include "base/geometry/offset.h" +#include "base/log/event_report.h" +#include "base/utils/system_properties.h" +#include "base/utils/utils.h" +#include "core/components/dialog/dialog_theme.h" +#include "core/components/stack/stack_element.h" +#include "core/event/ace_event_helper.h" +#include "core/event/back_end_event_manager.h" + +namespace OHOS::Ace { +namespace { + +// Using UX spec: Constrain max height within 4/5 of screen height. +constexpr double DIALOG_HEIGHT_RATIO = 0.8; +constexpr double DIALOG_HEIGHT_RATIO_FOR_LANDSCAPE = 0.9; +constexpr double DIALOG_DRAG_RATIO = 0.5; +constexpr int32_t POSITIVE_SUCCESS_ID = 0; +constexpr int32_t NEGATIVE_SUCCESS_ID = 1; +constexpr int32_t NEUTRAL_SUCCESS_ID = 2; + +} // namespace + +RenderDialogTween::RenderDialogTween() +{ + clickDetector_ = AceType::MakeRefPtr(); + clickDetector_->SetOnClick([weak = WeakClaim(this)](const ClickInfo& info) { + auto dialog = weak.Upgrade(); + if (dialog) { + dialog->HandleClick(info.GetLocalLocation()); + } + }); + dragDetector_ = AceType::MakeRefPtr(Axis::HORIZONTAL); + dragDetector_->SetOnDragStart([weak = WeakClaim(this)](const DragStartInfo& startInfo) { + auto dialog = weak.Upgrade(); + if (dialog) { + dialog->dragStart_ = startInfo.GetLocalLocation().GetX(); + } + }); + dragDetector_->SetOnDragEnd([weak = WeakClaim(this)](const DragEndInfo& endInfo) { + auto dialog = weak.Upgrade(); + if (dialog) { + double dragEnd = endInfo.GetLocalLocation().GetX(); + if (GreatOrEqual(dragEnd - dialog->dragStart_, dialog->GetLayoutSize().Width() * DIALOG_DRAG_RATIO)) { + dialog->PopDialog(); + } + } + }); +} + +RenderDialogTween::~RenderDialogTween() +{ + auto dialogTweenComponent = weakDialogTweenComponent_.Upgrade(); + if (dialogTweenComponent) { + RemoveBackendEvent(dialogTweenComponent); + } +} + +RefPtr RenderDialogTween::Create() +{ + return AceType::MakeRefPtr(); +} + +void RenderDialogTween::Update(const RefPtr& component) +{ + const RefPtr dialog = AceType::DynamicCast(component); + if (!dialog) { + LOGE("RenderDialogTween update with nullptr"); + EventReport::SendRenderException(RenderExcepType::RENDER_COMPONENT_ERR); + return; + } + weakDialogTweenComponent_ = dialog; + autoCancel_ = dialog->GetAutoCancel(); + onSuccess_ = AceAsyncEvent::Create(dialog->GetOnSuccessId(), context_); + onCancel_ = AceAsyncEvent::Create(dialog->GetOnCancelId(), context_); + onComplete_ = AceAsyncEvent::Create(dialog->GetOnCompleteId(), context_); + animator_ = dialog->GetParentAnimator(); + composedId_ = dialog->GetComposedId(); + customDialogId_ = dialog->GetCustomDialogId(); + data_ = dialog->GetData(); + isLimit_ = dialog->GetDialogLimit(); + isSetMargin_ = dialog->IsSetMargin(); + if (isSetMargin_) { + margin_ = dialog->GetMargin(); + } + BackEndEventManager::GetInstance().BindBackendEvent( + dialog->GetOnPositiveSuccessId(), [weak = WeakClaim(this)]() { + auto dialog = weak.Upgrade(); + dialog->CallOnSuccess(POSITIVE_SUCCESS_ID); + }); + + BackEndEventManager::GetInstance().BindBackendEvent( + dialog->GetOnNegativeSuccessId(), [weak = WeakClaim(this)]() { + auto dialog = weak.Upgrade(); + dialog->CallOnSuccess(NEGATIVE_SUCCESS_ID); + }); + + BackEndEventManager::GetInstance().BindBackendEvent( + dialog->GetOnNeutralSuccessId(), [weak = WeakClaim(this)]() { + auto dialog = weak.Upgrade(); + dialog->CallOnSuccess(NEUTRAL_SUCCESS_ID); + }); + MarkNeedLayout(); +} + +void RenderDialogTween::CallOnSuccess(int32_t successType) +{ + const auto context = context_.Upgrade(); + if (!context) { + return; + } + const auto& lastStack = context->GetLastStack(); + if (!lastStack) { + return; + } + if (animator_) { + animator_->AddStopListener([successType, lastStack, weak = WeakClaim(this)] { + auto dialog = weak.Upgrade(); + if (!dialog) { + return; + } + lastStack->PopDialog(true); + if (dialog->onSuccess_) { + dialog->onSuccess_(successType); + } + if (dialog->onComplete_) { + dialog->onComplete_(); + } + }); + animator_->Play(); + } else { + lastStack->PopDialog(true); + if (onSuccess_) { + onSuccess_(successType); + } + if (onComplete_) { + onComplete_(); + } + } + const auto& accessibilityManager = context->GetAccessibilityManager(); + if (accessibilityManager) { + accessibilityManager->RemoveAccessibilityNodeById(composedId_); + } +} + +double RenderDialogTween::GetMaxWidthBasedOnGridType( + const RefPtr& info, GridSizeType type, DeviceType deviceType) +{ + if (deviceType == DeviceType::WATCH) { + if (type == GridSizeType::SM) { + return info->GetWidth(3); + } else if (type == GridSizeType::MD) { + return info->GetWidth(4); + } else if (type == GridSizeType::LG) { + return info->GetWidth(5); + } else { + LOGI("GetMaxWidthBasedOnGridType is undefined"); + return info->GetWidth(5); + } + } else if (deviceType == DeviceType::PHONE) { + if (type == GridSizeType::SM) { + return info->GetWidth(4); + } else if (type == GridSizeType::MD) { + return info->GetWidth(5); + } else if (type == GridSizeType::LG) { + return info->GetWidth(6); + } else { + LOGI("GetMaxWidthBasedOnGridType is undefined"); + return info->GetWidth(6); + } + } else { + if (type == GridSizeType::SM) { + return info->GetWidth(2); + } else if (type == GridSizeType::MD) { + return info->GetWidth(3); + } else if (type == GridSizeType::LG) { + return info->GetWidth(4); + } else { + LOGI("GetMaxWidthBasedOnGridType is undefined"); + return info->GetWidth(4); + } + } +} + +void RenderDialogTween::PerformLayout() +{ + LayoutParam innerLayout = GetLayoutParam(); + auto maxSize = innerLayout.GetMaxSize(); + auto theme = GetTheme(); + if (!theme) { + return; + } + // Set different layout param for different devices + auto gridSizeType = GridSystemManager::GetInstance().GetCurrentSize(); + auto columnInfo = GridSystemManager::GetInstance().GetInfoByType(GridColumnType::DIALOG); + columnInfo->GetParent()->BuildColumnWidth(); + auto width = GetMaxWidthBasedOnGridType(columnInfo, gridSizeType, SystemProperties::GetDeviceType()); + if (!isLimit_) { + innerLayout.SetMinSize(Size(0.0, 0.0)); + innerLayout.SetMaxSize(Size(maxSize.Width(), maxSize.Height())); + } else if (SystemProperties::GetDeviceType() == DeviceType::WATCH) { + innerLayout.SetMinSize(Size(width, 0.0)); + innerLayout.SetMaxSize(Size(width, maxSize.Height())); + } else if (SystemProperties::GetDeviceType() == DeviceType::PHONE) { + if (SystemProperties::GetDevcieOrientation() == DeviceOrientation::LANDSCAPE) { + innerLayout.SetMinSize(Size(width, 0.0)); + innerLayout.SetMaxSize(Size(width, maxSize.Height() * DIALOG_HEIGHT_RATIO_FOR_LANDSCAPE)); + } else { + innerLayout.SetMinSize(Size(width, 0.0)); + innerLayout.SetMaxSize(Size(width, maxSize.Height() * DIALOG_HEIGHT_RATIO)); + } + } else { + innerLayout.SetMinSize(Size(width, 0.0)); + innerLayout.SetMaxSize(Size(width, maxSize.Height() * DIALOG_HEIGHT_RATIO)); + } + if (GetChildren().empty()) { + SetLayoutSize(maxSize); + return; + } + const auto& child = GetChildren().front(); + child->Layout(innerLayout); + auto childSize = child->GetLayoutSize(); + Offset topLeftPoint; + // Set different positions for different devices + if (SystemProperties::GetDeviceType() == DeviceType::PHONE && + SystemProperties::GetDevcieOrientation() == DeviceOrientation::PORTRAIT) { + topLeftPoint = Offset((maxSize.Width() - childSize.Width()) / 2.0, + maxSize.Height() - childSize.Height() - (isSetMargin_ ? 0.0 : NormalizeToPx(theme->GetMarginBottom()))); + } else { + topLeftPoint = + Offset((maxSize.Width() - childSize.Width()) / 2.0, (maxSize.Height() - childSize.Height()) / 2.0); + } + + child->SetPosition(topLeftPoint); + UpdateTouchRegion(topLeftPoint, maxSize, childSize); + SetLayoutSize(maxSize); +} + +void RenderDialogTween::UpdateTouchRegion(const Offset& topLeftPoint, const Size& maxSize, const Size& childSize) +{ + double left = margin_.Left().Unit() == DimensionUnit::PERCENT ? margin_.Left().Value() * maxSize.Width() + : NormalizeToPx(margin_.Left()); + double top = margin_.Top().Unit() == DimensionUnit::PERCENT ? margin_.Top().Value() * maxSize.Height() + : NormalizeToPx(margin_.Top()); + Offset touchTopLeft = topLeftPoint + (isSetMargin_ ? Offset(left, top) : Offset(0.0, 0.0)); + + double right = margin_.Right().Unit() == DimensionUnit::PERCENT ? margin_.Right().Value() * maxSize.Width() + : NormalizeToPx(margin_.Right()); + double bottom = margin_.Bottom().Unit() == DimensionUnit::PERCENT ? margin_.Bottom().Value() * maxSize.Height() + : NormalizeToPx(margin_.Bottom()); + Offset touchBottomRight = topLeftPoint + childSize - (isSetMargin_ ? Offset(right, bottom) : Offset(0.0, 0.0)); + + maskTouchRegion_ = TouchRegion(touchTopLeft, touchBottomRight); + LOGD("top: %{public}lf, bottom:%{public}lf, left: %{public}lf, right:%{public}lf isSetMargin:%{public}d", + touchTopLeft.GetY(), touchBottomRight.GetY(), touchTopLeft.GetX(), touchBottomRight.GetX(), isSetMargin_); +} + +void RenderDialogTween::OnPaintFinish() +{ + InitAccessibilityEventListener(); +} + +void RenderDialogTween::HandleClick(const Offset& clickPosition) +{ + if (autoCancel_ && !maskTouchRegion_.ContainsInRegion(clickPosition.GetX(), clickPosition.GetY())) { + PopDialog(); + } +} + +void RenderDialogTween::OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) +{ + clickDetector_->SetCoordinateOffset(coordinateOffset); + result.emplace_back(clickDetector_); + result.emplace_back(dragDetector_); +} + +bool RenderDialogTween::PopDialog() +{ + const auto context = context_.Upgrade(); + if (!context) { + return false; + } + const auto& lastStack = context->GetLastStack(); + if (!lastStack) { + return false; + } + if (animator_) { + animator_->AddStopListener([lastStack, weak = AceType::WeakClaim(this)] { + auto dialog = weak.Upgrade(); + if (!dialog) { + return; + } + lastStack->PopDialog(true); + if (dialog->onCancel_) { + dialog->onCancel_(); + } + if (dialog->onComplete_) { + dialog->onComplete_(); + } + }); + animator_->Play(); + } else { + lastStack->PopDialog(true); + if (onCancel_) { + onCancel_(); + } + if (onComplete_) { + onComplete_(); + } + } + const auto& accessibilityManager = context->GetAccessibilityManager(); + if (accessibilityManager) { + accessibilityManager->RemoveAccessibilityNodeById(composedId_); + } +#if defined(WINDOWS_PLATFORM) || defined(MAC_PLATFORM) + auto node = accessibilityManager->GetAccessibilityNodeById(customDialogId_); + accessibilityManager->ClearNodeRectInfo(node, true); +#endif + return true; +} + +void RenderDialogTween::SetAnimator(const RefPtr& animator) +{ + animator_ = animator; +} + +void RenderDialogTween::InitAccessibilityEventListener() +{ + const auto& accessibilityNode = GetAccessibilityNode().Upgrade(); + if (!accessibilityNode) { + return; + } + accessibilityNode->SetFocusableState(true); + accessibilityNode->SetText(data_); + + accessibilityNode->AddSupportAction(AceAction::CUSTOM_ACTION); + accessibilityNode->AddSupportAction(AceAction::ACTION_CLICK); + accessibilityNode->AddSupportAction(AceAction::ACTION_FOCUS); + accessibilityNode->AddSupportAction(AceAction::ACTION_LONG_CLICK); + accessibilityNode->AddSupportAction(AceAction::GLOBAL_ACTION_BACK); + accessibilityNode->SetLongClickableState(true); + + accessibilityNode->SetActionLongClickImpl([weakPtr = WeakClaim(this)]() { + const auto& dialogTween = weakPtr.Upgrade(); + if (dialogTween) { + dialogTween->PopDialog(); + } + }); +} + +void RenderDialogTween::RemoveBackendEvent(const RefPtr& component) +{ + BackEndEventManager::GetInstance().RemoveBackEndEvent(component->GetOnPositiveSuccessId()); + BackEndEventManager::GetInstance().RemoveBackEndEvent(component->GetOnNegativeSuccessId()); + BackEndEventManager::GetInstance().RemoveBackEndEvent(component->GetOnNeutralSuccessId()); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/dialog_tween/render_dialog_tween.h b/frameworks/core/components/dialog_tween/render_dialog_tween.h new file mode 100644 index 00000000..170aa896 --- /dev/null +++ b/frameworks/core/components/dialog_tween/render_dialog_tween.h @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIALOG_TWEEN_RENDER_DIALOG_TWEEN_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIALOG_TWEEN_RENDER_DIALOG_TWEEN_H + +#include "core/animation/animator.h" +#include "core/components/common/layout/grid_layout_info.h" +#include "core/components/common/layout/grid_system_manager.h" +#include "core/components/dialog_tween/dialog_tween_component.h" +#include "core/components/slider/render_slider.h" +#include "core/gestures/click_recognizer.h" +#include "core/gestures/drag_recognizer.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderDialogTween : public RenderNode { + DECLARE_ACE_TYPE(RenderDialogTween, RenderNode); + +public: + RenderDialogTween(); + ~RenderDialogTween() override; + + static RefPtr Create(); + void Update(const RefPtr& component) override; + void PerformLayout() override; + void OnPaintFinish() override; + bool PopDialog(); + void SetAnimator(const RefPtr& animator_); + +protected: + void OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) override; + void HandleClick(const Offset& clickPosition); + void UpdateTouchRegion(const Offset& topLeftPoint, const Size& maxSize, const Size& childSize); + double GetMaxWidthBasedOnGridType(const RefPtr& info, GridSizeType type, DeviceType deviceType); + void Initialize(); + + bool autoCancel_ = true; + RefPtr clickDetector_; + RefPtr dragDetector_; + TouchRegion maskTouchRegion_; + +private: + void CallOnSuccess(int32_t successType); + void InitAccessibilityEventListener(); + void RemoveBackendEvent(const RefPtr& component); + + std::function onSuccess_; + std::function onCancel_; + std::function onComplete_; + std::function onPop_; + + std::string data_; + int32_t composedId_ = 0; + // used for inspector node in PC preview + int32_t customDialogId_ = -1; + double dragStart_ = 0.0; + RefPtr animator_; + bool isLimit_ = true; + Edge margin_; + bool isSetMargin_ = false; + WeakPtr weakDialogTweenComponent_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIALOG_TWEEN_RENDER_DIALOG_TWEEN_H diff --git a/frameworks/core/components/display/BUILD.gn b/frameworks/core/components/display/BUILD.gn new file mode 100644 index 00000000..15430cf0 --- /dev/null +++ b/frameworks/core/components/display/BUILD.gn @@ -0,0 +1,23 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("display") { + sources = [ + "display_component.cpp", + "display_element.cpp", + "flutter_render_display.cpp", + "render_display.cpp", + ] +} diff --git a/frameworks/core/components/display/display_component.cpp b/frameworks/core/components/display/display_component.cpp new file mode 100644 index 00000000..ae062c1d --- /dev/null +++ b/frameworks/core/components/display/display_component.cpp @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "display_component.h" + +#include "core/components/display/render_display.h" + +namespace OHOS::Ace { + +RefPtr DisplayComponent::CreateRenderNode() +{ + return RenderDisplay::Create(); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/display/display_component.h b/frameworks/core/components/display/display_component.h new file mode 100644 index 00000000..6c58f424 --- /dev/null +++ b/frameworks/core/components/display/display_component.h @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DISPLAY_DISPLAY_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DISPLAY_DISPLAY_COMPONENT_H + +#include "core/components/display/display_element.h" +#include "core/pipeline/base/sole_child_component.h" + +namespace OHOS::Ace { + +enum class VisibleType { + VISIBLE, + INVISIBLE, + GONE, +}; + +class ACE_EXPORT DisplayComponent : public SoleChildComponent { + DECLARE_ACE_TYPE(DisplayComponent, SoleChildComponent); + +public: + DisplayComponent() = default; + explicit DisplayComponent(const RefPtr& child) : SoleChildComponent(child) {} + ~DisplayComponent() override = default; + + RefPtr CreateRenderNode() override; + + RefPtr CreateElement() override + { + return AceType::MakeRefPtr(); + } + + VisibleType GetVisible() const + { + return visible_; + } + + double GetOpacity() const + { + return opacity_; + } + + void SetVisible(VisibleType visible) + { + visible_ = visible; + } + + void SetOpacity(double opacity) + { + opacity_ = opacity; + } + + void DisableLayer(bool disable) + { + disableLayer_ = disable; + } + + bool IsDisableLayer() const + { + return disableLayer_; + } + + void SetShadow(const Shadow& shadow) + { + shadow_ = shadow; + } + + const Shadow& GetShadow() const + { + return shadow_; + } + +private: + VisibleType visible_ = VisibleType::VISIBLE; + Shadow shadow_; + double opacity_ = 1.0; + bool disableLayer_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DISPLAY_DISPLAY_COMPONENT_H diff --git a/frameworks/core/components/display/display_element.cpp b/frameworks/core/components/display/display_element.cpp new file mode 100644 index 00000000..1f5a9e38 --- /dev/null +++ b/frameworks/core/components/display/display_element.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/display/display_element.h" + +#include "core/components/display/render_display.h" + +namespace OHOS::Ace { + +void DisplayElement::PerformBuild() +{ + SoleChildElement::PerformBuild(); + auto displayRender = AceType::DynamicCast(GetRenderNode()); + if (displayRender) { + displayRender->GetOpacityCallbacks(); + // refresh. + displayRender->UpdateOpacity(displayRender->GetOpacity()); + } +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/display/display_element.h b/frameworks/core/components/display/display_element.h new file mode 100644 index 00000000..34edd086 --- /dev/null +++ b/frameworks/core/components/display/display_element.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DISPLAY_DISPLAY_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DISPLAY_DISPLAY_ELEMENT_H + +#include "core/pipeline/base/sole_child_element.h" + +namespace OHOS::Ace { + +class DisplayElement : public SoleChildElement { + DECLARE_ACE_TYPE(DisplayElement, SoleChildElement); + +public: + DisplayElement() = default; + ~DisplayElement() override = default; + + void PerformBuild() override; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DISPLAY_DISPLAY_ELEMENT_H diff --git a/frameworks/core/components/display/flutter_render_display.cpp b/frameworks/core/components/display/flutter_render_display.cpp new file mode 100644 index 00000000..57533487 --- /dev/null +++ b/frameworks/core/components/display/flutter_render_display.cpp @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/display/flutter_render_display.h" + +namespace OHOS::Ace { + +using namespace Flutter; + +RefPtr RenderDisplay::Create() +{ + LOGD("Create"); + return AceType::MakeRefPtr(); +} + +RenderLayer FlutterRenderDisplay::GetRenderLayer() +{ + LOGD("GetRenderLayer"); + if (disableLayer_) { + return nullptr; + } + + if (opacity_ == 255) { + layer_ = nullptr; + return nullptr; + } + if (!layer_) { + layer_ = AceType::MakeRefPtr(opacity_, 0.0, 0.0); + } + return AceType::RawPtr(layer_); +} + +void FlutterRenderDisplay::Paint(RenderContext& context, const Offset& offset) +{ + LOGD("Paint"); + if (visible_ == VisibleType::VISIBLE) { + if (!disableLayer_ && layer_) { + layer_->SetOpacity(opacity_, 0.0, 0.0); + } + RenderNode::Paint(context, offset); + } +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/display/flutter_render_display.h b/frameworks/core/components/display/flutter_render_display.h new file mode 100644 index 00000000..b2732a22 --- /dev/null +++ b/frameworks/core/components/display/flutter_render_display.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DISPLAY_FLUTTER_RENDER_DISPLAY_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DISPLAY_FLUTTER_RENDER_DISPLAY_H + +#include "core/components/display/render_display.h" +#include "core/pipeline/base/flutter_render_context.h" +#include "core/pipeline/layers/opacity_layer.h" + +namespace OHOS::Ace { + +class FlutterRenderDisplay : public RenderDisplay { + DECLARE_ACE_TYPE(FlutterRenderDisplay, RenderDisplay); + +public: + FlutterRenderDisplay() = default; + ~FlutterRenderDisplay() override = default; + + RenderLayer GetRenderLayer() override; + void Paint(RenderContext& context, const Offset& offset) override; + +private: + RefPtr layer_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DISPLAY_FLUTTER_RENDER_DISPLAY_H diff --git a/frameworks/core/components/display/render_display.cpp b/frameworks/core/components/display/render_display.cpp new file mode 100644 index 00000000..9e80e4d5 --- /dev/null +++ b/frameworks/core/components/display/render_display.cpp @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/display/render_display.h" + +#include "base/log/dump_log.h" +#include "base/log/event_report.h" + +namespace OHOS::Ace { + +void RenderDisplay::Update(const RefPtr& component) +{ + const RefPtr display = AceType::DynamicCast(component); + if (!display) { + LOGE("RenderDisplay update with nullptr"); + EventReport::SendRenderException(RenderExcepType::RENDER_COMPONENT_ERR); + return; + } + visible_ = display->GetVisible(); + double opacity = std::min(std::max(display->GetOpacity(), 0.0), 1.0); + if (disableLayer_ != display->IsDisableLayer()) { + // recover opacity in child + UpdateOpacity(UINT8_MAX); + disableLayer_ = display->IsDisableLayer(); + } + if (!IsDeclarativeAnimationActive()) { + opacity_ = static_cast(round(opacity * UINT8_MAX)); + } + SetShadow(display->GetShadow()); + MarkNeedLayout(); +} + +void RenderDisplay::PerformLayout() +{ + LayoutParam layoutParam = GetLayoutParam(); + if (visible_ == VisibleType::GONE) { + layoutParam.SetMinSize(Size()); + layoutParam.SetMaxSize(Size()); + } + Size childSize; + if (!GetChildren().empty()) { + GetChildren().front()->Layout(layoutParam); + childSize = GetChildren().front()->GetLayoutSize(); + } + SetLayoutSize(childSize); +} + +void RenderDisplay::GetOpacityCallbacks() +{ + opacityCallbacks_.clear(); + if (!disableLayer_) { + return; + } + GetDomOpacityCallbacks(GetNodeId(), opacityCallbacks_); +} + +void RenderDisplay::Dump() +{ + if (DumpLog::GetInstance().GetDumpFile()) { + DumpLog::GetInstance().AddDesc(std::string("Display: ").append(visible_ == VisibleType::VISIBLE ? "visible" : + visible_ == VisibleType::INVISIBLE ? "invisible" : "gone")); + } +} + +bool RenderDisplay::GetVisible() const +{ + return RenderNode::GetVisible() && visible_ == VisibleType::VISIBLE; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/display/render_display.h b/frameworks/core/components/display/render_display.h new file mode 100644 index 00000000..779d7959 --- /dev/null +++ b/frameworks/core/components/display/render_display.h @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DISPLAY_RENDER_DISPLAY_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DISPLAY_RENDER_DISPLAY_H + +#include "core/components/display/display_component.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderDisplay : public RenderNode { + DECLARE_ACE_TYPE(RenderDisplay, RenderNode); + +public: + static RefPtr Create(); + void Update(const RefPtr& component) override; + void PerformLayout() override; + + void Dump() override; + + void UpdateVisibleType(VisibleType type) + { + if (visible_ != type) { + visible_ = type; + MarkNeedLayout(); + } + } + + void UpdateOpacity(uint8_t opacity) override + { + if (disableLayer_) { + for (auto& callback : opacityCallbacks_) { + callback(opacity); + } + return; + } + if (opacity_ != opacity) { + opacity_ = opacity; + MarkNeedRender(); + } + } + + uint8_t GetOpacity() const + { + return opacity_; + } + + VisibleType GetVisibleType() + { + return visible_; + } + + void GetOpacityCallbacks(); + + bool GetVisible() const override; + +protected: + VisibleType visible_ = VisibleType::VISIBLE; + bool disableLayer_ = false; + std::list opacityCallbacks_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DISPLAY_RENDER_DISPLAY_H diff --git a/frameworks/core/components/divider/BUILD.gn b/frameworks/core/components/divider/BUILD.gn new file mode 100644 index 00000000..5ef68941 --- /dev/null +++ b/frameworks/core/components/divider/BUILD.gn @@ -0,0 +1,22 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("divider") { + sources = [ + "divider_component.cpp", + "flutter_render_divider.cpp", + "render_divider.cpp", + ] +} diff --git a/frameworks/core/components/divider/divider_component.cpp b/frameworks/core/components/divider/divider_component.cpp new file mode 100644 index 00000000..f741d172 --- /dev/null +++ b/frameworks/core/components/divider/divider_component.cpp @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/divider/divider_component.h" + +#include "core/components/divider/render_divider.h" + +namespace OHOS::Ace { + +RefPtr DividerComponent::CreateRenderNode() +{ + return RenderDivider::Create(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/divider/divider_component.h b/frameworks/core/components/divider/divider_component.h new file mode 100644 index 00000000..c6d83ece --- /dev/null +++ b/frameworks/core/components/divider/divider_component.h @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIVIDER_DIVIDER_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIVIDER_DIVIDER_COMPONENT_H + +#include "core/components/common/properties/color.h" +#include "core/components/divider/divider_element.h" +#include "core/pipeline/base/render_component.h" + +namespace OHOS::Ace { + +class ACE_EXPORT DividerComponent : public RenderComponent { + DECLARE_ACE_TYPE(DividerComponent, RenderComponent); + +public: + RefPtr CreateRenderNode() override; + + RefPtr CreateElement() override + { + return AceType::MakeRefPtr(); + } + + const Color& GetDividerColor() const + { + return dividerColor_; + } + + bool IsVertical() const + { + return vertical_; + } + + void SetDividerColor(const Color& color) + { + dividerColor_ = color; + } + + void SetVertical(bool vertical) + { + vertical_ = vertical; + } + + const Dimension& GetStrokeWidth() const + { + return strokeWidth_; + } + + void SetStrokeWidth(const Dimension& strokeWidth) + { + strokeWidth_ = strokeWidth; + } + + LineCap GetLineCap() const + { + return lineCap_; + } + + void SetLineCap(LineCap lineCap) + { + lineCap_ = lineCap; + } + +private: + Color dividerColor_; + bool vertical_ = false; + LineCap lineCap_ = LineCap::BUTT; + Dimension strokeWidth_ = Dimension(1.0); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIVIDER_DIVIDER_COMPONENT_H diff --git a/frameworks/core/components/divider/divider_element.h b/frameworks/core/components/divider/divider_element.h new file mode 100644 index 00000000..9cfe02d6 --- /dev/null +++ b/frameworks/core/components/divider/divider_element.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIVIDER_DIVIDER_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIVIDER_DIVIDER_ELEMENT_H + +#include "core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +class DividerElement : public RenderElement { + DECLARE_ACE_TYPE(DividerElement, RenderElement); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIVIDER_DIVIDER_ELEMENT_H diff --git a/frameworks/core/components/divider/divider_theme.h b/frameworks/core/components/divider/divider_theme.h new file mode 100644 index 00000000..df32449c --- /dev/null +++ b/frameworks/core/components/divider/divider_theme.h @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIVIDER_DIVIDER_THEME_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIVIDER_DIVIDER_THEME_H + +#include "core/components/common/properties/color.h" +#include "core/components/theme/theme.h" +#include "core/components/theme/theme_constants.h" + +namespace OHOS::Ace { + +class DividerTheme : public virtual Theme { + DECLARE_ACE_TYPE(DividerTheme, Theme); + +public: + class Builder { + public: + Builder() = default; + ~Builder() = default; + + RefPtr Build(const RefPtr& themeConstants) const + { + RefPtr theme = AceType::Claim(new DividerTheme()); + if (!themeConstants) { + return theme; + } + theme->color_ = themeConstants->GetColor(THEME_DIVIDER_COLOR); + auto themeStyle = themeConstants->GetThemeStyle(); + if (themeStyle) { + theme->color_ = themeStyle->GetAttr(THEME_ATTR_SUBHEADER_DIVIDER, Color::BLACK); + } + return theme; + } + }; + + ~DividerTheme() override = default; + + const Color& GetColor() const + { + return color_; + } + +protected: + DividerTheme() = default; + +private: + Color color_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIVIDER_DIVIDER_THEME_H diff --git a/frameworks/core/components/divider/flutter_render_divider.cpp b/frameworks/core/components/divider/flutter_render_divider.cpp new file mode 100644 index 00000000..bb923642 --- /dev/null +++ b/frameworks/core/components/divider/flutter_render_divider.cpp @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/divider/flutter_render_divider.h" + +#include "third_party/skia/include/core/SkPaint.h" + +#include "core/components/divider/render_divider.h" +#include "core/pipeline/base/render_node.h" +#include "core/pipeline/base/scoped_canvas_state.h" + +namespace OHOS::Ace { + +RefPtr RenderDivider::Create() +{ + return AceType::MakeRefPtr(); +} + +void FlutterRenderDivider::Paint(RenderContext& context, const Offset& offset) +{ + if (NearZero(constrainStrokeWidth_) || NearZero(dividerLength_)) { + return; + } + auto canvas = ScopedCanvas::Create(context); + if (!canvas) { + LOGE("canvas fetch failed"); + return; + } + SkCanvas* skCanvas = canvas->canvas(); + if (!skCanvas) { + LOGE("skCanvas fetch failed"); + return; + } + + SkPaint paint; + paint.setAntiAlias(true); + paint.setColor(dividerColor_.GetValue()); + paint.setStyle(SkPaint::Style::kStroke_Style); + paint.setStrokeWidth(constrainStrokeWidth_); + + switch (lineCap_) { + case LineCap::BUTT: + case LineCap::SQUARE: + paint.setStrokeCap(SkPaint::Cap::kSquare_Cap); + break; + case LineCap::ROUND: + paint.setStrokeCap(SkPaint::Cap::kRound_Cap); + break; + } + dividerLength_ = + vertical_ ? GetLayoutSize().Height() - constrainStrokeWidth_ : GetLayoutSize().Width() - constrainStrokeWidth_; + + auto startPointX = offset.GetX() + constrainStrokeWidth_ / 2; + auto startPointY = offset.GetY() + constrainStrokeWidth_ / 2; + if (vertical_) { + skCanvas->drawLine(startPointX, startPointY, startPointX, startPointY + dividerLength_, paint); + } else { + skCanvas->drawLine(startPointX, startPointY, startPointX + dividerLength_, startPointY, paint); + } +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/divider/flutter_render_divider.h b/frameworks/core/components/divider/flutter_render_divider.h new file mode 100644 index 00000000..8b629d5e --- /dev/null +++ b/frameworks/core/components/divider/flutter_render_divider.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIVIDER_FLUTTER_RENDER_DIVIDER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIVIDER_FLUTTER_RENDER_DIVIDER_H + +#include "core/components/divider/render_divider.h" + +namespace OHOS::Ace { + +class FlutterRenderDivider : public RenderDivider { + DECLARE_ACE_TYPE(FlutterRenderDivider, RenderDivider); + +public: + void Paint(RenderContext& context, const Offset& offset) override; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIVIDER_FLUTTER_RENDER_DIVIDER_H diff --git a/frameworks/core/components/divider/render_divider.cpp b/frameworks/core/components/divider/render_divider.cpp new file mode 100644 index 00000000..11b62b8d --- /dev/null +++ b/frameworks/core/components/divider/render_divider.cpp @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/divider/render_divider.h" + +#include "base/log/event_report.h" +#include "core/components/divider/divider_component.h" + +namespace OHOS::Ace { + +void RenderDivider::Update(const RefPtr& component) +{ + auto divider = AceType::DynamicCast(component); + if (!divider) { + LOGE("RenderDivider update with nullptr"); + EventReport::SendRenderException(RenderExcepType::RENDER_COMPONENT_ERR); + return; + } + + dividerColor_ = divider->GetDividerColor(); + strokeWidth_ = divider->GetStrokeWidth(); + vertical_ = divider->IsVertical(); + lineCap_ = divider->GetLineCap(); + MarkNeedLayout(); +} + +void RenderDivider::PerformLayout() +{ + auto parent = GetParent().Upgrade(); + if (!parent) { + LOGE("RenderDivider PerformLayout with nullptr"); + return; + } + + constrainStrokeWidth_ = GreatNotEqual(NormalizeToPx(strokeWidth_), 0.0) ? NormalizeToPx(strokeWidth_) : 0.0; + if (!vertical_) { + dividerLength_ = GetLayoutParam().GetMaxSize().Width(); + auto constrainSize = GetLayoutParam().Constrain(Size(dividerLength_, constrainStrokeWidth_)); + SetLayoutSize(constrainSize); + dividerLength_ = constrainSize.Width(); + constrainStrokeWidth_ = GreatOrEqual(constrainStrokeWidth_, constrainSize.Height()) ? constrainSize.Height() + : constrainStrokeWidth_; + } else { + dividerLength_ = GetLayoutParam().GetMaxSize().Height(); + auto constrainSize = GetLayoutParam().Constrain(Size(constrainStrokeWidth_, dividerLength_)); + SetLayoutSize(constrainSize); + dividerLength_ = constrainSize.Height(); + constrainStrokeWidth_ = + GreatOrEqual(constrainStrokeWidth_, constrainSize.Width()) ? constrainSize.Width() : constrainStrokeWidth_; + } +} + +}; // namespace OHOS::Ace diff --git a/frameworks/core/components/divider/render_divider.h b/frameworks/core/components/divider/render_divider.h new file mode 100644 index 00000000..37595c01 --- /dev/null +++ b/frameworks/core/components/divider/render_divider.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIVIDER_RENDER_DIVIDER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIVIDER_RENDER_DIVIDER_H + +#include "core/components/divider/divider_component.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderDivider : public RenderNode { + DECLARE_ACE_TYPE(RenderDivider, RenderNode); + +public: + static RefPtr Create(); + void Update(const RefPtr& component) override; + void PerformLayout() override; + +protected: + bool vertical_ = false; + double dividerLength_ = 0.0; + double constrainStrokeWidth_ = 0.0; + Dimension strokeWidth_; + LineCap lineCap_ = LineCap::BUTT; + Color dividerColor_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DIVIDER_RENDER_DIVIDER_H diff --git a/frameworks/core/components/drag_bar/BUILD.gn b/frameworks/core/components/drag_bar/BUILD.gn new file mode 100644 index 00000000..57af64f1 --- /dev/null +++ b/frameworks/core/components/drag_bar/BUILD.gn @@ -0,0 +1,23 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("drag_bar") { + sources = [ + "drag_bar_component.cpp", + "drag_bar_element.cpp", + "flutter_render_drag_bar.cpp", + "render_drag_bar.cpp", + ] +} diff --git a/frameworks/core/components/drag_bar/drag_bar_component.cpp b/frameworks/core/components/drag_bar/drag_bar_component.cpp new file mode 100644 index 00000000..b20c5abb --- /dev/null +++ b/frameworks/core/components/drag_bar/drag_bar_component.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/drag_bar/drag_bar_component.h" + +#include "core/components/drag_bar/drag_bar_element.h" +#include "core/components/drag_bar/render_drag_bar.h" + +namespace OHOS::Ace { + +RefPtr DragBarComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +RefPtr DragBarComponent::CreateRenderNode() +{ + return RenderDragBar::Create(); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/drag_bar/drag_bar_component.h b/frameworks/core/components/drag_bar/drag_bar_component.h new file mode 100644 index 00000000..b64b7caf --- /dev/null +++ b/frameworks/core/components/drag_bar/drag_bar_component.h @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DRAG_BAR_DRAG_BAR_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DRAG_BAR_DRAG_BAR_COMPONENT_H + +#include "core/components/common/layout/constants.h" +#include "core/components/image/image_component.h" +#include "core/pipeline/base/render_component.h" + +namespace OHOS::Ace { + +class DragBarComponent : public RenderComponent { + DECLARE_ACE_TYPE(DragBarComponent, RenderComponent); + +public: + RefPtr CreateElement() override; + RefPtr CreateRenderNode() override; + + void SetPanelMode(PanelMode mode) + { + mode_ = mode; + } + + PanelMode GetPanelMode() const + { + return mode_; + } + + bool HasDragBar() const + { + return hasDragBar_; + } + + void SetHasDragBar(bool hasDragBar) + { + hasDragBar_ = hasDragBar; + } + +private: + PanelMode mode_ = PanelMode::FULL; + bool hasDragBar_ = true; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DRAG_BAR_DRAG_BAR_COMPONENT_H diff --git a/frameworks/core/components/drag_bar/drag_bar_element.cpp b/frameworks/core/components/drag_bar/drag_bar_element.cpp new file mode 100644 index 00000000..35c0c33f --- /dev/null +++ b/frameworks/core/components/drag_bar/drag_bar_element.cpp @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/drag_bar/drag_bar_element.h" + +#include "core/components/drag_bar/render_drag_bar.h" + +namespace OHOS::Ace { + +void DragBarElement::OnFocus() +{ + FocusNode::OnFocus(); + if (renderNode_) { + renderNode_->ChangeStatus(RenderStatus::FOCUS); + } +} + +void DragBarElement::OnBlur() +{ + FocusNode::OnBlur(); + if (renderNode_) { + renderNode_->ChangeStatus(RenderStatus::BLUR); + } +} + +bool DragBarElement::OnKeyEvent(const KeyEvent& keyEvent) +{ + if (keyEvent.code == KeyCode::KEYBOARD_ENTER || keyEvent.code == KeyCode::KEYBOARD_SPACE) { + auto dragBar = AceType::DynamicCast(renderNode_); + if (dragBar) { + dragBar->HandleClick(Offset()); + } + } + return FocusNode::OnKeyEvent(keyEvent); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/drag_bar/drag_bar_element.h b/frameworks/core/components/drag_bar/drag_bar_element.h new file mode 100644 index 00000000..964c8aab --- /dev/null +++ b/frameworks/core/components/drag_bar/drag_bar_element.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DRAG_BAR_DRAG_BAR_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DRAG_BAR_DRAG_BAR_ELEMENT_H + +#include "core/focus/focus_node.h" +#include "core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +class DragBarElement : public RenderElement, public FocusNode { + DECLARE_ACE_TYPE(DragBarElement, RenderElement, FocusNode); + +public: + void OnFocus() override; + void OnBlur() override; + +protected: + bool OnKeyEvent(const KeyEvent& keyEvent) override; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DRAG_BAR_DRAG_BAR_ELEMENT_H diff --git a/frameworks/core/components/drag_bar/flutter_render_drag_bar.cpp b/frameworks/core/components/drag_bar/flutter_render_drag_bar.cpp new file mode 100644 index 00000000..c4510f57 --- /dev/null +++ b/frameworks/core/components/drag_bar/flutter_render_drag_bar.cpp @@ -0,0 +1,97 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/drag_bar/flutter_render_drag_bar.h" + +#include "base/log/log.h" +#include "base/utils/utils.h" +#include "core/components/common/painter/flutter_universal_painter.h" +#include "core/components/common/properties/alignment.h" +#include "core/pipeline/base/scoped_canvas_state.h" +#include "core/pipeline/layers/offset_layer.h" + +namespace OHOS::Ace { +namespace { + +constexpr uint32_t HOVER_COLOR = 0x0c000000; +constexpr Dimension HOVER_RADIUS = 8.0_vp; +constexpr Dimension PAINT_WIDTH = 60.0_vp; +constexpr Dimension PAINT_HEIGHT = 16.0_vp; + +} // namespace + +RefPtr RenderDragBar::Create() +{ + return AceType::MakeRefPtr(); +} + +void FlutterRenderDragBar::Paint(RenderContext& context, const Offset& offset) +{ + if (GetLayoutSize().IsEmpty()) { + return; + } + const auto renderContext = static_cast(&context); + flutter::Canvas* canvas = renderContext->GetCanvas(); + if (canvas == nullptr) { + LOGE("Paint canvas is null"); + return; + } + SkCanvas* skCanvas = canvas->canvas(); + if (skCanvas == nullptr) { + LOGE("Paint skCanvas is null"); + return; + } + if (NearZero(opacity_)) { + return; + } + + SkPaint skPaint; + skPaint.setAntiAlias(true); + if (mouseState_ == MouseState::HOVER) { + auto size = Size(NormalizeToPx(PAINT_WIDTH), NormalizeToPx(PAINT_HEIGHT)); + auto alignOffset = Alignment::GetAlignPosition(GetLayoutSize(), size, Alignment::CENTER); + FlutterUniversalPainter::DrawHoverBackground( + skCanvas, Rect(offset + alignOffset, size), HOVER_COLOR, NormalizeToPx(HOVER_RADIUS)); + } + skPaint.setAlpha(alpha_ * opacity_); + skPaint.setColor(barColor_.GetValue()); + skPaint.setStyle(SkPaint::Style::kStroke_Style); + skPaint.setStrokeWidth(barWidth_ * scaleY_ * scaleWidth_); + skPaint.setStrokeCap(SkPaint::Cap::kRound_Cap); + Offset totalOffset = offset + iconOffset_ + dragOffset_; + SkPath path; + path.moveTo(SkDoubleToScalar(barLeftPoint_.GetX() * scaleX_ + totalOffset.GetX()), + SkDoubleToScalar(barLeftPoint_.GetY() * scaleY_ + totalOffset.GetY())); + path.lineTo(SkDoubleToScalar(barCenterPoint_.GetX() * scaleX_ + totalOffset.GetX()), + SkDoubleToScalar(barCenterPoint_.GetY() * scaleY_ + totalOffset.GetY())); + path.lineTo(SkDoubleToScalar(barRightPoint_.GetX() * scaleX_ + totalOffset.GetX()), + SkDoubleToScalar(barRightPoint_.GetY() * scaleY_ + totalOffset.GetY())); + if (!NearEqual(scaleIcon_, 1.0)) { + skCanvas->scale(scaleIcon_, scaleIcon_); + Size translate = GetLayoutSize() * ((scaleIcon_ - 1.0) / 2.0); + skCanvas->translate(-translate.Width(), -translate.Height()); + } + skCanvas->drawPath(path, skPaint); +} + +RenderLayer FlutterRenderDragBar::GetRenderLayer() +{ + if (!layer_) { + layer_ = AceType::MakeRefPtr(); + } + return AceType::RawPtr(layer_); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/drag_bar/flutter_render_drag_bar.h b/frameworks/core/components/drag_bar/flutter_render_drag_bar.h new file mode 100644 index 00000000..e9a37b7b --- /dev/null +++ b/frameworks/core/components/drag_bar/flutter_render_drag_bar.h @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DRAG_BAR_FLUTTER_RENDER_DRAG_BAR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DRAG_BAR_FLUTTER_RENDER_DRAG_BAR_H + +#include "base/geometry/offset.h" +#include "core/components/drag_bar/render_drag_bar.h" +#include "core/pipeline/base/flutter_render_context.h" +#include "core/pipeline/base/render_context.h" +#include "core/pipeline/layers/container_layer.h" + +namespace OHOS::Ace { + +class FlutterRenderDragBar final : public RenderDragBar { + DECLARE_ACE_TYPE(FlutterRenderDragBar, RenderDragBar); + +public: + FlutterRenderDragBar() = default; + ~FlutterRenderDragBar() override = default; + + void Paint(RenderContext& context, const Offset& offset) override; + + bool IsRepaintBoundary() const override + { + return true; + } + + RenderLayer GetRenderLayer() override; + +private: + RefPtr layer_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DRAG_BAR_FLUTTER_RENDER_DRAG_BAR_H diff --git a/frameworks/core/components/drag_bar/render_drag_bar.cpp b/frameworks/core/components/drag_bar/render_drag_bar.cpp new file mode 100644 index 00000000..881a7a08 --- /dev/null +++ b/frameworks/core/components/drag_bar/render_drag_bar.cpp @@ -0,0 +1,439 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/drag_bar/render_drag_bar.h" + +#include "core/animation/curve.h" +#include "core/animation/curve_animation.h" +#include "core/animation/curves.h" +#include "core/animation/keyframe.h" +#include "core/animation/keyframe_animation.h" +#include "core/components/drag_bar/drag_bar_component.h" + +namespace OHOS::Ace { +namespace { + +constexpr Dimension DRAG_ICON_WIDTH = 64.0_vp; +constexpr Dimension DRAG_ICON_HEIGHT = 24.0_vp; +constexpr Dimension HOT_REGION_WIDTH = 64.0_vp; +constexpr Dimension HOT_REGION_HEIGHT = 24.0_vp; +constexpr Dimension PAINT_WIDTH = 56.0_vp; +constexpr Dimension PAINT_HEIGHT = 8.0_vp; +constexpr Dimension MAX_DRAG_X = 10.0_vp; +constexpr Dimension MAX_DRAG_Y = 4.0_vp; +constexpr double DRAG_X_RATIO = 0.4; +constexpr double DRAG_Y_RATIO = 0.2; +constexpr double SCALE_ICON = 1.15; +constexpr double SCALE_WIDTH = 1.5 / SCALE_ICON; +constexpr int32_t DOWN_DURATION = 150; +constexpr int32_t RESET_DURATION = 250; +constexpr int32_t STYLE_DURATION = 200; + +// For DragBar Shrink State Point. +const Offset POINT_L_SHRINK = Offset(17.0, 15.0); // Left Point position. +const Offset POINT_C_SHRINK = Offset(32.0, 9.0); // Center Point position. +const Offset POINT_R_SHRINK = Offset(47.0, 15.0); // Right Point position. + +// For DragBar Initial State Point. +const Offset POINT_L_INITIAL = Offset(18.0, 12.0); // Left Point position. +const Offset POINT_C_INITIAL = Offset(32.0, 12.0); // Center Point position. +const Offset POINT_R_INITIAL = Offset(46.0, 12.0); // Right Point position. + +// For DragBar Expand State Point. +const Offset POINT_L_EXPAND = Offset(17.0, 9.0); // Left Point position. +const Offset POINT_C_EXPAND = Offset(32.0, 15.0); // Center Point position. +const Offset POINT_R_EXPAND = Offset(47.0, 9.0); // Right Point position. + +const Size DRAG_BAR_SIZE = Size(64.0, 24.0); + +constexpr double OPACITY_DEFAULT = 0.2; + +} // namespace + +void RenderDragBar::Update(const RefPtr& component) +{ + if (!animator_) { + animator_ = AceType::MakeRefPtr(GetContext()); + } + if (!barTouchController_) { + barTouchController_ = AceType::MakeRefPtr(GetContext()); + auto touchAnimation = AceType::MakeRefPtr>(1.0, SCALE_ICON, Curves::SHARP); + touchAnimation->AddListener([weak = AceType::WeakClaim(this)](double value) { + auto dragBar = weak.Upgrade(); + if (dragBar) { + dragBar->scaleIcon_ = value; + dragBar->scaleWidth_ = 1.0 + (value - 1.0) / (SCALE_ICON - 1.0) * (SCALE_WIDTH - 1.0); + dragBar->MarkNeedRender(); + } + }); + barTouchController_->ClearInterpolators(); + barTouchController_->AddInterpolator(touchAnimation); + barTouchController_->SetFillMode(FillMode::FORWARDS); + } + if (!barRangeController_) { + barRangeController_ = AceType::MakeRefPtr(GetContext()); + barRangeController_->SetFillMode(FillMode::FORWARDS); + barRangeController_->SetDuration(RESET_DURATION); + } + if (!barStyleController_) { + barStyleController_ = AceType::MakeRefPtr(GetContext()); + barStyleController_->SetFillMode(FillMode::FORWARDS); + barStyleController_->SetDuration(STYLE_DURATION); + } + hotRegionHeight_ = HOT_REGION_HEIGHT; + dragRangeX_ = NormalizeToPx(MAX_DRAG_X); + dragRangeY_ = NormalizeToPx(MAX_DRAG_Y); + alpha_ = std::floor(UINT8_MAX * OPACITY_DEFAULT); + auto dragBar = AceType::DynamicCast(component); + if (dragBar) { + showMode_ = dragBar->GetPanelMode(); + hasDragBar_ = dragBar->HasDragBar(); + } + InitializeRecognizer(); + UpdateDrawPoint(); + MarkNeedLayout(); +} + +void RenderDragBar::PerformLayout() +{ + Size dragBarSize; + if (hasDragBar_) { + dragBarSize = Size(NormalizeToPx(HOT_REGION_WIDTH), NormalizeToPx(hotRegionHeight_)); + } + if (fullScreenMode_) { + dragBarSize = Size(GetLayoutParam().GetMaxSize().Width(), NormalizeToPx(hotRegionHeight_)); + } + auto realSize = Size(NormalizeToPx(DRAG_ICON_WIDTH), NormalizeToPx(DRAG_ICON_HEIGHT)); + iconOffset_ = Alignment::GetAlignPosition(dragBarSize, realSize, Alignment::CENTER); + scaleX_ = realSize.Width() / DRAG_BAR_SIZE.Width(); + scaleY_ = realSize.Height() / DRAG_BAR_SIZE.Height(); + SetLayoutSize(dragBarSize); + imgTouchRegion_ = GetPaintRect(); +} + +void RenderDragBar::ShowArrow(bool show) +{ + PanelMode mode = PanelMode::HALF; + if (show) { + mode = PanelMode::FULL; + } else { + mode = PanelMode::HALF; + } + ShowInPanelMode(mode); +} + +void RenderDragBar::ShowInPanelMode(PanelMode mode) +{ + if (showMode_ == mode) { + return; + } + showMode_ = mode; + UpdateDrawPoint(); + MarkNeedRender(); +} + +void RenderDragBar::UpdateDrawPoint() +{ + Offset leftPoint, centerPoint, rightPoint; + switch (showMode_) { + case PanelMode::MINI: + leftPoint = POINT_L_SHRINK; + centerPoint = POINT_C_SHRINK; + rightPoint = POINT_R_SHRINK; + break; + case PanelMode::HALF: + leftPoint = POINT_L_INITIAL; + centerPoint = POINT_C_INITIAL; + rightPoint = POINT_R_INITIAL; + break; + case PanelMode::FULL: + leftPoint = POINT_L_EXPAND; + centerPoint = POINT_C_EXPAND; + rightPoint = POINT_R_EXPAND; + break; + default: + LOGE("Unsupported Show Mode:%{public}d", showMode_); + return; + } + if (barLeftPoint_ == Offset()) { + // No need to do animation when first time to display. + barLeftPoint_ = leftPoint; + barCenterPoint_ = centerPoint; + barRightPoint_ = rightPoint; + } else { + DoStyleAnimation(leftPoint, centerPoint, rightPoint); + } +} + +void RenderDragBar::DoStyleAnimation(const Offset& left, const Offset& center, const Offset& right) +{ + if (barStyleController_->IsRunning()) { + barStyleController_->Stop(); + } + auto leftAnimation = AceType::MakeRefPtr>(barLeftPoint_, left, Curves::SHARP); + leftAnimation->AddListener([weak = AceType::WeakClaim(this)](const Offset& value) { + auto dragBar = weak.Upgrade(); + if (dragBar) { + dragBar->barLeftPoint_ = value; + dragBar->MarkNeedRender(); + } + }); + auto centerAnimation = AceType::MakeRefPtr>(barCenterPoint_, center, Curves::SHARP); + centerAnimation->AddListener([weak = AceType::WeakClaim(this)](const Offset& value) { + auto dragBar = weak.Upgrade(); + if (dragBar) { + dragBar->barCenterPoint_ = value; + } + }); + auto rightAnimation = AceType::MakeRefPtr>(barRightPoint_, right, Curves::SHARP); + rightAnimation->AddListener([weak = AceType::WeakClaim(this)](const Offset& value) { + auto dragBar = weak.Upgrade(); + if (dragBar) { + dragBar->barRightPoint_ = value; + } + }); + barStyleController_->ClearInterpolators(); + barStyleController_->AddInterpolator(leftAnimation); + barStyleController_->AddInterpolator(centerAnimation); + barStyleController_->AddInterpolator(rightAnimation); + barStyleController_->Play(); +} + +void RenderDragBar::OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) +{ + if (fullScreenMode_) { + return; + } + if (clickDetector_) { + clickDetector_->SetCoordinateOffset(coordinateOffset); + result.emplace_back(clickDetector_); + } + if (touchDetector_) { + touchDetector_->SetCoordinateOffset(coordinateOffset); + result.emplace_back(touchDetector_); + } +} + +void RenderDragBar::InitializeRecognizer() +{ + if (!clickDetector_) { + clickDetector_ = AceType::MakeRefPtr(); + clickDetector_->SetOnClick([weak = WeakClaim(this)](const ClickInfo& info) { + auto dragBar = weak.Upgrade(); + if (dragBar) { + dragBar->HandleClick(info.GetLocalLocation()); + } + }); + } + if (!touchDetector_) { + touchDetector_ = AceType::MakeRefPtr(); + touchDetector_->SetOnTouchDown([weak = AceType::WeakClaim(this)](const TouchEventInfo& info) { + auto dragBar = weak.Upgrade(); + if (dragBar && !info.GetTouches().empty()) { + dragBar->HandleTouchDown(info.GetTouches().front().GetGlobalLocation()); + } + }); + touchDetector_->SetOnTouchMove([weakDrag = AceType::WeakClaim(this)](const TouchEventInfo& info) { + auto dragBar = weakDrag.Upgrade(); + if (dragBar && !info.GetTouches().empty()) { + dragBar->HandleTouchMove(info.GetTouches().front().GetGlobalLocation()); + } + }); + touchDetector_->SetOnTouchUp([weakDrag = AceType::WeakClaim(this)](const TouchEventInfo& info) { + auto dragBar = weakDrag.Upgrade(); + if (dragBar) { + dragBar->HandleTouchUp(); + } + }); + touchDetector_->SetOnTouchCancel([weakDrag = AceType::WeakClaim(this)](const TouchEventInfo& info) { + auto dragBar = weakDrag.Upgrade(); + if (dragBar) { + dragBar->HandleTouchUp(); + } + }); + } +} + +void RenderDragBar::HandleClick(const Offset& clickPosition) +{ + if (!clickArrowCallback_) { + return; + } + clickArrowCallback_(); +} + +void RenderDragBar::HandleTouchDown(const Offset& downPoint) +{ + // Display the click-to-magnify effect. + downPoint_ = downPoint; + barTouchController_->SetDuration(DOWN_DURATION); + barTouchController_->Forward(); +} + +void RenderDragBar::HandleTouchMove(const Offset& movePoint) +{ + // Display the dragging offset effect. + Offset distance = movePoint - downPoint_; + Offset dragOffset; + dragOffset.SetX(std::clamp(distance.GetX() * DRAG_X_RATIO, -dragRangeX_, dragRangeX_)); + dragOffset.SetY(std::clamp(distance.GetY() * DRAG_Y_RATIO, -dragRangeY_, dragRangeY_)); + if (dragOffset_ != dragOffset) { + dragOffset_ = dragOffset; + MarkNeedRender(); + } +} + +void RenderDragBar::HandleTouchUp() +{ + // Restore the click-to-magnify effect. + barTouchController_->SetDuration(RESET_DURATION); + barTouchController_->Backward(); + + // Restore the dragging offset effect. + if (dragOffset_ == Offset()) { + return; // No need to back to center with animation. + } + auto dragAnimation = AceType::MakeRefPtr>(dragOffset_, Offset(), Curves::SHARP); + dragAnimation->AddListener([weak = AceType::WeakClaim(this)](Offset value) { + auto dragBar = weak.Upgrade(); + if (dragBar) { + dragBar->dragOffset_ = value; + dragBar->MarkNeedRender(); + } + }); + barRangeController_->ClearInterpolators(); + barRangeController_->AddInterpolator(dragAnimation); + barRangeController_->Play(); +} + +void RenderDragBar::FadingOut() +{ + auto keyframeFrom = AceType::MakeRefPtr>(0.0, 1.0); + auto keyframeTo = AceType::MakeRefPtr>(1.0, 0.0); + auto animation = AceType::MakeRefPtr>(); + animation->AddKeyframe(keyframeFrom); + animation->AddKeyframe(keyframeTo); + animation->AddListener([weak = AceType::WeakClaim(this)](const double& opacity) { + auto dragBar = weak.Upgrade(); + if (dragBar) { + dragBar->opacity_ = opacity; + } + }); + animator_->AddInterpolator(animation); +} + +void RenderDragBar::Stretching() +{ + auto context = GetContext().Upgrade(); + if (!context) { + LOGE("Animate to status bar failed. context is null."); + return; + } + auto keyframeFrom = AceType::MakeRefPtr>(0.0, hotRegionHeight_.Value()); + auto keyframeTo = AceType::MakeRefPtr>(1.0, context->GetStatusBarHeight()); + auto animation = AceType::MakeRefPtr>(); + animation->AddKeyframe(keyframeFrom); + animation->AddKeyframe(keyframeTo); + animation->AddListener([weak = AceType::WeakClaim(this)](const double& height) { + auto dragBar = weak.Upgrade(); + if (!dragBar) { + return; + } + dragBar->hotRegionHeight_.SetValue(height); + dragBar->MarkNeedLayout(); + }); + animator_->AddStopListener([weak = AceType::WeakClaim(this)]() { + auto dragBar = weak.Upgrade(); + if (!dragBar) { + return; + } + dragBar->SetFullScreenMode(true); + dragBar->MarkNeedLayout(); + }); + animator_->AddInterpolator(animation); +} + +void RenderDragBar::AnimateToStatusBarPadding(int32_t duration) +{ + if (animator_->IsRunning()) { + animator_->Finish(); + } + animator_->ClearAllListeners(); + animator_->ClearInterpolators(); + Stretching(); + FadingOut(); + animator_->SetFillMode(FillMode::FORWARDS); + animator_->SetDuration(duration); + animator_->Forward(); + SetDisableTouchEvent(true); +} + +void RenderDragBar::SetStatusBarHeight(double height) +{ + // Reset full window animation. + if (animator_->IsRunning()) { + animator_->ClearAllListeners(); + animator_->ClearInterpolators(); + Stretching(); + FadingOut(); + } + if (GreatOrEqual(height, 0.0) && !NearEqual(statusBarHeight_.Value(), height)) { + statusBarHeight_.SetValue(height); + MarkNeedLayout(); + } +} + +void RenderDragBar::OnMouseHoverEnterTest() +{ + MarkNeedRender(); +} + +void RenderDragBar::OnMouseHoverExitTest() +{ + MarkNeedRender(); +} + +void RenderDragBar::OnPaintFinish() +{ + if (GetLayoutSize().IsEmpty()) { + return; + } + auto context = context_.Upgrade(); + if (!context) { + return; + } + if (renderStatus_ == RenderStatus::FOCUS) { + Offset offset = GetPosition(); + Size size = Size(NormalizeToPx(PAINT_WIDTH), NormalizeToPx(PAINT_HEIGHT)); + auto alignOffset = Alignment::GetAlignPosition(GetLayoutSize(), size, Alignment::CENTER); + Offset globalOffset = GetGlobalOffset() + alignOffset; + auto parent = GetParent().Upgrade(); + RRect rrect = RRect::MakeRect(Rect(offset, size)); + auto radius = Radius(size.Height() / 2); + rrect.SetCorner({ radius, radius, radius, radius }); + context->ShowFocusAnimation(rrect, Color::BLUE, globalOffset); + } +} + +void RenderDragBar::OnStatusChanged(RenderStatus renderStatus) +{ + if (renderStatus_ != renderStatus) { + renderStatus_ = renderStatus; + MarkNeedRender(); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/drag_bar/render_drag_bar.h b/frameworks/core/components/drag_bar/render_drag_bar.h new file mode 100644 index 00000000..65ef31ec --- /dev/null +++ b/frameworks/core/components/drag_bar/render_drag_bar.h @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DRAG_BAR_RENDER_DRAG_BAR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DRAG_BAR_RENDER_DRAG_BAR_H + +#include "core/animation/animator.h" +#include "core/gestures/click_recognizer.h" +#include "core/gestures/raw_recognizer.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderDragBar : public RenderNode { + DECLARE_ACE_TYPE(RenderDragBar, RenderNode); + +public: + using ClickArrowCallback = std::function; + + static RefPtr Create(); + void Update(const RefPtr& component) override; + void PerformLayout() override; + void ShowArrow(bool show); + void ShowInPanelMode(PanelMode mode); + void UpdateDrawPoint(); + void AnimateToStatusBarPadding(int32_t duration); + void SetStatusBarHeight(double height); + void HandleClick(const Offset& clickPosition); + void HandleTouchDown(const Offset& downPoint); + void HandleTouchMove(const Offset& movePoint); + void HandleTouchUp(); + + void OnMouseHoverEnterTest() override; + void OnMouseHoverExitTest() override; + void OnPaintFinish() override; + void OnStatusChanged(RenderStatus renderStatus) override; + + PanelMode GetPanelMode() const + { + return showMode_; + } + + bool HasClickArrowCallback() const + { + return (clickArrowCallback_ != nullptr); + } + + void SetClickArrowCallback(const ClickArrowCallback& callback) + { + clickArrowCallback_ = callback; + } + + void SetFullScreenMode(bool fullScreenMode) + { + fullScreenMode_ = fullScreenMode; + } + + double GetStatusBarHeight() const + { + return statusBarHeight_.Value(); + } + +protected: + void OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) override; + + Offset iconOffset_; + Offset barLeftPoint_; + Offset barCenterPoint_; + Offset barRightPoint_; + Color barColor_ = Color(0xffb3b3b3); + double barWidth_ = 4.0; + double scaleX_ = 1.0; + double scaleY_ = 1.0; + double opacity_ = 1.0; + uint8_t alpha_ = UINT8_MAX; + PanelMode showMode_ = PanelMode::HALF; + bool hasDragBar_ = true; + + Offset dragOffset_; + Offset downPoint_; + double dragRangeX_ = 0.0; + double dragRangeY_ = 0.0; + double scaleIcon_ = 1.0; + double scaleWidth_ = 1.0; + +private: + void InitializeRecognizer(); + void DoStyleAnimation(const Offset& left, const Offset& center, const Offset& right); + void FadingOut(); + void Stretching(); + + Rect imgTouchRegion_; + ClickArrowCallback clickArrowCallback_; + Dimension hotRegionHeight_ = 0.0_vp; // height in vp + Dimension statusBarHeight_ = 0.0_vp; // height in vp + RenderStatus renderStatus_ = RenderStatus::DEFAULT; + bool fullScreenMode_ = false; + + RefPtr clickDetector_; + RefPtr touchDetector_; + RefPtr animator_; + RefPtr barTouchController_; + RefPtr barRangeController_; + RefPtr barStyleController_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DRAG_BAR_RENDER_DRAG_BAR_H diff --git a/frameworks/core/components/drop_filter/BUILD.gn b/frameworks/core/components/drop_filter/BUILD.gn new file mode 100644 index 00000000..7b31a9a0 --- /dev/null +++ b/frameworks/core/components/drop_filter/BUILD.gn @@ -0,0 +1,22 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("drop_filter") { + sources = [ + "drop_filter_component.cpp", + "flutter_render_drop_filter.cpp", + "render_drop_filter.cpp", + ] +} diff --git a/frameworks/core/components/drop_filter/drop_filter_component.cpp b/frameworks/core/components/drop_filter/drop_filter_component.cpp new file mode 100644 index 00000000..2d1ae490 --- /dev/null +++ b/frameworks/core/components/drop_filter/drop_filter_component.cpp @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/drop_filter/drop_filter_component.h" + +#include "core/components/drop_filter/drop_filter_element.h" +#include "core/components/drop_filter/render_drop_filter.h" + +namespace OHOS::Ace { + +DropFilterComponent::DropFilterComponent(const RefPtr& child, double sigmaX, double sigmaY) + : SoleChildComponent(child), sigmaX_(sigmaX), sigmaY_(sigmaY) {} + +RefPtr DropFilterComponent::CreateRenderNode() +{ + return RenderDropFilter::Create(); +} + +RefPtr DropFilterComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/drop_filter/drop_filter_component.h b/frameworks/core/components/drop_filter/drop_filter_component.h new file mode 100644 index 00000000..a14cd211 --- /dev/null +++ b/frameworks/core/components/drop_filter/drop_filter_component.h @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DROP_FILTER_DROP_FILTER_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DROP_FILTER_DROP_FILTER_COMPONENT_H + +#include + +#include "base/utils/utils.h" +#include "core/components/common/layout/constants.h" +#include "core/pipeline/base/element.h" +#include "core/pipeline/base/sole_child_component.h" + +namespace OHOS::Ace { + +// A component can show Gaussian Blur. +class DropFilterComponent : public SoleChildComponent { + DECLARE_ACE_TYPE(DropFilterComponent, SoleChildComponent); + +public: + DropFilterComponent() = default; + DropFilterComponent(const RefPtr& child, double sigmaX, double sigmaY); + ~DropFilterComponent() override = default; + + RefPtr CreateRenderNode() override; + RefPtr CreateElement() override; + + double GetSigmaX() const + { + return sigmaX_; + } + + double GetSigmaY() const + { + return sigmaY_; + } + + void SetSigmaX(double sigmaX) + { + sigmaX_ = sigmaX; + } + + void SetSigmaY(double sigmaY) + { + sigmaY_ = sigmaY; + } + + bool UsePanelTouchRect() const + { + return usePanelTouchRect_; + } + + void SetUsePanelTouchRect(bool usePanelTouchRect) + { + usePanelTouchRect_ = usePanelTouchRect; + } + +private: + double sigmaX_ = 0.0; + double sigmaY_ = 0.0; + + // use this flag to update DropFilter touch rect in SlidingPanel mode. + bool usePanelTouchRect_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DROP_FILTER_DROP_FILTER_COMPONENT_H diff --git a/frameworks/core/components/drop_filter/drop_filter_element.h b/frameworks/core/components/drop_filter/drop_filter_element.h new file mode 100644 index 00000000..159000c5 --- /dev/null +++ b/frameworks/core/components/drop_filter/drop_filter_element.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DROP_FILTER_DROP_FILTER_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DROP_FILTER_DROP_FILTER_ELEMENT_H + +#include "core/pipeline/base/sole_child_element.h" + +namespace OHOS::Ace { + +class DropFilterElement : public SoleChildElement { + DECLARE_ACE_TYPE(DropFilterElement, SoleChildElement); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DROP_FILTER_DROP_FILTER_ELEMENT_H diff --git a/frameworks/core/components/drop_filter/flutter_render_drop_filter.cpp b/frameworks/core/components/drop_filter/flutter_render_drop_filter.cpp new file mode 100644 index 00000000..e7777864 --- /dev/null +++ b/frameworks/core/components/drop_filter/flutter_render_drop_filter.cpp @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/drop_filter/flutter_render_drop_filter.h" + +#include "flutter/fml/memory/ref_counted.h" +#include "flutter/lib/ui/painting/canvas.h" +#include "flutter/lib/ui/painting/picture_recorder.h" +#include "flutter/lib/ui/ui_dart_state.h" + +#include "base/log/dump_log.h" +#include "core/components/drop_filter/drop_filter_component.h" +#include "core/pipeline/base/scoped_canvas_state.h" + +namespace OHOS::Ace { + +RefPtr RenderDropFilter::Create() +{ + return AceType::MakeRefPtr(); +} + +RenderLayer FlutterRenderDropFilter::GetRenderLayer() +{ + if (!layer_) { + layer_ = AceType::MakeRefPtr(imageFilter_, sigmaX_, sigmaY_); + } + return AceType::RawPtr(layer_); +} + +void FlutterRenderDropFilter::Paint(RenderContext& context, const Offset& offset) +{ + if (layer_) { + layer_->SetDropFilter(imageFilter_, sigmaX_, sigmaY_); + } + RenderNode::Paint(context, offset); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/drop_filter/flutter_render_drop_filter.h b/frameworks/core/components/drop_filter/flutter_render_drop_filter.h new file mode 100644 index 00000000..6a7d7f7d --- /dev/null +++ b/frameworks/core/components/drop_filter/flutter_render_drop_filter.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DROP_FILTER_FLUTTER_RENDER_DROP_FILTER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DROP_FILTER_FLUTTER_RENDER_DROP_FILTER_H + +#include "flutter/fml/memory/ref_counted.h" +#include "flutter/lib/ui/compositing/scene_builder.h" +#include "flutter/lib/ui/painting/image_filter.h" + +#include "core/components/common/properties/color.h" +#include "core/components/drop_filter/render_drop_filter.h" +#include "core/pipeline/layers/dropfilter_layer.h" + +namespace OHOS::Ace { + +class FlutterRenderDropFilter final : public RenderDropFilter { + DECLARE_ACE_TYPE(FlutterRenderDropFilter, RenderDropFilter); + +public: + FlutterRenderDropFilter() = default; + ~FlutterRenderDropFilter() override = default; + RenderLayer GetRenderLayer() override; + void Paint(RenderContext& context, const Offset& offset) override; + +private: + fml::RefPtr imageFilter_ = flutter::ImageFilter::Create(); + RefPtr layer_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DROP_FILTER_FLUTTER_RENDER_DROP_FILTER_H diff --git a/frameworks/core/components/drop_filter/render_drop_filter.cpp b/frameworks/core/components/drop_filter/render_drop_filter.cpp new file mode 100644 index 00000000..89c8826e --- /dev/null +++ b/frameworks/core/components/drop_filter/render_drop_filter.cpp @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/drop_filter/render_drop_filter.h" + +#include "core/components/drop_filter/drop_filter_component.h" + +namespace OHOS::Ace { + +RenderDropFilter::RenderDropFilter() : RenderNode(true) {} + +void RenderDropFilter::Update(const RefPtr& component) +{ + const RefPtr dropFilter = AceType::DynamicCast(component); + if (!dropFilter) { + return; + } + sigmaX_ = dropFilter->GetSigmaX(); + sigmaY_ = dropFilter->GetSigmaY(); + usePanelTouchRect_ = dropFilter->UsePanelTouchRect(); + if (usePanelTouchRect_) { + interceptTouchEvent_ = true; + } + MarkNeedLayout(); +} + +void RenderDropFilter::PerformLayout() +{ + if (!GetChildren().empty()) { + GetChildren().front()->Layout(GetLayoutParam()); + SetLayoutSize(GetChildren().front()->GetLayoutSize()); + } else { + SetLayoutSize(Size(0, 0)); + } +} + +void RenderDropFilter::UpdateTouchRect() +{ + if (!usePanelTouchRect_) { + RenderNode::UpdateTouchRect(); + return; + } + touchRect_ = GetPaintRect(); + auto box = GetChildren().front(); + if (!box) { + return; + } + auto focus = box->GetChildren().front(); + if (!focus) { + return; + } + auto panel = focus->GetChildren().front(); + if (!panel) { + return; + } + panel->UpdateTouchRect(); + touchRect_ = panel->GetTouchRect(); +} + +const Rect& RenderDropFilter::GetTouchRect() +{ + if (!usePanelTouchRect_) { + return RenderNode::GetTouchRect(); + } + UpdateTouchRect(); + return touchRect_; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/drop_filter/render_drop_filter.h b/frameworks/core/components/drop_filter/render_drop_filter.h new file mode 100644 index 00000000..a4e2c5e0 --- /dev/null +++ b/frameworks/core/components/drop_filter/render_drop_filter.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DROP_FILTER_RENDER_DROP_FILTER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DROP_FILTER_RENDER_DROP_FILTER_H + +#include "core/components/common/layout/constants.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderDropFilter : public RenderNode { + DECLARE_ACE_TYPE(RenderDropFilter, RenderNode); + +public: + ~RenderDropFilter() override = default; + + static RefPtr Create(); + void Update(const RefPtr& component) override; + void PerformLayout() override; + void UpdateTouchRect() override; + const Rect& GetTouchRect() override; + +protected: + RenderDropFilter(); + double sigmaX_ = 0.0; + double sigmaY_ = 0.0; + bool usePanelTouchRect_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_DROP_FILTER_RENDER_DROP_FILTER_H diff --git a/frameworks/core/components/flex/BUILD.gn b/frameworks/core/components/flex/BUILD.gn new file mode 100644 index 00000000..e5f76fb7 --- /dev/null +++ b/frameworks/core/components/flex/BUILD.gn @@ -0,0 +1,22 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("flex") { + sources = [ + "flex_element.cpp", + "render_flex.cpp", + "render_flex_item.cpp", + ] +} diff --git a/frameworks/core/components/flex/flex_component.h b/frameworks/core/components/flex/flex_component.h new file mode 100644 index 00000000..14c222e5 --- /dev/null +++ b/frameworks/core/components/flex/flex_component.h @@ -0,0 +1,180 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FLEX_FLEX_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FLEX_FLEX_COMPONENT_H + +#include "base/utils/macros.h" +#include "core/components/common/layout/constants.h" +#include "core/components/flex/flex_element.h" +#include "core/components/flex/render_flex.h" +#include "core/pipeline/base/component_group.h" + +namespace OHOS::Ace { + +class ACE_EXPORT FlexComponent : public ComponentGroup { + DECLARE_ACE_TYPE(FlexComponent, ComponentGroup); + +public: + FlexComponent(FlexDirection direction, FlexAlign mainAxisAlign, FlexAlign crossAxisAlign, + const std::list>& children) + : ComponentGroup(children), direction_(direction), mainAxisAlign_(mainAxisAlign), + crossAxisAlign_(crossAxisAlign) {} + ~FlexComponent() override = default; + + RefPtr CreateRenderNode() override + { + return RenderFlex::Create(); + } + + RefPtr CreateElement() override + { + return AceType::MakeRefPtr(); + } + + FlexDirection GetDirection() const + { + return direction_; + } + + void SetDirection(FlexDirection direction) + { + direction_ = direction; + } + + FlexAlign GetCrossAxisAlign() const + { + return crossAxisAlign_; + } + + void SetCrossAxisAlign(FlexAlign align) + { + crossAxisAlign_ = align; + } + + FlexAlign GetMainAxisAlign() const + { + return mainAxisAlign_; + } + + void SetMainAxisAlign(FlexAlign align) + { + mainAxisAlign_ = align; + } + + MainAxisSize GetMainAxisSize() const + { + return mainAxisSize_; + } + + void SetMainAxisSize(MainAxisSize mainAxisSize) + { + mainAxisSize_ = mainAxisSize; + } + + CrossAxisSize GetCrossAxisSize() const + { + return crossAxisSize_; + } + + void SetCrossAxisSize(CrossAxisSize crossAxisSize) + { + crossAxisSize_ = crossAxisSize; + } + + TextBaseline GetBaseline() const + { + return baseline_; + } + + void SetBaseline(TextBaseline baseline) + { + baseline_ = baseline; + } + + bool IsStretchToParent() const + { + return stretchToParent_; + } + + void SetStretchToParent(bool flag) + { + stretchToParent_ = flag; + } + + bool GetUseViewPortFlag() const + { + return useViewPort_; + } + + void SetUseViewPortFlag(bool flag) + { + useViewPort_ = flag; + } + + bool ContainsNavigation() const + { + return containsNavigation_; + } + + void SetContainsNavigation(bool containsNavigation) + { + containsNavigation_ = containsNavigation; + } + +private: + FlexDirection direction_ { FlexDirection::ROW }; + FlexAlign mainAxisAlign_ { FlexAlign::FLEX_START }; + FlexAlign crossAxisAlign_ { FlexAlign::FLEX_START }; + MainAxisSize mainAxisSize_ { MainAxisSize::MAX }; + CrossAxisSize crossAxisSize_ { CrossAxisSize::MIN }; + TextBaseline baseline_ { TextBaseline::ALPHABETIC }; + + bool stretchToParent_ = false; + bool useViewPort_ = false; + bool containsNavigation_ = false; +}; + +class RowComponent : public FlexComponent { + DECLARE_ACE_TYPE(RowComponent, FlexComponent); + +public: + RowComponent(FlexAlign mainAxisAlign, FlexAlign crossAxisAlign, const std::list>& children) + : FlexComponent(FlexDirection::ROW, mainAxisAlign, crossAxisAlign, children) {} + ~RowComponent() override = default; + + RefPtr CreateElement() override + { + return AceType::MakeRefPtr(); + } +}; + +class ColumnComponent : public FlexComponent { + DECLARE_ACE_TYPE(ColumnComponent, FlexComponent); + +public: + ColumnComponent(FlexAlign mainAxisAlign, FlexAlign crossAxisAlign, const std::list>& children) + : FlexComponent(FlexDirection::COLUMN, mainAxisAlign, crossAxisAlign, children) {} + ~ColumnComponent() override = default; + + RefPtr CreateElement() override + { + return AceType::MakeRefPtr(); + } +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FLEX_FLEX_COMPONENT_H diff --git a/frameworks/core/components/flex/flex_element.cpp b/frameworks/core/components/flex/flex_element.cpp new file mode 100644 index 00000000..0b13d68b --- /dev/null +++ b/frameworks/core/components/flex/flex_element.cpp @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/flex/flex_element.h" + +#include "core/components/flex/flex_component.h" + +namespace OHOS::Ace { + +void FlexElement::Update() +{ + ComponentGroupElement::Update(); + + auto flexComponent = AceType::DynamicCast(component_); + if (flexComponent) { + direction_ = flexComponent->GetDirection(); + } +} + +bool FlexElement::RequestNextFocus(bool vertical, bool reverse, const Rect& rect) +{ + if ((direction_ == FlexDirection::COLUMN) != vertical) { + return false; + } + + return GoToNextFocus(reverse, rect); +} + +bool FlexElement::AcceptFocusByRectOfLastFocus(const Rect& rect) +{ + if (!rect.IsValid()) { + LOGE("the rect is not valid"); + return false; + } + + Offset offset; + auto itNewFocusNode = focusNodes_.end(); + double minVal = std::numeric_limits::max(); + for (auto it = focusNodes_.begin(); it != focusNodes_.end(); ++it) { + if (!(*it)->IsFocusable()) { + continue; + } + + Rect childRect; + if (!CalculateRect(*it, childRect)) { + continue; + } + + Offset vec = childRect.Center() - rect.Center(); + double val = (vec.GetX() * vec.GetX()) + (vec.GetY() * vec.GetY()); + if (minVal > val) { + minVal = val; + itNewFocusNode = it; + offset = childRect.GetOffset(); + } + } + + if (itNewFocusNode != focusNodes_.end() && (*itNewFocusNode)->AcceptFocusByRectOfLastFocus(rect - offset)) { + itLastFocusNode_ = itNewFocusNode; + return true; + } + return false; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/flex/flex_element.h b/frameworks/core/components/flex/flex_element.h new file mode 100644 index 00000000..48e374cf --- /dev/null +++ b/frameworks/core/components/flex/flex_element.h @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FLEX_FLEX_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FLEX_FLEX_ELEMENT_H + +#include "base/utils/macros.h" +#include "core/components/common/layout/constants.h" +#include "core/focus/focus_node.h" +#include "core/pipeline/base/component_group_element.h" + +namespace OHOS::Ace { + +class ACE_EXPORT FlexElement : public ComponentGroupElement, public FocusGroup { + DECLARE_ACE_TYPE(FlexElement, ComponentGroupElement, FocusGroup); + +public: + void Update() override; + bool RequestNextFocus(bool vertical, bool reverse, const Rect& rect) override; + bool AcceptFocusByRectOfLastFocus(const Rect& rect) override; + +protected: + virtual RefPtr GetCachedRenderNode() override + { + auto context = GetContext().Upgrade(); + if (context) { + return context->GetRenderFactory()->GetRenderFlexFactory()->Get(); + } + return nullptr; + } + + FlexDirection direction_ { FlexDirection::ROW }; +}; + +class RowElement : public FlexElement { + DECLARE_ACE_TYPE(RowElement, FlexElement); +}; + +class ColumnElement : public FlexElement { + DECLARE_ACE_TYPE(ColumnElement, FlexElement); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FLEX_FLEX_ELEMENT_H diff --git a/frameworks/core/components/flex/flex_item_component.h b/frameworks/core/components/flex/flex_item_component.h new file mode 100644 index 00000000..fd7efde1 --- /dev/null +++ b/frameworks/core/components/flex/flex_item_component.h @@ -0,0 +1,173 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FLEX_FLEX_ITEM_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FLEX_FLEX_ITEM_COMPONENT_H + +#include "core/components/flex/flex_item_element.h" +#include "core/components/flex/render_flex_item.h" +#include "core/pipeline/base/sole_child_component.h" + +namespace OHOS::Ace { + +class FlexItemComponent : public SoleChildComponent { + DECLARE_ACE_TYPE(FlexItemComponent, SoleChildComponent); + +public: + FlexItemComponent(double flexGrow, double flexShrink, double flexBasis) + : flexGrow_(flexGrow), flexShrink_(flexShrink), flexBasis_(flexBasis) {}; + FlexItemComponent(double flexGrow, double flexShrink, double flexBasis, const RefPtr& child) + : SoleChildComponent(child), flexGrow_(flexGrow), flexShrink_(flexShrink), flexBasis_(flexBasis) {} + ~FlexItemComponent() override = default; + + RefPtr CreateRenderNode() override + { + return RenderFlexItem::Create(); + } + + RefPtr CreateElement() override + { + return AceType::MakeRefPtr(); + } + + double GetFlexGrow() const + { + return flexGrow_; + } + + double GetFlexShrink() const + { + return flexShrink_; + } + + double GetFlexBasis() const + { + return flexBasis_; + } + + void SetFlexGrow(double flexGrow) + { + flexGrow_ = flexGrow; + } + + void SetFlexShrink(double flexShrink) + { + flexShrink_ = flexShrink; + } + + void SetFlexBasis(double flexBasis) + { + flexBasis_ = flexBasis; + } + + bool GetStretchFlag() const + { + return canStretch_; + } + + void SetStretchFlag(bool canStretch) + { + canStretch_ = canStretch; + } + + FlexAlign GetAlignSelf() const + { + return alignSelf_; + } + + void SetAlignSelf(FlexAlign alignSelf) + { + alignSelf_ = alignSelf; + } + + const LayoutParam& GetConstraints() const + { + return constraints_; + } + + void SetConstraints(const LayoutParam& constraints) + { + constraints_ = constraints; + } + + const Dimension& GetMinWidth() const + { + return minWidth_; + } + + void SetMinWidth(const Dimension& minWidth) + { + minWidth_ = minWidth; + } + + const Dimension& GetMinHeight() const + { + return minHeight_; + } + + void SetMinHeight(const Dimension& minHeight) + { + minHeight_ = minHeight; + } + + const Dimension& GetMaxWidth() const + { + return maxWidth_; + } + + void SetMaxWidth(const Dimension& maxWidth) + { + maxWidth_ = maxWidth; + } + + const Dimension& GetMaxHeight() const + { + return maxHeight_; + } + + void SetMaxHeight(const Dimension& maxHeight) + { + maxHeight_ = maxHeight; + } + + bool IsHidden() const + { + return isHidden_; + } + + void SetIsHidden(bool isHidden) + { + isHidden_ = isHidden; + } + +private: + double flexGrow_ = 0.0; + double flexShrink_ = 0.0; + double flexBasis_ = 0.0; + bool canStretch_ = true; // When width or height is set, this item can not be stretched. + + LayoutParam constraints_; + Dimension minWidth_ = Dimension(); + Dimension minHeight_ = Dimension(); + Dimension maxWidth_ = Dimension(Size::INFINITE_SIZE); + Dimension maxHeight_ = Dimension(Size::INFINITE_SIZE); + bool isHidden_ = false; + + FlexAlign alignSelf_ = FlexAlign::AUTO; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FLEX_FLEX_ITEM_COMPONENT_H diff --git a/frameworks/core/components/flex/flex_item_element.h b/frameworks/core/components/flex/flex_item_element.h new file mode 100644 index 00000000..610f854c --- /dev/null +++ b/frameworks/core/components/flex/flex_item_element.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FLEX_FLEX_ITEM_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FLEX_FLEX_ITEM_ELEMENT_H + +#include "core/pipeline/base/sole_child_element.h" + +namespace OHOS::Ace { + +class FlexItemElement : public SoleChildElement { + DECLARE_ACE_TYPE(FlexItemElement, SoleChildElement); + +protected: + virtual RefPtr GetCachedRenderNode() override + { + auto context = GetContext().Upgrade(); + if (context) { + return context->GetRenderFactory()->GetRenderFlexItemFactory()->Get(); + } + return nullptr; + } +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FLEX_FLEX_ITEM_ELEMENT_H diff --git a/frameworks/core/components/flex/render_flex.cpp b/frameworks/core/components/flex/render_flex.cpp new file mode 100644 index 00000000..ca5cc2be --- /dev/null +++ b/frameworks/core/components/flex/render_flex.cpp @@ -0,0 +1,966 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/flex/render_flex.h" + +#include + +#include "base/log/dump_log.h" +#include "core/components/flex/flex_component.h" +#include "core/components/scroll/render_single_child_scroll.h" +#include "core/pipeline/base/position_layout_utils.h" + +namespace OHOS::Ace { +namespace { + +inline FlexDirection FlipAxis(FlexDirection direction) +{ + if (direction == FlexDirection::ROW) { + return FlexDirection::COLUMN; + } else { + return FlexDirection::ROW; + } +} + +double GetMainAxisValue(const Size& size, FlexDirection direction) +{ + return direction == FlexDirection::ROW ? size.Width() : size.Height(); +} + +} // namespace + +RefPtr RenderFlex::Create() +{ + return AceType::MakeRefPtr(); +} + +void RenderFlex::Update(const RefPtr& component) +{ + const RefPtr flex = AceType::DynamicCast(component); + if (!flex) { + return; + } + direction_ = flex->GetDirection(); + mainAxisAlign_ = flex->GetMainAxisAlign(); + crossAxisAlign_ = flex->GetCrossAxisAlign(); + mainAxisSize_ = flex->GetMainAxisSize(); + crossAxisSize_ = flex->GetCrossAxisSize(); + stretchToParent_ = flex->IsStretchToParent(); + useViewPort_ = flex->GetUseViewPortFlag(); + containsNavigation_ = flex->ContainsNavigation(); + SetTextDirection(flex->GetTextDirection()); + UpdateAccessibilityAttr(); + MarkNeedLayout(); +} + +void RenderFlex::UpdateAccessibilityAttr() +{ + auto refPtr = accessibilityNode_.Upgrade(); + if (!refPtr) { + return; + } + RefPtr scroll; + auto parent = GetParent().Upgrade(); + while (parent) { + scroll = AceType::DynamicCast(parent); + if (scroll) { + break; + } + parent = parent->GetParent().Upgrade(); + } + if (!scroll || !scroll->GetAccessibilityNode().Upgrade()) { + return; + } + if (scroll->GetAccessibilityNode().Upgrade()->GetNodeId() != refPtr->GetNodeId()) { + return; + } + + refPtr->SetScrollableState(true); + refPtr->SetActionScrollForward([weakScroll = AceType::WeakClaim(RawPtr(scroll))]() { + auto scroll = weakScroll.Upgrade(); + if (scroll) { + LOGD("Trigger ScrollForward by Accessibility."); + scroll->ScrollPage(false, true); + return true; + } + return false; + }); + refPtr->SetActionScrollBackward([weakScroll = AceType::WeakClaim(RawPtr(scroll))]() { + auto scroll = weakScroll.Upgrade(); + if (scroll) { + LOGD("Trigger ScrollBackward by Accessibility."); + scroll->ScrollPage(true, true); + return true; + } + return false; + }); + refPtr->AddSupportAction(AceAction::ACTION_SCROLL_FORWARD); + refPtr->AddSupportAction(AceAction::ACTION_SCROLL_BACKWARD); + scrollNode = scroll; +} + +void RenderFlex::OnPaintFinish() +{ + auto refPtr = accessibilityNode_.Upgrade(); + if (!refPtr || !scrollNode) { + return; + } + auto collectionInfo = refPtr->GetCollectionInfo(); + collectionInfo.rows = GetChildren().size(); + collectionInfo.columns = 1; + refPtr->SetCollectionInfo(collectionInfo); + Rect itemRect; + Rect viewPortRect(scrollNode->GetGlobalOffset(), scrollNode->GetChildViewPort()); + for (const auto& item : GetChildren()) { + auto node = item->GetAccessibilityNode().Upgrade(); + if (!node) { + continue; + } + bool visible = GetVisible(); + if (visible) { + itemRect.SetSize(item->GetLayoutSize()); + itemRect.SetOffset(item->GetGlobalOffset()); + visible = itemRect.IsIntersectWith(viewPortRect); + } + item->SetAccessibilityVisible(visible); + if (visible) { + Rect clampRect = itemRect.Constrain(viewPortRect); + if (clampRect != itemRect) { + item->SetAccessibilityRect(clampRect); + } else { + item->ClearAccessibilityRect(); + } + } else { + item->NotifyPaintFinish(); + } + } +} + +LayoutParam RenderFlex::MakeStretchInnerLayoutParam(const RefPtr& item) const +{ + // must be called in the second time layout, so that crossSize_ is determined. + LayoutParam innerLayout; + double crossAxisLimit = GetStretchCrossLimit(); + if (direction_ == FlexDirection::ROW) { + innerLayout.SetFixedSize(Size(GetMainSize(item), crossAxisLimit)); + } else { + innerLayout.SetFixedSize(Size(crossAxisLimit, GetMainSize(item))); + } + return innerLayout; +} + +LayoutParam RenderFlex::MakeLayoutParamWithLimit(double minMainLimit, double maxMainLimit, bool isStretch) const +{ + LayoutParam innerLayout; + double minCrossLimit = 0.0; + double maxCrossLimit = (direction_ == FlexDirection::ROW) ? GetLayoutParam().GetMaxSize().Height() + : GetLayoutParam().GetMaxSize().Width(); + if (isStretch) { + minCrossLimit = GetStretchCrossLimit(); + maxCrossLimit = minCrossLimit; + } + if (direction_ == FlexDirection::ROW) { + innerLayout.SetMinSize(Size(minMainLimit, minCrossLimit)); + innerLayout.SetMaxSize(Size(maxMainLimit, maxCrossLimit)); + } else { + innerLayout.SetMinSize(Size(minCrossLimit, minMainLimit)); + innerLayout.SetMaxSize(Size(maxCrossLimit, maxMainLimit)); + } + return innerLayout; +} + +LayoutParam RenderFlex::MakeConstrainedLayoutParam( + double mainFlexExtent, const LayoutParam& constraints, bool isStretch) const +{ + LayoutParam innerLayout; + if (LessOrEqual(mainFlexExtent, 0.0)) { + innerLayout.SetMaxSize(GetLayoutParam().GetMaxSize()); + } else { + innerLayout = MakeLayoutParamWithLimit(mainFlexExtent, mainFlexExtent, isStretch); + } + innerLayout.SetMaxSize(constraints.Constrain(innerLayout.GetMaxSize())); + innerLayout.SetMinSize(constraints.Constrain(innerLayout.GetMinSize())); + // SetHasUsedPercentFlag is to tell box not to use constraints + innerLayout.SetHasUsedConstraints(true); + return innerLayout; +} + +double RenderFlex::GetStretchCrossLimit() const +{ + Size maxLayoutParam = GetLayoutParam().GetMaxSize(); + double crossAxisLimit = 0.0; + if (!stretchToParent_) { + crossAxisLimit = crossSize_; + } else if (!isCrossInfinite_ || !useViewPort_) { + crossAxisLimit = (direction_ == FlexDirection::ROW) ? maxLayoutParam.Height() : maxLayoutParam.Width(); + } else { + crossAxisLimit = (direction_ == FlexDirection::ROW) ? viewPort_.Height() : viewPort_.Width(); + } + return crossAxisLimit; +} + +void RenderFlex::PerformLayout() +{ + if (GetChildren().empty()) { + SetLayoutSize(Size()); + return; + } + // init properties. + InitFlexProperties(); + if (layoutMode_ == FlexLayoutMode::FLEX_WEIGHT_MODE) { + PerformLayoutInWeightMode(); + } else if (maxDisplayIndex_ > 1) { + PerformLayoutInIndexMode(); + } else { + PerformLayoutInItemMode(); + } + ClearChildrenLists(); +} + +void RenderFlex::PerformLayoutInWeightMode() +{ + double maxMainSize = GetMainAxisValue(GetLayoutParam().GetMaxSize(), direction_); + if (NearEqual(maxMainSize, Size::INFINITE_SIZE)) { + LOGW("not supported infinite size"); + return; + } + BaselineProperties baselineProperties; + LayoutParam innerLayout; + // totalFlexWeight_ is guard in InitFlexProperties() so it won't be zero + auto spacePerWeight = maxMainSize / totalFlexWeight_; + bool isExceed = false; + auto iter = magicNodes_.rbegin(); + // Calculate innerLayoutParam for each magic node + while (iter != magicNodes_.rend()) { + auto& layoutList = (*iter).second; + for (auto& node : layoutList) { + auto child = node.node; + auto childFlexSize = spacePerWeight * child->GetFlexWeight(); + auto flexItem = AceType::DynamicCast(child); + if (flexItem) { + innerLayout = MakeConstrainedLayoutParam(childFlexSize, flexItem->GetNormalizedConstraints(), false); + } else { + innerLayout = MakeLayoutParamWithLimit(childFlexSize, childFlexSize, false); + } + // If min constraint is larger than flexSize, total size must exceed. + isExceed = isExceed || GetMainAxisValue(innerLayout.GetMaxSize(), direction_) > childFlexSize; + node.innerLayout = innerLayout; + } + if (!isExceed) { + iter++; + } else if (magicNodes_.size() <= 1) { + break; + } else { + // Hide nodes, reset properties and start next loop + totalFlexWeight_ -= magicWeightMaps_[(*magicNodes_.begin()).first]; + spacePerWeight = maxMainSize / totalFlexWeight_; + isExceed = false; + magicNodes_.erase(magicNodes_.begin()); + iter = magicNodes_.rbegin(); + } + } + // Layout magic nodes + LayoutMagicNodes(baselineProperties); + if (crossAxisAlign_ == FlexAlign::STRETCH) { + RelayoutForStretchMagicNode(); + } + LayoutAbsoluteChildren(); + LayoutHiddenNodes(); + Size layoutSize = GetConstrainedSize(maxMainSize); + SetLayoutSize(layoutSize); + mainSize_ = GetMainAxisValue(layoutSize, direction_); + crossSize_ = (direction_ == FlexDirection::ROW) ? layoutSize.Height() : layoutSize.Width(); + DetermineItemsPosition(baselineProperties); +} + +void RenderFlex::LayoutMagicNodes(BaselineProperties& baselineProperties) +{ + for (const auto& magicNode : magicNodes_) { + auto nodeList = magicNode.second; + for (const auto& child : nodeList) { + child.node->Layout(child.innerLayout); + child.node->SetVisible(true); + ResizeByItem(child.node); + CheckSizeValidity(child.node); + CheckBaselineProperties(child.node, baselineProperties); + } + } +} + +void RenderFlex::RelayoutForStretchMagicNode() +{ + LayoutParam innerLayout; + for (const auto& magicNodeMap : magicNodes_) { + auto nodeList = magicNodeMap.second; + for (const auto& node : nodeList) { + auto child = node.node; + auto flexItem = AceType::DynamicCast(child); + if (!flexItem) { + innerLayout = MakeLayoutParamWithLimit(GetMainSize(child), GetMainSize(child), true); + } else if (flexItem->GetStretchFlag()) { + innerLayout = + MakeConstrainedLayoutParam(GetMainSize(flexItem), flexItem->GetNormalizedConstraints(), true); + } else { + // FlexItem cannot be stretched, skip it. + continue; + } + child->Layout(innerLayout); + // stretch only need to adjust crossSize + crossSize_ = std::max(crossSize_, GetCrossSize(child)); + } + } +} + +void RenderFlex::PerformLayoutInIndexMode() +{ + auto maxMainSize = GetMainAxisValue(GetLayoutParam().GetMaxSize(), direction_); + LayoutParam innerLayout; + innerLayout.SetMaxSize(GetLayoutParam().GetMaxSize()); + FlexItemProperties flexItemProperties; + for (auto iter = magicNodes_.rbegin(); iter != magicNodes_.rend();) { + auto nodeList = (*iter).second; + for (const auto& node : nodeList) { + auto child = node.node; + child->Layout(innerLayout); + allocatedSize_ += GetMainSize(child); + } + if (allocatedSize_ > maxMainSize) { + for (const auto& node : nodeList) { + auto child = node.node; + allocatedSize_ -= GetMainSize(child); + } + break; + } + // If not fill all the main size, record the node and continue the loop. + for (const auto& node : nodeList) { + auto child = node.node; + CheckSizeValidity(child); + child->SetVisible(true); + auto flexItem = AceType::DynamicCast(child); + if (flexItem && GreatNotEqual(flexItem->GetFlexGrow(), 0.0)) { + flexItemProperties.totalGrow += flexItem->GetFlexGrow(); + flexItemProperties.lastGrowChild = flexItem; + } + crossSize_ = std::max(crossSize_, GetCrossSize(child)); + } + if (NearEqual(allocatedSize_, maxMainSize)) { + break; + } + iter++; + } + // Second Layout for grow/stretch + if (crossAxisAlign_ == FlexAlign::STRETCH || flexItemProperties.totalGrow > 0) { + RelayoutForStretchFlexNode(flexItemProperties); + } + LayoutHiddenNodes(); + LayoutAbsoluteChildren(); + Size layoutSize = GetConstrainedSize(maxMainSize); + SetLayoutSize(layoutSize); + mainSize_ = GetMainAxisValue(layoutSize, direction_); + crossSize_ = (direction_ == FlexDirection::ROW) ? layoutSize.Height() : layoutSize.Width(); + BaselineProperties baselineProperties; + DetermineItemsPosition(baselineProperties); +} + +void RenderFlex::RelayoutForStretchFlexNode(const FlexItemProperties& flexItemProperties) +{ + auto remainSpace = GetMainAxisValue(GetLayoutParam().GetMaxSize(), direction_) - allocatedSize_; + // only grow applied in display index mode. + double spacePerFlex = 0.0; + if (GreatNotEqual(flexItemProperties.totalGrow, 0.0)) { + spacePerFlex = remainSpace / flexItemProperties.totalGrow; + } + double allocatedFlexSpace = 0.0; + BaselineProperties baselineProperties; + for (const auto& item : displayNodes_) { + auto flexItem = AceType::DynamicCast(item); + if (!flexItem) { + if (crossAxisAlign_ == FlexAlign::STRETCH) { + item->Layout(MakeStretchInnerLayoutParam(item)); + // stretch only need to adjust cross size + crossSize_ = std::max(crossSize_, GetCrossSize(item)); + } + continue; + } + double flexSize = 0.0; + if (GreatNotEqual(flexItem->GetFlexGrow(), 0.0)) { + flexSize = flexItem == flexItemProperties.lastGrowChild ? remainSpace - allocatedFlexSpace + : spacePerFlex * flexItem->GetFlexGrow(); + RelayoutFlexItem(flexItem, flexSize, baselineProperties, allocatedFlexSpace); + } else if (crossAxisAlign_ == FlexAlign::STRETCH && flexItem->GetStretchFlag()) { + flexItem->Layout( + MakeConstrainedLayoutParam(GetMainSize(flexItem), flexItem->GetNormalizedConstraints(), true)); + crossSize_ = std::max(crossSize_, GetCrossSize(flexItem)); + } else { + // not stretch or grow, continue. + continue; + } + } +} + +void RenderFlex::LayoutHiddenNodes() +{ + LayoutParam innerLayout = LayoutParam(Size(), Size()); + for (const auto& child : relativeNodes_) { + if (displayNodes_.find(child) != displayNodes_.end()) { + continue; + } + child->SetVisible(false); + child->Layout(innerLayout); + } +} + +void RenderFlex::PerformLayoutInItemMode() +{ + LayoutParam innerLayout; + innerLayout.SetMaxSize(GetLayoutParam().GetMaxSize()); + FlexItemProperties flexItemProperties; + BaselineProperties baselineProperties; + // first time layout + for (const auto& item : relativeNodes_) { + auto flexItem = AceType::DynamicCast(item); + if (!flexItem || flexItem->IsHidden()) { + item->Layout(innerLayout); + } else { + LayoutFlexItem(flexItem, flexItemProperties); + } + if (item == GetChildren().front() && containsNavigation_) { + navigationMainSize_ = GetMainAxisValue(item->GetLayoutSize(), direction_); + } + ResizeByItem(item); + CheckSizeValidity(item); + CheckBaselineProperties(item, baselineProperties); + } + // second time layout + double mainViewPort = GetMainAxisValue(viewPort_, direction_); + bool useViewPort = useViewPort_ && !viewPort_.IsInfinite() && (allocatedSize_ < mainViewPort); + auto mainAxisSize = mainAxisSize_; + if (!isMainInfinite_ || useViewPort) { + ResizeItems(flexItemProperties, baselineProperties); + } else if (!infinityLayoutNodes_.empty()) { + if (allocatedSize_ < mainViewPort) { + allocatedSize_ = Size::INFINITE_SIZE; + } else { + double availableMainSize = GetAvailableMainSize(); + for (auto& infinityItem : infinityLayoutNodes_) { + LayoutInfinityChild(infinityItem, availableMainSize, baselineProperties); + } + mainAxisSize = MainAxisSize::MIN; + } + } else if (allocatedSize_ >= mainViewPort && crossAxisAlign_ == FlexAlign::STRETCH) { + // Children size larger than viewPort, second layout only do stretch. + for (const auto& item : relativeNodes_) { + item->Layout(MakeStretchInnerLayoutParam(item)); + } + } else { + mainAxisSize = MainAxisSize::MIN; + } + LayoutAbsoluteChildren(); + // get layout size and set positions + DetermineSelfSize(mainAxisSize, useViewPort); + DetermineItemsPosition(baselineProperties); +} + +void RenderFlex::ResizeItems(const FlexItemProperties& flexItemProps, BaselineProperties& baselineProps) +{ + double availableMainSize = GetAvailableMainSize(); + if (flexItemProps.totalGrow > 0 && availableMainSize > allocatedSize_) { + mainAxisSize_ = MainAxisSize::MAX; + } + // remainSpace should be (availableMainSize - allocatedSize_), and do not remain space when MainAxisSize::MIN. + // Handle infinity children specially, because allocatedSize_ not include infinity child. + double remainSpace = + (mainAxisSize_ == MainAxisSize::MIN && availableMainSize >= allocatedSize_ && infinityLayoutNodes_.empty()) + ? 0.0 : availableMainSize - allocatedSize_; + double infiniteLayoutSize = availableMainSize; + if (!infinityLayoutNodes_.empty()) { + if (remainSpace > 0.0) { + infiniteLayoutSize = remainSpace / infinityLayoutNodes_.size(); + remainSpace = 0.0; + } else { + remainSpace -= infiniteLayoutSize; + } + } + double spacePerFlex = 0.0; + double allocatedFlexSpace = 0.0; + double (*getFlex)(const RefPtr&) = nullptr; + RefPtr lastChild; + if (remainSpace > 0) { + getFlex = [](const RefPtr& item) { return item->GetFlexGrow(); }; + spacePerFlex = NearZero(flexItemProps.totalGrow) ? 0.0 : remainSpace / flexItemProps.totalGrow; + lastChild = flexItemProps.lastGrowChild; + } else { + getFlex = [](const RefPtr& item) { return item->GetFlexShrink(); }; + spacePerFlex = NearZero(flexItemProps.totalShrink) ? 0.0 : remainSpace / flexItemProps.totalShrink; + lastChild = flexItemProps.lastShrinkChild; + } + // In second layout, do not need to check the size validity, they are all checked. + for (const auto& item : relativeNodes_) { + if (infinityLayoutNodes_.find(item) != infinityLayoutNodes_.end()) { + LayoutInfinityChild(item, infiniteLayoutSize, baselineProps); + continue; + } + auto flexItem = AceType::DynamicCast(item); + if (!flexItem || flexItem->IsHidden()) { + if (crossAxisAlign_ == FlexAlign::STRETCH) { + item->Layout(MakeStretchInnerLayoutParam(item)); + } + continue; + } + double itemFlex = getFlex(flexItem); + double flexSize = (flexItem == lastChild) ? (remainSpace - allocatedFlexSpace) + : ((remainSpace > 0) ? spacePerFlex * itemFlex : spacePerFlex * itemFlex * GetMainSize(item)); + RelayoutFlexItem(flexItem, flexSize, baselineProps, allocatedFlexSpace); + } +} + +void RenderFlex::DetermineSelfSize(MainAxisSize mainAxisSize, bool useViewPort) +{ + double maxMainSize = GetMainAxisValue(GetLayoutParam().GetMaxSize(), direction_); + double mainViewPort = GetMainAxisValue(viewPort_, direction_); + if (NearEqual(maxMainSize, Size::INFINITE_SIZE)) { + // If max size of layoutParam is infinity, use children's allocated size as max size. + maxMainSize = allocatedSize_; + } + // useViewPort means that it is the root flex, should be as large as viewPort. + Size layoutSize = (mainAxisSize == MainAxisSize::MIN) + ? GetConstrainedSize(allocatedSize_) + : useViewPort ? GetConstrainedSize(mainViewPort) : GetConstrainedSize(maxMainSize); + if (useViewPort && !absoluteNodes_.empty()) { + layoutSize = GetConstrainedSize(mainViewPort); + } + SetLayoutSize(layoutSize); + mainSize_ = GetMainAxisValue(layoutSize, direction_); + crossSize_ = (direction_ == FlexDirection::ROW) ? layoutSize.Height() : layoutSize.Width(); +} + +void RenderFlex::DetermineItemsPosition(const BaselineProperties& baselineProperties) +{ + double remainSpace = (mainSize_ - allocatedSize_) > 0.0 ? (mainSize_ - allocatedSize_) : 0.0; + double frontSpace = 0.0; + double betweenSpace = 0.0; + // make use of remain space + CalculateSpace(remainSpace, frontSpace, betweenSpace); + // position elements + PlaceChildren(frontSpace, betweenSpace, baselineProperties); +} + +void RenderFlex::CalculateSpace(double remainSpace, double& frontSpace, double& betweenSpace) const +{ + if (NearZero(remainSpace)) { + return; + } + switch (mainAxisAlign_) { + case FlexAlign::FLEX_START: + frontSpace = 0.0; + betweenSpace = 0.0; + break; + case FlexAlign::FLEX_END: + frontSpace = remainSpace; + betweenSpace = 0.0; + break; + case FlexAlign::CENTER: + frontSpace = remainSpace / 2.0; + betweenSpace = 0.0; + break; + case FlexAlign::SPACE_BETWEEN: + frontSpace = 0.0; + betweenSpace = validSizeCount_ > 1 ? remainSpace / (validSizeCount_ - 1) : 0.0; + break; + case FlexAlign::SPACE_AROUND: + betweenSpace = validSizeCount_ > 0 ? remainSpace / validSizeCount_ : 0.0; + frontSpace = betweenSpace / 2.0; + break; + case FlexAlign::SPACE_EVENLY: + betweenSpace = validSizeCount_ > 0 ? remainSpace / (validSizeCount_ + 1) : 0.0; + frontSpace = betweenSpace; + break; + default: + break; + } +} + +void RenderFlex::PlaceChildren(double frontSpace, double betweenSpace, const BaselineProperties& baselineProperties) +{ + double childMainPos = IsStartTopLeft(direction_) ? frontSpace : mainSize_ - frontSpace; + double childCrossPos = 0.0; + for (const auto& item : GetChildren()) { + if (item->IsIgnored()) { + continue; + } + auto flexItem = AceType::DynamicCast(item); + if (flexItem && flexItem->IsHidden() && !flexItem->GetLayoutSize().IsValid()) { + continue; + } + if (item->GetPositionType() == PositionType::ABSOLUTE) { + Offset absoluteOffset = PositionLayoutUtils::GetAbsoluteOffset(Claim(this), item); + item->SetAbsolutePosition(absoluteOffset); + continue; + } + auto alignItem = GetSelfAlign(item); + switch (alignItem) { + case FlexAlign::FLEX_START: + case FlexAlign::FLEX_END: + childCrossPos = (IsStartTopLeft(FlipAxis(direction_))) == (alignItem == FlexAlign::FLEX_START) + ? 0.0 : (crossSize_ - GetCrossSize(item)); + break; + case FlexAlign::CENTER: + childCrossPos = (crossSize_ / 2.0) - (GetCrossSize(item) / 2.0); + break; + case FlexAlign::STRETCH: + childCrossPos = IsStartTopLeft(FlipAxis(direction_)) ? 0.0 : (crossSize_ - GetCrossSize(item)); + break; + case FlexAlign::BASELINE: + childCrossPos = 0.0; + if (direction_ == FlexDirection::ROW) { + double distance = item->GetBaselineDistance(textBaseline_); + childCrossPos = baselineProperties.maxBaselineDistance - distance; + } + break; + default: + break; + } + Offset offset = (direction_ == FlexDirection::ROW) ? Offset(childMainPos, childCrossPos) + : Offset(childCrossPos, childMainPos); + if (!IsStartTopLeft(direction_)) { + offset.SetX(offset.GetX() - GetMainSize(item)); + item->SetPosition(offset); + childMainPos -= GetMainSize(item) + betweenSpace; + } else { + item->SetPosition(offset); + childMainPos += GetMainSize(item) + betweenSpace; + } + } +} + +void RenderFlex::LayoutFlexItem(const RefPtr& flexItem, FlexItemProperties& flexItemProperties) const +{ + double itemShrink = flexItem->GetFlexShrink(); + double itemGrow = flexItem->GetFlexGrow(); + double itemBasis = flexItem->GetFlexBasis(); + if (itemGrow > 0) { + flexItemProperties.lastGrowChild = flexItem; + } + if (itemShrink > 0) { + flexItemProperties.lastShrinkChild = flexItem; + } + LayoutParam innerLayout; + if (GreatNotEqual(itemBasis, 0.0)) { + innerLayout = MakeLayoutParamWithLimit(itemBasis, itemBasis, false); + } else { + innerLayout.SetMaxSize(GetLayoutParam().GetMaxSize()); + } + // first time layout flex item + flexItem->Layout(innerLayout); + flexItemProperties.totalShrink += itemShrink * GetMainSize(flexItem); + flexItemProperties.totalGrow += itemGrow; +} + +void RenderFlex::RelayoutFlexItem(const RefPtr& flexItem, double flexSize, + BaselineProperties& baselineProps, double& allocatedFlexSpace) +{ + bool canItemStretch = (GetSelfAlign(flexItem) == FlexAlign::STRETCH) && (flexItem->GetStretchFlag()); + if (NearZero(flexSize) && !canItemStretch) { + return; + } + allocatedSize_ -= GetMainSize(flexItem); + auto innerLayout = MakeConstrainedLayoutParam(flexSize + GetMainSize(flexItem), + flexItem->GetNormalizedConstraints(), canItemStretch); + flexItem->Layout(innerLayout); + allocatedFlexSpace += flexSize; + ResizeByItem(flexItem); + CheckBaselineProperties(flexItem, baselineProps); +} + +void RenderFlex::LayoutInfinityChild(const RefPtr& item, double mainSize, BaselineProperties& baselineProps) +{ + auto flexItem = AceType::DynamicCast(item); + bool isStretch = false; + if (flexItem) { + isStretch = (crossAxisAlign_ == FlexAlign::STRETCH) && (flexItem->GetStretchFlag()); + } else { + isStretch = crossAxisAlign_ == FlexAlign::STRETCH; + } + LayoutParam innerLayout = MakeLayoutParamWithLimit(mainSize, mainSize, isStretch); + item->Layout(innerLayout); + ResizeByItem(item); + CheckBaselineProperties(item, baselineProps); +} + +void RenderFlex::LayoutAbsoluteChildren() +{ + if (absoluteNodes_.empty()) { + return; + } + for (const auto& item : absoluteNodes_) { + item->Layout(GetLayoutParam()); + } +} + +void RenderFlex::CheckBaselineProperties(const RefPtr& item, BaselineProperties& baselineProperties) +{ + if (crossAxisAlign_ == FlexAlign::BASELINE) { + double distance = item->GetBaselineDistance(textBaseline_); + baselineProperties.maxBaselineDistance = std::max(baselineProperties.maxBaselineDistance, distance); + baselineProperties.maxDistanceAboveBaseline = std::max(baselineProperties.maxDistanceAboveBaseline, distance); + baselineProperties.maxDistanceBelowBaseline = + std::max(baselineProperties.maxDistanceBelowBaseline, GetCrossSize(item) - distance); + crossSize_ = baselineProperties.maxDistanceAboveBaseline + baselineProperties.maxDistanceBelowBaseline; + } +} + +double RenderFlex::GetBaselineDistance(TextBaseline baseline) +{ + if (direction_ == FlexDirection::ROW) { + // in row, use default children baseline defined in render node. + return GetHighestChildBaseline(baseline); + } else { + // in column, just get the first child baseline + return GetFirstChildBaseline(baseline); + } +} + +Size RenderFlex::GetChildViewPort() +{ + if (containsNavigation_) { + double width = viewPort_.Width(); + double height = viewPort_.Height(); + if (direction_ == FlexDirection::ROW) { + width -= navigationMainSize_; + } else { + height -= navigationMainSize_; + } + return Size(width, height); + } else { + return viewPort_; + } +} + +void RenderFlex::InitFlexProperties() +{ + mainSize_ = 0.0; + crossSize_ = 0.0; + allocatedSize_ = 0.0; + validSizeCount_ = 0; + layoutMode_ = FlexLayoutMode::FLEX_WEIGHT_MODE; + totalFlexWeight_ = 0.0; + maxDisplayIndex_ = 0; + totalFlexWeight_ = 0.0; + if (direction_ == FlexDirection::ROW) { + isMainInfinite_ = GetLayoutParam().GetMaxSize().IsWidthInfinite(); + isCrossInfinite_ = GetLayoutParam().GetMaxSize().IsHeightInfinite(); + } else { + isMainInfinite_ = GetLayoutParam().GetMaxSize().IsHeightInfinite(); + isCrossInfinite_ = GetLayoutParam().GetMaxSize().IsWidthInfinite(); + } + // determine the flex layout mode + TravelChildrenFlexProps(); +} + +void RenderFlex::TravelChildrenFlexProps() +{ + for (const auto& child : GetChildren()) { + child->SetVisible(true); + if (child->GetPositionType() != PositionType::RELATIVE) { + absoluteNodes_.insert(child); + continue; + } + maxDisplayIndex_ = std::max(child->GetDisplayIndex(), maxDisplayIndex_); + relativeNodes_.emplace_back(child); + MagicLayoutNode node; + node.node = child; + auto idx = child->GetDisplayIndex(); + if (magicNodes_.find(idx) != magicNodes_.end()) { + magicNodes_[idx].emplace_back(node); + magicWeightMaps_[idx] += child->GetFlexWeight(); + } else { + std::list nodes; + nodes.emplace_back(node); + magicNodes_[idx] = nodes; + magicWeightMaps_[idx] = child->GetFlexWeight(); + } + // FLEX_WEIGHT_MODE only active when all the children have set flexWeight + if (LessOrEqual(child->GetFlexWeight(), 0.0)) { + layoutMode_ = FlexLayoutMode::FLEX_ITEM_MODE; + } else { + totalFlexWeight_ += child->GetFlexWeight(); + } + } + if (relativeNodes_.empty() && !absoluteNodes_.empty()) { + layoutMode_ = FlexLayoutMode::FLEX_ITEM_MODE; + } +} + +void RenderFlex::ClearChildrenLists() +{ + infinityLayoutNodes_.clear(); + absoluteNodes_.clear(); + relativeNodes_.clear(); + magicNodes_.clear(); + magicWeightMaps_.clear(); + displayNodes_.clear(); +} + +void RenderFlex::ResizeByItem(const RefPtr& item) +{ + double mainSize = GetMainSize(item); + if (NearEqual(mainSize, Size::INFINITE_SIZE)) { + mainSize = 0.0; + // push infinite nodes + infinityLayoutNodes_.insert(item); + } + if (item->GetPositionType() != PositionType::RELATIVE) { + return; + } + allocatedSize_ += mainSize; + crossSize_ = std::max(crossSize_, GetCrossSize(item)); +} + +void RenderFlex::CheckSizeValidity(const RefPtr& item) +{ + if (item->IsIgnored() || item->GetPositionType() != PositionType::RELATIVE) { + return; + } + if (!item->GetLayoutSize().IsValid()) { + auto flexItem = AceType::DynamicCast(item); + if (flexItem && flexItem->IsHidden()) { + return; + } + } + ++validSizeCount_; + displayNodes_.insert(item); +} + +double RenderFlex::GetAvailableMainSize() +{ + double maxMainSize = 0.0; + if (!isMainInfinite_ || !useViewPort_) { + maxMainSize = (direction_ == FlexDirection::ROW) ? GetLayoutParam().GetMaxSize().Width() + : GetLayoutParam().GetMaxSize().Height(); + } else { + maxMainSize = (direction_ == FlexDirection::ROW) ? viewPort_.Width() : viewPort_.Height(); + } + return maxMainSize; +} + +double RenderFlex::GetMainSize(const RefPtr& item) const +{ + if (direction_ == FlexDirection::ROW) { + return item->GetPaintRect().Width(); + } else { + return item->GetPaintRect().Height(); + } +} + +double RenderFlex::GetCrossSize(const RefPtr& item) const +{ + if (direction_ == FlexDirection::ROW) { + return item->GetPaintRect().Height(); + } else { + return item->GetPaintRect().Width(); + } +} + +bool RenderFlex::IsStartTopLeft(FlexDirection direction) const +{ + return !(direction == FlexDirection::ROW && GetTextDirection() == TextDirection::RTL); +} + +Size RenderFlex::GetConstrainedSize(double mainSize) +{ + if ((stretchToParent_ && crossAxisAlign_ == FlexAlign::STRETCH) || (crossAxisSize_ == CrossAxisSize::MAX)) { + if (direction_ == FlexDirection::ROW) { + return GetLayoutParam().Constrain(Size(mainSize, GetLayoutParam().GetMaxSize().Height())); + } else { + return GetLayoutParam().Constrain(Size(GetLayoutParam().GetMaxSize().Width(), mainSize)); + } + } + if (direction_ == FlexDirection::ROW) { + return GetLayoutParam().Constrain(Size(mainSize, crossSize_)); + } else { + return GetLayoutParam().Constrain(Size(crossSize_, mainSize)); + } +} + +FlexAlign RenderFlex::GetSelfAlign(const RefPtr& item) const +{ + auto flexItem = AceType::DynamicCast(item); + if (flexItem) { + auto alignSelf = flexItem->GetAlignSelf(); + return alignSelf == FlexAlign::AUTO ? crossAxisAlign_ : alignSelf; + } + return crossAxisAlign_; +} + +void RenderFlex::OnChildRemoved(const RefPtr& child) +{ + MarkNeedLayout(); +} + +void RenderFlex::ClearRenderObject() +{ + RenderNode::ClearRenderObject(); + direction_ = FlexDirection::ROW; + mainAxisAlign_ = FlexAlign::FLEX_START; + crossAxisAlign_ = FlexAlign::FLEX_START; + mainAxisSize_ = MainAxisSize::MAX; + crossAxisSize_ = CrossAxisSize::MIN; + textBaseline_ = TextBaseline::ALPHABETIC; + layoutMode_ = FlexLayoutMode::FLEX_ITEM_MODE; + stretchToParent_ = false; + mainSize_ = 0.0; + crossSize_ = 0.0; + allocatedSize_ = 0.0; + infinityLayoutNodes_.clear(); + absoluteNodes_.clear(); + relativeNodes_.clear(); + magicNodes_.clear(); + magicWeightMaps_.clear(); + displayNodes_.clear(); + scrollNode = nullptr; + isMainInfinite_ = false; + isCrossInfinite_ = false; + useViewPort_ = false; + containsNavigation_ = false; + navigationMainSize_ = 0.0; + validSizeCount_ = 0; + totalFlexWeight_ = 0.0; + maxDisplayIndex_ = 0; +} + +bool RenderFlex::MaybeRelease() +{ + auto context = GetContext().Upgrade(); + if (context && context->GetRenderFactory()->GetRenderFlexFactory()->Recycle(this)) { + ClearRenderObject(); + return false; + } + return true; +} + +void RenderFlex::Dump() +{ + DumpLog::GetInstance().AddDesc(std::string("Direction: ").append(std::to_string(static_cast(direction_)))); + DumpLog::GetInstance().AddDesc( + std::string("LayoutMode: ").append(std::to_string(static_cast(layoutMode_)))); + DumpLog::GetInstance().AddDesc( + std::string("MainAxisAlign: ").append(std::to_string(static_cast(mainAxisAlign_)))); + DumpLog::GetInstance().AddDesc( + std::string("CrossAxisAlign: ").append(std::to_string(static_cast(crossAxisAlign_)))); + DumpLog::GetInstance().AddDesc( + std::string("MainAxisSize: ").append(std::to_string(static_cast(mainAxisSize_)))); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/flex/render_flex.h b/frameworks/core/components/flex/render_flex.h new file mode 100644 index 00000000..c32be203 --- /dev/null +++ b/frameworks/core/components/flex/render_flex.h @@ -0,0 +1,195 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FLEX_RENDER_FLEX_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FLEX_RENDER_FLEX_H + +#include "core/components/common/layout/constants.h" +#include "core/components/common/properties/text_style.h" +#include "core/components/flex/render_flex_item.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +struct FlexItemProperties { + double totalShrink = 0.0; + double totalGrow = 0.0; + RefPtr lastShrinkChild; + RefPtr lastGrowChild; +}; + +struct BaselineProperties { + double maxBaselineDistance = 0.0; + double maxDistanceAboveBaseline = 0.0; + double maxDistanceBelowBaseline = 0.0; +}; + +struct MagicLayoutNode { + LayoutParam innerLayout = LayoutParam(Size(), Size()); + RefPtr node; +}; + +class ACE_EXPORT RenderFlex : public RenderNode { + DECLARE_ACE_TYPE(RenderFlex, RenderNode); + +public: + static RefPtr Create(); + + void Update(const RefPtr& component) override; + + void PerformLayout() override; + + FlexDirection GetDirection() const + { + return direction_; + } + + TextBaseline GetBaseline() const + { + return textBaseline_; + } + + bool IsStretchToParent() const + { + return stretchToParent_; + } + + double GetBaselineDistance(TextBaseline baseline) override; + + Size GetChildViewPort() override; + + void OnChildRemoved(const RefPtr& child) override; + + void Dump() override; + +protected: + virtual void ClearRenderObject() override; + virtual bool MaybeRelease() override; + +private: + void PerformLayoutInWeightMode(); + void PerformLayoutInIndexMode(); + void PerformLayoutInItemMode(); + + void LayoutMagicNodes(BaselineProperties& baselineProperties); + void RelayoutForStretchMagicNode(); + void RelayoutForStretchFlexNode(const FlexItemProperties& flexItemProperties); + void LayoutHiddenNodes(); + + /** + * This function is used to travel a single flex item in the first time layout to determine the flexItemProperties. + * + * @param flexItem The item under operation. + * @param flexItemProperties Store all the flex item properties. + */ + void LayoutFlexItem(const RefPtr& flexItem, FlexItemProperties& flexItemProperties) const; + + void RelayoutFlexItem(const RefPtr& flexItem, double flexSize, BaselineProperties& baselineProps, + double& allocatedFlexSpace); + + void LayoutInfinityChild(const RefPtr& item, double mainSize, BaselineProperties& baselineProperties); + + /** + * This function is used to determine all the items' sizes in the second time layout according to the + * flexItemProperties. The size of Flex(Row/Column) will be resized by the flex item. + * + * @param flexItemProps FlexItemProperties. + * @param baselineProps The distance properties of baseline. + */ + void ResizeItems(const FlexItemProperties& flexItemProps, BaselineProperties& baselineProps); + + void DetermineSelfSize(MainAxisSize mainAxisSize, bool useViewPort); + + void DetermineItemsPosition(const BaselineProperties& baselineProperties); + + /** + * This function is used to calculate the frontSpace and the betweenSpace according to mainAxisAlign and + * remainSpace. Only when the allocated size is smaller than the maxMainSize, it can be effective. In other word, it + * requires all the items are not flex items. + * + * @param remainSpace Remain space. + * @param frontSpace The space before the first item. + * @param betweenSpace The space between two items. + */ + void CalculateSpace(double remainSpace, double& frontSpace, double& betweenSpace) const; + + /** + * This function is used to place all the items according to the size and the space. + * + * @param frontSpace The space before the first item. + * @param betweenSpace The space between two items. + * @param baselineProperties The distance properties of baseline. + */ + void PlaceChildren(double frontSpace, double betweenSpace, const BaselineProperties& baselineProperties); + + void LayoutAbsoluteChildren(); + + void CheckBaselineProperties(const RefPtr& item, BaselineProperties& baselineProperties); + + LayoutParam MakeStretchInnerLayoutParam(const RefPtr& item) const; + LayoutParam MakeLayoutParamWithLimit(double minMainLimit, double maxMainLimit, bool isStretch) const; + LayoutParam MakeConstrainedLayoutParam(double mainFlexExtent, const LayoutParam& constraint, bool isStretch) const; + + void ResizeByItem(const RefPtr& item); + void CheckSizeValidity(const RefPtr& item); + Size GetConstrainedSize(double mainSize); + double GetAvailableMainSize(); + double GetMainSize(const RefPtr& item) const; + double GetCrossSize(const RefPtr& item) const; + double GetStretchCrossLimit() const; + void InitFlexProperties(); + void TravelChildrenFlexProps(); + void ClearChildrenLists(); + FlexAlign GetSelfAlign(const RefPtr& item) const; + void UpdateAccessibilityAttr(); + void OnPaintFinish() override; + + bool IsStartTopLeft(FlexDirection direction) const; + + FlexDirection direction_ = FlexDirection::ROW; + FlexAlign mainAxisAlign_ = FlexAlign::FLEX_START; + FlexAlign crossAxisAlign_ = FlexAlign::FLEX_START; + MainAxisSize mainAxisSize_ = MainAxisSize::MAX; + CrossAxisSize crossAxisSize_ = CrossAxisSize::MIN; + TextBaseline textBaseline_ = TextBaseline::ALPHABETIC; + FlexLayoutMode layoutMode_ = FlexLayoutMode::FLEX_ITEM_MODE; + bool stretchToParent_ = false; + + double mainSize_ = 0.0; + double crossSize_ = 0.0; + double allocatedSize_ = 0.0; + + std::set> infinityLayoutNodes_; + std::set> absoluteNodes_; + std::list> relativeNodes_; + // use map to order the magic Nodes + std::map> magicNodes_; + std::map magicWeightMaps_; + std::set> displayNodes_; // displayNodes_ used to record all display nodes in magic layout + + RefPtr scrollNode; + bool isMainInfinite_ = false; + bool isCrossInfinite_ = false; + bool useViewPort_ = false; + bool containsNavigation_ = false; + double navigationMainSize_ = 0.0; + int32_t validSizeCount_ = 0; + double totalFlexWeight_ = 0.0; + int32_t maxDisplayIndex_ = 0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FLEX_RENDER_FLEX_H diff --git a/frameworks/core/components/flex/render_flex_item.cpp b/frameworks/core/components/flex/render_flex_item.cpp new file mode 100644 index 00000000..32cfa080 --- /dev/null +++ b/frameworks/core/components/flex/render_flex_item.cpp @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/flex/render_flex_item.h" + +#include "base/utils/utils.h" +#include "core/components/flex/flex_item_component.h" + +namespace OHOS::Ace { + +RefPtr RenderFlexItem::Create() +{ + return AceType::MakeRefPtr(); +} + +void RenderFlexItem::Update(const RefPtr& component) +{ + const RefPtr flexItem = AceType::DynamicCast(component); + if (!flexItem) { + return; + } + // check the validity of properties + if (flexItem->GetFlexShrink() >= 0.0) { + flexShrink_ = flexItem->GetFlexShrink(); + } + if (flexItem->GetFlexBasis() >= 0.0) { + flexBasis_ = flexItem->GetFlexBasis(); + } + if (flexItem->GetFlexGrow() >= 0.0) { + flexGrow_ = flexItem->GetFlexGrow(); + } + canStretch_ = flexItem->GetStretchFlag(); + alignSelf_ = flexItem->GetAlignSelf(); + minWidth_ = flexItem->GetMinWidth(); + minHeight_ = flexItem->GetMinHeight(); + maxWidth_ = flexItem->GetMaxWidth(); + maxHeight_ = flexItem->GetMaxHeight(); + isHidden_ = flexItem->IsHidden(); + MarkNeedLayout(); +} + +bool RenderFlexItem::MaybeRelease() +{ + auto context = GetContext().Upgrade(); + if (context && context->GetRenderFactory()->GetRenderFlexItemFactory()->Recycle(this)) { + ClearRenderObject(); + return false; + } + return true; +} + +void RenderFlexItem::ClearRenderObject() +{ + RenderNode::ClearRenderObject(); + flexGrow_ = 0.0; + flexShrink_ = 0.0; + flexBasis_ = 0.0; + canStretch_ = true; + minWidth_ = Dimension(); + minHeight_ = Dimension(); + maxWidth_ = Dimension(Size::INFINITE_SIZE); + maxHeight_ = Dimension(Size::INFINITE_SIZE); + alignSelf_ = FlexAlign::AUTO; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/flex/render_flex_item.h b/frameworks/core/components/flex/render_flex_item.h new file mode 100644 index 00000000..569db771 --- /dev/null +++ b/frameworks/core/components/flex/render_flex_item.h @@ -0,0 +1,119 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FLEX_RENDER_FLEX_ITEM_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FLEX_RENDER_FLEX_ITEM_H + +#include "core/components/common/layout/constants.h" +#include "core/components/proxy/render_proxy.h" + +namespace OHOS::Ace { + +class ACE_EXPORT RenderFlexItem final : public RenderProxy { + DECLARE_ACE_TYPE(RenderFlexItem, RenderProxy); + +public: + static RefPtr Create(); + + void Update(const RefPtr& component) override; + + double GetFlexGrow() const + { + return flexGrow_; + } + + void SetFlexGrow(double flexGrow) + { + flexGrow_ = flexGrow; + } + + double GetFlexShrink() const + { + return flexShrink_; + } + + void SetFlexShrink(double flexShrink) + { + flexShrink_ = flexShrink; + } + + double GetFlexBasis() const + { + return flexBasis_; + } + + void SetFlexBasis(double flexBasis) + { + flexBasis_ = flexBasis; + } + + bool GetStretchFlag() const + { + return canStretch_; + } + + FlexAlign GetAlignSelf() const + { + return alignSelf_; + } + + void SetAlignSelf(FlexAlign alignSelf) + { + alignSelf_ = alignSelf; + } + + LayoutParam GetNormalizedConstraints() const + { + Size min = Size(NormalizePercentToPx(minWidth_, false), NormalizePercentToPx(minHeight_, true)); + Size max = Size(NormalizePercentToPx(maxWidth_, false), NormalizePercentToPx(maxHeight_, true)); + if (LessNotEqual(max.Width(), min.Width())) { + max.SetWidth(min.Width()); + } + if (LessNotEqual(max.Height(), min.Height())) { + max.SetHeight(min.Height()); + } + LayoutParam constraint = LayoutParam(max, min); + if (!constraint.IsValid()) { + return LayoutParam(Size(Size::INFINITE_SIZE, Size::INFINITE_SIZE), Size()); + } + return constraint; + } + + bool IsHidden() const + { + return isHidden_; + } + +protected: + virtual void ClearRenderObject() override; + virtual bool MaybeRelease() override; + +private: + double flexGrow_ = 0.0; + double flexShrink_ = 0.0; + double flexBasis_ = 0.0; + bool canStretch_ = true; + bool isHidden_ = false; + + Dimension minWidth_ = Dimension(); + Dimension minHeight_ = Dimension(); + Dimension maxWidth_ = Dimension(Size::INFINITE_SIZE); + Dimension maxHeight_ = Dimension(Size::INFINITE_SIZE); + FlexAlign alignSelf_ = FlexAlign::AUTO; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FLEX_RENDER_FLEX_ITEM_H diff --git a/frameworks/core/components/focus_animation/BUILD.gn b/frameworks/core/components/focus_animation/BUILD.gn new file mode 100644 index 00000000..6b13d067 --- /dev/null +++ b/frameworks/core/components/focus_animation/BUILD.gn @@ -0,0 +1,22 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("focus_animation") { + sources = [ + "flutter_render_focus_animation.cpp", + "focus_animation_component.cpp", + "render_focus_animation.cpp", + ] +} diff --git a/frameworks/core/components/focus_animation/flutter_render_focus_animation.cpp b/frameworks/core/components/focus_animation/flutter_render_focus_animation.cpp new file mode 100644 index 00000000..24baaf3f --- /dev/null +++ b/frameworks/core/components/focus_animation/flutter_render_focus_animation.cpp @@ -0,0 +1,248 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/focus_animation/flutter_render_focus_animation.h" + +#include + +#include "third_party/skia/include/core/SkCanvas.h" +#include "third_party/skia/include/core/SkColor.h" +#include "third_party/skia/include/core/SkMaskFilter.h" +#include "third_party/skia/include/core/SkPath.h" +#include "third_party/skia/include/core/SkPoint.h" +#include "third_party/skia/include/effects/SkDashPathEffect.h" +#include "third_party/skia/include/effects/SkGradientShader.h" + +#include "base/utils/system_properties.h" +#include "core/pipeline/base/scoped_canvas_state.h" + +namespace OHOS::Ace { +namespace { + +constexpr int32_t BOUNDARY_WIDTH = 1; +constexpr int32_t PHONE_BOUNDARY_WIDTH = 2; +constexpr int32_t MAX_ALPHA = 255; +constexpr int32_t FOCUS_ANIMATION_OFFSET = 3; +constexpr int32_t PHONE_FOCUS_OFFSET = 3; +constexpr int32_t PHONE_INDENTED_FOCUS_OFFSET = 1; +constexpr int32_t ARRAY_LENGTH = 6; +constexpr float RIGHT_ANGLE = 90.0f; +constexpr float MAX_TRANSPARENCY = 153.0f; +constexpr float MIN_TRANSPARENCY = 26.0f; +constexpr float MULTIPLE_FACTOR = 2.0f; +constexpr float LEFTEDGE_START_PERCENT = 0.0f; +constexpr float LEFTGLOWEDGE_START_PERCENT = 0.25f; +constexpr float MIDGLOWEDGE_START_PERCENT = 0.41f; +constexpr float RIGHTGLOWEDGE_START_PERCENT = 0.58f; +constexpr float RIGHTEDGE_START_PERCENT = 0.75f; +constexpr float LEFTGLOWEDGE_START_PERCENT_FORLARGEASPECT = 0.33f; +constexpr float MIDGLOWEDGE_START_PERCENT_FORLARGEASPECT = 0.44f; +constexpr float RIGHTGLOWEDGE_START_PERCENT_FORLARGEASPECT = 0.56f; +constexpr float RIGHTEDGE_START_PERCENT_FORLARGEASPECT = 0.67f; +constexpr float RIGHTEDGE_END_PERCENT = 1.0f; +constexpr double DOUBLE_FACTOR = 2.0; +constexpr double BLUR_SIGMA_FACTOR = 0.33; + +} // namespace + +using namespace Flutter; + +RefPtr RenderFocusAnimation::Create() +{ + return AceType::MakeRefPtr(); +} + +void FlutterRenderFocusAnimation::Paint(RenderContext& context, const Offset& offset) +{ + if (!isDisplay_ || NearZero(rrect_.Width()) || NearZero(rrect_.Height())) { + return; + } + auto pipelineContext = context_.Upgrade(); + if (!pipelineContext) { + LOGE("pipeline context is nullptr"); + return; + } + if (SystemProperties::GetDeviceType() == DeviceType::PHONE && !pipelineContext->IsKeyEvent()) { + return; + } + auto canvas = ScopedCanvas::Create(context); + if (!canvas) { + LOGE("canvas fetch failed"); + return; + } + SkCanvas* skCanvas = canvas->canvas(); + if (skCanvas == nullptr) { + LOGE("skCanvas fetch failed"); + return; + } + if (SystemProperties::GetDeviceType() == DeviceType::TV) { + PaintTVFocus(skCanvas); + } else if (SystemProperties::GetDeviceType() == DeviceType::PHONE) { + PaintPhoneFocus(skCanvas); + } +} + +void FlutterRenderFocusAnimation::PaintGlow(SkCanvas* skCanvas, SkPaint& paint, int32_t padding) const +{ + int32_t maxHeight = sqrt(pow(width_ + MULTIPLE_FACTOR * padding, MULTIPLE_FACTOR) + + pow(height_ + MULTIPLE_FACTOR * padding, MULTIPLE_FACTOR)); + + paint.setBlendMode(SkBlendMode::kSrcIn); + paint.setStyle(SkPaint::kFill_Style); + + SkPoint points[2] = { SkPoint::Make(0 - width_ / MULTIPLE_FACTOR, 0.0f), + SkPoint::Make(width_ / MULTIPLE_FACTOR, 0.0f) }; + skCanvas->translate(width_ / MULTIPLE_FACTOR, height_ / MULTIPLE_FACTOR); + + // Calculate the angle that each frame moves based on the total number of frames + skCanvas->rotate(progress_); + SkScalar pos[ARRAY_LENGTH] = { LEFTEDGE_START_PERCENT, LEFTGLOWEDGE_START_PERCENT, MIDGLOWEDGE_START_PERCENT, + RIGHTGLOWEDGE_START_PERCENT, RIGHTEDGE_START_PERCENT, RIGHTEDGE_END_PERCENT }; + + if (!NearZero(height_)) { + if (width_ / height_ > DOUBLE_FACTOR) { + pos[1] = LEFTGLOWEDGE_START_PERCENT_FORLARGEASPECT; + pos[2] = MIDGLOWEDGE_START_PERCENT_FORLARGEASPECT; + pos[3] = RIGHTGLOWEDGE_START_PERCENT_FORLARGEASPECT; + pos[4] = RIGHTEDGE_START_PERCENT_FORLARGEASPECT; + } + } + + // Computing transparency + uint8_t red = pathColor_.GetRed() & 0xFF; + uint8_t green = pathColor_.GetGreen() & 0xFF; + uint8_t blue = pathColor_.GetBlue() & 0xFF; + uint8_t mAlpha = 0; + if (progress_ > RIGHT_ANGLE) { + mAlpha = static_cast( + MAX_TRANSPARENCY - (progress_ - RIGHT_ANGLE) * ((MAX_TRANSPARENCY - MIN_TRANSPARENCY) / RIGHT_ANGLE)); + } else { + mAlpha = + static_cast(MIN_TRANSPARENCY + progress_ * ((MAX_TRANSPARENCY - MIN_TRANSPARENCY) / RIGHT_ANGLE)); + } + SkColor boundaryColor = SkColorSetARGB(mAlpha, red, green, blue); + SkColor glowColor = SkColorSetARGB(MAX_ALPHA, red, green, blue); + SkColor colors[ARRAY_LENGTH] = { boundaryColor, boundaryColor, glowColor, glowColor, boundaryColor, boundaryColor }; + +#ifdef USE_SYSTEM_SKIA + paint.setShader(SkGradientShader::MakeLinear(points, colors, pos, ARRAY_LENGTH, SkShader::kClamp_TileMode)); +#else + paint.setShader(SkGradientShader::MakeLinear(points, colors, pos, ARRAY_LENGTH, SkTileMode::kClamp)); +#endif + + skCanvas->drawRect( + SkRect::MakeXYWH(0 - (maxHeight / MULTIPLE_FACTOR + padding), 0 - (maxHeight / MULTIPLE_FACTOR + padding), + maxHeight + MULTIPLE_FACTOR * padding, maxHeight + MULTIPLE_FACTOR * padding), + paint); +} + +RenderLayer FlutterRenderFocusAnimation::GetRenderLayer() +{ + if (!layer_) { + layer_ = AceType::MakeRefPtr(0.0, 0.0); + } + return AceType::RawPtr(layer_); +} + +void FlutterRenderFocusAnimation::PaintClipRect(SkCanvas* skCanvas, double offset) const +{ + offset += (NormalizeToPx(blurMaskRadius_) * DOUBLE_FACTOR); + SkRRect skRRect = SkRRect::MakeRect(SkRect::MakeXYWH(clipRect_.GetOffset().GetX() - offset / DOUBLE_FACTOR, + clipRect_.GetOffset().GetY() - offset / DOUBLE_FACTOR, clipRect_.Width() + offset, + clipRect_.Height() + offset)); + skCanvas->clipRRect(skRRect, true); +} + +void FlutterRenderFocusAnimation::PaintTVFocus(SkCanvas* skCanvas) +{ + double offsetValue = NormalizeToPx(Dimension(FOCUS_ANIMATION_OFFSET, DimensionUnit::VP)) * MULTIPLE_FACTOR; + double radiusX = NormalizeToPx(rrect_.GetCorner().bottomLeftRadius.GetX()); + double radiusY = NormalizeToPx(rrect_.GetCorner().bottomLeftRadius.GetY()); + radiusX = NearZero(radiusX) ? 0.0 : radiusX + NormalizeToPx(Dimension(FOCUS_ANIMATION_OFFSET, DimensionUnit::VP)); + radiusY = NearZero(radiusX) ? 0.0 : radiusY + NormalizeToPx(Dimension(FOCUS_ANIMATION_OFFSET, DimensionUnit::VP)); + width_ = rrect_.Width() + offsetValue; + height_ = rrect_.Height() + offsetValue; + int32_t padding = NormalizeToPx(blurMaskRadius_); + + if (isNeedClip_) { + PaintClipRect(skCanvas, offsetValue); + } + + std::unique_ptr rect = std::make_unique(SkRect::MakeXYWH( + 0 - padding, 0 - padding, width_ + MULTIPLE_FACTOR * padding, height_ + MULTIPLE_FACTOR * padding)); + skCanvas->translate(offset_.GetX() - offsetValue / MULTIPLE_FACTOR, offset_.GetY() - offsetValue / MULTIPLE_FACTOR); + int32_t depthOfSavedStack = skCanvas->saveLayerAlpha(rect.get(), MAX_ALPHA); + + SkPath skPath; + skPath.addRRect(SkRRect::MakeRectXY(SkRect::MakeXYWH(0, 0, width_, height_), radiusX, radiusY)); + + SkPaint paint; + paint.setStrokeJoin(SkPaint::Join::kRound_Join); + paint.setStrokeCap(SkPaint::Cap::kRound_Cap); + paint.setStrokeWidth(NormalizeToPx(Dimension(BOUNDARY_WIDTH, DimensionUnit::VP))); + paint.setStyle(SkPaint::kStroke_Style); + paint.setMaskFilter(SkMaskFilter::MakeBlur(kSolid_SkBlurStyle, NormalizeToPx(blurMaskRadius_) * BLUR_SIGMA_FACTOR)); + paint.setColor( + SkColorSetARGB(pathColor_.GetAlpha(), pathColor_.GetRed(), pathColor_.GetGreen(), pathColor_.GetBlue())); + paint.setAlpha(MAX_ALPHA); + paint.setAntiAlias(true); + + skCanvas->drawPath(skPath, paint); + PaintGlow(skCanvas, paint, padding); + skCanvas->restoreToCount(depthOfSavedStack); +} + +void FlutterRenderFocusAnimation::PaintPhoneFocus(SkCanvas* skCanvas) +{ + double radiusX = 0.0; + double radiusY = 0.0; + if (!isIndented_) { + double offsetValue = NormalizeToPx(Dimension(PHONE_FOCUS_OFFSET, DimensionUnit::VP)) * MULTIPLE_FACTOR; + radiusX = NormalizeToPx(rrect_.GetCorner().bottomLeftRadius.GetX()); + radiusY = NormalizeToPx(rrect_.GetCorner().bottomLeftRadius.GetY()); + radiusX = NearZero(radiusX) ? 0.0 : radiusX + NormalizeToPx(Dimension(PHONE_FOCUS_OFFSET, DimensionUnit::VP)); + radiusY = NearZero(radiusX) ? 0.0 : radiusY + NormalizeToPx(Dimension(PHONE_FOCUS_OFFSET, DimensionUnit::VP)); + width_ = rrect_.Width() + offsetValue; + height_ = rrect_.Height() + offsetValue; + skCanvas->translate( + offset_.GetX() - offsetValue / MULTIPLE_FACTOR, offset_.GetY() - offsetValue / MULTIPLE_FACTOR); + } else { + double offsetValue = NormalizeToPx(Dimension(PHONE_INDENTED_FOCUS_OFFSET, DimensionUnit::VP)) * MULTIPLE_FACTOR; + radiusX = NormalizeToPx(rrect_.GetCorner().bottomLeftRadius.GetX()); + radiusY = NormalizeToPx(rrect_.GetCorner().bottomLeftRadius.GetY()); + radiusX = NearZero(radiusX) + ? 0.0 + : radiusX - NormalizeToPx(Dimension(PHONE_INDENTED_FOCUS_OFFSET, DimensionUnit::VP)); + radiusY = NearZero(radiusX) + ? 0.0 + : radiusY - NormalizeToPx(Dimension(PHONE_INDENTED_FOCUS_OFFSET, DimensionUnit::VP)); + width_ = rrect_.Width() - offsetValue; + height_ = rrect_.Height() - offsetValue; + skCanvas->translate( + offset_.GetX() + offsetValue / MULTIPLE_FACTOR, offset_.GetY() + offsetValue / MULTIPLE_FACTOR); + } + SkPath skPath; + skPath.addRRect(SkRRect::MakeRectXY(SkRect::MakeXYWH(0, 0, width_, height_), radiusX, radiusY)); + SkPaint paint; + paint.setStrokeJoin(SkPaint::Join::kRound_Join); + paint.setStrokeCap(SkPaint::Cap::kRound_Cap); + paint.setStrokeWidth(NormalizeToPx(Dimension(PHONE_BOUNDARY_WIDTH, DimensionUnit::VP))); + paint.setStyle(SkPaint::kStroke_Style); + paint.setColor(SkColorSetRGB(pathColor_.GetRed(), pathColor_.GetGreen(), pathColor_.GetBlue())); + paint.setAntiAlias(true); + skCanvas->drawPath(skPath, paint); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/focus_animation/flutter_render_focus_animation.h b/frameworks/core/components/focus_animation/flutter_render_focus_animation.h new file mode 100644 index 00000000..b607041f --- /dev/null +++ b/frameworks/core/components/focus_animation/flutter_render_focus_animation.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FOCUS_ANIMATION_FLUTTER_RENDER_FOCUS_ANIMATION_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FOCUS_ANIMATION_FLUTTER_RENDER_FOCUS_ANIMATION_H + +#include "core/components/focus_animation/render_focus_animation.h" +#include "core/pipeline/base/flutter_render_context.h" +#include "core/pipeline/base/scoped_canvas_state.h" +#include "core/pipeline/layers/offset_layer.h" + +namespace OHOS::Ace { + +class FlutterRenderFocusAnimation : public RenderFocusAnimation { + DECLARE_ACE_TYPE(FlutterRenderFocusAnimation, RenderFocusAnimation); + +public: + void Paint(RenderContext& context, const Offset& offset) override; + RenderLayer GetRenderLayer() override; + +private: + void PaintGlow(SkCanvas* canvas, SkPaint& paint, int32_t padding) const; + void PaintClipRect(SkCanvas* skCanvas, double offset) const; + void PaintTVFocus(SkCanvas* skCanvas); + void PaintPhoneFocus(SkCanvas* skCanvas); + + double width_ = 0.0; + double height_ = 0.0; + RefPtr layer_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FOCUS_ANIMATION_FLUTTER_RENDER_FOCUS_ANIMATION_H diff --git a/frameworks/core/components/focus_animation/focus_animation_component.cpp b/frameworks/core/components/focus_animation/focus_animation_component.cpp new file mode 100644 index 00000000..73c44a7b --- /dev/null +++ b/frameworks/core/components/focus_animation/focus_animation_component.cpp @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/focus_animation/focus_animation_component.h" + +#include "core/components/focus_animation/render_focus_animation.h" + +namespace OHOS::Ace { + +RefPtr FocusAnimationComponent::CreateRenderNode() +{ + return RenderFocusAnimation::Create(); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/focus_animation/focus_animation_component.h b/frameworks/core/components/focus_animation/focus_animation_component.h new file mode 100644 index 00000000..9f55193f --- /dev/null +++ b/frameworks/core/components/focus_animation/focus_animation_component.h @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FOCUS_ANIMATION_FOCUS_ANIMATION_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FOCUS_ANIMATION_FOCUS_ANIMATION_COMPONENT_H + +#include "core/components/common/properties/radius.h" +#include "core/components/focus_animation/focus_animation_element.h" +#include "core/components/focus_animation/focus_animation_theme.h" +#include "core/components/theme/theme_manager.h" +#include "core/pipeline/base/render_component.h" + +namespace OHOS::Ace { + +class FocusAnimationComponent : public RenderComponent { + DECLARE_ACE_TYPE(FocusAnimationComponent, RenderComponent); + +public: + explicit FocusAnimationComponent(bool isRoot = false) : isRoot_(isRoot) {} + + ~FocusAnimationComponent() override = default; + + RefPtr CreateRenderNode() override; + + RefPtr CreateElement() override + { + return AceType::MakeRefPtr(isRoot_); + } + + bool IsRoot() const + { + return isRoot_; + } + +private: + bool isRoot_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FOCUS_ANIMATION_FOCUS_ANIMATION_COMPONENT_H diff --git a/frameworks/core/components/focus_animation/focus_animation_element.h b/frameworks/core/components/focus_animation/focus_animation_element.h new file mode 100644 index 00000000..cc53c4f0 --- /dev/null +++ b/frameworks/core/components/focus_animation/focus_animation_element.h @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FOCUS_ANIMATION_FOCUS_ANIMATION_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FOCUS_ANIMATION_FOCUS_ANIMATION_ELEMENT_H + +#include "core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +class FocusAnimationElement : public RenderElement { + DECLARE_ACE_TYPE(FocusAnimationElement, RenderElement); + +public: + explicit FocusAnimationElement(bool isRoot = false) : isRoot_(isRoot) {} + + ~FocusAnimationElement() override = default; + + bool IsRoot() const + { + return isRoot_; + } + +private: + bool isRoot_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FOCUS_ANIMATION_FOCUS_ANIMATION_ELEMENT_H diff --git a/frameworks/core/components/focus_animation/focus_animation_theme.h b/frameworks/core/components/focus_animation/focus_animation_theme.h new file mode 100644 index 00000000..2e86cc8c --- /dev/null +++ b/frameworks/core/components/focus_animation/focus_animation_theme.h @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FOCUS_ANIMATION_FOCUS_ANIMATION_THEME_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FOCUS_ANIMATION_FOCUS_ANIMATION_THEME_H + +#include "core/components/common/properties/color.h" +#include "core/components/theme/theme.h" +#include "core/components/theme/theme_constants.h" + +namespace OHOS::Ace { + +/** + * FocusAnimationTheme defines color of FocusAnimationTheme. FocusAnimationTheme should be built + * using FocusAnimationTheme::Builder. + */ +class FocusAnimationTheme : public virtual Theme { + DECLARE_ACE_TYPE(FocusAnimationTheme, Theme); + +public: + class Builder { + public: + Builder() = default; + ~Builder() = default; + + RefPtr Build(const RefPtr& themeConstants) const + { + RefPtr theme = AceType::Claim(new FocusAnimationTheme()); + if (!themeConstants) { + return theme; + } + theme->color_ = themeConstants->GetColor(THEME_FOCUSANIMATION_COLOR); + auto themeStyle = themeConstants->GetThemeStyle(); + if (themeStyle) { + theme->color_ = themeStyle->GetAttr(THEME_ATTR_COLOR_FOCUSED, Color::BLUE); + } + return theme; + } + }; + + ~FocusAnimationTheme() override = default; + + const Color& GetColor() const + { + return color_; + } + +protected: + FocusAnimationTheme() = default; + +private: + Color color_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FOCUS_ANIMATION_FOCUS_ANIMATION_THEME_H diff --git a/frameworks/core/components/focus_animation/render_focus_animation.cpp b/frameworks/core/components/focus_animation/render_focus_animation.cpp new file mode 100644 index 00000000..0662ae17 --- /dev/null +++ b/frameworks/core/components/focus_animation/render_focus_animation.cpp @@ -0,0 +1,172 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/focus_animation/render_focus_animation.h" + +#include "base/log/event_report.h" +#include "core/components/scroll/render_multi_child_scroll.h" +#include "core/components/scroll/render_single_child_scroll.h" +#include "core/components/stack/stack_element.h" + +namespace OHOS::Ace { +namespace { + +constexpr int32_t TOTAL_DURATION = 3000; +constexpr float SEMICIRCLE = 180.0f; + +} // namespace + +void RenderFocusAnimation::Update(const RefPtr& component) +{ + if (animationParamsSet_) { + return; + } + auto focusAnimation = AceType::DynamicCast(component); + if (!focusAnimation) { + LOGE("RenderFocusAnimation update with nullptr"); + EventReport::SendRenderException(RenderExcepType::RENDER_COMPONENT_ERR); + return; + } + + auto pipelineContext = GetContext().Upgrade(); + if (!pipelineContext) { + LOGE("pipelineContext update with nullptr"); + return; + } + auto theme = pipelineContext->GetThemeManager(); + if (!theme) { + LOGE("calendar theme update with nullptr"); + return; + } + focusTheme_ = theme->GetTheme(); + layoutSize_.SetWidth(pipelineContext->GetRootWidth()); + layoutSize_.SetHeight(pipelineContext->GetRootHeight()); + if (SystemProperties::GetDeviceType() == DeviceType::TV) { + animator_ = AceType::MakeRefPtr(pipelineContext); + focusAnimation_ = AceType::MakeRefPtr>(0.0f, SEMICIRCLE, Curves::LINEAR); + focusAnimation_->AddListener([weak = AceType::WeakClaim(this)](const float& value) { + auto client = weak.Upgrade(); + if (client) { + client->progress_ = value; + client->MarkNeedRender(true); + } + }); + animator_->AddInterpolator(focusAnimation_); + animator_->SetDuration(TOTAL_DURATION); + animator_->SetIteration(ANIMATION_REPEAT_INFINITE); + } + + isDisplay_ = false; + animationParamsSet_ = true; + isRoot_ = focusAnimation->IsRoot(); +} + +bool RenderFocusAnimation::MarkNeedRenderSpecial() +{ + auto parent = GetParent().Upgrade(); + auto renderScroll = AceType::DynamicCast(parent); + if (renderScroll) { + return true; + } + return false; +} + +void RenderFocusAnimation::SetFocusAnimationProperties(const RRect& rrect, const Offset& offset) +{ + rrect_ = rrect; + offset_ = offset - GetGlobalOffset(); + isNeedClip_ = false; + pathColor_ = focusTheme_->GetColor(); + animationParamsSet_ = true; + if ((offset_.GetX() + rrect.Width()) > layoutSize_.Width() && (offset_.GetX() + rrect.Width()) > 0) { + layoutSize_.SetWidth(offset_.GetX() + rrect.Width() + NormalizeToPx(blurMaskRadius_) * 2); + MarkNeedLayout(); + } + if ((offset_.GetY() + rrect.Height()) > layoutSize_.Height() && (offset_.GetY() + rrect.Height()) > 0) { + layoutSize_.SetHeight((offset_.GetY() + rrect.Height()) + NormalizeToPx(blurMaskRadius_) * 2); + MarkNeedLayout(); + } +} + +void RenderFocusAnimation::SetFocusAnimationProperties( + const RRect& rrect, const Color& color, const Offset& offset, bool isIndented) +{ + SetFocusAnimationProperties(rrect, offset); + if (SystemProperties::GetDeviceType() == DeviceType::TV) { + pathColor_ = color; + if (!isDisplay_) { + isDisplay_ = true; + animator_->Play(); + } + } else if (SystemProperties::GetDeviceType() == DeviceType::PHONE) { + if (isKeyEvent_) { + // When the device is phone, only the key event will require paint. + isDisplay_ = true; + isIndented_ = isIndented; + MarkNeedLayout(); + } + } +} + +void RenderFocusAnimation::SetFocusAnimationProperties( + const RRect& rrect, const Color& color, const Offset& offset, const Rect& clipRect) +{ + if (SystemProperties::GetDeviceType() == DeviceType::TV) { + isNeedClip_ = true; + clipRect_ = clipRect; + } + SetFocusAnimationProperties(rrect, color, offset, false); +} + +void RenderFocusAnimation::CancelFocusAnimation() +{ + isDisplay_ = false; + if (SystemProperties::GetDeviceType() == DeviceType::TV) { + animator_->Pause(); + } + MarkNeedRender(true); +} + +void RenderFocusAnimation::PerformLayout() +{ + SetLayoutSize(layoutSize_); +} + +void RenderFocusAnimation::StopFocusAnimation() +{ + if (SystemProperties::GetDeviceType() != DeviceType::TV) { + return; + } + animator_->Stop(); + MarkNeedRender(true); +} + +void RenderFocusAnimation::StartFocusAnimation() +{ + isDisplay_ = true; + if (SystemProperties::GetDeviceType() == DeviceType::PHONE) { + MarkNeedRender(); + } else if (SystemProperties::GetDeviceType() == DeviceType::TV) { + animator_->Play(); + } +} + +void RenderFocusAnimation::SetIsKeyEvent(bool isKeyEvent) +{ + isKeyEvent_ = isKeyEvent; + MarkNeedRender(); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/focus_animation/render_focus_animation.h b/frameworks/core/components/focus_animation/render_focus_animation.h new file mode 100644 index 00000000..68a02989 --- /dev/null +++ b/frameworks/core/components/focus_animation/render_focus_animation.h @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FOCUS_ANIMATION_RENDER_FOCUS_ANIMATION_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FOCUS_ANIMATION_RENDER_FOCUS_ANIMATION_H + +#include "core/animation/animator.h" +#include "core/animation/curve_animation.h" +#include "core/components/focus_animation/focus_animation_component.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderFocusAnimation : public RenderNode { + DECLARE_ACE_TYPE(RenderFocusAnimation, RenderNode); + +public: + RenderFocusAnimation() : RenderNode(true) {}; + ~RenderFocusAnimation() override = default; + static RefPtr Create(); + void PerformLayout() override; + void Update(const RefPtr& component) override; + bool MarkNeedRenderSpecial() override; + void SetFocusAnimationProperties(const RRect& rrect, const Color& color, const Offset& offset, bool isIndented); + void SetFocusAnimationProperties(const RRect& rrect, const Color& color, const Offset& offset, + const Rect& clipRect); + void SetFocusAnimationProperties(const RRect& rrect, const Offset& offset); + void CancelFocusAnimation(); + void StopFocusAnimation(); + void StartFocusAnimation(); + void SetIsKeyEvent(bool isKeyEvent); + bool MouseHoverTest(const Point& parentLocalPoint) override + { + // this node is not require hover state. + return false; + } + bool IsRepaintBoundary() const override + { + return true; + } + + bool IsRoot() const + { + return isRoot_; + } + +protected: + float progress_ = 0.0f; + Dimension blurMaskRadius_ = 8.0_vp; + bool isRoot_ = false; + bool isDisplay_ = false; + bool isIndented_ = false; + bool isNeedClip_ = false; + bool isKeyEvent_ = false; + bool animationParamsSet_ = false; + Rect clipRect_; + RRect rrect_; + Offset offset_; + Size layoutSize_; + Color pathColor_; + RefPtr focusTheme_; + RefPtr> focusAnimation_; + RefPtr animator_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FOCUS_ANIMATION_RENDER_FOCUS_ANIMATION_H diff --git a/frameworks/core/components/focus_collaboration/BUILD.gn b/frameworks/core/components/focus_collaboration/BUILD.gn new file mode 100644 index 00000000..4e6e590a --- /dev/null +++ b/frameworks/core/components/focus_collaboration/BUILD.gn @@ -0,0 +1,21 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("focus_collaboration") { + sources = [ + "focus_collaboration_element.cpp", + "render_focus_collaboration.cpp", + ] +} diff --git a/frameworks/core/components/focus_collaboration/focus_collaboration_component.h b/frameworks/core/components/focus_collaboration/focus_collaboration_component.h new file mode 100644 index 00000000..89f20b0f --- /dev/null +++ b/frameworks/core/components/focus_collaboration/focus_collaboration_component.h @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FOCUS_COLLABORATION_FOCUS_COLLABORATION_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FOCUS_COLLABORATION_FOCUS_COLLABORATION_COMPONENT_H + +#include "core/components/focus_collaboration/focus_collaboration_element.h" +#include "core/components/focus_collaboration/render_focus_collaboration.h" +#include "core/pipeline/base/component_group.h" + +namespace OHOS::Ace { + +class FocusCollaborationComponent : public ComponentGroup { + DECLARE_ACE_TYPE(FocusCollaborationComponent, ComponentGroup); + +public: + explicit FocusCollaborationComponent(bool isRoot = false) : isRoot_(isRoot) {} + ~FocusCollaborationComponent() override = default; + + RefPtr CreateRenderNode() override + { + return RenderFocusCollaboration::Create(); + } + + RefPtr CreateElement() override + { + return AceType::MakeRefPtr(isRoot_); + } + +private: + bool isRoot_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FOCUS_COLLABORATION_FOCUS_COLLABORATION_COMPONENT_H diff --git a/frameworks/core/components/focus_collaboration/focus_collaboration_element.cpp b/frameworks/core/components/focus_collaboration/focus_collaboration_element.cpp new file mode 100644 index 00000000..924b53b4 --- /dev/null +++ b/frameworks/core/components/focus_collaboration/focus_collaboration_element.cpp @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/focus_collaboration/focus_collaboration_element.h" + +#include "core/components/focus_animation/focus_animation_component.h" +#include "core/components/shadow/shadow_component.h" +#include "core/pipeline/base/component_group.h" +#include "core/pipeline/base/component_group_element.h" + +namespace OHOS::Ace { + +void FocusCollaborationElement::PerformBuild() +{ + RefPtr group = AceType::DynamicCast(component_); + if (group && group->GetChildren().size() == 1) { + auto focusAnimation = AceType::MakeRefPtr(isRoot_); + auto shadow = AceType::MakeRefPtr(); + group->AppendChild(focusAnimation); + group->AppendChild(shadow); + } + ComponentGroupElement::PerformBuild(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/focus_collaboration/focus_collaboration_element.h b/frameworks/core/components/focus_collaboration/focus_collaboration_element.h new file mode 100644 index 00000000..263103c3 --- /dev/null +++ b/frameworks/core/components/focus_collaboration/focus_collaboration_element.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FOCUS_COLLABORATION_FOCUS_COLLABORATION_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FOCUS_COLLABORATION_FOCUS_COLLABORATION_ELEMENT_H + +#include "core/pipeline/base/component_group_element.h" + +namespace OHOS::Ace { + +class FocusCollaborationElement : public ComponentGroupElement { + DECLARE_ACE_TYPE(FocusCollaborationElement, ComponentGroupElement); + +public: + explicit FocusCollaborationElement(bool isRoot = false) : isRoot_(isRoot) {} + ~FocusCollaborationElement() override = default; + + void PerformBuild() override; + +private: + bool isRoot_ = false; +}; + +} + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FOCUS_COLLABORATION_FOCUS_COLLABORATION_ELEMENT_H diff --git a/frameworks/core/components/focus_collaboration/render_focus_collaboration.cpp b/frameworks/core/components/focus_collaboration/render_focus_collaboration.cpp new file mode 100644 index 00000000..196acb70 --- /dev/null +++ b/frameworks/core/components/focus_collaboration/render_focus_collaboration.cpp @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/focus_collaboration/render_focus_collaboration.h" + +namespace OHOS::Ace { + +RefPtr RenderFocusCollaboration::Create() +{ + return AceType::MakeRefPtr(); +} + +void RenderFocusCollaboration::PerformLayout() +{ + if (!GetChildren().empty()) { + for (const auto& child : GetChildren()) { + child->Layout(GetLayoutParam()); + } + SetLayoutSize(GetChildren().front()->GetLayoutSize()); + } +} + +void RenderFocusCollaboration::UpdateTouchRect() +{ + touchRect_.SetSize(GetPaintRect().GetSize()); + touchRect_.SetOffset(GetPaintRect().GetOffset()); +} + +} diff --git a/frameworks/core/components/focus_collaboration/render_focus_collaboration.h b/frameworks/core/components/focus_collaboration/render_focus_collaboration.h new file mode 100644 index 00000000..68618851 --- /dev/null +++ b/frameworks/core/components/focus_collaboration/render_focus_collaboration.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FOCUS_COLLABORATION_RENDER_FOCUS_COLLABORATION_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FOCUS_COLLABORATION_RENDER_FOCUS_COLLABORATION_H + +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderFocusCollaboration : public RenderNode { + DECLARE_ACE_TYPE(RenderFocusCollaboration, RenderNode); + +public: + static RefPtr Create(); + void Update(const RefPtr& component) override {}; + void PerformLayout() override; + void UpdateTouchRect() override; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FOCUS_COLLABORATION_RENDER_FOCUS_COLLABORATION_H diff --git a/frameworks/core/components/focusable/BUILD.gn b/frameworks/core/components/focusable/BUILD.gn new file mode 100644 index 00000000..f27c56e2 --- /dev/null +++ b/frameworks/core/components/focusable/BUILD.gn @@ -0,0 +1,18 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("focusable") { + sources = [ "focusable_element.cpp" ] +} diff --git a/frameworks/core/components/focusable/focusable_component.h b/frameworks/core/components/focusable/focusable_component.h new file mode 100644 index 00000000..82f91b4d --- /dev/null +++ b/frameworks/core/components/focusable/focusable_component.h @@ -0,0 +1,187 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FOCUSABLE_FOCUSABLE_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FOCUSABLE_FOCUSABLE_COMPONENT_H + +#include + +#include "core/components/box/box_component.h" +#include "core/components/box/render_box.h" +#include "core/components/focusable/focusable_element.h" +#include "core/event/ace_event_handler.h" +#include "core/pipeline/base/sole_child_component.h" + +namespace OHOS::Ace { + +using RequestFocusImpl = std::function; + +class FocusableController : public virtual AceType { + DECLARE_ACE_TYPE(FocusableController, AceType); + +public: + void RequestFocus(bool flag) + { + if (requestFocusImpl_) { + requestFocusImpl_(flag); + } + } + + void SetRequestFocusImpl(const RequestFocusImpl& requestFocusImpl) + { + requestFocusImpl_ = requestFocusImpl; + } + +private: + RequestFocusImpl requestFocusImpl_; +}; + +class FocusableComponent final : public SoleChildComponent { + DECLARE_ACE_TYPE(FocusableComponent, SoleChildComponent); + +public: + FocusableComponent() + { + focusableController_ = AceType::MakeRefPtr(); + } + explicit FocusableComponent(const RefPtr& child) : SoleChildComponent(child) + { + focusableController_ = AceType::MakeRefPtr(); + } + ~FocusableComponent() override = default; + + RefPtr CreateElement() override + { + return MakeRefPtr(); + } + + RefPtr CreateRenderNode() override + { + return RenderBox::Create(); + } + + const EventMarker& GetOnClickId() const + { + return onClickId_; + } + void SetOnClickId(const EventMarker& onClickId) + { + onClickId_ = onClickId; + } + + const EventMarker& GetOnFocusId() const + { + return onFocusId_; + } + void SetOnFocusId(const EventMarker& onFocusId) + { + onFocusId_ = onFocusId; + } + + const EventMarker& GetOnBlurId() const + { + return onBlurId_; + } + void SetOnBlurId(const EventMarker& onBlurId) + { + onBlurId_ = onBlurId; + } + + const EventMarker& GetOnKeyId() const + { + return onKeyId_; + } + void SetOnKeyId(const EventMarker& onKeyId) + { + onKeyId_ = onKeyId; + } + + RefPtr GetBoxStyle() const + { + return boxStyle_; + } + void SetBoxStyle(const RefPtr& boxStyle) + { + boxStyle_ = boxStyle; + } + + RefPtr GetFocusedBoxStyle() const + { + return focusedBoxStyle_; + } + void SetFocusedBoxStyle(const RefPtr& boxStyle) + { + focusedBoxStyle_ = boxStyle; + } + + bool GetAutoFocused() const + { + return autoFocused_; + } + void SetAutoFocused(bool autoFocused) + { + autoFocused_ = autoFocused; + } + bool IsFocusNode() const + { + return focusNode_; + } + void SetFocusNode(bool focusNode) + { + focusNode_ = focusNode; + } + + bool IsFocusable() const + { + return focusable_; + } + void SetFocusable(bool focusable) + { + focusable_ = focusable; + } + + bool CanShow() const + { + return show_; + } + void SetShow(bool show) + { + show_ = show; + } + + RefPtr GetFocusableController() const + { + return focusableController_; + } + +private: + EventMarker onClickId_; + EventMarker onFocusId_; + EventMarker onBlurId_; + EventMarker onKeyId_; + + RefPtr boxStyle_; + RefPtr focusedBoxStyle_; + RefPtr focusableController_; + + bool autoFocused_ { false }; + bool focusNode_ { false }; + bool focusable_ { false }; + bool show_ { true }; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FOCUSABLE_FOCUSABLE_COMPONENT_H diff --git a/frameworks/core/components/focusable/focusable_element.cpp b/frameworks/core/components/focusable/focusable_element.cpp new file mode 100644 index 00000000..1d8922d5 --- /dev/null +++ b/frameworks/core/components/focusable/focusable_element.cpp @@ -0,0 +1,157 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/focusable/focusable_element.h" + +#include "core/components/focusable/focusable_component.h" +#include "core/event/ace_event_helper.h" + +namespace OHOS::Ace { + +void FocusableElement::Update() +{ + auto focusableComponent = DynamicCast(component_); + if (!focusableComponent) { + LOGE("Can not dynamicCast to focusableComponent!"); + return; + } + + // Save isNode + isNode_ = focusableComponent->IsFocusNode(); + + // Save focusable + SetFocusable(focusableComponent->IsFocusable()); + + // Save show + SetShow(focusableComponent->CanShow()); + + // Save styles + boxStyle_ = focusableComponent->GetBoxStyle(); + focusedBoxStyle_ = focusableComponent->GetFocusedBoxStyle(); + + // Save callback id. + const auto& onClickId = focusableComponent->GetOnClickId(); + const auto& onFocusId = focusableComponent->GetOnFocusId(); + const auto& onBlurId = focusableComponent->GetOnBlurId(); + const auto& onKeyId = focusableComponent->GetOnKeyId(); + + if (!onClickId.IsEmpty()) { + SetOnClickCallback(AceAsyncEvent::Create(onClickId, context_)); + } + if (!onFocusId.IsEmpty()) { + SetOnFocusCallback(AceAsyncEvent::Create(onFocusId, context_)); + } + if (!onBlurId.IsEmpty()) { + SetOnBlurCallback(AceAsyncEvent::Create(onBlurId, context_)); + } + if (!onKeyId.IsEmpty()) { + SetOnKeyCallback( + [callback = AceSyncEvent::Create(onKeyId, context_)](const KeyEvent& event) { + bool result = false; + callback(event, result); + return result; + }); + } + + if (renderNode_) { + renderNode_->UpdateAll(focusableComponent); + } + + const auto& focusableController = focusableComponent->GetFocusableController(); + if (focusableController) { + focusableController->SetRequestFocusImpl([weak = WeakClaim(this)](bool flag) { + auto element = weak.Upgrade(); + if (!element) { + return; + } + if (flag) { + element->RequestFocus(); + } else { + element->LostSelfFocus(); + } + }); + } +} + +bool FocusableElement::IsFocusable() const +{ + return isNode_ ? FocusNode::IsFocusable() : FocusGroup::IsFocusable(); +} + +bool FocusableElement::OnKeyEvent(const KeyEvent& keyEvent) +{ + return isNode_ ? FocusNode::OnKeyEvent(keyEvent) : FocusGroup::OnKeyEvent(keyEvent); +} + +void FocusableElement::OnClick() +{ + FocusNode::OnClick(); +} + +void FocusableElement::HandleFocus() +{ + if (isNode_ && renderNode_) { + renderNode_->MoveWhenOutOfViewPort(false); + } + FocusNode::HandleFocus(); +} + +void FocusableElement::OnFocus() +{ + if (isNode_) { + if (renderNode_ != nullptr) { + renderNode_->Update(focusedBoxStyle_); + renderNode_->ChangeStatus(RenderStatus::FOCUS); + } + FocusNode::OnFocus(); + } else { + FocusGroup::OnFocus(); + } +} + +void FocusableElement::OnBlur() +{ + if (isNode_) { + if (renderNode_ != nullptr) { + renderNode_->Update(boxStyle_); + renderNode_->ChangeStatus(RenderStatus::BLUR); + } + FocusNode::OnBlur(); + } else { + FocusGroup::OnBlur(); + } +} + +bool FocusableElement::RequestNextFocus(bool vertical, bool reverse, const Rect& rect) +{ + return false; +} + +bool FocusableElement::IsChild() const +{ + return isNode_; +} + +void FocusableElement::DumpFocusTree(int32_t depth) +{ + isNode_ ? FocusNode::DumpFocusTree(depth) : FocusGroup::DumpFocusTree(depth); +} + +bool FocusableElement::AcceptFocusByRectOfLastFocus(const Rect& rect) +{ + return isNode_ ? FocusNode::AcceptFocusByRectOfLastFocus(rect) : FocusGroup::AcceptFocusByRectOfLastFocus(rect); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/focusable/focusable_element.h b/frameworks/core/components/focusable/focusable_element.h new file mode 100644 index 00000000..f27e19f2 --- /dev/null +++ b/frameworks/core/components/focusable/focusable_element.h @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FOCUSABLE_FOCUSABLE_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FOCUSABLE_FOCUSABLE_ELEMENT_H + +#include "core/components/box/box_component.h" +#include "core/focus/focus_node.h" +#include "core/pipeline/base/sole_child_element.h" + +namespace OHOS::Ace { + +class FocusableElement final : public SoleChildElement, public FocusGroup { + DECLARE_ACE_TYPE(FocusableElement, SoleChildElement, FocusGroup); + +public: + void Update() override; + + bool RequestNextFocus(bool vertical, bool reverse, const Rect& rect) override; + bool IsChild() const override; + bool IsFocusable() const override; + bool OnKeyEvent(const KeyEvent& keyEvent) override; + bool AcceptFocusByRectOfLastFocus(const Rect& rect) override; + + void DumpFocusTree(int32_t depth) override; + void OnClick() override; + void OnFocus() override; + void OnBlur() override; + void HandleFocus() override; + +protected: + virtual RefPtr GetCachedRenderNode() override + { + auto context = GetContext().Upgrade(); + if (context) { + return context->GetRenderFactory()->GetRenderBoxFactory()->Get(); + } + return nullptr; + } + +private: + // Deprecated + RefPtr boxStyle_; + RefPtr focusedBoxStyle_; + bool isNode_ { false }; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FOCUSABLE_FOCUSABLE_ELEMENT_H diff --git a/frameworks/core/components/font/BUILD.gn b/frameworks/core/components/font/BUILD.gn new file mode 100644 index 00000000..b2e99ac8 --- /dev/null +++ b/frameworks/core/components/font/BUILD.gn @@ -0,0 +1,23 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("font") { + sources = [ + "constants_converter.cpp", + "flutter_font_collection.cpp", + "flutter_font_loader.cpp", + "flutter_font_manager.cpp", + ] +} diff --git a/frameworks/core/components/font/constants_converter.cpp b/frameworks/core/components/font/constants_converter.cpp new file mode 100644 index 00000000..e41318fd --- /dev/null +++ b/frameworks/core/components/font/constants_converter.cpp @@ -0,0 +1,243 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "constants_converter.h" + +#include "flutter/third_party/txt/src/txt/font_style.h" +#include "flutter/third_party/txt/src/txt/font_weight.h" +#include "flutter/third_party/txt/src/txt/paragraph_style.h" +#include "flutter/third_party/txt/src/txt/text_decoration.h" + +#include "base/i18n/localization.h" +#include "core/components/common/properties/text_style.h" + +namespace OHOS::Ace::Constants { + +txt::FontWeight ConvertTxtFontWeight(FontWeight fontWeight) +{ + txt::FontWeight convertValue; + switch (fontWeight) { + case FontWeight::W100: + case FontWeight::LIGHTER: + convertValue = txt::FontWeight::w100; + break; + case FontWeight::W200: + convertValue = txt::FontWeight::w200; + break; + case FontWeight::W300: + convertValue = txt::FontWeight::w300; + break; + case FontWeight::W400: + case FontWeight::NORMAL: + convertValue = txt::FontWeight::w400; + break; + case FontWeight::W500: + convertValue = txt::FontWeight::w500; + break; + case FontWeight::W600: + convertValue = txt::FontWeight::w600; + break; + case FontWeight::W700: + case FontWeight::BOLD: + convertValue = txt::FontWeight::w700; + break; + case FontWeight::W800: + convertValue = txt::FontWeight::w800; + break; + case FontWeight::W900: + case FontWeight::BOLDER: + convertValue = txt::FontWeight::w900; + break; + default: + LOGW("FontWeight setting error! Now using default FontWeight."); + convertValue = txt::FontWeight::w400; + break; + } + return convertValue; +} + +txt::FontStyle ConvertTxtFontStyle(FontStyle fontStyle) +{ + txt::FontStyle convertValue; + switch (fontStyle) { + case FontStyle::NORMAL: + convertValue = txt::FontStyle::normal; + break; + case FontStyle::ITALIC: + convertValue = txt::FontStyle::italic; + break; + default: + LOGW("FontStyle setting error! Now using default FontStyle"); + convertValue = txt::FontStyle::normal; + break; + } + return convertValue; +} + +txt::TextBaseline ConvertTxtTextBaseline(TextBaseline textBaseline) +{ + txt::TextBaseline convertValue; + switch (textBaseline) { + case TextBaseline::ALPHABETIC: + convertValue = txt::TextBaseline::kAlphabetic; + break; + case TextBaseline::IDEOGRAPHIC: + convertValue = txt::TextBaseline::kIdeographic; + break; + default: + LOGW("TextBaseline setting error! Now using default TextBaseline"); + convertValue = txt::TextBaseline::kAlphabetic; + break; + } + return convertValue; +} + +txt::TextAlign ConvertTxtTextAlign(TextAlign textAlign) +{ + txt::TextAlign convertValue; + switch (textAlign) { + case TextAlign::LEFT: + convertValue = txt::TextAlign::left; + break; + case TextAlign::RIGHT: + convertValue = txt::TextAlign::right; + break; + case TextAlign::CENTER: + convertValue = txt::TextAlign::center; + break; + case TextAlign::JUSTIFY: + convertValue = txt::TextAlign::justify; + break; + case TextAlign::START: + convertValue = txt::TextAlign::start; + break; + case TextAlign::END: + convertValue = txt::TextAlign::end; + break; + default: + LOGW("TextAlign setting error! Now using default TextAlign"); + convertValue = txt::TextAlign::start; + break; + } + return convertValue; +} + +txt::TextDirection ConvertTxtTextDirection(TextDirection textDirection) +{ + txt::TextDirection convertValue; + switch (textDirection) { + case TextDirection::RTL: + convertValue = txt::TextDirection::rtl; + break; + case TextDirection::LTR: + convertValue = txt::TextDirection::ltr; + break; + default: + LOGW("TextDirection setting error! Now using default TextDirection"); + convertValue = txt::TextDirection::ltr; + break; + } + return convertValue; +} + +SkColor ConvertSkColor(Color color) +{ + return color.GetValue(); +} + +txt::TextDecoration ConvertTxtTextDecoration(TextDecoration textDecoration) +{ + txt::TextDecoration convertValue = txt::TextDecoration::kNone; + switch (textDecoration) { + case TextDecoration::NONE: + convertValue = txt::TextDecoration::kNone; + break; + case TextDecoration::UNDERLINE: + convertValue = txt::TextDecoration::kUnderline; + break; + case TextDecoration::OVERLINE: + convertValue = txt::TextDecoration::kOverline; + break; + case TextDecoration::LINE_THROUGH: + convertValue = txt::TextDecoration::kLineThrough; + break; + default: + LOGW("TextDecoration setting error! Now using default TextDecoration"); + break; + } + return convertValue; +} + +void ConvertTxtStyle(const TextStyle& textStyle, const WeakPtr& context, txt::TextStyle& txtStyle) +{ + txtStyle.color = ConvertSkColor(textStyle.GetTextColor()); + txtStyle.font_weight = ConvertTxtFontWeight(textStyle.GetFontWeight()); + // Font size must be px when transferring to txt::TextStyle + auto pipelineContext = context.Upgrade(); + if (pipelineContext) { + txtStyle.font_size = pipelineContext->NormalizeToPx(textStyle.GetFontSize()); + if (textStyle.IsAllowScale() || textStyle.GetFontSize().Unit() == DimensionUnit::FP) { + txtStyle.font_size = + pipelineContext->NormalizeToPx(textStyle.GetFontSize() * pipelineContext->GetFontScale()); + } + } else { + txtStyle.font_size = textStyle.GetFontSize().Value(); + } + txtStyle.font_style = ConvertTxtFontStyle(textStyle.GetFontStyle()); + txtStyle.word_spacing = static_cast(textStyle.GetWordSpacing()); + txtStyle.letter_spacing = textStyle.GetLetterSpacing(); + txtStyle.text_baseline = ConvertTxtTextBaseline(textStyle.GetTextBaseline()); + txtStyle.decoration = ConvertTxtTextDecoration(textStyle.GetTextDecoration()); + txtStyle.font_families = textStyle.GetFontFamilies(); + txtStyle.locale = Localization::GetInstance()->GetFontLocale(); + + txt::TextShadow txtShadow; + const auto& spanShadow = textStyle.GetShadow(); + txtShadow.color = spanShadow.GetColor().GetValue(); + txtShadow.offset.fX = static_cast(spanShadow.GetOffset().GetX()); + txtShadow.offset.fY = static_cast(spanShadow.GetOffset().GetY()); + txtShadow.blur_radius = spanShadow.GetBlurRadius(); + txtStyle.text_shadows.emplace_back(txtShadow); + + if (textStyle.GetLineHeight().Unit() == DimensionUnit::PERCENT) { + txtStyle.has_height_override = true; + txtStyle.height = textStyle.GetLineHeight().Value(); + } else { + double fontSize = txtStyle.font_size; + double lineHeight = textStyle.GetLineHeight().Value(); + if (pipelineContext) { + lineHeight = pipelineContext->NormalizeToPx(textStyle.GetLineHeight()); + } + txtStyle.has_height_override = textStyle.HasHeightOverride(); + if (!NearEqual(lineHeight, fontSize) && (lineHeight > 0.0) && (!NearZero(fontSize))) { + txtStyle.height = lineHeight / fontSize; + } else { + LOGD("use default text style height value."); + txtStyle.height = 1; + } + } +} + +Rect ConvertSkRect(SkRect skRect) +{ + Rect result; + result.SetLeft(skRect.fLeft); + result.SetTop(skRect.fTop); + result.SetWidth(skRect.width()); + result.SetHeight(skRect.height()); + return result; +} + +} // namespace OHOS::Ace::Constants diff --git a/frameworks/core/components/font/constants_converter.h b/frameworks/core/components/font/constants_converter.h new file mode 100644 index 00000000..32558171 --- /dev/null +++ b/frameworks/core/components/font/constants_converter.h @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FONT_CONSTANTS_CONVERTER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FONT_CONSTANTS_CONVERTER_H + +#include "flutter/third_party/txt/src/txt/text_baseline.h" +#include "flutter/third_party/txt/src/txt/text_decoration.h" +#include "flutter/third_party/txt/src/txt/text_style.h" +#include "third_party/skia/include/core/SkColor.h" + +#include "core/components/common/properties/text_style.h" +#include "core/pipeline/pipeline_context.h" + +namespace txt { +enum class FontWeight; +enum class FontStyle; +enum class TextAlign; +enum class TextDirection; +} // namespace txt + +namespace OHOS::Ace { + +enum class FontWeight; +enum class FontStyle; +enum class TextBaseline; +enum class TextAlign; +enum class TextDirection; +enum class TextDecoration; +class Color; + +namespace Constants { + +txt::FontWeight ConvertTxtFontWeight(FontWeight fontWeight); + +txt::FontStyle ConvertTxtFontStyle(FontStyle fontStyle); + +txt::TextBaseline ConvertTxtTextBaseline(TextBaseline textBaseline); + +txt::TextAlign ConvertTxtTextAlign(TextAlign textAlign); + +txt::TextDirection ConvertTxtTextDirection(TextDirection textDirection); + +SkColor ConvertSkColor(Color color); + +txt::TextDecoration ConvertTxtTextDecoration(TextDecoration textDecoration); + +void ConvertTxtStyle(const TextStyle& textStyle, const WeakPtr& context, txt::TextStyle& txtStyle); + +Rect ConvertSkRect(SkRect skRect); + +} // namespace Constants + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FONT_CONSTANTS_CONVERTER_H diff --git a/frameworks/core/components/font/flutter_font_collection.cpp b/frameworks/core/components/font/flutter_font_collection.cpp new file mode 100644 index 00000000..9b3660be --- /dev/null +++ b/frameworks/core/components/font/flutter_font_collection.cpp @@ -0,0 +1,155 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/font/flutter_font_collection.h" + +#include "flutter/lib/ui/ui_dart_state.h" +#include "flutter/third_party/txt/src/minikin/FontFamily.h" +#include "flutter/third_party/txt/src/minikin/FontLanguageListCache.h" + +#include "base/i18n/localization.h" +#include "base/log/log.h" +#include "base/utils/system_properties.h" +#include "base/utils/utils.h" + +namespace OHOS::Ace { + +FlutterFontCollection FlutterFontCollection::instance; + +std::shared_ptr FlutterFontCollection::GetFontCollection() +{ + if (!isUseFlutterEngine) { + if (!isCompleted_) { + isCompleted_ = future_.get(); + } + return fontCollection_->GetFontCollection(); + } + + auto* windowClient = GetFlutterEngineWindowClient(); + if (windowClient == nullptr) { + return nullptr; + } + auto& fontCollection = windowClient->GetFontCollection(); + return fontCollection.GetFontCollection(); +} + +flutter::WindowClient* FlutterFontCollection::GetFlutterEngineWindowClient() +{ + if (!flutter::UIDartState::Current()) { + LOGE("uiDartState is null"); + return nullptr; + } + + auto* window = flutter::UIDartState::Current()->window(); + if (window == nullptr) { + LOGW("UpdateParagraph: window or client is null"); + return nullptr; + } + return window->client(); +} + +void FlutterFontCollection::LoadFontFromList(const uint8_t* fontData, size_t length, std::string familyName) +{ + auto it = std::find(families_.begin(), families_.end(), familyName); + if (it != families_.end()) { + return; + } + + families_.emplace_back(familyName); + + if (!isUseFlutterEngine) { + if (!isCompleted_) { + isCompleted_ = future_.get(); + } + fontCollection_->LoadFontFromList(fontData, length, familyName); + return; + } + + auto* windowClient = GetFlutterEngineWindowClient(); + if (windowClient == nullptr) { + return; + } + auto& fontCollection = windowClient->GetFontCollection(); + fontCollection.LoadFontFromList(fontData, length, familyName); +} + +void FlutterFontCollection::CreateFontCollection(const fml::RefPtr& ioTaskRunner) +{ + if (isInit_ || !ioTaskRunner) { + return; + } + isInit_ = true; + isUseFlutterEngine = false; + + ioTaskRunner->PostTask([&fontCollection = fontCollection_, &promise = promise_]() mutable { + fontCollection = std::make_unique(); + if (fontCollection->GetFontCollection()) { + // Initialize weight scale + float fontWeightScale = SystemProperties::GetFontWeightScale(); + if (GreatNotEqual(fontWeightScale, 0.0)) { + fontCollection->GetFontCollection()->VaryFontCollectionWithFontWeightScale(fontWeightScale); + } + + auto locale = Localization::GetInstance()->GetFontLocale(); + uint32_t langListId = locale.empty() ? + minikin::FontLanguageListCache::kEmptyListId + : minikin::FontStyle::registerLanguageList(locale); + const minikin::FontLanguages& langs = minikin::FontLanguageListCache::getById(langListId); + locale = langs.size() ? langs[0].getString() : ""; + // 0x4e2d is unicode for '中'. + fontCollection->GetFontCollection()->MatchFallbackFont(0x4e2d, locale); + fontCollection->GetFontCollection()->GetMinikinFontCollectionForFamilies({ "sans-serif" }, locale); + } + promise.set_value(true); + }); +} + +FlutterFontCollection& FlutterFontCollection::GetInstance() +{ + return instance; +} + +void FlutterFontCollection::VaryFontCollectionWithFontWeightScale(float fontWeightScale) +{ + if (LessOrEqual(fontWeightScale, 0.0)) { + return; + } + + if (!isUseFlutterEngine) { + if (!isCompleted_) { + return; + } + if (fontCollection_ && fontCollection_->GetFontCollection()) { + fontCollection_->GetFontCollection()->VaryFontCollectionWithFontWeightScale(fontWeightScale); + } + return; + } + + if (!flutter::UIDartState::Current()) { + LOGE("uiDartState is null"); + return; + } + + auto* window = flutter::UIDartState::Current()->window(); + if (window == nullptr || window->client() == nullptr) { + LOGW("UpdateParagraph: window or client is null"); + return; + } + + auto& fontCollection = window->client()->GetFontCollection(); + fontCollection.GetFontCollection()->VaryFontCollectionWithFontWeightScale(fontWeightScale); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/font/flutter_font_collection.h b/frameworks/core/components/font/flutter_font_collection.h new file mode 100644 index 00000000..eb4a4f63 --- /dev/null +++ b/frameworks/core/components/font/flutter_font_collection.h @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FONT_FLUTTER_FONT_COLLECTION_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FONT_FLUTTER_FONT_COLLECTION_H + +#include + +#include "flutter/common/task_runners.h" +#include "flutter/lib/ui/text/font_collection.h" +#include "flutter/lib/ui/window/window.h" + +#include "base/utils/macros.h" +#include "base/utils/noncopyable.h" + +namespace OHOS::Ace { + +class ACE_EXPORT FlutterFontCollection : public NonCopyable { +public: + static FlutterFontCollection& GetInstance(); + + std::shared_ptr GetFontCollection(); + + void LoadFontFromList(const uint8_t* fontData, size_t length, std::string familyName); + + void CreateFontCollection(const fml::RefPtr& ioTaskRunner); + + void VaryFontCollectionWithFontWeightScale(float fontWeightScale); + +private: + flutter::WindowClient* GetFlutterEngineWindowClient(); + + std::unique_ptr fontCollection_; + std::vector families_; + + std::promise promise_; + std::shared_future future_ = promise_.get_future(); + bool isInit_ = false; + bool isCompleted_ = false; + bool isUseFlutterEngine = true; + + static FlutterFontCollection instance; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FONT_FLUTTER_FONT_COLLECTION_H diff --git a/frameworks/core/components/font/flutter_font_loader.cpp b/frameworks/core/components/font/flutter_font_loader.cpp new file mode 100644 index 00000000..c66f566a --- /dev/null +++ b/frameworks/core/components/font/flutter_font_loader.cpp @@ -0,0 +1,134 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/font/flutter_font_loader.h" + +#include "flutter/lib/ui/text/font_collection.h" + +#include "base/network/download_manager.h" +#include "core/components/font/flutter_font_collection.h" +#include "core/pipeline/base/flutter_render_context.h" + +namespace OHOS::Ace { + +const char FONT_SRC_NETWORK[] = "http"; + +FlutterFontLoader::FlutterFontLoader(const std::string& familyName, const std::string& familySrc) + : FontLoader(familyName, familySrc) {}; + +RefPtr FontLoader::Create(const std::string& familyName, const std::string& familySrc) +{ + return AceType::MakeRefPtr(familyName, familySrc); +} + +void FlutterFontLoader::AddFont(const RefPtr& context) +{ + if (familySrc_.empty()) { + return; + } + + if (familySrc_.substr(0, 4) == FONT_SRC_NETWORK) { + // Get font from NetWork. + LoadFromNetwork(context); + } else { + // Get font from asset. + LoadFromAsset(context); + } +} + +void FlutterFontLoader::LoadFromNetwork(const OHOS::Ace::RefPtr& context) +{ + context->GetTaskExecutor()->PostTask( + [weak = AceType::WeakClaim(this), context] { + auto fontLoader = weak.Upgrade(); + if (!fontLoader || !context) { + return; + } + + std::vector fontData; + if (!DownloadManager::GetInstance().Download(fontLoader->familySrc_, fontData) || fontData.empty()) { + return; + } + + context->GetTaskExecutor()->PostTask( + [fontData, fontLoader] { + // Load font. + FlutterFontCollection::GetInstance().LoadFontFromList( + fontData.data(), fontData.size(), fontLoader->familyName_); + fontLoader->isLoaded_ = true; + + // When font is already loaded, notify all which used this font. + for (const auto& [node, callback] : fontLoader->callbacks_) { + if (callback) { + callback(); + } + } + fontLoader->callbacks_.clear(); + if (fontLoader->variationChanged_) { + fontLoader->variationChanged_(); + } + }, + TaskExecutor::TaskType::UI); + }, + TaskExecutor::TaskType::BACKGROUND); +} + +void FlutterFontLoader::LoadFromAsset(const OHOS::Ace::RefPtr& context) +{ + context->GetTaskExecutor()->PostTask( + [fontLoader = AceType::Claim(this), context] { + if (!fontLoader || !context) { + return; + } + auto assetManager = context->GetAssetManager(); + if (!assetManager) { + LOGE("No asset manager!"); + return; + } + std::string assetSrc(fontLoader->familySrc_); + if (assetSrc[0] == '/') { + assetSrc = assetSrc.substr(1); // get the asset src without '/'. + } else if (assetSrc[0] == '.' && assetSrc.size() > 2 && assetSrc[1] == '/') { + assetSrc = assetSrc.substr(2); // get the asset src without './'. + } + auto assetData = assetManager->GetAsset(assetSrc); + if (!assetData) { + LOGE("No asset data!"); + return; + } + + context->GetTaskExecutor()->PostTask( + [assetData, fontLoader] { + // Load font. + FlutterFontCollection::GetInstance().LoadFontFromList( + assetData->GetData(), assetData->GetSize(), fontLoader->familyName_); + fontLoader->isLoaded_ = true; + + for (const auto& [node, callback] : fontLoader->callbacks_) { + if (callback) { + callback(); + } + } + fontLoader->callbacks_.clear(); + if (fontLoader->variationChanged_) { + fontLoader->variationChanged_(); + } + }, + TaskExecutor::TaskType::UI); + }, + TaskExecutor::TaskType::BACKGROUND); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/font/flutter_font_loader.h b/frameworks/core/components/font/flutter_font_loader.h new file mode 100644 index 00000000..43715a5d --- /dev/null +++ b/frameworks/core/components/font/flutter_font_loader.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FONT_FLUTTER_FONT_LOADER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FONT_FLUTTER_FONT_LOADER_H + +#include "core/common/font_loader.h" + +namespace OHOS::Ace { + +extern const char FONT_SRC_NETWORK[]; + +class FlutterFontLoader : public FontLoader { + DECLARE_ACE_TYPE(FlutterFontLoader, FontLoader); + +public: + FlutterFontLoader(const std::string& familyName, const std::string& familySrc); + ~FlutterFontLoader() override = default; + + void AddFont(const RefPtr& context) override; + +private: + void LoadFromNetwork(const RefPtr& context); + void LoadFromAsset(const RefPtr& context); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FONT_FLUTTER_FONT_LOADER_H diff --git a/frameworks/core/components/font/flutter_font_manager.cpp b/frameworks/core/components/font/flutter_font_manager.cpp new file mode 100644 index 00000000..9c8a17e4 --- /dev/null +++ b/frameworks/core/components/font/flutter_font_manager.cpp @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/font/flutter_font_manager.h" + +#include "core/components/font/flutter_font_collection.h" + +namespace OHOS::Ace { + +RefPtr FontManager::Create() +{ + return AceType::MakeRefPtr(); +} + +void FlutterFontManager::VaryFontCollectionWithFontWeightScale() +{ + if (GreatNotEqual(fontWeightScale_, 0.0)) { + FlutterFontCollection::GetInstance().VaryFontCollectionWithFontWeightScale(fontWeightScale_); + NotifyVariationNodes(); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/font/flutter_font_manager.h b/frameworks/core/components/font/flutter_font_manager.h new file mode 100644 index 00000000..86df94a2 --- /dev/null +++ b/frameworks/core/components/font/flutter_font_manager.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FONT_FLUTTER_FONT_MANAGER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FONT_FLUTTER_FONT_MANAGER_H + +#include "core/common/font_manager.h" + +namespace OHOS::Ace { + +class FlutterFontManager : public FontManager { +DECLARE_ACE_TYPE(FlutterFontManager, FontManager); + +public: + FlutterFontManager() = default; + ~FlutterFontManager() override = default; + + void VaryFontCollectionWithFontWeightScale() override; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FONT_FLUTTER_FONT_MANAGER_H diff --git a/frameworks/core/components/foreach/foreach_component.h b/frameworks/core/components/foreach/foreach_component.h new file mode 100644 index 00000000..7f1a91bc --- /dev/null +++ b/frameworks/core/components/foreach/foreach_component.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FOREACH_FOREACH_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FOREACH_FOREACH_COMPONENT_H + +#include "core/components/wrap/render_wrap.h" +#include "core/pipeline/base/component_group.h" + +namespace OHOS::Ace { + +class ForEachComponent : public ComponentGroup { + DECLARE_ACE_TYPE(ForEachComponent, ComponentGroup); + +public: + explicit ForEachComponent(const std::list>& children) : ComponentGroup(children) {} + ~ForEachComponent() override = default; + + RefPtr CreateRenderNode() override + { + return RenderWrap::Create(); + } +}; + +} +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_FOREACH_FOREACH_COMPONENT_H diff --git a/frameworks/core/components/gesture_listener/BUILD.gn b/frameworks/core/components/gesture_listener/BUILD.gn new file mode 100644 index 00000000..5c629f51 --- /dev/null +++ b/frameworks/core/components/gesture_listener/BUILD.gn @@ -0,0 +1,18 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("gesture_listener") { + sources = [ "render_gesture_listener.cpp" ] +} diff --git a/frameworks/core/components/gesture_listener/gesture_listener_component.h b/frameworks/core/components/gesture_listener/gesture_listener_component.h new file mode 100644 index 00000000..0978886e --- /dev/null +++ b/frameworks/core/components/gesture_listener/gesture_listener_component.h @@ -0,0 +1,200 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GESTURE_LISTENER_GESTURE_LISTENER_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GESTURE_LISTENER_GESTURE_LISTENER_COMPONENT_H + +#include "core/components/gesture_listener/gesture_listener_element.h" +#include "core/components/gesture_listener/render_gesture_listener.h" +#include "core/pipeline/base/sole_child_component.h" + +namespace OHOS::Ace { + +class GestureListenerComponent final : public SoleChildComponent { + DECLARE_ACE_TYPE(GestureListenerComponent, SoleChildComponent); + +public: + GestureListenerComponent() = default; + explicit GestureListenerComponent(const RefPtr& child) : SoleChildComponent(child) {} + ~GestureListenerComponent() override = default; + + RefPtr CreateElement() override + { + return MakeRefPtr(); + } + + RefPtr CreateRenderNode() override + { + return RenderGestureListener::Create(); + } + + const EventMarker& GetOnClickId() const + { + return onClickId_; + } + void SetOnClickId(const EventMarker& onClickId) + { + onClickId_ = onClickId; + } + + const EventMarker& GetOnLongPressId() const + { + return onLongPressId_; + } + void SetOnLongPressId(const EventMarker& onLongPressId) + { + onLongPressId_ = onLongPressId; + } + + const EventMarker& GetOnHorizontalDragStartId() const + { + return onHorizontalDragStartId_; + } + void SetOnHorizontalDragStartId(const EventMarker& onHorizontalDragStartId) + { + onHorizontalDragStartId_ = onHorizontalDragStartId; + } + + const EventMarker& GetOnHorizontalDragUpdateId() const + { + return onHorizontalDragUpdateId_; + } + void SetOnHorizontalDragUpdateId(const EventMarker& onHorizontalDragUpdateId) + { + onHorizontalDragUpdateId_ = onHorizontalDragUpdateId; + } + + const EventMarker& GetOnHorizontalDragEndId() const + { + return onHorizontalDragEndId_; + } + void SetOnHorizontalDragEndId(const EventMarker& onHorizontalDragEndId) + { + onHorizontalDragEndId_ = onHorizontalDragEndId; + } + + const EventMarker& GetOnHorizontalDragCancelId() const + { + return onHorizontalDragCancelId_; + } + void SetOnHorizontalDragCancelId(const EventMarker& onHorizontalDragCancelId) + { + onHorizontalDragCancelId_ = onHorizontalDragCancelId; + } + + const EventMarker& GetOnVerticalDragStartId() const + { + return onVerticalDragStartId_; + } + void SetOnVerticalDragStartId(const EventMarker& onVerticalDragStartId) + { + onVerticalDragStartId_ = onVerticalDragStartId; + } + + const EventMarker& GetOnVerticalDragUpdateId() const + { + return onVerticalDragUpdateId_; + } + void SetOnVerticalDragUpdateId(const EventMarker& onVerticalDragUpdateId) + { + onVerticalDragUpdateId_ = onVerticalDragUpdateId; + } + + const EventMarker& GetOnVerticalDragEndId() const + { + return onVerticalDragEndId_; + } + void SetOnVerticalDragEndId(const EventMarker& onVerticalDragEndId) + { + onVerticalDragEndId_ = onVerticalDragEndId; + } + + const EventMarker& GetOnVerticalDragCancelId() const + { + return onVerticalDragCancelId_; + } + void SetOnVerticalDragCancelId(const EventMarker& onVerticalDragCancelId) + { + onVerticalDragCancelId_ = onVerticalDragCancelId; + } + + const EventMarker& GetOnFreeDragStartId() const + { + return onFreeDragStartId_; + } + void SetOnFreeDragStartId(const EventMarker& onFreeDragStartId) + { + onFreeDragStartId_ = onFreeDragStartId; + } + + const EventMarker& GetOnFreeDragUpdateId() const + { + return onFreeDragUpdateId_; + } + void SetOnFreeDragUpdateId(const EventMarker& onFreeDragUpdateId) + { + onFreeDragUpdateId_ = onFreeDragUpdateId; + } + + const EventMarker& GetOnFreeDragEndId() const + { + return onFreeDragEndId_; + } + void SetOnFreeDragEndId(const EventMarker& onFreeDragEndId) + { + onFreeDragEndId_ = onFreeDragEndId; + } + + const EventMarker& GetOnFreeDragCancelId() const + { + return onFreeDragCancelId_; + } + void SetOnFreeDragCancelId(const EventMarker& onFreeDragCancelId) + { + onFreeDragCancelId_ = onFreeDragCancelId; + } + + bool IsVisible() const + { + return isVisible_; + } + + void SetIsVisible(bool isVisible) + { + isVisible_ = isVisible; + } + +private: + EventMarker onClickId_; + EventMarker onLongPressId_; + EventMarker onHorizontalDragStartId_; + EventMarker onHorizontalDragUpdateId_; + EventMarker onHorizontalDragEndId_; + EventMarker onHorizontalDragCancelId_; + EventMarker onVerticalDragStartId_; + EventMarker onVerticalDragUpdateId_; + EventMarker onVerticalDragEndId_; + EventMarker onVerticalDragCancelId_; + EventMarker onFreeDragStartId_; + EventMarker onFreeDragUpdateId_; + EventMarker onFreeDragEndId_; + EventMarker onFreeDragCancelId_; + + bool isVisible_ = true; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GESTURE_LISTENER_GESTURE_LISTENER_COMPONENT_H diff --git a/frameworks/core/components/gesture_listener/gesture_listener_element.h b/frameworks/core/components/gesture_listener/gesture_listener_element.h new file mode 100644 index 00000000..bd385abf --- /dev/null +++ b/frameworks/core/components/gesture_listener/gesture_listener_element.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GESTURE_LISTENER_GESTURE_LISTENER_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GESTURE_LISTENER_GESTURE_LISTENER_ELEMENT_H + +#include "core/pipeline/base/sole_child_element.h" + +namespace OHOS::Ace { + +class GestureListenerElement final : public SoleChildElement { + DECLARE_ACE_TYPE(GestureListenerElement, SoleChildElement); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GESTURE_LISTENER_GESTURE_LISTENER_ELEMENT_H diff --git a/frameworks/core/components/gesture_listener/render_gesture_listener.cpp b/frameworks/core/components/gesture_listener/render_gesture_listener.cpp new file mode 100644 index 00000000..7543d8af --- /dev/null +++ b/frameworks/core/components/gesture_listener/render_gesture_listener.cpp @@ -0,0 +1,151 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/gesture_listener/render_gesture_listener.h" + +#include "core/components/box/render_box.h" +#include "core/components/gesture_listener/gesture_listener_component.h" +#include "core/event/ace_event_helper.h" + +namespace OHOS::Ace { + +#define SET_DRAG_CALLBACK(recognizer, type, component) \ + do { \ + auto& onDragStartId = component->GetOn##type##StartId(); \ + auto& onDragUpdateId = component->GetOn##type##UpdateId(); \ + auto& onDragEndId = component->GetOn##type##EndId(); \ + auto& onDragCancelId = component->GetOn##type##CancelId(); \ + if (!(onDragStartId.IsEmpty() && onDragUpdateId.IsEmpty() && onDragEndId.IsEmpty() && \ + onDragCancelId.IsEmpty())) { \ + LOGD("RenderGestureListener: add %{public}s recognizer", #type); \ + recognizer = AceType::MakeRefPtr(); \ + recognizer->SetOnDragStart(AceAsyncEvent::Create(onDragStartId, context_)); \ + recognizer->SetOnDragUpdate(AceAsyncEvent::Create(onDragUpdateId, context_)); \ + recognizer->SetOnDragEnd(AceAsyncEvent::Create(onDragEndId, context_)); \ + recognizer->SetOnDragCancel(AceAsyncEvent::Create(onDragCancelId, context_)); \ + } \ + } while (0) + +RefPtr RenderGestureListener::Create() +{ + return AceType::MakeRefPtr(); +} + +void RenderGestureListener::Update(const RefPtr& component) +{ + RenderProxy::Update(component); + auto gestureComponent = AceType::DynamicCast(component); + ACE_DCHECK(gestureComponent); + SetOnClickCallback(gestureComponent); + SetOnLongPressCallback(gestureComponent); + isVisible_ = gestureComponent->IsVisible(); + SET_DRAG_CALLBACK(freeDragRecognizer_, FreeDrag, gestureComponent); + if (!freeDragRecognizer_) { + // Horizontal and vertical gestures can only be enabled in the absence of free gesture. + LOGD("No free drag, update corresponding horizontal and vertical drag!"); + SET_DRAG_CALLBACK(horizontalDragRecognizer_, HorizontalDrag, gestureComponent); + SET_DRAG_CALLBACK(verticalDragRecognizer_, VerticalDrag, gestureComponent); + } +} + +bool RenderGestureListener::GetVisible() const +{ + return RenderNode::GetVisible() && isVisible_; +} + +void RenderGestureListener::UpdateTouchRect() +{ + RenderNode::UpdateTouchRect(); + if (!GetChildren().empty()) { + auto box = AceType::DynamicCast(GetChildren().front()); + // For exclude the margin area from touch area and the margin must not be less than zero. + if (box) { + touchRect_.SetOffset(box->GetTouchArea().GetOffset() + GetPaintRect().GetOffset()); + touchRect_.SetSize(box->GetTouchArea().GetSize()); + } + } +} + +void RenderGestureListener::OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) +{ + if (clickRecognizer_) { + clickRecognizer_->SetCoordinateOffset(coordinateOffset); + result.emplace_back(clickRecognizer_); + } + if (longPressRecognizer_) { + longPressRecognizer_->SetCoordinateOffset(coordinateOffset); + longPressRecognizer_->SetTouchRestrict(touchRestrict); + result.emplace_back(longPressRecognizer_); + } + if (freeDragRecognizer_) { + freeDragRecognizer_->SetCoordinateOffset(coordinateOffset); + result.emplace_back(freeDragRecognizer_); + return; + } + // Horizontal and vertical gestures can only be enabled in the absence of free gesture. + if (verticalDragRecognizer_) { + verticalDragRecognizer_->SetCoordinateOffset(coordinateOffset); + result.emplace_back(verticalDragRecognizer_); + } + if (horizontalDragRecognizer_) { + horizontalDragRecognizer_->SetCoordinateOffset(coordinateOffset); + result.emplace_back(horizontalDragRecognizer_); + } +} + +void RenderGestureListener::SetOnClickCallback(const RefPtr& component) +{ + const auto& onClickId = component->GetOnClickId(); + if (onClickId.IsEmpty()) { + return; + } + SetOnClickCallback(AceAsyncEvent::Create(onClickId, context_)); +} + +void RenderGestureListener::SetOnLongPressCallback(const RefPtr& component) +{ + const auto& onLongPressId = component->GetOnLongPressId(); + if (onLongPressId.IsEmpty()) { + return; + } + SetOnLongPressCallback(AceAsyncEvent::Create(onLongPressId, context_)); +} + +void RenderGestureListener::SetOnClickCallback(const ClickCallback& callback) +{ + if (callback) { + if (!clickRecognizer_) { + clickRecognizer_ = AceType::MakeRefPtr(); + } + clickRecognizer_->SetOnClick(callback); + } else { + LOGE("fail to set click callback due to callback is nullptr"); + } +} + +void RenderGestureListener::SetOnLongPressCallback(const OnLongPress& callback) +{ + if (callback) { + if (!longPressRecognizer_) { + longPressRecognizer_ = AceType::MakeRefPtr(context_); + } + longPressRecognizer_->SetOnLongPress(callback); + } else { + LOGE("fail to set long press callback due to callback is nullptr"); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/gesture_listener/render_gesture_listener.h b/frameworks/core/components/gesture_listener/render_gesture_listener.h new file mode 100644 index 00000000..1af74027 --- /dev/null +++ b/frameworks/core/components/gesture_listener/render_gesture_listener.h @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GESTURE_LISTENER_RENDER_GESTURE_LISTENER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GESTURE_LISTENER_RENDER_GESTURE_LISTENER_H + +#include "core/components/proxy/render_proxy.h" +#include "core/gestures/click_recognizer.h" +#include "core/gestures/drag_recognizer.h" +#include "core/gestures/long_press_recognizer.h" + +namespace OHOS::Ace { + +class GestureListenerComponent; + +class ACE_EXPORT RenderGestureListener final : public RenderProxy { + DECLARE_ACE_TYPE(RenderGestureListener, RenderProxy); + +public: + static RefPtr Create(); + void Update(const RefPtr& component) override; + void UpdateTouchRect() override; + + bool GetVisible() const override; + + void SetOnClickCallback(const ClickCallback& callback); + void SetOnLongPressCallback(const OnLongPress& callback); + +protected: + void OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) override; + +private: + void SetOnClickCallback(const RefPtr& component); + void SetOnLongPressCallback(const RefPtr& component); + + RefPtr clickRecognizer_; + RefPtr longPressRecognizer_; + RefPtr freeDragRecognizer_; + RefPtr verticalDragRecognizer_; + RefPtr horizontalDragRecognizer_; + bool isVisible_ = true; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GESTURE_LISTENER_RENDER_GESTURE_LISTENER_H diff --git a/frameworks/core/components/grid/BUILD.gn b/frameworks/core/components/grid/BUILD.gn new file mode 100644 index 00000000..9f28cfe6 --- /dev/null +++ b/frameworks/core/components/grid/BUILD.gn @@ -0,0 +1,26 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("grid") { + sources = [ + "flutter_render_grid.cpp", + "grid_component.cpp", + "grid_controller.cpp", + "grid_element.cpp", + "grid_item_component.cpp", + "render_grid.cpp", + "render_grid_item.cpp", + ] +} diff --git a/frameworks/core/components/grid/flutter_render_grid.cpp b/frameworks/core/components/grid/flutter_render_grid.cpp new file mode 100644 index 00000000..560a705a --- /dev/null +++ b/frameworks/core/components/grid/flutter_render_grid.cpp @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/grid/flutter_render_grid.h" + +#include "core/pipeline/base/flutter_render_context.h" + +namespace OHOS::Ace { + +using namespace Flutter; + +RefPtr RenderGrid::Create() +{ + return AceType::MakeRefPtr(); +} + +RenderLayer FlutterRenderGrid::GetRenderLayer() +{ + if (!layer_) { + layer_ = AceType::MakeRefPtr(0.0, GetLayoutSize().Width(), + 0.0, GetLayoutSize().Height(), Clip::HARD_EDGE); + } + return AceType::RawPtr(layer_); +} + +void FlutterRenderGrid::Paint(RenderContext& context, const Offset& offset) +{ + layer_->SetClip(0.0, GetLayoutSize().Width(), 0.0, GetLayoutSize().Height(), Clip::HARD_EDGE); + RenderNode::Paint(context, offset); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/grid/flutter_render_grid.h b/frameworks/core/components/grid/flutter_render_grid.h new file mode 100644 index 00000000..db528d8f --- /dev/null +++ b/frameworks/core/components/grid/flutter_render_grid.h @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GRID_FLUTTER_RENDER_GRID_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GRID_FLUTTER_RENDER_GRID_H + +#include "core/components/grid/render_grid.h" +#include "core/pipeline/layers/clip_layer.h" + +namespace OHOS::Ace { + +class FlutterRenderGrid : public RenderGrid { + DECLARE_ACE_TYPE(FlutterRenderGrid, RenderGrid); + +public: + FlutterRenderGrid() = default; + ~FlutterRenderGrid() override = default; + + RenderLayer GetRenderLayer() override; + void Paint(RenderContext& context, const Offset& offset) override; + +private: + RefPtr layer_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GRID_FLUTTER_RENDER_GRID_H diff --git a/frameworks/core/components/grid/grid_component.cpp b/frameworks/core/components/grid/grid_component.cpp new file mode 100644 index 00000000..cf61d1da --- /dev/null +++ b/frameworks/core/components/grid/grid_component.cpp @@ -0,0 +1,140 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/grid/grid_component.h" + +#include "core/components/grid/grid_element.h" +#include "core/components/grid/render_grid.h" + +namespace OHOS::Ace { + +RefPtr GridComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +RefPtr GridComponent::CreateRenderNode() +{ + return RenderGrid::Create(); +} + +void GridComponent::SetScrollPage(bool scrollPage) +{ + scrollPage_ = scrollPage; +} + +void GridComponent::SetDirection(FlexDirection direction) +{ + if (direction < FlexDirection::ROW || direction > FlexDirection::COLUMN_REVERSE) { + LOGW("Invalid direction %{public}d", direction); + return; + } + direction_ = direction; +} + +void GridComponent::SetFlexAlign(FlexAlign flexAlign) +{ + if (flexAlign < FlexAlign::FLEX_START || flexAlign > FlexAlign::STRETCH) { + LOGW("Invalid flexAlign %{public}d", flexAlign); + return; + } + flexAlign_ = flexAlign; +} + +void GridComponent::SetColumnCount(int32_t count) +{ + if (count <= 0) { + LOGW("Invalid ColumnCount %{public}d", count); + return; + } + columnCount_ = count; +} + +void GridComponent::SetColumnExtent(int32_t extent) +{ + if (extent <= 0) { + LOGW("Invalid ColumnExtent %{public}d", extent); + return; + } + columnExtent_ = extent; +} + +void GridComponent::SetTotalCount(int32_t totalCount) +{ + if (totalCount < 0) { + LOGW("Invalid TotalCount %{public}d", totalCount); + return; + } + itemCount_ = totalCount; +} + +void GridComponent::SetCachedCount(int32_t cachedCount) +{ + if (cachedCount <= 0) { + LOGW("Invalid CachedCount %{public}d", cachedCount); + return; + } + cachedCount_ = cachedCount; +} + +void GridComponent::SetWidth(double width) +{ + if (width <= 0.0) { + LOGW("Invalid Width %{public}lf", width); + return; + } + width_ = width; +} + +void GridComponent::SetHeight(double height) +{ + if (height <= 0.0) { + LOGW("Invalid Height %{public}lf", height); + return; + } + height_ = height; +} + +void GridComponent::SetOnRequestItem(const EventMarker& eventMarker) +{ + onRequestItem_ = eventMarker; +} + +void GridComponent::SetOnScroll(const EventMarker& onScroll) +{ + onScroll_ = onScroll; +} + +void GridComponent::SetOnScrollBottom(const EventMarker& onScrollBottom) +{ + onScrollBottom_ = onScrollBottom; +} + +void GridComponent::SetOnScrollTop(const EventMarker& onScrollTop) +{ + onScrollTop_ = onScrollTop; +} + +void GridComponent::SetOnScrollEnd(const EventMarker& onScrollEnd) +{ + onScrollEnd_ = onScrollEnd; +} + +void GridComponent::SetOnScrollTouchUp(const EventMarker& onScrollTouchUp) +{ + onScrollTouchUp_ = onScrollTouchUp; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/grid/grid_component.h b/frameworks/core/components/grid/grid_component.h new file mode 100644 index 00000000..460b2327 --- /dev/null +++ b/frameworks/core/components/grid/grid_component.h @@ -0,0 +1,161 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GRID_GRID_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GRID_GRID_COMPONENT_H + +#include "core/components/common/layout/constants.h" +#include "core/components/grid/grid_controller.h" +#include "core/components/grid/grid_element.h" +#include "core/components/grid/render_grid.h" +#include "core/pipeline/base/component_group.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { + +class GridComponent : public ComponentGroup { + DECLARE_ACE_TYPE(GridComponent, ComponentGroup); + +public: + explicit GridComponent(const std::list>& children) + : ComponentGroup(children) + { + gridController_ = AceType::MakeRefPtr(); + } + + ~GridComponent() override = default; + + RefPtr CreateElement() override; + + RefPtr CreateRenderNode() override; + + void SetScrollPage(bool scrollPage); + void SetDirection(FlexDirection direction); + void SetFlexAlign(FlexAlign flexAlign); + void SetColumnCount(int32_t count); + void SetColumnExtent(int32_t extent); + void SetTotalCount(int32_t totalCount); + void SetCachedCount(int32_t cachedCount); + void SetWidth(double width); + void SetHeight(double height); + void SetOnRequestItem(const EventMarker& eventMarker); + void SetOnScroll(const EventMarker& onScroll); + void SetOnScrollBottom(const EventMarker& onScrollBottom); + void SetOnScrollTop(const EventMarker& onScrollTop); + void SetOnScrollEnd(const EventMarker& onScrollEnd); + void SetOnScrollTouchUp(const EventMarker& onScrollTouchUp); + + bool GetScrollPage() const + { + return scrollPage_; + } + + FlexDirection GetDirection() const + { + return direction_; + } + + FlexAlign GetFlexAlign() const + { + return flexAlign_; + } + + int32_t GetColumnCount() const + { + return columnCount_; + } + + int32_t GetColumnExtent() const + { + return columnExtent_; + } + + int32_t GetTotalCount() const + { + return itemCount_; + } + + int32_t GetCachedCount() const + { + return cachedCount_; + } + + double GetWidth() const + { + return width_; + } + + double GetHeight() const + { + return height_; + } + + RefPtr GetGridController() const + { + return gridController_; + } + + const EventMarker& GetOnRequestItem() const + { + return onRequestItem_; + } + + const EventMarker& GetOnScroll() const + { + return onScroll_; + } + + const EventMarker& GetOnScrollBottom() const + { + return onScrollBottom_; + } + + const EventMarker& GetOnScrollTop() const + { + return onScrollTop_; + } + + const EventMarker& GetOnScrollEnd() const + { + return onScrollEnd_; + } + + const EventMarker& GetOnScrollTouchUp() const + { + return onScrollTouchUp_; + } + +private: + EventMarker onRequestItem_; + EventMarker onScroll_; + EventMarker onScrollBottom_; + EventMarker onScrollTop_; + EventMarker onScrollEnd_; + EventMarker onScrollTouchUp_; + FlexDirection direction_ { FlexDirection::COLUMN }; + FlexAlign flexAlign_ { FlexAlign::STRETCH }; + bool scrollPage_ { false }; + double width_ { DEFAULT_GRID_WIDTH }; + double height_ { DEFAULT_GRID_HEIGHT }; + int32_t columnCount_ { DEFAULT_COLUMN_COUNT }; + int32_t columnExtent_ { DEFAULT_COLUMN_EXTENT }; + int32_t itemCount_ { DEFAULT_ITEM_COUNT }; + int32_t cachedCount_ { DEFAULT_CACHED_COUNT }; + RefPtr gridController_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GRID_GRID_COMPONENT_H diff --git a/frameworks/core/components/grid/grid_controller.cpp b/frameworks/core/components/grid/grid_controller.cpp new file mode 100644 index 00000000..31074749 --- /dev/null +++ b/frameworks/core/components/grid/grid_controller.cpp @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/grid/grid_controller.h" + +#include "core/components/grid/render_grid.h" + +namespace OHOS::Ace { + +void GridController::JumpTo(double position) +{ + auto grid = AceType::DynamicCast(grid_.Upgrade()); + if (!grid) { + LOGW("RenderGrid is null. JumpTo %{public}lf failed.", position); + return; + } + grid->JumpTo(position); +} + +void GridController::AnimateTo(double position, float duration, const RefPtr& curve) +{ + auto grid = AceType::DynamicCast(grid_.Upgrade()); + if (!grid) { + LOGW("RenderGrid is null. AnimateTo %{public}lf failed.", position); + return; + } + grid->AnimateTo(position, duration, curve); +} + +void GridController::JumpTo(int32_t index) +{ + auto grid = AceType::DynamicCast(grid_.Upgrade()); + if (!grid) { + LOGW("RenderGrid is null. JumpTo %{public}d failed.", index); + return; + } + grid->JumpTo(index); +} + +void GridController::AnimateTo(int32_t index, float duration, const RefPtr& curve) +{ + auto grid = AceType::DynamicCast(grid_.Upgrade()); + if (!grid) { + LOGW("RenderGrid is null. AnimateTo %{public}d failed.", index); + return; + } + grid->AnimateTo(index, duration, curve); +} + +void GridController::ScrollBy(int32_t pixelX, int32_t pixelY, bool smooth) +{ + auto grid = AceType::DynamicCast(grid_.Upgrade()); + if (!grid) { + LOGW("RenderGrid is null. ScrollBy failed."); + return; + } + grid->ScrollBy(pixelX, pixelY, smooth); +} + +int32_t GridController::GetCurrentIndex() const +{ + auto grid = AceType::DynamicCast(grid_.Upgrade()); + if (!grid) { + LOGW("RenderGrid is null. GetCurrentIndex failed."); + return 0; + } + return grid->GetCurrentIndex(); +} + +double GridController::GetCurrentPosition() const +{ + auto grid = AceType::DynamicCast(grid_.Upgrade()); + if (!grid) { + LOGW("RenderGrid is null. GetCurrentPosition failed."); + return 0.0; + } + return grid->GetCurrentPosition(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/grid/grid_controller.h b/frameworks/core/components/grid/grid_controller.h new file mode 100644 index 00000000..5b5a5892 --- /dev/null +++ b/frameworks/core/components/grid/grid_controller.h @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GRID_GRID_CONTROLLER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GRID_GRID_CONTROLLER_H + +#include "core/animation/curve.h" +#include "core/pipeline/base/constants.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class GridController : public AceType { + DECLARE_ACE_TYPE(GridController, AceType); + +public: + GridController() = default; + ~GridController() override = default; + + void SetInitialIndex(int32_t index) + { + if (index >= 0) { + initialIndex_ = index; + } + } + + int32_t GetInitialIndex() const + { + return initialIndex_; + } + + int32_t GetCurrentIndex() const; + double GetCurrentPosition() const; + void JumpTo(double position); + void AnimateTo(double position, float duration, const RefPtr& curve); + void JumpTo(int32_t index); + void AnimateTo(int32_t index, float duration, const RefPtr& curve); + void ScrollBy(int32_t pixelX, int32_t pixelY, bool smooth); + + // Will be called by RenderGrid when update. + void SetGridNode(const WeakPtr& grid) + { + grid_ = grid; + } + +private: + int32_t initialIndex_ = DEFAULT_INITIAL_ITEM; + WeakPtr grid_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GRID_GRID_CONTROLLER_H diff --git a/frameworks/core/components/grid/grid_element.cpp b/frameworks/core/components/grid/grid_element.cpp new file mode 100644 index 00000000..9e642e14 --- /dev/null +++ b/frameworks/core/components/grid/grid_element.cpp @@ -0,0 +1,208 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/grid/grid_element.h" + +#include "base/log/log.h" +#include "base/utils/utils.h" +#include "core/components/grid/grid_component.h" +#include "core/components/grid/render_grid.h" +#include "core/components/proxy/render_item_proxy.h" +#include "core/event/ace_event_helper.h" +#include "core/pipeline/base/composed_element.h" + +namespace OHOS::Ace { +namespace { + +constexpr double DOUBLE_FACTOR = 2.0; + +std::string BuildEventParam(int32_t index, int32_t count) +{ + return std::string("{\"index\":") + .append(std::to_string(index)) + .append(",\"count\":") + .append(std::to_string(count)) + .append("}"); +} + +} // namespace + +RefPtr GridElement::CreateRenderNode() +{ + RefPtr node = ComponentGroupElement::CreateRenderNode(); + RefPtr grid = AceType::DynamicCast(node); + if (grid) { + SetOnFocusCallback([weakGridElement = AceType::WeakClaim(this)](void) { + auto gridElement = weakGridElement.Upgrade(); + if (gridElement) { + gridElement->HandleOnFocus(); + } + }); + SetOnBlurCallback([weakGridElement = AceType::WeakClaim(this)](void) { + auto gridElement = weakGridElement.Upgrade(); + if (gridElement) { + gridElement->HandleOnBlur(); + } + }); + grid->RegisterCallback([weakGridElement = AceType::WeakClaim(this)](int32_t index, int32_t count) { + auto gridElement = weakGridElement.Upgrade(); + if (gridElement) { + gridElement->BuildGridData(index, count); + } + }); + } + return node; +} + +void GridElement::BuildGridData(int32_t index, int32_t count) +{ + auto pipelineContext = context_.Upgrade(); + if (pipelineContext == nullptr) { + LOGE("Failed to get page context"); + return; + } + + LOGD("BuildGridData(index = %{public}d, count = %{public}d)", index, count); + std::string result; + if (requestItem_) { + requestItem_(BuildEventParam(index, count), result); + } + if (!result.empty()) { + if (newGridItems_.empty()) { + LOGE("No new items, index = %{public}d, count = %{public}d", index, count); + } else { + pipelineContext->AddDirtyElement(AceType::Claim(this)); + } + } +} + +void GridElement::PerformBuild() +{ + if (newGridItems_.empty() || component_) { + ComponentGroupElement::PerformBuild(); + return; + } + + LOGD("GridElement::PerformBuild"); + for (const auto& child : newGridItems_) { + UpdateChild(nullptr, child); + } + + newGridItems_.clear(); + // New child added, mark need layout. + if (renderNode_) { + renderNode_->MarkNeedLayout(); + } +} + +void GridElement::Update() +{ + ComponentGroupElement::Update(); + + RefPtr grid = AceType::DynamicCast(component_); + if (grid) { + requestItem_ = AceSyncEvent::Create(grid->GetOnRequestItem(), context_); + } +} + +bool GridElement::RequestNextFocus(bool vertical, bool reverse, const Rect& rect) +{ + RefPtr grid = AceType::DynamicCast(renderNode_); + if (!grid) { + LOGE("Render grid is null."); + return false; + } + Offset center = Offset(rect.Left() + rect.Width() / DOUBLE_FACTOR, + rect.Top() + rect.Height() / DOUBLE_FACTOR); + LOGD("RequestNextFocus vertical:%{public}d reverse:%{public}d pos:%{public}lf %{public}lf.", + vertical, reverse, center.GetX(), center.GetY()); + bool ret = false; + while (!ret) { + int32_t focusIndex = grid->RequestNextFocus(vertical, reverse, center); + int32_t size = GetChildrenList().size(); + if (focusIndex < 0 || focusIndex >= size) { + return false; + } + auto iter = GetChildrenList().begin(); + std::advance(iter, focusIndex); + auto focusNode = *iter; + if (!focusNode) { + LOGE("Target focus node is null."); + return false; + } + // If current Node can not obtain focus, move to next. + ret = focusNode->RequestFocusImmediately(); + } + return ret; +} + +void GridElement::HandleOnFocus() +{ + RefPtr grid = AceType::DynamicCast(renderNode_); + if (!grid) { + LOGE("Render grid is null."); + return; + } + int32_t focusIndex = 0; + for (auto focusNode : GetChildrenList()) { + if (focusNode->IsCurrentFocus()) { + break; + } + ++focusIndex; + } + grid->HandleOnFocus(focusIndex); +} + +void GridElement::HandleOnBlur() +{ + RefPtr grid = AceType::DynamicCast(renderNode_); + if (!grid) { + LOGE("Render grid is null."); + return; + } + grid->HandleOnBlur(); +} + +void GridElement::Apply(const RefPtr& child) +{ + if (!child) { + LOGE("Element child is null"); + return; + } + + if (!renderNode_) { + LOGE("RenderElement don't have a render node"); + return; + } + + auto proxy = RenderItemProxy::Create(); + proxy->Attach(context_); + renderNode_->AddChild(proxy, child->GetSlot()); + if (child->GetType() == RENDER_ELEMENT) { + // Directly attach the RenderNode if child is RenderElement. + RefPtr renderChild = AceType::DynamicCast(child); + if (renderChild) { + proxy->AddChild(renderChild->GetRenderNode()); + } + } else if (child->GetType() == COMPOSED_ELEMENT) { + // If child is ComposedElement, just set parent render node. + RefPtr composeChild = AceType::DynamicCast(child); + if (composeChild) { + composeChild->SetParentRenderNode(proxy); + } + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/grid/grid_element.h b/frameworks/core/components/grid/grid_element.h new file mode 100644 index 00000000..ac735f8a --- /dev/null +++ b/frameworks/core/components/grid/grid_element.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GRID_GRID_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GRID_GRID_ELEMENT_H + +#include "core/pipeline/base/component_group_element.h" + +namespace OHOS::Ace { + +class GridElement : public ComponentGroupElement, public FocusGroup { + DECLARE_ACE_TYPE(GridElement, ComponentGroupElement, FocusGroup); + +public: + void PerformBuild() override; + void Update() override; + bool RequestNextFocus(bool vertical, bool reverse, const Rect& rect) override; + void HandleOnFocus(); + void HandleOnBlur(); + +private: + RefPtr CreateRenderNode() override; + void Apply(const RefPtr& child) override; + + void BuildGridData(int32_t index, int32_t count); + + std::list> newGridItems_; + using RequestItem = std::function; + RequestItem requestItem_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GRID_GRID_ELEMENT_H diff --git a/frameworks/core/components/grid/grid_item_component.cpp b/frameworks/core/components/grid/grid_item_component.cpp new file mode 100644 index 00000000..98caf9ae --- /dev/null +++ b/frameworks/core/components/grid/grid_item_component.cpp @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/grid/grid_item_component.h" + +#include "core/components/grid/grid_item_element.h" +#include "core/components/grid/render_grid_item.h" + +namespace OHOS::Ace { + +RefPtr GridItemComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +RefPtr GridItemComponent::CreateRenderNode() +{ + return RenderGridItem::Create(); +} + +void GridItemComponent::SetColumnSpan(int32_t columnSpan) +{ + if (columnSpan <= 0) { + LOGW("Invalid columnSpan %{public}d", columnSpan); + return; + } + columnSpan_ = columnSpan; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/grid/grid_item_component.h b/frameworks/core/components/grid/grid_item_component.h new file mode 100644 index 00000000..8cced9f6 --- /dev/null +++ b/frameworks/core/components/grid/grid_item_component.h @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GRID_GRID_ITEM_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GRID_GRID_ITEM_COMPONENT_H + +#include "core/components/grid/grid_item_element.h" +#include "core/components/grid/render_grid_item.h" +#include "core/pipeline/base/constants.h" +#include "core/pipeline/base/sole_child_component.h" + +namespace OHOS::Ace { + +class GridItemComponent : public SoleChildComponent { + DECLARE_ACE_TYPE(GridItemComponent, SoleChildComponent); + +public: + GridItemComponent() = default; + explicit GridItemComponent(const RefPtr& child) + : SoleChildComponent(child) {} + ~GridItemComponent() override = default; + + RefPtr CreateRenderNode() override; + + RefPtr CreateElement() override; + + void SetColumnSpan(int32_t columnSpan); + + int32_t GetColumnSpan() const + { + return columnSpan_; + } + +private: + int32_t columnSpan_ = DEFAULT_COLUMN_SPAN; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GRID_GRID_ITEM_COMPONENT_H diff --git a/frameworks/core/components/grid/grid_item_element.h b/frameworks/core/components/grid/grid_item_element.h new file mode 100644 index 00000000..fb954b51 --- /dev/null +++ b/frameworks/core/components/grid/grid_item_element.h @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GRID_GRID_ITEM_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GRID_GRID_ITEM_ELEMENT_H + +#include "core/pipeline/base/sole_child_element.h" + +namespace OHOS::Ace { + +class GridItemElement : public SoleChildElement, public FocusGroup { + DECLARE_ACE_TYPE(GridItemElement, SoleChildElement, FocusGroup); + +public: + bool RequestNextFocus(bool vertical, bool reverse, const Rect& rect) override + { + // Grid Item just one child, all focus move event make it blur. + return false; + } +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GRID_GRID_ITEM_ELEMENT_H diff --git a/frameworks/core/components/grid/render_grid.cpp b/frameworks/core/components/grid/render_grid.cpp new file mode 100644 index 00000000..3eb4b709 --- /dev/null +++ b/frameworks/core/components/grid/render_grid.cpp @@ -0,0 +1,1042 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/grid/render_grid.h" + +#include +#include + +#include "base/log/log.h" +#include "base/utils/utils.h" +#include "core/animation/curve_animation.h" +#include "core/components/grid/grid_component.h" +#include "core/components/grid/render_grid_item.h" +#include "core/event/ace_event_helper.h" + +namespace OHOS::Ace { +namespace { + +constexpr int32_t FOCUS_LOST = -1; +constexpr int32_t SCROLL_NONE = 0; +constexpr int32_t SCROLL_TOUCH_DOWN = 1; +constexpr int32_t SCROLL_TOUCH_UP = 2; +constexpr int32_t SCROLL_BY_SPEED = 250; // move 250 pixels per second +constexpr int32_t DEFAULT_DEPTH = 10; +constexpr double DOUBLE_FACTOR = 2.0; +constexpr double DURATION_SECOND_TO_MS = 1000.0; + +constexpr bool HORIZONTAL = false; +constexpr bool VERTICAL = true; +constexpr bool FORWARD = false; +constexpr bool REVERSE = true; + +// first bool mean if vertical, second bool mean if reverse +// false, false --> RIGHT +// false, true --> LEFT +// true, false --> DOWN +// true, true ---> UP +// This map will adapter the Grid FlexDirection with Key Direction. +const std::map>> DIRECTION_MAP = { + { FlexDirection::ROW, + { + { HORIZONTAL, { { FORWARD, KeyDirection::DOWN }, { REVERSE, KeyDirection::UP } } }, + { VERTICAL, { { FORWARD, KeyDirection::RIGHT }, { REVERSE, KeyDirection::LEFT } } } + } + }, + { FlexDirection::COLUMN, + { + { HORIZONTAL, { { FORWARD, KeyDirection::RIGHT }, { REVERSE, KeyDirection::LEFT } } }, + { VERTICAL, { { FORWARD, KeyDirection::DOWN }, { REVERSE, KeyDirection::UP } } } + } + }, + { FlexDirection::ROW_REVERSE, + { + { HORIZONTAL, { { FORWARD, KeyDirection::UP }, { REVERSE, KeyDirection::DOWN } } }, + { VERTICAL, { { FORWARD, KeyDirection::RIGHT }, { REVERSE, KeyDirection::LEFT } } } + } + }, + { FlexDirection::COLUMN_REVERSE, + { + { HORIZONTAL, { { FORWARD, KeyDirection::RIGHT }, { REVERSE, KeyDirection::LEFT } } }, + { VERTICAL, { { FORWARD, KeyDirection::UP }, { REVERSE, KeyDirection::DOWN } } } + } + } +}; + +} // namespace + +RenderGrid::RenderGrid() +{ + touchRecognizer_ = AceType::MakeRefPtr(); + touchRecognizer_->SetOnTouchDown([wp = AceType::WeakClaim(this)](const TouchEventInfo&) { + auto sp = wp.Upgrade(); + if (sp) { + sp->HandleTouchDown(); + } + }); + touchRecognizer_->SetOnTouchUp([wp = AceType::WeakClaim(this)](const TouchEventInfo&) { + auto sp = wp.Upgrade(); + if (sp) { + sp->HandleTouchUp(); + } + }); + touchRecognizer_->SetOnTouchCancel([wp = AceType::WeakClaim(this)](const TouchEventInfo&) { + auto sp = wp.Upgrade(); + if (sp) { + sp->HandleTouchCancel(); + } + }); +} + +void RenderGrid::OnChildAdded(const RefPtr& renderNode) +{ + RenderNode::OnChildAdded(renderNode); + childrenChanged_ = true; + count_++; +} + +Offset RenderGrid::LimitOffset(const Offset& offset) +{ + Offset limitOffset = offset; + switch (direction_) { + case FlexDirection::ROW: + if (limitOffset.GetX() < 0.0) { + // reach the smallest point X. + limitOffset.SetX(0.0); + } else if (limitOffset.GetX() > totalMainSize_ - GetLayoutSize().Width()) { + // reach the largest point X. + limitOffset.SetX(totalMainSize_ - GetLayoutSize().Width()); + } else { + reachBetween_ = true; + } + limitOffset.SetY(0.0); + break; + case FlexDirection::COLUMN: + if (limitOffset.GetY() < 0.0) { + // reach the smallest point Y. + limitOffset.SetY(0.0); + } else if (limitOffset.GetY() > totalMainSize_ - GetLayoutSize().Height()) { + // reach the largest point Y. + limitOffset.SetY(totalMainSize_ - GetLayoutSize().Height()); + } else { + reachBetween_ = true; + } + limitOffset.SetX(0.0); + break; + case FlexDirection::ROW_REVERSE: + if (limitOffset.GetX() > 0.0) { + // reach the largest point X. + limitOffset.SetX(0.0); + } else if (limitOffset.GetX() < GetLayoutSize().Width() - totalMainSize_) { + // reach the smallest point X. + limitOffset.SetX(GetLayoutSize().Width() - totalMainSize_); + } else { + reachBetween_ = true; + } + limitOffset.SetY(0.0); + break; + case FlexDirection::COLUMN_REVERSE: + if (limitOffset.GetY() > 0.0) { + // reach the largest point Y. + limitOffset.SetY(0.0); + } else if (limitOffset.GetY() < GetLayoutSize().Height() - totalMainSize_) { + // reach the smallest point Y. + limitOffset.SetY(GetLayoutSize().Height() - totalMainSize_); + } else { + reachBetween_ = true; + } + limitOffset.SetX(0.0); + break; + default: + break; + } + return limitOffset; +} + +bool RenderGrid::UpdateOffset(const Offset& delta) +{ + // if viewport display all content, no need to scroll. + if (totalMainSize_ < GetMainSize(GetLayoutSize())) { + return false; + } + if (NearZero(delta.GetX()) && NearZero(delta.GetY())) { + return true; + } + Offset oldOffset = offset_; + offset_ += delta; + offset_ = LimitOffset(offset_); + + if (oldOffset != offset_) { + if (onTouch_) { + // TouchDown and scrolling: continuity send event scroll(state:1). + OnScroll(delta.GetX(), delta.GetY(), SCROLL_TOUCH_DOWN); + } else { + // TouchUp and scroll continue: send event scrolltouchup once. + if (triggerTouchUp_) { + OnScrollTouchUp(); + triggerTouchUp_ = false; + } + // TouchUp and scrolling: continuity send event scroll(state:2). + OnScroll(delta.GetX(), delta.GetY(), SCROLL_TOUCH_UP); + } + MarkNeedLayout(); + return true; + } + // delta offset make no change, mean reach to the scroll limit. + return false; +} + +void RenderGrid::OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) +{ + if (!GetVisible()) { + return; + } + + if (!scrollable_ || !touchRecognizer_) { + return; + } + scrollable_->SetCoordinateOffset(coordinateOffset); + touchRecognizer_->SetCoordinateOffset(coordinateOffset); + result.emplace_back(scrollable_); + result.emplace_back(touchRecognizer_); +} + +void RenderGrid::Update(const RefPtr& component) +{ + const RefPtr grid = AceType::DynamicCast(component); + if (!grid) { + return; + } + + updateFlag_ = true; + bool directionChanged = direction_ != grid->GetDirection(); + direction_ = grid->GetDirection(); + if (direction_ == FlexDirection::COLUMN || direction_ == FlexDirection::COLUMN_REVERSE) { + isVertical_ = true; + } + + crossAxisAlign_ = grid->GetFlexAlign(); + maxCount_ = grid->GetTotalCount(); + columnCount_ = grid->GetColumnCount(); + columnExtent_ = grid->GetColumnExtent(); + cachedCount_ = grid->GetCachedCount(); + gridWidth_ = grid->GetWidth(); + gridHeight_ = grid->GetHeight(); + onScroll_ = AceAsyncEvent::Create(grid->GetOnScroll(), context_); + onScrollBottom_ = AceAsyncEvent::Create(grid->GetOnScrollBottom(), context_); + onScrollTop_ = AceAsyncEvent::Create(grid->GetOnScrollTop(), context_); + onScrollEnd_ = AceAsyncEvent::Create(grid->GetOnScrollEnd(), context_); + onScrollTouchUp_ = AceAsyncEvent::Create(grid->GetOnScrollTouchUp(), context_); + + gridController_ = grid->GetGridController(); + if (gridController_) { + gridController_->SetGridNode(AceType::WeakClaim(this)); + } + + if (directionChanged || !scrollable_) { + ResetScrollable(); + } + + if (!animator_) { + animator_ = AceType::MakeRefPtr(GetContext()); + } + MarkNeedLayout(); +} + +int32_t RenderGrid::GetCurrentIndex() const +{ + if (NearEqual(GetCurrentPosition(), 0.0)) { + return 0; + } + int32_t index = 0; + double vertex = 0.0; + for (const auto& item : GetChildren()) { + switch (direction_) { + case FlexDirection::ROW: + if (std::abs(item->GetPosition().GetX()) < item->GetLayoutSize().Width()) { + return index; + } + break; + case FlexDirection::COLUMN: + if (std::abs(item->GetPosition().GetY()) < item->GetLayoutSize().Height()) { + return index; + } + break; + case FlexDirection::ROW_REVERSE: + vertex = item->GetPosition().GetX() + item->GetLayoutSize().Width(); + if (std::abs(vertex - GetLayoutSize().Width()) < item->GetLayoutSize().Width()) { + return index; + } + break; + case FlexDirection::COLUMN_REVERSE: + vertex = item->GetPosition().GetY() + item->GetLayoutSize().Height(); + if (std::abs(vertex - GetLayoutSize().Height()) < item->GetLayoutSize().Height()) { + return index; + } + break; + default: + break; + } + ++index; + } + return index; +} + +double RenderGrid::GetCurrentPosition() const +{ + if (isVertical_) { + return offset_.GetY(); + } else { + return offset_.GetX(); + } +} + +Offset RenderGrid::GetChildOffset(const RefPtr& child) const +{ + Offset offset; + Offset position = child->GetPosition() + offset_; + Size layout = child->GetLayoutSize(); + switch (direction_) { + case FlexDirection::ROW: + offset.SetX(position.GetX()); + break; + case FlexDirection::COLUMN: + offset.SetY(position.GetY()); + break; + case FlexDirection::ROW_REVERSE: + offset.SetX((position.GetX() + layout.Width()) - GetLayoutSize().Width()); + break; + case FlexDirection::COLUMN_REVERSE: + offset.SetY((position.GetY() + layout.Height()) - GetLayoutSize().Height()); + break; + default: + break; + } + return offset; +} + +void RenderGrid::JumpTo(int32_t index) +{ + LOGD("Jump to index: %{public}d.", index); + int32_t size = GetChildren().size(); + if (index < 0 || index >= size) { + LOGW("Invalid index: %{public}d.", index); + return; + } + auto iter = GetChildren().begin(); + std::advance(iter, index); + if (!(*iter)) { + LOGW("Target child is nullptr."); + return; + } + Offset offset = GetChildOffset(*iter); + JumpTo(isVertical_ ? offset.GetY() : offset.GetX()); +} + +void RenderGrid::AnimateTo(int32_t index, float duration, const RefPtr& curve) +{ + LOGD("Animate to index: %{public}d.", index); + int32_t size = GetChildren().size(); + if (index < 0 || index >= size) { + LOGW("Invalid index: %{public}d.", index); + return; + } + auto iter = GetChildren().begin(); + std::advance(iter, index); + if (!(*iter)) { + LOGW("Target child is nullptr."); + return; + } + Offset offset = GetChildOffset(*iter); + AnimateTo(isVertical_ ? offset.GetY() : offset.GetX(), duration, curve); +} + +void RenderGrid::JumpTo(double position) +{ + if (NearEqual(GetCurrentPosition(), position)) { + LOGW("Already at position: %{public}lf.", position); + return; + } + LOGD("Jump from %{public}lf to %{public}lf.", GetCurrentPosition(), position); + Offset offset; + if (isVertical_) { + offset.SetY(position); + } else { + offset.SetX(position); + } + offset_ = LimitOffset(offset); + MarkNeedLayout(); +} + +void RenderGrid::AnimateTo(double position, float duration, const RefPtr& curve) +{ + if (NearEqual(GetCurrentPosition(), position)) { + LOGW("Already at position: %{public}lf.", position); + return; + } + LOGD("Animate from %{public}lf to %{public}lf", GetCurrentPosition(), position); + if (!animator_->IsStopped()) { + animator_->Stop(); + } + animator_->ClearInterpolators(); + auto animation = AceType::MakeRefPtr>(GetCurrentPosition(), position, curve); + animation->AddListener([weakGrid = AceType::WeakClaim(this)](const double& value) { + auto grid = weakGrid.Upgrade(); + if (grid) { + grid->JumpTo(value); + } + }); + animator_->AddInterpolator(animation); + animator_->SetDuration(duration); + animator_->Play(); +} + +void RenderGrid::ScrollBy(int32_t pixelX, int32_t pixelY, bool smooth) +{ + double distance = isVertical_ ? pixelY : pixelX; + if (NearZero(distance)) { + return; + } + double offset = distance + (isVertical_ ? offset_.GetY() : offset_.GetX()); + if (smooth) { + AnimateTo(offset, std::abs(distance) * DURATION_SECOND_TO_MS / SCROLL_BY_SPEED, Curves::LINEAR); + } else { + JumpTo(offset); + } +} + +int32_t RenderGrid::RequestNextFocus(bool vertical, bool reverse, Offset position) +{ + int32_t focusIndex = FOCUS_LOST; + if (GetChildren().empty()) { + LOGD("No Child, can not obtain focus."); + return focusIndex; + } + // (false false)->RIGHT (false true)->LEFT (true false)->DOWN (true true)->UP + KeyDirection key = DIRECTION_MAP.at(direction_).at(vertical).at(reverse); + if (focused_) { + auto curIter = childRelations_.find(focusIndex_); + if (curIter != childRelations_.end() && curIter->second[key] >= 0) { + focusIndex = curIter->second[key]; + } + } else { + switch (key) { + case KeyDirection::UP: + focusIndex = focusMoveUp(position); + break; + case KeyDirection::DOWN: + focusIndex = focusMoveDown(position); + break; + case KeyDirection::LEFT: + focusIndex = focusMoveLeft(position); + break; + case KeyDirection::RIGHT: + focusIndex = focusMoveRight(position); + break; + default: + break; + } + } + LOGD("Current focusIndex:%{public}d focused:%{public}d", focusIndex, focused_); + if (focusIndex >= 0) { + focusIndex_ = focusIndex; + MoveChildToViewPort(focusIndex); + } + return focusIndex; +} + +void RenderGrid::HandleOnFocus(int32_t focusIndex) +{ + LOGD("OnFocus current focusIndex : %{public}d", focusIndex); + focusIndex_ = focusIndex; + focused_ = true; + MoveChildToViewPort(focusIndex); +} + +void RenderGrid::HandleOnBlur() +{ + LOGD("OnBlur previous focusIndex : %{public}d", focusIndex_); + focused_ = false; +} + +void RenderGrid::MoveChildToViewPort(int32_t index) +{ + auto child = GetChildByIndex(index); + if (!child) { + LOGE("Index:%{public}d no child exist.", index); + return; + } + double childMainSize = GetMainSize(child->GetLayoutSize()); + double gridMainSize = GetMainSize(GetLayoutSize()); + double childMainPos = isVertical_ ? child->GetPosition().GetY() : child->GetPosition().GetX(); + double curOffset = isVertical_ ? offset_.GetY() : offset_.GetX(); + if (childMainPos < 0.0) { + // The head is out of the viewport + JumpTo(childMainPos + curOffset); + return; + } + if (childMainPos + childMainSize > gridMainSize) { + // The tail is out of the viewport + JumpTo(childMainPos + curOffset + childMainSize - gridMainSize); + return; + } +} + +RefPtr RenderGrid::GetChildByIndex(int32_t index) const +{ + int32_t size = GetChildren().size(); + if (index < 0 || index >= size) { + return nullptr; + } + auto pos = GetChildren().begin(); + std::advance(pos, index); + return *pos; +} + +Offset RenderGrid::GetCenterPosition(const Offset& pos, const Size& size) const +{ + double width = size.Width(); + double height = size.Height(); + Offset center = (pos + Offset(width / DOUBLE_FACTOR, height / DOUBLE_FACTOR)); + return center; +} + +bool RenderGrid::IsChildVisible(const RefPtr& node) const +{ + Offset childCenter = GetCenterPosition(node->GetPosition(), node->GetLayoutSize()); + Offset parentCenter = GetCenterPosition(Offset(0.0, 0.0), GetLayoutSize()); + Offset distance = childCenter - parentCenter; + Size nodeSize = node->GetLayoutSize(); + Size viewPortSize = GetLayoutSize(); + double halfW = (nodeSize.Width() + viewPortSize.Width()) / DOUBLE_FACTOR; + double halfH = (nodeSize.Height() + viewPortSize.Height()) / DOUBLE_FACTOR; + if (std::abs(distance.GetX()) < halfW && std::abs(distance.GetY()) < halfH) { + return true; + } + return false; +} + +int32_t RenderGrid::FocusMove(const Offset& position, const std::function& condition, + KeyDirection keyDirection, bool checkChildVisible) +{ + double distance = -1.0; + int32_t index = -1; + auto iter = childRelations_.begin(); + for (; iter != childRelations_.end() && (!condition || condition(iter->first)); ++iter) { + if ((keyDirection == KeyDirection::LEFT || keyDirection == KeyDirection::RIGHT) && + iter->second[keyDirection] != -1) { + // Not the keyDirection column, just continue + continue; + } + auto child = GetChildByIndex(iter->first); + if (child == nullptr) { + continue; + } + if (checkChildVisible && !IsChildVisible(child)) { + continue; + } + + Offset curPos = GetCenterPosition(child->GetPosition(), child->GetLayoutSize()); + double curDis = sqrt((position.GetX() - curPos.GetX()) * (position.GetX() - curPos.GetX()) + + (position.GetY() - curPos.GetY()) * (position.GetY() - curPos.GetY())); + if (distance < 0) { + distance = curDis; + index = iter->first; + } else { + if (distance < curDis) { + break; + } else { + distance = curDis; + index = iter->first; + } + } + } + return index; +} + +// Handle direction key up +int32_t RenderGrid::focusMoveUp(const Offset& position) +{ + double distance = -1.0; + int32_t index = -1; + auto iter = childRelations_.rbegin(); + int32_t startPos = indexPositions_[iter->first]; + int32_t scope = columnCount_ != 0 ? startPos % columnCount_ : 0; + for (; iter != childRelations_.rend() && scope > 0; ++iter) { + auto child = GetChildByIndex(iter->first); + if (child == nullptr) { + continue; + } + Offset curPos = GetCenterPosition(child->GetPosition(), child->GetLayoutSize()); + double curDis = sqrt((position.GetX() - curPos.GetX()) * (position.GetX() - curPos.GetX()) + + (position.GetY() - curPos.GetY()) * (position.GetY() - curPos.GetY())); + if (distance < 0) { + distance = curDis; + index = iter->first; + } else { + if (distance < curDis) { + break; + } else { + distance = curDis; + index = iter->first; + } + } + scope = scope - (startPos - indexPositions_[iter->first]); + } + return index; +} + +// Handle direction key down +int32_t RenderGrid::focusMoveDown(const Offset& position) +{ + return FocusMove( + position, [grid = Claim(this)](int32_t index) { return grid->indexPositions_[index] < grid->columnCount_; }, + KeyDirection::DOWN, false); +} + +// Handle direction key left +int32_t RenderGrid::focusMoveLeft(const Offset& position) +{ + return FocusMove(position, nullptr, KeyDirection::RIGHT, true); +} + +// Handle direction key right +int32_t RenderGrid::focusMoveRight(const Offset& position) +{ + return FocusMove(position, nullptr, KeyDirection::LEFT, true); +} + +LayoutParam RenderGrid::MakeInnerLayoutParam(int32_t columnSpan) const +{ + LayoutParam innerLayout; + + if (crossAxisAlign_ == FlexAlign::STRETCH) { + if (isVertical_) { + innerLayout.SetMinSize(Size(gridLen_ * columnSpan, innerLayout.GetMinSize().Height())); + innerLayout.SetMaxSize(Size(gridLen_ * columnSpan, innerLayout.GetMaxSize().Height())); + } else { + innerLayout.SetMinSize(Size(innerLayout.GetMinSize().Width(), gridLen_ * columnSpan)); + innerLayout.SetMaxSize(Size(innerLayout.GetMaxSize().Width(), gridLen_ * columnSpan)); + } + } else { + if (isVertical_) { + innerLayout.SetMaxSize(Size(gridLen_ * columnSpan, innerLayout.GetMaxSize().Height())); + } else { + innerLayout.SetMaxSize(Size(innerLayout.GetMaxSize().Width(), gridLen_ * columnSpan)); + } + } + return innerLayout; +} + +void RenderGrid::BuildPositionRelations(int32_t gridPos, int32_t columnSpan, int32_t index) +{ + gridPositions_[gridPos] = index; + indexPositions_[index] = gridPos; + RelationMap relation; + int32_t size = GetChildren().size(); + relation[KeyDirection::UP] = -1; + relation[KeyDirection::DOWN] = -1; + relation[KeyDirection::LEFT] = gridPos % columnCount_ > 0 ? index - 1 : -1; + relation[KeyDirection::RIGHT] = (gridPos + columnSpan) % columnCount_ == 0 ? -1 : + index + 1 < size ? index + 1 : -1; + if (gridPos >= columnCount_) { + for (int32_t i = 0; i < columnSpan; ++i) { + int32_t targetPos = gridPos - columnCount_ + i; + do { + auto iter = gridPositions_.find(targetPos); + if (iter != gridPositions_.end()) { + if (relation[KeyDirection::UP] == -1) { + relation[KeyDirection::UP] = iter->second; + } + auto upItem = childRelations_.find(iter->second); + if (upItem != childRelations_.end() && upItem->second[KeyDirection::DOWN] == -1) { + upItem->second[KeyDirection::DOWN] = index; + } + break; + } + --targetPos; + } while (targetPos >= 0 && (targetPos + 1) % columnCount_ > 0); + } + } + childRelations_[index] = relation; +} + +void RenderGrid::SetChildPosition(const RefPtr& child, double mainSize, int32_t gridPos, int32_t columnSpan) +{ + double mainAxis = mainSize - GetMainSize(child->GetLayoutSize()); + double crossAxis = 0.0; + switch (crossAxisAlign_) { + case FlexAlign::FLEX_END: + crossAxis = gridLen_ * columnSpan - GetCrossSize(child->GetLayoutSize()); + break; + case FlexAlign::CENTER: + crossAxis = (gridLen_ * columnSpan - GetCrossSize(child->GetLayoutSize())) / DOUBLE_FACTOR; + break; + case FlexAlign::STRETCH: + case FlexAlign::FLEX_START: + default: + break; + } + if (isVertical_) { + if (direction_ == FlexDirection::COLUMN_REVERSE) { + mainAxis = mainSize_ - GetMainSize(child->GetLayoutSize()) - mainAxis; + } + crossAxis += (gridPos % columnCount_) * gridLen_; + child->SetPosition(Offset(crossAxis, mainAxis) - offset_); + } else { + if (direction_ == FlexDirection::ROW_REVERSE) { + mainAxis = mainSize_ - GetMainSize(child->GetLayoutSize()) - mainAxis; + } + crossAxis += (gridPos % columnCount_) * gridLen_; + child->SetPosition(Offset(mainAxis, crossAxis) - offset_); + } +} + +void RenderGrid::CalculateAxisSize() +{ + if (isVertical_) { + mainSize_ = ((gridHeight_ > 0.0) && (gridHeight_ < GetLayoutParam().GetMaxSize().Height())) ? + gridHeight_ : GetLayoutParam().GetMaxSize().Height(); + crossSize_ = ((gridWidth_ > 0.0) && (gridWidth_ < GetLayoutParam().GetMaxSize().Width())) ? + gridWidth_ : GetLayoutParam().GetMaxSize().Width(); + } else { + mainSize_ = ((gridWidth_ > 0.0) && (gridWidth_ < GetLayoutParam().GetMaxSize().Width())) ? + gridWidth_ : GetLayoutParam().GetMaxSize().Width(); + crossSize_ = ((gridHeight_ > 0.0) && (gridHeight_ < GetLayoutParam().GetMaxSize().Height())) ? + gridHeight_ : GetLayoutParam().GetMaxSize().Height(); + } +} + +void RenderGrid::InitialGridProp() +{ + // Not first time layout after update, no need to initial. + if (!updateFlag_) { + return; + } + + // Initialize the columnCount, default is 1 + if (columnCount_ == 0) { + if (columnExtent_ > 0) { + columnCount_ = crossSize_ / columnExtent_; + if (columnCount_ * columnExtent_ < crossSize_) { + ++columnCount_; + } + } else { + columnCount_ = 1; + } + } + + // Initialize the columnLenth + if (!NearZero(columnCount_)) { + gridLen_ = crossSize_ / columnCount_; + } +} + +int32_t RenderGrid::GetChildSpan(const RefPtr& child) const +{ + int32_t depth = DEFAULT_DEPTH; + int32_t span = 1; // Default span is 1, means this child takes up one column. + auto item = child; + auto gridItem = AceType::DynamicCast(item); + while (!gridItem && depth > 0) { + if (!item || item->GetChildren().empty()) { + return span; + } + + item = item->GetChildren().front(); + gridItem = AceType::DynamicCast(item); + --depth; + } + + if (gridItem) { + span = gridItem->GetColumnSpan(); + if (span <= 0) { + span = 1; // Invalid span and make it default value 1. + } + } + + return span; +} + +void RenderGrid::PerformLayout() +{ + const auto& children = GetChildren(); + LOGD("Grid Perform layout with %{public}zu children", children.size()); + + posOfChildren_.clear(); + + // Calculate the mainAxisSize and crossAxisSize + CalculateAxisSize(); + + // Initialize the columnCount columnLength columnSpan + InitialGridProp(); + + if (!children.empty()) { + int32_t index = 0; + double totalMainSize = 0.0; + LayoutParam innerLayout; + // First time layout all children and update relative position. + for (const auto& item : children) { + int32_t columnSpan = GetChildSpan(item); + columnSpan = std::min(columnSpan, columnCount_ - (index % columnCount_)); + innerLayout = MakeInnerLayoutParam(columnSpan); + item->Layout(innerLayout); + double curMainSize = index - columnCount_ < 0 ? 0.0 : posOfChildren_[index - columnCount_]; + for (int32_t i = 0; i < columnSpan; ++i) { + posOfChildren_.emplace_back(GetMainSize(item->GetLayoutSize()) + curMainSize); + } + totalMainSize = std::max(totalMainSize, GetMainSize(item->GetLayoutSize()) + curMainSize); + index += columnSpan; + } + totalMainSize_ = totalMainSize; + } + + SetLayoutSize(GetLayoutParam().Constrain(MakeValue(mainSize_, crossSize_))); + + // Requests more child. + RequestChildIfNeeded(); + + // Traverses all the children to update visible flag. + Traverse(); + + if (updateFlag_) { + // When initial index not 0, jumpto target index. + if (gridController_->GetInitialIndex() > 0) { + JumpTo(gridController_->GetInitialIndex()); + Traverse(); + } + updateFlag_ = false; + OnScroll(0.0, 0.0, SCROLL_NONE); // Trigger a scroll stop event when finish first layout. + } +} + +void RenderGrid::RequestChildIfNeeded() +{ + if (GetChildren().empty()) { + if (maxCount_ > 0 && callback_) { + callback_(0, std::min(cachedCount_, maxCount_)); + } + return; + } + + // Calculates the start and end of the viewport. + double viewportSize = GetMainSize(GetLayoutSize()); + double viewportStart = 0.0; + switch (direction_) { + case FlexDirection::ROW: + viewportStart = offset_.GetX(); + break; + case FlexDirection::COLUMN: + viewportStart = offset_.GetY(); + break; + case FlexDirection::ROW_REVERSE: + viewportStart = -offset_.GetX(); + break; + case FlexDirection::COLUMN_REVERSE: + viewportStart = -offset_.GetY(); + break; + default: + break; + } + double viewportEnd = viewportStart + viewportSize; + + // Calculates the number of child nodes in the cache. + auto beginCached = std::lower_bound(posOfChildren_.begin(), posOfChildren_.end(), viewportEnd); + auto cachedNum = static_cast(std::distance(beginCached, posOfChildren_.end())); + + // Requests more child. + if ((cachedNum < cachedCount_)) { + int32_t remain = maxCount_ - (index_ + count_); + if (remain > 0 && callback_) { + callback_(index_ + count_, std::min(cachedCount_ - cachedNum, remain)); + } + } +} + +void RenderGrid::Traverse() +{ + if (GetChildren().empty()) { + return; + } + if (posOfChildren_.empty()) { + return; + } + + // Traverses child to update position and render flag. + int32_t gridPos = 0; + int32_t index = 0; + if (childrenChanged_) { + gridPositions_.clear(); + childRelations_.clear(); + } + for (const auto& item : GetChildren()) { + int32_t columnSpan = GetChildSpan(item); + columnSpan = std::min(columnSpan, columnCount_ - (gridPos % columnCount_)); + LOGD("GridPos %{private}d Span: %{private}d", gridPos, columnSpan); + SetChildPosition(item, posOfChildren_[gridPos], gridPos, columnSpan); + if (childrenChanged_) { + BuildPositionRelations(gridPos, columnSpan, index); + } + gridPos += columnSpan; + ++index; + } + childrenChanged_ = false; +} + +void RenderGrid::ResetScrollable() +{ + const auto isVertical = isVertical_; + auto&& callback = [weakGrid = AceType::WeakClaim(this), isVertical](double value, int32_t source) { + auto grid = weakGrid.Upgrade(); + if (!grid) { + LOGE("grid is nullptr when reset scrollable"); + return false; + } + if (source == SCROLL_FROM_START) { + return false; + } + Offset delta; + if (isVertical) { + delta.SetX(0.0); + delta.SetY(-value); + } else { + delta.SetX(-value); + delta.SetY(0.0); + } + return grid->UpdateOffset(delta); + }; + // Initializes scrollable with different direction. + if (isVertical) { + scrollable_ = AceType::MakeRefPtr(callback, Axis::VERTICAL); + } else { + scrollable_ = AceType::MakeRefPtr(callback, Axis::HORIZONTAL); + } + scrollable_->Initialize(GetContext()); + scrollable_->SetScrollEndCallback([weakGrid = AceType::WeakClaim(this)](void) { + auto grid = weakGrid.Upgrade(); + if (grid) { + grid->HandleScrollEnd(); + } + }); +} + +void RenderGrid::HandleTouchDown() +{ + onTouch_ = true; + triggerTouchUp_ = true; +} + +void RenderGrid::HandleTouchUp() +{ + onTouch_ = false; +} + +void RenderGrid::HandleTouchCancel() +{ + onTouch_ = false; +} + +void RenderGrid::HandleScrollEnd() +{ + LOGD("HandleScrollEnd"); + if (NearZero(offset_.GetX()) && NearZero(offset_.GetY())) { + reachTop_ = true; + } + switch (direction_) { + case FlexDirection::ROW: + if (NearEqual(offset_.GetX(), totalMainSize_ - GetLayoutSize().Width())) { + reachBottom_ = true; + } + break; + case FlexDirection::COLUMN: + if (NearEqual(offset_.GetY(), totalMainSize_ - GetLayoutSize().Height())) { + reachBottom_ = true; + } + break; + case FlexDirection::ROW_REVERSE: + if (NearEqual(offset_.GetX(), GetLayoutSize().Width() - totalMainSize_)) { + reachBottom_ = true; + } + break; + case FlexDirection::COLUMN_REVERSE: + if (NearEqual(offset_.GetY(), GetLayoutSize().Height() - totalMainSize_)) { + reachBottom_ = true; + } + break; + default: + break; + } + OnScrollEnd(); + if (reachBottom_ && reachBetween_) { + OnScrollBottom(); + reachBottom_ = false; + reachBetween_ = false; + } + if (reachTop_ && reachBetween_) { + OnScrollTop(); + reachTop_ = false; + reachBetween_ = false; + } + OnScroll(0.0, 0.0, SCROLL_NONE); +} + +void RenderGrid::OnScroll(double scrollX, double scrollY, int32_t scrollState) const +{ + if (onScroll_) { + std::string param = std::string("\"scroll\",{\"scrollX\":") + .append(std::to_string(scrollX)) + .append(",\"scrollY\":") + .append(std::to_string(scrollY)) + .append(",\"scrollState\":") + .append(std::to_string(scrollState)) + .append("},null"); + onScroll_(param); + } +} + +void RenderGrid::OnScrollBottom() const +{ + LOGD("OnScrollBottom"); + if (onScrollBottom_) { + onScrollBottom_(std::string("\"scrollbottom\",null")); + } +} + +void RenderGrid::OnScrollTop() const +{ + LOGD("OnScrollTop"); + if (onScrollTop_) { + onScrollTop_(std::string("\"scrolltop\",null")); + } +} + +void RenderGrid::OnScrollEnd() const +{ + LOGD("OnScrollEnd"); + if (onScrollEnd_) { + onScrollEnd_(std::string("\"scrollend\",null")); + } +} + +void RenderGrid::OnScrollTouchUp() const +{ + LOGD("OnScrollTouchUp"); + if (onScrollTouchUp_) { + onScrollTouchUp_(std::string("\"scrolltouchup\",null")); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/grid/render_grid.h b/frameworks/core/components/grid/render_grid.h new file mode 100644 index 00000000..141ad37e --- /dev/null +++ b/frameworks/core/components/grid/render_grid.h @@ -0,0 +1,223 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GRID_RENDER_GRID_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GRID_RENDER_GRID_H + +#include +#include +#include + +#include "core/components/common/layout/constants.h" +#include "core/components/grid/grid_controller.h" +#include "core/components/scroll/scrollable.h" +#include "core/gestures/raw_recognizer.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +typedef std::map RelationMap; +typedef std::map ChildRelationsMap; + +class RenderGrid : public RenderNode { + DECLARE_ACE_TYPE(RenderGrid, RenderNode); + +public: + using BuildGridDataFunc = std::function; + using OnScrollFunc = std::function; + + RenderGrid(); + ~RenderGrid() override = default; + + static RefPtr Create(); + + void OnChildAdded(const RefPtr& renderNode) override; + + void Update(const RefPtr& component) override; + + void PerformLayout() override; + + void RegisterCallback(const BuildGridDataFunc& callback) + { + callback_ = callback; + } + + Offset LimitOffset(const Offset& offset); + + // update offset with delta value. + bool UpdateOffset(const Offset& delta); + + // Support to grid element response focus event. + int32_t RequestNextFocus(bool vertical, bool reverse, Offset position); + void HandleOnFocus(int32_t focusIndex); + void HandleOnBlur(); + + bool GetFocusState() const + { + return focused_; + } + + int32_t GetFocusIndex() const + { + return focusIndex_; + } + + int32_t GetCurrentIndex() const; + + double GetCurrentPosition() const; + + void JumpTo(int32_t index); + + void AnimateTo(int32_t index, float duration, const RefPtr& curve); + + void JumpTo(double position); + + void AnimateTo(double position, float duration, const RefPtr& curve); + + void ScrollBy(int32_t pixelX, int32_t pixelY, bool smooth); + + void HandleTouchDown(); + + void HandleTouchUp(); + + void HandleTouchCancel(); + + void HandleScrollEnd(); + +protected: + void OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) override; + + LayoutParam MakeInnerLayoutParam(int32_t columnSpan) const; + + // If the cache is not enough during the traversal, the request of the child node is performed. + void RequestChildIfNeeded(); + + // Traverses all children to update render flag and position. + void Traverse(); + + template + T MakeValue(double mainValue, double crossValue) const + { + return isVertical_ ? T(crossValue, mainValue) : T(mainValue, crossValue); + } + + void CalculateAxisSize(); + + double GetMainSize(const Size& size) const + { + return isVertical_ ? size.Height() : size.Width(); + } + + double GetCrossSize(const Size& size) const + { + return isVertical_ ? size.Width() : size.Height(); + } + + Offset GetChildOffset(const RefPtr& child) const; + + // Sets child position, the mainAxis does not contain the offset. + void SetChildPosition(const RefPtr& child, double mainSize, int32_t gridPos, int32_t columnSpan); + + // If child is not full visible, move the layer and make it full visible. + void MoveChildToViewPort(int32_t index); + + // Get the target child by index. + RefPtr GetChildByIndex(int32_t index) const; + + // Get the center position for the target child. + Offset GetCenterPosition(const Offset& pos, const Size& size) const; + + // If the child is visible in the view port. + bool IsChildVisible(const RefPtr& node) const; + + // Build Position relation Map + void BuildPositionRelations(int32_t gridPos, int32_t columnSpan, int32_t index); + + int32_t FocusMove(const Offset& position, const std::function& condition, KeyDirection keyDirection, + bool checkChildVisible); + // Handle direction key up + int32_t focusMoveUp(const Offset& position); + + // Handle direction key down + int32_t focusMoveDown(const Offset& position); + + // Handle direction key left + int32_t focusMoveLeft(const Offset& position); + + // Handle direction key right + int32_t focusMoveRight(const Offset& position); + + void ResetScrollable(); + + void InitialGridProp(); + + int32_t GetChildSpan(const RefPtr& child) const; + + void OnScroll(double scrollX, double scrollY, int32_t scrollState) const; + void OnScrollBottom() const; + void OnScrollTop() const; + void OnScrollEnd() const; + void OnScrollTouchUp() const; + + // This saves the relative main axis value of all child nodes without grid drag offset. + std::vector posOfChildren_; + std::vector spanOfChildren_; + + bool isVertical_ = false; + bool updateFlag_ = false; + bool childrenChanged_ = true; + FlexDirection direction_ = FlexDirection::ROW; + FlexAlign crossAxisAlign_ = FlexAlign::STRETCH; + BuildGridDataFunc callback_; + OnScrollFunc onScroll_; + OnScrollFunc onScrollBottom_; + OnScrollFunc onScrollTop_; + OnScrollFunc onScrollEnd_; + OnScrollFunc onScrollTouchUp_; + + Offset offset_; + RefPtr scrollable_; + RefPtr gridController_; + RefPtr animator_; + RefPtr touchRecognizer_; // For receive touch event + bool onTouch_ = false; + bool reachTop_ = false; + bool reachBottom_ = false; + bool reachBetween_ = false; + bool triggerTouchUp_ = false; + int32_t focusIndex_ = -1; + int32_t focused_ = false; + ChildRelationsMap childRelations_; // Key:index Value:Relations + std::map indexPositions_; // Key:Child index Value:Grid + std::map gridPositions_; // Key:Grid Value:Child index + + double totalMainSize_ = 0.0; // Width When vertical, Height when horizontal + double mainSize_ = 0.0; + double crossSize_ = 0.0; + double gridLen_ = 0.0; + double gridWidth_ = -1.0; + double gridHeight_ = -1.0; + int32_t index_ = 0; + int32_t count_ = 0; + int32_t maxCount_ = 0; + int32_t columnCount_ = 0; + int32_t columnExtent_ = 0; + int32_t cachedCount_ = 10; // the default value of cached child number. +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GRID_RENDER_GRID_H diff --git a/frameworks/core/components/grid/render_grid_item.cpp b/frameworks/core/components/grid/render_grid_item.cpp new file mode 100644 index 00000000..877c9346 --- /dev/null +++ b/frameworks/core/components/grid/render_grid_item.cpp @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/grid/render_grid_item.h" + +#include "base/utils/utils.h" +#include "core/components/grid/grid_item_component.h" + +namespace OHOS::Ace { + +RefPtr RenderGridItem::Create() +{ + return AceType::MakeRefPtr(); +} + +void RenderGridItem::Update(const RefPtr& component) +{ + const RefPtr gridItem = AceType::DynamicCast(component); + if (!gridItem) { + return; + } + SetColumnSpan(gridItem->GetColumnSpan()); + MarkNeedLayout(); +} + +void RenderGridItem::PerformLayout() +{ + if (GetChildren().empty()) { + LOGE("RenderGridItem: no child found in RenderGridItem!"); + } else { + auto child = GetChildren().front(); + child->Layout(GetLayoutParam()); + child->SetPosition(Offset::Zero()); + SetLayoutSize(child->GetLayoutSize()); + } +} + +void RenderGridItem::SetColumnSpan(int32_t span) +{ + if (span <= 0) { + LOGE("Invalid span: %{public}d", span); + return; + } + columnSpan_ = span; +} + +int32_t RenderGridItem::GetColumnSpan() const +{ + return columnSpan_; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/grid/render_grid_item.h b/frameworks/core/components/grid/render_grid_item.h new file mode 100644 index 00000000..0681565c --- /dev/null +++ b/frameworks/core/components/grid/render_grid_item.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GRID_RENDER_GRID_ITEM_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GRID_RENDER_GRID_ITEM_H + +#include "core/components/common/layout/constants.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderGridItem : public RenderNode { + DECLARE_ACE_TYPE(RenderGridItem, RenderNode); + +public: + static RefPtr Create(); + + void Update(const RefPtr& component) override; + + void PerformLayout() override; + + void SetColumnSpan(int32_t span); + + int32_t GetColumnSpan() const; + +private: + int32_t columnSpan_ = 1; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GRID_RENDER_GRID_ITEM_H diff --git a/frameworks/core/components/grid_layout/BUILD.gn b/frameworks/core/components/grid_layout/BUILD.gn new file mode 100644 index 00000000..e8dbf5d9 --- /dev/null +++ b/frameworks/core/components/grid_layout/BUILD.gn @@ -0,0 +1,26 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("grid_layout") { + sources = [ + "flutter_render_grid_layout.cpp", + "grid_layout_component.cpp", + "grid_layout_element.cpp", + "grid_layout_item_component.cpp", + "grid_layout_item_element.cpp", + "render_grid_layout.cpp", + "render_grid_layout_item.cpp", + ] +} diff --git a/frameworks/core/components/grid_layout/flutter_render_grid_layout.cpp b/frameworks/core/components/grid_layout/flutter_render_grid_layout.cpp new file mode 100644 index 00000000..ab809b06 --- /dev/null +++ b/frameworks/core/components/grid_layout/flutter_render_grid_layout.cpp @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/grid_layout/flutter_render_grid_layout.h" + +#include "core/pipeline/base/flutter_render_context.h" + +namespace OHOS::Ace { + +using namespace Flutter; + +RefPtr RenderGridLayout::Create() +{ + return AceType::MakeRefPtr(); +} + +RenderLayer FlutterRenderGridLayout::GetRenderLayer() +{ + if (!layer_) { + layer_ = AceType::MakeRefPtr(0.0, GetLayoutSize().Width(), + 0.0, GetLayoutSize().Height(), Clip::HARD_EDGE); + } + return AceType::RawPtr(layer_); +} + +void FlutterRenderGridLayout::Paint(RenderContext& context, const Offset& offset) +{ + LOGD("Paint %{public}lf %{public}lf", GetLayoutSize().Width(), GetLayoutSize().Height()); + layer_->SetClip(0.0, GetLayoutSize().Width(), 0.0, GetLayoutSize().Height(), Clip::HARD_EDGE); + RenderNode::Paint(context, offset); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/grid_layout/flutter_render_grid_layout.h b/frameworks/core/components/grid_layout/flutter_render_grid_layout.h new file mode 100644 index 00000000..520afa68 --- /dev/null +++ b/frameworks/core/components/grid_layout/flutter_render_grid_layout.h @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GRID_LAYOUT_FLUTTER_RENDER_GRID_LAYOUT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GRID_LAYOUT_FLUTTER_RENDER_GRID_LAYOUT_H + +#include "core/components/grid_layout/render_grid_layout.h" +#include "core/pipeline/layers/clip_layer.h" + +namespace OHOS::Ace { + +class FlutterRenderGridLayout : public RenderGridLayout { + DECLARE_ACE_TYPE(FlutterRenderGridLayout, RenderGridLayout); + +public: + FlutterRenderGridLayout() = default; + ~FlutterRenderGridLayout() override = default; + + RenderLayer GetRenderLayer() override; + void Paint(RenderContext& context, const Offset& offset) override; + +private: + RefPtr layer_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GRID_LAYOUT_FLUTTER_RENDER_GRID_LAYOUT_H diff --git a/frameworks/core/components/grid_layout/grid_layout_component.cpp b/frameworks/core/components/grid_layout/grid_layout_component.cpp new file mode 100644 index 00000000..96264297 --- /dev/null +++ b/frameworks/core/components/grid_layout/grid_layout_component.cpp @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/grid_layout/grid_layout_component.h" + +#include "core/components/grid_layout/grid_layout_element.h" +#include "core/components/grid_layout/render_grid_layout.h" + +namespace OHOS::Ace { + +RefPtr GridLayoutComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +RefPtr GridLayoutComponent::CreateRenderNode() +{ + return RenderGridLayout::Create(); +} + +void GridLayoutComponent::SetDirection(FlexDirection direction) +{ + if (direction < FlexDirection::ROW || direction > FlexDirection::COLUMN_REVERSE) { + LOGW("Invalid direction %{public}d", direction); + return; + } + direction_ = direction; +} + +void GridLayoutComponent::SetFlexAlign(FlexAlign flexAlign) +{ + if (flexAlign < FlexAlign::FLEX_START || flexAlign > FlexAlign::STRETCH) { + LOGW("Invalid flexAlign %{public}d", flexAlign); + return; + } + flexAlign_ = flexAlign; +} + +void GridLayoutComponent::SetColumnCount(int32_t count) +{ + if (count <= 0) { + LOGW("Invalid ColumnCount %{public}d", count); + return; + } + columnCount_ = count; +} + +void GridLayoutComponent::SetRowCount(int32_t count) +{ + if (count <= 0) { + LOGW("Invalid RowCount %{public}d", count); + return; + } + rowCount_ = count; +} + +void GridLayoutComponent::SetWidth(double width) +{ + if (width <= 0.0) { + LOGW("Invalid Width %{public}lf", width); + return; + } + width_ = width; +} + +void GridLayoutComponent::SetHeight(double height) +{ + if (height <= 0.0) { + LOGW("Invalid Height %{public}lf", height); + return; + } + height_ = height; +} + +void GridLayoutComponent::SetColumnsArgs(const std::string& columnsArgs) +{ + columnsArgs_ = columnsArgs; +} + +void GridLayoutComponent::SetRowsArgs(const std::string& rowsArgs) +{ + rowsArgs_ = rowsArgs; +} + +void GridLayoutComponent::SetColumnGap(double columnGap) +{ + if (columnGap < 0.0) { + LOGW("Invalid ColumnGap %{public}lf", columnGap); + return; + } + columnGap_ = columnGap; +} + +void GridLayoutComponent::SetRowGap(double rowGap) +{ + if (rowGap < 0.0) { + LOGW("Invalid RowGap %{public}lf", rowGap); + return; + } + rowGap_ = rowGap; +} + +void GridLayoutComponent::SetRightToLeft(bool rightToLeft) +{ + LOGD("SetRightToLeft to %{public}d.", rightToLeft); + rightToLeft_ = rightToLeft; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/grid_layout/grid_layout_component.h b/frameworks/core/components/grid_layout/grid_layout_component.h new file mode 100644 index 00000000..aea77a67 --- /dev/null +++ b/frameworks/core/components/grid_layout/grid_layout_component.h @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GRID_LAYOUT_GRID_LAYOUT_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GRID_LAYOUT_GRID_LAYOUT_COMPONENT_H + +#include "base/utils/macros.h" +#include "core/components/common/layout/constants.h" +#include "core/pipeline/base/component_group.h" + +namespace OHOS::Ace { + +class ACE_EXPORT GridLayoutComponent : public ComponentGroup { + DECLARE_ACE_TYPE(GridLayoutComponent, ComponentGroup); + +public: + explicit GridLayoutComponent(const std::list>& children) + : ComponentGroup(children) {} + + ~GridLayoutComponent() override = default; + + RefPtr CreateElement() override; + + RefPtr CreateRenderNode() override; + + void SetDirection(FlexDirection direction); + void SetFlexAlign(FlexAlign flexAlign); + void SetColumnCount(int32_t count); + void SetRowCount(int32_t count); + void SetWidth(double width); + void SetHeight(double height); + void SetColumnsArgs(const std::string& columnsArgs); + void SetRowsArgs(const std::string& rowsArgs); + void SetColumnGap(double columnGap); + void SetRowGap(double rowGap); + void SetRightToLeft(bool rightToLeft); + + const std::string& GetColumnsArgs() const + { + return columnsArgs_; + } + + const std::string& GetRowsArgs() const + { + return rowsArgs_; + } + + double GetColumnGap() const + { + return columnGap_; + } + + double GetRowGap() const + { + return rowGap_; + } + + FlexDirection GetDirection() const + { + return direction_; + } + + FlexAlign GetFlexAlign() const + { + return flexAlign_; + } + + int32_t GetColumnCount() const + { + return columnCount_; + } + + int32_t GetRowCount() const + { + return rowCount_; + } + + double GetWidth() const + { + return width_; + } + + double GetHeight() const + { + return height_; + } + + bool GetRightToLeft() const + { + return rightToLeft_; + } + +private: + FlexDirection direction_ = FlexDirection::COLUMN; + FlexAlign flexAlign_ = FlexAlign::CENTER; + double width_ = -1.0; + double height_ = -1.0; + int32_t columnCount_ = 1; + int32_t rowCount_ = 1; + + std::string columnsArgs_; + std::string rowsArgs_; + double columnGap_ = 0.0; + double rowGap_ = 0.0; + bool rightToLeft_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GRID_LAYOUT_GRID_LAYOUT_COMPONENT_H diff --git a/frameworks/core/components/grid_layout/grid_layout_element.cpp b/frameworks/core/components/grid_layout/grid_layout_element.cpp new file mode 100644 index 00000000..b62d7ee9 --- /dev/null +++ b/frameworks/core/components/grid_layout/grid_layout_element.cpp @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/grid_layout/grid_layout_element.h" + +#include "base/log/log.h" +#include "base/utils/utils.h" +#include "core/components/grid_layout/grid_layout_component.h" +#include "core/components/grid_layout/render_grid_layout.h" +#include "core/components/proxy/render_item_proxy.h" +#include "core/pipeline/base/composed_element.h" + +namespace OHOS::Ace { + +RefPtr GridLayoutElement::CreateRenderNode() +{ + return ComponentGroupElement::CreateRenderNode(); +} + +void GridLayoutElement::Update() +{ + ComponentGroupElement::Update(); +} + +bool GridLayoutElement::RequestNextFocus(bool vertical, bool reverse, const Rect& rect) +{ + RefPtr grid = AceType::DynamicCast(renderNode_); + if (!grid) { + LOGE("Render grid is null."); + return false; + } + LOGI("RequestNextFocus vertical:%{public}d reverse:%{public}d.", vertical, reverse); + bool ret = false; + while (!ret) { + int32_t focusIndex = grid->RequestNextFocus(vertical, reverse); + int32_t size = GetChildrenList().size(); + if (focusIndex < 0 || focusIndex >= size) { + return false; + } + auto iter = GetChildrenList().begin(); + std::advance(iter, focusIndex); + auto focusNode = *iter; + if (!focusNode) { + LOGE("Target focus node is null."); + return false; + } + // If current Node can not obtain focus, move to next. + ret = focusNode->RequestFocusImmediately(); + } + return ret; +} + +void GridLayoutElement::Apply(const RefPtr& child) +{ + if (!child) { + LOGE("Element child is null"); + return; + } + + if (!renderNode_) { + LOGE("RenderElement don't have a render node"); + return; + } + + auto proxy = RenderItemProxy::Create(); + proxy->Attach(context_); + renderNode_->AddChild(proxy); + if (child->GetType() == RENDER_ELEMENT) { + // Directly attach the RenderNode if child is RenderElement. + RefPtr renderChild = AceType::DynamicCast(child); + if (renderChild) { + proxy->AddChild(renderChild->GetRenderNode()); + } + } else if (child->GetType() == COMPOSED_ELEMENT) { + // If child is ComposedElement, just set parent render node. + RefPtr composeChild = AceType::DynamicCast(child); + if (composeChild) { + composeChild->SetParentRenderNode(proxy); + } + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/grid_layout/grid_layout_element.h b/frameworks/core/components/grid_layout/grid_layout_element.h new file mode 100644 index 00000000..76d49369 --- /dev/null +++ b/frameworks/core/components/grid_layout/grid_layout_element.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GRID_LAYOUT_GRID_LAYOUT_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GRID_LAYOUT_GRID_LAYOUT_ELEMENT_H + +#include "core/pipeline/base/component_group_element.h" + +namespace OHOS::Ace { + +class GridLayoutElement : public ComponentGroupElement, public FocusGroup { + DECLARE_ACE_TYPE(GridLayoutElement, ComponentGroupElement, FocusGroup); + +public: + void Update() override; + bool RequestNextFocus(bool vertical, bool reverse, const Rect& rect) override; + +private: + RefPtr CreateRenderNode() override; + void Apply(const RefPtr&) override; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GRID_LAYOUT_GRID_LAYOUT_ELEMENT_H diff --git a/frameworks/core/components/grid_layout/grid_layout_item_component.cpp b/frameworks/core/components/grid_layout/grid_layout_item_component.cpp new file mode 100644 index 00000000..6620a779 --- /dev/null +++ b/frameworks/core/components/grid_layout/grid_layout_item_component.cpp @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/grid_layout/grid_layout_item_component.h" + +#include "core/components/grid_layout/grid_layout_item_element.h" +#include "core/components/grid_layout/render_grid_layout_item.h" + +namespace OHOS::Ace { + +RefPtr GridLayoutItemComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +RefPtr GridLayoutItemComponent::CreateRenderNode() +{ + return RenderGridLayoutItem::Create(); +} + +void GridLayoutItemComponent::SetColumnIndex(int32_t columnIndex) +{ + if (columnIndex < 0) { + return; + } + columnIndex_ = columnIndex; +} + +void GridLayoutItemComponent::SetRowIndex(int32_t rowIndex) +{ + if (rowIndex < 0) { + return; + } + rowIndex_ = rowIndex; +} + +void GridLayoutItemComponent::SetColumnSpan(int32_t columnSpan) +{ + if (columnSpan <= 0) { + LOGW("Invalid columnSpan %{public}d", columnSpan); + return; + } + columnSpan_ = columnSpan; +} + +void GridLayoutItemComponent::SetRowSpan(int32_t rowSpan) +{ + if (rowSpan <= 0) { + LOGW("Invalid rowSpan %{public}d", rowSpan); + return; + } + rowSpan_ = rowSpan; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/grid_layout/grid_layout_item_component.h b/frameworks/core/components/grid_layout/grid_layout_item_component.h new file mode 100644 index 00000000..760e0c55 --- /dev/null +++ b/frameworks/core/components/grid_layout/grid_layout_item_component.h @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GRID_LAYOUT_GRID_LAYOUT_ITEM_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GRID_LAYOUT_GRID_LAYOUT_ITEM_COMPONENT_H + +#include "base/utils/macros.h" +#include "core/pipeline/base/sole_child_component.h" + +namespace OHOS::Ace { + +class ACE_EXPORT GridLayoutItemComponent : public SoleChildComponent { + DECLARE_ACE_TYPE(GridLayoutItemComponent, SoleChildComponent); + +public: + GridLayoutItemComponent() = default; + explicit GridLayoutItemComponent(const RefPtr& child) + : SoleChildComponent(child) {} + ~GridLayoutItemComponent() override = default; + + RefPtr CreateRenderNode() override; + + RefPtr CreateElement() override; + + void SetColumnIndex(int32_t columnIndex); + void SetRowIndex(int32_t rowIndex); + void SetColumnSpan(int32_t columnSpan); + void SetRowSpan(int32_t rowSpan); + + void SetClickedEventId(const EventMarker& eventId) + { + clickEventId_ = eventId; + } + + const EventMarker& GetClickedEventId() const + { + return clickEventId_; + } + + int32_t GetColumnIndex() const + { + return columnIndex_; + } + + int32_t GetRowIndex() const + { + return rowIndex_; + } + + int32_t GetColumnSpan() const + { + return columnSpan_; + } + + int32_t GetRowSpan() const + { + return rowSpan_; + } + +private: + EventMarker clickEventId_; + int32_t columnIndex_ = -1; + int32_t rowIndex_ = -1; + int32_t columnSpan_ = 1; + int32_t rowSpan_ = 1; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GRID_LAYOUT_GRID_LAYOUT_ITEM_COMPONENT_H diff --git a/frameworks/core/components/grid_layout/grid_layout_item_element.cpp b/frameworks/core/components/grid_layout/grid_layout_item_element.cpp new file mode 100644 index 00000000..cfbc156f --- /dev/null +++ b/frameworks/core/components/grid_layout/grid_layout_item_element.cpp @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/grid_layout/grid_layout_item_element.h" + +#include "core/components/grid_layout/render_grid_layout_item.h" + +namespace OHOS::Ace { + +RefPtr GridLayoutItemElement::CreateRenderNode() +{ + SetOnFocusCallback([weak = WeakClaim(this)](void) { + auto element = weak.Upgrade(); + if (element) { + element->HandleOnFocus(); + } + }); + return SoleChildElement::CreateRenderNode(); +} + +void GridLayoutItemElement::HandleOnFocus() +{ + auto gridLayoutItem = AceType::DynamicCast(GetRenderNode()); + if (gridLayoutItem) { + gridLayoutItem->HandleOnFocus(); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/grid_layout/grid_layout_item_element.h b/frameworks/core/components/grid_layout/grid_layout_item_element.h new file mode 100644 index 00000000..6dc206df --- /dev/null +++ b/frameworks/core/components/grid_layout/grid_layout_item_element.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GRID_LAYOUT_GRID_LAYOUT_ITEM_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GRID_LAYOUT_GRID_LAYOUT_ITEM_ELEMENT_H + +#include "core/pipeline/base/sole_child_element.h" + +namespace OHOS::Ace { + +class GridLayoutItemElement : public SoleChildElement, public FocusGroup { + DECLARE_ACE_TYPE(GridLayoutItemElement, SoleChildElement, FocusGroup); + +public: + void HandleOnFocus(); + + bool RequestNextFocus(bool vertical, bool reverse, const Rect& rect) override + { + // Grid Item just one child, all focus move event make it blur. + return false; + } + +private: + RefPtr CreateRenderNode() override; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GRID_LAYOUT_GRID_LAYOUT_ITEM_ELEMENT_H diff --git a/frameworks/core/components/grid_layout/render_grid_layout.cpp b/frameworks/core/components/grid_layout/render_grid_layout.cpp new file mode 100644 index 00000000..782d351c --- /dev/null +++ b/frameworks/core/components/grid_layout/render_grid_layout.cpp @@ -0,0 +1,731 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/grid_layout/render_grid_layout.h" + +#include +#include +#include +#include + +#include "base/log/event_report.h" +#include "base/log/log.h" +#include "base/utils/string_utils.h" +#include "base/utils/utils.h" +#include "core/animation/curve_animation.h" +#include "core/components/grid_layout/grid_layout_component.h" +#include "core/components/grid_layout/render_grid_layout_item.h" +#include "core/event/ace_event_helper.h" + +namespace OHOS::Ace { +namespace { + +constexpr int32_t DEFAULT_DEPTH = 10; +constexpr bool HORIZONTAL = false; +constexpr bool VERTICAL = true; +constexpr bool FORWARD = false; +constexpr bool REVERSE = true; +constexpr double FULL_PERCENT = 100.0; +constexpr uint32_t REPEAT_MIN_SIZE = 6; +const char UNIT_PIXEL[] = "px"; +const char UNIT_PERCENT[] = "%"; +const char UNIT_RATIO[] = "fr"; +const char UNIT_AUTO[] = "auto"; +const char UNIT_AUTO_FILL[] = "auto-fill"; +const char REPEAT_PREFIX[] = "repeat"; +const std::regex REPEAT_NUM_REGEX(R"(^repeat\((\d+),(.+)\))", std::regex::icase); // regex for "repeat(2, 100px)" +const std::regex AUTO_REGEX(R"(^repeat\((.+),(.+)\))", std::regex::icase); // regex for "repeat(auto-fill, 10px)" + +// first bool mean if vertical, second bool mean if reverse +// false, false --> RIGHT +// false, true --> LEFT +// true, false --> DOWN +// true, true ---> UP +// This map will adapter the Grid FlexDirection with Key Direction. +const std::map>> DIRECTION_MAP = { + { false, // RTL is false + { + { HORIZONTAL, { { FORWARD, KeyDirection::RIGHT }, { REVERSE, KeyDirection::LEFT } } }, + { VERTICAL, { { FORWARD, KeyDirection::DOWN }, { REVERSE, KeyDirection::UP } } } + } + }, + { true, // RTL is true + { + { HORIZONTAL, { { FORWARD, KeyDirection::LEFT }, { REVERSE, KeyDirection::RIGHT } } }, + { VERTICAL, { { FORWARD, KeyDirection::DOWN }, { REVERSE, KeyDirection::UP } } } + } + } +}; + +} // namespace + +void RenderGridLayout::OnChildAdded(const RefPtr& renderNode) +{ + RenderNode::OnChildAdded(renderNode); +} + +void RenderGridLayout::Update(const RefPtr& component) +{ + const RefPtr grid = AceType::DynamicCast(component); + if (!grid) { + LOGE("RenderGridLayout update failed."); + EventReport::SendRenderException(RenderExcepType::RENDER_COMPONENT_ERR); + return; + } + + updateFlag_ = true; + direction_ = grid->GetDirection(); + crossAxisAlign_ = grid->GetFlexAlign(); + gridWidth_ = grid->GetWidth(); + gridHeight_ = grid->GetHeight(); + colsArgs_ = grid->GetColumnsArgs(); + rowsArgs_ = grid->GetRowsArgs(); + colGap_ = grid->GetColumnGap(); + rowGap_ = grid->GetRowGap(); + rightToLeft_ = grid->GetRightToLeft(); + + if (direction_ == FlexDirection::COLUMN) { + isVertical_ = true; + } else { + isVertical_ = false; + } + + MarkNeedLayout(); +} + +void RenderGridLayout::UpdateFocusInfo(int32_t focusIndex) +{ + if (focusIndex < 0) { + LOGW("Invalid focus index, update focus info failed."); + return; + } + if (focusIndex != focusIndex_) { + LOGD("Update focus index from %{public}d to %{public}d", focusIndex_, focusIndex); + focusIndex_ = focusIndex; + for (const auto& gridMap : gridMatrix_) { + for (const auto& grid : gridMap.second) { + if (grid.second == focusIndex) { + focusRow_ = gridMap.first; + focusCol_ = grid.first; + } + } + } + } +} + +int32_t RenderGridLayout::RequestNextFocus(bool vertical, bool reverse) +{ + KeyDirection key = DIRECTION_MAP.at(rightToLeft_).at(vertical).at(reverse); + int32_t index = focusMove(key); + if (index < 0) { + return index; + } + return focusIndex_; +} + +// Handle direction key move +int32_t RenderGridLayout::focusMove(KeyDirection direction) +{ + int32_t nextRow = focusRow_; + int32_t nextCol = focusCol_; + int32_t next = focusIndex_; + while (focusIndex_ == next || next < 0) { + switch (direction) { + case KeyDirection::UP: + --nextRow; + break; + case KeyDirection::DOWN: + ++nextRow; + break; + case KeyDirection::LEFT: + --nextCol; + break; + case KeyDirection::RIGHT: + ++nextCol; + break; + default: + return -1; + } + if (nextRow < 0 || nextCol < 0 || nextRow >= rowCount_ || nextCol >= colCount_) { + return -1; + } + next = GetIndexByGrid(nextRow, nextCol); + } + LOGI("PreFocus:%{public}d CurrentFocus:%{public}d", focusIndex_, next); + focusRow_ = nextRow; + focusCol_ = nextCol; + focusIndex_ = next; + return next; +} + +int32_t RenderGridLayout::GetIndexByGrid(int32_t row, int32_t column) const +{ + auto rowIter = gridMatrix_.find(row); + if (rowIter != gridMatrix_.end()) { + auto colIter = rowIter->second.find(column); + if (colIter != rowIter->second.end()) { + return colIter->second; + } + } + return -1; +} + +LayoutParam RenderGridLayout::MakeInnerLayoutParam(int32_t row, int32_t col, int32_t rowSpan, int32_t colSpan) const +{ + LOGD("%{public}d %{public}d %{public}d %{public}d", row, col, rowSpan, colSpan); + LayoutParam innerLayout; + double rowLen = 0.0; + double colLen = 0.0; + for (int32_t i = 0; i < rowSpan; ++i) { + rowLen += gridCells_.at(row + i).at(col).Height(); + } + rowLen += (rowSpan - 1) * rowGap_; + for (int32_t i = 0; i < colSpan; ++i) { + colLen += gridCells_.at(row).at(col + i).Width(); + } + colLen += (colSpan - 1) * colGap_; + if (crossAxisAlign_ == FlexAlign::STRETCH) { + innerLayout.SetMinSize(Size(colLen, rowLen)); + innerLayout.SetMaxSize(Size(colLen, rowLen)); + } else { + innerLayout.SetMaxSize(Size(colLen, rowLen)); + } + return innerLayout; +} + +void RenderGridLayout::SetChildPosition( + const RefPtr& child, int32_t row, int32_t col, int32_t rowSpan, int32_t colSpan) +{ + if (focusRow_ < 0 && focusCol_ < 0) { + // Make the first item obtain focus. + focusRow_ = row; + focusCol_ = col; + } + + // Calculate the position for current child. + double positionX = 0.0; + double positionY = 0.0; + for (int32_t i = 0; i < row; ++i) { + positionY += gridCells_.at(i).at(0).Height(); + } + positionY += row * rowGap_; + for (int32_t i = 0; i < col; ++i) { + positionX += gridCells_.at(0).at(i).Width(); + } + positionX += col * colGap_; + + // Calculate the size for current child. + double rowLen = 0.0; + double colLen = 0.0; + for (int32_t i = 0; i < rowSpan; ++i) { + rowLen += gridCells_.at(row + i).at(col).Height(); + } + rowLen += (rowSpan - 1) * rowGap_; + for (int32_t i = 0; i < colSpan; ++i) { + colLen += gridCells_.at(row).at(col + i).Width(); + } + colLen += (colSpan - 1) * colGap_; + + // If RTL, place the item from right. + if (rightToLeft_) { + positionX = colSize_ - positionX - colLen; + } + + double widthOffset = (colLen - child->GetLayoutSize().Width()) / 2.0; + double heightOffset = (rowLen - child->GetLayoutSize().Height()) / 2.0; + child->SetPosition(Offset(positionX + widthOffset, positionY + heightOffset)); +} + +void RenderGridLayout::DisableChild(const RefPtr& child, int32_t index) +{ + LOGW("No grid space for this item[%{public}d]", index); + LayoutParam zeroLayout; + zeroLayout.SetMinSize(Size(0.0, 0.0)); + zeroLayout.SetMaxSize(Size(0.0, 0.0)); + child->Layout(zeroLayout); + child->SetPosition(Offset(0.0, 0.0)); +} + +Size RenderGridLayout::GetTargetLayoutSize(int32_t row, int32_t col) +{ + Size size; + if (GetChildren().empty()) { + return size; + } + LayoutParam innerLayout; // Init layout param for auto item. + innerLayout.SetMaxSize(Size(colSize_, rowSize_)); + std::vector rows, cols; + StringUtils::StringSpliter(rowsArgs_, ' ', rows); + rowCount_ = rows.size() == 0 ? 1 : rows.size(); + StringUtils::StringSpliter(colsArgs_, ' ', cols); + colCount_ = cols.size() == 0 ? 1 : cols.size(); + int32_t rowIndex = 0; + int32_t colIndex = 0; + int32_t itemIndex = 0; + for (const auto& item : GetChildren()) { + int32_t itemRow = GetItemRowIndex(item); + int32_t itemCol = GetItemColumnIndex(item); + int32_t itemRowSpan = GetItemSpan(item, true); + int32_t itemColSpan = GetItemSpan(item, false); + if (itemRow >= 0 && itemRow < rowCount_ && itemCol >= 0 && itemCol < colCount_ && + CheckGridPlaced(itemIndex, itemRow, itemCol, itemRowSpan, itemColSpan)) { + if (itemRow == row && itemCol == col) { + item->Layout(innerLayout); + return item->GetLayoutSize(); + } + } else { + while (!CheckGridPlaced(itemIndex, rowIndex, colIndex, itemRowSpan, itemColSpan)) { + GetNextGird(rowIndex, colIndex); + if (rowIndex >= rowCount_ || colIndex >= colCount_) { + break; + } + } + if (rowIndex == row && colIndex == col) { + item->Layout(innerLayout); + return item->GetLayoutSize(); + } + } + ++itemIndex; + } + return size; +} + +std::string RenderGridLayout::PreParseRows() +{ + if (rowsArgs_.empty() || rowsArgs_.find(UNIT_AUTO) == std::string::npos) { + return rowsArgs_; + } + std::string rowsArgs; + std::vector strs; + StringUtils::StringSpliter(rowsArgs_, ' ', strs); + std::string current; + int32_t rowArgSize = strs.size(); + for (int32_t i = 0; i < rowArgSize; ++i) { + current = strs[i]; + if (strs[i] == std::string(UNIT_AUTO)) { + Size layoutSize = GetTargetLayoutSize(i, 0); + current = StringUtils::DoubleToString(layoutSize.Height()) + std::string(UNIT_PIXEL); + gridMatrix_.clear(); + } + rowsArgs += ' ' + current; + } + return rowsArgs; +} + +std::string RenderGridLayout::PreParseCols() +{ + if (colsArgs_.empty() || colsArgs_.find(UNIT_AUTO) == std::string::npos) { + return colsArgs_; + } + std::string colsArgs; + std::vector strs; + StringUtils::StringSpliter(colsArgs_, ' ', strs); + std::string current; + int32_t colArgSize = strs.size(); + for (int32_t i = 0; i < colArgSize; ++i) { + current = strs[i]; + if (strs[i] == std::string(UNIT_AUTO)) { + Size layoutSize = GetTargetLayoutSize(0, i); + current = StringUtils::DoubleToString(layoutSize.Width()) + std::string(UNIT_PIXEL); + gridMatrix_.clear(); + } + colsArgs += ' ' + current; + } + return colsArgs; +} + +void RenderGridLayout::InitialGridProp() +{ + // Not first time layout after update, no need to initial. + if (!updateFlag_) { + return; + } + + rowSize_ = ((gridHeight_ > 0.0) && (gridHeight_ < GetLayoutParam().GetMaxSize().Height())) ? + gridHeight_ : GetLayoutParam().GetMaxSize().Height(); + colSize_ = ((gridWidth_ > 0.0) && (gridWidth_ < GetLayoutParam().GetMaxSize().Width())) ? + gridWidth_ : GetLayoutParam().GetMaxSize().Width(); + if (NearEqual(rowSize_, Size::INFINITE_SIZE) && (rowsArgs_.find(UNIT_PERCENT) != std::string::npos || + rowsArgs_.find(UNIT_RATIO) != std::string::npos)) { + rowSize_ = viewPort_.Height(); + } + if (NearEqual(colSize_, Size::INFINITE_SIZE) && (colsArgs_.find(UNIT_PERCENT) != std::string::npos || + colsArgs_.find(UNIT_RATIO) != std::string::npos)) { + colSize_ = viewPort_.Width(); + } + LOGD("Row[%{public}s]: %{public}lf %{public}lf", rowsArgs_.c_str(), rowSize_, rowGap_); + LOGD("Col[%{public}s]: %{public}lf %{public}lf", colsArgs_.c_str(), colSize_, colGap_); + std::vector rows = ParseArgs(PreParseRows(), rowSize_, rowGap_); + std::vector cols = ParseArgs(PreParseCols(), colSize_, colGap_); + if (rows.empty()) { + rows.push_back(rowSize_); + } + if (cols.empty()) { + cols.push_back(colSize_); + } + if (NearEqual(rowSize_, Size::INFINITE_SIZE)) { + rowSize_ = std::accumulate(rows.begin(), rows.end(), (rows.size() - 1) * rowGap_); + } + if (NearEqual(colSize_, Size::INFINITE_SIZE)) { + colSize_ = std::accumulate(cols.begin(), cols.end(), (cols.size() - 1) * colGap_); + } + // Initialize the columnCount and rowCount, default is 1 + colCount_ = cols.size(); + rowCount_ = rows.size(); + gridCells_.clear(); + int32_t row = 0; + for (auto height : rows) { + int32_t col = 0; + for (auto width : cols) { + gridCells_[row][col] = Size(width, height); + ++col; + } + ++row; + } + UpdateAccessibilityAttr(); + LOGD("GridLayout: %{public}lf %{public}lf %{public}d %{public}d", colSize_, rowSize_, colCount_, rowCount_); +} + +void RenderGridLayout::UpdateAccessibilityAttr() +{ + auto refPtr = accessibilityNode_.Upgrade(); + if (!refPtr) { + LOGE("GetAccessibilityNode failed."); + return; + } + auto collectionInfo = refPtr->GetCollectionInfo(); + collectionInfo.rows = rowCount_; + collectionInfo.columns = colCount_; + refPtr->SetCollectionInfo(collectionInfo); +} + +// Support five ways below: +// (1) 50px 100px 60px +// (2) 1fr 1fr 2fr +// (3) 30% 20% 50% +// (4) repeat(2,100px 20%) -- will be prebuild by JS Engine to --- 100px 20% 100px 20% +// (5) repeat(auto-fill, 100px 300px) -- will be prebuild by JS Engine to --- auto-fill 100px 300px +std::vector RenderGridLayout::ParseArgs(const std::string& agrs, double size, double gap) +{ + std::vector lens; + if (agrs.empty()) { + return lens; + } + double pxSum = 0.0; // First priority: such as 50px + double peSum = 0.0; // Second priority: such as 20% + double frSum = 0.0; // Third priority: such as 2fr + std::vector strs; + std::string handledArg = agrs; + ConvertRepeatArgs(handledArg); + StringUtils::StringSpliter(handledArg, ' ', strs); + if (!strs.empty() && strs[0] == UNIT_AUTO_FILL) { + return ParseAutoFill(strs, size, gap); + } + // first loop calculate all type sums. + for (auto str : strs) { + if (str.find(UNIT_PIXEL) != std::string::npos) { + pxSum += StringUtils::StringToDouble(str); + } else if (str.find(UNIT_PERCENT) != std::string::npos) { + peSum += StringUtils::StringToDouble(str); + } else if (str.find(UNIT_RATIO) != std::string::npos) { + frSum += StringUtils::StringToDouble(str); + } else { + LOGE("Unsupported type: %{public}s, and use 0.0", str.c_str()); + } + } + if (GreatOrEqual(peSum, FULL_PERCENT)) { + peSum = FULL_PERCENT; + } + // Second loop calculate actual width or height. + double sizeLeft = size - (strs.size() - 1) * gap; + double prSumLeft = FULL_PERCENT; + double frSizeSum = size * (FULL_PERCENT - peSum) / FULL_PERCENT - (strs.size() - 1) * gap - pxSum; + for (const auto& str : strs) { + double num = StringUtils::StringToDouble(str); + if (str.find(UNIT_PIXEL) != std::string::npos) { + lens.push_back(sizeLeft < 0.0 ? 0.0 : std::clamp(num, 0.0, sizeLeft)); + sizeLeft -= num; + } else if (str.find(UNIT_PERCENT) != std::string::npos) { + num = prSumLeft < num ? prSumLeft : num; + auto prSize = size * num / FULL_PERCENT; + lens.push_back(prSize); + prSumLeft -= num; + sizeLeft -= prSize; + } else if (str.find(UNIT_RATIO) != std::string::npos) { + lens.push_back(NearZero(frSum) ? 0.0 : frSizeSum / frSum * num); + } else { + lens.push_back(0.0); + } + } + return lens; +} + +void RenderGridLayout::ConvertRepeatArgs(std::string& handledArg) +{ + if (handledArg.find(REPEAT_PREFIX) == std::string::npos) { + return; + } + handledArg.erase(0, handledArg.find_first_not_of(" ")); // trim the input str + std::smatch matches; + if (handledArg.find(UNIT_AUTO_FILL) != std::string::npos) { + if (handledArg.size() > REPEAT_MIN_SIZE && std::regex_match(handledArg, matches, AUTO_REGEX)) { + handledArg = matches[1].str() + matches[2].str(); + } + } else { + if (handledArg.size() > REPEAT_MIN_SIZE && std::regex_match(handledArg, matches, REPEAT_NUM_REGEX)) { + auto count = StringUtils::StringToInt(matches[1].str()); + handledArg = matches[2].str(); + while (count > 1) { + handledArg.append(matches[2].str()); + --count; + } + } + } +} + +std::vector RenderGridLayout::ParseAutoFill(const std::vector& strs, double size, double gap) +{ + std::vector lens; + if (strs.size() <= 1) { + return lens; + } + auto allocatedSize = size - (strs.size() - 2) * gap; // size() - 2 means 'auto-fill' should be erased. + double pxSum = 0.0; + double peSum = 0.0; + for (const auto& str : strs) { + auto num = StringUtils::StringToDouble(str); + if (str.find(UNIT_PIXEL) != std::string::npos) { + num = pxSum > allocatedSize ? 0.0 : num; + pxSum += num; + lens.emplace_back(num); + } else if (str.find(UNIT_PERCENT) != std::string::npos) { + // adjust invalid percent + num = peSum >= FULL_PERCENT ? 0.0 : num; + peSum += num; + pxSum += num / FULL_PERCENT * size; + lens.emplace_back(num / FULL_PERCENT * size); + } else { + LOGD("Unsupported type: %{public}s, and use 0.0", str.c_str()); + } + } + allocatedSize -= pxSum; + if (LessOrEqual(allocatedSize, 0.0)) { + return lens; + } + pxSum += lens.size() * gap; + int32_t repeatCount = allocatedSize / pxSum; + std::vector newLens; + for (int32_t i = 0; i < repeatCount + 1; i++) { + newLens.insert(newLens.end(), lens.begin(), lens.end()); + } + allocatedSize -= pxSum * repeatCount; + for (auto lenIter = lens.begin(); lenIter != lens.end(); lenIter++) { + allocatedSize -= *lenIter + gap; + if (LessNotEqual(allocatedSize, 0.0)) { + break; + } + newLens.emplace_back(*lenIter); + } + return newLens; +} + +void RenderGridLayout::SetItemIndex(const RefPtr& child, int32_t index) +{ + int32_t depth = DEFAULT_DEPTH; + auto item = child; + auto gridLayoutItem = AceType::DynamicCast(item); + while (!gridLayoutItem && depth > 0) { + if (!item || item->GetChildren().empty()) { + return; + } + item = item->GetChildren().front(); + gridLayoutItem = AceType::DynamicCast(item); + --depth; + } + if (gridLayoutItem) { + gridLayoutItem->SetIndex(index); + } +} + +int32_t RenderGridLayout::GetItemRowIndex(const RefPtr& child) const +{ + int32_t depth = DEFAULT_DEPTH; + int32_t rowIndex = -1; + auto item = child; + auto gridLayoutItem = AceType::DynamicCast(item); + while (!gridLayoutItem && depth > 0) { + if (!item || item->GetChildren().empty()) { + return rowIndex; + } + item = item->GetChildren().front(); + gridLayoutItem = AceType::DynamicCast(item); + --depth; + } + if (gridLayoutItem) { + rowIndex = gridLayoutItem->GetRowIndex(); + } + return rowIndex; +} + +int32_t RenderGridLayout::GetItemColumnIndex(const RefPtr& child) const +{ + int32_t depth = DEFAULT_DEPTH; + int32_t columnIndex = -1; + auto item = child; + auto gridLayoutItem = AceType::DynamicCast(item); + while (!gridLayoutItem && depth > 0) { + if (!item || item->GetChildren().empty()) { + return columnIndex; + } + item = item->GetChildren().front(); + gridLayoutItem = AceType::DynamicCast(item); + --depth; + } + if (gridLayoutItem) { + columnIndex = gridLayoutItem->GetColumnIndex(); + } + return columnIndex; +} + +int32_t RenderGridLayout::GetItemSpan(const RefPtr& child, bool isRow) const +{ + int32_t depth = DEFAULT_DEPTH; + int32_t span = -1; + auto item = child; + auto gridLayoutItem = AceType::DynamicCast(item); + while (!gridLayoutItem && depth > 0) { + if (!item || item->GetChildren().empty()) { + return span; + } + item = item->GetChildren().front(); + gridLayoutItem = AceType::DynamicCast(item); + --depth; + } + if (gridLayoutItem) { + span = isRow ? gridLayoutItem->GetRowSpan() : gridLayoutItem->GetColumnSpan(); + } + return span < 1 ? 1 : span; +} + +void RenderGridLayout::GetNextGird(int32_t& curRow, int32_t& curCol) const +{ + if (isVertical_) { + ++curCol; + if (curCol >= colCount_) { + curCol = 0; + ++curRow; + } + } else { + ++curRow; + if (curRow >= rowCount_) { + curRow = 0; + ++curCol; + } + } +} + +bool RenderGridLayout::CheckGridPlaced(int32_t index, int32_t row, int32_t col, int32_t& rowSpan, int32_t& colSpan) +{ + auto rowIter = gridMatrix_.find(row); + if (rowIter != gridMatrix_.end()) { + auto colIter = rowIter->second.find(col); + if (colIter != rowIter->second.end()) { + return false; + } + } + rowSpan = std::min(rowCount_ - row, rowSpan); + colSpan = std::min(colCount_ - col, colSpan); + int32_t rSpan = 0; + int32_t cSpan = 0; + int32_t retColSpan = 1; + while (rSpan < rowSpan) { + rowIter = gridMatrix_.find(rSpan + row); + if (rowIter != gridMatrix_.end()) { + cSpan = 0; + while (cSpan < colSpan) { + if (rowIter->second.find(cSpan + col) != rowIter->second.end()) { + colSpan = cSpan; + break; + } + ++cSpan; + } + } else { + cSpan = colSpan; + } + if (retColSpan > cSpan) { + break; + } + retColSpan = cSpan; + ++rSpan; + } + rowSpan = rSpan; + colSpan = retColSpan; + for (int32_t i = row; i < row + rowSpan; ++i) { + std::map rowMap; + auto iter = gridMatrix_.find(i); + if (iter != gridMatrix_.end()) { + rowMap = iter->second; + } + for (int32_t j = col; j < col + colSpan; ++j) { + rowMap.emplace(std::make_pair(j, index)); + } + gridMatrix_[i] = rowMap; + } + LOGD("%{public}d %{public}d %{public}d %{public}d %{public}d", index, row, col, rowSpan, colSpan); + return true; +} + +void RenderGridLayout::PerformLayout() +{ + if (GetChildren().empty()) { + return; + } + // Initialize the the grid layout prop + gridMatrix_.clear(); + InitialGridProp(); + int32_t rowIndex = 0; + int32_t colIndex = 0; + int32_t itemIndex = 0; + for (const auto& item : GetChildren()) { + int32_t itemRow = GetItemRowIndex(item); + int32_t itemCol = GetItemColumnIndex(item); + int32_t itemRowSpan = GetItemSpan(item, true); + int32_t itemColSpan = GetItemSpan(item, false); + if (itemRow >= 0 && itemRow < rowCount_ && itemCol >= 0 && itemCol < colCount_ && + CheckGridPlaced(itemIndex, itemRow, itemCol, itemRowSpan, itemColSpan)) { + item->Layout(MakeInnerLayoutParam(itemRow, itemCol, itemRowSpan, itemColSpan)); + SetChildPosition(item, itemRow, itemCol, itemRowSpan, itemColSpan); + } else { + while (!CheckGridPlaced(itemIndex, rowIndex, colIndex, itemRowSpan, itemColSpan)) { + GetNextGird(rowIndex, colIndex); + if (rowIndex >= rowCount_ || colIndex >= colCount_) { + break; + } + } + if (rowIndex >= rowCount_ || colIndex >= colCount_) { + DisableChild(item, itemIndex); + continue; + } + item->Layout(MakeInnerLayoutParam(rowIndex, colIndex, itemRowSpan, itemColSpan)); + SetChildPosition(item, rowIndex, colIndex, itemRowSpan, itemColSpan); + } + SetItemIndex(item, itemIndex); // Set index for focus adjust. + ++itemIndex; + LOGD("%{public}d %{public}d %{public}d %{public}d", rowIndex, colIndex, itemRowSpan, itemColSpan); + } + SetLayoutSize(GetLayoutParam().Constrain(Size(colSize_, rowSize_))); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/grid_layout/render_grid_layout.h b/frameworks/core/components/grid_layout/render_grid_layout.h new file mode 100644 index 00000000..01f35bdb --- /dev/null +++ b/frameworks/core/components/grid_layout/render_grid_layout.h @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GRID_LAYOUT_RENDER_GRID_LAYOUT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GRID_LAYOUT_RENDER_GRID_LAYOUT_H + +#include +#include +#include + +#include "core/components/common/layout/constants.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderGridLayout : public RenderNode { + DECLARE_ACE_TYPE(RenderGridLayout, RenderNode); + +public: + static RefPtr Create(); + + void OnChildAdded(const RefPtr& renderNode) override; + + void Update(const RefPtr& component) override; + + void PerformLayout() override; + + // Adjust focus index when grid_item request focus itself. + void UpdateFocusInfo(int32_t focusIndex); + + // Support to grid element response focus event. + int32_t RequestNextFocus(bool vertical, bool reverse); + +protected: + LayoutParam MakeInnerLayoutParam(int32_t row, int32_t col, int32_t rowSpan, int32_t colSpan) const; + + void SetItemIndex(const RefPtr& child, int32_t index); + + int32_t GetItemRowIndex(const RefPtr& child) const; + + int32_t GetItemColumnIndex(const RefPtr& child) const; + + int32_t GetItemSpan(const RefPtr& child, bool isRow) const; + + void GetNextGird(int32_t& curRow, int32_t& curCol) const; + + bool CheckGridPlaced(int32_t index, int32_t row, int32_t col, int32_t& rowSpan, int32_t& colSpan); + + int32_t GetIndexByGrid(int32_t row, int32_t column) const; + + // Sets child position, the mainAxis does not contain the offset. + void SetChildPosition(const RefPtr& child, int32_t row, int32_t col, int32_t rowSpan, int32_t colSpan); + + void DisableChild(const RefPtr& child, int32_t index); + + void ConvertRepeatArgs(std::string& args); + + // Handle direction key move + int32_t focusMove(KeyDirection direction); + + Size GetTargetLayoutSize(int32_t row, int32_t col); + + std::string PreParseRows(); + + std::string PreParseCols(); + + void InitialGridProp(); + + void UpdateAccessibilityAttr(); + + std::vector ParseArgs(const std::string& agrs, double size, double gap); + + std::vector ParseAutoFill(const std::vector& strs, double size, double gap); + + bool isVertical_ = false; + bool updateFlag_ = false; + FlexDirection direction_ = FlexDirection::ROW; + FlexAlign crossAxisAlign_ = FlexAlign::CENTER; + + int32_t focusRow_ = -1; + int32_t focusCol_ = -1; + int32_t focusIndex_ = 0; + + double colSize_ = 0.0; + double rowSize_ = 0.0; + double gridWidth_ = -1.0; + double gridHeight_ = -1.0; + int32_t colCount_ = 0; + int32_t rowCount_ = 0; + double colGap_ = 0.0; + double rowGap_ = 0.0; + std::string colsArgs_; + std::string rowsArgs_; + bool rightToLeft_ = false; + // Map structure: [rowIndex - (columnIndex, index)] + std::map> gridMatrix_; + // Map structure: [rowIndex - columnIndex - (width, height)] + std::map> gridCells_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GRID_LAYOUT_RENDER_GRID_LAYOUT_H diff --git a/frameworks/core/components/grid_layout/render_grid_layout_item.cpp b/frameworks/core/components/grid_layout/render_grid_layout_item.cpp new file mode 100644 index 00000000..1aecf001 --- /dev/null +++ b/frameworks/core/components/grid_layout/render_grid_layout_item.cpp @@ -0,0 +1,104 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/grid_layout/render_grid_layout_item.h" + +#include "base/utils/utils.h" +#include "core/components/grid_layout/grid_layout_item_component.h" +#include "core/components/grid_layout/render_grid_layout.h" + +namespace OHOS::Ace { + +RefPtr RenderGridLayoutItem::Create() +{ + return AceType::MakeRefPtr(); +} + +void RenderGridLayoutItem::Update(const RefPtr& component) +{ + const RefPtr gridItem = AceType::DynamicCast(component); + if (!gridItem) { + return; + } + SetColumnIndex(gridItem->GetColumnIndex()); + SetRowIndex(gridItem->GetRowIndex()); + SetColumnSpan(gridItem->GetColumnSpan()); + SetRowSpan(gridItem->GetRowSpan()); + MarkNeedLayout(); +} + +void RenderGridLayoutItem::PerformLayout() +{ + if (GetChildren().empty()) { + LOGE("RenderGridLayoutItem: no child found in RenderGridLayoutItem!"); + } else { + LOGD("PerformLayout column:%{public}d row:%{public}d", columnIndex_, rowIndex_); + auto child = GetChildren().front(); + child->Layout(GetLayoutParam()); + child->SetPosition(Offset::Zero()); + SetLayoutSize(child->GetLayoutSize()); + } +} + +void RenderGridLayoutItem::HandleOnFocus() +{ + auto parent = GetParent().Upgrade(); + while (parent) { + auto gridLayout = AceType::DynamicCast(parent); + if (gridLayout) { + gridLayout->UpdateFocusInfo(index_); + break; + } + parent = parent->GetParent().Upgrade(); + } +} + +void RenderGridLayoutItem::SetColumnIndex(int32_t columnIndex) +{ + if (columnIndex < 0) { + LOGW("Invalid columnIndex %{public}d", columnIndex); + return; + } + columnIndex_ = columnIndex; +} + +void RenderGridLayoutItem::SetRowIndex(int32_t rowIndex) +{ + if (rowIndex < 0) { + LOGW("Invalid rowIndex %{public}d", rowIndex); + return; + } + rowIndex_ = rowIndex; +} + +void RenderGridLayoutItem::SetColumnSpan(int32_t columnSpan) +{ + if (columnSpan <= 0) { + LOGW("Invalid columnSpan %{public}d", columnSpan); + return; + } + columnSpan_ = columnSpan; +} + +void RenderGridLayoutItem::SetRowSpan(int32_t rowSpan) +{ + if (rowSpan <= 0) { + LOGW("Invalid rowSpan %{public}d", rowSpan); + return; + } + rowSpan_ = rowSpan; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/grid_layout/render_grid_layout_item.h b/frameworks/core/components/grid_layout/render_grid_layout_item.h new file mode 100644 index 00000000..e962d447 --- /dev/null +++ b/frameworks/core/components/grid_layout/render_grid_layout_item.h @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GRID_LAYOUT_RENDER_GRID_LAYOUT_ITEM_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GRID_LAYOUT_RENDER_GRID_LAYOUT_ITEM_H + +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderGridLayoutItem : public RenderNode { + DECLARE_ACE_TYPE(RenderGridLayoutItem, RenderNode); + +public: + static RefPtr Create(); + + void Update(const RefPtr& component) override; + + void PerformLayout() override; + + void HandleOnFocus(); + + void SetColumnIndex(int32_t columnIndex); + void SetRowIndex(int32_t rowIndex); + void SetColumnSpan(int32_t columnSpan); + void SetRowSpan(int32_t rowSpan); + + int32_t GetColumnIndex() const + { + return columnIndex_; + } + + int32_t GetRowIndex() const + { + return rowIndex_; + } + + int32_t GetColumnSpan() const + { + return columnSpan_; + } + + int32_t GetRowSpan() const + { + return rowSpan_; + } + + void SetIndex(int32_t index) + { + index_ = index; + } + +private: + int32_t index_ = -1; + int32_t columnIndex_ = -1; + int32_t rowIndex_ = -1; + int32_t columnSpan_ = 1; + int32_t rowSpan_ = 1; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_GRID_LAYOUT_RENDER_GRID_LAYOUT_ITEM_H diff --git a/frameworks/core/components/image/BUILD.gn b/frameworks/core/components/image/BUILD.gn new file mode 100644 index 00000000..959ac6cb --- /dev/null +++ b/frameworks/core/components/image/BUILD.gn @@ -0,0 +1,24 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("image") { + sources = [ + "flutter_render_image.cpp", + "image_animator_component.cpp", + "image_animator_element.cpp", + "image_component.cpp", + "render_image.cpp", + ] +} diff --git a/frameworks/core/components/image/flutter_render_image.cpp b/frameworks/core/components/image/flutter_render_image.cpp new file mode 100644 index 00000000..07e18e0f --- /dev/null +++ b/frameworks/core/components/image/flutter_render_image.cpp @@ -0,0 +1,662 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/image/flutter_render_image.h" + +#include "flutter/common/task_runners.h" +#include "third_party/skia/include/core/SkClipOp.h" +#include "third_party/skia/include/core/SkGraphics.h" + +#include "core/common/frontend.h" +#include "core/components/align/render_align.h" +#include "core/components/common/properties/radius.h" +#include "core/components/image/image_component.h" +#include "core/image/flutter_image_cache.h" +#include "core/pipeline/base/constants.h" +#include "core/pipeline/base/flutter_render_context.h" + +namespace OHOS::Ace { + +union SkColorEx { + struct { + SkColor color : 32; + bool valid : 1; + uint32_t reserved : 31; // reserved + }; + uint64_t value = 0; +}; + +RefPtr RenderImage::Create() +{ + return AceType::MakeRefPtr(); +} + +FlutterRenderImage::FlutterRenderImage() +{ + auto currentDartState = flutter::UIDartState::Current(); + if (!currentDartState) { + return; + } + unrefQueue_ = currentDartState->GetSkiaUnrefQueue(); + ioManager_ = currentDartState->GetIOManager(); +} + +void FlutterRenderImage::Update(const RefPtr& component) +{ + RenderImage::Update(component); + UpdateImageProvider(); +} + +void FlutterRenderImage::UpdateImageProvider() +{ + auto context = GetContext().Upgrade(); + if (!context) { + LOGE("pipeline context is null!"); + return; + } + auto sharedImageManager = context->GetSharedImageManager(); + // curImageSrc represents the picture currently shown and imageSrc represents next picture to be shown + bool imageSourceChange = (imageSrc_ != curImageSrc_ && !curImageSrc_.empty()) || + (resourceId_ != InternalResource::ResourceId::NO_ID && curResourceId_ != resourceId_); + bool needAltImage = (imageLoadingStatus_ != ImageLoadingStatus::LOAD_SUCCESS); + if (imageSourceChange) { + imageLoadingStatus_ = ImageLoadingStatus::UPDATING; + rawImageSize_ = Size(); + } else if (!curImageSrc_.empty()) { + rawImageSize_ = formerRawImageSize_; + } + // when imageSrc empty and resourceId is changed to a valid ID, render internal image! + // if the imageSrc is not empty, render the src image preferential. + bool validInternalSourceSet = + imageSrc_.empty() && resourceId_ != InternalResource::ResourceId::NO_ID && curResourceId_ != resourceId_; + bool validOuterSourceSet = !imageSrc_.empty() && (curImageSrc_ != imageSrc_); + isSVG_ = IsSVG(imageSrc_, resourceId_); + bool selfOnly = false; + if (validInternalSourceSet) { + imageProvider_ = AceType::MakeRefPtr(resourceId_); + } else if (validOuterSourceSet) { + imageProvider_ = ImageProvider::Create(imageSrc_, sharedImageManager); + isNetworkSrc_ = (ImageProvider::ResolveURI(imageSrc_) == SrcType::NETWORK); + imageLoadingStatus_ = ImageLoadingStatus::UPDATING; + UpdateRenderAltImage(needAltImage && isNetworkSrc_); + } else if (isSVG_) { + // this case is meant for SVG image needing to update color when there is no change of SVG source + selfOnly = true; + } else { + return; + } + MarkNeedLayout(selfOnly); + if (!imageProvider_) { + OnLoadFail(imageProvider_); + LOGE("Create imageProvider fail! imageSrc is %{private}s", imageSrc_.c_str()); + return; + } + if (isSVG_) { + LoadSVGImage(imageProvider_, selfOnly); + return; + } + imageProvider_->AddListener(AceType::WeakClaim(this)); + rawImageSizeUpdated_ = false; + if (sharedImageManager && sharedImageManager->IsResourceToReload(ImageProvider::RemovePathHead(imageSrc_))) { + // This case means that the imageSrc to load is a memory image and its data is not ready. + // If run [GetImageSize] here, there will be an unexpected [OnLoadFail] callback from [ImageProvider]. + // When the data is ready, which is when [SharedImageManager] done [AddImageData], [GetImageSize] will be run. + return; + } + auto frontend = context->GetFrontend(); + if (!frontend) { + LOGE("frontend is null!"); + return; + } + bool syncMode = context->IsBuildingFirstPage() && frontend->GetType() == FrontendType::JS_CARD; + auto assetManager = context->GetAssetManager(); + imageProvider_->GetImageSize(syncMode, assetManager, imageSrc_); +} + +void FlutterRenderImage::Paint(RenderContext& context, const Offset& offset) +{ + if (renderAltImage_) { + renderAltImage_->RenderWithContext(context, offset); + } + FetchImageData(); + auto canvas = ScopedCanvas::Create(context); + if (!canvas) { + LOGE("Paint canvas is null"); + return; + } + + if (!NearZero(rotate_)) { + Offset center = + offset + Offset(GetLayoutSize().Width() * SK_ScalarHalf, GetLayoutSize().Height() * SK_ScalarHalf); + SkCanvas* skCanvas = canvas.GetSkCanvas(); + if (skCanvas) { + skCanvas->rotate(rotate_, center.GetX(), center.GetY()); + } + } + + flutter::Paint paint; + flutter::PaintData paint_data; + if (opacity_ != UINT8_MAX) { + paint.paint()->setAlpha(opacity_); + } + bool loadFail = (imageLoadingStatus_ == ImageLoadingStatus::LOAD_FAIL); + bool networkSrcLoading = (isNetworkSrc_ && (imageLoadingStatus_ == ImageLoadingStatus::LOADING)); + // when the [networkSrcLoading] comes from network image resizing, do not need to draw alt color or alt image + if (loadFail || (networkSrcLoading && !resizeCallLoadImage_)) { + if (renderAltImage_) { + return; + } + paint.paint()->setColor(ALT_COLOR_GREY); + canvas->drawRect(offset.GetX(), offset.GetY(), GetLayoutSize().Width() + offset.GetX(), + GetLayoutSize().Height() + offset.GetY(), paint, paint_data); + return; + } + if (isSVG_) { + DrawSVGImage(offset, canvas); + } else { + if (!image_) { + LOGI("Paint image is not ready, imageSrc is %{private}s", imageSrc_.c_str()); + imageDataNotReady_ = true; + return; + } +#ifdef USE_SYSTEM_SKIA + paint.paint()->setColorFilter(SkColorFilter::MakeModeFilter( + SkColorSetARGB(color_.GetAlpha(), color_.GetRed(), color_.GetGreen(), color_.GetBlue()), + SkBlendMode::kPlus)); +#else + paint.paint()->setColorFilter(SkColorFilters::Blend( + SkColorSetARGB(color_.GetAlpha(), color_.GetRed(), color_.GetGreen(), color_.GetBlue()), + SkBlendMode::kPlus)); +#endif + paint.paint()->setFilterQuality(SkFilterQuality::kLow_SkFilterQuality); + CanvasDrawImageRect(paint, paint_data, offset, canvas); + } +} + +void FlutterRenderImage::CanvasDrawImageRect( + const flutter::Paint& paint, const flutter::PaintData& paint_data, const Offset& offset, const ScopedCanvas& canvas) +{ + if (GetBackgroundImageFlag()) { + PaintBgImage(paint, paint_data, offset, canvas); + return; + } + // Radius only takes effect when image does not need to repeat. + // HORIZONTAL_REPEAT is customized for rating component, hence exclude it as well. + auto paintRectList = ((imageLoadingStatus_ == ImageLoadingStatus::LOADING) && !resizeCallLoadImage_) + ? currentDstRectList_ + : rectList_; + if (imageRepeat_ == ImageRepeat::NOREPEAT) { + ACE_DCHECK(paintRectList.size() == 1); + auto realDstRect = paintRectList.front() + offset; + SetClipRadius(); + flutter::RRect rrect; + rrect.sk_rrect.setRectRadii( + SkRect::MakeXYWH(realDstRect.Left(), realDstRect.Top(), realDstRect.Width(), realDstRect.Height()), radii_); + canvas->clipRRect(rrect, true); + } else { + canvas->clipRect(offset.GetX(), offset.GetY(), GetLayoutSize().Width() + offset.GetX(), + GetLayoutSize().Height() + offset.GetY(), SkClipOp::kIntersect, true); + } + double reverseFactor = 1.0; + Offset drawOffset = offset; + if (matchTextDirection_ && GetTextDirection() == TextDirection::RTL) { + auto realDstRect = paintRectList.front() + offset; + canvas.FlipHorizontal(realDstRect.Left(), realDstRect.Width()); + reverseFactor = -1.0; + drawOffset += Offset(paintRectList.front().GetOffset().GetX() * 2.0, 0.0); + } + for (const auto& rect : paintRectList) { + auto realDstRect = Rect(Offset(rect.Left() * reverseFactor, rect.Top()) + drawOffset, rect.GetSize()); + bool isLoading = ((imageLoadingStatus_ == ImageLoadingStatus::LOADING) || + (imageLoadingStatus_ == ImageLoadingStatus::UPDATING)); + Rect scaledSrcRect = isLoading ? currentSrcRect_ : srcRect_; + if (frameCount_ <= 1) { + Size sourceSize = (image_ ? Size(image_->width(), image_->height()) : Size()); + // calculate srcRect that matches the real image source size + // note that gif doesn't do resize, so gif does not need to recalculate + scaledSrcRect = RecalculateSrcRect(sourceSize); + } + LOGD("srcRect params: %{public}s", scaledSrcRect.ToString().c_str()); + if (frameCount_ <= 1) { + scaledSrcRect.ApplyScaleAndRound(currentResizeScale_); + } + canvas->drawImageRect(image_.get(), scaledSrcRect.Left(), scaledSrcRect.Top(), scaledSrcRect.Right(), + scaledSrcRect.Bottom(), realDstRect.Left(), realDstRect.Top(), realDstRect.Right(), realDstRect.Bottom(), + paint, paint_data); + LOGD("dstRect params: %{public}s", realDstRect.ToString().c_str()); + } +} + +Rect FlutterRenderImage::RecalculateSrcRect(const Size& realImageSize) +{ + if (!currentResizeScale_.IsValid() || scale_ <= 0.0) { + return Rect(); + } + auto realSrcSize = Size( + realImageSize.Width() / currentResizeScale_.Width(), realImageSize.Height() / currentResizeScale_.Height()); + Rect realSrcRect(Offset(), realSrcSize * (1.0 / scale_)); + Rect realDstRect(Offset(), GetLayoutSize()); + ApplyImageFit(realSrcRect, realDstRect); + realSrcRect.ApplyScale(scale_); + return realSrcRect; +} + +void FlutterRenderImage::PaintBgImage(const flutter::Paint& paint, const flutter::PaintData& paint_data, + const Offset& offset, const ScopedCanvas& canvas) const +{ + if (!GetBackgroundImageFlag()) { + return; + } + if (currentDstRectList_.empty()) { + LOGE("[BOX][IMAGE][Dep:%{public}d] PaintImage failed, the rect list is Null.", GetDepth()); + return; + } + + for (auto rect : currentDstRectList_) { + auto realDstRect = rect + offset + boxMarginOffset_; + canvas->drawImageRect(image_.get(), 0.0, 0.0, image_->width(), image_->height(), realDstRect.Left(), + realDstRect.Top(), realDstRect.Right(), realDstRect.Bottom(), paint, paint_data); + } +} + +void FlutterRenderImage::FetchImageData() +{ + bool sourceChange = + (!imageSrc_.empty() && curImageSrc_ != imageSrc_) || (imageSrc_.empty() && curResourceId_ != resourceId_); + bool newSourceCallLoadImage = (sourceChange && rawImageSize_.IsValid() && srcRect_.IsValid() && + (rawImageSizeUpdated_ && imageLoadingStatus_ != ImageLoadingStatus::LOADING) && + imageLoadingStatus_ != ImageLoadingStatus::LOAD_FAIL); + if (imageLoadingStatus_ != ImageLoadingStatus::LOADING) { + resizeCallLoadImage_ = + !sourceChange && NeedResize() && (imageLoadingStatus_ == ImageLoadingStatus::LOAD_SUCCESS); + } + if (newSourceCallLoadImage || resizeCallLoadImage_ || (needReload_ && rawImageSizeUpdated_)) { + imageLoadingStatus_ = ImageLoadingStatus::LOADING; + if (imageProvider_) { + previousResizeTarget_ = resizeTarget_; + auto piplineContext = GetContext().Upgrade(); + if (!piplineContext) { + return; + } + imageProvider_->LoadImage(piplineContext, imageSrc_, resizeTarget_); + if (needReload_) { + needReload_ = false; + } + } + } +} + +void FlutterRenderImage::SetClipRadius() +{ + SetSkRadii(topLeftRadius_, radii_[SkRRect::kUpperLeft_Corner]); + SetSkRadii(topRightRadius_, radii_[SkRRect::kUpperRight_Corner]); + SetSkRadii(bottomLeftRadius_, radii_[SkRRect::kLowerLeft_Corner]); + SetSkRadii(bottomRightRadius_, radii_[SkRRect::kLowerRight_Corner]); +} + +void FlutterRenderImage::SetSkRadii(const Radius& radius, SkVector& radii) +{ + auto context = context_.Upgrade(); + if (!context) { + return; + } + double dipScale = context->GetDipScale(); + radii.set(SkDoubleToScalar(std::max(radius.GetX().ConvertToPx(dipScale), 0.0)), + SkDoubleToScalar(std::max(radius.GetY().ConvertToPx(dipScale), 0.0))); +} + +Size FlutterRenderImage::Measure() +{ + if (isSVG_) { + return imageComponentSize_; + } + switch (imageLoadingStatus_) { + case ImageLoadingStatus::LOAD_SUCCESS: + case ImageLoadingStatus::LOADING: + case ImageLoadingStatus::UNLOADED: + case ImageLoadingStatus::LOAD_FAIL: + return rawImageSize_; + case ImageLoadingStatus::UPDATING: + if (rawImageSizeUpdated_) { + return rawImageSize_; + } + return formerRawImageSize_; + default: + return Size(); + } +} + +void FlutterRenderImage::UploadToGPUForRender( + const sk_sp& image, + const std::function)>& callback) +{ + // If want to dump draw command, should use CPU image. + callback({ image, unrefQueue_ }); +} + +void FlutterRenderImage::OnLoadSuccess( + const sk_sp& image, + const RefPtr& imageProvider, + const std::string& key) +{ + auto context = GetContext().Upgrade(); + if (!context) { + return; + } + auto imageCache = context->GetImageCache(); + auto taskExecutor = context->GetTaskExecutor(); + auto callback = [renderImage = Claim(this), key, imageCache, imageProvider, taskExecutor]( + flutter::SkiaGPUObject image) { + auto canvasImage = flutter::CanvasImage::Create(); + canvasImage->set_image(std::move(image)); + if (imageCache) { + imageCache->CacheImage(key, std::make_shared(canvasImage)); + } + ImageProvider::RemoveLoadingImage(key); + renderImage->OnLoadGPUImageSuccess(canvasImage, imageProvider); + // Trigger purge cpu bitmap resource, after image upload to gpu. + taskExecutor->PostTask([]() { SkGraphics::PurgeResourceCache(); }, TaskExecutor::TaskType::IO); + }; + UploadToGPUForRender(image, callback); +} + +void FlutterRenderImage::OnLoadGPUImageSuccess( + const fml::RefPtr& image, const RefPtr& imageProvider) +{ + auto context = GetContext().Upgrade(); + if (!context) { + return; + } + context->GetTaskExecutor()->PostTask( + [renderImage = Claim(this), image, imageProvider]() { + if (!renderImage->imageProvider_) { + LOGE("imageProvider is null!"); + return; + } + if (imageProvider != renderImage->imageProvider_) { + LOGI( + "OnLoadSuccess called from invalid imageProvider, src: %{private}s", + renderImage->imageSrc_.c_str()); + renderImage->imageLoadingStatus_ = ImageLoadingStatus::UPDATING; + return; + } + static constexpr double precision = 0.5; + int32_t dstWidth = static_cast(renderImage->previousResizeTarget_.Width() + precision); + int32_t dstHeight = static_cast(renderImage->previousResizeTarget_.Height() + precision); + bool isTargetSource = ((dstWidth == image->width()) && (dstHeight == image->height())); + if (!isTargetSource && (renderImage->imageProvider_->GetTotalFrames() <= 1) && !renderImage->background_) { + return; + } + renderImage->UpdateLoadSuccessState(); + renderImage->image_ = image; + if (renderImage->imageDataNotReady_) { + LOGI("Paint image is ready, imageSrc is %{private}s", renderImage->imageSrc_.c_str()); + renderImage->imageDataNotReady_ = false; + } + if (renderImage->background_) { + renderImage->currentDstRectList_ = renderImage->rectList_; + if (renderImage->imageUpdateFunc_) { + renderImage->imageUpdateFunc_(); + } + } + + if (renderImage->GetHidden() && renderImage->frameCount_ > 1) { + renderImage->animatedPlayer_->Pause(); + } + }, + TaskExecutor::TaskType::UI); +} + +void FlutterRenderImage::OnAnimateImageSuccess( + const RefPtr& provider, + std::unique_ptr codec) +{ + animatedPlayer_ = MakeRefPtr( + provider, + GetContext(), + ioManager_, + unrefQueue_, + std::move(codec)); +} + +void FlutterRenderImage::OnLoadFail(const RefPtr& imageProvider) +{ + auto context = GetContext().Upgrade(); + if (!context) { + return; + } + context->GetTaskExecutor()->PostTask( + [imageProvider, renderImage = Claim(this)]() { + if (imageProvider != renderImage->imageProvider_) { + LOGW("OnLoadFail called from invalid imageProvider, src: %{private}s", renderImage->imageSrc_.c_str()); + return; + } + renderImage->currentDstRectList_.clear(); + renderImage->curImageSrc_ = renderImage->imageSrc_; + renderImage->curResourceId_ = renderImage->resourceId_; + renderImage->imageLoadingStatus_ = ImageLoadingStatus::LOAD_FAIL; + renderImage->FireLoadEvent(renderImage->Measure()); + renderImage->MarkNeedLayout(); + LOGW("Load image failed!, imageSrc is %{private}s", renderImage->imageSrc_.c_str()); + }, + TaskExecutor::TaskType::UI); +} + +void FlutterRenderImage::OnChangeProvider(const RefPtr& provider) +{ + auto context = GetContext().Upgrade(); + if (!context) { + return; + } + context->GetTaskExecutor()->PostTask( + [renderImage = Claim(this), provider] { + renderImage->imageProvider_ = provider; + }, + TaskExecutor::TaskType::UI); +} + +void FlutterRenderImage::OnLoadImageSize( + Size imageSize, + const std::string& imageSrc, + const RefPtr& imageProvider, + bool syncMode) +{ + auto task = [renderImage = Claim(this), imageSize, imageSrc, imageProvider]() { + if (imageSrc != renderImage->imageSrc_) { + LOGW("imageSrc does not match. imageSrc from callback: %{private}s, imageSrc of now: %{private}s", + imageSrc.c_str(), renderImage->imageSrc_.c_str()); + return; + } + if (imageProvider != renderImage->imageProvider_) { + LOGW("OnLoadImageSize called from invalid imageProvider, src: %{private}s", renderImage->imageSrc_.c_str()); + return; + } + renderImage->rawImageSize_ = imageSize; + renderImage->rawImageSizeUpdated_ = true; + if (!renderImage->background_) { + renderImage->currentDstRectList_ = renderImage->rectList_; + } else if (renderImage->imageUpdateFunc_) { + renderImage->imageUpdateFunc_(); + } + // If image component size is finally decided, only need to layout itself. + bool layoutSizeNotChanged = (renderImage->previousLayoutSize_ == renderImage->GetLayoutSize()); + bool selfOnly = renderImage->imageComponentSize_.IsValid() && + !renderImage->imageComponentSize_.IsInfinite() && + layoutSizeNotChanged; + renderImage->MarkNeedLayout(selfOnly); + }; + + if (syncMode) { + task(); + } else { + auto context = GetContext().Upgrade(); + if (!context) { + return; + } + context->GetTaskExecutor()->PostTask(task, TaskExecutor::TaskType::UI); + } +} + +void FlutterRenderImage::OnHiddenChanged(bool hidden) +{ + if (animatedPlayer_ && frameCount_ > 1) { + if (hidden) { + animatedPlayer_->Pause(); + } else { + animatedPlayer_->Resume(); + } + } +} + +bool FlutterRenderImage::IsSVG(const std::string& src, InternalResource::ResourceId resourceId) const +{ + // 4 is the length of ".svg". + return (src.size() > 4 && src.substr(src.size() - 4) == ".svg") || + (src.empty() && resourceId > InternalResource::ResourceId::SVG_START && + resourceId < InternalResource::ResourceId::SVG_END); +} + +void FlutterRenderImage::LoadSVGImage(const RefPtr& imageProvider, bool onlyLayoutSelf) +{ + imageLoadingStatus_ = ImageLoadingStatus::LOADING; + auto successCallback = [svgImage = Claim(this), onlyLayoutSelf](const sk_sp& svgDom) { + if (svgDom) { + svgImage->skiaDom_ = svgDom; + svgImage->UpdateLoadSuccessState(); + svgImage->FireLoadEvent(svgImage->Measure()); + svgImage->MarkNeedLayout(onlyLayoutSelf); + } + }; + auto failedCallback = [svgImage = Claim(this), providerWp = WeakClaim(RawPtr(imageProvider_))]() { + svgImage->OnLoadFail(providerWp.Upgrade()); // if Upgrade fail, just callback with nullptr + svgImage->FireLoadEvent(svgImage->Measure()); + svgImage->MarkNeedLayout(); + }; + + auto piplineContext = GetContext().Upgrade(); + if (!piplineContext) { + LOGE("piplinecontext is null!"); + return; + } + auto taskExecutor = piplineContext->GetTaskExecutor(); + auto assetManager = piplineContext->GetAssetManager(); + if (isColorSet_) { + SkColorEx skColor; + skColor.color = color_.GetValue(); + skColor.valid = 1; + imageProvider->GetSVGImageDOMAsync( + imageSrc_, successCallback, failedCallback, taskExecutor, assetManager, skColor.value); + } else { + imageProvider->GetSVGImageDOMAsync(imageSrc_, successCallback, failedCallback, taskExecutor, assetManager); + } + MarkNeedLayout(); +} + +void FlutterRenderImage::DrawSVGImage(const Offset& offset, ScopedCanvas& canvas) +{ + if (!skiaDom_) { + return; + } + canvas->translate(static_cast(offset.GetX()), static_cast(offset.GetY())); + int32_t width = static_cast(imageComponentSize_.Width()); + int32_t height = static_cast(imageComponentSize_.Height()); + if (matchTextDirection_ && GetTextDirection() == TextDirection::RTL) { + canvas.FlipHorizontal(0.0, width); + } + skiaDom_->setContainerSize({ width, height }); + canvas->clipRect(0, 0, width, height, SkClipOp::kIntersect); + skiaDom_->render(canvas.GetSkCanvas()); +} + +void FlutterRenderImage::UpdateLoadSuccessState() +{ + if (!imageProvider_) { + LOGD("imageProvider is null!"); + return; + } + imageLoadingStatus_ = + imageLoadingStatus_ == ImageLoadingStatus::LOADING ? ImageLoadingStatus::LOAD_SUCCESS : imageLoadingStatus_; + auto currentFrameCount = imageProvider_->GetTotalFrames(); + if (!isSVG_ && currentFrameCount == 1) { + FireLoadEvent(Measure()); + } + if (currentFrameCount > 1 && imageSrc_ != curImageSrc_) { + FireLoadEvent(Measure()); + auto parent = GetParent().Upgrade(); + if (parent) { + parent->MarkNeedRender(); + } + } + if (currentFrameCount != frameCount_) { + frameCount_ = currentFrameCount; + } + if (imageLoadingStatus_ == ImageLoadingStatus::LOAD_SUCCESS) { + currentSrcRect_ = srcRect_; + imageAlt_.clear(); + curImageSrc_ = imageSrc_; + curResourceId_ = resourceId_; + formerRawImageSize_ = rawImageSize_; + currentResizeScale_ = resizeScale_; + if (renderAltImage_) { + renderAltImage_ = nullptr; + MarkNeedLayout(); + return; + } + rawImageSizeUpdated_ = false; + LOGD("Load image success!"); + } + MarkNeedRender(); +} + +void FlutterRenderImage::UpdateRenderAltImage(bool needAltImage) +{ + if (!needAltImage) { + renderAltImage_ = nullptr; + return; + } + bool imageAltValid = !imageAlt_.empty() && (imageAlt_ != IMAGE_ALT_BLANK); + if (needAltImage && imageAltValid) { + RefPtr altImageComponent = AceType::MakeRefPtr(imageAlt_); + renderAltImage_ = AceType::DynamicCast(altImageComponent->CreateRenderNode()); + renderAltImage_->Attach(GetContext()); + renderAltImage_->Update(altImageComponent); + AddChild(renderAltImage_); + } +} + +bool FlutterRenderImage::MaybeRelease() +{ + auto context = GetContext().Upgrade(); + if (context && context->GetRenderFactory()->GetRenderImageFactory()->Recycle(this)) { + ClearRenderObject(); + return false; + } + return true; +} + +void FlutterRenderImage::ClearRenderObject() +{ + RenderImage::ClearRenderObject(); + isNetworkSrc_ = false; + isSVG_ = false; + curImageSrc_ = ""; + curResourceId_ = InternalResource::ResourceId::NO_ID; + image_ = nullptr; + imageProvider_ = nullptr; + layer_ = nullptr; + formerRawImageSize_ = { 0.0, 0.0 }; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/image/flutter_render_image.h b/frameworks/core/components/image/flutter_render_image.h new file mode 100644 index 00000000..2448d725 --- /dev/null +++ b/frameworks/core/components/image/flutter_render_image.h @@ -0,0 +1,141 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_IMAGE_FLUTTER_RENDER_IMAGE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_IMAGE_FLUTTER_RENDER_IMAGE_H + +#include "experimental/svg/model/SkSVGDOM.h" +#include "flutter/fml/memory/ref_counted.h" +#include "flutter/lib/ui/painting/image.h" + +#include "core/components/image/render_image.h" +#include "core/image/animated_image_player.h" +#include "core/image/image_provider.h" +#include "core/pipeline/base/scoped_canvas_state.h" +#include "core/pipeline/layers/offset_layer.h" + +namespace OHOS::Ace { + +class FlutterRenderImage final : public RenderImage, public LoadImageCallback { + DECLARE_ACE_TYPE(FlutterRenderImage, RenderImage); + +public: + FlutterRenderImage(); + ~FlutterRenderImage() override = default; + + void Update(const RefPtr& component) override; + void Paint(RenderContext& context, const Offset& offset) override; + + void OnLoadSuccess( + const sk_sp& image, const RefPtr& imageProvider, const std::string& key) override; + + void OnLoadGPUImageSuccess( + const fml::RefPtr& image, const RefPtr& imageProvider) override; + + void OnAnimateImageSuccess(const RefPtr& provider, const std::unique_ptr codec) override; + + void OnLoadFail(const RefPtr& imageProvider) override; + + void OnLoadImageSize( + Size imageSize, + const std::string& imageSrc, + const RefPtr& imageProvider, + bool syncMode) override; + + void OnChangeProvider(const RefPtr& provider) override; + + void MarkNeedReload() override + { + needReload_ = true; + } + + bool IsRepaintBoundary() const override + { + return imageProvider_ && (imageProvider_->GetTotalFrames() > 1); + } + + RenderLayer GetRenderLayer() override + { + if (IsRepaintBoundary()) { + if (!layer_) { + layer_ = AceType::MakeRefPtr(); + } + } else { + layer_ = nullptr; + } + return AceType::RawPtr(layer_); + } + + void OnHiddenChanged(bool hidden) override; + + void FetchImageData(); + + void PaintBgImage(const flutter::Paint& paint, const flutter::PaintData& paint_data, const Offset& offset, + const ScopedCanvas& canvas) const; + + void UpdateImageProvider() override; + + void UpdateResourceId(InternalResource::ResourceId resourceId, bool onlySelfLayout) override + { + resourceId_ = resourceId; + MarkNeedLayout(onlySelfLayout); + UpdateImageProvider(); + } + + bool SupportOpacity() override + { + return true; + } + +protected: + virtual bool MaybeRelease() override; + virtual void ClearRenderObject() override; + +private: + Size Measure() override; + void UpdateRenderAltImage(bool needAltImage); + void SetSkRadii(const Radius& radius, SkVector& radii); + void SetClipRadius(); + void CanvasDrawImageRect(const flutter::Paint& paint, const flutter::PaintData& paint_data, const Offset& offset, + const ScopedCanvas& canvas); + bool IsSVG(const std::string& src, InternalResource::ResourceId resourceId) const; + void LoadSVGImage(const RefPtr& imageProvider, bool onlyLayoutSelf = false); + void DrawSVGImage(const Offset& offset, ScopedCanvas& canvas); + void UpdateLoadSuccessState(); + Rect RecalculateSrcRect(const Size& realImageSize); + void UploadToGPUForRender( + const sk_sp& image, + const std::function)>& callback); + + sk_sp skiaDom_; + bool isNetworkSrc_ = false; + bool isSVG_ = false; + bool needReload_ = false; + std::string curImageSrc_; + InternalResource::ResourceId curResourceId_ = InternalResource::ResourceId::NO_ID; + fml::RefPtr image_; + RefPtr imageProvider_; + RefPtr animatedPlayer_; + RefPtr layer_; + SkVector radii_[4] = { { 0.0, 0.0 }, { 0.0, 0.0 }, { 0.0, 0.0 }, { 0.0, 0.0 } }; + Size formerRawImageSize_; + fml::RefPtr unrefQueue_; + fml::WeakPtr ioManager_; + bool imageDataNotReady_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_IMAGE_FLUTTER_RENDER_IMAGE_H diff --git a/frameworks/core/components/image/image_animator_component.cpp b/frameworks/core/components/image/image_animator_component.cpp new file mode 100644 index 00000000..ecca5ab5 --- /dev/null +++ b/frameworks/core/components/image/image_animator_component.cpp @@ -0,0 +1,127 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/image/image_animator_component.h" + +#include "core/animation/animation_pub.h" +#include "core/components/image/image_animator_element.h" + +namespace OHOS::Ace { +namespace { + +const char* PREFIX = "ImageAnimator"; +uint32_t g_componentId = 0; + +} // namespace + +RefPtr ImageAnimatorComponent::CreateElement() +{ + return AceType::MakeRefPtr(GetId()); +} + +RefPtr ImageAnimatorComponent::GetAnimator() const +{ + return controller_; +} + +void ImageAnimatorComponent::SetAnimator(const RefPtr& controller) +{ + controller_ = controller; +} + +void ImageAnimatorComponent::SetIteration(int32_t iteration) +{ + iteration_ = iteration; +} + +int32_t ImageAnimatorComponent::GetIteration() const +{ + return iteration_; +} + +void ImageAnimatorComponent::SetPreDecode(int32_t preDecode) +{ + preDecode_ = preDecode; +} + +int32_t ImageAnimatorComponent::GetPreDecode() const +{ + return preDecode_; +} + +void ImageAnimatorComponent::SetDuration(int32_t duration) +{ + if (duration <= 0) { + duration_ = 0; + return; + } + duration_ = duration; +} + +int32_t ImageAnimatorComponent::GetDuration() const +{ + return duration_; +} + +void ImageAnimatorComponent::SetBorder(const Border& border) +{ + border_ = border; +} + +const Border& ImageAnimatorComponent::GetBorder() const +{ + return border_; +} + +void ImageAnimatorComponent::SetIsReverse(bool isReverse) +{ + isReverse_ = isReverse; +} + +bool ImageAnimatorComponent::GetIsReverse() const +{ + return isReverse_; +} + +void ImageAnimatorComponent::SetIsFixedSize(bool isFixedSize) +{ + isFixedSize_ = isFixedSize; +} + +bool ImageAnimatorComponent::GetIsFixedSize() const +{ + return isFixedSize_; +} + +void ImageAnimatorComponent::SetImageProperties(const std::vector& images) +{ + if (images.empty()) { + LOGW("Images are empty."); + return; + } + images_ = images; +} + +const std::vector& ImageAnimatorComponent::GetImageProperties() const +{ + return images_; +} + +ComposeId ImageAnimatorComponent::GenerateComponentId() +{ + return PREFIX + (std::to_string(g_componentId++)); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/image/image_animator_component.h b/frameworks/core/components/image/image_animator_component.h new file mode 100644 index 00000000..083bacd4 --- /dev/null +++ b/frameworks/core/components/image/image_animator_component.h @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_IMAGE_IMAGE_ANIMATOR_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_IMAGE_IMAGE_ANIMATOR_COMPONENT_H + +#include "core/components/common/properties/border.h" +#include "core/pipeline/base/component.h" +#include "core/pipeline/base/element.h" + +namespace OHOS::Ace { + +struct ImageProperties { + std::string src; + std::string width; + std::string height; + std::string top; + std::string left; + std::string duration; +}; + +class ImageAnimatorComponent : public ComposedComponent { + DECLARE_ACE_TYPE(ImageAnimatorComponent, ComposedComponent); + +public: + explicit ImageAnimatorComponent(const std::string& name) : ComposedComponent(GenerateComponentId(), name) {} + ~ImageAnimatorComponent() override = default; + + RefPtr CreateElement() override; + + static ComposeId GenerateComponentId(); + + void SetIteration(int32_t iteration); + void SetDuration(int32_t duration); + void SetIsReverse(bool isReverse); + void SetIsFixedSize(bool isFixedSize); + void SetBorder(const Border& border); + void SetImageProperties(const std::vector& images); + void SetAnimator(const RefPtr& controller); + void SetPreDecode(int32_t preDecode); + + int32_t GetIteration() const; + int32_t GetDuration() const; + int32_t GetPreDecode() const; + bool GetIsReverse() const; + bool GetIsFixedSize() const; + const Border& GetBorder() const; + const std::vector& GetImageProperties() const; + RefPtr GetAnimator() const; + +private: + RefPtr controller_; + std::vector images_; + Border border_; + int32_t iteration_ = 1; + int32_t duration_ = 0; // Duration in millisecond. + int32_t preDecode_ = 1; + bool isReverse_ = false; + bool isFixedSize_ = true; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_IMAGE_IMAGE_ANIMATOR_COMPONENT_H diff --git a/frameworks/core/components/image/image_animator_element.cpp b/frameworks/core/components/image/image_animator_element.cpp new file mode 100644 index 00000000..248cf88d --- /dev/null +++ b/frameworks/core/components/image/image_animator_element.cpp @@ -0,0 +1,294 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/image/image_animator_element.h" + +#include "base/utils/string_utils.h" +#include "core/components/image/image_animator_component.h" +#include "core/components/image/image_component.h" + +namespace OHOS::Ace { + +ImageAnimatorElement::~ImageAnimatorElement() +{ + auto pageElement = pageElement_.Upgrade(); + if (pageElement && callbackId_ >= 0) { + pageElement->CancelHiddenCallback(callbackId_); + } +} + +void Ace::ImageAnimatorElement::Update() +{ + const auto imageAnimatorComponent = AceType::DynamicCast(component_); + if (!imageAnimatorComponent) { + LOGE("ImageAnimator element update failed. imageAnimatorComponent is null."); + return; + } + + if (controller_) { + controller_->ClearRepeatListeners(); + } + controller_ = imageAnimatorComponent->GetAnimator(); + if ((controller_) && (!controller_->HasScheduler())) { + controller_->AttachScheduler(context_); + } + iteration_ = imageAnimatorComponent->GetIteration(); + preDecode_ = imageAnimatorComponent->GetPreDecode(); + duration_ = imageAnimatorComponent->GetDuration(); + isReverse_ = imageAnimatorComponent->GetIsReverse(); + images_ = imageAnimatorComponent->GetImageProperties(); + isFixedSize_ = imageAnimatorComponent->GetIsFixedSize(); + border_ = imageAnimatorComponent->GetBorder(); + UpdateFilterImages(); + + if (!pageElement_.Invalid()) { + return; + } + + auto pageElement = GetPageElement(); + if (!pageElement) { + return; + } + pageElement_ = pageElement; + callbackId_ = pageElement->RegisterHiddenCallback([weak = AceType::WeakClaim(this)](bool hidden) { + auto element = weak.Upgrade(); + if (!element || !element->controller_) { + return; + } + + if (hidden) { + if (element->controller_->GetStatus() == Animator::Status::RUNNING) { + element->controller_->Pause(); + element->isPaused_ = true; + } + } else { + if (element->isPaused_) { + if (element->isReverse_) { + element->controller_->Backward(); + } else { + element->controller_->Forward(); + } + element->isPaused_ = false; + } + } + }); +} + +void ImageAnimatorElement::PerformBuild() +{ + int32_t size = images_.size(); + if (size <= 0) { + LOGE("image size is less than 0."); + return; + } + if (children_.empty()) { + // first time to set image child. + childComponent_ = BuildChild(); + ComposedElement::PerformBuild(); + } + if (preDecode_ > 1) { + auto boxComponent = DynamicCast(childComponent_); + UpdatePreLoadImages(boxComponent); + } + CreatePictureAnimation(size); + if (!controller_) { + LOGE("controller is null, need to get controller first."); + return; + } + // update duration after a loop of animation. + if (!isSetDuration_) { + if (durationTotal_ > 0.0f) { + controller_->SetDuration(durationTotal_); + } else { + controller_->SetDuration(duration_); + } + isSetDuration_ = true; + } + controller_->ClearInterpolators(); + controller_->AddInterpolator(pictureAnimation_); + controller_->SetIteration(iteration_); + controller_->ClearRepeatListeners(); + controller_->AddRepeatListener([weak = WeakClaim(this)]() { + auto imageAnimator = weak.Upgrade(); + if (imageAnimator) { + auto controller = imageAnimator->controller_; + if (controller) { + if (imageAnimator->durationTotal_ > 0.0f) { + controller->SetDuration(imageAnimator->durationTotal_); + } else { + controller->SetDuration(imageAnimator->duration_); + } + } + } + }); + controller_->RemoveStopListener(stopCallbackId_); + stopCallbackId_ = controller_->AddStopListener([weak = WeakClaim(this)]() { + auto imageAnimator = weak.Upgrade(); + if (imageAnimator) { + imageAnimator->isSetDuration_ = false; + } + }); + if (isReverse_) { + controller_->Backward(); + } else { + controller_->Forward(); + } +} + +RefPtr ImageAnimatorElement::BuildChild() +{ + int32_t size = images_.size(); + if (size <= 0) { + LOGE("image size is less than 0."); + return nullptr; + } + auto boxComponent = AceType::MakeRefPtr(); + ImageProperties childImage; + if (durationTotal_ > 0.0f) { + childImage = (isReverse_ ? filterImages_.back() : filterImages_.front()); + } else { + childImage = (isReverse_ ? images_.back() : images_.front()); + } + if (!isFixedSize_) { + UpdateImageBox(childImage, boxComponent); + } + if (!childImage.src.empty()) { + auto imageComponent = AceType::MakeRefPtr(childImage.src); + imageComponent->SetBorder(border_); + imageComponent->SetFitMaxSize(true); + boxComponent->SetChild(imageComponent); + } + return boxComponent; +} + +void ImageAnimatorElement::UpdatePreLoadImages(const RefPtr& box) +{ + if (!box) { + LOGE("boxComponent is null."); + return; + } + int32_t size = images_.size(); + for (int32_t idx = 0; (idx < preDecode_) && (idx < size); idx++) { + auto imageComponent = DynamicCast(box->GetChild()); + if (!imageComponent) { + LOGE("imageComponent is null."); + return; + } + ImageProperties childImage = images_[idx]; + if (!childImage.src.empty()) { + imageComponent->SetSrc(childImage.src); + } + UpdateChild(GetFirstChild(), box); + } +} + +void ImageAnimatorElement::CreatePictureAnimation(int32_t size) +{ + if (!pictureAnimation_) { + pictureAnimation_ = MakeRefPtr>(); + } + + pictureAnimation_->ClearListeners(); + pictureAnimation_->ClearPictures(); + if (durationTotal_ > 0.0f) { + int32_t filterImagesSize = filterImages_.size(); + for (int32_t index = 0; index < filterImagesSize; ++index) { + double imageDuration = StringUtils::StringToDouble(filterImages_[index].duration); + pictureAnimation_->AddPicture(imageDuration / durationTotal_, index); + } + } else { + for (int32_t index = 0; index < size; ++index) { + pictureAnimation_->AddPicture(NORMALIZED_DURATION_MAX / size, index); + } + } + pictureAnimation_->AddListener([weak = WeakClaim(this)](const int32_t index) { + auto imageAnimator = weak.Upgrade(); + if (imageAnimator) { + imageAnimator->PlayImageAnimator(index); + } + }); +} + +void ImageAnimatorElement::UpdateFilterImages() +{ + filterImages_.clear(); + durationTotal_ = 0.0f; + for (auto& childImage : images_) { + if (!childImage.src.empty() && !childImage.duration.empty()) { + durationNums_++; + double childDuration = StringUtils::StringToDouble(childImage.duration); + if (childDuration > 0.0) { + durationTotal_ += childDuration; + filterImages_.emplace_back(childImage); + } + } + } +} + +void ImageAnimatorElement::PlayImageAnimator(int32_t index) +{ + auto boxComponent = DynamicCast(childComponent_); + if (!boxComponent) { + LOGE("child boxComponent is null."); + return; + } + auto imageComponent = DynamicCast(boxComponent->GetChild()); + if (!imageComponent) { + LOGE("imageComponent is null."); + return; + } + ImageProperties childImage; + if (durationTotal_ > 0.0f) { + childImage = filterImages_[index]; + } else { + childImage = images_[index]; + } + if (!isFixedSize_) { + UpdateImageBox(childImage, boxComponent); + isResetBox_ = false; + } else { + if (!isResetBox_) { + boxComponent->SetMargin(Edge()); + // Follows the size of the parent component + boxComponent->SetWidth(-1.0); + boxComponent->SetHeight(-1.0); + isResetBox_ = true; + } + } + if (!childImage.src.empty()) { + imageComponent->SetSrc(childImage.src); + } + UpdateChild(GetFirstChild(), boxComponent); +} + +void ImageAnimatorElement::UpdateImageBox(ImageProperties& imageProperties, const RefPtr& box) +{ + auto edge = Edge(); + if (!imageProperties.left.empty()) { + edge.SetLeft(StringUtils::StringToDimension(imageProperties.left)); + } + if (!imageProperties.top.empty()) { + edge.SetTop(StringUtils::StringToDimension(imageProperties.top)); + } + box->SetMargin(edge); + if (!imageProperties.width.empty()) { + box->SetWidth(StringUtils::StringToDouble(imageProperties.width)); + } + if (!imageProperties.height.empty()) { + box->SetHeight(StringUtils::StringToDouble(imageProperties.height)); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/image/image_animator_element.h b/frameworks/core/components/image/image_animator_element.h new file mode 100644 index 00000000..0c7bfa14 --- /dev/null +++ b/frameworks/core/components/image/image_animator_element.h @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_IMAGE_IMAGE_ANIMATOR_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_IMAGE_IMAGE_ANIMATOR_ELEMENT_H + +#include "core/animation/animator.h" +#include "core/animation/picture_animation.h" +#include "core/components/box/box_component.h" +#include "core/components/image/image_animator_component.h" +#include "core/components/page/page_element.h" +#include "core/pipeline/base/composed_element.h" + +namespace OHOS::Ace { + +class ImageAnimatorElement : public ComposedElement { + DECLARE_ACE_TYPE(ImageAnimatorElement, ComposedElement); + +public: + explicit ImageAnimatorElement(const ComposeId& id) : ComposedElement(id) {} + ~ImageAnimatorElement() override; + + void Update() override; + void PerformBuild() override; + +protected: + RefPtr BuildChild() override; + +private: + void CreatePictureAnimation(int32_t size); + void PlayImageAnimator(int32_t index); + void UpdateFilterImages(); + void UpdateImageBox(ImageProperties& imageProperties, const RefPtr& box); + void UpdatePreLoadImages(const RefPtr& box); + + std::vector images_; + std::vector filterImages_; + RefPtr controller_; + RefPtr childComponent_; + RefPtr> pictureAnimation_; + WeakPtr pageElement_; + Border border_; + float durationTotal_ = 0.0f; + int32_t preDecode_ = 1; + int32_t durationNums_ = 0; + int32_t callbackId_ = -1; + int32_t iteration_ = 1; + int32_t duration_ = 0; // Duration in millisecond. + int64_t stopCallbackId_ = -1; + bool isPaused_ = false; + bool isReverse_ = false; + bool isFixedSize_ = true; + bool isSetDuration_ = false; + bool isResetBox_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_IMAGE_IMAGE_ANIMATOR_ELEMENT_H diff --git a/frameworks/core/components/image/image_component.cpp b/frameworks/core/components/image/image_component.cpp new file mode 100644 index 00000000..91e01d37 --- /dev/null +++ b/frameworks/core/components/image/image_component.cpp @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/image/image_component.h" + +#include "core/components/image/image_element.h" +#include "core/components/image/render_image.h" + +namespace OHOS::Ace { + +ImageComponent::ImageComponent(const std::string& src) : src_(src) {} + +RefPtr ImageComponent::CreateRenderNode() +{ + return RenderImage::Create(); +} + +RefPtr ImageComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/image/image_component.h b/frameworks/core/components/image/image_component.h new file mode 100644 index 00000000..927b9399 --- /dev/null +++ b/frameworks/core/components/image/image_component.h @@ -0,0 +1,190 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_IMAGE_IMAGE_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_IMAGE_IMAGE_COMPONENT_H + +#include + +#include "base/resource/internal_resource.h" +#include "base/utils/macros.h" +#include "base/utils/utils.h" +#include "core/components/common/layout/constants.h" +#include "core/components/common/properties/alignment.h" +#include "core/components/common/properties/border.h" +#include "core/components/common/properties/color.h" +#include "core/pipeline/base/component_group.h" +#include "core/pipeline/base/element.h" +#include "core/pipeline/base/measurable.h" +#include "core/pipeline/base/render_component.h" + +namespace OHOS::Ace { +// A component can show image. +class ACE_EXPORT ImageComponent : public RenderComponent, public Measurable { + DECLARE_ACE_TYPE(ImageComponent, RenderComponent, Measurable); + +public: + explicit ImageComponent(const std::string& src = std::string()); + explicit ImageComponent(InternalResource::ResourceId resourceId) : resourceId_(resourceId) {} + ~ImageComponent() override = default; + + RefPtr CreateRenderNode() override; + RefPtr CreateElement() override; + + void SetSrc(const std::string& src) + { + src_ = src; + } + + const std::string& GetSrc() const + { + return src_; + } + + void SetAlt(const std::string& alt) + { + alt_ = alt; + } + + const std::string& GetAlt() const + { + return alt_; + } + + void SetImageRepeat(ImageRepeat imageRepeat) + { + imageRepeat_ = imageRepeat; + } + + ImageRepeat GetImageRepeat() const + { + return imageRepeat_; + } + + void SetAlignment(const Alignment& alignment) + { + alignment_ = alignment; + } + + const Alignment& GetAlignment() const + { + return alignment_; + } + + void SetImageFit(ImageFit imageFit) + { + imageFit_ = imageFit; + } + + ImageFit GetImageFit() const + { + return imageFit_; + } + + void SetColor(const Color& color) + { + color_ = color; + isColorSet_ = true; + } + + const Color& GetColor() const + { + return color_; + } + + void SetLoadSuccessEventId(const EventMarker& loadSuccessEventId) + { + loadSuccessEventId_ = loadSuccessEventId; + } + + const EventMarker& GetLoadSuccessEventId() const + { + return loadSuccessEventId_; + } + + void SetLoadFailEventId(const EventMarker& loadFailEventId) + { + loadFailEventId_ = loadFailEventId; + } + + const EventMarker& GetLoadFailEventId() const + { + return loadFailEventId_; + } + + InternalResource::ResourceId GetResourceId() const + { + return resourceId_; + } + + void SetResourceId(InternalResource::ResourceId resourceId) + { + resourceId_ = resourceId; + } + + void SetBorder(const Border& border) + { + border_ = border; + } + + const Border& GetBorder() const + { + return border_; + } + + bool GetFitMaxSize() const + { + return fitMaxSize_; + } + + void SetFitMaxSize(bool fitMaxSize) + { + fitMaxSize_ = fitMaxSize; + } + + bool IsMatchTextDirection() const + { + return matchTextDirection_; + } + + void SetMatchTextDirection(bool matchTextDirection) + { + matchTextDirection_ = matchTextDirection; + } + + bool IsColorSet() const + { + return isColorSet_; + } + +private: + std::string src_; + std::string alt_; + Alignment alignment_ = Alignment::CENTER; + ImageRepeat imageRepeat_ = ImageRepeat::NOREPEAT; + ImageFit imageFit_ = ImageFit::COVER; + Color color_ = Color::TRANSPARENT; + bool isColorSet_ = false; + EventMarker loadSuccessEventId_; + EventMarker loadFailEventId_; + InternalResource::ResourceId resourceId_ = InternalResource::ResourceId::NO_ID; + Border border_; + bool fitMaxSize_ = false; + bool matchTextDirection_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_IMAGE_IMAGE_COMPONENT_H diff --git a/frameworks/core/components/image/image_element.h b/frameworks/core/components/image/image_element.h new file mode 100644 index 00000000..e669c237 --- /dev/null +++ b/frameworks/core/components/image/image_element.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_IMAGE_IMAGE_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_IMAGE_IMAGE_ELEMENT_H + +#include "core/components/image/image_component.h" +#include "core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +class ImageElement : public RenderElement { + DECLARE_ACE_TYPE(ImageElement, RenderElement); + +protected: + virtual RefPtr GetCachedRenderNode() override + { + auto context = GetContext().Upgrade(); + if (context) { + context->GetRenderFactory()->GetRenderImageFactory()->Get(); + } + return nullptr; + } +}; +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_IMAGE_IMAGE_ELEMENT_H diff --git a/frameworks/core/components/image/image_event.h b/frameworks/core/components/image/image_event.h new file mode 100644 index 00000000..ececd6a6 --- /dev/null +++ b/frameworks/core/components/image/image_event.h @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_IMAGE_IMAGE_EVENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_IMAGE_IMAGE_EVENT_H + +namespace OHOS::Ace { + +class ACE_EXPORT LoadImageSuccessEvent : public BaseEventInfo { + DECLARE_RELATIONSHIP_OF_CLASSES(LoadImageSuccessEvent, BaseEventInfo); + +public: + LoadImageSuccessEvent(double width, double height) + : BaseEventInfo("LoadImageSuccessEvent"), width_(width), height_(height) {} + + ~LoadImageSuccessEvent() = default; + + double GetWidth() const + { + return width_; + } + + double GetHeight() const + { + return height_; + } + +private: + double width_ = 0; + double height_ = 0; +}; + +class ACE_EXPORT LoadImageFailEvent : public BaseEventInfo { + DECLARE_RELATIONSHIP_OF_CLASSES(LoadImageFailEvent, BaseEventInfo); + +public: + LoadImageFailEvent() : BaseEventInfo("LoadImageFailEvent") {} + ~LoadImageFailEvent() = default; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_IMAGE_IMAGE_EVENT_H diff --git a/frameworks/core/components/image/render_image.cpp b/frameworks/core/components/image/render_image.cpp new file mode 100644 index 00000000..4f170ea8 --- /dev/null +++ b/frameworks/core/components/image/render_image.cpp @@ -0,0 +1,636 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/image/render_image.h" + +#include "base/log/log.h" +#include "base/utils/utils.h" +#include "core/components/align/render_align.h" +#include "core/components/image/image_component.h" +#include "core/components/image/image_event.h" +#include "core/event/ace_event_helper.h" + +namespace OHOS::Ace { +namespace { + +constexpr double RESIZE_AGAIN_THRESHOLD = 1.2; + +} // namespace + +void RenderImage::Update(const RefPtr& component) +{ + const RefPtr image = AceType::DynamicCast(component); + if (image) { + currentSrcRect_ = srcRect_; + currentDstRectList_ = rectList_; + imageSrc_ = image->GetSrc(); + imageAlt_ = image->GetAlt(); + resourceId_ = image->GetResourceId(); + + width_ = image->GetWidth(); + height_ = image->GetHeight(); + alignment_ = image->GetAlignment(); + imageFit_ = image->GetImageFit(); + fitMaxSize_ = image->GetFitMaxSize(); + imageRepeat_ = image->GetImageRepeat(); + color_ = image->GetColor(); + isColorSet_ = image->IsColorSet(); + previousLayoutSize_ = Size(); + SetTextDirection(image->GetTextDirection()); + matchTextDirection_ = image->IsMatchTextDirection(); + SetRadius(image->GetBorder()); + auto context = context_.Upgrade(); + if (context && context->GetIsDeclarative()) { + loadImgSuccessEvent_ = AceAsyncEvent&)>::Create( + image->GetLoadSuccessEventId(), context_); + loadImgFailEvent_ = AceAsyncEvent&)>::Create( + image->GetLoadFailEventId(), context_); + } else { + loadSuccessEvent_ = + AceAsyncEvent::Create(image->GetLoadSuccessEventId(), context_); + loadFailEvent_ = AceAsyncEvent::Create(image->GetLoadFailEventId(), context_); + } + } +} + +void RenderImage::PerformLayout() +{ + if (background_) { + PerformLayoutBgImage(); + return; + } + + auto context = context_.Upgrade(); + if (!context) { + return; + } + scale_ = context->GetViewScale(); + if (LessOrEqual(scale_, 0)) { + scale_ = 1.0; + } + if (width_.IsValid() && height_.IsValid()) { + imageComponentSize_ = Size(NormalizeToPx(width_), NormalizeToPx(height_)); + isImageSizeSet_ = true; + } + // Divided by the true pixel ratio to apply image fit. + Size pictureSize = Measure() * (1.0 / scale_); + auto maxSize = GetLayoutParam().GetMaxSize(); + if (fitMaxSize_ && (!imageComponentSize_.IsValid() || (!isImageSizeSet_ && maxSize != formerMaxSize_))) { + imageComponentSize_ = maxSize; + formerMaxSize_ = imageComponentSize_; + } + SetLayoutSize(GetLayoutParam().Constrain(imageComponentSize_.IsValid() && !imageComponentSize_.IsInfinite() ? + imageComponentSize_ : CalculateBackupImageSize(pictureSize))); + if (rawImageSizeUpdated_) { + previousLayoutSize_ = GetLayoutSize(); + } + srcRect_.SetRect(Offset(), pictureSize); + dstRect_.SetRect(Offset(), GetLayoutSize()); + ApplyImageFit(srcRect_, dstRect_); + // Restore image size. + srcRect_.ApplyScale(scale_); + if (paddingHorizontal_ > 0.0 || paddingVertical_ > 0.0) { + GenerateRepeatRects(dstRect_, + GetLayoutSize() - Size(paddingHorizontal_ * (horizontalRepeatNum_ * 2 - 1), paddingVertical_ * 2), + imageRepeat_); + ACE_DCHECK(!rectList_.empty()); + auto iter = rectList_.begin(); + iter->SetOffset(iter->GetOffset() + Offset(paddingHorizontal_, paddingVertical_)); + for (int32_t index = 1; index < static_cast(rectList_.size()); index++) { + iter++; + iter->SetOffset(iter->GetOffset() + Offset(paddingHorizontal_ * (2 * index + 1), paddingVertical_)); + } + } else { + GenerateRepeatRects(dstRect_, GetLayoutSize(), imageRepeat_); + } + if (!imageComponentSize_.IsValid()) { + SetLayoutSize(dstRect_.GetSize()); + std::for_each( + rectList_.begin(), rectList_.end(), [offset = dstRect_.GetOffset()](Rect& rect) { rect -= offset; }); + } + if (renderAltImage_) { + LayoutParam altLayoutParam; + altLayoutParam.SetFixedSize(GetLayoutSize()); + renderAltImage_->Layout(altLayoutParam); + } + CalculateResizeTarget(); +} + +Size RenderImage::CalculateBackupImageSize(const Size& pictureSize) const +{ + if (!pictureSize.IsValid()) { + return Size(); + } + uint8_t infiniteStatus = (static_cast(imageComponentSize_.IsWidthInfinite()) << 1) | + static_cast(imageComponentSize_.IsHeightInfinite()); + double pictureSizeRatio = pictureSize.Width() / pictureSize.Height(); + Size backupImageSize = imageComponentSize_; + switch (infiniteStatus) { + case 0b00: // both width and height are infinite + backupImageSize = pictureSize; + break; + case 0b01: // only height is infinite + backupImageSize.SetHeight(imageComponentSize_.Width() / pictureSizeRatio); + break; + case 0b10: // only width is infinite + backupImageSize.SetWidth(imageComponentSize_.Height() * pictureSizeRatio); + break; + default: + backupImageSize = imageComponentSize_; + break; + } + return backupImageSize; +} + +bool RenderImage::NeedResize() const +{ + if (!resizeTarget_.IsValid()) { + return false; + } + if (!previousResizeTarget_.IsValid()) { + return true; + } + if (resizeTarget_ < previousResizeTarget_) { + return false; + } + double widthEnlargedBy = resizeTarget_.Width() / previousResizeTarget_.Width(); + double heightEnlargedBy = resizeTarget_.Height() / previousResizeTarget_.Height(); + if (widthEnlargedBy > RESIZE_AGAIN_THRESHOLD || heightEnlargedBy > RESIZE_AGAIN_THRESHOLD) { + return true; + } + return false; +} + +void RenderImage::CalculateResizeTarget() +{ + if (!srcRect_.IsValid()) { + return; + } + double widthScale = dstRect_.Width() / srcRect_.Width() * scale_; + double heightScale = dstRect_.Height() / srcRect_.Height() * scale_; + if (widthScale < 1.0 && heightScale < 1.0) { + resizeScale_ = Size(widthScale, heightScale); + } else { + resizeScale_ = Size(1.0, 1.0); + } + resizeTarget_ = Size(rawImageSize_.Width() * resizeScale_.Width(), rawImageSize_.Height() * resizeScale_.Height()); +} + +void RenderImage::ApplyImageFit(Rect& srcRect, Rect& dstRect) +{ + Size rawPicSize = srcRect.GetSize(); + Size layoutSize = GetLayoutSize(); + switch (imageFit_) { + case ImageFit::FILL: + break; + case ImageFit::NONE: + ApplyNone(srcRect, dstRect, rawPicSize, layoutSize); + break; + case ImageFit::COVER: + ApplyCover(srcRect, dstRect, rawPicSize, layoutSize); + break; + case ImageFit::FITWIDTH: + ApplyFitWidth(srcRect, dstRect, rawPicSize, layoutSize); + break; + case ImageFit::FITHEIGHT: + ApplyFitHeight(srcRect, dstRect, rawPicSize, layoutSize); + break; + case ImageFit::SCALEDOWN: + if (srcRect.GetSize() < dstRect.GetSize()) { + ApplyNone(srcRect, dstRect, rawPicSize, layoutSize); + } else { + ApplyContain(srcRect, dstRect, rawPicSize, layoutSize); + } + break; + case ImageFit::CONTAIN: + ApplyContain(srcRect, dstRect, rawPicSize, layoutSize); + break; + default: + ApplyContain(srcRect, dstRect, rawPicSize, layoutSize); + break; + } +} + +void RenderImage::ApplyContain(Rect& srcRect, Rect& dstRect, const Size& rawPicSize, const Size& layoutSize) +{ + if (!rawPicSize.IsValid()) { + return; + } + if (Size::CalcRatio(srcRect) > Size::CalcRatio(dstRect)) { + dstRect.SetSize(rawPicSize * (layoutSize.Width() / rawPicSize.Width())); + } else { + dstRect.SetSize(rawPicSize * (layoutSize.Height() / rawPicSize.Height())); + } + dstRect.SetOffset(Alignment::GetAlignPosition(layoutSize, dstRect.GetSize(), alignment_)); +} + +void RenderImage::ApplyCover(Rect& srcRect, Rect& dstRect, const Size& rawPicSize, const Size& layoutSize) +{ + if (Size::CalcRatio(srcRect) > Size::CalcRatio(dstRect)) { + srcRect.SetSize(layoutSize * (rawPicSize.Height() / layoutSize.Height())); + } else { + srcRect.SetSize(layoutSize * (rawPicSize.Width() / layoutSize.Width())); + } + srcRect.SetOffset(Alignment::GetAlignPosition(rawPicSize, srcRect.GetSize(), alignment_)); +} + +void RenderImage::ApplyFitWidth(Rect& srcRect, Rect& dstRect, const Size& rawPicSize, const Size& layoutSize) +{ + if (Size::CalcRatio(srcRect) > Size::CalcRatio(dstRect)) { + dstRect.SetSize(rawPicSize * (layoutSize.Width() / rawPicSize.Width())); + dstRect.SetOffset(Alignment::GetAlignPosition(layoutSize, dstRect.GetSize(), alignment_)); + } else { + srcRect.SetSize(layoutSize * (rawPicSize.Width() / layoutSize.Width())); + srcRect.SetOffset(Alignment::GetAlignPosition(rawPicSize, srcRect.GetSize(), alignment_)); + } +} + +void RenderImage::ApplyFitHeight(Rect& srcRect, Rect& dstRect, const Size& rawPicSize, const Size& layoutSize) +{ + if (Size::CalcRatio(srcRect) > Size::CalcRatio(dstRect)) { + srcRect.SetSize(layoutSize * (rawPicSize.Height() / layoutSize.Height())); + srcRect.SetOffset(Alignment::GetAlignPosition(rawPicSize, srcRect.GetSize(), alignment_)); + } else { + dstRect.SetSize(rawPicSize * (layoutSize.Height() / rawPicSize.Height())); + dstRect.SetOffset(Alignment::GetAlignPosition(layoutSize, dstRect.GetSize(), alignment_)); + } +} + +void RenderImage::ApplyNone(Rect& srcRect, Rect& dstRect, const Size& rawPicSize, const Size& layoutSize) +{ + Size srcSize = + Size(std::min(layoutSize.Width(), rawPicSize.Width()), std::min(layoutSize.Height(), rawPicSize.Height())); + dstRect.SetRect(Alignment::GetAlignPosition(layoutSize, srcSize, alignment_), srcSize); + srcRect.SetRect(Alignment::GetAlignPosition(rawPicSize, srcSize, alignment_), srcSize); +} + +void RenderImage::GenerateRepeatRects( + const Rect& fundamentalRect, const Size& parentSize, const ImageRepeat& imageRepeat) +{ + rectList_.clear(); + if (!(fundamentalRect.GetSize() < parentSize)) { + if (fundamentalRect.GetSize() != parentSize) { + LOGW("Invalid input! Please check fundamentalRect size and parentSize."); + } + rectList_.push_back(fundamentalRect); + return; + } + if (!fundamentalRect.GetSize().IsValid()) { + LOGW("Invalid fundamentalRect size! Please check fundamentalRect size."); + return; + } + + double beforeCeilNum = fundamentalRect.Left() / fundamentalRect.Width(); + double leftRepeatNum = NearZero(beforeCeilNum - floor(beforeCeilNum)) ? floor(beforeCeilNum) : ceil(beforeCeilNum); + beforeCeilNum = (parentSize.Width() - fundamentalRect.Right()) / fundamentalRect.Width(); + double rightRepeatNum = NearZero(beforeCeilNum - floor(beforeCeilNum)) ? floor(beforeCeilNum) : ceil(beforeCeilNum); + beforeCeilNum = fundamentalRect.Top() / fundamentalRect.Height(); + double upRepeatNum = NearZero(beforeCeilNum - floor(beforeCeilNum)) ? floor(beforeCeilNum) : ceil(beforeCeilNum); + beforeCeilNum = (parentSize.Height() - fundamentalRect.Bottom()) / fundamentalRect.Height(); + double bottomRepeatNum = + NearZero(beforeCeilNum - floor(beforeCeilNum)) ? floor(beforeCeilNum) : ceil(beforeCeilNum); + switch (imageRepeat) { + case ImageRepeat::REPEAT: + break; + case ImageRepeat::REPEATX: + upRepeatNum = 0.0; + bottomRepeatNum = 0.0; + break; + case ImageRepeat::REPEATY: + leftRepeatNum = 0.0; + rightRepeatNum = 0.0; + break; + default: + upRepeatNum = 0.0; + bottomRepeatNum = 0.0; + leftRepeatNum = 0.0; + rightRepeatNum = 0.0; + break; + } + for (int32_t i = -1 * upRepeatNum; i <= bottomRepeatNum; i++) { + for (int32_t j = -1 * leftRepeatNum; j <= rightRepeatNum; j++) { + rectList_.push_back(fundamentalRect + Offset(j * fundamentalRect.Width(), i * fundamentalRect.Height())); + } + } +} + +void RenderImage::FireLoadEvent(const Size& picSize) const +{ + auto context = context_.Upgrade(); + if (context && context->GetIsDeclarative()) { + if (loadImgSuccessEvent_ && (imageLoadingStatus_ == ImageLoadingStatus::LOAD_SUCCESS)) { + loadImgSuccessEvent_(std::make_shared(picSize.Width(), picSize.Height())); + } + if (loadImgFailEvent_ && (imageLoadingStatus_ == ImageLoadingStatus::LOAD_FAIL)) { + loadImgFailEvent_(std::make_shared()); + } + return; + } + std::string param; + if (loadSuccessEvent_ && (imageLoadingStatus_ == ImageLoadingStatus::LOAD_SUCCESS)) { + param = std::string("\"complete\",{\"width\":") + .append(std::to_string(picSize.Width())) + .append(",\"height\":") + .append(std::to_string(picSize.Height())) + .append("}"); + loadSuccessEvent_(param); + } + if (loadFailEvent_ && (imageLoadingStatus_ == ImageLoadingStatus::LOAD_FAIL)) { + param = std::string("\"error\",{\"width\":") + .append(std::to_string(picSize.Width())) + .append(",\"height\":") + .append(std::to_string(picSize.Height())) + .append("}"); + loadFailEvent_(param); + } +} + +void RenderImage::SetRadius(const Border& border) +{ + auto leftEdgeWidth = border.Left().GetWidth(); + auto topEdgeWidth = border.Top().GetWidth(); + auto rightEdgeWidth = border.Right().GetWidth(); + auto bottomEdgeWidth = border.Bottom().GetWidth(); + topLeftRadius_ = Radius(border.TopLeftRadius() - Radius(topEdgeWidth, leftEdgeWidth)); + topRightRadius_ = Radius(border.TopRightRadius() - Radius(topEdgeWidth, rightEdgeWidth)); + bottomLeftRadius_ = Radius(border.BottomLeftRadius() - Radius(bottomEdgeWidth, leftEdgeWidth)); + bottomRightRadius_ = Radius(border.BottomRightRadius() - Radius(bottomEdgeWidth, rightEdgeWidth)); +} + +bool RenderImage::IsSVG(const std::string& src, InternalResource::ResourceId resourceId) +{ + // 4 is the length of ".svg". + return (src.size() > 4 && src.substr(src.size() - 4) == ".svg") || + (src.empty() && resourceId > InternalResource::ResourceId::SVG_START && + resourceId < InternalResource::ResourceId::SVG_END); +} + +void RenderImage::PerformLayoutBgImage() +{ + if (!background_) { + return; + } + if (!rawImageSize_.IsValid()) { + return; + } + + GenerateImageRects(rawImageSize_, imageSize_, imageRepeat_, imagePosition_); + srcRect_.SetOffset(Offset()); + srcRect_.SetSize(rawImageSize_); + dstRect_.SetOffset(Offset()); + dstRect_.SetSize(imageRenderSize_); +} + +void RenderImage::GenerateImageRects(const Size& srcSize, const BackgroundImageSize& imageSize, ImageRepeat imageRepeat, + const BackgroundImagePosition& imagePosition) +{ + rectList_.clear(); + if (NearEqual(boxPaintSize_.Width(), Size::INFINITE_SIZE) || + NearEqual(boxPaintSize_.Height(), Size::INFINITE_SIZE)) { + boxPaintSize_ = viewPort_; + } + + // Different with Image Repeat + imageRenderSize_ = CalculateImageRenderSize(srcSize, imageSize); + if (NearZero(imageRenderSize_.Width()) || NearZero(imageRenderSize_.Height())) { + return; + } + // Ceil render size + imageRenderSize_ = Size(ceil(imageRenderSize_.Width()), ceil(imageRenderSize_.Height())); + + CalculateImageRenderPosition(imagePosition); + + int32_t minX = 0; + int32_t minY = 0; + int32_t maxX = 0; + int32_t maxY = 0; + if (imageRepeat == ImageRepeat::REPEAT || imageRepeat == ImageRepeat::REPEATX) { + if (LessOrEqual(imageRenderPosition_.GetX(), 0.0)) { + minX = 0; + maxX = std::ceil((boxPaintSize_.Width() - imageRenderPosition_.GetX()) / imageRenderSize_.Width()); + } else { + minX = std::floor((-imageRenderPosition_.GetX()) / imageRenderSize_.Width()); + maxX = std::ceil((boxPaintSize_.Width() - imageRenderPosition_.GetX()) / imageRenderSize_.Width()); + } + } + + if (imageRepeat == ImageRepeat::REPEAT || imageRepeat == ImageRepeat::REPEATY) { + if (LessOrEqual(imageRenderPosition_.GetY(), 0.0)) { + minY = 0; + maxY = std::ceil((boxPaintSize_.Height() - imageRenderPosition_.GetY()) / imageRenderSize_.Height()); + } else { + minY = std::floor((-imageRenderPosition_.GetY()) / imageRenderSize_.Height()); + maxY = std::ceil((boxPaintSize_.Height() - imageRenderPosition_.GetY()) / imageRenderSize_.Height()); + } + } + + Rect imageCell = Rect(imageRenderPosition_, Size(imageRenderSize_.Width(), imageRenderSize_.Height())); + for (int32_t i = minY; i <= maxY; ++i) { + for (int32_t j = minX; j <= maxX; ++j) { + rectList_.emplace_back(imageCell + Offset(j * imageRenderSize_.Width(), i * imageRenderSize_.Height())); + } + } + + if (imageLoadingStatus_ == ImageLoadingStatus::LOAD_SUCCESS) { + currentDstRectList_ = rectList_; + } + LOGD("[BOX][Dep:%{public}d][%{public}p][IMAGE] Result: X:%{public}d-%{public}d, Y:%{public}d-%{public}d", + GetDepth(), this, minX, maxX, minY, maxY); +} + +Size RenderImage::CalculateImageRenderSize(const Size& srcSize, const BackgroundImageSize& imageSize) const +{ + Size renderSize; + if (NearZero(srcSize.Width()) || NearZero(srcSize.Height()) || NearZero(boxPaintSize_.Width()) || + NearZero(boxPaintSize_.Height())) { + return renderSize; + } + + if (!imageSize.IsValid()) { + return renderSize; + } + + if (imageSize.GetSizeTypeX() == BackgroundImageSizeType::CONTAIN || + imageSize.GetSizeTypeX() == BackgroundImageSizeType::COVER) { + renderSize = CalculateImageRenderSizeWithSingleParam(srcSize, imageSize); + } else { + renderSize = CalculateImageRenderSizeWithDoubleParam(srcSize, imageSize); + } + + return renderSize; +} + +Size RenderImage::CalculateImageRenderSizeWithSingleParam( + const Size& srcSize, const BackgroundImageSize& imageSize) const +{ + Size sizeRet; + if (NearZero(srcSize.Width()) || NearZero(srcSize.Height()) || NearZero(boxPaintSize_.Width()) || + NearZero(boxPaintSize_.Height())) { + return sizeRet; + } + double renderSizeX = 0.0; + double renderSizeY = 0.0; + if (imageSize.GetSizeTypeX() == BackgroundImageSizeType::CONTAIN) { + double srcAspectRatio = srcSize.Width() / srcSize.Height(); + double paintAspectRatio = boxPaintSize_.Width() / boxPaintSize_.Height(); + renderSizeX = paintAspectRatio >= srcAspectRatio ? srcSize.Width() * (boxPaintSize_.Height() / srcSize.Height()) + : boxPaintSize_.Width(); + renderSizeY = paintAspectRatio >= srcAspectRatio ? boxPaintSize_.Height() + : srcSize.Height() * (boxPaintSize_.Width() / srcSize.Width()); + } else if (imageSize.GetSizeTypeX() == BackgroundImageSizeType::COVER) { + double srcAspectRatio = srcSize.Width() / srcSize.Height(); + double paintAspectRatio = boxPaintSize_.Width() / boxPaintSize_.Height(); + renderSizeX = paintAspectRatio >= srcAspectRatio + ? boxPaintSize_.Width() + : srcSize.Width() * (boxPaintSize_.Height() / srcSize.Height()); + renderSizeY = paintAspectRatio >= srcAspectRatio ? srcSize.Height() * (boxPaintSize_.Width() / srcSize.Width()) + : boxPaintSize_.Height(); + } + + sizeRet.SetWidth(renderSizeX); + sizeRet.SetHeight(renderSizeY); + return sizeRet; +} + +Size RenderImage::CalculateImageRenderSizeWithDoubleParam( + const Size& srcSize, const BackgroundImageSize& imageSize) const +{ + Size sizeRet; + if (NearZero(srcSize.Width()) || NearZero(srcSize.Height()) || NearZero(boxPaintSize_.Width()) || + NearZero(boxPaintSize_.Height())) { + return sizeRet; + } + + double renderSizeX = 0.0; + double renderSizeY = 0.0; + if (imageSize.GetSizeTypeX() == BackgroundImageSizeType::LENGTH) { + renderSizeX = imageSize.GetSizeValueX(); + } else if (imageSize.GetSizeTypeX() == BackgroundImageSizeType::PERCENT) { + renderSizeX = boxPaintSize_.Width() * imageSize.GetSizeValueX() / PERCENT_TRANSLATE; + } + + if (imageSize.GetSizeTypeY() == BackgroundImageSizeType::LENGTH) { + renderSizeY = imageSize.GetSizeValueY(); + } else if (imageSize.GetSizeTypeY() == BackgroundImageSizeType::PERCENT) { + renderSizeY = boxPaintSize_.Height() * imageSize.GetSizeValueY() / PERCENT_TRANSLATE; + } + + if (imageSize.GetSizeTypeX() == BackgroundImageSizeType::AUTO && + imageSize.GetSizeTypeY() == BackgroundImageSizeType::AUTO) { + renderSizeX = srcSize.Width(); + renderSizeY = srcSize.Height(); + } else if (imageSize.GetSizeTypeX() == BackgroundImageSizeType::AUTO) { + renderSizeX = srcSize.Width() * (renderSizeY / srcSize.Height()); + } else if (imageSize.GetSizeTypeY() == BackgroundImageSizeType::AUTO) { + renderSizeY = srcSize.Height() * (renderSizeX / srcSize.Width()); + } + + sizeRet.SetWidth(renderSizeX); + sizeRet.SetHeight(renderSizeY); + if (!sizeRet.IsValid()) { + sizeRet = Size(); + } + return sizeRet; +} + +void RenderImage::CalculateImageRenderPosition(const BackgroundImagePosition& imagePosition) +{ + Offset offset; + + if (imagePosition.GetSizeTypeX() == BackgroundImagePositionType::PX) { + offset.SetX(imagePosition.GetSizeValueX()); + } else { + offset.SetX( + imagePosition.GetSizeValueX() * (boxPaintSize_.Width() - imageRenderSize_.Width()) / PERCENT_TRANSLATE); + } + + if (imagePosition.GetSizeTypeY() == BackgroundImagePositionType::PX) { + offset.SetY(imagePosition.GetSizeValueY()); + } else { + offset.SetY( + imagePosition.GetSizeValueY() * (boxPaintSize_.Height() - imageRenderSize_.Height()) / PERCENT_TRANSLATE); + } + + imageRenderPosition_ = offset; +} + +void RenderImage::ClearRenderObject() +{ + RenderNode::ClearRenderObject(); + + isImageSizeSet_ = false; + rawImageSizeUpdated_ = false; + matchTextDirection_ = false; + imageComponentSize_ = Size(); + formerMaxSize_ = Size(); + alignment_ = Alignment::CENTER; + imageLoadingStatus_ = ImageLoadingStatus::UNLOADED; + + imageFit_ = ImageFit::COVER; + imageRepeat_ = ImageRepeat::NOREPEAT; + rectList_.clear(); + color_ = Color::TRANSPARENT; + resourceId_ = InternalResource::ResourceId::NO_ID; + singleWidth_ = 0.0; + displaySrcWidth_ = 0.0; + scale_ = 1.0; + paddingHorizontal_ = 0.0; + paddingVertical_ = 0.0; + horizontalRepeatNum_ = 1.0; + rotate_ = 0.0; + keepOffsetZero_ = false; + resizeCallLoadImage_ = false; + frameCount_ = 0; + topLeftRadius_ = Radius(0.0); + topRightRadius_ = Radius(0.0); + bottomLeftRadius_ = Radius(0.0); + bottomRightRadius_ = Radius(0.0); + resizeScale_ = Size(); + resizeTarget_ = Size(); + previousResizeTarget_ = Size(); + currentResizeScale_ = Size(); + width_ = Dimension(); + height_ = Dimension(); + rawImageSize_ = Size(); + renderAltImage_ = nullptr; + + imageUpdateFunc_ = nullptr; + background_ = false; + boxPaintSize_ = Size(); + boxMarginOffset_ = Offset(); + imageSize_ = BackgroundImageSize(); + imagePosition_ = BackgroundImagePosition(); + + imageRenderSize_ = Size(); + imageRenderPosition_ = Offset(); +} + +void RenderImage::PrintImageLog(const Size& srcSize, const BackgroundImageSize& imageSize, ImageRepeat imageRepeat, + const BackgroundImagePosition& imagePosition) const +{ + LOGD("[BOX][IMAGE][Dep:%{public}d] Param:Src W:%{public}.1lf, H:%{public}.1lf, Size:%{public}.1lf|%{public}d, " + "%{public}.1lf|%{public}d, Rep:%{public}u, Pos X:%{public}.1lf|%{public}d, Y:%{public}.1lf|%{public}d, " + "BoxPaint:%{public}.1lf * %{public}.1lf, MarginOffset: %{public}.1lf * %{public}.1lf", + GetDepth(), srcSize.Width(), srcSize.Height(), imageSize.GetSizeValueX(), imageSize.GetSizeTypeX(), + imageSize.GetSizeValueY(), imageSize.GetSizeTypeY(), imageRepeat, imagePosition.GetSizeValueX(), + imagePosition.GetSizeTypeX(), imagePosition.GetSizeValueY(), imagePosition.GetSizeTypeY(), + boxPaintSize_.Width(), boxPaintSize_.Height(), boxMarginOffset_.GetX(), boxMarginOffset_.GetY()); + LOGD("[BOX][IMAGE][Dep:%{public}d] Result: Size:(%{public}.1lf*%{public}.1lf), Pos(%{public}.1lf,%{public}.1lf), " + "rect:%{public}s", + GetDepth(), imageRenderSize_.Width(), imageRenderSize_.Height(), imageRenderPosition_.GetX(), + imageRenderPosition_.GetY(), rectList_.front().ToString().c_str()); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/image/render_image.h b/frameworks/core/components/image/render_image.h new file mode 100644 index 00000000..c2f0fd44 --- /dev/null +++ b/frameworks/core/components/image/render_image.h @@ -0,0 +1,245 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_IMAGE_RENDER_IMAGE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_IMAGE_RENDER_IMAGE_H + +#include "base/resource/internal_resource.h" +#include "core/components/common/layout/constants.h" +#include "core/components/common/properties/alignment.h" +#include "core/components/common/properties/border.h" +#include "core/components/common/properties/color.h" +#include "core/components/common/properties/decoration.h" +#include "core/components/common/properties/radius.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +enum class ImageLoadingStatus { + UNLOADED = 0, + LOADING, + UPDATING, + LOAD_SUCCESS, + LOAD_FAIL, +}; + +class RenderImage : public RenderNode { + DECLARE_ACE_TYPE(RenderImage, RenderNode); + +public: + static RefPtr Create(); + static bool IsSVG(const std::string& src, InternalResource::ResourceId resourceId); + virtual Size Measure() = 0; + void SetImageComponentSize(const Size& imageComponentSize) + { + imageComponentSize_ = imageComponentSize; + } + const Size& GetImageComponentSize() const + { + return imageComponentSize_; + } + void SetImageFit(ImageFit imageFit) + { + imageFit_ = imageFit; + } + void SetImageSrc(const std::string& imageSrc) + { + if (imageSrc != imageSrc_) { + imageSrc_ = imageSrc; + UpdateImageProvider(); + } + } + const std::list& GetRectList() const + { + return rectList_; + } + void SetMatchTextDirection(bool matchTextDirection) + { + matchTextDirection_ = matchTextDirection; + } + void SetRotate(double rotate) + { + rotate_ = rotate; + } + + void SetImageRepeat(const ImageRepeat& imageRepeat) + { + if (imageRepeat_ != imageRepeat) { + imageRepeat_ = imageRepeat; + MarkNeedLayout(); + } + } + + void SetBgImageSize(BackgroundImageSizeType type, double value = FULL_IMG_SIZE, double directionX = true) + { + if (background_ && directionX) { + if (type != imageSize_.GetSizeTypeX() || !NearEqual(value, imageSize_.GetSizeValueX())) { + imageSize_.SetSizeTypeX(type); + imageSize_.SetSizeValueX(value); + MarkNeedLayout(); + } + } + if (background_ && !directionX) { + if (type != imageSize_.GetSizeTypeY() || !NearEqual(value, imageSize_.GetSizeValueY())) { + imageSize_.SetSizeTypeY(type); + imageSize_.SetSizeValueY(value); + MarkNeedLayout(); + } + } + } + + void SetBgImagePosition(const BackgroundImagePosition& imagePosition) + { + if (background_ && imagePosition != imagePosition_) { + imagePosition_ = imagePosition; + MarkNeedLayout(); + } + } + + using ImageUpdateFunc = std::function; + void RegisterImageUpdateFunc(const ImageUpdateFunc& imageUpdateFunc) + { + imageUpdateFunc_ = imageUpdateFunc; + } + + void SetBackgroundImageFlag(bool backgroundImageFlag) + { + if (background_ != backgroundImageFlag) { + background_ = backgroundImageFlag; + } + } + + bool GetBackgroundImageFlag() const + { + return background_; + } + + void SetBgImageBoxPaintSize(const Size& boxPaintSize) + { + if (background_ && boxPaintSize_ != boxPaintSize) { + boxPaintSize_ = boxPaintSize; + MarkNeedLayout(); + } + } + + void SetBgImageBoxMarginOffset(const Offset& boxMarginOffset) + { + if (background_ && boxMarginOffset_ != boxMarginOffset) { + boxMarginOffset_ = boxMarginOffset; + MarkNeedLayout(); + } + } + + virtual void UpdateResourceId(InternalResource::ResourceId resourceId, bool onlySelfLayout) + { + resourceId_ = resourceId; + MarkNeedLayout(onlySelfLayout); + } + + void Update(const RefPtr& component) override; + void PerformLayout() override; + void GenerateRepeatRects(const Rect& fundamentalRect, const Size& parentSize, const ImageRepeat& imageRepeat); + virtual void UpdateImageProvider() {} + +protected: + void ApplyImageFit(Rect& srcRect, Rect& dstRect); + void ApplyContain(Rect& srcRect, Rect& dstRect, const Size& rawPicSize, const Size& imageComponentSize); + void ApplyCover(Rect& srcRect, Rect& dstRect, const Size& rawPicSize, const Size& imageComponentSize); + void ApplyFitWidth(Rect& srcRect, Rect& dstRect, const Size& rawPicSize, const Size& imageComponentSize); + void ApplyFitHeight(Rect& srcRect, Rect& dstRect, const Size& rawPicSize, const Size& imageComponentSize); + void ApplyNone(Rect& srcRect, Rect& dstRect, const Size& rawPicSize, const Size& imageComponentSize); + void FireLoadEvent(const Size& picSize) const; + void SetRadius(const Border& border); + void CalculateResizeTarget(); + bool NeedResize() const; + + // background image + void PerformLayoutBgImage(); + void GenerateImageRects(const Size& srcSize, const BackgroundImageSize& imageSize, ImageRepeat imageRepeat, + const BackgroundImagePosition& imagePosition); + Size CalculateImageRenderSize(const Size& srcSize, const BackgroundImageSize& imageSize) const; + Size CalculateImageRenderSizeWithSingleParam(const Size& srcSize, const BackgroundImageSize& imageSize) const; + Size CalculateImageRenderSizeWithDoubleParam(const Size& srcSize, const BackgroundImageSize& imageSize) const; + void CalculateImageRenderPosition(const BackgroundImagePosition& imagePosition); + void PrintImageLog(const Size& srcSize, const BackgroundImageSize& imageSize, ImageRepeat imageRepeat, + const BackgroundImagePosition& imagePosition) const; + Size CalculateBackupImageSize(const Size& pictureSize) const; + virtual void ClearRenderObject() override; + + std::string imageSrc_; + std::string imageAlt_; + std::function loadSuccessEvent_; + std::function loadFailEvent_; + std::function&)> loadImgSuccessEvent_; + std::function&)> loadImgFailEvent_; + bool fitMaxSize_ = false; + bool isImageSizeSet_ = false; + bool rawImageSizeUpdated_ = false; + bool matchTextDirection_ = false; + Size previousLayoutSize_; + Size imageComponentSize_; + Size formerMaxSize_; + Alignment alignment_ = Alignment::CENTER; + ImageLoadingStatus imageLoadingStatus_ = ImageLoadingStatus::UNLOADED; + + // Real picture area with px. + Rect srcRect_; + Rect dstRect_; + Rect currentSrcRect_; + std::list currentDstRectList_; + ImageFit imageFit_ = ImageFit::COVER; + ImageRepeat imageRepeat_ = ImageRepeat::NOREPEAT; + std::list rectList_; + Color color_ = Color::TRANSPARENT; + bool isColorSet_ = false; + InternalResource::ResourceId resourceId_ = InternalResource::ResourceId::NO_ID; + double singleWidth_ = 0.0; + double displaySrcWidth_ = 0.0; + double scale_ = 1.0; + double paddingHorizontal_ = 0.0; + double paddingVertical_ = 0.0; + double horizontalRepeatNum_ = 1.0; + double rotate_ = 0.0; + bool keepOffsetZero_ = false; + bool resizeCallLoadImage_ = false; + int32_t frameCount_ = 0; + Radius topLeftRadius_ = Radius(0.0); + Radius topRightRadius_ = Radius(0.0); + Radius bottomLeftRadius_ = Radius(0.0); + Radius bottomRightRadius_ = Radius(0.0); + Size resizeScale_; + Size resizeTarget_; + Size previousResizeTarget_; + Size currentResizeScale_; + Dimension width_; + Dimension height_; + Size rawImageSize_; + RefPtr renderAltImage_; + + // background image + ImageUpdateFunc imageUpdateFunc_; + bool background_ = false; + Size boxPaintSize_; + Offset boxMarginOffset_; + BackgroundImageSize imageSize_; + BackgroundImagePosition imagePosition_; + // result for background image + Size imageRenderSize_; + Offset imageRenderPosition_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_IMAGE_RENDER_IMAGE_H diff --git a/frameworks/core/components/indexer/BUILD.gn b/frameworks/core/components/indexer/BUILD.gn new file mode 100644 index 00000000..c9fcca17 --- /dev/null +++ b/frameworks/core/components/indexer/BUILD.gn @@ -0,0 +1,28 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("indexer") { + sources = [ + "indexer_component.cpp", + "indexer_element.cpp", + "indexer_item_component.cpp", + "indexer_list_component.cpp", + "indexer_list_element.cpp", + "render_indexer.cpp", + "render_indexer_circle.cpp", + "render_indexer_item.cpp", + "render_indexer_list.cpp", + ] +} diff --git a/frameworks/core/components/indexer/indexer_component.cpp b/frameworks/core/components/indexer/indexer_component.cpp new file mode 100644 index 00000000..06971a37 --- /dev/null +++ b/frameworks/core/components/indexer/indexer_component.cpp @@ -0,0 +1,592 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/indexer/indexer_component.h" + +#include "core/components/arc/arc_component.h" +#include "core/components/common/properties/shadow_config.h" +#include "core/components/indexer/indexer_element.h" +#include "core/components/indexer/render_indexer_circle.h" +#include "core/components/text/text_component.h" + +namespace OHOS::Ace { + +RefPtr Ace::IndexerComponent::CreateElement() +{ + LOGI("[indexer] CreateElement "); + return AceType::MakeRefPtr(); +} + +RefPtr IndexerComponent::CreateRenderNode() +{ + LOGI("[indexer] CreateRenderNode "); + if (circleMode_) { + return AceType::MakeRefPtr(); + } else { + return AceType::MakeRefPtr(); + } +} + +void IndexerComponent::FormatLabelAlphabet() +{ + for (auto& item : indexerLabel_) { + if (item == INDEXER_STR_DOT_EX) { + item = INDEXER_STR_DOT; + } + } +} + +void IndexerComponent::BuildDefaultAlphabet() +{ + defaultAlphaLocal_ = GetU16StrVector(alphabetIndexer_); +} + +void IndexerComponent::BuildIndexerAlphabet() +{ + BuildDefaultAlphabet(); + std::vector alphabet = Localization::GetInstance()->GetIndexAlphabet(); // get alphabet + if (alphabet.empty()) { + LOGE("fail to build indexer alphabet due to alphabet is empty"); + return; + } + FormatLabelAlphabet(); + // alphabet must begin with "#", and items "." can not be neighbors + if (alphabet[0] != INDEXER_STR_SHARP || indexerLabel_[0] != INDEXER_STR_SHARP) { + LOGE("fail to build indexer alphabet due to alphabet is wrong"); + return; + } + + sectionsLocal_.clear(); + labelLocal_.clear(); + + std::u16string strItem; + size_t countAlphabet = 0; + for (size_t i = 0; i < indexerLabel_.size(); ++i) { + if (indexerLabel_[i] != INDEXER_STR_DOT) { + sectionsLocal_.push_back(indexerLabel_[i]); + labelLocal_.push_back(indexerLabel_[i]); + ++countAlphabet; + } else { + if (i == indexerLabel_.size() - 1) { // while this "." is the last item + while (countAlphabet < alphabet.size()) { + strItem += alphabet[countAlphabet]; + strItem += INDEXER_STR_SPACE; + ++countAlphabet; + } + sectionsLocal_.push_back(strItem); + labelLocal_.push_back(indexerLabel_[i]); + } else if (indexerLabel_[i + 1] != INDEXER_STR_DOT) { // while the next item is not "." + while ((countAlphabet < alphabet.size()) && (indexerLabel_[i + 1] != alphabet[countAlphabet])) { + strItem += alphabet[countAlphabet]; + strItem += INDEXER_STR_SPACE; + ++countAlphabet; + } + sectionsLocal_.push_back(strItem); + labelLocal_.push_back(indexerLabel_[i]); + } else { + // Do nothing while the next item is "." too + } + } + strItem.clear(); + } +} + +void IndexerComponent::InitIndexerItemStyle() +{ + if (GetCircleMode()) { + // Indexer item style when binding list item is not current. + normalStyle_.SetFontSize(Dimension(INDEXER_CIRCLE_ITEM_TEXT_SIZE, DimensionUnit::FP)); + normalStyle_.SetFontWeight(FontWeight::W400); + normalStyle_.SetTextColor(Color::WHITE); + + // Indexer item style when binding list item is current. + activeStyle_ = normalStyle_; + } else { + // Indexer item style when binding list item is not current. + normalStyle_.SetFontSize(Dimension(INDEXER_ITEM_TEXT_SIZE, DimensionUnit::FP)); + normalStyle_.SetFontWeight(FontWeight::W400); + normalStyle_.SetTextColor(Color(INDEXER_LIST_COLOR)); + + // Indexer item style when binding list item is current. + activeStyle_.SetFontSize(Dimension(INDEXER_LIST_ITEM_TEXT_SIZE, DimensionUnit::FP)); + activeStyle_.SetFontWeight(FontWeight::W500); + activeStyle_.SetTextColor(Color(INDEXER_LIST_ACTIVE_COLOR)); + } +} + +void IndexerComponent::BuildArcItem() +{ + RefPtr arcItem = AceType::MakeRefPtr(); + arcItem->SetWidth(itemSize_); + arcItem->SetStartAngle(startPosition_); + arcItem->SetSweepAngle(arcLength_); + arcItem->SetColor(Color(INDEXER_CIRCLE_ARC_COLOR)); + arcItem->SetShadowWidth(Dimension(INDEXER_CIRCLE_ITEM_SHADOW_RADIUS, DimensionUnit::VP)); + AppendChild(arcItem); + nonItemCount_++; +} + +void IndexerComponent::BuildBubbleBox() +{ + if (!bubbleEnabled_) { + return; + } + RefPtr bubble = AceType::MakeRefPtr(); + bubble->SetFlex(BoxFlex::FLEX_NO); + bubble->SetAlignment(Alignment::CENTER); + Radius radius = Radius(Dimension(BUBBLE_BOX_SIZE_CIRCLE, DimensionUnit::VP) * HALF); + RefPtr back = AceType::MakeRefPtr(); + if (circleMode_) { + bubble->SetWidth(BUBBLE_BOX_SIZE_CIRCLE, DimensionUnit::VP); + bubble->SetHeight(BUBBLE_BOX_SIZE_CIRCLE, DimensionUnit::VP); + back->SetBackgroundColor(Color(BUBBLE_BG_COLOR_CIRCLE).BlendOpacity(NINETY_OPACITY_IN_PERCENT)); + } else { + // for shadow blur region + bubble->SetMargin(Edge(200)); + bubble->SetWidth(BUBBLE_BOX_SIZE, DimensionUnit::VP); + bubble->SetHeight(BUBBLE_BOX_SIZE, DimensionUnit::VP); + radius = Radius(Dimension(BUBBLE_BOX_RADIUS, DimensionUnit::VP)); + back->SetBackgroundColor(Color(BUBBLE_BG_COLOR).BlendOpacity(NINETY_OPACITY_IN_PERCENT)); + back->AddShadow(ShadowConfig::DefaultShadowL); + } + back->SetBorderRadius(radius); + bubble->SetBackDecoration(back); + bubbleText_ = AceType::MakeRefPtr(StringUtils::Str16ToStr8(INDEXER_STR_SHARP)); + TextStyle textStyle; + textStyle.SetTextAlign(TextAlign::CENTER); + if (circleMode_) { + textStyle.SetFontSize(Dimension(BUBBLE_FONT_SIZE_CIRCLE, DimensionUnit::FP)); + textStyle.SetTextColor(Color::WHITE); + } else { + textStyle.SetFontSize(Dimension(BUBBLE_FONT_SIZE, DimensionUnit::VP)); + textStyle.SetTextColor(Color(BUBBLE_FONT_COLOR)); + } + bubbleText_->SetTextStyle(textStyle); + bubble->SetChild(bubbleText_); + RefPtr displayComponent = AceType::MakeRefPtr(bubble); + displayComponent->SetOpacity(ZERO_OPACITY); + AppendChild(displayComponent); + nonItemCount_++; +} + +void IndexerComponent::BuildIndicatorBox() +{ + RefPtr indicator = AceType::MakeRefPtr(); + indicator->SetWidth(INDEXER_CIRCLE_ITEM_SIZE, DimensionUnit::VP); + indicator->SetHeight(INDEXER_CIRCLE_ITEM_SIZE, DimensionUnit::VP); + indicator->SetFlex(BoxFlex::FLEX_NO); + indicator->SetAlignment(Alignment::CENTER); + RefPtr front = AceType::MakeRefPtr(); + Radius radius = Radius(itemSize_ * HALF); + front->SetBorderRadius(radius); + front->SetBackgroundColor(Color::TRANSPARENT); + indicator->SetFrontDecoration(front); + AppendChild(indicator); + nonItemCount_++; +} + +void IndexerComponent::BuildTextItem(const std::u16string& strSection, const std::u16string& strLabel, int32_t itemType) +{ + RefPtr textItem = + AceType::MakeRefPtr(strSection, strLabel, itemSize_, circleMode_, false); + textItem->SetNormalTextStyle(normalStyle_); + textItem->SetActiveTextStyle(activeStyle_); + textItem->SetTextStyle(false); + textItem->SetItemType(itemType); + if (isFirstItem_ || strSection == INDEXER_STR_SHARP || strSection == INDEXER_STR_COLLECT) { + textItem->MarkItemPrimary(); + if (!userDefineList_ || strSection != INDEXER_STR_SHARP) { + isFirstItem_ = false; + } + } + listItem_.push_back(textItem); + AppendChild(textItem); + ++itemCount_; +} + +void IndexerComponent::BuildCollapseItem() +{ + RefPtr collapseItem = AceType::MakeRefPtr( + INDEXER_STR_COLLAPSE, INDEXER_STR_COLLAPSE, itemSize_, circleMode_, true); + collapseItem->SetNormalTextStyle(normalStyle_); + collapseItem->SetActiveTextStyle(activeStyle_); + collapseItem->SetTextStyle(false); + collapseItem->MarkItemPrimary(); + listItem_.push_back(collapseItem); + AppendChild(collapseItem); + ++itemCount_; + hasCollapseItem_ = true; +} + +void IndexerComponent::BuildIndexerItems() +{ + int32_t length = labelLocal_.size(); + if (length <= 0) { + LOGE("[indexer] invalid section string"); + return; + } + + // add arc first while circle mode + if (GetCircleMode()) { + BuildArcItem(); + BuildIndicatorBox(); + } + BuildBubbleBox(); + itemCount_ = 0; + + // add “*” item while circle mode + if (GetCircleMode() && !userDefineList_) { + BuildTextItem(INDEXER_STR_COLLECT, INDEXER_STR_COLLECT); + } + // add "#" first + if (!userDefineList_) { + BuildTextItem(INDEXER_STR_SHARP, INDEXER_STR_SHARP); + } + // add indexer items except '#' + isFirstItem_ = true; + for (int32_t i = 0; i < length; ++i) { + std::u16string strItem = labelLocal_[i]; + if (!userDefineList_ && strItem == INDEXER_STR_SHARP) { + continue; + } + BuildTextItem(sectionsLocal_[i], strItem); + } + + if (circleMode_ && multiLanguageEnabled_) { + isFirstItem_ = true; + // add default alphabet indexer + int32_t count = defaultAlphaLocal_.size(); + for (int32_t i = 0; i < count; ++i) { + std::u16string strItem = defaultAlphaLocal_[i]; + BuildTextItem(strItem, strItem, 1); + } + ++maxShowCount_; + if (userDefineList_ && indexerLabel_[0] != INDEXER_STR_COLLECT) { + --maxShowCount_; + } + } + isFirstItem_ = false; + + // add collapse item while circle mode + if (GetCircleMode() && itemCount_ > INDEXER_COLLAPSE_ITEM_COUNT) { + BuildCollapseItem(); + } + if (GetCircleMode()) { + RefPtr arc = + AceType::DynamicCast(GetChildren().empty() ? nullptr : GetChildren().front()); + if (arc) { + double arcLen = itemCount_ < maxShowCount_ ? + INDEXER_ARC_LENGTH / maxShowCount_ * (itemCount_ - 1) : INDEXER_ARC_LENGTH; + arc->SetSweepAngle(arcLen); + } + } + LOGI("[indexer] BuildIndexerItems circleMode:%{public}d, itemCount_:%{public}d", circleMode_, itemCount_); +} + +RefPtr IndexerComponent::GetIndexerItem(const std::string& indexKey) +{ + RefPtr ret = nullptr; + if (indexKey.empty()) { + LOGE("[indexer] indexKey is NULL"); + return ret; + } + + LOGI("[indexer] GetIndexerItem section: %{public}s", indexKey.c_str()); + for (const auto& item : listItem_) { + if (item->IsCorrectItem(indexKey)) { + LOGI("[indexer] section: %{public}s", StringUtils::Str16ToStr8(item->GetSectionStr()).c_str()); + ret = item; + break; + } + } + return ret; +} + +int32_t IndexerComponent::AddItemIndexKey(const std::string& indexKey, const std::string& headStyle) +{ + int32_t itemIndex = INDEXER_INVALID_INDEX; + if (!list_) { + LOGE("[indexer] AddItemIndexKey List ptr is NULL"); + return itemIndex; + } + + if (indexKey.empty()) { + LOGI("[indexer] indexKey is NULL, add to Sharp area."); + // add to sharp section, while indexkey is Null + return AddItemToSharp(indexKey, headStyle); + } + + for (const auto& item : listItem_) { + if (item && (item->IsCorrectItem(indexKey))) { + // add section head + if (item->GetKeyCount() == 0 && !GetCircleMode()) { + AddSectionHead(item, headStyle); + } + // add index key + itemIndex = item->AddIndexKey(indexKey); + break; + } + } + + // add to sharp section, while indexkey is number + if (itemIndex == INVALID_INDEX) { + itemIndex = AddItemToSharp(indexKey, headStyle); + } else { + UpdateSectionIndex(); + } + + return itemIndex; +} + +int32_t IndexerComponent::AddItemToSharp(const std::string& indexKey, const std::string& headStyle) +{ + // find the # section + RefPtr itemPtr = nullptr; + if (!listItem_.empty()) { + for (const auto& item : listItem_) { + if (item && (item->GetSectionStr() == INDEXER_STR_SHARP)) { + itemPtr = item; + break; + } + } + } + if (!itemPtr) { + LOGE("[indexer] AddItemToSharp get # section failed"); + return 0; + } + + // add section head + if (itemPtr->GetKeyCount() == 0 && !GetCircleMode()) { + AddSectionHead(itemPtr, headStyle); + } + // add index key + int32_t itemIndex = itemPtr->AddIndexKey(indexKey); + // update section head index + UpdateSectionIndex(); + + return itemIndex; +} + +void IndexerComponent::PrintItemInfo() const +{ + for (const auto& item : listItem_) { + item->PrintIndexerItem(); + } +} + +int32_t IndexerComponent::AddSectionHead( + const RefPtr& indexerItem, const std::string& headStyleStr) +{ + int32_t sectionHeadIndex = INDEXER_INVALID_INDEX; + if (GetCircleMode()) { + LOGI("[indexer] Circle Mode, cancel section head adding"); + return sectionHeadIndex; + } + + if (!list_) { + LOGE("[indexer] List ptr is NULL"); + return sectionHeadIndex; + } + + if (!indexerItem) { + LOGE("[indexer] Invalid indexerItem "); + return sectionHeadIndex; + } + + std::string strSectionHeadLabel = StringUtils::Str16ToStr8(indexerItem->GetLabelStr()); + if (strSectionHeadLabel.empty()) { + LOGE("[indexer] Invalid Section head, strSectionHead:%{public}s", strSectionHeadLabel.c_str()); + return sectionHeadIndex; + } + + // [indexer] Section head style need check + RefPtr text = AceType::MakeRefPtr(strSectionHeadLabel); + TextStyle headStyle; + if (circleMode_) { + headStyle.SetFontSize(Dimension(INDEXER_CIRCLE_ITEM_TEXT_SIZE, DimensionUnit::FP)); + } else { + headStyle.SetFontSize(Dimension(INDEXER_ITEM_TEXT_SIZE, DimensionUnit::FP)); + } + headStyle.SetFontWeight(FontWeight::W500); + headStyle.SetTextColor(Color::BLACK); + text->SetTextStyle(headStyle); + RefPtr box = AceType::MakeRefPtr(); + box->SetFlex(BoxFlex::FLEX_X); + box->SetDeliverMinToChild(false); + box->SetAlignment(Alignment::CENTER); + box->SetColor(Color::WHITE); + box->SetChild(text); + RefPtr listItem = AceType::MakeRefPtr(headStyleStr, box); + listItem->SetSticky(true); + listItem->SetIndexKey(strSectionHeadLabel); + RefPtr composedItem = + AceType::MakeRefPtr("section", "sectionComposed", listItem); + sectionHeadIndex = indexerItem->GetSectionIndex(); + list_->InsertChild(sectionHeadIndex, composedItem); + LOGI("[indexer] strSectionHeadLabel:%{public}s, headStyle:%{public}s index:%{public}d", + strSectionHeadLabel.c_str(), headStyleStr.c_str(), sectionHeadIndex); + return sectionHeadIndex; +} + +bool IndexerComponent::RemoveSectionHead(int32_t index) +{ + bool ret = false; + if (GetCircleMode()) { + LOGD("[indexer] RemoveSectionHead Circle Mode, cancel section head Delete"); + return ret; + } + + if (!list_) { + LOGE("[indexer] RemoveSectionHead List ptr is NULL"); + return ret; + } + + for (const auto& item : list_->GetChildren()) { + RefPtr listItem = ListItemComponent::GetListItem(item); + if (listItem && listItem->GetIndex() == index) { + list_->RemoveChild(item); + ret = true; + break; + } + } + + return ret; +} + +bool IndexerComponent::RemoveItemIndexKey(const std::string& indexKey) +{ + bool ret = false; + if (!list_) { + LOGE("[indexer] RemoveItemIndexKey List ptr is NULL"); + return ret; + } + + if (indexKey.empty()) { + LOGI("[indexer] RemoveItemIndexKey indexKey is NULL"); + // remove item while the index is null + return RemoveItemFromSharp(indexKey); + } + + for (const auto& item : listItem_) { + if (item && (item->IsCorrectItem(indexKey))) { + int32_t sectionHeadIndex = item->GetSectionIndex(); + // remove index key + ret = item->RemoveIndexKey(indexKey); + // remove section head + if (item->GetKeyCount() == 0 && !GetCircleMode()) { + RemoveSectionHead(sectionHeadIndex); + } + break; + } + } + + if (ret) { + // update section head index + UpdateSectionIndex(); + } else { + // remove item while indexkey is number, low probable case, put it last + ret = RemoveItemFromSharp(indexKey); + } + + return ret; +} + +bool IndexerComponent::RemoveItemFromSharp(const std::string& indexKey) +{ + // remove item from "#" section + bool ret = false; + if (!list_) { + LOGE("[indexer] RemoveItemFromSharp List ptr is NULL"); + return ret; + } + + // find section "#" + RefPtr itemPtr = nullptr; + if (!listItem_.empty()) { + for (const auto& item : listItem_) { + if (item && (item->GetSectionStr() == INDEXER_STR_SHARP)) { + itemPtr = item; + break; + } + } + } + if (!itemPtr) { + LOGE("[indexer] RemoveItemFromSharp get # section failed"); + return ret; + } + + ret = itemPtr->RemoveIndexKey(indexKey); + if (!ret) { + LOGE("[indexer] RemoveItemFromSharp remove IndexKey failed"); + return ret; + } + + // update section head index + UpdateSectionIndex(); + + return ret; +} + +int32_t IndexerComponent::GetSectionIndexInList(const std::string& indexKey) +{ + int32_t index = INVALID_INDEX; + RefPtr item = GetIndexerItem(indexKey); + if (item) { + index = item->GetSectionIndex(); + } + return index; +} + +int32_t IndexerComponent::GetSectionIndexInIndexer(int32_t index) +{ + int32_t count = 0; + if (index <= 0) { + return count; + } + for (const auto& item : listItem_) { + if (item) { + if (index < item->GetSectionIndex()) { + break; + } + } + count++; + } + return count - 1; +} + +void IndexerComponent::UpdateSectionIndex() +{ + // update section head index + if (listItem_.empty()) { + LOGE("[indexer] UpdateSectionIndex listItem_ is empty"); + return; + } + + int32_t sectionIndex = listItem_.front()->GetSectionIndex(); + for (const auto& item : listItem_) { + if (!item) { + continue; + } + item->SetSectionIndex(sectionIndex); + if (item->GetKeyCount() != 0) { + sectionIndex = sectionIndex + item->GetKeyCount() + 1; + if (GetCircleMode()) { + --sectionIndex; + } + } + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/indexer/indexer_component.h b/frameworks/core/components/indexer/indexer_component.h new file mode 100644 index 00000000..5e9c4304 --- /dev/null +++ b/frameworks/core/components/indexer/indexer_component.h @@ -0,0 +1,300 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_INDEXER_INDEXER_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_INDEXER_INDEXER_COMPONENT_H + +#include "base/i18n/localization.h" +#include "base/utils/string_utils.h" +#include "base/utils/system_properties.h" +#include "core/components/indexer/indexer_item_component.h" +#include "core/components/list/list_component.h" +#include "core/pipeline/base/component_group.h" + +namespace OHOS::Ace { + +// common data +inline constexpr int32_t INDEXER_INVALID_INDEX = -1; +inline constexpr int32_t INDEXER_ITEM_MAX_COUNT = 29; // [indexer], default max count +inline constexpr uint8_t DEFAULT_OPACITY = 255; +inline constexpr uint8_t ZERO_OPACITY = 0; +inline const std::u16string INDEXER_STR_COLLECT = StringUtils::Str8ToStr16("*"); +inline const std::u16string INDEXER_STR_DOT = StringUtils::Str8ToStr16("•"); +inline const std::u16string INDEXER_STR_DOT_EX = StringUtils::Str8ToStr16("."); +inline const std::u16string INDEXER_STR_SHARP = StringUtils::Str8ToStr16("#"); +inline const std::u16string INDEXER_STR_COLLAPSE = StringUtils::Str8ToStr16(">"); +inline const std::u16string INDEXER_STR_SPACE = StringUtils::Str8ToStr16(" "); +inline constexpr float KEYFRAME_BEGIN = 0.0; +inline constexpr float KEYFRAME_HALF = 0.5; +inline constexpr float KEYFRAME_END = 1.0; +inline constexpr double DEFAULT_OPACITY_IN_PERCENT = 1.0; +inline constexpr double NINETY_OPACITY_IN_PERCENT = 0.9; +inline constexpr double ZERO_OPACITY_IN_PERCENT = 0.0; +// data for list mode +inline constexpr double INDEXER_LIST_ITEM_TEXT_SIZE = 12.0; // list mode, font size (FP) +inline constexpr uint32_t INDEXER_LIST_COLOR = 0x99000000; +inline constexpr uint32_t INDEXER_LIST_ACTIVE_COLOR = 0xFF0A59F7; +inline constexpr double INDEXER_DEFAULT_PADDING_X = 10.0; +inline constexpr double INDEXER_DEFAULT_PADDING_Y = 16.0; +inline constexpr double BUBBLE_BOX_SIZE = 56.0; +inline constexpr double BUBBLE_BOX_RADIUS = 16.0; +inline constexpr double BUBBLE_FONT_SIZE = 24.0; +inline constexpr Dimension BUBBLE_POSITION_X = Dimension(-84.0, DimensionUnit::VP); +inline constexpr Dimension BUBBLE_POSITION_Y = 48.0_vp; +inline constexpr uint32_t BUBBLE_FONT_COLOR = 0xFF254FF7; +inline constexpr uint32_t BUBBLE_BG_COLOR = 0xFFF1F3F5; +inline constexpr double INDEXER_ITEM_SIZE = 16.0; // circle mode, item size (VP) +inline constexpr double INDEXER_ITEM_TEXT_SIZE = 12.0; // circle, mode font size (VP) +// data for circle mode +inline constexpr int32_t INDEXER_COLLAPSE_ITEM_COUNT = 4; +inline constexpr double INDEXER_CIRCLE_ITEM_SIZE = 24.0; // circle mode, item size (VP) +inline constexpr double INDEXER_CIRCLE_ITEM_TEXT_SIZE = 13.0; // circle, mode font size (VP) +inline constexpr double INDEXER_CIRCLE_ITEM_SHADOW_RADIUS = 27.0; // circle mode, shadow radius (VP) +inline constexpr double INDEXER_ANGLE_TO_RADIAN = 180.0; +inline constexpr double INDEXER_ARC_BEGIN = -0.4488; // default angle +inline constexpr double INDEXER_ARC_LENGTH = 2.0 * M_PI; +inline constexpr double BUBBLE_BOX_SIZE_CIRCLE = 46.0; +inline constexpr double BUBBLE_FONT_SIZE_CIRCLE = 19.0; +inline constexpr uint32_t BUBBLE_BG_COLOR_CIRCLE = 0xFF404040; +inline constexpr uint32_t INDEXER_CIRCLE_ARC_COLOR = 0xFF212121; +inline constexpr uint32_t INDEXER_CIRCLE_ACTIVE_BG_COLOR = 0xFF007DFF; +inline constexpr uint32_t INDEXER_ACTIVE_BG_COLOR = 0x1F0A59F7; + +class IndexerComponent : public ComponentGroup { + DECLARE_ACE_TYPE(IndexerComponent, ComponentGroup); + +public: + IndexerComponent(const RefPtr& list, bool circleMode, bool bubble = true, bool multiLanguage = false) + : indexerLabel_(Localization::GetInstance()->GetIndexLetter()), list_(list), circleMode_(circleMode), + bubbleEnabled_(bubble), multiLanguageEnabled_(multiLanguage) + { + if (indexerLabel_.empty()) { + indexerLabel_ = GetU16StrVector(alphabetDefault_); + } + if (circleMode_) { + itemSize_ = Dimension(INDEXER_CIRCLE_ITEM_SIZE, DimensionUnit::VP); + } else { + itemSize_ = Dimension(INDEXER_ITEM_SIZE, DimensionUnit::VP); + } + BuildIndexerAlphabet(); + InitIndexerItemStyle(); + BuildIndexerItems(); + } + + IndexerComponent(const RefPtr& list, bool circleMode, const std::vector& label, + bool bubble = true, bool multiLanguage = false) + : list_(list), circleMode_(circleMode), bubbleEnabled_(bubble), multiLanguageEnabled_(multiLanguage) + { + indexerLabel_ = GetU16StrVector(label); + userDefineList_ = true; + if (indexerLabel_.empty()) { + indexerLabel_ = Localization::GetInstance()->GetIndexLetter(); + userDefineList_ = false; + } + if (circleMode_) { + itemSize_ = Dimension(INDEXER_CIRCLE_ITEM_SIZE, DimensionUnit::VP); + } else { + itemSize_ = Dimension(INDEXER_ITEM_SIZE, DimensionUnit::VP); + } + BuildIndexerAlphabet(); + InitIndexerItemStyle(); + BuildIndexerItems(); + } + + ~IndexerComponent() override = default; + RefPtr CreateElement() override; + RefPtr CreateRenderNode() override; + + const RefPtr& GetController() const + { + return controller_; + } + + void SetController(const RefPtr& controller) + { + controller_ = controller; + } + + // init data + void FormatLabelAlphabet(); + void BuildIndexerAlphabet(); + void BuildDefaultAlphabet(); + void InitIndexerItemStyle(); + void BuildIndexerItems(); + void BuildArcItem(); + void BuildIndicatorBox(); + void BuildBubbleBox(); + void BuildTextItem(const std::u16string& strSection, const std::u16string& strLabel, int32_t itemType = 0); + void BuildCollapseItem(); + + bool IsBubbleEnabled() const + { + return bubbleEnabled_; + } + + void SetBubbleEnabled(bool enable) + { + bubbleEnabled_ = enable; + } + + bool HasCollapseItem() const + { + return hasCollapseItem_; + } + + // add item + int32_t AddItemIndexKey(const std::string& indexKey, const std::string& headStyle); + + // remove item + bool RemoveItemIndexKey(const std::string& indexKey); + + RefPtr GetIndexerItem(const std::string& indexKey); + int32_t GetSectionIndexInList(const std::string& indexKey); + int32_t GetSectionIndexInIndexer(int32_t index); + + // for debug + void PrintItemInfo() const; + + const RefPtr& GetBubbleTextComponent() const + { + return bubbleText_; + } + + int32_t GetNonItemCount() const + { + return nonItemCount_; + } + + int32_t GetMaxShowCount() const + { + return maxShowCount_; + } + + bool GetCircleMode() const + { + return circleMode_; + } + + void SetCircleMode(bool circleMode) + { + circleMode_ = circleMode; + } + + const Dimension& GetItemSize() const + { + return itemSize_; + } + + void SetItemSize(const Dimension& size) + { + itemSize_ = size; + } + + int32_t GetItemCount() const + { + return itemCount_; + } + + const TextStyle& GetNormalTextStyle() const + { + return normalStyle_; + } + + void SetNormalTextStyle(const TextStyle& textStyle) + { + normalStyle_ = textStyle; + } + + const TextStyle& GetActiveTextStyle() const + { + return activeStyle_; + } + + void SetActiveTextStyle(const TextStyle& textStyle) + { + activeStyle_ = textStyle; + } + + std::vector GetU16StrVector(const std::vector& str) + { + std::vector alphabet; + for (const auto& item : str) { + alphabet.push_back(StringUtils::Str8ToStr16(item)); + } + return alphabet; + } + std::list> GetIndexerItemsComponents() + { + return listItem_; + } + + void SetIndexerChange(const EventMarker& indexChange) + { + indexChange_ = indexChange; + } + + const EventMarker& GetIndexerChange() const + { + return indexChange_; + } + +protected: + void UpdateSectionIndex(); + // add + int32_t AddSectionHead(const RefPtr& indexerItem, const std::string& headStyleStr); + int32_t AddItemToSharp(const std::string& indexKey, const std::string& headStyle); + // remove + bool RemoveSectionHead(int32_t index); + bool RemoveItemFromSharp(const std::string& indexKey); + + std::vector alphabetDefault_ = { "#", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", + "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" }; + + std::vector alphabetIndexer_ = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", + "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" }; + + std::vector indexerLabel_; // user input sections + std::vector sectionsLocal_; // actual sections, exclude dot + std::vector labelLocal_; // sections shown on the screen with dot inside + std::vector defaultAlphaLocal_; + TextStyle normalStyle_; + TextStyle activeStyle_; + + std::list> listItem_; + RefPtr list_; + RefPtr controller_; + RefPtr bubbleText_; + + int32_t itemCount_ = INDEXER_ITEM_MAX_COUNT; // actual indexer item + int32_t maxShowCount_ = INDEXER_ITEM_MAX_COUNT; // max item shown on screen + int32_t nonItemCount_ = 0; // not indexer item count such as arc and bubbleBox + // item size + Dimension itemSize_; + double startPosition_ = INDEXER_ARC_BEGIN; // arc start angle + double arcLength_ = INDEXER_ARC_LENGTH; // arc length + bool circleMode_ = false; // list mode or circle mode + bool userDefineList_ = false; // user define alphabet list + bool isFirstItem_ = false; + bool hasCollapseItem_ = false; + bool bubbleEnabled_ = true; + bool multiLanguageEnabled_ = false; // support multi language or not + +private: + EventMarker indexChange_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_INDEXER_INDEXER_COMPONENT_H diff --git a/frameworks/core/components/indexer/indexer_element.cpp b/frameworks/core/components/indexer/indexer_element.cpp new file mode 100644 index 00000000..76c72c33 --- /dev/null +++ b/frameworks/core/components/indexer/indexer_element.cpp @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/indexer/indexer_element.h" + +#include "core/components/indexer/indexer_component.h" + +namespace OHOS::Ace { + +void IndexerElement::PerformBuild() +{ + RefPtr indexer = AceType::DynamicCast(component_); + if (indexer) { + LOGD("[indexer] PerformBuild: Build Indexer"); + ComponentGroupElement::PerformBuild(); + } +} + +bool IndexerElement::OnKeyEvent(const KeyEvent& keyEvent) +{ + if (keyEvent.action != KeyAction::UP) { + return false; + } + RefPtr renderIndexer = AceType::DynamicCast(renderNode_); + int32_t index = renderIndexer->GetFocusIndex(); + if (keyEvent.code == KeyCode::KEYBOARD_UP) { + auto prevItem = prevFocusedItem_.Upgrade(); + if (prevItem) { + prevItem->SetFocused(false); + } + index -= 1; + if (index < 0) { + renderIndexer->SetFocusIndex(-1); + renderIndexer->ClearFocusAnimation(); + return false; + } + auto indexerItem = renderIndexer->GetSpecificItem(index); + if (!indexerItem) { + return false; + } + indexerItem->SetFocused(true); + renderIndexer->HandleFocusAnimation(indexerItem->GetLayoutSize(), indexerItem->GetGlobalOffset()); + renderIndexer->MoveSectionWithIndexer(index); + renderIndexer->SetFocusIndex(index); + prevFocusedItem_ = indexerItem; + return true; + } else if (keyEvent.code == KeyCode::KEYBOARD_DOWN) { + auto prevItem = prevFocusedItem_.Upgrade(); + if (prevItem) { + prevItem->SetFocused(false); + } + index += 1; + + auto indexerItem = renderIndexer->GetSpecificItem(index); + if (!indexerItem) { + renderIndexer->ClearFocusAnimation(); + return false; + } + renderIndexer->SetFocusIndex(index); + indexerItem->SetFocused(true); + renderIndexer->HandleFocusAnimation(indexerItem->GetLayoutSize(), indexerItem->GetGlobalOffset()); + renderIndexer->MoveSectionWithIndexer(index); + prevFocusedItem_ = indexerItem; + return true; + } else if (keyEvent.code == KeyCode::KEYBOARD_ENTER) { + if (index > INVALID_INDEX) { + renderIndexer->MoveSectionWithIndexer(index); + return true; + } + return false; + } else { + return false; + } +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/indexer/indexer_element.h b/frameworks/core/components/indexer/indexer_element.h new file mode 100644 index 00000000..3ee133ab --- /dev/null +++ b/frameworks/core/components/indexer/indexer_element.h @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_INDEXER_INDEXER_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_INDEXER_INDEXER_ELEMENT_H + +#include "core/components/indexer/render_indexer.h" +#include "core/components/indexer/render_indexer_item.h" +#include "core/focus/focus_node.h" +#include "core/pipeline/base/component_group_element.h" + +namespace OHOS::Ace { + +class IndexerElement : public ComponentGroupElement, public FocusNode { + DECLARE_ACE_TYPE(IndexerElement, ComponentGroupElement, FocusNode); + +public: + void PerformBuild() override; + + virtual bool OnKeyEvent(const KeyEvent& keyEvent) override; + +private: + WeakPtr prevFocusedItem_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_INDEXER_INDEXER_ELEMENT_H diff --git a/frameworks/core/components/indexer/indexer_item_component.cpp b/frameworks/core/components/indexer/indexer_item_component.cpp new file mode 100644 index 00000000..1212cf73 --- /dev/null +++ b/frameworks/core/components/indexer/indexer_item_component.cpp @@ -0,0 +1,283 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/indexer/indexer_item_component.h" + +#include "core/components/indexer/indexer_component.h" +#include "core/components/indexer/render_indexer_item.h" +#include "core/components/transform/transform_component.h" + +namespace OHOS::Ace { + +RefPtr IndexerItemComponent::CreateRenderNode() +{ + return RenderIndexerItem::Create(); +} + +void IndexerItemComponent::BuildItem() +{ + box_ = AceType::MakeRefPtr(); + if (rotate_) { + image_ = AceType::MakeRefPtr(InternalResource::ResourceId::INDEXER_ARROW_PNG); + image_->SetHeight(itemSize_); + image_->SetWidth(itemSize_); + box_->SetChild(image_); + } else { + text_ = AceType::MakeRefPtr(StringUtils::Str16ToStr8(strLabel_)); + TextStyle textStyle; + textStyle.SetTextAlign(TextAlign::CENTER); + textStyle.SetFontWeight(FontWeight::W400); + text_->SetTextStyle(textStyle); + box_->SetChild(text_); + } + box_->SetFlex(BoxFlex::FLEX_NO); + box_->SetWidth(itemSize_.Value(), itemSize_.Unit()); + box_->SetHeight(itemSize_.Value(), itemSize_.Unit()); + box_->SetAlignment(Alignment::CENTER); + // generate background + RefPtr background = AceType::MakeRefPtr(); + background->SetBackgroundColor(Color::TRANSPARENT); + // generate circle + Radius radius = circleMode_ ? Radius(itemSize_ / 2.0) : Radius(Dimension(4.0, DimensionUnit::VP)); + background->SetBorderRadius(radius); + box_->SetBackDecoration(background); + if (rotate_) { + RefPtr rotate = AceType::MakeRefPtr(); + rotate->SetChild(box_); + SetChild(rotate); + } else { + SetChild(box_); + } +} + +bool IndexerItemComponent::IsCorrectItem(const std::string& indexKey) const +{ + // check whether the indexkey matched the section string + if (strSection_.empty()) { + LOGE("[indexer] IsCorrectItem invalid strSection_"); + return false; + } + + if (strSection_ == INDEXER_STR_SHARP) { + return false; + } + + if (indexKey.empty()) { + LOGE("[indexer] IsCorrectItem NULL index key"); + return false; + } + + std::u16string u16IndexKey = StringUtils::Str8ToStr16(indexKey); + for (size_t i = 0; i < strSection_.size(); ++i) { + if (u16IndexKey[0] == strSection_[i]) { + return true; + } + } + + return false; +} + +uint32_t IndexerItemComponent::AddIndexKey(const std::string& indexKey) +{ + uint32_t itemIndex = 0; + + if (strSection_.empty()) { + LOGE("[indexer] AddIndexKey invalid strSection_"); + return itemIndex; + } + + if (strSection_ == INDEXER_STR_SHARP) { + return AddIndexKeyForSharp(indexKey); + } + + if (indexKey.empty()) { + LOGE("[indexer] AddIndexKey NULL index key"); + return itemIndex; + } + + if (!IsCorrectItem(indexKey)) { + LOGE("[indexer] AddIndexKey index key does not match section"); + return itemIndex; + } + + auto it = indexKey_.begin(); + for (; it != indexKey_.end(); ++it) { + if (indexKey.compare((*it)) < 0) { + itemIndex++; + indexKey_.insert(it, indexKey); + break; + } else { + itemIndex++; + } + } + + if (it == indexKey_.end()) { + indexKey_.push_back(indexKey); + itemIndex++; + } + + keyCount_++; + itemIndex += sectionIndex_; + if (circleMode_) { + itemIndex--; + } + + return itemIndex; +} + +uint32_t IndexerItemComponent::AddIndexKeyForSharp(const std::string& indexKey) +{ + uint32_t itemIndex = 0; + if (strSection_ != INDEXER_STR_SHARP) { + LOGE("[indexer] AddIndexKeyForSharp the section key is not #, section:%{public}s", + StringUtils::Str16ToStr8(strSection_).c_str()); + return itemIndex; + } + + auto item = indexKey_.begin(); + if (indexKey.empty()) { + // add NULL key + for (; item != indexKey_.end(); ++item) { + itemIndex++; + if (!item->empty()) { + indexKey_.insert(item, indexKey); + break; + } + } + } else { + // add number key + for (; item != indexKey_.end(); ++item) { + itemIndex++; + if (indexKey.compare((*item)) < 0) { + indexKey_.insert(item, indexKey); + break; + } + } + } + + if (item == indexKey_.end()) { + indexKey_.push_back(indexKey); + itemIndex++; + } + + keyCount_++; + itemIndex += sectionIndex_; + if (circleMode_) { + itemIndex--; + } + + return itemIndex; +} + +bool IndexerItemComponent::RemoveIndexKey(const std::string& indexKey) +{ + bool ret = false; + if (strSection_.empty()) { + LOGE("[indexer] RemoveIndexKey invalid strSection_"); + return ret; + } + + if (strSection_ == INDEXER_STR_SHARP) { + return RemoveIndexKeyForSharp(indexKey); + } + + if (indexKey.empty()) { + LOGE("[indexer] RemoveIndexKey NULL index key"); + return ret; + } + + if (!IsCorrectItem(indexKey)) { + LOGE("[indexer] RemoveIndexKey index key does not match section"); + return ret; + } + + auto it = indexKey_.begin(); + for (; it != indexKey_.end(); ++it) { + if (indexKey == *it) { + indexKey_.erase(it); + keyCount_--; + ret = true; + break; + } + } + + return ret; +} + +bool IndexerItemComponent::RemoveIndexKeyForSharp(const std::string& indexKey) +{ + bool ret = false; + + if (strSection_ != INDEXER_STR_SHARP) { + LOGE("[indexer] RemoveIndexKeyForSharp the section key is not #, section:%{public}s", + StringUtils::Str16ToStr8(strSection_).c_str()); + return ret; + } + + auto item = indexKey_.begin(); + if (indexKey.empty()) { + // remove NULL key + for (; item != indexKey_.end(); ++item) { + if (item->empty()) { + indexKey_.erase(item); + keyCount_--; + ret = true; + break; + } + } + } else { + // remove number key + for (; item != indexKey_.end(); ++item) { + if (indexKey == *item) { + indexKey_.erase(item); + keyCount_--; + ret = true; + break; + } + } + } + + return ret; +} + +void IndexerItemComponent::PrintIndexerItem() const +{ + int count = 1; + LOGI("[indexer] label:%{public}s section:%{public}s %{public}d", + StringUtils::Str16ToStr8(strLabel_).c_str(), StringUtils::Str16ToStr8(strSection_).c_str(), sectionIndex_); + for (auto it = indexKey_.begin(); it != indexKey_.end(); ++it) { + if (circleMode_) { + LOGI("[indexer] key:%{public}s %{public}d", it->c_str(), sectionIndex_ + count - 1); + } else { + LOGI("[indexer] key:%{public}s %{public}d", it->c_str(), sectionIndex_ + count); + } + count++; + } +} + +void IndexerItemComponent::SetTextStyle(bool active) +{ + if (!text_) { + LOGE("[indexer] Get child text failed."); + return; + } + if (active) { + text_->SetTextStyle(activeStyle_); + } else { + text_->SetTextStyle(normalStyle_); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/indexer/indexer_item_component.h b/frameworks/core/components/indexer/indexer_item_component.h new file mode 100644 index 00000000..1bfe219f --- /dev/null +++ b/frameworks/core/components/indexer/indexer_item_component.h @@ -0,0 +1,192 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_INDEXER_INDEXER_ITEM_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_INDEXER_INDEXER_ITEM_COMPONENT_H + +#include "base/utils/string_utils.h" +#include "core/components/box/box_component.h" +#include "core/components/image/image_component.h" +#include "core/components/text/text_component.h" + +namespace OHOS::Ace { + +class IndexerItemComponent : public SoleChildComponent { + DECLARE_ACE_TYPE(IndexerItemComponent, SoleChildComponent); + +public: + IndexerItemComponent() + { + strSection_ = StringUtils::Str8ToStr16(""); + strLabel_ = StringUtils::Str8ToStr16(""); + BuildItem(); + } + + IndexerItemComponent( + const std::u16string& strSection, const std::u16string& strLabel, bool circleMode, bool rotate = false) + : strSection_(strSection), strLabel_(strLabel), circleMode_(circleMode), rotate_(rotate) + { + BuildItem(); + } + + IndexerItemComponent(const std::u16string& strSection, const std::u16string& strLabel, const Dimension& itemSize, + bool circleMode, bool rotate = false) + : strSection_(strSection), strLabel_(strLabel), itemSize_(itemSize), circleMode_(circleMode), rotate_(rotate) + { + BuildItem(); + } + + ~IndexerItemComponent() override = default; + RefPtr CreateRenderNode() override; + + void BuildItem(); + + bool IsCorrectItem(const std::string& indexKey) const; + uint32_t AddIndexKey(const std::string& indexKey); + bool RemoveIndexKey(const std::string& indexKey); + void PrintIndexerItem() const; + + const std::u16string& GetSectionStr() const + { + return strSection_; + } + + const std::u16string& GetLabelStr() const + { + return strLabel_; + } + + int32_t GetSectionIndex() const + { + return sectionIndex_; + } + + void SetSectionIndex(int32_t index) + { + sectionIndex_ = index; + } + + uint32_t GetKeyCount() const + { + return keyCount_; + } + + void SetPosition(int32_t position) + { + position_ = position; + } + + int32_t GetPosition() const + { + return position_; + } + + void SetTextStyle(bool active); + + const RefPtr& GetTextComponent() const + { + return text_; + } + + const Dimension& GetItemSize() const + { + return itemSize_; + } + + void SetItemSize(const Dimension& size) + { + itemSize_ = size; + } + + const TextStyle& GetNormalTextStyle() const + { + return normalStyle_; + } + + void SetNormalTextStyle(const TextStyle& textStyle) + { + normalStyle_ = textStyle; + } + + const TextStyle& GetActiveTextStyle() const + { + return activeStyle_; + } + + void SetActiveTextStyle(const TextStyle& textStyle) + { + activeStyle_ = textStyle; + } + + bool GetCircleMode() const + { + return circleMode_; + } + + void SetCircleMode(bool circleMode) + { + circleMode_ = circleMode; + } + + bool GetRotateFlag() const + { + return rotate_; + } + + void MarkItemPrimary(bool isPrimary = true) + { + isPrimary_ = isPrimary; + } + + bool IsItemPrimary() const + { + return isPrimary_; + } + + int32_t GetItemType() const + { + return itemType_; + } + + void SetItemType(int32_t type) + { + itemType_ = type; + } + +private: + uint32_t AddIndexKeyForSharp(const std::string& indexKey); + bool RemoveIndexKeyForSharp(const std::string& indexKey); + + std::u16string strSection_; + std::u16string strLabel_; // string show in the section head + Dimension itemSize_; // item size + bool circleMode_ = true; + bool rotate_ = false; + std::list indexKey_; + int32_t sectionIndex_ = 0; + uint32_t keyCount_ = 0; + int32_t position_ = 0; + int32_t itemType_ = 0; + RefPtr text_; + RefPtr image_; + RefPtr box_; + TextStyle normalStyle_; + TextStyle activeStyle_; + bool isPrimary_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_INDEXER_INDEXER_ITEM_COMPONENT_H diff --git a/frameworks/core/components/indexer/indexer_list_component.cpp b/frameworks/core/components/indexer/indexer_list_component.cpp new file mode 100644 index 00000000..4adcca43 --- /dev/null +++ b/frameworks/core/components/indexer/indexer_list_component.cpp @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/indexer/indexer_list_component.h" + +#include "core/components/indexer/indexer_list_element.h" +#include "core/components/indexer/render_indexer_list.h" + +namespace OHOS::Ace { + +RefPtr Ace::IndexerListComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +RefPtr IndexerListComponent::CreateRenderNode() +{ + return AceType::MakeRefPtr(); +} + +void IndexerListComponent::InsertChild(uint32_t position, const RefPtr& child) +{ + // the list component will sort all of the items automatically + AppendChild(child); +} + +void IndexerListComponent::AppendChild(const RefPtr& child) +{ + if (!list_ || !indexer_) { + LOGE("[indexer] listData or indexer is NULL."); + return; + } + RefPtr composedItem = AceType::DynamicCast(child); + if (composedItem) { + RefPtr listItem = AceType::DynamicCast(composedItem->GetChild()); + if (listItem) { + int32_t itemIndex = indexer_->AddItemIndexKey(listItem->GetIndexKey(), listItem->GetType()); + LOGD("[indexer] AppendChild key:%{public}s, index:%{public}d", listItem->GetIndexKey().c_str(), itemIndex); + list_->InsertChild(itemIndex, child); + } + } +} + +void IndexerListComponent::RemoveChild(const RefPtr& child) +{ + if (!list_ || !indexer_) { + LOGE("[indexer] listData or indexer is NULL."); + return; + } + RefPtr composedItem = AceType::DynamicCast(child); + if (composedItem) { + RefPtr listItem = AceType::DynamicCast(composedItem->GetChild()); + if (listItem) { + indexer_->RemoveItemIndexKey(listItem->GetIndexKey()); + list_->RemoveChild(child); + } + } +} + +void IndexerListComponent::BuildChildren() +{ + std::list> children; + children.emplace_back(list_); + children.emplace_back(indexer_); + + LOGD("[indexer] SetRightToLeft: %d", isRightToLeft_); + if (isRightToLeft_) { + stack_ = AceType::MakeRefPtr(Alignment::CENTER_LEFT, StackFit::KEEP, Overflow::CLIP, children); + } else { + stack_ = AceType::MakeRefPtr(Alignment::CENTER_RIGHT, StackFit::KEEP, Overflow::CLIP, children); + } + SetChild(stack_); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/indexer/indexer_list_component.h b/frameworks/core/components/indexer/indexer_list_component.h new file mode 100644 index 00000000..5289e492 --- /dev/null +++ b/frameworks/core/components/indexer/indexer_list_component.h @@ -0,0 +1,110 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_INDEXER_INDEXER_LIST_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_INDEXER_INDEXER_LIST_COMPONENT_H + +#include "core/components/indexer/indexer_component.h" +#include "core/components/list/list_component.h" +#include "core/components/stack/stack_component.h" + +namespace OHOS::Ace { + +class IndexerListComponent : public SoleChildComponent { + DECLARE_ACE_TYPE(IndexerListComponent, SoleChildComponent); + +public: + IndexerListComponent(const RefPtr& list, bool circleMode = false, bool isRightToLeft = false, + bool bubble = true, bool multiLanguage = false) + { + if (list) { + list_ = list; + SetRightToLeft(isRightToLeft); + indexer_ = AceType::MakeRefPtr(list_, circleMode, bubble, multiLanguage); + indexer_->SetController(list_->GetPositionController()); + BuildChildren(); + LOGI("[indexer] create ListComponent circle:%{public}d, RTL:%{public}d.", circleMode, isRightToLeft); + } else { + LOGE("[indexer] list is nullptr, create indexer failed."); + } + } + + IndexerListComponent(const RefPtr& list, const std::vector& label, + bool circleMode = false, bool isRightToLeft = false, bool bubble = true, bool multiLanguage = false) + { + if (list) { + list_ = list; + SetRightToLeft(isRightToLeft); + indexer_ = AceType::MakeRefPtr(list_, circleMode, label, bubble, multiLanguage); + indexer_->SetController(list_->GetPositionController()); + BuildChildren(); + LOGI("[indexer] create ListComponent circle:%{public}d, RTL:%{public}d.", circleMode, isRightToLeft); + } else { + LOGE("[indexer] list is nullptr, create indexer failed."); + } + } + + ~IndexerListComponent() override = default; + + RefPtr CreateElement() override; + RefPtr CreateRenderNode() override; + + void AppendChild(const RefPtr& child); + void InsertChild(uint32_t position, const RefPtr& child); + void RemoveChild(const RefPtr& child); + + void BuildChildren(); + + void SetIndexerChangeEvent(const EventMarker& indexChange) + { + if (indexer_) { + indexer_->SetIndexerChange(indexChange); + } + } + + const RefPtr& GetIndexer() const + { + return indexer_; + } + + int32_t GetItemCountInList() const + { + if (!list_) { + return 0; + } + return list_->GetChildren().size(); + } + + void SetRightToLeft(bool isRightToLeft) + { + LOGD("[indexer] SetRightToLeft: %d", isRightToLeft); + isRightToLeft_ = isRightToLeft; + } + + void SetBubbleEnabled(bool enable) + { + indexer_->SetBubbleEnabled(enable); + } + +private: + RefPtr list_; + RefPtr indexer_; + RefPtr stack_; + bool isRightToLeft_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_INDEXER_INDEXER_LIST_COMPONENT_H diff --git a/frameworks/core/components/indexer/indexer_list_element.cpp b/frameworks/core/components/indexer/indexer_list_element.cpp new file mode 100644 index 00000000..c366fc26 --- /dev/null +++ b/frameworks/core/components/indexer/indexer_list_element.cpp @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/indexer/indexer_list_element.h" + +namespace OHOS::Ace { + +bool IndexerListElement::RequestNextFocus(bool vertical, bool reverse, const Rect& rect) +{ + return GoToNextFocus(reverse, rect); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/indexer/indexer_list_element.h b/frameworks/core/components/indexer/indexer_list_element.h new file mode 100644 index 00000000..76fd0fbe --- /dev/null +++ b/frameworks/core/components/indexer/indexer_list_element.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_INDEXER_INDEXER_LIST_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_INDEXER_INDEXER_LIST_ELEMENT_H + +#include "core/pipeline/base/sole_child_element.h" + +namespace OHOS::Ace { + +class IndexerListElement : public SoleChildElement, public FocusGroup { + DECLARE_ACE_TYPE(IndexerListElement, SoleChildElement, FocusGroup); + +public: + bool RequestNextFocus(bool vertical, bool reverse, const Rect& rect) override; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_INDEXER_INDEXER_LIST_ELEMENT_H diff --git a/frameworks/core/components/indexer/render_indexer.cpp b/frameworks/core/components/indexer/render_indexer.cpp new file mode 100644 index 00000000..cdb35ffe --- /dev/null +++ b/frameworks/core/components/indexer/render_indexer.cpp @@ -0,0 +1,584 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/indexer/render_indexer.h" + +#include "base/log/event_report.h" +#include "core/components/arc/render_arc.h" +#include "core/components/indexer/render_indexer_list.h" + +namespace OHOS::Ace { +namespace { + +constexpr Dimension FOCUS_PADDING = 2.0_vp; + +} // namespace + +RefPtr RenderIndexer::Create() +{ + LOGI("[indexer] Create RenderIndexer"); + return AceType::MakeRefPtr(); +} + +RenderIndexer::RenderIndexer() +{ + LOGI("[indexer] touchRecognizer_ init"); + touchRecognizer_ = AceType::MakeRefPtr(); + touchRecognizer_->SetOnTouchDown([wp = AceType::WeakClaim(this)](const TouchEventInfo& info) { + auto sp = wp.Upgrade(); + if (sp) { + sp->HandleTouchDown(info); + } + }); + touchRecognizer_->SetOnTouchUp([wp = AceType::WeakClaim(this)](const TouchEventInfo& info) { + auto sp = wp.Upgrade(); + if (sp) { + sp->HandleTouchUp(info); + } + }); + touchRecognizer_->SetOnTouchMove([wp = AceType::WeakClaim(this)](const TouchEventInfo& info) { + auto sp = wp.Upgrade(); + if (sp) { + sp->HandleTouchMove(info); + } + }); + + // register this listener for consuming the drag events. + dragRecognizer_ = AceType::MakeRefPtr(); + dragRecognizer_->SetOnDragStart([weakIndex = AceType::WeakClaim(this)](const DragStartInfo& info) { + auto indexer = weakIndex.Upgrade(); + if (indexer) { + indexer->HandleDragStart(); + } + }); + dragRecognizer_->SetOnDragEnd([weakIndex = AceType::WeakClaim(this)](const DragEndInfo& info) { + auto indexer = weakIndex.Upgrade(); + if (indexer) { + indexer->HandleDragEnd(); + } + }); +} + +void RenderIndexer::PerformLayout() +{ + UpdateItems(); + if (itemCount_ <= 0) { + SetLayoutSize(Size()); + return; + } + + // calculate self and children size, + if (NearZero(itemSize_)) { + LOGE("[indexer] Invalid Item size:%{public}lf", itemSize_); + return; + } + + // calculate the size of the items + const LayoutParam& layoutSetByParent = GetLayoutParam(); + Size sizeMax = layoutSetByParent.GetMaxSize(); + if (LessOrEqual(paddingY_ * DOUBLE + itemCount_ * itemSize_, sizeMax.Height())) { + itemSizeRender_ = itemSize_; + } else { + double tempSize = (sizeMax.Height() - paddingY_ * DOUBLE) / itemCount_; + itemSizeRender_ = tempSize; + } + + InitFocusedItem(); + + LayoutParam childrenLayout; + childrenLayout.SetMinSize(Size(0.0, 0.0)); + + for (const auto& item : GetChildren()) { + item->Layout(childrenLayout); + } + // then set the position of children + Offset position; + int32_t count = 0; + for (const auto& item : GetChildren()) { + if (!AceType::InstanceOf(item)) { + continue; + } + position.SetX(paddingX_); + position.SetY(paddingY_ + count * itemSizeRender_); + item->SetPosition(position); + count++; + } + + double indexerWidth = paddingX_ + itemSizeRender_ + paddingX_; + double indexerHeight = paddingY_ + count * itemSizeRender_ + paddingY_; + SetLayoutSize(Size(indexerWidth, indexerHeight)); + + if (IsValidBubbleBox()) { + const double BUBBLE_OFFSET = 200.0; + Offset bubblePosition; + bubblePosition.SetX(NormalizeToPx(BUBBLE_POSITION_X) - BUBBLE_OFFSET); + bubblePosition.SetY(NormalizeToPx(BUBBLE_POSITION_Y) - BUBBLE_OFFSET); + bubbleDisplay_->SetPosition(bubblePosition); + } +} + +void RenderIndexer::Update(const RefPtr& component) +{ + LOGD("[indexer] Update RenderIndexer"); + RefPtr indexerComponent = AceType::DynamicCast(component); + if (!indexerComponent) { + LOGE("[indexer] Update Get component failed"); + EventReport::SendRenderException(RenderExcepType::RENDER_COMPONENT_ERR); + return; + } + nonItemCount_ = indexerComponent->GetNonItemCount(); + bubbleEnabled_ = indexerComponent->IsBubbleEnabled(); + bubbleText_ = indexerComponent->GetBubbleTextComponent(); + controller_ = indexerComponent->GetController(); + if (controller_) { + // handle list move + controller_->AddFirstChangedCallback([weakIndex = AceType::WeakClaim(this)](int32_t index) { + auto indexer = weakIndex.Upgrade(); + if (indexer) { + LOGD("FirstItem index changed to:%{public}d", index); + indexer->UpdateSection(index); + } + }); + // handle watch rotation event + controller_->AddIndexerStateQueryCallback([weakIndex = AceType::WeakClaim(this)]() { + auto indexer = weakIndex.Upgrade(); + if (indexer) { + return indexer->NeedRotation(); + } + return false; + }); + } + // update item information + auto context = GetContext().Upgrade(); + if (context) { + itemSize_ = context->NormalizeToPx(indexerComponent->GetItemSize()); + } + itemSizeRender_ = itemSize_; + itemCount_ = indexerComponent->GetItemCount(); + circleMode_ = indexerComponent->GetCircleMode(); + LOGI("[indexer] Init data, itemSizeRender_:%{public}lf, itemCount_:%{public}d", itemSizeRender_, itemCount_); + + InitIndexTable(); + MarkNeedLayout(); +} + +void RenderIndexer::UpdateSection(int32_t index) +{ + auto context = GetContext().Upgrade(); + if (!context || !context->GetTaskExecutor()) { + return; + } + + context->GetTaskExecutor()->PostTask( + [weakIndexer = AceType::WeakClaim(this), index]() { + auto indexer = weakIndexer.Upgrade(); + if (indexer) { + indexer->MoveSection(index); + } + }, + TaskExecutor::TaskType::UI); +} + +void RenderIndexer::InitIndexTable() +{ + LOGI("[indexer] InitIndexTable itemCount_:%{public}d", itemCount_); + for (int32_t i = 0; i <= INDEXER_ITEM_MAX_COUNT; ++i) { + itemInfo_[i][TABLE_ANGLE] = i; + itemInfo_[i][TABLE_POSITION_X] = paddingX_; + itemInfo_[i][TABLE_POSITION_Y] = paddingY_ + i * itemSizeRender_; + } +} + +void RenderIndexer::UpdateItems() +{ + if (nonItemCount_ + items_.size() == GetChildren().size()) { + LOGD("[indexer] no need update Items"); + return; + } + items_.clear(); + for (auto item : GetChildren()) { + if (AceType::InstanceOf(item)) { + items_.push_back(item); + } + } + LOGD("[indexer] items nums : %{public}u", static_cast(items_.size())); +} + +void RenderIndexer::InitFocusedItem() +{ + // init first focus item + if (focusedItem_ < 0 || isInitFocus_) { + if (focusedItem_ >= 0) { + auto item = GetSpecificItem(focusedItem_); + if (item) { + item->SetClicked(false); + } + } + focusedItem_ = 0; + for (auto item : items_) { + RefPtr indexerItem = AceType::DynamicCast(item); + if (indexerItem && indexerItem->GetKeyCount() > 0) { + LOGI("[indexer] Init focusedItem index:%{public}d", focusedItem_); + indexerItem->SetClicked(true); + break; + } + focusedItem_++; + } + } +} + +void RenderIndexer::HandleTouchDown(const TouchEventInfo& info) +{ + Offset position = info.GetTouches().front().GetLocalLocation(); + LOGI("[indexer] item is HandleTouchDown x:%{public}lf, y:%{public}lf", position.GetX(), position.GetY()); + HandleTouched(position); + clicked_ = true; + MarkNeedLayout(); +} + +void RenderIndexer::HandleTouchUp(const TouchEventInfo& info) +{ + Offset position = info.GetTouches().front().GetLocalLocation(); + LOGI("[indexer] item is HandleTouchUp x:%{public}lf, y:%{public}lf", position.GetX(), position.GetY()); + + HandleTouched(position); + + if (clicked_) { + clicked_ = false; + MarkNeedLayout(); + } +} + +void RenderIndexer::HandleTouchMove(const TouchEventInfo& info) +{ + Offset position = info.GetTouches().front().GetLocalLocation(); + LOGI("[indexer] item is HandleTouchMove x:%{public}lf, y:%{public}lf", position.GetX(), position.GetY()); + HandleTouched(position); + if (clicked_) { + clicked_ = true; + MarkNeedLayout(); + } +} + +void RenderIndexer::HandleDragStart() +{ + LOGD("[indexer] HandleDragstart"); +} + +void RenderIndexer::HandleDragEnd() +{ + LOGD("[indexer] HandleDragEnd"); +} + +bool RenderIndexer::TouchTest(const Point& globalPoint, const Point& parentLocalPoint, + const TouchRestrict& touchRestrict, TouchTestResult& result) +{ + if (GetDisableTouchEvent() || disabled_) { + return false; + } + auto focusedNode = GetSpecificItem(focusedIndex_); + if (focusedNode) { + focusedNode->SetFocused(false); + } + // Since the paintRect is relative to parent, use parent local point to perform touch test. + if (GetPaintRect().IsInRegion(parentLocalPoint)) { + // Calculates the local point location and coordinate offset in this node. + const auto localPoint = parentLocalPoint - GetPaintRect().GetOffset(); + const auto coordinateOffset = globalPoint - localPoint; + globalPoint_ = globalPoint; + OnTouchTestHit(coordinateOffset, touchRestrict, result); + return true; + } else { + if (IsValidBubbleBox() && bubbleController_ && bubbleController_->IsRunning()) { + bubbleController_->Finish(); + } + } + return false; +} + +void RenderIndexer::OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) +{ + if (dragRecognizer_) { + dragRecognizer_->SetCoordinateOffset(coordinateOffset); + result.emplace_back(dragRecognizer_); + } + + if (touchRecognizer_) { + touchRecognizer_->SetCoordinateOffset(coordinateOffset); + result.emplace_back(touchRecognizer_); + } +} + +void RenderIndexer::HandleTouched(const Offset& touchPosition) +{ + int32_t index = GetTouchedItemIndex(touchPosition); + if (index > INVALID_INDEX) { + MoveList(index); + } +} + +int32_t RenderIndexer::GetTouchedItemIndex(const Offset& touchPosition) +{ + double position = touchPosition.GetY(); + if (position < paddingY_) { + return INVALID_INDEX; + } + + if (NearZero(itemSizeRender_)) { + LOGE("[indexer] Invalid Item size:%{public}lf", itemSizeRender_); + return INVALID_INDEX; + } + + int32_t index = static_cast((position - paddingY_) / itemSizeRender_); + LOGI("[indexer] HandleTouched section index:%{public}d", index); + return GetItemIndex(index); +} + +void RenderIndexer::UpdateBubbleText() +{ + if (IsValidBubbleBox() && !bubbleBox_->GetChildren().empty()) { + auto text = AceType::DynamicCast(bubbleBox_->GetChildren().front()); + auto item = GetSpecificItem(focusedItem_); + if (bubbleText_ && text && item) { + bubbleText_->SetData(item->GetSectionText()); + text->Update(bubbleText_); + text->PerformLayout(); + BeginBubbleAnimation(); + } + } +} + +void RenderIndexer::BuildBubbleAnimation() +{ + if (!IsValidBubbleBox()) { + LOGD("bubble box is invalid"); + return; + } + if (!bubbleController_) { + bubbleController_ = AceType::MakeRefPtr(GetContext()); + } + bubbleController_->ClearInterpolators(); + bubbleController_->ClearAllListeners(); + auto weak = AceType::WeakClaim(this); + bubbleController_->AddStopListener([weak]() { + auto indexer = weak.Upgrade(); + if (indexer && indexer->IsValidBubbleBox()) { + indexer->bubbleDisplay_->UpdateOpacity(ZERO_OPACITY); + } + }); + + // build and start animation + auto animation = AceType::MakeRefPtr>(); + auto startFrame = AceType::MakeRefPtr>(KEYFRAME_BEGIN, ZERO_OPACITY); + auto midFrame = AceType::MakeRefPtr>(KEYFRAME_HALF, DEFAULT_OPACITY); + auto endFrame = AceType::MakeRefPtr>(KEYFRAME_END, ZERO_OPACITY); + midFrame->SetCurve(Curves::DECELE); + endFrame->SetCurve(Curves::DECELE); + animation->AddKeyframe(startFrame); + animation->AddKeyframe(midFrame); + animation->AddKeyframe(endFrame); + animation->AddListener([weak](uint8_t value) { + auto indexer = weak.Upgrade(); + if (indexer && indexer->IsValidBubbleBox()) { + indexer->bubbleDisplay_->UpdateOpacity(value); + } + }); + + bubbleController_->AddInterpolator(animation); + bubbleController_->SetDuration(INDEXER_BUBBLE_ANIMATION_DURATION); +} + +void RenderIndexer::BeginBubbleAnimation() +{ + if (!IsValidBubbleBox()) { + LOGD("bubble box is invalid"); + return; + } + if (!bubbleController_) { + BuildBubbleAnimation(); + } + if (bubbleController_->IsRunning()) { + bubbleController_->Finish(); + } + bubbleController_->Play(); +} + +bool RenderIndexer::IsValidBubbleBox() +{ + if (!bubbleEnabled_ || GetChildren().empty()) { + return false; + } + if (!bubbleDisplay_) { + bubbleDisplay_ = AceType::DynamicCast(GetChildren().front()); + if (!bubbleDisplay_ || bubbleDisplay_->GetChildren().empty()) { + return false; + } + bubbleBox_ = AceType::DynamicCast(bubbleDisplay_->GetChildren().front()); + if (!bubbleBox_) { + return false; + } + } + return true; +} + +int32_t RenderIndexer::GetItemIndex(int32_t index) +{ + int32_t itemIndexInList = INVALID_INDEX; + RefPtr itemNode; + auto iter = items_.begin(); + std::advance(iter, index); + if (iter == items_.end()) { + itemNode = items_.back(); + } else { + itemNode = *iter; + } + RefPtr indexerItem = AceType::DynamicCast(itemNode); + if (indexerItem && indexerItem->GetKeyCount() > 0) { + itemIndexInList = indexerItem->GetSectionIndex(); + } + LOGI("[indexer] GetItemIndex index:%{public}d indexInList:%{public}d", index, itemIndexInList); + return itemIndexInList; +} + +void RenderIndexer::MoveSection(int32_t index) +{ + HandleListMoveItems(index); + lastHeadIndex_ = index; + int32_t curSection = 0; + int32_t needReverse = 0; + for (auto itemNode : items_) { + RefPtr item = AceType::DynamicCast(itemNode); + if (item && item->GetKeyCount() > 0) { + int32_t nextIndex = item->GetSectionIndex(); + if (index < nextIndex) { + curSection -= needReverse; // back to previous valid seciton + break; + } + if (index == nextIndex) { + break; + } + needReverse = 0; + } + + ++curSection; + ++needReverse; + } + + if (curSection >= itemCount_ - 1) { + curSection = itemCount_ - 2; // skip collapse item + } + + if (focusedItem_ == curSection) { + LOGD("Current focused item already is:%{public}d", curSection); + return; + } + + RefPtr curItem = GetSpecificItem(curSection); + if (!curItem || !NeedProcess(curItem) || curItem->GetKeyCount() <= 0) { + LOGW("[indexer] invalid indexer item"); + return; + } + + // change to correct index + BeginFocusAnimation(focusedItem_, curSection); + curItem->SetClicked(true); // Make cur clicked item focus. + UpdateCurrentSectionItem(curSection); + + // Make pre focused item blur. + RefPtr preItem = GetSpecificItem(focusedItem_); + if (preItem) { + preItem->SetClicked(false); + } + focusedItem_ = curSection; + isInitFocus_ = false; + UpdateBubbleText(); +} + +void RenderIndexer::HandleFocusAnimation(const Size& size, const Offset& offset) +{ + auto context = context_.Upgrade(); + if (!context) { + LOGE("Pipeline context upgrade fail!"); + return; + } + if (!context->GetRenderFocusAnimation()) { + LOGE("focusAnimation is null!"); + return; + } + + double focusPadding = NormalizeToPx(FOCUS_PADDING); + context->ShowFocusAnimation( + RRect::MakeRRect(Rect(Offset(), size - Size(focusPadding, focusPadding) * 2), focusPadding, focusPadding), + Color::BLUE, offset + Offset(focusPadding, focusPadding)); +} + +void RenderIndexer::MoveSectionWithIndexer(int32_t curSection) +{ + if (focusedItem_ == curSection) { + LOGD("Current focused item already is:%{public}d", curSection); + return; + } + + RefPtr curItem = GetSpecificItem(curSection); + if (!curItem || !NeedProcess(curItem) || curItem->GetKeyCount() <= 0) { + LOGW("[indexer] invalid indexer item"); + return; + } + + // change to correct index + BeginFocusAnimation(focusedItem_, curSection); + curItem->SetClicked(true); // Make cur clicked item focus. + UpdateCurrentSectionItem(curSection); + + // Make pre focused item blur. + RefPtr preItem = GetSpecificItem(focusedItem_); + if (preItem) { + preItem->SetClicked(false); + } + focusedItem_ = curSection; + isInitFocus_ = false; + MoveList(curItem->GetSectionIndex()); + UpdateBubbleText(); +} + +void RenderIndexer::MoveList(int32_t index) +{ + if (index < 0) { + LOGE("[indexer] invalid item indexer"); + return; + } + if (!controller_) { + LOGE("[indexer] position controller is null."); + return; + } + // to avoid sticky item overlap, reference: RenderList::CalculateItemPosition + int32_t indexToJump = circleMode_ ? index : index + 1; + lastHeadIndex_ = indexToJump; + LOGI("[indexer] MoveList Jump to index[%{public}d], indexToJump[%{public}d]", index, indexToJump); + controller_->JumpTo(indexToJump, SCROLL_FROM_INDEXER); +} + +RefPtr RenderIndexer::GetSpecificItem(int32_t index) +{ + auto iter = items_.begin(); + std::advance(iter, index); + if (iter != items_.end()) { + return AceType::DynamicCast(*iter); + } + return nullptr; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/indexer/render_indexer.h b/frameworks/core/components/indexer/render_indexer.h new file mode 100644 index 00000000..aa6b1b3c --- /dev/null +++ b/frameworks/core/components/indexer/render_indexer.h @@ -0,0 +1,158 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_INDEXER_RENDER_INDEXER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_INDEXER_RENDER_INDEXER_H + +#include "base/geometry/size.h" +#include "core/components/box/render_box_base.h" +#include "core/components/common/rotation/rotation_node.h" +#include "core/components/focus_animation/render_focus_animation.h" +#include "core/components/indexer/indexer_component.h" +#include "core/components/indexer/render_indexer_item.h" +#include "core/gestures/drag_recognizer.h" +#include "core/gestures/raw_recognizer.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +constexpr int32_t TABLE_ANGLE = 0; +constexpr int32_t TABLE_POSITION_X = 1; +constexpr int32_t TABLE_POSITION_Y = 2; +constexpr int32_t TABLE_INDEX_COUNT = 3; +constexpr int32_t INDEXER_BUBBLE_ANIMATION_DURATION = 3000; +constexpr double ROTATION_THRESHOLD = 90.0; +constexpr double HALF = 0.5; +constexpr double DOUBLE = 2.0; + +class RenderIndexer : public RenderNode, public RotationNode { + DECLARE_ACE_TYPE(RenderIndexer, RenderNode); + +public: + RenderIndexer(); + ~RenderIndexer() override = default; + + static RefPtr Create(); + + void Update(const RefPtr& component) override; + void PerformLayout() override; + void OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) override; + virtual bool TouchTest(const Point& globalPoint, const Point& parentLocalPoint, const TouchRestrict& touchRestrict, + TouchTestResult& result) override; + virtual bool OnRotation(const RotationEvent& event) override + { + return true; + } + virtual void HandleTouchDown(const TouchEventInfo& info); + virtual void HandleTouchUp(const TouchEventInfo& info); + virtual void HandleTouchMove(const TouchEventInfo& info); + virtual int32_t GetTouchedItemIndex(const Offset& touchPosition); + virtual void HandleListMoveItems(int32_t curHeadIndex) {} + virtual void UpdateCurrentSectionItem(int32_t curSection) {} + virtual void BeginFocusAnimation(int32_t originIndex, int32_t targetIndex) {} + virtual bool IsValidBubbleBox(); + + virtual bool NeedProcess(const RefPtr& item) const + { + return true; + } + virtual bool NeedRotation() const + { + return false; + } + + bool GetCircleMode() const + { + return circleMode_; + } + + int32_t GetFocusIndex() const + { + return focusedIndex_; + } + + void SetFocusIndex(int32_t index) + { + focusedIndex_ = index; + } + + void ClearFocusAnimation() + { + auto context = context_.Upgrade(); + if (!context) { + LOGE("Pipeline context upgrade fail!"); + return; + } + if (!context->GetRenderFocusAnimation()) { + LOGE("focusAnimation is null!"); + return; + } + context->CancelFocusAnimation(); + } + + RefPtr GetSpecificItem(int32_t index); + + void HandleFocusAnimation(const Size& size, const Offset& offset); + void MoveSectionWithIndexer(int32_t curSection); + +protected: + void HandleDragStart(); + void HandleDragEnd(); + void HandleTouched(const Offset& touchPosition); + void MoveList(int32_t index); + void UpdateSection(int32_t index); + void MoveSection(int32_t index); + + virtual void InitIndexTable(); + void InitFocusedItem(); + void UpdateItems(); + void UpdateBubbleText(); + void BuildBubbleAnimation(); + void BeginBubbleAnimation(); + int32_t GetItemIndex(int32_t index); // get first list item index in specified section + + int32_t curHitItem_ = -1; // current touched item when touch move. + int32_t focusedItem_ = -1; // the item which set high light + int32_t nonItemCount_ = 0; + int32_t itemCount_ = INDEXER_ITEM_MAX_COUNT; + int32_t lastHeadIndex_ = 0; + int32_t focusedIndex_ = -1; // focused index + + bool clicked_ = false; + bool isInitFocus_ = true; + bool circleMode_ = false; + bool bubbleEnabled_ = true; + + double itemInfo_[INDEXER_ITEM_MAX_COUNT + 1][TABLE_INDEX_COUNT] = {}; + double itemSize_ = INDEXER_CIRCLE_ITEM_SIZE; + double itemSizeRender_ = INDEXER_CIRCLE_ITEM_SIZE; + double paddingX_ = INDEXER_DEFAULT_PADDING_X; + double paddingY_ = INDEXER_DEFAULT_PADDING_Y; + + RefPtr touchRecognizer_; + RefPtr dragRecognizer_; + RefPtr controller_; + RefPtr bubbleText_; + RefPtr bubbleBox_; // reference of the bubble box render node + RefPtr bubbleDisplay_; // reference of the bubble box render node + RefPtr bubbleController_; // control bubble appear and disappear + + std::list> items_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_INDEXER_RENDER_INDEXER_H diff --git a/frameworks/core/components/indexer/render_indexer_circle.cpp b/frameworks/core/components/indexer/render_indexer_circle.cpp new file mode 100644 index 00000000..7136a7a0 --- /dev/null +++ b/frameworks/core/components/indexer/render_indexer_circle.cpp @@ -0,0 +1,1058 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/indexer/render_indexer_circle.h" + +#include "core/components/arc/render_arc.h" +#include "core/components/indexer/render_indexer_item.h" + +namespace OHOS::Ace { + +RefPtr RenderIndexerCircle::Create() +{ + LOGI("[indexer] Create RenderIndexerCircle"); + return AceType::MakeRefPtr(); +} + +void RenderIndexerCircle::Update(const RefPtr& component) +{ + LOGD("[indexer] Update"); + RenderIndexer::Update(component); + + auto context = GetContext().Upgrade(); + if (context) { + hotRgnSize_ = context->NormalizeToPx(Dimension(hotRgnSize_, DimensionUnit::VP)); + } + if (itemCount_ <= INDEXER_COLLAPSE_ITEM_COUNT) { + curStatus_ = IndexerItemStatus::COLLAPSE; + collapseItemCount_ = itemCount_; + } + + RefPtr componentIndex = AceType::DynamicCast(component); + if (componentIndex) { + itemMaxCount_ = std::clamp(componentIndex->GetMaxShowCount(), 1, INDEXER_ITEM_MAX_COUNT + 1); + hasCollapseItem_ = componentIndex->HasCollapseItem(); + perItemExtent_ = DOUBLE * M_PI / itemMaxCount_; + indexerChangeEvent_ = + AceAsyncEvent::Create(componentIndex->GetIndexerChange(), context_); + } + + LOGI("[indexer] hotRgnSize:%{public}lf, CollapseCount:%{public}d, TotalCount:%{public}d, perItemExtent:%{public}lf", + hotRgnSize_, collapseItemCount_, itemCount_, perItemExtent_); +} + +void RenderIndexerCircle::PerformLayout() +{ + LOGD("[indexer] PerformLayout RenderIndexerCircle"); + if (GetChildren().empty()) { + return; + } + UpdateItems(); + if (isInitFocus_) { + InitFocusedItem(); + } + if (IsValidArc()) { + arc_->SetStartAngle(arcHeadPosition_); + arc_->SetSweepAngle(arcTailPosition_ - arcHeadPosition_); + } + const LayoutParam& layoutSetByParent = GetLayoutParam(); + LayoutParam childrenLayout = layoutSetByParent; + childrenLayout.SetMinSize(Size(0.0, 0.0)); + for (const auto& item : GetChildren()) { + item->Layout(childrenLayout); + } + + // calculate self and children size + Size sizeMax = GetChildren().front()->GetLayoutSize(); // get arc layout size first + SetLayoutSize(sizeMax); + + if (items_.empty()) { + LOGE("[indexer] invalid children count:%{public}u", static_cast(GetChildren().size())); + return; + } + + // check whether the layout size was valid + outerRadius_ = sizeMax.Width() * HALF; + if (LessOrEqual(outerRadius_, itemSize_ * DOUBLE)) { + LOGE("[indexer] invalid outerRadius_:%{public}lf, itemSize_:%{public}lf", outerRadius_, itemSize_); + return; + } + + if (curStatus_ != IndexerItemStatus::EXPAND && itemCount_ > collapseItemCount_) { + return; + } + + ResetItemsPosition(); + InitBubbleBox(sizeMax); + InitIndicatorBox(); +} + +void RenderIndexerCircle::SetItemPosition(const RefPtr& item, int32_t positionIndex) +{ + if (positionIndex >= 0 && positionIndex <= INDEXER_ITEM_MAX_COUNT) { + double itemRadius = outerRadius_ - itemSize_ * HALF; + Offset position; + position.SetX(itemRadius + itemRadius * itemInfo_[positionIndex][TABLE_POSITION_X]); + position.SetY(itemRadius + itemRadius * itemInfo_[positionIndex][TABLE_POSITION_Y]); + item->SetPosition(position); + } +} + +void RenderIndexerCircle::SetItemPosition(const RefPtr& item, double angle) +{ + double itemRadius = outerRadius_ - itemSize_ * HALF; + Offset position; + position.SetX(itemRadius + itemRadius * sin(M_PI_2 + angle)); + position.SetY(itemRadius - itemRadius * cos(M_PI_2 + angle)); + item->SetPosition(position); +} + +void RenderIndexerCircle::ResetItemsPosition() +{ + if (!IsValidArc() || GetChildren().empty()) { + return; + } + arcHeadOffset_ = 0.0; + int32_t count = 0; + for (auto item : items_) { + if (!NeedProcess(item)) { + item->SetVisible(false); + continue; + } + SetItemPosition(item, count); + item->SetVisible(true); + ++count; + } + + arcMaxLen_ = count == itemMaxCount_ ? M_PI * DOUBLE : (count - 1) * perItemExtent_; + if (curStatus_ != IndexerItemStatus::ANIMATION) { + arc_->SetSweepAngle(arcMaxLen_); + } + if (!hasCollapseItem_) { + return; + } + + currentCount_ = count - 1; + if (currentCount_ <= collapseItemCount_) { + auto collapse = GetChildren().back(); + if (collapse) { + collapse->SetVisible(false); + } + arc_->SetSweepAngle((currentCount_ - 1) * perItemExtent_); + return; + } + + SetCollapseItemPosition(itemInfo_[itemMaxCount_ - 1][TABLE_ANGLE]); + if (curStatus_ != IndexerItemStatus::ANIMATION) { + arcTailPosition_ = arcMaxLen_ + arcHeadPosition_; + SetCollapseItemPosition(arcTailPosition_); + } +} + +bool RenderIndexerCircle::TouchTest(const Point& globalPoint, const Point& parentLocalPoint, + const TouchRestrict& touchRestrict, TouchTestResult& result) +{ + if (!IsValidArc()) { + LOGE("[indexer] TouchTest arc render node is invalid"); + return false; + } + if (GetDisableTouchEvent() || disabled_) { + return false; + } + // Since the paintRect is relative to parent, use parent local point to perform touch test. + if (arc_->IsInRegion(parentLocalPoint - GetPaintRect().GetOffset())) { + // Calculates the local point location and coordinate offset in this node. + const auto localPoint = parentLocalPoint - GetPaintRect().GetOffset(); + const auto coordinateOffset = globalPoint - localPoint; + globalPoint_ = globalPoint; + OnTouchTestHit(coordinateOffset, touchRestrict, result); + return true; + } else { + if (IsValidBubbleBox() && bubbleController_ && bubbleController_->IsRunning()) { + bubbleController_->Finish(); + } + } + return true; +} + +void RenderIndexerCircle::HandleTouchDown(const TouchEventInfo& info) +{ + LOGI("[indexer] HandleTouchDown."); + if (curStatus_ == IndexerItemStatus::ANIMATION) { + return; + } + + Offset position = info.GetTouches().front().GetLocalLocation(); + LOGD("[indexer] x:%{public}lf, y:%{public}lf, curStatus_:%{public}d, nextStatus_:%{public}d", position.GetX(), + position.GetY(), curStatus_, nextStatus_); + + if (CollapseItemHitTest(position)) { + curStatus_ == IndexerItemStatus::EXPAND ? CollapseItems() : ExpandItems(); + return; + } + + touching_ = true; + if (curStatus_ == IndexerItemStatus::EXPAND) { + int32_t item = GetNearestItem(position, false); + if (item <= INVALID_INDEX || item >= itemCount_ - 1) { + LOGE("[indexer] item index %{public}d is not valid", item); + return; + } + + if (ChangeLanguage(item)) { + LOGI("[indexer] : change to show another language"); + touching_ = false; + return; + } + SetItemsFocused(item); + } else { + TouchOnCollapseArc(position); + } +} + +bool RenderIndexerCircle::NeedChangeIndexer(int32_t index) +{ + if (curStatus_ != IndexerItemStatus::EXPAND) { + return false; + } + auto indexerItem = GetSpecificItem(index); + if (!indexerItem) { + return false; + } + + // skip # and * + if (indexerItem->GetSectionText() == StringUtils::Str16ToStr8(INDEXER_STR_SHARP) || + indexerItem->GetSectionText() == StringUtils::Str16ToStr8(INDEXER_STR_COLLECT)) { + return false; + } + return indexerItem->GetItemType() != curItemType_; +} + +void RenderIndexerCircle::HandleTouchUp(const TouchEventInfo& info) +{ + LOGI("[indexer] HandleTouchUp."); + curHitItem_ = -1; + touching_ = false; +} + +void RenderIndexerCircle::HandleTouchMove(const TouchEventInfo& info) +{ + if (!touching_) { + LOGD("[indexer] not in touching."); + return; + } + Offset position = info.GetTouches().front().GetLocalLocation(); + if (curStatus_ == IndexerItemStatus::EXPAND) { + int32_t curItem = GetNearestItem(position, true); + if (curItem == INVALID_INDEX || curItem >= itemCount_ - 1) { + return; + } + if (curItem != curHitItem_) { + curHitItem_ = curItem; + SetItemsFocused(curItem); + } + } else if (curStatus_ == IndexerItemStatus::COLLAPSE) { + TouchOnCollapseArc(position); + } else { + return; + } +} + +int32_t RenderIndexerCircle::GetTouchedItemIndex(const Offset& touchPosition) +{ + if (NearZero(itemSize_)) { + LOGE("[indexer] Invalid Item size:%{public}lf", itemSize_); + return INVALID_INDEX; + } + + double touchAngle = atan2(touchPosition.GetY() - outerRadius_, touchPosition.GetX() - outerRadius_); + if (touchPosition.GetY() - outerRadius_ < 0.0) { + touchAngle += DOUBLE * M_PI; + } + touchAngle += arcHeadPosition_; + + int32_t itemIndexInIndexer = static_cast(touchAngle / perItemExtent_); + LOGI("[indexer] HandleTouched section index:%{public}d, touchAngle:%{public}lf", itemIndexInIndexer, touchAngle); + return GetItemIndex(itemIndexInIndexer); +} + +void RenderIndexerCircle::InitIndexTable() +{ + // init information table + LOGI("[indexer] InitIndexTable Count:%{public}d, MaxCount:%{public}d", itemCount_, itemMaxCount_); + for (int32_t i = 0; i < itemMaxCount_; ++i) { + itemInfo_[i][TABLE_ANGLE] = INDEXER_ARC_BEGIN + i * perItemExtent_; + itemInfo_[i][TABLE_POSITION_X] = sin(M_PI_2 + itemInfo_[i][TABLE_ANGLE]); + itemInfo_[i][TABLE_POSITION_Y] = -cos(M_PI_2 + itemInfo_[i][TABLE_ANGLE]); + } +} + +void RenderIndexerCircle::HandleListMoveItems(int32_t curHeadIndex) +{ + if (curStatus_ != IndexerItemStatus::EXPAND) { + return; + } + if (lastHeadIndex_ != curHeadIndex) { + CollapseItems(); + } + LOGD("[indexer] HandleListMoveItems focusedItem_:%{public}d, curHeadIndex:%{public}d", focusedItem_, curHeadIndex); +} + +void RenderIndexerCircle::InitBubbleBox(const Size& size) +{ + if (IsValidBubbleBox()) { + Offset bubblePosition; + bubblePosition.SetX( + size.Width() * HALF - NormalizeToPx(Dimension(BUBBLE_BOX_SIZE_CIRCLE * HALF, DimensionUnit::VP))); + bubblePosition.SetY( + size.Height() * HALF * HALF - NormalizeToPx(Dimension(BUBBLE_BOX_SIZE_CIRCLE * HALF, DimensionUnit::VP))); + bubbleDisplay_->SetPosition(bubblePosition); + } +} + +void RenderIndexerCircle::InitIndicatorBox() +{ + if (IsValidIndicatorBox()) { + Offset boxPosition; + double angle = INDEXER_ARC_BEGIN + (collapseItemCount_ - 1) * perItemExtent_; + double itemRadius = outerRadius_ - itemSize_ * HALF; + boxPosition.SetX(itemRadius + itemRadius * sin(M_PI_2 + angle)); + boxPosition.SetY(itemRadius - itemRadius * cos(M_PI_2 + angle)); + indicatorBox_->SetPosition(boxPosition); + indicatorBox_->SetColor(Color::TRANSPARENT, false); + itemColorEnabled_ = true; + } +} + +bool RenderIndexerCircle::IsValidIndicatorBox() +{ + if (!indicatorBox_ && !GetChildren().empty()) { + auto iter = GetChildren().begin(); + std::advance(iter, 1); + indicatorBox_ = iter == GetChildren().end() ? nullptr : AceType::DynamicCast(*iter); + if (!indicatorBox_) { + LOGE("[indexer] IsValidIndicatorBox. indicatorBox_ ptr is NULL."); + return false; + } + } + return true; +} + +bool RenderIndexerCircle::IsValidBubbleBox() +{ + if (!bubbleEnabled_ || GetChildren().empty()) { + return false; + } + if (!bubbleDisplay_) { + auto iter = GetChildren().begin(); + std::advance(iter, 2); + bubbleDisplay_ = iter == GetChildren().end() ? nullptr : AceType::DynamicCast(*iter); + if (!bubbleDisplay_ || bubbleDisplay_->GetChildren().empty()) { + LOGE("[indexer] IsValidBubbleBox. bubbleBox_ ptr is NULL."); + return false; + } + bubbleBox_ = AceType::DynamicCast(bubbleDisplay_->GetChildren().front()); + if (!bubbleBox_) { + return false; + } + } + return true; +} + +bool RenderIndexerCircle::IsValidArc() +{ + if (!arc_) { + arc_ = GetChildren().empty() ? nullptr : AceType::DynamicCast(GetChildren().front()); + if (!arc_) { + LOGE("[indexer] IsValidArc. Arc ptr is NULL."); + return false; + } + } + return true; +} + +void RenderIndexerCircle::UpdateCurrentSectionItem(int32_t curSection) +{ + if (curStatus_ != IndexerItemStatus::COLLAPSE) { + return; + } + + // calculate drag angle + int32_t index = GetPositionItemIndex(curSection); + double offsetAngle = -(index + 1 - collapseItemCount_) * perItemExtent_; + offsetAngle = std::min(offsetAngle, 0.0); + + // make indicator box visible and item background color disabled + if (LessNotEqual(offsetAngle, 0.0)) { + if (focusController_ && focusController_->IsRunning()) { + focusController_->Finish(); + } + if (IsValidIndicatorBox()) { + indicatorBox_->SetColor(Color(INDEXER_CIRCLE_ACTIVE_BG_COLOR), false); + itemColorEnabled_ = false; + } + } + + LOGD("[indexer] UpdateCurrentSectionItem curSection:%{public}d, offsetAngle:%{public}lf itemCount_:%{public}d, " + "collapseItemCount_:%{public}d arcHeadPosition_:%{public}lf, collapseItemCount_:%{public}lf", + curSection, offsetAngle, itemCount_, collapseItemCount_, arcHeadPosition_, arcTailPosition_); + if (!NearEqual(offsetAngle, arcHeadOffset_)) { + BeginCollapseScrollAnimation(arcHeadOffset_, offsetAngle); + } +} + +void RenderIndexerCircle::CollapseItems() +{ + LOGI("[indexer] CollapseItems"); + if (currentCount_ <= collapseItemCount_) { + LOGD("[indexer] current show item count(%{public}d), no need to collapse", currentCount_); + return; + } + + if (collapseScrollController_ && collapseScrollController_->IsRunning()) { + itemColorEnabled_ = true; + collapseScrollController_->Finish(); + } + + // finish focus change animation first + if (focusController_ && focusController_->IsRunning()) { + focusController_->Finish(); + } + BeginArcAnimation(true); +} + +void RenderIndexerCircle::ExpandItems() +{ + LOGI("[indexer] ExpandItems"); + if (IsValidIndicatorBox()) { + indicatorBox_->SetColor(Color::TRANSPARENT, false); + itemColorEnabled_ = true; + UpdateItemBackground(DEFAULT_OPACITY_IN_PERCENT, focusedItem_); + } + BeginArcAnimation(false); +} + +void RenderIndexerCircle::BuildArcAnimation() +{ + if (!IsValidArc()) { + LOGE("[indexer] BuildArcAnimation arc render node is invalid"); + return; + } + if (!collapseController_) { + collapseController_ = AceType::MakeRefPtr(GetContext()); + } else { + collapseController_->ClearInterpolators(); + collapseController_->ClearAllListeners(); + } + + double collapseTail = arcHeadPosition_ + collapseItemCount_ * perItemExtent_; + auto tailStartFrame = AceType::MakeRefPtr>(KEYFRAME_BEGIN, collapseTail); + auto tailEndFrame = AceType::MakeRefPtr>(KEYFRAME_END, arcHeadPosition_ + arcMaxLen_); + tailEndFrame->SetCurve(Curves::FAST_OUT_SLOW_IN); + + auto tailInterpolator = AceType::MakeRefPtr>(); + tailInterpolator->AddKeyframe(tailStartFrame); + tailInterpolator->AddKeyframe(tailEndFrame); + tailInterpolator->AddListener([weak = AceType::WeakClaim(this)](double value) { + auto indexer = weak.Upgrade(); + if (indexer) { + indexer->UpdateArcTail(value); + } + }); + + collapseController_->AddInterpolator(tailInterpolator); + auto weak = AceType::WeakClaim(this); + collapseController_->AddStopListener([weak]() { + auto indexer = weak.Upgrade(); + if (indexer) { + indexer->HandleArcAnimationStop(); + } + }); + collapseController_->AddStartListener([weak]() { + auto indexer = weak.Upgrade(); + if (indexer) { + indexer->HandleArcAnimationStart(); + } + }); + collapseController_->SetDuration(INDEXER_ANIMATION_DURATION); + collapseController_->SetFillMode(FillMode::FORWARDS); +} + +void RenderIndexerCircle::BeginArcAnimation(bool collapse) +{ + if (!IsValidArc()) { + LOGE("[indexer] BeginArcAnimation arc render node is invalid"); + return; + } + if (!collapseController_) { + BuildArcAnimation(); + } + if (collapseController_->IsRunning()) { + collapseController_->Finish(); + } + collapse ? collapseController_->Backward() : collapseController_->Forward(); +} + +void RenderIndexerCircle::HandleArcAnimationStart() +{ + nextStatus_ = curStatus_ == IndexerItemStatus::EXPAND ? IndexerItemStatus::COLLAPSE : IndexerItemStatus::EXPAND; + curStatus_ = IndexerItemStatus::ANIMATION; +} + +void RenderIndexerCircle::HandleArcAnimationStop() +{ + curStatus_ = nextStatus_; +} + +void RenderIndexerCircle::BeginCollapseScrollAnimation(double originOffset, double targetOffset) +{ + if (!collapseScrollController_) { + collapseScrollController_ = AceType::MakeRefPtr(GetContext()); + } + + if (collapseScrollController_->IsRunning()) { + collapseScrollController_->Finish(); + } + collapseScrollController_->ClearInterpolators(); + collapseScrollController_->ClearAllListeners(); + collapseScrollController_->AddStopListener([weak = AceType::WeakClaim(this)]() { + auto indexer = weak.Upgrade(); + if (indexer) { + indexer->HandleCollapseScrollAnimationStop(); + } + }); + + InitCollapseScrollInterpolator(originOffset, targetOffset); + collapseScrollController_->SetDuration(INDEXER_ANIMATION_DURATION); + collapseScrollController_->Play(); +} + +void RenderIndexerCircle::HandleCollapseScrollAnimationStop() +{ + if (IsValidIndicatorBox() && NearEqual(0.0, arcHeadOffset_)) { + indicatorBox_->SetColor(Color::TRANSPARENT, false); + itemColorEnabled_ = true; + UpdateItemBackground(DEFAULT_OPACITY_IN_PERCENT, focusedItem_); + } +} + +void RenderIndexerCircle::BeginFocusAnimation(int32_t originIndex, int32_t targetIndex) +{ + if (!NearEqual(0.0, arcHeadOffset_) && !itemColorEnabled_) { + return; + } + + // stop and reset animator + if (!focusController_) { + focusController_ = AceType::MakeRefPtr(GetContext()); + } + + if (focusController_->IsRunning()) { + focusController_->Finish(); + SetIndexerItemStatus(false, originIndex, targetIndex); + } + focusController_->ClearInterpolators(); + focusController_->ClearAllListeners(); + + SetIndexerItemStatus(true, originIndex, targetIndex); + + auto weak = AceType::WeakClaim(this); + focusController_->AddStopListener([weak, originIndex, targetIndex]() { + auto indexer = weak.Upgrade(); + if (indexer) { + indexer->SetIndexerItemStatus(false, originIndex, targetIndex); + } + }); + + InitFocusInterpolator(ZERO_OPACITY_IN_PERCENT, DEFAULT_OPACITY_IN_PERCENT, originIndex, targetIndex); + focusController_->SetDuration(INDEXER_ANIMATION_DURATION); + focusController_->Play(); +} + +void RenderIndexerCircle::SetIndexerItemStatus(bool inAnimation, int32_t originIndex, int32_t targetIndex) +{ + RefPtr focusItem = GetSpecificItem(targetIndex); + RefPtr preFocusItem = GetSpecificItem(originIndex); + if (!focusItem || !preFocusItem) { + return; + } + focusItem->MarkItemInAnimation(inAnimation); + preFocusItem->MarkItemInAnimation(inAnimation); + + if (!inAnimation) { + focusItem->UpdateItemStyle(); + preFocusItem->UpdateItemStyle(); + } +} + +void RenderIndexerCircle::UpdateItemsPosition(double arcOffset) +{ + if (curStatus_ == IndexerItemStatus::EXPAND) { + return; + } + + RotateItems(arcOffset); + SetItemsVisible(arcHeadPosition_ - arcOffset, arcTailPosition_ - perItemExtent_ - arcOffset); + SetCollapseItemPosition(itemInfo_[collapseItemCount_][TABLE_ANGLE]); + MarkNeedRender(); +} + +void RenderIndexerCircle::UpdateItemBackground(double value, int32_t originIndex, int32_t targetIndex) +{ + UpdateItemBackground(value, targetIndex); + UpdateItemBackground(DEFAULT_OPACITY_IN_PERCENT - value, originIndex); +} + +void RenderIndexerCircle::UpdateItemBackground(double value, int32_t index) +{ + RefPtr item = GetSpecificItem(index); + if (item) { + item->UpdateItemBackground(Color(INDEXER_CIRCLE_ACTIVE_BG_COLOR).BlendOpacity(value)); + } +} + +void RenderIndexerCircle::InitCollapseScrollInterpolator(double origin, double target) +{ + auto startFrame = AceType::MakeRefPtr>(KEYFRAME_BEGIN, origin); + auto endFrame = AceType::MakeRefPtr>(KEYFRAME_END, target); + endFrame->SetCurve(Curves::FAST_OUT_SLOW_IN); + + auto animation = AceType::MakeRefPtr>(); + animation->AddKeyframe(startFrame); + animation->AddKeyframe(endFrame); + animation->AddListener([weak = AceType::WeakClaim(this)](double value) { + auto indexer = weak.Upgrade(); + if (indexer) { + indexer->UpdateItemsPosition(value); + } + }); + + collapseScrollController_->AddInterpolator(animation); +} + +void RenderIndexerCircle::InitFocusInterpolator(double origin, double target, int32_t originIndex, int32_t targetIndex) +{ + auto startFrame = AceType::MakeRefPtr>(KEYFRAME_BEGIN, origin); + auto endFrame = AceType::MakeRefPtr>(KEYFRAME_END, target); + endFrame->SetCurve(Curves::FAST_OUT_SLOW_IN); + + auto weak = AceType::WeakClaim(this); + auto animation = AceType::MakeRefPtr>(); + animation->AddKeyframe(startFrame); + animation->AddKeyframe(endFrame); + animation->AddListener([weak, originIndex, targetIndex](double value) { + auto indexer = weak.Upgrade(); + if (indexer) { + indexer->UpdateItemBackground(value, originIndex, targetIndex); + } + }); + + focusController_->AddInterpolator(animation); +} + +void RenderIndexerCircle::UpdateArcTail(double value) +{ + if (!IsValidArc()) { + LOGE("[indexer] UpdateArcTail arc render node is invalid"); + return; + } + LOGD("[indexer] UpdateArcTail value:%{public}lf, arcHeadPosition_:%{public}lf, sweepAngle(%{public}lf)", value, + arcHeadPosition_, arc_->GetSweepAngle()); + if (focusedItem_ >= itemCount_ - 1) { + LOGE("[indexer] UpdateArcTail. Invalid focusedItem:%{public}d", focusedItem_); + return; + } + + arcTailPosition_ = value; + arc_->SetSweepAngle(arcTailPosition_ - arcHeadPosition_); + + // calculate focused item index on circle + int32_t index = GetPositionItemIndex(focusedItem_); + double focusAngle = itemInfo_[index][TABLE_ANGLE]; + double expectFocusAngle = arcTailPosition_ - perItemExtent_; + double offsetAngle = expectFocusAngle - focusAngle; + + LOGD("[indexer]focusItem(%{public}d), index(%{public}d), focusAngle(%{public}lf), expectAngle(%{public}lf)", + focusedItem_, index, focusAngle, expectFocusAngle); + if (focusAngle > expectFocusAngle) { + // items need move + RotateItems(offsetAngle); // update items position + SetItemsVisible(focusAngle - (arcTailPosition_ - arcHeadPosition_ - perItemExtent_), focusAngle); + } else { + // items do not need move, reset position directly + ResetItemsPosition(); + SetItemsVisible(arcHeadPosition_, arcTailPosition_ - perItemExtent_); + } + SetCollapseItemPosition(value); + MarkNeedRender(); +} + +void RenderIndexerCircle::SetCollapseItemPosition(double position) +{ + if (GetChildren().empty()) { + return; + } + auto item = GetChildren().back(); + if (!item) { + return; + } + + double finalPosition = position; + LOGD("[indexer] SetCollapseItemPosition position:%{public}lf", finalPosition); + if (itemCount_ <= collapseItemCount_) { + item->SetVisible(false); + return; + } else { + item->SetVisible(true); + } + + if (finalPosition < itemInfo_[collapseItemCount_][TABLE_ANGLE]) { + finalPosition = itemInfo_[collapseItemCount_][TABLE_ANGLE]; + } + + if (position > itemInfo_[itemMaxCount_ - 1][TABLE_ANGLE]) { + finalPosition = itemInfo_[itemMaxCount_ - 1][TABLE_ANGLE]; + } + + SetItemPosition(item, finalPosition); + collapseItemPosition_ = finalPosition; + + // rotate the collapse item ">" + bool collapse = false; + if (curStatus_ == IndexerItemStatus::EXPAND) { + collapse = true; + } + if (curStatus_ == IndexerItemStatus::ANIMATION && nextStatus_ == IndexerItemStatus::EXPAND && + NearEqual(collapseItemPosition_, itemInfo_[itemMaxCount_ - 1][TABLE_ANGLE])) { + collapse = true; + } + // rotate angle + double rotate = collapseItemPosition_ + M_PI_2; + if (collapse) { + rotate += M_PI; + } + + RefPtr collapseItem = AceType::DynamicCast(GetChildren().back()); + if (collapseItem) { + collapseItem->SetRotate(rotate * INDEXER_ANGLE_TO_RADIAN / M_PI); + } +} + +bool RenderIndexerCircle::CollapseItemHitTest(const Offset& position) +{ + // do not exist a collapse item + if (GetChildren().empty() || !hasCollapseItem_) { + return false; + } + // exist a collapse item but not visible + auto collapse = GetChildren().back(); + if (collapse && !collapse->GetVisible()) { + return false; + } + + double hotRgnRadius = hotRgnSize_ * HALF; + double touchAngle = GetPositionAngle(position); + double touchRadiusTail = hotRgnRadius / (outerRadius_ - itemSize_ * HALF); + + if (touchAngle < collapseItemPosition_ - perItemExtent_ * HALF || + touchAngle > collapseItemPosition_ + touchRadiusTail) { + LOGI("[indexer] CollapseItemHitTest, NOT HIT"); + return false; + } + + double centerX = outerRadius_ + (outerRadius_ - itemSize_ * HALF) * sin(M_PI_2 + collapseItemPosition_); + double centerY = outerRadius_ - (outerRadius_ - itemSize_ * HALF) * cos(M_PI_2 + collapseItemPosition_); + double distance = pow(position.GetX() - centerX, 2) + pow(position.GetY() - centerY, 2); + + LOGD("[indexer] HitTest %s cx:%{public}lf cy:%{public}lf dis:%{public}lf pos:%{public}lf hotRgnRadius:%{public}lf", + position.ToString().c_str(), centerX, centerY, distance, collapseItemPosition_, hotRgnRadius); + + if (distance > hotRgnRadius * hotRgnRadius) { + LOGI("[indexer] CollapseItemHitTest, NOT HIT"); + return false; + } else { + LOGI("[indexer] CollapseItemHitTest, HIT"); + return true; + } +} + +void RenderIndexerCircle::TouchOnCollapseArc(const Offset& position) +{ + LOGD("[indexer] TouchOnCollapseArc item is curStatus_:%{public}d", curStatus_); + if (curStatus_ != IndexerItemStatus::COLLAPSE) { + return; + } + + double touchAngle = GetPositionAngle(position); + double touchRadius = hotRgnSize_ / (outerRadius_ - itemSize_ * HALF) * HALF; + + LOGD("[indexer] TouchOnCollapseArc item is touchAngle:%{public}lf, touchRadius:%{public}lf, " + "arcHeadPosition_:%{public}lf, arcTailPosition_:%{public}lf", + touchAngle, touchRadius, arcHeadPosition_, arcTailPosition_); + if (touchAngle < arcHeadPosition_ - touchRadius || touchAngle > arcTailPosition_ - perItemExtent_ + touchRadius) { + return; + } + + // focus + int32_t curItem = GetNearestItem(touchAngle); + curItem = GetActualItemIndex(curItem); + LOGD("[indexer] TouchOnCollapseArc item is curItem:%{public}d, itemCount_:%{public}d", curItem, itemCount_); + // to except collapse item + if (curItem == INVALID_INDEX || curItem >= itemCount_ - 1) { + return; + } + if (curItem != curHitItem_) { + curHitItem_ = curItem; + SetItemsFocused(curItem); + } + + MarkNeedRender(); +} + +void RenderIndexerCircle::RotateItems(double arcOffset) +{ + LOGD("[indexer] RotateItems arcOffset:%{public}lf", arcOffset); + int32_t count = 0; + for (auto item : items_) { + // to except collapse item + if (count == itemCount_ - 1 || count >= itemMaxCount_) { + break; + } + + if (!NeedProcess(item)) { + continue; + } + + // calculate item position + SetItemPosition(item, itemInfo_[count][TABLE_ANGLE] + arcOffset); + ++count; + } + arcHeadOffset_ = arcOffset; +} + +void RenderIndexerCircle::SetItemsVisible(double arcHead, double arcTail) +{ + if (curStatus_ == IndexerItemStatus::EXPAND) { + for (auto item : items_) { + item->SetVisible(true); + } + return; + } + + int32_t count = 0; + double visibleHead = arcHead - perItemExtent_ * HALF * HALF; + double visibleTail = arcTail + perItemExtent_ * HALF * HALF; + for (auto item : items_) { + if (count >= itemCount_ - 1 || count >= itemMaxCount_) { + break; + } + if (!NeedProcess(item)) { + continue; + } + item->SetVisible(itemInfo_[count][TABLE_ANGLE] > visibleHead && itemInfo_[count][TABLE_ANGLE] < visibleTail); + ++count; + } +} + +int32_t RenderIndexerCircle::GetPositionItemIndex(int32_t index) +{ + int32_t positionIndex = 0; + int32_t count = 0; + for (auto item : items_) { + if (count == index) { + break; + } + if (NeedProcess(item)) { + positionIndex++; + } + count++; + } + + return positionIndex; +} + +int32_t RenderIndexerCircle::GetActualItemIndex(int32_t positionIndex) +{ + int32_t index = 0; + int32_t count = 0; + for (auto item : items_) { + if (NeedProcess(item)) { + count++; + } + if (positionIndex == count - 1) { + break; + } + index++; + } + return index; +} + +void RenderIndexerCircle::HandleRotation(double value) +{ + rotationStepValue_ += value; + if (GreatOrEqual(rotationStepValue_, ROTATION_THRESHOLD)) { + // ShowPrevious + for (int32_t i = focusedItem_ - 1; i >= 0; i--) { + auto indexerItem = GetSpecificItem(i); + if (indexerItem && indexerItem->GetKeyCount() > 0 && NeedProcess(indexerItem)) { + SetItemsFocused(i); + break; + } + } + rotationStepValue_ = 0.0; + } else if (LessOrEqual(rotationStepValue_, -ROTATION_THRESHOLD)) { + // ShowNext + for (int32_t i = focusedItem_ + 1; i < itemCount_; i++) { + auto indexerItem = GetSpecificItem(i); + if (indexerItem && indexerItem->GetKeyCount() > 0 && NeedProcess(indexerItem)) { + SetItemsFocused(i); + break; + } + } + rotationStepValue_ = 0.0; + } +} + +bool RenderIndexerCircle::RotationTest(const RotationEvent& event) +{ + if (curStatus_ != IndexerItemStatus::EXPAND) { + return false; + } + HandleRotation(event.value); + return true; +} + +int32_t RenderIndexerCircle::GetNearestItem(const Offset& position, bool move) +{ + double touchAngle = GetPositionAngle(position); + int32_t positionIndex = round((touchAngle - arcHeadPosition_ - arcHeadOffset_) / perItemExtent_); + + // calculate actual index of indexer by position + int32_t ret = GetActualItemIndex(positionIndex); + LOGD("[indexer] ExpandItems touchAngle:%{public}lf, arcHeadPosition_:%{public}lf, arcHeadOffset_:%{public}lf", + touchAngle, arcHeadPosition_, arcHeadOffset_); + if (ret < 0 || ret >= itemCount_) { + LOGW("[indexer] GetNearestItem failed, ret:%{public}d", ret); + return INVALID_INDEX; + } + + double hotRgnRadius = hotRgnSize_ * HALF; + double itemCenterRadius = outerRadius_ - itemSize_ * HALF; + if (!move) { + double centerX = outerRadius_ + itemCenterRadius * itemInfo_[positionIndex][TABLE_POSITION_X]; + double centerY = outerRadius_ + itemCenterRadius * itemInfo_[positionIndex][TABLE_POSITION_Y]; + double distance = (position.GetX() - centerX) * (position.GetX() - centerX) + + (position.GetY() - centerY) * (position.GetY() - centerY); + if (distance > hotRgnRadius * hotRgnRadius) { + return INVALID_INDEX; + } + } + LOGD("[indexer] GetNearestItem ret:%{public}d", ret); + return ret; +} + +int32_t RenderIndexerCircle::GetNearestItem(double position) +{ + return round((position - arcHeadPosition_ - arcHeadOffset_) / perItemExtent_); +} + +bool RenderIndexerCircle::NeedRotation() const +{ + return curStatus_ == IndexerItemStatus::EXPAND; +} + +bool RenderIndexerCircle::NeedProcess(const RefPtr& item) const +{ + auto indexerItem = AceType::DynamicCast(item); + if (indexerItem && (indexerItem->GetItemType() == curItemType_ || indexerItem->IsItemPrimary())) { + return true; + } + return false; +} + +bool RenderIndexerCircle::ChangeLanguage(int32_t index) +{ + if (!NeedChangeIndexer(index)) { + return false; + } + curItemType_ = 1 - curItemType_; + FireIndexerChangeEvent(); + SetItemsFocused(index, true, false); + MarkNeedLayout(true); + return true; +} + +double RenderIndexerCircle::GetPositionAngle(const Offset& position) +{ + double touchAngle = atan2(position.GetY() - outerRadius_, position.GetX() - outerRadius_); + double itemRadius = itemSize_ / (outerRadius_ - itemSize_ * HALF) * HALF; + if (touchAngle < arcHeadPosition_ - itemRadius) { + touchAngle += M_PI * DOUBLE; + } + return touchAngle; +} + +void RenderIndexerCircle::SetItemsFocused(int32_t index, bool force, bool smooth) +{ + if (index < 0 || index >= itemCount_ - 1) { + LOGE("Invalid index:%{public}d", index); + return; + } + + RefPtr curItem = GetSpecificItem(index); + if (!curItem || curItem->GetKeyCount() <= 0) { + LOGE("Invalid indexer item:%{public}d", index); + return; + } + if (focusedItem_ == index) { + if (force) { + curItem->SetClicked(true); + MoveList(curItem->GetSectionIndex()); + } + return; + } + + // change to correct index and move list to correct position + if (smooth) { + BeginFocusAnimation(focusedItem_, index); + } + if (IsValidIndicatorBox()) { + indicatorBox_->SetColor(Color::TRANSPARENT, false); + itemColorEnabled_ = true; + } + curItem->SetClicked(true); + MoveList(curItem->GetSectionIndex()); + + // Make pre clicked item blur. + auto preItem = GetSpecificItem(focusedItem_); + if (preItem) { + preItem->SetClicked(false); + } + focusedItem_ = index; + isInitFocus_ = false; + UpdateBubbleText(); +} + +void RenderIndexerCircle::FireIndexerChangeEvent() const +{ + if (indexerChangeEvent_) { + LOGI("indexerChangeEvent_, curItemType_ = %{public}d.", curItemType_); + std::string param = + std::string(R"("indexerchange",{"local":)").append(curItemType_ == 0 ? "true" : "false").append("},null"); + indexerChangeEvent_(param); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/indexer/render_indexer_circle.h b/frameworks/core/components/indexer/render_indexer_circle.h new file mode 100644 index 00000000..89f9f8a5 --- /dev/null +++ b/frameworks/core/components/indexer/render_indexer_circle.h @@ -0,0 +1,160 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_INDEXER_RENDER_INDEXER_CIRCLE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_INDEXER_RENDER_INDEXER_CIRCLE_H + +#include "core/animation/animator.h" +#include "core/animation/keyframe_animation.h" +#include "core/components/arc/render_arc.h" +#include "core/components/indexer/render_indexer.h" + +namespace OHOS::Ace { + +constexpr double INDEXER_HOT_RGN_RADIUS = 23.0; +constexpr int32_t CHANGE_FROM_CLICK = -1; +constexpr int32_t CHANGE_FROM_LIST = 0; +constexpr int32_t INDEXER_ANIMATION_DURATION = 300; + +enum class IndexerItemStatus { EXPAND, COLLAPSE, ANIMATION }; + +class RenderIndexerCircle : public RenderIndexer { + DECLARE_ACE_TYPE(RenderIndexerCircle, RenderIndexer); + +public: + RenderIndexerCircle() = default; + ~RenderIndexerCircle() override = default; + static RefPtr Create(); + void Update(const RefPtr& component) override; + void PerformLayout() override; + bool TouchTest(const Point& globalPoint, const Point& parentLocalPoint, const TouchRestrict& touchRestrict, + TouchTestResult& result) override; + void HandleTouchDown(const TouchEventInfo& info) override; + void HandleTouchUp(const TouchEventInfo& info) override; + void HandleTouchMove(const TouchEventInfo& info) override; + int32_t GetTouchedItemIndex(const Offset& touchPosition) override; + void InitIndexTable() override; + void HandleListMoveItems(int32_t curHeadIndex) override; + void UpdateCurrentSectionItem(int32_t curSection) override; + void BeginFocusAnimation(int32_t originIndex, int32_t targetIndex) override; + bool RotationTest(const RotationEvent& event) override; + bool NeedProcess(const RefPtr& item) const override; + bool NeedRotation() const override; + + bool IsValidArc(); + bool IsValidIndicatorBox(); + bool IsValidBubbleBox() override; + bool IsItemColorEnabled() const + { + return itemColorEnabled_; + } + + IndexerItemStatus GetIndexerStatus() + { + return curStatus_; + } + +protected: + bool NeedChangeIndexer(int32_t index); + bool ChangeLanguage(int32_t index); + void HandleRotation(double value); + void CollapseItems(); + void ExpandItems(); + + // marker item focused + void SetItemsFocused(int32_t index, bool force = false, bool smooth = true); + + // calculate index in items by position index in circle + int32_t GetActualItemIndex(int32_t positionIndex); + + // calculate position index in circle by index in items + int32_t GetPositionItemIndex(int32_t index); + + // identify indexer status + IndexerItemStatus nextStatus_ = IndexerItemStatus::EXPAND; + IndexerItemStatus curStatus_ = IndexerItemStatus::EXPAND; + + RefPtr collapseController_; // control expand or collapse animation + RefPtr focusController_; // control click to change focus animation + RefPtr collapseScrollController_; // control focus change when scroll + + int32_t curItemType_ = 0; + int32_t itemMaxCount_ = INDEXER_ITEM_MAX_COUNT; // the max count of the items while in expand mode + int32_t currentCount_ = INDEXER_ITEM_MAX_COUNT; // current shown item nums exclude collapse item + double arcHeadOffset_ = 0.0; // the offset of the arc, item # to the original position, in radians + double arcMaxLen_ = M_PI * 2.0; // the max length of the arc, in radians + +private: + void InitBubbleBox(const Size& size); + void InitIndicatorBox(); + void ResetItemsPosition(); + void BuildArcAnimation(); + void BeginArcAnimation(bool collapse); + void BeginCollapseScrollAnimation(double originOffset, double targetOffset); + void HandleCollapseScrollAnimationStop(); + void HandleArcAnimationStart(); + void HandleArcAnimationStop(); + void InitFocusInterpolator(double origin, double target, int32_t originIndex, int32_t targetIndex); + void InitCollapseScrollInterpolator(double origin, double target); + void SetIndexerItemStatus(bool inAnimation, int32_t originIndex, int32_t targetIndex); + void UpdateItemBackground(double value, int32_t originIndex, int32_t targetIndex); + void UpdateItemBackground(double value, int32_t index); + void UpdateArcTail(double value); + int32_t GetNearestItem(const Offset& position, bool move); + int32_t GetNearestItem(double position); + double GetPositionAngle(const Offset& position); + bool CollapseItemHitTest(const Offset& position); + void FireIndexerChangeEvent() const; + + // update all item visible status with range from head to tail + void SetItemsVisible(double arcHead, double arcTail); + + // update specific item's position + void SetItemPosition(const RefPtr& item, int32_t positionIndex); + void SetItemPosition(const RefPtr& item, double angle); + + // update all items's position by arc offset + void UpdateItemsPosition(double arcOffset); + + // update collapse item position + void SetCollapseItemPosition(double position); + + // handle touch down event when arc is collapsed + void TouchOnCollapseArc(const Offset& position); + + // rotate items for animation + void RotateItems(double arcOffset); + + std::function indexerChangeEvent_; + + double outerRadius_ = 0.0; // the outer radius of the arc, the same as half of the layout width + RefPtr arc_; // reference of the arc render node + RefPtr indicatorBox_; // reference of the indicator box render node + double arcHeadPosition_ = INDEXER_ARC_BEGIN; // the begin position of the arc, in radians + double arcTailPosition_ = 2 * M_PI; // the tail position of the arc, in radians + int32_t collapseItemCount_ = INDEXER_COLLAPSE_ITEM_COUNT; // the max count of the items while in collapse mode + double collapseItemPosition_ = INDEXER_ARC_BEGIN; // position of the collapse item, in radians + double hotRgnSize_ = INDEXER_HOT_RGN_RADIUS; // radius for item clicking + double rotationStepValue_ = 0.0; + double perItemExtent_ = 2.0 * M_PI / itemMaxCount_; + + bool touching_ = false; // whether the item is in touching + bool itemColorEnabled_ = true; + bool hasCollapseItem_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_INDEXER_RENDER_INDEXER_CIRCLE_H diff --git a/frameworks/core/components/indexer/render_indexer_item.cpp b/frameworks/core/components/indexer/render_indexer_item.cpp new file mode 100644 index 00000000..afe78e0b --- /dev/null +++ b/frameworks/core/components/indexer/render_indexer_item.cpp @@ -0,0 +1,289 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/indexer/render_indexer_item.h" + +#include "core/components/focus_animation/render_focus_animation.h" +#include "core/components/indexer/render_indexer_circle.h" +#include "core/components/indexer/render_indexer_list.h" +#include "core/components/text/render_text.h" + +namespace OHOS::Ace { +namespace { + +constexpr double ITEM_TEXT_SIZE_FACTOR = 0.7; +constexpr int32_t HOVER_ANIMATION_DURATION = 250; + +} // namespace + +RefPtr RenderIndexerItem::Create() +{ + return AceType::MakeRefPtr(); +} + +void RenderIndexerItem::Update(const RefPtr& component) +{ + LOGD("[indexer] Update RenderIndexerItem"); + RefPtr itemComponent = AceType::DynamicCast(component); + if (itemComponent) { + sectionIndex_ = itemComponent->GetSectionIndex(); + keyCount_ = itemComponent->GetKeyCount(); + textComponent_ = itemComponent->GetTextComponent(); + normalStyle_ = itemComponent->GetNormalTextStyle(); + activeStyle_ = itemComponent->GetActiveTextStyle(); + auto context = context_.Upgrade(); + currentTextSize_ = + context ? context->NormalizeToPx(normalStyle_.GetFontSize()) : normalStyle_.GetFontSize().Value(); + defaultTextSize_ = currentTextSize_; + circleMode_ = itemComponent->GetCircleMode(); + rotate_ = itemComponent->GetRotateFlag(); + strText_ = itemComponent->GetSectionStr(); + itemType_ = itemComponent->GetItemType(); + isPrimary_ = itemComponent->IsItemPrimary(); + LOGI("[indexer] Update sectionIndex:%d, Keycount:%d, circleMode:%d", sectionIndex_, keyCount_, circleMode_); + } +} + +void RenderIndexerItem::PerformLayout() +{ + if (GetChildren().empty()) { + LOGE("RenderIndexerItem: no child found in RenderIndexerItem!"); + return; + } + + RefPtr box; + if (!rotate_) { + box = AceType::DynamicCast(GetChildren().front()); + } else { + RefPtr transform = GetChildren().front(); + if (transform && !transform->GetChildren().empty()) { + box = AceType::DynamicCast(transform->GetChildren().front()); + } + } + if (!box) { + LOGE("[indexer] Get Box failed."); + return; + } + RefPtr text; + if (!box->GetChildren().empty()) { + text = AceType::DynamicCast(box->GetChildren().front()); + } + + if (text) { + double textSizeMax = GetLayoutParam().GetMaxSize().Height() * ITEM_TEXT_SIZE_FACTOR; + if (GreatNotEqual(currentTextSize_, textSizeMax)) { + currentTextSize_ = textSizeMax; + } else { + currentTextSize_ = defaultTextSize_; + } + normalStyle_.SetFontSize(Dimension(currentTextSize_)); + activeStyle_.SetFontSize(Dimension(currentTextSize_)); + + UpdateItemStyle(); + } + auto child = GetChildren().front(); + if (child) { + child->Layout(GetLayoutParam()); + child->SetPosition(Offset::Zero()); + SetLayoutSize(child->GetLayoutSize()); + } else { + SetLayoutSize(Size()); + } + + SetRotate(rotateAngle_); +} + +void RenderIndexerItem::UpdateItemBackground(const Color& color) +{ + if (!IsBackgroundColorEnabled() || GetChildren().empty()) { + return; + } + + RefPtr box = AceType::DynamicCast(GetChildren().front()); + if (box && circleMode_) { + box->SetColor(color, true); + } +} + +bool RenderIndexerItem::MouseHoverTest(const Point& parentLocalPoint) +{ + auto parent = GetParent().Upgrade(); + if (!parent || !AceType::DynamicCast(parent)) { + return RenderNode::MouseHoverTest(parentLocalPoint); + } + auto context = context_.Upgrade(); + if (!context) { + return false; + } + if (parent->GetTouchRect().IsInRegion(parentLocalPoint)) { + if (mouseState_ == MouseState::NONE) { + OnMouseHoverEnterTest(); + mouseState_ = MouseState::HOVER; + } + context->AddToHoverList(AceType::WeakClaim(this).Upgrade()); + return true; + } else { + if (mouseState_ == MouseState::HOVER) { + OnMouseHoverExitTest(); + mouseState_ = MouseState::NONE; + } + return false; + } +} + +void RenderIndexerItem::OnMouseHoverEnterTest() +{ + if (!clicked_) { + ResetController(controllerExit_); + if (!controllerEnter_) { + controllerEnter_ = AceType::MakeRefPtr(context_); + } + colorAnimationEnter_ = AceType::MakeRefPtr>(); + colorAnimationEnter_->SetEvaluator(AceType::MakeRefPtr()); + CreateColorAnimation(colorAnimationEnter_, Color::TRANSPARENT, Color::FromString("#0C000000")); + colorAnimationEnter_->SetCurve(Curves::FRICTION); + StartHoverAnimation(controllerEnter_, colorAnimationEnter_); + } +} + +void RenderIndexerItem::OnMouseHoverExitTest() +{ + if (!clicked_) { + ResetController(controllerEnter_); + if (!controllerExit_) { + controllerExit_ = AceType::MakeRefPtr(context_); + } + colorAnimationExit_ = AceType::MakeRefPtr>(); + colorAnimationExit_->SetEvaluator(AceType::MakeRefPtr()); + RefPtr box = AceType::DynamicCast(GetChildren().front()); + if (!box) { + return; + } + auto currentColor = box->GetColor(); + CreateColorAnimation(colorAnimationExit_, currentColor, Color::TRANSPARENT); + if (currentColor == Color::FromString("#0C000000")) { + colorAnimationExit_->SetCurve(Curves::FRICTION); + } else { + colorAnimationExit_->SetCurve(Curves::FAST_OUT_SLOW_IN); + } + StartHoverAnimation(controllerExit_, colorAnimationExit_); + } +} + +void RenderIndexerItem::StartHoverAnimation(RefPtr controller, + RefPtr>& colorAnimation) +{ + if (!controller || !colorAnimation) { + return; + } + controller->ClearInterpolators(); + controller->AddInterpolator(colorAnimation); + controller->SetDuration(HOVER_ANIMATION_DURATION); + controller->SetFillMode(FillMode::FORWARDS); + controller->Play(); +} + +void RenderIndexerItem::CreateColorAnimation( + RefPtr>& colorAnimation, const Color& beginValue, const Color& endValue) +{ + if (!colorAnimation) { + return; + } + auto keyframeBegin = AceType::MakeRefPtr>(0.0, beginValue); + auto keyframeEnd = AceType::MakeRefPtr>(1.0, endValue); + colorAnimation->AddKeyframe(keyframeBegin); + colorAnimation->AddKeyframe(keyframeEnd); + RefPtr box = AceType::DynamicCast(GetChildren().front()); + if (!box) { + return; + } + auto weakBox = WeakClaim(RawPtr(box)); + colorAnimation->AddListener([weakBox](const Color& value) { + auto box = weakBox.Upgrade(); + if (box) { + box->SetColor(value, true); + box->MarkNeedRender(); + } + }); +} + +void RenderIndexerItem::ResetController(RefPtr& controller) +{ + if (controller) { + if (!controller->IsStopped()) { + controller->Stop(); + } + controller->ClearInterpolators(); + } +} + +bool RenderIndexerItem::IsBackgroundColorEnabled() +{ + auto parent = GetParent().Upgrade(); + while (parent) { + if (AceType::InstanceOf(parent)) { + auto indexer = AceType::DynamicCast(parent); + if (indexer) { + return indexer->IsItemColorEnabled(); + } + } + parent = parent->GetParent().Upgrade(); + } + return true; +} + +void RenderIndexerItem::UpdateItemStyle() +{ + if (isAnimating_) { + return; + } + + RefPtr box = AceType::DynamicCast(GetChildren().front()); + if (!box) { + LOGE("[indexer] Box is null."); + return; + } + RefPtr text = AceType::DynamicCast(box->GetChildren().front()); + if (!text || !textComponent_) { + LOGE("[indexer] Text is null."); + return; + } + auto context = context_.Upgrade(); + if (!context) { + LOGE("Pipeline context upgrade fail!"); + return; + } + if (!context->GetRenderFocusAnimation()) { + LOGE("focusAnimation is null!"); + return; + } + if (clicked_ || focused_) { + if (circleMode_ && IsBackgroundColorEnabled()) { + box->SetColor(Color(INDEXER_CIRCLE_ACTIVE_BG_COLOR), true); + } else { + box->SetColor(Color(INDEXER_ACTIVE_BG_COLOR), true); + } + if (focused_) { + box->SetColor(Color(INDEXER_ACTIVE_BG_COLOR), true); + } + textComponent_->SetTextStyle(activeStyle_); + } else { + box->SetColor(Color::TRANSPARENT, true); + textComponent_->SetTextStyle(normalStyle_); + } + text->Update(textComponent_); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/indexer/render_indexer_item.h b/frameworks/core/components/indexer/render_indexer_item.h new file mode 100644 index 00000000..58b89577 --- /dev/null +++ b/frameworks/core/components/indexer/render_indexer_item.h @@ -0,0 +1,157 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_INDEXER_RENDER_INDEXER_ITEM_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_INDEXER_RENDER_INDEXER_ITEM_H + +#include "base/utils/string_utils.h" +#include "core/animation/animator.h" +#include "core/animation/keyframe_animation.h" +#include "core/components/box/render_box.h" +#include "core/components/text/text_component.h" +#include "core/components/transform/render_transform.h" + +namespace OHOS::Ace { + +class RenderIndexerItem : public RenderNode { + DECLARE_ACE_TYPE(RenderIndexerItem, RenderNode); + +public: + static RefPtr Create(); + void Update(const RefPtr& component) override; + void PerformLayout() override; + void UpdateItemBackground(const Color& color); + void UpdateItemStyle(); + + bool IsBackgroundColorEnabled(); + + void MarkItemInAnimation(bool inAnimation = true) + { + isAnimating_ = inAnimation; + } + + int32_t GetItemType() const + { + return itemType_; + } + + bool IsItemPrimary() const + { + return isPrimary_; + } + + const std::string GetSectionText() const + { + return StringUtils::Str16ToStr8(strText_); + } + + int32_t GetSectionIndex() const + { + return sectionIndex_; + } + + void SetSectionIndex(int32_t index) + { + sectionIndex_ = index; + } + + uint32_t GetKeyCount() const + { + return keyCount_; + } + + void SetKeyCount(uint32_t keyCount) + { + keyCount_ = keyCount; + } + + bool GetClicked() const + { + return clicked_; + } + + void SetFocused(bool getFocus) + { + focused_ = getFocus; + UpdateItemStyle(); + } + + void SetClicked(bool clicked) + { + LOGD("[indexer] SetClicked clicked:%d", clicked); + bool preClicked = clicked_; + clicked_ = (clicked && keyCount_ > 0); + if (clicked_ != preClicked) { + UpdateItemStyle(); + } + } + + void SetRotate(double angle) + { + RefPtr rotate = AceType::DynamicCast(GetChildren().front()); + if (rotate) { + rotateAngle_ = angle; + rotate->ResetTransform(); + rotate->RotateZ(angle); + } + } + + const TextStyle& GetNormalTextStyle() const + { + return normalStyle_; + } + + const TextStyle& GetActiveTextStyle() const + { + return activeStyle_; + } + +protected: + bool MouseHoverTest(const Point& parentLocalPoint) override; + void OnMouseHoverEnterTest() override; + void OnMouseHoverExitTest() override; + +private: + void StartHoverAnimation(RefPtr controller, + RefPtr>& colorAnimation); + void ResetController(RefPtr& controller); + void CreateColorAnimation(RefPtr>& colorAnimation, const Color& beginValue, + const Color& endValue); + + bool clicked_ = false; + bool focused_ = false; + int32_t itemType_ = 0; + int32_t sectionIndex_ = 0; + uint32_t keyCount_ = 0; + RefPtr textComponent_; + RefPtr controllerEnter_; + RefPtr controllerExit_; + RefPtr> colorAnimationEnter_; + RefPtr> colorAnimationExit_; + TextStyle normalStyle_; + TextStyle activeStyle_; + double currentTextSize_ = 0.0; + double defaultTextSize_ = 0.0; + bool circleMode_ = true; + bool rotate_ = false; + bool isPrimary_ = false; + bool isAnimating_ = false; + double rotateAngle_ = 0.0; + std::u16string strText_; +}; // class RenderIndexerItem + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_INDEXER_RENDER_INDEXER_ITEM_H diff --git a/frameworks/core/components/indexer/render_indexer_list.cpp b/frameworks/core/components/indexer/render_indexer_list.cpp new file mode 100644 index 00000000..05272070 --- /dev/null +++ b/frameworks/core/components/indexer/render_indexer_list.cpp @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/indexer/render_indexer_list.h" + +#include "core/components/indexer/indexer_list_component.h" + +namespace OHOS::Ace { + +RefPtr RenderIndexerList::Create() +{ + LOGD("[indexer] Create RenderIndexerList"); + return AceType::MakeRefPtr(); +} + +void RenderIndexerList::Update(const RefPtr& component) +{ + LOGI("[indexer] Update RenderIndexerList"); + RefPtr itemComponent = AceType::DynamicCast(component); + if (!itemComponent) { + LOGE("[indexer] IndexerListComponent is null"); + } +} + +void RenderIndexerList::PerformLayout() +{ + LOGD("[indexer] PerformLayout RenderIndexerList"); + if (GetChildren().empty()) { + LOGE("RenderIndexerList: no child found in RenderIndexerList!"); + } else { + auto child = GetChildren().front(); + child->Layout(GetLayoutParam()); + child->SetPosition(Offset::Zero()); + SetLayoutSize(child->GetLayoutSize()); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/indexer/render_indexer_list.h b/frameworks/core/components/indexer/render_indexer_list.h new file mode 100644 index 00000000..5a82d0d0 --- /dev/null +++ b/frameworks/core/components/indexer/render_indexer_list.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_INDEXER_RENDER_INDEXER_LIST_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_INDEXER_RENDER_INDEXER_LIST_H + +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderIndexerList : public RenderNode { + DECLARE_ACE_TYPE(RenderIndexerList, RenderNode); + +public: + static RefPtr Create(); + void Update(const RefPtr& component) override; + void PerformLayout() override; + +}; // class RenderBox + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_INDEXER_RENDER_INDEXER_LIST_H diff --git a/frameworks/core/components/list/BUILD.gn b/frameworks/core/components/list/BUILD.gn new file mode 100644 index 00000000..a9cbaabe --- /dev/null +++ b/frameworks/core/components/list/BUILD.gn @@ -0,0 +1,41 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("list") { + sources = [ + "flutter_render_list.cpp", + "flutter_render_list_item.cpp", + "flutter_render_list_item_group.cpp", + "grid_layout_manager.cpp", + "interactive_effect.cpp", + "layout_manager.cpp", + "list_component.cpp", + "list_element.cpp", + "list_item_component.cpp", + "list_item_element.cpp", + "list_item_group_component.cpp", + "list_item_group_element.cpp", + "list_layout_manager.cpp", + "list_watch_layout_manager.cpp", + "render_list.cpp", + "render_list_item.cpp", + "render_list_item_group.cpp", + "tv_interactive_effect.cpp", + ] + + if (is_wearable_product) { + sources += [ "watch_interactive_effect.cpp" ] + } +} diff --git a/frameworks/core/components/list/flutter_render_list.cpp b/frameworks/core/components/list/flutter_render_list.cpp new file mode 100644 index 00000000..415b1067 --- /dev/null +++ b/frameworks/core/components/list/flutter_render_list.cpp @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/list/flutter_render_list.h" + +#include "core/pipeline/base/flutter_render_context.h" + +namespace OHOS::Ace { + +using namespace Flutter; + +RefPtr RenderList::Create() +{ + return AceType::MakeRefPtr(); +} + +RenderLayer FlutterRenderList::GetRenderLayer() +{ + if (!layer_) { + layer_ = + AceType::MakeRefPtr(0, GetLayoutSize().Width(), 0, GetLayoutSize().Height(), Clip::HARD_EDGE); + } + return AceType::RawPtr(layer_); +} + +void FlutterRenderList::Paint(RenderContext& context, const Offset& offset) +{ + if (makeCardTransition_) { + auto pipelineContext = context_.Upgrade(); + if (!pipelineContext) { + layer_->SetClip(0.0, viewPort_.Width(), 0.0, viewPort_.Height(), Clip::HARD_EDGE); + } else { + layer_->SetClip(-GetGlobalOffset().GetX(), pipelineContext->GetRootWidth(), -shiftHeight_, + viewPort_.Height() + shiftHeight_, Clip::HARD_EDGE); + } + } else { + layer_->SetClip(0.0, viewPort_.Width(), 0.0, viewPort_.Height(), Clip::HARD_EDGE); + } + RenderNode::Paint(context, offset); + PaintStickyItem(context, offset); +} + +void FlutterRenderList::PaintChild(const RefPtr& child, RenderContext& context, const Offset& offset) +{ + // sticky items paint individually by PaintStickyItem + RefPtr listItem = RenderListItem::GetRenderListItem(child); + if (!listItem->GetClonedBySticky() && listItem->GetVisible()) { + context.PaintChild(child, offset); + } +} + +void FlutterRenderList::PaintStickyItem(RenderContext& context, const Offset& offset) +{ + bool watchMode = SystemProperties::GetDeviceType() == DeviceType::WATCH; + RefPtr stickyItem = GetStickyItem(); + if (stickyItem) { + RefPtr listItem = RenderListItem::GetRenderListItem(stickyItem); + if (listItem && listItem->GetSticky()) { + listItem->SetVisible(true); + listItem->SetRedraw(watchMode); + listItem->SetPosition(offset + GetStickyItemOffset()); + listItem->Paint(context, offset + GetStickyItemOffset()); + listItem->SetRedraw(false); + } + if (!watchMode) { + return; + } + RefPtr stickyNext = GetStickyNext(); + if (stickyNext) { + RefPtr listItemNext = RenderListItem::GetRenderListItem(stickyNext); + if (listItemNext) { + if (listItem && listItem->GetStickyMode() == StickyMode::OPACITY) { + listItemNext->SetNearByOpacitySticky(true); + } else { + listItemNext->SetNearByOpacitySticky(false); + } + listItemNext->SetVisible(true); + listItemNext->SetRedraw(watchMode); + listItemNext->SetPosition(Offset()); + listItemNext->Paint(context, offset + GetStickyNextOffset()); + listItemNext->SetRedraw(false); + } + } + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/list/flutter_render_list.h b/frameworks/core/components/list/flutter_render_list.h new file mode 100644 index 00000000..3126a330 --- /dev/null +++ b/frameworks/core/components/list/flutter_render_list.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_FLUTTER_RENDER_LIST_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_FLUTTER_RENDER_LIST_H + +#include "core/components/list/render_list.h" +#include "core/pipeline/layers/clip_layer.h" + +namespace OHOS::Ace { + +class FlutterRenderList : public RenderList { + DECLARE_ACE_TYPE(FlutterRenderList, RenderList); + +public: + FlutterRenderList() = default; + ~FlutterRenderList() override = default; + + RenderLayer GetRenderLayer() override; + void Paint(RenderContext& context, const Offset& offset) override; + void PaintChild(const RefPtr& child, RenderContext& context, const Offset& offset) override; + void PaintStickyItem(RenderContext& context, const Offset& offset); + + bool IsRepaintBoundary() const override + { + return true; + } + +private: + RefPtr layer_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_FLUTTER_RENDER_LIST_H diff --git a/frameworks/core/components/list/flutter_render_list_item.cpp b/frameworks/core/components/list/flutter_render_list_item.cpp new file mode 100644 index 00000000..87a88800 --- /dev/null +++ b/frameworks/core/components/list/flutter_render_list_item.cpp @@ -0,0 +1,442 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/list/flutter_render_list_item.h" + +#include +#include + +#include "core/components/common/painter/flutter_decoration_painter.h" +#include "core/components/common/painter/flutter_universal_painter.h" +#include "core/components/transform/flutter_render_transform.h" +#include "core/pipeline/base/flutter_render_context.h" + +namespace OHOS::Ace { +namespace { + +constexpr uint8_t GREY_START = 255; +constexpr uint8_t GREY_END = 38; +constexpr uint8_t DISABLED_OPACITY = 102; +constexpr uint32_t ACTIVE_BACKGROUND_COLOR = 0x330A59F7; +constexpr double CENTER_POINT = 2.0; +constexpr double OPACITY_START = 0.0; +constexpr double OPACITY_END = 0.6; +constexpr double HALF_SIZE = 0.5; +constexpr double FADE_START = 1.0; +constexpr double FADE_END = 0.0; +constexpr double SCALE_START = 1.0; +constexpr double SCALE_END = 0.1; + +} // namespace + +using namespace Flutter; + +RefPtr RenderListItem::Create() +{ + return AceType::MakeRefPtr(); +} + +RenderLayer FlutterRenderListItem::GetRenderLayer() +{ + if (!transformLayer_) { + transformLayer_ = AceType::MakeRefPtr(Matrix4::CreateIdentity(), 0.0, 0.0); + } + return AceType::RawPtr(transformLayer_); +} + +void FlutterRenderListItem::Paint(RenderContext& context, const Offset& offset) +{ + if (GetRedraw()) { + PaintStickyEffectNoTransparent(context, offset); + return; + } + if (focusController_ && !isStretch_) { + PaintWithFocusEffect(context, offset); + } else { + // restore layer + if (transformLayer_) { + transformLayer_->Update(Matrix4::CreateIdentity()); + } + // restore opacity + if (!renderDisplay_) { + auto children = GetChildren(); + if (!children.empty()) { + renderDisplay_ = AceType::DynamicCast(children.front()); + } + } + if (renderDisplay_ && !makeCardTransition_) { + if (disabled_) { + renderDisplay_->UpdateOpacity(DISABLED_OPACITY); + } else if (isStretch_) { + renderDisplay_->UpdateOpacity(expandOpacity_); + } else { + renderDisplay_->UpdateOpacity(DEFAULT_OPACITY); + } + } + RenderNode::Paint(context, offset); + } + if (isActive_) { + PaintActiveBackground(context, offset); + } + PaintItemDivider(context); +} + +void FlutterRenderListItem::OnPaintFinish() +{ +#if defined(WINDOWS_PLATFORM) || defined(MAC_PLATFORM) + auto accessibilityNode = GetAccessibilityNode().Upgrade(); + if (!accessibilityNode) { + LOGE("FlutterRenderListItem::accessibilityNode is null"); + return; + } + if (!NearEqual(scale_, 1.0)) { + Size size = GetLayoutSize(); + Offset globalOffset = GetGlobalOffset(); + Offset scaleCenter = Offset(globalOffset.GetX() + size.Width() / 2.0, + globalOffset.GetY() + size.Height() / 2.0); + size = size * scale_; + accessibilityNode->SetScaleToChild(scale_); + accessibilityNode->SetScaleCenterToChild(scaleCenter); + globalOffset = Offset(size.Width() * (1 - scale_) / 2.0 + globalOffset.GetX(), + size.Height() * (1 - scale_) / 2.0 + globalOffset.GetY()); + for (const auto& item : GetChildren()) { + item->NotifyPaintFinish(); + } + } +#endif + if (!IsFocused()) { + return; + } + UpdateItemFocusRect(scale_); + ShowFocusAnimation(IsFocused(), Rect(0.0, 0.0, 0.0, 0.0), scale_); +} + +void FlutterRenderListItem::OnGlobalPositionChanged() +{ + if (focusController_ && !isStretch_) { + UpdateTransformLayer(); + } + RenderListItem::OnGlobalPositionChanged(); +} + +void FlutterRenderListItem::UpdateTransformLayer() +{ + float translateX = GetLayoutSize().Width() * HALF_SIZE * (DEFAULT_SCALE - scale_); + float translateY = GetLayoutSize().Height() * HALF_SIZE * (DEFAULT_SCALE - scale_); + Matrix4 translateMatrix = Matrix4::CreateTranslate(translateX, translateY, 0.0); + Matrix4 scaleMatrix = Matrix4::CreateScale(scale_, scale_, 1.0); + Matrix4 transform = translateMatrix * scaleMatrix; + auto offset = GetGlobalOffset(); + transform = FlutterRenderTransform::GetTransformByOffset(transform, offset); + + if (!transformLayer_) { + transformLayer_ = AceType::MakeRefPtr(transform, 0.0, 0.0); + } else { + transformLayer_->Update(transform); + } +} + +void FlutterRenderListItem::PaintActiveBackground(RenderContext& context, const Offset& offset) +{ + PaintUniversalBackground(context, offset, ACTIVE_BACKGROUND_COLOR); +} + +void FlutterRenderListItem::PaintUniversalBackground(RenderContext& context, const Offset& offset, uint32_t colorVal) +{ + const auto renderContext = static_cast(&context); + flutter::Canvas* canvas = renderContext->GetCanvas(); + if (canvas == nullptr) { + LOGE("Paint canvas is null"); + return; + } + SkCanvas* skCanvas = canvas->canvas(); + if (skCanvas == nullptr) { + LOGE("Paint skCanvas is null"); + return; + } + auto size = GetPaintSize(); + auto margin = GetMarginInPx(); + auto backgroundOffset = offset + margin.GetOffset(); + RRect paintRRect = RRect::MakeRect(Rect(backgroundOffset, size)); + paintRRect.SetCorner(focusAnimationRRect_.GetCorner()); + double dipScale = 1.0; + auto pipelineContext = GetContext().Upgrade(); + if (pipelineContext) { + dipScale = pipelineContext->GetDipScale(); + } + FlutterUniversalPainter::DrawRRectBackground(skCanvas, paintRRect, colorVal, dipScale); +} + +void FlutterRenderListItem::PaintWithFocusEffect(RenderContext& context, const Offset& offset) +{ + if (focusController_) { + if (SystemProperties::GetDeviceType() == DeviceType::WATCH) { + if (supportScale_) { + scale_ = GetScaleFactor(); + } + if (supportOpacity_) { + opacity_ = static_cast(std::round(GetOpacityFactor() * DEFAULT_OPACITY)); + } + } else { + scale_ = focusController_->GetScale(); + opacity_ = static_cast(std::round(focusController_->GetOpacity() * DEFAULT_OPACITY)); + } + decorationAlpha_ = focusController_->GetAlpha(); + } + + if (supportOpacity_) { + if (!renderDisplay_) { + auto children = GetChildren(); + if (!children.empty()) { + renderDisplay_ = AceType::DynamicCast(children.front()); + } + } + if (renderDisplay_ && !makeCardTransition_) { + if (disabled_) { + renderDisplay_->UpdateOpacity(DISABLED_OPACITY); + } else { + renderDisplay_->UpdateOpacity(opacity_); + } + } + } + + UpdateTransformLayer(); + RenderNode::Paint(context, offset); + + // paint front decoration + if (!NearZero(decorationAlpha_) && !makeCardTransition_) { + auto decorationColor = Color::BLACK; + auto itemTheme = GetTheme(); + if (itemTheme) { + decorationColor = itemTheme->GetClickColor(); + } + auto frontDecoration = AceType::MakeRefPtr(); + frontDecoration->SetBackgroundColor(decorationColor.BlendOpacity(decorationAlpha_)); + + auto pipelineContext = GetContext().Upgrade(); + Border border = GetFocusBorder(); + Corner corner = GetRRect().GetCorner(); + border.SetTopLeftRadius(corner.topLeftRadius); + border.SetTopRightRadius(corner.topRightRadius); + border.SetBottomLeftRadius(corner.bottomLeftRadius); + border.SetBottomRightRadius(corner.bottomRightRadius); + frontDecoration->SetBorder(border); + RefPtr decorationPainter = + AceType::MakeRefPtr(frontDecoration, GetPaintRect(), GetPaintSize(), + pipelineContext ? pipelineContext->GetDipScale() : 1.0); + decorationPainter->SetMargin(GetMarginInPx()); + const auto renderContext = static_cast(&context); + flutter::Canvas* canvas = renderContext->GetCanvas(); + decorationPainter->PaintDecoration(offset, canvas->canvas(), context); + } +} + +void FlutterRenderListItem::PaintItemDivider(RenderContext& context) +{ + if (!NeedDivider() || NearZero(dividerHeight_.Value())) { + return; + } + + Offset position = GetPosition(); + Size layoutSize = GetLayoutSize(); + bool isVertical = IsListVertical(); + double dividerWidth = NormalizeToPx(dividerHeight_); + + // calculate item size exclude divider + double width = isVertical ? layoutSize.Width() : layoutSize.Width() - dividerWidth; + double height = isVertical ? layoutSize.Height() - dividerWidth : layoutSize.Height(); + + // calculate start point + auto startOrigin = NormalizeToPx(dividerOrigin_); + double startPointOffset = isVertical ? std::min(startOrigin, width) : std::min(startOrigin, height); + double startPointX = isVertical ? position.GetX() + startPointOffset : position.GetX() + width; + double startPointY = isVertical ? position.GetY() + height : position.GetY() + startPointOffset; + + // calculate end point + double length = NormalizeToPx(dividerLength_); + if (NearZero(length)) { + length = isVertical ? width : height; + } + double endPointX = isVertical ? position.GetX() + std::min(width, startOrigin + length) : startPointX; + double endPointY = isVertical ? startPointY : position.GetY() + std::min(height, startOrigin + length); + + flutter::Paint paint; + flutter::PaintData paintData; + paint.paint()->setStrokeWidth(dividerWidth); + paint.paint()->setColor(dividerColor_.GetValue()); + + const auto renderContext = static_cast(&context); + flutter::Canvas* canvas = renderContext->GetCanvas(); + if (isVertical) { + canvas->drawLine(startPointX, startPointY + dividerWidth / 2.0, + endPointX, endPointY + dividerWidth / 2.0, paint, paintData); + } else { + canvas->drawLine(startPointX + dividerWidth / 2.0, startPointY, + endPointX + dividerWidth / 2.0, endPointY, paint, paintData); + } +} + +void FlutterRenderListItem::PaintStickyEffect(RenderContext& context, const Offset& offset) +{ + RenderNode::Paint(context, offset); + const auto renderContext = static_cast(&context); + flutter::Canvas* canvas = renderContext->GetCanvas(); + if (canvas == nullptr) { + LOGE("Canvas is null, save failed."); + return; + } + canvas->save(); + Offset center; + flutter::Paint paint; + flutter::PaintData paintData; + double width = GetLayoutSize().Width() + offset.GetX(); + double height = GetLayoutSize().Height() + offset.GetY(); + if (offset.GetY() <= 0.0) { + center.SetX((GetLayoutSize().Width() + offset.GetX()) / CENTER_POINT); + center.SetY(GetLayoutSize().Height() + offset.GetY() - GetStickyRadius()); + paint.paint()->setColor(Color::FromRGBO(GREY_END, GREY_END, GREY_END, OPACITY_END).GetValue()); + canvas->clipRect(0, 0, width, height, SkClipOp::kIntersect); + canvas->drawCircle(center.GetX(), center.GetY(), GetStickyRadius(), paint, paintData); + } else { + double radius = + GetStickyRadius() + (RADIUS_START - GetStickyRadius()) * (offset.GetY() / GetLayoutSize().Height()); + uint8_t grey = GREY_END + (GREY_START - GREY_END) * (offset.GetY() / GetLayoutSize().Height()); + double opacity = OPACITY_END + (OPACITY_START - OPACITY_END) * (offset.GetY() / GetLayoutSize().Height()); + center.SetX((GetLayoutSize().Width() + offset.GetX()) / CENTER_POINT); + center.SetY(GetLayoutSize().Height() + offset.GetY() - radius); + paint.paint()->setColor(Color::FromRGBO(grey, grey, grey, opacity).GetValue()); + canvas->clipRect(offset.GetX(), offset.GetY(), width, height, SkClipOp::kIntersect); + canvas->drawCircle(center.GetX(), center.GetY(), radius, paint, paintData); + } + canvas->restore(); +} + +void FlutterRenderListItem::PaintStickyEffectNoTransparent(RenderContext& context, const Offset& offset) +{ + Size itemSize = GetLayoutSize(); + if (NearZero(itemSize.Height()) || NearZero(itemSize.Width())) { + return; + } + RefPtr box = nullptr; + RefPtr childNode = GetChildren().front(); + while (childNode) { + box = AceType::DynamicCast(childNode); + if (box || childNode->GetChildren().empty()) { + break; + } + childNode = childNode->GetChildren().front(); + } + + LOGD("[indexer] offset:%{public}lf %{public}s", offset.GetY(), itemSize.ToString().c_str()); + if (box) { + RefPtr background = AceType::MakeRefPtr(); + auto backgroundOld = box->GetBackDecoration(); + if (offset.GetY() > 0.0) { // Next Sticky item. + PaintNextSticky(background, offset); + } else { // Current Sticky item. + PaintCurrentSticky(background, offset); + PaintFadeOutEffect(box, offset); + } + box->SetBackDecoration(background); + RenderNode::Paint(context, offset); + // reset background + box->SetBackDecoration(backgroundOld); + } else { + RenderNode::Paint(context, offset); + } +} + +void FlutterRenderListItem::PaintCurrentSticky(const RefPtr& background, const Offset& offset) +{ + Size itemSize = GetLayoutSize(); + double mainOffset = offset.GetY(); + uint8_t gray = GREY_END; + Color color = Color::FromRGB(gray, gray, gray); + double radius = GetStickyRadius(); + if (GetStickyMode() != StickyMode::OPACITY) { + Point center; + center.SetX((itemSize.Width() + offset.GetX()) / CENTER_POINT); + center.SetY(itemSize.Height() + offset.GetY() - radius); + RefPtr arcBg = AceType::MakeRefPtr(center, radius); + arcBg->SetColor(color); + background->SetArcBackground(arcBg); + gray *= (-mainOffset) / itemSize.Height(); + } + if (offset.GetY() < 0.0 || GetStickyMode() == StickyMode::OPACITY) { + color = Color::FromRGB(gray, gray, gray); + background->SetBackgroundColor(color); + } +} + +void FlutterRenderListItem::PaintNextSticky(const RefPtr& background, const Offset& offset) +{ + Size itemSize = GetLayoutSize(); + double mainOffset = offset.GetY(); + double radius = GetStickyRadius(); + // calculate radius + if (GetNearByOpacitySticky()) { + mainOffset = 0.0; // Make the background same as current sticky item. + } else { + mainOffset = std::clamp(mainOffset, 0.0, itemSize.Height()); + } + radius = radius + (RADIUS_START - radius) * pow(mainOffset / itemSize.Height(), 3.0); + + // calculate color + uint8_t gray = GREY_END * (itemSize.Height() - mainOffset) / itemSize.Height(); + Color color = Color::FromRGB(gray, gray, gray); + + // calculate center + Point center; + center.SetX((itemSize.Width() + offset.GetX()) / CENTER_POINT); + center.SetY(itemSize.Height() + offset.GetY() - radius); + RefPtr arcBg = AceType::MakeRefPtr(center, radius); + arcBg->SetColor(color); + background->SetArcBackground(arcBg); +} + +void FlutterRenderListItem::PaintFadeOutEffect(const RefPtr& node, const Offset& offset) +{ + if (stickyMode_ != StickyMode::OPACITY || !node || node->GetChildren().empty()) { + return; + } + auto opacityNode = AceType::DynamicCast(node->GetChildren().front()); + if (!opacityNode || opacityNode->GetChildren().empty()) { + return; + } + auto scaleNode = AceType::DynamicCast(opacityNode->GetChildren().front()); + if (!scaleNode || scaleNode->GetChildren().empty()) { + return; + } + double height = GetLayoutSize().Height() / 2; + double mainOffset = std::abs(offset.GetY()); + double opacity = std::max(FADE_END, FADE_START - mainOffset / height) * 255.0; + double scale = SCALE_START - (std::min(SCALE_START, mainOffset / height) * SCALE_END); + if (!makeCardTransition_) { + opacityNode->UpdateOpacity(opacity); + } + scaleNode->ResetTransform(); + scaleNode->Scale(scale); + LOGD("Sticky opacity:%lf scale:%lf %s", opacity, scale, offset.ToString().c_str()); +} + +bool FlutterRenderListItem::HasEffectiveTransform() const +{ + if (!transformLayer_) { + return false; + } + return !transformLayer_->GetMatrix4().IsIdentityMatrix(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/list/flutter_render_list_item.h b/frameworks/core/components/list/flutter_render_list_item.h new file mode 100644 index 00000000..11bdd6bd --- /dev/null +++ b/frameworks/core/components/list/flutter_render_list_item.h @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_FLUTTER_RENDER_LIST_ITEM_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_FLUTTER_RENDER_LIST_ITEM_H + +#include "core/components/box/render_box.h" +#include "core/components/list/render_list_item.h" +#include "core/pipeline/layers/opacity_layer.h" +#include "core/pipeline/layers/transform_layer.h" + +namespace flutter { +class Canvas; +class Paint; +class PaintData; +} + +namespace OHOS::Ace { + +const uint8_t DEFAULT_OPACITY = 255; + +class FlutterRenderListItem : public RenderListItem { + DECLARE_ACE_TYPE(FlutterRenderListItem, RenderListItem); + +public: + FlutterRenderListItem() = default; + ~FlutterRenderListItem() override = default; + + RenderLayer GetRenderLayer() override; + void Paint(RenderContext& context, const Offset& offset) override; + void OnGlobalPositionChanged() override; + void OnPaintFinish() override; + bool IsRepaintBoundary() const override + { + // Sticky item is specially paint in render list. + return !GetSticky(); + } + + bool HasEffectiveTransform() const override; + +private: + void PaintWithFocusEffect(RenderContext& context, const Offset& offset); + void PaintStickyEffect(RenderContext& context, const Offset& offset); + void PaintStickyEffectNoTransparent(RenderContext& context, const Offset& offset); + void PaintCurrentSticky(const RefPtr& background, const Offset& offset); + void PaintNextSticky(const RefPtr& background, const Offset& offset); + void PaintFadeOutEffect(const RefPtr& node, const Offset& offset); + void UpdateTransformLayer(); + void PaintItemDivider(RenderContext& context); + void PaintActiveBackground(RenderContext& context, const Offset& offset); + void PaintUniversalBackground(RenderContext& context, const Offset& offset, uint32_t colorVal); + + RefPtr transformLayer_; + double scale_ = 1.0; + uint8_t opacity_ = DEFAULT_OPACITY; + double decorationAlpha_ = 0.0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_FLUTTER_RENDER_LIST_ITEM_H diff --git a/frameworks/core/components/list/flutter_render_list_item_group.cpp b/frameworks/core/components/list/flutter_render_list_item_group.cpp new file mode 100644 index 00000000..dbe7bbe1 --- /dev/null +++ b/frameworks/core/components/list/flutter_render_list_item_group.cpp @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/list/flutter_render_list_item_group.h" + +namespace OHOS::Ace { + +RefPtr RenderListItemGroup::Create() +{ + return AceType::MakeRefPtr(); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/list/flutter_render_list_item_group.h b/frameworks/core/components/list/flutter_render_list_item_group.h new file mode 100644 index 00000000..cb4fb73b --- /dev/null +++ b/frameworks/core/components/list/flutter_render_list_item_group.h @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_FLUTTER_RENDER_LIST_ITEM_GROUP_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_FLUTTER_RENDER_LIST_ITEM_GROUP_H + +#include "core/components/list/render_list_item_group.h" + +namespace OHOS::Ace { + +class FlutterRenderListItemGroup : public RenderListItemGroup { + DECLARE_ACE_TYPE(FlutterRenderListItemGroup, RenderListItemGroup); + +public: + FlutterRenderListItemGroup() = default; + ~FlutterRenderListItemGroup() override = default; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_FLUTTER_RENDER_LIST_ITEM_GROUP_H diff --git a/frameworks/core/components/list/grid_layout_manager.cpp b/frameworks/core/components/list/grid_layout_manager.cpp new file mode 100644 index 00000000..cdb80bc9 --- /dev/null +++ b/frameworks/core/components/list/grid_layout_manager.cpp @@ -0,0 +1,502 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/list/grid_layout_manager.h" + +#include + +#include "base/log/log.h" +#include "base/utils/utils.h" +#include "core/components/list/list_component.h" +#include "core/components/list/render_list_item.h" +#include "core/components/scroll/render_multi_child_scroll.h" + +namespace { + +#ifndef WEARABLE_PRODUCT +constexpr int32_t MIN_COUNT_OF_ADJUST_SLIP = 50; +constexpr double SLIP_FACTOR = 250.0; +#else +constexpr int32_t MIN_COUNT_OF_ADJUST_SLIP = 30; +constexpr double SLIP_FACTOR = 250.0; +#endif + +} // namespace + +namespace OHOS::Ace { + +GridLayoutManager::GridLayoutManager(RenderList& renderList) : renderList_(renderList) {} + +void GridLayoutManager::Update() +{ + direction_ = renderList_.GetDirection(); + maxCount_ = renderList_.GetMaxCount(); + cachedCount_ = renderList_.GetCachedCount(); + gridWidth_ = renderList_.GetWidth(); + gridHeight_ = renderList_.GetHeight(); + columnCount_ = renderList_.GetColumnCount(); + columnExtent_ = renderList_.GetColumnExtent(); + itemExtent_ = renderList_.GetItemExtent(); + if (direction_ == FlexDirection::COLUMN || direction_ == FlexDirection::COLUMN_REVERSE) { + isVertical_ = true; + } else { + isVertical_ = false; + } + updateFlag_ = true; + beginIndex_ = renderList_.GetBeginIndex(); + endIndex_ = renderList_.GetEndIndex(); + repeatedLength_ = renderList_.GetRepeatedLength(); + indexOffset_ = renderList_.GetIndexOffset(); + length_ = renderList_.GetLength(); + rightToLeft_ = renderList_.GetRightToLeft(); + crossAxisAlign_ = renderList_.GetFlexAlign(); + renderList_.MarkNeedLayout(); +} + +LayoutParam GridLayoutManager::MakeInnerLayoutParam(int32_t columnSpan) const +{ + LayoutParam innerLayout; + if (itemExtent_.IsValid()) { + double extent = itemExtent_.Value(); + if (itemExtent_.Unit() == DimensionUnit::PERCENT) { + extent *= renderList_.GetMainSize(viewPort_); + } else { + extent = renderList_.NormalizeToPx(itemExtent_); + } + if (crossAxisAlign_ == FlexAlign::STRETCH) { + if (isVertical_) { + innerLayout.SetMinSize(Size(gridLen_ * columnSpan, extent)); + innerLayout.SetMaxSize(Size(gridLen_ * columnSpan, extent)); + } else { + innerLayout.SetMinSize(Size(extent, gridLen_ * columnSpan)); + innerLayout.SetMaxSize(Size(extent, gridLen_ * columnSpan)); + } + } else { + if (isVertical_) { + innerLayout.SetMaxSize(Size(gridLen_ * columnSpan, extent)); + } else { + innerLayout.SetMaxSize(Size(extent, gridLen_ * columnSpan)); + } + } + } else { + if (crossAxisAlign_ == FlexAlign::STRETCH) { + if (isVertical_) { + innerLayout.SetMinSize(Size(gridLen_ * columnSpan, innerLayout.GetMinSize().Height())); + innerLayout.SetMaxSize(Size(gridLen_ * columnSpan, innerLayout.GetMaxSize().Height())); + } else { + innerLayout.SetMinSize(Size(innerLayout.GetMinSize().Width(), gridLen_ * columnSpan)); + innerLayout.SetMaxSize(Size(innerLayout.GetMaxSize().Width(), gridLen_ * columnSpan)); + } + } else { + if (isVertical_) { + innerLayout.SetMaxSize(Size(gridLen_ * columnSpan, innerLayout.GetMaxSize().Height())); + } else { + innerLayout.SetMaxSize(Size(innerLayout.GetMaxSize().Width(), gridLen_ * columnSpan)); + } + } + } + return innerLayout; +} + +void GridLayoutManager::SetChildPosition( + const RefPtr& child, double mainSize, int32_t gridPos, int32_t columnSpan) +{ + double crossAxis = 0.0; + FlexAlign align = crossAxisAlign_; + if (rightToLeft_) { + if (align == FlexAlign::FLEX_END) { + align = FlexAlign::FLEX_START; + } else if (align == FlexAlign::FLEX_START) { + align = FlexAlign::FLEX_END; + } + } + switch (align) { + case FlexAlign::FLEX_END: + crossAxis = gridLen_ * columnSpan - renderList_.GetCrossSize(child->GetLayoutSize()); + break; + case FlexAlign::CENTER: + crossAxis = (gridLen_ * columnSpan - renderList_.GetCrossSize(child->GetLayoutSize())) / 2.0; + break; + case FlexAlign::STRETCH: + case FlexAlign::FLEX_START: + default: + break; + } + crossAxis += gridPos * gridLen_; + if (isVertical_) { + if (rightToLeft_) { + crossAxis = crossSize_ - crossAxis - gridLen_ * columnSpan; + } + child->SetPosition(Offset(crossAxis, mainSize) + position_); + } else { + if (rightToLeft_) { + mainSize = mainSize_ - renderList_.GetMainSize(child->GetLayoutSize()) - mainSize; + } + child->SetPosition(Offset(mainSize, crossAxis) + position_); + } + LOGD("Child:%{public}lf %{public}lf %{public}s", crossAxis, mainSize, position_.ToString().c_str()); +} + +void GridLayoutManager::CalculateCachedRange( + int32_t viewBegin, int32_t viewEnd, int32_t cachedCount, int32_t& cachedBegin, int32_t& cachedEnd) +{ + cachedBegin = (viewBegin - cachedCount > 0) ? (viewBegin - cachedCount) : 0; + if (length_ != LIST_LENGTH_INFINITE) { + cachedEnd = (viewEnd + cachedCount > length_) ? length_ : viewEnd + cachedCount; + } else { + cachedEnd = viewEnd + cachedCount; + } +} + +void GridLayoutManager::RequestMoreItemsIfNeeded(int32_t viewBegin, int32_t viewEnd) +{ + int32_t cachedBegin; + int32_t cachedEnd; + if (beginIndex_ == LIST_PARAM_INVAID || endIndex_ == LIST_PARAM_INVAID) { + return; + } + + if (viewBegin > viewEnd) { + std::swap(viewBegin, viewEnd); + } + + CalculateCachedRange(viewBegin, viewEnd, cachedCount_, cachedBegin, cachedEnd); + if (CalculateRepeatedIndex(cachedBegin) < beginIndex_ || CalculateRepeatedIndex(cachedEnd) > endIndex_) { + int32_t requestBegin; + int32_t requestEnd; + CalculateCachedRange(viewBegin, viewEnd, 2 * cachedCount_, requestBegin, requestEnd); + renderList_.RequestMoreItems(CalculateRepeatedIndex(requestBegin), CalculateRepeatedIndex(requestEnd)); + } +} + +void GridLayoutManager::CalculateAxisSize() +{ + // Not first time layout after update, no need to initial. + if (!updateFlag_ && !renderList_.IsLayoutChanged()) { + return; + } + + if (isVertical_) { + mainSize_ = ((gridHeight_ > 0.0) && (gridHeight_ < renderList_.GetLayoutParam().GetMaxSize().Height())) + ? gridHeight_ + : renderList_.GetLayoutParam().GetMaxSize().Height(); + crossSize_ = ((gridWidth_ > 0.0) && (gridWidth_ < renderList_.GetLayoutParam().GetMaxSize().Width())) + ? gridWidth_ + : renderList_.GetLayoutParam().GetMaxSize().Width(); + } else { + mainSize_ = ((gridWidth_ > 0.0) && (gridWidth_ < renderList_.GetLayoutParam().GetMaxSize().Width())) + ? gridWidth_ + : renderList_.GetLayoutParam().GetMaxSize().Width(); + crossSize_ = ((gridHeight_ > 0.0) && (gridHeight_ < renderList_.GetLayoutParam().GetMaxSize().Height())) + ? gridHeight_ + : renderList_.GetLayoutParam().GetMaxSize().Height(); + } + + // Initialize the columnCount, default is 1 + if (columnCount_ == 0) { + if (columnExtent_ > 0) { + columnCount_ = crossSize_ / columnExtent_; + if (columnCount_ * columnExtent_ < crossSize_) { + ++columnCount_; + } + } else { + columnCount_ = 1; + } + } + + // Initialize the column length + gridLen_ = crossSize_ / columnCount_; +} + +void GridLayoutManager::RefreshLayout() +{ + if (!needRefresh_) { + return; + } + needRefresh_ = false; + auto items = renderList_.GetItems(); + auto iter = items.begin(); + if (iter != items.end()) { + auto firstItem = RenderListItem::GetRenderListItem(iter->second); + if (firstItem && firstItem->GetOperation() != LIST_ITEM_OP_NONE) { + LOGI("First item changed, recycle all child and layout again."); + renderList_.RecycleAllChild(); + renderList_.RefreshOffset(0.0); + itemGrid_.clear(); + itemPosition_.clear(); + itemGroupsExpand_.clear(); + itemGroupsFocusIndex_.clear(); + } else { + std::vector needRemoveItems; + std::map> newItems; + int32_t rmCount = 0; + while (iter != items.end()) { + auto item = RenderListItem::GetRenderListItem(iter->second); + if (item) { + if (item->GetOperation() == LIST_ITEM_OP_REMOVE) { + LOGI("This item[%{public}d] removed, notify element to recycle.", item->GetIndex()); + needRemoveItems.emplace_back(iter->first); + itemGrid_.erase(item->GetIndex()); + itemPosition_.erase(item->GetIndex()); + itemGroupsExpand_.erase(item->GetIndex()); + itemGroupsFocusIndex_.erase(item->GetIndex()); + ++rmCount; + } else { + if (rmCount > 0) { + itemGrid_.erase(item->GetIndex()); + itemPosition_.erase(item->GetIndex()); + itemGroupsExpand_.erase(item->GetIndex()); + itemGroupsFocusIndex_.erase(item->GetIndex()); + } + item->SetIndex(item->GetIndex() - rmCount); + newItems.emplace(std::make_pair(item->GetIndex(), iter->second)); + } + } + iter++; + } + renderList_.RecycleByItems(needRemoveItems); + renderList_.ResetItems(newItems); + } + } + renderList_.OnRefreshed(); +} + +void GridLayoutManager::PerformLayout() +{ + LOGD("PerformLayout head:%{public}lf tail:%{public}lf", head_, tail_); + CalculateAxisSize(); + RefreshLayout(); + int32_t itemIndex = GetIndexByPosition(head_); + int32_t firstIndex = itemIndex; + renderList_.RecycleHead(itemIndex - 1); // Recycle head items. + double curMainSize = GetItemPosition(itemIndex); + auto itemChild = renderList_.GetChildByIndex(itemIndex); + while (!itemChild && curMainSize < tail_ && CheckItemPosition(itemIndex)) { + itemChild = renderList_.GetChildByIndex(itemIndex); + curMainSize = GetItemPosition(itemIndex); + ++itemIndex; + } + int32_t curGrid = GetItemGrid(itemIndex); + double childMainSize = 0.0; + while (itemChild) { + auto listItem = RenderListItem::GetRenderListItem(itemChild); + if (!listItem) { + LOGE("Get render list item failed index: %{public}d", itemIndex); + return; + } + int32_t span = std::min(listItem->GetColumnSpan(), columnCount_ - curGrid); + LayoutParam innerLayout = MakeInnerLayoutParam(span); + itemChild->Layout(innerLayout); + LOGD("Index:%{public}d mainSize:%{public}lf grid:%{public}d", itemIndex, curMainSize, curGrid); + SetChildPosition(itemChild, curMainSize, curGrid, span); + itemGrid_[itemIndex] = curGrid; + itemPosition_[itemIndex] = curMainSize; + childMainSize = std::max(renderList_.GetMainSize(itemChild->GetLayoutSize()), childMainSize); + curGrid += span; + if (curGrid >= columnCount_) { + curGrid = 0; + curMainSize += childMainSize; + childMainSize = 0.0; + } + if (curMainSize >= tail_) { + break; + } + itemChild = renderList_.GetChildByIndex(++itemIndex); + } + curMainSize += childMainSize; + RequestMoreItemsIfNeeded(firstIndex, itemIndex); + renderList_.RecycleTail(itemIndex + 1); // Recycle tail items. + Size layoutSize = renderList_.MakeValue(curMainSize, renderList_.GetCrossSize(viewPort_)); + renderList_.SetLayoutSize(layoutSize); + ShowItemFocusAnimation(); + updateFlag_ = false; + if (itemCountOfPage_ != (itemIndex - firstIndex)) { + itemCountOfPage_ = itemIndex - firstIndex; + + if (itemCountOfPage_ > MIN_COUNT_OF_ADJUST_SLIP) { + slipFactor_ = itemCountOfPage_ * SLIP_FACTOR; + } + } +} + +int32_t GridLayoutManager::focusMove(KeyDirection direction) +{ + int32_t index = focusMove_; + int32_t curGrid = 0; + int32_t curSpan = 1; + auto curFocus = renderList_.GetItemByIndex(index); + if (curFocus) { + curGrid = GetItemGrid(index); + curSpan = curFocus->GetColumnSpan(); + } + switch (direction) { + case KeyDirection::UP: + case KeyDirection::DOWN: { + auto next = renderList_.GetItemByIndex(direction == KeyDirection::UP ? --index : ++index); + while (next) { + int32_t nextGrid = GetItemGrid(index); + int32_t nextSpan = next->GetColumnSpan(); + if (nextGrid == curGrid || (nextGrid < curGrid && nextGrid + nextSpan > curGrid)) { + return index; + } + next = renderList_.GetItemByIndex(direction == KeyDirection::UP ? --index : ++index); + } + break; + } + case KeyDirection::LEFT: + if (curGrid != 0) { + auto next = renderList_.GetItemByIndex(--index); + if (next && GetItemGrid(index) < curGrid) { + return index; + } + } + break; + case KeyDirection::RIGHT: + if (curGrid + curSpan < columnCount_) { + auto next = renderList_.GetItemByIndex(++index); + if (next && GetItemGrid(index) > curGrid) { + return index; + } + } + break; + default: + break; + } + return -1; +} + +void GridLayoutManager::LayoutToItem(int32_t toIndex) +{ + int32_t curHeadIndex = renderList_.GetCurrentMinIndex(); + int32_t curTailIndex = renderList_.GetCurrentMaxIndex(); + double curMainSize = GetItemPosition(curTailIndex); + int32_t curGrid = GetItemGrid(curTailIndex); + auto itemChild = renderList_.GetChildByIndex(curTailIndex); + double childMainSize = 0.0; + while (itemChild) { + auto listItem = RenderListItem::GetRenderListItem(itemChild); + if (!listItem) { + LOGE("Get render list item failed index: %{public}d", curTailIndex); + return; + } + int32_t span = std::min(listItem->GetColumnSpan(), columnCount_ - curGrid); + LayoutParam innerLayout = MakeInnerLayoutParam(span); + itemChild->Layout(innerLayout); + LOGD("Index:%{public}d mainSize:%{public}lf grid:%{public}d", curTailIndex, curMainSize, curGrid); + SetChildPosition(itemChild, curMainSize, curGrid, span); + itemGrid_[curTailIndex] = curGrid; + itemPosition_[curTailIndex] = curMainSize; + childMainSize = std::max(renderList_.GetMainSize(itemChild->GetLayoutSize()), childMainSize); + curGrid += span; + if (curGrid >= columnCount_) { + curGrid = 0; + curMainSize += childMainSize; + childMainSize = 0.0; + } + if (curTailIndex >= toIndex) { + break; + } + itemChild = renderList_.GetChildByIndex(++curTailIndex); + renderList_.RecycleHead(curHeadIndex++); + } + curMainSize += childMainSize; + Size layoutSize = renderList_.MakeValue(curMainSize, renderList_.GetCrossSize(viewPort_)); + renderList_.SetLayoutSize(layoutSize); +} + +void GridLayoutManager::LayoutMore(double incDistance) +{ + // Use to load about one page size, so not need to recycle child. + int32_t curTailIndex = renderList_.GetCurrentMaxIndex(); + double curMainSize = GetItemPosition(curTailIndex); + int32_t curGrid = GetItemGrid(curTailIndex); + auto itemChild = renderList_.GetChildByIndex(curTailIndex); + double childMainSize = 0.0; + double incMainSize = 0.0; + while (itemChild) { + auto listItem = RenderListItem::GetRenderListItem(itemChild); + if (!listItem) { + LOGE("Get render list item failed index: %{public}d", curTailIndex); + return; + } + int32_t span = std::min(listItem->GetColumnSpan(), columnCount_ - curGrid); + LayoutParam innerLayout = MakeInnerLayoutParam(span); + itemChild->Layout(innerLayout); + LOGD("Index:%{public}d mainSize:%{public}lf grid:%{public}d", curTailIndex, curMainSize, curGrid); + SetChildPosition(itemChild, curMainSize, curGrid, span); + itemGrid_[curTailIndex] = curGrid; + itemPosition_[curTailIndex] = curMainSize; + childMainSize = std::max(renderList_.GetMainSize(itemChild->GetLayoutSize()), childMainSize); + curGrid += span; + if (curGrid >= columnCount_) { + curGrid = 0; + curMainSize += childMainSize; + incMainSize += childMainSize; + childMainSize = 0.0; + } + if (incMainSize >= incDistance) { + break; + } + itemChild = renderList_.GetChildByIndex(++curTailIndex); + } + curMainSize += childMainSize; + Size layoutSize = renderList_.MakeValue(curMainSize, renderList_.GetCrossSize(viewPort_)); + renderList_.SetLayoutSize(layoutSize); +} + +void GridLayoutManager::MoveItemToViewPort(double position) +{ + RefPtr item = renderList_.GetChildByPosition(position); + if (!item) { + LOGE("[ListFocus]MoveItemToViewPort, Get item failed."); + return; + } + Size itemSize = item->GetLayoutSize(); + double size = (direction_ == FlexDirection::ROW || direction_ == FlexDirection::ROW_REVERSE) ? itemSize.Width() + : itemSize.Height(); + + // jump to this item using position + RefPtr parentNode = renderList_.GetParent().Upgrade(); + RefPtr scroll = AceType::DynamicCast(parentNode); + if (!scroll) { + LOGE("[ListFocus]MoveItemToViewPort, Get Parent failed."); + return; + } + double focusEffectWidth = size * (TV_ITEM_SCALE - DEFAULT_SCALE) * HALF_ITEM_SIZE; + double animationOffset = scroll->NormalizeToPx(FOCUS_BOUNDARY); + scroll->MoveItemToViewPort(position, size, animationOffset + focusEffectWidth); + LOGD("[ListFocus][list] Direction:%{public}d, Item position:%{public}.1lf.", direction_, position); +} + +void GridLayoutManager::ShowItemFocusAnimation() +{ + RefPtr focusItem; + for (const auto& item : renderList_.GetItems()) { + if (!item.second || item.second->GetChildren().empty()) { + continue; + } + + focusItem = RenderListItem::GetRenderListItem(item.second); + if (!focusItem) { + break; + } else { + if (focusItem->IsFocused()) { + focusItem->ShowFocusAnimation(true, Rect(renderList_.GetGlobalOffset(), viewPort_)); + } + } + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/list/grid_layout_manager.h b/frameworks/core/components/list/grid_layout_manager.h new file mode 100644 index 00000000..ab21ac9d --- /dev/null +++ b/frameworks/core/components/list/grid_layout_manager.h @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_GRID_LAYOUT_MANAGER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_GRID_LAYOUT_MANAGER_H + +#include "core/components/list/layout_manager.h" +#include "core/components/list/render_list.h" +#include "core/components/scroll/scrollable.h" + +namespace OHOS::Ace { + +typedef std::map RelationMap; +typedef std::map ChildRelationsMap; + +class GridLayoutManager : public LayoutManager { + DECLARE_ACE_TYPE(GridLayoutManager, LayoutManager); + +public: + explicit GridLayoutManager(RenderList& renderList); + ~GridLayoutManager() override = default; + + void Update() override; + + void RefreshLayout() override; + + void PerformLayout() override; + + int32_t focusMove(KeyDirection direction) override; + + void MoveItemToViewPort(double position) override; + + void LayoutToItem(int32_t toIndex) override; + + void LayoutMore(double incDistance) override; + +private: + LayoutParam MakeInnerLayoutParam(int32_t columnSpan) const; + + void CalculateAxisSize(); + + // Sets child position, the mainAxis does not contain the offset. + void SetChildPosition(const RefPtr& child, double mainSize, int32_t gridPos, int32_t columnSpan); + + bool CalculateStartPosition(double& start); + + void ShowItemFocusAnimation(); + + void CalculateCachedRange( + int32_t viewBegin, int32_t viewEnd, int32_t cachedCount, int32_t& cachedBegin, int32_t& cachedEnd) override; + + void RequestMoreItemsIfNeeded(int32_t viewBegin, int32_t viewEnd) override; + + int32_t cachedCount_ = 1; + int32_t maxCount_ = 0; + + Offset offset_; + RefPtr scrollable_; + + double mainSize_ = 0.0; + double crossSize_ = 0.0; + double gridLen_ = 0.0; + double gridWidth_ = -1.0; + double gridHeight_ = -1.0; + int32_t columnCount_ = 0; + int32_t columnExtent_ = 0; + bool updateFlag_ = false; + + RenderList& renderList_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_GRID_LAYOUT_MANAGER_H diff --git a/frameworks/core/components/list/interactive_effect.cpp b/frameworks/core/components/list/interactive_effect.cpp new file mode 100644 index 00000000..aafda941 --- /dev/null +++ b/frameworks/core/components/list/interactive_effect.cpp @@ -0,0 +1,217 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/list/interactive_effect.h" + +#include "base/log/event_report.h" +#include "core/animation/keyframe.h" +#include "core/components/list/render_list_item.h" + +namespace OHOS::Ace { + +InteractiveEffect::InteractiveEffect(const WeakPtr& context) +{ + auto pipelineContext = context.Upgrade(); + if (pipelineContext) { + context_ = pipelineContext; + controller_ = AceType::MakeRefPtr(pipelineContext); + } else { + LOGE("context is null."); + } +} + +void InteractiveEffect::UpdateContext(const WeakPtr& context) +{ + auto pipelineContext = context.Upgrade(); + if (pipelineContext) { + context_ = pipelineContext; + controller_ = AceType::MakeRefPtr(pipelineContext); + } +} + +void InteractiveEffect::Initialize(const RefPtr& themeManager) +{ + if (!themeManager) { + return; + } + if (!theme_) { + theme_ = themeManager->GetTheme(); + } +} + +void InteractiveEffect::FinishPreviousAnimation() +{ + if (controller_ && !controller_->IsStopped()) { + controller_->Finish(); + } +} + +void InteractiveEffect::ShowAnimation(ItemState state) +{ + FinishPreviousAnimation(); + switch (state) { + case ItemState::FOCUS: + HandleOnFocus(); + BuildStateAnimation(); + break; + case ItemState::BLUR: + HandleOnBlur(); + BuildStateAnimation(); + break; + case ItemState::CLICK: + HandleOnClick(); + BuildClickAnimation(); + break; + default: + LOGW("invalid state."); + break; + } +} + +void InteractiveEffect::TouchDownAnimation() +{ + FinishPreviousAnimation(); + if (!theme_) { + LOGE("theme is invalid, stop build animation"); + EventReport::SendComponentException(ComponentExcepType::GET_THEME_ERR); + return; + } + RefPtr> alphaAnimation = AceType::MakeRefPtr>(); + CreateDoubleAnimation(alphaAnimation, alphaBegin_, alphaEnd_); + StartTouchAnimation(controller_, alphaAnimation); +} + +void InteractiveEffect::TouchUpAnimation() +{ + FinishPreviousAnimation(); + if (!theme_) { + LOGE("theme is invalid, stop build animation"); + EventReport::SendComponentException(ComponentExcepType::GET_THEME_ERR); + return; + } + RefPtr> alphaAnimation = AceType::MakeRefPtr>(); + auto currentAlpha = GetAlpha(); + CreateDoubleAnimation(alphaAnimation, currentAlpha, alphaBegin_); + StartTouchAnimation(controller_, alphaAnimation); +} + +void InteractiveEffect::StartTouchAnimation(RefPtr controller, + RefPtr>& doubleAnimation) +{ + if (!controller || !doubleAnimation) { + return; + } + controller->ClearInterpolators(); + controller->AddInterpolator(doubleAnimation); + controller->SetDuration(PRESS_ANIMATION_DURATION); + controller->SetFillMode(FillMode::FORWARDS); + controller->Play(); +} + +void InteractiveEffect::CreateDoubleAnimation(RefPtr>& doubleAnimation, double beginValue, + double endValue) +{ + if (!doubleAnimation) { + return; + } + auto alphaFrameStart = AceType::MakeRefPtr>(ANIMATION_ZERO_TIME, beginValue); + auto alphaFrameEnd = AceType::MakeRefPtr>(ANIMATION_END_TIME, endValue); + doubleAnimation->SetCurve(Curves::SHARP); + doubleAnimation->AddKeyframe(alphaFrameStart); + doubleAnimation->AddKeyframe(alphaFrameEnd); + doubleAnimation->AddListener([weakEffect = AceType::WeakClaim(this)](double value) { + auto effect = weakEffect.Upgrade(); + if (effect) { + effect->SetAlpha(value); + effect->MarkItemRender(); + } + }); +} + +bool InteractiveEffect::NeedClickAnimation() +{ + auto node = item_.Upgrade(); + RefPtr listItem; + if (!node || !AceType::DynamicCast(node)) { + return false; + } else { + listItem = AceType::DynamicCast(node); + if (!listItem->GetSupportClick()) { + return false; + } + } + return true; +} + +void InteractiveEffect::BuildClickAnimation() +{ + if (!theme_) { + LOGE("theme is invalid, stop build animation"); + EventReport::SendComponentException(ComponentExcepType::GET_THEME_ERR); + return; + } + + if (!NeedClickAnimation()) { + return; + } + + RefPtr> alphaAnimation = AceType::MakeRefPtr>(); + BuildClickAlphaAnimation(alphaAnimation); + if (controller_) { + controller_->ClearInterpolators(); + controller_->AddInterpolator(alphaAnimation); + controller_->SetDuration(clickDuration_); + controller_->Play(); + } +} + +void InteractiveEffect::MarkItemRender() +{ + auto item = item_.Upgrade(); + if (item) { + item->MarkNeedRender(); + auto listItem = AceType::DynamicCast(item); + if (listItem) { + if (listItem->GetSticky()) { + auto list = list_.Upgrade(); + if (list) { + list->MarkNeedRender(); + } + } + } + } +} + +void InteractiveEffect::BuildClickAlphaAnimation(const RefPtr>& alphaAnimation) +{ + auto alphaFrameStart = AceType::MakeRefPtr>(ANIMATION_ZERO_TIME, alphaBegin_); + auto alphaFrameMid = AceType::MakeRefPtr>(ANIMATION_HALF_TIME, alphaEnd_); + auto alphaFrameEnd = AceType::MakeRefPtr>(ANIMATION_END_TIME, alphaBegin_); + alphaFrameMid->SetCurve(Curves::FRICTION); + alphaFrameEnd->SetCurve(Curves::FRICTION); + + alphaAnimation->AddKeyframe(alphaFrameStart); + alphaAnimation->AddKeyframe(alphaFrameMid); + alphaAnimation->AddKeyframe(alphaFrameEnd); + alphaAnimation->AddListener([weakEffect = AceType::WeakClaim(this)](double value) { + auto effect = weakEffect.Upgrade(); + if (effect) { + effect->SetAlpha(value); + effect->MarkItemRender(); + } + }); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/list/interactive_effect.h b/frameworks/core/components/list/interactive_effect.h new file mode 100644 index 00000000..4a16823b --- /dev/null +++ b/frameworks/core/components/list/interactive_effect.h @@ -0,0 +1,138 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_INTERACTIVE_EFFECT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_INTERACTIVE_EFFECT_H + +#include "base/memory/ace_type.h" +#include "core/animation/animator.h" +#include "core/animation/keyframe_animation.h" +#include "core/components/list/list_item_theme.h" +#include "core/pipeline/base/render_node.h" +#include "core/pipeline/pipeline_context.h" + +namespace OHOS::Ace { + +const double DEFAULT_FOCUS_DURATION = 100.0; +const double DEFAULT_CLICK_DURATION = 200.0; +const double PRESS_ANIMATION_DURATION = 100.0; +const float ANIMATION_ZERO_TIME = 0.0f; +const float ANIMATION_HALF_TIME = 0.5f; +const float ANIMATION_END_TIME = 1.0f; + +enum class ItemState { + FOCUS = 0, // center position of list on watch + BLUR, // not FOCUS, and not neighbor to FOCUS on watch + NEARBY, // neighbor to FOCUS on watch + CLICK, // instant state when item clicked + NONE, +}; + +class InteractiveEffect : public AceType { + DECLARE_ACE_TYPE(InteractiveEffect, AceType); + +public: + explicit InteractiveEffect(const WeakPtr& context); + ~InteractiveEffect() = default; + void ShowAnimation(ItemState state); + void TouchDownAnimation(); + void TouchUpAnimation(); + void Initialize(const RefPtr& themeManager); + void UpdateContext(const WeakPtr& context); + void FinishPreviousAnimation(); + + double GetScale() const + { + return scale_; + } + void SetScale(double scale) + { + scale_ = scale; + } + double GetAlpha() const + { + return alpha_; + } + void SetAlpha(double alpha) + { + alpha_ = alpha; + } + double GetOpacity() const + { + return opacity_; + } + void SetOpacity(double opacity) + { + opacity_ = opacity; + } + void SetItemNode(const WeakPtr& item) + { + item_ = item; + } + void SetListNode(const WeakPtr& list) + { + list_ = list; + } + + const RefPtr& GetAnimator() const + { + return controller_; + } + + virtual void HandleOnFocus() {} + virtual void HandleOnBlur() {} + + // default click effect. + virtual void HandleOnClick() + { + if (theme_) { + alphaBegin_ = theme_->GetClickAlphaBegin(); + alphaEnd_ = theme_->GetClickAlphaEnd(); + clickDuration_ = theme_->GetClickAnimationDuration(); // 200.0 + } + } + + virtual void BuildStateAnimation() {} + virtual void BuildClickAnimation(); + +protected: + void MarkItemRender(); + bool NeedClickAnimation(); + void BuildClickAlphaAnimation(const RefPtr>& alphaAnimation); + void CreateDoubleAnimation(RefPtr>& doubleAnimation, double beginValue, double endValue); + void StartTouchAnimation(RefPtr controller, + RefPtr>& doubleAnimation); + + double focusDuration_ = DEFAULT_FOCUS_DURATION; // focus animation duration, ms + double clickDuration_ = DEFAULT_CLICK_DURATION; // click animation duration, ms + double scaleBegin_ = 1.0; + double scaleEnd_ = 1.0; + double opacityBegin_ = 0; + double opacityEnd_ = 1.0; + double alphaBegin_ = 0.0; + double alphaEnd_ = 0.1; + double alpha_ = 0.0; // alpha factor in argb + double scale_ = 1.0; // for canvas scale + double opacity_ = 1.0; // for opacity layer + WeakPtr item_; + WeakPtr list_; + RefPtr context_; + RefPtr controller_; + RefPtr theme_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_INTERACTIVE_EFFECT_H diff --git a/frameworks/core/components/list/layout_manager.cpp b/frameworks/core/components/list/layout_manager.cpp new file mode 100644 index 00000000..5bbc1c0a --- /dev/null +++ b/frameworks/core/components/list/layout_manager.cpp @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/list/layout_manager.h" + +namespace OHOS::Ace { + +constexpr bool DIR_HORIZONTAL = false; +constexpr bool DIR_VERTICAL = true; +constexpr bool DIR_FORWARD = false; +constexpr bool DIR_REVERSE = true; + +const std::map>>> DIRECTION_MAP = { + { false, // RTL is false + { + { FlexDirection::ROW, + { + { DIR_HORIZONTAL, { { DIR_FORWARD, KeyDirection::DOWN }, { DIR_REVERSE, KeyDirection::UP } } }, + { DIR_VERTICAL, { { DIR_FORWARD, KeyDirection::RIGHT }, { DIR_REVERSE, KeyDirection::LEFT } } } + } + }, + { FlexDirection::COLUMN, + { + { DIR_HORIZONTAL, { { DIR_FORWARD, KeyDirection::RIGHT }, { DIR_REVERSE, KeyDirection::LEFT } } }, + { DIR_VERTICAL, { { DIR_FORWARD, KeyDirection::DOWN }, { DIR_REVERSE, KeyDirection::UP } } } + } + }, + { FlexDirection::ROW_REVERSE, + { + { DIR_HORIZONTAL, { { DIR_FORWARD, KeyDirection::UP }, { DIR_REVERSE, KeyDirection::DOWN } } }, + { DIR_VERTICAL, { { DIR_FORWARD, KeyDirection::RIGHT }, { DIR_REVERSE, KeyDirection::LEFT } } } + } + }, + { FlexDirection::COLUMN_REVERSE, + { + { DIR_HORIZONTAL, { { DIR_FORWARD, KeyDirection::RIGHT }, { DIR_REVERSE, KeyDirection::LEFT } } }, + { DIR_VERTICAL, { { DIR_FORWARD, KeyDirection::UP }, { DIR_REVERSE, KeyDirection::DOWN } } } + } + } + } + }, + { true, // RTL is true + { + { FlexDirection::ROW, + { + { DIR_HORIZONTAL, { { DIR_FORWARD, KeyDirection::UP }, { DIR_REVERSE, KeyDirection::DOWN } } }, + { DIR_VERTICAL, { { DIR_FORWARD, KeyDirection::RIGHT }, { DIR_REVERSE, KeyDirection::LEFT } } } + } + }, + { FlexDirection::COLUMN, + { + { DIR_HORIZONTAL, { { DIR_FORWARD, KeyDirection::LEFT }, { DIR_REVERSE, KeyDirection::RIGHT } } }, + { DIR_VERTICAL, { { DIR_FORWARD, KeyDirection::DOWN }, { DIR_REVERSE, KeyDirection::UP } } } + } + }, + { FlexDirection::ROW_REVERSE, + { + { DIR_HORIZONTAL, { { DIR_FORWARD, KeyDirection::UP }, { DIR_REVERSE, KeyDirection::DOWN } } }, + { DIR_VERTICAL, { { DIR_FORWARD, KeyDirection::RIGHT }, { DIR_REVERSE, KeyDirection::LEFT } } } + } + }, + { FlexDirection::COLUMN_REVERSE, + { + { DIR_HORIZONTAL, { { DIR_FORWARD, KeyDirection::LEFT }, { DIR_REVERSE, KeyDirection::RIGHT } } }, + { DIR_VERTICAL, { { DIR_FORWARD, KeyDirection::UP }, { DIR_REVERSE, KeyDirection::DOWN } } } + } + } + } + } +}; + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/list/layout_manager.h b/frameworks/core/components/list/layout_manager.h new file mode 100644 index 00000000..8a281c72 --- /dev/null +++ b/frameworks/core/components/list/layout_manager.h @@ -0,0 +1,317 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_LAYOUT_MANAGER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_LAYOUT_MANAGER_H + +#include + +#include "base/geometry/dimension.h" +#include "base/geometry/offset.h" +#include "base/memory/ace_type.h" +#include "base/utils/system_properties.h" +#include "core/gestures/touch_event.h" +#include "core/pipeline/base/component.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +const double DEFAULT_SCALE = 1.0; +const double TV_ITEM_SCALE = 1.05; +const double HALF_ITEM_SIZE = 0.5; +const int32_t LIST_PARAM_INVAID = -2; +const int32_t LIST_LENGTH_INFINITE = -1; +const double INFINITE_POSITION = 0.0; + +// first bool mean if vertical, second bool mean if reverse +// false, false --> RIGHT +// false, true --> LEFT +// true, false --> DOWN +// true, true ---> UP +// This map will adapter the Grid FlexDirection with Key Direction. +extern const std::map>>> DIRECTION_MAP; + +class LayoutManager : public virtual AceType { + DECLARE_ACE_TYPE(LayoutManager, AceType); + +public: + LayoutManager() = default; + ~LayoutManager() override = default; + + virtual void Update() = 0; + + virtual void PerformLayout() = 0; + + virtual void RefreshLayout() = 0; + + virtual void CalculateCachedRange(int32_t viewBegin, int32_t viewEnd, int32_t cachedCount, int32_t& cachedBegin, + int32_t& cachedEnd) = 0; + + virtual void RequestMoreItemsIfNeeded(int32_t viewBegin, int32_t viewEnd) = 0; + + virtual int32_t focusMove(KeyDirection key) = 0; + + virtual void CalculateFocusIndexPosition() {} + + virtual void MoveItemToViewPort(double position) {} + + virtual void MoveItemGroupToViewPort(double position, double size) {} + + virtual void LayoutToItem(int32_t toIndex) {} + + virtual void LayoutToPosition(double position) {} + + virtual void LayoutMore(double incDistance) {} + + virtual void NotifyNeedRefresh() {} + + int32_t RequestNextFocus(bool vertical, bool reverse) + { + KeyDirection key = DIRECTION_MAP.at(rightToLeft_).at(direction_).at(vertical).at(reverse); + int32_t index = focusMove(key); + LOGD("Focus move from %{public}d to %{public}d", focusIndex_, index); + if (index < 0) { + focusMove_ = focusIndex_; + return index; + } + focusMove_ = index; + focusIndex_ = index; + return focusMove_; + } + + void ListItemFocused(int32_t focusIndex) + { + focusIndex_ = focusIndex; + focusMove_ = focusIndex; + } + + void MarkNeedRefresh() + { + needRefresh_ = true; + NotifyNeedRefresh(); + } + + void ResetLayoutRange(double head, double tail, Offset position, Size viewPort) + { + head_ = head; + tail_ = tail; + position_ = position; + viewPort_ = viewPort; + } + + const Offset& GetPosition() const + { + return position_; + } + + virtual double FlushChainAnimation() + { + return 0.0; + } + + bool IsRowReverse() const + { + return rightToLeft_ && direction_ == FlexDirection::ROW; + } + + int32_t GetItemGrid(int32_t index) const + { + auto iter = itemGrid_.find(index); + if (iter == itemGrid_.end()) { + return 0; + } + return iter->second; + } + + bool CheckItemPosition(int32_t index) const + { + return itemPosition_.find(index) != itemPosition_.end(); + } + + virtual double GetItemAnimationValue(int32_t index) const + { + return 0.0; + } + + double GetItemPosition(int32_t index) const + { + auto iter = itemPosition_.find(index); + if (iter == itemPosition_.end()) { + return 0.0; + } + return iter->second; + } + + double GetChainInterval() const + { + return enableChain_ ? chainInterval_ : 0.0; + } + + void GetChainItemRange(int32_t index, double& start, double& end) const + { + if (!enableChain_) { + return; + } + start = GetItemPosition(index) - GetChainInterval() * HALF_ITEM_SIZE; + double nextStartPosition = GetItemPosition(index + 1); + if (!NearZero(nextStartPosition)) { + end = nextStartPosition - GetChainInterval() * HALF_ITEM_SIZE; + } + } + + int32_t GetIndexByPosition(double position) const + { + int32_t index = 0; + double curPosition = 0.0; + for (const auto& item : itemPosition_) { + double correctedPosition = item.second + GetItemAnimationValue(item.first); + if (NearEqual(correctedPosition, position)) { + return item.first; + } else { + if (NearEqual(curPosition, correctedPosition)) { + continue; + } + curPosition = correctedPosition; + if (correctedPosition < position) { + index = item.first; + } else { + return index; + } + } + } + return index; + } + + int32_t CalculateRepeatedIndex(int32_t cachedIndex) + { + int32_t repeatedIndex; + if (repeatedLength_ == LIST_LENGTH_INFINITE) { + repeatedIndex = ((cachedIndex - indexOffset_) > 0 ? (cachedIndex - indexOffset_) : 0); + } else { + if (cachedIndex < indexOffset_) { + repeatedIndex = 0; + } else { + if (cachedIndex > indexOffset_ + repeatedLength_) { + repeatedIndex = repeatedLength_; + } else { + repeatedIndex = cachedIndex - indexOffset_; + } + } + } + return repeatedIndex; + } + + bool GetExpandStatus(int32_t groupIndex) const + { + auto iter = itemGroupsExpand_.find(groupIndex); + if (iter != itemGroupsExpand_.end()) { + return iter->second; + } else { + return expandAll_; + } + } + + int32_t GetItemGroupFocusIndex(int32_t groupIndex) const + { + auto iter = itemGroupsFocusIndex_.find(groupIndex); + if (iter != itemGroupsFocusIndex_.end()) { + return iter->second; + } + return 0; + } + + void SetExpandAll(bool expandAll) + { + expandAll_ = expandAll; + } + + void ClearItemGroupsExpand() + { + itemGroupsExpand_.clear(); + } + + void ClearItemPosition() + { + itemPosition_.clear(); + } + + void AddItemGroupExpand(int32_t index, bool expand) + { + itemGroupsExpand_[index] = expand; + } + + void AddItemGroupFocusIndex(int32_t index, int32_t groupFocusIndex) + { + itemGroupsFocusIndex_[index] = groupFocusIndex; + } + + double GetFriction() const + { + return friction_; + } + + void SetFriction(double friction) + { + friction_ = friction; + } + + double GetSlipFactor() const + { + return slipFactor_; + } + +protected: + double head_ = 0.0; + double tail_ = 0.0; + double lastHead_ = 0.0; + double lastTail_ = 0.0; + int32_t focusMove_ = 0; // Record the focus move path. + int32_t focusIndex_ = 0; // Record the index of focus item. + Offset position_; + Size viewPort_; + bool needRefresh_ = false; + bool firstLayout_ = true; + Dimension itemExtent_; + + bool rightToLeft_ = false; + bool isVertical_ = false; + FlexDirection direction_ { FlexDirection::COLUMN }; + FlexAlign crossAxisAlign_ { FlexAlign::STRETCH }; + int32_t beginIndex_ = LIST_PARAM_INVAID; + int32_t endIndex_ = LIST_PARAM_INVAID; + int32_t length_ = 0; + int32_t repeatedLength_ = 0; + int32_t indexOffset_ = 0; + + std::map itemGrid_; + std::map itemPosition_; + std::map itemGroupsExpand_; + std::map itemGroupsFocusIndex_; + + RefPtr controller_; + std::vector needRemoveItems_; + std::map> newItems_; + bool isAnimating_ = false; + double friction_ = 1.0; + bool expandAll_ = false; + bool enableChain_ = false; // whether enables spring chain effect. + double chainInterval_ = 0.0; + int32_t itemCountOfPage_ = 0; + double slipFactor_ = 0.0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_LAYOUT_MANAGER_H diff --git a/frameworks/core/components/list/list_component.cpp b/frameworks/core/components/list/list_component.cpp new file mode 100644 index 00000000..370d4333 --- /dev/null +++ b/frameworks/core/components/list/list_component.cpp @@ -0,0 +1,197 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/list/list_component.h" + +namespace OHOS::Ace { + +ListComponent::ListComponent(const std::list>& children) : ComponentGroup(children) +{ + needPreBuild_ = true; +} + +RefPtr ListComponent::CreateElement() +{ + // This func will be called repeatedly when list in dialog. + needUpdateElement_ = true; + auto listElement = AceType::MakeRefPtr(); + listElement_ = AceType::WeakClaim(AceType::RawPtr(listElement)); + return listElement; +} + +RefPtr ListComponent::CreateRenderNode() +{ + return RenderList::Create(); +} + +void ListComponent::InitStyle(const RefPtr& theme) +{ + if (theme) { + gradientWidth_ = theme->GetGradientWidth(); + backgroundColor_ = theme->GetBackgroundColor(); + } +} + +void ListComponent::SetFlexAlign(FlexAlign flexAlign) +{ + if (flexAlign < FlexAlign::FLEX_START || flexAlign > FlexAlign::STRETCH) { + LOGW("Invalid flexAlign %{public}d", flexAlign); + return; + } + LOGD("SetFlexAlign to %{public}d.", flexAlign); + flexAlign_ = flexAlign; +} + +void ListComponent::SetColumnCount(int32_t count) +{ + if (count <= 0) { + LOGW("Invalid ColumnCount %{public}d", count); + return; + } + LOGD("SetColumnCount to %{public}d.", count); + columnCount_ = count; +} + +void ListComponent::SetColumnExtent(int32_t extent) +{ + if (extent <= 0) { + return; + } + LOGD("SetColumnExtent to %{public}d.", extent); + columnExtent_ = extent; +} + +void ListComponent::SetItemExtent(const Dimension& itemExtent) +{ + if (!itemExtent.IsValid()) { + return; + } + LOGD("SetItemExtent to [%{public}d:%{public}lf].", itemExtent.Unit(), itemExtent.Value()); + itemExtent_ = itemExtent; +} + +void ListComponent::SetWidth(double width) +{ + if (width <= 0.0) { + LOGW("Invalid Width %{public}lf", width); + return; + } + width_ = width; +} + +void ListComponent::SetHeight(double height) +{ + if (height <= 0.0) { + LOGW("Invalid Height %{public}lf", height); + return; + } + height_ = height; +} + +void ListComponent::InsertChild(int32_t position, const RefPtr& child) +{ + if (position < 0) { + LOGE("InsertChild: the position is negative"); + return; + } + auto pos = static_cast(position); + auto item = ListItemComponent::GetListItem(child); + if (!item) { + LOGE("InsertChild: no list item in child"); + return; + } + + const auto& children = GetChildren(); + if (!child || pos > children.size()) { + return; + } + + if (pos == children.size()) { + AppendChild(child); + return; + } + + uint32_t current = 0; + auto it = children.begin(); + while (it != children.end()) { + auto listItemComponent = ListItemComponent::GetListItem(*it); + if (listItemComponent && listItemComponent->GetOperation() == LIST_ITEM_OP_REMOVE) { + --current; + } + + if (current == pos) { + break; + } + + ++current; + ++it; + } + + LOGD("InsertChild: position: %{public}d, index: %{public}d, type: %{public}s", pos, item->GetIndex(), + item->GetType().c_str()); + item->SetOperation(LIST_ITEM_OP_ADD); + needUpdateElement_ = true; + ComponentGroup::InsertChild(std::distance(children.begin(), it), child); +} + +void ListComponent::AppendChild(const RefPtr& child) +{ + auto item = ListItemComponent::GetListItem(child); + if (!item) { + LOGE("AppendChild: no list item in child"); + return; + } + + item->SetIndex(GetChildren().size()); + LOGD("AppendChild: index: %{public}d, type: %{public}s", item->GetIndex(), item->GetType().c_str()); + item->SetOperation(LIST_ITEM_OP_ADD); + needUpdateElement_ = true; + ComponentGroup::AppendChild(child); +} + +void ListComponent::RemoveChild(const RefPtr& child) +{ + auto item = ListItemComponent::GetListItem(child); + if (!item) { + LOGE("RemoveChild: no list item in child"); + return; + } + + LOGD("RemoveChild: index: %{public}d, type: %{public}s", item->GetIndex(), item->GetType().c_str()); + if (beginIndex_ != LIST_PARAM_INVAID && endIndex_ != LIST_PARAM_INVAID) { + ComponentGroup::RemoveChild(child); + needUpdateElement_ = true; + } else { + if (item->GetOperation() == LIST_ITEM_OP_ADD) { + LOGD("RemoveChild: this child is added just before"); + ComponentGroup::RemoveChild(child); + return; + } + item->SetOperation(LIST_ITEM_OP_REMOVE); + needUpdateElement_ = true; + } +} + +void ListComponent::SetGroupState(int32_t expandIndex, bool expand) +{ + auto listElement = listElement_.Upgrade(); + if (!listElement) { + LOGE("SetGroupState failed"); + return; + } + listElement->SetGroupState(expandIndex, expand); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/list/list_component.h b/frameworks/core/components/list/list_component.h new file mode 100644 index 00000000..0c05febb --- /dev/null +++ b/frameworks/core/components/list/list_component.h @@ -0,0 +1,492 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_LIST_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_LIST_COMPONENT_H + +#include "base/utils/macros.h" +#include "core/animation/simple_spring_chain.h" +#include "core/components/common/layout/constants.h" +#include "core/components/common/properties/scroll_bar.h" +#include "core/components/common/rotation/rotation_controller.h" +#include "core/components/list/list_element.h" +#include "core/components/list/list_item_component.h" +#include "core/components/list/list_theme.h" +#include "core/components/list/render_list.h" +#include "core/components/scroll/scroll_edge_effect.h" +#include "core/components/scroll/scroll_position_controller.h" +#include "core/pipeline/base/component_group.h" + +namespace OHOS::Ace { + +inline constexpr int32_t INDEX_EXPAND_ALL = -999; + +class ACE_EXPORT ListComponent : public ComponentGroup { + DECLARE_ACE_TYPE(ListComponent, ComponentGroup); + +public: + ListComponent() = default; + explicit ListComponent(const std::list>& children); + ~ListComponent() override = default; + + void InsertChild(int32_t position, const RefPtr& child) override; + void AppendChild(const RefPtr& child) override; + void RemoveChild(const RefPtr& child) override; + void SetGroupState(int32_t expandIndex, bool expand); + + RefPtr CreateElement() override; + RefPtr CreateRenderNode() override; + + void SetScrollPage(bool scrollPage) + { + scrollPage_ = scrollPage; + } + + void SetChainAnimation(bool chainAnimation) + { + chainAnimation_ = chainAnimation; + } + + void SetOnScroll(const EventMarker& onScroll) + { + onScroll_ = onScroll; + } + + void SetOnScrollBottom(const EventMarker& onScrollBottom) + { + onScrollBottom_ = onScrollBottom; + } + + void SetOnScrollTop(const EventMarker& onScrollTop) + { + onScrollTop_ = onScrollTop; + } + + void SetOnScrollEnd(const EventMarker& onScrollEnd) + { + onScrollEnd_ = onScrollEnd; + } + + void SetOnScrollTouchUp(const EventMarker& onScrollTouchUp) + { + onScrollTouchUp_ = onScrollTouchUp; + } + + bool GetScrollPage() const + { + return scrollPage_; + } + + bool GetChainAnimation() const + { + return chainAnimation_; + } + + FlexDirection GetDirection() const + { + return direction_; + } + + void SetDirection(FlexDirection direction) + { + if (direction == FlexDirection::COLUMN_REVERSE || direction == FlexDirection::ROW_REVERSE) { + LOGE("Not support. direction: %{public}d", direction); + return; + } + direction_ = direction; + } + + int32_t GetTotalCount() const + { + return totalCount_; + } + + int32_t GetItemsCount() const + { + return GetChildren().size(); + } + + void SetTotalCount(int32_t totalCount) + { + if (totalCount < 0) { + LOGE("Invalid TotalCount %{public}d", totalCount); + return; + } + LOGD("SetTotalCount to %{public}d.", totalCount); + totalCount_ = totalCount; + } + + const EventMarker& GetOnRequestItem() const + { + return onRequestItem_; + } + + void SetOnRequestItem(const EventMarker& onRequestItem) + { + onRequestItem_ = onRequestItem; + } + + int32_t GetCachedCount() const + { + return cachedCount_; + } + + int32_t GetBeginIndex() const + { + return beginIndex_; + } + + int32_t GetEndIndex() const + { + return endIndex_; + } + + int32_t GetRepeatedLength() const + { + return repeatedLength_; + } + + int32_t GetIndexOffset() const + { + return indexOffset_; + } + + void SetCachedCount(int32_t cachedCount) + { + if (cachedCount <= 0) { + LOGE("Invalid CachedCount %{public}d", cachedCount); + return; + } + LOGD("SetCachedCount to %{public}d.", cachedCount); + cachedCount_ = cachedCount; + } + + void SetBeginIndex(int32_t beginIndex) + { + beginIndex_ = beginIndex; + } + + void SetEndIndex(int32_t endIndex) + { + endIndex_ = endIndex; + } + + void SetRepeatedLength(int32_t repeatedLength) + { + repeatedLength_ = repeatedLength; + } + + void SetIndexOffset(int32_t indexOffset) + { + indexOffset_ = indexOffset; + } + + RefPtr GetPositionController() const + { + return positionController_; + } + + void SetPositionController(const RefPtr& controller) + { + positionController_ = controller; + } + + const RefPtr& GetScrollEffect() const + { + return scrollEffect_; + } + + void SetScrollEffect(const RefPtr& scrollEffect) + { + scrollEffect_ = scrollEffect; + } + + const EventMarker& GetOnScroll() const + { + return onScroll_; + } + + const EventMarker& GetOnScrollBottom() const + { + return onScrollBottom_; + } + + const EventMarker& GetOnScrollTop() const + { + return onScrollTop_; + } + + const EventMarker& GetOnScrollEnd() const + { + return onScrollEnd_; + } + + const EventMarker& GetOnScrollTouchUp() const + { + return onScrollTouchUp_; + } + + void InitStyle(const RefPtr& theme); + + const Dimension& GetGradientWidth() const + { + return gradientWidth_; + } + + void SetGradientWidth(const Dimension& gradientWidth) + { + if (gradientWidth.Value() < 0.0) { + LOGE("Invalid GradientWidth %{public}lf", gradientWidth_.Value()); + return; + } + LOGD("SetGradientWidth to %{public}lf.", gradientWidth_.Value()); + gradientWidth_ = gradientWidth; + } + + const Color& GetBackgroundColor() const + { + return backgroundColor_; + } + + void SetBackgroundColor(const Color& backgroundColor) + { + backgroundColor_ = backgroundColor; + } + + void SetFlexAlign(FlexAlign flexAlign); + + void SetColumnCount(int32_t count); + + void SetColumnExtent(int32_t extent); + + void SetItemExtent(const Dimension& itemExtent); + + void SetWidth(double width); + + void SetHeight(double height); + + void SetInRefresh(bool inRefresh) + { + inRefresh_ = inRefresh; + } + + void SetSupportItemCenter(bool center) + { + supportItemCenter_ = center; + } + + bool GetSupportItemCenter() const + { + return supportItemCenter_; + } + + FlexAlign GetFlexAlign() const + { + return flexAlign_; + } + + int32_t GetColumnCount() const + { + return columnCount_; + } + + int32_t GetColumnExtent() const + { + return columnExtent_; + } + + const Dimension& GetItemExtent() const + { + return itemExtent_; + } + + double GetWidth() const + { + return width_; + } + + double GetHeight() const + { + return height_; + } + + bool NeedPreBuild() const + { + return needPreBuild_; + } + + bool NeedUpdateElement() const + { + return needUpdateElement_; + } + + bool IsInRefresh() const + { + return inRefresh_; + } + + void MarkNeedUpdateElement(bool needUpdateElement) + { + needUpdateElement_ = needUpdateElement; + } + + void SetScrollBar(const RefPtr& scrollBar) + { + scrollBar_ = scrollBar; + } + + RefPtr GetScrollBar() const + { + return scrollBar_; + } + + void SetRightToLeft(bool rightToLeft) + { + rightToLeft_ = rightToLeft; + } + + bool GetRightToLeft() const + { + return rightToLeft_; + } + + void SetUpdateEffect(bool updateEffect) + { + updateEffect_ = updateEffect; + } + + bool GetUpdateEffect() const + { + return updateEffect_; + } + + void UpdateListItemIndex() + { + int32_t index = 0; // Update the item index by the order in list. + for (const auto& iter : GetChildren()) { + auto listItemComponent = ListItemComponent::GetListItem(iter); + if (listItemComponent) { + listItemComponent->SetIndex(index++); + } + } + } + + void SetPageReady(bool pageReady) + { + pageReady_ = pageReady; + } + + bool GetPageReady() const + { + return pageReady_; + } + + bool IsCenterLayout() const + { + return isCenterLayout_; + } + + void MarkCenterLayout(bool isCenter) + { + isCenterLayout_ = isCenter; + } + + bool IsItemScale() const + { + return itemScale_; + } + + void SetItemScale(bool itemScale) + { + itemScale_ = itemScale; + } + + const RefPtr& GetRotationController() const + { + return rotationController_; + } + + void SetChainProperty(const SpringChainProperty& property) + { + chainProperty_ = property; + } + + const SpringChainProperty& GetChainProperty() const + { + return chainProperty_; + } + + void SetOverSpringProperty(const RefPtr& property) + { + if (property && property->IsValid()) { + overSpringProperty_ = property; + } + } + + void SetOverSpringProperty(double mass, double stiffness, double damping) + { + overSpringProperty_ = AceType::MakeRefPtr(mass, stiffness, damping); + } + + const RefPtr& OverSpringProperty() + { + return overSpringProperty_; + } + +private: + EventMarker onRequestItem_; + EventMarker onScroll_; + EventMarker onScrollBottom_; + EventMarker onScrollTop_; + EventMarker onScrollEnd_; + EventMarker onScrollTouchUp_; + Dimension gradientWidth_; + Color backgroundColor_ = Color::WHITE; + FlexDirection direction_ = FlexDirection::COLUMN; + bool scrollPage_ { false }; + bool chainAnimation_ { false }; + int32_t totalCount_ { 0 }; + int32_t cachedCount_ { 1 }; // the default value of cached child number. + int32_t beginIndex_ { LIST_PARAM_INVAID }; + int32_t endIndex_ { LIST_PARAM_INVAID }; + int32_t repeatedLength_ { 0 }; + int32_t indexOffset_ { 0 }; + RefPtr positionController_; + RefPtr rotationController_ = AceType::MakeRefPtr(); + RefPtr scrollEffect_; + FlexAlign flexAlign_ { FlexAlign::STRETCH }; + double width_ { DEFAULT_GRID_WIDTH }; + double height_ { DEFAULT_GRID_HEIGHT }; + int32_t columnCount_ { DEFAULT_COLUMN_COUNT }; + int32_t columnExtent_ { DEFAULT_COLUMN_EXTENT }; + Dimension itemExtent_; + bool needPreBuild_ = false; + bool needUpdateElement_ = false; + bool rightToLeft_ = false; + RefPtr scrollBar_; + bool inRefresh_ = false; + bool supportItemCenter_ = false; + bool updateEffect_ = false; + bool pageReady_ = false; + bool itemScale_ = false; + bool isCenterLayout_ = false; + SpringChainProperty chainProperty_; + RefPtr overSpringProperty_; + WeakPtr listElement_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_LIST_COMPONENT_H diff --git a/frameworks/core/components/list/list_element.cpp b/frameworks/core/components/list/list_element.cpp new file mode 100644 index 00000000..4940b2e4 --- /dev/null +++ b/frameworks/core/components/list/list_element.cpp @@ -0,0 +1,982 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/list/list_element.h" + +#include "base/log/log.h" +#include "base/utils/utils.h" +#include "core/common/frontend.h" +#include "core/components/list/list_component.h" +#include "core/components/list/list_item_component.h" +#include "core/components/list/list_item_element.h" +#include "core/components/list/render_list.h" +#include "core/components/list/render_list_item.h" +#include "core/components/proxy/render_item_proxy.h" +#include "core/components/scroll/render_multi_child_scroll.h" +#include "core/event/ace_event_helper.h" +#include "core/pipeline/base/composed_element.h" + +namespace OHOS::Ace { +namespace { + +std::string BuildEventParam(int32_t beginIndex, int32_t endIndex) +{ + return std::string("{\"begin\":") + .append(std::to_string(beginIndex)) + .append(",\"end\":") + .append(std::to_string(endIndex)) + .append("}"); +} + +} // namespace + +RefPtr ListElement::CreateRenderNode() +{ + RefPtr node = ComponentGroupElement::CreateRenderNode(); + renderList_ = AceType::DynamicCast(node); + auto multiChildScroll = AceType::DynamicCast(RenderMultiChildScroll::Create()); + multiChildScroll->AddChild(renderList_); + renderList_->RegisterRequestItemsCallback( + [weakListElement = AceType::WeakClaim(this)](int32_t index, int32_t count) { + auto listElement = weakListElement.Upgrade(); + if (listElement) { + listElement->RetrieveListData(index, count); + } + }); + + renderList_->RegisterRecycleByRangeCallback( + [weakListElement = AceType::WeakClaim(this)](int32_t& from, int32_t& to) -> bool { + auto listElement = weakListElement.Upgrade(); + if (listElement) { + listElement->RecycleByRange(from, to); + return true; + } + return false; + }); + + renderList_->RegisterRecycleByItemsCallback( + [weakListElement = AceType::WeakClaim(this)](const std::vector& items) -> bool { + auto listElement = weakListElement.Upgrade(); + if (listElement) { + listElement->RecycleByItems(items); + return true; + } + return false; + }); + + renderList_->RegisterBuildItemCallback( + [weakListElement = AceType::WeakClaim(this)](int32_t index) -> bool { + auto listElement = weakListElement.Upgrade(); + if (listElement) { + return listElement->BuildListData(index); + } + return false; + }); + + renderList_->RegisterOnRefreshedCallback( + [weakListElement = AceType::WeakClaim(this)]() { + auto listElement = weakListElement.Upgrade(); + if (listElement) { + listElement->OnRefreshed(); + } + }); + + InitStickyFunc(); + + return multiChildScroll; +} + +void ListElement::RetrieveListData(int32_t beginIndex, int32_t endIndex) +{ + + if (requestItemAsync_ && !building_) { + std::string command("\""); + command.append(LIST_EVENT_REQUEST_ITEM); + command.append("\","); + command.append(BuildEventParam(beginIndex, endIndex)); + requestItemAsync_(command); + building_ = true; + } + + if (endIndex > 0) { + std::string param = BuildEventParam(beginIndex, endIndex); + LOGD("RetrieveListData [begin = %{public}d, end = %{public}d)", beginIndex, endIndex); + std::string result; + if (requestItem_) { + requestItem_(param, result); + } + } +} + +bool ListElement::BuildListDataFromChild(int32_t index) +{ + if (beginIndex_ != LIST_PARAM_INVAID && endIndex_ != LIST_PARAM_INVAID) { + for (auto itemIter = itemComponents_.begin(); itemIter != itemComponents_.end(); ++itemIter) { + auto itemComponent = ListItemComponent::GetListItem(*itemIter); + if (!itemComponent) { + LOGE("itemComponent exist but is null"); + return false; + } + if (index == itemComponent->GetIndex()) { + return BuildListComponent(*itemIter); + } + } + LOGW("list-item component (index=%{public}d) not in cache!", index); + return false; + } + // now just for prebuild more items. + preBuildCount_ = itemComponents_.size(); + if (index >= preBuildCount_ - cachedCount_ && requestItemAsync_) { + RetrieveListData(0, preBuildCount_ + cachedCount_); + } + + if (index < 0 || index >= preBuildCount_) { + LOGE("invalid index: %{public}d, size: %{public}d", index, preBuildCount_); + return false; + } + + auto item = itemComponents_[index]; + return BuildListComponent(item); +} + +bool ListElement::BuildListData(int32_t index) +{ + if (BuildListDataFromChild(index)) { + return true; + } + + bool result = false; + auto iter = newListItemsMap_.find(index); + if (iter != newListItemsMap_.end()) { + auto component = iter->second; + newListItemsMap_.erase(iter); + result = BuildListComponent(component); + } + + return result; +} + +void ListElement::InitStickyFunc() +{ + renderList_->RegisterStickyItemBuilderCallback( + [weakListElement = AceType::WeakClaim(this)](int32_t index, bool next) -> RefPtr { + auto listElement = weakListElement.Upgrade(); + if (listElement) { + return listElement->BuildStickyItem(index, next); + } else { + return nullptr; + } + }); + + renderList_->RegisterStickyItemSearcherCallback( + [weakListElement = AceType::WeakClaim(this)](int32_t index) -> int32_t { + auto listElement = weakListElement.Upgrade(); + if (listElement && listElement->SupportStickyItem()) { + return listElement->SearchStickyItem(index); + } else { + return -1; + } + }); +} + +void ListElement::ResetStickyItem() +{ + if (!stickyElement_) { + return; + } + auto sticky = stickyElement_->GetRenderNode()->GetParent().Upgrade(); + auto listItem = RenderListItem::GetRenderListItem(sticky); + if (listItem) { + listItem->SetIndex(-1); + } +} + +RefPtr ListElement::BuildStickyItem(int32_t index, bool next) +{ + RefPtr component; + for (auto& item : itemComponents_) { + auto itemComponent = ListItemComponent::GetListItem(item); + if (itemComponent && itemComponent->GetIndex() == index) { + component = item; + break; + } + } + if (!component) { + LOGE("Build sticky item for index:%{public}d next:%{public}d failed", index, next); + return nullptr; + } + + RefPtr sticky; + if (next) { + stickyNextElement_ = UpdateChild(stickyNextElement_, component); + if (!stickyNextElement_) { + LOGE("get second sticky element failed."); + return nullptr; + } + sticky = stickyNextElement_; + } else { + stickyElement_ = UpdateChild(stickyElement_, component); + if (!stickyElement_) { + LOGE("get first sticky element failed."); + return nullptr; + } + sticky = stickyElement_; + } + RefPtr renderItem = AceType::DynamicCast(sticky->GetRenderNode()); + if (renderItem && renderList_) { + renderItem->SetScrollController(renderList_->GetController()); + renderItem->SetClonedBySticky(true); + renderItem->SetNeedUpdateAccessibility(false); + } + return sticky->GetRenderNode()->GetParent().Upgrade(); +} + +int32_t ListElement::SearchStickyItem(int32_t index) +{ + for (auto iter = itemComponents_.rbegin(); iter != itemComponents_.rend(); ++iter) { + auto item = ListItemComponent::GetListItem(*iter); + if (item && item->GetIndex() <= index && item->GetSticky()) { + return item->GetIndex(); + } + } + return INVALID_INDEX; +} + +bool ListElement::SupportStickyItem() const +{ + if (!renderList_) { + LOGE("Render is null, do not support sticky item."); + return false; + } + return renderList_->SupportStickyItem(); +} + +RefPtr ListElement::GetCachedElement(const std::string& type) +{ + // Find same type element. + auto bucket = cacheBuckets_.find(type); + + RefPtr element; + if (bucket != cacheBuckets_.end() && !bucket->second.empty()) { + element = bucket->second.front(); + bucket->second.pop_front(); + LOGD("[recycle] pop element from bucket. now size: %{public}zu", bucket->second.size()); + } + + return element; +} + +void ListElement::RemoveComposedChildFromMap(RefPtr element) +{ + // Remove all composed element children in list-item from pipeline context composed element map. + // Make sure updating list-item can only be done by using list-item composed id. + if (element) { + const auto& children = element->GetChildren(); + for (const auto& child : children) { + const auto& composedChild = AceType::DynamicCast(child); + if (composedChild) { + composedChild->Detached(); + } + RemoveComposedChildFromMap(child); + } + } +} + +void ListElement::UpdateListItemElement(const RefPtr& component) +{ + auto itemComponent = ListItemComponent::GetListItem(component); + if (!itemComponent) { + LOGE("itemComponent exist but is null"); + return; + } + + // Update New Component to Element. + int32_t index = itemComponent->GetIndex(); + auto item = itemElements_.find(index); + if (item != itemElements_.end() && item->second) { + item->second->SetNewComponent(component); + } +} + +bool ListElement::BuildListComponent(const RefPtr& component) +{ + int32_t slot = -1; + auto itemComponent = ListItemComponent::GetListItem(component); + if (!itemComponent) { + LOGE("itemComponent exist but is null"); + return false; + } + + RefPtr element; + int32_t index = itemComponent->GetIndex(); + + if (itemComponent->TestFlag(LIST_ITEM_FLAG_FROM_CHILD)) { + auto item = itemElements_.find(index); + if (item != itemElements_.end()) { + element = item->second; + } + } + + if (!element) { + element = GetCachedElement(itemComponent->GetType()); + } + + if (element) { + Element::AddChild(element, slot); + if (!element->GetRenderNode()) { + LOGW("no render node in this recycled element"); + element = nullptr; + } + } + + LOGD("build item index:%{public}d type:%{public}s", index, itemComponent->GetType().c_str()); + element = UpdateChild(element, component, slot); + if (itemComponent->TestFlag(LIST_ITEM_FLAG_DYNAMIC)) { + RemoveComposedChildFromMap(element); + } + + if (!element) { + LOGE("no element found!"); + return false; + } + + // Get element proxy. + auto parent = element->GetRenderNode()->GetParent(); + auto itemProxy = parent.Upgrade(); + if (!itemProxy) { + LOGE("itemProxy is null"); + return false; + } + + // Add list item element to focus tree. + auto itemElement = ListItemElement::GetListItem(element); + if (itemElement) { + itemElement->AddToFocus(); + } + + itemElements_[index] = element; + renderList_->AddListItem(index, itemProxy); + itemProxy->SetHidden(false); + + // refresh focus + auto pipelineContext = context_.Upgrade(); + if (pipelineContext) { + pipelineContext->RefreshStageFocus(); + } + + return true; +} + +void ListElement::PreBuildListItems(int32_t index, const std::list>& newComponent, int32_t from) +{ + for (const auto& child : newComponent) { + if (index >= preBuildCount_) { + auto itemComponent = ListItemComponent::GetListItem(child); + if (!itemComponent) { + LOGE("cast to ListItemComponent failed"); + continue; + } + itemComponent->SetIndex(index); + itemComponent->SetFlags(from); + newListItemsMap_.emplace(std::make_pair(index, itemComponent)); + } + index++; + } + LOGD("PreBuildListItems: index:%{public}d, count:%{public}d", index, preBuildCount_); + preBuildCount_ = index; +} + +void ListElement::ReleaseRecycledListItem(int32_t from, int32_t to) +{ + for (int32_t i = from; i <= to; ++i) { + auto item = itemElements_.find(i); + if (item == itemElements_.end()) { + continue; + } + + auto itemElement = ListItemElement::GetListItem(item->second); + if (!itemElement) { + LOGW("not item element(%{public}s)", AceType::TypeName(item->second)); + continue; + } + + auto compose = AceType::DynamicCast(item->second); + if (!compose) { + LOGW("not composed element(%{public}s)", AceType::TypeName(item->second)); + continue; + } + + auto proxyNode = compose->GetParentRenderNode(); + if (!proxyNode) { + LOGW("composed ParentRenderNode is null."); + continue; + } + + // RemoveChild will reset render node in this element. + // Here we save and restore its render node for recycling. + Element::RemoveChild(item->second); + if (!itemElement->IsCurrentFocus()) { + // Remove list item element from focus tree. + auto focusNode = AceType::DynamicCast(itemElement); + if (focusNode) { + focusNode->RemoveSelf(); + } + } + proxyNode->Unmount(); + itemElement->AttachRenderNode(proxyNode); + + // Hidden the release node for stop it's layout and paint. + proxyNode->SetHidden(true); + itemElements_.erase(item); + } +} + +void ListElement::RecycleByItems(const std::vector& items) +{ + if (!itemElements_.empty()) { + for (auto item : items) { + if (RecycleItem(item)) { + ReleaseRecycledListItem(item, item); + } + } + } + + std::map> newItems; + auto iter = itemElements_.begin(); + while (iter != itemElements_.end()) { + auto item = iter->second; + auto proxyNode = item->GetRenderNode(); + auto listItemNode = RenderListItem::GetRenderListItem(proxyNode); + if (listItemNode) { + int32_t index = listItemNode->GetIndex(); + auto listItemElement = ListItemElement::GetListItem(item); + if (listItemElement) { + listItemElement->SetIndex(index); + } + newItems.emplace(std::make_pair(index, item)); + } + + ++iter; + } + + itemElements_.clear(); + itemElements_.swap(newItems); +} + +bool ListElement::RemoveFromCache(const RefPtr& item) +{ + auto itemElement = ListItemElement::GetListItem(item); + if (!itemElement) { + return false; + } + + auto bucket = cacheBuckets_.find(itemElement->GetItemType()); + if (bucket == cacheBuckets_.end()) { + return false; + } + + auto& elements = bucket->second; + elements.remove(item); + return true; +} + +bool ListElement::RecycleItem(int32_t index) +{ + auto element = itemElements_.find(index); + if (element == itemElements_.end()) { + return false; + } + auto itemElement = ListItemElement::GetListItem(element->second); + if (!itemElement) { + return false; + } + auto bucket = cacheBuckets_.find(itemElement->GetItemType()); + if (bucket != cacheBuckets_.end()) { + auto& elements = bucket->second; + size_t size = elements.size(); + if (size < bucketSize_) { + LOGD("[recycle] bucket size is: %{public}zu, add it", size); + elements.emplace_back(element->second); + } else { + LOGD("[recycle] recycle element: bucket size is too large: %{public}zu, drop it", size); + } + } else { + std::list> newBucket { element->second }; + cacheBuckets_.emplace(std::make_pair(itemElement->GetItemType(), newBucket)); + LOGD("[recycle] recycle element: new bucket, type: %{public}s", itemElement->GetItemType().c_str()); + } + return true; +} + +void ListElement::RecycleByRange(int32_t& from, int32_t& to) +{ + int32_t firstRecycled = -1; + int32_t lastRecycled = to; + LOGD("[recycle] recycle list items from: %{public}d, to: %{public}d", from, to); + + if (!itemElements_.empty()) { + int32_t start = std::max(itemElements_.begin()->first, from); + int32_t end = std::min(itemElements_.rbegin()->first, to); + for (int32_t i = start; i <= end; ++i) { + if (!RecycleItem(i)) { + continue; + } + if (firstRecycled < 0) { + firstRecycled = i; + } + lastRecycled = i; + } + } + + // Release all recycled items. + from = firstRecycled; + to = lastRecycled; + if (from >= 0) { + ReleaseRecycledListItem(from, to); + } +} + +void ListElement::OnRefreshed() +{ + needRefresh_ = false; + RefPtr group = AceType::DynamicCast(listComponent_); + if (!group || group->GetChildren().empty()) { + listComponent_ = nullptr; + return; + } + + int32_t index = 0; + auto children = group->GetChildren(); + auto iter = children.begin(); + while (iter != children.end()) { + auto listItemComponent = ListItemComponent::GetListItem(*iter); + if (listItemComponent) { + if (listItemComponent->GetOperation() == LIST_ITEM_OP_REMOVE) { + group->ComponentGroup::RemoveChild(*iter); + } else { + listItemComponent->SetOperation(LIST_ITEM_OP_NONE); + listItemComponent->RemoveFlag(LIST_ITEM_FLAG_IN_RANGE); + listItemComponent->SetIndex(index++); + } + } + ++iter; + } + + listComponent_ = nullptr; + + for (auto& item : itemElements_) { + auto listItemElement = ListItemElement::GetListItem(item.second); + if (listItemElement) { + listItemElement->RemoveFlag(LIST_ITEM_FLAG_IN_RANGE); + } + } +} + +inline int32_t ListElement::AddToCache(RefPtr item, int32_t index, bool isDynamic) +{ + auto listItemComponent = ListItemComponent::GetListItem(item); + if (listItemComponent && listItemComponent->GetOperation() != LIST_ITEM_OP_REMOVE) { + listItemComponent->SetOperation(LIST_ITEM_OP_NONE); + listItemComponent->RemoveFlag(LIST_ITEM_FLAG_IN_RANGE); + listItemComponent->SetIndex(index); + if (isDynamic) { + listItemComponent->AddFlag(LIST_ITEM_FLAG_DYNAMIC); + } + itemComponents_.emplace_back(item); + UpdateListItemElement(item); + return index + 1; + } + return index; +} + +void ListElement::UpdateCachedComponent() +{ + // Normally, components are not saved in element. + // However, list-element may need caching list-item-components to improve the speed of sliding. + RefPtr group = AceType::DynamicCast(component_); + if (!group) { + LOGW("invalid input component!"); + return; + } + if (beginIndex_ == LIST_PARAM_INVAID || endIndex_ == LIST_PARAM_INVAID || repeatedLength_ == LIST_PARAM_INVAID) { + LOGW("invalid list parameter"); + return; + } + + itemComponents_.clear(); + auto children = group->GetChildren(); + auto child = children.begin(); + int32_t index = 0; + for (index = 0; index < indexOffset_ && child != children.end(); ++child) { + index = AddToCache(*child, index); + } + for (index = beginIndex_ + indexOffset_; index < endIndex_ + indexOffset_ && child != children.end(); ++child) { + index = AddToCache(*child, index, true); + } + renderList_->SyncIndex(beginIndex_ + indexOffset_, endIndex_ + indexOffset_); + maxCount_ = index; + tailLength_ = 0; + if (repeatedLength_ != LIST_LENGTH_INFINITE) { + for (index = repeatedLength_ + indexOffset_; child != children.end(); ++child) { + index = AddToCache(*child, index); + ++tailLength_; + } + if (endIndex_ == repeatedLength_) { + maxCount_ += tailLength_; + } + length_ = indexOffset_ + repeatedLength_ + tailLength_; + } else { + length_ = LIST_LENGTH_INFINITE; + } + renderList_->SetLength(length_); +} + +void ListElement::UpdateListElement() +{ + bool rebuild = false; + int32_t tailIndex = -1; + if (needRefresh_) { + renderList_->MarkNeedRefresh(); + } + + GetRefreshItems(rebuild, tailIndex); + if (rebuild) { + LOGD("rebuild elements"); + ResetStickyItem(); + RebuildElements(tailIndex); + renderList_->MarkNeedRefresh(); + needRefresh_ = true; + } else { + LOGD("patch elements"); + PatchElements(); + } +} + +void ListElement::GetRefreshItems(bool& rebuild, int32_t& tailIndex) +{ + needRefreshItems_.clear(); + RefPtr group = AceType::DynamicCast(component_); + if (!group) { + return; + } + + int32_t currentMin = renderList_->GetCurrentMinIndex(); + int32_t currentMax = renderList_->GetCurrentMaxIndex() + 1; + const auto& components = group->GetChildren(); + + LOGD("currentMin: %{public}d, currentMax: %{public}d, components.size(): %{public}lu", + currentMin, currentMax, components.size()); + int32_t head = 0; + bool needRefresh = true; + bool inRange = false; + itemComponents_.clear(); + for (const auto& component : components) { + auto item = ListItemComponent::GetListItem(component); + if (!item) { + LOGW("item is not list item component"); + continue; + } + + int32_t op = item->GetOperation(); + if (op != LIST_ITEM_OP_REMOVE) { + itemComponents_.emplace_back(component); + } + + if (!needRefresh) { + continue; + } + + if (op != LIST_ITEM_OP_ADD) { + if (item->GetIndex() == currentMax) { + needRefresh = false; + } else if (item->GetIndex() == currentMin) { + inRange = true; + tailIndex = head + currentMin - 1; + } + } + + if (!inRange) { + if (op == LIST_ITEM_OP_ADD) { + head++; + } else if (op == LIST_ITEM_OP_REMOVE) { + head--; + } + if (op != LIST_ITEM_OP_NONE) { + needRefreshItems_.emplace_back(component); + rebuild = true; + } + } else { + tailIndex++; + item->AddFlag(LIST_ITEM_FLAG_IN_RANGE); + needRefreshItems_.emplace_back(component); + if (op != LIST_ITEM_OP_NONE) { + rebuild = true; + } + } + } + maxCount_ = itemComponents_.size(); +} + +void ListElement::RebuildElements(int32_t tailIndex) +{ + LOGD("tailIndex: %{public}d", tailIndex); + listComponent_ = component_; + auto items = itemElements_; + renderList_->RecycleAllChild(); + int32_t index = tailIndex; + auto riter = needRefreshItems_.rbegin(); + while (index >= 0 && riter != needRefreshItems_.rend()) { + RefPtr updatedChild; + auto item = ListItemComponent::GetListItem(*riter); + if (item) { + if (item->TestFlag(LIST_ITEM_FLAG_IN_RANGE) && item->GetOperation() != LIST_ITEM_OP_ADD) { + RefPtr oldElement; + auto oldElementIter = items.find(item->GetIndex()); + if (oldElementIter != items.end()) { + oldElement = oldElementIter->second; + RemoveFromCache(oldElement); + } + + item->SetIndex(index); + if (oldElement) { + Element::AddChild(oldElement); + } + updatedChild = UpdateChild(oldElement, *riter); + } else { + item->SetIndex(index); + updatedChild = UpdateChild(nullptr, *riter); + } + + // Get item proxy. + auto parent = updatedChild->GetRenderNode()->GetParent(); + auto itemProxy = parent.Upgrade(); + if (!itemProxy) { + LOGE("itemProxy is null"); + continue; + } + + // Add list item element to focus tree. + auto itemElement = ListItemElement::GetListItem(updatedChild); + if (itemElement) { + itemElement->AddToFocus(); + } + + itemElements_[index] = updatedChild; + renderList_->AddListItem(index, itemProxy); + itemProxy->SetHidden(false); + } + --index; + ++riter; + } +} + +void ListElement::PatchElements() +{ + if (needRefreshItems_.empty()) { + LOGE("need refresh is empty"); + return; + } + + RefPtr group = AceType::DynamicCast(component_); + if (!group || group->GetChildren().empty()) { + return; + } + + auto startItem = ListItemComponent::GetListItem(needRefreshItems_.front()); + if (!startItem) { + LOGE("start item is not list item"); + return; + } + + int32_t start = startItem->GetIndex(); + + auto children = group->GetChildren(); + auto iter = children.begin(); + std::advance(iter, start); + while (iter != children.end()) { + auto listItemComponent = ListItemComponent::GetListItem(*iter); + if (listItemComponent) { + if (listItemComponent->GetOperation() == LIST_ITEM_OP_REMOVE) { + group->RemoveChild(*iter); + } else { + listItemComponent->SetOperation(LIST_ITEM_OP_NONE); + listItemComponent->RemoveFlag(LIST_ITEM_FLAG_IN_RANGE); + listItemComponent->SetIndex(start++); + } + } + ++iter; + } +} + +void ListElement::PerformBuild() +{ + building_ = false; + LOGD("pre max: %{public}d, cur max: %{public}d", renderList_->GetMaxCount(), maxCount_); + renderList_->SetMaxCount(maxCount_); + if (beginIndex_ != LIST_PARAM_INVAID && endIndex_ != LIST_PARAM_INVAID) { + if (endIndex_ == 0 && repeatedLength_ != LIST_PARAM_INVAID && repeatedLength_ != 0) { + LOGD("request initial children, cacheCount: %{public}d", cachedCount_); + RetrieveListData(0, cachedCount_); + } + } else { + if (maxCount_ == 0) { + LOGD("request initial children, cacheCount: %{public}d", cachedCount_); + RetrieveListData(0, cachedCount_); + } + } +} + +void ListElement::Update() +{ + RefPtr list = AceType::DynamicCast(component_); + if (!list) { + return; + } + + auto context = context_.Upgrade(); + if (context && context->GetFrontend() && context->GetFrontendType() == FrontendType::JS) { + requestItemAsync_ = AceAsyncEvent::Create(list->GetOnRequestItem(), context_); + } else { + requestItem_ = + AceSyncEvent::Create(list->GetOnRequestItem(), context_); + } + cachedCount_ = list->GetCachedCount(); + beginIndex_ = list->GetBeginIndex(); + endIndex_ = list->GetEndIndex(); + repeatedLength_ = list->GetRepeatedLength(); + indexOffset_ = list->GetIndexOffset(); + + if (beginIndex_ != LIST_PARAM_INVAID && endIndex_ != LIST_PARAM_INVAID) { + UpdateCachedComponent(); + ComponentGroupElement::Update(); + } else { + ComponentGroupElement::Update(); + if (list->NeedUpdateElement()) { + LOGD("update list element"); + UpdateListElement(); + list->MarkNeedUpdateElement(false); + } else if (list->NeedPreBuild() && newListItemsMap_.empty()) { + LOGD("update from json"); + RefPtr group = AceType::DynamicCast(component_); + if (group) { + const auto& children = group->GetChildren(); + PreBuildListItems(0, children, LIST_ITEM_FLAG_FROM_CHILD); + maxCount_ = list->GetTotalCount(); + } + } + } +} + +void ListElement::Apply(const RefPtr& child) +{ + if (!child) { + LOGE("Element child is null"); + return; + } + + if (!renderNode_) { + LOGE("RenderElement don't have a render node"); + return; + } + + RefPtr proxy; + if (child->GetType() == RENDER_ELEMENT) { + proxy = RenderItemProxy::Create(); + // Directly attach the RenderNode if child is RenderElement. + RefPtr renderChild = AceType::DynamicCast(child); + if (renderChild) { + proxy->AddChild(renderChild->GetRenderNode()); + } + } else if (child->GetType() == COMPOSED_ELEMENT) { + auto listItemElement = ListItemElement::GetListItem(child); + if (listItemElement) { + proxy = listItemElement->GetProxyRenderNode(); + } + if (!proxy) { + proxy = RenderItemProxy::Create(); + } + // If child is ComposedElement, just set parent render node. + RefPtr composeChild = AceType::DynamicCast(child); + if (composeChild) { + composeChild->SetParentRenderNode(proxy); + } + } + proxy->Attach(context_); + + renderList_->AddChild(proxy); +} + +bool ListElement::RequestNextFocus(bool vertical, bool reverse, const Rect& rect) +{ + LOGD("[ListFocus]RequestNextFocus Vertical:%{public}d, Reverse:%{public}d.", vertical, reverse); + bool ret = false; + while (!ret) { + int32_t focusIndex = renderList_->RequestNextFocus(vertical, reverse); + if (focusIndex < 0) { + LOGW("No item can focus."); + return false; + } + for (auto focusNode : GetChildrenList()) { + auto listItem = AceType::DynamicCast(focusNode); + if (listItem && listItem->GetIndex() == focusIndex) { + // If current Node can not obtain focus, move to next. + if (!focusNode->IsFocusable()) { + continue; + } + renderList_->CalculateFocusIndexPosition(); + ret = focusNode->RequestFocusImmediately(); + break; + } + } + } + return ret; +} + +void ListElement::MoveItemToViewPort(double position) +{ + if (!needMoveFocusItem_) { + return; + } + LOGD("[ListFocus]MoveItemToViewPort position:%{public}.1lf.", position); + renderList_->MoveItemToViewPort(position); + needMoveFocusItem_ = false; +} + +void ListElement::MoveItemGroupToViewPort(double position, double size) +{ + if (!needMoveFocusItem_) { + return; + } + LOGD("[ListFocus]MoveItemGroupToViewPort position:%{public}.1lf.", position); + renderList_->MoveItemGroupToViewPort(position, size); + needMoveFocusItem_ = false; +} + +void ListElement::SetGroupState(int32_t expandIndex, bool expand) +{ + renderList_->SetGroupState(expandIndex, expand); +} + +void ListElement::AddItemGroupFocusIndex(int32_t groupIndex, int32_t groupFocusIndex) +{ + renderList_->GetLayoutManager()->AddItemGroupFocusIndex(groupIndex, groupFocusIndex); +} + +int32_t ListElement::GetItemGroupFocusIndex(int32_t groupIndex) +{ + return renderList_->GetLayoutManager()->GetItemGroupFocusIndex(groupIndex); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/list/list_element.h b/frameworks/core/components/list/list_element.h new file mode 100644 index 00000000..dd6d3e0a --- /dev/null +++ b/frameworks/core/components/list/list_element.h @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_LIST_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_LIST_ELEMENT_H + +#include + +#include "core/components/list/render_list.h" +#include "core/pipeline/base/component_group_element.h" + +namespace OHOS::Ace { + +class ListElement : public ComponentGroupElement, public FocusGroup { + DECLARE_ACE_TYPE(ListElement, ComponentGroupElement, FocusGroup); + +public: + void PerformBuild() override; + void Update() override; + + virtual bool RequestNextFocus(bool vertical, bool reverse, const Rect& rect) override; + + void MoveItemToViewPort(double position); + + void MoveItemGroupToViewPort(double position, double size); + + void SetGroupState(int32_t expandIndex, bool expand); + + void AddItemGroupFocusIndex(int32_t groupIndex, int32_t groupFocusIndex); + + int32_t GetItemGroupFocusIndex(int32_t groupIndex); + + void NeedMoveFocusItem(bool need) + { + needMoveFocusItem_ = need; + } + +private: + RefPtr CreateRenderNode() override; + void Apply(const RefPtr&) override; + + bool RecycleItem(int32_t index); + void RecycleByRange(int32_t& from, int32_t& to); + void RecycleByItems(const std::vector& items); + void ReleaseRecycledListItem(int32_t from, int32_t to); + + bool BuildListDataFromChild(int32_t index); + bool BuildDetachedFocusComponent(); + void PreBuildListItems(int32_t index, const std::list>& newComponent, int32_t from); + void RetrieveListData(int32_t beginIndex, int32_t endIndex); + bool BuildListData(int32_t index); + bool BuildListComponent(const RefPtr& component); + void UpdateListItemElement(const RefPtr& component); + RefPtr BuildStickyItem(int32_t index, bool next); + int32_t SearchStickyItem(int32_t index); + bool SupportStickyItem() const; + void ResetStickyItem(); + void InitStickyFunc(); + + RefPtr GetCachedElement(const std::string& type); + bool RemoveFromCache(const RefPtr& item); + + void UpdateListElement(); + void GetRefreshItems(bool& rebuild, int32_t& index); + void RebuildElements(int32_t tailIndex); + void PatchElements(); + void OnRefreshed(); + + void UpdateCachedComponent(); + int32_t AddToCache(RefPtr item, int32_t index, bool isDynamic = false); + void RemoveComposedChildFromMap(RefPtr element); + + RefPtr renderList_; + + using RequestItem = std::function; + RequestItem requestItem_; + using RequestItemAsync = std::function; + RequestItemAsync requestItemAsync_; + + int32_t maxCount_ = 0; + int32_t cachedCount_ = 0; + int32_t beginIndex_ = LIST_PARAM_INVAID; + int32_t endIndex_ = LIST_PARAM_INVAID; + int32_t repeatedLength_ = 0; + // For the case of dynamically loading list-items, length_ = indexOffset_ + repeatedLength_ + tailLength_; + int32_t length_ = 0; + int32_t indexOffset_ = 0; + int32_t tailLength_ = 0; + + int32_t preBuildCount_ = 0; + std::list> newListItems_; + std::map> newListItemsMap_; + std::vector> needRefreshItems_; + std::vector> itemComponents_; + RefPtr listComponent_; + bool needRefresh_ = false; + + size_t bucketSize_ = 6; // default cache size + bool building_ = false; + std::map> itemElements_; + std::map>> cacheBuckets_; + + bool needMoveFocusItem_ = false; + RefPtr stickyElement_; + RefPtr stickyNextElement_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_LIST_ELEMENT_H diff --git a/frameworks/core/components/list/list_item_component.cpp b/frameworks/core/components/list/list_item_component.cpp new file mode 100644 index 00000000..0bf07123 --- /dev/null +++ b/frameworks/core/components/list/list_item_component.cpp @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/list/list_item_component.h" + +#include "core/components/list/list_item_element.h" +#include "core/components/list/render_list_item.h" + +namespace OHOS::Ace { + +ListItemComponent::ListItemComponent(const std::string& type, const RefPtr& child) + : SoleChildComponent(child) +{ + type_ = type; +} + +RefPtr ListItemComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +RefPtr ListItemComponent::CreateRenderNode() +{ + return RenderListItem::Create(); +} + +RefPtr ListItemComponent::GetListItem(const RefPtr& component) +{ + RefPtr item = component; + while (item) { + auto itemComponent = AceType::DynamicCast(item); + if (itemComponent) { + return itemComponent; + } + + auto parent = AceType::DynamicCast(item); + if (!parent) { + return nullptr; + } + item = parent->GetChild(); + } + return nullptr; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/list/list_item_component.h b/frameworks/core/components/list/list_item_component.h new file mode 100644 index 00000000..1b83b2f9 --- /dev/null +++ b/frameworks/core/components/list/list_item_component.h @@ -0,0 +1,431 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_LIST_ITEM_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_LIST_ITEM_COMPONENT_H + +#include "base/utils/macros.h" +#include "core/animation/animation_pub.h" +#include "core/pipeline/base/constants.h" +#include "core/pipeline/base/element.h" +#include "core/pipeline/base/render_node.h" +#include "core/pipeline/base/sole_child_component.h" + +namespace OHOS::Ace { + +inline const Dimension DIVIDER_DEFAULT_HEIGHT = 1.0_vp; +inline constexpr int32_t LIST_ITEM_FLAG_FROM_CHILD = 2; +inline constexpr int32_t LIST_ITEM_FLAG_IN_RANGE = 4; +inline constexpr int32_t LIST_ITEM_FLAG_DYNAMIC = 8; +inline constexpr int32_t LIST_ITEM_OP_NONE = 0; +inline constexpr int32_t LIST_ITEM_OP_ADD = 1; +inline constexpr int32_t LIST_ITEM_OP_REMOVE = 2; + +enum class StickyMode { + NONE, + NORMAL, + OPACITY, +}; + +class ACE_EXPORT ListItemComponent : public SoleChildComponent { + DECLARE_ACE_TYPE(ListItemComponent, SoleChildComponent); + +public: + ListItemComponent(const std::string& type, const RefPtr& child); + ~ListItemComponent() override = default; + + RefPtr CreateElement() override; + RefPtr CreateRenderNode() override; + + const std::string& GetType() const + { + return type_; + } + + void SetType(const std::string& type) + { + type_ = type; + } + + void SetIndex(int32_t index) + { + index_ = index; + } + + int32_t GetIndex() const + { + return index_; + } + + void SetFlags(uint32_t flags) + { + flags_ = flags; + } + + uint32_t GetFlags() const + { + return flags_; + } + + void AddFlag(uint32_t flag) + { + flags_ |= flag; + } + + void RemoveFlag(uint32_t flag) + { + flags_ &= ~flag; + } + + bool TestFlag(uint32_t flag) const + { + return (flags_ & flag); + } + + void SetFocusAnimationColor(const Color& color) + { + focusAnimationColor_ = color; + } + + const Color& GetFocusAnimationColor() const + { + return focusAnimationColor_; + } + + void SetTopLeftRadius(const Radius& topLeftRadius) + { + if (!topLeftRadius.IsValid()) { + LOGE("Invalid radius x:%{public}lf, y:%{public}lf", topLeftRadius.GetX().Value(), + topLeftRadius.GetY().Value()); + return; + } + topLeftRadius_ = topLeftRadius; + LOGD("[Focus] SetTopLeftRadius, radius: %{public}lf", topLeftRadius_.GetX().Value()); + } + + void SetTopRightRadius(const Radius& topRightRadius) + { + if (!topRightRadius.IsValid()) { + LOGE("Invalid radius x:%{public}lf, y:%{public}lf", topRightRadius.GetX().Value(), + topRightRadius.GetY().Value()); + return; + } + topRightRadius_ = topRightRadius; + } + + void SetBottomLeftRadius(const Radius& bottomLeftRadius) + { + if (!bottomLeftRadius.IsValid()) { + LOGE("Invalid radius x:%{public}f, y:%{public}f", bottomLeftRadius.GetX().Value(), + bottomLeftRadius.GetY().Value()); + return; + } + bottomLeftRadius_ = bottomLeftRadius; + } + + void SetBottomRightRadius(const Radius& bottomRightRadius) + { + if (!bottomRightRadius.IsValid()) { + LOGE("Invalid radius x:%{public}f, y:%{public}f", bottomRightRadius.GetX().Value(), + bottomRightRadius.GetY().Value()); + return; + } + bottomRightRadius_ = bottomRightRadius; + } + + const Radius& GetTopLeftRadius() const + { + return topLeftRadius_; + } + + const Radius& GetTopRightRadius() const + { + return topRightRadius_; + } + + const Radius& GetBottomLeftRadius() const + { + return bottomLeftRadius_; + } + + const Radius& GetBottomRightRadius() const + { + return bottomRightRadius_; + } + + void SetColumnSpan(int32_t columnSpan) + { + if (columnSpan <= 0) { + return; + } + columnSpan_ = columnSpan; + } + + int32_t GetColumnSpan() const + { + return columnSpan_; + } + + void SetClickEventId(const EventMarker& clickEventId) + { + clickEventId_ = clickEventId; + } + + const EventMarker& GetClickEventId() const + { + return clickEventId_; + } + + void SetStickyEventId(const EventMarker& stickyEventId) + { + stickyEventId_ = stickyEventId; + } + + const EventMarker& GetStickyEventId() const + { + return stickyEventId_; + } + + static RefPtr GetListItem(const RefPtr& component); + + void SetOperation(int32_t op) + { + op_ = op; + } + + int32_t GetOperation() const + { + return op_; + } + + const std::string& GetIndexKey() const + { + return indexKey_; + } + + void SetIndexKey(const std::string& indexKey) + { + indexKey_ = indexKey; + } + + bool GetSticky() const + { + return sticky_; + } + + void SetSticky(bool sticky) + { + sticky_ = sticky; + } + + StickyMode GetStickyMode() const + { + return stickyMode_; + } + + void SetStickyMode(StickyMode mode) + { + stickyMode_ = mode; + } + + bool NeedVibrate() const + { + return needVibrate_; + } + + void MarkNeedVibrate(bool needVibrate) + { + needVibrate_ = needVibrate; + } + + bool IsTitle() const + { + return isTitle_; + } + + void MarkTitle(bool isTitle) + { + isTitle_ = isTitle; + } + + bool GetSupportClick() const + { + return supportClick_; + } + + void SetSupportClick(bool isClick) + { + supportClick_ = isClick; + } + + bool GetSupportScale() const + { + return supportScale_; + } + + void SetSupportScale(bool isScale) + { + supportScale_ = isScale; + } + + bool GetSupportOpacity() const + { + return supportOpacity_; + } + + void SetSupportOpacity(bool isOpacity) + { + supportOpacity_ = isOpacity; + } + + bool GetPrimary() const + { + return primary_; + } + + void SetPrimary(bool primary) + { + primary_ = primary; + } + + const Dimension& GetStickyRadius() const + { + return stickyRadius_; + } + + void SetStickyRadius(const Dimension& stickyRadius) + { + stickyRadius_ = stickyRadius; + } + + bool NeedDivider() const + { + return needDivider_; + } + + void MarkNeedDivider(bool needDivider) + { + needDivider_ = needDivider; + } + + const Dimension& GetDividerOrigin() const + { + return dividerOrigin_; + } + + void SetDividerOrigin(const Dimension& origin) + { + dividerOrigin_ = origin; + } + + const Dimension& GetDividerLength() const + { + return dividerLength_; + } + + void SetDividerLength(const Dimension& length) + { + dividerLength_ = length; + } + + const Color& GetDividerColor() const + { + return dividerColor_; + } + + void SetDividerColor(const Color& color) + { + dividerColor_ = color; + } + + const Dimension& GetDividerHeight() const + { + return dividerHeight_; + } + + void SetDividerHeight(const Dimension& dividerHeight) + { + dividerHeight_ = dividerHeight; + } + + bool IsActive() const + { + return isActive_; + } + + void SetIsActive(bool isActive) + { + isActive_ = isActive; + } + + void SetTransitionEffect(TransitionEffect transitionEffect) + { + transitionEffect_ = transitionEffect; + } + + TransitionEffect GetTransitionEffect() const + { + return transitionEffect_; + } + + FlexAlign GetAlignSelf() const + { + return alignSelf_; + } + + void SetAlignSelf(FlexAlign alignSelf) + { + alignSelf_ = alignSelf; + } + +private: + int32_t index_ = -1; // invalid index + int32_t columnSpan_ = DEFAULT_COLUMN_SPAN; + uint32_t flags_ = 0; + int32_t op_ = LIST_ITEM_OP_NONE; + FlexAlign alignSelf_ = FlexAlign::AUTO; + + std::string type_; + Color focusAnimationColor_ = Color::WHITE; + Radius topLeftRadius_; + Radius topRightRadius_; + Radius bottomLeftRadius_; + Radius bottomRightRadius_; + std::string indexKey_; + bool needVibrate_ = true; + bool supportScale_ = true; + bool supportOpacity_ = true; + bool supportClick_ = true; + bool sticky_ = false; + bool isTitle_ = false; + StickyMode stickyMode_ = StickyMode::NONE; + Dimension stickyRadius_; + bool primary_ = false; + bool needDivider_ = false; + bool isActive_ = false; + Dimension dividerOrigin_; + Dimension dividerLength_; + Dimension dividerHeight_ = DIVIDER_DEFAULT_HEIGHT; + Color dividerColor_; + + EventMarker clickEventId_; + EventMarker stickyEventId_; + + TransitionEffect transitionEffect_ = TransitionEffect::NONE; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_LIST_ITEM_COMPONENT_H diff --git a/frameworks/core/components/list/list_item_element.cpp b/frameworks/core/components/list/list_item_element.cpp new file mode 100644 index 00000000..10d0cbe8 --- /dev/null +++ b/frameworks/core/components/list/list_item_element.cpp @@ -0,0 +1,179 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/list/list_item_element.h" + +#include "core/components/list/list_element.h" +#include "core/components/list/list_item_component.h" +#include "core/components/list/list_item_group_element.h" +#include "core/components/list/render_list_item.h" + +namespace OHOS::Ace { + +RefPtr ListItemElement::CreateRenderNode() +{ + SetOnFocusCallback([weak = WeakClaim(this)](void) { + auto element = weak.Upgrade(); + if (element) { + element->HandleOnFocus(); + } + }); + SetOnBlurCallback([weak = WeakClaim(this)](void) { + auto element = weak.Upgrade(); + if (element) { + element->HandleOnBlur(); + } + }); + SetOnClickCallback([weak = WeakClaim(this)](void) { + auto element = weak.Upgrade(); + if (element) { + element->HandleOnClick(); + } + }); + return SoleChildElement::CreateRenderNode(); +} + +void ListItemElement::Update() +{ + auto item = AceType::DynamicCast(component_); + if (item) { + type_ = item->GetType(); + flags_ = item->GetFlags(); + index_ = item->GetIndex(); + topLeftRadius_ = item->GetTopLeftRadius(); + topRightRadius_ = item->GetTopRightRadius(); + bottomLeftRadius_ = item->GetBottomLeftRadius(); + bottomRightRadius_ = item->GetBottomRightRadius(); + LOGD("[Focus] Update: radius: %{public}.1lf", topLeftRadius_.GetX().Value()); + SoleChildElement::Update(); + } +} + +void ListItemElement::PerformBuild() +{ + RefPtr component = AceType::DynamicCast(component_); + if (component) { + const auto& child = children_.empty() ? nullptr : children_.front(); + UpdateChild(child, component->GetChild()); + } +} + +bool ListItemElement::RequestNextFocus(bool vertical, bool reverse, const Rect& rect) +{ + LOGD("[ListFocus]RequestNextFocus, index:%{public}d.", index_); + return false; +} + +void ListItemElement::HandleOnFocus() +{ + LOGI("[ListFocus]HandleOnFocus, index:%{public}d.", index_); + // Find the parent until parent is not listItemElement. + RefPtr parentElement = FocusGroup::GetParent().Upgrade(); + RefPtr listElement = AceType::DynamicCast(parentElement); + if (!listElement) { + if (!AceType::InstanceOf(parentElement)) { + auto listItemElement = ListItemElement::GetListItem(listElement); + if (!listItemElement) { + LOGE("[ListFocus]HandleOnFocus, Get Parent list/item failed."); + return; + } + listItemElement->HandleOnFocus(); + return; + } else { + // item in group + auto parent = AceType::DynamicCast(parentElement); + if (parent) { + parent->ItemFocus(index_); + } + } + } + RefPtr renderListItem = RenderListItem::GetRenderListItem(GetRenderNode()); + if (!renderListItem) { + LOGE("[ListFocus]HandleOnFocus, Get RenderListItem failed, index:%{public}d.", index_); + return; + } + if (renderListItem->GetIndex() < 0) { + return; + } + // paint focus animation + if (listElement) { + renderListItem->HandleFocusEvent(true); + listElement->MoveItemToViewPort(renderListItem->GetPositionInList()); + } else { + renderListItem->HandleFocusEvent(true, true); + } +} + +bool ListItemElement::OnKeyEvent(const KeyEvent& keyEvent) +{ + if (keyEvent.code == KeyCode::TV_CONTROL_UP || keyEvent.code == KeyCode::TV_CONTROL_DOWN || + keyEvent.code == KeyCode::TV_CONTROL_LEFT || keyEvent.code == KeyCode::TV_CONTROL_RIGHT || + keyEvent.code == KeyCode::KEYBOARD_TAB) { + RefPtr parentElement = FocusGroup::GetParent().Upgrade(); + RefPtr listElement = AceType::DynamicCast(parentElement); + if (listElement) { + listElement->NeedMoveFocusItem(true); + } + } + + if (keyEvent.action == KeyAction::CLICK) { + if (keyEvent.code == KeyCode::KEYBOARD_ENTER || keyEvent.code == KeyCode::KEYBOARD_NUMBER_ENTER || + keyEvent.code == KeyCode::KEYBOARD_CENTER) { + HandleOnClick(); + } + } + + return FocusGroup::OnKeyEvent(keyEvent); +} + +void ListItemElement::HandleOnClick() +{ + RefPtr renderListElement = RenderListItem::GetRenderListItem(GetRenderNode()); + if (!renderListElement) { + LOGE("[ListFocus]HandleOnClick, Get RenderListItem failed, Dep:%{public}d.", GetDepth()); + return; + } + + renderListElement->HandleClicked(); +} + +void ListItemElement::HandleOnBlur() +{ + RefPtr renderListElement = RenderListItem::GetRenderListItem(GetRenderNode()); + if (!renderListElement) { + LOGE("[ListFocus]HandleOnBlur, Get RenderListItem failed, Dep:%{public}d.", GetDepth()); + return; + } + + auto parentElement = FocusGroup::GetParent().Upgrade(); + if (AceType::InstanceOf(parentElement)) { + renderListElement->HandleFocusEvent(false, true); + } else { + // cancel focus animation + renderListElement->HandleFocusEvent(false); + } +} + +bool ListItemElement::CanUpdate(const RefPtr& newComponent) +{ + auto listItemComponent = AceType::DynamicCast(newComponent); + if (!listItemComponent) { + return false; + } + + return listItemComponent->GetType() == type_; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/list/list_item_element.h b/frameworks/core/components/list/list_item_element.h new file mode 100644 index 00000000..e9f903e8 --- /dev/null +++ b/frameworks/core/components/list/list_item_element.h @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_LIST_ITEM_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_LIST_ITEM_ELEMENT_H + +#include "core/components/list/list_item_component.h" +#include "core/pipeline/base/sole_child_element.h" + +namespace OHOS::Ace { + +class ListItemElement : public SoleChildElement, public FocusGroup { + DECLARE_ACE_TYPE(ListItemElement, SoleChildElement, FocusGroup); + +public: + bool RequestNextFocus(bool vertical, bool reverse, const Rect& rect) override; + virtual void HandleOnFocus(); + virtual void HandleOnBlur(); + virtual void HandleOnClick(); + + bool CanUpdate(const RefPtr& newComponent) override; + + std::string GetItemType() const + { + return type_; + } + + uint32_t GetFlags() const + { + return flags_; + } + + bool TestFlag(uint32_t flag) const + { + return (flags_ & flag); + } + + void RemoveFlag(uint32_t flag) + { + flags_ &= ~flag; + } + + int32_t GetIndex() const + { + return index_; + } + + void SetIndex(int32_t index) + { + index_ = index; + auto item = ListItemComponent::GetListItem(component_); + if (item) { + item->SetIndex(index); + } + } + + void AttachRenderNode(const RefPtr& proxyNode) + { + proxyNode_ = proxyNode; + } + + RefPtr GetProxyRenderNode() const + { + return proxyNode_; + } + + bool OnKeyEvent(const KeyEvent& keyEvent) override; + + static RefPtr GetListItem(const RefPtr& element) + { + RefPtr listItem = element; + while (listItem) { + if (AceType::InstanceOf(listItem)) { + return AceType::DynamicCast(listItem); + } + listItem = listItem->GetFirstChild(); + } + return nullptr; + } + +private: + RefPtr CreateRenderNode() override; + + void Update() override; + void PerformBuild() override; + + uint32_t flags_ = 0; + std::string type_; + int32_t index_ = -1; + Radius topLeftRadius_; + Radius topRightRadius_; + Radius bottomLeftRadius_; + Radius bottomRightRadius_; + + RefPtr proxyNode_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_LIST_ITEM_ELEMENT_H diff --git a/frameworks/core/components/list/list_item_group_component.cpp b/frameworks/core/components/list/list_item_group_component.cpp new file mode 100644 index 00000000..4a4c2e88 --- /dev/null +++ b/frameworks/core/components/list/list_item_group_component.cpp @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/list/list_item_group_component.h" + +#include "core/components/list/list_item_group_element.h" +#include "core/components/list/render_list_item_group.h" + +namespace OHOS::Ace { + +ListItemGroupComponent::ListItemGroupComponent(const std::string& type) + : ListItemComponent(type, RefPtr()) {} + +RefPtr ListItemGroupComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +RefPtr ListItemGroupComponent::CreateRenderNode() +{ + return RenderListItemGroup::Create(); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/list/list_item_group_component.h b/frameworks/core/components/list/list_item_group_component.h new file mode 100644 index 00000000..17151f1c --- /dev/null +++ b/frameworks/core/components/list/list_item_group_component.h @@ -0,0 +1,124 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_LIST_ITEM_GROUP_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_LIST_ITEM_GROUP_COMPONENT_H + +#include "core/components/list/list_item_component.h" + +namespace OHOS::Ace { + +class ListItemGroupComponent : public ListItemComponent { + DECLARE_ACE_TYPE(ListItemGroupComponent, ListItemComponent); + +public: + ListItemGroupComponent(const std::string& type); + ~ListItemGroupComponent() override = default; + + RefPtr CreateElement() override; + RefPtr CreateRenderNode() override; + + void SetOnClicked(const EventMarker& onClicked) + { + onClicked_ = onClicked; + } + + const EventMarker& GetOnClicked() const + { + return onClicked_; + } + + void SetOnCollapse(const EventMarker& onCollapse) + { + onCollapse_ = onCollapse; + } + + const EventMarker& GetOnCollapse() const + { + return onCollapse_; + } + + void SetOnExpand(const EventMarker& onExpand) + { + onExpand_ = onExpand; + } + + const EventMarker& GetOnExpand() const + { + return onExpand_; + } + + void SetGroupId(const std::string& groupId) + { + groupId_ = groupId; + } + + const std::string& GetGroupId() const + { + return groupId_; + } + + const std::list>& GetChildren() const + { + return children_; + } + + void AppendChild(const RefPtr& child) + { + if (child) { + children_.emplace_back(child); + } + } + + void RemoveChild(const RefPtr& child) + { + if (child) { + children_.remove(child); + } + } + + void SetDirection(FlexDirection direction) + { + direction_ = direction; + } + + FlexDirection GetDirection() const + { + return direction_; + } + + void SetExpand(bool expand) + { + expand_ = expand; + } + + bool GetExpand() const + { + return expand_; + } + +private: + EventMarker onClicked_; + EventMarker onCollapse_; + EventMarker onExpand_; + std::string groupId_; + bool expand_ = false; + std::list> children_; + FlexDirection direction_ = FlexDirection::COLUMN; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_LIST_ITEM_GROUP_COMPONENT_H diff --git a/frameworks/core/components/list/list_item_group_element.cpp b/frameworks/core/components/list/list_item_group_element.cpp new file mode 100644 index 00000000..ff2bf6e0 --- /dev/null +++ b/frameworks/core/components/list/list_item_group_element.cpp @@ -0,0 +1,353 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/list/list_item_group_element.h" + +#include "core/components/list/list_element.h" +#include "core/components/list/list_item_group_component.h" +#include "core/components/proxy/render_item_proxy.h" +#include "core/pipeline/base/composed_element.h" + +namespace OHOS::Ace { + +RefPtr ListItemGroupElement::CreateRenderNode() +{ + SetOnFocusCallback([weak = WeakClaim(this)](void) { + auto element = weak.Upgrade(); + if (element) { + element->HandleOnFocus(); + } + }); + SetOnBlurCallback([weak = WeakClaim(this)](void) { + auto element = weak.Upgrade(); + if (element) { + element->HandleOnBlur(); + } + }); + RefPtr node = SoleChildElement::CreateRenderNode(); + renderItemGroup_ = AceType::DynamicCast(node); + if (renderItemGroup_) { + renderItemGroup_->RegisterRebuildCallback( + [weakElement = AceType::WeakClaim(this)]() { + auto groupElement = weakElement.Upgrade(); + if (groupElement) { + groupElement->Rebuild(); + } + }); + + } + return node; +} + +void ListItemGroupElement::PerformBuild() +{ + LOGD("ListItemGroupElement::PerformBuild"); + auto groupComponent = AceType::DynamicCast(component_); + if (!groupComponent) { + LOGE("component is not list item group component"); + return; + } + + auto childElementIter = children_.begin(); + auto listItems = groupComponent->GetChildren(); + auto listItemIter = listItems.begin(); + + auto primary = GetPrimary(); + int32_t itemIndex = 0; + while (listItemIter != listItems.end() && childElementIter != children_.end()) { + auto element = UpdateChild(*childElementIter++, *listItemIter); + auto itemElement = ListItemElement::GetListItem(element); + if (itemElement) { + primary != *listItemIter ? itemElement->SetIndex(++itemIndex) : itemElement->SetIndex(0); + } + listItemIter++; + } + + while (listItemIter != listItems.end()) { + auto element = UpdateChild(nullptr, *listItemIter); + auto itemElement = ListItemElement::GetListItem(element); + if (itemElement) { + primary != *listItemIter ? itemElement->SetIndex(++itemIndex) : itemElement->SetIndex(0); + } + listItemIter++; + } + + while (childElementIter != children_.end()) { + auto current = childElementIter++; + Element::RemoveChild(*current); + } +} + +void ListItemGroupElement::Apply(const RefPtr& child) +{ + if (!child) { + LOGE("Element child is null"); + return; + } + + if (!renderNode_) { + LOGE("RenderElement don't have a render node"); + return; + } + + RefPtr proxy; + if (child->GetType() == RENDER_ELEMENT) { + proxy = RenderItemProxy::Create(); + // Directly attach the RenderNode if child is RenderElement. + RefPtr renderChild = AceType::DynamicCast(child); + if (renderChild) { + proxy->AddChild(renderChild->GetRenderNode()); + } + } else if (child->GetType() == COMPOSED_ELEMENT) { + auto listItemElement = ListItemElement::GetListItem(child); + if (listItemElement) { + proxy = listItemElement->GetProxyRenderNode(); + } + if (!proxy) { + proxy = RenderItemProxy::Create(); + } + // If child is ComposedElement, just set parent render node. + RefPtr composeChild = AceType::DynamicCast(child); + if (composeChild) { + composeChild->SetParentRenderNode(proxy); + } + } + + if (!proxy) { + LOGE("proxy is not created"); + return; + } + proxy->Attach(context_); + renderNode_->AddChild(proxy); +} + +bool ListItemGroupElement::RequestNextFocus(bool vertical, bool reverse, const Rect& rect) +{ + LOGD("[ListItemGroupFocus]RequestNextFocus, this:%{public}p, Dep:%{public}d.", this, GetDepth()); + bool ret = false; + if (!renderItemGroup_->GetExpand()) { + AddItemGroupFocusIndex(0); + return ret; + } + int32_t nextFocusIndex = GetNextFocusIndex(vertical, reverse); + if (nextFocusIndex < 0) { + return ret; + } + if (reverse) { + while (nextFocusIndex >= 0) { + ret = TraverseFocusNode(nextFocusIndex, true); + if (ret) { + AddItemGroupFocusIndex(nextFocusIndex); + return ret; + } + --nextFocusIndex; + } + } else { + int32_t maxSize = children_.size(); + while (nextFocusIndex < maxSize) { + ret = TraverseFocusNode(nextFocusIndex, false); + if (ret) { + AddItemGroupFocusIndex(nextFocusIndex); + return ret; + } + ++nextFocusIndex; + } + } + return ret; +} + +int32_t ListItemGroupElement::GetNextFocusIndex(bool vertical, bool reverse) +{ + int32_t nextFocusIndex = renderItemGroup_->GetNextFocusIndex(GetItemGroupFocusIndex(), vertical, reverse); + int32_t childrenSize = children_.size(); + if (nextFocusIndex < 0 || nextFocusIndex >= childrenSize) { + return -1; + } else { + return nextFocusIndex; + } +} + +bool ListItemGroupElement::TraverseFocusNode(int32_t currentFocusIndex, bool reverse) +{ + for (const auto& element: children_) { + auto listItem = ListItemElement::GetListItem(element); + if (listItem && listItem->IsFocusable() && currentFocusIndex == listItem->GetIndex()) { + bool ret = listItem->RequestFocusImmediately(); + MoveItemToViewPort(listItem, reverse); + return ret; + } + } + return false; +} + +void ListItemGroupElement::MoveItemToViewPort(const RefPtr& listItem, bool reverse) +{ + auto parentElement = FocusGroup::GetParent().Upgrade(); + auto listElement = AceType::DynamicCast(parentElement); + if (listElement) { + if (GetItemGroupFocusIndex() == 0) { + listElement->MoveItemToViewPort(renderItemGroup_->GetPositionInList()); + } else { + auto renderListItem = RenderListItem::GetRenderListItem(listItem->GetRenderNode()); + if (renderListItem) { + double itemSize = renderItemGroup_->GetMainSize(renderListItem->GetLayoutSize()); + size_ = reverse ? size_ - itemSize : size_ + itemSize; + } + listElement->MoveItemGroupToViewPort(renderItemGroup_->GetPositionInList(), size_); + } + } +} + +bool ListItemGroupElement::OnKeyEvent(const KeyEvent& keyEvent) +{ + LOGD("[ListItemGroupFocus]OnKeyEvent, this:%{public}p, Dep:%{public}d.", this, GetDepth()); + if (keyEvent.action == KeyAction::CLICK && keyEvent.code == KeyCode::TV_CONTROL_ENTER + && GetItemGroupFocusIndex() == 0) { + renderItemGroup_->HandleClicked(); + return true; + } else { + RefPtr parentElement = FocusGroup::GetParent().Upgrade(); + RefPtr listElement = AceType::DynamicCast(parentElement); + if (listElement) { + listElement->NeedMoveFocusItem(true); + } + return FocusGroup::OnKeyEvent(keyEvent); + } +} + +void ListItemGroupElement::HandleOnFocus() +{ + LOGD("[ListItemGroupFocus]HandleOnFocus, this:%{public}p, Dep:%{public}d.", this, GetDepth()); + // Find the parent until parent is not listItemElement. + RefPtr parentElement = FocusGroup::GetParent().Upgrade(); + RefPtr listElement = AceType::DynamicCast(parentElement); + if (!listElement) { + auto listItemElement = ListItemElement::GetListItem(listElement); + if (!listItemElement) { + LOGE("[ListFocus]HandleOnFocus, Get Parent list/item failed."); + return; + } + listItemElement->HandleOnFocus(); + return; + } + renderItemGroup_->SetFocused(true); + if (!renderItemGroup_->GetExpand()) { + AddItemGroupFocusIndex(0); + } + listElement->MoveItemToViewPort(renderItemGroup_->GetPositionInList()); +} + +void ListItemGroupElement::HandleOnBlur() +{ + RefPtr renderListItem = RenderListItem::GetRenderListItem(GetRenderNode()); + if (!renderListItem) { + LOGE("[ListItemGroup]HandleOnBlur, Get RenderListItem failed, Dep:%{public}d.", GetDepth()); + return; + } + for (auto child : GetChildren()) { + auto listItem = ListItemElement::GetListItem(child); + if (listItem && listItem->IsCurrentFocus()) { + listItem->LostFocus(); + } + } + renderListItem->SetFocused(false); +} + +RefPtr ListItemGroupElement::GetPrimary() +{ + auto groupComponent = AceType::DynamicCast(component_); + if (!groupComponent) { + LOGE("component is not list item group component"); + return nullptr; + } + + auto listItems = groupComponent->GetChildren(); + if (listItems.empty()) { + LOGE("no child of group"); + return nullptr; + } + + auto primary = listItems.front(); + // Find primary item. + for (const auto& child : listItems) { + auto listItem = ListItemComponent::GetListItem(child); + if (listItem && listItem->GetPrimary()) { + primary = child; + break; + } + } + return primary; +} + +void ListItemGroupElement::OnFocus() +{ + if (focusNodes_.empty()) { + return; + } + auto itFocusNode = itLastFocusNode_; + do { + if (itLastFocusNode_ == focusNodes_.end()) { + itLastFocusNode_ = focusNodes_.begin(); + } + auto element = AceType::DynamicCast(*itLastFocusNode_); + auto itemElement = ListItemElement::GetListItem(element); + if (itemElement->GetIndex() != GetItemGroupFocusIndex()) { + continue; + } + if ((*itLastFocusNode_)->RequestFocusImmediately()) { + FocusNode::OnFocus(); + return; + } + } while ((++itLastFocusNode_) != itFocusNode); + // Not found any focusable node, clear focus. + itLastFocusNode_ = focusNodes_.end(); +} + +void ListItemGroupElement::AddItemGroupFocusIndex(int32_t groupFocusIndex) +{ + auto parentElement = FocusGroup::GetParent().Upgrade(); + auto listElement = AceType::DynamicCast(parentElement); + if (listElement) { + listElement->AddItemGroupFocusIndex(GetIndex(), groupFocusIndex); + } +} + +int32_t ListItemGroupElement::GetItemGroupFocusIndex() +{ + auto parentElement = FocusGroup::GetParent().Upgrade(); + auto listElement = AceType::DynamicCast(parentElement); + if (listElement) { + int32_t focusIndex = listElement->GetItemGroupFocusIndex(GetIndex()); + return focusIndex; + } + return 0; +} + +void ListItemGroupElement::ItemFocus(int32_t itemIndex) +{ + int32_t focusIndex = GetItemGroupFocusIndex(); + if (focusIndex == itemIndex) { + return; + } + for (auto child : GetChildren()) { + auto listItem = ListItemElement::GetListItem(child); + if (listItem && listItem->GetIndex() == focusIndex) { + listItem->LostFocus(); + } + } + AddItemGroupFocusIndex(itemIndex); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/list/list_item_group_element.h b/frameworks/core/components/list/list_item_group_element.h new file mode 100644 index 00000000..0d5b89b9 --- /dev/null +++ b/frameworks/core/components/list/list_item_group_element.h @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_LIST_ITEM_GROUP_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_LIST_ITEM_GROUP_ELEMENT_H + +#include "core/components/list/list_item_element.h" +#include "core/components/list/render_list_item_group.h" + +namespace OHOS::Ace { + +class ListItemGroupElement : public ListItemElement { + DECLARE_ACE_TYPE(ListItemGroupElement, ListItemElement); + +public: + void PerformBuild() override; + void Apply(const RefPtr& child) override; + + bool RequestNextFocus(bool vertical, bool reverse, const Rect& rect) override; + void HandleOnFocus() override; + void HandleOnBlur() override; + RefPtr GetPrimary(); + + bool OnKeyEvent(const KeyEvent& keyEvent) override; + int32_t GetItemGroupFocusIndex(); + void ItemFocus(int32_t itemIndex); + +private: + void OnFocus() override; + RefPtr CreateRenderNode() override; + void MoveItemToViewPort(const RefPtr& listItem, bool reverse); + bool TraverseFocusNode(int32_t currentFocusIndex, bool reverse); + void AddItemGroupFocusIndex(int32_t groupFocusIndex); + int32_t GetNextFocusIndex(bool vertical, bool reverse); + RefPtr renderItemGroup_; + double size_ = 0.0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_LIST_ITEM_GROUP_ELEMENT_H diff --git a/frameworks/core/components/list/list_item_theme.h b/frameworks/core/components/list/list_item_theme.h new file mode 100644 index 00000000..8fc8cb4c --- /dev/null +++ b/frameworks/core/components/list/list_item_theme.h @@ -0,0 +1,153 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_LIST_ITEM_THEME_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_LIST_ITEM_THEME_H + +#include "core/components/theme/theme.h" +#include "core/components/theme/theme_constants.h" + +namespace OHOS::Ace { + +/** + * ListItemTheme defines styles of list or grid item. ListItemTheme should be built + * using ListItemTheme::Builder. + */ +class ListItemTheme : public virtual Theme { +DECLARE_ACE_TYPE(ListItemTheme, Theme); + +public: + class Builder { + public: + Builder() = default; + ~Builder() = default; + + RefPtr Build(const RefPtr& themeConstants) const + { + RefPtr theme = AceType::Claim(new ListItemTheme()); + if (!themeConstants) { + return theme; + } + theme->clickColor_ = themeConstants->GetColor(THEME_ITEM_CLICK_COLOR); + theme->clickAlphaBegin_ = themeConstants->GetDouble(THEME_ITEM_CLICK_ALPHA_BEGIN); + theme->clickAlphaEnd_ = themeConstants->GetDouble(THEME_ITEM_CLICK_ALPHA_END); + theme->clickScale_ = themeConstants->GetDouble(THEME_ITEM_CLICK_SCALE); + theme->focusScale_ = themeConstants->GetDouble(THEME_ITEM_FOCUS_SCALE); + theme->focusScaleLarge_ = themeConstants->GetDouble(THEME_ITEM_FOCUS_SCALE_LARGE); + theme->focusScaleMiddle_ = themeConstants->GetDouble(THEME_ITEM_FOCUS_SCALE_MIDDLE); + theme->focusScaleLittle_ = themeConstants->GetDouble(THEME_ITEM_FOCUS_SCALE_LITTLE); + theme->focusOpacityLarge_ = themeConstants->GetDouble(THEME_ITEM_FOCUS_OPACITY_LARGE); + theme->focusOpacityMiddle_ = themeConstants->GetDouble(THEME_ITEM_FOCUS_OPACITY_MIDDLE); + theme->focusOpacityLittle_ = themeConstants->GetDouble(THEME_ITEM_FOCUS_OPACITY_LITTLE); + theme->focusAnimationDuration_ = themeConstants->GetDouble(THEME_ITEM_FOCUS_ANIMATION_DURATION); + theme->clickAnimationDuration_ = themeConstants->GetDouble(THEME_ITEM_CLICK_ANIMATION_DURATION); + theme->itemSize_ = themeConstants->GetDimension(THEME_ITEM_SIZE); + theme->marginInPercent_ = themeConstants->GetDouble(THEME_ITEM_MARGIN_IN_PERCENT); + theme->groupImageSize_ = themeConstants->GetDimension(THEME_ITEM_GROUP_IMAGE_SIZE); + return theme; + } + }; + + ~ListItemTheme() override = default; + + const Color& GetClickColor() const + { + return clickColor_; + } + double GetClickAlphaBegin() const + { + return clickAlphaBegin_; + } + double GetClickAlphaEnd() const + { + return clickAlphaEnd_; + } + double GetClickScale() const + { + return clickScale_; + } + double GetFocusScale() const + { + return focusScale_; + } + double GetFocusScaleLarge() const + { + return focusScaleLarge_; + } + double GetFocusScaleMiddle() const + { + return focusScaleMiddle_; + } + double GetFocusScaleLittle() const + { + return focusScaleLittle_; + } + double GetFocusOpacityLarge() const + { + return focusOpacityLarge_; + } + double GetFocusOpacityMiddle() const + { + return focusOpacityMiddle_; + } + double GetFocusOpacityLittle() const + { + return focusOpacityLittle_; + } + double GetFocusAnimationDuration() const + { + return focusAnimationDuration_; + } + double GetClickAnimationDuration() const + { + return clickAnimationDuration_; + } + Dimension GetItemSize() const + { + return itemSize_; + } + double GetItemMarginInPercent() const + { + return marginInPercent_; + } + Dimension GetGroupImageSize() const + { + return groupImageSize_; + } + +protected: + ListItemTheme() = default; + +private: + Color clickColor_; + double clickAlphaBegin_ = 1.0; + double clickAlphaEnd_ = 1.0; + double clickScale_ = 1.0; + double focusScale_ = 1.0; + double focusScaleLarge_ = 1.0; + double focusScaleMiddle_ = 1.0; + double focusScaleLittle_ = 1.0; + double focusOpacityLarge_ = 1.0; + double focusOpacityMiddle_ = 1.0; + double focusOpacityLittle_ = 1.0; + double focusAnimationDuration_ = 100.0; + double clickAnimationDuration_ = 200.0; + double marginInPercent_ = 0.0; + Dimension itemSize_; + Dimension groupImageSize_; +}; + +} // namespace OHOS::Ace +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_LIST_ITEM_THEME_H diff --git a/frameworks/core/components/list/list_layout_manager.cpp b/frameworks/core/components/list/list_layout_manager.cpp new file mode 100644 index 00000000..391ec1e7 --- /dev/null +++ b/frameworks/core/components/list/list_layout_manager.cpp @@ -0,0 +1,791 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/list/list_layout_manager.h" + +#include + +#include "base/log/log.h" +#include "base/utils/utils.h" +#include "core/animation/bilateral_spring_node.h" +#include "core/animation/curve.h" +#include "core/animation/curve_animation.h" +#include "core/components/list/list_component.h" +#include "core/components/list/render_list_item.h" +#include "core/components/list/render_list_item_group.h" +#include "core/components/scroll/render_multi_child_scroll.h" + +namespace OHOS::Ace { +namespace { + +const double MIN_FRICTION = 0.0; +const double MAX_FRICTION = 1.0; +const int32_t ADD_DEL_DURATION = 300; +const int32_t CHAIN_ANIMATION_NODE_COUNT = 30; + +} // namespace + +ListLayoutManager::ListLayoutManager(RenderList& renderList) : renderList_(renderList) {} + +void ListLayoutManager::Update() +{ + maxCount_ = renderList_.GetMaxCount(); + cachedCount_ = renderList_.GetCachedCount(); + beginIndex_ = renderList_.GetBeginIndex(); + endIndex_ = renderList_.GetEndIndex(); + repeatedLength_ = renderList_.GetRepeatedLength(); + length_ = renderList_.GetLength(); + indexOffset_ = renderList_.GetIndexOffset(); + itemExtent_ = renderList_.GetItemExtent(); + rightToLeft_ = renderList_.GetRightToLeft(); + crossAxisAlign_ = renderList_.GetFlexAlign(); + direction_ = renderList_.GetDirection(); + if (direction_ == FlexDirection::COLUMN || direction_ == FlexDirection::COLUMN_REVERSE) { + isVertical_ = true; + } else { + isVertical_ = false; + } + + if (enableChain_ != renderList_.IsEnableChain()) { + if (renderList_.IsEnableChain()) { + auto context = renderList_.GetContext().Upgrade(); + if (context) { + chainInterval_ = context->NormalizeToPx(renderList_.GetChainProperty().Interval()); + } + InitChainAnimation(CHAIN_ANIMATION_NODE_COUNT); + } else { + chainInterval_ = 0.0; + } + enableChain_ = renderList_.IsEnableChain(); + } + renderList_.MarkNeedLayout(); +} + +LayoutParam ListLayoutManager::MakeInnerLayoutParam(FlexAlign crossAxisAlign) const +{ + LayoutParam innerLayout; + Size maxSize; + Size minSize; + if (itemExtent_.IsValid()) { + double extent = itemExtent_.Value(); + if (itemExtent_.Unit() == DimensionUnit::PERCENT) { + extent *= renderList_.GetMainSize(viewPort_); + } else { + extent = renderList_.NormalizeToPx(itemExtent_); + } + if (direction_ == FlexDirection::ROW) { + maxSize = Size(extent, renderList_.GetLayoutParam().GetMaxSize().Height()); + minSize = Size(extent, renderList_.GetLayoutParam().GetMinSize().Height()); + } else { + maxSize = Size(renderList_.GetLayoutParam().GetMaxSize().Width(), extent); + minSize = Size(renderList_.GetLayoutParam().GetMinSize().Width(), extent); + } + if (crossAxisAlign == FlexAlign::STRETCH) { + minSize = maxSize; + } + } else { + if (direction_ == FlexDirection::ROW) { + maxSize = Size(Size::INFINITE_SIZE, renderList_.GetLayoutParam().GetMaxSize().Height()); + if (crossAxisAlign == FlexAlign::STRETCH) { + minSize = Size(0.0, renderList_.GetLayoutParam().GetMaxSize().Height()); + } else { + minSize = Size(0.0, renderList_.GetLayoutParam().GetMinSize().Height()); + } + } else { + maxSize = Size(renderList_.GetLayoutParam().GetMaxSize().Width(), Size::INFINITE_SIZE); + if (crossAxisAlign == FlexAlign::STRETCH) { + minSize = Size(renderList_.GetLayoutParam().GetMaxSize().Width(), 0.0); + } else { + minSize = Size(renderList_.GetLayoutParam().GetMinSize().Width(), 0.0); + } + } + } + innerLayout.SetMaxSize(maxSize); + innerLayout.SetMinSize(minSize); + return innerLayout; +} + +void ListLayoutManager::CalculateCachedRange( + int32_t viewBegin, int32_t viewEnd, int32_t cachedCount, int32_t& cachedBegin, int32_t& cachedEnd) +{ + cachedBegin = (viewBegin - cachedCount > 0) ? (viewBegin - cachedCount) : 0; + if (length_ != LIST_LENGTH_INFINITE) { + cachedEnd = (viewEnd + cachedCount > length_) ? length_ : viewEnd + cachedCount; + } else { + cachedEnd = viewEnd + cachedCount; + } +} + +void ListLayoutManager::RequestMoreItemsIfNeeded(int32_t viewBegin, int32_t viewEnd) +{ + int32_t cachedBegin; + int32_t cachedEnd; + + if (beginIndex_ == LIST_PARAM_INVAID || endIndex_ == LIST_PARAM_INVAID) { + return; + } + + if (viewBegin > viewEnd) { + std::swap(viewBegin, viewEnd); + } + + CalculateCachedRange(viewBegin, viewEnd, cachedCount_, cachedBegin, cachedEnd); + if (CalculateRepeatedIndex(cachedBegin) < beginIndex_ || CalculateRepeatedIndex(cachedEnd) > endIndex_) { + int32_t requestBegin; + int32_t requestEnd; + CalculateCachedRange(viewBegin, viewEnd, 2 * cachedCount_, requestBegin, requestEnd); + renderList_.RequestMoreItems(CalculateRepeatedIndex(requestBegin), CalculateRepeatedIndex(requestEnd)); + } +} + +void ListLayoutManager::RefreshLayout() +{ + if (!needRefresh_) { + return; + } + needRefresh_ = false; + auto items = renderList_.GetItems(); + auto iter = items.begin(); + if (iter != items.end()) { + auto firstItem = RenderListItem::GetRenderListItem(iter->second); + if (firstItem && firstItem->GetOperation() != LIST_ITEM_OP_NONE) { + LOGI("First item changed, recycle all child and layout again."); + renderList_.RecycleAllChild(); + renderList_.RefreshOffset(0.0); + itemPosition_.clear(); + itemGroupsExpand_.clear(); + itemGroupsFocusIndex_.clear(); + } else { + std::vector needRemoveItems; + std::map> newItems; + int32_t rmCount = 0; + while (iter != items.end()) { + auto item = RenderListItem::GetRenderListItem(iter->second); + if (item) { + if (item->GetOperation() == LIST_ITEM_OP_REMOVE) { + LOGI("This item[%{public}d] removed, notify element to recycle.", item->GetIndex()); + needRemoveItems.emplace_back(iter->first); + itemPosition_.erase(item->GetIndex()); + itemGroupsExpand_.erase(item->GetIndex()); + itemGroupsFocusIndex_.erase(item->GetIndex()); + ++rmCount; + } else { + if (rmCount > 0) { + itemPosition_.erase(item->GetIndex()); + itemGroupsExpand_.erase(item->GetIndex()); + itemGroupsFocusIndex_.erase(item->GetIndex()); + } + item->SetIndex(item->GetIndex() - rmCount); + newItems.emplace(std::make_pair(item->GetIndex(), iter->second)); + } + } + iter++; + } + renderList_.RecycleByItems(needRemoveItems); + renderList_.ResetItems(newItems); + } + } + renderList_.OnRefreshed(); +} + +void ListLayoutManager::NotifyNeedRefresh() +{ + if (isAnimating_) { + controller_->ClearStopListeners(); + controller_->ClearInterpolators(); + controller_->Stop(); + isAnimating_ = false; + friction_ = MAX_FRICTION; + RefreshLayout(); + mainOffset_ = -1.0; + } +} + +bool ListLayoutManager::CheckNeedAnimation() +{ + // First layout all item is OP(Add), no need to animate. + if (firstLayout_) { + RefreshLayout(); + return false; + } + + // If current refresh tag is false, do not trigger animate. + if (!needRefresh_) { + return false; + } + + // If current is Playing animation, do not trigger again. + if (isAnimating_) { + return false; + } + + // Check all the items Whether bring ADD/DEL Operation. + bool needAnimation = false; + auto iter = renderList_.GetItems().begin(); + while (iter != renderList_.GetItems().end()) { + auto item = RenderListItem::GetRenderListItem(iter->second); + if (item && item->GetOperation() != LIST_ITEM_OP_NONE) { + needAnimation = true; + break; + } + iter++; + } + if (!needAnimation) { + return false; + } + + // create the animate controller. + if (!controller_) { + auto context = renderList_.GetContext().Upgrade(); + if (!context) { + return false; + } + controller_ = AceType::MakeRefPtr(context); + } + return true; +} + +void ListLayoutManager::AnimationForItemUpdate() +{ + if (!CheckNeedAnimation()) { + return; + } + + if (!controller_->IsStopped() || isAnimating_) { + controller_->Stop(); + isAnimating_ = false; + } + controller_->ClearStopListeners(); + controller_->ClearInterpolators(); + auto animation = AceType::MakeRefPtr>(MIN_FRICTION, MAX_FRICTION, Curves::FRICTION); + animation->AddListener([weakList = AceType::WeakClaim(this)](double value) { + auto list = weakList.Upgrade(); + if (list) { + list->friction_ = value; + list->renderList_.MarkNeedLayout(true); + } + }); + controller_->AddInterpolator(animation); + controller_->SetDuration(ADD_DEL_DURATION); + controller_->Play(); + isAnimating_ = true; + friction_ = MIN_FRICTION; + controller_->AddStopListener([weakList = AceType::WeakClaim(this)]() { + auto list = weakList.Upgrade(); + if (list) { + list->isAnimating_ = false; + list->friction_ = MAX_FRICTION; + list->RefreshLayout(); + list->mainOffset_ = -1.0; + list->renderList_.RefreshScrollExtent(); + } + }); +} + +LayoutParam ListLayoutManager::AdjustLayoutParam(const RefPtr child, LayoutParam param) +{ + LayoutParam layoutParam = param; + if (!isAnimating_) { + return layoutParam; + } + auto listItem = RenderListItem::GetRenderListItem(child); + if (!listItem) { + return layoutParam; + } + double symbol = 1.0; + double friction = 0.0; + switch (listItem->GetOperation()) { + case LIST_ITEM_OP_ADD: { + friction = friction_; + break; + } + case LIST_ITEM_OP_REMOVE: { + friction = 1.0 - friction_; + symbol = -1.0; + break; + } + default: { + return layoutParam; + } + } + + Size layoutSize = listItem->GetPreLayoutSize(); + if (layoutSize == Size(0.0, 0.0)) { + child->Layout(param); + layoutSize = child->GetLayoutSize(); + listItem->SetPreLayoutSize(layoutSize); + } + double listMainSize = renderList_.GetMainSize(renderList_.GetLayoutSize()); + double viewPortSize = renderList_.GetMainSize(viewPort_); + double maxOffset = std::max(0.0, listMainSize - viewPortSize); + // Only remove will adjust current offset. + if (symbol < 0.0 && listItem->GetIndex() >= renderList_.GetCurrentMaxIndex()) { + if (mainOffset_ < 0.0) { + mainOffset_ = -renderList_.GetMainPosition(position_); + } + double offset = mainOffset_ + renderList_.GetMainSize(layoutSize) * friction_ * symbol; + offset = std::clamp(offset, 0.0, maxOffset); + renderList_.RefreshOffset(offset); + ResetLayoutRange(head_, tail_, renderList_.MakeValue(-offset, 0.0), viewPort_); + } else if (maxOffset < -renderList_.GetMainPosition(position_)) { + renderList_.RefreshOffset(maxOffset); + ResetLayoutRange(head_, tail_, renderList_.MakeValue(-maxOffset, 0.0), viewPort_); + } + Size size = isVertical_ ? Size(layoutSize.Width(), layoutSize.Height() * friction) + : Size(layoutSize.Width() * friction, layoutSize.Height()); + layoutParam.SetMinSize(size); + layoutParam.SetMaxSize(size); + return layoutParam; +} + +double ListLayoutManager::FlushChainAnimation() +{ + if (!enableChain_ || !chain_ || !chainAdapter_) { + return 0.0; + } + double deltaDistance = 0.0; + bool needSetValue = false; + RefPtr parentNode = renderList_.GetParent().Upgrade(); + RefPtr scroll = AceType::DynamicCast(parentNode); + if (!scroll) { + LOGE("Flush chain animation failed, Get Parent failed."); + return 0.0; + } + bool overScroll = scroll->IsSpringMotionRunning(); + if (chainOverScroll_ != overScroll) { + if (overScroll) { + const auto& springProperty = renderList_.GetOverSpringProperty(); + if (springProperty && springProperty->IsValid()) { + chain_->SetControlStiffness(springProperty->Stiffness()); + chain_->SetControlDamping(springProperty->Damping()); + } + } else { + chain_->SetControlStiffness(renderList_.GetChainProperty().ControlStiffness()); + chain_->SetControlDamping(renderList_.GetChainProperty().ControlDamping()); + } + chain_->OnControlNodeChange(); + chainOverScroll_ = overScroll; + } + chain_->FlushAnimation(); + if (renderList_.GetDragStartIndexPending() != renderList_.GetDragStartIndex()) { + deltaDistance = + chainAdapter_->ResetControl(renderList_.GetDragStartIndexPending() - renderList_.GetDragStartIndex()); + LOGD("Switch chain control node. %{public}d -> %{public}d, deltaDistance: %{public}.1f", + renderList_.GetDragStartIndex(), renderList_.GetDragStartIndexPending(), deltaDistance); + renderList_.SetDragStartIndex(renderList_.GetDragStartIndexPending()); + chainAdapter_->SetDeltaValue(-deltaDistance); + chainOffset_ += -deltaDistance; + needSetValue = true; + } + if (!NearZero(renderList_.GetCurrentDelta())) { + LOGD("Set delta chain value. delta: %{public}.1f", renderList_.GetCurrentDelta()); + chainAdapter_->SetDeltaValue(renderList_.GetCurrentDelta()); + chainOffset_ += renderList_.GetCurrentDelta(); + renderList_.ResetCurrentDelta(); + needSetValue = true; + } + if (needSetValue) { + LOGD("FlushChainAnimation: %{public}s", chainAdapter_->DumpNodes().c_str()); + chain_->SetValue(0.0); + } + return deltaDistance; +} + +void ListLayoutManager::PerformLayout() +{ + LOGD("PerformLayout head:%{public}lf tail:%{public}lf", head_, tail_); + if (renderList_.GetAddDeleteEffect()) { + AnimationForItemUpdate(); + } else { + RefreshLayout(); + } + + int32_t itemIndex = GetIndexByPosition(head_ - chainOffset_); + int32_t firstIndex = itemIndex; + renderList_.RecycleHead(itemIndex - 1); // Recycle head items. + double curMainSize = GetItemPosition(itemIndex); + double curAnimateMainSize = curMainSize + GetItemAnimationValue(itemIndex); + LayoutParam innerLayout = MakeInnerLayoutParam(crossAxisAlign_); + auto itemChild = renderList_.GetChildByIndex(itemIndex); + while (!itemChild && curAnimateMainSize < tail_ - chainOffset_ && CheckItemPosition(itemIndex)) { + itemChild = renderList_.GetChildByIndex(itemIndex); + curMainSize = GetItemPosition(itemIndex); + curAnimateMainSize = curMainSize + GetItemAnimationValue(itemIndex); + ++itemIndex; + } + while (itemChild) { + UpdateItemGroupAttr(itemChild); + itemChild->Layout(AdjustLayoutParam(itemChild, innerLayout)); + if (enableChain_ && firstIndex != itemIndex) { + curMainSize += chainInterval_ * HALF_ITEM_SIZE; + } + itemPosition_[itemIndex] = curMainSize; + SetChildPosition(itemChild, itemIndex, curMainSize); + curAnimateMainSize = renderList_.GetMainPosition(itemChild->GetPosition() - position_); + double childLayoutSize = renderList_.GetMainSize(itemChild->GetLayoutSize()); + curMainSize += childLayoutSize; + curAnimateMainSize += childLayoutSize; + if (curAnimateMainSize >= tail_ - chainOffset_) { + break; + } + itemChild = renderList_.GetChildByIndex(++itemIndex); + if (enableChain_ && itemChild) { + curMainSize += chainInterval_ * HALF_ITEM_SIZE; + } + } + RequestMoreItemsIfNeeded(firstIndex, itemIndex); + renderList_.RecycleTail(itemIndex + 1); // Recycle tail items. + + Size layoutSize = renderList_.MakeValue(curMainSize, renderList_.GetCrossSize(viewPort_)); + renderList_.SetLayoutSize(layoutSize); + renderList_.CalculateStickyItem(position_); + ShowItemFocusAnimation(); + firstLayout_ = false; + chainOffset_ = 0.0; +} + +void ListLayoutManager::MoveItemToViewPort(double position) +{ + RefPtr item = renderList_.GetChildByPosition(position); + if (!item) { + LOGE("[ListFocus]MoveItemToViewPort, Get item failed."); + return; + } + double size = renderList_.GetMainSize(item->GetLayoutSize()); + + // jump to this item using position + RefPtr parentNode = renderList_.GetParent().Upgrade(); + RefPtr scroll = AceType::DynamicCast(parentNode); + if (!scroll) { + LOGE("[ListFocus]MoveItemToViewPort, Get Parent failed."); + return; + } + double focusEffectWidth = size * (TV_ITEM_SCALE - DEFAULT_SCALE) * HALF_ITEM_SIZE; + double animationOffset = scroll->NormalizeToPx(FOCUS_BOUNDARY); + scroll->MoveItemToViewPort(position, size, animationOffset + focusEffectWidth); + LOGD("[ListFocus][list] Direction:%{public}d, Item position:%{public}.1lf.", direction_, position); +} + +void ListLayoutManager::MoveItemGroupToViewPort(double position, double size) +{ + // jump to this item using position + RefPtr parentNode = renderList_.GetParent().Upgrade(); + RefPtr scroll = AceType::DynamicCast(parentNode); + if (!scroll) { + LOGE("[ListFocus]MoveItemGroupToViewPort, Get Parent failed."); + return; + } + double focusEffectWidth = size * (TV_ITEM_SCALE - DEFAULT_SCALE) * HALF_ITEM_SIZE; + double animationOffset = scroll->NormalizeToPx(FOCUS_BOUNDARY); + scroll->MoveItemToViewPort(position, size, animationOffset + focusEffectWidth); + LOGD("[ListFocus][list] Direction:%{public}d, Item position:%{public}.1lf.", direction_, position); +} + +void ListLayoutManager::ShowItemFocusAnimation() +{ + RefPtr focusItem; + for (const auto& item : renderList_.GetItems()) { + if (!item.second || item.second->GetChildren().empty()) { + continue; + } + + focusItem = RenderListItem::GetRenderListItem(item.second); + if (!focusItem) { + break; + } else { + if (focusItem->IsFocused()) { + auto focusItemGroup = AceType::DynamicCast(focusItem); + if (focusItemGroup) { + focusItemGroup->ShowFocusAnimation(); + } else { + focusItem->ShowFocusAnimation(true, Rect(renderList_.GetGlobalOffset(), viewPort_)); + } + } + } + } +} + +int32_t ListLayoutManager::focusMove(KeyDirection direction) +{ + int32_t index = focusMove_; + switch (direction) { + case KeyDirection::UP: + case KeyDirection::DOWN: { + auto next = renderList_.GetItemByIndex(direction == KeyDirection::UP ? --index : ++index); + if (next) { + return index; + } + break; + } + default: + break; + } + return -1; +} + +void ListLayoutManager::LayoutToItem(int32_t toIndex) +{ + int32_t curHeadIndex = renderList_.GetCurrentMinIndex(); + int32_t curTailIndex = renderList_.GetCurrentMaxIndex(); + curTailIndex = std::max(curTailIndex, 0); + double curMainSize = GetItemPosition(curTailIndex); + LayoutParam innerLayout = MakeInnerLayoutParam(crossAxisAlign_); + auto itemChild = renderList_.GetChildByIndex(curTailIndex); + while (itemChild) { + itemChild->Layout(innerLayout); + if (enableChain_ && curTailIndex != curHeadIndex) { + curMainSize += chainInterval_ * HALF_ITEM_SIZE; + } + SetChildPosition(itemChild, curTailIndex, curMainSize); + itemPosition_[curTailIndex] = curMainSize; + curMainSize += renderList_.GetMainSize(itemChild->GetLayoutSize()); + if (curTailIndex >= toIndex) { + break; // Already layout to the target index. + } + itemChild = renderList_.GetChildByIndex(++curTailIndex); + renderList_.RecycleHead(curHeadIndex++); + if (enableChain_ && itemChild) { + curMainSize += chainInterval_ * HALF_ITEM_SIZE; + } + } + curMainSize = AdjustLayoutSize(curMainSize); + Size layoutSize = renderList_.MakeValue(curMainSize, renderList_.GetCrossSize(viewPort_)); + renderList_.SetLayoutSize(layoutSize); +} + +void ListLayoutManager::LayoutToPosition(double position) +{ + int32_t curHeadIndex = renderList_.GetCurrentMinIndex(); + int32_t curTailIndex = renderList_.GetCurrentMaxIndex(); + curTailIndex = std::max(curTailIndex, 0); + double curMainSize = GetItemPosition(curTailIndex); + LayoutParam innerLayout = MakeInnerLayoutParam(crossAxisAlign_); + auto itemChild = renderList_.GetChildByIndex(curTailIndex); + while (itemChild) { + itemChild->Layout(innerLayout); + if (enableChain_ && curTailIndex != curHeadIndex) { + curMainSize += chainInterval_ * HALF_ITEM_SIZE; + } + SetChildPosition(itemChild, curTailIndex, curMainSize); + itemPosition_[curTailIndex] = curMainSize; + curMainSize += renderList_.GetMainSize(itemChild->GetLayoutSize()); + if (curMainSize >= position) { + break; // Already layout to the target position. + } + itemChild = renderList_.GetChildByIndex(++curTailIndex); + renderList_.RecycleHead(curHeadIndex++); + if (enableChain_ && itemChild) { + curMainSize += chainInterval_ * HALF_ITEM_SIZE; + } + } + curMainSize = AdjustLayoutSize(curMainSize); + Size layoutSize = renderList_.MakeValue(curMainSize, renderList_.GetCrossSize(viewPort_)); + renderList_.SetLayoutSize(layoutSize); +} + +void ListLayoutManager::LayoutMore(double incDistance) +{ + int32_t curHeadIndex = renderList_.GetCurrentMinIndex(); + // Use to load about one page size, so not need to recycle child. + int32_t curTailIndex = renderList_.GetCurrentMaxIndex(); + curTailIndex = std::max(curTailIndex, 0); + double curMainSize = GetItemPosition(curTailIndex); + LayoutParam innerLayout = MakeInnerLayoutParam(crossAxisAlign_); + auto itemChild = renderList_.GetChildByIndex(curTailIndex); + double incMainSize = 0.0; + while (itemChild) { + itemChild->Layout(innerLayout); + if (enableChain_ && curTailIndex != curHeadIndex) { + curMainSize += chainInterval_ * HALF_ITEM_SIZE; + } + SetChildPosition(itemChild, curTailIndex, curMainSize); + itemPosition_[curTailIndex] = curMainSize; + curMainSize += renderList_.GetMainSize(itemChild->GetLayoutSize()); + incMainSize += renderList_.GetMainSize(itemChild->GetLayoutSize()); + if (incMainSize >= incDistance) { + break; // Already layout enough main size. + } + itemChild = renderList_.GetChildByIndex(++curTailIndex); + if (enableChain_ && itemChild) { + curMainSize += chainInterval_ * HALF_ITEM_SIZE; + } + } + curMainSize = AdjustLayoutSize(curMainSize); + Size layoutSize = renderList_.MakeValue(curMainSize, renderList_.GetCrossSize(viewPort_)); + renderList_.SetLayoutSize(layoutSize); +} + +void ListLayoutManager::CalculateFocusIndexPosition() +{ + double focusPosition = GetItemPosition(focusIndex_); + if (NearZero(focusPosition) && focusIndex_ != 0) { + renderList_.CalculateItemPosition(focusIndex_, ScrollType::SCROLL_INDEX); + } +} + +void ListLayoutManager::SetChildPosition(const RefPtr& child, int32_t index, double mainSize) +{ + double mainLen = renderList_.GetMainSize(viewPort_); + double crossLen = renderList_.GetCrossSize(viewPort_); + double mainAxis = mainSize; + double crossAxis = 0.0; + auto listItemChild = RenderListItem::GetRenderListItem(child); + FlexAlign selfAlign = listItemChild ? listItemChild->GetSelfAlign() : FlexAlign::AUTO; + FlexAlign align = selfAlign == FlexAlign::AUTO ? crossAxisAlign_ : selfAlign; + // second layout for self align. + if (crossAxisAlign_ == FlexAlign::STRETCH && selfAlign != FlexAlign::AUTO && selfAlign != FlexAlign::STRETCH) { + auto innerLayout = MakeInnerLayoutParam(align); + child->Layout(innerLayout); + } + if (crossAxisAlign_ != FlexAlign::STRETCH && selfAlign == FlexAlign::STRETCH) { + auto innerLayout = MakeInnerLayoutParam(align); + child->Layout(innerLayout); + } + if (enableChain_) { + mainAxis += GetChainDelta(index); + } + if (rightToLeft_) { + if (align == FlexAlign::FLEX_END) { + align = FlexAlign::FLEX_START; + } else if (align == FlexAlign::FLEX_START) { + align = FlexAlign::FLEX_END; + } + } + switch (align) { + case FlexAlign::FLEX_END: + crossAxis = crossLen - renderList_.GetCrossSize(child->GetLayoutSize()); + break; + case FlexAlign::CENTER: + crossAxis = (crossLen - renderList_.GetCrossSize(child->GetLayoutSize())) / 2.0; + break; + case FlexAlign::STRETCH: + case FlexAlign::FLEX_START: + default: + break; + } + + if (isVertical_) { + if (direction_ == FlexDirection::COLUMN_REVERSE) { + mainAxis = mainLen - renderList_.GetMainSize(child->GetLayoutSize()) - mainAxis; + } + child->SetPosition(Offset(crossAxis, mainAxis) + position_); + } else { + if (IsRowReverse()) { + mainAxis = mainLen - renderList_.GetMainSize(child->GetLayoutSize()) - mainAxis; + } + child->SetPosition(Offset(mainAxis, crossAxis) + position_); + } + LOGD("Child[%{public}d]:%{public}lf %{public}lf %{public}s %{public}s", index, mainAxis, mainSize, + position_.ToString().c_str(), child->GetPosition().ToString().c_str()); +} + +void ListLayoutManager::UpdateItemGroupAttr(RefPtr& itemChild) +{ + auto renderListItem = RenderListItem::GetRenderListItem(itemChild); + if (renderListItem) { + auto renderListItemGroup = AceType::DynamicCast(renderListItem); + if (renderListItemGroup) { + int32_t groupIndex = renderListItemGroup->GetIndex(); + bool expand = GetExpandStatus(groupIndex); + renderListItemGroup->SetExpand(expand); + AddItemGroupExpand(groupIndex, expand); + if (expand) { + int32_t groupFocusIndex = GetItemGroupFocusIndex(groupIndex); + AddItemGroupFocusIndex(groupIndex, groupFocusIndex); + } else { + AddItemGroupFocusIndex(groupIndex, 0); + } + renderListItemGroup->ChangeDirection(renderList_.GetDirection()); + renderListItemGroup->SetRightToLeft(rightToLeft_); + } + } +} + +double ListLayoutManager::GetChainDelta(int32_t index) const +{ + if (!chainAdapter_) { + return 0.0; + } + double value = 0.0; + RefPtr node; + int32_t controlIndex = renderList_.GetDragStartIndex(); + int32_t baseIndex = controlIndex - chainAdapter_->GetControlIndex(); + int32_t targetIndex = std::clamp(index - baseIndex, 0, CHAIN_ANIMATION_NODE_COUNT - 1); + node = AceType::DynamicCast(chainAdapter_->GetNode(targetIndex)); + if (node) { + value = node->GetValue(); + } + LOGD("ChainDelta. controlIndex: %{public}d, index: %{public}d, value: %{public}.3lf", controlIndex, index, value); + return value; +} + +void ListLayoutManager::InitChainAnimation(int32_t nodeCount) +{ + auto context = renderList_.GetContext().Upgrade(); + if (!context) { + LOGE("Init chain animation failed. context is null"); + return; + } + + if (chainAdapter_ && chain_) { + return; + } + chainAdapter_ = AceType::MakeRefPtr(); + chain_ = AceType::MakeRefPtr(chainAdapter_); + const auto& property = renderList_.GetChainProperty(); + chain_->SetFrameDelta(property.FrameDelay()); + if (property.StiffnessTransfer()) { + chain_->SetStiffnessTransfer(AceType::MakeRefPtr(property.StiffnessCoefficient())); + } else { + chain_->SetStiffnessTransfer(AceType::MakeRefPtr(property.StiffnessCoefficient())); + } + if (property.DampingTransfer()) { + chain_->SetDampingTransfer(AceType::MakeRefPtr(property.DampingCoefficient())); + } else { + chain_->SetDampingTransfer(AceType::MakeRefPtr(property.DampingCoefficient())); + } + chain_->SetControlDamping(property.ControlDamping()); + chain_->SetControlStiffness(property.ControlStiffness()); + chain_->SetDecoration(context->NormalizeToPx(renderList_.GetChainProperty().Interval())); + chain_->SetMinDecoration(context->NormalizeToPx(renderList_.GetChainProperty().MinInterval())); + chain_->SetMaxDecoration(context->NormalizeToPx(renderList_.GetChainProperty().MaxInterval())); + for (int32_t index = 0; index < nodeCount; index++) { + auto node = AceType::MakeRefPtr(renderList_.GetContext(), index, 0.0); + WeakPtr nodeWeak(node); + WeakPtr adapterWeak(chainAdapter_); + node->AddUpdateListener( + [weak = AceType::WeakClaim(this), nodeWeak, adapterWeak](double value, double velocity) { + auto manager = weak.Upgrade(); + auto node = nodeWeak.Upgrade(); + auto adapter = adapterWeak.Upgrade(); + if (!manager || !node || !adapter) { + return; + } + if (node->GetIndex() == adapter->GetControlIndex()) { + manager->controlValue_ = std::abs(value); + } + manager->renderList_.MarkNeedLayout(); + }); + chainAdapter_->AddNode(node); + } + chainAdapter_->NotifyControlIndexChange(); +} + +double ListLayoutManager::GetItemAnimationValue(int32_t index) const +{ + return enableChain_ ? GetChainDelta(index) : 0.0; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/list/list_layout_manager.h b/frameworks/core/components/list/list_layout_manager.h new file mode 100644 index 00000000..67dc5376 --- /dev/null +++ b/frameworks/core/components/list/list_layout_manager.h @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_LIST_LAYOUT_MANAGER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_LIST_LAYOUT_MANAGER_H + +#include +#include + +#include "core/animation/bilateral_spring_adapter.h" +#include "core/animation/simple_spring_chain.h" +#include "core/components/common/layout/constants.h" +#include "core/components/list/layout_manager.h" +#include "core/components/list/render_list.h" +#include "core/components/scroll/scrollable.h" + +namespace OHOS::Ace { + +class ListLayoutManager : public LayoutManager { + DECLARE_ACE_TYPE(ListLayoutManager, LayoutManager); + +public: + explicit ListLayoutManager(RenderList& renderList); + + ~ListLayoutManager() override = default; + + void Update() override; + + void PerformLayout() override; + + void RefreshLayout() override; + + void MoveItemToViewPort(double position) override; + + void MoveItemGroupToViewPort(double position, double size) override; + + int32_t focusMove(KeyDirection direction) override; + + void CalculateFocusIndexPosition() override; + + void LayoutToItem(int32_t toIndex) override; + + void LayoutToPosition(double position) override; + + void LayoutMore(double incDistance) override; + + void NotifyNeedRefresh() override; + + virtual double AdjustLayoutSize(double size) + { + return size; + } + + double FlushChainAnimation() override; + + double GetItemAnimationValue(int32_t index) const override; + +protected: + virtual void SetChildPosition(const RefPtr& child, int32_t index, double mainSize); + RenderList& renderList_; + + LayoutParam MakeInnerLayoutParam(FlexAlign selfAlign) const; + LayoutParam AdjustLayoutParam(const RefPtr child, LayoutParam param); + void RequestMoreItemsIfNeeded(int32_t viewBegin, int32_t viewEnd) override; + void UpdateItemGroupAttr(RefPtr& itemChild); + void ShowItemFocusAnimation(); + void AnimationForItemUpdate(); + +private: + void CalculateCachedRange(int32_t viewBegin, int32_t viewEnd, int32_t cachedCount, int32_t& cachedBegin, + int32_t& cachedEnd) override; + bool CalculateStartPosition(double& start); + bool CheckNeedAnimation(); + void InitChainAnimation(int32_t nodeCount); + double GetChainDelta(int32_t index) const; + + int32_t cachedCount_ = 1; + int32_t maxCount_ = 0; + double mainOffset_ = -1.0; + double controlValue_ = 0.0; + bool chainOverScroll_ = false; + double chainOffset_ = 0.0; + RefPtr chainAdapter_; + RefPtr chain_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_LIST_LAYOUT_MANAGER_H diff --git a/frameworks/core/components/list/list_theme.h b/frameworks/core/components/list/list_theme.h new file mode 100644 index 00000000..362805b5 --- /dev/null +++ b/frameworks/core/components/list/list_theme.h @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_LIST_THEME_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_LIST_THEME_H + +#include "core/components/theme/theme.h" +#include "core/components/theme/theme_constants.h" + +namespace OHOS::Ace { + +/** + * ListTheme defines styles of list. ListTheme should be built + * using ListTheme::Builder. + */ +class ListTheme : public virtual Theme { + DECLARE_ACE_TYPE(ListTheme, Theme); + +public: + class Builder { + public: + Builder() = default; + ~Builder() = default; + + RefPtr Build(const RefPtr& themeConstants) const + { + RefPtr theme = AceType::Claim(new ListTheme()); + if (!themeConstants) { + return theme; + } + theme->gradientWidth_ = themeConstants->GetDimension(THEME_LIST_GRADIENT_WIDTH); + theme->backgroundColor_ = themeConstants->GetColor(THEME_LIST_BACKGROUND_COLOR); + theme->scrollDistance_ = themeConstants->GetDouble(THEME_LIST_SCROLL_DISTANCE); + theme->dividerColor_ = themeConstants->GetColor(THEME_LIST_DIVIDER_COLOR); + return theme; + } + }; + + ~ListTheme() override = default; + + const Dimension& GetGradientWidth() const + { + return gradientWidth_; + } + + const Color& GetBackgroundColor() const + { + return backgroundColor_; + } + + const Color& GetDividerColor() const + { + return dividerColor_; + } + + double GetScrollDistance() const + { + return scrollDistance_; + } + +protected: + ListTheme() = default; + +private: + Dimension gradientWidth_; + Color backgroundColor_; + Color dividerColor_; + double scrollDistance_ = 0.0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_LIST_THEME_H diff --git a/frameworks/core/components/list/list_watch_layout_manager.cpp b/frameworks/core/components/list/list_watch_layout_manager.cpp new file mode 100644 index 00000000..3eb1757d --- /dev/null +++ b/frameworks/core/components/list/list_watch_layout_manager.cpp @@ -0,0 +1,218 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/list/list_watch_layout_manager.h" + +#include "core/components/list/render_list_item_group.h" +#include "core/components/scroll/render_multi_child_scroll.h" + +namespace OHOS::Ace { + +namespace { + +const double HALF_SIZE = 0.5; + +} // namespace + +ListWatchLayoutManager::ListWatchLayoutManager(RenderList& renderList) + : ListLayoutManager(renderList) {} + +void ListWatchLayoutManager::PerformLayout() +{ + LOGD("PerformLayout head:%{public}lf tail:%{public}lf", head_, tail_); + renderList_.SetCenterIndex(INVALID_INDEX); + if (renderList_.GetAddDeleteEffect()) { + AnimationForItemUpdate(); + } else { + RefreshLayout(); + } + + int32_t itemIndex = GetIndexByPosition(head_); + renderList_.RecycleHead(itemIndex - 1); // Recycle head items. + double curMainSize = GetItemPosition(itemIndex); + LayoutParam innerLayout = MakeInnerLayoutParam(crossAxisAlign_); + auto itemChild = renderList_.GetChildByIndex(itemIndex); + int32_t firstIndex = itemIndex; + while (itemChild) { + UpdateItemGroupAttr(itemChild); + itemChild->Layout(AdjustLayoutParam(itemChild, innerLayout)); + if (itemIndex == ZERO_INDEX) { + firstChildSize_ = renderList_.GetMainSize(itemChild->GetLayoutSize()); + } + lastChildSize_ = renderList_.GetMainSize(itemChild->GetLayoutSize()); + LOGD("Index:%{public}d mainSize:%{public}lf", itemIndex, curMainSize); + + SetChildPosition(itemChild, itemIndex, curMainSize); + itemPosition_[itemIndex] = curMainSize; + curMainSize += renderList_.GetMainSize(itemChild->GetLayoutSize()); + if (curMainSize >= tail_) { + break; + } + CalculateItemState(itemChild); + itemChild = renderList_.GetChildByIndex(++itemIndex); + } + RequestMoreItemsIfNeeded(firstIndex, itemIndex); + renderList_.RecycleTail(itemIndex + 1); // Recycle tail items. + + if (renderList_.GetCenterIndex() == INVALID_INDEX) { + MarkAllItemBlur(); + } + if (renderList_.IsCenterLayout() && firstChildSize_ < renderList_.GetMainSize(viewPort_)) { + if (NearZero(lastChildSize_)) { + lastChildSize_ = firstChildSize_; + } + curMainSize = AdjustLayoutSize(curMainSize); + } + + Size layoutSize = renderList_.MakeValue(curMainSize, renderList_.GetCrossSize(viewPort_)); + renderList_.SetLayoutSize(layoutSize); + renderList_.CalculateStickyItem(position_); + ShowItemFocusAnimation(); + HandleItemStateAndEffect(); + firstLayout_ = false; +} + +void ListWatchLayoutManager::SetChildPosition(const RefPtr& child, int32_t index, double mainSize) +{ + double mainLen = renderList_.GetMainSize(viewPort_); + double crossLen = renderList_.GetCrossSize(viewPort_); + double mainAxis = mainSize; + double crossAxis = 0.0; + auto listItemChild = RenderListItem::GetRenderListItem(child); + FlexAlign selfAlign = listItemChild ? listItemChild->GetSelfAlign() : FlexAlign::AUTO; + FlexAlign align = selfAlign == FlexAlign::AUTO ? crossAxisAlign_ : selfAlign; + if (rightToLeft_) { + if (align == FlexAlign::FLEX_END) { + align = FlexAlign::FLEX_START; + } else if (align == FlexAlign::FLEX_START) { + align = FlexAlign::FLEX_END; + } + } + switch (align) { + case FlexAlign::FLEX_END: + crossAxis = crossLen - renderList_.GetCrossSize(child->GetLayoutSize()); + break; + case FlexAlign::CENTER: + crossAxis = (crossLen - renderList_.GetCrossSize(child->GetLayoutSize())) / 2.0; + break; + case FlexAlign::STRETCH: + case FlexAlign::FLEX_START: + default: + break; + } + + if (isVertical_) { + if (direction_ == FlexDirection::COLUMN_REVERSE) { + mainAxis = mainLen - renderList_.GetMainSize(child->GetLayoutSize()) - mainAxis; + } + child->SetPosition(Offset(crossAxis, mainAxis) + position_); + } else { + if (IsRowReverse()) { + mainAxis = mainLen - renderList_.GetMainSize(child->GetLayoutSize()) - mainAxis; + } + child->SetPosition(Offset(mainAxis, crossAxis) + position_); + } + LOGD("Child:%{public}lf %{public}lf %{public}s", mainAxis, crossAxis, position_.ToString().c_str()); +} + +void ListWatchLayoutManager::HandleItemStateAndEffect() +{ + RefPtr listItem; + for (const auto& item : renderList_.GetItems()) { + if (!item.second || item.second->GetChildren().empty()) { + continue; + } + + listItem = AceType::DynamicCast(item.second->GetChildren().front()); + if (!listItem) { + break; + } + auto index = listItem->GetIndex(); + auto centerIndex = renderList_.GetCenterIndex(); + if (index == centerIndex - 1 || index == centerIndex + 1 || + (centerIndex == INVALID_INDEX && index == renderList_.GetCurrentMaxIndex())) { + listItem->SetCurrentState(ItemState::NEARBY); + } + listItem->HandleItemEffect(); + } +} + +void ListWatchLayoutManager::CalculateItemState(RefPtr& item) +{ + auto centerItem = RenderListItem::GetRenderListItem(item); + auto isVertical = direction_ == FlexDirection::COLUMN || direction_ == FlexDirection::COLUMN_REVERSE; + if (centerItem) { + if (centerItem->IsItemCenter(isVertical, viewPort_)) { + centerItem->SetCurrentState(ItemState::FOCUS); + renderList_.SetCenterIndex(centerItem->GetIndex()); + } else { + centerItem->SetCurrentState(ItemState::BLUR); + } + centerItem->CalculateScaleFactorOnWatch(); + } +} + +void ListWatchLayoutManager::MarkAllItemBlur() +{ + RefPtr listItem; + for (const auto& item : renderList_.GetItems()) { + if (!item.second || item.second->GetChildren().empty()) { + continue; + } + + listItem = AceType::DynamicCast(item.second->GetChildren().front()); + if (!listItem) { + break; + } else { + listItem->SetCurrentState(ItemState::BLUR); + } + } + renderList_.SetCenterIndex(INVALID_INDEX); +} + +double ListWatchLayoutManager::GetFirstChildSize(RefPtr& itemChild) +{ + auto renderListItem = RenderListItem::GetRenderListItem(itemChild); + if (!renderListItem) { + return renderList_.GetMainSize(itemChild->GetLayoutSize()); + } + auto renderListItemGroup = AceType::DynamicCast(renderListItem); + if (!renderListItemGroup) { + return renderList_.GetMainSize(itemChild->GetLayoutSize()); + } + auto children = renderListItemGroup->GetChildren(); + auto rIter = children.rbegin(); + while (rIter != children.rend()) { + auto child = *rIter++; + auto listItemNode = RenderListItem::GetRenderListItem(child); + if (listItemNode && listItemNode->GetPrimary()) { + return renderList_.GetMainSize(child->GetLayoutSize()); + } + } + return renderList_.GetMainSize(itemChild->GetLayoutSize()); +} + +double ListWatchLayoutManager::AdjustLayoutSize(double size) +{ + if (!renderList_.IsCenterLayout()) { + return size; + } + if (NearZero(lastChildSize_)) { + lastChildSize_ = firstChildSize_; + } + return size + (renderList_.GetMainSize(viewPort_) - lastChildSize_) * HALF_SIZE; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/list/list_watch_layout_manager.h b/frameworks/core/components/list/list_watch_layout_manager.h new file mode 100644 index 00000000..f092d848 --- /dev/null +++ b/frameworks/core/components/list/list_watch_layout_manager.h @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_LIST_WATCH_LAYOUT_MANAGER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_LIST_WATCH_LAYOUT_MANAGER_H + +#include +#include + +#include "core/components/common/layout/constants.h" +#include "core/components/list/list_layout_manager.h" +#include "core/components/list/render_list.h" + +namespace OHOS::Ace { + +class ListWatchLayoutManager : public ListLayoutManager { + DECLARE_ACE_TYPE(ListWatchLayoutManager, ListLayoutManager); + +public: + explicit ListWatchLayoutManager(RenderList& renderList); + ~ListWatchLayoutManager() override = default; + void PerformLayout() override; + + double AdjustLayoutSize(double size) override; + +protected: + void SetChildPosition(const RefPtr& child, int32_t index, double mainSize) override; + +private: + void HandleItemStateAndEffect(); + void CalculateItemState(RefPtr& item); + void MarkAllItemBlur(); + double GetFirstChildSize(RefPtr& itemChild); + + double firstChildSize_ = 0.0; + double lastChildSize_ = 0.0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_LIST_WATCH_LAYOUT_MANAGER_H diff --git a/frameworks/core/components/list/render_list.cpp b/frameworks/core/components/list/render_list.cpp new file mode 100644 index 00000000..80c9a4d7 --- /dev/null +++ b/frameworks/core/components/list/render_list.cpp @@ -0,0 +1,763 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/list/render_list.h" + +#include + +#include "base/log/ace_trace.h" +#include "base/log/log.h" +#include "base/utils/utils.h" +#include "core/components/list/grid_layout_manager.h" +#include "core/components/list/list_component.h" +#include "core/components/list/list_layout_manager.h" +#include "core/components/list/list_watch_layout_manager.h" +#include "core/components/list/render_list_item.h" +#include "core/components/list/render_list_item_group.h" +#include "core/components/scroll/render_multi_child_scroll.h" + +namespace OHOS::Ace { +namespace { + +constexpr double ITEM_STICKY_OFFSET = 1.0; + +} // namespace + +void RenderList::Update(const RefPtr& component) +{ + const RefPtr list = AceType::DynamicCast(component); + if (!list) { + return; + } + + direction_ = list->GetDirection(); + maxCount_ = list->GetTotalCount(); + itemsCount_ = list->GetItemsCount(); + cachedCount_ = list->GetCachedCount(); + beginIndex_ = list->GetBeginIndex(); + endIndex_ = list->GetEndIndex(); + repeatLength_ = list->GetRepeatedLength(); + // length_ is set in ListElement::Update + indexOffset_ = list->GetIndexOffset(); + crossAxisAlign_ = list->GetFlexAlign(); + columnCount_ = list->GetColumnCount(); + columnExtent_ = list->GetColumnExtent(); + listWidth_ = list->GetWidth(); + listHeight_ = list->GetHeight(); + controller_ = list->GetPositionController(); + itemExtent_ = list->GetItemExtent(); + rightToLeft_ = list->GetRightToLeft(); + supportItemCenter_ = list->GetSupportItemCenter(); + updateEffect_ = list->GetUpdateEffect(); + pageReady_ = list->GetPageReady(); + itemScale_ = list->IsItemScale(); + isCenterLayout_ = list->IsCenterLayout(); + if (SystemProperties::GetDeviceType() == DeviceType::PHONE) { + chainAnimation_ = list->GetChainAnimation(); + } else { + chainAnimation_ = false; + } + if (chainAnimation_) { + chainProperty_ = list->GetChainProperty(); + } + + if (!layoutManager_) { + if (columnCount_ <= 1) { + if (SystemProperties::GetDeviceType() == DeviceType::WATCH) { + layoutManager_ = AceType::MakeRefPtr(*this); + } else { + layoutManager_ = AceType::MakeRefPtr(*this); + } + } else { + layoutManager_ = AceType::MakeRefPtr(*this); + } + } + + const auto& rotationController = list->GetRotationController(); + if (rotationController) { + // list parent is scroll + rotationController->SetRequestRotationImpl(GetParent(), context_); + } + + UpdateAccessibilityAttr(); + layoutManager_->Update(); + overSpringProperty_ = list->OverSpringProperty(); +} + +void RenderList::UpdateTouchRect() +{ + touchRect_.SetSize(viewPort_); + touchRect_.SetOffset(GetPosition()); +} + +void RenderList::MarkNeedRefresh() +{ + layoutManager_->MarkNeedRefresh(); +} + +void RenderList::RefreshOffset(double offset) +{ + RefPtr parentNode = GetParent().Upgrade(); + RefPtr scroll = AceType::DynamicCast(parentNode); + if (!scroll) { + LOGE("Parent scroll is null, RefreshOffset failed."); + return; + } + scroll->RefreshOffset(offset); +} + +void RenderList::RefreshScrollExtent() +{ + RefPtr parentNode = GetParent().Upgrade(); + RefPtr scroll = AceType::DynamicCast(parentNode); + if (!scroll) { + LOGE("Parent scroll is null, RefreshScrollExtent failed."); + return; + } + scroll->CalculateMainScrollExtent(); +} + +void RenderList::PerformLayout() +{ + layoutManager_->PerformLayout(); + int32_t firstIndex = GetIndexByPosition(-GetMainPosition(currentOffset_)); + if (firstIndex >= 0) { + firstItemIndex_ = firstIndex; + if (controller_) { + controller_->SetFirstItemIndex(firstIndex); + } + } + auto slipFactor = layoutManager_->GetSlipFactor(); + if (slipFactor > 0.0 && slipFactorSetting_) { + slipFactorSetting_(slipFactor); + } +} + +void RenderList::OnPaintFinish() +{ + RefPtr listItem; + Offset globalOffset = GetGlobalOffset(); + Rect listItemRect; + Rect viewPortRect = Rect(globalOffset, viewPort_); + for (const auto& item : items_) { + if (!item.second || item.second->GetChildren().empty()) { + continue; + } + listItem = RenderListItem::GetRenderListItem(item.second); + if (!listItem) { + continue; + } + auto node = listItem->GetAccessibilityNode().Upgrade(); + if (!node) { + continue; + } + bool visible = GetVisible(); + if (visible) { + listItemRect.SetSize(item.second->GetLayoutSize()); + listItemRect.SetOffset(globalOffset + item.second->GetPosition()); + visible = listItemRect.IsIntersectWith(viewPortRect); + } + listItem->SetAccessibilityVisible(visible); + if (visible) { +#if !defined(WINDOWS_PLATFORM) and !defined(MAC_PLATFORM) + Rect clampRect = listItemRect.Constrain(viewPortRect); + if (clampRect != listItemRect) { + listItem->SetAccessibilityRect(clampRect); + } else { + listItem->ClearAccessibilityRect(); + } +#endif + } else { + listItem->NotifyPaintFinish(); + } + } +} + +void RenderList::BuildNextItem(double start, double end, Offset position, Size viewPort) +{ + ACE_FUNCTION_TRACE(); + int32_t maxIndex = GetCurrentMaxIndex(); + int32_t itemIndex = GetIndexByPosition(start); + double offset = GetMainPosition(position); + auto itemChild = GetChildByIndex(itemIndex); + double curMainSize = GetItemPosition(itemIndex); + if (offset < 0.0) { + bool needCreateNewItem = false; + while (itemChild) { + curMainSize += GetMainSize(itemChild->GetLayoutSize()); + if (curMainSize >= end) { + break; + } else if (itemIndex < maxIndex) { + itemChild = GetChildByIndex(++itemIndex); + } else { + needCreateNewItem = true; + break; + } + } + if (needCreateNewItem) { + MarkNeedLayout(); + itemChild = GetChildByIndex(++itemIndex); + layoutManager_->LayoutMore(end - curMainSize); + } + } +} + +int32_t RenderList::RequestNextFocus(bool vertical, bool reverse) +{ + return layoutManager_->RequestNextFocus(vertical, reverse); +} + +void RenderList::ListItemFocused(int32_t focusIndex) +{ + layoutManager_->ListItemFocused(focusIndex); +} + +void RenderList::CalculateFocusIndexPosition() +{ + layoutManager_->CalculateFocusIndexPosition(); +} + +double RenderList::GetStickyMainSize(int32_t index) +{ + double size = 0.0; + for (const auto& item : stickyItemMap_) { + if (item.first > index) { + return size; + } else if (item.first == index) { + return 0.0; + } else { + size = item.second; + } + } + return size; +} + +double RenderList::CalculateItemPosition(int32_t index, ScrollType type) +{ + switch (type) { + case ScrollType::SCROLL_INDEX: { + if (index >= GetCurrentMaxIndex()) { + layoutManager_->LayoutToItem(index); + layoutManager_->LayoutMore(GetMainSize(viewPort_)); + } + double sticky = 0.0; // When exist sticky items, add sticky size when jump. + if (SystemProperties::GetDeviceType() != DeviceType::WATCH || !IsSupportScale()) { + CalculateStickyItem(Offset(0.0, -GetItemPosition(index))); + if (stickyItem_) { + sticky = GetStickyMainSize(index); + } + } + return std::max(GetItemPosition(index) - sticky, 0.0); + } + case ScrollType::SCROLL_PAGE_DOWN: { + layoutManager_->LayoutMore(GetMainSize(viewPort_)); + double curMainSize = GetMainSize(GetLayoutSize()); + double maxJumpSize = curMainSize - GetMainSize(viewPort_); + maxJumpSize += GetMainPosition(currentOffset_); + return std::clamp(maxJumpSize, 0.0, GetMainSize(viewPort_)) - GetMainPosition(currentOffset_); + } + case ScrollType::SCROLL_PAGE_UP: { + double position = -GetMainPosition(currentOffset_) - GetMainSize(viewPort_); + return std::max(position, 0.0); + } + case ScrollType::SCROLL_BOTTOM: { + layoutManager_->LayoutToItem(maxCount_); + double curMainSize = GetMainSize(GetLayoutSize()); + double maxJumpSize = curMainSize - GetMainSize(viewPort_); + return std::max(maxJumpSize, 0.0); + } + case ScrollType::SCROLL_TOP: { + return GetItemPosition(0); + } + default: { + LOGE("Unknown type:%{public}d", type); + return -1.0; + } + } +} + +void RenderList::CalculateItemPosition(double targetPos) +{ + layoutManager_->LayoutToPosition(targetPos); + layoutManager_->LayoutMore(GetMainSize(viewPort_)); +} + +void RenderList::MoveItemToViewPort(double position) +{ + layoutManager_->MoveItemToViewPort(position); +} + +void RenderList::MoveItemGroupToViewPort(double position, double size) +{ + layoutManager_->MoveItemGroupToViewPort(position, size); +} + +void RenderList::ResetLayoutRange(double head, double tail, Offset position, Size viewport) +{ + viewPort_ = viewport; + currentOffset_ = position; + UpdateTouchRect(); + layoutManager_->ResetLayoutRange(head, tail, position, viewport); +} + +void RenderList::AddListItem(int32_t index, const RefPtr& renderNode) +{ + if (renderNode) { + items_[index] = renderNode; + } +} + +RefPtr RenderList::GetChildByPosition(double position) const +{ + double startPosition = 0.0; + double endPosition = 0.0; + RefPtr node; + RefPtr listItem; + for (const auto& item : items_) { + if (!item.second || item.second->GetChildren().empty()) { + continue; + } + listItem = RenderListItem::GetRenderListItem(item.second); + if (!listItem) { + break; + } + startPosition = GetItemPosition(listItem->GetIndex()); + endPosition = startPosition + GetMainSize(item.second->GetLayoutSize()); + if ((position > startPosition && position < endPosition) || NearEqual(position, startPosition)) { + return item.second; + } + } + return node; +} + +RefPtr RenderList::GetNearChildByPosition(double position) const +{ + if (!layoutManager_) { + LOGE("Get near child by position failed. layout manager is null."); + return nullptr; + } + double startPosition = 0.0; + double endPosition = 0.0; + RefPtr node; + RefPtr listItem; + for (const auto& item : items_) { + if (!item.second || item.second->GetChildren().empty()) { + continue; + } + listItem = RenderListItem::GetRenderListItem(item.second); + if (!listItem) { + break; + } + layoutManager_->GetChainItemRange(listItem->GetIndex(), startPosition, endPosition); + if ((position > startPosition && position < endPosition) || NearEqual(position, startPosition)) { + return item.second; + } + node = item.second; + } + return node; +} + +RefPtr RenderList::GetChildByIndex(int32_t index) +{ + if (index < 0) { + LOGE("invalid index: %{public}d", index); + return nullptr; + } + + auto item = items_.find(index); + if (item != items_.end()) { + return item->second; + } + + if (beginIndex_ == LIST_PARAM_INVAID && endIndex_ == LIST_PARAM_INVAID && maxCount_ > 0 && index >= maxCount_) { + LOGW("reach max count! index: %{public}d", index); + return nullptr; + } + + // Try to build one new data; + if (buildItem_ && !buildItem_(index)) { + LOGW("no more new item to be built, index: %{public}d", index); + return nullptr; + } + + item = items_.find(index); + if (item != items_.end()) { + return item->second; + } + + LOGD("build succ but get child failed, index: %{public}d", index); + return nullptr; +} + +RefPtr RenderList::GetItemByIndex(int32_t index) +{ + auto child = GetChildByIndex(index); + if (!child || child->GetChildren().empty()) { + return nullptr; + } + return RenderListItem::GetRenderListItem(child); +} + +int32_t RenderList::GetIndexByPosition(double position) const +{ + int32_t index = -1; + auto child = GetChildByPosition(position); + if (child && !child->GetChildren().empty()) { + auto listItem = RenderListItem::GetRenderListItem(child); + if (listItem) { + index = listItem->GetIndex(); + } + } + return index; +} + +bool RenderList::RecycleByItems(const std::vector& needRemoveItems) +{ + if (needRemoveItems.empty()) { + return true; + } + if (!recycleByItems_) { + return false; + } + return recycleByItems_(needRemoveItems); +} + +bool RenderList::RecycleByRange(int32_t from, int32_t to) +{ + LOGD("RecycleChild: fromIndex: %{public}d, toIndex: %{public}d", from, to); + if (!recycleByRange_ || from < 0 || from > to) { + return false; + } + bool recycleResult = false; + bool success = recycleByRange_(from, to); + if (success && from >= 0) { + for (int32_t i = from; i <= to; i++) { + auto iter = items_.find(i); + if (iter != items_.end()) { + LOGD("Recycle index %{public}d success", i); + ResetGroupItem(iter->second); + items_.erase(iter); + recycleResult = true; + } + } + } + return recycleResult; +} + +bool RenderList::RecycleAllChild() +{ + if (items_.empty()) { + return true; + } + + int32_t fromIndex = items_.begin()->first; + int32_t toIndex = items_.rbegin()->first; + + return RecycleByRange(fromIndex, toIndex); +} + +void RenderList::SyncIndex(int32_t begin, int32_t end) +{ + if (items_.empty()) { + return; + } + + int32_t fromIndex = items_.begin()->first; + int32_t toIndex = items_.rbegin()->first; + + if (begin > 0 && fromIndex < begin) { + RecycleByRange(fromIndex, begin - 1); + } + if (end > 0 && toIndex > end) { + RecycleByRange(end + 1, toIndex); + } +} + +// recycle from [start to head] index. +void RenderList::RecycleHead(int32_t head) +{ + if (head >= 0) { + RecycleByRange(0, head); + } +} + +// recycle from [tail to end] index. +void RenderList::RecycleTail(int32_t tail) +{ + if (tail < maxCount_) { + RecycleByRange(tail, maxCount_); + } +} + +void RenderList::RequestMoreItems(int32_t index, int32_t count) +{ + if (requestItems_ && count > 0) { + requestItems_(index, count); + } +} + +void RenderList::CalculateStickyItem(const Offset& position) +{ + // reset item state + if (stickyItem_) { + stickyItem_->SetVisible(false); + } + stickyNext_ = nullptr; + RefPtr listItem = RenderListItem::GetRenderListItem(stickyItem_); + if (listItem) { + listItem->SetSticky(false); + } + double listPosition = -GetMainPosition(position); + if (listPosition < 0.0) { + return; + } + + // calculate current ceiling item + int32_t index = GetIndexByPosition(listPosition); + if (index < 0) { + return; + } + int32_t newStickyIndex = stickyItemSearcher_(index); + if (newStickyIndex < 0) { + if (stickyItem_) { + listItem = RenderListItem::GetRenderListItem(stickyItem_); + if (listItem) { + listItem->HandleStickyEvent(false); + } + } + stickyItem_ = nullptr; + return; + } + + listItem = RenderListItem::GetRenderListItem(stickyItem_); + int32_t currentStickyIndex = INVALID_INDEX; + stickyItemOffset_ = Offset::Zero(); + if (listItem) { + currentStickyIndex = listItem->GetIndex(); + listItem->SetSticky(false); + if (stickyItem_) { + stickyItem_->SetVisible(false); + } + } + + if (newStickyIndex != currentStickyIndex) { + LOGD("Sticky index change from %{public}d to %{public}d", currentStickyIndex, newStickyIndex); + if (listItem) { + listItem->HandleStickyEvent(false); + } + stickyItem_ = stickyItemBuilder_(newStickyIndex, false); + listItem = RenderListItem::GetRenderListItem(stickyItem_); + if (listItem) { + listItem->HandleStickyEvent(true); + } + } + + if (listItem) { + listItem->SetSticky(true); + } + + // layout sticky item + LayoutParam itemLayout; + itemLayout.SetMaxSize(viewPort_); + if (stickyItem_) { + stickyItem_->Layout(itemLayout); + stickyItem_->SetVisible(false); + stickyItemMap_[newStickyIndex] = GetMainSize(stickyItem_->GetLayoutSize()); + } + + // check next item + CalculateStickyItemOffset(index, listPosition); +} + +void RenderList::CalculateStickyItemOffset(int32_t index, double position) +{ + stickyItemOffset_ = Offset::Zero(); + if (!stickyItem_) { + return; + } + + // check next item + auto nextStickyIndex = GetIndexByPosition(position + GetMainSize(stickyItem_->GetLayoutSize())); + auto item = items_.find(nextStickyIndex); + if (item == items_.end()) { + return; + } + + RefPtr listItem = RenderListItem::GetRenderListItem(item->second); + if (!listItem || !listItem->GetSticky()) { + stickyNext_ = nullptr; + return; + } + + double nextItemPosition = GetItemPosition(listItem->GetIndex()); + double ceilingItemPosition = GetMainSize(stickyItem_->GetLayoutSize()); + double offset = nextItemPosition - position - ceilingItemPosition; + if (offset > 0.0) { + offset = 0.0; + stickyNext_ = nullptr; + } else { + RefPtr listItemNext = RenderListItem::GetRenderListItem(item->second); + if (listItemNext) { + stickyNext_ = stickyItemBuilder_(listItemNext->GetIndex(), true); + } + } + // layout sticky next + if (stickyNext_) { + LayoutParam itemLayout; + itemLayout.SetMaxSize(viewPort_); + stickyNext_->Layout(itemLayout); + stickyNext_->SetVisible(false); + } + double nextItemOffset = nextItemPosition - position; + nextItemOffset = nextItemOffset > ITEM_STICKY_OFFSET ? nextItemOffset - ITEM_STICKY_OFFSET : nextItemOffset; + if (direction_ == FlexDirection::COLUMN || direction_ == FlexDirection::COLUMN_REVERSE) { + stickyItemOffset_.SetY(offset); + stickyNextOffset_.SetY(nextItemOffset); + } else { + stickyItemOffset_.SetX(offset); + stickyNextOffset_.SetX(nextItemOffset); + } +} + +void RenderList::UpdateAccessibilityAttr() +{ + auto scroll = AceType::DynamicCast(GetParent().Upgrade()); + if (!scroll) { + LOGE("GetRenderMultiChildScroll failed."); + return; + } + auto refPtr = scroll->GetAccessibilityNode().Upgrade(); + if (!refPtr) { + return; + } + auto collectionInfo = refPtr->GetCollectionInfo(); + collectionInfo.rows = maxCount_ > 0 ? maxCount_ : itemsCount_; + collectionInfo.columns = columnCount_; + refPtr->SetCollectionInfo(collectionInfo); + refPtr->SetScrollableState(true); + refPtr->SetActionScrollForward([weakList = AceType::WeakClaim(this)]() { + auto list = weakList.Upgrade(); + if (list) { + LOGI("Trigger ScrollForward by Accessibility."); + return list->HandleActionScroll(true); + } + return false; + }); + refPtr->SetActionScrollBackward([weakList = AceType::WeakClaim(this)]() { + auto list = weakList.Upgrade(); + if (list) { + LOGI("Trigger ScrollBackward by Accessibility."); + return list->HandleActionScroll(false); + } + return false; + }); + refPtr->AddSupportAction(AceAction::ACTION_SCROLL_FORWARD); + refPtr->AddSupportAction(AceAction::ACTION_SCROLL_BACKWARD); +} + +bool RenderList::HandleActionScroll(bool forward) +{ + RefPtr parent = GetParent().Upgrade(); + RefPtr scroll = AceType::DynamicCast(parent); + if (!scroll) { + LOGE("Parent scroll is null, trigger scroll failed."); + return false; + } + return scroll->ScrollPage(!forward, true); +} + +void RenderList::ResetGroupItem(const RefPtr& renderNode) +{ + auto renderListItem = RenderListItem::GetRenderListItem(renderNode); + if (renderListItem) { + auto renderListItemGroup = AceType::DynamicCast(renderListItem); + if (renderListItemGroup) { + renderListItemGroup->ResetLayout(); + } + } +} + +void RenderList::SetGroupState(int32_t index, bool expand) +{ + if (index >= 0) { + layoutManager_->AddItemGroupExpand(index, expand); + } else if (index == INDEX_EXPAND_ALL) { + layoutManager_->ClearItemPosition(); + layoutManager_->SetExpandAll(expand); + layoutManager_->ClearItemGroupsExpand(); + RefreshOffset(0.0); + } +} + +bool RenderList::TouchTest(const Point& globalPoint, const Point& parentLocalPoint, + const TouchRestrict& touchRestrict, TouchTestResult& result) +{ + if (stickyItem_) { + const auto localPoint = parentLocalPoint - GetPaintRect().GetOffset(); + stickyItem_->TouchTest(globalPoint, localPoint, touchRestrict, result); + } + return RenderNode::TouchTest(globalPoint, parentLocalPoint, touchRestrict, result); +} + +// notify start position in global main axis +void RenderList::NotifyDragStart(double startPosition) +{ + if (!layoutManager_) { + LOGE("NotifyDragStart failed. layout manager is null."); + return; + } + double globalMainOffset = direction_ == FlexDirection::ROW ? GetGlobalOffset().GetX() : GetGlobalOffset().GetY(); + double localOffset = startPosition - globalMainOffset; + double scrollPosition = + direction_ == FlexDirection::ROW ? layoutManager_->GetPosition().GetX() : layoutManager_->GetPosition().GetY(); + double position = localOffset - scrollPosition; + auto render = RenderListItem::GetRenderListItem(GetNearChildByPosition(position)); + if (render) { + dragStartIndexPending_ = render->GetIndex(); + LOGD("DragStart. startPosition: %{public}.1f, position: %{public}.1f, index: %{public}d", startPosition, + position, render->GetIndex()); + } else { + LOGE("DragStart Mismatch. position: %{public}.1f, scrollPosition: %{public}.1f", position, scrollPosition); + } +} + +// notify drag offset in global main axis +void RenderList::NotifyDragUpdate(double dragOffset) +{ + LOGD("NotifyDragUpdate. dragOffset: %{public}.1lf.", dragOffset); + currentDelta_ = dragOffset; +} + +void RenderList::NotifyScrollOver(double velocity, bool isCrashTop, bool isCrashBottom) +{ + if (!chainAnimation_) { + return; + } + if (NearZero(velocity)) { + LOGD("velocity is zero, no need to handle in chain animation."); + return; + } + // when scroll over head/tail, control node needs to switch to head/tail node. + if (isCrashTop) { + dragStartIndexPending_ = GetCurrentMinIndex(); + } else if (isCrashBottom) { + dragStartIndexPending_ = GetCurrentMaxIndex(); + } else { + LOGW("ScrollOver but neither top nor bottom crashed. velocity: %{public}f", velocity); + } + LOGD("NotifyScrollOver. velocity: %{public}.1lf, dragStartIndex_: %{public}d", velocity, dragStartIndexPending_); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/list/render_list.h b/frameworks/core/components/list/render_list.h new file mode 100644 index 00000000..175d24ac --- /dev/null +++ b/frameworks/core/components/list/render_list.h @@ -0,0 +1,558 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_RENDER_LIST_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_RENDER_LIST_H + +#include +#include +#include + +#include "core/animation/simple_spring_chain.h" +#include "core/components/common/layout/constants.h" +#include "core/components/list/layout_manager.h" +#include "core/components/list/render_list_item.h" +#include "core/components/scroll/render_scroll.h" +#include "core/components/scroll/scrollable.h" + +namespace OHOS::Ace { + +constexpr int32_t RECYCLE_NO_LEFT = 0; +constexpr int32_t RECYCLE_NO_RIGHT = 1; +constexpr int32_t INVALID_INDEX = -1; +constexpr int32_t ZERO_INDEX = 0; + +class RenderList : public RenderNode { + DECLARE_ACE_TYPE(RenderList, RenderNode); + +public: + static RefPtr Create(); + + void Update(const RefPtr& component) override; + + void UpdateTouchRect() override; + + void PerformLayout() override; + + void OnPaintFinish() override; + + bool TouchTest(const Point& globalPoint, const Point& parentLocalPoint, const TouchRestrict& touchRestrict, + TouchTestResult& result) override; + + void ResetLayoutRange(double head, double tail, Offset position, Size viewport); + + using RequestListDataFunc = std::function; + void RegisterRequestItemsCallback(const RequestListDataFunc& requestItems) + { + requestItems_ = requestItems; + } + + using StickyItemBuildFunc = std::function(int32_t index, bool next)>; + void RegisterStickyItemBuilderCallback(const StickyItemBuildFunc& stickyItemBuilder) + { + stickyItemBuilder_ = stickyItemBuilder; + } + + using StickyItemSearchFunc = std::function; + void RegisterStickyItemSearcherCallback(const StickyItemSearchFunc& stickyItemSearcher) + { + stickyItemSearcher_ = stickyItemSearcher; + } + + using RecycleByRangeFunc = std::function; + void RegisterRecycleByRangeCallback(const RecycleByRangeFunc& recycle) + { + recycleByRange_ = recycle; + } + + using RecycleByItemsFunc = std::function& items)>; + void RegisterRecycleByItemsCallback(const RecycleByItemsFunc& recycle) + { + recycleByItems_ = recycle; + } + + using BuildListDataFunc = std::function; + void RegisterBuildItemCallback(const BuildListDataFunc& buildItem) + { + buildItem_ = buildItem; + } + + using OnRefreshedFunc = std::function; + void RegisterOnRefreshedCallback(const OnRefreshedFunc& onRefreshed) + { + onRefreshed_ = onRefreshed; + } + + void AddListItem(int32_t index, const RefPtr& renderNode); + + template + T MakeValue(double mainValue, double crossValue) const + { + return direction_ == FlexDirection::ROW ? T(mainValue, crossValue) : T(crossValue, mainValue); + } + + double GetMainSize(const Size& size) const + { + return direction_ == FlexDirection::ROW ? size.Width() : size.Height(); + } + + double GetCrossSize(const Size& size) const + { + return direction_ == FlexDirection::ROW ? size.Height() : size.Width(); + } + + double GetMainPosition(const Offset& offset) const + { + return direction_ == FlexDirection::ROW ? offset.GetX() : offset.GetY(); + } + + bool IsLayoutChanged() const + { + return IsLayoutParamChanged(); + } + + int32_t GetMaxCount() const + { + return maxCount_; + } + + void SetMaxCount(int32_t maxCount) + { + maxCount_ = maxCount; + } + + int32_t GetCurrentMinIndex() const + { + int32_t currentMin = -1; + if (items_.begin() != items_.end()) { + currentMin = items_.begin()->first; + } + return currentMin; + } + + int32_t GetCurrentMaxIndex() const + { + int32_t currentMax = -1; + if (items_.rbegin() != items_.rend()) { + currentMax = items_.rbegin()->first; + } + return currentMax; + } + + FlexDirection GetDirection() const + { + return direction_; + } + + int32_t GetCachedCount() const + { + return cachedCount_; + } + + int32_t GetBeginIndex() const + { + return beginIndex_; + } + + int32_t GetEndIndex() const + { + return endIndex_; + } + + int32_t GetRepeatedLength() const + { + return repeatLength_; + } + + int32_t GetLength() const + { + return length_; + } + + void SetLength(int32_t length) + { + length_ = length; + } + + int32_t GetIndexOffset() const + { + return indexOffset_; + } + + FlexAlign GetFlexAlign() const + { + return crossAxisAlign_; + } + + int32_t GetColumnCount() const + { + return columnCount_; + } + + int32_t GetColumnExtent() const + { + return columnExtent_; + } + + double GetWidth() const + { + return listWidth_; + } + + double GetHeight() const + { + return listHeight_; + } + + const Dimension& GetItemExtent() const + { + return itemExtent_; + } + + bool GetRightToLeft() const + { + return rightToLeft_; + } + + const std::map>& GetItems() const + { + return items_; + } + + void ResetItems(std::map>& items) + { + items_.clear(); + items_.swap(items); + } + + void CalculateStickyItem(const Offset& position); + + void RequestMoreItems(int32_t index, int32_t count); + + int32_t RequestNextFocus(bool vertical, bool reverse); + + void ListItemFocused(int32_t focusIndex); + + void MoveItemToViewPort(double position); + + void MoveItemGroupToViewPort(double position, double size); + + RefPtr GetItemByIndex(int32_t index); + + RefPtr GetChildByPosition(double position) const; + RefPtr GetNearChildByPosition(double position) const; + RefPtr GetChildByIndex(int32_t index); + int32_t GetIndexByPosition(double position) const; + bool RecycleByRange(int32_t from, int32_t to); + bool RecycleByItems(const std::vector& items); + bool RecycleAllChild(); + void RecycleHead(int32_t head); + void RecycleTail(int32_t tail); + void SyncIndex(int32_t begin, int32_t end); + + void CalculateFocusIndexPosition(); + + double CalculateItemPosition(int32_t index, ScrollType type); + + void CalculateItemPosition(double targetPos); + + void MarkNeedRefresh(); + + void RefreshOffset(double offset); + + void RefreshScrollExtent(); + + void SetGroupState(int32_t index, bool expand); + + void OnRefreshed() + { + onRefreshed_(); + } + + const RefPtr& GetLayoutManager() const + { + return layoutManager_; + } + + double GetItemPosition(int32_t index) const + { + if (layoutManager_) { + return layoutManager_->GetItemPosition(index); + } + return 0.0; + } + + double GetItemAnimationPosition(int32_t index) const + { + if (layoutManager_) { + return layoutManager_->GetItemAnimationValue(index); + } + return 0.0; + } + + const RefPtr& GetController() const + { + return controller_; + } + + bool IsSupportScale() const + { + return itemScale_; + } + + void SetSupportItemCenter(bool center) + { + supportItemCenter_ = center; + } + + bool GetSupportItemCenter() const + { + return supportItemCenter_; + } + + bool SupportStickyItem() const + { + return !chainAnimation_ && direction_ == FlexDirection::COLUMN; + } + + bool IsCenterLayout() const + { + return isCenterLayout_; + } + + bool IsPageReady() const + { + return pageReady_; + } + + bool GetAddDeleteEffect() const + { + return updateEffect_ && pageReady_; + } + + void SetAddDeleteEffect(bool enabled) + { + updateEffect_ = enabled; + } + + void BuildNextItem(double start, double end, Offset position, Size viewPort); + + void SetShiftHeight(double shiftHeight) + { + shiftHeight_ = shiftHeight; + } + + // notify start position in global main axis + void NotifyDragStart(double startPosition); + + // notify drag offset in global main axis + void NotifyDragUpdate(double dragOffset); + + void NotifyScrollOver(double velocity, bool isCrashTop, bool isCrashBottom); + + bool IsEnableChain() const + { + return chainAnimation_; + } + + int32_t GetDragStartIndexPending() const + { + return dragStartIndexPending_; + } + + void SetDragStartIndexPending(int32_t index) + { + dragStartIndexPending_ = index; + } + + int32_t GetDragStartIndex() const + { + return dragStartIndex_; + } + + void SetDragStartIndex(int32_t index) + { + dragStartIndex_ = index; + } + + double GetCurrentDelta() const + { + return currentDelta_; + } + + // Reset when performLayout done. + void ResetCurrentDelta() + { + currentDelta_ = 0.0; + } + + const RefPtr& GetOverSpringProperty() const + { + return overSpringProperty_; + } + + const SpringChainProperty& GetChainProperty() const + { + return chainProperty_; + } + + double FlushChainAnimation() + { + if (!layoutManager_) { + return 0.0; + } + return layoutManager_->FlushChainAnimation(); + } + + double GetHeadAnimationValue() const + { + if (chainAnimation_ && layoutManager_) { + return layoutManager_->GetItemAnimationValue(GetCurrentMinIndex()); + } else { + return 0.0; + } + } + + bool IsVertical() const + { + return direction_ == FlexDirection::COLUMN || direction_ == FlexDirection::COLUMN_REVERSE; + } + + double GetListPosition() const + { + if (layoutManager_) { + return IsVertical() ? layoutManager_->GetPosition().GetY() : layoutManager_->GetPosition().GetX(); + } + return 0.0; + } + + double EstimateIndexByPosition(double position) const + { + if (layoutManager_) { + return layoutManager_->GetIndexByPosition(position); + } + return INVALID_INDEX; + } + + double GetTailAnimationValue() const + { + if (chainAnimation_ && layoutManager_) { + return GetItemAnimationPosition(GetCurrentMaxIndex()); + } else { + return 0.0; + } + } + + void SetMakeCardTransition(bool makeCardTransition) + { + makeCardTransition_ = makeCardTransition; + } + + int32_t GetCenterIndex() const + { + return centerIndex_; + } + + void SetCenterIndex(int32_t centerIndex) + { + centerIndex_ = centerIndex; + } + +protected: + RefPtr GetStickyItem() const + { + return stickyItem_; + } + + RefPtr GetStickyNext() const + { + return stickyNext_; + } + + Offset GetStickyItemOffset() const + { + return stickyItemOffset_; + } + + Offset GetStickyNextOffset() const + { + return stickyNextOffset_; + } + + double shiftHeight_ = 0.0; + bool makeCardTransition_ = false; + +private: + double GetStickyMainSize(int32_t index); + void CalculateStickyItemOffset(int32_t index, double position); + void UpdateAccessibilityAttr(); + bool HandleActionScroll(bool forward); + void ResetGroupItem(const RefPtr& renderNode); + + FlexDirection direction_ { FlexDirection::COLUMN }; + FlexAlign crossAxisAlign_ = FlexAlign::STRETCH; + + int32_t cachedCount_ = 1; + int32_t beginIndex_ = LIST_PARAM_INVAID; + int32_t endIndex_ = LIST_PARAM_INVAID; + int32_t repeatLength_ = 0; + int32_t length_ = 0; + int32_t indexOffset_ = 0; + int32_t maxCount_ = 0; + int32_t itemsCount_ = 0; + // center list-item index if itemcenter option is enabled. + int32_t centerIndex_ = INVALID_INDEX; + + double listWidth_ = -1.0; + double listHeight_ = -1.0; + double currentDelta_ = 0.0; + SpringChainProperty chainProperty_; + RefPtr overSpringProperty_; + int32_t dragStartIndexPending_ = 0; + int32_t dragStartIndex_ = 0; + int32_t columnCount_ = 0; + int32_t columnExtent_ = 0; + int32_t firstItemIndex_ = 0; + Dimension itemExtent_; + bool rightToLeft_ = false; + bool updateEffect_ = false; + bool supportItemCenter_ = false; + bool isCenterLayout_ = false; + bool pageReady_ = false; + bool itemScale_ = false; + bool chainAnimation_ = false; + + std::map> items_; + RequestListDataFunc requestItems_; + RecycleByRangeFunc recycleByRange_; + RecycleByItemsFunc recycleByItems_; + BuildListDataFunc buildItem_; + OnRefreshedFunc onRefreshed_; + RefPtr controller_; + RefPtr layoutManager_; + + StickyItemBuildFunc stickyItemBuilder_; + StickyItemSearchFunc stickyItemSearcher_; + RefPtr stickyItem_; + RefPtr stickyNext_; + std::map stickyItemMap_; + Offset stickyItemOffset_; + Offset stickyNextOffset_; + Offset currentOffset_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_RENDER_LIST_H diff --git a/frameworks/core/components/list/render_list_item.cpp b/frameworks/core/components/list/render_list_item.cpp new file mode 100644 index 00000000..3441ce8f --- /dev/null +++ b/frameworks/core/components/list/render_list_item.cpp @@ -0,0 +1,619 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/list/render_list_item.h" + +#include "base/log/dump_log.h" +#include "base/utils/system_properties.h" +#include "core/common/frontend.h" +#include "core/common/vibrator/vibrator_proxy.h" +#include "core/components/box/render_box.h" +#include "core/components/flex/render_flex.h" +#include "core/components/list/render_list.h" +#include "core/components/list/render_list_item_group.h" +#include "core/components/list/tv_interactive_effect.h" +#ifdef WEARABLE_PRODUCT +#include "core/components/list/watch_interactive_effect.h" +#endif +#include "core/components/proxy/render_item_proxy.h" + +namespace OHOS::Ace { +namespace { + +const double HALF_SIZE = 0.5; +const double ITEM_DISTANCE_BASE = 76.0; +const double ITEM_DEFAULT_SCALE = 1.0; +const double ITEM_ZERO = 0.0; +const double ITEM_SCALE_BASE = 1.12; +const double ITEM_OPACITY_BASE = 1.0; +const double ITEM_RATIO = -0.34; // 0.78 - 1.12 // 0.66 - 1.0 +const double DISTANCE_EPSILON = 1.0; + +#ifdef WEARABLE_PRODUCT +const int32_t VIBRATE_DURATION = 5; +#endif + +} // namespace + +RenderListItem::RenderListItem() +{ + Initialize(); +} + +void RenderListItem::Initialize() +{ + clickRecognizer_ = AceType::MakeRefPtr(); + clickRecognizer_->SetOnClick([weakItem = AceType::WeakClaim(this)](const ClickInfo&) { + auto item = weakItem.Upgrade(); + if (item) { + item->HandleClicked(); + } + }); + touchRecognizer_ = AceType::MakeRefPtr(); + touchRecognizer_->SetOnTouchDown([weakItem = AceType::WeakClaim(this)](const TouchEventInfo&) { + auto item = weakItem.Upgrade(); + if (item) { + item->PlayPressDownAnimation(); + } + }); + touchRecognizer_->SetOnTouchUp([weakItem = AceType::WeakClaim(this)](const TouchEventInfo&) { + auto item = weakItem.Upgrade(); + if (item) { + item->PlayPressUpAnimation(); + } + }); + touchRecognizer_->SetOnTouchCancel([weakItem = AceType::WeakClaim(this)](const TouchEventInfo&) { + auto item = weakItem.Upgrade(); + if (item) { + item->PlayPressUpAnimation(); + } + }); +} + +void RenderListItem::PerformLayout() +{ + if (!GetChildren().empty()) { + auto child = GetChildren().front(); + auto context = context_.Upgrade(); + if (NeedDivider() && context && context->GetIsDeclarative()) { + auto layoutParam = GetLayoutParam(); + auto maxSize = layoutParam.GetMaxSize(); + auto dividerSize = IsListVertical() ? Size(0.0, NormalizeToPx(dividerHeight_)) + : Size(NormalizeToPx(dividerHeight_), 0.0); + maxSize = maxSize - dividerSize; + layoutParam.SetMaxSize(maxSize); + child->Layout(layoutParam); + } else { + child->Layout(GetLayoutParam()); + } + child->SetPosition(Offset::Zero()); + if (NeedDivider()) { + auto dividerSize = IsListVertical() ? Size(0.0, NormalizeToPx(dividerHeight_)) + : Size(NormalizeToPx(dividerHeight_), 0.0); + SetLayoutSize(dividerSize + child->GetLayoutSize()); + } else { + SetLayoutSize(child->GetLayoutSize()); + } + // update focus animation size + focusAnimationRRect_.SetRect(Rect(Offset(0, 0), GetPaintSize() * TV_ITEM_SCALE)); + + if (SystemProperties::GetDeviceType() == DeviceType::WATCH) { + CalculateScaleFactorOnWatch(); + } + } +} + +void RenderListItem::CalculateScaleFactorOnWatch() +{ + if (isTitle_) { + return; + } + auto renderList = GetRenderList(); + if (!renderList) { + LOGE("Can not find parent render list"); + return; + } + + double itemSize = renderList->IsVertical() ? GetLayoutSize().Height() : GetLayoutSize().Width(); + double itemCenter = GetPositionInList() + renderList->GetListPosition() + itemSize * HALF_SIZE; + double scale = ITEM_DEFAULT_SCALE; + auto pipelineContext = context_.Upgrade(); + if (pipelineContext) { + scale = pipelineContext->GetDipScale(); + } + if (NearZero(scale)) { + LOGE("Pipeline parameter is invalid"); + return; + } + double viewPort = renderList->IsVertical() ? viewPort_.Height() : viewPort_.Width(); + auto distance = std::abs(itemCenter - viewPort * HALF_SIZE); + if (NearZero(distance, DISTANCE_EPSILON)) { + distance = 0.0; + } + auto ratio = std::pow(distance, SQUARE) * ITEM_RATIO / std::pow(ITEM_DISTANCE_BASE * scale, SQUARE); + scaleFactor_ = std::max(ITEM_ZERO, ratio + ITEM_SCALE_BASE); + opacityFactor_ = std::max(ITEM_ZERO, ratio + ITEM_OPACITY_BASE); +} + +void RenderListItem::Update(const RefPtr& component) +{ + itemComponent_ = component; + auto item = AceType::DynamicCast(component); + if (item) { + type_ = item->GetType(); + index_ = item->GetIndex(); + columnSpan_ = item->GetColumnSpan(); + op_ = item->GetOperation(); + flags_ = item->GetFlags(); + // update focus animation color + focusAnimationColor_ = item->GetFocusAnimationColor(); + // update focus animation corner radius + focusAnimationRRect_.SetCorner({ item->GetTopLeftRadius(), item->GetTopRightRadius(), + item->GetBottomRightRadius(), item->GetBottomLeftRadius() }); + LOGD("[Focus][Dep:%{public}d] Update: focusAnimationRRect top left radius: %{public}.1lf", GetDepth(), + focusAnimationRRect_.GetCorner().topLeftRadius.GetX().Value()); + + needVibrate_ = item->NeedVibrate(); + auto context = context_.Upgrade(); + if (needVibrate_ && !vibrator_ && context) { + vibrator_ = VibratorProxy::GetInstance().GetVibrator(context->GetTaskExecutor()); + } + + supportScale_ = item->GetSupportScale(); + supportOpacity_ = item->GetSupportOpacity(); + supportClick_ = item->GetSupportClick(); + isTitle_ = item->IsTitle(); + sticky_ = item->GetSticky(); + stickyMode_ = item->GetStickyMode(); + selfAlign_ = item->GetAlignSelf(); + Dimension radius = item->GetStickyRadius(); + if (radius.IsValid()) { + stickyRadius_ = context ? context->NormalizeToPx(radius) : stickyRadius_; + } + + if (!primary_ && item->GetPrimary()) { + NotifyGroupPrimaryChange(); + } + SetPrimary(item->GetPrimary()); + + // list divider + needDivider_ = item->NeedDivider(); + isActive_ = item->IsActive(); + dividerLength_ = item->GetDividerLength(); + dividerHeight_ = item->GetDividerHeight(); + dividerOrigin_ = item->GetDividerOrigin(); + dividerColor_ = item->GetDividerColor(); + + clickEvent_ = AceAsyncEvent::Create(item->GetClickEventId(), GetContext()); + stickyEvent_ = AceAsyncEvent::Create(item->GetStickyEventId(), GetContext()); + transitionEffect_ = item->GetTransitionEffect(); + UpdateAccessibilityAttr(); + MarkNeedLayout(); + } +} + +void RenderListItem::NotifyGroupPrimaryChange() +{ + auto parent = GetParent().Upgrade(); + while (parent) { + auto group = AceType::DynamicCast(parent); + if (group) { + group->ItemPrimaryChange(GetIndex()); + break; + } + parent = parent->GetParent().Upgrade(); + } +} + +double RenderListItem::GetPositionInList() const +{ + RefPtr parentNode = GetParent().Upgrade(); + while (parentNode) { + RefPtr listNode = AceType::DynamicCast(parentNode); + if (listNode) { + return listNode->GetItemPosition(index_); + } + parentNode = parentNode->GetParent().Upgrade(); + } + return 0.0; +} + +bool RenderListItem::IsItemCenter(bool isVertical, Size viewport) +{ + auto parent = GetParent().Upgrade(); + if (!parent) { + return false; + } + Size itemSize = GetLayoutSize(); + Offset itemPosition = parent->GetPosition(); + double size = isVertical ? itemSize.Height() : itemSize.Width(); + double position = isVertical ? itemPosition.GetY() : itemPosition.GetX(); + double center = (isVertical ? viewport.Height() : viewport.Width()) / 2.0; + return center > position && center < (position + size); +} + +void RenderListItem::ResetFocusEffect() +{ +#ifdef WEARABLE_PRODUCT + if (SystemProperties::GetDeviceType() == DeviceType::WATCH) { + focusController_ = AceType::MakeRefPtr(GetContext()); +#else + if (SystemProperties::GetDeviceType() == DeviceType::TV) { + focusController_ = AceType::MakeRefPtr(GetContext()); +#endif + } else { + focusController_ = AceType::MakeRefPtr(GetContext()); + } + focusController_->Initialize(GetThemeManager()); + focusController_->SetItemNode(AceType::WeakClaim(this)); + auto listNode = GetRenderList(); + if (listNode) { + auto weakList = WeakPtr(listNode); + focusController_->SetListNode(weakList); + } +} + +void RenderListItem::HandleItemEffect() +{ + if (!focusController_) { + ResetFocusEffect(); + } + + if (currentState_ != lastState_) { +#ifdef WEARABLE_PRODUCT + if (needVibrate_ && lastState_ == ItemState::NEARBY && currentState_ == ItemState::FOCUS && vibrator_) { + vibrator_->Vibrate(VIBRATE_DURATION); + } +#endif + LOGD("item (%{public}d) change from %{public}d to %{public}d.", index_, lastState_, currentState_); + lastState_ = currentState_; + if (currentState_ != ItemState::NONE && currentState_ != ItemState::CLICK) { + focusController_->ShowAnimation(currentState_); + } else { + // invalid focus + LOGD("focus state invalid."); + } + } + MarkNeedRender(); +} + +void RenderListItem::HandleClicked() +{ + if (clickEvent_) { + clickEvent_(); + } + + if (primary_ && clicked_) { + clicked_(); + } +} + +void RenderListItem::PlayPressDownAnimation() +{ + if (!focusController_) { + ResetFocusEffect(); + } + focusController_->TouchDownAnimation(); +} + +void RenderListItem::PlayPressUpAnimation() +{ + if (!focusController_) { + ResetFocusEffect(); + } + focusController_->TouchUpAnimation(); +} + +void RenderListItem::HandleStickyEvent(bool sticky) +{ + std::string state = sticky ? "true" : "false"; + std::string param = std::string(R"("sticky",{"state":)").append(state).append("},null"); + if (stickyEvent_) { + stickyEvent_(param); + } +} + +void RenderListItem::OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) +{ + if (!GetVisible() && !GetClonedBySticky()) { + return; + } + + if ((!touchRecognizer_) || (!clickRecognizer_) || (!supportClick_)) { + return; + } + touchRecognizer_->SetCoordinateOffset(coordinateOffset); + clickRecognizer_->SetCoordinateOffset(coordinateOffset); + result.emplace_back(touchRecognizer_); + result.emplace_back(clickRecognizer_); +} + +void RenderListItem::UpdateItemFocusRect(double scale) +{ + focusAnimationRRect_.SetRect(Rect(Offset(0.0, 0.0), GetPaintSize() * scale)); +} + +void RenderListItem::HandleFocusEvent(bool focus, bool isInGroup) +{ + if (SystemProperties::GetDeviceType() == DeviceType::WATCH) { + return; + } + focused_ = focus; + + ShowFocusAnimation(focus, Rect(0.0, 0.0, 0.0, 0.0)); + + if (focus) { + ChangeStatus(RenderStatus::FOCUS); + currentState_ = ItemState::FOCUS; + if (isInGroup) { + HandleItemEffect(); + return; + } + RefPtr parentNode = GetParent().Upgrade(); + while (parentNode) { + RefPtr listNode = AceType::DynamicCast(parentNode); + if (listNode) { + listNode->ListItemFocused(index_); + break; + } + parentNode = parentNode->GetParent().Upgrade(); + } + } else { + ChangeStatus(RenderStatus::BLUR); + currentState_ = ItemState::BLUR; + } + HandleItemEffect(); +} + +Offset RenderListItem::GetPaintOffset() const +{ + auto globalOffset = GetGlobalOffset(); + auto layoutSize = GetLayoutSize(); // size include margin + auto paintSize = GetPaintSize(); // size exclude margin + auto margin = GetMarginInPx(); + if (layoutSize > paintSize) { + globalOffset.SetX(globalOffset.GetX() + margin.LeftPx()); + globalOffset.SetY(globalOffset.GetY() + margin.TopPx()); + } + return globalOffset; +} + +EdgePx RenderListItem::GetMarginInPx() const +{ + EdgePx marginInPx; + auto children = GetChildren(); + if (children.empty()) { + return marginInPx; + } + + auto child = children.front(); + while (child) { + auto box = AceType::DynamicCast(child); + if (box) { + auto boxChildren = box->GetChildren(); + if (boxChildren.empty()) { + break; + } + auto boxChild = boxChildren.front(); + if (boxChild && AceType::DynamicCast(boxChild)) { + marginInPx = box->GetMargin(); + break; + } + } + children = child->GetChildren(); + if (children.empty()) { + break; + } + child = children.front(); + } + return marginInPx; +} + +Size RenderListItem::GetPaintSize() const +{ + Size size = GetLayoutSize(); + auto margin = GetMarginInPx(); + return size - margin.GetLayoutSize(); +} + +Border RenderListItem::GetFocusBorder() const +{ + Border border; + border.SetTopRightRadius(focusAnimationRRect_.GetCorner().topRightRadius); + border.SetTopLeftRadius(focusAnimationRRect_.GetCorner().topLeftRadius); + border.SetBottomLeftRadius(focusAnimationRRect_.GetCorner().bottomLeftRadius); + border.SetBottomRightRadius(focusAnimationRRect_.GetCorner().bottomRightRadius); + return border; +} + +void RenderListItem::ShowFocusAnimation(bool focus, const Rect& listRect, double scale) +{ + // paint focus animation + auto context = context_.Upgrade(); + if (!context) { + LOGE("[Focus]Pipeline context is nullptr"); + return; + } + + LOGD("Index:%{public}d focus:%{public}d %{public}s", index_, focus, GetPaintOffset().ToString().c_str()); + if (focus) { + Size size = GetPaintSize(); + auto globalOffset = GetPaintOffset() + (size * (DEFAULT_SCALE - scale) * HALF_SIZE); + if (listRect.IsValid()) { + context->ShowFocusAnimation(focusAnimationRRect_, focusAnimationColor_, globalOffset, listRect); + context->ShowShadow(focusAnimationRRect_, globalOffset); + } else { + context->ShowFocusAnimation(focusAnimationRRect_, focusAnimationColor_, globalOffset); + context->ShowShadow(focusAnimationRRect_, globalOffset); + } + } else { + context->CancelFocusAnimation(); + context->CancelShadow(); + } +} + +void RenderListItem::UpdateAccessibilityAttr() +{ + auto refPtr = accessibilityNode_.Upgrade(); + if (!refPtr) { + LOGD("Get accessibility node failed."); + return; + } + + refPtr->SetClickableState(true); + refPtr->SetActionClickImpl([weakItem = AceType::WeakClaim(this)]() { + auto item = weakItem.Upgrade(); + if (item) { + LOGI("Trigger ActionClick by Accessibility(%{public}d).", item->index_); + item->HandleClicked(); + item->OnGroupClicked(); + } + }); + + refPtr->SetFocusableState(true); + refPtr->SetActionFocusImpl([weakItem = AceType::WeakClaim(this)]() { + auto item = weakItem.Upgrade(); + if (item) { + LOGI("Trigger ActionFocus by Accessibility(%{public}d).", item->index_); + item->MoveToViewPort(); + } + }); + refPtr->AddSupportAction(AceAction::ACTION_CLICK); + refPtr->AddSupportAction(AceAction::ACTION_ACCESSIBILITY_FOCUS); +} + +void RenderListItem::OnGroupClicked() +{ + if (!primary_ || !curPrimary_) { + return; // Only trigger group click when current item is primary. + } + RefPtr parent = GetParent().Upgrade(); + while (parent) { + RefPtr group = AceType::DynamicCast(parent); + if (group) { + return group->HandleClicked(); + } + parent = parent->GetParent().Upgrade(); + } +} + +void RenderListItem::MoveToViewPort() +{ + RefPtr parentNode = GetParent().Upgrade(); + while (parentNode) { + RefPtr listNode = AceType::DynamicCast(parentNode); + if (listNode) { + return listNode->MoveItemToViewPort(GetPositionInList()); + } + parentNode = parentNode->GetParent().Upgrade(); + } +} + +RefPtr RenderListItem::GetRenderList() const +{ + auto parent = GetParent().Upgrade(); + while (parent) { + auto parentNode = AceType::DynamicCast(parent); + if (parentNode) { + return parentNode; + } + parent = parent->GetParent().Upgrade(); + } + return nullptr; +} + +bool RenderListItem::NeedDivider() +{ + return needDivider_ && !IsLastItem(); +} + +bool RenderListItem::IsLastItem() +{ + auto renderList = GetRenderList(); + if (renderList) { + int32_t maxCount = renderList->GetMaxCount(); + if (GetIndex() == maxCount - 1) { + return true; + } + } + return false; +} + +bool RenderListItem::IsListVertical() +{ + auto renderList = GetRenderList(); + if (renderList) { + FlexDirection listDirection = renderList->GetDirection(); + return listDirection == FlexDirection::COLUMN || listDirection == FlexDirection::COLUMN_REVERSE; + } + return true; +} + +void RenderListItem::Dump() +{ + DumpLog::GetInstance().AddDesc(std::string("index: ").append(std::to_string(GetIndex()))); +} + +void RenderListItem::RunCardTransitionAnimation(double shiftHeight) +{ + auto renderList = GetRenderList(); + if (!renderList) { + LOGE("list render is null"); + return; + } + makeCardTransition_ = true; + renderList->SetMakeCardTransition(makeCardTransition_); + if (transitionEffect_ == TransitionEffect::UNFOLD) { + renderList->SetShiftHeight(shiftHeight); + } else { + renderList->SetShiftHeight(0.0); + } + renderList->MarkNeedRender(); +} + +void RenderListItem::StopCardTransitionAnimation() +{ + makeCardTransition_ = false; + auto renderList = GetRenderList(); + if (renderList) { + renderList->SetMakeCardTransition(makeCardTransition_); + renderList->SetShiftHeight(0.0); + renderList->MarkNeedRender(); + } +} + +RRect RenderListItem::GetRRect() const +{ + auto child = GetFirstChild(); + while (child) { + auto childNode = AceType::DynamicCast(child); + if (childNode) { + auto margin = childNode->GetMargin(); + auto rrect = RRect(Rect(childNode->GetGlobalOffset() + margin.GetOffset(), + childNode->GetLayoutSize() - margin.GetLayoutSize())); + if (childNode->GetBackDecoration()) { + auto border = childNode->GetBackDecoration()->GetBorder(); + rrect.SetCorner({ border.TopLeftRadius(), border.TopRightRadius(), + border.BottomLeftRadius(), border.BottomRightRadius() }); + } + return rrect; + } + child = child->GetFirstChild(); + } + return RRect(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/list/render_list_item.h b/frameworks/core/components/list/render_list_item.h new file mode 100644 index 00000000..328fe9da --- /dev/null +++ b/frameworks/core/components/list/render_list_item.h @@ -0,0 +1,401 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_RENDER_LIST_ITEM_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_RENDER_LIST_ITEM_H + +#include "core/common/vibrator/vibrator.h" +#include "core/components/common/properties/border.h" +#include "core/components/display/render_display.h" +#include "core/components/list/interactive_effect.h" +#include "core/components/list/layout_manager.h" +#include "core/components/list/list_item_component.h" +#include "core/components/scroll/scroll_position_controller.h" +#include "core/event/ace_event_helper.h" +#include "core/gestures/click_recognizer.h" +#include "core/gestures/raw_recognizer.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +constexpr double RADIUS_START = 10000.0; +constexpr double RADIUS_END = 1000.0; + +class RenderList; +class RenderListItem : public RenderNode { + DECLARE_ACE_TYPE(RenderListItem, RenderNode); + +public: + ~RenderListItem() override = default; + void Dump() override; + + static RefPtr Create(); + void HandleFocusEvent(bool focus, bool isInGroup = false); + void ShowFocusAnimation(bool focus, const Rect& listRect, double scale = TV_ITEM_SCALE); + void UpdateItemFocusRect(double scale); + void NotifyGroupPrimaryChange(); + + std::string GetType() const + { + return type_; + } + + void SetIndex(int32_t index) + { + index_ = index; + } + + int32_t GetIndex() const + { + return index_; + } + + uint32_t GetFlags() const + { + return flags_; + } + + bool TestFlag(uint32_t flag) const + { + return (flags_ & flag); + } + + void RemoveFlag(uint32_t flag) + { + flags_ &= ~flag; + } + + double GetPositionInList() const; + + int32_t GetOperation() const + { + return op_; + } + + void SetOperation(int32_t op) + { + op_ = op; + } + + bool IsFocused() const + { + return focused_; + } + + void SetFocused(bool focused) + { + focused_ = focused; + } + + void SetGrid(int32_t grid) + { + grid_ = grid; + } + + int32_t GetGrid() const + { + return grid_; + } + + int32_t GetColumnSpan() const + { + return columnSpan_; + } + + bool GetSticky() const + { + return sticky_; + } + + void SetSticky(bool sticky) + { + sticky_ = sticky; + } + + StickyMode GetStickyMode() const + { + return stickyMode_; + } + + bool GetNearByOpacitySticky() const + { + return nearByOpacitySticky_; + } + + void SetNearByOpacitySticky(bool nearBy) + { + nearByOpacitySticky_ = nearBy; + } + + bool GetClonedBySticky() const + { + return clonedBySticky_; + } + + void SetClonedBySticky(bool clonedBySticky) + { + clonedBySticky_ = clonedBySticky; + } + + bool GetSupportScale() const + { + return supportScale_; + } + + bool GetSupportOpacity() const + { + return supportOpacity_; + } + + bool GetSupportClick() const + { + return supportClick_; + } + + bool GetPrimary() const + { + return primary_; + } + + void SetPrimaryChange(bool change) + { + primaryChange_ = change; + } + + bool GetPrimaryChange() const + { + return primaryChange_; + } + + void SetPrimary(bool primary) + { + if (primary_ != primary) { + primaryChange_ = true; + auto item = AceType::DynamicCast(itemComponent_); + if (item) { + item->SetPrimary(primary); + } + } + primary_ = primary; + } + + bool GetCurPrimary() const + { + return curPrimary_; + } + + void SetCurPrimary(bool primary) + { + curPrimary_ = primary; + } + + bool GetRedraw() const + { + return redraw_; + } + + void SetRedraw(bool redraw) + { + redraw_ = redraw; + } + + void HandleItemEffect(); + + // judge is item at center of viewport or not, used on watch + bool IsItemCenter(bool isVertical, Size viewport); + + ItemState GetCurrentState() const + { + return currentState_; + } + + void SetCurrentState(ItemState state) + { + currentState_ = state; + } + + using ListItemClickedFunc = std::function; + void RegisterClickedCallback(const ListItemClickedFunc& clicked) + { + clicked_ = clicked; + } + + static RefPtr GetRenderListItem(const RefPtr& renderNode) + { + RefPtr listItem = renderNode; + while (listItem) { + if (AceType::InstanceOf(listItem)) { + return AceType::DynamicCast(listItem); + } + + auto& children = listItem->GetChildren(); + if (children.empty()) { + return nullptr; + } + listItem = children.front(); + } + return nullptr; + } + + const RefPtr& GetScrollController() const + { + return scrollController_; + } + + void SetScrollController(const RefPtr& controller) + { + scrollController_ = controller; + } + + double GetStickyRadius() const + { + return stickyRadius_; + } + + void SetExpandOpacity(int32_t opacity) + { + expandOpacity_ = opacity; + } + + void SetStretch(bool isStretch) + { + isStretch_ = isStretch; + } + + void SetPreLayoutSize(const Size& size) + { + preLayoutSize_ = size; + } + + const Size& GetPreLayoutSize() const + { + return preLayoutSize_; + } + + double GetScaleFactor() const + { + return scaleFactor_; + } + + double GetOpacityFactor() const + { + return opacityFactor_; + } + + TransitionEffect GetTransitionEffect() const + { + return transitionEffect_; + } + + FlexAlign GetSelfAlign() const + { + return selfAlign_; + } + + void SetSelfAlign(FlexAlign selfAlign) + { + selfAlign_ = selfAlign; + } + + void OnGroupClicked(); + void HandleStickyEvent(bool sticky); + void HandleClicked(); + void CalculateScaleFactorOnWatch(); + void RunCardTransitionAnimation(double shiftHeight); + void StopCardTransitionAnimation(); + RRect GetRRect() const; + +protected: + RenderListItem(); + + void Update(const RefPtr& component) override; + void ResetFocusEffect(); + void OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) override; + + void UpdateAccessibilityAttr(); + void MoveToViewPort(); + void PlayPressDownAnimation(); + void PlayPressUpAnimation(); + RefPtr GetRenderList() const; + bool NeedDivider(); + void PerformLayout() override; + bool IsListVertical(); + bool IsLastItem(); + Size GetPaintSize() const; + EdgePx GetMarginInPx() const; + Border GetFocusBorder() const; + + RefPtr clickRecognizer_; + RefPtr touchRecognizer_; + RefPtr vibrator_; + RefPtr focusController_; + RefPtr renderDisplay_; + bool needVibrate_ = true; + bool supportScale_ = true; + bool supportOpacity_ = true; + bool supportClick_ = true; + bool isStretch_ = false; + bool isTitle_ = false; + int32_t expandOpacity_ = UINT8_MAX; + bool primary_ = false; + bool curPrimary_ = false; + bool primaryChange_ = false; + bool needDivider_ = false; + bool isActive_ = false; + FlexAlign selfAlign_ = FlexAlign::AUTO; + + Dimension dividerOrigin_; + Dimension dividerLength_; + Dimension dividerHeight_ = DIVIDER_DEFAULT_HEIGHT; + Color dividerColor_; + StickyMode stickyMode_ = StickyMode::NONE; + double scaleFactor_ = 1.0; + double opacityFactor_ = 1.0; + RRect focusAnimationRRect_; + bool makeCardTransition_ = false; + +private: + void Initialize(); + Offset GetPaintOffset() const; + std::function clickEvent_; + std::function stickyEvent_; + Size preLayoutSize_; + int32_t index_ = -1; + uint32_t flags_ = 0; + int32_t op_ = LIST_ITEM_OP_NONE; + std::string type_; + Color focusAnimationColor_ = Color::WHITE; + bool focused_ = false; + int32_t grid_ = -1; + int32_t columnSpan_ = 1; + ItemState lastState_ = ItemState::NONE; + ItemState currentState_ = ItemState::NONE; + RefPtr scrollController_; + bool redraw_ = false; + bool sticky_ = false; + bool nearByOpacitySticky_ = false; + bool clonedBySticky_ = false; + double stickyRadius_ = RADIUS_END; + RefPtr itemComponent_; + + ListItemClickedFunc clicked_; + + TransitionEffect transitionEffect_ = TransitionEffect::NONE; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_RENDER_LIST_ITEM_H diff --git a/frameworks/core/components/list/render_list_item_group.cpp b/frameworks/core/components/list/render_list_item_group.cpp new file mode 100644 index 00000000..14bac458 --- /dev/null +++ b/frameworks/core/components/list/render_list_item_group.cpp @@ -0,0 +1,686 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/list/render_list_item_group.h" + +#include "core/animation/curve.h" +#include "core/animation/curve_animation.h" +#include "core/components/flex/render_flex.h" +#include "core/components/list/list_item_group_component.h" +#include "core/event/ace_event_helper.h" + +namespace OHOS::Ace { +namespace { + +constexpr Dimension BOX_SIZE_WIDTH = 48.0_vp; +constexpr Dimension MARGIN_RIGHT_WIDTH = 2.0_vp; +constexpr int32_t ANIMATION_DURATION = 250; +constexpr float POSITION_ANIMATION_EXPAND_TIME = 0.8f; +constexpr float POSITION_ANIMATION_COLLAPSE_TIME = 0.333f; +constexpr float OPACITY_ANIMATION_EXPAND_TIME = 0.4f; +constexpr float OPACITY_ANIMATION_COLLAPSE_TIME = 0.5f; +constexpr float ROTATE_ANGLE = 180.0f; +constexpr float ROTATE_ANIMATION_EXPAND_TIME = 0.8f; +constexpr float ROTATE_ANIMATION_COLLAPSE_TIME = 0.667f; +const char LIST_ITEM_GROUP_EVENT_GROUPCLICK[] = "groupclick"; +const char LIST_ITEM_GROUP_EVENT_GROUPCOLLAPSE[] = "groupcollapse"; +const char LIST_ITEM_GROUP_EVENT_GROUPEXPAND[] = "groupexpand"; + +} // namespace + +std::string RenderListItemGroup::MakeEventParam(const std::string& command) +{ + return std::string("\"").append(command).append("\", ").append(R"({"groupid": ")").append(groupId_).append("\"}"); +} + +void RenderListItemGroup::HandleClicked() +{ + ResetChildVisibleState(); + expand_ = !expand_; + UpdateGroupComponentStatus(expand_); + UpdateExpandStatusInList(); + SetAnimationStop(); + + if (onClicked_) { + LOGD("list item group: onclicked"); + onClicked_(MakeEventParam(LIST_ITEM_GROUP_EVENT_GROUPCLICK)); + } + FireExpandEvent(); + MarkNeedLayout(); + LOGD("expand_: %{public}d", expand_); +} + +void RenderListItemGroup::FireExpandEvent() +{ + if (expand_ && onExpand_) { + LOGD("list item group: onexpand"); + onExpand_(MakeEventParam(LIST_ITEM_GROUP_EVENT_GROUPEXPAND)); + } + + if (!expand_ && onCollapse_) { + LOGD("list item group: oncollapse"); + onCollapse_(MakeEventParam(LIST_ITEM_GROUP_EVENT_GROUPCOLLAPSE)); + } +} + +LayoutParam RenderListItemGroup::MakeInnerLayoutParam() const +{ + LayoutParam innerLayout; + Size maxSize; + + if (direction_ == FlexDirection::ROW) { + maxSize = Size(Size::INFINITE_SIZE, GetLayoutParam().GetMaxSize().Height()); + } else { + maxSize = Size(GetLayoutParam().GetMaxSize().Width(), Size::INFINITE_SIZE); + } + innerLayout.SetMaxSize(maxSize); + return innerLayout; +} + +void RenderListItemGroup::AddArrowImage(double mainSize) +{ + if (arrowImage_) { + LayoutParam innerLayout; + double width = NormalizeToPx(imageSize_); + innerLayout.SetFixedSize(Size(width, width)); + arrowImage_->Layout(innerLayout); + + Size primarySize = primary_->GetLayoutSize(); + double offsetX = 0.0; + if (rightToLeft_) { + if (direction_ == FlexDirection::COLUMN) { + offsetX = NormalizeToPx(MARGIN_RIGHT_WIDTH); + } else { + offsetX = std::max( + mainSize - NormalizeToPx(BOX_SIZE_WIDTH + MARGIN_RIGHT_WIDTH + imageSize_) * FACTOR_HALF, 0.0); + } + } else { + offsetX = std::max( + primarySize.Width() - NormalizeToPx(BOX_SIZE_WIDTH + MARGIN_RIGHT_WIDTH + imageSize_) * FACTOR_HALF, + 0.0); + } + double offsetY = 0.0; + auto renderBox = GetRenderBox(primary_); + if (renderBox) { + double marginTop = NormalizeToPx(renderBox->GetMargin().Top()); + double marginRight = NormalizeToPx(renderBox->GetMargin().Right()); + double boxPaintHeight = renderBox->GetPaintSize().Height(); + offsetY = marginTop + std::max((boxPaintHeight - width) * FACTOR_HALF, 0.0); + offsetX = std::max(offsetX - marginRight, 0.0); + } else { + offsetY = std::max((primarySize.Height() - width) * FACTOR_HALF, 0.0); + } + arrowImage_->SetPosition(Offset(offsetX, offsetY)); + double rotateAngle = expand_ ? ROTATE_ANGLE : 0.0; + arrowImage_->SetRotate(rotateAngle); + if (!GetChildren().empty() && GetChildren().back() != arrowImage_) { + RemoveChild(arrowImage_); + AddChild(arrowImage_, GetChildren().size()); + } + } +} + +bool RenderListItemGroup::NeedRebuild() const +{ + auto children = GetChildren(); + if (children.empty()) { + LOGE("list item group has no list item child"); + return false; + } + bool needRebuild = false; + for (const auto& iter : children) { + auto listItemNode = RenderListItem::GetRenderListItem(iter); + if (listItemNode && listItemNode->GetPrimaryChange()) { + needRebuild = true; + listItemNode->SetPrimaryChange(false); + } + } + return needRebuild; +} + +void RenderListItemGroup::GetPrimaryItem() +{ + auto children = GetChildren(); + if (children.empty()) { + LOGE("list item group has no list item child"); + primary_ = nullptr; + return; + } + primary_ = nullptr; + // Find primary item. + for (const auto& iter : children) { + auto listItemNode = RenderListItem::GetRenderListItem(iter); + if (listItemNode) { + if (listItemNode->GetPrimary()) { + primary_ = iter; + break; + } + if (!primary_) { + primary_ = iter; + } + } + } + auto primaryListItem = RenderListItem::GetRenderListItem(primary_); + if (!primaryListItem) { + LOGE("list item group has no primary child"); + primary_ = nullptr; + return; + } + if (!primaryListItem->GetPrimary()) { + isDefaultPrimary_ = true; + } + primaryListItem->SetPrimary(true); + primaryListItem->SetCurPrimary(true); + primaryListItem->SetIndex(0); + primaryListItem->RegisterClickedCallback([weakItemGroup = AceType::WeakClaim(this)]() { + auto listItemGroup = weakItemGroup.Upgrade(); + if (listItemGroup) { + listItemGroup->HandleClicked(); + } + }); +} + +void RenderListItemGroup::LayoutExpandableList(double mainSize) +{ + double primarySize = GetMainSize(primary_->GetLayoutSize()); + if (NearEqual(mainSize, primarySize)) { + ResetChildVisibleState(); + return; + } + double curSize = 0.0; + auto children = GetChildren(); + auto rIter = children.rbegin(); + while (rIter != children.rend()) { + auto child = *rIter++; + if (child == primary_ || child == arrowImage_) { + continue; + } + + double childSize = GetMainSize(child->GetLayoutSize()); + if (childSize > mainSize - curSize - primarySize) { + child->SetVisible(false); + break; + } + child->SetVisible(true); + if (rightToLeft_ && direction_ == FlexDirection::ROW) { + child->SetPosition(MakeValue(curSize, 0.0)); + } else { + child->SetPosition(MakeValue(mainSize - curSize - childSize, 0.0)); + } + curSize += childSize; + if (curSize + primarySize >= mainSize) { + break; + } + } + + while (rIter != children.rend()) { + auto child = *rIter++; + if (child == primary_ || child == arrowImage_) { + continue; + } + child->SetVisible(false); + } + + MarkNeedLayout(); +} + +void RenderListItemGroup::SetAnimationStop() +{ + animating_ = false; +} + +void RenderListItemGroup::PerformLayout() +{ + LOGD("RenderListItemGroup::PerformLayout: %{public}d", animating_); + if (animating_) { + return; + } + + GetPrimaryItem(); + if (!primary_) { + ResetLayout(); + return; + } + + auto forceLayout = false; + if (NeedRebuild() && rebuild_) { + rebuild_(); + forceLayout = true; + GetPrimaryItem(); + } + double curMainSize = GetMainSize(GetLayoutSize()); + auto layoutParam = MakeInnerLayoutParam(); + primary_->Layout(layoutParam); + + double mainSize = GetMainSize(primary_->GetLayoutSize()); + double crossSize = std::max(0.0, GetCrossSize(primary_->GetLayoutSize())); + + // Layout other items. + int32_t index = 1; + for (const auto& child : GetChildren()) { + if (child == primary_ || child == arrowImage_) { + continue; + } + auto listItemNode = RenderListItem::GetRenderListItem(child); + if (listItemNode) { + listItemNode->SetIndex(index++); + } + if (expand_ || IsExpanded()) { + child->Layout(layoutParam); + mainSize += GetMainSize(child->GetLayoutSize()); + crossSize = std::max(crossSize, GetCrossSize(primary_->GetLayoutSize())); + } + } + AddArrowImage(mainSize); + + if (rightToLeft_ && direction_ == FlexDirection::ROW) { + primary_->SetPosition(Offset(mainSize - GetMainSize(primary_->GetLayoutSize()), 0.0)); + } else { + primary_->SetPosition(Offset::Zero()); + } + + double startPosition = curMainSize; + double endPosition = mainSize; + LOGD("startPosition: %{public}lf, endPosition: %{public}lf", startPosition, endPosition); + if (!NearZero(startPosition) && !forceLayout) { + if (NearEqual(startPosition, endPosition)) { + ResetChildVisibleState(); + LOGE("equal return"); + return; + } + AnimationPerformLayout(crossSize, startPosition, endPosition); + SetLayoutSize(MakeValue(startPosition, crossSize)); + } else { + LayoutExpandableList(endPosition); + SetLayoutSize(MakeValue(endPosition, crossSize)); + LOGD("layoutSize(no animation): %{public}s", GetLayoutSize().ToString().c_str()); + } +} + +bool RenderListItemGroup::IsExpanded() +{ + bool flag = expand_; + auto listParent = GetParent().Upgrade(); + RefPtr list = nullptr; + while (listParent) { + if (AceType::InstanceOf(listParent)) { + list = AceType::DynamicCast(listParent); + break; + } + listParent = listParent->GetParent().Upgrade(); + } + if (list) { + flag = expand_ || list->GetLayoutManager()->GetExpandStatus(GetIndex()); + } + return flag; +} + +void RenderListItemGroup::AnimationPerformLayout(double crossSize, double startPosition, double endPosition) +{ + if (!animator_->IsStopped()) { + animator_->Stop(); + } + animator_->ClearInterpolators(); + + RefPtr> positionAnimation = + createPositionAnimation(crossSize, startPosition, endPosition); + + auto opacityAnimation = CreateOpacityAnimation(); + auto rotateAnimation = CreateRotateAnimation(); + + animator_->AddInterpolator(positionAnimation); + animator_->AddInterpolator(opacityAnimation); + animator_->AddInterpolator(rotateAnimation); + + animator_->SetDuration(ANIMATION_DURATION); + animator_->Play(); + animating_ = true; + animator_->AddStopListener([weakItemGroup = AceType::WeakClaim(this)]() { + auto itemGroup = weakItemGroup.Upgrade(); + itemGroup->SetAnimationStop(); + itemGroup->SetChildStretch(false); + LOGD("layoutSize(animation): %{public}s", itemGroup->GetLayoutSize().ToString().c_str()); + }); +} + +RefPtr> RenderListItemGroup::createPositionAnimation( + double crossSize, double startPosition, double endPosition) +{ + float secondKeyTime = expand_ ? POSITION_ANIMATION_EXPAND_TIME : POSITION_ANIMATION_COLLAPSE_TIME; + double secondKeyValue = expand_ ? endPosition : startPosition; + RefPtr firstCurve; + if (expand_) { + firstCurve = Curves::FAST_OUT_LINEAR_IN; + } else { + firstCurve = Curves::LINEAR; + } + RefPtr secondCurve; + if (expand_) { + secondCurve = Curves::LINEAR; + } else { + secondCurve = Curves::FRICTION; + } + auto positionKeyframe1 = MakeRefPtr>(0.0f, startPosition); + auto positionKeyframe2 = MakeRefPtr>(secondKeyTime, secondKeyValue); + positionKeyframe2->SetCurve(firstCurve); + auto positionKeyframe3 = MakeRefPtr>(1.0f, endPosition); + positionKeyframe3->SetCurve(secondCurve); + auto positionAnimation = MakeRefPtr>(); + positionAnimation->AddKeyframe(positionKeyframe1); + positionAnimation->AddKeyframe(positionKeyframe2); + positionAnimation->AddKeyframe(positionKeyframe3); + positionAnimation->AddListener([weakItemGroup = WeakClaim(this), crossSize](double value) { + auto itemGroup = weakItemGroup.Upgrade(); + if (itemGroup) { + itemGroup->LayoutExpandableList(value); + itemGroup->SetLayoutSize(itemGroup->MakeValue(value, crossSize)); + } + }); + return positionAnimation; +} + +RefPtr> RenderListItemGroup::CreateOpacityAnimation() +{ + int32_t startOpacity = expand_ ? 0 : UINT8_MAX; + int32_t endOpacity = UINT8_MAX - startOpacity; + double secondKeyTime = expand_ ? OPACITY_ANIMATION_EXPAND_TIME : OPACITY_ANIMATION_COLLAPSE_TIME; + int32_t secondKeyValue = expand_ ? startOpacity : endOpacity; + RefPtr firstCurve; + if (expand_) { + firstCurve = Curves::LINEAR; + } else { + firstCurve = Curves::FAST_OUT_LINEAR_IN; + } + RefPtr secondCurve; + if (expand_) { + secondCurve = Curves::FRICTION; + } else { + secondCurve = Curves::LINEAR; + } + auto opacityKeyframe1 = MakeRefPtr>(0.0f, startOpacity); + auto opacityKeyframe2 = MakeRefPtr>(secondKeyTime, secondKeyValue); + opacityKeyframe2->SetCurve(firstCurve); + auto opacityKeyframe3 = MakeRefPtr>(1.0f, endOpacity); + opacityKeyframe3->SetCurve(secondCurve); + auto opacityAnimation = MakeRefPtr>(); + opacityAnimation->AddKeyframe(opacityKeyframe1); + opacityAnimation->AddKeyframe(opacityKeyframe2); + opacityAnimation->AddKeyframe(opacityKeyframe3); + opacityAnimation->AddListener([weakItemGroup = WeakClaim(this)](int32_t value) { + auto itemGroup = weakItemGroup.Upgrade(); + if (itemGroup) { + itemGroup->SetChildOpacity(value); + } + }); + return opacityAnimation; +} + +void RenderListItemGroup::SetChildOpacity(int32_t opacity) +{ + auto children = GetChildren(); + auto rIter = children.rbegin(); + while (rIter != children.rend()) { + auto child = *rIter++; + if (child == primary_ || child == arrowImage_) { + continue; + } + auto listItem = RenderListItem::GetRenderListItem(child); + if (listItem) { + listItem->SetStretch(true); + listItem->SetExpandOpacity(opacity); + listItem->MarkNeedRender(); + } + } + MarkNeedLayout(); +} + +void RenderListItemGroup::SetChildStretch(bool isStretch) +{ + auto children = GetChildren(); + auto rIter = children.rbegin(); + while (rIter != children.rend()) { + auto child = *rIter++; + if (child == primary_ || child == arrowImage_) { + continue; + } + auto listItem = RenderListItem::GetRenderListItem(child); + if (listItem) { + listItem->SetStretch(isStretch); + } + } +} + +void RenderListItemGroup::Update(const RefPtr& component) +{ + auto theme = GetTheme(); + if (theme) { + imageSize_ = theme->GetGroupImageSize(); + } + + if (!animator_) { + animator_ = AceType::MakeRefPtr(GetContext()); + } + + itemGroup_ = component; + auto itemGroup = AceType::DynamicCast(itemGroup_); + if (itemGroup) { + groupId_ = itemGroup->GetGroupId(); + expand_ = itemGroup->GetExpand(); + onClicked_ = AceAsyncEvent::Create(itemGroup->GetOnClicked(), GetContext()); + onCollapse_ = AceAsyncEvent::Create(itemGroup->GetOnCollapse(), GetContext()); + onExpand_ = AceAsyncEvent::Create(itemGroup->GetOnExpand(), GetContext()); + + if (initialUpdate_) { + InitialImage(); + initialUpdate_ = false; + } + + SetAnimationStop(); + MarkNeedLayout(); + } + LOGD("RenderListItemGroup::Update"); + RenderListItem::Update(component); +} + +void RenderListItemGroup::InitialImage() +{ + InternalResource::ResourceId resourceId = SystemProperties::GetDeviceType() == DeviceType::WATCH + ? InternalResource::ResourceId::WATCH_DOWN_ARROW_SVG + : InternalResource::ResourceId::DOWN_ARROW_SVG; + double rotateAngle = expand_ ? ROTATE_ANGLE : 0.0; + auto imageComponent = AceType::MakeRefPtr(resourceId); + imageComponent->SetWidth(imageSize_); + imageComponent->SetHeight(imageSize_); + + arrowImage_ = AceType::DynamicCast(imageComponent->CreateRenderNode()); + arrowImage_->SetRotate(rotateAngle); + arrowImage_->Attach(GetContext()); + arrowImage_->Update(imageComponent); +} + +void RenderListItemGroup::ChangeDirection(FlexDirection direction) +{ + if (direction_ != direction) { + LOGD("direction has change, reset item group layoutSize and primary position"); + direction_ = direction; + expand_ = false; + UpdateExpandStatusInList(); + ResetLayout(); + } +} + +void RenderListItemGroup::ResetLayout() +{ + SetLayoutSize(Size(0.0, 0.0)); + if (primary_) { + primary_->SetPosition(Offset::Zero()); + } +} + +void RenderListItemGroup::UpdateExpandStatusInList() +{ + auto parentNode = GetParent().Upgrade(); + while (parentNode) { + RefPtr listNode = AceType::DynamicCast(parentNode); + if (listNode) { + listNode->SetGroupState(GetIndex(), expand_); + break; + } + parentNode = parentNode->GetParent().Upgrade(); + } +} + +RefPtr RenderListItemGroup::GetRenderBox(const RefPtr& renderNode) +{ + RefPtr box = renderNode; + while (box) { + auto& children = box->GetChildren(); + if (children.empty()) { + return nullptr; + } + if (AceType::InstanceOf(box) && AceType::InstanceOf(children.front())) { + return AceType::DynamicCast(box); + } + box = children.front(); + } + return nullptr; +} + +RefPtr> RenderListItemGroup::CreateRotateAnimation() +{ + double secondKeyTime = expand_ ? ROTATE_ANIMATION_EXPAND_TIME : ROTATE_ANIMATION_COLLAPSE_TIME; + auto rotateKeyframe1 = MakeRefPtr>(0.0f, 0.0f); + auto rotateKeyframe2 = MakeRefPtr>(secondKeyTime, ROTATE_ANGLE); + rotateKeyframe2->SetCurve(Curves::FRICTION); + auto rotateKeyframe3 = MakeRefPtr>(1.0f, ROTATE_ANGLE); + rotateKeyframe3->SetCurve(Curves::FRICTION); + auto rotateAnimation = MakeRefPtr>(); + rotateAnimation->AddKeyframe(rotateKeyframe1); + rotateAnimation->AddKeyframe(rotateKeyframe2); + rotateAnimation->AddKeyframe(rotateKeyframe3); + rotateAnimation->AddListener([weakItemGroup = WeakClaim(this)](double value) { + auto itemGroup = weakItemGroup.Upgrade(); + if (itemGroup) { + itemGroup->RotateArrow(value); + } + }); + return rotateAnimation; +} + +void RenderListItemGroup::RotateArrow(double angle) +{ + if (arrowImage_) { + double rotateAngle = expand_ ? angle : ROTATE_ANGLE - angle; + arrowImage_->SetRotate(rotateAngle); + arrowImage_->MarkNeedRender(); + } +} + +void RenderListItemGroup::UpdateGroupComponentStatus(bool expand) +{ + // Restore the state on component for recycle and rebuild. + auto itemGroup = AceType::DynamicCast(itemGroup_); + if (itemGroup) { + itemGroup->SetExpand(expand); + } +} + +void RenderListItemGroup::ResetChildVisibleState() +{ + for (const auto& child : GetChildren()) { + if (child == primary_ || child == arrowImage_) { + child->SetVisible(true); + continue; + } + child->SetVisible(expand_); + } +} + +RefPtr RenderListItemGroup::GetRenderList() +{ + auto parentNode = GetParent().Upgrade(); + while (parentNode) { + RefPtr listNode = AceType::DynamicCast(parentNode); + if (listNode) { + return listNode; + } + parentNode = parentNode->GetParent().Upgrade(); + } + return nullptr; +} + +void RenderListItemGroup::ShowFocusAnimation() +{ + RefPtr focusItem; + if (!expand_) { + focusItem = RenderListItem::GetRenderListItem(primary_); + if (focusItem) { + focusItem->SetFocused(true); + focusItem->ShowFocusAnimation(true, Rect(0.0, 0.0, 0.0, 0.0)); + } + } + for (const auto& child : GetChildren()) { + if (child == arrowImage_) { + continue; + } + focusItem = RenderListItem::GetRenderListItem(child); + if (focusItem && focusItem->IsFocused()) { + if (expand_) { + focusItem->ShowFocusAnimation(true, Rect(0.0, 0.0, 0.0, 0.0)); + break; + } + if (child != primary_) { + focusItem->SetFocused(false); + } + break; + } + } +} + +int32_t RenderListItemGroup::GetNextFocusIndex(int32_t lastFocusIndex, bool vertical, bool reverse) +{ + KeyDirection key = DIRECTION_MAP.at(rightToLeft_).at(direction_).at(vertical).at(reverse); + switch (key) { + case KeyDirection::UP: + return lastFocusIndex - 1; + case KeyDirection::DOWN: { + return lastFocusIndex + 1; + } + default: + break; + } + return -1; +} + +void RenderListItemGroup::UpdateTouchRect() +{ + SetTouchRect(GetPaintRect()); +} + +void RenderListItemGroup::ItemPrimaryChange(int32_t index) +{ + if (isDefaultPrimary_) { + for (auto child : GetChildren()) { + auto listItem = RenderListItem::GetRenderListItem(child); + if (listItem && listItem->GetPrimary()) { + listItem->SetPrimary(false); + isDefaultPrimary_ = false; + break; + } + } + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/list/render_list_item_group.h b/frameworks/core/components/list/render_list_item_group.h new file mode 100644 index 00000000..b025a057 --- /dev/null +++ b/frameworks/core/components/list/render_list_item_group.h @@ -0,0 +1,141 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_RENDER_LIST_ITEM_GROUP_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_RENDER_LIST_ITEM_GROUP_H + +#include "base/utils/system_properties.h" +#include "core/animation/animator.h" +#include "core/components/box/render_box.h" +#include "core/components/image/image_component.h" +#include "core/components/image/render_image.h" +#include "core/components/list/render_list.h" +#include "core/components/list/render_list_item.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +using GroupEventFunc = std::function; +using RebuildFunc = std::function; + +class RenderListItemGroup : public RenderListItem { + DECLARE_ACE_TYPE(RenderListItemGroup, RenderListItem); + +public: + static RefPtr Create(); + void LayoutExpandableList(double mainSize); + void SetAnimationStop(); + void ChangeDirection(FlexDirection direction); + void HandleClicked(); + void UpdateExpandStatusInList(); + void ResetLayout(); + + RefPtr GetRenderList(); + void ShowFocusAnimation(); + int32_t GetNextFocusIndex(int32_t lastFocusIndex, bool vertical, bool reverse); + void OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) override {} + void UpdateTouchRect() override; + void ItemPrimaryChange(int32_t index); + + void RegisterRebuildCallback(const RebuildFunc& rebuild) + { + rebuild_ = rebuild; + } + + void SetExpand(bool expand) + { + if (expand_ != expand) { + expand_ = expand; + FireExpandEvent(); + UpdateGroupComponentStatus(expand); + } + } + + bool GetExpand() const + { + return expand_; + } + + void SetRightToLeft(bool rightToLeft) + { + rightToLeft_ = rightToLeft; + } + + double GetMainSize(const Size& size) const + { + return direction_ == FlexDirection::ROW ? size.Width() : size.Height(); + } + + bool IsExpanded(); + +protected: + bool expand_ = false; + GroupEventFunc onClicked_; + GroupEventFunc onCollapse_; + GroupEventFunc onExpand_; + std::string groupId_; + +private: + template + T MakeValue(double mainValue, double crossValue) const + { + return direction_ == FlexDirection::ROW ? T(mainValue, crossValue) : T(crossValue, mainValue); + } + + double GetCrossSize(const Size& size) const + { + return direction_ == FlexDirection::ROW ? size.Height() : size.Width(); + } + + void PerformLayout() override; + void Update(const RefPtr& component) override; + LayoutParam MakeInnerLayoutParam() const; + void GetPrimaryItem(); + bool NeedRebuild() const; + std::string MakeEventParam(const std::string& command); + + void AddArrowImage(double mainSize); + void InitialImage(); + void AnimationPerformLayout(double crossSize, double startPosition, double endPosition); + RefPtr> createPositionAnimation( + double crossSize, double startPosition, double endPosition); + RefPtr> CreateOpacityAnimation(); + void SetChildOpacity(int32_t opacity); + void SetChildStretch(bool isStretch); + RefPtr GetRenderBox(const RefPtr& renderNode); + RefPtr> CreateRotateAnimation(); + void RotateArrow(double angle); + void ResetChildVisibleState(); + void UpdateGroupComponentStatus(bool expand); + void FireExpandEvent(); + + RebuildFunc rebuild_; + FlexDirection direction_ = FlexDirection::COLUMN; + RefPtr primary_; + RefPtr animator_; + bool animating_ = false; + bool rightToLeft_ = false; + + bool initialUpdate_ = true; + bool isDefaultPrimary_ = false; + Dimension imageSize_; + RefPtr arrowImage_; + RefPtr itemGroup_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_RENDER_LIST_ITEM_GROUP_H diff --git a/frameworks/core/components/list/tv_interactive_effect.cpp b/frameworks/core/components/list/tv_interactive_effect.cpp new file mode 100644 index 00000000..4562f5bd --- /dev/null +++ b/frameworks/core/components/list/tv_interactive_effect.cpp @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/list/tv_interactive_effect.h" + +namespace OHOS::Ace { + +void TVInteractiveEffect::BuildStateAnimation() +{ + if (!theme_) { + LOGE("theme is invalid, stop build animation"); + return; + } + + auto scaleFrameStart = AceType::MakeRefPtr>(ANIMATION_ZERO_TIME, scaleBegin_); + auto scaleFrameEnd = AceType::MakeRefPtr>(ANIMATION_END_TIME, scaleEnd_); + scaleFrameEnd->SetCurve(Curves::FRICTION); + + auto scaleAnimation = AceType::MakeRefPtr>(); + scaleAnimation->AddKeyframe(scaleFrameStart); + scaleAnimation->AddKeyframe(scaleFrameEnd); + scaleAnimation->AddListener([weakEffect = AceType::WeakClaim(this)](double value) { + auto effect = weakEffect.Upgrade(); + if (effect) { + effect->SetScale(value); + effect->MarkItemRender(); + } + }); + + if (controller_) { + controller_->ClearInterpolators(); + controller_->AddInterpolator(scaleAnimation); + controller_->SetDuration(focusDuration_); + controller_->Play(); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/list/tv_interactive_effect.h b/frameworks/core/components/list/tv_interactive_effect.h new file mode 100644 index 00000000..26520daf --- /dev/null +++ b/frameworks/core/components/list/tv_interactive_effect.h @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_TV_INTERACTIVE_EFFECT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_TV_INTERACTIVE_EFFECT_H + +#include "core/components/list/interactive_effect.h" + +namespace OHOS::Ace { + +class TVInteractiveEffect : public InteractiveEffect { + DECLARE_ACE_TYPE(TVInteractiveEffect, InteractiveEffect); + +public: + explicit TVInteractiveEffect(const WeakPtr& context) : InteractiveEffect(context) {} + + ~TVInteractiveEffect() override = default; + + void HandleOnClick() override {} + + void HandleOnFocus() override + { + scaleBegin_ = scale_; + if (theme_) { + scaleEnd_ = theme_->GetFocusScale(); // 1.05 + focusDuration_ = theme_->GetFocusAnimationDuration(); // 100.0 + } else { + LOGE("TV HandleOnFocus : theme is not invalid"); + } + } + + void HandleOnBlur() override + { + scaleBegin_ = scale_; + if (theme_) { + scaleEnd_ = theme_->GetFocusScaleLarge(); // 1.0 + alphaBegin_ = theme_->GetClickAlphaEnd(); // 0.9 + alphaEnd_ = theme_->GetClickAlphaBegin(); // 0.2 + focusDuration_ = theme_->GetFocusAnimationDuration(); // 100.0 + } else { + LOGE("TV HandleOnBlur : theme is not invalid"); + } + } + + void BuildStateAnimation() override; + void BuildClickAnimation() override {} +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_TV_INTERACTIVE_EFFECT_H diff --git a/frameworks/core/components/list/watch_interactive_effect.cpp b/frameworks/core/components/list/watch_interactive_effect.cpp new file mode 100644 index 00000000..d31f7131 --- /dev/null +++ b/frameworks/core/components/list/watch_interactive_effect.cpp @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/list/watch_interactive_effect.h" + +#include "core/components/list/render_list_item.h" + +namespace OHOS::Ace { + +void WatchInteractiveEffect::BuildClickAnimation() +{ + if (!theme_) { + LOGE("theme is invalid, stop build animation"); + return; + } + + if (!NeedClickAnimation()) { + return; + } + + RefPtr> scaleAnimation = AceType::MakeRefPtr>(); + RefPtr> alphaAnimation = AceType::MakeRefPtr>(); + BuildClickScaleAnimation(scaleAnimation); + BuildClickAlphaAnimation(alphaAnimation); + if (controller_) { + controller_->ClearInterpolators(); + controller_->AddInterpolator(scaleAnimation); + controller_->AddInterpolator(alphaAnimation); + controller_->SetDuration(clickDuration_); + controller_->Play(); + } +} + +void WatchInteractiveEffect::BuildClickScaleAnimation(const RefPtr>& scaleAnimation) +{ + auto scaleFrameStart = AceType::MakeRefPtr>(ANIMATION_ZERO_TIME, scaleBegin_); + auto scaleFrameMid = AceType::MakeRefPtr>(ANIMATION_HALF_TIME, scaleEnd_); + auto scaleFrameEnd = AceType::MakeRefPtr>(ANIMATION_END_TIME, scaleBegin_); + scaleFrameMid->SetCurve(Curves::FRICTION); + scaleFrameEnd->SetCurve(Curves::FRICTION); + + scaleAnimation->AddKeyframe(scaleFrameStart); + scaleAnimation->AddKeyframe(scaleFrameMid); + scaleAnimation->AddKeyframe(scaleFrameEnd); + scaleAnimation->AddListener([weakEffect = AceType::WeakClaim(this)](double value) { + auto effect = weakEffect.Upgrade(); + if (effect) { + effect->SetScale(value); + effect->MarkItemRender(); + } + }); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/list/watch_interactive_effect.h b/frameworks/core/components/list/watch_interactive_effect.h new file mode 100644 index 00000000..9b8c5bcc --- /dev/null +++ b/frameworks/core/components/list/watch_interactive_effect.h @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_WATCH_INTERACTIVE_EFFECT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_WATCH_INTERACTIVE_EFFECT_H + +#include "core/components/list/interactive_effect.h" + +namespace OHOS::Ace { + +class WatchInteractiveEffect : public InteractiveEffect { + DECLARE_ACE_TYPE(WatchInteractiveEffect, InteractiveEffect); + +public: + explicit WatchInteractiveEffect(const WeakPtr& context) : InteractiveEffect(context) {} + + ~WatchInteractiveEffect() override = default; + + void HandleOnClick() override + { + scaleBegin_ = scale_; + if (theme_) { + scaleEnd_ = scale_ * theme_->GetClickScale(); // scale_ * 0.95; + alphaBegin_ = theme_->GetClickAlphaBegin(); // 0.0 + alphaEnd_ = theme_->GetClickAlphaEnd(); // 0.1 + focusDuration_ = theme_->GetClickAnimationDuration(); // 200.0 + } else { + LOGE("HandleOnClick : theme is not invalid"); + } + } + + void BuildClickAnimation() override; + +private: + void BuildClickScaleAnimation(const RefPtr>& scaleAnimation); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_LIST_WATCH_INTERACTIVE_EFFECT_H diff --git a/frameworks/core/components/marquee/BUILD.gn b/frameworks/core/components/marquee/BUILD.gn new file mode 100644 index 00000000..166709cb --- /dev/null +++ b/frameworks/core/components/marquee/BUILD.gn @@ -0,0 +1,21 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("marquee") { + sources = [ + "flutter_render_marquee.cpp", + "render_marquee.cpp", + ] +} diff --git a/frameworks/core/components/marquee/flutter_render_marquee.cpp b/frameworks/core/components/marquee/flutter_render_marquee.cpp new file mode 100644 index 00000000..aed749d4 --- /dev/null +++ b/frameworks/core/components/marquee/flutter_render_marquee.cpp @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/marquee/flutter_render_marquee.h" + +#include "flutter/third_party/icu/source/common/unicode/uchar.h" + +#include "base/utils/string_utils.h" + +namespace OHOS::Ace { + +using namespace Flutter; + +RefPtr RenderMarquee::Create() +{ + return AceType::MakeRefPtr(); +} + +RenderLayer FlutterRenderMarquee::GetRenderLayer() +{ + if (!layer_) { + layer_ = AceType::MakeRefPtr( + 0.0, GetLayoutSize().Width(), 0.0, GetLayoutSize().Height(), Clip::HARD_EDGE); + } + return AceType::RawPtr(layer_); +} + +void FlutterRenderMarquee::Paint(RenderContext& context, const Offset& offset) +{ + layer_->SetClip(0.0, GetLayoutSize().Width(), 0.0, GetLayoutSize().Height(), Clip::HARD_EDGE); + RenderNode::Paint(context, offset); +} + +TextDirection FlutterRenderMarquee::GetTextDirection(const std::string& text) const +{ + auto wstring = StringUtils::ToWstring(text); + // Find first strong direction char. + for (const auto& charInStr : wstring) { + auto direction = u_charDirection(charInStr); + if (direction == UCharDirection::U_LEFT_TO_RIGHT) { + return TextDirection::LTR; + } + if (direction == UCharDirection::U_RIGHT_TO_LEFT || direction == UCharDirection::U_RIGHT_TO_LEFT_ARABIC) { + return TextDirection::RTL; + } + } + return TextDirection::INHERIT; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/marquee/flutter_render_marquee.h b/frameworks/core/components/marquee/flutter_render_marquee.h new file mode 100644 index 00000000..e913ad68 --- /dev/null +++ b/frameworks/core/components/marquee/flutter_render_marquee.h @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_MARQUEE_FLUTTER_RENDER_MARQUEE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_MARQUEE_FLUTTER_RENDER_MARQUEE_H + +#include "core/components/marquee/render_marquee.h" +#include "core/pipeline/layers/clip_layer.h" + +namespace OHOS::Ace { + +class FlutterRenderMarquee : public RenderMarquee { + DECLARE_ACE_TYPE(FlutterRenderMarquee, RenderMarquee); + +public: + FlutterRenderMarquee() = default; + ~FlutterRenderMarquee() override = default; + + RenderLayer GetRenderLayer() override; + void Paint(RenderContext& context, const Offset& offset) override; + + bool IsRepaintBoundary() const override + { + return true; + } + +protected: + TextDirection GetTextDirection(const std::string& text) const override; + +private: + RefPtr layer_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_MARQUEE_FLUTTER_RENDER_MARQUEE_H diff --git a/frameworks/core/components/marquee/marquee_component.h b/frameworks/core/components/marquee/marquee_component.h new file mode 100644 index 00000000..a1a37ce2 --- /dev/null +++ b/frameworks/core/components/marquee/marquee_component.h @@ -0,0 +1,177 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_MARQUEE_MARQUEE_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_MARQUEE_MARQUEE_COMPONENT_H + +#include "core/components/marquee/render_marquee.h" +#include "core/components/text/text_component.h" +#include "core/pipeline/base/sole_child_component.h" + +namespace OHOS::Ace { + +inline constexpr double DEFAULT_MARQUEE_SCROLL_AMOUNT = 6.0; +inline constexpr int32_t DEFAULT_MARQUEE_LOOP = -1; + +using MarqueeStartFunc = std::function; +using MarqueeStopFunc = std::function; + +class MarqueeController : public virtual AceType { + DECLARE_ACE_TYPE(MarqueeController, AceType); + +public: + void Start() const + { + if (startFunc_) { + startFunc_(); + } + } + + void Stop() const + { + if (stopFunc_) { + stopFunc_(); + } + } + + void SetFunction(const MarqueeStartFunc& startFunc, const MarqueeStopFunc& stopFunc) + { + startFunc_ = startFunc; + stopFunc_ = stopFunc; + } + +private: + MarqueeStartFunc startFunc_; + MarqueeStopFunc stopFunc_; +}; + +class MarqueeComponent : public SoleChildComponent { + DECLARE_ACE_TYPE(MarqueeComponent, SoleChildComponent); + +public: + MarqueeComponent() : SoleChildComponent() + { + textChild_ = AceType::MakeRefPtr(""); + SetChild(textChild_); + controller_ = AceType::MakeRefPtr(); + } + + ~MarqueeComponent() override = default; + + RefPtr CreateRenderNode() override + { + return RenderMarquee::Create(); + } + + const std::string& GetValue() const + { + return textChild_->GetData(); + } + + void SetValue(const std::string& value) + { + textChild_->SetData(value); + } + + const TextStyle& GetTextStyle() const + { + return textChild_->GetTextStyle(); + } + + void SetTextStyle(const TextStyle& textStyle) + { + textChild_->SetTextStyle(textStyle); + textChild_->SetFocusColor(textStyle.GetTextColor()); + } + + double GetScrollAmount() const + { + return scrollAmount_; + } + + void SetScrollAmount(double scrollAmount) + { + scrollAmount_ = scrollAmount; + } + + int32_t GetLoop() const + { + return loop_; + } + + void SetLoop(int32_t loop) + { + loop_ = loop; + } + + MarqueeDirection GetDirection() const + { + return direction_; + } + + void SetDirection(MarqueeDirection direction) + { + direction_ = direction; + } + + void SetBounceEventId(const EventMarker& eventId) + { + bounceEventId_ = eventId; + } + + const EventMarker& GetBounceEventId() const + { + return bounceEventId_; + } + + void SetFinishEventId(const EventMarker& eventId) + { + finishEventId_ = eventId; + } + + const EventMarker& GetFinishEventId() const + { + return finishEventId_; + } + + void SetStartEventId(const EventMarker& eventId) + { + startEventId_ = eventId; + } + + const EventMarker& GetStartEventId() const + { + return startEventId_; + } + + RefPtr GetController() const + { + return controller_; + } + +private: + RefPtr textChild_; + double scrollAmount_ = DEFAULT_MARQUEE_SCROLL_AMOUNT; + int32_t loop_ = DEFAULT_MARQUEE_LOOP; + MarqueeDirection direction_ { MarqueeDirection::LEFT }; + EventMarker bounceEventId_; + EventMarker finishEventId_; + EventMarker startEventId_; + RefPtr controller_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_MARQUEE_MARQUEE_COMPONENT_H diff --git a/frameworks/core/components/marquee/marquee_theme.h b/frameworks/core/components/marquee/marquee_theme.h new file mode 100644 index 00000000..a89d5904 --- /dev/null +++ b/frameworks/core/components/marquee/marquee_theme.h @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_MARQUEE_MARQUEE_THEME_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_MARQUEE_MARQUEE_THEME_H + +#include "base/geometry/dimension.h" +#include "core/components/common/properties/color.h" +#include "core/components/common/properties/text_style.h" +#include "core/components/theme/theme.h" +#include "core/components/theme/theme_constants.h" + +namespace OHOS::Ace { + +/** + * MarqueeTheme defines color and styles of MarqueeComponent. MarqueeTheme should be built + * using MarqueeTheme::Builder. + */ +class MarqueeTheme : public virtual Theme { + DECLARE_ACE_TYPE(MarqueeTheme, Theme); + +public: + class Builder { + public: + Builder() = default; + ~Builder() = default; + + RefPtr Build(const RefPtr& themeConstants) const + { + RefPtr theme = AceType::Claim(new MarqueeTheme()); + if (!themeConstants) { + return theme; + } + theme->textColor_ = themeConstants->GetColor(THEME_MARQUEE_TEXT_COLOR); + theme->fontSize_ = themeConstants->GetDimension(THEME_MARQUEE_FONT_SIZE); + auto themeStyle = themeConstants->GetThemeStyle(); + if (themeStyle) { + theme->textColor_ = themeStyle->GetAttr(THEME_ATTR_TEXT_COLOR_PRIMARY, Color::BLACK); + } + return theme; + } + }; + + ~MarqueeTheme() override = default; + + const Color& GetTextColor() const + { + return textColor_; + } + + const Dimension& GetFontSize() const + { + return fontSize_; + } + +protected: + MarqueeTheme() = default; + +private: + Color textColor_; + Dimension fontSize_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_MARQUEE_MARQUEE_THEME_H diff --git a/frameworks/core/components/marquee/render_marquee.cpp b/frameworks/core/components/marquee/render_marquee.cpp new file mode 100644 index 00000000..24753e1c --- /dev/null +++ b/frameworks/core/components/marquee/render_marquee.cpp @@ -0,0 +1,271 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/marquee/render_marquee.h" + +#include "base/log/event_report.h" +#include "core/animation/curves.h" +#include "core/components/marquee/marquee_component.h" +#include "core/event/ace_event_helper.h" + +namespace OHOS::Ace { +namespace { + +// Defines how long delay will be between each jump. +constexpr double DEFAULT_MARQUEE_SCROLL_DELAY = 85.0; + +bool IsPlayingAnimation(const RefPtr& controller) +{ + return (controller->GetStatus() == Animator::Status::RUNNING); +} + +} // namespace + +void RenderMarquee::Start() +{ + LOGD("StartAnimation called."); + if ((!childText_) || (!controller_)) { + startAfterLayout_ = true; + LOGW("Node has not built yet, animation will start after layout."); + return; + } + if (isHidden_) { + startAfterShowed_ = true; + LOGW("Marquee is hidden, animation will start when showed."); + return; + } + if (controller_->GetStatus() == Animator::Status::PAUSED) { + controller_->Resume(); + } else if (controller_->GetStatus() != Animator::Status::RUNNING) { + // Start first loop + currentLoop_ = 1; + UpdateAnimation(); + controller_->Play(); + } else { + LOGD("Animation already started."); + } +} + +void RenderMarquee::Stop() +{ + LOGD("StopAnimation called."); + startAfterLayout_ = false; + startAfterShowed_ = false; + if (!controller_) { + LOGE("Node has not initialized."); + return; + } + if (!IsPlayingAnimation(controller_)) { + LOGD("Animation is not playing, status=%{public}d", controller_->GetStatus()); + return; + } + controller_->Pause(); +} + +void RenderMarquee::OnHiddenChanged(bool hidden) +{ + LOGD("OnHiddenChanged hidden=%{public}d. startAfterShowed_=%{public}d", hidden, startAfterShowed_); + isHidden_ = hidden; + if (!controller_) { + return; + } + if (hidden) { + if (IsPlayingAnimation(controller_)) { + startAfterShowed_ = true; + LOGD("OnHiddenChanged pause animation. startAfterShowed_=%{public}d", startAfterShowed_); + controller_->Pause(); + } + } else { + if (startAfterShowed_) { + startAfterShowed_ = false; + Start(); + } + } +} + +void RenderMarquee::UpdateAnimation() +{ + double from = 0.0; + double to = 0.0; + if (direction_ == MarqueeDirection::LEFT) { + from = GetLayoutSize().Width(); + to = -childText_->GetLayoutSize().Width(); + } else { + from = -childText_->GetLayoutSize().Width(); + to = GetLayoutSize().Width(); + } + // "scrollAmount_" won't be zero, since it's initialized at Update(). + int32_t duration = static_cast(std::abs(to - from) * DEFAULT_MARQUEE_SCROLL_DELAY / scrollAmount_); + if (translate_) { + controller_->RemoveInterpolator(translate_); + } + translate_ = AceType::MakeRefPtr>(from, to, Curves::LINEAR); + auto weak = AceType::WeakClaim(this); + translate_->AddListener(Animation::ValueCallback([weak](double value) { + auto marquee = weak.Upgrade(); + if (marquee) { + marquee->UpdateChildPosition(value); + } + })); + LOGD("UpdateAnimation, from:%{public}lf, to:%{public}lf, scrollAmount:%{public}lf, duration:%{public}u", from, to, + scrollAmount_, duration); + controller_->SetDuration(duration); + controller_->AddInterpolator(translate_); +} + +void RenderMarquee::UpdateChildPosition(double position) +{ + childPosition_ = Offset(position, 0.0); + childText_->SetPosition(childPosition_); + MarkNeedRender(); +} + +void RenderMarquee::OnAnimationStart() +{ + LOGD("OnAnimationStart"); + if (startEvent_) { + startEvent_(); + } +} + +void RenderMarquee::OnAnimationStop() +{ + LOGD("OnBounce"); + if (bounceEvent_) { + bounceEvent_(); + } + bool continueAnimation = false; + if (loop_ <= 0) { + // Infinite loop + continueAnimation = true; + } else { + if (currentLoop_ < loop_) { + currentLoop_++; + continueAnimation = true; + } else { + // All loop finished + LOGD("OnFinish"); + if (finishEvent_) { + finishEvent_(); + } + } + } + if (continueAnimation) { + UpdateAnimation(); + controller_->Play(); + } +} + +void RenderMarquee::Update(const RefPtr& component) +{ + const RefPtr marquee = AceType::DynamicCast(component); + if (!marquee) { + LOGE("marquee component is null"); + EventReport::SendRenderException(RenderExcepType::RENDER_COMPONENT_ERR); + return; + } + scrollAmount_ = marquee->GetScrollAmount(); + if (LessOrEqual(scrollAmount_, 0.0)) { + scrollAmount_ = DEFAULT_MARQUEE_SCROLL_AMOUNT; + } + loop_ = marquee->GetLoop(); + if (loop_ <= 0) { + loop_ = ANIMATION_REPEAT_INFINITE; + } + auto textDir = GetTextDirection(marquee->GetValue()); + auto context = GetContext().Upgrade(); + bool systemRTL = context != nullptr ? context->IsRightToLeft() : false; + bool isRTL = textDir == TextDirection::INHERIT ? systemRTL : (textDir == TextDirection::RTL); + direction_ = + isRTL ? (marquee->GetDirection() == MarqueeDirection::LEFT ? MarqueeDirection::RIGHT : MarqueeDirection::LEFT) + : marquee->GetDirection(); + + bounceEvent_ = AceAsyncEvent::Create(marquee->GetBounceEventId(), context_); + finishEvent_ = AceAsyncEvent::Create(marquee->GetFinishEventId(), context_); + startEvent_ = AceAsyncEvent::Create(marquee->GetStartEventId(), context_); + const auto& methodController = marquee->GetController(); + if (methodController) { + auto weak = AceType::WeakClaim(this); + methodController->SetFunction( + [weak]() { + auto marquee = weak.Upgrade(); + if (marquee) { + marquee->Start(); + } + }, + [weak]() { + auto marquee = weak.Upgrade(); + if (marquee) { + marquee->Stop(); + } + }); + } + if (!controller_) { + controller_ = AceType::MakeRefPtr(GetContext()); + auto weak = AceType::WeakClaim(this); + controller_->AddStartListener(Animator::StatusCallback([weak]() { + auto marquee = weak.Upgrade(); + if (marquee) { + marquee->OnAnimationStart(); + } + })); + controller_->AddStopListener(Animator::StatusCallback([weak]() { + auto marquee = weak.Upgrade(); + if (marquee) { + marquee->OnAnimationStop(); + } + })); + } + MarkNeedLayout(); +} + +void RenderMarquee::PerformLayout() +{ + const auto& children = GetChildren(); + if (children.empty()) { + LOGW("Marquee has no text child!"); + return; + } + // Layout child text, child's width has no limit, marquee's width is constrained by parent. + LayoutParam innerLayout; + innerLayout.SetMaxSize(Size(Size::INFINITE_SIZE, GetLayoutParam().GetMaxSize().Height())); + innerLayout.SetMinSize(GetLayoutParam().GetMinSize()); + childText_ = children.front(); + ACE_DCHECK(childText_); + childText_->Layout(innerLayout); + auto lastLayoutSize = GetLayoutSize(); + Size layoutSize = GetLayoutParam().Constrain(Size(Size::INFINITE_SIZE, childText_->GetLayoutSize().Height())); + if (childPosition_.IsErrorOffset() || lastLayoutSize != layoutSize) { + // Initialize child position. + if (direction_ == MarqueeDirection::LEFT) { + childPosition_ = Offset(layoutSize.Width(), 0.0); + } else { + childPosition_ = Offset(-childText_->GetLayoutSize().Width(), 0.0); + } + } + childText_->SetPosition(childPosition_); + SetLayoutSize(layoutSize); + LOGD("layoutSize: %{public}s, child: %{public}s", layoutSize.ToString().c_str(), + childText_->GetLayoutSize().ToString().c_str()); + if (lastLayoutSize != layoutSize && IsPlayingAnimation(controller_)) { + UpdateAnimation(); + } + if (startAfterLayout_) { + startAfterLayout_ = false; + Start(); + } +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/marquee/render_marquee.h b/frameworks/core/components/marquee/render_marquee.h new file mode 100644 index 00000000..60c17b8c --- /dev/null +++ b/frameworks/core/components/marquee/render_marquee.h @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_MARQUEE_RENDER_MARQUEE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_MARQUEE_RENDER_MARQUEE_H + +#include + +#include "core/animation/animator.h" +#include "core/animation/curve_animation.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderMarquee : public RenderNode { + DECLARE_ACE_TYPE(RenderMarquee, RenderNode); + +public: + static RefPtr Create(); + void Update(const RefPtr& component) override; + void PerformLayout() override; + void OnHiddenChanged(bool hidden) override; + void Start(); + void Stop(); + +protected: + virtual TextDirection GetTextDirection(const std::string& text) const = 0; + +private: + void UpdateAnimation(); + void UpdateChildPosition(double position); + void OnAnimationStart(); + void OnAnimationStop(); + + RefPtr childText_; + RefPtr controller_; + RefPtr> translate_; + Offset childPosition_ = Offset::ErrorOffset(); + + bool startAfterLayout_ = true; + bool startAfterShowed_ = false; + bool isHidden_ = false; + double scrollAmount_ = 0.0; + int32_t loop_ = ANIMATION_REPEAT_INFINITE; + int32_t currentLoop_ = 0; + MarqueeDirection direction_ = MarqueeDirection::LEFT; + std::function bounceEvent_; + std::function finishEvent_; + std::function startEvent_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_MARQUEE_RENDER_MARQUEE_H diff --git a/frameworks/core/components/menu/BUILD.gn b/frameworks/core/components/menu/BUILD.gn new file mode 100644 index 00000000..bc27f1e2 --- /dev/null +++ b/frameworks/core/components/menu/BUILD.gn @@ -0,0 +1,21 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("menu") { + sources = [ + "menu_component.cpp", + "menu_element.cpp", + ] +} diff --git a/frameworks/core/components/menu/menu_component.cpp b/frameworks/core/components/menu/menu_component.cpp new file mode 100644 index 00000000..af98729b --- /dev/null +++ b/frameworks/core/components/menu/menu_component.cpp @@ -0,0 +1,133 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/menu/menu_component.h" + +#include "core/components/menu/menu_element.h" + +namespace OHOS::Ace { + +RefPtr MenuComponent::CreateElement() +{ + return AceType::MakeRefPtr(GetId()); +} + +const RefPtr& MenuComponent::GetPopup() const +{ + return popup_; +} + +void MenuComponent::RemoveOption(const RefPtr& option) +{ + if (!popup_ || !option) { + LOGE("popup or option is null."); + return; + } + option->SetSelectable(false); + popup_->RemoveSelectOption(option); +} + +void MenuComponent::AppendOption(const RefPtr& option) +{ + if (!popup_ || !option) { + LOGE("popup or option is null."); + return; + } + option->SetSelectable(false); + popup_->AppendSelectOption(option); +} + +void MenuComponent::InsertOption(const RefPtr& option, uint32_t index) +{ + if (!popup_ || !option) { + return; + } + option->SetSelectable(false); + popup_->InsertSelectOption(option, index); +} + +void MenuComponent::ClearOptions() +{ + if (!popup_) { + LOGE("popup is null."); + return; + } + popup_->ClearAllOptions(); +} + +std::size_t MenuComponent::GetOptionCount() const +{ + if (!popup_) { + LOGE("popup is null."); + return 0; + } + return popup_->GetSelectOptionCount(); +} + +RefPtr MenuComponent::GetOption(std::size_t index) const +{ + if (!popup_) { + LOGE("popup is null."); + return nullptr; + } + return popup_->GetSelectOption(index); +} + +std::vector> MenuComponent::GetOptions() const +{ + if (!popup_) { + LOGE("popup is null."); + return std::vector>(); + } + return popup_->GetSelectOptions(); +} + +std::string MenuComponent::GetTitle() const +{ + if (!popup_) { + LOGE("popup is null."); + return ""; + } + return popup_->GetTitle(); +} + +void MenuComponent::SetTitle(const std::string& value) +{ + if (!popup_) { + LOGE("popup is null."); + return; + } + popup_->SetTitle(value); +} + +TextStyle MenuComponent::GetTitleStyle() const +{ + if (!popup_) { + LOGE("popup is null."); + return TextStyle(); + } + return popup_->GetTitleStyle(); +} + +void MenuComponent::SetTitleStyle(const TextStyle& value) +{ + if (!popup_) { + LOGE("popup is null."); + return; + } + return popup_->SetTitleStyle(value); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/menu/menu_component.h b/frameworks/core/components/menu/menu_component.h new file mode 100644 index 00000000..306f561c --- /dev/null +++ b/frameworks/core/components/menu/menu_component.h @@ -0,0 +1,124 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_MENU_MENU_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_MENU_MENU_COMPONENT_H + +#include "base/utils/string_utils.h" +#include "core/components/common/properties/color.h" +#include "core/components/option/option_component.h" +#include "core/components/select_popup/select_popup_component.h" +#include "core/components/text/text_component.h" +#include "core/pipeline/base/component.h" +#include "core/pipeline/base/composed_component.h" +#include "core/pipeline/base/sole_child_component.h" + +namespace OHOS::Ace { + +class MenuComponent : public ComposedComponent { + DECLARE_ACE_TYPE(MenuComponent, ComposedComponent); + +public: + MenuComponent(const ComposeId& id, const std::string& name, const RefPtr& child) + : ComposedComponent(id, name, child) + {} + + MenuComponent(const ComposeId& id, const std::string& name) : ComposedComponent(id, name) + { +#if defined(WINDOWS_PLATFORM) || defined(MAC_PLATFORM) + popup_->SetSelectPopupId(StringUtils::StringToInt(id)); +#endif + } + + ~MenuComponent() override = default; + + RefPtr CreateElement() override; + + void InitTheme(const RefPtr& themeManager) + { + if (popup_) { + popup_->InitTheme(themeManager); + } + } + + void SetTextDirection(TextDirection direction) override + { + ComposedComponent::SetTextDirection(direction); + if (popup_) { + popup_->SetTextDirection(direction); + } else { + LOGE("popup component of select is null."); + } + } + + void ClearOptions(); + + void AppendOption(const RefPtr& option); + + void RemoveOption(const RefPtr& option); + + void InsertOption(const RefPtr& option, uint32_t index); + + std::size_t GetOptionCount() const; + + RefPtr GetOption(std::size_t index) const; + + std::vector> GetOptions() const; + + const std::function& GetTargetCallback() const + { + return targetCallback_; + } + void SetTargetCallback(const std::function& targetCallback) + { + targetCallback_ = targetCallback; + } + + const EventMarker& GetOnSuccess() const + { + return onSuccess_; + } + void SetOnSuccess(const EventMarker& value) + { + onSuccess_ = value; + } + + const EventMarker& GetOnCancel() const + { + return onCancel_; + } + void SetOnCancel(const EventMarker& value) + { + onCancel_ = value; + } + + std::string GetTitle() const; + void SetTitle(const std::string& value); + + TextStyle GetTitleStyle() const; + void SetTitleStyle(const TextStyle& value); + void SetIsBindTarget(bool isBindTarget) {} + const RefPtr& GetPopup() const; + +private: + RefPtr popup_ = AceType::MakeRefPtr(); + std::function targetCallback_; + EventMarker onSuccess_; + EventMarker onCancel_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_MENU_MENU_COMPONENT_H diff --git a/frameworks/core/components/menu/menu_element.cpp b/frameworks/core/components/menu/menu_element.cpp new file mode 100644 index 00000000..3576c2d8 --- /dev/null +++ b/frameworks/core/components/menu/menu_element.cpp @@ -0,0 +1,144 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/menu/menu_element.h" + +#include "core/components/box/render_box.h" +#include "core/event/ace_event_helper.h" + +namespace OHOS::Ace { + +void MenuElement::PerformBuild() +{ + data_ = AceType::DynamicCast(component_); + if (!data_) { + LOGE("component is null."); + return; + } + + auto popup = data_->GetPopup(); + if (!popup) { + LOGE("popup of menu is null."); + return; + } + + popup->SetOptionClickedCallback([weak = WeakClaim(this)](std::size_t index) { + auto refPtr = weak.Upgrade(); + if (!refPtr) { + return; + } + refPtr->OnOptionCallback(index); + }); + popup->SetPopupCanceledCallback([weak = WeakClaim(this)]() { + auto refPtr = weak.Upgrade(); + if (!refPtr) { + return; + } + refPtr->OnCanceledCallback(); + }); + if (!data_->GetOnCancel().IsEmpty()) { + jsCancelCallback_ = AceAsyncEvent::Create(data_->GetOnCancel(), context_); + } + if (!data_->GetOnSuccess().IsEmpty()) { + jsSuccessCallback_ = AceAsyncEvent::Create(data_->GetOnSuccess(), context_); + } + data_->SetTargetCallback([weak = WeakClaim(this)](const ComposeId& id, const Offset& point) { + auto refPtr = weak.Upgrade(); + if (!refPtr) { + return; + } + refPtr->OnTargetCallback(id, point); + }); +} + +void MenuElement::OnTargetCallback(const ComposeId& id, const Offset& point) +{ + auto context = context_.Upgrade(); + if (!context) { + LOGE("context is null."); + return; + } + + auto stack = context->GetLastStack(); + if (!stack) { + LOGE("can not get last stack."); + return; + } + + if (!data_ || !data_->GetPopup()) { + LOGE("can not get popup component."); + return; + } + + auto popup = data_->GetPopup(); + if (id.empty()) { + popup->ShowDialog(stack, point, point, true); + return; + } + + const auto& targetElement = context->GetComposedElementById(id); + if (!targetElement) { + return; + } + const auto& targetRender = targetElement->GetRenderNode(); + if (!targetRender) { + return; + } + Size targetSize = targetRender->GetLayoutSize(); + Offset targetGlobalOffset = targetRender->GetOffsetToStage(); + RefPtr box = AceType::DynamicCast(targetRender); + if (box) { + targetGlobalOffset += box->GetPaintPosition(); + targetSize = box->GetPaintSize(); + } + + Offset targetRightBottom(targetGlobalOffset.GetX() + targetSize.Width(), + targetGlobalOffset.GetY() + targetSize.Height()); + + popup->ShowDialog(stack, targetGlobalOffset, targetRightBottom, true); +} + +void MenuElement::OnOptionCallback(std::size_t index) +{ + if (!jsSuccessCallback_) { + return; + } + + if (!data_ || !data_->GetPopup()) { + LOGE("data component or popup is null."); + return; + } + + auto popup = data_->GetPopup(); + auto option = popup->GetSelectOption(index); + if (!option) { + LOGE("option of the index is null."); + return; + } + + std::string param = std::string("\"selected\",{\"value\":\"").append(option->GetValue().append("\"},null")); + jsSuccessCallback_(param); +} + +void MenuElement::OnCanceledCallback() +{ + if (!jsCancelCallback_) { + return; + } + + jsCancelCallback_("\"cancel\",{},null"); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/menu/menu_element.h b/frameworks/core/components/menu/menu_element.h new file mode 100644 index 00000000..85aa9eb1 --- /dev/null +++ b/frameworks/core/components/menu/menu_element.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_MENU_MENU_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_MENU_MENU_ELEMENT_H + +#include "core/components/menu/menu_component.h" +#include "core/pipeline/base/composed_element.h" + +namespace OHOS::Ace { + +class MenuElement : public ComposedElement { + DECLARE_ACE_TYPE(MenuElement, ComposedElement); + +public: + explicit MenuElement(const ComposeId& id) : ComposedElement(id) {} + ~MenuElement() override = default; + + void PerformBuild() override; + +private: + void OnTargetCallback(const ComposeId& id, const Offset& point); + void OnOptionCallback(std::size_t index); + void OnCanceledCallback(); + + RefPtr data_; + std::function jsSuccessCallback_; + std::function jsCancelCallback_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_MENU_MENU_ELEMENT_H diff --git a/frameworks/core/components/mouse_listener/BUILD.gn b/frameworks/core/components/mouse_listener/BUILD.gn new file mode 100644 index 00000000..83465d54 --- /dev/null +++ b/frameworks/core/components/mouse_listener/BUILD.gn @@ -0,0 +1,18 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("mouse_listener") { + sources = [ "render_mouse_listener.cpp" ] +} diff --git a/frameworks/core/components/mouse_listener/mouse_listener_component.h b/frameworks/core/components/mouse_listener/mouse_listener_component.h new file mode 100644 index 00000000..fa64ccc4 --- /dev/null +++ b/frameworks/core/components/mouse_listener/mouse_listener_component.h @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_MOUSE_LISTENER_MOUSE_LISTENER_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_MOUSE_LISTENER_MOUSE_LISTENER_COMPONENT_H + +#include + +#include "core/components/mouse_listener/mouse_listener_element.h" +#include "core/components/mouse_listener/render_mouse_listener.h" +#include "core/pipeline/base/sole_child_component.h" + +namespace OHOS::Ace { + +class MouseListenerComponent final : public SoleChildComponent { + DECLARE_ACE_TYPE(MouseListenerComponent, SoleChildComponent); + +public: + MouseListenerComponent() = default; + explicit MouseListenerComponent(const RefPtr& child) : SoleChildComponent(child) {} + ~MouseListenerComponent() override = default; + + RefPtr CreateElement() override + { + return MakeRefPtr(); + } + + RefPtr CreateRenderNode() override + { + return RenderMouseListener::Create(); + } + + void SetOnMouseId(const EventMarker& onMouseId) + { + onMouseId_ = onMouseId; + } + + const EventMarker& GetOnMouseId() const + { + return onMouseId_; + } + +private: + EventMarker onMouseId_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_MOUSE_LISTENER_MOUSE_LISTENER_COMPONENT_H diff --git a/frameworks/core/components/mouse_listener/mouse_listener_element.h b/frameworks/core/components/mouse_listener/mouse_listener_element.h new file mode 100644 index 00000000..e604f8a9 --- /dev/null +++ b/frameworks/core/components/mouse_listener/mouse_listener_element.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_MOUSE_LISTENER_MOUSE_LISTENER_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_MOUSE_LISTENER_MOUSE_LISTENER_ELEMENT_H + +#include "core/pipeline/base/sole_child_element.h" + +namespace OHOS::Ace { + +class MouseListenerElement final : public SoleChildElement { + DECLARE_ACE_TYPE(MouseListenerElement, SoleChildElement); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_MOUSE_LISTENER_MOUSE_LISTENER_ELEMENT_H diff --git a/frameworks/core/components/mouse_listener/render_mouse_listener.cpp b/frameworks/core/components/mouse_listener/render_mouse_listener.cpp new file mode 100644 index 00000000..6b4bd287 --- /dev/null +++ b/frameworks/core/components/mouse_listener/render_mouse_listener.cpp @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/mouse_listener/render_mouse_listener.h" + +#include "core/components/mouse_listener/mouse_listener_component.h" +#include "core/event/ace_event_helper.h" + +namespace OHOS::Ace { + +RefPtr RenderMouseListener::Create() +{ + return AceType::MakeRefPtr(); +} + +RenderMouseListener::RenderMouseListener() : recognizer_(AceType::MakeRefPtr()) {} + +void RenderMouseListener::Update(const RefPtr& component) +{ + auto mouseComponent = AceType::DynamicCast(component); + ACE_DCHECK(mouseComponent); + SetOnMouse(AceAsyncEvent::Create(mouseComponent->GetOnMouseId(), context_)); +} + +void RenderMouseListener::OnMouseTestHit(const Offset& coordinateOffset, MouseTestResult& result) +{ + LOGD("render touch listener: on touch test hit!"); + recognizer_->SetCoordinateOffset(coordinateOffset); + result.emplace_back(recognizer_); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/mouse_listener/render_mouse_listener.h b/frameworks/core/components/mouse_listener/render_mouse_listener.h new file mode 100644 index 00000000..a6383954 --- /dev/null +++ b/frameworks/core/components/mouse_listener/render_mouse_listener.h @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_MOUSE_LISTENER_RENDER_MOUSE_LISTENER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_MOUSE_LISTENER_RENDER_MOUSE_LISTENER_H + +#include "base/utils/event_callback.h" +#include "core/components/proxy/render_item_proxy.h" +#include "core/event/mouse_raw_recognizer.h" +#include "core/pipeline/base/component.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderMouseListener final : public RenderProxy { + DECLARE_ACE_TYPE(RenderMouseListener, RenderProxy); + +public: + RenderMouseListener(); + ~RenderMouseListener() override = default; + static RefPtr Create(); + void Update(const RefPtr& component) override; + + void SetOnMouse(const MouseCallback& onMouse) + { + if (onMouse) { + recognizer_->SetOnMouse(onMouse); + } + } + +protected: + void OnMouseTestHit(const Offset& coordinateOffset, MouseTestResult& result) override; + +private: + RefPtr recognizer_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_MOUSE_LISTENER_RENDER_MOUSE_LISTENER_H diff --git a/frameworks/core/components/multimodal/BUILD.gn b/frameworks/core/components/multimodal/BUILD.gn new file mode 100644 index 00000000..f8d3209d --- /dev/null +++ b/frameworks/core/components/multimodal/BUILD.gn @@ -0,0 +1,21 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("multimodal") { + sources = [ + "flutter_render_multimodal.cpp", + "render_multimodal.cpp", + ] +} diff --git a/frameworks/core/components/multimodal/flutter_render_multimodal.cpp b/frameworks/core/components/multimodal/flutter_render_multimodal.cpp new file mode 100644 index 00000000..83e95962 --- /dev/null +++ b/frameworks/core/components/multimodal/flutter_render_multimodal.cpp @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/multimodal/flutter_render_multimodal.h" + +#include + +#include "flutter/lib/ui/text/font_collection.h" +#include "flutter/third_party/txt/src/txt/paragraph_builder.h" +#include "flutter/third_party/txt/src/txt/paragraph_style.h" + +#include "base/i18n/localization.h" +#include "base/utils/string_utils.h" +#include "core/components/calendar/flutter_render_calendar.h" +#include "core/components/font/constants_converter.h" +#include "core/components/font/flutter_font_collection.h" +#include "core/pipeline/base/scoped_canvas_state.h" + +namespace OHOS::Ace { +namespace { + +constexpr double DEFAULT_SIZE = 20.0; +constexpr double LIMIT_WIDTH = 18.0; +constexpr double CORNER_RADIUS = 8.0; +constexpr double FONT_SIZE = 14; +const char ELLIPSIS[] = "..."; + +} // namespace + +RefPtr RenderMultimodal::Create() +{ + return MakeRefPtr(); +} + +void FlutterRenderMultimodal::Paint(RenderContext& context, const Offset& offset) +{ + RenderNode::Paint(context, offset); + + if (!isSubscriptShow_) { + return; + } + + auto canvas = ScopedCanvas::Create(context); + if (!canvas) { + LOGE("Paint canvas is null"); + return; + } + SkCanvas* skCanvas = canvas->canvas(); + if (skCanvas == nullptr) { + LOGE("skCanvas fetch failed"); + return; + } + + auto width = NormalizeToPx(Dimension(DEFAULT_SIZE, DimensionUnit::VP)); + auto height = NormalizeToPx(Dimension(DEFAULT_SIZE, DimensionUnit::VP)); + auto corner = NormalizeToPx(Dimension(CORNER_RADIUS, DimensionUnit::VP)); + + SkPaint paint; + paint.setAntiAlias(true); + paint.setColor(Color::FromARGB(230, 0, 0, 0).GetValue()); + + UpdateParagraph(offset, subscript_.GetVoiceContent()); + paragraph_->Layout(GetLayoutSize().Width()); + if (paragraph_->GetLongestLine() > NormalizeToPx(Dimension(LIMIT_WIDTH, DimensionUnit::VP))) { + width = height + (paragraph_->GetLongestLine() - NormalizeToPx(Dimension(LIMIT_WIDTH, DimensionUnit::VP))); + } + + SkVector radii[] = { { corner, corner }, { 0, 0 }, { corner, corner }, { 0, 0 } }; + SkRRect rrect; + rrect.setRectRadii(SkRect::MakeXYWH(offset.GetX(), offset.GetY(), width, height), radii); + skCanvas->drawRRect(rrect, paint); + + auto leftOffset = paragraph_->GetLongestLine() / 2; + auto centerX = offset.GetX() + width / 2; + auto centerY = offset.GetY() + height / 2; + paragraph_->Paint(skCanvas, centerX - leftOffset, centerY - paragraph_->GetHeight() / 2); +} + +void FlutterRenderMultimodal::UpdateParagraph(const Offset& offset, const std::string& text) +{ + using namespace Constants; + txt::ParagraphStyle style; + style.max_lines = 1; + style.ellipsis = StringUtils::Str8ToStr16(ELLIPSIS); + auto fontCollection = FlutterFontCollection::GetInstance().GetFontCollection(); + if (!fontCollection) { + LOGW("UpdateParagraph: fontCollection is null"); + return; + } + std::unique_ptr builder = + txt::ParagraphBuilder::CreateTxtBuilder(style, fontCollection); + txt::TextStyle txtStyle; + txtStyle.font_size = NormalizeToPx(Dimension(FONT_SIZE, DimensionUnit::FP)); + txtStyle.color = Color::FromARGB(255, 255, 255, 255).GetValue(); + txtStyle.locale = Localization::GetInstance()->GetFontLocale(); + builder->PushStyle(txtStyle); + builder->AddText(StringUtils::Str8ToStr16(text)); + paragraph_ = builder->Build(); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/multimodal/flutter_render_multimodal.h b/frameworks/core/components/multimodal/flutter_render_multimodal.h new file mode 100644 index 00000000..9e3df1c7 --- /dev/null +++ b/frameworks/core/components/multimodal/flutter_render_multimodal.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_MULTIMODAL_FLUTTER_RENDER_MULTIMODAL_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_MULTIMODAL_FLUTTER_RENDER_MULTIMODAL_H + +#include "flutter/third_party/txt/src/txt/paragraph.h" + +#include "core/components/multimodal/render_multimodal.h" + +namespace OHOS::Ace { + +class FlutterRenderMultimodal : public RenderMultimodal { + DECLARE_ACE_TYPE(FlutterRenderMultimodal, RenderMultimodal); + +public: + void Paint(RenderContext& context, const Offset& offset) override; + +private: + void UpdateParagraph(const Offset& offset, const std::string& text); + + std::unique_ptr paragraph_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_MULTIMODAL_FLUTTER_RENDER_MULTIMODAL_H diff --git a/frameworks/core/components/multimodal/multimodal_component.h b/frameworks/core/components/multimodal/multimodal_component.h new file mode 100644 index 00000000..34c5109d --- /dev/null +++ b/frameworks/core/components/multimodal/multimodal_component.h @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_MULTIMODAL_MULTIMODAL_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_MULTIMODAL_MULTIMODAL_COMPONENT_H + +#include "core/components/multimodal/multimodal_element.h" +#include "core/components/multimodal/render_multimodal.h" +#include "core/event/multimodal/multimodal_properties.h" +#include "core/pipeline/base/sole_child_component.h" + +namespace OHOS::Ace { + +class MultimodalComponent final : public SoleChildComponent { + DECLARE_ACE_TYPE(MultimodalComponent, SoleChildComponent) + +public: + explicit MultimodalComponent(int32_t pageId) : pageId_(pageId) {}; + ~MultimodalComponent() override = default; + + const MultimodalProperties& GetMultimodalProperties() const + { + return multimodalProperties_; + } + void SetMultimodalProperties(const MultimodalProperties& multimodalProperties) + { + multimodalProperties_ = multimodalProperties; + } + + int32_t GetPageId() const + { + return pageId_; + } + + const EventMarker& GetOnClickId() const + { + return onClickId_; + } + void SetOnClickId(const EventMarker& onClickId) + { + onClickId_ = onClickId; + } + + RefPtr CreateElement() override + { + return MakeRefPtr(); + } + + RefPtr CreateRenderNode() override + { + return RenderMultimodal::Create(); + } + +private: + MultimodalProperties multimodalProperties_; + EventMarker onClickId_; + int32_t pageId_ = -1; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_MULTIMODAL_MULTIMODAL_COMPONENT_H diff --git a/frameworks/core/components/multimodal/multimodal_element.h b/frameworks/core/components/multimodal/multimodal_element.h new file mode 100644 index 00000000..b966f489 --- /dev/null +++ b/frameworks/core/components/multimodal/multimodal_element.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_MULTIMODAL_MULTIMODAL_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_MULTIMODAL_MULTIMODAL_ELEMENT_H + +#include "core/pipeline/base/sole_child_element.h" + +namespace OHOS::Ace { + +class MultimodalElement final : public SoleChildElement { + DECLARE_ACE_TYPE(MultimodalElement, SoleChildElement); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_MULTIMODAL_MULTIMODAL_ELEMENT_H diff --git a/frameworks/core/components/multimodal/render_multimodal.cpp b/frameworks/core/components/multimodal/render_multimodal.cpp new file mode 100644 index 00000000..5b83dcab --- /dev/null +++ b/frameworks/core/components/multimodal/render_multimodal.cpp @@ -0,0 +1,175 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/multimodal/render_multimodal.h" + +#include "core/components/multimodal/multimodal_component.h" +#include "core/event/ace_event_helper.h" + +namespace OHOS::Ace { + +RenderMultimodal::RenderMultimodal() + : subscriptSwitchCallback_(std::bind(&RenderMultimodal::OnSubscriptSwitchChange, this, std::placeholders::_1)) +{} + +void RenderMultimodal::PerformLayout() +{ + Size layoutSize; + const auto& children = GetChildren(); + if (!children.empty()) { + auto child = children.front(); + child->Layout(GetLayoutParam()); + child->SetPosition(Offset::Zero()); + layoutSize = child->GetLayoutSize(); + } + SetLayoutSize(layoutSize); +} + +void RenderMultimodal::Update(const RefPtr& component) +{ + auto multiModalComponent = DynamicCast(component); + ACE_DCHECK(multiModalComponent); + clickCallback_ = AceAsyncEvent::Create(multiModalComponent->GetOnClickId(), context_); + pageId_ = multiModalComponent->GetPageId(); + if (!multimodalEventCallback_) { + multimodalEventCallback_ = [weak = WeakClaim(this)](const AceMultimodalEvent&) { + auto renderMultiModal = weak.Upgrade(); + if (renderMultiModal) { + renderMultiModal->OnEventTrigger(); + } + }; + } + if (multiModalScene_.Invalid()) { + auto pipelineContext = GetContext().Upgrade(); + if (!pipelineContext) { + LOGW("the pipeline context is null"); + return; + } + auto multimodalManager = pipelineContext->GetMultiModalManager(); + if (!multimodalManager) { + LOGW("the multimodal manager is null"); + return; + } + auto multiModalScene = multimodalManager->GetMultiModalScene(pageId_); + multiModalScene->SubscribeSubscriptSwitchEvent(subscriptSwitchCallback_); + multiModalScene_ = multiModalScene; + } + PrepareMultimodalEvent(multiModalComponent->GetMultimodalProperties()); + MarkNeedLayout(); +} + +void RenderMultimodal::PrepareMultimodalEvent(const MultimodalProperties& multimodalProperties) +{ + auto multiModalScene = multiModalScene_.Upgrade(); + if (!multiModalScene) { + LOGE("fail to prepare multimodal event due to scene is null"); + return; + } + if (!multimodalProperties.voiceLabel.empty() && + (voiceEvent_.GetVoiceContent() != multimodalProperties.voiceLabel)) { + multiModalScene->UnSubscribeVoiceEvent(voiceEvent_); + voiceEvent_ = VoiceEvent(multimodalProperties.voiceLabel, multimodalProperties.scene); + multiModalScene->SubscribeVoiceEvent(voiceEvent_, multimodalEventCallback_); + } + if (!multimodalProperties.useSubscript) { + if (useSubscript_) { + multiModalScene->UnSubscribeVoiceEvent(subscript_); + useSubscript_ = false; + if (useAutoSubscriptId_) { + multiModalScene->RemoveSubscriptId(subscript_.GetVoiceContent()); + useAutoSubscriptId_ = false; + } + } + return; + } + if (!multimodalProperties.subscriptLabel.empty() && + subscript_.GetVoiceContent() != multimodalProperties.subscriptLabel) { + multiModalScene->UnSubscribeVoiceEvent(subscript_); + if (useAutoSubscriptId_) { + multiModalScene->RemoveSubscriptId(subscript_.GetVoiceContent()); + useAutoSubscriptId_ = false; + } + subscript_ = VoiceEvent(multimodalProperties.subscriptLabel, multimodalProperties.scene); + multiModalScene->SubscribeVoiceEvent(subscript_, multimodalEventCallback_); + return; + } + if (subscript_.GetVoiceContent().empty()) { + useAutoSubscriptId_ = true; + subscript_ = VoiceEvent(multiModalScene->GetAvailableSubscriptId(), SceneLabel::PAGE, true); + subscript_.SetBadgeList({ { "1", multiModalScene->GetCurrentMaxSubscriptId() } }); + multiModalScene->SubscribeVoiceEvent(subscript_, multimodalEventCallback_); + } +} + +void RenderMultimodal::OnEventTrigger() +{ + if (clickCallback_) { + clickCallback_(ClickInfo(-1)); + } +} + +RenderMultimodal::~RenderMultimodal() +{ + auto multiModalScene = multiModalScene_.Upgrade(); + if (!multiModalScene) { + LOGE("fail to destroy multimodal event due to multiModalScene is null"); + return; + } + if (!voiceEvent_.GetVoiceContent().empty()) { + multiModalScene->UnSubscribeVoiceEvent(voiceEvent_); + } + if (!subscript_.GetVoiceContent().empty()) { + multiModalScene->UnSubscribeVoiceEvent(subscript_); + if (useAutoSubscriptId_) { + multiModalScene->RemoveSubscriptId(subscript_.GetVoiceContent()); + useAutoSubscriptId_ = false; + } + } + multiModalScene->UnSubscribeSubscriptSwitchEvent(subscriptSwitchCallback_); +} + +void RenderMultimodal::OnHiddenChanged(bool hidden) +{ + auto multiModalScene = multiModalScene_.Upgrade(); + if (!multiModalScene) { + LOGE("fail to destroy multimodal event due to multiModalScene is null"); + return; + } + // If it is hidden, release subscriptId and voiceEvent. + if (!voiceEvent_.GetVoiceContent().empty()) { + if (hidden) { + multiModalScene->UnSubscribeVoiceEvent(voiceEvent_); + } else { + multiModalScene->SubscribeVoiceEvent(voiceEvent_, multimodalEventCallback_); + } + } + if (!subscript_.GetVoiceContent().empty()) { + if (hidden) { + multiModalScene->UnSubscribeVoiceEvent(subscript_); + } else { + multiModalScene->SubscribeVoiceEvent(subscript_, multimodalEventCallback_); + } + } +} + +void RenderMultimodal::OnSubscriptSwitchChange(bool isOn) +{ + if (isSubscriptShow_ != isOn) { + isSubscriptShow_ = isOn; + MarkNeedRender(); + } +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/multimodal/render_multimodal.h b/frameworks/core/components/multimodal/render_multimodal.h new file mode 100644 index 00000000..756dc342 --- /dev/null +++ b/frameworks/core/components/multimodal/render_multimodal.h @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_MULTIMODAL_RENDER_MULTIMODAL_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_MULTIMODAL_RENDER_MULTIMODAL_H + +#include "core/event/multimodal/multimodal_properties.h" +#include "core/event/multimodal/multimodal_scene.h" +#include "core/gestures/click_recognizer.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderMultimodal : public RenderNode { + DECLARE_ACE_TYPE(RenderMultimodal, RenderNode) + +public: + RenderMultimodal(); + ~RenderMultimodal() override; + + static RefPtr Create(); + void Update(const RefPtr& component) override; + + void PerformLayout() override; + +protected: + void OnHiddenChanged(bool hidden) override; + + bool isSubscriptShow_ = false; + VoiceEvent voiceEvent_; + VoiceEvent subscript_; + +private: + void PrepareMultimodalEvent(const MultimodalProperties& multimodalProperties); + void OnEventTrigger(); + void OnSubscriptSwitchChange(bool isOn); + + ClickCallback clickCallback_; + MultimodalEventCallback multimodalEventCallback_; + WeakPtr multiModalScene_; + EventCallback subscriptSwitchCallback_; + int32_t pageId_ = -1; + bool useSubscript_ = false; + bool useAutoSubscriptId_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_MULTIMODAL_RENDER_MULTIMODAL_H diff --git a/frameworks/core/components/navigation_bar/BUILD.gn b/frameworks/core/components/navigation_bar/BUILD.gn new file mode 100644 index 00000000..11db80ed --- /dev/null +++ b/frameworks/core/components/navigation_bar/BUILD.gn @@ -0,0 +1,28 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("navigation_bar") { + sources = [ + "navigation_bar_component.cpp", + "navigation_bar_element.cpp", + ] + + if (!is_wearable_product) { + sources += [ + "render_collapsing_navigation_bar.cpp", + "render_navigation_container.cpp", + ] + } +} diff --git a/frameworks/core/components/navigation_bar/navigation_bar_component.cpp b/frameworks/core/components/navigation_bar/navigation_bar_component.cpp new file mode 100644 index 00000000..fa0a5071 --- /dev/null +++ b/frameworks/core/components/navigation_bar/navigation_bar_component.cpp @@ -0,0 +1,570 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/navigation_bar/navigation_bar_component.h" + +#include "base/utils/string_utils.h" +#include "base/utils/system_properties.h" +#include "core/components/flex/flex_item_component.h" +#include "core/components/navigation_bar/navigation_bar_element.h" +#include "core/components/padding/padding_component.h" +#include "core/components/positioned/positioned_component.h" +#include "core/components/stack/stack_component.h" +#include "core/gestures/click_recognizer.h" +#ifdef WEARABLE_PRODUCT +#include "core/components/box/box_component.h" +#include "core/components/button/button_theme.h" +#include "core/components/flex/flex_item_component.h" +#include "core/components/image/image_component.h" +#include "core/components/text/text_component.h" +#endif + +namespace OHOS::Ace { +namespace { + +#ifndef WEARABLE_PRODUCT +constexpr double MIDDLE_ZONE_FLEX_GROW = 1.0; +constexpr double MIDDLE_ZONE_FLEX_SHRINK = 1.0; +// only for default +constexpr double LOGO_PADDING_RIGHT_VALUE = 16.0; +// only for tv +constexpr double TV_PADDING_BETWEEN_TITLE_AND_SUBTITLE = 12.0; +constexpr double WATCH_BAR_PADDING_BOTTOM = 8.0; +#endif + +// only for watch +constexpr double WATCH_TITLE_LINE_PADDING_VALUE = 52.0; +const Dimension WATCH_TITLE_LINE_PADDING(WATCH_TITLE_LINE_PADDING_VALUE, DimensionUnit::VP); +constexpr double WATCH_SUBTITLE_LINE_PADDING_VALUE = 26.0; +const Dimension WATCH_SUBTITLE_LINE_PADDING(WATCH_SUBTITLE_LINE_PADDING_VALUE, DimensionUnit::VP); +constexpr double WATCH_TITLE_PADDING_TOP = 20.0; +constexpr double WATCH_SUBTITLE_PADDING_TOP = 2.0; +constexpr double WATCH_PADDING_BETWEEN_LOGO_AND_SUBTITLE = 8.0; +constexpr Dimension WATCH_TITLE_MIN_SIZE = 16.0_fp; +constexpr Dimension WATCH_SUBTITLE_MIN_SIZE = 13.0_fp; + +struct IconImage { + IconImage(InternalResource::ResourceId resourceId, const Dimension& width, const Dimension& height) + : resourceId(resourceId), width(width), height(height), image(AceType::MakeRefPtr(resourceId)) + { + image->SetWidth(width); + image->SetHeight(height); + }; + IconImage(const std::string& src, const Dimension& width, const Dimension& height) + : src(src), width(width), height(height), image(AceType::MakeRefPtr(src)) + { + image->SetWidth(width); + image->SetHeight(height); + }; + ~IconImage() = default; + + InternalResource::ResourceId resourceId = InternalResource::ResourceId::NO_ID; + std::string src; + Dimension width; + Dimension height; + RefPtr image; +}; + +#ifndef WEARABLE_PRODUCT +RefPtr BuildIconButton(const RefPtr& theme, const Dimension& width, + const Dimension& height, const IconImage& icon, const EventMarker& clickMarker = EventMarker()) +{ + std::list> buttonChildren; + buttonChildren.emplace_back(icon.image); + auto button = AceType::MakeRefPtr(buttonChildren); + button->SetType(ButtonType::NORMAL); + button->SetWidth(width); + button->SetHeight(height); + button->SetBackgroundColor(theme->GetButtonNormalColor()); + button->SetClickedColor(theme->GetButtonPressedColor()); + button->SetFocusColor(theme->GetButtonFocusColor()); + button->SetHoverColor(theme->GetButtonHoverColor()); + button->SetClickedEventId(clickMarker); + button->SetRectRadius(theme->GetButtonCornerRadius()); + return button; +} + +RefPtr BuildTitleText( + const std::string& value, const Color& color, const Dimension& fontSize, const FontWeight& fontWeight) +{ + auto text = AceType::MakeRefPtr(value); + TextStyle textStyle; + textStyle.SetTextColor(color); + textStyle.SetFontSize(fontSize); + textStyle.SetAllowScale(false); + textStyle.SetFontWeight(fontWeight); + textStyle.SetMaxLines(1); + textStyle.SetTextOverflow(TextOverflow::ELLIPSIS); + text->SetTextStyle(textStyle); + return text; +} +#endif + +RefPtr BuildPadding(double size, bool isVertical = false) +{ + auto padding = AceType::MakeRefPtr(); + Edge edge; + if (isVertical) { + edge.SetBottom(Dimension(size, DimensionUnit::VP)); + } else { + edge.SetRight(Dimension(size, DimensionUnit::VP)); + } + padding->SetPadding(edge); + return padding; +} + +RefPtr BuildWatchTitleText( + const std::string& value, const Color& color, const Dimension& fontSize, bool subtitle) +{ + auto text = AceType::MakeRefPtr(value); + TextStyle textStyle; + textStyle.SetTextColor(color); + textStyle.SetFontSize(fontSize); + textStyle.SetAllowScale(false); + textStyle.SetFontWeight(FontWeight::W500); + if (subtitle) { + textStyle.SetMaxLines(1); + textStyle.SetAdaptMaxFontSize(fontSize); + textStyle.SetAdaptMinFontSize(WATCH_SUBTITLE_MIN_SIZE); + } else { + textStyle.SetMaxLines(2); + textStyle.SetAdaptMaxFontSize(fontSize); + textStyle.SetAdaptMinFontSize(WATCH_TITLE_MIN_SIZE); + } + + textStyle.SetTextOverflow(TextOverflow::ELLIPSIS); + text->SetTextStyle(textStyle); + return text; +} + +} // namespace + +NavigationBarComponent::NavigationBarComponent(const ComposeId& id, const std::string& name) + : ComposedComponent(id, name), data_(AceType::MakeRefPtr()) +{} + +RefPtr NavigationBarComponent::CreateElement() +{ + return AceType::MakeRefPtr(GetId()); +} + +#ifndef WEARABLE_PRODUCT +RefPtr PhoneTitleBarBuilder::BuildTitle(double padding) +{ + RefPtr titleContainer = AceType::MakeRefPtr( + FlexAlign::FLEX_START, FlexAlign::FLEX_START, std::list>()); + titleContainer->SetTextDirection(direction_); + titleContainer->SetMainAxisSize(MainAxisSize::MIN); + if (padding > 0) { + titleContainer->AppendChild(BuildPadding(padding, true)); + } + + if (selectPopup_) { + BuildSelectPopup(titleContainer); + } else if (!title_.empty()) { + auto titleText = BuildTitleText(title_, titleColor_, titleFontSize_, FontWeight::W500); + titleComposed_ = GenerateAccessibilityComposed(StringUtils::StringToInt(id_), "titleText", titleText); + titleContainer->AppendChild(titleComposed_); + } + if (!subTitle_.empty()) { + titleContainer->AppendChild(BuildPadding(2, true)); + auto subTitleText = BuildTitleText(subTitle_, subTitleColor_, subTitleFontSize_, FontWeight::W400); + subTitleComposed_ = GenerateAccessibilityComposed(StringUtils::StringToInt(id_), "subTitleText", subTitleText); + titleContainer->AppendChild(subTitleComposed_); + } + + return AceType::MakeRefPtr(MIDDLE_ZONE_FLEX_GROW, MIDDLE_ZONE_FLEX_SHRINK, 0.0, titleContainer); +} + +void TabBarBuilder::BuildTabBar(const RefPtr& parent) +{ + tabBar_->InitNavigationBarStyle(); + RefPtr box = AceType::MakeRefPtr(); + box->SetChild(tabBar_); + box->SetDeliverMinToChild(false); + parent->AppendChild( + AceType::MakeRefPtr(MIDDLE_ZONE_FLEX_GROW, MIDDLE_ZONE_FLEX_SHRINK, 0.0, box)); +} + +void TitleBarMenuBuilder::MoveMenuItemsToBar(const RefPtr& container) +{ + menu_->ClearOptions(); + uint32_t showInBarSize = 0; + bool hasRoom = true; + uint32_t mostShowInBarSize = theme_->GetMostMenuItemCountInBar(); + + bool needAddPadding = false; + for (const auto& menuItem : allMenuItems_) { + hasRoom &= ((showInBarSize < mostShowInBarSize - 1) || + (showInBarSize == mostShowInBarSize - 1 && allMenuItems_.size() == mostShowInBarSize) || + (showInBarSize < mostShowInBarSize && SystemProperties::GetDeviceType() == DeviceType::TV)); + if (menuItem->GetShowInNavigationBar() == ShowInNavigationBar::SHOW && hasRoom) { + showInBarSize++; + auto menuItemIcon = menuItem->GetIcon(); + if (!menuItemIcon) { + LOGW("navigation bar menu item icon empty"); + continue; + } + + IconImage menuIcon(menuItemIcon->GetSrc(), menuIconSize_, menuIconSize_); + auto optionButton = BuildIconButton(theme_, menuZoneSize_, menuZoneSize_, menuIcon); + if (theme_->GetMenuItemPadding().Value() > 0.0 && needAddPadding) { + container->AppendChild(BuildPadding(theme_->GetMenuItemPadding().Value())); + } + container->AppendChild( + GenerateAccessibilityComposed(StringUtils::StringToInt(id_), "optionButton", optionButton)); + needAddPadding = true; + + NavigationBarComponent::MenuItemInBar menuItemInBar { menuItem->GetValue(), + BackEndEventManager::GetInstance().GetAvailableMarker(), optionButton }; + menuItemsInBar_.emplace(menuItemInBar.clickEvent.GetData().eventId, menuItemInBar); + } else { + menu_->AppendOption(menuItem); + } + } +} + +void TitleBarMenuBuilder::AddCollapseMenu(const RefPtr& container) +{ + IconImage moreIcon(theme_->GetMoreResourceId(), menuIconSize_, menuIconSize_); + moreIcon.image->SetColor(theme_->GetMenuIconColor()); + moreButton_ = BuildIconButton(theme_, menuZoneSize_, menuZoneSize_, moreIcon); + container->AppendChild(GenerateAccessibilityComposed(StringUtils::StringToInt(id_), "moreButton", moreButton_)); + container->AppendChild(menu_); +} + +bool TitleBarMenuBuilder::AddMenu(const RefPtr& container, bool canCollapse) +{ + if (menu_) { + MoveMenuItemsToBar(container); + if (menu_->GetOptionCount() > 0 && canCollapse) { + AddCollapseMenu(container); + } + return true; + } + return false; +} + +void PhoneTitleBarBuilder::BuildSelectPopup(const RefPtr& parent) +{ + RefPtr selectBox = AceType::MakeRefPtr(); + if (!selectPopup_->IsFontSet()) { + selectPopup_->SetFontSize(titleFontSize_); + } + selectPopup_->SetInnerPadding(Edge()); + selectPopup_->SetClickedColor(Color::TRANSPARENT); + selectBox->SetChild(selectPopup_); + titleComposed_ = GenerateAccessibilityComposed(StringUtils::StringToInt(id_), "select", selectBox); + parent->AppendChild(titleComposed_); +} + +void PhoneTitleBarBuilder::BuildTitleZone(const RefPtr& parent, double padding) +{ + if (tabBar_) { + if (parent->GetChildren().empty()) { + padding_.SetLeft(Dimension(0, DimensionUnit::VP)); + } + BuildTabBar(parent); + } else { + parent->AppendChild(BuildTitle(padding)); + } +} + +RefPtr EmphasizeTitleBarBuilder::Build() +{ + RefPtr menuContainer = + AceType::MakeRefPtr(FlexAlign::FLEX_END, FlexAlign::CENTER, std::list>()); + menuContainer->SetTextDirection(direction_); + auto menusBox = AceType::MakeRefPtr(); + menusBox->SetHeight(theme_->GetHeight().Value(), theme_->GetHeight().Unit()); + menusBox->SetChild(menuContainer); + AddMenu(menuContainer); + RefPtr columnContainer = + AceType::MakeRefPtr(FlexAlign::FLEX_START, FlexAlign::STRETCH, std::list>()); + columnContainer->SetTextDirection(direction_); + columnContainer->SetCrossAxisSize(CrossAxisSize::MAX); + columnContainer->AppendChild(BuildTitle()); + + RefPtr collapsingNavigationBar = + AceType::MakeRefPtr(AceType::Claim(this)); + collapsingNavigationBar->AppendChild(menusBox); + collapsingNavigationBar->AppendChild(columnContainer); + collapsingNavigationBar->SetMinHeight(theme_->GetHeight()); + + if (!subTitle_.empty() && !tabBar_) { + height_ = Dimension(134, DimensionUnit::VP); + } + if (tabBar_) { + padding_.SetLeft(Dimension(0, DimensionUnit::VP)); + } + return TitleBarBuilder::BuildContainer(collapsingNavigationBar); +} + +void NormalTitleBarBuilder::BuildStartZone(const RefPtr& parent) +{ + if (!startIconSrc_.empty()) { + IconImage startIcon(startIconSrc_, menuIconSize_, menuIconSize_); + auto startButton = BuildIconButton(theme_, menuZoneSize_, menuZoneSize_, startIcon, startClickMarker_); + parent->AppendChild(GenerateAccessibilityComposed(StringUtils::StringToInt(id_), "startButton", startButton)); + parent->AppendChild(BuildPadding(theme_->GetTitleMinPadding().Value())); + padding_.SetLeft(theme_->GetDefaultPaddingStart()); + } else if (backEnabled_) { + IconImage backIcon(theme_->GetBackResourceId(), menuIconSize_, menuIconSize_); + backIcon.image->SetTextDirection(direction_); + backIcon.image->SetMatchTextDirection(true); + backIcon.image->SetColor(theme_->GetMenuIconColor()); + auto backButton = BuildIconButton(theme_, menuZoneSize_, menuZoneSize_, backIcon, backClickMarker_); + parent->AppendChild(GenerateAccessibilityComposed(StringUtils::StringToInt(id_), "backButton", backButton)); + parent->AppendChild(BuildPadding(theme_->GetTitleMinPadding().Value())); + padding_.SetLeft(theme_->GetDefaultPaddingStart()); + } +} + +void NormalTitleBarBuilder::BuildLogo(const RefPtr& parent) +{ + if (!logoSrc_.empty()) { + auto logoSize = theme_->GetLogoIconSize(); + IconImage logoIconImage(logoSrc_, logoSize, logoSize); + parent->AppendChild(GenerateAccessibilityComposed(StringUtils::StringToInt(id_), "image", logoIconImage.image)); + parent->AppendChild(BuildPadding(LOGO_PADDING_RIGHT_VALUE)); + padding_.SetLeft(theme_->GetDefaultPaddingStart()); + } +} + +void NormalTitleBarBuilder::BuildEndZone(const RefPtr& parent) +{ + parent->AppendChild(BuildPadding(theme_->GetTitleMinPadding().Value())); + if (!endIconSrc_.empty()) { + IconImage endIcon(endIconSrc_, menuIconSize_, menuIconSize_); + auto endButton = BuildIconButton(theme_, menuZoneSize_, menuZoneSize_, endIcon, endClickMarker_); + parent->AppendChild(GenerateAccessibilityComposed(StringUtils::StringToInt(id_), "endButton", endButton)); + padding_.SetRight(theme_->GetDefaultPaddingEnd()); + } else if (AddMenu(parent)) { + padding_.SetRight(theme_->GetDefaultPaddingEnd()); + } else { + padding_.SetRight(theme_->GetMaxPaddingStart() - theme_->GetTitleMinPadding()); + } +} + +RefPtr NormalTitleBarBuilder::Build() +{ + if (!theme_) { + LOGW("theme is null"); + return nullptr; + } + padding_.SetLeft(theme_->GetMaxPaddingStart()); + padding_.SetRight(theme_->GetMaxPaddingEnd()); + + RefPtr container = + AceType::MakeRefPtr(FlexAlign::FLEX_START, FlexAlign::CENTER, std::list>()); + container->SetTextDirection(direction_); + + if (backEnabled_) { + titleFontSize_ = Dimension(20, DimensionUnit::VP); + } + + BuildStartZone(container); + BuildLogo(container); + BuildTitleZone(container); + BuildEndZone(container); + return TitleBarBuilder::BuildContainer(container); +} + +void TVTitleBarBuilder::BuildTitle(const RefPtr& parent) +{ + if (!title_.empty()) { + if (!titleFontSize_.IsValid()) { + titleFontSize_ = theme_->GetTitleFontSize(); + } + auto titleText = BuildTitleText(title_, titleColor_, titleFontSize_, FontWeight::W500); + parent->AppendChild(GenerateAccessibilityComposed(StringUtils::StringToInt(id_), "titleText", titleText)); + } +} + +void TVTitleBarBuilder::BuildSubTitle(const RefPtr& parent, const RefPtr& leftContainer) +{ + if (!subTitle_.empty()) { + if (menu_) { + leftContainer->AppendChild(BuildPadding(TV_PADDING_BETWEEN_TITLE_AND_SUBTITLE)); + auto subTitleText = BuildTitleText(subTitle_, subTitleColor_, subTitleFontSize_, FontWeight::W400); + leftContainer->AppendChild( + GenerateAccessibilityComposed(StringUtils::StringToInt(id_), "subTitleText", subTitleText)); + parent->AppendChild(AceType::MakeRefPtr( + MIDDLE_ZONE_FLEX_GROW, MIDDLE_ZONE_FLEX_SHRINK, 0.0, leftContainer)); + } else { + parent->AppendChild(AceType::MakeRefPtr( + MIDDLE_ZONE_FLEX_GROW, MIDDLE_ZONE_FLEX_SHRINK, 0.0, leftContainer)); + auto subTitleText = BuildTitleText(subTitle_, subTitleColor_, subTitleFontSize_, FontWeight::W400); + parent->AppendChild( + GenerateAccessibilityComposed(StringUtils::StringToInt(id_), "subTitleText", subTitleText)); + } + } else { + parent->AppendChild( + AceType::MakeRefPtr(MIDDLE_ZONE_FLEX_GROW, MIDDLE_ZONE_FLEX_SHRINK, 0.0, leftContainer)); + } +} + +RefPtr TVTitleBarBuilder::Build() +{ + RefPtr container = + AceType::MakeRefPtr(FlexAlign::FLEX_START, FlexAlign::FLEX_END, std::list>()); + container->SetTextDirection(direction_); + RefPtr leftContainer = + AceType::MakeRefPtr(FlexAlign::FLEX_START, FlexAlign::FLEX_END, std::list>()); + leftContainer->SetTextDirection(direction_); + + BuildTitle(leftContainer); + BuildSubTitle(container, leftContainer); + AddMenu(container, false); + + padding_.SetLeft(theme_->GetMaxPaddingStart()); + padding_.SetRight(theme_->GetMaxPaddingEnd()); + padding_.SetBottom(Dimension(WATCH_BAR_PADDING_BOTTOM, DimensionUnit::VP)); + + auto boxContainer = BuildContainer(container); + boxContainer->SetAlignment(Alignment::BOTTOM_CENTER); + return boxContainer; +} + +#endif + +void WatchTitleBarBuilder::BuildTitle(const RefPtr& parent) +{ + parent->AppendChild(BuildPadding(WATCH_TITLE_PADDING_TOP, true)); + if (!titleFontSize_.IsValid()) { + titleFontSize_ = theme_->GetTitleFontSize(); + } + + auto titleBox = AceType::MakeRefPtr(); + titleBox->SetPadding( + Edge(WATCH_TITLE_LINE_PADDING.Value(), 0.0, WATCH_TITLE_LINE_PADDING.Value(), 0.0, DimensionUnit::VP)); + auto titleText = BuildWatchTitleText(title_, titleColor_, titleFontSize_, false); + titleBox->SetChild(GenerateAccessibilityComposed(StringUtils::StringToInt(id_), "titleText", titleText)); + parent->AppendChild(titleBox); +} + +void WatchTitleBarBuilder::BuildSubTitle(const RefPtr& parent) +{ + if (!subTitle_.empty()) { + parent->AppendChild(BuildPadding(WATCH_SUBTITLE_PADDING_TOP, true)); + + auto subTitleBox = AceType::MakeRefPtr(); + subTitleBox->SetPadding(Edge( + WATCH_SUBTITLE_LINE_PADDING.Value(), 0.0, WATCH_SUBTITLE_LINE_PADDING.Value(), 0.0, DimensionUnit::VP)); + if (!logoSrc_.empty()) { + RefPtr subContainer = AceType::MakeRefPtr( + FlexAlign::FLEX_START, FlexAlign::CENTER, std::list>()); + subContainer->SetTextDirection(direction_); + BuildLogo(subContainer); + subContainer->AppendChild(BuildPadding(WATCH_PADDING_BETWEEN_LOGO_AND_SUBTITLE)); + auto subTitleText = BuildWatchTitleText(subTitle_, subTitleColor_, subTitleFontSize_, true); + auto subTitleFlex = AceType::MakeRefPtr( + 1, 1, 0, GenerateAccessibilityComposed(StringUtils::StringToInt(id_), "subTitleText", subTitleText)); + subContainer->AppendChild(subTitleFlex); + subContainer->SetMainAxisSize(MainAxisSize::MIN); + subTitleBox->SetChild(subContainer); + } else { + auto subTitleText = BuildWatchTitleText(subTitle_, subTitleColor_, subTitleFontSize_, true); + subTitleBox->SetChild( + GenerateAccessibilityComposed(StringUtils::StringToInt(id_), "subTitleText", subTitleText)); + } + parent->AppendChild(subTitleBox); + } +} + +void WatchTitleBarBuilder::BuildLogo(const RefPtr& parent) +{ + auto logoSize = theme_->GetLogoIconSize(); + IconImage logoIconImage(logoSrc_, logoSize, logoSize); + parent->AppendChild(GenerateAccessibilityComposed(StringUtils::StringToInt(id_), "image", logoIconImage.image)); +} + +RefPtr WatchTitleBarBuilder::Build() +{ + RefPtr container = + AceType::MakeRefPtr(FlexAlign::FLEX_START, FlexAlign::CENTER, std::list>()); + container->SetMainAxisSize(MainAxisSize::MIN); + container->SetTextDirection(direction_); + + if (!title_.empty()) { + BuildTitle(container); + } else { + LOGW("navigation bar no title, will don't show"); + return container; + } + + BuildSubTitle(container); + return container; +} + +RefPtr CommonBuilder::GenerateAccessibilityComposed( + int32_t parentId, const std::string& name, const RefPtr& child) +{ + const auto& pipelineContext = context_.Upgrade(); + if (!pipelineContext) { + return nullptr; + } + + const auto& accessibilityManager = pipelineContext->GetAccessibilityManager(); + if (accessibilityManager) { + auto composedId = accessibilityManager->GenerateNextAccessibilityId(); + accessibilityManager->CreateSpecializedNode(name, composedId, parentId); + return AceType::MakeRefPtr(std::to_string(composedId), name, child); + } + return nullptr; +} + +RefPtr NavigationBarComponent::Build(const WeakPtr& context) +{ + auto deviceType = SystemProperties::GetDeviceType(); + LOGD("build navigation bar for %{public}d", deviceType); + RefPtr builder; + switch (deviceType) { +#ifndef WEARABLE_PRODUCT + case DeviceType::TV: + builder = AceType::MakeRefPtr(data_); + break; + case DeviceType::PHONE: + if (data_->type == NavigationBarType::EMPHASIZE) { + builder = AceType::MakeRefPtr(data_); + } else { + builder = AceType::MakeRefPtr(data_); + } + break; +#endif + case DeviceType::WATCH: + builder = AceType::MakeRefPtr(data_); + break; + default: + LOGW("build navigation bar failed, unknown device type"); + return nullptr; + } + + builder->SetContext(context); + builder->SetId(GetId()); + builder->SetTextDirection(direction_); + auto component = builder->Build(); +#ifndef WEARABLE_PRODUCT + auto menuBuilder = AceType::DynamicCast(builder); + if (menuBuilder) { + moreButton_ = menuBuilder->GetMoreButton(); + menuItemsInBar_ = menuBuilder->GetMenuItemsInBar(); + } +#endif + + return component; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/navigation_bar/navigation_bar_component.h b/frameworks/core/components/navigation_bar/navigation_bar_component.h new file mode 100644 index 00000000..83f670a9 --- /dev/null +++ b/frameworks/core/components/navigation_bar/navigation_bar_component.h @@ -0,0 +1,425 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NAVIGATION_BAR_NAVIGATION_BAR_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NAVIGATION_BAR_NAVIGATION_BAR_COMPONENT_H + +#include "core/components/button/button_component.h" +#include "core/components/flex/flex_component.h" +#include "core/components/navigation_bar/navigation_bar_theme.h" +#include "core/components/text/text_component.h" +#ifndef WEARABLE_PRODUCT +#include "core/components/menu/menu_component.h" +#include "core/components/navigation_bar/render_collapsing_navigation_bar.h" +#include "core/components/select/select_component.h" +#include "core/components/tab_bar/tab_bar_component.h" +#endif + +namespace OHOS::Ace { + +using NavigationBarShowFunc = std::function; +using NavigationBarHideFunc = std::function; + +class NavigationBarController : public virtual AceType { + DECLARE_ACE_TYPE(NavigationBarController, AceType); + +public: + void Show() const + { + if (showFunc_) { + showFunc_(); + } + } + + void Hide() const + { + if (hideFunc_) { + hideFunc_(); + } + } + + void SetFunction(const NavigationBarShowFunc& showFunc, const NavigationBarHideFunc& hideFunc) + { + showFunc_ = showFunc; + hideFunc_ = hideFunc; + } + +private: + NavigationBarShowFunc showFunc_; + NavigationBarHideFunc hideFunc_; +}; + +enum class NavigationBarType { + NORMAL = 0, + EMPHASIZE, +}; + +class TitleBarBuilder; + +struct NavigationBarData : public virtual AceType { + DECLARE_ACE_TYPE(NavigationBarData, AceType); + +public: + NavigationBarData() = default; + ~NavigationBarData() = default; + + std::string header; + std::string title; + std::string subTitle; + bool backEnabled = false; + EventMarker backClickMarker; + std::string logo; + std::string startIcon; + EventMarker startClickMarker; + std::string endIcon; + EventMarker endClickMarker; + Color titleColor; + Color subTitleColor; + NavigationBarType type = NavigationBarType::NORMAL; + +#ifndef WEARABLE_PRODUCT + RefPtr tabBar; + RefPtr selectPopup; + RefPtr menu; + std::list> allMenuItems; +#endif + + RefPtr controller; + RefPtr theme; +}; + +class NavigationBarComponent : public ComposedComponent { + DECLARE_ACE_TYPE(NavigationBarComponent, ComposedComponent); + +public: + struct MenuItemInBar { + std::string value; + EventMarker clickEvent; + RefPtr button; + }; + + NavigationBarComponent(const ComposeId& id, const std::string& name); + ~NavigationBarComponent() override = default; + + void InitStyle(const RefPtr& theme); + RefPtr CreateElement() override; + RefPtr Build(const WeakPtr& context); + +#ifndef WEARABLE_PRODUCT + RefPtr GetMenu() const + { + return data_->menu; + } + + const std::map& GetMenuItemsInBar() const + { + return menuItemsInBar_; + } + + const RefPtr& GetMoreButton() const + { + return moreButton_; + } +#endif + const RefPtr& GetData() const + { + return data_; + } + +private: + WeakPtr context_; + RefPtr data_; +#ifndef WEARABLE_PRODUCT + std::map menuItemsInBar_; + RefPtr moreButton_; +#endif +}; + +class CommonBuilder { +public: + CommonBuilder() = delete; + virtual ~CommonBuilder() = default; + explicit CommonBuilder(const RefPtr& theme) + : theme_(theme), menuZoneSize_(theme_->GetMenuZoneSize()), menuIconSize_(theme_->GetMenuIconSize()) + {} + void SetContext(const WeakPtr& context) + { + context_ = context; + } + void SetId(const ComposeId& id) + { + id_ = id; + } + void SetTextDirection(const TextDirection& direction) + { + direction_ = direction; + } + +protected: + RefPtr GenerateAccessibilityComposed( + int32_t parentId, const std::string& name, const RefPtr& child); + + WeakPtr context_; + RefPtr theme_; + ComposeId id_; + Dimension menuZoneSize_; + Dimension menuIconSize_; + TextDirection direction_ = TextDirection::LTR; +}; + +class TitleBarBuilder : public virtual AceType, public virtual CommonBuilder { + DECLARE_ACE_TYPE(TitleBarBuilder, AceType); + +public: + explicit TitleBarBuilder(const RefPtr& data) + : CommonBuilder(data->theme), height_(data->theme->GetHeight()), title_(data->title), + titleColor_(data->titleColor), subTitle_(data->subTitle), subTitleColor_(data->subTitleColor), + subTitleFontSize_(data->theme->GetSubTitleFontSize()) + {} + virtual ~TitleBarBuilder() = default; + virtual RefPtr Build() = 0; + +protected: +#ifndef WEARABLE_PRODUCT + RefPtr BuildContainer(const RefPtr& child) + { + auto boxContainer = AceType::MakeRefPtr(); + boxContainer->SetHeight(height_.Value(), height_.Unit()); + boxContainer->SetChild(child); + boxContainer->SetPadding(padding_); + return boxContainer; + } +#endif + + Edge padding_; + Dimension height_; + + std::string title_; + Color titleColor_; + Dimension titleFontSize_; + + std::string subTitle_; + Color subTitleColor_; + Dimension subTitleFontSize_; +}; + +class WatchTitleBarBuilder : public TitleBarBuilder { + DECLARE_ACE_TYPE(WatchTitleBarBuilder, TitleBarBuilder); + +public: + explicit WatchTitleBarBuilder(const RefPtr& data) + : CommonBuilder(data->theme), TitleBarBuilder(data), logoSrc_(data->logo) + {} + ~WatchTitleBarBuilder() = default; + RefPtr Build() override; + +private: + void BuildTitle(const RefPtr& parent); + void BuildSubTitle(const RefPtr& parent); + void BuildLogo(const RefPtr& parent); + + std::string logoSrc_; +}; + +#ifndef WEARABLE_PRODUCT +class TabBarBuilder : public virtual CommonBuilder { +public: + explicit TabBarBuilder(const RefPtr& data) : CommonBuilder(data->theme), tabBar_(data->tabBar) {} + ~TabBarBuilder() = default; + + void BuildTabBar(const RefPtr& parent); + +protected: + RefPtr tabBar_; +}; + +class TitleBarMenuBuilder : public virtual AceType, public virtual CommonBuilder { + DECLARE_ACE_TYPE(TitleBarMenuBuilder, AceType); + +public: + explicit TitleBarMenuBuilder(const RefPtr& data) + : CommonBuilder(data->theme), menu_(data->menu), allMenuItems_(data->allMenuItems) {}; + ~TitleBarMenuBuilder() = default; + + const std::map& GetMenuItemsInBar() const + { + return menuItemsInBar_; + } + const RefPtr& GetMoreButton() const + { + return moreButton_; + } + const RefPtr& GetMenu() const + { + return menu_; + } + +protected: + bool AddMenu(const RefPtr& container, bool canCollapse = true); + + RefPtr menu_; + +private: + void MoveMenuItemsToBar(const RefPtr& container); + void AddCollapseMenu(const RefPtr& container); + + std::map menuItemsInBar_; + std::list> allMenuItems_; + RefPtr moreButton_; +}; + +class TVTitleBarBuilder : public TitleBarBuilder, public TitleBarMenuBuilder { + DECLARE_ACE_TYPE(TVTitleBarBuilder, TitleBarBuilder, TitleBarMenuBuilder); + +public: + explicit TVTitleBarBuilder(const RefPtr& data) + : CommonBuilder(data->theme), TitleBarBuilder(data), TitleBarMenuBuilder(data) + {} + ~TVTitleBarBuilder() = default; + + RefPtr Build() override; + +private: + void BuildTitle(const RefPtr& parent); + void BuildSubTitle(const RefPtr& parent, const RefPtr& leftContainer); +}; + +class PhoneTitleBarBuilder : public TitleBarBuilder, public TitleBarMenuBuilder, public TabBarBuilder { + DECLARE_ACE_TYPE(PhoneTitleBarBuilder, TitleBarBuilder, TitleBarMenuBuilder); + +public: + explicit PhoneTitleBarBuilder(const RefPtr& data) + : CommonBuilder(data->theme), TitleBarBuilder(data), TitleBarMenuBuilder(data), TabBarBuilder(data), + selectPopup_(data->selectPopup) + { + titleFontSize_ = data->theme->GetTitleFontSize(); + } + ~PhoneTitleBarBuilder() = default; + + RefPtr Build() override = 0; + const RefPtr& GetTitleComposed() const + { + return titleComposed_; + } + const RefPtr& GetSubtitleComposed() const + { + return subTitleComposed_; + } + +protected: + RefPtr BuildTitle(double padding = 0.0); + void BuildSelectPopup(const RefPtr& parent); + void BuildTitleZone(const RefPtr& parent, double padding = 0.0); + + RefPtr selectPopup_; + std::string header_; + RefPtr titleComposed_; + RefPtr subTitleComposed_; +}; + +class EmphasizeTitleBarBuilder : public PhoneTitleBarBuilder { + DECLARE_ACE_TYPE(EmphasizeTitleBarBuilder, PhoneTitleBarBuilder); + +public: + explicit EmphasizeTitleBarBuilder(const RefPtr& data) + : CommonBuilder(data->theme), PhoneTitleBarBuilder(data) + { + height_ = Dimension(112, DimensionUnit::VP); + padding_.SetLeft(theme_->GetMaxPaddingStart()); + padding_.SetRight(theme_->GetDefaultPaddingEnd()); + titleFontSize_ = theme_->GetTitleFontSizeBig(); + header_ = data->header; + } + ~EmphasizeTitleBarBuilder() = default; + + RefPtr Build() override; +}; + +class NormalTitleBarBuilder : public PhoneTitleBarBuilder { + DECLARE_ACE_TYPE(NormalTitleBarBuilder, PhoneTitleBarBuilder); + +public: + explicit NormalTitleBarBuilder(const RefPtr& data) + : CommonBuilder(data->theme), PhoneTitleBarBuilder(data), backEnabled_(data->backEnabled), + backClickMarker_(data->backClickMarker), logoSrc_(data->logo), startIconSrc_(data->startIcon), + startClickMarker_(data->startClickMarker), endIconSrc_(data->endIcon), endClickMarker_(data->endClickMarker) + {} + ~NormalTitleBarBuilder() = default; + + RefPtr Build() override; + +private: + void BuildStartZone(const RefPtr& parent); + void BuildLogo(const RefPtr& parent); + void BuildEndZone(const RefPtr& parent); + + bool backEnabled_ = false; + EventMarker backClickMarker_; + std::string logoSrc_; + std::string startIconSrc_; + EventMarker startClickMarker_; + std::string endIconSrc_; + EventMarker endClickMarker_; +}; + +class CollapsingNavigationBarComponent : public ComponentGroup { + DECLARE_ACE_TYPE(CollapsingNavigationBarComponent, ComponentGroup); + +public: + CollapsingNavigationBarComponent() = default; + explicit CollapsingNavigationBarComponent(const RefPtr& builder) + { + titleComposed_ = builder->GetTitleComposed(); + subTitleComposed_ = builder->GetSubtitleComposed(); + } + ~CollapsingNavigationBarComponent() override = default; + RefPtr CreateElement() override + { + return AceType::MakeRefPtr(); + } + + RefPtr CreateRenderNode() override + { + return AceType::MakeRefPtr(); + } + const RefPtr& GetTitleComposed() const + { + return titleComposed_; + } + const RefPtr& GetSubtitleComposed() const + { + return subTitleComposed_; + } + const Dimension& GetMinHeight() const + { + return minHeight_; + } + void SetMinHeight(const Dimension& minHeight) + { + minHeight_ = minHeight; + } + +private: + RefPtr titleComponent_; + RefPtr titleComposed_; + RefPtr subTitleComposed_; + Dimension minHeight_; +}; + +#endif + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NAVIGATION_BAR_NAVIGATION_BAR_COMPONENT_H diff --git a/frameworks/core/components/navigation_bar/navigation_bar_element.cpp b/frameworks/core/components/navigation_bar/navigation_bar_element.cpp new file mode 100644 index 00000000..600be4b2 --- /dev/null +++ b/frameworks/core/components/navigation_bar/navigation_bar_element.cpp @@ -0,0 +1,129 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/navigation_bar/navigation_bar_element.h" + +#include "core/event/ace_event_helper.h" +#include "core/gestures/click_recognizer.h" + +namespace OHOS::Ace { +namespace { + +#ifndef WEARABLE_PRODUCT +constexpr double MENU_DEFAULT_HEIGHT = 56.0; +#endif + +} // namespace + +void NavigationBarElement::PerformBuild() +{ + RefPtr navigationBar = AceType::DynamicCast(component_); + if (navigationBar) { + const auto& child = children_.empty() ? nullptr : children_.front(); + auto newBar = navigationBar->Build(context_); +#ifndef WEARABLE_PRODUCT + BindMoreButtonClickEvent(navigationBar); + BindClickEventToOptions(navigationBar); +#endif + UpdateChild(child, newBar); + } +} + +#ifndef WEARABLE_PRODUCT +void NavigationBarElement::BindMoreButtonClickEvent(const RefPtr& navigationBar) +{ + auto moreButton = navigationBar->GetMoreButton(); + if (!moreButton) { + return; + } + auto weak = AceType::WeakClaim(this); + moreClickMarker_ = BackEndEventManager::GetInstance().GetAvailableMarker(); + BackEndEventManager::GetInstance().BindBackendEvent( + moreClickMarker_, [weak = WeakClaim(this), navigationBar]() { + LOGD("click collapse icon"); + auto menu = navigationBar->GetMenu(); + if (!menu) { + LOGW("navigation bar not menu"); + return; + } + auto showMenuFunc = menu->GetTargetCallback(); + if (!showMenuFunc) { + return; + } + auto element = weak.Upgrade(); + if (!element) { + LOGW("weak ptr to ref ptr fail"); + return; + } + auto context = element->GetContext().Upgrade(); + if (!context) { + LOGW("context is empty"); + return; + } + double morePopupOffsetX = 0.0; + if (navigationBar->GetTextDirection() == TextDirection::LTR) { + morePopupOffsetX = context->GetStageRect().Width(); + } + showMenuFunc(navigationBar->GetId(), + Offset(morePopupOffsetX, + context->NormalizeToPx(Dimension(MENU_DEFAULT_HEIGHT, DimensionUnit::VP)))); + }); + moreButton->SetClickedEventId(moreClickMarker_); +} + +void NavigationBarElement::BindClickEventToOptions(const RefPtr& navigationBar) +{ + auto menu = navigationBar->GetMenu(); + if (!menu) { + LOGI("navigation bar not menu"); + return; + } + + const auto& menuSuccessEvent = menu->GetOnSuccess(); + if (menuSuccessEvent.IsEmpty()) { + LOGI("navigation bar menu not listen success event"); + return; + } + + menuSelectedEvent_ = AceAsyncEvent::Create(menuSuccessEvent, context_); + for (const auto& menuItem : navigationBar->GetMenuItemsInBar()) { + menuItem.second.button->SetClickedEventId(menuItem.second.clickEvent); + std::string eventId = menuItem.second.clickEvent.GetData().eventId; + + auto weak = AceType::WeakClaim(this); + BackEndEventManager::GetInstance().BindBackendEvent( + menuItem.second.clickEvent, [navigationBar, eventId, weak]() { + LOGD("click menuItem %{public}s in bar", eventId.c_str()); + auto navigationBarElement = weak.Upgrade(); + if (!navigationBarElement) { + LOGE("get navigation bar element failed"); + return; + } + + auto menuItemsInBar = navigationBar->GetMenuItemsInBar(); + auto menuItemIter = menuItemsInBar.find(eventId); + if (menuItemIter == menuItemsInBar.end()) { + LOGE("not find which item"); + return; + } + std::string selected = menuItemIter->second.value; + std::string param = std::string(R"("selected",{"value":")").append(selected.append("\"},null")); + navigationBarElement->menuSelectedEvent_(param); + }); + } +} +#endif + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/navigation_bar/navigation_bar_element.h b/frameworks/core/components/navigation_bar/navigation_bar_element.h new file mode 100644 index 00000000..01bd3a1f --- /dev/null +++ b/frameworks/core/components/navigation_bar/navigation_bar_element.h @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NAVIGATION_BAR_NAVIGATION_BAR_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NAVIGATION_BAR_NAVIGATION_BAR_ELEMENT_H + +#include "core/components/navigation_bar/navigation_bar_component.h" +#include "core/focus/focus_node.h" +#include "core/pipeline/base/composed_element.h" + +namespace OHOS::Ace { + +class NavigationBarElement : public ComposedElement, public FocusGroup { + DECLARE_ACE_TYPE(NavigationBarElement, ComposedElement, FocusGroup); + +public: + explicit NavigationBarElement(const ComposeId& id) : ComposedElement(id) {} + ~NavigationBarElement() override = default; + + void PerformBuild() override; + +protected: + bool RequestNextFocus(bool vertical, bool reverse, const Rect& rect) override + { + return false; + }; + + void OnFocus() override + { + auto context = GetContext().Upgrade(); + if (context) { + context->SetUseRootAnimation(true); + } + FocusGroup::OnFocus(); + } + + void OnBlur() override + { + auto context = GetContext().Upgrade(); + if (context) { + context->SetUseRootAnimation(false); + } + FocusGroup::OnBlur(); + } + +private: +#ifndef WEARABLE_PRODUCT + EventMarker moreClickMarker_; + void BindMoreButtonClickEvent(const RefPtr& navigationBar); + void BindClickEventToOptions(const RefPtr& navigationBar); +#endif + + std::function menuSelectedEvent_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NAVIGATION_BAR_NAVIGATION_BAR_ELEMENT_H diff --git a/frameworks/core/components/navigation_bar/navigation_bar_theme.h b/frameworks/core/components/navigation_bar/navigation_bar_theme.h new file mode 100644 index 00000000..3d253897 --- /dev/null +++ b/frameworks/core/components/navigation_bar/navigation_bar_theme.h @@ -0,0 +1,225 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NAVIGATION_BAR_NAVIGATION_BAR_THEME_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NAVIGATION_BAR_NAVIGATION_BAR_THEME_H + +#include "core/components/theme/theme.h" +#include "core/components/theme/theme_constants.h" + +namespace OHOS::Ace { + +class NavigationBarTheme : public virtual Theme { + DECLARE_ACE_TYPE(NavigationBarTheme, Theme); + +public: + class Builder { + public: + Builder() = default; + ~Builder() = default; + + RefPtr Build(const RefPtr& themeConstants) const + { + RefPtr theme = AceType::Claim(new NavigationBarTheme()); + if (!themeConstants) { + return theme; + } + theme->titleColor_ = themeConstants->GetColor(THEME_NAVIGATION_BAR_TITLE_COLOR); + theme->titleFontSize_ = Dimension( + themeConstants->GetDimension(THEME_NAVIGATION_BAR_TITLE_FONT_SIZE).Value(), DimensionUnit::VP); + theme->titleFontSizeBig_ = themeConstants->GetDimension(THEME_NAVIGATION_BAR_TITLE_FONT_SIZE_BIG); + theme->subTitleColor_ = themeConstants->GetColor(THEME_NAVIGATION_BAR_SUBTITLE_COLOR); + theme->subTitleFontSize_ = Dimension( + themeConstants->GetDimension(THEME_NAVIGATION_BAR_SUBTITLE_FONT_SIZE).Value(), DimensionUnit::VP); + theme->height_ = themeConstants->GetDimension(THEME_NAVIGATION_BAR_HEIGHT); + theme->heightEmphasize_ = themeConstants->GetDimension(THEME_NAVIGATION_BAR_HEIGHT_EMPHASIZE); + theme->backResourceId_ = themeConstants->GetResourceId(THEME_NAVIGATION_BAR_RESOURCE_ID_BACK); + theme->moreResourceId_ = themeConstants->GetResourceId(THEME_NAVIGATION_BAR_RESOURCE_ID_MORE); + theme->menuZoneSize_ = themeConstants->GetDimension(THEME_NAVIGATION_BAR_MENU_ZONE_SIZE); + theme->menuIconSize_ = themeConstants->GetDimension(THEME_NAVIGATION_BAR_MENU_ICON_SIZE); + theme->logoIconSize_ = themeConstants->GetDimension(THEME_NAVIGATION_BAR_LOGO_ICON_SIZE); + theme->buttonNormalColor_ = themeConstants->GetColor(THEME_NAVIGATION_BAR_BUTTON_NORMAL_COLOR); + theme->buttonPressedColor_ = themeConstants->GetColor(THEME_NAVIGATION_BAR_BUTTON_PRESSED_COLOR); + theme->buttonFocusColor_ = themeConstants->GetColor(THEME_NAVIGATION_BAR_BUTTON_FOCUS_COLOR); + theme->buttonCornerRadius_ = themeConstants->GetDimension(THEME_NAVIGATION_BAR_BUTTON_CORNER_RADIUS); + theme->maxPaddingStart_ = themeConstants->GetDimension(THEME_NAVIGATION_BAR_MAX_PADDING_START); + theme->maxPaddingEnd_ = themeConstants->GetDimension(THEME_NAVIGATION_BAR_MAX_PADDING_END); + theme->defaultPaddingStart_ = themeConstants->GetDimension(THEME_NAVIGATION_BAR_DEFAULT_PADDING_START); + theme->defaultPaddingEnd_ = themeConstants->GetDimension(THEME_NAVIGATION_BAR_DEFAULT_PADDING_END); + theme->menuItemPadding_ = themeConstants->GetDimension(THEME_NAVIGATION_BAR_MENU_ITEM_PADDING); + theme->titleMinPadding_ = themeConstants->GetDimension(THEME_NAVIGATION_BAR_TITLE_MIN_PADDING); + auto menuCount = themeConstants->GetInt(THEME_NAVIGATION_BAR_MOST_MENU_ITEM_COUNT_IN_BAR); + theme->mostMenuItemCountInBar_ = + menuCount < 0 ? theme->mostMenuItemCountInBar_ : static_cast(menuCount); + + auto themeStyle = themeConstants->GetThemeStyle(); + if (!themeStyle) { + return theme; + } + theme->titleColor_ = themeStyle->GetAttr(THEME_ATTR_COLOR_APPBAR_TITLE, Color::WHITE); + theme->titleFontSize_ = themeStyle->GetAttr(THEME_ATTR_TEXT_SIZE_HEADLINE7, 0.0_vp); + theme->titleFontSizeBig_ = themeStyle->GetAttr(THEME_ATTR_TEXT_SIZE_HEADLINE6, 0.0_vp); + theme->subTitleColor_ = themeStyle->GetAttr(THEME_ATTR_COLOR_APPBAR_SUBTITLE, Color::WHITE); + theme->subTitleFontSize_ = themeStyle->GetAttr(THEME_ATTR_TEXT_SIZE_OVERLINE, 0.0_vp); + theme->menuIconColor_ = themeStyle->GetAttr(THEME_ATTR_COLOR_APPBAR_ICON, Color::WHITE); + theme->buttonPressedColor_ = themeStyle->GetAttr(THEME_ATTR_COLOR_CLICK_EFFECT, Color::WHITE); + theme->buttonFocusColor_ = themeStyle->GetAttr(THEME_ATTR_COLOR_FOCUSED, Color::WHITE); + theme->buttonHoverColor_ = themeStyle->GetAttr(THEME_ATTR_COLOR_HOVER, Color::WHITE); + theme->buttonCornerRadius_ = themeStyle->GetAttr(THEME_ATTR_CLICK_CORNER_RADIUS, 0.0_vp); + + return theme; + } + }; + + ~NavigationBarTheme() override = default; + + const Color& GetTitleColor() const + { + return titleColor_; + } + + const Color& GetSubTitleColor() const + { + return subTitleColor_; + } + const Dimension& GetTitleFontSizeBig() const + { + return titleFontSizeBig_; + } + + const Dimension& GetTitleFontSize() const + { + return titleFontSize_; + } + + const Dimension& GetSubTitleFontSize() const + { + return subTitleFontSize_; + } + const Dimension& GetHeight() const + { + return height_; + } + const Dimension& GetHeightEmphasize() const + { + return heightEmphasize_; + } + InternalResource::ResourceId GetBackResourceId() const + { + return backResourceId_; + } + InternalResource::ResourceId GetMoreResourceId() const + { + return moreResourceId_; + } + const Dimension& GetMenuZoneSize() const + { + return menuZoneSize_; + } + const Dimension& GetMenuIconSize() const + { + return menuIconSize_; + } + const Dimension& GetLogoIconSize() const + { + return logoIconSize_; + } + const Color& GetMenuIconColor() const + { + return menuIconColor_; + } + const Color& GetButtonNormalColor() const + { + return buttonNormalColor_; + } + const Color& GetButtonPressedColor() const + { + return buttonPressedColor_; + } + const Color& GetButtonFocusColor() const + { + return buttonFocusColor_; + } + const Color& GetButtonHoverColor() const + { + return buttonHoverColor_; + } + const Dimension& GetButtonCornerRadius() const + { + return buttonCornerRadius_; + } + const Dimension& GetMaxPaddingStart() const + { + return maxPaddingStart_; + } + const Dimension& GetDefaultPaddingStart() const + { + return defaultPaddingStart_; + } + const Dimension& GetDefaultPaddingEnd() const + { + return defaultPaddingEnd_; + } + const Dimension& GetMaxPaddingEnd() const + { + return maxPaddingEnd_; + } + const Dimension& GetMenuItemPadding() const + { + return menuItemPadding_; + } + const Dimension& GetTitleMinPadding() const + { + return titleMinPadding_; + } + uint32_t GetMostMenuItemCountInBar() const + { + return mostMenuItemCountInBar_; + } + +protected: + NavigationBarTheme() = default; + +private: + Color titleColor_; + Color subTitleColor_; + Dimension titleFontSizeBig_; + Dimension titleFontSize_; + Dimension subTitleFontSize_; + Dimension height_; + Dimension heightEmphasize_; + InternalResource::ResourceId backResourceId_ = InternalResource::ResourceId::NO_ID; + InternalResource::ResourceId moreResourceId_ = InternalResource::ResourceId::NO_ID; + Dimension menuZoneSize_; + Dimension menuIconSize_; + Dimension logoIconSize_; + Color menuIconColor_; + Color buttonNormalColor_; + Color buttonPressedColor_; + Color buttonFocusColor_; + Color buttonHoverColor_; + Dimension buttonCornerRadius_; + Dimension maxPaddingStart_; + Dimension maxPaddingEnd_; + Dimension defaultPaddingStart_; + Dimension defaultPaddingEnd_; + Dimension menuItemPadding_; + Dimension titleMinPadding_; + uint32_t mostMenuItemCountInBar_ = 0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NAVIGATION_BAR_NAVIGATION_BAR_THEME_H diff --git a/frameworks/core/components/navigation_bar/navigation_container_component.h b/frameworks/core/components/navigation_bar/navigation_container_component.h new file mode 100644 index 00000000..f3af6157 --- /dev/null +++ b/frameworks/core/components/navigation_bar/navigation_container_component.h @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NAVIGATION_BAR_NAVIGATION_CONTAINER_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NAVIGATION_BAR_NAVIGATION_CONTAINER_COMPONENT_H + +#include "core/components/navigation_bar/navigation_container_element.h" +#include "core/components/navigation_bar/render_navigation_container.h" +#include "core/pipeline/base/component_group.h" + +namespace OHOS::Ace { + +class NavigationContainerComponent : public ComponentGroup { + DECLARE_ACE_TYPE(NavigationContainerComponent, ComponentGroup); + +public: + NavigationContainerComponent(const RefPtr& navigationbar, const RefPtr& content) + : ComponentGroup() + { + ComponentGroup::AppendChild(navigationbar); + ComponentGroup::AppendChild(content); + } + ~NavigationContainerComponent() override = default; + + RefPtr CreateRenderNode() override + { + return RenderNavigationContainer::Create(); + } + + RefPtr CreateElement() override + { + return AceType::MakeRefPtr(); + } +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NAVIGATION_BAR_NAVIGATION_CONTAINER_COMPONENT_H diff --git a/frameworks/core/components/navigation_bar/navigation_container_element.h b/frameworks/core/components/navigation_bar/navigation_container_element.h new file mode 100644 index 00000000..d3bb933f --- /dev/null +++ b/frameworks/core/components/navigation_bar/navigation_container_element.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NAVIGATION_BAR_NAVIGATION_CONTAINER_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NAVIGATION_BAR_NAVIGATION_CONTAINER_ELEMENT_H + +#include "core/pipeline/base/component_group_element.h" + +namespace OHOS::Ace { + +class NavigationContainerElement : public ComponentGroupElement, public FocusGroup { + DECLARE_ACE_TYPE(NavigationContainerElement, ComponentGroupElement, FocusGroup); + +public: + bool RequestNextFocus(bool vertical, bool reverse, const Rect& rect) override + { + return GoToNextFocus(reverse, rect); + } +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NAVIGATION_BAR_NAVIGATION_CONTAINER_ELEMENT_H diff --git a/frameworks/core/components/navigation_bar/render_collapsing_navigation_bar.cpp b/frameworks/core/components/navigation_bar/render_collapsing_navigation_bar.cpp new file mode 100644 index 00000000..b0eeb24f --- /dev/null +++ b/frameworks/core/components/navigation_bar/render_collapsing_navigation_bar.cpp @@ -0,0 +1,318 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/navigation_bar/render_collapsing_navigation_bar.h" + +#include "core/animation/curve_animation.h" +#include "core/components/navigation_bar/navigation_bar_component.h" +#include "core/components/navigation_bar/render_navigation_container.h" + +namespace OHOS::Ace { +namespace { + +constexpr int32_t COLLAPSING_ANIMATION_DURATION = 300; +constexpr double SPRING_DRAG_DELTA_OFFSET_RATIO = 7; +constexpr double SPRING_RESTORE_DELTA_OFFSET_RATIO = 5; +constexpr double FIX_TITLE_BAR_OFFSET_RATIO = 1.5; +constexpr double BIGGER_TITLE_SIZE_MULTIPLE = 1.1; +constexpr double MAX_ALPHA_VALUE = 255.0; +constexpr double TRANSPARENT = 0.0; +constexpr Dimension HIDE_TITLE_MARGIN_TOP = 12.0_vp; +constexpr Dimension SHOW_TITLE_MARGIN_TOP = 8.0_vp; +constexpr Dimension BIGGER_TITLE_POSITION_OFFSET = 30.0_vp; + +} // namespace + +RefPtr RenderCollapsingNavigationBar::Create() +{ + return AceType::MakeRefPtr(); +} + +void RenderCollapsingNavigationBar::Update(const RefPtr& component) +{ + Initialize(GetContext()); + + auto collapsingComponent = AceType::DynamicCast(component); + ACE_DCHECK(collapsingComponent); + auto pipelineContext = GetContext(); + auto titleComposed = collapsingComponent->GetTitleComposed(); + if (titleComposed) { + titleChangedCallback_ = [titleComposed, pipelineContext](double fontSize) { + auto titleComponent = AceType::DynamicCast(titleComposed->GetChild()); + if (titleComponent) { + auto textStyle = titleComponent->GetTextStyle(); + textStyle.SetFontSize(Dimension(fontSize, DimensionUnit::VP)); + titleComponent->SetTextStyle(textStyle); + pipelineContext.Upgrade()->ScheduleUpdate(titleComposed); + return; + } + auto boxComponent = AceType::DynamicCast(titleComposed->GetChild()); + if (!boxComponent) { + return; + } + auto selectComponent = AceType::DynamicCast(boxComponent->GetChild()); + if (!selectComponent) { + return; + } + selectComponent->SetFontSize(Dimension(fontSize, DimensionUnit::VP)); + pipelineContext.Upgrade()->ScheduleUpdate(titleComposed); + }; + } + + auto subtitleComposed = collapsingComponent->GetSubtitleComposed(); + if (subtitleComposed) { + subtitleChangedCallback_ = [subtitleComposed, pipelineContext](double opacity) { + auto subtitleComponent = AceType::DynamicCast(subtitleComposed->GetChild()); + if (!subtitleComponent) { + return; + } + auto textStyle = subtitleComponent->GetTextStyle(); + auto color = textStyle.GetTextColor(); + textStyle.SetTextColor(color.ChangeOpacity(opacity)); + subtitleComponent->SetTextStyle(textStyle); + pipelineContext.Upgrade()->ScheduleUpdate(subtitleComposed); + }; + } + minHeight_ = collapsingComponent->GetMinHeight(); + auto theme = GetTheme(); + titleSize_ = ChangedKeyframe(theme->GetTitleFontSize().Value(), theme->GetTitleFontSizeBig().Value(), + theme->GetTitleFontSizeBig().Value() * BIGGER_TITLE_SIZE_MULTIPLE); + double subtitleOpacity = theme->GetSubTitleColor().GetAlpha() / MAX_ALPHA_VALUE; + subtitleOpacity_ = ChangedKeyframe(TRANSPARENT, subtitleOpacity, subtitleOpacity); +} + +void RenderCollapsingNavigationBar::PerformLayout() +{ + auto layoutParam = GetLayoutParam(); + SetLayoutSize(layoutParam.GetMaxSize()); + scrollableHeight_ = GetLayoutSize().Height() - NormalizeToPx(minHeight_); + auto dipScale = GetContext().Upgrade()->GetDipScale(); + if (!NearEqual(dipScale_, dipScale)) { + dipScale_ = dipScale; + positionY_.Update(-scrollableHeight_, 0.0, BIGGER_TITLE_POSITION_OFFSET.ConvertToPx(dipScale_)); + titlePositionY_.Update(scrollableHeight_ + NormalizeToPx(HIDE_TITLE_MARGIN_TOP), + NormalizeToPx(SHOW_TITLE_MARGIN_TOP + minHeight_), + NormalizeToPx(SHOW_TITLE_MARGIN_TOP + minHeight_ + BIGGER_TITLE_POSITION_OFFSET)); + } + + double titlePositionY; + double fixedToolBarPos = -positionY_.value; + if (GreatNotEqual(positionY_.value, positionY_.expand)) { + titlePositionY = titlePositionY_.expand + positionY_.value; + fixedToolBarPos += positionY_.value / FIX_TITLE_BAR_OFFSET_RATIO; + } else { + titlePositionY = titlePositionY_.expand - positionY_.value * titlePositionY_.expandDis / positionY_.collapse; + } + + auto fixedToolBar = GetFirstChild(); + fixedToolBar->Layout(layoutParam); + fixedToolBar->SetPosition(Offset(0.0, fixedToolBarPos)); + auto titleZone = GetChildren().back(); + titleZone->Layout(layoutParam); + titleZone->SetPosition(Offset(0, titlePositionY)); +} + +void RenderCollapsingNavigationBar::OnRelatedStart() +{ + relateEvent_ = true; +} + +void RenderCollapsingNavigationBar::OnRelatedPreScroll(const Offset& delta, Offset& consumed) +{ + double dy = delta.GetY(); + if (!NeedHidden(dy)) { + return; + } + + ScrollBy(dy, positionY_.bigger); + consumed.SetY(dy); +} + +void RenderCollapsingNavigationBar::OnRelatedScroll(const Offset& delta, Offset& consumed) +{ + double dy = -delta.GetY(); + if (!NeedShow(dy)) { + if (!relateEvent_ && LessNotEqual(positionY_.value, positionY_.expand)) { + PrepareTitleSizeTranslate(titleSize_.value, titleSize_.expand); + PrepareSubtitleSizeTranslate(subtitleOpacity_.value, subtitleOpacity_.expand); + PreparePositionTranslate(positionY_.value, positionY_.expand); + controller_->Forward(); + } + return; + } + + if (!relateEvent_ && LessNotEqual(dy, 0.0)) { + dy = dy / SPRING_RESTORE_DELTA_OFFSET_RATIO; + } else if (GreatOrEqual(positionY_.value, positionY_.expand)) { + dy = dy / SPRING_DRAG_DELTA_OFFSET_RATIO; + } + ScrollBy(dy, positionY_.bigger); + if (LessOrEqual(positionY_.value, positionY_.expand) && relateEvent_) { + consumed.SetY(dy); + } +} + +void RenderCollapsingNavigationBar::OnRelatedEnd() +{ + relateEvent_ = false; +} + +void RenderCollapsingNavigationBar::OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) +{ + dragRecognizer_->SetCoordinateOffset(coordinateOffset); + result.emplace_back(dragRecognizer_); +} + +void RenderCollapsingNavigationBar::Initialize(const WeakPtr& context) +{ + dragRecognizer_ = AceType::MakeRefPtr(); + dragRecognizer_->SetOnDragStart([weakScroll = AceType::WeakClaim(this)](const DragStartInfo& info) { + auto scroll = weakScroll.Upgrade(); + if (scroll) { + scroll->HandleDragStart(info); + } + }); + dragRecognizer_->SetOnDragUpdate([weakScroll = AceType::WeakClaim(this)](const DragUpdateInfo& info) { + auto scroll = weakScroll.Upgrade(); + if (scroll) { + scroll->HandleDragUpdate(info); + } + }); + dragRecognizer_->SetOnDragEnd([weakScroll = AceType::WeakClaim(this)](const DragEndInfo&) { + auto scroll = weakScroll.Upgrade(); + if (scroll) { + scroll->HandleDragEnd(); + } + }); + controller_ = AceType::MakeRefPtr(context); + controller_->SetDuration(COLLAPSING_ANIMATION_DURATION); + + InitRelatedParent(GetParent()); + if (IsRelatedEventEnable()) { + auto navigationContainer = AceType::DynamicCast(relatedParent_.Upgrade()); + if (navigationContainer) { + navigationContainer->SetCollapsingNavigationBar(AceType::Claim(this)); + } + } +} + +void RenderCollapsingNavigationBar::ScrollBy(double dy, double maxPosition) +{ + lastUpScroll_ = GreatNotEqual(dy, 0.0) ? false : true; + positionY_.value += dy; + if (LessNotEqual(positionY_.value, -scrollableHeight_)) { + positionY_.value = -scrollableHeight_; + } else if (GreatNotEqual(positionY_.value, maxPosition)) { + positionY_.value = maxPosition; + } + + if (titleChangedCallback_) { + if (GreatNotEqual(positionY_.value, positionY_.expand)) { + titleSize_.value = titleSize_.expand + positionY_.value * titleSize_.biggerDis / positionY_.bigger; + } else { + titleSize_.value = titleSize_.expand - positionY_.value * titleSize_.expandDis / positionY_.collapse; + } + titleChangedCallback_(titleSize_.value); + } + if (subtitleChangedCallback_ && LessNotEqual(positionY_.value, positionY_.expand)) { + subtitleOpacity_.value = + subtitleOpacity_.expand + positionY_.value * subtitleOpacity_.expandDis / scrollableHeight_; + subtitleChangedCallback_(subtitleOpacity_.value); + } + MarkNeedLayout(); +} + +void RenderCollapsingNavigationBar::HandleDragStart(const DragStartInfo& info) {} + +void RenderCollapsingNavigationBar::HandleDragUpdate(const DragUpdateInfo& info) +{ + double mainDelta = info.GetMainDelta(); + bool canExpand = GreatNotEqual(mainDelta, 0.0) && LessNotEqual(positionY_.value, positionY_.expand); + if (!NeedHidden(mainDelta) && !canExpand) { + return; + } + ScrollBy(mainDelta, positionY_.expand); +} + +void RenderCollapsingNavigationBar::HandleDragEnd() +{ + if (GreatNotEqual(positionY_.value, positionY_.expand)) { + PrepareTitleSizeTranslate(titleSize_.value, titleSize_.expand); + PrepareSubtitleSizeTranslate(subtitleOpacity_.value, subtitleOpacity_.expand); + PreparePositionTranslate(positionY_.value, positionY_.expand); + controller_->Forward(); + } else if (GreatNotEqual(positionY_.value, positionY_.collapse) && !NearZero(positionY_.value)) { + if (lastUpScroll_) { + PrepareTitleSizeTranslate(titleSize_.value, titleSize_.collapse); + PrepareSubtitleSizeTranslate(subtitleOpacity_.value, subtitleOpacity_.collapse); + PreparePositionTranslate(positionY_.value, positionY_.collapse); + controller_->Forward(); + } else { + PrepareTitleSizeTranslate(titleSize_.value, titleSize_.expand); + PrepareSubtitleSizeTranslate(subtitleOpacity_.value, subtitleOpacity_.expand); + PreparePositionTranslate(positionY_.value, positionY_.expand); + controller_->Forward(); + } + } +} + +void RenderCollapsingNavigationBar::PrepareTitleSizeTranslate(double expand, double collapse) +{ + if (!titleChangedCallback_) { + return; + } + titleSizeTranslate_ = AceType::MakeRefPtr>(expand, collapse, Curves::FRICTION); + auto weak = AceType::WeakClaim(this); + titleSizeTranslate_->AddListener(Animation::ValueCallback([weak](double value) { + auto bar = weak.Upgrade(); + if (bar) { + bar->titleChangedCallback_(value); + } + })); + controller_->AddInterpolator(titleSizeTranslate_); +} + +void RenderCollapsingNavigationBar::PrepareSubtitleSizeTranslate(double expand, double collapse) +{ + if (!subtitleChangedCallback_) { + return; + } + subtitleSizeTranslate_ = AceType::MakeRefPtr>(expand, collapse, Curves::FRICTION); + auto weak = AceType::WeakClaim(this); + subtitleSizeTranslate_->AddListener(Animation::ValueCallback([weak](double value) { + auto bar = weak.Upgrade(); + if (bar) { + bar->subtitleChangedCallback_(value); + } + })); + controller_->AddInterpolator(subtitleSizeTranslate_); +} + +void RenderCollapsingNavigationBar::PreparePositionTranslate(double expand, double collapse) +{ + positionTranslate_ = AceType::MakeRefPtr>(expand, collapse, Curves::FRICTION); + auto weak = AceType::WeakClaim(this); + positionTranslate_->AddListener(Animation::ValueCallback([weak](double value) { + auto bar = weak.Upgrade(); + if (bar) { + bar->positionY_.value = value; + bar->MarkNeedLayout(); + } + })); + controller_->AddInterpolator(positionTranslate_); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/navigation_bar/render_collapsing_navigation_bar.h b/frameworks/core/components/navigation_bar/render_collapsing_navigation_bar.h new file mode 100644 index 00000000..b8e3176a --- /dev/null +++ b/frameworks/core/components/navigation_bar/render_collapsing_navigation_bar.h @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NAVIGATION_BAR_RENDER_COLLAPSING_NAVIGATION_BAR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NAVIGATION_BAR_RENDER_COLLAPSING_NAVIGATION_BAR_H + +#include "core/animation/animation.h" +#include "core/animation/animator.h" +#include "core/gestures/drag_recognizer.h" +#include "core/pipeline/base/related_node.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +using ValueChangedCallback = std::function; +class RenderCollapsingNavigationBar : public RenderNode, public RelatedChild { + DECLARE_ACE_TYPE(RenderCollapsingNavigationBar, RenderNode); + +public: + static RefPtr Create(); + void Update(const RefPtr& component) override; + void PerformLayout() override; + double GetPositionY() const + { + return positionY_.value; + } + void OnRelatedStart(); + void OnRelatedPreScroll(const Offset& delta, Offset& consumed); + void OnRelatedScroll(const Offset& delta, Offset& consumed); + void OnRelatedEnd(); + +protected: + void OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) override; + +private: + void Initialize(const WeakPtr& context); + void AttachToContainer(); + void ScrollBy(double dy, double maxPosition); + void HandleDragStart(const DragStartInfo& info); + void HandleDragUpdate(const DragUpdateInfo& info); + void HandleDragEnd(); + void PrepareTitleSizeTranslate(double expand, double collapse); + void PrepareSubtitleSizeTranslate(double expand, double collapse); + void PreparePositionTranslate(double expand, double collapse); + + bool NeedHidden(double dy) + { + return !NearZero(dy) && LessNotEqual(dy, 0.0) && LessNotEqual(-positionY_.value, scrollableHeight_); + } + + bool NeedShow(double dy) + { + bool canExpand = GreatNotEqual(dy, 0.0) && LessNotEqual(positionY_.value, positionY_.bigger); + bool needRestore = LessNotEqual(dy, 0.0) && GreatNotEqual(positionY_.value, positionY_.expand); + return !NearZero(dy) && (canExpand || needRestore); + } + + bool relateEvent_ = false; + double dipScale_ = 0.0; + bool lastUpScroll_ = true; + Dimension minHeight_; + double scrollableHeight_ = 0.0; + + struct ChangedKeyframe { + ChangedKeyframe() = default; + ChangedKeyframe(double collapse, double expand, double bigger) + : collapse(collapse), expand(expand), bigger(bigger), value(expand), expandDis(expand - collapse), + biggerDis(bigger - expand) + {} + ~ChangedKeyframe() = default; + double collapse = 0.0; + double expand = 0.0; + double bigger = 0.0; + double value = 0.0; + double expandDis = 0.0; + double biggerDis = 0.0; + void Update(double collapseValue, double expandValue, double biggerValue = 0.0) + { + collapse = collapseValue; + expand = expandValue; + bigger = biggerValue; + expandDis = expand - collapse; + biggerDis = bigger - expand; + } + }; + ChangedKeyframe titleSize_; + ChangedKeyframe subtitleOpacity_; + ChangedKeyframe positionY_; + ChangedKeyframe titlePositionY_; + RefPtr dragRecognizer_; + RefPtr controller_; + RefPtr> positionTranslate_; + RefPtr> titleSizeTranslate_; + RefPtr> subtitleSizeTranslate_; + ValueChangedCallback titleChangedCallback_; + ValueChangedCallback subtitleChangedCallback_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NAVIGATION_BAR_RENDER_COLLAPSING_NAVIGATION_BAR_H diff --git a/frameworks/core/components/navigation_bar/render_navigation_container.cpp b/frameworks/core/components/navigation_bar/render_navigation_container.cpp new file mode 100644 index 00000000..8fe067d1 --- /dev/null +++ b/frameworks/core/components/navigation_bar/render_navigation_container.cpp @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/navigation_bar/render_navigation_container.h" + +#include "core/animation/curve_animation.h" + +namespace OHOS::Ace { + +RefPtr RenderNavigationContainer::Create() +{ + return AceType::MakeRefPtr(); +} + +void RenderNavigationContainer::PerformLayout() +{ + auto layoutParam = GetLayoutParam(); + double usedHeight = collapsingNavigationBar_ ? collapsingNavigationBar_->GetPositionY() : 0.0; + double maxWidth = layoutParam.GetMaxSize().Width(); + double maxHeight = layoutParam.GetMaxSize().Height(); + for (const auto& child : GetChildren()) { + layoutParam.SetMaxSize(Size(maxWidth, maxHeight - usedHeight)); + child->Layout(layoutParam); + child->SetPosition(Offset(0.0, usedHeight)); + usedHeight += child->GetLayoutSize().Height(); + } + SetLayoutSize(GetLayoutParam().GetMaxSize()); +} + +void RenderNavigationContainer::OnRelatedStart() +{ + if (collapsingNavigationBar_) { + collapsingNavigationBar_->OnRelatedStart(); + } +} + +void RenderNavigationContainer::OnRelatedPreScroll(const Offset& delta, Offset& consumed) +{ + if (collapsingNavigationBar_) { + collapsingNavigationBar_->OnRelatedPreScroll(delta, consumed); + } +} + +void RenderNavigationContainer::OnRelatedScroll(const Offset& delta, Offset& consumed) +{ + if (collapsingNavigationBar_) { + collapsingNavigationBar_->OnRelatedScroll(delta, consumed); + } +} + +void RenderNavigationContainer::OnRelatedEnd() +{ + if (collapsingNavigationBar_) { + collapsingNavigationBar_->OnRelatedEnd(); + } +} +} // namespace OHOS::Ace diff --git a/frameworks/core/components/navigation_bar/render_navigation_container.h b/frameworks/core/components/navigation_bar/render_navigation_container.h new file mode 100644 index 00000000..61debe1f --- /dev/null +++ b/frameworks/core/components/navigation_bar/render_navigation_container.h @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NAVIGATION_BAR_RENDER_NAVIGATION_CONTAINER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NAVIGATION_BAR_RENDER_NAVIGATION_CONTAINER_H + +#include "core/animation/animation.h" +#include "core/animation/animator.h" +#include "core/components/navigation_bar/render_collapsing_navigation_bar.h" +#include "core/gestures/raw_recognizer.h" +#include "core/pipeline/base/related_node.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderNavigationContainer : public RenderNode, public RelatedContainer { + DECLARE_ACE_TYPE(RenderNavigationContainer, RenderNode, RelatedContainer); + +public: + static RefPtr Create(); + void Update(const RefPtr& component) override {}; + void PerformLayout() override; + void OnRelatedStart() override; + void OnRelatedPreScroll(const Offset& delta, Offset& consumed) override; + void OnRelatedScroll(const Offset& delta, Offset& consumed) override; + void OnRelatedEnd() override; + void SetCollapsingNavigationBar(const RefPtr& collapsingNavigationBar) + { + collapsingNavigationBar_ = collapsingNavigationBar; + } + +private: + RefPtr collapsingNavigationBar_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NAVIGATION_BAR_RENDER_NAVIGATION_CONTAINER_H diff --git a/frameworks/core/components/navigator/BUILD.gn b/frameworks/core/components/navigator/BUILD.gn new file mode 100644 index 00000000..8bfdb550 --- /dev/null +++ b/frameworks/core/components/navigator/BUILD.gn @@ -0,0 +1,22 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("navigator") { + sources = [ + "navigator_component.cpp", + "navigator_element.cpp", + "render_navigator.cpp", + ] +} diff --git a/frameworks/core/components/navigator/navigator_component.cpp b/frameworks/core/components/navigator/navigator_component.cpp new file mode 100644 index 00000000..073f78fe --- /dev/null +++ b/frameworks/core/components/navigator/navigator_component.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/navigator/navigator_component.h" + +#include "core/components/navigator/navigator_element.h" +#include "core/components/navigator/render_navigator.h" + +namespace OHOS::Ace { + +RefPtr NavigatorComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +RefPtr NavigatorComponent::CreateRenderNode() +{ + return RenderNavigator::Create(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/navigator/navigator_component.h b/frameworks/core/components/navigator/navigator_component.h new file mode 100644 index 00000000..7268c7f4 --- /dev/null +++ b/frameworks/core/components/navigator/navigator_component.h @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NAVIGATOR_NAVIGATOR_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NAVIGATOR_NAVIGATOR_COMPONENT_H + +#include + +#include "base/utils/macros.h" +#include "core/pipeline/base/sole_child_component.h" + +namespace OHOS::Ace { + +enum class NavigatorType { + DEFAULT = 0, + PUSH, + REPLACE, + BACK +}; + +class ACE_EXPORT NavigatorComponent : public SoleChildComponent { + DECLARE_ACE_TYPE(NavigatorComponent, SoleChildComponent); + +public: + explicit NavigatorComponent(const RefPtr& child) : SoleChildComponent(child) {}; + ~NavigatorComponent() override = default; + + RefPtr CreateRenderNode() override; + RefPtr CreateElement() override; + + std::string GetUri() const + { + return uri_; + } + + void SetUri(const std::string& uri) + { + uri_ = uri; + } + + NavigatorType GetType() const + { + return type_; + } + + void SetType(NavigatorType type) + { + type_ = type; + } + + bool GetActive() const + { + return active_; + } + + void SetActive(bool active) + { + active_ = active; + } + +private: + std::string uri_; + NavigatorType type_ = NavigatorType::DEFAULT; + bool active_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NAVIGATOR_NAVIGATOR_COMPONENT_H diff --git a/frameworks/core/components/navigator/navigator_element.cpp b/frameworks/core/components/navigator/navigator_element.cpp new file mode 100644 index 00000000..724835e6 --- /dev/null +++ b/frameworks/core/components/navigator/navigator_element.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/navigator/navigator_element.h" + +#include "core/components/navigator/render_navigator.h" + +namespace OHOS::Ace { + +void NavigatorElement::PerformBuild() +{ + SoleChildElement::PerformBuild(); +} + +void NavigatorElement::OnClick() +{ + auto renderNode = AceType::DynamicCast(renderNode_); + renderNode->NavigatePage(); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/navigator/navigator_element.h b/frameworks/core/components/navigator/navigator_element.h new file mode 100644 index 00000000..62e9ddcf --- /dev/null +++ b/frameworks/core/components/navigator/navigator_element.h @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NAVIGATOR_NAVIGATOR_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NAVIGATOR_NAVIGATOR_ELEMENT_H + +#include "core/components/navigator/navigator_component.h" +#include "core/focus/focus_node.h" + +namespace OHOS::Ace { + +class NavigatorElement : public SoleChildElement, public FocusNode { + DECLARE_ACE_TYPE(NavigatorElement, SoleChildElement, FocusNode); + +public: + void PerformBuild() override; + +private: + void OnClick() override; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NAVIGATOR_NAVIGATOR_ELEMENT_H diff --git a/frameworks/core/components/navigator/render_navigator.cpp b/frameworks/core/components/navigator/render_navigator.cpp new file mode 100644 index 00000000..fe485b47 --- /dev/null +++ b/frameworks/core/components/navigator/render_navigator.cpp @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/navigator/render_navigator.h" + +#include "core/event/ace_event_helper.h" + +namespace OHOS::Ace { + +RenderNavigator::RenderNavigator() +{ + Initialize(); +} + +RefPtr RenderNavigator::Create() +{ + return AceType::MakeRefPtr(); +} + +void RenderNavigator::Initialize() +{ + auto wp = AceType::WeakClaim(this); + clickRecognizer_ = AceType::MakeRefPtr(); + clickRecognizer_->SetOnClick([wp](const ClickInfo&) { + auto navigator = wp.Upgrade(); + if (navigator) { + LOGI("navigator OnClick called"); + navigator->NavigatePage(); + } + }); +} + +void RenderNavigator::NavigatePage() +{ + auto pipelineContext = GetContext().Upgrade(); + if (!pipelineContext) { + LOGE("pipelineContext is null"); + return; + } + pipelineContext->NavigatePage(static_cast(type_), uri_); +} + +void RenderNavigator::Update(const RefPtr& component) +{ + const RefPtr navigator = AceType::DynamicCast(component); + if (navigator) { + LOGI("navigator Update uri = %{public}s", navigator->GetUri().c_str()); + uri_ = navigator->GetUri(); + type_ = navigator->GetType(); + active_ = navigator->GetActive(); + } + if (active_ == true) { + NavigatePage(); + } + MarkNeedLayout(); +} + +void RenderNavigator::PerformLayout() +{ + LOGD("RenderNavigator PerformLayout"); + if (!GetChildren().empty()) { + auto child = GetChildren().front(); + child->Layout(GetLayoutParam()); + SetLayoutSize(child->GetLayoutSize()); + } +} + +void RenderNavigator::OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) +{ + if (!clickRecognizer_) { + return; + } + result.emplace_back(clickRecognizer_); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/navigator/render_navigator.h b/frameworks/core/components/navigator/render_navigator.h new file mode 100644 index 00000000..dd6e297e --- /dev/null +++ b/frameworks/core/components/navigator/render_navigator.h @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NAVIGATOR_RENDER_NAVIGATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NAVIGATOR_RENDER_NAVIGATOR_H + +#include "core/components/navigator/navigator_component.h" +#include "core/gestures/click_recognizer.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderNavigator : public RenderNode { + DECLARE_ACE_TYPE(RenderNavigator, RenderNode); + +public: + RenderNavigator(); + ~RenderNavigator() override = default; + + static RefPtr Create(); + + void Update(const RefPtr& component) override; + + void PerformLayout() override; + + void NavigatePage(); + +private: + void OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) override; + void Initialize(); + + RefPtr clickRecognizer_; + + std::string uri_; + NavigatorType type_ = NavigatorType::DEFAULT; + bool active_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_NAVIGATOR_RENDER_NAVIGATOR_H diff --git a/frameworks/core/components/option/BUILD.gn b/frameworks/core/components/option/BUILD.gn new file mode 100644 index 00000000..530bebe1 --- /dev/null +++ b/frameworks/core/components/option/BUILD.gn @@ -0,0 +1,23 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("option") { + sources = [ + "flutter_render_option.cpp", + "option_component.cpp", + "option_element.cpp", + "render_option.cpp", + ] +} diff --git a/frameworks/core/components/option/flutter_render_option.cpp b/frameworks/core/components/option/flutter_render_option.cpp new file mode 100644 index 00000000..cf24feb1 --- /dev/null +++ b/frameworks/core/components/option/flutter_render_option.cpp @@ -0,0 +1,111 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/option/flutter_render_option.h" + +#include "core/pipeline/base/scoped_canvas_state.h" + +namespace OHOS::Ace { +namespace { + +const Dimension ROUND_RADIUS_PHONE = 12.0_vp; +const Dimension ROUND_RADIUS_TV = 8.0_vp; + +} // namespace + +RefPtr RenderOption::Create() +{ + return AceType::MakeRefPtr(); +} + +void FlutterRenderOption::Paint(RenderContext& context, const Offset& offset) +{ + PaintBackground(context, offset); + PaintLine(context, offset); + RenderNode::Paint(context, offset); +} + +void FlutterRenderOption::PaintBackground(RenderContext& context, const Offset& offset) +{ + auto canvas = ScopedCanvas::Create(context); + + auto size = GetLayoutSize(); + double radius = NormalizeToPx((isTv_ ? ROUND_RADIUS_TV : ROUND_RADIUS_PHONE)); + double diff = 0.0; + if (data_ && data_->GetTheme()) { + auto theme = data_->GetTheme(); + diff = NormalizeToPx(theme->GetOptionInterval()); + } + + + fml::RefPtr path = flutter::CanvasPath::Create(); + auto tempRect = SkRect::MakeXYWH(offset.GetX() + diff, offset.GetY() + diff, + size.Width() - 2.0 * diff, size.Height() - 2.0 * diff); + auto skRRect = SkRRect::MakeRectXY(tempRect, radius, radius); + flutter::RRect rrect; + rrect.sk_rrect = skRRect; + rrect.is_null = false; + path->addRRect(rrect); + + flutter::Paint paint; + flutter::PaintData paintData; + paint.paint()->setARGB(backColor_.GetAlpha(), + backColor_.GetRed(), backColor_.GetGreen(), backColor_.GetBlue()); + canvas->drawPath(path.get(), paint, paintData); + paint.paint()->setColor(GetEventEffectColor().GetValue()); + canvas->drawPath(path.get(), paint, paintData); +} + +void FlutterRenderOption::PaintLine(RenderContext& context, const Offset& offset) +{ + if (isTv_) { + return; + } + + if (!needLine_) { + return; + } + + auto text = GetRenderText(AceType::Claim(this)); + if (!text) { + return; + } + + auto thisOffset = GetGlobalOffset(); + auto textOffset = text->GetGlobalOffset(); + double left = textOffset.GetX() - thisOffset.GetX(); + double right = left + text->GetLayoutSize().Width(); + double top = 0.0; + double bottom = 1.0; // line width is 1.0px + + left += offset.GetX(); + right += offset.GetX(); + top += offset.GetY(); + bottom += offset.GetY(); + + auto canvas = ScopedCanvas::Create(context); + + fml::RefPtr path = flutter::CanvasPath::Create(); + path->addRect(static_cast(left), static_cast(top), + static_cast(right), static_cast(bottom)); + + flutter::Paint paint; + paint.paint()->setARGB(lineColor_.GetAlpha(), lineColor_.GetRed(), lineColor_.GetGreen(), lineColor_.GetBlue()); + flutter::PaintData paintData; + canvas->drawPath(path.get(), paint, paintData); + +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/option/flutter_render_option.h b/frameworks/core/components/option/flutter_render_option.h new file mode 100644 index 00000000..9c93fb79 --- /dev/null +++ b/frameworks/core/components/option/flutter_render_option.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_OPTION_FLUTTER_RENDER_OPTION_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_OPTION_FLUTTER_RENDER_OPTION_H + +#include "core/components/option/render_option.h" + +namespace OHOS::Ace { + +class FlutterRenderOption final : public RenderOption { + DECLARE_ACE_TYPE(FlutterRenderOption, RenderOption); + +public: + FlutterRenderOption() = default; + ~FlutterRenderOption() override = default; + + void Paint(RenderContext& context, const Offset& offset) override; + + void PaintLine(RenderContext& context, const Offset& offset); + void PaintBackground(RenderContext& context, const Offset& offset); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_OPTION_FLUTTER_RENDER_OPTION_H diff --git a/frameworks/core/components/option/option_component.cpp b/frameworks/core/components/option/option_component.cpp new file mode 100644 index 00000000..fc414553 --- /dev/null +++ b/frameworks/core/components/option/option_component.cpp @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/option/option_component.h" + +#include "base/utils/string_utils.h" +#include "base/utils/system_properties.h" +#include "core/components/box/box_component.h" +#include "core/components/common/properties/text_style.h" +#include "core/components/flex/flex_item_component.h" +#include "core/components/image/image_component.h" +#include "core/components/list/list_component.h" +#include "core/components/option/option_element.h" +#include "core/components/option/render_option.h" +#include "core/components/positioned/positioned_component.h" +#include "core/components/select/select_theme.h" + +namespace OHOS::Ace { +namespace { + +constexpr uint32_t SELECT_OPTION_TEXT_LINES = 2; +constexpr double MIN_TEXT_SIZE_TV = 14.0; +constexpr double MIN_TEXT_SIZE_PHONE = 9.0; + +} // namespace + +void OptionComponent::InitTheme(const RefPtr& themeManager) +{ + if (!themeManager) { + return; + } + auto selectTheme = themeManager->GetTheme(); + if (!selectTheme) { + return; + } + theme_ = selectTheme->clone(); + theme_->SetFontWeight(FontWeight::W400); +} + +bool OptionComponent::Initialize(const RefPtr& manager) +{ + if (!text_ || value_.empty()) { + LOGW("can not initialize now, text null or value empty."); + return false; + } + + ClearChildren(); + + if (icon_) { + icon_->SetImageFit(ImageFit::SCALEDOWN); + icon_->SetAlignment((SystemProperties::GetDeviceType() == DeviceType::TV ? + Alignment::CENTER : Alignment::CENTER_LEFT)); + icon_->SetWidth(24.0_vp); // icon is only for phone which is fixes size 24dp*24dp + icon_->SetHeight(24.0_vp); + AppendChild(icon_); + } + + TextStyle textStyle = text_->GetTextStyle(); + std::vector fontFamilies; + StringUtils::StringSpliter(GetFontFamily(), ',', fontFamilies); + if (!fontFamilies.empty()) { + textStyle.SetFontFamilies(fontFamilies); + } + textStyle.SetFontSize(GetFontSize()); + textStyle.SetFontWeight(GetFontWeight()); + textStyle.SetTextDecoration(GetTextDecoration()); + if (GetDisabled() && theme_) { + textStyle.SetTextColor(theme_->GetFocusedTextDisableColor()); + } else if (GetSelected() && theme_) { + textStyle.SetTextColor(theme_->GetSelectedColorText()); + } else { + textStyle.SetTextColor(GetFontColor()); + } + textStyle.SetAllowScale(IsAllowScale()); + double minFontSize = (SystemProperties::GetDeviceType() == DeviceType::TV ? + MIN_TEXT_SIZE_TV : MIN_TEXT_SIZE_PHONE); + textStyle.SetAdaptTextSize(textStyle.GetFontSize(), Dimension(minFontSize, DimensionUnit::FP)); + if (SystemProperties::GetDeviceType() == DeviceType::TV) { + textStyle.SetTextAlign(TextAlign::CENTER); + } else if (GetTextDirection() == TextDirection::RTL) { + textStyle.SetTextAlign(TextAlign::RIGHT); + } else { + textStyle.SetTextAlign(TextAlign::LEFT); + } + // use single line, do not change line. + textStyle.SetMaxLines(SELECT_OPTION_TEXT_LINES); + textStyle.SetTextOverflow(TextOverflow::ELLIPSIS); + text_->SetTextStyle(textStyle); + text_->SetFocusColor(textStyle.GetTextColor()); + AppendChild(text_); + + SetNode((!manager ? nullptr + : manager->CreateAccessibilityNode("option", StringUtils::StringToInt(GetId()), GetParentId(), -1))); +#if defined(WINDOWS_PLATFORM) || defined(MAC_PLATFORM) + if (node_) { + node_->SetAttr(GetAttr()); + node_->SetStyle(GetStyle()); + } +#endif + return true; +} + +void OptionComponent::CheckOptionModify() +{ + if (!text_) { + LOGE("text is null of option component."); + return; + } + if (!modifiedCallback_) { + LOGE("modify callback of option component is null."); + return; + } + if (text_->GetData() == lastText_) { + return; + } + modifiedCallback_(GetIndex()); + lastText_ = text_->GetData(); +} + +RefPtr OptionComponent::CreateRenderNode() +{ + return RenderOption::Create(); +} + +RefPtr OptionComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/option/option_component.h b/frameworks/core/components/option/option_component.h new file mode 100644 index 00000000..68a4c7b7 --- /dev/null +++ b/frameworks/core/components/option/option_component.h @@ -0,0 +1,379 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_OPTION_OPTION_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_OPTION_OPTION_COMPONENT_H + +#include "core/accessibility/accessibility_manager.h" +#include "core/components/box/box_component.h" +#include "core/components/common/properties/color.h" +#include "core/components/flex/flex_component.h" +#include "core/components/image/image_component.h" +#include "core/components/select/select_theme.h" +#include "core/components/text/text_component.h" +#include "core/pipeline/base/component_group.h" + +namespace OHOS::Ace { + +enum class ShowInNavigationBar { + SHOW = 0, + POPUP, +}; + +class OptionComponent : public ComponentGroup { + DECLARE_ACE_TYPE(OptionComponent, ComponentGroup); + +public: + OptionComponent() = default; + ~OptionComponent() override = default; + + RefPtr CreateRenderNode() override; + RefPtr CreateElement() override; + + void InitTheme(const RefPtr& themeManager); + + const RefPtr& GetIcon() const + { + return icon_; + } + void SetIcon(const RefPtr& icon) + { + icon_ = icon; + } + + const RefPtr& GetText() const + { + return text_; + } + void SetText(const RefPtr& text) + { + text_ = text; + CheckOptionModify(); + } + + bool GetSelected() const + { + if (!selectable_) { + return false; + } + return selected_; + } + void SetSelected(bool selected) + { + if (!selectable_) { + selected_ = false; + } else { + selected_ = selected; + } + } + + bool GetClicked() const + { + return clicked_; + } + void SetClicked(bool clicked) + { + clicked_ = clicked; + } + + bool GetFocused() const + { + return focused_; + } + void SetFocused(bool value) + { + focused_ = value; + } + + bool GetHovered() const + { + return hovered_; + } + void SetHovered(bool value) + { + hovered_ = value; + } + + bool GetFocusable() const + { + return focusable_; + } + void SetFocusable(bool value) + { + focusable_ = value; + } + + bool GetVisible() const + { + return visible_; + } + void SetVisible(bool value) + { + visible_ = value; + } + + std::string GetValue() const + { + return value_; + } + void SetValue(const std::string& value) + { + value_ = value; + } + + const Color& GetClickedColor() const + { + return theme_->GetClickedColor(); + } + void SetClickedColor(const Color& clickedColor) + { + theme_->SetClickedColor(clickedColor); + } + + const Color& GetSelectedColor() const + { + return theme_->GetSelectedColor(); + } + void SetSelectedColor(const Color& selectedColor) + { + theme_->SetSelectedColor(selectedColor); + } + + const Color& GetFontColor() const + { + return theme_->GetFontColor(); + } + void SetFontColor(const Color& fontColor) + { + theme_->SetFontColor(fontColor); + } + + FontWeight GetFontWeight() const + { + return theme_->GetFontWeight(); + } + void SetFontWeight(FontWeight fontWeight) + { + theme_->SetFontWeight(fontWeight); + } + + const std::string& GetFontFamily() const + { + return theme_->GetFontFamily(); + } + void SetFontFamily(const std::string& fontFamily) + { + theme_->SetFontFamily(fontFamily); + } + + TextDecoration GetTextDecoration() const + { + return theme_->GetTextDecoration(); + } + void SetTextDecoration(TextDecoration textDecoration) + { + theme_->SetTextDecoration(textDecoration); + } + + const Dimension& GetFontSize() const + { + return theme_->GetFontSize(); + } + void SetFontSize(const Dimension& fontSize) + { + theme_->SetFontSize(fontSize); + } + + const std::function& GetClickedCallback() const + { + return clickedCallback_; + } + + void SetClickedCallback(const std::function& clickedCallback) + { + clickedCallback_ = clickedCallback; + } + + void SetModifiedCallback(const std::function& value) + { + modifiedCallback_ = value; + } + + std::size_t GetIndex() const + { + return index_; + } + void SetIndex(std::size_t index) + { + index_ = index; + } + + bool GetSelectable() const + { + return selectable_; + } + void SetSelectable(bool selectable) + { + selectable_ = selectable; + if (!selectable) { + selected_ = false; + } + } + + ShowInNavigationBar GetShowInNavigationBar() const + { + return showInNavigationBar_; + } + + void SetShowInNavigationBar(ShowInNavigationBar showInNavigationBar) + { + showInNavigationBar_ = showInNavigationBar; + } + + bool Initialize(const RefPtr& manager); + + const ComposeId& GetId() const + { + return id_; + } + + void SetId(const ComposeId& id) + { + id_ = id; + } + + bool IsAllowScale() const + { + return theme_->IsAllowScale(); + } + + void SetAllowScale(bool allowScale) + { + theme_->SetAllowScale(allowScale); + } + + const RefPtr& GetTheme() const + { + return theme_; + } + + const RefPtr GetNode() const + { + return node_; + } + + void SetNode(const RefPtr& value) + { + node_ = value; + } + + int32_t GetParentId() const + { + return parentId_; + } + + void SetParentId(int32_t value) + { + parentId_ = value; + } + + void SetDisabled(bool disable) + { + disabled_ = disable; + } + + bool GetDisabled() const + { + return disabled_; + } + + void SetClickEvent(const EventMarker& clickEvent) + { + clickEvent_ = clickEvent; + } + + const EventMarker& GetClickEvent() const + { + return clickEvent_; + } + + void SetClickEventForToolBarItem(const EventMarker& clickEventForToolBarItem) + { + clickEventForToolBarItem_ = clickEventForToolBarItem; + } + + const EventMarker& GetClickEventForToolBarItem() const + { + return clickEventForToolBarItem_; + } + + // used for inspector node in PC preview + void SetAttr(const std::vector>& attrs) + { + attrs_ = attrs; + } + + // used for inspector node in PC preview + void SetStyle(const std::vector>& styles) + { + styles_ = styles; + } + +private: + // used for inspector node in PC preview + const std::vector> GetAttr() + { + return attrs_; + } + + // used for inspector node in PC preview + const std::vector> GetStyle() + { + return styles_; + } + + void CheckOptionModify(); + + // used for inspector node in PC preview + std::vector> attrs_; + std::vector> styles_; + RefPtr icon_; + RefPtr text_; + bool selected_ = false; + bool clicked_ = false; + bool focused_ = false; + bool hovered_ = false; + bool selectable_ = true; + std::string value_; + ShowInNavigationBar showInNavigationBar_ = ShowInNavigationBar::SHOW; + RefPtr theme_; + std::size_t index_ = SELECT_INVALID_INDEX; + std::function clickedCallback_; + std::function modifiedCallback_; + std::string lastText_; + ComposeId id_; + EventMarker clickEvent_; + EventMarker clickEventForToolBarItem_; + + RefPtr node_; + int32_t parentId_ = -1; + bool disabled_ = false; + bool visible_ = true; + bool focusable_ = true; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_OPTION_OPTION_COMPONENT_H diff --git a/frameworks/core/components/option/option_element.cpp b/frameworks/core/components/option/option_element.cpp new file mode 100644 index 00000000..b43a5eee --- /dev/null +++ b/frameworks/core/components/option/option_element.cpp @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/option/option_element.h" + +#include "base/utils/system_properties.h" +#include "core/components/list/list_component.h" +#include "core/components/option/option_component.h" +#include "core/components/option/render_option.h" +#include "core/components/scroll/render_scroll.h" +#include "core/components/select/select_component.h" +#include "core/components/select_popup/render_select_popup.h" +#include "core/components/stack/render_stack.h" +#include "core/components/stack/stack_element.h" +#include "core/gestures/click_recognizer.h" + +namespace OHOS::Ace { + +void OptionElement::PerformBuild() +{ + LOGD("OptionElement::PerformBuild"); + RefPtr component = AceType::DynamicCast(component_); + auto context = context_.Upgrade(); + if (!component || !context || !context->GetAccessibilityManager()) { + LOGE("select: can not get component of select option in perform build."); + } else { + if (!component->Initialize(context->GetAccessibilityManager())) { + LOGE("select: initialize of option failed."); + } + SetFocusable(component->GetFocusable()); + } + ComponentGroupElement::PerformBuild(); + + RefPtr render = AceType::DynamicCast(renderNode_); + if (!render) { + return; + } + WeakPtr weakNode = AceType::WeakClaim(this); + render->SetWeakNode(weakNode); +} + +bool OptionElement::OnKeyEvent(const KeyEvent& keyEvent) +{ + if (!((keyEvent.code == KeyCode::KEYBOARD_BACK || keyEvent.code == KeyCode::KEYBOARD_ESCAPE) && + keyEvent.action == KeyAction::UP)) { + return false; + } + + RefPtr render = AceType::DynamicCast(renderNode_); + if (!render) { + LOGE("select: can not dynamic from render node to render select option."); + return false; + } + return render->OnBack(); +} + +void OptionElement::OnFocus() +{ + RefPtr render = AceType::DynamicCast(renderNode_); + if (!render) { + LOGE("select: can not dynamic from render node to render select option."); + return; + } + render->OnFocus(true); +} + +void OptionElement::OnClick() +{ + RefPtr render = AceType::DynamicCast(renderNode_); + if (!render) { + LOGE("select: can not dynamic from render node to render select option."); + return; + } + render->OnClick(true); +} + +void OptionElement::OnBlur() +{ + RefPtr render = AceType::DynamicCast(renderNode_); + if (!render) { + LOGE("select: can not dynamic from render node to render select option."); + return; + } + render->OnFocus(false); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/option/option_element.h b/frameworks/core/components/option/option_element.h new file mode 100644 index 00000000..99f29c09 --- /dev/null +++ b/frameworks/core/components/option/option_element.h @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_OPTION_OPTION_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_OPTION_OPTION_ELEMENT_H + +#include "core/components/text/render_text.h" +#include "core/components/text/text_component.h" +#include "core/pipeline/base/component_group_element.h" + +namespace OHOS::Ace { + +class OptionElement : public ComponentGroupElement, public FocusNode { + DECLARE_ACE_TYPE(OptionElement, ComponentGroupElement, FocusNode); + +public: + void PerformBuild() override; + +protected: + bool OnKeyEvent(const KeyEvent& keyEvent) override; + void OnFocus() override; + void OnClick() override; + void OnBlur() override; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_OPTION_OPTION_ELEMENT_H diff --git a/frameworks/core/components/option/render_option.cpp b/frameworks/core/components/option/render_option.cpp new file mode 100644 index 00000000..7416d846 --- /dev/null +++ b/frameworks/core/components/option/render_option.cpp @@ -0,0 +1,742 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/option/render_option.h" + +#include "base/log/log.h" +#include "base/utils/string_utils.h" +#include "base/utils/system_properties.h" +#include "core/components/scroll/render_scroll.h" +#include "core/components/select_popup/render_select_popup.h" +#include "core/event/ace_event_helper.h" + +namespace OHOS::Ace { +namespace { + +const Dimension VERTICAL_INTERVAL_PHONE = 14.4_vp; +const Dimension HORIZONTAL_INTERVAL_PHONE = 12.0_vp; +const Dimension HORIZONTAL_DISTANCE_PHONE = 8.0_vp; +const Dimension ROUND_RADIUS_PHONE = 12.0_vp; +const Dimension ROUND_RADIUS_TV = 8.0_vp; + +} // namespace + +RefPtr RenderOption::GetRenderText(const RefPtr& render) const +{ + if (!render) { + return nullptr; + } + if (AceType::InstanceOf(render)) { + return AceType::DynamicCast(render); + } + for (const auto& child : render->GetChildren()) { + auto text = GetRenderText(child); + if (text) { + return text; + } + } + return nullptr; +} + +RefPtr RenderOption::GetRenderImage(const RefPtr& render) const +{ + if (!render) { + return nullptr; + } + if (AceType::InstanceOf(render)) { + return AceType::DynamicCast(render); + } + for (const auto& child : render->GetChildren()) { + auto image = GetRenderImage(child); + if (image) { + return image; + } + } + return nullptr; +} + +bool RenderOption::OnBack() +{ + if (!data_) { + return false; + } + + auto clickCallback = data_->GetClickedCallback(); + if (!clickCallback) { + return false; + } + + clickCallback(SELECT_INVALID_INDEX); + return true; +} + +void RenderOption::OnFocus(bool focus) +{ + if (!data_) { + return; + } + + // lost focus => just update status. + if (!focus) { + data_->SetFocused(false); + UpdateStatus(); + return; + } + + // is not auto focus on popup dialog + if (data_->GetIndex() != 0 || focusJumped_) { + data_->SetFocused(true); + UpdateStatus(); + AdjustScrollPosition(); + return; + } + + // auto focus on popup dialog + focusJumped_ = true; + auto options = GetAllOptions(); + for (const auto& option : options) { + if (!option->GetSelected()) { + continue; + } + // auto focus on selected option. + if (AceType::RawPtr(option) == this) { + // auto jump to self which index is 0 and selected. + data_->SetFocused(true); + UpdateStatus(); + return; + } + option->RequestFocus(); + return; + } + + data_->SetFocused(true); + UpdateStatus(); +} + +void RenderOption::RequestFocus() +{ + auto node = weakNode_.Upgrade(); + if (!node) { + return; + } + node->RequestFocus(); +} + +void RenderOption::GetAllOptions(std::list>& result, const RefPtr& parent) const +{ + if (!parent) { + return; + } + + auto option = AceType::DynamicCast(parent); + if (option) { + result.emplace_back(option); + } + + for (const auto& child : parent->GetChildren()) { + GetAllOptions(result, child); + } +} + +std::list> RenderOption::GetAllOptions() const +{ + std::list> result; + RefPtr parent = GetParent().Upgrade(); + while (parent && !AceType::InstanceOf(parent)) { + parent = parent->GetParent().Upgrade(); + } + GetAllOptions(result, parent); + return result; +} + +void RenderOption::OnClick(bool focus) +{ + if (!data_ || data_->GetDisabled()) { + return; + } + + auto options = GetAllOptions(); + for (const auto& option : options) { + option->OnSelect(data_->GetIndex()); + } + + auto clickCallback = data_->GetClickedCallback(); + if (!clickCallback) { + return; + } + + clickCallback(data_->GetIndex()); + + if (onClickEvent_) { + onClickEvent_(); + } +} + +void RenderOption::OnSelect(uint32_t selectIndex) +{ + if (!data_) { + return; + } + + if (data_->GetIndex() == selectIndex) { + data_->SetClicked(false); + data_->SetSelected(true); + } else { + data_->SetSelected(false); + } + UpdateStatus(); +} + +void RenderOption::OnTouch(bool down) +{ + if (!data_ || data_->GetDisabled()) { + return; + } + + data_->SetClicked(down); + UpdateStatus(); + Color endColor; + if (down) { + endColor = clickedColor_; + } else if (data_ && data_->GetHovered()) { + endColor = hoveredColor_; + } else { + endColor = Color::TRANSPARENT; + } + PlayEventEffectAnimation(endColor, PRESS_DURATION); +} + +void RenderOption::OnMouseHoverEnterTest() +{ + if (!data_ || data_->GetDisabled()) { + return; + } + + data_->SetHovered(true); + UpdateStatus(); + PlayEventEffectAnimation(hoveredColor_, HOVER_DURATION); +} + +void RenderOption::OnMouseHoverExitTest() +{ + if (!data_ || data_->GetDisabled()) { + return; + } + + data_->SetHovered(false); + UpdateStatus(); + PlayEventEffectAnimation(Color::TRANSPARENT, HOVER_DURATION, true); +} + +void RenderOption::UpdateStatus() +{ + UpdateSelfStatus(); + UpdateDownStatus(); +} + +void RenderOption::UpdateSelfStatus() +{ + if (!data_ || data_->GetDisabled()) { + return; + } + // tv focus > press(clicked) > hover > select > normal + if (isTv_ && data_->GetFocused()) { + UpdateTvFocusedStatus(); + return; + } + if (data_->GetClicked()) { + UpdateClickedStatus(); + return; + } + if (data_->GetHovered()) { + UpdateHoveredStatus(); + return; + } + if (data_->GetSelected()) { + UpdateSelectedStatus(); + return; + } + + UpdateOthersStatus(); + return; +} + +void RenderOption::UpdateDownStatus() +{ + auto downOption = GetDownOption(); + if (!downOption) { + return; + } + downOption->UpdateSelfStatus(); +} + +void RenderOption::UpdateClickedStatus() +{ + needLine_ = false; + if (isTv_) { + UpdateFocusedText(); + } else { + UpdateNormalText(); + } + MarkNeedRender(); +} + +void RenderOption::UpdateHoveredStatus() +{ + needLine_ = false; + UpdateNormalText(); + MarkNeedRender(); +} + +void RenderOption::UpdateSelectedStatus() +{ + if (!data_ || !data_->GetTheme()) { + return; + } + auto theme = data_->GetTheme(); + backColor_ = theme->GetSelectedColor(); + needLine_ = false; + UpdateSelectedText(); + MarkNeedRender(); +} + +void RenderOption::UpdateTvFocusedStatus() +{ + if (!data_ || !data_->GetTheme()) { + return; + } + auto theme = data_->GetTheme(); + backColor_ = theme->GetClickedColor(); + UpdateFocusedText(); + MarkNeedRender(); +} + +void RenderOption::UpdateOthersStatus() +{ + auto pipe = context_.Upgrade(); + if (!data_ || !pipe) { + return; + } + backColor_ = isTv_ ? Color(0x33FFFFFF) : Color::TRANSPARENT; + auto upOption = GetUpOption(); + needLine_ = (!(data_->GetFocused() && pipe->IsKeyEvent()) && upOption && upOption->IsNormalStatus()); + UpdateNormalText(); + MarkNeedRender(); +} + +RefPtr RenderOption::GetUpOption() const +{ + auto options = GetAllOptions(); + RefPtr topOption; + for (auto it = options.begin(); it != options.end(); ++it) { + if (AceType::RawPtr(*it) == this) { + return topOption; + } + topOption = *it; + } + return nullptr; +} + +RefPtr RenderOption::GetDownOption() const +{ + auto options = GetAllOptions(); + for (auto it = options.begin(); it != options.end(); ++it) { + if (AceType::RawPtr(*it) != this) { + continue; + } + ++it; + if (it == options.end()) { + return nullptr; + } + return *it; + } + return nullptr; +} + +bool RenderOption::IsNormalStatus() const +{ + auto pipe = context_.Upgrade(); + if (!data_ || !pipe) { + return false; + } + + return (!data_->GetClicked() && !data_->GetHovered() && !data_->GetSelected() && + !(data_->GetFocused() && pipe->IsKeyEvent())); +} + +void RenderOption::UpdateNormalText() +{ + UpdateTextColor(false, false); +} + +void RenderOption::UpdateSelectedText() +{ + UpdateTextColor(true, false); +} + +void RenderOption::UpdateFocusedText() +{ + UpdateTextColor(false, true); +} + +void RenderOption::UpdateTextColor(bool selected, bool focused) +{ + if (!data_) { + return; + } + auto theme = data_->GetTheme(); + if (!theme) { + return; + } + auto component = data_->GetText(); + if (!component) { + return; + } + auto render = GetRenderText(AceType::Claim(this)); + if (!render) { + return; + } + auto style = component->GetTextStyle(); + if (focused) { + style.SetTextColor(Color(0xE6000000)); + component->SetFocusColor(style.GetTextColor()); + } else if (selected) { + style.SetTextColor(theme->GetSelectedColorText()); + component->SetFocusColor(style.GetTextColor()); + } else { + style.SetTextColor(theme->GetFontColor()); + component->SetFocusColor(style.GetTextColor()); + } + component->SetTextStyle(style); + render->Update(component); +} + +void RenderOption::AdjustScrollPosition() +{ + RefPtr render = GetParent().Upgrade(); + while (render && !AceType::InstanceOf(render)) { + render = render->GetParent().Upgrade(); + } + if (!render) { + return; + } + auto scroll = AceType::DynamicCast(render); + while (render && !AceType::InstanceOf(render)) { + render = render->GetParent().Upgrade(); + } + if (!render) { + return; + } + auto popup = AceType::DynamicCast(render); + auto scrollTop = scroll->GetCurrentPosition(); + auto scrollBottom = scrollTop + scroll->GetLayoutSize().Height(); + auto scrollHeight = scroll->GetLayoutSize().Height(); + auto optionTop = GetPosition().GetY(); + auto optionBottom = optionTop + GetLayoutSize().Height(); + auto optionHeight = GetLayoutSize().Height(); + if (scrollHeight < optionHeight) { + auto center = (optionTop + optionBottom) / 2.0; + scroll->JumpToPosition(center - scrollHeight / 2.0); + popup->MarkNeedRender(); + return; + } + double pos = 0.0; + if (optionTop < scrollTop + optionHeight) { + pos = optionTop >= optionHeight ? optionTop - optionHeight : 0; + } else if (scrollBottom - optionHeight < optionBottom) { + pos = optionBottom + optionHeight - scrollHeight; + } else { + return; + } + if (pos <= optionTop && optionBottom <= pos + scrollHeight) { + scroll->JumpToPosition(pos); + popup->MarkNeedRender(); + return; + } + if (pos > optionTop) { + scroll->JumpToPosition(optionTop); + popup->MarkNeedRender(); + return; + } + scroll->JumpToPosition(optionBottom - scrollHeight); + popup->MarkNeedRender(); +} + +RenderOption::~RenderOption() +{ + UpdateAccessibilityInfo(Size(0.0, 0.0), Offset(0.0, 0.0), false); +} + +void RenderOption::InitClickEvent() +{ + if (click_) { + return; + } + click_ = AceType::MakeRefPtr(); + auto weak = AceType::WeakClaim(this); + click_->SetOnClick([weak](const ClickInfo&) { + auto ref = weak.Upgrade(); + if (!ref) { + return; + } + ref->OnClick(false); + }); +} + +void RenderOption::InitTouchEvent() +{ + if (touch_) { + return; + } + touch_ = AceType::MakeRefPtr(); + auto weak = AceType::WeakClaim(this); + touch_->SetOnTouchDown([weak](const TouchEventInfo&) { + auto ref = weak.Upgrade(); + if (!ref) { + return; + } + ref->OnTouch(true); + }); + touch_->SetOnTouchUp([weak](const TouchEventInfo&) { + auto ref = weak.Upgrade(); + if (!ref) { + return; + } + ref->OnTouch(false); + }); + touch_->SetOnTouchCancel([weak](const TouchEventInfo&) { + auto ref = weak.Upgrade(); + if (!ref) { + return; + } + ref->OnTouch(false); + }); +} + +void RenderOption::OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) +{ + LOGD("RenderOption::OnTouchTestHit(%{public}lf, %{public}lf).", coordinateOffset.GetX(), coordinateOffset.GetY()); + InitClickEvent(); + InitTouchEvent(); + result.emplace_back(click_); + result.emplace_back(touch_); +} + +void RenderOption::Update(const RefPtr& component) +{ + data_ = AceType::DynamicCast(component); + if (!data_ || !data_->GetTheme()) { + return; + } + if (!eventEffectController_) { + eventEffectController_ = AceType::MakeRefPtr(context_); + } + auto theme = data_->GetTheme(); + lineColor_ = theme->GetLineColor(); + clickedColor_ = theme->GetClickedColor(); + hoveredColor_ = theme->GetHoverColor(); + onClickEvent_ = AceAsyncEvent::Create(data_->GetClickEvent(), context_); + UpdateStatus(); + MarkNeedLayout(); +} + +void RenderOption::OnPaintFinish() +{ + Size size = GetLayoutSize(); + Offset offset = GetGlobalOffset(); + bool isSelected = false; + if (data_) { + isSelected = data_->GetSelected(); + } + UpdateAccessibilityInfo(size, offset, isSelected); + + // update focus + auto pipeline = context_.Upgrade(); + if (!pipeline || !data_ || !data_->GetTheme()) { + LOGE("pipeline or box or data component or theme is null."); + return; + } + if (!data_->GetFocused()) { + return; + } + auto theme = data_->GetTheme(); + Radius radius(NormalizeToPx((isTv_ ? ROUND_RADIUS_TV : ROUND_RADIUS_PHONE))); + auto diff = NormalizeToPx(theme->GetOptionInterval()); + offset = GetGlobalOffset() + Size(diff, diff); + size = GetLayoutSize() - Size(diff, diff) * 2; // left top diff and right bottom diff. + pipeline->ShowFocusAnimation( + RRect::MakeRRect(Rect(Offset(0, 0), size), radius), theme->GetClickedColor(), offset, true); +} + +void RenderOption::UpdateAccessibilityInfo(Size size, Offset offset, bool isSelected) +{ + auto context = context_.Upgrade(); + if (!context) { + return; + } + if (!data_) { + return; + } + auto viewScale = context->GetViewScale(); + if (NearZero(viewScale)) { + LOGW("GetGlobalPositionById viewScale is zero."); + return; + } + auto accessibilityManager = context->GetAccessibilityManager(); + if (!accessibilityManager) { + LOGW("RenderOption accessibilityManager is null."); + return; + } + auto nodeId = StringUtils::StringToInt(data_->GetId()); + auto accessibilityNode = accessibilityManager->GetAccessibilityNodeById(nodeId); + if (!accessibilityNode) { + LOGW("RenderOption accessibilityNode is null."); + return; + } + + PositionInfo positionInfo = { (size.Width()) * viewScale, (size.Height()) * viewScale, (offset.GetX()) * viewScale, + (offset.GetY()) * viewScale }; + accessibilityNode->SetPositionInfo(positionInfo); + if (data_ && data_->GetText()) { + auto text = data_->GetText(); + accessibilityNode->SetText(text->GetData()); + } + accessibilityNode->SetSelectedState(isSelected); +} + +void RenderOption::LayoutText(const RefPtr& text) +{ + double verInterval = NormalizeToPx(VERTICAL_INTERVAL_PHONE); + double horInterval = NormalizeToPx(HORIZONTAL_INTERVAL_PHONE); + + double minWidth = minWidth_ - horInterval * 2.0; // left + right interval + if (LessOrEqual(minWidth, 0.0)) { + minWidth = 0.0; + } + double maxWidth = maxWidth_ - horInterval * 2.0; // left + right interval + if (LessOrEqual(maxWidth, 0.0)) { + maxWidth = 0.0; + } + + LayoutParam layout; + layout.SetMinWidth(minWidth); + layout.SetMaxWidth(maxWidth); + text->Layout(layout); + auto size = text->GetLayoutSize(); + + size.AddWidth(horInterval * 2.0); + size.AddHeight(verInterval * 2.0); + text->SetPosition(Offset(horInterval, verInterval)); + SetLayoutSize(size); +} + +void RenderOption::LayoutTextImage(const RefPtr& text, const RefPtr& image) +{ + double verInterval = NormalizeToPx(VERTICAL_INTERVAL_PHONE); + double horInterval = NormalizeToPx(HORIZONTAL_INTERVAL_PHONE); + double horDistance = NormalizeToPx(HORIZONTAL_DISTANCE_PHONE); + + image->Layout(LayoutParam()); + auto imageSize = image->GetLayoutSize(); + + // left interval + right interval + distance between elements + double minWidth = minWidth_ - horInterval * 2.0 - horDistance - imageSize.Width(); + if (LessOrEqual(minWidth, 0.0)) { + minWidth = 0.0; + } + double maxWidth = maxWidth_ - horInterval * 2.0 - horDistance - imageSize.Width(); + if (LessOrEqual(maxWidth, 0.0)) { + maxWidth = 0.0; + } + + LayoutParam layout; + layout.SetMinWidth(minWidth); + layout.SetMaxWidth(maxWidth); + text->Layout(layout); + auto textSize = text->GetLayoutSize(); + + auto size = textSize; + size.AddWidth(horInterval * 2.0 + horDistance + imageSize.Width()); + size.AddHeight(verInterval * 2.0); + SetLayoutSize(size); + + double yImage = (size.Height() - imageSize.Height()) / 2.0; // place center + if (IsRTL()) { + text->SetPosition(Offset(horInterval, verInterval)); + image->SetPosition(Offset(size.Width() - horInterval - imageSize.Width(), yImage)); + } else { + image->SetPosition(Offset(horInterval, yImage)); + text->SetPosition(Offset(size.Width() - horInterval - textSize.Width(), verInterval)); + } +} + +bool RenderOption::IsRTL() const +{ + if (!data_) { + return false; + } + + if (data_->GetTextDirection() == TextDirection::RTL) { + return true; + } + + return false; +} + +void RenderOption::PerformLayout() +{ + auto text = GetRenderText(AceType::Claim(this)); + if (!text) { + LOGE("render text is null."); + return; + } + + auto image = GetRenderImage(AceType::Claim(this)); + if (image) { + LayoutTextImage(text, image); + } else { + LayoutText(text); + } +} + +void RenderOption::PlayEventEffectAnimation(const Color& endColor, int32_t duration, bool isHoverExists) +{ + if (!eventEffectController_->IsStopped()) { + eventEffectController_->Stop(); + } + RefPtr> colorAnimation = AceType::MakeRefPtr>(); + CreateMouseAnimation(colorAnimation, GetEventEffectColor(), endColor); + if (duration == HOVER_DURATION) { + colorAnimation->SetCurve(Curves::FRICTION); + } + if (isHoverExists && GetEventEffectColor().GetValue() < hoveredColor_.GetValue()) { + colorAnimation->SetCurve(Curves::FAST_OUT_SLOW_IN); + } + eventEffectController_->ClearInterpolators(); + eventEffectController_->ClearStopListeners(); + eventEffectController_->AddInterpolator(colorAnimation); + eventEffectController_->SetDuration(duration); + eventEffectController_->SetFillMode(FillMode::FORWARDS); + eventEffectController_->AddStopListener([weakNode = AceType::WeakClaim(this)]() { + auto renderOption = weakNode.Upgrade(); + if (renderOption) { + renderOption->UpdateStatus(); + } + }); + eventEffectController_->Forward(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/option/render_option.h b/frameworks/core/components/option/render_option.h new file mode 100644 index 00000000..96283514 --- /dev/null +++ b/frameworks/core/components/option/render_option.h @@ -0,0 +1,138 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_OPTION_RENDER_OPTION_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_OPTION_RENDER_OPTION_H + +#include "core/components/box/render_box.h" +#include "core/components/common/properties/color.h" +#include "core/components/image/render_image.h" +#include "core/components/select/select_component.h" +#include "core/components/text/render_text.h" +#include "core/components/touch_listener/render_touch_listener.h" +#include "core/gestures/click_recognizer.h" +#include "core/gestures/raw_recognizer.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderOption : public RenderNode { + DECLARE_ACE_TYPE(RenderOption, RenderNode); + +public: + static RefPtr Create(); + + ~RenderOption() override; + + void Update(const RefPtr& component) override; + void PerformLayout() override; + void OnPaintFinish() override; + + void SetFixedWidth(double width) + { + minWidth_ = width; + maxWidth_ = width; + } + + void SetMaxWidth(double width) + { + maxWidth_ = width; + } + + bool OnBack(); + + void OnClick(bool focus); + + void OnFocus(bool focus); + + void OnTouch(bool down); + + void SetWeakNode(const WeakPtr& value) + { + weakNode_ = value; + } + + bool GetSelected() const + { + if (!data_) { + return false; + } + return data_->GetSelected(); + } + + void UpdateSelfStatus(); + +protected: + void OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) override; + void OnMouseHoverEnterTest() override; + void OnMouseHoverExitTest() override; + + void UpdateAccessibilityInfo(Size size, Offset offset, bool isSelected); + + RefPtr GetRenderText(const RefPtr& render) const; + RefPtr GetRenderImage(const RefPtr& render) const; + + void InitClickEvent(); + void InitTouchEvent(); + + void LayoutText(const RefPtr& text); + void LayoutTextImage(const RefPtr& text, const RefPtr& image); + + bool IsRTL() const; + + void RequestFocus(); + void GetAllOptions(std::list>& result, const RefPtr& parent) const; + std::list> GetAllOptions() const; + void OnSelect(uint32_t selectIndex); + void UpdateStatus(); + void UpdateDownStatus(); + void UpdateTvFocusedStatus(); + void UpdateClickedStatus(); + void UpdateHoveredStatus(); + void UpdateSelectedStatus(); + void UpdateOthersStatus(); + RefPtr GetUpOption() const; + RefPtr GetDownOption() const; + bool IsNormalStatus() const; + void UpdateNormalText(); + void UpdateSelectedText(); + void UpdateFocusedText(); + void UpdateTextColor(bool selected, bool focused); + void AdjustScrollPosition(); + void PlayEventEffectAnimation(const Color& endColor, int32_t duration, bool isHoverExists = false); + + RefPtr click_; + RefPtr touch_; + RefPtr data_; + WeakPtr weakNode_; + + std::function onClickEvent_; + + double minWidth_ = 0.0; + double maxWidth_ = Size::INFINITE_SIZE; + bool focusJumped_ = false; + bool needLine_ = true; + Color backColor_ = Color::TRANSPARENT; + Color clickedColor_ = Color::TRANSPARENT; + Color hoveredColor_ = Color::TRANSPARENT; + Color lineColor_; + bool isTv_ = SystemProperties::GetDeviceType() == DeviceType::TV; + RefPtr eventEffectController_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_OPTION_RENDER_OPTION_H diff --git a/frameworks/core/components/overlay/BUILD.gn b/frameworks/core/components/overlay/BUILD.gn new file mode 100644 index 00000000..80950c3b --- /dev/null +++ b/frameworks/core/components/overlay/BUILD.gn @@ -0,0 +1,21 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("overlay") { + sources = [ + "overlay_component.cpp", + "overlay_element.cpp", + ] +} diff --git a/frameworks/core/components/overlay/overlay_component.cpp b/frameworks/core/components/overlay/overlay_component.cpp new file mode 100644 index 00000000..901d3f48 --- /dev/null +++ b/frameworks/core/components/overlay/overlay_component.cpp @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/overlay/overlay_component.h" + +#include "core/components/overlay/overlay_element.h" + +namespace OHOS::Ace { + +RefPtr OverlayComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/overlay/overlay_component.h b/frameworks/core/components/overlay/overlay_component.h new file mode 100644 index 00000000..19b4f801 --- /dev/null +++ b/frameworks/core/components/overlay/overlay_component.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_OVERLAY_OVERLAY_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_OVERLAY_OVERLAY_COMPONENT_H + +#include "core/components/stack/stack_component.h" + +namespace OHOS::Ace { + +class OverlayComponent : public StackComponent { + DECLARE_ACE_TYPE(OverlayComponent, StackComponent); + +public: + explicit OverlayComponent(const std::list>& children) + : StackComponent(Alignment::TOP_LEFT, StackFit::INHERIT, Overflow::OBSERVABLE, children) + {} + ~OverlayComponent() override = default; + + RefPtr CreateElement() override; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_OVERLAY_OVERLAY_COMPONENT_H diff --git a/frameworks/core/components/overlay/overlay_element.cpp b/frameworks/core/components/overlay/overlay_element.cpp new file mode 100644 index 00000000..ddf3715a --- /dev/null +++ b/frameworks/core/components/overlay/overlay_element.cpp @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/overlay/overlay_element.h" + +namespace OHOS::Ace { +void OverlayElement::Clear() +{ + LOGD("Clear Overlay. current child size: %zu", children_.size()); + while (children_.size() > 1) { + PopComponent(true); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/overlay/overlay_element.h b/frameworks/core/components/overlay/overlay_element.h new file mode 100644 index 00000000..f4a4e554 --- /dev/null +++ b/frameworks/core/components/overlay/overlay_element.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_OVERLAY_OVERLAY_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_OVERLAY_OVERLAY_ELEMENT_H + +#include "core/components/stack/stack_element.h" + +namespace OHOS::Ace { + +class OverlayElement : public StackElement { + DECLARE_ACE_TYPE(OverlayElement, StackElement); + +public: + void Clear(); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_OVERLAY_OVERLAY_ELEMENT_H diff --git a/frameworks/core/components/padding/BUILD.gn b/frameworks/core/components/padding/BUILD.gn new file mode 100644 index 00000000..cfa1367c --- /dev/null +++ b/frameworks/core/components/padding/BUILD.gn @@ -0,0 +1,21 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("padding") { + sources = [ + "padding_component.cpp", + "render_padding.cpp", + ] +} diff --git a/frameworks/core/components/padding/padding_component.cpp b/frameworks/core/components/padding/padding_component.cpp new file mode 100644 index 00000000..435946ba --- /dev/null +++ b/frameworks/core/components/padding/padding_component.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/padding/padding_component.h" + +#include "core/components/padding/padding_element.h" +#include "core/components/padding/render_padding.h" + +namespace OHOS::Ace { + +RefPtr PaddingComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +RefPtr PaddingComponent::CreateRenderNode() +{ + return RenderPadding::Create(); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/padding/padding_component.h b/frameworks/core/components/padding/padding_component.h new file mode 100644 index 00000000..391fbba3 --- /dev/null +++ b/frameworks/core/components/padding/padding_component.h @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PADDING_PADDING_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PADDING_PADDING_COMPONENT_H + +#include "base/utils/macros.h" +#include "core/components/common/properties/edge.h" +#include "core/pipeline/base/component.h" +#include "core/pipeline/base/sole_child_component.h" + +namespace OHOS::Ace { + +// A padding component. +class ACE_EXPORT PaddingComponent : public SoleChildComponent { + DECLARE_ACE_TYPE(PaddingComponent, SoleChildComponent); + +public: + PaddingComponent() = default; + ~PaddingComponent() override = default; + + RefPtr CreateElement() override; + + RefPtr CreateRenderNode() override; + + const Edge& GetPadding() const + { + return padding_; + } + + void SetPadding(const Edge& padding) + { + padding_ = padding; + } + + void SetPaddingLeft(const Dimension& value) + { + padding_.SetLeft(value); + } + + void SetPaddingTop(const Dimension& value) + { + padding_.SetTop(value); + } + + void SetPaddingRight(const Dimension& value) + { + padding_.SetRight(value); + } + + void SetPaddingBottom(const Dimension& value) + { + padding_.SetBottom(value); + } + +private: + Edge padding_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PADDING_PADDING_COMPONENT_H diff --git a/frameworks/core/components/padding/padding_element.h b/frameworks/core/components/padding/padding_element.h new file mode 100644 index 00000000..07ccb5e7 --- /dev/null +++ b/frameworks/core/components/padding/padding_element.h @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PADDING_PADDING_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PADDING_PADDING_ELEMENT_H + +#include "core/components/padding/padding_component.h" +#include "core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +// The element of padding component. +class PaddingElement : public RenderElement { + DECLARE_ACE_TYPE(PaddingElement, RenderElement); + +public: + void PerformBuild() override + { + LOGD("PaddingElement::PerformBuild"); + RefPtr padding = AceType::DynamicCast(component_); + if (padding) { + const auto& child = children_.empty() ? nullptr : children_.front(); + UpdateChild(child, padding->GetChild()); + } + } +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PADDING_PADDING_ELEMENT_H diff --git a/frameworks/core/components/padding/render_padding.cpp b/frameworks/core/components/padding/render_padding.cpp new file mode 100644 index 00000000..86d866b1 --- /dev/null +++ b/frameworks/core/components/padding/render_padding.cpp @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/padding/render_padding.h" + +#include "base/log/log.h" +#include "base/utils/utils.h" +#include "core/components/padding/padding_component.h" + +namespace OHOS::Ace { + +RefPtr RenderPadding::Create() +{ + return AceType::MakeRefPtr(); +} + +void RenderPadding::Update(const RefPtr& component) +{ + const RefPtr padding = AceType::DynamicCast(component); + if (!padding) { + return; + } + padding_ = padding->GetPadding(); + MarkNeedLayout(); +} + +void RenderPadding::PerformLayout() +{ + auto width = NormalizePercentToPx(padding_.Left(), false) + NormalizePercentToPx(padding_.Right(), false); + auto height = NormalizePercentToPx(padding_.Top(), true) + NormalizePercentToPx(padding_.Bottom(), true); + auto left = NormalizePercentToPx(padding_.Left(), false); + auto top = NormalizePercentToPx(padding_.Top(), true); + auto layoutSize = Size(width, height); + if (!GetChildren().empty()) { + auto child = GetChildren().front(); + LayoutParam innerLayout; + Size maxLayoutSize = GetLayoutParam().GetMaxSize() - layoutSize; + Size minLayoutSize = GetLayoutParam().GetMinSize() - layoutSize; + if (maxLayoutSize.IsValid()) { + // set child's constraints and layout child. + innerLayout.SetMaxSize(maxLayoutSize); + innerLayout.SetMinSize(minLayoutSize); + child->Layout(innerLayout); + + // set position of child. + child->SetPosition(Offset(left, top)); + + layoutSize += child->GetLayoutSize(); + } + } + SetLayoutSize(layoutSize); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/padding/render_padding.h b/frameworks/core/components/padding/render_padding.h new file mode 100644 index 00000000..7e4aee31 --- /dev/null +++ b/frameworks/core/components/padding/render_padding.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PADDING_RENDER_PADDING_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PADDING_RENDER_PADDING_H + +#include "core/components/common/properties/edge.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +// The render node of padding component. +class RenderPadding final : public RenderNode { + DECLARE_ACE_TYPE(RenderPadding, RenderNode); + +public: + static RefPtr Create(); + + void Update(const RefPtr& component) override; + + void PerformLayout() override; + +private: + Edge padding_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PADDING_RENDER_PADDING_H diff --git a/frameworks/core/components/page/BUILD.gn b/frameworks/core/components/page/BUILD.gn new file mode 100644 index 00000000..47098b10 --- /dev/null +++ b/frameworks/core/components/page/BUILD.gn @@ -0,0 +1,21 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("page") { + sources = [ + "page_component.cpp", + "page_element.cpp", + ] +} diff --git a/frameworks/core/components/page/page_component.cpp b/frameworks/core/components/page/page_component.cpp new file mode 100644 index 00000000..032e2307 --- /dev/null +++ b/frameworks/core/components/page/page_component.cpp @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/page/page_component.h" + +#include "core/components/page/page_element.h" + +namespace OHOS::Ace { +namespace { + +const ComposeId PAGE_COMPOSE_ID_PREFIX = "Page-"; + +} + +PageComponent::PageComponent(int32_t pageId, const RefPtr& child) + : ComposedComponent( + PAGE_COMPOSE_ID_PREFIX + std::to_string(pageId), PAGE_COMPOSE_ID_PREFIX + std::to_string(pageId), child), + pageId_(pageId) +{} + +PageComponent::PageComponent(int32_t pageId, const ComposeId& cardComposeId, const RefPtr& child) + : ComposedComponent( + PAGE_COMPOSE_ID_PREFIX + std::to_string(pageId), PAGE_COMPOSE_ID_PREFIX + std::to_string(pageId), child), + pageId_(pageId), cardComposeId_(cardComposeId) +{} + +RefPtr PageComponent::CreateElement() +{ + if (!cardComposeId_.empty()) { + return AceType::MakeRefPtr(pageId_, cardComposeId_, GetId()); + } + return AceType::MakeRefPtr(pageId_, GetId()); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/page/page_component.h b/frameworks/core/components/page/page_component.h new file mode 100644 index 00000000..09910a53 --- /dev/null +++ b/frameworks/core/components/page/page_component.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PAGE_PAGE_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PAGE_PAGE_COMPONENT_H + +#include "core/pipeline/base/composed_component.h" + +namespace OHOS::Ace { + +class PageComponent : public ComposedComponent { + DECLARE_ACE_TYPE(PageComponent, ComposedComponent); + +public: + PageComponent(int32_t pageId, const RefPtr& child); + PageComponent(int32_t pageId, const ComposeId& cardComposeId, const RefPtr& child); + ~PageComponent() override = default; + + RefPtr CreateElement() override; + + int32_t GetPageId() + { + return pageId_; + } + +private: + int32_t pageId_ = -1; + ComposeId cardComposeId_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PAGE_PAGE_COMPONENT_H diff --git a/frameworks/core/components/page/page_element.cpp b/frameworks/core/components/page/page_element.cpp new file mode 100644 index 00000000..ce428081 --- /dev/null +++ b/frameworks/core/components/page/page_element.cpp @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/page/page_element.h" + +#include "core/common/frontend.h" +#include "core/components/transform/transform_element.h" + +namespace OHOS::Ace { + +PageElement::PageElement(int32_t pageId, const ComposeId& id) : ComposedElement(id), pageId_(pageId) {} + +PageElement::PageElement(int32_t pageId, const ComposeId& cardComposeId, const ComposeId& id) + : ComposedElement(id), pageId_(pageId), cardComposeId_(cardComposeId) {} + +bool PageElement::RequestNextFocus(bool vertical, bool reverse, const Rect& rect) +{ + // Do not precess logic. + return false; +} + +void PageElement::RemoveSharedTransition(const ShareId& shareId) +{ + LOGD("Remove shared transition id:%{public}s", shareId.c_str()); + sharedTransitionElementMap_.erase(shareId); +} + +void PageElement::AddSharedTransition(const RefPtr& shared) +{ + if (!shared) { + LOGE("Add shared transition failed. element is null."); + return; + } + LOGD("Add shared transition element id:%{public}s", shared->GetShareId().c_str()); + sharedTransitionElementMap_[shared->GetShareId()] = shared; +} + +const PageElement::SharedTransitionMap& PageElement::GetSharedTransitionMap() const +{ + return sharedTransitionElementMap_; +} + +void PageElement::SetHidden(bool hidden) +{ + auto render = GetRenderNode(); + if (render) { + auto parent = render->GetParent().Upgrade(); + if (parent) { + parent->MarkNeedRender(); + } + render->SetHidden(hidden); + } + + for (auto&& [id, callback] : hiddenCallbackMap_) { + callback(hidden); + } +} + +void PageElement::RemoveCardTransition(int32_t retakeId) +{ + cardTransitionMap_.erase(retakeId); +} + +void PageElement::AddCardTransition(const RefPtr& transform) +{ + if (!transform) { + LOGE("Add transform transition failed. element is null."); + return; + } + cardTransitionMap_[transform->GetRetakeId()] = transform; +} + +const PageElement::CardTransitionMap& PageElement::GetCardTransitionMap() const +{ + return cardTransitionMap_; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/page/page_element.h b/frameworks/core/components/page/page_element.h new file mode 100644 index 00000000..47baaa76 --- /dev/null +++ b/frameworks/core/components/page/page_element.h @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PAGE_PAGE_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PAGE_PAGE_ELEMENT_H + +#include +#include + +#include "core/components/shared_transition/shared_transition_element.h" +#include "core/pipeline/base/composed_element.h" + +namespace OHOS::Ace { + +class SharedTransitionElement; +class TransformElement; + +class PageElement : public ComposedElement, FocusGroup { + DECLARE_ACE_TYPE(PageElement, ComposedElement, FocusGroup); + +public: + using SharedTransitionMap = std::unordered_map>; + using HiddenCallbackMap = std::unordered_map>; + using CardTransitionMap = std::unordered_map>; + PageElement(int32_t pageId, const ComposeId& id); + PageElement(int32_t pageId, const ComposeId& cardComposeId, const ComposeId& id); + ~PageElement() override = default; + + int32_t GetPageId() + { + return pageId_; + } + + void RemoveSharedTransition(const ShareId& shareId); + void AddSharedTransition(const RefPtr& shared); + const SharedTransitionMap& GetSharedTransitionMap() const; + + void SetHidden(bool hidden); + + int32_t RegisterHiddenCallback(std::function&& callback) + { + if (callback) { + hiddenCallbackMap_.emplace(callbackId_, std::move(callback)); + } + return callbackId_++; + } + + void CancelHiddenCallback(int32_t callbackId) + { + hiddenCallbackMap_.erase(callbackId); + } + + const ComposeId& GetCardComposeId() const + { + return cardComposeId_; + } + + void RemoveCardTransition(int32_t retakeId); + void AddCardTransition(const RefPtr& transform); + const CardTransitionMap& GetCardTransitionMap() const; + +protected: + bool RequestNextFocus(bool vertical, bool reverse, const Rect& rect) override; + +private: + int32_t callbackId_ = 0; + int32_t pageId_ = -1; + ComposeId cardComposeId_; + SharedTransitionMap sharedTransitionElementMap_; + HiddenCallbackMap hiddenCallbackMap_; + CardTransitionMap cardTransitionMap_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PAGE_PAGE_ELEMENT_H diff --git a/frameworks/core/components/page_transition/BUILD.gn b/frameworks/core/components/page_transition/BUILD.gn new file mode 100644 index 00000000..bbbb76c4 --- /dev/null +++ b/frameworks/core/components/page_transition/BUILD.gn @@ -0,0 +1,18 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("page_transition") { + sources = [ "page_transition_element.cpp" ] +} diff --git a/frameworks/core/components/page_transition/page_transition_component.h b/frameworks/core/components/page_transition/page_transition_component.h new file mode 100644 index 00000000..22e291cd --- /dev/null +++ b/frameworks/core/components/page_transition/page_transition_component.h @@ -0,0 +1,130 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PAGE_TRANSITION_PAGE_TRANSITION_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PAGE_TRANSITION_PAGE_TRANSITION_COMPONENT_H + +#include "core/components/box/box_component.h" +#include "core/components/common/layout/constants.h" +#include "core/components/common/properties/alignment.h" +#include "core/components/page_transition/page_transition_element.h" +#include "core/components/stack/stack_component.h" +#include "core/components/tween/tween_component.h" + +namespace OHOS::Ace { + +class PageTransitionComponent : public StackComponent { + DECLARE_ACE_TYPE(PageTransitionComponent, StackComponent); + +public: + PageTransitionComponent() + : StackComponent(Alignment::TOP_LEFT, StackFit::INHERIT, Overflow::CLIP, std::list>()) + {} + + ~PageTransitionComponent() override = default; + + RefPtr CreateElement() override + { + return AceType::MakeRefPtr(); + } + + // set page background box. set background, width and height in BoxComponent and set it + void SetBackground(const RefPtr& background) + { + if (!background) { + LOGE("background is empty when set back decoration."); + return; + } + background_ = background; + } + + // get the user's background box + const RefPtr& GetBackground() const + { + return background_; + } + + // set page content component, usually begin with StackComponent + void SetContent(const RefPtr& content) + { + if (!content) { + LOGE("content is empty when set content."); + return; + } + content_ = content; + } + + // get the user's content box + const RefPtr& GetContent() const + { + return content_; + } + + void SetContentTransitionOption(const TweenOption& in, const TweenOption& out) + { + isSetOption_ = true; + contentInOption_ = in; + contentOutOption_ = out; + } + + const TweenOption& GetContentTransitionInOption() const + { + return contentInOption_; + } + + const TweenOption& GetContentTransitionOutOption() const + { + return contentOutOption_; + } + + // element only support page now + static bool HasTransitionComponent(const RefPtr& component) + { + // first try with page element. + RefPtr pageComponent = AceType::DynamicCast(component); + if (!pageComponent) { + LOGW("Page is null."); + return false; + } + return AceType::InstanceOf(pageComponent->GetChild()); + } + + void SetSeparation(bool isSeparate) + { + isSeparation_ = isSeparate; + } + + bool GetSeparation() const + { + return isSeparation_; + } + + bool GetIsSetOption() const + { + return isSetOption_; + } + +private: + bool isSetOption_ = false; + bool isSeparation_ = false; // true means that the content of the page is separated from the background + RefPtr content_; // page content component, will be wrapped with animation component + RefPtr background_; // page background box, will be wrapped with animation component + TweenOption contentInOption_; + TweenOption contentOutOption_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PAGE_TRANSITION_PAGE_TRANSITION_COMPONENT_H diff --git a/frameworks/core/components/page_transition/page_transition_element.cpp b/frameworks/core/components/page_transition/page_transition_element.cpp new file mode 100644 index 00000000..851a016e --- /dev/null +++ b/frameworks/core/components/page_transition/page_transition_element.cpp @@ -0,0 +1,431 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/page_transition/page_transition_element.h" + +#include "base/utils/system_properties.h" +#include "core/animation/shared_transition_controller.h" +#include "core/components/clip/clip_component.h" +#include "core/components/clip/clip_element.h" +#include "core/components/clip/render_clip.h" +#include "core/components/page/page_element.h" +#include "core/components/page_transition/page_transition_component.h" +#include "core/components/transition/transition_component.h" + +namespace OHOS::Ace { + +namespace { + +constexpr int32_t CHILDREN_SIZE_WHEN_SPLIT = 2; + +TransitionOptionType GetOptionType(bool hasSharedTransition, TransitionDirection direction) +{ + if (hasSharedTransition) { + if (direction == TransitionDirection::TRANSITION_IN) { + return TransitionOptionType::TRANSITION_SHARED_IN; + } else { + return TransitionOptionType::TRANSITION_SHARED_OUT; + } + } else { + if (direction == TransitionDirection::TRANSITION_IN) { + return TransitionOptionType::TRANSITION_IN; + } else { + return TransitionOptionType::TRANSITION_OUT; + } + } +} + +} // namespace + +void PageTransitionElement::Update() +{ + StackElement::Update(); + UpdateTransitionOption(); +} + +void PageTransitionElement::PerformBuild() +{ + // PageTransitionElement only have two children. one is content, the other is background. + if (!children_.empty()) { + LOGE("perform build failed. not empty children. size: %{public}u, skip perform build.", + static_cast(children_.size())); + return; + } + + auto pageTransitionComponent = AceType::DynamicCast(component_); + if (!pageTransitionComponent) { + LOGE("PageTransitionElement::PerformBuild: get PageTransitionComponent failed!"); + return; + } + + if (!controller_) { + LOGD("create animator."); + controller_ = AceType::MakeRefPtr(context_); + } + UpdateTransitionOption(); + + if (pageTransitionComponent->GetSeparation()) { + BuildSeparatedChild(pageTransitionComponent); + } else { + BuildCombinedChild(pageTransitionComponent); + } + SetTransitionController(); +} + +void PageTransitionElement::SetTransitionController() +{ + if (!controller_) { + LOGE("set transition controller failed. controller is null"); + return; + } + + // stop controller first. + if (!controller_->IsStopped()) { + controller_->Stop(); + } + + if (contentTransition_) { + auto contentController = contentTransition_->GetController(); + if (contentController && (!contentController->IsStopped())) { + contentController->Stop(); + } + contentTransition_->SetController(controller_); + } + if (frontDecorationTransition_) { + auto frontController = frontDecorationTransition_->GetController(); + if (frontController && (!frontController->IsStopped())) { + frontController->Stop(); + } + frontDecorationTransition_->SetController(controller_); + } + if (backgroundTransition_) { + auto backgroundController = backgroundTransition_->GetController(); + if (backgroundController && (!backgroundController->IsStopped())) { + backgroundController->Stop(); + } + backgroundTransition_->SetController(controller_); + } +} + +void PageTransitionElement::SetTransitionDirection(TransitionEvent event, TransitionDirection direction) +{ + if (!controller_) { + LOGE("set transition direction failed. controller is empty."); + return; + } + auto context = context_.Upgrade(); + if (!context) { + LOGE("set transition direction failed. context is empty."); + return; + } + auto sharedController = context->GetSharedTransitionController(); + if (!sharedController) { + LOGE("set transition direction failed. shared controller is null."); + return; + } + controller_->ClearInterpolators(); + + // stop controller first. + if (!controller_->IsStopped()) { + controller_->Stop(); + } + TransitionOptionType optionType; + auto deviceType = SystemProperties::GetDeviceType(); + if (deviceType == DeviceType::TV) { + // no shared transition UI standard on tv, just use default page transition parameters + optionType = GetOptionType(false, direction); + } else { + bool hasShared = sharedController->HasSharedTransition(event); + optionType = GetOptionType(hasShared, direction); + } + if (contentTransition_) { + LOGD("set content transition option type: %{public}d", optionType); + contentTransition_->SwitchTransitionOption(optionType); + } + if (frontDecorationTransition_) { + LOGD("set front transition option type: %{public}d", direction); + frontDecorationTransition_->SwitchTransitionOption(optionType); + } + if (backgroundTransition_) { + LOGD("set background transition option type: %{public}d", optionType); + backgroundTransition_->SwitchTransitionOption(optionType); + } +} + +const RefPtr& PageTransitionElement::GetTransitionController() const +{ + return controller_; +} + +void PageTransitionElement::UpdateTransitionOption() +{ + if (!component_) { + LOGE("update transition option failed. component is null."); + return; + } + auto transitionComponent = AceType::DynamicCast(component_); + if (!transitionComponent) { + LOGE("update transition option failed. transition is null."); + return; + } + isRightToLeft_ = transitionComponent->GetTextDirection() == TextDirection::RTL; + + LOGI("Use user-defined transition parameters."); + contentInOption_ = transitionComponent->GetContentTransitionInOption(); + contentOutOption_ = transitionComponent->GetContentTransitionOutOption(); + sharedInOption_ = contentInOption_; + sharedOutOption_ = contentOutOption_; + isCustomOptionIn_ = contentInOption_.IsValid(); + isCustomOptionOut_ = contentOutOption_.IsValid(); +} + +RefPtr PageTransitionElement::GetTransitionElement(const RefPtr& element) +{ + // first try with page element. + RefPtr page = AceType::DynamicCast(element); + if (!page) { + return nullptr; + } + LOGD("try to get transition element from page element."); + auto child = page->GetFirstChild(); + return AceType::DynamicCast(child); +} + +void PageTransitionElement::SetTouchable(bool enable) +{ + if (backgroundTransition_) { + backgroundTransition_->SetTouchable(enable); + } + + if (contentTransition_) { + contentTransition_->SetTouchable(enable); + } +} + +void PageTransitionElement::InitTransitionClip() +{ + if (!contentTransition_) { + LOGE("InitTransitionClip failed, content transition is null."); + return; + } + auto clipElement = contentTransition_->GetContentElement(); + if (AceType::InstanceOf(clipElement)) { + RefPtr clipRender = DynamicCast(clipElement->GetRenderNode()); + if (clipRender) { + clipRender->SetWidth(0.0); + clipRender->SetHeight(0.0); + } + } +} + +void PageTransitionElement::InitController(TransitionDirection direction, TransitionEvent event) +{ + if (!controller_) { + LOGE("init controller failed. controller is null."); + return; + } + if (event == TransitionEvent::PUSH_END || event == TransitionEvent::POP_END) { + LOGE("init controller failed. event can not be handled. event: %{public}d", event); + return; + } + SetTouchable(false); + if ((direction == TransitionDirection::TRANSITION_OUT) && (event == TransitionEvent::PUSH_START)) { + LOGD("No need to make it touchable after transition done, because page will not on the top of the stage."); + return; + } + if ((direction == TransitionDirection::TRANSITION_IN) && (event == TransitionEvent::POP_START)) { + LOGD("No need to make it touchable after transition done, because page will be destroyed."); + return; + } + auto weak = AceType::WeakClaim(this); + controller_->AddStopListener([weak]() { + LOGD("transition complete, prepare to clear it"); + auto transition = weak.Upgrade(); + if (transition) { + LOGD("transition complete, clear it"); + transition->SetTouchable(true); + } + }); +} + +void PageTransitionElement::SetVisible(VisibleType visible) +{ + if (contentTransition_) { + contentTransition_->SetVisible(visible); + } + + if (backgroundTransition_) { + backgroundTransition_->SetVisible(visible); + } +} + +RefPtr PageTransitionElement::GetContentElement() const +{ + if (!contentTransition_) { + LOGE("get content element failed. content tween is null."); + return nullptr; + } + auto element = contentTransition_->GetContentElement(); + if (AceType::InstanceOf(element)) { + auto transition = DynamicCast(element->GetFirstChild()); + if (transition) { + auto frontDecorationBox = transition->GetContentElement(); + if (frontDecorationBox) { + return frontDecorationBox->GetFirstChild(); + } + } + return transition; + } + return element; +} + +void PageTransitionElement::SetTransition(DeviceType deviceType, TransitionEvent event, + TransitionDirection direction, const RRect& rrect) +{ + auto tweenOption = + TransitionTweenOptionFactory::CreateTransitionTweenOption(deviceType, event, isRightToLeft_, rrect, context_); + if (!tweenOption) { + LOGE("TransitionTweenOption is null."); + return; + } + bool isSetOutOption = false; + int32_t duration = tweenOption->GetTransitionContentInOption().GetDuration(); + if (direction == TransitionDirection::TRANSITION_OUT) { + if (isCustomOptionOut_) { + if (contentOutOption_.HasDurationChanged()) { + duration = contentOutOption_.GetDuration(); + } + isSetOutOption = true; + } else { + contentOutOption_ = tweenOption->GetTransitionContentOutOption(); + sharedOutOption_ = tweenOption->GetSharedOutOption(); + } + } + if (direction == TransitionDirection::TRANSITION_IN) { + if (isCustomOptionIn_) { + if (contentInOption_.HasDurationChanged()) { + duration = contentInOption_.GetDuration(); + } + } else { + contentInOption_ = tweenOption->GetTransitionContentInOption(); + sharedInOption_ = tweenOption->GetSharedInOption(); + } + } + if (controller_) { + controller_->SetDuration(duration); + } + if (contentTransition_) { + contentTransition_->SetTransition(contentInOption_, contentOutOption_); + contentTransition_->SetSharedTransition(sharedInOption_, sharedOutOption_); + } + if (frontDecorationTransition_ && !isSetOutOption) { + // do not need option in. + TweenOption optionIn; + frontDecorationTransition_->SetTransition(optionIn, tweenOption->GetTransitionFrontDecorationOption()); + frontDecorationTransition_->SetSharedTransition( + optionIn, tweenOption->GetSharedTransitionFrontDecorationOption()); + } + if (backgroundTransition_) { + backgroundTransition_->SetTransition( + tweenOption->GetTransitionBackgroundInOption(), tweenOption->GetTransitionBackgroundOutOption()); + } +} + +void PageTransitionElement::BuildCombinedChild(const RefPtr& component) +{ + auto pageTransitionComponent = AceType::DynamicCast(component); + if (!pageTransitionComponent) { + LOGE("Get PageTransitionComponent failed!"); + return; + } + // create transition for content + auto box = AceType::MakeRefPtr(); + auto front = AceType::MakeRefPtr(); + front->SetBackgroundColor(Color::FromRGBO(0, 0, 0, 0.0)); + box->SetFrontDecoration(front); + box->SetChild(pageTransitionComponent->GetContent()); + auto transition = AceType::MakeRefPtr( + TransitionComponent::AllocTransitionComponentId(), "frontDecoration_transition", box); + + auto clip = AceType::MakeRefPtr(transition); + auto contentTransitionComponent = AceType::MakeRefPtr( + TransitionComponent::AllocTransitionComponentId(), "page_transition_content", clip); + + // add transition for content + pageTransitionComponent->AppendChild(contentTransitionComponent); + StackElement::PerformBuild(); + + if (children_.size() != 1) { + LOGE("the children size is error."); + return; + } + auto childIter = children_.begin(); + auto child = *childIter; + + // child for content. + contentTransition_ = AceType::DynamicCast(child); + auto frontElement = contentTransition_->GetContentElement(); + if (frontElement) { + frontDecorationTransition_ = DynamicCast(frontElement->GetFirstChild()); + } +} + +void PageTransitionElement::BuildSeparatedChild(const RefPtr& component) +{ + auto pageTransitionComponent = AceType::DynamicCast(component); + if (!pageTransitionComponent) { + LOGE("BuildSeparatedChild : get PageTransitionComponent failed!"); + return; + } + // add transition for background + pageTransitionComponent->AppendChild( + AceType::MakeRefPtr(TransitionComponent::AllocTransitionComponentId(), + "page_transition_background", pageTransitionComponent->GetBackground())); + + // create transition for content + auto contentTransitionComponent = + AceType::MakeRefPtr(TransitionComponent::AllocTransitionComponentId(), + "page_transition_content", pageTransitionComponent->GetContent()); + + // add transition for content + pageTransitionComponent->AppendChild(contentTransitionComponent); + StackElement::PerformBuild(); + + if (children_.size() != CHILDREN_SIZE_WHEN_SPLIT) { + LOGE("the children size is error."); + return; + } + auto childIter = children_.begin(); + auto child = *childIter; + + // child for background + backgroundTransition_ = AceType::DynamicCast(child); + child = *(++childIter); + + // child for content. + contentTransition_ = AceType::DynamicCast(child); +} + +const RefPtr& PageTransitionElement::GetContentTransitionElement() const +{ + return contentTransition_; +} + +const RefPtr& PageTransitionElement::GetBackgroundTransitionElement() const +{ + return backgroundTransition_; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/page_transition/page_transition_element.h b/frameworks/core/components/page_transition/page_transition_element.h new file mode 100644 index 00000000..794d5a13 --- /dev/null +++ b/frameworks/core/components/page_transition/page_transition_element.h @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PAGE_TRANSITION_PAGE_TRANSITION_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PAGE_TRANSITION_PAGE_TRANSITION_ELEMENT_H + +#include "core/components/box/box_element.h" +#include "core/components/common/properties/page_transition_option.h" +#include "core/components/stack/stack_component.h" +#include "core/components/stack/stack_element.h" +#include "core/components/transition/transition_element.h" +#include "core/components/tween/tween_element.h" + +namespace OHOS::Ace { + +class PageTransitionElement : public StackElement { + DECLARE_ACE_TYPE(PageTransitionElement, StackElement); + +public: + void Update() override; + void PerformBuild() override; + + void SetTransitionDirection(TransitionEvent event, TransitionDirection direction); + void SetTransitionController(); + const RefPtr& GetTransitionController() const; + void SetTransition(DeviceType deviceType, TransitionEvent event, TransitionDirection direction, + const RRect& rrect); + void SetVisible(VisibleType visible); + void InitController(TransitionDirection direction, TransitionEvent event); + RefPtr GetContentElement() const; + const RefPtr& GetContentTransitionElement() const; + const RefPtr& GetBackgroundTransitionElement() const; + void SetTouchable(bool enable); + void InitTransitionClip(); + + // element only support page now + static RefPtr GetTransitionElement(const RefPtr& element); + +private: + void UpdateTransitionOption(); + void BuildSeparatedChild(const RefPtr& component); + void BuildCombinedChild(const RefPtr& component); + + RefPtr contentTransition_; // element to animate page content + RefPtr backgroundTransition_; // element to animate background + RefPtr frontDecorationTransition_; // element to animate front decoration opacity + RefPtr controller_; // animator for content and background + TweenOption contentInOption_; + TweenOption contentOutOption_; + TweenOption sharedInOption_; + TweenOption sharedOutOption_; + bool isRightToLeft_ = false; + bool isCustomOptionOut_ = false; + bool isCustomOptionIn_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PAGE_TRANSITION_PAGE_TRANSITION_ELEMENT_H diff --git a/frameworks/core/components/panel/BUILD.gn b/frameworks/core/components/panel/BUILD.gn new file mode 100644 index 00000000..bee2b4ba --- /dev/null +++ b/frameworks/core/components/panel/BUILD.gn @@ -0,0 +1,23 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("panel") { + sources = [ + "panel_component.cpp", + "panel_element.cpp", + "render_sliding_panel.cpp", + "sliding_panel_component.cpp", + ] +} diff --git a/frameworks/core/components/panel/panel_component.cpp b/frameworks/core/components/panel/panel_component.cpp new file mode 100644 index 00000000..30595612 --- /dev/null +++ b/frameworks/core/components/panel/panel_component.cpp @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/panel/panel_component.h" + +#include "core/components/panel/panel_element.h" + +namespace OHOS::Ace { + +RefPtr PanelComponent::CreateElement() +{ + return AceType::MakeRefPtr(GetId()); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/panel/panel_component.h b/frameworks/core/components/panel/panel_component.h new file mode 100644 index 00000000..23e60427 --- /dev/null +++ b/frameworks/core/components/panel/panel_component.h @@ -0,0 +1,226 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PANEL_PANEL_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PANEL_PANEL_COMPONENT_H + +#include + +#include "core/components/box/box_component.h" +#include "core/event/ace_event_handler.h" +#include "core/pipeline/base/composed_component.h" + +namespace OHOS::Ace { + +using BuildPanelImpl = std::function; + +// PanelController is used in PanelElement to build a panel +class PanelController : public virtual AceType { + DECLARE_ACE_TYPE(PanelController, AceType); + +public: + void ShowPanel() + { + if (showPanelImpl_) { + showPanelImpl_(); + } + } + + void ClosePanel() + { + if (closePanelImpl_) { + closePanelImpl_(); + } + } + + void SetShowPanelImpl(const BuildPanelImpl& showPanelImpl) + { + showPanelImpl_ = showPanelImpl; + } + + void SetClosePanelImpl(const BuildPanelImpl& closePanelImpl) + { + closePanelImpl_ = closePanelImpl; + } + +private: + BuildPanelImpl showPanelImpl_; + BuildPanelImpl closePanelImpl_; +}; + +class ACE_EXPORT PanelComponent : public ComposedComponent { + DECLARE_ACE_TYPE(PanelComponent, ComposedComponent); + +public: + PanelComponent(const ComposeId& id, const std::string& name, const RefPtr& child) + : ComposedComponent(id, name, child) + { + panelController_ = AceType::MakeRefPtr(); + } + + PanelComponent(const ComposeId& id, const std::string& name) : ComposedComponent(id, name) + { + panelController_ = AceType::MakeRefPtr(); + } + + ~PanelComponent() override = default; + + RefPtr CreateElement() override; + + const RefPtr& GetPanelController() const + { + return panelController_; + } + + const EventMarker& GetOnSizeChanged() const + { + return onSizeChanged_; + } + + void SetOnSizeChanged(const EventMarker& value) + { + onSizeChanged_ = value; + } + + PanelMode GetPanelMode() const + { + return mode_; + } + + void SetPanelMode(PanelMode mode) + { + mode_ = mode; + } + + PanelType GetPanelType() const + { + return type_; + } + + void SetPanelType(PanelType type) + { + type_ = type; + } + + void SetBoxStyle(const RefPtr& style) + { + boxStyle_ = style; + } + + RefPtr GetBoxStyle() const + { + return boxStyle_; + } + + bool HasBoxStyle() const + { + return hasBoxStyle_; + } + + void SetHasBoxStyle(bool hasBoxStyle) + { + hasBoxStyle_ = hasBoxStyle; + } + + bool HasDecorationStyle() const + { + return hasDecorationStyle_; + } + + void SetHasDecorationStyle(bool hasDecorationStyle) + { + hasDecorationStyle_ = hasDecorationStyle; + } + + bool HasDragBar() const + { + return hasDragBar_; + } + + void SetHasDragBar(bool hasDragBar) + { + hasDragBar_ = hasDragBar; + } + + bool HasBackgroundColor() const + { + return hasBackgroundColor_; + } + + void SetHasBackgroundColor(bool hasBackground) + { + hasBackgroundColor_ = hasBackground; + } + + bool HasBorderStyle() const + { + return hasBorderStyle_; + } + + void SetHasBorderStyle(bool borderStyle) + { + hasBorderStyle_ = borderStyle; + } + + const std::pair& GetMiniHeight() const + { + return miniHeight_; + } + + void SetMiniHeight(const std::pair& miniHeight) + { + miniHeight_ = miniHeight; + } + + const std::pair& GetHalfHeight() const + { + return halfHeight_; + } + + void SetHalfHeight(const std::pair& halfHeight) + { + halfHeight_ = halfHeight; + } + + const std::pair& GetFullHeight() const + { + return fullHeight_; + } + + void SetFullHeight(const std::pair& fullHeight) + { + fullHeight_ = fullHeight; + } + +private: + PanelType type_ = PanelType::FOLDABLE_BAR; + PanelMode mode_ = PanelMode::FULL; + RefPtr panelController_; + EventMarker onSizeChanged_; + + RefPtr boxStyle_; + bool hasBoxStyle_ = false; + bool hasDecorationStyle_ = false; + bool hasDragBar_ = true; + bool hasBackgroundColor_ = false; + bool hasBorderStyle_ = false; + std::pair miniHeight_ = { 0.0_vp, false }; + std::pair halfHeight_ = { 0.0_vp, false }; + std::pair fullHeight_ = { 0.0_vp, false }; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PANEL_PANEL_COMPONENT_H diff --git a/frameworks/core/components/panel/panel_element.cpp b/frameworks/core/components/panel/panel_element.cpp new file mode 100644 index 00000000..ab8c4451 --- /dev/null +++ b/frameworks/core/components/panel/panel_element.cpp @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/panel/panel_element.h" + +#include "core/components/panel/panel_component.h" +#include "core/components/panel/sliding_panel_component.h" +#include "core/components/stack/stack_element.h" + +namespace OHOS::Ace { + +void PanelElement::PerformBuild() +{ + RefPtr panel = AceType::DynamicCast(component_); + if (!panel) { + return; + } + panel_ = panel; + const auto& controller = panel->GetPanelController(); + if (!controller) { + return; + } + controller->SetShowPanelImpl([weak = AceType::WeakClaim(this)]() { + auto panel = weak.Upgrade(); + if (panel) { + panel->ShowPanel(); + } + }); + controller->SetClosePanelImpl([weak = AceType::WeakClaim(this)]() { + auto panel = weak.Upgrade(); + if (panel) { + panel->ClosePanel(); + } + }); +} + +void PanelElement::ShowPanel() +{ + if (!panel_) { + return; + } + const auto context = context_.Upgrade(); + if (!context) { + return; + } + auto stackElement = context->GetLastStack(); + if (!stackElement) { + return; + } + auto slidingPanel = SlidingPanelComponent::Create(panel_); + stackElement->PushPanel(slidingPanel, panel_->GetPanelType() == PanelType::TEMP_DISPLAY); +} + +void PanelElement::ClosePanel() +{ + const auto context = context_.Upgrade(); + if (!context) { + return; + } + const auto& lastStack = context->GetLastStack(); + if (!lastStack) { + return; + } + lastStack->PopPanel(true); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/panel/panel_element.h b/frameworks/core/components/panel/panel_element.h new file mode 100644 index 00000000..ecdfad58 --- /dev/null +++ b/frameworks/core/components/panel/panel_element.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PANEL_PANEL_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PANEL_PANEL_ELEMENT_H + +#include "core/animation/animator.h" +#include "core/components/panel/panel_component.h" +#include "core/pipeline/base/composed_element.h" + +namespace OHOS::Ace { + +class PanelElement : public ComposedElement { + DECLARE_ACE_TYPE(PanelElement, ComposedElement); + +public: + explicit PanelElement(const ComposeId& id) : ComposedElement(id) {}; + ~PanelElement() override = default; + + void PerformBuild() override; + +private: + void ShowPanel(); + void ClosePanel(); + + RefPtr panel_; + WeakPtr animator_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PANEL_PANEL_ELEMENT_H diff --git a/frameworks/core/components/panel/render_sliding_panel.cpp b/frameworks/core/components/panel/render_sliding_panel.cpp new file mode 100644 index 00000000..e149a331 --- /dev/null +++ b/frameworks/core/components/panel/render_sliding_panel.cpp @@ -0,0 +1,513 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/panel/render_sliding_panel.h" + +#include "base/json/json_util.h" +#include "base/log/dump_log.h" +#include "base/log/event_report.h" +#include "core/animation/curve.h" +#include "core/animation/curves.h" +#include "core/animation/keyframe.h" +#include "core/animation/keyframe_animation.h" +#include "core/animation/spring_animation.h" +#include "core/components/common/layout/grid_system_manager.h" +#include "core/components/drag_bar/render_drag_bar.h" +#include "core/components/panel/sliding_panel_component.h" +#include "core/components/root/render_root.h" +#include "core/components/stack/stack_element.h" +#include "core/event/ace_event_helper.h" + +namespace OHOS::Ace { +namespace { + +constexpr int32_t ANIMATION_BASE_DURATION = 256; +constexpr uint32_t FIND_MAX_COUNT = 64; +constexpr Dimension BLANK_MIN_HEIGHT = 8.0_vp; +constexpr Dimension DRAG_UP_THRESHOLD = 48.0_vp; +constexpr double CONTENT_MIN_TOLERANCE = 0.01; +constexpr double VELOCITY_THRESHOLD = 1000.0; // Move 1000px per second. + +int32_t GetAnimationDuration(double delta, double dragRange) +{ + if (NearZero(dragRange)) { + return 0; + } + return static_cast(((std::abs(delta) / dragRange) + 1.0) * ANIMATION_BASE_DURATION); +} + +template +RefPtr FindChildOfClass(const RefPtr& parent) +{ + // BFS to find child in tree. + uint32_t findCount = 0; + auto searchQueue = parent->GetChildren(); // copy children to a queue + while (++findCount <= FIND_MAX_COUNT && !searchQueue.empty()) { + const auto child = searchQueue.front(); + searchQueue.pop_front(); + if (!child) { + continue; + } + if (AceType::InstanceOf(child)) { + return AceType::DynamicCast(child); + } + searchQueue.insert(searchQueue.end(), child->GetChildren().begin(), child->GetChildren().end()); + } + return RefPtr(); +} + +} // namespace + +std::string SlidingPanelSizeChangeEvent::ToJSONString() const +{ + auto jsonResult = JsonUtil::Create(false); + jsonResult->Put("height", height_); + jsonResult->Put("width", width_); + auto result = JsonUtil::Create(true); + result->Put("size", jsonResult); + std::string modeStr; + if (mode_ == PanelMode::FULL) { + modeStr = "full"; + } else if (mode_ == PanelMode::HALF) { + modeStr = "half"; + } else { + modeStr = "mini"; + } + result->Put("mode", modeStr.c_str()); + + return std::string(R"("sizechange",)").append(result->ToString()); +} + +RefPtr RenderSlidingPanel::Create() +{ + return AceType::MakeRefPtr(); +} + +void RenderSlidingPanel::Update(const RefPtr& component) +{ + auto slidingPanel = AceType::DynamicCast(component); + if (!slidingPanel) { + LOGE("slidingPanel update with nullptr"); + EventReport::SendRenderException(RenderExcepType::RENDER_COMPONENT_ERR); + return; + } + InitializeRecognizer(); + if (isFirstUpdate_) { + isFirstUpdate_ = false; + boxForBlank_ = RenderBox::Create(); + AddChild(boxForBlank_, 0); + boxForBlank_->Attach(GetContext()); + animator_ = AceType::MakeRefPtr(GetContext()); + } + hasBoxStyle_ = slidingPanel->HasBoxStyle(); + mode_ = slidingPanel->GetMode(); + type_ = slidingPanel->GetType(); + fullHeight_ = slidingPanel->GetFullHeight(); + halfHeight_ = slidingPanel->GetHalfHeight(); + miniHeight_ = slidingPanel->GetMiniHeight(); + onSizeChange_ = AceAsyncEvent&)>::Create( + slidingPanel->GetOnSizeChanged(), context_); + MarkNeedLayout(); +} + +void RenderSlidingPanel::PerformLayout() +{ + if (!InitializeLayoutProps()) { + return; + } + auto maxSize = GetLayoutParam().GetMaxSize(); + // SlidingPanelComponent's size is as large as the root's. + SetLayoutSize(maxSize); + if (isFirstLayout_) { + blankHeight_ = GetLayoutParam().GetMaxSize().Height(); + AnimateTo(defaultBlankHeights_[mode_], mode_); + } else { + InnerLayout(); + } + isFirstLayout_ = false; + previousSize_ = maxSize; +} + +bool RenderSlidingPanel::InitializeLayoutProps() +{ + // Only 2 children are allowed in RenderSlidingPanel + if (GetChildren().empty() || GetChildren().size() != 2) { + LOGE("Children size wrong in slide panel modal"); + return false; + } + if (!dragBar_) { + dragBar_ = FindChildOfClass(GetChildren().back()); + if (!dragBar_) { + LOGE("No drag bar in sliding panel. Cause error"); + return false; + } + } + auto maxSize = GetLayoutParam().GetMaxSize(); + if (defaultBlankHeights_.empty() || previousSize_ != maxSize) { + defaultBlankHeights_[PanelMode::MINI] = miniHeight_.second + ? maxSize.Height() - NormalizeToPx(miniHeight_.first) + : maxSize.Height() - NormalizeToPx(DRAG_UP_THRESHOLD); + defaultBlankHeights_[PanelMode::HALF] = + halfHeight_.second ? maxSize.Height() - NormalizeToPx(halfHeight_.first) : maxSize.Height() / 2; + defaultBlankHeights_[PanelMode::FULL] = + fullHeight_.second ? maxSize.Height() - NormalizeToPx(fullHeight_.first) : NormalizeToPx(BLANK_MIN_HEIGHT); + CheckHeightValidity(); + isFirstLayout_ = true; + fullHalfBoundary_ = defaultBlankHeights_[PanelMode::FULL] + + (defaultBlankHeights_[PanelMode::HALF] - defaultBlankHeights_[PanelMode::FULL]) / 2.0; + halfMiniBoundary_ = defaultBlankHeights_[PanelMode::HALF] + + (defaultBlankHeights_[PanelMode::MINI] - defaultBlankHeights_[PanelMode::HALF]) / 2.0; + fullMiniBoundary_ = defaultBlankHeights_[PanelMode::FULL] + + (defaultBlankHeights_[PanelMode::MINI] - defaultBlankHeights_[PanelMode::FULL]) / 2.0; + } + minBlankHeight_ = NormalizeToPx(BLANK_MIN_HEIGHT); + if (dragBar_ && !(dragBar_->HasClickArrowCallback())) { + SetDragBarCallBack(); + } + return true; +} + +void RenderSlidingPanel::CheckHeightValidity() +{ + auto minHeight = NormalizeToPx(BLANK_MIN_HEIGHT); + if (LessOrEqual(defaultBlankHeights_[PanelMode::MINI], minHeight)) { + defaultBlankHeights_[PanelMode::MINI] = minHeight; + } + if (LessOrEqual(defaultBlankHeights_[PanelMode::HALF], minHeight)) { + defaultBlankHeights_[PanelMode::HALF] = minHeight; + } + if (LessOrEqual(defaultBlankHeights_[PanelMode::FULL], minHeight)) { + defaultBlankHeights_[PanelMode::FULL] = minHeight; + } +} + +void RenderSlidingPanel::SetDragBarCallBack() +{ + dragBar_->SetClickArrowCallback([weak = WeakClaim(this)]() { + auto panel = weak.Upgrade(); + auto dragBar = panel->GetDragBar(); + if (!panel || !dragBar) { + return; + } + panel->previousMode_ = panel->mode_; + if (panel->mode_ == PanelMode::MINI) { + panel->mode_ = panel->type_ == PanelType::MINI_BAR ? PanelMode::FULL : PanelMode::HALF; + } else if (panel->mode_ == PanelMode::FULL) { + panel->mode_ = panel->type_ == PanelType::MINI_BAR ? PanelMode::MINI : PanelMode::HALF; + } else { + LOGD("not support click in half mode"); + } + panel->AnimateTo(panel->defaultBlankHeights_[panel->mode_], panel->mode_); + if (panel->previousMode_ != panel->mode_) { + panel->FireSizeChangeEvent(); + } + }); +} + +void RenderSlidingPanel::FireSizeChangeEvent() +{ + if (!onSizeChange_) { + return; + } + double height = + std::floor(GetLayoutSize().Height() - defaultBlankHeights_[mode_] - dragBar_->GetLayoutSize().Height()); + double width = std::floor(GetLayoutSize().Width()); + onSizeChange_(std::make_shared(mode_, width, height)); +} + +void RenderSlidingPanel::InnerLayout() +{ + LayoutParam innerLayout; + auto maxSize = GetLayoutParam().GetMaxSize(); + auto columnInfo = GridSystemManager::GetInstance().GetInfoByType(GridColumnType::PANEL); + columnInfo->GetParent()->BuildColumnWidth(); + auto maxWidth = columnInfo->GetWidth() + 2 * NormalizeToPx(columnInfo->GetParent()->GetGutterWidth()); + if (GridSystemManager::GetInstance().GetCurrentSize() == GridSizeType::SM) { + maxWidth = maxSize.Width(); + } + innerLayout.SetFixedSize(Size(maxWidth, blankHeight_)); + boxForBlank_->Layout(innerLayout); + boxForBlank_->SetPosition(Offset::Zero()); + auto contentHeight = maxSize.Height() - blankHeight_; + innerLayout.SetMinSize(Size()); + innerLayout.SetMaxSize(Size(maxWidth, contentHeight)); + auto boxForContent = GetChildren().back(); + boxForContent->Layout(innerLayout); + auto centerX = (maxSize.Width() - maxWidth) / 2; + boxForContent->SetPosition(Offset(centerX, blankHeight_)); + double viewPortHeight = maxSize.Height() - blankHeight_ - dragBar_->GetLayoutSize().Height(); + viewPort_ = Size(maxWidth, viewPortHeight); +} + +void RenderSlidingPanel::ResetContentHeight() +{ + AnimateTo(dragStartBlankHeight_, mode_); +} + +void RenderSlidingPanel::OnAnimationStop() +{ + isAnimating_ = false; +} + +void RenderSlidingPanel::InitializeRecognizer() +{ + if (!dragDetector_) { + dragDetector_ = AceType::MakeRefPtr(); + dragDetector_->SetOnDragStart([weak = WeakClaim(this)](const DragStartInfo& startInfo) { + auto panel = weak.Upgrade(); + if (panel) { + panel->HandleDragStart(startInfo.GetLocalLocation()); + } + }); + dragDetector_->SetOnDragUpdate([weakDrag = AceType::WeakClaim(this)](const DragUpdateInfo& info) { + auto panel = weakDrag.Upgrade(); + if (panel) { + panel->HandleDragUpdate(info.GetLocalLocation()); + } + }); + dragDetector_->SetOnDragEnd([weakDrag = AceType::WeakClaim(this)](const DragEndInfo& info) { + auto panel = weakDrag.Upgrade(); + if (panel) { + panel->HandleDragEnd(info.GetLocalLocation(), info.GetMainVelocity()); + } + }); + } +} + +bool RenderSlidingPanel::TouchTest(const Point& globalPoint, const Point& parentLocalPoint, + const TouchRestrict& touchRestrict, TouchTestResult& result) +{ + // Forbidden vertical swipe of all children in not full mode. + TouchRestrict newRestrict = touchRestrict; + if (mode_ != PanelMode::FULL) { + newRestrict.UpdateForbiddenType(TouchRestrict::SWIPE_VERTICAL); + } + if (!GetChildren().empty()) { + touchRect_ = GetChildren().back()->GetPaintRect(); + } + return RenderNode::TouchTest(globalPoint, parentLocalPoint, newRestrict, result); +} + +void RenderSlidingPanel::OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) +{ + if (isAnimating_) { + return; + } + if (dragDetector_) { + dragDetector_->SetCoordinateOffset(coordinateOffset); + result.emplace_back(dragDetector_); + } +} + +void RenderSlidingPanel::UpdateTouchRect() +{ + touchRect_ = GetPaintRect(); + if (GetChildren().size() < 2) { + return; + } + touchRect_ = GetChildren().back()->GetPaintRect(); +} + +void RenderSlidingPanel::HandleDragStart(const Offset& startPoint) +{ + if (isAnimating_) { + return; + } + dragStartPoint_ = startPoint; + dragStartBlankHeight_ = blankHeight_; +} + +void RenderSlidingPanel::HandleDragUpdate(const Offset& currentPoint) +{ + if (isAnimating_) { + return; + } + double targetBlankHeight = dragStartBlankHeight_ + currentPoint.GetY() - dragStartPoint_.GetY(); + + if (targetBlankHeight < minBlankHeight_) { + targetBlankHeight = minBlankHeight_; + } + // Do not drag to make page content height <= zero. + double maxBlankHeight = GetLayoutSize().Height() - CONTENT_MIN_TOLERANCE; + if (dragBar_) { + maxBlankHeight -= dragBar_->GetLayoutSize().Height(); + } + if (targetBlankHeight > maxBlankHeight) { + targetBlankHeight = maxBlankHeight; + } + blankHeight_ = targetBlankHeight; + MarkNeedLayout(); +} + +void RenderSlidingPanel::HandleDragEnd(const Offset& endPoint, double velocity) +{ + if (isAnimating_) { + return; + } + previousMode_ = mode_; + auto dragStart = dragStartPoint_.GetY(); + auto dragLen = endPoint.GetY() - dragStart; + switch (type_) { + case PanelType::MINI_BAR: { // FULL & MINI + CalculateModeTypeMini(dragLen, velocity); + break; + } + case PanelType::FOLDABLE_BAR: { // FULL & HALF & MINI + CalculateModeTypeFold(dragLen, velocity); + break; + } + case PanelType::TEMP_DISPLAY: { // FULL & HALF + CalculateModeTypeTemp(dragLen, velocity); + break; + } + default: { + LOGE("Unsupported type:%{public}d", type_); + return; + } + } + AnimateTo(defaultBlankHeights_[mode_], mode_); + if (previousMode_ != mode_) { + FireSizeChangeEvent(); + } +} + +void RenderSlidingPanel::CalculateModeTypeMini(double dragLen, double velocity) // FULL & MINI +{ + double currentPostion = defaultBlankHeights_[mode_] + dragLen; + if (std::abs(velocity) < VELOCITY_THRESHOLD) { + // Drag velocity not reached to threshold, mode based on the location. + if (currentPostion < fullMiniBoundary_) { + mode_ = PanelMode::FULL; + } else { + mode_ = PanelMode::MINI; + } + } else { + // Drag velocity reached to threshold, mode based on the drag direction. + if (velocity > 0.0) { + mode_ = PanelMode::MINI; + } else { + mode_ = PanelMode::FULL; + } + } +} + +void RenderSlidingPanel::CalculateModeTypeFold(double dragLen, double velocity) // FULL & HALF & MINI +{ + double currentPostion = defaultBlankHeights_[mode_] + dragLen; + if (std::abs(velocity) < VELOCITY_THRESHOLD) { + // Drag velocity not reached to threshold, mode based on the location. + if (currentPostion < fullHalfBoundary_) { + mode_ = PanelMode::FULL; + } else if (currentPostion < halfMiniBoundary_) { + mode_ = PanelMode::HALF; + } else { + mode_ = PanelMode::MINI; + } + } else { + // Drag velocity reached to threshold, mode based on the drag direction. + if (velocity > 0.0) { + if (currentPostion < defaultBlankHeights_[PanelMode::HALF]) { + mode_ = PanelMode::HALF; + } else { + mode_ = PanelMode::MINI; + } + } else { + if (currentPostion > defaultBlankHeights_[PanelMode::HALF]) { + mode_ = PanelMode::HALF; + } else { + mode_ = PanelMode::FULL; + } + } + } +} + +void RenderSlidingPanel::CalculateModeTypeTemp(double dragLen, double velocity) // FULL & HALF +{ + double currentPostion = defaultBlankHeights_[mode_] + dragLen; + if (std::abs(velocity) < VELOCITY_THRESHOLD) { + // Drag velocity not reached to threshold, mode based on the location. + if (currentPostion < fullHalfBoundary_) { + mode_ = PanelMode::FULL; + } else { + mode_ = PanelMode::HALF; + } + } else { + // Drag velocity reached to threshold, mode based on the drag direction. + if (velocity > 0.0) { + mode_ = PanelMode::HALF; + } else { + mode_ = PanelMode::FULL; + } + } +} + +void RenderSlidingPanel::AppendBlankHeightAnimation(double blankHeight, PanelMode mode) +{ + if (LessNotEqual(blankHeight_, 0.0) || NearEqual(blankHeight_, blankHeight)) { + LOGE("Append animation failed. Blank height less than zero."); + return; + } + + // Mass: 1.0, stiffness: 100.0f, damping: 20.0f. For Critical Damped. + auto springProperty = AceType::MakeRefPtr(1.0f, 100.0f, 20.0f); + auto heightAnimation = AceType::MakeRefPtr(springProperty); + heightAnimation->AddListener([weak = AceType::WeakClaim(this), + start = blankHeight_, end = blankHeight, mode](const double& value) { + auto panel = weak.Upgrade(); + if (!panel) { + LOGE("Panel is null."); + return; + } + if (value > 1.0) { + panel->dragBar_->ShowInPanelMode(mode); + } + panel->blankHeight_ = start + (end - start) * value; + panel->MarkNeedLayout(); + }); + animator_->AddInterpolator(heightAnimation); +} + +void RenderSlidingPanel::AnimateTo(double blankHeight, PanelMode mode) +{ + isAnimating_ = true; + animator_->ClearInterpolators(); + animator_->ClearAllListeners(); + if (animator_->IsRunning()) { + animator_->Stop(); + } + animator_->AddStopListener([weak = WeakClaim(this), mode]() { + auto panel = weak.Upgrade(); + if (panel && panel->dragBar_) { + panel->OnAnimationStop(); + panel->dragBar_->ShowInPanelMode(mode); + } + }); + AppendBlankHeightAnimation(blankHeight, mode); + auto dragRange = GetLayoutParam().GetMaxSize().Height(); + animator_->SetDuration(GetAnimationDuration(blankHeight - blankHeight_, dragRange)); + animator_->SetFillMode(FillMode::FORWARDS); + animator_->Forward(); +} + +void RenderSlidingPanel::Dump() +{ + if (DumpLog::GetInstance().GetDumpFile()) { + DumpLog::GetInstance().AddDesc(std::string("PanelMode:").append(std::to_string(static_cast(mode_)))); + DumpLog::GetInstance().AddDesc(std::string("blankHeight: ").append(std::to_string(blankHeight_))); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/panel/render_sliding_panel.h b/frameworks/core/components/panel/render_sliding_panel.h new file mode 100644 index 00000000..85778254 --- /dev/null +++ b/frameworks/core/components/panel/render_sliding_panel.h @@ -0,0 +1,139 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PANEL_RENDER_SLIDING_PANEL_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PANEL_RENDER_SLIDING_PANEL_H + +#include "core/animation/animator.h" +#include "core/components/box/render_box.h" +#include "core/components/drag_bar/render_drag_bar.h" +#include "core/components/panel/sliding_panel_component.h" +#include "core/components/scroll/render_single_child_scroll.h" +#include "core/gestures/click_recognizer.h" +#include "core/gestures/drag_recognizer.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class ACE_EXPORT SlidingPanelSizeChangeEvent : public BaseEventInfo, public EventToJSONStringAdapter { + DECLARE_RELATIONSHIP_OF_CLASSES(SlidingPanelSizeChangeEvent, BaseEventInfo, EventToJSONStringAdapter); + +public: + SlidingPanelSizeChangeEvent(PanelMode mode, double width, double height) + : BaseEventInfo("SlidingPanelSizeChangeEvent"), mode_(mode), width_(width), height_(height) + {} + + ~SlidingPanelSizeChangeEvent() = default; + + double GetWidth() const + { + return width_; + } + + double GetHeight() const + { + return height_; + } + + PanelMode GetMode() const + { + return mode_; + } + + std::string ToJSONString() const override; + +private: + PanelMode mode_ = PanelMode::HALF; + double width_ = 0.0; + double height_ = 0.0; +}; + +class RenderSlidingPanel : public RenderNode { + DECLARE_ACE_TYPE(RenderSlidingPanel, RenderNode); + +public: + static RefPtr Create(); + void Update(const RefPtr& component) override; + void PerformLayout() override; + bool TouchTest(const Point& globalPoint, const Point& parentLocalPoint, const TouchRestrict& touchRestrict, + TouchTestResult& result) override; + + void ResetContentHeight(); + void OnAnimationStop(); + + double GetBlankHeight() const + { + return blankHeight_; + } + + const RefPtr& GetDragBar() const + { + return dragBar_; + } + + void UpdateTouchRect() override; + + void Dump() override; + +protected: + void OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) override; + + RefPtr dragBar_; + double blankHeight_ = 0.0; + PanelMode mode_ = PanelMode::HALF; + PanelMode previousMode_ = PanelMode::HALF; + PanelType type_ = PanelType::FOLDABLE_BAR; + bool hasBoxStyle_ = false; + std::function&)> onSizeChange_; + +private: + void InitializeRecognizer(); + bool InitializeLayoutProps(); + void SetDragBarCallBack(); + void FireSizeChangeEvent(); + void HandleDragStart(const Offset& startPoint); + void HandleDragUpdate(const Offset& currentPoint); + void HandleDragEnd(const Offset& endPoint, double velocity); + void CalculateModeTypeMini(double dragLen, double velocity); + void CalculateModeTypeFold(double dragLen, double velocity); + void CalculateModeTypeTemp(double dragLen, double velocity); + void AnimateTo(double blankHeight, PanelMode mode); + void AppendBlankHeightAnimation(double blankHeight, PanelMode mode); + void InnerLayout(); + void CheckHeightValidity(); + + RefPtr boxForBlank_; + RefPtr animator_; + RefPtr dragDetector_; + std::unordered_map defaultBlankHeights_; + double minBlankHeight_ = 0.0; + bool isFirstUpdate_ = true; + bool isFirstLayout_ = true; + Offset dragStartPoint_; + double dragStartBlankHeight_ = 0.0; + bool isAnimating_ = false; + double fullHalfBoundary_ = 0.0; + double halfMiniBoundary_ = 0.0; + double fullMiniBoundary_ = 0.0; + std::pair miniHeight_ = { 0.0_vp, false }; + std::pair halfHeight_ = { 0.0_vp, false }; + std::pair fullHeight_ = { 0.0_vp, false }; + Size previousSize_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PANEL_RENDER_SLIDING_PANEL_H diff --git a/frameworks/core/components/panel/sliding_panel_component.cpp b/frameworks/core/components/panel/sliding_panel_component.cpp new file mode 100644 index 00000000..29a4ca34 --- /dev/null +++ b/frameworks/core/components/panel/sliding_panel_component.cpp @@ -0,0 +1,126 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/panel/sliding_panel_component.h" + +#include "core/components/box/box_component.h" +#include "core/components/drag_bar/drag_bar_component.h" +#include "core/components/drop_filter/drop_filter_component.h" +#include "core/components/flex/flex_component.h" +#include "core/components/flex/flex_item_component.h" +#include "core/components/focus_collaboration/focus_collaboration_component.h" +#include "core/components/panel/render_sliding_panel.h" +#include "core/components/panel/sliding_panel_element.h" + +namespace OHOS::Ace { +namespace { + +const auto DRAG_BAR_RADIUS = 24.0_vp; +const Color BG_COLOR = Color(0xfff1f3f5); +const Color BLACK_BG = Color(0x33000000); + +} // namespace + +RefPtr SlidingPanelComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +RefPtr SlidingPanelComponent::Create(const RefPtr& component) +{ + auto child = component->GetChild(); + auto hasBoxStyle = component->HasBoxStyle(); + auto boxStyle = component->GetBoxStyle(); + auto slidingPanel = AceType::MakeRefPtr(); + slidingPanel->SetOnSizeChanged(component->GetOnSizeChanged()); + slidingPanel->SetChild(child); + slidingPanel->SetHasBoxStyle(hasBoxStyle); + slidingPanel->SetType(component->GetPanelType()); + slidingPanel->SetFullHeight(component->GetFullHeight()); + slidingPanel->SetHalfHeight(component->GetHalfHeight()); + slidingPanel->SetMiniHeight(component->GetMiniHeight()); + slidingPanel->BuildInnerChild(boxStyle, component); + auto box = AceType::MakeRefPtr(); + box->SetChild(slidingPanel); + auto decoration = AceType::MakeRefPtr(); + if (component->GetPanelType() == PanelType::TEMP_DISPLAY) { + decoration->SetBackgroundColor(BLACK_BG); + } + box->SetBackDecoration(decoration); + auto focusCollaboration = AceType::MakeRefPtr(); + focusCollaboration->InsertChild(0, box); + auto dropFilter = AceType::MakeRefPtr(focusCollaboration, 0, 0); + if (component->GetPanelType() == PanelType::TEMP_DISPLAY) { + dropFilter->SetSigmaX(0.5); + dropFilter->SetSigmaY(0.5); + } + dropFilter->SetUsePanelTouchRect(true); + return dropFilter; +} + +RefPtr SlidingPanelComponent::CreateRenderNode() +{ + return RenderSlidingPanel::Create(); +} + +// Build SlidingPanel structure +void SlidingPanelComponent::BuildInnerChild(const RefPtr& boxStyle, const RefPtr& panel) +{ + auto mode = panel->GetPanelMode(); + auto hasBoxStyle = panel->HasBoxStyle(); + auto hasDecoration = panel->HasDecorationStyle(); + auto textDirection = panel->GetTextDirection(); + auto hasDragBar = panel->HasDragBar(); + mode_ = mode; + auto boxForContent = AceType::MakeRefPtr(); + if (hasBoxStyle) { + boxForContent->SetPadding(boxStyle->GetPadding()); + boxForContent->SetMargin(boxStyle->GetMargin()); + } + boxForContent->SetFlex(BoxFlex::FLEX_X); + auto dragBar = AceType::MakeRefPtr(); + dragBar->SetPanelMode(mode); + dragBar->SetHasDragBar(hasDragBar); + auto backDecoration = AceType::MakeRefPtr(); + auto frontDecoration = AceType::MakeRefPtr(); + if (hasDecoration) { + backDecoration = boxStyle->GetBackDecoration(); + frontDecoration = boxStyle->GetFrontDecoration(); + } + if (!panel->HasBorderStyle()) { + Border border; + border.SetTopLeftRadius(Radius(DRAG_BAR_RADIUS)); + border.SetTopRightRadius(Radius(DRAG_BAR_RADIUS)); + backDecoration->SetBorder(border); + } + if (!panel->HasBackgroundColor() && !backDecoration->GetImage()) { + backDecoration->SetBackgroundColor(BG_COLOR); + } + auto column = + AceType::MakeRefPtr(FlexAlign::FLEX_START, FlexAlign::CENTER, std::list>()); + column->SetCrossAxisSize(CrossAxisSize::MAX); + column->SetTextDirection(textDirection); + auto flexItem = AceType::MakeRefPtr(1, 1, 0); + flexItem->SetAlignSelf(FlexAlign::FLEX_START); + flexItem->SetChild(GetChild()); + column->AppendChild(dragBar); + column->AppendChild(flexItem); + boxForContent->SetBackDecoration(backDecoration); + boxForContent->SetFrontDecoration(frontDecoration); + boxForContent->SetChild(column); + SetChild(boxForContent); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/panel/sliding_panel_component.h b/frameworks/core/components/panel/sliding_panel_component.h new file mode 100644 index 00000000..d59a302d --- /dev/null +++ b/frameworks/core/components/panel/sliding_panel_component.h @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PANEL_SLIDING_PANEL_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PANEL_SLIDING_PANEL_COMPONENT_H + +#include "core/components/box/box_component.h" +#include "core/components/common/layout/constants.h" +#include "core/components/common/properties/decoration.h" +#include "core/components/panel/panel_component.h" +#include "core/pipeline/base/sole_child_component.h" + +namespace OHOS::Ace { + +class ACE_EXPORT SlidingPanelComponent : public SoleChildComponent { + DECLARE_ACE_TYPE(SlidingPanelComponent, SoleChildComponent); + +public: + static RefPtr Create(const RefPtr& component); + + RefPtr CreateElement() override; + + RefPtr CreateRenderNode() override; + + PanelMode GetMode() const + { + return mode_; + } + + void SetMode(PanelMode mode) + { + mode_ = mode; + } + + void SetHasBoxStyle(bool hasBoxStyle) + { + hasBoxStyle_ = hasBoxStyle; + } + + bool HasBoxStyle() const + { + return hasBoxStyle_; + } + + const EventMarker& GetOnSizeChanged() const + { + return onSizeChanged_; + } + + void SetOnSizeChanged(const EventMarker& value) + { + onSizeChanged_ = value; + } + + const std::pair& GetMiniHeight() const + { + return miniHeight_; + } + + void SetMiniHeight(const std::pair& miniHeight) + { + miniHeight_ = miniHeight; + } + + const std::pair& GetHalfHeight() const + { + return halfHeight_; + } + + void SetHalfHeight(const std::pair& halfHeight) + { + halfHeight_ = halfHeight; + } + + const std::pair& GetFullHeight() const + { + return fullHeight_; + } + + void SetFullHeight(const std::pair& fullHeight) + { + fullHeight_ = fullHeight; + } + + PanelType GetType() const + { + return type_; + } + + void SetType(PanelType type) + { + type_ = type; + } + +private: + void BuildInnerChild(const RefPtr& boxStyle, const RefPtr& panel); + + PanelMode mode_ = PanelMode::HALF; + PanelType type_ = PanelType::FOLDABLE_BAR; + bool hasBoxStyle_ = false; + EventMarker onSizeChanged_; + std::pair miniHeight_ = { 0.0_vp, false }; + std::pair halfHeight_ = { 0.0_vp, false }; + std::pair fullHeight_ = { 0.0_vp, false }; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PANEL_SLIDING_PANEL_COMPONENT_H diff --git a/frameworks/core/components/panel/sliding_panel_element.h b/frameworks/core/components/panel/sliding_panel_element.h new file mode 100644 index 00000000..9030b730 --- /dev/null +++ b/frameworks/core/components/panel/sliding_panel_element.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PANEL_SLIDING_PANEL_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PANEL_SLIDING_PANEL_ELEMENT_H + +#include "core/animation/animator.h" +#include "core/pipeline/base/sole_child_element.h" + +namespace OHOS::Ace { + +class SlidingPanelElement : public SoleChildElement { + DECLARE_ACE_TYPE(SlidingPanelElement, SoleChildElement); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PANEL_SLIDING_PANEL_ELEMENT_H diff --git a/frameworks/core/components/picker/BUILD.gn b/frameworks/core/components/picker/BUILD.gn new file mode 100644 index 00000000..4275cd57 --- /dev/null +++ b/frameworks/core/components/picker/BUILD.gn @@ -0,0 +1,40 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("picker") { + sources = [ + "flutter_render_picker_base.cpp", + "flutter_render_picker_column.cpp", + "picker_animation.cpp", + "picker_animation_controller.cpp", + "picker_base_component.cpp", + "picker_base_element.cpp", + "picker_column_component.cpp", + "picker_column_element.cpp", + "picker_date_component.cpp", + "picker_datetime_component.cpp", + "picker_multitext_component.cpp", + "picker_option_component.cpp", + "picker_option_element.cpp", + "picker_text_component.cpp", + "picker_time_component.cpp", + "picker_value_element.cpp", + "render_picker_base.cpp", + "render_picker_column.cpp", + "render_picker_option.cpp", + "render_picker_value.cpp", + "toss_animation_controller.cpp", + ] +} diff --git a/frameworks/core/components/picker/flutter_render_picker_base.cpp b/frameworks/core/components/picker/flutter_render_picker_base.cpp new file mode 100644 index 00000000..aa09b57c --- /dev/null +++ b/frameworks/core/components/picker/flutter_render_picker_base.cpp @@ -0,0 +1,152 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/picker/flutter_render_picker_base.h" + +#include "third_party/skia/include/effects/SkGradientShader.h" + +namespace OHOS::Ace { +namespace { + +const uint32_t SEARCH_MAX_DEPTH = 16; + +} // namespace + +RefPtr RenderPickerBase::Create() +{ + return AceType::MakeRefPtr(); +} + +RenderLayer FlutterRenderPickerBase::GetRenderLayer() +{ + if (!layer_) { + layer_ = AceType::MakeRefPtr(); + } + + // the alpha rate for disabled is 0.4. 255 * 0.4 = 102. 255 means no alpha. + layer_->SetAlpha((disabled_ ? 102 : 255)); + return AceType::RawPtr(layer_); +} + +Rect FlutterRenderPickerBase::GetOptionsRect(const Offset& offset, const RefPtr& pickerColumn) +{ + // Calculate rect of all options. + double top = offset.GetY() + pickerColumn->GetPosition().GetY(); + double left = offset.GetX() + pickerColumn->GetPosition().GetX() - pickerColumn->GetXOffset(); + + // Get pickerColumn's relative position. + auto parent = pickerColumn->GetParent().Upgrade(); + uint32_t depth = 0; + while ((parent) && (AceType::RawPtr(parent) != this) && (++depth < SEARCH_MAX_DEPTH)) { + top += parent->GetPosition().GetY(); + left += parent->GetPosition().GetX(); + parent = parent->GetParent().Upgrade(); + } + + // Get first and last options relative position. + auto bottom = top + pickerColumn->GetLayoutSize().Height(); + return Rect(left, top, columnParent_->GetLayoutSize().Width(), bottom - top); +} + +void FlutterRenderPickerBase::Paint(RenderContext& context, const Offset& offset) +{ + if (layer_) { + layer_->SetOffset(offset.GetX(), offset.GetY()); + } + RenderNode::Paint(context, offset); + auto canvas = ScopedCanvas::Create(context); + if (!canvas) { + LOGE("Paint canvas is null"); + return; + } + if (!data_) { + return; + } + auto theme = data_->GetTheme(); + if (columns_.empty() || !theme || !box_ || !columnParent_) { + return; + } + auto anchorColumn = GetTextDirection() == TextDirection::RTL ? columns_.back() : columns_.front(); + if (!anchorColumn) { + return; + } + auto dividerThickness = NormalizeToPx(theme->GetDividerThickness()); + if (NearZero(dividerThickness) && NearZero(theme->GetGradientHeight().Value())) { + // No divider and no gradient, directly return. + return; + } + // Draw two dividers on both sides of selected option. + flutter::Paint paint; + flutter::PaintData paintData; + paint.paint()->setColor(theme->GetDividerColor().GetValue()); + auto rect = GetOptionsRect(offset, anchorColumn); + auto dividerSpacing = NormalizeToPx(theme->GetDividerSpacing()); + double upperLine = rect.Top() + rect.Height() / 2.0 - dividerSpacing / 2.0; + double downLine = rect.Top() + rect.Height() / 2.0 + dividerSpacing / 2.0; + if (!NearZero(dividerThickness) && !data_->GetSubsidiary()) { + canvas->drawRect(rect.Left(), upperLine, rect.Right(), upperLine + dividerThickness, paint, paintData); + canvas->drawRect(rect.Left(), downLine, rect.Right(), downLine + dividerThickness, paint, paintData); + } + // Paint gradient at top and bottom. + PaintGradient(canvas, offset, rect, theme); +} + +void FlutterRenderPickerBase::PaintGradient( + ScopedCanvas& canvas, const Offset& offset, const Rect& rect, const RefPtr& theme) +{ + if (data_ && data_->SubsidiaryShowed()) { + return; + } + + double gradientHeight = NormalizeToPx(theme->GetGradientHeight()); + if (NearZero(gradientHeight)) { + return; + } + if (data_ && data_->GetIsDialog()) { + // Paint gradient rect over the picker content. + flutter::Paint paint; + flutter::PaintData paintData; + SkPoint beginPoint = SkPoint::Make(SkDoubleToScalar(rect.Left()), SkDoubleToScalar(rect.Top())); + SkPoint endPoint = SkPoint::Make(SkDoubleToScalar(rect.Left()), SkDoubleToScalar(rect.Bottom())); + SkPoint points[2] = { beginPoint, endPoint }; + auto backDecoration = theme->GetPopupDecoration(false); + Color endColor = backDecoration ? backDecoration->GetBackgroundColor() : Color::WHITE; + Color middleColor = endColor.ChangeAlpha(0); + SkColor colors[] = { endColor.GetValue(), middleColor.GetValue(), middleColor.GetValue(), endColor.GetValue() }; + const float stopPositions[] = { 0.0f, gradientHeight / rect.Height(), + (rect.Height() - gradientHeight) / rect.Height(), 1.0f }; +#ifdef USE_SYSTEM_SKIA + paint.paint()->setShader( + SkGradientShader::MakeLinear(points, colors, stopPositions, std::size(colors), SkShader::kClamp_TileMode)); +#else + paint.paint()->setShader( + SkGradientShader::MakeLinear(points, colors, stopPositions, std::size(colors), SkTileMode::kClamp)); +#endif + canvas->drawRect(rect.Left(), rect.Top(), rect.Right(), rect.Bottom(), paint, paintData); + return; + } + // Use layer to apply gradient effect. + if (!layer_) { + return; + } + layer_->SetGradientRect(rect); + std::vector points { Point(0.0, 0.0), Point(0.0, gradientHeight), Point(0.0, rect.Height() - gradientHeight), + Point(0.0, rect.Height()) }; + std::vector colors { Color(0x00000000), Color(0xff000000), Color(0xff000000), Color(0x00000000) }; + layer_->SetPoints(points); + layer_->SetColors(colors); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/picker/flutter_render_picker_base.h b/frameworks/core/components/picker/flutter_render_picker_base.h new file mode 100644 index 00000000..8b63c6ef --- /dev/null +++ b/frameworks/core/components/picker/flutter_render_picker_base.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_FLUTTER_RENDER_PICKER_BASE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_FLUTTER_RENDER_PICKER_BASE_H + +#include "core/components/picker/render_picker_base.h" +#include "core/pipeline/base/scoped_canvas_state.h" +#include "core/pipeline/layers/gradient_layer.h" + +namespace OHOS::Ace { + +class FlutterRenderPickerBase : public RenderPickerBase { + DECLARE_ACE_TYPE(FlutterRenderPickerBase, RenderPickerBase); + +public: + FlutterRenderPickerBase() = default; + ~FlutterRenderPickerBase() override = default; + + void Paint(RenderContext& context, const Offset& offset) override; + RenderLayer GetRenderLayer() override; + +private: + void PaintGradient(ScopedCanvas& canvas, const Offset& offset, const Rect& rect, const RefPtr& theme); + Rect GetOptionsRect(const Offset& offset, const RefPtr& pickerColumn); + + RefPtr layer_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_FLUTTER_RENDER_PICKER_BASE_H diff --git a/frameworks/core/components/picker/flutter_render_picker_column.cpp b/frameworks/core/components/picker/flutter_render_picker_column.cpp new file mode 100644 index 00000000..c5684e7c --- /dev/null +++ b/frameworks/core/components/picker/flutter_render_picker_column.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/picker/flutter_render_picker_column.h" + +namespace OHOS::Ace { + +RefPtr RenderPickerColumn::Create() +{ + return AceType::MakeRefPtr(); +} + +RenderLayer FlutterRenderPickerColumn::GetRenderLayer() +{ + if (!layer_) { + layer_ = AceType::MakeRefPtr(255, 0.0, 0.0); + } + return AceType::RawPtr(layer_); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/picker/flutter_render_picker_column.h b/frameworks/core/components/picker/flutter_render_picker_column.h new file mode 100644 index 00000000..360c9fc5 --- /dev/null +++ b/frameworks/core/components/picker/flutter_render_picker_column.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_FLUTTER_RENDER_PICKER_COLUMN_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_FLUTTER_RENDER_PICKER_COLUMN_H + +#include "core/components/picker/render_picker_column.h" +#include "core/pipeline/layers/opacity_layer.h" + +namespace OHOS::Ace { + +class FlutterRenderPickerColumn final : public RenderPickerColumn { + DECLARE_ACE_TYPE(FlutterRenderPickerColumn, RenderPickerColumn); + +public: + FlutterRenderPickerColumn() = default; + ~FlutterRenderPickerColumn() override = default; + + RenderLayer GetRenderLayer() override; + +private: + RefPtr layer_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_FLUTTER_RENDER_PICKER_COLUMN_H diff --git a/frameworks/core/components/picker/picker_animation.cpp b/frameworks/core/components/picker/picker_animation.cpp new file mode 100644 index 00000000..e75a83ae --- /dev/null +++ b/frameworks/core/components/picker/picker_animation.cpp @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "picker_animation.h" + +namespace OHOS::Ace { + +void PickerAnimation::Init() +{ + animation_ = AceType::MakeRefPtr>(start_, end_, curve_); + animation_->AddListener(Animation::ValueCallback(callback_)); + controller_ = AceType::MakeRefPtr(pipe_); + controller_->SetDuration(duration_); + controller_->SetStartDelay(delay_); +} + +void PickerAnimation::Play() +{ + if (!controller_ || !animation_) { + return; + } + + controller_->ClearInterpolators(); + controller_->AddInterpolator(animation_); + controller_->Play(); +} + +void PickerAnimation::Stop() +{ + if (controller_) { + controller_->Finish(); + } +} + +} // namespace OHOS::Ace + diff --git a/frameworks/core/components/picker/picker_animation.h b/frameworks/core/components/picker/picker_animation.h new file mode 100644 index 00000000..07068638 --- /dev/null +++ b/frameworks/core/components/picker/picker_animation.h @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_ANIMATION_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_ANIMATION_H + +#include "core/animation/animator.h" +#include "core/animation/curve.h" +#include "core/animation/curve_animation.h" +#include "core/animation/curves.h" +#include "core/pipeline/pipeline_context.h" + +namespace OHOS::Ace { + +class PickerAnimation : public virtual AceType { + DECLARE_ACE_TYPE(PickerAnimation, AceType); + +public: + PickerAnimation() = delete; + ~PickerAnimation() = default; + PickerAnimation(const WeakPtr& pipe, double start, double end, int delay, int duration, + const RefPtr& curve, const std::function& callback) + : start_(start), end_(end), delay_(delay), duration_(duration) + { + curve_ = curve; + callback_ = callback; + pipe_ = pipe; + Init(); + } + + void Play(); + + void Stop(); + + void AddStopCallback(const std::function& value) + { + if (controller_) { + controller_->AddStopListener(value); + } + } + + void ClearStopCallback() + { + if (!controller_) { + return; + } + controller_->ClearStopListeners(); + } + +private: + void Init(); + + double start_ = 0.0; + double end_ = 0.0; + int delay_ = 0; + int duration_ = 0; + + WeakPtr pipe_; + RefPtr curve_; + std::function callback_; + RefPtr> animation_; + RefPtr controller_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_ANIMATION_H diff --git a/frameworks/core/components/picker/picker_animation_controller.cpp b/frameworks/core/components/picker/picker_animation_controller.cpp new file mode 100644 index 00000000..cacec4d8 --- /dev/null +++ b/frameworks/core/components/picker/picker_animation_controller.cpp @@ -0,0 +1,485 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "picker_animation_controller.h" + +namespace OHOS::Ace { + +void PickerAnimationController::CreateTriangleAnimation() +{ + WeakPtr weak = AceType::WeakClaim(this); + // it is fixed. time start from 0.0ms to 300ms. angle start from 0.0 to -PI which is 3.14 + inTriangle_ = + AceType::MakeRefPtr(pipe_, 0.0, -3.14, 0, 300, Curves::SHARP, [weak](double value) { + auto ref = weak.Upgrade(); + if (!ref) { + return; + } + auto triangle = ref->triangle_.Upgrade(); + if (!triangle) { + return; + } + triangle->UpdateAngle(value); + }); + // it is fixed. time start from 0.0ms to 300ms. angle start from -PI (3.14) to 0.0 + outTriangle_ = AceType::MakeRefPtr(pipe_, -3.14, 0.0, 0, 300, Curves::SHARP, [weak](double value) { + auto ref = weak.Upgrade(); + if (!ref) { + return; + } + auto triangle = ref->triangle_.Upgrade(); + if (!triangle) { + return; + } + triangle->UpdateAngle(value); + }); +} + +void PickerAnimationController::CreateMovingAnimation() +{ + WeakPtr weak = AceType::WeakClaim(this); + inYearMoving_ = // position moving from 0% to 100% (1.0), time from 0ms to 500ms. + AceType::MakeRefPtr(pipe_, 0.0, 1.0, 0, 500, Curves::FRICTION, [weak](double value) { + auto ref = weak.Upgrade(); + if (!ref) { + return; + } + auto pickerColumn = ref->year_.Upgrade(); + if (!pickerColumn) { + LOGW("year column is null in picker animation."); + return; + } + value = ref->yearStart_ + (ref->yearEnd_ - ref->yearStart_) * value; + pickerColumn->UpdateOffset(value); + }); + inMonthMoving_ = // position from 0% to 100% (1.0), time from 0ms to 500ms + AceType::MakeRefPtr(pipe_, 0.0, 1.0, 0, 500, Curves::FRICTION, [weak](double value) { + auto ref = weak.Upgrade(); + if (!ref) { + return; + } + value = ref->monthStart_ + (ref->monthEnd_ - ref->monthStart_) * value; + auto pickerColumn = ref->month_.Upgrade(); + if (pickerColumn) { + pickerColumn->UpdateOffset(value); + } else { + LOGW("month column is null in picker animation."); + } + pickerColumn = ref->monthDay_.Upgrade(); + if (pickerColumn) { + pickerColumn->UpdateOffset(value + ref->monthEnd_ - ref->monthStart_); + } + }); + inDayMoving_ = // positin from 0% to 100% (1.0), time from 0ms to 500ms. + AceType::MakeRefPtr(pipe_, 0.0, 1.0, 0, 500, Curves::FRICTION, [weak](double value) { + auto ref = weak.Upgrade(); + if (!ref) { + return; + } + auto pickerColumn = ref->day_.Upgrade(); + if (!pickerColumn) { + LOGW("day column is null in picker animation."); + return; + } + value = ref->dayStart_ + (ref->dayEnd_ - ref->dayStart_) * value; + pickerColumn->UpdateOffset(value); + }); + + outYearMoving_ = // position from 0% to 100% (1.0), time from 0ms to 500ms. + AceType::MakeRefPtr(pipe_, 0.0, 1.0, 0, 500, Curves::FRICTION, [weak](double value) { + auto ref = weak.Upgrade(); + if (!ref) { + return; + } + auto pickerColumn = ref->year_.Upgrade(); + if (!pickerColumn) { + return; + } + value = ref->yearEnd_ + (ref->yearStart_ - ref->yearEnd_) * value; + pickerColumn->UpdateOffset(value); + }); + outMonthMoving_ = // posotion from 0% to 100% (1.0), time from 0ms to 500ms + AceType::MakeRefPtr(pipe_, 0.0, 1.0, 0, 500, Curves::FRICTION, [weak](double value) { + auto ref = weak.Upgrade(); + if (!ref) { + return; + } + value = ref->monthEnd_ + (ref->monthStart_ - ref->monthEnd_) * value; + auto pickerColumn = ref->month_.Upgrade(); + if (pickerColumn) { + pickerColumn->UpdateOffset(value); + } + pickerColumn = ref->monthDay_.Upgrade(); + if (pickerColumn) { + pickerColumn->UpdateOffset(value + ref->monthEnd_ - ref->monthStart_); + } + }); + outDayMoving_ = // position from 0% to 100% (1.0), time from 0ms to 500ms. + AceType::MakeRefPtr(pipe_, 0.0, 1.0, 0, 500, Curves::FRICTION, [weak](double value) { + auto ref = weak.Upgrade(); + if (!ref) { + return; + } + auto pickerColumn = ref->day_.Upgrade(); + if (!pickerColumn) { + return; + } + value = ref->dayEnd_ + (ref->dayStart_ - ref->dayEnd_) * value; + pickerColumn->UpdateOffset(value); + }); +} + +void PickerAnimationController::CreateInOpacityAnimation() +{ + WeakPtr weak = AceType::WeakClaim(this); + inOldColumnOpacity_ = // opacity from 255 to 0.0, time from 0ms to 150ms. + AceType::MakeRefPtr(pipe_, 255.0, 0.0, 0, 150, Curves::LINEAR, [weak](double value) { + auto ref = weak.Upgrade(); + if (!ref) { + return; + } + auto column = ref->monthDay_.Upgrade(); + if (column) { + column->UpdateColumnOpacity(value); + } + column = ref->amPm_.Upgrade(); + if (column) { + column->UpdateColumnOpacity(value); + } + column = ref->hour_.Upgrade(); + if (column) { + column->UpdateColumnOpacity(value); + } + column = ref->minute_.Upgrade(); + if (column) { + column->UpdateColumnOpacity(value); + } + column = ref->second_.Upgrade(); + if (column) { + column->UpdateColumnOpacity(value); + } + }); + inMonthDayOpacity_ = // opacity from 0.0 to 255, time from 0ms to 150ms. + AceType::MakeRefPtr(pipe_, 0.0, 255.0, 0, 150, Curves::LINEAR, [weak](double value) { + auto ref = weak.Upgrade(); + if (!ref) { + return; + } + auto column = ref->month_.Upgrade(); + if (column) { + column->UpdateColumnOpacity(value); + } + column = ref->day_.Upgrade(); + if (column) { + column->UpdateColumnOpacity(value); + } + }); + inYearOpacity_ = // opacity from 0.0 to 255, time from 50ms to 150ms. + AceType::MakeRefPtr(pipe_, 0.0, 255.0, 100, 150, Curves::LINEAR, [weak](double value) { + auto ref = weak.Upgrade(); + if (!ref) { + return; + } + auto column = ref->year_.Upgrade(); + if (column) { + column->UpdateColumnOpacity(value); + } + }); + inLunarButtonsOpacity_ = // opacity from 255 to 0, time from 0ms to 150ms. + AceType::MakeRefPtr(pipe_, 255.0, 0.0, 0, 150, Curves::LINEAR, [weak](double value) { + auto ref = weak.Upgrade(); + if (!ref) { + return; + } + auto lunar = ref->lunar_.Upgrade(); + if (lunar) { + lunar->UpdateOpacity(static_cast(value)); + } else { + LOGW("lunar display is null in picker animation."); + } + auto buttons = ref->buttons_.Upgrade(); + if (buttons) { + buttons->UpdateOpacity(static_cast(value)); + } else { + LOGW("buttons display is null in picker animation."); + } + }); +} + +void PickerAnimationController::InitColumnOpacity(const RefPtr& oldColumn, + const RefPtr& newColumn) +{ + if (newColumn != oldColumn && newColumn) { + newColumn->UpdateColumnOpacity(0.0); + } +} + +void PickerAnimationController::CreateOutOpacityAnimation() +{ + WeakPtr weak = AceType::WeakClaim(this); + outOldColumnOpacity_ = // opacity from 0 to 255, time from 150ms to 150ms + AceType::MakeRefPtr(pipe_, 0.0, 255.0, 150, 150, Curves::LINEAR, [weak](double value) { + auto ref = weak.Upgrade(); + if (!ref) { + return; + } + auto column = ref->monthDay_.Upgrade(); + if (column) { + column->UpdateColumnOpacity(value); + } + column = ref->amPm_.Upgrade(); + if (column) { + column->UpdateColumnOpacity(value); + } + column = ref->hour_.Upgrade(); + if (column) { + column->UpdateColumnOpacity(value); + } + column = ref->minute_.Upgrade(); + if (column) { + column->UpdateColumnOpacity(value); + } + column = ref->second_.Upgrade(); + if (column) { + column->UpdateColumnOpacity(value); + } + }); + outMonthDayOpacity_ = // opacity from 255 to 0, time from 100ms to 250ms + AceType::MakeRefPtr(pipe_, 255.0, 0.0, 100, 150, Curves::LINEAR, [weak](double value) { + auto ref = weak.Upgrade(); + if (!ref) { + return; + } + auto column = ref->month_.Upgrade(); + if (column) { + column->UpdateColumnOpacity(value); + } + column = ref->day_.Upgrade(); + if (column) { + column->UpdateColumnOpacity(value); + } + }); + outYearOpacity_ = // opacity from 255 to 0, time from 0ms to 150ms + AceType::MakeRefPtr(pipe_, 255.0, 0.0, 0, 150, Curves::LINEAR, [weak](double value) { + auto ref = weak.Upgrade(); + if (!ref) { + return; + } + auto column = ref->year_.Upgrade(); + if (column) { + column->UpdateColumnOpacity(value); + } + }); + outLunarButtonsOpacity_ = // opacity from 0 to 255, time from 100ms to 250ms + AceType::MakeRefPtr(pipe_, 0.0, 255.0, 100, 150, Curves::LINEAR, [weak](double value) { + auto ref = weak.Upgrade(); + if (!ref) { + return; + } + auto lunar = ref->lunar_.Upgrade(); + if (lunar) { + lunar->UpdateOpacity(static_cast(value)); + } + auto buttons = ref->buttons_.Upgrade(); + if (buttons) { + buttons->UpdateOpacity(static_cast(value)); + } + }); +} + +void PickerAnimationController::CreateAnimation() +{ + CreateTriangleAnimation(); + CreateMovingAnimation(); + CreateInOpacityAnimation(); + CreateOutOpacityAnimation(); +} + +void PickerAnimationController::PlayInAnimation() +{ + if (inTriangle_) { + inTriangle_->Play(); + } + if (inYearMoving_) { + inYearMoving_->Play(); + } + if (inMonthMoving_) { + inMonthMoving_->Play(); + } + if (inDayMoving_) { + inDayMoving_->Play(); + } + if (inOldColumnOpacity_) { + inOldColumnOpacity_->Play(); + } + if (inMonthDayOpacity_) { + auto month = month_.Upgrade(); + auto day = day_.Upgrade(); + if (month) { + month->UpdateColumnOpacity(0.0); + } + if (day) { + day->UpdateColumnOpacity(0.0); + } + inMonthDayOpacity_->Play(); + } + if (inYearOpacity_) { + auto year = year_.Upgrade(); + if (year) { + year->UpdateColumnOpacity(0.0); + } + inYearOpacity_->Play(); + } + if (inLunarButtonsOpacity_) { + inLunarButtonsOpacity_->Play(); + } +} + +void PickerAnimationController::PlayOutAnimation() +{ + if (outTriangle_) { + outTriangle_->Play(); + } + if (outYearMoving_) { + outYearMoving_->Play(); + } + if (outMonthMoving_) { + outMonthMoving_->Play(); + } + if (outDayMoving_) { + outDayMoving_->Play(); + } + if (outOldColumnOpacity_) { + outOldColumnOpacity_->Play(); + } + if (outMonthDayOpacity_) { + outMonthDayOpacity_->Play(); + } + if (outYearOpacity_) { + outYearOpacity_->Play(); + } + if (outLunarButtonsOpacity_) { + outLunarButtonsOpacity_->Play(); + } +} + +void PickerAnimationController::StopInAnimation() +{ + if (inTriangle_) { + inTriangle_->Stop(); + } + if (inYearMoving_) { + inYearMoving_->Stop(); + } + if (inMonthMoving_) { + inMonthMoving_->Stop(); + } + if (inDayMoving_) { + inDayMoving_->Stop(); + } + if (inOldColumnOpacity_) { + inOldColumnOpacity_->Stop(); + } + if (inMonthDayOpacity_) { + inMonthDayOpacity_->Stop(); + } + if (inYearOpacity_) { + inYearOpacity_->Stop(); + } + if (inLunarButtonsOpacity_) { + inLunarButtonsOpacity_->Stop(); + } +} + +void PickerAnimationController::StopOutAnimation() +{ + if (outTriangle_) { + outTriangle_->Stop(); + } + if (outYearMoving_) { + outYearMoving_->Stop(); + } + if (outMonthMoving_) { + outMonthMoving_->Stop(); + } + if (outDayMoving_) { + outDayMoving_->Stop(); + } + if (outOldColumnOpacity_) { + outOldColumnOpacity_->Stop(); + } + if (outMonthDayOpacity_) { + outMonthDayOpacity_->Stop(); + } + if (outYearOpacity_) { + outYearOpacity_->Stop(); + } + if (outLunarButtonsOpacity_) { + outLunarButtonsOpacity_->Stop(); + } +} + +void PickerAnimationController::InitMoveRange() +{ + yearEnd_ = 0.0; + monthEnd_ = 0.0; + dayEnd_ = 0.0; + + auto year = year_.Upgrade(); + auto month = month_.Upgrade(); + auto day = day_.Upgrade(); + auto monthDay = monthDay_.Upgrade(); + if (!monthDay) { + LOGE("month day column is null."); + return; + } + + double position = monthDay->GetInnerColumnGlobalOffset().GetX(); + if (year) { + yearStart_ = position - year->GetInnerColumnGlobalOffset().GetX(); + } + if (month) { + monthStart_ = position - month->GetInnerColumnGlobalOffset().GetX(); + } + if (day) { + dayStart_ = position - day->GetInnerColumnGlobalOffset().GetX(); + } +} + +void PickerAnimationController::Play(bool isIn) +{ + if (!created_) { + InitMoveRange(); + CreateAnimation(); + created_ = true; + } + + if (isIn) { + if (outDayMoving_) { + outDayMoving_->ClearStopCallback(); + } + StopOutAnimation(); + PlayInAnimation(); + } else { + StopInAnimation(); + if (outDayMoving_ && outStopCallback_) { + outDayMoving_->AddStopCallback(outStopCallback_); + } + PlayOutAnimation(); + } +} + +} // namespace OHOS::Ace + diff --git a/frameworks/core/components/picker/picker_animation_controller.h b/frameworks/core/components/picker/picker_animation_controller.h new file mode 100644 index 00000000..424d1836 --- /dev/null +++ b/frameworks/core/components/picker/picker_animation_controller.h @@ -0,0 +1,170 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_ANIMATION_CONTROLLER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_ANIMATION_CONTROLLER_H + +#include "core/animation/animator.h" +#include "core/components/display/render_display.h" +#include "core/components/picker/picker_animation.h" +#include "core/components/picker/render_picker_column.h" +#include "core/components/triangle/render_triangle.h" +#include "core/pipeline/pipeline_context.h" + +namespace OHOS::Ace { + +class PickerAnimationController : public virtual AceType { + DECLARE_ACE_TYPE(PickerAnimationController, AceType); + +public: + PickerAnimationController() = default; + ~PickerAnimationController() = default; + + void SetPipeline(const WeakPtr& value) + { + pipe_ = value; + } + + void SetTriangle(const RefPtr& value) + { + triangle_ = value; + } + + void SetLunar(const RefPtr& value) + { + lunar_ = value; + } + + void SetButtons(const RefPtr& value) + { + buttons_ = value; + } + + void SetMonthDay(const RefPtr& value) + { + monthDay_ = value; + } + + void SetAmPm(const RefPtr& value) + { + amPm_ = value; + } + + void SetHour(const RefPtr& value) + { + hour_ = value; + } + + void SetMinute(const RefPtr& value) + { + minute_ = value; + } + + void SetSecond(const RefPtr& value) + { + second_ = value; + } + + void SetYear(const RefPtr& value) + { + InitColumnOpacity(year_.Upgrade(), value); + year_ = value; + } + + void SetMonth(const RefPtr& value) + { + InitColumnOpacity(month_.Upgrade(), value); + month_ = value; + } + + void SetDay(const RefPtr& value) + { + InitColumnOpacity(day_.Upgrade(), value); + day_ = value; + } + + void SetOutStopCallback(const std::function& value) + { + outStopCallback_ = value; + } + + void Play(bool isIn); + +private: + // create all type of animation + void CreateAnimation(); + void CreateTriangleAnimation(); + void CreateMovingAnimation(); + void CreateInOpacityAnimation(); + void CreateOutOpacityAnimation(); + void InitMoveRange(); + void InitColumnOpacity(const RefPtr& oldColumn, const RefPtr& newColumn); + // play or stop animation + void PlayInAnimation(); + void PlayOutAnimation(); + void StopInAnimation(); + void StopOutAnimation(); + + // pipeline context + WeakPtr pipe_; + // common of picker base + WeakPtr triangle_; + WeakPtr lunar_; + WeakPtr buttons_; + // column of datetime + WeakPtr monthDay_; + WeakPtr amPm_; + WeakPtr hour_; + WeakPtr minute_; + WeakPtr second_; + // column of date + WeakPtr year_; + WeakPtr month_; + WeakPtr day_; + // move range of date + double yearStart_ = 0.0; + double yearEnd_ = 0.0; + double monthStart_ = 0.0; + double monthEnd_ = 0.0; + double dayStart_ = 0.0; + double dayEnd_ = 0.0; + // triangle animation + RefPtr inTriangle_; + RefPtr outTriangle_; + // moving animation + RefPtr inYearMoving_; + RefPtr inMonthMoving_; + RefPtr inDayMoving_; + RefPtr outYearMoving_; + RefPtr outMonthMoving_; + RefPtr outDayMoving_; + // opacity animation + RefPtr inOldColumnOpacity_; + RefPtr inMonthDayOpacity_; + RefPtr inYearOpacity_; + RefPtr inLunarButtonsOpacity_; + RefPtr outOldColumnOpacity_; + RefPtr outMonthDayOpacity_; + RefPtr outYearOpacity_; + RefPtr outLunarButtonsOpacity_; + // callback + std::function outStopCallback_; + // others + bool created_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_ANIMATION_CONTROLLER_H diff --git a/frameworks/core/components/picker/picker_base_component.cpp b/frameworks/core/components/picker/picker_base_component.cpp new file mode 100644 index 00000000..f0b7d456 --- /dev/null +++ b/frameworks/core/components/picker/picker_base_component.cpp @@ -0,0 +1,664 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/picker/picker_base_component.h" + +#include +#include + +#include "base/i18n/localization.h" +#include "base/utils/string_utils.h" +#include "core/components/box/box_component.h" +#include "core/components/button/button_component.h" +#include "core/components/button/button_theme.h" +#include "core/components/dialog/dialog_theme.h" +#include "core/components/display/display_component.h" +#include "core/components/flex/flex_component.h" +#include "core/components/flex/flex_item_component.h" +#include "core/components/focus_collaboration/focus_collaboration_component.h" +#include "core/components/focusable/focusable_component.h" +#include "core/components/gesture_listener/gesture_listener_component.h" +#include "core/components/padding/padding_component.h" +#include "core/components/picker/picker_base_element.h" +#include "core/components/picker/render_picker_base.h" +#include "core/components/triangle/triangle_component.h" + +namespace OHOS::Ace { + +const char PickerBaseComponent::PICKER_YEAR_COLUMN[] = "year"; +const char PickerBaseComponent::PICKER_MONTH_COLUMN[] = "month"; +const char PickerBaseComponent::PICKER_DAY_COLUMN[] = "day"; +const char PickerBaseComponent::PICKER_HOUR_COLUMN[] = "hour"; +const char PickerBaseComponent::PICKER_MINUTE_COLUMN[] = "minute"; +const char PickerBaseComponent::PICKER_SECOND_COLUMN[] = "second"; +const char PickerBaseComponent::PICKER_TEXT_COLUMN[] = "text"; +const char PickerBaseComponent::PICKER_MONTHDAY_COLUMN[] = "monthDay"; +const char PickerBaseComponent::PICKER_AMPM_COLUMN[] = "amPm"; + +PickerDate PickerDate::Current() +{ + PickerDate date; + auto now = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now()); + auto local = std::localtime(&now); + if (local == nullptr) { + LOGE("get localtime failed."); + return date; + } + date.SetYear(local->tm_year + 1900); // local date start from 1900 + date.SetMonth(local->tm_mon + 1); // local month start from 0 to 11, need add one. + date.SetDay(local->tm_mday); + date.SetWeek(local->tm_wday); + return date; +} + +uint32_t PickerDate::GetMaxDay(uint32_t year, uint32_t month) +{ + if (month == 2) { // days count in february is different between leap year and other. + bool leapYear = IsLeapYear(year); + return (leapYear ? 29 : 28); // leap year's february has 29 days, other has 28 days. + } + + switch (month) { + case 1: // january + case 3: // march + case 5: // may + case 7: // july + case 8: // august + case 10: // october + case 12: // december + return 31; // upper months has 31 days + default: + return 30; // other month has 30 days + } +} + +bool PickerDate::IsLeapYear(uint32_t year) +{ + if (year % 100 == 0) { // special case: year can divided by 100 + return (year % 400 == 0); // leap year equal that can divided by 400. + } + + return (year % 4 == 0); // other case, leap year equal that can divided by 4. +} + +std::string PickerDate::ToString(bool jsonFormat) const +{ + if (!jsonFormat) { + DateTime date; + date.year = year_; + date.month = month_ - 1; // W3C's month start from 0 to 11 + date.day = day_; + return Localization::GetInstance()->FormatDateTime(date, DateTimeStyle::FULL, DateTimeStyle::NONE); + } + + return std::string("{\"year\":") + std::to_string(year_) + ",\"month\":" + std::to_string(month_) + + ",\"day\":" + std::to_string(day_) + "}"; +} + +uint32_t PickerDate::ToDays() const +{ + uint32_t days = 0; + days += day_ - 1; // day start from 1 + // month start from 1 + for (uint32_t month = 1; month < month_; ++month) { + days += PickerDate::GetMaxDay(year_, month); + } + // year start from 1900 + for (uint32_t year = 1900; year < year_; ++year) { + // leap year has 366 days, other year has 365 days. + days += (PickerDate::IsLeapYear(year) ? 366 : 365); + } + return days; +} + +void PickerDate::FromDays(uint32_t days) +{ + for (year_ = 1900; year_ <= 2100; ++year_) { // year start from 1900 to 2100. + // leap year has 366 days, other year has 365 days; + uint32_t daysInYear = (PickerDate::IsLeapYear(year_) ? 366 : 365); + if (days < daysInYear) { + break; + } else { + days -= daysInYear; + } + } + + for (month_ = 1; month_ <= 12; ++month_) { // month start from 1 to 12 + uint32_t daysInMonth = PickerDate::GetMaxDay(year_, month_); + if (days < daysInMonth) { + break; + } else { + days -= daysInMonth; + } + } + + day_ = days + 1; // days is index start form 0 and day start form 1. +} + +PickerTime PickerTime::Current() +{ + PickerTime time; + auto now = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now()); + auto local = std::localtime(&now); + if (local == nullptr) { + LOGE("get localtime failed."); + return time; + } + time.SetHour(local->tm_hour); + time.SetMinute(local->tm_min); + time.SetSecond(local->tm_sec); + return time; +} + +std::string PickerTime::ToString(bool jsonFormat, bool hasSecond) const +{ + if (!jsonFormat) { + if (!hasSecond) { + // use char ':' to split. + return std::to_string(hour_) + ":" + std::to_string(minute_); + } + // use char ':' to split. + return std::to_string(hour_) + ":" + std::to_string(minute_) + ":" + std::to_string(second_); + } + + if (!hasSecond) { + // use json format chars + return std::string("{\"hour\":") + std::to_string(hour_) + ",\"minute\":" + std::to_string(minute_) + "}"; + } + // use json format chars + return std::string("{\"hour\":") + std::to_string(hour_) + ",\"minute\":" + std::to_string(minute_) + + ",\"second\":" + std::to_string(second_) + "}"; +} + +PickerDateTime PickerDateTime::Current() +{ + PickerDateTime dateTime; + dateTime.SetDate(PickerDate::Current()); + dateTime.SetTime(PickerTime::Current()); + return dateTime; +} + +std::string PickerDateTime::ToString(bool jsonFormat) const +{ + if (!jsonFormat) { + return date_.ToString(jsonFormat); + } + + return std::string("{\"year\":") + std::to_string(date_.GetYear()) + + ",\"month\":" + std::to_string(date_.GetMonth()) + + ",\"day\":" + std::to_string(date_.GetDay()) + + ",\"hour\":" + std::to_string(time_.GetHour()) + + ",\"minute\":" + std::to_string(time_.GetMinute()) + "}"; +} + +RefPtr PickerBaseComponent::CreateRenderNode() +{ + return RenderPickerBase::Create(); +} + +RefPtr PickerBaseComponent::CreateElement() +{ + auto element = AceType::MakeRefPtr(); + element->SetAutoAccessibility(false); + return element; +} + +void PickerBaseComponent::ClearColumns() +{ + auto accessibilityManager = accessibilityManager_.Upgrade(); + if (accessibilityManager) { + for (const auto& column : columns_) { + accessibilityManager->RemoveAccessibilityNodeById(column->GetNodeId()); + column->SetNodeId(-1); // reset to invalidate id. + } + } else { + LOGE("accessibility manager is null."); + } + columns_.clear(); +} + +void PickerBaseComponent::AppendColumn(const RefPtr& column) +{ + columns_.emplace_back(column); +} + +RefPtr PickerBaseComponent::GetColumn(const std::string& tag) const +{ + auto iter = std::find_if(columns_.begin(), columns_.end(), + [&tag](const RefPtr& column) { return column->GetColumnTag() == tag; }); + return (iter == columns_.end()) ? nullptr : *iter; +} + +void PickerBaseComponent::RemoveColumn(const std::string& tag) +{ + auto column = GetColumn(tag); + auto accessibilityManager = accessibilityManager_.Upgrade(); + if (accessibilityManager && column) { + accessibilityManager->RemoveAccessibilityNodeById(column->GetNodeId()); + column->SetNodeId(-1); // reset to invalidate id. + } else { + LOGE("accessibility manager is null or can not get the column."); + } + columns_.erase(std::remove_if( + columns_.begin(), + columns_.end(), + [tag](const RefPtr& col) { return col->GetColumnTag() == tag; }), + columns_.end()); +} + +void PickerBaseComponent::SetFinishCallback(const ColumnFinishCallback& value) +{ + for (const auto& column : columns_) { + column->SetFinishCallback(value); + } +} + +void PickerBaseComponent::SetChangeCallback(const ColumnChangeCallback& value) +{ + for (const auto& column : columns_) { + column->SetChangeCallback(value); + } +} + +void PickerBaseComponent::ShowDialog(const RefPtr& stack) +{ + if (!isDialog_) { + return; + } + + if (dialogShowed_) { + LOGW("dialog is showed already."); + return; + } + + if (!stack) { + LOGE("stack is null."); + return; + } + + stack_ = stack; + if (!stack_->PushDialog(AceType::Claim(this))) { + LOGE("push dialog failed!"); + return; + } + dialogShowed_ = true; +} + +bool PickerBaseComponent::HideDialog() +{ + if (!isDialog_) { + return false; + } + + if (!dialogShowed_) { + LOGW("dialog not show."); + return false; + } + + if (!stack_) { + LOGE("stack is null."); + return false; + } + + if (!stack_->PopDialog(true)) { + LOGE("pop dialog failed!"); + return false; + } + dialogShowed_ = false; + ClearAccessibilityNodes(); + return true; +} + +void PickerBaseComponent::OnTitleBuilding() +{ + SetHasLunar(false); + + auto theme = GetTheme(); + if (!theme) { + LOGE("theme is null."); + return; + } + SetHasTitle(theme->GetShowButtons()); + SetHasButtons(theme->GetShowButtons()); +} + +void PickerBaseComponent::InitializeTitle(std::list>& outChildren) +{ + if (!theme_) { + LOGE("theme is null."); + return; + } + if (isDialog_ && hasTitle_) { + auto triangle = AceType::MakeRefPtr(); + triangle->SetPadding(8.0_vp); // all padding + triangle->SetWidth(25.0_vp); // left padding + it width + right padding = 8dp + 9dp + 8dp + triangle->SetHeight(22.0_vp); // top padding + it height + bottom padding = 8dp + 6dp + 8dp + triangle->SetColor(theme_->GetTitleStyle().GetTextColor()); + RefPtr row = AceType::MakeRefPtr(FlexAlign::CENTER, + FlexAlign::CENTER, std::list>()); + title_->SetTextStyle(theme_->GetTitleStyle()); + RefPtr titleBox = AceType::MakeRefPtr(); + titleBox->SetChild(title_); + if (!GetHasTriangle()) { + row->AppendChild(AceType::MakeRefPtr(0.0, 1.0, 0.0, titleBox)); + } else if (GetTextDirection() != TextDirection::RTL) { + row->AppendChild(AceType::MakeRefPtr(0.0, 1.0, 0.0, titleBox)); + row->AppendChild(triangle); + } else { + row->AppendChild(triangle); + row->AppendChild(AceType::MakeRefPtr(0.0, 1.0, 0.0, titleBox)); + } + auto titleComposed = GenerateAccessibilityComposed("picker-title", row, titleAccessibility_); + outChildren.emplace_back(titleComposed); + + RefPtr spaceBox = AceType::MakeRefPtr(); + spaceBox->SetWidth(theme_->GetTitleBottomPadding().Value(), theme_->GetTitleBottomPadding().Unit()); + spaceBox->SetHeight(theme_->GetTitleBottomPadding().Value(), theme_->GetTitleBottomPadding().Unit()); + outChildren.emplace_back(spaceBox); + } +} + +void PickerBaseComponent::InitializeColumns( + std::list>& outChildren, const RefPtr& accessibilityManager) +{ + if (!theme_) { + LOGE("theme is null."); + return; + } + + std::list> columns; + for (const auto& column : columns_) { + column->SetTheme(theme_->clone()); + column->SetTextDirection(GetTextDirection()); + column->SetInDialog(isDialog_); + column->SetFixHeight(GetColumnHeight()); + auto id = column->GetNodeId(); + if (id < 0) { + id = accessibilityManager->GenerateNextAccessibilityId(); + // picker and picker-view accessibility parentNode different. + static const char* tag = "picker-column"; + if (isDialog_) { + accessibilityManager->CreateSpecializedNode(tag, id, rootAccessibilityId_); + } else { + accessibilityManager->CreateSpecializedNode(tag, id, GetNodeId()); + } + column->SetNodeId(id); + } + columns.emplace_back(column); + } + RefPtr row = AceType::MakeRefPtr(FlexAlign::FLEX_START, FlexAlign::FLEX_START, columns); + outChildren.emplace_back(row); +} + +void PickerBaseComponent::InitializeChildAccessibility(const RefPtr& accessibilityManager) +{ + if (!hasLunar_) { + if (lunarAccessibility_) { + accessibilityManager->RemoveAccessibilityNodes(lunarAccessibility_); + lunarAccessibility_ = nullptr; + } + if (switchAccessibility_) { + accessibilityManager->RemoveAccessibilityNodes(switchAccessibility_); + switchAccessibility_ = nullptr; + } + return; + } +} + +void PickerBaseComponent::ClearAccessibilityNodes() +{ + auto accessibilityManager = accessibilityManager_.Upgrade(); + if (!accessibilityManager) { + LOGE("accessibilityManager is null"); + return; + } + + if (rootAccessibility_) { + accessibilityManager->RemoveAccessibilityNodes(rootAccessibility_); + rootAccessibility_ = nullptr; + lunarAccessibility_ = nullptr; + switchAccessibility_ = nullptr; + titleAccessibility_ = nullptr; + cancelAccessibility_ = nullptr; + okAccessibility_ = nullptr; + } + + for (const auto& column : columns_) { + column->SetNodeId(-1); // reset id. + } +} + +RefPtr PickerBaseComponent::GenerateAccessibilityComposed( + const std::string& name, const RefPtr& child, RefPtr& node) +{ + auto accessibilityManager = accessibilityManager_.Upgrade(); + if (!accessibilityManager) { + return child; + } + + if (!node) { + int32_t parentNodeId = -1; + int32_t composedId = accessibilityManager->GenerateNextAccessibilityId(); + if (isDialog_) { + parentNodeId = rootAccessibilityId_; + } else { + parentNodeId = GetNodeId(); + } + node = accessibilityManager->CreateSpecializedNode(name, composedId, parentNodeId); + } + return child; +} + +void PickerBaseComponent::InitializeLunar( + std::list>& outChildren, const RefPtr& themeManager) +{ + if (!theme_) { + LOGE("theme is null"); + return; + } + + if (hasLunar_) { + RefPtr spaceBox = AceType::MakeRefPtr(); + spaceBox->SetWidth(theme_->GetButtonTopPadding().Value(), theme_->GetButtonTopPadding().Unit()); + spaceBox->SetHeight(theme_->GetButtonTopPadding().Value(), theme_->GetButtonTopPadding().Unit()); + outChildren.emplace_back(spaceBox); + std::wstring lunarString { 0x663E, 0x793A, 0x519C, 0x5386 }; // the unicode encoding of chinese string of lunar. + RefPtr lunarText = AceType::MakeRefPtr(StringUtils::ToString(lunarString)); + auto lunarStyle = theme_->GetOptionStyle(false, false); + if (GetIsDialog()) { + lunarStyle.SetLineHeight(theme_->GetLunarHeight()); + } + lunarText->SetTextStyle(lunarStyle); + auto lunarTextComposed = GenerateAccessibilityComposed("lunar-text", lunarText, lunarAccessibility_); + + auto checkboxTheme = themeManager->GetTheme(); + lunar_ = AceType::MakeRefPtr(checkboxTheme); + lunar_->SetHorizontalPadding(Dimension(0.0)); + lunar_->SetHotZoneVerticalPadding(Dimension(0.0)); + auto lunarSwitchComposed = GenerateAccessibilityComposed("lunar-switch", lunar_, switchAccessibility_); + RefPtr lunarBox = AceType::MakeRefPtr(); + lunarBox->SetChild(lunarSwitchComposed); + lunarBox->SetWidth(theme_->GetLunarWidth().Value(), theme_->GetLunarWidth().Unit()); + lunarBox->SetHeight(theme_->GetLunarHeight().Value(), theme_->GetLunarHeight().Unit()); + + std::list> lunarChildren; + FlexAlign mainAlign = FlexAlign::AUTO; + if (GetTextDirection() == TextDirection::RTL) { + mainAlign = FlexAlign::FLEX_END; + lunarChildren.emplace_back(lunarText); + lunarChildren.emplace_back(lunarBox); + } else { + mainAlign = FlexAlign::FLEX_START; + lunarChildren.emplace_back(lunarBox); + lunarChildren.emplace_back(lunarText); + } + RefPtr lunarRow = + AceType::MakeRefPtr(mainAlign, FlexAlign::CENTER, lunarChildren); + RefPtr display = AceType::MakeRefPtr(); + display->SetChild(lunarRow); + outChildren.emplace_back(display); + } +} + +void PickerBaseComponent::InitializeButtons( + std::list>& outChildren, const RefPtr& themeManager) +{ + auto dialogTheme = themeManager->GetTheme(); + if (!theme_ || !dialogTheme) { + LOGE("theme is null."); + return; + } + + auto buttonTheme = AceType::DynamicCast(themeManager->GetTheme(ButtonTheme::TypeId())); + if (!buttonTheme) { + return; + } + auto buttonTextStyle = buttonTheme->GetTextStyle(); + auto buttonFocusColor = theme_->GetFocusColor(); + buttonTextStyle.SetTextColor(buttonFocusColor); + + if (isDialog_ && hasButtons_) { + RefPtr topPaddingBox = AceType::MakeRefPtr(); + topPaddingBox->SetWidth(theme_->GetButtonTopPadding().Value(), theme_->GetButtonTopPadding().Unit()); + topPaddingBox->SetHeight(theme_->GetButtonTopPadding().Value(), theme_->GetButtonTopPadding().Unit()); + outChildren.emplace_back(topPaddingBox); + + auto cancelButton = ButtonBuilder::Build(themeManager, + Localization::GetInstance()->GetEntryLetters("common.cancel"), buttonTextStyle, buttonFocusColor, true); + cancelButton->SetBackgroundColor(dialogTheme->GetButtonBackgroundColor()); + cancelButton->SetClickedColor(dialogTheme->GetButtonClickedColor()); + cancelButton->SetClickedEventId(onCancelClickId_); + cancelButton->SetType(ButtonType::CAPSULE); + cancelButton->SetHeight(theme_->GetButtonHeight()); + auto cancelComposed = GenerateAccessibilityComposed("picker-button", cancelButton, cancelAccessibility_); + if (cancelAccessibility_) { + cancelAccessibility_->SetText(Localization::GetInstance()->GetEntryLetters("common.cancel")); + } + + auto okButton = ButtonBuilder::Build(themeManager, Localization::GetInstance()->GetEntryLetters("common.ok"), + buttonTextStyle, buttonFocusColor, true); + okButton->SetBackgroundColor(dialogTheme->GetButtonBackgroundColor()); + okButton->SetClickedColor(dialogTheme->GetButtonClickedColor()); + okButton->SetClickedEventId(onOkClickId_); + okButton->SetType(ButtonType::CAPSULE); + okButton->SetHeight(theme_->GetButtonHeight()); + auto okComposed = GenerateAccessibilityComposed("picker-button", okButton, okAccessibility_); + if (okAccessibility_) { + okAccessibility_->SetText(Localization::GetInstance()->GetEntryLetters("common.ok")); + } + + auto dividerBox = AceType::MakeRefPtr(); + dividerBox->SetWidth(dialogTheme->GetDividerWidth().Value(), dialogTheme->GetDividerWidth().Unit()); + dividerBox->SetHeight(dialogTheme->GetDividerHeight().Value(), dialogTheme->GetDividerHeight().Unit()); + auto backDecoration = AceType::MakeRefPtr(); + backDecoration->SetBackgroundColor(dialogTheme->GetDividerColor()); + dividerBox->SetBackDecoration(backDecoration); + dividerBox->SetMargin(dialogTheme->GetDividerPadding()); + + std::list> buttons; + RefPtr row = + AceType::MakeRefPtr(FlexAlign::SPACE_AROUND, FlexAlign::FLEX_START, buttons); + row->SetTextDirection(GetTextDirection()); + row->AppendChild(AceType::MakeRefPtr(1.0, 1.0, 0.0, cancelComposed)); + row->AppendChild(AceType::MakeRefPtr(0.0, 0.0, 0.0, dividerBox)); + row->AppendChild(AceType::MakeRefPtr(1.0, 1.0, 0.0, okComposed)); + row->SetStretchToParent(true); + + auto display = AceType::MakeRefPtr(); + display->SetChild(row); + outChildren.emplace_back(display); + } +} + +void PickerBaseComponent::InitializeContainer(const std::list>& outChildren) +{ + if (!theme_) { + LOGE("theme is null."); + return; + } + + RefPtr outColumn = + AceType::MakeRefPtr(FlexAlign::CENTER, FlexAlign::FLEX_START, outChildren); + RefPtr box = AceType::MakeRefPtr(); + box->SetDeliverMinToChild(false); + box->SetAlignment(Alignment::CENTER); + if (GetIsDialog()) { + RefPtr collaboration = AceType::MakeRefPtr(); + collaboration->InsertChild(0, outColumn); + box->SetChild(collaboration); + } else { + box->SetChild(outColumn); + } + + RefPtr outBox = AceType::MakeRefPtr(); + outBox->SetDeliverMinToChild(false); + outBox->SetAlignment(Alignment::CENTER); + outBox->SetChild(box); + if (GetTextDirection() == TextDirection::RTL) { + outColumn->SetCrossAxisAlign(FlexAlign::FLEX_END); + box->SetAlignment(Alignment::CENTER_RIGHT); + } + // picker need build outer composed component but picker-view don't need. + if (isDialog_) { + if (GetSubsidiary()) { + auto edge = theme_->GetPopupEdge(); + edge.SetTop(0.0_vp); + edge.SetBottom(0.0_vp); + auto temp = AceType::MakeRefPtr(); + temp->SetBackgroundColor(Color::TRANSPARENT); + box->SetBackDecoration(temp); + box->SetPadding(edge); + outBox->SetBackDecoration(temp); + } else { + box->SetBackDecoration(theme_->GetPopupDecoration(false)); + box->SetPadding(theme_->GetPopupEdge()); + outBox->SetBackDecoration(theme_->GetPopupDecoration(true)); + } + SetChild(outBox); + } else { + SetChild(outBox); + } +} + +void PickerBaseComponent::Initialize( + const RefPtr& accessibilityManager, const RefPtr& themeManager) +{ + if (!themeManager) { + return; + } + accessibilityManager_ = accessibilityManager; + OnColumnsBuilding(); + OnTitleBuilding(); + + // picker need build rootAccessibilityNode but picker-view don't need. + if (!rootAccessibility_ && isDialog_) { + rootAccessibilityId_ = accessibilityManager->GenerateNextAccessibilityId(); +#if defined(WINDOWS_PLATFORM) || defined(MAC_PLATFORM) + rootAccessibility_ = accessibilityManager->CreateSpecializedNode( + "picker-dialog", rootAccessibilityId_, GetPickerBaseId()); +#else + rootAccessibility_ = accessibilityManager->CreateSpecializedNode("picker-dialog", rootAccessibilityId_, -1); +#endif + } + std::list> outChildren; + InitializeTitle(outChildren); + InitializeColumns(outChildren, accessibilityManager); + InitializeLunar(outChildren, themeManager); + InitializeButtons(outChildren, themeManager); + InitializeContainer(outChildren); + InitializeChildAccessibility(accessibilityManager); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/picker/picker_base_component.h b/frameworks/core/components/picker/picker_base_component.h new file mode 100644 index 00000000..bc9ad93c --- /dev/null +++ b/frameworks/core/components/picker/picker_base_component.h @@ -0,0 +1,523 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_BASE_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_BASE_COMPONENT_H + +#include "base/utils/system_properties.h" +#include "core/accessibility/accessibility_manager.h" +#include "core/components/checkable/checkable_component.h" +#include "core/components/common/rotation/rotation_controller.h" +#include "core/components/picker/picker_animation_controller.h" +#include "core/components/picker/picker_column_component.h" +#include "core/components/stack/stack_element.h" +#include "core/components/text/text_component.h" +#include "core/event/back_end_event_manager.h" +#include "core/pipeline/base/sole_child_component.h" + +namespace OHOS::Ace { + +class PickerDate final { +public: + PickerDate() = default; + PickerDate(uint32_t year, uint32_t month, uint32_t day) : year_(year), month_(month), day_(day) {} + + ~PickerDate() = default; + + static PickerDate Current(); + + static uint32_t GetMaxDay(uint32_t year, uint32_t month); + + static bool IsLeapYear(uint32_t year); + + uint32_t GetYear() const + { + return year_; + } + void SetYear(uint32_t value) + { + year_ = value; + } + + uint32_t GetMonth() const + { + return month_; + } + void SetMonth(uint32_t value) + { + month_ = value; + } + + uint32_t GetDay() const + { + return day_; + } + void SetDay(uint32_t value) + { + day_ = value; + } + + uint32_t GetWeek() const + { + return week_; + } + void SetWeek(uint32_t value) + { + week_ = value; + } + + std::string ToString(bool jsonFormat) const; + + uint32_t ToDays() const; + void FromDays(uint32_t days); + +private: + uint32_t year_ = 0; + uint32_t month_ = 0; + uint32_t day_ = 0; + uint32_t week_ = 0; +}; + +class PickerTime final { +public: + PickerTime() = default; + PickerTime(uint32_t hour, uint32_t minute, uint32_t second) : hour_(hour), minute_(minute), second_(second) {} + + ~PickerTime() = default; + + static PickerTime Current(); + + uint32_t GetHour() const + { + return hour_; + } + void SetHour(uint32_t value) + { + hour_ = value; + } + + uint32_t GetMinute() const + { + return minute_; + } + void SetMinute(uint32_t value) + { + minute_ = value; + } + + uint32_t GetSecond() const + { + return second_; + } + void SetSecond(uint32_t value) + { + second_ = value; + } + + std::string ToString(bool jsonFormat, bool hasSecond) const; + +private: + uint32_t hour_ = 0; + uint32_t minute_ = 0; + uint32_t second_ = 0; +}; + +class PickerDateTime final { +public: + PickerDateTime() = default; + PickerDateTime(const PickerDate& date, const PickerTime& time) : date_(date), time_(time) {} + + ~PickerDateTime() = default; + + static PickerDateTime Current(); + + const PickerDate& GetDate() const + { + return date_; + } + void SetDate(const PickerDate& value) + { + date_ = value; + } + + const PickerTime& GetTime() const + { + return time_; + } + void SetTime(const PickerTime& value) + { + time_ = value; + } + + std::string ToString(bool jsonFormat) const; + +private: + PickerDate date_; + PickerTime time_; +}; + +class PickerBaseComponent : public SoleChildComponent { + DECLARE_ACE_TYPE(PickerBaseComponent, SoleChildComponent); + +public: + PickerBaseComponent() : rotationController_(AceType::MakeRefPtr()) {} + ~PickerBaseComponent() override = default; + + RefPtr CreateRenderNode() override; + RefPtr CreateElement() override; + + void Initialize(const RefPtr& accessibilityManager, const RefPtr& themeManager); + + bool GetHasTitle() const + { + return hasTitle_; + } + void SetHasTitle(bool value) + { + hasTitle_ = (!subsidiary_ && value); + } + + bool GetHasLunar() const + { + return hasLunar_; + } + void SetHasLunar(bool value) + { + hasLunar_ = SystemProperties::GetDeviceType() == DeviceType::PHONE && value; + } + + bool GetHasButtons() const + { + return hasButtons_; + } + void SetHasButtons(bool value) + { + hasButtons_ = (!subsidiary_ && value); + } + + bool GetHasTriangle() const + { + return hasTriangle_; + } + void SetHasTriangle(bool value) + { + hasTriangle_ = value; + } + + bool GetIsDialog() const + { + return isDialog_; + } + void SetIsDialog(bool value) + { + isDialog_ = value; + } + + bool GetSubsidiary() const + { + return subsidiary_; + } + void SetSubsidiary(bool value) + { + subsidiary_ = value; + } + + bool GetMasterHasLunar() const + { + return masterHasLunar_; + } + void SetMasterHasLunar(bool value) + { + masterHasLunar_ = value; + } + + const EventMarker& GetOnChange() const + { + return onChange_; + } + void SetOnChange(const EventMarker& value) + { + onChange_ = value; + } + + const EventMarker& GetOnColumnChange() const + { + return onColumnChange_; + } + void SetOnColumnChange(const EventMarker& value) + { + onColumnChange_ = value; + } + + const EventMarker& GetOnCancel() const + { + return onCancel_; + } + void SetOnCancel(const EventMarker& value) + { + onCancel_ = value; + } + + void SetDisabledStatus(bool value) override + { + Component::SetDisabledStatus(value); + } + + void ClearColumns(); + + void AppendColumn(const RefPtr& column); + + RefPtr GetColumn(const std::string& tag) const; + + virtual uint32_t GetColumnCount() const + { + return columns_.size(); + } + + void RemoveColumn(const std::string& tag); + + void SetFinishCallback(const ColumnFinishCallback& value); + + void SetChangeCallback(const ColumnChangeCallback& value); + + const RefPtr& GetTheme() const + { + return theme_; + } + void SetTheme(const RefPtr& value) + { + theme_ = value; + } + + + const RefPtr& GetAnimationController() const + { + return animationController_; + } + + void SetAnimationController(const RefPtr& value) + { + animationController_ = value; + } + + const RefPtr& GetTitle() const + { + return title_; + } + + const RefPtr& GetLunar() const + { + return lunar_; + } + + int32_t GetNodeId() const + { + return nodeId_; + } + + void SetNodeId(int32_t value) + { + if (!GetIsDialog()) { + nodeId_ = value; + } + } + + const Dimension& GetColumnHeight() const + { + return columnHeight_; + } + void SetColumnHeight(const Dimension& value) + { + columnHeight_ = value; + } + + const RefPtr& GetStack() + { + return stack_; + } + + void ShowDialog(const RefPtr& stack); + bool HideDialog(); + + bool IsDialogShowed() + { + return dialogShowed_; + } + + const RefPtr& GetLunarAccessibility() const + { + return lunarAccessibility_; + } + + const RefPtr& GetSwitchAccessibility() const + { + return switchAccessibility_; + } + + const RefPtr& GetTitleAccessibility() const + { + return titleAccessibility_; + } + + const RefPtr& GetCancelAccessibility() const + { + return cancelAccessibility_; + } + + const RefPtr& GetOkAccessibility() const + { + return okAccessibility_; + } + + // used for inspector node in PC preview + const RefPtr& GetPickerDialogAccessibility() const + { + return rootAccessibility_; + } + + virtual bool SubsidiaryShowed() const + { + return false; + } + + virtual bool NeedRtlColumnOrder() const + { + return true; + } + + virtual bool IsShowLunar() const + { + return false; + } + + virtual void OnTitleBuilding(); + + virtual void OnColumnsCreating() {} + + virtual void OnColumnsBuilding() {} + + virtual std::string GetSelectedObject(bool isColumnChange, const std::string& changeColumnTag) const + { + return "{}"; + } + + virtual void OnSelectedSaving() {} + + virtual void OnDataLinking(const std::string& tag, bool isAdd, uint32_t index, std::vector& resultTags) + {} + + virtual void OnLunarCallback(bool checked, std::vector& resultTags) {} + virtual void OnTriangleCallback(bool value) {} + virtual void OnAnimationPlaying() {} + + const RefPtr& GetRotationController() const + { + return rotationController_; + } + + const EventMarker& GetOnCancelClickId() const + { + return onCancelClickId_; + } + + const EventMarker& GetOnOkClickId() const + { + return onOkClickId_; + } + + // used for inspector node in PC preview + void SetPickerBaseId(const int32_t nodeId) + { + pickerId_ = nodeId; + } + + // used for inspector node in PC preview + int32_t GetPickerBaseId() const + { + return pickerId_; + } + + static const char PICKER_YEAR_COLUMN[]; + static const char PICKER_MONTH_COLUMN[]; + static const char PICKER_DAY_COLUMN[]; + static const char PICKER_HOUR_COLUMN[]; + static const char PICKER_MINUTE_COLUMN[]; + static const char PICKER_SECOND_COLUMN[]; + static const char PICKER_TEXT_COLUMN[]; + static const char PICKER_MONTHDAY_COLUMN[]; + static const char PICKER_AMPM_COLUMN[]; + +private: + void InitializeTitle(std::list>& outChildren); + + void InitializeColumns( + std::list>& outChildren, const RefPtr& accessibilityManager); + + void InitializeChildAccessibility(const RefPtr& accessibilityManager); + + void ClearAccessibilityNodes(); + + RefPtr GenerateAccessibilityComposed( + const std::string& name, const RefPtr& child, RefPtr& node); + + void InitializeLunar(std::list>& outChildren, const RefPtr& themeManager); + + void InitializeButtons(std::list>& outChildren, const RefPtr& themeManager); + + void InitializeContainer(const std::list>& outChildren); + + bool dialogShowed_ = false; + bool hasTitle_ = false; + bool hasLunar_ = false; + bool hasButtons_ = false; + bool hasTriangle_ = false; + bool isDialog_ = true; + bool subsidiary_ = false; + bool masterHasLunar_ = false; + int32_t nodeId_ = -1; // default of dialog's node id. + // used for inspector node in PC preview + int32_t pickerId_ = -1; + + RefPtr theme_; + RefPtr stack_; + + RefPtr title_ = AceType::MakeRefPtr(""); + RefPtr lunar_; + std::vector> columns_; + WeakPtr accessibilityManager_; + int32_t rootAccessibilityId_ = -1; + RefPtr rootAccessibility_; + RefPtr titleAccessibility_; + RefPtr lunarAccessibility_; + RefPtr switchAccessibility_; + RefPtr cancelAccessibility_; + RefPtr okAccessibility_; + + EventMarker onChange_; + EventMarker onColumnChange_; + EventMarker onCancel_; + EventMarker onOkClickId_ = BackEndEventManager::GetInstance().GetAvailableMarker(); + EventMarker onCancelClickId_ = BackEndEventManager::GetInstance().GetAvailableMarker(); + + Dimension columnHeight_; + + RefPtr rotationController_; + + RefPtr animationController_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_BASE_COMPONENT_H diff --git a/frameworks/core/components/picker/picker_base_element.cpp b/frameworks/core/components/picker/picker_base_element.cpp new file mode 100644 index 00000000..6257d161 --- /dev/null +++ b/frameworks/core/components/picker/picker_base_element.cpp @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/picker/picker_base_element.h" + +#include "core/components/picker/picker_base_component.h" +#include "core/components/picker/render_picker_base.h" + +namespace OHOS::Ace { + +void PickerBaseElement::Update() +{ + SoleChildElement::Update(); + auto context = context_.Upgrade(); + if (!context) { + return; + } + context->AddPostFlushListener(AceType::Claim(this)); +} + +void PickerBaseElement::OnPostFlush() +{ + auto render = AceType::DynamicCast(renderNode_); + if (!render) { + return; + } + render->StartAnimation(); +} + +void PickerBaseElement::PerformBuild() +{ + auto context = context_.Upgrade(); + auto picker = AceType::DynamicCast(component_); + if (picker && context && context->GetAccessibilityManager()) { + picker->Initialize(context->GetAccessibilityManager(), GetThemeManager()); + } else { + LOGE("can not get accessibility manager or picker is null."); + } + SoleChildElement::PerformBuild(); + auto render = AceType::DynamicCast(renderNode_); + if (render) { + render->UpdateRenders(); + render->FlushColumnsOptions(); + } else { + LOGE("render picker base is null."); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/picker/picker_base_element.h b/frameworks/core/components/picker/picker_base_element.h new file mode 100644 index 00000000..00c4cf90 --- /dev/null +++ b/frameworks/core/components/picker/picker_base_element.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_BASE_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_BASE_ELEMENT_H + +#include "core/animation/flush_event.h" +#include "core/pipeline/base/sole_child_element.h" + +namespace OHOS::Ace { + +class PickerBaseElement : public SoleChildElement, public FlushEvent { + DECLARE_ACE_TYPE(PickerBaseElement, SoleChildElement, FlushEvent); + +public: + void Update() override; + void OnPostFlush() override; + void PerformBuild() override; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_BASE_ELEMENT_H diff --git a/frameworks/core/components/picker/picker_column_component.cpp b/frameworks/core/components/picker/picker_column_component.cpp new file mode 100644 index 00000000..ee357b1b --- /dev/null +++ b/frameworks/core/components/picker/picker_column_component.cpp @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/picker/picker_column_component.h" + +#include "base/utils/system_properties.h" +#include "core/components/clip/clip_component.h" +#include "core/components/display/display_component.h" +#include "core/components/flex/flex_component.h" +#include "core/components/picker/picker_column_element.h" +#include "core/components/picker/picker_option_component.h" +#include "core/components/picker/render_picker_column.h" +#include "core/components/scroll/scroll_component.h" + +namespace OHOS::Ace { +namespace { + +const uint32_t OPTION_COUNT_PHONE_LANDSCAPE = 3; + +} // namespace + +RefPtr PickerColumnComponent::CreateRenderNode() +{ + return RenderPickerColumn::Create(); +} + +RefPtr PickerColumnComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +void PickerColumnComponent::Initialize() +{ + if (!theme_) { + LOGE("Theme is null."); + return; + } + + if (GetCurrentIndex() >= GetOptionCount()) { + LOGE("current index[%{private}u] is out of range[0~%{private}u).", GetCurrentIndex(), GetOptionCount()); + return; + } + + std::list> showOptions; + uint32_t showCount = theme_->GetShowOptionCount(); + if (SystemProperties::GetDeviceType() == DeviceType::PHONE && + SystemProperties::GetDevcieOrientation() == DeviceOrientation::LANDSCAPE) { + showCount = OPTION_COUNT_PHONE_LANDSCAPE; + } + uint32_t selectedIndex = showCount / 2; // the middle option is selected that is current. + for (uint32_t index = 0; index < showCount; index++) { + RefPtr option = AceType::MakeRefPtr(); + option->SetSelected((index == selectedIndex)); + // Has selected item and normal item and disappear item which means at lease 5 items + // The first and last item is disappear item. + option->SetDisappear((SystemProperties::GetDeviceType() == DeviceType::PHONE + && showCount >= 5 && (index == 0 || index == showCount - 1))); + option->SetAlignTop(false); + option->SetAlignBottom(false); + option->SetTheme(theme_->clone()); + showOptions.emplace_back(option); + } + + RefPtr column = AceType::MakeRefPtr( + FlexAlign::CENTER, FlexAlign::CENTER, showOptions); + column->SetMainAxisSize(MainAxisSize::MIN); + RefPtr display = AceType::MakeRefPtr(column); + RefPtr columnClip = AceType::MakeRefPtr(display); + columnClip->SetFollowChild(true); + ClearChildren(); + AppendChild(columnClip); + if (!GetHasSplitter()) { + return; + } + RefPtr splitter = AceType::MakeRefPtr(":"); // use char ':' to split + auto splitterStyle = theme_->GetOptionStyle(true, false); + splitterStyle.SetFontWeight(FontWeight::BOLDER); + splitter->SetTextStyle(splitterStyle); + splitter->SetFocusColor(splitterStyle.GetTextColor()); + AppendChild(splitter); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/picker/picker_column_component.h b/frameworks/core/components/picker/picker_column_component.h new file mode 100644 index 00000000..0e06f0a6 --- /dev/null +++ b/frameworks/core/components/picker/picker_column_component.h @@ -0,0 +1,254 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_COLUMN_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_COLUMN_COMPONENT_H + +#include "core/accessibility/accessibility_manager.h" +#include "core/components/picker/picker_theme.h" +#include "core/components/picker/toss_animation_controller.h" +#include "core/pipeline/base/component_group.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { + +using ColumnChangeCallback = std::function; +using ColumnFinishCallback = std::function; + +class PickerColumnComponent : public ComponentGroup { + DECLARE_ACE_TYPE(PickerColumnComponent, ComponentGroup); + +public: + PickerColumnComponent() = default; + ~PickerColumnComponent() override = default; + + RefPtr CreateRenderNode() override; + RefPtr CreateElement() override; + + void Initialize(); + + const RefPtr& GetTheme() const + { + return theme_; + } + void SetTheme(const RefPtr& value) + { + theme_ = value; + } + + void ClearOption() + { + options_.clear(); + } + + void AppendOption(const std::string& value) + { + options_.emplace_back(value); + } + + uint32_t GetOptionCount() const + { + return options_.size(); + } + + std::string GetOption(uint32_t index) const + { + if (index >= GetOptionCount()) { + LOGE("index out of range."); + return ""; + } + return options_[index]; + } + + uint32_t GetCurrentIndex() const + { + return currentIndex_; + } + void SetCurrentIndex(uint32_t value) + { + currentIndex_ = value; + } + + bool GetInDialog() const + { + return inDialog_; + } + void SetInDialog(bool value) + { + inDialog_ = value; + } + + bool GetHasSplitter() const + { + return hasSplitter_; + } + void SetHasSplitter(bool value) + { + hasSplitter_ = value; + } + + std::string GetCurrentText() const + { + return GetOption(GetCurrentIndex()); + } + + const ColumnChangeCallback& GetChangeCallback() const + { + return changeCallback_; + } + void SetChangeCallback(const ColumnChangeCallback& value) + { + changeCallback_ = value; + } + + const ColumnFinishCallback& GetFinishCallback() const + { + return finishCallback_; + } + void SetFinishCallback(const ColumnFinishCallback& value) + { + finishCallback_ = value; + } + + const std::string& GetColumnTag() const + { + return columnTag_; + } + void SetColumnTag(const std::string& value) + { + columnTag_ = value; + } + + const std::string& GetPrefix() const + { + return prefix_; + } + void SetPrefix(const std::string& value) + { + prefix_ = value; + } + + const std::string& GetSuffix() const + { + return suffix_; + } + void SetSuffix(const std::string& value) + { + suffix_ = value; + } + + uint32_t GetWidthRatio() const + { + return widthRatio_; + } + void SetWidthRatio(uint32_t value) + { + widthRatio_ = value; + } + + int32_t GetNodeId() const + { + return nodeId_; + } + void SetNodeId(int32_t value) + { + nodeId_ = value; + } + + const Dimension& GetFixHeight() const + { + return fixHeight_; + } + void SetFixHeight(const Dimension& value) + { + fixHeight_ = value; + } + + void HandleChangeCallback(bool isAdd, bool needNotify) + { + if (changeCallback_) { + changeCallback_(GetColumnTag(), isAdd, GetCurrentIndex(), needNotify); + } else { + LOGE("change callback is null."); + } + } + + void HandleFinishCallback(bool success) + { + if (finishCallback_) { + finishCallback_(success); + } else { + LOGE("finish callback is null."); + } + } + + const std::function& GetRequestFocusCallback() const + { + return requestFocusCallback_; + } + void SetRequestFocusCallback(const std::function& value) + { + requestFocusCallback_ = value; + } + + void HandleRequestFocus() + { + if (!requestFocusCallback_) { + LOGE("function of request focus is null."); + return; + } + + requestFocusCallback_(); + } + + const RefPtr& GetToss() const + { + return tossAnimationController_; + } + +private: + uint32_t currentIndex_ = 0; + + bool inDialog_ = true; + + bool hasSplitter_ = false; + + int32_t nodeId_ = -1; // use -1 that is invalidate for default. + + RefPtr theme_; + + std::vector options_; + + ColumnChangeCallback changeCallback_; + + ColumnFinishCallback finishCallback_; + + std::string columnTag_; + + std::string prefix_; + std::string suffix_; + + Dimension fixHeight_; + + uint32_t widthRatio_ = 1; // default column ratio is 1:1 + + std::function requestFocusCallback_; + + RefPtr tossAnimationController_ = AceType::MakeRefPtr(); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_COLUMN_COMPONENT_H diff --git a/frameworks/core/components/picker/picker_column_element.cpp b/frameworks/core/components/picker/picker_column_element.cpp new file mode 100644 index 00000000..a6eb8388 --- /dev/null +++ b/frameworks/core/components/picker/picker_column_element.cpp @@ -0,0 +1,110 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/picker/picker_column_element.h" + +#include "core/components/picker/picker_column_component.h" +#include "core/components/picker/render_picker_column.h" + +namespace OHOS::Ace { + +void PickerColumnElement::PerformBuild() +{ + auto context = context_.Upgrade(); + auto column = AceType::DynamicCast(component_); + if (column && context && context->GetAccessibilityManager()) { + column->Initialize(); + column->SetRequestFocusCallback([weak = AceType::WeakClaim(this)]() { + auto element = weak.Upgrade(); + if (element) { + element->RequestFocus(); + } + }); + } else { + LOGE("column is null or can not get accessibility manager."); + } + SetFocusable(true); + ComponentGroupElement::PerformBuild(); + auto render = AceType::DynamicCast(renderNode_); + if (render) { + render->UpdateRenders(); + render->FlushCurrentOptions(); + } else { + LOGE("render picker column is null."); + } +} + +void PickerColumnElement::OnClick() +{ + auto render = AceType::DynamicCast(renderNode_); + if (!render) { + LOGE("render node is null."); + return; + } + render->HandleFinished(true); +} + +void PickerColumnElement::OnFocus() +{ + auto render = AceType::DynamicCast(renderNode_); + if (!render) { + LOGE("render node is null."); + return; + } + + render->HandleFocus(true); +} + +void PickerColumnElement::OnBlur() +{ + auto render = AceType::DynamicCast(renderNode_); + if (!render) { + LOGE("render node is null."); + return; + } + + render->HandleFocus(false); +} + +bool PickerColumnElement::OnKeyEvent(const KeyEvent& keyEvent) +{ + LOGD("key.event.action=%{private}d, key.event.code=%{private}d.", keyEvent.action, keyEvent.code); + + auto render = AceType::DynamicCast(renderNode_); + if (!render) { + LOGE("render node is null."); + return false; + } + + if (keyEvent.action == KeyAction::CLICK) { + if (keyEvent.code == KeyCode::KEYBOARD_UP || keyEvent.code == KeyCode::TV_CONTROL_UP) { + return render->HandleScroll(false); + } + if (keyEvent.code == KeyCode::KEYBOARD_DOWN || keyEvent.code == KeyCode::TV_CONTROL_DOWN) { + return render->HandleScroll(true); + } + } + + if (keyEvent.action == KeyAction::UP) { + if (keyEvent.code == KeyCode::KEYBOARD_ESCAPE || + keyEvent.code == KeyCode::KEYBOARD_BACK || keyEvent.code == KeyCode::TV_CONTROL_BACK) { + return render->HandleFinished(false); + } + } + + return false; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/picker/picker_column_element.h b/frameworks/core/components/picker/picker_column_element.h new file mode 100644 index 00000000..220db5c3 --- /dev/null +++ b/frameworks/core/components/picker/picker_column_element.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_COLUMN_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_COLUMN_ELEMENT_H + +#include "core/pipeline/base/component_group_element.h" + +namespace OHOS::Ace { + +class PickerColumnElement : public ComponentGroupElement, public FocusNode { + DECLARE_ACE_TYPE(PickerColumnElement, ComponentGroupElement, FocusNode); + +public: + void PerformBuild() override; + +protected: + void OnClick() override; + void OnFocus() override; + void OnBlur() override; + bool OnKeyEvent(const KeyEvent& keyEvent) override; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_COLUMN_ELEMENT_H diff --git a/frameworks/core/components/picker/picker_date_component.cpp b/frameworks/core/components/picker/picker_date_component.cpp new file mode 100644 index 00000000..930c7890 --- /dev/null +++ b/frameworks/core/components/picker/picker_date_component.cpp @@ -0,0 +1,874 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/picker/picker_date_component.h" + +namespace OHOS::Ace { + +/* + * Lunar information in 200 years from 1900. + *

+ * | 0 - 11(bit) | 12 - 15(bit) | + * month leap month + * If last 4bit is 1111 or 0000 means no leap month. + * If the last 4bit in next data is 1111, the days of leap month is 30 days, + * otherwise, the days of leap month is 29days. + */ +const uint16_t LunarCalculator::LUNAR_INFO[] = { + 0x6aa0, 0xbaa3, 0xab50, + 0x4bd8, 0x4ae0, 0xa570, 0x54d5, 0xd260, 0xd950, 0x5554, 0x56af, + 0x9ad0, 0x55d2, 0x4ae0, 0xa5b6, 0xa4d0, 0xd250, 0xd295, 0xb54f, + 0xd6a0, 0xada2, 0x95b0, 0x4977, 0x497f, 0xa4b0, 0xb4b5, 0x6a50, + 0x6d40, 0xab54, 0x2b6f, 0x9570, 0x52f2, 0x4970, 0x6566, 0xd4a0, + 0xea50, 0x6a95, 0x5adf, 0x2b60, 0x86e3, 0x92ef, 0xc8d7, 0xc95f, + 0xd4a0, 0xd8a6, 0xb55f, 0x56a0, 0xa5b4, 0x25df, 0x92d0, 0xd2b2, + 0xa950, 0xb557, 0x6ca0, 0xb550, 0x5355, 0x4daf, 0xa5b0, 0x4573, + 0x52bf, 0xa9a8, 0xe950, 0x6aa0, 0xaea6, 0xab50, 0x4b60, 0xaae4, + 0xa570, 0x5260, 0xf263, 0xd950, 0x5b57, 0x56a0, 0x96d0, 0x4dd5, + 0x4ad0, 0xa4d0, 0xd4d4, 0xd250, 0xd558, 0xb540, 0xb6a0, 0x95a6, + 0x95bf, 0x49b0, 0xa974, 0xa4b0, 0xb27a, 0x6a50, 0x6d40, 0xaf46, + 0xab60, 0x9570, 0x4af5, 0x4970, 0x64b0, 0x74a3, 0xea50, 0x6b58, + 0x5ac0, 0xab60, 0x96d5, 0x92e0, 0xc960, 0xd954, 0xd4a0, 0xda50, + 0x7552, 0x56a0, 0xabb7, 0x25d0, 0x92d0, 0xcab5, 0xa950, 0xb4a0, + 0xbaa4, 0xad50, 0x55d9, 0x4ba0, 0xa5b0, 0x5176, 0x52bf, 0xa930, + 0x7954, 0x6aa0, 0xad50, 0x5b52, 0x4b60, 0xa6e6, 0xa4e0, 0xd260, + 0xea65, 0xd530, 0x5aa0, 0x76a3, 0x96d0, 0x4afb, 0x4ad0, 0xa4d0, + 0xd0b6, 0xd25f, 0xd520, 0xdd45, 0xb5a0, 0x56d0, 0x55b2, 0x49b0, + 0xa577, 0xa4b0, 0xaa50, 0xb255, 0x6d2f, 0xada0, 0x4b63, 0x937f, + 0x49f8, 0x4970, 0x64b0, 0x68a6, 0xea5f, 0x6b20, 0xa6c4, 0xaaef, + 0x92e0, 0xd2e3, 0xc960, 0xd557, 0xd4a0, 0xda50, 0x5d55, 0x56a0, + 0xa6d0, 0x55d4, 0x52d0, 0xa9b8, 0xa950, 0xb4a0, 0xb6a6, 0xad50, + 0x55a0, 0xaba4, 0xa5b0, 0x52b0, 0xb273, 0x6930, 0x7337, 0x6aa0, + 0xad50, 0x4b55, 0x4b6f, 0xa570, 0x54e4, 0xd260, 0xe968, 0xd520, + 0xdaa0, 0x6aa6, 0x56df, 0x4ae0, 0xa9d4, 0xa4d0, 0xd150, 0xf252, + 0xd520, 0xdd45, 0xb5a0, 0x56d0 +}; + +bool PickerStringFormatter::inited_ = false; +const std::string PickerStringFormatter::empty_; +std::vector PickerStringFormatter::years_; // year from 1900 to 2100,count is 201 +std::vector PickerStringFormatter::solarMonths_; // solar month from 1 to 12,count is 12 +std::vector PickerStringFormatter::solarDays_; // solar day from 1 to 31, count is 31 +std::vector PickerStringFormatter::lunarMonths_; // lunar month from 1 to 24, count is 24 +std::vector PickerStringFormatter::lunarDays_; // lunar day from 1 to 30, count is 30 +std::vector PickerStringFormatter::tagOrder_; // order of year month day + +void PickerStringFormatter::Init() +{ + if (inited_) { + return; + } + years_.resize(201); // year from 1900 to 2100,count is 201 + solarMonths_.resize(12); // solar month from 1 to 12,count is 12 + solarDays_.resize(31); // solar day from 1 to 31, count is 31 + lunarMonths_.resize(24); // lunar month from 1 to 24, count is 24 + lunarDays_.resize(30); // lunar day from 1 to 30, count is 30 + // init year from 1900 to 2100 + for (uint32_t year = 1900; year <= 2100; ++year) { + DateTime date; + date.year = year; + years_[year - 1900] = Localization::GetInstance()->FormatDateTime(date, "y"); // index start from 0 + } + // init solar month from 1 to 12 + auto months = Localization::GetInstance()->GetMonths(true); + for (uint32_t month = 1; month <= 12; ++month) { + if (month - 1 < months.size()) { + solarMonths_[month - 1] = months[month - 1]; + continue; + } + DateTime date; + date.month = month - 1; // W3C's month start from 0 to 11 + solarMonths_[month - 1] = Localization::GetInstance()->FormatDateTime(date, "M"); // index start from 0 + } + // init solar day from 1 to 31 + for (uint32_t day = 1; day <= 31; ++day) { + DateTime date; + date.day = day; + solarDays_[day - 1] = Localization::GetInstance()->FormatDateTime(date, "d"); // index start from 0 + } + // init lunar month from 1 to 24 which is 1th, 2th, ... leap 1th, leap 2th ... + for (uint32_t index = 1; index <= 24; ++index) { + uint32_t month = (index > 12 ? index - 12 : index); + bool isLeap = (index > 12); + lunarMonths_[index - 1] = Localization::GetInstance()->GetLunarMonth(month, isLeap); // index start from 0 + } + // init lunar day from 1 to 30 + for (uint32_t day = 1; day <= 30; ++day) { + lunarDays_[day - 1] = Localization::GetInstance()->GetLunarDay(day); // index start from 0 + } + inited_ = true; + Localization::GetInstance()->SetOnChange([]() { PickerStringFormatter::inited_ = false; }); +} + +const std::string& PickerStringFormatter::GetYear(uint32_t year) +{ + Init(); + if (!(1900 <= year && year <= 2100)) { // year in [1900,2100] + return empty_; + } + return years_[year - 1900]; // index in [0, 200] +} + +const std::string& PickerStringFormatter::GetSolarMonth(uint32_t month) +{ + Init(); + if (!(1 <= month && month <= 12)) { // solar month in [1,12] + return empty_; + } + return solarMonths_[month - 1]; // index in [0,11] +} + +const std::string& PickerStringFormatter::GetSolarDay(uint32_t day) +{ + Init(); + if (!(1 <= day && day <= 31)) { // solar day in [1,31] + return empty_; + } + return solarDays_[day - 1]; // index in [0,30] +} + +const std::string& PickerStringFormatter::GetLunarMonth(uint32_t month, bool isLeap) +{ + Init(); + uint32_t index = (isLeap ? month + 12 : month); // leap month is behind 12 index + if (!(1 <= index && index <= 24)) { // lunar month need in [1,24] + return empty_; + } + return lunarMonths_[index - 1]; // index in [0,23] +} + +const std::string& PickerStringFormatter::GetLunarDay(uint32_t day) +{ + Init(); + if (!(1 <= day && day <= 30)) { // lunar day need in [1,30] + return empty_; + } + return lunarDays_[day - 1]; // index in [0,29] +} + +const std::vector& PickerStringFormatter::GetTagOrder() +{ + tagOrder_.clear(); + Localization::GetInstance()->GetDateColumnFormatOrder(tagOrder_); + return tagOrder_; +} + +// all date should in solar range [1900.1.31, 2100.12.31] and lunar range [1900.1.1, 2100.12.1] +const PickerDate PickerDateComponent::limitStartDate_(1900, 1, 31); +const PickerDate PickerDateComponent::limitEndDate_(2100, 12, 31); + +PickerDateComponent::PickerDateComponent() +{ + auto yearColumn = AceType::MakeRefPtr(); + yearColumn->SetColumnTag(PICKER_YEAR_COLUMN); + yearColumn->SetWidthRatio(3); // year:month:day = 3:2:2 + auto monthColumn = AceType::MakeRefPtr(); + monthColumn->SetColumnTag(PICKER_MONTH_COLUMN); + monthColumn->SetWidthRatio(2); // year:month:day = 3:2:2 + auto dayColumn = AceType::MakeRefPtr(); + dayColumn->SetColumnTag(PICKER_DAY_COLUMN); + dayColumn->SetWidthRatio(2); // year:month:day = 3:2:2 + auto order = PickerStringFormatter::GetTagOrder(); + if (order.size() != 3) { // has 3 columns: year month day + AppendColumn(yearColumn); + AppendColumn(monthColumn); + AppendColumn(dayColumn); + } else { + std::map> tagColumns; + tagColumns[PICKER_YEAR_COLUMN] = yearColumn; + tagColumns[PICKER_MONTH_COLUMN] = monthColumn; + tagColumns[PICKER_DAY_COLUMN] = dayColumn; + for (uint32_t i = 0; i < order.size(); ++i) { + AppendColumn(tagColumns[order[i]]); + } + } + startDateLunar_ = SolarToLunar(startDateSolar_); + endDateLunar_ = SolarToLunar(endDateSolar_); +} + +void PickerDateComponent::OnTitleBuilding() +{ + auto theme = GetTheme(); + if (!theme) { + LOGE("theme is null."); + return; + } + SetHasTitle(theme->GetShowButtons()); + SetHasButtons(theme->GetShowButtons()); + + auto date = GetCurrentDate(); + if (onDateChange_) { + onDateChange_(date); + } + + auto titleComponent = GetTitle(); + if (!titleComponent) { + LOGE("title component is null."); + return; + } + titleComponent->SetData(date.ToString(false)); +} + +void PickerDateComponent::OnColumnsBuilding() +{ + AdjustSolarDate(selectedDate_); + if (lunar_) { + auto lunarDate = SolarToLunar(selectedDate_); + LunarColumnsBuilding(lunarDate); + } else { + SolarColumnsBuilding(selectedDate_); + } +} + +void PickerDateComponent::OnSelectedSaving() +{ + selectedDate_ = GetCurrentDate(); +} + +std::string PickerDateComponent::GetSelectedObject(bool isColumnChange, const std::string& changeColumnTag) const +{ + if (isColumnChange) { + LOGW("not need support."); + return ""; + } + + auto date = selectedDate_; + // W3C's month is between 0 to 11, need to reduce one. + date.SetMonth(date.GetMonth() - 1); + return date.ToString(true); +} + +void PickerDateComponent::OnDataLinking(const std::string& tag, bool isAdd, uint32_t index, + std::vector& resultTags) +{ + if (tag == PICKER_YEAR_COLUMN) { + HandleYearChange(isAdd, index, resultTags); + return; + } + + if (tag == PICKER_MONTH_COLUMN) { + HandleMonthChange(isAdd, index, resultTags); + return; + } + + if (tag == PICKER_DAY_COLUMN) { + HandleDayChange(isAdd, index, resultTags); + return; + } + + LOGE("unknown tag[%{private}s] of column.", tag.c_str()); +} + + +void PickerDateComponent::OnAnimationPlaying() +{ + auto controller = GetAnimationController(); + if (!controller) { + LOGE("controller is null."); + return; + } + + controller->Play(true); +} + +PickerDate PickerDateComponent::GetCurrentDate() const +{ + PickerDate result; + auto yearColumn = GetColumn(PICKER_YEAR_COLUMN); + auto monthColumn = GetColumn(PICKER_MONTH_COLUMN); + auto dayColumn = GetColumn(PICKER_DAY_COLUMN); + if (!yearColumn || !monthColumn || !dayColumn) { + LOGE("year or month or day column is null."); + return result; + } + + if (!lunar_) { + result.SetYear(startDateSolar_.GetYear() + yearColumn->GetCurrentIndex()); + result.SetMonth(monthColumn->GetCurrentIndex() + 1); // month from 1 to 12, index from 0 to 11. + result.SetDay(dayColumn->GetCurrentIndex() + 1); // day from 1 to 31, index from 0 to 30. + return result; + } + + uint32_t lunarYear = startDateLunar_.year + yearColumn->GetCurrentIndex(); + return LunarToSolar(GetCurrentLunarDate(lunarYear)); +} + +LunarDate PickerDateComponent::GetCurrentLunarDate(uint32_t lunarYear) const +{ + LunarDate lunarResult; + auto yearColumn = GetColumn(PICKER_YEAR_COLUMN); + auto monthColumn = GetColumn(PICKER_MONTH_COLUMN); + auto dayColumn = GetColumn(PICKER_DAY_COLUMN); + if (!yearColumn || !monthColumn || !dayColumn) { + LOGE("year or month or day column is null."); + return lunarResult; + } + + uint32_t lunarLeapMonth = 0; + bool hasLeapMonth = GetLunarLeapMonth(lunarYear, lunarLeapMonth); + lunarResult.isLeapMonth = false; + if (!hasLeapMonth) { + lunarResult.month = monthColumn->GetCurrentIndex() + 1; // month from 1 to 12, index from 0 to 11 + } else { + if (monthColumn->GetCurrentIndex() == lunarLeapMonth) { + lunarResult.isLeapMonth = true; + lunarResult.month = lunarLeapMonth; + } else if (monthColumn->GetCurrentIndex() < lunarLeapMonth) { + lunarResult.month = monthColumn->GetCurrentIndex() + 1; // month start from 1, index start from 0 + } else { + lunarResult.month = monthColumn->GetCurrentIndex(); + } + } + lunarResult.year = startDateLunar_.year + yearColumn->GetCurrentIndex(); + lunarResult.day = dayColumn->GetCurrentIndex() + 1; // day start form 1, index start from 0 + return lunarResult; +} + +void PickerDateComponent::HandleYearChange(bool isAdd, uint32_t index, std::vector& resultTags) +{ + if (lunar_) { + HandleLunarYearChange(isAdd, index); + } else { + HandleSolarYearChange(isAdd, index); + } + resultTags.emplace_back(PICKER_YEAR_COLUMN); + resultTags.emplace_back(PICKER_MONTH_COLUMN); + resultTags.emplace_back(PICKER_DAY_COLUMN); +} + +void PickerDateComponent::HandleLunarYearChange(bool isAdd, uint32_t index) +{ + auto yearColumn = GetColumn(PICKER_YEAR_COLUMN); + if (!yearColumn) { + LOGE("year column is null."); + return; + } + + uint32_t lastYearIndex = index; + auto optionCount = yearColumn->GetOptionCount(); + if (isAdd) { // need reduce one index + lastYearIndex = optionCount != 0 ? (yearColumn->GetOptionCount() + lastYearIndex - 1) % optionCount : 0; + } else { // need add one index + lastYearIndex = optionCount != 0 ? (yearColumn->GetOptionCount() + lastYearIndex + 1) % optionCount : 0; + } + uint32_t lastLunarYear = startDateLunar_.year + lastYearIndex; + auto lunarDate = GetCurrentLunarDate(lastLunarYear); + uint32_t nowLeapMonth = 0; + bool hasLeapMonth = GetLunarLeapMonth(lunarDate.year, nowLeapMonth); + if (!hasLeapMonth && lunarDate.isLeapMonth) { + lunarDate.isLeapMonth = false; + } + uint32_t nowMaxDay = GetLunarMaxDay(lunarDate.year, lunarDate.month, lunarDate.isLeapMonth); + if (lunarDate.day > nowMaxDay) { + lunarDate.day = nowMaxDay; + } + + AdjustLunarDate(lunarDate); + LunarColumnsBuilding(lunarDate); +} + +void PickerDateComponent::HandleSolarYearChange(bool isAdd, uint32_t index) +{ + auto date = GetCurrentDate(); + + bool leapYear = PickerDate::IsLeapYear(date.GetYear()); + if (date.GetMonth() == 2 && !leapYear && date.GetDay() > 28) { // invalidate of 2th month + date.SetDay(28); // the max day of the 2th month of none leap year is 28 + } + + AdjustSolarDate(date); + SolarColumnsBuilding(date); +} + +void PickerDateComponent::HandleMonthChange(bool isAdd, uint32_t index, std::vector& resultTags) +{ + if (lunar_) { + HandleLunarMonthChange(isAdd, index); + } else { + HandleSolarMonthChange(isAdd, index); + } + resultTags.emplace_back(PICKER_YEAR_COLUMN); + resultTags.emplace_back(PICKER_MONTH_COLUMN); + resultTags.emplace_back(PICKER_DAY_COLUMN); +} + +void PickerDateComponent::HandleLunarMonthChange(bool isAdd, uint32_t index) +{ + auto yearColumn = GetColumn(PICKER_YEAR_COLUMN); + auto monthColumn = GetColumn(PICKER_MONTH_COLUMN); + if (!yearColumn || !monthColumn) { + LOGE("year or month column is null."); + return; + } + + uint32_t nowLunarYear = startDateLunar_.year + yearColumn->GetCurrentIndex(); + auto lunarDate = GetCurrentLunarDate(nowLunarYear); + if (isAdd && index == 0) { + lunarDate.year = lunarDate.year + 1; // add to next year + if (lunarDate.year > endDateLunar_.year) { + lunarDate.year = startDateLunar_.year; + } + } + if (!isAdd && index == monthColumn->GetOptionCount() - 1) { + lunarDate.year = lunarDate.year - 1; // reduce to previous year + if (lunarDate.year < startDateLunar_.year) { + lunarDate.year = endDateLunar_.year; + } + } + uint32_t lunarLeapMonth = 0; + bool hasLeapMonth = GetLunarLeapMonth(lunarDate.year, lunarLeapMonth); + if (!hasLeapMonth && lunarDate.isLeapMonth) { + lunarDate.isLeapMonth = false; + } + uint32_t maxDay = GetLunarMaxDay(lunarDate.year, lunarDate.month, lunarDate.isLeapMonth); + if (lunarDate.day > maxDay) { + lunarDate.day = maxDay; + } + + AdjustLunarDate(lunarDate); + LunarColumnsBuilding(lunarDate); +} + +void PickerDateComponent::HandleSolarMonthChange(bool isAdd, uint32_t index) +{ + auto date = GetCurrentDate(); + if (isAdd && date.GetMonth() == 1) { // first month is 1 + date.SetYear(date.GetYear() + 1); // add 1 year, the next year + if (date.GetYear() > endDateSolar_.GetYear()) { + date.SetYear(startDateSolar_.GetYear()); + } + } + if (!isAdd && date.GetMonth() == 12) { // the last month is 12 + date.SetYear(date.GetYear() - 1); // reduce 1 year, the previous year + if (date.GetYear() < startDateSolar_.GetYear()) { + date.SetYear(endDateSolar_.GetYear()); + } + } + uint32_t maxDay = PickerDate::GetMaxDay(date.GetYear(), date.GetMonth()); + if (date.GetDay() > maxDay) { + date.SetDay(maxDay); + } + AdjustSolarDate(date); + SolarColumnsBuilding(date); +} + +void PickerDateComponent::HandleDayChange(bool isAdd, uint32_t index, std::vector& resultTags) +{ + if (lunar_) { + HandleLunarDayChange(isAdd, index); + } else { + HandleSolarDayChange(isAdd, index); + } + resultTags.emplace_back(PICKER_YEAR_COLUMN); + resultTags.emplace_back(PICKER_MONTH_COLUMN); + resultTags.emplace_back(PICKER_DAY_COLUMN); +} + +void PickerDateComponent::HandleSolarDayChange(bool isAdd, uint32_t index) +{ + auto yearColumn = GetColumn(PICKER_YEAR_COLUMN); + auto monthColumn = GetColumn(PICKER_MONTH_COLUMN); + auto dayColumn = GetColumn(PICKER_DAY_COLUMN); + if (!yearColumn || !monthColumn || !dayColumn) { + LOGE("year or month or day column is null."); + return; + } + + auto date = GetCurrentDate(); + if (isAdd && index == 0) { + date.SetMonth(date.GetMonth() + 1); // add to next month + if (date.GetMonth() > 12) { // invalidate month, max month is 12 + date.SetMonth(1); // first month is 1 + date.SetYear(date.GetYear() + 1); // add to next year + if (date.GetYear() > endDateSolar_.GetYear()) { + date.SetYear(startDateSolar_.GetYear()); + } + } + } + if (!isAdd && dayColumn->GetCurrentIndex() == dayColumn->GetOptionCount() - 1) { // last index is count - 1 + date.SetMonth(date.GetMonth() - 1); // reduce to previous month + if (date.GetMonth() == 0) { // min month is 1, invalidate + date.SetMonth(12); // set to be the last month + date.SetYear(date.GetYear() - 1); // reduce to previous year + if (date.GetYear() < startDateSolar_.GetYear()) { + date.SetYear(endDateSolar_.GetYear()); + } + } + date.SetDay(PickerDate::GetMaxDay(date.GetYear(), date.GetMonth())); // reduce to previous month's last day + } + uint32_t maxDay = PickerDate::GetMaxDay(date.GetYear(), date.GetMonth()); + if (date.GetDay() > maxDay) { + date.SetDay(maxDay); + } + AdjustSolarDate(date); + SolarColumnsBuilding(date); +} + +void PickerDateComponent::HandleLunarDayChange(bool isAdd, uint32_t index) +{ + if (isAdd) { + HandleAddLunarDayChange(index); + } else { + HandleReduceLunarDayChange(index); + } +} + +void PickerDateComponent::HandleAddLunarDayChange(uint32_t index) +{ + auto yearColumn = GetColumn(PICKER_YEAR_COLUMN); + auto monthColumn = GetColumn(PICKER_MONTH_COLUMN); + auto dayColumn = GetColumn(PICKER_DAY_COLUMN); + if (!yearColumn || !monthColumn || !dayColumn) { + LOGE("year or month or day column is null."); + return; + } + + uint32_t nowLunarYear = startDateLunar_.year + yearColumn->GetCurrentIndex(); + auto lunarDate = GetCurrentLunarDate(nowLunarYear); + uint32_t lunarLeapMonth = 0; + bool hasLeapMonth = GetLunarLeapMonth(lunarDate.year, lunarLeapMonth); + if (index == 0) { + if (monthColumn->GetCurrentIndex() == monthColumn->GetOptionCount() - 1) { // max index is count - 1 + lunarDate.year = lunarDate.year + 1; // add to next year + if (lunarDate.year > endDateLunar_.year) { + lunarDate.year = startDateLunar_.year; + } + lunarDate.month = 1; // first month + lunarDate.isLeapMonth = false; + } else { + if (lunarDate.isLeapMonth) { + lunarDate.month = lunarDate.month + 1; // add to next month + lunarDate.isLeapMonth = false; + } else if (!hasLeapMonth) { + lunarDate.month = lunarDate.month + 1; // add to next month + } else if (lunarLeapMonth == lunarDate.month) { + lunarDate.isLeapMonth = true; + } else { + lunarDate.month = lunarDate.month + 1; // add to next month + } + } + } + + AdjustLunarDate(lunarDate); + LunarColumnsBuilding(lunarDate); +} + +void PickerDateComponent::HandleReduceLunarDayChange(uint32_t index) +{ + auto yearColumn = GetColumn(PICKER_YEAR_COLUMN); + auto monthColumn = GetColumn(PICKER_MONTH_COLUMN); + auto dayColumn = GetColumn(PICKER_DAY_COLUMN); + if (!yearColumn || !monthColumn || !dayColumn) { + LOGE("year or month or day column is null."); + return; + } + + uint32_t nowLunarYear = startDateLunar_.year + yearColumn->GetCurrentIndex(); + auto lunarDate = GetCurrentLunarDate(nowLunarYear); + uint32_t lunarLeapMonth = 0; + bool hasLeapMonth = GetLunarLeapMonth(lunarDate.year, lunarLeapMonth); + if (dayColumn->GetCurrentIndex() == dayColumn->GetOptionCount() - 1) { // max index is count - 1 + if (monthColumn->GetCurrentIndex() == 0) { + lunarDate.year = lunarDate.year - 1; // reduce to previous year + if (lunarDate.year < startDateLunar_.year) { + lunarDate.year = endDateLunar_.year; + } + lunarDate.month = 12; // set to be previous year's max month + lunarDate.isLeapMonth = false; + if (LunarCalculator::GetLunarLeapMonth(lunarDate.year) == 12) { // leap 12th month + lunarDate.isLeapMonth = true; + } + lunarDate.day = GetLunarMaxDay(lunarDate.year, lunarDate.month, lunarDate.isLeapMonth); + } else { + if (lunarDate.isLeapMonth) { + lunarDate.isLeapMonth = false; + } else if (!hasLeapMonth) { + lunarDate.month = lunarDate.month - 1; // reduce to previous month + } else if (lunarLeapMonth == lunarDate.month - 1) { // leap month is previous month + lunarDate.isLeapMonth = true; + lunarDate.month = lunarLeapMonth; + } else { + lunarDate.month = lunarDate.month - 1; // reduce to previous month + } + lunarDate.day = GetLunarMaxDay(lunarDate.year, lunarDate.month, lunarDate.isLeapMonth); + } + } + + AdjustLunarDate(lunarDate); + LunarColumnsBuilding(lunarDate); +} + +std::string PickerDateComponent::GetYearFormatString(uint32_t year) const +{ + return PickerStringFormatter::GetYear(year); +} + +std::string PickerDateComponent::GetMonthFormatString(uint32_t month, bool isLunar, bool isLeap) const +{ + if (isLunar) { + return PickerStringFormatter::GetLunarMonth(month, isLeap); + } + + return PickerStringFormatter::GetSolarMonth(month); +} + +std::string PickerDateComponent::GetDayFormatString(uint32_t day, bool isLunar) const +{ + if (isLunar) { + return PickerStringFormatter::GetLunarDay(day); + } + + return PickerStringFormatter::GetSolarDay(day); +} + +void PickerDateComponent::OnLunarCallback(bool checked, std::vector& resultTags) +{ + if (checked) { + auto solarDate = GetCurrentDate(); + auto lunarDate = SolarToLunar(solarDate); + LunarColumnsBuilding(lunarDate); + } else { + auto solarDate = GetCurrentDate(); + SolarColumnsBuilding(solarDate); + } + + resultTags.emplace_back(PICKER_YEAR_COLUMN); + resultTags.emplace_back(PICKER_MONTH_COLUMN); + resultTags.emplace_back(PICKER_DAY_COLUMN); +} + +LunarDate PickerDateComponent::SolarToLunar(const PickerDate& date) const +{ + Date result; + result.year = date.GetYear(); + result.month = date.GetMonth(); + result.day = date.GetDay(); + return Localization::GetInstance()->GetLunarDate(result); +} + +PickerDate PickerDateComponent::LunarToSolar(const LunarDate& date) const +{ + uint32_t days = date.day - 1; // calculate days from 1900.1.1 to this date + if (date.isLeapMonth) { + days += LunarCalculator::GetLunarMonthDays(date.year, date.month); + } else { + uint32_t leapMonth = LunarCalculator::GetLunarLeapMonth(date.year); + if (leapMonth < date.month) { + days += LunarCalculator::GetLunarLeapDays(date.year); + } + } + for (uint32_t month = 1; month < date.month; ++month) { // month start from 1 + days += LunarCalculator::GetLunarMonthDays(date.year, month); + } + for (uint32_t year = 1900; year < date.year; ++year) { // year start from 1900 + days += LunarCalculator::GetLunarYearDays(year); + } + days += 30; // days from solar's 1900.1.1 to lunar's 1900.1.1 is 30 + PickerDate result; + result.FromDays(days); + return result; +} + +bool PickerDateComponent::GetLunarLeapMonth(uint32_t year, uint32_t& outLeapMonth) const +{ + auto leapMonth = LunarCalculator::GetLunarLeapMonth(year); + if (leapMonth <= 0) { + return false; + } + + outLeapMonth = leapMonth; + return true; +} + +uint32_t PickerDateComponent::GetLunarMaxDay(uint32_t year, uint32_t month, bool isLeap) const +{ + if (isLeap) { + return LunarCalculator::GetLunarLeapDays(year); + } else { + return LunarCalculator::GetLunarMonthDays(year, month); + } +} + +void PickerDateComponent::SolarColumnsBuilding(const PickerDate& current) +{ + auto yearColumn = GetColumn(PICKER_YEAR_COLUMN); + auto monthColumn = GetColumn(PICKER_MONTH_COLUMN); + auto dayColumn = GetColumn(PICKER_DAY_COLUMN); + if (!yearColumn || !monthColumn || !dayColumn) { + LOGE("year or month or day column is null."); + return; + } + + yearColumn->ClearOption(); + for (uint32_t year = startDateSolar_.GetYear(); year <= endDateSolar_.GetYear(); ++year) { + if (year == current.GetYear()) { + yearColumn->SetCurrentIndex(yearColumn->GetOptionCount()); + } + yearColumn->AppendOption(GetYearFormatString(year)); + } + + monthColumn->ClearOption(); + // solar's month start form 1 to 12 + for (uint32_t month = 1; month <= 12; month++) { + if (month == current.GetMonth()) { + monthColumn->SetCurrentIndex(monthColumn->GetOptionCount()); + } + monthColumn->AppendOption(GetMonthFormatString(month, false, false)); + } + + dayColumn->ClearOption(); + uint32_t maxDay = PickerDate::GetMaxDay(current.GetYear(), current.GetMonth()); + // solar's day start from 1 + for (uint32_t day = 1; day <= maxDay; day++) { + if (day == current.GetDay()) { + dayColumn->SetCurrentIndex(dayColumn->GetOptionCount()); + } + dayColumn->AppendOption(GetDayFormatString(day, false)); + } + + lunar_ = false; +} + +void PickerDateComponent::LunarColumnsBuilding(const LunarDate& current) +{ + auto yearColumn = GetColumn(PICKER_YEAR_COLUMN); + auto monthColumn = GetColumn(PICKER_MONTH_COLUMN); + auto dayColumn = GetColumn(PICKER_DAY_COLUMN); + if (!yearColumn || !monthColumn || !dayColumn) { + LOGE("year or month or day column is null."); + return; + } + + yearColumn->ClearOption(); + for (uint32_t index = startDateLunar_.year; index <= endDateLunar_.year; ++index) { + if (current.year == index) { + yearColumn->SetCurrentIndex(yearColumn->GetOptionCount()); + } + yearColumn->AppendOption(GetYearFormatString(index)); + } + + uint32_t lunarLeapMonth = 0; + bool hasLeapMonth = GetLunarLeapMonth(current.year, lunarLeapMonth); + monthColumn->ClearOption(); + // lunar's month start form 1 to 12 + for (uint32_t index = 1; index <= 12; ++index) { + if (!current.isLeapMonth && current.month == index) { + monthColumn->SetCurrentIndex(monthColumn->GetOptionCount()); + } + monthColumn->AppendOption(GetMonthFormatString(index, true, false)); + if (hasLeapMonth && lunarLeapMonth == index) { + if (current.isLeapMonth && current.month == index) { + monthColumn->SetCurrentIndex(monthColumn->GetOptionCount()); + } + monthColumn->AppendOption(GetMonthFormatString(index, true, true)); + } + } + + uint32_t lunarMaxDay = GetLunarMaxDay(current.year, current.month, current.isLeapMonth); + dayColumn->ClearOption(); + // lunar's day start from 1 + for (uint32_t index = 1; index <= lunarMaxDay; ++index) { + if (current.day == index) { + dayColumn->SetCurrentIndex(dayColumn->GetOptionCount()); + } + dayColumn->AppendOption(GetDayFormatString(index, true)); + } + + lunar_ = true; +} + +void PickerDateComponent::AdjustSolarDate(PickerDate& date) const +{ + AdjustSolarDate(date, startDateSolar_, endDateSolar_); +} + +void PickerDateComponent::AdjustSolarDate(PickerDate& date, const PickerDate& start, const PickerDate& end) const +{ + if (SolarDateCompare(date, start) < 0) { + date = start; + return; + } + if (SolarDateCompare(date, end) > 0) { + date = end; + } +} + +void PickerDateComponent::AdjustLunarDate(LunarDate& date) const +{ + if (LunarDateCompare(date, startDateLunar_) < 0) { + date = startDateLunar_; + return; + } + if (LunarDateCompare(date, endDateLunar_) > 0) { + date = endDateLunar_; + } +} + +int PickerDateComponent::SolarDateCompare(const PickerDate& left, const PickerDate& right) const +{ + static const int leftEqualRight = 0; // means left = right + static const int leftGreatRight = 1; // means left > right + static const int leftLessRight = -1; // means left < right + if (left.GetYear() > right.GetYear()) { + return leftGreatRight; + } + if (left.GetYear() < right.GetYear()) { + return leftLessRight; + } + if (left.GetMonth() > right.GetMonth()) { + return leftGreatRight; + } + if (left.GetMonth() < right.GetMonth()) { + return leftLessRight; + } + if (left.GetDay() > right.GetDay()) { + return leftGreatRight; + } + if (left.GetDay() < right.GetDay()) { + return leftLessRight; + } + return leftEqualRight; +} + +int PickerDateComponent::LunarDateCompare(const LunarDate& left, const LunarDate& right) const +{ + static const int leftEqualRight = 0; // means left = right + static const int leftGreatRight = 1; // means left > right + static const int leftLessRight = -1; // means left < right + static const double addingValue = 0.5; // adding value for leap month. + if (left.year > right.year) { + return leftGreatRight; + } + if (left.year < right.year) { + return leftLessRight; + } + double leftMonth = (left.isLeapMonth ? left.month + addingValue : left.month); + double rightMonth = (right.isLeapMonth ? right.month + addingValue : right.month); + if (GreatNotEqual(leftMonth, rightMonth)) { + return leftGreatRight; + } + if (LessNotEqual(leftMonth, rightMonth)) { + return leftLessRight; + } + if (left.day > right.day) { + return leftGreatRight; + } + if (left.day < right.day) { + return leftLessRight; + } + return leftEqualRight; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/picker/picker_date_component.h b/frameworks/core/components/picker/picker_date_component.h new file mode 100644 index 00000000..d8b6c164 --- /dev/null +++ b/frameworks/core/components/picker/picker_date_component.h @@ -0,0 +1,244 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_DATE_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_DATE_COMPONENT_H + +#include "base/i18n/localization.h" +#include "core/components/picker/picker_base_component.h" + +namespace OHOS::Ace { + +class LunarCalculator { +public: + static int GetLunarLeapMonth(int lunarYear) + { + if ((lunarYear - YEAR_START) >= LUNAR_INFO_SIZE) { + return 0; + } + int leapMonth = LUNAR_INFO[lunarYear - YEAR_START] & 0xf; // use 0xf to get leap month info + return leapMonth == 0xf ? 0 : leapMonth; + } + + static int GetLunarLeapDays(int lunarYear) + { + if ((lunarYear - YEAR_START + 1) >= LUNAR_INFO_SIZE) { + return 0; + } + return GetLunarLeapMonth(lunarYear) > 0 ? ((LUNAR_INFO[lunarYear - YEAR_START + 1] & 0xf) == 0xf ? 30 : 29) + : 0; // big month 30 days other 29 + } + + static int GetLunarYearDays(int lunarYear) + { + if ((lunarYear - YEAR_START) >= LUNAR_INFO_SIZE) { + return 0; + } + int totalDays = 348; // lunar year has (12 * 29 =) 348 days at least + for (uint32_t i = 0x8000; i > 0x8; i >>= 1) { // get month info from bit of LUNAR_INFO + totalDays += ((LUNAR_INFO[lunarYear - YEAR_START] & i) != 0) ? 1 : 0; + } + + return totalDays + GetLunarLeapDays(lunarYear); + } + + static int GetLunarMonthDays(int lunarYear, int lunarMonth) + { + if ((lunarYear - YEAR_START) >= LUNAR_INFO_SIZE) { + return 0; + } + uint32_t month = static_cast(lunarMonth); + // big month 30 days other 29 + return ((LUNAR_INFO[lunarYear - YEAR_START] & (0x10000u >> month)) != 0) ? 30 : 29; + } + +private: + static constexpr int YEAR_START = 1897; // start year reference with LUNAR_INFO + static constexpr int32_t LUNAR_INFO_SIZE = 207; + static const uint16_t LUNAR_INFO[]; +}; + +class PickerStringFormatter { +public: + static const std::string& GetYear(uint32_t year); + + static const std::string& GetSolarMonth(uint32_t month); + + static const std::string& GetSolarDay(uint32_t day); + + static const std::string& GetLunarMonth(uint32_t month, bool isLeap); + + static const std::string& GetLunarDay(uint32_t day); + + static const std::vector& GetTagOrder(); + +private: + static void Init(); + + static bool inited_; + + static const std::string empty_; + + static std::vector years_; // year from 1900 to 2100,count is 201 + + static std::vector solarMonths_; // solar month from 1 to 12,count is 12 + static std::vector solarDays_; // solar day from 1 to 31, count is 31 + + static std::vector lunarMonths_; // lunar month from 1 to 24, count is 24 + static std::vector lunarDays_; // lunar day from 1 to 30, count is 30 + static std::vector tagOrder_; // year month day tag order +}; + +class PickerDateComponent : public PickerBaseComponent { + DECLARE_ACE_TYPE(PickerDateComponent, PickerBaseComponent); + +public: + PickerDateComponent(); + + ~PickerDateComponent() override = default; + + const PickerDate& GetStartDate() const + { + return startDateSolar_; + } + void SetStartDate(const PickerDate& value) + { + startDateSolar_ = value; + AdjustSolarDate(startDateSolar_, limitStartDate_, limitEndDate_); + startDateLunar_ = SolarToLunar(startDateSolar_); + } + + const PickerDate& GetEndDate() const + { + return endDateSolar_; + } + void SetEndDate(const PickerDate& value) + { + endDateSolar_ = value; + AdjustSolarDate(endDateSolar_, limitStartDate_, limitEndDate_); + endDateLunar_ = SolarToLunar(endDateSolar_); + } + + const PickerDate& GetSelectedDate() const + { + return selectedDate_; + } + void SetSelectedDate(const PickerDate& value) + { + selectedDate_ = value; + } + + void SetOnDateChange(const std::function& value) + { + onDateChange_ = value; + } + + void SetShowLunar(bool value) + { + lunar_ = value; + } + + bool NeedRtlColumnOrder() const override + { + return true; + } + + bool IsShowLunar() const override + { + return lunar_; + } + + void OnTitleBuilding() override; + + void OnColumnsBuilding() override; + + void OnSelectedSaving() override; + + std::string GetSelectedObject(bool isColumnChange, const std::string& changeColumnTag) const override; + + void OnDataLinking( + const std::string& tag, bool isAdd, uint32_t index, std::vector& resultTags) override; + + void OnLunarCallback(bool checked, std::vector& resultTags) override; + + void OnAnimationPlaying() override; + +private: + PickerDate GetCurrentDate() const; + LunarDate GetCurrentLunarDate(uint32_t lunarYear) const; + + void HandleYearChange(bool isAdd, uint32_t index, std::vector& resultTags); + + void HandleLunarYearChange(bool isAdd, uint32_t index); + + void HandleSolarYearChange(bool isAdd, uint32_t index); + + void HandleMonthChange(bool isAdd, uint32_t index, std::vector& resultTags); + + void HandleLunarMonthChange(bool isAdd, uint32_t index); + + void HandleSolarMonthChange(bool isAdd, uint32_t index); + + void HandleDayChange(bool isAdd, uint32_t index, std::vector& resultTags); + + void HandleSolarDayChange(bool isAdd, uint32_t index); + + void HandleLunarDayChange(bool isAdd, uint32_t index); + + void HandleAddLunarDayChange(uint32_t index); + + void HandleReduceLunarDayChange(uint32_t index); + + std::string GetYearFormatString(uint32_t year) const; + + std::string GetMonthFormatString(uint32_t month, bool isLunar, bool isLeap) const; + + std::string GetDayFormatString(uint32_t day, bool isLunar) const; + + LunarDate SolarToLunar(const PickerDate& date) const; + PickerDate LunarToSolar(const LunarDate& date) const; + + bool GetLunarLeapMonth(uint32_t year, uint32_t& outLeapMonth) const; + + uint32_t GetLunarMaxDay(uint32_t year, uint32_t month, bool isLeap) const; + + void SolarColumnsBuilding(const PickerDate& current); + + void LunarColumnsBuilding(const LunarDate& current); + + int SolarDateCompare(const PickerDate& left, const PickerDate& right) const; + + int LunarDateCompare(const LunarDate& left, const LunarDate& right) const; + + void AdjustSolarDate(PickerDate& date) const; + void AdjustSolarDate(PickerDate& date, const PickerDate& start, const PickerDate& end) const; + + void AdjustLunarDate(LunarDate& date) const; + + bool lunar_ = false; + PickerDate startDateSolar_ = PickerDate(1970, 1, 1); // default start date is 1970-1-1 from FA document. + LunarDate startDateLunar_; + PickerDate endDateSolar_ = PickerDate(2100, 12, 31); // default end date is 2100-12-31 from FA document. + LunarDate endDateLunar_; + PickerDate selectedDate_ = PickerDate::Current(); + std::function onDateChange_; + + static const PickerDate limitStartDate_; + static const PickerDate limitEndDate_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_DATE_COMPONENT_H diff --git a/frameworks/core/components/picker/picker_datetime_component.cpp b/frameworks/core/components/picker/picker_datetime_component.cpp new file mode 100644 index 00000000..aff269c7 --- /dev/null +++ b/frameworks/core/components/picker/picker_datetime_component.cpp @@ -0,0 +1,234 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/picker/picker_datetime_component.h" + +#include "base/i18n/localization.h" + +namespace OHOS::Ace { + +PickerDateTimeComponent::PickerDateTimeComponent() {} + +void PickerDateTimeComponent::OnTitleBuilding() +{ + auto theme = GetTheme(); + if (!theme) { + LOGE("theme is null."); + return; + } + SetHasTitle(theme->GetShowButtons()); + SetHasButtons(theme->GetShowButtons()); + SetHasTriangle(true); // triangle only for datetime picker. + + auto titleComponent = GetTitle(); + if (!titleComponent) { + LOGE("title component is null."); + return; + } + titleComponent->SetData(currentDate_.ToString(false)); +} + +void PickerDateTimeComponent::OnColumnsBuilding() +{ + PickerTimeComponent::OnColumnsBuilding(); + FillSolarLunarDays(lunar_, selectedDate_); + InitDatePicker(); +} + +void PickerDateTimeComponent::OnSelectedSaving() +{ + PickerTimeComponent::OnSelectedSaving(); + selectedDate_ = currentDate_; +} + +std::string PickerDateTimeComponent::GetSelectedObject(bool isColumnChange, + const std::string& changeColumnTag) const +{ + if (isColumnChange) { + LOGE("datetime picker not support column change event."); + return "{}"; + } + + auto date = selectedDate_; + // W3C's month is between 0 to 11, need to reduce one. + date.SetMonth(date.GetMonth() - 1); + PickerDateTime dateTime(date, GetSelectedTime()); + return dateTime.ToString(true); +} + +void PickerDateTimeComponent::OnLunarCallback(bool checked, std::vector& resultTags) +{ + FillSolarLunarDays(checked, currentDate_); + resultTags.emplace_back(PICKER_MONTHDAY_COLUMN); +} + +void PickerDateTimeComponent::OnTriangleCallback(bool value) +{ + if (value) { + HideDatePicker(); + } else { + ShowDatePicker(); + } +} + +void PickerDateTimeComponent::InitDatePicker() +{ + if (datePicker_) { + return; // already init. + } + datePicker_ = AceType::MakeRefPtr(); + datePicker_->SetSubsidiary(true); + datePicker_->SetHasLunar(false); + datePicker_->SetIsDialog(true); + datePicker_->SetTextDirection(GetTextDirection()); + datePicker_->SetTheme(GetTheme()); + datePicker_->SetColumnHeight(GetColumnHeight()); + datePicker_->SetOnDateChange([weak = WeakClaim(this)] (const PickerDate& date) { + auto refPtr = weak.Upgrade(); + if (!refPtr) { + return; + } + refPtr->OnSubsidiaryChange(date); + }); + auto controller = AceType::MakeRefPtr(); + controller->SetOutStopCallback([weak = AceType::WeakClaim(AceType::RawPtr(datePicker_))] { + auto refPtr = weak.Upgrade(); + if (!refPtr) { + return; + } + refPtr->HideDialog(); + }); + SetAnimationController(controller); + datePicker_->SetAnimationController(controller); +} + +void PickerDateTimeComponent::OnSubsidiaryChange(const PickerDate& date) +{ + auto days = date.ToDays(); + days--; + currentDate_.FromDays(days); + + auto monthDay = GetColumn(PICKER_MONTHDAY_COLUMN); + if (!monthDay) { + return; + } + + monthDay->HandleChangeCallback(true, false); +} + +void PickerDateTimeComponent::ShowDatePicker() +{ + InitDatePicker(); + datePicker_->SetShowLunar(lunar_); + datePicker_->SetSelectedDate(currentDate_); + datePicker_->SetMasterHasLunar(GetHasLunar()); + datePicker_->ShowDialog(GetStack()); +} + +void PickerDateTimeComponent::HideDatePicker() +{ + InitDatePicker(); + auto controller = GetAnimationController(); + if (!controller) { + LOGE("controller is null."); + return; + } + + controller->Play(false); +} + +void PickerDateTimeComponent::OnColumnsCreating() +{ + RemoveColumn(PICKER_MONTHDAY_COLUMN); + auto monthDay = AceType::MakeRefPtr(); + monthDay->SetColumnTag(PICKER_MONTHDAY_COLUMN); + if (GetHour24()) { + monthDay->SetWidthRatio(3); // date:hour:minute:second = 3:2:2:2 + } else { + monthDay->SetWidthRatio(4); // date:amPm:hour:minute:second = 4:2:2:2:2 + } + AppendColumn(monthDay); + + PickerTimeComponent::OnColumnsCreating(); +} + +std::string PickerDateTimeComponent::GetMonthDayFormatString(bool lunar, uint32_t days) const +{ + PickerDate outDate; + outDate.FromDays(days); + auto nowadays = PickerDate::Current().ToDays(); + if (days == nowadays) { + return Localization::GetInstance()->GetRelativeDateTime(0.0); + } + if (!lunar) { + DateTime dateTime; + dateTime.year = outDate.GetYear(); + dateTime.month = outDate.GetMonth() - 1; // W3C's month start from 0 to 11 + dateTime.day = outDate.GetDay(); + return Localization::GetInstance()->FormatDateTime(dateTime, "MMMd"); + } + Date date; + date.year = outDate.GetYear(); + date.month = outDate.GetMonth(); + date.day = outDate.GetDay(); + auto lunarDate = Localization::GetInstance()->GetLunarDate(date); + return Localization::GetInstance()->GetLunarMonth(lunarDate.month, lunarDate.isLeapMonth) + + Localization::GetInstance()->GetLunarDay(lunarDate.day); +} + +void PickerDateTimeComponent::FillSolarLunarDays(bool lunar, const PickerDate& currentDate) +{ + auto monthDay = GetColumn(PICKER_MONTHDAY_COLUMN); + if (!monthDay) { + return; + } + monthDay->ClearOption(); + monthDay->SetCurrentIndex(3); // total option is fixed 7. center index is 3 which is current. + uint32_t centerDays = currentDate.ToDays(); + uint32_t startDays = centerDays - 3; // start day 3 days before center day. + uint32_t endDays = centerDays + 3; // end day 3 days after center day. + for (uint32_t days = startDays; days <= endDays; ++days) { + monthDay->AppendOption(GetMonthDayFormatString(lunar, days)); + } + lunar_ = lunar; + currentDate_ = currentDate; +} + +void PickerDateTimeComponent::OnDataLinking(const std::string& tag, bool isAdd, uint32_t index, + std::vector& resultTags) +{ + PickerTimeComponent::OnDataLinking(tag, isAdd, index, resultTags); + if (tag == PICKER_MONTHDAY_COLUMN) { + // linked by month day column itself. + auto days = currentDate_.ToDays(); + days = (isAdd ? days + 1 : days - 1); // add one day or reduce one day. + PickerDate date; + date.FromDays(days); + FillSolarLunarDays(lunar_, date); + resultTags.emplace_back(PICKER_MONTHDAY_COLUMN); + return; + } + auto it = std::find(resultTags.begin(), resultTags.end(), PICKER_MONTHDAY_COLUMN); + if (it != resultTags.end()) { + // linked by other column + auto days = currentDate_.ToDays(); + days = (isAdd ? days + 1 : days - 1); + PickerDate date; + date.FromDays(days); + FillSolarLunarDays(lunar_, date); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/picker/picker_datetime_component.h b/frameworks/core/components/picker/picker_datetime_component.h new file mode 100644 index 00000000..a010d6f2 --- /dev/null +++ b/frameworks/core/components/picker/picker_datetime_component.h @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_DATETIME_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_DATETIME_COMPONENT_H + +#include "core/components/picker/picker_date_component.h" +#include "core/components/picker/picker_time_component.h" + +namespace OHOS::Ace { + +class PickerDateTimeComponent : public PickerTimeComponent { + DECLARE_ACE_TYPE(PickerDateTimeComponent, PickerTimeComponent); + +public: + PickerDateTimeComponent(); + ~PickerDateTimeComponent() override = default; + + void SetSelectedDateTime(const PickerDateTime& value) + { + selectedDate_ = value.GetDate(); + SetSelectedTime(value.GetTime()); + } + + void SetShowLunar(bool value) + { + lunar_ = value; + } + + bool SubsidiaryShowed() const override + { + if (!datePicker_) { + return false; + } + return datePicker_->IsDialogShowed(); + } + + bool IsShowLunar() const override + { + return lunar_; + } + + void OnTitleBuilding() override; + + void OnColumnsBuilding() override; + + void OnSelectedSaving() override; + + std::string GetSelectedObject(bool isColumnChange, const std::string& changeColumnTag) const override; + + void OnLunarCallback(bool checked, std::vector& resultTags) override; + + void OnTriangleCallback(bool value) override; + + void OnColumnsCreating() override; + + void OnDataLinking(const std::string& tag, bool isAdd, uint32_t index, + std::vector& resultTags) override; + +private: + std::string GetMonthDayFormatString(bool lunar, uint32_t days) const; + + void FillSolarLunarDays(bool lunar, const PickerDate& currentDate); + + void InitDatePicker(); + void ShowDatePicker(); + void HideDatePicker(); + void OnSubsidiaryChange(const PickerDate& date); + + RefPtr datePicker_; + PickerDate selectedDate_ = PickerDate::Current(); + PickerDate currentDate_ = PickerDate::Current(); + bool lunar_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_DATETIME_COMPONENT_H diff --git a/frameworks/core/components/picker/picker_multitext_component.cpp b/frameworks/core/components/picker/picker_multitext_component.cpp new file mode 100644 index 00000000..2b8b32e3 --- /dev/null +++ b/frameworks/core/components/picker/picker_multitext_component.cpp @@ -0,0 +1,225 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/picker/picker_multitext_component.h" + +namespace OHOS::Ace { + +void PickerMultiTextComponent::OnTitleBuilding() +{ + PickerBaseComponent::OnTitleBuilding(); + SetHasTitle(false); +} + +void PickerMultiTextComponent::OnColumnsBuilding() +{ + for (uint32_t index = 0; index < columnCount_; ++index) { + if (index >= range_.size()) { + LOGW("range size is smaller than column count"); + auto emptyColumn = GetColumn(std::to_string(index)); + if (emptyColumn) { + emptyColumn->ClearOption(); + emptyColumn->AppendOption(""); + emptyColumn->SetCurrentIndex(0); + } else { + LOGE("the column of index[%{private}u] not exists.", index); + } + continue; + } + const auto& textRange = range_[index]; + auto column = GetColumn(std::to_string(index)); + if (!column) { + LOGE("the column of index[%{private}u] not exists.", index); + continue; + } + column->ClearOption(); + for (uint32_t subIndex = 0; subIndex < textRange.size(); ++subIndex) { + column->AppendOption(textRange[subIndex]); + } + if (index < selectedIndexes_.size()) { + selectedIndexes_[index] = textRange.empty() ? 0 : selectedIndexes_[index] % textRange.size(); + column->SetCurrentIndex(selectedIndexes_[index]); + } else { + LOGE("array size of selected is not equal range."); + } + } +} + +std::string PickerMultiTextComponent::GetSelectedObject(bool isColumnChange, const std::string& changeColumnTag) const +{ + if (isColumnChange) { + auto column = GetColumn(changeColumnTag); + if (!column) { + LOGE("can not get the changed column."); + return ""; + } + return std::string("{\"column\":") + changeColumnTag + ",\"newValue\":\"" + + column->GetCurrentText() + "\",\"newSelected\":" + std::to_string(column->GetCurrentIndex()) + "}"; + } + + std::string result = "{\"newValue\":["; + for (uint32_t index = 0; index < selectedValues_.size(); ++index) { + if (index == 0) { + result.append("\""); + } else { + result.append(",\""); + } + result.append(selectedValues_[index]); + result.append("\""); + } + result.append("],\"newSelected\":["); + for (uint32_t index = 0; index < selectedIndexes_.size(); ++index) { + if (index != 0) { + result.append(","); + } + result.append(std::to_string(selectedIndexes_[index])); + } + result.append("]}"); + return result; +} + +void PickerMultiTextComponent::OnSelectedSaving() +{ + selectedIndexes_.clear(); + selectedValues_.clear(); + for (uint32_t index = 0; index < columnCount_; ++index) { + selectedIndexes_.emplace_back(0); + selectedValues_.emplace_back(""); + auto column = GetColumn(std::to_string(index)); + if (!column) { + LOGE("can not get column by index[%{private}u].", index); + continue; + } + selectedIndexes_[index] = column->GetCurrentIndex(); + selectedValues_[index] = column->GetCurrentText(); + } +} + +void PickerMultiTextComponent::OnDataLinking(const std::string& tag, bool isAdd, uint32_t index, + std::vector& resultTags) +{ + for (uint32_t val = 0; val < columnCount_; ++val) { + resultTags.emplace_back(std::to_string(val)); + } +} + +void PickerMultiTextComponent::OnColumnsCreating() +{ + if (hasCreateColumn_) { + return; + } + + if (!columnCount_) { + if (range_.empty()) { + LOGE("did not set attribute of column count and initialize range is empty."); + } else { + columnCount_ = range_.size(); + } + } + + ClearColumns(); + for (uint32_t index = 0; index < columnCount_; ++index) { + auto column = AceType::MakeRefPtr(); + column->SetColumnTag(std::to_string(index)); + column->AppendOption(""); + AppendColumn(column); + } + hasCreateColumn_ = true; +} + +void PickerMultiTextComponent::HandleRangeChange() +{ + if (!GetIsDialog() || !IsDialogShowed()) { + return; + } + + auto column = GetColumn("0"); + if (!column) { + LOGE("has no column now."); + return; + } + + auto backupIndexes = selectedIndexes_; + auto backupValues = selectedValues_; + OnSelectedSaving(); + OnColumnsBuilding(); + column->HandleChangeCallback(true, false); + selectedIndexes_ = backupIndexes; + selectedValues_ = backupValues; +} + +void PickerMultiTextComponent::HandleSelectedChange() +{ + if (!GetIsDialog() || !IsDialogShowed()) { + return; + } + + auto column = GetColumn("0"); + if (!column) { + LOGE("has no column now."); + return; + } + + OnColumnsBuilding(); + column->HandleChangeCallback(true, false); +} + +bool PickerMultiTextComponent::IsEqualSelected(const std::vector& value) const +{ + if (value.size() != selectedIndexes_.size()) { + return false; + } + + for (uint32_t index = 0; index < value.size(); ++index) { + if (value[index] != selectedIndexes_[index]) { + return false; + } + } + + return true; +} + +bool PickerMultiTextComponent::IsEqualRange(const std::vector>& value) const +{ + if (value.size() != range_.size()) { + return false; + } + + for (uint32_t index = 0; index < value.size(); ++index) { + if (!IsEqualStrings(value[index], range_[index])) { + return false; + } + } + + return true; +} + +bool PickerMultiTextComponent::IsEqualStrings(const std::vector& first, + const std::vector& second) const +{ + if (first.size() != second.size()) { + return false; + } + + for (uint32_t index = 0; index < first.size(); ++index) { + if (first[index] != second[index]) { + return false; + } + } + + return true; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/picker/picker_multitext_component.h b/frameworks/core/components/picker/picker_multitext_component.h new file mode 100644 index 00000000..0666e5d8 --- /dev/null +++ b/frameworks/core/components/picker/picker_multitext_component.h @@ -0,0 +1,102 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_MULTITEXT_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_MULTITEXT_COMPONENT_H + +#include "core/components/picker/picker_base_component.h" + +namespace OHOS::Ace { + +class PickerMultiTextComponent : public PickerBaseComponent { + DECLARE_ACE_TYPE(PickerMultiTextComponent, PickerBaseComponent); + +public: + PickerMultiTextComponent() = default; + ~PickerMultiTextComponent() override = default; + + const std::vector& GetSelected() const + { + return selectedIndexes_; + } + void SetSelected(const std::vector& value) + { + if (IsEqualSelected(value)) { + return; + } + selectedIndexes_ = value; + HandleSelectedChange(); + } + + const std::vector>& GetRange() const + { + return range_; + } + void SetRange(const std::vector>& value) + { + if (IsEqualRange(value)) { + return; + } + range_ = value; + HandleRangeChange(); + } + + uint32_t GetColumnCount() const override + { + return columnCount_; + } + void SetColumnCount(uint32_t value) + { + if (hasCreateColumn_) { + return; + } + columnCount_ = value; + } + + void OnTitleBuilding() override; + + void OnColumnsBuilding() override; + + std::string GetSelectedObject(bool isColumnChange, const std::string& changeColumnTag) const override; + + virtual void OnSelectedSaving() override; + + void OnDataLinking(const std::string& tag, bool isAdd, uint32_t index, + std::vector& resultTags) override; + + void OnColumnsCreating() override; + +private: + void HandleRangeChange(); + + void HandleSelectedChange(); + + bool IsEqualSelected(const std::vector& value) const; + + bool IsEqualRange(const std::vector>& value) const; + + bool IsEqualStrings(const std::vector& first, const std::vector& second) const; + + std::vector selectedIndexes_; + std::vector selectedValues_; + std::vector> range_; + + uint32_t columnCount_ = 0; + bool hasCreateColumn_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_MULTITEXT_COMPONENT_H diff --git a/frameworks/core/components/picker/picker_option_component.cpp b/frameworks/core/components/picker/picker_option_component.cpp new file mode 100644 index 00000000..f5a25cca --- /dev/null +++ b/frameworks/core/components/picker/picker_option_component.cpp @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/picker/picker_option_component.h" + +#include "core/components/picker/picker_option_element.h" +#include "core/components/picker/render_picker_option.h" + +namespace OHOS::Ace { +namespace { + +constexpr uint32_t PICKER_OPTION_TEXT_MAX_LINES = 1; + +} // namespace + +PickerOptionComponent::PickerOptionComponent() +{ + textComponent_ = AceType::MakeRefPtr(""); + boxComponent_ = AceType::MakeRefPtr(); +} + +RefPtr PickerOptionComponent::CreateRenderNode() +{ + return AceType::MakeRefPtr(); +} + +RefPtr PickerOptionComponent::CreateElement() +{ + auto element = AceType::MakeRefPtr(); + element->SetAutoAccessibility(false); + return element; +} + +void PickerOptionComponent::Initialize() +{ + if (!theme_) { + LOGE("Theme is null."); + return; + } + auto style = GetDisappear() ? theme_->GetDisappearOptionStyle() : theme_->GetOptionStyle(GetSelected(), false); + auto isRtl = GetTextDirection() == TextDirection::RTL; + style.SetMaxLines(PICKER_OPTION_TEXT_MAX_LINES); + style.SetTextOverflow(TextOverflow::ELLIPSIS); + textComponent_->SetData(text_); + textComponent_->SetFocusColor(style.GetTextColor()); + textComponent_->SetTextStyle(style); + textComponent_->SetTextDirection(GetTextDirection()); + + boxComponent_->SetDeliverMinToChild(false); + if (GetSelected()) { + boxComponent_->SetBackDecoration(theme_->GetOptionDecoration(false)); + } else { + auto back = AceType::MakeRefPtr(); + boxComponent_->SetBackDecoration(back); + } + boxComponent_->SetAlignment(Alignment::CENTER); + boxComponent_->SetChild(textComponent_); + boxComponent_->SetTextDirection(GetTextDirection()); + if (isRtl) { + boxComponent_->SetAlignment(Alignment::CENTER_RIGHT); + } + SetChild(boxComponent_); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/picker/picker_option_component.h b/frameworks/core/components/picker/picker_option_component.h new file mode 100644 index 00000000..95487ee3 --- /dev/null +++ b/frameworks/core/components/picker/picker_option_component.h @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_OPTION_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_OPTION_COMPONENT_H + +#include "core/components/box/box_component.h" +#include "core/components/picker/picker_theme.h" +#include "core/components/text/text_component.h" +#include "core/pipeline/base/sole_child_component.h" + +namespace OHOS::Ace { + +class PickerOptionComponent : public SoleChildComponent { + DECLARE_ACE_TYPE(PickerOptionComponent, SoleChildComponent); + +public: + PickerOptionComponent(); + ~PickerOptionComponent() override = default; + + RefPtr CreateRenderNode() override; + RefPtr CreateElement() override; + + void Initialize(); + + bool GetSelected() const + { + return selected_; + } + void SetSelected(bool value) + { + selected_ = value; + } + + bool GetAutoLayout() const + { + return autoLayout_; + } + void SetAutoLayout(bool value) + { + autoLayout_ = value; + } + + const std::string& GetText() const + { + return text_; + } + void SetText(const std::string& value) + { + text_ = value; + } + + const RefPtr& GetTheme() const + { + return theme_; + } + void SetTheme(const RefPtr& value) + { + theme_ = value; + } + + uint32_t GetIndex() const + { + return index_; + } + void SetIndex(uint32_t value) + { + index_ = value; + } + + const RefPtr& GetTextComponent() + { + return textComponent_; + } + + const RefPtr& GetBoxComponent() + { + return boxComponent_; + } + + bool GetAlignTop() const + { + return alignTop_; + } + void SetAlignTop(bool value) + { + alignTop_ = value; + } + + bool GetAlignBottom() const + { + return alignBottom_; + } + void SetAlignBottom(bool value) + { + alignBottom_ = value; + } + + bool GetDisappear() const + { + return disappear_; + } + void SetDisappear(bool value) + { + disappear_ = value; + } + +private: + bool selected_ = false; + bool autoLayout_ = false; + bool alignTop_ = false; + bool alignBottom_ = false; + bool disappear_ = false; + std::string text_; + uint32_t index_ = 0; + RefPtr theme_; + + RefPtr boxComponent_; + RefPtr textComponent_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_OPTION_COMPONENT_H diff --git a/frameworks/core/components/picker/picker_option_element.cpp b/frameworks/core/components/picker/picker_option_element.cpp new file mode 100644 index 00000000..5c59dff0 --- /dev/null +++ b/frameworks/core/components/picker/picker_option_element.cpp @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/picker/picker_option_element.h" + +#include "core/components/picker/picker_option_component.h" +#include "core/components/picker/render_picker_option.h" + +namespace OHOS::Ace { + +void PickerOptionElement::PerformBuild() +{ + auto option = AceType::DynamicCast(component_); + if (option) { + option->Initialize(); + } + SoleChildElement::PerformBuild(); + auto render = AceType::DynamicCast(renderNode_); + if (!render) { + LOGE("render picker option is null."); + return; + } + render->UpdateRenders(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/picker/picker_option_element.h b/frameworks/core/components/picker/picker_option_element.h new file mode 100644 index 00000000..569a8143 --- /dev/null +++ b/frameworks/core/components/picker/picker_option_element.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_OPTION_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_OPTION_ELEMENT_H + +#include "core/pipeline/base/sole_child_element.h" + +namespace OHOS::Ace { + +class PickerOptionElement : public SoleChildElement { + DECLARE_ACE_TYPE(PickerOptionElement, SoleChildElement); + +public: + void PerformBuild() override; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_OPTION_ELEMENT_H diff --git a/frameworks/core/components/picker/picker_text_component.cpp b/frameworks/core/components/picker/picker_text_component.cpp new file mode 100644 index 00000000..994d8fa3 --- /dev/null +++ b/frameworks/core/components/picker/picker_text_component.cpp @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/picker/picker_text_component.h" + +namespace OHOS::Ace { + +PickerTextComponent::PickerTextComponent() +{ + auto column = AceType::MakeRefPtr(); + column->SetColumnTag(PICKER_TEXT_COLUMN); + AppendColumn(column); +} + +void PickerTextComponent::OnTitleBuilding() +{ + PickerBaseComponent::OnTitleBuilding(); + SetHasTitle(false); +} + +void PickerTextComponent::OnColumnsBuilding() +{ + auto column = GetColumn(PICKER_TEXT_COLUMN); + if (!column) { + LOGE("can not get column of text"); + return; + } + + column->ClearOption(); + for (const auto& item : range_) { + column->AppendOption(item); + } + selectedIndex_ = range_.empty() ? 0 : selectedIndex_ % range_.size(); + column->SetCurrentIndex(selectedIndex_); +} + +std::string PickerTextComponent::GetSelectedObject(bool isColumnChange, const std::string& changeColumnTag) const +{ + if (isColumnChange) { + LOGW("text picker has no column change event."); + return ""; + } + return std::string("{\"newValue\":\"") + + selectedValue_ + "\",\"newSelected\":" + std::to_string(selectedIndex_) + "}"; +} + +void PickerTextComponent::OnSelectedSaving() +{ + auto column = GetColumn(PICKER_TEXT_COLUMN); + if (!column) { + LOGE("can not get column of text"); + return; + } + selectedIndex_ = column->GetCurrentIndex(); + selectedValue_ = column->GetCurrentText(); +} + +void PickerTextComponent::HandleSelectedChange() +{ + if (!IsDialogShowed()) { + return; + } + auto column = GetColumn(PICKER_TEXT_COLUMN); + if (!column) { + LOGE("can not get column of text"); + return; + } + + OnColumnsBuilding(); + column->HandleChangeCallback(true, false); +} + +void PickerTextComponent::HandleRangeChange() +{ + if (!IsDialogShowed()) { + return; + } + + auto column = GetColumn(PICKER_TEXT_COLUMN); + if (!column) { + LOGE("can not get column of text"); + return; + } + + auto backupIndex = selectedIndex_; + auto backupValue = selectedValue_; + OnSelectedSaving(); + OnColumnsBuilding(); + column->HandleChangeCallback(true, false); + selectedIndex_ = backupIndex; + selectedValue_ = backupValue; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/picker/picker_text_component.h b/frameworks/core/components/picker/picker_text_component.h new file mode 100644 index 00000000..3c2f9547 --- /dev/null +++ b/frameworks/core/components/picker/picker_text_component.h @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_TEXT_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_TEXT_COMPONENT_H + +#include "core/components/picker/picker_base_component.h" + +namespace OHOS::Ace { + +class PickerTextComponent : public PickerBaseComponent { + DECLARE_ACE_TYPE(PickerTextComponent, PickerBaseComponent); + +public: + PickerTextComponent(); + ~PickerTextComponent() override = default; + + uint32_t GetSelected() const + { + return selectedIndex_; + } + void SetSelected(uint32_t value) + { + selectedIndex_ = value; + HandleSelectedChange(); + } + + const std::vector& GetRange() const + { + return range_; + } + void SetRange(const std::vector& value) + { + if (value.empty()) { + LOGE("input value of range is empty."); + return; + } + range_ = value; + HandleRangeChange(); + } + + void SetPrefix(const std::string& value) + { + auto column = GetColumn(PICKER_TEXT_COLUMN); + if (!column) { + LOGE("can not get column of text"); + return; + } + + column->SetPrefix(value); + } + + void SetSuffix(const std::string& value) + { + auto column = GetColumn(PICKER_TEXT_COLUMN); + if (!column) { + LOGE("can not get column of text"); + return; + } + + column->SetSuffix(value); + } + + void OnTitleBuilding() override; + + void OnColumnsBuilding() override; + + std::string GetSelectedObject(bool isColumnChange, const std::string& changeColumnTag) const override; + + void OnSelectedSaving() override; + + void OnDataLinking(const std::string& tag, bool isAdd, uint32_t index, + std::vector& resultTags) override + { + resultTags.emplace_back(PICKER_TEXT_COLUMN); + } + +private: + void HandleSelectedChange(); + void HandleRangeChange(); + + uint32_t selectedIndex_ = 0; + std::string selectedValue_; + std::vector range_ {""}; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_TEXT_COMPONENT_H diff --git a/frameworks/core/components/picker/picker_theme.h b/frameworks/core/components/picker/picker_theme.h new file mode 100644 index 00000000..050854a7 --- /dev/null +++ b/frameworks/core/components/picker/picker_theme.h @@ -0,0 +1,489 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_THEME_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_THEME_H + +#include "base/geometry/dimension.h" +#include "base/utils/system_properties.h" +#include "core/components/common/layout/constants.h" +#include "core/components/common/properties/border.h" +#include "core/components/common/properties/color.h" +#include "core/components/common/properties/decoration.h" +#include "core/components/common/properties/edge.h" +#include "core/components/common/properties/text_style.h" +#include "core/components/theme/theme.h" +#include "core/components/theme/theme_constants.h" + +namespace OHOS::Ace { + +class PickerTheme final : public virtual Theme { + DECLARE_ACE_TYPE(PickerTheme, Theme); + +public: + class Builder final { + public: + Builder() = default; + ~Builder() = default; + + RefPtr Build(const RefPtr& themeConstants) const + { + RefPtr theme = AceType::Claim(new PickerTheme()); + if (!themeConstants) { + return theme; + } + InitializeTextStyles(theme, themeConstants); + theme->popupDecoration_ = AceType::MakeRefPtr(); + theme->popupDecoration_->SetBackgroundColor(themeConstants->GetColor(THEME_PICKER_BACK_COLOR)); + theme->popupDecoration_->SetBorderRadius(Radius(themeConstants->GetDimension(THEME_PICKER_POPUP_RADIUS))); + theme->popupEdge_.SetLeft(themeConstants->GetDimension(THEME_PICKER_POPUP_PADDING)); + theme->popupEdge_.SetTop(themeConstants->GetDimension(THEME_PICKER_POPUP_PADDING)); + theme->popupEdge_.SetRight(themeConstants->GetDimension(THEME_PICKER_POPUP_PADDING)); + theme->popupEdge_.SetBottom(themeConstants->GetDimension(THEME_PICKER_POPUP_PADDING_BOTTOM)); + auto showOptionCount = themeConstants->GetInt(THEME_PICKER_SHOW_OPTION_COUNT); + theme->showOptionCount_ = + showOptionCount < 0 ? theme->showOptionCount_ : static_cast(showOptionCount); + theme->showButtons_ = static_cast(themeConstants->GetInt(THEME_PICKER_SHOW_BUTTONS)); + theme->focusColor_ = themeConstants->GetColor(THEME_PICKER_FOCUS_COLOR); + theme->focusRadius_ = Radius(themeConstants->GetDimension(THEME_PICKER_FOCUS_RADIUS)); + theme->selectedOptionSize_ = Size(themeConstants->GetDouble(THEME_PICKER_OPTION_WIDTH), + themeConstants->GetDouble(THEME_PICKER_SELECT_OPTION_HEIGHT)); + theme->normalOptionSize_ = Size(themeConstants->GetDouble(THEME_PICKER_OPTION_WIDTH), + themeConstants->GetDouble(THEME_PICKER_NORMAL_OPTION_HEIGHT)); + theme->optionPadding_ = themeConstants->GetDouble(THEME_PICKER_OPTION_PADDING); + theme->optionSizeUnit_ = DimensionUnit::VP; + theme->jumpInterval_ = themeConstants->GetDimension(THEME_PICKER_JUMP_INTERVAL); + theme->columnIntervalMargin_ = themeConstants->GetDimension(THEME_PICKER_COLUMN_MARGIN); + theme->selectedOptionDecoration_ = AceType::MakeRefPtr(); + theme->selectedOptionDecoration_->SetBackgroundColor( + themeConstants->GetColor(THEME_PICKER_SELECT_OPTION_BACK_COLOR)); + theme->selectedOptionDecoration_->SetBorderRadius( + Radius(themeConstants->GetDimension(THEME_PICKER_SELECT_OPTION_RADIUS))); + theme->focusOptionDecoration_ = AceType::MakeRefPtr(); + theme->focusOptionDecoration_->SetBackgroundColor( + themeConstants->GetColor(THEME_PICKER_FOCUS_OPTION_BACK_COLOR)); + theme->focusOptionDecoration_->SetBorderRadius( + Radius(themeConstants->GetDimension(THEME_PICKER_FOCUS_OPTION_RADIUS))); + theme->lunarWidth_ = Dimension(36.0, DimensionUnit::VP); // this width do not need setting by outer. + theme->lunarHeight_ = Dimension(18.0, DimensionUnit::VP); // this height do not need setting by outer. + theme->buttonWidth_ = themeConstants->GetDimension(THEME_PICKER_BUTTON_WIDTH); + theme->buttonHeight_ = themeConstants->GetDimension(THEME_PICKER_BUTTON_HEIGHT); + theme->buttonTopPadding_ = themeConstants->GetDimension(THEME_PICKER_BUTTON_TOP_PADDING); + theme->titleBottomPadding_ = themeConstants->GetDimension(THEME_PICKER_TITLE_BOTTOM_PADDING); + theme->popupOutDecoration_ = AceType::MakeRefPtr(); + theme->popupOutDecoration_->SetBackgroundColor(themeConstants->GetColor(THEME_PICKER_DIALOG_MASK_COLOR)); + auto timeSplitter = themeConstants->GetInt(THEME_PICKER_TIME_SPLITTER); + theme->timeSplitter_ = timeSplitter < 0 ? theme->timeSplitter_ : static_cast(timeSplitter); + theme->rotateInterval_ = 15.0; // when rotate 15.0 angle handle scroll of picker column. + theme->dividerThickness_ = themeConstants->GetDimension(THEME_PICKER_SELECT_DIVIDER_THICKNESS); + theme->dividerSpacing_ = themeConstants->GetDimension(THEME_PICKER_SELECT_DIVIDER_SPACING); + theme->dividerColor_ = themeConstants->GetColor(THEME_PICKER_SELECT_DIVIDER_COLOR); + theme->gradientHeight_ = themeConstants->GetDimension(THEME_PICKER_GRADIENT_HEIGHT); + theme->columnFixedWidth_ = themeConstants->GetDimension(THEME_PICKER_COLUMN_FIXED_WIDTH); + Parse(themeConstants->GetThemeStyle(), theme); + return theme; + } + + void Parse(const RefPtr& style, const RefPtr& theme) const + { + if (!style || !theme || !theme->popupDecoration_) { + return; + } + theme->hoverColor_ = style->GetAttr(THEME_ATTR_COLOR_HOVER, theme->hoverColor_); + theme->pressColor_ = style->GetAttr(THEME_ATTR_COLOR_CLICK_EFFECT, theme->pressColor_); + if (SystemProperties::GetDeviceType() != DeviceType::PHONE) { + return; // light, dart color only for phone + } + theme->popupDecoration_->SetBackgroundColor( + style->GetAttr(THEME_ATTR_COLOR_DIALOG_BG, theme->popupDecoration_->GetBackgroundColor())); + theme->focusColor_ = style->GetAttr(THEME_ATTR_COLOR_FOCUSED, theme->focusColor_); + auto id = (style->GetName() == "117440517" ? // the style name of semitransparent + THEME_ATTR_TEXT_COLOR_PRIMARY + : THEME_ATTR_COLOR_TEXT_PRIMARY_ACTIVATED); + theme->selectedOptionStyle_.SetTextColor( + style->GetAttr(id, theme->selectedOptionStyle_.GetTextColor())); + theme->focusOptionStyle_.SetTextColor(theme->selectedOptionStyle_.GetTextColor()); + theme->normalOptionStyle_.SetTextColor( + style->GetAttr(THEME_ATTR_TEXT_COLOR_PRIMARY, theme->normalOptionStyle_.GetTextColor())); + theme->disappearOptionStyle_.SetTextColor(theme->normalOptionStyle_.GetTextColor()); + theme->titleStyle_.SetTextColor(theme->normalOptionStyle_.GetTextColor()); + theme->dividerColor_ = style->GetAttr(THEME_ATTR_COLOR_LIST_DIVIDER, theme->dividerColor_); + } + + private: + void InitializeTextStyles(const RefPtr& theme, const RefPtr& themeConstants) const + { + theme->selectedOptionStyle_.SetFontSize(themeConstants->GetDimension(THEME_PICKER_SELECT_OPTION_FONT_SIZE)); + theme->selectedOptionStyle_.SetTextColor(themeConstants->GetColor(THEME_PICKER_SELECT_OPTION_TEXT_COLOR)); + theme->selectedOptionStyle_.SetFontWeight( + FontWeight(themeConstants->GetInt(THEME_PICKER_SELECT_OPTION_WEIGHT))); + theme->selectedOptionStyle_.SetAdaptTextSize(theme->selectedOptionStyle_.GetFontSize(), + themeConstants->GetDimension(THEME_PICKER_SELECT_OPTION_MIN_FONT_SIZE)); + theme->selectedOptionStyle_.SetMaxLines(1); + theme->selectedOptionStyle_.SetTextOverflow(TextOverflow::ELLIPSIS); + theme->focusOptionStyle_.SetFontSize(themeConstants->GetDimension(THEME_PICKER_FOCUS_OPTION_FONT_SIZE)); + theme->focusOptionStyle_.SetTextColor(themeConstants->GetColor(THEME_PICKER_FOCUS_OPTION_TEXT_COLOR)); + theme->focusOptionStyle_.SetFontWeight( + FontWeight(themeConstants->GetInt(THEME_PICKER_FOCUS_OPTION_WEIGHT))); + theme->focusOptionStyle_.SetAdaptTextSize(theme->focusOptionStyle_.GetFontSize(), + themeConstants->GetDimension(THEME_PICKER_SELECT_OPTION_MIN_FONT_SIZE)); + theme->focusOptionStyle_.SetMaxLines(1); + theme->focusOptionStyle_.SetTextOverflow(TextOverflow::ELLIPSIS); + theme->normalOptionStyle_.SetFontSize(themeConstants->GetDimension(THEME_PICKER_NORMAL_OPTION_FONT_SIZE)); + theme->normalOptionStyle_.SetTextColor(themeConstants->GetColor(THEME_PICKER_NORMAL_OPTION_FONT_COLOR)); + theme->normalOptionStyle_.SetFontWeight( + FontWeight(themeConstants->GetInt(THEME_PICKER_NORMAL_OPTION_WEIGHT))); + theme->normalOptionStyle_.SetAdaptTextSize(theme->normalOptionStyle_.GetFontSize(), + themeConstants->GetDimension(THEME_PICKER_NORMAL_OPTION_MIN_FONT_SIZE)); + theme->normalOptionStyle_.SetMaxLines(1); + theme->normalOptionStyle_.SetTextOverflow(TextOverflow::ELLIPSIS); + theme->normalOptionStyle_.SetFontWeight( + FontWeight(themeConstants->GetInt(THEME_PICKER_NORMAL_OPTION_WEIGHT))); + theme->disappearOptionStyle_.SetFontSize( + themeConstants->GetDimension(THEME_PICKER_DISAPPEAR_OPTION_FONT_SIZE)); + theme->disappearOptionStyle_.SetTextColor(themeConstants->GetColor(THEME_PICKER_NORMAL_OPTION_FONT_COLOR)); + theme->normalOptionStyle_.SetFontWeight( + FontWeight(themeConstants->GetInt(THEME_PICKER_NORMAL_OPTION_WEIGHT))); + theme->disappearOptionStyle_.SetAdaptTextSize(theme->disappearOptionStyle_.GetFontSize(), + themeConstants->GetDimension(THEME_PICKER_NORMAL_OPTION_MIN_FONT_SIZE)); + theme->disappearOptionStyle_.SetMaxLines(1); + theme->disappearOptionStyle_.SetTextOverflow(TextOverflow::ELLIPSIS); + theme->buttonStyle_.SetFontSize(themeConstants->GetDimension(THEME_PICKER_BUTTON_FONT_SIZE)); + theme->buttonStyle_.SetTextColor(themeConstants->GetColor(THEME_PICKER_BUTTON_TEXT_COLOR)); + theme->titleStyle_.SetFontSize(themeConstants->GetDimension(THEME_PICKER_TITLE_FONT_SIZE)); + theme->titleStyle_.SetTextColor(themeConstants->GetColor(THEME_PICKER_TITLE_TEXT_COLOR)); + theme->titleStyle_.SetFontWeight(FontWeight::W500); + theme->titleStyle_.SetMaxLines(1); + theme->titleStyle_.SetTextOverflow(TextOverflow::ELLIPSIS); + if (SystemProperties::GetDeviceType() == DeviceType::PHONE) { + theme->focusOptionStyle_ = theme->selectedOptionStyle_; // focus style the same with selected on phone + } + } + }; + + ~PickerTheme() override = default; + + RefPtr clone() const + { + auto theme = AceType::Claim(new PickerTheme()); + theme->selectedOptionSize_ = selectedOptionSize_; + theme->selectedOptionStyle_ = selectedOptionStyle_; + theme->normalOptionSize_ = normalOptionSize_; + theme->normalOptionStyle_ = normalOptionStyle_; + theme->disappearOptionStyle_ = disappearOptionStyle_; + theme->showOptionCount_ = showOptionCount_; + theme->optionSizeUnit_ = optionSizeUnit_; + theme->popupDecoration_ = popupDecoration_; + theme->focusColor_ = focusColor_; + theme->popupEdge_ = popupEdge_; + theme->focusOptionStyle_ = focusOptionStyle_; + theme->focusOptionDecoration_ = focusOptionDecoration_; + theme->selectedOptionDecoration_ = selectedOptionDecoration_; + theme->buttonStyle_ = buttonStyle_; + theme->showButtons_ = showButtons_; + theme->buttonWidth_ = buttonWidth_; + theme->buttonHeight_ = buttonHeight_; + theme->buttonTopPadding_ = buttonTopPadding_; + theme->jumpInterval_ = jumpInterval_; + theme->columnIntervalMargin_ = columnIntervalMargin_; + theme->focusRadius_ = focusRadius_; + theme->optionPadding_ = optionPadding_; + theme->titleStyle_ = titleStyle_; + theme->titleBottomPadding_ = titleBottomPadding_; + theme->popupOutDecoration_ = popupOutDecoration_; + theme->lunarWidth_ = lunarWidth_; + theme->lunarHeight_ = lunarHeight_; + theme->timeSplitter_ = timeSplitter_; + theme->rotateInterval_ = rotateInterval_; + theme->dividerThickness_ = dividerThickness_; + theme->dividerSpacing_ = dividerSpacing_; + theme->dividerColor_ = dividerColor_; + theme->gradientHeight_ = gradientHeight_; + theme->columnFixedWidth_ = columnFixedWidth_; + theme->disappearOptionStyle_ = disappearOptionStyle_; + theme->pressColor_ = pressColor_; + theme->hoverColor_ = hoverColor_; + return theme; + } + + const TextStyle& GetOptionStyle(bool selected, bool focus) const + { + if (!selected) { + return normalOptionStyle_; + } + + if (focus) { + return focusOptionStyle_; + } + + return selectedOptionStyle_; + } + void SetOptionStyle(bool selected, bool focus, const TextStyle& value) + { + if (!selected) { + normalOptionStyle_ = value; + } else if (focus) { + focusOptionStyle_ = value; + } else { + selectedOptionStyle_ = value; + } + } + + const TextStyle& GetDisappearOptionStyle() const + { + return disappearOptionStyle_; + } + void SetDisappearOptionStyle(const TextStyle& value) + { + disappearOptionStyle_ = value; + } + + const TextStyle& GetButtonStyle() const + { + return buttonStyle_; + } + + const RefPtr& GetOptionDecoration(bool focus) + { + if (focus) { + return focusOptionDecoration_; + } + + return selectedOptionDecoration_; + } + void SetOptionDecoration(bool focus, const RefPtr& value) + { + if (focus) { + focusOptionDecoration_ = value; + } else { + selectedOptionDecoration_ = value; + } + } + + const Size& GetOptionSize(bool selected) const + { + if (selected) { + return selectedOptionSize_; + } + + return normalOptionSize_; + } + + uint32_t GetShowOptionCount() const + { + return showOptionCount_; + } + + DimensionUnit GetOptionSizeUnit() const + { + return optionSizeUnit_; + } + + const RefPtr& GetPopupDecoration(bool isOutBox) const + { + if (!isOutBox) { + return popupDecoration_; + } + return popupOutDecoration_; + } + + const Color& GetFocusColor() const + { + return focusColor_; + } + + const Edge& GetPopupEdge() const + { + return popupEdge_; + } + + bool GetShowButtons() const + { + return showButtons_; + } + + const Dimension& GetButtonWidth() const + { + return buttonWidth_; + } + + const Dimension& GetButtonHeight() const + { + return buttonHeight_; + } + + const Dimension& GetButtonTopPadding() const + { + return buttonTopPadding_; + } + + const Dimension& GetJumpInterval() const + { + return jumpInterval_; + } + + const Dimension& GetColumnIntervalMargin() const + { + return columnIntervalMargin_; + } + + const Radius& GetFocusRadius() const + { + return focusRadius_; + } + + double GetOptionPadding() const + { + return optionPadding_; + } + void SetOptionPadding(double value) + { + optionPadding_ = value; + } + + const TextStyle& GetTitleStyle() const + { + return titleStyle_; + } + + const Dimension& GetTitleBottomPadding() const + { + return titleBottomPadding_; + } + + const Dimension& GetLunarWidth() const + { + return lunarWidth_; + } + + const Dimension& GetLunarHeight() const + { + return lunarHeight_; + } + + bool HasTimeSplitter() const + { + return (timeSplitter_ > 0); + } + + double GetRotateInterval() const + { + return rotateInterval_; + } + + const Dimension& GetDividerThickness() const + { + return dividerThickness_; + } + + const Dimension& GetDividerSpacing() const + { + return dividerSpacing_; + } + + const Color& GetDividerColor() const + { + return dividerColor_; + } + + const Dimension& GetGradientHeight() const + { + return gradientHeight_; + } + + const Dimension& GetColumnFixedWidth() const + { + return columnFixedWidth_; + } + + Dimension GetColumnBottomTotalHeight(bool hasLunar) const + { + if (hasLunar) { + return buttonHeight_ + lunarHeight_ + buttonTopPadding_ * 2 + popupEdge_.Bottom(); + } else { + return buttonHeight_ + buttonTopPadding_ + popupEdge_.Bottom(); + } + } + + const Color& GetPressColor() const + { + return pressColor_; + } + + const Color& GetHoverColor() const + { + return hoverColor_; + } + +private: + PickerTheme() = default; + + Color focusColor_; + Color hoverColor_; + Color pressColor_; + Radius focusRadius_; + uint32_t showOptionCount_ = 0; + bool showButtons_ = false; + Dimension jumpInterval_; + + // popup style + RefPtr popupDecoration_; + RefPtr popupOutDecoration_; + Edge popupEdge_; + + // column + Dimension columnIntervalMargin_; + + // text style + TextStyle focusOptionStyle_; + TextStyle selectedOptionStyle_; + TextStyle normalOptionStyle_; + TextStyle disappearOptionStyle_; + TextStyle buttonStyle_; + TextStyle titleStyle_; + + // text around decoration + RefPtr selectedOptionDecoration_; + RefPtr focusOptionDecoration_; + + // option size + Size selectedOptionSize_; + Size normalOptionSize_; + double optionPadding_ = 0.0; + DimensionUnit optionSizeUnit_ = DimensionUnit::PX; + + // buttons size + Dimension buttonWidth_; + Dimension buttonHeight_; + Dimension buttonTopPadding_; + Dimension titleBottomPadding_; + + // lunar size + Dimension lunarWidth_; + Dimension lunarHeight_; + + uint32_t timeSplitter_ = 0; + + double rotateInterval_ = 0.0; + Dimension dividerThickness_; + Dimension dividerSpacing_; + Color dividerColor_; + Dimension gradientHeight_; + Dimension columnFixedWidth_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_THEME_H diff --git a/frameworks/core/components/picker/picker_time_component.cpp b/frameworks/core/components/picker/picker_time_component.cpp new file mode 100644 index 00000000..1751419b --- /dev/null +++ b/frameworks/core/components/picker/picker_time_component.cpp @@ -0,0 +1,330 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/picker/picker_time_component.h" + +namespace OHOS::Ace { + +PickerTimeComponent::PickerTimeComponent() +{ + vecAmPm_ = Localization::GetInstance()->GetAmPmStrings(); +} + +void PickerTimeComponent::OnTitleBuilding() +{ + PickerBaseComponent::OnTitleBuilding(); + + auto titleComponent = GetTitle(); + if (!titleComponent) { + LOGE("title component is null."); + return; + } + + auto date = PickerDate::Current(); + titleComponent->SetData(date.ToString(false)); +} + +void PickerTimeComponent::OnColumnsBuilding() +{ + HandleHourColumnBuilding(); + + auto minuteColumn = GetColumn(PICKER_MINUTE_COLUMN); + auto secondColumn = GetColumn(PICKER_SECOND_COLUMN); + if (!minuteColumn) { + LOGE("minute column is null."); + return; + } + + minuteColumn->ClearOption(); + for (uint32_t minute = 0; minute <= 59; ++minute) { // time's minute from 0 to 59 + if (minute == selectedTime_.GetMinute()) { + minuteColumn->SetCurrentIndex(minuteColumn->GetOptionCount()); + } + minuteColumn->AppendOption(GetMinuteFormatString(minute)); + } + + if (hasSecond_ && secondColumn) { + secondColumn->ClearOption(); + for (uint32_t second = 0; second <= 59; ++second) { // time's second from 0 to 59 + if (second == selectedTime_.GetSecond()) { + secondColumn->SetCurrentIndex(secondColumn->GetOptionCount()); + } + secondColumn->AppendOption(GetSecondFormatString(second)); + } + } +} + +void PickerTimeComponent::HandleHourColumnBuilding() +{ + auto hourColumn = GetColumn(PICKER_HOUR_COLUMN); + auto amPmColumn = GetColumn(PICKER_AMPM_COLUMN); + if (!hourColumn) { + LOGE("hour column is null."); + return; + } + + hourColumn->ClearOption(); + if (hour24_) { + for (uint32_t hour = 0; hour <= 23; ++hour) { // time's hour from 0 to 23. + if (hour == selectedTime_.GetHour()) { + hourColumn->SetCurrentIndex(hourColumn->GetOptionCount()); + } + hourColumn->AppendOption(GetHourFormatString(hour)); + } + } else if (amPmColumn) { + amPmColumn->ClearOption(); + amPmColumn->AppendOption(GetAmFormatString()); + amPmColumn->AppendOption(GetPmFormatString()); + if (IsAmHour(selectedTime_.GetHour())) { + amPmColumn->SetCurrentIndex(0); // AM's index + } else { + amPmColumn->SetCurrentIndex(1); // PM's index + } + auto selectedHour = GetAmPmHour(selectedTime_.GetHour()); + for (uint32_t hour = 1; hour <= 12; ++hour) { // hour start from 1 to 12 + if (hour == selectedHour) { + hourColumn->SetCurrentIndex(hourColumn->GetOptionCount()); + } + hourColumn->AppendOption(GetHourFormatString(hour)); + } + } else { + LOGE("AM PM column is null."); + } +} + +std::string PickerTimeComponent::GetSelectedObject(bool isColumnChange, const std::string& changeColumnTag) const +{ + if (isColumnChange) { + LOGE("not support."); + return ""; + } + return selectedTime_.ToString(true, hasSecond_); +} + +void PickerTimeComponent::OnDataLinking(const std::string& tag, bool isAdd, uint32_t index, + std::vector& resultTags) +{ + if (tag != PICKER_HOUR_COLUMN) { + return; + } + + if (hour24_) { + HandleHour24Change(isAdd, index, resultTags); + } else { + HandleHour12Change(isAdd, index, resultTags); + } +} + +void PickerTimeComponent::HandleHour24Change(bool isAdd, uint32_t index, std::vector& resultTags) +{ + if (isAdd && index == 0) { + resultTags.emplace_back(PICKER_MONTHDAY_COLUMN); + return; + } + if (!isAdd && index == 23) { // hour end with 23 which is the last hour + resultTags.emplace_back(PICKER_MONTHDAY_COLUMN); + return; + } +} + +void PickerTimeComponent::HandleHour12Change(bool isAdd, uint32_t index, std::vector& resultTags) +{ + auto amPm = GetColumn(PICKER_AMPM_COLUMN); + if (!amPm) { + LOGE("AM PM column is null."); + return; + } + + if (amPm->GetCurrentIndex() == 0 && isAdd && index == 11) { // hour index start from 0 to 11 + amPm->SetCurrentIndex(1); // add to PM's index + resultTags.emplace_back(PICKER_AMPM_COLUMN); + return; + } + + if (amPm->GetCurrentIndex() == 1 && !isAdd && index == 10) { // reduce to 11 hour (index is 10) + amPm->SetCurrentIndex(0); // change to AM whose index is 0 + resultTags.emplace_back(PICKER_AMPM_COLUMN); + return; + } + + if (amPm->GetCurrentIndex() == 1 && isAdd && index == 11) { // is PM (index is 1) and last hour (index is 11) + amPm->SetCurrentIndex(0); // change to PM (index is 0) + resultTags.emplace_back(PICKER_AMPM_COLUMN); + resultTags.emplace_back(PICKER_MONTHDAY_COLUMN); + return; + } + + if (amPm->GetCurrentIndex() == 0 && !isAdd && index == 10) { // reduce to 11 hour(index is 10) + amPm->SetCurrentIndex(1); // change to PM + resultTags.emplace_back(PICKER_AMPM_COLUMN); + resultTags.emplace_back(PICKER_MONTHDAY_COLUMN); + return; + } +} + +void PickerTimeComponent::OnSelectedSaving() +{ + selectedTime_ = GetCurrentTime(); +} + +PickerTime PickerTimeComponent::GetCurrentTime() const +{ + PickerTime time; + auto amPmColumn = GetColumn(PICKER_AMPM_COLUMN); + auto hourColumn = GetColumn(PICKER_HOUR_COLUMN); + auto minuteColumn = GetColumn(PICKER_MINUTE_COLUMN); + auto secondColumn = GetColumn(PICKER_SECOND_COLUMN); + if (!hourColumn || !minuteColumn) { + LOGE("hour or minute column is null."); + return time; + } + + if (hour24_) { + time.SetHour(hourColumn->GetCurrentIndex()); // hour from 0 to 23, index from 0 to 23 + } else if (amPmColumn) { + time.SetHour(GetHourFromAmPm(amPmColumn->GetCurrentIndex() == 0, hourColumn->GetCurrentIndex() + 1)); + } else { + LOGE("AM PM column is null."); + } + + time.SetMinute(minuteColumn->GetCurrentIndex()); // minute from 0 to 59, index from 0 to 59 + if (hasSecond_ && secondColumn) { + time.SetSecond(secondColumn->GetCurrentIndex()); // second from 0 to 59, index from 0 to 59 + } + return time; +} + +void PickerTimeComponent::OnColumnsCreating() +{ + RemoveColumn(PICKER_AMPM_COLUMN); + RemoveColumn(PICKER_HOUR_COLUMN); + RemoveColumn(PICKER_MINUTE_COLUMN); + RemoveColumn(PICKER_SECOND_COLUMN); + + if (!hour24_) { + auto amPmColumn = AceType::MakeRefPtr(); + amPmColumn->SetColumnTag(PICKER_AMPM_COLUMN); + amPmColumn->SetWidthRatio(2); // date:amPm:hour:minute:second = 4:2:2:2:2 + AppendColumn(amPmColumn); + } + + auto hourColumn = AceType::MakeRefPtr(); + hourColumn->SetColumnTag(PICKER_HOUR_COLUMN); + hourColumn->SetWidthRatio(2); // date:hour:minute:second = 3:2:2:2 + AppendColumn(hourColumn); + + auto minuteColumn = AceType::MakeRefPtr(); + minuteColumn->SetColumnTag(PICKER_MINUTE_COLUMN); + minuteColumn->SetWidthRatio(2); // date:hour:minute:second = 3:2:2:2 + AppendColumn(minuteColumn); + + if (hasSecond_) { + auto secondColumn = AceType::MakeRefPtr(); + secondColumn->SetColumnTag(PICKER_SECOND_COLUMN); + secondColumn->SetWidthRatio(2); // date:hour:minute:second = 3:2:2:2 + AppendColumn(secondColumn); + auto theme = GetTheme(); + if (!theme) { + return; + } + hourColumn->SetHasSplitter(theme->HasTimeSplitter()); + minuteColumn->SetHasSplitter(theme->HasTimeSplitter()); + } +} + +std::string PickerTimeComponent::GetAmFormatString() const +{ + if (vecAmPm_.empty()) { + return "AM"; + } + return vecAmPm_[0]; // first index is AM +} + +std::string PickerTimeComponent::GetPmFormatString() const +{ + if (vecAmPm_.size() < 2) { // size need to be 2 for AM and PM + return "PM"; + } + return vecAmPm_[1]; // second index is PM +} + +bool PickerTimeComponent::IsAmHour(uint32_t hourOf24) const +{ + return (0 <= hourOf24 && hourOf24 <= 11); // 00:00 to 11:00 is AM hour +} + +uint32_t PickerTimeComponent::GetAmPmHour(uint32_t hourOf24) const +{ + if (hourOf24 == 0) { + return 12; // AM 12:00 means 00:00 in 24 hour style + } else if (1 <= hourOf24 && hourOf24 <= 11) { // 00:00 to 11:00 is the same for any hour style + return hourOf24; + } else if (hourOf24 == 12) { // 12:00 means PM start hour + return 12; // 12 PM + } else { // hour from 13 to 23 + return hourOf24 - 12; // need reduce 12 to 12 hours style + } +} + +uint32_t PickerTimeComponent::GetHourFromAmPm(bool isAm, uint32_t amPmhour) const +{ + if (isAm) { + if (amPmhour == 12) { // AM 12:00 means 00:00 + return 0; + } + return amPmhour; + } + + if (amPmhour == 12) { // PM 12 means 12:00 + return 12; + } + + return amPmhour + 12; // need add 12 hour to 24 hours style +} + +std::string PickerTimeComponent::GetHourFormatString(uint32_t hour) const +{ + DateTime time; + time.minute = hour; // minute range [0, 59], hour range [0, 23]; hour range is in minute range. + if (Localization::GetInstance()->HasZeroHour()) { + return AddZeroPrefix(Localization::GetInstance()->FormatDateTime(time, "m")); + } + + return Localization::GetInstance()->FormatDateTime(time, "m"); +} + +std::string PickerTimeComponent::GetMinuteFormatString(uint32_t minute) const +{ + DateTime time; + time.minute = minute; + return AddZeroPrefix(Localization::GetInstance()->FormatDateTime(time, "m")); +} + +std::string PickerTimeComponent::GetSecondFormatString(uint32_t second) const +{ + DateTime time; + time.second = second; + return AddZeroPrefix(Localization::GetInstance()->FormatDateTime(time, "s")); +} + +std::string PickerTimeComponent::AddZeroPrefix(const std::string& value) const +{ + if (value.size() == 1 && '0' <= value[0] && value[0] <= '9') { // value is number in range [0, 9] + return std::string("0") + value; // add prefix '0' + } + return value; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/picker/picker_time_component.h b/frameworks/core/components/picker/picker_time_component.h new file mode 100644 index 00000000..2a79e5fe --- /dev/null +++ b/frameworks/core/components/picker/picker_time_component.h @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_TIME_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_TIME_COMPONENT_H + +#include "base/i18n/localization.h" +#include "core/components/picker/picker_base_component.h" + +namespace OHOS::Ace { + +class PickerTimeComponent : public PickerBaseComponent { + DECLARE_ACE_TYPE(PickerTimeComponent, PickerBaseComponent); + +public: + PickerTimeComponent(); + + ~PickerTimeComponent() override = default; + + const PickerTime& GetSelectedTime() const + { + return selectedTime_; + } + void SetSelectedTime(const PickerTime& value) + { + selectedTime_ = value; + } + + bool GetHasSecond() const + { + return hasSecond_; + } + void SetHasSecond(bool value) + { + hasSecond_ = value; + } + + bool GetHour24() const + { + return hour24_; + } + void SetHour24(bool value) + { + hour24_ = value; + } + + void OnTitleBuilding() override; + + void OnColumnsBuilding() override; + + std::string GetSelectedObject(bool isColumnChange, const std::string& changeColumnTag) const override; + + void OnDataLinking(const std::string& tag, bool isAdd, uint32_t index, + std::vector& resultTags) override; + + void OnSelectedSaving() override; + + void OnColumnsCreating() override; + +protected: + PickerTime GetCurrentTime() const; + + void HandleHour24Change(bool isAdd, uint32_t index, std::vector& resultTags); + + void HandleHour12Change(bool isAdd, uint32_t index, std::vector& resultTags); + + bool IsAmHour(uint32_t hourOf24) const; + + uint32_t GetAmPmHour(uint32_t hourOf24) const; + + uint32_t GetHourFromAmPm(bool isAm, uint32_t amPmhour) const; + + std::string GetAmFormatString() const; + + std::string GetPmFormatString() const; + + void HandleHourColumnBuilding(); + + std::string AddZeroPrefix(const std::string& value) const; + + std::string GetHourFormatString(uint32_t hour) const; + + std::string GetMinuteFormatString(uint32_t minute) const; + + std::string GetSecondFormatString(uint32_t second) const; + +private: + PickerTime selectedTime_ = PickerTime::Current(); + bool hasSecond_ = false; + // true, use 24 hours style; false, use 12 hours style. + bool hour24_ = !Localization::GetInstance()->IsAmPmHour(); + std::vector vecAmPm_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_TIME_COMPONENT_H diff --git a/frameworks/core/components/picker/picker_value_component.h b/frameworks/core/components/picker/picker_value_component.h new file mode 100644 index 00000000..817ff459 --- /dev/null +++ b/frameworks/core/components/picker/picker_value_component.h @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_VALUE_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_VALUE_COMPONENT_H + +#include "core/components/picker/picker_option_component.h" +#include "core/components/picker/picker_value_element.h" +#include "core/pipeline/base/sole_child_component.h" + +namespace OHOS::Ace { + +class PickerValueComponent : public SoleChildComponent { + DECLARE_ACE_TYPE(PickerValueComponent, SoleChildComponent); + +public: + explicit PickerValueComponent(const PickerValueCallback& clickCallback) + { + clickCallback_ = clickCallback; + option_ = AceType::MakeRefPtr(); + option_->SetSelected(false); + option_->SetAutoLayout(true); + SetChild(option_); + } + + ~PickerValueComponent() override = default; + + RefPtr CreateRenderNode() override + { + return AceType::MakeRefPtr(clickCallback_); + } + RefPtr CreateElement() override + { + return AceType::MakeRefPtr(); + } + + const std::string& GetText() const + { + return option_->GetText(); + } + void SetText(const std::string& value) + { + option_->SetText(value); + } + + void SetTheme(const RefPtr& value) + { + if (!value) { + LOGE("input value is null."); + return; + } + + value->SetOptionStyle(true, false, value->GetOptionStyle(false, false)); + value->SetOptionDecoration(false, AceType::MakeRefPtr()); + option_->SetTheme(value); + option_->SetTextDirection(GetTextDirection()); + } + +private: + RefPtr option_; + PickerValueCallback clickCallback_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_VALUE_COMPONENT_H diff --git a/frameworks/core/components/picker/picker_value_element.cpp b/frameworks/core/components/picker/picker_value_element.cpp new file mode 100644 index 00000000..e2a60955 --- /dev/null +++ b/frameworks/core/components/picker/picker_value_element.cpp @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/picker/picker_value_element.h" + +#include "core/components/box/box_element.h" +#include "core/components/stack/stack_element.h" +#include "core/pipeline/base/composed_element.h" + +namespace OHOS::Ace { + +void PickerValueElement::OnClick() +{ + auto render = AceType::DynamicCast(renderNode_); + if (!render) { + LOGE("render is null."); + return; + } + render->HandleClickCallback(); +} + +RefPtr PickerValueElement::GetRenderBox() const +{ + auto element = GetElementParent().Upgrade(); + while (element && !AceType::InstanceOf(element)) { + auto box = AceType::DynamicCast(element); + if (box) { + return AceType::DynamicCast(box->GetRenderNode()); + } + element = element->GetElementParent().Upgrade(); + } + return nullptr; +} + +void PickerValueElement::HandleSelfFocus(bool focus) +{ + auto render = AceType::DynamicCast(renderNode_); + if (!render) { + LOGE("render is null."); + return; + } + + auto box = GetRenderBox(); + if (!box) { + LOGE("box is null."); + return; + } + + render->HandleFocus(box, focus); +} + +void PickerValueElement::HandleSelfFocus() +{ + auto render = AceType::DynamicCast(renderNode_); + if (!render) { + LOGE("render is null."); + return; + } + + auto box = GetRenderBox(); + if (!box) { + LOGE("box is null."); + return; + } + + render->HandleFocus(box); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/picker/picker_value_element.h b/frameworks/core/components/picker/picker_value_element.h new file mode 100644 index 00000000..8b035ecc --- /dev/null +++ b/frameworks/core/components/picker/picker_value_element.h @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_VALUE_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_VALUE_ELEMENT_H + +#include "core/components/box/render_box.h" +#include "core/components/picker/render_picker_value.h" +#include "core/pipeline/base/sole_child_element.h" + +namespace OHOS::Ace { + +class PickerValueElement : public SoleChildElement, public FocusNode { + DECLARE_ACE_TYPE(PickerValueElement, SoleChildElement, FocusNode); + +public: + void PerformBuild() override + { + SetFocusable(true); + SoleChildElement::PerformBuild(); + HandleSelfFocus(); + } + + void Update() override + { + customComponent_ = component_; + SoleChildElement::Update(); + } + + bool CanUpdate(const RefPtr& newComponent) override + { + return (newComponent == customComponent_) && Element::CanUpdate(newComponent); + } + +protected: + void OnClick() override; + + void OnFocus() override + { + HandleSelfFocus(true); + } + + void OnBlur() override + { + HandleSelfFocus(false); + } + +private: + RefPtr GetRenderBox() const; + + void HandleSelfFocus(bool focus); + + void HandleSelfFocus(); + + WeakPtr customComponent_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_PICKER_VALUE_ELEMENT_H diff --git a/frameworks/core/components/picker/render_picker_base.cpp b/frameworks/core/components/picker/render_picker_base.cpp new file mode 100644 index 00000000..7a8e0538 --- /dev/null +++ b/frameworks/core/components/picker/render_picker_base.cpp @@ -0,0 +1,702 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/picker/render_picker_base.h" + +#include + +#include "base/log/event_report.h" +#include "core/event/ace_event_helper.h" + +namespace OHOS::Ace { + +bool RenderPickerBase::TouchTest(const Point& globalPoint, const Point& parentLocalPoint, + const TouchRestrict& touchRestrict, TouchTestResult& result) +{ + if (triangle_) { + Rect rect(triangle_->GetGlobalOffset(), triangle_->GetLayoutSize()); + if (rect.IsInRegion(globalPoint) && GetDisableTouchEvent()) { + triangle_->OnTouchTestHit(Offset(), touchRestrict, result); + return true; + } + } + + if (lunarText_) { + Rect rect(lunarText_->GetGlobalOffset(), lunarText_->GetLayoutSize()); + if (rect.IsInRegion(globalPoint) && switch_ && switch_->GetParent().Upgrade()) { + auto parent = switch_->GetParent().Upgrade(); + Point global; + Point local; + auto size = switch_->GetLayoutSize(); + global = global + switch_->GetGlobalOffset() + Offset(size.Width() / 2, size.Height() / 2); + local = global - parent->GetGlobalOffset(); + return switch_->TouchTest(global, local, touchRestrict, result); + } + } + + return RenderNode::TouchTest(globalPoint, parentLocalPoint, touchRestrict, result); +} + +void RenderPickerBase::Update(const RefPtr& component) +{ + auto picker = AceType::DynamicCast(component); + if (!picker) { + LOGE("input component is incorrect type or null."); + EventReport::SendRenderException(RenderExcepType::RENDER_COMPONENT_ERR); + return; + } + + data_ = picker; + SetInterceptTouchEvent(!data_->GetSubsidiary()); + data_->OnColumnsCreating(); + onCancelCallback_ = AceAsyncEvent::Create(data_->GetOnCancel(), context_); + onChangeCallback_ = AceAsyncEvent::Create(data_->GetOnChange(), context_); + onColumnChangeCallback_ = AceAsyncEvent::Create(data_->GetOnColumnChange(), context_); + data_->SetFinishCallback([weak = WeakClaim(this)](bool success) { + auto refPtr = weak.Upgrade(); + if (refPtr) { + refPtr->HandleFinish(success); + } + }); + data_->SetChangeCallback([weak = WeakClaim(this)](const std::string& tag, bool add, uint32_t index, bool notify) { + auto refPtr = weak.Upgrade(); + if (refPtr) { + refPtr->HandleColumnChange(tag, add, index, notify); + } + }); + if (data_->GetIsDialog()) { + SetButtonHandler(); + } + SetTextDirection(data_->GetTextDirection()); + MarkNeedLayout(); + + const auto& rotationController = picker->GetRotationController(); + if (rotationController) { + auto weak = AceType::WeakClaim(this); + rotationController->SetRequestRotationImpl(weak, context_); + } +} + +void RenderPickerBase::SetButtonHandler() +{ + // RenderPicker may created for same component(when showing again), + // these event id may already bind, so remove first. + BackEndEventManager::GetInstance().RemoveBackEndEvent(data_->GetOnCancelClickId()); + BackEndEventManager::GetInstance().BindBackendEvent( + data_->GetOnCancelClickId(), [weak = WeakClaim(this)]() { + const auto& picker = weak.Upgrade(); + if (picker) { + picker->HandleFinish(false); + } else { + LOGE("GetOnCancelClickId picker weak.Upgrade is null"); + } + }); + BackEndEventManager::GetInstance().RemoveBackEndEvent(data_->GetOnOkClickId()); + BackEndEventManager::GetInstance().BindBackendEvent(data_->GetOnOkClickId(), [weak = WeakClaim(this)]() { + const auto& picker = weak.Upgrade(); + if (picker) { + picker->HandleFinish(true); + } else { + LOGE("GetOnOkClickId picker weak.Upgrade is null"); + } + }); + auto cancelNode = data_->GetCancelAccessibility(); + if (cancelNode) { + cancelNode->SetActionClickImpl([weakPtr = WeakClaim(this)]() { + const auto& picker = weakPtr.Upgrade(); + if (picker) { + picker->HandleFinish(false); + } + }); + } + auto okNode = data_->GetOkAccessibility(); + if (okNode) { + okNode->SetActionClickImpl([weakPtr = WeakClaim(this)]() { + const auto& picker = weakPtr.Upgrade(); + if (picker) { + picker->HandleFinish(true); + } + }); + } +} + +void RenderPickerBase::HandleTriangleClick(bool value) +{ + if (!data_) { + LOGE("data is null"); + return; + } + + data_->OnTriangleCallback(value); + MarkNeedRender(); +} + +void RenderPickerBase::SetTriangleHandler() +{ + if (!triangle_ || triangle_->GetOnClick()) { + return; + } + + triangle_->SetOnClick([weak = WeakClaim(this)](bool value) { + auto refPtr = weak.Upgrade(); + if (!refPtr) { + return; + } + refPtr->HandleTriangleClick(value); + }); +} + +void RenderPickerBase::SetSwitchHandler() +{ + if (switchHandlerSetted_) { + return; + } + + if (!switch_) { + LOGE("can not get switch button."); + return; + } + + auto switchNode = data_->GetSwitchAccessibility(); + switch_->SetOnChange([weak = WeakClaim(this)](bool value) { + auto refPtr = weak.Upgrade(); + if (!refPtr) { + return; + } + refPtr->HandleSwitch(value); + if (!refPtr->data_) { + return; + } + auto node = refPtr->data_->GetSwitchAccessibility(); + auto pipeline = refPtr->context_.Upgrade(); + if (node && pipeline && node->GetClicked()) { + node->SetClicked(false); + AccessibilityEvent clickEvent; + clickEvent.nodeId = node->GetNodeId(); + clickEvent.eventType = "click"; + pipeline->SendEventToAccessibility(clickEvent); + } + }); + + if (switchNode && switch_) { + switchNode->SetActionClickImpl([weak = WeakClaim(this)]() { + auto refPtr = weak.Upgrade(); + if (refPtr && refPtr->switch_) { + refPtr->switch_->HandleClick(); + } + }); + } + switchHandlerSetted_ = true; +} + +void RenderPickerBase::PerformLayout() +{ + SetSwitchHandler(); + SetTriangleHandler(); + + if (!data_ || !outBox_) { + LOGE("data or out box is null."); + return; + } + + if (data_->GetIsDialog()) { + LayoutBoxes(); + LayoutColumns(); + SetLayoutSize(GetLayoutParam().GetMaxSize()); + if (!hasLayout_) { + hasLayout_ = true; + } + return; + } + + double lunarHeight = 16.0; // use 16.0 not 0.0 for default + if (data_->GetHasLunar() && data_->GetTheme()) { + auto theme = data_->GetTheme(); + lunarHeight = NormalizeToPx(theme->GetButtonTopPadding()) + NormalizeToPx(theme->GetLunarHeight()); + } + for (const auto& column : columns_) { + column->SetAdjustHeight(lunarHeight); + } + outBox_->Layout(GetLayoutParam()); + LayoutColumns(); + SetLayoutSize(outBox_->GetLayoutSize()); +} + +void RenderPickerBase::LayoutBoxes() +{ + if (!stack_ || !outBox_ || !box_ || !data_ || !data_->GetTheme()) { + LOGE("inner param invalidate."); + return; + } + + auto theme = data_->GetTheme(); + outBox_->Layout(LayoutParam()); + Size innerSize = box_->GetLayoutSize(); + if (innerSize.Width() < NormalizeToPx(theme->GetButtonWidth()) * 2.0) { // ok width + cancel width + innerSize.SetWidth(NormalizeToPx(theme->GetButtonWidth()) * 2.0); // ok width + cancel width + } + // the min size of pupup screen interval is 12.0 vp + 12.0 vp = 24.0 vp + if (innerSize.Width() + NormalizeToPx(24.0_vp) > stack_->GetLayoutSize().Width()) { + innerSize.SetWidth(stack_->GetLayoutSize().Width() - NormalizeToPx(24.0_vp)); + } + LayoutParam layout; + layout.SetFixedSize(GetLayoutParam().GetMaxSize()); + outBox_->Layout(layout); + double x = (stack_->GetLayoutSize().Width() - innerSize.Width()) / 2.0; // place center + double y = 0.0; + if (theme->GetShowButtons()) { + y = (outBox_->GetLayoutSize().Height() - innerSize.Height() - + NormalizeToPx(theme->GetButtonTopPadding())); // place bottom + } else { + y = (outBox_->GetLayoutSize().Height() - innerSize.Height()) / 2.0; // place center + } + box_->SetPosition(Offset(x, y)); + layout.SetFixedSize(innerSize); + box_->Layout(layout); + if (data_->GetSubsidiary()) { + auto adjustHeight = NormalizeToPx(theme->GetColumnBottomTotalHeight(data_->GetMasterHasLunar())); + y -= adjustHeight; + auto outerSize = innerSize; + outerSize.AddHeight(adjustHeight); + layout.SetFixedSize(outerSize); + outBox_->SetPosition(Offset(x, y)); + outBox_->Layout(layout); + box_->SetPosition(Offset(0.0, 0.0)); + layout.SetFixedSize(innerSize); + box_->Layout(layout); + } +} + +void RenderPickerBase::LayoutColumns() +{ + if (!columnParent_ || columns_.empty() || !data_) { + LOGE("inner param invalidate."); + return; + } + + double totalWidth = columnParent_->GetLayoutSize().Width(); + double totalHeight = columnParent_->GetLayoutSize().Height(); + uint32_t ratioCount = std::accumulate(columns_.begin(), columns_.end(), 0, + [](uint32_t sum, const RefPtr& column) { return sum += column->GetWidthRatio(); }); + + bool divideEvenly = SystemProperties::GetDeviceType() != DeviceType::PHONE || ratioCount == 0; + double oneWidth = divideEvenly ? totalWidth / columns_.size() : totalWidth / ratioCount; + double left = 0; + LayoutParam layout; + for (uint32_t index = 0; index < columns_.size(); ++index) { + uint32_t realIndex = 0; + if (data_->NeedRtlColumnOrder()) { + if (data_->GetTextDirection() == TextDirection::RTL) { + realIndex = columns_.size() - 1 - index; // the last index is columns_.size() - 1 + } else { + realIndex = index; + } + } else { + realIndex = index; + } + columns_[realIndex]->SetPosition(Offset(left + columns_[realIndex]->GetXOffset(), 0.0)); + double columnWidth = divideEvenly ? oneWidth : oneWidth * columns_[realIndex]->GetWidthRatio(); + layout.SetFixedSize(Size(columnWidth, totalHeight)); + columns_[realIndex]->Layout(layout); + left += columnWidth; + } +} + +void RenderPickerBase::UpdateAccessibility() +{ + if (!data_) { + LOGE("inner params of render picker base has error."); + return; + } + + auto titleNode = data_->GetTitleAccessibility(); + if (titleNode && title_) { + UpdateTextAccessibility(titleNode, title_); + } + + auto lunarNode = data_->GetLunarAccessibility(); + if (lunarNode && lunarText_) { + UpdateTextAccessibility(lunarNode, lunarText_); + } + + auto switchNode = data_->GetSwitchAccessibility(); + if (switchNode && switch_) { + UpdateSwitchAccessibility(switchNode, switch_); + } + + auto cancelNode = data_->GetCancelAccessibility(); + if (cancelNode && cancel_) { + UpdateButtonAccessibility(cancelNode, cancel_); + } + + auto okNode = data_->GetOkAccessibility(); + if (okNode && ok_) { + UpdateButtonAccessibility(okNode, ok_); + } + +#if defined(WINDOWS_PLATFORM) || defined(MAC_PLATFORM) + auto pickerDialogNode = data_->GetPickerDialogAccessibility(); + if (pickerDialogNode && box_) { + UpdatePickerDialogAccessibility(pickerDialogNode, box_); + } +#endif +} + +void RenderPickerBase::UpdateSwitchAccessibility( + const RefPtr& node, const RefPtr& renderSwitch) +{ + if (!node || !renderSwitch) { + return; + } + auto pipeline = context_.Upgrade(); + if (!pipeline) { + return; + } + auto viewScale = pipeline->GetViewScale(); + auto leftTop = renderSwitch->GetGlobalOffset(); + node->SetLeft(leftTop.GetX() * viewScale); + node->SetTop(leftTop.GetY() * viewScale); + auto size = renderSwitch->GetLayoutSize(); + node->SetWidth(size.Width() * viewScale); + node->SetHeight(size.Height() * viewScale); + node->SetCheckedState(renderSwitch->GetChecked()); + if (lunarText_) { + node->SetText(lunarText_->GetTextData()); + } + node->SetEnabledState(true); + node->SetCheckableState(true); + node->SetClickableState(true); + node->SetFocusableState(true); + node->AddSupportAction(AceAction::ACTION_CLICK); +} + +void RenderPickerBase::UpdatePickerDialogAccessibility( + const RefPtr& node, const RefPtr& box) +{ + if (!node || !box) { + return; + } + auto pipeline = context_.Upgrade(); + if (!pipeline) { + return; + } + auto viewScale = pipeline->GetViewScale(); + auto leftTop = box->GetGlobalOffset(); + node->SetLeft(leftTop.GetX() * viewScale); + node->SetTop(leftTop.GetY() * viewScale); + auto size = box->GetLayoutSize(); + node->SetWidth(size.Width() * viewScale); + node->SetHeight(size.Height() * viewScale); +} + +void RenderPickerBase::UpdateTextAccessibility(const RefPtr& node, const RefPtr& text) +{ + if (!node || !text) { + return; + } + auto pipeline = context_.Upgrade(); + if (!pipeline) { + return; + } + auto viewScale = pipeline->GetViewScale(); + auto leftTop = text->GetGlobalOffset(); + node->SetLeft(leftTop.GetX() * viewScale); + node->SetTop(leftTop.GetY() * viewScale); + auto size = text->GetLayoutSize(); + node->SetWidth(size.Width() * viewScale); + node->SetHeight(size.Height() * viewScale); + node->SetText(text->GetTextData()); +} + +void RenderPickerBase::UpdateButtonAccessibility( + const RefPtr& node, const RefPtr& button) +{ + if (!node || !button) { + return; + } + auto pipeline = context_.Upgrade(); + if (!pipeline) { + return; + } + auto viewScale = pipeline->GetViewScale(); + auto leftTop = button->GetGlobalOffset(); + node->SetLeft(leftTop.GetX() * viewScale); + node->SetTop(leftTop.GetY() * viewScale); + auto size = button->GetLayoutSize(); + node->SetWidth(size.Width() * viewScale); + node->SetHeight(size.Height() * viewScale); + node->SetEnabledState(true); + node->SetClickableState(true); + node->SetFocusableState(true); + node->AddSupportAction(AceAction::ACTION_CLICK); + node->AddSupportAction(AceAction::ACTION_LONG_CLICK); +} + +void RenderPickerBase::HandleFinish(bool success) +{ + if (!data_) { + LOGE("data is null."); + return; + } + + if (data_->GetSubsidiary() && data_->GetAnimationController()) { + auto controller = data_->GetAnimationController(); + controller->Play(false); + return; + } + + if (success) { + data_->OnSelectedSaving(); + } + + if (success && onChangeCallback_) { + onChangeCallback_(std::string("\"change\",") + data_->GetSelectedObject(false, "") + ",null"); + } + + if (!success && onCancelCallback_) { + onCancelCallback_(); + } + + data_->HideDialog(); +} + +void RenderPickerBase::HandleSwitch(bool checked) +{ + if (!data_) { + LOGE("data is null."); + return; + } + + std::vector tags; + data_->OnLunarCallback(checked, tags); + for (const auto& tag : tags) { + auto iter = std::find_if(columns_.begin(), columns_.end(), + [&tag](const RefPtr& column) { return column->GetColumnTag() == tag; }); + if (iter != columns_.end()) { + (*iter)->FlushCurrentOptions(); + } + } +} + +void RenderPickerBase::HandleColumnChange(const std::string& tag, bool isAdd, uint32_t index, bool needNotify) +{ + if (!data_) { + LOGE("data is null."); + return; + } + + if (onColumnChangeCallback_ && needNotify) { + onColumnChangeCallback_(std::string("\"columnchange\",") + data_->GetSelectedObject(true, tag) + ",null"); + } + + std::vector tags; + data_->OnDataLinking(tag, isAdd, index, tags); + for (const auto& tag : tags) { + auto iter = std::find_if(columns_.begin(), columns_.end(), + [&tag](const RefPtr& column) { return column->GetColumnTag() == tag; }); + if (iter != columns_.end()) { + (*iter)->FlushCurrentOptions(); + } + } + + if (!data_->GetIsDialog()) { + HandleFinish(true); + return; + } + + data_->OnTitleBuilding(); + auto titleComponent = data_->GetTitle(); + if (data_->GetHasTitle()) { + if (title_ && titleComponent) { + title_->Update(titleComponent); + } else { + LOGE("render title or title component is null."); + } + } +} + +void RenderPickerBase::UpdateRenders() +{ + ClearRenders(); + GetRenders(); + InitPickerAnimation(); + switchHandlerSetted_ = false; +} + +void RenderPickerBase::GetRenders() +{ + auto render = GetParent().Upgrade(); + while (render && !AceType::InstanceOf(render)) { + render = render->GetParent().Upgrade(); + } + if (render) { + stack_ = AceType::DynamicCast(render); + } + GetRenders(AceType::Claim(this)); +} + +void RenderPickerBase::InitPickerAnimation() +{ + if (!data_) { + LOGE("data is null for picker animation"); + return; + } + + auto controller = data_->GetAnimationController(); + if (!controller) { + LOGE("controller is null for picker animation."); + return; + } + + controller->SetPipeline(GetContext()); + if (lunarDisplay_) { + controller->SetLunar(lunarDisplay_); + } + if (buttonsDisplay_) { + controller->SetButtons(buttonsDisplay_); + } + if (triangle_) { + controller->SetTriangle(triangle_); + } + + for (const auto& column : columns_) { + if (!column) { + continue; + } + + if (column->GetColumnTag() == PickerBaseComponent::PICKER_YEAR_COLUMN) { + controller->SetYear(column); + } + if (column->GetColumnTag() == PickerBaseComponent::PICKER_MONTH_COLUMN) { + controller->SetMonth(column); + } + if (column->GetColumnTag() == PickerBaseComponent::PICKER_DAY_COLUMN) { + controller->SetDay(column); + } + if (column->GetColumnTag() == PickerBaseComponent::PICKER_MONTHDAY_COLUMN) { + controller->SetMonthDay(column); + } + if (column->GetColumnTag() == PickerBaseComponent::PICKER_AMPM_COLUMN) { + controller->SetAmPm(column); + } + if (column->GetColumnTag() == PickerBaseComponent::PICKER_HOUR_COLUMN) { + controller->SetHour(column); + } + if (column->GetColumnTag() == PickerBaseComponent::PICKER_MINUTE_COLUMN) { + controller->SetMinute(column); + } + if (column->GetColumnTag() == PickerBaseComponent::PICKER_SECOND_COLUMN) { + controller->SetSecond(column); + } + } +} + +void RenderPickerBase::DealRenders(const RefPtr& render) +{ + if (AceType::InstanceOf(render)) { + if (!buttonsDisplay_) { + buttonsDisplay_ = AceType::DynamicCast(render); + } else { + auto temp = buttonsDisplay_; + buttonsDisplay_ = AceType::DynamicCast(render); + lunarDisplay_ = temp; + } + } + + if (AceType::InstanceOf(render)) { + auto parent = render->GetParent().Upgrade(); + if (parent && AceType::InstanceOf(parent)) { + outBox_ = AceType::DynamicCast(render); + } + if (parent && AceType::InstanceOf(parent)) { + auto grand = parent->GetParent().Upgrade(); + if (grand && AceType::InstanceOf(grand)) { + box_ = AceType::DynamicCast(render); + } + } + } +} + +void RenderPickerBase::GetRenders(const RefPtr& render) +{ + if (!render) { + return; + } + + if (AceType::InstanceOf(render)) { + triangle_ = AceType::DynamicCast(render); + return; + } + + if (AceType::InstanceOf(render)) { + switch_ = AceType::DynamicCast(render); + return; + } + + if (AceType::InstanceOf(render)) { + auto gesture = AceType::DynamicCast(render); + if (!cancel_ && !ok_) { + cancel_ = gesture; + return; + } + ok_ = gesture; + return; + } + + if (AceType::InstanceOf(render)) { + auto column = AceType::DynamicCast(render); + columns_.push_back(column); + if (!columnParent_ && column->GetParent().Upgrade()) { + columnParent_ = column->GetParent().Upgrade(); + } + return; + } + + if (AceType::InstanceOf(render)) { + auto parent = render->GetParent().Upgrade(); + if (parent && AceType::InstanceOf(parent)) { + title_ = AceType::DynamicCast(render); + return; + } + if (parent && AceType::InstanceOf(parent)) { + lunarText_ = AceType::DynamicCast(render); + return; + } + } + + DealRenders(render); + for (const auto& child : render->GetChildren()) { + GetRenders(child); + } +} + +void RenderPickerBase::ClearRenders() +{ + title_ = nullptr; + triangle_ = nullptr; + lunarDisplay_ = nullptr; + buttonsDisplay_ = nullptr; + stack_ = nullptr; + box_ = nullptr; + outBox_ = nullptr; + cancel_ = nullptr; + ok_ = nullptr; + columns_.clear(); + columnParent_ = nullptr; + switch_ = nullptr; + lunarText_ = nullptr; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/picker/render_picker_base.h b/frameworks/core/components/picker/render_picker_base.h new file mode 100644 index 00000000..0b068f29 --- /dev/null +++ b/frameworks/core/components/picker/render_picker_base.h @@ -0,0 +1,139 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_RENDER_PICKER_BASE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_RENDER_PICKER_BASE_H + +#include +#include + +#include "core/components/box/render_box.h" +#include "core/components/button/render_button.h" +#include "core/components/checkable/render_checkbox.h" +#include "core/components/gesture_listener/render_gesture_listener.h" +#include "core/components/picker/picker_base_component.h" +#include "core/components/picker/render_picker_column.h" +#include "core/components/stack/render_stack.h" +#include "core/components/triangle/render_triangle.h" +#include "core/gestures/click_recognizer.h" +#include "core/gestures/drag_recognizer.h" +#include "core/gestures/raw_recognizer.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderPickerBase : public RenderNode { + DECLARE_ACE_TYPE(RenderPickerBase, RenderNode); + +public: + static RefPtr Create(); + void Update(const RefPtr& component) override; + void PerformLayout() override; + + void OnPaintFinish() override + { + UpdateAccessibility(); + } + + void StartAnimation() + { + if (!data_) { + return; + } + data_->OnAnimationPlaying(); + } + + void UpdateRenders(); + + void FlushColumnsOptions() + { + if (switch_ && data_ && data_->GetLunar()) { + auto lunar = data_->GetLunar(); + lunar->SetValue(data_->IsShowLunar()); + switch_->Update(lunar); + switch_->MarkNeedLayout(); + } + for (const auto& column : columns_) { + column->FlushCurrentOptions(); + } + } + + bool TouchTest(const Point& globalPoint, const Point& parentLocalPoint, const TouchRestrict& touchRestrict, + TouchTestResult& result) override; + +protected: + void OnTouchTestHit(const Offset&, const TouchRestrict&, TouchTestResult& result) override + { + if (data_ && !data_->GetSubsidiary()) { + result.emplace_back(rawDetect_); + } + } + + RefPtr data_; + std::vector> columns_; + RefPtr box_; + RefPtr columnParent_; + +private: + void HandleFinish(bool success); + void HandleSwitch(bool checked); + void HandleColumnChange(const std::string& tag, bool isAdd, uint32_t index, bool needNotify); + + void GetRenders(); + void GetRenders(const RefPtr& render); + void DealRenders(const RefPtr& render); + void ClearRenders(); + + void InitPickerAnimation(); + + void SetButtonHandler(); + void SetSwitchHandler(); + + void LayoutBoxes(); + void LayoutColumns(); + + void UpdateAccessibility(); + void UpdateTextAccessibility(const RefPtr& node, const RefPtr& text); + void UpdateButtonAccessibility(const RefPtr& node, const RefPtr& button); + void UpdateSwitchAccessibility(const RefPtr& node, const RefPtr& renderSwitch); + // used for inspector node in PC preview + void UpdatePickerDialogAccessibility(const RefPtr& node, const RefPtr& box); + + void SetTriangleHandler(); + void HandleTriangleClick(bool value); + + bool switchHandlerSetted_ = false; + bool hasLayout_ = false; + + std::function onCancelCallback_; + std::function onChangeCallback_; + std::function onColumnChangeCallback_; + + RefPtr title_; + RefPtr triangle_; + RefPtr lunarDisplay_; + RefPtr buttonsDisplay_; + RefPtr stack_; + RefPtr outBox_; + RefPtr cancel_; + RefPtr ok_; + RefPtr switch_; + RefPtr lunarText_; + RefPtr rawDetect_ = AceType::MakeRefPtr(); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_RENDER_PICKER_BASE_H diff --git a/frameworks/core/components/picker/render_picker_column.cpp b/frameworks/core/components/picker/render_picker_column.cpp new file mode 100644 index 00000000..dd098a40 --- /dev/null +++ b/frameworks/core/components/picker/render_picker_column.cpp @@ -0,0 +1,637 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/picker/render_picker_column.h" + +#include "base/log/event_report.h" + +namespace OHOS::Ace { +namespace { + +constexpr double PICKER_ROTATION_SENSITIVITY_NORMAL = 0.6; + +} + +void RenderPickerColumn::Update(const RefPtr& component) +{ + auto column = AceType::DynamicCast(component); + if (!column) { + LOGE("input component is incorrect type or null."); + EventReport::SendRenderException(RenderExcepType::RENDER_COMPONENT_ERR); + return; + } + + auto theme = column->GetTheme(); + if (!theme) { + LOGE("theme of component is null."); + EventReport::SendComponentException(ComponentExcepType::GET_THEME_ERR); + return; + } + + auto toss = column->GetToss(); + if (!toss) { + return; + } + + data_ = column; + toss->SetColumn(AceType::WeakClaim(this)); + toss->SetPipelineContext(GetContext()); + jumpInterval_ = theme->GetJumpInterval(); + columnMargin_ = theme->GetColumnIntervalMargin(); + rotateInterval_ = theme->GetRotateInterval(); + if (!vibrator_) { + auto context = context_.Upgrade(); + if (context) { + vibrator_ = VibratorProxy::GetInstance().GetVibrator(context->GetTaskExecutor()); + } + } + MarkNeedLayout(); +} + +bool RenderPickerColumn::HandleFinished(bool success) +{ + if (!data_) { + LOGE("data component is null."); + return false; + } + + if (!data_->GetInDialog()) { + return false; + } + + data_->HandleFinishCallback(success); + return true; +} + +void RenderPickerColumn::HandleFocus(bool focus) +{ + focused_ = focus; + rotateAngle_ = 0.0; + for (const auto& option : options_) { + if (!option->GetSelected()) { + continue; + } + option->UpdateFocus(focus); + break; + } +} + +std::string RenderPickerColumn::GetColumnTag() const +{ + if (!data_) { + LOGE("data component is null."); + return ""; + } + + return data_->GetColumnTag(); +} + +uint32_t RenderPickerColumn::GetWidthRatio() const +{ + if (!data_) { + LOGE("data component is null."); + return 1; // default width ratio is 1:1 + } + + return data_->GetWidthRatio(); +} + +void RenderPickerColumn::OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) +{ + if (!rawRecognizer_) { + rawRecognizer_ = AceType::MakeRefPtr(); + auto weak = AceType::WeakClaim(this); + rawRecognizer_->SetOnTouchDown([weak](const TouchEventInfo& info) { + auto refPtr = weak.Upgrade(); + if (refPtr) { + refPtr->HandleDragStart(info); + } + }); + rawRecognizer_->SetOnTouchMove([weak](const TouchEventInfo& info) { + auto refPtr = weak.Upgrade(); + if (refPtr) { + refPtr->HandleDragMove(info); + } + }); + rawRecognizer_->SetOnTouchUp([weak](const TouchEventInfo& info) { + auto refPtr = weak.Upgrade(); + if (refPtr) { + refPtr->HandleDragEnd(info); + } + }); + rawRecognizer_->SetOnTouchCancel([weak](const TouchEventInfo& info) { + auto refPtr = weak.Upgrade(); + if (refPtr) { + refPtr->HandleDragEnd(info); + } + }); + } + + if (!dragRecognizer_) { + dragRecognizer_ = AceType::MakeRefPtr(); + } + + result.emplace_back(rawRecognizer_); + result.emplace_back(dragRecognizer_); +} + +bool RenderPickerColumn::InnerHandleScroll(bool isDown) +{ + if (!data_ || !data_->GetOptionCount()) { + LOGE("options is empty."); + return false; + } + + if (vibrator_) { + vibrator_->Vibrate(10); // use 10 which is just ok. + } + + uint32_t totalOptionCount = data_->GetOptionCount(); + uint32_t currentIndex = data_->GetCurrentIndex(); + if (isDown) { + currentIndex = (totalOptionCount + currentIndex + 1) % totalOptionCount; // index add one + } else { + currentIndex = (totalOptionCount + currentIndex - 1) % totalOptionCount; // index reduce one + } + data_->SetCurrentIndex(currentIndex); + FlushCurrentOptions(); + data_->HandleChangeCallback(isDown, true); + return true; +} + +bool RenderPickerColumn::RotationTest(const RotationEvent& event) +{ + if (!focused_) { + return false; + } + + rotateAngle_ += event.value * PICKER_ROTATION_SENSITIVITY_NORMAL; + if (rotateAngle_ > rotateInterval_) { + HandleScroll(false); + rotateAngle_ = 0.0; + return true; + } + + if (rotateAngle_ < 0 - rotateInterval_) { + HandleScroll(true); + rotateAngle_ = 0.0; + return true; + } + + return true; +} + +void RenderPickerColumn::PerformLayout() +{ + double value = NormalizeToPx(jumpInterval_); + jumpInterval_ = Dimension(value, DimensionUnit::PX); + value = NormalizeToPx(columnMargin_); + columnMargin_ = Dimension(value, DimensionUnit::PX); + if (!clip_ || !column_) { + LOGE("can not get render of child column or clip."); + return; + } + + double x = columnMargin_.Value() / 2.0; // left and right margin is half of it + double y = 0.0; + if (GetLayoutParam().GetMinSize() == GetLayoutParam().GetMaxSize()) { + auto size = GetLayoutParam().GetMaxSize(); + SetLayoutSize(size); + column_->Layout(LayoutParam()); + y = (column_->GetLayoutSize().Height() - size.Height()) / 2.0; // center position + if (LessNotEqual(y, 0)) { + y = 0.0; + } + clip_->SetHeight(size.Height()); + size.SetWidth(size.Width() - columnMargin_.Value()); + size.SetHeight(size.Height() + y); + clip_->SetOffsetY(y); + clip_->SetPosition(Offset(x, 0.0 - y)); + LayoutParam layout; + layout.SetFixedSize(size); + clip_->Layout(layout); + } else { + double fixHeight = (data_ ? NormalizeToPx(data_->GetFixHeight()) : 0.0); + clip_->SetPosition(Offset(x, y)); + if (!NearZero(fixHeight)) { + auto layout = GetLayoutParam(); + auto max = layout.GetMaxSize(); + auto min = layout.GetMinSize(); + max.SetHeight(fixHeight); + min.SetHeight(fixHeight); + layout.SetMaxSize(max); + layout.SetMinSize(min); + clip_->Layout(layout); + } else if (NearZero(adjustHeight_)) { + clip_->Layout(LayoutParam()); + } else { + auto layout = GetLayoutParam(); + auto maxSize = layout.GetMaxSize(); + maxSize.SetHeight(maxSize.Height() - adjustHeight_); + layout.SetMaxSize(maxSize); + clip_->Layout(layout); + } + auto size = clip_->GetLayoutSize(); + size.SetWidth(size.Width() + columnMargin_.Value()); + SetLayoutSize(size); + } + + LayoutSplitter(); + CreateAnimation(); +} + +void RenderPickerColumn::LayoutSplitter() +{ + if (!splitter_) { + return; + } + + auto size = GetLayoutSize(); + splitter_->Layout(LayoutParam()); + double x = size.Width() - splitter_->GetLayoutSize().Width() / 2.0; // place center of right. + double y = (size.Height() - splitter_->GetLayoutSize().Height()) / 2.0; // place center + splitter_->SetPosition(Offset(x, y)); +} + +void RenderPickerColumn::UpdateAccessibility() +{ + auto pipeline = context_.Upgrade(); + if (!pipeline) { + LOGE("pipeline is null."); + return; + } + auto manager = pipeline->GetAccessibilityManager(); + if (!manager || data_->GetNodeId() < 0) { + LOGE("accessibility manager is null or column node id is invalidate."); + return; + } + auto node = manager->GetAccessibilityNodeById(data_->GetNodeId()); + if (!node) { + LOGE("can not get accessibility node by id"); + return; + } + + node->SetText(data_->GetPrefix() + data_->GetCurrentText() + data_->GetSuffix()); + node->SetFocusableState(true); + node->SetFocusedState(focused_); + node->SetScrollableState(true); + auto viewScale = pipeline->GetViewScale(); + auto leftTop = GetGlobalOffset(); + node->SetLeft(leftTop.GetX() * viewScale); + node->SetTop(leftTop.GetY() * viewScale); + auto size = GetLayoutSize(); + node->SetWidth(size.Width() * viewScale); + node->SetHeight(size.Height() * viewScale); + if (!nodeHandlerSetted_) { + nodeHandlerSetted_ = true; + node->AddSupportAction(AceAction::ACTION_SCROLL_BACKWARD); + node->AddSupportAction(AceAction::ACTION_SCROLL_FORWARD); + node->AddSupportAction(AceAction::ACTION_FOCUS); + node->SetActionScrollForward([weak = WeakClaim(this)]() { + auto pickerColumn = weak.Upgrade(); + if (pickerColumn) { + pickerColumn->HandleScroll(true); + } + return true; + }); + node->SetActionScrollBackward([weak = WeakClaim(this)]() { + auto pickerColumn = weak.Upgrade(); + if (pickerColumn) { + pickerColumn->HandleScroll(false); + } + return true; + }); + node->SetActionFocusImpl([weak = WeakClaim(this)]() { + auto pickerColumn = weak.Upgrade(); + if (pickerColumn) { + pickerColumn->HandleFocus(true); + } + }); + } +} + +void RenderPickerColumn::HandleDragStart(const TouchEventInfo& info) +{ + bool isPhone = SystemProperties::GetDeviceType() == DeviceType::PHONE; + if (data_ && !isPhone) { + data_->HandleRequestFocus(); + } + + if (info.GetTouches().empty()) { + LOGE("touches is empty."); + return; + } + + if (!data_ || !data_->GetToss()) { + return; + } + + auto toss = data_->GetToss(); + yOffset_ = info.GetTouches().back().GetGlobalLocation().GetY(); + toss->SetStart(yOffset_); + yLast_ = yOffset_; + pressed_ = true; +} + +void RenderPickerColumn::HandleDragMove(const TouchEventInfo& info) +{ + if (info.GetTouches().empty()) { + LOGE("touches is empty."); + return; + } + + if (!pressed_) { + LOGE("not pressed."); + return; + } + + if (!data_ || !data_->GetToss()) { + return; + } + + auto toss = data_->GetToss(); + double y = info.GetTouches().back().GetGlobalLocation().GetY(); + if (NearEqual(y, yLast_, 1.0)) { // if changing less than 1.0, no need to handle + return; + } + toss->SetEnd(y); + UpdatePositionY(y); +} + +void RenderPickerColumn::UpdatePositionY(double y) +{ + yLast_ = y; + double dragDelta = yLast_ - yOffset_; + if (!CanMove(LessNotEqual(dragDelta, 0))) { + return; + } + // the abs of drag delta is less than jump interval. + if (LessNotEqual(0.0 - jumpInterval_.Value(), dragDelta) && LessNotEqual(dragDelta, jumpInterval_.Value())) { + ScrollOption(dragDelta); + return; + } + + InnerHandleScroll(LessNotEqual(dragDelta, 0.0)); + double jumpDelta = (LessNotEqual(dragDelta, 0.0) ? jumpInterval_.Value() : 0.0 - jumpInterval_.Value()); + ScrollOption(jumpDelta); + yOffset_ = y - jumpDelta; +} + +void RenderPickerColumn::UpdateToss(double y) +{ + UpdatePositionY(y); +} + +void RenderPickerColumn::TossStoped() +{ + yOffset_ = 0.0; + yLast_ = 0.0; + ScrollOption(0.0); +} + +void RenderPickerColumn::HandleDragEnd(const TouchEventInfo& info) +{ + pressed_ = false; + + if (!data_ || !data_->GetToss()) { + return; + } + + auto toss = data_->GetToss(); + if (!NotLoopOptions() && toss->Play()) { + return; + } + + yOffset_ = 0.0; + yLast_ = 0.0; + + if (!animationCreated_) { + ScrollOption(0.0); + } else { + auto curve = CreateAnimation(scrollDelta_, 0.0); + fromController_->ClearInterpolators(); + fromController_->AddInterpolator(curve); + fromController_->Play(); + } +} + +void RenderPickerColumn::UpdateRenders() +{ + ClearRenders(); + GetRenders(); +} + +void RenderPickerColumn::GetRenders(const RefPtr& render) +{ + if (!render) { + return; + } + + if (AceType::InstanceOf(render)) { + auto parent = render->GetParent().Upgrade(); + if (AceType::InstanceOf(parent)) { + splitter_ = AceType::DynamicCast(render); + return; + } + } + + if (AceType::InstanceOf(render)) { + options_.emplace_back(AceType::DynamicCast(render)); + return; + } + + if (AceType::InstanceOf(render)) { + column_ = AceType::DynamicCast(render); + } + + if (AceType::InstanceOf(render)) { + clip_ = AceType::DynamicCast(render); + } + + if (AceType::InstanceOf(render)) { + display_ = AceType::DynamicCast(render); + } + + for (const auto& child : render->GetChildren()) { + GetRenders(child); + } +} + +void RenderPickerColumn::GetRenders() +{ + options_.clear(); + GetRenders(AceType::Claim(this)); +} + +void RenderPickerColumn::ClearRenders() +{ + display_ = nullptr; + column_ = nullptr; + clip_ = nullptr; + splitter_ = nullptr; + options_.clear(); +} + +void RenderPickerColumn::FlushCurrentOptions() +{ + if (!data_) { + LOGE("data is null."); + return; + } + + uint32_t totalOptionCount = data_->GetOptionCount(); + uint32_t currentIndex = data_->GetCurrentIndex(); + currentIndex = currentIndex % totalOptionCount; + uint32_t showOptionCount = options_.size(); + uint32_t selectedIndex = showOptionCount / 2; // the center option is selected. + for (uint32_t index = 0; index < showOptionCount; index++) { + uint32_t optionIndex = (totalOptionCount + currentIndex + index - selectedIndex) % totalOptionCount; + int diffIndex = static_cast(index) - static_cast(selectedIndex); + int virtualIndex = static_cast(currentIndex) + diffIndex; + bool virtualIndexValidate = virtualIndex >= 0 && virtualIndex < static_cast(totalOptionCount); + if (NotLoopOptions() && !virtualIndexValidate) { + options_[index]->UpdateValue(optionIndex, ""); + continue; + } + std::string optionText = + (index != selectedIndex ? data_->GetOption(optionIndex) + : data_->GetPrefix() + data_->GetOption(optionIndex) + data_->GetSuffix()); + options_[index]->UpdateValue(optionIndex, optionText); + } +} + +bool RenderPickerColumn::NotLoopOptions() const +{ + if (!data_) { + LOGE("data is null."); + return false; + } + + uint32_t totalOptionCount = data_->GetOptionCount(); + uint32_t showOptionCount = options_.size(); + return totalOptionCount <= showOptionCount / 2 + 1; // the critical value of loop condition. +} + +bool RenderPickerColumn::CanMove(bool isDown) const +{ + if (!NotLoopOptions()) { + return true; + } + + if (!data_) { + LOGE("data is null."); + return true; + } + + int currentIndex = static_cast(data_->GetCurrentIndex()); + int totalOptionCount = static_cast(data_->GetOptionCount()); + int nextVirtualIndex = isDown ? currentIndex + 1 : currentIndex - 1; + return nextVirtualIndex >= 0 && nextVirtualIndex < totalOptionCount; +} + +void RenderPickerColumn::ScrollOption(double delta) +{ + for (const auto& option : options_) { + option->UpdateScrollDelta(delta); + } + scrollDelta_ = delta; +} + +void RenderPickerColumn::CreateAnimation() +{ + if (animationCreated_) { + return; + } + + toBottomCurve_ = CreateAnimation(0.0, jumpInterval_.Value()); + toTopCurve_ = CreateAnimation(0.0, 0.0 - jumpInterval_.Value()); + toController_ = AceType::MakeRefPtr(context_); + toController_->SetDuration(200); // 200ms for animation that from zero to outer. + auto weak = AceType::WeakClaim(this); + toController_->AddStopListener([weak]() { + auto column = weak.Upgrade(); + if (column) { + column->HandleCurveStopped(); + } else { + LOGE("render picker column is null."); + } + }); + fromBottomCurve_ = CreateAnimation(jumpInterval_.Value(), 0.0); + fromTopCurve_ = CreateAnimation(0.0 - jumpInterval_.Value(), 0.0); + fromController_ = AceType::MakeRefPtr(context_); + fromController_->SetDuration(150); // 150ms for animation that from outer to zero. + animationCreated_ = true; +} + +RefPtr> RenderPickerColumn::CreateAnimation(double from, double to) +{ + auto weak = AceType::WeakClaim(this); + auto curve = AceType::MakeRefPtr>(from, to, Curves::FRICTION); + curve->AddListener(Animation::ValueCallback([weak](double value) { + auto column = weak.Upgrade(); + if (column) { + column->ScrollOption(value); + } else { + LOGE("render picker column is null."); + } + })); + return curve; +} + +void RenderPickerColumn::HandleCurveStopped() +{ + if (!animationCreated_) { + LOGE("animation not created."); + return; + } + + if (NearZero(scrollDelta_)) { + return; + } + + ScrollOption(0.0 - scrollDelta_); + InnerHandleScroll(GreatNotEqual(scrollDelta_, 0.0)); + + fromController_->ClearInterpolators(); + if (LessNotEqual(scrollDelta_, 0.0)) { + fromController_->AddInterpolator(fromTopCurve_); + } else { + fromController_->AddInterpolator(fromBottomCurve_); + } + fromController_->Play(); +} + +bool RenderPickerColumn::HandleScroll(bool isDown) +{ + if (!CanMove(isDown)) { + return false; + } + + if (!animationCreated_) { + return InnerHandleScroll(isDown); + } + + toController_->ClearInterpolators(); + if (isDown) { + toController_->AddInterpolator(toTopCurve_); + } else { + toController_->AddInterpolator(toBottomCurve_); + } + toController_->Play(); + return true; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/picker/render_picker_column.h b/frameworks/core/components/picker/render_picker_column.h new file mode 100644 index 00000000..a240693a --- /dev/null +++ b/frameworks/core/components/picker/render_picker_column.h @@ -0,0 +1,171 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_RENDER_PICKER_COLUMN_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_RENDER_PICKER_COLUMN_H + +#include "core/animation/animator.h" +#include "core/animation/curve_animation.h" +#include "core/common/vibrator/vibrator_proxy.h" +#include "core/components/clip/render_clip.h" +#include "core/components/display/render_display.h" +#include "core/components/flex/render_flex.h" +#include "core/components/picker/picker_column_component.h" +#include "core/components/picker/render_picker_option.h" +#include "core/components/scroll/render_scroll.h" +#include "core/gestures/drag_recognizer.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderPickerColumn : public RenderNode { + DECLARE_ACE_TYPE(RenderPickerColumn, RenderNode); + +public: + static RefPtr Create(); + + void Update(const RefPtr& component) override; + void PerformLayout() override; + + void UpdateOffset(double value) + { + xOffset_ = value; + MarkNeedLayout(); + } + + double GetXOffset() const + { + return xOffset_; + } + + void UpdateColumnOpacity(double value) + { + if (display_) { + display_->UpdateOpacity(static_cast(value)); + } + } + + bool RotationTest(const RotationEvent& event) override; + + bool HandleScroll(bool isDown); + bool HandleFinished(bool success); + void HandleFocus(bool focus); + + std::string GetColumnTag() const; + + uint32_t GetWidthRatio() const; + + void FlushCurrentOptions(); + + void UpdateRenders(); + + void SetAdjustHeight(double value) + { + adjustHeight_ = value; + } + + void OnPaintFinish() override + { + UpdateAccessibility(); + } + + const RefPtr& GetFlexColumn() const + { + return column_; + } + + void UpdateTouchRect() override + { + touchRect_ = GetPaintRect(); + } + + void UpdateToss(double y); + + void TossStoped(); + + Offset GetInnerColumnGlobalOffset() const + { + if (!column_) { + return Offset(); + } + return column_->GetGlobalOffset(); + } + +protected: + void OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) override; + +private: + void HandleDragStart(const TouchEventInfo& info); + void HandleDragMove(const TouchEventInfo& info); + void HandleDragEnd(const TouchEventInfo& info); + void GetRenders(const RefPtr& render); + void GetRenders(); + void ClearRenders(); + void ScrollOption(double delta); + + void CreateAnimation(); + RefPtr> CreateAnimation(double from, double to); + void HandleCurveStopped(); + bool InnerHandleScroll(bool isDown); + + void LayoutSplitter(); + + void UpdateAccessibility(); + + bool NotLoopOptions() const; + bool CanMove(bool isDown) const; + + void UpdatePositionY(double y); + + RefPtr clip_; + RefPtr column_; + RefPtr display_; + RefPtr splitter_; + std::vector> options_; + + RefPtr data_; + + bool focused_ = false; + double rotateAngle_ = 0.0; + double rotateInterval_ = 0.0; + + bool nodeHandlerSetted_ = false; + + RefPtr rawRecognizer_; + RefPtr dragRecognizer_; + double xOffset_ = 0.0; + double yOffset_ = 0.0; + double yLast_ = 0.0; + bool pressed_ = false; + Dimension jumpInterval_; + Dimension columnMargin_; + + double adjustHeight_ = 0.0; + double scrollDelta_ = 0.0; + bool animationCreated_ = false; + RefPtr toController_; + RefPtr fromController_; + RefPtr> toBottomCurve_; + RefPtr> toTopCurve_; + RefPtr> fromBottomCurve_; + RefPtr> fromTopCurve_; + + RefPtr vibrator_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_RENDER_PICKER_COLUMN_H diff --git a/frameworks/core/components/picker/render_picker_option.cpp b/frameworks/core/components/picker/render_picker_option.cpp new file mode 100644 index 00000000..7251b237 --- /dev/null +++ b/frameworks/core/components/picker/render_picker_option.cpp @@ -0,0 +1,517 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/picker/render_picker_option.h" + +#include "base/log/event_report.h" +#include "base/utils/system_properties.h" +#include "core/components/picker/picker_option_component.h" +#include "core/components/text/render_text.h" + +namespace OHOS::Ace { +namespace { + +const Dimension PRESS_INTERVAL = 4.0_vp; +const Dimension PRESS_RADIUS = 8.0_vp; +const Dimension FOCUS_AUTO_DIFF = 2.0_vp; +const Dimension FOCUS_RADIUS_AUTO_DIFF = 3.0_vp; +const Color PRESS_COLOR(0x19000000); +const Color HOVER_COLOR(0x0C000000); + +} // namespace + +RenderPickerOption::RenderPickerOption() +{ + if (SystemProperties::GetDeviceType() != DeviceType::PHONE) { + return; + } + + pressDecoration_ = AceType::MakeRefPtr(); + pressDecoration_->SetBackgroundColor(PRESS_COLOR); + pressDecoration_->SetBorderRadius(Radius(PRESS_RADIUS)); + + hoverDecoration_ = AceType::MakeRefPtr(); + hoverDecoration_->SetBackgroundColor(HOVER_COLOR); + hoverDecoration_->SetBorderRadius(Radius(PRESS_RADIUS)); +} + +void RenderPickerOption::Update(const RefPtr& component) +{ + auto option = AceType::DynamicCast(component); + if (!option) { + LOGE("input component is incorrect type or null."); + EventReport::SendRenderException(RenderExcepType::RENDER_COMPONENT_ERR); + return; + } + + auto theme = option->GetTheme(); + if (!theme) { + LOGE("option theme is null."); + EventReport::SendComponentException(ComponentExcepType::GET_THEME_ERR); + return; + } + + if (pressDecoration_) { + pressDecoration_->SetBackgroundColor(theme->GetPressColor()); + } + if (hoverDecoration_) { + hoverDecoration_->SetBackgroundColor(theme->GetHoverColor()); + } + optionSize_ = theme->GetOptionSize(option->GetSelected()); + optionSizeUnit_ = theme->GetOptionSizeUnit(); + optionPadding_ = theme->GetOptionPadding(); + textComponent_ = option->GetTextComponent(); + boxComponent_ = option->GetBoxComponent(); + selectedStyle_ = theme->GetOptionStyle(true, false); + focusStyle_ = theme->GetOptionStyle(true, true); + focusColor_ = theme->GetFocusColor(); + rrectRadius_ = theme->GetFocusRadius(); + selectedDecoration_ = theme->GetOptionDecoration(false); + focusDecoration_ = theme->GetOptionDecoration(true); + index_ = option->GetIndex(); + text_ = option->GetText(); + selected_ = option->GetSelected(); + autoLayout_ = option->GetAutoLayout(); + alignTop_ = option->GetAlignTop(); + alignBottom_ = option->GetAlignBottom(); + MarkNeedLayout(); +} + +bool RenderPickerOption::GetSelected() const +{ + return selected_; +} + +void RenderPickerOption::UpdateValue(uint32_t newIndex, const std::string& newText) +{ + index_ = newIndex; + text_ = newText; + if (!textComponent_) { + LOGE("text component is null in picker option."); + return; + } + textComponent_->SetData(text_); + if (!renderText_) { + LOGE("render text is null in picker option."); + return; + } + if (renderText_->GetTextData() == textComponent_->GetData()) { + return; // needless to update + } + renderText_->Update(textComponent_); +} + +void RenderPickerOption::OnTouchTestHit(const Offset&, const TouchRestrict&, TouchTestResult& result) +{ + if (!selected_ && !autoLayout_) { + return; + } + + if (!pressDetect_) { + pressDetect_ = AceType::MakeRefPtr(context_); + pressDetect_->SetOnPress([weak = AceType::WeakClaim(this)] (const PressInfo&) { + auto refPtr = weak.Upgrade(); + if (!refPtr) { + return; + } + refPtr->StartPressAnimation(true); + }); + pressDetect_->SetOnPressCancel([weak = AceType::WeakClaim(this)] { + auto refPtr = weak.Upgrade(); + if (!refPtr) { + return; + } + refPtr->StartPressAnimation(false); + }); + } + result.emplace_back(pressDetect_); +} + +void RenderPickerOption::OnMouseHoverEnterTest() +{ + if (!selected_ || disabled_) { + return; + } + StartHoverAnimation(true); +} + +void RenderPickerOption::OnMouseHoverExitTest() +{ + if (!selected_ || disabled_) { + return; + } + StartHoverAnimation(false); +} + +void RenderPickerOption::UpdateBackgroundDecoration(const Color& color) +{ + if (!pressDecoration_) { + return; + } + pressDecoration_->SetBackgroundColor(GetEventEffectColor()); + boxComponent_->SetBackDecoration(pressDecoration_); + renderBox_->Update(boxComponent_); + MarkNeedRender(); +} + +void RenderPickerOption::ResetMouseController() +{ + if (!mouseAnimationController_) { + mouseAnimationController_ = AceType::MakeRefPtr(context_); + } + if (mouseAnimationController_->IsRunning()) { + mouseAnimationController_->Stop(); + } + mouseAnimationController_->ClearInterpolators(); + mouseAnimationController_->ClearAllListeners(); +} + +bool RenderPickerOption::ResetHoverAnimation(bool isEnter) +{ + RefPtr theme = GetTheme(); + if (!theme) { + LOGE("picker option theme invalid"); + return false; + } + if (!mouseAnimationController_) { + ResetMouseController(); + } + + auto hoverColor = theme->GetHoverColor(); + Color bgColor = GetEventEffectColor(); + if (selectedDecoration_) { + bgColor = selectedDecoration_->GetBackgroundColor(); + } + RefPtr> animation = AceType::MakeRefPtr>(); + if (isEnter) { + // hover enter + CreateMouseAnimation(animation, bgColor, bgColor.BlendColor(hoverColor)); + animation->SetCurve(Curves::FRICTION); + } else { + // from hover to normal + CreateMouseAnimation(animation, GetEventEffectColor(), bgColor); + if (GetEventEffectColor() == bgColor.BlendColor(hoverColor)) { + animation->SetCurve(Curves::FRICTION); + } else { + animation->SetCurve(Curves::FAST_OUT_SLOW_IN); + } + } + mouseAnimationController_->SetDuration(HOVER_DURATION); + mouseAnimationController_->AddInterpolator(animation); + mouseAnimationController_->SetFillMode(FillMode::FORWARDS); + return true; +} + +bool RenderPickerOption::ResetPressAnimation(bool isDown) +{ + RefPtr theme = GetTheme(); + if (!theme) { + LOGE("picker option theme invalid"); + return false; + } + if (!mouseAnimationController_) { + ResetMouseController(); + } + + auto hoverColor = theme->GetHoverColor(); + auto pressColor = theme->GetPressColor(); + Color bgColor = GetEventEffectColor(); + if (selectedDecoration_) { + bgColor = selectedDecoration_->GetBackgroundColor(); + } + RefPtr> animation = AceType::MakeRefPtr>(); + + if (isDown) { + if (mouseState_ == MouseState::HOVER) { + // from hover to press + CreateMouseAnimation(animation, GetEventEffectColor(), bgColor.BlendColor(pressColor)); + } else { + // from normal to press + CreateMouseAnimation(animation, bgColor, bgColor.BlendColor(pressColor)); + } + } else { + if (mouseState_ == MouseState::HOVER) { + // from press to hover + CreateMouseAnimation(animation, GetEventEffectColor(), bgColor.BlendColor(hoverColor)); + } else { + // from press to normal + CreateMouseAnimation(animation, GetEventEffectColor(), bgColor); + } + } + mouseAnimationController_->SetDuration(PRESS_DURATION); + mouseAnimationController_->AddInterpolator(animation); + mouseAnimationController_->SetFillMode(FillMode::FORWARDS); + return true; +} + +void RenderPickerOption::StartHoverAnimation(bool isEnter) +{ + ResetMouseController(); + SetHoverAndPressCallback([weakNode = AceType::WeakClaim(this)](const Color& color) { + auto node = weakNode.Upgrade(); + if (node) { + node->UpdateBackgroundDecoration(color); + } + }); + if (mouseAnimationController_ && ResetHoverAnimation(isEnter)) { + mouseAnimationController_->Forward(); + } +} + +void RenderPickerOption::StartPressAnimation(bool isDown) +{ + ResetMouseController(); + SetHoverAndPressCallback([weakNode = AceType::WeakClaim(this)](const Color& color) { + auto node = weakNode.Upgrade(); + if (node) { + node->UpdateBackgroundDecoration(color); + } + }); + if (mouseAnimationController_ && ResetPressAnimation(isDown)) { + mouseAnimationController_->Forward(); + } +} + +void RenderPickerOption::UpdateTextFocus(bool focus) +{ + hasTextFocus_ = focus; + + if (renderText_ && textComponent_) { + if (focus) { + textComponent_->SetTextStyle(focusStyle_); + } else { + textComponent_->SetTextStyle(selectedStyle_); + } + renderText_->Update(textComponent_); + } +} + +void RenderPickerOption::UpdatePhoneFocus(bool focus) +{ + if (SystemProperties::GetDeviceType() != DeviceType::PHONE) { + return; + } + + auto pipeline = context_.Upgrade(); + if (!pipeline) { + LOGE("pipeline is null."); + return; + } + + if (focus) { + hasAnimate_ = true; + auto size = realSize_; + auto offset = GetGlobalOffset(); + double radiusValue = NormalizeToPx(PRESS_RADIUS) - NormalizeToPx(FOCUS_RADIUS_AUTO_DIFF); + Radius pxRadius(radiusValue, radiusValue); + double yOffsetDiff = NormalizeToPx(PRESS_INTERVAL) + NormalizeToPx(FOCUS_AUTO_DIFF); + double xOffsetDiff = NormalizeToPx(FOCUS_AUTO_DIFF); + double xSizeDiff = 2.0 * xOffsetDiff; + double ySizeDiff = 2.0 * yOffsetDiff; + size = size - Size(xSizeDiff, ySizeDiff); + offset = offset + Size(xOffsetDiff, yOffsetDiff); + pipeline->ShowFocusAnimation( + RRect::MakeRRect(Rect(Offset(0, 0), size), pxRadius), focusColor_, offset); + } else { + hasAnimate_ = false; + } +} + +void RenderPickerOption::UpdateFocus(bool focus) +{ + if (SystemProperties::GetDeviceType() != DeviceType::TV) { + UpdateTextFocus(focus); + UpdatePhoneFocus(focus); + return; + } + + if (renderText_ && renderBox_ && textComponent_ && boxComponent_ && focusDecoration_ && selectedDecoration_) { + if (focus) { + textComponent_->SetTextStyle(focusStyle_); + boxComponent_->SetBackDecoration(focusDecoration_); + } else { + textComponent_->SetTextStyle(selectedStyle_); + boxComponent_->SetBackDecoration(selectedDecoration_); + } + renderText_->Update(textComponent_); + renderBox_->Update(boxComponent_); + } else { + LOGE("inner params has null."); + } + + auto pipeline = context_.Upgrade(); + if (!pipeline) { + LOGE("pipeline is null."); + return; + } + + if (focus) { + hasAnimate_ = true; + Radius pxRadius(NormalizeToPx(rrectRadius_.GetX()), NormalizeToPx(rrectRadius_.GetY())); + pipeline->ShowFocusAnimation( + RRect::MakeRRect(Rect(Offset(0, 0), realSize_), pxRadius), focusColor_, GetGlobalOffset()); + } else { + hasAnimate_ = false; + } +} + +void RenderPickerOption::RefreshFocus() +{ + if (SystemProperties::GetDeviceType() != DeviceType::TV) { + UpdatePhoneFocus(hasAnimate_); + return; + } + + auto pipeline = context_.Upgrade(); + if (!pipeline) { + LOGE("pipeline is null."); + return; + } + + if (hasAnimate_) { + Radius pxRadius(NormalizeToPx(rrectRadius_.GetX()), NormalizeToPx(rrectRadius_.GetY())); + pipeline->ShowFocusAnimation( + RRect::MakeRRect(Rect(Offset(0, 0), realSize_), pxRadius), focusColor_, GetGlobalOffset()); + } +} + +void RenderPickerOption::UpdateScrollDelta(double delta) +{ + deltaSize_ = delta; + MarkNeedLayout(); +} + +double RenderPickerOption::LayoutBox() +{ + LayoutParam boxLayout; + if (SystemProperties::GetDeviceType() == DeviceType::PHONE && selected_ && !autoLayout_) { + auto pressInterval = NormalizeToPx(PRESS_INTERVAL); + auto boxSize = realSize_; + boxSize.SetHeight(boxSize.Height() - 2.0 * pressInterval); + boxLayout.SetFixedSize(boxSize); + renderBox_->SetPosition(Offset(0.0, pressInterval)); + renderBox_->Layout(boxLayout); + return pressInterval; + } else { + boxLayout.SetFixedSize(realSize_); + renderBox_->SetPosition(Offset(0.0, 0.0)); + renderBox_->Layout(boxLayout); + return 0.0; + } +} + +void RenderPickerOption::PerformLayout() +{ + if (!renderBox_ || !renderText_) { + LOGE("render text or render box is null."); + return; + } + + renderText_->Layout(GetLayoutParam()); + Size textSize = renderText_->GetLayoutSize(); + realPadding_ = NormalizeToPx(Dimension(optionPadding_, optionSizeUnit_)); + + if (autoLayout_) { + realSize_ = renderText_->GetLayoutSize(); + } else { + realSize_.SetWidth(NormalizeToPx(Dimension(optionSize_.Width(), optionSizeUnit_))); + realSize_.SetHeight(NormalizeToPx(Dimension(optionSize_.Height(), optionSizeUnit_))); + } + + if (realSize_.Width() - textSize.Width() < realPadding_) { + realSize_.SetWidth(textSize.Width() + realPadding_); + } + if (realSize_.Height() - textSize.Height() < realPadding_) { + realSize_.SetHeight(textSize.Height() + realPadding_); + } + + double maxWidth = GetLayoutParam().GetMaxSize().Width(); + if (realSize_.Width() > maxWidth) { + realSize_.SetWidth(maxWidth); + } + if (textSize.Width() > maxWidth - realPadding_) { + textSize.SetWidth(maxWidth - realPadding_); + } + + auto pressInterval = LayoutBox(); + + LayoutParam textLayout; + textLayout.SetFixedSize(textSize); + double textX = (realSize_.Width() - textSize.Width()) / 2.0; // place center + if (textComponent_ && textComponent_->GetTextDirection() == TextDirection::RTL) { + textX = realSize_.Width() - realPadding_ / 2.0 - textSize.Width(); // place right; right padding is half + } + double textY = (realSize_.Height() - textSize.Height()) / 2.0; // place center + if (alignTop_) { + textY = 0.0; // place top + } else if (alignBottom_) { + textY = realSize_.Height() - textSize.Height(); // place bottom + } + textY += deltaSize_; // think about delta of scroll action. + textY -= pressInterval; + renderText_->SetPosition(Offset(textX, textY)); + renderText_->Layout(textLayout); + + SetLayoutSize(realSize_); +} + +void RenderPickerOption::OnPaintFinish() +{ + if (!autoLayout_ && !selected_) { + return; + } + + RefreshFocus(); +} + +void RenderPickerOption::UpdateRenders() +{ + ClearRenders(); + GetRenders(); +} + +void RenderPickerOption::GetRenders(const RefPtr& render) +{ + if (!render) { + LOGE("render node is null."); + return; + } + + if (AceType::InstanceOf(render)) { + renderText_ = AceType::DynamicCast(render); + return; + } + + if (AceType::InstanceOf(render)) { + renderBox_ = AceType::DynamicCast(render); + } + + for (const auto& child : render->GetChildren()) { + GetRenders(child); + } +} + +void RenderPickerOption::GetRenders() +{ + GetRenders(AceType::Claim(this)); +} + +void RenderPickerOption::ClearRenders() +{ + renderText_ = nullptr; + renderBox_ = nullptr; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/picker/render_picker_option.h b/frameworks/core/components/picker/render_picker_option.h new file mode 100644 index 00000000..6dd6263b --- /dev/null +++ b/frameworks/core/components/picker/render_picker_option.h @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_RENDER_PICKER_OPTION_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_RENDER_PICKER_OPTION_H + +#include "core/components/box/box_component.h" +#include "core/components/box/render_box.h" +#include "core/components/text/render_text.h" +#include "core/components/text/text_component.h" +#include "core/gestures/press_recognizer.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderPickerOption : public RenderNode { + DECLARE_ACE_TYPE(RenderPickerOption, RenderNode); + +public: + RenderPickerOption(); + ~RenderPickerOption() override = default; + + void Update(const RefPtr& component) override; + void PerformLayout() override; + void OnPaintFinish() override; + + bool GetSelected() const; + + void UpdateValue(uint32_t newIndex, const std::string& newText); + void UpdateFocus(bool focus); + void UpdatePhoneFocus(bool focus); + void UpdateTextFocus(bool focus); + void UpdateScrollDelta(double delta); + void UpdateRenders(); + + const Color& GetFocusAnimationColor() const + { + return focusColor_; + } + + Color GetFocusBackColor() const + { + if (!focusDecoration_) { + return Color::WHITE; + } + return focusDecoration_->GetBackgroundColor(); + } + + Color GetNormalBackColor() const + { + if (!selectedDecoration_) { + return Color::TRANSPARENT; + } + return selectedDecoration_->GetBackgroundColor(); + } + +protected: + void OnTouchTestHit(const Offset&, const TouchRestrict&, TouchTestResult& result) override; + void OnMouseHoverEnterTest() override; + void OnMouseHoverExitTest() override; + void StartHoverAnimation(bool isEnter); + void StartPressAnimation(bool isDown); + bool ResetHoverAnimation(bool isEnter); + bool ResetPressAnimation(bool isDown); + void ResetMouseController(); + void UpdateBackgroundDecoration(const Color& color); + +private: + double LayoutBox(); + void GetRenders(const RefPtr& render); + void GetRenders(); + void ClearRenders(); + void RefreshFocus(); + + Size optionSize_; + DimensionUnit optionSizeUnit_ = DimensionUnit::PX; + Size realSize_; + double deltaSize_ = 0.0; + double optionPadding_ = 0.0; + double realPadding_ = 0.0; + + TextStyle selectedStyle_; + TextStyle focusStyle_; + Color focusColor_; + Radius rrectRadius_; + + RefPtr selectedDecoration_; + RefPtr focusDecoration_; + RefPtr pressDecoration_; + RefPtr hoverDecoration_; + RefPtr textComponent_; + RefPtr renderText_; + RefPtr boxComponent_; + RefPtr renderBox_; + RefPtr mouseAnimationController_; + RefPtr pressDetect_; + + uint32_t index_ = 0; + std::string text_; + bool selected_ = false; + bool autoLayout_ = false; + bool hasAnimate_ = false; + bool alignTop_ = false; + bool alignBottom_ = false; + bool hasTextFocus_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_RENDER_PICKER_OPTION_H diff --git a/frameworks/core/components/picker/render_picker_value.cpp b/frameworks/core/components/picker/render_picker_value.cpp new file mode 100644 index 00000000..f68eb459 --- /dev/null +++ b/frameworks/core/components/picker/render_picker_value.cpp @@ -0,0 +1,139 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/picker/render_picker_value.h" + +#include "base/utils/system_properties.h" +#include "core/components/picker/render_picker_option.h" +#include "core/components/stack/stack_element.h" + +namespace OHOS::Ace { + +RenderPickerValue::RenderPickerValue(const PickerValueCallback& clickCallback) +{ + clickCallback_ = clickCallback; + clickRecognizer_ = AceType::MakeRefPtr(); + clickRecognizer_->SetOnClick([weak = WeakClaim(this)](const ClickInfo&) { + auto refPtr = weak.Upgrade(); + if (refPtr) { + refPtr->HandleClickCallback(); + } + }); +} + +void RenderPickerValue::PerformLayout() +{ + if (GetChildren().empty()) { + LOGE("No child."); + return; + } + + auto child = GetChildren().front(); + child->Layout(GetLayoutParam()); + SetLayoutSize(child->GetLayoutSize()); +} + +void RenderPickerValue::HandleClickCallback() const +{ + if (!clickCallback_) { + LOGE("click callback is null."); + return; + } + clickCallback_(); +} + +void RenderPickerValue::HandleFocus(const RefPtr& box, bool focus) +{ + if (!box) { + LOGE("box is null"); + return; + } + + box_ = box; + focus_ = focus; + HandleTextFocus(focus); + auto boxOldColor = box->GetColor(); + if (focus) { + if (boxOldColor != focusBackColor_) { + box->SetColor(focusBackColor_, true); + } + } else { + if (boxOldColor != normalBackColor_) { + box->SetColor(normalBackColor_, true); + } + } + HandleAnimation(box); +} + +void RenderPickerValue::HandleTextFocus(bool focus) +{ + if (GetChildren().empty()) { + LOGE("No child."); + return; + } + + auto option = AceType::DynamicCast(GetChildren().front()); + if (!option) { + LOGE("get render picker option failed!"); + return; + } + + focusBackColor_ = option->GetFocusBackColor(); + focusAnimationColor_ = option->GetFocusAnimationColor(); + normalBackColor_ = option->GetNormalBackColor(); + if (SystemProperties::GetDeviceType() != DeviceType::TV) { + focusBackColor_ = normalBackColor_; + } + if (SystemProperties::GetDeviceType() != DeviceType::PHONE) { + option->UpdateTextFocus(focus); + } +} + +void RenderPickerValue::HandleAnimation(const RefPtr& box) +{ + if (!box) { + LOGE("box is null"); + return; + } + + auto pipeline = context_.Upgrade(); + if (!pipeline) { + LOGE("pipeline is null."); + return; + } + + box_ = box; + if (!focus_) { + LOGD("cancel focus of picker value."); + } else { + auto width = box->GetLayoutSize().Width(); + auto height = box->GetLayoutSize().Height(); + RRect rrect; + rrect.SetRect(Rect(0, 0, width, height)); + auto back = box->GetBackDecoration(); + if (back) { + auto border = back->GetBorder(); + Corner corner; + corner.topLeftRadius = border.TopLeftRadius(); + corner.topRightRadius = border.TopRightRadius(); + corner.bottomRightRadius = border.BottomRightRadius(); + corner.bottomLeftRadius = border.BottomLeftRadius(); + rrect.SetCorner(corner); + } + pipeline->ShowFocusAnimation(rrect, focusAnimationColor_, box->GetGlobalOffset()); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/picker/render_picker_value.h b/frameworks/core/components/picker/render_picker_value.h new file mode 100644 index 00000000..61c50d3c --- /dev/null +++ b/frameworks/core/components/picker/render_picker_value.h @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_RENDER_PICKER_VALUE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_RENDER_PICKER_VALUE_H + +#include + +#include "core/components/box/render_box.h" +#include "core/gestures/click_recognizer.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +using PickerValueCallback = std::function; + +class RenderPickerValue : public RenderNode { + DECLARE_ACE_TYPE(RenderPickerValue, RenderNode); + +public: + explicit RenderPickerValue(const PickerValueCallback& clickCallback); + ~RenderPickerValue() override = default; + + void Update(const RefPtr& component) override {} + + void PerformLayout() override; + + void OnPaintFinish() override + { + if (focus_) { + HandleAnimation(); + } + } + + void HandleClickCallback() const; + + void HandleFocus(const RefPtr& box) + { + HandleFocus(box, focus_); + } + + void HandleFocus(const RefPtr& box, bool focus); + + void HandleTextFocus(bool focus); + + void HandleAnimation() + { + HandleAnimation(box_); + } + + void HandleAnimation(const RefPtr& box); + +protected: + void OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) override + { + result.emplace_back(clickRecognizer_); + } + +private: + PickerValueCallback clickCallback_; + RefPtr clickRecognizer_; + RefPtr box_; + bool focus_ = false; + Color normalBackColor_; + Color focusBackColor_; + Color focusAnimationColor_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_RENDER_PICKER_VALUE_H diff --git a/frameworks/core/components/picker/toss_animation_controller.cpp b/frameworks/core/components/picker/toss_animation_controller.cpp new file mode 100644 index 00000000..3a243f35 --- /dev/null +++ b/frameworks/core/components/picker/toss_animation_controller.cpp @@ -0,0 +1,126 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "toss_animation_controller.h" + +#include + +#include "core/components/picker/render_picker_column.h" + +namespace OHOS::Ace { +namespace { + +constexpr double MIN_TIME = 1.0; +constexpr int MIN_DURATION = 250; +constexpr double DRAG = 0.995; +constexpr double ZERO_SPEED = 0.5; + +} // namespace + + +void TossAnimationController::SetStart(double y) +{ + if (toss_) { + toss_->Stop(); + } + + yStart_ = y; + timeStart_ = GetCurrentTime(); +} + +void TossAnimationController::SetEnd(double y) +{ + if (toss_) { + toss_->Stop(); + } + + yEnd_ = y; + timeEnd_ = GetCurrentTime(); +} + +bool TossAnimationController::Play() +{ + auto timeDiff = timeEnd_ - timeStart_; + if (timeDiff < MIN_TIME) { + LOGW("toss time[%{public}lf] too small.", timeDiff); + return false; + } + + double speed = (yEnd_ - yStart_) / timeDiff; + if (NearZero(speed)) { + LOGW("toss speed is zero"); + return false; + } + + double zeroSpeed = (speed > 0 ? ZERO_SPEED : 0.0 - ZERO_SPEED); + double time = zeroSpeed / speed; + time = std::log(time) / std::log(DRAG); + if (time < MIN_DURATION) { + LOGW("toss time[%{public}lf] to small.", time); + return false; + } + + LOGD("toss play speed: %{public}lf, time: %{public}lf", speed, time); + speed_ = speed; + int nTime = static_cast(time); + auto weak = AceType::WeakClaim(this); + toss_ = AceType::MakeRefPtr(pipe_, 0.0, time, 0, nTime, Curves::LINEAR, [weak](double value) { + auto ref = weak.Upgrade(); + if (!ref) { + LOGE("toss ref is null."); + return; + } + auto column = AceType::DynamicCast(ref->column_.Upgrade()); + if (!column) { + LOGE("toss column is null."); + return; + } + double distance = std::pow(DRAG, value); + distance = (distance - 1.0) * ref->speed_ / std::log(DRAG); + column->UpdateToss(ref->yEnd_ + distance); + }); + toss_->AddStopCallback([weak] { + auto ref = weak.Upgrade(); + if (!ref) { + LOGE("toss ref is null when stop."); + return; + } + auto column = AceType::DynamicCast(ref->column_.Upgrade()); + if (!column) { + LOGE("column is null when stop."); + return; + } + column->TossStoped(); + }); + toss_->Play(); + return true; +} + +double TossAnimationController::GetCurrentTime() const +{ + struct timeval tv = { 0 }; + int result = gettimeofday(&tv, nullptr); + if (result != 0) { + LOGE("toss gettimeofday failed."); + return 0.0; + } + + double sec = static_cast(tv.tv_sec); + double msec = static_cast(tv.tv_usec / 1000.0); // usec / 1000 is msec + return (sec * 1000 + msec); // sec * 1000 is msec +} + +} // namespace OHOS::Ace + diff --git a/frameworks/core/components/picker/toss_animation_controller.h b/frameworks/core/components/picker/toss_animation_controller.h new file mode 100644 index 00000000..7ed413f4 --- /dev/null +++ b/frameworks/core/components/picker/toss_animation_controller.h @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_TOSS_ANIMATION_CONTROLLER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_TOSS_ANIMATION_CONTROLLER_H + +#include "core/components/picker/picker_animation.h" +#include "core/pipeline/base/render_node.h" +namespace OHOS::Ace { + +class TossAnimationController : public virtual AceType { + DECLARE_ACE_TYPE(TossAnimationController, AceType); + +public: + TossAnimationController() = default; + ~TossAnimationController() = default; + + void SetColumn(const WeakPtr& value) + { + column_ = value; + } + + void SetPipelineContext(const WeakPtr& value) + { + pipe_ = value; + } + + void SetStart(double y); + + void SetEnd(double y); + + bool Play(); + +private: + double GetCurrentTime() const; + + double yStart_ = 0.0; + double yEnd_ = 0.0; + double timeStart_ = 0.0; + double timeEnd_ = 0.0; + double speed_ = 0.0; + + RefPtr toss_; + WeakPtr column_; + WeakPtr pipe_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PICKER_TOSS_ANIMATION_CONTROLLER_H diff --git a/frameworks/core/components/piece/BUILD.gn b/frameworks/core/components/piece/BUILD.gn new file mode 100644 index 00000000..9649d9a6 --- /dev/null +++ b/frameworks/core/components/piece/BUILD.gn @@ -0,0 +1,23 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("piece") { + sources = [ + "flutter_render_piece.cpp", + "piece_component.cpp", + "piece_element.cpp", + "render_piece.cpp", + ] +} diff --git a/frameworks/core/components/piece/flutter_render_piece.cpp b/frameworks/core/components/piece/flutter_render_piece.cpp new file mode 100644 index 00000000..b40351da --- /dev/null +++ b/frameworks/core/components/piece/flutter_render_piece.cpp @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/piece/flutter_render_piece.h" + +#include "third_party/skia/include/core/SkCanvas.h" + +#include "core/components/box/render_box.h" +#include "core/pipeline/base/scoped_canvas_state.h" + +namespace OHOS::Ace { + +RefPtr RenderPiece::Create() +{ + return AceType::MakeRefPtr(); +} + +void FlutterRenderPiece::Paint(RenderContext& context, const Offset& offset) +{ + RenderNode::Paint(context, offset); + + // Paint overlay when hover. + if (mouseState_ != MouseState::HOVER) { + return; + } + auto parent = GetParent().Upgrade(); + Size pieceSize = GetLayoutSize(); + Offset pieceOffset = GetPosition(); + if (parent && AceType::DynamicCast(parent)) { + pieceSize = parent->GetLayoutSize(); + pieceOffset = Offset(); + const auto& context = context_.Upgrade(); + if (context) { + pieceSize -= margin_.GetLayoutSizeInPx(context->GetDipScale()); + pieceOffset += margin_.GetOffsetInPx(context->GetDipScale()); + } + } + auto canvas = ScopedCanvas::Create(context); + if (!canvas) { + LOGE("canvas fetch failed"); + return; + } + SkCanvas* skCanvas = canvas->canvas(); + if (skCanvas == nullptr) { + return; + } + SkPaint paint; + skCanvas->save(); + paint.setColor(hoverColor_.GetValue()); + Rect pieceRect(pieceOffset + offset - GetPosition(), pieceSize); + skCanvas->drawRRect(MakeRRect(pieceRect.GetOffset(), pieceRect.GetSize(), border_), paint); + skCanvas->restore(); +} + +SkRRect FlutterRenderPiece::MakeRRect(const Offset& offset, const Size& size, const Border& border) const +{ + SkRect rect = SkRect::MakeXYWH(offset.GetX(), offset.GetY(), size.Width(), size.Height()); + SkRRect rrect = SkRRect::MakeEmpty(); + SkVector rectRadii[4] = { { 0.0, 0.0 }, { 0.0, 0.0 }, { 0.0, 0.0 }, { 0.0, 0.0 } }; + rectRadii[SkRRect::kUpperLeft_Corner] = + SkPoint::Make(NormalizeToPx(border.TopLeftRadius().GetX()), NormalizeToPx(border.TopLeftRadius().GetY())); + rectRadii[SkRRect::kUpperRight_Corner] = + SkPoint::Make(NormalizeToPx(border.TopRightRadius().GetX()), NormalizeToPx(border.TopRightRadius().GetY())); + rectRadii[SkRRect::kLowerRight_Corner] = SkPoint::Make( + NormalizeToPx(border.BottomRightRadius().GetX()), NormalizeToPx(border.BottomRightRadius().GetY())); + rectRadii[SkRRect::kLowerLeft_Corner] = + SkPoint::Make(NormalizeToPx(border.BottomLeftRadius().GetX()), NormalizeToPx(border.BottomLeftRadius().GetY())); + rrect.setRectRadii(rect, rectRadii); + return rrect; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/piece/flutter_render_piece.h b/frameworks/core/components/piece/flutter_render_piece.h new file mode 100644 index 00000000..110d6e7b --- /dev/null +++ b/frameworks/core/components/piece/flutter_render_piece.h @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PIECE_FLUTTER_RENDER_PIECE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PIECE_FLUTTER_RENDER_PIECE_H + +#include "core/components/piece/render_piece.h" +#include "core/pipeline/base/flutter_render_context.h" + +namespace OHOS::Ace { + +class FlutterRenderPiece : public RenderPiece { + DECLARE_ACE_TYPE(FlutterRenderPiece, RenderPiece); + +public: + void Paint(RenderContext& context, const Offset& offset) override; + +private: + SkRRect MakeRRect(const Offset& offset, const Size& size, const Border& border) const; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PIECE_FLUTTER_RENDER_PIECE_H diff --git a/frameworks/core/components/piece/piece_component.cpp b/frameworks/core/components/piece/piece_component.cpp new file mode 100644 index 00000000..e576d99f --- /dev/null +++ b/frameworks/core/components/piece/piece_component.cpp @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/piece/piece_component.h" + +#include "core/components/flex/flex_component.h" +#include "core/components/flex/flex_item_component.h" +#include "core/components/gesture_listener/gesture_listener_component.h" +#include "core/components/image/image_component.h" +#include "core/components/padding/padding_component.h" +#include "core/components/piece/piece_element.h" +#include "core/components/piece/render_piece.h" + +namespace OHOS::Ace { + +RefPtr PieceComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +RefPtr PieceComponent::CreateRenderNode() +{ + return RenderPiece::Create(); +} + +RefPtr PieceComponent::BuildChild() +{ + if (content_.empty()) { + return nullptr; + } + std::list> rowChildren; + auto row = AceType::MakeRefPtr(FlexAlign::FLEX_START, FlexAlign::CENTER, rowChildren); + row->SetMainAxisSize(MainAxisSize::MIN); + auto text = MakeRefPtr(content_); + text->SetTextStyle(textStyle_); + text->SetFocusColor(textStyle_.GetTextColor()); + auto textFlex = MakeRefPtr(0, 1, 0.0, text); + row->AppendChild(textFlex); + if (showDelete_) { + RefPtr image = + icon_.empty() ? MakeRefPtr(iconResource_) : MakeRefPtr(icon_); + image->SetWidth(iconSize_); + image->SetHeight(iconSize_); + auto gestureListener = MakeRefPtr(); + gestureListener->SetOnClickId(onDelete_); + gestureListener->SetChild(image); + auto padding = MakeRefPtr(); + if (GetTextDirection() == TextDirection::RTL) { + padding->SetPadding(Edge(0.0_vp, 0.0_vp, interval_, 0.0_vp)); + } else { + padding->SetPadding(Edge(interval_, 0.0_vp, 0.0_vp, 0.0_vp)); + } + padding->SetChild(gestureListener); + auto iconFlex = MakeRefPtr(0, 0, 0.0, padding); + row->AppendChild(iconFlex); + } + row->SetTextDirection(GetTextDirection()); + return row; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/piece/piece_component.h b/frameworks/core/components/piece/piece_component.h new file mode 100644 index 00000000..8c31f8cc --- /dev/null +++ b/frameworks/core/components/piece/piece_component.h @@ -0,0 +1,140 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PIECE_PIECE_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PIECE_PIECE_COMPONENT_H + +#include "base/resource/internal_resource.h" +#include "core/components/common/properties/border.h" +#include "core/components/common/properties/edge.h" +#include "core/components/piece/piece_element.h" +#include "core/components/text/text_component.h" +#include "core/pipeline/base/component.h" +#include "core/pipeline/base/sole_child_component.h" + +namespace OHOS::Ace { + +class PieceComponent : public SoleChildComponent { + DECLARE_ACE_TYPE(PieceComponent, SoleChildComponent); + +public: + PieceComponent() = default; + ~PieceComponent() override = default; + + RefPtr CreateElement() override; + RefPtr CreateRenderNode() override; + + RefPtr BuildChild(); + + const std::string& GetContent() const + { + return content_; + } + void SetContent(const std::string& content) + { + content_ = content; + } + + const std::string& GetIcon() const + { + return icon_; + } + void SetIcon(const std::string& icon) + { + icon_ = icon; + } + + void SetTextStyle(const TextStyle& textStyle) + { + textStyle_ = textStyle; + } + + void SetInterval(const Dimension& interval) + { + interval_ = interval; + } + + void SetIconResource(InternalResource::ResourceId iconResource) + { + iconResource_ = iconResource; + } + + void SetIconSize(const Dimension& iconSize) + { + iconSize_ = iconSize; + } + + const EventMarker& GetOnDelete() const + { + return onDelete_; + } + void SetOnDelete(const EventMarker& onDelete) + { + onDelete_ = onDelete; + } + + bool ShowDelete() const + { + return showDelete_; + } + void SetShowDelete(bool showDelete) + { + showDelete_ = showDelete; + } + + const Edge& GetMargin() const + { + return margin_; + } + void SetMargin(const Edge& margin) + { + margin_ = margin; + } + + const Border& GetBorder() const + { + return border_; + } + void SetBorder(const Border& border) + { + border_ = border; + } + + const Color& GetHoverColor() const + { + return hoverColor_; + } + void SetHoverColor(const Color& hoverColor) + { + hoverColor_ = hoverColor; + } + +private: + bool showDelete_ = false; + std::string content_; + std::string icon_; + Dimension interval_; // Interval between text and icon. + Dimension iconSize_; + TextStyle textStyle_; + EventMarker onDelete_; + Edge margin_; + Border border_; + Color hoverColor_; + InternalResource::ResourceId iconResource_ = InternalResource::ResourceId::NO_ID; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PIECE_PIECE_COMPONENT_H diff --git a/frameworks/core/components/piece/piece_element.cpp b/frameworks/core/components/piece/piece_element.cpp new file mode 100644 index 00000000..70dc91e5 --- /dev/null +++ b/frameworks/core/components/piece/piece_element.cpp @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/piece/piece_element.h" + +#include "core/components/piece/piece_component.h" +#include "core/components/piece/render_piece.h" + +namespace OHOS::Ace { + +void PieceElement::PerformBuild() +{ + RefPtr piece = AceType::DynamicCast(component_); + if (piece) { + const auto& child = children_.empty() ? nullptr : children_.front(); + UpdateChild(child, piece->BuildChild()); + } +} + +void PieceElement::OnFocus() +{ + FocusNode::OnFocus(); + if (renderNode_) { + renderNode_->ChangeStatus(RenderStatus::FOCUS); + } +} + +void PieceElement::OnBlur() +{ + FocusNode::OnBlur(); + if (renderNode_) { + renderNode_->ChangeStatus(RenderStatus::BLUR); + } +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/piece/piece_element.h b/frameworks/core/components/piece/piece_element.h new file mode 100644 index 00000000..fa36eaa9 --- /dev/null +++ b/frameworks/core/components/piece/piece_element.h @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PIECE_PIECE_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PIECE_PIECE_ELEMENT_H + +#include "core/focus/focus_node.h" +#include "core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +class PieceElement : public RenderElement, public FocusNode { + DECLARE_ACE_TYPE(PieceElement, RenderElement, FocusNode) + +public: + void PerformBuild() override; + void OnFocus() override; + void OnBlur() override; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PIECE_PIECE_ELEMENT_H diff --git a/frameworks/core/components/piece/piece_theme.h b/frameworks/core/components/piece/piece_theme.h new file mode 100644 index 00000000..6f9261ba --- /dev/null +++ b/frameworks/core/components/piece/piece_theme.h @@ -0,0 +1,131 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PIECE_PIECE_THEME_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PIECE_PIECE_THEME_H + +#include "base/geometry/dimension.h" +#include "core/components/common/properties/color.h" +#include "core/components/theme/theme.h" +#include "core/components/theme/theme_constants.h" + +namespace OHOS::Ace { + +/** + * PieceTheme defines default style of DOMPiece,using PieceTheme::Builder to build DOMPiece. + */ +class PieceTheme : public virtual Theme { + DECLARE_ACE_TYPE(PieceTheme, Theme); + +public: + class Builder final { + public: + Builder() = default; + ~Builder() = default; + + RefPtr Build(const RefPtr& themeConstants) const + { + RefPtr theme = AceType::Claim(new PieceTheme()); + if (!themeConstants) { + return theme; + } + theme->height_ = themeConstants->GetDimension(THEME_PIECE_HEIGHT); + theme->textStyle_.SetTextOverflow(TextOverflow::ELLIPSIS); + auto maxlines = themeConstants->GetInt(THEME_PIECE_TEXT_LINES); + theme->textStyle_.SetMaxLines(maxlines < 0 ? UINT32_MAX : maxlines); + theme->textStyle_.SetTextColor(themeConstants->GetColor(THEME_PIECE_TEXT_COLOR)); + theme->textStyle_.SetFontSize(themeConstants->GetDimension(THEME_PIECE_FONT_SIZE)); + theme->textStyle_.SetFontWeight(FontWeight(themeConstants->GetInt(THEME_PIECE_FONT_WEIGHT))); + theme->hoverColor_ = themeConstants->GetColor(THEME_PIECE_HOVER_COLOR); + theme->backgroundColor_ = themeConstants->GetColor(THEME_PIECE_BACKGROUND_COLOR); + theme->paddingHorizontal_ = themeConstants->GetDimension(THEME_PIECE_PADDING_HORIZONTAL); + theme->paddingVertical_ = themeConstants->GetDimension(THEME_PIECE_PADDING_VERTICAL); + theme->iconResource_ = themeConstants->GetResourceId(THEME_PIECE_ICON_SOURCE); + theme->iconSize_ = themeConstants->GetDimension(THEME_PIECE_ICON_SIZE); + theme->interval_ = themeConstants->GetDimension(THEME_PIECE_INTERVAL); + ParsePattern(themeConstants->GetThemeStyle(), theme); + return theme; + } + + private: + void ParsePattern(const RefPtr& themeStyle, const RefPtr& theme) const + { + if (!themeStyle || !theme) { + return; + } + theme->textStyle_.SetTextColor(themeStyle->GetAttr(PIECE_TEXT_COLOR, Color())); + theme->textStyle_.SetFontSize(themeStyle->GetAttr(PIECE_TEXT_FONT_SIZE, 0.0_fp)); + theme->backgroundColor_ = themeStyle->GetAttr(PIECE_BACKGROUND_COLOR, Color()) + .BlendOpacity(themeStyle->GetAttr(PIECE_BACKGROUND_COLOR_ALPHA, 0.0)); + theme->hoverColor_ = themeStyle->GetAttr(PIECE_HOVER_COLOR, Color()); + } + }; + + ~PieceTheme() override = default; + const Color& GetHoverColor() const + { + return hoverColor_; + } + const Color& GetBackgroundColor() const + { + return backgroundColor_; + } + const Dimension& GetHeight() const + { + return height_; + } + const Dimension& GetPaddingVertical() const + { + return paddingVertical_; + } + const Dimension& GetPaddingHorizontal() const + { + return paddingHorizontal_; + } + const Dimension& GetInterval() const + { + return interval_; + } + InternalResource::ResourceId GetIconResource() const + { + return iconResource_; + } + const TextStyle& GetTextStyle() const + { + return textStyle_; + } + const Dimension& GetIconSize() const + { + return iconSize_; + } + +protected: + PieceTheme() = default; + +private: + Color hoverColor_; + Color backgroundColor_; + Dimension height_; + Dimension interval_; + Dimension iconSize_; + Dimension paddingVertical_; + Dimension paddingHorizontal_; + TextStyle textStyle_; + InternalResource::ResourceId iconResource_ = InternalResource::ResourceId::NO_ID; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PIECE_PIECE_THEME_H diff --git a/frameworks/core/components/piece/render_piece.cpp b/frameworks/core/components/piece/render_piece.cpp new file mode 100644 index 00000000..ace1749b --- /dev/null +++ b/frameworks/core/components/piece/render_piece.cpp @@ -0,0 +1,116 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/piece/render_piece.h" + +#include "base/log/event_report.h" +#include "core/components/box/render_box.h" +#include "core/components/image/render_image.h" +#include "core/components/text/render_text.h" +#include "core/event/ace_event_helper.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +void RenderPiece::Update(const RefPtr& component) +{ + const RefPtr piece = AceType::DynamicCast(component); + if (!piece) { + LOGE("piece component is null"); + EventReport::SendRenderException(RenderExcepType::RENDER_COMPONENT_ERR); + return; + } + margin_ = piece->GetMargin(); + border_ = piece->GetBorder(); + hoverColor_ = piece->GetHoverColor(); + MarkNeedLayout(); +} + +void RenderPiece::PerformLayout() +{ + const auto& child = GetChildren().front(); + if (!child) { + return; + } + child->Layout(GetLayoutParam()); + SetLayoutSize(GetLayoutParam().Constrain(child->GetLayoutSize())); +} + +void RenderPiece::OnStatusChanged(RenderStatus renderStatus) +{ + renderStatus_ = renderStatus; +} + +void RenderPiece::OnPaintFinish() +{ + auto context = context_.Upgrade(); + if (!context) { + return; + } + if (renderStatus_ == RenderStatus::FOCUS) { + Offset offset = GetPosition(); + Size size = GetLayoutSize(); + Offset globalOffset = GetGlobalOffset(); + auto parent = GetParent().Upgrade(); + if (parent && AceType::DynamicCast(parent)) { + offset = parent->GetPosition(); + size = parent->GetLayoutSize() - margin_.GetLayoutSizeInPx(context->GetDipScale()); + globalOffset = parent->GetGlobalOffset() + margin_.GetOffsetInPx(context->GetDipScale()); + } + RRect rrect = RRect::MakeRect(Rect(offset, size)); + rrect.SetCorner({ border_.TopLeftRadius(), border_.TopRightRadius(), border_.BottomRightRadius(), + border_.BottomLeftRadius() }); + context->ShowFocusAnimation(rrect, Color::BLUE, globalOffset); + } +} + +bool RenderPiece::MouseHoverTest(const Point& parentLocalPoint) +{ + auto parent = GetParent().Upgrade(); + if (!parent || !AceType::DynamicCast(parent)) { + return RenderNode::MouseHoverTest(parentLocalPoint); + } + auto context = context_.Upgrade(); + if (!context) { + return false; + } + if ((parent->GetTouchRect() - parent->GetTouchRect().GetOffset() + margin_.GetOffsetInPx(context->GetDipScale())) + .IsInRegion(parentLocalPoint)) { + if (mouseState_ == MouseState::NONE) { + OnMouseHoverEnterTest(); + mouseState_ = MouseState::HOVER; + } + context->AddToHoverList(AceType::WeakClaim(this).Upgrade()); + return true; + } else { + if (mouseState_ == MouseState::HOVER) { + OnMouseHoverExitTest(); + mouseState_ = MouseState::NONE; + } + return false; + } +} + +void RenderPiece::OnMouseHoverEnterTest() +{ + MarkNeedRender(); +} + +void RenderPiece::OnMouseHoverExitTest() +{ + MarkNeedRender(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/piece/render_piece.h b/frameworks/core/components/piece/render_piece.h new file mode 100644 index 00000000..99f0a698 --- /dev/null +++ b/frameworks/core/components/piece/render_piece.h @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PIECE_RENDER_PIECE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PIECE_RENDER_PIECE_H + +#include "core/components/common/properties/border.h" +#include "core/components/common/properties/decoration.h" +#include "core/components/common/properties/edge.h" +#include "core/components/piece/piece_component.h" +#include "core/gestures/click_recognizer.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderPiece : public RenderNode { + DECLARE_ACE_TYPE(RenderPiece, RenderNode); + +public: + static RefPtr Create(); + + void Update(const RefPtr& component) override; + void PerformLayout() override; + void OnStatusChanged(RenderStatus renderStatus) override; + void OnPaintFinish() override; + +protected: + bool MouseHoverTest(const Point& parentLocalPoint) override; + void OnMouseHoverEnterTest() override; + void OnMouseHoverExitTest() override; + Edge margin_; + Border border_; + Color hoverColor_; + +private: + RenderStatus renderStatus_ = RenderStatus::DEFAULT; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PIECE_RENDER_PIECE_H diff --git a/frameworks/core/components/popup/BUILD.gn b/frameworks/core/components/popup/BUILD.gn new file mode 100644 index 00000000..8ded71e6 --- /dev/null +++ b/frameworks/core/components/popup/BUILD.gn @@ -0,0 +1,21 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("popup") { + sources = [ + "popup_component.cpp", + "popup_element.cpp", + ] +} diff --git a/frameworks/core/components/popup/popup_component.cpp b/frameworks/core/components/popup/popup_component.cpp new file mode 100644 index 00000000..5a70ae94 --- /dev/null +++ b/frameworks/core/components/popup/popup_component.cpp @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/popup/popup_component.h" + +#include "core/components/popup/popup_element.h" + +namespace OHOS::Ace { + +RefPtr PopupComponent::CreateElement() +{ + return AceType::MakeRefPtr(GetId()); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/popup/popup_component.h b/frameworks/core/components/popup/popup_component.h new file mode 100644 index 00000000..39844431 --- /dev/null +++ b/frameworks/core/components/popup/popup_component.h @@ -0,0 +1,242 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_POPUP_POPUP_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_POPUP_POPUP_COMPONENT_H + +#include "core/components/common/properties/border.h" +#include "core/components/common/properties/color.h" +#include "core/components/common/properties/edge.h" +#include "core/components/common/properties/placement.h" +#include "core/pipeline/base/component.h" +#include "core/pipeline/base/composed_component.h" +#include "core/pipeline/base/sole_child_component.h" + +namespace OHOS::Ace { + +using PopupImpl = std::function; + +class PopupParam : public AceType { + DECLARE_ACE_TYPE(PopupParam, AceType) + +public: + PopupParam() = default; + ~PopupParam() override = default; + + void SetIsShow(bool isShow) + { + isShow_ = isShow; + } + + bool IsShow() const + { + return isShow_; + } + + void SetHasAction(bool hasAction) + { + hasAction_ = hasAction; + } + + bool HasAction() const + { + return hasAction_; + } + + void SetPlacement(const Placement placement) + { + placement_ = placement; + } + + void SetMaskColor(const Color& maskColor) + { + maskColor_ = maskColor; + } + + void SetBackgroundColor(const Color& backgroundColor) + { + backgroundColor_ = backgroundColor; + } + + void SetOnVisibilityChange(const EventMarker& onVisibilityChange) + { + onVisibilityChange_ = onVisibilityChange; + } + + Placement GetPlacement() const + { + return placement_; + } + + const Color& GetMaskColor() const + { + return maskColor_; + } + + const Color& GetBackgroundColor() const + { + return backgroundColor_; + } + + const EventMarker& GetOnVisibilityChange() const + { + return onVisibilityChange_; + } + + const Edge& GetMargin() const + { + return margin_; + } + + void SetMargin(const Edge& margin) + { + margin_ = margin; + } + + const Edge& GetTargetMargin() const + { + return targetMargin_; + } + + void SetTargetMargin(const Edge& targetMargin) + { + targetMargin_ = targetMargin; + } + + const Edge& GetPadding() const + { + return padding_; + } + + void SetPadding(const Edge& padding) + { + padding_ = padding; + } + + const Border& GetBorder() const + { + return border_; + } + + void SetBorder(const Border& border) + { + border_ = border; + } + + const Dimension& GetArrowOffset() const + { + return arrowOffset_; + } + + void SetArrowOffset(const Dimension& arrowOffset) + { + arrowOffset_ = arrowOffset; + } + + const ComposeId& GetTargetId() const + { + return targetId_; + } + + void SetTargetId(const ComposeId& targetId) + { + targetId_ = targetId; + } + +private: + bool isShow_ = true; + bool hasAction_ = false; + Color maskColor_; + Color backgroundColor_; + Placement placement_ = Placement::BOTTOM; + EventMarker onVisibilityChange_; + Edge padding_; + Edge margin_; + Edge targetMargin_; + Border border_; + Dimension arrowOffset_; + ComposeId targetId_; +}; + +class PopupController : public virtual AceType { + DECLARE_ACE_TYPE(PopupController, AceType); + +public: + void ShowPopup() + { + if (showPopupImpl_) { + showPopupImpl_(); + } + } + + void SetShowPopupImpl(const PopupImpl& showPopupImpl) + { + showPopupImpl_ = showPopupImpl; + } + + void CancelPopup() + { + if (cancelPopupImpl_) { + cancelPopupImpl_(); + } + } + + void SetCancelPopupImpl(const PopupImpl& cancelPopupImpl) + { + cancelPopupImpl_ = cancelPopupImpl; + } + +private: + PopupImpl showPopupImpl_; + PopupImpl cancelPopupImpl_; +}; + +class PopupComponent : public ComposedComponent { + DECLARE_ACE_TYPE(PopupComponent, ComposedComponent); + +public: + PopupComponent(const ComposeId& id, const std::string& name, const RefPtr& child) + : ComposedComponent(id, name, child) + { + popupParam_ = MakeRefPtr(); + popupController_ = MakeRefPtr(); + }; + PopupComponent(const ComposeId& id, const std::string& name) : ComposedComponent(id, name) + { + popupParam_ = MakeRefPtr(); + popupController_ = MakeRefPtr(); + }; + ~PopupComponent() override = default; + + RefPtr CreateElement() override; + + const RefPtr& GetPopupController() const + { + return popupController_; + } + + const RefPtr& GetPopupParam() const + { + return popupParam_; + } + +private: + RefPtr popupParam_; + RefPtr popupController_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_POPUP_POPUP_COMPONENT_H diff --git a/frameworks/core/components/popup/popup_element.cpp b/frameworks/core/components/popup/popup_element.cpp new file mode 100644 index 00000000..1441b897 --- /dev/null +++ b/frameworks/core/components/popup/popup_element.cpp @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/popup/popup_element.h" + +#include "base/utils/string_utils.h" +#include "core/components/box/render_box.h" +#include "core/components/bubble/bubble_component.h" +#include "core/components/stack/stack_element.h" + +namespace OHOS::Ace { + +void PopupElement::PerformBuild() +{ + RefPtr popupComponent = AceType::DynamicCast(component_); + if (!popupComponent) { + return; + } + popup_ = popupComponent; + const auto& popupController = popupComponent->GetPopupController(); + if (!popupController) { + return; + } + popupController->SetShowPopupImpl([weak = WeakClaim(this)]() { + auto popupElement = weak.Upgrade(); + if (popupElement) { + popupElement->ShowPopup(); + } + }); + popupController->SetCancelPopupImpl([weak = WeakClaim(this)]() { + auto popupElement = weak.Upgrade(); + if (popupElement) { + popupElement->CancelPopup(); + } + }); +} + +void PopupElement::ShowPopup() +{ + if (!popup_) { + return; + } + + const auto context = context_.Upgrade(); + if (!context) { + return; + } + + if (popup_->GetPopupParam()->GetTargetId().empty()) { + return; + } + + RefPtr bubble = AceType::MakeRefPtr(popup_->GetChild()); + bubble->SetPopupParam(popup_->GetPopupParam()); + bubble->SetId(popup_->GetId()); + bubble->SetDisabledStatus(popup_->IsDisabledStatus()); + + auto stackElement = context->GetLastStack(); + if (!stackElement) { + return; + } + weakStack_ = WeakClaim(RawPtr(stackElement)); + bubble->SetWeakStack(weakStack_); + stackElement->PushComponent(bubble, false, false); +} + +void PopupElement::CancelPopup() +{ + auto stackElement = weakStack_.Upgrade(); + if (!stackElement) { + return; + } + stackElement->PopPopup(GetId()); + + auto context = context_.Upgrade(); + if (context) { + const auto& accessibilityManager = context->GetAccessibilityManager(); + if (accessibilityManager) { + accessibilityManager->RemoveAccessibilityNodeById(StringUtils::StringToInt(popup_->GetId())); + } + } +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/popup/popup_element.h b/frameworks/core/components/popup/popup_element.h new file mode 100644 index 00000000..17c301d4 --- /dev/null +++ b/frameworks/core/components/popup/popup_element.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_POPUP_POPUP_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_POPUP_POPUP_ELEMENT_H + +#include "core/components/popup/popup_component.h" +#include "core/pipeline/base/composed_element.h" + +namespace OHOS::Ace { + +class PopupElement : public ComposedElement { + DECLARE_ACE_TYPE(PopupElement, ComposedElement); + +public: + explicit PopupElement(const ComposeId& id) : ComposedElement(id) {}; + ~PopupElement() override = default; + + void PerformBuild() override; + +private: + void ShowPopup(); + void CancelPopup(); + + WeakPtr weakStack_; + RefPtr popup_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_POPUP_POPUP_ELEMENT_H diff --git a/frameworks/core/components/popup/popup_theme.h b/frameworks/core/components/popup/popup_theme.h new file mode 100644 index 00000000..c9daf974 --- /dev/null +++ b/frameworks/core/components/popup/popup_theme.h @@ -0,0 +1,111 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_POPUP_POPUP_THEME_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_POPUP_POPUP_THEME_H + +#include "core/components/common/properties/color.h" +#include "core/components/common/properties/edge.h" +#include "core/components/common/properties/text_style.h" +#include "core/components/theme/theme.h" +#include "core/components/theme/theme_constants.h" + +namespace OHOS::Ace { + +/** + * PopupTheme defines color and styles of PopupComponent. PopupTheme should be built + * using PopupTheme::Builder. + */ +class PopupTheme : public virtual Theme { + DECLARE_ACE_TYPE(PopupTheme, Theme); + +public: + class Builder { + public: + Builder() = default; + ~Builder() = default; + + RefPtr Build(const RefPtr& themeConstants) const + { + RefPtr theme = AceType::Claim(new PopupTheme()); + if (!themeConstants) { + return theme; + } + // init theme from global data + theme->padding_ = Edge(themeConstants->GetDimension(THEME_POPUP_PADDING_HORIZONTAL), + themeConstants->GetDimension(THEME_POPUP_PADDING_VERTICAL), + themeConstants->GetDimension(THEME_POPUP_PADDING_HORIZONTAL), + themeConstants->GetDimension(THEME_POPUP_PADDING_VERTICAL)); + theme->maskColor_ = themeConstants->GetColor(THEME_POPUP_MASK_COLOR); + theme->backgroundColor_ = themeConstants->GetColor(THEME_POPUP_BACKGROUND_COLOR); + theme->textStyle_.SetTextColor(themeConstants->GetColor(THEME_POPUP_TEXT_COLOR)); + theme->textStyle_.SetFontSize(themeConstants->GetDimension(THEME_POPUP_TEXT_FONTSIZE)); + theme->radius_ = Radius(themeConstants->GetDimension(THEME_POPUP_RADIUS), + themeConstants->GetDimension(THEME_POPUP_RADIUS)); + ParsePattern(themeConstants->GetThemeStyle(), theme); + return theme; + } + + private: + void ParsePattern(const RefPtr& themeStyle, const RefPtr& theme) const + { + if (!themeStyle || !theme) { + return; + } + theme->backgroundColor_ = themeStyle->GetAttr(POPUP_BACKGROUND_COLOR, Color()); + } + }; + + ~PopupTheme() override = default; + + const Edge& GetPadding() const + { + return padding_; + } + + const Color& GetMaskColor() const + { + return maskColor_; + } + + const Color& GetBackgroundColor() const + { + return backgroundColor_; + } + + const TextStyle& GetTextStyle() const + { + return textStyle_; + } + + const Radius& GetRadius() const + { + return radius_; + } + +protected: + PopupTheme() = default; + +private: + Edge padding_; + Color maskColor_; + Color backgroundColor_; + TextStyle textStyle_; + Radius radius_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_POPUP_POPUP_THEME_H diff --git a/frameworks/core/components/positioned/BUILD.gn b/frameworks/core/components/positioned/BUILD.gn new file mode 100644 index 00000000..2586c252 --- /dev/null +++ b/frameworks/core/components/positioned/BUILD.gn @@ -0,0 +1,18 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("positioned") { + sources = [ "render_positioned.cpp" ] +} diff --git a/frameworks/core/components/positioned/positioned_component.h b/frameworks/core/components/positioned/positioned_component.h new file mode 100644 index 00000000..bd08695a --- /dev/null +++ b/frameworks/core/components/positioned/positioned_component.h @@ -0,0 +1,177 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_POSITIONED_POSITIONED_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_POSITIONED_POSITIONED_COMPONENT_H + +#include "core/components/positioned/positioned_element.h" +#include "core/components/positioned/render_positioned.h" +#include "core/pipeline/base/sole_child_component.h" + +namespace OHOS::Ace { + +class PositionedComponent : public SoleChildComponent { + DECLARE_ACE_TYPE(PositionedComponent, SoleChildComponent); + +public: + PositionedComponent() = default; + explicit PositionedComponent(const RefPtr& child) : SoleChildComponent(child) {} + ~PositionedComponent() override = default; + + RefPtr CreateRenderNode() override + { + return RenderPositioned::Create(); + } + + RefPtr CreateElement() override + { + RefPtr positionedElement = AceType::MakeRefPtr(); + positionedElement->SetIsAutoFocus(isAutoFocus_); + return positionedElement; + } + + const Dimension& GetBottom() const override + { + return bottom_; + } + + void SetBottom(const Dimension& bottom) override + { + bottom_ = bottom; + hasBottom_ = true; + } + + double GetHeight() const + { + return height_; + } + + void SetHeight(double height) + { + height_ = height; + } + + const Dimension& GetLeft() const override + { + return left_; + } + + void SetLeft(const Dimension& left) override + { + left_ = left; + hasLeft_ = true; + } + + const Dimension& GetRight() const override + { + return right_; + } + + void SetRight(const Dimension& right) override + { + right_ = right; + hasRight_ = true; + } + + const Dimension& GetTop() const override + { + return top_; + } + + void SetTop(const Dimension& top) override + { + top_ = top; + hasTop_ = true; + } + + double GetWidth() const + { + return width_; + } + + void SetWidth(double width) + { + width_ = width; + } + + bool IsAutoFocus() const + { + return isAutoFocus_; + } + + void SetAutoFocus(bool isAutoFocus) + { + isAutoFocus_ = isAutoFocus; + } + + bool HasLeft() const override + { + return hasLeft_; + } + + void SetHasLeft(bool hasLeft) + { + hasLeft_ = hasLeft; + } + + bool HasTop() const override + { + return hasTop_; + } + + void SetHasTop(bool hasTop) + { + hasTop_ = hasTop; + } + + bool HasRight() const override + { + return hasRight_; + } + + void SetHasRight(bool hasRight) + { + hasRight_ = hasRight; + } + + bool HasBottom() const override + { + return hasBottom_; + } + + void SetHasBottom(bool hasBottom) + { + hasBottom_ = hasBottom; + } + +private: + Dimension bottom_; + Dimension left_; + Dimension right_; + Dimension top_; + double height_ = 0.0; + double width_ = 0.0; + + bool hasLeft_ = false; + bool hasTop_ = false; + bool hasRight_ = false; + bool hasBottom_ = false; + + bool isAutoFocus_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_POSITIONED_POSITIONED_COMPONENT_H diff --git a/frameworks/core/components/positioned/positioned_element.h b/frameworks/core/components/positioned/positioned_element.h new file mode 100644 index 00000000..0cb3e804 --- /dev/null +++ b/frameworks/core/components/positioned/positioned_element.h @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_POSITIONED_POSITIONED_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_POSITIONED_POSITIONED_ELEMENT_H + +#include "base/log/log.h" +#include "core/pipeline/base/sole_child_element.h" + +namespace OHOS::Ace { + +class PositionedElement : public SoleChildElement, public FocusGroup { + DECLARE_ACE_TYPE(PositionedElement, SoleChildElement, FocusGroup); + +public: + bool GetIsAutoFocus() const + { + return isAutoFocus_; + } + + void SetIsAutoFocus(bool isAutoFocus) + { + isAutoFocus_ = isAutoFocus; + } + + void PerformBuild() override + { + SoleChildElement::PerformBuild(); + auto focusScope = AceType::DynamicCast(this); + if (!focusScope) { + LOGE("PositionedElement can not DynamicCast to FocusGroup"); + return; + } + + if (focusScope->GetIsAutoFocus()) { + RequestFocusImmediately(); + } + } + +protected: + bool RequestNextFocus(bool vertical, bool reverse, const Rect& rect) override + { + return false; + } + +private: + bool isAutoFocus_ { false }; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_POSITIONED_POSITIONED_ELEMENT_H diff --git a/frameworks/core/components/positioned/render_positioned.cpp b/frameworks/core/components/positioned/render_positioned.cpp new file mode 100644 index 00000000..bd67cd64 --- /dev/null +++ b/frameworks/core/components/positioned/render_positioned.cpp @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/positioned/render_positioned.h" + +#include "core/components/positioned/positioned_component.h" + +namespace OHOS::Ace { + +RefPtr RenderPositioned::Create() +{ + return AceType::MakeRefPtr(); +} + +void RenderPositioned::Update(const RefPtr& component) +{ + const auto positioned = AceType::DynamicCast(component); + if (!positioned) { + return; + } + bottom_ = positioned->GetBottom(); + top_ = positioned->GetTop(); + left_ = positioned->GetLeft(); + right_ = positioned->GetRight(); + width_ = positioned->GetWidth(); + height_ = positioned->GetHeight(); + hasLeft_ = positioned->HasLeft(); + hasRight_ = positioned->HasRight(); + hasTop_ = positioned->HasTop(); + hasBottom_ = positioned->HasBottom(); + MarkNeedLayout(); +} + +void RenderPositioned::SetLeft(const Dimension& left) +{ + if (NearEqual(left_.Value(), left.Value()) && (left_.Unit() == left.Unit())) { + return; + } + left_ = left; + hasLeft_ = true; + MarkNeedLayout(); +} + +void RenderPositioned::SetTop(const Dimension& top) +{ + if (NearEqual(top_.Value(), top.Value()) && (top_.Unit() == top.Unit())) { + return; + } + top_ = top; + hasTop_ = true; + MarkNeedLayout(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/positioned/render_positioned.h b/frameworks/core/components/positioned/render_positioned.h new file mode 100644 index 00000000..f507cfd5 --- /dev/null +++ b/frameworks/core/components/positioned/render_positioned.h @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_POSITIONED_RENDER_POSITIONED_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_POSITIONED_RENDER_POSITIONED_H + +#include "core/components/proxy/render_proxy.h" + +namespace OHOS::Ace { + +class RenderPositioned : public RenderProxy { + DECLARE_ACE_TYPE(RenderPositioned, RenderProxy); + +public: + void Update(const RefPtr& component) override; + + static RefPtr Create(); + + const Dimension& GetBottom() const override + { + return bottom_; + } + + const Dimension& GetTop() const override + { + return top_; + } + + double GetHeight() const + { + return height_; + } + + double GetWidth() const + { + return width_; + } + + const Dimension& GetLeft() const override + { + return left_; + } + + const Dimension& GetRight() const override + { + return right_; + } + + bool HasLeft() const override + { + return hasLeft_; + } + + bool HasTop() const override + { + return hasTop_; + } + + bool HasRight() const override + { + return hasRight_; + } + + bool HasBottom() const override + { + return hasBottom_; + } + + void SetLeft(const Dimension& left); + + void SetTop(const Dimension& left); + +private: + Dimension bottom_; + Dimension top_; + Dimension left_; + Dimension right_; + double height_ = 0.0; + double width_ = 0.0; + + bool hasLeft_ = false; + bool hasTop_ = false; + bool hasRight_ = false; + bool hasBottom_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_POSITIONED_RENDER_POSITIONED_H diff --git a/frameworks/core/components/progress/BUILD.gn b/frameworks/core/components/progress/BUILD.gn new file mode 100644 index 00000000..7fa0269c --- /dev/null +++ b/frameworks/core/components/progress/BUILD.gn @@ -0,0 +1,25 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("progress") { + sources = [ + "flutter_render_loading_progress.cpp", + "flutter_render_progress.cpp", + "loading_progress_component.cpp", + "progress_component.cpp", + "render_loading_progress.cpp", + "render_progress.cpp", + ] +} diff --git a/frameworks/core/components/progress/flutter_render_loading_progress.cpp b/frameworks/core/components/progress/flutter_render_loading_progress.cpp new file mode 100644 index 00000000..24c5eb32 --- /dev/null +++ b/frameworks/core/components/progress/flutter_render_loading_progress.cpp @@ -0,0 +1,162 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/progress/flutter_render_loading_progress.h" + +#include "flutter/lib/ui/ui_dart_state.h" +#include "third_party/skia/include/core/SkMaskFilter.h" + +#include "base/log/log.h" +#include "base/utils/utils.h" +#include "core/animation/curves.h" +#include "core/pipeline/base/flutter_render_context.h" +#include "core/pipeline/base/scoped_canvas_state.h" +#include "core/pipeline/layers/offset_layer.h" + +namespace OHOS::Ace { +namespace { + +constexpr double BG_START = 90.0; +constexpr double BG_END = 270.0; +constexpr float CAMERA_ROTATE_X = -23.3f; +constexpr float CAMERA_ROTATE_Y = -90.0f; +constexpr uint8_t RING_ALPHA = 200; +constexpr uint8_t RING_BG_BLUR_ALPHA = 150; + +} // namespace + +RefPtr RenderLoadingProgress::Create() +{ + return AceType::MakeRefPtr(); +} + +void FlutterRenderLoadingProgress::Paint(RenderContext& context, const Offset& offset) +{ + if (cometParams_.empty()) { + LOGE("no comet need to paint."); + return; + } + + const auto renderContext = static_cast(&context); + flutter::Canvas* canvas = renderContext->GetCanvas(); + if (canvas == nullptr) { + LOGE("canvas is nullptr"); + return; + } + + // Paint the Ring first when ring in front. + if (cometParams_[0].angular > BG_START && cometParams_[0].angular < BG_END) { + PaintComet(canvas, offset + center_ + ringOffset_); + PaintRing(canvas, offset + center_ + ringOffset_); + } else { + PaintRing(canvas, offset + center_ + ringOffset_); + PaintComet(canvas, offset + center_ + ringOffset_); + } +} + +void FlutterRenderLoadingProgress::PaintRing(flutter::Canvas* canvas, const Offset& offset) +{ + flutter::Paint ringPaint; + flutter::PaintData paintData; + uint8_t ringAlpha = RING_ALPHA; + // Need to Paint Ring Blur effect when Dark Mode. + if (progressColor_ == PROGRESS_COLOR_DARK) { + ringPaint.paint()->setMaskFilter(SkMaskFilter::MakeBlur(SkBlurStyle::kNormal_SkBlurStyle, + ringBlurRadius_ * scale_)); + flutter::Paint ringBgPaint; + flutter::PaintData paintBgData; + ringBgPaint.paint()->setStyle(SkPaint::Style::kStroke_Style); + ringBgPaint.paint()->setStrokeWidth(ringBgWidth_ * scale_); + ringBgPaint.paint()->setColor(progressColor_.GetValue()); + ringBgPaint.paint()->setAlpha(RING_BG_BLUR_ALPHA * dragAlpha_ * exitAlpha_); + ringBgPaint.paint()->setMaskFilter(SkMaskFilter::MakeBlur(SkBlurStyle::kNormal_SkBlurStyle, + ringBgBlurRadius_ * scale_)); + canvas->drawCircle(offset.GetX(), offset.GetY(), + ringRadius_ * scale_ * dragScale_ * exitScale_, ringBgPaint, paintBgData); + ringAlpha = UINT8_MAX; + } + ringAlpha = ringAlpha * progressColor_.GetAlpha() / UINT8_MAX; + ringPaint.paint()->setAntiAlias(true); + ringPaint.paint()->setStyle(SkPaint::Style::kStroke_Style); + ringPaint.paint()->setStrokeWidth(ringWidth_ * scale_); + ringPaint.paint()->setColor(progressColor_.GetValue()); + ringPaint.paint()->setAlpha(ringAlpha * dragAlpha_ * exitAlpha_); + canvas->drawCircle(offset.GetX(), offset.GetY(), + ringRadius_ * scale_ * dragScale_ * exitScale_, ringPaint, paintData); +} + +void FlutterRenderLoadingProgress::PaintComet(flutter::Canvas* canvas, const Offset& offset) +{ + // Init the Camera Degree and Location when first paint. + if (!camera_) { + camera_ = new Sk3DView(); + camera_->rotateY(CAMERA_ROTATE_Y); + camera_->rotateX(CAMERA_ROTATE_X); + camera_->save(); + camera_->setCameraLocation(camera_->getCameraLocationX(), 1.0f, camera_->getCameraLocationZ()); + } + + // Scale changed will effect the locationOffsetY_. + if (!NearEqual(usedScale_, scale_)) { + usedScale_ = scale_; + cometCenter_.SetX(orbitRadius_); + Offset locationOffset; + RotateCalculate(cometCenter_ * usedScale_, locationOffset, 0.0f); + locationOffsetY_ = locationOffset.GetY(); + } + + // Paint Comet Head and Tail. + Offset rotatePos; + SkPaint tailPaint; + tailPaint.setAntiAlias(true); + tailPaint.setStyle(SkPaint::Style::kFill_Style); + tailPaint.setColor(progressColor_.GetValue()); + double colorAlpha = 1.0 * progressColor_.GetAlpha() / UINT8_MAX; + for (CometParam para : cometParams_) { + if (para.alpha == 0) { + return; + } + tailPaint.setAlpha(para.alpha * exitAlpha_ * colorAlpha); + RotateCalculate(cometCenter_ * scale_, rotatePos, para.angular); + canvas->canvas()->drawCircle(offset.GetX() + rotatePos.GetX(), + offset.GetY() + rotatePos.GetY() - locationOffsetY_, + cometRadius_ * para.scale * scale_ * exitScale_, tailPaint); + } +} + +RenderLayer FlutterRenderLoadingProgress::GetRenderLayer() +{ + if (!layer_) { + layer_ = AceType::MakeRefPtr(); + } + return AceType::RawPtr(layer_); +} + +// Convert 2D position to 3D position according to the angle of rotation. +void FlutterRenderLoadingProgress::RotateCalculate(const Offset& src, Offset& dst, float degrees) +{ + camera_->rotateY(degrees); + SkPoint point; + point.set(src.GetX(), src.GetY()); + SkMatrix matrix; + camera_->getMatrix(&matrix); + matrix.mapPoints(&point, &point, 1); + dst.SetX(point.fX); + dst.SetY(point.fY); + camera_->restore(); + camera_->save(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/progress/flutter_render_loading_progress.h b/frameworks/core/components/progress/flutter_render_loading_progress.h new file mode 100644 index 00000000..7bf1cd99 --- /dev/null +++ b/frameworks/core/components/progress/flutter_render_loading_progress.h @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PROGRESS_FLUTTER_RENDER_LOADING_PROGRESS_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PROGRESS_FLUTTER_RENDER_LOADING_PROGRESS_H + +#include "third_party/skia/include/utils/SkCamera.h" + +#include "base/geometry/offset.h" +#include "core/components/progress/render_loading_progress.h" +#include "core/pipeline/base/flutter_render_context.h" +#include "core/pipeline/base/render_context.h" +#include "core/pipeline/layers/container_layer.h" + +namespace OHOS::Ace { + +class FlutterRenderLoadingProgress final : public RenderLoadingProgress { + DECLARE_ACE_TYPE(FlutterRenderLoadingProgress, RenderLoadingProgress); + +public: + FlutterRenderLoadingProgress() = default; + ~FlutterRenderLoadingProgress() override = default; + + void Paint(RenderContext& context, const Offset& offset) override; + + bool IsRepaintBoundary() const override + { + return true; + } + + RenderLayer GetRenderLayer() override; + + void PaintRing(flutter::Canvas* canvas, const Offset& offset); + + void PaintComet(flutter::Canvas* canvas, const Offset& offset); + +private: + void RotateCalculate(const Offset& src, Offset& dst, float degrees); + + RefPtr layer_ = nullptr; + Sk3DView* camera_ = nullptr; + double usedScale_ = 1.0; + double locationOffsetY_ = 0.0; + Offset cometCenter_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PROGRESS_FLUTTER_RENDER_LOADING_PROGRESS_H diff --git a/frameworks/core/components/progress/flutter_render_progress.cpp b/frameworks/core/components/progress/flutter_render_progress.cpp new file mode 100644 index 00000000..154a5a6d --- /dev/null +++ b/frameworks/core/components/progress/flutter_render_progress.cpp @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/progress/flutter_render_progress.h" + +#include "third_party/skia/include/effects/SkGradientShader.h" + +#include "core/components/progress/progress_component.h" +#include "core/components/progress/render_progress.h" +#include "core/pipeline/base/scoped_canvas_state.h" + +namespace OHOS::Ace { + +RefPtr RenderProgress::Create() +{ + LOGD("Progress::Create"); + return AceType::MakeRefPtr(); +} + +void FlutterRenderProgress::Update(const RefPtr& component) +{ + const RefPtr progress = AceType::DynamicCast(component); + + if (initialUpdate_) { + track_ = progress->GetTrack()->CreateRenderNode(); + AddChild(track_); + track_->Attach(GetContext()); + initialUpdate_ = false; + } else if (type_ != progress->GetType()) { + RemoveChild(track_); + track_ = progress->GetTrack()->CreateRenderNode(); + AddChild(track_); + track_->Attach(GetContext()); + } + RenderProgress::Update(component); + track_->Update(progress->GetTrack()); + const RefPtr track = AceType::DynamicCast(track_); + track->SetAnimationPlay(progress->GetAnimationPlay()); + track->SetTotalRatio(totalRatio_); + track->SetCachedRatio(cachedRatio_); + MarkNeedLayout(); +} + +void FlutterRenderProgress::PerformLayout() +{ + RenderProgress::PerformLayout(); + Offset trackPosition; + const RefPtr track = AceType::DynamicCast(track_); + if (!track) { + LOGE("convert to render track error. skip performlayout"); + return; + } + track->SetPosition(trackPosition); +} + +void FlutterRenderProgress::Paint(RenderContext& context, const Offset& offset) +{ + if (GetErrorBit()) { + LOGE("progress size error. height needs to larger than 2 * thickness"); + } + auto canvas = ScopedCanvas::Create(context); + if (!canvas) { + LOGE("paint canvas is null"); + return; + } + canvas->clipRect(offset.GetX(), offset.GetY(), GetLayoutSize().Width() + offset.GetX(), + GetLayoutSize().Height() + offset.GetY(), SkClipOp::kIntersect, true); + canvas->save(); + RenderNode::Paint(context, offset); + canvas->restore(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/progress/flutter_render_progress.h b/frameworks/core/components/progress/flutter_render_progress.h new file mode 100644 index 00000000..67f77788 --- /dev/null +++ b/frameworks/core/components/progress/flutter_render_progress.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PROGRESS_FLUTTER_RENDER_PROGRESS_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PROGRESS_FLUTTER_RENDER_PROGRESS_H + +#include "core/components/progress/render_progress.h" +#include "core/components/track/render_track.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class FlutterRenderProgress : public RenderProgress { + DECLARE_ACE_TYPE(FlutterRenderProgress, RenderProgress); + +public: + FlutterRenderProgress() = default; + ~FlutterRenderProgress() override = default; + + void Update(const RefPtr& component) override; + void PerformLayout() override; + void Paint(RenderContext& context, const Offset& offset) override; + +private: + RefPtr track_; + bool initialUpdate_ = true; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PROGRESS_FLUTTER_RENDER_PROGRESS_H diff --git a/frameworks/core/components/progress/loading_progress_component.cpp b/frameworks/core/components/progress/loading_progress_component.cpp new file mode 100644 index 00000000..0c8e41c0 --- /dev/null +++ b/frameworks/core/components/progress/loading_progress_component.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/progress/loading_progress_component.h" + +#include "core/components/progress/loading_progress_element.h" +#include "core/components/progress/render_loading_progress.h" + +namespace OHOS::Ace { + +RefPtr LoadingProgressComponent::CreateRenderNode() +{ + return RenderLoadingProgress::Create(); +} + +RefPtr LoadingProgressComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/progress/loading_progress_component.h b/frameworks/core/components/progress/loading_progress_component.h new file mode 100644 index 00000000..12873aa4 --- /dev/null +++ b/frameworks/core/components/progress/loading_progress_component.h @@ -0,0 +1,116 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PROGRESS_LOADING_PROGRESS_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PROGRESS_LOADING_PROGRESS_COMPONENT_H + +#include "base/geometry/dimension.h" +#include "base/geometry/offset.h" +#include "core/components/common/properties/color.h" +#include "core/pipeline/base/render_component.h" + +namespace OHOS::Ace { + +constexpr int32_t COMET_COUNT = 20; +constexpr double MOVE_RATIO = 0.06; // The Ratio to the Ring diameter. +constexpr double COMET_TAIL_LEN = 60.0; +const Dimension RING_RADIUS = 10.5_vp; +const Dimension ORBIT_RADIUS = 17.0_vp; +const Color PROGRESS_COLOR = Color(0xff666666); +const Color PROGRESS_COLOR_DARK = Color(0x99ffffff); + +class LoadingProgressComponent : public RenderComponent { + DECLARE_ACE_TYPE(LoadingProgressComponent, RenderComponent); + +public: + LoadingProgressComponent() = default; + explicit LoadingProgressComponent(double diameter) : diameter_(diameter) {}; + ~LoadingProgressComponent() override = default; + + RefPtr CreateRenderNode() override; + RefPtr CreateElement() override; + + const Dimension& GetDiameter() const + { + return diameter_; + } + + void SetDiameter(const Dimension& diameter) + { + diameter_ = diameter; + } + + void SetProgressColor(const Color& color) + { + progressColor_ = color; + } + + const Color& GetProgressColor() const + { + return progressColor_; + } + + void SetMoveRatio(double ratio) + { + moveRatio_ = ratio; + } + + double GetMoveRatio() const + { + return moveRatio_; + } + + void SetRingRadius(const Dimension& radius) + { + ringRadius_ = radius; + } + + const Dimension& GetRingRadius() const + { + return ringRadius_; + } + + void SetOrbitRadius(const Dimension& radius) + { + orbitRadius_ = radius; + } + + const Dimension& GetOrbitRadius() const + { + return orbitRadius_; + } + + void SetCometTailLen(double len) + { + cometTailLen_ = len; + } + + double GetCometTailLen() const + { + return cometTailLen_; + } + +private: + Dimension diameter_; + double cometTailLen_ = COMET_TAIL_LEN; // Degrees. + double moveRatio_ = MOVE_RATIO; // The Ratio to the Ring diameter. + Dimension ringRadius_ = RING_RADIUS; + Dimension orbitRadius_ = ORBIT_RADIUS; + Color progressColor_ = PROGRESS_COLOR; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PROGRESS_LOADING_PROGRESS_COMPONENT_H diff --git a/frameworks/core/components/progress/loading_progress_element.h b/frameworks/core/components/progress/loading_progress_element.h new file mode 100644 index 00000000..ac4080ef --- /dev/null +++ b/frameworks/core/components/progress/loading_progress_element.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PROGRESS_LOADING_PROGRESS_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PROGRESS_LOADING_PROGRESS_ELEMENT_H + +#include "core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +class LoadingProgressElement : public RenderElement { + DECLARE_ACE_TYPE(LoadingProgressElement, RenderElement); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PROGRESS_LOADING_PROGRESS_ELEMENT_H diff --git a/frameworks/core/components/progress/progress_component.cpp b/frameworks/core/components/progress/progress_component.cpp new file mode 100644 index 00000000..e6ec0001 --- /dev/null +++ b/frameworks/core/components/progress/progress_component.cpp @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/progress/progress_component.h" + +#include "core/components/progress/progress_element.h" +#include "core/components/progress/render_progress.h" + +namespace OHOS::Ace { + +ProgressComponent::ProgressComponent(double min, double value, double cachedValue, double max, ProgressType type) +{ + switch (type) { + case ProgressType::LINEAR: { + track_ = AceType::MakeRefPtr(); + break; + } + case ProgressType::RING: { + track_ = AceType::MakeRefPtr(); + break; + } + case ProgressType::SCALE: { + track_ = AceType::MakeRefPtr(); + break; + } + case ProgressType::GAUGE: + case ProgressType::ARC: { + track_ = AceType::MakeRefPtr(); + break; + } + case ProgressType::MOON: { + track_ = AceType::MakeRefPtr(); + break; + } + default: { + track_ = AceType::MakeRefPtr(); + break; + } + } + data_.SetMinValue(min); + data_.SetValue(value); + data_.SetMaxValue(max); + data_.SetCachedValue(cachedValue); + type_ = type; +} + +void ProgressComponent::InitStyle(const RefPtr& theme) +{ + if (!theme) { + return; + } + track_->SetSelectColor(theme->GetTrackSelectedColor()); + track_->SetCachedColor(theme->GetTrackCachedColor()); + track_->SetBackgroundColor(theme->GetTrackBgColor()); + track_->SetTrackThickness(theme->GetTrackThickness()); +} + +RefPtr ProgressComponent::CreateRenderNode() +{ + return RenderProgress::Create(); +} + +RefPtr ProgressComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/progress/progress_component.h b/frameworks/core/components/progress/progress_component.h new file mode 100644 index 00000000..9f7c4f87 --- /dev/null +++ b/frameworks/core/components/progress/progress_component.h @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PROGRESS_PROGRESS_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PROGRESS_PROGRESS_COMPONENT_H + +#include "core/components/common/properties/progress_data.h" +#include "core/components/progress/progress_theme.h" +#include "core/components/track/track_component.h" +#include "core/pipeline/base/render_component.h" + +namespace OHOS::Ace { + +enum class ProgressType { + LINEAR = 1, + RING = 2, + SCALE = 3, + CIRCLE = 4, + GAUGE = 5, + ARC = 6, + MOON = 7, +}; + +class ProgressComponent : public RenderComponent { + DECLARE_ACE_TYPE(ProgressComponent, RenderComponent); + +public: + ProgressComponent(double min, double value, double cachedValue, double max, ProgressType type); + ~ProgressComponent() override = default; + + RefPtr CreateElement() override; + RefPtr CreateRenderNode() override; + + void InitStyle(const RefPtr& theme); + + RefPtr GetTrack() const + { + return track_; + } + + void SetTrack(const RefPtr& track) + { + track_ = track; + } + + void SetValue(double value) + { + data_.SetValue(value); + } + + double GetValue() const + { + return data_.GetValue(); + } + + void SetCachedValue(double cachedValue) + { + data_.SetCachedValue(cachedValue); + } + + double GetCachedValue() const + { + return data_.GetCachedValue(); + } + + void SetMaxValue(double max) + { + data_.SetMaxValue(max); + } + + double GetMaxValue() const + { + return data_.GetMaxValue(); + } + + void SetMinValue(double min) + { + data_.SetMinValue(min); + } + + double GetMinValue() const + { + return data_.GetMinValue(); + } + + ProgressType GetType() const + { + return type_; + } + + void SetAnimationPlay(bool playAnimation) + { + playAnimation_ = playAnimation; + } + + bool GetAnimationPlay() const + { + return playAnimation_; + } + +private: + ProgressData data_; + RefPtr track_; + ProgressType type_ = ProgressType::LINEAR; + bool playAnimation_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PROGRESS_PROGRESS_COMPONENT_H diff --git a/frameworks/core/components/progress/progress_element.h b/frameworks/core/components/progress/progress_element.h new file mode 100644 index 00000000..2826991f --- /dev/null +++ b/frameworks/core/components/progress/progress_element.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PROGRESS_PROGRESS_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PROGRESS_PROGRESS_ELEMENT_H + +#include "core/components/padding/padding_component.h" +#include "core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +// Progress element implementation +class ProgressElement : public RenderElement { + DECLARE_ACE_TYPE(ProgressElement, RenderElement); + +public: + void Update() override + { + customComponent_ = component_; + RenderElement::Update(); + } + + bool CanUpdate(const RefPtr& newComponent) override + { + return (newComponent == customComponent_) && Element::CanUpdate(newComponent); + } + +private: + WeakPtr customComponent_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PROGRESS_PROGRESS_ELEMENT_H diff --git a/frameworks/core/components/progress/progress_theme.h b/frameworks/core/components/progress/progress_theme.h new file mode 100644 index 00000000..35225b57 --- /dev/null +++ b/frameworks/core/components/progress/progress_theme.h @@ -0,0 +1,239 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PROGRESS_PROGRESS_THEME_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PROGRESS_PROGRESS_THEME_H + +#include "base/geometry/dimension.h" +#include "core/components/common/properties/color.h" +#include "core/components/theme/theme.h" +#include "core/components/theme/theme_constants.h" + +namespace OHOS::Ace { + +/** + * ProgressTheme defines color and styles of ProgressComponent. ProgressTheme should be built + * using ProgressTheme::Builder. + */ +class ProgressTheme : public virtual Theme { + DECLARE_ACE_TYPE(ProgressTheme, Theme); + +public: + class Builder { + public: + Builder() = default; + ~Builder() = default; + + RefPtr Build(const RefPtr& themeConstants) const + { + RefPtr theme = AceType::Claim(new ProgressTheme()); + if (!themeConstants) { + return theme; + } + theme->trackThickness_ = themeConstants->GetDimension(THEME_PROGRERSS_THICKNESS); + theme->trackWidth_ = themeConstants->GetDimension(THEME_PROGRESS_DEFAULT_WIDTH); + theme->ringThickness_ = themeConstants->GetDimension(THEME_PROGRESS_RING_THICKNESS); + theme->ringDiameter_ = themeConstants->GetDimension(THEME_PROGRESS_DEFAULT_DIAMETER); + theme->trackBgColor_ = themeConstants->GetColor(THEME_PROGRESS_BG_COLOR); + theme->trackSelectedColor_ = themeConstants->GetColor(THEME_PROGRESS_COLOR); + theme->trackCachedColor_ = themeConstants->GetColor(THEME_PROGRESS_CACHED_COLOR); + theme->loadingColor_ = themeConstants->GetColor(THEME_LOADING_COLOR); + theme->loadingDiameter_ = themeConstants->GetDimension(THEME_PROGRESS_DEFAULT_DIAMETER); + theme->scaleNumber_ = themeConstants->GetInt(THEME_PROGRESS_SCALE_NUMBER); + theme->scaleWidth_ = themeConstants->GetDimension(THEME_PROGRESS_SCALE_WIDTH); + theme->scaleLength_ = themeConstants->GetDimension(THEME_PROGRESS_STROKE_WIDTH); + theme->scaleRingDiameter_ = themeConstants->GetDimension(THEME_SCALE_PROGRESS_DEFAULT_DIAMETER); + + // For moon progress + theme->moonDiameter_ = themeConstants->GetDimension(THEME_MOON_PROGRESS_DIAMETER); + theme->moonTrackBackgroundColor_ = themeConstants->GetColor(THEME_MOON_BACKGROUDN_COLOR); + theme->moonFrontColor_ = themeConstants->GetColor(THEME_MOON_FRONT_COLOR); + + // For loading progress in cycle type. + theme->progressColor_ = themeConstants->GetColor(THEME_LOADING_PROGRESS_COLOR); + theme->moveRatio_ = themeConstants->GetDouble(THEME_LOADING_PROGRESS_MOVE_RATIO); + theme->ringRadius_ = themeConstants->GetDimension(THEME_LOADING_PROGRESS_RING_RADIUS); + theme->orbitRadius_ = themeConstants->GetDimension(THEME_LOADING_PROGRESS_ORBIT_RADIUS); + theme->cometTailLen_ = themeConstants->GetDouble(THEME_LOADING_PROGRESS_COMET_TAIL_LEN); + // Read style from system. + ParsePattern(themeConstants->GetThemeStyle(), theme); + return theme; + } + + void ParsePattern(const RefPtr& themeStyle, const RefPtr& theme) const + { + if (!themeStyle) { + LOGI("progress theme style is null"); + return; + } + theme->trackBgColor_ = themeStyle->GetAttr(THEME_ATTR_COLOR_COMPONENT_NORMAL, Color::RED); + theme->trackSelectedColor_ = themeStyle->GetAttr(THEME_ATTR_COLOR_EMPHASIZE, Color::RED); + theme->trackCachedColor_ = + themeStyle->GetAttr(THEME_ATTR_COLOR_EMPHASIZE, Color::RED).BlendOpacity(0.4); + theme->loadingColor_ = themeStyle->GetAttr(THEME_ATTR_COLOR_PROGRESS, Color::RED).BlendOpacity(0.6); + theme->progressColor_ = themeStyle->GetAttr(THEME_ATTR_COLOR_PROGRESS, Color::RED); + theme->moonFrontColor_ = + themeStyle->GetAttr(TEXT_OVERLAY_HANDLE_COLOR, Color::RED) + .BlendOpacity(themeStyle->GetAttr(THEME_ATTR_HIGHLIGHT_BACKGROUND_ALPHA, 1.0)); + theme->moonTrackBackgroundColor_ = + themeStyle->GetAttr(TEXT_OVERLAY_HANDLE_COLOR, Color::RED) + .BlendOpacity(themeStyle->GetAttr(THEME_ATTR_HIGHLIGHT_BACKGROUND_ALPHA, 1.0)) + .BlendOpacity(themeStyle->GetAttr(THEME_ATTR_DISABLED_ALPHA, 1.0)); + } + }; + + ~ProgressTheme() override = default; + + const Dimension& GetTrackThickness() const + { + return trackThickness_; + } + + const Dimension& GetTrackWidth() const + { + return trackWidth_; + } + + const Dimension& GetRingThickness() const + { + return ringThickness_; + } + + const Dimension& GetRingDiameter() const + { + return ringDiameter_; + } + + const Color& GetTrackBgColor() const + { + return trackBgColor_; + } + + const Color& GetTrackSelectedColor() const + { + return trackSelectedColor_; + } + + Color GetTrackCachedColor() const + { + return trackCachedColor_; + } + + const Dimension& GetLoadingDiameter() const + { + return loadingDiameter_; + } + + const Color& GetLoadingColor() const + { + return loadingColor_; + } + + const Dimension& GetScaleWidth() const + { + return scaleWidth_; + } + + int32_t GetScaleNumber() const + { + return scaleNumber_; + } + + const Dimension& GetScaleLength() const + { + return scaleLength_; + } + + const Color& GetProgressColor() const + { + return progressColor_; + } + + double GetMoveRatio() const + { + return moveRatio_; + } + + const Dimension& GetRingRadius() const + { + return ringRadius_; + } + + const Dimension& GetOrbitRadius() const + { + return orbitRadius_; + } + + double GetCometTailLen() const + { + return cometTailLen_; + } + + const Dimension& GetScaleRingDiameter() const + { + return scaleRingDiameter_; + } + + const Dimension& GetMoonDiameter() const + { + return moonDiameter_; + } + + const Color& GetMoonBackgroundColor() const + { + return moonTrackBackgroundColor_; + } + + const Color& GetMoonFrontColor() const + { + return moonFrontColor_; + } + +protected: + ProgressTheme() = default; + +private: + Dimension trackThickness_; + Dimension trackWidth_; + Color trackBgColor_; + Color trackSelectedColor_; + Color trackCachedColor_; + + Dimension ringThickness_; + Dimension ringDiameter_; + + Dimension loadingDiameter_; + Color loadingColor_; + + Dimension scaleWidth_; + int32_t scaleNumber_ = 0; + Dimension scaleLength_; + Dimension scaleRingDiameter_; + + Dimension moonDiameter_; + Color moonTrackBackgroundColor_; + Color moonFrontColor_; + + // For loading progress in cycle type. + Color progressColor_; + double moveRatio_ = 0.0; + Dimension ringRadius_; + Dimension orbitRadius_; + double cometTailLen_ = 0.0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PROGRESS_PROGRESS_THEME_H diff --git a/frameworks/core/components/progress/render_loading_progress.cpp b/frameworks/core/components/progress/render_loading_progress.cpp new file mode 100644 index 00000000..9669c8c0 --- /dev/null +++ b/frameworks/core/components/progress/render_loading_progress.cpp @@ -0,0 +1,435 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/progress/render_loading_progress.h" + +#include "base/log/event_report.h" +#include "base/log/log.h" +#include "core/animation/curve_animation.h" +#include "core/animation/keyframe_animation.h" +#include "core/components/progress/progress_theme.h" + +namespace OHOS::Ace { +namespace { + +constexpr double LOOP_DEGREES = 360.0; +constexpr double TAIL_ALPHA_RATIO = 0.82; +constexpr int32_t LOOP_DURATION = 1200; +constexpr int32_t MOVE_DURATION = LOOP_DURATION / 12; // Comet move without tail. +constexpr int32_t TAIL_DURATION = LOOP_DURATION / 4; // Comet move with tail getting longer. +constexpr double DRAG_ANGLE_BEGIN = -15.0; +constexpr double DRAG_ANGLE_RANGE = 30.0; +constexpr double RING_SCALE_BEGIN = 0.5; +constexpr double RING_SCALE_RANGE = 0.5; +constexpr double MOVE_START = DRAG_ANGLE_BEGIN + DRAG_ANGLE_RANGE; +constexpr double MOVE_END = MOVE_START + LOOP_DEGREES / LOOP_DURATION * MOVE_DURATION; +constexpr double TAIL_END = MOVE_END + LOOP_DEGREES / LOOP_DURATION * TAIL_DURATION; +constexpr double LOOP_END = TAIL_END + LOOP_DEGREES; +constexpr int32_t START_POINT = 0; +constexpr int32_t MIDDLE_POINT = 1; +constexpr int32_t END_POINT = 2; +constexpr double CENTER_POINT = 2.0; +const Dimension MODE_SMALL = 16.0_vp; +const Dimension MODE_MIDDLE = 40.0_vp; +const Dimension MODE_LARGE = 76.0_vp; +const Dimension MODE_COMET_RADIUS[] = { 3.0_vp, 3.0_vp, 2.2_vp }; +const Dimension MODE_RING_WIDTH[] = { 2.8_vp, 1.9_vp, 1.2_vp }; +const Dimension MODE_RING_BLUR_RADIUS[] = { 0.5_vp, 0.2_vp, 0.1_vp }; +const Dimension MODE_RING_BG_WIDTH[] = { 3.0_vp, 3.0_vp, 2.0_vp }; +const Dimension MODE_RING_BG_BLUR_RADIUS[] = { 2.0_vp, 2.0_vp, 2.0_vp }; + +} // namespace + +RenderLoadingProgress::RenderLoadingProgress() : RenderNode(true) {} + +void RenderLoadingProgress::Update(const RefPtr& component) +{ + auto loadingProgress = AceType::DynamicCast(component); + if (!loadingProgress) { + LOGE("Update with nullptr"); + EventReport::SendRenderException(RenderExcepType::RENDER_COMPONENT_ERR); + return; + } + diameter_ = NormalizeToPx(loadingProgress->GetDiameter()); + progressColor_ = loadingProgress->GetProgressColor(); + moveRatio_ = loadingProgress->GetMoveRatio(); + ringRadius_ = NormalizeToPx(loadingProgress->GetRingRadius()); + orbitRadius_ = NormalizeToPx(loadingProgress->GetOrbitRadius()); + cometTailLen_ = loadingProgress->GetCometTailLen(); + MarkNeedLayout(); +} + +void RenderLoadingProgress::UpdateRingAnimation() +{ + auto ringMove = AceType::MakeRefPtr>(); + ringMove->AddListener([weak = WeakClaim(this)](double value) { + auto loading = weak.Upgrade(); + if (loading) { + loading->ringOffset_.SetY(value * loading->scale_); + loading->MarkNeedRender(); + } + }); + double moveRange = ringRadius_ * moveRatio_ * 2.0; + auto keyframe1 = AceType::MakeRefPtr>(0.0f, 0.0f); + auto keyframe2 = AceType::MakeRefPtr>(0.25f, -moveRange); + auto keyframe3 = AceType::MakeRefPtr>(0.75f, moveRange); + auto keyframe4 = AceType::MakeRefPtr>(1.0f, 0.0f); + keyframe2->SetCurve(AceType::MakeRefPtr(0.0f, 0.0f, 0.67f, 1.0f)); + keyframe3->SetCurve(AceType::MakeRefPtr(0.33f, 0.0f, 0.67f, 1.0f)); + keyframe4->SetCurve(AceType::MakeRefPtr(0.33f, 0.0f, 1.0f, 1.0f)); + ringMove->AddKeyframe(keyframe1); + ringMove->AddKeyframe(keyframe2); + ringMove->AddKeyframe(keyframe3); + ringMove->AddKeyframe(keyframe4); + ringController_->ClearInterpolators(); + ringController_->AddInterpolator(ringMove); + ringController_->SetIteration(ANIMATION_REPEAT_INFINITE); + ringController_->SetDuration(LOOP_DURATION); + ringController_->Play(); +} + +void RenderLoadingProgress::UpdateCometAnimation() +{ + auto cometMoveStart = AceType::MakeRefPtr>(MOVE_START, MOVE_END, + AceType::MakeRefPtr(0.6f, 0.2f, 1.0f, 1.0f)); + cometMoveStart->AddListener([weak = AceType::WeakClaim(this)](double value) { + auto loading = weak.Upgrade(); + if (loading) { + CometParam para; + para.angular = value; + loading->cometParams_.clear(); + loading->cometParams_.emplace_back(para); + loading->UpdateCometParams(); + } + }); + cometController_->ClearInterpolators(); + cometController_->AddInterpolator(cometMoveStart); + cometController_->SetIteration(1); + cometController_->SetDuration(MOVE_DURATION); + cometController_->SetFillMode(FillMode::FORWARDS); + cometController_->ClearStopListeners(); + moveStopId_ = cometController_->AddStopListener([weak = AceType::WeakClaim(this)]() { + auto loading = weak.Upgrade(); + if (loading) { + loading->DoCometTailAnimation(); + } + }); + cometController_->Play(); +} + +void RenderLoadingProgress::DoCometTailAnimation() +{ + auto cometMoveTail = AceType::MakeRefPtr>(0.0, cometTailLen_, Curves::LINEAR); + cometMoveTail->AddListener([weak = AceType::WeakClaim(this)](double value) { + auto loading = weak.Upgrade(); + if (loading) { + loading->cometCurTail_ = value; + if (loading->moveStopId_ != 0 && loading->cometController_) { + loading->cometController_->RemoveStopListener(loading->moveStopId_); + loading->moveStopId_ = 0; + } + } + }); + auto cometMoveDegree = AceType::MakeRefPtr>(MOVE_END, TAIL_END, Curves::LINEAR); + cometMoveDegree->AddListener([weak = AceType::WeakClaim(this)](double value) { + auto loading = weak.Upgrade(); + if (loading) { + double step = loading->cometTailLen_ / loading->cometCount_; + int32_t count = 0; + while (count < loading->cometCount_) { + double curStep = std::min(count * step, value); + if (count < (int32_t)loading->cometParams_.size()) { + loading->cometParams_[count].angular = value - curStep; + } else { + CometParam para; + para.angular = value - curStep; + loading->cometParams_.emplace_back(para); + } + if (count * step >= loading->cometCurTail_) { + break; + } + count++; + } + loading->UpdateCometParams(); + } + }); + cometController_->ClearInterpolators(); + cometController_->AddInterpolator(cometMoveTail); + cometController_->AddInterpolator(cometMoveDegree); + cometController_->SetIteration(1); + cometController_->SetDuration(TAIL_DURATION); + cometController_->SetFillMode(FillMode::FORWARDS); + tailStopId_ = cometController_->AddStopListener([weak = AceType::WeakClaim(this)]() { + auto loading = weak.Upgrade(); + if (loading) { + loading->DoCometLoopAnimation(); + } + }); + cometController_->Play(); +} + +void RenderLoadingProgress::DoCometLoopAnimation() +{ + auto cometLoopDegree = AceType::MakeRefPtr>(TAIL_END, LOOP_END, Curves::LINEAR); + cometLoopDegree->AddListener([weak = AceType::WeakClaim(this)](double value) { + auto loading = weak.Upgrade(); + if (loading) { + int32_t count = 0; + double step = loading->cometTailLen_ / loading->cometCount_; + for (auto& para : loading->cometParams_) { + para.angular = value - count * step; + count++; + } + loading->UpdateCometParams(); + if (loading->tailStopId_ != 0 && loading->cometController_) { + loading->cometController_->RemoveStopListener(loading->tailStopId_); + loading->tailStopId_ = 0; + } + } + }); + cometController_->ClearInterpolators(); + cometController_->AddInterpolator(cometLoopDegree); + cometController_->SetIteration(ANIMATION_REPEAT_INFINITE); + cometController_->SetDuration(LOOP_DURATION); + cometController_->Play(); +} + +void RenderLoadingProgress::UpdateCometParams() +{ + if (cometParams_.empty()) { + return; + } + int32_t count = 0; + float alpha = 0.0f; + for (auto& para : cometParams_) { + if (count == 0) { // Update Head Comet Parameter. + para.scale = GetCometScaleByDegree(para.angular); + para.alpha = floor(UINT8_MAX * GetCometAlphaByDegree(cometParams_[0].angular)); + } else { // Update Tail Comets Parameter. + para.scale = GetCometScaleByDegree(para.angular); + para.alpha = floor(alpha); + } + alpha = para.alpha * TAIL_ALPHA_RATIO; + count++; + } +} + +float RenderLoadingProgress::GetCometScaleByDegree(double degree) +{ + // Scale Curve::LINEAR Degrees( 0 - 180) --> Scale(100% - 65%) + // Scale Curve::LINEAR Degrees(180 - 360) --> Scale( 65% - 100%) + if (degree > 360.0) { + degree = degree - 360.0; + } + if (degree >= 0.0 && degree <= 180.0) { + return 1.0 - 0.35 * degree / 180.0; + } + if (degree >= 180.0 && degree <= 360.0) { + return 0.65 + 0.35 * (degree - 180.0) / 180.0; + } + return 1.0f; +} + +float RenderLoadingProgress::GetCometAlphaByDegree(double degree) +{ + // Alpha Curve::LINEAR Degrees( 0 - 15) --> Alpha(100% - 100%) + // Alpha Curve::LINEAR Degrees( 15 - 180) --> Scale(100% - 20%) + // Alpha Curve::LINEAR Degrees(180 - 345) --> Scale( 20% - 100%) + // Alpha Curve::LINEAR Degrees(345 - 360) --> Scale(100% - 100%) + if (degree > 360.0) { + degree = degree - 360.0; + } + if (degree >= 15.0 && degree <= 180.0) { + return 1.0 - 0.8 * (degree - 15.0) / (180.0 - 15.0); + } else if (degree >= 180.0 && degree <= 345.0) { + return 0.2 + 0.8 * (degree - 180.0) / (345.0 - 180.0); + } else { + return 1.0f; + } +} + +void RenderLoadingProgress::SetLoadingMode(int32_t mode) +{ + if (loadingMode_ == mode) { + return; + } + + LOGI("SetLoadingMode to %{public}d", mode); + loadingMode_ = mode; + if (loadingMode_ != MODE_DRAG) { + return; + } + if (ringController_ && cometController_) { + ringController_->ClearStopListeners(); + cometController_->ClearStopListeners(); + ringController_->Finish(); + cometController_->Finish(); + ringController_ = nullptr; + cometController_ = nullptr; + moveStopId_ = 0; + tailStopId_ = 0; + } + MarkNeedLayout(); +} + +void RenderLoadingProgress::SetDragRange(double minDistance, double maxDistance) +{ + minDistance_ = minDistance; + maxDistance_ = maxDistance; +} + +void RenderLoadingProgress::SetDragDistance(double distance) +{ + distance = std::clamp(distance, minDistance_, maxDistance_); + if (NearEqual(curDistance_, distance)) { + return; + } + curDistance_ = distance; + double precent = (curDistance_ - minDistance_) / (maxDistance_ - minDistance_); + double scale = RING_SCALE_BEGIN + RING_SCALE_RANGE * precent; + switch (loadingMode_) { + case MODE_LOOP: { + return; + } + case MODE_DRAG: { + exitScale_ = 1.0; + exitAlpha_ = 1.0; + dragScale_ = scale; + dragAlpha_ = precent; + // Update Comet Para when drag distance changed. + CometParam para; + para.alpha = floor(UINT8_MAX * dragAlpha_); + para.angular = DRAG_ANGLE_BEGIN + DRAG_ANGLE_RANGE * precent; + if (para.angular < 0.0) { + para.angular = para.angular + 360.0; + } + cometParams_.clear(); + cometParams_.emplace_back(para); + break; + } + case MODE_EXIT: { + dragScale_ = 1.0; + dragAlpha_ = 1.0; + exitScale_ = scale; + exitAlpha_ = precent; + break; + } + default: { + LOGW("Unsupported loading mode:%{public}d.", loadingMode_); + break; + } + } + MarkNeedRender(); +} + +void RenderLoadingProgress::PerformLayout() +{ + // the diameter will be constrain by layout size. + Size layoutSize; + if (!NearEqual(diameter_, 0.0)) { + layoutSize = GetLayoutParam().Constrain(Size(diameter_, diameter_)); + } else { + if (GetLayoutParam().GetMaxSize().IsInfinite()) { + double defaultDiameter = 0.0; + auto theme = GetTheme(); + if (theme) { + defaultDiameter = NormalizeToPx(theme->GetLoadingDiameter()); + } + layoutSize = Size(defaultDiameter, defaultDiameter); + } else { + layoutSize = GetLayoutParam().GetMaxSize(); + } + } + SetLayoutSize(layoutSize); + UpdateLoadingSize(std::min(layoutSize.Width(), layoutSize.Height())); + center_ = Offset(layoutSize.Width() / CENTER_POINT, layoutSize.Height() / CENTER_POINT); + scale_ = std::min(layoutSize.Width() / (orbitRadius_ + cometRadius_) / CENTER_POINT, + layoutSize.Height() / ringRadius_ / CENTER_POINT); + auto pipelineContext = GetContext().Upgrade(); + if (pipelineContext && loadingMode_ != MODE_DRAG && !ringController_ && !cometController_) { + ringController_ = AceType::MakeRefPtr(pipelineContext); + cometController_ = AceType::MakeRefPtr(pipelineContext); + UpdateRingAnimation(); + UpdateCometAnimation(); + } +} + +void RenderLoadingProgress::UpdateLoadingSize(double diameter) +{ + if (diameter <= NormalizeToPx(MODE_SMALL)) { + CalculateValue(START_POINT, START_POINT); + } else if (diameter <= NormalizeToPx(MODE_MIDDLE)) { + CalculateValue(START_POINT, MIDDLE_POINT, + (diameter - NormalizeToPx(MODE_SMALL)) / (NormalizeToPx(MODE_MIDDLE) - NormalizeToPx(MODE_SMALL))); + } else if (diameter <= NormalizeToPx(MODE_LARGE)) { + CalculateValue(MIDDLE_POINT, END_POINT, + (diameter - NormalizeToPx(MODE_MIDDLE)) / (NormalizeToPx(MODE_LARGE) - NormalizeToPx(MODE_MIDDLE))); + } else { + CalculateValue(END_POINT, END_POINT); + } +} + +void RenderLoadingProgress::CalculateValue(int32_t start, int32_t end, double precent) +{ + if (start == end) { + ringWidth_ = NormalizeToPx(MODE_RING_WIDTH[start]); + cometRadius_ = NormalizeToPx(MODE_COMET_RADIUS[start]); + ringBlurRadius_ = NormalizeToPx(MODE_RING_BLUR_RADIUS[start]); + ringBgWidth_ = NormalizeToPx(MODE_RING_BG_WIDTH[start]); + ringBgBlurRadius_ = NormalizeToPx(MODE_RING_BG_BLUR_RADIUS[start]); + } else { + ringWidth_ = NormalizeToPx(MODE_RING_WIDTH[start] + + (MODE_RING_WIDTH[end] - MODE_RING_WIDTH[start]) * precent); + cometRadius_ = NormalizeToPx(MODE_COMET_RADIUS[start] + + (MODE_COMET_RADIUS[end] - MODE_COMET_RADIUS[start]) * precent); + ringBlurRadius_ = NormalizeToPx(MODE_RING_BLUR_RADIUS[start] + + (MODE_RING_BLUR_RADIUS[end] - MODE_RING_BLUR_RADIUS[start]) * precent); + ringBgWidth_ = NormalizeToPx(MODE_RING_BG_WIDTH[start] + + (MODE_RING_BG_WIDTH[end] - MODE_RING_BG_WIDTH[start]) * precent); + ringBgBlurRadius_ = NormalizeToPx(MODE_RING_BG_BLUR_RADIUS[start] + + (MODE_RING_BG_BLUR_RADIUS[end] - MODE_RING_BG_BLUR_RADIUS[start]) * precent); + } +} + +void RenderLoadingProgress::OnVisibleChanged() +{ + AnimationChanged(); +} + +void RenderLoadingProgress::OnHiddenChanged(bool hidden) +{ + AnimationChanged(); +} + +void RenderLoadingProgress::AnimationChanged() +{ + if (GetVisible() && !GetHidden()) { + if (ringController_) { + ringController_->Play(); + } + if (cometController_) { + cometController_->Play(); + } + } else { + if (ringController_) { + ringController_->Pause(); + } + if (cometController_) { + cometController_->Pause(); + } + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/progress/render_loading_progress.h b/frameworks/core/components/progress/render_loading_progress.h new file mode 100644 index 00000000..7184a5ca --- /dev/null +++ b/frameworks/core/components/progress/render_loading_progress.h @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PROGRESS_RENDER_LOADING_PROGRESS_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PROGRESS_RENDER_LOADING_PROGRESS_H + +#include + +#include "core/animation/animator.h" +#include "core/animation/picture_animation.h" +#include "core/components/progress/loading_progress_component.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +constexpr int32_t TOTAL_FRAME_NUMBER = 60; +constexpr int32_t MODE_DRAG = 0; +constexpr int32_t MODE_LOOP = 1; +constexpr int32_t MODE_EXIT = 2; + +class RenderLoadingProgress : public RenderNode { + DECLARE_ACE_TYPE(RenderLoadingProgress, RenderNode); + +public: + RenderLoadingProgress(); + ~RenderLoadingProgress() override = default; + + void Update(const RefPtr& component) override; + + void SetDiameter(double diameter) + { + diameter_ = diameter; + } + + int32_t GetLoadingMode() const + { + return loadingMode_; + } + + void SetLoadingMode(int32_t mode); + + void SetDragRange(double minDistance, double maxDistance); + + void SetDragDistance(double distance); + + void PerformLayout() override; + + static RefPtr Create(); + +protected: + void CalculateCirclePosition(); + void OnVisibleChanged() override; + void OnHiddenChanged(bool hidden) override; + void AnimationChanged(); + + void UpdateLoadingSize(double diameter); + void CalculateValue(int32_t start, int32_t end, double precent = 1.0); + void UpdateRingAnimation(); + void UpdateCometAnimation(); + void DoCometTailAnimation(); + void DoCometLoopAnimation(); + void UpdateCometParams(); + float GetCometScaleByDegree(double degree); + float GetCometAlphaByDegree(double degree); + + Offset center_; + double diameter_ = 0.0; + RefPtr ringController_; + RefPtr cometController_; + + // Prop for refresh. + int32_t loadingMode_ = MODE_LOOP; + double minDistance_ = 0.0; + double maxDistance_ = 0.0; + double curDistance_ = 0.0; + double dragScale_ = 1.0; // Scale effect for ring + double dragAlpha_ = 1.0; // Alpha effect for ring and comet + double exitScale_ = 1.0; // Scale effect for ring and comet when exit from refresh. + double exitAlpha_ = 1.0; // Alpha effect for ring and comet when exit from refresh. + + double scale_ = 1.0; + double moveRatio_ = MOVE_RATIO; + double ringWidth_ = 0.0; + double ringRadius_ = 0.0; + Offset ringOffset_; + struct CometParam { + uint8_t alpha = UINT8_MAX; + double scale = 1.0; + double angular = 0.0; + }; + std::vector cometParams_; + double orbitRadius_ = 0.0; + double cometRadius_ = 0.0; + uint8_t cometAlpha_ = UINT8_MAX; + int32_t cometCount_ = COMET_COUNT; + double cometCurTail_ = 0.0; + double cometTailLen_ = COMET_TAIL_LEN; + BaseId::IdType moveStopId_ = 0; + BaseId::IdType tailStopId_ = 0; + Color progressColor_ = PROGRESS_COLOR; // When Dark: Color(0xffffffff) + + // Use when Dark/night Mode. + double ringBgWidth_ = 0.0; + double ringBlurRadius_ = 0.0; + double ringBgBlurRadius_ = 0.0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PROGRESS_RENDER_LOADING_PROGRESS_H diff --git a/frameworks/core/components/progress/render_progress.cpp b/frameworks/core/components/progress/render_progress.cpp new file mode 100644 index 00000000..0aa97952 --- /dev/null +++ b/frameworks/core/components/progress/render_progress.cpp @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/progress/render_progress.h" + +namespace OHOS::Ace { + +void RenderProgress::Update(const RefPtr& component) +{ + const RefPtr progress = AceType::DynamicCast(component); + component_ = progress; + min_ = progress->GetMinValue(); + max_ = progress->GetMaxValue(); + value_ = progress->GetValue(); + cachedValue_ = progress->GetCachedValue(); + trackThickness_ = NormalizeToPx(progress->GetTrack()->GetTrackThickness()); + + type_ = progress->GetType(); + isError_ = false; + if (min_ >= max_ || value_ > max_ || value_ < min_ || cachedValue_ < min_ || cachedValue_ > max_) { + isError_ = true; + LOGE("Progress::RenderProgress update min, max, value, step, cachedValue error"); + return; + } + LOGD("Progress::RenderProgress update Min: %{private}lf max: %{private}lf value: %{private}lf, cachedValue: " + "%{private}lf", min_, max_, value_, cachedValue_); + totalRatio_ = (value_ - min_) / (max_ - min_); + cachedRatio_ = (cachedValue_ - min_) / (max_ - min_); + MarkNeedLayout(); +} + +void RenderProgress::OnPaintFinish() +{ + UpdateAccessibilityAttr(); +} + +void RenderProgress::UpdateAccessibilityAttr() +{ + if (!component_) { + return; + } + auto accessibilityNode = GetAccessibilityNode().Upgrade(); + if (!accessibilityNode) { + return; + } + accessibilityNode->SetAccessibilityValue(value_, min_, max_); + auto context = context_.Upgrade(); + if (context) { + AccessibilityEvent progressEvent; + progressEvent.nodeId = accessibilityNode->GetNodeId(); + progressEvent.eventType = "selected"; + progressEvent.componentType = "progress"; + progressEvent.currentItemIndex = value_; + progressEvent.itemCount = max_ - min_; + context->SendEventToAccessibility(progressEvent); + } +} + +void RenderProgress::PerformLayout() +{ + Size size = Measure(); + SetLayoutSize(size); +} + +Size RenderProgress::Measure() +{ + Size layoutSize; + for (const auto& item : GetChildren()) { + item->Layout(GetLayoutParam()); + if (layoutSize.Width() < item->GetLayoutSize().Width()) { + layoutSize.SetWidth(item->GetLayoutSize().Width()); + } + if (layoutSize.Height() < item->GetLayoutSize().Height()) { + layoutSize.SetHeight(item->GetLayoutSize().Height()); + } + } + return layoutSize; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/progress/render_progress.h b/frameworks/core/components/progress/render_progress.h new file mode 100644 index 00000000..4173bb85 --- /dev/null +++ b/frameworks/core/components/progress/render_progress.h @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PROGRESS_RENDER_PROGRESS_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PROGRESS_RENDER_PROGRESS_H + +#include "core/components/progress/progress_component.h" +#include "core/pipeline/base/component.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +constexpr double PROGRESS_DEFAULT_VALUE = 0.0; +constexpr double PROGRESS_DEFAULT_MAX = 1.0; +constexpr double PROGRESS_DEFAULT_MIN = 0.0; +constexpr double PROGRESS_DEFAULT_CACHED_VALUE = 0.0; + +class RenderProgress : public RenderNode { + DECLARE_ACE_TYPE(RenderProgress, RenderNode); + +public: + static RefPtr Create(); + void Update(const RefPtr& component) override; + void PerformLayout() override; + void OnPaintFinish() override; + + bool GetErrorBit() const + { + return isError_; + } + +protected: + Size Measure(); + // TRACK length + double totalRatio_ = 0.0; + double cachedRatio_ = 0.0; + double trackThickness_ = 0.0; + + // vp to logical pixel + double scale_ = 0.0; + ProgressType type_ = ProgressType::LINEAR; + +private: + void UpdateAccessibilityAttr(); + + RefPtr component_; + double value_ = PROGRESS_DEFAULT_VALUE; + double max_ = PROGRESS_DEFAULT_MAX; + double min_ = PROGRESS_DEFAULT_MIN; + double cachedValue_ = PROGRESS_DEFAULT_CACHED_VALUE; + + bool isError_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PROGRESS_RENDER_PROGRESS_H diff --git a/frameworks/core/components/proxy/BUILD.gn b/frameworks/core/components/proxy/BUILD.gn new file mode 100644 index 00000000..e46a6579 --- /dev/null +++ b/frameworks/core/components/proxy/BUILD.gn @@ -0,0 +1,22 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("proxy") { + sources = [ + "flutter_render_item_proxy.cpp", + "render_item_proxy.cpp", + "render_proxy.cpp", + ] +} diff --git a/frameworks/core/components/proxy/flutter_render_item_proxy.cpp b/frameworks/core/components/proxy/flutter_render_item_proxy.cpp new file mode 100644 index 00000000..f3f4ee22 --- /dev/null +++ b/frameworks/core/components/proxy/flutter_render_item_proxy.cpp @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/proxy/flutter_render_item_proxy.h" + +#include "core/pipeline/base/flutter_render_context.h" +#include "core/pipeline/layers/transform_layer.h" + +namespace OHOS::Ace { + +using namespace Flutter; + +RefPtr RenderItemProxy::Create() +{ + return AceType::MakeRefPtr(); +} + +FlutterRenderItemProxy::FlutterRenderItemProxy() : RenderItemProxy() {} + +RenderLayer FlutterRenderItemProxy::GetRenderLayer() +{ + if (!IsRepaintBoundary()) { + layer_.Reset(); + return nullptr; + } + if (!layer_) { + matrix_ = Matrix4::CreateScale(1.0, 1.0, 1.0); + layer_ = AceType::MakeRefPtr(matrix_, 0.0, 0.0); + } + return AceType::RawPtr(layer_); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/proxy/flutter_render_item_proxy.h b/frameworks/core/components/proxy/flutter_render_item_proxy.h new file mode 100644 index 00000000..b607de75 --- /dev/null +++ b/frameworks/core/components/proxy/flutter_render_item_proxy.h @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PROXY_FLUTTER_RENDER_ITEM_PROXY_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PROXY_FLUTTER_RENDER_ITEM_PROXY_H + +#include "base/geometry/matrix4.h" +#include "core/components/proxy/render_item_proxy.h" +#include "core/pipeline/layers/layer.h" + +namespace OHOS::Ace { + +class FlutterRenderItemProxy : public RenderItemProxy { + DECLARE_ACE_TYPE(FlutterRenderItemProxy, RenderItemProxy); + +public: + FlutterRenderItemProxy(); + ~FlutterRenderItemProxy() override = default; + + RenderLayer GetRenderLayer() override; + + bool IsRepaintBoundary() const override + { + auto child = GetFirstChild(); + if (child && child->IsRepaintBoundary()) { + return false; + } + return true; + } + +private: + Matrix4 matrix_; + RefPtr layer_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PROXY_FLUTTER_RENDER_ITEM_PROXY_H diff --git a/frameworks/core/components/proxy/render_item_proxy.cpp b/frameworks/core/components/proxy/render_item_proxy.cpp new file mode 100644 index 00000000..8719a256 --- /dev/null +++ b/frameworks/core/components/proxy/render_item_proxy.cpp @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/proxy/render_item_proxy.h" + +namespace OHOS::Ace { + +void RenderItemProxy::OnChildRemoved(const RefPtr& child) +{ + // If all its child is removed, then unmount itself. + if (GetChildren().empty()) { + Unmount(); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/proxy/render_item_proxy.h b/frameworks/core/components/proxy/render_item_proxy.h new file mode 100644 index 00000000..06d2731d --- /dev/null +++ b/frameworks/core/components/proxy/render_item_proxy.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PROXY_RENDER_ITEM_PROXY_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PROXY_RENDER_ITEM_PROXY_H + +#include "core/components/proxy/render_proxy.h" + +namespace OHOS::Ace { + +class RenderItemProxy : public RenderProxy { + DECLARE_ACE_TYPE(RenderItemProxy, RenderProxy); + +public: + static RefPtr Create(); + +private: + void OnChildRemoved(const RefPtr& child) override; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PROXY_RENDER_ITEM_PROXY_H diff --git a/frameworks/core/components/proxy/render_proxy.cpp b/frameworks/core/components/proxy/render_proxy.cpp new file mode 100644 index 00000000..7ae06a1b --- /dev/null +++ b/frameworks/core/components/proxy/render_proxy.cpp @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/proxy/render_proxy.h" + +namespace OHOS::Ace { + +RefPtr RenderProxy::Create() +{ + return AceType::MakeRefPtr(); +} + +void RenderProxy::PerformLayout() +{ + if (GetLayoutParam().GetMaxSize() < viewPort_) { + // Use smaller one of parent's viewPort and layoutParam max size. + viewPort_ = GetLayoutParam().GetMaxSize(); + } + Size layoutSize; + const auto& children = GetChildren(); + if (!children.empty()) { + auto child = children.front(); + child->Layout(GetLayoutParam()); + child->SetPosition(Offset::Zero()); + layoutSize = child->GetLayoutSize(); + } + SetLayoutSize(layoutSize); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/proxy/render_proxy.h b/frameworks/core/components/proxy/render_proxy.h new file mode 100644 index 00000000..4536f8f4 --- /dev/null +++ b/frameworks/core/components/proxy/render_proxy.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PROXY_RENDER_PROXY_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PROXY_RENDER_PROXY_H + +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderProxy : public RenderNode { + DECLARE_ACE_TYPE(RenderProxy, RenderNode); + +public: + explicit RenderProxy(bool takeBoundary = false) : RenderNode(takeBoundary) {} + ~RenderProxy() override = default; + + static RefPtr Create(); + + void Update(const RefPtr& component) override {} + + void PerformLayout() override; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_PROXY_RENDER_PROXY_H diff --git a/frameworks/core/components/qrcode/BUILD.gn b/frameworks/core/components/qrcode/BUILD.gn new file mode 100644 index 00000000..b3bba1df --- /dev/null +++ b/frameworks/core/components/qrcode/BUILD.gn @@ -0,0 +1,54 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +qrcodegen_src_dir = "//third_party/qrcodegen/cpp" +qrcodegen_dst_dir = root_out_dir + "/qrcode" +action("apply_patch") { + visibility = [ ":*" ] + script = "applypatch.sh" + inputs = [ qrcodegen_src_dir ] + outputs = [ "$qrcodegen_dst_dir/QrCode.cpp" ] + args = [ + rebase_path(qrcodegen_src_dir, root_build_dir), + rebase_path(qrcodegen_dst_dir, root_build_dir), + rebase_path("qrcode_patch2.patch", root_build_dir), + ] +} + +config("qrcodegen_config") { + include_dirs = [ "$qrcodegen_dst_dir" ] +} + +source_set("qrcodegen") { + deps = [ ":apply_patch" ] + sources = [ "$qrcodegen_dst_dir/QrCode.cpp" ] + cflags = [ + "-Wall", + "-Wno-reorder", + ] + cflags_cc = cflags + + public_configs = [ ":qrcodegen_config" ] +} + +build_component("qrcode") { + sources = [ + "flutter_render_qrcode.cpp", + "qrcode_component.cpp", + "render_qrcode.cpp", + ] + + deps = [ ":qrcodegen" ] +} diff --git a/frameworks/core/components/qrcode/applypatch.sh b/frameworks/core/components/qrcode/applypatch.sh new file mode 100755 index 00000000..79701ec9 --- /dev/null +++ b/frameworks/core/components/qrcode/applypatch.sh @@ -0,0 +1,31 @@ +#!/bin/bash +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -e +if [ "$1" == "" ] || [ "$2" == "" ] || [ "$3" == "" ]; then + exit 1 +fi + +if [ -d "$2" ]; then + rm -rf "$2" +fi + +PATCH_FILE=$(cd $(dirname $3) && pwd)"/"$(basename $3) + +cp -r "$1" "$2" +if [ $? -ne 0 ]; then + exit 1 +fi + +patch -p 2 -i $PATCH_FILE -d "$2" \ No newline at end of file diff --git a/frameworks/core/components/qrcode/flutter_render_qrcode.cpp b/frameworks/core/components/qrcode/flutter_render_qrcode.cpp new file mode 100644 index 00000000..a716455c --- /dev/null +++ b/frameworks/core/components/qrcode/flutter_render_qrcode.cpp @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/qrcode/flutter_render_qrcode.h" + +#include "third_party/skia/include/core/SkCanvas.h" + +#include "core/pipeline/base/flutter_render_context.h" +#include "core/pipeline/base/scoped_canvas_state.h" +#include "core/pipeline/pipeline_context.h" + +namespace OHOS::Ace { + +RefPtr RenderQrcode::Create() +{ + return AceType::MakeRefPtr(); +} + +void FlutterRenderQrcode::Paint(RenderContext& context, const Offset& offset) +{ + auto qrCode = qrcodegen::QrCode::encodeText(value_.c_str(), qrcodegen::QrCode::Ecc::LOW); + if (!qrCode.getFlag() || qrCode.getSize() == 0 || width_ <= 0 || width_ < qrCode.getSize()) { + LOGE("FlutterRenderQrcode::DrawQRCode qrcode create error"); + return; + } + int32_t blockWidth = width_ / qrCode.getSize(); + int32_t sizeInPixel = blockWidth * qrCode.getSize(); + auto qrOffset = Alignment::GetAlignPosition(Size(width_, height_), Size(sizeInPixel, sizeInPixel), + Alignment::CENTER); + DrawQRCode(context, offset + qrOffset, sizeInPixel, qrCode); +} + +void FlutterRenderQrcode::DrawQRCode(RenderContext& context, const Offset& topLeft, int32_t size, + const qrcodegen::QrCode& qrCode) +{ + auto canvas = ScopedCanvas::Create(context); + if (!canvas) { + LOGE("Paint canvas is null"); + return; + } + if (qrcodeType_ == QrcodeType::CIRCLE) { + SkRect clipRect = { topLeft.GetX(), topLeft.GetY(), topLeft.GetX() + size, topLeft.GetY() + size }; + auto clipLayer = SkRRect::MakeRectXY(clipRect, size / 2, size / 2); + canvas->canvas()->clipRRect(clipLayer, SkClipOp::kIntersect, true); + } + canvas->canvas()->drawBitmap(ProcessQrcodeData(size, qrCode), topLeft.GetX(), topLeft.GetY()); + if (qrcodeType_ == QrcodeType::CIRCLE) { + int32_t smallSquareWidth = size / sqrt(2); + canvas->canvas()->drawBitmap(ProcessQrcodeData(smallSquareWidth, qrCode), + topLeft.GetX() + (size - smallSquareWidth) / 2, topLeft.GetY() + (size - smallSquareWidth) / 2); + } +} + +uint32_t FlutterRenderQrcode::ConvertColorFromHighToLow(const Color& color) +{ + BGRA convertedColor; + convertedColor.argb.blue = color.GetBlue(); + convertedColor.argb.green = color.GetGreen(); + convertedColor.argb.red = color.GetRed(); + convertedColor.argb.alpha = color.GetAlpha(); + return convertedColor.value; +} + +SkBitmap FlutterRenderQrcode::ProcessQrcodeData(int32_t width, const qrcodegen::QrCode& qrCode) +{ + // each block width may smaller the width / qrCode.getSize(), because of precision loss. + auto imageInfo = SkImageInfo::Make(width, width, SkColorType::kRGBA_8888_SkColorType, + SkAlphaType::kOpaque_SkAlphaType); + SkBitmap skBitmap; + skBitmap.allocPixels(imageInfo); + void* rawData = skBitmap.getPixels(); + int32_t* data = reinterpret_cast(rawData); + int32_t blockWidth = width / qrCode.getSize(); + for (int32_t i = 0; i < width; i++) { + for (int32_t j = 0; j < width; j++) { + data[i * width + j] = qrCode.getModule(i / blockWidth, j / blockWidth) ? + ConvertColorFromHighToLow(qrcodeColor_) : + ConvertColorFromHighToLow(backgroundColor_); + } + } + return skBitmap; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/qrcode/flutter_render_qrcode.h b/frameworks/core/components/qrcode/flutter_render_qrcode.h new file mode 100644 index 00000000..488f0dd3 --- /dev/null +++ b/frameworks/core/components/qrcode/flutter_render_qrcode.h @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_QRCODE_FLUTTER_RENDER_QRCODE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_QRCODE_FLUTTER_RENDER_QRCODE_H + +#include "QrCode.hpp" + +#include "flutter/lib/ui/painting/canvas.h" + +#include "core/components/qrcode/render_qrcode.h" + +namespace OHOS::Ace { + +class FlutterRenderQrcode : public RenderQrcode { + DECLARE_ACE_TYPE(FlutterRenderQrcode, RenderQrcode); + +union BGRA { + struct { + uint8_t red; + uint8_t green; + uint8_t blue; + uint8_t alpha; + } argb; + + uint32_t value; +}; + +public: + FlutterRenderQrcode() = default; + ~FlutterRenderQrcode() override = default; + + void Paint(RenderContext& context, const Offset& offset) override; + void DrawQRCode(RenderContext& context, const Offset& topLeft, int32_t size, const qrcodegen::QrCode& qrCode); + uint32_t ConvertColorFromHighToLow(const Color& color); + SkBitmap ProcessQrcodeData(int32_t width, const qrcodegen::QrCode& qrCode); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_QRCODE_FLUTTER_RENDER_QRCODE_H diff --git a/frameworks/core/components/qrcode/qrcode_component.cpp b/frameworks/core/components/qrcode/qrcode_component.cpp new file mode 100644 index 00000000..57600e17 --- /dev/null +++ b/frameworks/core/components/qrcode/qrcode_component.cpp @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/qrcode/qrcode_component.h" + +#include "core/components/qrcode/qrcode_element.h" +#include "core/components/qrcode/render_qrcode.h" + +namespace OHOS::Ace { + +QrcodeComponent::QrcodeComponent() : SoleChildComponent() {} + +RefPtr QrcodeComponent::CreateRenderNode() +{ + return RenderQrcode::Create(); +} + +RefPtr QrcodeComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/qrcode/qrcode_component.h b/frameworks/core/components/qrcode/qrcode_component.h new file mode 100644 index 00000000..73d755ee --- /dev/null +++ b/frameworks/core/components/qrcode/qrcode_component.h @@ -0,0 +1,128 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_QRCODE_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_QRCODE_COMPONENT_H + +#include "base/geometry/dimension.h" +#include "core/components/common/layout/constants.h" +#include "core/pipeline/base/sole_child_component.h" + +namespace OHOS::Ace { + +class ACE_EXPORT QrcodeComponent : public SoleChildComponent { + DECLARE_ACE_TYPE(QrcodeComponent, SoleChildComponent); + +public: + QrcodeComponent(); + ~QrcodeComponent() override = default; + + RefPtr CreateRenderNode() override; + RefPtr CreateElement() override; + + const std::string& GetValue() const + { + return value_; + } + + const Color& GetBackgroundColor() const + { + return backgroundColor_; + } + + const Color& GetQrcodeColor() const + { + return qrcodeColor_; + } + + QrcodeType GetType() const + { + return qrcodeType_; + } + + const Dimension& GetQrcodeWidth() const + { + return qrcodeWidth_; + } + + const Dimension& GetQrcodeHeight() const + { + return qrcodeHeight_; + } + + bool IsWidthDefined() const + { + return isWidthDefined_; + } + + bool IsHeightDefined() const + { + return isHeightDefined_; + } + + void SetValue(const std::string& value) + { + value_ = value; + } + + void SetBackgroundColor(const Color& backgroundColor) + { + backgroundColor_ = backgroundColor; + } + + void SetQrcodeColor(const Color& qrcodeColor) + { + qrcodeColor_ = qrcodeColor; + } + + void SetQrcodeType(QrcodeType qrcodeType) + { + qrcodeType_ = qrcodeType; + } + + void SetQrcodeWidth(const Dimension& qrcodeWidth) + { + qrcodeWidth_ = qrcodeWidth; + } + + void SetQrcodeHeight(const Dimension& qrcodeHeight) + { + qrcodeHeight_ = qrcodeHeight; + } + + void SetWidthDefined(bool isWidthDefined) + { + isWidthDefined_ = isWidthDefined; + } + + void SetHeightDefined(bool isHeightDefined) + { + isHeightDefined_ = isHeightDefined; + } + +private: + std::string value_; + Color backgroundColor_; + Color qrcodeColor_; + QrcodeType qrcodeType_ { QrcodeType::RECT }; + Dimension qrcodeWidth_; + Dimension qrcodeHeight_; + bool isWidthDefined_ = false; + bool isHeightDefined_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_QRCODE_COMPONENT_H diff --git a/frameworks/core/components/qrcode/qrcode_element.h b/frameworks/core/components/qrcode/qrcode_element.h new file mode 100644 index 00000000..2887cc7e --- /dev/null +++ b/frameworks/core/components/qrcode/qrcode_element.h @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_ELEMENTS_QRCODE_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_ELEMENTS_QRCODE_ELEMENT_H + +#include "core/components/qrcode/qrcode_component.h" +#include "core/components/qrcode/render_qrcode.h" +#include "core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +class QrcodeElement : public SoleChildElement, public FocusNode { + DECLARE_ACE_TYPE(QrcodeElement, SoleChildElement, FocusNode); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ELEMENTS_QRCODE_ELEMENT_H diff --git a/frameworks/core/components/qrcode/qrcode_patch2.patch b/frameworks/core/components/qrcode/qrcode_patch2.patch new file mode 100644 index 00000000..c5428a98 --- /dev/null +++ b/frameworks/core/components/qrcode/qrcode_patch2.patch @@ -0,0 +1,1008 @@ +diff --git a/cpp/QrCode.cpp b/cpp/QrCode.cpp +index b9de862..e7ae0c2 100755 +--- a/cpp/QrCode.cpp ++++ b/cpp/QrCode.cpp +@@ -57,66 +57,14 @@ int QrSegment::Mode::numCharCountBits(int ver) const { + } + + +-const QrSegment::Mode QrSegment::Mode::NUMERIC (0x1, 10, 12, 14); +-const QrSegment::Mode QrSegment::Mode::ALPHANUMERIC(0x2, 9, 11, 13); +-const QrSegment::Mode QrSegment::Mode::BYTE (0x4, 8, 16, 16); +-const QrSegment::Mode QrSegment::Mode::KANJI (0x8, 8, 10, 12); +-const QrSegment::Mode QrSegment::Mode::ECI (0x7, 0, 0, 0); + + + QrSegment QrSegment::makeBytes(const vector &data) { +- if (data.size() > static_cast(INT_MAX)) +- throw std::length_error("Data too long"); + BitBuffer bb; + for (uint8_t b : data) + bb.appendBits(b, 8); +- return QrSegment(Mode::BYTE, static_cast(data.size()), std::move(bb)); +-} +- +- +-QrSegment QrSegment::makeNumeric(const char *digits) { +- BitBuffer bb; +- int accumData = 0; +- int accumCount = 0; +- int charCount = 0; +- for (; *digits != '\0'; digits++, charCount++) { +- char c = *digits; +- if (c < '0' || c > '9') +- throw std::domain_error("String contains non-numeric characters"); +- accumData = accumData * 10 + (c - '0'); +- accumCount++; +- if (accumCount == 3) { +- bb.appendBits(static_cast(accumData), 10); +- accumData = 0; +- accumCount = 0; +- } +- } +- if (accumCount > 0) // 1 or 2 digits remaining +- bb.appendBits(static_cast(accumData), accumCount * 3 + 1); +- return QrSegment(Mode::NUMERIC, charCount, std::move(bb)); +-} +- +- +-QrSegment QrSegment::makeAlphanumeric(const char *text) { +- BitBuffer bb; +- int accumData = 0; +- int accumCount = 0; +- int charCount = 0; +- for (; *text != '\0'; text++, charCount++) { +- const char *temp = std::strchr(ALPHANUMERIC_CHARSET, *text); +- if (temp == nullptr) +- throw std::domain_error("String contains unencodable characters in alphanumeric mode"); +- accumData = accumData * 45 + static_cast(temp - ALPHANUMERIC_CHARSET); +- accumCount++; +- if (accumCount == 2) { +- bb.appendBits(static_cast(accumData), 11); +- accumData = 0; +- accumCount = 0; +- } +- } +- if (accumCount > 0) // 1 character remaining +- bb.appendBits(static_cast(accumData), 6); +- return QrSegment(Mode::ALPHANUMERIC, charCount, std::move(bb)); ++ Mode md(0x4, 8, 16, 16); ++ return QrSegment(md, static_cast(data.size()), std::move(bb)); + } + + +@@ -124,10 +72,6 @@ vector QrSegment::makeSegments(const char *text) { + // Select the most efficient segment encoding automatically + vector result; + if (*text == '\0'); // Leave result empty +- else if (isNumeric(text)) +- result.push_back(makeNumeric(text)); +- else if (isAlphanumeric(text)) +- result.push_back(makeAlphanumeric(text)); + else { + vector bytes; + for (; *text != '\0'; text++) +@@ -138,39 +82,12 @@ vector QrSegment::makeSegments(const char *text) { + } + + +-QrSegment QrSegment::makeEci(long assignVal) { +- BitBuffer bb; +- if (assignVal < 0) +- throw std::domain_error("ECI assignment value out of range"); +- else if (assignVal < (1 << 7)) +- bb.appendBits(static_cast(assignVal), 8); +- else if (assignVal < (1 << 14)) { +- bb.appendBits(2, 2); +- bb.appendBits(static_cast(assignVal), 14); +- } else if (assignVal < 1000000L) { +- bb.appendBits(6, 3); +- bb.appendBits(static_cast(assignVal), 21); +- } else +- throw std::domain_error("ECI assignment value out of range"); +- return QrSegment(Mode::ECI, 0, std::move(bb)); +-} +- +- +-QrSegment::QrSegment(Mode md, int numCh, const std::vector &dt) : +- mode(md), +- numChars(numCh), +- data(dt) { +- if (numCh < 0) +- throw std::domain_error("Invalid value"); +-} + + + QrSegment::QrSegment(Mode md, int numCh, std::vector &&dt) : + mode(md), + numChars(numCh), + data(std::move(dt)) { +- if (numCh < 0) +- throw std::domain_error("Invalid value"); + } + + +@@ -191,24 +108,6 @@ int QrSegment::getTotalBits(const vector &segs, int version) { + } + + +-bool QrSegment::isAlphanumeric(const char *text) { +- for (; *text != '\0'; text++) { +- if (std::strchr(ALPHANUMERIC_CHARSET, *text) == nullptr) +- return false; +- } +- return true; +-} +- +- +-bool QrSegment::isNumeric(const char *text) { +- for (; *text != '\0'; text++) { +- char c = *text; +- if (c < '0' || c > '9') +- return false; +- } +- return true; +-} +- + + QrSegment::Mode QrSegment::getMode() const { + return mode; +@@ -225,8 +124,6 @@ const std::vector &QrSegment::getData() const { + } + + +-const char *QrSegment::ALPHANUMERIC_CHARSET = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:"; +- + + + int QrCode::getFormatBits(Ecc ecl) { +@@ -235,48 +132,36 @@ int QrCode::getFormatBits(Ecc ecl) { + case Ecc::MEDIUM : return 0; + case Ecc::QUARTILE: return 3; + case Ecc::HIGH : return 2; +- default: throw std::logic_error("Assertion error"); ++ default: return -1; //This scenario does not exist after adaptation. + } + } + + + QrCode QrCode::encodeText(const char *text, Ecc ecl) { + vector segs = QrSegment::makeSegments(text); +- return encodeSegments(segs, ecl); ++ return encodeSegments(segs, ecl, MIN_VERSION, MAX_VERSION, 5); + } + + +-QrCode QrCode::encodeBinary(const vector &data, Ecc ecl) { +- vector segs{QrSegment::makeBytes(data)}; +- return encodeSegments(segs, ecl); +-} + + + QrCode QrCode::encodeSegments(const vector &segs, Ecc ecl, + int minVersion, int maxVersion, int mask, bool boostEcl) { +- if (!(MIN_VERSION <= minVersion && minVersion <= maxVersion && maxVersion <= MAX_VERSION) || mask < -1 || mask > 7) +- throw std::invalid_argument("Invalid value"); + + // Find the minimal version number to use + int version, dataUsedBits; ++ vector dataCodewordsTemp; + for (version = minVersion; ; version++) { + int dataCapacityBits = getNumDataCodewords(version, ecl) * 8; // Number of data bits available + dataUsedBits = QrSegment::getTotalBits(segs, version); + if (dataUsedBits != -1 && dataUsedBits <= dataCapacityBits) + break; // This version number is found to be suitable + if (version >= maxVersion) { // All versions in the range could not fit the given data +- std::ostringstream sb; +- if (dataUsedBits == -1) +- sb << "Segment too long"; +- else { +- sb << "Data length = " << dataUsedBits << " bits, "; +- sb << "Max capacity = " << dataCapacityBits << " bits"; +- } +- throw data_too_long(sb.str()); ++ return QrCode(ERR_VERSION, ecl, dataCodewordsTemp, mask); + } + } + if (dataUsedBits == -1) +- throw std::logic_error("Assertion error"); ++ return QrCode(ERR_VERSION, ecl, dataCodewordsTemp, mask); + + // Increase the error correction level while the data still fits in the current version number + for (Ecc newEcl : vector{Ecc::MEDIUM, Ecc::QUARTILE, Ecc::HIGH}) { // From low to high +@@ -292,16 +177,16 @@ QrCode QrCode::encodeSegments(const vector &segs, Ecc ecl, + bb.insert(bb.end(), seg.getData().begin(), seg.getData().end()); + } + if (bb.size() != static_cast(dataUsedBits)) +- throw std::logic_error("Assertion error"); ++ return QrCode(ERR_VERSION, ecl, dataCodewordsTemp, mask); + + // Add terminator and pad up to a byte if applicable + size_t dataCapacityBits = static_cast(getNumDataCodewords(version, ecl)) * 8; + if (bb.size() > dataCapacityBits) +- throw std::logic_error("Assertion error"); ++ return QrCode(ERR_VERSION, ecl, dataCodewordsTemp, mask); + bb.appendBits(0, std::min(4, static_cast(dataCapacityBits - bb.size()))); + bb.appendBits(0, (8 - static_cast(bb.size() % 8)) % 8); + if (bb.size() % 8 != 0) +- throw std::logic_error("Assertion error"); ++ return QrCode(ERR_VERSION, ecl, dataCodewordsTemp, mask); + + // Pad with alternating bytes until data capacity is reached + for (uint8_t padByte = 0xEC; bb.size() < dataCapacityBits; padByte ^= 0xEC ^ 0x11) +@@ -319,12 +204,18 @@ QrCode QrCode::encodeSegments(const vector &segs, Ecc ecl, + + QrCode::QrCode(int ver, Ecc ecl, const vector &dataCodewords, int msk) : + // Initialize fields and check arguments +- version(ver), ++ version(ver), flag(true), + errorCorrectionLevel(ecl) { +- if (ver < MIN_VERSION || ver > MAX_VERSION) +- throw std::domain_error("Version value out of range"); +- if (msk < -1 || msk > 7) +- throw std::domain_error("Mask value out of range"); ++ if (ver < MIN_VERSION || ver > MAX_VERSION) { ++ flag = false; ++ return; ++ } ++ ++ if (msk < -1 || msk > 7) { ++ flag = false; ++ return; ++ } ++ + size = ver * 4 + 17; + size_t sz = static_cast(size); + modules = vector >(sz, vector(sz)); // Initially all white +@@ -332,33 +223,38 @@ QrCode::QrCode(int ver, Ecc ecl, const vector &dataCodewords, int msk) + + // Compute ECC, draw modules + drawFunctionPatterns(); ++ if (!flag) { ++ clearFunctionPatterns(); ++ return; ++ } ++ + const vector allCodewords = addEccAndInterleave(dataCodewords); ++ if (!flag){ ++ clearFunctionPatterns(); ++ return; ++ } ++ + drawCodewords(allCodewords); +- +- // Do masking +- if (msk == -1) { // Automatically choose best mask +- long minPenalty = LONG_MAX; +- for (int i = 0; i < 8; i++) { +- applyMask(i); +- drawFormatBits(i); +- long penalty = getPenaltyScore(); +- if (penalty < minPenalty) { +- msk = i; +- minPenalty = penalty; +- } +- applyMask(i); // Undoes the mask due to XOR +- } ++ if (!flag) { ++ clearFunctionPatterns(); ++ return; + } +- if (msk < 0 || msk > 7) +- throw std::logic_error("Assertion error"); ++ + this->mask = msk; + applyMask(msk); // Apply the final choice of mask ++ if (!flag) { ++ clearFunctionPatterns(); ++ return; ++ } ++ + drawFormatBits(msk); // Overwrite old format bits +- +- isFunction.clear(); +- isFunction.shrink_to_fit(); ++ ++ clearFunctionPatterns(); + } + ++bool QrCode::getFlag() const { ++ return flag; ++} + + int QrCode::getVersion() const { + return version; +@@ -385,32 +281,6 @@ bool QrCode::getModule(int x, int y) const { + } + + +-std::string QrCode::toSvgString(int border) const { +- if (border < 0) +- throw std::domain_error("Border must be non-negative"); +- if (border > INT_MAX / 2 || border * 2 > INT_MAX - size) +- throw std::overflow_error("Border too large"); +- +- std::ostringstream sb; +- sb << "\n"; +- sb << "\n"; +- sb << "\n"; +- sb << "\t\n"; +- sb << "\t\n"; +- sb << "\n"; +- return sb.str(); +-} + + + void QrCode::drawFunctionPatterns() { +@@ -438,6 +308,10 @@ void QrCode::drawFunctionPatterns() { + + // Draw configuration data + drawFormatBits(0); // Dummy mask value; overwritten later in the constructor ++ if (!flag) { ++ return; ++ } ++ + drawVersion(); + } + +@@ -449,8 +323,10 @@ void QrCode::drawFormatBits(int msk) { + for (int i = 0; i < 10; i++) + rem = (rem << 1) ^ ((rem >> 9) * 0x537); + int bits = (data << 10 | rem) ^ 0x5412; // uint15 +- if (bits >> 15 != 0) +- throw std::logic_error("Assertion error"); ++ if (bits >> 15 != 0) { ++ flag = false; ++ return; ++ } + + // Draw first copy + for (int i = 0; i <= 5; i++) +@@ -479,8 +355,10 @@ void QrCode::drawVersion() { + for (int i = 0; i < 12; i++) + rem = (rem << 1) ^ ((rem >> 11) * 0x1F25); + long bits = static_cast(version) << 12 | rem; // uint18 +- if (bits >> 18 != 0) +- throw std::logic_error("Assertion error"); ++ if (bits >> 18 != 0) { ++ flag = false; ++ return; ++ } + + // Draw two copies + for (int i = 0; i < 18; i++) { +@@ -526,9 +404,12 @@ bool QrCode::module(int x, int y) const { + } + + +-vector QrCode::addEccAndInterleave(const vector &data) const { +- if (data.size() != static_cast(getNumDataCodewords(version, errorCorrectionLevel))) +- throw std::invalid_argument("Invalid argument"); ++vector QrCode::addEccAndInterleave(const vector &data) { ++ vector result; ++ if (data.size() != static_cast(getNumDataCodewords(version, errorCorrectionLevel))) { ++ flag = false; ++ return result; ++ } + + // Calculate parameter numbers + int numBlocks = NUM_ERROR_CORRECTION_BLOCKS[static_cast(errorCorrectionLevel)][version]; +@@ -540,10 +421,16 @@ vector QrCode::addEccAndInterleave(const vector &data) const { + // Split data into blocks and append ECC to each block + vector > blocks; + const vector rsDiv = reedSolomonComputeDivisor(blockEccLen); ++ if (!flag) { ++ return result; ++ } + for (int i = 0, k = 0; i < numBlocks; i++) { + vector dat(data.cbegin() + k, data.cbegin() + (k + shortBlockLen - blockEccLen + (i < numShortBlocks ? 0 : 1))); + k += static_cast(dat.size()); + const vector ecc = reedSolomonComputeRemainder(dat, rsDiv); ++ if (!flag) { ++ return result; ++ } + if (i < numShortBlocks) + dat.push_back(0); + dat.insert(dat.end(), ecc.cbegin(), ecc.cend()); +@@ -551,7 +438,6 @@ vector QrCode::addEccAndInterleave(const vector &data) const { + } + + // Interleave (not concatenate) the bytes from every block into a single sequence +- vector result; + for (size_t i = 0; i < blocks.at(0).size(); i++) { + for (size_t j = 0; j < blocks.size(); j++) { + // Skip the padding byte in short blocks +@@ -560,14 +446,16 @@ vector QrCode::addEccAndInterleave(const vector &data) const { + } + } + if (result.size() != static_cast(rawCodewords)) +- throw std::logic_error("Assertion error"); ++ flag = false; + return result; + } + + + void QrCode::drawCodewords(const vector &data) { +- if (data.size() != static_cast(getNumRawDataModules(version) / 8)) +- throw std::invalid_argument("Invalid argument"); ++ if (data.size() != static_cast(getNumRawDataModules(version) / 8)) { ++ flag = false; ++ return; ++ } + + size_t i = 0; // Bit index into the data + // Do the funny zigzag scan +@@ -588,14 +476,14 @@ void QrCode::drawCodewords(const vector &data) { + } + } + } +- if (i != data.size() * 8) +- throw std::logic_error("Assertion error"); ++ if (i != data.size() * 8){ ++ flag = false; ++ return; ++ } + } + + + void QrCode::applyMask(int msk) { +- if (msk < 0 || msk > 7) +- throw std::domain_error("Mask value out of range"); + size_t sz = static_cast(size); + for (size_t y = 0; y < sz; y++) { + for (size_t x = 0; x < sz; x++) { +@@ -609,7 +497,7 @@ void QrCode::applyMask(int msk) { + case 5: invert = x * y % 2 + x * y % 3 == 0; break; + case 6: invert = (x * y % 2 + x * y % 3) % 2 == 0; break; + case 7: invert = ((x + y) % 2 + x * y % 3) % 2 == 0; break; +- default: throw std::logic_error("Assertion error"); ++ default: return; + } + modules.at(y).at(x) = modules.at(y).at(x) ^ (invert & !isFunction.at(y).at(x)); + } +@@ -617,79 +505,6 @@ void QrCode::applyMask(int msk) { + } + + +-long QrCode::getPenaltyScore() const { +- long result = 0; +- +- // Adjacent modules in row having same color, and finder-like patterns +- for (int y = 0; y < size; y++) { +- bool runColor = false; +- int runX = 0; +- std::array runHistory = {}; +- for (int x = 0; x < size; x++) { +- if (module(x, y) == runColor) { +- runX++; +- if (runX == 5) +- result += PENALTY_N1; +- else if (runX > 5) +- result++; +- } else { +- finderPenaltyAddHistory(runX, runHistory); +- if (!runColor) +- result += finderPenaltyCountPatterns(runHistory) * PENALTY_N3; +- runColor = module(x, y); +- runX = 1; +- } +- } +- result += finderPenaltyTerminateAndCount(runColor, runX, runHistory) * PENALTY_N3; +- } +- // Adjacent modules in column having same color, and finder-like patterns +- for (int x = 0; x < size; x++) { +- bool runColor = false; +- int runY = 0; +- std::array runHistory = {}; +- for (int y = 0; y < size; y++) { +- if (module(x, y) == runColor) { +- runY++; +- if (runY == 5) +- result += PENALTY_N1; +- else if (runY > 5) +- result++; +- } else { +- finderPenaltyAddHistory(runY, runHistory); +- if (!runColor) +- result += finderPenaltyCountPatterns(runHistory) * PENALTY_N3; +- runColor = module(x, y); +- runY = 1; +- } +- } +- result += finderPenaltyTerminateAndCount(runColor, runY, runHistory) * PENALTY_N3; +- } +- +- // 2*2 blocks of modules having same color +- for (int y = 0; y < size - 1; y++) { +- for (int x = 0; x < size - 1; x++) { +- bool color = module(x, y); +- if ( color == module(x + 1, y) && +- color == module(x, y + 1) && +- color == module(x + 1, y + 1)) +- result += PENALTY_N2; +- } +- } +- +- // Balance of black and white modules +- int black = 0; +- for (const vector &row : modules) { +- for (bool color : row) { +- if (color) +- black++; +- } +- } +- int total = size * size; // Note that size is odd, so black/total != 1/2 +- // Compute the smallest integer k >= 0 such that (45-5k)% <= black/total <= (55+5k)% +- int k = static_cast((std::abs(black * 20L - total * 10L) + total - 1) / total) - 1; +- result += k * PENALTY_N4; +- return result; +-} + + + vector QrCode::getAlignmentPatternPositions() const { +@@ -709,8 +524,6 @@ vector QrCode::getAlignmentPatternPositions() const { + + + int QrCode::getNumRawDataModules(int ver) { +- if (ver < MIN_VERSION || ver > MAX_VERSION) +- throw std::domain_error("Version number out of range"); + int result = (16 * ver + 128) * ver + 64; + if (ver >= 2) { + int numAlign = ver / 7 + 2; +@@ -718,8 +531,6 @@ int QrCode::getNumRawDataModules(int ver) { + if (ver >= 7) + result -= 36; + } +- if (!(208 <= result && result <= 29648)) +- throw std::logic_error("Assertion error"); + return result; + } + +@@ -732,8 +543,6 @@ int QrCode::getNumDataCodewords(int ver, Ecc ecl) { + + + vector QrCode::reedSolomonComputeDivisor(int degree) { +- if (degree < 1 || degree > 255) +- throw std::domain_error("Degree out of range"); + // Polynomial coefficients are stored from highest to lowest power, excluding the leading term which is always 1. + // For example the polynomial x^3 + 255x^2 + 8x + 93 is stored as the uint8 array {255, 8, 93}. + vector result(static_cast(degree)); +@@ -747,10 +556,16 @@ vector QrCode::reedSolomonComputeDivisor(int degree) { + // Multiply the current product by (x - r^i) + for (size_t j = 0; j < result.size(); j++) { + result.at(j) = reedSolomonMultiply(result.at(j), root); ++ if (!flag) { ++ return result; ++ } + if (j + 1 < result.size()) + result.at(j) ^= result.at(j + 1); + } + root = reedSolomonMultiply(root, 0x02); ++ if (!flag) { ++ return result; ++ } + } + return result; + } +@@ -762,8 +577,13 @@ vector QrCode::reedSolomonComputeRemainder(const vector &data, + uint8_t factor = b ^ result.at(0); + result.erase(result.begin()); + result.push_back(0); +- for (size_t i = 0; i < result.size(); i++) ++ for (size_t i = 0; i < result.size(); i++) { + result.at(i) ^= reedSolomonMultiply(divisor.at(i), factor); ++ if (!flag) { ++ return result; ++ } ++ } ++ + } + return result; + } +@@ -777,74 +597,43 @@ uint8_t QrCode::reedSolomonMultiply(uint8_t x, uint8_t y) { + z ^= ((y >> i) & 1) * x; + } + if (z >> 8 != 0) +- throw std::logic_error("Assertion error"); ++ flag = false; + return static_cast(z); + } + + +-int QrCode::finderPenaltyCountPatterns(const std::array &runHistory) const { +- int n = runHistory.at(1); +- if (n > size * 3) +- throw std::logic_error("Assertion error"); +- bool core = n > 0 && runHistory.at(2) == n && runHistory.at(3) == n * 3 && runHistory.at(4) == n && runHistory.at(5) == n; +- return (core && runHistory.at(0) >= n * 4 && runHistory.at(6) >= n ? 1 : 0) +- + (core && runHistory.at(6) >= n * 4 && runHistory.at(0) >= n ? 1 : 0); +-} +- +- +-int QrCode::finderPenaltyTerminateAndCount(bool currentRunColor, int currentRunLength, std::array &runHistory) const { +- if (currentRunColor) { // Terminate black run +- finderPenaltyAddHistory(currentRunLength, runHistory); +- currentRunLength = 0; +- } +- currentRunLength += size; // Add white border to final run +- finderPenaltyAddHistory(currentRunLength, runHistory); +- return finderPenaltyCountPatterns(runHistory); +-} +- + +-void QrCode::finderPenaltyAddHistory(int currentRunLength, std::array &runHistory) const { +- if (runHistory.at(0) == 0) +- currentRunLength += size; // Add white border to initial run +- std::copy_backward(runHistory.cbegin(), runHistory.cend() - 1, runHistory.end()); +- runHistory.at(0) = currentRunLength; ++void QrCode::clearFunctionPatterns() ++{ ++ isFunction.clear(); ++ isFunction.shrink_to_fit(); + } + +- + bool QrCode::getBit(long x, int i) { + return ((x >> i) & 1) != 0; + } + + +-/*---- Tables of constants ----*/ + +-const int QrCode::PENALTY_N1 = 3; +-const int QrCode::PENALTY_N2 = 3; +-const int QrCode::PENALTY_N3 = 40; +-const int QrCode::PENALTY_N4 = 10; +- +- +-const int8_t QrCode::ECC_CODEWORDS_PER_BLOCK[4][41] = { ++const int8_t QrCode::ECC_CODEWORDS_PER_BLOCK[4][11] = { + // Version: (note that index 0 is for padding, and is set to an illegal value) + //0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 Error correction level +- {-1, 7, 10, 15, 20, 26, 18, 20, 24, 30, 18, 20, 24, 26, 30, 22, 24, 28, 30, 28, 28, 28, 28, 30, 30, 26, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}, // Low +- {-1, 10, 16, 26, 18, 24, 16, 18, 22, 22, 26, 30, 22, 22, 24, 24, 28, 28, 26, 26, 26, 26, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28}, // Medium +- {-1, 13, 22, 18, 26, 18, 24, 18, 22, 20, 24, 28, 26, 24, 20, 30, 24, 28, 28, 26, 30, 28, 30, 30, 30, 30, 28, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}, // Quartile +- {-1, 17, 28, 22, 16, 22, 28, 26, 26, 24, 28, 24, 28, 22, 24, 24, 30, 28, 28, 26, 28, 30, 24, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30}, // High ++ {-1, 7, 10, 15, 20, 26, 18, 20, 24, 30, 18}, // Low ++ {-1, 10, 16, 26, 18, 24, 16, 18, 22, 22, 26}, // Medium ++ {-1, 13, 22, 18, 26, 18, 24, 18, 22, 20, 24}, // Quartile ++ {-1, 17, 28, 22, 16, 22, 28, 26, 26, 24, 28}, // High + }; + +-const int8_t QrCode::NUM_ERROR_CORRECTION_BLOCKS[4][41] = { ++const int8_t QrCode::NUM_ERROR_CORRECTION_BLOCKS[4][11] = { + // Version: (note that index 0 is for padding, and is set to an illegal value) + //0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 Error correction level +- {-1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 6, 6, 6, 6, 7, 8, 8, 9, 9, 10, 12, 12, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, 22, 24, 25}, // Low +- {-1, 1, 1, 1, 2, 2, 4, 4, 4, 5, 5, 5, 8, 9, 9, 10, 10, 11, 13, 14, 16, 17, 17, 18, 20, 21, 23, 25, 26, 28, 29, 31, 33, 35, 37, 38, 40, 43, 45, 47, 49}, // Medium +- {-1, 1, 1, 2, 2, 4, 4, 6, 6, 8, 8, 8, 10, 12, 16, 12, 17, 16, 18, 21, 20, 23, 23, 25, 27, 29, 34, 34, 35, 38, 40, 43, 45, 48, 51, 53, 56, 59, 62, 65, 68}, // Quartile +- {-1, 1, 1, 2, 4, 4, 4, 5, 6, 8, 8, 11, 11, 16, 16, 18, 16, 19, 21, 25, 25, 25, 34, 30, 32, 35, 37, 40, 42, 45, 48, 51, 54, 57, 60, 63, 66, 70, 74, 77, 81}, // High ++ {-1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 4}, // Low ++ {-1, 1, 1, 1, 2, 2, 4, 4, 4, 5, 5}, // Medium ++ {-1, 1, 1, 2, 2, 4, 4, 6, 6, 8, 8}, // Quartile ++ {-1, 1, 1, 2, 4, 4, 4, 5, 6, 8, 8}, // High + }; + + +-data_too_long::data_too_long(const std::string &msg) : +- std::length_error(msg) {} + + + +@@ -854,7 +643,7 @@ BitBuffer::BitBuffer() + + void BitBuffer::appendBits(std::uint32_t val, int len) { + if (len < 0 || len > 31 || val >> len != 0) +- throw std::domain_error("Value out of range"); ++ return; + for (int i = len - 1; i >= 0; i--) // Append bit by bit + this->push_back(((val >> i) & 1) != 0); + } +diff --git a/cpp/QrCode.hpp b/cpp/QrCode.hpp +index 7341e41..20dbbf4 100755 +--- a/cpp/QrCode.hpp ++++ b/cpp/QrCode.hpp +@@ -21,7 +21,8 @@ + * Software. + */ + +-#pragma once ++#ifndef QRCODEEGEN_H ++#define QRCODEEGEN_H + + #include + #include +@@ -52,13 +53,6 @@ class QrSegment final { + */ + public: class Mode final { + +- /*-- Constants --*/ +- +- public: static const Mode NUMERIC; +- public: static const Mode ALPHANUMERIC; +- public: static const Mode BYTE; +- public: static const Mode KANJI; +- public: static const Mode ECI; + + + /*-- Fields --*/ +@@ -72,7 +66,7 @@ class QrSegment final { + + /*-- Constructor --*/ + +- private: Mode(int mode, int cc0, int cc1, int cc2); ++ public: Mode(int mode, int cc0, int cc1, int cc2); + + + /*-- Methods --*/ +@@ -99,22 +93,11 @@ class QrSegment final { + * byte mode. All input byte vectors are acceptable. Any text string + * can be converted to UTF-8 bytes and encoded as a byte mode segment. + */ +- public: static QrSegment makeBytes(const std::vector &data); ++ private: static QrSegment makeBytes(const std::vector &data); + + +- /* +- * Returns a segment representing the given string of decimal digits encoded in numeric mode. +- */ +- public: static QrSegment makeNumeric(const char *digits); + + +- /* +- * Returns a segment representing the given text string encoded in alphanumeric mode. +- * The characters allowed are: 0 to 9, A to Z (uppercase only), space, +- * dollar, percent, asterisk, plus, hyphen, period, slash, colon. +- */ +- public: static QrSegment makeAlphanumeric(const char *text); +- + + /* + * Returns a list of zero or more segments to represent the given text string. The result +@@ -123,29 +106,6 @@ class QrSegment final { + public: static std::vector makeSegments(const char *text); + + +- /* +- * Returns a segment representing an Extended Channel Interpretation +- * (ECI) designator with the given assignment value. +- */ +- public: static QrSegment makeEci(long assignVal); +- +- +- /*---- Public static helper functions ----*/ +- +- /* +- * Tests whether the given string can be encoded as a segment in alphanumeric mode. +- * A string is encodable iff each character is in the following set: 0 to 9, A to Z +- * (uppercase only), space, dollar, percent, asterisk, plus, hyphen, period, slash, colon. +- */ +- public: static bool isAlphanumeric(const char *text); +- +- +- /* +- * Tests whether the given string can be encoded as a segment in numeric mode. +- * A string is encodable iff each character is in the range 0 to 9. +- */ +- public: static bool isNumeric(const char *text); +- + + + /*---- Instance fields ----*/ +@@ -165,13 +125,6 @@ class QrSegment final { + + /*---- Constructors (low level) ----*/ + +- /* +- * Creates a new QR Code segment with the given attributes and data. +- * The character count (numCh) must agree with the mode and the bit buffer length, +- * but the constraint isn't checked. The given bit buffer is copied and stored. +- */ +- public: QrSegment(Mode md, int numCh, const std::vector &dt); +- + + /* + * Creates a new QR Code segment with the given parameters and data. +@@ -207,12 +160,6 @@ class QrSegment final { + public: static int getTotalBits(const std::vector &segs, int version); + + +- /*---- Private constant ----*/ +- +- /* The set of all legal characters in alphanumeric mode, where +- * each character value maps to the index in the string. */ +- private: static const char *ALPHANUMERIC_CHARSET; +- + }; + + +@@ -265,13 +212,6 @@ class QrCode final { + public: static QrCode encodeText(const char *text, Ecc ecl); + + +- /* +- * Returns a QR Code representing the given binary data at the given error correction level. +- * This function always encodes using the binary segment mode, not any text mode. The maximum number of +- * bytes allowed is 2953. The smallest possible QR Code version is automatically chosen for the output. +- * The ECC level of the result may be higher than the ecl argument if it can be done without increasing the version. +- */ +- public: static QrCode encodeBinary(const std::vector &data, Ecc ecl); + + + /*---- Static factory functions (mid level) ----*/ +@@ -287,7 +227,7 @@ class QrCode final { + * between modes (such as alphanumeric and byte) to encode text in less space. + * This is a mid-level API; the high-level API is encodeText() and encodeBinary(). + */ +- public: static QrCode encodeSegments(const std::vector &segs, Ecc ecl, ++ private: static QrCode encodeSegments(const std::vector &segs, Ecc ecl, + int minVersion=1, int maxVersion=40, int mask=-1, bool boostEcl=true); // All optional parameters + + +@@ -321,7 +261,9 @@ class QrCode final { + // Indicates function modules that are not subjected to masking. Discarded when constructor finishes. + private: std::vector > isFunction; + +- ++ /* QR Code Generation Success Flag. ++ * This Success :true */ ++ private: bool flag; + + /*---- Constructor (low level) ----*/ + +@@ -331,12 +273,16 @@ class QrCode final { + * This is a low-level API that most users should not use directly. + * A mid-level API is the encodeSegments() function. + */ +- public: QrCode(int ver, Ecc ecl, const std::vector &dataCodewords, int msk); ++ private: QrCode(int ver, Ecc ecl, const std::vector &dataCodewords, int msk); + + + + /*---- Public instance methods ----*/ +- ++ /* ++ * Returns this QR Code's version, in the range [1, 40]. ++ */ ++ public: bool getFlag() const; ++ + /* + * Returns this QR Code's version, in the range [1, 40]. + */ +@@ -369,11 +315,7 @@ class QrCode final { + public: bool getModule(int x, int y) const; + + +- /* +- * Returns a string of SVG code for an image depicting this QR Code, with the given number +- * of border modules. The string always uses Unix newlines (\n), regardless of the platform. +- */ +- public: std::string toSvgString(int border) const; ++ + + + +@@ -416,7 +358,7 @@ class QrCode final { + + // Returns a new byte string representing the given data with the appropriate error correction + // codewords appended to it, based on this object's version and error correction level. +- private: std::vector addEccAndInterleave(const std::vector &data) const; ++ private: std::vector addEccAndInterleave(const std::vector &data); + + + // Draws the given sequence of 8-bit codewords (data and error correction) onto the entire +@@ -432,9 +374,7 @@ class QrCode final { + private: void applyMask(int msk); + + +- // Calculates and returns the penalty score based on state of this QR Code's current modules. +- // This is used by the automatic mask choice algorithm to find the mask pattern that yields the lowest score. +- private: long getPenaltyScore() const; ++ + + + +@@ -460,74 +400,40 @@ class QrCode final { + + // Returns a Reed-Solomon ECC generator polynomial for the given degree. This could be + // implemented as a lookup table over all possible parameter values, instead of as an algorithm. +- private: static std::vector reedSolomonComputeDivisor(int degree); ++ private: std::vector reedSolomonComputeDivisor(int degree); + + + // Returns the Reed-Solomon error correction codeword for the given data and divisor polynomials. +- private: static std::vector reedSolomonComputeRemainder(const std::vector &data, const std::vector &divisor); ++ private: std::vector reedSolomonComputeRemainder(const std::vector &data, const std::vector &divisor); + + + // Returns the product of the two given field elements modulo GF(2^8/0x11D). + // All inputs are valid. This could be implemented as a 256*256 lookup table. +- private: static std::uint8_t reedSolomonMultiply(std::uint8_t x, std::uint8_t y); +- +- +- // Can only be called immediately after a white run is added, and +- // returns either 0, 1, or 2. A helper function for getPenaltyScore(). +- private: int finderPenaltyCountPatterns(const std::array &runHistory) const; +- +- +- // Must be called at the end of a line (row or column) of modules. A helper function for getPenaltyScore(). +- private: int finderPenaltyTerminateAndCount(bool currentRunColor, int currentRunLength, std::array &runHistory) const; ++ private: std::uint8_t reedSolomonMultiply(std::uint8_t x, std::uint8_t y); + + +- // Pushes the given value to the front and drops the last value. A helper function for getPenaltyScore(). +- private: void finderPenaltyAddHistory(int currentRunLength, std::array &runHistory) const; +- ++ // clear Function. ++ private: void clearFunctionPatterns(); + + // Returns true iff the i'th bit of x is set to 1. + private: static bool getBit(long x, int i); + + + /*---- Constants and tables ----*/ +- ++ // The error version number supported in the QR Code Model 2 standard. ++ private: static constexpr int ERR_VERSION = 0; ++ + // The minimum version number supported in the QR Code Model 2 standard. +- public: static constexpr int MIN_VERSION = 1; ++ private: static constexpr int MIN_VERSION = 1; + + // The maximum version number supported in the QR Code Model 2 standard. +- public: static constexpr int MAX_VERSION = 40; ++ private: static constexpr int MAX_VERSION = 10; + + +- // For use in getPenaltyScore(), when evaluating which mask is best. +- private: static const int PENALTY_N1; +- private: static const int PENALTY_N2; +- private: static const int PENALTY_N3; +- private: static const int PENALTY_N4; + + +- private: static const std::int8_t ECC_CODEWORDS_PER_BLOCK[4][41]; +- private: static const std::int8_t NUM_ERROR_CORRECTION_BLOCKS[4][41]; +- +-}; +- +- +- +-/*---- Public exception class ----*/ +- +-/* +- * Thrown when the supplied data does not fit any QR Code version. Ways to handle this exception include: +- * - Decrease the error correction level if it was greater than Ecc::LOW. +- * - If the encodeSegments() function was called with a maxVersion argument, then increase +- * it if it was less than QrCode::MAX_VERSION. (This advice does not apply to the other +- * factory functions because they search all versions up to QrCode::MAX_VERSION.) +- * - Split the text data into better or optimal segments in order to reduce the number of bits required. +- * - Change the text or binary data to be shorter. +- * - Change the text to fit the character set of a particular segment mode (e.g. alphanumeric). +- * - Propagate the error upward to the caller/user. +- */ +-class data_too_long : public std::length_error { +- +- public: explicit data_too_long(const std::string &msg); ++ private: static const std::int8_t ECC_CODEWORDS_PER_BLOCK[4][11]; ++ private: static const std::int8_t NUM_ERROR_CORRECTION_BLOCKS[4][11]; + + }; + +@@ -554,3 +460,4 @@ class BitBuffer final : public std::vector { + }; + + } ++#endif // QRCODEEGEN_H +\ No newline at end of file diff --git a/frameworks/core/components/qrcode/qrcode_theme.h b/frameworks/core/components/qrcode/qrcode_theme.h new file mode 100644 index 00000000..0391fb94 --- /dev/null +++ b/frameworks/core/components/qrcode/qrcode_theme.h @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_QRCODE_QRCODE_THEME_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_QRCODE_QRCODE_THEME_H + +#include "core/components/common/layout/constants.h" +#include "core/components/common/properties/color.h" +#include "core/components/theme/theme.h" +#include "core/components/theme/theme_constants.h" +#include "core/components/theme/theme_manager.h" + +namespace OHOS::Ace { + +class QrcodeTheme : public virtual Theme { + DECLARE_ACE_TYPE(QrcodeTheme, Theme); + +public: + class Builder { + public: + Builder() = default; + ~Builder() = default; + + RefPtr Build(const RefPtr& themeConstants) const + { + RefPtr theme = AceType::Claim(new QrcodeTheme()); + if (!themeConstants) { + return theme; + } + theme->qrcodeColor_ = themeConstants->GetColor(THEME_QRCODE_COLOR); + theme->backgroundColor_ = themeConstants->GetColor(THEME_QRCODE_BACKGROUND_COLOR); + theme->qrcodeType_ = QrcodeType(themeConstants->GetInt(THEME_QRCODE_TYPE)); + theme->qrcodeWidth_ = themeConstants->GetDimension(THEME_QRCODE_SIZE); + theme->qrcodeHeight_ = themeConstants->GetDimension(THEME_QRCODE_SIZE); + return theme; + } + }; + + ~QrcodeTheme() override = default; + + const Color& GetQrcodeColor() const + { + return qrcodeColor_; + } + + const Color& GetBackgroundColor() const + { + return backgroundColor_; + } + + QrcodeType GetQrcodeType() const + { + return qrcodeType_; + } + + const Dimension& GetQrcodeWidth() const + { + return qrcodeWidth_; + } + + const Dimension& GetQrcodeHeight() const + { + return qrcodeHeight_; + } + +protected: + QrcodeTheme() = default; + +private: + Color qrcodeColor_; + Color backgroundColor_; + QrcodeType qrcodeType_ { QrcodeType::RECT }; + Dimension qrcodeWidth_; + Dimension qrcodeHeight_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_QRCODE_QRCODE_THEME_H \ No newline at end of file diff --git a/frameworks/core/components/qrcode/render_qrcode.cpp b/frameworks/core/components/qrcode/render_qrcode.cpp new file mode 100644 index 00000000..8a7134b6 --- /dev/null +++ b/frameworks/core/components/qrcode/render_qrcode.cpp @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/qrcode/render_qrcode.h" + +namespace OHOS::Ace { +namespace { + +constexpr uint32_t QRCODE_START_INDEX = 0; +constexpr uint32_t QRCODE_VALUE_MAX_LENGTH = 256; + +} + +void RenderQrcode::Update(const RefPtr& component) +{ + qrcode_ = AceType::DynamicCast(component); + if (!qrcode_) { + LOGE("Update error, qrcode component is null"); + return; + } + value_ = qrcode_->GetValue(); + if (value_.empty()) { + return; + } + if (value_.size() > QRCODE_VALUE_MAX_LENGTH) { + value_ = value_.substr(QRCODE_START_INDEX, QRCODE_VALUE_MAX_LENGTH); + } + backgroundColor_ = qrcode_->GetBackgroundColor(); + qrcodeColor_ = qrcode_->GetQrcodeColor(); + qrcodeType_ = qrcode_->GetType(); + qrcodeWidth_ = qrcode_->GetQrcodeWidth(); + qrcodeHeight_ = qrcode_->GetQrcodeHeight(); + isWidthDefined_ = qrcode_->IsWidthDefined(); + isHeightDefined_ = qrcode_->IsHeightDefined(); +} + +void RenderQrcode::PerformLayout() +{ + width_ = NormalizePercentToPx(qrcodeWidth_, false); + height_ = NormalizePercentToPx(qrcodeHeight_, true); + if (isWidthDefined_ && !isHeightDefined_) { + height_ = width_; + } else if (isHeightDefined_ && !isWidthDefined_) { + width_ = height_; + } else if (isHeightDefined_ && isWidthDefined_) { + if (LessOrEqual(width_, height_)) { + height_ = width_; + } else { + width_ = height_; + } + } + SetLayoutSize(Size(width_, height_)); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/qrcode/render_qrcode.h b/frameworks/core/components/qrcode/render_qrcode.h new file mode 100644 index 00000000..6f55a638 --- /dev/null +++ b/frameworks/core/components/qrcode/render_qrcode.h @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_QRCODE_RENDER_QRCODE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_QRCODE_RENDER_QRCODE_H + +#include "base/utils/system_properties.h" +#include "core/components/common/properties/color.h" +#include "core/components/image/image_component.h" +#include "core/components/image/render_image.h" +#include "core/components/qrcode/qrcode_component.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderQrcode : public RenderNode { + DECLARE_ACE_TYPE(RenderQrcode, RenderNode); + +public: + static RefPtr Create(); + + void Update(const RefPtr& component) override; + void PerformLayout() override; + +protected: + std::string value_; + Color backgroundColor_; + Color qrcodeColor_; + QrcodeType qrcodeType_ { QrcodeType::RECT }; + double width_ = 0.0; + double height_ = 0.0; + Dimension qrcodeWidth_; + Dimension qrcodeHeight_; + Size qrcodeSize_; + RefPtr qrcode_; + RefPtr qrcodeImageComponent_; + RefPtr qrcodeRenderImage_; + bool isWidthDefined_ = false; + bool isHeightDefined_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_QRCODE_RENDER_QRCODE_H diff --git a/frameworks/core/components/rating/BUILD.gn b/frameworks/core/components/rating/BUILD.gn new file mode 100644 index 00000000..aa6c1266 --- /dev/null +++ b/frameworks/core/components/rating/BUILD.gn @@ -0,0 +1,24 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("rating") { + sources = [ + "flutter_render_rating.cpp", + "rating_component.cpp", + "render_rating.cpp", + ] + + component_deps = [ "image" ] +} diff --git a/frameworks/core/components/rating/flutter_render_rating.cpp b/frameworks/core/components/rating/flutter_render_rating.cpp new file mode 100644 index 00000000..d7b33179 --- /dev/null +++ b/frameworks/core/components/rating/flutter_render_rating.cpp @@ -0,0 +1,160 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/rating/flutter_render_rating.h" + +#include "flutter/common/task_runners.h" +#include "third_party/skia/include/core/SkClipOp.h" +#include "third_party/skia/include/core/SkMaskFilter.h" + +#include "core/components/align/render_align.h" +#include "core/components/common/painter/flutter_universal_painter.h" +#include "core/pipeline/base/constants.h" +#include "core/pipeline/base/flutter_render_context.h" + +namespace OHOS::Ace { + +RefPtr RenderRating::Create() +{ + return AceType::MakeRefPtr(); +} + +void FlutterRenderRating::Paint(RenderContext& context, const Offset& offset) +{ + auto canvas = ScopedCanvas::Create(context); + if (!canvas) { + LOGE("Paint canvas is null"); + return; + } + double offsetDeltaX = (GetLayoutSize().Width() - ratingSize_.Width()) / 2.0; + double offsetDeltaY = (GetLayoutSize().Height() - ratingSize_.Height()) / 2.0; + offsetDelta_ = offset + Offset(offsetDeltaX, offsetDeltaY); + double imageVerticalOffset = ratingSize_.Width() * paddingVertical_.Value() / defaultHeight_.Value() / starNum_; + Offset starOffset = GetStarOffset(imageVerticalOffset); + if (!isIndicator_ && operationEvent_ == OperationEvent::RATING_KEY_EVENT && !NearZero(imageVerticalOffset)) { + Offset animationOffset = starOffset + Offset(offsetDeltaX, offsetDeltaY); + PaintFocus(animationOffset + offset, singleWidth_ / 2 - imageVerticalOffset, + Size(singleWidth_ - imageVerticalOffset * 2, singleWidth_ - imageVerticalOffset * 2), context); + double focusRadius = singleWidth_ - imageVerticalOffset * 2; + RequestFocusAnimation(animationOffset + GetGlobalOffset(), Size(focusRadius, focusRadius), focusRadius); + } + if (IsPhone() && !isIndicator_) { + PaintHoverRect(canvas); + } + PaintRatingBar(context, canvas); + if (IsPhone() && !isIndicator_ && operationEvent_ == OperationEvent::RATING_KEY_EVENT && + operationEvent_ != OperationEvent::RATING_MOUSE_EVENT) { + // total width of focus border is twice the width of [focusBorderWidth_], border-width + padding-width + RequestFocusAnimationForPhone(); + } +} + +void FlutterRenderRating::PaintHoverRect(const ScopedCanvas& canvas) +{ + Size hoverSize = Size(singleWidth_, ratingSize_.Height()); + for (auto& item : hoverColorMap_) { + if (item.second == Color::TRANSPARENT) { + continue; + } + FlutterUniversalPainter::DrawHoverBackground(canvas->canvas(), + Rect(Offset(item.first * singleWidth_, 0.0) + offsetDelta_, hoverSize), + item.second.GetValue(), focusBorderRadius_.Value()); + } +} + +void FlutterRenderRating::PaintRatingBar(RenderContext& context, const ScopedCanvas& canvas) +{ + double imageVerticalOffset = ratingSize_.Width() * paddingVertical_.Value() / defaultHeight_.Value() / starNum_; + auto imageOffset = offsetDelta_ + Offset(0.0, imageVerticalOffset); + if (paintForeground_) { + // In RTL environment, foreground image may draw three stars and be clipped to display 2.5 stars eventually. + // [foregroundDrawOffset] is the position to start drawing foreground image. + // [foregroundClipOffset] is the position to start clipping foreground image zone. + Offset foregroundDrawOffset = imageOffset; + Offset foregroundClipOffset = imageOffset; + Size foregroundSize = Size(foregroundImageWidth_, ratingSize_.Height()); + if (needReverse_) { + foregroundDrawOffset += Offset((starNum_ - ceil(drawScore_)) * singleWidth_, 0.0); + foregroundClipOffset += Offset(secondaryImageWidth_ + backgroundImageWidth_, 0.0); + } + + auto foregroundProperties = + ImageAreaProperties(ceil(drawScore_), foregroundSize, foregroundDrawOffset, foregroundClipOffset); + PaintImageArea(context, renderForeground_, canvas, foregroundProperties); + } + + if (paintSecondary_) { + Offset secondaryClipOffset = imageOffset; + Offset secondaryDrawOffset = imageOffset; + if (needReverse_) { + secondaryClipOffset += Offset((starNum_ - ceil(drawScore_)) * singleWidth_, 0.0); + secondaryDrawOffset = secondaryClipOffset; + } else { + secondaryClipOffset += Offset(foregroundImageWidth_, 0.0); + secondaryDrawOffset += Offset(floor(drawScore_) * singleWidth_, 0.0); + } + Size secondarySize = Size(secondaryImageWidth_, ratingSize_.Height()); + + auto secondaryProperties = ImageAreaProperties(1, secondarySize, secondaryDrawOffset, secondaryClipOffset); + PaintImageArea(context, renderSecondary_, canvas, secondaryProperties); + } + + if (paintBackground_) { + Offset backgroundDrawOffset = + needReverse_ ? imageOffset : imageOffset + Offset(foregroundImageWidth_ + secondaryImageWidth_, 0.0); + Offset backgroundClipOffset = backgroundDrawOffset; + Size backgroundSize = Size(backgroundImageWidth_, ratingSize_.Height()); + + auto backgroundProperties = ImageAreaProperties( + starNum_ - floor(drawScore_), backgroundSize, backgroundDrawOffset, backgroundClipOffset); + PaintImageArea(context, renderBackground_, canvas, backgroundProperties); + } +} + +void FlutterRenderRating::PaintImageArea(RenderContext& context, const RefPtr& renderImage, + const ScopedCanvas& canvas, const ImageAreaProperties& properties) +{ + canvas->save(); + auto clipOffset = properties.clipOffset; + auto drawOffset = properties.drawOffset; + auto imageAreaSize = properties.imageAreaSize; + canvas->clipRect(clipOffset.GetX(), clipOffset.GetY(), clipOffset.GetX() + imageAreaSize.Width(), + clipOffset.GetY() + imageAreaSize.Height(), SkClipOp::kIntersect, true); + for (int i = 0; i < properties.repeatNum; ++i) { + renderImage->RenderWithContext(context, drawOffset + Offset(singleWidth_ * i, 0.0)); + } + canvas->restore(); +} + +void FlutterRenderRating::PaintFocus( + const Offset& offset, double rRectRadius, const Size& boardSize, RenderContext& context) +{ + auto canvas = ScopedCanvas::Create(context); + if (!canvas) { + LOGE("Paint canvas is null"); + return; + } + flutter::Paint paint; + flutter::PaintData paintData; + flutter::RRect rRect; + paint.paint()->setColor(RATING_FOCUS_BOARD_COLOR); + paint.paint()->setStyle(SkPaint::Style::kFill_Style); + paint.paint()->setMaskFilter(SkMaskFilter::MakeBlur(SkBlurStyle::kSolid_SkBlurStyle, 1.0)); + rRect.sk_rrect.setRectXY(SkRect::MakeIWH(boardSize.Width(), boardSize.Height()), rRectRadius, rRectRadius); + rRect.sk_rrect.offset(offset.GetX(), offset.GetY()); + canvas->drawRRect(rRect, paint, paintData); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/rating/flutter_render_rating.h b/frameworks/core/components/rating/flutter_render_rating.h new file mode 100644 index 00000000..4269bb36 --- /dev/null +++ b/frameworks/core/components/rating/flutter_render_rating.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_RATING_FLUTTER_RENDER_RATING_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_RATING_FLUTTER_RENDER_RATING_H + +#include "core/components/rating/render_rating.h" +#include "core/pipeline/base/scoped_canvas_state.h" + +namespace OHOS::Ace { + +class FlutterRenderRating final : public RenderRating { + DECLARE_ACE_TYPE(FlutterRenderRating, RenderRating); + +public: + FlutterRenderRating() = default; + ~FlutterRenderRating() override = default; + + void Paint(RenderContext& context, const Offset& offset) override; + void PaintFocus(const Offset& offset, double rrectRadius, const Size& boardSize, RenderContext& context) override; + void PaintRatingBar(RenderContext& context, const ScopedCanvas& canvas); + void PaintImageArea(RenderContext& context, const RefPtr& renderImage, const ScopedCanvas& canvas, + const ImageAreaProperties& properties); + void PaintHoverRect(const ScopedCanvas& canvas); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_RATING_FLUTTER_RENDER_RATING_H diff --git a/frameworks/core/components/rating/rating_component.cpp b/frameworks/core/components/rating/rating_component.cpp new file mode 100644 index 00000000..4f603d8d --- /dev/null +++ b/frameworks/core/components/rating/rating_component.cpp @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/rating/rating_component.h" + +#include "core/components/rating/rating_element.h" + +namespace OHOS::Ace { + +void RatingComponent::SetResIdFromTheme(const RefPtr& theme) +{ + if (!theme) { + return; + } + foregroundResourceId_ = theme->GetForegroundResourceId(); + secondaryResourceId_ = theme->GetSecondaryResourceId(); + backgroundResourceId_ = theme->GetBackgroundResourceId(); +} + +void RatingComponent::SetMiniResIdFromTheme(const RefPtr& theme) +{ + if (!theme) { + return; + } + foregroundResourceId_ = theme->GetForegroundMiniResourceId(); + secondaryResourceId_ = theme->GetSecondaryMiniResourceId(); + backgroundResourceId_ = theme->GetBackgroundMiniResourceId(); +} + +RefPtr RatingComponent::CreateRenderNode() +{ + return RenderRating::Create(); +} + +RefPtr RatingComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/rating/rating_component.h b/frameworks/core/components/rating/rating_component.h new file mode 100644 index 00000000..d543ed3a --- /dev/null +++ b/frameworks/core/components/rating/rating_component.h @@ -0,0 +1,307 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_RATING_RATING_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_RATING_RATING_COMPONENT_H + +#include "base/resource/internal_resource.h" +#include "base/utils/utils.h" +#include "core/components/image/image_component.h" +#include "core/components/rating/rating_theme.h" +#include "core/pipeline/base/component_group.h" +#include "core/pipeline/base/constants.h" +#include "core/pipeline/base/element.h" + +namespace OHOS::Ace { + +class RatingComponent : public RenderComponent { + DECLARE_ACE_TYPE(RatingComponent, RenderComponent); + +public: + RatingComponent() = default; + ~RatingComponent() override = default; + + RefPtr CreateRenderNode() override; + RefPtr CreateElement() override; + + void SetResIdFromTheme(const RefPtr& theme); + void SetMiniResIdFromTheme(const RefPtr& theme); + + int32_t GetStarNum() const + { + return starNum_; + } + + void SetStarNum(int32_t starNum) + { + starNum_ = starNum; + } + + bool GetIndicator() const + { + return isIndicator_; + } + + void SetIndicator(bool indicator) + { + isIndicator_ = indicator; + } + + double GetRatingScore() const + { + return ratingScore_; + } + + void SetRatingScore(double ratingScore) + { + ratingScore_ = ratingScore; + } + + double GetStepSize() const + { + return stepSize_; + } + + void SetStepSize(double stepSize) + { + stepSize_ = stepSize; + } + + const Dimension& GetWidth() const + { + return width_; + } + + void SetWidth(const Dimension& width) + { + width_ = width; + } + + const Dimension& GetHeight() const + { + return height_; + } + + void SetHeight(const Dimension& height) + { + height_ = height; + } + const Dimension& GetDefaultHeight() const + { + return defaultHeight_; + } + + void SetDefaultHeight(const Dimension& defaultHeight) + { + defaultHeight_ = defaultHeight; + } + + const std::string& GetForegroundSrc() const + { + return foregroundSrc_; + } + + void SetForegroundSrc(const std::string& foregroundSrc) + { + foregroundSrc_ = foregroundSrc; + } + + const std::string& GetSecondarySrc() const + { + return secondarySrc_; + } + + void SetSecondarySrc(const std::string& secondarySrc) + { + secondarySrc_ = secondarySrc; + } + + const std::string& GetBackgroundSrc() const + { + return backgroundSrc_; + } + + void SetBackgroundSrc(const std::string& backgroundSrc) + { + backgroundSrc_ = backgroundSrc; + } + + RefPtr GetForegroundImage() const + { + return foregroundImage_; + } + + RefPtr GetSecondaryImage() const + { + return secondaryImage_; + } + + RefPtr GetBackgroundImage() const + { + return backgroundImage_; + } + + void SetChangeEventId(const EventMarker& changeEventId) + { + changeEventId_ = changeEventId; + } + + const EventMarker& GetChangeEventId() const + { + return changeEventId_; + } + + void SetPaddingHorizontal(const Dimension& paddingHorizontal) + { + paddingHorizontal_ = paddingHorizontal; + } + + const Dimension& GetPaddingHorizontal() const + { + return paddingHorizontal_; + } + + void SetPaddingVertical(const Dimension& paddingVertical) + { + paddingVertical_ = paddingVertical; + } + + const Dimension& GetPaddingVertical() const + { + return paddingVertical_; + } + + const InternalResource::ResourceId& GetForegroundResourceId() const + { + return foregroundResourceId_; + } + + const InternalResource::ResourceId& GetSecondaryResourceId() const + { + return secondaryResourceId_; + } + + const InternalResource::ResourceId& GetBackgroundResourceId() const + { + return backgroundResourceId_; + } + + void SetRtlFlip(bool rtlFlip) + { + rtlFlip_ = rtlFlip; + } + + bool IsRtlFlip() const + { + return rtlFlip_; + } + + void SetDesignedStarAspectRatio(double designedStarAspectRatio) + { + designedStarAspectRatio_ = designedStarAspectRatio; + } + + double GetDesignedStarAspectRatio() const + { + return designedStarAspectRatio_; + } + + void SetFocusBorderWidth(const Dimension& focusBorderWidth) + { + focusBorderWidth_ = focusBorderWidth; + } + + const Dimension& GetFocusBorderWidth() const + { + return focusBorderWidth_; + } + + void SetFocusBorderRadius(const Dimension& focusBorderRadius) + { + focusBorderRadius_ = focusBorderRadius; + } + + const Dimension& GetFocusBorderRadius() const + { + return focusBorderRadius_; + } + + void SetHoverColor(const Color& hoverColor) + { + hoverColor_ = hoverColor; + } + + const Color& GetHoverColor() const + { + return hoverColor_; + } + + void SetStarColorActive(const Color& starColorActive) + { + starColorActive_ = starColorActive; + } + + const Color& GetStarColorActive() const + { + return starColorActive_; + } + + void SetStarColorInactive(const Color& starColorInactive) + { + starColorInactive_ = starColorInactive; + } + + const Color& GetStarColorInactive() const + { + return starColorInactive_; + } + +private: + int32_t starNum_ = DEFAULT_RATING_STAR_NUM; + double ratingScore_ = DEFAULT_RATING_SCORE; + double stepSize_ = DEFAULT_RATING_STEP_SIZE; + double designedStarAspectRatio_ = 1.0; + Dimension width_; + Dimension height_; + Dimension defaultHeight_; + Dimension paddingHorizontal_; + Dimension paddingVertical_; + std::string foregroundSrc_; + std::string secondarySrc_; + std::string backgroundSrc_; + InternalResource::ResourceId foregroundResourceId_ = InternalResource::ResourceId::RATE_STAR_BIG_ON_SVG; + InternalResource::ResourceId secondaryResourceId_ = InternalResource::ResourceId::RATE_STAR_BIG_OFF_SVG; + InternalResource::ResourceId backgroundResourceId_ = InternalResource::ResourceId::RATE_STAR_BIG_OFF_SVG; + bool isIndicator_ = false; + bool rtlFlip_ = true; + RefPtr foregroundImage_ = + AceType::MakeRefPtr(InternalResource::ResourceId::RATE_STAR_BIG_ON_SVG); + RefPtr secondaryImage_ = + AceType::MakeRefPtr(InternalResource::ResourceId::RATE_STAR_BIG_OFF_SVG); + RefPtr backgroundImage_ = + AceType::MakeRefPtr(InternalResource::ResourceId::RATE_STAR_BIG_OFF_SVG); + EventMarker changeEventId_; + Color starColorActive_; + Color starColorInactive_; + + // properties for phone platform + Color hoverColor_; + Dimension focusBorderWidth_; + Dimension focusBorderRadius_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_RATING_RATING_COMPONENT_H diff --git a/frameworks/core/components/rating/rating_element.h b/frameworks/core/components/rating/rating_element.h new file mode 100644 index 00000000..ed6a8a1a --- /dev/null +++ b/frameworks/core/components/rating/rating_element.h @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_RATING_RATING_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_RATING_RATING_ELEMENT_H + +#include "core/components/focus_animation/render_focus_animation.h" +#include "core/components/rating/render_rating.h" +#include "core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +class RatingElement : public RenderElement, public FocusNode { + DECLARE_ACE_TYPE(RatingElement, RenderElement, FocusNode); + +public: + void OnFocus() override + { + const auto& renderRating = AceType::DynamicCast(renderNode_); + if (!renderRating) { + return; + } + renderRating->ChangeStatus(RenderStatus::FOCUS); + renderRating->SetFocusEventFlag(true); + renderRating->MarkNeedLayout(); + } + + void OnBlur() override + { + const auto& renderRating = AceType::DynamicCast(renderNode_); + if (!renderRating) { + return; + } + renderRating->SetFocusEventFlag(false); + renderRating->MarkNeedLayout(); + auto focusAnimation = renderRating->GetFocusAnimation(); + if (!focusAnimation) { + return; + } + focusAnimation->CancelFocusAnimation(); + } + + bool OnKeyEvent(const KeyEvent& keyEvent) override + { + if (keyEvent.action != KeyAction::UP) { + return false; + } + const auto& renderRating = AceType::DynamicCast(renderNode_); + if (!renderRating) { + return false; + } + return renderRating->HandleFocusEvent(keyEvent); + } +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_RATING_RATING_ELEMENT_H diff --git a/frameworks/core/components/rating/rating_theme.h b/frameworks/core/components/rating/rating_theme.h new file mode 100644 index 00000000..5bfa6fbe --- /dev/null +++ b/frameworks/core/components/rating/rating_theme.h @@ -0,0 +1,214 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_RATING_RATING_THEME_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_RATING_RATING_THEME_H + +#include "base/resource/internal_resource.h" +#include "core/components/common/properties/color.h" +#include "core/components/theme/theme.h" +#include "core/components/theme/theme_constants.h" + +namespace OHOS::Ace { + +/** + * RatingTheme defines color and styles of RatingComponent. RatingTheme should be built + * using RatingTheme::Builder. + */ +class RatingTheme : public virtual Theme { + DECLARE_ACE_TYPE(RatingTheme, Theme); + +public: + class Builder { + public: + Builder() = default; + ~Builder() = default; + + RefPtr Build(const RefPtr& themeConstants) const + { + RefPtr theme = AceType::Claim(new RatingTheme()); + if (!themeConstants) { + return theme; + } + theme->starNum_ = themeConstants->GetInt(THEME_RATING_STAR_NUM); + theme->ratingScore_ = themeConstants->GetDouble(THEME_RATING_SCORE); + theme->ratingMiniScore_ = themeConstants->GetDouble(THEME_RATING_MINI_SCORE); + theme->stepSize_ = themeConstants->GetDouble(THEME_RATING_STEPSIZE); + theme->paddingVertical_ = themeConstants->GetDimension(THEME_RATING_PADDING_VERTICAL); + theme->ratingWidth_ = themeConstants->GetDimension(THEME_RATING_BIG_WIDTH); + theme->ratingHeight_ = themeConstants->GetDimension(THEME_RATING_BIG_HEIGHT); + theme->ratingMiniWidth_ = themeConstants->GetDimension(THEME_RATING_MINI_WIDTH); + theme->ratingMiniHeight_ = themeConstants->GetDimension(THEME_RATING_MINI_HEIGHT); + theme->foregroundResourceId_ = themeConstants->GetResourceId(THEME_RATING_RESOURCE_ID_BIG_ON); + theme->secondaryResourceId_ = themeConstants->GetResourceId(THEME_RATING_RESOURCE_ID_BIG_HALF); + theme->backgroundResourceId_ = themeConstants->GetResourceId(THEME_RATING_RESOURCE_ID_BIG_OFF); + theme->foregroundMiniResourceId_ = themeConstants->GetResourceId(THEME_RATING_RESOURCE_ID_MINI_ON); + theme->secondaryMiniResourceId_ = themeConstants->GetResourceId(THEME_RATING_RESOURCE_ID_MINI_HALF); + theme->backgroundMiniResourceId_ = themeConstants->GetResourceId(THEME_RATING_RESOURCE_ID_MINI_OFF); + theme->designedStarAspectRatio_ = themeConstants->GetDouble(THEME_RATING_DESIGNED_STAR_ASPECT_RATIO); + theme->focusBorderWidth_ = themeConstants->GetDimension(THEME_RATING_FOCUS_BORDER_WIDTH); + theme->focusBorderRadius_ = themeConstants->GetDimension(THEME_RATING_FOCUS_BORDER_RADIUS); + theme->hoverColor_ = themeConstants->GetColor(THEME_RATING_HOVER_COLOR); + theme->starColorActive_ = themeConstants->GetColor(THEME_RATING_STAR_COLOR_ACTIVE); + theme->starColorInactive_ = themeConstants->GetColor(THEME_RATING_STAR_COLOR_INACTIVE); + auto themeStyle = themeConstants->GetThemeStyle(); + if (themeStyle) { + theme->hoverColor_ = themeStyle->GetAttr(THEME_ATTR_COLOR_HOVER, Color::RED); + theme->starColorActive_ = themeStyle->GetAttr(THEME_ATTRPALETTE_COLOR11, Color::RED); + theme->starColorInactive_ = themeStyle->GetAttr(THEME_ATTR_COLOR_COMPONENT_NORMAL, Color::RED); + } + return theme; + } + }; + + ~RatingTheme() override = default; + + int32_t GetStarNum() const + { + return starNum_; + } + + const Dimension& GetRatingWidth() const + { + return ratingWidth_; + } + + const Dimension& GetRatingHeight() const + { + return ratingHeight_; + } + + const Dimension& GetRatingMiniWidth() const + { + return ratingMiniWidth_; + } + + const Dimension& GetRatingMiniHeight() const + { + return ratingMiniHeight_; + } + + const Dimension& GetPaddingVertical() const + { + return paddingVertical_; + } + + double GetStepSize() const + { + return stepSize_; + } + + double GetRatingScore() const + { + return ratingScore_; + } + + double GetRatingMiniScore() const + { + return ratingMiniScore_; + } + + const InternalResource::ResourceId& GetForegroundResourceId() const + { + return foregroundResourceId_; + } + + const InternalResource::ResourceId& GetSecondaryResourceId() const + { + return secondaryResourceId_; + } + + const InternalResource::ResourceId& GetBackgroundResourceId() const + { + return backgroundResourceId_; + } + + const InternalResource::ResourceId& GetForegroundMiniResourceId() const + { + return foregroundMiniResourceId_; + } + + const InternalResource::ResourceId& GetSecondaryMiniResourceId() const + { + return secondaryMiniResourceId_; + } + + const InternalResource::ResourceId& GetBackgroundMiniResourceId() const + { + return backgroundMiniResourceId_; + } + + double GetDesignedStarAspectRatio() const + { + return designedStarAspectRatio_; + } + + const Dimension& GetFocusBorderWidth() const + { + return focusBorderWidth_; + } + + const Dimension& GetFocusBorderRadius() const + { + return focusBorderRadius_; + } + + const Color& GetHoverColor() const + { + return hoverColor_; + } + + const Color& GetStarColorActive() const + { + return starColorActive_; + } + + const Color& GetStarColorInactive() const + { + return starColorInactive_; + } + +protected: + RatingTheme() = default; + +private: + int32_t starNum_ = 0; + Dimension ratingWidth_; + Dimension ratingHeight_; + Dimension ratingMiniWidth_; + Dimension ratingMiniHeight_; + Dimension paddingVertical_; + double stepSize_ = 0.0; + double ratingScore_ = 0.0; + double ratingMiniScore_ = 0.0; + double designedStarAspectRatio_ = 1.0; + InternalResource::ResourceId foregroundResourceId_ = InternalResource::ResourceId::RATE_STAR_BIG_ON_SVG; + InternalResource::ResourceId secondaryResourceId_ = InternalResource::ResourceId::RATE_STAR_BIG_OFF_SVG; + InternalResource::ResourceId backgroundResourceId_ = InternalResource::ResourceId::RATE_STAR_BIG_OFF_SVG; + InternalResource::ResourceId foregroundMiniResourceId_ = InternalResource::ResourceId::RATE_STAR_SMALL_ON_SVG; + InternalResource::ResourceId secondaryMiniResourceId_ = InternalResource::ResourceId::RATE_STAR_SMALL_ON_SVG; + InternalResource::ResourceId backgroundMiniResourceId_ = InternalResource::ResourceId::RATE_STAR_SMALL_OFF_SVG; + + // properties for phone platform + Color hoverColor_; + Color starColorActive_; + Color starColorInactive_; + Dimension focusBorderWidth_; + Dimension focusBorderRadius_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_RATING_RATING_THEME_H diff --git a/frameworks/core/components/rating/render_rating.cpp b/frameworks/core/components/rating/render_rating.cpp new file mode 100644 index 00000000..4314a074 --- /dev/null +++ b/frameworks/core/components/rating/render_rating.cpp @@ -0,0 +1,616 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/rating/render_rating.h" + +#include + +#include "base/log/log.h" +#include "base/utils/utils.h" +#include "core/components/image/render_image.h" +#include "core/components/rating/rating_component.h" +#include "core/event/ace_event_helper.h" + +namespace OHOS::Ace { + +void RenderRating::Update(const RefPtr& component) +{ + RefPtr rating = AceType::DynamicCast(component); + if (rating) { + Initialize(); + if (rating->GetStarNum() != starNum_) { + hoverColorMap_.clear(); + starNum_ = rating->GetStarNum(); + } + bool isUpdateAll = rating->GetUpdateType() == UpdateType::ALL; + if (isUpdateAll) { + ratingScore_ = rating->GetRatingScore(); + } + stepSize_ = rating->GetStepSize(); + paddingHorizontal_ = rating->GetPaddingHorizontal(); + paddingVertical_ = rating->GetPaddingVertical(); + defaultHeight_ = rating->GetDefaultHeight(); + + foregroundSrc_ = rating->GetForegroundSrc(); + secondarySrc_ = rating->GetSecondarySrc(); + backgroundSrc_ = rating->GetBackgroundSrc(); + foregroundResourceId_ = rating->GetForegroundResourceId(); + secondaryResourceId_ = rating->GetSecondaryResourceId(); + backgroundResourceId_ = rating->GetBackgroundResourceId(); + + focusBorderWidth_ = rating->GetFocusBorderWidth(); + focusBorderRadius_ = rating->GetFocusBorderRadius(); + hoverColor_ = rating->GetHoverColor(); + starColorActive_ = rating->GetStarColorActive().GetValue(); + starColorInactive_ = rating->GetStarColorInactive().GetValue(); + + ProcessAttributes(isUpdateAll); + + designedAspectRatio_ = rating->GetDesignedStarAspectRatio() * starNum_; + isIndicator_ = rating->GetIndicator(); + needReverse_ = (rating->GetTextDirection() == TextDirection::RTL); + rtlFlip_ = rating->IsRtlFlip(); + onScoreChange_ = AceAsyncEvent::Create(rating->GetChangeEventId(), context_); + + RefPtr foregroundImage = rating->GetForegroundImage(); + foregroundImage->SetResourceId(foregroundResourceId_); + UpdateRenderImage(foregroundImage, ImageFit::FILL, foregroundSrc_, renderForeground_, starColorActive_); + + RefPtr secondaryImage = rating->GetSecondaryImage(); + secondaryImage->SetResourceId(secondaryResourceId_); + UpdateRenderImage(secondaryImage, ImageFit::FILL, secondarySrc_, renderSecondary_, starColorInactive_); + + RefPtr backgroundImage = rating->GetBackgroundImage(); + backgroundImage->SetResourceId(backgroundResourceId_); + UpdateRenderImage(backgroundImage, ImageFit::FILL, backgroundSrc_, renderBackground_, starColorInactive_); + } + InitAccessibilityEventListener(); + MarkNeedLayout(); +} + +void RenderRating::PerformLayout() +{ + auto context = context_.Upgrade(); + if (!context) { + return; + } + width_ = GetLayoutParam().GetMaxSize().Width(); + height_ = GetLayoutParam().GetMaxSize().Height(); + paddingHorizontal_ = Dimension(NormalizeToPx(paddingHorizontal_), DimensionUnit::PX); + paddingVertical_ = Dimension(NormalizeToPx(paddingVertical_), DimensionUnit::PX); + defaultHeight_ = Dimension(NormalizeToPx(defaultHeight_), DimensionUnit::PX); + focusBorderWidth_ = Dimension(NormalizeToPx(focusBorderWidth_), DimensionUnit::PX); + focusBorderRadius_ = Dimension(NormalizeToPx(focusBorderRadius_), DimensionUnit::PX); + auto scale = context->GetViewScale(); + ACE_DCHECK(!NearZero(scale)); + AdaptLayoutSize(scale); + SetLayoutSize(GetLayoutParam().GetMaxSize()); + CalculateRatingSize(); + singleWidth_ = ratingSize_.Width() / starNum_; + if (singleWidth_ <= paddingHorizontal_.Value() * 2 && !NearZero(singleWidth_)) { + paddingHorizontal_.SetValue(DEFAULT_RATING_HORIZONTAL_PADDING); + } + if (ratingSize_.Height() <= paddingVertical_.Value() * 2 && !NearZero(singleWidth_)) { + paddingVertical_.SetValue(DEFAULT_RATING_VERTICAL_PADDING); + } + CalculateImageWidth(); + LayoutAllRenderImage(); +} + +void RenderRating::CalculateRatingSize() +{ + ratingSize_ = GetLayoutSize(); + if (IsTv()) { + double realAspectRatio = Size::CalcRatio(GetLayoutSize()); + if (realAspectRatio > designedAspectRatio_) { + ratingSize_.SetWidth(ratingSize_.Height() * designedAspectRatio_); + } else { + ratingSize_.SetHeight(ratingSize_.Width() / designedAspectRatio_); + } + } +} + +void RenderRating::InitAccessibilityEventListener() +{ + auto accessibilityNode = accessibilityNode_.Upgrade(); + if (accessibilityNode) { + accessibilityNode->SetScrollableState(true); + accessibilityNode->SetActionScrollForward([wp = AceType::WeakClaim(this)]() { + auto rating = wp.Upgrade(); + if (rating) { + rating->HandleActionScroll(true); + return true; + } + return false; + }); + accessibilityNode->SetActionScrollBackward([wp = AceType::WeakClaim(this)]() { + auto rating = wp.Upgrade(); + if (rating) { + rating->HandleActionScroll(false); + return true; + } + return false; + }); + accessibilityNode->SetAccessibilityValue(drawScore_, 0.0, starNum_); + } +} + +void RenderRating::UpdateAccessibilityAttr() +{ + auto accessibilityNode = accessibilityNode_.Upgrade(); + if (accessibilityNode) { + accessibilityNode->SetAccessibilityValue(drawScore_, 0.0, starNum_); + auto context = context_.Upgrade(); + if (context) { + AccessibilityEvent ratingEvent; + ratingEvent.nodeId = accessibilityNode->GetNodeId(); + ratingEvent.eventType = "selected"; + ratingEvent.componentType = "rating"; + ratingEvent.currentItemIndex = drawScore_; + ratingEvent.itemCount = starNum_; + context->SendEventToAccessibility(ratingEvent); + } + } +} + +void RenderRating::HandleActionScroll(bool isForward) +{ + if (isForward) { + StarMovingForward(); + } else { + StarMovingBackward(); + } +} + +void RenderRating::CalculateImageWidth() +{ + ConstrainScore(drawScore_, 0.0, starNum_); + double secondaryStar = (ceil(drawScore_) - drawScore_); + secondaryImageWidth_ = secondaryStar * (singleWidth_ - 2 * paddingHorizontal_.Value()) + + paddingHorizontal_.Value() * ceil(secondaryStar); + foregroundImageWidth_ = ceil(drawScore_) * singleWidth_ - secondaryImageWidth_; + backgroundImageWidth_ = ratingSize_.Width() - foregroundImageWidth_ - secondaryImageWidth_; +} + +void RenderRating::LayoutAllRenderImage() +{ + double imageVerticalOffset = ratingSize_.Width() * paddingVertical_.Value() / defaultHeight_.Value() / starNum_; + double ratingHeight = ratingSize_.Height() - imageVerticalOffset * 2; + + paintForeground_ = !NearZero(foregroundImageWidth_); + if (paintForeground_) { + LayoutRenderImage(renderForeground_, Size(singleWidth_, ratingHeight)); + } + + paintSecondary_ = !NearZero(secondaryImageWidth_); + if (paintSecondary_) { + LayoutRenderImage(renderSecondary_, Size(singleWidth_, ratingHeight)); + } + + paintBackground_ = !NearZero(backgroundImageWidth_); + if (paintBackground_) { + LayoutRenderImage(renderBackground_, Size(singleWidth_, ratingHeight)); + } +} + +void RenderRating::UpdateRatingBar() +{ + UpdateAccessibilityAttr(); + MarkNeedLayout(); +} + +void RenderRating::LayoutRenderImage(const RefPtr& renderImage, const Size& imageComponentSize) +{ + LayoutParam imageLayoutParam; + imageLayoutParam.SetFixedSize(imageComponentSize); + renderImage->SetNeedLayout(true); + renderImage->Layout(imageLayoutParam); +} + +bool RenderRating::StarMovingBackward() +{ + bool movingOut = + (!needReverse_ && NearEqual(drawScore_, stepSize_)) || (needReverse_ && NearEqual(drawScore_, starNum_)); + if (movingOut) { + return false; + } + drawScore_ = needReverse_ ? (drawScore_ + stepSize_) : (drawScore_ - stepSize_); + ConstrainScore(drawScore_, stepSize_, starNum_); + ratingScore_ = drawScore_; + UpdateAccessibilityAttr(); + MarkNeedLayout(); + return true; +} + +bool RenderRating::StarMovingForward() +{ + bool movingOut = + (!needReverse_ && NearEqual(drawScore_, starNum_)) || (needReverse_ && NearEqual(drawScore_, stepSize_)); + if (movingOut) { + return false; + } + drawScore_ = needReverse_ ? (drawScore_ - stepSize_) : (drawScore_ + stepSize_); + ConstrainScore(drawScore_, stepSize_, starNum_); + ratingScore_ = drawScore_; + UpdateAccessibilityAttr(); + MarkNeedLayout(); + return true; +} + +void RenderRating::RequestFocusAnimation(const Offset& animationOffset, const Size& animationSize, double borderRadius) +{ + auto context = context_.Upgrade(); + if (!context) { + LOGE("Pipeline context upgrade fail!"); + return; + } + focusAnimation_ = context->GetRenderFocusAnimation(); + if (!focusAnimation_) { + LOGE("focusAnimation is null!"); + return; + } + context->ShowFocusAnimation(RRect::MakeRRect(Rect(Offset(), animationSize), borderRadius, borderRadius), + Color::FromRGB(255, 255, 255), animationOffset); +} + +bool RenderRating::HandleFocusEvent(const KeyEvent& keyEvent) +{ + if (isIndicator_) { + return false; + } + auto context = context_.Upgrade(); + ACE_DCHECK(context); + operationEvent_ = OperationEvent::RATING_KEY_EVENT; + switch (keyEvent.code) { + case KeyCode::TV_CONTROL_LEFT: + return StarMovingBackward(); + case KeyCode::TV_CONTROL_RIGHT: + return StarMovingForward(); + case KeyCode::TV_CONTROL_ENTER: + case KeyCode::TV_CONTROL_CENTER: + case KeyCode::KEYBOARD_NUMBER_ENTER: + // fire current score via change event when ENTER key is clicked, whether the score changes or not + FireChangeEvent(); + return true; + default: + return false; + } +} + +void RenderRating::UpdateRenderImage(const RefPtr& imageComponent, const ImageFit& imageFit, + const std::string& imageSrc, RefPtr& renderImage, uint32_t svgColor) +{ + imageComponent->SetImageFit(imageFit); + if (!imageSrc.empty()) { + imageComponent->SetResourceId(InternalResource::ResourceId::NO_ID); + // Handle situation of resource changes from internal to outer. + imageComponent->SetColor(Color::TRANSPARENT); + } else if (sourceErrorColor_ != Color::TRANSPARENT) { + imageComponent->SetColor(sourceErrorColor_); // use [sourceErrorColor_] for all stars to show source error + } else { + imageComponent->SetColor(Color(svgColor)); // this color only takes effects when using internal svg resources + } + imageComponent->SetSrc(imageSrc); + imageComponent->SetFitMaxSize(true); + if (needReverse_ && rtlFlip_) { + imageComponent->SetTextDirection(TextDirection::RTL); + imageComponent->SetMatchTextDirection(true); + } + + renderImage = AceType::DynamicCast(imageComponent->CreateRenderNode()); + renderImage->Attach(GetContext()); + renderImage->Update(imageComponent); + + AddChild(renderImage); +} + +void RenderRating::OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) +{ + dragDetector_->SetCoordinateOffset(coordinateOffset); + clickDetector_->SetCoordinateOffset(coordinateOffset); + + result.emplace_back(dragDetector_); + result.emplace_back(clickDetector_); +} + +void RenderRating::HandleClick(const Offset& clickPosition) +{ + HandleTouchEvent(clickPosition); + FireChangeEvent(); + RequestFocusAnimationForPhone(); +} + +void RenderRating::HandleDragUpdate(const Offset& updatePoint) +{ + HandleTouchEvent(updatePoint); +} + +void RenderRating::HandleDragEnd() +{ + FireChangeEvent(); + RequestFocusAnimationForPhone(); +} + +void RenderRating::HandleTouchEvent(const Offset& updatePoint) +{ + if (isIndicator_ || NearZero(singleWidth_)) { + return; + } + + double wholeStarNum = 0.0; + double posInSingle = 0.0; + operationEvent_ = OperationEvent::RATING_TOUCH_EVENT; + if (needReverse_) { + double ratingWidth = GetLayoutSize().Width(); + wholeStarNum = floor((ratingWidth - updatePoint.GetX()) / singleWidth_); + posInSingle = ratingWidth - updatePoint.GetX() - wholeStarNum * singleWidth_; + } else { + wholeStarNum = floor(updatePoint.GetX() / singleWidth_); + posInSingle = updatePoint.GetX() - wholeStarNum * singleWidth_; + } + if (posInSingle < paddingHorizontal_.Value()) { + ratingScore_ = wholeStarNum; + } else if (posInSingle >= paddingHorizontal_.Value() && posInSingle <= singleWidth_ - paddingHorizontal_.Value()) { + ratingScore_ = + wholeStarNum + (posInSingle - paddingHorizontal_.Value()) / (singleWidth_ - paddingHorizontal_.Value() * 2); + } else if (posInSingle > singleWidth_ - paddingHorizontal_.Value()) { + ratingScore_ = wholeStarNum + 1; + } + ratingScore_ = (ratingScore_ > starNum_) ? starNum_ : ratingScore_; + ratingScore_ = (ratingScore_ > stepSize_) ? ratingScore_ : stepSize_; + + double newScore = ceil(ratingScore_ / stepSize_) * stepSize_; + newScore = (newScore > starNum_) ? starNum_ : newScore; + if (NearEqual(newScore, drawScore_)) { + return; + } + + drawScore_ = newScore; + ConstrainScore(drawScore_, stepSize_, starNum_); + UpdateRatingBar(); +} + +void RenderRating::Initialize() +{ + dragDetector_ = AceType::MakeRefPtr(); + dragDetector_->SetOnDragUpdate([weak = WeakClaim(this)](const DragUpdateInfo& info) { + auto rating = weak.Upgrade(); + if (rating) { + rating->HandleDragUpdate(info.GetLocalLocation()); + } + }); + dragDetector_->SetOnDragEnd([weak = WeakClaim(this)](const DragEndInfo& info) { + auto rating = weak.Upgrade(); + if (rating) { + rating->HandleDragEnd(); + } + }); + clickDetector_ = AceType::MakeRefPtr(); + clickDetector_->SetOnClick([weak = WeakClaim(this)](const ClickInfo& info) { + auto rating = weak.Upgrade(); + if (rating) { + rating->HandleClick(info.GetLocalLocation()); + } + }); +} + +void RenderRating::FireChangeEvent() +{ + if (onScoreChange_) { + std::string param = std::string(R"("change",{"rating":)").append(std::to_string(drawScore_).append("}")); + onScoreChange_(param); + } +} + +void RenderRating::AdaptLayoutSize(double scale) +{ + auto rawImageSize = renderForeground_->Measure(); + picWidth_ = rawImageSize.Width(); + if (width_ > 0.0 && height_ > 0.0) { + return; + } + if (!rawImageSize.IsValid()) { + return; + } + double ratio = Size::CalcRatio(rawImageSize); + if (height_ > 0.0) { + width_ = height_ * ratio * starNum_; + return; + } + if (width_ > 0.0) { + height_ = width_ / starNum_ / ratio; + return; + } + width_ = starNum_ * picWidth_ / scale; + height_ = renderForeground_->GetLayoutSize().Height(); +} + +void RenderRating::ProcessAttributes(bool isUpdateAll) +{ + if (starNum_ <= 0) { + starNum_ = DEFAULT_RATING_STAR_NUM; + } + if (IsTv()) { + stepSize_ = 1.0; + } else { + if (stepSize_ <= 0.0) { + stepSize_ = DEFAULT_RATING_STEP_SIZE; + } else if (stepSize_ > starNum_) { + stepSize_ = starNum_; + } + } + bool scoreExceedsStarNum = false; + if (ratingScore_ < 0.0) { + ratingScore_ = DEFAULT_RATING_SCORE; + } else if (ratingScore_ > starNum_) { + ratingScore_ = starNum_; + scoreExceedsStarNum = true; + } + if (paddingHorizontal_.Value() < 0.0) { + paddingHorizontal_.SetValue(DEFAULT_RATING_HORIZONTAL_PADDING); + } + if (paddingVertical_.Value() < 0.0) { + paddingVertical_.SetValue(DEFAULT_RATING_VERTICAL_PADDING); + } + bool existEmptySrc = foregroundSrc_.empty() || secondarySrc_.empty() || backgroundSrc_.empty(); + bool isAllSrcEmpty = foregroundSrc_.empty() && secondarySrc_.empty() && backgroundSrc_.empty(); + if (existEmptySrc && !isAllSrcEmpty) { + foregroundSrc_.clear(); + secondarySrc_.clear(); + backgroundSrc_.clear(); + sourceErrorColor_ = Color(starColorInactive_); + } + if (isUpdateAll) { + if (scoreExceedsStarNum) { + drawScore_ = starNum_; + return; + } + drawScore_ = Round(ratingScore_ / stepSize_) * stepSize_; + } +} + +void RenderRating::ConstrainScore(double& score, double lowerBoundary, double upperBoundary) +{ + if (GreatOrEqual(score, upperBoundary)) { + score = upperBoundary; + } + if (LessOrEqual(score, lowerBoundary)) { + score = lowerBoundary; + } +} + +void RenderRating::OnMouseHoverEnterTest() +{ + operationEvent_ = OperationEvent::RATING_MOUSE_EVENT; + if (focusAnimation_) { + focusAnimation_->CancelFocusAnimation(); + } + onHover_ = true; +} + +void RenderRating::OnMouseHoverExitTest() +{ + operationEvent_ = OperationEvent::RATING_TOUCH_EVENT; + if (onHover_) { + PlayEventEffectAnimation(0, true); + onHover_ = false; + } +} + +bool RenderRating::MouseHoverTest(const Point& parentLocalPoint) +{ + auto context = context_.Upgrade(); + if (!context) { + return false; + } + if (NearZero(singleWidth_)) { + LOGW("mouseHoverTest failed, singleWidth is zero"); + return false; + } + if (!GetTouchRect().IsInRegion(parentLocalPoint)) { + OnMouseHoverExitTest(); + return false; + } + auto localPoint = parentLocalPoint - GetPaintRect().GetOffset(); + double offsetDeltaX = (GetLayoutSize().Width() - ratingSize_.Width()) / 2.0; + int32_t starIndex = (int32_t)floor((localPoint.GetX() - offsetDeltaX) / singleWidth_); + double hoverOffsetX = starIndex * singleWidth_ + offsetDelta_.GetX(); + if (!onHover_ || !NearEqual(hoverOffset_.GetX(), hoverOffsetX)) { + hoverOffset_ = Offset(hoverOffsetX, offsetDelta_.GetY()); + PlayEventEffectAnimation(starIndex); + } + OnMouseHoverEnterTest(); + context->AddToHoverList(AceType::WeakClaim(this).Upgrade()); + return true; +} + +void RenderRating::UpdateTouchRect() +{ + touchRect_.SetSize(GetLayoutSize()); + touchRect_.SetOffset(GetPosition()); +} + +Offset RenderRating::GetStarOffset(double imageVerticalOffset) +{ + double focusScore = NearEqual(drawScore_, floor(drawScore_)) ? drawScore_ - 1 : floor(drawScore_); + focusScore = needReverse_ ? starNum_ - ceil(drawScore_) : focusScore; + ConstrainScore(focusScore, 0.0, starNum_ - 1); + // total offset of focus border is twice the width of [focusBorderWidth_], border-width + padding-width + return Offset(singleWidth_ * focusScore + imageVerticalOffset, imageVerticalOffset); +} + +void RenderRating::RequestFocusAnimationForPhone() +{ + double imageVerticalOffset = ratingSize_.Width() * paddingVertical_.Value() / defaultHeight_.Value() / starNum_; + double borderWidth = focusBorderWidth_.Value() * 2; + double focusWidth = singleWidth_ - borderWidth * 2; + double focusHeight = ratingSize_.Height() - borderWidth * 2; + RequestFocusAnimation(GetStarOffset(imageVerticalOffset) + Offset(borderWidth, borderWidth) + GetGlobalOffset(), + Size(focusWidth, focusHeight), EPSILON); +} + +void RenderRating::PlayEventEffectAnimation(int32_t starIndex, bool isHoverExists) +{ + if (!eventEffectController_) { + eventEffectController_ = AceType::MakeRefPtr(context_); + } + if (!eventEffectController_->IsStopped()) { + eventEffectController_->Stop(); + } + eventEffectController_->ClearInterpolators(); + eventEffectController_->ClearStopListeners(); + eventEffectController_->SetDuration(HOVER_DURATION); + eventEffectController_->SetFillMode(FillMode::FORWARDS); + if (hoverColorMap_.find(starIndex) == hoverColorMap_.end()) { + hoverColorMap_.emplace(starIndex, Color::TRANSPARENT); + } + for (auto& item : hoverColorMap_) { + if (item.first == starIndex && !isHoverExists) { + CreateColorAnimation(item.second, hoverColor_, item.first, isHoverExists); + } else { + CreateColorAnimation(item.second, Color::TRANSPARENT, item.first, isHoverExists); + } + } + eventEffectController_->Forward(); +} + +void RenderRating::CreateColorAnimation(const Color& from, const Color& to, int32_t starIndex, bool isHoverExists) +{ + if (from == to) { + return; + } + auto animation = AceType::MakeRefPtr>(); + auto colorFrameStart = AceType::MakeRefPtr>(0.0f, from); + auto colorFrameEnd = AceType::MakeRefPtr>(1.0f, to); + if (isHoverExists && from.GetValue() < hoverColor_.GetValue()) { + colorFrameEnd->SetCurve(Curves::FAST_OUT_SLOW_IN); + } else { + colorFrameEnd->SetCurve(Curves::FRICTION); + } + animation->AddKeyframe(colorFrameStart); + animation->AddKeyframe(colorFrameEnd); + animation->SetEvaluator(AceType::MakeRefPtr()); + animation->AddListener([weakNode = AceType::WeakClaim(this), starIndex](const Color& value) { + auto node = weakNode.Upgrade(); + if (node) { + node->hoverColorMap_[starIndex] = value; + node->MarkNeedRender(); + } + }); + eventEffectController_->AddInterpolator(animation); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/rating/render_rating.h b/frameworks/core/components/rating/render_rating.h new file mode 100644 index 00000000..7263cde9 --- /dev/null +++ b/frameworks/core/components/rating/render_rating.h @@ -0,0 +1,204 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_RATING_RENDER_RATING_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_RATING_RENDER_RATING_H + +#include "base/utils/system_properties.h" +#include "core/components/common/layout/constants.h" +#include "core/components/focus_animation/render_focus_animation.h" +#include "core/components/image/image_component.h" +#include "core/components/image/render_image.h" +#include "core/gestures/click_recognizer.h" +#include "core/gestures/drag_recognizer.h" +#include "core/pipeline/base/constants.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { +namespace { + +constexpr double EPSILON = 0.000001; + +enum class OperationEvent { + RATING_TOUCH_EVENT = 0, + RATING_KEY_EVENT, + RATING_MOUSE_EVENT, +}; + +} // namespace + +class RenderRating : public RenderNode { + DECLARE_ACE_TYPE(RenderRating, RenderNode); + +public: + static RefPtr Create(); + void Update(const RefPtr& component) override; + void PerformLayout() override; + + // focus event + void SetFocusEventFlag(bool isFocus) + { + operationEvent_ = isFocus ? OperationEvent::RATING_KEY_EVENT : OperationEvent::RATING_TOUCH_EVENT; + } + const Rect& GetAnimationRect() const + { + return animationRect_; + } + bool GetIndicator() const + { + return isIndicator_; + } + bool HandleFocusEvent(const KeyEvent& keyEvent); + bool IsTv() const + { + return SystemProperties::GetDeviceType() == DeviceType::TV; + } + bool IsPhone() const + { + return SystemProperties::GetDeviceType() == DeviceType::PHONE; + } + void CalculateRatingSize(); + void FireChangeEvent(); + void SetFocusAnimation(const RefPtr& focusAnimation) + { + focusAnimation_ = focusAnimation; + } + const RefPtr& GetFocusAnimation() const + { + return focusAnimation_; + } + void RequestFocusAnimation(const Offset& animationOffset, const Size& animationSize, double borderRadius); + + void UpdateTouchRect() override; + + Offset GetStarOffset(double imageVerticalOffset); + + void RequestFocusAnimationForPhone(); + +protected: + struct ImageAreaProperties final { + ImageAreaProperties( + double repeatNum, const Size& imageAreaSize, const Offset& drawOffset, const Offset& clipOffset) + : repeatNum(repeatNum), imageAreaSize(imageAreaSize), drawOffset(drawOffset), clipOffset(clipOffset) + {} + ~ImageAreaProperties() = default; + + double repeatNum = 0.0; + Size imageAreaSize; + Offset drawOffset; + Offset clipOffset; + }; + void AdaptLayoutSize(double scale); + void HandleTouchEvent(const Offset& updatePoint); + void InitAccessibilityEventListener(); + void UpdateAccessibilityAttr(); + void HandleActionScroll(bool isForward); + bool StarMovingForward(); + bool StarMovingBackward(); + virtual void OnMouseHoverEnterTest() override; + virtual void OnMouseHoverExitTest() override; + virtual bool MouseHoverTest(const Point& parentLocalPoint) override; + virtual void PaintFocus( + const Offset& offset, double rrectRadius, const Size& boardSize, RenderContext& context) = 0; + static void ConstrainScore(double& score, double lowerBoundary, double upperBoundary); + + void SetRatingEvent(OperationEvent operationEvent) + { + operationEvent_ = operationEvent; + } + + OperationEvent GetRatingEvent() const + { + return operationEvent_; + } + + int32_t starNum_ = DEFAULT_RATING_STAR_NUM; + double ratingScore_ = DEFAULT_RATING_SCORE; + double stepSize_ = DEFAULT_RATING_STEP_SIZE; + double width_ = DEFAULT_RATING_WIDTH; + double height_ = DEFAULT_RATING_HEIGHT; + double designedAspectRatio_ = 1.0; + std::string foregroundSrc_; + std::string secondarySrc_; + std::string backgroundSrc_; + InternalResource::ResourceId foregroundResourceId_ = InternalResource::ResourceId::RATE_STAR_SMALL_ON_SVG; + InternalResource::ResourceId secondaryResourceId_ = InternalResource::ResourceId::RATE_STAR_SMALL_OFF_SVG; + InternalResource::ResourceId backgroundResourceId_ = InternalResource::ResourceId::RATE_STAR_SMALL_OFF_SVG; + std::function onScoreChange_; + bool isIndicator_ = false; + bool needReverse_ = false; + bool rtlFlip_ = true; + Size ratingSize_; + Offset offsetDelta_; + Color sourceErrorColor_ = Color::TRANSPARENT; // [sourceErrorColor_] is applied when not all three sources are set + + // properties for phone platform + Dimension focusBorderWidth_; + Dimension focusBorderRadius_; + bool onHover_ = false; + Color hoverColor_ = Color::TRANSPARENT; + uint32_t starColorActive_ = 0xFFF7CE00; + uint32_t starColorInactive_ = 0x19000000; + Offset hoverOffset_; + + // RenderImage + void UpdateRenderImage(const RefPtr& imageComponent, const ImageFit& imageFit, + const std::string& imageSrc, RefPtr& renderImage, uint32_t svgColor); + void LayoutRenderImage(const RefPtr& renderImage, const Size& imageComponentSize); + void LayoutAllRenderImage(); + void UpdateRatingBar(); + void ProcessAttributes(bool isUpdateAll); + void CalculateImageWidth(); + + double singleWidth_ = 0.0; + double picWidth_ = 0.0; + double drawScore_ = DEFAULT_RATING_SCORE; + double foregroundImageWidth_ = 0.0; + double secondaryImageWidth_ = 0.0; + double backgroundImageWidth_ = 0.0; + Dimension paddingHorizontal_; + Dimension paddingVertical_; + Dimension defaultHeight_; + RefPtr renderForeground_; + RefPtr renderSecondary_; + RefPtr renderBackground_; + bool paintForeground_ = true; + bool paintSecondary_ = true; + bool paintBackground_ = true; + + // Gesture event + void Initialize(); + void HandleDragUpdate(const Offset& startPoint); + void HandleDragEnd(); + void OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) override; + void HandleClick(const Offset& clickPosition); + void CreateColorAnimation(const Color& from, const Color& to, int32_t starIndex, bool isHoverExists); + void PlayEventEffectAnimation(int32_t starIndex, bool isHoverExists = false); + + RefPtr dragDetector_; + RefPtr clickDetector_; + + Rect animationRect_; + + RefPtr focusAnimation_; + OperationEvent operationEvent_ { OperationEvent::RATING_TOUCH_EVENT }; + RefPtr eventEffectController_; + std::unordered_map hoverColorMap_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_RATING_RENDER_RATING_H diff --git a/frameworks/core/components/refresh/BUILD.gn b/frameworks/core/components/refresh/BUILD.gn new file mode 100644 index 00000000..ba94e208 --- /dev/null +++ b/frameworks/core/components/refresh/BUILD.gn @@ -0,0 +1,23 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("refresh") { + sources = [ + "flutter_render_refresh.cpp", + "refresh_component.cpp", + "refresh_element.cpp", + "render_refresh.cpp", + ] +} diff --git a/frameworks/core/components/refresh/flutter_render_refresh.cpp b/frameworks/core/components/refresh/flutter_render_refresh.cpp new file mode 100644 index 00000000..277e036a --- /dev/null +++ b/frameworks/core/components/refresh/flutter_render_refresh.cpp @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/refresh/flutter_render_refresh.h" + +#include "core/pipeline/base/flutter_render_context.h" + +namespace OHOS::Ace { + +using namespace Flutter; + +RefPtr RenderRefresh::Create() +{ + return AceType::MakeRefPtr(); +} + +RenderLayer FlutterRenderRefresh::GetRenderLayer() +{ + if (!layer_) { + layer_ = AceType::MakeRefPtr( + 0.0, GetLayoutSize().Width(), 0.0, GetLayoutSize().Height(), Clip::HARD_EDGE); + } + return AceType::RawPtr(layer_); +} + +void FlutterRenderRefresh::Paint(RenderContext& context, const Offset& offset) +{ + LOGD("Refresh Paint"); + layer_->SetClip(0.0, GetLayoutSize().Width(), 0.0, GetLayoutSize().Height(), Clip::HARD_EDGE); + + auto children = GetChildren(); + if (children.empty()) { + LOGW("Refresh has no child!"); + return; + } + auto indicator = GetChildren().front(); + auto content = GetChildren().back(); + + context.PaintChild(content, offset); + context.PaintChild(indicator, offset); + if (IsShowLastTime()) { + context.PaintChild(GetDisplay(), offset); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/refresh/flutter_render_refresh.h b/frameworks/core/components/refresh/flutter_render_refresh.h new file mode 100644 index 00000000..f3184b82 --- /dev/null +++ b/frameworks/core/components/refresh/flutter_render_refresh.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_REFRESH_FLUTTER_RENDER_REFRESH_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_REFRESH_FLUTTER_RENDER_REFRESH_H + +#include "core/components/refresh/render_refresh.h" +#include "core/pipeline/layers/clip_layer.h" + +namespace OHOS::Ace { + +class FlutterRenderRefresh : public RenderRefresh { + DECLARE_ACE_TYPE(FlutterRenderRefresh, RenderRefresh); + +public: + RenderLayer GetRenderLayer() override; + void Paint(RenderContext& context, const Offset& offset) override; + +private: + RefPtr layer_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_REFRESH_FLUTTER_RENDER_REFRESH_H diff --git a/frameworks/core/components/refresh/refresh_component.cpp b/frameworks/core/components/refresh/refresh_component.cpp new file mode 100644 index 00000000..fd766c7e --- /dev/null +++ b/frameworks/core/components/refresh/refresh_component.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/refresh/refresh_component.h" + +#include "core/components/refresh/refresh_element.h" +#include "core/components/refresh/render_refresh.h" + +namespace OHOS::Ace { + +RefPtr RefreshComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +RefPtr RefreshComponent::CreateRenderNode() +{ + return RenderRefresh::Create(); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/refresh/refresh_component.h b/frameworks/core/components/refresh/refresh_component.h new file mode 100644 index 00000000..fa5c4f8e --- /dev/null +++ b/frameworks/core/components/refresh/refresh_component.h @@ -0,0 +1,267 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_REFRESH_REFRESH_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_REFRESH_REFRESH_COMPONENT_H + +#include "base/geometry/dimension.h" +#include "core/pipeline/base/sole_child_component.h" + +namespace OHOS::Ace { + +inline constexpr double DEFAULT_INDICATOR_OFFSET = 16.0; +inline constexpr int32_t MIN_FRICTION_RATIO = 0; +inline constexpr int32_t MAX_FRICTION_RATIO = 100; +#ifdef WEARABLE_PRODUCT +inline constexpr int32_t DEFAULT_FRICTION_RATIO = 62; +#else +inline constexpr int32_t DEFAULT_FRICTION_RATIO = 42; +#endif + +enum class RefreshType { + AUTO, + PULL_DOWN, +}; + +class RefreshComponent : public SoleChildComponent { + DECLARE_ACE_TYPE(RefreshComponent, SoleChildComponent); + +public: + RefreshComponent() : SoleChildComponent() {} + + ~RefreshComponent() override = default; + + RefPtr CreateElement() override; + + RefPtr CreateRenderNode() override; + + const Dimension& GetIndicatorOffset() const + { + return indicatorOffset_; + } + + void SetIndicatorOffset(const Dimension& indicatorOffset) + { + if (GreatOrEqual(indicatorOffset.Value(), 0.0)) { + indicatorOffset_ = indicatorOffset; + } else { + LOGD("indicatorOffset value is invalid"); + } + } + + bool IsRefreshing() const + { + return refreshing_; + } + + void SetRefreshing(bool isRefreshing) + { + refreshing_ = isRefreshing; + } + + bool IsUseOffset() const + { + return useOffset_; + } + + void SetUseOffset(bool isUseOffset) + { + useOffset_ = isUseOffset; + } + + RefreshType GetRefreshType() const + { + return refreshType_; + } + + void SetRefreshType(RefreshType refreshType) + { + refreshType_ = refreshType; + } + + bool IsShowLastTime() const + { + return showLastTime_; + } + + void SetShowLastTime(bool isShowLastTime) + { + showLastTime_ = isShowLastTime; + } + + void SetRefreshEventId(const EventMarker& refreshEventId) + { + refreshEventId_ = refreshEventId; + } + + void SetTimeOffset(const Dimension& timeOffset) + { + timeOffset_ = timeOffset; + } + + const Dimension& GetTimeOffset() const + { + return timeOffset_; + } + + const EventMarker& GetRefreshEventId() const + { + return refreshEventId_; + } + + void SetPulldownEventId(const EventMarker& pulldownEventId) + { + pullDownEventId_ = pulldownEventId; + } + + const EventMarker& GetPulldownEventId() const + { + return pullDownEventId_; + } + + const Color& GetBackgroundColor() const + { + return backgroundColor_; + } + + void SetBackgroundColor(const Color& backgroundColor) + { + backgroundColor_ = backgroundColor; + } + + const Color& GetProgressColor() const + { + return progressColor_; + } + + void SetProgressColor(const Color& progressColor) + { + progressColor_ = progressColor; + } + + const Dimension& GetLoadingDistance() const + { + return loadingDistance_; + } + + void SetLoadingDistance(const Dimension& loadingDistance) + { + loadingDistance_ = loadingDistance; + } + + const Dimension& GetRefreshDistance() const + { + return refreshDistance_; + } + + void SetRefreshDistance(const Dimension& refreshDistance) + { + refreshDistance_ = refreshDistance; + } + + const Dimension& GetProgressDistance() const + { + return progressDistance_; + } + + void SetProgressDistance(const Dimension& progressDistance) + { + progressDistance_ = progressDistance; + } + + const Dimension& GetMaxDistance() const + { + return maxDistance_; + } + + void SetMaxDistance(const Dimension& maxDistance) + { + maxDistance_ = maxDistance; + } + + const Dimension& GetProgressDiameter() const + { + return progressDiameter_; + } + + void SetProgressDiameter(const Dimension& progressDiameter) + { + progressDiameter_ = progressDiameter; + } + + const Dimension& GetShowTimeDistance() const + { + return showTimeDistance_; + } + + void SetShowTimeDistance(const Dimension& showTimeDistance) + { + showTimeDistance_ = showTimeDistance; + } + + void SetFriction(int32_t friction) + { + if (friction >= MIN_FRICTION_RATIO && friction <= MAX_FRICTION_RATIO) { + friction_ = friction; + } + } + + int32_t GetFriction() const + { + return friction_; + } + + const TextStyle& GetTextStyle() const + { + return textStyle_; + } + + void SetTextStyle(const TextStyle& textStyle) + { + textStyle_ = textStyle; + } + +private: + Dimension indicatorOffset_ = Dimension(DEFAULT_INDICATOR_OFFSET, DimensionUnit::VP); + Dimension loadingDistance_; + Dimension progressDistance_; + Dimension showTimeDistance_; + Dimension refreshDistance_; + Dimension maxDistance_; + Dimension progressDiameter_; + Dimension timeOffset_; + + bool useOffset_ = false; + bool showLastTime_ = false; + bool refreshing_ = false; + RefreshType refreshType_ = RefreshType::AUTO; + + int32_t friction_ = DEFAULT_FRICTION_RATIO; + TextStyle textStyle_; + +#ifdef WEARABLE_PRODUCT + Color backgroundColor_ = Color::BLACK; + Color progressColor_ = Color::WHITE; +#else + Color backgroundColor_ = Color::WHITE; + Color progressColor_ = Color::BLACK; +#endif + EventMarker refreshEventId_; + EventMarker pullDownEventId_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_REFRESH_REFRESH_COMPONENT_H diff --git a/frameworks/core/components/refresh/refresh_controller.h b/frameworks/core/components/refresh/refresh_controller.h new file mode 100644 index 00000000..261c0acd --- /dev/null +++ b/frameworks/core/components/refresh/refresh_controller.h @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_REFRESH_REFRESH_CONTROLLER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_REFRESH_REFRESH_CONTROLLER_H + +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +enum class RefreshStatus { + // The default status. + INACTIVE = 0, + // While being dragged but not enough to trig refresh. + DRAG, + // Dragging enough to refresh, and less than the max distance. + OVER_DRAG, + // While it is refreshing. + REFRESH, + // While it will scroll back to the top after refreshing. + DONE, +}; + +class RefreshController : public AceType { + DECLARE_ACE_TYPE(RefreshController, AceType); + +public: + RefreshController() = default; + ~RefreshController() override = default; + + void SetRefresh(const WeakPtr& refresh) + { + refresh_ = refresh; + } + +private: + WeakPtr refresh_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_REFRESH_REFRESH_CONTROLLER_H diff --git a/frameworks/core/components/refresh/refresh_element.cpp b/frameworks/core/components/refresh/refresh_element.cpp new file mode 100644 index 00000000..602490c2 --- /dev/null +++ b/frameworks/core/components/refresh/refresh_element.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/refresh/refresh_element.h" + +#include "core/components/refresh/refresh_component.h" + +namespace OHOS::Ace { + +void RefreshElement::PerformBuild() +{ + LOGD("RefreshElement::PerformBuild"); + RefPtr component = AceType::DynamicCast(component_); + if (!component) { + LOGE("Component is null"); + return; + } + SoleChildElement::PerformBuild(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/refresh/refresh_element.h b/frameworks/core/components/refresh/refresh_element.h new file mode 100644 index 00000000..fd434059 --- /dev/null +++ b/frameworks/core/components/refresh/refresh_element.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_REFRESH_REFRESH_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_REFRESH_REFRESH_ELEMENT_H + +#include "core/pipeline/base/sole_child_element.h" + +namespace OHOS::Ace { + +class RefreshElement : public SoleChildElement { + DECLARE_ACE_TYPE(RefreshElement, SoleChildElement); + +public: + void PerformBuild() override; + +private: + RefPtr columnChild_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_REFRESH_REFRESH_ELEMENT_H diff --git a/frameworks/core/components/refresh/refresh_theme.h b/frameworks/core/components/refresh/refresh_theme.h new file mode 100644 index 00000000..088a06b0 --- /dev/null +++ b/frameworks/core/components/refresh/refresh_theme.h @@ -0,0 +1,133 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_REFRESH_REFRESH_THEME_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_REFRESH_REFRESH_THEME_H + +#include "core/components/theme/theme.h" +#include "core/components/theme/theme_constants.h" + +namespace OHOS::Ace { + +/** + * RefreshTheme should be built using RefreshTheme::Builder. + */ +class RefreshTheme : public virtual Theme { + DECLARE_ACE_TYPE(RefreshTheme, Theme); + +public: + class Builder { + public: + Builder() = default; + ~Builder() = default; + + RefPtr Build(const RefPtr& themeConstants) const + { + RefPtr theme = AceType::Claim(new RefreshTheme()); + if (!themeConstants) { + return theme; + } + theme->loadingDistance_ = themeConstants->GetDimension(THEME_REFRESH_DEFAULT_LOADING_DISTANCE); + theme->refreshDistance_ = themeConstants->GetDimension(THEME_REFRESH_DEFAULT_REFRESHING_DISTANCE); + theme->maxDistance_ = themeConstants->GetDimension(THEME_REFRESH_DEFAULT_MAX_DISTANCE); + theme->progressDistance_ = themeConstants->GetDimension(THEME_REFRESH_DEFAULT_PROGRESS_DISTANCE); + theme->progressDiameter_ = themeConstants->GetDimension(THEME_REFRESH_DEFAULT_PROGRESS_DIAMETER); + theme->showTimeDistance_ = themeConstants->GetDimension(THEME_REFRESH_DEFAULT_SHOWTIME_DISTANCE); + theme->textStyle_.SetFontSize(themeConstants->GetDimension(THEME_REFRESH_DEFAULT_FONTSIZE)); + theme->textStyle_.SetTextColor(themeConstants->GetColor(THEME_REFRESH_DEFAULT_TEXT_COLOR)); + theme->textStyle_.SetFontWeight(FontWeight(themeConstants->GetInt(THEME_TEXTFIELD_FONT_WEIGHT))); + theme->progressColor_ = themeConstants->GetColor(THEME_REFRESH_DEFAULT_PROGRESS_COLOR); + theme->backgroundColor_ = themeConstants->GetColor(THEME_REFRESH_DEFAULT_BACKGROUND_COLOR); + ParsePattern(themeConstants->GetThemeStyle(), theme); + return theme; + } + private: + void ParsePattern(const RefPtr& themeStyle, const RefPtr& theme) const + { + if (!themeStyle) { + return; + } + theme->textStyle_.SetFontSize(themeStyle->GetAttr(THEME_ATTR_TEXT_SIZE_BODY2, 0.0_vp)); + theme->textStyle_.SetTextColor(themeStyle->GetAttr(THEME_ATTR_TEXT_COLOR_SECONDARY, Color::BLACK)); + theme->progressColor_ = themeStyle->GetAttr(THEME_ATTR_COLOR_PROGRESS, Color::BLACK); + theme->backgroundColor_ = themeStyle->GetAttr(THEME_ATTR_BG_COLOR, Color::WHITE); + } + }; + + ~RefreshTheme() override = default; + + const Dimension& GetLoadingDistance() const + { + return loadingDistance_; + } + + const Dimension& GetRefreshDistance() const + { + return refreshDistance_; + } + + const Dimension& GetProgressDistance() const + { + return progressDistance_; + } + + const Dimension& GetShowTimeDistance() const + { + return showTimeDistance_; + } + + const Dimension& GetMaxDistance() const + { + return maxDistance_; + } + + const Dimension& GetProgressDiameter() const + { + return progressDiameter_; + } + + const TextStyle& GetTextStyle() const + { + return textStyle_; + } + + const Color& GetProgressColor() const + { + return progressColor_; + } + + const Color& GetBackgroundColor() const + { + return backgroundColor_; + } + +protected: + RefreshTheme() = default; + +private: + Dimension loadingDistance_; + Dimension progressDistance_; + Dimension refreshDistance_; + Dimension maxDistance_; + Dimension progressDiameter_; + Dimension showTimeDistance_; + TextStyle textStyle_; + Color progressColor_; + Color backgroundColor_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_REFRESH_REFRESH_THEME_H diff --git a/frameworks/core/components/refresh/render_refresh.cpp b/frameworks/core/components/refresh/render_refresh.cpp new file mode 100644 index 00000000..13ef46dc --- /dev/null +++ b/frameworks/core/components/refresh/render_refresh.cpp @@ -0,0 +1,553 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/refresh/render_refresh.h" + +#include +#include + +#include "base/i18n/localization.h" +#include "core/animation/curve_animation.h" +#include "core/event/ace_event_helper.h" + +namespace OHOS::Ace { +namespace { + +constexpr int32_t ANIMATION_DURATION = 350; // Default animation duration +constexpr int32_t MAX_ALPHA = 255; +constexpr int32_t BASE_YEAR = 1900; +constexpr double DEFAULT_TIME_BOX_BOTTOM_SIZE = 8.0; // Default box height for time +constexpr double PERCENT = 0.01; // Percent +constexpr double HALF = 0.5; +const char REFRESH_LAST_UPDATED[] = "refresh.last_updated"; // I18n for last updated +const char LAST_UPDATE_FORMAT[] = "yyyy/M/d HH:mm"; // Date format for last updated +const char PULL_DOWN_START[] = "start"; // Pull-down event, state is start +const char PULL_DOWN_END[] = "end"; // Pull-down event, state is end + +} // namespace + +RenderRefresh::RenderRefresh() +{ + loadingComponent_ = AceType::MakeRefPtr(); + loading_ = AceType::DynamicCast(loadingComponent_->CreateRenderNode()); + loading_->SetLoadingMode(MODE_DRAG); + + loadingBackgroundBoxComponent_ = AceType::MakeRefPtr(); + + decoration_ = AceType::MakeRefPtr(); + loadingBackgroundBox_ = AceType::DynamicCast(loadingBackgroundBoxComponent_->CreateRenderNode()); + + loadingBoxComponent_ = AceType::MakeRefPtr(); + loadingBoxComponent_->SetFlex(BoxFlex::FLEX_X); + + loadingBox_ = AceType::DynamicCast(loadingBoxComponent_->CreateRenderNode()); + + loadingBackgroundBox_->AddChild(loading_); + loadingBox_->AddChild(loadingBackgroundBox_); + + timeBoxComponent_ = AceType::MakeRefPtr(); + timeBoxComponent_->SetFlex(BoxFlex::FLEX_X); + timeBox_ = AceType::DynamicCast(timeBoxComponent_->CreateRenderNode()); + + lastTimeText_ = Localization::GetInstance()->GetEntryLetters(REFRESH_LAST_UPDATED); + timeText_ = FormatEntry(lastTimeText_.c_str(), ""); + timeComponent_ = AceType::MakeRefPtr(timeText_); + + displayComponent_ = AceType::MakeRefPtr(); + + display_ = AceType::DynamicCast(displayComponent_->CreateRenderNode()); + time_ = AceType::DynamicCast(timeComponent_->CreateRenderNode()); + display_->AddChild(timeBox_); + timeBox_->AddChild(time_); +} + +void RenderRefresh::Update(const RefPtr& component) +{ + const RefPtr refresh = AceType::DynamicCast(component); + if (!refresh) { + LOGW("RefreshComponent is null"); + return; + } + + refreshing_ = refresh->IsRefreshing(); + showLastTime_ = refresh->IsShowLastTime(); + isUseOffset_ = refresh->IsUseOffset(); + refreshType_ = refresh->GetRefreshType(); + progressColor_ = refresh->GetProgressColor(); + backgroundColor_ = refresh->GetBackgroundColor(); + frictionRatio_ = refresh->GetFriction() * PERCENT; + + loadingComponent_->SetProgressColor(progressColor_); + loadingComponent_->SetDiameter(Dimension(GetLoadingDiameter())); + + // Set the progress background color + decoration_->SetBackgroundColor(backgroundColor_); + + if (refresh->GetTextDirection() == TextDirection::LTR) { + SetTextDirection(TextDirection::LTR); + time_->SetTextDirection(TextDirection::LTR); + } else { + SetTextDirection(TextDirection::RTL); + time_->SetTextDirection(TextDirection::RTL); + } + + if (!isInitialized_) { + loading_->Attach(GetContext()); + loadingBackgroundBox_->Attach(GetContext()); + loadingBox_->Attach(GetContext()); + AddChild(loadingBox_); + + timeBox_->Attach(GetContext()); + display_->Attach(GetContext()); + time_->Attach(GetContext()); + timeText_ = FormatEntry(lastTimeText_.c_str(), GetFormatDateTime().c_str()); + timeComponent_->SetData(timeText_); + timeComponent_->SetTextStyle(refresh->GetTextStyle()); + time_->Update(timeComponent_); + display_->Update(displayComponent_); + timeBox_->Update(timeBoxComponent_); + AddChild(display_); + + // Just run on the first time + isInitialized_ = true; + } + + loading_->Update(loadingComponent_); + loadingBackgroundBox_->Update(loadingBackgroundBoxComponent_); + loadingBox_->Update(loadingBoxComponent_); + + refreshEvent_ = AceAsyncEvent::Create(refresh->GetRefreshEventId(), context_); + pullDownEvent_ = AceAsyncEvent::Create(refresh->GetPulldownEventId(), context_); + auto pipelineContext = GetContext().Upgrade(); + if (pipelineContext) { + triggerLoadingDistance_ = pipelineContext->NormalizeToPx(refresh->GetLoadingDistance()); + triggerShowTimeDistance_ = pipelineContext->NormalizeToPx(refresh->GetShowTimeDistance()); + if (showLastTime_) { + timeDistance_ = pipelineContext->NormalizeToPx(Dimension(DEFAULT_TIME_BOX_BOTTOM_SIZE, DimensionUnit::VP)); + triggerRefreshDistance_ = triggerShowTimeDistance_; + } else { + triggerRefreshDistance_ = pipelineContext->NormalizeToPx(refresh->GetRefreshDistance()); + } + loadingDiameter_ = pipelineContext->NormalizeToPx(refresh->GetProgressDiameter()); + maxScrollOffset_ = pipelineContext->NormalizeToPx(refresh->GetMaxDistance()); + indicatorOffset_ = pipelineContext->NormalizeToPx(refresh->GetIndicatorOffset()); + timeOffset_ = pipelineContext->NormalizeToPx(refresh->GetTimeOffset()); + loading_->SetDiameter(loadingDiameter_); + loading_->SetDragRange(triggerLoadingDistance_, triggerRefreshDistance_); + loadingBox_->SetHeight(loadingDiameter_); + decoration_->SetBorderRadius(Radius(loadingDiameter_ * HALF)); + loadingBackgroundBox_->SetBackDecoration(decoration_); + } + Initialize(); + MarkNeedLayout(); +} + +void RenderRefresh::Initialize() +{ + LOGI("RenderRefresh Initialize state:%{public}d", refreshing_); + dragDetector_ = AceType::MakeRefPtr(); + dragDetector_->SetOnDragUpdate([weakFresh = AceType::WeakClaim(this)](const DragUpdateInfo& info) { + auto refresh = weakFresh.Upgrade(); + if (refresh) { + refresh->HandleDragUpdate(info.GetMainDelta()); + } + }); + dragDetector_->SetOnDragEnd([weakFresh = AceType::WeakClaim(this)](const DragEndInfo& info) { + auto refresh = weakFresh.Upgrade(); + if (refresh) { + refresh->HandleDragEnd(); + } + }); + + animator_ = AceType::MakeRefPtr(GetContext()); + refreshController_ = AceType::MakeRefPtr(); + refreshController_->SetRefresh(AceType::WeakClaim(this)); + InitAccessibilityEventListener(); +} + +void RenderRefresh::InitAccessibilityEventListener() +{ + auto refNode = accessibilityNode_.Upgrade(); + if (!refNode) { + return; + } + refNode->AddSupportAction(AceAction::ACTION_SCROLL_FORWARD); + auto weakPtr = AceType::WeakClaim(this); + refNode->SetActionScrollForward([weakPtr]() { + auto refresh = weakPtr.Upgrade(); + if (refresh) { + refresh->SetRefreshStatus(true); + refresh->MarkNeedLayout(); + } + return true; + }); +} + +void RenderRefresh::UpdateTouchRect() +{ + touchRect_.SetSize(viewPort_); + touchRect_.SetOffset(GetPosition()); +} + +void RenderRefresh::HandleDragUpdate(double delta) +{ + LOGD("RenderRefresh HandleDragUpdate delta is %{public}lf, offset is %{public}lf", delta, scrollableOffset_.GetY()); + if (NearZero(delta)) { + LOGD("Delta is near zero!"); + return; + } + if (refreshStatus_ == RefreshStatus::REFRESH && delta > 0.0) { + LOGD("The refresh status is refreshing!"); + return; + } + Offset deltaOffset(0, delta); + if (refreshStatus_ == RefreshStatus::DRAG || refreshStatus_ == RefreshStatus::OVER_DRAG || + refreshStatus_ == RefreshStatus::DONE) { + deltaOffset.SetY(GetOffset(delta)); + } + scrollableOffset_ += deltaOffset; + scrollableOffset_.SetY(std::clamp(scrollableOffset_.GetY(), 0.0, maxScrollOffset_)); + MarkNeedLayout(); +} + +void RenderRefresh::HandleDragEnd() +{ + LOGD("RenderRefresh HandleDragEnd"); + if (refreshStatus_ == RefreshStatus::INACTIVE) { + return; + } + if (refreshStatus_ == RefreshStatus::DRAG || refreshStatus_ == RefreshStatus::DONE) { + double start = scrollableOffset_.GetY(); + double end = 0.0; + StartAnimation(start, end, false); + return; + } + if (refreshStatus_ == RefreshStatus::OVER_DRAG) { + double start = scrollableOffset_.GetY(); + double end = triggerRefreshDistance_; + loading_->SetLoadingMode(MODE_LOOP); + StartAnimation(start, end, false); + } +} + +void RenderRefresh::UpdateScrollOffset(double value) +{ + scrollableOffset_.SetY(value); + MarkNeedLayout(); +} + +void RenderRefresh::FireRefreshEvent() const +{ + if (refreshEvent_) { + LOGI("RefreshEvent, refreshing = %{public}d.", refreshing_); + std::string param = + std::string(R"("refresh",{"refreshing":)").append(refreshing_ ? "true" : "false").append("},null"); + refreshEvent_(param); + } +} + +void RenderRefresh::FirePullDownEvent(const std::string& state) const +{ + if (pullDownEvent_) { + LOGI("PullDown Event, state is %{public}s", state.c_str()); + std::string param = std::string(R"("pulldown",{"state":")").append(state).append("\"},null"); + pullDownEvent_(param); + } +} + +void RenderRefresh::StartAnimation(double start, double end, bool isFinished) +{ + animator_->ClearInterpolators(); + animator_->ClearStopListeners(); + translate_ = AceType::MakeRefPtr>(start, end, Curves::FRICTION); + auto weak = AceType::WeakClaim(this); + translate_->AddListener(Animation::ValueCallback([weak](double value) { + auto scroll = weak.Upgrade(); + if (scroll) { + scroll->UpdateScrollOffset(value); + } + })); + animator_->SetDuration(ANIMATION_DURATION); + animator_->AddInterpolator(translate_); + + animator_->AddStopListener([weak, isFinished]() { + auto refresh = weak.Upgrade(); + if (refresh) { + refresh->HandleStopListener(isFinished); + } + }); + + animator_->Play(); +} + +void RenderRefresh::HandleStopListener(bool isFinished) +{ + // Update the last loading time + if (isFinished) { + timeComponent_->SetData(timeText_); + time_->Update(timeComponent_); + } + if (NearEqual(scrollableOffset_.GetY(), triggerRefreshDistance_)) { + refreshing_ = true; + FireRefreshEvent(); + } else { + loading_->SetLoadingMode(MODE_DRAG); + } +} + +RefreshStatus RenderRefresh::GetNextStatus() +{ + RefreshStatus nextStatus; + switch (refreshStatus_) { + case RefreshStatus::INACTIVE: + if (refreshing_) { + StartAnimation(0.0, triggerRefreshDistance_, false); + return RefreshStatus::REFRESH; + } + if (LessOrEqual(scrollableOffset_.GetY(), 0.0)) { + nextStatus = RefreshStatus::INACTIVE; + break; + } + // No break here, continue next case + nextStatus = RefreshStatus::DRAG; + FirePullDownEvent(PULL_DOWN_START); + [[fallthrough]]; + case RefreshStatus::DRAG: + if (LessOrEqual(scrollableOffset_.GetY(), 0.0)) { + FirePullDownEvent(PULL_DOWN_END); + nextStatus = RefreshStatus::INACTIVE; + } else if (scrollableOffset_.GetY() < triggerRefreshDistance_) { + nextStatus = RefreshStatus::DRAG; + } else { + nextStatus = RefreshStatus::OVER_DRAG; + } + break; + case RefreshStatus::OVER_DRAG: + if (!refreshEvent_) { + nextStatus = RefreshStatus::DONE; + break; + } + if (scrollableOffset_.GetY() > triggerRefreshDistance_) { + nextStatus = RefreshStatus::OVER_DRAG; + break; + } + // No break here, continue get next status. + nextStatus = RefreshStatus::REFRESH; + [[fallthrough]]; + case RefreshStatus::REFRESH: + if (!refreshing_) { + timeText_ = FormatEntry(lastTimeText_.c_str(), GetFormatDateTime().c_str()); + StartAnimation(scrollableOffset_.GetY(), 0.0, true); + return RefreshStatus::DONE; + } + nextStatus = RefreshStatus::REFRESH; + break; + case RefreshStatus::DONE: + if (scrollableOffset_.GetY() > 0.0) { + nextStatus = RefreshStatus::DONE; + } else { + FirePullDownEvent(PULL_DOWN_END); + nextStatus = RefreshStatus::INACTIVE; + } + break; + default: + nextStatus = RefreshStatus::INACTIVE; + break; + } + return nextStatus; +} + +double RenderRefresh::GetFriction(double percentage) const +{ + return frictionRatio_ * std::pow(1.0 - percentage, SQUARE); +} + +double RenderRefresh::GetOffset(double delta) const +{ + double height = GetLayoutSize().Height(); + if (!NearZero(height)) { + double friction = GetFriction(std::abs(scrollableOffset_.GetY() / height)); + return friction * delta; + } + return delta; +} + +double RenderRefresh::MaxScrollableHeight() const +{ + return GetLayoutParam().GetMaxSize().Height(); +} + +void RenderRefresh::OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) +{ + if (!dragDetector_) { + return; + } + dragDetector_->SetCoordinateOffset(coordinateOffset); + result.emplace_back(dragDetector_); +} + +double RenderRefresh::GetLoadingDiameter() const +{ + double diameter = 0.0; + if (scrollableOffset_.GetY() < triggerLoadingDistance_) { + return diameter; + } else if (scrollableOffset_.GetY() < triggerRefreshDistance_) { + double maxDistance = triggerRefreshDistance_ - triggerLoadingDistance_; + double actualDistance = scrollableOffset_.GetY() - triggerLoadingDistance_; + + // Get the diameter by actual distance + diameter = ((actualDistance * loadingDiameter_ * HALF) / maxDistance) + loadingDiameter_ * HALF; + } else { + diameter = loadingDiameter_; + } + return diameter; +} + +Offset RenderRefresh::GetLoadingOffset() const +{ + auto pipelineContext = GetContext().Upgrade(); + if (!pipelineContext) { + LOGE("pipelineContext update with nullptr"); + return Offset::Zero(); + } + + if (scrollableOffset_.GetY() < triggerLoadingDistance_) { + return Offset::Zero(); + } + if (!isUseOffset_) { + return scrollableOffset_ * HALF - Offset(0.0, GetLoadingDiameter() * HALF); + } + double factor = + (scrollableOffset_.GetY() - triggerLoadingDistance_) / (triggerRefreshDistance_ - triggerLoadingDistance_); + return Offset(0.0, indicatorOffset_ * factor); +} + +Offset RenderRefresh::GetShowTimeOffset() const +{ + auto pipelineContext = GetContext().Upgrade(); + if (!pipelineContext) { + LOGE("pipelineContext update with nullptr"); + return Offset::Zero(); + } + + double bottomOffset = timeBox_->GetLayoutSize().Height() + + pipelineContext->NormalizeToPx(Dimension(DEFAULT_TIME_BOX_BOTTOM_SIZE, DimensionUnit::VP)); + return scrollableOffset_ - Offset(0.0, bottomOffset + timeOffset_); +} + +double RenderRefresh::GetOpacity() const +{ + double factor = 0.0; + if (scrollableOffset_.GetY() < triggerRefreshDistance_ - timeDistance_) { + return factor; + } else if (scrollableOffset_.GetY() < triggerRefreshDistance_) { + double actualDistance = scrollableOffset_.GetY() - triggerRefreshDistance_ + timeDistance_; + + // Get the factor, timeDistance_ never be zero + if (!NearZero(timeDistance_)) { + factor = actualDistance / timeDistance_; + } + } else { + factor = 1.0; + } + return factor; +} + +std::string RenderRefresh::GetFormatDateTime() +{ + auto now = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now()); + auto local = std::localtime(&now); + if (local == nullptr) { + LOGE("Get localtime failed."); + return ""; + } + + // This is for i18n date time + DateTime dateTime; + dateTime.year = local->tm_year + BASE_YEAR; + dateTime.month = local->tm_mon; + dateTime.day = local->tm_mday; + dateTime.hour = local->tm_hour; + dateTime.minute = local->tm_min; + std::string time = Localization::GetInstance()->FormatDateTime(dateTime, LAST_UPDATE_FORMAT); + LOGD("Last update refresh time is %{public}s", time.c_str()); + return time; +} + +void RenderRefresh::UpdateScrollableOffset(double delta) +{ + LOGD("Update offset is %{public}lf", delta); + if (NearZero(delta)) { + LOGW("Delta is near zero!"); + return; + } + if (refreshStatus_ == RefreshStatus::REFRESH) { + LOGW("The refresh status is refreshing!"); + return; + } + Offset offset = Offset(0.0, GetOffset(delta)); + scrollableOffset_ = scrollableOffset_ + offset; + scrollableOffset_.SetY(std::min(scrollableOffset_.GetY(), maxScrollOffset_)); + MarkNeedLayout(); +} + +void RenderRefresh::OnHiddenChanged(bool hidden) +{ + if (!hidden && refreshStatus_ == RefreshStatus::REFRESH) { + refreshing_ = false; + MarkNeedLayout(); + } +} + +void RenderRefresh::PerformLayout() +{ + const auto& children = GetChildren(); + if (children.empty()) { + LOGW("Refresh has no child!"); + return; + } + + RefreshStatus nextState = GetNextStatus(); + if (nextState != RefreshStatus::REFRESH && refreshStatus_ == RefreshStatus::REFRESH) { + loading_->SetLoadingMode(MODE_EXIT); + } + refreshStatus_ = nextState; + LayoutParam innerLayout = GetLayoutParam(); + innerLayout.SetMinSize(Size(0.0, 0.0)); + + loading_->SetDragDistance(scrollableOffset_.GetY()); + loadingBox_->SetPosition(GetLoadingOffset()); + + display_->UpdateOpacity(GetOpacity() * MAX_ALPHA); + display_->SetPosition(GetShowTimeOffset()); + + loadingBox_->SetVisible(scrollableOffset_.GetY() >= triggerLoadingDistance_); + + columnChild_ = children.back(); + columnChild_->Layout(innerLayout); + if (refreshType_ == RefreshType::PULL_DOWN && GreatNotEqual(scrollableOffset_.GetY(), 0.0)) { + columnChild_->SetPosition(scrollableOffset_); + } else { + columnChild_->SetPosition(Offset::Zero()); + } + + display_->Layout(innerLayout); + loadingBox_->Layout(innerLayout); + timeBox_->Layout(innerLayout); + SetLayoutSize(GetLayoutParam().GetMaxSize()); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/refresh/render_refresh.h b/frameworks/core/components/refresh/render_refresh.h new file mode 100644 index 00000000..e21bdde9 --- /dev/null +++ b/frameworks/core/components/refresh/render_refresh.h @@ -0,0 +1,171 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_REFRESH_RENDER_REFRESH_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_REFRESH_RENDER_REFRESH_H + +#include "base/memory/ace_type.h" +#include "base/utils/system_properties.h" +#include "core/animation/animation.h" +#include "core/animation/animator.h" +#include "core/components/box/box_component.h" +#include "core/components/box/render_box.h" +#include "core/components/display/render_display.h" +#include "core/components/progress/loading_progress_component.h" +#include "core/components/progress/render_loading_progress.h" +#include "core/components/refresh/refresh_component.h" +#include "core/components/refresh/refresh_controller.h" +#include "core/components/scroll/scrollable.h" +#include "core/components/text/render_text.h" +#include "core/components/text/text_component.h" +#include "core/gestures/drag_recognizer.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderRefresh : public RenderNode { + DECLARE_ACE_TYPE(RenderRefresh, RenderNode) + +public: + RenderRefresh(); + ~RenderRefresh() override = default; + + static RefPtr Create(); + void UpdateTouchRect() override; + void Update(const RefPtr& component) override; + void OnHiddenChanged(bool hidden) override; + void PerformLayout() override; + void UpdateScrollableOffset(double delta); + void HandleDragUpdate(double delta); + void HandleDragEnd(); + + RefreshStatus GetStatus() const + { + return refreshStatus_; + } + + void SetRefreshStatus(bool refreshing) + { + refreshing_ = refreshing; + } + +protected: + void OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) override; + + const RefPtr& GetTimeBox() const + { + return timeBox_; + } + + const RefPtr& GetDisplay() const + { + return display_; + } + + bool IsShowLastTime() const + { + return showLastTime_; + } + + bool IsWatch() const + { + return SystemProperties::GetDeviceType() == DeviceType::WATCH; + } + +private: + void Initialize(); + void InitAccessibilityEventListener(); + + void UpdateScrollOffset(double value); + void FireRefreshEvent() const; + void FirePullDownEvent(const std::string& state) const; + void StartAnimation(double start, double end, bool isFinished); + void HandleStopListener(bool isFinished); + RefreshStatus GetNextStatus(); + + double MaxScrollableHeight() const; + double GetFriction(double percentage) const; + double GetOffset(double offset) const; + double GetLoadingDiameter() const; + double GetOpacity() const; + Offset GetShowTimeOffset() const; + Offset GetLoadingOffset() const; + std::string GetFormatDateTime(); + + Offset scrollableOffset_; + RefPtr dragDetector_; + RefPtr> translate_; + RefPtr animator_; + + // onRefresh event + std::function refreshEvent_; + + // OnPullDownStartEvent + std::function pullDownEvent_; + + bool showLastTime_ = false; + bool refreshing_ = false; + bool isInitialized_ = false; + bool isUseOffset_ = false; // Whether use the indicator offset or default + RefreshType refreshType_ = RefreshType::AUTO; + Color progressColor_; + Color backgroundColor_; + + RefPtr refreshController_; + RefreshStatus refreshStatus_ = RefreshStatus::INACTIVE; + + // Used for loading + RefPtr loadingComponent_; + RefPtr loadingBoxComponent_; + RefPtr loadingBackgroundBoxComponent_; + + // This is the progress loading + RefPtr loading_; + + // This is used for position + RefPtr loadingBox_; + + // This is used for progress background include circle and color + RefPtr decoration_; + RefPtr loadingBackgroundBox_; + RefPtr columnChild_; + + // Used for loading time + RefPtr timeComponent_; + RefPtr timeBoxComponent_; + RefPtr displayComponent_; + RefPtr time_; + RefPtr timeBox_; + RefPtr display_; + + // Used for different status + double triggerRefreshDistance_ = 0.0; + double triggerLoadingDistance_ = 0.0; + double triggerShowTimeDistance_ = 0.0; + double loadingDiameter_ = 0.0; + double maxScrollOffset_ = 0.0; + double indicatorOffset_ = 0.0; + double frictionRatio_ = 0.0; + double timeDistance_ = 0.0; + double timeOffset_ = 0.0; + + std::string timeText_; + std::string lastTimeText_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_REFRESH_RENDER_REFRESH_H diff --git a/frameworks/core/components/root/BUILD.gn b/frameworks/core/components/root/BUILD.gn new file mode 100644 index 00000000..9f89ec40 --- /dev/null +++ b/frameworks/core/components/root/BUILD.gn @@ -0,0 +1,23 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("root") { + sources = [ + "flutter_render_root.cpp", + "render_root.cpp", + "root_component.cpp", + "root_element.cpp", + ] +} diff --git a/frameworks/core/components/root/flutter_render_root.cpp b/frameworks/core/components/root/flutter_render_root.cpp new file mode 100644 index 00000000..07fe8b70 --- /dev/null +++ b/frameworks/core/components/root/flutter_render_root.cpp @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/root/flutter_render_root.h" + +#include "flutter/lib/ui/text/font_collection.h" +#include "flutter/lib/ui/text/paragraph_builder.h" +#include "flutter/runtime/window_manager.h" + +#include "core/pipeline/base/flutter_render_context.h" + +namespace OHOS::Ace { + +using namespace Flutter; + +RefPtr RenderRoot::Create() +{ + LOGD("RootNode::Create"); + return AceType::MakeRefPtr(); +} + +void FlutterRenderRoot::Paint(RenderContext& context, const Offset& offset) +{ + LOGD("RootNode Paint"); + auto canvas = static_cast(context).GetCanvas(); + if (!canvas || !canvas->canvas()) { + LOGE("Paint canvas is null"); + return; + } + auto skColor = SkColorSetARGB(bgColor_.GetAlpha(), bgColor_.GetRed(), bgColor_.GetGreen(), bgColor_.GetBlue()); + auto pipelineContext = GetContext().Upgrade(); + if (pipelineContext && pipelineContext->IsJsCard()) { + canvas->canvas()->drawColor(skColor); + } else { + canvas->canvas()->clear(skColor); + } + + RenderNode::Paint(context, offset); +} + +void FlutterRenderRoot::FinishRender(const std::unique_ptr& delegate, const Rect& dirty) +{ + if (delegate) { + delegate->DrawFrame(layer_, dirty); + } +} + +RenderLayer FlutterRenderRoot::GetRenderLayer() +{ + if (!layer_ || isReset_) { + matrix_.SetScale(scale_, scale_, scale_); + layer_ = AceType::MakeRefPtr(matrix_, 0.0, 0.0); + } + return AceType::RawPtr(layer_); +} + +void FlutterRenderRoot::DumpLayerTree() +{ + layer_->DumpTree(0); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/root/flutter_render_root.h b/frameworks/core/components/root/flutter_render_root.h new file mode 100644 index 00000000..488f637b --- /dev/null +++ b/frameworks/core/components/root/flutter_render_root.h @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_ROOT_FLUTTER_RENDER_ROOT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_ROOT_FLUTTER_RENDER_ROOT_H + +#include "flutter/lib/ui/compositing/scene.h" +#include "flutter/lib/ui/compositing/scene_builder.h" + +#include "base/geometry/matrix4.h" +#include "core/components/root/render_root.h" +#include "core/pipeline/layers/transform_layer.h" + +namespace OHOS::Ace { + +class FlutterRenderRoot : public RenderRoot { + DECLARE_ACE_TYPE(FlutterRenderRoot, RenderRoot); + +public: + FlutterRenderRoot() = default; + ~FlutterRenderRoot() override = default; + + void Paint(RenderContext& context, const Offset& offset) override; + void FinishRender(const std::unique_ptr& delegate, const Rect& dirty) override; + RenderLayer GetRenderLayer() override; + + BridgeType GetBridgeType() const override + { + return BridgeType::FLUTTER; + } + + void DumpLayerTree() override; + +private: + Matrix4 matrix_; + RefPtr layer_; + fml::RefPtr sceneBuilder_; + fml::RefPtr scene_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_ROOT_FLUTTER_RENDER_ROOT_H diff --git a/frameworks/core/components/root/render_root.cpp b/frameworks/core/components/root/render_root.cpp new file mode 100644 index 00000000..574fa1e2 --- /dev/null +++ b/frameworks/core/components/root/render_root.cpp @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/root/render_root.h" + +#include "base/log/log.h" +#include "core/animation/curve.h" +#include "core/animation/curve_animation.h" +#include "core/components/theme/app_theme.h" + +namespace OHOS::Ace { +namespace { + +bool IsShadowModal(const WeakPtr& contextWeak) +{ + auto context = contextWeak.Upgrade(); + if (!context) { + return false; + } + auto modal = context->GetWindowModal(); + return (modal == WindowModal::DIALOG_MODAL) || (modal == WindowModal::SEMI_MODAL) || + (modal == WindowModal::SEMI_MODAL_FULL_SCREEN); +} + +} // namespace + +RenderRoot::RenderRoot() : RenderNode(true) {} + +void RenderRoot::Update(const RefPtr&) +{ + if (!controller_ && IsShadowModal(context_)) { + controller_ = AceType::MakeRefPtr(GetContext()); + controller_->SetFillMode(FillMode::FORWARDS); + } + MarkNeedLayout(); +} + +void RenderRoot::PerformLayout() +{ + LOGD("RenderRoot::PerformLayout"); + auto appTheme = GetTheme(); + // Use theme background color to clear canvas. + if (appTheme && !isBgColorInit_) { + bgColor_ = appTheme->GetBackgroundColor(); + if (IsShadowModal(context_)) { + auto colorAnimation = + AceType::MakeRefPtr>(Color::TRANSPARENT, bgColor_, Curves::FAST_OUT_SLOW_IN); + bgColor_ = Color::TRANSPARENT; + colorAnimation->AddListener([weak = AceType::WeakClaim(this)](const Color& color) { + auto root = weak.Upgrade(); + if (!root) { + LOGE("Root transition failed. root is null."); + return; + } + if (!root->forceColor_) { + root->bgColor_ = color; + root->MarkNeedRender(); + } + }); + controller_->AddInterpolator(colorAnimation); + } + isBgColorInit_ = true; + } + viewPort_ = GetPaintRect().GetSize(); + LayoutParam innerLayoutParam; + innerLayoutParam.SetMaxSize(GetPaintRect().GetSize()); + + for (auto& child : GetChildren()) { + child->Layout(innerLayoutParam); + child->SetPosition(Offset::Zero()); + } +} + +void RenderRoot::DumpLayerTree() {} + +void RenderRoot::AnimateToHide(int32_t duration) +{ + if (controller_) { + controller_->SetDuration(duration); + controller_->Backward(); + } +} + +void RenderRoot::AnimateToShow(int32_t duration) +{ + if (controller_) { + controller_->SetDuration(duration); + controller_->Forward(); + } +} + +void RenderRoot::SetDefaultBgColor() +{ + auto appTheme = GetTheme(); + if (!appTheme) { + return; + } + bgColor_ = appTheme->GetBackgroundColor(); + forceColor_ = false; + MarkNeedRender(); +} + +void RenderRoot::SetBgColor(const Color& color) +{ + bgColor_ = color; + forceColor_ = true; + MarkNeedRender(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/root/render_root.h b/frameworks/core/components/root/render_root.h new file mode 100644 index 00000000..d568bdfc --- /dev/null +++ b/frameworks/core/components/root/render_root.h @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_ROOT_RENDER_ROOT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_ROOT_RENDER_ROOT_H + +#include "core/animation/animator.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderRoot : public RenderNode { + DECLARE_ACE_TYPE(RenderRoot, RenderNode); + +public: + ~RenderRoot() override = default; + + static RefPtr Create(); + + void Update(const RefPtr& component) override; + void PerformLayout() override; + + // Set the design size directly proportional to the real physical pixels. + void SetScale(float scale) + { + scale_ = scale; + } + + float GetScale() const + { + return scale_; + } + + virtual void DumpLayerTree(); + + bool IsRepaintBoundary() const override + { + return true; + } + + void SetReset(bool reset) + { + isReset_ = reset; + } + + void AnimateToShow(int32_t duration); + + void AnimateToHide(int32_t duration); + + void SetBgColor(const Color& color); + + void SetDefaultBgColor(); + + void NotifyOnShow() const + { + for (const auto& child : GetChildren()) { + child->OnAppShow(); + } + } + + void NotifyOnHide() const + { + for (const auto& child : GetChildren()) { + child->OnAppHide(); + } + } + +protected: + RenderRoot(); + + float scale_ = 1.0f; + Color bgColor_; + bool forceColor_ = false; + bool isBgColorInit_ = false; + bool isReset_ = false; + RefPtr controller_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_ROOT_RENDER_ROOT_H diff --git a/frameworks/core/components/root/root_component.cpp b/frameworks/core/components/root/root_component.cpp new file mode 100644 index 00000000..8d8903dd --- /dev/null +++ b/frameworks/core/components/root/root_component.cpp @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/root/root_component.h" + +#include "base/log/log.h" +#include "base/utils/utils.h" +#include "core/components/root/render_root.h" +#include "core/components/root/root_element.h" + +namespace OHOS::Ace { + +RootComponent::RootComponent(const RefPtr& child) : child_(child) {} + +RefPtr RootComponent::CreateRenderNode() +{ + LOGI("CreateRenderRoot."); + return RenderRoot::Create(); +} + +RefPtr RootComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +RefPtr RootComponent::Create(const RefPtr& child) +{ + return AceType::MakeRefPtr(child); +} + +RefPtr RootComponent::SetupElementTree(const RefPtr& context) +{ + LOGI("First build for element tree."); + RefPtr rootElement = AceType::DynamicCast(CreateElement()); + rootElement->SetPipelineContext(context); + rootElement->SetNewComponent(AceType::Claim(this)); + rootElement->Mount(nullptr); + return rootElement; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/root/root_component.h b/frameworks/core/components/root/root_component.h new file mode 100644 index 00000000..5593ec8b --- /dev/null +++ b/frameworks/core/components/root/root_component.h @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_ROOT_ROOT_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_ROOT_ROOT_COMPONENT_H + +#include "core/pipeline/base/render_component.h" + +namespace OHOS::Ace { + +class RootElement; +class PipelineContext; + +// The root component of a component tree, +// Bridge the Element to RenderNode. +class RootComponent : public RenderComponent { + DECLARE_ACE_TYPE(RootComponent, RenderComponent); + +public: + explicit RootComponent(const RefPtr& child); + ~RootComponent() override = default; + + static RefPtr Create(const RefPtr& child); + + RefPtr CreateRenderNode() override; + RefPtr CreateElement() override; + RefPtr SetupElementTree(const RefPtr& context); + const RefPtr& GetChild() const + { + return child_; + } + +private: + RefPtr child_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_ROOT_ROOT_COMPONENT_H diff --git a/frameworks/core/components/root/root_element.cpp b/frameworks/core/components/root/root_element.cpp new file mode 100644 index 00000000..b7984451 --- /dev/null +++ b/frameworks/core/components/root/root_element.cpp @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/root/root_element.h" + +#include "base/log/log.h" +#include "base/utils/utils.h" +#include "core/components/dialog_modal/dialog_modal_element.h" +#include "core/components/root/render_root.h" +#include "core/components/root/root_component.h" +#include "core/components/semi_modal/semi_modal_element.h" + +namespace OHOS::Ace { + +void RootElement::PerformBuild() +{ + LOGD("RootElement::PerformBuild"); + const RefPtr root = AceType::DynamicCast(component_); + if (root) { + auto first = children_.begin(); + const auto& stageElement = (first == children_.end()) ? nullptr : *first; + UpdateChild(stageElement, root->GetChild()); + } +} + +RefPtr RootElement::GetOverlayElement(WindowModal windowModal) const +{ + if (windowModal == WindowModal::SEMI_MODAL || windowModal == WindowModal::SEMI_MODAL_FULL_SCREEN) { + auto semiModal = AceType::DynamicCast(GetFirstChild()); + if (!semiModal) { + LOGE("Get overlay element failed. SemiModal element is null!"); + return RefPtr(); + } + return semiModal->GetOverlayElement(); + } else if (windowModal == WindowModal::DIALOG_MODAL) { + auto dialogModal = AceType::DynamicCast(GetFirstChild()); + if (!dialogModal) { + LOGE("Get overlay element failed. DialogModal element is null!"); + return RefPtr(); + } + return dialogModal->GetOverlayElement(); + } else { + return GetFirstChild(); + } +} + +void RootElement::HandleSpecifiedKey(const KeyEvent& keyEvent) +{ + const auto& context = context_.Upgrade(); + if (!context) { + LOGE("Handle specified key failed. context is null!"); + return; + } + WindowModal windowModal = context->GetWindowModal(); + if ((windowModal == WindowModal::DIALOG_MODAL) || (windowModal == WindowModal::SEMI_MODAL)) { + bool isFullWindow = false; + if (windowModal == WindowModal::SEMI_MODAL) { + auto semiModal = AceType::DynamicCast(GetFirstChild()); + if (!semiModal) { + LOGE("Handle specified key failed. SemiModal element is null!"); + return; + } + isFullWindow = semiModal->IsFullWindow(); + } + if (keyEvent.code == KeyCode::KEYBOARD_HOME && keyEvent.action == KeyAction::UP && !isFullWindow) { + const auto& render = AceType::DynamicCast(renderNode_); + if (render) { + render->SetBgColor(Color::TRANSPARENT); + } + } + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/root/root_element.h b/frameworks/core/components/root/root_element.h new file mode 100644 index 00000000..be6256b1 --- /dev/null +++ b/frameworks/core/components/root/root_element.h @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_ROOT_ROOT_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_ROOT_ROOT_ELEMENT_H + +#include "core/focus/focus_node.h" +#include "core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +class RootElement : public RenderElement, public FocusGroup { + DECLARE_ACE_TYPE(RootElement, RenderElement, FocusGroup); + +public: + void PerformBuild() override; + + bool RequestNextFocus(bool vertical, bool reverse, const Rect& rect) override + { + return false; + } + + RefPtr GetOverlayElement(WindowModal windowModal) const; + + void HandleSpecifiedKey(const KeyEvent& keyEvent); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_ROOT_ROOT_ELEMENT_H diff --git a/frameworks/core/components/scroll/BUILD.gn b/frameworks/core/components/scroll/BUILD.gn new file mode 100644 index 00000000..37aafd77 --- /dev/null +++ b/frameworks/core/components/scroll/BUILD.gn @@ -0,0 +1,32 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("scroll") { + sources = [ + "flutter_render_multi_child_scroll.cpp", + "flutter_render_single_child_scroll.cpp", + "render_multi_child_scroll.cpp", + "render_scroll.cpp", + "render_single_child_scroll.cpp", + "scroll_bar_controller.cpp", + "scroll_component.cpp", + "scroll_element.cpp", + "scroll_fade_controller.cpp", + "scroll_fade_effect.cpp", + "scroll_position_controller.cpp", + "scroll_spring_effect.cpp", + "scrollable.cpp", + ] +} diff --git a/frameworks/core/components/scroll/flutter_render_multi_child_scroll.cpp b/frameworks/core/components/scroll/flutter_render_multi_child_scroll.cpp new file mode 100644 index 00000000..71e16286 --- /dev/null +++ b/frameworks/core/components/scroll/flutter_render_multi_child_scroll.cpp @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/scroll/flutter_render_multi_child_scroll.h" + +#include "flutter/lib/ui/painting/canvas.h" + +#include "core/components/common/painter/flutter_scroll_bar_painter.h" +#include "core/pipeline/base/flutter_render_context.h" + +namespace OHOS::Ace { + +RefPtr RenderMultiChildScroll::Create() +{ + return AceType::MakeRefPtr(); +} + +void FlutterRenderMultiChildScroll::Paint(RenderContext& context, const Offset& offset) +{ + // child position changed when layout, need layout again + if (!NearEqual(GetMainOffset(currentOffset_), offsetBeforeLayout_)) { + MarkNeedLayout(); + return; + } + RenderNode::Paint(context, offset); + + // paint custom effect + const auto renderContext = static_cast(&context); + flutter::Canvas* canvas = renderContext->GetCanvas(); + if (canvas != nullptr) { + // paint custom effect + if (scrollEffect_) { + scrollEffect_->Paint(context, viewPort_, offset); + } + + // paint scrollBar + if (scrollBar_ && scrollBar_->NeedPaint()) { + bool needPaint = false; + if (scrollBar_->GetFirstLoad() || scrollBar_->IsActive() || + scrollBar_->GetDisplayMode() == DisplayMode::ON) { + scrollBarOpacity_ = UINT8_MAX; + needPaint = true; + } else { + if (scrollBarOpacity_ != 0) { + needPaint = true; + } + } + if (needPaint) { + scrollBar_->UpdateScrollBarRegion(offset, GetLayoutSize(), lastOffset_, GetEstimatedHeight()); + RefPtr scrollBarPainter = AceType::MakeRefPtr(); + scrollBarPainter->PaintBar( + canvas, offset, GetPaintRect(), scrollBar_, GetGlobalOffset(), scrollBarOpacity_); + if (scrollBar_->GetFirstLoad()) { + scrollBar_->SetFirstLoad(false); + scrollBar_->HandleScrollBarEnd(); + } + } + } + } +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/scroll/flutter_render_multi_child_scroll.h b/frameworks/core/components/scroll/flutter_render_multi_child_scroll.h new file mode 100644 index 00000000..cd8b3fb8 --- /dev/null +++ b/frameworks/core/components/scroll/flutter_render_multi_child_scroll.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SCROLL_FLUTTER_RENDER_MULTI_CHILD_SCROLL_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SCROLL_FLUTTER_RENDER_MULTI_CHILD_SCROLL_H + +#include "core/components/scroll/render_multi_child_scroll.h" + +namespace OHOS::Ace { + +class FlutterRenderMultiChildScroll : public RenderMultiChildScroll { + DECLARE_ACE_TYPE(FlutterRenderMultiChildScroll, RenderMultiChildScroll); + +public: + void Paint(RenderContext& context, const Offset& offset) override; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SCROLL_FLUTTER_RENDER_MULTI_CHILD_SCROLL_H diff --git a/frameworks/core/components/scroll/flutter_render_single_child_scroll.cpp b/frameworks/core/components/scroll/flutter_render_single_child_scroll.cpp new file mode 100644 index 00000000..fa312988 --- /dev/null +++ b/frameworks/core/components/scroll/flutter_render_single_child_scroll.cpp @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/scroll/flutter_render_single_child_scroll.h" + +#include "flutter/lib/ui/painting/canvas.h" + +#include "core/components/common/painter/flutter_scroll_bar_painter.h" +#include "core/pipeline/base/flutter_render_context.h" + +namespace OHOS::Ace { + +RefPtr RenderSingleChildScroll::Create() +{ + return AceType::MakeRefPtr(); +} + +RenderLayer FlutterRenderSingleChildScroll::GetRenderLayer() +{ + if (!layer_) { + layer_ = AceType::MakeRefPtr(0.0, GetLayoutParam().GetMaxSize().Width(), 0.0, + GetLayoutParam().GetMaxSize().Height(), Flutter::Clip::HARD_EDGE); + } + return AceType::RawPtr(layer_); +} + +void FlutterRenderSingleChildScroll::Paint(RenderContext& context, const Offset& offset) +{ + layer_->SetClip(0.0, viewPort_.Width(), 0.0, viewPort_.Height(), Flutter::Clip::HARD_EDGE); + RenderNode::Paint(context, offset); + + const auto renderContext = static_cast(&context); + flutter::Canvas* canvas = renderContext->GetCanvas(); + if (canvas == nullptr) { + LOGE("canvas is null"); + return; + } + + // paint custom effect + if (scrollEffect_) { + scrollEffect_->Paint(context, viewPort_, offset); + } + + // paint scrollBar + if (scrollBar_ && scrollBar_->NeedPaint()) { + bool needPaint = false; + if (scrollBar_->GetFirstLoad() || scrollBar_->IsActive() || scrollBar_->GetDisplayMode() == DisplayMode::ON) { + scrollBarOpacity_ = UINT8_MAX; + needPaint = true; + } else { + if (scrollBarOpacity_ != 0) { + needPaint = true; + } + } + if (needPaint) { + scrollBar_->UpdateScrollBarRegion(offset, GetLayoutSize(), lastOffset_, GetEstimatedHeight()); + RefPtr scrollBarPainter = AceType::MakeRefPtr(); + scrollBarPainter->PaintBar( + canvas, offset, GetPaintRect(), scrollBar_, GetGlobalOffset(), scrollBarOpacity_); + if (scrollBar_->GetFirstLoad()) { + scrollBar_->SetFirstLoad(false); + scrollBar_->HandleScrollBarEnd(); + } + } + } +} + +} \ No newline at end of file diff --git a/frameworks/core/components/scroll/flutter_render_single_child_scroll.h b/frameworks/core/components/scroll/flutter_render_single_child_scroll.h new file mode 100644 index 00000000..28bf572e --- /dev/null +++ b/frameworks/core/components/scroll/flutter_render_single_child_scroll.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SCROLL_FLUTTER_RENDER_SINGLE_CHILD_SCROLL_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SCROLL_FLUTTER_RENDER_SINGLE_CHILD_SCROLL_H + +#include "core/components/scroll/render_single_child_scroll.h" +#include "core/pipeline/layers/clip_layer.h" + +namespace OHOS::Ace { + +class FlutterRenderSingleChildScroll : public RenderSingleChildScroll { + DECLARE_ACE_TYPE(FlutterRenderSingleChildScroll, RenderSingleChildScroll); + +public: + RenderLayer GetRenderLayer() override; + + void Paint(RenderContext& context, const Offset& offset) override; + + bool IsRepaintBoundary() const override + { + return true; + } + +private: + RefPtr layer_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SCROLL_FLUTTER_RENDER_SINGLE_CHILD_SCROLL_H diff --git a/frameworks/core/components/scroll/render_multi_child_scroll.cpp b/frameworks/core/components/scroll/render_multi_child_scroll.cpp new file mode 100644 index 00000000..c6c60c16 --- /dev/null +++ b/frameworks/core/components/scroll/render_multi_child_scroll.cpp @@ -0,0 +1,888 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/scroll/render_multi_child_scroll.h" + +#include "core/animation/curve.h" +#include "core/animation/curve_animation.h" +#include "core/components/box/render_box.h" +#include "core/event/ace_event_helper.h" + +namespace OHOS::Ace { +namespace { + +constexpr double NONE_SCROLL_POSITION = -1.0; +constexpr double MIN_EXTENT = 5.0; +constexpr int32_t ANIMATION_DURATION = 200; +constexpr double LIST_INCONTINUOUS_ROTATION_SENSITYVITY_NORMAL = 0.6; +constexpr double LIST_CONTINUOUS_ROTATION_SENSITYVITY_NORMAL = 1.0; +constexpr double LIST_ITEMCENTER_ROTATION_THRESHOLD = 0.7; + +} // namespace + +void RenderMultiChildScroll::AddChild(const RefPtr& child) +{ + RenderNode::AddChild(child); +} + +LayoutParam RenderMultiChildScroll::MakeInnerLayoutParam() const +{ + LayoutParam layout; + if (axis_ == Axis::VERTICAL) { + layout.SetMinSize(Size(viewPort_.Width(), layout.GetMinSize().Height())); + layout.SetMaxSize(Size(viewPort_.Width(), layout.GetMaxSize().Height())); + } else { + layout.SetMinSize(Size(layout.GetMinSize().Width(), viewPort_.Height())); + layout.SetMaxSize(Size(layout.GetMaxSize().Width(), viewPort_.Height())); + } + return layout; +} + +void RenderMultiChildScroll::ProcessScrollExtent() +{ + // When the scrollBar is off, return + if (!scrollBar_ || !scrollBar_->NeedScrollBar()) { + return; + } + + if (NearEqual(scrollBarExtent_, 0.0)) { + scrollBarExtent_ = mainScrollExtent_; + return; + } + + if (mainScrollExtent_ - scrollBarExtent_ > MIN_EXTENT && !scrollBarExtentFlag_) { + LOGD("ScrollBar is animating."); + scrollBarExtentFlag_ = true; + auto animation = + AceType::MakeRefPtr>(scrollBarExtent_, mainScrollExtent_, Curves::SHARP); + animation->AddListener([weakScroll = AceType::WeakClaim(this)](double value) { + auto scroll = weakScroll.Upgrade(); + if (scroll) { + scroll->SetMainScrollExtentForBar(value); + scroll->MarkNeedLayout(true); + } + }); + if (animateController_) { + animateController_->ClearInterpolators(); + animateController_->SetDuration(ANIMATION_DURATION); + + // add the new animation + animateController_->AddInterpolator(animation); + animateController_->Play(); + } + } else if (!scrollBarExtentFlag_) { + scrollBarExtent_ = mainScrollExtent_; + } +} + +bool RenderMultiChildScroll::CalculateMainScrollExtent() +{ + Size itemSize; // Calculate all children layout size. + for (const auto& child : GetChildren()) { + itemSize += child->GetLayoutSize(); + } + + bool isScrollable = false; + if (axis_ == Axis::VERTICAL) { + double paddingVertical = NormalizeToPx(padding_.Top()) + NormalizeToPx(padding_.Bottom()); + mainScrollExtent_ = itemSize.Height() + paddingVertical + outBoundaryExtent_; + ProcessScrollExtent(); + if (mainScrollExtent_ > viewPort_.Height()) { + isScrollable = true; + } + } else { + double paddingHorizontal = NormalizeToPx(padding_.Left()) + NormalizeToPx(padding_.Right()); + mainScrollExtent_ = itemSize.Width() + paddingHorizontal + outBoundaryExtent_; + scrollBarExtent_ = mainScrollExtent_; + if (mainScrollExtent_ > viewPort_.Width()) { + isScrollable = true; + } + } + + // If not scrollable, reset scrollable_ to null. + if (!isScrollable) { + if (scrollable_) { + scrollable_->MarkAvailable(false); + if (scrollable_->Idle() && GetMainOffset(currentOffset_) > 0.0) { + scrollEffect_->ProcessScrollOver(0.0); + } + } + if (scrollBar_) { + scrollBar_->SetScrollable(false); + } + if (positionController_) { + positionController_->SetNonScrollable(); + } + } else { + if (scrollable_ && scrollable_->Available()) { + if (scrollable_->Idle() && GetMainOffset(currentOffset_) > mainScrollExtent_ - GetMainSize(viewPort_)) { + // scroll to bottom + scrollEffect_->ProcessScrollOver(0.0); + } + } else { + if (scrollable_) { + scrollable_->MarkAvailable(true); + } + } + if (scrollBar_) { + scrollBar_->SetScrollable(true); + } + } + + return isScrollable; +} + +void RenderMultiChildScroll::JumpToIndex(int32_t index, int32_t source) +{ + if (GetChildren().empty()) { + LOGE("no list in scroll"); + return; + } + auto listBase = AceType::DynamicCast(GetChildren().front()); + if (!listBase) { + LOGE("no list to jump"); + return; + } + + double position = listBase->CalculateItemPosition(index, ScrollType::SCROLL_INDEX); + if (position < 0.0) { + LOGE("no this index: %{public}d", index); + return; + } + LOGI("jump to index:%{public}d position:%{public}lf", index, position); + if (CalculateMainScrollExtent()) { + RenderScroll::JumpToPosition(position, source); + } else { + LOGW("Current is not allow to jump index."); + } +} + +void RenderMultiChildScroll::JumpToPosition(double position, int32_t source) +{ + if (GetChildren().empty()) { + LOGE("no list in scroll"); + return; + } + auto listBase = AceType::DynamicCast(GetChildren().front()); + if (!listBase) { + LOGE("no list to jump"); + return; + } + listBase->CalculateItemPosition(position); + LOGI("jump to position:%{public}lf", position); + if (CalculateMainScrollExtent()) { + RenderScroll::JumpToPosition(position, source); + } else { + LOGW("Current is not allow to jump position."); + } +} + +void RenderMultiChildScroll::UpdateEdgeEffect(const RefPtr& listComponent) +{ + auto newEffect = listComponent->GetScrollEffect(); + if (scrollEffect_ != newEffect) { + scrollEffect_ = newEffect; + if (scrollEffect_) { + ResetEdgeEffect(); + } + } +} + +void RenderMultiChildScroll::UpdateGradient(const RefPtr& listComponent) +{ + gradientWidth_ = listComponent->GetGradientWidth(); + backgroundColor_ = listComponent->GetBackgroundColor(); +} + +void RenderMultiChildScroll::Update(const RefPtr& component) +{ + auto listComponent = AceType::DynamicCast(component); + if (!listComponent) { + LOGE("component is not a ListComponent"); + return; + } + + if (listComponent->IsInRefresh()) { + auto parent = GetParent().Upgrade(); + while (parent) { + auto refresh = AceType::DynamicCast(parent); + if (refresh) { + refreshParent_ = AceType::WeakClaim(AceType::RawPtr(refresh)); + break; + } + parent = parent->GetParent().Upgrade(); + } + } + + auto axis = listComponent->GetDirection() == FlexDirection::COLUMN ? Axis::VERTICAL : Axis::HORIZONTAL; + if (axis_ != axis) { + axis_ = axis; + ResetScrollable(); + } + + if (scrollable_) { + scrollable_->SetOverSpringProperty(listComponent->OverSpringProperty()); + scrollable_->MarkNeedCenterFix(listComponent->GetSupportItemCenter()); + } + + // sync scrollpage from List child + SetScrollPage(listComponent->GetScrollPage()); + + // Update its child. + auto children = GetChildren(); + if (!children.empty()) { + auto listNode = children.front(); + if (listNode) { + listNode->Update(component); + listNode->Attach(GetContext()); + } + } + + UpdateGradient(listComponent); + UpdateEdgeEffect(listComponent); + + auto newController = listComponent->GetPositionController(); + if (positionController_ != newController) { + positionController_ = newController; + if (positionController_) { + positionController_->SetScrollEvent(ScrollEvent::SCROLL_TOP, + AceAsyncEvent&)>::Create(listComponent->GetOnScrollTop(), + GetContext())); + positionController_->SetScrollEvent(ScrollEvent::SCROLL_BOTTOM, + AceAsyncEvent&)>::Create(listComponent->GetOnScrollBottom(), + GetContext())); + positionController_->SetScrollEvent(ScrollEvent::SCROLL_TOUCHUP, + AceAsyncEvent&)>::Create(listComponent->GetOnScrollTouchUp(), + GetContext())); + positionController_->SetScrollEvent(ScrollEvent::SCROLL_END, + AceAsyncEvent&)>::Create(listComponent->GetOnScrollEnd(), + GetContext())); + positionController_->SetScrollEvent(ScrollEvent::SCROLL_POSITION, + AceAsyncEvent&)>::Create(listComponent->GetOnScroll(), + GetContext())); + positionController_->SetScrollNode(AceType::WeakClaim(this)); + LOGD("initial position: %{public}lf, %{public}lf", currentOffset_.GetX(), currentOffset_.GetY()); + } + } + if (positionController_) { + initialIndex_ = positionController_->GetInitialIndex(); + initialOffset_ = positionController_->GetInitialOffset(); + } + + if (!animateController_) { + animateController_ = AceType::MakeRefPtr(GetContext()); + animateController_->AddStopListener([weakScroll = AceType::WeakClaim(this)]() { + auto scroll = weakScroll.Upgrade(); + if (scroll) { + scroll->scrollBarExtentFlag_ = false; + } + }); + } + + auto scrollBar = listComponent->GetScrollBar(); + InitScrollBar(scrollBar); + rightToLeft_ = listComponent->GetRightToLeft(); + + // This should be put after setting positionController_. + RenderScroll::Update(component); +} + +bool RenderMultiChildScroll::ReachMaxCount() const +{ + bool reached = true; + for (const auto& child : GetChildren()) { + auto listBase = AceType::DynamicCast(child); + if (!listBase) { + continue; + } + int32_t currentIndex = listBase->GetCurrentMaxIndex(); + int32_t maxCount = listBase->GetMaxCount(); + if (maxCount <= 0 || currentIndex != (maxCount - 1)) { + reached = false; + break; + } + } + return reached; +} + +void RenderMultiChildScroll::OnPredictLayout() +{ + int32_t childrenSize = GetChildren().size(); + if (currentIndex_ < 0 || currentIndex_ >= childrenSize || childrenSize == 0) { + LOGE("invalid current index: %{public}d, size is: %{public}d", currentIndex_, childrenSize); + return; + } + // only in list widget enabled build next + auto child = GetChildren().front(); + auto listBase = AceType::DynamicCast(child); + if (listBase) { + Offset lastOffset = Offset::Zero() - currentOffset_ - correctedDelta_; + Offset curOffset = lastOffset; + double mainOffset = GetMainOffset(curOffset); + double mainExtent = GetMainSize(viewPort_); + double layoutHead = 0.0; + double layoutTail = mainExtent; + if (IsRowReverse()) { + layoutHead = layoutHead - cacheExtent_ + mainOffset; + layoutTail = layoutTail + cacheExtent_ + mainOffset; + } else { + layoutHead = layoutHead - cacheExtent_ - mainOffset; + layoutTail = layoutTail + cacheExtent_ - mainOffset; + } + listBase->BuildNextItem(layoutHead, layoutTail, curOffset, viewPort_); + } +} + +void RenderMultiChildScroll::LayoutChild( + const RefPtr& child, const Offset& position, double start, double end) +{ + auto listBase = AceType::DynamicCast(child); + if (listBase) { + listBase->ResetLayoutRange(start, end, position, viewPort_); + listBase->SetLayoutParam(GetLayoutParam()); + listBase->SetNeedLayout(true); + listBase->OnLayout(); + } +} + +bool RenderMultiChildScroll::LayoutChild( + const RefPtr& curChild, int32_t curIndex, const RefPtr& lastChild) +{ + Offset lastOffset = Offset::Zero() - currentOffset_; + Size lastSize; + if (lastChild) { + lastOffset = lastChild->GetPosition(); + lastSize = lastChild->GetLayoutSize(); + } + + Offset curOffset = lastOffset + lastSize; + double mainOffset = GetMainOffset(curOffset); + double mainExtent = GetMainSize(viewPort_); + + // The following children are not visible. + if (lastChild && mainOffset >= mainExtent + cacheExtent_) { + return false; + } + + // The last child become invisible, change the current index. + if (mainOffset <= -cacheExtent_) { + currentIndex_ = curIndex; + } + + double layoutHead = 0.0; + double layoutTail = mainExtent; + if (IsRowReverse()) { + layoutHead = layoutHead - cacheExtent_ + mainOffset; + layoutTail = layoutTail + cacheExtent_ + mainOffset; + } else { + layoutHead = layoutHead - cacheExtent_ - mainOffset; + layoutTail = layoutTail + cacheExtent_ - mainOffset; + } + LayoutChild(curChild, curOffset, layoutHead, layoutTail); + + return true; +} + +void RenderMultiChildScroll::LayoutChild() +{ + int32_t childrenSize = GetChildren().size(); + if (currentIndex_ < 0 || currentIndex_ >= childrenSize) { + LOGE("invalid current index: %{public}d", currentIndex_); + return; + } + + // currentIndex_ is 0 at the beginning. + int32_t currentIndex = 0; + RefPtr lastChild; + for (const auto& child : GetChildren()) { + if (currentIndex >= currentIndex_) { + if (!LayoutChild(child, currentIndex, lastChild)) { + LOGE("layout child failed, index:%{public}d", currentIndex); + break; + } + lastChild = child; + } + currentIndex++; + } +} + +void RenderMultiChildScroll::PerformLayout() +{ + viewPort_ = GetLayoutParam().GetMaxSize(); + SetLayoutSize(viewPort_); + if (NearEqual(viewPort_.Width(), Size::INFINITE_SIZE) || NearEqual(viewPort_.Height(), Size::INFINITE_SIZE)) { + LOGW("The main or cross size is INFINITE, wait for the determined value"); + return; + } + LOGD("ViewPort:%{public}s Offset:%{public}s", viewPort_.ToString().c_str(), currentOffset_.ToString().c_str()); + offsetBeforeLayout_ = GetMainOffset(currentOffset_); + LayoutChild(); + CalculateMainScrollExtent(); + ApplyGradientColor(); + + if (IsReadyToJump()) { + if (!NearEqual(initialOffset_, effectOffset_)) { + JumpToPosition(initialOffset_); + effectOffset_ = initialOffset_; + LOGI("Effect initialOffset_:%{public}lf %{public}s", effectOffset_, currentOffset_.ToString().c_str()); + } + if (NearZero(initialOffset_) && initialIndex_ > 0 && initialIndex_ != effectIndex_) { + JumpToIndex(initialIndex_); + effectIndex_ = initialIndex_; + LOGI("Effect initialIndex_:%{public}d %{public}s", effectIndex_, currentOffset_.ToString().c_str()); + } + } + + if (scrollable_->Available()) { + ValidateOffset(SCROLL_FROM_NONE); + } else { + currentOffset_ = Offset::Zero(); + } +} + +bool RenderMultiChildScroll::IsReadyToJump() const +{ + bool ready = false; + for (const auto& child : GetChildren()) { + auto listBase = AceType::DynamicCast(child); + if (!listBase) { + continue; + } + int32_t maxCount = listBase->GetMaxCount(); + if (listBase->IsPageReady() || (initialIndex_ != 0 && initialIndex_ < maxCount) || + (!NearZero(initialOffset_) && LessNotEqual(initialOffset_, mainScrollExtent_))) { + ready = true; + break; + } + } + return ready; +} + +void RenderMultiChildScroll::ApplyGradientColor() +{ + if (scrollable_ && !scrollable_->Available()) { + LOGD("list not scrollable"); + return; + } + + if (!gradientWidth_.IsValid()) { + LOGD("not config gradient width"); + return; + } + + auto box = AceType::DynamicCast(GetParent().Upgrade()); + if (!box) { + LOGE("parent is not box"); + return; + } + + // workaround: set needLayout_ to true to make sure box will not mark flex to be layout + // and add box to dirty layout set manually at the end. + box->SetNeedLayout(true); + + Dimension widthPx = Dimension(viewPort_.Width()); + Dimension heightPx = Dimension(viewPort_.Height()); + Dimension gradientWidthPx = Dimension(NormalizeToPx(gradientWidth_)); + + Dimension mainPx; + Gradient gradient = Gradient(); + if (axis_ == Axis::HORIZONTAL) { + mainPx = widthPx; + gradient.SetDirection(GradientDirection::RIGHT); + } else { + mainPx = heightPx; + gradient.SetDirection(GradientDirection::BOTTOM); + } + + if (!IsAtTop()) { + LOGD("apply top"); + GradientColor start; + start.SetColor(backgroundColor_); + start.SetDimension(Dimension(0.0)); + + GradientColor end; + Color endColor = backgroundColor_; + endColor = endColor.ChangeAlpha(0); + end.SetColor(endColor); + end.SetDimension(gradientWidthPx); + + gradient.AddColor(start); + gradient.AddColor(end); + } + + if (!IsAtBottom()) { + LOGD("apply bottom"); + GradientColor start; + Color startColor = backgroundColor_; + startColor = startColor.ChangeAlpha(0); + start.SetColor(startColor); + start.SetDimension(mainPx - gradientWidthPx); + + GradientColor end; + end.SetColor(backgroundColor_); + end.SetDimension(mainPx); + + gradient.AddColor(start); + gradient.AddColor(end); + } + + auto frontDecoration = box->GetFrontDecoration(); + if (!frontDecoration) { + frontDecoration = AceType::MakeRefPtr(); + } + frontDecoration->SetGradient(gradient); + box->SetFrontDecoration(frontDecoration); + + auto pipelineContext = context_.Upgrade(); + if (pipelineContext) { + pipelineContext->AddDirtyLayoutNode(box); + } +} + +void RenderMultiChildScroll::MoveItemToViewPort(double position, double size, double effectOffset) +{ + if (SystemProperties::GetDeviceType() != DeviceType::TV && SystemProperties::GetDeviceType() != DeviceType::PHONE) { + return; + } + double beginPosition = CalculateBeginPositionInViewPort(position, size, effectOffset); + if (beginPosition >= 0.0 && mainScrollExtent_ >= GetMainSize(viewPort_)) { + beginPosition = std::clamp(beginPosition, 0.0, mainScrollExtent_ - GetMainSize(viewPort_)); + } + ScrollToPosition(beginPosition, SCROLL_FROM_FOCUS_JUMP, false); +} + +double RenderMultiChildScroll::CalculateBeginPositionInViewPort(double position, double size, double effectOffset) +{ + double gradientWidth = NormalizeToPx(gradientWidth_); + double viewPortSize = GetMainSize(viewPort_); + double offset = GetMainOffset(currentOffset_); + double viewMin = offset; + double viewMax = offset + viewPortSize - size; + + if (!IsAtTop()) { + viewMin = offset + gradientWidth; + } + if (!IsAtBottom()) { + viewMax = offset + viewPortSize - size - gradientWidth; + } + + if (GreatOrEqual(viewMin, viewMax)) { + return NONE_SCROLL_POSITION; + } + + if (position < viewMin) { + return std::max(position - gradientWidth - effectOffset, 0.0); + } + if (position > viewMax) { + return std::max(position - viewMax + offset + effectOffset, 0.0); + } + return NONE_SCROLL_POSITION; +} + +void RenderMultiChildScroll::ScrollToEdge(ScrollEdgeType scrollEdgeType, bool smooth) +{ + if (GetChildren().empty()) { + LOGE("no list in scroll"); + return; + } + auto renderList = AceType::DynamicCast(GetChildren().front()); + if (!renderList) { + LOGE("no list to jump"); + return; + } + + double position = 0.0; + if (scrollEdgeType == ScrollEdgeType::SCROLL_TOP) { + position = renderList->CalculateItemPosition(0, ScrollType::SCROLL_TOP); + } else { + position = renderList->CalculateItemPosition(0, ScrollType::SCROLL_BOTTOM); + } + if (position < 0.0) { + LOGE("Get edge position failed."); + return; + } + CalculateMainScrollExtent(); + LOGI("Scroll to position:%{public}lf %{public}d", position, smooth); + ScrollToPosition(position, SCROLL_FROM_FOCUS_JUMP, smooth); +} + +bool RenderMultiChildScroll::ScrollToPosition(double position, int32_t source, bool smooth) +{ + if (NearEqual(position, NONE_SCROLL_POSITION)) { + return false; + } + + double distance = position - GetMainOffset(currentOffset_); + if (NearZero(distance)) { + return false; + } + position = std::max(position, 0.0); + if (smooth) { + ScrollBy(distance, distance, smooth); + } else { + JumpToPosition(std::max(position, 0.0), source); + } + return true; +} + +bool RenderMultiChildScroll::ScrollPage(bool reverse, bool smooth) +{ + if (GetChildren().empty()) { + LOGE("no list in scroll"); + return false; + } + auto renderList = AceType::DynamicCast(GetChildren().front()); + if (!renderList) { + LOGE("no list to jump"); + return false; + } + double position = 0.0; + if (reverse) { + position = renderList->CalculateItemPosition(0, ScrollType::SCROLL_PAGE_UP); + } else { + position = renderList->CalculateItemPosition(0, ScrollType::SCROLL_PAGE_DOWN); + } + if (position < 0.0) { + LOGE("Get page:%{public}d position failed.", reverse); + return false; + } + CalculateMainScrollExtent(); + LOGI("Scroll to position:%{public}lf %{public}d", position, smooth); + return ScrollToPosition(position, SCROLL_FROM_FOCUS_JUMP, smooth); +} + +bool RenderMultiChildScroll::OnRotation(const RotationEvent& event) +{ + if (positionController_ && !positionController_->IsScrollNeedRotation()) { + LOGE("OnRotation, current indexer is expand"); + return false; + } + float rotateValue = event.value; // value of rotation, means pixels(vp) + HandleRotate(rotateValue, axis_ == Axis::VERTICAL); + return true; +} + +void RenderMultiChildScroll::HandleRotate(double rotateValue, bool isVertical) +{ + auto context = GetContext().Upgrade(); + if (!context) { + LOGE("context is null"); + return; + } + auto listBase = AceType::DynamicCast(GetFirstChild()); + if (!listBase) { + LOGE("no rotatable list"); + return; + } + + double value = context->NormalizeToPx(Dimension(rotateValue, DimensionUnit::VP)) * (-1.0); + if (listBase->IsSupportScale()) { + value *= LIST_INCONTINUOUS_ROTATION_SENSITYVITY_NORMAL; + } else { + value *= LIST_CONTINUOUS_ROTATION_SENSITYVITY_NORMAL; + } + if (listBase->GetSupportItemCenter()) { + auto childItem = listBase->GetChildByIndex(listBase->GetCenterIndex()); + auto centerItem = RenderListItem::GetRenderListItem(childItem); + if (centerItem) { + accumulatedRotationValue_ += value; + Size itemSize = centerItem->GetLayoutSize(); + double threshold = 0.0; + if (isVertical) { + threshold = itemSize.Height() * LIST_ITEMCENTER_ROTATION_THRESHOLD; + } else { + threshold = itemSize.Width() * LIST_ITEMCENTER_ROTATION_THRESHOLD; + } + if (InRegion(-threshold, threshold, accumulatedRotationValue_)) { + return; + } + value = accumulatedRotationValue_; + accumulatedRotationValue_ = 0.0; + } + + double destPosition = -GetMainOffset(currentOffset_) - value; + double fixPosition = GetFixPositionOnWatch(destPosition, -GetMainOffset(currentOffset_)); + value -= fixPosition - destPosition; + AnimateTo(GetCurrentPosition() + value, ANIMATION_DURATION, Curves::FRICTION); + } else { + // Vertical or horizontal, different axis + Offset delta; + if (isVertical) { + delta.SetX(0.0); + delta.SetY(value); + } else { + delta.SetX(value); + delta.SetY(0.0); + } + UpdateOffset(delta, SCROLL_FROM_ROTATE); + } +} + +// notify start position in global main axis +void RenderMultiChildScroll::NotifyDragStart(double startPosition) +{ + for (const auto& child : GetChildren()) { + auto listBase = AceType::DynamicCast(child); + if (!listBase) { + continue; + } + listBase->NotifyDragStart(startPosition); + } +} + +// notify drag offset in global main axis +void RenderMultiChildScroll::NotifyDragUpdate(double dragOffset, int32_t source) +{ + for (const auto& child : GetChildren()) { + auto listBase = AceType::DynamicCast(child); + if (!listBase) { + continue; + } + listBase->NotifyDragUpdate(dragOffset); + // switch chain control node in flush chain animation + double delta = listBase->FlushChainAnimation(); + // fix currentOffset_ after switch control node. + if (axis_ == Axis::HORIZONTAL) { + currentOffset_ += Offset(-delta, 0.0); + } else { + currentOffset_ += Offset(0.0, -delta); + } + if (!NearZero(delta)) { + LOGD("Fix offset when drag update. currentOffset: %{public}s, delta: %{public}.1lf", + currentOffset_.ToString().c_str(), delta); + } + } +} + +void RenderMultiChildScroll::ProcessScrollOverCallback(double velocity) +{ + for (const auto& child : GetChildren()) { + auto listBase = AceType::DynamicCast(child); + if (!listBase) { + continue; + } + // switch chain control node when notify scroll over + listBase->NotifyScrollOver(velocity, IsOutOfTopBoundary(), IsOutOfBottomBoundary()); + double delta = listBase->FlushChainAnimation(); + // fix currentOffset_ after switch control node. + if (axis_ == Axis::HORIZONTAL) { + currentOffset_ += Offset(-delta, 0.0); + } else { + currentOffset_ += Offset(0.0, -delta); + } + if (!NearZero(delta)) { + LOGD("Fix offset when scroll over. currentOffset: %{public}s, delta: %{public}.1lf", + currentOffset_.ToString().c_str(), delta); + } + } +} + +double RenderMultiChildScroll::GetMainScrollExtent() const +{ + const double mainScrollExtent = RenderScroll::GetMainScrollExtent(); + auto child = GetFirstChild(); + auto listBase = AceType::DynamicCast(child); + if (listBase) { + return mainScrollExtent + listBase->GetTailAnimationValue() + listBase->GetHeadAnimationValue(); + } else { + return mainScrollExtent; + } +} + +double RenderMultiChildScroll::GetFixPositionOnWatch(double destination, double current) +{ + LOGD("current(%{public}lf), distance(%{public}lf), viewport(%{public}lf)", + GetMainOffset(currentOffset_), destination - current, GetMainSize(viewPort_)); + auto listBase = AceType::DynamicCast(GetLastChild()); + if (!listBase) { + return destination; + } + + // find centerIndex + int32_t centerIndex = -1; + double itemSize = 0.0; + double itemPosition = 0.0; + double listPosition = GetMainOffset(currentOffset_) - destination + current; + if (GreatNotEqual(destination, current)) { + // scroll to top direction + centerIndex = listBase->EstimateIndexByPosition(listPosition + GetMainSize(viewPort_) * HALF_ITEM_SIZE); + itemPosition = listBase->GetItemPosition(centerIndex); + itemSize = listBase->GetItemPosition(centerIndex + 1) - itemPosition; + } else { + // scroll to bottom direction + listBase->CalculateItemPosition(listPosition); + double centerPosition = listPosition + GetMainSize(viewPort_) * HALF_ITEM_SIZE; + for (const auto &itemPair : listBase->GetItems()) { + int32_t index = itemPair.first; + auto item = RenderListItem::GetRenderListItem(itemPair.second); + double start = listBase->GetItemPosition(index); + double end = start + listBase->GetMainSize(item->GetLayoutSize()); + + if (start < centerPosition && end > centerPosition) { + centerIndex = index; + itemSize = GetMainSize(item->GetLayoutSize()); + itemPosition = item->GetPositionInList(); + break; + } + } + } + if (centerIndex == -1) { + LOGW("invalid center index"); + return destination; + } + + // calculate destination position after fix + double center = listPosition + GetMainSize(viewPort_) * HALF_ITEM_SIZE; + double itemCenterPosition = itemPosition + itemSize * HALF_ITEM_SIZE; + return destination + center - itemCenterPosition; +} + +bool RenderMultiChildScroll::IsOutOfBottomBoundary() +{ + double headOffset = GetMainOffset(currentOffset_); + double tailOffset = mainScrollExtent_; + auto child = GetLastChild(); + auto listBase = AceType::DynamicCast(child); + if (listBase) { + tailOffset = mainScrollExtent_ + listBase->GetTailAnimationValue(); + LOGD("IsOutOfBottomBoundary. offset_: %{public}.3lf, tailOffset: %{public}.3lf, viewPort: %{public}.3lf, " + "mainScrollExtent_: %{public}.3lf, ReachMaxCount: %{public}d", + GetMainOffset(currentOffset_), tailOffset, GetMainSize(viewPort_), mainScrollExtent_, ReachMaxCount()); + } + if (IsRowReverse()) { + return headOffset <= (GetMainSize(viewPort_) - tailOffset) && ReachMaxCount(); + } else { + return headOffset >= (tailOffset - GetMainSize(viewPort_)) && ReachMaxCount(); + } +} + +bool RenderMultiChildScroll::IsOutOfTopBoundary() +{ + double headOffset = GetMainOffset(currentOffset_); + auto child = GetFirstChild(); + auto listBase = AceType::DynamicCast(child); + if (listBase) { + headOffset = GetMainOffset(currentOffset_) - listBase->GetHeadAnimationValue(); + LOGD("IsOutOfTopBoundary. offset_: %{public}.3lf, headOffset: %{public}.3lf", GetMainOffset(currentOffset_), + headOffset); + } + if (IsRowReverse()) { + return headOffset >= 0.0; + } else { + return headOffset <= 0.0; + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/scroll/render_multi_child_scroll.h b/frameworks/core/components/scroll/render_multi_child_scroll.h new file mode 100644 index 00000000..1cb9b82d --- /dev/null +++ b/frameworks/core/components/scroll/render_multi_child_scroll.h @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SCROLL_RENDER_MULTI_CHILD_SCROLL_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SCROLL_RENDER_MULTI_CHILD_SCROLL_H + +#include "core/components/common/rotation/rotation_node.h" +#include "core/components/list/list_component.h" +#include "core/components/list/render_list.h" +#include "core/components/scroll/render_scroll.h" + +namespace OHOS::Ace { + +class RenderMultiChildScroll : public RenderScroll, public RotationNode { + DECLARE_ACE_TYPE(RenderMultiChildScroll, RenderScroll, RotationNode); + +public: + static RefPtr Create(); + + void AddChild(const RefPtr& child); + + void JumpToIndex(int32_t index, int32_t source = SCROLL_FROM_JUMP) override; + + void JumpToPosition(double position, int32_t source = SCROLL_FROM_JUMP) override; + + // notify start position in global main axis + void NotifyDragStart(double startPosition) override; + + // notify drag offset in global main axis + void NotifyDragUpdate(double dragOffset, int32_t source) override; + + void ProcessScrollOverCallback(double velocity) override; + + void MoveItemToViewPort(double position, double size, double effectOffset = 0.0); + + void ScrollToEdge(ScrollEdgeType scrollEdgeType, bool smooth) override; + + bool ScrollPage(bool reverse, bool smooth) override; + + void HandleRotate(double rotateValue, bool isVertical) override; + + void SetCacheExtent(double cacheExtent) + { + cacheExtent_ = cacheExtent; + } + + void RefreshOffset(double offset) + { + (axis_ == Axis::HORIZONTAL) ? currentOffset_.SetX(offset) : currentOffset_.SetY(offset); + } + + bool CalculateMainScrollExtent(); + + bool OnRotation(const RotationEvent& event) override; + + void OnAttachContext() override + { + auto childList = GetChildren(); + for (const auto& child : childList) { + if (child) { + child->Attach(context_); + } + } + } + + bool IsOutOfBottomBoundary() override; + + bool IsOutOfTopBoundary() override; + + double GetMainScrollExtent() const override; + + double GetFixPositionOnWatch(double final, double current) override; + +protected: + void OnPredictLayout() override; + void PerformLayout() override; + void Update(const RefPtr& component) override; + bool ReachMaxCount() const override; + bool IsReadyToJump() const; + + Dimension gradientWidth_; + Color backgroundColor_; + double offsetBeforeLayout_ = 0.0; + +private: + LayoutParam MakeInnerLayoutParam() const; + void UpdateGradient(const RefPtr& listComponent); + void UpdateEdgeEffect(const RefPtr& listComponent); + void ApplyGradientColor(); + void LayoutChild(); + void LayoutChild(const RefPtr& child, const Offset& position, double start, double end); + bool LayoutChild(const RefPtr& curChild, int32_t curIndex, const RefPtr& lastChild); + double CalculateBeginPositionInViewPort(double position, double size, double effectOffset = 0.0); + bool ScrollToPosition(double position, int32_t source, bool smooth); + void ProcessScrollExtent(); + + double cacheExtent_ = 300.0; + int32_t currentIndex_ = 0; + int32_t initialIndex_ = 0; + int32_t effectIndex_ = 0; + double initialOffset_ = 0.0; + double effectOffset_ = 0.0; + double accumulatedRotationValue_ = 0.0; + + RefPtr animateController_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SCROLL_RENDER_MULTI_CHILD_SCROLL_H diff --git a/frameworks/core/components/scroll/render_scroll.cpp b/frameworks/core/components/scroll/render_scroll.cpp new file mode 100644 index 00000000..e67b1ae9 --- /dev/null +++ b/frameworks/core/components/scroll/render_scroll.cpp @@ -0,0 +1,894 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/scroll/render_scroll.h" + +#include "core/animation/curve_animation.h" + +namespace OHOS::Ace { +namespace { + +constexpr int32_t SCROLL_NONE = 0; +constexpr int32_t SCROLL_TOUCH_DOWN = 1; +constexpr int32_t SCROLL_TOUCH_UP = 2; +constexpr double SCROLL_RATIO = 0.52; +constexpr float SCROLL_BY_SPEED = 250.0f; // move 250 pixels per second +constexpr float SCROLL_MAX_TIME = 300.0f; // Scroll Animate max time 0.3 second +constexpr double UNIT_CONVERT = 1000.0; // 1s convert to 1000ms +constexpr double ROTATE_FACTOR = -1.0; // pixels factor per angle + +} // namespace + +RenderScroll::RenderScroll() : RenderNode(true) +{ + Initialize(); +} + +void RenderScroll::Initialize() +{ + touchRecognizer_ = AceType::MakeRefPtr(); + touchRecognizer_->SetOnTouchCancel([weakItem = AceType::WeakClaim(this)](const TouchEventInfo&) { + auto item = weakItem.Upgrade(); + if (!item) { + return; + } + auto scrollEffect = item->scrollEffect_; + if (scrollEffect) { + scrollEffect->ProcessScrollOver(0.0); + } + }); +} + +bool RenderScroll::ValidateOffset(int32_t source) +{ + if (mainScrollExtent_ <= GetMainSize(viewPort_)) { + return true; + } + + outBoundaryExtent_ = 0.0; + scrollBarOutBoundaryExtent_ = 0.0; + + // restrict position between top and bottom + if (!scrollEffect_ || scrollEffect_->IsRestrictBoundary() || source == SCROLL_FROM_JUMP || + source == SCROLL_FROM_BAR || source == SCROLL_FROM_ROTATE || refreshParent_.Upgrade()) { + if (axis_ == Axis::HORIZONTAL) { + if (rightToLeft_) { + currentOffset_.SetX(std::clamp(currentOffset_.GetX(), viewPort_.Width() - mainScrollExtent_, 0.0)); + } else { + currentOffset_.SetX(std::clamp(currentOffset_.GetX(), 0.0, mainScrollExtent_ - viewPort_.Width())); + } + } else { + currentOffset_.SetY(std::clamp(currentOffset_.GetY(), 0.0, mainScrollExtent_ - viewPort_.Height())); + } + } else { + if (IsRowReverse()) { + if (GetMainOffset(currentOffset_) > 0) { + outBoundaryExtent_ = GetMainOffset(currentOffset_); + } + } else { + if (GetMainOffset(currentOffset_) < 0) { + outBoundaryExtent_ = -GetMainOffset(currentOffset_); + scrollBarOutBoundaryExtent_ = -GetMainOffset(currentOffset_); + } else if (GetMainOffset(currentOffset_) >= (mainScrollExtent_ - GetMainSize(viewPort_)) && + ReachMaxCount()) { + scrollBarOutBoundaryExtent_ = + GetMainOffset(currentOffset_) - (mainScrollExtent_ - GetMainSize(viewPort_)); + } + HandleScrollBarOutBoundary(); + } + } + + axis_ == Axis::HORIZONTAL ? currentOffset_.SetY(0.0) : currentOffset_.SetX(0.0); + return true; +} + +void RenderScroll::HandleScrollBarOutBoundary() +{ + if (scrollBar_ && scrollBar_->NeedScrollBar()) { + scrollBar_->SetOutBoundary(std::abs(scrollBarOutBoundaryExtent_)); + } +} + +void RenderScroll::HandleScrollPosition(double scrollX, double scrollY, int32_t scrollState) const +{ + if (!positionController_) { + LOGW("positionController is null"); + return; + } + + if (GetMainOffset(currentOffset_) > 0.0 && + GetMainOffset(currentOffset_) < mainScrollExtent_ - GetMainSize(viewPort_)) { + positionController_->SetMiddle(); + } + + positionController_->HandleScrollEvent( + std::make_shared(ScrollEvent::SCROLL_POSITION, scrollX, scrollY, scrollState)); +} + +bool RenderScroll::HandleCrashBottom() +{ + if (positionController_) { + positionController_->SetBottom(); + positionController_->HandleScrollEvent( + std::make_shared(ScrollEvent::SCROLL_BOTTOM, 0.0, 0.0, -1)); + } + return false; +} + +bool RenderScroll::HandleCrashTop() +{ + if (positionController_) { + positionController_->SetTop(); + positionController_->HandleScrollEvent( + std::make_shared(ScrollEvent::SCROLL_TOP, 0.0, 0.0, -1)); + } + return false; +} + +bool RenderScroll::UpdateOffset(Offset& delta, int32_t source) +{ + if (!scrollable_->Available()) { + return false; + } + if (delta.IsZero()) { + return false; + } + if (!ScrollPageCheck(delta, source)) { + return false; + } + if (GetMainOffset(currentOffset_) <= 0.0) { + if (scrollable_->RelatedScrollEventDoing(delta)) { + return false; + } + } + + if (scrollBar_ && scrollBar_->NeedScrollBar()) { + scrollBar_->SetOutBoundary(std::abs(scrollBarOutBoundaryExtent_)); + scrollBar_->SetActive(SCROLL_FROM_CHILD != source); + } + + // handle refresh with list + if (!HandleRefreshEffect(delta, source)) { + return false; + } + + currentOffset_ += delta; + currentDeltaInMain_ += GetMainOffset(delta); + // handle edge effect + HandleScrollEffect(); + + if (!ValidateOffset(source)) { + currentOffset_ = currentOffset_ - delta; + return false; + } + + bool next = true; + Offset correctedDelta = currentOffset_ - lastOffset_; + if (!correctedDelta.IsZero()) { + int32_t touchState = SCROLL_NONE; + if (source == SCROLL_FROM_UPDATE) { + touchState = SCROLL_TOUCH_DOWN; + } else if (source == SCROLL_FROM_ANIMATION || source == SCROLL_FROM_ANIMATION_SPRING) { + touchState = SCROLL_TOUCH_UP; + } + HandleScrollPosition(correctedDelta.GetX(), correctedDelta.GetY(), touchState); + + if (IsCrashTop()) { + // scroll to top + next = HandleCrashTop(); + } else if (IsCrashBottom()) { + // scroll to bottom + next = HandleCrashBottom(); + } + if (scrollEffect_ && !scrollEffect_->IsRestrictBoundary()) { + next = true; + MarkNeedPredictLayout(); + } + } else { + next = false; + } + + lastOffset_ = currentOffset_; + currentBottomOffset_ = axis_ == Axis::VERTICAL ? currentOffset_ + Offset(0.0, viewPort_.Height()) + : currentOffset_ + Offset(viewPort_.Width(), 0.0); + correctedDelta_ = correctedDelta; + MarkNeedLayout(true); + return next; +} + +bool RenderScroll::HandleRefreshEffect(Offset& delta, int32_t source) +{ + // return true means scroll will update offset + auto refresh = refreshParent_.Upgrade(); + if (!refresh || axis_ == Axis::HORIZONTAL) { + LOGD("not support refresh"); + return true; + } + + if ((LessOrEqual(currentOffset_.GetY(), 0.0) && source == SCROLL_FROM_UPDATE) || inLinkRefresh_) { + refresh->UpdateScrollableOffset(-delta.GetY()); + inLinkRefresh_ = true; + } + if (refresh->GetStatus() != RefreshStatus::INACTIVE) { + return false; + } + return true; +} + +void RenderScroll::HandleScrollEffect() +{ + // handle edge effect + if (scrollEffect_) { + overScroll_ = scrollEffect_->CalculateOverScroll(GetMainOffset(lastOffset_), ReachMaxCount()); + if (!NearZero(overScroll_)) { + scrollEffect_->HandleOverScroll(axis_, overScroll_, viewPort_); + } + } +} + +bool RenderScroll::IsCrashTop() +{ + double current = GetMainOffset(currentOffset_); + double last = GetMainOffset(lastOffset_); + return current <= 0.0 && last > 0.0; +} + +bool RenderScroll::IsCrashBottom() +{ + double maxExtent = mainScrollExtent_ - GetMainSize(viewPort_); + double current = GetMainOffset(currentOffset_); + double last = GetMainOffset(lastOffset_); + return current >= maxExtent && last < maxExtent && ReachMaxCount(); +} + +bool RenderScroll::CanScrollVertically(const Offset& delta) +{ + if (axis_ != Axis::VERTICAL) { + return false; + } + + if (delta.IsZero()) { + return false; + } + Offset currentOffset = currentOffset_ + delta; + + if (currentOffset.GetY() < 0.0) { + currentOffset.SetY(0.0); + } else if (currentOffset.GetY() > mainScrollExtent_ - viewPort_.Height()) { + currentOffset.SetY(mainScrollExtent_ - viewPort_.Height()); + } + + if (mainScrollExtent_ <= GetMainSize(viewPort_)) { + return false; + } + + bool next = true; + Offset correctedDelta = currentOffset - lastOffset_; + if (!correctedDelta.IsZero()) { + double mainOffset = GetMainOffset(currentOffset); + if (NearZero(mainOffset)) { + // scroll to top + next = false; + } else if (NearEqual(mainOffset, mainScrollExtent_ - GetMainSize(viewPort_)) && ReachMaxCount()) { + // scroll to bottom + next = false; + } + } else { + next = false; + } + return next; +} + +bool RenderScroll::ScrollPageCheck(Offset& delta, int32_t source) +{ + if (source == SCROLL_FROM_ANIMATION_SPRING || source == SCROLL_FROM_BAR) { + return true; + } + if (axis_ != Axis::VERTICAL) { + return true; + } + if (scrollPage_) { + if (delta.GetY() > 0.0) { + // scroll up + bool selfCanScroll = RenderNode::ScrollPageByChild(delta, SCROLL_FROM_CHILD); + if (!selfCanScroll) { + return false; + } + } else { + // scroll down + if (!CanScrollVertically(delta)) { + bool selfCanScroll = RenderNode::ScrollPageByChild(delta, SCROLL_FROM_CHILD); + if (!selfCanScroll) { + return false; + } + } + } + } + return true; +} + +bool RenderScroll::ScrollPageByChild(Offset& delta, int32_t source) +{ + // scroll up + if (delta.GetY() > 0.0) { + bool selfCanScroll = RenderNode::ScrollPageByChild(delta, source); + if (selfCanScroll) { + AdjustOffset(delta, source); + return !UpdateOffset(delta, source); + } + return false; + } else { + // scroll down + AdjustOffset(delta, source); + if (UpdateOffset(delta, source)) { + return false; + } else { + return RenderNode::ScrollPageByChild(delta, source); + } + } +} + +bool RenderScroll::IsOutOfBottomBoundary() +{ + if (IsRowReverse()) { + return GetMainOffset(currentOffset_) <= (GetMainSize(viewPort_) - mainScrollExtent_) && ReachMaxCount(); + } else { + return GetMainOffset(currentOffset_) >= (mainScrollExtent_ - GetMainSize(viewPort_)) && ReachMaxCount(); + } +} + +bool RenderScroll::IsOutOfTopBoundary() +{ + if (IsRowReverse()) { + return GetMainOffset(currentOffset_) >= 0.0; + } else { + return GetMainOffset(currentOffset_) <= 0.0; + } +} + +bool RenderScroll::IsOutOfBoundary() +{ + return (IsOutOfTopBoundary() || IsOutOfBottomBoundary()); +} + +void RenderScroll::AdjustOffset(Offset& delta, int32_t source) +{ + if (delta.IsZero() || source == SCROLL_FROM_ANIMATION || source == SCROLL_FROM_ANIMATION_SPRING) { + return; + } + + double viewPortSize = GetMainSize(viewPort_); + double offset = GetMainOffset(delta); + if (NearZero(viewPortSize) || NearZero(offset)) { + return; + } + + double maxScrollExtent = mainScrollExtent_ - viewPortSize; + double overscrollPastStart = 0.0; + double overscrollPastEnd = 0.0; + double overscrollPast = 0.0; + bool easing = false; + if (IsRowReverse()) { + overscrollPastStart = std::max(GetCurrentPosition(), 0.0); + overscrollPastEnd = std::max(-GetCurrentPosition() - maxScrollExtent, 0.0); + // do not adjust offset if direction opposite from the overScroll direction when out of boundary + if ((overscrollPastStart > 0.0 && offset < 0.0) || (overscrollPastEnd > 0.0 && offset > 0.0)) { + return; + } + easing = (overscrollPastStart > 0.0 && offset > 0.0) || (overscrollPastEnd > 0.0 && offset < 0.0); + } else { + overscrollPastStart = std::max(-GetCurrentPosition(), 0.0); + overscrollPastEnd = std::max(GetCurrentPosition() - maxScrollExtent, 0.0); + // do not adjust offset if direction oppsite from the overScroll direction when out of boundary + if ((overscrollPastStart > 0.0 && offset > 0.0) || (overscrollPastEnd > 0.0 && offset < 0.0)) { + return; + } + easing = (overscrollPastStart > 0.0 && offset < 0.0) || (overscrollPastEnd > 0.0 && offset > 0.0); + } + overscrollPast = std::max(overscrollPastStart, overscrollPastEnd); + double friction = easing ? CalculateFriction((overscrollPast - std::abs(offset)) / viewPortSize) + : CalculateFriction(overscrollPast / viewPortSize); + double direction = offset / std::abs(offset); + offset = direction * CalculateOffsetByFriction(overscrollPast, std::abs(offset), friction); + axis_ == Axis::VERTICAL ? delta.SetY(offset) : delta.SetX(offset); +} + +double RenderScroll::CalculateFriction(double gamma) +{ + return SCROLL_RATIO * std::pow(1.0 - gamma, SQUARE); +} + +double RenderScroll::CalculateOffsetByFriction(double extentOffset, double delta, double friction) +{ + double offset = 0.0; + if (extentOffset > 0.0 && !NearZero(friction)) { + double deltaToLimit = extentOffset / friction; + if (delta < deltaToLimit) { + return delta * friction; + } + offset += extentOffset; + delta -= deltaToLimit; + } + return offset + delta; +} + +void RenderScroll::ResetEdgeEffect() +{ + if (scrollEffect_) { + scrollEffect_->SetCurrentPositionCallback([weakScroll = AceType::WeakClaim(this)]() { + auto scroll = weakScroll.Upgrade(); + if (scroll) { + return -scroll->GetCurrentPosition(); + } + return 0.0; + }); + scrollEffect_->SetLeadingCallback([weakScroll = AceType::WeakClaim(this)]() { + auto scroll = weakScroll.Upgrade(); + if (scroll) { + if (!scroll->IsRowReverse()) { + return scroll->GetMainSize(scroll->viewPort_) - scroll->mainScrollExtent_; + } + } + return 0.0; + }); + scrollEffect_->SetTrailingCallback([weakScroll = AceType::WeakClaim(this)]() { + auto scroll = weakScroll.Upgrade(); + if (scroll) { + if (scroll->IsRowReverse()) { + return scroll->mainScrollExtent_ - scroll->GetMainSize(scroll->viewPort_); + } + } + return 0.0; + }); + scrollEffect_->SetInitLeadingCallback([weakScroll = AceType::WeakClaim(this)]() { + auto scroll = weakScroll.Upgrade(); + if (scroll) { + if (!scroll->IsRowReverse()) { + return scroll->GetMainSize(scroll->viewPort_) - scroll->GetMainScrollExtent(); + } + } + return 0.0; + }); + scrollEffect_->SetInitTrailingCallback([weakScroll = AceType::WeakClaim(this)]() { + auto scroll = weakScroll.Upgrade(); + if (scroll) { + if (scroll->IsRowReverse()) { + return scroll->GetMainScrollExtent() - scroll->GetMainSize(scroll->viewPort_); + } + } + return 0.0; + }); + scrollEffect_->SetScrollNode(AceType::WeakClaim(this)); + + SetEdgeEffectAttribute(); + scrollEffect_->InitialEdgeEffect(); + } else { + LOGD("scrollEffect_ is null"); + } +} + +void RenderScroll::ResetScrollEventCallBack() +{ + scrollable_->SetScrollEndCallback([weakScroll = AceType::WeakClaim(this)]() { + auto scroll = weakScroll.Upgrade(); + if (scroll) { + if (scroll->positionController_) { + scroll->positionController_->HandleScrollEvent( + std::make_shared(ScrollEvent::SCROLL_END, 0.0, 0.0, -1)); + } + // Send scroll none when scroll is end. + scroll->HandleScrollPosition(0.0, 0.0, SCROLL_NONE); + scroll->HandleScrollBarEnd(); + } + }); + scrollable_->SetScrollTouchUpCallback([weakScroll = AceType::WeakClaim(this)]() { + auto scroll = weakScroll.Upgrade(); + if (scroll && scroll->positionController_) { + scroll->positionController_->HandleScrollEvent( + std::make_shared(ScrollEvent::SCROLL_TOUCHUP, 0.0, 0.0, -1)); + } + }); + + scrollable_->SetDragEndCallback([weakScroll = AceType::WeakClaim(this)]() { + auto scroll = weakScroll.Upgrade(); + if (scroll) { + auto refresh = scroll->refreshParent_.Upgrade(); + if (refresh && scroll->inLinkRefresh_) { + refresh->HandleDragEnd(); + scroll->inLinkRefresh_ = false; + } + } + }); + if (positionController_) { + positionController_->SetMiddle(); + double mainOffset = GetMainOffset(currentOffset_); + // No need to set bottom, because if scrollable, it must not be at the bottom. + if (NearZero(mainOffset)) { + positionController_->SetTop(); + } + } +} + +void RenderScroll::InitScrollBar(const RefPtr& scrollBar) +{ + if (scrollBar_ != scrollBar) { + scrollBar_ = scrollBar; + if (!scrollBar_) { + scrollBar_ = AceType::MakeRefPtr(DisplayMode::OFF); + } + if (axis_ != Axis::VERTICAL) { + scrollBar_->SetUndisplay(); + } else { + scrollBar_->InitScrollBar(AceType::WeakClaim(this), GetContext()); + } + + SetBarCallBack(axis_ == Axis::VERTICAL); + } +} + +void RenderScroll::ResetScrollable() +{ + const auto isVertical = (axis_ == Axis::VERTICAL); + auto&& callback = [weakScroll = AceType::WeakClaim(this), isVertical](double value, int32_t source) { + auto scroll = weakScroll.Upgrade(); + if (!scroll) { + LOGE("render scroll is released"); + return false; + } + if (source == SCROLL_FROM_START) { + scroll->NotifyDragStart(value); + scroll->currentDeltaInMain_ = 0.0; + return true; + } + Offset delta; + if (isVertical) { + delta.SetX(0.0); + delta.SetY(-value); + } else { + delta.SetX(-value); + delta.SetY(0.0); + } + scroll->AdjustOffset(delta, source); + scroll->NotifyDragUpdate(scroll->GetMainOffset(delta), source); + return scroll->UpdateOffset(delta, source); + }; + // Initializes scrollable with different direction. + if (scrollable_) { + scrollable_->SetAxis(axis_ == Axis::VERTICAL ? Axis::VERTICAL : Axis::HORIZONTAL); + scrollable_->SetCallback(callback); + } else { + if (isVertical) { + scrollable_ = AceType::MakeRefPtr(callback, Axis::VERTICAL); + scrollable_->InitRelatedParent(GetParent()); + } else { + scrollable_ = AceType::MakeRefPtr(callback, Axis::HORIZONTAL); + } + } + scrollable_->SetNotifyScrollOverCallBack([weak = AceType::WeakClaim(this)] (double velocity) { + auto scroll = weak.Upgrade(); + if (!scroll) { + return; + } + scroll->ProcessScrollOverCallback(velocity); + }); + scrollable_->SetWatchFixCallback([weak = AceType::WeakClaim(this)] (double final, double current) { + auto scroll = weak.Upgrade(); + if (scroll) { + return scroll->GetFixPositionOnWatch(final, current); + } + return final; + }); + scrollable_->Initialize(GetContext()); + scrollable_->SetNodeId(GetAccessibilityNodeId()); + scrollable_->SetScrollEnd([weakScroll = AceType::WeakClaim(this)]() { + auto scroll = weakScroll.Upgrade(); + if (scroll) { + scroll->MarkNeedLayout(true); + } + }); + + currentBottomOffset_ = Offset::Zero(); + currentOffset_ = Offset::Zero(); + lastOffset_ = Offset::Zero(); + ResetScrollEventCallBack(); + SetEdgeEffectAttribute(); +} + +void RenderScroll::SetEdgeEffectAttribute() +{ + if (scrollEffect_ && scrollable_) { + scrollEffect_->SetScrollable(scrollable_); + scrollEffect_->RegisterSpringCallback(); + if (scrollEffect_->IsSpringEffect()) { + scrollable_->SetOutBoundaryCallback([weakScroll = AceType::WeakClaim(this)]() { + auto scroll = weakScroll.Upgrade(); + if (scroll) { + return scroll->IsOutOfBoundary(); + } + return false; + }); + } + } +} + +void RenderScroll::OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) +{ + if (!GetVisible()) { + return; + } + if (!scrollable_ || !scrollable_->Available()) { + return; + } + if (scrollBar_ && scrollBar_->InBarRegion(globalPoint_)) { + scrollBar_->AddScrollBarController(coordinateOffset, result); + } else { + scrollable_->SetCoordinateOffset(coordinateOffset); + auto newTouchRestrict = touchRestrict; + AdjustTouchRestrict(newTouchRestrict); + scrollable_->SetDragTouchRestrict(newTouchRestrict); + result.emplace_back(scrollable_); + } + touchRecognizer_->SetCoordinateOffset(coordinateOffset); + result.emplace_back(touchRecognizer_); +} + +void RenderScroll::JumpToIndex(int32_t index, int32_t source) +{ + LOGE("Do not support in base RenderScroll"); +} + +void RenderScroll::ScrollToEdge(ScrollEdgeType scrollEdgeType, bool smooth) +{ + if (scrollEdgeType == ScrollEdgeType::SCROLL_TOP) { + double distance = -GetMainOffset(currentOffset_); + ScrollBy(distance, distance, smooth); + } else { + double distance = mainScrollExtent_ - GetMainOffset(currentOffset_); + ScrollBy(distance, distance, smooth); + } +} + +bool RenderScroll::ScrollPage(bool reverse, bool smooth) +{ + if (reverse) { + double distance = -GetMainSize(viewPort_); + ScrollBy(distance, distance, smooth); + } else { + double distance = GetMainSize(viewPort_); + ScrollBy(distance, distance, smooth); + } + return true; +} + +void RenderScroll::JumpToPosition(double position, int32_t source) +{ + // If an animation is playing, stop it. + if (!animator_->IsStopped()) { + animator_->Stop(); + } + animator_->ClearInterpolators(); + DoJump(position, source); + HandleScrollBarEnd(); +} + +void RenderScroll::DoJump(double position, int32_t source) +{ + LOGD("jump to position: %{public}lf", position); + if (!NearEqual(GetCurrentPosition(), position)) { + Offset delta; + if (axis_ == Axis::VERTICAL) { + delta.SetY(position - GetMainOffset(currentOffset_)); + } else { + if (IsRowReverse()) { + delta.SetX(-position - GetMainOffset(currentOffset_)); + } else { + delta.SetX(position - GetMainOffset(currentOffset_)); + } + } + + UpdateOffset(delta, source); + } +} + +void RenderScroll::AnimateTo(double position, float duration, const RefPtr& curve) +{ + LOGD("animate from position %{public}lf to %{public}lf, duration: %{public}f", GetCurrentPosition(), position, + duration); + if (!animator_->IsStopped()) { + animator_->Stop(); + } + animator_->ClearInterpolators(); + + // Send event to accessibility when scroll start. + auto context = GetContext().Upgrade(); + if (context) { + AccessibilityEvent scrollEvent; + scrollEvent.nodeId = GetAccessibilityNodeId(); + scrollEvent.eventType = "scrollstart"; + context->SendEventToAccessibility(scrollEvent); + } + auto animation = AceType::MakeRefPtr>(GetCurrentPosition(), position, curve); + animation->AddListener([weakScroll = AceType::WeakClaim(this)](double value) { + auto scroll = weakScroll.Upgrade(); + if (scroll) { + scroll->DoJump(value); + } + }); + animator_->AddInterpolator(animation); + animator_->SetDuration(std::min(duration, SCROLL_MAX_TIME)); + animator_->ClearStopListeners(); + animator_->Play(); + auto weakScroll = AceType::WeakClaim(this); + auto weakScrollBar = AceType::WeakClaim(AceType::RawPtr(scrollBar_)); + animator_->AddStopListener([weakScroll, weakScrollBar]() { + auto scrollBar = weakScrollBar.Upgrade(); + if (scrollBar) { + scrollBar->HandleScrollBarEnd(); + } + // Send event to accessibility when scroll end. + auto scroll = weakScroll.Upgrade(); + if (scroll) { + auto context = scroll->GetContext().Upgrade(); + if (context) { + AccessibilityEvent scrollEvent; + scrollEvent.nodeId = scroll->GetAccessibilityNodeId(); + scrollEvent.eventType = "scrollend"; + context->SendEventToAccessibility(scrollEvent); + } + } + }); +} + +void RenderScroll::ScrollBy(double pixelX, double pixelY, bool smooth) +{ + double distance = (axis_ == Axis::VERTICAL) ? pixelY : pixelX; + if (NearZero(distance)) { + return; + } + double position = GetMainOffset(currentOffset_) + distance; + if (smooth) { + AnimateTo(position, fabs(distance) * UNIT_CONVERT / SCROLL_BY_SPEED, Curves::EASE_OUT); + } else { + JumpToPosition(position); + } +} + +double RenderScroll::GetCurrentPosition() const +{ + double position = 0.0; + if (axis_ == Axis::VERTICAL) { + position = currentOffset_.GetY(); + } else { + position = currentOffset_.GetX(); + } + return position; +} + +void RenderScroll::Update(const RefPtr& component) +{ + if (!animator_) { + animator_ = AceType::MakeRefPtr(GetContext()); + } + lastOffset_ = currentOffset_; + // Send scroll none when first build. + HandleScrollPosition(0.0, 0.0, SCROLL_NONE); + MarkNeedLayout(); +} + +void RenderScroll::SetBarCallBack(bool isVertical) +{ + if (scrollBar_ && scrollBar_->NeedScrollBar()) { + auto&& barEndCallback = [weakScroll = AceType::WeakClaim(this), isVertical](int32_t value) { + auto scroll = weakScroll.Upgrade(); + if (!scroll) { + LOGE("render scroll is released"); + return; + } + scroll->scrollBarOpacity_ = value; + scroll->MarkNeedLayout(true); + }; + auto&& scrollEndCallback = [weakScroll = AceType::WeakClaim(this), isVertical]() { + auto scroll = weakScroll.Upgrade(); + if (!scroll) { + LOGE("render scroll is released"); + return; + } + if (scroll->positionController_) { + scroll->positionController_->HandleScrollEvent( + std::make_shared(ScrollEvent::SCROLL_END, 0.0, 0.0, -1)); + } + // Send scroll none when scroll is end. + scroll->HandleScrollPosition(0.0, 0.0, SCROLL_NONE); + }; + auto&& scrollCallback = [weakScroll = AceType::WeakClaim(this), isVertical](double value, int32_t source) { + auto scroll = weakScroll.Upgrade(); + if (!scroll) { + LOGE("render scroll is released"); + return false; + } + Offset delta; + if (isVertical) { + delta.SetX(0.0); + delta.SetY(-value); + } else { + delta.SetX(-value); + delta.SetY(0.0); + } + scroll->AdjustOffset(delta, source); + + return scroll->UpdateOffset(delta, source); + }; + scrollBar_->SetCallBack(scrollCallback, barEndCallback, scrollEndCallback); + } +} + +double RenderScroll::GetEstimatedHeight() +{ + if (ReachMaxCount()) { + estimatedHeight_ = scrollBarExtent_; + } else { + estimatedHeight_ = std::max(estimatedHeight_, scrollBarExtent_); + } + return estimatedHeight_; +} + +void RenderScroll::HandleScrollOverByBar(double velocity) +{ + // the direction of bar and scroll is opposite, so it need be negative + if (scrollEffect_) { + scrollEffect_->ProcessScrollOver(-velocity); + } +} + +void RenderScroll::HandleScrollBarEnd() +{ + if (scrollBar_) { + scrollBar_->HandleScrollBarEnd(); + } +} + +void RenderScroll::HandleRotate(double rotateValue, bool isVertical) +{ + auto context = GetContext().Upgrade(); + if (!context) { + LOGE("context is null"); + return; + } + double value = context->NormalizeToPx(Dimension(rotateValue, DimensionUnit::VP)) * ROTATE_FACTOR; + + // Vertical or horizontal, different axis + Offset delta; + if (isVertical) { + delta.SetX(0.0); + delta.SetY(value); + } else { + delta.SetX(value); + delta.SetY(0.0); + } + UpdateOffset(delta, SCROLL_FROM_ROTATE); +} + +void RenderScroll::OnChildAdded(const RefPtr& child) +{ + child->SetSlipFactorSetting([weakScroll = AceType::WeakClaim(this)](double slipFactor) { + auto scroll = weakScroll.Upgrade(); + if (scroll) { + scroll->scrollable_->SetSlipFactor(slipFactor); + } + }); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/scroll/render_scroll.h b/frameworks/core/components/scroll/render_scroll.h new file mode 100644 index 00000000..87737f5a --- /dev/null +++ b/frameworks/core/components/scroll/render_scroll.h @@ -0,0 +1,260 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SCROLL_RENDER_SCROLL_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SCROLL_RENDER_SCROLL_H + +#include + +#include "base/geometry/axis.h" +#include "base/memory/ace_type.h" +#include "core/animation/curve.h" +#include "core/components/common/properties/scroll_bar.h" +#include "core/components/refresh/render_refresh.h" +#include "core/components/scroll/scroll_bar_controller.h" +#include "core/components/scroll/scroll_component.h" +#include "core/components/scroll/scroll_edge_effect.h" +#include "core/components/scroll/scroll_position_controller.h" +#include "core/gestures/raw_recognizer.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +enum class ScrollType { + SCROLL_INDEX = 0, + SCROLL_PAGE_DOWN, + SCROLL_PAGE_UP, + SCROLL_BOTTOM, + SCROLL_TOP, +}; + +class RenderScroll : public RenderNode { + DECLARE_ACE_TYPE(RenderScroll, RenderNode) + +public: + ~RenderScroll() override = default; + + virtual void JumpToIndex(int32_t index, int32_t source = SCROLL_FROM_JUMP); + virtual void ScrollToEdge(ScrollEdgeType scrollEdgeType, bool smooth); + virtual bool ScrollPage(bool reverse, bool smooth); + virtual void JumpToPosition(double position, int32_t source = SCROLL_FROM_JUMP); + // notify start position in global main axis + virtual void NotifyDragStart(double startPosition) {}; + // notify drag offset in global main axis + virtual void NotifyDragUpdate(double dragOffset, int32_t source) {}; + virtual void ProcessScrollOverCallback(double velocity) {}; + void AnimateTo(double position, float duration, const RefPtr& curve); + void ScrollBy(double pixelX, double pixelY, bool smooth); + + double GetCurrentPosition() const; + bool UpdateOffset(Offset& delta, int32_t source); + bool ScrollPageByChild(Offset& delta, int32_t source) override; + double GetEstimatedHeight(); + void OnChildAdded(const RefPtr& child) override; + + virtual double GetFixPositionOnWatch(double destination, double current) + { + return destination; + } + + bool IsAtTop() const + { + return LessOrEqual(GetMainOffset(currentOffset_), 0.0); + } + + bool IsAtBottom() const + { + auto outViewportSize = mainScrollExtent_ - GetMainSize(viewPort_); + bool atBottom = GreatOrEqual(GetMainOffset(currentOffset_), outViewportSize); + return LessOrEqual(outViewportSize, 0.0) || (atBottom && ReachMaxCount()); + } + + bool IsScrollStop() const + { + return (scrollable_ ? scrollable_->IsMotionStop() : true) && + (animator_ ? (!animator_->IsRunning()) : true); + } + + bool CanScrollVertically(const Offset& delta); + bool ScrollPageCheck(Offset& delta, int32_t source); + + double GetMainOffset(const Offset& offset) const + { + return axis_ == Axis::HORIZONTAL ? offset.GetX() : offset.GetY(); + } + + double GetMainSize(const Size& size) const + { + return axis_ == Axis::HORIZONTAL ? size.Width() : size.Height(); + } + + Size GetViewPort() const + { + return viewPort_; + } + + double GetCrossSize(const Size& size) const + { + return axis_ == Axis::HORIZONTAL ? size.Height() : size.Width(); + } + + Axis GetAxis() const + { + return axis_; + } + + bool IsRowReverse() + { + return axis_ == Axis::HORIZONTAL && rightToLeft_; + } + + virtual bool ReachMaxCount() const + { + return true; + } + + virtual double GetMainScrollExtent() const + { + return mainScrollExtent_; + } + + void SetScrollPage(bool scrollPage) + { + scrollPage_ = scrollPage; + } + + int32_t GetBarDisappearFlag() const + { + return scrollBarOpacity_; + } + + Offset GetCurrentOffset() const + { + return currentOffset_; + } + + const Offset& GetLastOffset() const + { + return lastOffset_; + } + + void SetNeedMove(bool needMove) + { + moveStatus_.second = moveStatus_.first; + moveStatus_.first = needMove; + } + + virtual void HandleRotate(double rotateValue, bool isVertical); + + void HandleScrollOverByBar(double velocity); + + void SetMainScrollExtentForBar(double value) + { + scrollBarExtent_ = value; + } + + RefPtr GetScrollBar() const + { + return scrollBar_; + } + + double GetScrollBarOutBoundaryExtent() const + { + return scrollBarOutBoundaryExtent_; + } + + bool IsSpringMotionRunning() const + { + return scrollable_ ? scrollable_->IsSpringMotionRunning() : false; + } + + virtual bool IsOutOfBottomBoundary(); + + virtual bool IsOutOfTopBoundary(); + +protected: + explicit RenderScroll(); + + void ResetEdgeEffect(); + void ResetScrollable(); + bool ValidateOffset(int32_t source); + void DoJump(double position, int32_t source = SCROLL_FROM_JUMP); + void Update(const RefPtr& component) override; + void InitScrollBar(const RefPtr& scrollBar); + + virtual void AdjustTouchRestrict(TouchRestrict& touchRestrict) {}; + + Edge padding_; + Axis axis_ = Axis::FREE; + std::pair moveStatus_; + Offset currentBottomOffset_; + Offset currentOffset_; + double currentDeltaInMain_ = 0.0; + Offset correctedDelta_; + Offset lastOffset_; + double overScroll_ = 0.0; + double mainScrollExtent_ = 0.0; + double outBoundaryExtent_ = 0.0; + double estimatedHeight_ = 0.0; + bool scrollPage_ = false; + RefPtr positionController_; + RefPtr scrollEffect_; + RefPtr scrollable_; + + RefPtr scrollBar_; + bool inLinkRefresh_ = false; + WeakPtr refreshParent_; + bool rightToLeft_ = false; + bool enable_ = true; + bool isRoot_ = false; + + // used for scrollBar + double scrollBarExtent_ = 0.0; + double scrollBarOutBoundaryExtent_ = 0.0; + bool scrollBarExtentFlag_ = false; + int32_t scrollBarOpacity_ = 0; + + double friction_ = 0.0; + RefPtr springProperty_; + +private: + static double CalculateFriction(double gamma); + static double CalculateOffsetByFriction(double extentOffset, double delta, double friction); + + bool IsOutOfBoundary(); + bool IsCrashBottom(); + bool IsCrashTop(); + void Initialize(); + void AdjustOffset(Offset& delta, int32_t source); + void OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) override; + void HandleScrollPosition(double scrollX, double scrollY, int32_t scrollState) const; + void SetEdgeEffectAttribute(); + bool HandleCrashTop(); + bool HandleCrashBottom(); + bool HandleRefreshEffect(Offset& delta, int32_t source); + void ResetScrollEventCallBack(); + void HandleScrollEffect(); + void SetBarCallBack(bool isVertical); + void HandleScrollBarEnd(); + void HandleScrollBarOutBoundary(); + + RefPtr animator_; + RefPtr touchRecognizer_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SCROLL_RENDER_SCROLL_H diff --git a/frameworks/core/components/scroll/render_single_child_scroll.cpp b/frameworks/core/components/scroll/render_single_child_scroll.cpp new file mode 100644 index 00000000..18b4809b --- /dev/null +++ b/frameworks/core/components/scroll/render_single_child_scroll.cpp @@ -0,0 +1,297 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/scroll/render_single_child_scroll.h" + +namespace OHOS::Ace { +namespace { + +constexpr int32_t MAX_CHILD_SIZE = 1; + +} // namespace + +void RenderSingleChildScroll::Update(const RefPtr& component) +{ + RefPtr scroll = AceType::DynamicCast(component); + if (!scroll) { + return; + } + + enable_ = scroll->GetEnable(); + + auto axis = scroll->GetAxisDirection(); + if (axis_ != axis) { + axis_ = axis; + ResetScrollable(); + } + padding_ = scroll->GetPadding(); + scrollPage_ = scroll->GetScrollPage(); + + positionController_ = scroll->GetScrollPositionController(); + if (positionController_) { + positionController_->SetScrollNode(AceType::WeakClaim(this)); + if (axis_ == Axis::VERTICAL) { + currentOffset_.SetY(positionController_->GetInitialOffset()); + } else { + currentOffset_.SetX(positionController_->GetInitialOffset()); + } + LOGD("initial position: %{public}lf, %{public}lf", currentOffset_.GetX(), currentOffset_.GetY()); + } + // In dialog, scroll is not takeBoundary, use this flag to determine. + TakeBoundary(scroll->IsTakeBoundary()); + + auto scrollBar = scroll->GetScrollBar(); + InitScrollBar(scrollBar); + + // This should be put after setting positionController_. + RenderScroll::Update(component); + UpdateAccessibilityAttr(); + + // Update edge effect. + isEffectSetted_ = scroll->IsEffectSetted(); + auto newEffect = scroll->GetScrollEffect(); + if (scrollEffect_ != newEffect) { + scrollEffect_ = newEffect; + if (scrollEffect_) { + ResetEdgeEffect(); + } + } +} + +LayoutParam RenderSingleChildScroll::MakeInnerLayoutParam() const +{ + LayoutParam layout; + if (!enable_) { + layout.SetMaxSize(Size(viewPort_.Width(), viewPort_.Height())); + } else if (axis_ == Axis::VERTICAL) { + layout.SetMaxSize(Size(viewPort_.Width(), layout.GetMaxSize().Height())); + } else { + layout.SetMaxSize(Size(layout.GetMaxSize().Width(), viewPort_.Height())); + } + return layout; +} + +bool RenderSingleChildScroll::CalculateMainScrollExtent(const Size& itemSize) +{ + bool isScrollable = false; + if (axis_ == Axis::VERTICAL) { + mainScrollExtent_ = itemSize.Height() + NormalizeToPx(padding_.Top()) + NormalizeToPx(padding_.Bottom()); + if (mainScrollExtent_ > viewPort_.Height()) { + isScrollable = true; + } + } else { + mainScrollExtent_ = itemSize.Width() + NormalizeToPx(padding_.Left()) + NormalizeToPx(padding_.Right()); + if (mainScrollExtent_ > viewPort_.Width()) { + isScrollable = true; + } + } + + // If not scrollable, reset scrollable_ to null. + if (!isScrollable) { + if (scrollable_) { + scrollable_->MarkAvailable(false); + if (scrollable_->Idle() && GetMainOffset(currentOffset_) > 0.0) { + LOGD("jump to top"); + JumpToPosition(0.0); + } + } + } else { + if (scrollable_ && scrollable_->Available()) { + if (scrollable_->Idle() && GetMainOffset(currentOffset_) > mainScrollExtent_ - GetMainSize(viewPort_)) { + // scroll to bottom + LOGD("jump to bottom"); + JumpToPosition(mainScrollExtent_ - GetMainSize(viewPort_)); + } + } else { + if (scrollable_) { + scrollable_->MarkAvailable(true); + } + } + } + + if (scrollBar_) { + scrollBar_->SetScrollable(isScrollable); + } + + return isScrollable; +} + +void RenderSingleChildScroll::UpdateTouchRect() +{ + touchRect_.SetSize(GetPaintRect().GetSize()); + touchRect_.SetOffset(GetPaintRect().GetOffset()); +} + +void RenderSingleChildScroll::MoveChildToViewPort( + const Size& size, const Offset& childOffset, const Offset& effectOffset) +{ + LOGD("MoveChildToViewPort %{public}s %{public}s", size.ToString().c_str(), childOffset.ToString().c_str()); + auto selfOffset = GetGlobalOffset(); + auto itemActualRect = Rect(childOffset, size); + auto viewRect = Rect(selfOffset, viewPort_); + + // rect is in viewport + if (itemActualRect.IsWrappedBy(viewRect)) { + return; + } + + double childPosition = GetMainOffset(childOffset); + double viewMin = GetMainOffset(selfOffset); + double viewMax = GetMainOffset(selfOffset + viewPort_); + double effectSize = GetMainOffset(effectOffset); + double childSize = GetMainSize(size); + double viewPortSize = GetMainSize(viewPort_); + + double moveDelta = 0.0; + if (viewPortSize <= childSize) { + return; + } + + if (childPosition < viewMin) { + moveDelta = childPosition - viewMin - effectSize; + } else if (childPosition + childSize > viewMax) { + moveDelta = childPosition + childSize + effectSize - viewMax; + } + JumpToPosition(GetCurrentPosition() + moveDelta); +} + +void RenderSingleChildScroll::PerformLayout() +{ + if (GetChildren().size() != MAX_CHILD_SIZE) { + LOGE("render Scroll perform layout with %{public}zu children", GetChildren().size()); + return; + } + auto context = context_.Upgrade(); + if (!context) { + LOGE("context is null"); + return; + } + + viewPort_ = GetLayoutParam().GetMaxSize() > viewPort_ ? viewPort_ : GetLayoutParam().GetMaxSize(); + + Size paddingSize = padding_.GetLayoutSizeInPx(context->GetDipScale()); + Offset paddingOffset = padding_.GetOffsetInPx(context->GetDipScale()); + + auto child = GetChildren().front(); + + LayoutParam layout; + layout = MakeInnerLayoutParam(); + child->Layout(layout); + + // Get layout result of child. + Size itemSize = child->GetLayoutSize(); + // Calculate with padding. + if (!NearZero(paddingSize.Width()) || !NearZero(paddingSize.Height())) { + layout.SetFixedSize(itemSize - paddingSize); + // Layout again with new param. + child->Layout(layout); + } + itemSize = child->GetLayoutSize(); + LOGD("child size after padding: %{public}lf, %{public}lf", itemSize.Width(), itemSize.Height()); + auto currentChildMainSize = GetMainSize(child->GetLayoutSize()); + // Mark need force layout with parent if child size changed in semi and dialog window modal. + if (!NearEqual(childLastMainSize_, -std::numeric_limits::max()) && + !NearEqual(currentChildMainSize, childLastMainSize_) && !context->IsFullScreenModal()) { + PostForceMakeNeedLayout(); + } + childLastMainSize_ = currentChildMainSize; + + SetLayoutSize(GetLayoutParam().Constrain(itemSize > viewPort_ ? viewPort_ : itemSize)); + + if (moveStatus_.first && axis_ == Axis::VERTICAL) { + currentOffset_.SetY(currentBottomOffset_.GetY() - viewPort_.Height()); + } + + if (moveStatus_.second && !moveStatus_.first && axis_ == Axis::VERTICAL) { + currentOffset_.SetY(currentBottomOffset_.GetY() - viewPort_.Height()); + moveStatus_.second = false; + } + // Get main direction scrollable extent. + bool isScrollable = CalculateMainScrollExtent(itemSize); + scrollBarExtent_ = mainScrollExtent_; + if (isScrollable) { + ValidateOffset(SCROLL_FROM_NONE); + } else { + currentOffset_ = Offset::Zero(); + } + child->SetPosition(Offset::Zero() - currentOffset_ + paddingOffset); + LOGD("child position:%{public}s", child->GetPosition().ToString().c_str()); + + currentBottomOffset_ = axis_ == Axis::VERTICAL ? currentOffset_ + Offset(0.0, viewPort_.Height()) + : currentOffset_ + Offset(viewPort_.Width(), 0.0); +} + +void RenderSingleChildScroll::PostForceMakeNeedLayout() +{ + auto context = context_.Upgrade(); + if (!context) { + return; + } + context->GetTaskExecutor()->PostTask( + [weak = AceType::WeakClaim(this)] { + auto scroll = weak.Upgrade(); + if (!scroll) { + return; + } + scroll->MarkNeedLayout(false, true); + }, + TaskExecutor::TaskType::UI); +} + +void RenderSingleChildScroll::UpdateAccessibilityAttr() +{ + auto refPtr = accessibilityNode_.Upgrade(); + if (!refPtr) { + LOGW("Get accessibility node failed."); + return; + } + refPtr->SetScrollableState(true); + refPtr->SetActionScrollForward([weakScroll = AceType::WeakClaim(this)]() { + auto scroll = weakScroll.Upgrade(); + if (scroll) { + LOGI("Trigger ScrollForward by Accessibility."); + scroll->ScrollPage(false, true); + return true; + } + return false; + }); + refPtr->SetActionScrollBackward([weakScroll = AceType::WeakClaim(this)]() { + auto scroll = weakScroll.Upgrade(); + if (scroll) { + LOGI("Trigger ScrollBackward by Accessibility."); + scroll->ScrollPage(true, true); + return true; + } + return false; + }); +} + +void RenderSingleChildScroll::AdjustTouchRestrict(TouchRestrict& touchRestrict) +{ + // If edge effect is setted, do not adjust touch restrict. + if (isEffectSetted_) { + return; + } + + if (currentOffset_.IsZero()) { + if (axis_ == Axis::VERTICAL) { + touchRestrict.forbiddenType |= TouchRestrict::SWIPE_DOWN; + } else { + touchRestrict.forbiddenType |= TouchRestrict::SWIPE_RIGHT; + } + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/scroll/render_single_child_scroll.h b/frameworks/core/components/scroll/render_single_child_scroll.h new file mode 100644 index 00000000..cfc0e3e5 --- /dev/null +++ b/frameworks/core/components/scroll/render_single_child_scroll.h @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SCROLL_RENDER_SINGLE_CHILD_SCROLL_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SCROLL_RENDER_SINGLE_CHILD_SCROLL_H + +#include "core/components/scroll/render_scroll.h" + +namespace OHOS::Ace { + +class RenderSingleChildScroll : public RenderScroll { + DECLARE_ACE_TYPE(RenderSingleChildScroll, RenderScroll); + +public: + static RefPtr Create(); + + void UpdateTouchRect() override; + void MoveChildToViewPort(const Size& size, const Offset& childOffset, const Offset& effectOffset); + +protected: + void PerformLayout() override; + void Update(const RefPtr& component) override; + void AdjustTouchRestrict(TouchRestrict& touchRestrict) override; + +private: + LayoutParam MakeInnerLayoutParam() const; + bool CalculateMainScrollExtent(const Size& itemSize); + void UpdateAccessibilityAttr(); + void PostForceMakeNeedLayout(); + + bool isEffectSetted_ = false; + double childLastMainSize_ = -std::numeric_limits::max(); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SCROLL_RENDER_SINGLE_CHILD_SCROLL_H diff --git a/frameworks/core/components/scroll/scroll_bar_controller.cpp b/frameworks/core/components/scroll/scroll_bar_controller.cpp new file mode 100644 index 00000000..5eba9582 --- /dev/null +++ b/frameworks/core/components/scroll/scroll_bar_controller.cpp @@ -0,0 +1,265 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/scroll/scroll_bar_controller.h" + +#include "base/log/log.h" +#include "core/animation/curve_animation.h" +#include "core/animation/keyframe.h" +#include "core/animation/keyframe_animation.h" +#include "core/common/vibrator/vibrator_proxy.h" +#include "core/components/scroll/render_scroll.h" +#include "core/components/scroll/scrollable.h" + +namespace OHOS::Ace { +namespace { + +constexpr int32_t STOP_DURATION = 2000; // 2000ms +constexpr double FRICTION = 1.0; +constexpr double MIN_VELOCITY = -10000.0; +constexpr double MAX_VELOCITY = 10000.0; + +constexpr double KEYTIME_START = 0.0; +constexpr double KEYTIME_MIDDLE = 0.7; +constexpr double KEYTIME_END = 1.0; +constexpr int32_t VIBRATE_DURATION = 100; // 100ms +constexpr int32_t BAR_EXPAND_DURATION = 150; // 150ms, scroll bar width expands from 4dp to 8dp +constexpr int32_t BAR_SHRINK_DURATION = 250; // 250ms, scroll bar width shrinks from 4dp to 8dp + +} // namespace + +void ScrollBarController::Initialize(const WeakPtr& context) +{ + context_ = context; + dragRecognizer_ = AceType::MakeRefPtr(); + dragRecognizer_->SetOnDragUpdate([weakBar = AceType::WeakClaim(this)](const DragUpdateInfo& info) { + auto scrollBar = weakBar.Upgrade(); + if (scrollBar) { + scrollBar->HandleDragUpdate(info); + } + }); + dragRecognizer_->SetOnDragEnd([weakBar = AceType::WeakClaim(this)](const DragEndInfo& info) { + auto scrollBar = weakBar.Upgrade(); + if (scrollBar) { + scrollBar->HandleDragEnd(info); + } + }); + // use RawRecognizer to receive next touch down event to stop animation. + rawRecognizer_ = AceType::MakeRefPtr(); + rawRecognizer_->SetOnTouchDown([weakBar = AceType::WeakClaim(this)](const TouchEventInfo&) { + auto scrollBar = weakBar.Upgrade(); + if (scrollBar) { + scrollBar->HandleTouchDown(); + } + }); + rawRecognizer_->SetOnTouchUp([weakBar = AceType::WeakClaim(this)](const TouchEventInfo&) { + auto scrollBar = weakBar.Upgrade(); + if (scrollBar) { + scrollBar->HandleTouchUp(); + } + }); + + touchAnimator_ = AceType::MakeRefPtr(context); + dragEndAnimator_ = AceType::MakeRefPtr(context); + scrollEndAnimator_ = AceType::MakeRefPtr(context); + + // when touching down, it need vibrate, last 100ms + auto vibratorContext = context.Upgrade(); + if (!vibrator_ && vibratorContext) { + vibrator_ = VibratorProxy::GetInstance().GetVibrator(vibratorContext->GetTaskExecutor()); + } +} + +void ScrollBarController::HandleTouchDown() +{ + LOGI("handle touch down"); + auto scroll = AceType::DynamicCast(scroll_.Upgrade()); + if (scroll) { + isActive_ = true; + if (vibrator_) { + vibrator_->Vibrate(VIBRATE_DURATION); + } + if (touchDownCallback_) { + if (!touchAnimator_->IsStopped()) { + touchAnimator_->Stop(); + } + touchAnimator_->ClearInterpolators(); + auto activeWidth = activeWidth_.Value(); + auto inactiveWidth = inactiveWidth_.Value(); + auto pipeline = context_.Upgrade(); + if (pipeline) { + activeWidth = pipeline->NormalizeToPx(activeWidth_); + inactiveWidth = pipeline->NormalizeToPx(inactiveWidth_); + } + + auto animation = AceType::MakeRefPtr>(inactiveWidth, activeWidth, Curves::SHARP); + animation->AddListener([weakBar = AceType::WeakClaim(this)](double value) { + auto scrollBar = weakBar.Upgrade(); + if (scrollBar && scrollBar->touchDownCallback_) { + scrollBar->touchDownCallback_(value); + scrollBar->MarkScrollRender(); + } + }); + touchAnimator_->AddInterpolator(animation); + touchAnimator_->SetDuration(BAR_EXPAND_DURATION); + touchAnimator_->Play(); + if (barEndCallback_) { + barEndCallback_(UINT8_MAX); + } + } + } +} + +void ScrollBarController::MarkScrollRender() +{ + auto scroll = AceType::DynamicCast(scroll_.Upgrade()); + if (scroll) { + scroll->MarkNeedRender(); + } +} + +void ScrollBarController::HandleTouchUp() +{ + LOGI("handle touch up"); + if (touchUpCallback_) { + if (!touchAnimator_->IsStopped()) { + touchAnimator_->Stop(); + } + touchAnimator_->ClearInterpolators(); + auto activeWidth = activeWidth_.Value(); + auto inactiveWidth = inactiveWidth_.Value(); + auto pipeline = context_.Upgrade(); + if (pipeline) { + activeWidth = pipeline->NormalizeToPx(activeWidth_); + inactiveWidth = pipeline->NormalizeToPx(inactiveWidth_); + } + + auto animation = AceType::MakeRefPtr>(activeWidth, inactiveWidth, Curves::SHARP); + animation->AddListener([weakBar = AceType::WeakClaim(this)](double value) { + auto scrollBar = weakBar.Upgrade(); + if (scrollBar && scrollBar->touchUpCallback_) { + scrollBar->touchUpCallback_(value); + } + }); + touchAnimator_->AddInterpolator(animation); + touchAnimator_->SetDuration(BAR_SHRINK_DURATION); + touchAnimator_->Play(); + } + if (isActive_) { + HandleScrollBarEnd(); + } + isActive_ = false; +} + +void ScrollBarController::HandleDragUpdate(const DragUpdateInfo& info) +{ + LOGD("handle drag update, offset is %{public}lf", info.GetMainDelta()); + UpdateScrollPosition(-info.GetMainDelta(), SCROLL_FROM_BAR); +} + +void ScrollBarController::HandleDragEnd(const DragEndInfo& info) +{ + LOGI("handle drag end, position is %{public}lf and %{public}lf, velocity is %{public}lf", + info.GetGlobalLocation().GetX(), info.GetGlobalLocation().GetY(), info.GetMainVelocity()); + if (scrollEndCallback_) { + scrollEndCallback_(); + } + double mainPosition = info.GetGlobalLocation().GetY(); + double correctVelocity = std::clamp(info.GetMainVelocity(), MIN_VELOCITY, MAX_VELOCITY); + if (dragEndMotion_) { + dragEndMotion_->Reset(FRICTION, mainPosition, correctVelocity); + } else { + dragEndMotion_ = AceType::MakeRefPtr(FRICTION, mainPosition, correctVelocity); + LOGD("Mainposition is %{public}lf, velocity is %{public}lf", mainPosition, correctVelocity); + dragEndMotion_->AddListener([weakScroll = AceType::WeakClaim(this)](double value) { + auto scrollBarController = weakScroll.Upgrade(); + if (scrollBarController) { + scrollBarController->ProcessScrollMotion(value); + } + }); + } + + currentPos_ = mainPosition; + dragEndAnimator_->ClearStopListeners(); + dragEndAnimator_->PlayMotion(dragEndMotion_); +} + +void ScrollBarController::ProcessScrollMotion(double position) +{ + if ((NearEqual(currentPos_, position))) { + UpdateScrollPosition(0.0, SCROLL_FROM_ANIMATION); + } else { + // UpdateScrollPosition return false, means reach to scroll limit. + if (!UpdateScrollPosition(currentPos_ - position, SCROLL_FROM_BAR)) { + auto scroll = AceType::DynamicCast(scroll_.Upgrade()); + if (scroll) { + scroll->HandleScrollOverByBar(dragEndMotion_->GetCurrentVelocity()); + } + dragEndAnimator_->Stop(); + } + } + currentPos_ = position; +} + +bool ScrollBarController::UpdateScrollPosition(const double offset, int32_t source) const +{ + bool ret = true; + if (callback_) { + auto scroll = AceType::DynamicCast(scroll_.Upgrade()); + if (scroll && !NearZero(scroll->GetEstimatedHeight())) { + double height = scroll->GetLayoutSize().Height(); + double estimatedHeight = scroll->GetEstimatedHeight(); + double activeHeight = height * height / estimatedHeight; + if (!NearEqual(height, activeHeight)) { + double value = offset * (estimatedHeight - height) / (height - activeHeight); + ret = callback_(value, source); + } + } + } + return ret; +} + +void ScrollBarController::HandleScrollBarEnd() +{ + isActive_ = false; + if (scrollEndAnimator_ && barEndCallback_) { + if (!scrollEndAnimator_->IsStopped()) { + scrollEndAnimator_->Stop(); + } + scrollEndAnimator_->ClearInterpolators(); + + auto hiddenStartKeyframe = AceType::MakeRefPtr>(KEYTIME_START, UINT8_MAX); + auto hiddenMiddleKeyframe = AceType::MakeRefPtr>(KEYTIME_MIDDLE, UINT8_MAX); + auto hiddenEndKeyframe = AceType::MakeRefPtr>(KEYTIME_END, 0); + hiddenMiddleKeyframe->SetCurve(Curves::LINEAR); + hiddenEndKeyframe->SetCurve(Curves::FRICTION); + + auto animation = AceType::MakeRefPtr>(); + animation->AddKeyframe(hiddenStartKeyframe); + animation->AddKeyframe(hiddenMiddleKeyframe); + animation->AddKeyframe(hiddenEndKeyframe); + animation->AddListener([weakBar = AceType::WeakClaim(this)](int32_t value) { + auto scrollBar = weakBar.Upgrade(); + if (scrollBar && scrollBar->barEndCallback_) { + scrollBar->barEndCallback_(value); + } + }); + scrollEndAnimator_->AddInterpolator(animation); + scrollEndAnimator_->SetDuration(STOP_DURATION); + scrollEndAnimator_->Play(); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/scroll/scroll_bar_controller.h b/frameworks/core/components/scroll/scroll_bar_controller.h new file mode 100644 index 00000000..64583e54 --- /dev/null +++ b/frameworks/core/components/scroll/scroll_bar_controller.h @@ -0,0 +1,167 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SCROLL_SCROLL_BAR_CONTROLLER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SCROLL_SCROLL_BAR_CONTROLLER_H + +#include + +#include "core/animation/animator.h" +#include "core/animation/friction_motion.h" +#include "core/animation/scroll_motion.h" +#include "core/common/vibrator/vibrator.h" +#include "core/gestures/drag_recognizer.h" +#include "core/gestures/raw_recognizer.h" +#include "core/gestures/touch_event.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +using ScrollBarPositionCallback = std::function; +using ScrollBarEndCallback = std::function; +using ScrollBarEventCallback = std::function; +using ScrollBarTouchEventCallback = std::function; + +class ScrollBarController : public TouchEventTarget { + DECLARE_ACE_TYPE(ScrollBarController, TouchEventTarget); + +public: + ScrollBarController() = default; + ~ScrollBarController() override = default; + + void Initialize(const WeakPtr& context); + void HandleScrollBarEnd(); + void HandleTouchDown(); + void HandleTouchUp(); + void HandleDragUpdate(const DragUpdateInfo& info); + void HandleDragEnd(const DragEndInfo& info); + void MarkScrollRender(); + + bool DispatchEvent(const TouchPoint& point) override + { + return true; + } + bool HandleEvent(const TouchPoint& event) override + { + if (dragRecognizer_) { + dragRecognizer_->HandleEvent(event); + } + if (rawRecognizer_) { + return rawRecognizer_->HandleEvent(event); + } + return true; + } + + void SetCallback(const ScrollBarPositionCallback& callback) + { + callback_ = callback; + } + + void SetBarEndCallback(const ScrollBarEndCallback& barEndCallback) + { + barEndCallback_ = barEndCallback; + } + + void SetCoordinateOffset(const Offset& offset) const + { + if (dragRecognizer_) { + dragRecognizer_->SetCoordinateOffset(offset); + } + if (rawRecognizer_) { + rawRecognizer_->SetCoordinateOffset(offset); + } + } + + void SetScrollEndCallback(const ScrollBarEventCallback& scrollEndCallback) + { + scrollEndCallback_ = scrollEndCallback; + } + + void SetTouchUpCallback(const ScrollBarTouchEventCallback& touchUpCallback) + { + touchUpCallback_ = touchUpCallback; + } + + void SetTouchDownCallback(const ScrollBarTouchEventCallback& touchDownCallback) + { + touchDownCallback_ = touchDownCallback; + } + + void SetScrollNode(const WeakPtr& scroll) + { + scroll_ = scroll; + } + + bool IsActive() + { + return isActive_; + } + + void SetActive(bool isActive) + { + isActive_ = isActive; + } + + void SetInactiveWidth(const Dimension& inactiveWidth) + { + inactiveWidth_ = inactiveWidth; + } + + void SetActiveWidth(const Dimension& activeWidth) + { + activeWidth_ = activeWidth; + } + + const Dimension& GetInactiveWidth() const + { + return inactiveWidth_; + } + + const Dimension& GetActiveWidth() const + { + return activeWidth_; + } + +private: + bool UpdateScrollPosition(double offset, int32_t source) const; + + void ProcessScrollMotion(double position); + + WeakPtr scroll_; + ScrollBarPositionCallback callback_; + ScrollBarEventCallback scrollEndCallback_; + ScrollBarEndCallback barEndCallback_; + ScrollBarTouchEventCallback touchUpCallback_; + ScrollBarTouchEventCallback touchDownCallback_; + + RefPtr dragRecognizer_; + RefPtr rawRecognizer_; + + RefPtr scrollEndAnimator_; + RefPtr touchAnimator_; + RefPtr dragEndAnimator_; + RefPtr dragEndMotion_; + RefPtr vibrator_; + WeakPtr context_; + + bool isActive_ = false; + double currentPos_ = 0.0; + Dimension activeWidth_; + Dimension inactiveWidth_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SCROLL_SCROLL_BAR_CONTROLLER_H diff --git a/frameworks/core/components/scroll/scroll_bar_theme.h b/frameworks/core/components/scroll/scroll_bar_theme.h new file mode 100644 index 00000000..2b154588 --- /dev/null +++ b/frameworks/core/components/scroll/scroll_bar_theme.h @@ -0,0 +1,129 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SCROLL_SCROLL_BAR_THEME_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SCROLL_SCROLL_BAR_THEME_H + +#include "core/components/common/properties/scroll_bar.h" +#include "core/components/theme/theme.h" +#include "core/components/theme/theme_constants.h" + +namespace OHOS::Ace { + +/** + * ScrollBarTheme defines styles of scrollBar. ScrollBarTheme should be built + * using ScrollBarTheme::Builder. + */ +class ScrollBarTheme : public virtual Theme { + DECLARE_ACE_TYPE(ScrollBarTheme, Theme); + +public: + class Builder { + public: + Builder() = default; + ~Builder() = default; + + RefPtr Build(const RefPtr& themeConstants) const + { + RefPtr theme = AceType::Claim(new ScrollBarTheme()); + if (!themeConstants) { + return theme; + } + theme->shapeMode_ = ShapeMode(themeConstants->GetInt(THEME_SCROLL_BAR_SHAPE_MODE)); + theme->normalWidth_ = themeConstants->GetDimension(THEME_SCROLL_BAR_NORMAL_WIDTH); + theme->activeWidth_ = themeConstants->GetDimension(THEME_SCROLL_BAR_ACTIVE_WIDTH); + theme->minHeight_ = themeConstants->GetDimension(THEME_SCROLL_BAR_MIN_HEIGHT); + theme->minDynamicHeight_ = themeConstants->GetDimension(THEME_SCROLL_BAR_MIN_DYNAMIC_HEIGHT); + theme->reservedHeight_ = themeConstants->GetDimension(THEME_SCROLL_BAR_RESERVED_HEIGHT); + theme->touchWidth_ = themeConstants->GetDimension(THEME_SCROLL_BAR_TOUCH_WIDTH); + theme->backgroundColor_ = themeConstants->GetColor(THEME_SCROLL_BAR_BACKGROUND_COLOR); + theme->foregroundColor_ = themeConstants->GetColor(THEME_SCROLL_BAR_FOREGROUND_COLOR); + Dimension paddingRight = themeConstants->GetDimension(THEME_SCROLL_BAR_PADDING_RIGHT); + theme->padding_ = Edge(0.0, 0.0, paddingRight.Value(), 0.0, paddingRight.Unit()); + return theme; + } + }; + + ~ScrollBarTheme() override = default; + + const Dimension& GetNormalWidth() const + { + return normalWidth_; + } + + const Dimension& GetActiveWidth() const + { + return activeWidth_; + } + + const Dimension& GetMinHeight() const + { + return minHeight_; + } + + const Dimension& GetMinDynamicHeight() const + { + return minDynamicHeight_; + } + + const Dimension& GetReservedHeight() const + { + return reservedHeight_; + } + + const Dimension& GetTouchWidth() const + { + return touchWidth_; + } + + const Color& GetBackgroundColor() const + { + return backgroundColor_; + } + + const Color& GetForegroundColor() const + { + return foregroundColor_; + } + + ShapeMode GetShapeMode() const + { + return shapeMode_; + } + + const Edge& GetPadding() const + { + return padding_; + } + +protected: + ScrollBarTheme() = default; + +private: + ShapeMode shapeMode_ = ShapeMode::DEFAULT; + Dimension normalWidth_; + Dimension activeWidth_; + Dimension minHeight_; + Dimension minDynamicHeight_; + Dimension reservedHeight_; + Dimension touchWidth_; + Color backgroundColor_; + Color foregroundColor_; + Edge padding_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SCROLL_SCROLL_BAR_THEME_H diff --git a/frameworks/core/components/scroll/scroll_component.cpp b/frameworks/core/components/scroll/scroll_component.cpp new file mode 100644 index 00000000..03378b5e --- /dev/null +++ b/frameworks/core/components/scroll/scroll_component.cpp @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/scroll/scroll_component.h" + +#include "core/components/scroll/render_single_child_scroll.h" +#include "core/components/scroll/scroll_element.h" + +namespace OHOS::Ace { + +ScrollComponent::ScrollComponent(const RefPtr& child) : SoleChildComponent(child) {} + +RefPtr ScrollComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +RefPtr ScrollComponent::CreateRenderNode() +{ + return RenderSingleChildScroll::Create(); +} + +void ScrollComponent::InitScrollBar(const RefPtr& theme, const std::pair& scrollBarColor, + const std::pair& scrollBarWidth, EdgeEffect edgeEffect) +{ + if (!positionController_) { + positionController_ = AceType::MakeRefPtr(); + } + if (edgeEffect == EdgeEffect::SPRING) { + SetScrollEffect(AceType::MakeRefPtr()); + } else if (edgeEffect == EdgeEffect::FADE) { + SetScrollEffect(AceType::MakeRefPtr(Color::GRAY)); + } else { + SetScrollEffect(AceType::MakeRefPtr(EdgeEffect::NONE)); + } + + if (!theme) { + return; + } + + scrollBar_ = AceType::MakeRefPtr(DisplayMode::AUTO, theme->GetShapeMode()); + if (scrollBarWidth.first) { + const auto& width = scrollBarWidth.second; + scrollBar_->SetInactiveWidth(width); + scrollBar_->SetNormalWidth(width); + scrollBar_->SetActiveWidth(width); + scrollBar_->SetTouchWidth(width); + } else { + scrollBar_->SetInactiveWidth(theme->GetNormalWidth()); + scrollBar_->SetNormalWidth(theme->GetNormalWidth()); + scrollBar_->SetActiveWidth(theme->GetActiveWidth()); + scrollBar_->SetTouchWidth(theme->GetTouchWidth()); + } + scrollBar_->SetReservedHeight(theme->GetReservedHeight()); + scrollBar_->SetMinHeight(theme->GetMinHeight()); + scrollBar_->SetMinDynamicHeight(theme->GetMinDynamicHeight()); + scrollBar_->SetBackgroundColor(theme->GetBackgroundColor()); + scrollBar_->SetForegroundColor(scrollBarColor.first ? scrollBarColor.second : theme->GetForegroundColor()); + scrollBar_->SetPadding(theme->GetPadding()); + scrollBar_->SetScrollable(true); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/scroll/scroll_component.h b/frameworks/core/components/scroll/scroll_component.h new file mode 100644 index 00000000..2dbe336f --- /dev/null +++ b/frameworks/core/components/scroll/scroll_component.h @@ -0,0 +1,143 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SCROLL_SCROLL_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SCROLL_SCROLL_COMPONENT_H + +#include "base/geometry/axis.h" +#include "core/components/common/properties/edge.h" +#include "core/components/common/properties/scroll_bar.h" +#include "core/components/scroll/scroll_bar_theme.h" +#include "core/components/scroll/scroll_edge_effect.h" +#include "core/components/scroll/scroll_fade_effect.h" +#include "core/components/scroll/scroll_position_controller.h" +#include "core/components/scroll/scroll_spring_effect.h" +#include "core/pipeline/base/element.h" +#include "core/pipeline/base/render_node.h" +#include "core/pipeline/base/sole_child_component.h" + +namespace OHOS::Ace { + +class ScrollComponent : public SoleChildComponent { + DECLARE_ACE_TYPE(ScrollComponent, SoleChildComponent); + +public: + explicit ScrollComponent(const RefPtr& child); + ~ScrollComponent() override = default; + + RefPtr CreateElement() override; + RefPtr CreateRenderNode() override; + + void InitScrollBar(const RefPtr& theme, const std::pair& scrollBarColor, + const std::pair& scrollBarWidth, EdgeEffect edgeEffect); + + void SetAxisDirection(Axis axisDirection) + { + if (axisDirection == Axis::FREE) { + LOGE("Invalid direction: %{public}d", axisDirection); + return; + } + axisDirection_ = axisDirection; + } + + Axis GetAxisDirection() const + { + return axisDirection_; + } + + void SetEnable(bool enable) + { + enable_ = enable; + } + + bool GetEnable() const + { + return enable_; + } + + void SetPadding(const Edge& padding) + { + if (padding.IsValid()) { + padding_ = padding; + } else { + LOGE("Invalid padding input."); + } + } + + const Edge& GetPadding() const + { + return padding_; + } + + void SetScrollPositionController(const RefPtr& positionController) + { + positionController_ = positionController; + } + + RefPtr GetScrollPositionController() const + { + return positionController_; + } + + void SetScrollPage(bool scrollPage) + { + scrollPage_ = scrollPage; + } + + bool GetScrollPage() const + { + return scrollPage_; + } + + void SetScrollBar(const RefPtr& scrollBar) + { + scrollBar_ = scrollBar; + } + + RefPtr GetScrollBar() const + { + return scrollBar_; + } + + const RefPtr& GetScrollEffect() const + { + return scrollEffect_; + } + + void SetScrollEffect(const RefPtr& scrollEffect) + { + isEffectSetted_ = true; + scrollEffect_ = scrollEffect; + } + + bool IsEffectSetted() const + { + return isEffectSetted_; + } + +private: + Edge padding_; + Axis axisDirection_ = Axis::VERTICAL; + RefPtr positionController_; + bool scrollPage_ = false; + RefPtr scrollBar_; + bool enable_ = true; + bool isEffectSetted_ = false; + RefPtr scrollEffect_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SCROLL_SCROLL_COMPONENT_H diff --git a/frameworks/core/components/scroll/scroll_edge_effect.h b/frameworks/core/components/scroll/scroll_edge_effect.h new file mode 100644 index 00000000..3832e157 --- /dev/null +++ b/frameworks/core/components/scroll/scroll_edge_effect.h @@ -0,0 +1,130 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SCROLL_SCROLL_EDGE_EFFECT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SCROLL_SCROLL_EDGE_EFFECT_H + +#include + +#include "base/memory/ace_type.h" +#include "core/components/common/layout/constants.h" +#include "core/components/common/properties/color.h" +#include "core/components/scroll/scrollable.h" + +namespace OHOS::Ace { + +using EdgeCallback = std::function; + +class ScrollEdgeEffect : public AceType { + DECLARE_ACE_TYPE(ScrollEdgeEffect, AceType); + +public: + explicit ScrollEdgeEffect(EdgeEffect edgeEffect) + { + edgeEffect_ = edgeEffect; + } + + ~ScrollEdgeEffect() override = default; + + EdgeEffect GetEdgeEffect() const + { + return edgeEffect_; + } + + // support layout out of boundary fill with blank + bool IsRestrictBoundary() const + { + return edgeEffect_ != EdgeEffect::SPRING; + } + + bool IsFadeEffect() const + { + return edgeEffect_ == EdgeEffect::FADE; + } + + bool IsSpringEffect() const + { + return edgeEffect_ == EdgeEffect::SPRING; + } + + void SetScrollable(const RefPtr& scrollable) + { + scrollable_ = scrollable; + } + + void SetScrollNode(const WeakPtr& scroll) + { + scroll_ = scroll; + } + + void SetCurrentPositionCallback(const EdgeCallback& currentPositionCallback) + { + currentPositionCallback_ = currentPositionCallback; + } + + void SetLeadingCallback(const EdgeCallback& leadingCallback) + { + leadingCallback_ = leadingCallback; + } + + void SetTrailingCallback(const EdgeCallback& trainingCallback) + { + trailingCallback_ = trainingCallback; + } + + void SetInitLeadingCallback(const EdgeCallback& initLeadingCallback) + { + initLeadingCallback_ = initLeadingCallback; + } + + void SetInitTrailingCallback(const EdgeCallback& initTrainingCallback) + { + initTrailingCallback_ = initTrainingCallback; + } + + // common use + virtual void InitialEdgeEffect() {} + + // fade effect use + virtual double CalculateOverScroll(double oldPosition, bool isReachMax) + { + return 0.0; + } + + virtual void HandleOverScroll(Axis axis, double overScroll, const Size& viewPort) {} + + virtual void Paint(RenderContext& context, const Size& viewPort, const Offset& offset) {} + + // spring effect use + virtual void RegisterSpringCallback() {} + + virtual void ProcessScrollOver(double velocity) {} + +protected: + RefPtr scrollable_; + WeakPtr scroll_; + EdgeCallback currentPositionCallback_; // get current position + EdgeCallback leadingCallback_; // get stable min extent + EdgeCallback trailingCallback_; // get stable max extent + EdgeCallback initLeadingCallback_; // get current min extent + EdgeCallback initTrailingCallback_; // get current max extent + +private: + EdgeEffect edgeEffect_ = EdgeEffect::SPRING; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SCROLL_SCROLL_EDGE_EFFECT_H diff --git a/frameworks/core/components/scroll/scroll_element.cpp b/frameworks/core/components/scroll/scroll_element.cpp new file mode 100644 index 00000000..9fece32e --- /dev/null +++ b/frameworks/core/components/scroll/scroll_element.cpp @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/scroll/scroll_element.h" + +#include "core/components/scroll/render_scroll.h" + +namespace OHOS::Ace { + +void ScrollElement::PerformBuild() +{ + RefPtr scroll = AceType::DynamicCast(component_); + if (scroll) { + const auto& child = children_.empty() ? nullptr : children_.front(); + UpdateChild(child, scroll->GetChild()); + } + + if (GetRenderNode()) { + GetRenderNode()->MarkNeedLayout(); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/scroll/scroll_element.h b/frameworks/core/components/scroll/scroll_element.h new file mode 100644 index 00000000..dfe9d632 --- /dev/null +++ b/frameworks/core/components/scroll/scroll_element.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SCROLL_SCROLL_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SCROLL_SCROLL_ELEMENT_H + +#include "core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +class ScrollElement : public RenderElement { + DECLARE_ACE_TYPE(ScrollElement, RenderElement); + +public: + void PerformBuild() override; + +private: + RefPtr child_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SCROLL_SCROLL_ELEMENT_H diff --git a/frameworks/core/components/scroll/scroll_fade_controller.cpp b/frameworks/core/components/scroll/scroll_fade_controller.cpp new file mode 100644 index 00000000..3e6a87de --- /dev/null +++ b/frameworks/core/components/scroll/scroll_fade_controller.cpp @@ -0,0 +1,197 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/scroll/scroll_fade_controller.h" + +namespace OHOS::Ace { +namespace { + +constexpr int32_t RECEDE_TIME = 600; // milliseconds +constexpr int32_t PULL_TIME = 167; // milliseconds +constexpr int32_t PULL_HOLD_TIME = 167; // milliseconds +constexpr int32_t PULL_RECEDE_TIME = 1000; // milliseconds +constexpr double MIN_VELOCITY = 100.0; +constexpr double MAX_VELOCITY = 10000.0; +constexpr double MIN_OPACITY = 0.15; +constexpr double MAX_OPACITY = 0.5; +constexpr double DEFAULT_OPACITY = 0.3; +constexpr double MAX_SCALE_SIZE = 1.0; +constexpr double VELOCITY_FACTOR = 0.00006; +constexpr double WIDTH_TO_HEIGHT_FACTOR = 0.20096; // (3.0 / 4.0) * (2.0 - std::sqrt(3)); +constexpr double SCALE_SIZE_BASE = 0.025; +constexpr double SCALE_VELOCITY_FACTOR = 7.5e-7; +constexpr double DURATION_BASE = 0.15; +constexpr double DURATION_VELOCITY_FACTOR = 0.02; +constexpr double OVER_DISTANCE_SCALE = 200.0; +constexpr double PULL_OPACITY_FACTOR = 3.2; +constexpr double SCALE_CALCULATOR_FACTOR = 0.7; + +} // namespace + +ScrollFadeController::ScrollFadeController(const WeakPtr& context) : context_(context) +{ + Initialize(); +} + +ScrollFadeController::~ScrollFadeController() +{ + // If animation still runs, force stop it. + if (controller_ && !controller_->IsStopped()) { + controller_->Stop(); + } + pullTask_.Cancel(); +} + +void ScrollFadeController::Initialize() +{ + decele_ = AceType::MakeRefPtr>(0.0, 1.0, Curves::DECELE); + auto weak = AceType::WeakClaim(this); + decele_->AddListener([weak](double value) { + auto controller = weak.Upgrade(); + if (controller) { + controller->DecelerateListener(value); + } + }); + + controller_ = AceType::MakeRefPtr(context_); + controller_->AddInterpolator(decele_); + controller_->AddStopListener([weak]() { + auto controller = weak.Upgrade(); + if (controller) { + controller->ChangeState(); + } + }); +} + +void ScrollFadeController::DecelerateListener(double value) +{ + opacity_ = opacityFloor_ + value * (opacityCeil_ - opacityFloor_); + scaleSize_ = scaleSizeFloor_ + value * (scaleSizeCeil_ - scaleSizeFloor_); + if (callback_) { + callback_(opacity_, scaleSize_); + } +} + +void ScrollFadeController::ProcessAbsorb(double velocity) +{ + LOGD("ProcessAbsorb enter: velocity(%{public}lf)", velocity); + if (velocity < 0.0 || state_ == OverScrollState::PULL) { + return; + } + pullTask_.Cancel(); + velocity = std::clamp(velocity, MIN_VELOCITY, MAX_VELOCITY); + opacityFloor_ = state_ == OverScrollState::IDLE ? DEFAULT_OPACITY : opacity_; + opacityCeil_ = std::clamp(velocity * VELOCITY_FACTOR, opacityFloor_, MAX_OPACITY); + scaleSizeFloor_ = scaleSize_; + scaleSizeCeil_ = std::min(SCALE_SIZE_BASE + SCALE_VELOCITY_FACTOR * velocity * velocity, MAX_SCALE_SIZE); + if (controller_) { + controller_->SetDuration(std::round(DURATION_BASE + velocity * DURATION_VELOCITY_FACTOR)); + controller_->Play(); + state_ = OverScrollState::ABSORB; + } +} + +void ScrollFadeController::ProcessPull(double overDistance, double mainAxisExtent, double crossAxisExtent) +{ + LOGD("ProcessPull enter:overDistance(%{public}lf), mainAxisExtent(%{public}lf), crossAxisExtent(%{public}lf)", + overDistance, mainAxisExtent, crossAxisExtent); + pullTask_.Cancel(); + opacityFloor_ = std::min(MIN_OPACITY + opacity_, DEFAULT_OPACITY); + opacityCeil_ = NearZero(mainAxisExtent) + ? MAX_OPACITY + : std::min(opacity_ + overDistance / mainAxisExtent * PULL_OPACITY_FACTOR, MAX_OPACITY); + double height = std::min(mainAxisExtent, crossAxisExtent * WIDTH_TO_HEIGHT_FACTOR); + pullDistance_ += overDistance / OVER_DISTANCE_SCALE; + scaleSizeFloor_ = scaleSize_; + double scaleByPullDistance = SCALE_CALCULATOR_FACTOR * std::sqrt(pullDistance_ * height); + scaleSizeCeil_ = NearZero(scaleSize_) ? MAX_SCALE_SIZE + : std::max(MAX_SCALE_SIZE - MAX_SCALE_SIZE / scaleByPullDistance, scaleSize_); + LOGD("opacityFloor_(%{public}lf), opacityCeil_(%{public}lf)", opacityFloor_, opacityCeil_); + LOGD("scaleSizeFloor_(%{public}lf), scaleSizeCeil_(%{public}lf)", scaleSizeFloor_, scaleSizeCeil_); + if (controller_) { + controller_->SetDuration(PULL_TIME); + if (state_ != OverScrollState::PULL) { + controller_->Play(); + state_ = OverScrollState::PULL; + } else { + controller_->Stop(); + controller_->Play(); + } + } + + SchedulePullHoldTask(); +} + +void ScrollFadeController::ProcessRecede(int32_t duration) +{ + LOGD("ProcessRecede enter:duration(%{public}d)", duration); + if (state_ == OverScrollState::RECEDE || state_ == OverScrollState::IDLE) { + LOGD("current state do not support recede:state_(%{public}d)", state_); + return; + } + pullTask_.Cancel(); + opacityFloor_ = opacity_; + opacityCeil_ = 0.0; + scaleSizeFloor_ = scaleSize_; + scaleSizeCeil_ = 0.0; + if (controller_) { + controller_->SetDuration(duration); + controller_->Play(); + state_ = OverScrollState::RECEDE; + } +} + +void ScrollFadeController::ChangeState() +{ + LOGD("ChangeState enter: old(%{public}d)", state_); + switch (state_) { + case OverScrollState::RECEDE: + state_ = OverScrollState::IDLE; + pullDistance_ = 0.0; + break; + case OverScrollState::ABSORB: + ProcessRecede(RECEDE_TIME); + break; + case OverScrollState::PULL: + case OverScrollState::IDLE: + break; + default: + break; + } +} + +void ScrollFadeController::SchedulePullHoldTask() +{ + const auto context = context_.Upgrade(); + if (!context) { + LOGW("No context exists."); + return; + } + + if (!context->GetTaskExecutor()) { + LOGW("context has no task executor."); + return; + } + + pullTask_.Reset([weak = WeakClaim(this)] { + auto client = weak.Upgrade(); + if (client) { + client->ProcessRecede(PULL_RECEDE_TIME); + } + }); + context->GetTaskExecutor()->PostDelayedTask(pullTask_, TaskExecutor::TaskType::UI, PULL_HOLD_TIME); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/scroll/scroll_fade_controller.h b/frameworks/core/components/scroll/scroll_fade_controller.h new file mode 100644 index 00000000..b6ca1d1a --- /dev/null +++ b/frameworks/core/components/scroll/scroll_fade_controller.h @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SCROLL_SCROLL_FADE_CONTROLLER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SCROLL_SCROLL_FADE_CONTROLLER_H + +#include + +#include "base/geometry/axis.h" +#include "core/animation/animation.h" +#include "core/animation/animator.h" +#include "core/animation/curve_animation.h" + +namespace OHOS::Ace { + +using ScrollOverFunc = std::function; + +enum class OverScrollState { + IDLE = 0, + ABSORB, + PULL, + RECEDE, +}; + +class ScrollFadeController : public AceType { + DECLARE_ACE_TYPE(ScrollFadeController, AceType); + +public: + explicit ScrollFadeController(const WeakPtr& context); + ~ScrollFadeController(); + void ProcessAbsorb(double velocity); + void ProcessPull(double overDistance, double mainAxisExtent, double crossAxisExtent); + + void SetCallback(const ScrollOverFunc& callback) + { + callback_ = callback; + } + +protected: + void ChangeState(); + void SchedulePullHoldTask(); + +private: + void Initialize(); + void ProcessRecede(int32_t duration); + void DecelerateListener(double value); + + double opacity_ = 0.0; + double opacityFloor_ = 0.0; + double opacityCeil_ = 0.0; + double scaleSize_ = 0.0; + double scaleSizeFloor_ = 0.0; + double scaleSizeCeil_ = 0.0; + double pullDistance_ = 0.0; + OverScrollState state_ = OverScrollState::IDLE; + RefPtr controller_; + WeakPtr context_; + RefPtr> decele_; + ScrollOverFunc callback_; + CancelableCallback pullTask_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SCROLL_SCROLL_FADE_CONTROLLER_H diff --git a/frameworks/core/components/scroll/scroll_fade_effect.cpp b/frameworks/core/components/scroll/scroll_fade_effect.cpp new file mode 100644 index 00000000..566b093e --- /dev/null +++ b/frameworks/core/components/scroll/scroll_fade_effect.cpp @@ -0,0 +1,149 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/scroll/scroll_fade_effect.h" + +namespace OHOS::Ace { + +void ScrollFadeEffect::InitialEdgeEffect() +{ + ResetFadeEffect(fadeColor_); +} + +void ScrollFadeEffect::ResetFadeEffect(const Color& color) +{ + fadeColor_ = color; + if (!fadePainter_) { + fadePainter_ = ScrollFadePainter::CreatePainter(); + } + + if (!fadeController_) { + auto scroll = scroll_.Upgrade(); + fadeController_ = AceType::MakeRefPtr(scroll ? scroll->GetContext() : nullptr); + fadeController_->SetCallback([weakFade = AceType::WeakClaim(this)](double opacity, double scale) { + auto fade = weakFade.Upgrade(); + if (fade) { + fade->SetOpacityAndScale(opacity, scale); + } + }); + } +} + +double ScrollFadeEffect::CalculateOverScroll(double oldPosition, bool isReachMax) +{ + if (!currentPositionCallback_ || !leadingCallback_ || !trailingCallback_) { + LOGD("position callback is null"); + return 0.0; + } + + double newPosition = -currentPositionCallback_(); + double minExtent = -trailingCallback_(); + double maxExtent = -leadingCallback_(); + + // under scroll + if (newPosition < oldPosition && oldPosition <= minExtent) { + return newPosition - oldPosition; + } + + // over scroll + if (newPosition > oldPosition && oldPosition >= maxExtent) { + return newPosition - oldPosition; + } + + // crash the top + if (newPosition < minExtent && oldPosition > minExtent) { + LOGD("crash the top"); + return newPosition; + } + + // crash the bottom + if (newPosition > maxExtent && maxExtent > oldPosition && isReachMax) { + LOGD("crash the bottom"); + return newPosition - maxExtent; + } + + return 0.0; +} + +void ScrollFadeEffect::SetPaintDirection(Axis axis, double overScroll) +{ + if (NearZero(overScroll) || !fadePainter_) { + return; + } + auto const isVertical = axis == Axis::VERTICAL; + if (isVertical && overScroll < 0.0) { + fadePainter_->SetDirection(OverScrollDirection::UP); + } else if (isVertical && overScroll > 0.0) { + fadePainter_->SetDirection(OverScrollDirection::DOWN); + } else if (overScroll < 0.0) { + fadePainter_->SetDirection(OverScrollDirection::LEFT); + } else { + fadePainter_->SetDirection(OverScrollDirection::RIGHT); + } +} + +void ScrollFadeEffect::Paint( + RenderContext& context, const Size& viewPort, const Offset& offset) +{ + if (fadePainter_) { + fadePainter_->SetColor(fadeColor_); + fadePainter_->PaintSide(context, viewPort, offset); + } +} + +void ScrollFadeEffect::HandleOverScroll(Axis axis, double overScroll, const Size& viewPort) +{ + if (NearZero(overScroll)) { + return; + } + + SetPaintDirection(axis, overScroll); + + if (!fadeController_) { + fadeController_ = AceType::MakeRefPtr(scroll_.Upgrade()->GetContext()); + fadeController_->SetCallback([weakFade = AceType::WeakClaim(this)](double opacity, double scale) { + auto fade = weakFade.Upgrade(); + if (fade) { + fade->SetOpacityAndScale(opacity, scale); + } + }); + } + + if (fadeController_ && scrollable_) { + double dragVelocity = scrollable_->GetCurrentVelocity(); + if (!NearZero(dragVelocity)) { + fadeController_->ProcessAbsorb(std::abs(dragVelocity)); + } else { + axis == Axis::VERTICAL + ? fadeController_->ProcessPull(std::abs(overScroll), viewPort.Height(), viewPort.Width()) + : fadeController_->ProcessPull(std::abs(overScroll), viewPort.Width(), viewPort.Height()); + } + } +} + +void ScrollFadeEffect::SetOpacityAndScale(double opacity, double scale) +{ + if (fadePainter_) { + fadePainter_->SetOpacity(opacity); + fadePainter_->SetScaleFactor(scale); + + auto scroll = scroll_.Upgrade(); + if (scroll) { + scroll->MarkNeedRender(); + } + } +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/scroll/scroll_fade_effect.h b/frameworks/core/components/scroll/scroll_fade_effect.h new file mode 100644 index 00000000..0715e65e --- /dev/null +++ b/frameworks/core/components/scroll/scroll_fade_effect.h @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SCROLL_SCROLL_FADE_EFFECT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SCROLL_SCROLL_FADE_EFFECT_H + +#include "base/utils/macros.h" +#include "core/components/scroll/scroll_edge_effect.h" +#include "core/components/scroll/scroll_fade_controller.h" +#include "core/components/scroll/scroll_fade_painter.h" + +namespace OHOS::Ace { + +class ACE_EXPORT ScrollFadeEffect final : public ScrollEdgeEffect { + DECLARE_ACE_TYPE(ScrollFadeEffect, ScrollEdgeEffect); + +public: + explicit ScrollFadeEffect(const Color& color = Color::GRAY) + : ScrollEdgeEffect(EdgeEffect::FADE), fadeColor_(color) {} + ~ScrollFadeEffect() override = default; + + const Color& GetFadeColor() const + { + return fadeColor_; + } + + void InitialEdgeEffect() override; + double CalculateOverScroll(double oldPosition, bool isReachMax) override; + void Paint(RenderContext& context, const Size& viewPort, const Offset& offset) override; + void HandleOverScroll(Axis axis, double overScroll, const Size& viewPort) override; + +private: + void ResetFadeEffect(const Color& color); + void SetOpacityAndScale(double opacity, double scale); + void SetPaintDirection(Axis axis, double overScroll); + + Color fadeColor_ = Color::GRAY; + RefPtr fadePainter_; + RefPtr fadeController_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SCROLL_SCROLL_FADE_EFFECT_H diff --git a/frameworks/core/components/scroll/scroll_fade_painter.h b/frameworks/core/components/scroll/scroll_fade_painter.h new file mode 100644 index 00000000..075392c2 --- /dev/null +++ b/frameworks/core/components/scroll/scroll_fade_painter.h @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SCROLL_SCROLL_FADE_PAINTER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SCROLL_SCROLL_FADE_PAINTER_H + +#include "base/geometry/offset.h" +#include "base/geometry/size.h" +#include "base/memory/ace_type.h" +#include "core/components/common/properties/color.h" +#include "core/pipeline/base/render_context.h" + +namespace OHOS::Ace { + +enum class OverScrollDirection { + UP = 0, + DOWN, + LEFT, + RIGHT, +}; + +class ScrollFadePainter : public AceType { + DECLARE_ACE_TYPE(ScrollFadePainter, AceType); + +public: + static RefPtr CreatePainter(); + + virtual void PaintSide(RenderContext& context, const Size& size, const Offset& offset) {} + + Color GetColor() const + { + return color_; + } + + void SetColor(const Color& color) + { + color_ = color; + } + + double GetOpacity() const + { + return opacity_; + } + + void SetOpacity(double opacity) + { + opacity_ = opacity; + } + + double GetScaleFactor() const + { + return scaleFactor_; + } + + void SetScaleFactor(double scaleFactor) + { + scaleFactor_ = scaleFactor; + } + + void SetDirection(OverScrollDirection direction) + { + direction_ = direction; + } + +protected: + OverScrollDirection direction_ = OverScrollDirection::UP; + Color color_ = Color::GRAY; + double opacity_ = 0.0; + double scaleFactor_ = 0.0; +}; + +} // namespace OHOS::Ace +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SCROLL_SCROLL_FADE_PAINTER_H diff --git a/frameworks/core/components/scroll/scroll_position_controller.cpp b/frameworks/core/components/scroll/scroll_position_controller.cpp new file mode 100644 index 00000000..3ff1f1d8 --- /dev/null +++ b/frameworks/core/components/scroll/scroll_position_controller.cpp @@ -0,0 +1,159 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/scroll/scroll_position_controller.h" + +#include "core/animation/curves.h" +#include "core/components/scroll/render_scroll.h" + +namespace OHOS::Ace { + +ScrollEventInfo::ScrollEventInfo(ScrollEvent type, double scrollX, double scrollY, int32_t scrollState) + : BaseEventInfo("scroll"), type_(type), scrollX_(scrollX), scrollY_(scrollY), scrollState_(scrollState) +{} + +std::string ScrollEventInfo::ToJSONString() const +{ + switch (type_) { + case ScrollEvent::SCROLL_TOP: + return std::string("\"scrolltop\",null"); + case ScrollEvent::SCROLL_BOTTOM: + return std::string("\"scrollbottom\",null"); + case ScrollEvent::SCROLL_END: + return std::string("\"scrollend\",null"); + case ScrollEvent::SCROLL_TOUCHUP: + return std::string("\"scrolltouchup\",null"); + case ScrollEvent::SCROLL_POSITION: + return std::string("\"scroll\",{\"scrollX\":") + .append(std::to_string(scrollX_)) + .append(",\"scrollY\":") + .append(std::to_string(scrollY_)) + .append(",\"scrollState\":") + .append(std::to_string(scrollState_)) + .append("},null"); + default: + return ""; + } +} + +void ScrollPositionController::JumpTo(int32_t index, int32_t source) +{ + RefPtr node = scroll_.Upgrade(); + if (node) { + auto scroll = AceType::DynamicCast(node); + if (scroll) { + scroll->JumpToIndex(index, source); + } + } +} + +void ScrollPositionController::JumpTo(double position) +{ + RefPtr node = scroll_.Upgrade(); + if (node) { + auto scroll = AceType::DynamicCast(node); + if (scroll) { + scroll->JumpToPosition(position); + } + } +} + +void ScrollPositionController::AnimateTo(double position, float duration, const RefPtr& curve) +{ + RefPtr node = scroll_.Upgrade(); + if (node) { + auto scroll = AceType::DynamicCast(node); + if (scroll) { + scroll->AnimateTo(position, duration, curve); + } + } +} + +void ScrollPositionController::ScrollBy(double pixelX, double pixelY, bool smooth) +{ + RefPtr node = scroll_.Upgrade(); + if (node) { + auto scroll = AceType::DynamicCast(node); + if (scroll) { + scroll->ScrollBy(pixelX, pixelY, smooth); + } + } +} + +void ScrollPositionController::ScrollArrow(double scrollDistance, bool reverse, bool smooth) +{ + if (scrollDistance > 0.0) { + RefPtr node = scroll_.Upgrade(); + if (node) { + auto scroll = AceType::DynamicCast(node); + if (scroll) { + if (reverse) { + ScrollBy(-scrollDistance, -scrollDistance, smooth); + } else { + ScrollBy(scrollDistance, scrollDistance, smooth); + } + } + } + } +} + +double ScrollPositionController::GetCurrentPosition() const +{ + RefPtr node = scroll_.Upgrade(); + if (!node) { + return 0.0; + } + auto scroll = AceType::DynamicCast(node); + if (!scroll) { + return 0.0; + } + + return scroll->GetCurrentPosition(); +} + +void ScrollPositionController::ScrollToEdge(ScrollEdgeType scrollEdgeType, bool smooth) +{ + RefPtr node = scroll_.Upgrade(); + if (node) { + auto scroll = AceType::DynamicCast(node); + if (scroll) { + scroll->ScrollToEdge(scrollEdgeType, smooth); + } + } +} + +void ScrollPositionController::ScrollPage(bool reverse, bool smooth) +{ + RefPtr node = scroll_.Upgrade(); + if (node) { + auto scroll = AceType::DynamicCast(node); + if (scroll) { + scroll->ScrollPage(reverse, smooth); + } + } +} + +Offset ScrollPositionController::GetCurrentOffset() const +{ + RefPtr node = scroll_.Upgrade(); + auto scroll = AceType::DynamicCast(node); + if (!scroll) { + return Offset::Zero(); + } + + return scroll->GetCurrentOffset(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/scroll/scroll_position_controller.h b/frameworks/core/components/scroll/scroll_position_controller.h new file mode 100644 index 00000000..778f365d --- /dev/null +++ b/frameworks/core/components/scroll/scroll_position_controller.h @@ -0,0 +1,279 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SCROLL_SCROLL_POSITION_CONTROLLER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SCROLL_SCROLL_POSITION_CONTROLLER_H + +#include + +#include "core/animation/curve.h" +#include "core/components/scroll/scrollable.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +constexpr uint32_t POSITION_MIDDLE = 0; +constexpr uint32_t POSITION_TOP = 1 << 0; +constexpr uint32_t POSITION_BOTTOM = 1 << 1; + +enum class ScrollEvent : size_t { + SCROLL_TOP = 0, + SCROLL_BOTTOM, + SCROLL_TOUCHUP, + SCROLL_END, + SCROLL_POSITION, + UNKNOWN, +}; + +enum class ScrollEdgeType : size_t { + SCROLL_TOP = 0, + SCROLL_BOTTOM, +}; + +using OnScrollFunc = std::function; + +class ScrollEventInfo : public BaseEventInfo, public EventToJSONStringAdapter { + DECLARE_RELATIONSHIP_OF_CLASSES(ScrollEventInfo, BaseEventInfo, EventToJSONStringAdapter); +public: + ScrollEventInfo(ScrollEvent type, double scrollX, double scrollY, int32_t scrollState); + + ~ScrollEventInfo() = default; + + std::string ToJSONString() const override; + + ScrollEvent GetType() const + { + return type_; + } + + double GetScrollX() const + { + return scrollX_; + } + + double GetScrollY() const + { + return scrollY_; + } + + int32_t GetScrollState() const + { + return scrollState_; + } + +private: + ScrollEvent type_ = ScrollEvent::SCROLL_TOP; + double scrollX_ = 0.0; + double scrollY_ = 0.0; + int32_t scrollState_ = -1; +}; + +using ScrollEventFunc = std::function&)>; +class ACE_EXPORT ScrollPositionController : public AceType { + DECLARE_ACE_TYPE(ScrollPositionController, AceType); + +public: + ScrollPositionController() = default; + ~ScrollPositionController() override = default; + + void SetInitialIndex(int32_t index) + { + if (index == 0) { + flags_ = POSITION_TOP; + } else { + flags_ = POSITION_MIDDLE; + } + initialIndex_ = index; + } + + int32_t GetInitialIndex() const + { + return initialIndex_; + } + + void SetInitialOffset(double initialOffset) + { + if (NearZero(initialOffset)) { + flags_ = POSITION_TOP; + } else { + flags_ = POSITION_MIDDLE; + } + initialOffset_ = initialOffset; + } + + double GetInitialOffset() const + { + return initialOffset_; + } + + double GetCurrentPosition() const; + + void JumpTo(int32_t index, int32_t source = SCROLL_FROM_JUMP); + void JumpTo(double position); + void AnimateTo(double position, float duration, const RefPtr& curve); + void ScrollBy(double pixelX, double pixelY, bool smooth); + void ScrollArrow(double scrollDistance, bool reverse, bool smooth); + void ScrollToEdge(ScrollEdgeType scrollEdgeType, bool smooth); + void ScrollPage(bool reverse, bool smooth); + Offset GetCurrentOffset() const; + + void SetScrollNode(const WeakPtr& scroll) + { + scroll_ = scroll; + } + + void SetScrollEvent(ScrollEvent event, const ScrollEventFunc& scrollEvent) + { + switch (event) { + case ScrollEvent::SCROLL_TOP: + scrollTop_ = scrollEvent; + break; + case ScrollEvent::SCROLL_BOTTOM: + scrollBottom_ = scrollEvent; + break; + case ScrollEvent::SCROLL_END: + scrollEnd_ = scrollEvent; + break; + case ScrollEvent::SCROLL_TOUCHUP: + scrollTouchUp_ = scrollEvent; + break; + case ScrollEvent::SCROLL_POSITION: + scrollPosition_ = scrollEvent; + break; + default: + LOGW("unknown scroll event"); + break; + } + } + + void HandleScrollEvent(std::shared_ptr info) const + { + if (!info) { + LOGE("scroll event info is null"); + return; + } + auto eventType = info->GetType(); + LOGD("scroll event info:type[%{public}lu], param:[%{public}s]", eventType, info->ToJSONString().c_str()); + switch (eventType) { + case ScrollEvent::SCROLL_TOP: + if (scrollTop_) { + scrollTop_(info); + } + break; + case ScrollEvent::SCROLL_BOTTOM: + if (scrollBottom_) { + scrollBottom_(info); + } + break; + case ScrollEvent::SCROLL_END: + if (scrollEnd_) { + scrollEnd_(info); + } + break; + case ScrollEvent::SCROLL_TOUCHUP: + if (scrollTouchUp_) { + scrollTouchUp_(info); + } + break; + case ScrollEvent::SCROLL_POSITION: + if (scrollPosition_) { + scrollPosition_(info); + } + break; + default: + LOGW("handle unknown scroll event"); + break; + } + } + + void SetTop() + { + flags_ |= POSITION_TOP; + } + + void SetBottom() + { + flags_ |= POSITION_BOTTOM; + } + + void SetMiddle() + { + flags_ = POSITION_MIDDLE; + } + + bool IsTop() const + { + return (flags_ & POSITION_TOP); + } + + bool IsBottom() const + { + return (flags_ & POSITION_BOTTOM); + } + + void SetNonScrollable() + { + flags_ = (POSITION_TOP | POSITION_BOTTOM); + } + + using OnFirstChanged = std::function; + void AddFirstChangedCallback(const OnFirstChanged& callback) + { + onChanged_ = callback; + } + + using IndexerRotation = std::function; + void AddIndexerStateQueryCallback(const IndexerRotation& callback) + { + indexerRotationCallback_ = callback; + } + + bool IsScrollNeedRotation() + { + return !(indexerRotationCallback_ && indexerRotationCallback_()); + } + + void SetFirstItemIndex(int32_t firstIndex) + { + firstIndex_ = firstIndex; + if (onChanged_) { + onChanged_(firstIndex_); + } + } + + int32_t GetFirstItemIndex() const + { + return firstIndex_; + } + +private: + int32_t initialIndex_ = 0; + double initialOffset_ = 0.0; + OnFirstChanged onChanged_; + IndexerRotation indexerRotationCallback_; + int32_t firstIndex_ = 0; + WeakPtr scroll_; + + ScrollEventFunc scrollTop_; + ScrollEventFunc scrollBottom_; + ScrollEventFunc scrollTouchUp_; + ScrollEventFunc scrollEnd_; + ScrollEventFunc scrollPosition_; + uint32_t flags_ = POSITION_TOP; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SCROLL_SCROLL_POSITION_CONTROLLER_H diff --git a/frameworks/core/components/scroll/scroll_spring_effect.cpp b/frameworks/core/components/scroll/scroll_spring_effect.cpp new file mode 100644 index 00000000..033d7eac --- /dev/null +++ b/frameworks/core/components/scroll/scroll_spring_effect.cpp @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/scroll/scroll_spring_effect.h" + +namespace OHOS::Ace { + +void ScrollSpringEffect::InitialEdgeEffect() +{ + RegisterSpringCallback(); +} + +void ScrollSpringEffect::RegisterSpringCallback() +{ + if (scrollable_) { + scrollable_->SetScrollOverCallBack([weakEffect = AceType::WeakClaim(this)](double velocity) { + auto effect = weakEffect.Upgrade(); + if (effect) { + effect->ProcessScrollOver(velocity); + } + }); + } +} + +void ScrollSpringEffect::ProcessScrollOver(double velocity) +{ + if (currentPositionCallback_ && leadingCallback_ && trailingCallback_) { + double position = currentPositionCallback_(); + double minExtent = leadingCallback_(); + double maxExtent = trailingCallback_(); + double initMinExtent = initLeadingCallback_(); + double initMaxExtent = initTrailingCallback_(); + if (scrollable_) { + if (!scrollable_->Available() && minExtent < 0.0) { + minExtent = 0.0; + } + scrollable_->StartSpringMotion( + position, velocity, ExtentPair(minExtent, maxExtent), ExtentPair(initMinExtent, initMaxExtent)); + } + } +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/scroll/scroll_spring_effect.h b/frameworks/core/components/scroll/scroll_spring_effect.h new file mode 100644 index 00000000..fce80b17 --- /dev/null +++ b/frameworks/core/components/scroll/scroll_spring_effect.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SCROLL_SCROLL_SPRING_EFFECT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SCROLL_SCROLL_SPRING_EFFECT_H + +#include "base/utils/macros.h" +#include "core/components/scroll/scroll_edge_effect.h" + +namespace OHOS::Ace { + +class ACE_EXPORT ScrollSpringEffect final : public ScrollEdgeEffect { + DECLARE_ACE_TYPE(ScrollSpringEffect, ScrollEdgeEffect); + +public: + ScrollSpringEffect() : ScrollEdgeEffect(EdgeEffect::SPRING) {} + ~ScrollSpringEffect() override = default; + + void RegisterSpringCallback() override; + void InitialEdgeEffect() override; + void ProcessScrollOver(double velocity) override; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SCROLL_SCROLL_SPRING_EFFECT_H diff --git a/frameworks/core/components/scroll/scrollable.cpp b/frameworks/core/components/scroll/scrollable.cpp new file mode 100644 index 00000000..c931a4dd --- /dev/null +++ b/frameworks/core/components/scroll/scrollable.cpp @@ -0,0 +1,445 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/scroll/scrollable.h" + +#include "base/log/ace_trace.h" +#include "base/log/log.h" + +namespace OHOS::Ace { +namespace { + +constexpr double SPRING_SCROLL_MASS = 0.5; +constexpr double SPRING_SCROLL_STIFFNESS = 100.0; +constexpr double SPRING_SCROLL_DAMPING = 15.55635; +constexpr double MAX_FRICTION = 0.766; +const RefPtr DEFAULT_OVER_SPRING_PROPERTY = + AceType::MakeRefPtr(SPRING_SCROLL_MASS, SPRING_SCROLL_STIFFNESS, SPRING_SCROLL_DAMPING); +#ifndef WEARABLE_PRODUCT +constexpr double FRICTION = 1.0; +constexpr double VELOCITY_SCALE = 1.0; +constexpr double MAX_VELOCITY = 8000.0; +constexpr double MIN_VELOCITY = -8000.0; +constexpr double ADJUSTABLE_VELOCITY = 3000.0; +#else +constexpr double DISTANCE_EPSILON = 1.0; +constexpr double FRICTION = 1.2; +constexpr double VELOCITY_SCALE = 0.6; +constexpr double MAX_VELOCITY = 5000.0; +constexpr double MIN_VELOCITY = -5000.0; +constexpr double ADJUSTABLE_VELOCITY = 0.0; +#endif + +} // namespace + +// Static Functions. +double Scrollable::sFriction_ = FRICTION; +double Scrollable::sVelocityScale_ = VELOCITY_SCALE; + +void Scrollable::SetVelocityScale(double sVelocityScale) +{ + if (LessOrEqual(sVelocityScale, 0.0)) { + LOGW("Invalid velocity scale: %{public}lf", sVelocityScale); + return; + } + sVelocityScale_ = sVelocityScale; +} + +void Scrollable::SetFriction(double sFriction) +{ + if (LessOrEqual(sFriction, 0.0)) { + LOGW("Invalid friction value: %{public}lf", sFriction); + return; + } + sFriction_ = sFriction; +} + +Scrollable::~Scrollable() +{ + // If animation still runs, force stop it. + controller_->Stop(); + springController_->Stop(); +} + +void Scrollable::Initialize(const WeakPtr& context) +{ + context_ = context; + if (axis_ == Axis::VERTICAL) { + dragRecognizer_ = AceType::MakeRefPtr(); + } else { + dragRecognizer_ = AceType::MakeRefPtr(); + } + dragRecognizer_->SetOnDragStart([weakScroll = AceType::WeakClaim(this)](const DragStartInfo& info) { + auto scroll = weakScroll.Upgrade(); + if (scroll) { + // Send event to accessibility when scroll start. + auto context = scroll->GetContext().Upgrade(); + if (context) { + AccessibilityEvent scrollEvent; + scrollEvent.nodeId = scroll->nodeId_; + scrollEvent.eventType = "scrollstart"; + context->SendEventToAccessibility(scrollEvent); + } + scroll->moved_ = false; + scroll->HandleDragStart(info); + } + }); + dragRecognizer_->SetOnDragUpdate([weakScroll = AceType::WeakClaim(this)](const DragUpdateInfo& info) { + auto scroll = weakScroll.Upgrade(); + if (scroll) { + scroll->HandleDragUpdate(info); + } + }); + dragRecognizer_->SetOnDragEnd([weakScroll = AceType::WeakClaim(this)](const DragEndInfo& info) { + auto scroll = weakScroll.Upgrade(); + if (scroll) { + scroll->HandleDragEnd(info); + // Send event to accessibility when scroll stop. + auto context = scroll->GetContext().Upgrade(); + if (context && scroll->IsStopped()) { + AccessibilityEvent scrollEvent; + scrollEvent.nodeId = scroll->nodeId_; + scrollEvent.eventType = "scrollend"; + context->SendEventToAccessibility(scrollEvent); + } + } + }); + + // use RawRecognizer to receive next touch down event to stop animation. + rawRecognizer_ = AceType::MakeRefPtr(); + rawRecognizer_->SetOnTouchDown([weakScroll = AceType::WeakClaim(this)](const TouchEventInfo&) { + auto scroll = weakScroll.Upgrade(); + if (scroll) { + scroll->HandleTouchDown(); + } + }); + rawRecognizer_->SetOnTouchUp([weakScroll = AceType::WeakClaim(this)](const TouchEventInfo&) { + auto scroll = weakScroll.Upgrade(); + if (scroll) { + scroll->HandleTouchUp(); + } + }); + + controller_ = AceType::MakeRefPtr(context); + springController_ = AceType::MakeRefPtr(context); + + spring_ = GetDefaultOverSpringProperty(); + available_ = true; +} + +void Scrollable::HandleTouchDown() +{ + LOGD("handle touch down"); + isTouching_ = true; + + // If animation still runs, first stop it. + springController_->Stop(); + + if (!controller_->IsStopped()) { + controller_->Stop(); + if (motion_) { + // Don't stop immediately, keep moving with a big friction. + motion_->Reset(MAX_FRICTION, motion_->GetCurrentPosition(), motion_->GetCurrentVelocity() / 2); + FixScrollMotion(motion_->GetCurrentPosition()); + controller_->PlayMotion(motion_); + currentPos_ = motion_->GetCurrentPosition(); + } + } else { + // Resets values. + currentPos_ = 0.0; + } +} + +void Scrollable::HandleTouchUp() +{ + LOGD("handle touch up"); + isTouching_ = false; + if (springController_->IsStopped()) { + if (scrollOverCallback_ && outBoundaryCallback_ && outBoundaryCallback_()) { + LOGD("need scroll to boundary"); + ProcessScrollOverCallback(0.0); + } + } +} + +bool Scrollable::Idle() const +{ + return !isTouching_ && controller_->IsStopped() && springController_->IsStopped(); +} + +bool Scrollable::IsStopped() const +{ + return controller_->IsStopped() && springController_->IsStopped(); +} + +void Scrollable::HandleDragStart(const OHOS::Ace::DragStartInfo& info) +{ + ACE_FUNCTION_TRACE(); + const auto dragPositionInMainAxis = + axis_ == Axis::VERTICAL ? info.GetGlobalLocation().GetY() : info.GetGlobalLocation().GetX(); + LOGD("HandleDragStart. LocalLocation: %{public}s, GlobalLocation: %{public}s", + info.GetLocalLocation().ToString().c_str(), info.GetGlobalLocation().ToString().c_str()); + UpdateScrollPosition(dragPositionInMainAxis, SCROLL_FROM_START); + RelatedEventStart(); +} + +void Scrollable::HandleDragUpdate(const DragUpdateInfo& info) +{ + ACE_FUNCTION_TRACE(); + if (!springController_->IsStopped() || !controller_->IsStopped()) { + // If animation still runs, first stop it. + controller_->Stop(); + springController_->Stop(); + currentPos_ = 0.0; + } + LOGD("handle drag update, offset is %{public}lf", info.GetMainDelta()); + if (RelatedScrollEventPrepare(Offset(0.0, info.GetMainDelta()))) { + return; + } + if (UpdateScrollPosition(info.GetMainDelta(), SCROLL_FROM_UPDATE)) { + moved_ = true; + } +} + +void Scrollable::HandleDragEnd(const DragEndInfo& info) +{ + LOGD("handle drag end, position is %{public}lf and %{public}lf, velocity is %{public}lf", + info.GetGlobalLocation().GetX(), info.GetGlobalLocation().GetY(), info.GetMainVelocity()); + controller_->Stop(); + springController_->Stop(); + controller_->ClearAllListeners(); + springController_->ClearAllListeners(); + touchUp_ = false; + scrollPause_ = false; + double correctVelocity = std::clamp(info.GetMainVelocity(), MIN_VELOCITY + slipFactor_, MAX_VELOCITY - slipFactor_); + correctVelocity = correctVelocity * sVelocityScale_; + currentVelocity_ = correctVelocity; + if (dragEndCallback_) { + dragEndCallback_(); + } + RelatedEventEnd(); + bool isOutBoundary = outBoundaryCallback_ ? outBoundaryCallback_() : false; + if (isOutBoundary && scrollOverCallback_) { + ProcessScrollOverCallback(correctVelocity); + } else { + double mainPosition = GetMainOffset(info.GetGlobalLocation()); + LOGD("[scrollMotion]position(%{public}lf), velocity(%{public}lf)", mainPosition, correctVelocity); + if (motion_) { + motion_->Reset(sFriction_, mainPosition, correctVelocity); + } else { + motion_ = AceType::MakeRefPtr(sFriction_, mainPosition, correctVelocity); + motion_->AddListener([weakScroll = AceType::WeakClaim(this)](double value) { + auto scroll = weakScroll.Upgrade(); + if (scroll) { + scroll->ProcessScrollMotion(value); + } + }); + } + + // change motion param when list item need to be center of screen on watch + FixScrollMotion(mainPosition); + + // Resets values. + currentPos_ = mainPosition; + currentVelocity_ = 0.0; + + // Starts motion. + controller_->ClearStartListeners(); + controller_->ClearStopListeners(); + controller_->AddStartListener([weak = AceType::WeakClaim(this)]() { + auto scroll = weak.Upgrade(); + if (scroll) { + scroll->moved_ = true; + } + }); + controller_->PlayMotion(motion_); + controller_->AddStopListener([weak = AceType::WeakClaim(this)]() { + auto scroll = weak.Upgrade(); + if (scroll) { + scroll->ProcessScrollMotionStop(); + // Send event to accessibility when scroll stop. + auto context = scroll->GetContext().Upgrade(); + if (context && scroll->Idle()) { + AccessibilityEvent scrollEvent; + scrollEvent.nodeId = scroll->nodeId_; + scrollEvent.eventType = "scrollend"; + context->SendEventToAccessibility(scrollEvent); + } + } + }); + } +} + +void Scrollable::FixScrollMotion(double position) +{ +#ifdef WEARABLE_PRODUCT + if (motion_ && needCenterFix_ && watchFixCallback_) { + double finalPoisition = watchFixCallback_(motion_->GetFinalPosition(), position); + LOGD("final position before fix(%{public}lf), need to fix to position(%{public}lf)", + motion_->GetFinalPosition(), finalPoisition); + if (!NearEqual(finalPoisition, motion_->GetFinalPosition(), DISTANCE_EPSILON)) { + double velocity = motion_->GetVelocityByFinalPosition(finalPoisition); + motion_->Reset(sFriction_, position, velocity); + + // fix again when velocity is less than velocity threshold + if (!NearEqual(finalPoisition, motion_->GetFinalPosition(), DISTANCE_EPSILON)) { + velocity = motion_->GetVelocityByFinalPosition(finalPoisition, 0.0); + motion_->Reset(sFriction_, position, velocity, 0.0); + } + LOGD("final position after fix (%{public}lf), ", motion_->GetFinalPosition()); + } + } +#endif +}; + +void Scrollable::StartSpringMotion( + double mainPosition, double mainVelocity, const ExtentPair& extent, const ExtentPair& initExtent) +{ + LOGD("[scroll] position(%{public}lf), mainVelocity(%{public}lf), minExtent(%{public}lf), maxExtent(%{public}lf), " + "initMinExtent(%{public}lf), initMaxExtent(%{public}lf", + mainPosition, mainVelocity, extent.Leading(), extent.Trailing(), initExtent.Leading(), initExtent.Trailing()); + scrollMotion_ = AceType::MakeRefPtr(mainPosition, mainVelocity, extent, initExtent, spring_); + scrollMotion_->AddListener([weakScroll = AceType::WeakClaim(this)](double position) { + auto scroll = weakScroll.Upgrade(); + if (scroll) { + scroll->ProcessSpringMotion(position); + } + }); + currentPos_ = mainPosition; + springController_->ClearStopListeners(); + springController_->PlayMotion(scrollMotion_); + springController_->AddStopListener([weak = AceType::WeakClaim(this)]() { + auto scroll = weak.Upgrade(); + if (scroll) { + if (scroll->moved_ && scroll->scrollEndCallback_) { + scroll->scrollEndCallback_(); + } + scroll->currentVelocity_ = 0.0; + scroll->moved_ = false; + if (scroll->scrollEnd_) { + scroll->scrollEnd_(); + } + // Send event to accessibility when scroll stop. + auto context = scroll->GetContext().Upgrade(); + if (context) { + AccessibilityEvent scrollEvent; + scrollEvent.nodeId = scroll->nodeId_; + scrollEvent.eventType = "scrollend"; + context->SendEventToAccessibility(scrollEvent); + } + } + }); +} + +void Scrollable::ProcessScrollMotionStop() +{ + if (!scrollPause_ && moved_ && scrollEndCallback_) { + scrollEndCallback_(); + } + + // spring effect special process + if (scrollPause_ && scrollOverCallback_) { + scrollPause_ = false; + ProcessScrollOverCallback(currentVelocity_); + } else { + currentVelocity_ = 0.0; + moved_ = false; + if (scrollEnd_) { + scrollEnd_(); + } + } +} + +void Scrollable::ProcessSpringMotion(double position) +{ + LOGD("[scroll] currentPos_(%{public}lf), position(%{public}lf)", currentPos_, position); + currentVelocity_ = scrollMotion_->GetCurrentVelocity(); + if (NearEqual(currentPos_, position)) { + UpdateScrollPosition(0.0, SCROLL_FROM_ANIMATION_SPRING); + } else { + if (!UpdateScrollPosition(position - currentPos_, SCROLL_FROM_ANIMATION_SPRING)) { + springController_->Stop(); + } else if (!touchUp_) { + if (scrollTouchUpCallback_) { + scrollTouchUpCallback_(); + } + touchUp_ = true; + } + } + currentPos_ = position; +} + +void Scrollable::ProcessScrollMotion(double position) +{ + currentVelocity_ = motion_->GetCurrentVelocity(); + LOGD("[scrolling] position(%{public}lf), currentVelocity_(%{public}lf)", position, currentVelocity_); + if ((NearEqual(currentPos_, position))) { + UpdateScrollPosition(0.0, SCROLL_FROM_ANIMATION); + } else { + // UpdateScrollPosition return false, means reach to scroll limit. + if (!UpdateScrollPosition(position - currentPos_, SCROLL_FROM_ANIMATION)) { + controller_->Stop(); + } else if (!touchUp_) { + if (scrollTouchUpCallback_) { + scrollTouchUpCallback_(); + } + touchUp_ = true; + } + } + currentPos_ = position; + + // spring effect special process + if (outBoundaryCallback_ && outBoundaryCallback_()) { + scrollPause_ = true; + controller_->Stop(); + } +} + +bool Scrollable::UpdateScrollPosition(const double offset, int32_t source) const +{ + bool ret = true; + if (callback_) { + ret = callback_(offset, source); + } + return ret; +} + +void Scrollable::ProcessScrollOverCallback(double velocity) +{ + if (outBoundaryCallback_ && !outBoundaryCallback_()) { + return; + } + // In the case of chain animation enabled, you need to switch the control point first, + // and then correct the offset value in notification process + if (notifyScrollOverCallback_) { + notifyScrollOverCallback_(velocity); + } + // then use corrected offset to make scroll motion. + if (scrollOverCallback_) { + scrollOverCallback_(velocity); + } +} + +void Scrollable::SetSlipFactor(double SlipFactor) +{ + slipFactor_ = std::clamp(SlipFactor, 0.0, ADJUSTABLE_VELOCITY); +} + +const RefPtr& Scrollable::GetDefaultOverSpringProperty() +{ + return DEFAULT_OVER_SPRING_PROPERTY; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/scroll/scrollable.h b/frameworks/core/components/scroll/scrollable.h new file mode 100644 index 00000000..7f5de013 --- /dev/null +++ b/frameworks/core/components/scroll/scrollable.h @@ -0,0 +1,264 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SCROLL_SCROLLABEL_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SCROLL_SCROLLABEL_H + +#include + +#include "core/animation/animator.h" +#include "core/animation/friction_motion.h" +#include "core/animation/scroll_motion.h" +#include "core/gestures/drag_recognizer.h" +#include "core/gestures/raw_recognizer.h" +#include "core/gestures/touch_event.h" +#include "core/pipeline/base/related_node.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +constexpr int32_t SCROLL_FROM_NONE = 0; +constexpr int32_t SCROLL_FROM_UPDATE = 1; +constexpr int32_t SCROLL_FROM_ANIMATION = 2; +constexpr int32_t SCROLL_FROM_JUMP = 3; +constexpr int32_t SCROLL_FROM_ANIMATION_SPRING = 4; +constexpr int32_t SCROLL_FROM_CHILD = 5; +constexpr int32_t SCROLL_FROM_BAR = 6; +constexpr int32_t SCROLL_FROM_FOCUS_JUMP = 7; +constexpr int32_t SCROLL_FROM_ROTATE = 8; +constexpr int32_t SCROLL_FROM_INDEXER = 9; +constexpr int32_t SCROLL_FROM_START = 10; // from drag start + +using ScrollPositionCallback = std::function; +using ScrollEventCallback = std::function; +using OutBoundaryCallback = std::function; +using ScrollOverCallback = std::function; +using DragEndForRefreshtCallback = std::function; +using WatchFixCallback = std::function; + +class Scrollable : public TouchEventTarget, public RelatedChild { + DECLARE_ACE_TYPE(Scrollable, TouchEventTarget); + +public: + Scrollable() = default; + Scrollable(ScrollPositionCallback&& callback, Axis axis) : callback_(std::move(callback)), axis_(axis) {} + ~Scrollable() override; + + static void SetVelocityScale(double sVelocityScale); + static void SetFriction(double sFriction); + + void Initialize(const WeakPtr& context); + + bool IsMotionStop() const + { + return (springController_ ? (!springController_->IsRunning()) : true) && + (controller_ ? (!controller_->IsRunning()) : true) && !moved_; + } + + bool IsSpringMotionRunning() const + { + return springController_ ? springController_->IsRunning() : false; + } + + void SetAxis(Axis axis) + { + axis_ = axis; + } + + double GetMainOffset(const Offset& offset) const + { + return axis_ == Axis::HORIZONTAL ? offset.GetX() : offset.GetY(); + } + + double GetMainSize(const Size& size) const + { + return axis_ == Axis::HORIZONTAL ? size.Width() : size.Height(); + } + + void SetCallback(const ScrollPositionCallback& callback) + { + callback_ = callback; + } + + void SetCoordinateOffset(const Offset& offset) const + { + if (dragRecognizer_) { + dragRecognizer_->SetCoordinateOffset(offset); + } + if (rawRecognizer_) { + rawRecognizer_->SetCoordinateOffset(offset); + } + } + + void SetDragTouchRestrict(const TouchRestrict& touchRestrict) + { + if (dragRecognizer_) { + dragRecognizer_->SetTouchRestrict(touchRestrict); + } + } + + void SetScrollEndCallback(const ScrollEventCallback& scrollEndCallback) + { + scrollEndCallback_ = scrollEndCallback; + } + + void SetScrollTouchUpCallback(const ScrollEventCallback& scrollTouchUpCallback) + { + scrollTouchUpCallback_ = scrollTouchUpCallback; + } + + void HandleTouchDown(); + void HandleTouchUp(); + void HandleDragStart(const DragStartInfo& info); + void HandleDragUpdate(const DragUpdateInfo& info); + void HandleDragEnd(const DragEndInfo& info); + + bool DispatchEvent(const TouchPoint& point) override + { + return true; + } + bool HandleEvent(const TouchPoint& event) override + { + if (dragRecognizer_) { + dragRecognizer_->HandleEvent(event); + } + if (rawRecognizer_) { + return rawRecognizer_->HandleEvent(event); + } + return true; + } + + void SetScrollEnd(const ScrollEventCallback& scrollEnd) + { + scrollEnd_ = scrollEnd; + } + + void SetScrollOverCallBack(const ScrollOverCallback& scrollOverCallback) + { + scrollOverCallback_ = scrollOverCallback; + } + + void SetNotifyScrollOverCallBack(const ScrollOverCallback& scrollOverCallback) + { + notifyScrollOverCallback_ = scrollOverCallback; + } + + void SetOutBoundaryCallback(const OutBoundaryCallback& outBoundaryCallback) + { + outBoundaryCallback_ = outBoundaryCallback; + } + + void SetDragEndCallback(const DragEndForRefreshtCallback& dragEndCallback) + { + dragEndCallback_ = dragEndCallback; + } + + void SetWatchFixCallback(const WatchFixCallback& watchFixCallback) + { + watchFixCallback_ = watchFixCallback; + } + + void MarkNeedCenterFix(bool needFix) + { + needCenterFix_ = needFix; + } + + double GetCurrentVelocity() const + { + return currentVelocity_; + }; + + void StartSpringMotion( + double mainPosition, double mainVelocity, const ExtentPair& extent, const ExtentPair& initExtent); + + bool Idle() const; + + bool IsStopped() const; + + bool Available() const + { + return available_; + } + + void MarkAvailable(bool available) + { + available_ = available; + } + + WeakPtr GetContext() const + { + return context_; + } + + void SetNodeId(int32_t nodeId) + { + nodeId_ = nodeId; + } + + void ProcessScrollOverCallback(double velocity); + + void SetSlipFactor(double SlipFactor); + + void SetOverSpringProperty(const RefPtr& property) + { + if (property && property->IsValid()) { + spring_ = property; + } + } + + static const RefPtr& GetDefaultOverSpringProperty(); + +private: + bool UpdateScrollPosition(double offset, int32_t source) const; + void ProcessSpringMotion(double position); + void ProcessScrollMotion(double position); + void ProcessScrollMotionStop(); + void FixScrollMotion(double position); + + ScrollPositionCallback callback_; + ScrollEventCallback scrollEnd_; + ScrollEventCallback scrollEndCallback_; + ScrollEventCallback scrollTouchUpCallback_; + ScrollOverCallback scrollOverCallback_; // scroll motion controller when edge set to spring + ScrollOverCallback notifyScrollOverCallback_; // scroll motion controller when edge set to spring + OutBoundaryCallback outBoundaryCallback_; // whether out of boundary check when edge set to spring + DragEndForRefreshtCallback dragEndCallback_; + WatchFixCallback watchFixCallback_; + Axis axis_; + RefPtr dragRecognizer_; + RefPtr rawRecognizer_; + RefPtr controller_; + RefPtr springController_; + RefPtr motion_; + RefPtr scrollMotion_; + RefPtr spring_; + WeakPtr context_; + double currentPos_ = 0.0; + double currentVelocity_ = 0.0; + bool scrollPause_ = false; + bool touchUp_ = false; + bool moved_ = false; + bool isTouching_ = false; + bool available_ = true; + bool needCenterFix_ = false; + int32_t nodeId_ = 0; + double slipFactor_ = 0.0; + static double sFriction_; + static double sVelocityScale_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SCROLL_SCROLLABEL_H diff --git a/frameworks/core/components/search/BUILD.gn b/frameworks/core/components/search/BUILD.gn new file mode 100644 index 00000000..e6322725 --- /dev/null +++ b/frameworks/core/components/search/BUILD.gn @@ -0,0 +1,23 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("search") { + sources = [ + "flutter_render_search.cpp", + "render_search.cpp", + "search_component.cpp", + "search_element.cpp", + ] +} diff --git a/frameworks/core/components/search/flutter_render_search.cpp b/frameworks/core/components/search/flutter_render_search.cpp new file mode 100644 index 00000000..1988a3c4 --- /dev/null +++ b/frameworks/core/components/search/flutter_render_search.cpp @@ -0,0 +1,180 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/search/flutter_render_search.h" + +#include "flutter/lib/ui/ui_dart_state.h" + +#include "core/pipeline/base/scoped_canvas_state.h" + +namespace OHOS::Ace { +namespace { + +constexpr Dimension ICON_HEIGHT = 16.0_vp; +constexpr Dimension SEARCH_SPACING = 2.0_vp; +constexpr double SEARCH_DIVIDER_WIDTH = 1.0; +constexpr Dimension OFFSET_FOR_FOCUS = 4.0_vp; +const Color SEARCH_DIVIDER_COLOR = Color(0x33000000); + +} // namespace + +RefPtr RenderSearch::Create() +{ + return AceType::MakeRefPtr(); +} + +void FlutterRenderSearch::Paint(RenderContext& context, const Offset& offset) +{ + RenderNode::Paint(context, offset); + + // Paint close icon. + if (showCloseIcon_ && renderCloseIcon_) { + renderCloseIcon_->Paint(context, offset + closeIconRect_.GetOffset()); + } + + // Paint divider. + if (renderSearchBox_) { + SkCanvas* canvas = GetSkCanvas(context); + SkPaint paint; + if (canvas != nullptr) { + double dividerVerticalOffset = (GetLayoutSize().Height() - NormalizeToPx(ICON_HEIGHT)) / 2.0; + Offset dividerOffset = Offset(searchTextRect_.GetOffset().GetX(), dividerVerticalOffset); + if (needReverse_) { + dividerOffset = searchTextRect_.GetOffset() + + Offset(searchTextRect_.Width() - SEARCH_DIVIDER_WIDTH, dividerVerticalOffset); + } + dividerOffset += offset; + Rect rect(dividerOffset, Size(SEARCH_DIVIDER_WIDTH, NormalizeToPx(ICON_HEIGHT))); + canvas->save(); + paint.setColor(SEARCH_DIVIDER_COLOR.GetValue()); + canvas->drawRect(SkRect::MakeXYWH(rect.Left(), rect.Top(), rect.Width(), rect.Height()), paint); + canvas->restore(); + } + } + + // Paint search text. + if (renderSearchBox_) { + searchBoxOffset_ = + searchTextRect_.GetOffset() + Offset(NormalizeToPx(SEARCH_SPACING) + SEARCH_DIVIDER_WIDTH, 0.0); + if (needReverse_) { + searchBoxOffset_ = searchTextRect_.GetOffset() + Offset(NormalizeToPx(SEARCH_SPACING), 0.0); + } + renderSearchBox_->Paint(context, offset + searchBoxOffset_); + } + + PaintFocus(); + PaintOverlayForHoverAndPress(context, offset); +} + +void FlutterRenderSearch::PaintFocus() +{ + auto context = context_.Upgrade(); + if (!context) { + return; + } + + Size size; + Offset offset; + if (focusRender_ == SearchNodeType::NONE) { + return; + } + if (focusRender_ == SearchNodeType::IMAGE) { + if (renderCloseIcon_) { + size = closeIconHotZoneRect_.GetSize(); + offset = closeIconHotZoneRect_.GetOffset(); + } + } else if (focusRender_ == SearchNodeType::BUTTON) { + if (renderSearchBox_) { + size = renderSearchBox_->GetLayoutSize(); + offset = searchBoxOffset_; + } + } + + if (SystemProperties::GetDeviceType() == DeviceType::PHONE) { + double offsetForFocus = NormalizeToPx(OFFSET_FOR_FOCUS); + size -= Size(offsetForFocus * 2.0, offsetForFocus * 2.0); + offset += Offset(offsetForFocus, offsetForFocus); + } + RRect rrect = RRect::MakeRect(Rect(offset, size)); + Radius radius = Radius(size.Height() / 2.0); + rrect.SetCorner({ radius, radius, radius, radius }); + context->ShowFocusAnimation(rrect, Color::BLUE, GetGlobalOffset() + offset); +} + +void FlutterRenderSearch::PaintOverlayForHoverAndPress(RenderContext& context, const Offset& offset) +{ + if (overlayColor_ == Color::TRANSPARENT) { + return; + } + + SkCanvas* canvas = GetSkCanvas(context); + if (canvas == nullptr) { + LOGE("canvas is null!"); + return; + } + canvas->save(); + SkPaint paint; + // Background overlay 10% opacity black when hover. + paint.setColor(overlayColor_.GetValue()); + + Offset rectOffset; + Size rectSize; + double searchSpacing = NormalizeToPx(SEARCH_SPACING); + if (showCloseIcon_ && hoverOrPressRender_ == SearchNodeType::IMAGE) { + rectOffset = closeIconHotZoneRect_.GetOffset(); + rectSize = closeIconHotZoneRect_.GetSize(); + } else if (hoverOrPressRender_ == SearchNodeType::BUTTON) { + rectOffset = searchTextRect_.GetOffset() + Offset(SEARCH_DIVIDER_WIDTH, 0.0) + Offset(searchSpacing, 0.0); + rectSize = searchTextRect_.GetSize() - Size(SEARCH_DIVIDER_WIDTH, 0.0) - Size(searchSpacing * 2.0, 0.0); + } + + Border border; + border.SetBorderRadius(Radius(rectSize.Height() / 2.0)); + canvas->drawRRect(MakeRRect(rectOffset + offset, rectSize, border), paint); + canvas->restore(); +} + +SkRRect FlutterRenderSearch::MakeRRect(const Offset& offset, const Size& size, const Border& border) +{ + SkRect rect = SkRect::MakeXYWH(offset.GetX(), offset.GetY(), size.Width(), size.Height()); + SkRRect rrect = SkRRect::MakeEmpty(); + SkVector rectRadii[4] = { { 0.0, 0.0 }, { 0.0, 0.0 }, { 0.0, 0.0 }, { 0.0, 0.0 } }; + rectRadii[SkRRect::kUpperLeft_Corner] = + SkPoint::Make(NormalizeToPx(border.TopLeftRadius().GetX()), NormalizeToPx(border.TopLeftRadius().GetY())); + rectRadii[SkRRect::kUpperRight_Corner] = + SkPoint::Make(NormalizeToPx(border.TopRightRadius().GetX()), NormalizeToPx(border.TopRightRadius().GetY())); + rectRadii[SkRRect::kLowerRight_Corner] = SkPoint::Make( + NormalizeToPx(border.BottomRightRadius().GetX()), NormalizeToPx(border.BottomRightRadius().GetY())); + rectRadii[SkRRect::kLowerLeft_Corner] = + SkPoint::Make(NormalizeToPx(border.BottomLeftRadius().GetX()), NormalizeToPx(border.BottomLeftRadius().GetY())); + rrect.setRectRadii(rect, rectRadii); + return rrect; +} + +SkCanvas* FlutterRenderSearch::GetSkCanvas(RenderContext& context) +{ + auto renderContext = AceType::DynamicCast(&context); + if (!renderContext) { + LOGE("render context is null"); + return nullptr; + } + auto canvas = renderContext->GetCanvas(); + if (!canvas) { + return nullptr; + } + return canvas->canvas(); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/search/flutter_render_search.h b/frameworks/core/components/search/flutter_render_search.h new file mode 100644 index 00000000..227eae15 --- /dev/null +++ b/frameworks/core/components/search/flutter_render_search.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SEARCH_FLUTTER_RENDER_SEARCH_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SEARCH_FLUTTER_RENDER_SEARCH_H + +#include "third_party/skia/include/core/SkCanvas.h" + +#include "core/components/search/render_search.h" +#include "core/pipeline/base/flutter_render_context.h" + +namespace OHOS::Ace { + +class FlutterRenderSearch : public RenderSearch { +DECLARE_ACE_TYPE(FlutterRenderSearch, RenderSearch); + +public: + void Paint(RenderContext& context, const Offset& offset) override; + +private: + void PaintFocus(); + void PaintOverlayForHoverAndPress(RenderContext& context, const Offset& offset); + SkRRect MakeRRect(const Offset& offset, const Size& size, const Border& border); + SkCanvas* GetSkCanvas(RenderContext& context); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SEARCH_FLUTTER_RENDER_SEARCH_H diff --git a/frameworks/core/components/search/render_search.cpp b/frameworks/core/components/search/render_search.cpp new file mode 100644 index 00000000..8d15b66f --- /dev/null +++ b/frameworks/core/components/search/render_search.cpp @@ -0,0 +1,509 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/search/render_search.h" + +#include "base/json/json_util.h" +#include "base/utils/system_properties.h" +#include "core/components/box/box_component.h" +#include "core/components/button/button_component.h" +#include "core/components/common/properties/alignment.h" +#include "core/components/divider/divider_component.h" +#include "core/components/divider/render_divider.h" +#include "core/components/padding/padding_component.h" +#include "core/components/text/render_text.h" +#include "core/components/text/text_component.h" +#include "core/components/text_field/text_field_component.h" +#include "core/event/ace_event_helper.h" + +namespace OHOS::Ace { +namespace { + +constexpr Dimension SEARCH_SPACING = 2.0_vp; +constexpr Dimension DIVIDER_WIDTH = 1.0_px; +constexpr Dimension TEXT_PADDING = 14.0_vp; +constexpr Dimension SEARCH_TEXT_HEIGHT = 36.0_vp; +constexpr Dimension SEARCH_BUTTON_TEXT_FONT_SIZE = 14.0_fp; +const Color SEARCH_BUTTON_TEXT_COLOR = Color(0xFF254FF7); + +} // namespace + +void RenderSearch::Update(const RefPtr& component) +{ + auto searchComponent = AceType::DynamicCast(component); + if (!searchComponent) { + LOGW("component is null"); + return; + } + needReverse_ = (searchComponent->GetTextDirection() == TextDirection::RTL); + closeIconSize_ = searchComponent->GetCloseIconSize(); + closeIconHotZoneHorizontal_ = searchComponent->GetCloseIconHotZoneHorizontal(); + decoration_ = searchComponent->GetDecoration(); + if (searchComponent->GetTextEditController() && textEditController_ != searchComponent->GetTextEditController()) { + if (textEditController_) { + textEditController_->RemoveObserver(WeakClaim(this)); + } + textEditController_ = searchComponent->GetTextEditController(); + textEditController_->AddObserver(WeakClaim(this)); + } + hoverColor_ = searchComponent->GetHoverColor(); + pressColor_ = searchComponent->GetPressColor(); + + CreateRenderImage(searchComponent); + CreateRenderButton(searchComponent); + changeEvent_ = AceAsyncEvent::Create(searchComponent->GetChangeEventId(), context_); + submitEvent_ = AceAsyncEvent::Create(searchComponent->GetSubmitEventId(), context_); + + MarkNeedLayout(); +} + +void RenderSearch::FireSubmitEvent(const std::string& searchKey) +{ + if (submitEvent_) { + auto submitResult = JsonUtil::Create(true); + submitResult->Put("text", searchKey.c_str()); + submitEvent_(std::string(R"("submit",)").append(submitResult->ToString())); + } +} + +void RenderSearch::PerformLayout() +{ + const auto& renderTextField = AceType::DynamicCast(GetChildren().front()); + if (renderTextField) { + renderTextField->Layout(GetLayoutParam()); + SetLayoutSize(renderTextField->GetLayoutSize()); + renderTextField->SetSubmitEvent([weak = WeakClaim(this)](const std::string& searchKey) { + auto renderSearch = weak.Upgrade(); + if (renderSearch) { + renderSearch->FireSubmitEvent(searchKey); + renderSearch->SetShowCloseIcon(false); + } + }); + + renderTextField->SetOnTextChangeEvent(changeEvent_); + } + + Size deflateSize = Size(NormalizeToPx(SEARCH_SPACING), NormalizeToPx(SEARCH_SPACING)) * 2.0; + auto context = context_.Upgrade(); + if (context && decoration_) { + deflateSize += decoration_->GetBorder().GetLayoutSize(context->GetDipScale()); + } + LayoutParam layoutParam = LayoutParam(GetLayoutSize() - deflateSize, Size()); + if (renderCloseIcon_) { + renderCloseIcon_->Layout(layoutParam); + } + if (renderSearchBox_) { + renderSearchBox_->Layout(layoutParam); + } + + InitRect(renderTextField); +} + +void RenderSearch::InitRect(const RefPtr& renderTextField) +{ + auto pipelineContext = context_.Upgrade(); + if (!pipelineContext) { + return; + } + Border border; + if (decoration_) { + border = decoration_->GetBorder(); + } + double leftBorderWidth = NormalizeToPx(border.Left().GetWidth()); + double topBorderWidth = NormalizeToPx(border.Top().GetWidth()); + double rightBorderWidth = NormalizeToPx(border.Right().GetWidth()); + double bottomBorderWidth = NormalizeToPx(border.Bottom().GetWidth()); + + double searchHeight = GetLayoutSize().Height(); + double searchInnerHeight = searchHeight - topBorderWidth - bottomBorderWidth; + + // Compute rect of search text. + double searchBoxSpacing = NormalizeToPx(SEARCH_SPACING) * 2.0 + NormalizeToPx(DIVIDER_WIDTH); + if (renderSearchBox_) { + double searchBoxVerticalOffset = + topBorderWidth + (searchInnerHeight - renderSearchBox_->GetLayoutSize().Height()) / 2.0; + double searchBoxWidth = renderSearchBox_->GetLayoutSize().Width(); + Offset searchTextOffset = Offset( + GetLayoutSize().Width() - rightBorderWidth - searchBoxWidth - searchBoxSpacing, searchBoxVerticalOffset); + if (needReverse_) { + searchTextOffset = Offset(leftBorderWidth, searchBoxVerticalOffset); + } + searchTextRect_ = Rect(searchTextOffset, renderSearchBox_->GetLayoutSize() + Size(searchBoxSpacing, 0.0)); + } else { + searchTextRect_ = Rect(); + } + renderTextField->SetPaddingHorizonForSearch(searchTextRect_.Width()); + renderTextField->MarkNeedLayout(); + + // Compute rect of close icon. + if (showCloseIcon_ && renderCloseIcon_) { + double iconVerticalOffset = + topBorderWidth + (searchInnerHeight - renderCloseIcon_->GetLayoutSize().Height()) / 2.0; + double iconHotzonOffset = (NormalizeToPx(closeIconHotZoneHorizontal_) - NormalizeToPx(closeIconSize_)) / 2.0; + Offset closeIconOffset = Offset(GetLayoutSize().Width() - rightBorderWidth - searchTextRect_.Width() - + renderCloseIcon_->GetLayoutSize().Width() - iconHotzonOffset, + iconVerticalOffset); + if (needReverse_) { + closeIconOffset = Offset(leftBorderWidth + searchTextRect_.Width() + iconHotzonOffset, iconVerticalOffset); + } + closeIconRect_ = Rect(closeIconOffset, renderCloseIcon_->GetLayoutSize()); + + // Compute rect of hot zone of close icon. + double searchSpacing = NormalizeToPx(SEARCH_SPACING); + double horizonSpacing = iconHotzonOffset - searchSpacing; + double verticalSpacing = + std::min(iconHotzonOffset, (searchInnerHeight - renderCloseIcon_->GetLayoutSize().Height()) / 2.0) - + searchSpacing; + closeIconHotZoneRect_ = + closeIconRect_ - Offset(horizonSpacing, verticalSpacing) + Size(horizonSpacing, verticalSpacing) * 2.0; + } else { + closeIconRect_ = Rect(); + closeIconHotZoneRect_ = Rect(); + } +} + +void RenderSearch::OnValueChanged(bool needFireChangeEvent) +{ + if (textEditController_) { + const auto& currentText = textEditController_->GetValue().text; + showCloseIcon_ = !currentText.empty(); + } +} + +void RenderSearch::CreateRenderImage(const RefPtr& searchComponent) +{ + if (!searchComponent) { + return; + } + if (!renderCloseIcon_ && (SystemProperties::GetDeviceType() != DeviceType::TV)) { + const auto& closeIconSrc = searchComponent->GetCloseIconSrc(); + RefPtr imageComponent; + if (closeIconSrc.empty()) { + imageComponent = AceType::MakeRefPtr(InternalResource::ResourceId::CLOSE_SVG); + } else { + imageComponent = AceType::MakeRefPtr(closeIconSrc); + } + imageComponent->SetWidth(searchComponent->GetCloseIconSize()); + imageComponent->SetHeight(searchComponent->GetCloseIconSize()); + + renderCloseIcon_ = AceType::DynamicCast(imageComponent->CreateRenderNode()); + if (!renderCloseIcon_) { + return; + } + renderCloseIcon_->Attach(GetContext()); + renderCloseIcon_->Update(imageComponent); + } +} + +void RenderSearch::CreateRenderButton(const RefPtr& searchComponent) +{ + if (!searchComponent) { + return; + } + if (searchComponent->GetSearchText().empty()) { + searchText_ = ""; + renderSearchBox_.Reset(); + return; + } + if (searchText_ != searchComponent->GetSearchText()) { + searchText_ = searchComponent->GetSearchText(); + renderSearchBox_.Reset(); + } + if (!renderSearchBox_ && (SystemProperties::GetDeviceType() != DeviceType::TV)) { + const auto& searchText = searchComponent->GetSearchText(); + const auto& textComponent = AceType::MakeRefPtr(searchText); + TextStyle textStyle; + textStyle.SetMaxLines(1); + textStyle.SetTextColor(SEARCH_BUTTON_TEXT_COLOR); + textStyle.SetFontSize(SEARCH_BUTTON_TEXT_FONT_SIZE); + textStyle.SetFontWeight(FontWeight::W500); + textComponent->SetTextStyle(textStyle); + auto renderText = AceType::DynamicCast(textComponent->CreateRenderNode()); + if (!renderText) { + return; + } + renderText->Attach(GetContext()); + renderText->Update(textComponent); + + auto boxComponent = AceType::MakeRefPtr(); + Edge edge = Edge(TEXT_PADDING, 0.0_vp, TEXT_PADDING, 0.0_vp); + boxComponent->SetPadding(edge); + boxComponent->SetHeight(SEARCH_TEXT_HEIGHT.Value(), SEARCH_TEXT_HEIGHT.Unit()); + renderSearchBox_ = AceType::DynamicCast(boxComponent->CreateRenderNode()); + if (!renderSearchBox_) { + return; + } + renderSearchBox_->Attach(GetContext()); + renderSearchBox_->Update(boxComponent); + renderSearchBox_->AddChild(renderText); + } +} + +bool RenderSearch::HandleEnterEvent() +{ + auto renderTextField = AceType::DynamicCast(GetChildren().front()); + if (!renderTextField || !textEditController_) { + return false; + } + + if (focusRender_ == SearchNodeType::IMAGE) { + renderTextField->SetNeedNotifyChangeEvent(true); + textEditController_->Clear(); + focusRender_ = SearchNodeType::NONE; + MarkNeedRender(); + return true; + } else if (focusRender_ == SearchNodeType::BUTTON) { + std::string searchKey = textEditController_->GetText(); + FireSubmitEvent(searchKey); + focusRender_ = SearchNodeType::NONE; + MarkNeedRender(); + return true; + } + return false; +} + +bool RenderSearch::HandleFocusEvent(bool vertical, bool reverse) +{ + if (vertical) { + focusRender_ = SearchNodeType::NONE; + return false; + } + if (!(showCloseIcon_ && renderCloseIcon_) && !renderSearchBox_) { + focusRender_ = SearchNodeType::NONE; + return false; + } + + auto renderTextField = AceType::DynamicCast(GetChildren().front()); + if (!renderTextField) { + focusRender_ = SearchNodeType::NONE; + return false; + } + bool result = false; + if ((showCloseIcon_ && renderCloseIcon_) && renderSearchBox_) { + if (focusRender_ == SearchNodeType::NONE) { + if (!reverse) { + focusRender_ = SearchNodeType::IMAGE; + result = true; + } + } else if (focusRender_ == SearchNodeType::IMAGE) { + if (!reverse) { + focusRender_ = SearchNodeType::BUTTON; + result = true; + } else { + focusRender_ = SearchNodeType::NONE; + renderTextField->UpdateFocusAnimation(); + result = true; + } + } else if (focusRender_ == SearchNodeType::BUTTON) { + if (reverse) { + focusRender_ = SearchNodeType::IMAGE; + result = true; + } + } + } else { + if (focusRender_ == SearchNodeType::NONE) { + if (!reverse) { + focusRender_ = renderSearchBox_ ? SearchNodeType::BUTTON : SearchNodeType::IMAGE; + result = true; + } + } else { + if (reverse) { + focusRender_ = SearchNodeType::NONE; + renderTextField->UpdateFocusAnimation(); + result = true; + } + } + } + if (result) { + MarkNeedRender(); + } + return result; +} + +bool RenderSearch::TouchTest(const Point& globalPoint, const Point& parentLocalPoint, + const TouchRestrict& touchRestrict, TouchTestResult& result) +{ + LOGD("OnTouchTest: type is %{public}s, the region is %{public}lf, %{public}lf, %{public}lf, %{public}lf", + GetTypeName(), GetTouchRect().Left(), GetTouchRect().Top(), GetTouchRect().Width(), GetTouchRect().Height()); + LOGD("OnTouchTest: the local point refer to parent is %{public}lf, %{public}lf, ", parentLocalPoint.GetX(), + parentLocalPoint.GetY()); + if (GetDisableTouchEvent() || disabled_) { + return false; + } + if (showCloseIcon_ && closeIconHotZoneRect_.IsInRegion(parentLocalPoint)) { + hoverOrPressRender_ = SearchNodeType::IMAGE; + } else if (searchTextRect_.IsInRegion(parentLocalPoint)) { + hoverOrPressRender_ = SearchNodeType::BUTTON; + } else { + hoverOrPressRender_ = SearchNodeType::NONE; + } + // Since the paintRect is relative to parent, use parent local point to perform touch test. + if (closeIconHotZoneRect_.IsInRegion(parentLocalPoint) || searchTextRect_.IsInRegion(parentLocalPoint)) { + // Calculates the coordinate offset in this node. + const auto localPoint = parentLocalPoint - GetPaintRect().GetOffset(); + const auto coordinateOffset = globalPoint - localPoint; + globalPoint_ = globalPoint; + OnTouchTestHit(coordinateOffset, touchRestrict, result); + return true; + } + if (GetPaintRect().IsInRegion(parentLocalPoint)) { + // Calculates the local point location in this node. + const auto localPoint = parentLocalPoint - GetPaintRect().GetOffset(); + bool dispatchSuccess = false; + for (auto iter = GetChildren().rbegin(); iter != GetChildren().rend(); ++iter) { + auto& child = *iter; + if (child->TouchTest(globalPoint, localPoint, touchRestrict, result)) { + dispatchSuccess = true; + break; + } + if (child->InterceptTouchEvent()) { + break; + } + } + return dispatchSuccess; + } + return false; +} + +void RenderSearch::OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) +{ + if (!rawRecognizer_) { + rawRecognizer_ = AceType::MakeRefPtr(); + auto weak = WeakClaim(this); + rawRecognizer_->SetOnTouchDown([weak = WeakClaim(this)](const TouchEventInfo& info) { + auto search = weak.Upgrade(); + if (search) { + search->overlayColor_ = search->pressColor_; + search->MarkNeedRender(); + } + }); + + rawRecognizer_->SetOnTouchUp([weak = WeakClaim(this)](const TouchEventInfo& info) { + auto search = weak.Upgrade(); + if (search) { + search->overlayColor_ = Color::TRANSPARENT; + search->MarkNeedRender(); + } + }); + + rawRecognizer_->SetOnTouchCancel([weak = WeakClaim(this)](const TouchEventInfo& info) { + auto search = weak.Upgrade(); + if (search) { + search->overlayColor_ = Color::TRANSPARENT; + search->MarkNeedRender(); + } + }); + } + rawRecognizer_->SetTouchRestrict(touchRestrict); + result.emplace_back(rawRecognizer_); + + if (!clickRecognizer_) { + clickRecognizer_ = AceType::MakeRefPtr(); + clickRecognizer_->SetOnClick([weak = WeakClaim(this)](const ClickInfo& info) { + auto search = weak.Upgrade(); + if (search) { + search->HandleClick(); + } + }); + } + clickRecognizer_->SetTouchRestrict(touchRestrict); + result.emplace_back(clickRecognizer_); +} + +void RenderSearch::HandleClick() +{ + auto renderTextField = AceType::DynamicCast(GetChildren().front()); + if (!renderTextField || !textEditController_) { + return; + } + + if (hoverOrPressRender_ == SearchNodeType::IMAGE) { + renderTextField->SetNeedNotifyChangeEvent(true); + textEditController_->Clear(); + auto onValueChange = renderTextField->GetOnValueChange(); + if (onValueChange) { + onValueChange(); + } + } else if (hoverOrPressRender_ == SearchNodeType::BUTTON) { + std::string searchKey = textEditController_->GetText(); + renderTextField->CloseKeyboard(true); + FireSubmitEvent(searchKey); + } +} + +bool RenderSearch::MouseHoverTest(const Point& parentLocalPoint) +{ + auto context = context_.Upgrade(); + if (!context) { + hoverOrPressRender_ = SearchNodeType::NONE; + return false; + } + if (!GetTouchRect().IsInRegion(parentLocalPoint)) { + if (mouseState_ == MouseState::HOVER) { + mouseState_ = MouseState::NONE; + hoverOrPressRender_ = SearchNodeType::NONE; + } + CancelTextFieldHover(); + return false; + } + context->AddToHoverList(AceType::WeakClaim(this).Upgrade()); + + if (showCloseIcon_ && closeIconHotZoneRect_.IsInRegion(parentLocalPoint)) { + if (mouseState_ == MouseState::NONE || hoverOrPressRender_ == SearchNodeType::BUTTON) { + mouseState_ = MouseState::HOVER; + hoverOrPressRender_ = SearchNodeType::IMAGE; + CancelTextFieldHover(); + return true; + } + } + + if (searchTextRect_.IsInRegion(parentLocalPoint)) { + if (mouseState_ == MouseState::NONE || hoverOrPressRender_ == SearchNodeType::IMAGE) { + mouseState_ = MouseState::HOVER; + hoverOrPressRender_ = SearchNodeType::BUTTON; + CancelTextFieldHover(); + return true; + } + } + + bool hoverInSearch = !searchTextRect_.IsInRegion(parentLocalPoint); + if (showCloseIcon_) { + hoverInSearch &= !closeIconHotZoneRect_.IsInRegion(parentLocalPoint); + } + if (hoverInSearch) { + hoverOrPressRender_ = SearchNodeType::NONE; + mouseState_ = MouseState::NONE; + + // Change textfield to hover. + auto renderTextField = AceType::DynamicCast(GetChildren().front()); + if (renderTextField) { + renderTextField->SetOverlayColor(hoverColor_); + renderTextField->MarkNeedRender(); + } + } + return true; +} + +void RenderSearch::CancelTextFieldHover() +{ + auto renderTextField = AceType::DynamicCast(GetChildren().front()); + if (renderTextField) { + renderTextField->SetOverlayColor(Color::TRANSPARENT); + renderTextField->MarkNeedRender(); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/search/render_search.h b/frameworks/core/components/search/render_search.h new file mode 100644 index 00000000..682c9a97 --- /dev/null +++ b/frameworks/core/components/search/render_search.h @@ -0,0 +1,104 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SEARCH_RENDER_SEARCH_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SEARCH_RENDER_SEARCH_H + +#include + +#include "core/components/box/render_box.h" +#include "core/components/button/render_button.h" +#include "core/components/image/render_image.h" +#include "core/components/padding/render_padding.h" +#include "core/components/search/search_component.h" +#include "core/components/text_field/render_text_field.h" +#include "core/gestures/click_recognizer.h" +#include "core/gestures/raw_recognizer.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +enum class SearchNodeType { + NONE = 0, + IMAGE, + BUTTON, + SEARCH, +}; + +class RenderSearch : public RenderNode, public ValueChangeObserver { + DECLARE_ACE_TYPE(RenderSearch, RenderNode, ValueChangeObserver); + +public: + static RefPtr Create(); + + void Update(const RefPtr& component) override; + void PerformLayout() override; + void OnValueChanged(bool needFireChangeEvent = true) override; + void FireSubmitEvent(const std::string& searchKey); + void SetShowCloseIcon(bool showCloseIcon) + { + showCloseIcon_ = showCloseIcon; + } + + bool HandleEnterEvent(); + bool HandleFocusEvent(bool vertical, bool reverse); + +protected: + bool TouchTest(const Point& globalPoint, const Point& parentLocalPoint, const TouchRestrict& touchRestrict, + TouchTestResult& result) override; + void OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) override; + + bool MouseHoverTest(const Point& parentLocalPoint) override; + + Dimension closeIconSize_; + Dimension closeIconHotZoneHorizontal_; + bool showCloseIcon_ = false; + bool needReverse_ = false; + std::string searchText_; + std::function changeEvent_; + std::function submitEvent_; + RefPtr renderCloseIcon_; + RefPtr renderSearchBox_; + RefPtr textEditController_; + RefPtr decoration_; + // Overlay color for hover and press. + Color overlayColor_ = Color::TRANSPARENT; + + Rect closeIconRect_; + Rect closeIconHotZoneRect_; + Rect searchTextRect_; + Offset searchBoxOffset_; + SearchNodeType focusRender_ = SearchNodeType::NONE; + SearchNodeType hoverOrPressRender_ = SearchNodeType::NONE; + +private: + void CreateRenderImage(const RefPtr& searchComponent); + void CreateRenderButton(const RefPtr& searchComponent); + + void InitRect(const RefPtr& renderTextField); + void CancelTextFieldHover(); + void HandleClick(); + + RefPtr clickRecognizer_; + RefPtr rawRecognizer_; + + Color hoverColor_; + Color pressColor_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SEARCH_RENDER_SEARCH_H diff --git a/frameworks/core/components/search/search_component.cpp b/frameworks/core/components/search/search_component.cpp new file mode 100644 index 00000000..509044de --- /dev/null +++ b/frameworks/core/components/search/search_component.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/search/search_component.h" + +#include "core/components/search/render_search.h" +#include "core/components/search/search_element.h" + +namespace OHOS::Ace { + +RefPtr SearchComponent::CreateRenderNode() +{ + return RenderSearch::Create(); +} + +RefPtr SearchComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/search/search_component.h b/frameworks/core/components/search/search_component.h new file mode 100644 index 00000000..66b38e97 --- /dev/null +++ b/frameworks/core/components/search/search_component.h @@ -0,0 +1,165 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SEARCH_SEARCH_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SEARCH_SEARCH_COMPONENT_H + +#include "base/resource/internal_resource.h" +#include "base/utils/utils.h" +#include "core/components/image/image_component.h" +#include "core/components/text_field/text_field_component.h" +#include "core/pipeline/base/constants.h" +#include "core/pipeline/base/element.h" +#include "core/pipeline/base/sole_child_component.h" + +namespace OHOS::Ace { + +class SearchComponent : public SoleChildComponent { + DECLARE_ACE_TYPE(SearchComponent, SoleChildComponent); + +public: + SearchComponent() = default; + ~SearchComponent() override = default; + + RefPtr CreateRenderNode() override; + RefPtr CreateElement() override; + + void SetCloseIconSize(const Dimension& closeIconSize) + { + closeIconSize_ = closeIconSize; + } + + const Dimension& GetCloseIconSize() const + { + return closeIconSize_; + } + + void SetCloseIconHotZoneHorizontal(const Dimension& closeIconHotZoneHorizontal) + { + closeIconHotZoneHorizontal_ = closeIconHotZoneHorizontal; + } + + const Dimension& GetCloseIconHotZoneHorizontal() const + { + return closeIconHotZoneHorizontal_; + } + + const std::string& GetSearchText() const + { + return searchText_; + } + + void SetSearchText(const std::string& searchText) + { + searchText_ = searchText; + } + + const std::string& GetCloseIconSrc() const + { + return closeIconSrc_; + } + + void SetCloseIconSrc(const std::string& closeIconSrc) + { + closeIconSrc_ = closeIconSrc; + } + + void SetChangeEventId(const EventMarker& changeEventId) + { + changeEventId_ = changeEventId; + } + + const EventMarker& GetChangeEventId() const + { + return changeEventId_; + } + + void SetSubmitEventId(const EventMarker& submitEventId) + { + submitEventId_ = submitEventId; + } + + const EventMarker& GetSubmitEventId() const + { + return submitEventId_; + } + + const RefPtr& GetTextEditController() const + { + return textEditController_; + } + + void SetTextEditController(const RefPtr& controller) + { + textEditController_ = controller; + } + + void SetSubmitEvent(const std::function& event) + { + submitEvent_ = event; + } + + const std::function& GetSubmitEvent() const + { + return submitEvent_; + } + + RefPtr GetDecoration() const + { + return decoration_; + } + + void SetDecoration(const RefPtr& decoration) + { + decoration_ = decoration; + } + + const Color& GetHoverColor() const + { + return hoverColor_; + } + + void SetHoverColor(const Color& hoverColor) + { + hoverColor_ = hoverColor; + } + + const Color& GetPressColor() const + { + return pressColor_; + } + + void SetPressColor(const Color& pressColor) + { + pressColor_ = pressColor; + } + +private: + Dimension closeIconSize_; + Dimension closeIconHotZoneHorizontal_; + std::string searchText_; + std::string closeIconSrc_; + EventMarker changeEventId_; + EventMarker submitEventId_; + RefPtr textEditController_; + std::function submitEvent_; + RefPtr decoration_; + Color hoverColor_; + Color pressColor_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SEARCH_SEARCH_COMPONENT_H diff --git a/frameworks/core/components/search/search_element.cpp b/frameworks/core/components/search/search_element.cpp new file mode 100644 index 00000000..032389a5 --- /dev/null +++ b/frameworks/core/components/search/search_element.cpp @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/search/search_element.h" + +#include "core/components/search/search_component.h" +#include "core/components/text_field/text_field_element.h" + +namespace OHOS::Ace { + +void SearchElement::PerformBuild() +{ + RefPtr search = AceType::DynamicCast(component_); + if (!search) { + return; + } + const auto& child = children_.empty() ? nullptr : children_.front(); + UpdateChild(child, search->GetChild()); +} + +bool SearchElement::OnKeyEvent(const KeyEvent& keyEvent) +{ + if (keyEvent.code == KeyCode::KEYBOARD_ENTER && keyEvent.action == KeyAction::UP) { + const auto& search = AceType::DynamicCast(renderNode_); + if (search) { + if (!search->HandleEnterEvent()) { + const auto& textField = AceType::DynamicCast(GetChildren().front()); + if (textField) { + return textField->OnKeyEvent(keyEvent); + } + } else { + return true; + } + } + return false; + } + return FocusGroup::OnKeyEvent(keyEvent); +} + +bool SearchElement::RequestNextFocus(bool vertical, bool reverse, const Rect& rect) +{ + const auto& renderSearch = AceType::DynamicCast(renderNode_); + if (!renderSearch) { + return false; + } + return renderSearch->HandleFocusEvent(vertical, reverse); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/search/search_element.h b/frameworks/core/components/search/search_element.h new file mode 100644 index 00000000..95adf6cc --- /dev/null +++ b/frameworks/core/components/search/search_element.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SEARCH_SEARCH_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SEARCH_SEARCH_ELEMENT_H + +#include "core/components/focus_animation/render_focus_animation.h" +#include "core/components/search/render_search.h" +#include "core/focus/focus_node.h" +#include "core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +class SearchElement : public RenderElement, public FocusGroup { + DECLARE_ACE_TYPE(SearchElement, RenderElement, FocusGroup); + +public: + void PerformBuild() override; + +protected: + bool OnKeyEvent(const KeyEvent& keyEvent) override; + bool RequestNextFocus(bool vertical, bool reverse, const Rect& rect) override; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SEARCH_SEARCH_ELEMENT_H diff --git a/frameworks/core/components/search/search_theme.h b/frameworks/core/components/search/search_theme.h new file mode 100644 index 00000000..e96e477c --- /dev/null +++ b/frameworks/core/components/search/search_theme.h @@ -0,0 +1,181 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SEARCH_SEARCH_THEME_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SEARCH_SEARCH_THEME_H + +#include "base/geometry/dimension.h" +#include "core/components/common/properties/border.h" +#include "core/components/common/properties/color.h" +#include "core/components/common/properties/edge.h" +#include "core/components/common/properties/radius.h" +#include "core/components/theme/theme.h" +#include "core/components/theme/theme_constants.h" + +namespace OHOS::Ace { + +/** + * SearchTheme defines color and styles of SearchComponent. SearchTheme should be built + * using SearchTheme::Builder. + */ +class SearchTheme : public virtual Theme { + DECLARE_ACE_TYPE(SearchTheme, Theme); + +public: + class Builder { + public: + Builder() = default; + ~Builder() = default; + + RefPtr Build(const RefPtr& themeConstants) const + { + RefPtr theme = AceType::Claim(new SearchTheme()); + if (!themeConstants) { + return theme; + } + theme->height_ = themeConstants->GetDimension(THEME_SEARCH_DEFAULT_HEIGHT); + theme->placeholderColor_ = themeConstants->GetColor(THEME_SEARCH_PLACEHOLDER_COLOR); + theme->focusPlaceholderColor_ = themeConstants->GetColor(THEME_SEARCH_FOCUS_PLACEHOLDER_COLOR); + theme->textColor_ = themeConstants->GetColor(THEME_SEARCH_TEXT_COLOR); + theme->focusTextColor_ = themeConstants->GetColor(THEME_SEARCH_FOCUS_TEXT_COLOR); + theme->fontSize_ = themeConstants->GetDimension(THEME_SEARCH_FONT_SIZE); + theme->iconSize_ = themeConstants->GetDimension(THEME_SEARCH_ICON_SIZE); + theme->closeIconSize_ = themeConstants->GetDimension(THEME_SEARCH_CLOSE_ICON_SIZE); + theme->closeIconHotZoneSize_ = themeConstants->GetDimension(THEME_SEARCH_CLOSE_ICON_HOT_ZONE_HORIZONTAL); + theme->textFieldWidthReserved_ = theme->closeIconHotZoneSize_; + theme->leftPadding_ = themeConstants->GetDimension(THEME_SEARCH_TEXT_FIELD_PADDING_LEFT); + theme->rightPadding_ = themeConstants->GetDimension(THEME_SEARCH_TEXT_FIELD_PADDING_RIGHT); + theme->fontWeight_ = FontWeight(themeConstants->GetInt(THEME_SEARCH_FONT_WEIGHT)); + theme->borderRadius_ = Radius(themeConstants->GetDimension(THEME_SEARCH_TEXT_FIELD_BORDER_RADIUS)); + theme->blockRightShade_ = themeConstants->GetInt(THEME_SEARCH_BLOCK_RIGHT_SHADE); + ParsePattern(themeConstants->GetThemeStyle(), theme); + return theme; + } + + private: + void ParsePattern(const RefPtr& themeStyle, const RefPtr& theme) const + { + if (!themeStyle || !theme) { + return; + } + theme->placeholderColor_ = themeStyle->GetAttr(SEARCH_PLACEHOLDER_COLOR, Color()); + theme->focusPlaceholderColor_ = themeStyle->GetAttr(SEARCH_PLACEHOLDER_COLOR, Color()); + theme->textColor_ = themeStyle->GetAttr(SEARCH_TEXT_COLOR, Color()); + theme->focusTextColor_ = themeStyle->GetAttr(SEARCH_TEXT_COLOR, Color()); + theme->fontSize_ = themeStyle->GetAttr(SEARCH_TEXT_FONT_SIZE, 0.0_fp); + } + }; + + ~SearchTheme() override = default; + + const Color& GetPlaceholderColor() const + { + return placeholderColor_; + } + + const Color& GetFocusPlaceholderColor() const + { + return focusPlaceholderColor_; + } + + const Color& GetTextColor() const + { + return textColor_; + } + + const Color& GetFocusTextColor() const + { + return focusTextColor_; + } + + const Dimension& GetHeight() const + { + return height_; + } + + const Dimension& GetFontSize() const + { + return fontSize_; + } + + const Dimension& GetIconSize() const + { + return iconSize_; + } + + const Dimension& GetCloseIconSize() const + { + return closeIconSize_; + } + + const Dimension& GetCloseIconHotZoneSize() const + { + return closeIconHotZoneSize_; + } + + const Dimension& GetTextFieldWidthReserved() const + { + return textFieldWidthReserved_; + } + + const Dimension& GetLeftPadding() const + { + return leftPadding_; + } + + const Dimension& GetRightPadding() const + { + return rightPadding_; + } + + const FontWeight& GetFontWeight() const + { + return fontWeight_; + } + + const Radius& GetBorderRadius() const + { + return borderRadius_; + } + + bool GetBlockRightShade() const + { + return blockRightShade_; + } + +protected: + SearchTheme() = default; + +private: + Color placeholderColor_; + Color focusPlaceholderColor_; + Color textColor_; + Color focusTextColor_; + Dimension height_; + Dimension fontSize_; + Dimension iconSize_; + Dimension closeIconSize_; + Dimension closeIconHotZoneSize_; + Dimension textFieldWidthReserved_; + Dimension leftPadding_; + Dimension rightPadding_; + FontWeight fontWeight_ = FontWeight::NORMAL; + Radius borderRadius_; + bool blockRightShade_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SEARCH_SEARCH_THEME_H diff --git a/frameworks/core/components/select/BUILD.gn b/frameworks/core/components/select/BUILD.gn new file mode 100644 index 00000000..0ecfd85c --- /dev/null +++ b/frameworks/core/components/select/BUILD.gn @@ -0,0 +1,22 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("select") { + sources = [ + "render_select.cpp", + "select_component.cpp", + "select_element.cpp", + ] +} diff --git a/frameworks/core/components/select/render_select.cpp b/frameworks/core/components/select/render_select.cpp new file mode 100644 index 00000000..4bde8c4f --- /dev/null +++ b/frameworks/core/components/select/render_select.cpp @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/select/render_select.h" + +#include "base/log/log.h" +#include "core/event/ace_event_helper.h" + +namespace OHOS::Ace { + +void RenderSelect::OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) +{ + LOGD("RenderSelect::OnTouchTestHit(%{public}lf, %{public}lf).", coordinateOffset.GetX(), coordinateOffset.GetY()); + if (clickRecognizer_) { + result.emplace_back(clickRecognizer_); + } + + if (rawRecognizer_) { + result.emplace_back(rawRecognizer_); + } +} + +void RenderSelect::Update(const RefPtr& component) +{ + data_ = AceType::DynamicCast(component); + MarkNeedLayout(); +} + +void RenderSelect::PerformLayout() +{ + auto children = GetChildren(); + if (children.empty()) { + LOGE("select: there has no child."); + return; + } + + auto child = children.front(); + if (!child) { + LOGE("select: there has no child now in render select."); + return; + } + + LOGD("RenderSelect::PerformLayout: %{public}s.", AceType::TypeName(child)); + child->Layout(GetLayoutParam()); + selectSize_ = child->GetLayoutSize(); + selectSize_ = GetLayoutParam().Constrain(selectSize_); + SetLayoutSize(selectSize_); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/select/render_select.h b/frameworks/core/components/select/render_select.h new file mode 100644 index 00000000..8d9cf841 --- /dev/null +++ b/frameworks/core/components/select/render_select.h @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SELECT_RENDER_SELECT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SELECT_RENDER_SELECT_H + +#include "core/components/common/properties/color.h" +#include "core/components/select/select_component.h" +#include "core/components/touch_listener/render_touch_listener.h" +#include "core/gestures/click_recognizer.h" +#include "core/gestures/raw_recognizer.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderSelect : public RenderNode { + DECLARE_ACE_TYPE(RenderSelect, RenderNode); + +public: + void Update(const RefPtr& component) override; + void PerformLayout() override; + + void OnPaintFinish() override + { + if (onFocusCallback_) { + onFocusCallback_(); + } + } + + void SetFocusCallback(const std::function& value) + { + onFocusCallback_ = value; + } + + void SetClickRecognizer(const RefPtr& clickRecognizer) + { + clickRecognizer_ = clickRecognizer; + } + + void SetRawRecognizer(const RefPtr& rawRecognizer) + { + rawRecognizer_ = rawRecognizer; + } + +protected: + void OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) override; + + Size selectSize_; + RefPtr clickRecognizer_; + RefPtr rawRecognizer_; + RefPtr data_; + std::function onFocusCallback_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SELECT_RENDER_SELECT_H diff --git a/frameworks/core/components/select/select_component.cpp b/frameworks/core/components/select/select_component.cpp new file mode 100644 index 00000000..6bfd22d7 --- /dev/null +++ b/frameworks/core/components/select/select_component.cpp @@ -0,0 +1,190 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/select/select_component.h" + +#include "base/utils/string_utils.h" +#include "core/components/clip/clip_component.h" +#include "core/components/flex/flex_item_component.h" +#include "core/components/list/list_component.h" +#include "core/components/select/render_select.h" +#include "core/components/select/select_element.h" +#include "core/components/triangle/triangle_component.h" + +namespace OHOS::Ace { +namespace { + +constexpr uint32_t SELECT_ITSELF_TEXT_LINES = 1; + +} + +SelectComponent::SelectComponent() : SoleChildComponent() +{ + popup_ = AceType::MakeRefPtr(); + // the round radius is half of height which is 40dp. + border_.SetBorderRadius(Radius(20.0_vp)); +} + +void SelectComponent::InitTheme(const RefPtr& themeManager) +{ + if (!themeManager) { + return; + } + popup_->InitTheme(themeManager); +#if defined(WINDOWS_PLATFORM) || defined(MAC_PLATFORM) + popup_->SetSelectPopupId(GetNodeId()); +#endif + auto selectTheme = themeManager->GetTheme(); + if (!selectTheme) { + return; + } + theme_ = selectTheme->clone(); + theme_->SetFontWeight(FontWeight::W500); + + innerPadding_ = + Edge(8.0, 9.25, 8.0, 9.25, DimensionUnit::VP); // the best effect for round triangle. +} + +bool SelectComponent::Initialize() +{ + if (!tipText_) { + LOGE("can not initialize, tip text is null."); + return false; + } + + RefPtr icon = AceType::MakeRefPtr(); + icon->SetWidth(10.0_vp); // the with is 10dp from doc. + icon->SetHeight(6.0_vp); // the height is 7dp from doc. reduce 1dp for triangle inner. + + RefPtr space = AceType::MakeRefPtr(); + space->SetDeliverMinToChild(false); + space->SetAlignment(Alignment::CENTER); + // the space between text and triangle is 8dp from doc. + Edge spaceEdge(8.0, 0.0, 0.0, 0.0, DimensionUnit::VP); + if (GetTextDirection() == TextDirection::RTL) { + spaceEdge.SetRight(spaceEdge.Left()); + spaceEdge.SetLeft(0.0_vp); + } + space->SetPadding(spaceEdge); + space->SetChild(icon); + + TextStyle textStyle = tipText_->GetTextStyle(); + textStyle.SetAllowScale(theme_->IsAllowScale()); + textStyle.SetTextDecoration(theme_->GetTextDecoration()); + textStyle.SetFontSize(theme_->GetFontSize()); + textStyle.SetFontWeight(theme_->GetFontWeight()); + if (disabled_) { + textStyle.SetTextColor(theme_->GetDisabledColor()); + } else { + textStyle.SetTextColor(theme_->GetFontColor()); + } + std::vector fontFamilies; + StringUtils::StringSpliter(theme_->GetFontFamily(), ',', fontFamilies); + if (!fontFamilies.empty()) { + textStyle.SetFontFamilies(fontFamilies); + } + textStyle.SetMaxLines(SELECT_ITSELF_TEXT_LINES); + textStyle.SetTextOverflow(TextOverflow::ELLIPSIS); + tipText_->SetTextStyle(textStyle); + tipText_->SetFocusColor(textStyle.GetTextColor()); + icon->SetColor(textStyle.GetTextColor()); + RefPtr textItem = AceType::MakeRefPtr(0.0, 1.0, 0.0, tipText_); + + RefPtr row = + AceType::MakeRefPtr(FlexAlign::CENTER, FlexAlign::CENTER, std::list>()); + row->SetMainAxisSize(MainAxisSize::MIN); + if (GetTextDirection() == TextDirection::RTL) { + row->AppendChild(space); + row->AppendChild(textItem); + } else { + row->AppendChild(textItem); + row->AppendChild(space); + } + + RefPtr backDecoration = AceType::MakeRefPtr(); + backDecoration->SetBackgroundColor(backgroundColor_); + backDecoration->SetBorder(border_); + + RefPtr box = AceType::MakeRefPtr(); + box->SetDeliverMinToChild(false); + box->SetAlignment(Alignment::CENTER); + box->SetBackDecoration(backDecoration); + box->SetPadding(innerPadding_); + box->SetWidth(width_.Value(), width_.Unit()); + box->SetHeight(height_.Value(), width_.Unit()); + box->SetChild(AceType::MakeRefPtr(row)); + boxComponent_ = box; + boxComponent_->SetMouseAnimationType(HoverAnimationType::OPACITY); + SetChild(box); + + return true; +} + +RefPtr SelectComponent::CreateRenderNode() +{ + return AceType::MakeRefPtr(); +} + +RefPtr SelectComponent::CreateElement() +{ + LOGD("select: create element."); + auto refPtr = AceType::MakeRefPtr(); + flushRefreshCallback_ = [weakPtr = WeakPtr(refPtr)]() { + auto element = weakPtr.Upgrade(); + if (!element) { + return; + } + element->FlushRefresh(); + }; + return refPtr; +} + +void SelectComponent::SetClicked(bool clicked, const Color& pressColor) +{ + clicked_ = clicked; + if (!boxComponent_) { + LOGE("select: box is null, can not set background color when click changed."); + return; + } + + auto backDecoration = boxComponent_->GetBackDecoration(); + if (!backDecoration) { + backDecoration = AceType::MakeRefPtr(); + } + backDecoration->SetBackgroundColor(backgroundColor_.BlendColor(pressColor)); + boxComponent_->SetBackDecoration(backDecoration); +} + +RefPtr SelectComponent::GetPopup() const +{ + if (!popup_) { + LOGE("select: popup is null now."); + return nullptr; + } + + return popup_; +} + +RefPtr SelectComponent::GetBoxComponent() const +{ + if (!boxComponent_) { + LOGE("select: box component of background color is null."); + return nullptr; + } + + return boxComponent_; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/select/select_component.h b/frameworks/core/components/select/select_component.h new file mode 100644 index 00000000..71c40182 --- /dev/null +++ b/frameworks/core/components/select/select_component.h @@ -0,0 +1,354 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SELECT_SELECT_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SELECT_SELECT_COMPONENT_H + +#include + +#include "base/geometry/dimension.h" +#include "core/components/box/box_component.h" +#include "core/components/common/properties/color.h" +#include "core/components/select/select_theme.h" +#include "core/components/select_popup/select_popup_component.h" +#include "core/components/text/text_component.h" +#include "core/pipeline/base/sole_child_component.h" + +namespace OHOS::Ace { + +class SelectComponent : public SoleChildComponent { + DECLARE_ACE_TYPE(SelectComponent, SoleChildComponent); + +public: + SelectComponent(); + ~SelectComponent() override = default; + + RefPtr CreateRenderNode() override; + RefPtr CreateElement() override; + + void InitTheme(const RefPtr& themeManager); + + void SetTextDirection(TextDirection direction) override + { + SoleChildComponent::SetTextDirection(direction); + if (popup_) { + popup_->SetTextDirection(direction); + } else { + LOGE("popup component of select is null."); + } + } + + bool GetDisabled() const + { + return disabled_; + } + void SetDisabled(bool disabled) + { + disabled_ = disabled; + } + + bool GetClicked() const + { + return clicked_; + } + void SetClicked(bool clicked, const Color& pressColor); + + const Color& GetClickedColor() const + { + return theme_->GetClickedColor(); + } + void SetClickedColor(const Color& clickedColor) + { + theme_->SetClickedColor(clickedColor); + } + + const Color& GetSelectedColor() const + { + return theme_->GetSelectedColor(); + } + void SetSelectedColor(const Color& selectedColor) + { + theme_->SetSelectedColor(selectedColor); + } + + const Color& GetDisabledColor() const + { + return theme_->GetDisabledColor(); + } + void SetDisabledColor(const Color& disabledColor) + { + theme_->SetDisabledColor(disabledColor); + } + + bool IsAllowScale() const + { + return theme_->IsAllowScale(); + } + void SetAllowScale(bool value) + { + theme_->SetAllowScale(value); + } + + const Color& GetTextColor() const + { + return theme_->GetFontColor(); + } + void SetTextColor(const Color& value) + { + theme_->SetFontColor(value); + } + + FontWeight GetFontWeight() const + { + return theme_->GetFontWeight(); + } + void SetFontWeight(FontWeight value) + { + theme_->SetFontWeight(value); + } + + TextDecoration GetTextDecoration() const + { + return theme_->GetTextDecoration(); + } + void SetTextDecoration(TextDecoration value) + { + theme_->SetTextDecoration(value); + } + + const EventMarker& GetOnChanged() const + { + return onChanged_; + } + void SetOnChanged(const EventMarker& onChanged) + { + onChanged_ = onChanged; + } + + const RefPtr& GetTipText() const + { + return tipText_; + } + void SetTipText(const RefPtr& tipText) + { + tipText_ = tipText; + } + + bool IsFontSet() const + { + return isSelectFontSize_; + } + + void SetIsFontSetFlag(bool flag) + { + isSelectFontSize_ = flag; + } + + const Dimension& GetFontSize() const + { + return theme_->GetFontSize(); + } + void SetFontSize(const Dimension& fontSize) + { + theme_->SetFontSize(fontSize); + } + + const std::string& GetFontFamily() const + { + return theme_->GetFontFamily(); + } + void SetFontFamily(const std::string& fontFamily) + { + theme_->SetFontFamily(fontFamily); + } + + std::size_t GetOptionSize() const + { + return theme_->GetOptionSize(); + } + void SetOptionSize(std::size_t optionSize) + { + theme_->SetOptionSize(optionSize); + } + + const Dimension& GetRRectSize() const + { + return theme_->GetRRectSize(); + } + void SetRRectSize(const Dimension& rrectSize) + { + theme_->SetRRectSize(rrectSize); + } + + const Dimension& GetPopupShadowWidth() const + { + return theme_->GetPopupShadowWidth(); + } + void SetPopupShadowWidth(const Dimension& popupShadowWidth) + { + theme_->SetPopupShadowWidth(popupShadowWidth); + } + + const Dimension& GetPopupBorderWidth() const + { + return theme_->GetPopupBorderWidth(); + } + void SetPopupBorderWidth(const Dimension& popupBorderWidth) + { + theme_->SetPopupBorderWidth(popupBorderWidth); + } + + const Dimension& GetNormalPadding() const + { + return theme_->GetNormalPadding(); + } + + void SetOptionClickedCallback(const std::function& clickedCallback) + { + if (popup_) { + popup_->SetOptionClickedCallback(clickedCallback); + } + } + + void SetOptionModifiedCallback(const std::function& value) + { + if (popup_) { + popup_->SetOptionModifiedCallback(value); + } + } + + std::size_t GetSelectOptionCount() const + { + if (!popup_) { + return 0; + } + + return popup_->GetSelectOptionCount(); + } + + RefPtr GetSelectOption(std::size_t index) + { + if (!popup_) { + return nullptr; + } + + return popup_->GetSelectOption(index); + } + + void ClearAllOptions() + { + if (popup_) { + popup_->ClearAllOptions(); + } + } + + void AppendSelectOption(const RefPtr& selectOption) + { + if (popup_) { + popup_->AppendSelectOption(selectOption); + } + } + + void RemoveSelectOption(const RefPtr& selectOption) + { + if (popup_) { + popup_->RemoveSelectOption(selectOption); + } + } + + void InsertSelectOption(const RefPtr& selectOption, uint32_t index) + { + if (popup_) { + popup_->InsertSelectOption(selectOption, index); + } + } + + RefPtr GetPopup() const; + + RefPtr GetBoxComponent() const; + + bool Initialize(); + + void FlushRefresh() + { + if (flushRefreshCallback_) { + flushRefreshCallback_(); + } + } + + void SetBackgroundColor(const Color& value) + { + backgroundColor_ = value; + } + + void SetInnerPadding(const Edge& innerPadding) + { + innerPadding_ = innerPadding; + } + + void SetInnerSize(const Dimension& width, const Dimension& height) + { + width_ = width; + height_ = height; + } + + void SetInnerBorder(const Border& border) + { + border_ = border; + } + + const Border& GetInnerBorder() const + { + return border_; + } + + // used for inspector node in PC preview + void SetNodeId(const int32_t nodeId) + { + nodeId_ = nodeId; + } + + // used for inspector node in PC preview + int32_t GetNodeId() const + { + return nodeId_; + } + +private: + bool disabled_ { false }; + bool clicked_ { false }; + EventMarker onChanged_; + RefPtr tipText_; + RefPtr popup_; + RefPtr boxComponent_; + RefPtr theme_; + std::function flushRefreshCallback_; + Color backgroundColor_ = Color::TRANSPARENT; + + // used for inspector node in PC preview + int32_t nodeId_ = -1; + + // used in navigation + bool isSelectFontSize_ = false; + Edge innerPadding_; + + Dimension width_ = -1.0_px; + Dimension height_ = -1.0_px; + Border border_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SELECT_SELECT_COMPONENT_H diff --git a/frameworks/core/components/select/select_element.cpp b/frameworks/core/components/select/select_element.cpp new file mode 100644 index 00000000..589230ed --- /dev/null +++ b/frameworks/core/components/select/select_element.cpp @@ -0,0 +1,449 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/select/select_element.h" + +#include "core/components/box/render_box.h" +#include "core/components/positioned/positioned_component.h" +#include "core/components/root/render_root.h" +#include "core/components/select/render_select.h" +#include "core/components/select/select_component.h" +#include "core/components/select/select_theme.h" +#include "core/components/select_popup/select_popup_component.h" +#include "core/components/stack/stack_element.h" +#include "core/components/text/render_text.h" +#include "core/event/ace_event_helper.h" +#include "core/gestures/click_recognizer.h" + +namespace OHOS::Ace { + +void SelectElement::PerformBuild() +{ + LOGD("SelectElement::PerformBuild"); + RefPtr clickRecognizer = AceType::MakeRefPtr(); + clickRecognizer->SetOnClick([weak = AceType::WeakClaim(this)](const ClickInfo&) { + auto element = weak.Upgrade(); + if (element) { + element->HandleClickedEvent(); + } + }); + RefPtr rawRecognizer = AceType::MakeRefPtr(); + rawRecognizer->SetOnTouchDown([weak = AceType::WeakClaim(this)](const TouchEventInfo&) { + auto element = weak.Upgrade(); + if (element) { + element->HandleTouchEvent(true); + } + }); + rawRecognizer->SetOnTouchUp([weak = AceType::WeakClaim(this)](const TouchEventInfo&) { + auto element = weak.Upgrade(); + if (element) { + element->HandleTouchEvent(false); + } + }); + rawRecognizer->SetOnTouchCancel([weak = AceType::WeakClaim(this)](const TouchEventInfo&) { + auto element = weak.Upgrade(); + if (element) { + element->HandleTouchEvent(false); + } + }); + + RefPtr render = AceType::DynamicCast(renderNode_); + if (render) { + render->SetClickRecognizer(clickRecognizer); + render->SetRawRecognizer(rawRecognizer); + } else { + LOGE("select: can not get render node of select by dynamic cast failed."); + } + + RefPtr component = AceType::DynamicCast(component_); + if (!component || !component->Initialize()) { + LOGE("select: can not get component of select by dynamic cast failed or initialize failed."); + return; + } + + normalPadding_ = component->GetNormalPadding(); + auto weak = AceType::WeakClaim(this); + component->SetOptionClickedCallback([weak](std::size_t index) { + auto refPtr = weak.Upgrade(); + if (refPtr) { + refPtr->HandleOptionClickedEvent(index); + } + }); + component->SetOptionModifiedCallback([weak](std::size_t index) { + auto refPtr = weak.Upgrade(); + if (refPtr) { + refPtr->HandleOptionModifiedEvent(index); + } + }); + render->SetFocusCallback([weak] { + auto ref = weak.Upgrade(); + if (ref && ref->IsCurrentFocus()) { + ref->OnFocus(); + } + }); + + if (context_.Invalid() || component->GetOnChanged().IsEmpty()) { + LOGE("select: can not set callback of onchange for it is null."); + } else { + onChangeCallback_ = AceAsyncEvent::Create(component->GetOnChanged(), context_); + } + + dataComponent_ = component; + + auto focusNode = AceType::DynamicCast(this); + if (!focusNode) { + LOGE("select: can not dynamicCast to focusNode."); + return; + } + focusNode->SetFocusable(!component->GetDisabled()); + + SoleChildElement::PerformBuild(); +} + +void SelectElement::HandleClickedEvent() +{ + const auto pipeline = context_.Upgrade(); + if (!pipeline) { + LOGE("select: can not show dialog, inner pipeline is null."); + return; + } + + auto stackElement = pipeline->GetLastStack(); + if (!stackElement) { + LOGE("select: can not get last stack from pipeline context."); + return; + } + + RefPtr select = AceType::DynamicCast(dataComponent_); + if (!select || select->GetDisabled()) { + LOGE("select: the component of select is null or disabled now."); + return; + } + + RefPtr selectPopup = AceType::DynamicCast(select->GetPopup()); + if (!selectPopup) { + LOGE("select: the type of popup component is not SelectPopupComponent."); + return; + } + + RefPtr render = AceType::DynamicCast(renderNode_); + if (!render) { + LOGE("select: can not get render node of select by dynamic cast failed."); + return; + } + + if (!RequestFocusImmediately()) { + LOGE("OnClick can not request SelectElement's focus successfully"); + } + + LOGD("SelectElement::HandleClickedEvent"); + if (selectPopup->GetDialogShowed()) { + // hide + selectPopup->HideDialog(SELECT_INVALID_INDEX); + } else { + // show + Offset leftTop = render->GetOffsetToStage(); + Offset rightBottom = leftTop + render->GetLayoutSize(); + selectPopup->SetDefaultSelecting(); + selectPopup->ShowDialog(stackElement, leftTop, rightBottom, false); + } +} + +void SelectElement::HandleTouchEvent(bool isDown) +{ + LOGD("SelectElement::HandleTouchEvent"); + auto component = AceType::DynamicCast(dataComponent_); + if (!component) { + LOGE("select: the component of select is null now."); + return; + } + if (component->GetDisabled()) { + LOGW("select: the component of select is disabled now."); + return; + } + auto endColor = isDown ? component->GetClickedColor() : Color::TRANSPARENT; + PlayEventEffectAnimation(isDown, endColor); +} + +void SelectElement::HandleOptionModifiedEvent(std::size_t index) +{ + RefPtr component = AceType::DynamicCast(dataComponent_); + if (!component) { + LOGE("select: the component of select is null now."); + return; + } + + auto option = component->GetSelectOption(index); + if (!option) { + LOGE("select: can not get option of index[%{public}u].", static_cast(index)); + return; + } + + auto tagText = component->GetTipText(); + if (!tagText) { + LOGE("select: can not get current text."); + return; + } + + auto selText = option->GetText(); + if (!selText) { + LOGE("select: can not get select text."); + return; + } + + tagText->SetData(selText->GetData()); + + RefPtr render = GetRenderText(); + if (!render) { + LOGE("select:can not get render text now."); + return; + } + + render->Update(tagText); +} + +void SelectElement::FlushRefresh() +{ + if (children_.empty()) { + return; + } + RefPtr component = AceType::DynamicCast(dataComponent_); + if (!component) { + LOGE("select: the component of select is null now."); + return; + } + component->Initialize(); + const auto& child = children_.front(); + RemoveChild(child); + InflateComponent(dataComponent_, DEFAULT_ELEMENT_SLOT); +} + +void SelectElement::HandleOptionClickedEvent(std::size_t index) +{ + HandleOptionModifiedEvent(index); + + RefPtr component = AceType::DynamicCast(dataComponent_); + if (!component) { + LOGE("select: the component of select is null now."); + return; + } + + auto option = component->GetSelectOption(index); + if (!option) { + LOGE("select: can not get option of index[%{public}u].", static_cast(index)); + return; + } + + if (onChangeCallback_) { + std::string param = std::string("\"change\",{\"newValue\":\"").append(option->GetValue().append("\"},null")); + onChangeCallback_(param); + } +} + +RefPtr SelectElement::GetRenderText() const +{ + auto box = GetRenderBox(); + if (!box) { + LOGE("select: can not get render node of box by function[GetRenderBox]."); + return nullptr; + } + + if (box->GetChildren().empty()) { + LOGE("select: there has no child in box."); + return nullptr; + } + + auto inner = box->GetChildren().front(); + if (!inner) { + LOGE("inner component is null"); + return nullptr; + } + + if (inner->GetChildren().empty()) { + LOGE("inner component is empty"); + return nullptr; + } + + auto row = inner->GetChildren().front(); + if (!row) { + LOGE("select: can not get render node of row by first child."); + return nullptr; + } + + if (row->GetChildren().empty()) { + LOGE("select: there has no child in box."); + return nullptr; + } + + for (const auto& child : row->GetChildren()) { + auto textItem = AceType::DynamicCast(child); + if (textItem) { + for (const auto& text : textItem->GetChildren()) { + auto renderText = AceType::DynamicCast(text); + if (renderText) { + return renderText; + } + } + } + } + + LOGE("select: there has no child in row's all children."); + return nullptr; +} + +RefPtr SelectElement::GetRenderBox() const +{ + RefPtr select = AceType::DynamicCast(renderNode_); + if (!select) { + LOGE("select: can not get render node of select by dynamic cast failed."); + return nullptr; + } + + if (select->GetChildren().empty()) { + LOGE("select: there has no child in render select."); + return nullptr; + } + + auto box = select->GetChildren().front(); + if (!box) { + LOGE("select: can not get render node of box by first child."); + return nullptr; + } + + auto renderBox = AceType::DynamicCast(box); + if (!renderBox) { + LOGE("select: can not get render node of box by dynamic cast."); + return nullptr; + } + + return renderBox; +} + +void SelectElement::OnClick() +{ + HandleClickedEvent(); +} + +Corner SelectElement::GetCorner() const +{ + RefPtr component = AceType::DynamicCast(dataComponent_); + Corner corner; + if (!component) { + LOGE("select: the component of select is null now."); + return corner; + } + + const auto& border = component->GetInnerBorder(); + corner.topLeftRadius = border.TopLeftRadius(); + corner.topRightRadius = border.TopRightRadius(); + corner.bottomLeftRadius = border.BottomLeftRadius(); + corner.bottomRightRadius = border.BottomRightRadius(); + return corner; +} + +void SelectElement::OnFocus() +{ + auto render = GetRenderBox(); + if (!render) { + return; + } + auto pipe = context_.Upgrade(); + if (!pipe) { + return; + } + RefPtr data = AceType::DynamicCast(dataComponent_); + if (!data) { + return; + } + Size size = render->GetLayoutSize(); + Rect rect(0.0, 0.0, size.Width(), size.Height()); + RRect rrect; + rrect.SetRect(rect); + auto corner = GetCorner(); + rrect.SetCorner(corner); + Offset offset = render->GetGlobalOffset(); + pipe->ShowFocusAnimation(rrect, data->GetClickedColor(), offset, true); +} + +void SelectElement::OnBlur() +{ + HandleTouchEvent(false); +} + +void SelectElement::SetBackgroundColor(bool isDown, const Color& color) +{ + auto component = AceType::DynamicCast(dataComponent_); + if (!component) { + LOGE("select: the component of select is null now."); + return; + } + if (component->GetDisabled()) { + return; + } + component->SetClicked(isDown, color); + auto boxComponent = component->GetBoxComponent(); + if (!boxComponent) { + LOGE("select: can not get box component of select."); + return; + } + auto boxRender = GetRenderBox(); + if (!boxRender) { + LOGE("select: can not get box render by function[GetRenderBox]."); + return; + } + // Change background color of box of select. + boxRender->Update(boxComponent); +} + +void SelectElement::CreateColorAnimation(RefPtr>& animation, const Color& from, + const Color& to, bool isDown) +{ + if (!animation) { + return; + } + auto start = AceType::MakeRefPtr>(0.0f, from); + auto end = AceType::MakeRefPtr>(1.0f, to); + end->SetCurve(Curves::SHARP); + animation->AddKeyframe(start); + animation->AddKeyframe(end); + animation->SetEvaluator(AceType::MakeRefPtr()); + animation->AddListener([weak = AceType::WeakClaim(this), isDown](const Color& value) { + auto select = weak.Upgrade(); + if (select) { + select->eventEffectColor_ = value; + select->SetBackgroundColor(isDown, value); + } + }); +} + +void SelectElement::PlayEventEffectAnimation(bool isDown, const Color& endColor) +{ + if (!eventEffectController_) { + eventEffectController_ = AceType::MakeRefPtr(context_); + } + if (!eventEffectController_->IsStopped()) { + eventEffectController_->Stop(); + } + auto colorAnimation = AceType::MakeRefPtr>(); + CreateColorAnimation(colorAnimation, eventEffectColor_, endColor, isDown); + eventEffectController_->ClearInterpolators(); + eventEffectController_->ClearStopListeners(); + eventEffectController_->AddInterpolator(colorAnimation); + eventEffectController_->SetDuration(PRESS_DURATION); + eventEffectController_->SetFillMode(FillMode::FORWARDS); + eventEffectController_->Forward(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/select/select_element.h b/frameworks/core/components/select/select_element.h new file mode 100644 index 00000000..1d8aa6b1 --- /dev/null +++ b/frameworks/core/components/select/select_element.h @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SELECT_SELECT_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SELECT_SELECT_ELEMENT_H + +#include "core/components/text/text_component.h" +#include "core/pipeline/base/sole_child_element.h" + +namespace OHOS::Ace { + +class SelectElement : public SoleChildElement, public FocusNode { + DECLARE_ACE_TYPE(SelectElement, SoleChildElement, FocusNode); + +public: + void PerformBuild() override; + + bool CanUpdate(const RefPtr& newComponent) override + { + return false; + } + + void FlushRefresh(); + +protected: + void OnClick() override; + void OnFocus() override; + void OnBlur() override; + +private: + void HandleClickedEvent(); + void HandleTouchEvent(bool isDown); + void HandleOptionClickedEvent(std::size_t index); + void HandleOptionModifiedEvent(std::size_t index); + Corner GetCorner() const; + void SetBackgroundColor(bool isDown, const Color& color); + void CreateColorAnimation(RefPtr>& animation, + const Color& from, const Color& to, bool isDown); + void PlayEventEffectAnimation(bool isDown, const Color& endColor); + RefPtr GetRenderText() const; + RefPtr GetRenderBox() const; + + RefPtr dataComponent_; + std::function onChangeCallback_; + Dimension normalPadding_; + Color eventEffectColor_ = Color::TRANSPARENT; + RefPtr eventEffectController_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SELECT_SELECT_ELEMENT_H diff --git a/frameworks/core/components/select/select_theme.h b/frameworks/core/components/select/select_theme.h new file mode 100644 index 00000000..3465bef9 --- /dev/null +++ b/frameworks/core/components/select/select_theme.h @@ -0,0 +1,545 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SELECT_SELECT_THEME_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SELECT_SELECT_THEME_H + +#include "base/geometry/dimension.h" +#include "core/components/common/layout/constants.h" +#include "core/components/common/properties/color.h" +#include "core/components/common/properties/text_style.h" +#include "core/components/theme/theme.h" +#include "core/components/theme/theme_constants.h" + +namespace OHOS::Ace { + +/** + * SelectTheme defines color and styles of SelectComponent. SelectTheme should be build + * using SelectTheme::Builder. + */ +class SelectTheme final : public virtual Theme { + DECLARE_ACE_TYPE(SelectTheme, Theme); + +public: + class Builder final { + public: + Builder() = default; + ~Builder() = default; + + RefPtr Build(const RefPtr& themeConstants) const + { + RefPtr theme = AceType::Claim(new SelectTheme()); + if (!themeConstants) { + return theme; + } + theme->disabledColor_ = themeConstants->GetColor(THEME_SELECT_DISABLED_COLOR); + theme->clickedColor_ = themeConstants->GetColor(THEME_SELECT_CLICKED_COLOR); + theme->selectedColor_ = themeConstants->GetColor(THEME_SELECT_SELECTED_COLOR); + theme->fontFamily_ = "sans-serif"; + theme->fontSize_ = themeConstants->GetDimension(THEME_SELECT_FONT_SIZE); + theme->fontColor_ = themeConstants->GetColor(THEME_SELECT_FONT_COLOR); + theme->fontWeight_ = FontWeight::NORMAL; + theme->textDecoration_ = TextDecoration::NONE; + auto optionSize = themeConstants->GetInt(THEME_SELECT_OPTION_SHOW_COUNT); + theme->optionSize_ = optionSize < 0 ? theme->optionSize_ : static_cast(optionSize); + theme->rrectSize_ = themeConstants->GetDimension(THEME_SELECT_ITSELF_RRECT_SIZE); + theme->popupBorderWidth_ = themeConstants->GetDimension(THEME_SELECT_POPUP_BORDER_WIDTH); + theme->popupShadowWidth_ = themeConstants->GetDimension(THEME_SELECT_POPUP_SHADOW_WIDTH); + theme->popupRRectSize_ = themeConstants->GetDimension(THEME_SELECT_POPUP_RRECT_SIZE); + theme->popupMinWidth_ = themeConstants->GetDimension(THEME_SELECT_POPUP_MIN_WIDTH); + theme->normalPadding_ = themeConstants->GetDimension(THEME_SELECT_NORMAL_PADDING); + theme->iconSize_ = themeConstants->GetDimension(THEME_SELECT_ITSELF_ICON_SIZE); + theme->isTV_ = themeConstants->GetInt(THEME_SELECT_IS_TV); + theme->horizontalSpacing_ = themeConstants->GetDimension(THEME_SELECT_POPUP_SPACING_HORIZONTAL); + theme->verticalSpacing_ = themeConstants->GetDimension(THEME_SELECT_POPUP_SPACING_VERTICAL); + theme->contentSpacing_ = themeConstants->GetDimension(THEME_SELECT_POPUP_SPACING_CONTENT); + + theme->selectShowTime_ = 250; // unit is ms. + theme->selectHideTime_ = 250; // unit is ms. + theme->menuShowTime_ = 250; // unit is ms. + theme->menuHideTime_ = 250; // unit is ms. + theme->titleLeftPadding_ = Dimension(16.0, DimensionUnit::VP); + theme->titleTopPadding_ = Dimension(8.0, DimensionUnit::VP); + theme->titleRightPadding_ = Dimension(8.0, DimensionUnit::VP); + theme->titleBottomPadding_ = Dimension(16.0, DimensionUnit::VP); + theme->titleStyle_.SetFontSize(themeConstants->GetDimension(THEME_OHOS_TEXT_SIZE_HEADLINE7)); + std::vector families; + families.emplace_back("sans-serif"); + theme->titleStyle_.SetFontFamilies(families); + theme->titleStyle_.SetFontWeight(FontWeight::W500); + theme->titleStyle_.SetTextColor(themeConstants->GetColor(THEME_OHOS_COLOR_TEXT_PRIMARY)); + theme->titleStyle_.SetTextDecoration(TextDecoration::NONE); + theme->optionPadding_ = Edge(16.0, 15.0, 16.0, 15.0, DimensionUnit::VP); + theme->optionInterval_ = theme->isTV_ ? Dimension(6.0, DimensionUnit::VP) : 0.0_vp; + theme->tvFocusTextColor_ = Color(0xE6000000); + theme->tvNormalBackColor_ = Color(0x33FFFFFF); + theme->tvBackColor_ = (theme->isTV_ ? Color(0x99000000) : Color::TRANSPARENT); + // disabled color + theme->normalDisableColor_ = themeConstants->GetColor(THEME_SELECT_OPTION_DISABLE_COLOR); + theme->focusedDisableColor_ = themeConstants->GetColor(THEME_SELECT_OPTION_FOCUSED_DISABLE_COLOR); + theme->normalTextDisableColor_ = themeConstants->GetColor(THEME_SELECT_OPTION_DISABLE_TEXT_COLOR); + theme->focusedTextDisableColor_ = themeConstants->GetColor(THEME_SELECT_OPTION_FOCUSED_DISABLE_TEXT_COLOR); + Parse(themeConstants->GetThemeStyle(), theme); + return theme; + } + + void Parse(const RefPtr& style, const RefPtr& theme) const + { + if (!style || !theme) { + return; + } + theme->fontColor_ = style->GetAttr(THEME_ATTR_COLOR_SPINNER_ICON, theme->fontColor_); + theme->clickedColor_ = style->GetAttr(THEME_ATTR_COLOR_CLICK_EFFECT, theme->clickedColor_); + theme->selectedColor_ = style->GetAttr(THEME_ATTR_COLOR_CONTROL_ACTIVE, theme->selectedColor_); + theme->selectedColorText_ = style->GetAttr( + THEME_ATTR_COLOR_TEXT_PRIMARY_ACTIVATED, theme->selectedColorText_); + theme->hoverColor_ = style->GetAttr(THEME_ATTR_COLOR_HOVER, theme->hoverColor_); + theme->backgroundColor_ = style->GetAttr(THEME_ATTR_COLOR_DIALOG_BG, theme->backgroundColor_); + theme->lineColor_ = style->GetAttr(THEME_ATTR_COLOR_LIST_DIVIDER, theme->lineColor_); + } + }; + + ~SelectTheme() override = default; + + RefPtr clone() + { + RefPtr theme = AceType::Claim(new SelectTheme()); + theme->disabledColor_ = disabledColor_; + theme->clickedColor_ = clickedColor_; + theme->selectedColor_ = selectedColor_; + theme->fontSize_ = fontSize_; + theme->fontFamily_ = fontFamily_; + theme->fontColor_ = fontColor_; + theme->fontWeight_ = fontWeight_; + theme->textDecoration_ = textDecoration_; + theme->rrectSize_ = rrectSize_; + theme->iconSize_ = iconSize_; + theme->normalPadding_ = normalPadding_; + theme->optionSize_ = optionSize_; + theme->popupRRectSize_ = popupRRectSize_; + theme->popupMinWidth_ = popupMinWidth_; + theme->popupShadowWidth_ = popupShadowWidth_; + theme->popupBorderWidth_ = popupBorderWidth_; + theme->titleLeftPadding_ = titleLeftPadding_; + theme->titleTopPadding_ = titleTopPadding_; + theme->titleRightPadding_ = titleRightPadding_; + theme->titleBottomPadding_ = titleBottomPadding_; + theme->titleStyle_ = titleStyle_; + theme->isTV_ = isTV_; + theme->horizontalSpacing_ = horizontalSpacing_; + theme->verticalSpacing_ = verticalSpacing_; + theme->contentSpacing_ = contentSpacing_; + theme->menuHideTime_ = menuHideTime_; + theme->menuShowTime_ = menuShowTime_; + theme->selectShowTime_ = selectShowTime_; + theme->selectHideTime_ = selectHideTime_; + theme->optionPadding_ = optionPadding_; + theme->optionInterval_ = optionInterval_; + theme->tvFocusTextColor_ = tvFocusTextColor_; + theme->tvNormalBackColor_ = tvNormalBackColor_; + theme->tvBackColor_ = tvBackColor_; + theme->focusedDisableColor_ = focusedDisableColor_; + theme->normalDisableColor_ = normalDisableColor_; + theme->focusedTextDisableColor_ = focusedTextDisableColor_; + theme->normalTextDisableColor_ = normalTextDisableColor_; + theme->backgroundColor_ = backgroundColor_; + theme->hoverColor_ = hoverColor_; + theme->selectedColorText_ = selectedColorText_; + theme->lineColor_ = lineColor_; + return theme; + } + + const Color& GetSelectedColorText() const + { + return selectedColorText_; + } + + const Color& GetHoverColor() const + { + return hoverColor_; + } + + const Color& GetBackgroundColor() const + { + return backgroundColor_; + } + + const Color& GetDisabledColor() const + { + return disabledColor_; + } + void SetDisabledColor(const Color& value) + { + disabledColor_ = value; + } + + const Color& GetClickedColor() const + { + return clickedColor_; + } + void SetClickedColor(const Color& value) + { + clickedColor_ = value; + } + + const Color& GetSelectedColor() const + { + return selectedColor_; + } + void SetSelectedColor(const Color& value) + { + selectedColor_ = value; + } + + const Dimension& GetFontSize() const + { + return fontSize_; + } + void SetFontSize(const Dimension& value) + { + fontSize_ = value; + } + + const Color& GetFontColor() const + { + return fontColor_; + } + void SetFontColor(const Color& value) + { + fontColor_ = value; + } + + const std::string& GetFontFamily() const + { + return fontFamily_; + } + void SetFontFamily(const std::string& value) + { + fontFamily_ = value; + } + + FontWeight GetFontWeight() const + { + return fontWeight_; + } + void SetFontWeight(FontWeight value) + { + fontWeight_ = value; + } + + TextDecoration GetTextDecoration() const + { + return textDecoration_; + } + void SetTextDecoration(TextDecoration value) + { + textDecoration_ = value; + } + + std::size_t GetOptionSize() const + { + return optionSize_; + } + void SetOptionSize(std::size_t value) + { + optionSize_ = value; + } + + const Dimension& GetRRectSize() const + { + return rrectSize_; + } + void SetRRectSize(const Dimension& value) + { + rrectSize_ = value; + } + + const Dimension& GetPopupRRectSize() const + { + return popupRRectSize_; + } + void SetPopupRRectSize(const Dimension& value) + { + popupRRectSize_ = value; + } + + const Dimension& GetPopupBorderWidth() const + { + return popupBorderWidth_; + } + void SetPopupBorderWidth(const Dimension& value) + { + popupBorderWidth_ = value; + } + + const Dimension& GetPopupShadowWidth() const + { + return popupShadowWidth_; + } + void SetPopupShadowWidth(const Dimension& value) + { + popupShadowWidth_ = value; + } + + const Dimension& GetPopupMinWidth() const + { + return popupMinWidth_; + } + void SetPopupMinWidth(const Dimension& value) + { + popupMinWidth_ = value; + } + + const Dimension& GetNormalPadding() const + { + return normalPadding_; + } + void SetNormalPadding(const Dimension& value) + { + normalPadding_ = value; + } + + const Dimension& GetIconSize() const + { + return iconSize_; + } + void SetIconSize(const Dimension& value) + { + iconSize_ = value; + } + + const Dimension& GetTitleLeftPadding() const + { + return titleLeftPadding_; + } + void SetTitleLeftPadding(const Dimension& value) + { + titleLeftPadding_ = value; + } + + const Dimension& GetTitleTopPadding() const + { + return titleTopPadding_; + } + void SetTitleTopPadding(const Dimension& value) + { + titleTopPadding_ = value; + } + + const Dimension& GetTitleRightPadding() const + { + return titleRightPadding_; + } + void SetTitleRightPadding(const Dimension& value) + { + titleRightPadding_ = value; + } + + const Dimension& GetTitleBottomPadding() const + { + return titleBottomPadding_; + } + void SetTitleBottomPadding(const Dimension& value) + { + titleBottomPadding_ = value; + } + + const TextStyle& GetTitleStyle() + { + return titleStyle_; + } + void SetTitleStyle(const TextStyle& value) + { + titleStyle_ = value; + } + + bool IsTV() const + { + return isTV_; + } + void SetIsTV(bool isTV) + { + isTV_ = isTV; + } + + const Dimension& GetHorizontalSpacing() const + { + return horizontalSpacing_; + } + void SetHorizontalSpacing(const Dimension& horizontalSpacing) + { + horizontalSpacing_ = horizontalSpacing; + } + + const Dimension& GetVerticalSpacing() const + { + return verticalSpacing_; + } + void SetVerticalSpacing(const Dimension& verticalSpacing) + { + verticalSpacing_ = verticalSpacing; + } + + const Dimension& GetContentSpacing() const + { + return contentSpacing_; + } + void SetContentSpacing(const Dimension& contentSpacing) + { + contentSpacing_ = contentSpacing; + } + + const Edge& GetOptionPadding() const + { + return optionPadding_; + } + void SetOptionPadding(const Edge& value) + { + optionPadding_ = value; + } + + uint32_t GetShowTime(bool isMenu) const + { + if (isMenu) { + return menuShowTime_; + } else { + return selectShowTime_; + } + } + + uint32_t GetHideTime(bool isMenu) const + { + if (isMenu) { + return menuHideTime_; + } else { + return selectHideTime_; + } + } + + SelectTheme() = default; + + bool IsAllowScale() const + { + return allowScale_; + } + + void SetAllowScale(bool allowScale) + { + allowScale_ = allowScale; + } + + const Dimension& GetOptionInterval() const + { + return optionInterval_; + } + + const Color& GetTvFocusTextColor() const + { + return tvFocusTextColor_; + } + + const Color& GetTvNormalBackColor() const + { + return tvNormalBackColor_; + } + + const Color& GetTvBackColor() const + { + return tvBackColor_; + } + + const Color& GetFocusedDisableColor() const + { + return focusedDisableColor_; + } + + const Color& GetNormalDisableColor() const + { + return normalDisableColor_; + } + + const Color& GetFocusedTextDisableColor() const + { + return focusedTextDisableColor_; + } + + const Color& GetNormalTextDisableColor() const + { + return normalTextDisableColor_; + } + + const Color& GetLineColor() const + { + return lineColor_; + } + +private: + Color disabledColor_; + Color clickedColor_; + Color selectedColor_; + + Color backgroundColor_ = Color::WHITE; + Color hoverColor_ = Color(0x0c000000); + Color selectedColorText_ = Color(0xff0a59f7); + Color lineColor_ = Color(0x33000000); + + bool allowScale_ = true; + Dimension fontSize_; + Color fontColor_; + std::string fontFamily_; + FontWeight fontWeight_ { FontWeight::NORMAL }; + TextDecoration textDecoration_ { TextDecoration::NONE }; + + std::size_t optionSize_ { 0 }; + Dimension rrectSize_; + Dimension iconSize_; + Dimension normalPadding_; + + Dimension popupRRectSize_; + Dimension popupBorderWidth_; + Dimension popupShadowWidth_; + Dimension popupMinWidth_; + + Dimension titleLeftPadding_; + Dimension titleTopPadding_; + Dimension titleRightPadding_; + Dimension titleBottomPadding_; + Dimension horizontalSpacing_; + Dimension verticalSpacing_; + Dimension contentSpacing_; + Dimension optionInterval_; + + Color tvFocusTextColor_; + Color tvNormalBackColor_; + Color tvBackColor_; + + Color focusedDisableColor_; + Color normalDisableColor_; + Color focusedTextDisableColor_; + Color normalTextDisableColor_; + + TextStyle titleStyle_; + bool isTV_ = false; + uint32_t menuShowTime_ = 0; + uint32_t selectShowTime_ = 0; + uint32_t menuHideTime_ = 0; + uint32_t selectHideTime_ = 0; + + Edge optionPadding_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SELECT_SELECT_THEME_H diff --git a/frameworks/core/components/select_popup/BUILD.gn b/frameworks/core/components/select_popup/BUILD.gn new file mode 100644 index 00000000..bdbcb90e --- /dev/null +++ b/frameworks/core/components/select_popup/BUILD.gn @@ -0,0 +1,23 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("select_popup") { + sources = [ + "flutter_render_select_popup.cpp", + "render_select_popup.cpp", + "select_popup_component.cpp", + "select_popup_element.cpp", + ] +} diff --git a/frameworks/core/components/select_popup/flutter_render_select_popup.cpp b/frameworks/core/components/select_popup/flutter_render_select_popup.cpp new file mode 100644 index 00000000..86fe2086 --- /dev/null +++ b/frameworks/core/components/select_popup/flutter_render_select_popup.cpp @@ -0,0 +1,156 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/select_popup/flutter_render_select_popup.h" + +#include "third_party/skia/include/core/SkMaskFilter.h" +#include "third_party/skia/include/effects/SkGradientShader.h" + +#include "core/components/common/painter/flutter_decoration_painter.h" +#include "core/components/common/properties/shadow_config.h" +#include "core/pipeline/base/scoped_canvas_state.h" + +namespace OHOS::Ace { +namespace { + +const Dimension GRADIENT_HEIGHT = Dimension(50, DimensionUnit::VP); +const uint8_t GRADIENT_END_GRADIENT = 255; + +} // namespace + +RefPtr RenderSelectPopup::Create() +{ + return AceType::MakeRefPtr(); +} + +double FlutterRenderSelectPopup::GetOptionLeft() const +{ + if (renderOptions_.empty()) { + return 0.0; + } + + auto option = renderOptions_[0]; + if (!option) { + return 0.0; + } + + return option->GetGlobalOffset().GetX(); +} + +double FlutterRenderSelectPopup::GetOptionTop() const +{ + auto scroll = renderScroll_; + if (!scroll) { + return 0.0; + } + + return scroll->GetGlobalOffset().GetY(); +} + +double FlutterRenderSelectPopup::GetOptionBottom() const +{ + auto scroll = renderScroll_; + if (!scroll) { + return 0.0; + } + + return scroll->GetGlobalOffset().GetY() + scroll->GetLayoutSize().Height(); +} + +double FlutterRenderSelectPopup::GetOptionWidth() const +{ + if (renderOptions_.empty()) { + return 0.0; + } + + auto option = renderOptions_[0]; + if (!option) { + return 0.0; + } + + return option->GetLayoutSize().Width(); +} + +void FlutterRenderSelectPopup::PaintGradient(RenderContext& context, bool isTop) +{ + auto canvas = ScopedCanvas::Create(context); + if (!canvas) { + LOGE("Paint canvas is null"); + return; + } + flutter::Paint paintGradient; + flutter::PaintData paintDataGradient; + Rect gradientRect; + auto interval = NormalizeToPx(optionInterval_); + auto yPos = isTop ? GetOptionTop() : GetOptionBottom() - NormalizeToPx(GRADIENT_HEIGHT); + gradientRect.SetOffset(Offset(GetOptionLeft() + interval, yPos)); + gradientRect.SetHeight(NormalizeToPx(GRADIENT_HEIGHT)); + gradientRect.SetWidth(GetOptionWidth() - 2 * interval); + SkPoint beginPoint = SkPoint::Make(SkDoubleToScalar(gradientRect.Left()), SkDoubleToScalar(gradientRect.Top())); + SkPoint endPoint = SkPoint::Make(SkDoubleToScalar(gradientRect.Left()), SkDoubleToScalar(gradientRect.Bottom())); + SkPoint points[2] = { beginPoint, endPoint }; + // color with red 13, green 13, and blue 13 is used for color stop (0.85) in gradient + SkColor colors[2] = { tvBackColor_.ChangeAlpha(0).GetValue(), + Color::FromRGB(13, 13, 13).ChangeAlpha(GRADIENT_END_GRADIENT).GetValue() }; + if (isTop) { + colors[0] = Color::FromRGB(13, 13, 13).ChangeAlpha(GRADIENT_END_GRADIENT).GetValue(); + colors[1] = tvBackColor_.ChangeAlpha(0).GetValue(); + } + const float stopPositions[2] = { 0.0f, 0.85f }; +#ifdef USE_SYSTEM_SKIA + paintGradient.paint()->setShader( + SkGradientShader::MakeLinear(points, colors, stopPositions, std::size(colors), SkShader::kMirror_TileMode)); +#else + paintGradient.paint()->setShader( + SkGradientShader::MakeLinear(points, colors, stopPositions, std::size(colors), SkTileMode::kMirror)); +#endif + canvas->drawRect(gradientRect.Left(), gradientRect.Top(), gradientRect.Right(), gradientRect.Bottom(), + paintGradient, paintDataGradient); +} + +void FlutterRenderSelectPopup::Paint(RenderContext& context, const Offset& offset) +{ + if (!isFullScreen_ && isWattingForAnimationStart_) { + return; + } + + { + auto canvas = ScopedCanvas::Create(context); + if (!canvas) { + LOGE("Paint canvas is null"); + return; + } + flutter::Paint paint; + paint.paint()->setARGB( + tvBackColor_.GetAlpha(), tvBackColor_.GetRed(), tvBackColor_.GetGreen(), tvBackColor_.GetBlue()); + flutter::PaintData paintData; + auto size = GetLayoutSize(); + canvas->drawRect(0, 0, size.Width(), size.Height(), paint, paintData); + } + RenderNode::Paint(context, offset); + + if (!renderScroll_ || SystemProperties::GetDeviceType() != DeviceType::TV) { + return; + } + if (!renderScroll_->IsAtBottom()) { + PaintGradient(context, false); + } + + if (!renderScroll_->IsAtTop()) { + PaintGradient(context, true); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/select_popup/flutter_render_select_popup.h b/frameworks/core/components/select_popup/flutter_render_select_popup.h new file mode 100644 index 00000000..99b4afb2 --- /dev/null +++ b/frameworks/core/components/select_popup/flutter_render_select_popup.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SELECT_POPUP_FLUTTER_RENDER_SELECT_POPUP_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SELECT_POPUP_FLUTTER_RENDER_SELECT_POPUP_H + +#include "third_party/skia/include/core/SkCanvas.h" + +#include "core/components/select_popup/render_select_popup.h" + +namespace OHOS::Ace { + +class FlutterRenderSelectPopup : public RenderSelectPopup { + DECLARE_ACE_TYPE(FlutterRenderSelectPopup, RenderSelectPopup); + +public: + FlutterRenderSelectPopup() = default; + ~FlutterRenderSelectPopup() override = default; + + void Paint(RenderContext& context, const Offset& offset) override; + void PaintGradient(RenderContext& context, bool isTop); + + double GetOptionLeft() const; + double GetOptionWidth() const; + double GetOptionTop() const; + double GetOptionBottom() const; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SELECT_POPUP_FLUTTER_RENDER_SELECT_POPUP_H diff --git a/frameworks/core/components/select_popup/render_select_popup.cpp b/frameworks/core/components/select_popup/render_select_popup.cpp new file mode 100644 index 00000000..bb723471 --- /dev/null +++ b/frameworks/core/components/select_popup/render_select_popup.cpp @@ -0,0 +1,479 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/select_popup/render_select_popup.h" + +#include "core/components/flex/flex_component.h" +#include "core/components/flex/render_flex.h" +#include "core/components/option/render_option.h" +#include "core/components/select/select_theme.h" +#include "core/components/select_popup/select_popup_component.h" +#include "core/components/stack/stack_element.h" +#include "core/components/text/render_text.h" + +namespace OHOS::Ace { + +RenderSelectPopup::RenderSelectPopup() +{ + rawDetector_ = AceType::MakeRefPtr(); + rawDetector_->SetOnTouchDown([weak = WeakClaim(this)](const TouchEventInfo& info) { + auto selectPopup = weak.Upgrade(); + if (selectPopup) { + selectPopup->HandleRawEvent(info.GetTouches().front().GetLocalLocation()); + } + }); +} + +void RenderSelectPopup::OnPaintFinish() +{ + auto pipeline = context_.Upgrade(); + if (!selectPopup_ || !selectPopup_->GetNode() || !pipeline || !renderPositioned_) { + LOGE("can not get accessibility node of select popup or pipeline is null or positional is null."); + return; + } + auto node = selectPopup_->GetNode(); + auto viewScale = pipeline->GetViewScale(); + auto leftTop = renderPositioned_->GetGlobalOffset(); + node->SetLeft(leftTop.GetX() * viewScale); + node->SetTop(leftTop.GetY() * viewScale); + auto size = renderPositioned_->GetLayoutSize(); + node->SetWidth(size.Width() * viewScale); + node->SetHeight(size.Height() * viewScale); +#if defined(WINDOWS_PLATFORM) || defined(MAC_PLATFORM) + auto parentNode = node->GetParentNode(); + if (parentNode && parentNode->GetTag() == "menu") { + parentNode->SetLeft(leftTop.GetX() * viewScale); + parentNode->SetTop(leftTop.GetY() * viewScale); + parentNode->SetWidth(size.Width() * viewScale); + parentNode->SetHeight(size.Height() * viewScale); + } +#endif + node->SetEnabledState(true); + node->SetCheckableState(false); + node->SetClickableState(false); + node->SetFocusableState(false); +} + +void RenderSelectPopup::Update(const RefPtr& component) +{ + auto popup = AceType::DynamicCast(component); + if (!popup || !popup->GetTheme()) { + LOGE("select: input component is null or not SelectPopupComponent."); + return; + } + + theme_ = popup->GetTheme(); + tvBackColor_ = theme_->GetTvBackColor(); + selectPopup_ = popup; + popup->GetPopupLayout(selectLeftTop_, selectRightBottom_); + optionSize_ = popup->GetOptionSize(); + rrectSize_ = popup->GetPopupRRectSize(); + optionInterval_ = theme_->GetOptionInterval(); + minWidth_ = popup->GetPopupMinWidth(); + horizontalSpacing_ = popup->GetHorizontalSpacing(); + verticalSpacing_ = popup->GetVerticalSpacing(); + contentSpacing_ = popup->GetContentSpacing(); + isFullScreen_ = popup->IsFullScreen(); + MarkNeedLayout(); +} + +void RenderSelectPopup::AdjustTvChildVerticalLayout(const Size& size, double& y, double& height) +{ + double bottomSpace = globalRightBottom_.GetY() - selectLeftTop_.GetY(); + if (bottomSpace >= size.Height() + verticalSpacing_.Value()) { + y = selectLeftTop_.GetY(); + height = size.Height(); + return; + } + bottomSpace = globalRightBottom_.GetY(); + if (bottomSpace >= size.Height() + 2.0 * verticalSpacing_.Value()) { + height = size.Height(); + y = bottomSpace - verticalSpacing_.Value() - height; + return; + } + height = bottomSpace - 2.0 * verticalSpacing_.Value(); + y = verticalSpacing_.Value(); +} + +void RenderSelectPopup::AdjustTvChildHorizontalLayout(const Size& size, double& x, double& width) +{ + double leftSpace = selectLeftTop_.GetX(); + double rightSpace = globalRightBottom_.GetX() - selectRightBottom_.GetX(); + if (selectPopup_ && selectPopup_->GetTextDirection() == TextDirection::RTL) { + if (leftSpace >= contentSpacing_.Value() + size.Width() + horizontalSpacing_.Value()) { + width = size.Width(); + x = selectLeftTop_.GetX() - contentSpacing_.Value() - width; + return; + } + if (rightSpace <= leftSpace) { + width = leftSpace - contentSpacing_.Value() - horizontalSpacing_.Value(); + x = horizontalSpacing_.Value(); + return; + } + x = selectRightBottom_.GetX() + contentSpacing_.Value(); + if (rightSpace >= contentSpacing_.Value() + size.Width() + horizontalSpacing_.Value()) { + width = size.Width(); + return; + } + width = rightSpace - contentSpacing_.Value() - horizontalSpacing_.Value(); + return; + } + + if (rightSpace >= contentSpacing_.Value() + size.Width() + horizontalSpacing_.Value()) { + width = size.Width(); + x = selectRightBottom_.GetX() + contentSpacing_.Value(); + return; + } + if (leftSpace <= rightSpace) { + width = rightSpace - contentSpacing_.Value() - horizontalSpacing_.Value(); + x = selectRightBottom_.GetX() + contentSpacing_.Value(); + return; + } + if (leftSpace >= contentSpacing_.Value() + size.Width() + horizontalSpacing_.Value()) { + width = size.Width(); + x = selectLeftTop_.GetX() - contentSpacing_.Value() - width; + return; + } + width = leftSpace - contentSpacing_.Value() - horizontalSpacing_.Value(); + x = horizontalSpacing_.Value(); +} + +void RenderSelectPopup::AdjustChildVerticalLayout(const Size& size, double& y, double& height) +{ + if (selectPopup_ && selectPopup_->IsMenu() && selectPopup_->IsTV()) { + AdjustTvChildVerticalLayout(size, y, height); + y -= NormalizeToPx(optionInterval_); + y -= NormalizeToPx(rrectSize_); + return; + } + + double bottomSpace = globalRightBottom_.GetY() - selectRightBottom_.GetY(); + double topSpace = selectLeftTop_.GetY(); + // think about top padding and bottom padding + if (bottomSpace >= size.Height() + 2.0 * normalPadding_) { + y = selectRightBottom_.GetY() + normalPadding_; + height = size.Height(); + return; + } + + if (bottomSpace >= topSpace) { + y = selectRightBottom_.GetY() + normalPadding_; + // think about top padding and bottom padding + height = bottomSpace - 2.0 * normalPadding_; + return; + } + + // think about top padding and bottom padding + if (topSpace >= size.Height() + 2.0 * normalPadding_) { + height = size.Height(); + y = selectLeftTop_.GetY() - normalPadding_ - height; + return; + } + + y = normalPadding_; + // think about top padding and bottom padding + height = topSpace - 2.0 * normalPadding_; +} + +void RenderSelectPopup::AdjustChildHorizontalLayout(const Size& size, double& x, double& width) +{ + double rightSpace = globalRightBottom_.GetX() - selectLeftTop_.GetX(); + if (selectRightBottom_ != selectLeftTop_) { + if (selectPopup_ && selectPopup_->IsMenu() && selectPopup_->IsTV()) { + AdjustTvChildHorizontalLayout(size, x, width); + return; + } + if (selectPopup_ && selectPopup_->GetTextDirection() == TextDirection::RTL) { + // align right for select popup dialog + double space = selectRightBottom_.GetX(); + width = (space > size.Width() + normalPadding_ ? size.Width() : space - normalPadding_); + x = space - width; + } else { + x = selectLeftTop_.GetX(); + width = (rightSpace > size.Width() + normalPadding_ ? size.Width() : rightSpace - normalPadding_); + } + return; + } + + double leftSpace = selectLeftTop_.GetX(); + // think about left padding and right padding + if (rightSpace >= size.Width() + 2.0 * normalPadding_) { + x = selectLeftTop_.GetX() + normalPadding_; + width = size.Width(); + return; + } + + if (rightSpace >= leftSpace) { + x = selectLeftTop_.GetX() + normalPadding_; + // think about left padding and right padding + width = rightSpace - 2.0 * normalPadding_; + return; + } + + // think about left padding and right padding + if (leftSpace >= size.Width() + 2.0 * normalPadding_) { + width = size.Width(); + x = selectLeftTop_.GetX() - normalPadding_ - width; + return; + } + + x = normalPadding_; + // think about left padding and right padding + width = leftSpace - 2.0 * normalPadding_; +} + +void RenderSelectPopup::AdjustChildLayout(Size& size) +{ + double x = 0.0; + double width = 0.0; + AdjustChildHorizontalLayout(size, x, width); + double y = 0.0; + double height = 0.0; + AdjustChildVerticalLayout(size, y, height); + childLayoutParam_.SetFixedSize(Size(width, height)); + size.SetWidth(width); + size.SetHeight(height); + childPosition_.SetX(x); + childPosition_.SetY(y); +} + +void RenderSelectPopup::CreateAnimation() +{ + if (animationCreated_) { + return; + } + if (selectPopup_) { + CreatePopupAnimation(selectPopup_->IsMenu()); + } + animationCreated_ = true; +} + +void RenderSelectPopup::CreatePopupAnimation(bool isMenu) +{ + if (!selectPopup_ || !selectPopup_->GetTheme()) { + LOGE("select theme or select popup component is null."); + return; + } + + auto theme = selectPopup_->GetTheme(); + auto showScaleAnimation = AceType::MakeRefPtr>(0.9f, 1.0f, Curves::FRICTION); + auto showAlphaAnimation = AceType::MakeRefPtr>(0.0f, 1.0f, Curves::FAST_OUT_SLOW_IN); + TweenOption showOption; + showOption.SetDuration(theme->GetShowTime(isMenu)); + showOption.SetTransformFloatAnimation(AnimationType::SCALE, showScaleAnimation); + showOption.SetOpacityAnimation(showAlphaAnimation); + selectPopup_->SetShowOption(showOption); + + auto hideScaleAnimation = AceType::MakeRefPtr>(1.0f, 0.9f, Curves::FRICTION); + auto hideAlphaAnimation = AceType::MakeRefPtr>(1.0f, 0.0f, Curves::FAST_OUT_SLOW_IN); + TweenOption hideOption; + hideOption.SetDuration(theme->GetHideTime(isMenu)); + hideOption.SetTransformFloatAnimation(AnimationType::SCALE, hideScaleAnimation); + hideOption.SetOpacityAnimation(hideAlphaAnimation); + selectPopup_->SetHideOption(hideOption); +} + +void RenderSelectPopup::PerformLayout() +{ + if (ScreenDirectionSwitched()) { + return; + } + if (!renderRoot_ || !renderScroll_ || (isFullScreen_ && !renderPositioned_)) { + LOGE("render child is null."); + return; + } + verticalSpacing_ = Dimension(NormalizeToPx(verticalSpacing_), DimensionUnit::PX); + horizontalSpacing_ = Dimension(NormalizeToPx(horizontalSpacing_), DimensionUnit::PX); + contentSpacing_ = Dimension(NormalizeToPx(contentSpacing_), DimensionUnit::PX); + normalPadding_ = NormalizeToPx(rrectSize_); + globalRightBottom_ = Offset() + renderRoot_->GetLayoutSize(); + double outPadding = NormalizeToPx(4.0_vp); // the out padding is 4dp from doc. + + Size totalSize; + double fixHeight = 0.0; + if (renderTitleBox_) { + renderTitleBox_->Layout(LayoutParam()); + totalSize = renderTitleBox_->GetLayoutSize(); + // add 8.0dp delta width for title so that it will show full title. + totalSize.SetWidth(totalSize.Width() + NormalizeToPx(8.0_vp)); + fixHeight = totalSize.Height(); + } + for (const auto& option : renderOptions_) { + if (selectLeftTop_ != selectRightBottom_ && selectPopup_ && !selectPopup_->IsMenu()) { + option->SetMaxWidth((selectPopup_->GetTextDirection() == TextDirection::RTL ? + selectRightBottom_.GetX() - normalPadding_ - 2.0 * outPadding : + globalRightBottom_.GetX() - selectLeftTop_.GetX() - normalPadding_ - 2.0 * outPadding)); + } else if (selectLeftTop_ == selectRightBottom_ && selectPopup_ && selectPopup_->IsMenu()) { + auto leftSpace = selectLeftTop_.GetX(); + auto rightSpace = globalRightBottom_.GetX() - leftSpace; + leftSpace -= 2.0 * normalPadding_ + 2.0 * outPadding; + rightSpace -= 2.0 * normalPadding_ + 2.0 * outPadding; + option->SetMaxWidth(std::max(leftSpace, rightSpace)); + } + + option->Layout(LayoutParam()); + if (option->GetLayoutSize().Width() > totalSize.Width()) { + totalSize.SetWidth(option->GetLayoutSize().Width()); + } + totalSize.AddHeight(option->GetLayoutSize().Height()); + } + if (totalSize.Width() < NormalizeToPx(minWidth_)) { + totalSize.SetWidth(NormalizeToPx(minWidth_)); + } + totalSize.AddHeight(2.0 * outPadding); + totalSize.AddWidth(2.0 * outPadding); + + AdjustChildLayout(totalSize); + for (const auto& option : renderOptions_) { + // leave the space of 8.0dp for interval of innner and out box. + option->SetFixedWidth(totalSize.Width() - 2.0 * outPadding); + } + if (isFullScreen_) { + renderPositioned_->SetPosition(childPosition_); + renderPositioned_->Layout(childLayoutParam_); + } else { + if (GetChildren().front()) { + GetChildren().front()->Layout(childLayoutParam_); + } + } + LayoutParam scrollLayout; + scrollLayout.SetFixedSize(Size(totalSize.Width() - 2.0 * outPadding, + totalSize.Height() - fixHeight - 2.0 * outPadding)); + renderScroll_->Layout(scrollLayout); + if (renderTitleBox_) { + LayoutParam layout; + layout.SetFixedSize(Size(totalSize.Width() - 2.0 * outPadding, renderTitleBox_->GetLayoutSize().Height())); + renderTitleBox_->Layout(layout); + } + + if (isFullScreen_) { + SetLayoutSize(GetLayoutParam().GetMaxSize()); + touchRegion_ = TouchRegion( + renderPositioned_->GetPosition(), renderPositioned_->GetPosition() + renderPositioned_->GetLayoutSize()); + } else { + if (GetChildren().front()) { + SetLayoutSize(GetChildren().front()->GetLayoutSize()); + } + touchRegion_ = TouchRegion(GetPosition(), GetPosition() + GetLayoutSize()); + } + + CreateAnimation(); +} + +void RenderSelectPopup::HandleRawEvent(const Offset& clickPosition) +{ + if (touchRegion_.ContainsInRegion(clickPosition.GetX(), clickPosition.GetY())) { + return; + } + + if (!selectPopup_) { + return; + } + selectPopup_->HideDialog(SELECT_INVALID_INDEX); +} + +void RenderSelectPopup::OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) +{ + if (!dragDetector_) { + dragDetector_ = AceType::MakeRefPtr(); + } + if (!longPressDetector_) { + longPressDetector_ = AceType::MakeRefPtr(context_); + } + if (!clickDetector_) { + clickDetector_ = AceType::MakeRefPtr(); + } + rawDetector_->SetCoordinateOffset(coordinateOffset); + result.emplace_back(rawDetector_); + result.emplace_back(dragDetector_); + result.emplace_back(longPressDetector_); + result.emplace_back(clickDetector_); +} + +void RenderSelectPopup::GetReferenceRenders() +{ + auto context = context_.Upgrade(); + if (!context) { + return; + } + auto pageElement = context->GetLastStack(); + if (!pageElement) { + return; + } + renderRoot_ = pageElement->GetRenderNode(); + renderOptions_.clear(); + GetReferenceRenders(AceType::Claim(this)); +} + +void RenderSelectPopup::GetReferenceRenders(const RefPtr& render) +{ + if (!render) { + return; + } + + if (AceType::InstanceOf(render)) { + auto boxParent = render->GetParent().Upgrade(); + if (boxParent && AceType::InstanceOf(boxParent)) { + renderTitleBox_ = AceType::DynamicCast(render); + return; + } + } + + if (AceType::InstanceOf(render)) { + renderOptions_.emplace_back(AceType::DynamicCast(render)); + return; + } + + if (AceType::InstanceOf(render)) { + renderPositioned_ = AceType::DynamicCast(render); + } + + if (AceType::InstanceOf(render)) { + renderScroll_ = AceType::DynamicCast(render); + } + + for (const auto& child : render->GetChildren()) { + GetReferenceRenders(child); + } +} + +void RenderSelectPopup::ClearReferenceRenders() +{ + renderRoot_ = nullptr; + renderPositioned_ = nullptr; + renderTitleBox_ = nullptr; + renderScroll_ = nullptr; + renderOptions_.clear(); +} + +bool RenderSelectPopup::ScreenDirectionSwitched() +{ + auto pipeline = context_.Upgrade(); + if (!pipeline) { + return false; + } + + bool check = GreatNotEqual(pipeline->GetRootWidth(), pipeline->GetRootHeight()); + bool switched = (!screenHorizontal_ && !screenVertical_) ? false : (check ? screenVertical_ : screenHorizontal_); + screenHorizontal_ = check; + screenVertical_ = !check; + if (switched && selectPopup_) { + selectPopup_->HideDialog(SELECT_INVALID_INDEX); + } + return switched; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/select_popup/render_select_popup.h b/frameworks/core/components/select_popup/render_select_popup.h new file mode 100644 index 00000000..613ac889 --- /dev/null +++ b/frameworks/core/components/select_popup/render_select_popup.h @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SELECT_POPUP_RENDER_SELECT_POPUP_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SELECT_POPUP_RENDER_SELECT_POPUP_H + +#include + +#include "core/components/box/render_box.h" +#include "core/components/option/render_option.h" +#include "core/components/positioned/render_positioned.h" +#include "core/components/root/render_root.h" +#include "core/components/scroll/render_scroll.h" +#include "core/components/select_popup/select_popup_component.h" +#include "core/components/slider/render_slider.h" +#include "core/gestures/click_recognizer.h" +#include "core/gestures/drag_recognizer.h" +#include "core/gestures/long_press_recognizer.h" +#include "core/gestures/raw_recognizer.h" +#include "core/pipeline/base/constants.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderSelectPopup : public RenderNode { + DECLARE_ACE_TYPE(RenderSelectPopup, RenderNode); + +public: + static RefPtr Create(); + + RenderSelectPopup(); + ~RenderSelectPopup() override = default; + + void Update(const RefPtr& component) override; + void PerformLayout() override; + void OnPaintFinish() override; + + void UpdateRenders() + { + ClearReferenceRenders(); + GetReferenceRenders(); + } + + void SetIsWattingForAnimationStart(bool isWattingForAnimationStart) + { + isWattingForAnimationStart_ = isWattingForAnimationStart; + } + +protected: + bool isFullScreen_ = true; + bool isWattingForAnimationStart_ = false; + Color tvBackColor_; + Offset globalRightBottom_; + Offset childPosition_; + LayoutParam childLayoutParam_; + RefPtr renderScroll_; + std::vector> renderOptions_; + Dimension optionInterval_; + Dimension rrectSize_; + +private: + void AdjustTvChildVerticalLayout(const Size& size, double& y, double& height); + void AdjustTvChildHorizontalLayout(const Size& size, double& x, double& width); + void AdjustChildVerticalLayout(const Size& size, double& y, double& height); + void AdjustChildHorizontalLayout(const Size& size, double& x, double& width); + void AdjustChildLayout(Size& size); + + void CreateAnimation(); + void CreatePopupAnimation(bool isMenu); + + void OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) override; + void HandleRawEvent(const Offset& clickPosition); + + void GetReferenceRenders(); + void GetReferenceRenders(const RefPtr& render); + void ClearReferenceRenders(); + + bool ScreenDirectionSwitched(); + + RefPtr rawDetector_; + RefPtr dragDetector_; + RefPtr longPressDetector_; + RefPtr clickDetector_; + std::size_t optionSize_ = SELECT_DEFAULT_OPTION_SIZE; + RefPtr selectPopup_; + Offset selectLeftTop_; + Offset selectRightBottom_; + + TouchRegion touchRegion_; + Dimension minWidth_; + Dimension verticalSpacing_; + Dimension horizontalSpacing_; + Dimension contentSpacing_; + + bool screenHorizontal_ = false; + bool screenVertical_ = false; + bool animationCreated_ = false; + double normalPadding_ = 0.0; + RefPtr theme_; + + RefPtr renderRoot_; + RefPtr renderPositioned_; + RefPtr renderTitleBox_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SELECT_POPUP_RENDER_SELECT_POPUP_H diff --git a/frameworks/core/components/select_popup/select_popup_component.cpp b/frameworks/core/components/select_popup/select_popup_component.cpp new file mode 100644 index 00000000..8ff32fa4 --- /dev/null +++ b/frameworks/core/components/select_popup/select_popup_component.cpp @@ -0,0 +1,389 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/select_popup/select_popup_component.h" + +#include "base/utils/string_utils.h" +#include "core/components/clip/clip_component.h" +#include "core/components/common/properties/shadow_config.h" +#include "core/components/focus_collaboration/focus_collaboration_component.h" +#include "core/components/gesture_listener/gesture_listener_component.h" +#include "core/components/positioned/positioned_component.h" +#include "core/components/select_popup/render_select_popup.h" +#include "core/components/select_popup/select_popup_element.h" +#include "core/components/tween/tween_component.h" + +namespace OHOS::Ace { +namespace { + +constexpr uint32_t TITLE_TEXT_MAX_LINES = 1; +const Dimension ROUND_RADIUS_PHONE = 12.0_vp; +const Dimension IN_OUT_BOX_INTERVAL = 4.0_vp; + +} // namespace + +SelectPopupComponent::SelectPopupComponent() : SoleChildComponent() {} + +void SelectPopupComponent::InitTheme(const RefPtr& themeManager) +{ + if (!themeManager) { + return; + } + auto selectTheme = themeManager->GetTheme(); + if (!selectTheme) { + return; + } + theme_ = selectTheme->clone(); +} + +RefPtr SelectPopupComponent::CreateRenderNode() +{ + return RenderSelectPopup::Create(); +} + +RefPtr SelectPopupComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +RefPtr SelectPopupComponent::GetSelectOption(std::size_t index) const +{ + if (index >= options_.size()) { + LOGE("select: input index is too large."); + return nullptr; + } + + return options_[index]; +} + +void SelectPopupComponent::InnerHideDialog(uint32_t index) +{ + if (!dialogShowed_) { + return; + } + + if (!stackElement_) { + LOGE("stored stack element is null."); + return; + } + + stackElement_->PopComponent(true); + dialogShowed_ = false; + stackElement_ = nullptr; + + if (index == SELECT_INVALID_INDEX) { + if (popupCanceledCallback_) { + popupCanceledCallback_(); + } else { + LOGW("popup cancel callback is null."); + } + } else { + if (optionClickedCallback_) { + optionClickedCallback_(index); + } else { + LOGW("option clicked callback is null."); + } + } + +#if defined(WINDOWS_PLATFORM) || defined(MAC_PLATFORM) + auto parentNode = node_->GetParentNode(); + if (parentNode) { + parentNode->SetLeft(0); + parentNode->SetTop(0); + parentNode->SetWidth(0); + parentNode->SetHeight(0); + } +#endif + auto manager = manager_.Upgrade(); + if (manager) { + for (const auto& option : options_) { + option->SetNode(nullptr); + } + manager->RemoveAccessibilityNodes(node_); + SetNode(nullptr); + } +} + +void SelectPopupComponent::HideDialog(uint32_t index) +{ + if (!dialogShowed_) { + return; + } + + if (refreshAnimationCallback_ && animationController_) { + hideOption_.ClearListeners(); + refreshAnimationCallback_(hideOption_, false); + animationController_->AddStopListener([weak = WeakClaim(this), index]() { + auto refPtr = weak.Upgrade(); + if (!refPtr) { + return; + } + refPtr->InnerHideDialog(index); + }); + animationController_->Play(); + } else { + InnerHideDialog(index); + } +} + +void SelectPopupComponent::ShowDialog( + const RefPtr& stackElement, const Offset& leftTop, const Offset& rightBottom, bool isMenu) +{ + if (dialogShowed_) { + return; + } + + RefPtr positioned = AceType::DynamicCast(GetChild()); + if (positioned) { + positioned->SetAutoFocus(true); + } + if (!IsTV() && isMenu) { + // do use center point reference for phone menu. + Offset center(leftTop.GetX() / 2 + rightBottom.GetX() / 2, leftTop.GetY() / 2 + rightBottom.GetY() / 2); + selectLeftTop_ = center; + selectRightBottom_ = center; + } else { + selectLeftTop_ = leftTop; + selectRightBottom_ = rightBottom; + } + + stackElement->PushComponent(AceType::Claim(this), true); + dialogShowed_ = true; + stackElement_ = stackElement; + isMenu_ = isMenu; +} + +RefPtr SelectPopupComponent::InitializeInnerBox(const RefPtr& scroll) +{ + RefPtr innerBox = AceType::MakeRefPtr(); + innerBox->SetDeliverMinToChild(false); + if (title_.empty()) { + innerBox->SetChild(scroll); + } else { + RefPtr titleGesture = AceType::MakeRefPtr(); + EventMarker mark("-1"); + titleGesture->SetOnClickId(mark); + RefPtr titleBox = AceType::MakeRefPtr(); + titleBox->SetDeliverMinToChild(false); + titleBox->SetPadding(Edge(theme_->GetTitleLeftPadding().Value(), theme_->GetTitleTopPadding().Value(), + theme_->GetTitleRightPadding().Value(), theme_->GetTitleBottomPadding().Value(), + theme_->GetTitleBottomPadding().Unit())); + auto title = AceType::MakeRefPtr(title_); + auto textStyle = GetTitleStyle(); + auto isRtl = GetTextDirection() == TextDirection::RTL; + if (isRtl) { + textStyle.SetTextAlign(TextAlign::RIGHT); + } + textStyle.SetMaxLines(TITLE_TEXT_MAX_LINES); + textStyle.SetTextOverflow(TextOverflow::ELLIPSIS); + title->SetTextStyle(textStyle); + title->SetFocusColor(GetTitleStyle().GetTextColor()); + titleGesture->SetChild(title); + titleBox->SetChild(titleGesture); + + std::list> childList; + childList.emplace_back(titleBox); + childList.emplace_back(scroll); + + RefPtr outColumn = + AceType::MakeRefPtr(FlexAlign::FLEX_START, FlexAlign::FLEX_START, childList); + innerBox->SetChild(outColumn); + if (isRtl) { + titleBox->SetAlignment(Alignment::CENTER_RIGHT); + outColumn->SetMainAxisAlign(FlexAlign::FLEX_END); + outColumn->SetCrossAxisAlign(FlexAlign::FLEX_END); + } + } + return innerBox; +} + +void SelectPopupComponent::SetDefaultSelecting() +{ + if (options_.empty()) { + return; + } + + bool hasSelecting = false; + for (const auto& option : options_) { + if (option->GetSelected()) { + hasSelecting = true; + break; + } + } + + if (!hasSelecting) { + options_[0]->SetSelected(true); + } +} + +bool SelectPopupComponent::Initialize(const RefPtr& manager) +{ + if (options_.size() == 0 || !manager) { + LOGW("select: there is no any option or accessibility manager is null."); + return false; + } + manager_ = manager; + auto id = manager->GenerateNextAccessibilityId(); + std::list> children; + for (std::size_t index = 0; index < options_.size(); index++) { + options_[index]->SetIndex(index); + options_[index]->SetClickedCallback([weak = WeakClaim(this)](std::size_t index) { + auto refPtr = weak.Upgrade(); + if (!refPtr) { + return; + } + refPtr->HandleOptionClick(index); + }); + options_[index]->SetParentId(id); + if (options_[index]->GetVisible()) { + children.push_back(options_[index]); + } + } + + RefPtr column = + AceType::MakeRefPtr(FlexAlign::FLEX_START, FlexAlign::FLEX_START, children); + RefPtr scroll = AceType::MakeRefPtr(column); + RefPtr innerBox = InitializeInnerBox(scroll); + RefPtr innerClip = AceType::MakeRefPtr(innerBox); + innerClip->SetTopLeftRadius(Radius(ROUND_RADIUS_PHONE)); + innerClip->SetTopRightRadius(Radius(ROUND_RADIUS_PHONE)); + innerClip->SetBottomLeftRadius(Radius(ROUND_RADIUS_PHONE)); + innerClip->SetBottomRightRadius(Radius(ROUND_RADIUS_PHONE)); + + RefPtr box = AceType::MakeRefPtr(); + box->SetDeliverMinToChild(false); + if (!IsTV()) { + RefPtr back = AceType::MakeRefPtr(); + back->SetBackgroundColor(theme_->GetBackgroundColor()); + back->SetBorderRadius(Radius(theme_->GetPopupRRectSize())); + back->AddShadow(ShadowConfig::DefaultShadowM); + box->SetBackDecoration(back); + box->SetPadding(Edge(IN_OUT_BOX_INTERVAL)); + } + box->SetChild(innerClip); + + auto tweenId = TweenComponent::AllocTweenComponentId(); + RefPtr tween = AceType::MakeRefPtr(tweenId, tweenId); + tween->SetShadow(ShadowConfig::DefaultShadowM); + tween->SetIsFirstFrameShow(false); + tween->SetTweenOperation(TweenOperation::PLAY); + +#if defined(WINDOWS_PLATFORM) || defined(MAC_PLATFORM) + auto popupNode = manager->CreateSpecializedNode("select-popup", id, GetSelectPopupId()); + SetNode(popupNode); +#else + SetNode(manager->CreateSpecializedNode("select-popup", id, -1)); +#endif + if (isFullScreen_) { + RefPtr collaboration = AceType::MakeRefPtr(); + collaboration->InsertChild(0, box); + tween->SetChild(collaboration); + RefPtr positioned = AceType::MakeRefPtr(tween); + SetChild(positioned); + } else { + tween->SetChild(box); + SetChild(tween); + } + return true; +} + +void SelectPopupComponent::HandleOptionClick(std::size_t index) +{ + HideDialog(index); +} + +void SelectPopupComponent::HandleOptionModify(std::size_t index) +{ + if (!optionModifiedCallback_) { + LOGE("modify callback of select popup component is null."); + return; + } + RefPtr selectedOption; + RefPtr modifiedOption; + for (const auto& option : options_) { + if (option->GetSelected()) { + selectedOption = option; + } + if (option->GetIndex() == index) { + modifiedOption = option; + } + } + if (!modifiedOption) { + LOGE("modify option is null of select popup component."); + return; + } + if (!(modifiedOption == selectedOption || modifiedOption->GetIndex() == 0)) { + LOGE("no need modify callback of select popup component."); + return; + } + optionModifiedCallback_(index); +} + +void SelectPopupComponent::AppendSelectOption(const RefPtr& selectOption) +{ + if (selectOption) { + selectOption->SetIndex(options_.size()); + options_.emplace_back(selectOption); + auto weak = AceType::WeakClaim(this); + selectOption->SetModifiedCallback([weak](std::size_t index) { + auto refPtr = weak.Upgrade(); + if (refPtr) { + refPtr->HandleOptionModify(index); + } + }); + } else { + LOGE("select: input select option component is null."); + } +} + +void SelectPopupComponent::RemoveSelectOption(const RefPtr& selectOption) +{ + if (selectOption) { + auto iter = std::remove(options_.begin(), options_.end(), selectOption); + if (iter != options_.end()) { + options_.erase(iter); + selectOption->SetIndex(SELECT_INVALID_INDEX); + } + } else { + LOGE("select: input select option component is null."); + } + for (uint32_t index = 0; index < options_.size(); ++index) { + options_[index]->SetIndex(index); + } +} + +void SelectPopupComponent::InsertSelectOption(const RefPtr& selectOption, uint32_t index) +{ + if (!selectOption) { + return; + } + if (index >= options_.size()) { + AppendSelectOption(selectOption); + return; + } + options_.insert(options_.begin() + index, selectOption); + for (uint32_t index = 0; index < options_.size(); ++index) { + options_[index]->SetIndex(index); + } + auto weak = AceType::WeakClaim(this); + selectOption->SetModifiedCallback([weak](std::size_t index) { + auto refPtr = weak.Upgrade(); + if (refPtr) { + refPtr->HandleOptionModify(index); + } + }); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/select_popup/select_popup_component.h b/frameworks/core/components/select_popup/select_popup_component.h new file mode 100644 index 00000000..c2f3c7b9 --- /dev/null +++ b/frameworks/core/components/select_popup/select_popup_component.h @@ -0,0 +1,296 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SELECT_POPUP_SELECT_POPUP_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SELECT_POPUP_SELECT_POPUP_COMPONENT_H + +#include "core/components/box/box_component.h" +#include "core/components/common/properties/tween_option.h" +#include "core/components/option/option_component.h" +#include "core/components/scroll/scroll_component.h" +#include "core/components/select/select_theme.h" +#include "core/components/stack/stack_element.h" +#include "core/pipeline/base/constants.h" +#include "core/pipeline/base/sole_child_component.h" + +namespace OHOS::Ace { + +using RefreshAnimationCallback = std::function; + +class SelectPopupComponent : public SoleChildComponent { + DECLARE_ACE_TYPE(SelectPopupComponent, SoleChildComponent); + +public: + SelectPopupComponent(); + ~SelectPopupComponent() override = default; + + RefPtr CreateRenderNode() override; + RefPtr CreateElement() override; + + void InitTheme(const RefPtr& themeManager); + + std::size_t GetOptionSize() const + { + return optionSize_; + } + + void SetOptionSize(std::size_t optionSize) + { + optionSize_ = optionSize; + } + + void GetPopupLayout(Offset& leftTop, Offset& rightBottom) const + { + leftTop = selectLeftTop_; + rightBottom = selectRightBottom_; + } + + const Dimension& GetPopupRRectSize() const + { + return theme_->GetPopupRRectSize(); + } + + const Dimension& GetNormalPadding() const + { + return theme_->GetNormalPadding(); + } + + const Dimension& GetPopupMinWidth() const + { + return theme_->GetPopupMinWidth(); + } + + const Dimension& GetBorderWidth() const + { + return theme_->GetPopupBorderWidth(); + } + + const Dimension& GetShadowWidth() const + { + return theme_->GetPopupShadowWidth(); + } + + std::size_t GetSelectOptionCount() const + { + return options_.size(); + } + + RefPtr GetSelectOption(std::size_t index) const; + + std::vector> GetSelectOptions() const + { + return options_; + } + + void ClearAllOptions() + { + options_.clear(); + } + + void AppendSelectOption(const RefPtr& selectOption); + + void RemoveSelectOption(const RefPtr& selectOption); + + void InsertSelectOption(const RefPtr& selectOption, uint32_t index); + + void SetOptionClickedCallback(const std::function& clickedCallback) + { + optionClickedCallback_ = clickedCallback; + } + + void SetPopupCanceledCallback(const std::function& canceledCallback) + { + popupCanceledCallback_ = canceledCallback; + } + + void SetOptionModifiedCallback(const std::function& value) + { + optionModifiedCallback_ = value; + } + + const std::function& GetPopupCanceledCallback() const + { + return popupCanceledCallback_; + } + + bool GetDialogShowed() const + { + return dialogShowed_; + } + + const std::string& GetTitle() const + { + return title_; + } + + void SetTitle(const std::string& title) + { + title_ = title; + } + + const TextStyle& GetTitleStyle() const + { + return theme_->GetTitleStyle(); + } + + void SetTitleStyle(const TextStyle& style) + { + theme_->SetTitleStyle(style); + } + + bool IsTV() const + { + return theme_->IsTV(); + } + + bool IsMenu() const + { + return isMenu_; + } + + const Dimension& GetHorizontalSpacing() const + { + return theme_->GetHorizontalSpacing(); + } + + const Dimension& GetVerticalSpacing() const + { + return theme_->GetVerticalSpacing(); + } + + const Dimension& GetContentSpacing() const + { + return theme_->GetContentSpacing(); + } + + const TweenOption& GetShowOption() const + { + return showOption_; + } + void SetShowOption(const TweenOption& value) + { + showOption_ = value; + if (refreshAnimationCallback_) { + refreshAnimationCallback_(showOption_, true); + } else { + LOGE("refresh animation callback is null."); + } + } + + void SetRefreshAnimationCallback(const RefreshAnimationCallback& value) + { + refreshAnimationCallback_ = value; + } + const RefreshAnimationCallback& GetRefreshAnimationCallback() const + { + return refreshAnimationCallback_; + } + + const TweenOption& GetHideOption() const + { + return hideOption_; + } + void SetHideOption(const TweenOption& value) + { + hideOption_ = value; + } + + const RefPtr& GetAnimationController() const + { + return animationController_; + } + void SetAnimationController(const RefPtr& value) + { + animationController_ = value; + } + + bool IsFullScreen() const + { + return isFullScreen_; + } + void SetIsFullScreen(bool isFullScreen) + { + isFullScreen_ = isFullScreen; + } + + const RefPtr& GetTheme() const + { + return theme_; + } + + void HideDialog(uint32_t index); + void ShowDialog( + const RefPtr& stackElement, const Offset& leftTop, const Offset& rightBottom, bool isMenu); + + bool Initialize(const RefPtr& manager); + + const RefPtr GetNode() const + { + return node_; + } + + void SetNode(const RefPtr& value) + { + node_ = value; + } + + // used for inspector node in PC preview + void SetSelectPopupId(const int32_t nodeId) + { + nodeId_ = nodeId; + } + + // used for inspector node in PC preview + int32_t GetSelectPopupId() const + { + return nodeId_; + } + + void SetDefaultSelecting(); + +private: + RefPtr InitializeInnerBox(const RefPtr& scroll); + void HandleOptionClick(std::size_t index); + void HandleOptionModify(std::size_t index); + void InnerHideDialog(uint32_t index); + + bool isFullScreen_ = true; + std::size_t optionSize_ { SELECT_DEFAULT_OPTION_SIZE }; + Offset selectLeftTop_; + Offset selectRightBottom_; + bool isMenu_ = false; + std::vector> options_; + std::string title_; + RefPtr theme_; + bool dialogShowed_ = false; + // used for inspector node in PC preview + int32_t nodeId_ = -1; + std::function optionClickedCallback_; + std::function optionModifiedCallback_; + std::function popupCanceledCallback_; + RefPtr stackElement_; + + TweenOption showOption_; + TweenOption hideOption_; + RefreshAnimationCallback refreshAnimationCallback_; + RefPtr animationController_; + + RefPtr node_; + WeakPtr manager_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SELECT_POPUP_SELECT_POPUP_COMPONENT_H diff --git a/frameworks/core/components/select_popup/select_popup_element.cpp b/frameworks/core/components/select_popup/select_popup_element.cpp new file mode 100644 index 00000000..bbcd6990 --- /dev/null +++ b/frameworks/core/components/select_popup/select_popup_element.cpp @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/select_popup/select_popup_element.h" + +#include "core/components/select_popup/render_select_popup.h" +#include "core/components/select_popup/select_popup_component.h" + +namespace OHOS::Ace { + +void SelectPopupElement::PerformBuild() +{ + auto component = AceType::DynamicCast(component_); + auto context = context_.Upgrade(); + if (!context || !context->GetAccessibilityManager() || !component) { + LOGE("select: select popup component is null or initialize failed."); + } else { + component->Initialize(context->GetAccessibilityManager()); + component->SetRefreshAnimationCallback([weak = WeakClaim(this)](const TweenOption& option, bool isIn) { + auto element = weak.Upgrade(); + if (element) { + element->OnRefreshAnimation(option, isIn); + } + }); + } + SoleChildElement::PerformBuild(); + auto tween = GetTween(AceType::Claim(this)); + if (tween && tween->GetController() && component) { + component->SetAnimationController(tween->GetController()); + } + auto render = AceType::DynamicCast(renderNode_); + if (render) { + render->UpdateRenders(); + } +} + +RefPtr SelectPopupElement::GetTween(const RefPtr& element) const +{ + if (!element) { + return nullptr; + } + + if (AceType::InstanceOf(element)) { + return AceType::DynamicCast(element); + } + + for (const auto& child : element->GetChildren()) { + auto tween = GetTween(child); + if (tween) { + return tween; + } + } + + return nullptr; +} + +void SelectPopupElement::OnRefreshAnimation(const TweenOption& option, bool isIn) +{ + auto tween = GetTween(AceType::Claim(this)); + if (!tween) { + LOGE("the tween element is null."); + return; + } + + auto controller = tween->GetController(); + if (controller) { + controller->ClearInterpolators(); + controller->ClearAllListeners(); + } + tween->SetOption(option); + tween->ApplyOptions(); + tween->ApplyKeyframes(); + isInAnimation_ = isIn; + auto render = AceType::DynamicCast(renderNode_); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/select_popup/select_popup_element.h b/frameworks/core/components/select_popup/select_popup_element.h new file mode 100644 index 00000000..cb1e6774 --- /dev/null +++ b/frameworks/core/components/select_popup/select_popup_element.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SELECT_POPUP_SELECT_POPUP_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SELECT_POPUP_SELECT_POPUP_ELEMENT_H + +#include "core/pipeline/base/sole_child_element.h" + +#include "core/components/tween/tween_element.h" + +namespace OHOS::Ace { + +class SelectPopupElement : public SoleChildElement { + DECLARE_ACE_TYPE(SelectPopupElement, SoleChildElement); + +public: + void PerformBuild() override; + +private: + RefPtr GetTween(const RefPtr& element) const; + void OnRefreshAnimation(const TweenOption& option, bool isIn); + bool isInAnimation_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SELECT_POPUP_SELECT_POPUP_ELEMENT_H diff --git a/frameworks/core/components/semi_modal/BUILD.gn b/frameworks/core/components/semi_modal/BUILD.gn new file mode 100644 index 00000000..a534e5d3 --- /dev/null +++ b/frameworks/core/components/semi_modal/BUILD.gn @@ -0,0 +1,22 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("semi_modal") { + sources = [ + "render_semi_modal.cpp", + "semi_modal_component.cpp", + "semi_modal_element.cpp", + ] +} diff --git a/frameworks/core/components/semi_modal/render_semi_modal.cpp b/frameworks/core/components/semi_modal/render_semi_modal.cpp new file mode 100644 index 00000000..dee138ca --- /dev/null +++ b/frameworks/core/components/semi_modal/render_semi_modal.cpp @@ -0,0 +1,782 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/semi_modal/render_semi_modal.h" + +#include "base/log/dump_log.h" +#include "base/log/event_report.h" +#include "core/animation/curve.h" +#include "core/animation/curves.h" +#include "core/animation/keyframe.h" +#include "core/animation/keyframe_animation.h" +#include "core/components/common/layout/grid_system_manager.h" +#include "core/components/drag_bar/render_drag_bar.h" +#include "core/components/root/render_root.h" +#include "core/components/semi_modal/semi_modal_component.h" +#include "core/components/stack/stack_element.h" + +namespace OHOS::Ace { +namespace { + +constexpr int32_t ANIMATION_BASE_DURATION = 256; +constexpr double CONTENT_DEFAULT_RATIO = 0.67; +constexpr double KEYBOARD_HEIGHT_RATIO = 0.18; +constexpr uint32_t FIND_MAX_COUNT = 64; +constexpr Dimension BLANK_MIN_HEIGHT = 8.0_vp; +constexpr Dimension DRAG_UP_THRESHOLD = 48.0_vp; +constexpr Dimension DRAG_DOWN_THRESHOLD = 80.0_vp; +constexpr Dimension DRAG_BAR_ARROW_BIAS = 1.0_vp; +constexpr double CONTENT_MIN_TOLERANCE = 0.01; + +int32_t GetAnimationDuration(double delta, double dragRange) +{ + if (NearZero(dragRange)) { + return 0; + } + return static_cast(((std::abs(delta) / dragRange) + 1.0) * ANIMATION_BASE_DURATION); +} + +template +RefPtr FindChildOfClass(const RefPtr& parent) +{ + // BFS to find child in tree. + uint32_t findCount = 0; + auto searchQueue = parent->GetChildren(); // copy children to a queue + while (++findCount <= FIND_MAX_COUNT && !searchQueue.empty()) { + const auto child = searchQueue.front(); + searchQueue.pop_front(); + if (!child) { + continue; + } + if (AceType::InstanceOf(child)) { + return AceType::DynamicCast(child); + } + searchQueue.insert(searchQueue.end(), child->GetChildren().begin(), child->GetChildren().end()); + } + return RefPtr(); +} + +} // namespace + +RefPtr RenderSemiModal::Create() +{ + return AceType::MakeRefPtr(); +} + +void RenderSemiModal::Update(const RefPtr& component) +{ + auto semiModal = AceType::DynamicCast(component); + if (!semiModal) { + LOGE("RenderDragBar update with nullptr"); + EventReport::SendRenderException(RenderExcepType::RENDER_COMPONENT_ERR); + return; + } + InitializeRecognizer(); + isFullScreen_ = semiModal->IsFullScreen(); + if (GreatNotEqual(semiModal->GetModalHeight(), 0.0)) { + hasInputHeight_ = true; + inputHeight_ = semiModal->GetModalHeight(); + } + if (isFirstUpdate_) { + isFirstUpdate_ = false; + boxForBlank_ = RenderBox::Create(); + AddChild(boxForBlank_, 0); + boxForBlank_->Attach(GetContext()); + animator_ = AceType::MakeRefPtr(GetContext()); + } + MarkNeedLayout(); +} + +bool RenderSemiModal::IsPageReady() const +{ + auto context = GetContext().Upgrade(); + if (!context) { + LOGE("Cannot get context!"); + return false; + } + const auto& pageStack = context->GetLastStack(); + if (!pageStack) { + LOGE("Cannot get pageStack!"); + return false; + } + const auto& pageStackNode = pageStack->GetRenderNode(); + if (!pageStackNode) { + LOGE("Cannot get pageStackNode!"); + return false; + } + return true; +} + +void RenderSemiModal::PerformLayout() +{ + // Only 2 children are allowed in RenderSemiModal + if (GetChildren().empty() || GetChildren().size() != 2) { + LOGE("Children size wrong in semi modal"); + return; + } + if (!dragBar_) { + dragBar_ = FindChildOfClass(GetChildren().back()); + } + if (dragBar_ && !(dragBar_->HasClickArrowCallback())) { + dragBar_->SetClickArrowCallback([weak = WeakClaim(this)]() { + auto semiModal = weak.Upgrade(); + if (semiModal) { + semiModal->AnimateToExitApp(); + } + }); + } + // SemiModalComponent's size is as large as the root's. + auto maxSize = GetLayoutParam().GetMaxSize(); + auto columnInfo = GridSystemManager::GetInstance().GetInfoByType(GridColumnType::PANEL); + columnInfo->GetParent()->BuildColumnWidth(); + maxWidth_ = columnInfo->GetWidth() + 2 * NormalizeToPx(columnInfo->GetParent()->GetGutterWidth()); + if (GridSystemManager::GetInstance().GetCurrentSize() <= GridSizeType::SM || isFullScreen_) { + maxWidth_ = maxSize.Width(); + } + SetLayoutSize(maxSize); + double viewPortHeight = maxSize.Height() - navigationHeight_ - blankHeight_; + if (dragBar_) { + viewPortHeight -= dragBar_->GetLayoutSize().Height(); + } + viewPort_ = Size(maxWidth_, viewPortHeight); + // Layout content region + if (isFirstLayout_) { + // First layout, calculate default height. + FirstLayout(); + } else { + InnerLayout(); + } + double verticalPosition = 0.0; + for (const auto& child : GetChildren()) { + double horizontalPosition = (maxSize.Width() - child->GetLayoutSize().Width()) / 2; + child->SetPosition(Offset(horizontalPosition, verticalPosition)); + verticalPosition += child->GetLayoutSize().Height(); + } + blankTouchRegion_ = boxForBlank_->GetPaintRect(); + blankHeight_ = boxForBlank_->GetPaintRect().Height(); + UpdateMinBlankHeight(); + forbiddenSwipe_ = GreatNotEqual(blankHeight_, minBlankHeight_); + if (isFirstLayout_) { + ShowUpAnimation(); + } + // Set isFirstLayout_ true if page not ready. + isFirstLayout_ = !IsPageReady(); +} + +void RenderSemiModal::InnerLayout() +{ + // Not first layout, use blankHeight_ control all children's size and layout. + auto maxSize = GetLayoutParam().GetMaxSize(); + auto boxForContent = GetChildren().back(); + if (updateDefaultBlank_) { + UpdateDefaultBlankHeight(); + if (isAnimatingToDefault_ && !isExit_) { + // Update animation target position. + AnimateTo(defaultBlankHeight_); + } + updateDefaultBlank_ = false; + } + LayoutParam innerLayoutParam; + innerLayoutParam.SetFixedSize(Size(maxSize.Width(), blankHeight_)); + boxForBlank_->Layout(innerLayoutParam); + innerLayoutParam.SetMaxSize(Size(maxWidth_, maxSize.Height() - blankHeight_)); + innerLayoutParam.SetMinSize(Size()); + boxForContent->Layout(innerLayoutParam); +} + +void RenderSemiModal::UpdateMinBlankHeight() +{ + if (!updateMinBlank_ || isAnimating_ || !IsPageReady()) { + return; + } + auto contentHeight = GetScrollContentHeight(); + if (dragBar_) { + contentHeight += dragBar_->GetLayoutSize().Height(); + } + contentHeight += navigationHeight_; + minBlankHeight_ = GetLayoutParam().GetMaxSize().Height() - contentHeight; + double minHeight = NormalizeToPx(BLANK_MIN_HEIGHT) + statusBarHeight_; + if (minBlankHeight_ < minHeight) { + minBlankHeight_ = minHeight; + } + updateMinBlank_ = false; + UpdateDragImg(); +} + +void RenderSemiModal::UpdateDefaultBlankHeight() +{ + auto contentHeight = GetScrollContentHeight(); + if (dragBar_) { + contentHeight += dragBar_->GetLayoutSize().Height(); + } + contentHeight += navigationHeight_; + auto maxSize = GetLayoutParam().GetMaxSize(); + if (!hasInputHeight_) { + defaultBlankHeight_ = + maxSize.Height() - std::min(contentHeight, GetLayoutParam().GetMaxSize().Height() * CONTENT_DEFAULT_RATIO); + } else { + defaultBlankHeight_ = maxSize.Height() - std::min(contentHeight, inputHeight_); + } +} + +void RenderSemiModal::OnNavigationBarHeightChanged(const Dimension& height) +{ + if (NearEqual(navigationHeight_, NormalizeToPx(height))) { + return; + } + double delta = navigationHeight_ - NormalizeToPx(height); + navigationHeight_ = NormalizeToPx(height); + // Page size and blankHeight value change opposite + MovePage(delta * -1.0); + if (isAnimatingToDefault_ || isFullScreen_) { + updateMinBlank_ = true; + updateDefaultBlank_ = true; + MarkNeedLayout(); + return; + } + auto context = context_.Upgrade(); + if (!context) { + LOGE("OnNavigationBarHeightChanged failed, context is null"); + return; + } + updateMinBlank_ = true; + updateDefaultBlank_ = true; + if (abs(delta) < context->GetRootHeight() * KEYBOARD_HEIGHT_RATIO) { + // Is not a keyboard changing. + blankHeight_ = std::max(blankHeight_ + delta, statusBarHeight_); + } else { + // Is a keyboard change. + if (LessNotEqual(delta, 0.0)) { + // keyboard slide in, remember old blank value + normalBlankHeight_ = blankHeight_; + blankHeight_ = std::clamp(blankHeight_ + delta, statusBarHeight_, minBlankHeight_); + } else { + // keyboard slide out, restore old blank value + blankHeight_ = normalBlankHeight_; + } + } + MarkNeedLayout(); +} + +void RenderSemiModal::OnStatusBarHeightChanged(const Dimension& height) +{ + if (NearEqual(statusBarHeight_, NormalizeToPx(height)) || isFullScreen_) { + return; + } + statusBarHeight_ = NormalizeToPx(height); + updateMinBlank_ = true; + MarkNeedLayout(); +} + +void RenderSemiModal::LayoutFullScreen(const RefPtr& boxForContent) +{ + if (dragBar_) { + dragBar_->SetFullScreenMode(true); + } + // blank is 0.0, content is full screen. + boxForContent->Layout(GetLayoutParam()); + LayoutParam innerLayoutParam; + innerLayoutParam.SetFixedSize(Size(0.0, 0.0)); + boxForBlank_->Layout(innerLayoutParam); +} + +void RenderSemiModal::FirstLayout() +{ + auto boxForContent = GetChildren().back(); + auto maxSize = GetLayoutParam().GetMaxSize(); + LayoutParam innerLayoutParam; + if (!hasInputHeight_) { + innerLayoutParam.SetMaxSize(Size(maxWidth_, maxSize.Height() * CONTENT_DEFAULT_RATIO)); + } else { + innerLayoutParam.SetMaxSize(Size(maxWidth_, inputHeight_)); + } + innerLayoutParam.SetMinSize(Size()); + boxForContent->Layout(innerLayoutParam); + auto contentHeight = GetScrollContentHeight(); + if (dragBar_) { + dragBar_->ShowArrow(false); + contentHeight += dragBar_->GetLayoutSize().Height(); + } + contentHeight += navigationHeight_; + double maxHeight = hasInputHeight_ ? inputHeight_ : maxSize.Height() * CONTENT_DEFAULT_RATIO; + if (contentHeight < maxHeight) { + innerLayoutParam.SetMaxSize(Size(maxWidth_, contentHeight)); + boxForContent->Layout(innerLayoutParam); + } + defaultBlankHeight_ = maxSize.Height() - boxForContent->GetLayoutSize().Height(); + // First layout, animate from maxHeight to defaultBlankHeight_. + innerLayoutParam.SetFixedSize(Size(maxSize.Width(), maxSize.Height())); + boxForBlank_->Layout(innerLayoutParam); +} + +double RenderSemiModal::GetScrollContentHeight() +{ + auto context = GetContext().Upgrade(); + if (!context) { + LOGE("Cannot get context!"); + return 0.0; + } + const auto& pageStack = context->GetLastStack(); + if (!pageStack) { + LOGE("Cannot get pageStack!"); + return 0.0; + } + const auto& pageStackNode = pageStack->GetRenderNode(); + auto page = cachedPage_.Upgrade(); + if (page && pageStackNode != page) { + // Page has changed, use first cached page height. + return cachedContentHeight_; + } + if (!pageStackNode) { + LOGE("Cannot get pageStackNode!"); + return 0.0; + } + auto scrollNode = FindChildOfClass(pageStackNode); + if (scrollNode) { + const auto& child = scrollNode->GetChildren().front(); + if (child) { + cachedPage_ = pageStackNode; + cachedContentHeight_ = child->GetLayoutSize().Height() + scrollNode->GetPosition().GetY(); + return cachedContentHeight_; + } + } + LOGE("Cannot get content size!"); + return 0.0; +} + +void RenderSemiModal::ResetContentHeight() +{ + if (isExit_) { + LOGI("semi modal is exit, skip reset content height."); + return; + } + // Reset blank height. + AnimateTo(dragStartBlankHeight_); +} + +void RenderSemiModal::ExtendContentHeight() +{ + if (NearEqual(blankHeight_, minBlankHeight_)) { + return; + } + if (isExit_) { + LOGI("semi modal is exit, skip extend content height."); + return; + } + AnimateTo(minBlankHeight_); + animator_->AddStopListener([weak = WeakClaim(this)]() { + auto semiModal = weak.Upgrade(); + if (semiModal) { + semiModal->OnExtendAnimationEnd(); + } + }); +} + +void RenderSemiModal::OnExtendAnimationEnd() +{ + blankHeight_ = minBlankHeight_; + dragBar_->ShowArrow(true); + forbiddenSwipe_ = false; +} + +void RenderSemiModal::OnAnimationStop() +{ + isAnimating_ = false; + isAnimatingToDefault_ = false; + if (!updateMinBlank_) { + // if minBlank need update, delay UpdateDragImg. + UpdateDragImg(); + } +} + +void RenderSemiModal::InitializeRecognizer() +{ + if (!clickDetector_) { + clickDetector_ = AceType::MakeRefPtr(); + clickDetector_->SetOnClick([weak = WeakClaim(this)](const ClickInfo& info) { + auto modal = weak.Upgrade(); + if (modal) { + modal->HandleClick(info.GetLocalLocation()); + } + }); + } + if (!dragDetector_) { + dragDetector_ = AceType::MakeRefPtr(); + dragDetector_->SetOnDragStart([weak = WeakClaim(this)](const DragStartInfo& startInfo) { + auto semiModal = weak.Upgrade(); + if (semiModal) { + semiModal->HandleDragStart(startInfo.GetLocalLocation()); + } + }); + dragDetector_->SetOnDragUpdate([weakDrag = AceType::WeakClaim(this)](const DragUpdateInfo& info) { + auto semiModal = weakDrag.Upgrade(); + if (semiModal) { + semiModal->HandleDragUpdate(info.GetLocalLocation()); + } + }); + dragDetector_->SetOnDragEnd([weakDrag = AceType::WeakClaim(this)](const DragEndInfo& info) { + auto semiModal = weakDrag.Upgrade(); + if (semiModal) { + semiModal->HandleDragEnd(info.GetLocalLocation()); + } + }); + } +} + +bool RenderSemiModal::TouchTest(const Point& globalPoint, const Point& parentLocalPoint, + const TouchRestrict& touchRestrict, TouchTestResult& result) +{ + // Forbidden vertical swipe of all children. + TouchRestrict newRestrict = touchRestrict; + if (!isFullScreen_ && forbiddenSwipe_) { + newRestrict.UpdateForbiddenType(TouchRestrict::SWIPE_VERTICAL); + } + return RenderNode::TouchTest(globalPoint, parentLocalPoint, newRestrict, result); +} + +void RenderSemiModal::OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) +{ + if (isFullScreen_ || isAnimating_) { + return; + } + if (clickDetector_) { + clickDetector_->SetCoordinateOffset(coordinateOffset); + result.emplace_back(clickDetector_); + } + if (dragDetector_) { + dragDetector_->SetCoordinateOffset(coordinateOffset); + result.emplace_back(dragDetector_); + } +} + +void RenderSemiModal::HandleClick(const Offset& clickPosition) +{ + // Quit ability when clicking the blank region + if (blankTouchRegion_.IsInRegion(Point(clickPosition.GetX(), clickPosition.GetY()))) { + AnimateToExitApp(); + } +} + +void RenderSemiModal::AnimateToExitApp() +{ + if (isExit_) { + LOGI("semi modal is exit, skip exit app."); + return; + } + AnimateTo(GetLayoutSize().Height()); + + animator_->AddStopListener([weak = context_, semiWeak = AceType::WeakClaim(this)]() { + auto context = weak.Upgrade(); + if (context) { + // force finish + context->Finish(false); + } + auto semi = semiWeak.Upgrade(); + if (semi) { + semi->isExit_ = false; + } + }); + isExit_ = true; + auto root = AceType::DynamicCast(GetParent().Upgrade()); + if (!root) { + LOGE("Exit app animation failed. root is null."); + return; + } + root->AnimateToHide(animator_->GetDuration()); +} + +void RenderSemiModal::HandleDragStart(const Offset& startPoint) +{ + if (isAnimating_) { + return; + } + dragStartPoint_ = startPoint; + canHandleDrag_ = dragStartPoint_.GetY() >= blankHeight_; + dragStartBlankHeight_ = blankHeight_; +} + +void RenderSemiModal::HandleDragUpdate(const Offset& currentPoint) +{ + if (!canHandleDrag_ || isAnimating_) { + return; + } + double targetBlankHeight = dragStartBlankHeight_ + currentPoint.GetY() - dragStartPoint_.GetY(); + if (targetBlankHeight < minBlankHeight_) { + targetBlankHeight = minBlankHeight_; + } + // Do not drag to make page content height <= zero. + double maxBlankHeight = GetLayoutSize().Height() - navigationHeight_ - CONTENT_MIN_TOLERANCE; + if (dragBar_) { + maxBlankHeight -= dragBar_->GetLayoutSize().Height(); + } + if (targetBlankHeight > maxBlankHeight) { + targetBlankHeight = maxBlankHeight; + } + blankHeight_ = targetBlankHeight; + UpdateDragImg(); + MarkNeedLayout(); +} + +void RenderSemiModal::UpdateDragImg() +{ + if (!dragBar_) { + return; + } + auto min = minBlankHeight_ - NormalizeToPx(DRAG_BAR_ARROW_BIAS); + auto max = minBlankHeight_ + NormalizeToPx(DRAG_BAR_ARROW_BIAS); + if (blankHeight_ < max && blankHeight_ > min) { + dragBar_->ShowArrow(true); + } else { + dragBar_->ShowArrow(false); + } +} + +void RenderSemiModal::HandleDragEnd(const Offset& endPoint) +{ + if (!canHandleDrag_ || isAnimating_) { + return; + } + auto dragStart = dragStartPoint_.GetY(); + double targetBlankHeight = dragStartBlankHeight_ + endPoint.GetY() - dragStart; + if (targetBlankHeight <= minBlankHeight_) { + ExtendContentHeight(); + return; + } + if (endPoint.GetY() < dragStart) { + // Handle drag up. + bool extendToMax = dragStart - endPoint.GetY() >= NormalizeToPx(DRAG_UP_THRESHOLD); + if (extendToMax) { + ExtendContentHeight(); + } else { + ResetContentHeight(); + } + } else if (endPoint.GetY() >= dragStart) { + // Handle drag down. + bool exitApp = endPoint.GetY() - dragStart >= NormalizeToPx(DRAG_DOWN_THRESHOLD); + if (exitApp) { + AnimateToExitApp(); + } else { + ResetContentHeight(); + } + } +} + +void RenderSemiModal::AppendContentRadiusAnimation(double radius) +{ + // drag bar radius + auto contentRender = AceType::DynamicCast(GetChildren().back()); + if (!contentRender) { + LOGE("Append content radius animation failed. content render is null"); + return; + } + auto backDecoration = contentRender->GetBackDecoration(); + auto border = backDecoration->GetBorder(); + auto topLeftRadius = border.TopLeftRadius(); + auto context = context_.Upgrade(); + if (!context) { + LOGE("Append content radius animation failed. context is null"); + return; + } + auto keyframeFrom = AceType::MakeRefPtr>(0.0, context->NormalizeToPx(topLeftRadius.GetX())); + auto keyframeTo = AceType::MakeRefPtr>(1.0, radius); + auto radiusAnimation = AceType::MakeRefPtr>(); + radiusAnimation->AddKeyframe(keyframeFrom); + radiusAnimation->AddKeyframe(keyframeTo); + radiusAnimation->SetCurve(Curves::FRICTION); + radiusAnimation->AddListener([semiWeak = AceType::WeakClaim(this)](const double& radius) { + auto semi = semiWeak.Upgrade(); + if (!semi) { + LOGE("Semi modal is null."); + return; + } + auto contentRender = AceType::DynamicCast(semi->GetChildren().back()); + if (!contentRender) { + LOGE("Content Render is null."); + return; + } + auto backDecoration = contentRender->GetBackDecoration(); + if (!backDecoration) { + LOGE("Back Decoration is null."); + return; + } + auto border = backDecoration->GetBorder(); + border.SetTopLeftRadius(Radius(radius)); + border.SetTopRightRadius(Radius(radius)); + backDecoration->SetBorder(border); + contentRender->SetBackDecoration(backDecoration); + }); + animator_->AddInterpolator(radiusAnimation); +} + +void RenderSemiModal::AppendBlankHeightAnimation(double blankHeight) +{ + if (LessNotEqual(blankHeight_, 0.0)) { + LOGE("Append animation failed. Blank height less than zero."); + return; + } + // blankHeight_ -> blankHeight + auto keyframeFrom = AceType::MakeRefPtr>(0.0, blankHeight_); + auto keyframeTo = AceType::MakeRefPtr>(1.0, blankHeight); + auto heightAnimation = AceType::MakeRefPtr>(); + heightAnimation->AddKeyframe(keyframeFrom); + heightAnimation->AddKeyframe(keyframeTo); + heightAnimation->SetCurve(Curves::FRICTION); + + heightAnimation->AddListener([semiWeak = AceType::WeakClaim(this)](const double& height) { + auto semi = semiWeak.Upgrade(); + if (!semi) { + LOGE("Semi modal is null."); + return; + } + if (LessNotEqual(height, 0.0)) { + LOGE("Height less than zero, do not animate it."); + return; + } + semi->blankHeight_ = height; + semi->MarkNeedLayout(); + }); + animator_->AddInterpolator(heightAnimation); +} + +void RenderSemiModal::AnimateToFullWindow(int32_t duration) +{ + if (!animator_) { + LOGE("animate failed. animator is null."); + return; + } + isFullScreen_ = true; + if (NearZero(blankHeight_)) { + LOGE("already full window, no need to animate."); + return; + } + if (animator_->IsRunning()) { + animator_->Finish(); + } + animator_->ClearInterpolators(); + animator_->ClearAllListeners(); + AppendBlankHeightAnimation(0.0); + AppendContentRadiusAnimation(0.0); + if (duration == -1) { + auto dragRange = GetLayoutParam().GetMaxSize().Height(); + duration = GetAnimationDuration(blankHeight_, dragRange); + } + animator_->SetDuration(duration); + animator_->SetFillMode(FillMode::FORWARDS); + animator_->Forward(); + + if (!dragBar_) { + LOGE("Animate render drag bar failed. render drag bar is null."); + return; + } + dragBar_->AnimateToStatusBarPadding(duration); +} + +void RenderSemiModal::AnimateTo(double blankHeight) +{ + if (isExit_) { + LOGE("semi modal is exit, skip animate to."); + return; + } + isAnimating_ = true; + animator_->ClearInterpolators(); + animator_->ClearAllListeners(); + if (animator_->IsRunning()) { + animator_->Stop(); + } + animator_->AddStopListener([weak = WeakClaim(this)]() { + auto semiModal = weak.Upgrade(); + if (semiModal) { + semiModal->OnAnimationStop(); + } + }); + AppendBlankHeightAnimation(blankHeight); + auto dragRange = GetLayoutParam().GetMaxSize().Height(); + animator_->SetDuration(GetAnimationDuration(blankHeight - blankHeight_, dragRange)); + animator_->SetFillMode(FillMode::FORWARDS); + animator_->Forward(); +} + +void RenderSemiModal::ShowUpAnimation() +{ + if (isExit_) { + LOGI("semi modal is exit, skip show up animation."); + return; + } + if (isFullScreen_) { + auto context = context_.Upgrade(); + if (!context) { + LOGE("Show up animation failed. context is null."); + return; + } + context->RequestFullWindow(-1); + } else { + isAnimatingToDefault_ = true; + AnimateTo(defaultBlankHeight_); + auto root = AceType::DynamicCast(GetParent().Upgrade()); + if (!root) { + LOGE("Show up animation failed. root is null."); + return; + } + root->AnimateToShow(animator_->GetDuration()); + } +} + +void RenderSemiModal::Dump() +{ + if (DumpLog::GetInstance().GetDumpFile()) { + DumpLog::GetInstance().AddDesc(std::string("navigationHeight: ").append(std::to_string(navigationHeight_))); + DumpLog::GetInstance().AddDesc(std::string("statusBarHeight: ").append(std::to_string(statusBarHeight_))); + DumpLog::GetInstance().AddDesc(std::string("blankHeight: ").append(std::to_string(blankHeight_))); + DumpLog::GetInstance().AddDesc(std::string("defaultBlankHeight: ").append(std::to_string(defaultBlankHeight_))); + DumpLog::GetInstance().AddDesc(std::string("minBlankHeight: ").append(std::to_string(minBlankHeight_))); + DumpLog::GetInstance().AddDesc(std::string("normalBlankHeight: ").append(std::to_string(normalBlankHeight_))); + } +} + +void RenderSemiModal::MovePage(double delta) +{ + auto context = context_.Upgrade(); + if (!context) { + LOGE("Move failed, context is null"); + return; + } + if (!dragBar_) { + LOGE("Move failed, drag Bar is null"); + return; + } + auto parent = dragBar_->GetParent().Upgrade(); + if (!parent) { + LOGE("Move failed, drag Bar's parent is null"); + return; + } + + auto iter = parent->GetChildren().begin(); + // get flex child in second position. + advance(iter, 1); + if (iter == parent->GetChildren().end()) { + LOGE("Move failed, flex is null"); + return; + } + auto render = (*iter); + if (!render) { + LOGE("Move failed, render is null"); + return; + } + double newHeight = render->GetGlobalOffset().GetY() + render->GetPaintRect().Height() - delta; + context->MovePage(Offset(render->GetPaintRect().Width(), newHeight), delta); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/semi_modal/render_semi_modal.h b/frameworks/core/components/semi_modal/render_semi_modal.h new file mode 100644 index 00000000..1bcefda7 --- /dev/null +++ b/frameworks/core/components/semi_modal/render_semi_modal.h @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SEMI_MODAL_RENDER_SEMI_MODAL_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SEMI_MODAL_RENDER_SEMI_MODAL_H + +#include "core/animation/animator.h" +#include "core/components/box/render_box.h" +#include "core/components/drag_bar/render_drag_bar.h" +#include "core/components/scroll/render_single_child_scroll.h" +#include "core/components/semi_modal/semi_modal_component.h" +#include "core/gestures/click_recognizer.h" +#include "core/gestures/drag_recognizer.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderSemiModal : public RenderNode { + DECLARE_ACE_TYPE(RenderSemiModal, RenderNode); + +public: + static RefPtr Create(); + void Update(const RefPtr& component) override; + void PerformLayout() override; + bool TouchTest(const Point& globalPoint, const Point& parentLocalPoint, const TouchRestrict& touchRestrict, + TouchTestResult& result) override; + + void ResetContentHeight(); + void ExtendContentHeight(); + void OnExtendAnimationEnd(); + void OnAnimationStop(); + void AnimateToExitApp(); + void AnimateToFullWindow(int32_t duration); + void OnNavigationBarHeightChanged(const Dimension& height); + void OnStatusBarHeightChanged(const Dimension& height); + + double GetBlankHeight() const + { + return blankHeight_; + } + + const RefPtr& GetDragBar() const + { + return dragBar_; + } + + void Dump() override; + +protected: + void OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) override; + +private: + void InitializeRecognizer(); + void HandleClick(const Offset& clickPosition); + void HandleDragStart(const Offset& startPoint); + void HandleDragUpdate(const Offset& currentPoint); + void HandleDragEnd(const Offset& endPoint); + void FirstLayout(); + void LayoutFullScreen(const RefPtr& boxForContent); + double GetScrollContentHeight(); + void AnimateTo(double blankHeight); + void AppendBlankHeightAnimation(double blankHeight); + void AppendContentRadiusAnimation(double radius); + void UpdateDragImg(); + void UpdateMinBlankHeight(); + void UpdateDefaultBlankHeight(); + void ShowUpAnimation(); + void InnerLayout(); + bool IsPageReady() const; + void MovePage(double delta); + + RefPtr boxForBlank_; + RefPtr clickDetector_; + RefPtr animator_; + RefPtr dragDetector_; + RefPtr dragBar_; + Rect blankTouchRegion_; + WeakPtr cachedPage_; + double cachedContentHeight_ = 0.0; + double blankHeight_ = -std::numeric_limits::max(); + double normalBlankHeight_ = -std::numeric_limits::max(); // save blank height when keyboard not show up + double defaultBlankHeight_ = 0.0; + double minBlankHeight_ = 0.0; + bool isFirstUpdate_ = true; + bool isFirstLayout_ = true; + Offset dragStartPoint_; + double dragStartBlankHeight_ = 0.0; + bool canHandleDrag_ = false; + bool forbiddenSwipe_ = true; + bool isAnimating_ = false; + bool isAnimatingToDefault_ = false; + bool isFullScreen_ = false; + double navigationHeight_ = 0.0; + double statusBarHeight_ = 0.0; + bool updateMinBlank_ = true; + bool updateDefaultBlank_ = true; + bool isExit_ = false; + double inputHeight_ = 0.0; + bool hasInputHeight_ = false; + double maxWidth_ = 0.0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SEMI_MODAL_RENDER_SEMI_MODAL_H diff --git a/frameworks/core/components/semi_modal/semi_modal_component.cpp b/frameworks/core/components/semi_modal/semi_modal_component.cpp new file mode 100644 index 00000000..3e46b182 --- /dev/null +++ b/frameworks/core/components/semi_modal/semi_modal_component.cpp @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/semi_modal/semi_modal_component.h" + +#include "core/components/box/box_component.h" +#include "core/components/clip/clip_component.h" +#include "core/components/drag_bar/drag_bar_component.h" +#include "core/components/flex/flex_component.h" +#include "core/components/flex/flex_item_component.h" +#include "core/components/padding/padding_component.h" +#include "core/components/semi_modal/render_semi_modal.h" +#include "core/components/semi_modal/semi_modal_element.h" + +namespace OHOS::Ace { +namespace { + +const auto DRAG_BAR_RADIUS = 24.0_vp; +const Color BG_COLOR = Color(0xfff7f7f7); +constexpr uint32_t DEFAULT_COLOR_VALUE = 0xff000000; + +} // namespace + +RefPtr SemiModalComponent::Create( + RefPtr child, bool isFullScreen, int32_t modalHeight, uint32_t color) +{ + auto semiModal = AceType::MakeRefPtr(isFullScreen); + semiModal->SetModalHeight(modalHeight); + semiModal->SetChild(child); + semiModal->BuildInnerChild(color); + return semiModal; +} + +RefPtr SemiModalComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +RefPtr SemiModalComponent::CreateRenderNode() +{ + return RenderSemiModal::Create(); +} + +// Build SemiModal FA structure +void SemiModalComponent::BuildInnerChild(uint32_t color) +{ + auto boxForContent = AceType::MakeRefPtr(); + auto dragBar = AceType::MakeRefPtr(); + auto boxForNavigation = AceType::MakeRefPtr(); + auto backDecoration = AceType::MakeRefPtr(); + if (color != DEFAULT_COLOR_VALUE) { + backDecoration->SetBackgroundColor(Color(color)); + } else { + backDecoration->SetBackgroundColor(BG_COLOR); + } + Border border; + border.SetTopLeftRadius(Radius(DRAG_BAR_RADIUS)); + border.SetTopRightRadius(Radius(DRAG_BAR_RADIUS)); + backDecoration->SetBorder(border); + auto clip = AceType::MakeRefPtr(GetChild()); + auto column = + AceType::MakeRefPtr(FlexAlign::FLEX_START, FlexAlign::CENTER, std::list>()); + auto flexItem = AceType::MakeRefPtr(1, 1, 0); + flexItem->SetChild(clip); + column->AppendChild(dragBar); + column->AppendChild(flexItem); + column->AppendChild(boxForNavigation); + boxForContent->SetBackDecoration(backDecoration); + boxForContent->SetFlex(BoxFlex::FLEX_X); + boxForContent->SetAlignment(Alignment::CENTER); + boxForContent->SetChild(column); + SetChild(boxForContent); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/semi_modal/semi_modal_component.h b/frameworks/core/components/semi_modal/semi_modal_component.h new file mode 100644 index 00000000..3b697297 --- /dev/null +++ b/frameworks/core/components/semi_modal/semi_modal_component.h @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SEMI_MODAL_SEMI_MODAL_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SEMI_MODAL_SEMI_MODAL_COMPONENT_H + +#include "core/pipeline/base/sole_child_component.h" + +namespace OHOS::Ace { + +class SemiModalComponent : public SoleChildComponent { + DECLARE_ACE_TYPE(SemiModalComponent, SoleChildComponent); + +public: + explicit SemiModalComponent(bool isFullScreen) : isFullScreen_(isFullScreen) {} + ~SemiModalComponent() override = default; + + static RefPtr Create(RefPtr child, bool isFullScreen, int32_t modalHeight, uint32_t color); + + RefPtr CreateElement() override; + + RefPtr CreateRenderNode() override; + + void BuildInnerChild(uint32_t color); + + bool IsFullScreen() const + { + return isFullScreen_; + } + + void SetModalHeight(double height) + { + modalHeight_ = height; + } + + double GetModalHeight() const + { + return modalHeight_; + } + +private: + bool isFullScreen_ = false; + + double modalHeight_ = 0.0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SEMI_MODAL_SEMI_MODAL_COMPONENT_H diff --git a/frameworks/core/components/semi_modal/semi_modal_element.cpp b/frameworks/core/components/semi_modal/semi_modal_element.cpp new file mode 100644 index 00000000..ff3e1c09 --- /dev/null +++ b/frameworks/core/components/semi_modal/semi_modal_element.cpp @@ -0,0 +1,176 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/semi_modal/semi_modal_element.h" + +#include "core/components/box/box_element.h" +#include "core/components/flex/flex_element.h" +#include "core/components/flex/flex_item_element.h" +#include "core/components/semi_modal/render_semi_modal.h" + +namespace OHOS::Ace { +namespace { + +const auto BACKGROUND_COLOR_DEFAULT = Color::WHITE; +constexpr uint32_t COLUMN_CHILD_MIN = 2; + +} // namespace + +void SemiModalElement::AnimateToFullWindow(int32_t duration) +{ + auto render = AceType::DynamicCast(GetRenderNode()); + if (!render) { + LOGE("Animate full window failed. render is null"); + return; + } + render->AnimateToFullWindow(duration); +} + +const Color& SemiModalElement::GetBackgroundColor() const +{ + auto boxElement = GetFirstChild(); + if (!boxElement) { + LOGE("Get background color failed. box element is null"); + return BACKGROUND_COLOR_DEFAULT; + } + auto boxRender = AceType::DynamicCast(boxElement->GetRenderNode()); + if (!boxRender) { + LOGE("Get background color failed. box render is null"); + return BACKGROUND_COLOR_DEFAULT; + } + auto decoration = boxRender->GetBackDecoration(); + if (!decoration) { + LOGE("Get background color failed. box decoration is null"); + return BACKGROUND_COLOR_DEFAULT; + } + return decoration->GetBackgroundColor(); +} + +bool SemiModalElement::IsFullWindow() const +{ + return fullWindow_; +} + +void SemiModalElement::SetFullWindow(bool fullWindow) +{ + fullWindow_ = fullWindow; +} + +void SemiModalElement::UpdateSystemBarHeight(double statusBar, double navigationBar) +{ + auto box = GetFirstChild(); + if (!box) { + LOGE("Update system bar failed. box is null."); + return; + } + auto column = box->GetFirstChild(); + UpdateStatusBarHeight(column, statusBar); + UpdateNavigationBarHeight(column, navigationBar); +} + +void SemiModalElement::UpdateStatusBarHeight(const RefPtr& column, double height) +{ + auto renderSemi = AceType::DynamicCast(GetRenderNode()); + if (!renderSemi) { + LOGE("Update status bar failed. RenderSemi is null."); + return; + } + renderSemi->OnStatusBarHeightChanged(Dimension(height, DimensionUnit::VP)); + if (!column) { + LOGE("Update status bar failed. column is null."); + return; + } + auto dragBarElement = column->GetFirstChild(); + if (!dragBarElement) { + LOGE("Update status bar failed. drag bar element is null."); + return; + } + auto dragBarRender = AceType::DynamicCast(dragBarElement->GetRenderNode()); + if (!dragBarRender) { + LOGE("Update status bar failed. drag bar render is null."); + return; + } + dragBarRender->SetStatusBarHeight(height); +} + +void SemiModalElement::UpdateNavigationBarHeight(const RefPtr& column, double height) +{ + auto renderSemi = AceType::DynamicCast(GetRenderNode()); + if (!renderSemi) { + LOGE("Update navigation bar failed. RenderSemi is null."); + return; + } + renderSemi->OnNavigationBarHeightChanged(Dimension(height, DimensionUnit::VP)); + if (!column) { + LOGE("Update navigation bar failed. column is null."); + return; + } + auto navigationElement = column->GetLastChild(); + if (!navigationElement) { + LOGE("Update navigation bar failed. navigation element is null."); + return; + } + auto navigationRender = AceType::DynamicCast(navigationElement->GetRenderNode()); + if (!navigationRender) { + LOGE("Update navigation bar failed. navigation render is null."); + return; + } + auto context = context_.Upgrade(); + if (!context) { + LOGE("Update navigation bar failed. context is null."); + return; + } + navigationRender->SetHeight(context->NormalizeToPx(Dimension(height, DimensionUnit::VP))); +} + +RefPtr SemiModalElement::GetOverlayElement() const +{ + auto box = AceType::DynamicCast(GetFirstChild()); + if (!box) { + LOGE("Get overlay element failed. Box element is null!"); + return RefPtr(); + } + auto column = AceType::DynamicCast(box->GetFirstChild()); + if (!column || column->GetChildren().size() < COLUMN_CHILD_MIN) { + // column should has more than 2 child + LOGE("Get overlay element failed. Column is null or child size error!"); + return RefPtr(); + } + // Get second child + auto secondItr = std::next(column->GetChildren().begin()); + auto flexItem = AceType::DynamicCast(*secondItr); + if (!flexItem) { + LOGE("Get overlay element failed. FlexItemElement is null!"); + return RefPtr(); + } + auto clip = flexItem->GetFirstChild(); + if (!clip) { + LOGE("Get overlay element failed. clip is null!"); + return RefPtr(); + } + return AceType::DynamicCast(clip->GetFirstChild()); +} + +void SemiModalElement::AnimateToExitApp() const +{ + auto renderSemi = AceType::DynamicCast(GetRenderNode()); + if (!renderSemi) { + LOGE("Animate To Exit failed. RenderSemi is null."); + return; + } + renderSemi->AnimateToExitApp(); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/semi_modal/semi_modal_element.h b/frameworks/core/components/semi_modal/semi_modal_element.h new file mode 100644 index 00000000..e37008c2 --- /dev/null +++ b/frameworks/core/components/semi_modal/semi_modal_element.h @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SEMI_MODAL_SEMI_MODAL_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SEMI_MODAL_SEMI_MODAL_ELEMENT_H + +#include "core/components/overlay/overlay_element.h" +#include "core/pipeline/base/sole_child_element.h" + +namespace OHOS::Ace { + +class SemiModalElement : public SoleChildElement { + DECLARE_ACE_TYPE(SemiModalElement, SoleChildElement); + +public: + void AnimateToFullWindow(int32_t duration); + + const Color& GetBackgroundColor() const; + + bool IsFullWindow() const; + + void SetFullWindow(bool fullWindow); + + void UpdateSystemBarHeight(double statusBar, double navigationBar); + + RefPtr GetOverlayElement() const; + + void AnimateToExitApp() const; + +private: + void UpdateStatusBarHeight(const RefPtr& column, double height); + void UpdateNavigationBarHeight(const RefPtr& column, double height); + bool fullWindow_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SEMI_MODAL_SEMI_MODAL_ELEMENT_H diff --git a/frameworks/core/components/shadow/BUILD.gn b/frameworks/core/components/shadow/BUILD.gn new file mode 100644 index 00000000..c9eb3af8 --- /dev/null +++ b/frameworks/core/components/shadow/BUILD.gn @@ -0,0 +1,21 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("shadow") { + sources = [ + "flutter_render_shadow.cpp", + "render_shadow.cpp", + ] +} diff --git a/frameworks/core/components/shadow/flutter_render_shadow.cpp b/frameworks/core/components/shadow/flutter_render_shadow.cpp new file mode 100644 index 00000000..9ddf729b --- /dev/null +++ b/frameworks/core/components/shadow/flutter_render_shadow.cpp @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/shadow/flutter_render_shadow.h" + +#include "third_party/skia/include/core/SkCanvas.h" +#include "third_party/skia/include/core/SkColor.h" +#include "third_party/skia/include/core/SkMaskFilter.h" + +#include "core/pipeline/base/scoped_canvas_state.h" + +namespace OHOS::Ace { +namespace { + +constexpr uint8_t SHADOW_COLOR_ALPHA = 77; +constexpr float SHADOW_BLUR_RADIUS = 20.0f; +constexpr Dimension SHADOW_OFFSET = 10.0_vp; + +} // namespace + +using namespace Flutter; + +RefPtr RenderShadow::Create() +{ + return AceType::MakeRefPtr(); +} + +RenderLayer FlutterRenderShadow::GetRenderLayer() +{ + if (!layer_) { + layer_ = AceType::MakeRefPtr(0.0, 0.0); + } + return AceType::RawPtr(layer_); +} + +void FlutterRenderShadow::Paint(RenderContext& context, const Offset& offset) +{ + if (!isDisplay_) { + return; + } + + auto canvas = ScopedCanvas::Create(context); + if (!canvas) { + LOGE("canvas fetch failed"); + return; + } + SkCanvas* skCanvas = canvas->canvas(); + if (skCanvas == nullptr) { + LOGE("skCanvas fetch failed"); + return; + } + + if (isNeedClip_) { + skCanvas->clipRect(SkRect::MakeXYWH(clipRect_.GetOffset().GetX() - NormalizeToPx(SHADOW_OFFSET) / 2, + clipRect_.GetOffset().GetY(), clipRect_.Width() + NormalizeToPx(SHADOW_OFFSET), + clipRect_.Height() + NormalizeToPx(SHADOW_OFFSET)), true); + } + + double radiusX = NormalizeToPx(rrect_.GetCorner().bottomLeftRadius.GetX()); + double radiusY = NormalizeToPx(rrect_.GetCorner().bottomLeftRadius.GetY()); + + SkPaint paint; + paint.setColor(SkColorSetARGB(SHADOW_COLOR_ALPHA, 0, 0, 0)); + paint.setStyle(SkPaint::Style::kStrokeAndFill_Style); + paint.setMaskFilter(SkMaskFilter::MakeBlur(SkBlurStyle::kNormal_SkBlurStyle, SHADOW_BLUR_RADIUS)); + SkRect rect = SkRect::MakeXYWH(offset_.GetX(), offset_.GetY(), rrect_.Width(), rrect_.Height()); + skCanvas->clipRRect(SkRRect::MakeRectXY(rect, radiusX, radiusY), SkClipOp::kDifference, true); + rect = SkRect::MakeXYWH( + offset_.GetX(), offset_.GetY() + NormalizeToPx(SHADOW_OFFSET), rrect_.Width(), rrect_.Height()); + skCanvas->drawRRect(SkRRect::MakeRectXY(rect, radiusX, radiusY), paint); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/shadow/flutter_render_shadow.h b/frameworks/core/components/shadow/flutter_render_shadow.h new file mode 100644 index 00000000..273a877e --- /dev/null +++ b/frameworks/core/components/shadow/flutter_render_shadow.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SHADOW_FLUTTER_RENDER_SHADOW_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SHADOW_FLUTTER_RENDER_SHADOW_H + +#include "core/components/shadow/render_shadow.h" +#include "core/pipeline/layers/offset_layer.h" + +namespace OHOS::Ace { + +class FlutterRenderShadow : public RenderShadow { + DECLARE_ACE_TYPE(FlutterRenderShadow, RenderShadow); + +public: + void Paint(RenderContext& context, const Offset& offset) override; + RenderLayer GetRenderLayer() override; + +private: + RefPtr layer_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SHADOW_FLUTTER_RENDER_SHADOW_H diff --git a/frameworks/core/components/shadow/render_shadow.cpp b/frameworks/core/components/shadow/render_shadow.cpp new file mode 100644 index 00000000..08e2d659 --- /dev/null +++ b/frameworks/core/components/shadow/render_shadow.cpp @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/shadow/render_shadow.h" + +#include "base/utils/system_properties.h" + +namespace OHOS::Ace { + +void RenderShadow::PerformLayout() +{ + SetLayoutSize(GetLayoutParam().GetMaxSize()); +} + +void RenderShadow::SetShadowProperties(const RRect& rrect, const Offset& offset) +{ + if (SystemProperties::GetDeviceType() != DeviceType::TV) { + return; + } + rrect_ = rrect; + offset_ = offset - GetGlobalOffset(); + isDisplay_ = true; + MarkNeedRender(true); +} + +void RenderShadow::SetShadowProperties(const RRect& rrect, const Offset& offset, const Rect& clipRect) +{ + if (SystemProperties::GetDeviceType() != DeviceType::TV) { + return; + } + clipRect_ = clipRect; + isNeedClip_ = true; + rrect_ = rrect; + offset_ = offset - GetGlobalOffset(); + isDisplay_ = true; + MarkNeedRender(true); +} + +void RenderShadow::CancelShadow() +{ + if (SystemProperties::GetDeviceType() != DeviceType::TV) { + return; + } + isDisplay_ = false; + MarkNeedRender(true); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/shadow/render_shadow.h b/frameworks/core/components/shadow/render_shadow.h new file mode 100644 index 00000000..9bb2edc2 --- /dev/null +++ b/frameworks/core/components/shadow/render_shadow.h @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SHADOW_RENDER_SHADOW_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SHADOW_RENDER_SHADOW_H + +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderShadow : public RenderNode { + DECLARE_ACE_TYPE(RenderShadow, RenderNode); + +public: + RenderShadow() : RenderNode(true) {}; + ~RenderShadow() override = default; + + static RefPtr Create(); + void PerformLayout() override; + void Update(const RefPtr& component) override {}; + void SetShadowProperties(const RRect& rrect, const Offset& offset); + void SetShadowProperties(const RRect& rrect, const Offset& offset, const Rect& clipRect); + void CancelShadow(); + bool MouseHoverTest(const Point& parentLocalPoint) override + { + // this node is not required hover state. + return false; + } + +protected: + Rect clipRect_; + RRect rrect_; + Offset offset_; + bool isDisplay_ = false; + bool isNeedClip_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SHADOW_RENDER_SHADOW_H diff --git a/frameworks/core/components/shadow/shadow_component.h b/frameworks/core/components/shadow/shadow_component.h new file mode 100644 index 00000000..da9df7a6 --- /dev/null +++ b/frameworks/core/components/shadow/shadow_component.h @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SHADOW_SHADOW_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SHADOW_SHADOW_COMPONENT_H + +#include "core/components/shadow/render_shadow.h" +#include "core/components/shadow/shadow_element.h" +#include "core/pipeline/base/render_component.h" + +namespace OHOS::Ace { + +class ShadowComponent : public RenderComponent { + DECLARE_ACE_TYPE(ShadowComponent, RenderComponent); + +public: + RefPtr CreateRenderNode() override + { + return RenderShadow::Create(); + } + + RefPtr CreateElement() override + { + return AceType::MakeRefPtr(); + } +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SHADOW_SHADOW_COMPONENT_H diff --git a/frameworks/core/components/shadow/shadow_element.h b/frameworks/core/components/shadow/shadow_element.h new file mode 100644 index 00000000..caf25eb3 --- /dev/null +++ b/frameworks/core/components/shadow/shadow_element.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SHADOW_SHADOW_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SHADOW_SHADOW_ELEMENT_H + +#include "core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +class ShadowElement : public RenderElement { + DECLARE_ACE_TYPE(ShadowElement, RenderElement); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SHADOW_SHADOW_ELEMENT_H diff --git a/frameworks/core/components/shared_transition/BUILD.gn b/frameworks/core/components/shared_transition/BUILD.gn new file mode 100644 index 00000000..01d3de93 --- /dev/null +++ b/frameworks/core/components/shared_transition/BUILD.gn @@ -0,0 +1,21 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("shared_transition") { + sources = [ + "shared_transition_component.cpp", + "shared_transition_element.cpp", + ] +} diff --git a/frameworks/core/components/shared_transition/shared_transition_component.cpp b/frameworks/core/components/shared_transition/shared_transition_component.cpp new file mode 100644 index 00000000..22d38583 --- /dev/null +++ b/frameworks/core/components/shared_transition/shared_transition_component.cpp @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/shared_transition/shared_transition_component.h" + +#include "base/utils/system_properties.h" +#include "core/components/shared_transition/shared_transition_element.h" + +namespace OHOS::Ace { + +SharedTransitionComponent::SharedTransitionComponent(const ComposeId& id, const std::string& name, ShareId shareId) + : ComposedComponent(id, name), shareId_(std::move(shareId)) +{ + InitEnableStatus(); +} + +void SharedTransitionComponent::SetOption(const TweenOption& option) +{ + option_ = option; +} + +const TweenOption& SharedTransitionComponent::GetOption() const +{ + return option_; +} + +const ShareId& SharedTransitionComponent::GetShareId() const +{ + return shareId_; +} + +RefPtr SharedTransitionComponent::CreateElement() +{ + return AceType::MakeRefPtr(GetId()); +} + +void SharedTransitionComponent::SetEffect(RefPtr& effect) +{ + if (effect) { + effect_ = effect; + } else { + effect_ = SharedTransitionEffect::GetSharedTransitionEffect( + SharedTransitionEffectType::SHARED_EFFECT_EXCHANGE, shareId_); + } +} + +const RefPtr& SharedTransitionComponent::GetEffect() const +{ + return effect_; +} + +void SharedTransitionComponent::InitEnableStatus() +{ + // In the watch scene, drag to return to the previous page, and disable shared element transitions + if (SystemProperties::GetDeviceType() == DeviceType::WATCH) { + enablePopEnter_ = false; + enablePopExit_ = false; + } +} + +bool SharedTransitionComponent::IsEnablePopEnter() const +{ + return enablePopEnter_; +} + +void SharedTransitionComponent::SetEnablePopEnter(bool enablePopEnter) +{ + enablePopEnter_ = enablePopEnter; +} + +bool SharedTransitionComponent::IsEnablePushEnter() const +{ + return enablePushEnter_; +} + +void SharedTransitionComponent::SetEnablePushEnter(bool enablePushEnter) +{ + enablePushEnter_ = enablePushEnter; +} + +bool SharedTransitionComponent::IsEnablePopExit() const +{ + return enablePopExit_; +} + +void SharedTransitionComponent::SetEnablePopExit(bool enablePopExit) +{ + enablePopExit_ = enablePopExit; +} + +bool SharedTransitionComponent::IsEnablePushExit() const +{ + return enablePushExit_; +} + +void SharedTransitionComponent::SetEnablePushExit(bool enablePushExit) +{ + enablePushExit_ = enablePushExit; +} + +void SharedTransitionComponent::SetShareId(const ShareId& shareId) +{ + shareId_ = shareId; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/shared_transition/shared_transition_component.h b/frameworks/core/components/shared_transition/shared_transition_component.h new file mode 100644 index 00000000..c0d62009 --- /dev/null +++ b/frameworks/core/components/shared_transition/shared_transition_component.h @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SHARED_TRANSITION_SHARED_TRANSITION_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SHARED_TRANSITION_SHARED_TRANSITION_COMPONENT_H + +#include "core/animation/shared_transition_effect.h" +#include "core/components/common/properties/tween_option.h" +#include "core/pipeline/base/composed_component.h" + +namespace OHOS::Ace { + +class SharedTransitionEffect; + +class SharedTransitionComponent : public ComposedComponent { + DECLARE_ACE_TYPE(SharedTransitionComponent, ComposedComponent); + +public: + SharedTransitionComponent(const ComposeId& id, const std::string& name, ShareId shareId); + ~SharedTransitionComponent() override = default; + + void SetOption(const TweenOption& option); + + const TweenOption& GetOption() const; + const ShareId& GetShareId() const; + const RefPtr& GetEffect() const; + void SetEffect(RefPtr& effect); + RefPtr CreateElement() override; + bool IsEnablePopEnter() const; + void SetEnablePopEnter(bool enablePopEnter); + bool IsEnablePushEnter() const; + void SetEnablePushEnter(bool enablePushEnter); + bool IsEnablePopExit() const; + void SetEnablePopExit(bool enablePopExit); + bool IsEnablePushExit() const; + void SetEnablePushExit(bool enablePushExit); + void SetShareId(const ShareId& shareId); + +private: + void InitEnableStatus(); + + ShareId shareId_; + TweenOption option_; + RefPtr effect_; + bool enablePopEnter_ = true; // enable shared transition when page in pop enter scene. + bool enablePopExit_ = true; + bool enablePushEnter_ = true; + bool enablePushExit_ = true; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SHARED_TRANSITION_SHARED_TRANSITION_COMPONENT_H diff --git a/frameworks/core/components/shared_transition/shared_transition_element.cpp b/frameworks/core/components/shared_transition/shared_transition_element.cpp new file mode 100644 index 00000000..b9f527cd --- /dev/null +++ b/frameworks/core/components/shared_transition/shared_transition_element.cpp @@ -0,0 +1,332 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/shared_transition/shared_transition_element.h" + +#include "core/components/box/box_element.h" +#include "core/components/box/render_box.h" +#include "core/components/display/display_component.h" +#include "core/components/display/render_display.h" +#include "core/components/image/image_element.h" +#include "core/components/image/render_image.h" +#include "core/components/page/page_element.h" +#include "core/pipeline/base/element.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { +namespace { + +constexpr uint8_t MAX_OPACITY = 255; +constexpr uint8_t MIN_OPACITY = 0; + +} // namespace + +SharedTransitionElement::~SharedTransitionElement() +{ + auto page = pageElement_.Upgrade(); + if (page) { + page->RemoveSharedTransition(shareId_); + } +} + +void SharedTransitionElement::Update() +{ + ComposedElement::Update(); + const auto sharedComponent = AceType::DynamicCast(component_); + if (!sharedComponent) { + LOGE("Get SharedComponent failed. id: %{public}s", GetId().c_str()); + return; + } + option_ = sharedComponent->GetOption(); + oldShareId_ = shareId_; + shareId_ = sharedComponent->GetShareId(); + effect_ = sharedComponent->GetEffect(); + enablePopEnter_ = sharedComponent->IsEnablePopEnter(); + enablePopExit_ = sharedComponent->IsEnablePopExit(); + enablePushEnter_ = sharedComponent->IsEnablePushEnter(); + enablePushExit_ = sharedComponent->IsEnablePushExit(); +} + +RefPtr SharedTransitionElement::GetRenderPassengerWithPajamas() const +{ + if (children_.empty()) { + LOGE("Get render passenger failed. no child. id: %{public}s", GetId().c_str()); + return nullptr; + } + const auto& passenger = AceType::DynamicCast(GetContentElement()); + if (!passenger) { + LOGE("Get render passenger failed. passenger is null. id: %{public}s", GetId().c_str()); + return nullptr; + } + return AceType::DynamicCast(passenger->GetRenderNode()); +} + +Size SharedTransitionElement::GetSuitSize() const +{ + const auto& renderBox = GetRenderPassengerWithPajamas(); + if (!renderBox) { + LOGE("Get layout size failed. render box not found. id: %{public}s", GetId().c_str()); + return Size(); + } + return renderBox->GetLayoutSize() - renderBox->GetMarginSize(); +} + +Offset SharedTransitionElement::GetGlobalOffset() const +{ + const auto& renderBox = GetRenderPassengerWithPajamas(); + if (!renderBox) { + LOGE("Get Global offset failed. render box not found. id: %{public}s", GetId().c_str()); + return Offset(); + } + return renderBox->GetGlobalOffset(); +} + +bool SharedTransitionElement::AboardShuttle(Offset& ticket) +{ + if (!passengerComponent_ || passengerElement_) { + LOGE("Aboard Shuttle Component failed. passenger not init or already aboard. id: %{public}s", GetId().c_str()); + return false; + } + auto passenger = GetRenderPassengerWithPajamas(); + if (!passenger) { + LOGE("Aboard Shuttle Component failed. render passenger is null. id: %{public}s", GetId().c_str()); + return false; + } + const auto& renderBox = AceType::DynamicCast(passenger); + if (!renderBox) { + LOGE("Aboard Shuttle Component failed. render passenger do not have pajamas. id: %{public}s", GetId().c_str()); + return false; + } + LOGD("SharedTransitionElement: aboard shuttle. id: %{public}s", GetId().c_str()); + // save origin width/height and recover it when GetOffShuttle + passengerWidth_ = passengerComponent_->GetWidthDimension(); + passengerHeight_ = passengerComponent_->GetHeightDimension(); + auto suitSize = GetSuitSize(); + passengerComponent_->SetWidth(suitSize.Width()); + passengerComponent_->SetHeight(suitSize.Height()); + + passengerElement_ = AceType::DynamicCast(GetContentElement()); + if (!passengerElement_) { + LOGE("Aboard Shuttle Element failed. passenger element is null."); + return false; + } + // passenger goes out and comes to the shuttle port + // check first child not null when check passenger. no need check again here. + GetFirstChild()->UpdateChild(passengerElement_, nullptr); + passengerRender_ = passenger; + passengerElement_->SetRenderNode(passengerRender_); + auto placeHolder = AceType::MakeRefPtr(); + // passenger measures the size + auto paintRect = renderBox->GetLayoutSize(); + placeHolder->SetHeight(paintRect.Height()); + placeHolder->SetWidth(paintRect.Width()); + // check first child not null when check passenger. no need check again here. + GetFirstChild()->UpdateChild(nullptr, placeHolder); + ticket = renderBox->GetOffsetToStage(); + return true; +} + +void SharedTransitionElement::GetOffShuttle() +{ + LOGD("SharedTransitionElement: get off shuttle. id: %{public}s", GetId().c_str()); + auto placeHolder = GetContentElement(); + if (!passengerElement_ || !passengerRender_ || !placeHolder) { + LOGE("GetOff Shuttle failed. Passenger already Get Off or place holder is null."); + return; + } + if (placeHolder == passengerElement_) { + LOGI("Passenger already takeoff shuttle. do nothing."); + return; + } + // check first child not null when check placeHolder. no need check again here. + auto placeHolderRender = placeHolder->GetRenderNode(); + bool placeHolderHidden = placeHolderRender ? placeHolderRender->GetHidden() : true; + GetFirstChild()->UpdateChild(placeHolder, nullptr); + auto parent = passengerElement_->GetElementParent().Upgrade(); + if (parent) { + // Remove passenger from overlay. + parent->UpdateChild(passengerElement_, nullptr); + } + + // save origin width/height in AboardShuttle and recover it when GetOffShuttle + passengerComponent_->SetWidth(passengerWidth_.Value(), passengerWidth_.Unit()); + passengerComponent_->SetHeight(passengerHeight_.Value(), passengerHeight_.Unit()); + passengerElement_->SetRenderNode(passengerRender_); + passengerElement_->SetNewComponent(passengerComponent_); + passengerElement_->Mount(GetFirstChild()); + // Follow place holder's hidden status. + passengerRender_->SetHidden(placeHolderHidden); + // Clear RefPtr. + passengerRender_.Reset(); + passengerElement_.Reset(); +} + +void SharedTransitionElement::SetVisible(bool visible) +{ + auto displayElement = DynamicCast(GetFirstChild()); + if (!displayElement) { + LOGE("Set visible failed. display element is null. id: %{public}s", GetId().c_str()); + return; + } + auto displayRender = DynamicCast(displayElement->GetRenderNode()); + if (!displayRender) { + LOGE("Set visible failed. display render is null. id: %{public}s", GetId().c_str()); + return; + } + if (visible) { + displayRender->UpdateOpacity(MAX_OPACITY); + } else { + displayRender->UpdateOpacity(MIN_OPACITY); + } +} + +void SharedTransitionElement::PerformBuild() +{ + Register(); + ComposedElement::PerformBuild(); +} + +RefPtr SharedTransitionElement::BuildChild() +{ + auto shared = AceType::DynamicCast(component_); + if (shared) { + auto passengerComponent = ComposedElement::BuildChild(); + passengerComponent_ = AceType::DynamicCast(passengerComponent); + if (!passengerComponent_) { + passengerComponent_ = AceType::MakeRefPtr(); + passengerComponent_->SetChild(passengerComponent); + } + return AceType::MakeRefPtr(passengerComponent_); + } else { + LOGE("Build child failed. no shared transition component found. id: %{public}s", GetId().c_str()); + return ComposedElement::BuildChild(); + } +} + +void SharedTransitionElement::Register() +{ + auto page = SearchParentPage(); + if (!page) { + LOGE("No parent page found."); + return; + } + LOGD("SharedTransitionElement Register shareId: %{public}s, id: %{public}s", shareId_.c_str(), GetId().c_str()); + pageElement_ = page; + if (!oldShareId_.empty()) { + auto sharedTransitionElementMap = page->GetSharedTransitionMap(); + auto oldSharedIter = sharedTransitionElementMap.find(oldShareId_); + if (oldSharedIter != sharedTransitionElementMap.end()) { + auto oldWeak = oldSharedIter->second; + auto oldShared = oldWeak.Upgrade(); + if (oldShared == this) { + page->RemoveSharedTransition(oldShareId_); + } + } + } + page->AddSharedTransition(AceType::Claim(this)); +} + +RefPtr SharedTransitionElement::SearchParentPage() const +{ + auto parent = GetElementParent().Upgrade(); + while (parent) { + auto page = AceType::DynamicCast(parent); + if (page) { + LOGD("Find parent page. page id: %{public}d, id: %{public}s", page->GetPageId(), GetId().c_str()); + return page; + } + parent = parent->GetElementParent().Upgrade(); + } + LOGD("No parent page found. shareId: %{public}s, id: %{public}s", shareId_.c_str(), GetId().c_str()); + return nullptr; +} + +const ShareId& SharedTransitionElement::GetShareId() const +{ + return shareId_; +} + +const RefPtr& SharedTransitionElement::GetEffect() const +{ + return effect_; +} + +bool SharedTransitionElement::IsEnablePopEnter() const +{ + return enablePopEnter_; +} + +bool SharedTransitionElement::IsEnablePushEnter() const +{ + return enablePushEnter_; +} + +bool SharedTransitionElement::IsEnablePopExit() const +{ + return enablePopExit_; +} + +bool SharedTransitionElement::IsEnablePushExit() const +{ + return enablePushExit_; +} + +RefPtr SharedTransitionElement::GetContentElement() const +{ + auto display = GetFirstChild(); + if (!display) { + LOGE("Get Content Element failed. display is null."); + return nullptr; + } + return display->GetFirstChild(); +} + +void SharedTransitionElement::SetSizeModified(SizeModifiedCallback&& sizeModifiedCallback) +{ + auto boxBaseElement = DynamicCast(GetContentElement()); + if (!boxBaseElement) { + LOGE("Set Size Modified failed. image element not found."); + return; + } + auto boxBaseRender = DynamicCast(boxBaseElement->GetRenderNode()); + if (!boxBaseRender) { + LOGE("Set Size Modified failed. image render not found."); + return; + } + sizeModifiedCallback_ = sizeModifiedCallback; + boxBaseRender->SetLayoutCallback([sharedWeak = AceType::WeakClaim(this)]() { + auto shared = sharedWeak.Upgrade(); + if (!shared) { + LOGE("Layout callback is failed. shared is null"); + return; + } + auto context = shared->context_.Upgrade(); + if (!context) { + LOGE("Layout callback is failed. context is null"); + return; + } + // Re-create shared transition after paint. + context->AddPostFlushListener(shared); + }); +} + +void SharedTransitionElement::OnPostFlush() +{ + if (sizeModifiedCallback_) { + sizeModifiedCallback_(); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/shared_transition/shared_transition_element.h b/frameworks/core/components/shared_transition/shared_transition_element.h new file mode 100644 index 00000000..7da4712d --- /dev/null +++ b/frameworks/core/components/shared_transition/shared_transition_element.h @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SHARED_TRANSITION_SHARED_TRANSITION_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SHARED_TRANSITION_SHARED_TRANSITION_ELEMENT_H + +#include "core/animation/shared_transition_effect.h" +#include "core/components/box/box_component.h" +#include "core/components/box/box_element.h" +#include "core/components/box/render_box.h" +#include "core/components/common/properties/tween_option.h" +#include "core/components/shared_transition/shared_transition_component.h" +#include "core/pipeline/base/composed_element.h" + +namespace OHOS::Ace { + +class BoxComponent; +class PageElement; +class RenderBox; + +class SharedTransitionElement : public ComposedElement, public FlushEvent { + DECLARE_ACE_TYPE(SharedTransitionElement, ComposedElement); + +public: + using SizeModifiedCallback = std::function; + explicit SharedTransitionElement(const ComposeId& id) : ComposedElement(id) {} + ~SharedTransitionElement() override; + + void Update() override; + // Prepare playing Shared Transition, Shared Transition Component prepare to show up in overlay. + // Passenger wears a suit and aboard shuttle, where passenger means Shared Transition Component and shuttle means + // overlay. + bool AboardShuttle(Offset& ticket); + RefPtr GetPassengerComponent() const + { + return passengerComponent_; + } + + RefPtr GetPassengerElement() const + { + return passengerElement_; + } + // After finish Shared Transition, Shared Transition cleared from overlay and come back to source. + // Passenger arrives at destination and teleports back home + void GetOffShuttle(); + // When Shared Transition plays, only shared transition component in overlay can be seen, others will be invisible + // on their own page. + // When Shared Transition finished, shared transition component is visible on its own page, and overlay is cleared. + void SetVisible(bool visible); + const ShareId& GetShareId() const; + const RefPtr& GetEffect() const; + Size GetSuitSize() const; + Offset GetGlobalOffset() const; + RefPtr GetContentElement() const; + bool IsEnablePopEnter() const; + bool IsEnablePushEnter() const; + bool IsEnablePopExit() const; + bool IsEnablePushExit() const; + + const TweenOption& GetOption() const + { + return option_; + } + + void PerformBuild() override; + + void SetSizeModified(SizeModifiedCallback&& sizeModifiedCallback); + +protected: + RefPtr BuildChild() override; + void OnPostFlush() override; + +private: + void Register(); + RefPtr GetRenderPassengerWithPajamas() const; + RefPtr SearchParentPage() const; + + ShareId shareId_; + ShareId oldShareId_; + TweenOption option_; + RefPtr passengerComponent_; // Set When Build Passenger Aboard, Reset When Destruct. + RefPtr passengerElement_; // Set When Passenger Aboard, Reset When GetOff Shuttle + RefPtr passengerRender_; // Set When Passenger Aboard, Reset When GetOff Shuttle + RefPtr effect_; + WeakPtr pageElement_; + Dimension passengerHeight_; + Dimension passengerWidth_; + bool enablePopEnter_ = true; + bool enablePopExit_ = true; + bool enablePushEnter_ = true; + bool enablePushExit_ = true; + SizeModifiedCallback sizeModifiedCallback_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SHARED_TRANSITION_SHARED_TRANSITION_ELEMENT_H diff --git a/frameworks/core/components/slider/BUILD.gn b/frameworks/core/components/slider/BUILD.gn new file mode 100644 index 00000000..69639926 --- /dev/null +++ b/frameworks/core/components/slider/BUILD.gn @@ -0,0 +1,25 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("slider") { + sources = [ + "block_component.cpp", + "flutter_render_circle_block.cpp", + "flutter_render_slider.cpp", + "render_block.cpp", + "render_slider.cpp", + "slider_component.cpp", + ] +} diff --git a/frameworks/core/components/slider/block_component.cpp b/frameworks/core/components/slider/block_component.cpp new file mode 100644 index 00000000..bc1625b5 --- /dev/null +++ b/frameworks/core/components/slider/block_component.cpp @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/slider/block_component.h" + +#include "core/components/slider/render_block.h" + +namespace OHOS::Ace { + +RefPtr CircleBlock::CreateRenderNode() +{ + return RenderBlock::Create(); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/slider/block_component.h b/frameworks/core/components/slider/block_component.h new file mode 100644 index 00000000..4eb37f1f --- /dev/null +++ b/frameworks/core/components/slider/block_component.h @@ -0,0 +1,110 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SLIDER_BLOCK_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SLIDER_BLOCK_COMPONENT_H + +#include "base/geometry/dimension.h" +#include "core/components/common/properties/color.h" +#include "core/pipeline/base/component.h" +#include "core/pipeline/base/render_component.h" + +namespace OHOS::Ace { + +// The slider block in slider +class BlockComponent : public RenderComponent { + DECLARE_ACE_TYPE(BlockComponent, RenderComponent); + +public: + BlockComponent() = default; + ~BlockComponent() override = default; + + RefPtr CreateElement() override + { + // never use element to create element tree. + return nullptr; + } + + const Color& GetBlockColor() const + { + return blockColor_; + } + + void SetBlockColor(const Color& color) + { + blockColor_ = color; + } + + const Dimension& GetBlockSize() const + { + return blockSize_; + } + + const Dimension& GetHotRegionWidth() const + { + return hotRegionWidth_; + } + + const Dimension& GetHotRegionHeight() const + { + return hotRegionHeight_; + } + + void SetBlockSize(const Dimension& size) + { + blockSize_ = size; + } + + void SetHotRegionWidth(const Dimension& width) + { + hotRegionWidth_ = width; + } + + void SetHotRegionHeight(const Dimension& height) + { + hotRegionHeight_ = height; + } + + const Color& GetHoverColor() const + { + return hoverColor_; + } + + void SetHoverColor(const Color& color) + { + hoverColor_ = color; + } + +private: + Color hoverColor_; + Color blockColor_; + Dimension blockSize_; + Dimension hotRegionWidth_; + Dimension hotRegionHeight_; +}; + +class CircleBlock : public BlockComponent { + DECLARE_ACE_TYPE(CircleBlock, BlockComponent); + +public: + CircleBlock() = default; + ~CircleBlock() override = default; + + RefPtr CreateRenderNode() override; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SLIDER_BLOCK_COMPONENT_H diff --git a/frameworks/core/components/slider/flutter_render_circle_block.cpp b/frameworks/core/components/slider/flutter_render_circle_block.cpp new file mode 100644 index 00000000..e69483b6 --- /dev/null +++ b/frameworks/core/components/slider/flutter_render_circle_block.cpp @@ -0,0 +1,119 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/slider/flutter_render_circle_block.h" + +#include "flutter/lib/ui/ui_dart_state.h" +#include "third_party/skia/include/core/SkMaskFilter.h" + +#include "base/utils/system_properties.h" +#include "core/pipeline/base/scoped_canvas_state.h" + +namespace OHOS::Ace { +namespace { + +constexpr double BORDER_WEIGHT = 0.33; +constexpr double HALF = 0.5; +constexpr Dimension HOVER_RADIUS = 16.0_vp; + +} // namespace + +RefPtr RenderBlock::Create() +{ + LOGD("Slider::Create"); + return AceType::MakeRefPtr(); +} + +void FlutterRenderCircleBlock::Update(const RefPtr& component) +{ + LOGD("Slider::Update"); + RenderBlock::Update(component); +} + +void FlutterRenderCircleBlock::Paint(RenderContext& context, const Offset& offset) +{ + LOGD("Slider::Paint_offset position x:%{public}lf, y:%{public}lf radiusScale:%{public}lf", offset.GetX(), + offset.GetY(), radiusScale_); + auto canvas = ScopedCanvas::Create(context); + if (!canvas) { + LOGE("canvas fetch failed"); + return; + } + SkCanvas* skCanvas = canvas->canvas(); + if (!skCanvas) { + LOGE("skCanvas fetch failed"); + return; + } + + if (isHover_) { + SkPaint hoverPaint; + hoverPaint.setColor(GetHoverColor().GetValue()); + double hoverRadius = NormalizeToPx(HOVER_RADIUS); + skCanvas->drawCircle(offset.GetX(), offset.GetY(), hoverRadius, hoverPaint); + } + + double radius = NormalizeToPx(blockSize_) * HALF * radiusScale_; + if (GetFocus() && SystemProperties::GetDeviceType() == DeviceType::TV) { + SkPaint blockPaint; + // the color value, when the slider get focus + static const uint8_t lightBlueA = 255; + static const uint8_t lightBlueR = 70; + static const uint8_t lightBlueG = 150; + static const uint8_t lightBlueB = 236; + blockPaint.setColor(SkColorSetARGB(lightBlueA, lightBlueR, lightBlueG, lightBlueB)); + skCanvas->drawCircle(offset.GetX(), offset.GetY(), radius, blockPaint); + } else { + SkPaint blockPaint; + blockPaint.setColor(SkColorSetARGB(GetBlockColor().GetAlpha(), GetBlockColor().GetRed(), + GetBlockColor().GetGreen(), GetBlockColor().GetBlue())); + skCanvas->drawCircle(offset.GetX(), offset.GetY(), radius, blockPaint); + } + + // Draw block border + SkPaint borderPaint; + // use this color to reduce the loss at corner. + static const uint8_t alpha = 13; + borderPaint.setColor(SkColorSetARGB(alpha, 0, 0, 0)); + borderPaint.setStyle(SkPaint::Style::kStroke_Style); + borderPaint.setAntiAlias(true); + borderPaint.setStrokeWidth(BORDER_WEIGHT); + skCanvas->drawCircle(offset.GetX(), offset.GetY(), radius, borderPaint); + + PaintShadow(skCanvas, offset, radius); +} + +void FlutterRenderCircleBlock::PaintShadow(SkCanvas* skCanvas, const Offset& offset, double radius) +{ + if (!skCanvas) { + return; + } + double diameter = radius * 2.0; + // Draw block border shadow + SkPaint borderShadowPaint; + // use this color to reduce the loss at corner. + static const uint8_t shadowAlpha = 30; + borderShadowPaint.setColor(SkColorSetARGB(shadowAlpha, 0, 0, 0)); + borderShadowPaint.setStyle(SkPaint::Style::kFill_Style); + borderShadowPaint.setAntiAlias(true); + borderShadowPaint.setStrokeWidth(BORDER_WEIGHT); + SkRect rect = SkRect::MakeXYWH(offset.GetX() - radius, offset.GetY() - radius, diameter, diameter); + skCanvas->clipRRect(SkRRect::MakeRectXY(rect, radius, radius), SkClipOp::kDifference, true); + // Draw first circle for shadow. + skCanvas->drawCircle(offset.GetX(), offset.GetY() + BORDER_WEIGHT, radius, borderShadowPaint); + // Draw second circle for shadow. + skCanvas->drawCircle(offset.GetX(), offset.GetY() + BORDER_WEIGHT * 2.0, radius, borderShadowPaint); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/slider/flutter_render_circle_block.h b/frameworks/core/components/slider/flutter_render_circle_block.h new file mode 100644 index 00000000..90352302 --- /dev/null +++ b/frameworks/core/components/slider/flutter_render_circle_block.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SLIDER_FLUTTER_RENDER_CIRCLE_BLOCK_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SLIDER_FLUTTER_RENDER_CIRCLE_BLOCK_H + +#include "third_party/skia/include/core/SkCanvas.h" + +#include "core/components/slider/render_block.h" + +namespace OHOS::Ace { + +class FlutterRenderCircleBlock final : public RenderBlock { + DECLARE_ACE_TYPE(FlutterRenderCircleBlock, RenderBlock); + +public: + FlutterRenderCircleBlock() = default; + ~FlutterRenderCircleBlock() override = default; + + void Update(const RefPtr& component) override; + void Paint(RenderContext& context, const Offset& offset) override; + +private: + void PaintShadow(SkCanvas* skCanvas, const Offset& offset, double radius); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SLIDER_FLUTTER_RENDER_CIRCLE_BLOCK_H diff --git a/frameworks/core/components/slider/flutter_render_slider.cpp b/frameworks/core/components/slider/flutter_render_slider.cpp new file mode 100644 index 00000000..9dcf68c0 --- /dev/null +++ b/frameworks/core/components/slider/flutter_render_slider.cpp @@ -0,0 +1,330 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/slider/flutter_render_slider.h" + +#include "flutter/lib/ui/ui_dart_state.h" + +#include "core/components/box/render_box.h" +#include "core/components/common/properties/color.h" +#include "core/components/slider/render_block.h" +#include "core/components/tip/render_tip.h" +#include "core/components/tip/tip_component.h" +#include "core/components/track/render_track.h" +#include "core/pipeline/base/flutter_render_context.h" +#include "core/pipeline/base/scoped_canvas_state.h" + +namespace OHOS::Ace { + +namespace { + +constexpr Dimension FOCUS_PADDING = 2.0_vp; +constexpr double DOUBLE_TO_PERCENT = 100.0; +constexpr int32_t HOVER_ANIMATION_DURATION = 250; + +} // namespace + +RefPtr RenderSlider::Create() +{ + LOGD("Slider::Create"); + return AceType::MakeRefPtr(); +} + +void FlutterRenderSlider::Update(const RefPtr& component) +{ + LOGD("Slider::Update"); + RenderSlider::Update(component); + if (initialUpdate_) { + track_ = RenderTrack::Create(); + AddChild(track_); + track_->Attach(GetContext()); + + block_ = RenderBlock::Create(); + AddChild(block_); + block_->Attach(GetContext()); + + initialUpdate_ = false; + } + + AddTipChild(); + const RefPtr slider = AceType::DynamicCast(component); + block_->Update(slider->GetBlock()); + blockHotWidth_ = slider->GetBlock()->GetHotRegionWidth(); + blockHotHeight_ = slider->GetBlock()->GetHotRegionHeight(); + track_->Update(slider->GetTrack()); + + LOGD("Slider::Update end"); + MarkNeedLayout(); +} + +void FlutterRenderSlider::PerformLayout() +{ + RenderSlider::PerformLayout(); + + LOGD("Slider::PerformLayout totalRatio_:%{public}lf, trackLength:%{public}lf", totalRatio_, trackLength_); + double dxOffset = (GetTextDirection() == TextDirection::LTR) + ? NormalizeToPx(SLIDER_PADDING_DP) + trackLength_ * totalRatio_ + : GetLayoutSize().Width() - NormalizeToPx(SLIDER_PADDING_DP) - trackLength_ * totalRatio_; + + double dyOffset = GetLayoutSize().Height() * HALF; + ProcessBlock(Offset(dxOffset, dyOffset)); + ProcessTrack(Offset(dxOffset, dyOffset)); + SetTipPosition(dxOffset); +} + +RenderLayer FlutterRenderSlider::GetRenderLayer() +{ + if (!layer_) { + layer_ = AceType::MakeRefPtr(Matrix4::CreateIdentity(), 0.0, 0.0); + } + return AceType::RawPtr(layer_); +} + +void FlutterRenderSlider::AddTipChild() +{ + if (!showTips_) { + return; + } + + if (tip_) { + return; + } + + RefPtr theme = GetTheme(); + if (!theme) { + return; + } + + int32_t percent = std::round(totalRatio_ * DOUBLE_TO_PERCENT); + tipText_ = AceType::MakeRefPtr(std::to_string(percent).append("%")); + TextStyle textStyle; + textStyle.SetTextAlign(TextAlign::CENTER); + textStyle.SetFontSize(theme->GetTipFontSize()); + textStyle.SetTextColor(theme->GetTipTextColor()); + tipText_->SetFocusColor(theme->GetTipTextColor()); + tipText_->SetTextStyle(textStyle); + + auto tipComponent = AceType::MakeRefPtr(tipText_); + tipComponent->SetBgColor(theme->GetTipColor()); + + renderText_ = RenderText::Create(); + renderText_->Attach(GetContext()); + + tip_ = RenderTip::Create(); + tip_->AddChild(renderText_); + tip_->Attach(GetContext()); + tip_->SetVisible(false); + auto padding = NormalizeToPx(theme->GetTipTextPadding()); + auto renderTip = AceType::DynamicCast(tip_); + if (renderTip) { + renderTip->SetPadding(Edge(padding, 0.0, padding, 0.0, DimensionUnit::PX)); + } + + AddChild(tip_); + renderText_->Update(tipText_); + tip_->Update(tipComponent); +} + +void FlutterRenderSlider::ProcessBlock(const Offset& currentPosition) +{ + Offset blockPosition = currentPosition; + auto blockRenderNode = AceType::DynamicCast(block_); + if (!blockRenderNode) { + return; + } + + double hotRegionWidth = NormalizeToPx(blockHotWidth_); + double hotRegionHeight = NormalizeToPx(blockHotHeight_); + blockRenderNode->SetLayoutSize(Size(hotRegionWidth, hotRegionHeight)); + blockRenderNode->SetPosition(blockPosition); + blockRenderNode->SetFocus(GetFocus()); + blockRenderNode->SetRadiusScale(radiusScale_); +} + +void FlutterRenderSlider::ProcessTrack(const Offset& currentPosition) +{ + const RefPtr track = AceType::DynamicCast(track_); + if (!track) { + return; + } + double trackPositionHorizontal = NormalizeToPx(SLIDER_PADDING_DP); + if (GetTextDirection() == TextDirection::RTL) { + trackPositionHorizontal = GetLayoutSize().Width() - NormalizeToPx(SLIDER_PADDING_DP) - trackLength_; + } + double dyOffset = currentPosition.GetY(); + double hotRegionHeight = NormalizeToPx(blockHotHeight_); + Offset trackPosition = Offset(trackPositionHorizontal, dyOffset - track->GetTrackThickness() * HALF); + track->SetSliderMode(mode_); + if (showSteps_) { + double stepLength = step_ * trackLength_ / (max_ - min_); + track->SetSliderSteps(stepLength); + } else { + track->SetSliderSteps(0.0); + } + track->SetPosition(trackPosition); + track->SetTotalRatio(totalRatio_); + track->SetLayoutSize(Size(trackLength_, hotRegionHeight)); +} + +void FlutterRenderSlider::SetTipPosition(double blockOffset) +{ + auto renderTip = AceType::DynamicCast(tip_); + if (renderTip) { + const double childHalfWidth = renderTip->GetChildSize().Width() * HALF; + const double tipLayoutHeight = renderTip->GetLayoutSize().Height(); + renderTip->SetPosition(Offset(blockOffset - childHalfWidth, -tipLayoutHeight)); + } +} + +void FlutterRenderSlider::HandleFocus() +{ + auto context = context_.Upgrade(); + if (!context) { + LOGE("Pipeline context upgrade fail!"); + return; + } + auto block = AceType::DynamicCast(block_); + auto track = AceType::DynamicCast(track_); + if (!block || !track) { + return; + } + + if (GetFocus()) { + const double focusPadding = NormalizeToPx(FOCUS_PADDING); + if (mode_ == SliderMode::INSET) { + const Size focus = Size(trackLength_ + track->GetTrackThickness(), track->GetTrackThickness()); + context->ShowFocusAnimation( + RRect::MakeRRect(Rect(Offset(), focus), focus.Height() * HALF, focus.Height() * HALF), Color::BLUE, + track->GetGlobalOffset() - Offset(track->GetTrackThickness() * HALF, 0.0)); + } else if (mode_ == SliderMode::OUTSET) { + const double blockSize = NormalizeToPx(block->GetBlockSize()); + const Size focus = Size(blockSize, blockSize) + Size(focusPadding, focusPadding); + context->ShowFocusAnimation( + RRect::MakeRRect(Rect(Offset(), focus), focus.Width() * HALF, focus.Width() * HALF), Color::BLUE, + block->GetGlobalOffset() - Offset(focus.Width() * HALF, focus.Width() * HALF)); + } else { + LOGW("invalid mode"); + } + } +} + +void FlutterRenderSlider::OnPaintFinish() +{ + HandleFocus(); +} + +void FlutterRenderSlider::OnMouseHoverEnterTest() +{ + ResetController(controllerExit_); + if (!controllerEnter_) { + controllerEnter_ = AceType::MakeRefPtr(context_); + } + colorAnimationEnter_ = AceType::MakeRefPtr>(); + colorAnimationEnter_->SetEvaluator(AceType::MakeRefPtr()); + CreateColorAnimation(colorAnimationEnter_, Color::TRANSPARENT, Color::FromRGBO(0, 0, 0, 0.05), true); + colorAnimationEnter_->SetCurve(Curves::FRICTION); + StartHoverAnimation(controllerEnter_, colorAnimationEnter_); +} + +void FlutterRenderSlider::OnMouseHoverExitTest() +{ + ResetController(controllerEnter_); + if (!controllerExit_) { + controllerExit_ = AceType::MakeRefPtr(context_); + } + colorAnimationExit_ = AceType::MakeRefPtr>(); + colorAnimationExit_->SetEvaluator(AceType::MakeRefPtr()); + auto renderBlock = AceType::DynamicCast(block_); + if (!renderBlock) { + return; + } + auto currentColor = renderBlock->GetHoverColor(); + CreateColorAnimation(colorAnimationExit_, currentColor, Color::TRANSPARENT, false); + if (currentColor == Color::FromRGBO(0, 0, 0, 0.05)) { + colorAnimationExit_->SetCurve(Curves::FRICTION); + } else { + colorAnimationExit_->SetCurve(Curves::FAST_OUT_SLOW_IN); + } + StartHoverAnimation(controllerExit_, colorAnimationExit_); +} + +void FlutterRenderSlider::StartHoverAnimation( + RefPtr controller, RefPtr>& colorAnimation) +{ + if (!controller || !colorAnimation) { + return; + } + controller->ClearInterpolators(); + controller->AddInterpolator(colorAnimation); + controller->SetDuration(HOVER_ANIMATION_DURATION); + controller->SetFillMode(FillMode::FORWARDS); + controller->Play(); +} + +void FlutterRenderSlider::CreateColorAnimation( + RefPtr>& colorAnimation, const Color& beginValue, const Color& endValue, bool hover) +{ + if (!colorAnimation) { + return; + } + auto keyframeBegin = AceType::MakeRefPtr>(0.0, beginValue); + auto keyframeEnd = AceType::MakeRefPtr>(1.0, endValue); + colorAnimation->AddKeyframe(keyframeBegin); + colorAnimation->AddKeyframe(keyframeEnd); + auto renderBlock = AceType::DynamicCast(block_); + if (!renderBlock) { + return; + } + auto weakBlock = WeakClaim(RawPtr(renderBlock)); + colorAnimation->AddListener([weakBlock, hover](const Color& value) { + auto block = weakBlock.Upgrade(); + if (block) { + block->SetHover(hover); + block->SetHoverColor(value); + block->MarkNeedRender(); + } + }); +} + +void FlutterRenderSlider::ResetController(RefPtr& controller) +{ + if (controller) { + if (!controller->IsStopped()) { + controller->Stop(); + } + controller->ClearInterpolators(); + } +} + +void FlutterRenderSlider::Paint(RenderContext& context, const Offset& offset) +{ + if (GetErrorBit()) { + LOGE("slider size error. requested size [80dp, 40dp]"); + } + auto canvas = ScopedCanvas::Create(context); + if (!canvas) { + LOGE("paint canvas is null"); + return; + } + Size layoutConstrainMax = GetLayoutParam().GetMaxSize(); + canvas->clipRect(offset.GetX(), offset.GetY(), offset.GetX() + layoutConstrainMax.Width(), + offset.GetY() + layoutConstrainMax.Height(), SkClipOp::kIntersect, true); + if ((!showTips_ && tip_) || (tip_ && !isDraging_)) { + tip_->SetVisible(false); + } + RenderNode::Paint(context, offset); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/slider/flutter_render_slider.h b/frameworks/core/components/slider/flutter_render_slider.h new file mode 100644 index 00000000..5649f669 --- /dev/null +++ b/frameworks/core/components/slider/flutter_render_slider.h @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SLIDER_FLUTTER_RENDER_SLIDER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SLIDER_FLUTTER_RENDER_SLIDER_H + +#include "core/animation/animator.h" +#include "core/animation/keyframe_animation.h" +#include "core/components/slider/block_component.h" +#include "core/components/slider/render_block.h" +#include "core/components/slider/render_slider.h" +#include "core/components/track/render_track.h" +#include "frameworks/core/pipeline/layers/transform_layer.h" + +namespace OHOS::Ace { + +class FlutterRenderSlider final : public RenderSlider { + DECLARE_ACE_TYPE(FlutterRenderSlider, RenderSlider); + +public: + FlutterRenderSlider() = default; + ~FlutterRenderSlider() override = default; + + void Update(const RefPtr& component) override; + void PerformLayout() override; + void Paint(RenderContext& context, const Offset& offset) override; + void OnMouseHoverEnterTest() override; + void OnMouseHoverExitTest() override; + void OnPaintFinish() override; + RenderLayer GetRenderLayer() override; + + bool IsRepaintBoundary() const override + { + return true; + } + +private: + void AddTipChild(); + void HandleFocus(); + void ProcessBlock(const Offset& currentPosition); + void ProcessTrack(const Offset& currentPosition); + void SetTipPosition(double blockOffset); + void StartHoverAnimation(RefPtr controller, RefPtr>& colorAnimation); + void ResetController(RefPtr& controller); + void CreateColorAnimation( + RefPtr>& colorAnimation, const Color& beginValue, const Color& endValue, bool hover); + + RefPtr block_ = AceType::MakeRefPtr(); + RefPtr track_ = AceType::MakeRefPtr(); + RefPtr controllerEnter_; + RefPtr controllerExit_; + RefPtr> colorAnimationEnter_; + RefPtr> colorAnimationExit_; + RefPtr layer_; + bool initialUpdate_ = true; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SLIDER_FLUTTER_RENDER_SLIDER_H diff --git a/frameworks/core/components/slider/render_block.cpp b/frameworks/core/components/slider/render_block.cpp new file mode 100644 index 00000000..1d6b0495 --- /dev/null +++ b/frameworks/core/components/slider/render_block.cpp @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/slider/render_block.h" + +namespace OHOS::Ace { + +void RenderBlock::Update(const RefPtr& component) +{ + LOGD("Slider::RenderBlock Update"); + const RefPtr block = AceType::DynamicCast(component); + if (block == nullptr) { + LOGE("Slider::RenderBlock update with nullptr"); + return; + } + blockColor_ = block->GetBlockColor(); + blockSize_ = block->GetBlockSize(); + hotRegionWidth_ = block->GetHotRegionWidth(); + hotRegionHeight_ = block->GetHotRegionHeight(); + MarkNeedRender(); +} + +void RenderBlock::PerformLayout() +{ + LOGD("Slider::RenderBlock PerformLayout"); + SetLayoutSize(Measure()); +} + +Size RenderBlock::Measure() +{ + double rawWidth = NormalizeToPx(hotRegionWidth_); + double rawHeight = NormalizeToPx(hotRegionHeight_); + LOGD("Slider::RenderBlock Measure width: %{public}lf, height: %{public}lf", rawWidth, rawHeight); + return Size(rawWidth, rawHeight); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/slider/render_block.h b/frameworks/core/components/slider/render_block.h new file mode 100644 index 00000000..971d0b19 --- /dev/null +++ b/frameworks/core/components/slider/render_block.h @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SLIDER_RENDER_BLOCK_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SLIDER_RENDER_BLOCK_H + +#include "core/components/slider/block_component.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderBlock : public RenderNode { + DECLARE_ACE_TYPE(RenderBlock, RenderNode); + +public: + static RefPtr Create(); + + void Update(const RefPtr& component) override; + + void PerformLayout() override; + + const Color& GetBlockColor() const + { + return blockColor_; + } + + const Color& GetHoverColor() const + { + return hoverColor_; + } + + void SetHoverColor(const Color& hoverColor) + { + hoverColor_ = hoverColor; + } + + Size Measure(); + + void SetFocus(bool focus) + { + isFocus_ = focus; + } + + bool GetFocus() const + { + return isFocus_; + } + + void SetRadiusScale(double radiusScale) + { + if (radiusScale >= 1.0) { + radiusScale_ = radiusScale; + } + } + + const Dimension& GetBlockSize() const + { + return blockSize_; + } + + const Dimension& GetHotRegionWidth() const + { + return hotRegionWidth_; + } + + const Dimension& GetHotRegionHeight() const + { + return hotRegionHeight_; + } + + void SetHover(bool isHover) + { + isHover_ = isHover; + } + +protected: + bool isFocus_ = false; + bool isHover_ = false; + double radiusScale_ = 1.0; + Dimension blockSize_; + Dimension hotRegionWidth_; + Dimension hotRegionHeight_; + +private: + Color blockColor_; + Color hoverColor_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SLIDER_RENDER_BLOCK_H diff --git a/frameworks/core/components/slider/render_slider.cpp b/frameworks/core/components/slider/render_slider.cpp new file mode 100644 index 00000000..7edd2723 --- /dev/null +++ b/frameworks/core/components/slider/render_slider.cpp @@ -0,0 +1,642 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/slider/render_slider.h" + +#include "base/json/json_util.h" +#include "base/log/event_report.h" +#include "core/components/box/render_box.h" +#include "core/components/bubble/render_bubble.h" +#include "core/components/tip/render_tip.h" +#include "core/event/ace_event_helper.h" + +namespace OHOS::Ace { +namespace { + +constexpr double DOUBLE_TO_PERCENT = 100.0; +constexpr double CHANGE_RATIO = 0.2; +constexpr double DEFAULT_NORMAL_RADIUS_SCALE = 1.0; +constexpr double DEFAULT_LARGE_RADIUS_SCALE = 1.1; +constexpr int32_t DEFAULT_SLIDER_ANIMATION_DURATION = 150; +constexpr int32_t SLIDER_MOVE_DURATION = 100; +constexpr Dimension DEFAULT_SLIDER_WIDTH_DP = 260.0_vp; +constexpr Dimension DEFAULT_SLIDER_HEIGHT_DP = 40.0_vp; + +} // namespace + +RenderSlider::RenderSlider() : RenderNode(true) {} + +void RenderSlider::Update(const RefPtr& component) +{ + auto slider = AceType::DynamicCast(component); + if (!slider) { + LOGE("Update error, slider component is null"); + return; + } + sliderComponent_ = slider; + if (!blockActive_) { + Initialize(); + if (!slider) { + LOGE("RenderSlider update with nullptr"); + EventReport::SendRenderException(RenderExcepType::RENDER_COMPONENT_ERR); + return; + } + showSteps_ = slider->NeedShowSteps(); + showTips_ = slider->NeedShowTips(); + mode_ = slider->GetSliderMode(); + min_ = slider->GetMinValue(); + max_ = slider->GetMaxValue(); + step_ = slider->GetStep(); + disable_ = slider->GetDisable(); + SetTextDirection(slider->GetTextDirection()); + isError_ = false; + isValueError_ = false; + SyncValueToComponent(std::clamp(slider->GetValue(), min_, max_)); + if (min_ >= max_ || step_ > (max_ - min_) || step_ <= 0.0) { + isValueError_ = true; + LOGE("RenderSlider update min, max, value, step error"); + MarkNeedLayout(); + return; + } + LOGD("Slider::RenderSlider::Update Min: %{public}lf max: %{public}lf step: %{public}lf value: %{public}lf", + min_, max_, step_, value_); + totalRatio_ = (value_ - min_) / (max_ - min_); + + // Event update + if (!slider->GetOnMoveEndEventId().IsEmpty()) { + onMoveEnd_ = AceAsyncEvent::Create(slider->GetOnMoveEndEventId(), context_); + } + if (!slider->GetOnMovingEventId().IsEmpty()) { + onMoving_ = AceAsyncEvent::Create(slider->GetOnMovingEventId(), context_); + } + InitAccessibilityEventListener(); + + // animation control + if (!controller_) { + controller_ = AceType::MakeRefPtr(GetContext()); + } + + const auto& rotationController = slider->GetRotationController(); + if (rotationController) { + auto weak = AceType::WeakClaim(this); + rotationController->SetRequestRotationImpl(weak, context_); + } + + MarkNeedLayout(); + } +} + +void RenderSlider::PerformLayout() +{ + Size size = Measure(); + + // Update layout size. + SetLayoutSize(size); + + // The size of child will be set in flutter slider + UpdateTouchRegion(); +} + +void RenderSlider::OnPaintFinish() +{ + UpdateAccessibilityAttr(); +} + +void RenderSlider::UpdateAccessibilityAttr() +{ + // Update text with slider value + auto accessibilityNode = GetAccessibilityNode().Upgrade(); + if (!accessibilityNode) { + return; + } + accessibilityNode->SetText(std::to_string(value_)); + accessibilityNode->SetAccessibilityValue(value_, min_, max_); + auto context = context_.Upgrade(); + if (context) { + AccessibilityEvent sliderEvent; + sliderEvent.nodeId = accessibilityNode->GetNodeId(); + sliderEvent.eventType = "selected"; + sliderEvent.componentType = "slider"; + sliderEvent.currentItemIndex = value_; + sliderEvent.itemCount = max_ - min_; + context->SendEventToAccessibility(sliderEvent); + } +} + +void RenderSlider::InitAccessibilityEventListener() +{ + const auto& accessibilityNode = GetAccessibilityNode().Upgrade(); + if (!accessibilityNode) { + return; + } + accessibilityNode->AddSupportAction(AceAction::ACTION_SCROLL_BACKWARD); + accessibilityNode->AddSupportAction(AceAction::ACTION_SCROLL_FORWARD); + + accessibilityNode->SetActionScrollBackward([weakPtr = WeakClaim(this)]() { + const auto& slider = weakPtr.Upgrade(); + if (slider) { + slider->HandleScrollUpdate(-1); + return true; + } + return false; + }); + + accessibilityNode->SetActionScrollForward([weakPtr = WeakClaim(this)]() { + const auto& slider = weakPtr.Upgrade(); + if (slider) { + slider->HandleScrollUpdate(1); + return true; + } + return false; + }); +} + +void RenderSlider::HandleScrollUpdate(double delta) +{ + value_ = value_ + (max_ - min_) * CHANGE_RATIO * delta; + if (value_ > max_) { + value_ = max_; + } + if (value_ < min_) { + value_ = min_; + } + SyncValueToComponent(value_); + if (min_ >= max_) { + return; + } + totalRatio_ = (value_ - min_) / (max_ - min_); + UpdateTouchRegion(); + MarkNeedLayout(); + FireMovingEvent(SliderEvent::ACCESSIBILITY); +} + +Size RenderSlider::Measure() +{ + Size layoutConstrainMax = GetLayoutParam().GetMaxSize(); + LayoutParam childrenLayoutConstrain; + if (layoutConstrainMax.Width() == Size::INFINITE_SIZE) { + // set the default size to (260dp, 40dp) and length to 160dp + trackLength_ = NormalizeToPx(DEFAULT_SLIDER_WIDTH_DP) - 2 * NormalizeToPx(SLIDER_PADDING_DP); + childrenLayoutConstrain.SetMaxSize( + Size(NormalizeToPx(DEFAULT_SLIDER_WIDTH_DP), NormalizeToPx(DEFAULT_SLIDER_HEIGHT_DP))); + } else { + trackLength_ = layoutConstrainMax.Width() - 2 * NormalizeToPx(SLIDER_PADDING_DP); + childrenLayoutConstrain.SetMaxSize(Size(trackLength_, NormalizeToPx(DEFAULT_SLIDER_HEIGHT_DP))); + } + for (const auto& item : GetChildren()) { + item->Layout(childrenLayoutConstrain); + } + if (trackLength_ < 0.0) { + trackLength_ = 0.0; + } + return Size(layoutConstrainMax.Width(), NormalizeToPx(DEFAULT_SLIDER_HEIGHT_DP)); +} + +void RenderSlider::Initialize() +{ + if (!dragDetector_) { + dragDetector_ = AceType::MakeRefPtr(); + dragDetector_->SetOnDragStart([weakSlider = AceType::WeakClaim(this)](const DragStartInfo& info) { + auto slider = weakSlider.Upgrade(); + if (slider) { + slider->HandleDragStart(info.GetLocalLocation()); + } + }); + dragDetector_->SetOnDragUpdate([weakSlider = AceType::WeakClaim(this)](const DragUpdateInfo& info) { + auto slider = weakSlider.Upgrade(); + if (slider) { + slider->HandleDragUpdate(info.GetLocalLocation()); + } + }); + dragDetector_->SetOnDragEnd([weakSlider = AceType::WeakClaim(this)](const DragEndInfo& info) { + auto slider = weakSlider.Upgrade(); + if (slider) { + slider->HandleDragEnd(); + } + }); + } + if (!clickDetector_) { + clickDetector_ = AceType::MakeRefPtr(); + clickDetector_->SetOnClick([weakSlider = AceType::WeakClaim(this)](const ClickInfo& info) { + auto slider = weakSlider.Upgrade(); + if (slider) { + slider->HandleClick(info.GetLocalLocation()); + } + }); + } +} + +bool RenderSlider::MouseHoverTest(const Point& parentLocalPoint) +{ + auto context = context_.Upgrade(); + if (!context) { + return false; + } + if (blockTouchRegion_.ContainsInRegion( + parentLocalPoint.GetX() - GetPosition().GetX(), parentLocalPoint.GetY() - GetPosition().GetY())) { + if (mouseState_ == MouseState::NONE) { + OnMouseHoverEnterTest(); + mouseState_ = MouseState::HOVER; + } + context->AddToHoverList(AceType::WeakClaim(this).Upgrade()); + return true; + } else { + if (mouseState_ == MouseState::HOVER) { + OnMouseHoverExitTest(); + mouseState_ = MouseState::NONE; + } + return false; + } +} + +void RenderSlider::FireMoveEndEvent() +{ + if (onMoveEnd_) { + std::string param = std::string(R"("changed",{"progress":)") + .append(std::to_string(value_)) + .append(R"(},{"value":)") + .append(std::to_string(value_)) + .append("}"); + onMoveEnd_(param); + } +} + +void RenderSlider::FireMovingEvent(SliderEvent mode) +{ + if (onMoving_) { + auto jsonResult = JsonUtil::Create(true); + jsonResult->Put("progress", std::to_string(value_).c_str()); + switch (mode) { + case SliderEvent::MOVE_START: + jsonResult->Put("isEnd", "false"); + jsonResult->Put("mode", "start"); + break; + case SliderEvent::MOVE_MOVING: + jsonResult->Put("isEnd", "false"); + jsonResult->Put("mode", "move"); + break; + case SliderEvent::MOVE_END: + jsonResult->Put("isEnd", "true"); + jsonResult->Put("mode", "end"); + break; + case SliderEvent::CLICK: + jsonResult->Put("isEnd", "true"); + jsonResult->Put("mode", "click"); + break; + case SliderEvent::ACCESSIBILITY: + jsonResult->Put("isEnd", "false"); + jsonResult->Put("mode", "accessibility"); + break; + case SliderEvent::FOCUS: + jsonResult->Put("isEnd", "true"); + jsonResult->Put("mode", "keyevent"); + break; + } + jsonResult->Put("value", value_); + onMoving_(std::string(R"("change",)").append(jsonResult->ToString())); + } +} + +void RenderSlider::HandleClick(const Offset& clickPosition) +{ + LOGD("Slider::Handle click position x:%{public}f y:%{public}f", clickPosition.GetX(), clickPosition.GetY()); + if (NearZero(trackLength_)) { + totalRatio_ = 0.0; + return; + } + if (NeedSmoothMoving()) { + UpdateBlockPosition(clickPosition, true); + insideBlockRegion_ = false; + FireMovingEvent(SliderEvent::CLICK); + return; + } + RenderBlockPosition(clickPosition); + UpdateTouchRegion(); + insideBlockRegion_ = false; + FireMovingEvent(SliderEvent::CLICK); + FireMoveEndEvent(); +} + +void RenderSlider::HandleDragStart(const Offset& startPoint) +{ + if (showTips_ && tip_) { + tip_->SetVisible(true); + } + if (NearZero(trackLength_)) { + totalRatio_ = 0.0; + return; + } + if (blockTouchRegion_.ContainsInRegion(startPoint.GetX(), startPoint.GetY())) { + insideBlockRegion_ = true; + blockActive_ = true; + UpdateTouchRegion(); + if (!controller_->IsStopped()) { + controller_->Stop(); + } + UpdateAnimation(); + controller_->Play(); + isDraging_ = true; + FireMovingEvent(SliderEvent::MOVE_START); + } +} + +void RenderSlider::HandleDragUpdate(const Offset& updatePoint) +{ + if (NearZero(trackLength_)) { + totalRatio_ = 0.0; + return; + } + if (insideBlockRegion_) { + if (NeedSmoothMoving()) { + UpdateBlockPosition(updatePoint, false); + } else { + RenderBlockPosition(updatePoint); + } + FireMovingEvent(SliderEvent::MOVE_MOVING); + } +} + +void RenderSlider::HandleDragEnd() +{ + if (isDraging_) { + isDraging_ = false; + } + if (tip_) { + tip_->SetVisible(false); + } + if (NearZero(trackLength_)) { + totalRatio_ = 0.0; + return; + } + if (insideBlockRegion_) { + MarkNeedLayout(); + UpdateTouchRegion(); + } + FireMovingEvent(SliderEvent::MOVE_END); + FireMoveEndEvent(); + + insideBlockRegion_ = false; + blockActive_ = false; + + if (!controller_->IsStopped()) { + controller_->Stop(); + } + UpdateAnimation(); + controller_->Play(); +} + +// Render the block position after clicking or dragging +void RenderSlider::RenderBlockPosition(const Offset& touchPosition) +{ + double diff = (GetTextDirection() == TextDirection::LTR) ? touchPosition.GetX() - NormalizeToPx(SLIDER_PADDING_DP) + : GetLayoutSize().Width() - touchPosition.GetX(); + if (diff < 0.0) { + SyncValueToComponent(min_); + SetTotalRatio(0.0); + LOGD("Slider::RenderSlider RenderBlockPosition value: %{public}lf", value_); + MarkNeedLayout(); + return; + } + totalRatio_ = diff / trackLength_; + LOGD("Slider::RenderSlider RenderBlockPosition totalRatio: %{public}lf", totalRatio_); + if (totalRatio_ > 1.0) { + value_ = max_; + SetTotalRatio(1.0); + } else { + if (NearEqual(step_, 0.0)) { + // continuous slider + value_ = (max_ - min_) * totalRatio_ + min_; + } else { + // The following line is used to find value which is the multiple of step. + // The example shows below + // "value < x < value + 0.5 * step --> x = value" + // "value + 0.5 * step < x < value + step --> x = value + step" + double stepRatio = step_ / (max_ - min_); + SetTotalRatio(stepRatio * std::floor((totalRatio_ + HALF * stepRatio) / stepRatio)); + value_ = (max_ - min_) * totalRatio_ + min_; + } + } + SyncValueToComponent(value_); + LOGD("Slider::RenderSlider RenderBlockPosition value: %{public}lf", value_); + MarkNeedLayout(); +} + +void RenderSlider::UpdateBlockPosition(const Offset& touchPosition, bool isClick) +{ + if (LessOrEqual(trackLength_, 0.0)) { + LOGE("slider parameter trackLength_ invalid"); + return; + } + + double diff = (GetTextDirection() == TextDirection::LTR) ? touchPosition.GetX() - NormalizeToPx(SLIDER_PADDING_DP) + : GetLayoutSize().Width() - touchPosition.GetX(); + double endValue = 0.0; + double totalRatio = diff / trackLength_; + if (LessOrEqual(diff, 0.0)) { + endValue = min_; + } else if (GreatOrEqual(totalRatio, 1.0)) { + endValue = max_; + } else { + double stepRatio = step_ / (max_ - min_); + double endRatio = stepRatio * std::floor((totalRatio + HALF * stepRatio) / stepRatio); + endValue = (max_ - min_) * endRatio + min_; + } + RestartMoveAnimation(endValue, isClick); +} + +void RenderSlider::UpdateTipText(double value) +{ + int32_t percent = std::round(value * DOUBLE_TO_PERCENT); + std::string valueText = std::to_string(percent).append("%"); + if (tipText_ && renderText_) { + tipText_->SetData(valueText); + renderText_->Update(tipText_); + renderText_->PerformLayout(); + } +} + +void RenderSlider::OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) +{ + if (!isValueError_ && !disable_) { + dragDetector_->SetCoordinateOffset(coordinateOffset); + clickDetector_->SetCoordinateOffset(coordinateOffset); + result.emplace_back(dragDetector_); + result.emplace_back(clickDetector_); + } +} + +Vertex RenderSlider::FindCenterVertex(double x, double y, double objectWidth, double objectHeight) +{ + // 0.5 is used to find the center position. + return Vertex(x + objectWidth * HALF, y + objectHeight * HALF); +} + +TouchRegionPoint RenderSlider::GetTopTouchRegion(const Vertex& center, double width, double height) +{ + // 0.5 is used to find the top left point of the touch region + return TouchRegionPoint(center.GetX() - width * HALF, center.GetY() - height * HALF); +} + +TouchRegionPoint RenderSlider::GetBotTouchRegion(const Vertex& center, double width, double height) +{ + // 0.5 is used to find the bot right point of the touch region + return TouchRegionPoint(center.GetX() + width * HALF, center.GetY() + height * HALF); +} + +void RenderSlider::UpdateTouchRegion() +{ + double dxOffset = trackLength_ * totalRatio_ + NormalizeToPx(SLIDER_PADDING_DP); + double dyOffset = GetLayoutSize().Height() * HALF; + Vertex blockCenter = (GetTextDirection() == TextDirection::LTR) + ? TouchRegionPoint(dxOffset, dyOffset) + : TouchRegionPoint(GetLayoutSize().Width() - dxOffset, dyOffset); + TouchRegionPoint blockTopPoint = + GetTopTouchRegion(blockCenter, NormalizeToPx(blockHotWidth_), NormalizeToPx(blockHotHeight_)); + TouchRegionPoint blockBottomPoint = + GetBotTouchRegion(blockCenter, NormalizeToPx(blockHotWidth_), NormalizeToPx(blockHotHeight_)); + blockTouchRegion_ = TouchRegion(blockTopPoint, blockBottomPoint); +} + +bool RenderSlider::HandleFocusEvent(const KeyEvent& keyEvent) +{ + bool updateEvent = false; + if (NearZero(trackLength_)) { + totalRatio_ = 0.0; + return updateEvent; + } + switch (keyEvent.code) { + case KeyCode::TV_CONTROL_LEFT: + totalRatio_ -= step_ / (max_ - min_); + if (totalRatio_ < 0.0) { + totalRatio_ = 0.0; + } + SyncValueToComponent((max_ - min_) * totalRatio_ + min_); + MarkNeedLayout(); + updateEvent = true; + break; + case KeyCode::TV_CONTROL_RIGHT: + totalRatio_ += step_ / (max_ - min_); + if (totalRatio_ > 1.0) { + totalRatio_ = 1.0; + } + SyncValueToComponent((max_ - min_) * totalRatio_ + min_); + MarkNeedLayout(); + updateEvent = true; + break; + default: + updateEvent = false; + break; + } + if (updateEvent) { + FireMoveEndEvent(); + FireMovingEvent(SliderEvent::FOCUS); + } + return updateEvent; +} + +void RenderSlider::StartMoveAnimation(double from, double to, bool isClick) +{ + if (NearEqual(from, to)) { + return; + } + if (!moveController_) { + moveController_ = AceType::MakeRefPtr(GetContext()); + } else if (moveController_->IsRunning()) { + moveController_->Finish(); + } + moveController_->ClearInterpolators(); + moveController_->ClearAllListeners(); + + moveController_->AddStartListener([weak = AceType::WeakClaim(this), to]() { + auto slider = weak.Upgrade(); + if (slider) { + slider->animationEnd_ = to; + } + }); + + moveController_->AddStopListener([weak = AceType::WeakClaim(this), isClick]() { + auto slider = weak.Upgrade(); + if (slider) { + slider->SyncValueToComponent(slider->totalRatio_ * (slider->max_ - slider->min_)); + slider->SetTotalRatio(slider->totalRatio_); + slider->UpdateTouchRegion(); + } + }); + + ResetMoveAnimation(from, to); + moveController_->SetDuration(SLIDER_MOVE_DURATION); + moveController_->AddInterpolator(moveAnimation_); + moveController_->Play(); +} + +void RenderSlider::CalculateTotalRadio() +{ + auto ratio = (value_ - min_) / (max_ - min_); + totalRatio_ = std::clamp(ratio, 0.0, 1.0); +} + +void RenderSlider::ResetMoveAnimation(double from, double to) +{ + moveAnimation_ = AceType::MakeRefPtr>(from, to, Curves::MAGNETIC); + auto weak = AceType::WeakClaim(this); + moveAnimation_->AddListener(Animation::ValueCallback([weak](double value) { + auto slider = weak.Upgrade(); + if (slider) { + slider->value_ = value; + slider->CalculateTotalRadio(); + slider->MarkNeedLayout(); + } + })); +} + +void RenderSlider::RestartMoveAnimation(double value, bool isClick) +{ + if (moveController_ && moveController_->IsRunning()) { + if (!NearEqual(value, animationEnd_)) { + moveController_->Stop(); + StartMoveAnimation(value_, value, isClick); + } + } else { + StartMoveAnimation(value_, value, isClick); + } +} + +void RenderSlider::UpdateAnimation() +{ + double from = DEFAULT_NORMAL_RADIUS_SCALE; + double to = DEFAULT_LARGE_RADIUS_SCALE; + if (!blockActive_) { + from = DEFAULT_LARGE_RADIUS_SCALE; + to = DEFAULT_NORMAL_RADIUS_SCALE; + } + + if (translate_) { + controller_->RemoveInterpolator(translate_); + } + translate_ = AceType::MakeRefPtr>(from, to, Curves::FRICTION); + auto weak = AceType::WeakClaim(this); + translate_->AddListener(Animation::ValueCallback([weak](double value) { + auto sliderComp = weak.Upgrade(); + if (sliderComp) { + sliderComp->radiusScale_ = value; + sliderComp->MarkNeedLayout(); + } + })); + controller_->SetDuration(DEFAULT_SLIDER_ANIMATION_DURATION); + controller_->AddInterpolator(translate_); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/slider/render_slider.h b/frameworks/core/components/slider/render_slider.h new file mode 100644 index 00000000..14bbbdd0 --- /dev/null +++ b/frameworks/core/components/slider/render_slider.h @@ -0,0 +1,248 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SLIDER_RENDER_SLIDER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SLIDER_RENDER_SLIDER_H + +#include + +#include "core/animation/animator.h" +#include "core/animation/curve_animation.h" +#include "core/components/slider/block_component.h" +#include "core/components/slider/slider_component.h" +#include "core/components/text/render_text.h" +#include "core/components/text/text_component.h" +#include "core/gestures/click_recognizer.h" +#include "core/gestures/drag_recognizer.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +constexpr double DEFAULT_VALUE = 0.0; +constexpr double DEFAULT_MAX = 1.0; +constexpr double DEFAULT_MIN = 0.0; +constexpr double DEFAULT_STEP = 1.0; +const Dimension SLIDER_PADDING_DP = 13.5_vp; + +enum class SliderEvent { + MOVE_START = 0, + MOVE_MOVING = 1, + MOVE_END = 2, + CLICK = 3, + ACCESSIBILITY = 4, + FOCUS = 5, +}; + +using TouchRegionPoint = Offset; +using Vertex = Offset; + +// The region layout is shown below, and only needs two point can settle the rectangle. +// (0,0)------------(10,0) +// | | +// | .(5,5)| +// | | +// (0,10)------------(10,10) +class TouchRegion { +public: + TouchRegion() = default; + TouchRegion(TouchRegionPoint topLeftPoint, TouchRegionPoint bottomRightPoint) + : bottomRightPoint_(bottomRightPoint), topLeftPoint_(topLeftPoint) + {} + ~TouchRegion() = default; + + bool ContainsInRegion(double x, double y) + { + return LessOrEqual(topLeftPoint_.GetX(), x) && LessOrEqual(topLeftPoint_.GetY(), y) && + GreatOrEqual(bottomRightPoint_.GetX(), x) && GreatOrEqual(bottomRightPoint_.GetY(), y); + } + +private: + TouchRegionPoint bottomRightPoint_; + TouchRegionPoint topLeftPoint_; +}; + +// The render node of slider component. +class RenderSlider : public RenderNode { + DECLARE_ACE_TYPE(RenderSlider, RenderNode); + +public: + RenderSlider(); + ~RenderSlider() override = default; + + static RefPtr Create(); + + void Update(const RefPtr& component) override; + + void PerformLayout() override; + + void OnPaintFinish() override; + + bool HandleFocusEvent(const KeyEvent& keyEvent); + + double GetValue() const + { + return value_; + } + + double GetMax() const + { + return max_; + } + + double GetMin() const + { + return min_; + } + + double GetStep() const + { + return step_; + } + + std::function GetOnMovedEndId() const + { + return onMoveEnd_; + } + + bool GetErrorBit() const + { + return isError_; + } + + bool GetFocus() const + { + return isFocus_; + } + + void SetFocus(bool isFocus) + { + isFocus_ = isFocus; + MarkNeedLayout(); + } + + void SyncValueToComponent(double value) + { + value_ = value; + auto slider = sliderComponent_.Upgrade(); + if (slider) { + slider->SetCurrentValue(value); + } + } + + void SetTotalRatio(double ratio) + { + totalRatio_ = ratio; + if (showTips_) { + UpdateTipText(totalRatio_); + } + } + + bool NeedSmoothMoving() const + { + return mode_ == SliderMode::INSET && GreatNotEqual(step_, DEFAULT_STEP); + } + +protected: + static TouchRegionPoint GetTopTouchRegion(const Vertex& center, double width, double height); + static TouchRegionPoint GetBotTouchRegion(const Vertex& center, double width, double height); + + Size Measure(); + void HandleDragStart(const Offset& startPoint); + void HandleDragUpdate(const Offset& startPoint); + void HandleDragEnd(); + void OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) override; + bool MouseHoverTest(const Point& parentLocalPoint) override; + virtual void OnMouseHoverEnterTest() override {} + virtual void OnMouseHoverExitTest() override {} + + void HandleClick(const Offset& clickPosition); + + void FireMoveEndEvent(); + void FireMovingEvent(SliderEvent mode); + void UpdateAnimation(); + void StartMoveAnimation(double from, double to, bool isClick = false); + void RestartMoveAnimation(double value, bool isClick = false); + void ResetMoveAnimation(double from, double to); + void CalculateTotalRadio(); + void UpdateTipText(double value); + + void Initialize(); + void RenderBlockPosition(const Offset& touchPosition); + void UpdateBlockPosition(const Offset& touchPosition, bool isAnimation); + Vertex FindCenterVertex(double x, double y, double objectHeight, double objectWidth); + void UpdateTouchRegion(); + void UpdateAccessibilityAttr(); + void InitAccessibilityEventListener(); + void HandleScrollUpdate(double delta); + + bool renderWholeNode_ = true; + + // Gesture event + RefPtr dragDetector_; + RefPtr clickDetector_; + TouchRegion blockTouchRegion_; + bool insideBlockRegion_ = false; + bool blockActive_ = false; + + // The size constrain is too small set this bit to show text + bool isError_ = false; + bool isValueError_ = false; + + // bar length + double trackLength_ = 1.0; + double totalRatio_ = 0.0; + double cachedRatio_ = 0.0; + + // the circle block radius scale + double radiusScale_ = 1.0; + double step_ = DEFAULT_STEP; + double max_ = DEFAULT_MAX; + double min_ = DEFAULT_MIN; + + bool showSteps_ = false; + bool showTips_ = false; + bool isDraging_ = false; + SliderMode mode_ = SliderMode::OUTSET; + Dimension blockHotWidth_; + Dimension blockHotHeight_; + + RefPtr tip_; + RefPtr renderText_; + RefPtr tipText_; + WeakPtr sliderComponent_; + +private: + // Slider render information + double value_ = DEFAULT_VALUE; + std::function onMoveEnd_; + std::function onMoving_; + + // focus information + bool isFocus_ = false; + bool disable_ = false; + + double animationEnd_ = 0.0; + + // animation attr + RefPtr controller_; + RefPtr> translate_; + RefPtr moveController_; + RefPtr> moveAnimation_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SLIDER_RENDER_SLIDER_H diff --git a/frameworks/core/components/slider/slider_component.cpp b/frameworks/core/components/slider/slider_component.cpp new file mode 100644 index 00000000..9db8b519 --- /dev/null +++ b/frameworks/core/components/slider/slider_component.cpp @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/slider/slider_component.h" + +#include "core/components/box/box_component.h" +#include "core/components/slider/slider_element.h" + +namespace OHOS::Ace { + +SliderComponent::SliderComponent(const double value, const double step, const double min, const double max) + : block_(AceType::MakeRefPtr()), track_(AceType::MakeRefPtr()), + rotationController_(AceType::MakeRefPtr()) +{ + data_.SetValue(value); + data_.SetMaxValue(max); + data_.SetMinValue(min); + data_.SetStepValue(step); +} + +void SliderComponent::SetThemeStyle(const RefPtr& theme) +{ + if (!theme) { + return; + } + block_->SetBlockColor(theme->GetBlockColor()); + track_->SetBackgroundColor(theme->GetTrackBgColor()); + track_->SetSelectColor(theme->GetTrackSelectedColor()); + InitStyle(theme); +} + +void SliderComponent::InitStyle(const RefPtr& theme) +{ + if (!theme) { + return; + } + block_->SetHoverColor(theme->GetBlockHoverColor()); + if (mode_ == SliderMode::INSET) { + track_->SetTrackThickness(theme->GetInsetTrackThickness()); + block_->SetBlockSize(theme->GetInsetBlockSize()); + } else if (mode_ == SliderMode::OUTSET) { + track_->SetTrackThickness(theme->GetOutsetTrackThickness()); + block_->SetBlockSize(theme->GetOutsetBlockSize()); + block_->SetHotRegionWidth(theme->GetOutsetBlockHotSize()); + block_->SetHotRegionHeight(theme->GetOutsetBlockHotSize()); + } else { + LOGW("slider: invalid mode"); + } +} + +RefPtr SliderComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +RefPtr SliderComponent::CreateRenderNode() +{ + return RenderSlider::Create(); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/slider/slider_component.h b/frameworks/core/components/slider/slider_component.h new file mode 100644 index 00000000..15b4fd14 --- /dev/null +++ b/frameworks/core/components/slider/slider_component.h @@ -0,0 +1,201 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SLIDER_SLIDER_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SLIDER_SLIDER_COMPONENT_H + +#include + +#include "core/components/box/box_component.h" +#include "core/components/common/properties/color.h" +#include "core/components/common/properties/progress_data.h" +#include "core/components/common/rotation/rotation_controller.h" +#include "core/components/slider/block_component.h" +#include "core/components/slider/slider_theme.h" +#include "core/components/track/track_component.h" +#include "core/pipeline/base/component_group.h" +#include "core/pipeline/base/element.h" +#include "core/pipeline/base/render_component.h" + +namespace OHOS::Ace { + +constexpr double HALF = 0.5; + +// The slider component manages the step, value, min, max, selectColor and padding. +class SliderComponent : public RenderComponent { + DECLARE_ACE_TYPE(SliderComponent, RenderComponent); + +public: + SliderComponent(double value, double step, double min, double max); + ~SliderComponent() override = default; + + RefPtr CreateElement() override; + RefPtr CreateRenderNode() override; + + void SetThemeStyle(const RefPtr& theme); + void InitStyle(const RefPtr& theme); + + double GetMinValue() const + { + return data_.GetMinValue(); + } + + double GetMaxValue() const + { + return data_.GetMaxValue(); + } + + double GetStep() const + { + return data_.GetStepValue(); + } + + double GetValue() const + { + return data_.GetValue(); + } + + RefPtr GetTrack() const + { + return track_; + } + + RefPtr GetBlock() const + { + return block_; + } + + const EventMarker& GetOnMoveEndEventId() const + { + return onMoveEndEventId_; + } + + void SetOnMoveEndEventId(const EventMarker& methodId) + { + onMoveEndEventId_ = methodId; + } + + const EventMarker& GetOnMovingEventId() const + { + return onMovingEventId_; + } + + void SetOnMovingEventId(const EventMarker& methodId) + { + onMovingEventId_ = methodId; + } + + void SetBlock(const RefPtr& block) + { + block_ = block; + } + + void SetTrack(const RefPtr& track) + { + track_ = track; + } + + void SetCurrentValue(const double newValue) + { + data_.SetValue(newValue); + } + + void SetMinValue(const double minValue) + { + data_.SetMinValue(minValue); + } + + void SetMaxValue(const double minValue) + { + data_.SetMaxValue(minValue); + } + + void SetStepValue(const double minValue) + { + data_.SetStepValue(minValue); + } + + double MoveSteps(const int32_t num) + { + return data_.MoveSteps(num); + } + + void SetTextDirection(TextDirection direction) override + { + Component::SetTextDirection(direction); + track_->SetTextDirection(direction); + } + + const RefPtr& GetRotationController() const + { + return rotationController_; + } + + void SetDisable(bool disable) + { + isDisable_ = disable; + } + + bool GetDisable() const + { + return isDisable_; + } + + SliderMode GetSliderMode() const + { + return mode_; + } + + void SetSliderMode(SliderMode mode) + { + mode_ = mode; + } + + void SetShowTips(bool showTips) + { + showTips_ = showTips; + } + + bool NeedShowTips() const + { + return showTips_; + } + + void SetShowSteps(bool showSteps) + { + showSteps_ = showSteps; + } + + bool NeedShowSteps() const + { + return showSteps_; + } + +private: + ProgressData data_; + RefPtr block_; + RefPtr track_; + EventMarker onMoveEndEventId_; + EventMarker onMovingEventId_; + bool isDisable_ = false; + bool showTips_ = false; + bool showSteps_ = false; + SliderMode mode_ = SliderMode::OUTSET; + RefPtr rotationController_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SLIDER_SLIDER_COMPONENT_H diff --git a/frameworks/core/components/slider/slider_element.h b/frameworks/core/components/slider/slider_element.h new file mode 100644 index 00000000..5268929c --- /dev/null +++ b/frameworks/core/components/slider/slider_element.h @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SLIDER_SLIDER_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SLIDER_SLIDER_ELEMENT_H + +#include "core/components/slider/render_slider.h" +#include "core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +class SliderElement : public RenderElement, public FocusNode { + DECLARE_ACE_TYPE(SliderElement, RenderElement, FocusNode); + +public: + bool OnKeyEvent(const KeyEvent& keyEvent) override + { + if (keyEvent.action != KeyAction::UP) { + return false; + } + auto renderSlider = AceType::DynamicCast(renderNode_); + return renderSlider && renderSlider->HandleFocusEvent(keyEvent); + } + + void OnFocus() override + { + slider_ = AceType::DynamicCast(renderNode_); + if (!slider_) { + LOGE("Render slider create error!"); + return; + } + slider_->ChangeStatus(RenderStatus::FOCUS); + slider_->SetFocus(true); + } + + void OnBlur() override + { + if (!slider_) { + return; + } + slider_->ChangeStatus(RenderStatus::BLUR); + slider_->SetFocus(false); + } + +private: + RefPtr slider_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SLIDER_SLIDER_ELEMENT_H diff --git a/frameworks/core/components/slider/slider_theme.h b/frameworks/core/components/slider/slider_theme.h new file mode 100644 index 00000000..a86a9536 --- /dev/null +++ b/frameworks/core/components/slider/slider_theme.h @@ -0,0 +1,192 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SLIDER_SLIDER_THEME_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SLIDER_SLIDER_THEME_H + +#include "base/geometry/dimension.h" +#include "core/components/common/properties/color.h" +#include "core/components/theme/theme.h" +#include "core/components/theme/theme_constants.h" + +namespace OHOS::Ace { + +/** + * SliderTheme defines color and styles of SliderComponent. SliderTheme should be built + * using SliderTheme::Builder. + */ +class SliderTheme : public virtual Theme { + DECLARE_ACE_TYPE(SliderTheme, Theme); + +public: + class Builder { + public: + Builder() = default; + ~Builder() = default; + + RefPtr Build(const RefPtr& themeConstants) const + { + RefPtr theme = AceType::Claim(new SliderTheme()); + if (!themeConstants) { + return theme; + } + // init theme from global data + theme->outsetBlockSize_ = themeConstants->GetDimension(THEME_SLIDER_OUTSET_BLOCK_SIZE); + theme->outsetBlockHotSize_ = themeConstants->GetDimension(THEME_SLIDER_OUTSET_BLOCK_HOT_REGION_SIZE); + theme->blockColor_ = themeConstants->GetColor(THEME_SLIDER_BLOCK_COLOR); + theme->outsetTrackThickness_ = themeConstants->GetDimension(THEME_SLIDER_OUTSET_TRACK_THICKNESS); + theme->insetTrackThickness_ = themeConstants->GetDimension(THEME_SLIDER_INSET_TRACK_THICKNESS); + theme->trackSelectedColor_ = themeConstants->GetColor(THEME_SLIDER_TRACK_SELECTED); + theme->trackBgColor_ = themeConstants->GetColor(THEME_SLIDER_TRACK_BG); + theme->insetBlockSize_ = themeConstants->GetDimension(THEME_SLIDER_INSET_BLOCK_SIZE); + theme->insetBlockHotSize_ = themeConstants->GetDimension(THEME_SLIDER_INSET_BLOCK_HOT_REGION_SIZE); + theme->markerSize_ = themeConstants->GetDimension(THEME_SLIDER_MARKER_SIZE); + theme->markerColor_ = themeConstants->GetColor(THEME_SLIDER_MARKER_COLOR); + theme->tipColor_ = themeConstants->GetColor(THEME_SLIDER_TIP_COLOR); + theme->tipTextColor_ = themeConstants->GetColor(THEME_SLIDER_TIP_TEXT_COLOR); + theme->tipFontSize_ = themeConstants->GetDimension(THEME_SLIDER_TIP_FONT_SIZE); + theme->tipTextPadding_ = themeConstants->GetDimension(THEME_SLIDER_TIP_TEXT_PADDING_SIZE); + theme->blockHoverColor_ = themeConstants->GetColor(THEME_SLIDER_BLOCK_HOVER_COLOR); + ParsePattern(themeConstants->GetThemeStyle(), theme); + return theme; + } + + void ParsePattern(const RefPtr& themeStyle, const RefPtr& theme) const + { + if (!themeStyle) { + LOGI("progress theme style is null"); + return; + } + theme->trackBgColor_ = themeStyle->GetAttr(THEME_ATTR_COLOR_COMPONENT_NORMAL, Color::RED); + theme->trackSelectedColor_ = themeStyle->GetAttr(THEME_ATTR_COLOR_EMPHASIZE, Color::RED); + theme->markerColor_ = themeStyle->GetAttr(THEME_ATTR_COLOR_FOREGROUND, Color::RED).BlendOpacity(0.1); + theme->tipTextColor_ = themeStyle->GetAttr(THEME_ATTR_TEXT_COLOR_PRIMARY_INVERSE, Color::RED); + theme->tipColor_ = themeStyle->GetAttr(THEME_ATTR_COLOR_TIPS_BG, Color::RED); + theme->blockHoverColor_ = themeStyle->GetAttr(THEME_ATTR_COLOR_HOVER, Color::RED); + } + }; + + ~SliderTheme() override = default; + + Dimension GetOutsetBlockSize() const + { + return outsetBlockSize_; + } + + Dimension GetOutsetBlockHotSize() const + { + return outsetBlockHotSize_; + } + + Dimension GetInsetBlockSize() const + { + return insetBlockSize_; + } + + Dimension GetInsetBlockHotSize() const + { + return insetBlockHotSize_; + } + + Color GetBlockHoverColor() const + { + return blockHoverColor_; + } + + Color GetBlockColor() const + { + return blockColor_; + } + + Dimension GetInsetTrackThickness() const + { + return insetTrackThickness_; + } + + Dimension GetOutsetTrackThickness() const + { + return outsetTrackThickness_; + } + + Dimension GetMarkerSize() const + { + return markerSize_; + } + + Dimension GetTipFontSize() const + { + return tipFontSize_; + } + + Dimension GetTipTextPadding() const + { + return tipTextPadding_; + } + + Color GetTipColor() const + { + return tipColor_; + } + + Color GetTipTextColor() const + { + return tipTextColor_; + } + + Color GetMarkerColor() const + { + return markerColor_; + } + + Color GetTrackBgColor() const + { + return trackBgColor_; + } + + Color GetTrackSelectedColor() const + { + return trackSelectedColor_; + } + +protected: + SliderTheme() = default; + +private: + // outset slider mode + Dimension outsetBlockSize_; + Dimension outsetBlockHotSize_; + Dimension outsetTrackThickness_; + + // inset slide mode + Dimension insetBlockSize_; + Dimension insetBlockHotSize_; + Dimension insetTrackThickness_; + + // common + Dimension markerSize_; + Dimension tipFontSize_; + Dimension tipTextPadding_; + Color blockColor_; + Color blockHoverColor_; + Color tipColor_; + Color tipTextColor_; + Color markerColor_; + Color trackBgColor_; + Color trackSelectedColor_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SLIDER_SLIDER_THEME_H diff --git a/frameworks/core/components/stack/BUILD.gn b/frameworks/core/components/stack/BUILD.gn new file mode 100644 index 00000000..90d3a7bc --- /dev/null +++ b/frameworks/core/components/stack/BUILD.gn @@ -0,0 +1,22 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("stack") { + sources = [ + "flutter_render_stack.cpp", + "render_stack.cpp", + "stack_element.cpp", + ] +} diff --git a/frameworks/core/components/stack/flutter_render_stack.cpp b/frameworks/core/components/stack/flutter_render_stack.cpp new file mode 100644 index 00000000..b3236a63 --- /dev/null +++ b/frameworks/core/components/stack/flutter_render_stack.cpp @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/stack/flutter_render_stack.h" + +namespace OHOS::Ace { + +using namespace Flutter; + +RefPtr RenderStack::Create() +{ + return AceType::MakeRefPtr(); +} + +void FlutterRenderStack::Paint(RenderContext& context, const Offset& offset) +{ + if ((GetOverflowFlag() == Overflow::CLIP) && IsChildOverflow()) { + layer_->SetClip(0.0, GetLayoutSize().Width(), 0.0, GetLayoutSize().Height(), Clip::HARD_EDGE); + } + RenderNode::Paint(context, offset); +} + +RenderLayer FlutterRenderStack::GetRenderLayer() +{ + if ((GetOverflowFlag() == Overflow::CLIP) && IsChildOverflow()) { + layer_ = AceType::MakeRefPtr( + 0.0, GetLayoutSize().Width(), 0.0, GetLayoutSize().Height(), Clip::HARD_EDGE); + return AceType::RawPtr(layer_); + } + return nullptr; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/stack/flutter_render_stack.h b/frameworks/core/components/stack/flutter_render_stack.h new file mode 100644 index 00000000..99947dd1 --- /dev/null +++ b/frameworks/core/components/stack/flutter_render_stack.h @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STACK_FLUTTER_RENDER_STACK_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STACK_FLUTTER_RENDER_STACK_H + +#include "core/components/stack/render_stack.h" +#include "core/pipeline/layers/clip_layer.h" + +namespace OHOS::Ace { + +class FlutterRenderStack : public RenderStack { + DECLARE_ACE_TYPE(FlutterRenderStack, RenderStack); + +public: + FlutterRenderStack() = default; + ~FlutterRenderStack() override = default; + + void Paint(RenderContext& context, const Offset& offset) override; + RenderLayer GetRenderLayer() override; + +private: + RefPtr layer_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STACK_FLUTTER_RENDER_STACK_H diff --git a/frameworks/core/components/stack/render_stack.cpp b/frameworks/core/components/stack/render_stack.cpp new file mode 100644 index 00000000..c3280806 --- /dev/null +++ b/frameworks/core/components/stack/render_stack.cpp @@ -0,0 +1,204 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/stack/render_stack.h" + +#include "base/utils/utils.h" +#include "core/components/positioned/render_positioned.h" +#include "core/components/stack/stack_component.h" +#include "core/pipeline/base/position_layout_utils.h" + +namespace OHOS::Ace { + +void RenderStack::Update(const RefPtr& component) +{ + const auto stack = AceType::DynamicCast(component); + if (!stack) { + return; + } + align_ = stack->GetAlignment(); + fit_ = stack->GetStackFit(); + overflow_ = stack->GetOverflow(); + mainStackSize_ = stack->GetMainStackSize(); + MarkNeedLayout(); +} + +void RenderStack::PerformLayout() +{ + Size maxSize = GetLayoutParam().GetMaxSize(); + bool hasNonPositionedItem = false; + if (GetChildren().empty()) { + LOGD("RenderStack: No child in Stack. Use max size of LayoutParam."); + SetLayoutSize(maxSize); + return; + } + LayoutParam innerLayout; + // layout children + RefPtr firstChild; + for (const auto& item : GetChildren()) { + auto positionedItem = AceType::DynamicCast(item); + if (!positionedItem) { + hasNonPositionedItem = true; + innerLayout = MakeNonPositionedInnerLayoutParam(firstChild); + item->Layout(innerLayout); + } else { + innerLayout = MakePositionedInnerLayoutParam(positionedItem, firstChild); + positionedItem->Layout(innerLayout); + } + if (!firstChild) { + firstChild = item; + } + } + // determine the stack size + DetermineStackSize(hasNonPositionedItem); + // place children + for (const auto& item : GetChildren()) { + auto positionedItem = AceType::DynamicCast(item); + if (!positionedItem) { + if (item->GetPositionType() == PositionType::ABSOLUTE) { + auto itemOffset = PositionLayoutUtils::GetAbsoluteOffset(Claim(this), item); + item->SetAbsolutePosition(itemOffset); + continue; + } + item->SetPosition(GetNonPositionedChildOffset(item->GetLayoutSize())); + continue; + } + Offset offset = GetPositionedChildOffset(positionedItem); + if (offset.GetX() < 0.0 || offset.GetY() < 0.0 || + offset.GetX() + positionedItem->GetLayoutSize().Width() > GetLayoutSize().Width() || + offset.GetY() + positionedItem->GetLayoutSize().Height() > GetLayoutSize().Height()) { + isChildOverflow_ = true; + } + positionedItem->SetPosition(offset); + } +} + +void RenderStack::DetermineStackSize(bool hasNonPositioned) +{ + Size maxSize = GetLayoutParam().GetMaxSize().IsInfinite() ? viewPort_ : GetLayoutParam().GetMaxSize(); + if (mainStackSize_ == MainStackSize::MAX && !maxSize.IsInfinite()) { + SetLayoutSize(maxSize); + return; + } + double width = GetLayoutParam().GetMinSize().Width(); + double height = GetLayoutParam().GetMinSize().Height(); + double maxX = 0.0; + double maxY = 0.0; + double lastChildWidth = width; + double lastChildHeight = height; + for (const auto& item : GetChildren()) { + double constrainedWidth = std::clamp(item->GetLayoutSize().Width(), GetLayoutParam().GetMinSize().Width(), + GetLayoutParam().GetMaxSize().Width()); + double constrainedHeight = std::clamp(item->GetLayoutSize().Height(), GetLayoutParam().GetMinSize().Height(), + GetLayoutParam().GetMaxSize().Height()); + width = std::max(width, constrainedWidth); + height = std::max(height, constrainedHeight); + lastChildWidth = constrainedWidth; + lastChildHeight = constrainedHeight; + maxX = std::max(maxX, item->GetLayoutSize().Width() + NormalizePercentToPx(item->GetLeft(), false)); + maxY = std::max(maxY, item->GetLayoutSize().Height() + NormalizePercentToPx(item->GetTop(), true)); + } + if (mainStackSize_ == MainStackSize::NORMAL && !hasNonPositioned && !maxSize.IsInfinite()) { + SetLayoutSize(maxSize); + return; + } + if (mainStackSize_ == MainStackSize::LAST_CHILD) { + SetLayoutSize(Size(lastChildWidth, lastChildHeight)); + return; + } + if (mainStackSize_ == MainStackSize::MATCH_CHILDREN) { + SetLayoutSize(GetLayoutParam().Constrain(Size(maxX, maxY))); + return; + } + SetLayoutSize(Size(width, height)); +} + +LayoutParam RenderStack::MakeNonPositionedInnerLayoutParam(const RefPtr& firstChild) const +{ + LayoutParam innerLayout; + switch (fit_) { + case StackFit::STRETCH: + innerLayout.SetFixedSize(GetLayoutParam().GetMaxSize()); + break; + case StackFit::KEEP: + innerLayout.SetMaxSize(GetLayoutParam().GetMaxSize()); + break; + case StackFit::INHERIT: + innerLayout = GetLayoutParam(); + break; + case StackFit::FIRST_CHILD: + innerLayout = GetLayoutParam(); + if (firstChild) { + innerLayout.SetMaxSize(firstChild->GetLayoutSize()); + } + break; + default: + LOGD("RenderStack: No such StackFit support. Use KEEP."); + innerLayout.SetMaxSize(GetLayoutParam().GetMaxSize()); + break; + } + return innerLayout; +} + +LayoutParam RenderStack::MakePositionedInnerLayoutParam( + const RefPtr& item, const RefPtr& firstChild) const +{ + LayoutParam innerLayout; + double width = std::clamp(item->GetWidth(), innerLayout.GetMinSize().Width(), innerLayout.GetMaxSize().Width()); + double height = std::clamp(item->GetHeight(), innerLayout.GetMinSize().Height(), innerLayout.GetMaxSize().Height()); + if (!NearZero(width) && !NearZero(height)) { + innerLayout.SetFixedSize(Size(width, height)); + } else if (!NearZero(width)) { + innerLayout.SetMinSize(Size(width, innerLayout.GetMinSize().Height())); + innerLayout.SetMaxSize(Size(width, innerLayout.GetMaxSize().Height())); + } else if (!NearZero(height)) { + innerLayout.SetMinSize(Size(innerLayout.GetMinSize().Width(), height)); + innerLayout.SetMaxSize(Size(innerLayout.GetMaxSize().Width(), height)); + } else { + LOGD("RenderStack: No width or height set in positioned component. Make NonpositionedInnerLayoutParam."); + innerLayout = MakeNonPositionedInnerLayoutParam(firstChild); + } + return innerLayout; +} + +Offset RenderStack::GetNonPositionedChildOffset(const Size& childSize) +{ + return Alignment::GetAlignPosition(GetLayoutSize(), childSize, align_); +} + +Offset RenderStack::GetPositionedChildOffset(const RefPtr& item) +{ + double deltaX = 0.0; + if (item->HasLeft()) { + deltaX = NormalizePercentToPx(item->GetLeft(), false); + } else if (item->HasRight()) { + deltaX = + GetLayoutSize().Width() - NormalizePercentToPx(item->GetRight(), false) - item->GetLayoutSize().Width(); + } else { + deltaX = GetNonPositionedChildOffset(item->GetLayoutSize()).GetX(); + } + double deltaY = 0.0; + if (item->HasTop()) { + deltaY = NormalizePercentToPx(item->GetTop(), true); + } else if (item->HasBottom()) { + deltaY = + GetLayoutSize().Height() - NormalizePercentToPx(item->GetBottom(), true) - item->GetLayoutSize().Height(); + } else { + deltaY = GetNonPositionedChildOffset(item->GetLayoutSize()).GetY(); + } + return Offset(deltaX, deltaY); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/stack/render_stack.h b/frameworks/core/components/stack/render_stack.h new file mode 100644 index 00000000..9d9fb02e --- /dev/null +++ b/frameworks/core/components/stack/render_stack.h @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STACK_RENDER_STACK_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STACK_RENDER_STACK_H + +#include "core/components/common/layout/constants.h" +#include "core/components/common/properties/alignment.h" +#include "core/components/positioned/render_positioned.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class ACE_EXPORT RenderStack : public RenderNode { + DECLARE_ACE_TYPE(RenderStack, RenderNode); + +public: + static RefPtr Create(); + + void Update(const RefPtr& component) override; + + void PerformLayout() override; + + Overflow GetOverflowFlag() const + { + return overflow_; + } + + bool IsChildOverflow() const + { + return isChildOverflow_; + } + + void SetStackFit(StackFit fit) + { + fit_ = fit; + } + + void SetMainStackSize(MainStackSize mainStackSize) + { + mainStackSize_ = mainStackSize; + } + +protected: + LayoutParam MakeNonPositionedInnerLayoutParam(const RefPtr& firstChild) const; + LayoutParam MakePositionedInnerLayoutParam( + const RefPtr& item, const RefPtr& firstChild) const; + + Offset GetNonPositionedChildOffset(const Size& childSize); + Offset GetPositionedChildOffset(const RefPtr& item); + + virtual void DetermineStackSize(bool hasNonPositioned); + +private: + Alignment align_; + StackFit fit_ = StackFit::KEEP; + Overflow overflow_ = Overflow::OBSERVABLE; + bool isChildOverflow_ = false; + MainStackSize mainStackSize_ = MainStackSize::NORMAL; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STACK_RENDER_STACK_H diff --git a/frameworks/core/components/stack/stack_component.h b/frameworks/core/components/stack/stack_component.h new file mode 100644 index 00000000..2b015d45 --- /dev/null +++ b/frameworks/core/components/stack/stack_component.h @@ -0,0 +1,126 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STACK_STACK_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STACK_STACK_COMPONENT_H + +#include "core/pipeline/base/component_group.h" +#ifdef WEARABLE_PRODUCT +#include "core/components/flex/flex_component.h" +#endif +#ifndef WEARABLE_PRODUCT +#include "core/components/navigation_bar/navigation_container_component.h" +#endif +#include "core/components/common/layout/constants.h" +#include "core/components/common/properties/alignment.h" +#include "core/components/stack/render_stack.h" +#include "core/components/stack/stack_element.h" + +namespace OHOS::Ace { + +class ACE_EXPORT StackComponent : public ComponentGroup { + DECLARE_ACE_TYPE(StackComponent, ComponentGroup); + +public: + StackComponent( + const Alignment& align, StackFit fit, Overflow overflow, const std::list>& children) + : ComponentGroup(children), align_(align), fit_(fit), overflow_(overflow) + {} + ~StackComponent() override = default; + + RefPtr CreateElement() override + { + return AceType::MakeRefPtr(); + } + + RefPtr CreateRenderNode() override + { + return RenderStack::Create(); + } + + const Alignment& GetAlignment() const + { + return align_; + } + + void SetAlignment(const Alignment& align) + { + align_ = align; + } + + StackFit GetStackFit() const + { + return fit_; + } + + void SetStackFit(StackFit fit) + { + fit_ = fit; + } + + Overflow GetOverflow() const + { + return overflow_; + } + + void SetOverflow(Overflow overflow) + { + overflow_ = overflow; + } + + MainStackSize GetMainStackSize() const + { + return mainStackSize_; + } + + void SetMainStackSize(MainStackSize mainStackSize) + { + mainStackSize_ = mainStackSize; + } + + bool HasNavigationBar() const + { + return navigationBar_ != nullptr; + } + + void SetNavigationBar(const RefPtr& navigationBar) + { + navigationBar_ = navigationBar; + auto rootChild = GetChildren().front(); +#ifndef WEARABLE_PRODUCT + auto container = AceType::MakeRefPtr(navigationBar, rootChild); +#else + auto container = AceType::MakeRefPtr( + FlexAlign::FLEX_START, FlexAlign::STRETCH, std::list>()); + container->SetContainsNavigation(true); + container->SetMainAxisSize(MainAxisSize::MIN); + container->AppendChild(navigationBar_); + container->AppendChild(rootChild); +#endif + RemoveChild(rootChild); + InsertChild(0, container); + } + +private: + Alignment align_; + StackFit fit_ { StackFit::KEEP }; + Overflow overflow_ { Overflow::CLIP }; + MainStackSize mainStackSize_ { MainStackSize::NORMAL }; + RefPtr navigationBar_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STACK_STACK_COMPONENT_H diff --git a/frameworks/core/components/stack/stack_element.cpp b/frameworks/core/components/stack/stack_element.cpp new file mode 100644 index 00000000..b5c62f72 --- /dev/null +++ b/frameworks/core/components/stack/stack_element.cpp @@ -0,0 +1,425 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/stack/stack_element.h" + +#include "core/components/bubble/bubble_element.h" +#include "core/components/dialog/dialog_element.h" +#include "core/components/drop_filter/drop_filter_element.h" +#include "core/components/page/page_element.h" +#include "core/components/picker/picker_base_element.h" +#include "core/components/popup/popup_component.h" +#include "core/components/text_overlay/text_overlay_element.h" + +namespace OHOS::Ace { + +void StackElement::PushComponent(const RefPtr& newComponent, bool directBuild, bool disableTouchEvent) +{ + newComponent_ = newComponent; + disableTouchEvent_ = disableTouchEvent; + if (directBuild) { + PerformBuild(); + return; + } + MarkDirty(); +} + +void StackElement::PopComponent(bool directBuild) +{ + isPop_ = true; + if (directBuild) { + PerformBuild(); + return; + } + MarkDirty(); +} + +void StackElement::PushToastComponent(const RefPtr& newComponent, int32_t toastId) +{ + LOGD("PushToastComponent toastId = %{private}d", toastId); + operation_ = Operation::TOAST_PUSH; + newToastComponent_ = newComponent; + toastId_ = toastId; + isWaitingForBuild_ = true; + MarkDirty(); +} + +void StackElement::PopToastComponent(int32_t toastPopId) +{ + LOGD("PopToastComponent toastId = %{private}d", toastPopId); + if (isWaitingForBuild_) { + LOGE("StackElement: waiting for performBuild. Not ready for pop toast."); + return; + } + operation_ = Operation::TOAST_POP; + toastPopId_ = toastPopId; + isWaitingForBuild_ = true; + MarkDirty(); +} + +bool StackElement::PushDialog(const RefPtr& newComponent) +{ + // send event to accessibility when show dialog. + auto context = context_.Upgrade(); + if (context) { + AccessibilityEvent stackEvent; + stackEvent.eventType = "ejectdismiss"; + context->SendEventToAccessibility(stackEvent); + } + + if (isWaitingForBuild_) { + LOGE("StackElement: waiting for performBuild. Not ready for push dialog."); + return false; + } + newComponent_ = newComponent; + isWaitingForBuild_ = true; + operation_ = Operation::DIALOG_PUSH; + // dialog need to disable the touch event of all other children in stack + disableTouchEvent_ = true; + MarkDirty(); + return true; +} + +void StackElement::PushPanel(const RefPtr& newComponent, bool disableTouch) +{ + PushDialog(newComponent); + disableTouchEvent_ = disableTouch; + operation_ = Operation::PANEL_PUSH; +} + +void StackElement::PopPanel(bool directBuild) +{ + PopDialog(directBuild); +} + +bool StackElement::PopDialog(bool directBuild) +{ + // send event to accessibility when pop dialog. + auto context = context_.Upgrade(); + if (context) { + AccessibilityEvent stackEvent; + stackEvent.eventType = "ejectdismiss"; + context->SendEventToAccessibility(stackEvent); + } + + if (isWaitingForBuild_) { + LOGE("StackElement: waiting for performBuild. Not ready for pop dialog."); + return false; + } + isWaitingForBuild_ = true; + operation_ = Operation::DIALOG_POP; + if (directBuild) { + PerformBuild(); + return true; + } + MarkDirty(); + return true; +} + +void StackElement::PopTextOverlay(bool directBuild) +{ + isPop_ = true; + operation_ = Operation::TEXT_OVERLAY_POP; + if (directBuild) { + PerformBuild(); + return; + } + MarkDirty(); +} + +void StackElement::PopPopup(const ComposeId& id) +{ + isPop_ = true; + popupId_ = id; + operation_ = Operation::POPUP_POP; + MarkDirty(); +} + +void StackElement::PerformPushToast(int32_t toastId) +{ + LOGD("PerformPushToast toastId = %{private}d", toastId_); + if (newToastComponent_) { + RefPtr child = UpdateChild(nullptr, newToastComponent_); + if (child != nullptr) { + ToastInfo toastInfo = { toastId, child }; + toastStack_.push_back(toastInfo); + } + newToastComponent_ = nullptr; + } +} + +void StackElement::PerformPopToastById(int32_t toastId) +{ + LOGD("PerformPopToastById toastId = %{private}d", toastId); + if (toastStack_.empty()) { + return; + } + if (toastId == toastStack_.back().toastId) { + while (!toastStack_.empty()) { + UpdateChild(toastStack_.back().child, nullptr); + toastStack_.pop_back(); + } + } else { + for (auto it = toastStack_.begin(); it != toastStack_.end(); ++it) { + if (it->toastId == toastId) { + UpdateChild(it->child, nullptr); + toastStack_.erase(it); + return; + } + } + } +} + +void StackElement::PerformPopToast() +{ + LOGD("PerformPopToast"); + if (!toastStack_.empty()) { + UpdateChild(toastStack_.back().child, nullptr); + toastStack_.pop_back(); + } +} + +void StackElement::PerformPushChild() +{ + if (!newComponent_) { + return; + } + if (!UpdateChild(nullptr, newComponent_)) { + return; + } + // set all other children in stack disable touch event + for (auto child = (++children_.rbegin()); child != children_.rend(); ++child) { + auto renderNode = (*child)->GetRenderNode(); + if (renderNode) { + renderNode->SetDisableTouchEvent(disableTouchEvent_); + } + } + newComponent_ = nullptr; + auto renderNode = GetRenderNode(); + if (!renderNode) { + LOGE("Stack render node not exists!"); + return; + } + renderNode->MarkNeedLayout(); + if (!focusNodes_.empty() && focusNodes_.back()->IsFocusable()) { + focusNodes_.back()->RequestFocus(); + } +} + +void StackElement::PerformPushPanel() +{ + PerformPushChild(); +} + +void StackElement::PerformPopDialog() +{ + bool hasDialog = std::any_of(children_.begin(), children_.end(), [](const RefPtr& child) { + return AceType::InstanceOf(child) || AceType::InstanceOf(child) || + AceType::InstanceOf(child); + }); + if (!hasDialog) { + EnableTouchEventAndRequestFocus(); + return; + } + for (auto iter = children_.rbegin(); iter != children_.rend();) { + const auto& currentChild = *iter; + bool isDialog = false; + if (AceType::InstanceOf(currentChild) || AceType::InstanceOf(currentChild) || + AceType::InstanceOf(currentChild)) { + isDialog = true; + } + bool isToast = std::any_of(toastStack_.begin(), toastStack_.end(), + [currentChild](const ToastInfo& toast) { return toast.child == currentChild; }); + if (isToast) { + // if overlay is a toast, skip it + ++iter; + } else { + UpdateChild(*iter, nullptr); + if (isDialog) { + break; + } + iter = children_.rbegin(); + } + } + EnableTouchEventAndRequestFocus(); +} + +void StackElement::PerformPopTextOverlay() +{ + if (isPop_) { + auto child = children_.end(); + while (child != children_.begin()) { + child--; + if (AceType::InstanceOf(*child)) { + UpdateChild(*child, nullptr); + break; + } + } + isPop_ = false; + if (IsFocusable()) { + RequestFocus(); + } + } +} + +void StackElement::PerformPopPopup(const ComposeId& id) +{ + if (!isPop_) { + return; + } + for (auto iter = children_.rbegin(); iter != children_.rend(); iter++) { + auto child = DynamicCast(*iter); + if (child && child->GetId() == id) { + child->FirePopEvent(); + UpdateChild(child, nullptr); + break; + } + } + isPop_ = false; + if (IsFocusable()) { + RequestFocus(); + } +} + +void StackElement::ResetBuildOperation() +{ + operation_ = Operation::NONE; + isWaitingForBuild_ = false; +} + +void StackElement::PerformBuild() +{ + LOGD("PerformBuild operation_ = %{private}d", operation_); + // do special build for dialog and toast + if (operation_ != Operation::NONE) { + PerformOperationBuild(); + if (newComponent_ || isPop_) { + MarkDirty(); + } else { + return; + } + } + // push component + if (newComponent_) { + if (!UpdateChild(nullptr, newComponent_)) { + return; + } + for (auto child = (++children_.rbegin()); child != children_.rend(); ++child) { + auto renderNode = (*child)->GetRenderNode(); + if (renderNode) { + renderNode->SetDisableTouchEvent(disableTouchEvent_); + } + } + newComponent_ = nullptr; + auto renderNode = GetRenderNode(); + if (renderNode) { + renderNode->MarkNeedLayout(); + } + if (!focusNodes_.empty() && focusNodes_.back()->IsFocusable()) { + focusNodes_.back()->RequestFocus(); + } + return; + } + // pop component + if (isPop_) { + auto child = children_.end(); + while (child != children_.begin()) { + child--; + bool isNotToast = std::none_of(toastStack_.begin(), toastStack_.end(), + [child](const ToastInfo& toast) { return toast.child == *child; }); + if (isNotToast) { + UpdateChild(*child, nullptr); + break; + } + } + isPop_ = false; + EnableTouchEventAndRequestFocus(); + return; + } + ComponentGroupElement::PerformBuild(); +} + +void StackElement::PerformOperationBuild() +{ + switch (operation_) { + case Operation::TOAST_POP: + PerformPopToastById(toastPopId_); + break; + case Operation::TOAST_PUSH: + PerformPopToast(); + PerformPushToast(toastId_); + break; + case Operation::DIALOG_POP: + PerformPopDialog(); + break; + case Operation::PANEL_PUSH: + PerformPushPanel(); + break; + case Operation::DIALOG_PUSH: + PerformPushChild(); + break; + case Operation::TEXT_OVERLAY_POP: + PerformPopTextOverlay(); + break; + case Operation::POPUP_POP: + PerformPopPopup(popupId_); + break; + default: + LOGD("Don't need operation."); + break; + } + ResetBuildOperation(); +} + +bool StackElement::RequestNextFocus(bool vertical, bool reverse, const Rect& rect) +{ + // Only consider the top node. + return false; +} + +void StackElement::OnFocus() +{ + if (focusNodes_.empty()) { + itLastFocusNode_ = focusNodes_.end(); + return; + } + // Only focus on the top focusable child. + itLastFocusNode_ = focusNodes_.end(); + while (itLastFocusNode_ != focusNodes_.begin()) { + --itLastFocusNode_; + if ((*itLastFocusNode_)->RequestFocusImmediately()) { + FocusNode::OnFocus(); + return; + } + } + + // Not found any focusable node, clear focus. + itLastFocusNode_ = focusNodes_.end(); +} + +void StackElement::EnableTouchEventAndRequestFocus() +{ + for (auto& child : children_) { + auto renderNode = child->GetRenderNode(); + if (renderNode) { + renderNode->SetDisableTouchEvent(false); + } + } + if (IsFocusable()) { + RequestFocus(); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/stack/stack_element.h b/frameworks/core/components/stack/stack_element.h new file mode 100644 index 00000000..d9e8dfd3 --- /dev/null +++ b/frameworks/core/components/stack/stack_element.h @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STACK_STACK_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STACK_STACK_ELEMENT_H + +#include "core/pipeline/base/component_group_element.h" + +namespace OHOS::Ace { + +class ACE_EXPORT StackElement : public ComponentGroupElement, public FocusGroup { + DECLARE_ACE_TYPE(StackElement, ComponentGroupElement, FocusGroup); + +enum class Operation { + NONE, + TOAST_PUSH, + TOAST_POP, + DIALOG_PUSH, + DIALOG_POP, + TEXT_OVERLAY_POP, + POPUP_POP, + PANEL_PUSH, + PANEL_POP, +}; + +struct ToastInfo { + int32_t toastId = -1; + RefPtr child; +}; + +public: + void PerformBuild() override; + void PushComponent(const RefPtr& newComponent, bool directBuild = false, bool disableTouchEvent = true); + void PopComponent(bool directBuild = false); + void PushPanel(const RefPtr& newComponent, bool disableTouch); + void PopPanel(bool direct = false); + void PushToastComponent(const RefPtr& newComponent, int32_t toastId); + void PopToastComponent(int32_t toastPopId); + bool PushDialog(const RefPtr& newComponent); + bool PopDialog(bool directBuild = false); + void PopTextOverlay(bool directBuild = false); + void PopPopup(const ComposeId& id); + +protected: + void OnFocus() override; + bool RequestNextFocus(bool vertical, bool reverse, const Rect& rect) override; + +private: + void PerformPushToast(int32_t toastId); + void PerformPopToastById(int32_t toastId); + void PerformPopToast(); + void PerformPushChild(); + void PerformPushPanel(); + void PerformPopDialog(); + void PerformPopTextOverlay(); + void PerformPopPopup(const ComposeId& id); + void ResetBuildOperation(); + void PerformOperationBuild(); + + void EnableTouchEventAndRequestFocus(); + + RefPtr newComponent_; + bool isPop_ { false }; + Operation operation_ { Operation::NONE }; + RefPtr newToastComponent_; + int32_t toastId_ { 0 }; + int32_t toastPopId_ { 0 }; + std::vector toastStack_; + bool isWaitingForBuild_ = false; + bool disableTouchEvent_ = true; + ComposeId popupId_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STACK_STACK_ELEMENT_H diff --git a/frameworks/core/components/stage/BUILD.gn b/frameworks/core/components/stage/BUILD.gn new file mode 100644 index 00000000..1830b708 --- /dev/null +++ b/frameworks/core/components/stage/BUILD.gn @@ -0,0 +1,21 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("stage") { + sources = [ + "render_stage.cpp", + "stage_element.cpp", + ] +} diff --git a/frameworks/core/components/stage/render_stage.cpp b/frameworks/core/components/stage/render_stage.cpp new file mode 100644 index 00000000..eefb9dd4 --- /dev/null +++ b/frameworks/core/components/stage/render_stage.cpp @@ -0,0 +1,264 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/stage/render_stage.h" + +#include "base/utils/system_properties.h" +#include "core/components/common/properties/page_transition_option.h" +#include "core/components/stage/stage_element.h" + +namespace OHOS::Ace { +namespace { + +constexpr double DRAG_LIMIT = 200.0; +constexpr int32_t LEAST_DRAG_BACK_PAGES = 2; + +RefPtr GetStageElement(const WeakPtr& contextWeak) +{ + auto context = contextWeak.Upgrade(); + if (!context) { + LOGE("Notify drag back failed. pipeline context is null."); + return nullptr; + } + auto stageElement = context->GetStageElement(); + return stageElement; +} + +void SetPageHidden(const RefPtr& element, bool hidden) +{ + // first try with page element. + RefPtr page = AceType::DynamicCast(element); + if (!page) { + return; + } + page->SetHidden(hidden); +} + +} // namespace + +RefPtr RenderStage::Create() +{ + return AceType::MakeRefPtr(); +} + +void RenderStage::Update(const RefPtr& component) +{ + RenderStack::Update(component); + if (component) { + isRightToLeft_ = component->GetTextDirection() == TextDirection::RTL; + } + WatchDragToBack(); +} + +void RenderStage::WatchDragToBack() +{ + dragDetector_ = AceType::MakeRefPtr(); + + dragDetector_->SetOnDragStart([weakRenderStage = WeakClaim(this)](const DragStartInfo& info) { + auto stage = weakRenderStage.Upgrade(); + if (!stage || stage->GetDisableTouchEvent()) { + LOGW("touch is not allowed at this time."); + return; + } + LOGI("Drag start to back."); + stage->HandleDragStart(); + }); + dragDetector_->SetOnDragUpdate([weakRenderStage = WeakClaim(this)](const DragUpdateInfo& info) { + auto stage = weakRenderStage.Upgrade(); + if (!stage || stage->GetDisableTouchEvent()) { + LOGW("touch is not allowed at this time."); + return; + } + stage->GetControllers(); + stage->HandleDragUpdate(info.GetMainDelta()); + }); + dragDetector_->SetOnDragEnd([weakRenderStage = WeakClaim(this)](const DragEndInfo& info) { + auto stage = weakRenderStage.Upgrade(); + if (!stage || stage->GetDisableTouchEvent()) { + LOGW("touch is not allowed at this time."); + return; + } + stage->HandleDragEnd(); + }); + dragDetector_->SetOnDragCancel([weakRenderStage = WeakClaim(this)]() { + auto stage = weakRenderStage.Upgrade(); + if (!stage || stage->GetDisableTouchEvent()) { + LOGW("touch is not allowed at this time."); + return; + } + // do the same as drag end when drag cancel happens. + stage->HandleDragEnd(); + }); +} + +void RenderStage::HandleDragUpdate(double deltaX) +{ + auto pipelineContext = context_.Upgrade(); + if (!pipelineContext) { + LOGE("HandleDragUpdate : context is null."); + return; + } + double rootWidth = pipelineContext->GetRootWidth(); + if (NearZero(rootWidth)) { + LOGE("root width is zero."); + return; + } + if (isRightToLeft_) { + dragOffsetX_ = std::clamp(dragOffsetX_ + deltaX, -rootWidth, 0.0); + } else { + dragOffsetX_ = std::clamp(dragOffsetX_ + deltaX, 0.0, rootWidth); + } + + // calculate the time based on the drag distance + tickTime_ = (rootWidth - fabs(dragOffsetX_)) / rootWidth * TRANSITION_WATCH_DURATION; + + if (!controllerIn_ || !controllerOut_) { + LOGE("HandleDragUpdate : controllerIn or controllerOut is null."); + return; + } + controllerIn_->NotifyStartListener(); + controllerOut_->NotifyStartListener(); + controllerIn_->TriggerFrame(tickTime_); + controllerOut_->TriggerFrame(tickTime_); +} + +void RenderStage::HandleDragStart() +{ + auto stageElement = GetStageElement(context_); + if (!stageElement) { + LOGE("Notify drag back failed. stageElement is null."); + return; + } + + auto children = stageElement->GetChildren(); + if (children.size() < LEAST_DRAG_BACK_PAGES) { + LOGE("Notify drag back failed. children size less than two."); + return; + } + auto childIter = children.rbegin(); + auto topElement = *childIter++; + auto nextTopElement = *childIter++; + auto transitionIn = PageTransitionElement::GetTransitionElement(topElement); + auto transitionOut = PageTransitionElement::GetTransitionElement(nextTopElement); + if (!transitionIn || !transitionOut) { + LOGE("transitionIn or transitionOut is null."); + return; + } + if (!stageElement->InitTransition(transitionIn, transitionOut, TransitionEvent::POP_START)) { + LOGE("Notify drag back failed. Init transition failed."); + } + SetPageHidden(nextTopElement, false); +} + +void RenderStage::HandleDragEnd() +{ + if (!controllerIn_ || !controllerOut_) { + LOGE("HandleDragEnd : controllerIn or controllerOut is null."); + return; + } + auto pipelineContext = context_.Upgrade(); + if (!pipelineContext) { + LOGE("HandleDragEnd : context is null."); + return; + } + controllerIn_->NotifyStopListener(); + controllerOut_->NotifyStopListener(); + SetDisableTouchEvent(true); + auto dragLimit = DRAG_LIMIT / pipelineContext->GetViewScale(); + if (fabs(dragOffsetX_) >= dragLimit) { + controllerIn_->UpdatePlayedTime(TRANSITION_WATCH_DURATION - tickTime_); + controllerOut_->UpdatePlayedTime(TRANSITION_WATCH_DURATION - tickTime_); + pipelineContext->CallRouterBackToPopPage(); + } else { + controllerIn_->Forward(); + controllerOut_->Forward(); + controllerIn_->AddStopListener([weakRenderStage = WeakClaim(this), contextWeak = context_] { + auto stage = weakRenderStage.Upgrade(); + if (stage) { + stage->SetDisableTouchEvent(false); + } + auto stageElement = GetStageElement(contextWeak); + if (!stageElement) { + LOGE("Recovery touchable failed. stageElement is null."); + return; + } + + auto children = stageElement->GetChildren(); + if (children.size() < LEAST_DRAG_BACK_PAGES) { + LOGE("Recovery touchable failed. children size less than two."); + return; + } + auto childIter = children.rbegin(); + auto topElement = *childIter++; + auto nextTopElement = *childIter++; + auto transitionIn = PageTransitionElement::GetTransitionElement(topElement); + auto transitionOut = PageTransitionElement::GetTransitionElement(nextTopElement); + if (!transitionIn || !transitionOut) { + LOGE("transitionIn or transitionOut is null."); + return; + } + transitionIn->SetTouchable(true); + transitionOut->SetTouchable(false); + SetPageHidden(nextTopElement, true); + }); + } + // reset drag offset + dragOffsetX_ = 0.0; +} + +void RenderStage::OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) +{ + if (dragDetector_) { + dragDetector_->SetCoordinateOffset(coordinateOffset); + result.emplace_back(dragDetector_); + } +} + +void RenderStage::GetControllers() +{ + controllerIn_.Reset(); + controllerOut_.Reset(); + auto context = context_.Upgrade(); + if (!context) { + LOGE("GetControllers : context is null."); + return; + } + RefPtr stageElement = context->GetStageElement(); + if (!stageElement) { + LOGE("GetControllers : stageElement is null."); + return; + } + + auto children = stageElement->GetChildren(); + if (children.size() < LEAST_DRAG_BACK_PAGES) { + LOGE("GetControllers : children size less than two."); + return; + } + auto childIter = children.rbegin(); + auto topElement = *(childIter++); + auto nextTopElement = *(childIter++); + auto transitionIn = PageTransitionElement::GetTransitionElement(topElement); + auto transitionOut = PageTransitionElement::GetTransitionElement(nextTopElement); + + if (!transitionIn || !transitionOut) { + LOGE("transitionIn or transitionOut is null."); + return; + } + controllerIn_ = transitionIn->GetTransitionController(); + controllerOut_ = transitionOut->GetTransitionController(); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/stage/render_stage.h b/frameworks/core/components/stage/render_stage.h new file mode 100644 index 00000000..8c6d78a5 --- /dev/null +++ b/frameworks/core/components/stage/render_stage.h @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STAGE_RENDER_STAGE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STAGE_RENDER_STAGE_H + +#include "core/animation/animator.h" +#include "core/components/stack/render_stack.h" +#include "core/gestures/drag_recognizer.h" + +namespace OHOS::Ace { + +class RenderStage : public RenderStack { + DECLARE_ACE_TYPE(RenderStage, RenderStack); + +public: + ~RenderStage() override = default; + + static RefPtr Create(); + + void Update(const RefPtr& component) override; + + void OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) override; + +private: + void WatchDragToBack(); + + void HandleDragUpdate(double deltaX); + + void HandleDragStart(); + + void HandleDragEnd(); + + void GetControllers(); + + RefPtr controllerIn_; + RefPtr controllerOut_; + RefPtr dragDetector_; + double dragOffsetX_ = 0.0; + double tickTime_ = 0.0; + bool isRightToLeft_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STAGE_RENDER_STAGE_H diff --git a/frameworks/core/components/stage/stage_component.h b/frameworks/core/components/stage/stage_component.h new file mode 100644 index 00000000..377a8ceb --- /dev/null +++ b/frameworks/core/components/stage/stage_component.h @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STAGE_STAGE_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STAGE_STAGE_COMPONENT_H + +#include "base/utils/system_properties.h" +#include "core/components/stack/stack_component.h" +#include "core/components/stage/render_stage.h" +#include "core/components/stage/stage_element.h" + +namespace OHOS::Ace { + +class StageComponent : public StackComponent { + DECLARE_ACE_TYPE(StageComponent, StackComponent); + +public: + explicit StageComponent(const std::list>& children) + : StackComponent(Alignment::TOP_LEFT, StackFit::INHERIT, Overflow::OBSERVABLE, children) + {} + ~StageComponent() override = default; + + RefPtr CreateElement() override + { + return AceType::MakeRefPtr(); + } + + RefPtr CreateRenderNode() override + { + if (SystemProperties::GetDeviceType() == DeviceType::WATCH) { + LOGI("device type is watch, create stage render node."); + return RenderStage::Create(); + } + return RenderStack::Create(); + } +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STAGE_STAGE_COMPONENT_H diff --git a/frameworks/core/components/stage/stage_element.cpp b/frameworks/core/components/stage/stage_element.cpp new file mode 100644 index 00000000..8bde3fb5 --- /dev/null +++ b/frameworks/core/components/stage/stage_element.cpp @@ -0,0 +1,703 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/stage/stage_element.h" + +#include "base/utils/system_properties.h" +#include "core/animation/card_transition_controller.h" +#include "core/animation/shared_transition_controller.h" +#include "core/components/display/display_element.h" +#include "core/components/display/render_display.h" +#include "core/components/page/page_element.h" +#include "core/components/page_transition/page_transition_element.h" +#include "core/components/stage/render_stage.h" + +namespace OHOS::Ace { +namespace { + +constexpr int32_t POP_TO_LEAST_COUNT = 2; + +RefPtr GetSharedController(WeakPtr contextWeak, TransitionEvent event) +{ + auto context = contextWeak.Upgrade(); + if (!context) { + LOGE("Get Shared Controller failed. context is null."); + return nullptr; + } + auto sharedTransitionController = context->GetSharedTransitionController(); + if (!sharedTransitionController) { + LOGE("Get Shared Controller failed. shared transition controller is null."); + return nullptr; + } + if (!sharedTransitionController->HasSharedTransition(event)) { + return nullptr; + } + return sharedTransitionController->GetAnimator(); +} + +RefPtr GetCardController(WeakPtr contextWeak, const ComposeId& composeId) +{ + auto context = contextWeak.Upgrade(); + if (!context) { + LOGE("Get card controller failed. context is null."); + return nullptr; + } + auto cardTransitionController = context->GetCardTransitionController(); + if (!cardTransitionController) { + LOGE("Get card controller failed. shared transition controller is null."); + return nullptr; + } + if (!cardTransitionController->GetCardRect(composeId).GetRect().IsValid()) { + return nullptr; + } + return cardTransitionController->GetAnimator(); +} + +RRect GetCardRect(WeakPtr contextWeak, const ComposeId& composeId) +{ + auto context = contextWeak.Upgrade(); + if (!context) { + LOGE("Get card controller failed. context is null."); + return RRect(); + } + auto cardTransitionController = context->GetCardTransitionController(); + if (!cardTransitionController) { + LOGE("Get card controller failed. shared transition controller is null."); + return RRect(); + } + return cardTransitionController->GetCardRect(composeId); +} + +} // namespace + +bool StageElement::OnKeyEvent(const KeyEvent& keyEvent) +{ + if (!IsCurrentFocus()) { + LOGE("stage is not current focus."); + return false; + } + if (itLastFocusNode_ != focusNodes_.end() && (*itLastFocusNode_)->HandleKeyEvent(keyEvent)) { + return true; + } + if (FocusNode::OnKeyEvent(keyEvent)) { + return true; + } + + return false; +} + +void StageElement::MarkDirty() +{ + isWaitingForBuild_ = true; + RefPtr context = context_.Upgrade(); + if (context) { + context->AddDirtyElement(AceType::Claim(this)); + } +} + +bool StageElement::CanRouterPage() +{ + if (isWaitingForBuild_) { + LOGE("StageElement: waiting for performBuild. Not ready for router page."); + return false; + } + if (pendingOperation_ != StackOperation::NONE) { + LOGE("StageElement: waiting for pending operation: %{public}d. Not ready for router page.", pendingOperation_); + return false; + } + if (!IsTransitionStop()) { + LOGE("router page failed. transition animation is not complete."); + return false; + } + return true; +} + +bool StageElement::CanPushPage() +{ + return CanRouterPage(); +} + +void StageElement::PushPage(const RefPtr& newComponent) +{ + if (!CanPushPage()) { + return; + } + operation_ = StackOperation::PUSH_PAGE; + newComponent_ = newComponent; + MarkDirty(); +} + +bool StageElement::CanPopPage() +{ + if (!CanRouterPage()) { + return false; + } + + if (children_.empty() || children_.size() == 1) { + LOGE("StageElement: no extra page for pop."); + return false; + } + return true; +} + +void StageElement::Pop() +{ + if (!CanPopPage()) { + return; + } + operation_ = StackOperation::POP; + MarkDirty(); +} + +void StageElement::PopToPage(int32_t pageId) +{ + if (!CanPopPage()) { + return; + } + operation_ = StackOperation::POP_TO_PAGE; + directedPageId_ = pageId; + MarkDirty(); +} + +bool StageElement::CanReplacePage() +{ + if (!CanRouterPage()) { + return false; + } + if (children_.empty()) { + LOGE("StageElement: no extra page for replace."); + return false; + } + return true; +} + +void StageElement::Replace(const RefPtr& newComponent) +{ + if (!CanReplacePage()) { + return; + } + operation_ = StackOperation::REPLACE; + newComponent_ = newComponent; + MarkDirty(); +} + +bool StageElement::ClearOffStage() +{ + if (!CanPopPage()) { + return false; + } + operation_ = StackOperation::CLEAR; + MarkDirty(); + return true; +} + +void StageElement::PerformBuild() +{ + LOGD("StageElement: PerformBuild, operation: %{public}d", operation_); + switch (operation_) { + case StackOperation::NONE: + break; + case StackOperation::PUSH_PAGE: + PerformPushPage(); + break; + case StackOperation::POP: + PerformPop(); + break; + case StackOperation::REPLACE: + PerformReplace(); + break; + case StackOperation::POP_TO_PAGE: + PerformPopToPage(); + break; + case StackOperation::CLEAR: + PerformClear(); + break; + default: + break; + } + isWaitingForBuild_ = false; +} + +void StageElement::RefreshFocus() +{ + // Process focus logic on the current top page when page changes + if (IsFocusable()) { + focusNodes_.back()->RequestFocus(); + } else { + auto context = context_.Upgrade(); + if (!context) { + LOGE("Pipeline context is nullptr"); + return; + } + context->RootLostFocus(); + } +} + +bool StageElement::CheckPageTransitionElement( + const RefPtr& transitionIn, const RefPtr& transitionOut) +{ + if (!transitionIn) { + LOGW("transition in is empty, skip transition."); + return false; + } + if (!transitionOut) { + LOGW("transition out is empty, skip transition."); + return false; + } + auto controllerIn = transitionIn->GetTransitionController(); + if (!controllerIn) { + LOGW("controller in is null, skip transition."); + return false; + } + auto controllerOut = transitionOut->GetTransitionController(); + if (!controllerOut) { + LOGW("controller out is null, skip transition."); + return false; + } + return true; +} + +bool StageElement::PerformPushPageTransition(const RefPtr& elementIn, const RefPtr& elementOut) +{ + auto transitionIn = PageTransitionElement::GetTransitionElement(elementIn); + auto transitionOut = PageTransitionElement::GetTransitionElement(elementOut); + auto pageIn = AceType::DynamicCast(elementIn); + auto pageOut = AceType::DynamicCast(elementOut); + if (!CheckPageTransitionElement(transitionIn, transitionOut)) { + LOGW("check page transition failed, skip push transition."); + return false; + } + LOGD("notify push page event. page id: in: %{public}d, out: %{public}d", pageIn->GetPageId(), pageOut->GetPageId()); + NotifyPageTransitionListeners(TransitionEvent::PUSH_START, pageIn, pageOut); + if (!InitTransition(transitionIn, transitionOut, TransitionEvent::PUSH_START)) { + LOGW("init transition failed, skip push transition."); + return false; + } + if (!pageIn || !pageOut) { + LOGE("push page failed. page in / out is null."); + return false; + } + if ((!controllerIn_) || (!controllerOut_)) { + LOGE("push page failed. controller in / out is null."); + return false; + } + auto weak = AceType::WeakClaim(this); + WeakPtr pageInWeak = pageIn; + WeakPtr pageOutWeak = pageOut; + controllerIn_->AddStopListener([weak, pageInWeak, pageOutWeak]() { + auto stage = weak.Upgrade(); + if (stage) { + stage->NotifyPageTransitionListeners(TransitionEvent::PUSH_END, pageInWeak, pageOutWeak); + auto context = stage->context_.Upgrade(); + if (context) { + context->OnPageShow(); + } + } + }); + // make stage untouchable when push page. + PerformPushPageInStage(pageOut); + LOGD("start push transition."); + controllerIn_->Forward(); + controllerOut_->Forward(); + auto sharedController = GetSharedController(context_, TransitionEvent::PUSH_START); + if (sharedController) { + sharedController->SetDuration(controllerIn_->GetDuration()); + sharedController->Forward(); + } + auto cardController = GetCardController(context_, pageIn->GetCardComposeId()); + if (cardController) { + cardController->SetDuration(controllerIn_->GetDuration()); + cardController->Forward(); + } + return true; +} + +void StageElement::AddListenerForPopPage( + const WeakPtr& pageInWeak, const WeakPtr& pageOutWeak) +{ + auto weak = AceType::WeakClaim(this); + // Add stop listener to remove top page when transition done. + controllerIn_->AddStopListener([weak, pageInWeak, pageOutWeak]() { + auto stage = weak.Upgrade(); + auto elementIn = DynamicCast(pageInWeak.Upgrade()); + if (stage && elementIn) { + // Remove top page. + stage->UpdateChild(elementIn, nullptr); + stage->NotifyPageTransitionListeners(TransitionEvent::POP_END, pageInWeak, pageOutWeak); + stage->RefreshFocus(); + } + }); +} + +bool StageElement::PerformPopPageTransition(const RefPtr& elementIn, const RefPtr& elementOut) +{ + auto transitionIn = PageTransitionElement::GetTransitionElement(elementIn); + auto transitionOut = PageTransitionElement::GetTransitionElement(elementOut); + auto pageIn = AceType::DynamicCast(elementIn); + auto pageOut = AceType::DynamicCast(elementOut); + if (!CheckPageTransitionElement(transitionIn, transitionOut)) { + LOGW("check page transition failed, skip pop transition."); + return false; + } + NotifyPageTransitionListeners(TransitionEvent::POP_START, pageIn, pageOut); + if (!InitTransition(transitionIn, transitionOut, TransitionEvent::POP_START)) { + LOGW("init transition failed, skip pop transition."); + return false; + } + if (!pageIn || !pageOut) { + LOGE("pop page failed. page in / out is null."); + return false; + } + if ((!controllerIn_) || (!controllerOut_)) { + LOGE("pop page failed. controller in / out is null."); + return false; + } + AddListenerForPopPage(pageIn, pageOut); + PerformPopPageInStage(pageOut, transitionOut); +#ifndef WEARABLE_PRODUCT + PerformPopMultimodalScene(pageIn->GetPageId(), pageOut->GetPageId()); +#endif + LOGD("start pop transition."); + RRect cardRRect = GetCardRect(context_, pageIn->GetCardComposeId()); + if (cardRRect.GetRect().IsValid()) { + controllerIn_->Forward(); + controllerOut_->Forward(); + } else { + controllerIn_->Backward(); + controllerOut_->Backward(); + } + auto sharedController = GetSharedController(context_, TransitionEvent::POP_START); + if (sharedController) { + sharedController->SetDuration(controllerIn_->GetDuration()); + sharedController->Forward(); + } + auto cardController = GetCardController(context_, pageIn->GetCardComposeId()); + if (cardController) { + cardController->SetDuration(controllerIn_->GetDuration()); + cardController->Forward(); + } + return true; +} + +void StageElement::PerformPushPage() +{ + LOGD("start to push page."); +#ifndef WEARABLE_PRODUCT + auto pageComponent = DynamicCast(newComponent_); + if (pageComponent) { + PerformPushMultimodalScene(pageComponent->GetPageId()); + } else { + LOGW("fail to perform push scene due to page component is null"); + } +#endif + RefPtr topElement; + if (children_.empty()) { + LOGD("push first page, just update child, no transition."); + NotifyPageTransitionListeners(TransitionEvent::PUSH_START, nullptr, nullptr); + auto newElement = UpdateChild(nullptr, newComponent_); + auto pageIn = AceType::DynamicCast(newElement); + if (!pageIn) { + LOGE("no page element found, do not notify page transition event."); + return; + } + LOGD("notify push first page event. page id: in: %{public}d.", pageIn->GetPageId()); + NotifyPageTransitionListeners(TransitionEvent::PUSH_END, pageIn, nullptr); + return; + } else { + topElement = children_.back(); + } + auto pushedElement = UpdateChild(nullptr, newComponent_); + auto transitionIn = PageTransitionElement::GetTransitionElement(pushedElement); + auto transitionOut = PageTransitionElement::GetTransitionElement(topElement); + if (!CheckPageTransitionElement(transitionIn, transitionOut)) { + LOGE("check page transition failed, skip push transition."); + return; + } + LOGD("set transition in invisible."); + transitionIn->SetVisible(VisibleType::INVISIBLE); + auto context = context_.Upgrade(); + if (context) { + context->AddPostFlushListener(AceType::Claim(this)); + pendingOperation_ = operation_; + } + RefreshFocus(); +} + +void StageElement::PerformPop() +{ + if (children_.size() <= 1) { + LOGD("no enough element left in stage."); + return; + } + auto context = context_.Upgrade(); + if (context) { + context->AddPostFlushListener(Claim(this)); + pendingOperation_ = operation_; + } +} + +void StageElement::PerformReplace() +{ + if (children_.empty()) { + LOGE("replace page failed. no page in stage now."); + return; + } + auto newPage = DynamicCast(newComponent_); + auto oldElement = children_.back(); +#ifndef WEARABLE_PRODUCT + auto oldPage = DynamicCast(oldElement); + if (newPage && oldPage) { + PerformReplaceActiveScene(newPage->GetPageId(), oldPage->GetPageId()); + } +#endif + UpdateChild(oldElement, nullptr); + UpdateChild(nullptr, newComponent_); + auto context = context_.Upgrade(); + if (context) { + context->OnPageShow(); + } + RefreshFocus(); +} + +void StageElement::PerformPopToPage() +{ + if (children_.empty()) { + LOGE("pop page failed. no page in stage now."); + return; + } + // check if top page matches + auto topElement = *children_.rbegin(); + if (topElement) { + auto topPage = AceType::DynamicCast(topElement); + if (topPage && directedPageId_ == topPage->GetPageId()) { + LOGW("already in target page. do not need to jump."); + return; + } + } + // skip top page and remove others. At least, need Top and End child to perform pop. + for (auto iter = (++children_.rbegin()); children_.size() > POP_TO_LEAST_COUNT; iter = (++children_.rbegin())) { + auto child = *iter; + RefPtr page = AceType::DynamicCast(child); + if (!page) { + LOGW("try pop to page with wrapped display"); + RefPtr display = AceType::DynamicCast(child); + if (display) { + page = AceType::DynamicCast(display->GetFirstChild()); + } + } else { + if (directedPageId_ == page->GetPageId()) { + break; + } +#ifndef WEARABLE_PRODUCT + PerformRemoveInactiveScene(page->GetPageId()); +#endif + } + // remove child. + UpdateChild(child, nullptr); + } + PerformPop(); +} + +void StageElement::PerformClear() +{ + if (children_.empty()) { + LOGE("clear page failed. no page in stage now."); + return; + } + for (auto iter = (++children_.rbegin()); iter != children_.rend(); iter = (++children_.rbegin())) { + auto page = AceType::DynamicCast(*iter); +#ifndef WEARABLE_PRODUCT + if (page) { + PerformRemoveInactiveScene(page->GetPageId()); + } +#endif + UpdateChild(*iter, nullptr); + } + RefreshFocus(); +} + +bool StageElement::IsTransitionStop() const +{ + if ((!controllerIn_) || (!controllerOut_)) { + LOGD("controllerIn or controllerOut are null."); + return true; + } + return ((controllerIn_->IsStopped()) && (controllerOut_->IsStopped())); +} + +bool StageElement::InitTransition(const RefPtr& transition, TransitionDirection direction, + TransitionEvent event, const RRect& cardRRect) +{ + if (!transition) { + LOGE("init transition failed. transition is null. direction: %{public}d", direction); + return false; + } + + auto controller = transition->GetTransitionController(); + if (!controller) { + LOGE("init transition failed. transition controller is null. direction: %{public}d", direction); + return false; + } + if (!controller->IsStopped()) { + controller->Stop(); + } + + auto deviceType = SystemProperties::GetDeviceType(); + // Reset status listener. + controller->ClearAllListeners(); + transition->SetTransition(deviceType, event, direction, cardRRect); + transition->SetTransitionDirection(event, direction); + controller->SetFillMode(FillMode::FORWARDS); + transition->InitController(direction, event); + return true; +} + +bool StageElement::InitTransition(const RefPtr& transitionIn, + const RefPtr& transitionOut, TransitionEvent event) +{ + auto parentElement = transitionIn->GetElementParent(); + RefPtr page = AceType::DynamicCast(parentElement.Upgrade()); + if (!page) { + return false; + } + RRect cardRRect = GetCardRect(context_, page->GetCardComposeId()); + if (!InitTransition(transitionIn, TransitionDirection::TRANSITION_IN, event, cardRRect)) { + LOGE("init transition in failed."); + return false; + } + if (!InitTransition(transitionOut, TransitionDirection::TRANSITION_OUT, event, cardRRect)) { + LOGE("init transition out failed."); + return false; + } + controllerIn_ = transitionIn->GetTransitionController(); + controllerOut_ = transitionOut->GetTransitionController(); + return true; +} + +bool StageElement::IsFocusable() const +{ + if (!FocusNode::IsFocusable()) { + return false; + } + + if (focusNodes_.empty()) { + return false; + } + + return focusNodes_.back()->IsFocusable(); +} +#ifndef WEARABLE_PRODUCT +void StageElement::PerformPushMultimodalScene(int32_t pageId) +{ + auto context = GetContext().Upgrade(); + if (!context || !context->GetMultiModalManager()) { + LOGE("fail to push multimodal scene due to manager get failed"); + return; + } + context->GetMultiModalManager()->PushActiveScene(pageId); +} + +void StageElement::PerformPopMultimodalScene(int32_t poppedPageId, int32_t incomingPageId) +{ + auto context = GetContext().Upgrade(); + if (!context || !context->GetMultiModalManager()) { + LOGE("fail to pop multimodal scene due to manager get failed"); + return; + } + context->GetMultiModalManager()->PopActiveScene(poppedPageId, incomingPageId); +} + +void StageElement::PerformReplaceActiveScene(int32_t newPageId, int32_t replaceId) +{ + auto context = GetContext().Upgrade(); + if (!context || !context->GetMultiModalManager()) { + LOGE("fail to replace multimodal scene due to manager get failed"); + return; + } + context->GetMultiModalManager()->ReplaceActiveScene(newPageId, replaceId); +} + +void StageElement::PerformRemoveInactiveScene(int32_t pageId) +{ + auto context = GetContext().Upgrade(); + if (!context || !context->GetMultiModalManager()) { + LOGE("fail to remove inactive multimodal scene due to manager get failed"); + return; + } + context->GetMultiModalManager()->RemoveInactiveScene(pageId); +} +#endif + +void StageElement::ProcessStageInPageTransition() +{ + auto renderStage = GetRenderNode(); + if (renderStage && controllerIn_ && controllerOut_) { + renderStage->SetDisableTouchEvent(true); + auto weakRenderStage = WeakClaim(RawPtr(renderStage)); + auto lastStopController = + controllerIn_->GetDuration() > controllerOut_->GetDuration() ? controllerIn_ : controllerOut_; + lastStopController->AddStopListener([weakRenderStage] { + auto stage = weakRenderStage.Upgrade(); + if (stage) { + stage->SetDisableTouchEvent(false); + } + }); + } +} + +void StageElement::PerformPushPageInStage(const WeakPtr& pageOutWeak) +{ + ProcessStageInPageTransition(); + controllerOut_->AddStopListener([pageOutWeak] { + auto pageOut = pageOutWeak.Upgrade(); + if (pageOut) { + pageOut->SetHidden(true); + } + }); +} + +void StageElement::PerformPopPageInStage( + const RefPtr& pageOut, const RefPtr& transitionOut) +{ + ProcessStageInPageTransition(); + pageOut->SetHidden(false); +} + +void StageElement::OnPostFlush() +{ + LOGD("StageElement: PostFlush, pending operation: %{public}d", pendingOperation_); + if (children_.size() < POP_TO_LEAST_COUNT) { + LOGE("Can not handle less than two pages."); + return; + } + auto elementIter = children_.rbegin(); + auto topElement = *(elementIter++); + auto nextTopElement = *(elementIter++); + + switch (pendingOperation_) { + case StackOperation::PUSH_PAGE: + PerformPushPageTransition(topElement, nextTopElement); + break; + case StackOperation::POP: + case StackOperation::POP_TO_PAGE: + PerformPopPageTransition(topElement, nextTopElement); + break; + default: + break; + } + pendingOperation_ = StackOperation::NONE; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/stage/stage_element.h b/frameworks/core/components/stage/stage_element.h new file mode 100644 index 00000000..40e097f2 --- /dev/null +++ b/frameworks/core/components/stage/stage_element.h @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STAGE_STAGE_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STAGE_STAGE_ELEMENT_H + +#include "core/animation/animator.h" +#include "core/animation/page_transition_listener.h" +#include "core/components/page/page_element.h" +#include "core/components/page_transition/page_transition_element.h" +#include "core/components/stack/stack_element.h" + +namespace OHOS::Ace { + +enum class StackOperation { NONE, PUSH_PAGE, POP, POP_TO_PAGE, REPLACE, CLEAR }; + +class StageElement : public StackElement, public PageTransitionListenable, public FlushEvent { + DECLARE_ACE_TYPE(StageElement, StackElement, FlushEvent); + +public: + void PerformBuild() override; + + void PushPage(const RefPtr& newComponent); + void Pop(); + void PopToPage(int32_t pageId); + void Replace(const RefPtr& newComponent); + bool ClearOffStage(); + bool CanPopPage(); + bool CanPushPage(); + bool CanReplacePage(); + bool CanRouterPage(); + void RefreshFocus(); + bool IsFocusable() const override; + bool InitTransition(const RefPtr& transitionIn, + const RefPtr& transitionOut, TransitionEvent event); + +protected: + void MarkDirty() override; + bool OnKeyEvent(const KeyEvent& keyEvent) override; + +private: + void PerformPushPage(); + void PerformPop(); + void PerformReplace(); + void PerformPopToPage(); + void PerformClear(); +#ifndef WEARABLE_PRODUCT + void PerformPushMultimodalScene(int32_t pageId); + void PerformPopMultimodalScene(int32_t poppedPageId, int32_t incomingPageId); + void PerformReplaceActiveScene(int32_t newPageId, int32_t replaceId); + void PerformRemoveInactiveScene(int32_t pageId); +#endif + bool IsTransitionStop() const; + bool PerformPushPageTransition(const RefPtr& elementIn, const RefPtr& elementOut); + bool PerformPopPageTransition(const RefPtr& elementIn, const RefPtr& elementOut); + void AddListenerForPopPage(const WeakPtr& pageInWeak, const WeakPtr& pageOutWeak); + static bool CheckPageTransitionElement( + const RefPtr& transitionIn, const RefPtr& transitionOut); + bool InitTransition(const RefPtr& transition, TransitionDirection direction, + TransitionEvent event, const RRect& cardRect); + void PerformPushPageInStage(const WeakPtr& pageOutWeak); + void PerformPopPageInStage(const RefPtr& pageOut, const RefPtr& transitionOut); + void ProcessStageInPageTransition(); + // Page transition parameters depend on the existence of shared element transitions, + // Only after PerformBuild can we determine if there is a shared element transition. + void OnPostFlush() override; + + StackOperation operation_ { StackOperation::NONE }; + StackOperation pendingOperation_ { StackOperation::NONE }; + + RefPtr newComponent_; + RefPtr controllerIn_; // Controller for transition in. + RefPtr controllerOut_; // Controller for transition out. + int32_t directedPageId_ = 0; + bool isWaitingForBuild_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STAGE_STAGE_ELEMENT_H diff --git a/frameworks/core/components/stepper/BUILD.gn b/frameworks/core/components/stepper/BUILD.gn new file mode 100644 index 00000000..5e97586d --- /dev/null +++ b/frameworks/core/components/stepper/BUILD.gn @@ -0,0 +1,28 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("stepper") { + sources = [ + "flutter_render_stepper.cpp", + "flutter_render_stepper_item.cpp", + "render_stepper.cpp", + "render_stepper_item.cpp", + "stepper_animation_controller.cpp", + "stepper_component.cpp", + "stepper_element.cpp", + "stepper_item_component.cpp", + "stepper_item_element.cpp", + ] +} diff --git a/frameworks/core/components/stepper/flutter_render_stepper.cpp b/frameworks/core/components/stepper/flutter_render_stepper.cpp new file mode 100644 index 00000000..648373e5 --- /dev/null +++ b/frameworks/core/components/stepper/flutter_render_stepper.cpp @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/stepper/flutter_render_stepper.h" + +namespace OHOS::Ace { + +using namespace Flutter; + +RefPtr RenderStepper::Create() +{ + return AceType::MakeRefPtr(); +} + +RenderLayer FlutterRenderStepper::GetRenderLayer() +{ + if (!layer_) { + layer_ = AceType::MakeRefPtr( + 0.0, GetLayoutSize().Width(), 0.0, GetLayoutSize().Height(), Clip::HARD_EDGE); + } + return AceType::RawPtr(layer_); +} + +void FlutterRenderStepper::Paint(RenderContext& context, const Offset& offset) +{ + layer_->SetClip(0.0, GetLayoutSize().Width(), 0.0, GetLayoutSize().Height(), Clip::HARD_EDGE); + if (renderProgress_) { + if (rightButtonData_.buttonStatus == StepperButtonStatus::WAITING) { + renderProgress_->SetVisible(true); + } else { + renderProgress_->SetVisible(false); + } + } + RenderNode::Paint(context, offset); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/stepper/flutter_render_stepper.h b/frameworks/core/components/stepper/flutter_render_stepper.h new file mode 100644 index 00000000..1227bad5 --- /dev/null +++ b/frameworks/core/components/stepper/flutter_render_stepper.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STEPPER_FLUTTER_RENDER_STEPPER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STEPPER_FLUTTER_RENDER_STEPPER_H + +#include "core/components/stepper/render_stepper.h" + +#include "core/pipeline/layers/clip_layer.h" + +namespace OHOS::Ace { + +class FlutterRenderStepper : public RenderStepper { + DECLARE_ACE_TYPE(FlutterRenderStepper, RenderStepper); + +public: + RenderLayer GetRenderLayer() override; + void Paint(RenderContext& context, const Offset& offset) override; + + bool IsRepaintBoundary() const override + { + return true; + } + +private: + void CanvasDrawShape(flutter::Canvas& canvas, const Offset& offset, const Rect& rect, bool isStroke, + bool isDisabled); + + RefPtr layer_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STEPPER_FLUTTER_RENDER_STEPPER_H diff --git a/frameworks/core/components/stepper/flutter_render_stepper_item.cpp b/frameworks/core/components/stepper/flutter_render_stepper_item.cpp new file mode 100644 index 00000000..22e4e40c --- /dev/null +++ b/frameworks/core/components/stepper/flutter_render_stepper_item.cpp @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/stepper/flutter_render_stepper_item.h" + +namespace OHOS::Ace { + +using namespace Flutter; + +RefPtr RenderStepperItem::Create() +{ + return AceType::MakeRefPtr(); +} + +RenderLayer FlutterRenderStepperItem::GetRenderLayer() +{ + if (!layer_) { + layer_ = AceType::MakeRefPtr( + 0.0, GetLayoutSize().Width(), 0.0, GetLayoutSize().Height(), Clip::HARD_EDGE); + } + return AceType::RawPtr(layer_); +} + +void FlutterRenderStepperItem::Paint(RenderContext& context, const Offset& offset) +{ + layer_->SetClip(0.0, GetLayoutSize().Width(), 0.0, GetLayoutSize().Height(), Clip::HARD_EDGE); + RenderNode::Paint(context, offset); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/stepper/flutter_render_stepper_item.h b/frameworks/core/components/stepper/flutter_render_stepper_item.h new file mode 100644 index 00000000..9d182069 --- /dev/null +++ b/frameworks/core/components/stepper/flutter_render_stepper_item.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STEPPER_FLUTTER_RENDER_STEPPER_ITEM_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STEPPER_FLUTTER_RENDER_STEPPER_ITEM_H + +#include "core/components/stepper/render_stepper_item.h" + +#include "core/pipeline/layers/clip_layer.h" + +namespace OHOS::Ace { + +class FlutterRenderStepperItem : public RenderStepperItem { + DECLARE_ACE_TYPE(FlutterRenderStepperItem, RenderStepperItem); + +public: + RenderLayer GetRenderLayer() override; + void Paint(RenderContext& context, const Offset& offset) override; + +private: + RefPtr layer_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STEPPER_FLUTTER_RENDER_STEPPER_ITEM_H diff --git a/frameworks/core/components/stepper/render_stepper.cpp b/frameworks/core/components/stepper/render_stepper.cpp new file mode 100644 index 00000000..35d1af68 --- /dev/null +++ b/frameworks/core/components/stepper/render_stepper.cpp @@ -0,0 +1,903 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/stepper/render_stepper.h" + +#include "base/i18n/localization.h" +#include "base/utils/string_utils.h" +#include "core/animation/curve_animation.h" +#include "core/animation/keyframe.h" +#include "core/components/align/render_align.h" +#include "core/components/flex/flex_component.h" +#include "core/components/image/image_component.h" +#include "core/components/padding/padding_component.h" +#include "core/components/padding/render_padding.h" +#include "core/components/progress/loading_progress_component.h" +#include "core/components/stepper/render_stepper_item.h" +#include "core/components/stepper/stepper_component.h" +#include "core/event/ace_event_helper.h" + +namespace OHOS::Ace { +namespace { + +// button params +const char STEPPER_STATUS_NORMAL[] = "normal"; +const char STEPPER_STATUS_DISABLED[] = "disabled"; +const char STEPPER_STATUS_WAITING[] = "waiting"; +const char STEPPER_STATUS_SKIP[] = "skip"; +constexpr int32_t LEAST_STEPPER_ITEM_COUNT = 2; + +// for focus +constexpr Dimension STEPPER_FOCUS_DEL_OFFSET = 4.0_vp; +constexpr Dimension STEPPER_FOCUS_DEL_SIZE = 8.0_vp; +constexpr Dimension STEPPER_FOCUS_RADIUS_DEL_SIZE = 3.0_vp; + +} // namespace + +void RenderStepper::Update(const RefPtr& component) +{ + stepperComponent_ = AceType::DynamicCast(component); + if (!stepperComponent_) { + LOGW("stepper component is null"); + return; + } + childrenArray_.clear(); + needReverse_ = (stepperComponent_->GetTextDirection() == TextDirection::RTL); + totalItemCount_ = stepperComponent_->GetChildren().size(); + int32_t index = stepperComponent_->GetIndex(); + if (index >= 0 && index < totalItemCount_) { + currentIndex_ = index; + } + const auto& stepperController = stepperComponent_->GetStepperController(); + if (stepperController) { + auto weak = AceType::WeakClaim(this); + stepperController->SetRightButtonStatusImpl([weak](const std::string& status, const std::string& label) { + auto stepper = weak.Upgrade(); + if (stepper) { + stepper->SetRightButtonStatus(status, label); + } + }); + } + finishEvent_ = AceAsyncEvent::Create(stepperComponent_->GetFinishEventId(), context_); + skipEvent_ = AceAsyncEvent::Create(stepperComponent_->GetSkipEventId(), context_); + changeEvent_ = AceAsyncEvent::Create(stepperComponent_->GetChangeEventId(), context_); + nextEvent_ = AceSyncEvent::Create( + stepperComponent_->GetNextEventId(), context_); + backEvent_ = AceSyncEvent::Create( + stepperComponent_->GetBackEventId(), context_); + if (!stepperAnimationController_ && totalItemCount_ >= LEAST_STEPPER_ITEM_COUNT) { + stepperAnimationController_ = AceType::MakeRefPtr(GetContext()); + stepperAnimationController_->SetRenderStepper(AceType::WeakClaim(this)); + } + Initialize(); + MarkNeedLayout(); +} + +void RenderStepper::Initialize() +{ + InitAttr(); + InitRecognizer(); + UpdateButtonStatus(); + leftButtonData_.isLeft = true; + InitButton(leftButtonData_); + rightButtonData_.isLeft = false; + InitButton(rightButtonData_); + InitProgress(renderProgress_); +} + +void RenderStepper::InitAttr() +{ + stepperLabels_ = stepperComponent_->GetStepperLabels(); + defaultPaddingStart_ = NormalizeToPx(stepperComponent_->GetDefaultPaddingStart()); + defaultPaddingEnd_ = NormalizeToPx(stepperComponent_->GetDefaultPaddingEnd()); + progressColor_ = stepperComponent_->GetProgressColor(); + progressDiameter_ = stepperComponent_->GetProgressDiameter(); + arrowWidth_ = NormalizeToPx(stepperComponent_->GetArrowWidth()); + arrowHeight_ = NormalizeToPx(stepperComponent_->GetArrowHeight()); + arrowColor_ = stepperComponent_->GetArrowColor(); + disabledAlpha_ = stepperComponent_->GetDisabledAlpha(); + disabledColor_ = stepperComponent_->GetDisabledColor().ChangeOpacity(disabledAlpha_); + rrectRadius_ = NormalizeToPx(stepperComponent_->GetRadius()); + buttonPressedColor_ = stepperComponent_->GetButtonPressedColor(); + buttonPressedHeight_ = NormalizeToPx(stepperComponent_->GetButtonPressedHeight()); + controlPanelHeight_ = NormalizeToPx(stepperComponent_->GetControlHeight()); + controlMargin_ = NormalizeToPx(stepperComponent_->GetControlMargin()); + controlPadding_ = NormalizeToPx(stepperComponent_->GetControlPadding()); + focusColor_ = stepperComponent_->GetFocusColor(); + focusBorderWidth_ = NormalizeToPx(stepperComponent_->GetFocusBorderWidth()); + mouseHoverColor_ = stepperComponent_->GetMouseHoverColor(); + textStyles_ = stepperComponent_->GetLabelStyles(); + textColors_.clear(); + for (auto& textStyle : textStyles_) { + textColors_.emplace_back(textStyle.GetTextColor()); + } +} + +void RenderStepper::InitRecognizer() +{ + auto wp = AceType::WeakClaim(this); + touchRecognizer_ = AceType::MakeRefPtr(); + touchRecognizer_->SetOnTouchDown([wp](const TouchEventInfo& info) { + auto client = wp.Upgrade(); + if (client) { + client->HandleTouchDown(info); + } + }); + touchRecognizer_->SetOnTouchUp([wp](const TouchEventInfo& info) { + auto client = wp.Upgrade(); + if (client) { + client->HandleTouchUp(info); + } + }); + touchRecognizer_->SetOnTouchMove([wp](const TouchEventInfo& info) { + auto client = wp.Upgrade(); + if (client) { + client->HandleTouchMove(info); + } + }); + + clickRecognizer_ = AceType::MakeRefPtr(); + clickRecognizer_->SetOnClick([wp](const ClickInfo& info) { + auto client = wp.Upgrade(); + if (client) { + client->HandleClick(info); + } + }); +} + +void RenderStepper::InitProgress(RefPtr& renderProgress) +{ + if (!renderProgress) { + auto progressComponent = AceType::MakeRefPtr(); + progressComponent->SetDiameter(progressDiameter_); + progressComponent->SetProgressColor(progressColor_); + renderProgress = AceType::DynamicCast(progressComponent->CreateRenderNode()); + renderProgress->Attach(GetContext()); + renderProgress->Update(progressComponent); + AddChild(renderProgress); + } +} + +void RenderStepper::InitButton(ControlPanelData& buttonData) +{ + if (!buttonData.displayRender) { + buttonData.displayComponent = AceType::MakeRefPtr(); + buttonData.displayRender = AceType::DynamicCast(buttonData.displayComponent->CreateRenderNode()); + AddChild(buttonData.displayRender); + buttonData.displayRender->Attach(GetContext()); + } + + if (!buttonData.hotBoxRender) { + buttonData.hotBoxComponent = AceType::MakeRefPtr(); + buttonData.hotBoxComponent->SetPadding(Edge(controlPadding_)); + LayoutParam constraints; + constraints.SetMinSize(Size(0, buttonPressedHeight_)); + constraints.SetMaxSize(Size(Size::INFINITE_SIZE, Size::INFINITE_SIZE)); + buttonData.hotBoxComponent->SetConstraints(constraints); + buttonData.hotBoxRender = AceType::DynamicCast(buttonData.hotBoxComponent->CreateRenderNode()); + buttonData.displayRender->AddChild(buttonData.hotBoxRender); + buttonData.hotBoxRender->Attach(GetContext()); + } + + if (!buttonData.flexRender) { + auto row = AceType::MakeRefPtr(FlexAlign::FLEX_START, + FlexAlign::CENTER, std::list>()); + row->SetMainAxisSize(MainAxisSize::MIN); + buttonData.flexRender = AceType::DynamicCast(row->CreateRenderNode()); + buttonData.hotBoxRender->AddChild(buttonData.flexRender); + buttonData.flexRender->Attach(GetContext()); + InitHotArea(buttonData); + buttonData.flexRender->Update(row); + buttonData.hotBoxRender->Update(buttonData.hotBoxComponent); + buttonData.displayRender->Update(buttonData.displayComponent); + } +} + +void RenderStepper::InitHotArea(ControlPanelData& buttonData) +{ + if (!buttonData.textBoxRender) { + auto textBoxComponent = AceType::MakeRefPtr(); + buttonData.textBoxRender = AceType::DynamicCast(textBoxComponent->CreateRenderNode()); + buttonData.textBoxRender->Attach(GetContext()); + + buttonData.textComponent = AceType::MakeRefPtr(""); + buttonData.textComponent->SetData(buttonData.text); + + buttonData.textRender = AceType::DynamicCast(buttonData.textComponent->CreateRenderNode()); + buttonData.textBoxRender->AddChild(buttonData.textRender); + buttonData.textRender->Attach(GetContext()); + buttonData.textRender->Update(buttonData.textComponent); + buttonData.textBoxRender->Update(textBoxComponent); + } + + if (!buttonData.imageBoxRender) { + auto imageBoxComponent = AceType::MakeRefPtr(); + imageBoxComponent->SetPadding(buttonData.isLeft ? Edge(0, 0, controlPadding_, 0, DimensionUnit::PX) + : Edge(controlPadding_, 0, 0, 0, DimensionUnit::PX)); + buttonData.imageBoxRender = AceType::DynamicCast(imageBoxComponent->CreateRenderNode()); + buttonData.imageBoxRender->Attach(GetContext()); + + auto imageComponent = AceType::MakeRefPtr(); + if (buttonData.isLeft) { + buttonData.imageComponentLeft = imageComponent; + } else { + buttonData.imageComponentRight = imageComponent; + } + imageComponent->SetResourceId(buttonData.isLeft ? InternalResource::ResourceId::STEPPER_BACK_ARROW + : InternalResource::ResourceId::STEPPER_NEXT_ARROW); + imageComponent->SetWidth(stepperComponent_->GetArrowWidth()); + imageComponent->SetHeight(stepperComponent_->GetArrowHeight()); + imageComponent->SetColor(arrowColor_); + + auto renderImage = AceType::DynamicCast(imageComponent->CreateRenderNode()); + if (buttonData.isLeft) { + buttonData.imageRenderLeft = renderImage; + } else { + buttonData.imageRenderRight = renderImage; + } + buttonData.imageBoxRender->AddChild(renderImage); + renderImage->Attach(GetContext()); + renderImage->Update(imageComponent); + buttonData.imageBoxRender->Update(imageBoxComponent); + } +} + +void RenderStepper::UpdateButton(ControlPanelData& buttonData) +{ + // update disabled button + if (!buttonData.isLeft) { + if (buttonData.buttonStatus == StepperButtonStatus::DISABLED) { + textStyles_[currentIndex_].SetTextColor(disabledColor_); + buttonData.imageComponentRight->SetColor(arrowColor_.ChangeOpacity(disabledAlpha_)); + } else { + textStyles_[currentIndex_].SetTextColor(textColors_[currentIndex_]); + buttonData.imageComponentRight->SetColor(arrowColor_); + } + if (buttonData.buttonType == StepperButtonType::TEXT_ARROW) { + buttonData.imageRenderRight->Update(buttonData.imageComponentRight); + } + } else { + textStyles_[currentIndex_].SetTextColor(textColors_[currentIndex_]); + } + + // update hot area + auto decoration = AceType::MakeRefPtr(); + if (buttonData.isHovered) { + decoration->SetBackgroundColor(mouseHoverColor_); + } else { + decoration->SetBackgroundColor(Color::TRANSPARENT); + } + if (buttonData.isClicked && buttonData.buttonStatus != StepperButtonStatus::DISABLED) { + decoration->SetBackgroundColor(buttonPressedColor_); + } + Border border; + border.SetBorderRadius(Radius(rrectRadius_)); + decoration->SetBorder(border); + buttonData.hotBoxRender->SetBackDecoration(decoration); + + // update text + Size maxSize = GetLayoutParam().GetMaxSize().IsInfinite() ? viewPort_ : GetLayoutParam().GetMaxSize(); + double maxTextWidth = 0.0; + if (buttonData.buttonType == StepperButtonType::TEXT_ARROW) { + maxTextWidth = maxSize.Width() / 2 - defaultPaddingStart_ - controlMargin_ - 3 * controlPadding_ - arrowWidth_; + } else if (buttonData.buttonType == StepperButtonType::TEXT) { + maxTextWidth = maxSize.Width() / 2 - defaultPaddingEnd_ - controlMargin_ - 2 * controlPadding_; + } + LayoutParam constraints; + constraints.SetMinSize(Size(0, 0)); + constraints.SetMaxSize(Size(maxTextWidth, Size::INFINITE_SIZE)); + buttonData.textBoxRender->SetConstraints(constraints); + buttonData.textComponent->SetData(buttonData.text); + textStyles_[currentIndex_].SetTextAlign(buttonData.isLeft ? TextAlign::LEFT : TextAlign::RIGHT); + buttonData.textComponent->SetTextStyle(textStyles_[currentIndex_]); + buttonData.textRender->Update(buttonData.textComponent); + // update flex children + if (buttonData.isLeft) { + buttonData.flexRender->AddChild(buttonData.imageBoxRender); + buttonData.flexRender->AddChild(buttonData.textBoxRender); + } else { + if (buttonData.buttonType == StepperButtonType::TEXT_ARROW) { + buttonData.flexRender->AddChild(buttonData.textBoxRender); + buttonData.flexRender->AddChild(buttonData.imageBoxRender); + } else if (buttonData.buttonType == StepperButtonType::TEXT) { + buttonData.flexRender->AddChild(buttonData.textBoxRender); + buttonData.flexRender->RemoveChild(buttonData.imageBoxRender); + } + } +} + +void RenderStepper::UpdateButtonStatus() +{ + if (totalItemCount_ == 0) { + leftButtonData_.buttonType = StepperButtonType::NONE; + rightButtonData_.buttonType = StepperButtonType::NONE; + return; + } + LoadDefaultButtonStatus(); + UpdateRightButtonStatus(stepperLabels_[currentIndex_].initialStatus, + Localization::GetInstance()->GetEntryLetters("stepper.skip")); +} + +void RenderStepper::UpdateRightButtonStatus(const std::string& status, const std::string& label) +{ + if (status == STEPPER_STATUS_NORMAL) { + rightButtonData_.buttonStatus = StepperButtonStatus::NORMAL; + } else if (status == STEPPER_STATUS_DISABLED) { + rightButtonData_.buttonStatus = StepperButtonStatus::DISABLED; + } else if (status == STEPPER_STATUS_WAITING) { + rightButtonData_.buttonStatus = StepperButtonStatus::WAITING; + } else if (status == STEPPER_STATUS_SKIP) { + rightButtonData_.buttonType = StepperButtonType::TEXT; + rightButtonData_.buttonStatus = StepperButtonStatus::SKIP; + rightButtonData_.text = label; + } +} + +void RenderStepper::LoadDefaultButtonStatus() +{ + std::string leftLabel = stepperLabels_[currentIndex_].leftLabel; + std::string rightLabel = stepperLabels_[currentIndex_].rightLabel; + if (totalItemCount_ == 1) { + leftButtonData_.buttonType = StepperButtonType::NONE; + rightButtonData_.buttonType = StepperButtonType::TEXT; + rightButtonData_.buttonStatus = StepperButtonStatus::NORMAL; + rightButtonData_.text = rightLabel.empty() ? + Localization::GetInstance()->GetEntryLetters("stepper.start") : rightLabel; + } else if (totalItemCount_ > 1) { + if (currentIndex_ == 0) { + leftButtonData_.buttonType = StepperButtonType::NONE; + rightButtonData_.buttonType = StepperButtonType::TEXT_ARROW; + rightButtonData_.buttonStatus = StepperButtonStatus::NORMAL; + rightButtonData_.text = rightLabel.empty() ? + Localization::GetInstance()->GetEntryLetters("stepper.next") : rightLabel; + } else if (currentIndex_ == totalItemCount_ - 1) { + leftButtonData_.buttonType = StepperButtonType::TEXT_ARROW; + leftButtonData_.buttonStatus = StepperButtonStatus::NORMAL; + leftButtonData_.text = leftLabel.empty() ? + Localization::GetInstance()->GetEntryLetters("stepper.back") : leftLabel; + rightButtonData_.buttonType = StepperButtonType::TEXT; + rightButtonData_.text = rightLabel.empty() ? + Localization::GetInstance()->GetEntryLetters("stepper.start") : rightLabel; + rightButtonData_.buttonStatus = StepperButtonStatus::NORMAL; + } else { + leftButtonData_.buttonType = StepperButtonType::TEXT_ARROW; + leftButtonData_.buttonStatus = StepperButtonStatus::NORMAL; + leftButtonData_.text = leftLabel.empty() ? + Localization::GetInstance()->GetEntryLetters("stepper.back") : leftLabel; + rightButtonData_.buttonType = StepperButtonType::TEXT_ARROW; + rightButtonData_.buttonStatus = StepperButtonStatus::NORMAL; + rightButtonData_.text = rightLabel.empty() ? + Localization::GetInstance()->GetEntryLetters("stepper.next") : rightLabel; + } + } +} + +void RenderStepper::SetRightButtonStatus(const std::string& status, const std::string& label) +{ + UpdateRightButtonStatus(status, label); + MarkNeedLayout(); +} + +void RenderStepper::UpdateTouchRect() +{ + touchRect_.SetSize(GetLayoutSize()); + touchRect_.SetOffset(GetPosition()); +} + +void RenderStepper::PerformLayout() +{ + // layout stepper item + const auto& children = GetChildren(); + if (childrenArray_.empty()) { + childrenArray_ = std::vector>(children.begin(), children.end()); + } + if (!isAnimation_) { + LayoutParam innerLayout = GetLayoutParam(); + Size minSize = GetLayoutParam().GetMinSize(); + Size maxSize = GetLayoutParam().GetMaxSize().IsInfinite() ? viewPort_ : GetLayoutParam().GetMaxSize(); + innerLayout.SetMaxSize(Size(maxSize.Width(), maxSize.Height() - controlPanelHeight_)); + double maxWidth = minSize.Width(); + double maxHeight = minSize.Height(); + int32_t childrenSize = childrenArray_.size(); + for (int32_t i = 0; i < childrenSize; i++) { + const auto& childItem = childrenArray_[i]; + childItem->Layout(innerLayout); + maxWidth = std::max(maxWidth, childItem->GetLayoutSize().Width()); + maxHeight = std::max(maxHeight, childItem->GetLayoutSize().Height()); + } + SetLayoutSize(maxSize); + stepperWidth_ = maxWidth; + prevItemOffset_ = (needReverse_ ? maxWidth : -maxWidth); + nextItemOffset_ = (needReverse_ ? -maxWidth : maxWidth); + Offset prevItemPosition = GetMainAxisOffset(prevItemOffset_); + Offset nextItemPosition = GetMainAxisOffset(nextItemOffset_); + + for (int32_t i = 0; i < childrenSize; i++) { + const auto& childItem = childrenArray_[i]; + if (i < currentIndex_) { + childItem->SetPosition(prevItemPosition); + } else if (i == currentIndex_) { + childItem->SetPosition(Offset::Zero()); + } else { + childItem->SetPosition(nextItemPosition); + } + } + } + // layout buttons + LayoutButton(leftButtonData_); + LayoutButton(rightButtonData_); + LayoutProgress(); +} + +void RenderStepper::LayoutButton(ControlPanelData& buttonData) +{ + if (buttonData.buttonType == StepperButtonType::NONE || buttonData.buttonStatus == StepperButtonStatus::WAITING) { + buttonData.displayRender->UpdateVisibleType(VisibleType::GONE); + return; + } else { + buttonData.displayRender->UpdateVisibleType(VisibleType::VISIBLE); + } + + UpdateButton(buttonData); + auto maxSize = GetLayoutParam().GetMaxSize().IsInfinite() ? viewPort_ : GetLayoutParam().GetMaxSize(); + double maxWidth = 0.0; + if (buttonData.isLeft) { + maxWidth = maxSize.Width() / 2 - defaultPaddingStart_ - controlMargin_; + } else { + maxWidth = maxSize.Width() / 2 - defaultPaddingEnd_ - controlMargin_; + } + LayoutParam layoutParam = GetLayoutParam(); + layoutParam.SetMaxSize(Size(maxWidth, maxSize.Height())); + buttonData.displayRender->Layout(layoutParam); + + double deltaX = 0.0; + if (buttonData.isLeft) { + deltaX = defaultPaddingStart_ + controlMargin_; + } else { + deltaX = maxSize.Width() - (defaultPaddingEnd_ + controlMargin_ + + buttonData.displayRender->GetLayoutSize().Width()); + } + auto deltaY = maxSize.Height() - controlMargin_ - buttonData.displayRender->GetLayoutSize().Height(); + buttonData.displayRender->SetPosition(Offset(deltaX, deltaY)); +} + +void RenderStepper::LayoutProgress() +{ + if (renderProgress_ && rightButtonData_.buttonStatus == StepperButtonStatus::WAITING) { + renderProgress_->PerformLayout(); + Size maxSize = GetLayoutParam().GetMaxSize().IsInfinite() ? viewPort_ : GetLayoutParam().GetMaxSize(); + auto deltaX = maxSize.Width() - ( + defaultPaddingEnd_ + controlMargin_ + controlPadding_ + renderProgress_->GetLayoutSize().Width()); + auto deltaY = maxSize.Height() - ( + controlMargin_ + (buttonPressedHeight_ + renderProgress_->GetLayoutSize().Height()) / 2); + renderProgress_->SetPosition(Offset(deltaX, deltaY)); + } +} + +void RenderStepper::RegisterChangeEndListener(int32_t listenerId, const StepperChangeEndListener& listener) +{ + if (listener) { + changeEndListeners_[listenerId] = listener; + } +} + +void RenderStepper::UnRegisterChangeEndListener(int32_t listenerId) +{ + changeEndListeners_.erase(listenerId); +} + +void RenderStepper::OnStatusChanged(RenderStatus renderStatus) +{ + if (renderStatus == RenderStatus::FOCUS) { + onFocus_ = true; + } else if (renderStatus == RenderStatus::BLUR) { + onFocus_ = false; + } +} + +void RenderStepper::FireFinishEvent() const +{ + if (finishEvent_) { + std::string param = std::string("\"finish\",null"); + finishEvent_(param); + } +} + +void RenderStepper::FireSkipEvent() const +{ + if (skipEvent_) { + std::string param = std::string("\"skip\",null"); + skipEvent_(param); + } +} + +void RenderStepper::FireChangedEvent(int32_t oldIndex, int32_t newIndex) const +{ + if (changeEvent_) { + std::string param = std::string("\"change\",{\"prevIndex\":") + .append(std::to_string(oldIndex)) + .append(",\"index\":") + .append(std::to_string(newIndex)) + .append("},null"); + changeEvent_(param); + } + for (const auto& [first, second] : changeEndListeners_) { + if (second) { + second(currentIndex_); + } + } +} + +void RenderStepper::FireNextEvent(int32_t currentIndex, int32_t& pendingIndex) +{ + if (nextEvent_) { + std::string result; + std::string param = std::string("\"next\",{\"index\":") + .append(std::to_string(currentIndex)) + .append(",\"pendingIndex\":") + .append(std::to_string(pendingIndex)) + .append("},"); + nextEvent_(param, result); + if (!result.empty() && isdigit(result[0])) { + pendingIndex = StringUtils::StringToInt(result); + } + } +} + +void RenderStepper::FireBackEvent(int32_t currentIndex, int32_t& pendingIndex) +{ + if (backEvent_) { + std::string result; + std::string param = std::string("\"back\",{\"index\":") + .append(std::to_string(currentIndex)) + .append(",\"pendingIndex\":") + .append(std::to_string(pendingIndex)) + .append("},"); + backEvent_(param, result); + if (!result.empty() && isdigit(result[0])) { + pendingIndex = StringUtils::StringToInt(result); + } + } +} + +void RenderStepper::FireItemEvent(int32_t index, bool isAppear) const +{ + int32_t childrenCount = childrenArray_.size(); + if (index < 0 || index >= childrenCount) { + LOGW("index is error, index = %{public}d", index); + return; + } + const auto& item = childrenArray_[index]; + auto stepperItem = AceType::DynamicCast(item); + if (!stepperItem) { + LOGW("Get Stepper Item Is Null"); + return; + } + if (isAppear) { + stepperItem->FireAppearEvent(); + } else { + stepperItem->FireDisappearEvent(); + } +} + +int32_t RenderStepper::GetPrevIndex() const +{ + int32_t index = currentIndex_ - 1; + if (index < 0) { + index = 0; + } + return index; +} + +int32_t RenderStepper::GetNextIndex() const +{ + int32_t index = currentIndex_ + 1; + if (index >= totalItemCount_) { + index = totalItemCount_ - 1; + } + return index; +} + +void RenderStepper::StepperPrev() +{ + int32_t toIndex = GetPrevIndex(); + FireBackEvent(currentIndex_, toIndex); + StepperTo(toIndex, false); +} + +void RenderStepper::StepperNext() +{ + int32_t toIndex = GetNextIndex(); + FireNextEvent(currentIndex_, toIndex); + StepperTo(toIndex, false); +} + +void RenderStepper::StepperTo(int32_t index, bool reverse) +{ + int32_t fromIndex = currentIndex_; + if (index >= totalItemCount_) { + currentIndex_ = totalItemCount_ - 1; + } else if (index < 0) { + currentIndex_ = 0; + } else { + currentIndex_ = index; + } + if (fromIndex != currentIndex_) { + outItemIndex_ = fromIndex; + DoStepperToAnimation(outItemIndex_, currentIndex_, reverse); + } +} + +void RenderStepper::DoStepperToAnimation(int32_t fromIndex, int32_t toIndex, bool reverse) +{ + if (!stepperAnimationController_) { + return; + } + if (onFocus_) { + auto context = GetContext().Upgrade(); + if (context) { + context->CancelFocusAnimation(); + } + } + + auto weak = AceType::WeakClaim(this); + stepperAnimationController_->SetAnimationStopCallback([weak, fromIndex, toIndex]() { + auto stepper = weak.Upgrade(); + if (stepper) { + stepper->FireChangedEvent(stepper->outItemIndex_, stepper->currentIndex_); + stepper->FireItemEvent(stepper->outItemIndex_, false); + stepper->FireItemEvent(stepper->currentIndex_, true); + stepper->isAnimation_ = false; + } + }); + isAnimation_ = true; + stepperAnimationController_->PlayStepperToAnimation(fromIndex, toIndex, reverse); + UpdateButtonStatus(); + MarkNeedLayout(); +} + +void RenderStepper::UpdateItemOpacity(uint8_t opacity, int32_t index) +{ + auto child = childrenArray_[index]; + if (!child) { + return; + } + auto display = AceType::DynamicCast(child->GetFirstChild()); + if (!display) { + return; + } + display->UpdateOpacity(opacity); +} + +void RenderStepper::UpdateItemPosition(double offset, int32_t index) +{ + int32_t childrenCount = childrenArray_.size(); + if (index < 0 || index >= childrenCount) { + LOGE("index is error, index = %{public}d", index); + return; + } + const auto& childItem = childrenArray_[index]; + childItem->SetPosition(GetMainAxisOffset(offset)); + + MarkNeedRender(); +} + +void RenderStepper::OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) +{ + if (touchRecognizer_) { + touchRecognizer_->SetCoordinateOffset(coordinateOffset); + result.emplace_back(touchRecognizer_); + } + if (clickRecognizer_) { + result.emplace_back(clickRecognizer_); + } +} + +bool RenderStepper::MouseHoverTest(const Point& parentLocalPoint) +{ + auto context = context_.Upgrade(); + if (!context) { + return false; + } + bool isInRegion = GetTouchRect().IsInRegion(parentLocalPoint); + if (isInRegion) { + context->AddToHoverList(AceType::WeakClaim(this).Upgrade()); + } + const auto localPoint = parentLocalPoint - GetPosition(); + const auto& children = GetChildren(); + for (auto iter = children.rbegin(); iter != children.rend(); ++iter) { + auto& child = *iter; + child->MouseHoverTest(localPoint); + } + if (leftButtonData_.displayRender->GetPaintRect().IsInRegion(parentLocalPoint)) { + leftButtonData_.isHovered = true; + leftOldHover_ = true; + } else { + leftButtonData_.isHovered = false; + } + + if (rightButtonData_.displayRender->GetPaintRect().IsInRegion(parentLocalPoint)) { + rightButtonData_.isHovered = true; + rightOldHover_ = true; + } else { + rightButtonData_.isHovered = false; + } + + if (!leftOldHover_ && !rightOldHover_) { + return isInRegion; + } + leftOldHover_ = leftButtonData_.isHovered; + rightOldHover_ = rightButtonData_.isHovered; + + MarkNeedLayout(); + context->AddToHoverList(AceType::WeakClaim(this).Upgrade()); + return isInRegion; +} + +void RenderStepper::HandleClick(const ClickInfo& clickInfo) +{ + Point clickPoint = Point(clickInfo.GetGlobalLocation().GetX(), clickInfo.GetGlobalLocation().GetY()); + if (fingerId_ >= 0 && clickInfo.GetFingerId() != fingerId_) { + return; + } + + leftHotRect_ = leftButtonData_.displayRender->GetPaintRect() + GetGlobalOffset(); + if (leftHotRect_.IsInRegion(clickPoint)) { + StepperPrev(); + } + + rightHotRect_ = rightButtonData_.displayRender->GetPaintRect() + GetGlobalOffset(); + if (rightHotRect_.IsInRegion(clickPoint)) { + HandleRightButtonClick(); + } +} + +void RenderStepper::HandleRightButtonClick() +{ + switch (rightButtonData_.buttonStatus) { + case StepperButtonStatus::NORMAL: + if (currentIndex_ == totalItemCount_ - 1) { + FireFinishEvent(); + } else { + StepperNext(); + } + break; + case StepperButtonStatus::SKIP: + FireSkipEvent(); + break; + case StepperButtonStatus::DISABLED: + break; + case StepperButtonStatus::WAITING: + break; + default: + break; + } +} + +void RenderStepper::HandleTouchDown(const TouchEventInfo& info) +{ + if (info.GetTouches().empty()) { + return; + } + const auto& locationInfo = info.GetTouches().front(); + Point touchPoint = Point(locationInfo.GetGlobalLocation().GetX(), locationInfo.GetGlobalLocation().GetY()); + if (fingerId_ >= 0 && locationInfo.GetFingerId() != fingerId_) { + return; + } + + leftHotRect_ = leftButtonData_.displayRender->GetPaintRect() + GetGlobalOffset(); + if (leftHotRect_.IsInRegion(touchPoint)) { + fingerId_ = locationInfo.GetFingerId(); + leftButtonData_.isClicked = true; + MarkNeedLayout(); + } + + rightHotRect_ = rightButtonData_.displayRender->GetPaintRect() + GetGlobalOffset(); + if (rightHotRect_.IsInRegion(touchPoint)) { + fingerId_ = locationInfo.GetFingerId(); + rightButtonData_.isClicked = true; + MarkNeedLayout(); + } +} + +void RenderStepper::HandleTouchUp(const TouchEventInfo& info) +{ + int32_t fingerId = -1; + if (!info.GetTouches().empty()) { + fingerId = info.GetTouches().front().GetFingerId(); + } else if (!info.GetChangedTouches().empty()) { + fingerId = info.GetChangedTouches().front().GetFingerId(); + } + + if (fingerId_ >= 0 && fingerId != fingerId_) { + return; + } else { + fingerId_ = -1; + leftButtonData_.isClicked = false; + rightButtonData_.isClicked = false; + MarkNeedLayout(); + } +} + +void RenderStepper::HandleTouchMove(const TouchEventInfo& info) +{ + if (info.GetTouches().empty()) { + return; + } + const auto& locationInfo = info.GetTouches().front(); + Point touchPoint = Point(locationInfo.GetGlobalLocation().GetX(), locationInfo.GetGlobalLocation().GetY()); + if (fingerId_ >= 0 && locationInfo.GetFingerId() != fingerId_) { + return; + } + if (!leftHotRect_.IsInRegion(touchPoint)) { + leftButtonData_.isClicked = false; + MarkNeedLayout(); + } + if (!rightHotRect_.IsInRegion(touchPoint)) { + rightButtonData_.isClicked = false; + MarkNeedLayout(); + } +} + +void RenderStepper::UpdateButtonFocus(bool focus, bool isLeft) +{ + auto context = context_.Upgrade(); + if (!context) { + LOGE("pipeline is null."); + return; + } + + if ((isLeft && leftButtonData_.buttonStatus == StepperButtonStatus::DISABLED) || + (!isLeft && rightButtonData_.buttonStatus == StepperButtonStatus::DISABLED) || + (!isLeft && rightButtonData_.buttonStatus == StepperButtonStatus::WAITING)) { + context->CancelFocusAnimation(); + return; + } + + Offset offset; + Size layoutSize; + Offset globalOffset; + if (isLeft) { + offset = leftButtonData_.displayRender->GetPosition(); + layoutSize = leftButtonData_.displayRender->GetLayoutSize(); + globalOffset = leftButtonData_.displayRender->GetGlobalOffset(); + } else { + offset = rightButtonData_.displayRender->GetPosition(); + layoutSize = rightButtonData_.displayRender->GetLayoutSize(); + globalOffset = rightButtonData_.displayRender->GetGlobalOffset(); + } + if (focus) { + offset += Offset(NormalizeToPx(STEPPER_FOCUS_DEL_OFFSET), NormalizeToPx(STEPPER_FOCUS_DEL_OFFSET)); + layoutSize -= Size(NormalizeToPx(STEPPER_FOCUS_DEL_SIZE), NormalizeToPx(STEPPER_FOCUS_DEL_SIZE)); + globalOffset += Offset(NormalizeToPx(STEPPER_FOCUS_DEL_OFFSET), NormalizeToPx(STEPPER_FOCUS_DEL_OFFSET)); + Radius radius = Radius(rrectRadius_) - Radius(NormalizeToPx(STEPPER_FOCUS_RADIUS_DEL_SIZE)); + context->ShowFocusAnimation(RRect::MakeRRect(Rect(offset, layoutSize), radius), + focusColor_, globalOffset); + } else { + context->CancelFocusAnimation(); + } +} + +void RenderStepper::HandleButtonClick(bool isLeft) +{ + if (isLeft) { + StepperPrev(); + } else { + HandleRightButtonClick(); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/stepper/render_stepper.h b/frameworks/core/components/stepper/render_stepper.h new file mode 100644 index 00000000..b24fcbb1 --- /dev/null +++ b/frameworks/core/components/stepper/render_stepper.h @@ -0,0 +1,218 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STEPPER_RENDER_STEPPER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STEPPER_RENDER_STEPPER_H + +#include +#include +#include + +#include "base/memory/ace_type.h" +#include "core/animation/animation.h" +#include "core/animation/animator.h" +#include "core/animation/keyframe_animation.h" +#include "core/components/box/box_component.h" +#include "core/components/box/render_box.h" +#include "core/components/display/render_display.h" +#include "core/components/flex/flex_component.h" +#include "core/components/flex/render_flex.h" +#include "core/components/image/image_component.h" +#include "core/components/image/render_image.h" +#include "core/components/progress/render_loading_progress.h" +#include "core/components/stepper/stepper_animation_controller.h" +#include "core/components/stepper/stepper_component.h" +#include "core/components/text/render_text.h" +#include "core/components/text/text_component.h" +#include "core/gestures/click_recognizer.h" +#include "core/gestures/raw_recognizer.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +enum class StepperButtonType { + TEXT_ARROW, + TEXT, + NONE, +}; + +enum class StepperButtonStatus { + NORMAL, + DISABLED, + WAITING, + SKIP, +}; + +struct ControlPanelData { + bool isLeft = true; + bool isClicked = false; + bool isHovered = false; + std::string text; + RefPtr displayRender; + RefPtr flexRender; + RefPtr hotBoxRender; + RefPtr imageBoxRender; + RefPtr textBoxRender; + RefPtr textRender; + RefPtr textComponent; + RefPtr imageComponentLeft; + RefPtr imageComponentRight; + RefPtr imageRenderLeft; + RefPtr imageRenderRight; + RefPtr displayComponent; + RefPtr hotBoxComponent; + StepperButtonType buttonType = StepperButtonType::NONE; + StepperButtonStatus buttonStatus = StepperButtonStatus::NORMAL; +}; + +using StepperChangeEndListener = std::function; +using OnEventFunc = std::function; +using OnReturnEventFunc = std::function; + +class RenderStepper : public RenderNode { + DECLARE_ACE_TYPE(RenderStepper, RenderNode) + +public: + static RefPtr Create(); + void Update(const RefPtr& component) override; + void UpdateTouchRect() override; + void PerformLayout() override; + int32_t GetCurrentIndex() const + { + return currentIndex_; + } + void RegisterChangeEndListener(int32_t listenerId, const StepperChangeEndListener& listener); + void UnRegisterChangeEndListener(int32_t listenerId); + void OnStatusChanged(RenderStatus renderStatus) override; + void UpdateButtonFocus(bool focus, bool isLeft); + void HandleButtonClick(bool isLeft); + + // for animation + void UpdateItemOpacity(uint8_t opacity, int32_t index); + void UpdateItemPosition(double offset, int32_t index); + int32_t GetFromIndex() const + { + return outItemIndex_; + } + int32_t GetToIndex() const + { + return currentIndex_; + } + double GetStepperWidth() const + { + return stepperWidth_; + } + +protected: + void OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) override; + bool MouseHoverTest(const Point& parentLocalPoint) override; + void HandleClick(const ClickInfo& clickInfo); + void HandleTouchDown(const TouchEventInfo& info); + void HandleTouchUp(const TouchEventInfo& info); + void HandleTouchMove(const TouchEventInfo& info); + + RefPtr stepperAnimationController_; + double stepperWidth_ = 0.0; + bool leftOldHover_ = false; + bool rightOldHover_ = false; + RefPtr stepperComponent_; + std::vector> childrenArray_; + int32_t totalItemCount_ = 0; + int32_t currentIndex_ = 0; + int32_t outItemIndex_ = 0; + bool needReverse_ = false; + bool onFocus_ = false; + std::vector stepperLabels_; + std::vector textStyles_; + std::vector textColors_; + RefPtr renderProgress_; + Rect leftHotRect_; + Rect rightHotRect_; + ControlPanelData leftButtonData_; + ControlPanelData rightButtonData_; + int32_t fingerId_ = -1; + +private: + void Initialize(); + void InitAttr(); + void InitRecognizer(); + void InitProgress(RefPtr& renderProgress); + void InitButton(ControlPanelData& buttonData); + void InitHotArea(ControlPanelData& buttonData); + void UpdateButton(ControlPanelData& buttonData); + void UpdateButtonStatus(); + void UpdateRightButtonStatus(const std::string& status, const std::string& label); + void LoadDefaultButtonStatus(); + void LayoutButton(ControlPanelData& buttonData); + void LayoutProgress(); + void SetRightButtonStatus(const std::string& status, const std::string& label); + void HandleRightButtonClick(); + void FireFinishEvent() const; + void FireSkipEvent() const; + void FireChangedEvent(int32_t oldIndex, int32_t newIndex) const; + void FireNextEvent(int32_t currentIndex, int32_t& pendingIndex); + void FireBackEvent(int32_t currentIndex, int32_t& pendingIndex); + void FireItemEvent(int32_t index, bool isAppear) const; + int32_t GetPrevIndex() const; + int32_t GetNextIndex() const; + void StepperPrev(); + void StepperNext(); + void StepperTo(int32_t index, bool reverse); + void InitStepperToAnimation(int32_t fromIndex, int32_t toIndex, bool reverse); + void AddStepperToTranslateListener(int32_t fromIndex, int32_t toIndex); + void AddStepperToOpacityListener(int32_t fromIndex, int32_t toIndex); + void AddStepperToStopListener(int32_t fromIndex, int32_t toIndex); + void DoStepperToAnimation(int32_t fromIndex, int32_t toIndex, bool reverse); + Offset GetMainAxisOffset(double offset) const + { + return Offset(offset, 0); + } + + bool isAnimation_ = false; + double prevItemOffset_ = 0.0; + double nextItemOffset_ = 0.0; + std::map> changeEndListeners_; + OnEventFunc finishEvent_; + OnEventFunc skipEvent_; + OnEventFunc changeEvent_; + OnReturnEventFunc nextEvent_; + OnReturnEventFunc backEvent_; + RefPtr touchRecognizer_; + RefPtr clickRecognizer_; + // theme style + double defaultPaddingStart_ = 0.0; + double defaultPaddingEnd_ = 0.0; + Color progressColor_; + Dimension progressDiameter_; + double arrowWidth_ = 0.0; + double arrowHeight_ = 0.0; + Color arrowColor_; + Color disabledColor_; + double rrectRadius_ = 0.0; + Color buttonPressedColor_; + double buttonPressedHeight_ = 0.0; + double controlPanelHeight_ = 0.0; + double controlMargin_ = 0.0; + double controlPadding_ = 0.0; + Color focusColor_; + double focusBorderWidth_ = 0.0; + Color mouseHoverColor_; + double disabledAlpha_ = 0.4; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STEPPER_RENDER_STEPPER_H diff --git a/frameworks/core/components/stepper/render_stepper_item.cpp b/frameworks/core/components/stepper/render_stepper_item.cpp new file mode 100644 index 00000000..5bdccd80 --- /dev/null +++ b/frameworks/core/components/stepper/render_stepper_item.cpp @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/stepper/render_stepper_item.h" + +#include "core/components/stepper/stepper_item_component.h" +#include "core/event/ace_event_helper.h" + +namespace OHOS::Ace { + +void RenderStepperItem::Update(const RefPtr& component) +{ + auto stepperItem = AceType::DynamicCast(component); + if (!stepperItem) { + LOGW("stepper item component is null"); + return; + } + auto context = context_.Upgrade(); + if (!context) { + LOGE("context is null"); + return; + } + appearEvent_ = AceAsyncEvent::Create(stepperItem->GetAppearEventId(), context_); + disappearEvent_ = AceAsyncEvent::Create(stepperItem->GetDisappearEventId(), context_); + MarkNeedLayout(); +} + +void RenderStepperItem::PerformLayout() +{ + if (!GetChildren().empty()) { + auto child = GetChildren().front(); + child->Layout(GetLayoutParam()); + auto size = GetLayoutParam().Constrain(Size(child->GetLayoutSize().Width(), child->GetLayoutSize().Height())); + SetLayoutSize(size); + } +} + +void RenderStepperItem::FireAppearEvent() const +{ + if (appearEvent_) { + std::string param = std::string("\"appear\",null"); + appearEvent_(param); + } +} + +void RenderStepperItem::FireDisappearEvent() const +{ + if (disappearEvent_) { + std::string param = std::string("\"disappear\",null"); + disappearEvent_(param); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/stepper/render_stepper_item.h b/frameworks/core/components/stepper/render_stepper_item.h new file mode 100644 index 00000000..180c74dc --- /dev/null +++ b/frameworks/core/components/stepper/render_stepper_item.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STEPPER_RENDER_STEPPER_ITEM_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STEPPER_RENDER_STEPPER_ITEM_H + +#include + +#include "base/memory/ace_type.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +using OnEventFunc = std::function; + +class RenderStepperItem : public RenderNode { + DECLARE_ACE_TYPE(RenderStepperItem, RenderNode) + +public: + static RefPtr Create(); + void Update(const RefPtr& component) override; + void PerformLayout() override; + void FireAppearEvent() const; + void FireDisappearEvent() const; + +private: + OnEventFunc appearEvent_; + OnEventFunc disappearEvent_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STEPPER_RENDER_STEPPER_ITEM_H diff --git a/frameworks/core/components/stepper/stepper_animation_controller.cpp b/frameworks/core/components/stepper/stepper_animation_controller.cpp new file mode 100644 index 00000000..b299d05b --- /dev/null +++ b/frameworks/core/components/stepper/stepper_animation_controller.cpp @@ -0,0 +1,254 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/stepper/stepper_animation_controller.h" + +#include "core/components/stepper/render_stepper.h" + +namespace OHOS::Ace { +namespace { + +constexpr double MAX_OPACITY = 255.0; +constexpr double MIN_OPACITY = 0.0; +constexpr int32_t FROM_INDEX_OPACITY_DURATION = 400; +constexpr int32_t TO_INDEX_OPACITY_DURATION = 700; + +constexpr int32_t TRANSLATE_DURATION = 700; +constexpr double RATIO_NEGATIVE = -0.5; +constexpr double RATIO_ZERO = 0; +constexpr double RATIO_POSITIVE = 0.5; + +void UpdateStepperItemOpacity(const WeakPtr& weak, double value, bool isFromIndex) +{ + auto animationController = weak.Upgrade(); + if (!animationController) { + return; + } + + auto stepper = animationController->GetRenderStepper().Upgrade(); + if (!stepper) { + return; + } + + auto renderStepper = AceType::DynamicCast(stepper); + if (!renderStepper) { + return; + } + + auto curValue = (uint8_t)value; + if (isFromIndex) { + renderStepper->UpdateItemOpacity(curValue, renderStepper->GetFromIndex()); + } else { + renderStepper->UpdateItemOpacity(curValue, renderStepper->GetToIndex()); + } +} + +void UpdateStepperItemPosition(const WeakPtr& weak, double value, bool isFromIndex) +{ + auto animationController = weak.Upgrade(); + if (!animationController) { + return; + } + + auto stepper = animationController->GetRenderStepper().Upgrade(); + if (!stepper) { + return; + } + + auto renderStepper = AceType::DynamicCast(stepper); + if (!renderStepper) { + return; + } + + auto curValue = value * renderStepper->GetStepperWidth(); + if (isFromIndex) { + renderStepper->UpdateItemPosition(curValue, renderStepper->GetFromIndex()); + } else { + renderStepper->UpdateItemPosition(curValue, renderStepper->GetToIndex()); + } +} + +} // namespace + +StepperAnimation::StepperAnimation(const WeakPtr& context, double start, double end, int delay, + int duration, const RefPtr& curve, const AnimationCallback& callback) + : start_(start), end_(end), delay_(delay), duration_(duration) +{ + curve_ = curve; + callback_ = callback; + context_ = context; + animation_ = AceType::MakeRefPtr>(start_, end_, curve_); + animation_->AddListener(Animation::ValueCallback(callback_)); + controller_ = AceType::MakeRefPtr(context_); + controller_->SetDuration(duration_); + controller_->SetStartDelay(delay_); +} + +void StepperAnimation::Play() +{ + if (!controller_ || !animation_) { + return; + } + controller_->ClearInterpolators(); + controller_->AddInterpolator(animation_); + controller_->Play(); +} + +void StepperAnimation::Stop() +{ + if (controller_) { + controller_->Finish(); + } +} + +void StepperAnimationController::CreateAnimation() +{ + CreateOpacityAnimation(); + CreateTranslateAnimation(); +} + +void StepperAnimationController::CreateOpacityAnimation() +{ + auto weak = AceType::WeakClaim(this); + fromIndexOpacityAnimation_ = AceType::MakeRefPtr(context_, MAX_OPACITY, MIN_OPACITY, + 0, FROM_INDEX_OPACITY_DURATION, Curves::FRICTION, [weak](double value) { + UpdateStepperItemOpacity(weak, value, true); + }); + + toIndexOpacityAnimation_ = AceType::MakeRefPtr(context_, MIN_OPACITY, MAX_OPACITY, + 0, TO_INDEX_OPACITY_DURATION, Curves::SMOOTH, [weak](double value) { + UpdateStepperItemOpacity(weak, value, false); + }); +} + +void StepperAnimationController::CreateTranslateAnimation() +{ + auto weak = AceType::WeakClaim(this); + fromIndexTranslateAnimationNext_ = AceType::MakeRefPtr(context_, RATIO_ZERO, + RATIO_NEGATIVE, 0, TRANSLATE_DURATION, Curves::FRICTION, [weak](double value) { + UpdateStepperItemPosition(weak, value, true); + }); + + toIndexTranslateAnimationNext_ = AceType::MakeRefPtr(context_, RATIO_POSITIVE, + RATIO_ZERO, 0, TRANSLATE_DURATION, Curves::FAST_OUT_SLOW_IN, [weak](double value) { + UpdateStepperItemPosition(weak, value, false); + }); + + fromIndexTranslateAnimationBack_ = AceType::MakeRefPtr(context_, RATIO_ZERO, + RATIO_POSITIVE, 0, TRANSLATE_DURATION, Curves::FRICTION, [weak](double value) { + UpdateStepperItemPosition(weak, value, true); + }); + + toIndexTranslateAnimationBack_ = AceType::MakeRefPtr(context_, RATIO_NEGATIVE, + RATIO_ZERO, 0, TRANSLATE_DURATION, Curves::FAST_OUT_SLOW_IN, [weak](double value) { + UpdateStepperItemPosition(weak, value, false); + }); +} + +void StepperAnimationController::PlayNextAnimation() +{ + if (fromIndexOpacityAnimation_) { + fromIndexOpacityAnimation_->Play(); + } + if (toIndexOpacityAnimation_) { + toIndexOpacityAnimation_->Play(); + } + if (fromIndexTranslateAnimationNext_) { + fromIndexTranslateAnimationNext_->Play(); + } + if (toIndexTranslateAnimationNext_) { + toIndexTranslateAnimationNext_->Play(); + } +} + +void StepperAnimationController::StopNextAnimation() +{ + if (fromIndexOpacityAnimation_) { + fromIndexOpacityAnimation_->Stop(); + } + if (toIndexOpacityAnimation_) { + toIndexOpacityAnimation_->Stop(); + } + if (fromIndexTranslateAnimationNext_) { + fromIndexTranslateAnimationNext_->Stop(); + } + if (toIndexTranslateAnimationNext_) { + toIndexTranslateAnimationNext_->Stop(); + } +} + +void StepperAnimationController::PlayBackAnimation() +{ + if (fromIndexOpacityAnimation_) { + fromIndexOpacityAnimation_->Play(); + } + if (toIndexOpacityAnimation_) { + toIndexOpacityAnimation_->Play(); + } + if (fromIndexTranslateAnimationBack_) { + fromIndexTranslateAnimationBack_->Play(); + } + if (toIndexTranslateAnimationBack_) { + toIndexTranslateAnimationBack_->Play(); + } +} + +void StepperAnimationController::StopBackAnimation() +{ + if (fromIndexOpacityAnimation_) { + fromIndexOpacityAnimation_->Stop(); + } + if (toIndexOpacityAnimation_) { + toIndexOpacityAnimation_->Stop(); + } + if (fromIndexTranslateAnimationBack_) { + fromIndexTranslateAnimationBack_->Stop(); + } + if (toIndexTranslateAnimationBack_) { + toIndexTranslateAnimationBack_->Stop(); + } +} + +void StepperAnimationController::PlayStepperToAnimation(int32_t fromIndex, int32_t toIndex, bool reverse) +{ + if (!isAnimationCreated_) { + CreateAnimation(); + isAnimationCreated_ = true; + } + + StopNextAnimation(); + if (toIndexTranslateAnimationNext_) { + toIndexTranslateAnimationNext_->ClearStopListenerCallback(); + } + + StopBackAnimation(); + if (toIndexTranslateAnimationBack_) { + toIndexTranslateAnimationBack_->ClearStopListenerCallback(); + } + + if (toIndex > fromIndex) { + if (toIndexTranslateAnimationNext_ && animationStopCallback_) { + toIndexTranslateAnimationNext_->AddStopListenerCallback(animationStopCallback_); + } + PlayNextAnimation(); + } else { + if (toIndexTranslateAnimationBack_ && animationStopCallback_) { + toIndexTranslateAnimationBack_->AddStopListenerCallback(animationStopCallback_); + } + PlayBackAnimation(); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/stepper/stepper_animation_controller.h b/frameworks/core/components/stepper/stepper_animation_controller.h new file mode 100644 index 00000000..b74bf429 --- /dev/null +++ b/frameworks/core/components/stepper/stepper_animation_controller.h @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STEPPER_STEPPER_ANIMATION_CONTROLLER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STEPPER_STEPPER_ANIMATION_CONTROLLER_H + +#include "base/memory/ace_type.h" +#include "core/animation/animator.h" +#include "core/animation/curve_animation.h" +#include "core/pipeline/base/render_node.h" +#include "core/pipeline/pipeline_context.h" +namespace OHOS::Ace { + +using AnimationStopCallback = std::function; +using AnimationCallback = std::function; + +class StepperAnimation : public AceType { + DECLARE_ACE_TYPE(StepperAnimation, AceType); + +public: + StepperAnimation(const WeakPtr& context, double start, double end, int delay, + int duration, const RefPtr& curve, const AnimationCallback& callback); + ~StepperAnimation() override = default; + void Play(); + void Stop(); + + void AddStopListenerCallback(const AnimationStopCallback& callBack) + { + if (controller_) { + controller_->AddStopListener(callBack); + } + } + + void ClearStopListenerCallback() + { + if (controller_) { + controller_->ClearStopListeners(); + } + } + +private: + double start_ = 0.0; + double end_ = 0.0; + int delay_ = 0; + int duration_ = 0; + WeakPtr context_; + RefPtr curve_; + AnimationCallback callback_; + RefPtr> animation_; + RefPtr controller_; +}; + +class StepperAnimationController : public AceType { + DECLARE_ACE_TYPE(StepperAnimationController, AceType); + +public: + explicit StepperAnimationController(const WeakPtr& context) : context_(context) {} + ~StepperAnimationController() override = default; + + void SetAnimationStopCallback(const AnimationStopCallback& callback) + { + animationStopCallback_ = callback; + } + + void SetRenderStepper(const WeakPtr& node) + { + stepper_ = node; + } + + const WeakPtr& GetRenderStepper() const + { + return stepper_; + } + + void PlayStepperToAnimation(int32_t fromIndex, int32_t toIndex, bool reverse); + +private: + void CreateAnimation(); + void CreateOpacityAnimation(); + void CreateTranslateAnimation(); + void PlayNextAnimation(); + void StopNextAnimation(); + void PlayBackAnimation(); + void StopBackAnimation(); + + RefPtr fromIndexOpacityAnimation_; + RefPtr toIndexOpacityAnimation_; + RefPtr fromIndexTranslateAnimationNext_; + RefPtr toIndexTranslateAnimationNext_; + RefPtr fromIndexTranslateAnimationBack_; + RefPtr toIndexTranslateAnimationBack_; + WeakPtr context_; + WeakPtr stepper_; + bool isAnimationCreated_ = false; + AnimationStopCallback animationStopCallback_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STEPPER_STEPPER_ANIMATION_CONTROLLER_H diff --git a/frameworks/core/components/stepper/stepper_component.cpp b/frameworks/core/components/stepper/stepper_component.cpp new file mode 100644 index 00000000..3d28d678 --- /dev/null +++ b/frameworks/core/components/stepper/stepper_component.cpp @@ -0,0 +1,116 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/stepper/stepper_component.h" + +#include "core/components/stepper/render_stepper.h" +#include "core/components/stepper/stepper_element.h" + +namespace OHOS::Ace { +namespace { + +constexpr int32_t DEFAULT_NODE_INDEX = -1; + +} // namespace + +StepperComponent::StepperComponent(const std::list>& children) : ComponentGroup(children) +{ + stepperController_ = AceType::MakeRefPtr(); +} + +RefPtr StepperComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +RefPtr StepperComponent::CreateRenderNode() +{ + return RenderStepper::Create(); +} + +void StepperComponent::SetStepperLabels(const std::vector& stepperLabels) +{ + if (stepperLabels.empty()) { + LOGW("StepperLabels are empty."); + return; + } + stepperLabels_ = stepperLabels; +} + +const std::vector& StepperComponent::GetStepperLabels() const +{ + return stepperLabels_; +} + +void StepperComponent::InsertChild(int32_t position, const RefPtr& child) +{ + if (position < 0) { + LOGE("InsertChild: the position is negative"); + return; + } + auto item = StepperItemComponent::GetStepperItem(child); + if (!item) { + LOGE("InsertChild: no stepper item in child"); + return; + } + auto pos = static_cast(position); + const auto& children = GetChildren(); + if (!child || pos > children.size()) { + return; + } + if (pos == children.size()) { + AppendChild(child); + return; + } + item->SetIndex(pos); + LOGD("InsertChild: position: %{public}d, index: %{public}d", pos, item->GetIndex()); + ComponentGroup::InsertChild(position, child); + auto labelIter = stepperLabels_.begin(); + std::advance(labelIter, position); + stepperLabels_.insert(labelIter, item->GetLabel()); + auto textIter = labelsTextStyles_.begin(); + std::advance(textIter, position); + labelsTextStyles_.insert(textIter, item->GetTextStyle()); +} + +void StepperComponent::AppendChild(const RefPtr& child) +{ + auto item = StepperItemComponent::GetStepperItem(child); + if (!item) { + LOGE("AppendChild: no stepper item in child"); + return; + } + item->SetIndex(GetChildren().size()); + LOGD("AppendChild: index: %{public}d", item->GetIndex()); + ComponentGroup::AppendChild(child); + AppendLabel(item->GetLabel()); + AppendTextStyle(item->GetTextStyle()); +} + +void StepperComponent::RemoveChild(const RefPtr& child) +{ + auto item = StepperItemComponent::GetStepperItem(child); + if (!item) { + LOGE("RemoveChild: no stepper item in child"); + return; + } + // removing children will reset label and styles + stepperLabels_.clear(); + labelsTextStyles_.clear(); + item->SetIndex(DEFAULT_NODE_INDEX); + ComponentGroup::RemoveChild(child); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/stepper/stepper_component.h b/frameworks/core/components/stepper/stepper_component.h new file mode 100644 index 00000000..7fb1325d --- /dev/null +++ b/frameworks/core/components/stepper/stepper_component.h @@ -0,0 +1,354 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STEPPER_STEPPER_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STEPPER_STEPPER_COMPONENT_H + +#include "core/components/stepper/stepper_item_component.h" +#include "core/pipeline/base/component_group.h" + +namespace OHOS::Ace { + +using ChangeStatusFunc = std::function; + +class StepperController : public virtual AceType { + DECLARE_ACE_TYPE(StepperController, AceType); + +public: + void SetRightButtonStatus(const std::string& status, const std::string& label) + { + if (setRightButtonStatusImpl_) { + setRightButtonStatusImpl_(status, label); + } + } + + void SetRightButtonStatusImpl(const ChangeStatusFunc& setRightButtonStatusImpl) + { + setRightButtonStatusImpl_ = setRightButtonStatusImpl; + } + +private: + ChangeStatusFunc setRightButtonStatusImpl_; +}; + +class StepperComponent : public ComponentGroup { + DECLARE_ACE_TYPE(StepperComponent, ComponentGroup); + +public: + StepperComponent() = default; + explicit StepperComponent(const std::list>& children); + ~StepperComponent() override = default; + + RefPtr CreateElement() override; + RefPtr CreateRenderNode() override; + void SetStepperLabels(const std::vector& stepperLabels); + const std::vector& GetStepperLabels() const; + void InsertChild(int32_t position, const RefPtr& child) override; + void AppendChild(const RefPtr& child) override; + void RemoveChild(const RefPtr& child) override; + + RefPtr GetStepperController() const + { + return stepperController_; + } + + int32_t GetIndex() const + { + return index_; + } + + void SetIndex(int32_t index) + { + index_ = index; + } + + void SetFinishEventId(const EventMarker& finishEventId) + { + finishEventId_ = finishEventId; + } + + const EventMarker& GetFinishEventId() const + { + return finishEventId_; + } + + void SetSkipEventId(const EventMarker& skipEventId) + { + skipEventId_ = skipEventId; + } + + const EventMarker& GetSkipEventId() const + { + return skipEventId_; + } + + void SetChangeEventId(const EventMarker& changeEventId) + { + changeEventId_ = changeEventId; + } + + const EventMarker& GetChangeEventId() const + { + return changeEventId_; + } + + void SetNextEventId(const EventMarker& nextEventId) + { + nextEventId_ = nextEventId; + } + + const EventMarker& GetNextEventId() const + { + return nextEventId_; + } + + void SetBackEventId(const EventMarker& backEventId) + { + backEventId_ = backEventId; + } + + const EventMarker& GetBackEventId() const + { + return backEventId_; + } + + void SetDefaultPaddingStart(const Dimension& defaultPaddingStart) + { + defaultPaddingStart_ = defaultPaddingStart; + } + + const Dimension& GetDefaultPaddingStart() const + { + return defaultPaddingStart_; + } + + void SetDefaultPaddingEnd(const Dimension& defaultPaddingEnd) + { + defaultPaddingEnd_ = defaultPaddingEnd; + } + + const Dimension& GetDefaultPaddingEnd() const + { + return defaultPaddingEnd_; + } + + void SetProgressColor(const Color& progressColor) + { + progressColor_ = progressColor; + } + + const Color& GetProgressColor() const + { + return progressColor_; + } + + void SetProgressDiameter(const Dimension& progressDiameter) + { + progressDiameter_ = progressDiameter; + } + + const Dimension& GetProgressDiameter() const + { + return progressDiameter_; + } + + void SetArrowWidth(const Dimension& arrowWidth) + { + arrowWidth_ = arrowWidth; + } + + const Dimension& GetArrowWidth() const + { + return arrowWidth_; + } + + void SetArrowHeight(const Dimension& arrowHeight) + { + arrowHeight_ = arrowHeight; + } + + const Dimension& GetArrowHeight() const + { + return arrowHeight_; + } + + void SetArrowColor(const Color& arrowColor) + { + arrowColor_ = arrowColor; + } + + const Color& GetArrowColor() const + { + return arrowColor_; + } + + void SetDisabledColor(const Color& disabledColor) + { + disabledColor_ = disabledColor; + } + + const Color& GetDisabledColor() const + { + return disabledColor_; + } + + void SetRadius(const Dimension& radius) + { + radius_ = radius; + } + + const Dimension& GetRadius() const + { + return radius_; + } + + void SetButtonPressedColor(const Color& buttonPressedColor) + { + buttonPressedColor_ = buttonPressedColor; + } + + const Color& GetButtonPressedColor() const + { + return buttonPressedColor_; + } + + void SetButtonPressedHeight(const Dimension& buttonPressedHeight) + { + buttonPressedHeight_ = buttonPressedHeight; + } + + const Dimension& GetButtonPressedHeight() const + { + return buttonPressedHeight_; + } + + void SetControlHeight(const Dimension& controlHeight) + { + controlHeight_ = controlHeight; + } + + const Dimension& GetControlHeight() const + { + return controlHeight_; + } + + void SetControlMargin(const Dimension& controlMargin) + { + controlMargin_ = controlMargin; + } + + const Dimension& GetControlMargin() const + { + return controlMargin_; + } + + void SetControlPadding(const Dimension& controlPadding) + { + controlPadding_ = controlPadding; + } + + const Dimension& GetControlPadding() const + { + return controlPadding_; + } + + void SetFocusColor(const Color& focusColor) + { + focusColor_ = focusColor; + } + + const Color& GetFocusColor() const + { + return focusColor_; + } + + void SetFocusBorderWidth(const Dimension& focusBorderWidth) + { + focusBorderWidth_ = focusBorderWidth; + } + + const Dimension& GetFocusBorderWidth() const + { + return focusBorderWidth_; + } + + void SetMouseHoverColor(const Color& mouseHoverColor) + { + mouseHoverColor_ = mouseHoverColor; + } + + const Color& GetMouseHoverColor() const + { + return mouseHoverColor_; + } + + void AppendLabel(const StepperLabels& label) + { + stepperLabels_.emplace_back(label); + } + + void AppendTextStyle(const TextStyle& textStyle) + { + labelsTextStyles_.emplace_back(textStyle); + } + + const std::vector& GetLabelStyles() const + { + return labelsTextStyles_; + } + + void SetDisabledAlpha(double disabledAlpha) + { + disabledAlpha_ = disabledAlpha; + } + + double GetDisabledAlpha() const + { + return disabledAlpha_; + } + +private: + std::vector stepperLabels_; + std::vector labelsTextStyles_; + RefPtr stepperController_; + int32_t index_ = 0; + EventMarker finishEventId_; + EventMarker skipEventId_; + EventMarker changeEventId_; + EventMarker nextEventId_; + EventMarker backEventId_; + Dimension defaultPaddingStart_; + Dimension defaultPaddingEnd_; + Color progressColor_; + Dimension progressDiameter_; + Dimension arrowWidth_; + Dimension arrowHeight_; + Color arrowColor_; + Color disabledColor_; + Dimension radius_; + Color buttonPressedColor_; + Dimension buttonPressedHeight_; + Dimension controlHeight_; + Dimension controlMargin_; + Dimension controlPadding_; + Color focusColor_; + Dimension focusBorderWidth_; + Color mouseHoverColor_; + double disabledAlpha_ = 0.4; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STEPPER_STEPPER_COMPONENT_H diff --git a/frameworks/core/components/stepper/stepper_element.cpp b/frameworks/core/components/stepper/stepper_element.cpp new file mode 100644 index 00000000..2a62ae42 --- /dev/null +++ b/frameworks/core/components/stepper/stepper_element.cpp @@ -0,0 +1,252 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/stepper/stepper_element.h" + +#include "core/components/stepper/render_stepper.h" +#include "core/components/stepper/stepper_component.h" + +namespace OHOS::Ace { +namespace { + +constexpr int32_t ELEMENT_CHANGE_END_LISTENER_KEY = 1002; +constexpr int32_t RIGHT_BUTTON_INDEX = 1; +constexpr int32_t DEFAULT_BUTTON_NUM = 2; + +} + +void StepperElement::PerformBuild() +{ + if (!leftFocusNode_ && !rightFocusNode_) { + leftFocusNode_ = AceType::MakeRefPtr(); + FocusGroup::AddChild(leftFocusNode_); + rightFocusNode_ = AceType::MakeRefPtr(); + FocusGroup::AddChild(rightFocusNode_); + registerCallBack(); + } + ComponentGroupElement::PerformBuild(); +} + +void StepperElement::registerCallBack() +{ + leftFocusNode_->SetOnClickCallback([weak = WeakClaim(this)](void) { + auto client = weak.Upgrade(); + if (client) { + client->HandleOnButtonClick(true); + } + }); + + rightFocusNode_->SetOnClickCallback([weak = WeakClaim(this)](void) { + auto client = weak.Upgrade(); + if (client) { + client->HandleOnButtonClick(false); + } + }); + + leftFocusNode_->SetOnFocusCallback([weak = WeakClaim(this)](void) { + auto client = weak.Upgrade(); + if (client) { + client->HandleOnButtonFocus(true, true); + } + }); + + rightFocusNode_->SetOnFocusCallback([weak = WeakClaim(this)](void) { + auto client = weak.Upgrade(); + if (client) { + client->HandleOnButtonFocus(true, false); + } + }); + + leftFocusNode_->SetOnBlurCallback([weak = WeakClaim(this)](void) { + auto client = weak.Upgrade(); + if (client) { + client->HandleOnButtonFocus(false, true); + } + }); + + rightFocusNode_->SetOnBlurCallback([weak = WeakClaim(this)](void) { + auto client = weak.Upgrade(); + if (client) { + client->HandleOnButtonFocus(false, false); + } + }); +} + +RefPtr StepperElement::CreateRenderNode() +{ + return ComponentGroupElement::CreateRenderNode(); +} + +void StepperElement::OnFocus() +{ + auto stepper = DynamicCast(renderNode_); + if (!stepper) { + LOGE("get render node failed"); + itLastFocusNode_ = focusNodes_.end(); + return; + } + stepper->OnStatusChanged(RenderStatus::FOCUS); + + auto currentFocusNode = focusNodes_.begin(); + std::advance(currentFocusNode, RIGHT_BUTTON_INDEX); + if ((*currentFocusNode)->RequestFocusImmediately()) { + itLastFocusNode_ = currentFocusNode; + rightFocusNode_ = *itLastFocusNode_; + } + stepper->RegisterChangeEndListener( + ELEMENT_CHANGE_END_LISTENER_KEY, [this](int32_t index) { RequestChildFocus(index); }); +} + +void StepperElement::RequestChildFocus(int32_t index) +{ + auto currentFocusNode = focusNodes_.begin(); + std::advance(currentFocusNode, index + DEFAULT_BUTTON_NUM); + if (currentFocusNode != focusNodes_.end()) { + if ((*currentFocusNode)->RequestFocusImmediately()) { + itLastFocusNode_ = currentFocusNode; + } + } +} + +void StepperElement::OnBlur() +{ + FocusGroup::OnBlur(); + auto stepper = DynamicCast(renderNode_); + if (stepper) { + stepper->UnRegisterChangeEndListener(ELEMENT_CHANGE_END_LISTENER_KEY); + stepper->OnStatusChanged(RenderStatus::BLUR); + } +} + +void StepperElement::HandleOnButtonClick(bool isLeft) +{ + auto stepper = DynamicCast(renderNode_); + if (!stepper) { + LOGE("get stepper render node failed"); + return; + } + stepper->HandleButtonClick(isLeft); +} + +void StepperElement::HandleOnButtonFocus(bool focus, bool isLeft) +{ + auto stepper = DynamicCast(renderNode_); + if (!stepper) { + LOGE("get stepper render node failed"); + return; + } + stepper->UpdateButtonFocus(focus, isLeft); +} + +bool StepperElement::RequestNextFocus(bool vertical, bool reverse, const Rect& rect) +{ + if (*itLastFocusNode_ == leftFocusNode_) { + if (reverse) { + return RequestCurrentItemFocus(); + } else { + return RequestRightButtonFocus(); + } + } else if (*itLastFocusNode_ == rightFocusNode_) { + if (vertical && reverse) { + return RequestCurrentItemFocus(); + } + if (!vertical && reverse) { + return RequestLeftButtonFocus(); + } + } else { + if (vertical && !reverse) { + return RequestLeftButtonFocus(); + } + } + return false; +} + +bool StepperElement::RequestLeftButtonFocus() +{ + auto currentFocusNode = focusNodes_.begin(); + if ((*currentFocusNode)->RequestFocusImmediately()) { + itLastFocusNode_ = currentFocusNode; + leftFocusNode_ = *itLastFocusNode_; + return true; + } + return false; +} + +bool StepperElement::RequestRightButtonFocus() +{ + auto currentFocusNode = focusNodes_.begin(); + std::advance(currentFocusNode, 1); + if ((*currentFocusNode)->RequestFocusImmediately()) { + itLastFocusNode_ = currentFocusNode; + rightFocusNode_ = *itLastFocusNode_; + return true; + } + return false; +} + +bool StepperElement::RequestCurrentItemFocus() +{ + auto stepper = DynamicCast(renderNode_); + if (!stepper) { + LOGE("get stepper render node failed"); + return false; + } + int32_t currentIndex = stepper->GetCurrentIndex(); + auto currentFocusNode = focusNodes_.begin(); + std::advance(currentFocusNode, currentIndex + DEFAULT_BUTTON_NUM); + if (currentFocusNode != focusNodes_.end()) { + if ((*currentFocusNode)->RequestFocusImmediately()) { + itLastFocusNode_ = currentFocusNode; + return true; + } + } + return false; +} + +bool StepperElement::OnKeyEvent(const KeyEvent& keyEvent) +{ + if (!IsCurrentFocus()) { + return false; + } + + if (itLastFocusNode_ != focusNodes_.end() && (*itLastFocusNode_)->HandleKeyEvent(keyEvent)) { + return true; + } + + if (FocusNode::OnKeyEvent(keyEvent)) { + return true; + } + + if (keyEvent.action != KeyAction::UP) { + return false; + } + + switch (keyEvent.code) { + case KeyCode::TV_CONTROL_UP: + return RequestNextFocus(true, true, GetRect()); + case KeyCode::TV_CONTROL_DOWN: + return RequestNextFocus(true, false, GetRect()); + case KeyCode::TV_CONTROL_LEFT: + return RequestNextFocus(false, true, GetRect()); + case KeyCode::TV_CONTROL_RIGHT: + return RequestNextFocus(false, false, GetRect()); + case KeyCode::KEYBOARD_TAB: + return RequestNextFocus(false, false, GetRect()) || RequestNextFocus(true, false, GetRect()); + default: + return false; + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/stepper/stepper_element.h b/frameworks/core/components/stepper/stepper_element.h new file mode 100644 index 00000000..f7565fa7 --- /dev/null +++ b/frameworks/core/components/stepper/stepper_element.h @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STEPPER_STEPPER_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STEPPER_STEPPER_ELEMENT_H + +#include "core/focus/focus_node.h" +#include "core/pipeline/base/component_group_element.h" +#include "core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +class StepperElement : public ComponentGroupElement, public FocusGroup { + DECLARE_ACE_TYPE(StepperElement, ComponentGroupElement, FocusGroup); + +public: + void PerformBuild() override; + +protected: + void OnFocus() override; + void OnBlur() override; + bool RequestNextFocus(bool vertical, bool reverse, const Rect& rect) override; + bool OnKeyEvent(const KeyEvent& keyEvent) override; + +private: + RefPtr CreateRenderNode() override; + void registerCallBack(); + void RequestChildFocus(int32_t index); + void HandleOnButtonClick(bool isLeft); + void HandleOnButtonFocus(bool focus, bool isLeft); + bool RequestLeftButtonFocus(); + bool RequestRightButtonFocus(); + bool RequestCurrentItemFocus(); + + RefPtr leftFocusNode_; + RefPtr rightFocusNode_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STEPPER_STEPPER_ELEMENT_H diff --git a/frameworks/core/components/stepper/stepper_item_component.cpp b/frameworks/core/components/stepper/stepper_item_component.cpp new file mode 100644 index 00000000..3a67305e --- /dev/null +++ b/frameworks/core/components/stepper/stepper_item_component.cpp @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/stepper/stepper_item_component.h" + +#include "core/components/stepper/render_stepper_item.h" +#include "core/components/stepper/stepper_item_element.h" + +namespace OHOS::Ace { + +RefPtr StepperItemComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +RefPtr StepperItemComponent::CreateRenderNode() +{ + return RenderStepperItem::Create(); +} + +RefPtr StepperItemComponent::GetStepperItem(const RefPtr& component) +{ + // find stepperItem from composed component + RefPtr item = component; + while (item) { + auto itemComponent = AceType::DynamicCast(item); + if (itemComponent) { + return itemComponent; + } + auto parent = AceType::DynamicCast(item); + if (!parent) { + return nullptr; + } + item = parent->GetChild(); + } + return nullptr; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/stepper/stepper_item_component.h b/frameworks/core/components/stepper/stepper_item_component.h new file mode 100644 index 00000000..9fe8feac --- /dev/null +++ b/frameworks/core/components/stepper/stepper_item_component.h @@ -0,0 +1,114 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STEPPER_STEPPER_ITEM_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STEPPER_STEPPER_ITEM_COMPONENT_H + +#include "core/pipeline/base/constants.h" +#include "core/pipeline/base/element.h" +#include "core/pipeline/base/render_node.h" +#include "core/pipeline/base/sole_child_component.h" + +namespace OHOS::Ace { + +struct StepperLabels { + std::string leftLabel; + std::string rightLabel; + std::string initialStatus; +}; + +class StepperItemComponent : public SoleChildComponent { + DECLARE_ACE_TYPE(StepperItemComponent, SoleChildComponent); + +public: + explicit StepperItemComponent(const RefPtr& child) : SoleChildComponent(child) {} + ~StepperItemComponent() override = default; + static RefPtr GetStepperItem(const RefPtr& component); + + RefPtr CreateElement() override; + RefPtr CreateRenderNode() override; + + void SetIndex(int32_t index) + { + index_ = index; + } + + int32_t GetIndex() const + { + return index_; + } + + void SetFocusAnimationColor(const Color& color) + { + focusAnimationColor_ = color; + } + + const Color& GetFocusAnimationColor() const + { + return focusAnimationColor_; + } + + void SetAppearEventId(const EventMarker& appearEventId) + { + appearEventId_ = appearEventId; + } + + const EventMarker& GetAppearEventId() const + { + return appearEventId_; + } + + void SetDisappearEventId(const EventMarker& disappearEventId) + { + disappearEventId_ = disappearEventId; + } + + const EventMarker& GetDisappearEventId() const + { + return disappearEventId_; + } + + void SetTextStyle(const TextStyle& textStyle) + { + textStyle_ = textStyle; + } + + const TextStyle& GetTextStyle() const + { + return textStyle_; + } + + void SetLabel(const StepperLabels& label) + { + label_ = label; + } + + const StepperLabels& GetLabel() const + { + return label_; + } + +private: + int32_t index_ = -1; + TextStyle textStyle_; + StepperLabels label_; + Color focusAnimationColor_ = Color::WHITE; + EventMarker appearEventId_; + EventMarker disappearEventId_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STEPPER_STEPPER_ITEM_COMPONENT_H diff --git a/frameworks/core/components/stepper/stepper_item_element.cpp b/frameworks/core/components/stepper/stepper_item_element.cpp new file mode 100644 index 00000000..93f07f08 --- /dev/null +++ b/frameworks/core/components/stepper/stepper_item_element.cpp @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/stepper/stepper_item_element.h" + +#include "core/components/stepper/render_stepper_item.h" +#include "core/components/stepper/stepper_item_component.h" + +namespace OHOS::Ace { + +RefPtr StepperItemElement::CreateRenderNode() +{ + return SoleChildElement::CreateRenderNode(); +} + +void StepperItemElement::Update() +{ + auto item = AceType::DynamicCast(component_); + if (item) { + SoleChildElement::Update(); + } +} + +void StepperItemElement::PerformBuild() +{ + RefPtr component = AceType::DynamicCast(component_); + if (component) { + const auto& child = children_.empty() ? nullptr : children_.front(); + UpdateChild(child, component->GetChild()); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/stepper/stepper_item_element.h b/frameworks/core/components/stepper/stepper_item_element.h new file mode 100644 index 00000000..eaec1325 --- /dev/null +++ b/frameworks/core/components/stepper/stepper_item_element.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STEPPER_STEPPER_ITEM_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STEPPER_STEPPER_ITEM_ELEMENT_H + +#include "core/pipeline/base/render_element.h" +#include "core/pipeline/base/sole_child_element.h" + +namespace OHOS::Ace { + +class StepperItemElement : public SoleChildElement, public FocusGroup { + DECLARE_ACE_TYPE(StepperItemElement, SoleChildElement, FocusGroup); + +protected: + bool RequestNextFocus(bool vertical, bool reverse, const Rect& rect) override + { + return false; + } + +private: + RefPtr CreateRenderNode() override; + void Update() override; + void PerformBuild() override; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STEPPER_STEPPER_ITEM_ELEMENT_H diff --git a/frameworks/core/components/stepper/stepper_theme.h b/frameworks/core/components/stepper/stepper_theme.h new file mode 100644 index 00000000..ee4d14c8 --- /dev/null +++ b/frameworks/core/components/stepper/stepper_theme.h @@ -0,0 +1,228 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STEPPER_STEPPER_THEME_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STEPPER_STEPPER_THEME_H + +#include "core/components/common/properties/color.h" +#include "core/components/common/properties/text_style.h" +#include "core/components/theme/theme.h" +#include "core/components/theme/theme_constants.h" +#include "core/components/theme/theme_manager.h" + +namespace OHOS::Ace { + +/** + * StepperTheme defines color and styles of StepperComponent. StepperTheme should be built + * using StepperTheme::Builder. + */ +class StepperTheme : public virtual Theme { + DECLARE_ACE_TYPE(StepperTheme, Theme); + +public: + class Builder { + public: + Builder() = default; + ~Builder() = default; + + RefPtr Build(const RefPtr& themeConstants) const + { + RefPtr theme = AceType::Claim(new StepperTheme()); + if (!themeConstants) { + return theme; + } + theme->textStyle_.SetTextColor(themeConstants->GetColor(THEME_STEPPER_TEXT_COLOR)); + theme->textStyle_.SetFontSize(themeConstants->GetDimension(THEME_STEPPER_TEXT_FONTSIZE)); + theme->textStyle_.SetFontWeight(FontWeight(themeConstants->GetInt(THEME_STEPPER_TEXT_FONTWEIGHT))); + theme->textStyle_.SetFontStyle(FontStyle::NORMAL); + theme->textStyle_.SetTextDecoration(TextDecoration::NONE); + std::vector families; + families.emplace_back("sans-serif"); + theme->textStyle_.SetFontFamilies(families); + theme->minFontSize_ = themeConstants->GetDimension(THEME_STEPPER_TEXT_FONTSIZE_MIN); + auto maxlines = themeConstants->GetInt(THEME_STEPPER_TEXT_MAX_LINES); + theme->textMaxLines_ = maxlines < 0 ? theme->textMaxLines_ : maxlines; + theme->defaultPaddingStart_ = themeConstants->GetDimension(THEME_STEPPER_DEFAULT_PADDING_START); + theme->defaultPaddingEnd_ = themeConstants->GetDimension(THEME_STEPPER_DEFAULT_PADDING_END); + theme->progressColor_ = themeConstants->GetColor(THEME_STEPPER_PROGRESS_COLOR); + theme->progressDiameter_ = themeConstants->GetDimension(THEME_STEPPER_PROGRESS_DIAMETER); + theme->arrowWidth_ = themeConstants->GetDimension(THEME_STEPPER_ARROW_WIDTH_DIAMETER); + theme->arrowHeight_ = themeConstants->GetDimension(THEME_STEPPER_ARROW_HEIGHT_DIAMETER); + theme->arrowColor_ = themeConstants->GetColor(THEME_STEPPER_ARROW_COLOR); + theme->disabledColor_ = themeConstants->GetColor(THEME_STEPPER_DISABLED_COLOR); + theme->radius_ = themeConstants->GetDimension(THEME_STEPPER_RADIUS); + theme->buttonPressedColor_ = themeConstants->GetColor(THEME_STEPPER_BUTTON_PRESSED_COLOR); + theme->buttonPressedHeight_ = themeConstants->GetDimension(THEME_STEPPER_BUTTON_PRESSED_HEIGHT); + theme->controlHeight_ = themeConstants->GetDimension(THEME_STEPPER_CONTROL_HEIGHT); + theme->controlMargin_ = themeConstants->GetDimension(THEME_STEPPER_CONTROL_MARGIN); + theme->controlPadding_ = themeConstants->GetDimension(THEME_STEPPER_CONTROL_PADDING); + theme->focusColor_ = themeConstants->GetColor(THEME_STEPPER_FOCUS_COLOR); + theme->focusBorderWidth_ = themeConstants->GetDimension(THEME_STEPPER_FOCUS_BORDER_WIDTH); + theme->mouseHoverColor_ = themeConstants->GetColor(THEME_STEPPER_MOUSE_HOVER_COLOR); + theme->disabledAlpha_ = themeConstants->GetDouble(THEME_STEPPER_DISABLED_ALPHA); + auto themeStyle = themeConstants->GetThemeStyle(); + if (themeStyle) { + theme->textStyle_.SetTextColor(themeStyle->GetAttr(THEME_ATTR_TEXT_COLOR_PRIMARY, Color::RED)); + theme->radius_ = themeStyle->GetAttr(THEME_ATTR_CLICK_CORNER_RADIUS, 0.0_vp); + theme->buttonPressedColor_ = themeStyle->GetAttr(THEME_ATTR_COLOR_CLICK_EFFECT, Color::RED); + theme->mouseHoverColor_ = themeStyle->GetAttr(THEME_ATTR_COLOR_HOVER, Color::RED); + theme->defaultPaddingStart_ = themeStyle->GetAttr(THEME_ATTR_DEFAULT_PADDING_START, 0.0_vp); + theme->defaultPaddingEnd_ = themeStyle->GetAttr(THEME_ATTR_DEFAULT_PADDING_END, 0.0_vp); + theme->arrowColor_ = themeStyle->GetAttr(THEME_ATTR_COLOR_PRIMARY, Color::RED); + theme->progressColor_ = themeStyle->GetAttr(THEME_ATTR_COLOR_PROGRESS, Color::RED); + theme->disabledColor_ = themeStyle->GetAttr(THEME_ATTR_TEXT_COLOR_PRIMARY, Color::RED); + theme->disabledAlpha_ = themeStyle->GetAttr(THEME_ATTR_DISABLED_ALPHA, 0.0); + } + return theme; + } + }; + + ~StepperTheme() override = default; + + const TextStyle& GetTextStyle() const + { + return textStyle_; + } + + const Dimension& GetMinFontSize() const + { + return minFontSize_; + } + + uint32_t GetTextMaxLines() const + { + return textMaxLines_; + } + + const Dimension& GetDefaultPaddingStart() const + { + return defaultPaddingStart_; + } + + const Dimension& GetDefaultPaddingEnd() const + { + return defaultPaddingEnd_; + } + + const Color& GetProgressColor() const + { + return progressColor_; + } + + const Dimension& GetProgressDiameter() const + { + return progressDiameter_; + } + + const Dimension& GetArrowWidth() const + { + return arrowWidth_; + } + + const Dimension& GetArrowHeight() const + { + return arrowHeight_; + } + + const Color& GetArrowColor() const + { + return arrowColor_; + } + + const Color& GetDisabledColor() const + { + return disabledColor_; + } + + const Dimension& GetRadius() const + { + return radius_; + } + + const Color& GetButtonPressedColor() const + { + return buttonPressedColor_; + } + + const Dimension& GetButtonPressedHeight() const + { + return buttonPressedHeight_; + } + + const Dimension& GetControlHeight() const + { + return controlHeight_; + } + + const Dimension& GetControlMargin() const + { + return controlMargin_; + } + + const Dimension& GetControlPadding() const + { + return controlPadding_; + } + + const Color& GetFocusColor() const + { + return focusColor_; + } + + const Dimension& GetFocusBorderWidth() const + { + return focusBorderWidth_; + } + + const Color& GetMouseHoverColor() const + { + return mouseHoverColor_; + } + + double GetDisabledAlpha() const + { + return disabledAlpha_; + } + +protected: + StepperTheme() = default; + +private: + TextStyle textStyle_; + Dimension minFontSize_; + uint32_t textMaxLines_ = 1; + Dimension defaultPaddingStart_; + Dimension defaultPaddingEnd_; + Color progressColor_; + Dimension progressDiameter_; + Dimension arrowWidth_; + Dimension arrowHeight_; + Color arrowColor_; + Color disabledColor_; + Dimension radius_; + Color buttonPressedColor_; + Dimension buttonPressedHeight_; + Dimension controlHeight_; + Dimension controlMargin_; + Dimension controlPadding_; + Color focusColor_; + Dimension focusBorderWidth_; + Color mouseHoverColor_; + double disabledAlpha_ = 0.4; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_STEPPER_STEPPER_THEME_H diff --git a/frameworks/core/components/svg/BUILD.gn b/frameworks/core/components/svg/BUILD.gn new file mode 100644 index 00000000..7e43904f --- /dev/null +++ b/frameworks/core/components/svg/BUILD.gn @@ -0,0 +1,52 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("svg") { + sources = [ + "flutter_render_svg.cpp", + "flutter_render_svg_circle.cpp", + "flutter_render_svg_ellipse.cpp", + "flutter_render_svg_line.cpp", + "flutter_render_svg_path.cpp", + "flutter_render_svg_polygon.cpp", + "flutter_render_svg_polyline.cpp", + "flutter_render_svg_rect.cpp", + "flutter_render_svg_text.cpp", + "flutter_render_svg_text_path.cpp", + "flutter_render_svg_tspan.cpp", + "render_svg.cpp", + "render_svg_base.cpp", + "render_svg_circle.cpp", + "render_svg_ellipse.cpp", + "render_svg_line.cpp", + "render_svg_path.cpp", + "render_svg_polygon.cpp", + "render_svg_polyline.cpp", + "render_svg_rect.cpp", + "render_svg_text.cpp", + "render_svg_text_path.cpp", + "svg_circle_component.cpp", + "svg_component.cpp", + "svg_ellipse_component.cpp", + "svg_line_component.cpp", + "svg_path_component.cpp", + "svg_polygon_component.cpp", + "svg_polyline_component.cpp", + "svg_rect_component.cpp", + "svg_text_component.cpp", + "svg_text_path_component.cpp", + "svg_tspan_component.cpp", + ] +} diff --git a/frameworks/core/components/svg/flutter_render_svg.cpp b/frameworks/core/components/svg/flutter_render_svg.cpp new file mode 100644 index 00000000..778bf9f2 --- /dev/null +++ b/frameworks/core/components/svg/flutter_render_svg.cpp @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/core/components/svg/flutter_render_svg.h" + +#include "frameworks/core/components/transform/flutter_render_transform.h" +#include "frameworks/core/pipeline/base/flutter_render_context.h" + +namespace OHOS::Ace { + +using namespace Flutter; + +RefPtr RenderSvg::Create() +{ + return AceType::MakeRefPtr(); +} + +RenderLayer FlutterRenderSvg::GetRenderLayer() +{ + if (!transformLayer_) { + transformLayer_ = AceType::MakeRefPtr(Matrix4::CreateIdentity(), 0.0, 0.0); + } + return AceType::RawPtr(transformLayer_); +} + +void FlutterRenderSvg::Paint(RenderContext& context, const Offset& offset) +{ + if (GreatNotEqual(viewBox_.Width(), 0.0) && GreatNotEqual(viewBox_.Height(), 0.0)) { + double scale = std::min(GetLayoutSize().Width() / viewBox_.Width(), + GetLayoutSize().Height() / viewBox_.Height()); + double tx = (GetLayoutSize().Width() - (viewBox_.Width() + viewBox_.Left()) * scale) * 0.5; + double ty = (GetLayoutSize().Height() - (viewBox_.Height() + viewBox_.Top()) * scale) * 0.5; + auto transform = Matrix4::CreateScale(scale, scale, 1.0f); + transform = FlutterRenderTransform::GetTransformByOffset(transform, GetGlobalOffset()); + transform = Matrix4::CreateTranslate(tx, ty, 0.0f) * transform; + transformLayer_->Update(transform); + } + RenderNode::Paint(context, offset); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/svg/flutter_render_svg.h b/frameworks/core/components/svg/flutter_render_svg.h new file mode 100644 index 00000000..fe79ef79 --- /dev/null +++ b/frameworks/core/components/svg/flutter_render_svg.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_FLUTTER_RENDER_SVG_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_FLUTTER_RENDER_SVG_H + +#include "frameworks/core/components/svg/render_svg.h" +#include "frameworks/core/pipeline/layers/clip_layer.h" +#include "frameworks/core/pipeline/layers/transform_layer.h" + +namespace OHOS::Ace { + +class FlutterRenderSvg : public RenderSvg { + DECLARE_ACE_TYPE(FlutterRenderSvg, RenderSvg); + +public: + RenderLayer GetRenderLayer() override; + void Paint(RenderContext& context, const Offset& offset) override; + + bool IsRepaintBoundary() const override + { + return true; + } + +private: + RefPtr layer_; + RefPtr transformLayer_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_FLUTTER_RENDER_SVG_H diff --git a/frameworks/core/components/svg/flutter_render_svg_circle.cpp b/frameworks/core/components/svg/flutter_render_svg_circle.cpp new file mode 100644 index 00000000..1c36ea1d --- /dev/null +++ b/frameworks/core/components/svg/flutter_render_svg_circle.cpp @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/core/components/svg/flutter_render_svg_circle.h" + +#include "frameworks/core/components/common/painter/flutter_svg_painter.h" +#include "frameworks/core/components/transform/flutter_render_transform.h" +#include "frameworks/core/pipeline/base/flutter_render_context.h" + +namespace OHOS::Ace { + +using namespace Flutter; + +RefPtr RenderSvgCircle::Create() +{ + return AceType::MakeRefPtr(); +} + +RenderLayer FlutterRenderSvgCircle::GetRenderLayer() +{ + if (!transformLayer_) { + transformLayer_ = AceType::MakeRefPtr(Matrix4::CreateIdentity(), 0.0, 0.0); + } + return AceType::RawPtr(transformLayer_); +} + +void FlutterRenderSvgCircle::Paint(RenderContext& context, const Offset& offset) +{ + const auto renderContext = static_cast(&context); + flutter::Canvas* canvas = renderContext->GetCanvas(); + if (!canvas) { + LOGE("Paint canvas is null"); + return; + } + SkCanvas* skCanvas = canvas->canvas(); + if (!skCanvas) { + LOGE("Paint skCanvas is null"); + return; + } + SkPath path; + double lineWidth = NormalizeToPx(strokeState_.GetLineWidth()); + path.addCircle(ConvertDimensionToPx(cx_, GetLayoutSize().Width()), + ConvertDimensionToPx(cy_, GetLayoutSize().Width()), + ConvertDimensionToPx(r_, GetLayoutSize().Height()) - lineWidth); + FlutterSvgPainter::SetFillStyle(skCanvas, path, fillState_, opacity_); + path.reset(); + path.addCircle(ConvertDimensionToPx(cx_, GetLayoutSize().Width()), + ConvertDimensionToPx(cy_, GetLayoutSize().Width()), + ConvertDimensionToPx(r_, GetLayoutSize().Height()) - lineWidth * SK_ScalarHalf); + FlutterSvgPainter::SetStrokeStyle(skCanvas, path, strokeState_, opacity_); + RenderNode::Paint(context, offset); +} + +void FlutterRenderSvgCircle::UpdateMotion(const std::string& path, const std::string& rotate, + double percent, const Point& point) +{ + if (!transformLayer_) { + LOGE("transformLayer is null"); + return; + } + bool isSuccess = true; + auto motionMatrix = FlutterSvgPainter::CreateMotionMatrix(path, rotate, point, percent, isSuccess); + if (isSuccess) { + auto transform = FlutterRenderTransform::GetTransformByOffset(motionMatrix, GetGlobalOffset()); + transformLayer_->Update(transform); + } +} + +bool FlutterRenderSvgCircle::GetStartPoint(Point& point) +{ + double width = GetLayoutSize().Width(); + double height = GetLayoutSize().Height(); + point = Point(ConvertDimensionToPx(cx_, width), ConvertDimensionToPx(cy_, height)); + return true; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/svg/flutter_render_svg_circle.h b/frameworks/core/components/svg/flutter_render_svg_circle.h new file mode 100644 index 00000000..cf0838cb --- /dev/null +++ b/frameworks/core/components/svg/flutter_render_svg_circle.h @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_FLUTTER_RENDER_SVG_CIRCLE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_FLUTTER_RENDER_SVG_CIRCLE_H + +#include "frameworks/core/components/svg/render_svg_circle.h" +#include "frameworks/core/pipeline/layers/transform_layer.h" + +namespace OHOS::Ace { + +class FlutterRenderSvgCircle : public RenderSvgCircle { + DECLARE_ACE_TYPE(FlutterRenderSvgCircle, RenderSvgCircle); + +public: + RenderLayer GetRenderLayer() override; + void Paint(RenderContext& context, const Offset& offset) override; + + bool IsRepaintBoundary() const override + { + return true; + } + + bool HasEffectiveTransform() const override + { + if (!transformLayer_) { + return false; + } + return !transformLayer_->GetMatrix4().IsIdentityMatrix(); + } + + void UpdateMotion(const std::string& path, const std::string& rotate, double percent, const Point& point) override; + bool GetStartPoint(Point& point) override; + +private: + RefPtr transformLayer_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_FLUTTER_RENDER_SVG_CIRCLE_H diff --git a/frameworks/core/components/svg/flutter_render_svg_ellipse.cpp b/frameworks/core/components/svg/flutter_render_svg_ellipse.cpp new file mode 100644 index 00000000..262a2759 --- /dev/null +++ b/frameworks/core/components/svg/flutter_render_svg_ellipse.cpp @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/core/components/svg/flutter_render_svg_ellipse.h" + +#include "frameworks/core/components/common/painter/flutter_svg_painter.h" +#include "frameworks/core/components/transform/flutter_render_transform.h" +#include "frameworks/core/pipeline/base/flutter_render_context.h" + +namespace OHOS::Ace { + +using namespace Flutter; + +RefPtr RenderSvgEllipse::Create() +{ + return AceType::MakeRefPtr(); +} + +RenderLayer FlutterRenderSvgEllipse::GetRenderLayer() +{ + if (!transformLayer_) { + transformLayer_ = AceType::MakeRefPtr(Matrix4::CreateIdentity(), 0.0, 0.0); + } + return AceType::RawPtr(transformLayer_); +} + +void FlutterRenderSvgEllipse::Paint(RenderContext& context, const Offset& offset) +{ + const auto renderContext = static_cast(&context); + flutter::Canvas* canvas = renderContext->GetCanvas(); + if (!canvas) { + LOGE("Paint canvas is null"); + return; + } + SkCanvas* skCanvas = canvas->canvas(); + if (!skCanvas) { + LOGE("Paint skCanvas is null"); + return; + } + + SkPath path; + double width = GetLayoutSize().Width(); + double height = GetLayoutSize().Height(); + double rx = ConvertDimensionToPx(rx_, width); + double ry = ConvertDimensionToPx(ry_, height); + SkRect rect = SkRect::MakeXYWH(ConvertDimensionToPx(cx_, width) - rx, ConvertDimensionToPx(cy_, height) - ry, + rx + rx, ry + ry); + path.addOval(rect); + FlutterSvgPainter::SetFillStyle(skCanvas, path, fillState_, opacity_); + FlutterSvgPainter::SetStrokeStyle(skCanvas, path, strokeState_, opacity_); + RenderNode::Paint(context, offset); +} + +void FlutterRenderSvgEllipse::UpdateMotion(const std::string& path, const std::string& rotate, + double percent, const Point& point) +{ + if (!transformLayer_) { + LOGE("transformLayer is null"); + return; + } + bool isSuccess = true; + auto motionMatrix = FlutterSvgPainter::CreateMotionMatrix(path, rotate, point, percent, isSuccess); + if (isSuccess) { + auto transform = FlutterRenderTransform::GetTransformByOffset(motionMatrix, GetGlobalOffset()); + transformLayer_->Update(transform); + } +} + +bool FlutterRenderSvgEllipse::GetStartPoint(Point& point) +{ + double width = GetLayoutSize().Width(); + double height = GetLayoutSize().Height(); + point = Point(ConvertDimensionToPx(cx_, width), ConvertDimensionToPx(cy_, height)); + return true; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/svg/flutter_render_svg_ellipse.h b/frameworks/core/components/svg/flutter_render_svg_ellipse.h new file mode 100644 index 00000000..a0fb2e97 --- /dev/null +++ b/frameworks/core/components/svg/flutter_render_svg_ellipse.h @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_FLUTTER_RENDER_SVG_ELLIPSE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_FLUTTER_RENDER_SVG_ELLIPSE_H + +#include "frameworks/core/components/svg/render_svg_ellipse.h" +#include "frameworks/core/pipeline/layers/transform_layer.h" + +namespace OHOS::Ace { + +class FlutterRenderSvgEllipse : public RenderSvgEllipse { + DECLARE_ACE_TYPE(FlutterRenderSvgEllipse, RenderSvgEllipse); + +public: + RenderLayer GetRenderLayer() override; + void Paint(RenderContext& context, const Offset& offset) override; + + bool IsRepaintBoundary() const override + { + return true; + } + + bool HasEffectiveTransform() const override + { + if (!transformLayer_) { + return false; + } + return !transformLayer_->GetMatrix4().IsIdentityMatrix(); + } + + void UpdateMotion(const std::string& path, const std::string& rotate, double percent, const Point& point) override; + bool GetStartPoint(Point& point) override; + +private: + RefPtr transformLayer_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_FLUTTER_RENDER_SVG_ELLIPSE_H diff --git a/frameworks/core/components/svg/flutter_render_svg_line.cpp b/frameworks/core/components/svg/flutter_render_svg_line.cpp new file mode 100644 index 00000000..4fe647e1 --- /dev/null +++ b/frameworks/core/components/svg/flutter_render_svg_line.cpp @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/core/components/svg/flutter_render_svg_line.h" + +#include "include/utils/SkParsePath.h" + +#include "frameworks/core/components/common/painter/flutter_svg_painter.h" +#include "frameworks/core/components/transform/flutter_render_transform.h" +#include "frameworks/core/pipeline/base/flutter_render_context.h" + +namespace OHOS::Ace { + +using namespace Flutter; + +RefPtr RenderSvgLine::Create() +{ + return AceType::MakeRefPtr(); +} + +RenderLayer FlutterRenderSvgLine::GetRenderLayer() +{ + if (!transformLayer_) { + transformLayer_ = AceType::MakeRefPtr(Matrix4::CreateIdentity(), 0.0, 0.0); + } + return AceType::RawPtr(transformLayer_); +} + +void FlutterRenderSvgLine::Paint(RenderContext& context, const Offset& offset) +{ + const auto renderContext = static_cast(&context); + flutter::Canvas* canvas = renderContext->GetCanvas(); + if (!canvas) { + LOGE("Paint canvas is null"); + return; + } + SkCanvas* skCanvas = canvas->canvas(); + if (!skCanvas) { + LOGE("Paint skCanvas is null"); + return; + } + + SkPath path; + double width = GetLayoutSize().Width(); + double height = GetLayoutSize().Height(); + path.moveTo(ConvertDimensionToPx(x1_, width), ConvertDimensionToPx(y1_, height)); + path.lineTo(ConvertDimensionToPx(x2_, width), ConvertDimensionToPx(y2_, height)); + + FlutterSvgPainter::SetFillStyle(skCanvas, path, fillState_, opacity_); + FlutterSvgPainter::SetStrokeStyle(skCanvas, path, strokeState_, opacity_); + + RenderNode::Paint(context, offset); +} + +void FlutterRenderSvgLine::UpdateMotion(const std::string& path, const std::string& rotate, + double percent, const Point& point) +{ + if (!transformLayer_) { + LOGE("transformLayer is null"); + return; + } + bool isSuccess = true; + auto motionMatrix = FlutterSvgPainter::CreateMotionMatrix(path, rotate, point, percent, isSuccess); + if (isSuccess) { + auto transform = FlutterRenderTransform::GetTransformByOffset(motionMatrix, GetGlobalOffset()); + transformLayer_->Update(transform); + } +} + +bool FlutterRenderSvgLine::GetStartPoint(Point& point) +{ + double width = GetLayoutSize().Width(); + double height = GetLayoutSize().Height(); + point = Point(ConvertDimensionToPx(x1_, width), ConvertDimensionToPx(y1_, height)); + return true; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/svg/flutter_render_svg_line.h b/frameworks/core/components/svg/flutter_render_svg_line.h new file mode 100644 index 00000000..e4b6d4a5 --- /dev/null +++ b/frameworks/core/components/svg/flutter_render_svg_line.h @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_FLUTTER_RENDER_SVG_LINE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_FLUTTER_RENDER_SVG_LINE_H + +#include "frameworks/core/components/svg/render_svg_line.h" +#include "frameworks/core/pipeline/layers/transform_layer.h" + +namespace OHOS::Ace { + +class FlutterRenderSvgLine : public RenderSvgLine { + DECLARE_ACE_TYPE(FlutterRenderSvgLine, RenderSvgLine); + +public: + RenderLayer GetRenderLayer() override; + void Paint(RenderContext& context, const Offset& offset) override; + + bool IsRepaintBoundary() const override + { + return true; + } + + bool HasEffectiveTransform() const override + { + if (!transformLayer_) { + return false; + } + return !transformLayer_->GetMatrix4().IsIdentityMatrix(); + } + + void UpdateMotion(const std::string& path, const std::string& rotate, double percent, const Point& point) override; + bool GetStartPoint(Point& point) override; + +private: + RefPtr transformLayer_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_FLUTTER_RENDER_SVG_LINE_H diff --git a/frameworks/core/components/svg/flutter_render_svg_path.cpp b/frameworks/core/components/svg/flutter_render_svg_path.cpp new file mode 100644 index 00000000..1ccd27fd --- /dev/null +++ b/frameworks/core/components/svg/flutter_render_svg_path.cpp @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/core/components/svg/flutter_render_svg_path.h" + +#include "include/utils/SkParsePath.h" + +#include "frameworks/core/components/common/painter/flutter_svg_painter.h" +#include "frameworks/core/components/transform/flutter_render_transform.h" +#include "frameworks/core/pipeline/base/flutter_render_context.h" + +namespace OHOS::Ace { + +using namespace Flutter; + +RefPtr RenderSvgPath::Create() +{ + return AceType::MakeRefPtr(); +} + +RenderLayer FlutterRenderSvgPath::GetRenderLayer() +{ + if (!transformLayer_) { + transformLayer_ = AceType::MakeRefPtr(Matrix4::CreateIdentity(), 0.0, 0.0); + } + return AceType::RawPtr(transformLayer_); +} + +void FlutterRenderSvgPath::Paint(RenderContext& context, const Offset& offset) +{ + if (d_.empty()) { + return; + } + const auto renderContext = static_cast(&context); + flutter::Canvas* canvas = renderContext->GetCanvas(); + if (!canvas) { + LOGE("Paint canvas is null"); + return; + } + SkCanvas* skCanvas = canvas->canvas(); + if (!skCanvas) { + LOGE("Paint skCanvas is null"); + return; + } + SkPath out; + if (paths_.empty()) { + SkParsePath::FromSVGString(d_.c_str(), &out); + } else { + SkPath path; + SkPath ending; + int32_t firstPart = (int)weight_; + int32_t pathsSize = paths_.size(); + if (firstPart < 0 || firstPart > (pathsSize - 1)) { + return; + } else if (firstPart == (pathsSize - 1)) { + SkParsePath::FromSVGString(paths_[firstPart].c_str(), &path); + SkParsePath::FromSVGString(paths_[firstPart - 1].c_str(), &ending); + ending.interpolate(path, 1.0f, &out); + } else { + float newWeight = weight_ - firstPart; + SkParsePath::FromSVGString(paths_[firstPart + 1].c_str(), &path); + SkParsePath::FromSVGString(paths_[firstPart].c_str(), &ending); + ending.interpolate(path, newWeight, &out); + } + } + + FlutterSvgPainter::SetFillStyle(skCanvas, out, fillState_, opacity_); + FlutterSvgPainter::SetStrokeStyle(skCanvas, out, strokeState_, opacity_); + RenderNode::Paint(context, offset); +} + +void FlutterRenderSvgPath::UpdateMotion(const std::string& path, const std::string& rotate, + double percent, const Point& point) +{ + if (!transformLayer_) { + LOGE("transformLayer is null"); + return; + } + bool isSuccess = true; + auto motionMatrix = FlutterSvgPainter::CreateMotionMatrix(path, rotate, point, percent, isSuccess); + if (isSuccess) { + auto transform = FlutterRenderTransform::GetTransformByOffset(motionMatrix, GetGlobalOffset()); + transformLayer_->Update(transform); + } +} + +bool FlutterRenderSvgPath::GetStartPoint(Point& point) +{ + if (paths_.empty()) { + return false; + } + SkPath out; + if (!SkParsePath::FromSVGString(d_.c_str(), &out)) { + return false; + } + SkPoint skPoint = out.getPoint(0); + point = Point(skPoint.x(), skPoint.y()); + return true; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/svg/flutter_render_svg_path.h b/frameworks/core/components/svg/flutter_render_svg_path.h new file mode 100644 index 00000000..d2f1c825 --- /dev/null +++ b/frameworks/core/components/svg/flutter_render_svg_path.h @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_FLUTTER_RENDER_SVG_PATH_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_FLUTTER_RENDER_SVG_PATH_H + +#include "frameworks/core/components/svg/render_svg_path.h" +#include "frameworks/core/pipeline/layers/transform_layer.h" + +namespace OHOS::Ace { + +class FlutterRenderSvgPath : public RenderSvgPath { + DECLARE_ACE_TYPE(FlutterRenderSvgPath, RenderSvgPath); + +public: + RenderLayer GetRenderLayer() override; + void Paint(RenderContext& context, const Offset& offset) override; + + bool IsRepaintBoundary() const override + { + return true; + } + + bool HasEffectiveTransform() const override + { + if (!transformLayer_) { + return false; + } + return !transformLayer_->GetMatrix4().IsIdentityMatrix(); + } + + void UpdateMotion(const std::string& path, const std::string& rotate, double percent, const Point& point) override; + bool GetStartPoint(Point& point) override; + +private: + RefPtr transformLayer_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_FLUTTER_RENDER_SVG_PATH_H diff --git a/frameworks/core/components/svg/flutter_render_svg_polygon.cpp b/frameworks/core/components/svg/flutter_render_svg_polygon.cpp new file mode 100644 index 00000000..e0cceb6a --- /dev/null +++ b/frameworks/core/components/svg/flutter_render_svg_polygon.cpp @@ -0,0 +1,162 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/core/components/svg/flutter_render_svg_polygon.h" + +#include "include/utils/SkParsePath.h" + +#include "frameworks/core/components/common/painter/flutter_svg_painter.h" +#include "frameworks/core/components/transform/flutter_render_transform.h" +#include "frameworks/core/pipeline/base/flutter_render_context.h" + +namespace OHOS::Ace { + +using namespace Flutter; + +RefPtr RenderSvgPolygon::Create() +{ + return AceType::MakeRefPtr(); +} + +RenderLayer FlutterRenderSvgPolygon::GetRenderLayer() +{ + if (!transformLayer_) { + transformLayer_ = AceType::MakeRefPtr(Matrix4::CreateIdentity(), 0.0, 0.0); + } + return AceType::RawPtr(transformLayer_); +} + +void FlutterRenderSvgPolygon::Paint(RenderContext& context, const Offset& offset) +{ + if (points_.empty()) { + return; + } + const auto renderContext = static_cast(&context); + flutter::Canvas* canvas = renderContext->GetCanvas(); + if (!canvas) { + LOGE("Paint canvas is null"); + return; + } + SkCanvas* skCanvas = canvas->canvas(); + if (!skCanvas) { + LOGE("Paint skCanvas is null"); + return; + } + if (pointsVector_.empty()) { + std::vector skPoints; + if (!CreateSkPath(points_, skPoints)) { + return; + } + SkPath out; + out.addPoly(&skPoints[0], skPoints.size(), true); + FlutterSvgPainter::SetFillStyle(skCanvas, out, fillState_, opacity_); + FlutterSvgPainter::SetStrokeStyle(skCanvas, out, strokeState_, opacity_); + RenderNode::Paint(context, offset); + return; + } + int32_t firstPart = (int)weight_; + int32_t pathsSize = pointsVector_.size(); + float weight = 1.0f; + int32_t currValue = 0; + int32_t nextValue = 0; + if (firstPart < 0 || firstPart > (pathsSize - 1)) { + return; + } else if (firstPart == (pathsSize - 1)) { + currValue = firstPart; + nextValue = firstPart - 1; + } else { + weight = weight_ - firstPart; + currValue = firstPart + 1; + nextValue = firstPart; + } + SkPath out; + if (!CreateSkPaths(pointsVector_[currValue].c_str(), pointsVector_[nextValue].c_str(), weight, &out)) { + return; + } + FlutterSvgPainter::SetFillStyle(skCanvas, out, fillState_, opacity_); + FlutterSvgPainter::SetStrokeStyle(skCanvas, out, strokeState_, opacity_); + RenderNode::Paint(context, offset); +} + +bool FlutterRenderSvgPolygon::CreateSkPath(const std::string& pointsStr, std::vector& skPoints) +{ + if (pointsStr.empty()) { + return false; + } + FlutterSvgPainter::StringToPoints(pointsStr.c_str(), skPoints); + return !skPoints.empty(); +} + +bool FlutterRenderSvgPolygon::CreateSkPaths(const std::string& points1, + const std::string& points2, double weight, SkPath* out) +{ + SkPath begin; + SkPath end; + if (points1.empty() || points2.empty() || out == nullptr) { + return false; + } + std::vector skPoints1; + std::vector skPoints2; + if (!CreateSkPath(points1.c_str(), skPoints1) || !CreateSkPath(points2.c_str(), skPoints2)) { + return false; + } + if (skPoints1.size() != skPoints2.size()) { + return false; + } + if (isBy_) { + auto skPointIter1 = skPoints1.begin(); + auto skPointIter2 = skPoints2.begin(); + while (skPointIter1 != skPoints1.end()) { + *skPointIter1 = *skPointIter1 + *skPointIter2; + ++skPointIter1; + ++skPointIter2; + } + } + begin.addPoly(&skPoints1[0], skPoints1.size(), true); + end.addPoly(&skPoints2[0], skPoints2.size(), true); + begin.interpolate(end, weight, out); + return true; +} + +void FlutterRenderSvgPolygon::UpdateMotion(const std::string& path, const std::string& rotate, + double percent, const Point& point) +{ + if (!transformLayer_) { + LOGE("transformLayer is null"); + return; + } + bool isSuccess = true; + auto motionMatrix = FlutterSvgPainter::CreateMotionMatrix(path, rotate, point, percent, isSuccess); + if (isSuccess) { + auto transform = FlutterRenderTransform::GetTransformByOffset(motionMatrix, GetGlobalOffset()); + transformLayer_->Update(transform); + } +} + +bool FlutterRenderSvgPolygon::GetStartPoint(Point& point) +{ + if (points_.empty()) { + return false; + } + std::vector skPoints; + FlutterSvgPainter::StringToPoints(points_.c_str(), skPoints); + if (skPoints.empty()) { + return false; + } + point = Point(skPoints[0].x(), skPoints[0].y()); + return true; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/svg/flutter_render_svg_polygon.h b/frameworks/core/components/svg/flutter_render_svg_polygon.h new file mode 100644 index 00000000..50e2c48c --- /dev/null +++ b/frameworks/core/components/svg/flutter_render_svg_polygon.h @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_FLUTTER_RENDER_SVG_POLYGON_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_FLUTTER_RENDER_SVG_POLYGON_H + +#include "frameworks/core/components/svg/render_svg_polygon.h" +#include "frameworks/core/pipeline/layers/transform_layer.h" + +namespace OHOS::Ace { + +class FlutterRenderSvgPolygon : public RenderSvgPolygon { + DECLARE_ACE_TYPE(FlutterRenderSvgPolygon, RenderSvgPolygon); + +public: + RenderLayer GetRenderLayer() override; + void Paint(RenderContext& context, const Offset& offset) override; + + bool IsRepaintBoundary() const override + { + return true; + } + + bool HasEffectiveTransform() const override + { + if (!transformLayer_) { + return false; + } + return !transformLayer_->GetMatrix4().IsIdentityMatrix(); + } + + void UpdateMotion(const std::string& path, const std::string& rotate, double percent, const Point& point) override; + bool GetStartPoint(Point& point) override; + +private: + bool CreateSkPath(const std::string& pointsStr, std::vector& skPoints); + bool CreateSkPaths(const std::string& points1, const std::string& points2, double weight, SkPath* out); + + RefPtr transformLayer_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_FLUTTER_RENDER_SVG_POLYGON_H diff --git a/frameworks/core/components/svg/flutter_render_svg_polyline.cpp b/frameworks/core/components/svg/flutter_render_svg_polyline.cpp new file mode 100644 index 00000000..d36d303f --- /dev/null +++ b/frameworks/core/components/svg/flutter_render_svg_polyline.cpp @@ -0,0 +1,160 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/core/components/svg/flutter_render_svg_polyline.h" + +#include "frameworks/core/components/common/painter/flutter_svg_painter.h" +#include "frameworks/core/components/transform/flutter_render_transform.h" +#include "frameworks/core/pipeline/base/flutter_render_context.h" + +namespace OHOS::Ace { + +using namespace Flutter; + +RefPtr RenderSvgPolyline::Create() +{ + return AceType::MakeRefPtr(); +} + +RenderLayer FlutterRenderSvgPolyline::GetRenderLayer() +{ + if (!transformLayer_) { + transformLayer_ = AceType::MakeRefPtr(Matrix4::CreateIdentity(), 0.0, 0.0); + } + return AceType::RawPtr(transformLayer_); +} + +void FlutterRenderSvgPolyline::Paint(RenderContext& context, const Offset& offset) +{ + if (points_.empty()) { + return; + } + const auto renderContext = static_cast(&context); + flutter::Canvas* canvas = renderContext->GetCanvas(); + if (!canvas) { + LOGE("Paint canvas is null"); + return; + } + SkCanvas* skCanvas = canvas->canvas(); + if (!skCanvas) { + LOGE("Paint skCanvas is null"); + return; + } + if (pointsVector_.empty()) { + std::vector skPoints; + if (!CreateSkPath(points_, skPoints)) { + return; + } + SkPath out; + out.addPoly(&skPoints[0], skPoints.size(), false); + FlutterSvgPainter::SetFillStyle(skCanvas, out, fillState_, opacity_); + FlutterSvgPainter::SetStrokeStyle(skCanvas, out, strokeState_, opacity_); + RenderNode::Paint(context, offset); + return; + } + int32_t firstPart = (int)weight_; + int32_t pathsSize = pointsVector_.size(); + float weight = 1.0f; + int32_t currValue = 0; + int32_t nextValue = 0; + if (firstPart < 0 || firstPart > (pathsSize - 1)) { + return; + } else if (firstPart == (pathsSize - 1)) { + currValue = firstPart; + nextValue = firstPart - 1; + } else { + weight = weight_ - firstPart; + currValue = firstPart + 1; + nextValue = firstPart; + } + SkPath out; + if (!CreateSkPaths(pointsVector_[currValue].c_str(), pointsVector_[nextValue].c_str(), weight, &out)) { + return; + } + FlutterSvgPainter::SetFillStyle(skCanvas, out, fillState_, opacity_); + FlutterSvgPainter::SetStrokeStyle(skCanvas, out, strokeState_, opacity_); + RenderNode::Paint(context, offset); +} + +bool FlutterRenderSvgPolyline::CreateSkPath(const std::string& pointsStr, std::vector& skPoints) +{ + if (pointsStr.empty()) { + return false; + } + FlutterSvgPainter::StringToPoints(pointsStr.c_str(), skPoints); + return !skPoints.empty(); +} + +bool FlutterRenderSvgPolyline::CreateSkPaths(const std::string& points1, + const std::string& points2, double weight, SkPath* out) +{ + SkPath begin; + SkPath end; + if (points1.empty() || points2.empty() || out == nullptr) { + return false; + } + std::vector skPoints1; + std::vector skPoints2; + if (!CreateSkPath(points1.c_str(), skPoints1) || !CreateSkPath(points2.c_str(), skPoints2)) { + return false; + } + if (skPoints1.size() != skPoints2.size()) { + return false; + } + if (isBy_) { + auto skPointIter1 = skPoints1.begin(); + auto skPointIter2 = skPoints2.begin(); + while (skPointIter1 != skPoints1.end()) { + *skPointIter1 = *skPointIter1 + *skPointIter2; + ++skPointIter1; + ++skPointIter2; + } + } + begin.addPoly(&skPoints1[0], skPoints1.size(), false); + end.addPoly(&skPoints2[0], skPoints2.size(), false); + begin.interpolate(end, weight, out); + return true; +} + +void FlutterRenderSvgPolyline::UpdateMotion(const std::string& path, const std::string& rotate, + double percent, const Point& point) +{ + if (!transformLayer_) { + LOGE("transformLayer is null"); + return; + } + bool isSuccess = true; + auto motionMatrix = FlutterSvgPainter::CreateMotionMatrix(path, rotate, point, percent, isSuccess); + if (isSuccess) { + auto transform = FlutterRenderTransform::GetTransformByOffset(motionMatrix, GetGlobalOffset()); + transformLayer_->Update(transform); + } +} + +bool FlutterRenderSvgPolyline::GetStartPoint(Point& point) +{ + if (points_.empty()) { + return false; + } + std::vector skPoints; + FlutterSvgPainter::StringToPoints(points_.c_str(), skPoints); + if (skPoints.empty()) { + return false; + } + point = Point(skPoints[0].x(), skPoints[0].y()); + return true; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/svg/flutter_render_svg_polyline.h b/frameworks/core/components/svg/flutter_render_svg_polyline.h new file mode 100644 index 00000000..0c837c6e --- /dev/null +++ b/frameworks/core/components/svg/flutter_render_svg_polyline.h @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_FLUTTER_RENDER_SVG_POLYLINE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_FLUTTER_RENDER_SVG_POLYLINE_H + +#include "frameworks/core/components/svg/render_svg_polyline.h" +#include "frameworks/core/pipeline/layers/transform_layer.h" + +namespace OHOS::Ace { + +class FlutterRenderSvgPolyline : public RenderSvgPolyline { + DECLARE_ACE_TYPE(FlutterRenderSvgPolyline, RenderSvgPolyline); + +public: + RenderLayer GetRenderLayer() override; + void Paint(RenderContext& context, const Offset& offset) override; + + bool IsRepaintBoundary() const override + { + return true; + } + + bool HasEffectiveTransform() const override + { + if (!transformLayer_) { + return false; + } + return !transformLayer_->GetMatrix4().IsIdentityMatrix(); + } + + void UpdateMotion(const std::string& path, const std::string& rotate, double percent, const Point& point) override; + bool GetStartPoint(Point& point) override; + +private: + bool CreateSkPath(const std::string& pointsStr, std::vector& skPoints); + bool CreateSkPaths(const std::string& points1, const std::string& points2, double weight, SkPath* out); + + RefPtr transformLayer_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_FLUTTER_RENDER_SVG_POLYLINE_H diff --git a/frameworks/core/components/svg/flutter_render_svg_rect.cpp b/frameworks/core/components/svg/flutter_render_svg_rect.cpp new file mode 100644 index 00000000..59e849dc --- /dev/null +++ b/frameworks/core/components/svg/flutter_render_svg_rect.cpp @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/core/components/svg/flutter_render_svg_rect.h" + +#include "include/core/SkPathMeasure.h" +#include "include/utils/SkParsePath.h" + +#include "frameworks/core/components/common/painter/flutter_svg_painter.h" +#include "frameworks/core/components/transform/flutter_render_transform.h" +#include "frameworks/core/pipeline/base/flutter_render_context.h" + +namespace OHOS::Ace { + +using namespace Flutter; + +RefPtr RenderSvgRect::Create() +{ + return AceType::MakeRefPtr(); +} + +RenderLayer FlutterRenderSvgRect::GetRenderLayer() +{ + if (!transformLayer_) { + transformLayer_ = AceType::MakeRefPtr(Matrix4::CreateIdentity(), 0.0, 0.0); + } + return AceType::RawPtr(transformLayer_); +} + +void FlutterRenderSvgRect::Paint(RenderContext& context, const Offset& offset) +{ + const auto renderContext = static_cast(&context); + flutter::Canvas* canvas = renderContext->GetCanvas(); + if (!canvas) { + LOGE("Paint canvas is null"); + return; + } + SkCanvas* skCanvas = canvas->canvas(); + if (!skCanvas) { + LOGE("Paint skCanvas is null"); + return; + } + + double width = GetLayoutSize().Width(); + double height = GetLayoutSize().Height(); + SkRRect rrect = SkRRect::MakeRectXY( + SkRect::MakeXYWH(ConvertDimensionToPx(x_, width), ConvertDimensionToPx(y_, height), + ConvertDimensionToPx(width_, width), ConvertDimensionToPx(height_, height)), + ConvertDimensionToPx(rx_, width), ConvertDimensionToPx(ry_, height)); + SkPath path; + path.addRRect(rrect); + FlutterSvgPainter::SetFillStyle(skCanvas, path, fillState_, opacity_); + FlutterSvgPainter::SetStrokeStyle(skCanvas, path, strokeState_, opacity_); + RenderNode::Paint(context, offset); +} + +void FlutterRenderSvgRect::UpdateMotion(const std::string& path, const std::string& rotate, + double percent, const Point& point) +{ + if (!transformLayer_) { + LOGE("transformLayer is null"); + return; + } + bool isSuccess = true; + auto motionMatrix = FlutterSvgPainter::CreateMotionMatrix(path, rotate, point, percent, isSuccess); + if (isSuccess) { + auto transform = FlutterRenderTransform::GetTransformByOffset(motionMatrix, GetGlobalOffset()); + transformLayer_->Update(transform); + } +} + +bool FlutterRenderSvgRect::GetStartPoint(Point& point) +{ + double width = GetLayoutSize().Width(); + double height = GetLayoutSize().Height(); + point = Point(ConvertDimensionToPx(x_, width), ConvertDimensionToPx(y_, height)); + return true; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/svg/flutter_render_svg_rect.h b/frameworks/core/components/svg/flutter_render_svg_rect.h new file mode 100644 index 00000000..a8a34092 --- /dev/null +++ b/frameworks/core/components/svg/flutter_render_svg_rect.h @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_FLUTTER_RENDER_SVG_RECT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_FLUTTER_RENDER_SVG_RECT_H + +#include "frameworks/core/components/svg/render_svg_rect.h" +#include "frameworks/core/pipeline/layers/opacity_layer.h" +#include "frameworks/core/pipeline/layers/transform_layer.h" + +namespace OHOS::Ace { + +class FlutterRenderSvgRect : public RenderSvgRect { + DECLARE_ACE_TYPE(FlutterRenderSvgRect, RenderSvgRect); + +public: + RenderLayer GetRenderLayer() override; + void Paint(RenderContext& context, const Offset& offset) override; + + bool IsRepaintBoundary() const override + { + return true; + } + + bool HasEffectiveTransform() const override + { + if (!transformLayer_) { + return false; + } + return !transformLayer_->GetMatrix4().IsIdentityMatrix(); + } + + void UpdateMotion(const std::string& path, const std::string& rotate, double percent, const Point& point) override; + bool GetStartPoint(Point& point) override; + +private: + RefPtr transformLayer_; + RefPtr opacityLayer_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_FLUTTER_RENDER_SVG_RECT_H diff --git a/frameworks/core/components/svg/flutter_render_svg_text.cpp b/frameworks/core/components/svg/flutter_render_svg_text.cpp new file mode 100644 index 00000000..7ba324e5 --- /dev/null +++ b/frameworks/core/components/svg/flutter_render_svg_text.cpp @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/core/components/svg/flutter_render_svg_text.h" + +#include "frameworks/core/components/common/painter/flutter_svg_painter.h" +#include "frameworks/core/components/svg/flutter_render_svg_text_path.h" +#include "frameworks/core/components/svg/flutter_render_svg_tspan.h" +#include "frameworks/core/pipeline/base/flutter_render_context.h" + +namespace OHOS::Ace { + +using namespace Flutter; + +RefPtr FlutterRenderSvgText::Create() +{ + FlutterSvgPainter::CheckFontType(); + return AceType::MakeRefPtr(); +} + +RenderLayer FlutterRenderSvgText::GetRenderLayer() +{ + if (!transformLayer_) { + transformLayer_ = AceType::MakeRefPtr(Matrix4::CreateIdentity(), 0.0, 0.0); + } + return AceType::RawPtr(transformLayer_); +} + +void FlutterRenderSvgText::Paint(RenderContext& context, const Offset& offset) +{ + DrawOffset drawOffset = { offset, offset, false }; + DrawText(context, drawOffset); +} + +void FlutterRenderSvgText::DrawText(RenderContext& context, DrawOffset& drawOffset) +{ + // update current offset by attribute + UpdateDrawOffset(drawOffset); + + if (!textData_.empty()) { + drawOffset.current = OnDrawText(context, drawOffset); + drawOffset.isTspan = true; + } + + const auto& children = GetChildren(); + if (!children.empty()) { + for (const auto& child : children) { + auto textSpan = AceType::DynamicCast(child); + if (textSpan) { + textSpan->DrawText(context, drawOffset); + continue; + } + + auto textPath = AceType::DynamicCast(child); + if (textPath) { + drawOffset.current = textPath->PaintTextPath(context, drawOffset.svg); + drawOffset.isTspan = true; + } + } + } +} + +Offset FlutterRenderSvgText::OnDrawText(RenderContext& context, const DrawOffset& drawOffset) +{ + Offset offset = drawOffset.current; + const auto renderContext = static_cast(&context); + flutter::Canvas* canvas = renderContext->GetCanvas(); + if (!canvas) { + LOGE("Paint canvas is null"); + return offset; + } + SkCanvas* skCanvas = canvas->canvas(); + if (!skCanvas) { + LOGE("Paint skCanvas is null"); + return offset; + } + + std::string text = isDrawSpace_ ? " " + textData_ : textData_; + SvgTextInfo svgTextInfo = { fillState_, strokeState_, textStyle_, text, opacity_ }; + TextDrawInfo textDrawInfo = { offset, rotate_ }; + offset = FlutterSvgPainter::UpdateText(skCanvas, svgTextInfo, textDrawInfo); + return offset; +} + +void FlutterRenderSvgText::UpdateDrawOffset(DrawOffset& drawOffset) +{ + double width = GetLayoutSize().Width(); + double height = GetLayoutSize().Height(); + double x = ConvertDimensionToPx(x_, width); + double dx = ConvertDimensionToPx(dx_, width); + double y = ConvertDimensionToPx(y_, height); + double dy = ConvertDimensionToPx(dy_, height); + drawOffset.current = drawOffset.current + Offset(x + dx, y + dy); + drawOffset.isTspan = false; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/svg/flutter_render_svg_text.h b/frameworks/core/components/svg/flutter_render_svg_text.h new file mode 100644 index 00000000..0de8cc8d --- /dev/null +++ b/frameworks/core/components/svg/flutter_render_svg_text.h @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_FLUTTER_RENDER_SVG_TEXT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_FLUTTER_RENDER_SVG_TEXT_H + +#include "frameworks/core/components/svg/render_svg_text.h" +#include "frameworks/core/pipeline/layers/transform_layer.h" + +namespace OHOS::Ace { + +struct DrawOffset { + Offset svg; + Offset current; + bool isTspan = false; +}; + +class FlutterRenderSvgText : public RenderSvgText { + DECLARE_ACE_TYPE(FlutterRenderSvgText, RenderSvgText); + +public: + static RefPtr Create(); + RenderLayer GetRenderLayer() override; + void Paint(RenderContext& context, const Offset& offset) override; + + bool IsRepaintBoundary() const override + { + return true; + } + +protected: + bool isDrawSpace_ = false; + +private: + void DrawText(RenderContext& context, DrawOffset& drawOffset); + Offset OnDrawText(RenderContext& context, const DrawOffset& drawOffset); + virtual void UpdateDrawOffset(DrawOffset& drawOffset); + +private: + RefPtr transformLayer_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_FLUTTER_RENDER_SVG_TEXT_H diff --git a/frameworks/core/components/svg/flutter_render_svg_text_path.cpp b/frameworks/core/components/svg/flutter_render_svg_text_path.cpp new file mode 100644 index 00000000..b577fcfe --- /dev/null +++ b/frameworks/core/components/svg/flutter_render_svg_text_path.cpp @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/core/components/svg/flutter_render_svg_text_path.h" + +#include "frameworks/core/components/common/painter/flutter_svg_painter.h" +#include "frameworks/core/components/svg/flutter_render_svg_text.h" +#include "frameworks/core/pipeline/base/flutter_render_context.h" + +namespace OHOS::Ace { + +using namespace Flutter; + +RefPtr FlutterRenderSvgTextPath::Create() +{ + return AceType::MakeRefPtr(); +} + +RenderLayer FlutterRenderSvgTextPath::GetRenderLayer() +{ + if (!transformLayer_) { + transformLayer_ = AceType::MakeRefPtr(Matrix4::CreateIdentity(), 0.0, 0.0); + } + return AceType::RawPtr(transformLayer_); +} + +void FlutterRenderSvgTextPath::Paint(RenderContext& context, const Offset& offset) +{ + double length = FlutterSvgPainter::GetPathLength(path_); + double startOffset = ConvertDimensionToPx(startOffset_, length); + PathOffset pathOffset = { offset, startOffset, startOffset, path_}; + DrawTextPath(context, pathOffset); +} + +Offset FlutterRenderSvgTextPath::PaintTextPath(RenderContext& context, const Offset& offset) +{ + double length = FlutterSvgPainter::GetPathLength(path_); + double startOffset = ConvertDimensionToPx(startOffset_, length); + PathOffset pathOffset = { offset, startOffset, startOffset, path_}; + DrawTextPath(context, pathOffset); + + return FlutterSvgPainter::GetPathOffset(path_, pathOffset.current); +} + +void FlutterRenderSvgTextPath::DrawTextPath(RenderContext& context, PathOffset& pathOffset) +{ + if (pathOffset.path.empty()) { + LOGW("draw path is emtpy."); + return; + } + + if (!textData_.empty()) { + pathOffset.current = OnDrawTextPath(context, pathOffset); + } + + const auto& children = GetChildren(); + if (!children.empty()) { + for (const auto& child : children) { + auto textSpan = AceType::DynamicCast(child); + if (textSpan) { + textSpan->DrawTextPath(context, pathOffset); + } + } + } +} + +double FlutterRenderSvgTextPath::OnDrawTextPath(RenderContext& context, const PathOffset& pathOffset) +{ + double offset = pathOffset.current; + const auto renderContext = static_cast(&context); + flutter::Canvas* canvas = renderContext->GetCanvas(); + if (!canvas) { + LOGE("Paint canvas is null"); + return offset; + } + SkCanvas* skCanvas = canvas->canvas(); + if (!skCanvas) { + LOGE("Paint skCanvas is null"); + return offset; + } + + SvgTextInfo svgTextInfo = { fillState_, strokeState_, textStyle_, textData_, opacity_ }; + PathDrawInfo pathDrawInfo = { pathOffset.path, pathOffset.current, 0.0 }; + offset = FlutterSvgPainter::UpdateTextPath(skCanvas, svgTextInfo, pathDrawInfo); + return offset; +} + +void FlutterRenderSvgTextPath::OnNotifyRender() +{ + // notify parent node of text to render. + RefPtr node = nullptr; + auto parent = AceType::DynamicCast(GetParent().Upgrade()); + if (parent != nullptr) { + // text set render mark. + parent->MarkNeedRender(true); + return; + } + + // textpath has no parent node of text, set render mark. + MarkNeedRender(true); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/svg/flutter_render_svg_text_path.h b/frameworks/core/components/svg/flutter_render_svg_text_path.h new file mode 100644 index 00000000..495061a0 --- /dev/null +++ b/frameworks/core/components/svg/flutter_render_svg_text_path.h @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_FLUTTER_RENDER_SVG_TEXT_PATH_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_FLUTTER_RENDER_SVG_TEXT_PATH_H + +#include "frameworks/core/components/svg/flutter_render_svg_tspan.h" +#include "frameworks/core/components/svg/render_svg_text_path.h" +#include "frameworks/core/pipeline/layers/transform_layer.h" + +namespace OHOS::Ace { + +class FlutterRenderSvgTextPath : public RenderSvgTextPath { + DECLARE_ACE_TYPE(FlutterRenderSvgTextPath, RenderSvgTextPath); + +public: + static RefPtr Create(); + RenderLayer GetRenderLayer() override; + void Paint(RenderContext& context, const Offset& offset) override; + Offset PaintTextPath(RenderContext& context, const Offset& offset); + + bool IsRepaintBoundary() const override + { + return true; + } + void DrawTextPath(RenderContext& context, PathOffset& pathOffset); + +protected: + void OnNotifyRender() override; + +private: + double OnDrawTextPath(RenderContext& context, const PathOffset& pathOffset); + +private: + RefPtr transformLayer_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_FLUTTER_RENDER_SVG_TEXT_PATH_H diff --git a/frameworks/core/components/svg/flutter_render_svg_tspan.cpp b/frameworks/core/components/svg/flutter_render_svg_tspan.cpp new file mode 100644 index 00000000..67031d3e --- /dev/null +++ b/frameworks/core/components/svg/flutter_render_svg_tspan.cpp @@ -0,0 +1,140 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/core/components/svg/flutter_render_svg_tspan.h" + +#include "frameworks/core/components/common/painter/flutter_svg_painter.h" +#include "frameworks/core/components/svg/flutter_render_svg_text_path.h" +#include "frameworks/core/pipeline/base/flutter_render_context.h" + +namespace OHOS::Ace { + +RefPtr FlutterRenderSvgTspan::Create() +{ + return AceType::MakeRefPtr(); +} + +void FlutterRenderSvgTspan::UpdateDrawOffset(DrawOffset& drawOffset) +{ + double width = GetLayoutSize().Width(); + double height = GetLayoutSize().Height(); + double x = ConvertDimensionToPx(x_, width); + double dx = ConvertDimensionToPx(dx_, width); + double y = ConvertDimensionToPx(y_, height); + double dy = ConvertDimensionToPx(dy_, height); + + double offsetX = hasX_ ? (drawOffset.svg.GetX() + x + dx) : (drawOffset.current.GetX() + dx); + double offsetY = hasY_ ? (drawOffset.svg.GetY() + y + dy) : (drawOffset.current.GetY() + dy); + drawOffset.current = Offset(offsetX, offsetY); + if (!hasX_ && drawOffset.isTspan) { + // keep space between tspans + isDrawSpace_ = true; + } else { + isDrawSpace_ = false; + } + drawOffset.isTspan = true; +} + +void FlutterRenderSvgTspan::UpdatePathOffset(PathOffset& pathOffset) +{ + double length = FlutterSvgPainter::GetPathLength(pathOffset.path); + double x = ConvertDimensionToPx(x_, length); + double dx = ConvertDimensionToPx(dx_, length); + if (hasX_) { + pathOffset.current = pathOffset.start + x + dx; + } else { + if (pathOffset.current != pathOffset.start) { + // keep space between tspans + isDrawSpace_ = true; + } else { + isDrawSpace_ = false; + } + pathOffset.current += dx; + } +} + +void FlutterRenderSvgTspan::DrawTextPath(RenderContext& context, PathOffset& pathOffset) +{ + if (pathOffset.path.empty()) { + LOGW("draw path is emtpy."); + return; + } + + if (!textData_.empty()) { + // update draw offset by attribute + UpdatePathOffset(pathOffset); + // update offset after draw + pathOffset.current = OnDrawTextPath(context, pathOffset); + } + + const auto& children = GetChildren(); + if (!children.empty()) { + for (const auto& child : children) { + auto textSpan = AceType::DynamicCast(child); + if (textSpan) { + textSpan->DrawTextPath(context, pathOffset); + } + } + return; + } +} + +double FlutterRenderSvgTspan::OnDrawTextPath(RenderContext& context, const PathOffset& pathOffset) +{ + double offset = pathOffset.current; + const auto renderContext = static_cast(&context); + flutter::Canvas* canvas = renderContext->GetCanvas(); + if (!canvas) { + LOGE("Paint canvas is null"); + return offset; + } + SkCanvas* skCanvas = canvas->canvas(); + if (!skCanvas) { + LOGE("Paint skCanvas is null"); + return offset; + } + + std::string text = isDrawSpace_ ? " " + textData_ : textData_; + SvgTextInfo svgTextInfo = { fillState_, strokeState_, textStyle_, textData_, opacity_ }; + PathDrawInfo pathDrawInfo = { pathOffset.path, pathOffset.current, rotate_ }; + offset = FlutterSvgPainter::UpdateTextPath(skCanvas, svgTextInfo, pathDrawInfo); + return offset; +} + +void FlutterRenderSvgTspan::OnNotifyRender() +{ + // notify parent node of text or textpath to render. + RefPtr node = nullptr; + auto parent = AceType::DynamicCast(GetParent().Upgrade()); + while (parent != nullptr) { + if (AceType::InstanceOf(parent) || AceType::InstanceOf(parent)) { + node = parent; + parent = AceType::DynamicCast(parent->GetParent().Upgrade()); + } else if (AceType::InstanceOf(parent)) { + // text or textpath set render mark. + parent->MarkNeedRender(true); + return; + } + } + + // tspan has no parent node of text or textpath. the top level of tspan set render mark. + if (node) { + node->MarkNeedRender(true); + } else { + MarkNeedRender(true); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/svg/flutter_render_svg_tspan.h b/frameworks/core/components/svg/flutter_render_svg_tspan.h new file mode 100644 index 00000000..150c3980 --- /dev/null +++ b/frameworks/core/components/svg/flutter_render_svg_tspan.h @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_FLUTTER_RENDER_SVG_TSPAN_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_FLUTTER_RENDER_SVG_TSPAN_H + +#include "frameworks/core/components/svg/flutter_render_svg_text.h" + +namespace OHOS::Ace { + +struct PathOffset { + Offset svg; + double start = 0.0; + double current = 0.0; + std::string path; +}; + +class FlutterRenderSvgTspan : public FlutterRenderSvgText { + DECLARE_ACE_TYPE(FlutterRenderSvgTspan, RenderSvgText); + +public: + static RefPtr Create(); + + void DrawTextPath(RenderContext& context, PathOffset& pathOffset); + +protected: + void OnNotifyRender() override; + +private: + void UpdateDrawOffset(DrawOffset& drawOffset) override; + void UpdatePathOffset(PathOffset& pathOffset); + double OnDrawTextPath(RenderContext& context, const PathOffset& pathOffset); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_FLUTTER_RENDER_SVG_TSPAN_H diff --git a/frameworks/core/components/svg/render_svg.cpp b/frameworks/core/components/svg/render_svg.cpp new file mode 100644 index 00000000..d5dade45 --- /dev/null +++ b/frameworks/core/components/svg/render_svg.cpp @@ -0,0 +1,198 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/core/components/svg/render_svg.h" + +#include "frameworks/core/components/display/render_display.h" +#include "frameworks/core/components/svg/svg_component.h" +#include "frameworks/core/components/transform/render_transform.h" + +namespace OHOS::Ace { + +RenderSvg::~RenderSvg() +{ + svgAnimates_.clear(); +} + +void RenderSvg::Update(const RefPtr& component) +{ + const RefPtr svgComponent = AceType::DynamicCast(component); + if (!svgComponent) { + LOGW("svg component is null"); + return; + } + isSvgNode_ = true; + x_ = svgComponent->GetX(); + y_ = svgComponent->GetY(); + width_ = svgComponent->GetWidth(); + height_ = svgComponent->GetHeight(); + viewBox_ = svgComponent->GetViewBox(); + RenderSvgBase::SetPresentationAttrs(svgComponent); + + AddSvgAnimations(svgComponent); + MarkNeedLayout(); +} + +void RenderSvg::AddSvgAnimations(const RefPtr& svgComponent) +{ + if (!svgComponent) { + LOGW("svg component is null"); + return; + } + svgAnimates_.clear(); + hasUpdated_ = true; + const auto& componentChildren = svgComponent->GetChildren(); + for (const auto &childComponent : componentChildren) { + auto svgAnimateComponent = AceType::DynamicCast(childComponent); + if (!svgAnimateComponent || svgAnimateComponent->GetSvgAnimateType() == SvgAnimateType::MOTION) { + continue; + } + auto svgAnimate = AceType::MakeRefPtr(); + svgAnimateComponent->Copy(svgAnimate); + svgAnimates_.emplace_back(svgAnimate); + } +} + +void RenderSvg::PrepareAnimations() +{ + if (!hasUpdated_) { + return; + } + hasUpdated_ = false; + for (const auto& svgAnimate : svgAnimates_) { + RenderSvgBase::PreparePropertyAnimation(svgAnimate); + } +} + +bool RenderSvg::PrepareSelfAnimation(const RefPtr& svgAnimate) +{ + if (OpacityAnimation(svgAnimate)) { + return true; + } + Dimension originalValue; + if (!GetProperty(svgAnimate->GetAttributeName(), originalValue)) { + return false; + } + std::function callback; + callback = [weak = AceType::WeakClaim(this), attrName = svgAnimate->GetAttributeName()](Dimension value) { + auto svg = weak.Upgrade(); + if (!svg) { + LOGE("svg is null"); + return; + } + bool ret = svg->SetProperty(attrName, value); + if (ret) { + svg->MarkNeedLayout(true); + } + }; + RefPtr> evaluator = AceType::MakeRefPtr>(); + CreatePropertyAnimation(svgAnimate, originalValue, std::move(callback), evaluator); + return true; +} + +bool RenderSvg::OpacityAnimation(const RefPtr& svgAnimate) +{ + if (svgAnimate->GetAttributeName() != ATTR_NAME_OPACITY) { + return false; + } + SetOpacityCallback(); + if (opacityCallback_) { + double originalValue = opacity_ * (1.0 / UINT8_MAX); + RefPtr> evaluator = AceType::MakeRefPtr>(); + CreatePropertyAnimation(svgAnimate, originalValue, std::move(opacityCallback_), evaluator); + } + return true; +} + +void RenderSvg::SetOpacityCallback() +{ + int32_t nodeId = GetNodeId(); + auto parent = GetParent().Upgrade(); + while (parent) { + if (parent->GetNodeId() != nodeId) { + break; + } + auto displayRender = AceType::DynamicCast(parent); + if (displayRender) { + opacityCallback_ = [weak = AceType::WeakClaim(AceType::RawPtr(displayRender))](double value) { + auto display = weak.Upgrade(); + if (!display) { + LOGE("display is null"); + return; + } + display->UpdateOpacity(static_cast(round(value * UINT8_MAX))); + }; + break; + } + parent = parent->GetParent().Upgrade(); + } +} + +bool RenderSvg::SetProperty(const std::string& attrName, const Dimension& value) +{ + if (attrName == ATTR_NAME_WIDTH) { + width_ = value; + } else if (attrName == ATTR_NAME_HEIGHT) { + height_ = value; + } else { + LOGE("invalid attrName"); + return false; + } + return true; +} + +bool RenderSvg::GetProperty(const std::string& attrName, Dimension& dimension) const +{ + if (attrName == ATTR_NAME_WIDTH) { + dimension = width_; + } else if (attrName == ATTR_NAME_HEIGHT) { + dimension = height_; + } else { + LOGE("invalid attrName"); + return false; + } + return true; +} + +void RenderSvg::PerformLayout() +{ + auto context = context_.Upgrade(); + if (!context) { + LOGE("context is null"); + return; + } + const auto& children = GetChildren(); + LayoutParam layoutParam = GetLayoutParam(); + Size layoutSize; + if (LessNotEqual(width_.Value(), 0.0)) { + layoutSize.SetWidth(layoutParam.GetMaxSize().Width()); + } else { + layoutSize.SetWidth(std::clamp(ConvertDimensionToPx(width_, layoutParam.GetMaxSize().Width()), + layoutParam.GetMinSize().Width(), layoutParam.GetMaxSize().Width())); + } + if (LessNotEqual(height_.Value(), 0.0)) { + layoutSize.SetHeight(layoutParam.GetMaxSize().Height()); + } else { + layoutSize.SetHeight(std::clamp(ConvertDimensionToPx(height_, layoutParam.GetMaxSize().Height()), + layoutParam.GetMinSize().Height(), layoutParam.GetMaxSize().Height())); + } + SetLayoutSize(layoutSize); + for (const auto& child : children) { + child->Layout(LayoutParam(layoutSize, layoutSize)); + } + PrepareAnimations(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/svg/render_svg.h b/frameworks/core/components/svg/render_svg.h new file mode 100644 index 00000000..b4c33891 --- /dev/null +++ b/frameworks/core/components/svg/render_svg.h @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_RENDER_SVG_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_RENDER_SVG_H + +#include "frameworks/core/components/svg/render_svg_base.h" +#include "frameworks/core/components/svg/svg_component.h" + +namespace OHOS::Ace { + +class RenderSvg : public RenderSvgBase { + DECLARE_ACE_TYPE(RenderSvg, RenderSvgBase); + +public: + static RefPtr Create(); + ~RenderSvg() override; + + void Update(const RefPtr& component) override; + void PerformLayout() override; + bool PrepareSelfAnimation(const RefPtr& svgAnimate) override; + + const Rect& GetViewBox() const + { + return viewBox_; + } + + const Dimension& GetX() const + { + return x_; + } + + const Dimension& GetY() const + { + return y_; + } + + const Dimension& GetWidth() const + { + return width_; + } + + const Dimension& GetHeight() const + { + return height_; + } + +protected: + Rect viewBox_; + +private: + void PrepareAnimations(); + void AddSvgAnimations(const RefPtr& svgComponent); + bool SetProperty(const std::string& attrName, const Dimension& value); + bool GetProperty(const std::string& attrName, Dimension& dimension) const; + void SetOpacityCallback(); + bool OpacityAnimation(const RefPtr& svgAnimate); + + Dimension x_; + Dimension y_; + Dimension width_ = Dimension(-1.0); + Dimension height_ = Dimension(-1.0); + std::vector> svgAnimates_; + bool hasUpdated_ = false; + std::function opacityCallback_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_RENDER_SVG_H diff --git a/frameworks/core/components/svg/render_svg_base.cpp b/frameworks/core/components/svg/render_svg_base.cpp new file mode 100644 index 00000000..f0528f41 --- /dev/null +++ b/frameworks/core/components/svg/render_svg_base.cpp @@ -0,0 +1,399 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/core/components/svg/render_svg_base.h" + +#include "frameworks/core/animation/curve_animation.h" + +namespace OHOS::Ace { +namespace { + +constexpr int32_t START_VALUE = 0; +constexpr int32_t END_VALUE = 1; + +const std::unordered_map> COLOR_PROPER_GETTERS = { + { ATTR_NAME_FILL, [](RenderSvgBase& base) -> Color { + return base.GetFillState().GetColor(); + } }, + { ATTR_NAME_STROKE, [](RenderSvgBase& base) -> Color { + return base.GetStrokeState().GetColor(); + } }, +}; + +const std::unordered_map> DIMENSION_PROPER_GETTERS = { + { ATTR_NAME_STROKE_WIDTH, [](RenderSvgBase& base) -> Dimension { + return base.GetStrokeState().GetLineWidth(); + } }, + { ATTR_NAME_FONT_SIZE, [](RenderSvgBase& base) -> Dimension { + return base.GetTextStyle().GetFontSize(); + } }, +}; + +const std::unordered_map> DOUBLE_PROPER_GETTERS = { + { ATTR_NAME_FILL_OPACITY, [](RenderSvgBase& base) -> double { + return base.GetFillState().GetOpacity(); + } }, + { ATTR_NAME_STROKE_OPACITY, [](RenderSvgBase& base) -> double { + return base.GetStrokeState().GetOpacity(); + } }, + { ATTR_NAME_LETTER_SPACING, [](RenderSvgBase& base) -> double { + return base.GetTextStyle().GetLetterSpacing(); + } }, + { ATTR_NAME_MITER_LIMIT, [](RenderSvgBase& base) -> double { + return base.GetStrokeState().GetMiterLimit(); + } }, + { ATTR_NAME_STROKE_DASHOFFSET, [](RenderSvgBase& base) -> double { + return base.GetStrokeState().GetLineDash().dashOffset; + } }, + { ATTR_NAME_OPACITY, [](RenderSvgBase& base) -> double { + return base.GetOpacity() * (1.0 / UINT8_MAX); + } }, +}; + +} // namespace + +RenderSvgBase::~RenderSvgBase() +{ + std::unordered_map>::iterator it; + for (it = animators_.begin(); it != animators_.end(); it++) { + if (!it->second) { + LOGE("animator is null"); + continue; + } + if (!it->second->IsStopped()) { + it->second->Stop(); + } + it->second->ClearInterpolators(); + } + animators_.clear(); +} + +double RenderSvgBase::ConvertDimensionToPx(const Dimension& value, double baseValue) +{ + if (value.Unit() == DimensionUnit::PERCENT) { + return value.Value() * baseValue; + } else if (value.Unit() == DimensionUnit::PX) { + return value.Value(); + } else { + return NormalizeToPx(value); + } +} + +void RenderSvgBase::SetPresentationAttrs(const RefPtr& svgSharp) +{ + opacity_ = static_cast(round(svgSharp->GetOpacity() * UINT8_MAX)); + fillState_ = svgSharp->GetFillState(); + strokeState_ = svgSharp->GetStrokeState(); + textStyle_ = svgSharp->GetTextStyle(); +} + +template +void RenderSvgBase::PreparePresentationAnimation(const RefPtr& svgAnimate, const T& originalValue, + const RefPtr>& evaluator) +{ + std::function callback; + callback = [weakRect = AceType::WeakClaim(this), attrName = svgAnimate->GetAttributeName()](T value) { + auto svgBase = weakRect.Upgrade(); + if (!svgBase) { + LOGE("svgBase is null"); + return; + } + if (!svgBase->SetPresentationProperty(attrName, value)) { + LOGE("no the property: %{public}s", attrName.c_str()); + return; + } + + // notify render node to paint. + // if tspan has changed, should notify parent node of text or textpath. + svgBase->OnNotifyRender(); + + if (svgBase->IsSvgNode()) { + svgBase->ChangeChildInheritValue(svgBase, attrName, value); + } + }; + CreatePropertyAnimation(svgAnimate, originalValue, std::move(callback), evaluator); +} + +template +void RenderSvgBase::ChangeChildInheritValue(const RefPtr& svgBase, const std::string& attrName, T value) +{ + if (!svgBase) { + LOGE("ChangeChildInheritValue failed, svgBase is null"); + return; + } + auto renderChildren = svgBase->GetChildren(); + for (const auto& item : renderChildren) { + if (!item->GetVisible()) { + continue; + } + auto child = AceType::DynamicCast(item); + if (child && !child->IsSelfValue(attrName) && !child->HasAnimator(attrName)) { + if (child->SetPresentationProperty(attrName, value, false)) { + child->MarkNeedRender(true); + } + } + ChangeChildInheritValue(item, attrName, value); + } +} + +bool RenderSvgBase::PrepareBaseAnimation(const RefPtr& svgAnimate) +{ + auto attrName = svgAnimate->GetAttributeName(); + if (COLOR_PROPER_GETTERS.find(attrName) != COLOR_PROPER_GETTERS.end()) { + Color originalValue = COLOR_PROPER_GETTERS.find(attrName)->second(*this); + RefPtr> evaluator = AceType::MakeRefPtr(); + PreparePresentationAnimation(svgAnimate, originalValue, evaluator); + } else if (DIMENSION_PROPER_GETTERS.find(attrName) != DIMENSION_PROPER_GETTERS.end()) { + Dimension originalValue = DIMENSION_PROPER_GETTERS.find(attrName)->second(*this); + RefPtr> evaluator = AceType::MakeRefPtr>(); + PreparePresentationAnimation(svgAnimate, originalValue, evaluator); + } else if (DOUBLE_PROPER_GETTERS.find(attrName) != DOUBLE_PROPER_GETTERS.end()) { + double originalValue = DOUBLE_PROPER_GETTERS.find(attrName)->second(*this); + RefPtr> evaluator = AceType::MakeRefPtr>(); + PreparePresentationAnimation(svgAnimate, originalValue, evaluator); + } else { + return false; + } + return true; +} + +template +bool RenderSvgBase::CreatePropertyAnimation(const RefPtr& svgAnimate, const T& originalValue, + std::function&& callback, const RefPtr>& evaluator) +{ + if (!svgAnimate) { + LOGE("create property animation failed, svgAnimate is null"); + return false; + } + auto animatorIter = animators_.find(svgAnimate->GetAttributeName()); + if (animatorIter != animators_.end()) { + if (!animatorIter->second->IsStopped()) { + animatorIter->second->Stop(); + } + animatorIter->second->ClearInterpolators(); + auto animator = animatorIter->second; + if (!svgAnimate->CreatePropertyAnimate(std::move(callback), originalValue, evaluator, animator)) { + animators_.erase(animatorIter); + } + } else { + auto animator = AceType::MakeRefPtr(context_); + if (svgAnimate->CreatePropertyAnimate(std::move(callback), originalValue, evaluator, animator)) { + animators_.emplace(svgAnimate->GetAttributeName(), animator); + } + } + return true; +} + +bool RenderSvgBase::PrepareAnimateMotion(const RefPtr& svgAnimate) +{ + if (!svgAnimate || svgAnimate->GetSvgAnimateType() != SvgAnimateType::MOTION) { + LOGE("create motion animation failed, svgAnimate is null"); + return false; + } + std::function callback; + callback = [weak = AceType::WeakClaim(this), path = svgAnimate->GetPath(), + rotate = svgAnimate->GetRotate()](double value) { + auto sharp = weak.Upgrade(); + if (!sharp) { + LOGE("sharp is null"); + return; + } + Point point; + if (!sharp->GetStartPoint(point)) { + return; + } + sharp->UpdateMotion(path, rotate, value, point); + sharp->MarkNeedLayout(true); + }; + + auto animatorIter = animators_.find(ANIMATOR_TYPE_MOTION); + if (animatorIter != animators_.end()) { + if (!animatorIter->second->IsStopped()) { + animatorIter->second->Stop(); + } + animatorIter->second->ClearInterpolators(); + auto animator = animatorIter->second; + if (!svgAnimate->CreateMotionAnimate(std::move(callback), animator)) { + animators_.erase(animatorIter); + } + } else { + auto animator = AceType::MakeRefPtr(context_); + if (svgAnimate->CreateMotionAnimate(std::move(callback), animator)) { + animators_.emplace(ANIMATOR_TYPE_MOTION, animator); + } + } + return true; +} + +void RenderSvgBase::PrepareWeightAnimate(const RefPtr& svgAnimate, std::vector& valueVector, + const std::string& originalValue, bool& isBy) +{ + if (!svgAnimate->GetValues().empty()) { + valueVector = svgAnimate->GetValues(); + valueVector.insert(valueVector.begin(), originalValue); + std::vector newValues; + int32_t size = svgAnimate->GetValues().size(); + for (int32_t i = 0; i < size; i++) { + newValues.emplace_back(std::to_string(i)); + } + svgAnimate->SetValues(newValues); + } else { + std::string from = svgAnimate->GetFrom().empty() ? originalValue : svgAnimate->GetFrom(); + if (!svgAnimate->GetTo().empty()) { + valueVector.emplace_back(from); + valueVector.emplace_back(svgAnimate->GetTo()); + svgAnimate->SetFrom(std::to_string(START_VALUE)); + svgAnimate->SetTo(std::to_string(END_VALUE)); + } else if (!svgAnimate->GetBy().empty()) { + valueVector.emplace_back(from); + valueVector.emplace_back(svgAnimate->GetBy()); + svgAnimate->SetFrom(std::to_string(START_VALUE)); + svgAnimate->SetTo(std::to_string(END_VALUE)); + isBy = true; + } else { + if (from == originalValue) { + return; + } + valueVector.emplace_back(originalValue); + valueVector.emplace_back(from); + svgAnimate->SetFrom(std::to_string(START_VALUE)); + svgAnimate->SetTo(std::to_string(END_VALUE)); + } + } +} + +template +bool RenderSvgBase::SetPresentationProperty(const std::string& attrName, const T& val, bool isSelf) +{ + return false; +} + +template<> +bool RenderSvgBase::SetPresentationProperty(const std::string& attrName, const Color& val, bool isSelf) +{ + if (attrName == ATTR_NAME_FILL) { + fillState_.SetColor(val, isSelf); + } else if (attrName == ATTR_NAME_STROKE) { + strokeState_.SetColor(val, isSelf); + } else { + return false; + } + return true; +} + +template<> +bool RenderSvgBase::SetPresentationProperty(const std::string& attrName, const Dimension& val, bool isSelf) +{ + if (attrName == ATTR_NAME_STROKE_WIDTH) { + strokeState_.SetLineWidth(val, isSelf); + } else if (attrName == ATTR_NAME_FONT_SIZE) { + textStyle_.SetFontSize(val, isSelf); + } else { + return false; + } + return true; +} + +template<> +bool RenderSvgBase::SetPresentationProperty(const std::string& attrName, const double& val, bool isSelf) +{ + if (attrName == ATTR_NAME_FILL_OPACITY) { + fillState_.SetOpacity(val, isSelf); + } else if (attrName == ATTR_NAME_STROKE_OPACITY) { + strokeState_.SetOpacity(val, isSelf); + } else if (attrName == ATTR_NAME_LETTER_SPACING) { + textStyle_.SetLetterSpacing(val, isSelf); + } else if (attrName == ATTR_NAME_MITER_LIMIT) { + strokeState_.SetMiterLimit(val, isSelf); + } else if (attrName == ATTR_NAME_STROKE_DASHOFFSET) { + strokeState_.SetLineDashOffset(val, isSelf); + } else if (attrName == ATTR_NAME_OPACITY) { + opacity_ = static_cast(round(val * UINT8_MAX)); + } else { + return false; + } + return true; +} + +bool RenderSvgBase::IsSelfValue(const std::string& attrName) +{ + if (attrName == ATTR_NAME_FILL_OPACITY) { + return fillState_.HasOpacity(); + } else if (attrName == ATTR_NAME_STROKE_OPACITY) { + return strokeState_.HasOpacity(); + } else if (attrName == ATTR_NAME_LETTER_SPACING) { + return textStyle_.HasLetterSpacing(); + } else if (attrName == ATTR_NAME_MITER_LIMIT) { + return strokeState_.HasMiterLimit(); + } else if (attrName == ATTR_NAME_STROKE_DASHOFFSET) { + return strokeState_.HasDashOffset(); + } else if (attrName == ATTR_NAME_STROKE_WIDTH) { + return strokeState_.HasLineWidth(); + } else if (attrName == ATTR_NAME_FONT_SIZE) { + return textStyle_.HasFontSize(); + } else if (attrName == ATTR_NAME_FILL) { + return fillState_.HasColor(); + } else if (attrName == ATTR_NAME_STROKE) { + return strokeState_.HasColor(); + } else { + return true; + } +} + +bool RenderSvgBase::HasAnimator(const std::string& attrName) +{ + return !animators_.empty() && animators_.find(attrName) != animators_.end(); +} + +void RenderSvgBase::PrepareAnimation(const std::list>& componentChildren) +{ + for (const auto& childComponent : componentChildren) { + auto svgAnimate = AceType::DynamicCast(childComponent); + if (!svgAnimate) { + LOGE("animateComponent is null"); + continue; + } + if (!PrepareAnimateMotion(svgAnimate)) { + PreparePropertyAnimation(svgAnimate); + } + } +} + +bool RenderSvgBase::PreparePropertyAnimation(const RefPtr& svgAnimate) +{ + if (svgAnimate->GetSvgAnimateType() != SvgAnimateType::ANIMATE) { + return false; + } + if (!PrepareSelfAnimation(svgAnimate)) { + PrepareBaseAnimation(svgAnimate); + } + return true; +} + +template bool RenderSvgBase::CreatePropertyAnimation(const RefPtr& svgAnimate, const Color& originalValue, + std::function&& callback, const RefPtr>& evaluator); +template bool RenderSvgBase::CreatePropertyAnimation(const RefPtr& svgAnimate, + const Dimension& originalValue, std::function&& callback, + const RefPtr>& evaluator); +template bool RenderSvgBase::CreatePropertyAnimation(const RefPtr& svgAnimate, + const double& originalValue, std::function&& callback, const RefPtr>& evaluator); +template void RenderSvgBase::PreparePresentationAnimation(const RefPtr& svgAnimate, const Dimension& value, + const RefPtr>& evaluator); +template void RenderSvgBase::PreparePresentationAnimation(const RefPtr& svgAnimate, const Color& value, + const RefPtr>& evaluator); +template void RenderSvgBase::PreparePresentationAnimation(const RefPtr& svgAnimate, const double& value, + const RefPtr>& evaluator); + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/svg/render_svg_base.h b/frameworks/core/components/svg/render_svg_base.h new file mode 100644 index 00000000..59b06da2 --- /dev/null +++ b/frameworks/core/components/svg/render_svg_base.h @@ -0,0 +1,117 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_RENDER_SVG_BASE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_RENDER_SVG_BASE_H + +#include "frameworks/core/animation/animator.h" +#include "frameworks/core/animation/keyframe_animation.h" +#include "frameworks/core/animation/svg_animate.h" +#include "frameworks/core/components/common/properties/svg_paint_state.h" +#include "frameworks/core/components/svg/svg_animate_component.h" +#include "frameworks/core/components/svg/svg_sharp.h" +#include "frameworks/core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +const char ATTR_NAME_WIDTH[] = "width"; +const char ATTR_NAME_HEIGHT[] = "height"; +const char ATTR_NAME_X[] = "x"; +const char ATTR_NAME_Y[] = "y"; +const char ATTR_NAME_RX[] = "rx"; +const char ATTR_NAME_RY[] = "ry"; +const char ATTR_NAME_OPACITY[] = "opacity"; + +class RenderSvgBase : public RenderNode { + DECLARE_ACE_TYPE(RenderSvgBase, RenderNode); + +public: + ~RenderSvgBase() override; + virtual void UpdateMotion(const std::string& path, const std::string& rotate, + double percent, const Point& point) {}; + + virtual bool GetStartPoint(Point& point) + { + return false; + } + + virtual bool PrepareSelfAnimation(const RefPtr& SvgAnimate) + { + return false; + } + + const FillState& GetFillState() const + { + return fillState_; + } + + const StrokeState GetStrokeState() const + { + return strokeState_; + } + + const SvgTextStyle GetTextStyle() const + { + return textStyle_; + } + + bool IsSvgNode() const + { + return isSvgNode_; + } + +protected: + bool PrepareBaseAnimation(const RefPtr& animateComponent); + template + bool CreatePropertyAnimation(const RefPtr& component, const T& originalValue, + std::function&& callback, const RefPtr>& evaluator); + template + bool SetPresentationProperty(const std::string& attrName, const T& val, bool isSelf = true); + + double ConvertDimensionToPx(const Dimension& value, double baseValue); + + void SetPresentationAttrs(const RefPtr& svgSharp); + + void PrepareWeightAnimate(const RefPtr& svgAnimate, std::vector& valueVector, + const std::string& originalValue, bool& isBy); + + void PrepareAnimation(const std::list>& componentChildren); + bool PreparePropertyAnimation(const RefPtr& svgAnimate); + + FillState fillState_; + StrokeState strokeState_; + SvgTextStyle textStyle_; + std::unordered_map> animators_; + bool isSvgNode_ = false; + + virtual void OnNotifyRender() + { + MarkNeedRender(true); + } + +private: + template + void PreparePresentationAnimation(const RefPtr& svgAnimate, const T& originalValue, + const RefPtr>& evaluator); + bool PrepareAnimateMotion(const RefPtr& svgAnimate); + template + void ChangeChildInheritValue(const RefPtr& svgBase, const std::string& attrName, T value); + bool IsSelfValue(const std::string& attrName); + bool HasAnimator(const std::string& attrName); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_RENDER_SVG_BASE_H diff --git a/frameworks/core/components/svg/render_svg_circle.cpp b/frameworks/core/components/svg/render_svg_circle.cpp new file mode 100644 index 00000000..8a5665c6 --- /dev/null +++ b/frameworks/core/components/svg/render_svg_circle.cpp @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/core/components/svg/render_svg_circle.h" + +#include "frameworks/core/components/svg/svg_circle_component.h" + +namespace OHOS::Ace { +namespace { + +const char ATTR_NAME_CX[] = "cx"; +const char ATTR_NAME_CY[] = "cy"; +const char ATTR_NAME_R[] = "r"; + +} // namespace + +void RenderSvgCircle::Update(const RefPtr &component) +{ + const RefPtr circleComponent = AceType::DynamicCast(component); + if (!circleComponent) { + LOGW("circle component is null"); + return; + } + cx_ = circleComponent->GetCx(); + cy_ = circleComponent->GetCy(); + r_ = circleComponent->GetR(); + fillState_ = circleComponent->GetFillState(); + strokeState_ = circleComponent->GetStrokeState(); + PrepareAnimations(component); + MarkNeedLayout(); +} + +void RenderSvgCircle::PrepareAnimations(const RefPtr &component) +{ + const RefPtr circleComponent = AceType::DynamicCast(component); + if (!circleComponent) { + LOGW("circle component is null"); + return; + } + const auto& componentChildren = circleComponent->GetChildren(); + RenderSvgBase::PrepareAnimation(componentChildren); +} + +bool RenderSvgCircle::PrepareSelfAnimation(const RefPtr& svgAnimate) +{ + Dimension originalValue; + if (!GetProperty(svgAnimate->GetAttributeName(), originalValue)) { + return false; + } + std::function callback; + callback = [weak = AceType::WeakClaim(this), attributeName = svgAnimate->GetAttributeName()]( + Dimension value) { + auto circle = weak.Upgrade(); + if (!circle) { + LOGE("circle is null"); + return; + } + if (circle->SetProperty(attributeName, value)) { + circle->MarkNeedLayout(true); + } + }; + RefPtr> evaluator = AceType::MakeRefPtr>(); + CreatePropertyAnimation(svgAnimate, originalValue, std::move(callback), evaluator); + return true; +} + +bool RenderSvgCircle::SetProperty(const std::string& attrName, const Dimension& value) +{ + if (attrName == ATTR_NAME_CX) { + cx_ = value; + } else if (attrName == ATTR_NAME_CY) { + cy_ = value; + } else if (attrName == ATTR_NAME_R) { + r_ = value; + } else { + LOGE("invalid attrName"); + return false; + } + return true; +} + +bool RenderSvgCircle::GetProperty(const std::string& attrName, Dimension& dimension) const +{ + if (attrName == ATTR_NAME_CX) { + dimension = cx_; + } else if (attrName == ATTR_NAME_CY) { + dimension = cy_; + } else if (attrName == ATTR_NAME_R) { + dimension = r_; + } else { + LOGE("invalid attrName"); + return false; + } + return true; +} + +void RenderSvgCircle::PerformLayout() +{ + LayoutParam layoutParam = GetLayoutParam(); + SetLayoutSize(layoutParam.GetMaxSize()); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/svg/render_svg_circle.h b/frameworks/core/components/svg/render_svg_circle.h new file mode 100644 index 00000000..f8b9beea --- /dev/null +++ b/frameworks/core/components/svg/render_svg_circle.h @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_RENDER_SVG_CIRCLE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_RENDER_SVG_CIRCLE_H + +#include "frameworks/core/components/svg/render_svg_base.h" + +namespace OHOS::Ace { + +class RenderSvgCircle : public RenderSvgBase { + DECLARE_ACE_TYPE(RenderSvgCircle, RenderSvgBase); + +public: + static RefPtr Create(); + + void Update(const RefPtr& component) override; + void PerformLayout() override; + bool PrepareSelfAnimation(const RefPtr& svgAnimate) override; + + const Dimension& GetCx() const + { + return cx_; + } + + const Dimension& GetCy() const + { + return cy_; + } + + const Dimension& GetR() const + { + return r_; + } + +protected: + Dimension cx_; + Dimension cy_; + Dimension r_; + +private: + void PrepareAnimations(const RefPtr& component); + bool SetProperty(const std::string& attributeName, const Dimension& value); + bool GetProperty(const std::string& attributeName, Dimension& dimension) const; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_RENDER_SVG_CIRCLE_H diff --git a/frameworks/core/components/svg/render_svg_ellipse.cpp b/frameworks/core/components/svg/render_svg_ellipse.cpp new file mode 100644 index 00000000..35b1a9bb --- /dev/null +++ b/frameworks/core/components/svg/render_svg_ellipse.cpp @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/core/components/svg/render_svg_ellipse.h" + +#include "frameworks/core/components/svg/svg_ellipse_component.h" + +namespace OHOS::Ace { +namespace { + +const char ATTR_CX[] = "cx"; +const char ATTR_CY[] = "cy"; +const char ATTR_RX[] = "rx"; +const char ATTR_RY[] = "ry"; + +} // namespace + +void RenderSvgEllipse::Update(const RefPtr& component) +{ + const RefPtr ellipseComponent = AceType::DynamicCast(component); + if (!ellipseComponent) { + LOGW("ellipse component is null"); + return; + } + cx_ = ellipseComponent->GetCx(); + cy_ = ellipseComponent->GetCy(); + rx_ = ellipseComponent->GetRx(); + ry_ = ellipseComponent->GetRy(); + fillState_ = ellipseComponent->GetFillState(); + strokeState_ = ellipseComponent->GetStrokeState(); + PrepareAnimations(component); + MarkNeedLayout(); +} + +void RenderSvgEllipse::PrepareAnimations(const RefPtr &component) +{ + const RefPtr ellipseComponent = AceType::DynamicCast(component); + if (!ellipseComponent) { + LOGW("ellipse component is null"); + return; + } + const auto& componentChildren = ellipseComponent->GetChildren(); + RenderSvgBase::PrepareAnimation(componentChildren); +} + +bool RenderSvgEllipse::PrepareSelfAnimation(const RefPtr& svgAnimate) +{ + Dimension originalValue; + if (!GetProperty(svgAnimate->GetAttributeName(), originalValue)) { + return false; + } + std::function callback; + callback = [weak = AceType::WeakClaim(this), attributeName = svgAnimate->GetAttributeName()]( + Dimension value) { + auto ellipse = weak.Upgrade(); + if (!ellipse) { + LOGE("ellipse is null"); + return; + } + if (ellipse->SetProperty(attributeName, value)) { + ellipse->MarkNeedLayout(true); + } + }; + RefPtr> evaluator = AceType::MakeRefPtr>(); + CreatePropertyAnimation(svgAnimate, originalValue, std::move(callback), evaluator); + return true; +} + +bool RenderSvgEllipse::SetProperty(const std::string& attrName, const Dimension& value) +{ + if (attrName == ATTR_CX) { + cx_ = value; + } else if (attrName == ATTR_CY) { + cy_ = value; + } else if (attrName == ATTR_RX) { + rx_ = value; + } else if (attrName == ATTR_RY) { + ry_ = value; + } else { + LOGE("invalid attrName"); + return false; + } + return true; +} + +bool RenderSvgEllipse::GetProperty(const std::string& attrName, Dimension& dimension) const +{ + if (attrName == ATTR_CX) { + dimension = cx_; + } else if (attrName == ATTR_CY) { + dimension = cy_; + } else if (attrName == ATTR_RX) { + dimension = rx_; + } else if (attrName == ATTR_RY) { + dimension = ry_; + } else { + LOGE("invalid attrName"); + return false; + } + return true; +} + +void RenderSvgEllipse::PerformLayout() +{ + LayoutParam layoutParam = GetLayoutParam(); + SetLayoutSize(layoutParam.GetMaxSize()); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/svg/render_svg_ellipse.h b/frameworks/core/components/svg/render_svg_ellipse.h new file mode 100644 index 00000000..a25eb31a --- /dev/null +++ b/frameworks/core/components/svg/render_svg_ellipse.h @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_RENDER_SVG_ELLIPSE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_RENDER_SVG_ELLIPSE_H + +#include "frameworks/core/components/svg/render_svg_base.h" + +namespace OHOS::Ace { + +class RenderSvgEllipse : public RenderSvgBase { + DECLARE_ACE_TYPE(RenderSvgEllipse, RenderSvgBase); + +public: + static RefPtr Create(); + + void Update(const RefPtr& component) override; + void PerformLayout() override; + bool PrepareSelfAnimation(const RefPtr& svgAnimate) override; + + const Dimension& GetCx() const + { + return cx_; + } + + const Dimension& GetCy() const + { + return cy_; + } + + const Dimension& GetRx() const + { + return rx_; + } + + const Dimension& GetRy() const + { + return ry_; + } + +protected: + Dimension cx_; + Dimension cy_; + Dimension rx_; + Dimension ry_; + +private: + void PrepareAnimations(const RefPtr& component); + bool SetProperty(const std::string& attributeName, const Dimension& value); + bool GetProperty(const std::string& attributeName, Dimension& dimension) const; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_RENDER_SVG_ELLIPSE_H diff --git a/frameworks/core/components/svg/render_svg_line.cpp b/frameworks/core/components/svg/render_svg_line.cpp new file mode 100644 index 00000000..f4657785 --- /dev/null +++ b/frameworks/core/components/svg/render_svg_line.cpp @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/core/components/svg/render_svg_line.h" + +#include "frameworks/core/components/svg/svg_line_component.h" + +namespace OHOS::Ace { +namespace { + +const char ATTR_NAME_X1[] = "x1"; +const char ATTR_NAME_X2[] = "x2"; +const char ATTR_NAME_Y1[] = "y1"; +const char ATTR_NAME_Y2[] = "y2"; + +} // namespace + +void RenderSvgLine::Update(const RefPtr &component) +{ + const RefPtr lineComponent = AceType::DynamicCast(component); + if (!lineComponent) { + LOGW("line component is null"); + return; + } + x1_ = lineComponent->GetX1(); + x2_ = lineComponent->GetX2(); + y1_ = lineComponent->GetY1(); + y2_ = lineComponent->GetY2(); + fillState_ = lineComponent->GetFillState(); + strokeState_ = lineComponent->GetStrokeState(); + + PrepareAnimations(component); + MarkNeedLayout(); +} + +void RenderSvgLine::PerformLayout() +{ + LayoutParam layoutParam = GetLayoutParam(); + SetLayoutSize(layoutParam.GetMaxSize()); +} + +void RenderSvgLine::PrepareAnimations(const RefPtr &component) +{ + const RefPtr lineComponent = AceType::DynamicCast(component); + if (!lineComponent) { + LOGW("line component is null"); + return; + } + const auto& componentChildren = lineComponent->GetChildren(); + RenderSvgBase::PrepareAnimation(componentChildren); +} + +bool RenderSvgLine::PrepareSelfAnimation(const RefPtr& svgAnimate) +{ + Dimension originalValue; + if (!GetProperty(svgAnimate->GetAttributeName(), originalValue)) { + return false; + } + std::function callback; + callback = [weakLine = AceType::WeakClaim(this), attrName = svgAnimate->GetAttributeName()]( + Dimension value) { + auto line = weakLine.Upgrade(); + if (!line) { + LOGE("line is null"); + return; + } + if (line->SetProperty(attrName, value)) { + line->MarkNeedLayout(true); + } + }; + RefPtr> evaluator = AceType::MakeRefPtr>(); + CreatePropertyAnimation(svgAnimate, originalValue, std::move(callback), evaluator); + return true; +} + +bool RenderSvgLine::SetProperty(const std::string& attrName, const Dimension& value) +{ + if (attrName == ATTR_NAME_X1) { + x1_ = value; + } else if (attrName == ATTR_NAME_X2) { + x2_ = value; + } else if (attrName == ATTR_NAME_Y1) { + y1_ = value; + } else if (attrName == ATTR_NAME_Y2) { + y2_ = value; + } else { + LOGE("invalid attrName"); + return false; + } + return true; +} + +bool RenderSvgLine::GetProperty(const std::string& attrName, Dimension& dimension) const +{ + if (attrName == ATTR_NAME_X1) { + dimension = x1_; + } else if (attrName == ATTR_NAME_X2) { + dimension = x2_; + } else if (attrName == ATTR_NAME_Y1) { + dimension = y1_; + } else if (attrName == ATTR_NAME_Y2) { + dimension = y2_; + } else { + LOGE("invalid attrName"); + return false; + } + return true; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/svg/render_svg_line.h b/frameworks/core/components/svg/render_svg_line.h new file mode 100644 index 00000000..3af17d04 --- /dev/null +++ b/frameworks/core/components/svg/render_svg_line.h @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_RENDER_SVG_LINE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_RENDER_SVG_LINE_H + +#include "frameworks/core/components/svg/render_svg_base.h" + +namespace OHOS::Ace { + +class RenderSvgLine : public RenderSvgBase { + DECLARE_ACE_TYPE(RenderSvgLine, RenderSvgBase); + +public: + static RefPtr Create(); + + void Update(const RefPtr& component) override; + void PerformLayout() override; + bool PrepareSelfAnimation(const RefPtr& svgAnimate) override; + + const Dimension& GetX1() const + { + return x1_; + } + + const Dimension& GetY1() const + { + return y1_; + } + + const Dimension& GetX2() const + { + return x2_; + } + + const Dimension& GetY2() const + { + return y2_; + } + +protected: + Dimension x1_; + Dimension y1_; + Dimension x2_; + Dimension y2_; + +private: + void PrepareAnimations(const RefPtr& component); + bool SetProperty(const std::string& attrName, const Dimension& value); + bool GetProperty(const std::string& attrName, Dimension& dimension) const; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_RENDER_SVG_LINE_H diff --git a/frameworks/core/components/svg/render_svg_path.cpp b/frameworks/core/components/svg/render_svg_path.cpp new file mode 100644 index 00000000..76316417 --- /dev/null +++ b/frameworks/core/components/svg/render_svg_path.cpp @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/core/components/svg/render_svg_path.h" + +#include "frameworks/core/components/svg/svg_path_component.h" + +namespace OHOS::Ace { +namespace { + +const char ATTR_NAME_D[] = "d"; + +} // namespace + +void RenderSvgPath::Update(const RefPtr &component) +{ + const RefPtr pathComponent = AceType::DynamicCast(component); + if (!pathComponent) { + LOGW("path component is null"); + return; + } + d_ = pathComponent->GetD(); + fillState_ = pathComponent->GetFillState(); + strokeState_ = pathComponent->GetStrokeState(); + + PrepareAnimations(component); + MarkNeedLayout(); +} + +void RenderSvgPath::PerformLayout() +{ + LayoutParam layoutParam = GetLayoutParam(); + SetLayoutSize(layoutParam.GetMaxSize()); +} + +void RenderSvgPath::PrepareAnimations(const RefPtr &component) +{ + const RefPtr pathComponent = AceType::DynamicCast(component); + if (!pathComponent) { + LOGW("path component is null"); + return; + } + const auto &componentChildren = pathComponent->GetChildren(); + RenderSvgBase::PrepareAnimation(componentChildren); +} + +bool RenderSvgPath::PrepareSelfAnimation(const RefPtr& component) +{ + if (component->GetAttributeName() != ATTR_NAME_D) { + return false; + } + auto svgAnimate = AceType::MakeRefPtr(); + component->Copy(svgAnimate); + paths_.clear(); + PrepareWeightAnimate(svgAnimate, paths_, d_, isBy_); + std::function callback; + callback = [weak = AceType::WeakClaim(this)](double value) { + auto svgPath = weak.Upgrade(); + if (!svgPath) { + LOGE("svgPath is null"); + return; + } + svgPath->SetWeight(value); + svgPath->MarkNeedLayout(true); + }; + RefPtr> evaluator = AceType::MakeRefPtr>(); + double originalValue = 0.0; + CreatePropertyAnimation(svgAnimate, originalValue, std::move(callback), evaluator); + return true; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/svg/render_svg_path.h b/frameworks/core/components/svg/render_svg_path.h new file mode 100644 index 00000000..f9ecc19b --- /dev/null +++ b/frameworks/core/components/svg/render_svg_path.h @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_RENDER_SVG_PATH_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_RENDER_SVG_PATH_H + +#include "frameworks/core/components/svg/render_svg_base.h" + +namespace OHOS::Ace { + +class RenderSvgPath : public RenderSvgBase { + DECLARE_ACE_TYPE(RenderSvgPath, RenderSvgBase); + +public: + using SvgPath = std::vector>>; + + static RefPtr Create(); + + void Update(const RefPtr& component) override; + void PerformLayout() override; + bool PrepareSelfAnimation(const RefPtr& svgAnimate) override; + + void SetWeight(float weight) + { + weight_ = weight; + } + + const std::string& GetD() const + { + return d_; + } + +protected: + std::string d_; + float weight_ = 0.0f; + std::vector paths_; + bool isBy_ = false; + +private: + void PrepareAnimations(const RefPtr& component); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_RENDER_SVG_PATH_H diff --git a/frameworks/core/components/svg/render_svg_polygon.cpp b/frameworks/core/components/svg/render_svg_polygon.cpp new file mode 100644 index 00000000..3c5ace15 --- /dev/null +++ b/frameworks/core/components/svg/render_svg_polygon.cpp @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/core/components/svg/render_svg_polygon.h" + +#include "frameworks/core/components/svg/svg_polygon_component.h" + +namespace OHOS::Ace { +namespace { + +const char ATTR_NAME_POLYGON_POINTS[] = "points"; + +} // namespace + +void RenderSvgPolygon::Update(const RefPtr &component) +{ + const RefPtr polygonComponent = AceType::DynamicCast(component); + if (!polygonComponent) { + LOGW("polygon component is null"); + return; + } + points_ = polygonComponent->GetPoints(); + fillState_ = polygonComponent->GetFillState(); + strokeState_ = polygonComponent->GetStrokeState(); + PrepareAnimations(component); + MarkNeedLayout(); +} + +void RenderSvgPolygon::PerformLayout() +{ + LayoutParam layoutParam = GetLayoutParam(); + SetLayoutSize(layoutParam.GetMaxSize()); +} + +void RenderSvgPolygon::PrepareAnimations(const RefPtr &component) +{ + const RefPtr polygonComponent = AceType::DynamicCast(component); + if (!polygonComponent) { + LOGW("polygon component is null"); + return; + } + const auto &componentChildren = polygonComponent->GetChildren(); + RenderSvgBase::PrepareAnimation(componentChildren); +} + +bool RenderSvgPolygon::PrepareSelfAnimation(const RefPtr& component) +{ + if (component->GetAttributeName() != ATTR_NAME_POLYGON_POINTS) { + return false; + } + auto svgAnimate = AceType::MakeRefPtr(); + component->Copy(svgAnimate); + pointsVector_.clear(); + + PrepareWeightAnimate(svgAnimate, pointsVector_, points_, isBy_); + + std::function callback; + callback = [weak = AceType::WeakClaim(this)](double value) { + auto svgPath = weak.Upgrade(); + if (!svgPath) { + LOGE("svgPolygon is null"); + return; + } + svgPath->SetWeight(value); + svgPath->MarkNeedLayout(true); + }; + RefPtr> evaluator = AceType::MakeRefPtr>(); + double originalValue = 0.0; + CreatePropertyAnimation(svgAnimate, originalValue, std::move(callback), evaluator); + return true; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/svg/render_svg_polygon.h b/frameworks/core/components/svg/render_svg_polygon.h new file mode 100644 index 00000000..fb4535fa --- /dev/null +++ b/frameworks/core/components/svg/render_svg_polygon.h @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_RENDER_SVG_POLYGON_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_RENDER_SVG_POLYGON_H + +#include "frameworks/core/components/svg/render_svg_base.h" + +namespace OHOS::Ace { + +class RenderSvgPolygon : public RenderSvgBase { + DECLARE_ACE_TYPE(RenderSvgPolygon, RenderSvgBase); + +public: + static RefPtr Create(); + + void Update(const RefPtr& component) override; + void PerformLayout() override; + bool PrepareSelfAnimation(const RefPtr& svgAnimate) override; + + void SetPoints(const std::string& points) + { + points_ = points; + } + + void SetWeight(float weight) + { + weight_ = weight; + } + + const std::string& GetPoints() const + { + return points_; + } + +protected: + std::string points_; + float weight_ = 0.0f; + std::vector pointsVector_; + bool isBy_ = false; + +private: + void PrepareAnimations(const RefPtr& component); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_RENDER_SVG_POLYGON_H diff --git a/frameworks/core/components/svg/render_svg_polyline.cpp b/frameworks/core/components/svg/render_svg_polyline.cpp new file mode 100644 index 00000000..626f4fc1 --- /dev/null +++ b/frameworks/core/components/svg/render_svg_polyline.cpp @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/core/components/svg/render_svg_polyline.h" + +#include "frameworks/core/components/svg/svg_polyline_component.h" + +namespace OHOS::Ace { +namespace { + +const char ATTR_NAME_POINTS[] = "points"; + +} // namespace + +void RenderSvgPolyline::Update(const RefPtr &component) +{ + const RefPtr polylineComponent = AceType::DynamicCast(component); + if (!polylineComponent) { + LOGW("polyline component is null"); + return; + } + points_ = polylineComponent->GetPoints(); + fillState_ = polylineComponent->GetFillState(); + strokeState_ = polylineComponent->GetStrokeState(); + PrepareAnimations(component); + MarkNeedLayout(); +} + +void RenderSvgPolyline::PerformLayout() +{ + LayoutParam layoutParam = GetLayoutParam(); + SetLayoutSize(layoutParam.GetMaxSize()); +} + +void RenderSvgPolyline::PrepareAnimations(const RefPtr &component) +{ + const RefPtr polylineComponent = AceType::DynamicCast(component); + if (!polylineComponent) { + LOGW("polyline component is null"); + return; + } + const auto &componentChildren = polylineComponent->GetChildren(); + RenderSvgBase::PrepareAnimation(componentChildren); +} + +bool RenderSvgPolyline::PrepareSelfAnimation(const RefPtr& component) +{ + if (component->GetAttributeName() != ATTR_NAME_POINTS) { + return false; + } + auto svgAnimate = AceType::MakeRefPtr(); + component->Copy(svgAnimate); + pointsVector_.clear(); + + PrepareWeightAnimate(svgAnimate, pointsVector_, points_, isBy_); + + std::function callback; + callback = [weak = AceType::WeakClaim(this)](double value) { + auto svgPath = weak.Upgrade(); + if (!svgPath) { + LOGE("svgPolyline is null"); + return; + } + svgPath->SetWeight(value); + svgPath->MarkNeedLayout(true); + }; + RefPtr> evaluator = AceType::MakeRefPtr>(); + double originalValue = 0.0; + CreatePropertyAnimation(svgAnimate, originalValue, std::move(callback), evaluator); + return true; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/svg/render_svg_polyline.h b/frameworks/core/components/svg/render_svg_polyline.h new file mode 100644 index 00000000..02596a05 --- /dev/null +++ b/frameworks/core/components/svg/render_svg_polyline.h @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_RENDER_SVG_POLYLINE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_RENDER_SVG_POLYLINE_H + +#include "frameworks/core/components/svg/render_svg_base.h" + +namespace OHOS::Ace { + +class RenderSvgPolyline : public RenderSvgBase { + DECLARE_ACE_TYPE(RenderSvgPolyline, RenderSvgBase); + +public: + static RefPtr Create(); + + void Update(const RefPtr& component) override; + void PerformLayout() override; + bool PrepareSelfAnimation(const RefPtr& svgAnimate) override; + + void SetWeight(float weight) + { + weight_ = weight; + } + + const std::string& GetPoints() const + { + return points_; + } + +protected: + std::string points_; + float weight_ = 0.0f; + std::vector pointsVector_; + bool isBy_ = false; + +private: + void PrepareAnimations(const RefPtr& component); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_RENDER_SVG_POLYLINE_H diff --git a/frameworks/core/components/svg/render_svg_rect.cpp b/frameworks/core/components/svg/render_svg_rect.cpp new file mode 100644 index 00000000..70ea9088 --- /dev/null +++ b/frameworks/core/components/svg/render_svg_rect.cpp @@ -0,0 +1,123 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/core/components/svg/render_svg_rect.h" + +#include "frameworks/core/components/svg/svg_rect_component.h" + +namespace OHOS::Ace { + +void RenderSvgRect::Update(const RefPtr &component) +{ + const RefPtr rectComponent = AceType::DynamicCast(component); + if (!rectComponent) { + LOGW("rect component is null"); + return; + } + x_ = rectComponent->GetX(); + y_ = rectComponent->GetY(); + rx_ = rectComponent->GetRx(); + ry_ = rectComponent->GetRy(); + width_ = rectComponent->GetWidth(); + height_ = rectComponent->GetHeight(); + RenderSvgBase::SetPresentationAttrs(rectComponent); + PrepareAnimations(component); + MarkNeedLayout(); +} + +void RenderSvgRect::PrepareAnimations(const RefPtr &component) +{ + const RefPtr rectComponent = AceType::DynamicCast(component); + if (!rectComponent) { + LOGW("rect component is null"); + return; + } + const auto& componentChildren = rectComponent->GetChildren(); + RenderSvgBase::PrepareAnimation(componentChildren); +} + +bool RenderSvgRect::PrepareSelfAnimation(const RefPtr& svgAnimate) +{ + Dimension originalValue; + if (!GetProperty(svgAnimate->GetAttributeName(), originalValue)) { + return false; + } + std::function callback; + callback = [weakRect = AceType::WeakClaim(this), attributeName = svgAnimate->GetAttributeName()]( + Dimension value) { + auto rect = weakRect.Upgrade(); + if (!rect) { + LOGE("rect is null"); + return; + } + bool ret = rect->SetProperty(attributeName, value); + if (ret) { + rect->MarkNeedLayout(true); + } + }; + RefPtr> evaluator = AceType::MakeRefPtr>(); + CreatePropertyAnimation(svgAnimate, originalValue, std::move(callback), evaluator); + return true; +} + +bool RenderSvgRect::SetProperty(const std::string& attrName, const Dimension& value) +{ + if (attrName == ATTR_NAME_WIDTH) { + width_ = value; + } else if (attrName == ATTR_NAME_HEIGHT) { + height_ = value; + } else if (attrName == ATTR_NAME_X) { + x_ = value; + } else if (attrName == ATTR_NAME_Y) { + y_ = value; + } else if (attrName == ATTR_NAME_RX) { + rx_ = value; + } else if (attrName == ATTR_NAME_RY) { + ry_ = value; + } else { + LOGE("invalid attrName"); + return false; + } + return true; +} + +bool RenderSvgRect::GetProperty(const std::string& attrName, Dimension& dimension) const +{ + if (attrName == ATTR_NAME_WIDTH) { + dimension = width_; + } else if (attrName == ATTR_NAME_HEIGHT) { + dimension = height_; + } else if (attrName == ATTR_NAME_X) { + dimension = x_; + } else if (attrName == ATTR_NAME_Y) { + dimension = y_; + } else if (attrName == ATTR_NAME_RX) { + dimension = rx_; + } else if (attrName == ATTR_NAME_RY) { + dimension = ry_; + } else { + LOGE("invalid attrName"); + return false; + } + return true; +} + +void RenderSvgRect::PerformLayout() +{ + LayoutParam layoutParam = GetLayoutParam(); + SetLayoutSize(layoutParam.GetMaxSize()); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/svg/render_svg_rect.h b/frameworks/core/components/svg/render_svg_rect.h new file mode 100644 index 00000000..77e26f48 --- /dev/null +++ b/frameworks/core/components/svg/render_svg_rect.h @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_RENDER_SVG_RECT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_RENDER_SVG_RECT_H + +#include "frameworks/core/components/svg/render_svg_base.h" + +namespace OHOS::Ace { + +class RenderSvgRect : public RenderSvgBase { + DECLARE_ACE_TYPE(RenderSvgRect, RenderSvgBase); + +public: + static RefPtr Create(); + + void Update(const RefPtr& component) override; + void PerformLayout() override; + bool PrepareSelfAnimation(const RefPtr& svgAnimate) override; + + const Dimension& GetX() const + { + return x_; + } + + const Dimension& GetY() const + { + return y_; + } + + const Dimension& GetRx() const + { + return rx_; + } + + const Dimension& GetRy() const + { + return ry_; + } + + const Dimension& GetWidth() const + { + return width_; + } + + const Dimension& GetHeight() const + { + return height_; + } + +protected: + Dimension x_; + Dimension y_; + Dimension rx_; + Dimension ry_; + Dimension width_ = Dimension(-1.0); + Dimension height_ = Dimension(-1.0); + +private: + void PrepareAnimations(const RefPtr& component); + bool SetProperty(const std::string& attributeName, const Dimension& value); + bool GetProperty(const std::string& attrName, Dimension& dimension) const; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_RENDER_SVG_RECT_H diff --git a/frameworks/core/components/svg/render_svg_text.cpp b/frameworks/core/components/svg/render_svg_text.cpp new file mode 100644 index 00000000..bdab537b --- /dev/null +++ b/frameworks/core/components/svg/render_svg_text.cpp @@ -0,0 +1,140 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/core/components/svg/render_svg_text.h" + +#include "frameworks/core/animation/curve_animation.h" +#include "frameworks/core/components/svg/svg_text_component.h" + +namespace OHOS::Ace { +namespace { + +const char ATTR_NAME_DX[] = "dx"; +const char ATTR_NAME_DY[] = "dy"; +const char ATTR_NAME_ROTATE[] = "rotate"; +const char ATTR_NAME_TEXT_LENGTH[] = "textLength"; + +} // namespace + +void RenderSvgText::Update(const RefPtr &component) +{ + const RefPtr textComponent = AceType::DynamicCast(component); + if (!textComponent) { + LOGW("svg text component is null"); + return; + } + x_ = textComponent->GetX(); + y_ = textComponent->GetY(); + dx_ = textComponent->GetDx(); + dy_ = textComponent->GetDy(); + hasX_ = textComponent->GetHasX(); + hasY_ = textComponent->GetHasY(); + textLength_ = textComponent->GetTextLength(); + lengthAdjust_ = textComponent->GetLengthAdjust(); + textData_ = textComponent->GetTextData(); + rotate_ = textComponent->GetRotate(); + RenderSvgBase::SetPresentationAttrs(textComponent); + PrepareAnimations(component); + MarkNeedLayout(); +} + +void RenderSvgText::PrepareAnimations(const RefPtr &component) +{ + const RefPtr textComponent = AceType::DynamicCast(component); + if (!textComponent) { + LOGW("svg text component is null"); + return; + } + const auto& componentChildren = textComponent->GetChildren(); + RenderSvgBase::PrepareAnimation(componentChildren); +} + +bool RenderSvgText::PrepareSelfAnimation(const RefPtr& svgAnimate) +{ + Dimension originalValue; + if (!GetProperty(svgAnimate->GetAttributeName(), originalValue)) { + return false; + } + std::function callback; + callback = [weakText = AceType::WeakClaim(this), attributeName = svgAnimate->GetAttributeName()]( + Dimension value) { + auto text = weakText.Upgrade(); + if (!text) { + LOGE("svg text is null"); + return; + } + bool ret = text->SetProperty(attributeName, value); + if (ret) { + text->OnNotifyRender(); + } + }; + RefPtr> evaluator = AceType::MakeRefPtr>(); + CreatePropertyAnimation(svgAnimate, originalValue, std::move(callback), evaluator); + return true; +} + +bool RenderSvgText::SetProperty(const std::string& attrName, const Dimension& value) +{ + if (attrName == ATTR_NAME_X) { + x_ = value; + hasX_ = true; + } else if (attrName == ATTR_NAME_Y) { + y_ = value; + hasY_ = true; + } else if (attrName == ATTR_NAME_DX) { + dx_ = value; + } else if (attrName == ATTR_NAME_DY) { + dy_ = value; + } else if (attrName == ATTR_NAME_ROTATE) { + rotate_ = value.Value(); + } else if (attrName == ATTR_NAME_TEXT_LENGTH) { + textLength_ = value; + } else { + return false; + } + return true; +} + +bool RenderSvgText::GetProperty(const std::string& attrName, Dimension& dimension) const +{ + if (attrName == ATTR_NAME_X) { + dimension = x_; + } else if (attrName == ATTR_NAME_Y) { + dimension = y_; + } else if (attrName == ATTR_NAME_DX) { + dimension = dx_; + } else if (attrName == ATTR_NAME_DY) { + dimension = dy_; + } else if (attrName == ATTR_NAME_ROTATE) { + dimension = Dimension(rotate_); + } else if (attrName == ATTR_NAME_TEXT_LENGTH) { + dimension = textLength_; + } else { + return false; + } + return true; +} + +void RenderSvgText::PerformLayout() +{ + LayoutParam layoutParam = GetLayoutParam(); + SetLayoutSize(layoutParam.GetMaxSize()); + const auto& children = GetChildren(); + for (const auto& child : children) { + child->Layout(GetLayoutParam()); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/svg/render_svg_text.h b/frameworks/core/components/svg/render_svg_text.h new file mode 100644 index 00000000..15c242e4 --- /dev/null +++ b/frameworks/core/components/svg/render_svg_text.h @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_RENDER_SVG_TEXT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_RENDER_SVG_TEXT_H + +#include "base/memory/ace_type.h" + +#include "frameworks/core/animation/animator.h" +#include "frameworks/core/components/common/properties/svg_paint_state.h" +#include "frameworks/core/components/svg/render_svg_base.h" +#include "frameworks/core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderSvgText : public RenderSvgBase { + DECLARE_ACE_TYPE(RenderSvgText, RenderSvgBase) + +public: + void Update(const RefPtr& component) override; + void PerformLayout() override; + bool PrepareSelfAnimation(const RefPtr& svgAnimate) override; + + const std::string& GetTextData() const + { + return textData_; + } + + void SetTextData(const std::string& textData) + { + textData_ = textData; + } + + const Dimension& GetX() const + { + return x_; + } + + const Dimension& GetY() const + { + return y_; + } + + const Dimension& GetDx() const + { + return dx_; + } + + const Dimension& GetDy() const + { + return dy_; + } + + const Dimension& GetTextLength() const + { + return textLength_; + } + + const std::string& GetLengthAdjust() const + { + return lengthAdjust_; + } + + double GetRotate() const + { + return rotate_; + } + +protected: + Dimension x_ = Dimension(0.0); + Dimension y_ = Dimension(0.0); + Dimension dx_ = Dimension(0.0); + Dimension dy_ = Dimension(0.0); + Dimension textLength_ = Dimension(0.0); + std::string lengthAdjust_ = "spacing"; // Value type: spacing | spacingAndGlyphs + std::string textData_; + double rotate_ = 0.0; + bool hasX_ = false; + bool hasY_ = false; + +private: + void PrepareAnimations(const RefPtr& component); + bool SetProperty(const std::string& attributeName, const Dimension& value); + bool GetProperty(const std::string& attrName, Dimension& dimension) const; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_RENDER_SVG_TEXT_H diff --git a/frameworks/core/components/svg/render_svg_text_path.cpp b/frameworks/core/components/svg/render_svg_text_path.cpp new file mode 100644 index 00000000..2351034a --- /dev/null +++ b/frameworks/core/components/svg/render_svg_text_path.cpp @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/core/components/svg/render_svg_text_path.h" + +#include "frameworks/core/animation/curve_animation.h" +#include "frameworks/core/components/svg/svg_text_path_component.h" + +namespace OHOS::Ace { +namespace { + +const char ATTR_NAME_TEXT_LENGTH[] = "textLength"; +const char ATTR_NAME_START_OFFSET[] = "startOffset"; + +} // namespace + +void RenderSvgTextPath::Update(const RefPtr &component) +{ + const RefPtr textPathComponent = AceType::DynamicCast(component); + if (!textPathComponent) { + LOGW("svg text path component is null"); + return; + } + + textLength_ = textPathComponent->GetTextLength(); + startOffset_ = textPathComponent->GetStartOffset(); + path_ = textPathComponent->GetPath(); + textData_ = textPathComponent->GetTextData(); + RenderSvgBase::SetPresentationAttrs(textPathComponent); + PrepareAnimations(component); + MarkNeedLayout(); +} + +void RenderSvgTextPath::PrepareAnimations(const RefPtr &component) +{ + const RefPtr textPathComponent = AceType::DynamicCast(component); + if (!textPathComponent) { + LOGW("svg text path component is null"); + return; + } + const auto& componentChildren = textPathComponent->GetChildren(); + RenderSvgBase::PrepareAnimation(componentChildren); +} + +bool RenderSvgTextPath::PrepareSelfAnimation(const RefPtr& svgAnimate) +{ + Dimension originalValue; + if (!GetProperty(svgAnimate->GetAttributeName(), originalValue)) { + return false; + } + std::function callback; + callback = [weakText = AceType::WeakClaim(this), attributeName = svgAnimate->GetAttributeName()]( + Dimension value) { + auto textPath = weakText.Upgrade(); + if (!textPath) { + LOGE("svg text path is null"); + return; + } + bool ret = textPath->SetProperty(attributeName, value); + if (ret) { + textPath->OnNotifyRender(); + } + }; + RefPtr> evaluator = AceType::MakeRefPtr>(); + CreatePropertyAnimation(svgAnimate, originalValue, std::move(callback), evaluator); + return true; +} + +bool RenderSvgTextPath::SetProperty(const std::string& attrName, const Dimension& value) +{ + if (attrName == ATTR_NAME_TEXT_LENGTH) { + textLength_ = value; + } else if (attrName == ATTR_NAME_START_OFFSET) { + startOffset_ = value; + } else { + return false; + } + return true; +} + +bool RenderSvgTextPath::GetProperty(const std::string& attrName, Dimension& dimension) const +{ + if (attrName == ATTR_NAME_TEXT_LENGTH) { + dimension = textLength_; + } else if (attrName == ATTR_NAME_START_OFFSET) { + dimension = startOffset_; + } else { + return false; + } + return true; +} + +void RenderSvgTextPath::PerformLayout() +{ + LayoutParam layoutParam = GetLayoutParam(); + SetLayoutSize(layoutParam.GetMaxSize()); + const auto& children = GetChildren(); + for (const auto& child : children) { + child->Layout(GetLayoutParam()); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/svg/render_svg_text_path.h b/frameworks/core/components/svg/render_svg_text_path.h new file mode 100644 index 00000000..04683993 --- /dev/null +++ b/frameworks/core/components/svg/render_svg_text_path.h @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_RENDER_SVG_TEXT_PATH_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_RENDER_SVG_TEXT_PATH_H + +#include "base/memory/ace_type.h" + +#include "frameworks/core/animation/animator.h" +#include "frameworks/core/components/common/properties/svg_paint_state.h" +#include "frameworks/core/components/svg/render_svg_base.h" +#include "frameworks/core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderSvgTextPath : public RenderSvgBase { + DECLARE_ACE_TYPE(RenderSvgTextPath, RenderSvgBase) + +public: + void Update(const RefPtr& component) override; + void PerformLayout() override; + bool PrepareSelfAnimation(const RefPtr& svgAnimate) override; + + const std::string& GetTextData() const + { + return textData_; + } + + void SetTextData(const std::string& textData) + { + textData_ = textData; + } + + const std::string& GetPath() const + { + return path_; + } + + void SetPath(const std::string& path) + { + path_ = path; + } + + void SetStartOffset(const Dimension& startOffset) + { + startOffset_ = startOffset; + } + + const Dimension& GetStartOffset() const + { + return startOffset_; + } + + const Dimension& GetTextLength() const + { + return textLength_; + } + +protected: + Dimension textLength_ = Dimension(0.0); + Dimension startOffset_ = Dimension(0.0); + std::string path_; + std::string textData_; + +private: + void PrepareAnimations(const RefPtr& component); + bool SetProperty(const std::string& attrName, const Dimension& value); + bool GetProperty(const std::string& attrName, Dimension& dimension) const; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_RENDER_SVG_TEXT_PATH_H diff --git a/frameworks/core/components/svg/svg_animate_component.h b/frameworks/core/components/svg/svg_animate_component.h new file mode 100644 index 00000000..5860d38c --- /dev/null +++ b/frameworks/core/components/svg/svg_animate_component.h @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_ANIMATE_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_ANIMATE_COMPONENT_H + +#include + +#include "frameworks/core/animation/svg_animate.h" +#include "frameworks/core/pipeline/base/composed_component.h" + +namespace OHOS::Ace { + +class SvgAnimateComponent : public ComposedComponent, public SvgAnimate { + DECLARE_ACE_TYPE(SvgAnimateComponent, ComposedComponent, SvgAnimate); + +public: + SvgAnimateComponent(const ComposeId& id, const std::string& name, SvgAnimateType svgAnimateType) + : ComposedComponent(id, name) + { + svgAnimateType_ = svgAnimateType; + }; + + SvgAnimateComponent(const ComposeId& id, const std::string& name) : ComposedComponent(id, name) {}; + ~SvgAnimateComponent() override = default; + + void SetSvgId(const std::string& svgId) + { + svgId_ = svgId; + } + +private: + std::string svgId_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_ANIMATE_COMPONENT_H diff --git a/frameworks/core/components/svg/svg_circle_component.cpp b/frameworks/core/components/svg/svg_circle_component.cpp new file mode 100644 index 00000000..c9fb7483 --- /dev/null +++ b/frameworks/core/components/svg/svg_circle_component.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/core/components/svg/svg_circle_component.h" + +#include "frameworks/core/components/svg/render_svg_circle.h" +#include "frameworks/core/components/svg/svg_circle_element.h" + +namespace OHOS::Ace { + +RefPtr SvgCircleComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +RefPtr SvgCircleComponent::CreateRenderNode() +{ + return RenderSvgCircle::Create(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/svg/svg_circle_component.h b/frameworks/core/components/svg/svg_circle_component.h new file mode 100644 index 00000000..6d98c418 --- /dev/null +++ b/frameworks/core/components/svg/svg_circle_component.h @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_CIRCLE_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_CIRCLE_COMPONENT_H + +#include "frameworks/core/components/svg/svg_sharp.h" +#include "frameworks/core/pipeline/base/component_group.h" + +namespace OHOS::Ace { + +class SvgCircleComponent : public ComponentGroup, public SvgSharp { + DECLARE_ACE_TYPE(SvgCircleComponent, ComponentGroup, SvgSharp); + +public: + SvgCircleComponent() = default; + explicit SvgCircleComponent(const std::list>& children) : ComponentGroup(children) {}; + ~SvgCircleComponent() override = default; + + RefPtr CreateRenderNode() override; + + RefPtr CreateElement() override; + + void SetCx(const Dimension& cx) + { + cx_ = cx; + } + + const Dimension& GetCx() const + { + return cx_; + } + + void SetCy(const Dimension& cy) + { + cy_ = cy; + } + + const Dimension& GetCy() const + { + return cy_; + } + + void SetR(const Dimension& r) + { + r_ = r; + } + + const Dimension& GetR() const + { + return r_; + } + +private: + Dimension cx_; + Dimension cy_; + Dimension r_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_CIRCLE_COMPONENT_H diff --git a/frameworks/core/components/svg/svg_circle_element.h b/frameworks/core/components/svg/svg_circle_element.h new file mode 100644 index 00000000..5db60b59 --- /dev/null +++ b/frameworks/core/components/svg/svg_circle_element.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_CIRCLE_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_CIRCLE_ELEMENT_H + +#include "frameworks/core/pipeline/base/component_group_element.h" +#include "frameworks/core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +class SvgCircleElement : public ComponentGroupElement { + DECLARE_ACE_TYPE(SvgCircleElement, ComponentGroupElement); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_CIRCLE_ELEMENT_H diff --git a/frameworks/core/components/svg/svg_component.cpp b/frameworks/core/components/svg/svg_component.cpp new file mode 100644 index 00000000..bdebd976 --- /dev/null +++ b/frameworks/core/components/svg/svg_component.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/core/components/svg/svg_component.h" + +#include "frameworks/core/components/svg/render_svg.h" +#include "frameworks/core/components/svg/svg_element.h" + +namespace OHOS::Ace { + +RefPtr SvgComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +RefPtr SvgComponent::CreateRenderNode() +{ + return RenderSvg::Create(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/svg/svg_component.h b/frameworks/core/components/svg/svg_component.h new file mode 100644 index 00000000..7b7d7298 --- /dev/null +++ b/frameworks/core/components/svg/svg_component.h @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_COMPONENT_H + +#include "frameworks/core/components/svg/svg_sharp.h" +#include "frameworks/core/pipeline/base/component_group.h" + +namespace OHOS::Ace { + +class SvgComponent : public ComponentGroup, public SvgSharp { + DECLARE_ACE_TYPE(SvgComponent, ComponentGroup, SvgSharp); + +public: + SvgComponent() = default; + explicit SvgComponent(const std::list>& children) : ComponentGroup(children) {}; + ~SvgComponent() override = default; + + RefPtr CreateRenderNode() override; + + RefPtr CreateElement() override; + + void SetX(const Dimension& x) + { + x_ = x; + } + + const Dimension& GetX() const + { + return x_; + } + + void SetY(const Dimension& y) + { + y_ = y; + } + + const Dimension& GetY() const + { + return y_; + } + + void SetWidth(const Dimension& width) + { + width_ = width; + } + + const Dimension& GetWidth() const + { + return width_; + } + + void SetHeight(const Dimension& height) + { + height_ = height; + } + + const Dimension& GetHeight() const + { + return height_; + } + + void SetViewBox(const Rect& viewBox) + { + viewBox_ = viewBox; + } + + const Rect& GetViewBox() const + { + return viewBox_; + } + +private: + Dimension x_; + Dimension y_; + Dimension width_ = Dimension(-1.0); + Dimension height_ = Dimension(-1.0); + Rect viewBox_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_COMPONENT_H diff --git a/frameworks/core/components/svg/svg_element.h b/frameworks/core/components/svg/svg_element.h new file mode 100644 index 00000000..1d3e1082 --- /dev/null +++ b/frameworks/core/components/svg/svg_element.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_ELEMENT_H + +#include "frameworks/core/pipeline/base/component_group_element.h" +#include "frameworks/core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +class SvgElement : public ComponentGroupElement { + DECLARE_ACE_TYPE(SvgElement, ComponentGroupElement); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_ELEMENT_H diff --git a/frameworks/core/components/svg/svg_ellipse_component.cpp b/frameworks/core/components/svg/svg_ellipse_component.cpp new file mode 100644 index 00000000..ddfd58c2 --- /dev/null +++ b/frameworks/core/components/svg/svg_ellipse_component.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/core/components/svg/svg_ellipse_component.h" + +#include "frameworks/core/components/svg/render_svg_ellipse.h" +#include "frameworks/core/components/svg/svg_ellipse_element.h" + +namespace OHOS::Ace { + +RefPtr SvgEllipseComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +RefPtr SvgEllipseComponent::CreateRenderNode() +{ + return RenderSvgEllipse::Create(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/svg/svg_ellipse_component.h b/frameworks/core/components/svg/svg_ellipse_component.h new file mode 100644 index 00000000..641bdf39 --- /dev/null +++ b/frameworks/core/components/svg/svg_ellipse_component.h @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_ELLIPSE_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_ELLIPSE_COMPONENT_H + +#include "frameworks/core/components/svg/svg_sharp.h" +#include "frameworks/core/pipeline/base/component_group.h" + +namespace OHOS::Ace { + +class SvgEllipseComponent : public ComponentGroup, public SvgSharp { + DECLARE_ACE_TYPE(SvgEllipseComponent, ComponentGroup, SvgSharp); + +public: + SvgEllipseComponent() = default; + explicit SvgEllipseComponent(const std::list>& children) : ComponentGroup(children) {}; + ~SvgEllipseComponent() override = default; + + RefPtr CreateRenderNode() override; + + RefPtr CreateElement() override; + + void SetCx(const Dimension& cx) + { + cx_ = cx; + } + + const Dimension& GetCx() const + { + return cx_; + } + + void SetCy(const Dimension& cy) + { + cy_ = cy; + } + + const Dimension& GetCy() const + { + return cy_; + } + + void SetRx(const Dimension& rx) + { + rx_ = rx; + } + + const Dimension& GetRx() const + { + return rx_; + } + + void SetRy(const Dimension& ry) + { + ry_ = ry; + } + + const Dimension& GetRy() const + { + return ry_; + } + +private: + Dimension cx_; + Dimension cy_; + Dimension rx_; + Dimension ry_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_ELLIPSE_COMPONENT_H diff --git a/frameworks/core/components/svg/svg_ellipse_element.h b/frameworks/core/components/svg/svg_ellipse_element.h new file mode 100644 index 00000000..f291bbe6 --- /dev/null +++ b/frameworks/core/components/svg/svg_ellipse_element.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_ELLIPSE_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_ELLIPSE_ELEMENT_H + +#include "frameworks/core/pipeline/base/component_group_element.h" +#include "frameworks/core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +class SvgEllipseElement : public ComponentGroupElement { + DECLARE_ACE_TYPE(SvgEllipseElement, ComponentGroupElement); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_ELLIPSE_ELEMENT_H diff --git a/frameworks/core/components/svg/svg_line_component.cpp b/frameworks/core/components/svg/svg_line_component.cpp new file mode 100644 index 00000000..8f6e05fd --- /dev/null +++ b/frameworks/core/components/svg/svg_line_component.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/core/components/svg/svg_line_component.h" + +#include "frameworks/core/components/svg/render_svg_line.h" +#include "frameworks/core/components/svg/svg_line_element.h" + +namespace OHOS::Ace { + +RefPtr SvgLineComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +RefPtr SvgLineComponent::CreateRenderNode() +{ + return RenderSvgLine::Create(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/svg/svg_line_component.h b/frameworks/core/components/svg/svg_line_component.h new file mode 100644 index 00000000..de3b3048 --- /dev/null +++ b/frameworks/core/components/svg/svg_line_component.h @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_LINE_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_LINE_COMPONENT_H + +#include "frameworks/core/components/svg/svg_sharp.h" +#include "frameworks/core/pipeline/base/component_group.h" + +namespace OHOS::Ace { + +class SvgLineComponent : public ComponentGroup, public SvgSharp { + DECLARE_ACE_TYPE(SvgLineComponent, ComponentGroup, SvgSharp); + +public: + SvgLineComponent() = default; + explicit SvgLineComponent(const std::list>& children) : ComponentGroup(children) {}; + ~SvgLineComponent() override = default; + + RefPtr CreateRenderNode() override; + + RefPtr CreateElement() override; + + void SetX1(const Dimension& x1) + { + x1_ = x1; + } + + void SetX2(const Dimension& x2) + { + x2_ = x2; + } + + void SetY1(const Dimension& y1) + { + y1_ = y1; + } + + void SetY2(const Dimension& y2) + { + y2_ = y2; + } + + const Dimension& GetX1() const + { + return x1_; + } + + const Dimension& GetX2() const + { + return x2_; + } + + const Dimension& GetY1() const + { + return y1_; + } + + const Dimension& GetY2() const + { + return y2_; + } + +private: + Dimension x1_; + Dimension y1_; + Dimension x2_; + Dimension y2_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_LINE_COMPONENT_H diff --git a/frameworks/core/components/svg/svg_line_element.h b/frameworks/core/components/svg/svg_line_element.h new file mode 100644 index 00000000..9ae4c7a9 --- /dev/null +++ b/frameworks/core/components/svg/svg_line_element.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_LINE_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_LINE_ELEMENT_H + +#include "frameworks/core/pipeline/base/component_group_element.h" +#include "frameworks/core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +class SvgLineElement : public ComponentGroupElement { + DECLARE_ACE_TYPE(SvgLineElement, ComponentGroupElement); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_LINE_ELEMENT_H diff --git a/frameworks/core/components/svg/svg_path_component.cpp b/frameworks/core/components/svg/svg_path_component.cpp new file mode 100644 index 00000000..926260ba --- /dev/null +++ b/frameworks/core/components/svg/svg_path_component.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/core/components/svg/svg_path_component.h" + +#include "frameworks/core/components/svg/render_svg_path.h" +#include "frameworks/core/components/svg/svg_path_element.h" + +namespace OHOS::Ace { + +RefPtr SvgPathComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +RefPtr SvgPathComponent::CreateRenderNode() +{ + return RenderSvgPath::Create(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/svg/svg_path_component.h b/frameworks/core/components/svg/svg_path_component.h new file mode 100644 index 00000000..2876b4c1 --- /dev/null +++ b/frameworks/core/components/svg/svg_path_component.h @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_PATH_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_PATH_COMPONENT_H + +#include "frameworks/core/components/svg/svg_sharp.h" +#include "frameworks/core/pipeline/base/component_group.h" + +namespace OHOS::Ace { + +class SvgPathComponent : public ComponentGroup, public SvgSharp { + DECLARE_ACE_TYPE(SvgPathComponent, ComponentGroup, SvgSharp); + +public: + SvgPathComponent() = default; + explicit SvgPathComponent(const std::list>& children) : ComponentGroup(children) {}; + ~SvgPathComponent() override = default; + + RefPtr CreateRenderNode() override; + + RefPtr CreateElement() override; + + void SetD(const std::string& d) + { + d_ = d; + } + + const std::string& GetD() const + { + return d_; + } + +private: + std::string d_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_PATH_COMPONENT_H diff --git a/frameworks/core/components/svg/svg_path_element.h b/frameworks/core/components/svg/svg_path_element.h new file mode 100644 index 00000000..1a73e09b --- /dev/null +++ b/frameworks/core/components/svg/svg_path_element.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_PATH_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_PATH_ELEMENT_H + +#include "frameworks/core/pipeline/base/component_group_element.h" +#include "frameworks/core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +class SvgPathElement : public ComponentGroupElement { + DECLARE_ACE_TYPE(SvgPathElement, ComponentGroupElement); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_PATH_ELEMENT_H diff --git a/frameworks/core/components/svg/svg_polygon_component.cpp b/frameworks/core/components/svg/svg_polygon_component.cpp new file mode 100644 index 00000000..7345bebd --- /dev/null +++ b/frameworks/core/components/svg/svg_polygon_component.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/core/components/svg/svg_polygon_component.h" + +#include "frameworks/core/components/svg/render_svg_polygon.h" +#include "frameworks/core/components/svg/svg_polygon_element.h" + +namespace OHOS::Ace { + +RefPtr SvgPolygonComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +RefPtr SvgPolygonComponent::CreateRenderNode() +{ + return RenderSvgPolygon::Create(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/svg/svg_polygon_component.h b/frameworks/core/components/svg/svg_polygon_component.h new file mode 100644 index 00000000..bbbe8ab8 --- /dev/null +++ b/frameworks/core/components/svg/svg_polygon_component.h @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_POLYGON_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_POLYGON_COMPONENT_H + +#include "frameworks/core/components/svg/svg_sharp.h" +#include "frameworks/core/pipeline/base/component_group.h" + +namespace OHOS::Ace { + +class SvgPolygonComponent : public ComponentGroup, public SvgSharp { + DECLARE_ACE_TYPE(SvgPolygonComponent, ComponentGroup, SvgSharp); + +public: + SvgPolygonComponent() = default; + explicit SvgPolygonComponent(const std::list>& children) : ComponentGroup(children) {}; + ~SvgPolygonComponent() override = default; + + RefPtr CreateRenderNode() override; + + RefPtr CreateElement() override; + + void SetPoints(const std::string& points) + { + points_ = points; + } + + const std::string& GetPoints() const + { + return points_; + } + +private: + std::string points_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_POLYGON_COMPONENT_H diff --git a/frameworks/core/components/svg/svg_polygon_element.h b/frameworks/core/components/svg/svg_polygon_element.h new file mode 100644 index 00000000..54b10ea9 --- /dev/null +++ b/frameworks/core/components/svg/svg_polygon_element.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_POLYGON_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_POLYGON_ELEMENT_H + +#include "frameworks/core/pipeline/base/component_group_element.h" +#include "frameworks/core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +class SvgPolygonElement : public ComponentGroupElement { + DECLARE_ACE_TYPE(SvgPolygonElement, ComponentGroupElement); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_POLYGON_ELEMENT_H diff --git a/frameworks/core/components/svg/svg_polyline_component.cpp b/frameworks/core/components/svg/svg_polyline_component.cpp new file mode 100644 index 00000000..9e0b6db8 --- /dev/null +++ b/frameworks/core/components/svg/svg_polyline_component.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/core/components/svg/svg_polyline_component.h" + +#include "frameworks/core/components/svg/render_svg_polyline.h" +#include "frameworks/core/components/svg/svg_polyline_element.h" + +namespace OHOS::Ace { + +RefPtr SvgPolylineComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +RefPtr SvgPolylineComponent::CreateRenderNode() +{ + return RenderSvgPolyline::Create(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/svg/svg_polyline_component.h b/frameworks/core/components/svg/svg_polyline_component.h new file mode 100644 index 00000000..6d6ad222 --- /dev/null +++ b/frameworks/core/components/svg/svg_polyline_component.h @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_POLYLINE_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_POLYLINE_COMPONENT_H + +#include "frameworks/core/components/svg/svg_sharp.h" +#include "frameworks/core/pipeline/base/component_group.h" + +namespace OHOS::Ace { + +class SvgPolylineComponent : public ComponentGroup, public SvgSharp { + DECLARE_ACE_TYPE(SvgPolylineComponent, ComponentGroup, SvgSharp); + +public: + SvgPolylineComponent() = default; + explicit SvgPolylineComponent(const std::list>& children) : ComponentGroup(children) {}; + ~SvgPolylineComponent() override = default; + + RefPtr CreateRenderNode() override; + + RefPtr CreateElement() override; + + void SetPoints(const std::string& points) + { + points_ = points; + } + + const std::string& GetPoints() const + { + return points_; + } + +private: + std::string points_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_POLYLINE_COMPONENT_H diff --git a/frameworks/core/components/svg/svg_polyline_element.h b/frameworks/core/components/svg/svg_polyline_element.h new file mode 100644 index 00000000..61c4a119 --- /dev/null +++ b/frameworks/core/components/svg/svg_polyline_element.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_POLYLINE_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_POLYLINE_ELEMENT_H + +#include "frameworks/core/pipeline/base/component_group_element.h" +#include "frameworks/core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +class SvgPolylineElement : public ComponentGroupElement { + DECLARE_ACE_TYPE(SvgPolylineElement, ComponentGroupElement); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_POLYLINE_ELEMENT_H diff --git a/frameworks/core/components/svg/svg_rect_component.cpp b/frameworks/core/components/svg/svg_rect_component.cpp new file mode 100644 index 00000000..2b9aed1a --- /dev/null +++ b/frameworks/core/components/svg/svg_rect_component.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/core/components/svg/svg_rect_component.h" + +#include "frameworks/core/components/svg/render_svg_rect.h" +#include "frameworks/core/components/svg/svg_rect_element.h" + +namespace OHOS::Ace { + +RefPtr SvgRectComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +RefPtr SvgRectComponent::CreateRenderNode() +{ + return RenderSvgRect::Create(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/svg/svg_rect_component.h b/frameworks/core/components/svg/svg_rect_component.h new file mode 100644 index 00000000..edb3815e --- /dev/null +++ b/frameworks/core/components/svg/svg_rect_component.h @@ -0,0 +1,107 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_RECT_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_RECT_COMPONENT_H + +#include "frameworks/core/components/svg/svg_sharp.h" +#include "frameworks/core/pipeline/base/component_group.h" + +namespace OHOS::Ace { + +class SvgRectComponent : public ComponentGroup, public SvgSharp { + DECLARE_ACE_TYPE(SvgRectComponent, ComponentGroup, SvgSharp); + +public: + SvgRectComponent() = default; + explicit SvgRectComponent(const std::list>& children) : ComponentGroup(children) {}; + ~SvgRectComponent() override = default; + + RefPtr CreateRenderNode() override; + + RefPtr CreateElement() override; + + void SetX(const Dimension& x) + { + x_ = x; + } + + const Dimension& GetX() const + { + return x_; + } + + void SetY(const Dimension& y) + { + y_ = y; + } + + const Dimension& GetY() const + { + return y_; + } + + void SetRx(const Dimension& rx) + { + rx_ = rx; + } + + const Dimension& GetRx() const + { + return rx_; + } + + void SetRy(const Dimension& ry) + { + ry_ = ry; + } + + const Dimension& GetRy() const + { + return ry_; + } + + void SetWidth(const Dimension& width) + { + width_ = width; + } + + const Dimension& GetWidth() const + { + return width_; + } + + void SetHeight(const Dimension& height) + { + height_ = height; + } + + const Dimension& GetHeight() const + { + return height_; + } + +private: + Dimension x_; + Dimension y_; + Dimension rx_; + Dimension ry_; + Dimension width_ = Dimension(-1.0); + Dimension height_ = Dimension(-1.0); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_RECT_COMPONENT_H diff --git a/frameworks/core/components/svg/svg_rect_element.h b/frameworks/core/components/svg/svg_rect_element.h new file mode 100644 index 00000000..2ddecae2 --- /dev/null +++ b/frameworks/core/components/svg/svg_rect_element.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_RECT_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_RECT_ELEMENT_H + +#include "frameworks/core/pipeline/base/component_group_element.h" +#include "frameworks/core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +class SvgRectElement : public ComponentGroupElement { + DECLARE_ACE_TYPE(SvgRectElement, ComponentGroupElement); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_RECT_ELEMENT_H diff --git a/frameworks/core/components/svg/svg_sharp.h b/frameworks/core/components/svg/svg_sharp.h new file mode 100644 index 00000000..699f0251 --- /dev/null +++ b/frameworks/core/components/svg/svg_sharp.h @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_SVG_SHARP_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_SVG_SHARP_H + +#include "frameworks/core/components/common/properties/svg_paint_state.h" + +namespace OHOS::Ace { + +class ACE_EXPORT SvgSharp : public AceType { + DECLARE_ACE_TYPE(SvgSharp, AceType); + +public: + void SetOpacity(double opacity) + { + opacity_ = opacity; + } + + double GetOpacity() const + { + return opacity_; + } + + void SetFillState(const FillState& fillState) + { + fillState_ = fillState; + } + + const FillState& GetFillState() const + { + return fillState_; + } + + void SetStrokeState(const StrokeState& strokeState) + { + strokeState_ = strokeState; + } + + const StrokeState& GetStrokeState() const + { + return strokeState_; + } + + void SetTextStyle(const SvgTextStyle& textStyle) + { + textStyle_ = textStyle; + } + + const SvgTextStyle& GetTextStyle() const + { + return textStyle_; + } + +protected: + double opacity_ = 1.0; + FillState fillState_; + StrokeState strokeState_; + SvgTextStyle textStyle_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_ANIMATION_SVG_SHARP_H diff --git a/frameworks/core/components/svg/svg_text_component.cpp b/frameworks/core/components/svg/svg_text_component.cpp new file mode 100644 index 00000000..fc67dbef --- /dev/null +++ b/frameworks/core/components/svg/svg_text_component.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/core/components/svg/svg_text_component.h" + +#include "frameworks/core/components/svg/flutter_render_svg_text.h" +#include "frameworks/core/components/svg/svg_text_element.h" + +namespace OHOS::Ace { + +RefPtr SvgTextComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +RefPtr SvgTextComponent::CreateRenderNode() +{ + return FlutterRenderSvgText::Create(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/svg/svg_text_component.h b/frameworks/core/components/svg/svg_text_component.h new file mode 100644 index 00000000..72e82ce9 --- /dev/null +++ b/frameworks/core/components/svg/svg_text_component.h @@ -0,0 +1,151 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_TEXT_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_TEXT_COMPONENT_H + +#include "frameworks/core/components/svg/svg_sharp.h" +#include "frameworks/core/pipeline/base/component_group.h" + +namespace OHOS::Ace { + +class SvgTextComponent : public ComponentGroup, public SvgSharp { + DECLARE_ACE_TYPE(SvgTextComponent, ComponentGroup); + +public: + SvgTextComponent() = default; + explicit SvgTextComponent(const std::list>& children) : ComponentGroup(children) {}; + ~SvgTextComponent() override = default; + + RefPtr CreateRenderNode() override; + + RefPtr CreateElement() override; + + const std::string& GetTextData() const + { + return textData_; + } + + void SetTextData(const std::string& textData) + { + textData_ = textData; + } + + void SetX(const Dimension& x) + { + x_ = x; + } + + const Dimension& GetX() const + { + return x_; + } + + void SetY(const Dimension& y) + { + y_ = y; + } + + const Dimension& GetY() const + { + return y_; + } + + void SetDx(const Dimension& dx) + { + dx_ = dx; + } + + const Dimension& GetDx() const + { + return dx_; + } + + void SetDy(const Dimension& dy) + { + dy_ = dy; + } + + const Dimension& GetDy() const + { + return dy_; + } + + void SetHasX(bool hasX) + { + hasX_ = hasX; + } + + bool GetHasX() const + { + return hasX_; + } + + void SetHasY(bool hasY) + { + hasY_ = hasY; + } + + bool GetHasY() const + { + return hasY_; + } + + void SetRotate(double rotate) + { + rotate_ = rotate; + } + + double GetRotate() const + { + return rotate_; + } + + void SetTextLength(const Dimension& textLength) + { + textLength_ = textLength; + } + + const Dimension& GetTextLength() const + { + return textLength_; + } + + void SetLengthAdjust(const std::string& lengthAdjust) + { + lengthAdjust_ = lengthAdjust; + } + + const std::string& GetLengthAdjust() const + { + return lengthAdjust_; + } + +private: + double rotate_ = 0.0; + bool hasX_ = false; + bool hasY_ = false; + Dimension x_; + Dimension y_; + Dimension dx_; + Dimension dy_; + Dimension textLength_ = Dimension(0.0); + std::string lengthAdjust_ = "spacing"; // Value type: spacing | spacingAndGlyphs + std::string textData_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_TEXT_COMPONENT_H diff --git a/frameworks/core/components/svg/svg_text_element.h b/frameworks/core/components/svg/svg_text_element.h new file mode 100644 index 00000000..ee7ebf41 --- /dev/null +++ b/frameworks/core/components/svg/svg_text_element.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_TEXT_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_TEXT_ELEMENT_H + +#include "frameworks/core/pipeline/base/component_group_element.h" +#include "frameworks/core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +class SvgTextElement : public ComponentGroupElement { + DECLARE_ACE_TYPE(SvgTextElement, ComponentGroupElement); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_TEXT_ELEMENT_H diff --git a/frameworks/core/components/svg/svg_text_path_component.cpp b/frameworks/core/components/svg/svg_text_path_component.cpp new file mode 100644 index 00000000..1f0686ba --- /dev/null +++ b/frameworks/core/components/svg/svg_text_path_component.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/core/components/svg/svg_text_path_component.h" + +#include "frameworks/core/components/svg/flutter_render_svg_text_path.h" +#include "frameworks/core/components/svg/svg_text_path_element.h" + +namespace OHOS::Ace { + +RefPtr SvgTextPathComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +RefPtr SvgTextPathComponent::CreateRenderNode() +{ + return FlutterRenderSvgTextPath::Create(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/svg/svg_text_path_component.h b/frameworks/core/components/svg/svg_text_path_component.h new file mode 100644 index 00000000..9c6e3bb9 --- /dev/null +++ b/frameworks/core/components/svg/svg_text_path_component.h @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_TEXT_PATH_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_TEXT_PATH_COMPONENT_H + +#include "frameworks/core/components/svg/svg_sharp.h" +#include "frameworks/core/pipeline/base/component_group.h" + +namespace OHOS::Ace { + +class SvgTextPathComponent : public ComponentGroup, public SvgSharp { + DECLARE_ACE_TYPE(SvgTextPathComponent, ComponentGroup); + +public: + SvgTextPathComponent() = default; + explicit SvgTextPathComponent(const std::list>& children) : ComponentGroup(children) {}; + ~SvgTextPathComponent() override = default; + + RefPtr CreateRenderNode() override; + + RefPtr CreateElement() override; + + const std::string& GetTextData() const + { + return textData_; + } + + void SetTextData(const std::string& textData) + { + textData_ = textData; + } + + const std::string& GetPath() const + { + return path_; + } + + void SetPath(const std::string& path) + { + path_ = path; + } + + void SetStartOffset(const Dimension& startOffset) + { + startOffset_ = startOffset; + } + + const Dimension& GetStartOffset() const + { + return startOffset_; + } + + void SetTextLength(const Dimension& textLength) + { + textLength_ = textLength; + } + + const Dimension& GetTextLength() const + { + return textLength_; + } + + void SetLengthAdjust(const std::string& lengthAdjust) + { + lengthAdjust_ = lengthAdjust; + } + + const std::string& GetLengthAdjust() const + { + return lengthAdjust_; + } + +private: + Dimension textLength_ = Dimension(0.0); + Dimension startOffset_ = Dimension(0.0); + std::string lengthAdjust_ = "spacing"; // Value type: spacing | spacingAndGlyphs + std::string path_; + std::string textData_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_TEXT_PATH_COMPONENT_H diff --git a/frameworks/core/components/svg/svg_text_path_element.h b/frameworks/core/components/svg/svg_text_path_element.h new file mode 100644 index 00000000..e5fe13b3 --- /dev/null +++ b/frameworks/core/components/svg/svg_text_path_element.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_TEXT_PATH_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_TEXT_PATH_ELEMENT_H + +#include "frameworks/core/pipeline/base/component_group_element.h" +#include "frameworks/core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +class SvgTextPathElement : public ComponentGroupElement { + DECLARE_ACE_TYPE(SvgTextPathElement, ComponentGroupElement); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_TEXT_PATH_ELEMENT_H diff --git a/frameworks/core/components/svg/svg_tspan_component.cpp b/frameworks/core/components/svg/svg_tspan_component.cpp new file mode 100644 index 00000000..1c626009 --- /dev/null +++ b/frameworks/core/components/svg/svg_tspan_component.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/core/components/svg/svg_tspan_component.h" + +#include "frameworks/core/components/svg/flutter_render_svg_tspan.h" +#include "frameworks/core/components/svg/svg_tspan_element.h" + +namespace OHOS::Ace { + +RefPtr SvgTspanComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +RefPtr SvgTspanComponent::CreateRenderNode() +{ + return FlutterRenderSvgTspan::Create(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/svg/svg_tspan_component.h b/frameworks/core/components/svg/svg_tspan_component.h new file mode 100644 index 00000000..f679500d --- /dev/null +++ b/frameworks/core/components/svg/svg_tspan_component.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_TSPAN_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_TSPAN_COMPONENT_H + +#include "frameworks/core/components/svg/svg_text_component.h" + +namespace OHOS::Ace { + +class SvgTspanComponent : public SvgTextComponent { + DECLARE_ACE_TYPE(SvgTspanComponent, SvgTextComponent); + +public: + SvgTspanComponent() = default; + explicit SvgTspanComponent(const std::list>& children) : SvgTextComponent(children) {}; + ~SvgTspanComponent() override = default; + + RefPtr CreateRenderNode() override; + + RefPtr CreateElement() override; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_TSPAN_COMPONENT_H diff --git a/frameworks/core/components/svg/svg_tspan_element.h b/frameworks/core/components/svg/svg_tspan_element.h new file mode 100644 index 00000000..b4b03df5 --- /dev/null +++ b/frameworks/core/components/svg/svg_tspan_element.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_TSPAN_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_TSPAN_ELEMENT_H + +#include "frameworks/core/pipeline/base/component_group_element.h" +#include "frameworks/core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +class SvgTspanElement : public ComponentGroupElement { + DECLARE_ACE_TYPE(SvgTspanElement, ComponentGroupElement); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SVG_SVG_TSPAN_ELEMENT_H diff --git a/frameworks/core/components/swiper/BUILD.gn b/frameworks/core/components/swiper/BUILD.gn new file mode 100644 index 00000000..bbb830bd --- /dev/null +++ b/frameworks/core/components/swiper/BUILD.gn @@ -0,0 +1,22 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("swiper") { + sources = [ + "flutter_render_swiper.cpp", + "render_swiper.cpp", + "swiper_element.cpp", + ] +} diff --git a/frameworks/core/components/swiper/flutter_render_swiper.cpp b/frameworks/core/components/swiper/flutter_render_swiper.cpp new file mode 100644 index 00000000..73d49fec --- /dev/null +++ b/frameworks/core/components/swiper/flutter_render_swiper.cpp @@ -0,0 +1,463 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/swiper/flutter_render_swiper.h" + +#include "third_party/skia/include/effects/SkGradientShader.h" + +#include "core/components/align/render_align.h" +#include "core/components/common/properties/alignment.h" +#include "core/components/common/properties/decoration.h" +#include "core/components/text/text_component.h" +#include "core/pipeline/base/flutter_render_context.h" +#include "core/pipeline/base/scoped_canvas_state.h" + +namespace OHOS::Ace { +namespace { + +constexpr Dimension INDICATOR_POINT_PADDING_TOP = 9.0_vp; +constexpr uint32_t GRADIENT_COLOR_SIZE = 3; +constexpr int32_t INDICATOR_FOCUS_PADDING_START_SIZE = 2; + +} // namespace + +using namespace Flutter; + +RefPtr RenderSwiper::Create() +{ + return AceType::MakeRefPtr(); +} + +RenderLayer FlutterRenderSwiper::GetRenderLayer() +{ + if (!layer_) { + layer_ = AceType::MakeRefPtr( + 0.0, GetLayoutSize().Width(), 0.0, GetLayoutSize().Height(), Clip::HARD_EDGE); + } + return AceType::RawPtr(layer_); +} + +void FlutterRenderSwiper::Paint(RenderContext& context, const Offset& offset) +{ + layer_->SetClip(0.0, GetLayoutSize().Width(), 0.0, GetLayoutSize().Height(), Clip::HARD_EDGE); + RenderNode::Paint(context, offset); + + if (!indicator_) { + LOGD("swiper has not default indicator"); + return; + } + if (SystemProperties::GetDeviceType() == DeviceType::PHONE) { + DrawIndicator(context, offset); + } else { + if (indicator_->GetIndicatorMask()) { + PaintMask(context, offset); + } + PaintIndicator(context, offset); + } +} + +void FlutterRenderSwiper::UpdateIndicator() +{ + if (!indicator_) { + LOGD("swiper has not default indicator"); + return; + } + + double size = NormalizeToPx(indicator_->GetSize()); + double selectedSize = NormalizeToPx(indicator_->GetSelectedSize()); + double width = selectedSize + size * (itemCount_ - 1) + + indicator_->GetIndicatorPointPadding().Value() * scale_ * (itemCount_ - 1); + double indicatorWidth; + double indicatorHeight; + if (digitalIndicator_) { + LayoutDigitalIndicator(); + Size digitalIndicatorSize = renderDigitalIndicator_->GetLayoutSize(); + indicatorWidth = digitalIndicatorSize.Width(); + indicatorHeight = digitalIndicatorSize.Height(); + } else if (axis_ == Axis::HORIZONTAL) { + indicatorWidth = width; + indicatorHeight = selectedSize; + } else { + indicatorWidth = selectedSize; + indicatorHeight = width; + } + + Offset position; + if (indicator_->GetLeft().Value() != SwiperIndicator::DEFAULT_POSITION) { + int32_t left = GetValidEdgeLength(swiperWidth_, indicatorWidth, indicator_->GetLeft()); + position.SetX(left); + } else if (indicator_->GetRight().Value() != SwiperIndicator::DEFAULT_POSITION) { + int32_t right = GetValidEdgeLength(swiperWidth_, indicatorWidth, indicator_->GetRight()); + position.SetX(swiperWidth_ - indicatorWidth - right); + } else { + if (axis_ == Axis::HORIZONTAL) { + position.SetX((swiperWidth_ - indicatorWidth) / 2.0); + } else { + indicatorWidth += NormalizeToPx(INDICATOR_POINT_PADDING_TOP); + position.SetX(swiperWidth_ - indicatorWidth); + } + } + + if (indicator_->GetTop().Value() != SwiperIndicator::DEFAULT_POSITION) { + int32_t top = GetValidEdgeLength(swiperHeight_, indicatorHeight, indicator_->GetTop()); + position.SetY(top); + } else if (indicator_->GetBottom().Value() != SwiperIndicator::DEFAULT_POSITION) { + int32_t bottom = GetValidEdgeLength(swiperHeight_, indicatorHeight, indicator_->GetBottom()); + position.SetY(swiperHeight_ - indicatorHeight - bottom); + } else { + if (axis_ == Axis::HORIZONTAL) { + indicatorHeight += NormalizeToPx(INDICATOR_POINT_PADDING_TOP); + position.SetY(swiperHeight_ - indicatorHeight); + } else { + position.SetY((swiperHeight_ - indicatorHeight) / 2.0); + } + } + + indicatorPosition_ = position; +} + +void FlutterRenderSwiper::LayoutDigitalIndicator() +{ + LayoutParam innerLayout; + innerLayout.SetMaxSize(Size(Size::INFINITE_SIZE, Size::INFINITE_SIZE)); + + std::string indicatorText = + (axis_ == Axis::HORIZONTAL) + ? std::to_string(currentIndex_ + 1).append("/").append(std::to_string(itemCount_)) + : std::to_string(currentIndex_ + 1).append("\n/\n").append(std::to_string(itemCount_)); + RefPtr textComponent = AceType::MakeRefPtr(indicatorText); + renderDigitalIndicator_ = AceType::DynamicCast(textComponent->CreateRenderNode()); + auto textStyle = indicator_->GetDigitalIndicatorTextStyle(); + textStyle.SetTextAlign(TextAlign::CENTER); + textComponent->SetTextStyle(textStyle); + renderDigitalIndicator_->Attach(GetContext()); + renderDigitalIndicator_->Update(textComponent); + renderDigitalIndicator_->Layout(innerLayout); +} + +void FlutterRenderSwiper::PaintIndicator(RenderContext& context, const Offset& offset) +{ + if (digitalIndicator_) { + LayoutDigitalIndicator(); + renderDigitalIndicator_->RenderWithContext(context, indicatorPosition_); + return; + } + + CanvasDrawIndicator(context, offset); +} + +void FlutterRenderSwiper::CanvasDrawIndicator(RenderContext& context, const Offset& offset) +{ + auto canvas = ScopedCanvas::Create(context); + if (!canvas) { + LOGE("Paint canvas is null"); + return; + } + + flutter::Paint paint; + flutter::PaintData paintData; + auto skPaint = paint.paint(); + if (!skPaint) { + LOGE("paint is null"); + return; + } + skPaint->setAntiAlias(true); + + IndicatorProperties indicatorProperties = PrepareIndicatorProperties(); + Offset center = indicatorPosition_ + indicatorProperties.centerPadding; + double targetIndex = currentIndex_; + if (needReverse_) { + targetIndex = itemCount_ - currentIndex_ - 1; + } + for (int32_t i = 0; i < itemCount_; i++) { + if (i != targetIndex) { + center += indicatorProperties.normalPaddingStart; + skPaint->setColor(indicatorProperties.normalColor); + canvas->drawCircle(center.GetX() + offset.GetX(), center.GetY() + offset.GetY(), + indicatorProperties.normalPointRadius, paint, paintData); + center += indicatorProperties.normalPaddingEnd; + } else { + center += indicatorProperties.selectedPaddingStart; + skPaint->setColor(indicatorProperties.selectedColor); + canvas->drawCircle(center.GetX() + offset.GetX(), center.GetY() + offset.GetY(), + indicatorProperties.selectedPointRadius, paint, paintData); + center += indicatorProperties.selectedPaddingEnd; + } + } +} + +FlutterRenderSwiper::IndicatorProperties FlutterRenderSwiper::PrepareIndicatorProperties() const +{ + uint32_t normalColor = indicator_->GetColor().GetValue(); + uint32_t selectedColor = indicator_->GetSelectedColor().GetValue(); + double normalPointRadius = NormalizeToPx(indicator_->GetSize()) / 2.0; + double selectedPointRadius = NormalizeToPx(indicator_->GetSelectedSize()) / 2.0; + double indicatorPointPadding = indicator_->GetIndicatorPointPadding().Value() * scale_; + if (axis_ == Axis::HORIZONTAL) { + return IndicatorProperties(Offset(normalPointRadius, 0.0), + Offset(normalPointRadius + indicatorPointPadding, 0.0), Offset(selectedPointRadius, 0.0), + Offset(selectedPointRadius + indicatorPointPadding, 0.0), Offset(0.0, selectedPointRadius), normalColor, + selectedColor, normalPointRadius, selectedPointRadius, indicatorPointPadding); + } else { + return IndicatorProperties(Offset(0.0, normalPointRadius), + Offset(0.0, normalPointRadius + indicatorPointPadding), Offset(0.0, selectedPointRadius), + Offset(0.0, selectedPointRadius + indicatorPointPadding), Offset(selectedPointRadius, 0.0), normalColor, + selectedColor, normalPointRadius, selectedPointRadius, indicatorPointPadding); + } +} + +void FlutterRenderSwiper::PaintMask(RenderContext& context, const Offset& offset) const +{ + flutter::Canvas* canvas = static_cast(context).GetCanvas(); + if (canvas == nullptr) { + LOGE("Paint canvas is null"); + return; + } + + flutter::Paint paint; + flutter::PaintData paintData; + auto skPaint = paint.paint(); + if (!skPaint) { + LOGE("paint is null"); + return; + } + skPaint->setAntiAlias(true); + canvas->save(); + + std::vector gradientColors = std::vector(GRADIENT_COLOR_SIZE); + gradientColors[0].SetColor(Color(0x00000000)); + gradientColors[1].SetColor(Color(0xff000000)); + gradientColors[2].SetColor(Color(0xff000000)); + SkPoint pts[2] = { SkPoint::Make(0.0f, 0.0f), SkPoint::Make(0.0f, 0.0f) }; + if (axis_ == Axis::HORIZONTAL) { + pts[0] = SkPoint::Make(SkDoubleToScalar(offset.GetX()), + SkDoubleToScalar(offset.GetY() + indicatorPosition_.GetY() - NormalizeToPx(9.0_vp))); + pts[1] = SkPoint::Make(SkDoubleToScalar(offset.GetX()), + SkDoubleToScalar(offset.GetY() + indicatorPosition_.GetY() + NormalizeToPx(15.0_vp))); + } else { + pts[0] = SkPoint::Make(SkDoubleToScalar(offset.GetX() + indicatorPosition_.GetX() - NormalizeToPx(9.0_vp)), + SkDoubleToScalar(offset.GetY())); + pts[1] = SkPoint::Make(SkDoubleToScalar(offset.GetX() + indicatorPosition_.GetX() + NormalizeToPx(15.0_vp)), + SkDoubleToScalar(offset.GetY())); + } + LOGD("gradient--beginPoint x: %{public}f, y: %{public}f", pts[0].x(), pts[0].y()); + LOGD("gradient--endPoint x: %{public}f, y: %{public}f", pts[1].x(), pts[1].y()); + SkColor colors[gradientColors.size()]; + for (uint32_t i = 0; i < gradientColors.size(); ++i) { + const auto& gradientColor = gradientColors[i]; + colors[i] = gradientColor.GetColor().GetValue(); + } + const float pos[] = { 0.0f, 0.75f, 1.0f }; + +#ifdef USE_SYSTEM_SKIA + skPaint->setShader( + SkGradientShader::MakeLinear(pts, colors, pos, gradientColors.size(), SkShader::kClamp_TileMode)); +#else + skPaint->setShader(SkGradientShader::MakeLinear(pts, colors, pos, gradientColors.size(), SkTileMode::kClamp)); +#endif + if (axis_ == Axis::HORIZONTAL) { + canvas->drawRect(offset.GetX(), offset.GetY() + indicatorPosition_.GetY() - NormalizeToPx(9.0_vp), + offset.GetX() + GetLayoutSize().Width(), offset.GetY() + indicatorPosition_.GetY() + NormalizeToPx(15.0_vp), + paint, paintData); + } else { + canvas->drawRect(offset.GetX() + indicatorPosition_.GetX() - NormalizeToPx(9.0_vp), offset.GetY(), + offset.GetX() + indicatorPosition_.GetX() + NormalizeToPx(15.0_vp), + offset.GetY() + GetLayoutSize().Height(), paint, paintData); + } +} + +void FlutterRenderSwiper::DrawIndicator(RenderContext& context, const Offset& offset) +{ + if (digitalIndicator_) { + if (swiperIndicatorData_.textBoxRender) { + swiperIndicatorData_.textBoxRender->RenderWithContext(context, indicatorPosition_ + offset); + } + } else { + if (swiperIndicatorData_.isPressed || swiperIndicatorData_.isHovered) { + DrawIndicatorBackground(context, offset); + } + DrawIndicatorItems(context, offset); + } +} + +void FlutterRenderSwiper::DrawIndicatorBackground(RenderContext& context, const Offset& offset) +{ + auto canvas = ScopedCanvas::Create(context); + if (!canvas) { + LOGE("Paint canvas is null"); + return; + } + + flutter::Paint paint; + flutter::PaintData paintData; + auto skPaint = paint.paint(); + if (!skPaint) { + LOGE("paint is null"); + return; + } + skPaint->setAntiAlias(true); + + skPaint->setColor(swiperIndicatorData_.indicatorPaintData.color.GetValue()); + skPaint->setAlphaf(opacityValue_); + flutter::RRect rRect; + Offset position = swiperIndicatorData_.indicatorPaintData.position; + double radius = swiperIndicatorData_.indicatorPaintData.radius; + rRect.sk_rrect.setRectXY(SkRect::MakeIWH(swiperIndicatorData_.indicatorPaintData.width, + swiperIndicatorData_.indicatorPaintData.height), radius, radius); + rRect.sk_rrect.offset(position.GetX() + offset.GetX(), position.GetY() + offset.GetY()); + canvas->drawRRect(rRect, paint, paintData); +} + +void FlutterRenderSwiper::DrawIndicatorItems(RenderContext& context, const Offset& offset) +{ + auto canvas = ScopedCanvas::Create(context); + if (!canvas) { + LOGE("Paint canvas is null"); + return; + } + + flutter::Paint paint; + flutter::PaintData paintData; + auto skPaint = paint.paint(); + if (!skPaint) { + LOGE("paint is null"); + return; + } + skPaint->setAntiAlias(true); + + InitMoveRange(); + IndicatorOffsetInfo pointInfo; + flutter::RRect rRect; + GetRRect(rRect, pointInfo.focusStart, pointInfo.focusEnd, offset); + + for (int32_t i = 0; i < itemCount_; i++) { + // calculate point offset + pointInfo.animationMove.Reset(); + GetIndicatorPointMoveOffset(i, pointInfo.animationMove); + pointInfo.center = swiperIndicatorData_.indicatorItemData[i].center + indicatorPosition_; + + // hide point of indicator + if (HideIndicatorPoint(i, pointInfo, offset)) { + continue; + } + // paint point of indicator, and point adsorbent + skPaint->setColor(indicator_->GetColor().GetValue()); + canvas->drawCircle(pointInfo.center.GetX() + offset.GetX() - pointInfo.animationMove.GetX(), + pointInfo.center.GetY() + offset.GetY() - pointInfo.animationMove.GetY(), + swiperIndicatorData_.indicatorItemData[i].radius, paint, paintData); + } + + skPaint->setColor(indicator_->GetSelectedColor().GetValue()); + canvas->drawRRect(rRect, paint, paintData); +} + +void FlutterRenderSwiper::GetIndicatorPointMoveOffset(int32_t index, Offset& animationMove) +{ + if (NearZero(indicatorPointOffset_)) { + return; + } + + if ((index <= moveStartIndex_ && index >= moveEndIndex_) || (index >= moveStartIndex_ && index <= moveEndIndex_)) { + double move = indicatorPointOffset_ * swiperIndicatorData_.indicatorItemData[index].radius; + if (index != moveStartIndex_ && index != moveEndIndex_) { + // the middle points should move distance of diameter + move *= 2.0; + } + if (axis_ == Axis::HORIZONTAL) { + animationMove.SetX(move); + } else { + animationMove.SetY(move); + } + } +} + +void FlutterRenderSwiper::GetRRect(flutter::RRect& rRect, double& startOffset, double& endOffset, const Offset& offset) +{ + // calculate focus move distance + double tailOffset = (GetIndicatorSpringStatus() == SpringStatus::FOCUS_SWITCH) ? + indicatorSwitchTailOffset_ : indicatorTailOffset_; + Offset focusMove; + Offset focusStretch; + double focusStartPadding = + INDICATOR_FOCUS_PADDING_START_SIZE * swiperIndicatorData_.indicatorItemData[moveStartIndex_].radius; + double focusMoveLength = swiperIndicatorData_.pointPadding + focusStartPadding; + double focusMoveDistance = + focusMoveLength * (animationDirect_ > 0 ? tailOffset : indicatorHeadOffset_); + double recStretch = focusMoveLength * (indicatorHeadOffset_ - tailOffset) * animationDirect_; + (axis_ == Axis::HORIZONTAL) ? focusMove.SetX(focusMoveDistance) : focusMove.SetY(focusMoveDistance); + (axis_ == Axis::HORIZONTAL) ? focusStretch.SetX(recStretch) : focusStretch.SetY(recStretch); + + // paint focus of indicator + Offset position = swiperIndicatorData_.indicatorItemData[moveStartIndex_].position + indicatorPosition_; + double radius = swiperIndicatorData_.indicatorItemData[moveStartIndex_].radius; + auto rectWH = SkRect::MakeWH( + swiperIndicatorData_.indicatorItemData[moveStartIndex_].width + focusStretch.GetX(), + swiperIndicatorData_.indicatorItemData[moveStartIndex_].height + focusStretch.GetY()); + rRect.sk_rrect.setRectXY(rectWH, radius, radius); + rRect.sk_rrect.offset(position.GetX() + offset.GetX() + focusMove.GetX(), + position.GetY() + offset.GetY() + focusMove.GetY()); + + // rrect range + if (axis_ == Axis::HORIZONTAL) { + startOffset = position.GetX() + offset.GetX() + focusMove.GetX(); + endOffset = startOffset + swiperIndicatorData_.indicatorItemData[moveStartIndex_].width + focusStretch.GetX(); + } else { + startOffset = position.GetY() + offset.GetY() + focusMove.GetY(); + endOffset = startOffset + swiperIndicatorData_.indicatorItemData[moveStartIndex_].height + focusStretch.GetY(); + } +} + +bool FlutterRenderSwiper::HideIndicatorPoint(int32_t index, const IndicatorOffsetInfo& pointInfo, const Offset& offset) +{ + if (index == moveStartIndex_ || index == moveEndIndex_) { + if (index == moveStartIndex_ && NearZero(indicatorHeadOffset_)) { + return true; + } + double pointStart; + double radius = swiperIndicatorData_.indicatorItemData[index].radius; + if (axis_ == Axis::HORIZONTAL) { + pointStart = pointInfo.center.GetX() + offset.GetX() - pointInfo.animationMove.GetX() - radius; + } else { + pointStart = pointInfo.center.GetY() + offset.GetY() - pointInfo.animationMove.GetY() - radius; + } + double pointEnd = pointStart + swiperIndicatorData_.indicatorItemData[index].radius * 2.0; + if (pointInfo.focusStart < pointStart && pointInfo.focusEnd > pointEnd) { + return true; + } + if (index == moveEndIndex_ && indicatorHeadOffset_ >= focusStretchMaxTime_ && + ((animationDirect_ > 0 && pointInfo.focusEnd >= pointEnd) || + (animationDirect_ < 0 && pointInfo.focusStart <= pointStart))) { + return true; + } + } + return false; +} + +void FlutterRenderSwiper::InitMoveRange() +{ + moveStartIndex_ = currentIndex_; + moveEndIndex_ = targetIndex_; + if (needReverse_) { + moveStartIndex_ = itemCount_ - currentIndex_ - 1; + moveEndIndex_ = itemCount_ - targetIndex_ - 1; + } + + // 1. drag indicator 2.drag content zone + if (isDragStart_) { + moveEndIndex_ = moveStartIndex_ + animationDirect_; + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/swiper/flutter_render_swiper.h b/frameworks/core/components/swiper/flutter_render_swiper.h new file mode 100644 index 00000000..287991ef --- /dev/null +++ b/frameworks/core/components/swiper/flutter_render_swiper.h @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SWIPER_FLUTTER_RENDER_SWIPER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SWIPER_FLUTTER_RENDER_SWIPER_H + +#include "core/components/swiper/render_swiper.h" +#include "core/pipeline/layers/clip_layer.h" + +namespace OHOS::Ace { + +struct IndicatorOffsetInfo { + double focusStart; // start of focus + double focusEnd; // end of focus + Offset center; // circle center of point + Offset animationMove; // move offset of animation +}; + +class FlutterRenderSwiper : public RenderSwiper { + DECLARE_ACE_TYPE(FlutterRenderSwiper, RenderSwiper); + +public: + RenderLayer GetRenderLayer() override; + void Paint(RenderContext& context, const Offset& offset) override; + + bool IsRepaintBoundary() const override + { + return true; + } + +private: + void UpdateIndicator() override; + void PaintIndicator(RenderContext& context, const Offset& offset); + void PaintMask(RenderContext& context, const Offset& offset) const; + void LayoutDigitalIndicator(); + void CanvasDrawIndicator(RenderContext& context, const Offset& offset); + IndicatorProperties PrepareIndicatorProperties() const; + + void DrawIndicator(RenderContext& context, const Offset& offset); + void DrawIndicatorBackground(RenderContext& context, const Offset& offset); + void DrawIndicatorItems(RenderContext& context, const Offset& offset); + + void GetRRect(flutter::RRect& rRect, double& startOffset, double& endOffset, const Offset& offset); + bool HideIndicatorPoint(int32_t index, const IndicatorOffsetInfo& pointInfo, const Offset& offset); + void GetIndicatorPointMoveOffset(int32_t index, Offset& animationMove); + void InitMoveRange(); + + RefPtr layer_; + RefPtr renderDigitalIndicator_; + + int32_t moveStartIndex_ = 0; + int32_t moveEndIndex_ = 0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SWIPER_FLUTTER_RENDER_SWIPER_H diff --git a/frameworks/core/components/swiper/render_swiper.cpp b/frameworks/core/components/swiper/render_swiper.cpp new file mode 100644 index 00000000..3fbd6d3e --- /dev/null +++ b/frameworks/core/components/swiper/render_swiper.cpp @@ -0,0 +1,2357 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/swiper/render_swiper.h" + +#include "core/animation/curve_animation.h" +#include "core/animation/friction_motion.h" +#include "core/animation/keyframe.h" +#include "core/common/frontend.h" +#include "core/components/align/render_align.h" +#include "core/components/display/render_display.h" +#include "core/components/swiper/swiper_component.h" +#include "core/event/ace_event_helper.h" + +namespace OHOS::Ace { +namespace { + +constexpr double MAX_VIEW_PORT_WIDTH = 1080.0; +constexpr int32_t LEAST_SLIDE_ITEM_COUNT = 2; +constexpr uint8_t MAX_OPACITY = 255; +constexpr double CUR_START_TRANSLATE_TIME = 0.0; +constexpr double CUR_END_TRANSLATE_TIME = 1.0; +constexpr double CUR_START_OPACITY_TIME = 0.0; +constexpr uint8_t CUR_START_OPACITY_VALUE = 255; +constexpr uint8_t CUR_END_OPACITY_VALUE = 0; +constexpr double CUR_END_OPACITY_TIME = 0.5; +constexpr double TARGET_START_TRANSLATE_TIME = 0.0; +constexpr double TARGET_END_TRANSLATE_TIME = 1.0; +constexpr double TARGET_START_OPACITY_TIME = 0.3; +constexpr double TARGET_END_OPACITY_TIME = 1.0; +constexpr uint8_t TARGET_START_OPACITY_VALUE = 0; +constexpr uint8_t TARGET_END_OPACITY_VALUE = 255; +constexpr float SWIPE_TO_ANIMATION_TIME = 500.0f; +constexpr uint8_t TRANSLATE_RATIO = 10; +constexpr int32_t COMPONENT_CHANGE_END_LISTENER_KEY = 1001; +constexpr double THRESHOLD = 90.0; +constexpr double SWIPER_ROTATION_SENSITIVITY_NORMAL = 1.4; +constexpr double MIN_SCROLL_OFFSET = 0.20; + +// for indicator animation const param +constexpr double SPRING_MASS = 1.0; +constexpr double SPRING_STIFF = 700.0; +constexpr double SPRING_DAMP = 22.0; +constexpr double SPRING_DAMP_INC = 5.0; +constexpr double DRAG_CALC_STRETCH_STEP = 0.01; +constexpr double DRAG_OFFSET_START_DP = 4.0; +constexpr double DRAG_OFFSET_SWITCH_DP = 14.0; +constexpr double DRAG_STRETCH_LONGEST_DP = 80.0; +constexpr double DRAG_STRETCH_BASE_WIDTH = 1.0; +constexpr double DRAG_STRETCH_BASE_HIGH = 1.0; +constexpr double DRAG_STRETCH_MAX_WIDTH = 1.2; +constexpr double DRAG_STRETCH_MAX_HIGH = 0.8; +constexpr double DRAG_OFFSET_MIN = 0.0; +constexpr double DRAG_OFFSET_MAX = 1.0; +constexpr double ZOOM_MIN = 0.0; +constexpr double ZOOM_MAX = 1.0; +constexpr double OPACITY_MIN = 0.0; +constexpr double OPACITY_MAX = 0.1; +constexpr double ZOOM_DOT_MIN = 0.0; +constexpr double ZOOM_DOT_MAX = 1.0; +constexpr double ZOOM_HOTZONE_MAX_RATE = 1.33; +constexpr double INDICATOR_DIRECT_RTL = 1.0; +constexpr double INDICATOR_DIRECT_LTR = -1.0; +constexpr int32_t VIBRATE_DURATION = 30; +constexpr int32_t ZOOM_IN_DURATION = 250; +constexpr int32_t ZOOM_OUT_DURATION = 250; +constexpr int32_t ZOOM_OUT_HOVER_DURATION = 250; +constexpr int32_t ZOOM_IN_DOT_DURATION = 100; +constexpr int32_t ZOOM_OUT_DOT_DURATION = 150; +constexpr int32_t DRAG_RETRETION_DURATION = 250; +constexpr int32_t INDICATOR_START_ANIMATION = 400; + +// indicator animation curve +const RefPtr INDICATOR_FOCUS_HEAD = AceType::MakeRefPtr(0.2f, 0.0f, 1.0f, 1.0f); +const RefPtr INDICATOR_FOCUS_TAIL = AceType::MakeRefPtr(1.0f, 0.0f, 1.0f, 1.0f); +const RefPtr INDICATOR_NORMAL_POINT = AceType::MakeRefPtr(0.4f, 0.0f, 1.0f, 1.0f); +const RefPtr INDICATOR_ZONE_STRETCH = AceType::MakeRefPtr(0.1f, 0.2f, 0.48f, 1.0f); + +// for indicator +constexpr double DELAY_TIME_DEFAULT = 50; +constexpr int32_t TIME_RATIO = 1000; +constexpr int32_t INDICATOR_INVALID_HOVER_INDEX = -1; +constexpr Dimension INDICATOR_PADDING_TOP_DEFAULT = 9.0_vp; +constexpr Dimension INDICATOR_DIGITAL_PADDING = 8.0_vp; +constexpr Dimension INDICATOR_FOCUS_DEL_OFFSET = 4.0_vp; +constexpr Dimension INDICATOR_FOCUS_DEL_SIZE = 8.0_vp; +constexpr Dimension INDICATOR_FOCUS_RADIUS_DEL_SIZE = 3.0_vp; +constexpr int32_t INDICATOR_FOCUS_COLOR = 0x0a59f7; + +} // namespace + +RenderSwiper::~RenderSwiper() +{ + if (autoPlay_ && scheduler_ && scheduler_->IsActive()) { + scheduler_->Stop(); + } +} + +void RenderSwiper::Update(const RefPtr& component) +{ + const RefPtr swiper = AceType::DynamicCast(component); + if (!swiper) { + LOGW("swiper component is null"); + return; + } + auto context = context_.Upgrade(); + ACE_DCHECK(context); + if (swiper->GetUpdateType() == UpdateType::STYLE) { + // only update indicator when update style + indicator_ = swiper->GetIndicator(); + MarkNeedRender(); + return; + } + disableSwipe_ = swiper->GetDisableSwipe(); + scale_ = context->GetDipScale(); + slideContinued_ = swiper->GetSlideContinue(); + moveCallback_ = swiper->GetMoveCallback(); + itemCount_ = swiper->GetChildren().size(); + animationDuration_ = swiper->GetDuration(); + indicator_ = swiper->GetIndicator(); + digitalIndicator_ = swiper->GetDigitalIndicator(); + changeEvent_ = + AceAsyncEvent&)>::Create(swiper->GetChangeEventId(), context_); + rotationEvent_ = AceAsyncEvent::Create(swiper->GetRotationEventId(), context_); + clickEvent_ = AceAsyncEvent::Create(swiper->GetClickEventId(), context_); + RegisterChangeEndListener(COMPONENT_CHANGE_END_LISTENER_KEY, swiper->GetChangeEndListener()); + autoPlay_ = swiper->IsAutoPlay(); + if (context && context->IsJsCard()) { + autoPlay_ = false; + } + loop_ = swiper->IsLoop(); + show_ = swiper->IsShow(); + autoPlayInterval_ = swiper->GetAutoPlayInterval(); + axis_ = swiper->GetAxis(); + needReverse_ = (swiper->GetTextDirection() == TextDirection::RTL) && (axis_ == Axis::HORIZONTAL); + animationCurve_ = swiper->GetAnimationCurve(); + animationOpacity_ = swiper->IsAnimationOpacity(); + const auto& swiperController = swiper->GetSwiperController(); + if (swiperController) { + auto weak = AceType::WeakClaim(this); + swiperController->SetSwipeToImpl([weak](int32_t index, bool reverse) { + auto swiper = weak.Upgrade(); + if (swiper) { + swiper->SwipeTo(index, reverse); + } + }); + swiperController->SetShowPrevImpl([weak]() { + auto swiper = weak.Upgrade(); + if (swiper) { + swiper->ShowPrevious(); + } + }); + swiperController->SetShowNextImpl([weak]() { + auto swiper = weak.Upgrade(); + if (swiper) { + swiper->ShowNext(); + } + }); + } + + const auto& rotationController = swiper->GetRotationController(); + if (rotationController) { + auto weak = AceType::WeakClaim(this); + rotationController->SetRequestRotationImpl(weak, context_); + } + + int32_t index = swiper->GetIndex(); + // can't change index when stretch indicator, as stretch direct is single. + if (index >= 0 && stretchRate_ == 0.0) { + if (index >= itemCount_) { + index = itemCount_ - 1; + } + if (indexInitialized) { + SwipeTo(index, false); + } else { + currentIndex_ = index; + indexInitialized = true; + } + } + + childrenArray_.clear(); + MarkNeedLayout(); + + if (itemCount_ < LEAST_SLIDE_ITEM_COUNT) { + LOGD("swiper item is less than least slide count"); + return; + } + Initialize(GetContext()); +} + +void RenderSwiper::UpdateTouchRect() +{ + touchRect_.SetSize(GetLayoutSize()); + touchRect_.SetOffset(GetPosition()); +} + +void RenderSwiper::PerformLayout() +{ + // layout all children + const auto& children = GetChildren(); + if (childrenArray_.empty()) { + childrenArray_ = std::vector>(children.begin(), children.end()); + } + + LayoutParam innerLayout = GetLayoutParam(); + int32_t childrenSize = static_cast(childrenArray_.size()); + Size minSize = GetLayoutParam().GetMinSize(); + Size maxSize = GetLayoutParam().GetMaxSize(); + double maxWidth = minSize.Width(); + double maxHeight = minSize.Height(); + for (int32_t i = 0; i < childrenSize; i++) { + const auto& childItem = childrenArray_[i]; + childItem->Layout(innerLayout); + maxWidth = std::max(maxWidth, childItem->GetLayoutSize().Width()); + maxHeight = std::max(maxHeight, childItem->GetLayoutSize().Height()); + } + if (maxSize.IsInfinite()) { + SetLayoutSize(Size(maxWidth, maxHeight)); + } else { + SetLayoutSize(maxSize); + } + Size layoutSize = GetLayoutSize(); + swiperWidth_ = layoutSize.Width(); + swiperHeight_ = layoutSize.Height(); + + prevItemOffset_ = axis_ == Axis::HORIZONTAL ? (needReverse_ ? swiperWidth_ : -swiperWidth_) : -swiperHeight_; + nextItemOffset_ = axis_ == Axis::HORIZONTAL ? (needReverse_ ? -swiperWidth_ : swiperWidth_) : swiperHeight_; + Offset prevItemPosition = GetMainAxisOffset(prevItemOffset_); + Offset nextItemPosition = GetMainAxisOffset(nextItemOffset_); + for (int32_t i = 0; i < childrenSize; i++) { + const auto& childItem = childrenArray_[i]; + if (i < currentIndex_) { + childItem->SetPosition(prevItemPosition); + } else if (i == currentIndex_) { + childItem->SetPosition(Offset::Zero()); + } else { + childItem->SetPosition(nextItemPosition); + } + } + // layout indicator + if (SystemProperties::GetDeviceType() == DeviceType::PHONE) { + LayoutIndicator(swiperIndicatorData_); + } else { + UpdateIndicator(); + } +} + +void RenderSwiper::Initialize(const WeakPtr& context) +{ + if (!disableSwipe_) { + if (axis_ == Axis::VERTICAL) { + dragDetector_ = AceType::MakeRefPtr(); + } else { + dragDetector_ = AceType::MakeRefPtr(); + } + } + if (!controller_) { + controller_ = AceType::MakeRefPtr(context); + } else { + StopSwipeAnimation(); + } + if (!swipeToController_) { + swipeToController_ = AceType::MakeRefPtr(context); + } + + InitIndicatorAnimation(context); + InitRecognizer(); + InitAccessibilityEventListener(); + + // for auto play + auto weak = AceType::WeakClaim(this); + if (!scheduler_) { + auto&& callback = [weak](uint64_t duration) { + auto swiper = weak.Upgrade(); + if (swiper) { + swiper->Tick(duration); + } else { + LOGW("empty swiper, skip tick callback."); + } + }; + scheduler_ = SchedulerBuilder::Build(callback, context); + } else if (scheduler_->IsActive()) { + LOGD("stop autoplay"); + scheduler_->Stop(); + } + + if (autoPlay_ && !scheduler_->IsActive() && show_) { + LOGD("start autoplay"); + scheduler_->Start(); + } +} + +void RenderSwiper::InitRecognizer() +{ + if (!clickRecognizer_) { + auto weak = AceType::WeakClaim(this); + clickRecognizer_ = AceType::MakeRefPtr(); + clickRecognizer_->SetOnClick([weak](const ClickInfo& info) { + auto client = weak.Upgrade(); + if (client) { + client->HandleClick(info); + } + }); + } + auto context = context_.Upgrade(); + if (context && context->IsJsCard()) { + return; + } + InitDragRecognizer(); + InitRawDragRecognizer(); +} + +void RenderSwiper::InitRawDragRecognizer() +{ + if (!rawRecognizer_) { + rawRecognizer_ = AceType::MakeRefPtr(); + auto weak = AceType::WeakClaim(this); + rawRecognizer_->SetOnTouchDown([weak](const TouchEventInfo& info) { + auto client = weak.Upgrade(); + if (client) { + client->HandleTouchDown(info); + } + }); + rawRecognizer_->SetOnTouchUp([weak](const TouchEventInfo& info) { + auto client = weak.Upgrade(); + if (client) { + client->HandleTouchUp(info); + } + }); + rawRecognizer_->SetOnTouchMove([weak](const TouchEventInfo& info) { + auto client = weak.Upgrade(); + if (client) { + client->HandleTouchMove(info); + } + }); + } +} + +void RenderSwiper::InitDragRecognizer() +{ + auto weak = AceType::WeakClaim(this); + if (!dragDetector_) { + return; + } + dragDetector_->SetOnDragStart([weak](const DragStartInfo& info) { + auto client = weak.Upgrade(); + if (client) { + client->HandleDragStart(info); + } + }); + dragDetector_->SetOnDragUpdate([weak](const DragUpdateInfo& info) { + auto client = weak.Upgrade(); + if (client) { + client->HandleDragUpdate(info); + } + }); + dragDetector_->SetOnDragEnd([weak](const DragEndInfo& info) { + auto client = weak.Upgrade(); + if (client) { + client->HandleDragEnd(info); + } + }); +} + +void RenderSwiper::InitAccessibilityEventListener() +{ + auto refNode = accessibilityNode_.Upgrade(); + if (!refNode) { + return; + } + refNode->AddSupportAction(AceAction::ACTION_SCROLL_FORWARD); + refNode->AddSupportAction(AceAction::ACTION_SCROLL_BACKWARD); + + auto weakPtr = AceType::WeakClaim(this); + refNode->SetActionScrollForward([weakPtr]() { + auto swiper = weakPtr.Upgrade(); + if (swiper) { + swiper->ShowPrevious(); + return true; + } + return false; + }); + refNode->SetActionScrollBackward([weakPtr]() { + auto swiper = weakPtr.Upgrade(); + if (swiper) { + swiper->ShowNext(); + return true; + } + return false; + }); +} + +void RenderSwiper::OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) +{ + if (dragDetector_) { + dragDetector_->SetCoordinateOffset(coordinateOffset); + result.emplace_back(dragDetector_); + } + if (rawRecognizer_) { + rawRecognizer_->SetCoordinateOffset(coordinateOffset); + result.emplace_back(rawRecognizer_); + } + if (clickRecognizer_) { + clickRecognizer_->SetCoordinateOffset(coordinateOffset); + result.emplace_back(clickRecognizer_); + } +} + +void RenderSwiper::HandleTouchDown(const TouchEventInfo& info) +{ + if (info.GetTouches().empty()) { + return; + } + const auto& locationInfo = info.GetTouches().front(); + Point touchPoint = Point(locationInfo.GetGlobalLocation().GetX(), locationInfo.GetGlobalLocation().GetY()); + if (fingerId_ >= 0 && locationInfo.GetFingerId() != fingerId_) { + return; + } + + GetIndicatorCurrentRect(swiperIndicatorData_); + if (indicatorRect_.IsInRegion(touchPoint)) { + fingerId_ = locationInfo.GetFingerId(); + startTimeStamp_ = clock(); + if (isIndicatorAnimationStart_) { + touchContentType_ = TouchContentType::TOUCH_NONE; + return; + } + touchContentType_ = TouchContentType::TOUCH_INDICATOR; + } else { + touchContentType_ = TouchContentType::TOUCH_CONTENT; + if (hasDragAction_ && slideContinued_) { + controller_->Finish(); + return; + } + // when is in item moving animation, touch event will break animation and stop in current position + StopSwipeAnimation(); + StopIndicatorAnimation(); + if (autoPlay_) { + scheduler_->Stop(); + } + } + StopIndicatorSpringAnimation(); +} + +// touch up event before than click event +void RenderSwiper::HandleTouchUp(const TouchEventInfo& info) +{ + // for indicator + startTimeStamp_ = 0; + int32_t fingerId = -1; + if (!info.GetTouches().empty()) { + fingerId = info.GetTouches().front().GetFingerId(); + } else if (!info.GetChangedTouches().empty()) { + fingerId = info.GetChangedTouches().front().GetFingerId(); + } + if (fingerId_ >= 0 && fingerId != fingerId_) { + return; + } + + // indicator zone + if (touchContentType_ == TouchContentType::TOUCH_NONE) { + LOGD(" touch content type is none"); + return; + } else if (touchContentType_ == TouchContentType::TOUCH_INDICATOR) { + if (swiperIndicatorData_.isPressed) { + fingerId_ = -1; + if (isDragStart_) { + // reset flag of isPressed by function of HandleDragEnd. + isDragStart_ = false; + return; + } + if (IsZoomOutAnimationStopped()) { + // reset flag of isPressed after zoom out animation + StartZoomOutAnimation(); + } + } + return; + } + + // content zone + if (slideContinued_) { + return; + } + if (hasDragAction_) { + hasDragAction_ = false; + return; + } + if (isIndicatorAnimationStart_) { + return; + } + // restore the item position that slides to half stopped by a touch event during autoplay + scrollOffset_ = fmod(scrollOffset_, nextItemOffset_); + if (scrollOffset_ > 0.0) { + MoveItems(scrollOffset_, currentIndex_, needReverse_ ? GetNextIndex() : GetPrevIndex()); + } else if (scrollOffset_ < 0.0) { + MoveItems(scrollOffset_, currentIndex_, needReverse_ ? GetPrevIndex() : GetNextIndex()); + } else { + // restore autoplay which break by a touch event + RestoreAutoPlay(); + } +} + +void RenderSwiper::HandleTouchMove(const TouchEventInfo& info) +{ + // for indicator + if (!indicator_ || indicator_->GetIndicatorDisabled() || swiperIndicatorData_.isDigital) { + return; + } + + if (info.GetTouches().empty()) { + return; + } + + if (touchContentType_ != TouchContentType::TOUCH_INDICATOR) { + return; + } + + const auto& locationInfo = info.GetTouches().front(); + Point touchPoint = Point(locationInfo.GetGlobalLocation().GetX(), locationInfo.GetGlobalLocation().GetY()); + GetIndicatorCurrentRect(swiperIndicatorData_); + if (indicatorRect_.IsInRegion(touchPoint)) { + if (autoPlay_ && scheduler_->IsActive()) { + // forbid indicator operation on auto play period. + return; + } + if (!swiperIndicatorData_.isHovered) { + int64_t endStartTime = clock(); + if (startTimeStamp_ == 0) { + // move into indicator rage + startTimeStamp_ = endStartTime; + return; + } + double delayTime = static_cast(endStartTime - startTimeStamp_) / TIME_RATIO; + if (!swiperIndicatorData_.isPressed && delayTime >= DELAY_TIME_DEFAULT) { + swiperIndicatorData_.isPressed = true; + StartZoomInAnimation(); + } + } + } +} + +void RenderSwiper::HandleClick(const ClickInfo& clickInfo) +{ + if (clickEvent_) { + clickEvent_(); + } + // for indicator + if (!indicator_ || swiperIndicatorData_.isDigital) { + return; + } + + if (swiperIndicatorData_.isHovered || swiperIndicatorData_.isPressed) { + if (currentHoverIndex_ != INDICATOR_INVALID_HOVER_INDEX) { + StartIndicatorAnimation(currentIndex_, currentHoverIndex_); + return; + } + // refuse click event + LOGD("drop click event on press and hover status, otherwise exist hover index."); + return; + } + + // handle operation not support when indicator disabled. + if (indicator_->GetIndicatorDisabled()) { + return; + } + Point clickPoint = Point(clickInfo.GetGlobalLocation().GetX(), clickInfo.GetGlobalLocation().GetY()); + GetIndicatorCurrentRect(swiperIndicatorData_); + if (!indicatorRect_.IsInRegion(clickPoint)) { + return; + } + if (autoPlay_ && scheduler_->IsActive()) { + // forbid indicator operation on auto play period. + return; + } + if (fingerId_ >= 0 && clickInfo.GetFingerId() != fingerId_) { + return; + } + + Offset offset; + Size size; + Rect itemRect; + if (axis_ == Axis::HORIZONTAL) { + offset = indicatorRect_.GetOffset() + Offset( + swiperIndicatorData_.indicatorItemData[currentIndex_].position.GetX(), 0); + size = Size(swiperIndicatorData_.indicatorItemData[currentIndex_].width, + swiperIndicatorData_.indicatorPaintData.height); + itemRect = Rect(offset, size); + if (clickPoint.GetX() < itemRect.GetOffset().GetX()) { + IndicatorSwipePrev(); + } else if (clickPoint.GetX() > itemRect.Right()) { + IndicatorSwipeNext(); + } + } else { + offset = indicatorRect_.GetOffset() + Offset(0, + swiperIndicatorData_.indicatorItemData[currentIndex_].position.GetY()); + size = Size(swiperIndicatorData_.indicatorPaintData.width, + swiperIndicatorData_.indicatorItemData[currentIndex_].height); + itemRect = Rect(offset, size); + if (clickPoint.GetY() < itemRect.GetOffset().GetY()) { + IndicatorSwipePrev(); + } else if (clickPoint.GetY() > itemRect.Bottom()) { + IndicatorSwipeNext(); + } + } +} + +void RenderSwiper::HandleDragStart(const DragStartInfo& info) +{ + Point dragStartPoint = Point(info.GetGlobalLocation().GetX(), info.GetGlobalLocation().GetY()); + GetIndicatorCurrentRect(swiperIndicatorData_); + if (indicatorRect_.IsInRegion(dragStartPoint)) { + return; + } + if (fingerId_ >= 0 && info.GetFingerId() != fingerId_) { + return; + } + // for swiper item + hasDragAction_ = true; + scrollOffset_ = fmod(scrollOffset_, nextItemOffset_); + if (onFocus_) { + auto context = GetContext().Upgrade(); + if (context) { + context->CancelFocusAnimation(); + } + } +} + +void RenderSwiper::HandleDragUpdate(const DragUpdateInfo& info) +{ + Point touchPoint = Point(info.GetGlobalLocation().GetX(), info.GetGlobalLocation().GetY()); + GetIndicatorCurrentRect(swiperIndicatorData_); + if (swiperIndicatorData_.isPressed) { + if (swiperIndicatorData_.isDigital) { + return; + } + if (autoPlay_ && scheduler_->IsActive()) { + // forbid indicator operation on auto play period. + return; + } + DragIndicator(std::clamp(info.GetMainDelta(), -MAX_VIEW_PORT_WIDTH, MAX_VIEW_PORT_WIDTH)); + } else if (touchContentType_ == TouchContentType::TOUCH_CONTENT) { + UpdateScrollPosition(info.GetMainDelta()); + } +} + +void RenderSwiper::HandleDragEnd(const DragEndInfo& info) +{ + if (swiperIndicatorData_.isPressed) { + DragIndicatorEnd(); + return; + } + + if (touchContentType_ != TouchContentType::TOUCH_CONTENT) { + return; + } + + if (fingerId_ >= 0 && info.GetFingerId() != fingerId_) { + return; + } + + // for swiper item + scrollOffset_ = fmod(scrollOffset_, nextItemOffset_); + if (NearZero(scrollOffset_)) { + // restore autoplay which break by a touch event + RestoreAutoPlay(); + return; + } + if (scrollOffset_ > 0.0) { + MoveItems(scrollOffset_, currentIndex_, needReverse_ ? GetNextIndex() : GetPrevIndex()); + } else { + MoveItems(scrollOffset_, currentIndex_, needReverse_ ? GetPrevIndex() : GetNextIndex()); + } +} + +void RenderSwiper::MoveItems(double dragOffset, int32_t fromIndex, int32_t toIndex) +{ + if (isIndicatorAnimationStart_) { + LOGE("item and indicator animation is processing."); + return; + } + + if (isAnimationAlreadyAdded_) { + controller_->RemoveInterpolator(translate_); + isAnimationAlreadyAdded_ = false; + } + isIndicatorAnimationStart_ = true; + double start = dragOffset; + double end; + + // Adjust offset more than MIN_SCROLL_OFFSET at least + double minOffset = 0.0; + if (axis_ == Axis::VERTICAL) { + minOffset = MIN_SCROLL_OFFSET * swiperHeight_; + } else { + minOffset = MIN_SCROLL_OFFSET * swiperWidth_; + } + bool needRestore = false; + if (!NearZero(dragOffset) && std::abs(dragOffset) < minOffset) { + LOGI("ScrollOffset less than min scroll offset."); + targetIndex_ = fromIndex; + end = 0.0; + needRestore = true; + } else { + targetIndex_ = toIndex; + // auto play drag offset is zero, move to previous + end = needReverse_ ? (dragOffset >= 0.0 ? prevItemOffset_ : nextItemOffset_) + : (dragOffset > 0.0 ? nextItemOffset_ : prevItemOffset_); + } + LOGD("translate animation, start=%{public}f, end=%{public}f", start, end); + translate_ = AceType::MakeRefPtr>(start, end, Curves::LINEAR); + auto weak = AceType::WeakClaim(this); + translate_->AddListener(Animation::ValueCallback([weak, fromIndex, toIndex, start, end](double value) { + auto swiper = weak.Upgrade(); + if (swiper) { + if (value != start && value != end && start != end) { + double moveRate = Curves::EASE_OUT->MoveInternal((value - start) / (end - start)); + value = start + (end - start) * moveRate; + } + swiper->UpdateChildPosition(value, fromIndex, toIndex); + swiper->MoveIndicator(toIndex, value, true); + } + })); + + controller_->ClearStopListeners(); + // trigger the event after the animation ends. + controller_->AddStopListener([weak, fromIndex, toIndex, needRestore]() { + LOGI("slide animation stop"); + // moving animation end, one drag and item move is complete + auto swiper = weak.Upgrade(); + if (swiper) { + swiper->isIndicatorAnimationStart_ = false; + if (!needRestore) { + swiper->outItemIndex_ = fromIndex; + swiper->currentIndex_ = toIndex; + } + swiper->RestoreAutoPlay(); + swiper->FireItemChangedEvent(); + swiper->UpdateItemOpacity(MAX_OPACITY, fromIndex); + swiper->UpdateItemOpacity(MAX_OPACITY, toIndex); + swiper->ExecuteMoveCallback(swiper->currentIndex_); + swiper->MarkNeedLayout(); + } + }); + controller_->SetDuration(animationDuration_); + controller_->AddInterpolator(translate_); + controller_->Play(); + isAnimationAlreadyAdded_ = true; + MarkNeedRender(); +} + +void RenderSwiper::FireItemChangedEvent() const +{ + if (changeEvent_) { + changeEvent_(std::make_shared(currentIndex_)); + } + + for (const auto& [first, second] : changeEndListeners_) { + if (second) { + second(currentIndex_); + } + } +} + +void RenderSwiper::SwipeTo(int32_t index, bool reverse) +{ + if (index >= itemCount_) { + index = itemCount_ - 1; + } else if (index < 0) { + index = 0; + } + if (isIndicatorAnimationStart_) { + RedoSwipeToAnimation(index, reverse); + } else { + StopIndicatorSpringAnimation(); + DoSwipeToAnimation(currentIndex_, index, reverse); + } +} + +void RenderSwiper::InitSwipeToAnimation(double start, double end) +{ + auto curStartTranslateKeyframe = AceType::MakeRefPtr>(CUR_START_TRANSLATE_TIME, start); + auto curEndTranslateKeyframe = AceType::MakeRefPtr>(CUR_END_TRANSLATE_TIME, end); + curEndTranslateKeyframe->SetCurve( + animationCurve_ == AnimationCurve::FRICTION ? Curves::FRICTION : Curves::FAST_OUT_SLOW_IN); + curTranslateAnimation_ = AceType::MakeRefPtr>(); + curTranslateAnimation_->AddKeyframe(curStartTranslateKeyframe); + curTranslateAnimation_->AddKeyframe(curEndTranslateKeyframe); + + auto targetStartTranslateKeyframe = AceType::MakeRefPtr>(TARGET_START_TRANSLATE_TIME, -end); + auto targetEndTranslateKeyframe = AceType::MakeRefPtr>(TARGET_END_TRANSLATE_TIME, start); + targetEndTranslateKeyframe->SetCurve( + animationCurve_ == AnimationCurve::FRICTION ? Curves::FRICTION : Curves::FAST_OUT_SLOW_IN); + targetTranslateAnimation_ = AceType::MakeRefPtr>(); + targetTranslateAnimation_->AddKeyframe(targetStartTranslateKeyframe); + targetTranslateAnimation_->AddKeyframe(targetEndTranslateKeyframe); + + if (animationOpacity_) { + auto curStartOpacityKeyframe = + AceType::MakeRefPtr>(CUR_START_OPACITY_TIME, CUR_START_OPACITY_VALUE); + auto curEndOpacityKeyframe = + AceType::MakeRefPtr>(CUR_END_OPACITY_TIME, CUR_END_OPACITY_VALUE); + curEndOpacityKeyframe->SetCurve( + animationCurve_ == AnimationCurve::FRICTION ? Curves::FRICTION : Curves::FAST_OUT_SLOW_IN); + curOpacityAnimation_ = AceType::MakeRefPtr>(); + curOpacityAnimation_->AddKeyframe(curStartOpacityKeyframe); + curOpacityAnimation_->AddKeyframe(curEndOpacityKeyframe); + + auto targetStartOpacityKeyframe = + AceType::MakeRefPtr>(TARGET_START_OPACITY_TIME, TARGET_START_OPACITY_VALUE); + auto targetEndOpacityKeyframe = + AceType::MakeRefPtr>(TARGET_END_OPACITY_TIME, TARGET_END_OPACITY_VALUE); + targetEndOpacityKeyframe->SetCurve( + animationCurve_ == AnimationCurve::FRICTION ? Curves::FRICTION : Curves::FAST_OUT_SLOW_IN); + targetOpacityAnimation_ = AceType::MakeRefPtr>(); + targetOpacityAnimation_->AddKeyframe(targetStartOpacityKeyframe); + targetOpacityAnimation_->AddKeyframe(targetEndOpacityKeyframe); + } +} + +void RenderSwiper::AddSwipeToTranslateListener(int32_t fromIndex, int32_t toIndex) +{ + auto weak = AceType::WeakClaim(this); + curTranslateAnimation_->AddListener([weak, fromIndex](const double& value) { + auto swiper = weak.Upgrade(); + if (swiper) { + swiper->UpdateItemPosition(value, fromIndex); + } + }); + + targetTranslateAnimation_->AddListener([weak, toIndex](const double& value) { + auto swiper = weak.Upgrade(); + if (swiper) { + swiper->UpdateItemPosition(value, toIndex); + } + }); +} + +void RenderSwiper::AddSwipeToOpacityListener(int32_t fromIndex, int32_t toIndex) +{ + if (!animationOpacity_) { + return; + } + auto weak = AceType::WeakClaim(this); + curOpacityAnimation_->AddListener([weak, fromIndex](const uint8_t& opacity) { + auto swiper = weak.Upgrade(); + if (swiper) { + swiper->UpdateItemOpacity(opacity, fromIndex); + } + }); + + targetOpacityAnimation_->AddListener([weak, toIndex](const uint8_t& opacity) { + auto swiper = weak.Upgrade(); + if (swiper) { + swiper->UpdateItemOpacity(opacity, toIndex); + } + }); +} + +void RenderSwiper::AddSwipeToIndicatorListener(int32_t fromIndex, int32_t toIndex) +{ + indicatorAnimation_ = AceType::MakeRefPtr>( + CUR_START_TRANSLATE_TIME, CUR_END_TRANSLATE_TIME, Curves::LINEAR); + indicatorAnimation_->AddListener( + [weak = AceType::WeakClaim(this), fromIndex, toIndex](const double value) { + auto swiper = weak.Upgrade(); + if (swiper) { + swiper->UpdateIndicatorOffset(fromIndex, toIndex, value); + } + }); + animationDirect_ = (fromIndex - toIndex <= 0) ? INDICATOR_DIRECT_RTL : INDICATOR_DIRECT_LTR; + targetIndex_ = toIndex; +} + +double RenderSwiper::CalculateEndOffset(int32_t fromIndex, int32_t toIndex, bool reverse) +{ + double end = 0.0; + auto context = GetContext().Upgrade(); + if (fromIndex > toIndex) { + // default move to back position, if need reverse direction move to front position. + end = reverse ? prevItemOffset_ / TRANSLATE_RATIO : nextItemOffset_ / TRANSLATE_RATIO; + } else { + // default move to front position, if need reverse direction move to back position. + end = reverse ? nextItemOffset_ / TRANSLATE_RATIO : prevItemOffset_ / TRANSLATE_RATIO; + } + if (context && context->IsJsCard()) { + if (loop_) { + end = reverse ? nextItemOffset_ : prevItemOffset_; + } else { + if (fromIndex > toIndex) { + end = reverse ? prevItemOffset_ : nextItemOffset_; + } else { + end = reverse ? nextItemOffset_ : prevItemOffset_; + } + } + } + return end; +} + +void RenderSwiper::DoSwipeToAnimation(int32_t fromIndex, int32_t toIndex, bool reverse) +{ + if (!swipeToController_ || isIndicatorAnimationStart_ || fromIndex == toIndex) { + return; + } + isIndicatorAnimationStart_ = true; + double start = 0.0; + moveStatus_ = true; + if (onFocus_) { + auto context = GetContext().Upgrade(); + if (context) { + context->CancelFocusAnimation(); + } + } + double end = CalculateEndOffset(fromIndex, toIndex, reverse); + swipeToController_->ClearStopListeners(); + if (isSwipeToAnimationAdded_) { + swipeToController_->ClearInterpolators(); + isSwipeToAnimationAdded_ = false; + } + if (!swipeToController_->IsStopped()) { + swipeToController_->Stop(); + } + + InitSwipeToAnimation(start, end); + AddSwipeToTranslateListener(fromIndex, toIndex); + AddSwipeToOpacityListener(fromIndex, toIndex); + AddSwipeToIndicatorListener(fromIndex, toIndex); + + // trigger the event after the animation ends. + auto weak = AceType::WeakClaim(this); + swipeToController_->AddStopListener([weak, fromIndex, toIndex]() { + auto swiper = weak.Upgrade(); + if (swiper) { + swiper->isIndicatorAnimationStart_ = false; + swiper->outItemIndex_ = fromIndex; + swiper->currentIndex_ = toIndex; + swiper->moveStatus_ = false; + swiper->UpdateIndicatorSpringStatus(SpringStatus::FOCUS_SWITCH); + swiper->UpdateItemOpacity(MAX_OPACITY, fromIndex); + swiper->UpdateItemOpacity(MAX_OPACITY, toIndex); + swiper->RestoreAutoPlay(); + swiper->FireItemChangedEvent(); + swiper->MarkNeedLayout(); + } + }); + swipeToController_->SetDuration(SWIPE_TO_ANIMATION_TIME); + swipeToController_->AddInterpolator(curTranslateAnimation_); + swipeToController_->AddInterpolator(targetTranslateAnimation_); + swipeToController_->AddInterpolator(curOpacityAnimation_); + swipeToController_->AddInterpolator(targetOpacityAnimation_); + swipeToController_->AddInterpolator(indicatorAnimation_); + swipeToController_->SetFillMode(FillMode::FORWARDS); + swipeToController_->Play(); + isSwipeToAnimationAdded_ = true; + + MarkNeedLayout(); +} + +void RenderSwiper::RedoSwipeToAnimation(int32_t toIndex, bool reverse) +{ + if (toIndex == targetIndex_) { + // continue move animation + return; + } + // stop animation before update item position, otherwise the + // animation callback will change the item position + FinishAllSwipeAnimation(); + DoSwipeToAnimation(currentIndex_, toIndex, false); +} + +void RenderSwiper::StopSwipeToAnimation() +{ + if (swipeToController_ && !swipeToController_->IsStopped()) { + swipeToController_->ClearStopListeners(); + swipeToController_->Stop(); + UpdateItemOpacity(MAX_OPACITY, currentIndex_); + UpdateItemOpacity(MAX_OPACITY, targetIndex_); + isIndicatorAnimationStart_ = false; + } +} + +void RenderSwiper::UpdateItemOpacity(uint8_t opacity, int32_t index) +{ + if (!animationOpacity_) { + return; + } + int32_t childrenCount = static_cast(childrenArray_.size()); + if (index < 0 || index >= childrenCount) { + LOGE("index is error, index = %{public}d", index); + return; + } + auto child = childrenArray_[index]; + auto display = AceType::DynamicCast(child); + if (!display) { + return; + } + display->UpdateOpacity(opacity); +} + +void RenderSwiper::UpdateItemPosition(double offset, int32_t index) +{ + int32_t childrenCount = static_cast(childrenArray_.size()); + if (index < 0 || index >= childrenCount) { + LOGE("index is error, index = %{public}d", index); + return; + } + const auto& childItem = childrenArray_[index]; + childItem->SetPosition(GetMainAxisOffset(offset)); + MarkNeedRender(); +} + +int32_t RenderSwiper::GetPrevIndex() const +{ + int32_t index = currentIndex_ - 1; + if (index < 0) { + index = loop_ ? itemCount_ - 1 : 0; + } + return index; +} + +int32_t RenderSwiper::GetPrevIndexOnAnimation() const +{ + int32_t index = targetIndex_ - 1; + if (index < 0) { + index = loop_ ? itemCount_ - 1 : 0; + } + return index; +} + +int32_t RenderSwiper::GetNextIndex() const +{ + int32_t index = currentIndex_ + 1; + if (index >= itemCount_) { + index = loop_ ? 0 : itemCount_ - 1; + } + return index; +} + +int32_t RenderSwiper::GetNextIndexOnAnimation() const +{ + int32_t index = targetIndex_ + 1; + if (index >= itemCount_) { + index = loop_ ? 0 : itemCount_ - 1; + } + return index; +} + +void RenderSwiper::ShowPrevious() +{ + if (isIndicatorAnimationStart_) { + int32_t index = GetPrevIndexOnAnimation(); + RedoSwipeToAnimation(index, false); + } else { + int32_t index = GetPrevIndex(); + StopIndicatorSpringAnimation(); + DoSwipeToAnimation(currentIndex_, index, false); + } +} + +void RenderSwiper::ShowNext() +{ + if (isIndicatorAnimationStart_) { + int32_t index = GetNextIndexOnAnimation(); + RedoSwipeToAnimation(index, false); + } else { + int32_t index = GetNextIndex(); + StopIndicatorSpringAnimation(); + DoSwipeToAnimation(currentIndex_, index, false); + } +} + +void RenderSwiper::OnFocus() +{ + if (autoPlay_) { + LOGD("stop autoplay cause by on focus"); + scheduler_->Stop(); + StopSwipeAnimation(); + StopSwipeToAnimation(); + StopIndicatorAnimation(); + StopIndicatorSpringAnimation(); + ResetIndicatorPosition(); + } +} + +void RenderSwiper::OnBlur() +{ + RestoreAutoPlay(); +} + +void RenderSwiper::RegisterChangeEndListener(int32_t listenerId, const SwiperChangeEndListener& listener) +{ + if (listener) { + changeEndListeners_[listenerId] = listener; + } +} + +void RenderSwiper::UnRegisterChangeEndListener(int32_t listenerId) +{ + changeEndListeners_.erase(listenerId); +} + +void RenderSwiper::UpdateScrollPosition(double dragDelta) +{ + auto limitDelta = std::clamp(dragDelta, -MAX_VIEW_PORT_WIDTH, MAX_VIEW_PORT_WIDTH); + double newDragOffset = scrollOffset_ + limitDelta; + int32_t toIndex = 0; + if (newDragOffset > 0) { + toIndex = needReverse_ ? GetNextIndex() : GetPrevIndex(); + } else { + toIndex = needReverse_ ? GetPrevIndex() : GetNextIndex(); + } + if (toIndex < 0 || toIndex >= itemCount_) { + LOGD("toIndex is out %{public}d", toIndex); + return; + } + + if (std::fabs(newDragOffset) >= std::fabs(nextItemOffset_)) { + scrollOffset_ = (newDragOffset >= nextItemOffset_) ? newDragOffset - nextItemOffset_ + : newDragOffset - prevItemOffset_; + outItemIndex_ = currentIndex_; + currentIndex_ = toIndex; + FireItemChangedEvent(); + UpdateItemOpacity(MAX_OPACITY, outItemIndex_); + UpdateItemOpacity(MAX_OPACITY, currentIndex_); + ExecuteMoveCallback(currentIndex_); + ResetIndicatorPosition(); + MarkNeedLayout(); + // drag length is greater than swiper's width, don't need to move position + LOGD("scroll to next page index[%{public}d] from index[%{public}d], scroll offset:%{public}lf", + currentIndex_, outItemIndex_, scrollOffset_); + return; + } + + bool dragReverse = (newDragOffset * scrollOffset_) < 0.0; + if (dragReverse) { + int32_t lastToIndex = 0; + double toItemPosValue = 0.0; + if (needReverse_) { + lastToIndex = scrollOffset_ > 0 ? GetNextIndex() : GetPrevIndex(); + toItemPosValue = scrollOffset_ > 0 ? nextItemOffset_ : prevItemOffset_; + } else { + lastToIndex = scrollOffset_ > 0 ? GetPrevIndex() : GetNextIndex(); + toItemPosValue = scrollOffset_ > 0 ? prevItemOffset_ : nextItemOffset_; + } + childrenArray_[lastToIndex]->SetPosition(GetMainAxisOffset(toItemPosValue)); + } + + UpdateChildPosition(newDragOffset, currentIndex_, toIndex); + MoveIndicator(toIndex, newDragOffset); +} + +void RenderSwiper::UpdateChildPosition(double offset, int32_t fromIndex, int32_t toIndex) +{ + scrollOffset_ = offset; + int32_t childrenCount = static_cast(childrenArray_.size()); + if (fromIndex < 0 || fromIndex >= childrenCount || toIndex < 0 || toIndex >= childrenCount || + fromIndex == toIndex) { + LOGE("index is error, toIndex = %{public}d, fromIndex = %{public}d, childrenCount = %{public}d", toIndex, + fromIndex, childrenCount); + return; + } + const auto& fromItem = childrenArray_[fromIndex]; + fromItem->SetPosition(GetMainAxisOffset(offset)); + const auto& toItem = childrenArray_[toIndex]; + double toItemPosValue = 0.0; + if (needReverse_) { + toItemPosValue = offset + (offset > 0 ? nextItemOffset_ : prevItemOffset_); + } else { + toItemPosValue = offset + (offset > 0 ? prevItemOffset_ : nextItemOffset_); + } + Offset toItemPos = GetMainAxisOffset(toItemPosValue); + toItem->SetPosition(toItemPos); + MarkNeedRender(); +} + +void RenderSwiper::Tick(uint64_t duration) +{ + elapsedTime_ += duration; + if (elapsedTime_ >= autoPlayInterval_) { + LOGD("Tick %{public}" PRIu64 " %{public}" PRIu64 " timeout", duration, elapsedTime_); + if (currentIndex_ >= itemCount_ - 1 && !loop_) { + LOGD("already last one, stop auto play because not loop"); + scheduler_->Stop(); + } else { + if (swiperIndicatorData_.isPressed) { + // end drag operations on auto play. + DragIndicatorEnd(); + } + if (swiperIndicatorData_.isHovered) { + ResetHoverZoomDot(); + StartZoomOutAnimation(true); + } + int nextIndex = GetNextIndex(); + StartIndicatorAnimation(currentIndex_, nextIndex, currentIndex_ > nextIndex); + } + elapsedTime_ = 0; + } +} + +void RenderSwiper::OnHiddenChanged(bool hidden) +{ + if (hidden) { + if (autoPlay_) { + LOGD("stop autoplay cause by hidden"); + scheduler_->Stop(); + StopSwipeAnimation(); + } + } else { + RestoreAutoPlay(); + } +} + +bool RenderSwiper::OnRotation(const RotationEvent& event) +{ + // Clockwise rotation switches to the next one, counterclockwise rotation switches to the previous one. + rotationStepValue_ += event.value * SWIPER_ROTATION_SENSITIVITY_NORMAL * (-1.0); + if (GreatOrEqual(rotationStepValue_, THRESHOLD)) { + if (rotationEvent_) { + std::string param = + std::string(R"("rotation",{"value":)").append(std::to_string(rotationStepValue_).append("},null")); + rotationEvent_(param); + } + ShowNext(); + rotationStepValue_ = 0.0; + } else if (LessOrEqual(rotationStepValue_, -THRESHOLD)) { + if (rotationEvent_) { + std::string param = + std::string(R"("rotation",{"value":)").append(std::to_string(rotationStepValue_).append("},null")); + rotationEvent_(param); + } + ShowPrevious(); + rotationStepValue_ = 0.0; + } + return true; +} + +void RenderSwiper::OnStatusChanged(RenderStatus renderStatus) +{ + if (renderStatus == RenderStatus::FOCUS) { + onFocus_ = true; + } else if (renderStatus == RenderStatus::BLUR) { + onFocus_ = false; + } +} + +double RenderSwiper::GetValidEdgeLength(double swiperLength, double indicatorLength, const Dimension& edge) const +{ + double edgeLength = edge.Unit() == DimensionUnit::PERCENT ? swiperLength * edge.Value() : NormalizeToPx(edge); + if (!NearZero(edgeLength) && edgeLength > swiperLength - indicatorLength) { + edgeLength = swiperLength - indicatorLength; + } + if (edgeLength < 0.0) { + edgeLength = 0.0; + } + return edgeLength; +} + +void RenderSwiper::GetIndicatorCurrentRect(SwiperIndicatorData& indicatorData) +{ + if (!indicator_) { + indicatorRect_ = Rect(); + return; + } + Offset offset = indicatorPosition_ + GetGlobalOffset(); + Size size = Size(swiperIndicatorData_.indicatorPaintData.width, swiperIndicatorData_.indicatorPaintData.height); + indicatorRect_ = Rect(offset, size); +} + +double RenderSwiper::GetIndicatorWidth(SwiperIndicatorData& indicatorData) +{ + double indicatorWidth = 0.0; + double lastItemEdge = 0.0; + + if (currentHoverIndex_ == itemCount_ - 1) { + double deltaPadding = 0.0; + if (axis_ == Axis::HORIZONTAL) { + lastItemEdge = indicatorData.indicatorItemData[itemCount_ - 1].center.GetX() + + NormalizeToPx(indicator_->GetPressSize()) / 2; + } else { + lastItemEdge = indicatorData.indicatorItemData[itemCount_ - 1].center.GetY() + + NormalizeToPx(indicator_->GetPressSize()) / 2; + } + if (currentIndex_ == itemCount_ - 1) { + deltaPadding = NormalizeToPx(indicator_->GetPressSize()) / 2; + } + indicatorWidth = lastItemEdge + indicatorData.startEndPadding + deltaPadding; + } else { + if (axis_ == Axis::HORIZONTAL) { + lastItemEdge = indicatorData.indicatorItemData[itemCount_ - 1].center.GetX() + + indicatorData.indicatorItemData[itemCount_ - 1].width / 2; + } else { + lastItemEdge = indicatorData.indicatorItemData[itemCount_ - 1].center.GetY() + + indicatorData.indicatorItemData[itemCount_ - 1].height / 2; + } + indicatorWidth = lastItemEdge + indicatorData.startEndPadding; + } + return indicatorWidth; +} + +void RenderSwiper::LayoutIndicator(SwiperIndicatorData& indicatorData) +{ + if (!indicator_) { + LOGW("swiper has not default indicator"); + return; + } + + // calc real hot zone size by zoom and stretch + if (NearZero(hotZoneMaxSize_) || NearZero(hotZoneMinSize_)) { + hotZoneMaxSize_ = NormalizeToPx((indicator_->GetHotZoneSize())); + hotZoneMinSize_ = hotZoneMaxSize_ / ZOOM_HOTZONE_MAX_RATE; + } + hotZoneRealSize_ = hotZoneMinSize_ + (hotZoneMaxSize_ - hotZoneMinSize_) * zoomValue_; + hotZoneRealSize_ *= heightStretchRate_; + + // update indicator item paint data; + indicatorData.isDigital = digitalIndicator_; + if (!digitalIndicator_) { + UpdateIndicatorItem(indicatorData); + } + + // update Indicator paint data + if (digitalIndicator_) { + LayoutDigitalIndicator(indicatorData); + Size digitalIndicatorSize = indicatorData.textBoxRender->GetLayoutSize(); + indicatorData.indicatorPaintData.width = digitalIndicatorSize.Width(); + indicatorData.indicatorPaintData.height = digitalIndicatorSize.Height(); + } else { + if (axis_ == Axis::HORIZONTAL) { + indicatorData.indicatorPaintData.width = GetIndicatorWidth(indicatorData); + indicatorData.indicatorPaintData.height = hotZoneRealSize_; // influenced on zoom and stretch + } else { + indicatorData.indicatorPaintData.width = hotZoneRealSize_; // influenced on zoom and stretch + indicatorData.indicatorPaintData.height = GetIndicatorWidth(indicatorData); + } + } + indicatorData.indicatorPaintData.radius = hotZoneRealSize_ / 2; // influenced on zoom and stretch + if (!digitalIndicator_ && (indicatorData.isHovered || indicatorData.isPressed)) { + indicatorData.indicatorPaintData.color = indicator_->GetHotZoneColor(); + } else { + indicatorData.indicatorPaintData.color = Color::WHITE; + } + + // update position + UpdateIndicatorPosition(indicatorData); +} + +void RenderSwiper::InitDigitalIndicator(SwiperIndicatorData& indicatorData) +{ + auto textBoxComponent = AceType::MakeRefPtr(); + double padding = NormalizeToPx(INDICATOR_DIGITAL_PADDING); + Edge margin = (axis_ == Axis::HORIZONTAL) ? + Edge(padding, 0, padding, 0, DimensionUnit::PX) : + Edge(0, padding, 0, padding, DimensionUnit::PX); + textBoxComponent->SetPadding(margin); + indicatorData.textBoxRender = AceType::DynamicCast(textBoxComponent->CreateRenderNode()); + indicatorData.textBoxRender->Attach(GetContext()); + + // add flex + FlexDirection direction = axis_ == Axis::HORIZONTAL ? FlexDirection::ROW : FlexDirection::COLUMN; + indicatorData.flexComponent = AceType::MakeRefPtr(direction, + FlexAlign::FLEX_END, FlexAlign::CENTER, std::list>()); + indicatorData.flexComponent->SetMainAxisSize(MainAxisSize::MIN); + indicatorData.flexRender = AceType::DynamicCast(indicatorData.flexComponent->CreateRenderNode()); + indicatorData.textBoxRender->AddChild(indicatorData.flexRender); + indicatorData.flexRender->Attach(GetContext()); + indicatorData.flexRender->Update(indicatorData.flexComponent); + + // add text + indicatorData.textComponentPrev = AceType::MakeRefPtr(""); + indicatorData.textRenderPrev = AceType::DynamicCast( + indicatorData.textComponentPrev->CreateRenderNode()); + indicatorData.flexRender->AddChild(indicatorData.textRenderPrev); + indicatorData.textRenderPrev->Attach(GetContext()); + indicatorData.textRenderPrev->Update(indicatorData.textComponentPrev); + + indicatorData.textComponentNext = AceType::MakeRefPtr(""); + indicatorData.textRenderNext = AceType::DynamicCast( + indicatorData.textComponentNext->CreateRenderNode()); + indicatorData.flexRender->AddChild(indicatorData.textRenderNext); + indicatorData.textRenderNext->Attach(GetContext()); + indicatorData.textRenderNext->Update(indicatorData.textComponentNext); + + indicatorData.textBoxRender->Update(textBoxComponent); +} + +void RenderSwiper::LayoutDigitalIndicator(SwiperIndicatorData& indicatorData) +{ + InitDigitalIndicator(indicatorData); + + auto textStyle = indicator_->GetDigitalIndicatorTextStyle(); + Color normalTextColor = textStyle.GetTextColor(); + // update text prev + std::string indicatorTextPrev = std::to_string(currentIndex_ + 1); + if (indicatorIsFocus_) { + textStyle.SetTextColor(indicator_->GetIndicatorTextFocusColor()); + } else { + textStyle.SetTextColor(normalTextColor); + } + indicatorData.textComponentPrev->SetTextStyle(textStyle); + indicatorData.textComponentPrev->SetData(indicatorTextPrev); + indicatorData.textRenderPrev->Update(indicatorData.textComponentPrev); + + // update text next + std::string indicatorTextNext = (axis_ == Axis::HORIZONTAL) ? std::string("/").append(std::to_string(itemCount_)) + : std::string("/\n").append(std::to_string(itemCount_)); + textStyle.SetTextColor(normalTextColor); + indicatorData.textComponentNext->SetTextStyle(textStyle); + indicatorData.textComponentNext->SetData(indicatorTextNext); + indicatorData.textRenderNext->Update(indicatorData.textComponentNext); + + // upadate text box + auto decoration = AceType::MakeRefPtr(); + decoration->SetBackgroundColor(Color::TRANSPARENT); + Border border; + border.SetBorderRadius(Radius(indicator_->GetHotZoneSize() / 2.0)); + decoration->SetBorder(border); + indicatorData.textBoxRender->SetBackDecoration(decoration); + if (axis_ == Axis::HORIZONTAL) { + indicatorData.textBoxRender->SetHeight(NormalizeToPx(indicator_->GetHotZoneSize())); + } else { + indicatorData.textBoxRender->SetWidth(NormalizeToPx(indicator_->GetHotZoneSize())); + } + + LayoutParam innerLayout; + innerLayout.SetMaxSize(Size(swiperWidth_, swiperHeight_)); + indicatorData.textBoxRender->Layout(innerLayout); +} + +void RenderSwiper::UpdateIndicatorPosition(SwiperIndicatorData& indicatorData) +{ + Offset position; + double indicatorWidth = indicatorData.indicatorPaintData.width; + double indicatorHeight = indicatorData.indicatorPaintData.height; + double stableOffset = NormalizeToPx(INDICATOR_PADDING_TOP_DEFAULT) + (hotZoneMaxSize_ + hotZoneRealSize_) * 0.5; + + if (indicator_->GetLeft().Value() != SwiperIndicator::DEFAULT_POSITION) { + int32_t left = GetValidEdgeLength(swiperWidth_, indicatorWidth, indicator_->GetLeft()); + position.SetX(left); + } else if (indicator_->GetRight().Value() != SwiperIndicator::DEFAULT_POSITION) { + int32_t right = GetValidEdgeLength(swiperWidth_, indicatorWidth, indicator_->GetRight()); + position.SetX(swiperWidth_ - indicatorWidth - right); + } else { + if (axis_ == Axis::HORIZONTAL) { + position.SetX((swiperWidth_ - indicatorWidth) / 2.0); + } else { + // horizontal line of indicator zone is stable. + double currentX = swiperWidth_ - stableOffset; + position.SetX(currentX); + } + } + + if (indicator_->GetTop().Value() != SwiperIndicator::DEFAULT_POSITION) { + int32_t top = GetValidEdgeLength(swiperHeight_, indicatorHeight, indicator_->GetTop()); + position.SetY(top); + } else if (indicator_->GetBottom().Value() != SwiperIndicator::DEFAULT_POSITION) { + int32_t bottom = GetValidEdgeLength(swiperHeight_, indicatorHeight, indicator_->GetBottom()); + position.SetY(swiperHeight_ - indicatorHeight - bottom); + } else { + if (axis_ == Axis::HORIZONTAL) { + // horizontal line of indicator zone is stable. + double currentY = swiperHeight_ - stableOffset; + position.SetY(currentY); + } else { + position.SetY((swiperHeight_ - indicatorHeight) / 2.0); + } + } + + // update position on stretch or restract indicator zone + UpdatePositionOnStretch(position, indicatorData); + + // update position + indicatorPosition_ = position; + indicatorData.indicatorPaintData.position = position; + indicatorData.indicatorPaintData.center = position + Offset(indicatorData.indicatorPaintData.width / 2, + indicatorData.indicatorPaintData.height / 2); +} + +void RenderSwiper::UpdateIndicatorItem(SwiperIndicatorData& indicatorData) +{ + // horizontal line of indicator zone is stable + double hotZoneCenterPadding = hotZoneRealSize_ / 2.0; + if (indicatorData.isHovered || indicatorData.isPressed) { + indicatorData.startEndPadding = NormalizeToPx(indicator_->GetStartEndPadding() + + (indicator_->GetPressPadding() - indicator_->GetStartEndPadding()) * zoomValue_); + } else { + indicatorData.startEndPadding = NormalizeToPx(indicator_->GetStartEndPadding()); + } + Offset startCenterOffset = axis_ == Axis::HORIZONTAL ? Offset(indicatorData.startEndPadding, hotZoneCenterPadding) : + Offset(hotZoneCenterPadding, indicatorData.startEndPadding); + Offset centerOffset = startCenterOffset; + + double targetIndex = currentIndex_; + double hoverIndex = currentHoverIndex_; + if (needReverse_) { + targetIndex = itemCount_ - currentIndex_ - 1; + hoverIndex = itemCount_ - currentHoverIndex_ - 1; + } + + double itemRadius = 0.0; + for (int32_t i = 0; i < itemCount_; i++) { + bool isZoomInBackground = indicatorData.isHovered || indicatorData.isPressed; + if (isZoomInBackground) { + // indicator radius and point padding is dynamic changed on zoom and stretch + itemRadius = NormalizeToPx( + indicator_->GetSize() + (indicator_->GetPressSize() - indicator_->GetSize()) * zoomValue_) / 2.0; + indicatorData.pointPadding = NormalizeToPx(indicator_->GetIndicatorPointPadding() + + (indicator_->GetPressPointPadding() - indicator_->GetIndicatorPointPadding()) * + zoomValue_) * widthStretchRate_; + } else { + itemRadius = NormalizeToPx(indicator_->GetSize()) / 2.0; + indicatorData.pointPadding = NormalizeToPx(indicator_->GetIndicatorPointPadding()); + } + + double itemStartEndPadding = 0.0; + if (i == targetIndex) { + itemStartEndPadding = itemRadius * 2; + indicatorData.indicatorItemData[i].color = indicator_->GetSelectedColor(); + } else { + itemStartEndPadding = itemRadius; + indicatorData.indicatorItemData[i].color = indicator_->GetColor(); + } + Offset paddingStartOffset; + Offset paddingEndOffset; + if (axis_ == Axis::HORIZONTAL) { + paddingStartOffset = Offset(itemStartEndPadding, 0); + paddingEndOffset = Offset(itemStartEndPadding + indicatorData.pointPadding, 0); + } else { + paddingStartOffset = Offset(0, itemStartEndPadding); + paddingEndOffset = Offset(0, itemStartEndPadding + indicatorData.pointPadding); + } + + // update mouse hover radius + if (isZoomInBackground && i == hoverIndex) { + // point radius is dynamic changed on mouse hover + itemRadius = NormalizeToPx(indicator_->GetPressSize() + + (indicator_->GetHoverSize() - indicator_->GetPressSize()) * zoomDotValue_) / 2.0; + } + if (axis_ == Axis::HORIZONTAL) { + indicatorData.indicatorItemData[i].height = itemRadius * 2; + indicatorData.indicatorItemData[i].width = (i == targetIndex ? itemRadius * 4 : itemRadius * 2); + } else { + indicatorData.indicatorItemData[i].width = itemRadius * 2; + indicatorData.indicatorItemData[i].height = (i == targetIndex ? itemRadius * 4 : itemRadius * 2); + } + indicatorData.indicatorItemData[i].radius = itemRadius; + + centerOffset += paddingStartOffset; + indicatorData.indicatorItemData[i].center = centerOffset; + indicatorData.indicatorItemData[i].position = centerOffset - + Offset(indicatorData.indicatorItemData[i].width / 2, indicatorData.indicatorItemData[i].height / 2); + centerOffset += paddingEndOffset; + } +} + +void RenderSwiper::UpdatePositionOnStretch(Offset& position, const SwiperIndicatorData& indicatorData) +{ + double indicatorWidth = indicatorData.indicatorPaintData.width; + double indicatorHeight = indicatorData.indicatorPaintData.height; + if (widthStretchRate_ > DRAG_STRETCH_BASE_WIDTH) { + if (zoomValue_ == ZOOM_MAX) { + // stretch indicator and update start position + if (axis_ == Axis::HORIZONTAL) { + if (currentIndex_ == itemCount_ - 1) { + position.SetX(indicatorZoomMaxPositionLT_.GetX()); + } else if (currentIndex_ == 0) { + position.SetX(indicatorZoomMaxPositionRB_.GetX() - indicatorData.indicatorPaintData.width); + } + } else { + if (currentIndex_ == itemCount_ - 1) { + position.SetY(indicatorZoomMaxPositionLT_.GetY()); + } else if (currentIndex_ == 0) { + position.SetY(indicatorZoomMaxPositionRB_.GetY() - indicatorData.indicatorPaintData.height); + } + } + } else if (zoomValue_ > ZOOM_MIN) { + // restract indicator and update start position + if (axis_ == Axis::HORIZONTAL) { + if (currentIndex_ == itemCount_ - 1) { + position.SetX(indicatorZoomMinPositionLT_.GetX() - + (indicatorZoomMinPositionLT_.GetX() - indicatorZoomMaxPositionLT_.GetX()) * zoomValue_); + } else if (currentIndex_ == 0) { + position.SetX(indicatorZoomMinPositionRB_.GetX() - indicatorWidth + + (indicatorZoomMaxPositionRB_.GetX() - indicatorZoomMinPositionRB_.GetX()) * zoomValue_); + } + } else { + if (currentIndex_ == itemCount_ - 1) { + position.SetY(indicatorZoomMinPositionLT_.GetY() - + (indicatorZoomMinPositionLT_.GetY() - indicatorZoomMaxPositionLT_.GetY()) * zoomValue_); + } else if (currentIndex_ == 0) { + position.SetY(indicatorZoomMinPositionRB_.GetY() - indicatorHeight + + (indicatorZoomMaxPositionRB_.GetY() - indicatorZoomMinPositionRB_.GetY()) * zoomValue_); + } + } + } + } +} + +void RenderSwiper::IndicatorSwipePrev() +{ + auto toIndex = GetPrevIndex(); + StartIndicatorAnimation(currentIndex_, toIndex, currentIndex_ == 0); +} + +void RenderSwiper::IndicatorSwipeNext() +{ + auto toIndex = GetNextIndex(); + StartIndicatorAnimation(currentIndex_, toIndex, currentIndex_ == itemCount_ - 1); +} + +bool RenderSwiper::MouseHoverTest(const Point& parentLocalPoint) +{ + auto context = context_.Upgrade(); + if (!context) { + return false; + } + const auto localPoint = parentLocalPoint - GetPosition(); + const auto& children = GetChildren(); + for (auto iter = children.rbegin(); iter != children.rend(); ++iter) { + auto& child = *iter; + child->MouseHoverTest(localPoint); + } + + bool isInRegion = GetTouchRect().IsInRegion(parentLocalPoint); + if (isInRegion) { + context->AddToHoverList(AceType::WeakClaim(this).Upgrade()); + } + + // swiper indicator mouse hover + if (!indicator_) { + return isInRegion; + } + // indicator zone zoom animation should wait for indicator moving animation finished + if (isIndicatorAnimationStart_) { + return isInRegion; + } + + // get absolute position + Point hoverPoint = parentLocalPoint + GetGlobalOffset(); + GetIndicatorCurrentRect(swiperIndicatorData_); + if (indicatorRect_.IsInRegion(hoverPoint)) { + if (autoPlay_ && scheduler_->IsActive()) { + // forbid indicator operation on auto play period. + return isInRegion; + } + if ((!swiperIndicatorData_.isHovered && !swiperIndicatorData_.isPressed) || !IsZoomOutAnimationStopped()) { + // hover animation + swiperIndicatorData_.isHovered = true; + StartZoomInAnimation(true); + return isInRegion; + } + // point zoom after indicator zone zoom. + if (!IsZoomAnimationStopped()) { + return isInRegion; + } + for (int32_t i = 0; i < itemCount_; i++) { + Offset offset = swiperIndicatorData_.indicatorItemData[i].position + indicatorRect_.GetOffset(); + Size size = Size(swiperIndicatorData_.indicatorItemData[i].width, + swiperIndicatorData_.indicatorItemData[i].height); + Rect itemRect = Rect(offset, size); + if (itemRect.IsInRegion(hoverPoint)) { + if (currentHoverIndex_ != i) { + StartZoomInDotAnimation(i); + } + return isInRegion; + } + } + if (currentHoverIndex_ != INDICATOR_INVALID_HOVER_INDEX && IsZoomOutDotAnimationStopped()) { + StartZoomOutDotAnimation(); + } + } else { + if (swiperIndicatorData_.isHovered) { + ResetHoverZoomDot(); + StartZoomOutAnimation(true); + } + } + return isInRegion; +} + +void RenderSwiper::IndicatorShowFocus(bool isFocus) +{ + if (!indicator_) { + return; + } + indicatorIsFocus_ = isFocus; + auto context = context_.Upgrade(); + if (!context) { + return; + } + Offset offset = swiperIndicatorData_.indicatorPaintData.position; + Size size = Size(swiperIndicatorData_.indicatorPaintData.width, swiperIndicatorData_.indicatorPaintData.height); + Offset globalOffset = swiperIndicatorData_.indicatorPaintData.position + GetGlobalOffset(); + double radius = swiperIndicatorData_.indicatorPaintData.radius; + if (isFocus) { + offset += Offset(NormalizeToPx(INDICATOR_FOCUS_DEL_OFFSET), NormalizeToPx(INDICATOR_FOCUS_DEL_OFFSET)); + size -= Size(NormalizeToPx(INDICATOR_FOCUS_DEL_SIZE), NormalizeToPx(INDICATOR_FOCUS_DEL_SIZE)); + globalOffset += Offset(NormalizeToPx(INDICATOR_FOCUS_DEL_OFFSET), NormalizeToPx(INDICATOR_FOCUS_DEL_OFFSET)); + Radius focusRadius = Radius(radius) - Radius(NormalizeToPx(INDICATOR_FOCUS_RADIUS_DEL_SIZE)); + context->ShowFocusAnimation(RRect::MakeRRect(Rect(offset, size), focusRadius), Color(INDICATOR_FOCUS_COLOR), + globalOffset); + } else { + context->CancelFocusAnimation(); + } + MarkNeedLayout(); +} + +void RenderSwiper::UpdateIndicatorFocus(bool isFocus, bool reverse) +{ + if (reverse) { + IndicatorSwipePrev(); + } else { + IndicatorSwipeNext(); + } + IndicatorShowFocus(isFocus); +} + +void RenderSwiper::VibrateIndicator() +{ + auto context = context_.Upgrade(); + if (!context) { + LOGW("GetVibrator fail, context is null"); + return; + } + + if (!vibrator_) { + vibrator_ = VibratorProxy::GetInstance().GetVibrator(context->GetTaskExecutor()); + } + if (vibrator_) { + vibrator_->Vibrate(VIBRATE_DURATION); + } else { + LOGW("GetVibrator fail"); + } +} + +void RenderSwiper::UpdateIndicatorSpringStatus(SpringStatus status) +{ + if (indicatorSpringStatus_ == SpringStatus::SPRING_STOP && + status == SpringStatus::FOCUS_SWITCH) { + return; + } + LOGD("UpdateIndicatorSpringStatus from[%{public}d] to[%{public}d]", indicatorSpringStatus_, status); + indicatorSpringStatus_ = status; +} + +SpringStatus RenderSwiper::GetIndicatorSpringStatus() const +{ + return indicatorSpringStatus_; +} + +void RenderSwiper::ResetIndicatorSpringStatus() +{ + if (GetIndicatorSpringStatus() == SpringStatus::FOCUS_SWITCH) { + UpdateIndicatorTailPosistion(DRAG_OFFSET_MIN, DRAG_OFFSET_MIN); + } + UpdateIndicatorSpringStatus(SpringStatus::SPRING_STOP); +} + +void RenderSwiper::ResetIndicatorPosition() +{ + UpdateIndicatorHeadPosistion(DRAG_OFFSET_MIN); + UpdateIndicatorTailPosistion(DRAG_OFFSET_MIN); + UpdateIndicatorPointPosistion(DRAG_OFFSET_MIN); +} + +void RenderSwiper::ResetHoverZoomDot() +{ + StopZoomDotAnimation(); + UpdateZoomDotValue(ZOOM_DOT_MIN); + currentHoverIndex_ = INDICATOR_INVALID_HOVER_INDEX; +} + +void RenderSwiper::MarkIndicatorPosition(bool isZoomMax) +{ + if (isZoomMax) { + indicatorZoomMaxPositionLT_ = indicatorPosition_; + indicatorZoomMaxPositionRB_ = indicatorZoomMaxPositionLT_ + + Offset(swiperIndicatorData_.indicatorPaintData.width, swiperIndicatorData_.indicatorPaintData.height); + } else { + indicatorZoomMinPositionLT_ = indicatorPosition_; + indicatorZoomMinPositionRB_ = indicatorZoomMinPositionLT_ + + Offset(swiperIndicatorData_.indicatorPaintData.width, swiperIndicatorData_.indicatorPaintData.height); + } +} + +void RenderSwiper::StartIndicatorSpringAnimation(double start, double end) +{ + LOGD("StartIndicatorSpringAnimation(%{public}lf, %{public}lf)", start, end); + UpdateIndicatorSpringStatus(SpringStatus::SPRING_START); + double dampInc = std::fabs(currentIndex_ - targetIndex_) * SPRING_DAMP_INC; + auto springDescription = AceType::MakeRefPtr(SPRING_MASS, SPRING_STIFF, SPRING_DAMP + dampInc); + if (!indicatorSpringMotion_) { + indicatorSpringMotion_ = AceType::MakeRefPtr(start, end, 0.0, springDescription); + } else { + indicatorSpringMotion_->Reset(start, end, 0.0, springDescription); + } + + indicatorSpringMotion_->ClearListeners(); + indicatorSpringMotion_->AddListener([weak = AceType::WeakClaim(this), end](double position) { + auto swiper = weak.Upgrade(); + if (swiper) { + double offset = position; + double switchOffset = position - end; + swiper->UpdateIndicatorTailPosistion(offset, switchOffset); + } + }); + + springController_->PlayMotion(indicatorSpringMotion_); + springController_->AddStopListener([weak = AceType::WeakClaim(this)]() { + auto swiper = weak.Upgrade(); + if (swiper) { + swiper->ResetIndicatorSpringStatus(); + } + }); +} + +// spring animimation +void RenderSwiper::StopIndicatorSpringAnimation() +{ + if (springController_ && !springController_->IsStopped()) { + // clear stop listener before stop + springController_->ClearStopListeners(); + springController_->Stop(); + } + ResetIndicatorSpringStatus(); + LOGD("StopIndicatorSpringAnimation"); +} + +void RenderSwiper::CalMaxStretch() +{ + if (focusStretchMaxTime_ == DRAG_OFFSET_MIN) { + double stretch = DRAG_OFFSET_MIN; + double maxStretch = DRAG_OFFSET_MIN; + const double step = DRAG_CALC_STRETCH_STEP; + for (double i = step; i <= 1.0; i += step) { + stretch = INDICATOR_FOCUS_HEAD->Move(i) - INDICATOR_FOCUS_TAIL->Move(i); + if (stretch > maxStretch) { + maxStretch = stretch; + focusStretchMaxTime_ = i; + } + } + LOGD("CalMaxStretch(%{public}lf), time(%{public}lf)", maxStretch, focusStretchMaxTime_); + } +} + +void RenderSwiper::MoveIndicator(int32_t toIndex, double offset, bool isAuto) +{ + if (toIndex == currentIndex_) { + LOGW("MoveIndicator drop it for edge moving."); + return; + } + + double dragRange = (axis_ == Axis::HORIZONTAL) ? swiperWidth_ : swiperHeight_; + if (NearZero(dragRange)) { + return; + } + double dragRate = offset / dragRange; + animationDirect_ = (currentIndex_ <= toIndex) ? INDICATOR_DIRECT_RTL : INDICATOR_DIRECT_LTR; + dragRate = std::fabs(dragRate); + if (dragRate >= DRAG_OFFSET_MAX) { + // move to end, and index change + UpdateIndicatorPointPosistion(DRAG_OFFSET_MIN); + UpdateIndicatorHeadPosistion(DRAG_OFFSET_MIN); + UpdateIndicatorSpringStatus(SpringStatus::FOCUS_SWITCH); + return; + } + + targetIndex_ = toIndex; + int32_t indicatorMoveNums = std::abs(currentIndex_ - toIndex); + UpdateIndicatorPointPosistion(INDICATOR_NORMAL_POINT->MoveInternal(dragRate)); + UpdateIndicatorHeadPosistion(INDICATOR_FOCUS_HEAD->MoveInternal(dragRate) * indicatorMoveNums); + if (!isAuto) { + // move tails with hand + UpdateIndicatorTailPosistion(INDICATOR_FOCUS_TAIL->MoveInternal(dragRate) * indicatorMoveNums); + return; + } + + // animation + if (dragRate < focusStretchMaxTime_) { + UpdateIndicatorTailPosistion(INDICATOR_FOCUS_TAIL->MoveInternal(dragRate) * indicatorMoveNums); + return; + } + + // curve sport into spring sport + if (GetIndicatorSpringStatus() == SpringStatus::SPRING_STOP) { + LOGD("indicator tail move end, start spring motion."); + double springStart = INDICATOR_FOCUS_TAIL->MoveInternal(dragRate); + UpdateIndicatorTailPosistion(springStart * indicatorMoveNums); + StartIndicatorSpringAnimation(springStart * indicatorMoveNums, DRAG_OFFSET_MAX * indicatorMoveNums); + } +} + +void RenderSwiper::DragIndicator(double offset) +{ + // start drag after zoom in completed. + if (!IsZoomAnimationStopped()) { + LOGD("zoom in is not completed"); + return; + } + + const double longPressDragStart = DRAG_OFFSET_START_DP * scale_; + const double longPressDragSwitchFocus = DRAG_OFFSET_SWITCH_DP * scale_; + const double longPressDragMaxDiff = longPressDragSwitchFocus - longPressDragStart; + if (!isDragStart_) { + isDragStart_ = true; + dragBaseOffset_ = offset; + dragMoveOffset_ = offset; + return; + } + + dragMoveOffset_ += offset; + double diffOffset = dragMoveOffset_ - dragBaseOffset_; + double fabsOffset = std::fabs(diffOffset); + if (fabsOffset <= longPressDragStart) { + // indicator move when drag offset large than 4 vp + return; + } + + animationDirect_ = diffOffset >= 0 && !needReverse_ ? INDICATOR_DIRECT_RTL : INDICATOR_DIRECT_LTR; + if (currentIndex_ + animationDirect_ >= itemCount_ || currentIndex_ + animationDirect_ < 0) { + // drag end and stretch background + return DragEdgeStretch(fabsOffset); + } + + if (fabsOffset >= longPressDragSwitchFocus) { + // focus switch and vibrate + VibrateIndicator(); + outItemIndex_ = currentIndex_; + currentIndex_ += animationDirect_; + dragBaseOffset_ += longPressDragSwitchFocus * animationDirect_; + ResetIndicatorPosition(); + MarkNeedLayout(); + } else { + double dragRate = (fabsOffset - longPressDragStart) / longPressDragMaxDiff; + UpdateIndicatorHeadPosistion(INDICATOR_FOCUS_HEAD->MoveInternal(dragRate)); + UpdateIndicatorTailPosistion(INDICATOR_FOCUS_TAIL->MoveInternal(dragRate)); + UpdateIndicatorPointPosistion(INDICATOR_NORMAL_POINT->MoveInternal(dragRate)); + } +} + +void RenderSwiper::DragIndicatorEnd() +{ + if ((currentIndex_ + animationDirect_ >= itemCount_ || currentIndex_ + animationDirect_ < 0) && + std::fabs(dragMoveOffset_ - dragBaseOffset_) > 0) { + // drag than 80dp, play reset and zoom out animation + LOGD("drag end and start restrection animation"); + StartDragRetractionAnimation(); + StartZoomOutAnimation(); + } else { + ResetIndicatorPosition(); + UpdateEdgeStretchRate(DRAG_OFFSET_MIN); + // only play zoom out animation + LOGD("drag end and start mask zoom out animation"); + StartZoomOutAnimation(); + } + dragBaseOffset_ = DRAG_OFFSET_MIN; + dragMoveOffset_ = DRAG_OFFSET_MIN; +} + +void RenderSwiper::DragEdgeStretch(double offset) +{ + const double longPressDragStrechLongest = DRAG_STRETCH_LONGEST_DP * scale_; + if (offset >= longPressDragStrechLongest) { + UpdateEdgeStretchRate(DRAG_OFFSET_MAX); + } else { + UpdateEdgeStretchRate(offset / longPressDragStrechLongest); + } +} + +void RenderSwiper::StartZoomInAnimation(bool isMouseHover) +{ + StopZoomAnimation(); + if (zoomValue_ == ZOOM_MIN) { + MarkIndicatorPosition(false); + } + LOGD("startZoomInAnimation zoom[%{public}lf,%{public}lf], opacity[%{public}lf,%{public}lf], duration[%{public}d]", + zoomValue_, ZOOM_MAX, opacityValue_, OPACITY_MAX, ZOOM_IN_DURATION); + zoomInAnimation_ = AceType::MakeRefPtr>(zoomValue_, ZOOM_MAX, Curves::SHARP); + zoomInAnimation_->AddListener([weak = AceType::WeakClaim(this)](const double value) { + auto swiper = weak.Upgrade(); + if (swiper) { + swiper->UpdateZoomValue(value); + if (value == ZOOM_MAX) { + // record position zone of indicator zone for strecth when zoom in reach maximum value. + swiper->MarkIndicatorPosition(); + } + } + }); + + opacityInAnimation_ = AceType::MakeRefPtr>(opacityValue_, OPACITY_MAX, Curves::SHARP); + opacityInAnimation_->AddListener([weak = AceType::WeakClaim(this)](const double value) { + auto swiper = weak.Upgrade(); + if (swiper) { + swiper->UpdateMaskOpacity(value); + } + }); + + zoomInController_->ClearInterpolators(); + zoomInController_->AddInterpolator(zoomInAnimation_); + zoomInController_->AddInterpolator(opacityInAnimation_); + zoomInController_->SetDuration(ZOOM_IN_DURATION); + zoomInController_->Play(); +} + +void RenderSwiper::StartZoomOutAnimation(bool isMouseHover) +{ + StopZoomAnimation(); + int duartion = isMouseHover ? ZOOM_OUT_HOVER_DURATION : ZOOM_OUT_DURATION; + LOGD("StartZoomOutAnimation zoom[%{public}lf,%{public}lf], opacity[%{public}lf,%{public}lf], duration[%{public}d]", + zoomValue_, ZOOM_MIN, opacityValue_, OPACITY_MIN, duartion); + zoomOutAnimation_ = AceType::MakeRefPtr>(zoomValue_, ZOOM_MIN, Curves::SHARP); + zoomOutAnimation_->AddListener([weak = AceType::WeakClaim(this)](const double value) { + auto swiper = weak.Upgrade(); + if (swiper) { + swiper->UpdateZoomValue(value); + } + }); + opacityOutAnimation_ = AceType::MakeRefPtr>(opacityValue_, OPACITY_MIN, Curves::SHARP); + opacityOutAnimation_->AddListener([weak = AceType::WeakClaim(this)](const double value) { + auto swiper = weak.Upgrade(); + if (swiper) { + swiper->UpdateMaskOpacity(value); + } + }); + zoomOutController_->ClearInterpolators(); + zoomOutController_->AddInterpolator(zoomOutAnimation_); + zoomOutController_->AddInterpolator(opacityOutAnimation_); + zoomOutController_->SetDuration(duartion); + zoomOutController_->AddStopListener([weak = AceType::WeakClaim(this), isMouseHover]() { + auto swiper = weak.Upgrade(); + if (swiper) { + isMouseHover ? swiper->UpdateHoverStatus(false) : swiper->UpdatePressStatus(false); + } + }); + zoomOutController_->Play(); +} + +void RenderSwiper::StartZoomInDotAnimation(int32_t index) +{ + StopZoomDotAnimation(); // function will reset currentHoverIndex_. set it after stop zoom out dot. + currentHoverIndex_ = index; + LOGD("StartZoomInDotAnimation zoom[%{public}lf, %{public}lf], duration[%{public}d]", + ZOOM_DOT_MIN, ZOOM_DOT_MAX, ZOOM_IN_DOT_DURATION); + if (!zoomInDotAnimation_) { + zoomInDotAnimation_ = AceType::MakeRefPtr>(ZOOM_DOT_MIN, ZOOM_DOT_MAX, Curves::SHARP); + zoomInDotAnimation_->AddListener([weak = AceType::WeakClaim(this)](const double value) { + auto swiper = weak.Upgrade(); + if (swiper) { + swiper->UpdateZoomDotValue(value); + } + }); + } + + zoomInDotController_->ClearInterpolators(); + zoomInDotController_->AddInterpolator(zoomInDotAnimation_); + zoomInDotController_->SetDuration(ZOOM_IN_DOT_DURATION); + zoomInDotController_->Play(); +} + +void RenderSwiper::StartZoomOutDotAnimation() +{ + StopZoomDotAnimation(); + LOGD("StartZoomOutDotAnimation zoom[%{public}lf, %{public}lf], duration[%{public}d]", + ZOOM_DOT_MAX, ZOOM_DOT_MIN, ZOOM_OUT_DOT_DURATION); + if (!zoomOutDotAnimation_) { + zoomOutDotAnimation_ = AceType::MakeRefPtr>(ZOOM_DOT_MAX, ZOOM_DOT_MIN, Curves::SHARP); + zoomOutDotAnimation_->AddListener([weak = AceType::WeakClaim(this)](const double value) { + auto swiper = weak.Upgrade(); + if (swiper) { + swiper->UpdateZoomDotValue(value); + } + }); + } + zoomOutDotController_->ClearInterpolators(); + zoomOutDotController_->AddInterpolator(zoomOutDotAnimation_); + zoomOutDotController_->SetDuration(ZOOM_OUT_DOT_DURATION); + zoomOutDotController_->AddStopListener([weak = AceType::WeakClaim(this)]() { + auto swiper = weak.Upgrade(); + if (swiper) { + swiper->currentHoverIndex_ = INDICATOR_INVALID_HOVER_INDEX; + } + }); + zoomOutDotController_->Play(); +} + +void RenderSwiper::StopZoomAnimation() +{ + LOGD("stopZoomAnimation"); + if (!zoomInController_->IsStopped()) { + zoomInController_->ClearStopListeners(); + zoomInController_->Stop(); + } + if (!zoomOutController_->IsStopped()) { + zoomOutController_->ClearStopListeners(); + zoomOutController_->Stop(); + } +} + +void RenderSwiper::StopZoomDotAnimation() +{ + LOGD("StopZoomDotAnimation"); + if (!zoomInDotController_->IsStopped()) { + zoomInDotController_->ClearStopListeners(); + zoomInDotController_->Stop(); + } + if (!zoomOutDotController_->IsStopped()) { + zoomOutDotController_->ClearStopListeners(); + zoomOutDotController_->Stop(); + } +} + +void RenderSwiper::StartDragRetractionAnimation() +{ + StopDragRetractionAnimation(); + dragRetractionAnimation_ = AceType::MakeRefPtr>( + stretchRate_, TARGET_START_TRANSLATE_TIME, INDICATOR_ZONE_STRETCH); + dragRetractionAnimation_->AddListener([weak = AceType::WeakClaim(this)](const double value) { + auto swiper = weak.Upgrade(); + if (swiper) { + swiper->UpdateEdgeStretchRate(value); + } + }); + + dragRetractionController_->ClearInterpolators(); + dragRetractionController_->AddInterpolator(dragRetractionAnimation_); + dragRetractionController_->SetDuration(DRAG_RETRETION_DURATION); + dragRetractionController_->Play(); +} + +void RenderSwiper::StopDragRetractionAnimation() +{ + if (!dragRetractionController_->IsStopped()) { + dragRetractionController_->ClearStopListeners(); + dragRetractionController_->Stop(); + } +} + +void RenderSwiper::FinishAllSwipeAnimation() +{ + StopSwipeAnimation(); + StopSwipeToAnimation(); + StopIndicatorAnimation(); + StopIndicatorSpringAnimation(); + ResetIndicatorPosition(); + UpdateItemOpacity(MAX_OPACITY, currentIndex_); + UpdateItemOpacity(MAX_OPACITY, targetIndex_); + currentIndex_ = targetIndex_; +} + +bool RenderSwiper::IsZoomAnimationStopped() +{ + return zoomInController_->IsStopped() && zoomOutController_->IsStopped(); +} + +bool RenderSwiper::IsZoomOutAnimationStopped() +{ + return zoomOutController_->IsStopped(); +} + +bool RenderSwiper::IsZoomOutDotAnimationStopped() +{ + return zoomOutDotController_->IsStopped(); +} + +void RenderSwiper::UpdateIndicatorLayout() +{ + LayoutIndicator(swiperIndicatorData_); + MarkNeedRender(); +} + +void RenderSwiper::UpdateIndicatorOffset(int32_t fromIndex, int32_t toIndex, double value) +{ + int32_t indicatorMoveNums = std::abs(fromIndex - toIndex); + if (value >= 1.0) { + // move to end, and index change + UpdateIndicatorSpringStatus(SpringStatus::FOCUS_SWITCH); + UpdateIndicatorPointPosistion(DRAG_OFFSET_MIN); + UpdateIndicatorHeadPosistion(DRAG_OFFSET_MIN); + return; + } + + UpdateIndicatorPointPosistion(INDICATOR_NORMAL_POINT->MoveInternal(value)); + UpdateIndicatorHeadPosistion(INDICATOR_FOCUS_HEAD->MoveInternal(value) * indicatorMoveNums); + if (value < focusStretchMaxTime_) { + UpdateIndicatorTailPosistion(INDICATOR_FOCUS_TAIL->MoveInternal(value) * indicatorMoveNums); + return; + } + + // curive sport into spring sport + if (GetIndicatorSpringStatus() == SpringStatus::SPRING_STOP) { + LOGD("indicator tail move end, start spring sport."); + double springStart = INDICATOR_FOCUS_TAIL->MoveInternal(value) * indicatorMoveNums; + UpdateIndicatorTailPosistion(springStart); + StartIndicatorSpringAnimation(springStart, indicatorMoveNums * DRAG_OFFSET_MAX); + } +} + +void RenderSwiper::UpdateIndicatorHeadPosistion(double offset) +{ + indicatorHeadOffset_ = offset * animationDirect_; +} + +void RenderSwiper::UpdateIndicatorTailPosistion(double offset, double switchOffset) +{ + indicatorTailOffset_ = offset * animationDirect_; + // if indicator switch to the next or last, tail offset will be different. + indicatorSwitchTailOffset_ = switchOffset * animationDirect_; + MarkNeedRender(); +} + +void RenderSwiper::UpdateIndicatorPointPosistion(double offset) +{ + indicatorPointOffset_ = offset * animationDirect_; + MarkNeedRender(); +} + +void RenderSwiper::UpdateMaskOpacity(double value) +{ + opacityValue_ = value; + MarkNeedRender(); +} + +void RenderSwiper::UpdateZoomValue(double value) +{ + zoomValue_ = value; + LayoutIndicator(swiperIndicatorData_); + MarkNeedRender(); +} + +void RenderSwiper::UpdateZoomDotValue(double value) +{ + zoomDotValue_ = value; + LayoutIndicator(swiperIndicatorData_); + MarkNeedRender(); +} + +void RenderSwiper::UpdateEdgeStretchRate(double value) +{ + stretchRate_ = value; + widthStretchRate_ = DRAG_STRETCH_BASE_WIDTH + (DRAG_STRETCH_MAX_WIDTH - DRAG_STRETCH_BASE_WIDTH) * value; + heightStretchRate_ = DRAG_STRETCH_BASE_HIGH + (DRAG_STRETCH_MAX_HIGH - DRAG_STRETCH_BASE_HIGH) * value; + LayoutIndicator(swiperIndicatorData_); + MarkNeedRender(); +} + +void RenderSwiper::UpdatePressStatus(bool isPress) +{ + swiperIndicatorData_.isPressed = isPress; +} + +void RenderSwiper::UpdateHoverStatus(bool isHover) +{ + swiperIndicatorData_.isHovered = isHover; +} + +void RenderSwiper::StartIndicatorAnimation(int32_t fromIndex, int32_t toIndex, bool isLoop) +{ + LOGD("StartIndicatorAnimation"); + if (fromIndex == toIndex) { + LOGD("from index is same to next index."); + return; + } + if (isIndicatorAnimationStart_) { + LOGE("indicator animation is processing."); + return; + } + + CalMaxStretch(); + StopIndicatorSpringAnimation(); + StopIndicatorAnimation(); + ResetHoverZoomDot(); + targetIndex_ = toIndex; + isIndicatorAnimationStart_ = true; + animationDirect_ = (fromIndex - toIndex <= 0) ? INDICATOR_DIRECT_RTL : INDICATOR_DIRECT_LTR; + // the start offset of swiper content zone. + double contentOffset = (animationDirect_ == INDICATOR_DIRECT_RTL) ? (isLoop ? nextItemOffset_ : prevItemOffset_) + : (isLoop ? prevItemOffset_ : nextItemOffset_); + indicatorAnimation_ = AceType::MakeRefPtr>( + CUR_START_TRANSLATE_TIME, CUR_END_TRANSLATE_TIME, Curves::LINEAR); + indicatorAnimation_->AddListener( + [weak = AceType::WeakClaim(this), fromIndex, toIndex, contentOffset](const double value) { + auto swiper = weak.Upgrade(); + if (swiper) { + swiper->UpdateIndicatorOffset(fromIndex, toIndex, value); + double itemOffset = (value == CUR_END_TRANSLATE_TIME) ? value : Curves::EASE_OUT->MoveInternal(value); + swiper->UpdateChildPosition(itemOffset * contentOffset, fromIndex, toIndex); + } + }); + + indicatorController_->ClearInterpolators(); + indicatorController_->AddInterpolator(indicatorAnimation_); + indicatorController_->SetDuration(INDICATOR_START_ANIMATION); + indicatorController_->ClearStopListeners(); + indicatorController_->AddStopListener([weak = AceType::WeakClaim(this), fromIndex, toIndex]() { + auto swiper = weak.Upgrade(); + if (swiper) { + swiper->isIndicatorAnimationStart_ = false; + swiper->outItemIndex_ = fromIndex; + swiper->currentIndex_ = toIndex; + swiper->UpdateIndicatorSpringStatus(SpringStatus::FOCUS_SWITCH); + swiper->MarkNeedLayout(); + } + }); + indicatorController_->Play(); +} + +void RenderSwiper::StopIndicatorAnimation() +{ + LOGD("stopZoomAnimation"); + if (indicatorController_ && !indicatorController_->IsStopped()) { + indicatorController_->ClearStopListeners(); + indicatorController_->Stop(); + isIndicatorAnimationStart_ = false; + } +} + +void RenderSwiper::InitIndicatorAnimation(const WeakPtr& context) +{ + if (!springController_) { + springController_ = AceType::MakeRefPtr(context); + } else { + StopIndicatorSpringAnimation(); + } + if (!zoomInController_) { + zoomInController_ = AceType::MakeRefPtr(context); + } + if (!zoomOutController_) { + zoomOutController_ = AceType::MakeRefPtr(context); + } + if (!zoomInDotController_) { + zoomInDotController_ = AceType::MakeRefPtr(context); + } + if (!zoomOutDotController_) { + zoomOutDotController_ = AceType::MakeRefPtr(context); + } + if (!dragRetractionController_) { + dragRetractionController_ = AceType::MakeRefPtr(context); + } + if (!indicatorController_) { + indicatorController_ = AceType::MakeRefPtr(context); + } else { + StopIndicatorAnimation(); + ResetIndicatorPosition(); + } + CalMaxStretch(); +} +} // namespace OHOS::Ace diff --git a/frameworks/core/components/swiper/render_swiper.h b/frameworks/core/components/swiper/render_swiper.h new file mode 100644 index 00000000..de9749b3 --- /dev/null +++ b/frameworks/core/components/swiper/render_swiper.h @@ -0,0 +1,421 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SWIPER_RENDER_SWIPER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SWIPER_RENDER_SWIPER_H + +#include +#include +#include + +#include "base/memory/ace_type.h" +#include "base/utils/macros.h" +#include "core/animation/animation.h" +#include "core/animation/animator.h" +#include "core/animation/keyframe_animation.h" +#include "core/animation/spring_motion.h" +#include "core/common/vibrator/vibrator_proxy.h" +#include "core/components/box/render_box.h" +#include "core/components/common/properties/swiper_indicator.h" +#include "core/components/common/rotation/rotation_controller.h" +#include "core/components/common/rotation/rotation_node.h" +#include "core/components/flex/flex_component.h" +#include "core/components/flex/render_flex.h" +#include "core/components/text/render_text.h" +#include "core/components/text/text_component.h" +#include "core/gestures/click_recognizer.h" +#include "core/gestures/drag_recognizer.h" +#include "core/gestures/raw_recognizer.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +struct IndicatorPaintData { + double width = 0.0; + double height = 0.0; + double radius = 0.0; + Color color; + Offset position; + Offset center; +}; + +struct SwiperIndicatorData { + bool isDigital = false; + bool isPressed = false; + bool isHovered = false; + IndicatorPaintData indicatorPaintData; + std::unordered_map indicatorItemData; + double pointPadding = 0.0; + double startEndPadding = 0.0; + RefPtr textBoxRender; + RefPtr flexComponent; + RefPtr flexRender; + RefPtr textComponentPrev; + RefPtr textRenderPrev; + RefPtr textComponentNext; + RefPtr textRenderNext; +}; + +enum class SpringStatus { + SPRING_STOP = 0, + SPRING_START, + FOCUS_SWITCH, +}; + +// swiper contains content and indicator, their operations are mutually exclusive. +enum class TouchContentType { + TOUCH_NONE = 0, + TOUCH_CONTENT, + TOUCH_INDICATOR +}; + +using SwiperChangeEndListener = std::function; +using MoveCallback = std::function; + +class ACE_EXPORT SwiperChangeEvent : public BaseEventInfo, public EventToJSONStringAdapter { + DECLARE_RELATIONSHIP_OF_CLASSES(SwiperChangeEvent, BaseEventInfo, EventToJSONStringAdapter); + +public: + SwiperChangeEvent(int32_t index) : BaseEventInfo("SwiperChangeEvent"), index_(index) {} + ~SwiperChangeEvent() = default; + + int32_t GetIndex() const + { + return index_; + } + + std::string ToJSONString() const override + { + return std::string(R"("change",{"index":)").append(std::to_string(index_).append("},null")); + } + +private: + int32_t index_ = 0; +}; + +class ACE_EXPORT RenderSwiper : public RenderNode, public RotationNode { + DECLARE_ACE_TYPE(RenderSwiper, RenderNode, RotationNode) + +public: + ~RenderSwiper() override; + static RefPtr Create(); + void Update(const RefPtr& component) override; + void UpdateTouchRect() override; + void PerformLayout() override; + int32_t GetCurrentIndex() const + { + return currentIndex_; + } + void OnFocus(); + void OnBlur(); + void RegisterChangeEndListener(int32_t listenerId, const SwiperChangeEndListener& listener); + void UnRegisterChangeEndListener(int32_t listenerId); + bool OnRotation(const RotationEvent& event) override; + void OnStatusChanged(RenderStatus renderStatus) override; + void IndicatorShowFocus(bool isFocus); + void UpdateIndicatorFocus(bool isFocus, bool reverse); + + bool GetMoveStatus() const + { + return moveStatus_; + } + + void ExecuteMoveCallback(int32_t index) + { + if (moveCallback_) { + moveCallback_(index); + } + } + + void DisableSwipe(bool disableSwipe) + { + disableSwipe_ = disableSwipe; + } + + /* indicator animimation begin */ + // indicator status init + void InitIndicatorAnimation(const WeakPtr& context); + void CalMaxStretch(); + + // indicator with move or drag + void MoveIndicator(int32_t toIndex, double offset, bool isAuto = false); + void DragIndicator(double offset); + void DragIndicatorEnd(); + void DragEdgeStretch(double offset); + void VibrateIndicator(); + + // indicator animation function + void StartIndicatorAnimation(int32_t fromIndex, int32_t toIndex, bool isLoop = false); + void StopIndicatorAnimation(); + void StartIndicatorSpringAnimation(double start, double end); + void StopIndicatorSpringAnimation(); + void StartZoomInAnimation(bool isMouseHover = false); + void StartZoomOutAnimation(bool isMouseHover = false); + void StartZoomInDotAnimation(int32_t index); + void StartZoomOutDotAnimation(); + void StopZoomAnimation(); + void StopZoomDotAnimation(); + void StartDragRetractionAnimation(); // on handle drag end + void StopDragRetractionAnimation(); + void FinishAllSwipeAnimation(); + bool IsZoomAnimationStopped(); + bool IsZoomOutAnimationStopped(); + bool IsZoomOutDotAnimationStopped(); + + // indicator info update with animimation + void UpdateIndicatorLayout(); + void UpdateIndicatorOffset(int32_t fromIndex, int32_t toIndex, double value); + void UpdateIndicatorHeadPosistion(double offset); + void UpdateIndicatorTailPosistion(double offset, double switchOffset = 0.0); + void UpdateIndicatorPointPosistion(double offset); + void UpdateMaskOpacity(double value); + void UpdateZoomValue(double value); + void UpdateZoomDotValue(double value); + void UpdateEdgeStretchRate(double value); // input 0.0 ~ 1.0 to real rate of high and witdh + void UpdatePressStatus(bool isPress); + void UpdateHoverStatus(bool isHover); + void UpdatePositionOnStretch(Offset& position, const SwiperIndicatorData& indicatorData); + void UpdateIndicatorSpringStatus(SpringStatus status); + SpringStatus GetIndicatorSpringStatus() const; + void ResetIndicatorSpringStatus(); + void ResetIndicatorPosition(); + void ResetHoverZoomDot(); + void MarkIndicatorPosition(bool isZoomMax = true); + /* indicator animimation end */ + +protected: + struct IndicatorProperties final { + IndicatorProperties(const Offset& normalPaddingStart, const Offset& normalPaddingEnd, + const Offset& selectedPaddingStart, const Offset& selectedPaddingEnd, const Offset& centerPadding, + uint32_t normalColor, uint32_t selectedColor, double normalPointRadius, double selectedPointRadius, + double indicatorPointPadding) + : normalPaddingStart(normalPaddingStart), normalPaddingEnd(normalPaddingEnd), + selectedPaddingStart(selectedPaddingStart), selectedPaddingEnd(selectedPaddingEnd), + centerPadding(centerPadding), normalColor(normalColor), selectedColor(selectedColor), + normalPointRadius(normalPointRadius), selectedPointRadius(selectedPointRadius), + indicatorPointPadding(indicatorPointPadding) + {} + IndicatorProperties(IndicatorProperties&& indicatorProperties) = default; + ~IndicatorProperties() = default; + + Offset normalPaddingStart; + Offset normalPaddingEnd; + Offset selectedPaddingStart; + Offset selectedPaddingEnd; + Offset centerPadding; + uint32_t normalColor; + uint32_t selectedColor; + double normalPointRadius; + double selectedPointRadius; + double indicatorPointPadding; + }; + virtual void UpdateIndicator() = 0; + void OnHiddenChanged(bool hidden) override; + double GetValidEdgeLength(double swiperLength, double indicatorLength, const Dimension& edge) const; + void GetIndicatorCurrentRect(SwiperIndicatorData& indicatorData); + double GetIndicatorWidth(SwiperIndicatorData& indicatorData); + void LayoutIndicator(SwiperIndicatorData& indicatorData); + void InitDigitalIndicator(SwiperIndicatorData& indicatorData); + void LayoutDigitalIndicator(SwiperIndicatorData& indicatorData); + void UpdateIndicatorPosition(SwiperIndicatorData& indicatorData); + void UpdateIndicatorItem(SwiperIndicatorData& indicatorData); + void IndicatorSwipePrev(); + void IndicatorSwipeNext(); + bool MouseHoverTest(const Point& parentLocalPoint) override; + + // swiper item + std::vector> childrenArray_; + double scale_ = 0.0; + int32_t itemCount_ = 0; + float animationDuration_ = 0.0f; + double swiperWidth_ = 0.0; + double swiperHeight_ = 0.0; + int32_t currentIndex_ = 0; + int32_t targetIndex_ = 0; + int32_t outItemIndex_ = 0; + Axis axis_ = Axis::HORIZONTAL; + AnimationCurve animationCurve_ = AnimationCurve::FRICTION; + bool animationOpacity_ = true; + bool needReverse_ = false; + bool moveStatus_ = false; + bool show_ = true; + bool digitalIndicator_ = false; + bool onFocus_ = false; + + // swiper indicator + RefPtr indicator_; + SwiperIndicatorData swiperIndicatorData_; + Offset indicatorPosition_; + Offset indicatorZoomMaxPositionLT_; // left and top position when zoom max + Offset indicatorZoomMaxPositionRB_; // right and bottom position when zoom max + Offset indicatorZoomMinPositionLT_; // left and top position when zoom min + Offset indicatorZoomMinPositionRB_; // right and bottom position when zoom min + Rect indicatorRect_; + int32_t currentHoverIndex_ = -1; + int64_t startTimeStamp_ = 0; + int32_t fingerId_ = -1; + bool indicatorIsFocus_ = false; + + // indicator dynamic offset info used by canvas + double animationDirect_ = 1.0; // 1.0 or -1.0 + double indicatorHeadOffset_ = 0.0; // [0.0, 1.0) + double indicatorTailOffset_ = 0.0; // [0.0, 1.0) + double indicatorPointOffset_ = 0.0; // [0.0, 1.0) + double indicatorSwitchTailOffset_ = 0.0; // [0.0, 1.0) + double opacityValue_ = 0.0; + double focusStretchMaxTime_ = 0.0; // the time of focus indicator stretch longest in range [0.0, 1.0] + + // indicator animation flag + bool isIndicatorAnimationStart_ = false; + bool isDragStart_ = false; + +private: + // for handle drag event + void OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) override; + void HandleTouchDown(const TouchEventInfo& info); + void HandleTouchUp(const TouchEventInfo& info); + void HandleTouchMove(const TouchEventInfo& info); + void HandleClick(const ClickInfo& clickInfo); + void HandleDragStart(const DragStartInfo& info); + void HandleDragUpdate(const DragUpdateInfo& info); + void HandleDragEnd(const DragEndInfo& info); + + void Initialize(const WeakPtr& context); + void InitRecognizer(); + void InitDragRecognizer(); + void InitRawDragRecognizer(); + void InitAccessibilityEventListener(); + void MoveItems(double dragOffset, int32_t fromIndex, int32_t toIndex); + void RestoreAutoPlay() + { + if (autoPlay_) { + bool playEnding = currentIndex_ >= itemCount_ - 1 && !loop_; + if (playEnding && scheduler_->IsActive()) { + scheduler_->Stop(); + } else { + scheduler_->Start(); + } + } + } + void StopSwipeAnimation() + { + if (controller_ && !controller_->IsStopped()) { + // clear stop listener before stop, otherwise the previous swipe will be considered complete + controller_->ClearStopListeners(); + controller_->Stop(); + isIndicatorAnimationStart_ = false; + } + } + + void FireItemChangedEvent() const; + void SwipeTo(int32_t index, bool reverse); + int32_t GetPrevIndex() const; + int32_t GetNextIndex() const; + int32_t GetPrevIndexOnAnimation() const; + int32_t GetNextIndexOnAnimation() const; + void ShowPrevious(); + void ShowNext(); + void InitSwipeToAnimation(double start, double end); + void AddSwipeToTranslateListener(int32_t fromIndex, int32_t toIndex); + void AddSwipeToOpacityListener(int32_t fromIndex, int32_t toIndex); + void AddSwipeToIndicatorListener(int32_t fromIndex, int32_t toIndex); + double CalculateEndOffset(int32_t fromIndex, int32_t toIndex, bool reverse); + void DoSwipeToAnimation(int32_t fromIndex, int32_t toIndex, bool reverse); + void RedoSwipeToAnimation(int32_t toIndex, bool reverse); + void StopSwipeToAnimation(); + void UpdateItemOpacity(uint8_t opacity, int32_t index); + void UpdateItemPosition(double offset, int32_t index); + + void UpdateScrollPosition(double dragDelta); + void UpdateChildPosition(double offset, int32_t fromIndex, int32_t toIndex); + Offset GetMainAxisOffset(double offset) const + { + return axis_ == Axis::HORIZONTAL ? Offset(offset, 0) : Offset(0, offset); + } + // timer tick callback, duration is in millisecond. + void Tick(uint64_t duration); + + RefPtr rawRecognizer_; + RefPtr clickRecognizer_; + RefPtr dragDetector_; + RefPtr> translate_; + RefPtr controller_; + RefPtr swipeToController_; + + RefPtr> curTranslateAnimation_; + RefPtr> targetTranslateAnimation_; + RefPtr> curOpacityAnimation_; + RefPtr> targetOpacityAnimation_; + + bool isAnimationAlreadyAdded_ = false; + bool hasDragAction_ = false; + bool isSwipeToAnimationAdded_ = false; + std::function&)> changeEvent_; + std::function rotationEvent_; + std::function clickEvent_; + + double prevItemOffset_ = 0.0; + double nextItemOffset_ = 0.0; + double scrollOffset_ = 0.0; + double rotationStepValue_ = 0.0; + bool autoPlay_ = false; + bool loop_ = true; + bool slideContinued_ = false; + bool disableSwipe_ = false; + bool indexInitialized = false; + + // need timer for auto play + RefPtr scheduler_; + uint64_t elapsedTime_ = 0; // millisecond. + uint64_t autoPlayInterval_ = 0; + std::map> changeEndListeners_; + MoveCallback moveCallback_; + + // indicator animimation controller and indicator dyanamic info. + RefPtr indicatorSpringMotion_; + RefPtr> indicatorAnimation_; + RefPtr> zoomInDotAnimation_; + RefPtr> zoomOutDotAnimation_; + RefPtr> zoomInAnimation_; + RefPtr> zoomOutAnimation_; + RefPtr> opacityInAnimation_; + RefPtr> opacityOutAnimation_; + RefPtr> dragRetractionAnimation_; + RefPtr zoomInController_; + RefPtr zoomOutController_; + RefPtr zoomInDotController_; + RefPtr zoomOutDotController_; + RefPtr springController_; + RefPtr indicatorController_; + RefPtr dragRetractionController_; + RefPtr vibrator_ = nullptr; + SpringStatus indicatorSpringStatus_ = SpringStatus::SPRING_STOP; + TouchContentType touchContentType_ = TouchContentType::TOUCH_NONE; + double hotZoneMaxSize_ = 0.0; + double hotZoneMinSize_ = 0.0; + double hotZoneRealSize_ = 0.0; + double zoomValue_ = 0.0; + double zoomDotValue_ = 0.0; + double stretchRate_ = 0.0; + double widthStretchRate_ = 1.0; + double heightStretchRate_ = 1.0; + double dragBaseOffset_ = 0.0; + double dragMoveOffset_ = 0.0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SWIPER_RENDER_SWIPER_H diff --git a/frameworks/core/components/swiper/swiper_component.h b/frameworks/core/components/swiper/swiper_component.h new file mode 100644 index 00000000..b97783f6 --- /dev/null +++ b/frameworks/core/components/swiper/swiper_component.h @@ -0,0 +1,369 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SWIPER_SWIPER_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SWIPER_SWIPER_COMPONENT_H + +#include "base/utils/macros.h" +#include "core/components/common/properties/swiper_indicator.h" +#include "core/components/swiper/render_swiper.h" +#include "core/components/swiper/swiper_element.h" +#include "core/pipeline/base/component_group.h" + +namespace OHOS::Ace { + +inline constexpr uint32_t DEFAULT_SWIPER_CURRENT_INDEX = 0; +inline constexpr double DEFAULT_SWIPER_ANIMATION_DURATION = 400.0; +inline constexpr double DEFAULT_SWIPER_AUTOPLAY_INTERVAL = 3000.0; + +using SwipeToImpl = std::function; +using SwiperChangeEndListener = std::function; +using ShowPrevImpl = std::function; +using ShowNextImpl = std::function; + +class SwiperController : public virtual AceType { + DECLARE_ACE_TYPE(SwiperController, AceType); + +public: + void SwipeTo(int32_t index, bool reverse = false) + { + if (swipeToImpl_) { + swipeToImpl_(index, reverse); + } + } + + void SetSwipeToImpl(const SwipeToImpl& swipeToImpl) + { + swipeToImpl_ = swipeToImpl; + } + + void ShowPrevious() + { + if (showPrevImpl_) { + showPrevImpl_(); + } + } + + void SetShowPrevImpl(const ShowPrevImpl& showPrevImpl) + { + showPrevImpl_ = showPrevImpl; + } + + void ShowNext() + { + if (showNextImpl_) { + showNextImpl_(); + } + } + + void SetShowNextImpl(const ShowNextImpl& showNextImpl) + { + showNextImpl_ = showNextImpl; + } + +private: + SwipeToImpl swipeToImpl_; + ShowPrevImpl showPrevImpl_; + ShowNextImpl showNextImpl_; +}; + +class ACE_EXPORT SwiperComponent : public ComponentGroup { + DECLARE_ACE_TYPE(SwiperComponent, ComponentGroup); + +public: + explicit SwiperComponent(const std::list>& children) : ComponentGroup(children) + { + swiperController_ = AceType::MakeRefPtr(); + rotationController_ = AceType::MakeRefPtr(); + }; + SwiperComponent(const std::list>& children, bool showIndicator) : ComponentGroup(children) + { + if (showIndicator) { + indicator_ = AceType::MakeRefPtr(); + } + swiperController_ = AceType::MakeRefPtr(); + rotationController_ = AceType::MakeRefPtr(); + }; + ~SwiperComponent() override = default; + + RefPtr CreateRenderNode() override + { + return RenderSwiper::Create(); + } + + RefPtr CreateElement() override + { + return AceType::MakeRefPtr(); + } + + uint32_t GetIndex() const + { + return index_; + } + void SetIndex(uint32_t index) + { + index_ = index; + } + + Axis GetAxis() const + { + return axis_; + } + void SetAxis(Axis axis) + { + axis_ = axis; + } + + bool IsLoop() const + { + return loop_; + } + void SetLoop(bool loop) + { + loop_ = loop; + } + + bool IsAutoPlay() const + { + return autoPlay_; + } + void SetAutoPlay(bool autoPlay) + { + autoPlay_ = autoPlay; + } + + bool IsShow() const + { + return show_; + } + void SetShow(bool show) + { + show_ = show; + } + + double GetAutoPlayInterval() const + { + return autoPlayInterval_; + } + void SetAutoPlayInterval(double autoPlayInterval) + { + autoPlayInterval_ = autoPlayInterval; + } + + void SetChangeEventId(const EventMarker& changeEventId) + { + changeEventId_ = changeEventId; + } + const EventMarker& GetChangeEventId() const + { + return changeEventId_; + } + + const EventMarker& GetRotationEventId() const + { + return rotationEventId_; + } + void SetRotationEventId(const EventMarker& rotationEventId) + { + rotationEventId_ = rotationEventId; + } + + const EventMarker& GetClickEventId() const + { + return clickEventId_; + } + void SetClickEventId(const EventMarker& clickEventId) + { + clickEventId_ = clickEventId; + } + + void SetDuration(double duration) + { + duration_ = duration; + } + double GetDuration() const + { + return duration_; + } + + RefPtr GetIndicator() const + { + return indicator_; + } + void SetIndicator(const RefPtr& indicator) + { + indicator_ = indicator; + } + void SetIndicatorColor(const Color& color) + { + if (indicator_) { + indicator_->SetColor(color); + } + } + void SetIndicatorSelectedColor(const Color& selectedColor) + { + if (indicator_) { + indicator_->SetSelectedColor(selectedColor); + } + } + + void SetIndicatorSize(const Dimension& size) + { + if (indicator_) { + indicator_->SetSize(size); + } + } + + void SetIndicatorSelectedSize(const Dimension& selectedSize) + { + if (indicator_) { + indicator_->SetSelectedSize(selectedSize); + } + } + + void SetIndicatorTop(const Dimension& top) + { + if (indicator_) { + indicator_->SetTop(top); + } + } + + void SetIndicatorLeft(const Dimension& left) + { + if (indicator_) { + indicator_->SetLeft(left); + } + } + + void SetIndicatorBottom(const Dimension& bottom) + { + if (indicator_) { + indicator_->SetBottom(bottom); + } + } + + void SetIndicatorRight(const Dimension& right) + { + if (indicator_) { + indicator_->SetRight(right); + } + } + + RefPtr GetSwiperController() const + { + return swiperController_; + } + + const RefPtr& GetRotationController() const + { + return rotationController_; + } + + const SwiperChangeEndListener& GetChangeEndListener() const + { + return changeEndListener_; + } + + void SetChangeEndListener(const SwiperChangeEndListener& changeEndListener) + { + changeEndListener_ = changeEndListener; + } + + void SetDigitalIndicator(bool digitalIndicator) + { + digitalIndicator_ = digitalIndicator; + } + + bool GetDigitalIndicator() const + { + return digitalIndicator_; + } + + void SetMoveCallback(const MoveCallback& moveCallback) + { + moveCallback_ = moveCallback; + } + + const MoveCallback& GetMoveCallback() const + { + return moveCallback_; + } + + void SetSlideContinue(bool slideContinued) + { + slideContinued_ = slideContinued; + } + + bool GetSlideContinue() const + { + return slideContinued_; + } + + void DisableSwipe(bool disableSwipe) + { + disableSwipe_ = disableSwipe; + } + + bool GetDisableSwipe() const + { + return disableSwipe_; + } + + AnimationCurve GetAnimationCurve() const + { + return animationCurve_; + } + + void SetAnimationCurve(AnimationCurve animationCurve) + { + animationCurve_ = animationCurve; + } + + bool IsAnimationOpacity() const + { + return animationOpacity_; + } + + void SetAnimationOpacity(bool animationOpacity) + { + animationOpacity_ = animationOpacity; + } + +private: + uint32_t index_ { DEFAULT_SWIPER_CURRENT_INDEX }; + double duration_ { DEFAULT_SWIPER_ANIMATION_DURATION }; + EventMarker changeEventId_; + EventMarker rotationEventId_; + EventMarker clickEventId_; + RefPtr indicator_; + Axis axis_ { Axis::HORIZONTAL }; + bool loop_ { true }; + bool autoPlay_ { false }; + bool show_ { true }; + bool digitalIndicator_ { false }; + bool slideContinued_ { false }; + bool disableSwipe_ { false }; + bool animationOpacity_ { true }; + double autoPlayInterval_ { DEFAULT_SWIPER_AUTOPLAY_INTERVAL }; + RefPtr swiperController_; + RefPtr rotationController_; + SwiperChangeEndListener changeEndListener_; + MoveCallback moveCallback_; + AnimationCurve animationCurve_ { AnimationCurve::FRICTION }; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SWIPER_SWIPER_COMPONENT_H diff --git a/frameworks/core/components/swiper/swiper_element.cpp b/frameworks/core/components/swiper/swiper_element.cpp new file mode 100644 index 00000000..a55e4f1d --- /dev/null +++ b/frameworks/core/components/swiper/swiper_element.cpp @@ -0,0 +1,271 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/swiper/swiper_element.h" + +#include "core/components/swiper/render_swiper.h" +#include "core/components/swiper/swiper_component.h" + +namespace OHOS::Ace { +namespace { + +constexpr int32_t ELEMENT_CHANGE_END_LISTENER_KEY = 1002; +constexpr int32_t INDICATOR_FOCUS_INDEX = 1; + +} // namespace + +void SwiperElement::PerformBuild() +{ + auto swiperComponent = AceType::DynamicCast(component_); + if (!swiperComponent) { + LOGE("get swiper component failed!"); + return; + } + axis_ = swiperComponent->GetAxis(); + auto indicator = swiperComponent->GetIndicator(); + if (!indicator) { + showIndicator_ = false; + } + + if (showIndicator_ && !indicatorFocusNode_) { + indicatorFocusNode_ = AceType::MakeRefPtr(); + FocusGroup::AddChild(indicatorFocusNode_); + registerCallBack(); + } + ComponentGroupElement::PerformBuild(); +} + +void SwiperElement::registerCallBack() +{ + if (!indicatorFocusNode_) { + return; + } + indicatorFocusNode_->SetOnFocusCallback([weak = WeakClaim(this)](void) { + auto client = weak.Upgrade(); + auto weakContext = client->GetContext(); + auto context = weakContext.Upgrade(); + if (client && context) { + client->HandleIndicatorFocus(true && context->IsKeyEvent()); + } + }); + + indicatorFocusNode_->SetOnBlurCallback([weak = WeakClaim(this)](void) { + auto client = weak.Upgrade(); + if (client) { + client->HandleIndicatorFocus(false); + } + }); +} + +bool SwiperElement::IsFocusable() const +{ + auto swiper = DynamicCast(renderNode_); + if (!swiper) { + LOGE("get render node failed"); + return false; + } + + if (showIndicator_) { + return true; + } else { + int32_t currentIndex = swiper->GetCurrentIndex(); + auto currentFocusNode = focusNodes_.begin(); + std::advance(currentFocusNode, currentIndex); + if (currentFocusNode == focusNodes_.end()) { + LOGE("target focus node is null"); + return false; + } + return (*currentFocusNode)->IsFocusable(); + } +} + +void SwiperElement::OnFocus() +{ + auto swiper = DynamicCast(renderNode_); + if (!swiper) { + LOGE("get render node failed"); + itLastFocusNode_ = focusNodes_.end(); + return; + } + swiper->OnStatusChanged(RenderStatus::FOCUS); + + if (showIndicator_) { + auto currentFocusNode = focusNodes_.begin(); + if ((*currentFocusNode)->RequestFocusImmediately()) { + itLastFocusNode_ = currentFocusNode; + indicatorFocusNode_ = *itLastFocusNode_; + } + } else { + int32_t currentIndex = swiper->GetCurrentIndex(); + auto currentFocusNode = focusNodes_.begin(); + std::advance(currentFocusNode, currentIndex); + if (currentFocusNode != focusNodes_.end()) { + if ((*currentFocusNode)->RequestFocusImmediately()) { + itLastFocusNode_ = currentFocusNode; + swiper->OnFocus(); + } else { + // Not found any focusable node, clear focus. + itLastFocusNode_ = focusNodes_.end(); + } + } + } + swiper->RegisterChangeEndListener(ELEMENT_CHANGE_END_LISTENER_KEY, [weak = WeakClaim(this)](int32_t index) { + auto client = weak.Upgrade(); + if (client) { + client->RequestChildFocus(index); + } + }); +} + +void SwiperElement::RequestChildFocus(int32_t index) +{ + auto currentFocusNode = focusNodes_.begin(); + if (showIndicator_) { + std::advance(currentFocusNode, index + INDICATOR_FOCUS_INDEX); + } else { + std::advance(currentFocusNode, index); + } + if (currentFocusNode != focusNodes_.end()) { + if ((*currentFocusNode)->RequestFocusImmediately()) { + itLastFocusNode_ = currentFocusNode; + } + } +} + +void SwiperElement::OnBlur() +{ + FocusGroup::OnBlur(); + auto swiper = DynamicCast(renderNode_); + if (swiper) { + swiper->OnBlur(); + swiper->UnRegisterChangeEndListener(ELEMENT_CHANGE_END_LISTENER_KEY); + swiper->OnStatusChanged(RenderStatus::BLUR); + } +} + +void SwiperElement::HandleIndicatorFocus(bool isFocus) +{ + auto swiper = DynamicCast(renderNode_); + if (!swiper) { + LOGE("get swiper render node failed"); + return; + } + swiper->IndicatorShowFocus(isFocus); +} + +bool SwiperElement::RequestNextFocus(bool vertical, bool reverse, const Rect& rect) +{ + auto swiper = DynamicCast(renderNode_); + if (!swiper) { + return false; + } + if (showIndicator_ && (*itLastFocusNode_ == indicatorFocusNode_)) { + if ((axis_ == Axis::HORIZONTAL && vertical) || (axis_ != Axis::HORIZONTAL && !vertical)) { + if (reverse) { + return RequestCurrentItemFocus(); + } + } else { + swiper->UpdateIndicatorFocus(true, reverse); + return true; + } + } else { + if (showIndicator_) { + if ((axis_ == Axis::HORIZONTAL && vertical) || (axis_ != Axis::HORIZONTAL && !vertical)) { + if (!reverse) { + return RequestIndicatorFocus(); + } + } + } else { + return false; + } + } + return false; +} + +bool SwiperElement::RequestIndicatorFocus() +{ + auto swiper = DynamicCast(renderNode_); + if (!swiper) { + return false; + } + auto currentFocusNode = focusNodes_.begin(); + if ((*currentFocusNode)->RequestFocusImmediately()) { + itLastFocusNode_ = currentFocusNode; + indicatorFocusNode_ = *itLastFocusNode_; + swiper->IndicatorShowFocus(true); + return true; + } + return false; +} + +bool SwiperElement::RequestCurrentItemFocus() +{ + auto swiper = DynamicCast(renderNode_); + if (!swiper) { + LOGE("get swiper render node failed"); + return false; + } + int32_t currentIndex = swiper->GetCurrentIndex(); + auto currentFocusNode = focusNodes_.begin(); + if (showIndicator_) { + std::advance(currentFocusNode, currentIndex + INDICATOR_FOCUS_INDEX); + } else { + std::advance(currentFocusNode, currentIndex); + } + if (currentFocusNode != focusNodes_.end()) { + if ((*currentFocusNode)->RequestFocusImmediately()) { + itLastFocusNode_ = currentFocusNode; + swiper->IndicatorShowFocus(false); + return true; + } + } + return false; +} + +bool SwiperElement::OnKeyEvent(const KeyEvent& keyEvent) +{ + if (!IsCurrentFocus()) { + return false; + } + + if (itLastFocusNode_ != focusNodes_.end() && (*itLastFocusNode_)->HandleKeyEvent(keyEvent)) { + return true; + } + + if (FocusNode::OnKeyEvent(keyEvent)) { + return true; + } + + if (keyEvent.action != KeyAction::UP) { + return false; + } + + switch (keyEvent.code) { + case KeyCode::TV_CONTROL_UP: + return RequestNextFocus(true, true, GetRect()); + case KeyCode::TV_CONTROL_DOWN: + return RequestNextFocus(true, false, GetRect()); + case KeyCode::TV_CONTROL_LEFT: + return RequestNextFocus(false, true, GetRect()); + case KeyCode::TV_CONTROL_RIGHT: + return RequestNextFocus(false, false, GetRect()); + case KeyCode::KEYBOARD_TAB: + return RequestNextFocus(false, false, GetRect()) || RequestNextFocus(true, false, GetRect()); + default: + return false; + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/swiper/swiper_element.h b/frameworks/core/components/swiper/swiper_element.h new file mode 100644 index 00000000..db159a93 --- /dev/null +++ b/frameworks/core/components/swiper/swiper_element.h @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SWIPER_SWIPER_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SWIPER_SWIPER_ELEMENT_H + +#include "base/geometry/axis.h" +#include "base/utils/macros.h" +#include "core/focus/focus_node.h" +#include "core/pipeline/base/component_group_element.h" +#include "core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +class ACE_EXPORT SwiperElement : public ComponentGroupElement, public FocusGroup { + DECLARE_ACE_TYPE(SwiperElement, ComponentGroupElement, FocusGroup); + +public: + bool IsFocusable() const override; + void PerformBuild() override; + +protected: + void OnFocus() override; + void OnBlur() override; + bool RequestNextFocus(bool vertical, bool reverse, const Rect& rect) override; + bool OnKeyEvent(const KeyEvent& keyEvent) override; + +private: + void registerCallBack(); + void RequestChildFocus(int32_t index); + void HandleIndicatorFocus(bool isFocus); + bool RequestIndicatorFocus(); + bool RequestCurrentItemFocus(); + + RefPtr indicatorFocusNode_; + bool showIndicator_ = true; + Axis axis_ = Axis::HORIZONTAL; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SWIPER_SWIPER_ELEMENT_H diff --git a/frameworks/core/components/swiper/swiper_indicator_theme.h b/frameworks/core/components/swiper/swiper_indicator_theme.h new file mode 100644 index 00000000..46524d89 --- /dev/null +++ b/frameworks/core/components/swiper/swiper_indicator_theme.h @@ -0,0 +1,200 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SWIPER_SWIPER_INDICATOR_THEME_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SWIPER_SWIPER_INDICATOR_THEME_H + +#include "core/components/theme/theme.h" +#include "core/components/theme/theme_constants.h" + +namespace OHOS::Ace { + +class SwiperIndicatorTheme : public virtual Theme { + DECLARE_ACE_TYPE(SwiperIndicatorTheme, Theme); + +public: + class Builder { + public: + Builder() = default; + ~Builder() = default; + + RefPtr Build(const RefPtr& themeConstants) const + { + RefPtr theme = AceType::Claim(new SwiperIndicatorTheme()); + if (!themeConstants) { + return theme; + } + theme->color_ = themeConstants->GetColor(THEME_SWIPER_INDICATOR_NORMAL_COLOR); + theme->selectedColor_ = themeConstants->GetColor(THEME_SWIPER_INDICATOR_SELECTED_COLOR); + theme->size_ = themeConstants->GetDimension(THEME_SWIPER_INDICATOR_SIZE); + theme->selectedSize_ = themeConstants->GetDimension(THEME_SWIPER_INDICATOR_SELECTED_SIZE); + theme->isHasMask_ = themeConstants->GetInt(THEME_SWIPER_INDICATOR_MASK); + theme->indicatorPointPadding_ = themeConstants->GetDimension(THEME_SWIPER_INDICATOR_POINT_PADDING); + theme->digitalIndicatorTextStyle_.SetFontSize( + themeConstants->GetDimension(THEME_SWIPER_DIGITAL_INDICATOR_FONT_SIZE)); + theme->digitalIndicatorTextStyle_.SetTextColor( + themeConstants->GetColor(THEME_SWIPER_DIGITAL_INDICATOR_TEXT_COLOR)); + theme->startEndPadding_ = themeConstants->GetDimension(THEME_SWIPER_INDICATOR_START_END_PADDING); + theme->pressPadding_ = themeConstants->GetDimension(THEME_SWIPER_INDICATOR_PRESS_PADDING); + theme->pressPointPadding_ = themeConstants->GetDimension(THEME_SWIPER_INDICATOR_PRESS_POINT_PADDING); + theme->pressSize_ = themeConstants->GetDimension(THEME_SWIPER_INDICATOR_PRESS_SIZE); + theme->hoverSize_ = themeConstants->GetDimension(THEME_SWIPER_INDICATOR_HOVER_SIZE); + theme->hotZoneSize_ = themeConstants->GetDimension(THEME_SWIPER_INDICATOR_HOTZONE_SIZE); + theme->hotZoneColor_ = themeConstants->GetColor(THEME_SWIPER_INDICATOR_HOTZONE_COLOR); + theme->hotZoneSize_ = themeConstants->GetDimension(THEME_SWIPER_INDICATOR_HOTZONE_SIZE); + theme->indicatorTextFocusColor_ = themeConstants->GetColor(THEME_SWIPER_DIGITAL_INDICATOR_FOCUS_TEXT_COLOR); + theme->isIndicatorDisabled_ = themeConstants->GetInt(THEME_SWIPER_INDICATOR_DISABLED); + theme->animationCurve_ = AnimationCurve(themeConstants->GetInt(THEME_SWIPER_ANIMATION_CURVE)); + theme->animationOpacity_ = themeConstants->GetInt(THEME_SWIPER_ANIMATION_OPACITY); + auto themeStyle = themeConstants->GetThemeStyle(); + if (!themeStyle) { + return theme; + } + theme->digitalIndicatorTextStyle_.SetFontSize( + themeStyle->GetAttr(THEME_ATTR_TEXT_SIZE_BODY2, 0.0_vp)); + auto swiperPattern = themeStyle->GetAttr>(THEME_PATTERN_SWIPER, nullptr); + if (!swiperPattern) { + LOGE("Pattern of swiper is null, please check!"); + return theme; + } + theme->color_ = swiperPattern->GetAttr(INDICATOR_COLOR_UNSELECTED, Color::RED); + theme->hotZoneColor_ = swiperPattern->GetAttr(INDICATOR_MASK_COLOR, Color::RED); + theme->indicatorTextFocusColor_ = swiperPattern->GetAttr(INDICATOR_TEXT_COLOR_FOCUS, Color::RED); + theme->digitalIndicatorTextStyle_.SetTextColor( + swiperPattern->GetAttr(INDICATOR_TEXT_COLOR, Color::RED)); + theme->selectedColor_ = swiperPattern->GetAttr(INDICATOR_COLOR_SELECTED, Color::RED); + return theme; + } + }; + + ~SwiperIndicatorTheme() override = default; + + const Color& GetColor() const + { + return color_; + } + + const Color& GetSelectedColor() const + { + return selectedColor_; + } + + const Dimension& GetSize() const + { + return size_; + } + + const Dimension& GetSelectedSize() const + { + return selectedSize_; + } + + bool GetIndicatorMask() const + { + return isHasMask_; + } + + const Dimension& GetIndicatorPointPadding() const + { + return indicatorPointPadding_; + } + + const TextStyle& GetDigitalIndicatorTextStyle() const + { + return digitalIndicatorTextStyle_; + } + + const Dimension& GetStartEndPadding() const + { + return startEndPadding_; + } + + const Dimension& GetPressPadding() const + { + return pressPadding_; + } + + const Dimension& GetPressPointPadding() const + { + return pressPointPadding_; + } + + const Dimension& GetPressSize() const + { + return pressSize_; + } + + const Dimension& GetHoverSize() const + { + return hoverSize_; + } + + const Dimension& GetHotZoneSize() const + { + return hotZoneSize_; + } + + const Color& GetHotZoneColor() const + { + return hotZoneColor_; + } + + const Color& GetIndicatorTextFocusColor() const + { + return indicatorTextFocusColor_; + } + + bool GetIndicatorDisabled() const + { + return isIndicatorDisabled_; + } + + AnimationCurve GetAnimationCurve() const + { + return animationCurve_; + } + + bool IsAnimationOpacity() const + { + return animationOpacity_; + } + +protected: + SwiperIndicatorTheme() = default; + +private: + Color color_; + Color selectedColor_; + Dimension size_; + Dimension selectedSize_; + Dimension indicatorPointPadding_; + bool isHasMask_ = false; + TextStyle digitalIndicatorTextStyle_; + Dimension startEndPadding_; + Dimension pressPadding_; + Dimension pressPointPadding_; + Dimension pressSize_; + Dimension hoverSize_; + Dimension hotZoneSize_; + Color hotZoneColor_; + Color indicatorTextFocusColor_; + bool isIndicatorDisabled_ = false; + AnimationCurve animationCurve_ = { AnimationCurve::FRICTION }; + bool animationOpacity_ = true; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_SWIPER_SWIPER_INDICATOR_THEME_H diff --git a/frameworks/core/components/tab_bar/BUILD.gn b/frameworks/core/components/tab_bar/BUILD.gn new file mode 100644 index 00000000..67a399fb --- /dev/null +++ b/frameworks/core/components/tab_bar/BUILD.gn @@ -0,0 +1,33 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("tab_bar") { + sources = [ + "flutter_render_tab_bar.cpp", + "flutter_render_tab_bar_item.cpp", + "flutter_render_tab_content.cpp", + "render_tab_bar.cpp", + "render_tab_bar_item.cpp", + "render_tab_content.cpp", + "tab_bar_component.cpp", + "tab_bar_element.cpp", + "tab_bar_indicator_component.cpp", + "tab_bar_item_component.cpp", + "tab_bar_size_animation.cpp", + "tab_content_component.cpp", + "tab_content_element.cpp", + "tab_controller.cpp", + ] +} diff --git a/frameworks/core/components/tab_bar/flutter_render_tab_bar.cpp b/frameworks/core/components/tab_bar/flutter_render_tab_bar.cpp new file mode 100644 index 00000000..b489e296 --- /dev/null +++ b/frameworks/core/components/tab_bar/flutter_render_tab_bar.cpp @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/tab_bar/flutter_render_tab_bar.h" + +#include "core/pipeline/base/flutter_render_context.h" + +namespace OHOS::Ace { + +using namespace Flutter; + +RefPtr RenderTabBar::Create() +{ + return AceType::MakeRefPtr(); +} + +RenderLayer FlutterRenderTabBar::GetRenderLayer() +{ + if (!layer_) { + layer_ = AceType::MakeRefPtr( + 0.0, GetLayoutSize().Width(), 0.0, GetLayoutSize().Height(), Clip::HARD_EDGE); + } + return AceType::RawPtr(layer_); +} + +void FlutterRenderTabBar::Paint(RenderContext& context, const Offset& offset) +{ + LOGD("TabBar Paint"); + layer_->SetClip(0.0, GetLayoutSize().Width(), 0.0, GetLayoutSize().Height(), Clip::HARD_EDGE); + RenderTabBar::Paint(context, offset); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/tab_bar/flutter_render_tab_bar.h b/frameworks/core/components/tab_bar/flutter_render_tab_bar.h new file mode 100644 index 00000000..3d89381a --- /dev/null +++ b/frameworks/core/components/tab_bar/flutter_render_tab_bar.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_FLUTTER_RENDER_TAB_BAR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_FLUTTER_RENDER_TAB_BAR_H + +#include "core/components/tab_bar/render_tab_bar.h" +#include "core/pipeline/layers/clip_layer.h" + +namespace OHOS::Ace { + +class FlutterRenderTabBar : public RenderTabBar { + DECLARE_ACE_TYPE(FlutterRenderTabBar, RenderTabBar); + +public: + RenderLayer GetRenderLayer() override; + void Paint(RenderContext& context, const Offset& offset) override; + +private: + RefPtr layer_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_FLUTTER_RENDER_TAB_BAR_H diff --git a/frameworks/core/components/tab_bar/flutter_render_tab_bar_item.cpp b/frameworks/core/components/tab_bar/flutter_render_tab_bar_item.cpp new file mode 100644 index 00000000..68c6480b --- /dev/null +++ b/frameworks/core/components/tab_bar/flutter_render_tab_bar_item.cpp @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/tab_bar/flutter_render_tab_bar_item.h" + +#include "core/components/common/painter/flutter_decoration_painter.h" +#include "core/pipeline/base/flutter_render_context.h" + +namespace OHOS::Ace { + +using namespace Flutter; +namespace { + +constexpr double CLICKED_RADIUS = 8.0; + +} // namespace + +RefPtr RenderTabBarItem::Create() +{ + return AceType::MakeRefPtr(); +} + +RenderLayer FlutterRenderTabBarItem::GetRenderLayer() +{ + if (!layer_) { + layer_ = AceType::MakeRefPtr( + 0.0, GetLayoutSize().Width(), 0.0, GetLayoutSize().Height(), Clip::HARD_EDGE); + } + return AceType::RawPtr(layer_); +} + +void FlutterRenderTabBarItem::Paint(RenderContext& context, const Offset& offset) +{ + layer_->SetClip(0.0, GetLayoutSize().Width(), 0.0, GetLayoutSize().Height(), Clip::HARD_EDGE); + RenderNode::Paint(context, offset); + + auto frontDecoration = AceType::MakeRefPtr(); + frontDecoration->SetBackgroundColor(Color::BLACK.BlendOpacity(hoverOpacity_)); + frontDecoration->SetBorderRadius(Radius(Dimension(CLICKED_RADIUS, DimensionUnit::VP))); + + auto pipelineContext = context_.Upgrade(); + if (!pipelineContext) { + return; + } + + pipelineContext->AddDirtyLayoutNode(AceType::Claim(this)); + RefPtr decorationPainter = AceType::MakeRefPtr( + frontDecoration, GetPaintRect(), GetPaintRect().GetSize(), pipelineContext->GetDipScale()); + + const auto renderContext = static_cast(&context); + flutter::Canvas* canvas = renderContext->GetCanvas(); + if (canvas == nullptr) { + LOGE("Paint canvas is null"); + return; + } + decorationPainter->PaintDecoration(offset, canvas->canvas(), context); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/tab_bar/flutter_render_tab_bar_item.h b/frameworks/core/components/tab_bar/flutter_render_tab_bar_item.h new file mode 100644 index 00000000..2efddd89 --- /dev/null +++ b/frameworks/core/components/tab_bar/flutter_render_tab_bar_item.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_FLUTTER_RENDER_TAB_BAR_ITEM_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_FLUTTER_RENDER_TAB_BAR_ITEM_H + +#include "core/components/tab_bar/render_tab_bar_item.h" +#include "core/pipeline/layers/clip_layer.h" + +namespace OHOS::Ace { + +class FlutterRenderTabBarItem : public RenderTabBarItem { + DECLARE_ACE_TYPE(FlutterRenderTabBarItem, RenderTabBarItem); + +public: + RenderLayer GetRenderLayer() override; + void Paint(RenderContext& context, const Offset& offset) override; + +private: + RefPtr layer_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_FLUTTER_RENDER_TAB_BAR_ITEM_H diff --git a/frameworks/core/components/tab_bar/flutter_render_tab_content.cpp b/frameworks/core/components/tab_bar/flutter_render_tab_content.cpp new file mode 100644 index 00000000..84db744b --- /dev/null +++ b/frameworks/core/components/tab_bar/flutter_render_tab_content.cpp @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/tab_bar/flutter_render_tab_content.h" + +#include "core/pipeline/base/flutter_render_context.h" + +namespace OHOS::Ace { + +using namespace Flutter; + +RefPtr RenderTabContent::Create() +{ + return AceType::MakeRefPtr(); +} + +RenderLayer FlutterRenderTabContent::GetRenderLayer() +{ + if (!layer_) { + layer_ = AceType::MakeRefPtr( + 0.0, GetLayoutSize().Width(), 0.0, GetLayoutSize().Height(), Clip::HARD_EDGE); + } + return AceType::RawPtr(layer_); +} +void FlutterRenderTabContent::Paint(RenderContext& context, const Offset& offset) +{ + LOGD("TabContent Paint"); + layer_->SetClip(0.0, GetLayoutSize().Width(), 0.0, GetLayoutSize().Height(), Clip::HARD_EDGE); + RenderNode::Paint(context, offset); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/tab_bar/flutter_render_tab_content.h b/frameworks/core/components/tab_bar/flutter_render_tab_content.h new file mode 100644 index 00000000..f6f51ff5 --- /dev/null +++ b/frameworks/core/components/tab_bar/flutter_render_tab_content.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_FLUTTER_RENDER_TAB_CONTENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_FLUTTER_RENDER_TAB_CONTENT_H + +#include "core/components/tab_bar/render_tab_content.h" +#include "core/pipeline/layers/clip_layer.h" + +namespace OHOS::Ace { + +class FlutterRenderTabContent : public RenderTabContent { + DECLARE_ACE_TYPE(FlutterRenderTabContent, RenderTabContent); + +public: + RenderLayer GetRenderLayer() override; + void Paint(RenderContext& context, const Offset& offset) override; + +private: + RefPtr layer_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_FLUTTER_RENDER_TAB_CONTENT_H diff --git a/frameworks/core/components/tab_bar/render_tab_bar.cpp b/frameworks/core/components/tab_bar/render_tab_bar.cpp new file mode 100644 index 00000000..02e4b05c --- /dev/null +++ b/frameworks/core/components/tab_bar/render_tab_bar.cpp @@ -0,0 +1,631 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/tab_bar/render_tab_bar.h" + +#include + +#include "base/log/event_report.h" +#include "core/components/common/properties/alignment.h" + +namespace OHOS::Ace { +namespace { + +constexpr int32_t GRADIENT_POINT_SIZE = 4; +constexpr Dimension FOCUS_ANIMATION_WIDTH = 2.0_vp; +constexpr Dimension OFFSET_FOR_FOCUS = 4.0_vp; +constexpr double DOUBLE_FACTOR = 2.0; + +} // namespace + +RenderTabBar::RenderTabBar() : RenderNode(true) {} + +void RenderTabBar::Update(const RefPtr& component) +{ + RefPtr tabBar = AceType::DynamicCast(component); + if (!tabBar) { + LOGE("TabBarComponent is nullptr"); + EventReport::SendRenderException(RenderExcepType::RENDER_COMPONENT_ERR); + return; + } + auto barIndicator = tabBar->GetIndicator(); + if (barIndicator && initialUpdate_) { + indicator_ = barIndicator->CreateRenderNode(); + if (indicator_) { + AddChild(indicator_); + indicator_->Attach(GetContext()); + indicator_->Update(barIndicator); + indicatorPadding_ = barIndicator->GetPadding(); + indicatorStyle_ = GetIndicatorStyle(barIndicator); + } + initialUpdate_ = false; + } + InitScrollableOffset(tabBar->GetMode()); + mode_ = tabBar->GetMode(); + isVertical_ = tabBar->IsVertical(); + indicatorSize_ = tabBar->GetIndicatorSize(); + tabsSize_ = tabBar->GetChildren().size(); + int32_t index = tabBar->GetIndex(); + index_ = (index >= 0 && index < tabsSize_) ? index : 0; + padding_ = tabBar->GetPadding(); + activeIndicatorMinWidth_ = tabBar->GetActiveIndicatorMinWidth(); + focusAnimationColor_ = tabBar->GetFocusAnimationColor(); + focusRadiusDimension_ = tabBar->GetFocusRadiusDimension(); + gradientWidth_ = tabBar->GetGradientWidth(); + SetTextDirection(tabBar->GetTextDirection()); + Initialize(); + MarkNeedLayout(); +} + +void RenderTabBar::UpdateTouchRect() +{ + SetTouchRect(GetPaintRect()); +} + +void RenderTabBar::PerformLayout() +{ + tabsSize_ = 0; + const std::list>& children = GetChildren(); + if (indicator_) { + // At least one child(include indicator) + if (children.size() <= 1) { + return; + } + tabsSize_ = children.size() - 1; + } else { + if (children.size() <= 0) { + return; + } + tabsSize_ = children.size(); + } + + index_ = std::clamp(index_, 0, std::max(0, tabsSize_ - 1)); + tabBarWidth_ = GetLayoutParam().GetMaxSize().Width(); + // Layout children and indicator + LayoutChildren(); + UpdatePosition(); + Size layoutSize = GetLayoutParam().Constrain(GetLayoutParam().GetMaxSize()); + LOGD("RenderTabBar layoutSize: (%{public}s)", layoutSize.ToString().c_str()); + SetLayoutSize(layoutSize); + ApplyGradientColor(); + if (isFirstLayout_) { + if (index_ != 0) { + SetIndex(index_, true); + } + isFirstLayout_ = false; + } +} + +void RenderTabBar::PerformLayoutChildren(const LayoutParam& innerLayoutParam) +{ + actualWidth_ = NormalizeToPx(padding_.Left()); + actualHeight_ = NormalizeToPx(padding_.Top()); + + tabsWidth_.clear(); + tabsHeight_.clear(); + tabItemOffsets_.clear(); + if (!isVertical_ && scrollableOffset_.GetX() > tabBarWidth_) { + scrollableOffset_.Reset(); + } + auto context = context_.Upgrade(); + if (!context) { + LOGE("context is null"); + return; + } + + if (isVertical_) { + tabItemOffsets_.emplace_back(0.0, 0.0); + } else { + if (!IsRightToLeft()) { + tabItemOffsets_.emplace_back(padding_.GetOffsetInPx(context->GetDipScale())); + } + } + + auto children = GetChildren(); + auto item = children.begin(); + // skip indicator + if (indicator_) { + ++item; + } + // First time layout all children + for (; item != children.end(); ++item) { + (*item)->Layout(innerLayoutParam); + if (isVertical_) { + tabsHeight_.push_back((*item)->GetLayoutSize().Height()); + actualHeight_ += tabsHeight_.back(); + tabItemOffsets_.emplace_back(0.0, actualHeight_); + } else { + tabsWidth_.push_back((*item)->GetLayoutSize().Width()); + actualWidth_ += tabsWidth_.back(); + if (IsRightToLeft()) { + tabItemOffsets_.emplace_back(tabBarWidth_ - actualWidth_, 0.0); + } else { + tabItemOffsets_.emplace_back(actualWidth_, 0.0); + } + } + } + + actualWidth_ += NormalizeToPx(padding_.Right()); + actualHeight_ += NormalizeToPx(padding_.Bottom()); +} + +void RenderTabBar::LayoutChildren() +{ + // First time layout all children and update relative position. + LayoutParam innerLayoutParam = MakeInnerLayoutParam(); + + // First time layout all children + PerformLayoutChildren(innerLayoutParam); + + if (mode_ == TabBarMode::FIXED_START && !isVertical_ && needUpdateOffset_) { + double padding; + if (index_ == 0) { + padding = NormalizeToPx(Dimension(16, DimensionUnit::VP)); + } else { + padding = NormalizeToPx(Dimension(24, DimensionUnit::VP)); + } + if (!IsRightToLeft()) { + scrollableOffset_.SetX(std::clamp(padding - tabItemOffsets_[index_].GetX(), -MaxScrollableWidth(), 0.0)); + } else { + scrollableOffset_.SetX(std::clamp(padding - tabItemOffsets_[index_].GetX(), 0.0, MaxScrollableWidth())); + } + } else if (mode_ == TabBarMode::SCROLLABEL && actualWidth_ < GetLayoutParam().GetMaxSize().Width() && + !isVertical_) { + // In scrollable mod: the sum of Tab's width can less then TabBar width + double halfWidth = GetLayoutParam().GetMaxSize().Width() / DOUBLE_FACTOR; + if (actualWidth_ < halfWidth) { + // when items total width less than half of tab bar, make items average harf width + double averageWidth = halfWidth / tabsSize_; + innerLayoutParam.SetMinSize(Size(averageWidth, innerLayoutParam.GetMinSize().Height())); + // relayout all children + PerformLayoutChildren(innerLayoutParam); + } + if (IsRightToLeft()) { + scrollableOffset_ = Offset((actualWidth_ - GetLayoutParam().GetMaxSize().Width()) / DOUBLE_FACTOR, 0.0); + } else { + scrollableOffset_ = Offset((GetLayoutParam().GetMaxSize().Width() - actualWidth_) / DOUBLE_FACTOR, 0.0); + } + } else if (mode_ == TabBarMode::SCROLLABEL && actualHeight_ < GetLayoutParam().GetMaxSize().Height() && + isVertical_) { + // In scrollable mod: the sum of Tab's width can less then TabBar width + scrollableOffset_ = Offset(0.0, (GetLayoutParam().GetMaxSize().Height() - actualHeight_) / DOUBLE_FACTOR); + } +} + +void RenderTabBar::UpdatePosition() +{ + const std::list>& children = GetChildren(); + + // At least one child + if (children.size() <= 1) { + return; + } + auto item = children.begin(); + // skip indicator + if (indicator_) { + ++item; + } + // Second update relative position. + for (int32_t i = 0; item != children.end(); ++item) { + (*item)->SetPosition(scrollableOffset_ + tabItemOffsets_[i]); + if (i == index_ && indicator_) { + // update indicator layout and position + indicator_->Layout(MakeIndicatorLayoutParam(*item)); + Offset offset = MakeIndicatorOffset(*item); + indicator_->SetPosition(scrollableOffset_ + tabItemOffsets_[index_] + offset); + } + i++; + } +} + +void RenderTabBar::SetIndex(int32_t index, bool force) +{ + if (index < 0 || index >= tabsSize_) { + LOGW("illegal index = %{public}d", index); + index = 0; + } + + if (index_ != index || force) { + if (mode_ == TabBarMode::FIXED_START && tabBarSizeAnimation_) { + needUpdateOffset_ = true; + auto tabBar = AceType::WeakClaim(this); + tabBarSizeAnimation_->Start(tabBar, index_, index); + } + index_ = index; + if (mode_ == TabBarMode::SCROLLABEL) { + if (actualWidth_ > GetLayoutParam().GetMaxSize().Width() && !isVertical_) { + // In scrollable mod: the select tab must in middle of tabBar + Offset centerViewPort(GetLayoutParam().GetMaxSize().Width() / DOUBLE_FACTOR, 0.0); + Offset centerTabItem = tabItemOffsets_[index_] + Offset(tabsWidth_[index_] / DOUBLE_FACTOR, 0.0); + scrollableOffset_ = centerViewPort - centerTabItem; + if (!IsRightToLeft()) { + scrollableOffset_.SetX(std::clamp(scrollableOffset_.GetX(), -MaxScrollableWidth(), 0.0)); + } else { + scrollableOffset_.SetX(std::clamp(scrollableOffset_.GetX(), 0.0, MaxScrollableWidth())); + } + } + if (actualHeight_ > GetLayoutParam().GetMaxSize().Height() && isVertical_) { + // In scrollable mod: the select tab must in middle of tabBar + Offset centerViewPort(0.0, GetLayoutParam().GetMaxSize().Height() / DOUBLE_FACTOR); + Offset centerTabItem = tabItemOffsets_[index_] + Offset(0.0, tabsHeight_[index_] / DOUBLE_FACTOR); + scrollableOffset_ = centerViewPort - centerTabItem; + scrollableOffset_.SetY(std::clamp(scrollableOffset_.GetY(), -MaxScrollableHeight(), 0.0)); + } + } + MarkNeedLayout(); + } +} + +void RenderTabBar::Initialize() +{ + clickRecognizer_ = AceType::MakeRefPtr(); + clickRecognizer_->SetOnClick([weakBar = AceType::WeakClaim(this)](const ClickInfo& info) { + auto tabBar = weakBar.Upgrade(); + if (tabBar) { + tabBar->HandleClickedEvent(info); + } + }); + scrollable_ = AceType::MakeRefPtr( + [weak = AceType::WeakClaim(this)](double offset, int32_t source) { + auto tabBar = weak.Upgrade(); + if (tabBar && (source != SCROLL_FROM_START)) { + return tabBar->HandleScrollablePosition(offset); + } else { + return false; + } + }, + isVertical_ ? Axis::VERTICAL : Axis::HORIZONTAL); + scrollable_->Initialize(GetContext()); + scrollable_->SetNodeId(GetAccessibilityNodeId()); + + if (!tabBarSizeAnimation_ && !indicator_) { + tabBarSizeAnimation_ = AceType::MakeRefPtr(); + tabBarSizeAnimation_->Initialize(GetContext()); + } +} + +void RenderTabBar::HandleClickedEvent(const ClickInfo& info) +{ + LOGI("Click event x is %{public}lf", info.GetLocalLocation().GetX()); + if (tabItemOffsets_.empty()) { + LOGW("tabItemOffsets is empty"); + return; + } + Offset local = info.GetLocalLocation() - scrollableOffset_; + if (isVertical_) { + auto clickRange = std::make_pair(tabItemOffsets_[0].GetY(), tabItemOffsets_[tabItemOffsets_.size() - 1].GetY()); + if (local.GetY() < clickRange.first || local.GetY() > clickRange.second) { + LOGW("clicked (%{public}lf) position out of range [%{public}lf, %{public}lf]", local.GetY(), + clickRange.first, clickRange.second); + return; + } + } else { + auto clickRange = std::make_pair(tabItemOffsets_[0].GetX(), tabItemOffsets_[tabItemOffsets_.size() - 1].GetX()); + if (!IsRightToLeft()) { + if (local.GetX() < clickRange.first || local.GetX() > clickRange.second) { + LOGW("clicked (%{public}lf) position out of range [%{public}lf, %{public}lf]", local.GetX(), + clickRange.first, clickRange.second); + return; + } + } else { + if (local.GetX() > tabBarWidth_ || local.GetX() < clickRange.second) { + LOGW("clicked (%{public}lf) position out of range [%{public}lf, %{public}lf]", local.GetX(), + clickRange.first, clickRange.second); + return; + } + } + } + auto pos = std::lower_bound(tabItemOffsets_.begin(), tabItemOffsets_.end(), local, + [weakBar = AceType::WeakClaim(this)](const Offset& a, const Offset& b) { + auto tabBar = weakBar.Upgrade(); + if (tabBar) { + return tabBar->IsRightToLeft() ? a.GetX() > b.GetX() + : (tabBar->isVertical_ ? a.GetY() < b.GetY() : a.GetX() < b.GetX()); + } else { + return false; + } + }); + + if (pos != tabItemOffsets_.end()) { + int32_t index = IsRightToLeft() ? std::distance(tabItemOffsets_.begin(), pos) + : std::distance(tabItemOffsets_.begin(), pos) - 1; + if (index >= 0 && index < tabsSize_ && index != index_) { + LOGD("selected tab bar index :%{public}d, current index :%{public}d", index, index_); + if (callback_) { + callback_(index); + } + } + } +} + +void RenderTabBar::OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) +{ + if (!clickRecognizer_ || !scrollable_) { + return; + } + clickRecognizer_->SetCoordinateOffset(coordinateOffset); + result.emplace_back(clickRecognizer_); + scrollable_->SetCoordinateOffset(coordinateOffset); + result.emplace_back(scrollable_); +} + +bool RenderTabBar::HandleScrollablePosition(double value) +{ + if (IsScrollable()) { + if (!isVertical_ && actualWidth_ > GetLayoutSize().Width()) { + Offset delta(value, 0.0); + scrollableOffset_ += delta; + if (!IsRightToLeft()) { + scrollableOffset_.SetX(std::clamp(scrollableOffset_.GetX(), -MaxScrollableWidth(), 0.0)); + } else { + scrollableOffset_.SetX(std::clamp(scrollableOffset_.GetX(), 0.0, MaxScrollableWidth())); + } + needUpdateOffset_ = false; + } + if (isVertical_ && actualHeight_ > GetLayoutSize().Height()) { + Offset delta(0.0, value); + scrollableOffset_ += delta; + scrollableOffset_.SetY(std::clamp(scrollableOffset_.GetY(), -MaxScrollableHeight(), 0.0)); + } + + if (!NearZero(value)) { + MarkNeedLayout(); + return true; + } + } + return false; +} + +LayoutParam RenderTabBar::MakeInnerLayoutParam() const +{ + LayoutParam innerLayout = GetLayoutParam(); + if (mode_ == TabBarMode::FIXED) { + double paddingHorizontal = NormalizeToPx(padding_.Left()) + NormalizeToPx(padding_.Right()); + double paddingVertical = NormalizeToPx(padding_.Top()) + NormalizeToPx(padding_.Bottom()); + double tabMinWidth = std::max(0.0, innerLayout.GetMinSize().Width() - paddingHorizontal); + double tabMaxWidth = std::max(0.0, innerLayout.GetMaxSize().Width() - paddingHorizontal); + double tabMinHeight = std::max(0.0, innerLayout.GetMinSize().Height() - paddingVertical); + double tabMaxHeight = std::max(0.0, innerLayout.GetMaxSize().Height() - paddingVertical); + if (isVertical_) { + if (tabsSize_ > 1) { + tabMinHeight = tabMinHeight / tabsSize_; + tabMaxHeight = tabMaxHeight / tabsSize_; + } + innerLayout.SetMinSize(Size(std::max(innerLayout.GetMinSize().Width(), 0.0), std::max(tabMinHeight, 0.0))); + innerLayout.SetMaxSize( + Size(std::max(GetLayoutParam().GetMaxSize().Width(), 0.0), std::max(tabMaxHeight, 0.0))); + } else { + if (tabsSize_ > 1) { + tabMinWidth = tabMinWidth / tabsSize_; + tabMaxWidth = tabMaxWidth / tabsSize_; + } + innerLayout.SetMinSize(Size(std::max(tabMinWidth, 0.0), std::max(innerLayout.GetMinSize().Height(), 0.0))); + innerLayout.SetMaxSize( + Size(std::max(tabMaxWidth, 0.0), std::max(GetLayoutParam().GetMaxSize().Height(), 0.0))); + } + } else { + if (isVertical_) { + innerLayout.SetMinSize( + Size(std::max(innerLayout.GetMinSize().Width(), 0.0), innerLayout.GetMinSize().Height())); + innerLayout.SetMaxSize(Size(std::max(innerLayout.GetMaxSize().Width(), 0.0), Size::INFINITE_SIZE)); + } else { + innerLayout.SetMinSize( + Size(innerLayout.GetMinSize().Width(), std::max(innerLayout.GetMinSize().Height(), 0.0))); + innerLayout.SetMaxSize(Size(Size::INFINITE_SIZE, std::max(innerLayout.GetMaxSize().Height(), 0.0))); + } + } + return innerLayout; +} + +LayoutParam RenderTabBar::MakeIndicatorLayoutParam(const RefPtr& item) const +{ + LayoutParam innerLayout; + auto context = context_.Upgrade(); + if (!context) { + LOGE("context is null"); + return innerLayout; + } + innerLayout.SetMinSize(Size(NormalizeToPx(activeIndicatorMinWidth_), 0.0)); + Size maxLayoutParam = GetLayoutParam().GetMaxSize(); + if (isVertical_) { + innerLayout.SetMaxSize(Size( + std::max(0.0, std::max(0.0, maxLayoutParam.Width()) - NormalizeToPx(FOCUS_ANIMATION_WIDTH) * DOUBLE_FACTOR), + std::max(0.0, maxLayoutParam.Height()) - NormalizeToPx(FOCUS_ANIMATION_WIDTH) * DOUBLE_FACTOR)); + } else { + innerLayout.SetMaxSize( + Size(std::max(0.0, tabsWidth_[index_] - NormalizeToPx(FOCUS_ANIMATION_WIDTH) * DOUBLE_FACTOR), + std::max(0.0, maxLayoutParam.Height()) - NormalizeToPx(FOCUS_ANIMATION_WIDTH) * DOUBLE_FACTOR)); + } + + if (indicatorSize_ == TabBarIndicatorType::LABEL) { + auto childSize = GetTabItemChildLayoutSize(item); + childSize += indicatorPadding_.GetLayoutSizeInPx(context->GetDipScale()); + + innerLayout.SetMaxSize(Size(std::min(innerLayout.GetMaxSize().Width(), childSize.Width()), + std::min(innerLayout.GetMaxSize().Height(), childSize.Height()))); + } + return innerLayout; +} + +Offset RenderTabBar::MakeIndicatorOffset(const RefPtr& item) const +{ + auto context = context_.Upgrade(); + if (!context) { + LOGE("context is null"); + return Offset(0.0, 0.0); + } + Offset offset; + if (isVertical_) { + offset = Alignment::GetAlignPosition(Size(GetLayoutParam().GetMaxSize().Width(), tabsHeight_[index_]), + indicator_->GetLayoutSize(), Alignment::CENTER); + } else { + offset = Alignment::GetAlignPosition(Size(tabsWidth_[index_], GetLayoutParam().GetMaxSize().Height()), + indicator_->GetLayoutSize(), Alignment::CENTER); + } + if (indicatorStyle_ == TabBarIndicatorStyle::DEFAULT && + (!onFocused_ || SystemProperties::GetDeviceType() == DeviceType::PHONE)) { + Size childSize = GetTabItemChildLayoutSize(item); + offset += + Offset(0.0, childSize.Height() / DOUBLE_FACTOR) + indicatorPadding_.GetOffsetInPx(context->GetDipScale()); + } + return offset; +} + +double RenderTabBar::MaxScrollableWidth() const +{ + if (IsScrollable() && actualWidth_ > GetLayoutParam().GetMaxSize().Width() && !isVertical_) { + return actualWidth_ - GetLayoutParam().GetMaxSize().Width(); + } + return 0.0; +} + +double RenderTabBar::MaxScrollableHeight() const +{ + if (IsScrollable() && actualHeight_ > GetLayoutParam().GetMaxSize().Height() && isVertical_) { + return actualHeight_ - GetLayoutParam().GetMaxSize().Height(); + } + return 0.0; +} + +Size RenderTabBar::GetTabItemChildLayoutSize(const RefPtr& item) const +{ + auto children = item->GetChildren(); + if (children.empty()) { + return Size(0.0, 0.0); + } + return children.front()->GetLayoutSize(); +} + +void RenderTabBar::UpdateIndicatorStyle(const RefPtr& component) +{ + if (indicator_) { + indicator_->Update(component); + RefPtr boxComponent = AceType::DynamicCast(component); + if (boxComponent) { + indicatorStyle_ = GetIndicatorStyle(boxComponent); + indicatorPadding_ = boxComponent->GetPadding(); + } + } +} + +void RenderTabBar::HandleFocusEvent(bool focus) +{ + LOGD("RenderTabBar HandleFocusEvent, focus is %{public}d", focus); + onFocused_ = focus; + if (!onFocused_) { + auto context = context_.Upgrade(); + if (context) { + context->CancelFocusAnimation(); + } + } +} + +void RenderTabBar::OnPaintFinish() +{ + auto context = context_.Upgrade(); + if (!context || !onFocused_) { + return; + } + + auto deviceType = SystemProperties::GetDeviceType(); + if (deviceType == DeviceType::TV) { + if (indicator_) { + context->ShowFocusAnimation(RRect::MakeRRect(Rect(Offset(0, 0), indicator_->GetLayoutSize()), + Radius(NormalizeToPx(focusRadiusDimension_))), + focusAnimationColor_, indicator_->GetGlobalOffset()); + } + } else { + int32_t focusedChildIndex = indicator_ ? index_ + 1 : index_; + auto focusedItem = GetChildren().begin(); + std::advance(focusedItem, focusedChildIndex); + + auto layoutSize = (*focusedItem)->GetLayoutSize(); + auto position = (*focusedItem)->GetGlobalOffset(); + + double offsetForFocus = NormalizeToPx(OFFSET_FOR_FOCUS); + Offset offset = Offset(offsetForFocus, offsetForFocus); + layoutSize -= Size(offsetForFocus * 2.0, offsetForFocus * 2.0); + context->ShowFocusAnimation(RRect::MakeRRect(Rect(offset, layoutSize), + Radius(NormalizeToPx(focusRadiusDimension_))), + focusAnimationColor_, position + offset); + } +} + +void RenderTabBar::ApplyGradientColor() +{ + auto parent = GetParent().Upgrade(); + RefPtr box = AceType::DynamicCast(parent); + if (box) { + Color colorA = box->GetColor(); + Color colorB = colorA.ChangeAlpha(0); + + double viewWidth = GetLayoutSize().Width(); + double gradientWidthPx = NormalizeToPx(gradientWidth_); + + // only box's width is big enough will add gradient + if (viewWidth > DOUBLE_FACTOR * gradientWidthPx && !isVertical_) { + auto frontDecoration = box->GetFrontDecoration(); + if (!frontDecoration) { + frontDecoration = AceType::MakeRefPtr(); + } + auto backDecoration = box->GetBackDecoration(); + if (backDecoration) { + frontDecoration->SetBorder(backDecoration->GetBorder()); + } + Gradient gradient = Gradient(); + gradient.SetDirection(GradientDirection::RIGHT); + std::vector gradientColors = std::vector(GRADIENT_POINT_SIZE); + + gradientColors[0].SetColor(colorA); + gradientColors[0].SetDimension(Dimension(0.0, DimensionUnit::PX)); + + gradientColors[1].SetColor(colorB); + gradientColors[1].SetDimension(Dimension(gradientWidthPx, DimensionUnit::PX)); + + gradientColors[2].SetColor(colorB); + gradientColors[2].SetDimension(Dimension(viewWidth - gradientWidthPx, DimensionUnit::PX)); + + gradientColors[3].SetColor(colorA); + gradientColors[3].SetDimension(Dimension(viewWidth, DimensionUnit::PX)); + + for (const auto& gradientColor : gradientColors) { + gradient.AddColor(gradientColor); + } + + frontDecoration->SetGradient(gradient); + + box->SetFrontDecoration(frontDecoration); + } + } +} + +TabBarIndicatorStyle RenderTabBar::GetIndicatorStyle(const RefPtr& component) const +{ + RefPtr indicatorComponent = AceType::DynamicCast(component); + if (indicatorComponent) { + return indicatorComponent->GetIndicatorStyle(); + } + return TabBarIndicatorStyle::CUSTOM; +} + +void RenderTabBar::InitScrollableOffset(TabBarMode mode) +{ + if (mode != mode_) { + scrollableOffset_.Reset(); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/tab_bar/render_tab_bar.h b/frameworks/core/components/tab_bar/render_tab_bar.h new file mode 100644 index 00000000..4fbab867 --- /dev/null +++ b/frameworks/core/components/tab_bar/render_tab_bar.h @@ -0,0 +1,126 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_RENDER_TAB_BAR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_RENDER_TAB_BAR_H + +#include + +#include "base/memory/ace_type.h" +#include "core/components/common/properties/edge.h" +#include "core/components/scroll/scrollable.h" +#include "core/components/tab_bar/tab_bar_component.h" +#include "core/components/tab_bar/tab_bar_size_animation.h" +#include "core/gestures/click_recognizer.h" +#include "core/gestures/raw_recognizer.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderTabBar : public RenderNode { + DECLARE_ACE_TYPE(RenderTabBar, RenderNode) + +public: + ~RenderTabBar() override = default; + void UpdateTouchRect() override; + static RefPtr Create(); + void Update(const RefPtr& component) override; + void PerformLayout() override; + + using UpdateIndexFunc = std::function; + void RegisterCallback(const UpdateIndexFunc& callback) + { + callback_ = callback; + } + + bool IsRightToLeft() const + { + return GetTextDirection() == TextDirection::RTL && !isVertical_; + } + void SetIndex(int32_t index, bool force = false); + void UpdateIndicatorStyle(const RefPtr& component); + void HandleFocusEvent(bool focus); + + void OnPaintFinish() override; + +protected: + RenderTabBar(); + void OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) override; + + LayoutParam MakeInnerLayoutParam() const; + LayoutParam MakeIndicatorLayoutParam(const RefPtr& item) const; + Offset MakeIndicatorOffset(const RefPtr& item) const; + + double MaxScrollableWidth() const; + double MaxScrollableHeight() const; + + Size GetTabItemChildLayoutSize(const RefPtr& child) const; + void ApplyGradientColor(); + TabBarIndicatorStyle GetIndicatorStyle(const RefPtr& component) const; + void InitScrollableOffset(TabBarMode mode); + + TabBarMode mode_ = TabBarMode::FIXED; + TabBarIndicatorType indicatorSize_ = TabBarIndicatorType::TAB; + int32_t index_ = 0; + int32_t tabsSize_ = 0; + // mark update offset flag, which caused by index changed + bool needUpdateOffset_ = false; + std::vector tabItemOffsets_; + std::vector tabsWidth_; + std::vector tabsHeight_; + + Offset scrollableOffset_; + double tabBarWidth_ = 0.0; + double actualWidth_ = 0.0; + double actualHeight_ = 0.0; + + Edge padding_ { 0.0 }; + Edge indicatorPadding_ { 0.0 }; + + RefPtr indicator_; + TabBarIndicatorStyle indicatorStyle_ = TabBarIndicatorStyle::DEFAULT; + Dimension activeIndicatorMinWidth_; + bool initialUpdate_ = true; + bool isFirstLayout_ = true; + bool onFocused_ = false; + Color focusAnimationColor_ = Color::WHITE; + Dimension focusRadiusDimension_; + Dimension gradientWidth_; + +private: + bool isVertical_ = false; + + void Initialize(); + void PerformLayoutChildren(const LayoutParam& innerLayoutParam); + void LayoutChildren(); + void UpdatePosition(); + void HandleClickedEvent(const ClickInfo& info); + bool HandleScrollablePosition(double); + bool IsScrollable() const + { + return TabBarMode::SCROLLABEL == mode_ || TabBarMode::FIXED_START == mode_; + } + + RefPtr clickRecognizer_; + RefPtr scrollable_; + + UpdateIndexFunc callback_; + RefPtr tabBarSizeAnimation_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_RENDER_TAB_BAR_H diff --git a/frameworks/core/components/tab_bar/render_tab_bar_item.cpp b/frameworks/core/components/tab_bar/render_tab_bar_item.cpp new file mode 100644 index 00000000..155d0fe7 --- /dev/null +++ b/frameworks/core/components/tab_bar/render_tab_bar_item.cpp @@ -0,0 +1,176 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/tab_bar/render_tab_bar_item.h" + +#include "core/components/common/properties/decoration.h" + +namespace OHOS::Ace { +namespace { + +constexpr Dimension TAB_BAR_ITEM_SMALL_PADDING(8, DimensionUnit::VP); +constexpr Dimension TAB_BAR_ITEM_BIG_PADDING(12, DimensionUnit::VP); +constexpr int32_t HOVER_ANIMATION_DURATION = 250; +constexpr double HOVER_OPACITY_RATIO = 0.05; +constexpr double CLICK_OPACITY_RATIO = 0.1; + +} // namespace + +RenderTabBarItem::RenderTabBarItem() : RenderBox() +{ + touchRecognizer_ = AceType::MakeRefPtr(); + touchRecognizer_->SetOnTouchDown([wp = AceType::WeakClaim(this)](const TouchEventInfo&) { + auto sp = wp.Upgrade(); + if (sp) { + sp->HandleTouchDown(); + } + }); + touchRecognizer_->SetOnTouchUp([wp = AceType::WeakClaim(this)](const TouchEventInfo&) { + auto sp = wp.Upgrade(); + if (sp) { + sp->HandleTouchUp(); + } + }); +} + +void RenderTabBarItem::HandleTouchDown() +{ + SetTouching(true); + PlayPressAnimation(CLICK_OPACITY_RATIO); +} + +void RenderTabBarItem::HandleTouchUp() +{ + if (IsTouching()) { + SetTouching(false); + auto ratio = onHover_ ? HOVER_OPACITY_RATIO : 0.0; + PlayPressAnimation(ratio); + } +} + +void RenderTabBarItem::OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) +{ + if (!touchRecognizer_) { + return; + } + touchRecognizer_->SetCoordinateOffset(coordinateOffset); + result.emplace_back(touchRecognizer_); +} + +void RenderTabBarItem::OnMouseHoverEnterTest() +{ + ResetController(controllerExit_); + ResetController(controllerPress_); + if (!controllerEnter_) { + controllerEnter_ = AceType::MakeRefPtr(context_); + } + doubleAnimationEnter_ = AceType::MakeRefPtr>(); + CreateDoubleAnimation(doubleAnimationEnter_, hoverOpacity_, HOVER_OPACITY_RATIO, true); + doubleAnimationEnter_->SetCurve(Curves::FRICTION); + StartHoverAnimation(controllerEnter_, doubleAnimationEnter_); +} + +void RenderTabBarItem::OnMouseHoverExitTest() +{ + ResetController(controllerEnter_); + ResetController(controllerPress_); + if (!controllerExit_) { + controllerExit_ = AceType::MakeRefPtr(context_); + } + doubleAnimationExit_ = AceType::MakeRefPtr>(); + CreateDoubleAnimation(doubleAnimationExit_, hoverOpacity_, 0.0, false); + if (hoverOpacity_ == HOVER_OPACITY_RATIO) { + doubleAnimationExit_->SetCurve(Curves::FRICTION); + } else { + doubleAnimationExit_->SetCurve(Curves::FAST_OUT_SLOW_IN); + } + StartHoverAnimation(controllerExit_, doubleAnimationExit_); +} + +void RenderTabBarItem::PlayPressAnimation(double endOpacityRatio) +{ + ResetController(controllerEnter_); + ResetController(controllerExit_); + if (!controllerPress_) { + controllerPress_ = AceType::MakeRefPtr(context_); + } + auto doubleAnimationPress = AceType::MakeRefPtr>(); + CreateDoubleAnimation(doubleAnimationPress, hoverOpacity_, endOpacityRatio, onHover_); + doubleAnimationPress->SetCurve(Curves::SHARP); + controllerPress_->ClearInterpolators(); + controllerPress_->AddInterpolator(doubleAnimationPress); + controllerPress_->SetDuration(HOVER_ANIMATION_DURATION); + controllerPress_->SetFillMode(FillMode::FORWARDS); + controllerPress_->Play(); +} + +void RenderTabBarItem::StartHoverAnimation(RefPtr controller, + RefPtr>& doubleAnimation) +{ + if (!controller || !doubleAnimation) { + return; + } + controller->ClearInterpolators(); + controller->AddInterpolator(doubleAnimation); + controller->SetDuration(HOVER_ANIMATION_DURATION); + controller->SetFillMode(FillMode::FORWARDS); + controller->Play(); +} + +void RenderTabBarItem::CreateDoubleAnimation( + RefPtr>& doubleAnimation, double beginValue, double endValue, bool hover) +{ + if (!doubleAnimation) { + return; + } + auto keyframeBegin = AceType::MakeRefPtr>(0.0, beginValue); + auto keyframeEnd = AceType::MakeRefPtr>(1.0, endValue); + doubleAnimation->AddKeyframe(keyframeBegin); + doubleAnimation->AddKeyframe(keyframeEnd); + doubleAnimation->AddListener([weakBarItem = AceType::WeakClaim(this), hover](double value) { + auto barItem = weakBarItem.Upgrade(); + if (barItem) { + barItem->onHover_ = hover; + barItem->hoverOpacity_ = value; + barItem->MarkNeedRender(); + } + }); +} + +void RenderTabBarItem::ResetController(RefPtr& controller) +{ + if (controller) { + if (!controller->IsStopped()) { + controller->Stop(); + } + controller->ClearInterpolators(); + } +} + +void RenderTabBarItem::PerformLayout() +{ + auto currentSize = GridSystemManager::GetInstance().GetCurrentSize(); + if (currentSize == GridSizeType::SM) { + paddingOrigin_.SetLeft(TAB_BAR_ITEM_SMALL_PADDING); + paddingOrigin_.SetRight(TAB_BAR_ITEM_SMALL_PADDING); + } else if (currentSize >= GridSizeType::MD) { + paddingOrigin_.SetLeft(TAB_BAR_ITEM_BIG_PADDING); + paddingOrigin_.SetRight(TAB_BAR_ITEM_BIG_PADDING); + } + RenderBox::PerformLayout(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/tab_bar/render_tab_bar_item.h b/frameworks/core/components/tab_bar/render_tab_bar_item.h new file mode 100644 index 00000000..9795657d --- /dev/null +++ b/frameworks/core/components/tab_bar/render_tab_bar_item.h @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_RENDER_TAB_BAR_ITEM_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_RENDER_TAB_BAR_ITEM_H + +#include "base/memory/ace_type.h" +#include "core/animation/animator.h" +#include "core/animation/keyframe_animation.h" +#include "core/components/box/render_box.h" +#include "core/components/common/layout/grid_system_manager.h" +#include "core/gestures/raw_recognizer.h" + +namespace OHOS::Ace { + +class RenderTabBarItem : public RenderBox { +DECLARE_ACE_TYPE(RenderTabBarItem, RenderBox) + +public: + ~RenderTabBarItem() override = default; + static RefPtr Create(); + + void SetTouching(bool isTouching) + { + touching_ = isTouching; + } + + bool IsTouching() const + { + return touching_; + } + +protected: + RenderTabBarItem(); + void OnTouchTestHit(const Offset& coordinateOffset, const TouchRestrict& touchRestrict, + TouchTestResult& result) override; + void OnMouseHoverEnterTest() override; + void OnMouseHoverExitTest() override; + void PerformLayout() override; + + bool onHover_ = false; + double hoverOpacity_ = 0.0; + +private: + void HandleTouchDown(); + void HandleTouchUp(); + void StartHoverAnimation(RefPtr controller, + RefPtr>& doubleAnimation); + void ResetController(RefPtr& controller); + void CreateDoubleAnimation(RefPtr>& doubleAnimation, double beginValue, + double endValue, bool hover); + void PlayPressAnimation(double endOpacityRatio); + + bool touching_ = false; // whether the item is in touching + RefPtr touchRecognizer_; + RefPtr controllerEnter_; + RefPtr controllerExit_; + RefPtr controllerPress_; + RefPtr> doubleAnimationEnter_; + RefPtr> doubleAnimationExit_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_RENDER_TAB_BAR_ITEM_H diff --git a/frameworks/core/components/tab_bar/render_tab_content.cpp b/frameworks/core/components/tab_bar/render_tab_content.cpp new file mode 100644 index 00000000..fb7fa9fc --- /dev/null +++ b/frameworks/core/components/tab_bar/render_tab_content.cpp @@ -0,0 +1,441 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/tab_bar/render_tab_content.h" + +#include "core/animation/curve_animation.h" +#include "core/event/ace_event_helper.h" + +namespace OHOS::Ace { +namespace { + +constexpr double FRIC_RATIO = 0.5; // default ratio +constexpr double MIN_SCROLL_OFFSET = 0.20; + +} // namespace + +RenderTabContent::RenderTabContent() : RenderNode(true) {} + +void RenderTabContent::Update(const RefPtr& component) +{ + const RefPtr tabContent = AceType::DynamicCast(component); + if (!tabContent || !tabContent->GetController()) { + LOGW("tabContent is null"); + return; + } + auto tabController = tabContent->GetController(); + int32_t count = tabContent->GetChildren().size(); + int32_t tabIndex = tabController->GetIndex(); + if (count != contentCount_ && tabIndex >= count) { + tabController->ValidateIndex(count - 1); + tabIndex = tabController->GetIndex(); + currentIndex_ = tabIndex; + } + contentCount_ = count; + if (scrollable_ != tabContent->IsScrollable()) { + if (animator_ && animator_->IsRunning()) { + animator_->Finish(); + } + scrollable_ = tabContent->IsScrollable(); + } + scrollDuration_ = tabContent->GetScrollDuration(); + isVertical_ = tabContent->IsVertical(); + SetTextDirection(tabContent->GetTextDirection()); + if (!isInitialized_) { + currentIndex_ = tabIndex; + isInitialized_ = true; + } + changeEvent_ = AceAsyncEvent::Create(tabContent->GetChangeEventId(), context_); + domChangeEvent_ = AceAsyncEvent::Create(tabContent->GetDomChangeEventId(), context_); + + MarkNeedLayout(); + Initialize(GetContext()); +} + +void RenderTabContent::Initialize(const WeakPtr& context) +{ + animator_ = AceType::MakeRefPtr(context); + + // if the tab is vertical, use VerticalDragRecognizer + if (isVertical_) { + dragDetector_ = AceType::MakeRefPtr(); + } else { + dragDetector_ = AceType::MakeRefPtr(); + } + + // if scrollable is true, initialize the dragDetector + if (scrollable_) { + dragDetector_->SetOnDragStart([weakContent = AceType::WeakClaim(this)](const DragStartInfo& info) { + auto tabContent = weakContent.Upgrade(); + if (tabContent) { + tabContent->HandleDragStart(); + } + }); + dragDetector_->SetOnDragUpdate([weakContent = AceType::WeakClaim(this)](const DragUpdateInfo& info) { + auto tabContent = weakContent.Upgrade(); + if (tabContent) { + tabContent->HandleDragUpdate(info.GetMainDelta()); + } + }); + dragDetector_->SetOnDragEnd([weakContent = AceType::WeakClaim(this)](const DragEndInfo& info) { + auto tabContent = weakContent.Upgrade(); + if (tabContent) { + tabContent->HandleDragEnd(); + } + }); + } else { + dragDetector_->SetOnDragStart([](const DragStartInfo& info) {}); + dragDetector_->SetOnDragUpdate([](const DragUpdateInfo& info) {}); + dragDetector_->SetOnDragEnd([](const DragEndInfo& info) {}); + } +} + +void RenderTabContent::FireContentChangeEvent() const +{ + if (changeEvent_) { + LOGI("FireChangeEvent, index = %{public}d.", currentIndex_); + std::string param = + std::string(R"("change",{"index":)").append(std::to_string(currentIndex_).append("},null")); + changeEvent_(param); + } +} + +void RenderTabContent::FireDomChangeEvent(int32_t index) const +{ + LOGI("FireDomChangeEvent, index is %{public}d", index); + if (domChangeEvent_) { + domChangeEvent_(index); + } +} + +void RenderTabContent::HandleDragStart() +{ + LOGD("HandleDragStart"); + if (isInAnimation_) { + return; + } + isDragging_ = true; +} + +void RenderTabContent::HandleDragUpdate(double offset) +{ + if (isInAnimation_) { + return; + } + UpdateScrollPosition(offset); +} + +void RenderTabContent::HandleDragEnd() +{ + LOGD("HandleDragEnd"); + if (isInAnimation_) { + return; + } + isDragging_ = false; + if (NearZero(scrollOffset_)) { + LOGI("ScrollOffset near equals 0."); + return; + } + int32_t newIndex = IsRightToLeft() ? (scrollOffset_ < 0.0 ? GetPrevIndex() : GetNextIndex()) + : (scrollOffset_ > 0.0 ? GetPrevIndex() : GetNextIndex()); + ScrollContents(newIndex, false); +} + +void RenderTabContent::ChangeScroll(int32_t index) +{ + LOGI("Change scroll index is %{public}d", index); + ScrollContents(index, true); +} + +void RenderTabContent::ScrollContents(int32_t newIndex, bool isLinkBar) +{ + LOGD("ScrollContents from %{public}d to %{public}d", currentIndex_, newIndex); + if (!animator_->IsStopped()) { + LOGD("Animationis not stopped, clear stop listener."); + // clear stop listener and stop + if (isInAnimation_) { + LOGD("In animation,controller end"); + animator_->Finish(); + } else { + LOGD("Not in animation,controller stop"); + animator_->Stop(); + } + } + animator_->ClearStopListeners(); + animator_->ClearStartListeners(); + + if (isAnimationAdded_) { + animator_->RemoveInterpolator(translate_); + isAnimationAdded_ = false; + } + + bool needChange = false; + int32_t index = currentIndex_; + double start = scrollOffset_; + double end = 0.0; + if (newIndex >= 0 && newIndex < contentCount_) { + end = currentIndex_ > newIndex ? nextOffset_ : prevOffset_; + + // Adjust offset more than MIN_SCROLL_OFFSET at least + double minOffset = 0.0; + if (isVertical_) { + minOffset = MIN_SCROLL_OFFSET * contentHeight_; + } else { + minOffset = MIN_SCROLL_OFFSET * contentWidth_; + } + if (!NearZero(scrollOffset_) && std::abs(scrollOffset_) < minOffset) { + LOGI("ScrollOffset less than min scroll offset."); + end = 0.0; + } + } + + if (!NearZero(end) || NearZero(scrollOffset_)) { + needChange = true; + } + LOGD("Translate animation, start=%{public}lf, end=%{public}lf", start, end); + translate_ = AceType::MakeRefPtr>(start, end, Curves::FRICTION); + auto weak = AceType::WeakClaim(this); + translate_->AddListener(Animation::ValueCallback([weak, index, newIndex, needChange](double value) { + auto tabContent = weak.Upgrade(); + if (tabContent) { + tabContent->UpdateChildPosition(value, index, newIndex, needChange); + } + })); + + animator_->AddStopListener([weak, newIndex, needChange]() { + auto tabContent = weak.Upgrade(); + if (tabContent) { + tabContent->HandleStopListener(newIndex, needChange); + } + }); + animator_->AddStartListener([weak, newIndex, needChange, isLinkBar]() { + auto tabContent = weak.Upgrade(); + if (tabContent) { + tabContent->HandleStartListener(newIndex, needChange, isLinkBar); + } + }); + animator_->SetDuration(scrollDuration_); + animator_->AddInterpolator(translate_); + animator_->Play(); + MarkNeedRender(); +} + +void RenderTabContent::HandleStartListener(int32_t newIndex, bool needChange, bool isLinkBar) +{ + isInAnimation_ = true; + isAnimationAdded_ = true; + if (newIndex >= 0 && newIndex < contentCount_ && needChange) { + currentIndex_ = newIndex; + if (callback_) { + callback_(newIndex); + } + if (!isLinkBar) { + FireDomChangeEvent(newIndex); + } + + // Set the new index node not hidden + const auto& newItem = contentMap_[newIndex]; + if (!newItem) { + LOGE("no content at index %{public}d", newIndex); + return; + } + newItem->SetHidden(false); + } +} + +void RenderTabContent::HandleStopListener(int32_t newIndex, bool needChange) +{ + LOGI("HandleStopListener start, newIndex is %{public}d,needChange is %{public}d", newIndex, needChange); + // callback used to notify the change of index + if (newIndex >= 0 && newIndex < contentCount_ && needChange) { + FireContentChangeEvent(); + SetHiddenChild(); + } + if (isInAnimation_) { + isInAnimation_ = false; + scrollOffset_ = 0.0; + } +} + +void RenderTabContent::SetHiddenChild() +{ + for (const auto& item : contentMap_) { + const auto& childItem = item.second; + if (!childItem) { + continue; + } + int32_t index = item.first; + childItem->SetHidden(index != currentIndex_); + } +} + +void RenderTabContent::OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) +{ + if (dragDetector_) { + dragDetector_->SetCoordinateOffset(coordinateOffset); + result.emplace_back(dragDetector_); + } +} + +double RenderTabContent::GetOffset(double delta) +{ + if (isVertical_) { + if (!NearZero(contentHeight_)) { + double friction = GetFriction(std::abs(scrollOffset_) / contentHeight_); + return friction * delta; + } + } else { + if (!NearZero(contentWidth_)) { + double friction = GetFriction(std::abs(scrollOffset_) / contentWidth_); + return friction * delta; + } + } + return delta; +} + +double RenderTabContent::GetFriction(double percentage) +{ + return FRIC_RATIO * std::pow(1.0 - percentage, SQUARE); +} + +void RenderTabContent::UpdateScrollPosition(double dragDelta) +{ + double newDragOffset = scrollOffset_ + dragDelta; + int32_t newIndex = IsRightToLeft() ? (newDragOffset < 0.0 ? GetPrevIndex() : GetNextIndex()) + : (newDragOffset > 0.0 ? GetPrevIndex() : GetNextIndex()); + + if ((currentIndex_ == 0 && newIndex == -1) || (currentIndex_ == (contentCount_ - 1) && newIndex == contentCount_)) { + scrollOffset_ += GetOffset(dragDelta); + } else { + scrollOffset_ = newDragOffset; + } + if (contentMap_.find(newIndex) == contentMap_.end() && newIndex >= 0 && newIndex < contentCount_) { + if (requireCallback_) { + requireCallback_(newIndex); + } + return; + } + UpdateChildPosition(scrollOffset_, currentIndex_, newIndex, true); +} + +void RenderTabContent::UpdateDragPosition(int32_t index) +{ + UpdateChildPosition(scrollOffset_, currentIndex_, index, true); +} + +void RenderTabContent::UpdateChildPosition(double offset, int32_t currentIndex, int32_t newIndex, bool needChange) +{ + scrollOffset_ = offset; + LOGD("UpdateChildPosition start offset = %{public}lf, from = %{public}d, to = %{public}d", offset, currentIndex, + newIndex); + if (currentIndex < 0 || currentIndex >= contentCount_) { + LOGE("currentIndex out of range, currentIndex is %{public}d", currentIndex); + return; + } + const auto& fromItem = contentMap_[currentIndex]; + if (!fromItem) { + LOGE("no content at index %{public}d", currentIndex); + return; + } + fromItem->SetPosition(GetMainAxisOffset(offset)); + fromItem->MarkNeedRender(); + + // at the first one item or the last one item, no more switching + if (newIndex < 0 || newIndex >= contentCount_) { + return; + } + + // scroll between left and right + const auto& toItem = contentMap_[newIndex]; + if (!toItem) { + LOGE("no content at index %{public}d", newIndex); + return; + } + toItem->SetHidden(false); + auto toItemPosValue = offset + (newIndex < currentIndex ? prevOffset_ : nextOffset_); + Offset toItemPos = GetMainAxisOffset(toItemPosValue); + toItem->SetPosition(toItemPos); + toItem->MarkNeedRender(); + LOGD("update position from(%{public}lf in %{public}u) to(%{public}lf in %{public}u)", offset, currentIndex, + toItemPosValue, newIndex); +} + +inline int32_t RenderTabContent::GetPrevIndex() const +{ + return currentIndex_ - 1; +} + +inline int32_t RenderTabContent::GetNextIndex() const +{ + return currentIndex_ + 1; +} + +void RenderTabContent::PerformLayout() +{ + const std::list>& children = GetChildren(); + if (!children.empty()) { + LayoutParam innerLayout = GetLayoutParam(); + Size maxSize = GetLayoutParam().GetMaxSize(); + for (const auto& item : contentMap_) { + const auto& childItem = item.second; + if (childItem) { + childItem->Layout(innerLayout); + } + } + SetLayoutSize(maxSize); + contentWidth_ = GetLayoutSize().Width(); + contentHeight_ = GetLayoutSize().Height(); + if (isVertical_) { + prevOffset_ = -contentHeight_; + nextOffset_ = contentHeight_; + } else { + prevOffset_ = IsRightToLeft() ? contentWidth_ : -contentWidth_; + nextOffset_ = IsRightToLeft() ? -contentWidth_ : contentWidth_; + } + Offset prevPosition = GetMainAxisOffset(prevOffset_); + Offset nextPosition = GetMainAxisOffset(nextOffset_); + + for (const auto& item : contentMap_) { + const auto& childItem = item.second; + if (!childItem) { + LOGW("The childItem is null"); + continue; + } + int32_t index = item.first; + // make sure the new requested tab start with right position, when in animation + if ((!isDragging_ && !isInAnimation_) || (index == requestedIndex_)) { + if (index < currentIndex_) { + childItem->SetPosition(prevPosition); + childItem->SetHidden(true); + } else if (index == currentIndex_) { + childItem->SetPosition(Offset::Zero()); + childItem->SetHidden(false); + } else { + childItem->SetPosition(nextPosition); + childItem->SetHidden(true); + } + } + } + requestedIndex_ = -1; + } +} + +void RenderTabContent::UpdateTouchRect() +{ + SetTouchRect(GetPaintRect()); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/tab_bar/render_tab_content.h b/frameworks/core/components/tab_bar/render_tab_content.h new file mode 100644 index 00000000..c385e086 --- /dev/null +++ b/frameworks/core/components/tab_bar/render_tab_content.h @@ -0,0 +1,153 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_RENDER_TAB_CONTENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_RENDER_TAB_CONTENT_H + +#include +#include + +#include "base/memory/ace_type.h" +#include "core/animation/animation.h" +#include "core/animation/animator.h" +#include "core/components/tab_bar/tab_content_component.h" +#include "core/gestures/drag_recognizer.h" +#include "core/gestures/raw_recognizer.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderTabContent : public RenderNode { + DECLARE_ACE_TYPE(RenderTabContent, RenderNode) + +public: + RenderTabContent(); + ~RenderTabContent() override = default; + + void UpdateTouchRect() override; + static RefPtr Create(); + void Update(const RefPtr& component) override; + void PerformLayout() override; + + using UpdateIndexFunc = std::function; + void RegisterCallback(const UpdateIndexFunc& callback) + { + callback_ = callback; + } + + void RegisterRequireCallback(const UpdateIndexFunc& callback) + { + requireCallback_ = callback; + } + + void ChangeScroll(int32_t index); + + void UpdateDragPosition(int32_t index); + + void AddChildContent(int32_t index, const RefPtr& child) + { + contentMap_.emplace(index, child); + requestedIndex_ = index; + } + + int32_t GetCurrentIndex() const + { + return currentIndex_; + } + + const std::unordered_map>& GetChildContents() const + { + return contentMap_; + } + + void FireDomChangeEvent(int32_t index) const; + +private: + // for handle scroll tabContent + void OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) override; + void HandleDragStart(); + void HandleDragUpdate(double offset); + void HandleDragEnd(); + + void Initialize(const WeakPtr& context); + void FireContentChangeEvent() const; + + // used to scroll TabContent and update the position + void ScrollContents(int32_t newIndex, bool isLinkBar); + void UpdateScrollPosition(double dragDelta); + void UpdateChildPosition(double offset, int32_t currentIndex, int32_t newIndex, bool needChange); + void HandleStopListener(int32_t newIndex, bool needChange); + void HandleStartListener(int32_t newIndex, bool needChange, bool isLinkBar); + void SetHiddenChild(); + + double GetOffset(double offset); + + static double GetFriction(double percentage); + + // if tab is vertical, offset changed on Y axis + // if tab is horizontal, offset changed on X axis + Offset GetMainAxisOffset(double offset) const + { + return isVertical_ ? Offset(0.0, offset) : Offset(offset, 0.0); + } + + bool IsRightToLeft() const + { + return GetTextDirection() == TextDirection::RTL && !isVertical_; + } + // used to get the previous index or the next index + int32_t GetPrevIndex() const; + int32_t GetNextIndex() const; + + // dragRecognizer and the animation + RefPtr dragDetector_; + RefPtr> translate_; + RefPtr animator_; + + // map for contents + std::unordered_map> contentMap_; + + // onChange event + std::function changeEvent_; + std::function domChangeEvent_; + + bool isAnimationAdded_ = false; // whether the animation is added + bool scrollable_ = true; // the default value is true + bool isInAnimation_ = false; // whether it is in animation + bool isDragging_ = false; // whether it is dragging + bool isPaused_ = false; // whether the animation is paused + bool isInitialized_ = false; + bool isVertical_ = false; // whether the tab is vertical + + int32_t contentCount_ = 0; // the count of content + int32_t currentIndex_ = 0; // the index of current tab + int32_t requestedIndex_ = -1; // the next requested index + + float scrollDuration_ = 0.0f; // the duration of the scroll animation + double contentWidth_ = 0.0; // the width of tab content + double contentHeight_ = 0.0; // the height of tab content + double prevOffset_ = 0.0; // the offset of previous item + double nextOffset_ = 0.0; // the offset of next item + double scrollOffset_ = 0.0; // the offset when the content is scrolling + + // callbacks when updating the index + UpdateIndexFunc callback_; + UpdateIndexFunc requireCallback_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_RENDER_TAB_CONTENT_H diff --git a/frameworks/core/components/tab_bar/tab_bar_component.cpp b/frameworks/core/components/tab_bar/tab_bar_component.cpp new file mode 100644 index 00000000..fd1e7e31 --- /dev/null +++ b/frameworks/core/components/tab_bar/tab_bar_component.cpp @@ -0,0 +1,144 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/tab_bar/tab_bar_component.h" + +#include "base/utils/system_properties.h" +#include "core/components/tab_bar/render_tab_bar.h" +#include "core/components/tab_bar/tab_bar_element.h" + +namespace OHOS::Ace { +namespace { + +constexpr int32_t ACTIVE_TEXT_SIZE = 24; +constexpr int32_t INACTIVE_TEXT_SIZE = 18; +constexpr double ACTIVE_TEXT_OPACITY = 0.9; +constexpr double INACTIVE_TEXT_OPACITY = 0.6; +constexpr Dimension BOTTOM_PADING(12, DimensionUnit::VP); + +} // namespace + +TabBarComponent::TabBarComponent(const std::list>& tabItems, const RefPtr& controller, + const RefPtr& indicator) + : ComponentGroup(tabItems) +{ + controller_ = controller; + indicator_ = indicator; + focusIndicator_ = indicator; +} + +RefPtr TabBarComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +RefPtr TabBarComponent::CreateRenderNode() +{ + return RenderTabBar::Create(); +} + +void TabBarComponent::InitStyle(const RefPtr& theme) +{ + if (!theme) { + return; + } + + focusRadiusDimension_ = theme->GetFocusIndicatorRadius(); + focusAnimationColor_ = theme->GetFocusIndicatorColor(); + gradientWidth_ = theme->GetGradientWidth(); + activeIndicatorMinWidth_ = theme->GetActiveIndicatorMinWidth_(); + + Dimension labelPaddingDimension = theme->GetLabelPadding(); + SetLabelPadding( + Edge(labelPaddingDimension.Value(), 0.0, labelPaddingDimension.Value(), 0.0, labelPaddingDimension.Unit())); + + auto paddingDimension = theme->GetPadding(); + SetPadding(Edge(paddingDimension.Value(), 0.0, paddingDimension.Value(), 0.0, paddingDimension.Unit())); + + auto indicatorPadding = Edge(0.0, theme->GetActiveIndicatorPadding().Value(), 0.0, + theme->GetActiveIndicatorPadding().Value(), theme->GetActiveIndicatorPadding().Unit()); + indicator_ = AceType::MakeRefPtr( + indicatorPadding, theme->GetActiveIndicatorColor(), theme->GetActiveIndicatorWidth()); + indicator_->SetPadding(indicatorPadding); + + auto deviceType = SystemProperties::GetDeviceType(); + if (deviceType == DeviceType::TV) { + RefPtr backDecoration = AceType::MakeRefPtr(); + Border border; + border.SetBorderRadius(Radius(theme->GetFocusIndicatorRadius())); + backDecoration->SetBorder(border); + backDecoration->SetBackgroundColor(theme->GetFocusIndicatorColor()); + + focusIndicator_ = AceType::MakeRefPtr(backDecoration); + auto focusIndicatorPadding = Edge(theme->GetFocusIndicatorHorizontalPadding().Value(), + theme->GetFocusIndicatorVerticalPadding().Value(), theme->GetFocusIndicatorHorizontalPadding().Value(), + theme->GetFocusIndicatorVerticalPadding().Value(), theme->GetFocusIndicatorVerticalPadding().Unit()); + focusIndicator_->SetPadding(focusIndicatorPadding); + } else if (deviceType == DeviceType::PHONE) { + focusIndicator_->SetPadding(indicatorPadding); + } +} + +void TabBarComponent::InitNavigationBarStyle() +{ + usingDefaultStyle_ = true; + indicator_ = nullptr; + activeTextStyle_.SetTextColor(Color::FromRGBO(0, 0, 0, ACTIVE_TEXT_OPACITY)); + activeTextStyle_.SetFontSize(Dimension(ACTIVE_TEXT_SIZE, DimensionUnit::VP)); + activeTextStyle_.SetMaxLines(1); + activeTextStyle_.SetTextOverflow(TextOverflow::CLIP); + + inactiveTextStyle_.SetTextColor(Color::FromRGBO(0, 0, 0, INACTIVE_TEXT_OPACITY)); + inactiveTextStyle_.SetFontSize(Dimension(INACTIVE_TEXT_SIZE, DimensionUnit::VP)); + inactiveTextStyle_.SetMaxLines(1); + inactiveTextStyle_.SetTextOverflow(TextOverflow::CLIP); + labelPadding_.SetBottom(BOTTOM_PADING); + itemAlignment_ = Alignment::BOTTOM_CENTER; + mode_ = TabBarMode::FIXED_START; +} + +void TabBarComponent::BuildItems(std::list>& items) +{ + int32_t currentIndex = 0; + int32_t activeIndex = controller_ ? controller_->GetIndex() : 0; + for (const auto& pos : GetChildren()) { + RefPtr box = AceType::DynamicCast(pos); + if (!box) { + box = AceType::MakeRefPtr(pos); + } + if (usingDefaultStyle_) { + if (currentIndex++ == activeIndex) { + box->UpdateTextStyle(activeTextStyle_); + } else { + box->UpdateTextStyle(inactiveTextStyle_); + } + } + box->SetPadding(labelPadding_); + if (mode_ == TabBarMode::FIXED) { + box->SetFlex(BoxFlex::FLEX_XY); + } else { + if (vertical_) { + box->SetFlex(BoxFlex::FLEX_X); + } else { + box->SetFlex(BoxFlex::FLEX_Y); + } + } + box->SetDeliverMinToChild(false); + box->SetAlignment(itemAlignment_); + items.push_back(box); + } +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/tab_bar/tab_bar_component.h b/frameworks/core/components/tab_bar/tab_bar_component.h new file mode 100644 index 00000000..f7478558 --- /dev/null +++ b/frameworks/core/components/tab_bar/tab_bar_component.h @@ -0,0 +1,206 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_TAB_BAR_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_TAB_BAR_COMPONENT_H + +#include "core/components/box/box_component.h" +#include "core/components/box/render_box.h" +#include "core/components/common/properties/decoration.h" +#include "core/components/common/properties/edge.h" +#include "core/components/tab_bar/tab_bar_indicator_component.h" +#include "core/components/tab_bar/tab_bar_item_component.h" +#include "core/components/tab_bar/tab_controller.h" +#include "core/components/tab_bar/tab_theme.h" +#include "core/components/text/text_component.h" +#include "core/pipeline/base/component_group.h" +#include "core/pipeline/base/element.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +enum class TabBarMode { + FIXED, + SCROLLABEL, + FIXED_START, +}; + +enum class TabBarIndicatorType { + TAB, + LABEL, +}; + +class TabBarComponent : public ComponentGroup { + DECLARE_ACE_TYPE(TabBarComponent, ComponentGroup); + +public: + TabBarComponent(const std::list>& tabItems, const RefPtr& controller, + const RefPtr& indicator = MakeRefPtr()); + ~TabBarComponent() override = default; + + RefPtr CreateElement() override; + RefPtr CreateRenderNode() override; + + void InitStyle(const RefPtr& theme); + + void SetVertical(bool isVertical) + { + vertical_ = isVertical; + } + + bool IsVertical() const + { + return vertical_; + } + + void SetIndex(int32_t index) + { + if (controller_) { + int32_t size = GetChildren().size(); + if (index < 0 || index >= size) { + index = 0; + } + controller_->SetIndex(index); + } + } + + int32_t GetIndex() const + { + if (controller_) { + return controller_->GetIndex(); + } + return 0; + } + + void SetController(const RefPtr& controller) + { + controller_ = controller; + } + + RefPtr GetController() const + { + return controller_; + } + + const RefPtr& GetIndicator() const + { + return indicator_; + } + + const RefPtr& GetFocusIndicator() const + { + return focusIndicator_; + } + + TabBarMode GetMode() const + { + return mode_; + } + + void SetMode(TabBarMode mode) + { + mode_ = mode; + } + + TabBarIndicatorType GetIndicatorSize() const + { + return indicatorSize_; + } + + void SetIndicatorSize(TabBarIndicatorType indicatorSize) + { + indicatorSize_ = indicatorSize; + } + + const Edge& GetLabelPadding() const + { + return labelPadding_; + } + + void SetLabelPadding(const Edge& labelPadding) + { + labelPadding_ = labelPadding; + } + + const Edge& GetPadding() const + { + return padding_; + } + + void SetPadding(const Edge& padding) + { + padding_ = padding; + } + + const Color& GetFocusAnimationColor() const + { + return focusAnimationColor_; + } + + const Dimension& GetFocusRadiusDimension() const + { + return focusRadiusDimension_; + } + + const Dimension& GetGradientWidth() const + { + return gradientWidth_; + } + + const Dimension& GetActiveIndicatorMinWidth() const + { + return activeIndicatorMinWidth_; + } + + const EventMarker& GetDomChangeEventId() const + { + return domChangeEventId_; + } + + void SetDomChangeEventId(const EventMarker& domChangeEventId) + { + domChangeEventId_ = domChangeEventId; + } + + void InitNavigationBarStyle(); + void BuildItems(std::list>& items); + +private: + bool vertical_ { false }; // the tab is vertical or not, default value is false + + TabBarIndicatorType indicatorSize_ { TabBarIndicatorType::LABEL }; + TabBarMode mode_ { TabBarMode::FIXED }; + Edge labelPadding_; + Edge padding_; + + Color focusAnimationColor_ = Color::WHITE; + Dimension focusRadiusDimension_; + Dimension gradientWidth_; + Dimension activeIndicatorMinWidth_; + + RefPtr indicator_; + RefPtr focusIndicator_; + RefPtr controller_; + + bool usingDefaultStyle_ { false }; + TextStyle activeTextStyle_; + TextStyle inactiveTextStyle_; + Alignment itemAlignment_ = Alignment::CENTER; + EventMarker domChangeEventId_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_TAB_BAR_COMPONENT_H diff --git a/frameworks/core/components/tab_bar/tab_bar_element.cpp b/frameworks/core/components/tab_bar/tab_bar_element.cpp new file mode 100644 index 00000000..704be2c2 --- /dev/null +++ b/frameworks/core/components/tab_bar/tab_bar_element.cpp @@ -0,0 +1,168 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/tab_bar/tab_bar_element.h" + +#include "base/utils/system_properties.h" +#include "core/components/tab_bar/render_tab_bar.h" +#include "core/components/text/text_component.h" + +namespace OHOS::Ace { + +RefPtr TabBarElement::CreateRenderNode() +{ + RefPtr node = ComponentGroupElement::CreateRenderNode(); + + RefPtr tabBar = AceType::DynamicCast(node); + if (tabBar) { + tabBar->RegisterCallback([weakTabBarElement = AceType::WeakClaim(this)](int32_t index) { + auto tabBar = weakTabBarElement.Upgrade(); + if (tabBar) { + tabBar->UpdateElement(index); + } + }); + } + return node; +} + +void TabBarElement::UpdateElement(int32_t index) +{ + if (controller_) { + int32_t preIndex = controller_->GetIndex(); + controller_->SetIndex(index); + int32_t curIndex = controller_->GetIndex(); + if (preIndex != curIndex) { + LOGD("TabBar change from %{public}d to %{public}d", preIndex, curIndex); + controller_->ChangeDispatch(curIndex); + } + UpdateIndex(curIndex); + } +} + +void TabBarElement::Update() +{ + ComponentGroupElement::Update(); + + if (component_) { + RefPtr tabBar = AceType::DynamicCast(component_); + if (!tabBar) { + LOGE("TabBarElement::Update: get TabBarComponent failed!"); + return; + } + controller_ = tabBar->GetController(); + if (controller_) { + controller_->SetBarElement(AceType::Claim(this)); + } + + indicatorStyle_ = tabBar->GetIndicator(); + focusIndicatorStyle_ = tabBar->GetFocusIndicator(); + + tabs_.clear(); + tabBar->BuildItems(tabs_); + auto domChangeEvent = AceAsyncEvent::Create(tabBar->GetDomChangeEventId(), GetContext()); + if (domChangeEvent) { + int32_t index = controller_ ? controller_->GetIndex() : 0; + domChangeEvent(index); + } + vertical_ = tabBar->IsVertical(); + } +} + +bool TabBarElement::RequestNextFocus(bool vertical, bool reverse, const Rect& rect) +{ + if (vertical_ == vertical) { + if (GoToNextFocus(reverse)) { + int32_t index = std::distance(focusNodes_.begin(), itLastFocusNode_); + UpdateElement(index); + return true; + } + } + return false; +} + +void TabBarElement::UpdateIndex(int32_t index) +{ + RefPtr tabBar = AceType::DynamicCast(renderNode_); + if (tabBar) { + tabBar->SetIndex(index); + } +} + +void TabBarElement::PerformBuild() +{ + if (tabs_.empty()) { + LOGD("tabs is empty"); + ComponentGroupElement::PerformBuild(); + return; + } + + LOGD("TabBarElement::PerformBuild"); + int32_t index = 0; + for (auto& box : tabs_) { + UpdateChild(GetChild(index), box); + index++; + } + + GetRenderNode()->MarkNeedLayout(); +} + +RefPtr TabBarElement::GetChild(int32_t index) +{ + if (index >= 0 && decltype(children_)::size_type(index) < children_.size()) { + auto pos = children_.begin(); + std::advance(pos, index); + return (*pos); + } + return nullptr; +} + +void TabBarElement::OnFocus() +{ + LOGD("TabBar element OnFocus"); + RefPtr tabBar = AceType::DynamicCast(renderNode_); + if (tabBar) { + tabBar->HandleFocusEvent(true); + if (focusIndicatorStyle_) { + tabBar->UpdateIndicatorStyle(focusIndicatorStyle_); + } + } + if (controller_) { + int32_t index = controller_->GetIndex(); + int32_t size = focusNodes_.size(); + if (size > 0) { + size--; + } + index = std::clamp(index, 0, size); + itLastFocusNode_ = focusNodes_.begin(); + std::advance(itLastFocusNode_, index); + } + + return FocusGroup::OnFocus(); +} + +void TabBarElement::OnBlur() +{ + LOGD("TabBar element Onblur"); + RefPtr tabBar = AceType::DynamicCast(renderNode_); + if (tabBar) { + tabBar->HandleFocusEvent(false); + if (indicatorStyle_) { + tabBar->UpdateIndicatorStyle(indicatorStyle_); + } + } + return FocusGroup::OnBlur(); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/tab_bar/tab_bar_element.h b/frameworks/core/components/tab_bar/tab_bar_element.h new file mode 100644 index 00000000..c1c8d288 --- /dev/null +++ b/frameworks/core/components/tab_bar/tab_bar_element.h @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_TAB_BAR_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_TAB_BAR_ELEMENT_H + +#include "core/components/box/box_component.h" +#include "core/components/box/box_element.h" +#include "core/components/tab_bar/tab_bar_component.h" +#include "core/components/tab_bar/tab_controller.h" +#include "core/focus/focus_node.h" +#include "core/pipeline/base/component_group_element.h" + +namespace OHOS::Ace { + +class TabBarElement : public ComponentGroupElement, public FocusGroup { + DECLARE_ACE_TYPE(TabBarElement, ComponentGroupElement, FocusGroup); + +public: + void UpdateIndex(int32_t index); + void PerformBuild() override; + void Update() override; + bool RequestNextFocus(bool vertical, bool reverse, const Rect& rect) override; + +protected: + void OnFocus() override; + void OnBlur() override; + +private: + RefPtr CreateRenderNode() override; + void UpdateElement(int32_t index); + RefPtr GetChild(int32_t index); + + bool vertical_ { false }; // the tab is vertical or not, default value is false + std::list> tabs_; + RefPtr controller_; + RefPtr indicatorStyle_; + RefPtr focusIndicatorStyle_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_TAB_BAR_ELEMENT_H diff --git a/frameworks/core/components/tab_bar/tab_bar_indicator_component.cpp b/frameworks/core/components/tab_bar/tab_bar_indicator_component.cpp new file mode 100644 index 00000000..7d795228 --- /dev/null +++ b/frameworks/core/components/tab_bar/tab_bar_indicator_component.cpp @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/tab_bar/tab_bar_indicator_component.h" + +namespace OHOS::Ace { +namespace { + +constexpr double DOUBLE_FACTOR = 2.0; + +} // namespace + +TabBarIndicatorComponent::TabBarIndicatorComponent( + const Edge& padding, const Color& color, const Dimension& borderWidth) + : indicatorStyle_(TabBarIndicatorStyle::DEFAULT), indicatorPadding_(padding), indicatorColor_(color), + indicatorWidth_(borderWidth) +{ + // build default indicatorDecoration + Border border; + border.SetBorderRadius(Radius(borderWidth / DOUBLE_FACTOR)); + indicatorDecoration_ = AceType::MakeRefPtr(); + indicatorDecoration_->SetBorder(border); + indicatorDecoration_->SetBackgroundColor(color); + SetHeight(borderWidth.Value(), borderWidth.Unit()); + Initialize(); +} + +TabBarIndicatorComponent::TabBarIndicatorComponent(const RefPtr& indicatorDecoration) + : indicatorStyle_(TabBarIndicatorStyle::CUSTOM), indicatorDecoration_(indicatorDecoration) +{ + Initialize(); +} + +void TabBarIndicatorComponent::Initialize() +{ + if (indicatorStyle_ == TabBarIndicatorStyle::DEFAULT) { + SetFlex(BoxFlex::FLEX_X); + } else { + SetFlex(BoxFlex::FLEX_XY); + } + + if (indicatorDecoration_) { + SetBackDecoration(indicatorDecoration_); + } +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/tab_bar/tab_bar_indicator_component.h b/frameworks/core/components/tab_bar/tab_bar_indicator_component.h new file mode 100644 index 00000000..32498e0d --- /dev/null +++ b/frameworks/core/components/tab_bar/tab_bar_indicator_component.h @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_TAB_BAR_INDICATOR_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_TAB_BAR_INDICATOR_COMPONENT_H + +#include "core/components/box/box_component.h" + +namespace OHOS::Ace { + +inline const Dimension DEFAULT_INDICATOR_WIDTH = Dimension(2.0, DimensionUnit::VP); +inline const Color DEFAULT_INDICATOR_COLOR = Color(0xFF254ff7); +inline const Edge DEFAULT_INDICATOR_PADDING = Edge(0.0); + +enum class TabBarIndicatorStyle { + DEFAULT, + CUSTOM, +}; + +class TabBarIndicatorComponent : public BoxComponent { + DECLARE_ACE_TYPE(TabBarIndicatorComponent, BoxComponent); + +public: + explicit TabBarIndicatorComponent(const Edge& padding = DEFAULT_INDICATOR_PADDING, + const Color& color = DEFAULT_INDICATOR_COLOR, const Dimension& borderWidth = DEFAULT_INDICATOR_WIDTH); + explicit TabBarIndicatorComponent(const RefPtr& indicatorDecoration); + ~TabBarIndicatorComponent() override = default; + + TabBarIndicatorStyle GetIndicatorStyle() const + { + return indicatorStyle_; + } + + const Edge& GetIndicatorPadding() const + { + return indicatorPadding_; + } + + const Color& GetIndicatorColor() const + { + return indicatorColor_; + } + + Dimension GetIndicatorWidth() const + { + return indicatorWidth_; + } + + const RefPtr& GetIndicatorDecoration() const + { + return indicatorDecoration_; + } + +private: + void Initialize(); + + TabBarIndicatorStyle indicatorStyle_ { TabBarIndicatorStyle::DEFAULT }; + Edge indicatorPadding_; + Color indicatorColor_ { DEFAULT_INDICATOR_COLOR }; + Dimension indicatorWidth_ { DEFAULT_INDICATOR_WIDTH }; + RefPtr indicatorDecoration_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_TAB_BAR_INDICATOR_COMPONENT_H diff --git a/frameworks/core/components/tab_bar/tab_bar_item_component.cpp b/frameworks/core/components/tab_bar/tab_bar_item_component.cpp new file mode 100644 index 00000000..f9737aea --- /dev/null +++ b/frameworks/core/components/tab_bar/tab_bar_item_component.cpp @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/tab_bar/tab_bar_item_component.h" + +#include "core/components/flex/flex_component.h" +#include "core/components/tab_bar/render_tab_bar_item.h" +#include "core/components/tab_bar/tab_bar_item_element.h" + +namespace OHOS::Ace { + +TabBarItemComponent::TabBarItemComponent(const RefPtr& child) +{ + SetChild(child); +} + +TabBarItemComponent::TabBarItemComponent(const std::string& text, const RefPtr& imageComponent) +{ + std::list> children; + RefPtr icon = AceType::DynamicCast(imageComponent); + if (icon) { + icon_ = icon; + children.push_back(icon_); + } + if (!text.empty()) { + text_ = AceType::MakeRefPtr(text); + TextStyle textStyle; + textStyle.SetTextAlign(TextAlign::CENTER); + textStyle.SetMaxLines(1); + textStyle.SetTextOverflow(TextOverflow::CLIP); + text_->SetTextStyle(textStyle); + children.push_back(text_); + } + if (!children.empty()) { + auto flex = AceType::MakeRefPtr(FlexAlign::CENTER, FlexAlign::CENTER, children); + SetChild(flex); + } else { + LOGE("Create Tab err: text == null && icon == null"); + } +} + +RefPtr TabBarItemComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +RefPtr TabBarItemComponent::CreateRenderNode() +{ + return RenderTabBarItem::Create(); +} + +void FindChildren(const RefPtr& component, std::stack>& allChildren) +{ + auto sigleChildGroup = AceType::DynamicCast(component); + if (sigleChildGroup) { + allChildren.push(sigleChildGroup->GetChild()); + } + + auto multiChildGroup = AceType::DynamicCast(component); + if (multiChildGroup) { + for (const auto& item : multiChildGroup->GetChildren()) { + allChildren.push(item); + } + } +} + +void TabBarItemComponent::UpdateTextStyle(const TextStyle& textStyle) +{ + std::stack> allChildren; + allChildren.push(GetChild()); + + while (!allChildren.empty()) { + auto component = allChildren.top(); + allChildren.pop(); + auto text = AceType::DynamicCast(component); + if (text) { + text->SetTextStyle(textStyle); + } else { + FindChildren(component, allChildren); + } + } +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/tab_bar/tab_bar_item_component.h b/frameworks/core/components/tab_bar/tab_bar_item_component.h new file mode 100644 index 00000000..56c2beca --- /dev/null +++ b/frameworks/core/components/tab_bar/tab_bar_item_component.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_TAB_BAR_ITEM_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_TAB_BAR_ITEM_COMPONENT_H + +#include "core/components/box/box_component.h" +#include "core/components/image/image_component.h" +#include "core/components/text/text_component.h" + +namespace OHOS::Ace { + +class TabBarItemComponent : public BoxComponent { + DECLARE_ACE_TYPE(TabBarItemComponent, BoxComponent); + +public: + explicit TabBarItemComponent(const RefPtr& child); + TabBarItemComponent(const std::string& text, const RefPtr& imageComponent); + ~TabBarItemComponent() override = default; + RefPtr CreateElement() override; + RefPtr CreateRenderNode() override; + void UpdateTextStyle(const TextStyle& textStyle); + +private: + RefPtr text_; + RefPtr icon_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_TAB_BAR_ITEM_COMPONENT_H diff --git a/frameworks/core/components/tab_bar/tab_bar_item_element.h b/frameworks/core/components/tab_bar/tab_bar_item_element.h new file mode 100644 index 00000000..86a75193 --- /dev/null +++ b/frameworks/core/components/tab_bar/tab_bar_item_element.h @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_TAB_BAR_ITEM_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_TAB_BAR_ITEM_ELEMENT_H + +#include "core/components/box/box_element.h" +#include "core/focus/focus_node.h" + +namespace OHOS::Ace { + +class TabBarItemElement : public BoxElement, public FocusGroup { + DECLARE_ACE_TYPE(TabBarItemElement, BoxElement, FocusGroup); + +public: + void OnFocus() override + { + if (renderNode_) { + renderNode_->ChangeStatus(RenderStatus::FOCUS); + } + FocusGroup::OnFocus(); + } + + void OnBlur() override + { + if (renderNode_) { + renderNode_->ChangeStatus(RenderStatus::BLUR); + } + FocusGroup::OnBlur(); + } + + bool RequestNextFocus(bool vertical, bool reverse, const Rect& rect) override + { + return false; + } + + bool IsFocusable() const override + { + return FocusNode::IsFocusable(); + } + + bool AcceptFocusByRectOfLastFocus(const Rect& rect) override + { + return FocusNode::AcceptFocusByRectOfLastFocus(rect); + } +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_TAB_BAR_ITEM_ELEMENT_H diff --git a/frameworks/core/components/tab_bar/tab_bar_size_animation.cpp b/frameworks/core/components/tab_bar/tab_bar_size_animation.cpp new file mode 100644 index 00000000..7e2af011 --- /dev/null +++ b/frameworks/core/components/tab_bar/tab_bar_size_animation.cpp @@ -0,0 +1,111 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/tab_bar/tab_bar_size_animation.h" + +#include + +#include "core/animation/animator.h" +#include "core/components/tab_bar/render_tab_bar.h" + +namespace OHOS::Ace { +namespace { + +constexpr int32_t SIZE_TRANSITION_DURATION = 300; +constexpr int32_t ACTIVE_TEXT_SIZE = 24; +constexpr int32_t INACTIVE_TEXT_SIZE = 18; +constexpr double ACTIVE_TEXT_OPACITY = 0.9; +constexpr double INACTIVE_TEXT_OPACITY = 18; + +} // namespace + +RefPtr GetTextItem(const RefPtr& node) +{ + for (const auto& item : node->GetChildren()) { + for (const auto& textItem : item->GetChildren()) { + return AceType::DynamicCast(textItem); + } + } + return nullptr; +} + +void TabBarSizeAnimation::Initialize(const WeakPtr& context) +{ + ItemAnimationProp onFocusItem(Dimension(ACTIVE_TEXT_SIZE, DimensionUnit::VP), ACTIVE_TEXT_OPACITY); + ItemAnimationProp onBlurItem(Dimension(INACTIVE_TEXT_SIZE, DimensionUnit::VP), INACTIVE_TEXT_OPACITY); + + onFocusTranslate_ = + AceType::MakeRefPtr>(onBlurItem, onFocusItem, Curves::FRICTION); + onBlurTranslate_ = + AceType::MakeRefPtr>(onFocusItem, onBlurItem, Curves::FRICTION); + auto weak = AceType::WeakClaim(this); + controller_ = AceType::MakeRefPtr(context); + onFocusTranslate_->AddListener(Animation::ValueCallback([weak](ItemAnimationProp value) { + auto tabBar = weak.Upgrade(); + if (tabBar) { + tabBar->ChangeItemProp(tabBar->onFocusItemText_, value); + } + })); + onBlurTranslate_->AddListener(Animation::ValueCallback([weak](ItemAnimationProp value) { + auto tabBar = weak.Upgrade(); + if (tabBar) { + tabBar->ChangeItemProp(tabBar->onBlurItemText_, value); + } + })); + controller_->SetDuration(SIZE_TRANSITION_DURATION); + controller_->AddInterpolator(onFocusTranslate_); + controller_->AddInterpolator(onBlurTranslate_); +} + +void TabBarSizeAnimation::Start(const WeakPtr& weakTabbar, int32_t from, int32_t to) +{ + auto tabBar = weakTabbar.Upgrade(); + if (!tabBar) { + return; + } + auto lastSelected = tabBar->GetChildren().begin(); + std::advance(lastSelected, from); + + onBlurItemText_ = GetTextItem(*lastSelected); + + auto currentSelected = tabBar->GetChildren().begin(); + std::advance(currentSelected, to); + onFocusItemText_ = GetTextItem(*currentSelected); + + layoutCallback_ = [weakTabbar]() { + auto tabBar = weakTabbar.Upgrade(); + if (tabBar) { + tabBar->MarkNeedLayout(); + } + }; + controller_->Play(); +} + +void TabBarSizeAnimation::ChangeItemProp(const RefPtr& renderText, const ItemAnimationProp& animationProp) +{ + if (renderText) { + TextStyle textStyle; + textStyle.SetTextColor(Color::FromRGBO(0, 0, 0, animationProp.opacity)); + textStyle.SetFontSize(animationProp.fontSize); + textStyle.SetMaxLines(1); + textStyle.SetTextOverflow(TextOverflow::CLIP); + renderText->SetTextStyle(textStyle); + renderText->MarkNeedMeasure(); + renderText->MarkNeedLayout(); + } + layoutCallback_(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/tab_bar/tab_bar_size_animation.h b/frameworks/core/components/tab_bar/tab_bar_size_animation.h new file mode 100644 index 00000000..aac8f90e --- /dev/null +++ b/frameworks/core/components/tab_bar/tab_bar_size_animation.h @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_TAB_BAR_SIZE_ANIMATION_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_TAB_BAR_SIZE_ANIMATION_H + +#include "base/memory/ace_type.h" +#include "core/animation/curve_animation.h" +#include "core/components/text/render_text.h" + +namespace OHOS::Ace { + +class TabBarSizeAnimation : public virtual AceType { +public: + void Initialize(const WeakPtr& context); + void Start(const WeakPtr& tabBar, int32_t from, int32_t to); + +private: + struct ItemAnimationProp { + constexpr ItemAnimationProp() = default; + constexpr ItemAnimationProp(Dimension fontSize, double opacity) : fontSize(fontSize), opacity(opacity) {} + constexpr ItemAnimationProp operator+(const ItemAnimationProp& prop) const + { + return ItemAnimationProp(fontSize + prop.fontSize, opacity + prop.opacity); + } + constexpr ItemAnimationProp operator-(const ItemAnimationProp& prop) const + { + return ItemAnimationProp(fontSize - prop.fontSize, opacity - prop.opacity); + } + constexpr ItemAnimationProp operator*(double value) const + { + return ItemAnimationProp(fontSize * value, opacity * value); + } + + Dimension fontSize; + double opacity = 0; + }; + + void ChangeItemProp(const RefPtr& layoutCallback, const ItemAnimationProp& animationProp); + + // animation control + RefPtr controller_; + RefPtr> onFocusTranslate_; + RefPtr> onBlurTranslate_; + + RefPtr onFocusItemText_; + RefPtr onBlurItemText_; + + std::function layoutCallback_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_TAB_BAR_SIZE_ANIMATION_H diff --git a/frameworks/core/components/tab_bar/tab_content_component.cpp b/frameworks/core/components/tab_bar/tab_content_component.cpp new file mode 100644 index 00000000..a462e2e9 --- /dev/null +++ b/frameworks/core/components/tab_bar/tab_content_component.cpp @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/tab_bar/tab_content_component.h" + +#include "core/components/tab_bar/render_tab_content.h" +#include "core/components/tab_bar/tab_content_element.h" + +namespace OHOS::Ace { + +TabContentComponent::TabContentComponent( + const std::list>& contents, const RefPtr& controller) + : ComponentGroup(contents) +{ + controller_ = controller; +} + +RefPtr TabContentComponent::CreateElement() +{ + return AceType::MakeRefPtr(GetChildren()); +} + +RefPtr TabContentComponent::CreateRenderNode() +{ + return RenderTabContent::Create(); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/tab_bar/tab_content_component.h b/frameworks/core/components/tab_bar/tab_content_component.h new file mode 100644 index 00000000..7929884a --- /dev/null +++ b/frameworks/core/components/tab_bar/tab_content_component.h @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_TAB_CONTENT_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_TAB_CONTENT_COMPONENT_H + +#include "core/components/tab_bar/tab_controller.h" +#include "core/pipeline/base/component_group.h" +#include "core/pipeline/base/element.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +// The default interval for scrolling content in ms. +inline constexpr float DEFAULT_TABCONTENT_ANIMATION_DURATION = 200.0f; + +class TabContentComponent : public ComponentGroup { + DECLARE_ACE_TYPE(TabContentComponent, ComponentGroup); + +public: + TabContentComponent(const std::list>& contents, const RefPtr& controller); + ~TabContentComponent() override = default; + + RefPtr CreateElement() override; + RefPtr CreateRenderNode() override; + + void SetController(const RefPtr& controller) + { + controller_ = controller; + } + + RefPtr GetController() const + { + return controller_; + } + + void SetScrollable(bool scrollable) + { + scrollable_ = scrollable; + } + + bool IsScrollable() const + { + return scrollable_; + } + + void SetVertical(bool isVertical) + { + vertical_ = isVertical; + } + + bool IsVertical() const + { + return vertical_; + } + + void SetScrollDuration(float scrollDuration) + { + scrollDuration_ = scrollDuration; + } + + float GetScrollDuration() const + { + return scrollDuration_; + } + + void SetChangeEventId(const EventMarker& changeEventId) + { + changeEventId_ = changeEventId; + } + + const EventMarker& GetChangeEventId() const + { + return changeEventId_; + } + + void SetDomChangeEventId(const EventMarker& domChangeEventId) + { + domChangeEventId_ = domChangeEventId; + } + + const EventMarker& GetDomChangeEventId() const + { + return domChangeEventId_; + } + +private: + RefPtr controller_; + + bool scrollable_ = true; // the default value is true + bool vertical_ = false; // the tab is vertical or not, default value is false + float scrollDuration_ = DEFAULT_TABCONTENT_ANIMATION_DURATION; + + EventMarker changeEventId_; + EventMarker domChangeEventId_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_TAB_CONTENT_COMPONENT_H diff --git a/frameworks/core/components/tab_bar/tab_content_element.cpp b/frameworks/core/components/tab_bar/tab_content_element.cpp new file mode 100644 index 00000000..414a4099 --- /dev/null +++ b/frameworks/core/components/tab_bar/tab_content_element.cpp @@ -0,0 +1,224 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/tab_bar/tab_content_element.h" + +#include + +#include "core/components/tab_bar/render_tab_content.h" + +namespace OHOS::Ace { + +TabContentElement::TabContentElement(const std::list>& contents) +{ + contents_ = contents; +} + +RefPtr TabContentElement::CreateRenderNode() +{ + RefPtr node = ComponentGroupElement::CreateRenderNode(); + RefPtr tabContent = AceType::DynamicCast(node); + if (tabContent) { + tabContent->RegisterCallback([weakTabContentElement = AceType::WeakClaim(this)](int32_t index) { + auto tabContent = weakTabContentElement.Upgrade(); + if (tabContent) { + tabContent->ChangeByContent(index); + } + }); + tabContent->RegisterRequireCallback([weakTabContentElement = AceType::WeakClaim(this)](int32_t index) { + auto tabContent = weakTabContentElement.Upgrade(); + if (tabContent) { + tabContent->PrepareContent(index); + } + }); + } + return node; +} + +void TabContentElement::UpdateLastFocusNode() +{ + if (IsCurrentFocus()) { + auto focusNode = GetCurrentFocusNode(); + if (!focusNode || !focusNode->IsFocusable()) { + LostFocus(); + itLastFocusNode_ = focusNodes_.end(); + } else { + focusNode->RequestFocusImmediately(); + } + } else { + itLastFocusNode_ = focusNodes_.end(); + } +} + +void TabContentElement::ChangeByContent(int32_t index) +{ + if (controller_) { + controller_->SetIndexByScrollContent(index); + } + lastIndex_ = index; + UpdateLastFocusNode(); +} + +void TabContentElement::ChangeByBar(int32_t index) +{ + LOGD("change content by tab bar index:%{public}d", index); + newBarIndex_ = index; + MarkDirty(); +} + +void TabContentElement::ChangeDispatch(int32_t index) +{ + LOGD("change content by tab bar index:%{public}d", index); + auto content = AceType::DynamicCast(GetRenderNode()); + if (content) { + content->FireDomChangeEvent(index); + } +} + +void TabContentElement::PrepareContent(int32_t index) +{ + LOGD("request prepareContent new index:%{public}d", index); + newIndex_ = index; + MarkDirty(); +} + +void TabContentElement::Update() +{ + ComponentGroupElement::Update(); + + if (NeedUpdate()) { + RefPtr tabContent = AceType::DynamicCast(component_); + if (!tabContent) { + LOGE("Get tabContent failed"); + return; + } + contents_ = tabContent->GetChildren(); + controller_ = tabContent->GetController(); + if (!controller_) { + LOGE("Get controller failed"); + return; + } + controller_->SetContentElement(AceType::Claim(this)); + } +} + +void TabContentElement::PerformBuild() +{ + if (contents_.empty()) { + LOGD("contents is empty"); + ComponentGroupElement::PerformBuild(); + return; + } + RefPtr tabContent = AceType::DynamicCast(renderNode_); + if (!tabContent || !controller_ || !renderNode_) { + LOGW("tabContent or controller is null."); + return; + } + + auto it = contents_.begin(); + // if have new content requested by drag, build the new child, else build current child + int32_t target = newIndex_ >= 0 ? newIndex_ : controller_->GetIndex(); + LOGD("TabContentElement::PerformBuild: target: %{public}d", target); + std::advance(it, target); + if (it == contents_.end()) { + LOGE("no content at index %{public}d.", target); + return; + } + auto childIter = childMap_.find(target); + if (childIter == childMap_.end()) { + auto newChild = UpdateChild(nullptr, *it); + focusIndexMap_.emplace(target, childMap_.size()); + childMap_.emplace(target, newChild); + auto renderChild = newChild->GetRenderNode(); + if (renderChild) { + tabContent->AddChildContent(target, renderChild); + } + renderNode_->MarkNeedLayout(); + } else if (NeedUpdate()) { + UpdateChild(childIter->second, *it); + } + + // process for new content requested by drag + if (target == newIndex_) { + tabContent->UpdateDragPosition(newIndex_); + newIndex_ = -1; + } + // process for new content requested by tab bar + if (target == newBarIndex_) { + tabContent->ChangeScroll(newBarIndex_); + UpdateLastFocusNode(); + newBarIndex_ = -1; + } + lastIndex_ = target; +} + +void TabContentElement::OnFocus() +{ + // invoke callback + FocusNode::OnFocus(); + + auto focusNode = GetCurrentFocusNode(); + if (!focusNode) { + LOGE("GetCurrentFocusNode failed"); + return; + } + + if (focusNode->RequestFocusImmediately()) { + itLastFocusNode_ = std::find(focusNodes_.begin(), focusNodes_.end(), focusNode); + } else { + LOGE("RequestFocusImmediately failed"); + } +} + +bool TabContentElement::RequestNextFocus(bool vertical, bool reverse, const Rect& rect) +{ + return false; +} + +bool TabContentElement::IsFocusable() const +{ + auto focusNode = GetCurrentFocusNode(); + if (focusNode) { + return focusNode->IsFocusable(); + } + return false; +} + +RefPtr TabContentElement::GetCurrentFocusNode() const +{ + if (!controller_) { + LOGE("controller is nullptr"); + return nullptr; + } + + auto focusIndexIter = focusIndexMap_.find(controller_->GetIndex()); + if (focusIndexIter == focusIndexMap_.end()) { + return nullptr; + } + auto pos = focusNodes_.begin(); + std::advance(pos, focusIndexIter->second); + return AceType::DynamicCast(*pos); +} + +RefPtr TabContentElement::GetTabContentChild(int32_t index) const +{ + auto childIter = childMap_.find(index); + if (childIter == childMap_.end()) { + return nullptr; + } + return childIter->second; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/tab_bar/tab_content_element.h b/frameworks/core/components/tab_bar/tab_content_element.h new file mode 100644 index 00000000..17c60aa2 --- /dev/null +++ b/frameworks/core/components/tab_bar/tab_content_element.h @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_TAB_CONTENT_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_TAB_CONTENT_ELEMENT_H + +#include +#include + +#include "core/components/tab_bar/tab_controller.h" +#include "core/focus/focus_node.h" +#include "core/pipeline/base/component_group_element.h" + +namespace OHOS::Ace { + +class TabContentElement : public ComponentGroupElement, public FocusGroup { + DECLARE_ACE_TYPE(TabContentElement, ComponentGroupElement, FocusGroup); + +public: + TabContentElement(const std::list>& contents); + ~TabContentElement() override = default; + + void PerformBuild() override; + void Update() override; + void ChangeByContent(int32_t index); + void ChangeByBar(int32_t index); + void PrepareContent(int32_t index); + void ChangeDispatch(int32_t index); + RefPtr GetTabContentChild(int32_t index) const; + + void OnFocus() override; + bool RequestNextFocus(bool vertical, bool reverse, const Rect& rect) override; + bool IsFocusable() const override; + +private: + RefPtr CreateRenderNode() override; + void UpdateLastFocusNode(); + RefPtr GetCurrentFocusNode() const; + + std::list> contents_; + std::unordered_map> childMap_; + std::unordered_map focusIndexMap_; + RefPtr controller_; + + // new content index, requested by tab bar + int32_t newBarIndex_ = -1; + // new content index, requested by drag + int32_t newIndex_ = -1; + int32_t lastIndex_ = -1; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_TAB_CONTENT_ELEMENT_H diff --git a/frameworks/core/components/tab_bar/tab_controller.cpp b/frameworks/core/components/tab_bar/tab_controller.cpp new file mode 100644 index 00000000..0754a959 --- /dev/null +++ b/frameworks/core/components/tab_bar/tab_controller.cpp @@ -0,0 +1,111 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/tab_bar/tab_controller.h" + +#include "core/components/tab_bar/tab_bar_element.h" +#include "core/components/tab_bar/tab_content_element.h" + +namespace OHOS::Ace { + +RefPtr TabController::GetController(int32_t id) +{ + return AceType::MakeRefPtr(id); +} + +TabController::TabController(int32_t id) +{ + id_ = id; +} + +void TabController::ValidateIndex(int32_t maxIndex) +{ + if (pageReady_ && index_ > maxIndex) { + index_ = 0; + if (barElement_.Upgrade()) { + auto tabBar = AceType::DynamicCast(barElement_.Upgrade()); + if (tabBar) { + tabBar->UpdateIndex(0); + } + } + } +} + +void TabController::SetPageReady(bool ready) +{ + pageReady_ = ready; +} + +void TabController::SetIndex(int32_t index) +{ + if (index_ == index) { + return; + } + + index_ = index; + if (contentElement_.Upgrade()) { + auto tabContent = AceType::DynamicCast(contentElement_.Upgrade()); + if (tabContent) { + tabContent->ChangeByBar(index); + } + } +} + +void TabController::ChangeDispatch(int32_t index) +{ + if (contentElement_.Upgrade()) { + LOGD("tab controller dispatch domChange event"); + auto tabContent = AceType::DynamicCast(contentElement_.Upgrade()); + if (tabContent) { + tabContent->ChangeDispatch(index); + } + } +} + +void TabController::SetIndexByScrollContent(int32_t index) +{ + if (index_ == index) { + return; + } + index_ = index; + if (barElement_.Upgrade()) { + auto tabBar = AceType::DynamicCast(barElement_.Upgrade()); + if (tabBar) { + tabBar->UpdateIndex(index); + } + } +} + +void TabController::SetContentElement(const RefPtr& contentElement) +{ + contentElement_ = contentElement; +} + +void TabController::SetBarElement(const RefPtr& barElement) +{ + barElement_ = barElement; +} + +int32_t TabController::GetId() const +{ + return id_; +} + +int32_t TabController::GetIndex() const +{ + return index_; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/tab_bar/tab_controller.h b/frameworks/core/components/tab_bar/tab_controller.h new file mode 100644 index 00000000..43024d75 --- /dev/null +++ b/frameworks/core/components/tab_bar/tab_controller.h @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_TAB_CONTROLLER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_TAB_CONTROLLER_H + +#include + +#include "base/memory/ace_type.h" +#include "core/event/ace_event_helper.h" +#include "core/pipeline/base/element.h" + +namespace OHOS::Ace { + +class TabController : public AceType { + DECLARE_ACE_TYPE(TabController, AceType); + +public: + explicit TabController(int32_t id); + ~TabController() override = default; + + static RefPtr GetController(int32_t id); + + void ValidateIndex(int32_t maxIndex); + void SetPageReady(bool ready); + void SetIndex(int32_t index); + void SetIndexByScrollContent(int32_t index); + int32_t GetIndex() const; + void SetContentElement(const RefPtr& contentElement); + void SetBarElement(const RefPtr& barElement); + int32_t GetId() const; + void ChangeDispatch(int32_t index); + +private: + int32_t id_ = -1; + int32_t index_ = 0; + bool pageReady_ = false; + WeakPtr contentElement_; + WeakPtr barElement_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_TAB_CONTROLLER_H diff --git a/frameworks/core/components/tab_bar/tab_theme.h b/frameworks/core/components/tab_bar/tab_theme.h new file mode 100644 index 00000000..f63da1f3 --- /dev/null +++ b/frameworks/core/components/tab_bar/tab_theme.h @@ -0,0 +1,173 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_TAB_THEME_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_TAB_THEME_H + +#include "core/components/common/properties/text_style.h" +#include "core/components/theme/theme.h" +#include "core/components/theme/theme_constants.h" + +namespace OHOS::Ace { + +/** + * TabTheme defines color and styles of tab. TabTheme should be built + * using TabTheme::Builder. + */ +class TabTheme : public virtual Theme { + DECLARE_ACE_TYPE(TabTheme, Theme); + +public: + class Builder { + public: + Builder() = default; + ~Builder() = default; + + RefPtr Build(const RefPtr& themeConstants) const + { + RefPtr theme = AceType::Claim(new TabTheme()); + if (!themeConstants) { + return theme; + } + theme->labelPadding_ = themeConstants->GetDimension(THEME_TAB_LABEL_PADDING); + theme->padding_ = themeConstants->GetDimension(THEME_TAB_PADDING); + theme->gradientWidth_ = themeConstants->GetDimension(THEME_TAB_GRADIENT_WIDTH); + theme->defaultHeight_ = themeConstants->GetDimension(THEME_TAB_DEFAULT_HEIGHT); + theme->defaultWidth_ = themeConstants->GetDimension(THEME_TAB_DEFAULT_WIDTH); + theme->defaultItemHeight_ = themeConstants->GetDimension(THEME_TAB_DEFAULT_ITEM_HEIGHT); + theme->backgroundColor_ = themeConstants->GetColor(THEME_TAB_BACKGROUND_COLOR); + theme->activeIndicatorColor_ = themeConstants->GetColor(THEME_TAB_ACTIVE_INDICATOR_COLOR); + theme->activeIndicatorWidth_ = themeConstants->GetDimension(THEME_TAB_ACTIVE_INDICATOR_WIDTH); + theme->activeIndicatorMinWidth_ = themeConstants->GetDimension(THEME_TAB_ACTIVE_INDICATOR_MIN_WIDTH); + theme->activeIndicatorPadding_ = themeConstants->GetDimension(THEME_TAB_ACTIVE_INDICATOR_PADDING); + theme->focusIndicatorColor_ = themeConstants->GetColor(THEME_TAB_FOCUS_INDICATOR_COLOR); + theme->focusIndicatorRadius_ = themeConstants->GetDimension(THEME_TAB_FOCUS_INDICATOR_RADIUS); + theme->focusIndicatorHorizontalPadding_ = + themeConstants->GetDimension(THEME_TAB_FOCUS_INDICATOR_HORIZONTAL_PADDING); + theme->focusIndicatorVerticalPadding_ = + themeConstants->GetDimension(THEME_TAB_FOCUS_INDICATOR_VERTICAL_PADDING); + auto themeStyle = themeConstants->GetThemeStyle(); + if (!themeStyle) { + return theme; + } + theme->backgroundColor_ = themeStyle->GetAttr(THEME_ATTR_COLOR_TAB_BACKGROUND, Color::WHITE); + theme->activeIndicatorColor_ = themeStyle->GetAttr(THEME_ATTR_COLOR_SUBTAB_LINE_ON, Color::WHITE); + theme->focusIndicatorColor_ = themeStyle->GetAttr(THEME_ATTR_COLOR_SUBTAB_LINE_ON, Color::WHITE); + theme->focusIndicatorRadius_ = themeStyle->GetAttr(THEME_ATTR_CLICK_CORNER_RADIUS, 0.0_vp); + return theme; + } + }; + + ~TabTheme() override = default; + + const Dimension& GetLabelPadding() const + { + return labelPadding_; + } + + const Dimension& GetPadding() const + { + return padding_; + } + + const Dimension& GetGradientWidth() const + { + return gradientWidth_; + } + + const Dimension& GetDefaultHeight() const + { + return defaultHeight_; + } + + const Dimension& GetDefaultWidth() const + { + return defaultWidth_; + } + + const Dimension& GetDefaultItemHeight() const + { + return defaultItemHeight_; + } + + const Color& GetBackgroundColor() const + { + return backgroundColor_; + } + + const Color& GetActiveIndicatorColor() const + { + return activeIndicatorColor_; + } + + const Dimension& GetActiveIndicatorWidth() const + { + return activeIndicatorWidth_; + } + + const Dimension& GetActiveIndicatorMinWidth_() const + { + return activeIndicatorMinWidth_; + } + + const Dimension& GetActiveIndicatorPadding() const + { + return activeIndicatorPadding_; + } + + const Color& GetFocusIndicatorColor() const + { + return focusIndicatorColor_; + } + + const Dimension& GetFocusIndicatorRadius() const + { + return focusIndicatorRadius_; + } + + const Dimension& GetFocusIndicatorHorizontalPadding() const + { + return focusIndicatorHorizontalPadding_; + } + + const Dimension& GetFocusIndicatorVerticalPadding() const + { + return focusIndicatorVerticalPadding_; + } + +protected: + TabTheme() = default; + +private: + Dimension labelPadding_; + Dimension padding_; + Dimension gradientWidth_; + Dimension defaultHeight_; + Dimension defaultWidth_; + Dimension defaultItemHeight_; + Color backgroundColor_; + Color activeIndicatorColor_; + Dimension activeIndicatorWidth_; + Dimension activeIndicatorMinWidth_; + Dimension activeIndicatorPadding_; + Color focusIndicatorColor_; + Dimension focusIndicatorRadius_; + Dimension focusIndicatorHorizontalPadding_; + Dimension focusIndicatorVerticalPadding_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TAB_BAR_TAB_THEME_H diff --git a/frameworks/core/components/test/BUILD.gn b/frameworks/core/components/test/BUILD.gn new file mode 100644 index 00000000..adf4c03c --- /dev/null +++ b/frameworks/core/components/test/BUILD.gn @@ -0,0 +1,107 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +ohos_source_set("json") { + defines = ace_ohos_defines + defines += ace_common_defines + if (is_wearable_product) { + defines += ace_wearable_defines + } + include_dirs = [ + ".", + "//foundation/ace/ace_engine", + "$ace_root/frameworks", + "$root_out_dir/ace/framework", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/core:ace_core_ohos", + ] + + sources = [ + "json/align_creator.cpp", + "json/background_image_creator.cpp", + "json/border_creator.cpp", + "json/border_edge_creator.cpp", + "json/box_creator.cpp", + "json/button_creator.cpp", + "json/checkable_creator.cpp", + "json/clip_creator.cpp", + "json/color_creator.cpp", + "json/component_factory.cpp", + "json/compose_creator.cpp", + "json/decoration_creator.cpp", + "json/dialog_creator.cpp", + "json/display_creator.cpp", + "json/divider_creator.cpp", + "json/edge_creator.cpp", + "json/flex_creator.cpp", + "json/flex_item_creator.cpp", + "json/focusable_creator.cpp", + "json/gesture_listener_creator.cpp", + "json/gradient_creator.cpp", + "json/grid_creator.cpp", + "json/grid_item_creator.cpp", + "json/grid_layout_creator.cpp", + "json/grid_layout_item_creator.cpp", + "json/image_creator.cpp", + "json/json_frontend.cpp", + "json/list_creator.cpp", + "json/list_item_creator.cpp", + "json/loading_progress_creator.cpp", + "json/offset_creator.cpp", + "json/padding_creator.cpp", + "json/positioned_creator.cpp", + "json/progress_creator.cpp", + "json/radius_creator.cpp", + "json/scroll_creator.cpp", + "json/shadow_creator.cpp", + "json/slider_creator.cpp", + "json/stack_creator.cpp", + "json/swiper_creator.cpp", + "json/text_creator.cpp", + "json/text_span_creator.cpp", + "json/text_style_creator.cpp", + "json/touch_listener_creator.cpp", + "json/transform_creator.cpp", + "json/tween_creator.cpp", + "json/tween_option_creator.cpp", + "json/wrap_creator.cpp", + ] + + if (!is_wearable_product) { + sources += [ + "json/marquee_creator.cpp", + "json/popup_creator.cpp", + "json/rating_creator.cpp", + "json/select_creator.cpp", + "json/tab_bar_creator.cpp", + "json/tab_content_creator.cpp", + "json/text_field_creator.cpp", + "json/texture_creator.cpp", + "json/video_creator.cpp", + ] + } +} + +group("unittest") { + testonly = true + deps = [ ":json" ] + + deps += [ "unittest:unittest" ] +} diff --git a/frameworks/core/components/test/json/align_creator.cpp b/frameworks/core/components/test/json/align_creator.cpp new file mode 100644 index 00000000..9f845a44 --- /dev/null +++ b/frameworks/core/components/test/json/align_creator.cpp @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/align_creator.h" + +#include + +#include "base/log/log.h" +#include "core/components/align/align_component.h" +#include "core/components/common/properties/alignment.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { +namespace { + +const std::map ALIGN_VALUE_MAP_HORIZONTAL = { { HORIZONTAL_VALUE_LEFT, -1.0 }, + { HORIZONTAL_VALUE_CENTER, 0.0 }, { HORIZONTAL_VALUE_RIGHT, 1.0 } }; +const std::map ALIGN_VALUE_MAP_VERTICAL = { { VERTICAL_VALUE_TOP, -1.0 }, + { VERTICAL_VALUE_CENTER, 0.0 }, { VERTICAL_VALUE_BOTTOM, 1.0 } }; + +} // namespace + +RefPtr AlignCreator::CreateFromJson(const JsonValue& componentJson, const JsonComponentFactory& factory) +{ + LOGD("CreateFromJson Align"); + std::string classType = componentJson.GetValue(CLASS_NAME)->GetString(); + if (classType != ALIGN_NAME) { + LOGE("Create Align err: not an align json."); + return nullptr; + } + auto children = factory.CreateChildComponent(componentJson); + auto alignment = GetAlignmentFromJson(componentJson); + return AceType::MakeRefPtr(children, alignment); +} + +Alignment AlignCreator::GetAlignmentFromJson(const JsonValue& componentJson) +{ + std::string horizontal = HORIZONTAL_VALUE_CENTER; + std::string vertical = VERTICAL_VALUE_CENTER; + horizontal = componentJson.GetString(HORIZONTAL); + vertical = componentJson.GetString(VERTICAL); + auto horizontalIter = ALIGN_VALUE_MAP_HORIZONTAL.find(horizontal); + auto verticalIter = ALIGN_VALUE_MAP_VERTICAL.find(vertical); + double dx = (horizontalIter == ALIGN_VALUE_MAP_HORIZONTAL.end()) ? 0.0 : horizontalIter->second; + double dy = (verticalIter == ALIGN_VALUE_MAP_VERTICAL.end()) ? 0.0 : verticalIter->second; + return Alignment(dx, dy); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/json/align_creator.h b/frameworks/core/components/test/json/align_creator.h new file mode 100644 index 00000000..391ef668 --- /dev/null +++ b/frameworks/core/components/test/json/align_creator.h @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_ALIGN_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_ALIGN_CREATOR_H + +#include "base/json/json_util.h" +#include "core/components/align/align_component.h" +#include "core/components/common/properties/alignment.h" +#include "core/components/test/json/component_factory.h" +#include "core/pipeline/base/component.h" + +namespace OHOS::Ace { + +// creator for create align component. +class AlignCreator { +public: + static RefPtr CreateFromJson(const JsonValue& json, const JsonComponentFactory& factory); + static Alignment GetAlignmentFromJson(const JsonValue& componentJson); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_ALIGN_CREATOR_H diff --git a/frameworks/core/components/test/json/background_image_creator.cpp b/frameworks/core/components/test/json/background_image_creator.cpp new file mode 100644 index 00000000..d2a85778 --- /dev/null +++ b/frameworks/core/components/test/json/background_image_creator.cpp @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/background_image_creator.h" + +#include "base/log/log.h" +#include "base/utils/utils.h" +#include "core/components/common/layout/constants.h" +#include "core/components/common/properties/alignment.h" +#include "core/components/test/json/align_creator.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { +namespace { + +const BackgroundImageSizeType IMAGE_SIZE_TYPES[] = { BackgroundImageSizeType::CONTAIN, BackgroundImageSizeType::COVER, + BackgroundImageSizeType::AUTO, BackgroundImageSizeType::LENGTH, BackgroundImageSizeType::PERCENT }; +const BackgroundImagePositionType IMAGE_POSITION_TYPE[] = { BackgroundImagePositionType::PERCENT, + BackgroundImagePositionType::PX }; + +} // namespace + +RefPtr BackgroundImageCreator::CreateFromJson(const JsonValue& json) +{ + LOGD("BackgroundImage creator"); + std::string classType = json.GetValue(CLASS_NAME)->GetString(); + if (classType != BACKGROUND_IMAGE_NAME) { + LOGE("Create BackgroundImage err: not a BackgroundImage json."); + return nullptr; + } + + if (!json.Contains(BACKGROUND_SRC) || !json.GetValue(BACKGROUND_SRC)->IsString()) { + LOGE("Missing src for image."); + return nullptr; + } + std::string src = json.GetValue(BACKGROUND_SRC)->GetString(); + RefPtr backgroundImage = AceType::MakeRefPtr(src); + if (json.Contains(IMAGE_REPEAT) && json.GetValue(IMAGE_REPEAT)->IsNumber()) { + backgroundImage->SetImageRepeat( + ConvertIntToEnum(json.GetValue(IMAGE_REPEAT)->GetInt(), IMAGE_REPEATS, ImageRepeat::NOREPEAT)); + } + if (json.Contains(IMAGE_SIZE) && json.GetValue(IMAGE_SIZE)->IsObject()) { + auto imageSizeJson = json.GetValue(IMAGE_SIZE); + SetImageSizeFromJson(backgroundImage, *imageSizeJson); + } + if (json.Contains(IMAGE_POSITION) && json.GetValue(IMAGE_POSITION)->IsObject()) { + auto imagePositionJson = json.GetValue(IMAGE_POSITION); + SetImagePositionFromJson(backgroundImage, *imagePositionJson); + } + return backgroundImage; +} + +void BackgroundImageCreator::SetImageSizeFromJson(RefPtr& backgroundImage, const JsonValue& json) +{ + double value = json.GetDouble(IMAGE_SIZE_VALUE, FULL_IMG_SIZE); + BackgroundImageSizeType type = + ConvertIntToEnum(json.GetValue(IMAGE_SIZE_TYPE)->GetInt(), IMAGE_SIZE_TYPES, BackgroundImageSizeType::PERCENT); + backgroundImage->SetImageSize(type, value); +} + +void BackgroundImageCreator::SetImagePositionFromJson(RefPtr& backgroundImage, const JsonValue& json) +{ + if (json.Contains(IMAGE_POSITION) && json.GetValue(IMAGE_POSITION)->IsObject()) { + BackgroundImagePositionType typeX = ConvertIntToEnum( + json.GetValue(IMAGE_POSITION_SIZE_X)->GetInt(), IMAGE_POSITION_TYPE, BackgroundImagePositionType::PERCENT); + double valueX = json.GetDouble(IMAGE_POSITION_VALUE_X, CENTER_OFFSET); + BackgroundImagePositionType typeY = ConvertIntToEnum( + json.GetValue(IMAGE_POSITION_SIZE_Y)->GetInt(), IMAGE_POSITION_TYPE, BackgroundImagePositionType::PERCENT); + double valueY = json.GetDouble(IMAGE_POSITION_VALUE_Y, CENTER_OFFSET); + backgroundImage->SetImagePosition(typeX, valueX, typeY, valueY); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/json/background_image_creator.h b/frameworks/core/components/test/json/background_image_creator.h new file mode 100644 index 00000000..e77adddd --- /dev/null +++ b/frameworks/core/components/test/json/background_image_creator.h @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_BACKGROUND_IMAGE_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_BACKGROUND_IMAGE_CREATOR_H + +#include "base/json/json_util.h" +#include "core/components/common/properties/decoration.h" + +namespace OHOS::Ace { + +// backgroundImage creator +class BackgroundImageCreator final { +public: + static RefPtr CreateFromJson(const JsonValue& json); + +private: + static void SetImageSizeFromJson(RefPtr& backgroundImage, const JsonValue& json); + static void SetImagePositionFromJson(RefPtr& backgroundImage, const JsonValue& json); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_BACKGROUND_IMAGE_CREATOR_H diff --git a/frameworks/core/components/test/json/base/component_factory.h b/frameworks/core/components/test/json/base/component_factory.h new file mode 100644 index 00000000..74b85759 --- /dev/null +++ b/frameworks/core/components/test/json/base/component_factory.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_BASE_COMPONENT_FACTORY_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_BASE_COMPONENT_FACTORY_H + +#include +#include + +#include "base/memory/referenced.h" +#include "core/pipeline/base/component.h" + +namespace OHOS::Ace { + +// ComponentFactory is for create a Component using dsl data. +class ComponentFactory { +public: + virtual ~ComponentFactory() = default; + virtual RefPtr CreateComponentFromDsl(const uint8_t* dslBuf, size_t dslLen) = 0; + virtual std::list> CreateComponentsFromDsl(const uint8_t* dslBuf, size_t dslLen) = 0; + + static ComponentFactory& GetInstance(); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_BASE_COMPONENT_FACTORY_H diff --git a/frameworks/core/components/test/json/border_creator.cpp b/frameworks/core/components/test/json/border_creator.cpp new file mode 100644 index 00000000..d2bb990c --- /dev/null +++ b/frameworks/core/components/test/json/border_creator.cpp @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/border_creator.h" + +#include "base/log/log.h" +#include "base/utils/utils.h" +#include "core/components/common/properties/border_edge.h" +#include "core/components/test/json/border_edge_creator.h" +#include "core/components/test/json/radius_creator.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { + +std::unique_ptr BorderCreator::CreateFromJson(const JsonValue& json) +{ + LOGD("CreateFromJson Border"); + std::string classType = json.GetValue(CLASS_NAME)->GetString(); + if (classType != BORDER_NAME) { + LOGE("Create border err: not a border json."); + return nullptr; + } + if (json.Contains(BORDER_VALUE) && json.GetValue(BORDER_VALUE)->IsObject()) { + auto borderEdgeJson = json.GetValue(BORDER_VALUE); + auto border = std::make_unique(BorderEdgeCreator::CreateFromJson(*borderEdgeJson)); + UpdateRadiusFromJson(border, json); + return border; + } + BorderEdge left; + if (json.Contains(BORDER_LEFT) && json.GetValue(BORDER_LEFT)->IsObject()) { + auto leftJson = json.GetValue(BORDER_LEFT); + left = BorderEdgeCreator::CreateFromJson(*leftJson); + } + BorderEdge top; + if (json.Contains(BORDER_TOP) && json.GetValue(BORDER_TOP)->IsObject()) { + auto topJson = json.GetValue(BORDER_TOP); + top = BorderEdgeCreator::CreateFromJson(*topJson); + } + BorderEdge right; + if (json.Contains(BORDER_RIGHT) && json.GetValue(BORDER_RIGHT)->IsObject()) { + auto rightJson = json.GetValue(BORDER_RIGHT); + right = BorderEdgeCreator::CreateFromJson(*rightJson); + } + BorderEdge bottom; + if (json.Contains(BORDER_BOTTOM) && json.GetValue(BORDER_BOTTOM)->IsObject()) { + auto bottomJson = json.GetValue(BORDER_BOTTOM); + bottom = BorderEdgeCreator::CreateFromJson(*bottomJson); + } + auto border = std::make_unique(left, top, right, bottom); + UpdateRadiusFromJson(border, json); + return border; +} + +void BorderCreator::UpdateRadiusFromJson(const std::unique_ptr& border, const JsonValue& json) +{ + if (json.Contains(BORDER_RADIUS_VALUE) && json.GetValue(BORDER_RADIUS_VALUE)->IsObject()) { + auto radiusJson = json.GetValue(BORDER_RADIUS_VALUE); + border->SetBorderRadius(RadiusCreator::CreateFromJson(*radiusJson)); + return; + } + if (json.Contains(BORDER_TOP_LEFT) && json.GetValue(BORDER_TOP_LEFT)->IsObject()) { + auto topLeftJson = json.GetValue(BORDER_TOP_LEFT); + border->SetTopLeftRadius(RadiusCreator::CreateFromJson(*topLeftJson)); + } + if (json.Contains(BORDER_TOP_RIGHT) && json.GetValue(BORDER_TOP_RIGHT)->IsObject()) { + auto topRightJson = json.GetValue(BORDER_TOP_RIGHT); + border->SetTopRightRadius(RadiusCreator::CreateFromJson(*topRightJson)); + } + if (json.Contains(BORDER_BOTTOM_LEFT) && json.GetValue(BORDER_BOTTOM_LEFT)->IsObject()) { + auto bottomLeftJson = json.GetValue(BORDER_BOTTOM_LEFT); + border->SetBottomLeftRadius(RadiusCreator::CreateFromJson(*bottomLeftJson)); + } + if (json.Contains(BORDER_BOTTOM_RIGHT) && json.GetValue(BORDER_BOTTOM_RIGHT)->IsObject()) { + auto bottomRightJson = json.GetValue(BORDER_BOTTOM_RIGHT); + border->SetBottomRightRadius(RadiusCreator::CreateFromJson(*bottomRightJson)); + } +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/json/border_creator.h b/frameworks/core/components/test/json/border_creator.h new file mode 100644 index 00000000..04ca0cf0 --- /dev/null +++ b/frameworks/core/components/test/json/border_creator.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_BORDER_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_BORDER_CREATOR_H + +#include "base/json/json_util.h" +#include "core/components/common/properties/border.h" + +namespace OHOS::Ace { + +// Creator for creating Border property from json. +class BorderCreator final { +public: + static std::unique_ptr CreateFromJson(const JsonValue& json); + +private: + static void UpdateRadiusFromJson(const std::unique_ptr& border, const JsonValue& json); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_BORDER_CREATOR_H diff --git a/frameworks/core/components/test/json/border_edge_creator.cpp b/frameworks/core/components/test/json/border_edge_creator.cpp new file mode 100644 index 00000000..2ba10a8b --- /dev/null +++ b/frameworks/core/components/test/json/border_edge_creator.cpp @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/border_edge_creator.h" + +#include + +#include "base/log/log.h" +#include "core/components/test/json/color_creator.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { + +BorderEdge BorderEdgeCreator::CreateFromJson(const JsonValue& json) +{ + LOGD("CreateFromJson BorderEdge"); + std::string classType = json.GetValue(CLASS_NAME)->GetString(); + if (classType != BORDER_EDGE_NAME) { + LOGE("Create borderEdge err: not a borderEdge json."); + return BorderEdge(); + } + Color color; + if (json.Contains(BORDER_EDGE_COLOR) && json.GetValue(BORDER_EDGE_COLOR)->IsObject()) { + auto colorJson = json.GetValue(BORDER_EDGE_COLOR); + color = ColorCreator::CreateFromJson(*colorJson); + } + double width = 0.0; + if (json.Contains(BORDER_EDGE_WIDTH) && json.GetValue(BORDER_EDGE_WIDTH)->IsNumber()) { + width = std::max(json.GetValue(BORDER_EDGE_WIDTH)->GetDouble(), 0.0); + } + BorderStyle style = BorderStyle::NONE; + if (json.Contains(BORDER_EDGE_STYLE) && json.GetValue(BORDER_EDGE_STYLE)->IsString()) { + auto styleStr = json.GetValue(BORDER_EDGE_STYLE)->GetString(); + style = BorderEdgeCreator::ConvertStrToBorderStyle(styleStr); + } + return BorderEdge(color, Dimension(width, DimensionUnit::PX), style); +} + +BorderStyle BorderEdgeCreator::ConvertStrToBorderStyle(const std::string& styleStr) +{ + BorderStyle style; + if (styleStr == "solid") { + style = BorderStyle::SOLID; + } else if (styleStr == "dashed") { + style = BorderStyle::DASHED; + } else if (styleStr == "dotted") { + style = BorderStyle::DOTTED; + } else if (styleStr == "none") { + style = BorderStyle::NONE; + } else { + style = BorderStyle::SOLID; + } + return style; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/json/border_edge_creator.h b/frameworks/core/components/test/json/border_edge_creator.h new file mode 100644 index 00000000..ac5b9e8d --- /dev/null +++ b/frameworks/core/components/test/json/border_edge_creator.h @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_BORDER_EDGE_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_BORDER_EDGE_CREATOR_H + +#include "base/json/json_util.h" +#include "core/components/common/layout/constants.h" +#include "core/components/common/properties/border_edge.h" + +namespace OHOS::Ace { + +// Creator for creating BorderEdge property from json. +class BorderEdgeCreator final { +public: + static BorderEdge CreateFromJson(const JsonValue& json); + +private: + static BorderStyle ConvertStrToBorderStyle(const std::string& styleStr); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_BORDER_EDGE_CREATOR_H diff --git a/frameworks/core/components/test/json/box_creator.cpp b/frameworks/core/components/test/json/box_creator.cpp new file mode 100644 index 00000000..1848448a --- /dev/null +++ b/frameworks/core/components/test/json/box_creator.cpp @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/box_creator.h" + +#include "base/log/log.h" +#include "core/components/box/box_component.h" +#include "core/components/test/json/align_creator.h" +#include "core/components/test/json/color_creator.h" +#include "core/components/test/json/decoration_creator.h" +#include "core/components/test/json/edge_creator.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { + +RefPtr BoxCreator::CreateFromJson(const JsonValue& componentJson, const JsonComponentFactory& factory) +{ + LOGD("CreateFromJson box"); + std::string classType = componentJson.GetValue(CLASS_NAME)->GetString(); + if (classType != BOX_NAME) { + LOGE("Create BoxComponent err: not a box json."); + return nullptr; + } + + auto boxComponent = AceType::MakeRefPtr(); + if (componentJson.Contains(CHILD) && componentJson.GetValue(CHILD)->IsObject()) { + auto childJson = componentJson.GetValue(CHILD); + auto child = factory.CreateComponent(*childJson); + boxComponent->SetChild(child); + } + if (componentJson.Contains(ALIGN) && componentJson.GetValue(ALIGN)->IsObject()) { + auto alignmentJson = componentJson.GetValue(ALIGN); + auto alignment = AlignCreator::GetAlignmentFromJson(*alignmentJson); + boxComponent->SetAlignment(alignment); + } + if (componentJson.Contains(BOX_BACK_DECORATION) && componentJson.GetValue(BOX_BACK_DECORATION)->IsObject()) { + auto backDecorationJson = componentJson.GetValue(BOX_BACK_DECORATION); + auto decoration = DecorationCreator::CreateFromJson(*backDecorationJson); + boxComponent->SetBackDecoration(decoration); + } + if (componentJson.Contains(BOX_FRONT_DECORATION) && componentJson.GetValue(BOX_FRONT_DECORATION)->IsObject()) { + auto frondDecorationJson = componentJson.GetValue(BOX_FRONT_DECORATION); + auto decoration = DecorationCreator::CreateFromJson(*frondDecorationJson); + boxComponent->SetFrontDecoration(decoration); + } + if (componentJson.Contains(MARGIN) && componentJson.GetValue(MARGIN)->IsObject()) { + auto marginJson = componentJson.GetValue(MARGIN); + auto margin = EdgeCreator::CreateFromJson(*marginJson); + boxComponent->SetMargin(margin); + } + if (componentJson.Contains(PADDING) && componentJson.GetValue(PADDING)->IsObject()) { + auto paddingJson = componentJson.GetValue(PADDING); + auto padding = EdgeCreator::CreateFromJson(*paddingJson); + boxComponent->SetPadding(padding); + } + if (componentJson.Contains(WIDTH) && componentJson.GetValue(WIDTH)->IsNumber()) { + double width = componentJson.GetValue(WIDTH)->GetDouble(); + boxComponent->SetWidth(width); + } + if (componentJson.Contains(HEIGHT) && componentJson.GetValue(HEIGHT)->IsNumber()) { + double height = componentJson.GetValue(HEIGHT)->GetDouble(); + boxComponent->SetHeight(height); + } + if (componentJson.Contains(COLOR) && componentJson.GetValue(COLOR)->IsObject()) { + auto colorJson = componentJson.GetValue(COLOR); + auto color = ColorCreator::CreateFromJson(*colorJson); + boxComponent->SetColor(color); + } + + return boxComponent; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/json/box_creator.h b/frameworks/core/components/test/json/box_creator.h new file mode 100644 index 00000000..5e389a6e --- /dev/null +++ b/frameworks/core/components/test/json/box_creator.h @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_BOX_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_BOX_CREATOR_H + +#include "base/utils/utils.h" +#include "core/components/test/json/component_factory.h" +#include "core/pipeline/base/component.h" + +namespace OHOS::Ace { + +// creator for create box component. +class BoxCreator { +public: + static RefPtr CreateFromJson(const JsonValue& json, const JsonComponentFactory& factory); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_BOX_CREATOR_H diff --git a/frameworks/core/components/test/json/button_creator.cpp b/frameworks/core/components/test/json/button_creator.cpp new file mode 100644 index 00000000..6239c287 --- /dev/null +++ b/frameworks/core/components/test/json/button_creator.cpp @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/button_creator.h" + +#include "core/components/button/button_component.h" +#include "core/components/test/json/border_edge_creator.h" +#include "core/components/test/json/color_creator.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { +namespace { + +const ButtonType TYPES[] = { ButtonType::NORMAL, ButtonType::CAPSULE, ButtonType::CIRCLE, ButtonType::TEXT, + ButtonType::ARC, ButtonType::DOWNLOAD, ButtonType::ICON }; + +Color GetColorFromJson(const JsonValue& componentJson, std::string color) +{ + if (componentJson.Contains(color) && componentJson.GetValue(color)->IsObject()) { + auto colorJson = componentJson.GetValue(color); + auto defColor = ColorCreator::CreateFromJson(*colorJson); + return defColor; + } + return Color(); +} + +} // namespace + +RefPtr ButtonCreator::CreateFromJson(const JsonValue& componentJson, const JsonComponentFactory& factory) +{ + LOGD("CreateFromJson button"); + std::string classType = componentJson.GetValue(CLASS_NAME)->GetString(); + if (classType != BUTTON_NAME) { + LOGE("Create button err: not a button json."); + return nullptr; + } + auto children = factory.CreateChildComponent(componentJson); + auto button = AceType::MakeRefPtr(children); + if (componentJson.Contains(BUTTON_TYPE) && componentJson.GetValue(BUTTON_TYPE)->IsNumber()) { + button->SetType(ConvertIntToEnum(componentJson.GetValue(BUTTON_TYPE)->GetInt(), TYPES, ButtonType::NORMAL)); + } + if (componentJson.Contains(BUTTON_DISABLED_STATE) && componentJson.GetValue(BUTTON_DISABLED_STATE)->IsNumber()) { + button->SetDisabledState(componentJson.GetValue(BUTTON_DISABLED_STATE)->GetInt()); + } + if (componentJson.Contains(BUTTON_AUTO_FOCUS) && componentJson.GetValue(BUTTON_AUTO_FOCUS)->IsNumber()) { + button->SetAutoFocusState(componentJson.GetValue(BUTTON_AUTO_FOCUS)->GetInt()); + } + if (componentJson.Contains(BUTTON_HEIGHT) && componentJson.GetValue(BUTTON_HEIGHT)->IsNumber()) { + button->SetHeight(Dimension(componentJson.GetValue(BUTTON_HEIGHT)->GetDouble())); + } + if (componentJson.Contains(BUTTON_WIDTH) && componentJson.GetValue(BUTTON_WIDTH)->IsNumber()) { + button->SetWidth(Dimension(componentJson.GetValue(BUTTON_WIDTH)->GetDouble())); + } + if (componentJson.Contains(BUTTON_RECT_RADIUS) && componentJson.GetValue(BUTTON_RECT_RADIUS)->IsNumber()) { + button->SetRectRadius(Dimension(componentJson.GetValue(BUTTON_RECT_RADIUS)->GetDouble())); + } + if (componentJson.Contains(BUTTON_CLICKED_EVENT_ID) && + componentJson.GetValue(BUTTON_CLICKED_EVENT_ID)->IsString()) { + auto eventId = componentJson.GetValue(BUTTON_CLICKED_EVENT_ID)->GetString(); + button->SetClickedEventId(EventMarker(eventId)); + } + if (componentJson.Contains(BUTTON_BORDER) && componentJson.GetValue(BUTTON_BORDER)->IsObject()) { + auto borderJson = componentJson.GetValue(BUTTON_BORDER); + auto borderEdge = BorderEdgeCreator::CreateFromJson(*borderJson); + button->SetBorderEdge(borderEdge); + } + button->SetBackgroundColor(GetColorFromJson(componentJson, BUTTON_BACKGROUND_COLOR)); + button->SetClickedColor(GetColorFromJson(componentJson, BUTTON_CLICKED_COLOR)); + button->SetDisabledColor(GetColorFromJson(componentJson, BUTTON_DISABLED_COLOR)); + button->SetFocusColor(GetColorFromJson(componentJson, BUTTON_FOCUS_COLOR)); + return button; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/json/button_creator.h b/frameworks/core/components/test/json/button_creator.h new file mode 100644 index 00000000..953516d0 --- /dev/null +++ b/frameworks/core/components/test/json/button_creator.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_BUTTON_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_BUTTON_CREATOR_H + +#include "base/json/json_util.h" +#include "core/components/test/json/component_factory.h" +#include "core/pipeline/base/component.h" + +namespace OHOS::Ace { + +class ButtonCreator { +public: + static RefPtr CreateFromJson(const JsonValue& json, const JsonComponentFactory& factory); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_BUTTON_CREATOR_H diff --git a/frameworks/core/components/test/json/checkable_creator.cpp b/frameworks/core/components/test/json/checkable_creator.cpp new file mode 100644 index 00000000..705006ba --- /dev/null +++ b/frameworks/core/components/test/json/checkable_creator.cpp @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/checkable_creator.h" + +#include "core/components/checkable/checkable_component.h" +#include "core/components/test/json/color_creator.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { +namespace { + +void ParseProperty(const JsonValue& componentJson, const RefPtr& component) +{ + if (componentJson.Contains(CHECKABLE_ON_CHANGED_EVENT) && + componentJson.GetValue(CHECKABLE_ON_CHANGED_EVENT)->IsString()) { + auto onChanged = componentJson.GetValue(CHECKABLE_VALUE)->GetString(); + component->SetChangeEvent(EventMarker(onChanged)); + } + + if (componentJson.Contains(WIDTH) && componentJson.GetValue(WIDTH)->IsNumber()) { + component->SetWidth(Dimension(componentJson.GetValue(WIDTH)->GetDouble(), DimensionUnit::PX)); + } + if (componentJson.Contains(HEIGHT) && componentJson.GetValue(HEIGHT)->IsNumber()) { + component->SetHeight(Dimension(componentJson.GetValue(HEIGHT)->GetDouble(), DimensionUnit::PX)); + } + if (componentJson.Contains(DISABLED) && componentJson.GetValue(DISABLED)->IsBool()) { + component->SetDisabled(componentJson.GetValue(DISABLED)->GetBool()); + } + auto pointColorJson = componentJson.GetValue(CHECKABLE_POINT_COLOR); + if (pointColorJson && pointColorJson->IsObject()) { + component->SetPointColor(ColorCreator::CreateFromJson(*pointColorJson)); + } + auto activeColorJson = componentJson.GetValue(CHECKABLE_ACTIVE_COLOR); + if (activeColorJson && activeColorJson->IsObject()) { + component->SetActiveColor(ColorCreator::CreateFromJson(*activeColorJson)); + } + auto inactiveColorJson = componentJson.GetValue(CHECKABLE_INACTIVE_COLOR); + if (inactiveColorJson && inactiveColorJson->IsObject()) { + component->SetInactiveColor(ColorCreator::CreateFromJson(*inactiveColorJson)); + } + auto focusColorJson = componentJson.GetValue(CHECKABLE_FOCUS_COLOR); + if (focusColorJson && focusColorJson->IsObject()) { + component->SetFocusColor(ColorCreator::CreateFromJson(*focusColorJson)); + } + if (componentJson.Contains(CHECKABLE_ON_CHANGED_EVENT) && + componentJson.GetValue(CHECKABLE_ON_CHANGED_EVENT)->IsString()) { + EventMarker eventMarker(componentJson.GetValue(CHECKABLE_ON_CHANGED_EVENT)->GetString()); + component->SetChangeEvent(eventMarker); + } +} + +} // namespace + +RefPtr CheckableCreator::CreateFromJson(const JsonValue& componentJson, const JsonComponentFactory& factory) +{ + LOGD("CreateFromJson checkable"); + std::string classType = componentJson.GetValue(CLASS_NAME)->GetString(); + auto themeManager = AceType::MakeRefPtr(); + if (classType == CHECKBOX_NAME) { + RefPtr theme = + AceType::DynamicCast(themeManager->GetTheme(CheckboxTheme::TypeId())); + RefPtr component = AceType::MakeRefPtr(theme); + if (componentJson.Contains(CHECKABLE_VALUE) && componentJson.GetValue(CHECKABLE_VALUE)->IsBool()) { + component->SetValue(componentJson.GetValue(CHECKABLE_VALUE)->GetBool()); + } + ParseProperty(componentJson, component); + return component; + } else if (classType == SWITCH_NAME) { + RefPtr theme = + AceType::DynamicCast(themeManager->GetTheme(SwitchTheme::TypeId())); + RefPtr component = AceType::MakeRefPtr(theme); + if (componentJson.Contains(CHECKABLE_VALUE) && componentJson.GetValue(CHECKABLE_VALUE)->IsBool()) { + component->SetValue(componentJson.GetValue(CHECKABLE_VALUE)->GetBool()); + } + ParseProperty(componentJson, AceType::DynamicCast(component)); + return component; + } else if (classType == RADIO_NAME) { + RefPtr theme = + AceType::DynamicCast(themeManager->GetTheme(RadioTheme::TypeId())); + RefPtr> component = AceType::MakeRefPtr>(theme); + if (componentJson.Contains(CHECKABLE_VALUE) && componentJson.GetValue(CHECKABLE_VALUE)->IsString()) { + component->SetValue(componentJson.GetValue(CHECKABLE_VALUE)->GetString()); + } + if (componentJson.Contains(RADIO_GROUP_VALUE) && componentJson.GetValue(RADIO_GROUP_VALUE)->IsString()) { + component->SetGroupValue(componentJson.GetValue(RADIO_GROUP_VALUE)->GetString()); + } + ParseProperty(componentJson, component); + return component; + } else { + LOGD("unknown class name: %{public}s", classType.c_str()); + return nullptr; + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/json/checkable_creator.h b/frameworks/core/components/test/json/checkable_creator.h new file mode 100644 index 00000000..3eb24e74 --- /dev/null +++ b/frameworks/core/components/test/json/checkable_creator.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_CHECKABLE_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_CHECKABLE_CREATOR_H + +#include "core/components/test/json/component_factory.h" + +namespace OHOS::Ace { + +class CheckableCreator { +public: + static RefPtr CreateFromJson(const JsonValue& json, const JsonComponentFactory& factory); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_CHECKABLE_CREATOR_H diff --git a/frameworks/core/components/test/json/clip_creator.cpp b/frameworks/core/components/test/json/clip_creator.cpp new file mode 100644 index 00000000..aa144fc3 --- /dev/null +++ b/frameworks/core/components/test/json/clip_creator.cpp @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/clip_creator.h" + +#include "base/log/log.h" +#include "core/components/clip/clip_component.h" +#include "core/components/test/json/radius_creator.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { + +RefPtr ClipCreator::CreateFromJson(const JsonValue& json, const JsonComponentFactory& factory) +{ + auto children = factory.CreateChildComponent(json); + auto child = children.empty() ? nullptr : children.front(); + auto clip = AceType::MakeRefPtr(child); + clip->SetTopLeftRadius(CreateRadiusFromJson(json, BORDER_TOP_LEFT)); + clip->SetTopRightRadius(CreateRadiusFromJson(json, BORDER_TOP_RIGHT)); + clip->SetBottomLeftRadius(CreateRadiusFromJson(json, BORDER_BOTTOM_LEFT)); + clip->SetBottomRightRadius(CreateRadiusFromJson(json, BORDER_BOTTOM_RIGHT)); + return clip; +} + +Radius ClipCreator::CreateRadiusFromJson(const JsonValue& json, const std::string& key) +{ + Radius radius; + if (json.Contains(key) && json.GetValue(key)->IsObject()) { + auto radiusJson = json.GetValue(key); + radius = RadiusCreator::CreateFromJson(*radiusJson); + } + return radius; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/json/clip_creator.h b/frameworks/core/components/test/json/clip_creator.h new file mode 100644 index 00000000..6a418848 --- /dev/null +++ b/frameworks/core/components/test/json/clip_creator.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_CLIP_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_CLIP_CREATOR_H + +#include "base/json/json_util.h" +#include "core/components/common/properties/radius.h" +#include "core/components/test/json/component_factory.h" +#include "core/pipeline/base/component.h" + +namespace OHOS::Ace { + +// creator for create clip component. +class ClipCreator { +public: + static RefPtr CreateFromJson(const JsonValue& json, const JsonComponentFactory& factory); + +private: + static Radius CreateRadiusFromJson(const JsonValue& json, const std::string& key); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_CLIP_CREATOR_H diff --git a/frameworks/core/components/test/json/color_creator.cpp b/frameworks/core/components/test/json/color_creator.cpp new file mode 100644 index 00000000..0465a72a --- /dev/null +++ b/frameworks/core/components/test/json/color_creator.cpp @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/color_creator.h" + +#include "base/log/log.h" +#include "base/utils/utils.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { + +Color ColorCreator::CreateFromJson(const JsonValue& componentJson) +{ + LOGD("CreateFromJson color"); + std::string classType = componentJson.GetValue(CLASS_NAME)->GetString(); + if (classType != COLOR_NAME) { + LOGE("Create color err: not a color json."); + return Color(); + } + if (componentJson.Contains(COLOR_VALUE) && componentJson.GetValue(COLOR_VALUE)->IsNumber()) { + uint32_t value = componentJson.GetValue(COLOR_VALUE)->GetUInt(); + return Color(value); + } + uint8_t red = 0; + if (componentJson.Contains(COLOR_RED) && componentJson.GetValue(COLOR_RED)->IsNumber()) { + red = static_cast(componentJson.GetValue(COLOR_RED)->GetInt()); + } + uint8_t green = 0; + if (componentJson.Contains(COLOR_GREEN) && componentJson.GetValue(COLOR_GREEN)->IsNumber()) { + green = static_cast(componentJson.GetValue(COLOR_GREEN)->GetInt()); + } + uint8_t blue = 0; + if (componentJson.Contains(COLOR_BLUE) && componentJson.GetValue(COLOR_BLUE)->IsNumber()) { + blue = static_cast(componentJson.GetValue(COLOR_BLUE)->GetInt()); + } + if (componentJson.Contains(COLOR_ALPHA) && componentJson.GetValue(COLOR_ALPHA)->IsNumber()) { + uint8_t alpha = static_cast(componentJson.GetValue(COLOR_ALPHA)->GetInt()); + return Color::FromARGB(alpha, red, green, blue); + } + if (componentJson.Contains(COLOR_OPACITY) && componentJson.GetValue(COLOR_OPACITY)->IsNumber()) { + double opacity = componentJson.GetValue(COLOR_OPACITY)->GetDouble(); + return Color::FromRGBO(red, green, blue, opacity); + } + return Color::FromRGB(red, green, blue); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/json/color_creator.h b/frameworks/core/components/test/json/color_creator.h new file mode 100644 index 00000000..340543a0 --- /dev/null +++ b/frameworks/core/components/test/json/color_creator.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_COLOR_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_COLOR_CREATOR_H + +#include "base/json/json_util.h" +#include "core/components/common/layout/constants.h" +#include "core/components/common/properties/color.h" +#include "core/components/test/json/component_factory.h" +#include "core/pipeline/base/component.h" + +namespace OHOS::Ace { + +// Creator for creating Color property from json. +class ColorCreator { +public: + static Color CreateFromJson(const JsonValue& json); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_COLOR_CREATOR_H diff --git a/frameworks/core/components/test/json/component_factory.cpp b/frameworks/core/components/test/json/component_factory.cpp new file mode 100644 index 00000000..743d287e --- /dev/null +++ b/frameworks/core/components/test/json/component_factory.cpp @@ -0,0 +1,233 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/component_factory.h" + +#include + +#include "base/log/log.h" +#include "base/utils/singleton.h" +#include "core/components/test/json/align_creator.h" +#include "core/components/test/json/box_creator.h" +#include "core/components/test/json/button_creator.h" +#include "core/components/test/json/checkable_creator.h" +#include "core/components/test/json/clip_creator.h" +#include "core/components/test/json/compose_creator.h" +#include "core/components/test/json/dialog_creator.h" +#include "core/components/test/json/display_creator.h" +#include "core/components/test/json/divider_creator.h" +#include "core/components/test/json/flex_creator.h" +#include "core/components/test/json/flex_item_creator.h" +#include "core/components/test/json/focusable_creator.h" +#include "core/components/test/json/gesture_listener_creator.h" +#include "core/components/test/json/grid_creator.h" +#include "core/components/test/json/grid_item_creator.h" +#include "core/components/test/json/grid_layout_creator.h" +#include "core/components/test/json/grid_layout_item_creator.h" +#include "core/components/test/json/image_creator.h" +#include "core/components/test/json/list_creator.h" +#include "core/components/test/json/list_item_creator.h" +#include "core/components/test/json/loading_progress_creator.h" +#include "core/components/test/json/padding_creator.h" +#include "core/components/test/json/positioned_creator.h" +#include "core/components/test/json/progress_creator.h" +#include "core/components/test/json/scroll_creator.h" +#include "core/components/test/json/slider_creator.h" +#include "core/components/test/json/stack_creator.h" +#include "core/components/test/json/swiper_creator.h" +#include "core/components/test/json/text_creator.h" +#include "core/components/test/json/text_span_creator.h" +#include "core/components/test/json/touch_listener_creator.h" +#include "core/components/test/json/transform_creator.h" +#include "core/components/test/json/tween_creator.h" +#include "core/components/test/json/wrap_creator.h" +#include "core/pipeline/base/constants.h" + +#ifndef WEARABLE_PRODUCT +#include "core/components/test/json/marquee_creator.h" +#include "core/components/test/json/popup_creator.h" +#include "core/components/test/json/rating_creator.h" +#include "core/components/test/json/select_creator.h" +#include "core/components/test/json/tab_bar_creator.h" +#include "core/components/test/json/tab_content_creator.h" +#include "core/components/test/json/text_field_creator.h" +#include "core/components/test/json/texture_creator.h" +#include "core/components/test/json/video_creator.h" +#endif + +namespace OHOS::Ace { +namespace { + +class JsonComponentFactoryImpl : public JsonComponentFactory { +public: + using CreateComponentFunc = std::function(const JsonValue&, const JsonComponentFactory&)>; + using FactoryMap = std::map; + + RefPtr CreateComponentFromDsl(const uint8_t* dslBuf, size_t dslLen) final; + std::list> CreateComponentsFromDsl(const uint8_t* dslBuf, size_t dslLen) final; + RefPtr CreateComponent(const JsonValue& jsonValue) const final; + std::list> CreateChildComponent(const JsonValue& jsonValue) const final; + std::list> CreateComponents(const JsonValue& jsonValue) const; + +private: + std::unique_ptr ParseDslData(const uint8_t* dslBuf, size_t dslLen) const; +}; + +const JsonComponentFactoryImpl::FactoryMap FACTORY_MAP = { + { BOX_NAME, BoxCreator::CreateFromJson }, + { COLUMN_NAME, ColumnCreator::CreateFromJson }, + { COMPOSE_NAME, ComposeCreator::CreateFromJson }, + { CHECKBOX_NAME, CheckableCreator::CreateFromJson }, + { SWITCH_NAME, CheckableCreator::CreateFromJson }, + { RADIO_NAME, CheckableCreator::CreateFromJson }, + { IMAGE_NAME, ImageCreator::CreateFromJson }, + { ROW_NAME, RowCreator::CreateFromJson }, + { TEXT_NAME, TextCreator::CreateFromJson }, + { TEXT_SPAN_NAME, TextSpanCreator::CreateFromJson }, + { LIST_NAME, ListCreator::CreateFromJson }, + { LIST_ITEM_NAME, ListItemCreator::CreateFromJson }, + { GRID_NAME, GridCreator::CreateFromJson }, + { GRID_ITEM_NAME, GridItemCreator::CreateFromJson }, + { GRID_LAYOUT_NAME, GridLayoutCreator::CreateFromJson }, + { GRID_LAYOUT_ITEM_NAME, GridLayoutItemCreator::CreateFromJson }, + { PADDING_NAME, PaddingCreator::CreateFromJson }, + { ALIGN_NAME, AlignCreator::CreateFromJson }, + { TWEEN_NAME, TweenCreator::CreateFromJson }, + { SLIDER_NAME, SliderCreator::CreateFromJson }, + { SWIPER_NAME, SwiperCreator::CreateFromJson }, + { FLEX_ITEM_NAME, FlexItemCreator::CreateFromJson }, + { BUTTON_NAME, ButtonCreator::CreateFromJson }, + { TOUCH_LISTENER_NAME, TouchListenerCreator::CreateFromJson }, + { GESTURE_LISTENER_NAME, GestureListenerCreator::CreateFromJson }, + { DISPLAY_NAME, DisplayCreator::CreateFromJson }, + { SCROLL_NAME, ScrollCreator::CreateFromJson }, + { DIALOG_NAME, DialogCreator::CreateFromJson }, + { PROGRESS_NAME, ProgressCreator::CreateFromJson }, + { STACK_NAME, StackCreator::CreateFromJson }, + { POSITIONED_NAME, PositionedCreator::CreateFromJson }, + { FOCUSABLE_NAME, FocusableCreator::CreateFromJson }, + { TRANSFORM_NAME, TransformCreator::CreateFromJson }, + { WRAP_NAME, WrapCreator::CreateFromJson }, + { LOADING_PROGRESS_NAME, LoadingProgressCreator::CreateFromJson }, + { CLIP_NAME, ClipCreator::CreateFromJson }, + { DIVIDER_NAME, DividerCreator::CreateFromJson }, +#ifndef WEARABLE_PRODUCT + { SELECT_NAME, SelectCreator::CreateFromJson }, + { TAB_BAR_NAME, TabBarCreator::CreateFromJson }, + { TAB_CONTENT_NAME, TabContentCreator::CreateFromJson }, + { POPUP_NAME, PopupCreator::CreateFromJson }, + { RATING_NAME, RatingCreator::CreateFromJson }, + { MARQUEE_NAME, MarqueeCreator::CreateFromJson }, + { VIDEO_NAME, VideoCreator::CreateFromJson }, + { TEXTURE_NAME, TextureCreator::CreateFromJson }, + { TEXT_FIELD_NAME, TextFieldCreator::CreateFromJson }, +#endif +}; + +RefPtr JsonComponentFactoryImpl::CreateComponentFromDsl(const uint8_t* dslBuf, size_t dslLen) +{ + auto componentJson = ParseDslData(dslBuf, dslLen); + if (componentJson == nullptr) { + LOGE("parse dsl data failed"); + return nullptr; + } + return CreateComponent(*componentJson); +} + +std::list> JsonComponentFactoryImpl::CreateComponentsFromDsl(const uint8_t* dslBuf, size_t dslLen) +{ + auto componentJson = ParseDslData(dslBuf, dslLen); + if (componentJson == nullptr) { + LOGE("parse dsl data failed"); + return std::list>(); + } + return CreateComponents(*componentJson); +} + +std::unique_ptr JsonComponentFactoryImpl::ParseDslData(const uint8_t* dslBuf, size_t dslLen) const +{ + std::string componentJsonStr(reinterpret_cast(dslBuf), dslLen); + const char* endMsg = nullptr; + std::unique_ptr componentJson = JsonUtil::ParseJsonString(componentJsonStr, &endMsg); + if (componentJson == nullptr) { + LOGE("parse json error %{private}s:", endMsg); + return nullptr; + } + return componentJson; +} + +RefPtr JsonComponentFactoryImpl::CreateComponent(const JsonValue& jsonValue) const +{ + if (!jsonValue.Contains(CLASS_NAME)) { + LOGE("not have className field."); + return nullptr; + } + + auto typeValue = jsonValue.GetValue(CLASS_NAME); + std::string type = typeValue->GetString(); + const auto& it = FACTORY_MAP.find(type); + if (it == FACTORY_MAP.end()) { + LOGE("can't create component for type:%{public}s", type.c_str()); + return nullptr; + } + + const CreateComponentFunc& creator = it->second; + return creator(jsonValue, *this); +} + +std::list> JsonComponentFactoryImpl::CreateChildComponent(const JsonValue& jsonValue) const +{ + if (!jsonValue.Contains(CHILD)) { + return std::list>(); + } + + auto childValue = jsonValue.GetValue(CHILD); + if (!childValue) { + return std::list>(); + } + + return CreateComponents(*childValue); +} + +std::list> JsonComponentFactoryImpl::CreateComponents(const JsonValue& jsonValue) const +{ + std::list> children; + if (!jsonValue.IsArray()) { + auto child = CreateComponent(jsonValue); + if (child) { + children.emplace_back(child); + } + return children; + } + + int32_t arraySize = jsonValue.GetArraySize(); + for (int32_t index = 0; index < arraySize; ++index) { + auto item = jsonValue.GetArrayItem(index); + auto child = CreateComponent(*item); + if (child) { + children.emplace_back(child); + } + } + return children; +} + +} // namespace + +ComponentFactory& ComponentFactory::GetInstance() +{ + return Singleton::GetInstance(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/json/component_factory.h b/frameworks/core/components/test/json/component_factory.h new file mode 100644 index 00000000..415dfd3d --- /dev/null +++ b/frameworks/core/components/test/json/component_factory.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_COMPONENT_FACTORY_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_COMPONENT_FACTORY_H + +#include +#include + +#include "base/json/json_util.h" +#include "core/components/test/json/base/component_factory.h" +#include "core/pipeline/base/component.h" + +namespace OHOS::Ace { + +class JsonComponentFactory : public ComponentFactory { +public: + virtual RefPtr CreateComponent(const JsonValue& jsonValue) const = 0; + virtual std::list> CreateChildComponent(const JsonValue& jsonValue) const = 0; + virtual std::list> CreateComponents(const JsonValue& jsonValue) const = 0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_COMPONENT_FACTORY_H diff --git a/frameworks/core/components/test/json/compose_creator.cpp b/frameworks/core/components/test/json/compose_creator.cpp new file mode 100644 index 00000000..3779c75a --- /dev/null +++ b/frameworks/core/components/test/json/compose_creator.cpp @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/compose_creator.h" + +#include "base/log/log.h" +#include "core/pipeline/base/composed_component.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { + +RefPtr ComposeCreator::CreateFromJson(const JsonValue& componentJson, const JsonComponentFactory& factory) +{ + LOGD("CreateFromJson compose"); + std::string classType = componentJson.GetValue(CLASS_NAME)->GetString(); + if (classType != COMPOSE_NAME) { + LOGE("Create ComposedComponent err: not a compose json."); + return nullptr; + } + ComposeId id; + if (componentJson.Contains(COMPOSE_ID) && componentJson.GetValue(COMPOSE_ID)->IsString()) { + id = componentJson.GetValue(COMPOSE_ID)->GetString(); + } + std::string name; + if (componentJson.Contains(NAME) && componentJson.GetValue(NAME)->IsString()) { + name = componentJson.GetValue(NAME)->GetString(); + } + RefPtr child; + if (componentJson.Contains(COMPOSE_DATA)) { + const auto& composeData = componentJson.GetValue(COMPOSE_DATA); + child = factory.CreateComponent(*composeData); + } + return AceType::MakeRefPtr(id, name, child); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/json/compose_creator.h b/frameworks/core/components/test/json/compose_creator.h new file mode 100644 index 00000000..838834d8 --- /dev/null +++ b/frameworks/core/components/test/json/compose_creator.h @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_COMPOSE_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_COMPOSE_CREATOR_H + +#include "base/json/json_util.h" +#include "core/components/test/json/component_factory.h" +#include "core/pipeline/base/component.h" + +namespace OHOS::Ace { + +// creator for create compose component. +class ComposeCreator { +public: + static RefPtr CreateFromJson(const JsonValue& json, const JsonComponentFactory& factory); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_COMPOSE_CREATOR_H diff --git a/frameworks/core/components/test/json/decoration_creator.cpp b/frameworks/core/components/test/json/decoration_creator.cpp new file mode 100644 index 00000000..1c1a75a3 --- /dev/null +++ b/frameworks/core/components/test/json/decoration_creator.cpp @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "decoration_creator.h" + +#include "base/log/log.h" +#include "core/components/test/json/background_image_creator.h" +#include "core/components/test/json/border_creator.h" +#include "core/components/test/json/color_creator.h" +#include "core/components/test/json/edge_creator.h" +#include "core/components/test/json/gradient_creator.h" +#include "core/components/test/json/shadow_creator.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { + +RefPtr DecorationCreator::CreateFromJson(const JsonValue& json) +{ + LOGD("CreateFromJson Decoration"); + std::string classType = json.GetValue(CLASS_NAME)->GetString(); + if (classType != DECORATION_NAME) { + LOGE("Create decoration err: not a decoration json."); + return nullptr; + } + RefPtr decoration = AceType::MakeRefPtr(); + + // set padding + if (json.Contains(DECORATION_PADDING) && json.GetValue(DECORATION_PADDING)->IsObject()) { + auto paddingJson = json.GetValue(DECORATION_PADDING); + decoration->SetPadding(EdgeCreator::CreateFromJson(*paddingJson)); + } + + // set border + if (json.Contains(DECORATION_BORDER) && json.GetValue(DECORATION_BORDER)->IsObject()) { + auto borderJson = json.GetValue(DECORATION_BORDER); + decoration->SetBorder(*(BorderCreator::CreateFromJson(*borderJson))); + } + + // set shadows + if (json.Contains(SHADOW_LIST) && json.GetValue(SHADOW_LIST)->IsArray()) { + auto shadowsJson = json.GetValue(SHADOW_LIST); + int32_t size = shadowsJson->GetArraySize(); + for (int32_t index = 0; index < size; index++) { + auto shadowItem = ShadowCreator::CreateFromJson(*(shadowsJson->GetArrayItem(index))); + decoration->AddShadow(shadowItem); + } + } + + // set background color/gradient/image + if (json.Contains(BACKGROUND_COLOR) && json.GetValue(BACKGROUND_COLOR)->IsObject()) { + auto colorJson = json.GetValue(BACKGROUND_COLOR); + decoration->SetBackgroundColor(ColorCreator::CreateFromJson(*colorJson)); + } + if (json.Contains(GRADIENT_NAME) && json.GetValue(GRADIENT_NAME)->IsObject()) { + auto gradientJson = json.GetValue(GRADIENT_NAME); + decoration->SetGradient(GradientCreator::CreateFromJson(*gradientJson)); + } + if (json.Contains(BACKGROUND_IMAGE) && json.GetValue(BACKGROUND_IMAGE)->IsObject()) { + auto backgroundJson = json.GetValue(BACKGROUND_IMAGE); + decoration->SetImage(BackgroundImageCreator::CreateFromJson(*backgroundJson)); + } + return decoration; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/json/decoration_creator.h b/frameworks/core/components/test/json/decoration_creator.h new file mode 100644 index 00000000..5e401487 --- /dev/null +++ b/frameworks/core/components/test/json/decoration_creator.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_DECORATION_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_DECORATION_CREATOR_H + +#include "base/json/json_util.h" +#include "core/components/common/properties/decoration.h" + +namespace OHOS::Ace { + +// Creator for creating Decoration property from json. +class DecorationCreator final { +public: + static RefPtr CreateFromJson(const JsonValue& json); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_DECORATION_CREATOR_H diff --git a/frameworks/core/components/test/json/dialog_creator.cpp b/frameworks/core/components/test/json/dialog_creator.cpp new file mode 100644 index 00000000..a7d51a88 --- /dev/null +++ b/frameworks/core/components/test/json/dialog_creator.cpp @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/dialog_creator.h" + +#include "base/log/log.h" +#include "core/components/dialog/dialog_component.h" +#include "core/components/test/json/color_creator.h" +#include "core/components/test/json/edge_creator.h" +#include "core/components/test/json/text_creator.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { + +RefPtr DialogCreator::CreateFromJson(const JsonValue& componentJson, const JsonComponentFactory& factory) +{ + LOGD("CreateFromJson dialog"); + std::string classType = componentJson.GetValue(CLASS_NAME)->GetString(); + if (classType != DIALOG_NAME) { + LOGE("Create DialogComponent err: not a dialog json."); + return nullptr; + } + + auto dialogComponent = AceType::MakeRefPtr(); + // create title. + auto titleJson = componentJson.GetObject(DIALOG_TITLE); + auto title = TextCreator::CreateFromJson(*titleJson, factory); + dialogComponent->SetTitle(AceType::DynamicCast(title)); + + // create titlePadding. + auto titlePaddingJson = componentJson.GetObject(DIALOG_TITLE_PADDING); + auto titlePadding = EdgeCreator::CreateFromJson(*titlePaddingJson); + dialogComponent->SetTitlePadding(titlePadding); + + // create content. + auto contentJson = componentJson.GetObject(DIALOG_CONTENT); + auto content = TextCreator::CreateFromJson(*contentJson, factory); + dialogComponent->SetContent(AceType::DynamicCast(content)); + + // create contentPadding. + auto contentPaddingJson = componentJson.GetObject(DIALOG_CONTENT_PADDING); + auto contentPadding = EdgeCreator::CreateFromJson(*contentPaddingJson); + dialogComponent->SetContentPadding(contentPadding); + + // create backgroundColor. + auto backgroundColorJson = componentJson.GetObject(DIALOG_BACKGROUND_COLOR); + auto backgroundColor = ColorCreator::CreateFromJson(*backgroundColorJson); + dialogComponent->SetBackgroundColor(backgroundColor); + + // create autoCancel. + dialogComponent->SetAutoCancel(componentJson.GetBool(DIALOG_AUTO_CANCEL, true)); + + // create actions. + if (componentJson.Contains(DIALOG_ACTIONS) && componentJson.GetValue(DIALOG_ACTIONS)->IsArray()) { + auto actionsJson = componentJson.GetValue(DIALOG_ACTIONS); + auto components = factory.CreateComponents(*actionsJson); + std::list> actions; + for (const auto& component : components) { + auto button = AceType::DynamicCast(component); + if (button) { + actions.emplace_back(button); + } else { + LOGW("Create ButtonComponent err: not a button json."); + } + } + dialogComponent->SetActions(actions); + } + return dialogComponent; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/json/dialog_creator.h b/frameworks/core/components/test/json/dialog_creator.h new file mode 100644 index 00000000..8d9b00ad --- /dev/null +++ b/frameworks/core/components/test/json/dialog_creator.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_DIALOG_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_DIALOG_CREATOR_H + +#include "base/json/json_util.h" +#include "core/components/test/json/component_factory.h" +#include "core/pipeline/base/component.h" + +namespace OHOS::Ace { + +class DialogCreator { +public: + static RefPtr CreateFromJson(const JsonValue& json, const JsonComponentFactory& factory); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_DIALOG_CREATOR_H diff --git a/frameworks/core/components/test/json/display_creator.cpp b/frameworks/core/components/test/json/display_creator.cpp new file mode 100644 index 00000000..757ce588 --- /dev/null +++ b/frameworks/core/components/test/json/display_creator.cpp @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/display_creator.h" + +#include "base/log/log.h" +#include "core/components/display/display_component.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { + +RefPtr DisplayCreator::CreateFromJson(const JsonValue& componentJson, const JsonComponentFactory& factory) +{ + LOGD("CreateFromJson display"); + std::string classType = componentJson.GetValue(CLASS_NAME)->GetString(); + if (classType != DISPLAY_NAME || !componentJson.Contains(CHILD) || !componentJson.GetValue(CHILD)->IsObject()) { + LOGE("Create DisplayComponent err: not a display json or not contain child."); + return nullptr; + } + + auto childJson = componentJson.GetValue(CHILD); + auto child = factory.CreateComponent(*childJson); + auto displayComponent = AceType::MakeRefPtr(child); + if (componentJson.Contains(DISPLAY_VISIBLE) && componentJson.GetValue(DISPLAY_VISIBLE)->IsString()) { + auto visibleStr = componentJson.GetValue(DISPLAY_VISIBLE)->GetString(); + displayComponent->SetVisible(DisplayCreator::ConvertStrToVisible(visibleStr)); + } + if (componentJson.Contains(DISPLAY_OPACITY) && componentJson.GetValue(DISPLAY_OPACITY)->IsNumber()) { + auto opacity = std::max(componentJson.GetValue(DISPLAY_OPACITY)->GetDouble(), 0.0); + opacity = std::min(opacity, 1.0); + displayComponent->SetOpacity(opacity); + } + return displayComponent; +} + +VisibleType DisplayCreator::ConvertStrToVisible(const std::string& visibleStr) +{ + VisibleType visible; + if (visibleStr == "visible") { + visible = VisibleType::VISIBLE; + } else if (visibleStr == "invisible") { + visible = VisibleType::INVISIBLE; + } else if (visibleStr == "gone") { + visible = VisibleType::GONE; + } else { + visible = VisibleType::VISIBLE; + } + return visible; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/json/display_creator.h b/frameworks/core/components/test/json/display_creator.h new file mode 100644 index 00000000..f215109f --- /dev/null +++ b/frameworks/core/components/test/json/display_creator.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_DISPLAY_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_DISPLAY_CREATOR_H + +#include "base/json/json_util.h" +#include "core/components/display/display_component.h" +#include "core/components/test/json/component_factory.h" +#include "core/pipeline/base/component.h" + +namespace OHOS::Ace { + +// creator for create display component. +class DisplayCreator { +public: + static RefPtr CreateFromJson(const JsonValue& json, const JsonComponentFactory& factory); + +private: + static VisibleType ConvertStrToVisible(const std::string& visibleStr); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_DISPLAY_CREATOR_H diff --git a/frameworks/core/components/test/json/divider_creator.cpp b/frameworks/core/components/test/json/divider_creator.cpp new file mode 100644 index 00000000..ba261c4a --- /dev/null +++ b/frameworks/core/components/test/json/divider_creator.cpp @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "core/components/test/json/divider_creator.h" + +#include "core/components/divider/divider_component.h" +#include "core/components/test/json/color_creator.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { + +RefPtr DividerCreator::CreateFromJson(const JsonValue& componentJson, const JsonComponentFactory& factory) +{ + auto dividerComponent = AceType::MakeRefPtr(); + + dividerComponent->SetStrokeWidth(Dimension(componentJson.GetDouble(DIVIDER_STROKE_WIDTH, 1.0))); + dividerComponent->SetVertical(componentJson.GetBool(DIVIDER_VERTICAL, false)); + + if (componentJson.Contains(DIVIDER_COLOR) && componentJson.GetValue(DIVIDER_COLOR)->IsObject()) { + auto colorJson = componentJson.GetValue(DIVIDER_COLOR); + dividerComponent->SetDividerColor(ColorCreator::CreateFromJson(*colorJson)); + } + + return dividerComponent; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/json/divider_creator.h b/frameworks/core/components/test/json/divider_creator.h new file mode 100644 index 00000000..5302bd18 --- /dev/null +++ b/frameworks/core/components/test/json/divider_creator.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_DIVIDER_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_DIVIDER_CREATOR_H + +#include "base/json/json_util.h" +#include "core/components/test/json/component_factory.h" +#include "core/pipeline/base/component.h" + +namespace OHOS::Ace { + +class DividerCreator { +public: + static RefPtr CreateFromJson(const JsonValue& componentJson, const JsonComponentFactory& factory); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_DIVIDER_CREATOR_H diff --git a/frameworks/core/components/test/json/edge_creator.cpp b/frameworks/core/components/test/json/edge_creator.cpp new file mode 100644 index 00000000..5b8e32a4 --- /dev/null +++ b/frameworks/core/components/test/json/edge_creator.cpp @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/edge_creator.h" + +#include + +#include "base/log/log.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { + +Edge EdgeCreator::CreateFromJson(const JsonValue& json) +{ + LOGD("CreateFromJson Edge"); + std::string classType = json.GetValue(CLASS_NAME)->GetString(); + if (classType != EDGE_NAME) { + LOGE("Create Edge err: not an edge json."); + return Edge(); + } + if (json.Contains(EDGE_VALUE) && json.GetValue(EDGE_VALUE)->IsNumber()) { + double value = std::max(json.GetValue(EDGE_VALUE)->GetDouble(), 0.0); + return Edge(value); + } + double left = 0.0; + if (json.Contains(EDGE_LEFT) && json.GetValue(EDGE_LEFT)->IsNumber()) { + left = std::max(json.GetValue(EDGE_LEFT)->GetDouble(), 0.0); + } + double top = 0.0; + if (json.Contains(EDGE_TOP) && json.GetValue(EDGE_TOP)->IsNumber()) { + top = std::max(json.GetValue(EDGE_TOP)->GetDouble(), 0.0); + } + double right = 0.0; + if (json.Contains(EDGE_RIGHT) && json.GetValue(EDGE_RIGHT)->IsNumber()) { + right = std::max(json.GetValue(EDGE_RIGHT)->GetDouble(), 0.0); + } + double bottom = 0.0; + if (json.Contains(EDGE_BOTTOM) && json.GetValue(EDGE_BOTTOM)->IsNumber()) { + bottom = std::max(json.GetValue(EDGE_BOTTOM)->GetDouble(), 0.0); + } + return Edge(left, top, right, bottom); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/json/edge_creator.h b/frameworks/core/components/test/json/edge_creator.h new file mode 100644 index 00000000..b18e43e5 --- /dev/null +++ b/frameworks/core/components/test/json/edge_creator.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_EDGE_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_EDGE_CREATOR_H + +#include "base/json/json_util.h" +#include "core/components/common/properties/edge.h" + +namespace OHOS::Ace { + +// Creator for creating Edge property from json. +class EdgeCreator final { +public: + static Edge CreateFromJson(const JsonValue& json); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_EDGE_CREATOR_H diff --git a/frameworks/core/components/test/json/flex_creator.cpp b/frameworks/core/components/test/json/flex_creator.cpp new file mode 100644 index 00000000..93cf5bfb --- /dev/null +++ b/frameworks/core/components/test/json/flex_creator.cpp @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/flex_creator.h" + +#include "base/log/log.h" +#include "base/utils/macros.h" +#include "base/utils/utils.h" +#include "core/components/common/properties/text_style.h" +#include "core/components/flex/flex_component.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { +namespace { + +const FlexAlign FLEX_ALIGNS[] = { FlexAlign::AUTO, FlexAlign::FLEX_START, FlexAlign::CENTER, FlexAlign::FLEX_END, + FlexAlign::STRETCH, FlexAlign::BASELINE, FlexAlign::SPACE_AROUND, FlexAlign::SPACE_BETWEEN }; +const MainAxisSize MAIN_AXIS_SIZES[] = { MainAxisSize::MAX, MainAxisSize::MIN }; +const TextBaseline BASELINES[] = { TextBaseline::ALPHABETIC, TextBaseline::IDEOGRAPHIC }; + +RefPtr CreateFlexFromJson( + const JsonValue& componentJson, const JsonComponentFactory& factory, FlexDirection direction) +{ + FlexAlign mainAlign = FlexAlign::FLEX_START; + FlexAlign crossAlign = FlexAlign::FLEX_START; + MainAxisSize mainAxisSize = MainAxisSize::MAX; + TextBaseline textBaseline = TextBaseline::ALPHABETIC; + auto children = factory.CreateChildComponent(componentJson); + + if (componentJson.Contains(MAIN_AXIS_ALIGN) && componentJson.GetValue(MAIN_AXIS_ALIGN)->IsNumber()) { + mainAlign = + ConvertIntToEnum(componentJson.GetValue(MAIN_AXIS_ALIGN)->GetInt(), FLEX_ALIGNS, FlexAlign::FLEX_START); + } + if (componentJson.Contains(CROSS_AXIS_ALIGN) && componentJson.GetValue(CROSS_AXIS_ALIGN)->IsNumber()) { + crossAlign = + ConvertIntToEnum(componentJson.GetValue(CROSS_AXIS_ALIGN)->GetInt(), FLEX_ALIGNS, FlexAlign::FLEX_START); + } + RefPtr flex; + if (direction == FlexDirection::ROW) { + flex = AceType::MakeRefPtr(mainAlign, crossAlign, children); + } else { + flex = AceType::MakeRefPtr(mainAlign, crossAlign, children); + } + if (componentJson.Contains(MAIN_AXIS_SIZE) && componentJson.GetValue(MAIN_AXIS_SIZE)->IsNumber()) { + mainAxisSize = + ConvertIntToEnum(componentJson.GetValue(MAIN_AXIS_SIZE)->GetInt(), MAIN_AXIS_SIZES, MainAxisSize::MAX); + } + flex->SetMainAxisSize(mainAxisSize); + if (componentJson.Contains(TEXT_BASE_LINE) && componentJson.GetValue(TEXT_BASE_LINE)->IsNumber()) { + textBaseline = + ConvertIntToEnum(componentJson.GetValue(TEXT_BASE_LINE)->GetInt(), BASELINES, TextBaseline::ALPHABETIC); + } + flex->SetBaseline(textBaseline); + return flex; +} + +} // namespace + +RefPtr RowCreator::CreateFromJson(const JsonValue& componentJson, const JsonComponentFactory& factory) +{ + LOGD("CreateFromJson Row"); + std::string classType = componentJson.GetValue(CLASS_NAME)->GetString(); + if (classType != ROW_NAME) { + LOGE("Create row err: not a row json."); + return nullptr; + } + return CreateFlexFromJson(componentJson, factory, FlexDirection::ROW); +} + +RefPtr ColumnCreator::CreateFromJson(const JsonValue& componentJson, const JsonComponentFactory& factory) +{ + LOGD("CreateFromJson Column"); + std::string classType = componentJson.GetValue(CLASS_NAME)->GetString(); + if (classType != COLUMN_NAME) { + LOGE("Create column err: not a column json."); + return nullptr; + } + + return CreateFlexFromJson(componentJson, factory, FlexDirection::COLUMN); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/json/flex_creator.h b/frameworks/core/components/test/json/flex_creator.h new file mode 100644 index 00000000..71347c32 --- /dev/null +++ b/frameworks/core/components/test/json/flex_creator.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_FLEX_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_FLEX_CREATOR_H + +#include "base/json/json_util.h" +#include "core/components/test/json/component_factory.h" +#include "core/pipeline/base/component.h" + +namespace OHOS::Ace { + +// creator for create flex component. +class RowCreator { +public: + static RefPtr CreateFromJson(const JsonValue& json, const JsonComponentFactory& factory); +}; + +class ColumnCreator { +public: + static RefPtr CreateFromJson(const JsonValue& json, const JsonComponentFactory& factory); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_FLEX_CREATOR_H diff --git a/frameworks/core/components/test/json/flex_item_creator.cpp b/frameworks/core/components/test/json/flex_item_creator.cpp new file mode 100644 index 00000000..7b21a33b --- /dev/null +++ b/frameworks/core/components/test/json/flex_item_creator.cpp @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/flex_item_creator.h" + +#include "base/log/log.h" +#include "base/utils/macros.h" +#include "base/utils/utils.h" +#include "core/components/flex/flex_item_component.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { +namespace { + +inline double GetDoubleVal(const JsonValue& componentJson, const std::string& key) +{ + double value = 0.0; + auto jsonVal = componentJson.GetValue(key); + if (jsonVal && jsonVal->IsNumber()) { + value = (jsonVal->GetDouble() > 0.0) ? jsonVal->GetDouble() : 0.0; + } + return value; +} + +} // namespace + +RefPtr FlexItemCreator::CreateFromJson(const JsonValue& componentJson, const JsonComponentFactory& factory) +{ + LOGD("CreateFromJson FlexItem"); + auto children = factory.CreateChildComponent(componentJson); + auto child = children.empty() ? nullptr : children.front(); + double flexGrow = GetDoubleVal(componentJson, FLEX_GROW); + double flexShrink = GetDoubleVal(componentJson, FLEX_SHRINK); + double flexBasis = GetDoubleVal(componentJson, FLEX_BASIS); + return AceType::MakeRefPtr(flexGrow, flexShrink, flexBasis, child); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/json/flex_item_creator.h b/frameworks/core/components/test/json/flex_item_creator.h new file mode 100644 index 00000000..61094997 --- /dev/null +++ b/frameworks/core/components/test/json/flex_item_creator.h @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_FLEX_ITEM_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_FLEX_ITEM_CREATOR_H + +#include "base/json/json_util.h" +#include "core/components/test/json/component_factory.h" +#include "core/pipeline/base/component.h" + +namespace OHOS::Ace { + +// creator for create flex item component, include flex shrink, flex grow and flex basis. +class FlexItemCreator { +public: + static RefPtr CreateFromJson(const JsonValue& json, const JsonComponentFactory& factory); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_FLEX_ITEM_CREATOR_H diff --git a/frameworks/core/components/test/json/focusable_creator.cpp b/frameworks/core/components/test/json/focusable_creator.cpp new file mode 100644 index 00000000..9f97498e --- /dev/null +++ b/frameworks/core/components/test/json/focusable_creator.cpp @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "focusable_creator.h" + +#include "core/components/focusable/focusable_component.h" +#include "core/components/test/json/box_creator.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { + +RefPtr FocusableCreator::CreateFromJson(const JsonValue& json, const JsonComponentFactory& factory) +{ + auto children = factory.CreateChildComponent(json); + auto child = children.empty() ? nullptr : children.front(); + + auto boxStyleJson = json.GetValue(BOX_STYLE); + if (!boxStyleJson || !boxStyleJson->IsObject()) { + LOGE("Failed to get box style from json"); + return nullptr; + } + + auto boxStyle = AceType::DynamicCast(BoxCreator::CreateFromJson(*boxStyleJson, factory)); + if (!boxStyle) { + LOGE("Failed to create box style from json"); + return nullptr; + } + + boxStyleJson = json.GetValue(FOCUSED_BOX_STYLE); + if (!boxStyleJson || !boxStyleJson->IsObject()) { + LOGE("Failed to get focused box style from json"); + return nullptr; + } + + auto focusedBoxStyle = AceType::DynamicCast(BoxCreator::CreateFromJson(*boxStyleJson, factory)); + if (!focusedBoxStyle) { + LOGE("Failed to create focused box style from json"); + return nullptr; + } + + auto focusableComponent = AceType::MakeRefPtr(child); + focusableComponent->SetOnClickId(EventMarker(json.GetString(ON_CLICK_EVENT))); + focusableComponent->SetOnFocusId(EventMarker(json.GetString(ON_FOCUS_EVENT))); + focusableComponent->SetOnBlurId(EventMarker(json.GetString(ON_BLUR_EVENT))); + focusableComponent->SetOnKeyId(EventMarker(json.GetString(ON_KEY_EVENT))); + focusableComponent->SetBoxStyle(boxStyle); + focusableComponent->SetFocusedBoxStyle(focusedBoxStyle); + + if (json.Contains(AUTO_FOCUSED) && json.GetValue(AUTO_FOCUSED)->IsBool()) { + focusableComponent->SetAutoFocused(json.GetValue(AUTO_FOCUSED)->GetBool()); + } + + return focusableComponent; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/json/focusable_creator.h b/frameworks/core/components/test/json/focusable_creator.h new file mode 100644 index 00000000..433563a4 --- /dev/null +++ b/frameworks/core/components/test/json/focusable_creator.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_FOCUSABLE_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_FOCUSABLE_CREATOR_H + +#include "base/json/json_util.h" +#include "core/components/test/json/component_factory.h" +#include "core/pipeline/base/component.h" + +namespace OHOS::Ace { + +class FocusableCreator final { +public: + static RefPtr CreateFromJson(const JsonValue& json, const JsonComponentFactory& factory); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_FOCUSABLE_CREATOR_H diff --git a/frameworks/core/components/test/json/gesture_listener_creator.cpp b/frameworks/core/components/test/json/gesture_listener_creator.cpp new file mode 100644 index 00000000..326e0b3f --- /dev/null +++ b/frameworks/core/components/test/json/gesture_listener_creator.cpp @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gesture_listener_creator.h" + +#include "core/components/gesture_listener/gesture_listener_component.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { + +RefPtr GestureListenerCreator::CreateFromJson(const JsonValue& json, const JsonComponentFactory& factory) +{ + auto children = factory.CreateChildComponent(json); + auto child = children.empty() ? nullptr : children.front(); + auto gestureListener = AceType::MakeRefPtr(child); + gestureListener->SetOnClickId(EventMarker(json.GetString(ON_CLICK_EVENT))); + gestureListener->SetOnLongPressId(EventMarker(json.GetString(ON_LONG_PRESS_EVENT))); + + gestureListener->SetOnHorizontalDragStartId(EventMarker(json.GetString(ON_HORIZONTAL_DRAG_START_EVENT))); + gestureListener->SetOnHorizontalDragUpdateId(EventMarker(json.GetString(ON_HORIZONTAL_DRAG_UPDATE_EVENT))); + gestureListener->SetOnHorizontalDragEndId(EventMarker(json.GetString(ON_HORIZONTAL_DRAG_END_EVENT))); + gestureListener->SetOnHorizontalDragCancelId(EventMarker(json.GetString(ON_HORIZONTAL_DRAG_CANCEL_EVENT))); + + gestureListener->SetOnVerticalDragStartId(EventMarker(json.GetString(ON_VERTICAL_DRAG_START_EVENT))); + gestureListener->SetOnVerticalDragUpdateId(EventMarker(json.GetString(ON_VERTICAL_DRAG_UPDATE_EVENT))); + gestureListener->SetOnVerticalDragEndId(EventMarker(json.GetString(ON_VERTICAL_DRAG_END_EVENT))); + gestureListener->SetOnVerticalDragCancelId(EventMarker(json.GetString(ON_VERTICAL_DRAG_CANCEL_EVENT))); + + gestureListener->SetOnFreeDragStartId(EventMarker(json.GetString(ON_FREE_DRAG_START_EVENT))); + gestureListener->SetOnFreeDragUpdateId(EventMarker(json.GetString(ON_FREE_DRAG_UPDATE_EVENT))); + gestureListener->SetOnFreeDragEndId(EventMarker(json.GetString(ON_FREE_DRAG_END_EVENT))); + gestureListener->SetOnFreeDragCancelId(EventMarker(json.GetString(ON_FREE_DRAG_CANCEL_EVENT))); + + return gestureListener; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/json/gesture_listener_creator.h b/frameworks/core/components/test/json/gesture_listener_creator.h new file mode 100644 index 00000000..9cd986fd --- /dev/null +++ b/frameworks/core/components/test/json/gesture_listener_creator.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_GESTURE_LISTENER_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_GESTURE_LISTENER_CREATOR_H + +#include "base/json/json_util.h" +#include "core/components/test/json/component_factory.h" +#include "core/pipeline/base/component.h" + +namespace OHOS::Ace { + +class GestureListenerCreator final { +public: + static RefPtr CreateFromJson(const JsonValue& json, const JsonComponentFactory& factory); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_GESTURE_LISTENER_CREATOR_H diff --git a/frameworks/core/components/test/json/gradient_creator.cpp b/frameworks/core/components/test/json/gradient_creator.cpp new file mode 100644 index 00000000..c2e42c22 --- /dev/null +++ b/frameworks/core/components/test/json/gradient_creator.cpp @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/gradient_creator.h" + +#include "base/log/log.h" +#include "base/utils/utils.h" +#include "core/components/common/layout/constants.h" +#include "core/components/test/json/color_creator.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { +namespace { + +const GradientDirection GRADIENT_DIRECTIONS[] = { GradientDirection::LEFT, GradientDirection::LEFT_TOP, + GradientDirection::TOP, GradientDirection::RIGHT_TOP, GradientDirection::RIGHT, GradientDirection::RIGHT_BOTTOM, + GradientDirection::BOTTOM, GradientDirection::LEFT_BOTTOM }; +const DimensionUnit DIMENSION_UNITS[] = { DimensionUnit::PX, DimensionUnit::VP, DimensionUnit::FP, + DimensionUnit::PERCENT }; + +} // namespace + +Gradient GradientCreator::CreateFromJson(const JsonValue& json) +{ + LOGD("Gradient creator"); + std::string classType = json.GetValue(CLASS_NAME)->GetString(); + if (classType != GRADIENT_NAME) { + LOGE("Create Gradient err: not a Gradient json."); + return Gradient(); + } + + // set direction + Gradient gradient = Gradient(); + if (json.Contains(GRADIENT_DIRECTION) || json.GetValue(GRADIENT_DIRECTION)->IsNumber()) { + gradient.SetDirection(ConvertIntToEnum( + json.GetValue(GRADIENT_DIRECTION)->GetInt(), GRADIENT_DIRECTIONS, GradientDirection::LEFT)); + } + if (json.Contains(GRADIENT_ANGLE) && json.GetValue(GRADIENT_ANGLE)->IsNumber()) { + gradient.SetUseAngle(true); + gradient.SetAngle(json.GetValue(GRADIENT_ANGLE)->GetDouble()); + } + if (json.Contains(GRADIENT_REPEAT) && json.GetValue(GRADIENT_REPEAT)->IsBool()) { + gradient.SetRepeat(json.GetValue(GRADIENT_REPEAT)->GetBool()); + } + + // set gradient colors + if (json.Contains(GRADIENT_COLOR_LIST) && json.GetValue(GRADIENT_COLOR_LIST)->IsArray()) { + auto colorsJson = json.GetValue(GRADIENT_COLOR_LIST); + int32_t size = colorsJson->GetArraySize(); + for (int32_t index = 0; index < size; index++) { + auto colorItem = CreateGradientColorFromJson(*(colorsJson->GetArrayItem(index))); + gradient.AddColor(colorItem); + } + } + return gradient; +} + +GradientColor GradientCreator::CreateGradientColorFromJson(const JsonValue& componentJson) +{ + GradientColor gradientColor; + if (componentJson.Contains(GRADIENT_COLOR) && componentJson.GetValue(GRADIENT_COLOR)->IsObject()) { + auto color = ColorCreator::CreateFromJson(*(componentJson.GetValue(GRADIENT_COLOR))); + gradientColor.SetColor(color); + } + if (componentJson.Contains(GRADIENT_HAS_VALUE) && componentJson.GetValue(GRADIENT_HAS_VALUE)->IsBool()) { + if (!componentJson.GetValue(GRADIENT_HAS_VALUE)->GetBool()) { + gradientColor.SetHasValue(false); + return gradientColor; + } + } + if (componentJson.Contains(GRADIENT_DIMENSION) && componentJson.GetValue(GRADIENT_DIMENSION)->IsObject()) { + auto dimension = CreateDimensionFromJson(*(componentJson.GetValue(GRADIENT_DIMENSION))); + gradientColor.SetDimension(dimension); + } + return gradientColor; +} + +Dimension GradientCreator::CreateDimensionFromJson(const JsonValue& componentJson) +{ + double value = 0.0; + DimensionUnit dimensionUnit = DimensionUnit::PERCENT; + if (componentJson.Contains(GRADIENT_DIMENSION_VALUE) && + componentJson.GetValue(GRADIENT_DIMENSION_VALUE)->IsNumber()) { + value = componentJson.GetValue(GRADIENT_DIMENSION_VALUE)->GetDouble(); + } + if (componentJson.Contains(GRADIENT_DIMENSION_UNIT) && + componentJson.GetValue(GRADIENT_DIMENSION_UNIT)->IsNumber()) { + dimensionUnit = ConvertIntToEnum( + componentJson.GetValue(GRADIENT_DIMENSION_UNIT)->GetInt(), DIMENSION_UNITS, DimensionUnit::PERCENT); + } + return Dimension(value, dimensionUnit); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/json/gradient_creator.h b/frameworks/core/components/test/json/gradient_creator.h new file mode 100644 index 00000000..0918771c --- /dev/null +++ b/frameworks/core/components/test/json/gradient_creator.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_GRADIENT_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_GRADIENT_CREATOR_H + +#include "base/json/json_util.h" +#include "core/components/common/properties/decoration.h" + +namespace OHOS::Ace { + +// Creator for creating Gradient properties from json. +class GradientCreator { +public: + static Gradient CreateFromJson(const JsonValue& json); + +private: + static GradientColor CreateGradientColorFromJson(const JsonValue& componentJson); + static Dimension CreateDimensionFromJson(const JsonValue& componentJson); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_GRADIENT_CREATOR_H diff --git a/frameworks/core/components/test/json/grid_creator.cpp b/frameworks/core/components/test/json/grid_creator.cpp new file mode 100644 index 00000000..617480ad --- /dev/null +++ b/frameworks/core/components/test/json/grid_creator.cpp @@ -0,0 +1,76 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/grid_creator.h" + +#include "base/log/log.h" +#include "core/components/grid/grid_component.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { + +RefPtr GridCreator::CreateFromJson(const JsonValue& componentJson, const JsonComponentFactory& factory) +{ + auto children = factory.CreateChildComponent(componentJson); + auto grid = AceType::MakeRefPtr(children); + if (componentJson.Contains(GRID_SCROLL_PAGE) && componentJson.GetValue(GRID_SCROLL_PAGE)->IsBool()) { + bool scrollPage = componentJson.GetBool(GRID_SCROLL_PAGE, false); + grid->SetScrollPage(scrollPage); + } + if (componentJson.Contains(GRID_DIRECTION) && componentJson.GetValue(GRID_DIRECTION)->IsNumber()) { + FlexDirection direction = static_cast(componentJson.GetInt(GRID_DIRECTION, DEFAULT_DIRECTION)); + grid->SetDirection(direction); + } + if (componentJson.Contains(GRID_ALIGN) && componentJson.GetValue(GRID_ALIGN)->IsNumber()) { + FlexAlign flexAlign = static_cast(componentJson.GetInt(GRID_ALIGN, DEFAULT_ALIGN)); + grid->SetFlexAlign(flexAlign); + } + if (componentJson.Contains(GRID_COLUMN_COUNT) && componentJson.GetValue(GRID_COLUMN_COUNT)->IsNumber()) { + int32_t columnCount = componentJson.GetInt(GRID_COLUMN_COUNT, DEFAULT_COLUMN_COUNT); + grid->SetColumnCount(columnCount); + } + if (componentJson.Contains(GRID_COLUMN_EXTENT) && componentJson.GetValue(GRID_COLUMN_EXTENT)->IsNumber()) { + int32_t columnExtent = componentJson.GetInt(GRID_COLUMN_EXTENT, DEFAULT_COLUMN_EXTENT); + grid->SetColumnExtent(columnExtent); + } + if (componentJson.Contains(GRID_ITEM_COUNT) && componentJson.GetValue(GRID_ITEM_COUNT)->IsNumber()) { + int32_t itemCount = componentJson.GetInt(GRID_ITEM_COUNT, DEFAULT_ITEM_COUNT); + grid->SetTotalCount(itemCount); + } + if (componentJson.Contains(GRID_CACHED_COUNT) && componentJson.GetValue(GRID_CACHED_COUNT)->IsNumber()) { + int32_t cachedCount = componentJson.GetInt(GRID_CACHED_COUNT, DEFAULT_CACHED_COUNT); + grid->SetCachedCount(cachedCount); + } + if (componentJson.Contains(GRID_EVENT_REQUEST_ITEM) && + componentJson.GetValue(GRID_EVENT_REQUEST_ITEM)->IsString()) { + std::string requestItemEvent = componentJson.GetString(GRID_EVENT_REQUEST_ITEM); + grid->SetOnRequestItem(EventMarker { requestItemEvent }); + } + if (componentJson.Contains(GRID_WIDTH) && componentJson.GetValue(GRID_WIDTH)->IsNumber()) { + double width = componentJson.GetDouble(GRID_WIDTH, DEFAULT_GRID_WIDTH); + grid->SetWidth(width); + } + if (componentJson.Contains(GRID_HEIGHT) && componentJson.GetValue(GRID_HEIGHT)->IsNumber()) { + double height = componentJson.GetDouble(GRID_HEIGHT, DEFAULT_GRID_HEIGHT); + grid->SetHeight(height); + } + if (componentJson.Contains(GRID_INITIAL_ITEM) && componentJson.GetValue(GRID_INITIAL_ITEM)->IsNumber()) { + int32_t initialItem = componentJson.GetInt(GRID_INITIAL_ITEM, DEFAULT_INITIAL_ITEM); + grid->GetGridController()->SetInitialIndex(initialItem); + } + return grid; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/json/grid_creator.h b/frameworks/core/components/test/json/grid_creator.h new file mode 100644 index 00000000..852ef2a2 --- /dev/null +++ b/frameworks/core/components/test/json/grid_creator.h @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_GRID_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_GRID_CREATOR_H + +#include "base/json/json_util.h" +#include "core/components/test/json/component_factory.h" +#include "core/pipeline/base/component.h" + +namespace OHOS::Ace { + +// creator for create text component. +class GridCreator { +public: + static RefPtr CreateFromJson(const JsonValue& json, const JsonComponentFactory& factory); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_GRID_CREATOR_H diff --git a/frameworks/core/components/test/json/grid_item_creator.cpp b/frameworks/core/components/test/json/grid_item_creator.cpp new file mode 100644 index 00000000..aac56065 --- /dev/null +++ b/frameworks/core/components/test/json/grid_item_creator.cpp @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/grid_item_creator.h" + +#include "base/log/log.h" +#include "base/utils/macros.h" +#include "base/utils/utils.h" +#include "core/components/grid/grid_item_component.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { + +RefPtr GridItemCreator::CreateFromJson(const JsonValue& componentJson, const JsonComponentFactory& factory) +{ + LOGD("CreateFromJson GridItem"); + auto children = factory.CreateChildComponent(componentJson); + auto child = children.empty() ? nullptr : children.front(); + auto gridItem = AceType::MakeRefPtr(child); + if (componentJson.Contains(GRID_COLUMN_SPAN) && componentJson.GetValue(GRID_COLUMN_SPAN)->IsNumber()) { + int32_t columnSpan = componentJson.GetInt(GRID_COLUMN_SPAN, DEFAULT_COLUMN_SPAN); + gridItem->SetColumnSpan(columnSpan); + } + return gridItem; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/json/grid_item_creator.h b/frameworks/core/components/test/json/grid_item_creator.h new file mode 100644 index 00000000..570eb776 --- /dev/null +++ b/frameworks/core/components/test/json/grid_item_creator.h @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_GRID_ITEM_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_GRID_ITEM_CREATOR_H + +#include "base/json/json_util.h" +#include "core/components/test/json/component_factory.h" +#include "core/pipeline/base/component.h" + +namespace OHOS::Ace { + +// creator for create flex item component, include flex shrink, flex grow and flex basis +class GridItemCreator { +public: + static RefPtr CreateFromJson(const JsonValue& json, const JsonComponentFactory& factory); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_GRID_ITEM_CREATOR_H diff --git a/frameworks/core/components/test/json/grid_layout_creator.cpp b/frameworks/core/components/test/json/grid_layout_creator.cpp new file mode 100644 index 00000000..4f5b7f89 --- /dev/null +++ b/frameworks/core/components/test/json/grid_layout_creator.cpp @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/grid_layout_creator.h" + +#include "base/log/log.h" +#include "core/components/grid_layout/grid_layout_component.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { + +RefPtr GridLayoutCreator::CreateFromJson(const JsonValue& componentJson, const JsonComponentFactory& factory) +{ + LOGI("Create grid layout by json."); + auto children = factory.CreateChildComponent(componentJson); + auto gridLayout = AceType::MakeRefPtr(children); + if (componentJson.Contains(GRID_DIRECTION) && componentJson.GetValue(GRID_DIRECTION)->IsNumber()) { + FlexDirection direction = static_cast(componentJson.GetInt(GRID_DIRECTION, DEFAULT_DIRECTION)); + gridLayout->SetDirection(direction); + } + if (componentJson.Contains(GRID_ALIGN) && componentJson.GetValue(GRID_ALIGN)->IsNumber()) { + FlexAlign flexAlign = static_cast(componentJson.GetInt(GRID_ALIGN, DEFAULT_ALIGN)); + gridLayout->SetFlexAlign(flexAlign); + } + if (componentJson.Contains(GRID_COLUMN_COUNT) && componentJson.GetValue(GRID_COLUMN_COUNT)->IsNumber()) { + int32_t columnCount = componentJson.GetInt(GRID_COLUMN_COUNT, 1); + gridLayout->SetColumnCount(columnCount); + } + if (componentJson.Contains(GRID_ROW_COUNT) && componentJson.GetValue(GRID_ROW_COUNT)->IsNumber()) { + int32_t rowCount = componentJson.GetInt(GRID_ROW_COUNT, 1); + gridLayout->SetRowCount(rowCount); + } + if (componentJson.Contains(GRID_WIDTH) && componentJson.GetValue(GRID_WIDTH)->IsNumber()) { + double width = componentJson.GetDouble(GRID_WIDTH, DEFAULT_GRID_WIDTH); + gridLayout->SetWidth(width); + } + if (componentJson.Contains(GRID_HEIGHT) && componentJson.GetValue(GRID_HEIGHT)->IsNumber()) { + double height = componentJson.GetDouble(GRID_HEIGHT, DEFAULT_GRID_HEIGHT); + gridLayout->SetHeight(height); + } + return gridLayout; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/json/grid_layout_creator.h b/frameworks/core/components/test/json/grid_layout_creator.h new file mode 100644 index 00000000..67ffe2ee --- /dev/null +++ b/frameworks/core/components/test/json/grid_layout_creator.h @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_GRID_LAYOUT_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_GRID_LAYOUT_CREATOR_H + +#include "base/json/json_util.h" +#include "core/components/test/json/component_factory.h" +#include "core/pipeline/base/component.h" + +namespace OHOS::Ace { + +// creator for create text component. +class GridLayoutCreator { +public: + static RefPtr CreateFromJson(const JsonValue& json, const JsonComponentFactory& factory); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_GRID_LAYOUT_CREATOR_H diff --git a/frameworks/core/components/test/json/grid_layout_item_creator.cpp b/frameworks/core/components/test/json/grid_layout_item_creator.cpp new file mode 100644 index 00000000..3db3177d --- /dev/null +++ b/frameworks/core/components/test/json/grid_layout_item_creator.cpp @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/grid_layout_item_creator.h" + +#include "base/log/log.h" +#include "base/utils/macros.h" +#include "base/utils/utils.h" +#include "core/components/grid_layout/grid_layout_item_component.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { + +RefPtr GridLayoutItemCreator::CreateFromJson( + const JsonValue& componentJson, const JsonComponentFactory& factory) +{ + LOGI("Create grid layout item by json."); + auto children = factory.CreateChildComponent(componentJson); + auto child = children.empty() ? nullptr : children.front(); + auto gridLayoutItem = AceType::MakeRefPtr(child); + if (componentJson.Contains(GRID_COLUMN_INDEX) && componentJson.GetValue(GRID_COLUMN_INDEX)->IsNumber()) { + int32_t columnIndex = componentJson.GetInt(GRID_COLUMN_INDEX, 0); + gridLayoutItem->SetColumnIndex(columnIndex); + } + if (componentJson.Contains(GRID_ROW_INDEX) && componentJson.GetValue(GRID_ROW_INDEX)->IsNumber()) { + int32_t rowIndex = componentJson.GetInt(GRID_ROW_INDEX, 0); + gridLayoutItem->SetRowIndex(rowIndex); + } + if (componentJson.Contains(GRID_COLUMN_SPAN) && componentJson.GetValue(GRID_COLUMN_SPAN)->IsNumber()) { + int32_t columnSpan = componentJson.GetInt(GRID_COLUMN_SPAN, 1); + gridLayoutItem->SetColumnSpan(columnSpan); + } + if (componentJson.Contains(GRID_ROW_SPAN) && componentJson.GetValue(GRID_ROW_SPAN)->IsNumber()) { + int32_t rowSpan = componentJson.GetInt(GRID_ROW_SPAN, 1); + gridLayoutItem->SetRowSpan(rowSpan); + } + return gridLayoutItem; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/json/grid_layout_item_creator.h b/frameworks/core/components/test/json/grid_layout_item_creator.h new file mode 100644 index 00000000..10dc6b12 --- /dev/null +++ b/frameworks/core/components/test/json/grid_layout_item_creator.h @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_GRID_LAYOUT_ITEM_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_GRID_LAYOUT_ITEM_CREATOR_H + +#include "base/json/json_util.h" +#include "core/components/test/json/component_factory.h" +#include "core/pipeline/base/component.h" + +namespace OHOS::Ace { + +// creator for create flex item component, include flex shrink, flex grow and flex basis +class GridLayoutItemCreator { +public: + static RefPtr CreateFromJson(const JsonValue& json, const JsonComponentFactory& factory); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_GRID_LAYOUT_ITEM_CREATOR_H diff --git a/frameworks/core/components/test/json/image_creator.cpp b/frameworks/core/components/test/json/image_creator.cpp new file mode 100644 index 00000000..bf852c02 --- /dev/null +++ b/frameworks/core/components/test/json/image_creator.cpp @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/image_creator.h" + +#include "base/log/log.h" +#include "core/components/common/properties/alignment.h" +#include "core/components/common/properties/color.h" +#include "core/components/image/image_component.h" +#include "core/components/test/json/align_creator.h" +#include "core/components/test/json/color_creator.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { + +RefPtr ImageCreator::CreateFromJson(const JsonValue& componentJson, const JsonComponentFactory&) +{ + LOGD("CreateFromJson Image"); + std::string classType = componentJson.GetValue(CLASS_NAME)->GetString(); + if (classType != IMAGE_NAME) { + LOGE("Create Image err: not a image json."); + return nullptr; + } + std::string src = componentJson.GetString(IMAGE_SRC); + auto image = AceType::MakeRefPtr(src); + image->SetAlt(componentJson.GetString(IMAGE_ALT)); + if (componentJson.Contains(IMAGE_WIDTH) && componentJson.GetValue(IMAGE_WIDTH)->IsNumber()) { + double width = componentJson.GetValue(IMAGE_WIDTH)->GetDouble(); + image->SetWidth(Dimension(width)); + } + if (componentJson.Contains(IMAGE_HEIGHT) && componentJson.GetValue(IMAGE_HEIGHT)->IsNumber()) { + double height = componentJson.GetValue(IMAGE_HEIGHT)->GetDouble(); + image->SetHeight(Dimension(height)); + } + if (componentJson.Contains(IMAGE_ALIGNMENT) && componentJson.GetValue(IMAGE_ALIGNMENT)->IsObject()) { + JsonValue alignmentJson = *(componentJson.GetValue(IMAGE_ALIGNMENT)); + Alignment alignment = AlignCreator::GetAlignmentFromJson(alignmentJson); + image->SetAlignment(alignment); + } + if (componentJson.Contains(IMAGE_REPEAT) && componentJson.GetValue(IMAGE_REPEAT)->IsNumber()) { + image->SetImageRepeat( + ConvertIntToEnum(componentJson.GetValue(IMAGE_REPEAT)->GetInt(), IMAGE_REPEATS, ImageRepeat::NOREPEAT)); + } + image->SetImageFit(ConvertStrToFit(componentJson.GetString(IMAGE_FIT))); + if (componentJson.Contains(IMAGE_COLOR) && componentJson.GetValue(IMAGE_COLOR)->IsObject()) { + auto colorJson = componentJson.GetValue(COLOR); + auto color = ColorCreator::CreateFromJson(*colorJson); + image->SetColor(color); + } + auto loadSuccessEventId = componentJson.GetString(IMAGE_ON_LOAD_SUCCESS); + image->SetLoadSuccessEventId(EventMarker(loadSuccessEventId)); + auto loadFailEventId = componentJson.GetString(IMAGE_ON_LOAD_FAIL); + image->SetLoadFailEventId(EventMarker(loadFailEventId)); + return image; +} + +ImageFit ImageCreator::ConvertStrToFit(const std::string& fit) +{ + ImageFit imageFit; + if (fit == "fill") { + imageFit = ImageFit::FILL; + } else if (fit == "none") { + imageFit = ImageFit::NONE; + } else if (fit == "cover") { + imageFit = ImageFit::COVER; + } else if (fit == "fitwidth") { + imageFit = ImageFit::FITWIDTH; + } else if (fit == "fitheight") { + imageFit = ImageFit::FITHEIGHT; + } else if (fit == "scaledown") { + imageFit = ImageFit::SCALEDOWN; + } else { + imageFit = ImageFit::CONTAIN; + } + return imageFit; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/json/image_creator.h b/frameworks/core/components/test/json/image_creator.h new file mode 100644 index 00000000..3ddc8826 --- /dev/null +++ b/frameworks/core/components/test/json/image_creator.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_IMAGE_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_IMAGE_CREATOR_H + +#include "base/json/json_util.h" +#include "core/components/image/image_component.h" +#include "core/components/test/json/component_factory.h" +#include "core/pipeline/base/component.h" + +namespace OHOS::Ace { + +// creator for create image component. +class ImageCreator { +public: + static RefPtr CreateFromJson(const JsonValue& json, const JsonComponentFactory& factory); + +private: + static ImageFit ConvertStrToFit(const std::string& fit); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_IMAGE_CREATOR_H diff --git a/frameworks/core/components/test/json/json_ace_page.cpp b/frameworks/core/components/test/json/json_ace_page.cpp new file mode 100644 index 00000000..02d547e3 --- /dev/null +++ b/frameworks/core/components/test/json/json_ace_page.cpp @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/common/json_ace_page.h" + +#include "core/components/page/page_component.h" +#include "core/components/page_transition/page_transition_component.h" +#include "core/dsl/component_factory.h" + +namespace OHOS::Ace { + +JsonAcePage::JsonAcePage(int32_t pageId) : AcePage(pageId) {} + +RefPtr JsonAcePage::BuildPage(const std::string& content) +{ + const auto dslBuf = reinterpret_cast(content.c_str()); + size_t dslLen = content.length(); + RefPtr pageContent = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + + RefPtr transitionStack = AceType::MakeRefPtr(); + transitionStack->SetContent(pageContent); + + RefPtr page = AceType::MakeRefPtr(GetPageId(), transitionStack); + return page; +} + +RefPtr JsonAcePage::BuildPagePatch(const std::string& content) +{ + const auto dslBuf = reinterpret_cast(content.c_str()); + size_t dslLen = content.length(); + RefPtr patchContent = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + RefPtr patch = AceType::DynamicCast(patchContent); + return patch; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/json/json_ace_page.h b/frameworks/core/components/test/json/json_ace_page.h new file mode 100644 index 00000000..c60ff1ce --- /dev/null +++ b/frameworks/core/components/test/json/json_ace_page.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_JSON_ACE_PAGE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_JSON_ACE_PAGE_H + +#include + +#include "base/utils/macros.h" +#include "core/common/ace_page.h" + +namespace OHOS::Ace { + +class ACE_EXPORT JsonAcePage : public AcePage { + DECLARE_ACE_TYPE(JsonAcePage, AcePage); + +public: + explicit JsonAcePage(int32_t pageId); + ~JsonAcePage() override = default; + + RefPtr BuildPage(const std::string& content) override; + RefPtr BuildPagePatch(const std::string& content); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_JSON_ACE_PAGE_H diff --git a/frameworks/core/components/test/json/json_frontend.cpp b/frameworks/core/components/test/json/json_frontend.cpp new file mode 100644 index 00000000..243259e6 --- /dev/null +++ b/frameworks/core/components/test/json/json_frontend.cpp @@ -0,0 +1,205 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/json_frontend.h" + +#include "base/log/dump_log.h" +#include "core/components/test/json/json_ace_page.h" + +namespace OHOS::Ace { + +RefPtr Frontend::CreateDefault() +{ + return AceType::MakeRefPtr(); +} + +bool JsonFrontend::Initialize(FrontendType type, const RefPtr&) +{ + // This interface is inherited from base class 'Frontend', but we never use 'TaskExecutor'. + type_ = type; + return true; +} + +void JsonFrontend::AttachPipelineContext(const RefPtr& context) +{ + pipelineContext_ = context; +} + +void JsonFrontend::SetAssetManager(const RefPtr&) +{ + // This interface is inherited from base class 'Frontend', but we never use 'AssetManager'. +} + +void JsonFrontend::AddPage(const RefPtr& page) +{ + if (!page) { + LOGE("the page is nullptr"); + return; + } + const auto pageId = page->GetPageId(); + const auto result = pageMap_.try_emplace(pageId, page); + if (!result.second) { + LOGW("the page has already in the map"); + } +} + +RefPtr JsonFrontend::GetPage(int32_t pageId) const +{ + const auto iter = pageMap_.find(pageId); + if (iter == pageMap_.end()) { + LOGE("the page is not in the page map, id is %{public}d", pageId); + return nullptr; + } + return iter->second; +} + +void JsonFrontend::RunPage(int32_t pageId, const std::string& content, const std::string& params) +{ + if (!pipelineContext_) { + LOGE("Not attached to pipeline context yet"); + return; + } + + auto page = GetPage(pageId); + if (!page) { + LOGE("the page is nullptr"); + return; + } + auto taskRunner = pipelineContext_->GetTaskExecutor(); + if (!taskRunner) { + LOGE("the taskRunner is nullptr"); + return; + } + taskRunner->PostTask( + [page, content, context = pipelineContext_] { + auto pageComponent = page->BuildPage(content); + context->PushPage(pageComponent); + }, + TaskExecutor::TaskType::UI); +} + +void JsonFrontend::PushPage(const std::string& content, const std::string& params) {} + +void JsonFrontend::UpdatePage(int32_t pageId, const std::string& content) +{ + if (!pipelineContext_) { + LOGE("Not attached to pipeline context yet"); + return; + } + + auto page = GetPage(pageId); + if (!page) { + LOGE("the page is nullptr"); + return; + } + RefPtr jsonPage = AceType::DynamicCast(page); + auto taskRunner = pipelineContext_->GetTaskExecutor(); + if (!taskRunner) { + LOGE("the taskRunner is nullptr"); + return; + } + taskRunner->PostTask( + [jsonPage, content, context = pipelineContext_] { + auto patchComponent = jsonPage->BuildPagePatch(content); + context->ScheduleUpdate(patchComponent); + }, + TaskExecutor::TaskType::UI); +} + +RefPtr JsonFrontend::GetEventHandler() +{ + return handler_; +} + +void JsonFrontend::UpdateState(Frontend::State state) +{ + switch (state) { + case Frontend::State::ON_CREATE: + LOGD("update state in JsonFrontend with state ON_CREATE"); + break; + case Frontend::State::ON_DESTROY: + LOGD("update state in JsonFrontend with state ON_DESTROY"); + break; + default: + LOGE("error State: %{public}d", state); + } +} + +bool JsonFrontend::IsForeground() +{ + return false; +} + +RefPtr JsonFrontend::GetAccessibilityManager() const +{ + return nullptr; +} + +bool JsonFrontend::OnBackPressed() +{ + return false; +} + +void JsonFrontend::OnShow() +{ + LOGD("JsonFrontend OnShow"); +} + +void JsonFrontend::OnHide() +{ + LOGD("JsonFrontend OnHide"); +} + +void JsonFrontend::OnActive() +{ + LOGD("JsonFrontend OnActive"); +} + +void JsonFrontend::OnInactive() +{ + LOGD("JsonFrontend OnInactive"); +} + +bool JsonFrontend::OnStartContinuation() +{ + LOGD("JsonFrontend OnStartContinuation"); + return false; +} + +void JsonFrontend::OnCompleteContinuation(int32_t code) +{ + LOGD("JsonFrontend OnCompleteContinuation"); +} + +void JsonFrontend::OnSaveData(std::string& data) +{ + data = ""; + LOGD("JsonFrontend OnSaveData %{private}s", data.c_str()); +} + +bool JsonFrontend::OnRestoreData(const std::string& data) +{ + LOGD("JsonFrontend OnRestoreData"); + return false; +} + +void JsonFrontend::OnNewRequest(const std::string& data) +{ + LOGD("JsonFrontend OnNewRequest"); +} + +void JsonFrontend::CallRouterBack() {} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/json/json_frontend.h b/frameworks/core/components/test/json/json_frontend.h new file mode 100644 index 00000000..9935a670 --- /dev/null +++ b/frameworks/core/components/test/json/json_frontend.h @@ -0,0 +1,158 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_JSON_FRONTEND_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_JSON_FRONTEND_H + +#include + +#include "base/memory/ace_type.h" +#include "base/utils/macros.h" +#include "core/common/ace_page.h" +#include "core/common/container.h" +#include "core/common/frontend.h" +#include "core/common/js_message_dispatcher.h" + +namespace OHOS::Ace { + +class ACE_EXPORT JsonFrontend : public Frontend { + DECLARE_ACE_TYPE(JsonFrontend, Frontend); + +public: + JsonFrontend() = default; + ~JsonFrontend() override = default; + + bool Initialize(FrontendType type, const RefPtr& taskExecutor) override; + + void AttachPipelineContext(const RefPtr& context) override; + + void SetAssetManager(const RefPtr& assetManager) override; + + void AddPage(const RefPtr& page) override; + + RefPtr GetPage(int32_t pageId) const override; + + void RunPage(int32_t pageId, const std::string& content, const std::string& params) override; + + void PushPage(const std::string& content, const std::string& params) override; + + void UpdatePage(int32_t pageId, const std::string& content); + + RefPtr GetEventHandler() override; + + void UpdateState(Frontend::State state) override; + + bool IsForeground() override; + + RefPtr GetAccessibilityManager() const override; + + bool OnBackPressed() override; + + void OnShow() override; + + void OnHide() override; + + void OnActive() override; + + void OnInactive() override; + + bool OnStartContinuation() override; + + void OnCompleteContinuation(int32_t code) override; + + void OnSaveData(std::string& data) override; + + bool OnRestoreData(const std::string& data) override; + + void OnNewRequest(const std::string& data) override; + + void CallRouterBack() override; + + void OnSurfaceChanged(int32_t width, int32_t height) override {} + + void DumpFrontend() const override + { + // maybe will implement later, + LOGI("json not support dump now."); + } + + void SetEventHandler(const RefPtr& handler) + { + handler_ = handler; + } + + const WindowConfig& GetWindowConfig() const override + { + return windowConfig_; + } + + FrontendType GetType() override + { + return type_; + } + + void SendCallbackMessage(const std::string& callbackId, const std::string& data) const override + { + // maybe will implement later + LOGI("json frontend not support."); + } + + void SetJsMessageDispatcher(const RefPtr& dispatcher) const override + { + // maybe will implement later + LOGI("json frontend not support."); + } + + void TransferComponentResponseData(int32_t callbackId, int32_t code, std::vector&& data) const override + { + // maybe will implement later + LOGI("json frontend not support."); + } + + void TransferJsResponseData(int32_t callbackId, int32_t code, std::vector&& data) const override + { + // maybe will implement later + LOGI("json frontend not support."); + } + + void TransferJsPluginGetError(int32_t callbackId, int32_t errorCode, std::string&& errorMessage) const override + { + // maybe will implement later + LOGI("json frontend not support."); + } + + void TransferJsEventData(int32_t callbackId, int32_t code, std::vector&& data) const override + { + // maybe will implement later + LOGI("json frontend not support."); + } + + void LoadPluginJsCode(std::string&& jsCode) const override + { + LOGI("json frontend not support."); + } + +private: + FrontendType type_ { FrontendType::JSON }; + static constexpr int32_t JSON_DESIGN_WIDTH = 1080; + std::unordered_map> pageMap_; + RefPtr pipelineContext_; + RefPtr handler_; + WindowConfig windowConfig_ { .designWidth = JSON_DESIGN_WIDTH, .autoDesignWidth = false }; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_JSON_FRONTEND_H diff --git a/frameworks/core/components/test/json/list_creator.cpp b/frameworks/core/components/test/json/list_creator.cpp new file mode 100644 index 00000000..b76d979c --- /dev/null +++ b/frameworks/core/components/test/json/list_creator.cpp @@ -0,0 +1,126 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/list_creator.h" + +#include "base/log/log.h" +#include "core/components/list/list_component.h" +#include "core/components/scroll/scroll_fade_effect.h" +#include "core/components/scroll/scroll_spring_effect.h" +#include "core/components/test/json/color_creator.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { + +RefPtr ListCreator::CreateFromJson(const JsonValue& componentJson, const JsonComponentFactory& factory) +{ + FlexDirection direction = FlexDirection::COLUMN; + int32_t totalCount = 0; + int32_t cachedCount = 0; + bool scrollPage = false; + std::string requestItemEvent; + + auto children = factory.CreateChildComponent(componentJson); + RefPtr list = AceType::MakeRefPtr(children); + + if (componentJson.Contains(LIST_DIRECTION) && componentJson.GetValue(LIST_DIRECTION)->IsNumber()) { + direction = static_cast(componentJson.GetValue(LIST_DIRECTION)->GetInt()); + list->SetDirection(direction); + } + + if (componentJson.Contains(LIST_COUNT) && componentJson.GetValue(LIST_COUNT)->IsNumber()) { + totalCount = componentJson.GetValue(LIST_COUNT)->GetInt(); + list->SetTotalCount(totalCount); + } + + if (componentJson.Contains(LIST_EVENT_REQUEST_ITEM) && + componentJson.GetValue(LIST_EVENT_REQUEST_ITEM)->IsString()) { + requestItemEvent = componentJson.GetValue(LIST_EVENT_REQUEST_ITEM)->GetString(); + list->SetOnRequestItem(EventMarker { requestItemEvent }); + } + + if (componentJson.Contains(LIST_CACHED_COUNT) && componentJson.GetValue(LIST_CACHED_COUNT)->IsNumber()) { + cachedCount = componentJson.GetValue(LIST_CACHED_COUNT)->GetInt(); + list->SetCachedCount(cachedCount); + } + + if (componentJson.Contains(LIST_SCROLL_PAGE) && componentJson.GetValue(LIST_SCROLL_PAGE)->IsBool()) { + scrollPage = componentJson.GetBool(LIST_SCROLL_PAGE, false); + list->SetScrollPage(scrollPage); + } + + list->SetScrollEffect(CreateEdgeEffect(componentJson)); + list->SetScrollBar(CreateScrollBar(componentJson)); + + RefPtr controller = AceType::MakeRefPtr(); + if (componentJson.Contains(LIST_POSITION) && componentJson.GetValue(LIST_POSITION)->IsNumber()) { + double initPosition = componentJson.GetValue(LIST_POSITION)->GetDouble(); + controller->SetInitialOffset(initPosition); + } + list->SetPositionController(controller); + + LOGD("Create list component: totalCount = %{public}d, requestItemEvent = \"%{private}s\", direction = %{public}d, " + "cachedCount_ = %{public}d, scrollPage = %{public}d, initPosition = %{public}lf", + totalCount, requestItemEvent.c_str(), direction, cachedCount, scrollPage, initPosition); + + return list; +} + +RefPtr ListCreator::CreateEdgeEffect(const JsonValue& componentJson) +{ + Color fadeColor = Color::GRAY; + EdgeEffect effect = EdgeEffect::SPRING; + + RefPtr scrollEffect; + if (componentJson.Contains(EDGE_EFFECT) && componentJson.GetValue(EDGE_EFFECT)->IsNumber()) { + effect = static_cast(componentJson.GetValue(EDGE_EFFECT)->GetInt()); + } + if (effect == EdgeEffect::FADE) { + if (componentJson.Contains(FADE_COLOR) && componentJson.GetValue(FADE_COLOR)->IsObject()) { + auto colorJson = componentJson.GetValue(FADE_COLOR); + fadeColor = ColorCreator::CreateFromJson(*colorJson); + } + scrollEffect = AceType::MakeRefPtr(fadeColor); + } else if (effect == EdgeEffect::NONE) { + scrollEffect = AceType::MakeRefPtr(EdgeEffect::NONE); + } else { + scrollEffect = AceType::MakeRefPtr(); + } + + return scrollEffect; +} + +RefPtr ListCreator::CreateScrollBar(const JsonValue& componentJson) +{ + DisplayMode displayMode = DisplayMode::OFF; + RefPtr scrollBar = AceType::MakeRefPtr(displayMode); + if (componentJson.Contains(SCROLL_BAR_DISPLAY_MODE) && + componentJson.GetValue(SCROLL_BAR_DISPLAY_MODE)->IsNumber()) { + displayMode = static_cast(componentJson.GetValue(SCROLL_BAR_DISPLAY_MODE)->GetInt()); + } + + if (displayMode != DisplayMode::OFF) { + scrollBar = AceType::MakeRefPtr(displayMode); + if (componentJson.Contains(SCROLL_BAR_SHAPE_MODE) && + componentJson.GetValue(SCROLL_BAR_SHAPE_MODE)->IsNumber()) { + ShapeMode shapeMode = static_cast(componentJson.GetValue(SCROLL_BAR_SHAPE_MODE)->GetInt()); + scrollBar->SetShapeMode(shapeMode); + } + } + + return scrollBar; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/json/list_creator.h b/frameworks/core/components/test/json/list_creator.h new file mode 100644 index 00000000..89a49399 --- /dev/null +++ b/frameworks/core/components/test/json/list_creator.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_LIST_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_LIST_CREATOR_H + +#include "base/json/json_util.h" +#include "core/components/common/properties/scroll_bar.h" +#include "core/components/scroll/scroll_edge_effect.h" +#include "core/components/test/json/component_factory.h" +#include "core/pipeline/base/component.h" + +namespace OHOS::Ace { + +// creator for create list component. +class ListCreator { +public: + static RefPtr CreateFromJson(const JsonValue& json, const JsonComponentFactory& factory); + static RefPtr CreateEdgeEffect(const JsonValue& json); + static RefPtr CreateScrollBar(const JsonValue& componentJson); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_LIST_CREATOR_H diff --git a/frameworks/core/components/test/json/list_item_creator.cpp b/frameworks/core/components/test/json/list_item_creator.cpp new file mode 100644 index 00000000..b3f0a6af --- /dev/null +++ b/frameworks/core/components/test/json/list_item_creator.cpp @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/list_item_creator.h" + +#include "base/log/log.h" +#include "core/components/list/list_item_component.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { + +RefPtr ListItemCreator::CreateFromJson(const JsonValue& componentJson, const JsonComponentFactory& factory) +{ + LOGD("CreateFromJson ListItem"); + std::string classType = componentJson.GetValue(CLASS_NAME)->GetString(); + if (classType != LIST_ITEM_NAME) { + LOGE("Create ListItem err: not a list item json."); + return nullptr; + } + + RefPtr child; + if (componentJson.Contains(CHILD) && componentJson.GetValue(CHILD)->IsObject()) { + auto childJson = componentJson.GetValue(CHILD); + child = factory.CreateComponent(*childJson); + } + + std::string type; + if (componentJson.Contains(LIST_ITEM_TYPE) && componentJson.GetValue(LIST_ITEM_TYPE)->IsString()) { + type = componentJson.GetValue(LIST_ITEM_TYPE)->GetString(); + LOGD("Create ListItem type: %{public}s", type.c_str()); + } + + return AceType::MakeRefPtr(type, child); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/json/list_item_creator.h b/frameworks/core/components/test/json/list_item_creator.h new file mode 100644 index 00000000..2200a9d7 --- /dev/null +++ b/frameworks/core/components/test/json/list_item_creator.h @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_LIST_ITEM_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_LIST_ITEM_CREATOR_H + +#include "base/json/json_util.h" +#include "core/components/test/json/component_factory.h" +#include "core/pipeline/base/component.h" + +namespace OHOS::Ace { + +// creator for create list item component. +class ListItemCreator { +public: + static RefPtr CreateFromJson(const JsonValue& json, const JsonComponentFactory& factory); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_LIST_ITEM_CREATOR_H diff --git a/frameworks/core/components/test/json/loading_progress_creator.cpp b/frameworks/core/components/test/json/loading_progress_creator.cpp new file mode 100644 index 00000000..961071aa --- /dev/null +++ b/frameworks/core/components/test/json/loading_progress_creator.cpp @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/loading_progress_creator.h" + +#include "core/components/progress/loading_progress_component.h" +#include "core/pipeline/base/constants.h" + + +namespace OHOS::Ace { +namespace { + +constexpr double DEFAULT_DIAMETER = 100.0; + +} + +RefPtr LoadingProgressCreator::CreateFromJson( + const JsonValue& componentJson, const JsonComponentFactory& factory) +{ + double diameter = componentJson.GetDouble(DIAMETER, DEFAULT_DIAMETER); + return AceType::MakeRefPtr(diameter); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/json/loading_progress_creator.h b/frameworks/core/components/test/json/loading_progress_creator.h new file mode 100644 index 00000000..ef23681d --- /dev/null +++ b/frameworks/core/components/test/json/loading_progress_creator.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_LOADING_PROGRESS_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_LOADING_PROGRESS_CREATOR_H + +#include "base/json/json_util.h" +#include "core/components/test/json/component_factory.h" +#include "core/pipeline/base/component.h" + +namespace OHOS::Ace { + +class LoadingProgressCreator { +public: + static RefPtr CreateFromJson(const JsonValue& json, const JsonComponentFactory& factory); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_LOADING_PROGRESS_CREATOR_H diff --git a/frameworks/core/components/test/json/marquee_creator.cpp b/frameworks/core/components/test/json/marquee_creator.cpp new file mode 100644 index 00000000..fdaba50e --- /dev/null +++ b/frameworks/core/components/test/json/marquee_creator.cpp @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/marquee_creator.h" + +#include "base/log/log.h" +#include "core/components/marquee/marquee_theme.h" +#include "core/components/test/json/text_style_creator.h" +#include "core/components/theme/theme_manager.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { + +RefPtr MarqueeCreator::CreateFromJson(const JsonValue& componentJson, const JsonComponentFactory& factory) +{ + auto marquee = AceType::MakeRefPtr(); + InitStyle(marquee); + if (componentJson.Contains(MARQUEE_VALUE) && componentJson.GetValue(MARQUEE_VALUE)->IsString()) { + auto textValue = componentJson.GetValue(MARQUEE_VALUE)->GetString(); + marquee->SetValue(textValue); + } + if (componentJson.Contains(MARQUEE_SCROLL_AMOUNT) && componentJson.GetValue(MARQUEE_SCROLL_AMOUNT)->IsNumber()) { + double scrollAmount = componentJson.GetValue(MARQUEE_SCROLL_AMOUNT)->GetDouble(); + marquee->SetScrollAmount(scrollAmount); + } + if (componentJson.Contains(MARQUEE_LOOP) && componentJson.GetValue(MARQUEE_LOOP)->IsNumber()) { + int32_t loop = componentJson.GetValue(MARQUEE_LOOP)->GetInt(); + marquee->SetLoop(loop); + } + if (componentJson.Contains(MARQUEE_DIRECTION) && componentJson.GetValue(MARQUEE_DIRECTION)->IsString()) { + auto direction = componentJson.GetValue(MARQUEE_DIRECTION)->GetString(); + if (direction == MARQUEE_DIRECTION_LEFT) { + marquee->SetDirection(MarqueeDirection::LEFT); + } else if (direction == MARQUEE_DIRECTION_RIGHT) { + marquee->SetDirection(MarqueeDirection::RIGHT); + } else { + LOGE("direction error: %{public}s", direction.c_str()); + } + } + if (componentJson.Contains(TEXT_STYLE) && componentJson.GetValue(TEXT_STYLE)->IsObject()) { + TextStyle textStyle = TextStyleCreator::CreateFromJson(*componentJson.GetValue(TEXT_STYLE)); + marquee->SetTextStyle(textStyle); + } + if (componentJson.Contains(MARQUEE_BOUNCE) && componentJson.GetValue(MARQUEE_BOUNCE)->IsString()) { + auto bounce = componentJson.GetValue(MARQUEE_BOUNCE)->GetString(); + marquee->SetBounceEventId(EventMarker(bounce)); + } + if (componentJson.Contains(MARQUEE_FINISH) && componentJson.GetValue(MARQUEE_FINISH)->IsString()) { + auto finish = componentJson.GetValue(MARQUEE_FINISH)->GetString(); + marquee->SetFinishEventId(EventMarker(finish)); + } + if (componentJson.Contains(MARQUEE_START) && componentJson.GetValue(MARQUEE_START)->IsString()) { + auto start = componentJson.GetValue(MARQUEE_START)->GetString(); + marquee->SetStartEventId(EventMarker(start)); + } + return marquee; +} + +void MarqueeCreator::InitStyle(RefPtr marquee) +{ + auto themeManager = AceType::MakeRefPtr(); + auto theme = themeManager->GetTheme(); + TextStyle textStyle; + textStyle.SetFontSize(theme->GetFontSize()); + textStyle.SetTextColor(theme->GetTextColor()); + marquee->SetTextStyle(textStyle); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/json/marquee_creator.h b/frameworks/core/components/test/json/marquee_creator.h new file mode 100644 index 00000000..94e2dcc0 --- /dev/null +++ b/frameworks/core/components/test/json/marquee_creator.h @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_MARQUEE_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_MARQUEE_CREATOR_H + +#include "base/json/json_util.h" +#include "core/components/marquee/marquee_component.h" +#include "core/components/test/json/component_factory.h" +#include "core/pipeline/base/component.h" + +namespace OHOS::Ace { + +class MarqueeCreator { +public: + static RefPtr CreateFromJson(const JsonValue& json, const JsonComponentFactory& factory); + static void InitStyle(RefPtr marquee); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_MARQUEE_CREATOR_H diff --git a/frameworks/core/components/test/json/offset_creator.cpp b/frameworks/core/components/test/json/offset_creator.cpp new file mode 100644 index 00000000..5d2f6b5c --- /dev/null +++ b/frameworks/core/components/test/json/offset_creator.cpp @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/offset_creator.h" + +#include "base/log/log.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { + +Offset OffsetCreator::CreateFromJson(const JsonValue& componentJson) +{ + LOGD("CreateFromJson Offset"); + double dx = 0.0; + double dy = 0.0; + if (componentJson.Contains(HORIZONTAL_OFFSET) && componentJson.GetValue(HORIZONTAL_OFFSET)->IsNumber()) { + dx = componentJson.GetValue(HORIZONTAL_OFFSET)->GetDouble(); + } + if (componentJson.Contains(VERTICAL_OFFSET) && componentJson.GetValue(VERTICAL_OFFSET)->IsNumber()) { + dy = componentJson.GetValue(VERTICAL_OFFSET)->GetDouble(); + } + Offset offsetComponent = Offset(dx, dy); + return offsetComponent; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/json/offset_creator.h b/frameworks/core/components/test/json/offset_creator.h new file mode 100644 index 00000000..e965322d --- /dev/null +++ b/frameworks/core/components/test/json/offset_creator.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_OFFSET_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_OFFSET_CREATOR_H + +#include "base/geometry/offset.h" +#include "base/json/json_util.h" +#include "core/components/common/layout/constants.h" +#include "core/components/test/json/component_factory.h" +#include "core/pipeline/base/component.h" + +namespace OHOS::Ace { + +// creator for creating offset component. +class OffsetCreator { +public: + static Offset CreateFromJson(const JsonValue& json); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_OFFSET_CREATOR_H diff --git a/frameworks/core/components/test/json/padding_creator.cpp b/frameworks/core/components/test/json/padding_creator.cpp new file mode 100644 index 00000000..e8d929ff --- /dev/null +++ b/frameworks/core/components/test/json/padding_creator.cpp @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "padding_creator.h" + +#include "base/log/log.h" +#include "core/components/padding/padding_component.h" +#include "core/components/test/json/edge_creator.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { + +RefPtr PaddingCreator::CreateFromJson(const JsonValue& jsonValue, const JsonComponentFactory& factory) +{ + LOGD("CreateFromJson padding"); + std::string classType = jsonValue.GetValue(CLASS_NAME)->GetString(); + if (classType != PADDING_NAME) { + LOGE("Create PaddingComponent err: not a padding json."); + return nullptr; + } + auto paddingComponent = AceType::MakeRefPtr(); + if (jsonValue.Contains(PADDING) && jsonValue.GetValue(PADDING)->IsObject()) { + auto paddingJson = jsonValue.GetValue(PADDING); + paddingComponent->SetPadding(EdgeCreator::CreateFromJson(*paddingJson)); + } + if (jsonValue.Contains(CHILD) && jsonValue.GetValue(CHILD)->IsObject()) { + auto childJson = jsonValue.GetValue(CHILD); + auto child = factory.CreateComponent(*childJson); + paddingComponent->SetChild(child); + } + return paddingComponent; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/json/padding_creator.h b/frameworks/core/components/test/json/padding_creator.h new file mode 100644 index 00000000..28d3227c --- /dev/null +++ b/frameworks/core/components/test/json/padding_creator.h @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_PADDING_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_PADDING_CREATOR_H + +#include "base/json/json_util.h" +#include "core/components/test/json/component_factory.h" +#include "core/pipeline/base/component.h" + +namespace OHOS::Ace { + +// Creator for creating padding component. +class PaddingCreator { +public: + static RefPtr CreateFromJson(const JsonValue& jsonValue, const JsonComponentFactory& factory); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_PADDING_CREATOR_H diff --git a/frameworks/core/components/test/json/popup_creator.cpp b/frameworks/core/components/test/json/popup_creator.cpp new file mode 100644 index 00000000..4c9d5a56 --- /dev/null +++ b/frameworks/core/components/test/json/popup_creator.cpp @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/popup_creator.h" + +#include "core/components/popup/popup_component.h" +#include "core/components/test/json/color_creator.h" +#include "core/pipeline/base/composed_component.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { +namespace { + +const char BACKGROUND_COLOR_POPUP[] = "backgroundColor"; +const std::unordered_map PLACEMENT_MAP = { + { "left", Placement::LEFT }, + { "right", Placement::RIGHT }, + { "top", Placement::TOP }, + { "bottom", Placement::BOTTOM }, + { "topLeft", Placement::TOP_LEFT }, + { "topRight", Placement::TOP_RIGHT }, + { "bottomLeft", Placement::BOTTOM_LEFT }, + { "bottomRight", Placement::BOTTOM_RIGHT }, +}; + +} // namespace + +RefPtr PopupCreator::CreateFromJson(const JsonValue& componentJson, const JsonComponentFactory& factory) +{ + LOGD("CreateFromJson popup"); + std::string classType = componentJson.GetValue(CLASS_NAME)->GetString(); + if (classType != POPUP_NAME || !componentJson.Contains(CHILD) || !componentJson.GetValue(CHILD)->IsObject()) { + LOGE("Create PopupComponent err: not a popup json or not contain child."); + return nullptr; + } + + ComposeId id = componentJson.GetString(POPUP_COMPOSED_ID); + std::string name = componentJson.GetString(POPUP_COMPOSED_NAME); + auto childJson = componentJson.GetValue(CHILD); + auto child = factory.CreateComponent(*childJson); + auto popup = AceType::MakeRefPtr(id, name, child); + + // create placement. + Placement placement = Placement::BOTTOM; + auto placementStr = componentJson.GetString(POPUP_PLACEMENT); + auto it = PLACEMENT_MAP.find(placementStr); + if (it != PLACEMENT_MAP.end()) { + placement = it->second; + } + popup->GetPopupParam()->SetPlacement(placement); + + // create maskColor. + auto maskColorJson = componentJson.GetObject(POPUP_MASK_COLOR); + auto maskColor = ColorCreator::CreateFromJson(*maskColorJson); + popup->GetPopupParam()->SetMaskColor(maskColor); + + // create backgroundColor. + auto backgroundColorJson = componentJson.GetObject(BACKGROUND_COLOR_POPUP); + auto backgroundColor = ColorCreator::CreateFromJson(*backgroundColorJson); + popup->GetPopupParam()->SetBackgroundColor(backgroundColor); + + // create onVisibilityChange. + EventMarker onVisibilityChange(componentJson.GetString(POPUP_ON_VISIBILITY_CHANGE)); + popup->GetPopupParam()->SetOnVisibilityChange(onVisibilityChange); + return popup; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/json/popup_creator.h b/frameworks/core/components/test/json/popup_creator.h new file mode 100644 index 00000000..26fbc53e --- /dev/null +++ b/frameworks/core/components/test/json/popup_creator.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "base/json/json_util.h" +#include "core/components/test/json/component_factory.h" +#include "core/pipeline/base/component.h" + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_POPUP_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_POPUP_CREATOR_H + +namespace OHOS::Ace { + +class PopupCreator { +public: + static RefPtr CreateFromJson(const JsonValue& json, const JsonComponentFactory& factory); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_POPUP_CREATOR_H diff --git a/frameworks/core/components/test/json/positioned_creator.cpp b/frameworks/core/components/test/json/positioned_creator.cpp new file mode 100644 index 00000000..0a031109 --- /dev/null +++ b/frameworks/core/components/test/json/positioned_creator.cpp @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/positioned_creator.h" + +#include + +#include "base/log/log.h" +#include "core/components/positioned/positioned_component.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { +namespace { + +inline double GetDoubleVal(const JsonValue& componentJson, const std::string& key) +{ + double value = 0.0; + auto jsonVal = componentJson.GetValue(key); + if (jsonVal && jsonVal->IsNumber()) { + value = (jsonVal->GetDouble() > 0.0) ? jsonVal->GetDouble() : 0.0; + } + return value; +} + +} // namespace + +RefPtr PositionedCreator::CreateFromJson(const JsonValue& componentJson, const JsonComponentFactory& factory) +{ + auto children = factory.CreateChildComponent(componentJson); + auto child = children.empty() ? nullptr : children.front(); + auto positioned = AceType::MakeRefPtr(child); + positioned->SetWidth(GetDoubleVal(componentJson, POSITIONED_WIDTH)); + positioned->SetHeight(GetDoubleVal(componentJson, POSITIONED_HEIGHT)); + positioned->SetBottom(Dimension(GetDoubleVal(componentJson, POSITIONED_BOTTOM), DimensionUnit::PX)); + positioned->SetTop(Dimension(GetDoubleVal(componentJson, POSITIONED_TOP), DimensionUnit::PX)); + positioned->SetLeft(Dimension(GetDoubleVal(componentJson, POSITIONED_LEFT), DimensionUnit::PX)); + positioned->SetRight(Dimension(GetDoubleVal(componentJson, POSITIONED_RIGHT), DimensionUnit::PX)); + return positioned; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/json/positioned_creator.h b/frameworks/core/components/test/json/positioned_creator.h new file mode 100644 index 00000000..17a561cc --- /dev/null +++ b/frameworks/core/components/test/json/positioned_creator.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_POSITIONED_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_POSITIONED_CREATOR_H + +#include "base/json/json_util.h" +#include "core/components/test/json/component_factory.h" +#include "core/pipeline/base/component.h" + +namespace OHOS::Ace { + +class PositionedCreator { +public: + static RefPtr CreateFromJson(const JsonValue& json, const JsonComponentFactory& factory); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_POSITIONED_CREATOR_H diff --git a/frameworks/core/components/test/json/progress_creator.cpp b/frameworks/core/components/test/json/progress_creator.cpp new file mode 100644 index 00000000..1b21312a --- /dev/null +++ b/frameworks/core/components/test/json/progress_creator.cpp @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/progress_creator.h" + +#include "base/log/log.h" +#include "core/components/progress/progress_component.h" +#include "core/components/progress/progress_theme.h" +#include "core/components/theme/theme_manager.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { + +RefPtr ProgressCreator::CreateFromJson(const JsonValue& componentJson, const JsonComponentFactory& factory) +{ + LOGD("CreateFromJson progress"); + std::string classType = componentJson.GetValue(CLASS_NAME)->GetString(); + if (classType != PROGRESS_NAME) { + LOGE("Create progress error: not progress json"); + return nullptr; + } + + if (!componentJson.Contains(PROGRESS_VALUE) || !componentJson.GetValue(PROGRESS_VALUE)->IsNumber()) { + LOGE("Create progress error: missing initial value"); + return nullptr; + } + if (!componentJson.Contains(PROGRESS_MIN) || !componentJson.GetValue(PROGRESS_MIN)->IsNumber()) { + LOGE("Create progress error: missing min"); + return nullptr; + } + if (!componentJson.Contains(PROGRESS_MAX) || !componentJson.GetValue(PROGRESS_MAX)->IsNumber()) { + LOGE("Create progress error: missing max"); + return nullptr; + } + if (!componentJson.Contains(PROGRESS_CACHED_VALUE) || !componentJson.GetValue(PROGRESS_CACHED_VALUE)->IsNumber()) { + LOGE("Create progress error: missing cached value"); + return nullptr; + } + double value = componentJson.GetValue(PROGRESS_VALUE)->GetDouble(); + double min = componentJson.GetValue(PROGRESS_MIN)->GetDouble(); + double max = componentJson.GetValue(PROGRESS_MAX)->GetDouble(); + double cachedValue = componentJson.GetValue(PROGRESS_CACHED_VALUE)->GetDouble(); + if (max <= min || min > value || max < value || min > cachedValue || max < cachedValue) { + LOGE("Create progress error: max is smaller or equals than min"); + return nullptr; + } + + auto progressTypeJson = componentJson.GetValue(PROGRESS_TYPE); + ProgressType type = ProgressType::LINEAR; + if (progressTypeJson && progressTypeJson->IsNumber()) { + type = static_cast(progressTypeJson->GetInt()); + } + auto progressComponent = AceType::MakeRefPtr(min, value, cachedValue, max, type); + auto themeManager = AceType::MakeRefPtr(); + auto theme = themeManager->GetTheme(); + if (theme) { + progressComponent->InitStyle(theme); + } + CreateProgressTrack(progressComponent, componentJson); + return progressComponent; +} + +void ProgressCreator::CreateProgressTrack(RefPtr& progress, const JsonValue& componentJson) +{ + if (!progress) { + LOGE("progress is null"); + return; + } + auto progressTrack = progress->GetTrack(); + auto progressTrackColorJson = componentJson.GetValue(PROGRESS_BACKGROUND_COLOR); + if (progressTrackColorJson && progressTrackColorJson->IsObject()) { + auto progressTrackColor = ColorCreator::CreateFromJson(*progressTrackColorJson); + progressTrack->SetBackgroundColor(progressTrackColor); + } + + auto selectColorJson = componentJson.GetValue(PROGRESS_SELECT_COLOR); + if (selectColorJson && selectColorJson->IsObject()) { + auto selectColor = ColorCreator::CreateFromJson(*selectColorJson); + progressTrack->SetSelectColor(selectColor); + } + + auto cachedColorJson = componentJson.GetValue(PROGRESS_CACHED_COLOR); + if (cachedColorJson && cachedColorJson->IsObject()) { + auto cachedColor = ColorCreator::CreateFromJson(*cachedColorJson); + progressTrack->SetCachedColor(cachedColor); + } + + auto trackThicknessJson = componentJson.GetValue(PROGRESS_THICKNESS); + if (trackThicknessJson && trackThicknessJson->IsNumber()) { + progressTrack->SetTrackThickness(Dimension(trackThicknessJson->GetDouble(), DimensionUnit::PX)); + } +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/json/progress_creator.h b/frameworks/core/components/test/json/progress_creator.h new file mode 100644 index 00000000..87547b90 --- /dev/null +++ b/frameworks/core/components/test/json/progress_creator.h @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_PROGRESS_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_PROGRESS_CREATOR_H + +#include "base/json/json_util.h" +#include "core/components/progress/progress_component.h" +#include "core/components/test/json/color_creator.h" +#include "core/components/test/json/component_factory.h" +#include "core/pipeline/base/component.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { + +class ProgressCreator { +public: + static RefPtr CreateFromJson(const JsonValue& json, const JsonComponentFactory& factory); + static void CreateProgressTrack(RefPtr& progress, const JsonValue& componentJson); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_PROGRESS_CREATOR_H diff --git a/frameworks/core/components/test/json/radius_creator.cpp b/frameworks/core/components/test/json/radius_creator.cpp new file mode 100644 index 00000000..f316bf62 --- /dev/null +++ b/frameworks/core/components/test/json/radius_creator.cpp @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/radius_creator.h" + +#include + +#include "base/log/log.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { + +Radius RadiusCreator::CreateFromJson(const JsonValue& json) +{ + LOGD("CreateFromJson Radius"); + std::string classType = json.GetValue(CLASS_NAME)->GetString(); + if (classType != RADIUS_NAME) { + LOGE("Create Radius err: not a radius json."); + return Radius(); + } + if (json.Contains(RADIUS_VALUE) && json.GetValue(RADIUS_VALUE)->IsNumber()) { + double value = std::max(json.GetValue(RADIUS_VALUE)->GetDouble(), 0.0); + return Radius(value); + } + double xRadius = 0.0; + if (json.Contains(RADIUS_X) && json.GetValue(RADIUS_X)->IsNumber()) { + xRadius = std::max(json.GetValue(RADIUS_X)->GetDouble(), 0.0); + } + double yRadius = 0.0; + if (json.Contains(RADIUS_Y) && json.GetValue(RADIUS_Y)->IsNumber()) { + yRadius = std::max(json.GetValue(RADIUS_Y)->GetDouble(), 0.0); + } + return Radius(xRadius, yRadius); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/json/radius_creator.h b/frameworks/core/components/test/json/radius_creator.h new file mode 100644 index 00000000..ba0f5508 --- /dev/null +++ b/frameworks/core/components/test/json/radius_creator.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_RADIUS_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_RADIUS_CREATOR_H + +#include "base/json/json_util.h" +#include "core/components/common/properties/radius.h" + +namespace OHOS::Ace { + +// Creator for creating Radius property from json. +class RadiusCreator final { +public: + static Radius CreateFromJson(const JsonValue& json); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_RADIUS_CREATOR_H diff --git a/frameworks/core/components/test/json/rating_creator.cpp b/frameworks/core/components/test/json/rating_creator.cpp new file mode 100644 index 00000000..18b15f47 --- /dev/null +++ b/frameworks/core/components/test/json/rating_creator.cpp @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/rating_creator.h" + +#include "base/log/log.h" +#include "core/components/image/image_component.h" +#include "core/components/rating/rating_component.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { + +RefPtr RatingCreator::CreateFromJson(const JsonValue& componentJson, const JsonComponentFactory&) +{ + LOGI("CreateFromJson Rating"); + std::string classType = componentJson.GetValue(CLASS_NAME)->GetString(); + if (classType != RATING_NAME) { + LOGE("Create Rating err: not a Rating json."); + return nullptr; + } + auto rating = AceType::MakeRefPtr(); + int32_t starNum = componentJson.GetInt(STAR_NUM, DEFAULT_RATING_STAR_NUM); + rating->SetStarNum(starNum); + double ratingScore = componentJson.GetDouble(RATING_SCORE, DEFAULT_RATING_SCORE); + rating->SetRatingScore(ratingScore); + double stepSize = componentJson.GetDouble(STEP_SIZE, DEFAULT_RATING_STEP_SIZE); + rating->SetStepSize(stepSize); + + double width = componentJson.GetDouble(RATING_WIDTH, DEFAULT_RATING_WIDTH); + rating->SetWidth(Dimension(width, DimensionUnit::PX)); + double height = componentJson.GetDouble(RATING_HEIGHT, DEFAULT_RATING_HEIGHT); + rating->SetHeight(Dimension(height, DimensionUnit::PX)); + double paddingHorizontal = componentJson.GetDouble(RATING_HORIZONTAL_PADDING, DEFAULT_RATING_HORIZONTAL_PADDING); + rating->SetPaddingHorizontal(Dimension(paddingHorizontal, DimensionUnit::PX)); + double paddingVertical = componentJson.GetDouble(RATING_VERTICAL_PADDING, DEFAULT_RATING_VERTICAL_PADDING); + rating->SetPaddingVertical(Dimension(paddingVertical, DimensionUnit::PX)); + + std::string foregroundSrc = componentJson.GetString(RATING_FOREGROUND_SRC); + rating->SetForegroundSrc(foregroundSrc); + rating->GetForegroundImage()->SetSrc(foregroundSrc); + + std::string secondarySrc = componentJson.GetString(RATING_SECONDARY_SRC); + rating->SetSecondarySrc(secondarySrc); + rating->GetSecondaryImage()->SetSrc(secondarySrc); + + std::string backgroundSrc = componentJson.GetString(RATING_BACKGROUND_SRC); + rating->SetBackgroundSrc(backgroundSrc); + rating->GetBackgroundImage()->SetSrc(backgroundSrc); + + int32_t indicator = componentJson.GetInt(RATING_INDICATOR, DEFAULT_INDICATOR_VALUE); + rating->SetIndicator((indicator == DEFAULT_NO_INDICATOR_VALUE) ? false : true); + + auto changeEventID = componentJson.GetString(RATING_ON_CHANGE); + rating->SetChangeEventId(EventMarker(changeEventID)); + + return rating; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/json/rating_creator.h b/frameworks/core/components/test/json/rating_creator.h new file mode 100644 index 00000000..e71a5215 --- /dev/null +++ b/frameworks/core/components/test/json/rating_creator.h @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_RATING_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_RATING_CREATOR_H + +#include "base/json/json_util.h" +#include "core/components/align/align_component.h" +#include "core/components/common/properties/alignment.h" +#include "core/components/test/json/component_factory.h" +#include "core/pipeline/base/component.h" + +namespace OHOS::Ace { + +class RatingCreator { +public: + static RefPtr CreateFromJson(const JsonValue& json, const JsonComponentFactory& factory); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_RATING_CREATOR_H diff --git a/frameworks/core/components/test/json/scroll_creator.cpp b/frameworks/core/components/test/json/scroll_creator.cpp new file mode 100644 index 00000000..0ec0ca8c --- /dev/null +++ b/frameworks/core/components/test/json/scroll_creator.cpp @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/scroll_creator.h" + +#include "base/geometry/axis.h" +#include "base/log/log.h" +#include "core/components/scroll/scroll_component.h" +#include "core/components/test/json/edge_creator.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { + +RefPtr ScrollCreator::CreateFromJson(const JsonValue& componentJson, const JsonComponentFactory& factory) +{ + LOGD("CreateFromJson Scroll"); + std::string classType = componentJson.GetValue(CLASS_NAME)->GetString(); + if (classType != SCROLL_NAME) { + LOGE("Create scroll err: not a scroll json."); + return nullptr; + } + + RefPtr child; + if (componentJson.Contains(CHILD) && componentJson.GetValue(CHILD)->IsObject()) { + auto childJson = componentJson.GetValue(CHILD); + child = factory.CreateComponent(*childJson); + } + + auto scroll = AceType::MakeRefPtr(child); + if (componentJson.Contains(SCROLL_DIRECTION) && componentJson.GetValue(SCROLL_DIRECTION)->IsNumber()) { + int32_t direction = componentJson.GetValue(SCROLL_DIRECTION)->GetInt(); + Axis axis = Axis::HORIZONTAL; + if (direction == 0) { + axis = Axis::VERTICAL; + } + scroll->SetAxisDirection(axis); + } + + if (componentJson.Contains(SCROLL_PADDING) && componentJson.GetValue(SCROLL_PADDING)->IsObject()) { + auto childJson = componentJson.GetValue(SCROLL_PADDING); + auto padding = EdgeCreator::CreateFromJson(*childJson); + scroll->SetPadding(padding); + } + + if (componentJson.Contains(SCROLL_PAGE) && componentJson.GetValue(SCROLL_PAGE)->IsBool()) { + bool scrollPage = componentJson.GetValue(SCROLL_PAGE)->GetBool(); + scroll->SetScrollPage(scrollPage); + } + + RefPtr controller = AceType::MakeRefPtr(); + if (componentJson.Contains(SCROLL_POSITION) && componentJson.GetValue(SCROLL_POSITION)->IsNumber()) { + double scrollPosition = componentJson.GetValue(SCROLL_POSITION)->GetDouble(); + controller->SetInitialOffset(scrollPosition); + } + scroll->SetScrollPositionController(controller); + + return scroll; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/json/scroll_creator.h b/frameworks/core/components/test/json/scroll_creator.h new file mode 100644 index 00000000..03b3c9c5 --- /dev/null +++ b/frameworks/core/components/test/json/scroll_creator.h @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_SCROLL_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_SCROLL_CREATOR_H + +#include "base/json/json_util.h" +#include "core/components/test/json/component_factory.h" +#include "core/pipeline/base/component.h" + +namespace OHOS::Ace { + +// creator for create scroll component. +class ScrollCreator { +public: + static RefPtr CreateFromJson(const JsonValue& json, const JsonComponentFactory& factory); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_SCROLL_CREATOR_H diff --git a/frameworks/core/components/test/json/select_creator.cpp b/frameworks/core/components/test/json/select_creator.cpp new file mode 100644 index 00000000..68d49929 --- /dev/null +++ b/frameworks/core/components/test/json/select_creator.cpp @@ -0,0 +1,312 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/select_creator.h" + +#include "core/components/image/image_component.h" +#include "core/components/select/select_component.h" +#include "core/components/text/text_component.h" + +namespace OHOS::Ace { +namespace { + +constexpr FontWeight FONT_WEIGHTS[] = { FontWeight::W100, FontWeight::W200, FontWeight::W300, FontWeight::W400, + FontWeight::W500, FontWeight::W600, FontWeight::W700, FontWeight::W800, FontWeight::W900, FontWeight::BOLD, + FontWeight::NORMAL, FontWeight::BOLDER, FontWeight::LIGHTER }; +constexpr TextDecoration TEXT_DECORATIONS[] = { TextDecoration::NONE, TextDecoration::UNDERLINE, + TextDecoration::OVERLINE, TextDecoration::LINE_THROUGH, TextDecoration::INHERIT }; + +} // namespace + +RefPtr SelectCreator::theme_ = nullptr; + +RefPtr SelectCreator::CreateFromJson(const JsonValue& componentJson, const JsonComponentFactory& factory) +{ + LOGD("SelectCreator::CreateFromJson"); + std::string strValue; + if (!GetStringValue(componentJson, CLASS_NAME, strValue)) { + return nullptr; + } + + if (strValue != SELECT_NAME) { + LOGE("The class name[%{public}s] error, should be [%{public}s].", strValue.c_str(), SELECT_NAME); + return nullptr; + } + + LOGD("Create object of className[%{public}s].", strValue.c_str()); + auto themeManager = AceType::MakeRefPtr(); + theme_ = themeManager->GetTheme(); + auto select = AceType::MakeRefPtr(); + select->InitTheme(themeManager); + CreateCommonAttribute(select, componentJson); + CreateCommonColorAttribute(select, componentJson); + CreateOptionsAttribute(select, componentJson, themeManager); + + AdjustTextBySelectedOption(select); + return select; +} + +bool SelectCreator::GetDoubleValue(const JsonValue& json, const std::string& name, double& outValue) +{ + if (!json.Contains(name)) { + LOGE("The json is error, do not contain element[%{private}s].", name.c_str()); + return false; + } + + auto jsonValue = json.GetValue(name); + if (!jsonValue->IsNumber()) { + LOGE("The json is error, type of element[%{private}s] is not number.", name.c_str()); + return false; + } + + outValue = jsonValue->GetDouble(); + return true; +} + +bool SelectCreator::GetStringValue(const JsonValue& json, const std::string& name, std::string& outValue) +{ + if (!json.Contains(name)) { + LOGE("The json is error, do not contain element[%{private}s].", name.c_str()); + return false; + } + + auto jsonValue = json.GetValue(name); + if (!jsonValue->IsString()) { + LOGE("The json is error, type of element[%{private}s] is not string.", name.c_str()); + return false; + } + + outValue = jsonValue->GetString(); + return true; +} + +bool SelectCreator::GetColorValue(const JsonValue& json, const std::string& name, Color& outValue) +{ + if (!json.Contains(name)) { + LOGE("The json is error, do not contain element[%{private}s].", name.c_str()); + return false; + } + + auto jsonValue = json.GetValue(name); + if (!jsonValue->IsObject()) { + LOGE("The json is error, type of element[%{private}s] is not object.", name.c_str()); + return false; + } + + outValue = ColorCreator::CreateFromJson(*jsonValue); + return true; +} + +void SelectCreator::CreateCommonAttribute(const RefPtr& component, const JsonValue& componentJson) +{ + std::string strValue; + double attrValue = 0.0; + RefPtr select = AceType::DynamicCast(component); + if (!select || !theme_) { + LOGE("select: select or theme is null."); + return; + } + + select->SetRRectSize(theme_->GetRRectSize()); + select->SetPopupShadowWidth(theme_->GetPopupShadowWidth()); + select->SetPopupBorderWidth(theme_->GetPopupBorderWidth()); + + if (GetStringValue(componentJson, SELECT_DISABLED, strValue)) { + select->SetDisabled(strValue == "true" ? true : false); + } + + if (GetStringValue(componentJson, SELECT_ON_CHANGED, strValue)) { + EventMarker evtMarker { strValue }; + select->SetOnChanged(evtMarker); + } + + RefPtr tipText = AceType::MakeRefPtr(""); + if (GetStringValue(componentJson, SELECT_TIP_TEXT, strValue)) { + tipText->SetData(strValue); + } + select->SetTipText(tipText); + + if (GetDoubleValue(componentJson, SELECT_OPTION_SIZE, attrValue)) { + select->SetOptionSize(static_cast(attrValue)); + } else { + select->SetOptionSize(theme_->GetOptionSize()); + } + + if (GetDoubleValue(componentJson, TEXT_FONT_SIZE, attrValue)) { + select->SetFontSize(Dimension(attrValue)); + } else { + select->SetFontSize(theme_->GetFontSize()); + } + + if (GetStringValue(componentJson, TEXT_FONT_FAMILIES, strValue)) { + select->SetFontFamily(strValue); + } else { + select->SetFontFamily(theme_->GetFontFamily()); + } +} + +void SelectCreator::CreateCommonColorAttribute(const RefPtr& component, const JsonValue& componentJson) +{ + Color clrValue = Color::WHITE; + RefPtr select = AceType::DynamicCast(component); + if (!select || !theme_) { + LOGE("select: select or theme is null."); + return; + } + + if (GetColorValue(componentJson, SELECT_SELECTED_COLOR, clrValue)) { + select->SetSelectedColor(clrValue); + } else { + select->SetSelectedColor(theme_->GetSelectedColor()); + } + + if (GetColorValue(componentJson, SELECT_CLICKED_COLOR, clrValue)) { + select->SetClickedColor(clrValue); + } else { + select->SetClickedColor(theme_->GetClickedColor()); + } + + if (GetColorValue(componentJson, SELECT_DISABLED_COLOR, clrValue)) { + select->SetDisabledColor(clrValue); + } else { + select->SetDisabledColor(theme_->GetDisabledColor()); + } +} + +void SelectCreator::CreateOptionsAttribute( + const RefPtr& component, const JsonValue& componentJson, const RefPtr& themeManager) +{ + std::string strValue; + RefPtr select = AceType::DynamicCast(component); + if (!select || !theme_) { + LOGE("select: select or theme is null."); + return; + } + + if (!componentJson.Contains(SELECT_OPTIONS)) { + LOGD("select: json do not contains select options."); + return; + } + + auto optionJsonArray = componentJson.GetValue(SELECT_OPTIONS); + if (!optionJsonArray->IsArray()) { + LOGD("select: select options of json is not array."); + return; + } + + select->ClearAllOptions(); + for (int32_t index = 0; index < optionJsonArray->GetArraySize(); index++) { + auto optionJson = optionJsonArray->GetArrayItem(index); + RefPtr option = AceType::MakeRefPtr(); + option->InitTheme(themeManager); + + if (GetStringValue(*optionJson, SELECT_OPTION_ICON, strValue)) { + RefPtr icon = AceType::MakeRefPtr(); + icon->SetSrc(strValue); + option->SetIcon(icon); + } + + RefPtr text = AceType::MakeRefPtr(""); + if (GetStringValue(*optionJson, SELECT_OPTION_TEXT, strValue)) { + text->SetData(strValue); + } + option->SetText(text); + option->SetSelectedColor(select->GetSelectedColor()); + option->SetClickedColor(select->GetClickedColor()); + CreateOptionCommonAttribute(option, *optionJson); + select->AppendSelectOption(option); + } +} + +void SelectCreator::CreateOptionCommonAttribute(const RefPtr& component, const JsonValue& componentJson) +{ + std::string strValue; + RefPtr option = AceType::DynamicCast(component); + if (!option || !theme_) { + LOGE("select: option or theme is null."); + return; + } + + if (GetStringValue(componentJson, SELECT_OPTION_VALUE, strValue)) { + option->SetValue(strValue); + } + + if (GetStringValue(componentJson, SELECT_OPTION_SELECTED, strValue)) { + option->SetSelected(strValue == "true" ? true : false); + } + + Color clrValue; + if (GetColorValue(componentJson, TEXT_COLOR, clrValue)) { + option->SetFontColor(clrValue); + } else { + option->SetFontColor(theme_->GetFontColor()); + } + + double attrValue = 0.0; + if (GetDoubleValue(componentJson, TEXT_FONT_SIZE, attrValue)) { + option->SetFontSize(Dimension(attrValue)); + } else { + option->SetFontSize(theme_->GetFontSize()); + } + + if (GetDoubleValue(componentJson, TEXT_FONT_WEIGHT, attrValue)) { + option->SetFontWeight(ConvertIntToEnum(static_cast(attrValue), FONT_WEIGHTS, FontWeight::NORMAL)); + } else { + option->SetFontWeight(theme_->GetFontWeight()); + } + + if (GetDoubleValue(componentJson, TEXT_DECORATION, attrValue)) { + option->SetTextDecoration( + ConvertIntToEnum(static_cast(attrValue), TEXT_DECORATIONS, TextDecoration::NONE)); + } else { + option->SetTextDecoration(theme_->GetTextDecoration()); + } + + if (GetStringValue(componentJson, TEXT_FONT_FAMILIES, strValue)) { + option->SetFontFamily(strValue); + } else { + option->SetFontFamily(theme_->GetFontFamily()); + } +} + +void SelectCreator::AdjustTextBySelectedOption(const RefPtr& component) +{ + RefPtr select = AceType::DynamicCast(component); + if (!select) { + return; + } + + auto tipText = select->GetTipText(); + if (!tipText) { + return; + } + + for (std::size_t index = 0; index < select->GetSelectOptionCount(); index++) { + auto option = select->GetSelectOption(index); + if (!(option && option->GetSelected())) { + continue; + } + + auto optionText = option->GetText(); + if (!optionText) { + continue; + } + + tipText->SetData(optionText->GetData()); + return; + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/json/select_creator.h b/frameworks/core/components/test/json/select_creator.h new file mode 100644 index 00000000..eef45695 --- /dev/null +++ b/frameworks/core/components/test/json/select_creator.h @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_SELECT_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_SELECT_CREATOR_H + +#include "base/json/json_util.h" +#include "core/components/select/select_theme.h" +#include "core/components/test/json/color_creator.h" +#include "core/components/test/json/component_factory.h" +#include "core/components/theme/theme_manager.h" +#include "core/pipeline/base/component.h" + +namespace OHOS::Ace { + +class SelectCreator { +public: + static RefPtr CreateFromJson(const JsonValue& componentJson, const JsonComponentFactory& factory); + +private: + static bool GetDoubleValue(const JsonValue& json, const std::string& name, double& outValue); + static bool GetStringValue(const JsonValue& json, const std::string& name, std::string& outValue); + static bool GetColorValue(const JsonValue& json, const std::string& name, Color& outValue); + + static void CreateCommonAttribute(const RefPtr& component, const JsonValue& componentJson); + static void CreateCommonColorAttribute(const RefPtr& component, const JsonValue& componentJson); + static void CreateOptionsAttribute( + const RefPtr& component, const JsonValue& componentJson, const RefPtr& themeManager); + static void CreateOptionCommonAttribute(const RefPtr& component, const JsonValue& componentJson); + + static void AdjustTextBySelectedOption(const RefPtr& component); + + static RefPtr theme_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_SELECT_CREATOR_H diff --git a/frameworks/core/components/test/json/shadow_creator.cpp b/frameworks/core/components/test/json/shadow_creator.cpp new file mode 100644 index 00000000..ebd2251f --- /dev/null +++ b/frameworks/core/components/test/json/shadow_creator.cpp @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/shadow_creator.h" + +#include "base/log/log.h" +#include "core/components/test/json/color_creator.h" +#include "core/components/test/json/offset_creator.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { + +Shadow ShadowCreator::CreateFromJson(const JsonValue& componentJson) +{ + LOGD("CreateFromJson Shadow"); + Shadow shadow; + if (componentJson.Contains(OFFSET) && componentJson.GetValue(OFFSET)->IsObject()) { + auto offset = OffsetCreator::CreateFromJson(*(componentJson.GetValue(OFFSET))); + shadow.SetOffset(offset); + } + if (componentJson.Contains(RADIUS) && componentJson.GetValue(RADIUS)->IsNumber()) { + auto radius = componentJson.GetValue(RADIUS)->GetDouble(); + shadow.SetBlurRadius(radius); + } + if (componentJson.Contains(TEXT_COLOR) && componentJson.GetValue(TEXT_COLOR)->IsObject()) { + auto color = ColorCreator::CreateFromJson(*(componentJson.GetValue(TEXT_COLOR))); + shadow.SetColor(color); + } + if (componentJson.Contains(SPREAD) && componentJson.GetValue(SPREAD)->IsNumber()) { + auto spread = componentJson.GetValue(SPREAD)->GetDouble(); + shadow.SetSpreadRadius(spread); + } + if (componentJson.Contains(ELEVATION) && componentJson.GetValue(ELEVATION)->IsNumber()) { + auto elevation = componentJson.GetValue(ELEVATION)->GetDouble(); + shadow.SetElevation(elevation); + } + return shadow; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/json/shadow_creator.h b/frameworks/core/components/test/json/shadow_creator.h new file mode 100644 index 00000000..1e0ece7c --- /dev/null +++ b/frameworks/core/components/test/json/shadow_creator.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_SHADOW_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_SHADOW_CREATOR_H + +#include "base/json/json_util.h" +#include "core/components/common/layout/constants.h" +#include "core/components/common/properties/shadow.h" +#include "core/components/test/json/component_factory.h" +#include "core/pipeline/base/component.h" + +namespace OHOS::Ace { + +// creator for creating shadow. +class ShadowCreator { +public: + static Shadow CreateFromJson(const JsonValue& json); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_SHADOW_CREATOR_H diff --git a/frameworks/core/components/test/json/slider_creator.cpp b/frameworks/core/components/test/json/slider_creator.cpp new file mode 100644 index 00000000..3ee2b403 --- /dev/null +++ b/frameworks/core/components/test/json/slider_creator.cpp @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/slider_creator.h" + +#include "base/log/log.h" +#include "core/components/slider/block_component.h" +#include "core/components/test/json/color_creator.h" +#include "core/components/theme/theme_manager.h" +#include "core/components/track/track_component.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { + +RefPtr SliderCreator::CreateFromJson(const JsonValue& componentJson, const JsonComponentFactory& factory) +{ + LOGD("CreateFromJson start"); + std::string classType = componentJson.GetValue(CLASS_NAME)->GetString(); + if (classType != SLIDER_NAME) { + LOGE("Create Slider error: not a slider json"); + return nullptr; + } + if (!componentJson.Contains(VALUE) || !componentJson.GetValue(VALUE)->IsNumber()) { + LOGE("Create Slider error: missing initial value"); + return nullptr; + } + if (!componentJson.Contains(SLIDER_MIN) || !componentJson.GetValue(SLIDER_MIN)->IsNumber()) { + LOGE("Create Slider error: missing min"); + return nullptr; + } + if (!componentJson.Contains(SLIDER_MAX) || !componentJson.GetValue(SLIDER_MAX)->IsNumber()) { + LOGE("Create Slider error: missing max"); + return nullptr; + } + if (!componentJson.Contains(SLIDER_STEP) || !componentJson.GetValue(SLIDER_STEP)->IsNumber()) { + LOGE("Create Slider error: missing step"); + return nullptr; + } + double value = componentJson.GetValue(VALUE)->GetDouble(); + double min = componentJson.GetValue(SLIDER_MIN)->GetDouble(); + double max = componentJson.GetValue(SLIDER_MAX)->GetDouble(); + double step = componentJson.GetValue(SLIDER_STEP)->GetDouble(); + + // Check minValue and maxValue + if (max <= min || min > value || max < value || step < 0 || step > (max - min)) { + LOGE("Create Slider error: max is smaller or equals than min"); + return nullptr; + } + RefPtr slider = AceType::MakeRefPtr(value, step, min, max); + auto themeManager = AceType::MakeRefPtr(); + auto theme = themeManager->GetTheme(); + if (theme) { + slider->SetThemeStyle(theme); + } + // Create slider bar + CreateSliderBar(slider, componentJson); + + // Create slider block + CreateSliderBlock(slider, componentJson); + + // Read method event + auto onMovedEndEventIdJson = componentJson.GetValue(ON_MOVE_END_ID); + if (onMovedEndEventIdJson && onMovedEndEventIdJson->IsString()) { + slider->SetOnMoveEndEventId(EventMarker(onMovedEndEventIdJson->GetString())); + } + return slider; +} + +void SliderCreator::CreateSliderBlock(RefPtr& slider, const JsonValue& componentJson) +{ + auto sliderBlock = slider->GetBlock(); + auto blockColorJson = componentJson.GetValue(SLIDER_BLOCK_COLOR); + if (blockColorJson && blockColorJson->IsObject()) { + auto blockColor = ColorCreator::CreateFromJson(*blockColorJson); + sliderBlock->SetBlockColor(blockColor); + } +} + +void SliderCreator::CreateSliderBar(RefPtr& slider, const JsonValue& componentJson) +{ + auto sliderBar = slider->GetTrack(); + auto sliderRailColorJson = componentJson.GetValue(SLIDER_BAR_BACKGROUND_COLOR); + if (sliderRailColorJson && sliderRailColorJson->IsObject()) { + auto sliderRailColor = ColorCreator::CreateFromJson(*sliderRailColorJson); + sliderBar->SetBackgroundColor(sliderRailColor); + } + auto selectColorJson = componentJson.GetValue(SLIDER_SELECTED_COLOR); + if (selectColorJson && selectColorJson->IsObject()) { + auto selectColor = ColorCreator::CreateFromJson(*selectColorJson); + sliderBar->SetSelectColor(selectColor); + } +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/json/slider_creator.h b/frameworks/core/components/test/json/slider_creator.h new file mode 100644 index 00000000..1ed305d3 --- /dev/null +++ b/frameworks/core/components/test/json/slider_creator.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_SLIDER_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_SLIDER_CREATOR_H + +#include "base/json/json_util.h" +#include "core/components/slider/slider_component.h" +#include "core/components/test/json/component_factory.h" +#include "core/pipeline/base/component.h" + +namespace OHOS::Ace { + +class SliderCreator { +public: + static RefPtr CreateFromJson(const JsonValue& json, const JsonComponentFactory& factory); + static void CreateSliderBar(RefPtr& slider, const JsonValue& componentJson); + static void CreateSliderBlock(RefPtr& slider, const JsonValue& componentJson); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_SLIDER_CREATOR_H diff --git a/frameworks/core/components/test/json/stack_creator.cpp b/frameworks/core/components/test/json/stack_creator.cpp new file mode 100644 index 00000000..8fc56483 --- /dev/null +++ b/frameworks/core/components/test/json/stack_creator.cpp @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/stack_creator.h" + +#include "base/log/log.h" +#include "core/components/common/properties/alignment.h" +#include "core/components/test/json/align_creator.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { +namespace { + +const StackFit STACK_FITS[] = { StackFit::KEEP, StackFit::STRETCH, StackFit::INHERIT }; +const Overflow OVERFLOWS[] = { Overflow::CLIP, Overflow::OBSERVABLE }; +const MainStackSize MAIN_STACK_SIZES[] = { MainStackSize::MAX, MainStackSize::MIN, MainStackSize::NORMAL }; + +} // namespace + +RefPtr StackCreator::CreateFromJson(const JsonValue& componentJson, const JsonComponentFactory& factory) +{ + LOGD("CreateFromJson Stack"); + std::string classType = componentJson.GetValue(CLASS_NAME)->GetString(); + if (classType != STACK_NAME) { + LOGE("Create stack err: not an stack json."); + return nullptr; + } + auto children = factory.CreateChildComponent(componentJson); + + Alignment align = Alignment::TOP_LEFT; + if (componentJson.Contains(STACK_ALIGNMENT) && componentJson.GetValue(STACK_ALIGNMENT)->IsObject()) { + JsonValue alignmentJson = *(componentJson.GetValue(STACK_ALIGNMENT)); + align = AlignCreator::GetAlignmentFromJson(alignmentJson); + } + StackFit stackFit = StackFit::KEEP; + if (componentJson.Contains(STACK_FIT) && componentJson.GetValue(STACK_FIT)->IsNumber()) { + stackFit = ConvertIntToEnum(componentJson.GetValue(STACK_FIT)->GetInt(), STACK_FITS, StackFit::KEEP); + } + Overflow overflow = Overflow::CLIP; + if (componentJson.Contains(STACK_OVERFLOW) && componentJson.GetValue(STACK_OVERFLOW)->IsNumber()) { + overflow = ConvertIntToEnum(componentJson.GetValue(STACK_OVERFLOW)->GetInt(), OVERFLOWS, Overflow::CLIP); + } + MainStackSize mainStackSize = MainStackSize::MIN; + if (componentJson.Contains(STACK_MAIN_STACK_SIZE) && componentJson.GetValue(STACK_MAIN_STACK_SIZE)->IsNumber()) { + mainStackSize = ConvertIntToEnum( + componentJson.GetValue(STACK_MAIN_STACK_SIZE)->GetInt(), MAIN_STACK_SIZES, MainStackSize::NORMAL); + } + auto stack = AceType::MakeRefPtr(align, stackFit, overflow, children); + stack->SetMainStackSize(mainStackSize); + return stack; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/json/stack_creator.h b/frameworks/core/components/test/json/stack_creator.h new file mode 100644 index 00000000..62665f10 --- /dev/null +++ b/frameworks/core/components/test/json/stack_creator.h @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_STACK_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_STACK_CREATOR_H + +#include "base/json/json_util.h" +#include "core/components/stack/stack_component.h" +#include "core/components/test/json/component_factory.h" +#include "core/pipeline/base/component.h" + +namespace OHOS::Ace { + +class StackCreator { +public: + static RefPtr CreateFromJson(const JsonValue& json, const JsonComponentFactory& factory); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_STACK_CREATOR_H diff --git a/frameworks/core/components/test/json/swiper_creator.cpp b/frameworks/core/components/test/json/swiper_creator.cpp new file mode 100644 index 00000000..47c8c8ab --- /dev/null +++ b/frameworks/core/components/test/json/swiper_creator.cpp @@ -0,0 +1,126 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/swiper_creator.h" + +#include "base/log/log.h" +#include "core/components/swiper/swiper_component.h" +#include "core/components/test/json/color_creator.h" +#include "core/components/test/json/edge_creator.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { +namespace { + +void ParseIndicatorProperty(const JsonValue& componentJson, const RefPtr& swiperComponent) +{ + if (componentJson.Contains(SWIPER_INDICATOR_COLOR) && componentJson.GetValue(SWIPER_INDICATOR_COLOR)->IsObject()) { + auto colorJson = componentJson.GetValue(SWIPER_INDICATOR_COLOR); + auto color = ColorCreator::CreateFromJson(*colorJson); + swiperComponent->SetIndicatorColor(color); + } + if (componentJson.Contains(SWIPER_INDICATOR_SELECTED_COLOR) && + componentJson.GetValue(SWIPER_INDICATOR_SELECTED_COLOR)->IsObject()) { + auto colorJson = componentJson.GetValue(SWIPER_INDICATOR_SELECTED_COLOR); + auto color = ColorCreator::CreateFromJson(*colorJson); + swiperComponent->SetIndicatorSelectedColor(color); + } + if (componentJson.Contains(SWIPER_INDICATOR_SIZE) && componentJson.GetValue(SWIPER_INDICATOR_SIZE)->IsNumber()) { + double size = componentJson.GetValue(SWIPER_INDICATOR_SIZE)->GetDouble(); + swiperComponent->SetIndicatorSize(Dimension(size, DimensionUnit::VP)); + } + if (componentJson.Contains(SWIPER_INDICATOR_SELECTED_SIZE) && + componentJson.GetValue(SWIPER_INDICATOR_SELECTED_SIZE)->IsNumber()) { + double size = componentJson.GetValue(SWIPER_INDICATOR_SELECTED_SIZE)->GetDouble(); + swiperComponent->SetIndicatorSelectedSize(Dimension(size, DimensionUnit::VP)); + } + if (componentJson.Contains(SWIPER_INDICATOR_TOP) && componentJson.GetValue(SWIPER_INDICATOR_TOP)->IsNumber()) { + double value = componentJson.GetValue(SWIPER_INDICATOR_TOP)->GetDouble(); + swiperComponent->SetIndicatorTop(Dimension(value, DimensionUnit::PX)); + } + if (componentJson.Contains(SWIPER_INDICATOR_LEFT) && componentJson.GetValue(SWIPER_INDICATOR_LEFT)->IsNumber()) { + double value = componentJson.GetValue(SWIPER_INDICATOR_LEFT)->GetDouble(); + swiperComponent->SetIndicatorLeft(Dimension(value, DimensionUnit::PX)); + } + if (componentJson.Contains(SWIPER_INDICATOR_BOTTOM) && + componentJson.GetValue(SWIPER_INDICATOR_BOTTOM)->IsNumber()) { + double value = componentJson.GetValue(SWIPER_INDICATOR_BOTTOM)->GetDouble(); + swiperComponent->SetIndicatorBottom(Dimension(value, DimensionUnit::PX)); + } + if (componentJson.Contains(SWIPER_INDICATOR_RIGHT) && componentJson.GetValue(SWIPER_INDICATOR_RIGHT)->IsNumber()) { + double value = componentJson.GetValue(SWIPER_INDICATOR_RIGHT)->GetDouble(); + swiperComponent->SetIndicatorRight(Dimension(value, DimensionUnit::PX)); + } +} + +} // namespace + +RefPtr SwiperCreator::CreateFromJson(const JsonValue& componentJson, const JsonComponentFactory& factory) +{ + LOGD("CreateFromJson swiper"); + std::string classType = componentJson.GetValue(CLASS_NAME)->GetString(); + if (classType != SWIPER_NAME) { + LOGE("Create Swiper error: not a swiper json."); + return nullptr; + } + + bool showIndicator = true; + if (componentJson.Contains(SWIPER_SHOW_INDICATOR) && componentJson.GetValue(SWIPER_SHOW_INDICATOR)->IsBool()) { + showIndicator = componentJson.GetValue(SWIPER_SHOW_INDICATOR)->GetBool(); + } + + auto children = factory.CreateChildComponent(componentJson); + auto swiperComponent = AceType::MakeRefPtr(children, showIndicator); + + if (showIndicator) { + auto themeManager = AceType::MakeRefPtr(); + auto theme = themeManager->GetTheme(); + if (theme) { + swiperComponent->GetIndicator()->InitStyle(theme); + } + ParseIndicatorProperty(componentJson, swiperComponent); + } + + if (componentJson.Contains(SWIPER_ON_CHANGED) && componentJson.GetValue(SWIPER_ON_CHANGED)->IsString()) { + auto onChanged = componentJson.GetValue(SWIPER_ON_CHANGED)->GetString(); + swiperComponent->SetChangeEventId(EventMarker(onChanged)); + } + if (componentJson.Contains(SWIPER_INDEX) && componentJson.GetValue(SWIPER_INDEX)->IsNumber()) { + uint32_t index = componentJson.GetValue(SWIPER_INDEX)->GetUInt(); + swiperComponent->SetIndex(index); + } + if (componentJson.Contains(SWIPER_DURATION) && componentJson.GetValue(SWIPER_DURATION)->IsNumber()) { + double duration = componentJson.GetValue(SWIPER_DURATION)->GetDouble(); + swiperComponent->SetDuration(duration); + } + + if (componentJson.Contains(SWIPER_LOOP) && componentJson.GetValue(SWIPER_LOOP)->IsBool()) { + swiperComponent->SetLoop(componentJson.GetValue(SWIPER_LOOP)->GetBool()); + } + if (componentJson.Contains(SWIPER_AUTO_PLAY) && componentJson.GetValue(SWIPER_AUTO_PLAY)->IsBool()) { + swiperComponent->SetAutoPlay(componentJson.GetValue(SWIPER_AUTO_PLAY)->GetBool()); + } + if (componentJson.Contains(SWIPER_AUTO_PLAY_INTERVAL) && + componentJson.GetValue(SWIPER_AUTO_PLAY_INTERVAL)->IsNumber()) { + swiperComponent->SetAutoPlayInterval(componentJson.GetValue(SWIPER_AUTO_PLAY_INTERVAL)->GetDouble()); + } + if (componentJson.Contains(SWIPER_IS_VERTICAL) && componentJson.GetValue(SWIPER_IS_VERTICAL)->IsBool()) { + componentJson.GetValue(SWIPER_IS_VERTICAL)->GetBool() ? swiperComponent->SetAxis(Axis::VERTICAL) + : swiperComponent->SetAxis(Axis::HORIZONTAL); + } + return swiperComponent; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/json/swiper_creator.h b/frameworks/core/components/test/json/swiper_creator.h new file mode 100644 index 00000000..ca72fd29 --- /dev/null +++ b/frameworks/core/components/test/json/swiper_creator.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_SWIPER_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_SWIPER_CREATOR_H + +#include "core/components/test/json/component_factory.h" + +namespace OHOS::Ace { + +class SwiperCreator { +public: + static RefPtr CreateFromJson(const JsonValue& json, const JsonComponentFactory& factory); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_SWIPER_CREATOR_H diff --git a/frameworks/core/components/test/json/tab_bar_creator.cpp b/frameworks/core/components/test/json/tab_bar_creator.cpp new file mode 100644 index 00000000..8bea6f13 --- /dev/null +++ b/frameworks/core/components/test/json/tab_bar_creator.cpp @@ -0,0 +1,175 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/tab_bar_creator.h" + +#include "base/log/log.h" +#include "core/components/tab_bar/tab_bar_component.h" +#include "core/components/tab_bar/tab_controller.h" +#include "core/components/test/json/color_creator.h" +#include "core/components/test/json/decoration_creator.h" +#include "core/components/test/json/edge_creator.h" +#include "core/components/test/json/image_creator.h" +#include "core/components/test/json/text_style_creator.h" +#include "core/components/text/text_component.h" +#include "core/components/theme/theme_manager.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { +namespace { + +const static std::map MODE_VALUE_MAP = { + { "fixed", TabBarMode::FIXED }, + { "scrollable", TabBarMode::SCROLLABEL }, +}; + +const static std::map INDICATOR_SIZE_VALUE_MAP = { + { "tab", TabBarIndicatorType::TAB }, + { "label", TabBarIndicatorType::LABEL }, +}; + +} // namespace + +RefPtr TabBarCreator::CreateFromJson(const JsonValue& componentJson, const JsonComponentFactory& factory) +{ + LOGD("CreateFromJson Tabbar"); + std::string classType = componentJson.GetValue(CLASS_NAME)->GetString(); + if (classType != TAB_BAR_NAME) { + LOGE("Create Tabbar err: not a tabbar json."); + return nullptr; + } + + if (!componentJson.Contains(TAB_TABS) || !componentJson.GetValue(TAB_TABS)->IsArray() || + componentJson.GetValue(TAB_TABS)->GetArraySize() <= 0) { + LOGE("Create Tabbar error: missing %{public}s", TAB_TABS); + return nullptr; + } + + if (!componentJson.Contains(TAB_CONTROLLER_ID) || !componentJson.GetValue(TAB_CONTROLLER_ID)->IsNumber()) { + LOGE("Create Tabbar error: missing %{public}s", TAB_CONTROLLER_ID); + return nullptr; + } + + int32_t controllerId = componentJson.GetValue(TAB_CONTROLLER_ID)->GetInt(); + RefPtr controller = TabController::GetController(controllerId); + RefPtr indicator = CreateIndicatorFromJson(componentJson); + std::list> tabs; + auto tabBar = AceType::MakeRefPtr(tabs, controller, indicator); + auto tabsJson = componentJson.GetValue(TAB_TABS); + int32_t size = tabsJson->GetArraySize(); + for (int32_t i = 0; i < size; ++i) { + auto item = tabsJson->GetArrayItem(i); + RefPtr tab = CreateTabFromJson(*item, factory); + if (tab) { + tabBar->AppendChild(tab); + } + } + + if (componentJson.Contains(TAB_IS_VERTICAL) && componentJson.GetValue(TAB_IS_VERTICAL)->IsBool()) { + tabBar->SetVertical(componentJson.GetValue(TAB_IS_VERTICAL)->GetBool()); + } + + if (componentJson.Contains(TAB_INDEX) && componentJson.GetValue(TAB_INDEX)->IsNumber()) { + int32_t index = componentJson.GetValue(TAB_INDEX)->GetInt(); + tabBar->SetIndex(index); + LOGD("Create Tabbar index: %{public}d", index); + } + + UpdateTabBarComponentProperties(componentJson, tabBar); + + return tabBar; +} + +void TabBarCreator::UpdateTabBarComponentProperties( + const JsonValue& componentJson, const RefPtr& tabBar) +{ + if (componentJson.Contains(TAB_MODE) && componentJson.GetValue(TAB_MODE)->IsString()) { + std::string mode = componentJson.GetValue(TAB_MODE)->GetString(); + auto iter = MODE_VALUE_MAP.find(mode); + if (iter != MODE_VALUE_MAP.end()) { + tabBar->SetMode(iter->second); + LOGD("Create Tabbar mod: %{public}s", mode.c_str()); + } + } + + if (componentJson.Contains(TAB_INDICATOR_SIZE) && componentJson.GetValue(TAB_INDICATOR_SIZE)->IsString()) { + std::string indicatorSize = componentJson.GetValue(TAB_INDICATOR_SIZE)->GetString(); + auto iter = INDICATOR_SIZE_VALUE_MAP.find(indicatorSize); + if (iter != INDICATOR_SIZE_VALUE_MAP.end()) { + tabBar->SetIndicatorSize(iter->second); + LOGD("Create Tabbar indicatorSize: %{public}s", indicatorSize.c_str()); + } + } + + if (componentJson.Contains(TAB_LABEL_PADDING) && componentJson.GetValue(TAB_LABEL_PADDING)->IsObject()) { + auto padding = EdgeCreator::CreateFromJson(*(componentJson.GetValue(TAB_LABEL_PADDING))); + tabBar->SetLabelPadding(padding); + } +} + +RefPtr TabBarCreator::CreateIndicatorFromJson(const JsonValue& componentJson) +{ + if (componentJson.Contains(TAB_INDICATOR) && componentJson.GetValue(TAB_INDICATOR)->IsObject()) { + auto indicatorStyle = DecorationCreator::CreateFromJson(*componentJson.GetValue(TAB_INDICATOR)); + return AceType::MakeRefPtr(indicatorStyle); + } else { + Dimension indicatorWidth = DEFAULT_INDICATOR_WIDTH; + if (componentJson.Contains(TAB_INDICATOR_WIDTH) && componentJson.GetValue(TAB_INDICATOR_WIDTH)->IsNumber()) { + indicatorWidth = Dimension(componentJson.GetValue(TAB_INDICATOR_WIDTH)->GetDouble()); + LOGD("Create Tabbar indicatorWidth: %{public}f", indicatorWidth.Value()); + } + + Color indicatorColor = DEFAULT_INDICATOR_COLOR; + if (componentJson.Contains(TAB_INDICATOR_COLOR) && componentJson.GetValue(TAB_INDICATOR_COLOR)->IsObject()) { + indicatorColor = ColorCreator::CreateFromJson(*(componentJson.GetValue(TAB_INDICATOR_COLOR))); + } + + Edge indicatorPadding = DEFAULT_INDICATOR_PADDING; + if (componentJson.Contains(TAB_INDICATOR_PADDING) && + componentJson.GetValue(TAB_INDICATOR_PADDING)->IsObject()) { + indicatorPadding = EdgeCreator::CreateFromJson(*(componentJson.GetValue(TAB_INDICATOR_PADDING))); + } + return AceType::MakeRefPtr(indicatorPadding, indicatorColor, indicatorWidth); + } +} + +RefPtr TabBarCreator::CreateTabFromJson(const JsonValue& componentJson, const JsonComponentFactory& factory) +{ + std::string classType = componentJson.GetValue(CLASS_NAME)->GetString(); + if (classType != TAB_NAME) { + LOGE("Create Tab err: not a tab json."); + return nullptr; + } + if (componentJson.Contains(CHILD) && componentJson.GetValue(CHILD)->IsObject()) { + return factory.CreateComponent(*(componentJson.GetValue(CHILD))); + } else { + RefPtr icon = nullptr; + if (componentJson.Contains(TAB_ITEM_ICON) && componentJson.GetValue(TAB_ITEM_ICON)->IsObject()) { + icon = ImageCreator::CreateFromJson(*(componentJson.GetValue(TAB_ITEM_ICON)), factory); + } + std::string text; + if (componentJson.Contains(TAB_ITEM_TEXT) && componentJson.GetValue(TAB_ITEM_TEXT)->IsString()) { + text = componentJson.GetValue(TAB_ITEM_TEXT)->GetString(); + } + + if (!icon && text.empty()) { + LOGE("Create TabBar error: child == null && icon == null && text == null"); + return nullptr; + } + return AceType::MakeRefPtr(text, icon); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/json/tab_bar_creator.h b/frameworks/core/components/test/json/tab_bar_creator.h new file mode 100644 index 00000000..0b16286b --- /dev/null +++ b/frameworks/core/components/test/json/tab_bar_creator.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_TAB_BAR_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_TAB_BAR_CREATOR_H + +#include "base/json/json_util.h" +#include "core/components/box/box_component.h" +#include "core/components/tab_bar/tab_bar_component.h" +#include "core/components/test/json/component_factory.h" +#include "core/pipeline/base/component.h" + +namespace OHOS::Ace { + +// creator for create tab bar component. +class TabBarCreator { +public: + static RefPtr CreateFromJson(const JsonValue& json, const JsonComponentFactory& factory); + static void UpdateTabBarComponentProperties(const JsonValue& json, const RefPtr& tabBar); + static RefPtr CreateIndicatorFromJson(const JsonValue& json); + static RefPtr CreateTabFromJson(const JsonValue& componentJson, const JsonComponentFactory& factory); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_TAB_BAR_CREATOR_H diff --git a/frameworks/core/components/test/json/tab_content_creator.cpp b/frameworks/core/components/test/json/tab_content_creator.cpp new file mode 100644 index 00000000..25138a75 --- /dev/null +++ b/frameworks/core/components/test/json/tab_content_creator.cpp @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/tab_content_creator.h" + +#include "base/log/log.h" +#include "core/components/tab_bar/tab_content_component.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { + +RefPtr TabContentCreator::CreateFromJson(const JsonValue& componentJson, const JsonComponentFactory& factory) +{ + LOGD("CreateFromJson Tabcontent"); + std::string classType = componentJson.GetValue(CLASS_NAME)->GetString(); + if (classType != TAB_CONTENT_NAME) { + LOGE("Create Tabcontent err: not a tabcontent json."); + return nullptr; + } + + auto children = factory.CreateChildComponent(componentJson); + int32_t controllerId = 0; + if (componentJson.Contains(TAB_CONTROLLER_ID) && componentJson.GetValue(TAB_CONTROLLER_ID)->IsNumber()) { + controllerId = componentJson.GetValue(TAB_CONTROLLER_ID)->GetInt(); + } + + RefPtr controller = TabController::GetController(controllerId); + auto contents = AceType::MakeRefPtr(children, controller); + + if (componentJson.Contains(TAB_CONTENT_SCROLLABEL) && componentJson.GetValue(TAB_CONTENT_SCROLLABEL)->IsBool()) { + contents->SetScrollable(componentJson.GetValue(TAB_CONTENT_SCROLLABEL)->GetBool()); + } + + if (componentJson.Contains(TAB_IS_VERTICAL) && componentJson.GetValue(TAB_IS_VERTICAL)->IsBool()) { + contents->SetVertical(componentJson.GetValue(TAB_IS_VERTICAL)->GetBool()); + } + + if (componentJson.Contains(TAB_CONTENT_ON_CHANGE) && componentJson.GetValue(TAB_CONTENT_ON_CHANGE)->IsString()) { + auto onChanged = componentJson.GetValue(TAB_CONTENT_ON_CHANGE)->GetString(); + contents->SetChangeEventId(EventMarker(onChanged)); + } + return contents; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/json/tab_content_creator.h b/frameworks/core/components/test/json/tab_content_creator.h new file mode 100644 index 00000000..9475e1aa --- /dev/null +++ b/frameworks/core/components/test/json/tab_content_creator.h @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_TAB_CONTENT_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_TAB_CONTENT_CREATOR_H + +#include "base/json/json_util.h" +#include "core/components/test/json/component_factory.h" +#include "core/pipeline/base/component.h" + +namespace OHOS::Ace { + +// creator for create tabbar component. +class TabContentCreator { +public: + static RefPtr CreateFromJson(const JsonValue& json, const JsonComponentFactory& factory); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_TAB_CONTENT_CREATOR_H diff --git a/frameworks/core/components/test/json/text_creator.cpp b/frameworks/core/components/test/json/text_creator.cpp new file mode 100644 index 00000000..850630ff --- /dev/null +++ b/frameworks/core/components/test/json/text_creator.cpp @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/text_creator.h" + +#include + +#include "base/log/log.h" +#include "base/utils/utils.h" +#include "core/components/common/properties/text_style.h" +#include "core/components/test/json/text_span_creator.h" +#include "core/components/test/json/text_style_creator.h" +#include "core/components/text/text_component.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { +namespace { + +constexpr TextAlign TEXT_ALIGN_METHODS[] = { TextAlign::LEFT, TextAlign::RIGHT, TextAlign::CENTER, TextAlign::JUSTIFY, + TextAlign::START, TextAlign::END }; +constexpr TextOverflow TEXT_OVERFLOW_METHODS[] = { TextOverflow::CLIP, TextOverflow::ELLIPSIS }; +constexpr TextDirection TEXT_DIRECTION_METHODS[] = { TextDirection::LTR, TextDirection::RTL, TextDirection::INHERIT }; + +} // namespace + +RefPtr TextCreator::CreateFromJson(const JsonValue& componentJson, const JsonComponentFactory& factory) +{ + LOGD("CreateFromJson Text"); + auto data = componentJson.GetString(TEXT_DATA); + auto text = AceType::MakeRefPtr(data); + TextStyle textStyle; + if (componentJson.Contains(TEXT_STYLE) && componentJson.GetValue(TEXT_STYLE)->IsObject()) { + textStyle = TextStyleCreator::CreateFromJson(*componentJson.GetValue(TEXT_STYLE)); + } + if (componentJson.Contains(TEXT_ALIGN) && componentJson.GetValue(TEXT_ALIGN)->IsNumber()) { + textStyle.SetTextAlign( + ConvertIntToEnum(componentJson.GetValue(TEXT_ALIGN)->GetInt(), TEXT_ALIGN_METHODS, TextAlign::START)); + } + if (componentJson.Contains(TEXT_OVERFLOW) && componentJson.GetValue(TEXT_OVERFLOW)->IsNumber()) { + textStyle.SetTextOverflow(ConvertIntToEnum( + componentJson.GetValue(TEXT_OVERFLOW)->GetInt(), TEXT_OVERFLOW_METHODS, TextOverflow::CLIP)); + } + if (componentJson.Contains(TEXT_DIRECTION) && componentJson.GetValue(TEXT_DIRECTION)->IsNumber()) { + text->SetTextDirection(ConvertIntToEnum( + componentJson.GetValue(TEXT_DIRECTION)->GetInt(), TEXT_DIRECTION_METHODS, TextDirection::LTR)); + } + if (componentJson.Contains(TEXT_MAX_LINES) && componentJson.GetValue(TEXT_MAX_LINES)->IsNumber()) { + textStyle.SetMaxLines(componentJson.GetValue(TEXT_MAX_LINES)->GetUInt()); + } + text->SetTextStyle(textStyle); + auto children = factory.CreateChildComponent(componentJson); + for (const auto& child : children) { + text->AppendChild(child); + } + return text; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/json/text_creator.h b/frameworks/core/components/test/json/text_creator.h new file mode 100644 index 00000000..86c6743e --- /dev/null +++ b/frameworks/core/components/test/json/text_creator.h @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_TEXT_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_TEXT_CREATOR_H + +#include "base/json/json_util.h" +#include "core/components/common/layout/constants.h" +#include "core/components/test/json/component_factory.h" +#include "core/pipeline/base/component.h" + +namespace OHOS::Ace { + +// creator for create text component. +class TextCreator { +public: + static RefPtr CreateFromJson(const JsonValue& json, const JsonComponentFactory& factory); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_TEXT_CREATOR_H diff --git a/frameworks/core/components/test/json/text_field_creator.cpp b/frameworks/core/components/test/json/text_field_creator.cpp new file mode 100644 index 00000000..6e1e3a66 --- /dev/null +++ b/frameworks/core/components/test/json/text_field_creator.cpp @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/text_field_creator.h" + +#include "base/json/json_util.h" +#include "core/components/test/json/color_creator.h" +#include "core/components/test/json/decoration_creator.h" +#include "core/components/test/json/text_style_creator.h" +#include "core/components/text_field/text_field_component.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { + +RefPtr TextFieldCreator::CreateFromJson(const JsonValue& json, const JsonComponentFactory&) +{ + LOGD("CreateFromJson TextField"); + std::string classType = json.GetValue(CLASS_NAME)->GetString(); + if (classType != TEXT_FIELD_NAME) { + LOGE("Create TextField err: not a textField json."); + return nullptr; + } + + auto textField = AceType::MakeRefPtr(); + + int32_t align = json.GetInt(TEXT_ALIGN, static_cast(TextAlign::START)); + textField->SetTextAlign(static_cast(align)); + + int32_t direction = json.GetInt(TEXT_OVERFLOW, static_cast(TextDirection::INHERIT)); + textField->SetTextDirection(static_cast(direction)); + + textField->SetObscure(json.GetBool(OBSCURE_TEXT, false)); + textField->SetEnabled(json.GetBool(TEXT_FIELD_ENABLED, true)); + textField->SetAutoFocus(json.GetBool(TEXT_FIELD_AUTO_FOCUS, false)); + textField->SetTextMaxLines(json.GetUInt(TEXT_FIELD_MAX_LINES, 1)); + const uint32_t DEFAULT_LENGTH_LIMIT = std::numeric_limits::max(); + uint32_t maxLength = json.GetUInt(TEXT_FIELD_MAX_LENGTH, DEFAULT_LENGTH_LIMIT); + if (maxLength != DEFAULT_LENGTH_LIMIT) { + textField->SetMaxLength(maxLength); + } + textField->SetTextInputType( + CastToTextInputType(json.GetInt(TEXT_FIELD_TYPE, static_cast(TextInputType::TEXT)))); + textField->SetAction( + CastToTextInputAction(json.GetInt(TEXT_FIELD_ACTION, static_cast(TextInputAction::UNSPECIFIED)))); + textField->SetActionLabel(json.GetString(TEXT_FIELD_ACTION_LABEL)); + + auto temp = json.GetValue(TEXT_STYLE); + if (temp && temp->IsObject()) { + textField->SetTextStyle(TextStyleCreator::CreateFromJson(*temp)); + } + + temp = json.GetValue(DECORATION_NAME); + if (temp && temp->IsObject()) { + textField->SetDecoration(DecorationCreator::CreateFromJson(*temp)); + } + + temp = json.GetValue(CURSOR_COLOR); + if (temp && temp->IsObject()) { + textField->SetCursorColor(ColorCreator::CreateFromJson(*temp)); + } + + textField->SetPlaceholder(json.GetString(TEXT_FIELD_PLACEHOLDER)); + temp = json.GetValue(TEXT_FIELD_PLACEHOLDER_COLOR); + if (temp && temp->IsObject()) { + textField->SetPlaceholderColor(ColorCreator::CreateFromJson(*temp)); + } + + textField->SetExtend(json.GetBool(TEXT_FIELD_EXTEND, false)); + textField->SetIconImage(json.GetString(TEXT_FIELD_ICON_IMAGE)); + + textField->SetOnTextChange(EventMarker { json.GetString(TEXT_FIELD_ON_TEXT_CHANGE) }); + textField->SetOnFinishInput(EventMarker { json.GetString(TEXT_FIELD_ON_FINISH_INPUT) }); + textField->SetOnTap(EventMarker { json.GetString(TEXT_FIELD_ON_TAP) }); + return textField; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/json/text_field_creator.h b/frameworks/core/components/test/json/text_field_creator.h new file mode 100644 index 00000000..5119a367 --- /dev/null +++ b/frameworks/core/components/test/json/text_field_creator.h @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_TEXT_FIELD_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_TEXT_FIELD_CREATOR_H + +#include "base/memory/referenced.h" + +namespace OHOS::Ace { + +class Component; +class JsonValue; +class JsonComponentFactory; + +class TextFieldCreator { +public: + static RefPtr CreateFromJson(const JsonValue& json, const JsonComponentFactory& factory); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_TEXT_FIELD_CREATOR_H diff --git a/frameworks/core/components/test/json/text_span_creator.cpp b/frameworks/core/components/test/json/text_span_creator.cpp new file mode 100644 index 00000000..c9ff4e35 --- /dev/null +++ b/frameworks/core/components/test/json/text_span_creator.cpp @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/text_span_creator.h" + +#include "base/log/log.h" +#include "core/components/common/properties/text_style.h" +#include "core/components/test/json/text_style_creator.h" +#include "core/components/text_span/text_span_component.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { + +RefPtr TextSpanCreator::CreateFromJson(const JsonValue& componentJson, const JsonComponentFactory& factory) +{ + LOGD("CreateFromJson TextSpan"); + auto data = componentJson.GetString(TEXT_DATA); + auto textSpan = AceType::MakeRefPtr(data); + if (componentJson.Contains(TEXT_STYLE) && componentJson.GetValue(TEXT_STYLE)->IsObject()) { + auto spanStyle = TextStyleCreator::CreateFromJson(*componentJson.GetValue(TEXT_STYLE)); + textSpan->SetTextStyle(spanStyle); + } + auto children = factory.CreateChildComponent(componentJson); + for (const auto& child : children) { + textSpan->AppendChild(child); + } + return textSpan; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/json/text_span_creator.h b/frameworks/core/components/test/json/text_span_creator.h new file mode 100644 index 00000000..49ce822a --- /dev/null +++ b/frameworks/core/components/test/json/text_span_creator.h @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_TEXT_SPAN_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_TEXT_SPAN_CREATOR_H + +#include "core/components/test/json/component_factory.h" +#include "core/pipeline/base/component.h" + +namespace OHOS::Ace { + +class TextSpanCreator { +public: + static RefPtr CreateFromJson(const JsonValue& json, const JsonComponentFactory& factory); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_TEXT_SPAN_CREATOR_H diff --git a/frameworks/core/components/test/json/text_style_creator.cpp b/frameworks/core/components/test/json/text_style_creator.cpp new file mode 100644 index 00000000..f44c2e67 --- /dev/null +++ b/frameworks/core/components/test/json/text_style_creator.cpp @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/text_style_creator.h" + +#include "base/log/log.h" +#include "core/components/common/properties/color.h" +#include "core/components/test/json/color_creator.h" +#include "core/components/test/json/shadow_creator.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { +namespace { + +constexpr FontWeight FONT_WEIGHTS[] = { FontWeight::W100, FontWeight::W200, FontWeight::W300, FontWeight::W400, + FontWeight::W500, FontWeight::W600, FontWeight::W700, FontWeight::W800, FontWeight::W900, FontWeight::BOLD, + FontWeight::NORMAL, FontWeight::BOLDER, FontWeight::LIGHTER }; +constexpr FontStyle FONT_STYLES[] = { FontStyle::NORMAL, FontStyle::ITALIC }; +constexpr TextBaseline BASE_LINES[] = { TextBaseline::ALPHABETIC, TextBaseline::IDEOGRAPHIC }; +constexpr TextDecoration TEXT_DECORATIONS[] = { TextDecoration::NONE, TextDecoration::UNDERLINE, + TextDecoration::OVERLINE, TextDecoration::LINE_THROUGH, TextDecoration::INHERIT }; + +} // namespace + +TextStyle TextStyleCreator::CreateFromJson(const JsonValue& json) +{ + LOGD("CreateFromJson TextStyle"); + TextStyle textStyle; + std::string classType = json.GetValue(CLASS_NAME)->GetString(); + if (classType != TEXT_STYLE_NAME) { + LOGW("Create TextStyle err: not a TextStyle json."); + // Currently return a default text style has no side effect. + return textStyle; + } + if (json.Contains(TEXT_FONT_SIZE) && json.GetValue(TEXT_FONT_SIZE)->IsNumber()) { + textStyle.SetFontSize(Dimension(json.GetValue(TEXT_FONT_SIZE)->GetDouble(), DimensionUnit::PX)); + } + if (json.Contains(TEXT_FONT_WEIGHT) && json.GetValue(TEXT_FONT_WEIGHT)->IsNumber()) { + textStyle.SetFontWeight( + ConvertIntToEnum(json.GetValue(TEXT_FONT_WEIGHT)->GetInt(), FONT_WEIGHTS, FontWeight::NORMAL)); + } + if (json.Contains(TEXT_FONT_STYLE) && json.GetValue(TEXT_FONT_STYLE)->IsNumber()) { + textStyle.SetFontStyle( + ConvertIntToEnum(json.GetValue(TEXT_FONT_STYLE)->GetInt(), FONT_STYLES, FontStyle::NORMAL)); + } + if (json.Contains(TEXT_BASE_LINE) && json.GetValue(TEXT_BASE_LINE)->IsNumber()) { + textStyle.SetTextBaseline( + ConvertIntToEnum(json.GetValue(TEXT_BASE_LINE)->GetInt(), BASE_LINES, TextBaseline::ALPHABETIC)); + } + if (json.Contains(TEXT_COLOR) && json.GetValue(TEXT_COLOR)->IsObject()) { + auto colorJson = json.GetValue(TEXT_COLOR); + auto color = ColorCreator::CreateFromJson(*colorJson); + textStyle.SetTextColor(color); + } + if (json.Contains(TEXT_DECORATION) && json.GetValue(TEXT_DECORATION)->IsNumber()) { + textStyle.SetTextDecoration( + ConvertIntToEnum(json.GetValue(TEXT_DECORATION)->GetInt(), TEXT_DECORATIONS, TextDecoration::NONE)); + } + if (json.Contains(SHADOW) && json.GetValue(SHADOW)->IsObject()) { + auto shadow = ShadowCreator::CreateFromJson(*(json.GetValue(SHADOW))); + textStyle.SetShadow(shadow); + } + if (json.Contains(TEXT_WORD_SPACING) && json.GetValue(TEXT_WORD_SPACING)->IsNumber()) { + textStyle.SetWordSpacing(json.GetValue(TEXT_WORD_SPACING)->GetDouble()); + } + auto arrayJsonObject = json.GetValue(TEXT_FONT_FAMILIES); + if (arrayJsonObject && arrayJsonObject->IsArray()) { + std::vector fontFamilies_; + for (int32_t i = 0; i < arrayJsonObject->GetArraySize(); i++) { + fontFamilies_.emplace_back(arrayJsonObject->GetArrayItem(i)->GetString()); + } + textStyle.SetFontFamilies(fontFamilies_); + } + if (json.Contains(TEXT_LINE_HEIGHT) && json.GetValue(TEXT_LINE_HEIGHT)->IsNumber()) { + textStyle.SetLineHeight(Dimension(json.GetValue(TEXT_LINE_HEIGHT)->GetDouble(), DimensionUnit::PX)); + } + if (json.Contains(TEXT_LETTER_SPACING) && json.GetValue(TEXT_LETTER_SPACING)->IsNumber()) { + textStyle.SetLetterSpacing(json.GetValue(TEXT_LETTER_SPACING)->GetDouble()); + } + if (json.Contains(TEXT_ADAPT) && json.GetValue(TEXT_ADAPT)->IsBool()) { + if (json.Contains(TEXT_ADAPT_MIN_FONTSIZE) && json.GetValue(TEXT_ADAPT_MIN_FONTSIZE)->IsNumber()) { + textStyle.SetAdaptTextSize(textStyle.GetFontSize(), + Dimension(json.GetValue(TEXT_ADAPT_MIN_FONTSIZE)->GetDouble(), DimensionUnit::FP)); + } + } + return textStyle; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/json/text_style_creator.h b/frameworks/core/components/test/json/text_style_creator.h new file mode 100644 index 00000000..823f6999 --- /dev/null +++ b/frameworks/core/components/test/json/text_style_creator.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_TEXT_STYLE_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_TEXT_STYLE_CREATOR_H + +#include "base/json/json_util.h" +#include "core/components/common/properties/text_style.h" + +namespace OHOS::Ace { + +// Creator for creating text style component. +class TextStyleCreator { +public: + static TextStyle CreateFromJson(const JsonValue& json); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_TEXT_STYLE_CREATOR_H diff --git a/frameworks/core/components/test/json/texture_creator.cpp b/frameworks/core/components/test/json/texture_creator.cpp new file mode 100644 index 00000000..ef64b643 --- /dev/null +++ b/frameworks/core/components/test/json/texture_creator.cpp @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/texture_creator.h" + +#include "base/log/log.h" +#include "core/components/video/texture_component.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { + +RefPtr TextureCreator::CreateFromJson(const JsonValue& componentJson, const JsonComponentFactory& factory) +{ + LOGD("CreateFromJson texture"); + std::string classType = componentJson.GetValue(CLASS_NAME)->GetString(); + if (classType != TEXTURE_NAME) { + LOGE("Create texture err: not a texture json."); + return nullptr; + } + + auto texture = AceType::MakeRefPtr(); + if (componentJson.Contains(TEXTURE_SRC_ID) && componentJson.GetValue(TEXTURE_SRC_ID)->IsNumber()) { + texture->SetTextureId(componentJson.GetValue(TEXTURE_SRC_ID)->GetInt()); + } + + if (componentJson.Contains(TEXTURE_SRC_WIDTH) && componentJson.GetValue(TEXTURE_SRC_WIDTH)->IsNumber()) { + texture->SetSrcWidth(componentJson.GetValue(TEXTURE_SRC_WIDTH)->GetInt()); + } + + if (componentJson.Contains(TEXTURE_SRC_HEIGHT) && componentJson.GetValue(TEXTURE_SRC_HEIGHT)->IsNumber()) { + texture->SetSrcHeight(componentJson.GetValue(TEXTURE_SRC_HEIGHT)->GetInt()); + } + + if (componentJson.Contains(TEXTURE_FIT) && componentJson.GetValue(TEXTURE_FIT)->IsString()) { + auto fit = componentJson.GetValue(TEXTURE_FIT)->GetString(); + texture->SetFit(ConvertStrToFit(fit)); + } + + if (componentJson.Contains(CHILD) && componentJson.GetValue(CHILD)->IsObject()) { + auto childJson = componentJson.GetValue(CHILD); + auto child = factory.CreateComponent(*childJson); + texture->SetChild(child); + } + + return texture; +} + +ImageFit TextureCreator::ConvertStrToFit(const std::string& fit) +{ + ImageFit imageFit; + if (fit == "fill") { + imageFit = ImageFit::FILL; + } else if (fit == "contain") { + imageFit = ImageFit::CONTAIN; + } else if (fit == "cover") { + imageFit = ImageFit::COVER; + } else if (fit == "scaledown") { + imageFit = ImageFit::SCALEDOWN; + } else { + imageFit = ImageFit::NONE; + } + return imageFit; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/json/texture_creator.h b/frameworks/core/components/test/json/texture_creator.h new file mode 100644 index 00000000..6cc5e3da --- /dev/null +++ b/frameworks/core/components/test/json/texture_creator.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_TEXTURE_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_TEXTURE_CREATOR_H + +#include "base/json/json_util.h" +#include "core/components/common/layout/constants.h" +#include "core/components/test/json/component_factory.h" +#include "core/pipeline/base/component.h" + +namespace OHOS::Ace { + +// creator for create texture component. +class TextureCreator { +public: + static RefPtr CreateFromJson(const JsonValue& json, const JsonComponentFactory& factory); + +private: + static ImageFit ConvertStrToFit(const std::string& fit); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_TEXTURE_CREATOR_H diff --git a/frameworks/core/components/test/json/touch_listener_creator.cpp b/frameworks/core/components/test/json/touch_listener_creator.cpp new file mode 100644 index 00000000..b04b2354 --- /dev/null +++ b/frameworks/core/components/test/json/touch_listener_creator.cpp @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/touch_listener_creator.h" + +#include "core/components/touch_listener/touch_listener_component.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { + +RefPtr TouchListenerCreator::CreateFromJson(const JsonValue& json, const JsonComponentFactory& factory) +{ + auto children = factory.CreateChildComponent(json); + auto child = children.empty() ? nullptr : children.front(); + auto touchListener = AceType::MakeRefPtr(child); + touchListener->SetOnTouchDownId(EventMarker(json.GetString(ON_TOUCH_DOWN_EVENT))); + touchListener->SetOnTouchMoveId(EventMarker(json.GetString(ON_TOUCH_MOVE_EVENT))); + touchListener->SetOnTouchUpId(EventMarker(json.GetString(ON_TOUCH_UP_EVENT))); + touchListener->SetOnTouchCancel(EventMarker(json.GetString(ON_TOUCH_CANCEL_EVENT))); + return touchListener; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/json/touch_listener_creator.h b/frameworks/core/components/test/json/touch_listener_creator.h new file mode 100644 index 00000000..2b753db5 --- /dev/null +++ b/frameworks/core/components/test/json/touch_listener_creator.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_TOUCH_LISTENER_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_TOUCH_LISTENER_CREATOR_H + +#include "core/components/test/json/component_factory.h" + +namespace OHOS::Ace { + +class TouchListenerCreator final { +public: + static RefPtr CreateFromJson(const JsonValue& json, const JsonComponentFactory& factory); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_TOUCH_LISTENER_CREATOR_H diff --git a/frameworks/core/components/test/json/transform_creator.cpp b/frameworks/core/components/test/json/transform_creator.cpp new file mode 100644 index 00000000..d24a710e --- /dev/null +++ b/frameworks/core/components/test/json/transform_creator.cpp @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/transform_creator.h" + +#include "core/components/test/json/align_creator.h" +#include "core/components/test/json/offset_creator.h" +#include "core/components/transform/transform_component.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { + +RefPtr TransformCreator::CreateFromJson(const JsonValue& json, const JsonComponentFactory& factory) +{ + LOGD("CreateFromJson transform"); + if (!json.Contains(CLASS_NAME)) { + LOGE("Create TransformComponent error: not a transform class."); + return nullptr; + } + std::string classType = json.GetValue(CLASS_NAME)->GetString(); + if (classType != TRANSFORM_NAME) { + LOGE("Create TransformComponent error: not a transform json."); + return nullptr; + } + + auto transformComponent = AceType::MakeRefPtr(); + if (json.Contains(CHILD) && json.GetValue(CHILD)->IsObject()) { + auto childJson = json.GetValue(CHILD); + auto child = factory.CreateComponent(*childJson); + transformComponent->SetChild(child); + } + + if (json.Contains(ORIGIN) && json.GetValue(ORIGIN)->IsObject()) { + auto offset = OffsetCreator::CreateFromJson(*(json.GetValue(ORIGIN))); + transformComponent->SetOriginDimension(offset); + } + + if (json.Contains(TRANSFORM) && json.GetValue(TRANSFORM)->IsString()) { + std::string transform = json.GetValue(TRANSFORM)->GetString(); + if (transform == TRANSLATE || transform == SCALE || transform == ROTATE) { + performCreateFromJson(transform, json, transformComponent); + } + } + return transformComponent; +} + +void TransformCreator::performCreateFromJson( + const std::string& key, const JsonValue& json, RefPtr& component) +{ + Matrix4 result; + if (json.GetValue(PARAM)->IsObject()) { + auto paramJson = json.GetValue(PARAM); + if (paramJson->Contains(PARAM_X) && paramJson->GetValue(PARAM_X)->IsNumber() && paramJson->Contains(PARAM_Y) && + paramJson->GetValue(PARAM_Y)->IsNumber() && paramJson->Contains(PARAM_Z) && + paramJson->GetValue(PARAM_Z)->IsNumber()) { + double px = json.GetValue(PARAM)->GetValue(PARAM_X)->GetDouble(); + double py = json.GetValue(PARAM)->GetValue(PARAM_Y)->GetDouble(); + double pz = json.GetValue(PARAM)->GetValue(PARAM_Z)->GetDouble(); + if (key == TRANSLATE) { + result = Matrix4::CreateTranslate(px, py, 0.0f); + } else if (key == SCALE) { + result = Matrix4::CreateScale(px, py, 1.0f); + } else if (key == ROTATE && json.GetValue(ANGLE_VALUE)->IsNumber()) { + float angle = json.GetValue(ANGLE_VALUE)->GetDouble(); + result = Matrix4::CreateIdentity(); + result.SetEntry(INDEX_THREE, INDEX_TWO, PERSPECTIVE); + result.Rotate(angle, px, py, pz); + } + } + } else if (key == SCALE && json.GetValue(SCALE_VALUE)->IsNumber()) { + float scale = json.GetValue(SCALE_VALUE)->GetDouble(); + result = Matrix4::CreateScale(scale, scale, 1.0f); + } else if (key == ROTATE && json.GetValue(ANGLE_VALUE)->IsNumber()) { + float angle = json.GetValue(ANGLE_VALUE)->GetDouble(); + result = Matrix4::CreateRotate(angle, 0.0f, 0.0f, 1.0f); + } + + component->SetTransform(result); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/json/transform_creator.h b/frameworks/core/components/test/json/transform_creator.h new file mode 100644 index 00000000..4ffe205f --- /dev/null +++ b/frameworks/core/components/test/json/transform_creator.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_TRANSFORM_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_TRANSFORM_CREATOR_H + +#include "base/json/json_util.h" +#include "core/components/test/json/component_factory.h" +#include "core/components/transform/transform_component.h" +#include "core/pipeline/base/component.h" + +namespace OHOS::Ace { + +class TransformCreator { +public: + static RefPtr CreateFromJson(const JsonValue& json, const JsonComponentFactory& factory); + static void performCreateFromJson( + const std::string& key, const JsonValue& json, RefPtr& component); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_TRANSFORM_CREATOR_H diff --git a/frameworks/core/components/test/json/tween_creator.cpp b/frameworks/core/components/test/json/tween_creator.cpp new file mode 100644 index 00000000..3525b93a --- /dev/null +++ b/frameworks/core/components/test/json/tween_creator.cpp @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/tween_creator.h" + +#include "core/components/test/json/tween_option_creator.h" +#include "core/components/tween/tween_component.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { + +RefPtr TweenCreator::CreateFromJson(const JsonValue& json, const JsonComponentFactory& factory) +{ + LOGD("CreateFromJson Tween"); + TweenOption option; + if (json.Contains(TWEEN_OPTION) && json.GetValue(TWEEN_OPTION)->IsObject()) { + option = TweenOptionCreator::CreateFromJson(*(json.GetValue(TWEEN_OPTION))); + } + ComposeId id; + if (json.Contains(COMPOSE_ID) && json.GetValue(COMPOSE_ID)->IsString()) { + id = json.GetValue(COMPOSE_ID)->GetString(); + } + std::string name; + if (json.Contains(NAME) && json.GetValue(NAME)->IsString()) { + name = json.GetValue(NAME)->GetString(); + } + RefPtr child; + if (json.Contains(COMPOSE_DATA)) { + const auto& composeData = json.GetValue(COMPOSE_DATA); + child = factory.CreateComponent(*composeData); + } + auto tweenComponent = AceType::MakeRefPtr(id, name, child); + tweenComponent->SetTweenOption(option); + return tweenComponent; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/json/tween_creator.h b/frameworks/core/components/test/json/tween_creator.h new file mode 100644 index 00000000..4a610618 --- /dev/null +++ b/frameworks/core/components/test/json/tween_creator.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_TWEEN_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_TWEEN_CREATOR_H + +#include "base/json/json_util.h" +#include "core/components/test/json/component_factory.h" +#include "core/pipeline/base/component.h" + +namespace OHOS::Ace { + +class TweenCreator { +public: + static RefPtr CreateFromJson(const JsonValue& json, const JsonComponentFactory& factory); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_TWEEN_CREATOR_H diff --git a/frameworks/core/components/test/json/tween_option_creator.cpp b/frameworks/core/components/test/json/tween_option_creator.cpp new file mode 100644 index 00000000..25670789 --- /dev/null +++ b/frameworks/core/components/test/json/tween_option_creator.cpp @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/tween_option_creator.h" + +#include + +#include "base/geometry/dimension.h" +#include "base/geometry/offset.h" +#include "core/animation/curve_animation.h" +#include "core/components/test/json/offset_creator.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { +namespace { + +const std::map> CURVE_MAP = { + { "linear", Curves::LINEAR }, + { "ease", Curves::EASE }, + { "ease-in", Curves::EASE_IN }, + { "ease-out", Curves::EASE_OUT }, + { "ease-in-out", Curves::EASE_IN_OUT }, +}; + +} // namespace + +TweenOption TweenOptionCreator::CreateFromJson(const JsonValue& json) +{ + TweenOption tweenOption; + if (json.Contains(OPTION_TRANSLATE) && json.GetValue(OPTION_TRANSLATE)->IsObject()) { + Offset offsetComponent = OffsetCreator::CreateFromJson(*(json.GetValue(OPTION_TRANSLATE))); + double deltaX = offsetComponent.GetX(); + double deltaY = offsetComponent.GetY(); + auto translate = AceType::MakeRefPtr>(DimensionOffset(Dimension(), Dimension()), + DimensionOffset(Dimension(deltaX, DimensionUnit::PX), Dimension(deltaY, DimensionUnit::PX)), nullptr); + tweenOption.SetTranslateAnimations(AnimationType::TRANSLATE, translate); + } + if (json.Contains(OPTION_TRANSLATE_X) && json.GetValue(OPTION_TRANSLATE_X)->IsNumber()) { + double deltaX = json.GetValue(OPTION_TRANSLATE_X)->GetDouble(); + auto translateX = + AceType::MakeRefPtr>(DimensionOffset(Dimension(), Dimension()), + DimensionOffset(Dimension(deltaX, DimensionUnit::PX), Dimension()), nullptr); + tweenOption.SetTranslateAnimations(AnimationType::TRANSLATE_X, translateX); + } + if (json.Contains(OPTION_TRANSLATE_Y) && json.GetValue(OPTION_TRANSLATE_Y)->IsNumber()) { + double deltaY = json.GetValue(OPTION_TRANSLATE_Y)->GetDouble(); + auto translateY = + AceType::MakeRefPtr>(DimensionOffset(Dimension(), Dimension()), + DimensionOffset(Dimension(), Dimension(deltaY, DimensionUnit::PX)), nullptr); + tweenOption.SetTranslateAnimations(AnimationType::TRANSLATE_Y, translateY); + } + if (json.Contains(OPTION_SCALE) && json.GetValue(OPTION_SCALE)->IsNumber()) { + auto scale = + AceType::MakeRefPtr>(1.0f, json.GetValue(OPTION_SCALE)->GetDouble(), nullptr); + tweenOption.SetTransformFloatAnimation(AnimationType::SCALE, scale); + } + if (json.Contains(OPTION_SCALE_X) && json.GetValue(OPTION_SCALE_X)->IsNumber()) { + auto scaleX = + AceType::MakeRefPtr>(1.0f, json.GetValue(OPTION_SCALE)->GetDouble(), nullptr); + tweenOption.SetTransformFloatAnimation(AnimationType::SCALE_X, scaleX); + } + if (json.Contains(OPTION_SCALE_Y) && json.GetValue(OPTION_SCALE_Y)->IsNumber()) { + auto scaleY = + AceType::MakeRefPtr>(1.0f, json.GetValue(OPTION_SCALE)->GetDouble(), nullptr); + tweenOption.SetTransformFloatAnimation(AnimationType::SCALE_Y, scaleY); + } + if (json.Contains(OPTION_ROTATE_Z) && json.GetValue(OPTION_ROTATE_Z)->IsNumber()) { + auto rotateZ = + AceType::MakeRefPtr>(0.0f, json.GetValue(OPTION_ROTATE_Z)->GetDouble(), nullptr); + tweenOption.SetTransformFloatAnimation(AnimationType::ROTATE_Z, rotateZ); + } + if (json.Contains(OPTION_ROTATE_X) && json.GetValue(OPTION_ROTATE_X)->IsNumber()) { + auto rotateX = + AceType::MakeRefPtr>(0.0f, json.GetValue(OPTION_ROTATE_X)->GetDouble(), nullptr); + tweenOption.SetTransformFloatAnimation(AnimationType::ROTATE_X, rotateX); + } + if (json.Contains(OPTION_ROTATE_Y) && json.GetValue(OPTION_ROTATE_Y)->IsNumber()) { + auto rotateY = + AceType::MakeRefPtr>(0.0f, json.GetValue(OPTION_ROTATE_Y)->GetDouble(), nullptr); + tweenOption.SetTransformFloatAnimation(AnimationType::ROTATE_Y, rotateY); + } + if (json.Contains(DURATION) && json.GetValue(DURATION)->IsNumber()) { + tweenOption.SetDuration(json.GetValue(DURATION)->GetInt()); + } + if (json.Contains(DELAY) && json.GetValue(DELAY)->IsNumber()) { + tweenOption.SetDelay(json.GetValue(DELAY)->GetInt()); + } + if (json.Contains(ITERATION) && json.GetValue(ITERATION)->IsNumber()) { + tweenOption.SetIteration(json.GetValue(ITERATION)->GetInt()); + } + if (json.Contains(FILL_MODE) && json.GetValue(FILL_MODE)->IsString()) { + if (json.GetValue(FILL_MODE)->GetString() == "forwards") { + tweenOption.SetFillMode(FillMode::FORWARDS); + } else { + tweenOption.SetFillMode(FillMode::NONE); + } + } + if (json.Contains(CURVE) && json.GetValue(CURVE)->IsString()) { + auto curve = CURVE_MAP.find(json.GetValue(CURVE)->GetString()); + if (curve != CURVE_MAP.end()) { + tweenOption.SetCurve(curve->second); + } else { + tweenOption.SetCurve(Curves::EASE); + } + } + return tweenOption; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/json/tween_option_creator.h b/frameworks/core/components/test/json/tween_option_creator.h new file mode 100644 index 00000000..1f3a4029 --- /dev/null +++ b/frameworks/core/components/test/json/tween_option_creator.h @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_TWEEN_OPTION_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_TWEEN_OPTION_CREATOR_H + +#include "base/json/json_util.h" +#include "core/components/common/properties/tween_option.h" + +namespace OHOS::Ace { + +class TweenOptionCreator { +public: + static TweenOption CreateFromJson(const JsonValue& json); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_TWEEN_OPTION_CREATOR_H diff --git a/frameworks/core/components/test/json/video_creator.cpp b/frameworks/core/components/test/json/video_creator.cpp new file mode 100644 index 00000000..becf9e01 --- /dev/null +++ b/frameworks/core/components/test/json/video_creator.cpp @@ -0,0 +1,124 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/video_creator.h" + +#include "base/log/log.h" +#include "core/components/video/video_component.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { + +RefPtr VideoCreator::CreateFromJson(const JsonValue& componentJson, const JsonComponentFactory& factory) +{ + LOGD("CreateFromJson video"); + std::string classType = componentJson.GetValue(CLASS_NAME)->GetString(); + if (classType != VIDEO_NAME) { + LOGE("Create video err: not a video json."); + return nullptr; + } + + if (!componentJson.Contains(VIDEO_SRC) || !componentJson.GetValue(VIDEO_SRC)->IsString()) { + LOGE("Create video err: no src param."); + return nullptr; + } + auto video = AceType::MakeRefPtr(); + video->SetSrc(componentJson.GetValue(VIDEO_SRC)->GetString()); + + if (componentJson.Contains(VIDEO_AUTOPLAY) && componentJson.GetValue(VIDEO_AUTOPLAY)->IsBool()) { + video->SetAutoPlay(componentJson.GetValue(VIDEO_AUTOPLAY)->GetBool()); + } + + if (componentJson.Contains(VIDEO_CONTROLS) && componentJson.GetValue(VIDEO_CONTROLS)->IsBool()) { + video->SetNeedControls(componentJson.GetValue(VIDEO_CONTROLS)->GetBool()); + } + + if (componentJson.Contains(VIDEO_POSTER) && componentJson.GetValue(VIDEO_POSTER)->IsString()) { + video->SetPoster(componentJson.GetValue(VIDEO_POSTER)->GetString()); + } + + if (componentJson.Contains(VIDEO_MUTED) && componentJson.GetValue(VIDEO_MUTED)->IsBool()) { + video->SetMute(componentJson.GetValue(VIDEO_MUTED)->GetBool()); + } + + if (componentJson.Contains(VIDEO_FIT) && componentJson.GetValue(VIDEO_FIT)->IsString()) { + auto imageFit = componentJson.GetValue(VIDEO_FIT)->GetString(); + video->SetFit(ConvertStrToFit(imageFit)); + } + BuildEventFromJson(componentJson, video); + + return video; +} +void VideoCreator::BuildEventFromJson(const JsonValue& componentJson, const RefPtr& video) +{ + if (componentJson.Contains(VIDEO_PREPARED_EVENT_ID) && + componentJson.GetValue(VIDEO_PREPARED_EVENT_ID)->IsString()) { + video->SetPreparedEventId(EventMarker(componentJson.GetValue(VIDEO_PREPARED_EVENT_ID)->GetString())); + } + + if (componentJson.Contains(VIDEO_START_EVENT_ID) && componentJson.GetValue(VIDEO_START_EVENT_ID)->IsString()) { + video->SetStartEventId(EventMarker(componentJson.GetValue(VIDEO_START_EVENT_ID)->GetString())); + } + + if (componentJson.Contains(VIDEO_PAUSE_EVENT_ID) && componentJson.GetValue(VIDEO_PAUSE_EVENT_ID)->IsString()) { + video->SetPauseEventId(EventMarker(componentJson.GetValue(VIDEO_PAUSE_EVENT_ID)->GetString())); + } + + if (componentJson.Contains(VIDEO_FINISH_EVENT_ID) && componentJson.GetValue(VIDEO_FINISH_EVENT_ID)->IsString()) { + video->SetFinishEventId(EventMarker(componentJson.GetValue(VIDEO_FINISH_EVENT_ID)->GetString())); + } + + if (componentJson.Contains(VIDEO_ERROR_EVENT_ID) && componentJson.GetValue(VIDEO_ERROR_EVENT_ID)->IsString()) { + video->SetErrorEventId(EventMarker(componentJson.GetValue(VIDEO_ERROR_EVENT_ID)->GetString())); + } + + if (componentJson.Contains(VIDEO_SEEKING_EVENT_ID) && componentJson.GetValue(VIDEO_SEEKING_EVENT_ID)->IsString()) { + video->SetSeekingEventId(EventMarker(componentJson.GetValue(VIDEO_SEEKING_EVENT_ID)->GetString())); + } + + if (componentJson.Contains(VIDEO_SEEKED_EVENT_ID) && componentJson.GetValue(VIDEO_SEEKED_EVENT_ID)->IsString()) { + video->SetSeekedEventId(EventMarker(componentJson.GetValue(VIDEO_SEEKED_EVENT_ID)->GetString())); + } + + if (componentJson.Contains(VIDEO_TIMEUPDATE_EVENT_ID) && + componentJson.GetValue(VIDEO_TIMEUPDATE_EVENT_ID)->IsString()) { + video->SetTimeUpdateEventId(EventMarker(componentJson.GetValue(VIDEO_TIMEUPDATE_EVENT_ID)->GetString())); + } + + if (componentJson.Contains(VIDEO_FULLSCREENCHANGE_EVENT_ID) && + componentJson.GetValue(VIDEO_FULLSCREENCHANGE_EVENT_ID)->IsString()) { + video->SetFullscreenChangeEventId( + EventMarker(componentJson.GetValue(VIDEO_FULLSCREENCHANGE_EVENT_ID)->GetString())); + } +} + +ImageFit VideoCreator::ConvertStrToFit(const std::string& fit) +{ + ImageFit imageFit; + if (fit == "fill") { + imageFit = ImageFit::FILL; + } else if (fit == "contain") { + imageFit = ImageFit::CONTAIN; + } else if (fit == "cover") { + imageFit = ImageFit::COVER; + } else if (fit == "scaledown") { + imageFit = ImageFit::SCALEDOWN; + } else { + imageFit = ImageFit::NONE; + } + return imageFit; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/json/video_creator.h b/frameworks/core/components/test/json/video_creator.h new file mode 100644 index 00000000..00ffc526 --- /dev/null +++ b/frameworks/core/components/test/json/video_creator.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_VIDEO_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_VIDEO_CREATOR_H + +#include "base/json/json_util.h" +#include "core/components/test/json/component_factory.h" +#include "core/components/video/video_component.h" +#include "core/pipeline/base/component.h" + +namespace OHOS::Ace { + +// creator for create image component. +class VideoCreator { +public: + static RefPtr CreateFromJson(const JsonValue& json, const JsonComponentFactory& factory); + +private: + static ImageFit ConvertStrToFit(const std::string& fit); + static void BuildEventFromJson(const JsonValue& json, const RefPtr& video); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_VIDEO_CREATOR_H diff --git a/frameworks/core/components/test/json/wrap_creator.cpp b/frameworks/core/components/test/json/wrap_creator.cpp new file mode 100644 index 00000000..175a2481 --- /dev/null +++ b/frameworks/core/components/test/json/wrap_creator.cpp @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/json/wrap_creator.h" + +#include + +#include "base/log/log.h" +#include "base/utils/utils.h" +#include "core/components/box/box_component.h" +#include "core/components/wrap/wrap_component.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { +namespace { + +const WrapDirection WRAP_DIRECTION[] = { WrapDirection::HORIZONTAL, WrapDirection::VERTICAL }; +const WrapAlignment WRAP_ALIGNMENT[] = { WrapAlignment::START, WrapAlignment::END, WrapAlignment::CENTER }; +const WrapAlignment WRAP_MAIN_ALIGNMENT[] = { WrapAlignment::START, WrapAlignment::END, WrapAlignment::CENTER, + WrapAlignment::SPACE_AROUND, WrapAlignment::SPACE_BETWEEN }; +const WrapAlignment WRAP_CROSS_ALIGNMENT[] = { WrapAlignment::START, WrapAlignment::END, WrapAlignment::CENTER, + WrapAlignment::STRETCH }; + +} // namespace + +RefPtr WrapCreator::CreateFromJson(const JsonValue& componentJson, const JsonComponentFactory& factory) +{ + WrapDirection direction = WrapDirection::HORIZONTAL; + double space = 0.0; + double contentSpace = 0.0; + WrapAlignment alignment = WrapAlignment::START; + WrapAlignment mainAlignment = WrapAlignment::SPACE_AROUND; + WrapAlignment crossAlignment = WrapAlignment::CENTER; + auto children = factory.CreateChildComponent(componentJson); + + if (componentJson.Contains(SPACING) && componentJson.GetValue(SPACING)->IsNumber()) { + space = componentJson.GetValue(SPACING)->GetDouble(); + } + if (componentJson.Contains(CONTENT_SPACING) && componentJson.GetValue(CONTENT_SPACING)->IsNumber()) { + contentSpace = componentJson.GetValue(CONTENT_SPACING)->GetDouble(); + } + if (componentJson.Contains(ALIGNMENT) && componentJson.GetValue(ALIGNMENT)->IsNumber()) { + alignment = ConvertIntToEnum(componentJson.GetValue(ALIGNMENT)->GetInt(), WRAP_ALIGNMENT, WrapAlignment::START); + } + if (componentJson.Contains(CROSS_ALIGNMENT) && componentJson.GetValue(CROSS_ALIGNMENT)->IsNumber()) { + crossAlignment = ConvertIntToEnum( + componentJson.GetValue(CROSS_ALIGNMENT)->GetInt(), WRAP_CROSS_ALIGNMENT, WrapAlignment::CENTER); + } + if (componentJson.Contains(MAIN_ALIGNMENT) && componentJson.GetValue(MAIN_ALIGNMENT)->IsNumber()) { + mainAlignment = ConvertIntToEnum( + componentJson.GetValue(MAIN_ALIGNMENT)->GetInt(), WRAP_MAIN_ALIGNMENT, WrapAlignment::SPACE_AROUND); + } + if (componentJson.Contains(DIRECTION) && componentJson.GetValue(DIRECTION)->IsNumber()) { + direction = + ConvertIntToEnum(componentJson.GetValue(DIRECTION)->GetInt(), WRAP_DIRECTION, WrapDirection::HORIZONTAL); + } + RefPtr wrap = AceType::MakeRefPtr(space, contentSpace, children); + wrap->SetMainAlignment(mainAlignment); + wrap->SetAlignment(alignment); + wrap->SetCrossAlignment(crossAlignment); + wrap->SetDirection(direction); + return wrap; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/json/wrap_creator.h b/frameworks/core/components/test/json/wrap_creator.h new file mode 100644 index 00000000..e9741e62 --- /dev/null +++ b/frameworks/core/components/test/json/wrap_creator.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_WRAP_CREATOR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_WRAP_CREATOR_H + +#include "base/json/json_util.h" +#include "core/components/test/json/component_factory.h" +#include "core/pipeline/base/component.h" + +namespace OHOS::Ace { + +class WrapCreator { +public: + static RefPtr CreateFromJson(const JsonValue& componentJson, const JsonComponentFactory& factory); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_JSON_WRAP_CREATOR_H diff --git a/frameworks/core/components/test/unittest/BUILD.gn b/frameworks/core/components/test/unittest/BUILD.gn new file mode 100644 index 00000000..ea18a6f7 --- /dev/null +++ b/frameworks/core/components/test/unittest/BUILD.gn @@ -0,0 +1,75 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +group("unittest") { + testonly = true + deps = [ + "align:unittest", + "border:unittest", + "box:unittest", + "button:unittest", + "checkable:unittest", + "click_effect:unittest", + "decoration:unittest", + "dialog:unittest", + "display:unittest", + "divider:unittest", + "drag_bar:unittest", + "flex:unittest", + "gestures:unittest", + "grid:unittest", + "grid_layout:unittest", + "image:unittest", + "image_animator:unittest", + "indexer:unittest", + "list:unittest", + "marquee:unittest", + "padding:unittest", + "progress:unittest", + "rating:unittest", + "refresh:unittest", + "rotation:unittest", + "scroll:unittest", + "semimodal:unittest", + "shadow:unittest", + "slider:unittest", + "stack:unittest", + "stage:unittest", + "svg:unittest", + "swiper:unittest", + "tabbar:unittest", + "text:unittest", + "transform:unittest", + "transition:unittest", + "tween:unittest", + "view_update:unittest", + "wrap:unittest", + ] + if (!is_wearable_product) { + deps += [ + "camera:unittest", + "marquee:unittest", + "menu:unittest", + "picker:unittest", + "piece:unittest", + "select:unittest", + "tabbar:unittest", + "text_field:unittest", + "text_select:unittest", + "video:unittest", + ] + } +} diff --git a/frameworks/core/components/test/unittest/align/BUILD.gn b/frameworks/core/components/test/unittest/align/BUILD.gn new file mode 100644 index 00000000..aeda1e8e --- /dev/null +++ b/frameworks/core/components/test/unittest/align/BUILD.gn @@ -0,0 +1,57 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +if (is_standard_system) { + module_output_path = "ace_engine_standard/backenduicomponent/align" +} + +ohos_unittest("AlignCreatorTest") { + module_out_path = module_output_path + + sources = [ "align_creator_test.cpp" ] + + configs = [ + ":config_json_creator_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "$ace_root/frameworks/core/components/test:json", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + deps += [ "$ace_root/frameworks/bridge:js_framework_ohos" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_json_creator_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":AlignCreatorTest" ] +} diff --git a/frameworks/core/components/test/unittest/align/align_creator_test.cpp b/frameworks/core/components/test/unittest/align/align_creator_test.cpp new file mode 100644 index 00000000..bc9bf096 --- /dev/null +++ b/frameworks/core/components/test/unittest/align/align_creator_test.cpp @@ -0,0 +1,204 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/json/json_util.h" +#include "base/utils/utils.h" +#include "core/components/common/properties/alignment.h" +#include "core/components/test/json/align_creator.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +const double LEFT = -1.0; +const double DEFAULT_CENTER = 0.0; +const double RIGHT = 1.0; +const double TOP = -1.0; +const double BOTTOM = 1.0; + +} // namespace + +class AlignCreatorTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); +}; + +void AlignCreatorTest::SetUpTestCase() {} +void AlignCreatorTest::TearDownTestCase() {} +void AlignCreatorTest::SetUp() {} +void AlignCreatorTest::TearDown() {} + +/** + * @tc.name: AlignCreator001 + * @tc.desc: Verify that AlignCreator can parse json when horizontal is "left" and vertical is "top". + * @tc.type: FUNC + * @tc.require: AR000DAQUD + * @tc.author: chenxuankai + */ +HWTEST_F(AlignCreatorTest, AlignCreator001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of align in which horizontal is "left" and vertical is "top". + */ + const std::string jsonAlignStr = "" + "{ " + " \"className\": \"Align\", " + " \"child\": { " + " \"className\": \"Image\", " + " \"src\": \"/example.png\" }," + " \"horizontal\": \"left\", " + " \"vertical\": \"top\" " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get AlignComponent. + */ + const auto dslBuf = reinterpret_cast(jsonAlignStr.c_str()); + size_t dslLen = jsonAlignStr.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + RefPtr alignComponent = AceType::DynamicCast(component); + + /** + * @tc.steps: step3. Verify whether the alignment attribute of AlignComponent is Alignment(-1, -1). + * @tc.expected: step3. The alignment attribute of AlignComponent is Alignment(-1, -1). + */ + ASSERT_TRUE(alignComponent != nullptr); + ASSERT_TRUE(NearEqual(alignComponent->GetAlignment().GetHorizontal(), LEFT)); + ASSERT_TRUE(NearEqual(alignComponent->GetAlignment().GetVertical(), TOP)); +} + +/** + * @tc.name: AlignCreator002 + * @tc.desc: Verify that AlignCreator can parse json when horizontal is "center" and vertical is "center". + * @tc.type: FUNC + * @tc.require: AR000DAQUD + * @tc.author: chenxuankai + */ +HWTEST_F(AlignCreatorTest, AlignCreator002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of align in which horizontal is "center" and vertical is "center". + */ + const std::string jsonAlignStr = "" + "{ " + " \"className\": \"Align\", " + " \"child\": { " + " \"className\": \"Image\", " + " \"src\": \"/example.png\" }," + " \"horizontal\": \"center\", " + " \"vertical\": \"center\" " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get AlignComponent. + */ + const auto dslBuf = reinterpret_cast(jsonAlignStr.c_str()); + size_t dslLen = jsonAlignStr.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + RefPtr alignComponent = AceType::DynamicCast(component); + + /** + * @tc.steps: step3. Verify whether the alignment attribute of AlignComponent is Alignment(0, 0). + * @tc.expected: step3. The alignment attribute of AlignComponent is Alignment(0, 0). + */ + ASSERT_TRUE(alignComponent != nullptr); + ASSERT_TRUE(NearEqual(alignComponent->GetAlignment().GetHorizontal(), DEFAULT_CENTER)); + ASSERT_TRUE(NearEqual(alignComponent->GetAlignment().GetVertical(), DEFAULT_CENTER)); +} + +/** + * @tc.name: AlignCreator003 + * @tc.desc: Verify that AlignCreator can parse json when horizontal is "right" and vertical is "bottom". + * @tc.type: FUNC + * @tc.require: AR000DAQUD + * @tc.author: chenxuankai + */ +HWTEST_F(AlignCreatorTest, AlignCreator003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of align in which horizontal is "right" and vertical is "bottom". + */ + const std::string jsonAlignStr = "" + "{ " + " \"className\": \"Align\", " + " \"child\": { " + " \"className\": \"Image\", " + " \"src\": \"/example.png\" }," + " \"horizontal\": \"right\", " + " \"vertical\": \"bottom\" " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get AlignComponent. + */ + const auto dslBuf = reinterpret_cast(jsonAlignStr.c_str()); + size_t dslLen = jsonAlignStr.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + RefPtr alignComponent = AceType::DynamicCast(component); + + /** + * @tc.steps: step3. Verify whether the alignment attribute of AlignComponent is Alignment(1, 1). + * @tc.expected: step3. The alignment attribute of AlignComponent is Alignment(1, 1). + */ + ASSERT_TRUE(alignComponent != nullptr); + ASSERT_TRUE(NearEqual(alignComponent->GetAlignment().GetHorizontal(), RIGHT)); + ASSERT_TRUE(NearEqual(alignComponent->GetAlignment().GetVertical(), BOTTOM)); +} + +/** + * @tc.name: AlignCreator004 + * @tc.desc: Verify that AlignCreator can handle the situation when horizontal or vertical is missing . + * @tc.type: FUNC + * @tc.require: AR000DAQUD + * @tc.author: chenxuankai + */ +HWTEST_F(AlignCreatorTest, AlignCreator004, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of align without horizontal and vertical. + */ + const std::string jsonAlignStr = "" + "{ " + " \"className\": \"Align\", " + " \"child\": { " + " \"className\": \"Image\", " + " \"src\": \"/example.png\" }" + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get AlignComponent. + */ + const auto dslBuf = reinterpret_cast(jsonAlignStr.c_str()); + size_t dslLen = jsonAlignStr.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + RefPtr alignComponent = AceType::DynamicCast(component); + + /** + * @tc.steps: step3. Verify whether the alignment attribute of AlignComponent is Alignment(0, 0). + * @tc.expected: step3. The alignment attribute of AlignComponent is Alignment(0, 0). + */ + ASSERT_TRUE(alignComponent != nullptr); + ASSERT_TRUE(NearEqual(alignComponent->GetAlignment().GetHorizontal(), DEFAULT_CENTER)); + ASSERT_TRUE(NearEqual(alignComponent->GetAlignment().GetVertical(), DEFAULT_CENTER)); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/border/BUILD.gn b/frameworks/core/components/test/unittest/border/BUILD.gn new file mode 100644 index 00000000..bf3cb771 --- /dev/null +++ b/frameworks/core/components/test/unittest/border/BUILD.gn @@ -0,0 +1,61 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +if (is_standard_system) { + module_output_path = "ace_engine_standard/backenduicomponent/border" +} + +ohos_unittest("BorderCreatorTest") { + module_out_path = module_output_path + + sources = [ + "border_creator_test.cpp", + "border_edge_creator_test.cpp", + "radius_creator_test.cpp", + ] + + configs = [ + ":config_json_creator_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "$ace_root/frameworks/core/components/test:json", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + deps += [ "$ace_root/frameworks/bridge:js_framework_ohos" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_json_creator_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":BorderCreatorTest" ] +} diff --git a/frameworks/core/components/test/unittest/border/border_creator_test.cpp b/frameworks/core/components/test/unittest/border/border_creator_test.cpp new file mode 100644 index 00000000..563f5601 --- /dev/null +++ b/frameworks/core/components/test/unittest/border/border_creator_test.cpp @@ -0,0 +1,366 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/json/json_util.h" +#include "base/utils/utils.h" +#include "core/components/common/layout/constants.h" +#include "core/components/common/properties/border.h" +#include "core/components/common/properties/border_edge.h" +#include "core/components/common/properties/color.h" +#include "core/components/common/properties/radius.h" +#include "core/components/test/json/border_creator.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +const BorderEdge BORDER_EDGE_DEFAULT = BorderEdge(Color(0xff000000), Dimension(), BorderStyle::NONE); +const BorderEdge BORDER_EDGE_VALUE = + BorderEdge(Color(0xffff0000), Dimension(5.0, DimensionUnit::PX), BorderStyle::SOLID); +const BorderEdge BORDER_EDGE_LEFT = BorderEdge(Color(100), Dimension(5.0, DimensionUnit::PX), BorderStyle::SOLID); +const BorderEdge BORDER_EDGE_TOP = BorderEdge(Color(200), Dimension(10.0, DimensionUnit::PX), BorderStyle::SOLID); +const BorderEdge BORDER_EDGE_RIGHT = BorderEdge(Color(300), Dimension(15.0, DimensionUnit::PX), BorderStyle::DOTTED); +const BorderEdge BORDER_EDGE_BOTTOM = BorderEdge(Color(400), Dimension(20.0, DimensionUnit::PX), BorderStyle::DASHED); +const Radius BORDER_RADIUS_DEFAULT = Radius(0.0); +const Radius BORDER_RADIUS_VALUE = Radius(50.0); +const Radius BORDER_RADIUS_TOPLEFT = Radius(10.0); +const Radius BORDER_RADIUS_TOPRIGHT = Radius(20.0); +const Radius BORDER_RADIUS_BOTTOMLEFT = Radius(30.0); +const Radius BORDER_RADIUS_BOTTOMRIGHT = Radius(40.0); + +} // namespace + +class BorderCreatorTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); + std::unique_ptr CreateFromDsl(const std::string jsonBorderStr) const; +}; + +void BorderCreatorTest::SetUpTestCase() {} +void BorderCreatorTest::TearDownTestCase() {} +void BorderCreatorTest::SetUp() {} +void BorderCreatorTest::TearDown() {} + +std::unique_ptr BorderCreatorTest::CreateFromDsl(const std::string jsonBorderStr) const +{ + const auto dslBuf = reinterpret_cast(jsonBorderStr.c_str()); + size_t dslLen = jsonBorderStr.length(); + std::string jsonStr(reinterpret_cast(dslBuf), dslLen); + std::unique_ptr borderJson = JsonUtil::ParseJsonString(jsonStr); + return BorderCreator::CreateFromJson(*borderJson); +} + +/** + * @tc.name: BoxCreator001 + * @tc.desc: Verify BorderCreator can create a border with four identical edges. + * @tc.type: FUNC + * @tc.require: AR000DAQU4 + * @tc.author: chenlien + */ +HWTEST_F(BorderCreatorTest, BoxCreator001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct a border with four identical edges. + */ + const std::string content = "" + "{ " + " \"className\": \"Border\", " + " \"value\": { " + " \"className\": \"BorderEdge\", " + " \"width\":5.0, " + " \"color\": { " + " \"className\": \"Color\", " + " \"alpha\": 255, " + " \"red\": 255, " + " \"green\": 0, " + " \"blue\": 0 " + " }, " + " \"style\": \"solid\" " + " } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get border. + * @tc.expected: step2. border properties are set correctly, radius are set as default.. + */ + std::unique_ptr border = CreateFromDsl(content); + ASSERT_TRUE(border->Left() == BORDER_EDGE_VALUE); + ASSERT_TRUE(border->Top() == BORDER_EDGE_VALUE); + ASSERT_TRUE(border->Right() == BORDER_EDGE_VALUE); + ASSERT_TRUE(border->Bottom() == BORDER_EDGE_VALUE); + ASSERT_TRUE(border->TopLeftRadius() == BORDER_RADIUS_DEFAULT); + ASSERT_TRUE(border->TopRightRadius() == BORDER_RADIUS_DEFAULT); + ASSERT_TRUE(border->BottomLeftRadius() == BORDER_RADIUS_DEFAULT); + ASSERT_TRUE(border->BottomRightRadius() == BORDER_RADIUS_DEFAULT); +} + +/** + * @tc.name: BorderCreator002 + * @tc.desc: Verify that borderCreator can independently create four borders: up, down, left, and right. + * @tc.type: FUNC + * @tc.require: AR000DAQU5 + * @tc.author: chenlien + */ +HWTEST_F(BorderCreatorTest, BorderCreator002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of border with four borders: up, down, left, and right. + */ + const std::string content = "" + "{ " + " \"className\": \"Border\", " + " \"left\": { " + " \"className\": \"BorderEdge\", \"width\": 5.0, " + " \"color\": { \"className\": \"Color\", \"value\": 100 }, " + " \"style\": \"solid\" }, " + " \"top\": { " + " \"className\": \"BorderEdge\", \"width\": 10.0, " + " \"color\": { \"className\": \"Color\", \"value\": 200 }, " + " \"style\": \"solid\" }, " + " \"right\": { " + " \"className\": \"BorderEdge\", \"width\": 15.0, " + " \"color\": { \"className\": \"Color\", \"value\": 300 }, " + " \"style\": \"dotted\" }, " + " \"bottom\": { " + " \"className\": \"BorderEdge\", \"width\": 20.0, " + " \"color\": { \"className\": \"Color\", \"value\": 400 }, " + " \"style\": \"dashed\" } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get border. + * @tc.expected: step2. border are set correctly, radius are set as default. + */ + std::unique_ptr border = CreateFromDsl(content); + ASSERT_TRUE(border->Left() == BORDER_EDGE_LEFT); + ASSERT_TRUE(border->Top() == BORDER_EDGE_TOP); + ASSERT_TRUE(border->Right() == BORDER_EDGE_RIGHT); + ASSERT_TRUE(border->Bottom() == BORDER_EDGE_BOTTOM); + ASSERT_TRUE(border->TopLeftRadius() == BORDER_RADIUS_DEFAULT); + ASSERT_TRUE(border->TopRightRadius() == BORDER_RADIUS_DEFAULT); + ASSERT_TRUE(border->BottomLeftRadius() == BORDER_RADIUS_DEFAULT); + ASSERT_TRUE(border->BottomRightRadius() == BORDER_RADIUS_DEFAULT); +} + +/** + * @tc.name: BorderCreator003 + * @tc.desc: Verify BorderCreator can create border with left. + * @tc.type: FUNC + * @tc.require: AR000DAQU4 + * @tc.author: chenlien + */ +HWTEST_F(BorderCreatorTest, BorderCreator003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of border with left. + */ + const std::string content = "" + "{ " + " \"className\": \"Border\", " + " \"left\": { " + " \"className\": \"BorderEdge\", \"width\": 5.0, " + " \"color\": { \"className\": \"Color\", \"value\": 100 }, " + " \"style\": \"solid\" } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get border. + * @tc.expected: step2. left border edge are set correctly, other three edges and radius are set as default. + */ + std::unique_ptr border = CreateFromDsl(content); + ASSERT_TRUE(border->Left() == BORDER_EDGE_LEFT); + ASSERT_TRUE(border->Top() == BORDER_EDGE_DEFAULT); + ASSERT_TRUE(border->Right() == BORDER_EDGE_DEFAULT); + ASSERT_TRUE(border->Bottom() == BORDER_EDGE_DEFAULT); + ASSERT_TRUE(border->TopLeftRadius() == BORDER_RADIUS_DEFAULT); + ASSERT_TRUE(border->TopRightRadius() == BORDER_RADIUS_DEFAULT); + ASSERT_TRUE(border->BottomLeftRadius() == BORDER_RADIUS_DEFAULT); + ASSERT_TRUE(border->BottomRightRadius() == BORDER_RADIUS_DEFAULT); +} + +/** + * @tc.name: BorderCreator004 + * @tc.desc: Verify BorderCreator can create border with className only. + * @tc.type: FUNC + * @tc.require: AR000DAQU4 + * @tc.author: chenlien + */ +HWTEST_F(BorderCreatorTest, BorderCreator004, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of border with className only. + */ + const std::string content = "" + "{ " + " \"className\": \"Border\" " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get border. + * @tc.expected: step2. border edges and radius are set as default. + */ + std::unique_ptr border = CreateFromDsl(content); + ASSERT_TRUE(border->Left() == BORDER_EDGE_DEFAULT); + ASSERT_TRUE(border->Top() == BORDER_EDGE_DEFAULT); + ASSERT_TRUE(border->Right() == BORDER_EDGE_DEFAULT); + ASSERT_TRUE(border->Bottom() == BORDER_EDGE_DEFAULT); + ASSERT_TRUE(border->TopLeftRadius() == BORDER_RADIUS_DEFAULT); + ASSERT_TRUE(border->TopRightRadius() == BORDER_RADIUS_DEFAULT); + ASSERT_TRUE(border->BottomLeftRadius() == BORDER_RADIUS_DEFAULT); + ASSERT_TRUE(border->BottomRightRadius() == BORDER_RADIUS_DEFAULT); +} + +/** + * @tc.name: BorderCreator005 + * @tc.desc: Verify BorderCreator can create border with value and radius. + * @tc.type: FUNC + * @tc.require: AR000DAQU5 + * @tc.author: chenlien + */ +HWTEST_F(BorderCreatorTest, BorderCreator005, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of border with value and four radius. + */ + const std::string content = "" + "{ " + " \"className\": \"Border\", " + " \"value\": { " + " \"className\": \"BorderEdge\", \"width\": 5.0, " + " \"color\": { " + " \"className\": \"Color\", " + " \"alpha\": 255, " + " \"red\": 255, " + " \"green\": 0, " + " \"blue\": 0 " + " }, " + " \"style\": \"solid\" }, " + " \"radius\": { \"className\": \"Radius\", \"value\": 50.0 } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get border. + * @tc.expected: step2. border edges are set as default, radius are set correctly. + */ + std::unique_ptr border = CreateFromDsl(content); + ASSERT_TRUE(border->Left() == BORDER_EDGE_VALUE); + ASSERT_TRUE(border->Top() == BORDER_EDGE_VALUE); + ASSERT_TRUE(border->Right() == BORDER_EDGE_VALUE); + ASSERT_TRUE(border->Bottom() == BORDER_EDGE_VALUE); + ASSERT_TRUE(border->TopLeftRadius() == BORDER_RADIUS_VALUE); + ASSERT_TRUE(border->TopRightRadius() == BORDER_RADIUS_VALUE); + ASSERT_TRUE(border->BottomLeftRadius() == BORDER_RADIUS_VALUE); + ASSERT_TRUE(border->BottomRightRadius() == BORDER_RADIUS_VALUE); +} + +/** + * @tc.name: BorderCreator006 + * @tc.desc: Verify BorderCreator can create border with value and four radius:topLeft and topRight and bottomLeft and + * bottomRight. + * @tc.type: FUNC + * @tc.require: AR000DAQU7 + * @tc.author: chenlien + */ +HWTEST_F(BorderCreatorTest, BorderCreator006, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of border with value and four radius:topLeft and topRight and + * bottomLeft and bottomRight. + */ + const std::string content = "" + "{ " + " \"className\": \"Border\", " + " \"value\": { " + " \"className\": \"BorderEdge\", \"width\": 5.0, " + " \"color\": { " + " \"className\": \"Color\", " + " \"alpha\": 255, " + " \"red\": 255, " + " \"green\": 0, " + " \"blue\": 0 " + " }, " + " \"style\": \"solid\" }, " + " \"topLeftRadius\": { \"className\": \"Radius\", \"value\": 10.0 }, " + " \"topRightRadius\": { \"className\": \"Radius\", \"value\": 20.0 }, " + " \"bottomLeftRadius\": { \"className\": \"Radius\", \"value\": 30.0 }, " + " \"bottomRightRadius\": { \"className\": \"Radius\", \"value\": 40.0 } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get border. + * @tc.expected: step2. border edges are set as default, radius are set correctly. + */ + std::unique_ptr border = CreateFromDsl(content); + ASSERT_TRUE(border->Left() == BORDER_EDGE_VALUE); + ASSERT_TRUE(border->Top() == BORDER_EDGE_VALUE); + ASSERT_TRUE(border->Right() == BORDER_EDGE_VALUE); + ASSERT_TRUE(border->Bottom() == BORDER_EDGE_VALUE); + ASSERT_TRUE(border->TopLeftRadius() == BORDER_RADIUS_TOPLEFT); + ASSERT_TRUE(border->TopRightRadius() == BORDER_RADIUS_TOPRIGHT); + ASSERT_TRUE(border->BottomLeftRadius() == BORDER_RADIUS_BOTTOMLEFT); + ASSERT_TRUE(border->BottomRightRadius() == BORDER_RADIUS_BOTTOMRIGHT); +} + +/** + * @tc.name: BorderCreator007 + * @tc.desc: Verify BorderCreator can create border with value and topLeft radius. + * @tc.type: FUNC + * @tc.require: AR000DAQU7 + * @tc.author: chenlien + */ +HWTEST_F(BorderCreatorTest, BorderCreator007, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of border with value and topLeft radius. + */ + const std::string content = "" + "{ " + " \"className\": \"Border\", " + " \"value\": { " + " \"className\": \"BorderEdge\", \"width\": 5.0, " + " \"color\": { " + " \"className\": \"Color\", " + " \"alpha\": 255, " + " \"red\": 255, " + " \"green\": 0, " + " \"blue\": 0 " + " }, " + " \"style\": \"solid\" }, " + " \"topLeftRadius\": { \"className\": \"Radius\", \"value\": 10.0 } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get border. + * @tc.expected: step2. topLeft radius are set correct border edges and other three radius are set as default + */ + std::unique_ptr border = CreateFromDsl(content); + ASSERT_TRUE(border->Left() == BORDER_EDGE_VALUE); + ASSERT_TRUE(border->Top() == BORDER_EDGE_VALUE); + ASSERT_TRUE(border->Right() == BORDER_EDGE_VALUE); + ASSERT_TRUE(border->Bottom() == BORDER_EDGE_VALUE); + ASSERT_TRUE(border->TopLeftRadius() == BORDER_RADIUS_TOPLEFT); + ASSERT_TRUE(border->TopRightRadius() == BORDER_RADIUS_DEFAULT); + ASSERT_TRUE(border->BottomLeftRadius() == BORDER_RADIUS_DEFAULT); + ASSERT_TRUE(border->BottomRightRadius() == BORDER_RADIUS_DEFAULT); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/border/border_edge_creator_test.cpp b/frameworks/core/components/test/unittest/border/border_edge_creator_test.cpp new file mode 100644 index 00000000..bc571f00 --- /dev/null +++ b/frameworks/core/components/test/unittest/border/border_edge_creator_test.cpp @@ -0,0 +1,118 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/json/json_util.h" +#include "base/utils/utils.h" +#include "core/components/common/layout/constants.h" +#include "core/components/common/properties/border_edge.h" +#include "core/components/test/json/border_edge_creator.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +const double BORDER_EDGE_WIDTH = 1.0; +const double BORDER_EDGE_WIDTH_DEFAULT = 0.0; +const uint32_t BORDER_EDGE_COLOR = 0x000000ff; +const uint32_t BORDER_EDGE_COLOR_DEFAULT = 0xff000000; + +} + +class BorderEdgeCreatorTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); + BorderEdge CreateFromDsl(const std::string jsonBorderEdgeStr) const; +}; + +void BorderEdgeCreatorTest::SetUpTestCase() {} +void BorderEdgeCreatorTest::TearDownTestCase() {} +void BorderEdgeCreatorTest::SetUp() {} +void BorderEdgeCreatorTest::TearDown() {} + +BorderEdge BorderEdgeCreatorTest::CreateFromDsl(const std::string jsonBorderEdgeStr) const +{ + const auto dslBuf = reinterpret_cast(jsonBorderEdgeStr.c_str()); + size_t dslLen = jsonBorderEdgeStr.length(); + std::string jsonStr(reinterpret_cast(dslBuf), dslLen); + std::unique_ptr borderEdgeJson = JsonUtil::ParseJsonString(jsonStr); + return BorderEdgeCreator::CreateFromJson(*borderEdgeJson); +} + +/** + * @tc.name: BorderEdgeCreator001 + * @tc.desc: Verify BorderEdgeCreator can create border edge with width | color | style. + * @tc.type: FUNC + * @tc.require: AR000DAQU5 + */ +HWTEST_F(BorderEdgeCreatorTest, BorderEdgeCreator001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of border edge with width | color | style. + */ + const std::string jsonBorderEdgeStr = "" + "{ " + " \"className\": \"BorderEdge\", " + " \"width\": 1.0, " + " \"color\": { " + " \"className\": \"Color\", " + " \"value\": 255 " + " }, " + " \"style\": \"solid\" " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get border edge. + * @tc.expected: step2. properties are set correctly. + */ + BorderEdge borderEdge = CreateFromDsl(jsonBorderEdgeStr); + EXPECT_EQ(borderEdge.GetWidth().Value(), BORDER_EDGE_WIDTH); + EXPECT_EQ(borderEdge.GetColor().GetValue(), BORDER_EDGE_COLOR); + EXPECT_EQ(borderEdge.GetBorderStyle(), BorderStyle::SOLID); +} + +/** + * @tc.name: BorderEdgeCreator002 + * @tc.desc: Verify BorderEdgeCreator can create border edge with className only. + * @tc.type: FUNC + * @tc.require: AR000DAQU5 + */ +HWTEST_F(BorderEdgeCreatorTest, BorderEdgeCreator002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of border edge with className only. + */ + const std::string jsonBorderEdgeStr = "" + "{ " + " \"className\": \"BorderEdge\" " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get border edge. + * @tc.expected: step2. properties are set as default. + */ + BorderEdge borderEdge = CreateFromDsl(jsonBorderEdgeStr); + EXPECT_EQ(borderEdge.GetWidth().Value(), BORDER_EDGE_WIDTH_DEFAULT); + EXPECT_EQ(borderEdge.GetColor().GetValue(), BORDER_EDGE_COLOR_DEFAULT); + EXPECT_EQ(borderEdge.GetBorderStyle(), BorderStyle::NONE); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/border/radius_creator_test.cpp b/frameworks/core/components/test/unittest/border/radius_creator_test.cpp new file mode 100644 index 00000000..8a6a7bff --- /dev/null +++ b/frameworks/core/components/test/unittest/border/radius_creator_test.cpp @@ -0,0 +1,138 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/geometry/dimension.h" +#include "base/json/json_util.h" +#include "base/utils/utils.h" +#include "core/components/common/properties/radius.h" +#include "core/components/test/json/radius_creator.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +const Dimension RADIUS_DEFAULT = Dimension(0.0); +const Dimension RADIUS_VALUE = Dimension(5.0); +const Dimension RADIUS_X = Dimension(1.0); +const Dimension RADIUS_Y = Dimension(2.0); + +} // namespace + +class RadiusCreatorTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); + Radius CreateFromDsl(const std::string jsonRadiusStr) const; +}; + +void RadiusCreatorTest::SetUpTestCase() {} +void RadiusCreatorTest::TearDownTestCase() {} +void RadiusCreatorTest::SetUp() {} +void RadiusCreatorTest::TearDown() {} + +Radius RadiusCreatorTest::CreateFromDsl(const std::string jsonRadiusStr) const +{ + const auto dslBuf = reinterpret_cast(jsonRadiusStr.c_str()); + size_t dslLen = jsonRadiusStr.length(); + std::string jsonStr(reinterpret_cast(dslBuf), dslLen); + std::unique_ptr radiusJson = JsonUtil::ParseJsonString(jsonStr); + return RadiusCreator::CreateFromJson(*radiusJson); +} + +/** + * @tc.name: RadiusCreator001 + * @tc.desc: Verify RadiusCreator can create radius with value. + * @tc.type: FUNC + * @tc.require: AR000DAQU5 + */ +HWTEST_F(RadiusCreatorTest, RadiusCreator001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of radius with value. + */ + const std::string jsonRadiusStr = "" + "{ " + " \"className\": \"Radius\", " + " \"value\": 5.0 " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get radius. + * @tc.expected: step2. properties are set correctly. + */ + Radius radius = CreateFromDsl(jsonRadiusStr); + EXPECT_EQ(radius.GetX(), RADIUS_VALUE); + EXPECT_EQ(radius.GetY(), RADIUS_VALUE); +} + +/** + * @tc.name: RadiusCreator002 + * @tc.desc: Verify RadiusCreator can create radius with x | y. + * @tc.type: FUNC + * @tc.require: AR000DAQU5 + */ +HWTEST_F(RadiusCreatorTest, RadiusCreator002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of radius with x | y. + */ + const std::string jsonRadiusStr = "" + "{ " + " \"className\": \"Radius\", " + " \"x\": 1.0, " + " \"y\": 2.0 " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get radius. + * @tc.expected: step2. properties are set correctly. + */ + Radius radius = CreateFromDsl(jsonRadiusStr); + EXPECT_EQ(radius.GetX(), RADIUS_X); + EXPECT_EQ(radius.GetY(), RADIUS_Y); +} + +/** + * @tc.name: RadiusCreator003 + * @tc.desc: Verify RadiusCreator can create radius with className only. + * @tc.type: FUNC + * @tc.require: AR000DAQU5 + */ +HWTEST_F(RadiusCreatorTest, RadiusCreator003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of radius with className only. + */ + const std::string jsonRadiusStr = "" + "{ " + " \"className\": \"Radius\" " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get radius. + * @tc.expected: step2. properties are set as default. + */ + Radius radius = CreateFromDsl(jsonRadiusStr); + EXPECT_EQ(radius.GetX(), RADIUS_DEFAULT); + EXPECT_EQ(radius.GetY(), RADIUS_DEFAULT); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/box/BUILD.gn b/frameworks/core/components/test/unittest/box/BUILD.gn new file mode 100644 index 00000000..a307eb64 --- /dev/null +++ b/frameworks/core/components/test/unittest/box/BUILD.gn @@ -0,0 +1,186 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +if (is_standard_system) { + module_output_path = "ace_engine_standard/backenduicomponent/box" +} + +ohos_unittest("BoxCreatorTest") { + module_out_path = module_output_path + + sources = [ + "box_creator_test.cpp", + "color_creator_test.cpp", + ] + + configs = [ + ":config_json_creator_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "$ace_root/frameworks/core/components/test:json", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + deps += [ "$ace_root/frameworks/bridge:js_framework_ohos" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +ohos_unittest("RenderBoxTest") { + module_out_path = module_output_path + + sources = [ + "$ace_root/frameworks/core/components/test/json/json_frontend.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/mock_render_common.cpp", + "box_test_utils.cpp", + "render_box_test.cpp", + ] + + configs = [ "$ace_root:ace_test_config" ] + + deps = [ + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "//third_party/googletest:gtest_main", + ] + if (is_standard_system) { + deps += [ "$ace_root/frameworks/bridge:js_framework_ohos" ] + } + + if (is_standard_system) { + configs += [ "//third_party/curl:curl_config" ] + deps += [ "//third_party/curl:curl" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +ohos_unittest("RenderBoxPercentTest") { + module_out_path = module_output_path + + sources = [ + "$ace_root/frameworks/core/components/test/json/json_frontend.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/mock_render_common.cpp", + "box_test_utils.cpp", + "render_box_percent_test.cpp", + ] + + deps = [ + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "$flutter_root:ace_skia_ohos", + "//third_party/googletest:gtest_main", + "//third_party/zlib:libz", + ] + if (is_standard_system) { + deps += [ "$ace_root/frameworks/bridge:js_framework_ohos" ] + } + + configs = [ + "$ace_root:ace_test_config", + "$flutter_root:flutter_config", + "$flutter_root:icu_config_ohos", + ] + + if (is_standard_system) { + configs += [ "//third_party/curl:curl_config" ] + deps += [ "//third_party/curl:curl" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +ohos_unittest("MouseHoverTest") { + module_out_path = module_output_path + + sources = [ + "$ace_root/frameworks/core/components/test/json/json_frontend.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/mock_render_common.cpp", + "box_test_utils.cpp", + "mouse_hover_test.cpp", + ] + + configs = [ "$ace_root:ace_test_config" ] + + deps = [ + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "//third_party/googletest:gtest_main", + ] + if (is_standard_system) { + deps += [ "$ace_root/frameworks/bridge:js_framework_ohos" ] + } + + if (is_standard_system) { + configs += [ "//third_party/curl:curl_config" ] + deps += [ "//third_party/curl:curl" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +ohos_unittest("MouseHoverAnimationTest") { + module_out_path = module_output_path + + sources = [ + "$ace_root/frameworks/core/components/test/json/json_frontend.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/mock_render_common.cpp", + "box_test_utils.cpp", + "mouse_hover_animation_test.cpp", + ] + + configs = [ "$ace_root:ace_test_config" ] + + deps = [ + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "//third_party/googletest:gtest_main", + ] + if (is_standard_system) { + deps += [ "$ace_root/frameworks/bridge:js_framework_ohos" ] + } + + if (is_standard_system) { + configs += [ "//third_party/curl:curl_config" ] + deps += [ "//third_party/curl:curl" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +group("unittest") { + testonly = true + deps = [ + ":RenderBoxPercentTest", + ":RenderBoxTest", + ] + deps += [ ":MouseHoverTest" ] + deps += [ ":MouseHoverAnimationTest" ] + deps += [ ":BoxCreatorTest" ] +} + +config("config_json_creator_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} diff --git a/frameworks/core/components/test/unittest/box/box_creator_test.cpp b/frameworks/core/components/test/unittest/box/box_creator_test.cpp new file mode 100644 index 00000000..eb92972a --- /dev/null +++ b/frameworks/core/components/test/unittest/box/box_creator_test.cpp @@ -0,0 +1,167 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/json/json_util.h" +#include "base/utils/utils.h" +#include "core/components/box/box_component.h" +#include "core/components/common/layout/constants.h" +#include "core/components/common/properties/alignment.h" +#include "core/components/common/properties/border.h" +#include "core/components/common/properties/border_edge.h" +#include "core/components/common/properties/color.h" +#include "core/components/common/properties/edge.h" +#include "core/components/test/json/box_creator.h" +#include "core/components/test/json/component_factory.h" +#include "core/components/text/text_component.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +const double BOX_WIDTH = 100.0; +const double BOX_WIDTH_DEFAULT = -1.0; +const double BOX_HEIGHT = 200.0; +const double BOX_HEIGHT_DEFAULT = -1.0; +const double BOX_ALIGN = -1.0; +const double BOX_ALIGN_DEFAULT = 0.0; +const Edge BOX_EDGE_VALUE = Edge(0.0); +const Edge BOX_MARGIN_VALUE = Edge(10.0); +const Edge BOX_PADDING_VALUE = Edge(20.0); +const Color BOX_COLOR_VALUE = Color(255); +const Border BOX_BACK_BORDER = + Border(BorderEdge(Color(0xff000000), Dimension(1.0, DimensionUnit::PX), BorderStyle::NONE)); +const Border BOX_FRONT_BORDER = + Border(BorderEdge(Color(0xff000000), Dimension(2.0, DimensionUnit::PX), BorderStyle::NONE)); +const Border BOX_BORDER_DEFAULT = + Border(BorderEdge(Color(0xffff0000), Dimension(0.0, DimensionUnit::PX), BorderStyle::NONE)); +const std::string TEXT_VALUE = "Hi Ace"; + +} // namespace + +class BoxCreatorTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); +}; + +void BoxCreatorTest::SetUpTestCase() {} +void BoxCreatorTest::TearDownTestCase() {} +void BoxCreatorTest::SetUp() {} +void BoxCreatorTest::TearDown() {} + +/** + * @tc.name: BoxCreator001 + * @tc.desc: Verify BoxCreator can create box with all properties. + * @tc.type: FUNC + * @tc.require: AR000DAQTR + */ +HWTEST_F(BoxCreatorTest, BoxCreator001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of box component with all properties. + */ + const std::string content = "" + "{ " + " \"className\": \"Box\", \"width\": 100, \"height\": 200, " + " \"align\": { \"horizontal\": \"left\", \"vertical\": \"top\" }, " + " \"margin\": { \"className\": \"Edge\", \"value\": 10.0 }, " + " \"padding\": { \"className\": \"Edge\", \"value\": 20.0 }, " + " \"color\": { \"className\": \"Color\", \"value\": 255 }, " + " \"backDecoration\": { " + " \"className\": \"Decoration\", " + " \"border\": { \"className\": \"Border\", " + " \"value\": { \"className\": \"BorderEdge\", \"width\": 1 } " + " } " + " }, " + " \"frontDecoration\": { " + " \"className\": \"Decoration\", " + " \"border\": { " + " \"className\": \"Border\", " + " \"value\": { \"className\": \"BorderEdge\", \"width\": 2 } " + " } " + " }, " + " \"child\": { \"className\": \"Text\", \"value\": \"Hi Ace\" } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get box component. + * @tc.expected: step2. properties and child are set correctly. + */ + const auto dslBuf = reinterpret_cast(content.c_str()); + size_t dslLen = content.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component != nullptr); + RefPtr box = AceType::DynamicCast(component); + ASSERT_TRUE(box != nullptr); + ASSERT_TRUE(NearEqual(box->GetWidthDimension().Value(), BOX_WIDTH)); + ASSERT_TRUE(NearEqual(box->GetHeightDimension().Value(), BOX_HEIGHT)); + ASSERT_TRUE(NearEqual(box->GetAlignment().GetHorizontal(), BOX_ALIGN)); + ASSERT_TRUE(NearEqual(box->GetAlignment().GetVertical(), BOX_ALIGN)); + ASSERT_TRUE(box->GetMargin() == BOX_MARGIN_VALUE); + ASSERT_TRUE(box->GetPadding() == BOX_PADDING_VALUE); + ASSERT_TRUE(box->GetColor() == BOX_COLOR_VALUE); + ASSERT_TRUE(box->GetBackDecoration()->GetBorder() == BOX_BACK_BORDER); + ASSERT_TRUE(box->GetFrontDecoration()->GetBorder() == BOX_FRONT_BORDER); + RefPtr text = AceType::DynamicCast(box->GetChild()); + ASSERT_TRUE(text != nullptr); + ASSERT_TRUE(text->GetData() == TEXT_VALUE); +} + +/** + * @tc.name: BoxCreator002 + * @tc.desc: Verify BoxCreator can create box with className only. + * @tc.type: FUNC + * @tc.require: AR000DAQTR + */ +HWTEST_F(BoxCreatorTest, BoxCreator002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of box component with className only. + */ + const std::string content = "" + "{ " + " \"className\": \"Box\" " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get box component. + * @tc.expected: step2. properties are set as default, child is nullptr. + */ + const auto dslBuf = reinterpret_cast(content.c_str()); + size_t dslLen = content.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component != nullptr); + RefPtr box = AceType::DynamicCast(component); + ASSERT_TRUE(box != nullptr); + ASSERT_TRUE(NearEqual(box->GetWidthDimension().Value(), BOX_WIDTH_DEFAULT)); + ASSERT_TRUE(NearEqual(box->GetHeightDimension().Value(), BOX_HEIGHT_DEFAULT)); + ASSERT_TRUE(NearEqual(box->GetAlignment().GetHorizontal(), BOX_ALIGN_DEFAULT)); + ASSERT_TRUE(NearEqual(box->GetAlignment().GetVertical(), BOX_ALIGN_DEFAULT)); + ASSERT_TRUE(box->GetMargin() == BOX_EDGE_VALUE); + ASSERT_TRUE(box->GetPadding() == BOX_EDGE_VALUE); + ASSERT_TRUE(box->GetColor() == Color::TRANSPARENT); + ASSERT_TRUE(box->GetBackDecoration() == nullptr); + ASSERT_TRUE(box->GetFrontDecoration() == nullptr); + RefPtr text = AceType::DynamicCast(box->GetChild()); + ASSERT_TRUE(text == nullptr); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/box/box_test_utils.cpp b/frameworks/core/components/test/unittest/box/box_test_utils.cpp new file mode 100644 index 00000000..a6e9c3aa --- /dev/null +++ b/frameworks/core/components/test/unittest/box/box_test_utils.cpp @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/unittest/box/box_test_utils.h" + +#include "core/components/text/text_component.h" + +namespace OHOS::Ace { +namespace { + +constexpr double RECT_WIDTH = 1080.0; +constexpr double RECT_HEIGHT = 2244.0; + +} // namespace + +RefPtr BoxTestUtils::CreateRenderRoot() +{ + RefPtr root = AceType::MakeRefPtr(); + const Rect paintRect(0.0, 0.0, RECT_WIDTH, RECT_HEIGHT); + root->SetPaintRect(paintRect); + return root; +} + +RefPtr BoxTestUtils::CreateRenderText(const RefPtr& context) +{ + auto text = AceType::MakeRefPtr(); + text->Attach(context); + return text; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/box/box_test_utils.h b/frameworks/core/components/test/unittest/box/box_test_utils.h new file mode 100644 index 00000000..35dbfdd9 --- /dev/null +++ b/frameworks/core/components/test/unittest/box/box_test_utils.h @@ -0,0 +1,110 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_BOX_BOX_TEST_UTILS_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_BOX_BOX_TEST_UTILS_H + +#include "core/components/box/render_box.h" +#include "core/components/root/render_root.h" +#include "core/components/text/render_text.h" + +namespace OHOS::Ace { + +constexpr double LENGTH = 100.0; + +class MockRenderRoot final : public RenderRoot { + DECLARE_ACE_TYPE(MockRenderRoot, RenderRoot); +}; + +class MockRenderBoxBase final : public RenderBoxBase { + DECLARE_ACE_TYPE(MockRenderBoxBase, RenderBoxBase); + +public: + void OnMouseHoverEnterTest() override + { + enterCallBackCount_++; + } + + void OnMouseHoverExitTest() override + { + exitCallBackCount_++; + } + + int32_t enterCallBackCount_ = 0; + int32_t exitCallBackCount_ = 0; +}; + +class MockRenderBox final : public RenderBox { + DECLARE_ACE_TYPE(MockRenderBox, RenderBox); + +public: + void OnMouseHoverEnterAnimation() override + { + enterAnimationCount_++; + } + + void OnMouseHoverExitAnimation() override + { + exitAnimationCount_++; + } + + int32_t enterAnimationCount_ = 0; + int32_t exitAnimationCount_ = 0; +}; + +class MockBoxBaseComponent final : public BoxBaseComponent { + DECLARE_ACE_TYPE(MockBoxBaseComponent, BoxBaseComponent); + +public: + RefPtr CreateElement() override + { + return nullptr; + } + + RefPtr CreateRenderNode() override + { + return nullptr; + } +}; + +class MockRenderText final : public RenderText { + DECLARE_ACE_TYPE(MockRenderText, RenderText); + +public: + uint32_t GetTextLines() override + { + return 0; + } + + Size Measure() override + { + return Size(LENGTH, LENGTH); + } + + double GetTextWidth() override + { + return 0; + } +}; + +class BoxTestUtils { +public: + static RefPtr CreateRenderRoot(); + static RefPtr CreateRenderText(const RefPtr& context); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_BOX_BOX_TEST_UTILS_H diff --git a/frameworks/core/components/test/unittest/box/color_creator_test.cpp b/frameworks/core/components/test/unittest/box/color_creator_test.cpp new file mode 100644 index 00000000..005325ab --- /dev/null +++ b/frameworks/core/components/test/unittest/box/color_creator_test.cpp @@ -0,0 +1,192 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/json/json_util.h" +#include "base/utils/utils.h" +#include "core/components/common/properties/color.h" +#include "core/components/test/json/color_creator.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +const uint32_t COLOR_DEFAULT = 0xff000000; +const uint32_t COLOR_VALUE = 255; +const uint32_t COLOR_RED = 0xffff0000; +const uint32_t COLOR_GREEN = 0xff00ff00; +const uint32_t COLOR_BLUE = 0xff0000ff; + +} // namespace + +class ColorCreatorTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); + Color CreateFromDsl(const std::string jsonColorStr) const; +}; + +void ColorCreatorTest::SetUpTestCase() {} +void ColorCreatorTest::TearDownTestCase() {} +void ColorCreatorTest::SetUp() {} +void ColorCreatorTest::TearDown() {} + +Color ColorCreatorTest::CreateFromDsl(const std::string jsonColorStr) const +{ + const auto dslBuf = reinterpret_cast(jsonColorStr.c_str()); + size_t dslLen = jsonColorStr.length(); + std::string jsonStr(reinterpret_cast(dslBuf), dslLen); + std::unique_ptr colorJson = JsonUtil::ParseJsonString(jsonStr); + return ColorCreator::CreateFromJson(*colorJson); +} + +/** + * @tc.name: ColorCreator001 + * @tc.desc: Verify ColorCreator can create color with value. + * @tc.type: FUNC + * @tc.require: AR000DAQU2 + */ +HWTEST_F(ColorCreatorTest, ColorCreator001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of color with value. + */ + const std::string jsonColorStr = "" + "{ " + " \"className\": \"Color\", " + " \"value\": 255 " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get color. + * @tc.expected: step2. properties are set correctly. + */ + Color color = CreateFromDsl(jsonColorStr); + EXPECT_EQ(color.GetValue(), COLOR_VALUE); +} + +/** + * @tc.name: ColorCreator002 + * @tc.desc: Verify ColorCreator can create color with ARGB. + * @tc.type: FUNC + * @tc.require: AR000DAQU2 + */ +HWTEST_F(ColorCreatorTest, ColorCreator002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of color with ARGB. + */ + const std::string jsonColorStr = "" + "{ " + " \"className\": \"Color\", " + " \"alpha\": 255, " + " \"red\": 255, " + " \"green\": 0, " + " \"blue\": 0 " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get color. + * @tc.expected: step2. properties are set correctly. + */ + Color color = CreateFromDsl(jsonColorStr); + EXPECT_EQ(color.GetValue(), COLOR_RED); +} + +/** + * @tc.name: ColorCreator003 + * @tc.desc: Verify ColorCreator can create color with RGBO. + * @tc.type: FUNC + * @tc.require: AR000DAQU2 + */ +HWTEST_F(ColorCreatorTest, ColorCreator003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of color with RGBO. + */ + const std::string jsonColorStr = "" + "{ " + " \"className\": \"Color\", " + " \"red\": 0, " + " \"green\": 0, " + " \"blue\": 255, " + " \"opacity\": 1.0 " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get color. + * @tc.expected: step2. properties are set correctly. + */ + Color color = CreateFromDsl(jsonColorStr); + EXPECT_EQ(color.GetValue(), COLOR_BLUE); +} + +/** + * @tc.name: ColorCreator004 + * @tc.desc: Verify ColorCreator can create color with one of RGB. + * @tc.type: FUNC + * @tc.require: AR000DAQU2 + */ +HWTEST_F(ColorCreatorTest, ColorCreator004, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of color with RGB. + */ + const std::string jsonColorStr = "" + "{ " + " \"className\": \"Color\", " + " \"red\": 0, " + " \"green\": 255, " + " \"blue\": 0 " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get color. + * @tc.expected: step2. properties are set correctly. + */ + Color color = CreateFromDsl(jsonColorStr); + EXPECT_EQ(color.GetValue(), COLOR_GREEN); +} + +/** + * @tc.name: ColorCreator005 + * @tc.desc: Verify ColorCreator can create color with className only. + * @tc.type: FUNC + * @tc.require: AR000DAQU2 + */ +HWTEST_F(ColorCreatorTest, ColorCreator005, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of color with className only. + */ + const std::string jsonColorStr = "" + "{ " + " \"className\": \"Color\" " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get color. + * @tc.expected: step2. properties are set as default. + */ + Color color = CreateFromDsl(jsonColorStr); + EXPECT_EQ(color.GetValue(), COLOR_DEFAULT); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/box/mouse_hover_animation_test.cpp b/frameworks/core/components/test/unittest/box/mouse_hover_animation_test.cpp new file mode 100644 index 00000000..7ff79f20 --- /dev/null +++ b/frameworks/core/components/test/unittest/box/mouse_hover_animation_test.cpp @@ -0,0 +1,550 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "core/accessibility/accessibility_node.h" +#include "core/components/box/box_component.h" +#include "core/components/box/render_box.h" +#include "core/components/root/root_element.h" +#include "core/components/stage/stage_element.h" +#include "core/components/test/unittest/box/box_test_utils.h" +#include "core/components/test/unittest/mock/mock_render_common.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +const double BOX_WIDTH_PARENT = 500.0; +const double BOX_HEIGHT_PARENT = 500.0; +const double BOX_WIDTH_CHILD = 300.0; +const double BOX_HEIGHT_CHILD = 300.0; + +} // namespace + +class MouseHoverAnimationTest : public testing::Test { +public: + static void SetUpTestCase() + { + GTEST_LOG_(INFO) << "MouseHoverAnimationTest SetUpTestCase"; + } + + static void TearDownTestCase() + { + GTEST_LOG_(INFO) << "MouseHoverAnimationTest TearDownTestCase"; + } + + void SetUp() override {} + + void TearDown() override {} +}; + +/** + * @tc.name: MouseHoverAnimationTest001 + * @tc.desc: test mouse enter animation. + * @tc.type: FUNC + * @tc.require: AR000F3CDL + * @tc.author: jiachunhui + */ +HWTEST_F(MouseHoverAnimationTest, MouseHoverAnimationTest001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "MouseHoverAnimationTest MouseHoverAnimationTest001"; + /** + * @tc.steps: step1. construct RenderBox and RenderRoot. + * @tc.expected: step1. properties set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + auto rootElemet = mockContext->SetupRootElement(); + auto renderRoot = rootElemet->GetRenderNode(); + auto stackRender = renderRoot->GetFirstChild(); + + /** + * @tc.steps: step2. set RenderBox and RenderRoot TouchRect. + * @tc.expected: step2. properties set correctly. + */ + renderRoot->SetTouchRect(Rect(0.0, 0.0, 1080.0, 1920.0)); + stackRender->SetTouchRect(Rect(0.0, 0.0, 1080.0, 1920.0)); + RefPtr accessNode = AceType::MakeRefPtr(1, "box"); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->SetAccessibilityNode(accessNode); + renderBox->SetTouchRect(Rect(0.0, 0.0, BOX_WIDTH_PARENT, BOX_HEIGHT_PARENT)); + renderBox->Attach(mockContext); + stackRender->AddChild(renderBox); + + /** + * @tc.steps: step3. Verify that the mouse enter animation callback called correctly. + * @tc.expected: step3. mouse enter animation callback called correctly. + */ + MouseEvent event { .x = 600, .y = 600 }; + mockContext->OnMouseEvent(event); + EXPECT_EQ(renderBox->enterAnimationCount_, 0); +} + +/** + * @tc.name: MouseHoverAnimationTest002 + * @tc.desc: test mouse enter animation. + * @tc.type: FUNC + * @tc.require: AR000F3CDL + * @tc.author: jiachunhui + */ +HWTEST_F(MouseHoverAnimationTest, MouseHoverAnimationTest002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "MouseHoverAnimationTest MouseHoverAnimationTest002"; + /** + * @tc.steps: step1. construct RenderBox and RenderRoot. + * @tc.expected: step1. properties set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + auto rootElemet = mockContext->SetupRootElement(); + auto renderRoot = rootElemet->GetRenderNode(); + auto stackRender = renderRoot->GetFirstChild(); + + /** + * @tc.steps: step2. set RenderBox and RenderRoot TouchRect. + * @tc.expected: step2. properties set correctly. + */ + renderRoot->SetTouchRect(Rect(0.0, 0.0, 1080.0, 1920.0)); + stackRender->SetTouchRect(Rect(0.0, 0.0, 1080.0, 1920.0)); + RefPtr accessNode = AceType::MakeRefPtr(1, "box"); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->SetAccessibilityNode(accessNode); + renderBox->SetTouchRect(Rect(0.0, 0.0, BOX_WIDTH_PARENT, BOX_HEIGHT_PARENT)); + renderBox->Attach(mockContext); + stackRender->AddChild(renderBox); + + /** + * @tc.steps: step3. Verify that the mouse enter animation callback called correctly. + * @tc.expected: step3. mouse enter animation callback called correctly. + */ + MouseEvent event { .x = 200, .y = 200 }; + mockContext->OnMouseEvent(event); + EXPECT_EQ(renderBox->enterAnimationCount_, 1); +} + +/** + * @tc.name: MouseHoverAnimationTest003 + * @tc.desc: test mouse exit animation. + * @tc.type: FUNC + * @tc.require: AR000F3CDL + * @tc.author: jiachunhui + */ +HWTEST_F(MouseHoverAnimationTest, MouseHoverAnimationTest003, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "MouseHoverAnimationTest MouseHoverAnimationTest003"; + /** + * @tc.steps: step1. construct RenderBox and RenderRoot. + * @tc.expected: step1. properties set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + auto rootElemet = mockContext->SetupRootElement(); + auto renderRoot = rootElemet->GetRenderNode(); + auto stackRender = renderRoot->GetFirstChild(); + + /** + * @tc.steps: step2. set RenderBox and RenderRoot TouchRect. + * @tc.expected: step2. properties set correctly. + */ + renderRoot->SetTouchRect(Rect(0.0, 0.0, 1080.0, 1920.0)); + stackRender->SetTouchRect(Rect(0.0, 0.0, 1080.0, 1920.0)); + RefPtr accessNode = AceType::MakeRefPtr(1, "box"); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->SetAccessibilityNode(accessNode); + renderBox->SetTouchRect(Rect(0.0, 0.0, BOX_WIDTH_PARENT, BOX_HEIGHT_PARENT)); + renderBox->Attach(mockContext); + stackRender->AddChild(renderBox); + + /** + * @tc.steps: step3. Verify that the mouse enter animation callback called correctly. + * @tc.expected: step3. mouse enter animation callback called correctly. + */ + MouseEvent event { .x = 700, .y = 700 }; + mockContext->OnMouseEvent(event); + EXPECT_EQ(renderBox->enterAnimationCount_, 0); + MouseEvent eventTwo { .x = 500, .y = 500 }; + mockContext->OnMouseEvent(eventTwo); + EXPECT_EQ(renderBox->enterAnimationCount_, 0); + MouseEvent eventThree { .x = 300, .y = 300 }; + mockContext->OnMouseEvent(eventThree); + EXPECT_EQ(renderBox->enterAnimationCount_, 1); +} + +/** + * @tc.name: MouseHoverAnimationTest004 + * @tc.desc: test mouse exit animation. + * @tc.type: FUNC + * @tc.require: AR000F3CDL + * @tc.author: jiachunhui + */ +HWTEST_F(MouseHoverAnimationTest, MouseHoverAnimationTest004, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "MouseHoverAnimationTest MouseHoverAnimationTest004"; + /** + * @tc.steps: step1. construct RenderBox and RenderRoot. + * @tc.expected: step1. properties set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + auto rootElemet = mockContext->SetupRootElement(); + auto renderRoot = rootElemet->GetRenderNode(); + auto stackRender = renderRoot->GetFirstChild(); + + /** + * @tc.steps: step2. set RenderBox and RenderRoot TouchRect. + * @tc.expected: step2. properties set correctly. + */ + renderRoot->SetTouchRect(Rect(0.0, 0.0, 1080.0, 1920.0)); + stackRender->SetTouchRect(Rect(0.0, 0.0, 1080.0, 1920.0)); + RefPtr accessNode = AceType::MakeRefPtr(1, "box"); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->SetAccessibilityNode(accessNode); + renderBox->SetTouchRect(Rect(0.0, 0.0, BOX_WIDTH_PARENT, BOX_HEIGHT_PARENT)); + renderBox->Attach(mockContext); + stackRender->AddChild(renderBox); + + /** + * @tc.steps: step3. Verify that the mouse enter animation callback called correctly. + * @tc.expected: step3. mouse enter animation callback called correctly. + */ + MouseEvent event { .x = 300, .y = 300 }; + mockContext->OnMouseEvent(event); + EXPECT_EQ(renderBox->enterAnimationCount_, 1); + MouseEvent eventTwo { .x = 500, .y = 500 }; + mockContext->OnMouseEvent(eventTwo); + EXPECT_EQ(renderBox->enterAnimationCount_, 1); + MouseEvent eventThree { .x = 700, .y = 700 }; + mockContext->OnMouseEvent(eventThree); + EXPECT_EQ(renderBox->enterAnimationCount_, 1); +} + +/** + * @tc.name: MouseHoverAnimationTest005 + * @tc.desc: test mouse exit animation. + * @tc.type: FUNC + * @tc.require: AR000F3CDM + * @tc.author: jiachunhui + */ +HWTEST_F(MouseHoverAnimationTest, MouseHoverAnimationTest005, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "MouseHoverAnimationTest MouseHoverAnimationTest005"; + /** + * @tc.steps: step1. construct RenderBox and RenderRoot. + * @tc.expected: step1. properties set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + auto rootElemet = mockContext->SetupRootElement(); + auto renderRoot = rootElemet->GetRenderNode(); + auto stackRender = renderRoot->GetFirstChild(); + + /** + * @tc.steps: step2. set RenderBox and RenderRoot TouchRect. + * @tc.expected: step2. properties set correctly. + */ + renderRoot->SetTouchRect(Rect(0.0, 0.0, 1080.0, 1920.0)); + stackRender->SetTouchRect(Rect(0.0, 0.0, 1080.0, 1920.0)); + RefPtr accessNode = AceType::MakeRefPtr(1, "box"); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->SetAccessibilityNode(accessNode); + renderBox->SetTouchRect(Rect(0.0, 0.0, BOX_WIDTH_PARENT, BOX_HEIGHT_PARENT)); + renderBox->Attach(mockContext); + stackRender->AddChild(renderBox); + + /** + * @tc.steps: step3. Verify that the mouse exit animation callback called correctly. + * @tc.expected: step3. mouse exit animation callback called correctly. + */ + MouseEvent event { .x = 600, .y = 600 }; + mockContext->OnMouseEvent(event); + EXPECT_EQ(renderBox->exitAnimationCount_, 0); +} + +/** + * @tc.name: MouseHoverAnimationTest006 + * @tc.desc: test mouse exit animation. + * @tc.type: FUNC + * @tc.require: AR000F3CDM + * @tc.author: jiachunhui + */ +HWTEST_F(MouseHoverAnimationTest, MouseHoverAnimationTest006, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "MouseHoverAnimationTest MouseHoverAnimationTest006"; + /** + * @tc.steps: step1. construct RenderBox and RenderRoot. + * @tc.expected: step1. properties set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + auto rootElemet = mockContext->SetupRootElement(); + auto renderRoot = rootElemet->GetRenderNode(); + auto stackRender = renderRoot->GetFirstChild(); + + /** + * @tc.steps: step2. set RenderBox and RenderRoot TouchRect. + * @tc.expected: step2. properties set correctly. + */ + renderRoot->SetTouchRect(Rect(0.0, 0.0, 1080.0, 1920.0)); + stackRender->SetTouchRect(Rect(0.0, 0.0, 1080.0, 1920.0)); + RefPtr accessNode = AceType::MakeRefPtr(1, "box"); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->SetAccessibilityNode(accessNode); + renderBox->SetTouchRect(Rect(0.0, 0.0, BOX_WIDTH_PARENT, BOX_HEIGHT_PARENT)); + renderBox->Attach(mockContext); + stackRender->AddChild(renderBox); + + /** + * @tc.steps: step3. Verify that the mouse exit animation callback called correctly. + * @tc.expected: step3. mouse exit animation callback called correctly. + */ + MouseEvent event { .x = 300, .y = 300 }; + mockContext->OnMouseEvent(event); + EXPECT_EQ(renderBox->exitAnimationCount_, 0); +} + +/** + * @tc.name: MouseHoverAnimationTest007 + * @tc.desc: test mouse exit animation. + * @tc.type: FUNC + * @tc.require: AR000F3CDM + * @tc.author: jiachunhui + */ +HWTEST_F(MouseHoverAnimationTest, MouseHoverAnimationTest007, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "MouseHoverAnimationTest MouseHoverAnimationTest007"; + /** + * @tc.steps: step1. construct RenderBox and RenderRoot. + * @tc.expected: step1. properties set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + auto rootElemet = mockContext->SetupRootElement(); + auto renderRoot = rootElemet->GetRenderNode(); + auto stackRender = renderRoot->GetFirstChild(); + + /** + * @tc.steps: step2. set RenderBox and RenderRoot TouchRect. + * @tc.expected: step2. properties set correctly. + */ + renderRoot->SetTouchRect(Rect(0.0, 0.0, 1080.0, 1920.0)); + stackRender->SetTouchRect(Rect(0.0, 0.0, 1080.0, 1920.0)); + RefPtr accessNode = AceType::MakeRefPtr(1, "box"); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->SetAccessibilityNode(accessNode); + renderBox->SetTouchRect(Rect(0.0, 0.0, BOX_WIDTH_PARENT, BOX_HEIGHT_PARENT)); + renderBox->Attach(mockContext); + stackRender->AddChild(renderBox); + + /** + * @tc.steps: step3. Verify that the mouse exit animation callback called correctly. + * @tc.expected: step3. mouse exit animation callback called correctly. + */ + MouseEvent event { .x = 300, .y = 300 }; + mockContext->OnMouseEvent(event); + EXPECT_EQ(renderBox->exitAnimationCount_, 0); + MouseEvent eventTwo { .x = 500, .y = 500 }; + mockContext->OnMouseEvent(eventTwo); + EXPECT_EQ(renderBox->exitAnimationCount_, 1); + MouseEvent eventThree { .x = 700, .y = 700 }; + mockContext->OnMouseEvent(eventThree); + EXPECT_EQ(renderBox->exitAnimationCount_, 1); +} + +/** + * @tc.name: MouseHoverAnimationTest008 + * @tc.desc: test mouse exit animation. + * @tc.type: FUNC + * @tc.require: AR000F3CDM + * @tc.author: jiachunhui + */ +HWTEST_F(MouseHoverAnimationTest, MouseHoverAnimationTest008, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "MouseHoverAnimationTest MouseHoverAnimationTest008"; + /** + * @tc.steps: step1. construct RenderBox and RenderRoot. + * @tc.expected: step1. properties set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + auto rootElemet = mockContext->SetupRootElement(); + auto renderRoot = rootElemet->GetRenderNode(); + auto stackRender = renderRoot->GetFirstChild(); + + /** + * @tc.steps: step2. set RenderBox and RenderRoot TouchRect. + * @tc.expected: step2. properties set correctly. + */ + renderRoot->SetTouchRect(Rect(0.0, 0.0, 1080.0, 1920.0)); + stackRender->SetTouchRect(Rect(0.0, 0.0, 1080.0, 1920.0)); + RefPtr accessNode = AceType::MakeRefPtr(1, "box"); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->SetAccessibilityNode(accessNode); + renderBox->SetTouchRect(Rect(0.0, 0.0, BOX_WIDTH_PARENT, BOX_HEIGHT_PARENT)); + renderBox->Attach(mockContext); + stackRender->AddChild(renderBox); + + /** + * @tc.steps: step3. Verify that the mouse exit animation callback called correctly. + * @tc.expected: step3. mouse exit animation callback called correctly. + */ + MouseEvent event { .x = 700, .y = 700 }; + mockContext->OnMouseEvent(event); + EXPECT_EQ(renderBox->exitAnimationCount_, 0); + MouseEvent eventTwo { .x = 500, .y = 500 }; + mockContext->OnMouseEvent(eventTwo); + EXPECT_EQ(renderBox->exitAnimationCount_, 0); + MouseEvent eventThree { .x = 300, .y = 300 }; + mockContext->OnMouseEvent(eventThree); + EXPECT_EQ(renderBox->exitAnimationCount_, 0); +} + +/** + * @tc.name: MouseHoverAnimationTest009 + * @tc.desc: test parent and child mouse enter/exit animation. + * @tc.type: FUNC + * @tc.require: AR000F3CDN + * @tc.author: jiachunhui + */ +HWTEST_F(MouseHoverAnimationTest, MouseHoverAnimationTest009, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "MouseHoverAnimationTest MouseHoverAnimationTest009"; + /** + * @tc.steps: step1. construct RenderBox and RenderRoot. + * @tc.expected: step1. properties set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + auto rootElemet = mockContext->SetupRootElement(); + auto renderRoot = rootElemet->GetRenderNode(); + auto stackRender = renderRoot->GetFirstChild(); + + /** + * @tc.steps: step2. set RenderBox and RenderRoot TouchRect. + * @tc.expected: step2. properties set correctly. + */ + renderRoot->SetTouchRect(Rect(0.0, 0.0, 1080.0, 1920.0)); + stackRender->SetTouchRect(Rect(0.0, 0.0, 1080.0, 1920.0)); + RefPtr accessNode = AceType::MakeRefPtr(1, "box"); + RefPtr renderBoxParent = AceType::MakeRefPtr(); + renderBoxParent->SetAccessibilityNode(accessNode); + RefPtr accessNodeTwo = AceType::MakeRefPtr(2, "box"); + RefPtr renderBoxChild = AceType::MakeRefPtr(); + renderBoxChild->SetAccessibilityNode(accessNodeTwo); + renderBoxParent->SetTouchRect(Rect(0.0, 0.0, BOX_WIDTH_PARENT, BOX_HEIGHT_PARENT)); + renderBoxChild->SetTouchRect(Rect(0.0, 0.0, BOX_WIDTH_CHILD, BOX_HEIGHT_CHILD)); + renderBoxParent->Attach(mockContext); + renderBoxChild->Attach(mockContext); + stackRender->AddChild(renderBoxParent); + renderBoxParent->AddChild(renderBoxChild); + + /** + * @tc.steps: step3. Verify that the mouse enter/exit animation callback called correctly. + * @tc.expected: step3. mouse enter/exit animation callback called correctly. + */ + MouseEvent event { .x = 700, .y = 700 }; + mockContext->OnMouseEvent(event); + EXPECT_EQ(renderBoxParent->enterAnimationCount_, 0); + EXPECT_EQ(renderBoxParent->exitAnimationCount_, 0); + EXPECT_EQ(renderBoxChild->enterAnimationCount_, 0); + EXPECT_EQ(renderBoxChild->exitAnimationCount_, 0); + MouseEvent eventTwo { .x = 500, .y = 500 }; + mockContext->OnMouseEvent(eventTwo); + EXPECT_EQ(renderBoxParent->enterAnimationCount_, 0); + EXPECT_EQ(renderBoxParent->exitAnimationCount_, 0); + EXPECT_EQ(renderBoxChild->enterAnimationCount_, 0); + EXPECT_EQ(renderBoxChild->exitAnimationCount_, 0); + MouseEvent eventThree { .x = 300, .y = 300 }; + mockContext->OnMouseEvent(eventThree); + EXPECT_EQ(renderBoxParent->enterAnimationCount_, 1); + EXPECT_EQ(renderBoxParent->exitAnimationCount_, 0); + EXPECT_EQ(renderBoxChild->enterAnimationCount_, 0); + EXPECT_EQ(renderBoxChild->exitAnimationCount_, 0); + MouseEvent eventFour { .x = 100, .y = 100 }; + mockContext->OnMouseEvent(eventFour); + EXPECT_EQ(renderBoxParent->enterAnimationCount_, 1); + EXPECT_EQ(renderBoxParent->exitAnimationCount_, 1); + EXPECT_EQ(renderBoxChild->enterAnimationCount_, 1); + EXPECT_EQ(renderBoxChild->exitAnimationCount_, 0); + MouseEvent eventFive { .x = 400, .y = 400 }; + mockContext->OnMouseEvent(eventFive); + EXPECT_EQ(renderBoxParent->enterAnimationCount_, 2); + EXPECT_EQ(renderBoxParent->exitAnimationCount_, 1); + EXPECT_EQ(renderBoxChild->enterAnimationCount_, 1); + EXPECT_EQ(renderBoxChild->exitAnimationCount_, 1); +} + +/** + * @tc.name: MouseHoverAnimationTest010 + * @tc.desc: test parent and child mouse enter/exit animation. + * @tc.type: FUNC + * @tc.require: AR000F3CDO + * @tc.author: jiachunhui + */ +HWTEST_F(MouseHoverAnimationTest, MouseHoverAnimationTest010, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "MouseHoverAnimationTest MouseHoverAnimationTest010"; + /** + * @tc.steps: step1. construct RenderBox and RenderRoot. + * @tc.expected: step1. properties set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + auto rootElemet = mockContext->SetupRootElement(); + auto renderRoot = rootElemet->GetRenderNode(); + auto stackRender = renderRoot->GetFirstChild(); + + /** + * @tc.steps: step2. set RenderBox and RenderRoot TouchRect. + * @tc.expected: step2. properties set correctly. + */ + renderRoot->SetTouchRect(Rect(0.0, 0.0, 1080.0, 1920.0)); + stackRender->SetTouchRect(Rect(0.0, 0.0, 1080.0, 1920.0)); + RefPtr accessNode = AceType::MakeRefPtr(1, "box"); + RefPtr renderBoxParent = AceType::MakeRefPtr(); + renderBoxParent->SetAccessibilityNode(accessNode); + RefPtr accessNodeTwo = AceType::MakeRefPtr(2, "box"); + RefPtr renderBoxChild = AceType::MakeRefPtr(); + renderBoxChild->SetAccessibilityNode(accessNodeTwo); + renderBoxParent->SetTouchRect(Rect(0.0, 0.0, BOX_WIDTH_PARENT, BOX_HEIGHT_PARENT)); + renderBoxChild->SetTouchRect(Rect(0.0, 0.0, BOX_WIDTH_CHILD, BOX_HEIGHT_CHILD)); + renderBoxParent->Attach(mockContext); + renderBoxChild->Attach(mockContext); + stackRender->AddChild(renderBoxParent); + renderBoxParent->AddChild(renderBoxChild); + + /** + * @tc.steps: step3. Verify that the mouse enter/exit animation callback called correctly. + * @tc.expected: step3. mouse entet/exit animation callback called correctly. + */ + MouseEvent event { .x = 100, .y = 100 }; + mockContext->OnMouseEvent(event); + EXPECT_EQ(renderBoxParent->enterAnimationCount_, 0); + EXPECT_EQ(renderBoxParent->exitAnimationCount_, 0); + EXPECT_EQ(renderBoxChild->enterAnimationCount_, 1); + EXPECT_EQ(renderBoxChild->exitAnimationCount_, 0); + MouseEvent eventTwo { .x = 300, .y = 300 }; + mockContext->OnMouseEvent(eventTwo); + EXPECT_EQ(renderBoxParent->enterAnimationCount_, 1); + EXPECT_EQ(renderBoxParent->exitAnimationCount_, 0); + EXPECT_EQ(renderBoxChild->enterAnimationCount_, 1); + EXPECT_EQ(renderBoxChild->exitAnimationCount_, 1); + MouseEvent eventThree { .x = 500, .y = 500 }; + mockContext->OnMouseEvent(eventThree); + EXPECT_EQ(renderBoxParent->enterAnimationCount_, 1); + EXPECT_EQ(renderBoxParent->exitAnimationCount_, 1); + EXPECT_EQ(renderBoxChild->enterAnimationCount_, 1); + EXPECT_EQ(renderBoxChild->exitAnimationCount_, 1); + MouseEvent eventFour { .x = 700, .y = 700 }; + mockContext->OnMouseEvent(eventFour); + EXPECT_EQ(renderBoxParent->enterAnimationCount_, 1); + EXPECT_EQ(renderBoxParent->exitAnimationCount_, 1); + EXPECT_EQ(renderBoxChild->enterAnimationCount_, 1); + EXPECT_EQ(renderBoxChild->exitAnimationCount_, 1); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/box/mouse_hover_test.cpp b/frameworks/core/components/test/unittest/box/mouse_hover_test.cpp new file mode 100644 index 00000000..a4a5b114 --- /dev/null +++ b/frameworks/core/components/test/unittest/box/mouse_hover_test.cpp @@ -0,0 +1,217 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "core/components/box/box_component.h" +#include "core/components/box/render_box.h" +#include "core/components/test/unittest/box/box_test_utils.h" +#include "core/components/test/unittest/mock/mock_render_common.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +const double BOX_WIDTH = 500.0; +const double BOX_HEIGHT = 500.0; + +} // namespace + +class MouseHoverTest : public testing::Test { +public: + static void SetUpTestCase() + { + GTEST_LOG_(INFO) << "MouseHoverTest SetUpTestCase"; + } + + static void TearDownTestCase() + { + GTEST_LOG_(INFO) << "MouseHoverTest TearDownTestCase"; + } + + void SetUp() override {} + + void TearDown() override {} +}; + +/** + * @tc.name: MouseHoverTest001 + * @tc.desc: test mouse enter callback. + * @tc.type: FUNC + * @tc.require: AR000F3CDH + * @tc.author: jiachunhui + */ +HWTEST_F(MouseHoverTest, MouseHoverTest001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "MouseHoverTest MouseHoverTest001"; + /** + * @tc.steps: step1. construct BoxComponent with Alignment::TOP_LEFT. + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetAlignment(Alignment::TOP_LEFT); + boxComponent->SetWidth(BOX_WIDTH); + boxComponent->SetHeight(BOX_HEIGHT); + + /** + * @tc.steps: step2. construct RenderBox and RenderRoot. + * @tc.expected: step2. properties set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + renderRoot->SetTouchRect(Rect(0.0, 0.0, 1080.0, 1920.0)); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->Attach(mockContext); + renderRoot->AddChild(renderBox); + renderBox->Update(boxComponent); + + /** + * @tc.steps: step3. Verify that the mouse enter callback called correctly. + * @tc.expected: step3. mouse enter callback called correctly. + */ + renderRoot->PerformLayout(); + renderBox->MouseHoverTest(Point(100.0, 100.0)); + EXPECT_EQ(renderBox->enterCallBackCount_, 1); + EXPECT_EQ(renderBox->exitCallBackCount_, 0); +} + +/** + * @tc.name: MouseHoverTest002 + * @tc.desc: test mouse illegal exit callback. + * @tc.type: FUNC + * @tc.require: AR000F3CDH + * @tc.author: jiachunhui + */ +HWTEST_F(MouseHoverTest, MouseHoverTest002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "MouseHoverTest MouseHoverTest002"; + /** + * @tc.steps: step1. construct BoxComponent with Alignment::TOP_LEFT. + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetAlignment(Alignment::TOP_LEFT); + boxComponent->SetWidth(BOX_WIDTH); + boxComponent->SetHeight(BOX_HEIGHT); + + /** + * @tc.steps: step2. construct RenderBox and RenderRoot. + * @tc.expected: step2. properties set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + renderRoot->SetTouchRect(Rect(0.0, 0.0, 1080.0, 1920.0)); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->Attach(mockContext); + renderRoot->AddChild(renderBox); + renderBox->Update(boxComponent); + + /** + * @tc.steps: step3. Verify that the mouse exit callback called wrong. + * @tc.expected: step3. mouse exit callback called wrong. + */ + renderRoot->PerformLayout(); + renderBox->MouseHoverTest(Point(600.0, 600.0)); + EXPECT_EQ(renderBox->enterCallBackCount_, 0); + EXPECT_EQ(renderBox->exitCallBackCount_, 0); +} + +/** + * @tc.name: MouseHoverTest003 + * @tc.desc: test mouse illegal enter callback. + * @tc.type: FUNC + * @tc.require: AR000F3CDI + * @tc.author: jiachunhui + */ +HWTEST_F(MouseHoverTest, MouseHoverTest003, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "MouseHoverTest MouseHoverTest003"; + /** + * @tc.steps: step1. construct BoxComponent with Alignment::TOP_LEFT. + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetAlignment(Alignment::TOP_LEFT); + boxComponent->SetWidth(BOX_WIDTH); + boxComponent->SetHeight(BOX_HEIGHT); + + /** + * @tc.steps: step2. construct RenderBox and RenderRoot. + * @tc.expected: step2. properties set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + renderRoot->SetTouchRect(Rect(0.0, 0.0, 1080.0, 1920.0)); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->Attach(mockContext); + renderRoot->AddChild(renderBox); + renderBox->Update(boxComponent); + + /** + * @tc.steps: step3. Verify that the mouse exit callback called correctly. + * @tc.expected: step3. mouse exit callback called correctly. + */ + renderRoot->PerformLayout(); + renderBox->MouseHoverTest(Point(100.0, 100.0)); + renderBox->MouseHoverTest(Point(600.0, 600.0)); + EXPECT_EQ(renderBox->enterCallBackCount_, 1); + EXPECT_EQ(renderBox->exitCallBackCount_, 1); +} + +/** + * @tc.name: MouseHoverTest004 + * @tc.desc: test mouse exit callback. + * @tc.type: FUNC + * @tc.require: AR000F3CDI + * @tc.author: jiachunhui + */ +HWTEST_F(MouseHoverTest, MouseHoverTest004, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "MouseHoverTest MouseHoverTest004"; + /** + * @tc.steps: step1. construct BoxComponent with Alignment::TOP_LEFT. + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetAlignment(Alignment::TOP_LEFT); + boxComponent->SetWidth(BOX_WIDTH); + boxComponent->SetHeight(BOX_HEIGHT); + + /** + * @tc.steps: step2. construct RenderBox and RenderRoot. + * @tc.expected: step2. properties set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + renderRoot->SetTouchRect(Rect(0.0, 0.0, 1080.0, 1920.0)); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->Attach(mockContext); + renderRoot->AddChild(renderBox); + renderBox->Update(boxComponent); + + /** + * @tc.steps: step3. Verify that the mouse enter callback called wrong. + * @tc.expected: step3. mouse enter callback called wrong. + */ + renderRoot->PerformLayout(); + renderBox->MouseHoverTest(Point(100.0, 100.0)); + renderBox->MouseHoverTest(Point(200.0, 200.0)); + EXPECT_EQ(renderBox->enterCallBackCount_, 1); + EXPECT_EQ(renderBox->exitCallBackCount_, 0); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/box/render_box_percent_test.cpp b/frameworks/core/components/test/unittest/box/render_box_percent_test.cpp new file mode 100644 index 00000000..0c2dbed4 --- /dev/null +++ b/frameworks/core/components/test/unittest/box/render_box_percent_test.cpp @@ -0,0 +1,783 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +#include "gtest/gtest.h" + +#define private public +#define protected public +#include "core/components/box/box_component.h" +#include "core/components/box/render_box.h" +#include "core/components/bubble/render_bubble.h" +#include "core/components/flex/render_flex.h" +#include "core/components/flex/render_flex_item.h" +#include "core/components/grid_layout/grid_layout_component.h" +#include "core/components/grid_layout/render_grid_layout.h" +#include "core/components/grid_layout/render_grid_layout_item.h" +#include "core/components/list/list_component.h" +#include "core/components/list/render_list.h" +#include "core/components/scroll/render_single_child_scroll.h" +#include "core/components/stack/render_stack.h" +#include "core/components/swiper/flutter_render_swiper.h" +#include "core/components/swiper/render_swiper.h" +#include "core/components/swiper/swiper_component.h" +#include "core/components/tab_bar/render_tab_bar.h" +#include "core/components/tab_bar/render_tab_content.h" +#include "core/components/test/unittest/box/box_test_utils.h" +#include "core/components/test/unittest/mock/mock_render_common.h" +#include "core/components/wrap/wrap_component.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +const Dimension PERCENT_HALF = Dimension(0.5, DimensionUnit::PERCENT); +const Dimension PERCENT_NEGATIVE = Dimension(-0.5, DimensionUnit::PERCENT); +const Dimension PERCENT_OVER_LIMIT = Dimension(1.2, DimensionUnit::PERCENT); +const Dimension PARENT_SIZE = Dimension(100.0, DimensionUnit::PX); +const Dimension HALF_SIZE = Dimension(50.0, DimensionUnit::PX); +const size_t WRAP_CHILD_SIZE = 4; +const size_t FLEX_CHILD_SIZE = 2; +const size_t SWIPER_CHILD_SIZE = 2; +const Dimension BUBBLE_MARGIN = Dimension(48.0, DimensionUnit::PX); +const Dimension INDICATOR_POINT_PADDING(8.0, DimensionUnit::VP); + +void MockPerformLayout( + const RefPtr& context, const RefPtr& parendNode, bool infinitRoot = false) +{ + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + if (infinitRoot) { + renderRoot->SetPaintRect(Rect(0.0, 0.0, Size::INFINITE_SIZE, Size::INFINITE_SIZE)); + } + renderRoot->AddChild(parendNode); + renderRoot->PerformLayout(); +} + +RefPtr ConstructRenderBox( + const RefPtr& context, const Dimension& width, const Dimension& height) +{ + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetWidth(width.Value(), width.Unit()); + boxComponent->SetHeight(height.Value(), height.Unit()); + boxComponent->SetPercentFlag(0); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->Attach(context); + renderBox->Update(boxComponent); + return renderBox; +} + +void TestBoxInWrap(const RefPtr& context, const WrapDirection& direction) +{ + /** + * @tc.steps: step1. Construct a wrap and 4 child box with percent value(2 box in a line). + */ + RefPtr wrap = AceType::MakeRefPtr(std::list>()); + wrap->SetDirection(direction); + RefPtr renderWrap = AceType::MakeRefPtr(); + renderWrap->Attach(context); + renderWrap->Update(wrap); + std::array, WRAP_CHILD_SIZE> childRenderBox; + for (size_t i = 0; i < childRenderBox.size(); ++i) { + childRenderBox[i] = ConstructRenderBox(context, PERCENT_HALF, PERCENT_HALF); + } + + /** + * @tc.steps: step2. Add child box to wrap, add wrap to box of 100x100, perform layout. + * @tc.expected: step2. All child box's size is 50x50. + */ + auto parentRenderBox = ConstructRenderBox(context, PARENT_SIZE, PARENT_SIZE); + parentRenderBox->AddChild(renderWrap); + for (size_t i = 0; i < childRenderBox.size(); ++i) { + renderWrap->AddChild(childRenderBox[i]); + } + + MockPerformLayout(context, AceType::DynamicCast(parentRenderBox)); + + for (size_t i = 0; i < childRenderBox.size(); ++i) { + ASSERT_TRUE(childRenderBox[i]->GetLayoutSize() == Size(HALF_SIZE.Value(), HALF_SIZE.Value())); + } +} + +void TestBoxInFlexItem(const RefPtr& context, double flexGrow, double flexShrink, double flexBasis) +{ + /** + * @tc.steps: step1. Construct a renderFlex and children. + */ + RefPtr renderFlex = AceType::MakeRefPtr(); + renderFlex->Attach(context); + std::array, FLEX_CHILD_SIZE> renderChildren; + for (size_t i = 0; i < renderChildren.size(); ++i) { + RefPtr renderFlexItem = AceType::MakeRefPtr(); + renderFlexItem->SetFlexGrow(flexGrow); + renderFlexItem->SetFlexShrink(flexShrink); + renderFlexItem->SetFlexBasis(flexBasis); + renderFlexItem->Attach(context); + auto renderBox = ConstructRenderBox(context, PERCENT_HALF, PERCENT_HALF); + renderFlexItem->AddChild(renderBox); + renderChildren[i] = renderFlexItem; + } + + /** + * @tc.steps: step2. Add children to renderFlex, add renderFlex to box of 100x100, perform layout. + * @tc.expected: step2. All child box's size is 50x50. + */ + auto parentRenderBox = ConstructRenderBox(context, PARENT_SIZE, PARENT_SIZE); + parentRenderBox->AddChild(renderFlex); + for (size_t i = 0; i < renderChildren.size(); ++i) { + renderFlex->AddChild(renderChildren[i]); + } + MockPerformLayout(context, AceType::DynamicCast(parentRenderBox)); + for (size_t i = 0; i < renderChildren.size(); ++i) { + ASSERT_TRUE(renderChildren[i]->GetLayoutSize() == Size(HALF_SIZE.Value(), HALF_SIZE.Value())); + } +} + +RefPtr TestSwiperIndicator( + const RefPtr& context, const RefPtr& indicator) +{ + auto parentRenderBox = ConstructRenderBox(context, PARENT_SIZE, PARENT_SIZE); + auto renderSwiper = AceType::DynamicCast(RenderSwiper::Create()); + renderSwiper->Attach(context); + std::list> swiperChildren; + for (size_t i = 0; i < SWIPER_CHILD_SIZE; ++i) { + auto box = AceType::MakeRefPtr(); + box->SetWidth(PARENT_SIZE.Value(), PARENT_SIZE.Unit()); + box->SetHeight(PARENT_SIZE.Value(), PARENT_SIZE.Unit()); + swiperChildren.push_back(box); + auto renderBox = RenderBox::Create(); + renderBox->Update(box); + renderSwiper->AddChild(renderBox); + } + RefPtr swiper = AceType::MakeRefPtr(swiperChildren); + swiper->SetIndicator(indicator); + renderSwiper->Update(swiper); + parentRenderBox->AddChild(renderSwiper); + MockPerformLayout(context, AceType::DynamicCast(parentRenderBox)); + return renderSwiper; +} + +} // namespace + +class RenderBoxPercentTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; + +protected: + RefPtr context_; +}; + +void RenderBoxPercentTest::SetUpTestCase() {} +void RenderBoxPercentTest::TearDownTestCase() {} + +void RenderBoxPercentTest::SetUp() +{ + context_ = MockRenderCommon::GetMockContext(); +} + +void RenderBoxPercentTest::TearDown() +{ + context_ = nullptr; +} + +/** + * @tc.name: RenderBoxHandlePercentTest001 + * @tc.desc: RenderBox could handle width and height in percent. + * @tc.type: FUNC + * @tc.require: AR000DQ1PV + * @tc.author: liruokun + */ +HWTEST_F(RenderBoxPercentTest, RenderBoxHandlePercentTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct parent box and mount child box, perform layout. + * @tc.expected: step1. Child render box's size calculate correctly. + */ + auto parentRenderBox = ConstructRenderBox(context_, PARENT_SIZE, PARENT_SIZE); + auto childBox = ConstructRenderBox(context_, PERCENT_HALF, PERCENT_HALF); + parentRenderBox->AddChild(childBox); + MockPerformLayout(context_, AceType::DynamicCast(parentRenderBox)); + + ASSERT_TRUE(childBox->GetLayoutSize() == Size(HALF_SIZE.Value(), HALF_SIZE.Value())); +} + +/** + * @tc.name: RenderBoxHandlePercentTest002 + * @tc.desc: RenderBox could handle width and height in negative percent. + * @tc.type: FUNC + * @tc.require: AR000DQ1PV + * @tc.author: liruokun + */ +HWTEST_F(RenderBoxPercentTest, RenderBoxHandlePercentTest002, TestSize.Level1) +{ + /** + * @tc.steps: step2. Construct parent box and mount child box, perform layout. + * @tc.expected: step2. Child render box's size is zero. + */ + auto parentRenderBox = ConstructRenderBox(context_, PARENT_SIZE, PARENT_SIZE); + auto childBox = ConstructRenderBox(context_, PERCENT_NEGATIVE, PERCENT_NEGATIVE); + parentRenderBox->AddChild(childBox); + MockPerformLayout(context_, AceType::DynamicCast(parentRenderBox)); + + ASSERT_TRUE(childBox->GetLayoutSize() == Size(0.0, 0.0)); +} + +/** + * @tc.name: RenderBoxHandlePercentTest003 + * @tc.desc: RenderBox could handle width and height in percent over 100%. + * @tc.type: FUNC + * @tc.require: AR000DQ1PV + * @tc.author: liruokun + */ +HWTEST_F(RenderBoxPercentTest, RenderBoxHandlePercentTest003, TestSize.Level1) +{ + /** + * @tc.steps: step2. Construct parent box and mount child box, perform layout. + * @tc.expected: step2. Child render box's size is same with parent. + */ + auto parentRenderBox = ConstructRenderBox(context_, PARENT_SIZE, PARENT_SIZE); + auto childBox = ConstructRenderBox(context_, PERCENT_OVER_LIMIT, PERCENT_OVER_LIMIT); + parentRenderBox->AddChild(childBox); + MockPerformLayout(context_, AceType::DynamicCast(parentRenderBox)); + + ASSERT_TRUE(childBox->GetLayoutSize() == Size(PARENT_SIZE.Value(), PARENT_SIZE.Value())); +} + +/** + * @tc.name: RenderBoxHandlePercentTest004 + * @tc.desc: RenderBox could handle width and height in percent, parent size is INFINITE. + * @tc.type: FUNC + * @tc.require: AR000DQ1PV + * @tc.author: liruokun + */ +HWTEST_F(RenderBoxPercentTest, RenderBoxHandlePercentTest004, TestSize.Level1) +{ + /** + * @tc.steps: step2. Construct parent box and mount child box, perform layout. + * @tc.expected: step2. Child render box's size is zero. + */ + auto parentRenderBox = ConstructRenderBox(context_, Dimension(Size::INFINITE_SIZE), Dimension(Size::INFINITE_SIZE)); + auto childBox = ConstructRenderBox(context_, PERCENT_HALF, PERCENT_HALF); + parentRenderBox->AddChild(childBox); + MockPerformLayout(context_, AceType::DynamicCast(parentRenderBox), true); + + ASSERT_TRUE(childBox->GetLayoutSize() == Size(0.0, 0.0)); +} + +/** + * @tc.name: RenderBoxPercentBoxInWrap001 + * @tc.desc: RenderBox could handle width and height in percent, parent is wrap, horizontal direction. + * @tc.type: FUNC + * @tc.require: AR000DQ1PV + * @tc.author: liruokun + */ +HWTEST_F(RenderBoxPercentTest, RenderBoxPercentBoxInWrap001, TestSize.Level1) +{ + TestBoxInWrap(context_, WrapDirection::HORIZONTAL); +} + +/** + * @tc.name: RenderBoxPercentBoxInWrap002 + * @tc.desc: RenderBox could handle width and height in percent, parent is wrap, vertical direction. + * @tc.type: FUNC + * @tc.require: AR000DQ1PV + * @tc.author: liruokun + */ +HWTEST_F(RenderBoxPercentTest, RenderBoxPercentBoxInWrap002, TestSize.Level1) +{ + TestBoxInWrap(context_, WrapDirection::VERTICAL); +} + +/** + * @tc.name: RenderBoxPercentBoxInFLexItem001 + * @tc.desc: RenderBox could handle width and height in percent, parent is flexItem(flexGrow=0, flexShrink=0, + * flexBasis=0). + * @tc.type: FUNC + * @tc.require: AR000DQ1PV + * @tc.author: liruokun + */ +HWTEST_F(RenderBoxPercentTest, RenderBoxPercentBoxInFLexItem001, TestSize.Level1) +{ + TestBoxInFlexItem(context_, 0.0, 0.0, 0.0); +} + +/** + * @tc.name: RenderBoxPercentBoxInFLexItem002 + * @tc.desc: RenderBox could handle width and height in percent, parent is flexItem(flexGrow=1, flexShrink=0, + * flexBasis=0). + * @tc.type: FUNC + * @tc.require: AR000DQ1PV + * @tc.author: liruokun + */ +HWTEST_F(RenderBoxPercentTest, RenderBoxPercentBoxInFLexItem002, TestSize.Level1) +{ + TestBoxInFlexItem(context_, 1.0, 0.0, 0.0); +} + +/** + * @tc.name: RenderBoxPercentBoxInFLexItem003 + * @tc.desc: RenderBox could handle width and height in percent, parent is flexItem(flexGrow=0, flexShrink=1, + * flexBasis=0). + * @tc.type: FUNC + * @tc.require: AR000DQ1PV + * @tc.author: liruokun + */ +HWTEST_F(RenderBoxPercentTest, RenderBoxPercentBoxInFLexItem003, TestSize.Level1) +{ + TestBoxInFlexItem(context_, 0.0, 1.0, 0.0); +} + +/** + * @tc.name: RenderBoxPercentBoxInFLexItem004 + * @tc.desc: RenderBox could handle width and height in percent, parent is flexItem(flexGrow=1, flexShrink=0, + * flexBasis=10). + * @tc.type: FUNC + * @tc.require: AR000DQ1PV + * @tc.author: liruokun + */ +HWTEST_F(RenderBoxPercentTest, RenderBoxPercentBoxInFLexItem004, TestSize.Level1) +{ + TestBoxInFlexItem(context_, 1.0, 0.0, 10.0); +} + +/** + * @tc.name: RenderBoxPercentBoxInFLexItem005 + * @tc.desc: RenderBox could handle width and height in percent, parent is flexItem(flexGrow=0, flexShrink=1, + * flexBasis=100). + * @tc.type: FUNC + * @tc.require: AR000DQ1PV + * @tc.author: liruokun + */ +HWTEST_F(RenderBoxPercentTest, RenderBoxPercentBoxInFLexItem005, TestSize.Level1) +{ + TestBoxInFlexItem(context_, 0.0, 1.0, 100.0); +} + +/** + * @tc.name: RenderBoxPercentBoxInGridLayout001 + * @tc.desc: RenderBox could handle width and height in percent, parent is GridLayout. + * @tc.type: FUNC + * @tc.require: AR000DQ1PV + * @tc.author: liruokun + */ +HWTEST_F(RenderBoxPercentTest, RenderBoxPercentBoxInGridLayout001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct parent box with 100x100, and grid layout, grid item, child box with 50%x50%. + */ + auto parentRenderBox = ConstructRenderBox(context_, PARENT_SIZE, PARENT_SIZE); + auto renderGrid = AceType::MakeRefPtr(); + auto gridComponent = AceType::MakeRefPtr(std::list>()); + renderGrid->Attach(context_); + renderGrid->Update(gridComponent); + parentRenderBox->AddChild(renderGrid); + auto childBox = ConstructRenderBox(context_, PERCENT_HALF, PERCENT_HALF); + auto renderGridItem = AceType::MakeRefPtr(); + renderGridItem->Attach(context_); + renderGridItem->AddChild(childBox); + renderGrid->AddChild(renderGridItem); + + /** + * @tc.steps: step2. Perform layout. + * @tc.expected: step2. Child box's size is 50x50. + */ + MockPerformLayout(context_, AceType::DynamicCast(parentRenderBox)); + ASSERT_TRUE(childBox->GetLayoutSize() == Size(HALF_SIZE.Value(), HALF_SIZE.Value())); +} + +/** + * @tc.name: RenderBoxPercentBoxInScroll001 + * @tc.desc: RenderBox could handle width and height in percent, parent is scroll. + * @tc.type: FUNC + * @tc.require: AR000DQ1PV + * @tc.author: liruokun + */ +HWTEST_F(RenderBoxPercentTest, RenderBoxPercentBoxInScroll001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct parent box with 100x100, and scroll layout, child box with 50%x50%. + */ + auto parentRenderBox = ConstructRenderBox(context_, PARENT_SIZE, PARENT_SIZE); + auto renderScroll = RenderSingleChildScroll::Create(); + renderScroll->Attach(context_); + parentRenderBox->AddChild(renderScroll); + auto childBox = ConstructRenderBox(context_, PERCENT_HALF, PERCENT_HALF); + renderScroll->AddChild(childBox); + + /** + * @tc.steps: step2. Perform layout. + * @tc.expected: step2. Child box's size is 50x0. + */ + MockPerformLayout(context_, AceType::DynamicCast(parentRenderBox)); + ASSERT_TRUE(childBox->GetLayoutSize() == Size(0.0, HALF_SIZE.Value())); +} + +/** + * @tc.name: RenderBoxPercentBoxInList001 + * @tc.desc: RenderBox could handle width and height in percent, parent is list. + * @tc.type: FUNC + * @tc.require: AR000DQ1PV + * @tc.author: liruokun + */ +HWTEST_F(RenderBoxPercentTest, RenderBoxPercentBoxInList001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct parent box with 100x100, and list, child box with 50%x50%. + */ + auto parentRenderBox = ConstructRenderBox(context_, PARENT_SIZE, PARENT_SIZE); + auto renderList = AceType::MakeRefPtr(); + renderList->Attach(context_); + auto listComponent = AceType::MakeRefPtr(); + listComponent->SetFlexAlign(FlexAlign::FLEX_START); + renderList->Update(listComponent); + parentRenderBox->AddChild(renderList); + auto childBox = ConstructRenderBox(context_, PERCENT_HALF, PERCENT_HALF); + auto renderListItem = RenderListItem::Create(); + renderListItem->Attach(context_); + renderListItem->AddChild(childBox); + renderList->AddChild(renderListItem); + renderList->AddListItem(0, renderListItem); + + /** + * @tc.steps: step2. Perform layout. + * @tc.expected: step2. Child box's size is 50x0. + */ + MockPerformLayout(context_, AceType::DynamicCast(parentRenderBox)); + ASSERT_TRUE(childBox->GetLayoutSize() == Size(HALF_SIZE.Value(), 0.0)); +} + +/** + * @tc.name: RenderBoxPercentBoxInListItem001 + * @tc.desc: RenderBox could handle width and height in percent, parent is listItem. + * @tc.type: FUNC + * @tc.require: AR000DQ1PV + * @tc.author: liruokun + */ +HWTEST_F(RenderBoxPercentTest, RenderBoxPercentBoxInListItem001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct parent box with 100x100, and listItem, child box with 50%x50%. + */ + auto parentRenderBox = ConstructRenderBox(context_, PARENT_SIZE, PARENT_SIZE); + auto renderListItem = RenderListItem::Create(); + parentRenderBox->AddChild(renderListItem); + auto childBox = ConstructRenderBox(context_, PERCENT_HALF, PERCENT_HALF); + renderListItem->Attach(context_); + renderListItem->AddChild(childBox); + + /** + * @tc.steps: step2. Perform layout. + * @tc.expected: step2. Child box's size is 50x50. + */ + MockPerformLayout(context_, AceType::DynamicCast(parentRenderBox)); + ASSERT_TRUE(childBox->GetLayoutSize() == Size(HALF_SIZE.Value(), HALF_SIZE.Value())); +} + +/** + * @tc.name: RenderBoxPercentBoxInStack001 + * @tc.desc: RenderBox could handle width and height in percent, parent is stack. + * @tc.type: FUNC + * @tc.require: AR000DQ1PV + * @tc.author: liruokun + */ +HWTEST_F(RenderBoxPercentTest, RenderBoxPercentBoxInStack001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct parent box with 100x100, and stack, child box with 50%x50%. + */ + auto parentRenderBox = ConstructRenderBox(context_, PARENT_SIZE, PARENT_SIZE); + auto renderStack = RenderStack::Create(); + parentRenderBox->AddChild(renderStack); + auto childBox = ConstructRenderBox(context_, PERCENT_HALF, PERCENT_HALF); + renderStack->Attach(context_); + renderStack->AddChild(childBox); + + /** + * @tc.steps: step2. Perform layout. + * @tc.expected: step2. Child box's size is 50x50. + */ + MockPerformLayout(context_, AceType::DynamicCast(parentRenderBox)); + ASSERT_TRUE(childBox->GetLayoutSize() == Size(HALF_SIZE.Value(), HALF_SIZE.Value())); +} + +/** + * @tc.name: RenderBoxPercentBoxInSwiper001 + * @tc.desc: RenderBox could handle width and height in percent, parent is swiper. + * @tc.type: FUNC + * @tc.require: AR000DQ1PV + * @tc.author: liruokun + */ +HWTEST_F(RenderBoxPercentTest, RenderBoxPercentBoxInSwiper001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct parent box with 100x100, and swiper, child box with 50%x50%. + */ + auto parentRenderBox = ConstructRenderBox(context_, PARENT_SIZE, PARENT_SIZE); + auto renderSwiper = RenderSwiper::Create(); + parentRenderBox->AddChild(renderSwiper); + auto childBox = ConstructRenderBox(context_, PERCENT_HALF, PERCENT_HALF); + renderSwiper->Attach(context_); + renderSwiper->AddChild(childBox); + + /** + * @tc.steps: step2. Perform layout. + * @tc.expected: step2. Child box's size is 50x50. + */ + MockPerformLayout(context_, AceType::DynamicCast(parentRenderBox)); + GTEST_LOG_(INFO) << "RenderBoxPercentBoxInSwiper001 " << childBox->GetLayoutSize().ToString(); + ASSERT_TRUE(childBox->GetLayoutSize() == Size(HALF_SIZE.Value(), HALF_SIZE.Value())); +} + +#ifndef WEARABLE_PRODUCT +/** + * @tc.name: RenderBoxPercentBoxInTabBar001 + * @tc.desc: RenderBox could handle width and height in percent, parent is tabBar. + * @tc.type: FUNC + * @tc.require: AR000DQ1PV + * @tc.author: liruokun + */ +HWTEST_F(RenderBoxPercentTest, RenderBoxPercentBoxInTabBar001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct parent box with 100x100, and tabBar, child box with 50%x50%. + */ + auto parentRenderBox = ConstructRenderBox(context_, PARENT_SIZE, PARENT_SIZE); + auto renderTabBar = RenderTabBar::Create(); + const auto& controller = TabController::GetController(0); + auto tabBarIndicator = AceType::MakeRefPtr(); + auto tabBarComponent = + AceType::MakeRefPtr(std::list>(), controller, tabBarIndicator); + renderTabBar->Update(tabBarComponent); + parentRenderBox->AddChild(renderTabBar); + auto childBox = ConstructRenderBox(context_, PERCENT_HALF, PERCENT_HALF); + renderTabBar->Attach(context_); + renderTabBar->AddChild(childBox); + + /** + * @tc.steps: step2. Perform layout. + * @tc.expected: step2. Child box's size is 50x50. + */ + MockPerformLayout(context_, AceType::DynamicCast(parentRenderBox)); + ASSERT_TRUE(childBox->GetLayoutSize() == Size(HALF_SIZE.Value(), HALF_SIZE.Value())); +} + +/** + * @tc.name: RenderBoxPercentBoxInTabContent001 + * @tc.desc: RenderBox could handle width and height in percent, parent is tab content. + * @tc.type: FUNC + * @tc.require: AR000DQ1PV + * @tc.author: liruokun + */ +HWTEST_F(RenderBoxPercentTest, RenderBoxPercentBoxInTabContent001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct parent box with 100x100, and tab content, child box with 50%x50%. + */ + auto parentRenderBox = ConstructRenderBox(context_, PARENT_SIZE, PARENT_SIZE); + auto renderTabContent = AceType::DynamicCast(RenderTabContent::Create()); + const auto& controller = TabController::GetController(0); + auto tabContentComponent = AceType::MakeRefPtr(std::list>(), controller); + renderTabContent->Update(tabContentComponent); + parentRenderBox->AddChild(renderTabContent); + auto childBox = ConstructRenderBox(context_, PERCENT_HALF, PERCENT_HALF); + renderTabContent->Attach(context_); + renderTabContent->AddChild(childBox); + renderTabContent->AddChildContent(0, childBox); + + /** + * @tc.steps: step2. Perform layout. + * @tc.expected: step2. Child box's size is 50x50. + */ + MockPerformLayout(context_, AceType::DynamicCast(parentRenderBox)); + ASSERT_TRUE(childBox->GetLayoutSize() == Size(HALF_SIZE.Value(), HALF_SIZE.Value())); +} +#endif + +/** + * @tc.name: RenderBoxPercentBoxInBubble001 + * @tc.desc: RenderBox could handle width and height in percent, parent is bubble (popup). + * @tc.type: FUNC + * @tc.require: AR000DQ1PV + * @tc.author: liruokun + */ +HWTEST_F(RenderBoxPercentTest, RenderBoxPercentBoxInBubble001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct parent box with 100x100, and bubble, child box with 50%x50%. + */ + auto parentRenderBox = ConstructRenderBox(context_, PARENT_SIZE, PARENT_SIZE); + auto renderBubble = RenderBubble::Create(); + parentRenderBox->AddChild(renderBubble); + auto childBox = ConstructRenderBox(context_, PERCENT_HALF, PERCENT_HALF); + renderBubble->Attach(context_); + renderBubble->AddChild(childBox); + + /** + * @tc.steps: step2. Perform layout. + * @tc.expected: step2. Child box's size is 50x50. + */ + MockPerformLayout(context_, AceType::DynamicCast(parentRenderBox)); + double expectWidth = (PARENT_SIZE.Value() - BUBBLE_MARGIN.Value()) * PERCENT_HALF.Value(); + ASSERT_TRUE(childBox->GetLayoutSize() == Size(expectWidth, HALF_SIZE.Value())); +} + +/** + * @tc.name: RenderBoxPercentSwiperIndicator001 + * @tc.desc: Swiper indicator could handle position in percent, left = 50%, top = 50%. + * @tc.type: FUNC + * @tc.require: AR000DQ1PV + * @tc.author: liruokun + */ +HWTEST_F(RenderBoxPercentTest, RenderBoxPercentSwiperIndicator001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Build a swiper component, set 50% to indicator left and top. + */ + auto indicator = AceType::MakeRefPtr(); + indicator->SetTop(PERCENT_HALF); + indicator->SetLeft(PERCENT_HALF); + auto renderSwiper = TestSwiperIndicator(context_, indicator); + + /** + * @tc.steps: step2. Check indicator position. + * @tc.expected: step2. Indicator position is x = 50, y = 50. + */ + ASSERT_TRUE(NearEqual(renderSwiper->indicatorPosition_.GetX(), PARENT_SIZE.Value() * PERCENT_HALF.Value())); + ASSERT_TRUE(NearEqual(renderSwiper->indicatorPosition_.GetY(), PARENT_SIZE.Value() * PERCENT_HALF.Value())); +} + +/** + * @tc.name: RenderBoxPercentSwiperIndicator002 + * @tc.desc: Swiper indicator could handle position in percent, left = -50%, top = -50%. + * @tc.type: FUNC + * @tc.require: AR000DQ1PV + * @tc.author: liruokun + */ +HWTEST_F(RenderBoxPercentTest, RenderBoxPercentSwiperIndicator002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Build a swiper component, set -50% to indicator left and top. + */ + auto indicator = AceType::MakeRefPtr(); + indicator->SetTop(PERCENT_NEGATIVE); + indicator->SetLeft(PERCENT_NEGATIVE); + auto renderSwiper = TestSwiperIndicator(context_, indicator); + + /** + * @tc.steps: step2. Check indicator position. + * @tc.expected: step2. Indicator position is x = 0, y = 0. + */ + ASSERT_TRUE(NearEqual(renderSwiper->indicatorPosition_.GetX(), 0.0)); + ASSERT_TRUE(NearEqual(renderSwiper->indicatorPosition_.GetY(), 0.0)); +} + +/** + * @tc.name: RenderBoxPercentSwiperIndicator003 + * @tc.desc: Swiper indicator could handle position in percent, left = 100%, top = 100%. + * @tc.type: FUNC + * @tc.require: AR000DQ1PV + * @tc.author: liruokun + */ +HWTEST_F(RenderBoxPercentTest, RenderBoxPercentSwiperIndicator003, TestSize.Level1) +{ + /** + * @tc.steps: step1. Build a swiper component, set 100% to indicator left and top. + */ + auto indicator = AceType::MakeRefPtr(); + indicator->SetTop(Dimension(1.0, DimensionUnit::PERCENT)); + indicator->SetLeft(Dimension(1.0, DimensionUnit::PERCENT)); + auto renderSwiper = TestSwiperIndicator(context_, indicator); + + /** + * @tc.steps: step2. Check indicator position. + * @tc.expected: step2. Indicator position is x = width - indicatorWidth, y = height - selectHeight. + */ + double indicatorSize = renderSwiper->NormalizeToPx(indicator->GetSize()); + double indicatorSelectSize = renderSwiper->NormalizeToPx(indicator->GetSelectedSize()); + double indicatorWidth = indicatorSelectSize + indicatorSize * (SWIPER_CHILD_SIZE - 1) + + renderSwiper->NormalizeToPx(INDICATOR_POINT_PADDING) * (SWIPER_CHILD_SIZE - 1); + double expectX = renderSwiper->swiperWidth_ - indicatorWidth; + double expectY = renderSwiper->swiperHeight_ - indicatorSelectSize; + + ASSERT_TRUE(NearEqual(renderSwiper->indicatorPosition_.GetX(), expectX)); + ASSERT_TRUE(NearEqual(renderSwiper->indicatorPosition_.GetY(), expectY)); +} + +/** + * @tc.name: RenderBoxPercentSwiperIndicator004 + * @tc.desc: Swiper indicator could handle position in percent, right = 50%, bottom = 50%. + * @tc.type: FUNC + * @tc.require: AR000DQ1PV + * @tc.author: liruokun + */ +HWTEST_F(RenderBoxPercentTest, RenderBoxPercentSwiperIndicator004, TestSize.Level1) +{ + /** + * @tc.steps: step1. Build a swiper component, set 50% to indicator right and bottom. + */ + auto indicator = AceType::MakeRefPtr(); + indicator->SetRight(PERCENT_HALF); + indicator->SetBottom(PERCENT_HALF); + auto renderSwiper = TestSwiperIndicator(context_, indicator); + + /** + * @tc.steps: step2. Check indicator position. + * @tc.expected: step2. Indicator position is x = 50% * width - indicatorWidth, y = 50% * height - selectHeight. + */ + double indicatorSize = renderSwiper->NormalizeToPx(indicator->GetSize()); + double indicatorSelectSize = renderSwiper->NormalizeToPx(indicator->GetSelectedSize()); + double indicatorWidth = indicatorSelectSize + indicatorSize * (SWIPER_CHILD_SIZE - 1) + + renderSwiper->NormalizeToPx(INDICATOR_POINT_PADDING) * (SWIPER_CHILD_SIZE - 1); + double expectX = renderSwiper->swiperWidth_ * PERCENT_HALF.Value() - indicatorWidth; + double expectY = renderSwiper->swiperHeight_ * PERCENT_HALF.Value() - indicatorSelectSize; + + ASSERT_TRUE(NearEqual(renderSwiper->indicatorPosition_.GetX(), expectX)); + ASSERT_TRUE(NearEqual(renderSwiper->indicatorPosition_.GetY(), expectY)); +} + +/** + * @tc.name: RenderBoxPercentSwiperIndicator005 + * @tc.desc: Swiper indicator could handle position in percent, left, top, right, bottom = 50%. + * @tc.type: FUNC + * @tc.require: AR000DQ1PV + * @tc.author: liruokun + */ +HWTEST_F(RenderBoxPercentTest, RenderBoxPercentSwiperIndicator005, TestSize.Level1) +{ + /** + * @tc.steps: step1. Build a swiper component, set 50% to indicator left, top, right and bottom. + */ + auto indicator = AceType::MakeRefPtr(); + indicator->SetTop(PERCENT_HALF); + indicator->SetLeft(PERCENT_HALF); + indicator->SetRight(PERCENT_HALF); + indicator->SetBottom(PERCENT_HALF); + auto renderSwiper = TestSwiperIndicator(context_, indicator); + + /** + * @tc.steps: step2. Check indicator position. + * @tc.expected: step2. Indicator position is x = 50, y = 50. + */ + ASSERT_TRUE(NearEqual(renderSwiper->indicatorPosition_.GetX(), PARENT_SIZE.Value() * PERCENT_HALF.Value())); + ASSERT_TRUE(NearEqual(renderSwiper->indicatorPosition_.GetY(), PARENT_SIZE.Value() * PERCENT_HALF.Value())); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/box/render_box_test.cpp b/frameworks/core/components/test/unittest/box/render_box_test.cpp new file mode 100644 index 00000000..a97760e8 --- /dev/null +++ b/frameworks/core/components/test/unittest/box/render_box_test.cpp @@ -0,0 +1,2622 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "core/components/box/box_component.h" +#include "core/components/box/render_box.h" +#include "core/components/test/unittest/box/box_test_utils.h" +#include "core/components/test/unittest/mock/mock_render_common.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +const double BOX_WIDTH = 1000.0; +const double BOX_HEIGHT = 1000.0; +const double ITEM_WIDTH = 100.0; +const double ITEM_HEIGHT = 100.0; + +const Offset OFFSET_TOP_LEFT = Offset(0.0, 0.0); +const Offset OFFSET_TOP_CENTER = Offset(450.0, 0.0); +const Offset OFFSET_TOP_RIGHT = Offset(900.0, 0.0); +const Offset OFFSET_CENTER_LEFT = Offset(0.0, 450.0); +const Offset OFFSET_CENTER = Offset(450.0, 450.0); +const Offset OFFSET_CENTER_RIGHT = Offset(900.0, 450.0); +const Offset OFFSET_BOTTOM_LEFT = Offset(0.0, 900.0); +const Offset OFFSET_BOTTOM_CENTER = Offset(450.0, 900.0); +const Offset OFFSET_BOTTOM_RIGHT = Offset(900.0, 900.0); + +const Size ZERO_SIZE = Size(0.0, 0.0); +const Size SMALL_SIZE = Size(50.0, 50.0); +const Size MIDDLE_SIZE = Size(100.0, 100.0); +const Size LARGE_SIZE = Size(200.0, 200.0); +const Size HUGE_SIZE = Size(500.0, 500.0); + +const Color SHADOW_COLOR = Color(0xffff0000); +const double SHADOW_RADIUS = 10.0; +const Offset SHADOW_OFFSET = Offset(1.0, 1.0); +const Border BACK_BORDER = Border(BorderEdge(Color(0xff000000), Dimension(1.0, DimensionUnit::PX), BorderStyle::NONE)); + +} // namespace + +class RenderBoxTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; +}; + +void RenderBoxTest::SetUpTestCase() {} +void RenderBoxTest::TearDownTestCase() {} +void RenderBoxTest::SetUp() {} +void RenderBoxTest::TearDown() {} + +/** + * @tc.name: RenderBoxTest001 + * @tc.desc: Verify Box PerformLayout when align TOP_LEFT. + * @tc.type: FUNC + * @tc.require: AR000DAQTR + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderBoxTest, RenderBoxTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxComponent with Alignment::TOP_LEFT. + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetAlignment(Alignment::TOP_LEFT); + boxComponent->SetWidth(BOX_WIDTH); + boxComponent->SetHeight(BOX_HEIGHT); + + /** + * @tc.steps: step2. construct RenderBox with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->Attach(mockContext); + renderRoot->AddChild(renderBox); + renderBox->Update(boxComponent); + renderBox->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + ASSERT_TRUE(renderBox->GetChildren().size() == 1); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(renderBox->GetLayoutSize() == Size(BOX_WIDTH, BOX_HEIGHT)); + const RefPtr& child = renderBox->GetChildren().front(); + ASSERT_TRUE(child->GetPosition() == OFFSET_TOP_LEFT); + ASSERT_TRUE(child->GetLayoutSize() == Size(ITEM_WIDTH, ITEM_HEIGHT)); +} + +/** + * @tc.name: RenderBoxTest002 + * @tc.desc: Verify Box PerformLayout when align TOP_CENTER. + * @tc.type: FUNC + * @tc.require: AR000DAQTR + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderBoxTest, RenderBoxTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxComponent with Alignment::TOP_CENTER. + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetAlignment(Alignment::TOP_CENTER); + boxComponent->SetWidth(BOX_WIDTH); + boxComponent->SetHeight(BOX_HEIGHT); + + /** + * @tc.steps: step2. construct RenderBox with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->Attach(mockContext); + renderRoot->AddChild(renderBox); + renderBox->Update(boxComponent); + renderBox->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + ASSERT_TRUE(renderBox->GetChildren().size() == 1); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(renderBox->GetLayoutSize() == Size(BOX_WIDTH, BOX_HEIGHT)); + const RefPtr& child = renderBox->GetChildren().front(); + ASSERT_TRUE(child->GetPosition() == OFFSET_TOP_CENTER); + ASSERT_TRUE(child->GetLayoutSize() == Size(ITEM_WIDTH, ITEM_HEIGHT)); +} + +/** + * @tc.name: RenderBoxTest003 + * @tc.desc: Verify Box PerformLayout when align TOP_RIGHT. + * @tc.type: FUNC + * @tc.require: AR000DAQTR + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderBoxTest, RenderBoxTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxComponent with Alignment::TOP_RIGHT. + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetAlignment(Alignment::TOP_RIGHT); + boxComponent->SetWidth(BOX_WIDTH); + boxComponent->SetHeight(BOX_HEIGHT); + + /** + * @tc.steps: step2. construct RenderBox with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->Attach(mockContext); + renderRoot->AddChild(renderBox); + renderBox->Update(boxComponent); + renderBox->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + ASSERT_TRUE(renderBox->GetChildren().size() == 1); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(renderBox->GetLayoutSize() == Size(BOX_WIDTH, BOX_HEIGHT)); + const RefPtr& child = renderBox->GetChildren().front(); + ASSERT_TRUE(child->GetPosition() == OFFSET_TOP_RIGHT); + ASSERT_TRUE(child->GetLayoutSize() == Size(ITEM_WIDTH, ITEM_HEIGHT)); +} + +/** + * @tc.name: RenderBoxTest004 + * @tc.desc: Verify Box PerformLayout when align CENTER_LEFT. + * @tc.type: FUNC + * @tc.require: AR000DAQTR + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderBoxTest, RenderBoxTest004, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxComponent with Alignment::CENTER_LEFT. + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetAlignment(Alignment::CENTER_LEFT); + boxComponent->SetWidth(BOX_WIDTH); + boxComponent->SetHeight(BOX_HEIGHT); + + /** + * @tc.steps: step2. construct RenderBox with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->Attach(mockContext); + renderRoot->AddChild(renderBox); + renderBox->Update(boxComponent); + renderBox->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + ASSERT_TRUE(renderBox->GetChildren().size() == 1); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(renderBox->GetLayoutSize() == Size(BOX_WIDTH, BOX_HEIGHT)); + const RefPtr& child = renderBox->GetChildren().front(); + ASSERT_TRUE(child->GetPosition() == OFFSET_CENTER_LEFT); + ASSERT_TRUE(child->GetLayoutSize() == Size(ITEM_WIDTH, ITEM_HEIGHT)); +} + +/** + * @tc.name: RenderBoxTest005 + * @tc.desc: Verify Box PerformLayout when align CENTER. + * @tc.type: FUNC + * @tc.require: AR000DAQTR + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderBoxTest, RenderBoxTest005, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxComponent with Alignment::CENTER. + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetAlignment(Alignment::CENTER); + boxComponent->SetWidth(BOX_WIDTH); + boxComponent->SetHeight(BOX_HEIGHT); + + /** + * @tc.steps: step2. construct RenderBox with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->Attach(mockContext); + renderRoot->AddChild(renderBox); + renderBox->Update(boxComponent); + renderBox->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + ASSERT_TRUE(renderBox->GetChildren().size() == 1); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(renderBox->GetLayoutSize() == Size(BOX_WIDTH, BOX_HEIGHT)); + const RefPtr& child = renderBox->GetChildren().front(); + ASSERT_TRUE(child->GetPosition() == OFFSET_CENTER); + ASSERT_TRUE(child->GetLayoutSize() == Size(ITEM_WIDTH, ITEM_HEIGHT)); +} + +/** + * @tc.name: RenderBoxTest006 + * @tc.desc: Verify Box PerformLayout when align CENTER_RIGHT. + * @tc.type: FUNC + * @tc.require: AR000DAQTR + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderBoxTest, RenderBoxTest006, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxComponent with Alignment::CENTER_RIGHT. + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetAlignment(Alignment::CENTER_RIGHT); + boxComponent->SetWidth(BOX_WIDTH); + boxComponent->SetHeight(BOX_HEIGHT); + + /** + * @tc.steps: step2. construct RenderBox with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->Attach(mockContext); + renderRoot->AddChild(renderBox); + renderBox->Update(boxComponent); + renderBox->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + ASSERT_TRUE(renderBox->GetChildren().size() == 1); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(renderBox->GetLayoutSize() == Size(BOX_WIDTH, BOX_HEIGHT)); + const RefPtr& child = renderBox->GetChildren().front(); + ASSERT_TRUE(child->GetPosition() == OFFSET_CENTER_RIGHT); + ASSERT_TRUE(child->GetLayoutSize() == Size(ITEM_WIDTH, ITEM_HEIGHT)); +} + +/** + * @tc.name: RenderBoxTest007 + * @tc.desc: Verify Box PerformLayout when align BOTTOM_LEFT. + * @tc.type: FUNC + * @tc.require: AR000DAQTR + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderBoxTest, RenderBoxTest007, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxComponent with Alignment::BOTTOM_LEFT. + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetAlignment(Alignment::BOTTOM_LEFT); + boxComponent->SetWidth(BOX_WIDTH); + boxComponent->SetHeight(BOX_HEIGHT); + + /** + * @tc.steps: step2. construct RenderBox with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->Attach(mockContext); + renderRoot->AddChild(renderBox); + renderBox->Update(boxComponent); + renderBox->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + ASSERT_TRUE(renderBox->GetChildren().size() == 1); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(renderBox->GetLayoutSize() == Size(BOX_WIDTH, BOX_HEIGHT)); + const RefPtr& child = renderBox->GetChildren().front(); + ASSERT_TRUE(child->GetPosition() == OFFSET_BOTTOM_LEFT); + ASSERT_TRUE(child->GetLayoutSize() == Size(ITEM_WIDTH, ITEM_HEIGHT)); +} + +/** + * @tc.name: RenderBoxTest008 + * @tc.desc: Verify Box PerformLayout when align BOTTOM_CENTER. + * @tc.type: FUNC + * @tc.require: AR000DAQTR + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderBoxTest, RenderBoxTest008, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxComponent with Alignment::BOTTOM_CENTER. + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetAlignment(Alignment::BOTTOM_CENTER); + boxComponent->SetWidth(BOX_WIDTH); + boxComponent->SetHeight(BOX_HEIGHT); + + /** + * @tc.steps: step2. construct RenderBox with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->Attach(mockContext); + renderRoot->AddChild(renderBox); + renderBox->Update(boxComponent); + renderBox->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + ASSERT_TRUE(renderBox->GetChildren().size() == 1); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(renderBox->GetLayoutSize() == Size(BOX_WIDTH, BOX_HEIGHT)); + const RefPtr& child = renderBox->GetChildren().front(); + ASSERT_TRUE(child->GetPosition() == OFFSET_BOTTOM_CENTER); + ASSERT_TRUE(child->GetLayoutSize() == Size(ITEM_WIDTH, ITEM_HEIGHT)); +} + +/** + * @tc.name: RenderBoxTest009 + * @tc.desc: Verify Box PerformLayout when align BOTTOM_RIGHT. + * @tc.type: FUNC + * @tc.require: AR000DAQTR + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderBoxTest, RenderBoxTest009, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxComponent with Alignment::BOTTOM_RIGHT. + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetAlignment(Alignment::BOTTOM_RIGHT); + boxComponent->SetWidth(BOX_WIDTH); + boxComponent->SetHeight(BOX_HEIGHT); + + /** + * @tc.steps: step2. construct RenderBox with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->Attach(mockContext); + renderRoot->AddChild(renderBox); + renderBox->Update(boxComponent); + renderBox->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + ASSERT_TRUE(renderBox->GetChildren().size() == 1); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(renderBox->GetLayoutSize() == Size(BOX_WIDTH, BOX_HEIGHT)); + const RefPtr& child = renderBox->GetChildren().front(); + ASSERT_TRUE(child->GetPosition() == OFFSET_BOTTOM_RIGHT); + ASSERT_TRUE(child->GetLayoutSize() == Size(ITEM_WIDTH, ITEM_HEIGHT)); +} + +/** + * @tc.name: RenderBoxTest010 + * @tc.desc: Verify Box PerformLayout when same margin. + * @tc.type: FUNC + * @tc.require: AR000DAQTV + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderBoxTest, RenderBoxTest010, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxComponent with same margin. + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetWidth(BOX_WIDTH); + boxComponent->SetHeight(BOX_HEIGHT); + boxComponent->SetMargin(Edge(10.0)); + + /** + * @tc.steps: step2. construct RenderBox with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->Attach(mockContext); + renderRoot->AddChild(renderBox); + renderBox->Update(boxComponent); + renderBox->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(renderBox->GetLayoutSize() == Size(BOX_WIDTH + 20.0, BOX_HEIGHT + 20.0)); + const RefPtr& child = renderBox->GetChildren().front(); + ASSERT_TRUE(child->GetPosition() == OFFSET_CENTER + Offset(10.0, 10.0)); + ASSERT_TRUE(child->GetLayoutSize() == Size(ITEM_WIDTH, ITEM_HEIGHT)); +} + +/** + * @tc.name: RenderBoxTest011 + * @tc.desc: Verify Box PerformLayout when diff margin. + * @tc.type: FUNC + * @tc.require: AR000DAQTV + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderBoxTest, RenderBoxTest011, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxComponent with diff margin. + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetWidth(BOX_WIDTH); + boxComponent->SetHeight(BOX_HEIGHT); + boxComponent->SetMargin(Edge(10.0, 20.0, 30.0, 40.0)); + + /** + * @tc.steps: step2. construct RenderBox with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->Attach(mockContext); + renderRoot->AddChild(renderBox); + renderBox->Update(boxComponent); + renderBox->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(renderBox->GetLayoutSize() == Size(BOX_WIDTH + 40.0, BOX_HEIGHT + 60.0)); + const RefPtr& child = renderBox->GetChildren().front(); + ASSERT_TRUE(child->GetPosition() == OFFSET_CENTER + Offset(10.0, 20.0)); + ASSERT_TRUE(child->GetLayoutSize() == Size(ITEM_WIDTH, ITEM_HEIGHT)); +} + +/** + * @tc.name: RenderBoxTest012 + * @tc.desc: Verify Box PerformLayout when invalid margin. + * @tc.type: FUNC + * @tc.require: AR000DAQTV + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderBoxTest, RenderBoxTest012, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxComponent with invalid margin. + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetWidth(BOX_WIDTH); + boxComponent->SetHeight(BOX_HEIGHT); + boxComponent->SetMargin(Edge(-10.0, -20.0, -30.0, -40.0)); + + /** + * @tc.steps: step2. construct RenderBox with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->Attach(mockContext); + renderRoot->AddChild(renderBox); + renderBox->Update(boxComponent); + renderBox->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_FALSE(renderBox->GetLayoutSize() == Size(BOX_WIDTH, BOX_HEIGHT)); + const RefPtr& child = renderBox->GetChildren().front(); + ASSERT_FALSE(child->GetPosition() == OFFSET_CENTER); + ASSERT_TRUE(child->GetLayoutSize() == Size(ITEM_WIDTH, ITEM_HEIGHT)); +} + +/** + * @tc.name: RenderBoxTest013 + * @tc.desc: Verify Box PerformLayout when same padding. + * @tc.type: FUNC + * @tc.require: AR000DAQU0 + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderBoxTest, RenderBoxTest013, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxComponent with same padding. + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetWidth(BOX_WIDTH); + boxComponent->SetHeight(BOX_HEIGHT); + boxComponent->SetPadding(Edge(10.0)); + + /** + * @tc.steps: step2. construct RenderBox with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->Attach(mockContext); + renderRoot->AddChild(renderBox); + renderBox->Update(boxComponent); + renderBox->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(renderBox->GetLayoutSize() == Size(BOX_WIDTH, BOX_HEIGHT)); + const RefPtr& child = renderBox->GetChildren().front(); + ASSERT_TRUE(child->GetPosition() == OFFSET_CENTER); + ASSERT_TRUE(child->GetLayoutSize() == Size(ITEM_WIDTH, ITEM_HEIGHT)); +} + +/** + * @tc.name: RenderBoxTest014 + * @tc.desc: Verify Box PerformLayout when diff padding. + * @tc.type: FUNC + * @tc.require: AR000DAQU0 + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderBoxTest, RenderBoxTest014, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxComponent with diff padding. + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetWidth(BOX_WIDTH); + boxComponent->SetHeight(BOX_HEIGHT); + boxComponent->SetPadding(Edge(10.0, 20.0, 30.0, 40.0)); + + /** + * @tc.steps: step2. construct RenderBox with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->Attach(mockContext); + renderRoot->AddChild(renderBox); + renderBox->Update(boxComponent); + renderBox->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(renderBox->GetLayoutSize() == Size(BOX_WIDTH, BOX_HEIGHT)); + const RefPtr& child = renderBox->GetChildren().front(); + ASSERT_TRUE(child->GetPosition() == OFFSET_CENTER - Offset(10.0, 10.0)); + ASSERT_TRUE(child->GetLayoutSize() == Size(ITEM_WIDTH, ITEM_HEIGHT)); +} + +/** + * @tc.name: RenderBoxTest015 + * @tc.desc: Verify Box PerformLayout when invalid padding. + * @tc.type: FUNC + * @tc.require: AR000DAQU0 + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderBoxTest, RenderBoxTest015, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxComponent with invalid padding. + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetWidth(BOX_WIDTH); + boxComponent->SetHeight(BOX_HEIGHT); + boxComponent->SetPadding(Edge(-10.0, -20.0, -30.0, -40.0)); + + /** + * @tc.steps: step2. construct RenderBox with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->Attach(mockContext); + renderRoot->AddChild(renderBox); + renderBox->Update(boxComponent); + renderBox->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(renderBox->GetLayoutSize() == Size(BOX_WIDTH, BOX_HEIGHT)); + const RefPtr& child = renderBox->GetChildren().front(); + ASSERT_TRUE(child->GetPosition() == OFFSET_CENTER); + ASSERT_TRUE(child->GetLayoutSize() == Size(ITEM_WIDTH, ITEM_HEIGHT)); +} + +/** + * @tc.name: RenderBoxTest016 + * @tc.desc: Verify Box PerformLayout when valid width and height. + * @tc.type: FUNC + * @tc.require: AR000DAQU1 + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderBoxTest, RenderBoxTest016, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxComponent with valid width and height. + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetWidth(BOX_WIDTH); + boxComponent->SetHeight(BOX_HEIGHT); + + /** + * @tc.steps: step2. construct RenderBox with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->Attach(mockContext); + renderRoot->AddChild(renderBox); + renderBox->Update(boxComponent); + renderBox->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(renderBox->GetLayoutSize() == Size(BOX_WIDTH, BOX_HEIGHT)); +} + +/** + * @tc.name: RenderBoxTest017 + * @tc.desc: Verify Box PerformLayout when invalid width and valid height. + * @tc.type: FUNC + * @tc.require: AR000DAQU1 + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderBoxTest, RenderBoxTest017, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxComponent with invalid width and valid height. + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetWidth(-BOX_WIDTH); + boxComponent->SetHeight(BOX_HEIGHT); + + /** + * @tc.steps: step2. construct RenderBox with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->Attach(mockContext); + renderRoot->AddChild(renderBox); + renderBox->Update(boxComponent); + renderBox->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(renderBox->GetLayoutSize() == Size(LENGTH, BOX_HEIGHT)); +} + +/** + * @tc.name: RenderBoxTest018 + * @tc.desc: Verify Box PerformLayout when valid width and invalid height. + * @tc.type: FUNC + * @tc.require: AR000DAQU1 + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderBoxTest, RenderBoxTest018, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxComponent with valid width and invalid height. + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetWidth(BOX_WIDTH); + boxComponent->SetHeight(-BOX_HEIGHT); + + /** + * @tc.steps: step2. construct RenderBox with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->Attach(mockContext); + renderRoot->AddChild(renderBox); + renderBox->Update(boxComponent); + renderBox->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(renderBox->GetLayoutSize() == Size(BOX_WIDTH, LENGTH)); +} + +/** + * @tc.name: RenderBoxTest019 + * @tc.desc: Verify Box PerformLayout when invalid width and height. + * @tc.type: FUNC + * @tc.require: AR000DAQU1 + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderBoxTest, RenderBoxTest019, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxComponent with invalid width and height. + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetWidth(-BOX_WIDTH); + boxComponent->SetHeight(-BOX_HEIGHT); + + /** + * @tc.steps: step2. construct RenderBox with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->Attach(mockContext); + renderRoot->AddChild(renderBox); + renderBox->Update(boxComponent); + renderBox->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(renderBox->GetLayoutSize() == Size(LENGTH, LENGTH)); +} + +/** + * @tc.name: RenderBoxTest020 + * @tc.desc: Verify Box PerformLayout when Constraints(min < max < item). + * @tc.type: FUNC + * @tc.require: AR000DAQTS + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderBoxTest, RenderBoxTest020, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxComponent with Constraints(min < max < item). + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxComponent = AceType::MakeRefPtr(); + LayoutParam constraints; + constraints.SetMinSize(ZERO_SIZE); + constraints.SetMaxSize(SMALL_SIZE); + boxComponent->SetConstraints(constraints); + + /** + * @tc.steps: step2. construct RenderBox with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->Attach(mockContext); + renderRoot->AddChild(renderBox); + renderBox->Update(boxComponent); + renderBox->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(renderBox->GetLayoutSize() == SMALL_SIZE); + const RefPtr& child = renderBox->GetChildren().front(); + ASSERT_TRUE(child->GetPosition() == OFFSET_TOP_LEFT); + ASSERT_TRUE(child->GetLayoutSize() == SMALL_SIZE); +} + +/** + * @tc.name: RenderBoxTest021 + * @tc.desc: Verify Box PerformLayout when Constraints(item < min < max). + * @tc.type: FUNC + * @tc.require: AR000DAQTS + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderBoxTest, RenderBoxTest021, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxComponent with Constraints(item < min < max). + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxComponent = AceType::MakeRefPtr(); + LayoutParam constraints; + constraints.SetMinSize(LARGE_SIZE); + constraints.SetMaxSize(HUGE_SIZE); + boxComponent->SetConstraints(constraints); + + /** + * @tc.steps: step2. construct RenderBox with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->Attach(mockContext); + renderRoot->AddChild(renderBox); + renderBox->Update(boxComponent); + renderBox->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(renderBox->GetLayoutSize() == LARGE_SIZE); + const RefPtr& child = renderBox->GetChildren().front(); + ASSERT_TRUE(child->GetPosition() == OFFSET_TOP_LEFT); + ASSERT_TRUE(child->GetLayoutSize() == LARGE_SIZE); +} + +/** + * @tc.name: RenderBoxTest022 + * @tc.desc: Verify Box PerformLayout when Constraints(item < min = max). + * @tc.type: FUNC + * @tc.require: AR000DAQTS + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderBoxTest, RenderBoxTest022, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxComponent with Constraints(min < max = item). + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxComponent = AceType::MakeRefPtr(); + LayoutParam constraints; + constraints.SetMinSize(SMALL_SIZE); + constraints.SetMaxSize(MIDDLE_SIZE); + boxComponent->SetConstraints(constraints); + + /** + * @tc.steps: step2. construct RenderBox with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->Attach(mockContext); + renderRoot->AddChild(renderBox); + renderBox->Update(boxComponent); + renderBox->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(renderBox->GetLayoutSize() == MIDDLE_SIZE); + const RefPtr& child = renderBox->GetChildren().front(); + ASSERT_TRUE(child->GetPosition() == OFFSET_TOP_LEFT); + ASSERT_TRUE(child->GetLayoutSize() == MIDDLE_SIZE); +} + +/** + * @tc.name: RenderBoxTest023 + * @tc.desc: Verify Box PerformLayout when Constraints(item < min = max). + * @tc.type: FUNC + * @tc.require: AR000DAQTS + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderBoxTest, RenderBoxTest023, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxComponent with Constraints(item < min = max). + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxComponent = AceType::MakeRefPtr(); + LayoutParam constraints; + constraints.SetMinSize(LARGE_SIZE); + constraints.SetMaxSize(LARGE_SIZE); + boxComponent->SetConstraints(constraints); + + /** + * @tc.steps: step2. construct RenderBox with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->Attach(mockContext); + renderRoot->AddChild(renderBox); + renderBox->Update(boxComponent); + renderBox->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(renderBox->GetLayoutSize() == LARGE_SIZE); + const RefPtr& child = renderBox->GetChildren().front(); + ASSERT_TRUE(child->GetPosition() == OFFSET_TOP_LEFT); + ASSERT_TRUE(child->GetLayoutSize() == LARGE_SIZE); +} + +/** + * @tc.name: RenderBoxTest024 + * @tc.desc: Verify Box PerformLayout when invalid Constraints(min > max). + * @tc.type: FUNC + * @tc.require: AR000DAQTS + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderBoxTest, RenderBoxTest024, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxComponent with Constraints(min > max). + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxComponent = AceType::MakeRefPtr(); + LayoutParam constraints; + constraints.SetMinSize(LARGE_SIZE); + constraints.SetMaxSize(SMALL_SIZE); + boxComponent->SetConstraints(constraints); + + /** + * @tc.steps: step2. construct RenderBox with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->Attach(mockContext); + renderRoot->AddChild(renderBox); + renderBox->Update(boxComponent); + renderBox->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(renderBox->GetLayoutSize() == MIDDLE_SIZE); + const RefPtr& child = renderBox->GetChildren().front(); + ASSERT_TRUE(child->GetPosition() == OFFSET_TOP_LEFT); + ASSERT_TRUE(child->GetLayoutSize() == MIDDLE_SIZE); +} + +/** + * @tc.name: RenderBoxTest025 + * @tc.desc: Verify Box PerformLayout when background decoration(shadow). + * @tc.type: FUNC + * @tc.require: AR000DAQTT + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderBoxTest, RenderBoxTest025, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxComponent with background decoration(shadow). + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetConstraints(LayoutParam(SMALL_SIZE, LARGE_SIZE)); + RefPtr backDecoration = AceType::MakeRefPtr(); + Shadow shadow; + shadow.SetColor(SHADOW_COLOR); + shadow.SetBlurRadius(SHADOW_RADIUS); + shadow.SetOffset(SHADOW_OFFSET); + backDecoration->AddShadow(shadow); + boxComponent->SetBackDecoration(backDecoration); + + /** + * @tc.steps: step2. construct RenderBox with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->Attach(mockContext); + renderRoot->AddChild(renderBox); + renderBox->Update(boxComponent); + renderBox->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + auto background = renderBox->GetBackDecoration(); + auto renderShadow = background->GetShadows().front(); + ASSERT_TRUE(renderShadow.GetColor() == SHADOW_COLOR); + ASSERT_TRUE(renderShadow.GetBlurRadius() == SHADOW_RADIUS); + ASSERT_TRUE(renderShadow.GetOffset() == SHADOW_OFFSET); +} + +/** + * @tc.name: RenderBoxTest026 + * @tc.desc: Verify Box PerformLayout when background decoration(color&image). + * @tc.type: FUNC + * @tc.require: AR000DAQTT + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderBoxTest, RenderBoxTest026, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxComponent with background decoration(color&image). + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetConstraints(LayoutParam(SMALL_SIZE, LARGE_SIZE)); + RefPtr backDecoration = AceType::MakeRefPtr(); + backDecoration->SetBackgroundColor(SHADOW_COLOR); + backDecoration->SetImage(AceType::MakeRefPtr("1.jpg")); + boxComponent->SetBackDecoration(backDecoration); + + /** + * @tc.steps: step2. construct RenderBox with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->Attach(mockContext); + renderRoot->AddChild(renderBox); + renderBox->Update(boxComponent); + renderBox->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + auto background = renderBox->GetBackDecoration(); + ASSERT_TRUE(background->GetBackgroundColor() == SHADOW_COLOR); + ASSERT_TRUE(background->GetImage()->GetSrc() == "1.jpg"); +} + +/** + * @tc.name: RenderBoxTest027 + * @tc.desc: Verify Box PerformLayout when background decoration(border). + * @tc.type: FUNC + * @tc.require: AR000DAQTT + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderBoxTest, RenderBoxTest027, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxComponent with background decoration(border). + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetConstraints(LayoutParam(SMALL_SIZE, LARGE_SIZE)); + RefPtr backDecoration = AceType::MakeRefPtr(); + backDecoration->SetBorder(BACK_BORDER); + boxComponent->SetBackDecoration(backDecoration); + + /** + * @tc.steps: step2. construct RenderBox with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->Attach(mockContext); + renderRoot->AddChild(renderBox); + renderBox->Update(boxComponent); + renderBox->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + auto background = renderBox->GetBackDecoration(); + ASSERT_TRUE(background->GetBorder() == BACK_BORDER); +} + +/** + * @tc.name: RenderBoxTest028 + * @tc.desc: Verify Box PerformLayout when front decoration(shadow&border). + * @tc.type: FUNC + * @tc.require: AR000DAQTU + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderBoxTest, RenderBoxTest028, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxComponent with front decoration(shadow&border). + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetConstraints(LayoutParam(SMALL_SIZE, LARGE_SIZE)); + RefPtr frontDecoration = AceType::MakeRefPtr(); + Shadow shadow; + shadow.SetColor(SHADOW_COLOR); + shadow.SetBlurRadius(SHADOW_RADIUS); + shadow.SetOffset(SHADOW_OFFSET); + frontDecoration->AddShadow(shadow); + frontDecoration->SetBorder(BACK_BORDER); + boxComponent->SetFrontDecoration(frontDecoration); + + /** + * @tc.steps: step2. construct RenderBox with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->Attach(mockContext); + renderRoot->AddChild(renderBox); + renderBox->Update(boxComponent); + renderBox->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + auto front = renderBox->GetFrontDecoration(); + ASSERT_TRUE(front->GetBorder() == BACK_BORDER); + auto renderShadow = front->GetShadows().front(); + ASSERT_TRUE(renderShadow.GetColor() == SHADOW_COLOR); + ASSERT_TRUE(renderShadow.GetBlurRadius() == SHADOW_RADIUS); + ASSERT_TRUE(renderShadow.GetOffset() == SHADOW_OFFSET); +} + +/** + * @tc.name: RenderBoxTest029 + * @tc.desc: Verify Box PerformLayout when front decoration(color&image). + * @tc.type: FUNC + * @tc.require: AR000DAQTU + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderBoxTest, RenderBoxTest029, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxComponent with front decoration(color&image). + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetConstraints(LayoutParam(SMALL_SIZE, LARGE_SIZE)); + RefPtr frontDecoration = AceType::MakeRefPtr(); + frontDecoration->SetBackgroundColor(SHADOW_COLOR); + frontDecoration->SetImage(AceType::MakeRefPtr("1.jpg")); + boxComponent->SetFrontDecoration(frontDecoration); + + /** + * @tc.steps: step2. construct RenderBox with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->Attach(mockContext); + renderRoot->AddChild(renderBox); + renderBox->Update(boxComponent); + renderBox->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + auto front = renderBox->GetFrontDecoration(); + ASSERT_TRUE(front->GetBackgroundColor() == SHADOW_COLOR); + ASSERT_TRUE(front->GetImage()->GetSrc() == "1.jpg"); +} + +/** + * @tc.name: RenderBoxTest030 + * @tc.desc: Verify Box PerformLayout when set background color. + * @tc.type: FUNC + * @tc.require: AR000DAQU2 + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderBoxTest, RenderBoxTest030, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxComponent with background color. + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetConstraints(LayoutParam(SMALL_SIZE, LARGE_SIZE)); + boxComponent->SetColor(SHADOW_COLOR); + + /** + * @tc.steps: step2. construct RenderBox with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->Attach(mockContext); + renderRoot->AddChild(renderBox); + renderBox->Update(boxComponent); + renderBox->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(renderBox->GetColor() == SHADOW_COLOR); +} + +/** + * @tc.name: RenderBoxTest031 + * @tc.desc: Verify Box PerformLayout when default background color. + * @tc.type: FUNC + * @tc.require: AR000DAQU2 + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderBoxTest, RenderBoxTest031, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxComponent with default background color. + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetConstraints(LayoutParam(SMALL_SIZE, LARGE_SIZE)); + + /** + * @tc.steps: step2. construct RenderBox with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->Attach(mockContext); + renderRoot->AddChild(renderBox); + renderBox->Update(boxComponent); + renderBox->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(renderBox->GetColor() == Color::TRANSPARENT); +} + +/** + * @tc.name: RenderBoxTest032 + * @tc.desc: Verify Box PerformLayout when set gradients color backDecoration. + * @tc.type: FUNC + * @tc.require: AR000DAQU9 + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderBoxTest, RenderBoxTest032, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxComponent with gradients color backDecoration. + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetConstraints(LayoutParam(SMALL_SIZE, LARGE_SIZE)); + RefPtr backDecoration = AceType::MakeRefPtr(); + Gradient gradient; + backDecoration->SetGradient(gradient); + boxComponent->SetBackDecoration(backDecoration); + + /** + * @tc.steps: step2. construct RenderBox with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->Attach(mockContext); + renderRoot->AddChild(renderBox); + renderBox->Update(boxComponent); + renderBox->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + auto background = renderBox->GetBackDecoration(); + ASSERT_TRUE(background != nullptr); +} + +/** + * @tc.name: RenderBoxTest033 + * @tc.desc: Verify Box PerformLayout when set gradients color frontDecoration. + * @tc.type: FUNC + * @tc.require: AR000DAQU9 + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderBoxTest, RenderBoxTest033, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxComponent with gradients color frontDecoration. + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetConstraints(LayoutParam(SMALL_SIZE, LARGE_SIZE)); + RefPtr frontDecoration = AceType::MakeRefPtr(); + Gradient gradient; + frontDecoration->SetGradient(gradient); + boxComponent->SetFrontDecoration(frontDecoration); + + /** + * @tc.steps: step2. construct RenderBox with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->Attach(mockContext); + renderRoot->AddChild(renderBox); + renderBox->Update(boxComponent); + renderBox->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + auto front = renderBox->GetFrontDecoration(); + ASSERT_TRUE(front != nullptr); +} + +/** + * @tc.name: RenderBoxTest034 + * @tc.desc: Verify BoxBase PerformLayout when align TOP_LEFT. + * @tc.type: FUNC + * @tc.require: AR000DAQU9 + * @tc.author: xuliangjun + */ +HWTEST_F(RenderBoxTest, RenderBoxTest034, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxBaseComponent with Alignment::TOP_LEFT. + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxBaseComponent = AceType::MakeRefPtr(); + boxBaseComponent->SetAlignment(Alignment::TOP_LEFT); + boxBaseComponent->SetWidth(BOX_WIDTH); + boxBaseComponent->SetHeight(BOX_HEIGHT); + + /** + * @tc.steps: step2. construct RenderBoxBase with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBoxBase = AceType::MakeRefPtr(); + renderBoxBase->Attach(mockContext); + renderRoot->AddChild(renderBoxBase); + renderBoxBase->Update(boxBaseComponent); + renderBoxBase->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + ASSERT_TRUE(renderBoxBase->GetChildren().size() == 1); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(renderBoxBase->GetLayoutSize() == Size(BOX_WIDTH, BOX_HEIGHT)); + const RefPtr& child = renderBoxBase->GetChildren().front(); + ASSERT_TRUE(child->GetPosition() == OFFSET_TOP_LEFT); + ASSERT_TRUE(child->GetLayoutSize() == Size(ITEM_WIDTH, ITEM_HEIGHT)); +} + +/** + * @tc.name: RenderBoxTest035 + * @tc.desc: Verify BoxBase PerformLayout when align TOP_CENTER. + * @tc.type: FUNC + * @tc.require: AR000DAQTR + * @tc.author: xuliangjun + */ +HWTEST_F(RenderBoxTest, RenderBoxTest035, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxBaseComponent with Alignment::TOP_CENTER. + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxBaseComponent = AceType::MakeRefPtr(); + boxBaseComponent->SetAlignment(Alignment::TOP_CENTER); + boxBaseComponent->SetWidth(BOX_WIDTH); + boxBaseComponent->SetHeight(BOX_HEIGHT); + + /** + * @tc.steps: step2. construct RenderBoxBase with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBoxBase = AceType::MakeRefPtr(); + renderBoxBase->Attach(mockContext); + renderRoot->AddChild(renderBoxBase); + renderBoxBase->Update(boxBaseComponent); + renderBoxBase->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + ASSERT_TRUE(renderBoxBase->GetChildren().size() == 1); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(renderBoxBase->GetLayoutSize() == Size(BOX_WIDTH, BOX_HEIGHT)); + const RefPtr& child = renderBoxBase->GetChildren().front(); + ASSERT_TRUE(child->GetPosition() == OFFSET_TOP_CENTER); + ASSERT_TRUE(child->GetLayoutSize() == Size(ITEM_WIDTH, ITEM_HEIGHT)); +} + +/** + * @tc.name: RenderBoxTest036 + * @tc.desc: Verify BoxBase PerformLayout when align TOP_RIGHT. + * @tc.type: FUNC + * @tc.require: AR000DAQTR + * @tc.author: xuliangjun + */ +HWTEST_F(RenderBoxTest, RenderBoxTest036, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxBaseComponent with Alignment::TOP_RIGHT. + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxBaseComponent = AceType::MakeRefPtr(); + boxBaseComponent->SetAlignment(Alignment::TOP_RIGHT); + boxBaseComponent->SetWidth(BOX_WIDTH); + boxBaseComponent->SetHeight(BOX_HEIGHT); + + /** + * @tc.steps: step2. construct RenderBoxBase with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBoxBase = AceType::MakeRefPtr(); + renderBoxBase->Attach(mockContext); + renderRoot->AddChild(renderBoxBase); + renderBoxBase->Update(boxBaseComponent); + renderBoxBase->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + ASSERT_TRUE(renderBoxBase->GetChildren().size() == 1); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(renderBoxBase->GetLayoutSize() == Size(BOX_WIDTH, BOX_HEIGHT)); + const RefPtr& child = renderBoxBase->GetChildren().front(); + ASSERT_TRUE(child->GetPosition() == OFFSET_TOP_RIGHT); + ASSERT_TRUE(child->GetLayoutSize() == Size(ITEM_WIDTH, ITEM_HEIGHT)); +} + +/** + * @tc.name: RenderBoxTest037 + * @tc.desc: Verify BoxBase PerformLayout when align CENTER_LEFT. + * @tc.type: FUNC + * @tc.require: AR000DAQTR + * @tc.author: xuliangjun + */ +HWTEST_F(RenderBoxTest, RenderBoxTest037, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxBaseComponent with Alignment::CENTER_LEFT. + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxBaseComponent = AceType::MakeRefPtr(); + boxBaseComponent->SetAlignment(Alignment::CENTER_LEFT); + boxBaseComponent->SetWidth(BOX_WIDTH); + boxBaseComponent->SetHeight(BOX_HEIGHT); + + /** + * @tc.steps: step2. construct RenderBoxBase with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBoxBase = AceType::MakeRefPtr(); + renderBoxBase->Attach(mockContext); + renderRoot->AddChild(renderBoxBase); + renderBoxBase->Update(boxBaseComponent); + renderBoxBase->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + ASSERT_TRUE(renderBoxBase->GetChildren().size() == 1); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(renderBoxBase->GetLayoutSize() == Size(BOX_WIDTH, BOX_HEIGHT)); + const RefPtr& child = renderBoxBase->GetChildren().front(); + ASSERT_TRUE(child->GetPosition() == OFFSET_CENTER_LEFT); + ASSERT_TRUE(child->GetLayoutSize() == Size(ITEM_WIDTH, ITEM_HEIGHT)); +} + +/** + * @tc.name: RenderBoxTest038 + * @tc.desc: Verify BoxBase PerformLayout when align CENTER. + * @tc.type: FUNC + * @tc.require: AR000DAQTR + * @tc.author: xuliangjun + */ +HWTEST_F(RenderBoxTest, RenderBoxTest038, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxBaseComponent with Alignment::CENTER. + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxBaseComponent = AceType::MakeRefPtr(); + boxBaseComponent->SetAlignment(Alignment::CENTER); + boxBaseComponent->SetWidth(BOX_WIDTH); + boxBaseComponent->SetHeight(BOX_HEIGHT); + + /** + * @tc.steps: step2. construct RenderBoxBase with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBoxBase = AceType::MakeRefPtr(); + renderBoxBase->Attach(mockContext); + renderRoot->AddChild(renderBoxBase); + renderBoxBase->Update(boxBaseComponent); + renderBoxBase->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + ASSERT_TRUE(renderBoxBase->GetChildren().size() == 1); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(renderBoxBase->GetLayoutSize() == Size(BOX_WIDTH, BOX_HEIGHT)); + const RefPtr& child = renderBoxBase->GetChildren().front(); + ASSERT_TRUE(child->GetPosition() == OFFSET_CENTER); + ASSERT_TRUE(child->GetLayoutSize() == Size(ITEM_WIDTH, ITEM_HEIGHT)); +} + +/** + * @tc.name: RenderBoxTest039 + * @tc.desc: Verify BoxBase PerformLayout when align CENTER_RIGHT. + * @tc.type: FUNC + * @tc.require: AR000DAQTR + * @tc.author: xuliangjun + */ +HWTEST_F(RenderBoxTest, RenderBoxTest039, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxBaseComponent with Alignment::CENTER_RIGHT. + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxBaseComponent = AceType::MakeRefPtr(); + boxBaseComponent->SetAlignment(Alignment::CENTER_RIGHT); + boxBaseComponent->SetWidth(BOX_WIDTH); + boxBaseComponent->SetHeight(BOX_HEIGHT); + + /** + * @tc.steps: step2. construct RenderBoxBase with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBoxBase = AceType::MakeRefPtr(); + renderBoxBase->Attach(mockContext); + renderRoot->AddChild(renderBoxBase); + renderBoxBase->Update(boxBaseComponent); + renderBoxBase->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + ASSERT_TRUE(renderBoxBase->GetChildren().size() == 1); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(renderBoxBase->GetLayoutSize() == Size(BOX_WIDTH, BOX_HEIGHT)); + const RefPtr& child = renderBoxBase->GetChildren().front(); + ASSERT_TRUE(child->GetPosition() == OFFSET_CENTER_RIGHT); + ASSERT_TRUE(child->GetLayoutSize() == Size(ITEM_WIDTH, ITEM_HEIGHT)); +} + +/** + * @tc.name: RenderBoxTest040 + * @tc.desc: Verify BoxBase PerformLayout when align BOTTOM_LEFT. + * @tc.type: FUNC + * @tc.require: AR000DAQTR + * @tc.author: xuliangjun + */ +HWTEST_F(RenderBoxTest, RenderBoxTest040, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxBaseComponent with Alignment::BOTTOM_LEFT. + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxBaseComponent = AceType::MakeRefPtr(); + boxBaseComponent->SetAlignment(Alignment::BOTTOM_LEFT); + boxBaseComponent->SetWidth(BOX_WIDTH); + boxBaseComponent->SetHeight(BOX_HEIGHT); + + /** + * @tc.steps: step2. construct RenderBoxBase with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBoxBase = AceType::MakeRefPtr(); + renderBoxBase->Attach(mockContext); + renderRoot->AddChild(renderBoxBase); + renderBoxBase->Update(boxBaseComponent); + renderBoxBase->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + ASSERT_TRUE(renderBoxBase->GetChildren().size() == 1); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(renderBoxBase->GetLayoutSize() == Size(BOX_WIDTH, BOX_HEIGHT)); + const RefPtr& child = renderBoxBase->GetChildren().front(); + ASSERT_TRUE(child->GetPosition() == OFFSET_BOTTOM_LEFT); + ASSERT_TRUE(child->GetLayoutSize() == Size(ITEM_WIDTH, ITEM_HEIGHT)); +} + +/** + * @tc.name: RenderBoxTest041 + * @tc.desc: Verify BoxBase PerformLayout when align BOTTOM_CENTER. + * @tc.type: FUNC + * @tc.require: AR000DAQTR + * @tc.author: xuliangjun + */ +HWTEST_F(RenderBoxTest, RenderBoxTest041, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxBaseComponent with Alignment::BOTTOM_CENTER. + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxBaseComponent = AceType::MakeRefPtr(); + boxBaseComponent->SetAlignment(Alignment::BOTTOM_CENTER); + boxBaseComponent->SetWidth(BOX_WIDTH); + boxBaseComponent->SetHeight(BOX_HEIGHT); + + /** + * @tc.steps: step2. construct RenderBoxBase with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBoxBase = AceType::MakeRefPtr(); + renderBoxBase->Attach(mockContext); + renderRoot->AddChild(renderBoxBase); + renderBoxBase->Update(boxBaseComponent); + renderBoxBase->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + ASSERT_TRUE(renderBoxBase->GetChildren().size() == 1); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(renderBoxBase->GetLayoutSize() == Size(BOX_WIDTH, BOX_HEIGHT)); + const RefPtr& child = renderBoxBase->GetChildren().front(); + ASSERT_TRUE(child->GetPosition() == OFFSET_BOTTOM_CENTER); + ASSERT_TRUE(child->GetLayoutSize() == Size(ITEM_WIDTH, ITEM_HEIGHT)); +} + +/** + * @tc.name: RenderBoxTest042 + * @tc.desc: Verify BoxBase PerformLayout when align BOTTOM_RIGHT. + * @tc.type: FUNC + * @tc.require: AR000DAQTR + * @tc.author: xuliangjun + */ +HWTEST_F(RenderBoxTest, RenderBoxTest042, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxBaseComponent with Alignment::BOTTOM_RIGHT. + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxBaseComponent = AceType::MakeRefPtr(); + boxBaseComponent->SetAlignment(Alignment::BOTTOM_RIGHT); + boxBaseComponent->SetWidth(BOX_WIDTH); + boxBaseComponent->SetHeight(BOX_HEIGHT); + + /** + * @tc.steps: step2. construct RenderBoxBase with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBoxBase = AceType::MakeRefPtr(); + renderBoxBase->Attach(mockContext); + renderRoot->AddChild(renderBoxBase); + renderBoxBase->Update(boxBaseComponent); + renderBoxBase->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + ASSERT_TRUE(renderBoxBase->GetChildren().size() == 1); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(renderBoxBase->GetLayoutSize() == Size(BOX_WIDTH, BOX_HEIGHT)); + const RefPtr& child = renderBoxBase->GetChildren().front(); + ASSERT_TRUE(child->GetPosition() == OFFSET_BOTTOM_RIGHT); + ASSERT_TRUE(child->GetLayoutSize() == Size(ITEM_WIDTH, ITEM_HEIGHT)); +} + +/** + * @tc.name: RenderBoxTest043 + * @tc.desc: Verify BoxBase PerformLayout when same margin. + * @tc.type: FUNC + * @tc.require: AR000DAQTV + * @tc.author: xuliangjun + */ +HWTEST_F(RenderBoxTest, RenderBoxTest043, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxBaseComponent with same margin. + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxBaseComponent = AceType::MakeRefPtr(); + boxBaseComponent->SetWidth(BOX_WIDTH); + boxBaseComponent->SetHeight(BOX_HEIGHT); + boxBaseComponent->SetMargin(Edge(10.0)); + + /** + * @tc.steps: step2. construct RenderBoxBase with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBoxBase = AceType::MakeRefPtr(); + renderBoxBase->Attach(mockContext); + renderRoot->AddChild(renderBoxBase); + renderBoxBase->Update(boxBaseComponent); + renderBoxBase->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(renderBoxBase->GetLayoutSize() == Size(BOX_WIDTH + 20.0, BOX_HEIGHT + 20.0)); + const RefPtr& child = renderBoxBase->GetChildren().front(); + ASSERT_TRUE(child->GetPosition() == OFFSET_CENTER + Offset(10.0, 10.0)); + ASSERT_TRUE(child->GetLayoutSize() == Size(ITEM_WIDTH, ITEM_HEIGHT)); +} + +/** + * @tc.name: RenderBoxTest044 + * @tc.desc: Verify BoxBase PerformLayout when diff margin. + * @tc.type: FUNC + * @tc.require: AR000DAQTV + * @tc.author: xuliangjun + */ +HWTEST_F(RenderBoxTest, RenderBoxTest044, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxBaseComponent with diff margin. + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxBaseComponent = AceType::MakeRefPtr(); + boxBaseComponent->SetWidth(BOX_WIDTH); + boxBaseComponent->SetHeight(BOX_HEIGHT); + boxBaseComponent->SetMargin(Edge(10.0, 20.0, 30.0, 40.0)); + + /** + * @tc.steps: step2. construct RenderBoxBase with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBoxBase = AceType::MakeRefPtr(); + renderBoxBase->Attach(mockContext); + renderRoot->AddChild(renderBoxBase); + renderBoxBase->Update(boxBaseComponent); + renderBoxBase->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(renderBoxBase->GetLayoutSize() == Size(BOX_WIDTH + 40.0, BOX_HEIGHT + 60.0)); + const RefPtr& child = renderBoxBase->GetChildren().front(); + ASSERT_TRUE(child->GetPosition() == OFFSET_CENTER + Offset(10.0, 20.0)); + ASSERT_TRUE(child->GetLayoutSize() == Size(ITEM_WIDTH, ITEM_HEIGHT)); +} + +/** + * @tc.name: RenderBoxTest045 + * @tc.desc: Verify BoxBase PerformLayout when invalid margin. + * @tc.type: FUNC + * @tc.require: AR000DAQTV + * @tc.author: xuliangjun + */ +HWTEST_F(RenderBoxTest, RenderBoxTest045, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxBaseComponent with invalid margin. + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxBaseComponent = AceType::MakeRefPtr(); + boxBaseComponent->SetWidth(BOX_WIDTH); + boxBaseComponent->SetHeight(BOX_HEIGHT); + boxBaseComponent->SetMargin(Edge(-10.0, -20.0, -30.0, -40.0)); + + /** + * @tc.steps: step2. construct RenderBoxBase with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBoxBase = AceType::MakeRefPtr(); + renderBoxBase->Attach(mockContext); + renderRoot->AddChild(renderBoxBase); + renderBoxBase->Update(boxBaseComponent); + renderBoxBase->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_FALSE(renderBoxBase->GetLayoutSize() == Size(BOX_WIDTH, BOX_HEIGHT)); + const RefPtr& child = renderBoxBase->GetChildren().front(); + ASSERT_FALSE(child->GetPosition() == OFFSET_CENTER); + ASSERT_TRUE(child->GetLayoutSize() == Size(ITEM_WIDTH, ITEM_HEIGHT)); +} + +/** + * @tc.name: RenderBoxTest046 + * @tc.desc: Verify BoxBase PerformLayout when same padding. + * @tc.type: FUNC + * @tc.require: AR000DAQU0 + * @tc.author: xuliangjun + */ +HWTEST_F(RenderBoxTest, RenderBoxTest046, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxBaseComponent with same padding. + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxBaseComponent = AceType::MakeRefPtr(); + boxBaseComponent->SetWidth(BOX_WIDTH); + boxBaseComponent->SetHeight(BOX_HEIGHT); + boxBaseComponent->SetPadding(Edge(10.0)); + + /** + * @tc.steps: step2. construct RenderBoxBase with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBoxBase = AceType::MakeRefPtr(); + renderBoxBase->Attach(mockContext); + renderRoot->AddChild(renderBoxBase); + renderBoxBase->Update(boxBaseComponent); + renderBoxBase->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(renderBoxBase->GetLayoutSize() == Size(BOX_WIDTH, BOX_HEIGHT)); + const RefPtr& child = renderBoxBase->GetChildren().front(); + ASSERT_TRUE(child->GetPosition() == OFFSET_CENTER); + ASSERT_TRUE(child->GetLayoutSize() == Size(ITEM_WIDTH, ITEM_HEIGHT)); +} + +/** + * @tc.name: RenderBoxTest047 + * @tc.desc: Verify BoxBase PerformLayout when diff padding. + * @tc.type: FUNC + * @tc.require: AR000DAQU0 + * @tc.author: xuliangjun + */ +HWTEST_F(RenderBoxTest, RenderBoxTest047, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxBaseComponent with diff padding. + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxBaseComponent = AceType::MakeRefPtr(); + boxBaseComponent->SetWidth(BOX_WIDTH); + boxBaseComponent->SetHeight(BOX_HEIGHT); + boxBaseComponent->SetPadding(Edge(10.0, 20.0, 30.0, 40.0)); + + /** + * @tc.steps: step2. construct RenderBoxBase with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBoxBase = AceType::MakeRefPtr(); + renderBoxBase->Attach(mockContext); + renderRoot->AddChild(renderBoxBase); + renderBoxBase->Update(boxBaseComponent); + renderBoxBase->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(renderBoxBase->GetLayoutSize() == Size(BOX_WIDTH, BOX_HEIGHT)); + const RefPtr& child = renderBoxBase->GetChildren().front(); + ASSERT_TRUE(child->GetPosition() == OFFSET_CENTER - Offset(10.0, 10.0)); + ASSERT_TRUE(child->GetLayoutSize() == Size(ITEM_WIDTH, ITEM_HEIGHT)); +} + +/** + * @tc.name: RenderBoxTest048 + * @tc.desc: Verify BoxBase PerformLayout when invalid padding. + * @tc.type: FUNC + * @tc.require: AR000DAQU0 + * @tc.author: xuliangjun + */ +HWTEST_F(RenderBoxTest, RenderBoxTest048, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxBaseComponent with invalid padding. + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxBaseComponent = AceType::MakeRefPtr(); + boxBaseComponent->SetWidth(BOX_WIDTH); + boxBaseComponent->SetHeight(BOX_HEIGHT); + boxBaseComponent->SetPadding(Edge(-10.0, -20.0, -30.0, -40.0)); + + /** + * @tc.steps: step2. construct RenderBoxBase with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBoxBase = AceType::MakeRefPtr(); + renderBoxBase->Attach(mockContext); + renderRoot->AddChild(renderBoxBase); + renderBoxBase->Update(boxBaseComponent); + renderBoxBase->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(renderBoxBase->GetLayoutSize() == Size(BOX_WIDTH, BOX_HEIGHT)); + const RefPtr& child = renderBoxBase->GetChildren().front(); + ASSERT_TRUE(child->GetPosition() == OFFSET_CENTER); + ASSERT_TRUE(child->GetLayoutSize() == Size(ITEM_WIDTH, ITEM_HEIGHT)); +} + +/** + * @tc.name: RenderBoxTest049 + * @tc.desc: Verify BoxBase PerformLayout when valid width and height. + * @tc.type: FUNC + * @tc.require: AR000DAQU1 + * @tc.author: xuliangjun + */ +HWTEST_F(RenderBoxTest, RenderBoxTest049, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxBaseComponent with valid width and height. + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxBaseComponent = AceType::MakeRefPtr(); + boxBaseComponent->SetWidth(BOX_WIDTH); + boxBaseComponent->SetHeight(BOX_HEIGHT); + + /** + * @tc.steps: step2. construct RenderBoxBase with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBoxBase = AceType::MakeRefPtr(); + renderBoxBase->Attach(mockContext); + renderRoot->AddChild(renderBoxBase); + renderBoxBase->Update(boxBaseComponent); + renderBoxBase->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(renderBoxBase->GetLayoutSize() == Size(BOX_WIDTH, BOX_HEIGHT)); +} + +/** + * @tc.name: RenderBoxTest050 + * @tc.desc: Verify BoxBase PerformLayout when invalid width and valid height. + * @tc.type: FUNC + * @tc.require: AR000DAQU1 + * @tc.author: xuliangjun + */ +HWTEST_F(RenderBoxTest, RenderBoxTest050, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxBaseComponent with invalid width and valid height. + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxBaseComponent = AceType::MakeRefPtr(); + boxBaseComponent->SetWidth(-BOX_WIDTH); + boxBaseComponent->SetHeight(BOX_HEIGHT); + + /** + * @tc.steps: step2. construct RenderBoxBase with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBoxBase = AceType::MakeRefPtr(); + renderBoxBase->Attach(mockContext); + renderRoot->AddChild(renderBoxBase); + renderBoxBase->Update(boxBaseComponent); + renderBoxBase->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(renderBoxBase->GetLayoutSize() == Size(LENGTH, BOX_HEIGHT)); +} + +/** + * @tc.name: RenderBoxTest051 + * @tc.desc: Verify BoxBase PerformLayout when valid width and invalid height. + * @tc.type: FUNC + * @tc.require: AR000DAQU1 + * @tc.author: xuliangjun + */ +HWTEST_F(RenderBoxTest, RenderBoxTest051, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxBaseComponent with valid width and invalid height. + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxBaseComponent = AceType::MakeRefPtr(); + boxBaseComponent->SetWidth(BOX_WIDTH); + boxBaseComponent->SetHeight(-BOX_HEIGHT); + + /** + * @tc.steps: step2. construct RenderBoxBase with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBoxBase = AceType::MakeRefPtr(); + renderBoxBase->Attach(mockContext); + renderRoot->AddChild(renderBoxBase); + renderBoxBase->Update(boxBaseComponent); + renderBoxBase->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(renderBoxBase->GetLayoutSize() == Size(BOX_WIDTH, LENGTH)); +} + +/** + * @tc.name: RenderBoxTest052 + * @tc.desc: Verify BoxBase PerformLayout when invalid width and height. + * @tc.type: FUNC + * @tc.require: AR000DAQU1 + * @tc.author: xuliangjun + */ +HWTEST_F(RenderBoxTest, RenderBoxTest052, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxBaseComponent with invalid width and height. + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxBaseComponent = AceType::MakeRefPtr(); + boxBaseComponent->SetWidth(-BOX_WIDTH); + boxBaseComponent->SetHeight(-BOX_HEIGHT); + + /** + * @tc.steps: step2. construct RenderBoxBase with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBoxBase = AceType::MakeRefPtr(); + renderBoxBase->Attach(mockContext); + renderRoot->AddChild(renderBoxBase); + renderBoxBase->Update(boxBaseComponent); + renderBoxBase->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(renderBoxBase->GetLayoutSize() == Size(LENGTH, LENGTH)); +} + +/** + * @tc.name: RenderBoxTest053 + * @tc.desc: Verify BoxBase PerformLayout when Constraints(min < max < item). + * @tc.type: FUNC + * @tc.require: AR000DAQTS + * @tc.author: xuliangjun + */ +HWTEST_F(RenderBoxTest, RenderBoxTest053, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxBaseComponent with Constraints(min < max < item). + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxBaseComponent = AceType::MakeRefPtr(); + LayoutParam constraints; + constraints.SetMinSize(ZERO_SIZE); + constraints.SetMaxSize(SMALL_SIZE); + boxBaseComponent->SetConstraints(constraints); + + /** + * @tc.steps: step2. construct RenderBoxBase with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBoxBase = AceType::MakeRefPtr(); + renderBoxBase->Attach(mockContext); + renderRoot->AddChild(renderBoxBase); + renderBoxBase->Update(boxBaseComponent); + renderBoxBase->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(renderBoxBase->GetLayoutSize() == SMALL_SIZE); + const RefPtr& child = renderBoxBase->GetChildren().front(); + ASSERT_TRUE(child->GetPosition() == OFFSET_TOP_LEFT); + ASSERT_TRUE(child->GetLayoutSize() == SMALL_SIZE); +} + +/** + * @tc.name: RenderBoxTest054 + * @tc.desc: Verify BoxBase PerformLayout when Constraints(item < min < max). + * @tc.type: FUNC + * @tc.require: AR000DAQTS + * @tc.author: xuliangjun + */ +HWTEST_F(RenderBoxTest, RenderBoxTest054, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxBaseComponent with Constraints(item < min < max). + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxBaseComponent = AceType::MakeRefPtr(); + LayoutParam constraints; + constraints.SetMinSize(LARGE_SIZE); + constraints.SetMaxSize(HUGE_SIZE); + boxBaseComponent->SetConstraints(constraints); + + /** + * @tc.steps: step2. construct RenderBoxBase with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBoxBase = AceType::MakeRefPtr(); + renderBoxBase->Attach(mockContext); + renderRoot->AddChild(renderBoxBase); + renderBoxBase->Update(boxBaseComponent); + renderBoxBase->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(renderBoxBase->GetLayoutSize() == LARGE_SIZE); + const RefPtr& child = renderBoxBase->GetChildren().front(); + ASSERT_TRUE(child->GetPosition() == OFFSET_TOP_LEFT); + ASSERT_TRUE(child->GetLayoutSize() == LARGE_SIZE); +} + +/** + * @tc.name: RenderBoxTest055 + * @tc.desc: Verify BoxBase PerformLayout when Constraints(item < min = max). + * @tc.type: FUNC + * @tc.require: AR000DAQTS + * @tc.author: xuliangjun + */ +HWTEST_F(RenderBoxTest, RenderBoxTest055, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxBaseComponent with Constraints(min < max = item). + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxBaseComponent = AceType::MakeRefPtr(); + LayoutParam constraints; + constraints.SetMinSize(SMALL_SIZE); + constraints.SetMaxSize(MIDDLE_SIZE); + boxBaseComponent->SetConstraints(constraints); + + /** + * @tc.steps: step2. construct RenderBoxBase with child text(100.0, 100.0).. + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBoxBase = AceType::MakeRefPtr(); + renderBoxBase->Attach(mockContext); + renderRoot->AddChild(renderBoxBase); + renderBoxBase->Update(boxBaseComponent); + renderBoxBase->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(renderBoxBase->GetLayoutSize() == MIDDLE_SIZE); + const RefPtr& child = renderBoxBase->GetChildren().front(); + ASSERT_TRUE(child->GetPosition() == OFFSET_TOP_LEFT); + ASSERT_TRUE(child->GetLayoutSize() == MIDDLE_SIZE); +} + +/** + * @tc.name: RenderBoxTest056 + * @tc.desc: Verify BoxBase PerformLayout when Constraints(item < min = max). + * @tc.type: FUNC + * @tc.require: AR000DAQTS + * @tc.author: xuliangjun + */ +HWTEST_F(RenderBoxTest, RenderBoxTest056, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxBaseComponent with Constraints(item < min = max). + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxBaseComponent = AceType::MakeRefPtr(); + LayoutParam constraints; + constraints.SetMinSize(LARGE_SIZE); + constraints.SetMaxSize(LARGE_SIZE); + boxBaseComponent->SetConstraints(constraints); + + /** + * @tc.steps: step2. construct RenderBoxBase with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBoxBase = AceType::MakeRefPtr(); + renderBoxBase->Attach(mockContext); + renderRoot->AddChild(renderBoxBase); + renderBoxBase->Update(boxBaseComponent); + renderBoxBase->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(renderBoxBase->GetLayoutSize() == LARGE_SIZE); + const RefPtr& child = renderBoxBase->GetChildren().front(); + ASSERT_TRUE(child->GetPosition() == OFFSET_TOP_LEFT); + ASSERT_TRUE(child->GetLayoutSize() == LARGE_SIZE); +} + +/** + * @tc.name: RenderBoxTest057 + * @tc.desc: Verify BoxBase PerformLayout when invalid Constraints(min > max). + * @tc.type: FUNC + * @tc.require: AR000DAQTS + * @tc.author: xuliangjun + */ +HWTEST_F(RenderBoxTest, RenderBoxTest057, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxBaseComponent with Constraints(min > max). + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxBaseComponent = AceType::MakeRefPtr(); + LayoutParam constraints; + constraints.SetMinSize(LARGE_SIZE); + constraints.SetMaxSize(SMALL_SIZE); + boxBaseComponent->SetConstraints(constraints); + + /** + * @tc.steps: step2. construct RenderBoxBase with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBoxBase = AceType::MakeRefPtr(); + renderBoxBase->Attach(mockContext); + renderRoot->AddChild(renderBoxBase); + renderBoxBase->Update(boxBaseComponent); + renderBoxBase->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(renderBoxBase->GetLayoutSize() == MIDDLE_SIZE); + const RefPtr& child = renderBoxBase->GetChildren().front(); + ASSERT_TRUE(child->GetPosition() == OFFSET_TOP_LEFT); + ASSERT_TRUE(child->GetLayoutSize() == MIDDLE_SIZE); +} + +/** + * @tc.name: RenderBoxTest058 + * @tc.desc: Verify Box PerformLayout when user had set LayoutInBox. + * @tc.type: FUNC + * @tc.require: AR000DQ1V6 + * @tc.author: xuliangjun + */ +HWTEST_F(RenderBoxTest, RenderBoxTest058, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxComponent with Constraints(min < max = item). + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetWidth(LENGTH); + boxComponent->SetWidth(LENGTH); + boxComponent->SetLayoutInBoxFlag(true); + + /** + * @tc.steps: step2. construct RenderBox with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->Attach(mockContext); + renderRoot->AddChild(renderBox); + renderBox->Update(boxComponent); + renderBox->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + + const RefPtr& child = renderBox->GetChildren().front(); + ASSERT_TRUE(NearEqual(renderBox->GetLayoutSize().Width(), 100.0)); + ASSERT_TRUE(std::abs(child->GetLayoutSize().Width() - 70.7107) < 0.1); + ASSERT_TRUE(std::abs(child->GetPosition().GetX() - 14.6447) < 0.1); +} + +/** + * @tc.name: RenderBoxTest059 + * @tc.desc: Verify Box PerformLayout when user had set LayoutInBox. + * @tc.type: FUNC + * @tc.require: AR000DQ1V6 + * @tc.author: xuliangjun + */ +HWTEST_F(RenderBoxTest, RenderBoxTest059, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxComponent with Constraints(min < max = item). + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetWidth(LENGTH); + boxComponent->SetWidth(LENGTH); + boxComponent->SetPadding(Edge(10.0, 0.0, 0.0, 0.0)); + boxComponent->SetLayoutInBoxFlag(true); + + /** + * @tc.steps: step2. construct RenderBox with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->Attach(mockContext); + renderRoot->AddChild(renderBox); + renderBox->Update(boxComponent); + renderBox->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + + const RefPtr& child = renderBox->GetChildren().front(); + ASSERT_TRUE(NearEqual(renderBox->GetLayoutSize().Width(), 100.0)); + ASSERT_TRUE(std::abs(child->GetLayoutSize().Width() - 70.7107) < 0.1); + ASSERT_TRUE(std::abs(child->GetPosition().GetX() - 14.6447) < 0.1); +} + +/** + * @tc.name: RenderBoxTest060 + * @tc.desc: Verify Box PerformLayout when user had set LayoutInBox. + * @tc.type: FUNC + * @tc.require: AR000DQ1V6 + * @tc.author: xuliangjun + */ +HWTEST_F(RenderBoxTest, RenderBoxTest060, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxComponent with Constraints(min < max = item). + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetWidth(LENGTH); + boxComponent->SetWidth(LENGTH); + boxComponent->SetPadding(Edge(20.0, 0.0, 0.0, 0.0)); + boxComponent->SetLayoutInBoxFlag(true); + + /** + * @tc.steps: step2. construct RenderBox with child text(100.0, 100.0). + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->Attach(mockContext); + renderRoot->AddChild(renderBox); + renderBox->Update(boxComponent); + renderBox->AddChild(BoxTestUtils::CreateRenderText(mockContext)); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + + const RefPtr& child = renderBox->GetChildren().front(); + ASSERT_TRUE(NearEqual(renderBox->GetLayoutSize().Width(), 100.0)); + ASSERT_TRUE(std::abs(child->GetLayoutSize().Width() - 65.3553) < 0.1); + ASSERT_TRUE(std::abs(child->GetPosition().GetX() - 20.0) < 0.1); +} + +/** + * @tc.name: RenderBoxScrollpageChangeTest001 + * @tc.desc: Verify Box Layout When scrollpage is true. + * @tc.type: FUNC + * @tc.require: AR000DQ1SR + * @tc.author: chenlien + */ +HWTEST_F(RenderBoxTest, RenderBoxScrollpageChangeTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxComponent with Alignment::TOP_LEFT. + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetWidth(BOX_WIDTH); + boxComponent->SetHeight(BOX_HEIGHT); + + /** + * @tc.steps: step2. construct RenderBox . + * @tc.expected: step2. Verify properties are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->Attach(mockContext); + renderRoot->AddChild(renderBox); + renderBox->Update(boxComponent); + /** + * @tc.steps: step3. Verify that the box layout height are calculated correctly when scrollpage set true. + * @tc.expected: step3. box layout height will equal with pipeline rootHeight. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(NearEqual(renderBox->GetLayoutSize().Height(), BOX_HEIGHT)); + boxComponent->SetScrollPage(true); + renderBox->Update(boxComponent); + renderRoot->PerformLayout(); + ASSERT_TRUE(NearEqual(renderBox->GetLayoutSize().Height(), mockContext->GetRootHeight())); +} + +/** + * @tc.name: RenderBoxScrollpageChangeTest002 + * @tc.desc: Verify Box Layout When scrollpage is true. + * @tc.type: FUNC + * @tc.require: AR000DQ1SR + * @tc.author: chenlien + */ +HWTEST_F(RenderBoxTest, RenderBoxScrollpageChangeTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BoxComponent with Alignment::TOP_LEFT. + * @tc.expected: step1. properties set correctly. + */ + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetWidth(BOX_WIDTH); + boxComponent->SetHeight(BOX_HEIGHT); + + /** + * @tc.steps: step2. construct RenderBox . + * @tc.expected: step2. Verify properties are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + + RefPtr renderRoot = BoxTestUtils::CreateRenderRoot(); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->Attach(mockContext); + renderRoot->AddChild(renderBox); + renderBox->Update(boxComponent); + /** + * @tc.steps: step3. Verify that the box layout height are calculated correctly when scrollpage reset true. + * @tc.expected: step3. box layout height will reset. + */ + renderRoot->PerformLayout(); + ASSERT_TRUE(NearEqual(renderBox->GetLayoutSize().Height(), BOX_HEIGHT)); + boxComponent->SetScrollPage(true); + renderBox->Update(boxComponent); + renderRoot->PerformLayout(); + ASSERT_TRUE(NearEqual(renderBox->GetLayoutSize().Height(), mockContext->GetRootHeight())); + + boxComponent->SetScrollPage(false); + renderBox->Update(boxComponent); + renderRoot->PerformLayout(); + ASSERT_TRUE(NearEqual(renderBox->GetLayoutSize().Height(), BOX_HEIGHT)); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/button/BUILD.gn b/frameworks/core/components/test/unittest/button/BUILD.gn new file mode 100644 index 00000000..ce37da88 --- /dev/null +++ b/frameworks/core/components/test/unittest/button/BUILD.gn @@ -0,0 +1,57 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +if (is_standard_system) { + module_output_path = "ace_engine_standard/backenduicomponent/button" +} + +ohos_unittest("ButtonCreatorTest") { + module_out_path = module_output_path + + sources = [ "button_creator_test.cpp" ] + + configs = [ + ":config_json_creator_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "$ace_root/frameworks/core/components/test:json", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + deps += [ "$ace_root/frameworks/bridge:js_framework_ohos" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_json_creator_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":ButtonCreatorTest" ] +} diff --git a/frameworks/core/components/test/unittest/button/button_creator_test.cpp b/frameworks/core/components/test/unittest/button/button_creator_test.cpp new file mode 100644 index 00000000..09e071ab --- /dev/null +++ b/frameworks/core/components/test/unittest/button/button_creator_test.cpp @@ -0,0 +1,145 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "core/components/button/button_component.h" +#include "core/components/test/json/button_creator.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +constexpr double BUTTON_BORDER_WIDTH_TEST = 3.0; +constexpr int BUTTON_DISABLED_STATE_TEST = 1; +constexpr int BUTTON_AUTOFOCUS_STATE_TEST = 1; +constexpr uint32_t COLOR_VALUE_TEST = 255; +const std::string BUTTON_EVENT_ID_TEST = "ButtonClickEvent"; +const Dimension BUTTON_WIDTH_TEST = Dimension(400.0); +const Dimension BUTTON_HEIGHT_TEST = Dimension(100.0); +const Dimension BUTTON_RADIUS_TEST = Dimension(10.0); + +/** + * Create component from dsl. + * + * @param testJsonStr The json string which will be parsed. + * @return RefPtr of Component. + */ +RefPtr CreateComponent(const std::string& testJsonStr) +{ + const auto dslBuf = reinterpret_cast(testJsonStr.c_str()); + size_t dslLen = testJsonStr.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + return component; +} + +} // namespace + +class ButtonCreatorTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); +}; + +void ButtonCreatorTest::SetUpTestCase() {} +void ButtonCreatorTest::TearDownTestCase() {} +void ButtonCreatorTest::SetUp() {} +void ButtonCreatorTest::TearDown() {} + +/** + * @tc.name: ParseProperties001 + * @tc.desc: All parsed correctly when all properties are configured. + * @tc.type: FUNC + * @tc.require: AR000DAQV5 AR000DAQV3 AR000DAQV0 AR000DAQUU AR000DAQV4 AR000DAQV1 + * @tc.author: changjia + */ +HWTEST_F(ButtonCreatorTest, ParseProperties001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct the json string for button contains all properties. + */ + const std::string jsonStr = "" + "{ " + " \"className\": \"Button\", \"width\": 400, \"height\": 100, \"type\": 3, " + " \"rrectRadius\": 10, \"disabledState\": 1, \"autoFocus\": 1, " + " \"backgroundColor\": { \"className\": \"Color\", \"value\": 255 }, " + " \"clickedColor\": { \"className\": \"Color\", \"value\": 255 }, " + " \"disabledColor\": { \"className\": \"Color\", \"value\": 255 }, " + " \"focusColor\": { \"className\": \"Color\", \"value\": 255 }, " + " \"buttonBorder\": { \"className\": \"BorderEdge\", \"width\": 3.0 }, " + " \"buttonClickedEventId\": \"ButtonClickEvent\" " + "}"; + + /** + * @tc.steps: step2. Parse the json string and compare the result with configured value. + * @tc.expected: step2. All properties parsed correctly and the result equal with configured value. + */ + RefPtr component = CreateComponent(jsonStr); + ASSERT_TRUE(component != nullptr); + RefPtr button = AceType::DynamicCast(component); + ASSERT_TRUE(button != nullptr); + EXPECT_TRUE(button->GetWidth() == BUTTON_WIDTH_TEST); + EXPECT_TRUE(button->GetHeight() == BUTTON_HEIGHT_TEST); + EXPECT_TRUE(button->GetType() == ButtonType::TEXT); + EXPECT_TRUE(button->GetRectRadius() == BUTTON_RADIUS_TEST); + EXPECT_TRUE(button->GetDisabledState() == BUTTON_DISABLED_STATE_TEST); + EXPECT_TRUE(button->GetAutoFocusState() == BUTTON_AUTOFOCUS_STATE_TEST); + EXPECT_TRUE(button->GetBackgroundColor().GetValue() == COLOR_VALUE_TEST); + EXPECT_TRUE(button->GetClickedColor().GetValue() == COLOR_VALUE_TEST); + EXPECT_TRUE(button->GetDisabledColor().GetValue() == COLOR_VALUE_TEST); + EXPECT_TRUE(button->GetFocusColor().GetValue() == COLOR_VALUE_TEST); + EXPECT_TRUE(button->GetBorderEdge().GetWidth().Value() == BUTTON_BORDER_WIDTH_TEST); + EXPECT_TRUE(button->GetClickedEventId() == BUTTON_EVENT_ID_TEST); +} + +/** + * @tc.name: ParseProperties002 + * @tc.desc: All properties have the same value as the default when no property is configured. + * @tc.type: FUNC + * @tc.require: AR000DAQV5 AR000DAQV3 AR000DAQV0 + * @tc.author: changjia + */ +HWTEST_F(ButtonCreatorTest, ParseProperties002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct the json string for button does not contain any property. + */ + const std::string jsonStr = "" + "{ " + " \"className\": \"Button\" " + "}"; + + /** + * @tc.steps: step2. Parse the json string and compare the result with configured value. + * @tc.expected: step2. All properties have the same value as the default. + */ + RefPtr component = CreateComponent(jsonStr); + ASSERT_TRUE(component != nullptr); + RefPtr button = AceType::DynamicCast(component); + ASSERT_TRUE(button != nullptr); + EXPECT_TRUE(button->GetWidth() == Dimension(-1.0)); + EXPECT_TRUE(button->GetHeight() == Dimension(-1.0)); + EXPECT_TRUE(button->GetType() == ButtonType::NORMAL); + EXPECT_TRUE(button->GetRectRadius() == Dimension(0.0)); + EXPECT_TRUE(button->GetDisabledState() == 0); + EXPECT_TRUE(button->GetAutoFocusState() == 0); + EXPECT_TRUE(button->GetClickedEventId() == ""); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/camera/BUILD.gn b/frameworks/core/components/test/unittest/camera/BUILD.gn new file mode 100644 index 00000000..1fdfa8ce --- /dev/null +++ b/frameworks/core/components/test/unittest/camera/BUILD.gn @@ -0,0 +1,49 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +if (is_standard_system) { + module_output_path = "ace_engine_standard/frameworkbasicability/camera" +} + +ohos_unittest("CameraComponentTest") { + module_out_path = module_output_path + + sources = [ "camera_component_test.cpp" ] + + configs = [ "$ace_root:ace_test_config" ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + deps += [ "$ace_root/frameworks/bridge:js_framework_ohos" ] + } +} + +config("config_camera_component_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + deps = [ ":CameraComponentTest" ] +} diff --git a/frameworks/core/components/test/unittest/camera/camera_component_test.cpp b/frameworks/core/components/test/unittest/camera/camera_component_test.cpp new file mode 100644 index 00000000..ac63b87f --- /dev/null +++ b/frameworks/core/components/test/unittest/camera/camera_component_test.cpp @@ -0,0 +1,145 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "core/components/camera/camera_component.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +const std::string CALLBACK_SUCESS = "success"; +const std::string CALLBACK_FAIL = "fail"; +const std::string CALLBACK_COMPLETE = "complete"; +const std::string DEFAULT_RECORD_ID = "0"; + +} + +class CameraComponentTest : public testing::Test { +public: + static void SetUpTestCase() + { + GTEST_LOG_(INFO) << "CameraComponentTest SetUpTestCase"; + } + + static void TearDownTestCase() + { + GTEST_LOG_(INFO) << "CameraComponentTest TearDownTestCase"; + } + + void SetUp() override + { + camera_ = AceType::MakeRefPtr(); + } + + void TearDown() override + { + camera_ = nullptr; + } + +protected: + RefPtr camera_; +}; + +/** + * @tc.name: CameraComponentTest001 + * @tc.desc: Checking the default value of cameracomponent + * @tc.type: FUNC + * @tc.require: AR000FJU19 + */ +HWTEST_F(CameraComponentTest, CameraComponentTest001, TestSize.Level1) +{ + RefPtr cameraComponent = AceType::MakeRefPtr(); + RefPtr controller = cameraComponent->GetCameraController(); + ASSERT_TRUE(controller != nullptr); +} + +/** + * @tc.name: CameraComponentTest002 + * @tc.desc: Checking the default value of cameracomponent + * @tc.type: FUNC + * @tc.require: AR000FJU19 + */ +HWTEST_F(CameraComponentTest, CameraComponentTest002, TestSize.Level1) +{ + RefPtr cameraComponent = AceType::MakeRefPtr(); + ASSERT_TRUE(cameraComponent->GetFlash() == FlashType::AUTO); + ASSERT_TRUE(cameraComponent->GetDevicePosition() == DevicePosition::CAMERA_FACING_BACK); +} + +/** + * @tc.name: CameraComponentTest003 + * @tc.desc: Verify the takePhoto works fine when triggering camera takephoto. + * @tc.type: FUNC + * @tc.require: AR000FJU1A + */ +HWTEST_F(CameraComponentTest, CameraComponentTest003, TestSize.Level1) +{ + RefPtr cameraComponent = AceType::MakeRefPtr(); + RefPtr controller = cameraComponent->GetCameraController(); + controller->SetTakePhotoImpl([](const TakePhotoParams& params) { + ASSERT_TRUE(params.success == CALLBACK_SUCESS); + ASSERT_TRUE(params.fail == CALLBACK_FAIL); + ASSERT_TRUE(params.complete == CALLBACK_COMPLETE); + }); + TakePhotoParams takePhotoParams; + takePhotoParams.success = CALLBACK_SUCESS; + takePhotoParams.fail = CALLBACK_FAIL; + takePhotoParams.complete = CALLBACK_COMPLETE; + controller->TakePhoto(takePhotoParams); +} + +/** + * @tc.name: CameraComponentTest004 + * @tc.desc: Verify the StartRecord interface works fine when triggering camera StartRecord. + * @tc.type: FUNC + * @tc.require: AR000FJU1B + */ +HWTEST_F(CameraComponentTest, CameraComponentTest004, TestSize.Level1) +{ + RefPtr cameraComponent = AceType::MakeRefPtr(); + RefPtr controller = cameraComponent->GetCameraController(); + bool isStartRecord = false; + controller->SetStartRecordImpl([&isStartRecord]() { + isStartRecord = true; + }); + controller->StartRecord(); + + ASSERT_TRUE(isStartRecord); +} + +/** + * @tc.name: CameraComponentTest005 + * @tc.desc: Verify the CloseRecorder interface works fine when triggering camera StartRecord. + * @tc.type: FUNC + * @tc.require: AR000FJU1B + */ +HWTEST_F(CameraComponentTest, CameraComponentTest005, TestSize.Level1) +{ + RefPtr cameraComponent = AceType::MakeRefPtr(); + RefPtr controller = cameraComponent->GetCameraController(); + bool isCloseRecord = false; + controller->SetCloseRecorderImpl([&isCloseRecord](const std::string& params) { + isCloseRecord = true; + }); + controller->CloseRecorder(DEFAULT_RECORD_ID); + + ASSERT_TRUE(isCloseRecord); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/checkable/BUILD.gn b/frameworks/core/components/test/unittest/checkable/BUILD.gn new file mode 100644 index 00000000..1bb335c1 --- /dev/null +++ b/frameworks/core/components/test/unittest/checkable/BUILD.gn @@ -0,0 +1,250 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/backenduicomponent/checkable" + +ohos_unittest("CheckableCreatorTest") { + module_out_path = module_output_path + + sources = [ "checkable_creator_test.cpp" ] + + configs = [ + ":config_json_creator_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "$ace_root/frameworks/core/components/test:json", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + deps += [ "$ace_root/frameworks/bridge:js_framework_ohos" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_json_creator_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +ohos_unittest("CheckableComponentTest") { + module_out_path = module_output_path + + sources = [ + # accessibility + "$ace_root/frameworks/core/accessibility/accessibility_node.cpp", + + # animation + "$ace_root/frameworks/core/animation/animator.cpp", + "$ace_root/frameworks/core/animation/anticipate_curve.cpp", + "$ace_root/frameworks/core/animation/cubic_curve.cpp", + "$ace_root/frameworks/core/animation/curves.cpp", + "$ace_root/frameworks/core/animation/scheduler.cpp", + + #base + "$ace_root/adapter/common/cpp/thread_util.cpp", + "$ace_root/adapter/ohos/osal/log_wrapper.cpp", + "$ace_root/frameworks/base/geometry/matrix4.cpp", + "$ace_root/frameworks/base/json/json_util.cpp", + "$ace_root/frameworks/base/log/dump_log.cpp", + "$ace_root/frameworks/base/thread/background_task_executor.cpp", + "$ace_root/frameworks/base/utils/base_id.cpp", + + # common + "$ace_root/frameworks/core/common/ace_engine.cpp", + "$ace_root/frameworks/core/common/event_manager.cpp", + "$ace_root/frameworks/core/common/focus_animation_manager.cpp", + "$ace_root/frameworks/core/common/font_loader.cpp", + "$ace_root/frameworks/core/common/font_manager.cpp", + "$ace_root/frameworks/core/common/vibrator/vibrator_proxy.cpp", + "$ace_root/frameworks/core/common/watch_dog.cpp", + "$ace_root/frameworks/core/common/window.cpp", + "$ace_root/frameworks/core/components/test/json/json_frontend.cpp", + "$ace_root/frameworks/core/pipeline/pipeline_context.cpp", + + # components + "$ace_root/frameworks/core/components/box/box_component.cpp", + "$ace_root/frameworks/core/components/checkable/checkable_component.cpp", + "$ace_root/frameworks/core/components/display/display_component.cpp", + "$ace_root/frameworks/core/components/overlay/overlay_component.cpp", + "$ace_root/frameworks/core/components/page/page_component.cpp", + "$ace_root/frameworks/core/components/root/root_component.cpp", + "$ace_root/frameworks/core/components/text/text_component.cpp", + "$ace_root/frameworks/core/pipeline/base/component.cpp", + "$ace_root/frameworks/core/pipeline/base/composed_component.cpp", + + # elements + "$ace_root/frameworks/core/components/bubble/bubble_element.cpp", + "$ace_root/frameworks/core/components/checkable/checkable_element.cpp", + "$ace_root/frameworks/core/components/display/display_element.cpp", + "$ace_root/frameworks/core/components/flex/flex_element.cpp", + "$ace_root/frameworks/core/components/page/page_element.cpp", + "$ace_root/frameworks/core/components/page_transition/page_transition_element.cpp", + "$ace_root/frameworks/core/components/root/root_element.cpp", + "$ace_root/frameworks/core/components/stack/stack_element.cpp", + "$ace_root/frameworks/core/components/stage/stage_element.cpp", + "$ace_root/frameworks/core/components/transition/transition_element.cpp", + "$ace_root/frameworks/core/components/tween/tween_element.cpp", + "$ace_root/frameworks/core/pipeline/base/component_group_element.cpp", + "$ace_root/frameworks/core/pipeline/base/composed_element.cpp", + "$ace_root/frameworks/core/pipeline/base/element.cpp", + "$ace_root/frameworks/core/pipeline/base/render_element.cpp", + "$ace_root/frameworks/core/pipeline/base/sole_child_element.cpp", + + # others + "$ace_root/frameworks/core/event/back_end_event_manager.cpp", + "$ace_root/frameworks/core/event/multimodal/multimodal_manager.cpp", + "$ace_root/frameworks/core/event/multimodal/multimodal_scene.cpp", + + # focus + "$ace_root/frameworks/core/focus/focus_node.cpp", + + # gestures + "$ace_root/frameworks/core/gestures/click_recognizer.cpp", + "$ace_root/frameworks/core/gestures/drag_recognizer.cpp", + "$ace_root/frameworks/core/gestures/gesture_recognizer.cpp", + "$ace_root/frameworks/core/gestures/gesture_referee.cpp", + "$ace_root/frameworks/core/gestures/velocity_tracker.cpp", + + # image + "$ace_root/frameworks/core/image/flutter_image_cache.cpp", + "$ace_root/frameworks/core/image/image_cache.cpp", + + # layout + "$ace_root/frameworks/core/components/common/layout/grid_column_info.cpp", + "$ace_root/frameworks/core/components/common/layout/grid_container_info.cpp", + "$ace_root/frameworks/core/components/common/layout/grid_system_manager.cpp", + + # properties + "$ace_root/frameworks/core/components/box/render_box.cpp", + "$ace_root/frameworks/core/components/common/properties/alignment.cpp", + "$ace_root/frameworks/core/components/common/properties/border.cpp", + "$ace_root/frameworks/core/components/common/properties/border_edge.cpp", + "$ace_root/frameworks/core/components/common/properties/color.cpp", + "$ace_root/frameworks/core/components/common/properties/decoration.cpp", + "$ace_root/frameworks/core/components/common/properties/page_transition_option.cpp", + "$ace_root/frameworks/core/components/common/properties/scroll_bar.cpp", + "$ace_root/frameworks/core/components/common/properties/text_style.cpp", + + # rendering + "$ace_root/frameworks/core/components/box/render_box_base.cpp", + "$ace_root/frameworks/core/components/bubble/render_bubble.cpp", + "$ace_root/frameworks/core/components/checkable/flutter_render_checkbox.cpp", + "$ace_root/frameworks/core/components/checkable/flutter_render_radio.cpp", + "$ace_root/frameworks/core/components/checkable/flutter_render_switch.cpp", + "$ace_root/frameworks/core/components/checkable/render_checkable.cpp", + "$ace_root/frameworks/core/components/checkable/render_checkbox.cpp", + "$ace_root/frameworks/core/components/checkable/render_radio.cpp", + "$ace_root/frameworks/core/components/checkable/render_switch.cpp", + "$ace_root/frameworks/core/components/common/painter/flutter_checkable_painter.cpp", + "$ace_root/frameworks/core/components/common/painter/flutter_universal_painter.cpp", + "$ace_root/frameworks/core/components/display/render_display.cpp", + "$ace_root/frameworks/core/components/flex/render_flex.cpp", + "$ace_root/frameworks/core/components/flex/render_flex_item.cpp", + "$ace_root/frameworks/core/components/focus_animation/render_focus_animation.cpp", + "$ace_root/frameworks/core/components/refresh/render_refresh.cpp", + "$ace_root/frameworks/core/components/root/render_root.cpp", + "$ace_root/frameworks/core/components/scroll/render_multi_child_scroll.cpp", + "$ace_root/frameworks/core/components/scroll/render_scroll.cpp", + "$ace_root/frameworks/core/components/scroll/render_single_child_scroll.cpp", + "$ace_root/frameworks/core/components/scroll/scroll_bar_controller.cpp", + "$ace_root/frameworks/core/components/stack/render_stack.cpp", + "$ace_root/frameworks/core/components/stage/render_stage.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/mock_flutter_font_manager.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/mock_render_node_factory.cpp", + "$ace_root/frameworks/core/components/text/render_text.cpp", + "$ace_root/frameworks/core/components/text_span/render_text_span.cpp", + "$ace_root/frameworks/core/components/transform/render_transform.cpp", + "$ace_root/frameworks/core/pipeline/base/render_node.cpp", + "$ace_root/frameworks/core/pipeline/layers/container_layer.cpp", + "$ace_root/frameworks/core/pipeline/layers/layer.cpp", + "$ace_root/frameworks/core/pipeline/layers/offset_layer.cpp", + "$ace_root/frameworks/core/pipeline/layers/opacity_layer.cpp", + + # theme + "$ace_root/frameworks/core/components/theme/app_theme.cpp", + "$ace_root/frameworks/core/components/theme/theme_attributes.cpp", + "$ace_root/frameworks/core/components/theme/theme_constants.cpp", + "$ace_root/frameworks/core/components/theme/theme_manager.cpp", + "$ace_root/frameworks/core/components/theme/theme_utils.cpp", + "$root_out_dir/ace/framework/core/components/theme/theme_constants_default.cpp", + "render_checkable_test.cpp", + + # mock + "$ace_root/frameworks/core/components/test/unittest/mock/ace_trace_mock.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/event_report_mock.cpp", + "$ace_root/frameworks/core/mock/mock_ace_application_info.cpp", + "$ace_root/frameworks/core/mock/mock_system_properties.cpp", + ] + + # add sources only needed by wearable like watch. + if (is_wearable_product) { + sources += [ "$root_out_dir/ace/framework/core/components/theme/theme_constants_watch.cpp" ] + } + + # add sources needed by phone and TV. wearable like watch do not need them + if (!is_wearable_product) { + sources += [ + # theme + "$root_out_dir/ace/framework/core/components/theme/theme_constants_tv.cpp", + ] + } + + configs = [ + "//third_party/cJSON:cJSON_config", + ":config_render_checkable_test", + "$ace_root:ace_test_config", + "$flutter_root:flutter_config", + ] + + deps = [ + "$ace_root:third_party_cjson", + "$ace_root/frameworks/core/components/theme:build_theme_code", + "$flutter_root:ace_skia_ohos", + "$flutter_root:third_party_flutter_engine_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + external_deps = [ "hiviewdfx_hilog_native:libhilog" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_render_checkable_test") { + visibility = [ ":*" ] + include_dirs = [ + "//utils/native/base/include", + "$ace_root", + ] +} + +group("unittest") { + testonly = true + deps = [ + ":CheckableComponentTest", + ":CheckableCreatorTest", + ] +} diff --git a/frameworks/core/components/test/unittest/checkable/checkable_creator_test.cpp b/frameworks/core/components/test/unittest/checkable/checkable_creator_test.cpp new file mode 100644 index 00000000..d3efc55e --- /dev/null +++ b/frameworks/core/components/test/unittest/checkable/checkable_creator_test.cpp @@ -0,0 +1,369 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "core/components/checkable/checkable_component.h" +#include "core/components/test/json/checkable_creator.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { +const Color TEST_COLOR(123456789); +const std::string CHECKABLE_PROPERTIES = " \"onChanged\": \"changeId001\", " + " \"width\": 100, " + " \"height\": 100, " + " \"disabled\": true, " + " \"pointColor\": { " + " \"className\": \"Color\", " + " \"value\": 123456789 " + " }, " + " \"activeColor\": { " + " \"className\": \"Color\", " + " \"value\": 123456789 " + " }, " + " \"inactiveColor\": { " + " \"className\": \"Color\", " + " \"value\": 123456789 " + " }, " + " \"focusColor\": { " + " \"className\": \"Color\", " + " \"value\": 123456789 " + " }, "; +const RefPtr THEME_MANAGER = AceType::MakeRefPtr(); + +RefPtr CreateCheckableComponent(const std::string& testJson) +{ + const auto dslBuf = reinterpret_cast(testJson.c_str()); + size_t dslLen = testJson.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + if (!component) { + return nullptr; + } + return component; +} + +RefPtr CreateCheckboxComponent(const std::string& testJson) +{ + const auto& component = CreateCheckableComponent(testJson); + return AceType::DynamicCast(component); +} + +RefPtr CreateSwitchComponent(const std::string& testJson) +{ + const auto& component = CreateCheckableComponent(testJson); + return AceType::DynamicCast(component); +} + +RefPtr> CreateRadioComponent(const std::string& testJson) +{ + const auto& component = CreateCheckableComponent(testJson); + return AceType::DynamicCast>(component); +} + +void CheckCheckableColor(const RefPtr& checkable) +{ + EXPECT_EQ(checkable->GetActiveColor().GetValue(), TEST_COLOR.GetValue()); + EXPECT_TRUE(checkable->GetInactiveColor() == TEST_COLOR); + EXPECT_TRUE(checkable->GetFocusColor() == TEST_COLOR); + EXPECT_EQ(checkable->GetPointColor(), TEST_COLOR); +} + +void CheckCheckableDefaultColor(const RefPtr& checkable, const RefPtr& theme) +{ + EXPECT_TRUE(checkable->GetActiveColor() == theme->GetActiveColor()); + EXPECT_TRUE(checkable->GetInactiveColor() == theme->GetInactiveColor()); + EXPECT_TRUE(checkable->GetFocusColor() == theme->GetFocusColor()); + EXPECT_EQ(checkable->GetPointColor(), theme->GetPointColor()); +} + +void CheckCheckboxDefaultValue(const RefPtr& checkbox) +{ + EXPECT_TRUE(checkbox); + RefPtr theme = THEME_MANAGER->GetTheme(); + EXPECT_EQ(checkbox->GetWidth().Value(), theme->GetWidth().Value()); + EXPECT_EQ(checkbox->GetHeight().Value(), theme->GetHeight().Value()); + CheckCheckableDefaultColor(checkbox, theme); + EXPECT_EQ(checkbox->GetValue(), false); + EXPECT_FALSE(checkbox->IsDisabled()); + EXPECT_TRUE(checkbox->GetChangeEvent().IsEmpty()); +} + +void CheckSwitchDefaultValue(const RefPtr& switchComponent) +{ + EXPECT_TRUE(switchComponent); + RefPtr theme = THEME_MANAGER->GetTheme(); + EXPECT_EQ(switchComponent->GetWidth().Value(), theme->GetWidth().Value()); + EXPECT_EQ(switchComponent->GetHeight().Value(), theme->GetHeight().Value()); + CheckCheckableDefaultColor(switchComponent, theme); + EXPECT_EQ(switchComponent->GetValue(), false); + EXPECT_FALSE(switchComponent->IsDisabled()); + EXPECT_TRUE(switchComponent->GetChangeEvent().IsEmpty()); +} + +void CheckRadioDefaultValue(const RefPtr>& radio) +{ + EXPECT_TRUE(radio); + RefPtr theme = THEME_MANAGER->GetTheme(); + EXPECT_EQ(radio->GetWidth().Value(), theme->GetWidth().Value()); + EXPECT_EQ(radio->GetHeight().Value(), theme->GetHeight().Value()); + CheckCheckableDefaultColor(radio, theme); + EXPECT_TRUE(radio->GetValue().empty()); + EXPECT_FALSE(radio->IsDisabled()); + EXPECT_TRUE(radio->GetGroupValue().empty()); + EXPECT_TRUE(radio->GetChangeEvent().IsEmpty()); +} + +} // namespace + +class CheckableCreatorTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); +}; + +void CheckableCreatorTest::SetUpTestCase() {} + +void CheckableCreatorTest::TearDownTestCase() {} + +void CheckableCreatorTest::SetUp() {} + +void CheckableCreatorTest::TearDown() {} + +/** + * @tc.name: CheckableCreator001 + * @tc.desc: Test parse checkbox's field successfully from the right fields dsl json of checkbox component. + * @tc.type: FUNC + * @tc.require: AR000DAR24 AR000DAR25 + * @tc.author: kouxinxin + */ +HWTEST_F(CheckableCreatorTest, CheckableCreator001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct the json string with right fields, then create checkbox component with the json. + * @tc.expected: step1. Checkbox component successfully created, and the fields value same with the json fields. + */ + std::string dslJsonStart = "{ \"className\": \"Checkbox\", "; + std::string dslJsonCommon = CHECKABLE_PROPERTIES; + std::string dslJsonEnd = " \"value\": true " + "} "; + std::string dslJson = dslJsonStart.append(dslJsonCommon.append(dslJsonEnd)); + + RefPtr checkbox = CreateCheckboxComponent(dslJson); + + EXPECT_TRUE(checkbox); + EXPECT_EQ(checkbox->GetWidth().Value(), 100.0); + EXPECT_EQ(checkbox->GetHeight().Value(), 100.0); + CheckCheckableColor(checkbox); + EXPECT_TRUE(checkbox->IsDisabled()); + EXPECT_TRUE(checkbox->GetValue()); + EXPECT_EQ(checkbox->GetChangeEvent(), "changeId001"); +} + +/** + * @tc.name: CheckableCreator002 + * @tc.desc: Test parse checkbox's field successfully from no field dsl json of checkbox component. + * @tc.type: FUNC + * @tc.require: AR000DAR24 AR000DAR25 + * @tc.author: kouxinxin + */ +HWTEST_F(CheckableCreatorTest, CheckableCreator002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct the json string with no fields, then create checkbox component with the json. + * @tc.expected: step1. Checkbox component successfully created, and the fields has default values. + */ + std::string dslJson = "{ \"className\": \"Checkbox\" }"; + RefPtr checkbox = CreateCheckboxComponent(dslJson); + CheckCheckboxDefaultValue(checkbox); +} + +/** + * @tc.name: CheckableCreator003 + * @tc.desc: Test parse checkbox's field successfully from the type error fields dsl json of checkbox component. + * @tc.type: FUNC + * @tc.require: AR000DAR24 AR000DAR25 + * @tc.author: kouxinxin + */ +HWTEST_F(CheckableCreatorTest, CheckableCreator003, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct the json string with type error fields, then create checkbox component with the json. + * @tc.expected: step1. Checkbox component successfully created, and the fields has default values. + */ + std::string dslJson = "{ " + " \"className\": \"Checkbox\", " + " \"onChanged\": 1, " + " \"width\": true, " + " \"height\": true, " + " \"disabled\": 123, " + " \"value\": 1 " + "} "; + RefPtr checkbox = CreateCheckboxComponent(dslJson); + CheckCheckboxDefaultValue(checkbox); +} + +/** + * @tc.name: CheckableCreator004 + * @tc.desc: Test parse switch's field successfully from the right fields dsl json of switch component. + * @tc.type: FUNC + * @tc.require: AR000DAR21 AR000DAR22 + * @tc.author: kouxinxin + */ +HWTEST_F(CheckableCreatorTest, CheckableCreator004, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct the json string with right fields, then create switch component with the json. + * @tc.expected: step1. Switch component successfully created, and the fields value same with the json fields. + */ + std::string dslJsonStart = "{ \"className\": \"Switch\", "; + std::string dslJsonCommon = CHECKABLE_PROPERTIES; + std::string dslJsonEnd = " \"value\": true " + "} "; + std::string dslJson = dslJsonStart.append(dslJsonCommon.append(dslJsonEnd)); + RefPtr switchComponent = CreateSwitchComponent(dslJson); + + EXPECT_TRUE(switchComponent); + EXPECT_EQ(switchComponent->GetWidth().Value(), 100.0); + EXPECT_EQ(switchComponent->GetHeight().Value(), 100.0); + CheckCheckableColor(switchComponent); + EXPECT_TRUE(switchComponent->IsDisabled()); + EXPECT_TRUE(switchComponent->GetValue()); + EXPECT_EQ(switchComponent->GetChangeEvent(), "changeId001"); +} + +/** + * @tc.name: CheckableCreator005 + * @tc.desc: Test parse switch's field successfully from no field dsl json of switch component. + * @tc.type: FUNC + * @tc.require: AR000DAR21 AR000DAR22 + * @tc.author: kouxinxin + */ +HWTEST_F(CheckableCreatorTest, CheckableCreator005, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct the json string with no fields, then create switch component with the json. + * @tc.expected: step1. Switch component successfully created, and the fields has default values. + */ + std::string dslJson = "{ \"className\": \"Switch\" }"; + RefPtr switchComponent = CreateSwitchComponent(dslJson); + CheckSwitchDefaultValue(switchComponent); +} + +/** + * @tc.name: CheckableCreator006 + * @tc.desc: Test parse switch's field successfully from the type error fields dsl json of switch component. + * @tc.type: FUNC + * @tc.require: AR000DAR21 AR000DAR22 + * @tc.author: kouxinxin + */ +HWTEST_F(CheckableCreatorTest, CheckableCreator006, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct the json string with type error fields, then create switch component with the json. + * @tc.expected: step1. Switch component successfully created, and the fields has default values. + */ + std::string dslJson = "{ " + " \"className\": \"Switch\", " + " \"onChanged\": 1, " + " \"width\": true, " + " \"height\": true, " + " \"disabled\": 123, " + " \"value\": 1 " + "} "; + RefPtr switchComponent = CreateSwitchComponent(dslJson); + CheckSwitchDefaultValue(switchComponent); +} + +/** + * @tc.name: CheckableCreator007 + * @tc.desc: Test parse radio's field successfully from the right fields dsl json of radio component. + * @tc.type: FUNC + * @tc.require: AR000DBSKK AR000DBSKL AR000DBSKJ + * @tc.author: kouxinxin + */ +HWTEST_F(CheckableCreatorTest, CheckableCreator007, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct the json string with right fields, then create radio component with the json. + * @tc.expected: step1. Radio component successfully created, and the fields value same with the json fields. + */ + std::string dslJsonStart = " { \"className\": \"Radio\", "; + std::string dslJsonCommon = CHECKABLE_PROPERTIES; + std::string dslJsonEnd = " \"value\": \"red\", " + " \"groupValue\": \"red\" " + "} "; + std::string dslJson = dslJsonStart.append(dslJsonCommon.append(dslJsonEnd)); + RefPtr> radio = CreateRadioComponent(dslJson); + + EXPECT_TRUE(radio); + EXPECT_EQ(radio->GetWidth().Value(), 100.0); + EXPECT_EQ(radio->GetHeight().Value(), 100.0); + CheckCheckableColor(radio); + EXPECT_TRUE(radio->IsDisabled()); + EXPECT_EQ(radio->GetValue(), "red"); + EXPECT_EQ(radio->GetGroupValue(), "red"); + EXPECT_EQ(radio->GetChangeEvent(), "changeId001"); +} + +/** + * @tc.name: CheckableCreator008 + * @tc.desc: Test parse radio's field successfully from no field dsl json of radio component. + * @tc.type: FUNC + * @tc.require: AR000DBSKK AR000DBSKL AR000DBSKJ + * @tc.author: kouxinxin + */ +HWTEST_F(CheckableCreatorTest, CheckableCreator008, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct the json string with no fields, then create radio component with the json. + * @tc.expected: step1. Radio component successfully created, and the fields has default values. + */ + std::string dslJson = "{ \"className\": \"Radio\" }"; + RefPtr> radio = CreateRadioComponent(dslJson); + CheckRadioDefaultValue(radio); +} + +/** + * @tc.name: CheckableCreator009 + * @tc.desc: Test parse radio's field successfully from the type error fields dsl json of radio component. + * @tc.type: FUNC + * @tc.require: AR000DBSKK AR000DBSKL AR000DBSKJ + * @tc.author: kouxinxin + */ +HWTEST_F(CheckableCreatorTest, CheckableCreator009, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct the json string with type error fields, then create radio component with the json. + * @tc.expected: step1. Radio component successfully created, and the fields has default values. + */ + std::string dslJson = "{ " + " \"className\": \"Radio\", " + " \"onChanged\": 1, " + " \"width\": true, " + " \"height\": true, " + " \"disabled\": 123, " + " \"value\": 1, " + " \"groupValue\": 1 " + "} "; + RefPtr> radio = CreateRadioComponent(dslJson); + CheckRadioDefaultValue(radio); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/checkable/render_checkable_test.cpp b/frameworks/core/components/test/unittest/checkable/render_checkable_test.cpp new file mode 100644 index 00000000..feaf82b9 --- /dev/null +++ b/frameworks/core/components/test/unittest/checkable/render_checkable_test.cpp @@ -0,0 +1,780 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "flutter/lib/ui/painting/canvas.h" +#include "gtest/gtest.h" + +#include "adapter/ohos/osal/fake_asset_manager.h" +#include "adapter/ohos/osal/fake_task_executor.h" +#include "base/log/log.h" +#include "core/components/checkable/checkable_component.h" +#include "core/components/checkable/radio_group_component.h" +#include "core/components/checkable/render_checkable.h" +#include "core/components/flex/flex_component.h" +#include "core/components/test/json/json_frontend.h" +#include "core/mock/mock_resource_register.h" +#include "core/pipeline/base/flutter_render_context.h" +#define protected public +#include "core/components/checkable/render_switch.h" +#include "core/components/test/unittest/mock/mock_render_depend.h" +#include "core/components/text/render_text.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +using CheckableEventCallback = std::function; +using UpdateCheckboxCallback = std::function&)>; +using UpdateSwitchCallback = std::function&)>; + +const std::string TEST_CHANGE_EVENT_ID = "change_event_id"; +constexpr int32_t SURFACE_WIDTH = 1080; +constexpr int32_t SURFACE_HEIGHT = 2244; +constexpr int32_t DRAG_DELTA_SMALL = 40; +constexpr int32_t DRAG_DELTA_LARGE = 80; +constexpr bool DRAG_LESS_THAN_HALF = true; +constexpr bool DRAG_MORE_THAN_HALF = false; +constexpr bool DRAG_FORWARD = false; +constexpr bool DRAG_BACKWARD = true; + +constexpr int64_t MICROSEC_TO_NANOSEC = 1000000; +constexpr int64_t VSYNC_INTERVAL_MILLISEC = 16; + +const std::string TEST_TEXT_ON = "Onn"; +const std::string TEST_TEXT_OFF = "Offf"; +const std::string TEST_TEXT_COLOR_ON = "#FF0000"; +const std::string TEST_TEXT_COLOR_OFF = "#0000FF"; +const std::string TEST_TEXT_FONT_FAMILY = "serif"; +constexpr FontWeight TEST_TEXT_FONT_WEIGHT = FontWeight::W400; +constexpr FontStyle TEST_TEXT_FONT_STYLE = FontStyle::NORMAL; +constexpr TextDecoration TEST_TEXT_DECORATION = TextDecoration::NONE; +const double TEST_TEXT_PADDING = 12; +constexpr double TEST_TEXT_FONT_SIZE = 30.0; +constexpr double TEST_TEXT_LETTER_SPACING = 10.0; +constexpr double TEST_TEXT_SIZE = 200.0; +constexpr bool SHOW_TEXT = true; +const RefPtr THEME_MANAGER = AceType::MakeRefPtr(); + +const TouchPoint MOCK_DOWN_TOUCH_EVENT { 10, 10, 10, TouchType::DOWN }; +const TouchPoint MOCK_MOVE_TOUCH_EVENT { 10, 10, 10, TouchType::MOVE }; +const TouchPoint MOCK_UP_TOUCH_EVENT { 10, 10, 10, TouchType::UP }; +const TouchPoint MOCK_DOWN_TOUCH_EVENT_AT_END { 10, 1000, 10, TouchType::DOWN }; +const TouchPoint MOCK_MOVE_TOUCH_EVENT_AT_END { 10, 1000, 10, TouchType::MOVE }; +enum class TestGestureType { + CLICK = 0, + DRAG_LESS_THAN_HALF, + DRAG_MORE_THAN_HALF, + DRAG_BACK_LESS_THAN_HALF, + DRAG_BACK_MORE_THAN_HALF, + DRAG_MORE_THAN_HALF_AND_DRAG_BACK, + DRAG_BACK_MORE_THAN_HALF_AND_DRAG_BACK, +}; + +int64_t g_timeStamp = 0; + +int64_t GetTickCount() +{ + return g_timeStamp; +} + +class TestCheckableEventHander : public MockEventHandler { +public: + explicit TestCheckableEventHander(const CheckableEventCallback& eventCallback) : eventCallback_(eventCallback) {}; + ~TestCheckableEventHander() = default; + + void HandleAsyncEvent(const EventMarker& eventMarker, const std::string& param) + { + if (eventCallback_) { + eventCallback_(eventMarker.GetData().eventId, param); + } + }; + +private: + const CheckableEventCallback eventCallback_; +}; + +} // namespace + +flutter::Canvas* FlutterRenderContext::GetCanvas() +{ + return nullptr; +} + +class MockRenderSwitch final : public RenderSwitch { + DECLARE_ACE_TYPE(MockRenderSwitch, RenderSwitch); + +public: + MockRenderSwitch() = default; + ~MockRenderSwitch() override = default; + + Size CalculateTextSize(const std::string& text, RefPtr& renderText) override + { + return Size(TEST_TEXT_SIZE, TEST_TEXT_SIZE); + } +}; + +class CheckableComponentTest : public testing::Test { +public: + static void SetUpTestCase() + { + GTEST_LOG_(INFO) << "CheckableComponentTest SetUpTestCase"; + } + + static void TearDownTestCase() + { + GTEST_LOG_(INFO) << "CheckableComponentTest TearDownTestCase"; + } + + void SetUp() + { + auto platformWindow = PlatformWindow::Create(nullptr); + auto window = std::make_unique(std::move(platformWindow)); + auto taskExecutor = Referenced::MakeRefPtr(); + auto assetManager = Referenced::MakeRefPtr(); + auto resRegister = Referenced::MakeRefPtr(); + frontend_ = Frontend::CreateDefault(); + context_ = AceType::MakeRefPtr( + std::move(window), taskExecutor, assetManager, resRegister, frontend_, 0); + } + void TearDown() {} + +protected: + RefPtr context_; + RefPtr frontend_; + void CreateCheckboxAndRender(UpdateCheckboxCallback updateCheckable); + void CreateSwitchAndRender(UpdateSwitchCallback updateCheckable); + void ClickCheckable(); + void MoveTouchPoint(TouchPoint& touchPoint, bool dragLessHalf, bool backward); + void DragSwitch(const TestGestureType gestureType); + void ApplyAction(const TestGestureType gestureType, const bool& testSuccess); + void WaitAndMockVsync(int64_t waitFor); + void TestCheckboxChangedEvent(bool initValue, const std::string& expectValue); + void TestSwitchChangedEvent(bool initValue, const std::string& expectValue, const TestGestureType& gestureType); + void TestRadioChangedEvent(bool clickStatusOn); + void SetTextSwitchComponent(RefPtr& switchComponent); + void VerifyRenderSwitchUpdate(RefPtr& switchComponent); +}; + +void CheckableComponentTest::VerifyRenderSwitchUpdate(RefPtr& switchComponent) +{ + RefPtr renderSwitch = AceType::MakeRefPtr(); + renderSwitch->Attach(context_); + renderSwitch->Update(switchComponent); + EXPECT_TRUE(renderSwitch->showText_); + EXPECT_EQ(renderSwitch->textOn_, TEST_TEXT_ON); + EXPECT_EQ(renderSwitch->textOff_, TEST_TEXT_OFF); + EXPECT_EQ(renderSwitch->pointTextPadding_.Value(), TEST_TEXT_PADDING); + ASSERT_TRUE(renderSwitch->renderTextOn_); + ASSERT_TRUE(renderSwitch->renderTextOff_); + EXPECT_EQ(renderSwitch->renderTextOff_->textStyle_.GetTextColor(), Color::FromString(TEST_TEXT_COLOR_OFF)); + TextStyle textStyle = renderSwitch->renderTextOn_->textStyle_; + EXPECT_EQ(textStyle.GetTextColor(), Color::FromString(TEST_TEXT_COLOR_ON)); + EXPECT_EQ(textStyle.GetFontWeight(), TEST_TEXT_FONT_WEIGHT); + EXPECT_EQ(textStyle.GetFontStyle(), TEST_TEXT_FONT_STYLE); + EXPECT_EQ(textStyle.GetTextDecoration(), TEST_TEXT_DECORATION); + EXPECT_EQ(textStyle.GetFontSize().Value(), TEST_TEXT_FONT_SIZE); + EXPECT_EQ(textStyle.GetLetterSpacing(), TEST_TEXT_LETTER_SPACING); + EXPECT_EQ(textStyle.GetFontFamilies()[0], TEST_TEXT_FONT_FAMILY); + renderSwitch->PerformLayout(); + EXPECT_EQ(renderSwitch->textOnSize_, Size(TEST_TEXT_SIZE, TEST_TEXT_SIZE)); +} + +void CheckableComponentTest::SetTextSwitchComponent(RefPtr& switchComponent) +{ + switchComponent->SetShowText(SHOW_TEXT); + switchComponent->SetTextOn(TEST_TEXT_ON); + switchComponent->SetTextOff(TEST_TEXT_OFF); + switchComponent->SetTextColorOn(Color::FromString(TEST_TEXT_COLOR_ON)); + switchComponent->SetTextColorOff(Color::FromString(TEST_TEXT_COLOR_OFF)); + switchComponent->SetTextPadding(Dimension(TEST_TEXT_PADDING)); + TextStyle textStyle; + textStyle.SetFontSize(Dimension(TEST_TEXT_FONT_SIZE)); + textStyle.SetFontWeight(TEST_TEXT_FONT_WEIGHT); + textStyle.SetFontStyle(TEST_TEXT_FONT_STYLE); + textStyle.SetTextDecoration(TEST_TEXT_DECORATION); + textStyle.SetLetterSpacing(TEST_TEXT_LETTER_SPACING); + std::vector fontFamilies = { TEST_TEXT_FONT_FAMILY }; + textStyle.SetFontFamilies(fontFamilies); + switchComponent->SetTextStyle(textStyle); +} + +void CheckableComponentTest::CreateCheckboxAndRender(UpdateCheckboxCallback updateCheckable) +{ + RefPtr theme = THEME_MANAGER->GetTheme(); + RefPtr checkboxComponent = AceType::MakeRefPtr(theme); + context_->SetTimeProvider([] { return g_timeStamp + 10 * MICROSEC_TO_NANOSEC; }); + if (updateCheckable) { + updateCheckable(checkboxComponent); + } + + auto pageComponent = AceType::MakeRefPtr(0, checkboxComponent); + + context_->SetupRootElement(); + context_->PushPage(pageComponent); + context_->OnVsyncEvent(GetTickCount(), 0); + context_->OnSurfaceChanged(SURFACE_WIDTH, SURFACE_HEIGHT); +} + +void CheckableComponentTest::CreateSwitchAndRender(UpdateSwitchCallback updateCheckable) +{ + RefPtr theme = THEME_MANAGER->GetTheme(); + RefPtr switchComponent = AceType::MakeRefPtr(theme); + context_->SetTimeProvider([] { return g_timeStamp + 10 * MICROSEC_TO_NANOSEC; }); + + if (updateCheckable) { + updateCheckable(switchComponent); + } + + auto pageComponent = AceType::MakeRefPtr(0, switchComponent); + + context_->SetupRootElement(); + context_->PushPage(pageComponent); + context_->OnVsyncEvent(GetTickCount(), 0); + context_->OnSurfaceChanged(SURFACE_WIDTH, SURFACE_HEIGHT); +} + +void CheckableComponentTest::WaitAndMockVsync(int64_t waitFor) +{ + int64_t runningTime = 0; + do { + runningTime += VSYNC_INTERVAL_MILLISEC; + context_->OnVsyncEvent(GetTickCount(), 0); + g_timeStamp += VSYNC_INTERVAL_MILLISEC * MICROSEC_TO_NANOSEC; + } while (runningTime < waitFor); + context_->OnVsyncEvent(GetTickCount(), 0); +} + +void CheckableComponentTest::ClickCheckable() +{ + context_->OnTouchEvent(MOCK_DOWN_TOUCH_EVENT); + context_->OnTouchEvent(MOCK_UP_TOUCH_EVENT); + context_->OnVsyncEvent(GetTickCount(), 0); +} + +void CheckableComponentTest::MoveTouchPoint(TouchPoint& touchPoint, bool dragLessHalf, bool backward) +{ + double moveLength = dragLessHalf ? DRAG_DELTA_SMALL : DRAG_DELTA_LARGE; + if (backward) { + moveLength *= -1; + } + for (int i = 0; i < 3; i++) { + context_->OnTouchEvent(touchPoint); + touchPoint.x += moveLength; + } +} + +void CheckableComponentTest::DragSwitch(const TestGestureType gestureType) +{ + context_->OnTouchEvent(MOCK_DOWN_TOUCH_EVENT); + TouchPoint touchPoint = MOCK_MOVE_TOUCH_EVENT; + switch (gestureType) { + case TestGestureType::DRAG_LESS_THAN_HALF: + MoveTouchPoint(touchPoint, DRAG_LESS_THAN_HALF, DRAG_FORWARD); + break; + case TestGestureType::DRAG_MORE_THAN_HALF: + MoveTouchPoint(touchPoint, DRAG_MORE_THAN_HALF, DRAG_FORWARD); + break; + case TestGestureType::DRAG_BACK_LESS_THAN_HALF: + context_->OnTouchEvent(MOCK_DOWN_TOUCH_EVENT_AT_END); + touchPoint = MOCK_MOVE_TOUCH_EVENT_AT_END; + MoveTouchPoint(touchPoint, DRAG_LESS_THAN_HALF, DRAG_BACKWARD); + break; + case TestGestureType::DRAG_BACK_MORE_THAN_HALF: + context_->OnTouchEvent(MOCK_DOWN_TOUCH_EVENT_AT_END); + touchPoint = MOCK_MOVE_TOUCH_EVENT_AT_END; + MoveTouchPoint(touchPoint, DRAG_MORE_THAN_HALF, DRAG_BACKWARD); + break; + case TestGestureType::DRAG_MORE_THAN_HALF_AND_DRAG_BACK: + MoveTouchPoint(touchPoint, DRAG_MORE_THAN_HALF, DRAG_FORWARD); + MoveTouchPoint(touchPoint, DRAG_MORE_THAN_HALF, DRAG_BACKWARD); + MoveTouchPoint(touchPoint, DRAG_MORE_THAN_HALF, DRAG_BACKWARD); + break; + case TestGestureType::DRAG_BACK_MORE_THAN_HALF_AND_DRAG_BACK: + context_->OnTouchEvent(MOCK_DOWN_TOUCH_EVENT_AT_END); + touchPoint = MOCK_MOVE_TOUCH_EVENT_AT_END; + MoveTouchPoint(touchPoint, DRAG_MORE_THAN_HALF, DRAG_BACKWARD); + MoveTouchPoint(touchPoint, DRAG_MORE_THAN_HALF, DRAG_FORWARD); + MoveTouchPoint(touchPoint, DRAG_MORE_THAN_HALF, DRAG_FORWARD); + break; + default: + break; + } + TouchPoint touchEndPoint = MOCK_UP_TOUCH_EVENT; + touchEndPoint.x = touchPoint.x; + context_->OnTouchEvent(touchEndPoint); +} + +void CheckableComponentTest::TestCheckboxChangedEvent(const bool initValue, const std::string& expectValue) +{ + bool testSuccess = false; + RefPtr eventHander = AceType::MakeRefPtr( + [this, expectValue, &testSuccess](const std::string& eventId, const std::string& param) mutable { + std::string value = expectValue; + std::string expectChangeResult = std::string("\"change\",{\"checked\":").append(value.append("},null")); + EXPECT_EQ(param, expectChangeResult); + EXPECT_EQ(eventId, TEST_CHANGE_EVENT_ID); + testSuccess = true; + }); + + context_->RegisterEventHandler(eventHander); + + CreateCheckboxAndRender([this, initValue](const RefPtr& checkbox) { + EventMarker changeEvent { TEST_CHANGE_EVENT_ID }; + checkbox->SetChangeEvent(changeEvent); + checkbox->SetValue(initValue); + }); + ClickCheckable(); + WaitAndMockVsync(200); + EXPECT_TRUE(testSuccess); +} + +void CheckableComponentTest::TestSwitchChangedEvent( + bool initValue, const std::string& expectValue, const TestGestureType& gestureType) +{ + bool testSuccess = false; + RefPtr eventHander = AceType::MakeRefPtr( + [this, expectValue, &testSuccess](const std::string& eventId, const std::string& param) mutable { + std::string value = expectValue; + std::string expectChangeResult = std::string("\"change\",{\"checked\":").append(value.append("},null")); + EXPECT_EQ(param, expectChangeResult); + EXPECT_EQ(eventId, TEST_CHANGE_EVENT_ID); + testSuccess = true; + }); + + context_->RegisterEventHandler(eventHander); + + CreateSwitchAndRender([this, initValue](const RefPtr& switchComponent) { + EventMarker changeEvent { TEST_CHANGE_EVENT_ID }; + switchComponent->SetChangeEvent(changeEvent); + switchComponent->SetValue(initValue); + }); + ApplyAction(gestureType, testSuccess); +} + +void CheckableComponentTest::ApplyAction(const TestGestureType gestureType, const bool& testSuccess) +{ + switch (gestureType) { + case TestGestureType::CLICK: + ClickCheckable(); + WaitAndMockVsync(500); + EXPECT_TRUE(testSuccess); + break; + case TestGestureType::DRAG_LESS_THAN_HALF: + DragSwitch(TestGestureType::DRAG_LESS_THAN_HALF); + WaitAndMockVsync(500); + EXPECT_FALSE(testSuccess); + break; + case TestGestureType::DRAG_MORE_THAN_HALF: + DragSwitch(TestGestureType::DRAG_MORE_THAN_HALF); + WaitAndMockVsync(500); + EXPECT_TRUE(testSuccess); + break; + case TestGestureType::DRAG_BACK_LESS_THAN_HALF: + DragSwitch(TestGestureType::DRAG_BACK_LESS_THAN_HALF); + WaitAndMockVsync(500); + EXPECT_FALSE(testSuccess); + break; + case TestGestureType::DRAG_BACK_MORE_THAN_HALF: + DragSwitch(TestGestureType::DRAG_BACK_MORE_THAN_HALF); + WaitAndMockVsync(500); + EXPECT_TRUE(testSuccess); + break; + case TestGestureType::DRAG_MORE_THAN_HALF_AND_DRAG_BACK: + DragSwitch(TestGestureType::DRAG_MORE_THAN_HALF_AND_DRAG_BACK); + WaitAndMockVsync(500); + EXPECT_FALSE(testSuccess); + break; + case TestGestureType::DRAG_BACK_MORE_THAN_HALF_AND_DRAG_BACK: + DragSwitch(TestGestureType::DRAG_BACK_MORE_THAN_HALF_AND_DRAG_BACK); + WaitAndMockVsync(500); + EXPECT_FALSE(testSuccess); + break; + default: + break; + } +} + +void CheckableComponentTest::TestRadioChangedEvent(bool clickStatusOn) +{ + // [radioSelected] indicates whether the radio whose [value] is "red" being selected. + // [radioSelected] only changes via [ChangeEvent] triggered by radio whose [value] is "red". + bool radioSelected = false; + + RefPtr eventHander = AceType::MakeRefPtr( + [this, &radioSelected](const std::string& eventId, const std::string& param) mutable { + if (param.find("\"checked\":true") == std::string::npos) { + return; + } + std::string checked = "true"; + std::string value = "red"; + std::string expectChangeResult = std::string("\"change\",{\"checked\":") + .append(checked) + .append(",\"value\":\"") + .append(value) + .append("\"},null"); + EXPECT_EQ(eventId, TEST_CHANGE_EVENT_ID); + // if [ChangeEvent] triggers, [radioSelected] must be true, considering radio with value "red" is clicked. + radioSelected = (param == expectChangeResult); + }); + + context_->RegisterEventHandler(eventHander); + + std::list> children; + RadioGroupComponent radioGroup; + std::vector radioValues { "red", "green", "yellow" }; + uint32_t selectRadioIndex = clickStatusOn ? 0 : radioValues.size() - 1; + std::string groupValue = radioValues[selectRadioIndex]; + RefPtr theme = THEME_MANAGER->GetTheme(); + for (const auto& value : radioValues) { + RefPtr> radio = AceType::MakeRefPtr>(theme); + radio->SetValue(value); + EventMarker changeEvent { TEST_CHANGE_EVENT_ID }; + radio->SetChangeEvent(changeEvent); + radio->SetGroupValue(groupValue); + radioGroup.AddRadio(radio); + children.push_back(radio); + } + + RefPtr row = + AceType::MakeRefPtr(FlexAlign::FLEX_START, FlexAlign::FLEX_START, children); + auto pageComponent = AceType::MakeRefPtr(0, row); + context_->SetTimeProvider([] { return g_timeStamp + 10 * MICROSEC_TO_NANOSEC; }); + context_->SetupRootElement(); + context_->PushPage(pageComponent); + context_->OnVsyncEvent(GetTickCount(), 0); + context_->OnSurfaceChanged(SURFACE_WIDTH, SURFACE_HEIGHT); + + ClickCheckable(); + if (clickStatusOn) { + // case when [ChangeEvent] will not trigger hence [radioSelected] will remains its initial value [false]. + EXPECT_FALSE(radioSelected); + } else { + // case when [ChangeEvent] triggers hence [radioSelected] will change to [true]. + EXPECT_TRUE(radioSelected); + } +} + +/** + * @tc.name: CheckboxRender001 + * @tc.desc: Test when the state of the checkbox component is on, after clicking, you can listen to the event that the + * state changes to off + * @tc.type: FUNC + * @tc.require: AR000DAR25 + */ +HWTEST_F(CheckableComponentTest, CheckboxRender001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "CheckableComponentTest CheckboxRender001 start"; + + /** + * @tc.steps: step1. Build a component tree containing checkbox component. The initial state of checkbox is on. Add + * onChange event listeners to the component. + */ + /** + * @tc.steps: step2. click checkbox component. + * @tc.expected: step2. The component receives onChange event listeners whose status becomes off. + */ + TestCheckboxChangedEvent(true, "false"); + GTEST_LOG_(INFO) << "CheckableComponentTest CheckboxRender001 stop"; +} + +/** + * @tc.name: CheckboxRender002 + * @tc.desc: Test when the state of the checkbox component is off, after clicking, you can listen to the event that the + * state changes to on + * @tc.type: FUNC + * @tc.require: AR000DAR25 + */ +HWTEST_F(CheckableComponentTest, CheckboxRender002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "CheckableComponentTest CheckboxRender002 start"; + + /** + * @tc.steps: step1. Build a component tree containing checkbox component. The initial state of checkbox is off. Add + * onChange event listeners to the component. + */ + /** + * @tc.steps: step2. click checkbox component. + * @tc.expected: step2. The component receives onChange event listeners whose status becomes on. + */ + TestCheckboxChangedEvent(false, "true"); + GTEST_LOG_(INFO) << "CheckableComponentTest CheckboxRender002 stop"; +} + +/** + * @tc.name: SwitchRender001 + * @tc.desc: Test when the state of the switch component is on, after clicking, you can listen to the event that the + * state changes to off + * @tc.type: FUNC + * @tc.require: AR000DAR22 + */ +HWTEST_F(CheckableComponentTest, SwitchRender001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "CheckableComponentTest SwitchRender001 start"; + + /** + * @tc.steps: step1. Build a component tree containing switch component. The initial state of switch is on. Add + * onChange event listeners to the component. + */ + /** + * @tc.steps: step2. click switch component. + * @tc.expected: step2. The component receives onChange event listeners whose status becomes off. + */ + TestSwitchChangedEvent(true, "false", TestGestureType::CLICK); + GTEST_LOG_(INFO) << "CheckableComponentTest SwitchRender001 stop"; +} + +/** + * @tc.name: SwitchRender002 + * @tc.desc: Test when the state of the switch component is off, after clicking, you can listen to the event that the + * state changes to on + * @tc.type: FUNC + * @tc.require: AR000DAR22 + */ +HWTEST_F(CheckableComponentTest, SwitchRender002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "CheckableComponentTest SwitchRender002 start"; + + /** + * @tc.steps: step1. Build a component tree containing switch component. The initial state of switch is off. Add + * onChange event listeners to the component. + */ + /** + * @tc.steps: step2. click switch component. + * @tc.expected: step2. The component receives onChange event listeners whose status becomes on. + */ + TestSwitchChangedEvent(false, "true", TestGestureType::CLICK); + GTEST_LOG_(INFO) << "CheckableComponentTest SwitchRender002 stop"; +} + +/** + * @tc.name: SwitchRender003 + * @tc.desc: Test when the switch component is off, the release state does not change when dragging forth less than + * half of the switch + * @tc.type: FUNC + * @tc.require: AR000DAR22 + */ +HWTEST_F(CheckableComponentTest, SwitchRender003, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "CheckableComponentTest SwitchRender003 start"; + + /** + * @tc.steps: step1. Build a component tree containing switch component. The initial state of switch is off. Add + * onChange event listeners to the component. + */ + /** + * @tc.steps: step2. Let go when you drag the switch component forth less than half of the switch. + * @tc.expected: step2. The component can not receives onChange event listeners whose status becomes on. + */ + TestSwitchChangedEvent(false, "false", TestGestureType::DRAG_LESS_THAN_HALF); + GTEST_LOG_(INFO) << "CheckableComponentTest SwitchRender003 stop"; +} + +/** + * @tc.name: SwitchRender004 + * @tc.desc: Test when the switch component is off, the release state changes when dragging forth more than + * half of the switch + * @tc.type: FUNC + * @tc.require: AR000DAR22 + */ +HWTEST_F(CheckableComponentTest, SwitchRender004, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "CheckableComponentTest SwitchRender004 start"; + + /** + * @tc.steps: step1. Build a component tree containing switch component. The initial state of switch is off. Add + * onChange event listeners to the component. + */ + /** + * @tc.steps: step2. Release when the Switch component is dragged forth more than half of the switch. + * @tc.expected: step2. The component receives onChange event listeners whose status becomes on. + */ + TestSwitchChangedEvent(false, "true", TestGestureType::DRAG_MORE_THAN_HALF); + GTEST_LOG_(INFO) << "CheckableComponentTest SwitchRender004 stop"; +} + +/** + * @tc.name: SwitchRender005 + * @tc.desc: Test when the switch component is on, the release state does not change when dragging back less than + * half of the switch + * @tc.type: FUNC + * @tc.require: AR000DAR22 + */ +HWTEST_F(CheckableComponentTest, SwitchRender005, TestSize.Level1) +{ + /** + * @tc.steps: step1. Build a component tree containing switch component. The initial state of switch is on. Add + * onChange event listeners to the component. + */ + /** + * @tc.steps: step2. Release when the Switch component is dragged back less than half of the switch. + * @tc.expected: step2. The component can not receives onChange event listeners whose status becomes off. + */ + TestSwitchChangedEvent(true, "true", TestGestureType::DRAG_BACK_LESS_THAN_HALF); +} + +/** + * @tc.name: SwitchRender006 + * @tc.desc: Test when the switch component is on, the release state changes when dragging back more than + * half of the switch + * @tc.type: FUNC + * @tc.require: AR000DAR22 + */ +HWTEST_F(CheckableComponentTest, SwitchRender006, TestSize.Level1) +{ + /** + * @tc.steps: step1. Build a component tree containing switch component. The initial state of switch is on. Add + * onChange event listeners to the component. + */ + /** + * @tc.steps: step2. Release when the Switch component is dragged back more than half of the switch. + * @tc.expected: step2. The component receives onChange event listeners whose status becomes off. + */ + TestSwitchChangedEvent(true, "false", TestGestureType::DRAG_BACK_MORE_THAN_HALF); +} + +/** + * @tc.name: SwitchRender007 + * @tc.desc: Test when the switch component is dragged form off to on and off, the release state does not change + * @tc.type: FUNC + * @tc.require: AR000DAR22 + */ +HWTEST_F(CheckableComponentTest, SwitchRender007, TestSize.Level1) +{ + /** + * @tc.steps: step1. Build a component tree containing switch component. The initial state of switch is off. Add + * onChange event listeners to the component. + */ + /** + * @tc.steps: step2. Release when the Switch component is dragged form off to on and off + * @tc.expected: step2. The component doesn't receive onChange event listeners whose status becomes on. + */ + TestSwitchChangedEvent(false, "false", TestGestureType::DRAG_MORE_THAN_HALF_AND_DRAG_BACK); +} + +/** + * @tc.name: SwitchRender008 + * @tc.desc: Test when the switch component is dragged form on to off and on, the release state does not change + * @tc.type: FUNC + * @tc.require: AR000DAR22 + */ +HWTEST_F(CheckableComponentTest, SwitchRender008, TestSize.Level1) +{ + /** + * @tc.steps: step1. Build a component tree containing switch component. The initial state of switch is on. Add + * onChange event listeners to the component. + */ + /** + * @tc.steps: step2. Release when the Switch component is dragged form on to off and on + * @tc.expected: step2. The component doesn't receives onChange event listeners whose status becomes on. + */ + TestSwitchChangedEvent(true, "true", TestGestureType::DRAG_BACK_MORE_THAN_HALF_AND_DRAG_BACK); +} + +/** + * @tc.name: RadioRender001 + * @tc.desc: Test that when the radio component status is off, after clicking, you can listen to the status change event + * @tc.type: FUNC + * @tc.require: SR000DBSKI + */ +HWTEST_F(CheckableComponentTest, RadioRender001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "CheckableComponentTest RadioRender001 start"; + /** + * @tc.steps: step1. Build a component tree containing a group of radio components. Initially only one radio is + * selected. + */ + /** + * @tc.steps: step2. Click on the unselected radio. + * @tc.expected: step2. The component receives the onChange event of the selected radio value. + */ + TestRadioChangedEvent(false); + GTEST_LOG_(INFO) << "CheckableComponentTest RadioRender001 end"; +} + +/** + * @tc.name: RadioRender002 + * @tc.desc: Test when the radio component status is on, after clicking, you cannot listen to the status change event + * @tc.type: FUNC + * @tc.require: SR000DBSKI + */ +HWTEST_F(CheckableComponentTest, RadioRender002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "CheckableComponentTest RadioRender002 start"; + /** + * @tc.steps: step1. Build a component tree containing a group of radio components. Initially only one radio is + * selected. + */ + /** + * @tc.steps: step2. Click on the selected radio. + * @tc.expected: step2. Component will not receive onChange event listener. + */ + TestRadioChangedEvent(true); + GTEST_LOG_(INFO) << "CheckableComponentTest RadioRender002 end"; +} + +/** + * @tc.name: UpdateTextSwitch001 + * @tc.desc: Test switch component can update with text attributes correctly + * @tc.type: FUNC + * @tc.require: AR000DQ1R5 AR000DQ1R6 + */ +HWTEST_F(CheckableComponentTest, UpdateTextSwitch001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Build a switchComponent with certain attributes. + * @tc.expected: step1. The switchComponent is not nullptr. + */ + RefPtr theme = THEME_MANAGER->GetTheme(); + RefPtr switchComponent = AceType::MakeRefPtr(theme); + EXPECT_TRUE(switchComponent); + SetTextSwitchComponent(switchComponent); + + /** + * @tc.steps: step2. Create a renderSwitch to update with switchComponent. + * @tc.expected: step2. Attributes of renderSwitch are as expected. + */ + VerifyRenderSwitchUpdate(switchComponent); +} + +/** + * @tc.name: UpdateTextSwitch002 + * @tc.desc: Test switch component can update correctly when showtext is false + * @tc.type: FUNC + * @tc.require: AR000DQ1R5 AR000DQ1R6 + */ +HWTEST_F(CheckableComponentTest, UpdateTextSwitch002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Build a switchComponent with showtext being false. + * @tc.expected: step1. The switchComponent is not nullptr. + */ + RefPtr theme = THEME_MANAGER->GetTheme(); + RefPtr switchComponent = AceType::MakeRefPtr(theme); + EXPECT_TRUE(switchComponent); + switchComponent->SetShowText(false); + + /** + * @tc.steps: step2. Create a renderSwitch to update with switchComponent. + * @tc.expected: step2. Both renderTextOn_ and renderTextOff_ are nullptr. + */ + RefPtr renderSwitch = AceType::MakeRefPtr(); + renderSwitch->Update(switchComponent); + EXPECT_TRUE(!renderSwitch->renderTextOn_); + EXPECT_TRUE(!renderSwitch->renderTextOff_); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/click_effect/BUILD.gn b/frameworks/core/components/test/unittest/click_effect/BUILD.gn new file mode 100644 index 00000000..1ef08bad --- /dev/null +++ b/frameworks/core/components/test/unittest/click_effect/BUILD.gn @@ -0,0 +1,51 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = + "$ace_test_output_root/backenduicomponent/clickspringeffect" + +ohos_unittest("ClickSpringEffectTest") { + module_out_path = module_output_path + + sources = [ + "$ace_root/frameworks/core/components/test/unittest/mock/mock_render_common.cpp", + "click_spring_effect_test.cpp", + ] + + configs = [ "$ace_root:ace_test_config" ] + + deps = [ + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "$ace_root/frameworks/core/components/test:json", + "//third_party/googletest:gtest_main", + ] + if (is_standard_system) { + deps += [ "$ace_root/frameworks/bridge:js_framework_ohos" ] + } + + if (is_standard_system) { + configs += [ "//third_party/curl:curl_config" ] + deps += [ "//third_party/curl:curl" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +group("unittest") { + testonly = true + deps = [ ":ClickSpringEffectTest" ] +} diff --git a/frameworks/core/components/test/unittest/click_effect/click_spring_effect_test.cpp b/frameworks/core/components/test/unittest/click_effect/click_spring_effect_test.cpp new file mode 100644 index 00000000..5ee55d4a --- /dev/null +++ b/frameworks/core/components/test/unittest/click_effect/click_spring_effect_test.cpp @@ -0,0 +1,158 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include "gtest/gtest.h" +#define private public +#define protected public +#include "core/animation/animator.h" +#include "core/components/test/unittest/mock/mock_render_common.h" +#include "core/components/transform/click_spring_effect.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { + +class MockAnimator : public Animator { + DECLARE_ACE_TYPE(MockAnimator, Animator); + +public: + explicit MockAnimator(const WeakPtr& context) : Animator(context) {} + ~MockAnimator() = default; + void GotoEnd() + { + // just go to end + NotifyMotion(INT32_MAX); + } +}; + +class ClickSpringEffectTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; +}; + +void ClickSpringEffectTest::SetUpTestCase() {} +void ClickSpringEffectTest::TearDownTestCase() {} +void ClickSpringEffectTest::SetUp() {} +void ClickSpringEffectTest::TearDown() {} + +/** + * @tc.name: ClickSpringEffectTest001 + * @tc.desc: Verify ClickeSpringEffect is work right. + * @tc.type: FUNC + * @tc.require: AR000F3CDD AR000F3CDF + * @tc.author: jiangtao + */ +HWTEST_F(ClickSpringEffectTest, ClickSpringEffectTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the clickEffect and controller. + */ + auto context = MockRenderCommon::GetMockContext(); + auto clickSpringEffect = AceType::MakeRefPtr(context); + auto controller = AceType::MakeRefPtr(context); + clickSpringEffect->SetController(controller); + /** + * @tc.steps: step2. call the ShowAnimation with TouchType::Down and MEDIA type. + * @tc.expected: step2. scale should be 1.0 + */ + clickSpringEffect->ShowAnimation(TouchType::DOWN, ClickSpringEffectType::MEDIUM); + auto scale = clickSpringEffect->GetScale(); + GTEST_LOG_(INFO) << scale; + EXPECT_EQ(scale, 1.0); + /** + * @tc.steps: step3. call the Controller go to the end, test the target is right. + * @tc.expected: step3. scale should be 0.95 + */ + controller->GotoEnd(); + scale = clickSpringEffect->GetScale(); + GTEST_LOG_(INFO) << scale; + EXPECT_EQ(scale, 0.95); + + /** + * @tc.steps: step4. call the ShowAnimation with TouchType::Down and MEDIA type. + * @tc.expected: step4. scale should be 1.0; + */ + clickSpringEffect->ShowAnimation(TouchType::UP, ClickSpringEffectType::MEDIUM); + controller->GotoEnd(); + scale = clickSpringEffect->GetScale(); + GTEST_LOG_(INFO) << scale; + EXPECT_EQ(scale, 1.0); +} + +/** + * @tc.name: ClickSpringEffectTest002 + * @tc.desc: Verify ClickeSpringEffect is work right. + * @tc.type: FUNC + * @tc.require: AR000F3CDD AR000F3CDF + * @tc.author: jiangtao + */ +HWTEST_F(ClickSpringEffectTest, ClickSpringEffectTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the clickEffect and controller. + */ + auto context = MockRenderCommon::GetMockContext(); + auto clickSpringEffect = AceType::MakeRefPtr(context); + auto controller = AceType::MakeRefPtr(context); + clickSpringEffect->SetController(controller); + + /** + * @tc.steps: step2. call the ShowAnimation with TouchType::Up and SMALL type. + * @tc.expected: step2. scale should be 1.0 + */ + clickSpringEffect->ShowAnimation(TouchType::UP, ClickSpringEffectType::SMALL); + controller->GotoEnd(); + double scale = clickSpringEffect->GetScale(); + GTEST_LOG_(INFO) << scale; + EXPECT_EQ(scale, 1.0); + + /** + * @tc.steps: step3. call the ShowAnimation with TouchType::Down and SMALL type. + * @tc.expected: step3. scale should be 0.9; + */ + clickSpringEffect->ShowAnimation(TouchType::DOWN, ClickSpringEffectType::SMALL); + controller->GotoEnd(); + scale = clickSpringEffect->GetScale(); + GTEST_LOG_(INFO) << scale; + EXPECT_EQ(scale, 0.9); + + /** + * @tc.steps: step4. call the ShowAnimation with TouchType::Down and MEDIUM type. + * @tc.expected: step4. scale should be 0.95; + */ + clickSpringEffect->ShowAnimation(TouchType::DOWN, ClickSpringEffectType::MEDIUM); + controller->GotoEnd(); + scale = clickSpringEffect->GetScale(); + GTEST_LOG_(INFO) << scale; + EXPECT_EQ(scale, 0.95); + + /** + * @tc.steps: step5. call the ShowAnimation with TouchType::CANCEL and LARGE type. + * @tc.expected: step5. scale should be 1.0; + */ + clickSpringEffect->ShowAnimation(TouchType::CANCEL, ClickSpringEffectType::LARGE); + controller->GotoEnd(); + scale = clickSpringEffect->GetScale(); + GTEST_LOG_(INFO) << scale; + EXPECT_EQ(scale, 1.0); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/decoration/BUILD.gn b/frameworks/core/components/test/unittest/decoration/BUILD.gn new file mode 100644 index 00000000..3af736bc --- /dev/null +++ b/frameworks/core/components/test/unittest/decoration/BUILD.gn @@ -0,0 +1,59 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +if (is_standard_system) { + module_output_path = "ace_engine_standard/backenduicomponent/decoration" +} + +ohos_unittest("DecorationCreatorTest") { + module_out_path = module_output_path + + sources = [ "decoration_creator_test.cpp" ] + + configs = [ + ":config_json_creator_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "$ace_root/frameworks/core/components/test:json", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + if (is_standard_system) { + deps += [ "$ace_root/frameworks/bridge:js_framework_ohos" ] + } + + if (is_standard_system) { + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_json_creator_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":DecorationCreatorTest" ] +} diff --git a/frameworks/core/components/test/unittest/decoration/decoration_creator_test.cpp b/frameworks/core/components/test/unittest/decoration/decoration_creator_test.cpp new file mode 100644 index 00000000..1186deae --- /dev/null +++ b/frameworks/core/components/test/unittest/decoration/decoration_creator_test.cpp @@ -0,0 +1,348 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/json/json_util.h" +#include "base/utils/utils.h" +#include "core/components/common/layout/constants.h" +#include "core/components/common/properties/color.h" +#include "core/components/common/properties/decoration.h" +#include "core/components/common/properties/shadow.h" +#include "core/components/test/json/component_factory.h" +#include "core/components/test/json/decoration_creator.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +const Color COLOR_DEFAULT = Color(0x00000000); +const Offset OFFSET_DEFAULT = Offset(0.0, 0.0); +const Color DECORATION_COLOR_VALUE = Color(0xffff0000); +const double BLUR_RADIUS_VALUE = 10.0; +const Offset OFFSET_VALUE = Offset(10.0, 10.0); +const Border DECORATION_BORDER_VALUE = + Border(BorderEdge(Color(0xffff0000), Dimension(10.0, DimensionUnit::PX), BorderStyle::SOLID)); +const Border DECORATION_BORDER_DEFAULT = Border(BorderEdge(Color(0xff000000), Dimension(), BorderStyle::NONE)); +const std::string DECORATION_IMAGE_SRC = "/data/000.jpg"; +const double TEST_GRADIENT_ANGLE = 350.0; +const bool TEST_GRADIENT_REPEAT = false; + +} // namespace + +class DecorationCreatorTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); + RefPtr CreateFromDsl(const std::string content) const; +}; + +void DecorationCreatorTest::SetUpTestCase() {} +void DecorationCreatorTest::TearDownTestCase() {} +void DecorationCreatorTest::SetUp() {} +void DecorationCreatorTest::TearDown() {} + +RefPtr DecorationCreatorTest::CreateFromDsl(const std::string content) const +{ + const auto dslBuf = reinterpret_cast(content.c_str()); + size_t dslLen = content.length(); + std::string jsonStr(reinterpret_cast(dslBuf), dslLen); + std::unique_ptr decorationJson = JsonUtil::ParseJsonString(jsonStr); + return DecorationCreator::CreateFromJson(*decorationJson); +} + +/** + * @tc.name: DecorationCreator001 + * @tc.desc: Verify DecorationCreator can create a decoration with shadows. + * @tc.type: FUNC + * @tc.require: AR000DAQU7 + * @tc.author: chenlien + */ +HWTEST_F(DecorationCreatorTest, DecorationCreator001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of decoration with shadows properties. + */ + const std::string content = "" + "{ " + " \"className\": \"Decoration\", " + " \"shadowList\":[ " + " { " + " \"color\": {\"className\": \"Color\",\"alpha\": 255,\"red\": 255}, " + " \"blurRadius\": 10.0, " + " \"offset\":{\"dx\":10.0,\"dy\":10.0} " + " } " + " ] " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get decoration. + * @tc.expected: step2. decoration properties are set correctly. + */ + auto decoration = CreateFromDsl(content); + if (!decoration->GetShadows().empty()) { + Shadow shadow = decoration->GetShadows().front(); + ASSERT_TRUE(shadow.GetColor() == DECORATION_COLOR_VALUE); + ASSERT_TRUE(shadow.GetOffset() == OFFSET_VALUE); + ASSERT_TRUE(shadow.GetBlurRadius() == BLUR_RADIUS_VALUE); + } +} + +/** + * @tc.name: DecorationCreator002 + * @tc.desc: Verify DecorationCreator can create a decoration with only empty shadowList. + * @tc.type: FUNC + * @tc.require: AR000DAQU7 + * @tc.author: chenlien + */ +HWTEST_F(DecorationCreatorTest, DecorationCreator002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of decoration with only empty shadowList. + */ + const std::string content = "" + "{ " + " \"className\": \"Decoration\", " + " \"shadowList\":[ " + " ] " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get decoration. + * @tc.expected: step2. decoration properties are set correctly. + */ + RefPtr decoration = CreateFromDsl(content); + ASSERT_TRUE(decoration->GetShadows().empty()); +} + +/** + * @tc.name: DecorationCreator003 + * @tc.desc: Verify DecorationCreator can create a decoration with only color property. + * @tc.type: FUNC + * @tc.require: AR000DAQU8 + * @tc.author: chenlien + */ +HWTEST_F(DecorationCreatorTest, DecorationCreator003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of decoration with only color property. + */ + const std::string content = "" + "{ " + " \"className\": \"Decoration\", " + " \"color\": { " + " \"className\": \"Color\", " + " \"alpha\":255, " + " \"red\":255 " + " } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get decoration. + * @tc.expected: step2. decoration properties are set correctly. + */ + RefPtr decoration = CreateFromDsl(content); + ASSERT_TRUE(decoration->GetBackgroundColor() == DECORATION_COLOR_VALUE); +} + +/** + * @tc.name: DecorationCreator004 + * @tc.desc: Verify DecorationCreator can create a decoration with only gradient property. + * @tc.type: FUNC + * @tc.require: AR000DAQU9 + * @tc.author: chenlien + */ +HWTEST_F(DecorationCreatorTest, DecorationCreator004, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of decoration with only gradient property. + */ + const std::string content = "" + "{ " + " \"className\": \"Decoration\", " + " \"gradient\": { " + " \"className\": \"Gradient\", " + " \"angle\": 350, " + " \"repeat\":false " + " } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get decoration. + * @tc.expected: step2. decoration properties are set correctly. + */ + RefPtr decoration = CreateFromDsl(content); + ASSERT_TRUE(decoration->GetGradient().GetAngle() == TEST_GRADIENT_ANGLE); + ASSERT_TRUE(decoration->GetGradient().GetRepeat() == TEST_GRADIENT_REPEAT); +} + +/** + * @tc.name: DecorationCreator005 + * @tc.desc: Verify DecorationCreator can create a decoration with only image property. + * @tc.type: FUNC + * @tc.require: AR000DAQUA + * @tc.author: chenlien + */ +HWTEST_F(DecorationCreatorTest, DecorationCreator005, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of decoration with only image property. + */ + const std::string content = "" + "{ " + " \"className\": \"Decoration\", " + " \"backgroundImage\": { " + " \"className\": \"BackgroundImage\", " + " \"src\":\"/data/000.jpg\", " + " \"imageRepeat\":0 " + " } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get decoration. + * @tc.expected: step2. decoration properties are set correctly. + */ + RefPtr decoration = CreateFromDsl(content); + ASSERT_TRUE(decoration->GetImage()->GetImageRepeat() == ImageRepeat::REPEAT); + ASSERT_TRUE(decoration->GetImage()->GetSrc() == DECORATION_IMAGE_SRC); +} + +/** + * @tc.name: DecorationCreator006 + * @tc.desc: Verify DecorationCreator can create a decoration with only border property. + * @tc.type: FUNC + * @tc.require: AR000DAQUB + * @tc.author: chenlien + */ +HWTEST_F(DecorationCreatorTest, DecorationCreator006, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of decoration with only border property. + */ + const std::string content = "" + "{ " + " \"className\": \"Decoration\", " + " \"border\": { " + " \"className\": \"Border\", " + " \"value\": { " + " \"className\": \"BorderEdge\", " + " \"width\":10.0, " + " \"color\": { " + " \"className\": \"Color\", " + " \"alpha\": 255, " + " \"red\": 255 " + " }, " + " \"style\": \"solid\" " + " } " + " } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get decoration. + * @tc.expected: step2. decoration properties are set correctly. + */ + RefPtr decoration = CreateFromDsl(content); + ASSERT_TRUE(decoration->GetBorder() == DECORATION_BORDER_VALUE); +} + +/** + * @tc.name: DecorationCreator007 + * @tc.desc: Verify DecorationCreator can create a decoration with only className. + * @tc.type: FUNC + * @tc.require: AR000DAQUB + * @tc.author: chenlien + */ +HWTEST_F(DecorationCreatorTest, DecorationCreator007, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of decoration with only className. + */ + const std::string content = "" + "{ " + " \"className\": \"Decoration\" " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get decoration. + * @tc.expected: step2. decoration properties are set as default. + */ + RefPtr decoration = CreateFromDsl(content); + ASSERT_TRUE(decoration->GetShadows().empty()); + ASSERT_TRUE(decoration->GetBackgroundColor() == COLOR_DEFAULT); + ASSERT_TRUE(decoration->GetBorder() == DECORATION_BORDER_DEFAULT); +} + +/** + * @tc.name: DecorationCreator008 + * @tc.desc: Verify DecorationCreator can create a decoration with only border property. + * @tc.type: FUNC + * @tc.require: AR000DAQUB + * @tc.author: chenlien + */ +HWTEST_F(DecorationCreatorTest, DecorationCreator008, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of decoration with only border className. + */ + const std::string content = "" + "{ " + " \"className\": \"Decoration\", " + " \"border\": { " + " \"className\": \"Border\" " + " } " + " } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get decoration. + * @tc.expected: step2. decoration properties are set correctly. + */ + RefPtr decoration = CreateFromDsl(content); + ASSERT_TRUE(decoration->GetBorder() == DECORATION_BORDER_DEFAULT); +} + +/** + * @tc.name: DecorationCreator009 + * @tc.desc: Verify DecorationCreator can create a decoration with only color property. + * @tc.type: FUNC + * @tc.require: AR000DAQU8 + * @tc.author: chenlien + */ +HWTEST_F(DecorationCreatorTest, DecorationCreator009, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of decoration with only color className. + */ + const std::string content = "" + "{ " + " \"className\": \"Decoration\", " + " \"color\": { " + " \"className\": \"Color\" " + " } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get decoration. + * @tc.expected: step2. decoration properties are set correctly. + */ + RefPtr decoration = CreateFromDsl(content); + ASSERT_TRUE(decoration->GetBackgroundColor() == Color::BLACK); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/dialog/BUILD.gn b/frameworks/core/components/test/unittest/dialog/BUILD.gn new file mode 100644 index 00000000..488b9a58 --- /dev/null +++ b/frameworks/core/components/test/unittest/dialog/BUILD.gn @@ -0,0 +1,145 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +if (is_standard_system) { + module_output_path = "ace_engine_standard/backenduicomponent/dialogandpopup" +} + +ohos_unittest("DialogCreatorTest") { + module_out_path = module_output_path + + sources = [ "dialog_creator_test.cpp" ] + + if (!is_wearable_product) { + sources += [ "popup_creator_test.cpp" ] + } + + configs = [ + ":config_json_creator_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "$ace_root/frameworks/core/components/test:json", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + deps += [ "$ace_root/frameworks/bridge:js_framework_ohos" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_json_creator_test") { + visibility = [ ":*" ] + include_dirs = [ + "//utils/native/base/include", + "$ace_root", + ] +} + +ohos_unittest("RenderDialogTest") { + module_out_path = module_output_path + + sources = [ + "$ace_root/frameworks/core/components/test/unittest/display/display_test_utils.cpp", + "dialog_test_utils.cpp", + "render_bubble_test.cpp", + "render_dialog_test.cpp", + ] + + configs = [ + ":config_render_dialog_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "$ace_root/frameworks/core/components/test:json", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + configs += [ "//third_party/curl:curl_config" ] + deps += [ + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/curl:curl", + ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_render_dialog_test") { + visibility = [ ":*" ] + include_dirs = [ + "//utils/native/base/include", + "$ace_root", + ] +} + +ohos_unittest("DialogComponentTest") { + module_out_path = module_output_path + + sources = [ "dialog_component_test.cpp" ] + + configs = [ + ":config_component_build_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "$ace_root/frameworks/core/components/test:json", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + deps += [ "$ace_root/frameworks/bridge:js_framework_ohos" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_component_build_test") { + visibility = [ ":*" ] + include_dirs = [ + "//utils/native/base/include", + "$ace_root", + ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ + ":DialogComponentTest", + ":DialogCreatorTest", + ":RenderDialogTest", + ] +} diff --git a/frameworks/core/components/test/unittest/dialog/dialog_component_test.cpp b/frameworks/core/components/test/unittest/dialog/dialog_component_test.cpp new file mode 100644 index 00000000..ee82b447 --- /dev/null +++ b/frameworks/core/components/test/unittest/dialog/dialog_component_test.cpp @@ -0,0 +1,519 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/geometry/dimension.h" +#include "base/utils/system_properties.h" +#include "core/components/dialog/dialog_component.h" +#include "core/components/dialog_tween/dialog_tween_component.h" +#include "core/components/flex/flex_component.h" +#include "core/components/flex/flex_item_component.h" +#include "core/components/focus_collaboration/focus_collaboration_component.h" +#include "core/components/focusable/focusable_component.h" +#include "core/components/padding/padding_component.h" +#include "core/components/scroll/scroll_component.h" +#include "core/components/text/text_component.h" +#include "core/components/transition/transition_component.h" +#include "core/components/wrap/wrap_component.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +const std::string TEXT_VALUE = "HelloWorld"; +const std::string TEXT_VALUE_DEFAULT = "HiAce"; +const Edge PADDING_VALUE = Edge(24.0, 24.0, 24.0, 0.0, DimensionUnit::VP); +const Edge PADDING_TITLE = Edge(Dimension(20.0, DimensionUnit::VP)); +const Edge PADDING_CONTENT = Edge(Dimension(10.0, DimensionUnit::VP)); +const Edge PADDING_DEFAULT = Edge(Dimension(24.0, DimensionUnit::VP)); +const Edge PADDING_ACTIONS = Edge(24.0, 18.0, 24.0, 10.0, DimensionUnit::VP); +const RefPtr THEME_MANAGER = AceType::MakeRefPtr(); + +} // namespace + +class DialogComponentTest : public testing::Test { +public: + static void SetUpTestCase() {} + static void TearDownTestCase() {} + void SetUp() {} + void TearDown() {} + +protected: + RefPtr BuildAndGetColumn(const RefPtr& dialog); + RefPtr BuildAndGetColumnForWatch(const RefPtr& dialog); + std::list> BuildActions(int32_t actionsCount); +}; + +RefPtr DialogComponentTest::BuildAndGetColumn(const RefPtr& dialog) +{ + auto boxComponent = AceType::MakeRefPtr(); + dialog->SetDeviceType(DeviceType::PHONE); + dialog->SetDialogTweenBox(boxComponent); + dialog->BuildChild(THEME_MANAGER); + auto dialogTween = AceType::DynamicCast(boxComponent->GetChild()); + EXPECT_TRUE(dialogTween); + auto transition = AceType::DynamicCast(dialogTween->GetChild()); + EXPECT_TRUE(transition); + auto box = AceType::DynamicCast(transition->GetChild()); + EXPECT_TRUE(box); + auto focusCollaboration = AceType::DynamicCast(box->GetChild()); + EXPECT_TRUE(focusCollaboration); + RefPtr column; + if (dialog->GetActions().empty()) { + auto focusable = AceType::DynamicCast(focusCollaboration->GetChildren().front()); + EXPECT_TRUE(focusable); + column = AceType::DynamicCast(focusable->GetChild()); + } else { + column = AceType::DynamicCast(focusCollaboration->GetChildren().front()); + } + return column; +} + +RefPtr DialogComponentTest::BuildAndGetColumnForWatch(const RefPtr& dialog) +{ + auto boxComponent = AceType::MakeRefPtr(); + dialog->SetDeviceType(DeviceType::WATCH); + dialog->SetDialogTweenBox(boxComponent); + dialog->BuildChild(THEME_MANAGER); + auto dialogTween = AceType::DynamicCast(boxComponent->GetChild()); + EXPECT_TRUE(dialogTween); + auto transition = AceType::DynamicCast(dialogTween->GetChild()); + EXPECT_TRUE(transition); + auto box = AceType::DynamicCast(transition->GetChild()); + EXPECT_TRUE(box); + auto scroll = AceType::DynamicCast(box->GetChild()); + EXPECT_TRUE(scroll); + auto focusCollaboration = AceType::DynamicCast(scroll->GetChild()); + EXPECT_TRUE(focusCollaboration); + RefPtr column; + if (dialog->GetActions().empty()) { + auto focusable = AceType::DynamicCast(focusCollaboration->GetChildren().front()); + EXPECT_TRUE(focusable); + column = AceType::DynamicCast(focusable->GetChild()); + } else { + column = AceType::DynamicCast(focusCollaboration->GetChildren().front()); + } + return column; +} + +std::list> DialogComponentTest::BuildActions(int32_t actionsCount) +{ + std::list> buttonChildren; + RefPtr text = AceType::MakeRefPtr("HiAce"); + buttonChildren.emplace_back(text); + RefPtr button = AceType::MakeRefPtr(buttonChildren); + std::list> actions; + for (int32_t i = 0; i < actionsCount; ++i) { + actions.emplace_back(button); + } + return actions; +} + +/** + * @tc.name: DialogComponentBuild001 + * @tc.desc: Verify the Build Interface of DialogComponent work correctly with title. + * @tc.type: FUNC + * @tc.require: AR000DAR2E + * @tc.author: caocan + */ +HWTEST_F(DialogComponentTest, DialogComponentBuild001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct DialogComponent with title. + */ + RefPtr dialog = AceType::MakeRefPtr(); + RefPtr text = AceType::MakeRefPtr("HiAce"); + dialog->SetTitle(text); + + /** + * @tc.steps: step2. call the Build interface of DialogComponent. + * @tc.expected: step2. child of DialogComponent is built correctly. + */ + RefPtr column = BuildAndGetColumn(dialog); + EXPECT_TRUE(column->GetChildren().size() == 1); + RefPtr flexItem = AceType::DynamicCast(column->GetChildren().front()); + EXPECT_TRUE(flexItem != nullptr); + RefPtr row = AceType::DynamicCast(flexItem->GetChild()); + EXPECT_TRUE(row != nullptr); + RefPtr padding = AceType::DynamicCast(row->GetChildren().front()); + EXPECT_TRUE(padding != nullptr); + RefPtr textComponent = AceType::DynamicCast(padding->GetChild()); + EXPECT_TRUE(textComponent != nullptr); + EXPECT_EQ(textComponent->GetData(), TEXT_VALUE_DEFAULT); +} + +/** + * @tc.name: DialogComponentBuild002 + * @tc.desc: Verify the Build Interface of DialogComponent work correctly with content. + * @tc.type: FUNC + * @tc.require: AR000DAR2E + * @tc.author: caocan + */ +HWTEST_F(DialogComponentTest, DialogComponentBuild002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct DialogComponent with content. + */ + RefPtr dialog = AceType::MakeRefPtr(); + RefPtr text = AceType::MakeRefPtr("HiAce"); + dialog->SetContent(text); + + /** + * @tc.steps: step2. call the Build interface of DialogComponent. + * @tc.expected: step2. child of DialogComponent is built correctly. + */ + RefPtr column = BuildAndGetColumn(dialog); + EXPECT_TRUE(column->GetChildren().size() == 1); + RefPtr flexItem = AceType::DynamicCast(column->GetChildren().front()); + EXPECT_TRUE(flexItem != nullptr); + RefPtr padding = AceType::DynamicCast(flexItem->GetChild()); + EXPECT_TRUE(padding != nullptr); + RefPtr scroll = AceType::DynamicCast(padding->GetChild()); + EXPECT_TRUE(scroll != nullptr); + RefPtr textComponent = AceType::DynamicCast(scroll->GetChild()); + EXPECT_TRUE(textComponent != nullptr); + EXPECT_EQ(textComponent->GetData(), TEXT_VALUE_DEFAULT); +} + +/** + * @tc.name: DialogComponentBuild003 + * @tc.desc: Verify the Build Interface of DialogComponent work correctly with actions. + * @tc.type: FUNC + * @tc.require: AR000DAR2E + * @tc.author: caocan + */ +HWTEST_F(DialogComponentTest, DialogComponentBuild003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct DialogComponent with actions. + */ + RefPtr dialog = AceType::MakeRefPtr(); + std::list> actions = BuildActions(1); + dialog->SetActions(actions); + + /** + * @tc.steps: step2. call the Build interface of DialogComponent. + * @tc.expected: step2. child of DialogComponent is built correctly. + */ + RefPtr column = BuildAndGetColumn(dialog); + EXPECT_TRUE(column->GetChildren().size() == 1); + RefPtr flexItem = AceType::DynamicCast(column->GetChildren().front()); + EXPECT_TRUE(flexItem != nullptr); + RefPtr padding = AceType::DynamicCast(flexItem->GetChild()); + EXPECT_TRUE(padding != nullptr); + RefPtr row = AceType::DynamicCast(padding->GetChild()); + EXPECT_TRUE(row != nullptr); + EXPECT_TRUE(row->GetChildren().size() == 1); +} + +/** + * @tc.name: DialogComponentBuild004 + * @tc.desc: Verify the Build Interface of DialogComponent work correctly with title and content. + * @tc.type: FUNC + * @tc.require: AR000DAR2E + * @tc.author: caocan + */ +HWTEST_F(DialogComponentTest, DialogComponentBuild004, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct DialogComponent with title and content. + */ + RefPtr dialog = AceType::MakeRefPtr(); + RefPtr title = AceType::MakeRefPtr("HiAce"); + dialog->SetTitle(title); + RefPtr content = AceType::MakeRefPtr("HelloWorld"); + dialog->SetContent(content); + + /** + * @tc.steps: step2. call the Build interface of DialogComponent. + * @tc.expected: step2. child of DialogComponent is built correctly. + */ + RefPtr column = BuildAndGetColumn(dialog); + EXPECT_TRUE(column->GetChildren().size() == 2); + RefPtr titleFlex = AceType::DynamicCast(column->GetChildren().front()); + EXPECT_TRUE(titleFlex != nullptr); + RefPtr row = AceType::DynamicCast(titleFlex->GetChild()); + EXPECT_TRUE(row != nullptr); + RefPtr titlePadding = AceType::DynamicCast(row->GetChildren().front()); + EXPECT_TRUE(titlePadding != nullptr); + RefPtr titleComponent = AceType::DynamicCast(titlePadding->GetChild()); + EXPECT_TRUE(titleComponent != nullptr); + EXPECT_EQ(titleComponent->GetData(), TEXT_VALUE_DEFAULT); + RefPtr contentFlex = AceType::DynamicCast(column->GetChildren().back()); + EXPECT_TRUE(contentFlex != nullptr); + RefPtr contentPadding = AceType::DynamicCast(contentFlex->GetChild()); + EXPECT_TRUE(contentPadding != nullptr); + RefPtr scroll = AceType::DynamicCast(contentPadding->GetChild()); + EXPECT_TRUE(scroll != nullptr); + RefPtr contentComponent = AceType::DynamicCast(scroll->GetChild()); + EXPECT_TRUE(contentComponent != nullptr); + EXPECT_EQ(contentComponent->GetData(), TEXT_VALUE); +} + +/** + * @tc.name: DialogComponentBuild005 + * @tc.desc: Verify the Build Interface of DialogComponent work correctly with title and actions. + * @tc.type: FUNC + * @tc.require: AR000DAR2E + * @tc.author: caocan + */ +HWTEST_F(DialogComponentTest, DialogComponentBuild005, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct DialogComponent with title and actions. + */ + RefPtr dialog = AceType::MakeRefPtr(); + RefPtr title = AceType::MakeRefPtr("HiAce"); + dialog->SetTitle(title); + std::list> actions = BuildActions(2); + dialog->SetActions(actions); + + /** + * @tc.steps: step2. call the Build interface of DialogComponent. + * @tc.expected: step2. child of DialogComponent is built correctly. + */ + RefPtr column = BuildAndGetColumn(dialog); + EXPECT_TRUE(column->GetChildren().size() == 2); + RefPtr titleFlex = AceType::DynamicCast(column->GetChildren().front()); + EXPECT_TRUE(titleFlex != nullptr); + RefPtr titleRow = AceType::DynamicCast(titleFlex->GetChild()); + EXPECT_TRUE(titleRow != nullptr); + RefPtr titlePadding = AceType::DynamicCast(titleRow->GetChildren().front()); + EXPECT_TRUE(titlePadding != nullptr); + RefPtr titleComponent = AceType::DynamicCast(titlePadding->GetChild()); + EXPECT_TRUE(titleComponent != nullptr); + EXPECT_EQ(titleComponent->GetData(), TEXT_VALUE_DEFAULT); + RefPtr actionsFlex = AceType::DynamicCast(column->GetChildren().back()); + EXPECT_TRUE(actionsFlex != nullptr); + RefPtr actionsPadding = AceType::DynamicCast(actionsFlex->GetChild()); + EXPECT_TRUE(actionsPadding != nullptr); + RefPtr row = AceType::DynamicCast(actionsPadding->GetChild()); + EXPECT_TRUE(row != nullptr); + EXPECT_TRUE(row->GetChildren().size() == 3); +} + +/** + * @tc.name: DialogComponentBuild006 + * @tc.desc: Verify the Build Interface of DialogComponent work correctly with content and actions. + * @tc.type: FUNC + * @tc.require: AR000DAR2E + * @tc.author: caocan + */ +HWTEST_F(DialogComponentTest, DialogComponentBuild006, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct DialogComponent with content and actions. + */ + RefPtr dialog = AceType::MakeRefPtr(); + RefPtr content = AceType::MakeRefPtr("HiAce"); + dialog->SetContent(content); + std::list> actions = BuildActions(3); + dialog->SetActions(actions); + + /** + * @tc.steps: step2. call the Build interface of DialogComponent. + * @tc.expected: step2. child of DialogComponent is built correctly. + */ + RefPtr column = BuildAndGetColumn(dialog); + EXPECT_TRUE(column->GetChildren().size() == 2); + RefPtr contentFlex = AceType::DynamicCast(column->GetChildren().front()); + EXPECT_TRUE(contentFlex != nullptr); + RefPtr contentPadding = AceType::DynamicCast(contentFlex->GetChild()); + EXPECT_TRUE(contentPadding != nullptr); + RefPtr scroll = AceType::DynamicCast(contentPadding->GetChild()); + EXPECT_TRUE(scroll != nullptr); + RefPtr contentComponent = AceType::DynamicCast(scroll->GetChild()); + EXPECT_TRUE(contentComponent != nullptr); + EXPECT_EQ(contentComponent->GetData(), TEXT_VALUE_DEFAULT); + RefPtr actionsFlex = AceType::DynamicCast(column->GetChildren().back()); + EXPECT_TRUE(actionsFlex != nullptr); + RefPtr actionsPadding = AceType::DynamicCast(actionsFlex->GetChild()); + EXPECT_TRUE(actionsPadding != nullptr); + RefPtr wrapActions = AceType::DynamicCast(actionsPadding->GetChild()); + EXPECT_TRUE(wrapActions != nullptr); + EXPECT_TRUE(wrapActions->GetChildren().size() == 3); +} + +/** + * @tc.name: DialogComponentBuild007 + * @tc.desc: Verify the Build Interface of DialogComponent work correctly with title, content and actions. + * @tc.type: FUNC + * @tc.require: AR000DAR2E + * @tc.author: caocan + */ +HWTEST_F(DialogComponentTest, DialogComponentBuild007, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct DialogComponent with title, content and actions. + */ + RefPtr dialog = AceType::MakeRefPtr(); + RefPtr title = AceType::MakeRefPtr("HiAce"); + dialog->SetTitle(title); + RefPtr content = AceType::MakeRefPtr("HelloWorld"); + dialog->SetContent(content); + std::list> actions = BuildActions(4); + dialog->SetActions(actions); + + /** + * @tc.steps: step2. call the Build interface of DialogComponent. + * @tc.expected: step2. child of DialogComponent is built correctly. + */ + RefPtr column = BuildAndGetColumn(dialog); + EXPECT_TRUE(column->GetChildren().size() == 3); + int32_t index = 0; + for (const auto& child : column->GetChildren()) { + ++index; + if (index == 1) { + RefPtr titleFlex = AceType::DynamicCast(child); + EXPECT_TRUE(titleFlex != nullptr); + RefPtr titleRow = AceType::DynamicCast(titleFlex->GetChild()); + EXPECT_TRUE(titleRow != nullptr); + RefPtr titlePadding = + AceType::DynamicCast(titleRow->GetChildren().front()); + EXPECT_TRUE(titlePadding != nullptr); + RefPtr text = AceType::DynamicCast(titlePadding->GetChild()); + EXPECT_TRUE(text != nullptr); + EXPECT_EQ(text->GetData(), TEXT_VALUE_DEFAULT); + } else if (index == 2) { + RefPtr contentFlex = AceType::DynamicCast(child); + EXPECT_TRUE(contentFlex != nullptr); + RefPtr contentPadding = AceType::DynamicCast(contentFlex->GetChild()); + EXPECT_TRUE(contentPadding != nullptr); + RefPtr contentScroll = AceType::DynamicCast(contentPadding->GetChild()); + EXPECT_TRUE(contentScroll != nullptr); + RefPtr text = AceType::DynamicCast(contentScroll->GetChild()); + EXPECT_TRUE(text != nullptr); + EXPECT_EQ(text->GetData(), TEXT_VALUE); + } else if (index == 3) { + RefPtr actionFlex = AceType::DynamicCast(child); + EXPECT_TRUE(actionFlex != nullptr); + RefPtr actionsPadding = AceType::DynamicCast(actionFlex->GetChild()); + EXPECT_TRUE(actionsPadding != nullptr); + RefPtr wrapColumn = AceType::DynamicCast(actionsPadding->GetChild()); + EXPECT_TRUE(wrapColumn != nullptr); + EXPECT_TRUE(wrapColumn->GetChildren().size() == 3); + } + } +} + +/** + * @tc.name: DialogComponentBuild008 + * @tc.desc: Verify the Build Interface of DialogComponent work correctly with + * title, titlePadding, content, contentPadding and actions. + * @tc.type: FUNC + * @tc.require: AR000DAR2E AR000DAR2F + * @tc.author: caocan + */ +HWTEST_F(DialogComponentTest, DialogComponentBuild008, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct DialogComponent with title, titlePadding, content, contentPadding and actions. + */ + RefPtr dialog = AceType::MakeRefPtr(); + RefPtr title = AceType::MakeRefPtr("HiAce"); + dialog->SetTitle(title); + dialog->SetTitlePadding(PADDING_TITLE); + RefPtr content = AceType::MakeRefPtr("HelloWorld"); + dialog->SetContent(content); + dialog->SetContentPadding(PADDING_CONTENT); + std::list> actions = BuildActions(2); + dialog->SetActions(actions); + + /** + * @tc.steps: step2. call the Build interface of DialogComponent. + * @tc.expected: step2. child of DialogComponent is built correctly. + */ + RefPtr column = BuildAndGetColumn(dialog); + EXPECT_TRUE(column->GetChildren().size() == 3); + int32_t index = 0; + for (auto child : column->GetChildren()) { + ++index; + if (index == 1) { + RefPtr titleFlex = AceType::DynamicCast(child); + EXPECT_TRUE(titleFlex != nullptr); + RefPtr titleRow = AceType::DynamicCast(titleFlex->GetChild()); + EXPECT_TRUE(titleRow != nullptr); + RefPtr titlePadding = + AceType::DynamicCast(titleRow->GetChildren().front()); + EXPECT_TRUE(titlePadding != nullptr); + RefPtr text = AceType::DynamicCast(titlePadding->GetChild()); + EXPECT_TRUE(text != nullptr); + EXPECT_EQ(text->GetData(), TEXT_VALUE_DEFAULT); + } else if (index == 2) { + RefPtr contentFlex = AceType::DynamicCast(child); + EXPECT_TRUE(contentFlex != nullptr); + RefPtr contentPadding = AceType::DynamicCast(contentFlex->GetChild()); + EXPECT_TRUE(contentPadding != nullptr); + RefPtr contentScroll = AceType::DynamicCast(contentPadding->GetChild()); + EXPECT_TRUE(contentScroll != nullptr); + RefPtr text = AceType::DynamicCast(contentScroll->GetChild()); + EXPECT_TRUE(text != nullptr); + EXPECT_EQ(text->GetData(), TEXT_VALUE); + } else if (index == 3) { + RefPtr actionsFlex = AceType::DynamicCast(child); + EXPECT_TRUE(actionsFlex != nullptr); + RefPtr actionsPadding = AceType::DynamicCast(actionsFlex->GetChild()); + EXPECT_TRUE(actionsPadding != nullptr); + RefPtr actionsRow = AceType::DynamicCast(actionsPadding->GetChild()); + EXPECT_TRUE(actionsRow != nullptr); + EXPECT_TRUE(actionsRow->GetChildren().size() == 3); + } + } +} + +/** + * @tc.name: DialogComponentBuild009 + * @tc.desc: Verify the Build Interface of DialogComponent work correctly with content and actions. + * @tc.type: FUNC + * @tc.require: AR000DAR2E AR000DAR2F + * @tc.author: caocan + */ +HWTEST_F(DialogComponentTest, DialogComponentBuild009, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct DialogComponent with content and actions. + */ + RefPtr dialog = AceType::MakeRefPtr(); + RefPtr content = AceType::MakeRefPtr("HiAce"); + dialog->SetContent(content); + std::list> actions = BuildActions(2); + dialog->SetActions(actions); + + /** + * @tc.steps: step2. call the Build interface of DialogComponent. + * @tc.expected: step2. child of DialogComponent is built correctly. + */ + RefPtr column = BuildAndGetColumnForWatch(dialog); + EXPECT_TRUE(column->GetChildren().size() == 2); + RefPtr contentFlex = AceType::DynamicCast(column->GetChildren().front()); + EXPECT_TRUE(contentFlex != nullptr); + RefPtr contentPadding = AceType::DynamicCast(contentFlex->GetChild()); + EXPECT_TRUE(contentPadding != nullptr); + RefPtr contentComponent = AceType::DynamicCast(contentPadding->GetChild()); + EXPECT_TRUE(contentComponent != nullptr); + EXPECT_EQ(contentComponent->GetData(), TEXT_VALUE_DEFAULT); + RefPtr actionsFlex = AceType::DynamicCast(column->GetChildren().back()); + EXPECT_TRUE(actionsFlex != nullptr); + RefPtr actionsPadding = AceType::DynamicCast(actionsFlex->GetChild()); + EXPECT_TRUE(actionsPadding != nullptr); + RefPtr rowComponent = AceType::DynamicCast(actionsPadding->GetChild()); + EXPECT_TRUE(rowComponent != nullptr); + EXPECT_TRUE(rowComponent->GetChildren().size() == 2); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/dialog/dialog_creator_test.cpp b/frameworks/core/components/test/unittest/dialog/dialog_creator_test.cpp new file mode 100644 index 00000000..fabef426 --- /dev/null +++ b/frameworks/core/components/test/unittest/dialog/dialog_creator_test.cpp @@ -0,0 +1,546 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/json/json_util.h" +#include "base/utils/utils.h" +#include "core/components/dialog/dialog_component.h" +#include "core/components/test/json/component_factory.h" +#include "core/components/text/text_component.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +const std::string TEXT_VALUE = "HiAce"; +const Edge DIALOG_EDGE = Edge(20); +const Color DIALOG_COLOR = Color(0xffff0000); +const Color DIALOG_COLOR_DEFAULT = Color(0xff000000); +const double BUTTON_SIZE_SMALL = 100.0; +const double BUTTON_SIZE_LARGE = 200.0; + +} // namespace + +class DialogCreatorTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); +}; + +void DialogCreatorTest::SetUpTestCase() {} +void DialogCreatorTest::TearDownTestCase() {} +void DialogCreatorTest::SetUp() {} +void DialogCreatorTest::TearDown() {} + +/** + * @tc.name: DialogCreator001 + * @tc.desc: Verify DialogCreator can create dialog component with content. + * @tc.type: FUNC + * @tc.require: AR000DAR2E + * @tc.author: caocan + */ +HWTEST_F(DialogCreatorTest, DialogCreator001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of dialog component with content. + */ + const std::string json = "" + "{ " + " \"className\": \"Dialog\", " + " \"content\": { " + " \"className\": \"Text\", " + " \"value\": \"HiAce\" " + " } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get dialog component. + * @tc.expected: step2. content is set correctly, other properties are set as default. + */ + const auto dslBuf = reinterpret_cast(json.c_str()); + size_t dslLen = json.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component); + RefPtr dialog = AceType::DynamicCast(component); + ASSERT_TRUE(dialog); + RefPtr text = AceType::DynamicCast(dialog->GetContent()); + ASSERT_TRUE(text); + EXPECT_EQ(text->GetData(), TEXT_VALUE); + ASSERT_TRUE(dialog->GetTitle()); + EXPECT_EQ(dialog->GetTitle()->GetData(), ""); + EXPECT_EQ(dialog->GetTitlePadding(), Edge::NONE); + EXPECT_EQ(dialog->GetContentPadding(), Edge::NONE); + EXPECT_TRUE(dialog->GetAutoCancel()); + EXPECT_EQ(dialog->GetBackgroundColor(), DIALOG_COLOR_DEFAULT); +} + +/** + * @tc.name: DialogCreator002 + * @tc.desc: Verify DialogCreator can create dialog component with wrong content type. + * @tc.type: FUNC + * @tc.require: AR000DAR2E + * @tc.author: caocan + */ +HWTEST_F(DialogCreatorTest, DialogCreator002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of dialog component with wrong content type. + */ + const std::string json = "" + "{ " + " \"className\": \"Dialog\", " + " \"content\": { " + " \"className\": \"Image\" " + " } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get dialog component. + * @tc.expected: step2. content is null. + */ + const auto dslBuf = reinterpret_cast(json.c_str()); + size_t dslLen = json.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component); + RefPtr dialog = AceType::DynamicCast(component); + ASSERT_TRUE(dialog); + ASSERT_TRUE(dialog->GetContent()); + EXPECT_EQ(dialog->GetContent()->GetData(), ""); +} + +/** + * @tc.name: DialogCreator003 + * @tc.desc: Verify DialogCreator can create dialog component with title. + * @tc.type: FUNC + * @tc.require: AR000DAR2E + * @tc.author: caocan + */ +HWTEST_F(DialogCreatorTest, DialogCreator003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of dialog component with title. + */ + const std::string json = "" + "{ " + " \"className\": \"Dialog\", " + " \"title\": { " + " \"className\": \"Text\", " + " \"value\": \"HiAce\" " + " } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get dialog component. + * @tc.expected: step2. Set title correctly. + */ + const auto dslBuf = reinterpret_cast(json.c_str()); + size_t dslLen = json.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component); + RefPtr dialog = AceType::DynamicCast(component); + ASSERT_TRUE(dialog); + RefPtr text = AceType::DynamicCast(dialog->GetTitle()); + ASSERT_TRUE(text); + EXPECT_EQ(text->GetData(), TEXT_VALUE); +} + +/** + * @tc.name: DialogCreator004 + * @tc.desc: Verify DialogCreator can create dialog component with wrong title type. + * @tc.type: FUNC + * @tc.require: AR000DAR2E + * @tc.author: caocan + */ +HWTEST_F(DialogCreatorTest, DialogCreator004, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of dialog component with wrong title type. + */ + const std::string json = "" + "{ " + " \"className\": \"Dialog\", " + " \"title\": { " + " \"className\": \"Image\" " + " } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get dialog component. + * @tc.expected: step2. title is null. + */ + const auto dslBuf = reinterpret_cast(json.c_str()); + size_t dslLen = json.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component); + RefPtr dialog = AceType::DynamicCast(component); + ASSERT_TRUE(dialog); + ASSERT_TRUE(dialog->GetTitle()); + EXPECT_EQ(dialog->GetTitle()->GetData(), ""); +} + +/** + * @tc.name: DialogCreator005 + * @tc.desc: Verify DialogCreator can create dialog component with contentPadding. + * @tc.type: FUNC + * @tc.require: AR000DAR2F + * @tc.author: caocan + */ +HWTEST_F(DialogCreatorTest, DialogCreator005, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of dialog component with contentPadding. + */ + const std::string json = "" + "{ " + " \"className\": \"Dialog\", " + " \"contentPadding\": { " + " \"className\": \"Edge\", " + " \"value\": 20 " + " } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get dialog component. + * @tc.expected: step2. Set contentPadding correctly. + */ + const auto dslBuf = reinterpret_cast(json.c_str()); + size_t dslLen = json.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component); + RefPtr dialog = AceType::DynamicCast(component); + ASSERT_TRUE(dialog); + EXPECT_EQ(dialog->GetContentPadding(), DIALOG_EDGE); +} + +/** + * @tc.name: DialogCreator006 + * @tc.desc: Verify DialogCreator can create dialog component with wrong title type. + * @tc.type: FUNC + * @tc.require: AR000DAR2F + * @tc.author: caocan + */ +HWTEST_F(DialogCreatorTest, DialogCreator006, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of dialog component with wrong title type. + */ + const std::string json = "" + "{ " + " \"className\": \"Dialog\", " + " \"contentPadding\": { " + " \"className\": \"Text\", " + " \"value\": \"HiAce\" " + " } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get dialog component. + * @tc.expected: step2. Set contentPadding as default. + */ + const auto dslBuf = reinterpret_cast(json.c_str()); + size_t dslLen = json.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component); + RefPtr dialog = AceType::DynamicCast(component); + ASSERT_TRUE(dialog); + EXPECT_EQ(dialog->GetContentPadding(), Edge::NONE); +} + +/** + * @tc.name: DialogCreator007 + * @tc.desc: Verify DialogCreator can create dialog component with titlePadding. + * @tc.type: FUNC + * @tc.require: AR000DAR2F + * @tc.author: caocan + */ +HWTEST_F(DialogCreatorTest, DialogCreator007, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of dialog component with titlePadding. + */ + const std::string json = "" + "{ " + " \"className\": \"Dialog\", " + " \"titlePadding\": { " + " \"className\": \"Edge\", " + " \"value\": 20 " + " } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get dialog component. + * @tc.expected: step2. Set titlePadding correctly. + */ + const auto dslBuf = reinterpret_cast(json.c_str()); + size_t dslLen = json.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component); + RefPtr dialog = AceType::DynamicCast(component); + ASSERT_TRUE(dialog); + EXPECT_EQ(dialog->GetTitlePadding(), DIALOG_EDGE); +} + +/** + * @tc.name: DialogCreator008 + * @tc.desc: Verify DialogCreator can create dialog component with wrong titlePadding type. + * @tc.type: FUNC + * @tc.require: AR000DAR2F + * @tc.author: caocan + */ +HWTEST_F(DialogCreatorTest, DialogCreator008, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of dialog component with wrong titlePadding type. + */ + const std::string json = "" + "{ " + " \"className\": \"Dialog\", " + " \"titlePadding\": { " + " \"className\": \"Text\", " + " \"value\": \"HiAce\" " + " } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get dialog component. + * @tc.expected: step2. Set titlePadding as default. + */ + const auto dslBuf = reinterpret_cast(json.c_str()); + size_t dslLen = json.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component); + RefPtr dialog = AceType::DynamicCast(component); + ASSERT_TRUE(dialog); + EXPECT_EQ(dialog->GetTitlePadding(), Edge::NONE); +} + +/** + * @tc.name: DialogCreator009 + * @tc.desc: Verify DialogCreator can create dialog component with autoCancel. + * @tc.type: FUNC + * @tc.require: AR000DAR2E + * @tc.author: caocan + */ +HWTEST_F(DialogCreatorTest, DialogCreator009, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of dialog component with autoCancel. + */ + const std::string json = "" + "{ " + " \"className\": \"Dialog\", " + " \"autoCancel\": false " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get dialog component. + * @tc.expected: step2. Set autoCancel correctly. + */ + const auto dslBuf = reinterpret_cast(json.c_str()); + size_t dslLen = json.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component); + RefPtr dialog = AceType::DynamicCast(component); + ASSERT_TRUE(dialog); + EXPECT_TRUE(!dialog->GetAutoCancel()); +} + +/** + * @tc.name: DialogCreator010 + * @tc.desc: Verify DialogCreator can create dialog component with wrong autoCancel type. + * @tc.type: FUNC + * @tc.require: AR000DAR2E + * @tc.author: caocan + */ +HWTEST_F(DialogCreatorTest, DialogCreator010, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of dialog component with wrong autoCancel type. + */ + const std::string json = "" + "{ " + " \"className\": \"Dialog\", " + " \"autoCancel\": \"default\" " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get dialog component. + * @tc.expected: step2. Set autoCancel as default. + */ + const auto dslBuf = reinterpret_cast(json.c_str()); + size_t dslLen = json.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component); + RefPtr dialog = AceType::DynamicCast(component); + ASSERT_TRUE(dialog); + EXPECT_TRUE(dialog->GetAutoCancel()); +} + +/** + * @tc.name: DialogCreator011 + * @tc.desc: Verify DialogCreator can create dialog component with backgroundColor. + * @tc.type: FUNC + * @tc.require: AR000DAR2F + * @tc.author: caocan + */ +HWTEST_F(DialogCreatorTest, DialogCreator011, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of dialog component with backgroundColor. + */ + const std::string json = "" + "{ " + " \"className\": \"Dialog\", " + " \"backgroundColor\": { " + " \"className\": \"Color\", " + " \"alpha\": 255, " + " \"red\": 255 " + " } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get dialog component. + * @tc.expected: step2. Set backgroundColor correctly. + */ + const auto dslBuf = reinterpret_cast(json.c_str()); + size_t dslLen = json.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component); + RefPtr dialog = AceType::DynamicCast(component); + ASSERT_TRUE(dialog); + EXPECT_EQ(dialog->GetBackgroundColor(), DIALOG_COLOR); +} + +/** + * @tc.name: DialogCreator012 + * @tc.desc: Verify DialogCreator can create dialog component with wrong backgroundColor type. + * @tc.type: FUNC + * @tc.require: AR000DAR2F + * @tc.author: caocan + */ +HWTEST_F(DialogCreatorTest, DialogCreator012, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of dialog component with wrong backgroundColor type. + */ + const std::string json = "" + "{ " + " \"className\": \"Dialog\", " + " \"backgroundColor\": { " + " \"className\": \"Text\", " + " \"value\": \"HiAce\" " + " } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get dialog component. + * @tc.expected: step2. Set backgroundColor as default. + */ + const auto dslBuf = reinterpret_cast(json.c_str()); + size_t dslLen = json.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component); + RefPtr dialog = AceType::DynamicCast(component); + ASSERT_TRUE(dialog); + EXPECT_EQ(dialog->GetBackgroundColor(), DIALOG_COLOR_DEFAULT); +} + +/** + * @tc.name: DialogCreator013 + * @tc.desc: Verify DialogCreator can create dialog component with actions. + * @tc.type: FUNC + * @tc.require: AR000DAR2E + * @tc.author: caocan + */ +HWTEST_F(DialogCreatorTest, DialogCreator013, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of dialog component with actions. + */ + const std::string json = "" + "{ " + " \"className\": \"Dialog\", " + " \"actions\": [ " + " { " + " \"className\": \"Button\", " + " \"width\": 100, " + " \"height\": 100 " + " },{ " + " \"className\": \"Button\", " + " \"width\": 200, " + " \"height\": 200 " + " } " + " ] " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get dialog component. + * @tc.expected: step2. Set actions correctly. + */ + const auto dslBuf = reinterpret_cast(json.c_str()); + size_t dslLen = json.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component); + RefPtr dialog = AceType::DynamicCast(component); + ASSERT_TRUE(dialog); + EXPECT_TRUE(dialog->GetActions().size() == 2); + EXPECT_TRUE(dialog->GetActions().front()->GetWidth() == Dimension(BUTTON_SIZE_SMALL)); + EXPECT_TRUE(dialog->GetActions().front()->GetHeight() == Dimension(BUTTON_SIZE_SMALL)); + EXPECT_TRUE(dialog->GetActions().back()->GetWidth() == Dimension(BUTTON_SIZE_LARGE)); + EXPECT_TRUE(dialog->GetActions().back()->GetHeight() == Dimension(BUTTON_SIZE_LARGE)); +} + +/** + * @tc.name: DialogCreator014 + * @tc.desc: Verify DialogCreator can create dialog component with wrong action type. + * @tc.type: FUNC + * @tc.require: AR000DAR2E + * @tc.author: caocan + */ +HWTEST_F(DialogCreatorTest, DialogCreator014, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of dialog component with wrong action type. + */ + const std::string json = "" + "{ " + " \"className\": \"Dialog\", " + " \"actions\": [ " + " { " + " \"className\": \"Text\", " + " \"value\": \"HiAce\" " + " } " + " ] " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get dialog component. + * @tc.expected: step2. actions is empty. + */ + const auto dslBuf = reinterpret_cast(json.c_str()); + size_t dslLen = json.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component); + RefPtr dialog = AceType::DynamicCast(component); + ASSERT_TRUE(dialog); + EXPECT_TRUE(dialog->GetActions().empty()); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/dialog/dialog_test_utils.cpp b/frameworks/core/components/test/unittest/dialog/dialog_test_utils.cpp new file mode 100644 index 00000000..f567152a --- /dev/null +++ b/frameworks/core/components/test/unittest/dialog/dialog_test_utils.cpp @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/unittest/dialog/dialog_test_utils.h" + +#include "core/components/box/box_component.h" +#include "core/components/text/text_component.h" + +namespace OHOS::Ace { + +RefPtr DialogTestUtils::CreateRenderBubble( + const Placement placement, const Offset& offset, const Size& size) +{ + RefPtr renderBubble = AceType::MakeRefPtr(); + RefPtr text = AceType::MakeRefPtr("HiAce"); + RefPtr bubbleComponent = AceType::MakeRefPtr(text); + renderBubble->Update(bubbleComponent); + renderBubble->SetTargetOffset(offset); + renderBubble->SetTargetSize(size); + renderBubble->SetPlacement(placement); + return renderBubble; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/dialog/dialog_test_utils.h b/frameworks/core/components/test/unittest/dialog/dialog_test_utils.h new file mode 100644 index 00000000..787a4faa --- /dev/null +++ b/frameworks/core/components/test/unittest/dialog/dialog_test_utils.h @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_DIALOG_DIALOG_TEST_UTILS_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_DIALOG_DIALOG_TEST_UTILS_H + +#include "core/components/bubble/render_bubble.h" +#include "core/components/dialog_tween/render_dialog_tween.h" +#include "core/components/popup/popup_component.h" + +namespace OHOS::Ace { + +class MockRenderDialogTween final : public RenderDialogTween { + DECLARE_ACE_TYPE(MockRenderDialogTween, RenderDialogTween); + +public: + MockRenderDialogTween() = default; + ~MockRenderDialogTween() override = default; + + bool GetAutoCancel() const + { + return autoCancel_; + } +}; + +class MockRenderBubble final : public RenderBubble { + DECLARE_ACE_TYPE(MockRenderBubble, RenderBubble); + +public: + MockRenderBubble() = default; + ~MockRenderBubble() override = default; + + Placement GetPlacement() const + { + return placement_; + } + + void SetPlacement(Placement placement) + { + placement_ = placement; + } + + Color GetMaskColor() const + { + return maskColor_; + } + + Offset GetOffset() const + { + return targetOffset_; + } + + void SetTargetOffset(const Offset& targetOffset) + { + targetOffset_ = targetOffset; + } + + Size GetSize() const + { + return targetSize_; + } + + void SetTargetSize(const Size& targetSize) + { + targetSize_ = targetSize; + } +}; + +class DialogTestUtils { +public: + static RefPtr CreateRenderBubble(const Placement placement, + const Offset& offset, const Size& size); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_DIALOG_DIALOG_TEST_UTILS_H diff --git a/frameworks/core/components/test/unittest/dialog/popup_creator_test.cpp b/frameworks/core/components/test/unittest/dialog/popup_creator_test.cpp new file mode 100644 index 00000000..beef79d3 --- /dev/null +++ b/frameworks/core/components/test/unittest/dialog/popup_creator_test.cpp @@ -0,0 +1,163 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/json/json_util.h" +#include "base/utils/utils.h" +#include "core/components/popup/popup_component.h" +#include "core/components/test/json/component_factory.h" +#include "core/components/text/text_component.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +const Placement PLACEMENT_VALUE = Placement::LEFT; +const Placement PLACEMENT_DEFAULT = Placement::BOTTOM; +const Color MASK_COLOR_VALUE = Color(255); +const Color MASK_COLOR_DEFAULT = Color(0xff000000); +const std::string ON_VISIBILITY_CHANGE = "testCallback"; +const std::string TEXT_VALUE_DEFAULT = "HiAce"; +const std::string TEXT_VALUE = "Hello World"; + +} // namespace + +class PopupCreatorTest : public testing::Test { +public: + static void SetUpTestCase() {}; + static void TearDownTestCase() {}; + void SetUp() {}; + void TearDown() {}; +}; + +/** + * @tc.name: PopupCreator001 + * @tc.desc: Verify PopupCreator can create popup component with all properties. + * @tc.type: FUNC + * @tc.require: AR000DBAOV AR000DBAP0 AR000DBAP1 AR000DBAP2 + * @tc.author: caocan + */ +HWTEST_F(PopupCreatorTest, PopupCreator001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of popup component with all properties. + */ + const std::string json = "" + "{ " + " \"className\": \"Popup\", " + " \"id\": \"1\", " + " \"name\": \"popup\", " + " \"placement\": \"left\", " + " \"maskColor\": { " + " \"className\": \"Color\", " + " \"value\": 255 " + " }, " + " \"onVisibilityChange\": \"testCallback\", " + " \"child\": { " + " \"className\": \"Text\", " + " \"value\": \"HiAce\" " + " } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get popup component. + * @tc.expected: step2. Set all properties correctly. + */ + const auto dslBuf = reinterpret_cast(json.c_str()); + size_t dslLen = json.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component); + RefPtr popup = AceType::DynamicCast(component); + ASSERT_TRUE(popup); + EXPECT_EQ(popup->GetPopupParam()->GetPlacement(), PLACEMENT_VALUE); + EXPECT_EQ(popup->GetPopupParam()->GetMaskColor(), MASK_COLOR_VALUE); + EXPECT_EQ(popup->GetPopupParam()->GetOnVisibilityChange(), ON_VISIBILITY_CHANGE); + RefPtr child = AceType::DynamicCast(popup->GetChild()); + ASSERT_TRUE(child); + EXPECT_EQ(child->GetData(), TEXT_VALUE_DEFAULT); +} + +/** + * @tc.name: PopupCreator002 + * @tc.desc: Verify PopupCreator can handle exception with className only. + * @tc.type: FUNC + * @tc.require: AR000DBAOV + * @tc.author: caocan + */ +HWTEST_F(PopupCreatorTest, PopupCreator002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of popup component with className only. + */ + const std::string json = "" + "{ " + " \"className\": \"Popup\" " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get popup component. + * @tc.expected: step2. popup is null. + */ + const auto dslBuf = reinterpret_cast(json.c_str()); + size_t dslLen = json.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + EXPECT_TRUE(!component); +} + +/** + * @tc.name: PopupCreator003 + * @tc.desc: Verify PopupCreator can create popup component with child property only. + * @tc.type: FUNC + * @tc.require: AR000DBAOV AR000DBAP0 AR000DBAP1 AR000DBAP2 + * @tc.author: caocan + */ +HWTEST_F(PopupCreatorTest, PopupCreator003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of popup component with child property only. + */ + const std::string json = "" + "{ " + " \"className\": \"Popup\", " + " \"id\": \"1\", " + " \"name\": \"popup\", " + " \"placement\": \"default\", " + " \"maskColor\": 10, " + " \"onVisibilityChange\": 10, " + " \"child\": { " + " \"className\": \"Text\", " + " \"value\": \"HiAce\" " + " } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get popup component. + * @tc.expected: step2. properties are set as default. + */ + const auto dslBuf = reinterpret_cast(json.c_str()); + size_t dslLen = json.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component); + RefPtr popup = AceType::DynamicCast(component); + ASSERT_TRUE(popup); + EXPECT_EQ(popup->GetPopupParam()->GetPlacement(), PLACEMENT_DEFAULT); + EXPECT_EQ(popup->GetPopupParam()->GetMaskColor(), MASK_COLOR_DEFAULT); + EXPECT_EQ(popup->GetPopupParam()->GetOnVisibilityChange(), ""); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/dialog/render_bubble_test.cpp b/frameworks/core/components/test/unittest/dialog/render_bubble_test.cpp new file mode 100644 index 00000000..6c8604b4 --- /dev/null +++ b/frameworks/core/components/test/unittest/dialog/render_bubble_test.cpp @@ -0,0 +1,493 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/log/log.h" +#include "base/utils/utils.h" + +#define protected public +#include "core/components/bubble/bubble_component.h" +#undef protected + +#include "core/components/test/unittest/dialog/dialog_test_utils.h" +#include "core/components/test/unittest/display/display_test_utils.h" +#include "core/components/text/text_component.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +const Placement BUBBLE_PLACEMENT_VALUE = Placement::LEFT; +const Color BUBBLE_MASK_COLOR_VALUE = Color(0xffff0000); +const std::string ON_VISIBILITY_CHANGE = "testCallback"; +const std::string TEXT_VALUE = "HiAce"; +const double BOX_SIZE_MIN = 100; +const double BOX_SIZE_MAX = 400; +const Size LAYOUT_SIZE = Size(100, 100); +const Size LAYOUT_SIZE_MAX = Size(400, 400); +const Offset POSITION_VALUE_LEFT = Offset(92, 250); +const Offset POSITION_VALUE_RIGHT = Offset(408, 250); +const Offset POSITION_VALUE_TOP = Offset(250, 84); +const Offset POSITION_VALUE_BOTTOM = Offset(250, 416); +const Offset POSITION_VALUE_TOP_LEFT = Offset(100, 100); +const Offset POSITION_VALUE_TOP_RIGHT = Offset(400, 100); +const Offset POSITION_VALUE_BOTTOM_LEFT = Offset(100, 400); +const Offset POSITION_VALUE_BOTTOM_RIGHT = Offset(400, 400); +const Offset POSITION_VALUE_DEFAULT = Offset(200, 200); +const Offset POSITION_BOTTOM_ERROR_LEFT = Offset(300, 516); +const Offset POSITION_BOTTOM_ERROR_RIGHT = Offset(674, 416); +const Offset POSITION_ERROR_FULLSCREEN = Offset(-208, 1000); + +} // namespace + +class RenderBubbleTest : public testing::Test { +public: + static void SetUpTestCase() {} + static void TearDownTestCase() {} + void SetUp() {} + void TearDown() {} +}; + +/** + * @tc.name: RenderBubbleUpdate001 + * @tc.desc: Verify the Update Interface of RenderBubble work correctly with bubble component. + * @tc.type: FUNC + * @tc.require: AR000DBAOV AR000DBAP0 AR000DBAP1 AR000DBAP2 + * @tc.author: caocan + */ +HWTEST_F(RenderBubbleTest, RenderBubbleUpdate001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct BubbleComponent and RenderBubble. + */ + RefPtr text = AceType::MakeRefPtr("HiAce"); + RefPtr bubble = AceType::MakeRefPtr(text); + auto popupParam = AceType::MakeRefPtr(); + popupParam->SetPlacement(Placement::LEFT); + popupParam->SetMaskColor(Color(0xffff0000)); + bubble->SetPopupParam(popupParam); + RefPtr renderBubble = AceType::MakeRefPtr(); + + /** + * @tc.steps: step2. call the Update interface of RenderBubble. + * @tc.expected: step2. renderBubble is set as needLayout, properties are set correctly. + */ + renderBubble->Update(bubble); + EXPECT_TRUE(renderBubble->NeedLayout()); + EXPECT_EQ(renderBubble->GetPlacement(), BUBBLE_PLACEMENT_VALUE); + EXPECT_EQ(renderBubble->GetMaskColor(), BUBBLE_MASK_COLOR_VALUE); +} + +/** + * @tc.name: RenderBubbleUpdate002 + * @tc.desc: Verify the Update Interface of RenderBubble work correctly with wrong component type. + * @tc.type: FUNC + * @tc.require: AR000DBAOV AR000DBAP0 AR000DBAP1 AR000DBAP2 + * @tc.author: caocan + */ +HWTEST_F(RenderBubbleTest, RenderBubbleUpdate002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct TextComponent and RenderBubble. + */ + RefPtr text = AceType::MakeRefPtr("HiAce"); + RefPtr renderBubble = AceType::MakeRefPtr(); + + /** + * @tc.steps: step2. call the Update interface of RenderBubble. + * @tc.expected: step2. renderBubble is set as not needLayout. + */ + renderBubble->Update(text); + EXPECT_TRUE(!renderBubble->NeedLayout()); +} + +/** + * @tc.name: RenderBubblePerformLayout001 + * @tc.desc: Verify PerformLayout interface of RenderBubble works correctly with left placement. + * @tc.type: FUNC + * @tc.require: AR000DBAP1 + * @tc.author: caocan + */ +HWTEST_F(RenderBubbleTest, RenderBubblePerformLayout001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct RenderBubble and RenderBox. + */ + auto mockContext = DisplayTestUtils::GetMockContext(); + RefPtr root = DisplayTestUtils::CreateRenderRoot(); + RefPtr bubble = + DialogTestUtils::CreateRenderBubble(Placement::LEFT, Offset(200, 200), Size(200, 200)); + bubble->Attach(mockContext); + RefPtr box = DisplayTestUtils::CreateRenderBox(BOX_SIZE_MIN, BOX_SIZE_MIN); + box->Attach(mockContext); + bubble->AddChild(box); + root->AddChild(bubble); + + /** + * @tc.steps: step2. call the PerformLayout interface of RenderRoot. + * @tc.expected: step2. layoutSize and position of child is correct. + */ + root->PerformLayout(); + ASSERT_TRUE(!(bubble->GetChildren().empty())); + const auto child = bubble->GetChildren().front(); + ASSERT_TRUE(child != nullptr); + EXPECT_EQ(child->GetLayoutSize(), LAYOUT_SIZE); + EXPECT_EQ(child->GetPosition(), POSITION_VALUE_LEFT); +} + +/** + * @tc.name: RenderBubblePerformLayout002 + * @tc.desc: Verify PerformLayout interface of RenderBubble works correctly with right placement. + * @tc.type: FUNC + * @tc.require: AR000DBAP1 + * @tc.author: caocan + */ +HWTEST_F(RenderBubbleTest, RenderBubblePerformLayout002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct RenderBubble and RenderBox. + */ + auto mockContext = DisplayTestUtils::GetMockContext(); + RefPtr root = DisplayTestUtils::CreateRenderRoot(); + RefPtr bubble = + DialogTestUtils::CreateRenderBubble(Placement::RIGHT, Offset(200, 200), Size(200, 200)); + bubble->Attach(mockContext); + RefPtr box = DisplayTestUtils::CreateRenderBox(BOX_SIZE_MIN, BOX_SIZE_MIN); + box->Attach(mockContext); + bubble->AddChild(box); + root->AddChild(bubble); + + /** + * @tc.steps: step2. call the PerformLayout interface of RenderRoot. + * @tc.expected: step2. layoutSize and position of child is correct. + */ + root->PerformLayout(); + ASSERT_TRUE(!(bubble->GetChildren().empty())); + const auto child = bubble->GetChildren().front(); + ASSERT_TRUE(child != nullptr); + EXPECT_EQ(child->GetLayoutSize(), LAYOUT_SIZE); + EXPECT_EQ(child->GetPosition(), POSITION_VALUE_RIGHT); +} + +/** + * @tc.name: RenderBubblePerformLayout003 + * @tc.desc: Verify PerformLayout interface of RenderBubble works correctly with top placement. + * @tc.type: FUNC + * @tc.require: AR000DBAP1 + * @tc.author: caocan + */ +HWTEST_F(RenderBubbleTest, RenderBubblePerformLayout003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct RenderBubble and RenderBox. + */ + auto mockContext = DisplayTestUtils::GetMockContext(); + RefPtr root = DisplayTestUtils::CreateRenderRoot(); + RefPtr bubble = + DialogTestUtils::CreateRenderBubble(Placement::TOP, Offset(200, 200), Size(200, 200)); + bubble->Attach(mockContext); + RefPtr box = DisplayTestUtils::CreateRenderBox(BOX_SIZE_MIN, BOX_SIZE_MIN); + box->Attach(mockContext); + bubble->AddChild(box); + root->AddChild(bubble); + + /** + * @tc.steps: step2. call the PerformLayout interface of RenderRoot. + * @tc.expected: step2. layoutSize and position of child is correct. + */ + root->PerformLayout(); + ASSERT_TRUE(!(bubble->GetChildren().empty())); + const auto child = bubble->GetChildren().front(); + ASSERT_TRUE(child != nullptr); + EXPECT_EQ(child->GetLayoutSize(), LAYOUT_SIZE); + EXPECT_EQ(child->GetPosition(), POSITION_VALUE_TOP); +} + +/** + * @tc.name: RenderBubblePerformLayout004 + * @tc.desc: Verify PerformLayout interface of RenderBubble works correctly with bottom placement. + * @tc.type: FUNC + * @tc.require: AR000DBAP1 + * @tc.author: caocan + */ +HWTEST_F(RenderBubbleTest, RenderBubblePerformLayout004, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct RenderBubble and RenderBox. + */ + auto mockContext = DisplayTestUtils::GetMockContext(); + RefPtr root = DisplayTestUtils::CreateRenderRoot(); + RefPtr bubble = + DialogTestUtils::CreateRenderBubble(Placement::BOTTOM, Offset(200, 200), Size(200, 200)); + bubble->Attach(mockContext); + RefPtr box = DisplayTestUtils::CreateRenderBox(BOX_SIZE_MIN, BOX_SIZE_MIN); + box->Attach(mockContext); + bubble->AddChild(box); + root->AddChild(bubble); + + /** + * @tc.steps: step2. call the PerformLayout interface of RenderRoot. + * @tc.expected: step2. layoutSize and position of child is correct. + */ + root->PerformLayout(); + ASSERT_TRUE(!(bubble->GetChildren().empty())); + const auto child = bubble->GetChildren().front(); + ASSERT_TRUE(child != nullptr); + EXPECT_EQ(child->GetLayoutSize(), LAYOUT_SIZE); + EXPECT_EQ(child->GetPosition(), POSITION_VALUE_BOTTOM); +} + +/** + * @tc.name: RenderBubblePerformLayout005 + * @tc.desc: Verify PerformLayout interface of RenderBubble works correctly with topLeft placement. + * @tc.type: FUNC + * @tc.require: AR000DBAP1 + * @tc.author: caocan + */ +HWTEST_F(RenderBubbleTest, RenderBubblePerformLayout005, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct RenderBubble and RenderBox. + */ + auto mockContext = DisplayTestUtils::GetMockContext(); + RefPtr root = DisplayTestUtils::CreateRenderRoot(); + RefPtr bubble = + DialogTestUtils::CreateRenderBubble(Placement::TOP_LEFT, Offset(200, 200), Size(200, 200)); + bubble->Attach(mockContext); + RefPtr box = DisplayTestUtils::CreateRenderBox(BOX_SIZE_MIN, BOX_SIZE_MIN); + box->Attach(mockContext); + bubble->AddChild(box); + root->AddChild(bubble); + + /** + * @tc.steps: step2. call the PerformLayout interface of RenderRoot. + * @tc.expected: step2. layoutSize and position of child is correct. + */ + root->PerformLayout(); + ASSERT_TRUE(!(bubble->GetChildren().empty())); + const auto child = bubble->GetChildren().front(); + ASSERT_TRUE(child != nullptr); + EXPECT_EQ(child->GetLayoutSize(), LAYOUT_SIZE); + EXPECT_EQ(child->GetPosition(), POSITION_VALUE_TOP_LEFT); +} + +/** + * @tc.name: RenderBubblePerformLayout006 + * @tc.desc: Verify PerformLayout interface of RenderBubble works correctly with topRight placement. + * @tc.type: FUNC + * @tc.require: AR000DBAP1 + * @tc.author: caocan + */ +HWTEST_F(RenderBubbleTest, RenderBubblePerformLayout006, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct RenderBubble and RenderBox. + */ + auto mockContext = DisplayTestUtils::GetMockContext(); + RefPtr root = DisplayTestUtils::CreateRenderRoot(); + RefPtr bubble = + DialogTestUtils::CreateRenderBubble(Placement::TOP_RIGHT, Offset(200, 200), Size(200, 200)); + bubble->Attach(mockContext); + RefPtr box = DisplayTestUtils::CreateRenderBox(BOX_SIZE_MIN, BOX_SIZE_MIN); + box->Attach(mockContext); + bubble->AddChild(box); + root->AddChild(bubble); + + /** + * @tc.steps: step2. call the PerformLayout interface of RenderRoot. + * @tc.expected: step2. layoutSize and position of child is correct. + */ + root->PerformLayout(); + ASSERT_TRUE(!(bubble->GetChildren().empty())); + const auto child = bubble->GetChildren().front(); + ASSERT_TRUE(child != nullptr); + EXPECT_EQ(child->GetLayoutSize(), LAYOUT_SIZE); + EXPECT_EQ(child->GetPosition(), POSITION_VALUE_TOP_RIGHT); +} + +/** + * @tc.name: RenderBubblePerformLayout007 + * @tc.desc: Verify PerformLayout interface of RenderBubble works correctly with bottomLeft placement. + * @tc.type: FUNC + * @tc.require: AR000DBAP1 + * @tc.author: caocan + */ +HWTEST_F(RenderBubbleTest, RenderBubblePerformLayout007, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct RenderBubble and RenderBox. + */ + auto mockContext = DisplayTestUtils::GetMockContext(); + RefPtr root = DisplayTestUtils::CreateRenderRoot(); + RefPtr bubble = + DialogTestUtils::CreateRenderBubble(Placement::BOTTOM_LEFT, Offset(200, 200), Size(200, 200)); + bubble->Attach(mockContext); + RefPtr box = DisplayTestUtils::CreateRenderBox(BOX_SIZE_MIN, BOX_SIZE_MIN); + box->Attach(mockContext); + bubble->AddChild(box); + root->AddChild(bubble); + + /** + * @tc.steps: step2. call the PerformLayout interface of RenderRoot. + * @tc.expected: step2. layoutSize and position of child is correct. + */ + root->PerformLayout(); + ASSERT_TRUE(!(bubble->GetChildren().empty())); + const auto child = bubble->GetChildren().front(); + ASSERT_TRUE(child != nullptr); + EXPECT_EQ(child->GetLayoutSize(), LAYOUT_SIZE); + EXPECT_EQ(child->GetPosition(), POSITION_VALUE_BOTTOM_LEFT); +} + +/** + * @tc.name: RenderBubblePerformLayout008 + * @tc.desc: Verify PerformLayout interface of RenderBubble works correctly with bottomRight placement. + * @tc.type: FUNC + * @tc.require: AR000DBAP1 + * @tc.author: caocan + */ +HWTEST_F(RenderBubbleTest, RenderBubblePerformLayout008, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct RenderBubble and RenderBox. + */ + auto mockContext = DisplayTestUtils::GetMockContext(); + RefPtr root = DisplayTestUtils::CreateRenderRoot(); + RefPtr bubble = + DialogTestUtils::CreateRenderBubble(Placement::BOTTOM_RIGHT, Offset(200, 200), Size(200, 200)); + bubble->Attach(mockContext); + RefPtr box = DisplayTestUtils::CreateRenderBox(BOX_SIZE_MIN, BOX_SIZE_MIN); + box->Attach(mockContext); + bubble->AddChild(box); + root->AddChild(bubble); + + /** + * @tc.steps: step2. call the PerformLayout interface of RenderRoot. + * @tc.expected: step2. layoutSize and position of child is correct. + */ + root->PerformLayout(); + ASSERT_TRUE(!(bubble->GetChildren().empty())); + const auto child = bubble->GetChildren().front(); + ASSERT_TRUE(child != nullptr); + EXPECT_EQ(child->GetLayoutSize(), LAYOUT_SIZE); + EXPECT_EQ(child->GetPosition(), POSITION_VALUE_BOTTOM_RIGHT); +} + +/** + * @tc.name: RenderBubblePerformLayout009 + * @tc.desc: Verify PerformLayout interface of RenderBubble works correctly with negative dx. + * @tc.type: FUNC + * @tc.require: AR000DBAP1 + * @tc.author: caocan + */ +HWTEST_F(RenderBubbleTest, RenderBubblePerformLayout009, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct RenderBubble and RenderBox. + */ + auto mockContext = DisplayTestUtils::GetMockContext(); + RefPtr root = DisplayTestUtils::CreateRenderRoot(); + RefPtr bubble = + DialogTestUtils::CreateRenderBubble(Placement::LEFT, Offset(100, 100), Size(800, 400)); + bubble->Attach(mockContext); + RefPtr box = DisplayTestUtils::CreateRenderBox(BOX_SIZE_MAX, BOX_SIZE_MAX); + box->Attach(mockContext); + bubble->AddChild(box); + root->AddChild(bubble); + + /** + * @tc.steps: step2. call the PerformLayout interface of RenderRoot. + * @tc.expected: step2. layoutSize and position of child is correct. + */ + root->PerformLayout(); + ASSERT_TRUE(!(bubble->GetChildren().empty())); + const auto child = bubble->GetChildren().front(); + ASSERT_TRUE(child != nullptr); + EXPECT_EQ(child->GetLayoutSize(), LAYOUT_SIZE_MAX); + EXPECT_EQ(child->GetPosition(), POSITION_BOTTOM_ERROR_LEFT); +} + +/** + * @tc.name: RenderBubblePerformLayout010 + * @tc.desc: Verify PerformLayout interface of RenderBubble works correctly with dx over screen. + * @tc.type: FUNC + * @tc.require: AR000DBAP1 + * @tc.author: caocan + */ +HWTEST_F(RenderBubbleTest, RenderBubblePerformLayout010, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct RenderBubble and RenderBox. + */ + auto mockContext = DisplayTestUtils::GetMockContext(); + RefPtr root = DisplayTestUtils::CreateRenderRoot(); + RefPtr bubble = + DialogTestUtils::CreateRenderBubble(Placement::RIGHT, Offset(800, 200), Size(200, 200)); + bubble->Attach(mockContext); + RefPtr box = DisplayTestUtils::CreateRenderBox(BOX_SIZE_MAX, BOX_SIZE_MAX); + box->Attach(mockContext); + bubble->AddChild(box); + root->AddChild(bubble); + + /** + * @tc.steps: step2. call the PerformLayout interface of RenderRoot. + * @tc.expected: step2. layoutSize and position of child is correct. + */ + root->PerformLayout(); + ASSERT_TRUE(!(bubble->GetChildren().empty())); + const auto child = bubble->GetChildren().front(); + ASSERT_TRUE(child != nullptr); + EXPECT_EQ(child->GetLayoutSize(), LAYOUT_SIZE_MAX); + EXPECT_EQ(child->GetPosition(), POSITION_BOTTOM_ERROR_RIGHT); +} + +/** + * @tc.name: RenderBubblePerformLayout011 + * @tc.desc: Verify PerformLayout interface of RenderBubble works correctly with bottomRight placement. + * @tc.type: FUNC + * @tc.require: AR000DBAP1 + * @tc.author: caocan + */ +HWTEST_F(RenderBubbleTest, RenderBubblePerformLayout011, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct RenderBubble and RenderBox. + */ + auto mockContext = DisplayTestUtils::GetMockContext(); + RefPtr root = DisplayTestUtils::CreateRenderRoot(); + RefPtr bubble = + DialogTestUtils::CreateRenderBubble(Placement::LEFT, Offset(200, 200), Size(800, 2000)); + bubble->Attach(mockContext); + RefPtr box = DisplayTestUtils::CreateRenderBox(BOX_SIZE_MAX, BOX_SIZE_MAX); + box->Attach(mockContext); + bubble->AddChild(box); + root->AddChild(bubble); + + /** + * @tc.steps: step2. call the PerformLayout interface of RenderRoot. + * @tc.expected: step2. layoutSize and position of child is correct. + */ + root->PerformLayout(); + ASSERT_TRUE(!(bubble->GetChildren().empty())); + const auto child = bubble->GetChildren().front(); + ASSERT_TRUE(child != nullptr); + EXPECT_EQ(child->GetLayoutSize(), LAYOUT_SIZE_MAX); + EXPECT_EQ(child->GetPosition(), POSITION_ERROR_FULLSCREEN); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/dialog/render_dialog_test.cpp b/frameworks/core/components/test/unittest/dialog/render_dialog_test.cpp new file mode 100644 index 00000000..afadb2aa --- /dev/null +++ b/frameworks/core/components/test/unittest/dialog/render_dialog_test.cpp @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/log/log.h" +#include "base/utils/utils.h" +#include "core/components/dialog/dialog_component.h" +#include "core/components/test/unittest/dialog/dialog_test_utils.h" +#include "core/components/text/text_component.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { + +class RenderDialogTest : public testing::Test { +public: + static void SetUpTestCase() {} + static void TearDownTestCase() {} + void SetUp() {} + void TearDown() {} +}; + +/** + * @tc.name: RenderDialogUpdate001 + * @tc.desc: Verify the Update Interface of RenderDialog work correctly with dialog component. + * @tc.type: FUNC + * @tc.require: AR000DAR2E + * @tc.author: caocan + */ +HWTEST_F(RenderDialogTest, RenderDialogUpdate001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct DialogComponent and RenderDialog. + */ + auto dialogTween = AceType::MakeRefPtr(); + dialogTween->SetAutoCancel(false); + auto renderDialogTween = AceType::MakeRefPtr(); + + /** + * @tc.steps: step2. call the Update interface of RenderDialog. + * @tc.expected: step2. renderDialog is set as needLayout, autoCancel is set as false. + */ + renderDialogTween->Update(dialogTween); + EXPECT_TRUE(renderDialogTween->NeedLayout()); + EXPECT_TRUE(!renderDialogTween->GetAutoCancel()); +} + +/** + * @tc.name: RenderDialogUpdate002 + * @tc.desc: Verify the Update Interface of RenderDialog work correctly with wrong component type. + * @tc.type: FUNC + * @tc.require: AR000DAR2E + * @tc.author: caocan + */ +HWTEST_F(RenderDialogTest, RenderDialogUpdate002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct TextComponent and RenderDialog. + */ + RefPtr text = AceType::MakeRefPtr("HiAce"); + RefPtr renderDialogTween = AceType::MakeRefPtr(); + + /** + * @tc.steps: step2. call the Update interface of RenderDialog. + * @tc.expected: step2. renderDialog is set as not needLayout. + */ + renderDialogTween->Update(text); + EXPECT_TRUE(!renderDialogTween->NeedLayout()); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/display/BUILD.gn b/frameworks/core/components/test/unittest/display/BUILD.gn new file mode 100644 index 00000000..44ff740e --- /dev/null +++ b/frameworks/core/components/test/unittest/display/BUILD.gn @@ -0,0 +1,102 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +if (is_standard_system) { + module_output_path = "ace_engine_standard/backenduicomponent/display" +} + +ohos_unittest("DisplayCreatorTest") { + module_out_path = module_output_path + + sources = [ "display_creator_test.cpp" ] + + configs = [ + ":config_json_creator_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "$ace_root/frameworks/core/components/test:json", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + deps += [ "$ace_root/frameworks/bridge:js_framework_ohos" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_json_creator_test") { + visibility = [ ":*" ] + include_dirs = [ + "//utils/native/base/include", + "$ace_root", + ] +} + +ohos_unittest("RenderDisplayTest") { + module_out_path = module_output_path + + sources = [ + "display_test_utils.cpp", + "render_display_test.cpp", + ] + + configs = [ + ":config_render_display_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "$ace_root/frameworks/core/components/test:json", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + configs += [ "//third_party/curl:curl_config" ] + deps += [ + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/curl:curl", + ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_render_display_test") { + visibility = [ ":*" ] + include_dirs = [ + "//utils/native/base/include", + "$ace_root", + ] +} + +group("unittest") { + testonly = true + deps = [ + ":DisplayCreatorTest", + ":RenderDisplayTest", + ] +} diff --git a/frameworks/core/components/test/unittest/display/display_creator_test.cpp b/frameworks/core/components/test/unittest/display/display_creator_test.cpp new file mode 100644 index 00000000..d0e7a076 --- /dev/null +++ b/frameworks/core/components/test/unittest/display/display_creator_test.cpp @@ -0,0 +1,500 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/json/json_util.h" +#include "base/utils/utils.h" +#include "core/components/display/display_component.h" +#include "core/components/test/json/component_factory.h" +#include "core/components/text/text_component.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +const double OPACITY_TRANSPARENT = 0.0; +const double OPACITY_TRANSLUCENT = 0.5; +const double OPACITY_OPAQUE = 1.0; +const std::string TEXT_VALUE = "HiAce"; + +} // namespace + +class DisplayCreatorTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); +}; + +void DisplayCreatorTest::SetUpTestCase() {} +void DisplayCreatorTest::TearDownTestCase() {} +void DisplayCreatorTest::SetUp() {} +void DisplayCreatorTest::TearDown() {} + +/** + * @tc.name: DisplayCreator001 + * @tc.desc: Verify DisplayCreator can create display component with child. + * @tc.type: FUNC + * @tc.require: AR000DAUL8 AR000DAUL9 + * @tc.author: caocan + */ +HWTEST_F(DisplayCreatorTest, DisplayCreator001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of display component with child. + */ + const std::string jsonStr = "" + "{ " + " \"className\": \"Display\", " + " \"child\": { " + " \"className\": \"Text\", " + " \"value\": \"HiAce\" " + " } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get display component. + * @tc.expected: step2. Set child correctly, and set visible and opacity as default. + */ + const auto dslBuf = reinterpret_cast(jsonStr.c_str()); + size_t dslLen = jsonStr.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component != nullptr); + RefPtr display = AceType::DynamicCast(component); + ASSERT_TRUE(display != nullptr); + ASSERT_TRUE(display->GetVisible() == VisibleType::VISIBLE); + ASSERT_TRUE(display->GetOpacity() == OPACITY_OPAQUE); + RefPtr text = AceType::DynamicCast(display->GetChild()); + ASSERT_TRUE(text != nullptr); + ASSERT_TRUE(text->GetData() == TEXT_VALUE); +} + +/** + * @tc.name: DisplayCreator002 + * @tc.desc: Verify DisplayCreator can handle exception of no child. + * @tc.type: FUNC + * @tc.require: AR000DAUL8 AR000DAUL9 + * @tc.author: caocan + */ +HWTEST_F(DisplayCreatorTest, DisplayCreator002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of display component with no child. + */ + const std::string jsonStr = "" + "{ " + " \"className\": \"Display\" " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get display component. + * @tc.expected: step2. display is null. + */ + const auto dslBuf = reinterpret_cast(jsonStr.c_str()); + size_t dslLen = jsonStr.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component == nullptr); +} + +/** + * @tc.name: DisplayCreator003 + * @tc.desc: Verify DisplayCreator can create display component with visible and child. + * @tc.type: FUNC + * @tc.require: AR000DAUL8 + * @tc.author: caocan + */ +HWTEST_F(DisplayCreatorTest, DisplayCreator003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of display component with visible and child. + */ + const std::string jsonStr = "" + "{ " + " \"className\": \"Display\", " + " \"visible\": \"visible\", " + " \"child\": { " + " \"className\": \"Text\", " + " \"value\": \"HiAce\" " + " } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get display component. + * @tc.expected: step2. Set visible correctly. + */ + const auto dslBuf = reinterpret_cast(jsonStr.c_str()); + size_t dslLen = jsonStr.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component != nullptr); + RefPtr display = AceType::DynamicCast(component); + ASSERT_TRUE(display != nullptr); + ASSERT_TRUE(display->GetVisible() == VisibleType::VISIBLE); +} + +/** + * @tc.name: DisplayCreator004 + * @tc.desc: Verify DisplayCreator can create display component with visible and child. + * @tc.type: FUNC + * @tc.require: AR000DAUL8 + * @tc.author: caocan + */ +HWTEST_F(DisplayCreatorTest, DisplayCreator004, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of display component with visible and child. + */ + const std::string jsonStr = "" + "{ " + " \"className\": \"Display\", " + " \"visible\": \"invisible\", " + " \"child\": { " + " \"className\": \"Text\", " + " \"value\": \"HiAce\" " + " } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get display component. + * @tc.expected: step2. Set visible correctly. + */ + const auto dslBuf = reinterpret_cast(jsonStr.c_str()); + size_t dslLen = jsonStr.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component != nullptr); + RefPtr display = AceType::DynamicCast(component); + ASSERT_TRUE(display != nullptr); + ASSERT_TRUE(display->GetVisible() == VisibleType::INVISIBLE); +} + +/** + * @tc.name: DisplayCreator005 + * @tc.desc: Verify DisplayCreator can create display component with visible and child. + * @tc.type: FUNC + * @tc.require: AR000DAUL8 + * @tc.author: caocan + */ +HWTEST_F(DisplayCreatorTest, DisplayCreator005, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of display component with visible and child. + */ + const std::string jsonStr = "" + "{ " + " \"className\": \"Display\", " + " \"visible\": \"gone\", " + " \"child\": { " + " \"className\": \"Text\", " + " \"value\": \"HiAce\" " + " } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get display component. + * @tc.expected: step2. Set visible correctly. + */ + const auto dslBuf = reinterpret_cast(jsonStr.c_str()); + size_t dslLen = jsonStr.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component != nullptr); + RefPtr display = AceType::DynamicCast(component); + ASSERT_TRUE(display != nullptr); + ASSERT_TRUE(display->GetVisible() == VisibleType::GONE); +} + +/** + * @tc.name: DisplayCreator006 + * @tc.desc: Verify DisplayCreator can create display component with child and wrong visible value. + * @tc.type: FUNC + * @tc.require: AR000DAUL8 + * @tc.author: caocan + */ +HWTEST_F(DisplayCreatorTest, DisplayCreator006, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of display component with child and wrong visible value. + */ + const std::string jsonStr = "" + "{ " + " \"className\": \"Display\", " + " \"visible\": \"default\", " + " \"child\": { " + " \"className\": \"Text\", " + " \"value\": \"HiAce\" " + " } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get display component. + * @tc.expected: step2. Set visible as default. + */ + const auto dslBuf = reinterpret_cast(jsonStr.c_str()); + size_t dslLen = jsonStr.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component != nullptr); + RefPtr display = AceType::DynamicCast(component); + ASSERT_TRUE(display != nullptr); + ASSERT_TRUE(display->GetVisible() == VisibleType::VISIBLE); +} + +/** + * @tc.name: DisplayCreator007 + * @tc.desc: Verify DisplayCreator can create display component with child and wrong visible value. + * @tc.type: FUNC + * @tc.require: AR000DAUL8 + * @tc.author: caocan + */ +HWTEST_F(DisplayCreatorTest, DisplayCreator007, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of display component with child and wrong visible value. + */ + const std::string jsonStr = "" + "{ " + " \"className\": \"Display\", " + " \"visible\": 1.0, " + " \"child\": { " + " \"className\": \"Text\", " + " \"value\": \"HiAce\" " + " } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get display component. + * @tc.expected: step2. Set visible as default. + */ + const auto dslBuf = reinterpret_cast(jsonStr.c_str()); + size_t dslLen = jsonStr.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component != nullptr); + RefPtr display = AceType::DynamicCast(component); + ASSERT_TRUE(display != nullptr); + ASSERT_TRUE(display->GetVisible() == VisibleType::VISIBLE); +} + +/** + * @tc.name: DisplayCreator008 + * @tc.desc: Verify DisplayCreator can create display component with child and opacity. + * @tc.type: FUNC + * @tc.require: AR000DAUL9 + * @tc.author: caocan + */ +HWTEST_F(DisplayCreatorTest, DisplayCreator008, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of display component with child and opacity. + */ + const std::string jsonStr = "" + "{ " + " \"className\": \"Display\", " + " \"opacity\": 0.0, " + " \"child\": { " + " \"className\": \"Text\", " + " \"value\": \"HiAce\" " + " } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get display component. + * @tc.expected: step2. Set opacity correctly. + */ + const auto dslBuf = reinterpret_cast(jsonStr.c_str()); + size_t dslLen = jsonStr.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component != nullptr); + RefPtr display = AceType::DynamicCast(component); + ASSERT_TRUE(display != nullptr); + ASSERT_TRUE(display->GetOpacity() == OPACITY_TRANSPARENT); +} + +/** + * @tc.name: DisplayCreator009 + * @tc.desc: Verify DisplayCreator can create display component with child and opacity. + * @tc.type: FUNC + * @tc.require: AR000DAUL9 + * @tc.author: caocan + */ +HWTEST_F(DisplayCreatorTest, DisplayCreator009, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of display component with child and opacity. + */ + const std::string jsonStr = "" + "{ " + " \"className\": \"Display\", " + " \"opacity\": 1.0, " + " \"child\": { " + " \"className\": \"Text\", " + " \"value\": \"HiAce\" " + " } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get display component. + * @tc.expected: step2. Set opacity correctly. + */ + const auto dslBuf = reinterpret_cast(jsonStr.c_str()); + size_t dslLen = jsonStr.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component != nullptr); + RefPtr display = AceType::DynamicCast(component); + ASSERT_TRUE(display != nullptr); + ASSERT_TRUE(display->GetOpacity() == OPACITY_OPAQUE); +} + +/** + * @tc.name: DisplayCreator010 + * @tc.desc: Verify DisplayCreator can create display component with child and wrong opacity value. + * @tc.type: FUNC + * @tc.require: AR000DAUL9 + * @tc.author: caocan + */ +HWTEST_F(DisplayCreatorTest, DisplayCreator010, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of display component with child and wrong opacity value. + */ + const std::string jsonStr = "" + "{ " + " \"className\": \"Display\", " + " \"opacity\": -1.0, " + " \"child\": { " + " \"className\": \"Text\", " + " \"value\": \"HiAce\" " + " } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get display component. + * @tc.expected: step2. Set opacity as transparent. + */ + const auto dslBuf = reinterpret_cast(jsonStr.c_str()); + size_t dslLen = jsonStr.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component != nullptr); + RefPtr display = AceType::DynamicCast(component); + ASSERT_TRUE(display != nullptr); + ASSERT_TRUE(display->GetOpacity() == OPACITY_TRANSPARENT); +} + +/** + * @tc.name: DisplayCreator011 + * @tc.desc: Verify DisplayCreator can create display component with child and wrong opacity value. + * @tc.type: FUNC + * @tc.require: AR000DAUL9 + * @tc.author: caocan + */ +HWTEST_F(DisplayCreatorTest, DisplayCreator011, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of display component with child and wrong opacity value. + */ + const std::string jsonStr = "" + "{ " + " \"className\": \"Display\", " + " \"opacity\": 2.0, " + " \"child\": { " + " \"className\": \"Text\", " + " \"value\": \"HiAce\" " + " } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get display component. + * @tc.expected: step2. Set opacity as opaque. + */ + const auto dslBuf = reinterpret_cast(jsonStr.c_str()); + size_t dslLen = jsonStr.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component != nullptr); + RefPtr display = AceType::DynamicCast(component); + ASSERT_TRUE(display != nullptr); + ASSERT_TRUE(display->GetOpacity() == OPACITY_OPAQUE); +} + +/** + * @tc.name: DisplayCreator012 + * @tc.desc: Verify DisplayCreator can create display component with child and opacity. + * @tc.type: FUNC + * @tc.require: AR000DAUL9 + * @tc.author: caocan + */ +HWTEST_F(DisplayCreatorTest, DisplayCreator012, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of display component with child and opacity. + */ + const std::string jsonStr = "" + "{ " + " \"className\": \"Display\", " + " \"opacity\": 0.5, " + " \"child\": { " + " \"className\": \"Text\", " + " \"value\": \"HiAce\" " + " } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get display component. + * @tc.expected: step2. Set opacity correctly. + */ + const auto dslBuf = reinterpret_cast(jsonStr.c_str()); + size_t dslLen = jsonStr.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component != nullptr); + RefPtr display = AceType::DynamicCast(component); + ASSERT_TRUE(display != nullptr); + ASSERT_TRUE(display->GetOpacity() == OPACITY_TRANSLUCENT); +} + +/** + * @tc.name: DisplayCreator013 + * @tc.desc: Verify DisplayCreator can create display component with child and wrong opacity value. + * @tc.type: FUNC + * @tc.require: AR000DAUL9 + * @tc.author: caocan + */ +HWTEST_F(DisplayCreatorTest, DisplayCreator013, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of display component with child and wrong opacity value. + */ + const std::string jsonStr = "" + "{ " + " \"className\": \"Display\", " + " \"opacity\": \"opacity\", " + " \"child\": { " + " \"className\": \"Text\", " + " \"value\": \"HiAce\" " + " } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get display component. + * @tc.expected: step2. Set opacity as default. + */ + const auto dslBuf = reinterpret_cast(jsonStr.c_str()); + size_t dslLen = jsonStr.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component != nullptr); + RefPtr display = AceType::DynamicCast(component); + ASSERT_TRUE(display != nullptr); + ASSERT_TRUE(display->GetOpacity() == OPACITY_OPAQUE); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/display/display_test_utils.cpp b/frameworks/core/components/test/unittest/display/display_test_utils.cpp new file mode 100644 index 00000000..9bed5e44 --- /dev/null +++ b/frameworks/core/components/test/unittest/display/display_test_utils.cpp @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/unittest/display/display_test_utils.h" + +#include "adapter/ohos/osal/fake_asset_manager.h" +#include "adapter/ohos/osal/fake_task_executor.h" +#include "core/components/box/box_component.h" +#include "core/components/flex/flex_component.h" +#include "core/components/test/json/json_frontend.h" +#include "core/components/text/text_component.h" +#include "core/mock/mock_resource_register.h" + +namespace OHOS::Ace { +namespace { + +constexpr double RECT_WIDTH = 1080.0; +constexpr double RECT_HEIGHT = 2244.0; + +} // namespace + +RefPtr DisplayTestUtils::CreateRenderRoot() +{ + RefPtr root = AceType::MakeRefPtr(); + const Rect paintRect(0.0f, 0.0f, RECT_WIDTH, RECT_HEIGHT); + root->SetPaintRect(paintRect); + return root; +} + +RefPtr DisplayTestUtils::CreateRenderFlex( + const FlexDirection direction, const FlexAlign main, const FlexAlign cross) +{ + RefPtr flex = AceType::MakeRefPtr(); + std::list> children; + if (direction == FlexDirection::ROW) { + RefPtr flexComponent = AceType::MakeRefPtr(main, cross, children); + flex->Update(flexComponent); + return flex; + } else { + RefPtr flexComponent = AceType::MakeRefPtr(main, cross, children); + flex->Update(flexComponent); + return flex; + } +} + +RefPtr DisplayTestUtils::CreateRenderBox(const double width, const double height) +{ + RefPtr renderBox = AceType::MakeRefPtr(); + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetWidth(width); + boxComponent->SetHeight(height); + renderBox->Update(boxComponent); + return renderBox; +} + +RefPtr DisplayTestUtils::CreateRenderDisplay(const VisibleType visible, const double opacity) +{ + RefPtr renderDisplay = AceType::MakeRefPtr(); + RefPtr text = AceType::MakeRefPtr("HiAce"); + RefPtr displayComponent = AceType::MakeRefPtr(text); + displayComponent->SetVisible(visible); + displayComponent->SetOpacity(opacity); + renderDisplay->Update(displayComponent); + return renderDisplay; +} + +RefPtr DisplayTestUtils::GetMockContext() +{ + auto platformWindow = std::make_unique(nullptr); + auto window = std::make_unique(std::move(platformWindow)); + auto taskExecutor = Referenced::MakeRefPtr(); + auto assetManager = Referenced::MakeRefPtr(); + auto resRegister = Referenced::MakeRefPtr(); + auto fakeFrontend = Frontend::CreateDefault(); + return AceType::MakeRefPtr( + std::move(window), taskExecutor, assetManager, resRegister, fakeFrontend, 0); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/display/display_test_utils.h b/frameworks/core/components/test/unittest/display/display_test_utils.h new file mode 100644 index 00000000..93cb6779 --- /dev/null +++ b/frameworks/core/components/test/unittest/display/display_test_utils.h @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_DISPLAY_DISPLAY_TEST_UTILS_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_DISPLAY_DISPLAY_TEST_UTILS_H + +#include "core/common/window.h" +#include "core/components/box/render_box.h" +#include "core/components/display/display_component.h" +#include "core/components/display/render_display.h" +#include "core/components/flex/render_flex.h" +#include "core/components/root/render_root.h" + +namespace OHOS::Ace { + +class MockRenderBox final : public RenderBox { + DECLARE_ACE_TYPE(MockRenderBox, RenderBox); + +public: + MockRenderBox() = default; + ~MockRenderBox() override = default; +}; + +class MockRenderDisplay final : public RenderDisplay { + DECLARE_ACE_TYPE(MockRenderDisplay, RenderDisplay); + +public: + MockRenderDisplay() = default; + ~MockRenderDisplay() override = default; + + double GetOpacity() const + { + return opacity_; + } +}; + +class MockRenderRoot final : public RenderRoot { + DECLARE_ACE_TYPE(MockRenderRoot, RenderRoot); + +public: + MockRenderRoot() = default; + ~MockRenderRoot() override = default; +}; + +class MockWindow final : public PlatformWindow { +public: + explicit MockWindow(AceView* aceView) {} + ~MockWindow() override = default; + + // Platform window interface + void RequestFrame() override {} + void RegisterVsyncCallback(AceVsyncCallback&& callback) override {} + void SetRootRenderNode(const RefPtr& root) override {} + +private: + ACE_DISALLOW_COPY_AND_MOVE(MockWindow); +}; + +class DisplayTestUtils { +public: + static RefPtr CreateRenderRoot(); + static RefPtr CreateRenderFlex( + const FlexDirection direction, const FlexAlign main, const FlexAlign cross); + static RefPtr CreateRenderBox(const double width, const double height); + static RefPtr CreateRenderDisplay(const VisibleType visible, const double opacity); + static RefPtr GetMockContext(); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_DISPLAY_DISPLAY_TEST_UTILS_H diff --git a/frameworks/core/components/test/unittest/display/render_display_test.cpp b/frameworks/core/components/test/unittest/display/render_display_test.cpp new file mode 100644 index 00000000..253a9f68 --- /dev/null +++ b/frameworks/core/components/test/unittest/display/render_display_test.cpp @@ -0,0 +1,376 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/geometry/offset.h" +#include "base/geometry/size.h" +#include "base/log/log.h" +#include "base/utils/utils.h" +#include "core/components/test/unittest/display/display_test_utils.h" +#include "core/components/text/text_component.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +const uint8_t OPACITY = 128; +const uint8_t OPACITY_MIN = 0; +const uint8_t OPACITY_MAX = 255; +const double BOX_WIDTH = 100; +const double BOX_HEIGHT = 200; +const Size LAYOUT_SIZE = Size(100, 200); +const Size LAYOUT_SIZE_MIN = Size(0, 0); +const Offset OFFSET_VALUE = Offset(0, 0); + +} + +class RenderDisplayTest : public testing::Test { +public: + static void SetUpTestCase() {} + static void TearDownTestCase() {} + void SetUp() override {} + void TearDown() override {} +}; + +/** + * @tc.name: RenderDisplayUpdate001 + * @tc.desc: Verify the Update Interface of RenderDisplay work correctly with display component. + * @tc.type: FUNC + * @tc.require: AR000DAUL8 AR000DAUL9 + * @tc.author: caocan + */ +HWTEST_F(RenderDisplayTest, RenderDisplayUpdate001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct DisplayComponent and RenderDisplay. + */ + RefPtr text = AceType::MakeRefPtr("HiAce"); + RefPtr display = AceType::MakeRefPtr(text); + display->SetVisible(VisibleType::VISIBLE); + display->SetOpacity(0.0); + RefPtr renderDisplay = AceType::MakeRefPtr(); + + /** + * @tc.steps: step2. call the Update interface of RenderDisplay. + * @tc.expected: step2. renderDisplay is set as needLayout, visible and opacity is set correctly. + */ + renderDisplay->Update(display); + EXPECT_TRUE(renderDisplay->NeedLayout()); + EXPECT_EQ(renderDisplay->GetVisibleType(), VisibleType::VISIBLE); + EXPECT_EQ(renderDisplay->GetOpacity(), OPACITY_MIN); +} + +/** + * @tc.name: RenderDisplayUpdate002 + * @tc.desc: Verify the Update Interface of RenderDisplay work correctly with display component. + * @tc.type: FUNC + * @tc.require: AR000DAUL8 AR000DAUL9 + * @tc.author: caocan + */ +HWTEST_F(RenderDisplayTest, RenderDisplayUpdate002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct DisplayComponent and RenderDisplay. + */ + RefPtr text = AceType::MakeRefPtr("HiAce"); + RefPtr display = AceType::MakeRefPtr(text); + display->SetVisible(VisibleType::INVISIBLE); + display->SetOpacity(0.5); + RefPtr renderDisplay = AceType::MakeRefPtr(); + + /** + * @tc.steps: step2. call the Update interface of RenderDisplay. + * @tc.expected: step2. renderDisplay is set as needLayout, visible and opacity is set correctly. + */ + renderDisplay->Update(display); + EXPECT_TRUE(renderDisplay->NeedLayout()); + EXPECT_EQ(renderDisplay->GetVisibleType(), VisibleType::INVISIBLE); + EXPECT_EQ(renderDisplay->GetOpacity(), OPACITY); +} + +/** + * @tc.name: RenderDisplayUpdate003 + * @tc.desc: Verify the Update Interface of RenderDisplay work correctly with display component. + * @tc.type: FUNC + * @tc.require: AR000DAUL8 AR000DAUL9 + * @tc.author: caocan + */ +HWTEST_F(RenderDisplayTest, RenderDisplayUpdate003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct DisplayComponent and RenderDisplay. + */ + RefPtr text = AceType::MakeRefPtr("HiAce"); + RefPtr display = AceType::MakeRefPtr(text); + display->SetVisible(VisibleType::GONE); + display->SetOpacity(1.0); + RefPtr renderDisplay = AceType::MakeRefPtr(); + + /** + * @tc.steps: step2. call the Update interface of RenderDisplay. + * @tc.expected: step2. renderDisplay is set as needLayout, visible and opacity is set correctly. + */ + renderDisplay->Update(display); + EXPECT_TRUE(renderDisplay->NeedLayout()); + EXPECT_EQ(renderDisplay->GetVisibleType(), VisibleType::GONE); + EXPECT_EQ(renderDisplay->GetOpacity(), OPACITY_MAX); +} + +/** + * @tc.name: RenderDisplayUpdate004 + * @tc.desc: Verify the Update Interface of RenderDisplay work correctly with display component. + * @tc.type: FUNC + * @tc.require: AR000DAUL8 AR000DAUL9 + * @tc.author: caocan + */ +HWTEST_F(RenderDisplayTest, RenderDisplayUpdate004, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct DisplayComponent and RenderDisplay. + */ + RefPtr text = AceType::MakeRefPtr("HiAce"); + RefPtr display = AceType::MakeRefPtr(text); + display->SetVisible(VisibleType::VISIBLE); + display->SetOpacity(-1.0); + RefPtr renderDisplay = AceType::MakeRefPtr(); + + /** + * @tc.steps: step2. call the Update interface of RenderDisplay. + * @tc.expected: step2. renderDisplay is set as needLayout, visible is set correctly, + * opacity is set as min. + */ + renderDisplay->Update(display); + EXPECT_TRUE(renderDisplay->NeedLayout()); + EXPECT_EQ(renderDisplay->GetVisibleType(), VisibleType::VISIBLE); + EXPECT_EQ(renderDisplay->GetOpacity(), OPACITY_MIN); +} + +/** + * @tc.name: RenderDisplayUpdate005 + * @tc.desc: Verify the Update Interface of RenderDisplay work correctly with display component. + * @tc.type: FUNC + * @tc.require: AR000DAUL8 AR000DAUL9 + * @tc.author: caocan + */ +HWTEST_F(RenderDisplayTest, RenderDisplayUpdate005, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct DisplayComponent and RenderDisplay. + */ + RefPtr text = AceType::MakeRefPtr("HiAce"); + RefPtr display = AceType::MakeRefPtr(text); + display->SetVisible(VisibleType::VISIBLE); + display->SetOpacity(2.0); + RefPtr renderDisplay = AceType::MakeRefPtr(); + + /** + * @tc.steps: step2. call the Update interface of RenderDisplay. + * @tc.expected: step2. renderDisplay is set as needLayout, visible is set correctly, + * opacity is set as max. + */ + renderDisplay->Update(display); + EXPECT_TRUE(renderDisplay->NeedLayout()); + EXPECT_EQ(renderDisplay->GetVisibleType(), VisibleType::VISIBLE); + EXPECT_EQ(renderDisplay->GetOpacity(), OPACITY_MAX); +} + +/** + * @tc.name: RenderDisplayUpdate006 + * @tc.desc: Verify the Update Interface of RenderDisplay work correctly with wrong component type. + * @tc.type: FUNC + * @tc.require: AR000DAUL8 AR000DAUL9 + * @tc.author: caocan + */ +HWTEST_F(RenderDisplayTest, RenderDisplayUpdate006, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct TextComponent and RenderDisplay. + */ + RefPtr text = AceType::MakeRefPtr("HiAce"); + RefPtr renderDisplay = AceType::MakeRefPtr(); + + /** + * @tc.steps: step2. call the Update interface of RenderDisplay. + * @tc.expected: step2. renderDisplay is set as not needLayout. + */ + renderDisplay->Update(text); + EXPECT_TRUE(!renderDisplay->NeedLayout()); +} + +/** + * @tc.name: RenderDisplayPerformLayout001 + * @tc.desc: Verify PerformLayout interface of RenderDisplay works correctly. + * @tc.type: FUNC + * @tc.require: AR000DAUL8 + * @tc.author: caocan + */ +HWTEST_F(RenderDisplayTest, RenderDisplayPerformLayout001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct RenderDisplay and RenderBox. + */ + auto mockContext = DisplayTestUtils::GetMockContext(); + RefPtr root = DisplayTestUtils::CreateRenderRoot(); + RefPtr display = DisplayTestUtils::CreateRenderDisplay(VisibleType::VISIBLE, 1.0); + display->Attach(mockContext); + RefPtr box = DisplayTestUtils::CreateRenderBox(BOX_WIDTH, BOX_HEIGHT); + box->Attach(mockContext); + display->AddChild(box); + root->AddChild(display); + + /** + * @tc.steps: step2. call the PerformLayout interface of RenderRoot. + * @tc.expected: step2. layoutSize of display is equal to child's size. + */ + root->PerformLayout(); + EXPECT_EQ(display->GetLayoutSize(), LAYOUT_SIZE); +} + +/** + * @tc.name: RenderDisplayPerformLayout002 + * @tc.desc: Verify PerformLayout interface of RenderDisplay works correctly. + * @tc.type: FUNC + * @tc.require: AR000DAUL8 + * @tc.author: caocan + */ +HWTEST_F(RenderDisplayTest, RenderDisplayPerformLayout002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct RenderDisplay and RenderBox. + */ + auto mockContext = DisplayTestUtils::GetMockContext(); + RefPtr root = DisplayTestUtils::CreateRenderRoot(); + RefPtr display = DisplayTestUtils::CreateRenderDisplay(VisibleType::INVISIBLE, 1.0); + display->Attach(mockContext); + RefPtr box = DisplayTestUtils::CreateRenderBox(BOX_WIDTH, BOX_HEIGHT); + box->Attach(mockContext); + display->AddChild(box); + root->AddChild(display); + + /** + * @tc.steps: step2. call the PerformLayout interface of RenderRoot. + * @tc.expected: step2. layoutSize of display is equal to child's size. + */ + root->PerformLayout(); + EXPECT_EQ(display->GetLayoutSize(), LAYOUT_SIZE); +} + +/** + * @tc.name: RenderDisplayPerformLayout003 + * @tc.desc: Verify PerformLayout interface of RenderDisplay works correctly. + * @tc.type: FUNC + * @tc.require: AR000DAUL8 + * @tc.author: caocan + */ +HWTEST_F(RenderDisplayTest, RenderDisplayPerformLayout003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct RenderDisplay and RenderBox. + */ + auto mockContext = DisplayTestUtils::GetMockContext(); + RefPtr root = DisplayTestUtils::CreateRenderRoot(); + RefPtr display = DisplayTestUtils::CreateRenderDisplay(VisibleType::GONE, 1.0); + display->Attach(mockContext); + RefPtr box = DisplayTestUtils::CreateRenderBox(BOX_WIDTH, BOX_HEIGHT); + box->Attach(mockContext); + display->AddChild(box); + root->AddChild(display); + + /** + * @tc.steps: step2. call the PerformLayout interface of RenderRoot. + * @tc.expected: step2. layoutSize of display is empty. + */ + root->PerformLayout(); + EXPECT_EQ(display->GetLayoutSize(), LAYOUT_SIZE_MIN); +} + +/** + * @tc.name: RenderDisplayPerformLayout004 + * @tc.desc: Verify PerformLayout interface of RenderDisplay works correctly. + * @tc.type: FUNC + * @tc.require: AR000DAUL8 + * @tc.author: caocan + */ +HWTEST_F(RenderDisplayTest, RenderDisplayPerformLayout004, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct RenderFlex and RenderDisplay. + */ + auto mockContext = DisplayTestUtils::GetMockContext(); + RefPtr root = DisplayTestUtils::CreateRenderRoot(); + RefPtr row = + DisplayTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::FLEX_START, FlexAlign::FLEX_START); + row->Attach(mockContext); + root->AddChild(row); + RefPtr display = DisplayTestUtils::CreateRenderDisplay(VisibleType::GONE, 1.0); + display->Attach(mockContext); + RefPtr displayBox = DisplayTestUtils::CreateRenderBox(BOX_WIDTH, BOX_HEIGHT); + displayBox->Attach(mockContext); + display->AddChild(displayBox); + row->AddChild(display); + RefPtr box = DisplayTestUtils::CreateRenderBox(BOX_WIDTH, BOX_HEIGHT); + box->Attach(mockContext); + row->AddChild(box); + + /** + * @tc.steps: step2. call the PerformLayout interface of RenderRoot. + * @tc.expected: step2. layoutSize of display is empty, position of box is (0, 0). + */ + root->PerformLayout(); + EXPECT_EQ(display->GetLayoutSize(), LAYOUT_SIZE_MIN); + EXPECT_EQ(box->GetPosition(), OFFSET_VALUE); +} + +/** + * @tc.name: RenderDisplayPerformLayout005 + * @tc.desc: Verify PerformLayout interface of RenderDisplay works correctly. + * @tc.type: FUNC + * @tc.require: AR000DAUL8 + * @tc.author: caocan + */ +HWTEST_F(RenderDisplayTest, RenderDisplayPerformLayout005, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct RenderFlex and RenderDisplay. + */ + auto mockContext = DisplayTestUtils::GetMockContext(); + RefPtr root = DisplayTestUtils::CreateRenderRoot(); + RefPtr column = + DisplayTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::FLEX_START, FlexAlign::FLEX_START); + column->Attach(mockContext); + root->AddChild(column); + RefPtr display = DisplayTestUtils::CreateRenderDisplay(VisibleType::GONE, 1.0); + display->Attach(mockContext); + RefPtr displayBox = DisplayTestUtils::CreateRenderBox(BOX_WIDTH, BOX_HEIGHT); + displayBox->Attach(mockContext); + display->AddChild(displayBox); + column->AddChild(display); + RefPtr box = DisplayTestUtils::CreateRenderBox(BOX_WIDTH, BOX_HEIGHT); + box->Attach(mockContext); + column->AddChild(box); + + /** + * @tc.steps: step2. call the PerformLayout interface of RenderRoot. + * @tc.expected: step2. layoutSize of display is empty, position of box is (0, 0). + */ + root->PerformLayout(); + EXPECT_EQ(display->GetLayoutSize(), LAYOUT_SIZE_MIN); + EXPECT_EQ(box->GetPosition(), OFFSET_VALUE); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/divider/BUILD.gn b/frameworks/core/components/test/unittest/divider/BUILD.gn new file mode 100644 index 00000000..b5d57bc6 --- /dev/null +++ b/frameworks/core/components/test/unittest/divider/BUILD.gn @@ -0,0 +1,60 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +if (is_standard_system) { + module_output_path = "ace_engine_standard/backenduicomponent/divider" +} + +ohos_unittest("DividerCreatorTest") { + module_out_path = module_output_path + + sources = [ "divider_creator_test.cpp" ] + + configs = [ + ":config_json_creator_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "$ace_root/frameworks/core/components/test:json", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + deps += [ "$ace_root/frameworks/bridge:js_framework_ohos" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_json_creator_test") { + visibility = [ ":*" ] + include_dirs = [ + "//utils/native/base/include", + "$ace_root", + ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":DividerCreatorTest" ] +} diff --git a/frameworks/core/components/test/unittest/divider/divider_creator_test.cpp b/frameworks/core/components/test/unittest/divider/divider_creator_test.cpp new file mode 100644 index 00000000..8ec310bf --- /dev/null +++ b/frameworks/core/components/test/unittest/divider/divider_creator_test.cpp @@ -0,0 +1,124 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/geometry/dimension.h" +#include "base/json/json_util.h" +#include "base/utils/utils.h" +#include "core/components/divider/divider_component.h" +#include "core/components/test/json/component_factory.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +const Dimension DEFAULT_STROKE_WIDTH = Dimension(1.0); +constexpr bool DEFAULT_VERTICAL = false; +const Color DEFAULT_COLOR = Color(0xFF000000); +const Dimension STROKE_WIDTH = Dimension(1.0); +constexpr bool DIVIDER_DIRECTION = true; +const Color DEFAULT_DIVIDER_COLOR = Color(0xffff0000); + +} // namespace + +class DividerCreatorTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; +}; + +void DividerCreatorTest::SetUpTestCase() {} +void DividerCreatorTest::TearDownTestCase() {} +void DividerCreatorTest::SetUp() {} +void DividerCreatorTest::TearDown() {} + +/** + * @tc.name: DividerCreator001 + * @tc.desc: Verify DividerCreator can create divider component with content. + * @tc.type: FUNC + * @tc.require: AR000DQ1Q5 + * @tc.author: jiangyingjie + */ +HWTEST_F(DividerCreatorTest, DividerCreator001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of dialog component with content. + */ + const std::string json = "" + "{ " + " \"className\": \"Divider\" " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get divider component. + * @tc.expected: step2. all properties are set as default. + */ + const auto dslBuf = reinterpret_cast(json.c_str()); + size_t dslLen = json.length(); + auto component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component); + auto divider = AceType::DynamicCast(component); + ASSERT_TRUE(divider); + EXPECT_EQ(divider->GetStrokeWidth(), DEFAULT_STROKE_WIDTH); + EXPECT_EQ(divider->IsVertical(), DEFAULT_VERTICAL); + EXPECT_EQ(divider->GetDividerColor(), DEFAULT_COLOR); +} + +/** + * @tc.name: DividerCreator002 + * @tc.desc: Verify DividerCreator can create divider component with content. + * @tc.type: FUNC + * @tc.require: AR000DQ1Q4 + * @tc.author: jiangyingjie + */ +HWTEST_F(DividerCreatorTest, DividerCreator002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of dialog component with content. + */ + const std::string json = "" + "{" + " \"className\": \"Divider\", " + " \"strokeWidth\": 1, " + " \"vertical\": true, " + " \"color\": { " + " \"className\": \"Color\", " + " \"red\": 255, " + " \"green\": 0, " + " \"blue\": 0 " + " } " + " } "; + + /** + * @tc.steps: step2. call CreateFromJson interface and get divider component. + * @tc.expected: step2. properties are set correctly. + */ + const auto dslBuf = reinterpret_cast(json.c_str()); + size_t dslLen = json.length(); + auto component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component); + auto divider = AceType::DynamicCast(component); + ASSERT_TRUE(divider); + EXPECT_EQ(divider->GetStrokeWidth(), STROKE_WIDTH); + EXPECT_EQ(divider->IsVertical(), DIVIDER_DIRECTION); + EXPECT_EQ(divider->GetDividerColor(), DEFAULT_DIVIDER_COLOR); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/drag_bar/BUILD.gn b/frameworks/core/components/test/unittest/drag_bar/BUILD.gn new file mode 100644 index 00000000..cf35269c --- /dev/null +++ b/frameworks/core/components/test/unittest/drag_bar/BUILD.gn @@ -0,0 +1,52 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +if (is_standard_system) { + module_output_path = "ace_engine_standard/backenduicomponent/drag_bar" +} + +ohos_unittest("RenderDragBarTest") { + module_out_path = module_output_path + + sources = [ + "$ace_root/frameworks/core/components/test/json/json_frontend.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/mock_render_common.cpp", + "render_drag_bar_test.cpp", + ] + + configs = [ "$ace_root:ace_test_config" ] + + deps = [ + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "//third_party/googletest:gtest_main", + ] + if (is_standard_system) { + deps += [ "$ace_root/frameworks/bridge:js_framework_ohos" ] + } + + if (is_standard_system) { + configs += [ "//third_party/curl:curl_config" ] + deps += [ "//third_party/curl:curl" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +group("unittest") { + testonly = true + deps = [ ":RenderDragBarTest" ] +} diff --git a/frameworks/core/components/test/unittest/drag_bar/drag_bar_test_utils.h b/frameworks/core/components/test/unittest/drag_bar/drag_bar_test_utils.h new file mode 100644 index 00000000..90c39d9a --- /dev/null +++ b/frameworks/core/components/test/unittest/drag_bar/drag_bar_test_utils.h @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_DRAG_BAR_DRAG_BAR_TEST_UTILS_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_DRAG_BAR_DRAG_BAR_TEST_UTILS_H + +#include "core/components/drag_bar/render_drag_bar.h" + +namespace OHOS::Ace { +namespace { + +class MockRenderDragBar final : public RenderDragBar { + DECLARE_ACE_TYPE(MockRenderDragBar, RenderDragBar); + +public: + MockRenderDragBar() = default; + ~MockRenderDragBar() override = default; + + bool CheckPanelMode(PanelMode mode) + { + if (mode == PanelMode::HALF) { + // Three point in the same horizontal line when half mode. + if (!NearEqual(barLeftPoint_.GetY(), barCenterPoint_.GetY()) || + !NearEqual(barCenterPoint_.GetY(), barRightPoint_.GetY())) { + return false; + } + } else { + // Three point in the different horizontal line when half mode. + if (NearEqual(barLeftPoint_.GetY(), barCenterPoint_.GetY()) || + NearEqual(barCenterPoint_.GetY(), barRightPoint_.GetY())) { + return false; + } + } + return showMode_ == mode; + } + + bool CheckHasDragBar(bool hasDragBar) + { + return hasDragBar_ == hasDragBar; + } + + bool CheckScale() + { + return NearEqual(scaleX_, 1.0) && NearEqual(scaleY_, 1.0); + } + + bool CheckIconOffset(const Offset& offset) + { + return iconOffset_ == offset; + } + + bool CheckDragOffset(bool offsetX, bool offsetY) + { + bool checkX = false; + bool checkY = false; + if (offsetX) { + checkX = dragOffset_.GetX() > 0.0; + } else { + checkX = dragOffset_.GetX() < 0.0; + } + if (offsetY) { + checkY = dragOffset_.GetY() > 0.0; + } else { + checkY = dragOffset_.GetY() < 0.0; + } + return checkX && checkY; + } +}; + +} // namespace + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_DRAG_BAR_DRAG_BAR_TEST_UTILS_H diff --git a/frameworks/core/components/test/unittest/drag_bar/render_drag_bar_test.cpp b/frameworks/core/components/test/unittest/drag_bar/render_drag_bar_test.cpp new file mode 100644 index 00000000..6fc8408d --- /dev/null +++ b/frameworks/core/components/test/unittest/drag_bar/render_drag_bar_test.cpp @@ -0,0 +1,132 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "core/components/drag_bar/drag_bar_component.h" +#include "core/components/test/unittest/drag_bar/drag_bar_test_utils.h" +#include "core/components/test/unittest/mock/mock_render_common.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { + +class RenderDragBarTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; + + RefPtr mockContext_; + RefPtr renderNode_; + int32_t index_ = 0; +}; + +void RenderDragBarTest::SetUpTestCase() {} +void RenderDragBarTest::TearDownTestCase() {} + +void RenderDragBarTest::SetUp() +{ + mockContext_ = MockRenderCommon::GetMockContext(); + renderNode_ = AceType::MakeRefPtr(); + renderNode_->Attach(mockContext_); +} + +void RenderDragBarTest::TearDown() +{ + mockContext_ = nullptr; + renderNode_ = nullptr; +} + +/** + * @tc.name: RenderDragBarTest001 + * @tc.desc: Verify the prop value for drag_bar. + * @tc.type: FUNC + * @tc.require: AR000F3CBQ + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderDragBarTest, RenderDragBarTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct drag_bar component. + * @tc.expected: step1. properties are set correctly. + */ + RefPtr dragBar = AceType::MakeRefPtr(); + ASSERT_TRUE(dragBar->GetPanelMode() == PanelMode::FULL); + ASSERT_TRUE(dragBar->HasDragBar() == true); + + /** + * @tc.steps: step2. Set prop to drag_bar component and update to render node. + * @tc.expected: step2. The prop of render node is correct. + */ + dragBar->SetPanelMode(PanelMode::MINI); + dragBar->SetHasDragBar(false); + renderNode_->Update(dragBar); + ASSERT_TRUE(renderNode_->CheckPanelMode(PanelMode::MINI)); + ASSERT_TRUE(renderNode_->CheckHasDragBar(false)); +} + +/** + * @tc.name: RenderDragBarTest002 + * @tc.desc: Verify the touch event for drag_bar. + * @tc.type: FUNC + * @tc.require: AR000F3CBR + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderDragBarTest, RenderDragBarTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Set prop to drag_bar component and update to render node. + * @tc.expected: step1. The prop of render node is correct. + */ + RefPtr dragBar = AceType::MakeRefPtr(); + dragBar->SetPanelMode(PanelMode::HALF); + dragBar->SetHasDragBar(true); + renderNode_->Update(dragBar); + ASSERT_TRUE(renderNode_->CheckPanelMode(PanelMode::HALF)); + ASSERT_TRUE(renderNode_->CheckHasDragBar(true)); + + /** + * @tc.steps: step2. Trigger layout for drag_bar. + * @tc.expected: step2. The layout info is correct. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(1000.0, 1000.0)); + renderNode_->SetLayoutParam(layoutParam); + renderNode_->PerformLayout(); + ASSERT_TRUE(renderNode_->CheckScale()); + ASSERT_TRUE(renderNode_->CheckIconOffset(Offset(0.0, 0.0))); + + /** + * @tc.steps: step3. Trigger touch event for drag_bar. + * @tc.expected: step3. The drag offset info is correct. + */ + renderNode_->HandleTouchDown(Offset(100.0, 100.0)); + renderNode_->HandleTouchMove(Offset(200.0, 200.0)); + ASSERT_TRUE(renderNode_->CheckDragOffset(true, true)); + renderNode_->HandleTouchMove(Offset(50.0, 200.0)); + ASSERT_TRUE(renderNode_->CheckDragOffset(false, true)); + renderNode_->HandleTouchMove(Offset(200.0, 50.0)); + ASSERT_TRUE(renderNode_->CheckDragOffset(true, false)); + renderNode_->HandleTouchMove(Offset(50.0, 50.0)); + ASSERT_TRUE(renderNode_->CheckDragOffset(false, false)); + renderNode_->HandleTouchMove(Offset(100.0, 100.0)); + ASSERT_TRUE(renderNode_->CheckDragOffset(true, true) == false); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/flex/BUILD.gn b/frameworks/core/components/test/unittest/flex/BUILD.gn new file mode 100644 index 00000000..4eb55fc2 --- /dev/null +++ b/frameworks/core/components/test/unittest/flex/BUILD.gn @@ -0,0 +1,106 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/backenduicomponent/flex" + +ohos_unittest("RenderFlexTest") { + module_out_path = module_output_path + + sources = [ + "$ace_root/frameworks/core/components/test/json/json_frontend.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/mock_render_common.cpp", + "flex_test_utils.cpp", + "render_column_test.cpp", + "render_flex_item_test.cpp", + "render_magic_layout_test.cpp", + "render_row_test.cpp", + ] + + configs = [ + ":config_render_flex_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + if (is_standard_system) { + deps += [ "$ace_root/frameworks/bridge:js_framework_ohos" ] + } + + if (is_standard_system) { + configs += [ "//third_party/curl:curl_config" ] + deps += [ "//third_party/curl:curl" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_render_flex_test") { + visibility = [ ":*" ] + include_dirs = [ + "//utils/native/base/include", + "$ace_root", + ] +} + +ohos_unittest("FlexCreatorTest") { + module_out_path = module_output_path + + sources = [ + "flex_creator_test.cpp", + "flex_item_creator_test.cpp", + ] + + configs = [ + ":config_json_creator_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/bridge:js_framework_ohos", + "$ace_root/frameworks/core:ace_core_ohos", + "$ace_root/frameworks/core/components/test:json", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_json_creator_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ + ":FlexCreatorTest", + ":RenderFlexTest", + ] +} diff --git a/frameworks/core/components/test/unittest/flex/flex_creator_test.cpp b/frameworks/core/components/test/unittest/flex/flex_creator_test.cpp new file mode 100644 index 00000000..e3755bbf --- /dev/null +++ b/frameworks/core/components/test/unittest/flex/flex_creator_test.cpp @@ -0,0 +1,522 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/log/log.h" +#include "base/utils/utils.h" +#include "core/components/flex/flex_component.h" +#include "core/components/root/root_component.h" +#include "core/components/test/json/flex_creator.h" +#include "core/components/text/text_component.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +constexpr int32_t SINGLE_CHILD_COUNT = 1; +constexpr int32_t MULTI_CHILD_COUNT = 2; +constexpr int32_t TEST_MAIN_ALIGN = 3; +constexpr int32_t DEFAULT_MAIN_ALIGN = 1; +constexpr int32_t TEST_CROSS_ALIGN = 2; +constexpr int32_t DEFAULT_CROSS_ALIGN = 1; +const std::string TEST_TEXT_VALUE = "Hi Ace"; + +} // namespace + +class FlexCreatorTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); + +protected: + RefPtr CreateComponent(const std::string& testJson); +}; + +void FlexCreatorTest::SetUpTestCase() +{ + GTEST_LOG_(INFO) << "FlexCreatorTest SetUpTestCase"; +} + +void FlexCreatorTest::TearDownTestCase() +{ + GTEST_LOG_(INFO) << "FlexCreatorTest TearDownTestCase"; +} + +void FlexCreatorTest::SetUp() {} + +void FlexCreatorTest::TearDown() {} + +RefPtr FlexCreatorTest::CreateComponent(const std::string& testJson) +{ + const auto dslBuf = reinterpret_cast(testJson.c_str()); + size_t dslLen = testJson.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + return component; +} + +/** + * @tc.name: FlexClassname001 + * @tc.desc: Check flex component with right classname can create correctly + * @tc.type: FUNC + * @tc.require: AR000DAQTH + * @tc.author: yangfan + */ +HWTEST_F(FlexCreatorTest, FlexClassname001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FlexCreatorTest FlexClassname001 start"; + /** + * @tc.steps: step1. construct the json string where column has correct className. + */ + std::string testJson = "" + "{ " + " \"className\": \"Column\", " + " \"mainAxisAlign\": 3, " + " \"crossAxisAlign\": 2, " + " \"child\": { " + " \"className\":\"Text\"," + " \"value\":\"Hi Ace\" " + " } " + "}"; + /** + * @tc.steps: step2. get column component + * @tc.expected: step2. properties are set correctly + */ + RefPtr component = CreateComponent(testJson); + ASSERT_TRUE(component != nullptr); + RefPtr column = AceType::DynamicCast(component); + ASSERT_TRUE(column != nullptr); + int32_t crossAxisAlign = static_cast(column->GetCrossAxisAlign()); + int32_t mainAxisAlign = static_cast(column->GetMainAxisAlign()); + std::list> children = column->GetChildren(); + EXPECT_TRUE(crossAxisAlign == TEST_CROSS_ALIGN); + EXPECT_TRUE(mainAxisAlign == TEST_MAIN_ALIGN); + EXPECT_TRUE(children.size() == SINGLE_CHILD_COUNT); + GTEST_LOG_(INFO) << "FlexCreatorTest FlexClassname001 stop"; +} + +/** + * @tc.name: FlexClassname002 + * @tc.desc: Check flex component with wrong classname cannot create + * @tc.type: FUNC + * @tc.require: AR000DAQTH + * @tc.author: yangfan + */ +HWTEST_F(FlexCreatorTest, FlexClassname002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FlexCreatorTest FlexClassname002 start"; + /** + * @tc.steps: step1. construct the json string where column has wrong className. + */ + std::string testJson = "" + "{ " + " \"className\": \"ErrorColumn\", " + " \"mainAxisAlign\": 3, " + " \"crossAxisAlign\": 2, " + " \"child\": { " + " \"className\":\"Text\"," + " \"value\":\"Hi Ace\" " + " } " + "}"; + /** + * @tc.steps: step2. get column component + * @tc.expected: step2. column is not created + */ + RefPtr component = CreateComponent(testJson); + ASSERT_TRUE(component == nullptr); + GTEST_LOG_(INFO) << "FlexCreatorTest FlexClassname002 stop"; +} + +/** + * @tc.name: FlexProperties001 + * @tc.desc: Check flex component with properties bigger than enum in the json returns default properties + * @tc.type: FUNC + * @tc.require: AR000DAQTH + * @tc.author: yangfan + */ +HWTEST_F(FlexCreatorTest, FlexProperties001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FlexCreatorTest FlexProperties001 start"; + /** + * @tc.steps: step1. construct the json string where column has invalid properties. + */ + std::string testJson = "" + "{ " + " \"className\": \"Column\", " + " \"mainAxisAlign\": 10, " + " \"crossAxisAlign\": 9, " + " \"child\": { " + " \"className\":\"Text\"," + " \"value\":\"Hi Ace\" " + " } " + "}"; + /** + * @tc.steps: step2. get column component + * @tc.expected: step2. properties are set as default + */ + RefPtr component = CreateComponent(testJson); + ASSERT_TRUE(component != nullptr); + RefPtr column = AceType::DynamicCast(component); + ASSERT_TRUE(column != nullptr); + int32_t crossAxisAlign = static_cast(column->GetCrossAxisAlign()); + int32_t mainAxisAlign = static_cast(column->GetMainAxisAlign()); + std::list> children = column->GetChildren(); + EXPECT_TRUE(crossAxisAlign == DEFAULT_CROSS_ALIGN); + EXPECT_TRUE(mainAxisAlign == DEFAULT_MAIN_ALIGN); + EXPECT_TRUE(children.size() == SINGLE_CHILD_COUNT); + GTEST_LOG_(INFO) << "FlexCreatorTest FlexProperties001 stop"; +} + +/** + * @tc.name: FlexProperties002 + * @tc.desc: Check flex component with properties smaller than enum in the json returns default properties + * @tc.type: FUNC + * @tc.require: AR000DAQTH + * @tc.author: yangfan + */ +HWTEST_F(FlexCreatorTest, FlexProperties002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FlexCreatorTest FlexProperties002 start"; + /** + * @tc.steps: step1. construct the json string where column has invalid properties. + */ + std::string testJson = "" + "{ " + " \"className\": \"Row\", " + " \"mainAxisAlign\": -1.5, " + " \"crossAxisAlign\": -1, " + " \"child\": { " + " \"className\":\"Text\"," + " \"value\":\"Hi Ace\" " + " } " + "}"; + /** + * @tc.steps: step2. get row component + * @tc.expected: step2. properties are set as default + */ + RefPtr component = CreateComponent(testJson); + ASSERT_TRUE(component != nullptr); + RefPtr row = AceType::DynamicCast(component); + ASSERT_TRUE(row != nullptr); + int32_t crossAxisAlign = static_cast(row->GetCrossAxisAlign()); + int32_t mainAxisAlign = static_cast(row->GetMainAxisAlign()); + std::list> children = row->GetChildren(); + EXPECT_TRUE(crossAxisAlign == DEFAULT_CROSS_ALIGN); + EXPECT_TRUE(mainAxisAlign == DEFAULT_MAIN_ALIGN); + EXPECT_TRUE(children.size() == SINGLE_CHILD_COUNT); + GTEST_LOG_(INFO) << "FlexCreatorTest FlexProperties002 stop"; +} + +/** + * @tc.name: FlexProperties003 + * @tc.desc: Check flex component with no crossAxisAlign in the json returns default crossAxisAlign + * @tc.type: FUNC + * @tc.require: AR000DAQTH + * @tc.author: yangfan + */ +HWTEST_F(FlexCreatorTest, FlexProperties003, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FlexCreatorTest FlexProperties003 start"; + /** + * @tc.steps: step1. construct the json string where column has no crossAxisAlign. + */ + std::string testJson = "" + "{ " + " \"className\": \"Row\", " + " \"mainAxisAlign\": 3, " + " \"child\": [{ " + " \"className\":\"Text\"," + " \"value\":\"Hi Ace\" " + " }," + " {" + " \"className\":\"Text\"," + " \"value\":\"Hi Ace\" " + " }] " + "}"; + /** + * @tc.steps: step2. get row component + * @tc.expected: step2. properties are set as default + */ + RefPtr component = CreateComponent(testJson); + ASSERT_TRUE(component != nullptr); + RefPtr row = AceType::DynamicCast(component); + ASSERT_TRUE(row != nullptr); + int32_t crossAxisAlign = static_cast(row->GetCrossAxisAlign()); + int32_t mainAxisAlign = static_cast(row->GetMainAxisAlign()); + std::list> children = row->GetChildren(); + EXPECT_TRUE(crossAxisAlign == DEFAULT_CROSS_ALIGN); + EXPECT_TRUE(mainAxisAlign == TEST_MAIN_ALIGN); + EXPECT_TRUE(children.size() == MULTI_CHILD_COUNT); + GTEST_LOG_(INFO) << "FlexCreatorTest FlexProperties003 stop"; +} + +/** + * @tc.name: FlexProperties004 + * @tc.desc: Check flex component with no mainAxisAlign in the json returns default mainAxisAlign + * @tc.type: FUNC + * @tc.require: AR000DAQTH + * @tc.author: yangfan + */ +HWTEST_F(FlexCreatorTest, FlexProperties004, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FlexCreatorTest FlexProperties004 start"; + /** + * @tc.steps: step1. construct the json string where column has no crossAxisAlign. + */ + std::string testJson = "" + "{ " + " \"className\": \"Column\", " + " \"crossAxisAlign\": 2, " + " \"child\": [{ " + " \"className\":\"Text\"," + " \"value\":\"Hi Ace\" " + " }," + " {" + " \"className\":\"Text\"," + " \"value\":\"Hi Ace\" " + " }] " + "}"; + /** + * @tc.steps: step2. get column component + * @tc.expected: step2. properties are set as default + */ + RefPtr component = CreateComponent(testJson); + ASSERT_TRUE(component != nullptr); + RefPtr column = AceType::DynamicCast(component); + ASSERT_TRUE(column != nullptr); + int32_t crossAxisAlign = static_cast(column->GetCrossAxisAlign()); + int32_t mainAxisAlign = static_cast(column->GetMainAxisAlign()); + std::list> children = column->GetChildren(); + EXPECT_TRUE(crossAxisAlign == TEST_CROSS_ALIGN); + EXPECT_TRUE(mainAxisAlign == DEFAULT_MAIN_ALIGN); + EXPECT_TRUE(children.size() == MULTI_CHILD_COUNT); + GTEST_LOG_(INFO) << "FlexCreatorTest FlexProperties004 stop"; +} + +/** + * @tc.name: FlexChild001 + * @tc.desc: Verify flex component with single flex child is correct when load the json + * @tc.type: FUNC + * @tc.require: AR000DAQTH + * @tc.author: yangfan + */ +HWTEST_F(FlexCreatorTest, FlexChild001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FlexCreatorTest FlexChild001 start"; + /** + * @tc.steps: step1. construct the json with one flex child + */ + std::string testJson = "" + "{ " + " \"className\": \"Column\", " + " \"mainAxisAlign\": 3, " + " \"crossAxisAlign\": 2, " + " \"child\": { " + " \"className\": \"Row\", " + " \"child\": {" + " \"className\": \"Text\", " + " \"value\": \"Hi Ace\" " + " } " + " } " + "}"; + /** + * @tc.steps: step2. get row component with one child + * @tc.expected: step2. properties are set correctly + */ + RefPtr component = CreateComponent(testJson); + ASSERT_TRUE(component != nullptr); + RefPtr column = AceType::DynamicCast(component); + ASSERT_TRUE(column != nullptr); + int32_t crossAxisAlign = static_cast(column->GetCrossAxisAlign()); + int32_t mainAxisAlign = static_cast(column->GetMainAxisAlign()); + int32_t childrenCount = column->GetChildren().size(); + EXPECT_TRUE(childrenCount == SINGLE_CHILD_COUNT); + EXPECT_TRUE(crossAxisAlign == TEST_CROSS_ALIGN); + EXPECT_TRUE(mainAxisAlign == TEST_MAIN_ALIGN); + RefPtr row = AceType::DynamicCast(column->GetChildren().front()); + ASSERT_TRUE(row != nullptr); + ASSERT_TRUE(row->GetChildren().size() == SINGLE_CHILD_COUNT); + RefPtr text = AceType::DynamicCast(row->GetChildren().front()); + ASSERT_TRUE(text != nullptr); + EXPECT_TRUE(text->GetData() == TEST_TEXT_VALUE); + GTEST_LOG_(INFO) << "FlexCreatorTest FlexChild001 stop"; +} + +/** + * @tc.name: FlexChild002 + * @tc.desc: Verify flex component with two flex child is correct when load the json + * @tc.type: FUNC + * @tc.require: AR000DAQTH + * @tc.author: yangfan + */ +HWTEST_F(FlexCreatorTest, FlexChild002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FlexCreatorTest FlexChild002 start"; + /** + * @tc.steps: step1. construct the json with two flex child + */ + std::string testJson = "" + "{ " + " \"className\": \"Row\", " + " \"mainAxisAlign\": 3, " + " \"crossAxisAlign\": 2, " + " \"child\": [" + " { " + " \"className\": \"Column\", " + " \"child\": {" + " \"className\": \"Text\", " + " \"value\": \"Hi Ace\" " + " }" + " }, " + " { " + " \"className\": \"Column\", " + " \"child\": {" + " \"className\": \"Text\", " + " \"value\": \"Hi Ace\" " + " }" + " } " + " ]" + "}"; + /** + * @tc.steps: step2. get row component with one child + * @tc.expected: step2. properties are set correctly + */ + RefPtr component = CreateComponent(testJson); + ASSERT_TRUE(component != nullptr); + RefPtr row = AceType::DynamicCast(component); + ASSERT_TRUE(row != nullptr); + int32_t crossAxisAlign = static_cast(row->GetCrossAxisAlign()); + int32_t mainAxisAlign = static_cast(row->GetMainAxisAlign()); + int32_t childrenCount = row->GetChildren().size(); + EXPECT_TRUE(childrenCount == MULTI_CHILD_COUNT); + EXPECT_TRUE(crossAxisAlign == TEST_CROSS_ALIGN); + EXPECT_TRUE(mainAxisAlign == TEST_MAIN_ALIGN); + RefPtr firstChild = AceType::DynamicCast(row->GetChildren().front()); + ASSERT_TRUE(firstChild != nullptr); + RefPtr firstChildText = AceType::DynamicCast(firstChild->GetChildren().front()); + ASSERT_TRUE(firstChildText != nullptr); + EXPECT_TRUE(firstChildText->GetData() == TEST_TEXT_VALUE); + RefPtr secondChild = AceType::DynamicCast(row->GetChildren().back()); + RefPtr secondChildText = AceType::DynamicCast(secondChild->GetChildren().front()); + ASSERT_TRUE(secondChildText != nullptr); + EXPECT_TRUE(secondChildText->GetData() == TEST_TEXT_VALUE); + GTEST_LOG_(INFO) << "FlexCreatorTest FlexChild002 stop"; +} + +/** + * @tc.name: FlexChild003 + * @tc.desc: Verify flex component with complex child is correct when load the json + * @tc.type: FUNC + * @tc.require: AR000DAQTH + * @tc.author: yangfan + */ +HWTEST_F(FlexCreatorTest, FlexChild003, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FlexCreatorTest FlexChild003 start"; + /** + * @tc.steps: step1. construct the json with complex child + */ + std::string testJson = "" + "{ " + " \"className\": \"Row\", " + " \"mainAxisAlign\": 3, " + " \"crossAxisAlign\": 2, " + " \"child\": [" + " { " + " \"className\": \"Column\", " + " \"mainAxisAlign\": 3, " + " \"child\": [{" + " \"className\": \"Text\", " + " \"value\": \"Hi Ace\" " + " }, " + " {" + " \"className\": \"Text\", " + " \"value\": \"Hi Ace\" " + " }" + " ]" + " }, " + " { " + " \"className\": \"Text\", " + " \"value\": \"Hi Ace\" " + " } " + " ]" + "}"; + /** + * @tc.steps: step2. get row component with complex child + * @tc.expected: step2. all the properties are set correctly + */ + RefPtr component = CreateComponent(testJson); + ASSERT_TRUE(component != nullptr); + RefPtr row = AceType::DynamicCast(component); + ASSERT_TRUE(row != nullptr); + int32_t crossAxisAlign = static_cast(row->GetCrossAxisAlign()); + int32_t mainAxisAlign = static_cast(row->GetMainAxisAlign()); + int32_t childrenCount = row->GetChildren().size(); + EXPECT_TRUE(childrenCount == MULTI_CHILD_COUNT); + EXPECT_TRUE(crossAxisAlign == TEST_CROSS_ALIGN); + EXPECT_TRUE(mainAxisAlign == TEST_MAIN_ALIGN); + RefPtr column = AceType::DynamicCast(row->GetChildren().front()); + ASSERT_TRUE(column != nullptr); + int32_t columnMainAlign = static_cast(column->GetMainAxisAlign()); + EXPECT_TRUE(columnMainAlign == TEST_MAIN_ALIGN); + EXPECT_TRUE(column->GetChildren().size() == MULTI_CHILD_COUNT); + RefPtr columnText = AceType::DynamicCast(column->GetChildren().front()); + EXPECT_TRUE(columnText->GetData() == TEST_TEXT_VALUE); + RefPtr text = AceType::DynamicCast(row->GetChildren().back()); + EXPECT_TRUE(text->GetData() == TEST_TEXT_VALUE); + GTEST_LOG_(INFO) << "FlexCreatorTest FlexChild003 stop"; +} + +/** + * @tc.name: FlexChild004 + * @tc.desc: Verify flex component with no child is correct when load the json + * @tc.type: FUNC + * @tc.require: AR000DAQTH + * @tc.author: yangfan + */ +HWTEST_F(FlexCreatorTest, FlexChild004, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FlexCreatorTest FlexChild004 start"; + /** + * @tc.steps: step1. construct the json with no child + */ + std::string testJson = "" + "{ " + " \"className\": \"Row\", " + " \"mainAxisAlign\": 3, " + " \"crossAxisAlign\": -1 " + "}"; + /** + * @tc.steps: step2. get row component with no child + * @tc.expected: step2. properties are set correctly + */ + RefPtr component = CreateComponent(testJson); + ASSERT_TRUE(component != nullptr); + RefPtr row = AceType::DynamicCast(component); + ASSERT_TRUE(row != nullptr); + int32_t crossAxisAlign = static_cast(row->GetCrossAxisAlign()); + int32_t mainAxisAlign = static_cast(row->GetMainAxisAlign()); + std::list> children = row->GetChildren(); + EXPECT_TRUE(crossAxisAlign == DEFAULT_CROSS_ALIGN); + EXPECT_TRUE(mainAxisAlign == TEST_MAIN_ALIGN); + EXPECT_TRUE(children.size() == 0); + GTEST_LOG_(INFO) << "FlexCreatorTest FlexChild004 stop"; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/flex/flex_item_creator_test.cpp b/frameworks/core/components/test/unittest/flex/flex_item_creator_test.cpp new file mode 100644 index 00000000..3e4fd540 --- /dev/null +++ b/frameworks/core/components/test/unittest/flex/flex_item_creator_test.cpp @@ -0,0 +1,320 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/log/log.h" +#include "base/utils/utils.h" +#include "core/components/flex/flex_component.h" +#include "core/components/flex/flex_item_component.h" +#include "core/components/root/root_component.h" +#include "core/components/test/json/flex_creator.h" +#include "core/components/test/json/flex_item_creator.h" +#include "core/components/text/text_component.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +constexpr double DEFAULT_FLEX_SHRINK = 0; +constexpr double DEFAULT_FLEX_GROW = 0; +constexpr double DEFAULT_FLEX_BASIS = 0.0; +constexpr double TEST_FLEX_SHRINK = 2; +constexpr double TEST_FLEX_GROW = 1; +constexpr double TEST_FLEX_BASIS = 20.0; +const std::string TEST_TEXT_VALUE = "Hi Ace"; + +} // namespace + +class FlexItemCreatorTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); + +protected: + RefPtr CreateComponent(const std::string& testJson); + void CheckItemProperties(const RefPtr& flexItem, bool isDefault); +}; + +void FlexItemCreatorTest::SetUpTestCase() +{ + GTEST_LOG_(INFO) << "FlexItemCreatorTest SetUpTestCase"; +} + +void FlexItemCreatorTest::TearDownTestCase() +{ + GTEST_LOG_(INFO) << "FlexItemCreatorTest TearDownTestCase"; +} + +void FlexItemCreatorTest::SetUp() {} + +void FlexItemCreatorTest::TearDown() {} + +RefPtr FlexItemCreatorTest::CreateComponent(const std::string& testJson) +{ + const auto dslBuf = reinterpret_cast(testJson.c_str()); + size_t dslLen = testJson.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + return component; +} + +void FlexItemCreatorTest::CheckItemProperties(const RefPtr& flexItem, bool isDefault) +{ + double basis = flexItem->GetFlexBasis(); + double grow = flexItem->GetFlexGrow(); + double shrink = flexItem->GetFlexShrink(); + if (isDefault) { + EXPECT_TRUE(NearEqual(basis, DEFAULT_FLEX_BASIS)); + EXPECT_TRUE(NearEqual(grow, DEFAULT_FLEX_GROW)); + EXPECT_TRUE(NearEqual(shrink, DEFAULT_FLEX_SHRINK)); + } else { + EXPECT_TRUE(NearEqual(basis, TEST_FLEX_BASIS)); + EXPECT_TRUE(NearEqual(grow, TEST_FLEX_GROW)); + EXPECT_TRUE(NearEqual(shrink, TEST_FLEX_SHRINK)); + } + RefPtr child = flexItem->GetChild(); + ASSERT_TRUE(child != nullptr); + RefPtr text = AceType::DynamicCast(child); + ASSERT_TRUE(text != nullptr); + EXPECT_TRUE(text->GetData() == TEST_TEXT_VALUE); +} + +/** + * @tc.name: FlexItemProperties001 + * @tc.desc: Check flex item component with no properties can be created with default properties. + * @tc.type: FUNC + * @tc.require: AR000DAR1Q + * @tc.author: yangfan + */ +HWTEST_F(FlexItemCreatorTest, FlexItemProperties001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FlexItemCreatorTest FlexItemProperties001 start"; + /** + * @tc.steps: step1. construct the json string where flex item has no properties. + */ + std::string testJson = "" + "{ " + " \"className\": \"FlexItem\", " + " \"child\": { " + " \"className\":\"Text\"," + " \"value\":\"Hi Ace\" " + " } " + "}"; + /** + * @tc.steps: step2. get flex item component. + * @tc.expected: step2. properties are set as default. + */ + RefPtr component = CreateComponent(testJson); + ASSERT_TRUE(component != nullptr); + RefPtr flexItem = AceType::DynamicCast(component); + ASSERT_TRUE(flexItem != nullptr); + CheckItemProperties(flexItem, true); + GTEST_LOG_(INFO) << "FlexItemCreatorTest FlexItemProperties001 stop"; +} + +/** + * @tc.name: FlexItemProperties002 + * @tc.desc: Check flex item component with invalid properties can be created with default properties. + * @tc.type: FUNC + * @tc.require: AR000DAR1Q + * @tc.author: yangfan + */ +HWTEST_F(FlexItemCreatorTest, FlexItemProperties002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FlexItemCreatorTest FlexItemProperties002 start"; + /** + * @tc.steps: step1. construct the json string of flex item with invalid properties. + */ + std::string testJson = "" + "{ " + " \"className\": \"FlexItem\", " + " \"flexGrow\": -1, " + " \"flexShrink\": -1, " + " \"flexBasis\": -0.5, " + " \"child\": { " + " \"className\":\"Text\"," + " \"value\":\"Hi Ace\" " + " } " + "}"; + /** + * @tc.steps: step2. get flex item component. + * @tc.expected: step2. properties are set as default. + */ + RefPtr component = CreateComponent(testJson); + ASSERT_TRUE(component != nullptr); + RefPtr flexItem = AceType::DynamicCast(component); + ASSERT_TRUE(flexItem != nullptr); + CheckItemProperties(flexItem, true); + GTEST_LOG_(INFO) << "FlexItemCreatorTest FlexItemProperties002 stop"; +} + +/** + * @tc.name: FlexItemProperties003 + * @tc.desc: Check flex item component with valid properties can be created with correct properties. + * @tc.type: FUNC + * @tc.require: AR000DAR1Q + * @tc.author: yangfan + */ +HWTEST_F(FlexItemCreatorTest, FlexItemProperties003, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FlexItemCreatorTest FlexItemProperties003 start"; + /** + * @tc.steps: step1. construct the json string of flex item with valid properties. + */ + std::string testJson = "" + "{ " + " \"className\": \"FlexItem\", " + " \"flexGrow\": 1, " + " \"flexShrink\": 2, " + " \"flexBasis\": 20.0, " + " \"child\": { " + " \"className\":\"Text\"," + " \"value\":\"Hi Ace\" " + " } " + "}"; + /** + * @tc.steps: step2. get flex item component. + * @tc.expected: step2. properties are set correctly. + */ + RefPtr component = CreateComponent(testJson); + ASSERT_TRUE(component != nullptr); + RefPtr flexItem = AceType::DynamicCast(component); + ASSERT_TRUE(flexItem != nullptr); + CheckItemProperties(flexItem, false); + GTEST_LOG_(INFO) << "FlexItemCreatorTest FlexItemProperties003 stop"; +} + +/** + * @tc.name: FlexItemChild001 + * @tc.desc: Verify the flex item component with single flex child is correct. + * @tc.type: FUNC + * @tc.require: AR000DAR1Q + * @tc.author: yangfan + */ +HWTEST_F(FlexItemCreatorTest, FlexItemChild001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FlexItemCreatorTest FlexItemChild001 start"; + /** + * @tc.steps: step1. construct the json string of flex item with single child. + */ + std::string testJson = "" + "{ " + " \"className\": \"FlexItem\", " + " \"flexGrow\": 0, " + " \"flexShrink\": 0, " + " \"flexBasis\": 0, " + " \"child\": { " + " \"className\":\"Text\"," + " \"value\":\"Hi Ace\" " + " } " + "}"; + /** + * @tc.steps: step2. get flex item component. + * @tc.expected: step2. properties are set correctly. + */ + RefPtr component = CreateComponent(testJson); + ASSERT_TRUE(component != nullptr); + RefPtr flexItem = AceType::DynamicCast(component); + ASSERT_TRUE(flexItem != nullptr); + CheckItemProperties(flexItem, true); + GTEST_LOG_(INFO) << "FlexItemCreatorTest FlexItemChild001 stop"; +} + +/** + * @tc.name: FlexItemChild002 + * @tc.desc: Verify the flex item component with double child returns single child. + * @tc.type: FUNC + * @tc.require: AR000DAR1Q + * @tc.author: yangfan + */ +HWTEST_F(FlexItemCreatorTest, FlexItemChild002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FlexItemCreatorTest FlexItemChild002 start"; + /** + * @tc.steps: step1. construct the json string of flex item with double child. + */ + std::string testJson = "" + "{ " + " \"className\": \"FlexItem\", " + " \"flexGrow\": 0, " + " \"flexShrink\": 0, " + " \"flexBasis\": 0, " + " \"child\": [" + " { " + " \"className\":\"Text\"," + " \"value\":\"Hi Ace\" " + " }, " + " { " + " \"className\":\"Text\"," + " \"value\":\"Hi Ace\" " + " } " + " ] " + "}"; + /** + * @tc.steps: step2. get flex item component. + * @tc.expected: step2. properties are set correctly, only one child in the flex item. + */ + RefPtr component = CreateComponent(testJson); + ASSERT_TRUE(component != nullptr); + RefPtr flexItem = AceType::DynamicCast(component); + ASSERT_TRUE(flexItem != nullptr); + CheckItemProperties(flexItem, true); + GTEST_LOG_(INFO) << "FlexItemCreatorTest FlexItemChild002 stop"; +} + +/** + * @tc.name: FlexItemChild003 + * @tc.desc: Verify the flex item component with no child returns no child. + * @tc.type: FUNC + * @tc.require: AR000DAR1Q + * @tc.author: yangfan + */ +HWTEST_F(FlexItemCreatorTest, FlexItemChild003, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "FlexItemCreatorTest FlexItemChild003 start"; + /** + * @tc.steps: step1. construct the json string of flex item with double child. + */ + std::string testJson = "" + "{ " + " \"className\": \"FlexItem\", " + " \"flexGrow\": 0, " + " \"flexShrink\": 0, " + " \"flexBasis\": 0 " + "}"; + /** + * @tc.steps: step2. get flex item component. + * @tc.expected: step2. properties are set correctly, only one child in the flex item. + */ + RefPtr component = CreateComponent(testJson); + ASSERT_TRUE(component != nullptr); + RefPtr flexItem = AceType::DynamicCast(component); + ASSERT_TRUE(flexItem != nullptr); + double basis = flexItem->GetFlexBasis(); + int32_t grow = flexItem->GetFlexGrow(); + int32_t shrink = flexItem->GetFlexShrink(); + EXPECT_TRUE(NearEqual(basis, DEFAULT_FLEX_BASIS)); + EXPECT_TRUE(grow == DEFAULT_FLEX_GROW); + EXPECT_TRUE(shrink == DEFAULT_FLEX_SHRINK); + RefPtr child = flexItem->GetChild(); + ASSERT_TRUE(child == nullptr); + GTEST_LOG_(INFO) << "FlexItemCreatorTest FlexItemChild003 stop"; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/flex/flex_test_utils.cpp b/frameworks/core/components/test/unittest/flex/flex_test_utils.cpp new file mode 100644 index 00000000..03cfaefe --- /dev/null +++ b/frameworks/core/components/test/unittest/flex/flex_test_utils.cpp @@ -0,0 +1,149 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/unittest/flex/flex_test_utils.h" + +#include "core/components/box/box_component.h" +#include "core/components/flex/flex_component.h" +#include "core/components/flex/flex_item_component.h" +#include "core/components/text/text_component.h" + +namespace OHOS::Ace { +namespace { + +constexpr double RECT_WIDTH = 1080.0; +constexpr double RECT_HEIGHT = 2244.0; +constexpr double MOCK_IDEO_BASELINE_RATE = 0.8; +constexpr double MOCK_ALPHA_BASELINE_RATE = 0.6; +constexpr double DEFAULT_WIDTH = 100.0; +constexpr double DEFAULT_HEIGHT = 100.0; +constexpr double DEFAULT_FLEX_BASIS = 0.0; +constexpr double DEFAULT_FLEX_GROW = 0.0; +constexpr double DEFAULT_FLEX_SHRINK = 1.0; + +} // namespace + +double MockRenderText::GetBaselineDistance(TextBaseline textBaseline) +{ + switch (textBaseline) { + case TextBaseline::IDEOGRAPHIC: + return textStyle_.GetFontSize().Value() * MOCK_IDEO_BASELINE_RATE; + case TextBaseline::ALPHABETIC: + return textStyle_.GetFontSize().Value() * MOCK_ALPHA_BASELINE_RATE; + default: + return textStyle_.GetFontSize().Value() * MOCK_ALPHA_BASELINE_RATE; + } +} + +Size MockRenderText::Measure() +{ + return Size(textStyle_.GetFontSize().Value(), textStyle_.GetFontSize().Value()); +} + +double MockRenderText::GetTextWidth() +{ + return textStyle_.GetFontSize().Value(); +} + +RefPtr FlexTestUtils::CreateRenderRoot() +{ + RefPtr root = AceType::MakeRefPtr(); + const Rect paintRect(0.0f, 0.0f, RECT_WIDTH, RECT_HEIGHT); + root->SetPaintRect(paintRect); + return root; +} + +RefPtr FlexTestUtils::CreateRenderFlex(FlexDirection direction, FlexAlign main, FlexAlign cross) +{ + RefPtr flex = AceType::MakeRefPtr(); + std::list> children; + if (direction == FlexDirection::ROW) { + RefPtr flexComponent = AceType::MakeRefPtr(main, cross, children); + flex->Update(flexComponent); + return flex; + } else { + RefPtr flexComponent = AceType::MakeRefPtr(main, cross, children); + flex->Update(flexComponent); + return flex; + } +} + +RefPtr FlexTestUtils::CreateRenderBox(double width, double height) +{ + RefPtr renderBox = AceType::MakeRefPtr(); + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetWidth(width); + boxComponent->SetHeight(height); + renderBox->Update(boxComponent); + return renderBox; +} + +RefPtr FlexTestUtils::CreateWeightedBox(double weight, double width, double height) +{ + RefPtr renderBox = AceType::MakeRefPtr(); + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetFlexWeight(weight); + boxComponent->SetWidth(width); + boxComponent->SetHeight(height); + renderBox->UpdateAll(boxComponent); + return renderBox; +} + +RefPtr FlexTestUtils::CreateMagicNode(double aspectRatio, double flexWeight, int32_t displayIndex, + const LayoutParam& constraints, const RefPtr& context) +{ + RefPtr renderBox = AceType::MakeRefPtr(); + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetWidth(DEFAULT_WIDTH); + boxComponent->SetHeight(DEFAULT_HEIGHT); + boxComponent->SetMinWidth(Dimension(constraints.GetMinSize().Width())); + boxComponent->SetMinHeight(Dimension(constraints.GetMinSize().Height())); + boxComponent->SetMaxWidth(Dimension(constraints.GetMaxSize().Width())); + boxComponent->SetMaxHeight(Dimension(constraints.GetMaxSize().Height())); + boxComponent->SetAspectRatio(aspectRatio); + renderBox->UpdateAll(boxComponent); + renderBox->Attach(context); + RefPtr renderFlexItem = AceType::MakeRefPtr(); + auto flexItemComponent = + AceType::MakeRefPtr(DEFAULT_FLEX_GROW, DEFAULT_FLEX_SHRINK, DEFAULT_FLEX_BASIS); + flexItemComponent->SetFlexWeight(flexWeight); + flexItemComponent->SetDisplayIndex(displayIndex); + flexItemComponent->SetMinWidth(Dimension(constraints.GetMinSize().Width())); + flexItemComponent->SetMinHeight(Dimension(constraints.GetMinSize().Height())); + flexItemComponent->SetMaxWidth(Dimension(constraints.GetMaxSize().Width())); + flexItemComponent->SetMaxHeight(Dimension(constraints.GetMaxSize().Height())); + renderFlexItem->UpdateAll(flexItemComponent); + renderFlexItem->Attach(context); + renderFlexItem->AddChild(renderBox); + return renderFlexItem; +} + +RefPtr FlexTestUtils::CreateRenderFlexItem(double flexBasis, double flexGrow, double flexShrink) +{ + RefPtr renderFlexItem = AceType::MakeRefPtr(); + renderFlexItem->SetFlexBasis(flexBasis); + renderFlexItem->SetFlexShrink(flexShrink); + renderFlexItem->SetFlexGrow(flexGrow); + return renderFlexItem; +} + +RefPtr FlexTestUtils::CreateRenderText(double fontSize) +{ + RefPtr renderText = AceType::MakeRefPtr(); + renderText->SetFontSize(fontSize); + return renderText; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/flex/flex_test_utils.h b/frameworks/core/components/test/unittest/flex/flex_test_utils.h new file mode 100644 index 00000000..43b83ca1 --- /dev/null +++ b/frameworks/core/components/test/unittest/flex/flex_test_utils.h @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_FLEX_FLEX_TEST_UTILS_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_FLEX_FLEX_TEST_UTILS_H + +#include "core/components/box/render_box.h" +#include "core/components/flex/flex_component.h" +#include "core/components/flex/render_flex.h" +#include "core/components/flex/render_flex_item.h" +#include "core/components/root/render_root.h" +#include "core/components/test/unittest/mock/mock_render_common.h" +#include "core/components/text/render_text.h" + +namespace OHOS::Ace { + +class MockRenderBox final : public RenderBox { + DECLARE_ACE_TYPE(MockRenderBox, RenderBox); + +public: + MockRenderBox() = default; + ~MockRenderBox() override = default; +}; + +class MockRenderRoot final : public RenderRoot { + DECLARE_ACE_TYPE(MockRenderRoot, RenderRoot); + +public: + MockRenderRoot() = default; + ~MockRenderRoot() override = default; +}; + +class MockRenderText final : public RenderText { + DECLARE_ACE_TYPE(MockRenderText, RenderText); + +public: + MockRenderText() = default; + ~MockRenderText() override = default; + + uint32_t GetTextLines() override + { + return 0; + } + + void SetFontSize(double fontSize) + { + textStyle_.SetFontSize(Dimension(fontSize, DimensionUnit::PX)); + } + + double GetTextWidth() override; + + double GetBaselineDistance(TextBaseline textBaseline) override; + +protected: + Size Measure() override; +}; + +class FlexTestUtils { +public: + static RefPtr CreateRenderRoot(); + static RefPtr CreateRenderFlex(FlexDirection direction, FlexAlign main, FlexAlign cross); + static RefPtr CreateRenderBox(double width, double height); + static RefPtr CreateWeightedBox(double flexWeight, double width = 0.0, double height = 100.0); + static RefPtr CreateRenderFlexItem(double flexBasis, double flexGrow, double flexShrink); + static RefPtr CreateMagicNode(double aspectRatio, double flexWeight, int32_t displayIndex, + const LayoutParam& constraints, const RefPtr& context); + static RefPtr CreateRenderText(double fontSize); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_FLEX_FLEX_TEST_UTILS_H diff --git a/frameworks/core/components/test/unittest/flex/render_column_test.cpp b/frameworks/core/components/test/unittest/flex/render_column_test.cpp new file mode 100644 index 00000000..55d69105 --- /dev/null +++ b/frameworks/core/components/test/unittest/flex/render_column_test.cpp @@ -0,0 +1,764 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/log/log.h" +#include "base/utils/utils.h" +#include "core/components/test/unittest/flex/flex_test_utils.h" +#include "core/components/test/unittest/mock/mock_render_common.h" +#include "core/components/text/text_component.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +constexpr double SMALL_BOX = 100.0; +constexpr double MEDIUM_BOX = 200.0; +constexpr double LARGE_BOX = 300.0; +constexpr double CENTER_SPACE_SIZE = 822.0; +constexpr double END_SPACE_SIZE = 1644.0; +constexpr double BETWEEN_SPACE_SIZE = 822.0; +constexpr double AROUND_FRONT_SPACE_SIZE = 274.0; +constexpr double AROUND_SPACE_SIZE = 548.0; +constexpr double EVENLY_SPACE_SIZE = 411.0; +constexpr double CENTER_ALIGN_SIZE = 50.0; +constexpr double END_ALIGN_SIZE = 100.0; +constexpr double ROW_COL_CENTER_SIZE = 972.0; +constexpr double ROW_COL_SMALL_CENTER_SIZE = 872.0; + +} // namespace + +class RenderColumnTest : public testing::Test { +public: + static void SetUpTestCase() + { + GTEST_LOG_(INFO) << "RenderColumnTest SetUpTestCase"; + } + + static void TearDownTestCase() + { + GTEST_LOG_(INFO) << "RenderColumnTest TearDownTestCase"; + } + + void SetUp() {} + void TearDown() {} +}; + +/** + * @tc.name: RenderColumnLayout001 + * @tc.desc: Verify the column component with main(start) and cross(start) works fine. + * @tc.type: FUNC + * @tc.require: AR000DAQTK + * @tc.author: yangfan + */ +HWTEST_F(RenderColumnTest, RenderColumnLayout001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderColumnTest RenderColumnLayout001 start"; + /** + * @tc.steps: step1. construct the RenderNode tree, column are set as start-start. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr column = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::FLEX_START, FlexAlign::FLEX_START); + column->Attach(mockContext); + root->AddChild(column); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + column->AddChild(firstBox); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + column->AddChild(secondBox); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + thirdBox->Attach(mockContext); + column->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->PerformLayout(); + EXPECT_TRUE(firstBox->GetPosition().IsZero()); + EXPECT_TRUE(secondBox->GetPosition() == Offset(0, SMALL_BOX)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(0, SMALL_BOX + MEDIUM_BOX)); +} + +/** + * @tc.name: RenderColumnLayout002 + * @tc.desc: Verify the column component with main(start) and cross(center) works fine. + * @tc.type: FUNC + * @tc.require: AR000DAQTK + * @tc.author: yangfan + */ +HWTEST_F(RenderColumnTest, RenderColumnLayout002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderColumnTest RenderColumnLayout002 start"; + /** + * @tc.steps: step1. construct the RenderNode tree, column are set as start-center. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr column = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::FLEX_START, FlexAlign::CENTER); + column->Attach(mockContext); + root->AddChild(column); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + column->AddChild(firstBox); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + column->AddChild(secondBox); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + thirdBox->Attach(mockContext); + column->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->PerformLayout(); + EXPECT_TRUE(firstBox->GetPosition() == Offset(CENTER_ALIGN_SIZE + CENTER_ALIGN_SIZE, 0)); + EXPECT_TRUE(secondBox->GetPosition() == Offset(CENTER_ALIGN_SIZE, SMALL_BOX)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(0, SMALL_BOX + MEDIUM_BOX)); +} + +/** + * @tc.name: RenderColumnLayout003 + * @tc.desc: Verify the column component with main(start) and cross(end) works fine. + * @tc.type: FUNC + * @tc.require: AR000DAQTK + * @tc.author: yangfan + */ +HWTEST_F(RenderColumnTest, RenderColumnLayout003, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderColumnTest RenderColumnLayout003 start"; + /** + * @tc.steps: step1. construct the RenderNode tree, column are set as start-end. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr column = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::FLEX_START, FlexAlign::FLEX_END); + column->Attach(mockContext); + root->AddChild(column); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + column->AddChild(firstBox); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + column->AddChild(secondBox); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + thirdBox->Attach(mockContext); + column->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->PerformLayout(); + EXPECT_TRUE(firstBox->GetPosition() == Offset(END_ALIGN_SIZE + END_ALIGN_SIZE, 0.0)); + EXPECT_TRUE(secondBox->GetPosition() == Offset(END_ALIGN_SIZE, SMALL_BOX)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(0, SMALL_BOX + MEDIUM_BOX)); +} + +/** + * @tc.name: RenderColumnLayout004 + * @tc.desc: Verify the column component with main(start) and cross(stretch) works fine. + * @tc.type: FUNC + * @tc.require: AR000DAQTK + * @tc.author: yangfan + */ +HWTEST_F(RenderColumnTest, RenderColumnLayout004, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderColumnTest RenderColumnLayout004 start"; + /** + * @tc.steps: step1. construct the RenderNode tree, column are set as start-stretch. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr column = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::FLEX_START, FlexAlign::STRETCH); + column->Attach(mockContext); + root->AddChild(column); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + column->AddChild(firstBox); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + column->AddChild(secondBox); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + thirdBox->Attach(mockContext); + column->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly, the size of three boxes are set correctly + */ + root->PerformLayout(); + EXPECT_TRUE(firstBox->GetPosition() == Offset(0, 0.0)); + EXPECT_TRUE(secondBox->GetPosition() == Offset(0.0, SMALL_BOX)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(0.0, SMALL_BOX + MEDIUM_BOX)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(LARGE_BOX, SMALL_BOX)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(LARGE_BOX, MEDIUM_BOX)); + EXPECT_TRUE(thirdBox->GetLayoutSize() == Size(LARGE_BOX, LARGE_BOX)); +} + +/** + * @tc.name: RenderColumnLayout005 + * @tc.desc: Verify the column component with main(center) and cross(start) works fine. + * @tc.type: FUNC + * @tc.require: AR000DAQTK + * @tc.author: yangfan + */ +HWTEST_F(RenderColumnTest, RenderColumnLayout005, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderColumnTest RenderColumnLayout005 start"; + /** + * @tc.steps: step1. construct the RenderNode tree, column are set as center-start. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr column = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::CENTER, FlexAlign::FLEX_START); + column->Attach(mockContext); + root->AddChild(column); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + column->AddChild(firstBox); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + column->AddChild(secondBox); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + thirdBox->Attach(mockContext); + column->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->PerformLayout(); + EXPECT_TRUE(firstBox->GetPosition() == Offset(0, CENTER_SPACE_SIZE)); + EXPECT_TRUE(secondBox->GetPosition() == Offset(0.0, CENTER_SPACE_SIZE + SMALL_BOX)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(0.0, CENTER_SPACE_SIZE + SMALL_BOX + MEDIUM_BOX)); +} + +/** + * @tc.name: RenderColumnLayout006 + * @tc.desc: Verify the column component with main(end) and cross(start) works fine. + * @tc.type: FUNC + * @tc.require: AR000DAQTK + * @tc.author: yangfan + */ +HWTEST_F(RenderColumnTest, RenderColumnLayout006, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderColumnTest RenderColumnLayout006 start"; + /** + * @tc.steps: step1. construct the RenderNode tree, column are set as end-start. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr column = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::FLEX_END, FlexAlign::FLEX_START); + column->Attach(mockContext); + root->AddChild(column); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + column->AddChild(firstBox); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + column->AddChild(secondBox); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + thirdBox->Attach(mockContext); + column->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->PerformLayout(); + EXPECT_TRUE(firstBox->GetPosition() == Offset(0.0, END_SPACE_SIZE)); + EXPECT_TRUE(secondBox->GetPosition() == Offset(0.0, END_SPACE_SIZE + SMALL_BOX)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(0.0, END_SPACE_SIZE + SMALL_BOX + MEDIUM_BOX)); +} + +/** + * @tc.name: RenderColumnLayout007 + * @tc.desc: Verify the column component with main(space-between) and cross(start) works fine. + * @tc.type: FUNC + * @tc.require: AR000DAQTK + * @tc.author: yangfan + */ +HWTEST_F(RenderColumnTest, RenderColumnLayout007, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderColumnTest RenderColumnLayout007 start"; + /** + * @tc.steps: step1. construct the RenderNode tree, column are set as space_between-start. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr column = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::SPACE_BETWEEN, FlexAlign::FLEX_START); + column->Attach(mockContext); + root->AddChild(column); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + column->AddChild(firstBox); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + column->AddChild(secondBox); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + thirdBox->Attach(mockContext); + column->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->PerformLayout(); + EXPECT_TRUE(firstBox->GetPosition() == Offset(0.0, 0.0)); + EXPECT_TRUE(secondBox->GetPosition() == Offset(0.0, BETWEEN_SPACE_SIZE + SMALL_BOX)); + EXPECT_TRUE( + thirdBox->GetPosition() == Offset(0.0, BETWEEN_SPACE_SIZE + BETWEEN_SPACE_SIZE + SMALL_BOX + MEDIUM_BOX)); +} + +/** + * @tc.name: RenderColumnLayout008 + * @tc.desc: Verify the column component with main(space-around) and cross(start) works fine. + * @tc.type: FUNC + * @tc.require: AR000DAQTK + * @tc.author: yangfan + */ +HWTEST_F(RenderColumnTest, RenderColumnLayout008, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderColumnTest RenderColumnLayout008 start"; + /** + * @tc.steps: step1. construct the RenderNode tree, column are set as space_around-start. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr column = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::SPACE_AROUND, FlexAlign::FLEX_START); + column->Attach(mockContext); + root->AddChild(column); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + column->AddChild(firstBox); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + column->AddChild(secondBox); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + thirdBox->Attach(mockContext); + column->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->PerformLayout(); + EXPECT_TRUE(firstBox->GetPosition() == Offset(0.0, AROUND_FRONT_SPACE_SIZE)); + EXPECT_TRUE(secondBox->GetPosition() == Offset(0.0, AROUND_FRONT_SPACE_SIZE + AROUND_SPACE_SIZE + SMALL_BOX)); + EXPECT_TRUE(thirdBox->GetPosition() == + Offset(0.0, AROUND_FRONT_SPACE_SIZE + AROUND_SPACE_SIZE + AROUND_SPACE_SIZE + SMALL_BOX + MEDIUM_BOX)); +} + +/** + * @tc.name: RenderColumnLayout009 + * @tc.desc: Verify the column component with main(center) and cross(center) under column component works fine. + * @tc.type: FUNC + * @tc.require: AR000DAQTK + * @tc.author: yangfan + */ +HWTEST_F(RenderColumnTest, RenderColumnLayout009, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderColumnTest RenderColumnLayout009 start"; + /** + * @tc.steps: step1. construct the node tree, column has a child column, child column are set as center-center. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr column = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::FLEX_START, FlexAlign::FLEX_START); + column->Attach(mockContext); + root->AddChild(column); + RefPtr childCol = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::CENTER, FlexAlign::CENTER); + childCol->Attach(mockContext); + column->AddChild(childCol); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + childCol->AddChild(firstBox); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + childCol->AddChild(secondBox); + RefPtr secondChildCol = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::CENTER, FlexAlign::CENTER); + secondChildCol->Attach(mockContext); + column->AddChild(secondChildCol); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + thirdBox->Attach(mockContext); + secondChildCol->AddChild(thirdBox); + RefPtr fourthBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + fourthBox->Attach(mockContext); + secondChildCol->AddChild(fourthBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->PerformLayout(); + EXPECT_TRUE(childCol->GetPosition() == Offset(0.0, 0.0)); + EXPECT_TRUE(secondChildCol->GetPosition() == Offset(0.0, 2244.0)); + EXPECT_TRUE(firstBox->GetPosition() == Offset(CENTER_ALIGN_SIZE, ROW_COL_CENTER_SIZE)); + EXPECT_TRUE(secondBox->GetPosition() == Offset(0.0, ROW_COL_CENTER_SIZE + SMALL_BOX)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(CENTER_ALIGN_SIZE, ROW_COL_SMALL_CENTER_SIZE)); + EXPECT_TRUE(fourthBox->GetPosition() == Offset(0.0, ROW_COL_SMALL_CENTER_SIZE + MEDIUM_BOX)); +} + +/** + * @tc.name: RenderColumnLayout010 + * @tc.desc: Verify the row component with main(center) and cross(center) under column component works fine. + * @tc.type: FUNC + * @tc.require: AR000DAQTK + * @tc.author: yangfan + */ +HWTEST_F(RenderColumnTest, RenderColumnLayout010, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderColumnTest RenderColumnLayout010 start"; + /** + * @tc.steps: step1. construct the node tree, parent row has a child column, child column are set as center-center. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr row = + FlexTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::FLEX_START, FlexAlign::FLEX_START); + row->Attach(mockContext); + root->AddChild(row); + RefPtr childCol = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::CENTER, FlexAlign::CENTER); + childCol->Attach(mockContext); + row->AddChild(childCol); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + childCol->AddChild(firstBox); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + childCol->AddChild(secondBox); + RefPtr secondChildCol = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::CENTER, FlexAlign::CENTER); + secondChildCol->Attach(mockContext); + row->AddChild(secondChildCol); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + thirdBox->Attach(mockContext); + secondChildCol->AddChild(thirdBox); + RefPtr fourthBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + fourthBox->Attach(mockContext); + secondChildCol->AddChild(fourthBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->PerformLayout(); + EXPECT_TRUE(childCol->GetPosition() == Offset(0.0, 0.0)); + EXPECT_TRUE(secondChildCol->GetPosition() == Offset(MEDIUM_BOX, 0.0)); + EXPECT_TRUE(firstBox->GetPosition() == Offset(CENTER_ALIGN_SIZE, ROW_COL_CENTER_SIZE)); + EXPECT_TRUE(secondBox->GetPosition() == Offset(0.0, ROW_COL_CENTER_SIZE + SMALL_BOX)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(CENTER_ALIGN_SIZE, ROW_COL_SMALL_CENTER_SIZE)); + EXPECT_TRUE(fourthBox->GetPosition() == Offset(0.0, ROW_COL_SMALL_CENTER_SIZE + MEDIUM_BOX)); +} + +/** + * @tc.name: RenderColumnLayout011 + * @tc.desc: Verify the column component with main(space-evenly) and cross(start) works fine. + * @tc.type: FUNC + * @tc.require: AR000F3BAQ + * @tc.author: yangfan + */ +HWTEST_F(RenderColumnTest, RenderColumnLayout011, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the RenderNode tree, column are set as space_between-start. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr column = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::SPACE_EVENLY, FlexAlign::FLEX_START); + column->Attach(mockContext); + root->AddChild(column); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + column->AddChild(firstBox); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + column->AddChild(secondBox); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + thirdBox->Attach(mockContext); + column->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->PerformLayout(); + EXPECT_TRUE(firstBox->GetPosition() == Offset(0.0, EVENLY_SPACE_SIZE)); + EXPECT_TRUE(secondBox->GetPosition() == Offset(0.0, 2 * EVENLY_SPACE_SIZE + SMALL_BOX)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(0.0, 3 * EVENLY_SPACE_SIZE + SMALL_BOX + MEDIUM_BOX)); +} + +/** + * @tc.name: RenderColumnLayout012 + * @tc.desc: Verify the column component with main(center) and cross(center) works fine. + * @tc.type: FUNC + * @tc.require: AR000DAQTK + * @tc.author: wangzezhen + */ +HWTEST_F(RenderColumnTest, RenderColumnLayout012, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderColumnTest RenderColumnLayout012 start"; + /** + * @tc.steps: step1. construct the RenderNode tree, column are set as center-center. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr column = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::CENTER, FlexAlign::CENTER); + column->Attach(mockContext); + root->AddChild(column); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + column->AddChild(firstBox); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + column->AddChild(secondBox); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + thirdBox->Attach(mockContext); + column->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->PerformLayout(); + EXPECT_TRUE(firstBox->GetPosition() == Offset(CENTER_ALIGN_SIZE + CENTER_ALIGN_SIZE, CENTER_SPACE_SIZE)); + EXPECT_TRUE(secondBox->GetPosition() == Offset(CENTER_ALIGN_SIZE, CENTER_SPACE_SIZE + SMALL_BOX)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(0, CENTER_SPACE_SIZE + SMALL_BOX + MEDIUM_BOX)); +} + +/** + * @tc.name: RenderColumnLayout013 + * @tc.desc: Verify the column component with main(center) and cross(end) works fine. + * @tc.type: FUNC + * @tc.require: AR000DAQTK + * @tc.author: wangzezhen + */ +HWTEST_F(RenderColumnTest, RenderColumnLayout013, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderColumnTest RenderColumnLayout013 start"; + /** + * @tc.steps: step1. construct the RenderNode tree, column are set as center-end. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr column = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::CENTER, FlexAlign::FLEX_END); + column->Attach(mockContext); + root->AddChild(column); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + column->AddChild(firstBox); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + column->AddChild(secondBox); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + thirdBox->Attach(mockContext); + column->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->PerformLayout(); + EXPECT_TRUE(firstBox->GetPosition() == Offset(END_ALIGN_SIZE + END_ALIGN_SIZE, CENTER_SPACE_SIZE)); + EXPECT_TRUE(secondBox->GetPosition() == Offset(END_ALIGN_SIZE, CENTER_SPACE_SIZE + SMALL_BOX)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(0, CENTER_SPACE_SIZE + SMALL_BOX + MEDIUM_BOX)); +} + +/** + * @tc.name: RenderColumnLayout014 + * @tc.desc: Verify the column component with main(center) and cross(stretch) works fine. + * @tc.type: FUNC + * @tc.require: AR000DAQTK + * @tc.author: wangzezhen + */ +HWTEST_F(RenderColumnTest, RenderColumnLayout014, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderColumnTest RenderColumnLayout014 start"; + /** + * @tc.steps: step1. construct the RenderNode tree, column are set as center-stretch. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr column = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::CENTER, FlexAlign::STRETCH); + column->Attach(mockContext); + root->AddChild(column); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + column->AddChild(firstBox); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + column->AddChild(secondBox); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + thirdBox->Attach(mockContext); + column->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->PerformLayout(); + EXPECT_TRUE(firstBox->GetPosition() == Offset(0, CENTER_SPACE_SIZE)); + EXPECT_TRUE(secondBox->GetPosition() == Offset(0.0, CENTER_SPACE_SIZE + SMALL_BOX)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(0.0, CENTER_SPACE_SIZE + SMALL_BOX + MEDIUM_BOX)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(LARGE_BOX, SMALL_BOX)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(LARGE_BOX, MEDIUM_BOX)); + EXPECT_TRUE(thirdBox->GetLayoutSize() == Size(LARGE_BOX, LARGE_BOX)); +} + +/** + * @tc.name: RenderColumnLayout015 + * @tc.desc: Verify the column component with main(end) and cross(center) works fine. + * @tc.type: FUNC + * @tc.require: AR000DAQTK + * @tc.author: wangzezhen + */ +HWTEST_F(RenderColumnTest, RenderColumnLayout015, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderColumnTest RenderColumnLayout015 start"; + /** + * @tc.steps: step1. construct the RenderNode tree, column are set as end-center. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr column = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::FLEX_END, FlexAlign::CENTER); + column->Attach(mockContext); + root->AddChild(column); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + column->AddChild(firstBox); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + column->AddChild(secondBox); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + thirdBox->Attach(mockContext); + column->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->PerformLayout(); + EXPECT_TRUE(firstBox->GetPosition() == Offset(CENTER_ALIGN_SIZE + CENTER_ALIGN_SIZE, END_SPACE_SIZE)); + EXPECT_TRUE(secondBox->GetPosition() == Offset(CENTER_ALIGN_SIZE, END_SPACE_SIZE + SMALL_BOX)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(0.0, END_SPACE_SIZE + SMALL_BOX + MEDIUM_BOX)); +} + +/** + * @tc.name: RenderColumnLayout016 + * @tc.desc: Verify the column component with main(end) and cross(end) works fine. + * @tc.type: FUNC + * @tc.require: AR000DAQTK + * @tc.author: wangzezhen + */ +HWTEST_F(RenderColumnTest, RenderColumnLayout016, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderColumnTest RenderColumnLayout016 start"; + /** + * @tc.steps: step1. construct the RenderNode tree, column are set as end-end. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr column = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::FLEX_END, FlexAlign::FLEX_END); + column->Attach(mockContext); + root->AddChild(column); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + column->AddChild(firstBox); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + column->AddChild(secondBox); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + thirdBox->Attach(mockContext); + column->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->PerformLayout(); + EXPECT_TRUE(firstBox->GetPosition() == Offset(END_ALIGN_SIZE + END_ALIGN_SIZE, END_SPACE_SIZE)); + EXPECT_TRUE(secondBox->GetPosition() == Offset(END_ALIGN_SIZE, END_SPACE_SIZE + SMALL_BOX)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(0.0, END_SPACE_SIZE + SMALL_BOX + MEDIUM_BOX)); +} + +/** + * @tc.name: RenderColumnLayout017 + * @tc.desc: Verify the column component with main(end) and cross(stretch) works fine. + * @tc.type: FUNC + * @tc.require: AR000DAQTK + * @tc.author: wangzezhen + */ +HWTEST_F(RenderColumnTest, RenderColumnLayout017, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderColumnTest RenderColumnLayout017 start"; + /** + * @tc.steps: step1. construct the RenderNode tree, column are set as end-stretch. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr column = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::FLEX_END, FlexAlign::STRETCH); + column->Attach(mockContext); + root->AddChild(column); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + column->AddChild(firstBox); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + column->AddChild(secondBox); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + thirdBox->Attach(mockContext); + column->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->PerformLayout(); + EXPECT_TRUE(firstBox->GetPosition() == Offset(0, END_SPACE_SIZE)); + EXPECT_TRUE(secondBox->GetPosition() == Offset(0.0, END_SPACE_SIZE + SMALL_BOX)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(0.0, END_SPACE_SIZE + SMALL_BOX + MEDIUM_BOX)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(LARGE_BOX, SMALL_BOX)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(LARGE_BOX, MEDIUM_BOX)); + EXPECT_TRUE(thirdBox->GetLayoutSize() == Size(LARGE_BOX, LARGE_BOX)); +} + + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/flex/render_flex_item_test.cpp b/frameworks/core/components/test/unittest/flex/render_flex_item_test.cpp new file mode 100644 index 00000000..6fee1957 --- /dev/null +++ b/frameworks/core/components/test/unittest/flex/render_flex_item_test.cpp @@ -0,0 +1,2744 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/log/log.h" +#include "base/utils/utils.h" +#include "core/components/flex/flex_item_component.h" +#include "core/components/test/unittest/flex/flex_test_utils.h" +#include "core/components/test/unittest/mock/mock_render_common.h" +#include "core/components/text/text_component.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +constexpr double TEST_FLEX_BASIS = 400.0; +constexpr double TEST_FLEX_GROW = 2.0; +constexpr double TEST_FLEX_SHRINK = 2.0; +constexpr double SMALL_BOX = 100.0; +constexpr double MEDIUM_BOX = 200.0; +constexpr double THIRD_LAEGEST_BOX = 500.0; +constexpr double LARGE_BOX = 1000.0; +constexpr double SUPER_BOX = 3000.0; +constexpr double RECT_WIDTH = 1080.0; +constexpr double RECT_HEIGHT = 2244.0; +constexpr double GROW_WIDTH = 490.0; +constexpr double GROW_HEIGHT = 1072.0; +constexpr double ONE_THIRD_HEIGHT = 748.0; +constexpr double SHRINK_HEIGHT = 1022.0; + +} // namespace + +class RenderFlexItemTest : public testing::Test { +public: + static void SetUpTestCase() + { + GTEST_LOG_(INFO) << "RenderFlexItemTest SetUpTestCase"; + } + + static void TearDownTestCase() + { + GTEST_LOG_(INFO) << "RenderFlexItemTest TearDownTestCase"; + } + + void SetUp() {} + void TearDown() {} +}; + +/** + * @tc.name: FlexItemBasis001 + * @tc.desc: verify the row with two flex children works fine, where the flex basis are set in the flex children. + * @tc.type: FUNC + * @tc.require: AR000DAR1R + * @tc.author: yangfan + */ +HWTEST_F(RenderFlexItemTest, FlexItemBasis001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemBasis001 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex basis property to the flex items + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr row = + FlexTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::FLEX_START, FlexAlign::FLEX_START); + root->AddChild(row); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(TEST_FLEX_BASIS, 0, 0); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + row->AddChild(firstFlexItem); + RefPtr secondFlexItem = FlexTestUtils::CreateRenderFlexItem(TEST_FLEX_BASIS, 0, 0); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + secondFlexItem->AddChild(secondBox); + row->AddChild(secondFlexItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the size of the flex items are set as basis, the positions are set correctly + */ + root->Attach(mockContext); + row->Attach(mockContext); + firstFlexItem->Attach(mockContext); + secondFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition().IsZero()); + EXPECT_TRUE(secondFlexItem->GetPosition() == Offset(TEST_FLEX_BASIS, 0)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(TEST_FLEX_BASIS, SMALL_BOX)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(TEST_FLEX_BASIS, MEDIUM_BOX)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemBasis001 stop"; +} + +/** + * @tc.name: FlexItemBasis002 + * @tc.desc: verify the row with one flex child and one normal child works fine, where the flex basis are set in the + * flex children. + * @tc.type: FUNC + * @tc.require: AR000DAR1R + * @tc.author: yangfan + */ +HWTEST_F(RenderFlexItemTest, FlexItemBasis002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemBasis002 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex basis property to the flex item + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr row = + FlexTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::FLEX_START, FlexAlign::FLEX_START); + root->AddChild(row); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(TEST_FLEX_BASIS, 0, 0); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + row->AddChild(firstFlexItem); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + row->AddChild(secondBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly, the sizes are set correctly + */ + root->Attach(mockContext); + row->Attach(mockContext); + firstFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition().IsZero()); + EXPECT_TRUE(secondBox->GetPosition() == Offset(TEST_FLEX_BASIS, 0)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(TEST_FLEX_BASIS, SMALL_BOX)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(MEDIUM_BOX, MEDIUM_BOX)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemBasis002 stop"; +} + +/** + * @tc.name: FlexItemBasis003 + * @tc.desc: verify the column with two flex children works fine, where the flex basis are set in the flex children. + * @tc.type: FUNC + * @tc.require: AR000DAR1R + * @tc.author: yangfan + */ +HWTEST_F(RenderFlexItemTest, FlexItemBasis003, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemBasis003 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex basis property to the flex items + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr column = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::FLEX_START, FlexAlign::FLEX_START); + root->AddChild(column); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(TEST_FLEX_BASIS, 0, 0); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + column->AddChild(firstFlexItem); + RefPtr secondFlexItem = FlexTestUtils::CreateRenderFlexItem(TEST_FLEX_BASIS, 0, 0); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + secondFlexItem->AddChild(secondBox); + column->AddChild(secondFlexItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the size of the flex items are set as basis, the positions are set correctly + */ + root->Attach(mockContext); + column->Attach(mockContext); + firstFlexItem->Attach(mockContext); + secondFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition().IsZero()); + EXPECT_TRUE(secondFlexItem->GetPosition() == Offset(0, TEST_FLEX_BASIS)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(SMALL_BOX, TEST_FLEX_BASIS)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(MEDIUM_BOX, TEST_FLEX_BASIS)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemBasis003 stop"; +} + +/** + * @tc.name: FlexItemBasis004 + * @tc.desc: verify the column with one flex child and one normal child works fine, where the flex basis are set in the + * flex children. + * @tc.type: FUNC + * @tc.require: AR000DAR1R + * @tc.author: yangfan + */ +HWTEST_F(RenderFlexItemTest, FlexItemBasis004, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemBasis004 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex basis property to the flex item + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr column = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::FLEX_START, FlexAlign::FLEX_START); + root->AddChild(column); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(TEST_FLEX_BASIS, 0, 0); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + column->AddChild(firstFlexItem); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + column->AddChild(secondBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly, the sizes are set correctly + */ + root->Attach(mockContext); + column->Attach(mockContext); + firstFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition().IsZero()); + EXPECT_TRUE(secondBox->GetPosition() == Offset(0, TEST_FLEX_BASIS)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(SMALL_BOX, TEST_FLEX_BASIS)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(MEDIUM_BOX, MEDIUM_BOX)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemBasis004 stop"; +} + +/** + * @tc.name: FlexItemGrow001 + * @tc.desc: verify the row with two flex children works fine, where the flex grow are set in the flex children. + * @tc.type: FUNC + * @tc.require: AR000DAR1P + * @tc.author: yangfan + */ +HWTEST_F(RenderFlexItemTest, FlexItemGrow001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemGrow001 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex grow property to the flex items + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr row = + FlexTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::FLEX_START, FlexAlign::FLEX_START); + root->AddChild(row); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(0, TEST_FLEX_GROW, 0); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + row->AddChild(firstFlexItem); + RefPtr secondFlexItem = FlexTestUtils::CreateRenderFlexItem(0, TEST_FLEX_GROW, 0); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + secondFlexItem->AddChild(secondBox); + row->AddChild(secondFlexItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the size of the flex items are set correctly, the positions are set correctly + */ + root->Attach(mockContext); + row->Attach(mockContext); + firstFlexItem->Attach(mockContext); + secondFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition().IsZero()); + EXPECT_TRUE(secondFlexItem->GetPosition() == Offset(GROW_WIDTH, 0)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(GROW_WIDTH, SMALL_BOX)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(RECT_WIDTH - GROW_WIDTH, MEDIUM_BOX)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemGrow001 stop"; +} + +/** + * @tc.name: FlexItemGrow002 + * @tc.desc: verify the row with one flex child and one normal child works fine, where the flex grow are set in the flex + * children. + * @tc.type: FUNC + * @tc.require: AR000DAR1P + * @tc.author: yangfan + */ +HWTEST_F(RenderFlexItemTest, FlexItemGrow002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemGrow002 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex grow property to the single flex item + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr row = + FlexTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::FLEX_START, FlexAlign::FLEX_START); + root->AddChild(row); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(0, TEST_FLEX_GROW, 0); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + row->AddChild(firstFlexItem); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + row->AddChild(secondBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly, the sizes are set correctly + */ + root->Attach(mockContext); + row->Attach(mockContext); + firstFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition().IsZero()); + EXPECT_TRUE(secondBox->GetPosition() == Offset(RECT_WIDTH - MEDIUM_BOX, 0)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(RECT_WIDTH - MEDIUM_BOX, SMALL_BOX)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(MEDIUM_BOX, MEDIUM_BOX)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemGrow002 stop"; +} + +/** + * @tc.name: FlexItemGrow003 + * @tc.desc: verify the column with two flex children works fine, where the flex grow are set in the flex children. + * @tc.type: FUNC + * @tc.require: AR000DAR1P + * @tc.author: yangfan + */ +HWTEST_F(RenderFlexItemTest, FlexItemGrow003, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemGrow003 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex grow property to the flex items + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr column = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::FLEX_START, FlexAlign::FLEX_START); + root->AddChild(column); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(0, TEST_FLEX_GROW, 0); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + column->AddChild(firstFlexItem); + RefPtr secondFlexItem = FlexTestUtils::CreateRenderFlexItem(0, TEST_FLEX_GROW, 0); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + secondFlexItem->AddChild(secondBox); + column->AddChild(secondFlexItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the size of the flex items are set correctly, the positions are set correctly + */ + root->Attach(mockContext); + column->Attach(mockContext); + firstFlexItem->Attach(mockContext); + secondFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition().IsZero()); + EXPECT_TRUE(secondFlexItem->GetPosition() == Offset(0, GROW_HEIGHT)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(SMALL_BOX, GROW_HEIGHT)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(MEDIUM_BOX, RECT_HEIGHT - GROW_HEIGHT)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemGrow003 stop"; +} + +/** + * @tc.name: FlexItemGrow004 + * @tc.desc: verify the column with one flex child and one normal child works fine, where the flex grow are set in the + * flex children. + * @tc.type: FUNC + * @tc.require: AR000DAR1P + * @tc.author: yangfan + */ +HWTEST_F(RenderFlexItemTest, FlexItemGrow004, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemGrow004 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex grow property to the flex items + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr column = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::FLEX_START, FlexAlign::FLEX_START); + root->AddChild(column); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(0, TEST_FLEX_GROW, 0); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + column->AddChild(firstFlexItem); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + column->AddChild(secondBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly, the sizes are set correctly + */ + root->Attach(mockContext); + column->Attach(mockContext); + firstFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition().IsZero()); + EXPECT_TRUE(secondBox->GetPosition() == Offset(0, RECT_HEIGHT - MEDIUM_BOX)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(SMALL_BOX, RECT_HEIGHT - MEDIUM_BOX)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(MEDIUM_BOX, MEDIUM_BOX)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemGrow004 stop"; +} + +/** + * @tc.name: FlexItemShrink001 + * @tc.desc: verify the row with two flex children works fine, where the flex shrink are set in the flex children. + * @tc.type: FUNC + * @tc.require: AR000DAR1Q + * @tc.author: yangfan + */ +HWTEST_F(RenderFlexItemTest, FlexItemShrink001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemShrink001 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex shrink property to the flex items + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr row = + FlexTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::FLEX_START, FlexAlign::FLEX_START); + root->AddChild(row); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, TEST_FLEX_SHRINK); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + row->AddChild(firstFlexItem); + RefPtr secondFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, TEST_FLEX_SHRINK); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + secondBox->Attach(mockContext); + secondFlexItem->AddChild(secondBox); + row->AddChild(secondFlexItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the size of the flex items are set correctly, the positions are set correctly + */ + root->Attach(mockContext); + row->Attach(mockContext); + firstFlexItem->Attach(mockContext); + secondFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition().IsZero()); + EXPECT_TRUE(secondFlexItem->GetPosition() == Offset(RECT_WIDTH / 2.0, 0)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(RECT_WIDTH / 2.0, LARGE_BOX)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(RECT_WIDTH / 2.0, LARGE_BOX)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemShrink001 stop"; +} + +/** + * @tc.name: FlexItemShrink002 + * @tc.desc: verify the row with one flex child and one normal child works fine, where the flex shrink are set in the + * flex children. + * @tc.type: FUNC + * @tc.require: AR000DAR1Q + * @tc.author: yangfan + */ +HWTEST_F(RenderFlexItemTest, FlexItemShrink002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemShrink002 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex shrink property to the single flex item + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr row = + FlexTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::FLEX_START, FlexAlign::FLEX_START); + root->AddChild(row); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, TEST_FLEX_SHRINK); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + row->AddChild(firstFlexItem); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + row->AddChild(secondBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly, the sizes are set correctly + */ + root->Attach(mockContext); + row->Attach(mockContext); + firstFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition().IsZero()); + EXPECT_TRUE(secondBox->GetPosition() == Offset(RECT_WIDTH - MEDIUM_BOX, 0)); + EXPECT_TRUE(firstFlexItem->GetLayoutSize() == Size(RECT_WIDTH - MEDIUM_BOX, LARGE_BOX)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(RECT_WIDTH - MEDIUM_BOX, LARGE_BOX)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(MEDIUM_BOX, MEDIUM_BOX)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemShrink002 stop"; +} + +/** + * @tc.name: FlexItemShrink003 + * @tc.desc: verify the column with three flex children works fine, where the flex shrink are set in the flex children. + * @tc.type: FUNC + * @tc.require: AR000DAR1Q + * @tc.author: yangfan + */ +HWTEST_F(RenderFlexItemTest, FlexItemShrink003, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemShrink003 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex shrink property to the flex items + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr column = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::FLEX_START, FlexAlign::FLEX_START); + root->AddChild(column); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, TEST_FLEX_SHRINK); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + column->AddChild(firstFlexItem); + RefPtr secondFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, TEST_FLEX_SHRINK); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + secondBox->Attach(mockContext); + secondFlexItem->AddChild(secondBox); + column->AddChild(secondFlexItem); + RefPtr thirdFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, TEST_FLEX_SHRINK); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + thirdBox->Attach(mockContext); + thirdFlexItem->AddChild(thirdBox); + column->AddChild(thirdFlexItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the size of the flex items are set correctly, the positions are set correctly + */ + root->Attach(mockContext); + column->Attach(mockContext); + firstFlexItem->Attach(mockContext); + secondFlexItem->Attach(mockContext); + thirdFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition().IsZero()); + EXPECT_TRUE(secondFlexItem->GetPosition() == Offset(0, ONE_THIRD_HEIGHT)); + EXPECT_TRUE(thirdFlexItem->GetPosition() == Offset(0, ONE_THIRD_HEIGHT + ONE_THIRD_HEIGHT)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(LARGE_BOX, ONE_THIRD_HEIGHT)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(LARGE_BOX, ONE_THIRD_HEIGHT)); + EXPECT_TRUE(thirdBox->GetLayoutSize() == Size(LARGE_BOX, ONE_THIRD_HEIGHT)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemShrink003 stop"; +} + +/** + * @tc.name: FlexItemShrink004 + * @tc.desc: verify the column with two flex children and one normal child works fine, where the flex shrink are set in + * the flex children. + * @tc.type: FUNC + * @tc.require: AR000DAR1Q + * @tc.author: yangfan + */ +HWTEST_F(RenderFlexItemTest, FlexItemShrink004, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemShrink004 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex shrink property to the flex items + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr column = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::FLEX_START, FlexAlign::FLEX_START); + root->AddChild(column); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, TEST_FLEX_SHRINK); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SUPER_BOX, SUPER_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + column->AddChild(firstFlexItem); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + column->AddChild(secondBox); + RefPtr thirdFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, TEST_FLEX_SHRINK); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(SUPER_BOX, SUPER_BOX); + thirdBox->Attach(mockContext); + thirdFlexItem->AddChild(thirdBox); + column->AddChild(thirdFlexItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly, the sizes are set correctly + */ + root->Attach(mockContext); + column->Attach(mockContext); + firstFlexItem->Attach(mockContext); + thirdFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition().IsZero()); + EXPECT_TRUE(secondBox->GetPosition() == Offset(0, SHRINK_HEIGHT)); + EXPECT_TRUE(thirdFlexItem->GetPosition() == Offset(0, SHRINK_HEIGHT + MEDIUM_BOX)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(RECT_WIDTH, SHRINK_HEIGHT)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(MEDIUM_BOX, MEDIUM_BOX)); + EXPECT_TRUE(thirdBox->GetLayoutSize() == Size(RECT_WIDTH, RECT_HEIGHT - SHRINK_HEIGHT - MEDIUM_BOX)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemShrink004 stop"; +} + +/** + * @tc.name: FlexItemBasisGrow001 + * @tc.desc: verify the row with two flex children works fine, where the flex basis and grow are set in the flex + * children. + * @tc.type: FUNC + * @tc.require: AR000DAR1P + * @tc.author: yangfan + */ +HWTEST_F(RenderFlexItemTest, FlexItemBasisGrow001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemBasisGrow001 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex basis and grow property to the flex items + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr row = + FlexTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::FLEX_START, FlexAlign::FLEX_START); + root->AddChild(row); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(TEST_FLEX_BASIS, TEST_FLEX_GROW, 0); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + row->AddChild(firstFlexItem); + RefPtr secondFlexItem = FlexTestUtils::CreateRenderFlexItem(TEST_FLEX_BASIS, TEST_FLEX_GROW, 0); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + secondFlexItem->AddChild(secondBox); + row->AddChild(secondFlexItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the size of the flex items are set correctly, the positions are set correctly + */ + root->Attach(mockContext); + row->Attach(mockContext); + firstFlexItem->Attach(mockContext); + secondFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition() == Offset(0, 0)); + EXPECT_TRUE(secondFlexItem->GetPosition() == Offset(RECT_WIDTH / 2.0, 0)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(RECT_WIDTH / 2.0, SMALL_BOX)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(RECT_WIDTH / 2.0, MEDIUM_BOX)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemBasisGrow001 stop"; +} + +/** + * @tc.name: FlexItemBasisGrow002 + * @tc.desc: verify the row with one flex child and one normal child works fine, where the flex grow and basis are set + * in the flex children. + * @tc.type: FUNC + * @tc.require: AR000DAR1P + * @tc.author: yangfan + */ +HWTEST_F(RenderFlexItemTest, FlexItemBasisGrow002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemBasisGrow002 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex grow and basis property to the single flex item + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr row = + FlexTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::FLEX_START, FlexAlign::FLEX_START); + root->AddChild(row); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(TEST_FLEX_BASIS, TEST_FLEX_GROW, 0); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + row->AddChild(firstFlexItem); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + row->AddChild(secondBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly, the sizes are set correctly + */ + root->Attach(mockContext); + row->Attach(mockContext); + firstFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition().IsZero()); + EXPECT_TRUE(secondBox->GetPosition() == Offset(RECT_WIDTH - MEDIUM_BOX, 0)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(RECT_WIDTH - MEDIUM_BOX, SMALL_BOX)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(MEDIUM_BOX, MEDIUM_BOX)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemBasisGrow002 stop"; +} + +/** + * @tc.name: FlexItemBasisGrow003 + * @tc.desc: verify the column with two flex children works fine, where the flex grow are set in the flex children. + * @tc.type: FUNC + * @tc.require: AR000DAR1P + * @tc.author: yangfan + */ +HWTEST_F(RenderFlexItemTest, FlexItemBasisGrow003, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemBasisGrow003 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex grow property to the flex items + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr column = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::FLEX_START, FlexAlign::FLEX_START); + root->AddChild(column); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(TEST_FLEX_BASIS, TEST_FLEX_GROW, 0); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + column->AddChild(firstFlexItem); + RefPtr secondFlexItem = FlexTestUtils::CreateRenderFlexItem(TEST_FLEX_BASIS, TEST_FLEX_GROW, 0); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + secondFlexItem->AddChild(secondBox); + column->AddChild(secondFlexItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the size of the flex items are set correctly, the positions are set correctly + */ + root->Attach(mockContext); + column->Attach(mockContext); + firstFlexItem->Attach(mockContext); + secondFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition().IsZero()); + EXPECT_TRUE(secondFlexItem->GetPosition() == Offset(0, RECT_HEIGHT / 2.0)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(SMALL_BOX, RECT_HEIGHT / 2.0)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(MEDIUM_BOX, RECT_HEIGHT / 2.0)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemBasisGrow003 stop"; +} + +/** + * @tc.name: FlexItemBasisGrow004 + * @tc.desc: verify the column with one flex child and one normal child works fine, where the flex grow are set in the + * flex children. + * @tc.type: FUNC + * @tc.require: AR000DAR1P + * @tc.author: yangfan + */ +HWTEST_F(RenderFlexItemTest, FlexItemBasisGrow004, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemBasisGrow004 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex grow property to the flex items + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr column = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::FLEX_START, FlexAlign::FLEX_START); + root->AddChild(column); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(TEST_FLEX_BASIS, TEST_FLEX_GROW, 0); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + column->AddChild(firstFlexItem); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + column->AddChild(secondBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly, the sizes are set correctly + */ + root->Attach(mockContext); + column->Attach(mockContext); + firstFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition().IsZero()); + EXPECT_TRUE(secondBox->GetPosition() == Offset(0, RECT_HEIGHT - MEDIUM_BOX)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(SMALL_BOX, RECT_HEIGHT - MEDIUM_BOX)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(MEDIUM_BOX, MEDIUM_BOX)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemBasisGrow004 stop"; +} + +/** + * @tc.name: FlexItemBasisShrink001 + * @tc.desc: verify the row with two flex children works fine, where the flex shrink are set in the flex children. + * @tc.type: FUNC + * @tc.require: AR000DAR1Q + * @tc.author: yangfan + */ +HWTEST_F(RenderFlexItemTest, FlexItemBasisShrink001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemBasisShrink001 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex shrink property to the flex items + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr row = + FlexTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::FLEX_START, FlexAlign::FLEX_START); + root->AddChild(row); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(SUPER_BOX, 0, TEST_FLEX_SHRINK); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + row->AddChild(firstFlexItem); + RefPtr secondFlexItem = FlexTestUtils::CreateRenderFlexItem(SUPER_BOX, 0, TEST_FLEX_SHRINK); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + secondBox->Attach(mockContext); + secondFlexItem->AddChild(secondBox); + row->AddChild(secondFlexItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the size of the flex items are set correctly, the positions are set correctly + */ + root->Attach(mockContext); + row->Attach(mockContext); + firstFlexItem->Attach(mockContext); + secondFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition().IsZero()); + EXPECT_TRUE(secondFlexItem->GetPosition() == Offset(RECT_WIDTH / 2.0, 0)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(RECT_WIDTH / 2.0, LARGE_BOX)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(RECT_WIDTH / 2.0, LARGE_BOX)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemBasisShrink001 stop"; +} + +/** + * @tc.name: FlexItemBasisShrink002 + * @tc.desc: verify the row with one flex child and one normal child works fine, where the flex shrink are set in the + * flex children. + * @tc.type: FUNC + * @tc.require: AR000DAR1Q + * @tc.author: yangfan + */ +HWTEST_F(RenderFlexItemTest, FlexItemBasisShrink002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemBasisShrink002 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex shrink property to the single flex item + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr row = + FlexTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::FLEX_START, FlexAlign::FLEX_START); + root->AddChild(row); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(SUPER_BOX, 0, TEST_FLEX_SHRINK); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + row->AddChild(firstFlexItem); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + row->AddChild(secondBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly, the sizes are set correctly + */ + root->Attach(mockContext); + row->Attach(mockContext); + firstFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition().IsZero()); + EXPECT_TRUE(secondBox->GetPosition() == Offset(RECT_WIDTH - MEDIUM_BOX, 0)); + EXPECT_TRUE(firstFlexItem->GetLayoutSize() == Size(RECT_WIDTH - MEDIUM_BOX, LARGE_BOX)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(RECT_WIDTH - MEDIUM_BOX, LARGE_BOX)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(MEDIUM_BOX, MEDIUM_BOX)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemBasisShrink002 stop"; +} + +/** + * @tc.name: FlexItemBasisShrink003 + * @tc.desc: verify the column with three flex children works fine, where the flex shrink are set in the flex children. + * @tc.type: FUNC + * @tc.require: AR000DAR1Q + * @tc.author: yangfan + */ +HWTEST_F(RenderFlexItemTest, FlexItemBasisShrink003, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemBasisShrink003 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex shrink property to the flex items + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr column = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::FLEX_START, FlexAlign::FLEX_START); + root->AddChild(column); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(SUPER_BOX, 0, TEST_FLEX_SHRINK); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + column->AddChild(firstFlexItem); + RefPtr secondFlexItem = FlexTestUtils::CreateRenderFlexItem(SUPER_BOX, 0, TEST_FLEX_SHRINK); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + secondBox->Attach(mockContext); + secondFlexItem->AddChild(secondBox); + column->AddChild(secondFlexItem); + RefPtr thirdFlexItem = FlexTestUtils::CreateRenderFlexItem(SUPER_BOX, 0, TEST_FLEX_SHRINK); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + thirdBox->Attach(mockContext); + thirdFlexItem->AddChild(thirdBox); + column->AddChild(thirdFlexItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the size of the flex items are set correctly, the positions are set correctly + */ + root->Attach(mockContext); + column->Attach(mockContext); + firstFlexItem->Attach(mockContext); + secondFlexItem->Attach(mockContext); + thirdFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition().IsZero()); + EXPECT_TRUE(secondFlexItem->GetPosition() == Offset(0, ONE_THIRD_HEIGHT)); + EXPECT_TRUE(thirdFlexItem->GetPosition() == Offset(0, ONE_THIRD_HEIGHT + ONE_THIRD_HEIGHT)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(LARGE_BOX, ONE_THIRD_HEIGHT)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(LARGE_BOX, ONE_THIRD_HEIGHT)); + EXPECT_TRUE(thirdBox->GetLayoutSize() == Size(LARGE_BOX, ONE_THIRD_HEIGHT)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemBasisShrink003 stop"; +} + +/** + * @tc.name: FlexItemBasisShrink004 + * @tc.desc: verify the column with two flex children and one normal child works fine, where the flex shrink are set in + * the flex children. + * @tc.type: FUNC + * @tc.require: AR000DAR1Q + * @tc.author: yangfan + */ +HWTEST_F(RenderFlexItemTest, FlexItemBasisShrink004, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemBasisShrink004 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex shrink property to the flex items + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr column = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::FLEX_START, FlexAlign::FLEX_START); + root->AddChild(column); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(SUPER_BOX, 0, TEST_FLEX_SHRINK); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + column->AddChild(firstFlexItem); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + column->AddChild(secondBox); + RefPtr thirdFlexItem = FlexTestUtils::CreateRenderFlexItem(SUPER_BOX, 0, TEST_FLEX_SHRINK); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(SUPER_BOX, SUPER_BOX); + thirdBox->Attach(mockContext); + thirdFlexItem->AddChild(thirdBox); + column->AddChild(thirdFlexItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly, the sizes are set correctly + */ + root->Attach(mockContext); + column->Attach(mockContext); + firstFlexItem->Attach(mockContext); + thirdFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition().IsZero()); + EXPECT_TRUE(secondBox->GetPosition() == Offset(0, (RECT_HEIGHT - MEDIUM_BOX) / 2.0)); + EXPECT_TRUE(thirdFlexItem->GetPosition() == Offset(0, ((RECT_HEIGHT - MEDIUM_BOX) / 2.0 + MEDIUM_BOX))); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(LARGE_BOX, (RECT_HEIGHT - MEDIUM_BOX) / 2.0)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(MEDIUM_BOX, MEDIUM_BOX)); + EXPECT_TRUE(thirdBox->GetLayoutSize() == Size(RECT_WIDTH, (RECT_HEIGHT - MEDIUM_BOX) / 2.0)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemBasisShrink004 stop"; +} + +/** + * @tc.name: RenderFlexItemUpdate001 + * @tc.desc: Verify the Update Interface of RenderFlexItem does not work for other components + * @tc.type: FUNC + * @tc.require: AR000DAR1Q + * @tc.author: yangfan + */ +HWTEST_F(RenderFlexItemTest, RenderFlexItemUpdate001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest RenderFlexItemUpdate001 start"; + /** + * @tc.steps: step1. construct Text Component and RenderFlex. + */ + RefPtr text = AceType::MakeRefPtr("Hi Ace"); + RefPtr renderFlex = AceType::MakeRefPtr(); + /** + * @tc.steps: step2. call the Update interface of RenderFlex + * @tc.expected: step2. renderFlex are not set need layout + */ + renderFlex->Update(text); + EXPECT_TRUE(!renderFlex->NeedLayout()); + GTEST_LOG_(INFO) << "RenderFlexItemTest RenderFlexItemUpdate001 stop"; +} + +/** + * @tc.name: RenderFlexItemUpdate002 + * @tc.desc: Verify that RenderFlexItem works for flex item component. + * @tc.type: FUNC + * @tc.require: AR000DAR1Q + * @tc.author: yangfan + */ +HWTEST_F(RenderFlexItemTest, RenderFlexItemUpdate002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest RenderFlexItemUpdate002 start"; + /** + * @tc.steps: step1. construct flex item component and RenderFlexItem. + */ + RefPtr text = AceType::MakeRefPtr("Hi Ace"); + RefPtr flex = AceType::MakeRefPtr(1, 1, 1, text); + RefPtr renderFlex = AceType::MakeRefPtr(); + /** + * @tc.steps: step2. call Update interface of renderFlexItem + * @tc.expected: step2. renderFlex are set needLayout + */ + renderFlex->Update(flex); + EXPECT_TRUE(renderFlex->NeedLayout()); + GTEST_LOG_(INFO) << "RenderFlexItemTest RenderFlexItemUpdate002 stop"; +} + +/** + * @tc.name: FlexItemAlignSelf001 + * @tc.desc: verify the column with four flex children works fine, + * where the flex alignSelf are set in the flex children. + * @tc.type: FUNC + * @tc.require: AR000FL29E + * @tc.author: wangzezhen + */ +HWTEST_F(RenderFlexItemTest, FlexItemAlignSelf001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf001 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex alignSelf property to the flex items. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr column = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::FLEX_START, FlexAlign::FLEX_START); + root->AddChild(column); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + firstFlexItem->SetAlignSelf(FlexAlign::FLEX_START); + column->AddChild(firstFlexItem); + RefPtr secondFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + secondFlexItem->AddChild(secondBox); + secondFlexItem->SetAlignSelf(FlexAlign::CENTER); + column->AddChild(secondFlexItem); + RefPtr thirdFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(THIRD_LAEGEST_BOX, THIRD_LAEGEST_BOX); + thirdBox->Attach(mockContext); + thirdFlexItem->AddChild(thirdBox); + thirdFlexItem->SetAlignSelf(FlexAlign::FLEX_END); + column->AddChild(thirdFlexItem); + RefPtr forthFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr forthBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + forthBox->Attach(mockContext); + forthFlexItem->AddChild(forthBox); + column->AddChild(forthFlexItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions are set correctly + */ + root->Attach(mockContext); + column->Attach(mockContext); + firstFlexItem->Attach(mockContext); + secondFlexItem->Attach(mockContext); + thirdFlexItem->Attach(mockContext); + forthFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition().IsZero()); + EXPECT_TRUE(secondFlexItem->GetPosition() == Offset(LARGE_BOX/2 - MEDIUM_BOX/2, SMALL_BOX)); + EXPECT_TRUE(thirdFlexItem->GetPosition() == Offset(LARGE_BOX - THIRD_LAEGEST_BOX, SMALL_BOX + MEDIUM_BOX)); + EXPECT_TRUE(forthFlexItem->GetPosition() == Offset(0, SMALL_BOX + MEDIUM_BOX + THIRD_LAEGEST_BOX)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(SMALL_BOX, SMALL_BOX)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(MEDIUM_BOX, MEDIUM_BOX)); + EXPECT_TRUE(thirdBox->GetLayoutSize() == Size(THIRD_LAEGEST_BOX, THIRD_LAEGEST_BOX)); + EXPECT_TRUE(forthBox->GetLayoutSize() == Size(LARGE_BOX, LARGE_BOX)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf001 stop"; +} + +/** + * @tc.name: FlexItemAlignSelf002 + * @tc.desc: verify the column with two flex children works fine, where the flex alignSelf are set in the flex children. + * @tc.type: FUNC + * @tc.require: AR000FL29E + * @tc.author: wangzezhen + */ +HWTEST_F(RenderFlexItemTest, FlexItemAlignSelf002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf002 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex alignSelf property to the flex items. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr column = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::CENTER, FlexAlign::FLEX_START); + root->AddChild(column); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + firstFlexItem->SetAlignSelf(FlexAlign::FLEX_START); + column->AddChild(firstFlexItem); + RefPtr secondFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + secondFlexItem->AddChild(secondBox); + secondFlexItem->SetAlignSelf(FlexAlign::CENTER); + column->AddChild(secondFlexItem); + RefPtr thirdFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(THIRD_LAEGEST_BOX, THIRD_LAEGEST_BOX); + thirdBox->Attach(mockContext); + thirdFlexItem->AddChild(thirdBox); + thirdFlexItem->SetAlignSelf(FlexAlign::FLEX_END); + column->AddChild(thirdFlexItem); + RefPtr forthFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr forthBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + forthBox->Attach(mockContext); + forthFlexItem->AddChild(forthBox); + column->AddChild(forthFlexItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions are set correctly + */ + root->Attach(mockContext); + column->Attach(mockContext); + firstFlexItem->Attach(mockContext); + secondFlexItem->Attach(mockContext); + thirdFlexItem->Attach(mockContext); + forthFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition() == Offset(0, 222)); + EXPECT_TRUE(secondFlexItem->GetPosition() == Offset(LARGE_BOX/2 - MEDIUM_BOX/2, 222 + SMALL_BOX)); + EXPECT_TRUE(thirdFlexItem->GetPosition() == Offset(LARGE_BOX - THIRD_LAEGEST_BOX, 222 + SMALL_BOX + MEDIUM_BOX)); + EXPECT_TRUE(forthFlexItem->GetPosition() == Offset(0, 222 + SMALL_BOX + MEDIUM_BOX + THIRD_LAEGEST_BOX)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(SMALL_BOX, SMALL_BOX)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(MEDIUM_BOX, MEDIUM_BOX)); + EXPECT_TRUE(thirdBox->GetLayoutSize() == Size(THIRD_LAEGEST_BOX, THIRD_LAEGEST_BOX)); + EXPECT_TRUE(forthBox->GetLayoutSize() == Size(LARGE_BOX, LARGE_BOX)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf002 stop"; +} + +/** + * @tc.name: FlexItemAlignSelf003 + * @tc.desc: verify the column with two flex children works fine, where the flex alignSelf are set in the flex children. + * @tc.type: FUNC + * @tc.require: AR000FL29E + * @tc.author: wangzezhen + */ +HWTEST_F(RenderFlexItemTest, FlexItemAlignSelf003, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf003 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex alignSelf property to the flex items. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr column = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::CENTER, FlexAlign::FLEX_END); + root->AddChild(column); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + firstFlexItem->SetAlignSelf(FlexAlign::FLEX_START); + column->AddChild(firstFlexItem); + RefPtr secondFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + secondFlexItem->AddChild(secondBox); + secondFlexItem->SetAlignSelf(FlexAlign::CENTER); + column->AddChild(secondFlexItem); + RefPtr thirdFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(THIRD_LAEGEST_BOX, THIRD_LAEGEST_BOX); + thirdBox->Attach(mockContext); + thirdFlexItem->AddChild(thirdBox); + thirdFlexItem->SetAlignSelf(FlexAlign::FLEX_START); + column->AddChild(thirdFlexItem); + RefPtr forthFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr forthBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + forthBox->Attach(mockContext); + forthFlexItem->AddChild(forthBox); + column->AddChild(forthFlexItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions are set correctly + */ + root->Attach(mockContext); + column->Attach(mockContext); + firstFlexItem->Attach(mockContext); + secondFlexItem->Attach(mockContext); + thirdFlexItem->Attach(mockContext); + forthFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition() == Offset(0, 222)); + EXPECT_TRUE(secondFlexItem->GetPosition() == Offset(LARGE_BOX/2 - MEDIUM_BOX/2, 222 + SMALL_BOX)); + EXPECT_TRUE(thirdFlexItem->GetPosition() == Offset(0, 222 + SMALL_BOX + MEDIUM_BOX)); + EXPECT_TRUE(forthFlexItem->GetPosition() == Offset(0, 222 + SMALL_BOX + MEDIUM_BOX + THIRD_LAEGEST_BOX)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(SMALL_BOX, SMALL_BOX)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(MEDIUM_BOX, MEDIUM_BOX)); + EXPECT_TRUE(thirdBox->GetLayoutSize() == Size(THIRD_LAEGEST_BOX, THIRD_LAEGEST_BOX)); + EXPECT_TRUE(forthBox->GetLayoutSize() == Size(LARGE_BOX, LARGE_BOX)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf003 stop"; +} + +/** + * @tc.name: FlexItemAlignSelf004 + * @tc.desc: verify the column with two flex children works fine, where the flex alignSelf are set in the flex children. + * @tc.type: FUNC + * @tc.require: AR000FL29E + * @tc.author: wangzezhen + */ +HWTEST_F(RenderFlexItemTest, FlexItemAlignSelf004, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf004 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex alignSelf property to the flex items. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr column = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::FLEX_END, FlexAlign::FLEX_START); + root->AddChild(column); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + firstFlexItem->SetAlignSelf(FlexAlign::CENTER); + column->AddChild(firstFlexItem); + RefPtr secondFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + secondFlexItem->AddChild(secondBox); + secondFlexItem->SetAlignSelf(FlexAlign::FLEX_END); + column->AddChild(secondFlexItem); + RefPtr thirdFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(THIRD_LAEGEST_BOX, THIRD_LAEGEST_BOX); + thirdBox->Attach(mockContext); + thirdFlexItem->AddChild(thirdBox); + thirdFlexItem->SetAlignSelf(FlexAlign::STRETCH); + column->AddChild(thirdFlexItem); + RefPtr forthFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr forthBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + forthBox->Attach(mockContext); + forthFlexItem->AddChild(forthBox); + column->AddChild(forthFlexItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions are set correctly + */ + root->Attach(mockContext); + column->Attach(mockContext); + firstFlexItem->Attach(mockContext); + secondFlexItem->Attach(mockContext); + thirdFlexItem->Attach(mockContext); + forthFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition() == Offset(LARGE_BOX/2 - SMALL_BOX/2, 444)); + EXPECT_TRUE(secondFlexItem->GetPosition() == Offset(LARGE_BOX - MEDIUM_BOX, 444 + SMALL_BOX)); + EXPECT_TRUE(thirdFlexItem->GetPosition() == Offset(0, 444 + SMALL_BOX + MEDIUM_BOX)); + EXPECT_TRUE(forthFlexItem->GetPosition() == Offset(0, 444 + SMALL_BOX + MEDIUM_BOX + THIRD_LAEGEST_BOX)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(SMALL_BOX, SMALL_BOX)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(MEDIUM_BOX, MEDIUM_BOX)); + EXPECT_TRUE(thirdBox->GetLayoutSize() == Size(LARGE_BOX, THIRD_LAEGEST_BOX)); + EXPECT_TRUE(forthBox->GetLayoutSize() == Size(LARGE_BOX, LARGE_BOX)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf004 stop"; +} + +/** + * @tc.name: FlexItemAlignSelf005 + * @tc.desc: verify the column with two flex children works fine, where the flex alignSelf are set in the flex children. + * @tc.type: FUNC + * @tc.require: AR000FL29E + * @tc.author: wangzezhen + */ +HWTEST_F(RenderFlexItemTest, FlexItemAlignSelf005, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf005 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex alignSelf property to the flex items. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr column = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::FLEX_END, FlexAlign::CENTER); + root->AddChild(column); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + firstFlexItem->SetAlignSelf(FlexAlign::STRETCH); + column->AddChild(firstFlexItem); + RefPtr secondFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + secondFlexItem->AddChild(secondBox); + secondFlexItem->SetAlignSelf(FlexAlign::FLEX_END); + column->AddChild(secondFlexItem); + RefPtr thirdFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(THIRD_LAEGEST_BOX, THIRD_LAEGEST_BOX); + thirdBox->Attach(mockContext); + thirdFlexItem->AddChild(thirdBox); + thirdFlexItem->SetAlignSelf(FlexAlign::FLEX_START); + column->AddChild(thirdFlexItem); + RefPtr forthFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr forthBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + forthBox->Attach(mockContext); + forthFlexItem->AddChild(forthBox); + column->AddChild(forthFlexItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions are set correctly + */ + root->Attach(mockContext); + column->Attach(mockContext); + firstFlexItem->Attach(mockContext); + secondFlexItem->Attach(mockContext); + thirdFlexItem->Attach(mockContext); + forthFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition() == Offset(0, 444)); + EXPECT_TRUE(secondFlexItem->GetPosition() == Offset(LARGE_BOX - MEDIUM_BOX, 444 + SMALL_BOX)); + EXPECT_TRUE(thirdFlexItem->GetPosition() == Offset(0, 444 + SMALL_BOX + MEDIUM_BOX)); + EXPECT_TRUE(forthFlexItem->GetPosition() == Offset(0, 444 + SMALL_BOX + MEDIUM_BOX + THIRD_LAEGEST_BOX)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(LARGE_BOX, SMALL_BOX)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(MEDIUM_BOX, MEDIUM_BOX)); + EXPECT_TRUE(thirdBox->GetLayoutSize() == Size(THIRD_LAEGEST_BOX, THIRD_LAEGEST_BOX)); + EXPECT_TRUE(forthBox->GetLayoutSize() == Size(LARGE_BOX, LARGE_BOX)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf005 stop"; +} + +/** + * @tc.name: FlexItemAlignSelf006 + * @tc.desc: verify the column with two flex children works fine, where the flex alignSelf are set in the flex children. + * @tc.type: FUNC + * @tc.require: AR000FL29E + * @tc.author: wangzezhen + */ +HWTEST_F(RenderFlexItemTest, FlexItemAlignSelf006, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf006 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex alignSelf property to the flex items. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr column = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::FLEX_START, FlexAlign::FLEX_END); + root->AddChild(column); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + firstFlexItem->SetAlignSelf(FlexAlign::STRETCH); + column->AddChild(firstFlexItem); + RefPtr secondFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + secondFlexItem->AddChild(secondBox); + secondFlexItem->SetAlignSelf(FlexAlign::CENTER); + column->AddChild(secondFlexItem); + RefPtr thirdFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(THIRD_LAEGEST_BOX, THIRD_LAEGEST_BOX); + thirdBox->Attach(mockContext); + thirdFlexItem->AddChild(thirdBox); + thirdFlexItem->SetAlignSelf(FlexAlign::FLEX_START); + column->AddChild(thirdFlexItem); + RefPtr forthFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr forthBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + forthBox->Attach(mockContext); + forthFlexItem->AddChild(forthBox); + column->AddChild(forthFlexItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions are set correctly + */ + root->Attach(mockContext); + column->Attach(mockContext); + firstFlexItem->Attach(mockContext); + secondFlexItem->Attach(mockContext); + thirdFlexItem->Attach(mockContext); + forthFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition().IsZero()); + EXPECT_TRUE(secondFlexItem->GetPosition() == Offset(LARGE_BOX/2 - MEDIUM_BOX/2, SMALL_BOX)); + EXPECT_TRUE(thirdFlexItem->GetPosition() == Offset(0, SMALL_BOX + MEDIUM_BOX)); + EXPECT_TRUE(forthFlexItem->GetPosition() == Offset(0, SMALL_BOX + MEDIUM_BOX + THIRD_LAEGEST_BOX)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(LARGE_BOX, SMALL_BOX)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(MEDIUM_BOX, MEDIUM_BOX)); + EXPECT_TRUE(thirdBox->GetLayoutSize() == Size(THIRD_LAEGEST_BOX, THIRD_LAEGEST_BOX)); + EXPECT_TRUE(forthBox->GetLayoutSize() == Size(LARGE_BOX, LARGE_BOX)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf006 stop"; +} + +/** + * @tc.name: FlexItemAlignSelf007 + * @tc.desc: verify the row with three flex children works fine, where the flex alignSelf are set in the flex children. + * @tc.type: FUNC + * @tc.require: AR000FL29E + * @tc.author: wangzezhen + */ +HWTEST_F(RenderFlexItemTest, FlexItemAlignSelf007, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf007 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex alignSelf property to the flex items. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr row = + FlexTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::FLEX_START, FlexAlign::FLEX_START); + root->AddChild(row); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + firstFlexItem->SetAlignSelf(FlexAlign::FLEX_END); + row->AddChild(firstFlexItem); + RefPtr secondFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + secondFlexItem->AddChild(secondBox); + secondFlexItem->SetAlignSelf(FlexAlign::CENTER); + row->AddChild(secondFlexItem); + RefPtr thirdFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(THIRD_LAEGEST_BOX, THIRD_LAEGEST_BOX); + thirdBox->Attach(mockContext); + thirdFlexItem->AddChild(thirdBox); + row->AddChild(thirdFlexItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions are set correctly + */ + root->Attach(mockContext); + row->Attach(mockContext); + firstFlexItem->Attach(mockContext); + secondFlexItem->Attach(mockContext); + thirdFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition() == Offset(0, THIRD_LAEGEST_BOX - SMALL_BOX)); + EXPECT_TRUE(secondFlexItem->GetPosition() == Offset(SMALL_BOX, THIRD_LAEGEST_BOX/2 - MEDIUM_BOX/2)); + EXPECT_TRUE(thirdFlexItem->GetPosition() == Offset(SMALL_BOX + MEDIUM_BOX, 0)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(SMALL_BOX, SMALL_BOX)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(MEDIUM_BOX, MEDIUM_BOX)); + EXPECT_TRUE(thirdBox->GetLayoutSize() == Size(THIRD_LAEGEST_BOX, THIRD_LAEGEST_BOX)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf007 stop"; +} + +/** + * @tc.name: FlexItemAlignSelf008 + * @tc.desc: verify the row with three flex children works fine, where the flex alignSelf are set in the flex children. + * @tc.type: FUNC + * @tc.require: AR000FL29E + * @tc.author: wangzezhen + */ +HWTEST_F(RenderFlexItemTest, FlexItemAlignSelf008, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf008 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex alignSelf property to the flex items. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr row = + FlexTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::FLEX_START, FlexAlign::FLEX_END); + root->AddChild(row); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + firstFlexItem->SetAlignSelf(FlexAlign::FLEX_START); + row->AddChild(firstFlexItem); + RefPtr secondFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + secondFlexItem->AddChild(secondBox); + secondFlexItem->SetAlignSelf(FlexAlign::CENTER); + row->AddChild(secondFlexItem); + RefPtr thirdFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(THIRD_LAEGEST_BOX, THIRD_LAEGEST_BOX); + thirdBox->Attach(mockContext); + thirdFlexItem->AddChild(thirdBox); + row->AddChild(thirdFlexItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions are set correctly + */ + root->Attach(mockContext); + row->Attach(mockContext); + firstFlexItem->Attach(mockContext); + secondFlexItem->Attach(mockContext); + thirdFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition().IsZero()); + EXPECT_TRUE(secondFlexItem->GetPosition() == Offset(SMALL_BOX, THIRD_LAEGEST_BOX/2-MEDIUM_BOX/2)); + EXPECT_TRUE(thirdFlexItem->GetPosition() == Offset(SMALL_BOX + MEDIUM_BOX, 0)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(SMALL_BOX, SMALL_BOX)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(MEDIUM_BOX, MEDIUM_BOX)); + EXPECT_TRUE(thirdBox->GetLayoutSize() == Size(THIRD_LAEGEST_BOX, THIRD_LAEGEST_BOX)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf008 stop"; +} + +/** + * @tc.name: FlexItemAlignSelf009 + * @tc.desc: verify the row with three flex children works fine, where the flex alignSelf are set in the flex children. + * @tc.type: FUNC + * @tc.require: AR000FL29E + * @tc.author: wangzezhen + */ +HWTEST_F(RenderFlexItemTest, FlexItemAlignSelf009, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf009 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex alignSelf property to the flex items. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr row = + FlexTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::CENTER, FlexAlign::FLEX_END); + root->AddChild(row); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + firstFlexItem->SetAlignSelf(FlexAlign::CENTER); + row->AddChild(firstFlexItem); + RefPtr secondFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + secondFlexItem->AddChild(secondBox); + secondFlexItem->SetAlignSelf(FlexAlign::FLEX_START); + row->AddChild(secondFlexItem); + RefPtr thirdFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(THIRD_LAEGEST_BOX, THIRD_LAEGEST_BOX); + thirdBox->Attach(mockContext); + thirdFlexItem->AddChild(thirdBox); + row->AddChild(thirdFlexItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions are set correctly + */ + root->Attach(mockContext); + row->Attach(mockContext); + firstFlexItem->Attach(mockContext); + secondFlexItem->Attach(mockContext); + thirdFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition() == Offset(140, THIRD_LAEGEST_BOX/2-SMALL_BOX/2)); + EXPECT_TRUE(secondFlexItem->GetPosition() == Offset(140 + SMALL_BOX, 0)); + EXPECT_TRUE(thirdFlexItem->GetPosition() == Offset(140 + SMALL_BOX + MEDIUM_BOX, 0)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(SMALL_BOX, SMALL_BOX)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(MEDIUM_BOX, MEDIUM_BOX)); + EXPECT_TRUE(thirdBox->GetLayoutSize() == Size(THIRD_LAEGEST_BOX, THIRD_LAEGEST_BOX)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf009 stop"; +} + +/** + * @tc.name: FlexItemAlignSelf010 + * @tc.desc: verify the row with three flex children works fine, where the flex alignSelf are set in the flex children. + * @tc.type: FUNC + * @tc.require: AR000FL29E + * @tc.author: wangzezhen + */ +HWTEST_F(RenderFlexItemTest, FlexItemAlignSelf010, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf010 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex alignSelf property to the flex items. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr row = + FlexTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::FLEX_END, FlexAlign::FLEX_END); + root->AddChild(row); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + firstFlexItem->SetAlignSelf(FlexAlign::FLEX_START); + row->AddChild(firstFlexItem); + RefPtr secondFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + secondFlexItem->AddChild(secondBox); + secondFlexItem->SetAlignSelf(FlexAlign::STRETCH); + row->AddChild(secondFlexItem); + RefPtr thirdFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(THIRD_LAEGEST_BOX, THIRD_LAEGEST_BOX); + thirdBox->Attach(mockContext); + thirdFlexItem->AddChild(thirdBox); + row->AddChild(thirdFlexItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions are set correctly + */ + root->Attach(mockContext); + row->Attach(mockContext); + firstFlexItem->Attach(mockContext); + secondFlexItem->Attach(mockContext); + thirdFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition() == Offset(280, 0)); + EXPECT_TRUE(secondFlexItem->GetPosition() == Offset(280 + SMALL_BOX, 0)); + EXPECT_TRUE(thirdFlexItem->GetPosition() == Offset(280 + SMALL_BOX + MEDIUM_BOX, 0)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(SMALL_BOX, SMALL_BOX)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(MEDIUM_BOX, THIRD_LAEGEST_BOX)); + EXPECT_TRUE(thirdBox->GetLayoutSize() == Size(THIRD_LAEGEST_BOX, THIRD_LAEGEST_BOX)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf010 stop"; +} + +/** + * @tc.name: FlexItemAlignSelf011 + * @tc.desc: verify the row with three flex children works fine, where the flex alignSelf are set in the flex children. + * @tc.type: FUNC + * @tc.require: AR000FL29F + * @tc.author: wangzezhen + */ +HWTEST_F(RenderFlexItemTest, FlexItemAlignSelf011, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf011 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex alignSelf property to the flex items. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr row = + FlexTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::FLEX_END, FlexAlign::FLEX_START); + root->AddChild(row); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + firstFlexItem->SetAlignSelf(FlexAlign::STRETCH); + row->AddChild(firstFlexItem); + RefPtr secondFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + secondFlexItem->AddChild(secondBox); + secondFlexItem->SetAlignSelf(FlexAlign::CENTER); + row->AddChild(secondFlexItem); + RefPtr thirdFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(THIRD_LAEGEST_BOX, THIRD_LAEGEST_BOX); + thirdBox->Attach(mockContext); + thirdFlexItem->AddChild(thirdBox); + row->AddChild(thirdFlexItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions are set correctly + */ + root->Attach(mockContext); + row->Attach(mockContext); + firstFlexItem->Attach(mockContext); + secondFlexItem->Attach(mockContext); + thirdFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition() == Offset(280, 0)); + EXPECT_TRUE(secondFlexItem->GetPosition() == Offset(280 + SMALL_BOX, THIRD_LAEGEST_BOX/2-MEDIUM_BOX/2)); + EXPECT_TRUE(thirdFlexItem->GetPosition() == Offset(280 + SMALL_BOX + MEDIUM_BOX, 0)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(SMALL_BOX, THIRD_LAEGEST_BOX)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(MEDIUM_BOX, MEDIUM_BOX)); + EXPECT_TRUE(thirdBox->GetLayoutSize() == Size(THIRD_LAEGEST_BOX, THIRD_LAEGEST_BOX)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf011 stop"; +} + +/** + * @tc.name: FlexItemAlignSelf012 + * @tc.desc: verify the row with three flex children works fine, where the flex alignSelf are set in the flex children. + * @tc.type: FUNC + * @tc.require: AR000FL29F + * @tc.author: wangzezhen + */ +HWTEST_F(RenderFlexItemTest, FlexItemAlignSelf012, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf012 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex alignSelf property to the flex items. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr row = + FlexTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::FLEX_END, FlexAlign::STRETCH); + root->AddChild(row); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + firstFlexItem->SetAlignSelf(FlexAlign::FLEX_END); + row->AddChild(firstFlexItem); + RefPtr secondFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + secondFlexItem->AddChild(secondBox); + secondFlexItem->SetAlignSelf(FlexAlign::CENTER); + row->AddChild(secondFlexItem); + RefPtr thirdFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(THIRD_LAEGEST_BOX, THIRD_LAEGEST_BOX); + thirdBox->Attach(mockContext); + thirdFlexItem->AddChild(thirdBox); + row->AddChild(thirdFlexItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions are set correctly + */ + root->Attach(mockContext); + row->Attach(mockContext); + firstFlexItem->Attach(mockContext); + secondFlexItem->Attach(mockContext); + thirdFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition() == Offset(280, THIRD_LAEGEST_BOX - SMALL_BOX)); + EXPECT_TRUE(secondFlexItem->GetPosition() == Offset(280 + SMALL_BOX, THIRD_LAEGEST_BOX/2-MEDIUM_BOX/2)); + EXPECT_TRUE(thirdFlexItem->GetPosition() == Offset(280 + SMALL_BOX + MEDIUM_BOX, 0)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(SMALL_BOX, SMALL_BOX)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(MEDIUM_BOX, MEDIUM_BOX)); + EXPECT_TRUE(thirdBox->GetLayoutSize() == Size(THIRD_LAEGEST_BOX, THIRD_LAEGEST_BOX)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf012 stop"; +} + +/** + * @tc.name: FlexItemAlignSelf013 + * @tc.desc: verify the column with three flex children works fine, + * where the flex alignSelf are set in the flex children. + * @tc.type: FUNC + * @tc.require: AR000FL29F + * @tc.author: wangzezhen + */ +HWTEST_F(RenderFlexItemTest, FlexItemAlignSelf013, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf013 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex alignSelf property to the flex items. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr column = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::FLEX_START, FlexAlign::STRETCH); + root->AddChild(column); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + firstFlexItem->SetAlignSelf(FlexAlign::FLEX_START); + column->AddChild(firstFlexItem); + RefPtr secondFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + secondFlexItem->AddChild(secondBox); + secondFlexItem->SetAlignSelf(FlexAlign::CENTER); + column->AddChild(secondFlexItem); + RefPtr thirdFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + thirdBox->Attach(mockContext); + thirdFlexItem->AddChild(thirdBox); + column->AddChild(thirdFlexItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions are set correctly + */ + root->Attach(mockContext); + column->Attach(mockContext); + firstFlexItem->Attach(mockContext); + secondFlexItem->Attach(mockContext); + thirdFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition().IsZero()); + EXPECT_TRUE(secondFlexItem->GetPosition() == Offset(LARGE_BOX/2 - MEDIUM_BOX/2, SMALL_BOX)); + EXPECT_TRUE(thirdFlexItem->GetPosition() == Offset(0, SMALL_BOX + MEDIUM_BOX)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(SMALL_BOX, SMALL_BOX)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(MEDIUM_BOX, MEDIUM_BOX)); + EXPECT_TRUE(thirdBox->GetLayoutSize() == Size(LARGE_BOX, LARGE_BOX)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf013 stop"; +} + +/** + * @tc.name: FlexItemAlignSelf014 + * @tc.desc: verify the column with three flex children works fine, + * where the flex alignSelf are set in the flex children. + * @tc.type: FUNC + * @tc.require: AR000FL29F + * @tc.author: wangzezhen + */ +HWTEST_F(RenderFlexItemTest, FlexItemAlignSelf014, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf014 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex alignSelf property to the flex items. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr column = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::FLEX_START, FlexAlign::FLEX_END); + root->AddChild(column); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + firstFlexItem->SetAlignSelf(FlexAlign::CENTER); + column->AddChild(firstFlexItem); + RefPtr secondFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + secondFlexItem->AddChild(secondBox); + secondFlexItem->SetAlignSelf(FlexAlign::FLEX_START); + column->AddChild(secondFlexItem); + RefPtr thirdFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + thirdBox->Attach(mockContext); + thirdFlexItem->AddChild(thirdBox); + column->AddChild(thirdFlexItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions are set correctly + */ + root->Attach(mockContext); + column->Attach(mockContext); + firstFlexItem->Attach(mockContext); + secondFlexItem->Attach(mockContext); + thirdFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition() == Offset(LARGE_BOX/2 - SMALL_BOX/2, 0)); + EXPECT_TRUE(secondFlexItem->GetPosition() == Offset(0, SMALL_BOX)); + EXPECT_TRUE(thirdFlexItem->GetPosition() == Offset(0, SMALL_BOX + MEDIUM_BOX)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(SMALL_BOX, SMALL_BOX)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(MEDIUM_BOX, MEDIUM_BOX)); + EXPECT_TRUE(thirdBox->GetLayoutSize() == Size(LARGE_BOX, LARGE_BOX)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf014 stop"; +} + +/** + * @tc.name: FlexItemAlignSelf015 + * @tc.desc: verify the column with three flex children works fine, + * where the flex alignSelf are set in the flex children. + * @tc.type: FUNC + * @tc.require: AR000FL29F + * @tc.author: wangzezhen + */ +HWTEST_F(RenderFlexItemTest, FlexItemAlignSelf015, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf015 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex alignSelf property to the flex items. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr column = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::FLEX_START, FlexAlign::STRETCH); + root->AddChild(column); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + firstFlexItem->SetAlignSelf(FlexAlign::FLEX_START); + column->AddChild(firstFlexItem); + RefPtr secondFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + secondFlexItem->AddChild(secondBox); + secondFlexItem->SetAlignSelf(FlexAlign::FLEX_END); + column->AddChild(secondFlexItem); + RefPtr thirdFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + thirdBox->Attach(mockContext); + thirdFlexItem->AddChild(thirdBox); + column->AddChild(thirdFlexItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions are set correctly + */ + root->Attach(mockContext); + column->Attach(mockContext); + firstFlexItem->Attach(mockContext); + secondFlexItem->Attach(mockContext); + thirdFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition().IsZero()); + EXPECT_TRUE(secondFlexItem->GetPosition() == Offset(LARGE_BOX - MEDIUM_BOX, SMALL_BOX)); + EXPECT_TRUE(thirdFlexItem->GetPosition() == Offset(0, SMALL_BOX + MEDIUM_BOX)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(SMALL_BOX, SMALL_BOX)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(MEDIUM_BOX, MEDIUM_BOX)); + EXPECT_TRUE(thirdBox->GetLayoutSize() == Size(LARGE_BOX, LARGE_BOX)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf015 stop"; +} + +/** + * @tc.name: FlexItemAlignSelf016 + * @tc.desc: verify the column with three flex children works fine, + * where the flex alignSelf are set in the flex children. + * @tc.type: FUNC + * @tc.require: AR000FL29F + * @tc.author: wangzezhen + */ +HWTEST_F(RenderFlexItemTest, FlexItemAlignSelf016, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf016 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex alignSelf property to the flex items. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr column = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::FLEX_START, FlexAlign::FLEX_START); + root->AddChild(column); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + firstFlexItem->SetAlignSelf(FlexAlign::STRETCH); + column->AddChild(firstFlexItem); + RefPtr secondFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + secondFlexItem->AddChild(secondBox); + secondFlexItem->SetAlignSelf(FlexAlign::STRETCH); + column->AddChild(secondFlexItem); + RefPtr thirdFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + thirdBox->Attach(mockContext); + thirdFlexItem->AddChild(thirdBox); + column->AddChild(thirdFlexItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions are set correctly + */ + root->Attach(mockContext); + column->Attach(mockContext); + firstFlexItem->Attach(mockContext); + secondFlexItem->Attach(mockContext); + thirdFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition().IsZero()); + EXPECT_TRUE(secondFlexItem->GetPosition() == Offset(0, SMALL_BOX)); + EXPECT_TRUE(thirdFlexItem->GetPosition() == Offset(0, SMALL_BOX + MEDIUM_BOX)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(LARGE_BOX, SMALL_BOX)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(LARGE_BOX, MEDIUM_BOX)); + EXPECT_TRUE(thirdBox->GetLayoutSize() == Size(LARGE_BOX, LARGE_BOX)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf016 stop"; +} + +/** + * @tc.name: FlexItemAlignSelf017 + * @tc.desc: verify the row with three flex children works fine, where the flex alignSelf are set in the flex children. + * @tc.type: FUNC + * @tc.require: AR000FL29F + * @tc.author: wangzezhen + */ +HWTEST_F(RenderFlexItemTest, FlexItemAlignSelf017, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf017 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex alignSelf property to the flex items. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr row = + FlexTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::FLEX_START, FlexAlign::FLEX_START); + root->AddChild(row); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + firstFlexItem->SetAlignSelf(FlexAlign::FLEX_START); + row->AddChild(firstFlexItem); + RefPtr secondFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + secondFlexItem->AddChild(secondBox); + secondFlexItem->SetAlignSelf(FlexAlign::CENTER); + row->AddChild(secondFlexItem); + RefPtr thirdFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(THIRD_LAEGEST_BOX, THIRD_LAEGEST_BOX); + thirdBox->Attach(mockContext); + thirdFlexItem->AddChild(thirdBox); + row->AddChild(thirdFlexItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions are set correctly + */ + root->Attach(mockContext); + row->Attach(mockContext); + firstFlexItem->Attach(mockContext); + secondFlexItem->Attach(mockContext); + thirdFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition().IsZero()); + EXPECT_TRUE(secondFlexItem->GetPosition() == Offset(SMALL_BOX, THIRD_LAEGEST_BOX/2 - MEDIUM_BOX/2)); + EXPECT_TRUE(thirdFlexItem->GetPosition() == Offset(SMALL_BOX + MEDIUM_BOX, 0)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(SMALL_BOX, SMALL_BOX)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(MEDIUM_BOX, MEDIUM_BOX)); + EXPECT_TRUE(thirdBox->GetLayoutSize() == Size(THIRD_LAEGEST_BOX, THIRD_LAEGEST_BOX)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf017 stop"; +} + +/** + * @tc.name: FlexItemAlignSelf018 + * @tc.desc: verify the row with three flex children works fine, where the flex alignSelf are set in the flex children. + * @tc.type: FUNC + * @tc.require: AR000FL29F + * @tc.author: wangzezhen + */ +HWTEST_F(RenderFlexItemTest, FlexItemAlignSelf018, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf018 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex alignSelf property to the flex items. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr row = + FlexTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::FLEX_START, FlexAlign::FLEX_START); + root->AddChild(row); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + firstFlexItem->SetAlignSelf(FlexAlign::FLEX_START); + row->AddChild(firstFlexItem); + RefPtr secondFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + secondFlexItem->AddChild(secondBox); + secondFlexItem->SetAlignSelf(FlexAlign::FLEX_END); + row->AddChild(secondFlexItem); + RefPtr thirdFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(THIRD_LAEGEST_BOX, THIRD_LAEGEST_BOX); + thirdBox->Attach(mockContext); + thirdFlexItem->AddChild(thirdBox); + row->AddChild(thirdFlexItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions are set correctly + */ + root->Attach(mockContext); + row->Attach(mockContext); + firstFlexItem->Attach(mockContext); + secondFlexItem->Attach(mockContext); + thirdFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition().IsZero()); + EXPECT_TRUE(secondFlexItem->GetPosition() == Offset(SMALL_BOX, THIRD_LAEGEST_BOX - MEDIUM_BOX)); + EXPECT_TRUE(thirdFlexItem->GetPosition() == Offset(SMALL_BOX + MEDIUM_BOX, 0)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(SMALL_BOX, SMALL_BOX)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(MEDIUM_BOX, MEDIUM_BOX)); + EXPECT_TRUE(thirdBox->GetLayoutSize() == Size(THIRD_LAEGEST_BOX, THIRD_LAEGEST_BOX)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf018 stop"; +} + +/** + * @tc.name: FlexItemAlignSelf019 + * @tc.desc: verify the row with three flex children works fine, where the flex alignSelf are set in the flex children. + * @tc.type: FUNC + * @tc.require: AR000FL29F + * @tc.author: wangzezhen + */ +HWTEST_F(RenderFlexItemTest, FlexItemAlignSelf019, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf019 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex alignSelf property to the flex items. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr row = + FlexTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::FLEX_START, FlexAlign::FLEX_START); + root->AddChild(row); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + firstFlexItem->SetAlignSelf(FlexAlign::FLEX_START); + row->AddChild(firstFlexItem); + RefPtr secondFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + secondFlexItem->AddChild(secondBox); + secondFlexItem->SetAlignSelf(FlexAlign::STRETCH); + row->AddChild(secondFlexItem); + RefPtr thirdFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(THIRD_LAEGEST_BOX, THIRD_LAEGEST_BOX); + thirdBox->Attach(mockContext); + thirdFlexItem->AddChild(thirdBox); + row->AddChild(thirdFlexItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions are set correctly + */ + root->Attach(mockContext); + row->Attach(mockContext); + firstFlexItem->Attach(mockContext); + secondFlexItem->Attach(mockContext); + thirdFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition().IsZero()); + EXPECT_TRUE(secondFlexItem->GetPosition() == Offset(SMALL_BOX, 0)); + EXPECT_TRUE(thirdFlexItem->GetPosition() == Offset(SMALL_BOX + MEDIUM_BOX, 0)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(SMALL_BOX, SMALL_BOX)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(MEDIUM_BOX, THIRD_LAEGEST_BOX)); + EXPECT_TRUE(thirdBox->GetLayoutSize() == Size(THIRD_LAEGEST_BOX, THIRD_LAEGEST_BOX)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf019 stop"; +} + +/** + * @tc.name: FlexItemAlignSelf020 + * @tc.desc: verify the row with three flex children works fine, where the flex alignSelf are set in the flex children. + * @tc.type: FUNC + * @tc.require: AR000FL29F + * @tc.author: wangzezhen + */ +HWTEST_F(RenderFlexItemTest, FlexItemAlignSelf020, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf020 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex alignSelf property to the flex items. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr row = + FlexTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::FLEX_START, FlexAlign::FLEX_START); + root->AddChild(row); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + firstFlexItem->SetAlignSelf(FlexAlign::CENTER); + row->AddChild(firstFlexItem); + RefPtr secondFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + secondFlexItem->AddChild(secondBox); + secondFlexItem->SetAlignSelf(FlexAlign::FLEX_END); + row->AddChild(secondFlexItem); + RefPtr thirdFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(THIRD_LAEGEST_BOX, THIRD_LAEGEST_BOX); + thirdBox->Attach(mockContext); + thirdFlexItem->AddChild(thirdBox); + row->AddChild(thirdFlexItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions are set correctly + */ + root->Attach(mockContext); + row->Attach(mockContext); + firstFlexItem->Attach(mockContext); + secondFlexItem->Attach(mockContext); + thirdFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition() == Offset(0, THIRD_LAEGEST_BOX/2 - SMALL_BOX/2)); + EXPECT_TRUE(secondFlexItem->GetPosition() == Offset(SMALL_BOX, THIRD_LAEGEST_BOX - MEDIUM_BOX)); + EXPECT_TRUE(thirdFlexItem->GetPosition() == Offset(SMALL_BOX + MEDIUM_BOX, 0)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(SMALL_BOX, SMALL_BOX)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(MEDIUM_BOX, MEDIUM_BOX)); + EXPECT_TRUE(thirdBox->GetLayoutSize() == Size(THIRD_LAEGEST_BOX, THIRD_LAEGEST_BOX)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf020 stop"; +} + +/** + * @tc.name: FlexItemAlignSelf021 + * @tc.desc: verify the row with three flex children works fine, where the flex alignSelf are set in the flex children. + * @tc.type: FUNC + * @tc.require: AR000FL29F + * @tc.author: wangzezhen + */ +HWTEST_F(RenderFlexItemTest, FlexItemAlignSelf021, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf021 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex alignSelf property to the flex items. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr row = + FlexTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::FLEX_START, FlexAlign::FLEX_START); + root->AddChild(row); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + firstFlexItem->SetAlignSelf(FlexAlign::CENTER); + row->AddChild(firstFlexItem); + RefPtr secondFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + secondFlexItem->AddChild(secondBox); + secondFlexItem->SetAlignSelf(FlexAlign::FLEX_START); + row->AddChild(secondFlexItem); + RefPtr thirdFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(THIRD_LAEGEST_BOX, THIRD_LAEGEST_BOX); + thirdBox->Attach(mockContext); + thirdFlexItem->AddChild(thirdBox); + row->AddChild(thirdFlexItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions are set correctly + */ + root->Attach(mockContext); + row->Attach(mockContext); + firstFlexItem->Attach(mockContext); + secondFlexItem->Attach(mockContext); + thirdFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition() == Offset(0, THIRD_LAEGEST_BOX/2 - SMALL_BOX/2)); + EXPECT_TRUE(secondFlexItem->GetPosition() == Offset(SMALL_BOX, 0)); + EXPECT_TRUE(thirdFlexItem->GetPosition() == Offset(SMALL_BOX + MEDIUM_BOX, 0)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(SMALL_BOX, SMALL_BOX)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(MEDIUM_BOX, MEDIUM_BOX)); + EXPECT_TRUE(thirdBox->GetLayoutSize() == Size(THIRD_LAEGEST_BOX, THIRD_LAEGEST_BOX)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf021 stop"; +} + +/** + * @tc.name: FlexItemAlignSelf022 + * @tc.desc: verify the row with three flex children works fine, where the flex alignSelf are set in the flex children. + * @tc.type: FUNC + * @tc.require: AR000FL29F + * @tc.author: wangzezhen + */ +HWTEST_F(RenderFlexItemTest, FlexItemAlignSelf022, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf022 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex alignSelf property to the flex items. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr row = + FlexTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::FLEX_START, FlexAlign::FLEX_START); + root->AddChild(row); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + firstFlexItem->SetAlignSelf(FlexAlign::FLEX_END); + row->AddChild(firstFlexItem); + RefPtr secondFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + secondFlexItem->AddChild(secondBox); + secondFlexItem->SetAlignSelf(FlexAlign::FLEX_START); + row->AddChild(secondFlexItem); + RefPtr thirdFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(THIRD_LAEGEST_BOX, THIRD_LAEGEST_BOX); + thirdBox->Attach(mockContext); + thirdFlexItem->AddChild(thirdBox); + row->AddChild(thirdFlexItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions are set correctly + */ + root->Attach(mockContext); + row->Attach(mockContext); + firstFlexItem->Attach(mockContext); + secondFlexItem->Attach(mockContext); + thirdFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition() == Offset(0, THIRD_LAEGEST_BOX - SMALL_BOX)); + EXPECT_TRUE(secondFlexItem->GetPosition() == Offset(SMALL_BOX, 0)); + EXPECT_TRUE(thirdFlexItem->GetPosition() == Offset(SMALL_BOX + MEDIUM_BOX, 0)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(SMALL_BOX, SMALL_BOX)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(MEDIUM_BOX, MEDIUM_BOX)); + EXPECT_TRUE(thirdBox->GetLayoutSize() == Size(THIRD_LAEGEST_BOX, THIRD_LAEGEST_BOX)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf022 stop"; +} + +/** + * @tc.name: FlexItemAlignSelf023 + * @tc.desc: verify the row with three flex children works fine, where the flex alignSelf are set in the flex children. + * @tc.type: FUNC + * @tc.require: AR000FL29F + * @tc.author: wangzezhen + */ +HWTEST_F(RenderFlexItemTest, FlexItemAlignSelf023, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf023 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex alignSelf property to the flex items. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr row = + FlexTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::FLEX_START, FlexAlign::FLEX_START); + root->AddChild(row); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + firstFlexItem->SetAlignSelf(FlexAlign::FLEX_END); + row->AddChild(firstFlexItem); + RefPtr secondFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + secondFlexItem->AddChild(secondBox); + secondFlexItem->SetAlignSelf(FlexAlign::CENTER); + row->AddChild(secondFlexItem); + RefPtr thirdFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(THIRD_LAEGEST_BOX, THIRD_LAEGEST_BOX); + thirdBox->Attach(mockContext); + thirdFlexItem->AddChild(thirdBox); + row->AddChild(thirdFlexItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions are set correctly + */ + root->Attach(mockContext); + row->Attach(mockContext); + firstFlexItem->Attach(mockContext); + secondFlexItem->Attach(mockContext); + thirdFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition() == Offset(0, THIRD_LAEGEST_BOX - SMALL_BOX)); + EXPECT_TRUE(secondFlexItem->GetPosition() == Offset(SMALL_BOX, THIRD_LAEGEST_BOX/2 - MEDIUM_BOX/2)); + EXPECT_TRUE(thirdFlexItem->GetPosition() == Offset(SMALL_BOX + MEDIUM_BOX, 0)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(SMALL_BOX, SMALL_BOX)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(MEDIUM_BOX, MEDIUM_BOX)); + EXPECT_TRUE(thirdBox->GetLayoutSize() == Size(THIRD_LAEGEST_BOX, THIRD_LAEGEST_BOX)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf023 stop"; +} + +/** + * @tc.name: FlexItemAlignSelf024 + * @tc.desc: verify the column with three flex children works fine, + * where the flex alignSelf are set in the flex children. + * @tc.type: FUNC + * @tc.require: AR000FL29F + * @tc.author: wangzezhen + */ +HWTEST_F(RenderFlexItemTest, FlexItemAlignSelf024, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf024 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex alignSelf property to the flex items. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr column = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::FLEX_START, FlexAlign::FLEX_START); + root->AddChild(column); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + firstFlexItem->SetAlignSelf(FlexAlign::FLEX_START); + column->AddChild(firstFlexItem); + RefPtr secondFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + secondFlexItem->AddChild(secondBox); + secondFlexItem->SetAlignSelf(FlexAlign::CENTER); + column->AddChild(secondFlexItem); + RefPtr thirdFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + thirdBox->Attach(mockContext); + thirdFlexItem->AddChild(thirdBox); + column->AddChild(thirdFlexItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions are set correctly + */ + root->Attach(mockContext); + column->Attach(mockContext); + firstFlexItem->Attach(mockContext); + secondFlexItem->Attach(mockContext); + thirdFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition().IsZero()); + EXPECT_TRUE(secondFlexItem->GetPosition() == Offset(LARGE_BOX/2 - MEDIUM_BOX/2, SMALL_BOX)); + EXPECT_TRUE(thirdFlexItem->GetPosition() == Offset(0, SMALL_BOX + MEDIUM_BOX)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(SMALL_BOX, SMALL_BOX)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(MEDIUM_BOX, MEDIUM_BOX)); + EXPECT_TRUE(thirdBox->GetLayoutSize() == Size(LARGE_BOX, LARGE_BOX)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf024 stop"; +} + +/** + * @tc.name: FlexItemAlignSelf025 + * @tc.desc: verify the column with three flex children works fine, + * where the flex alignSelf are set in the flex children. + * @tc.type: FUNC + * @tc.require: AR000FL29F + * @tc.author: wangzezhen + */ +HWTEST_F(RenderFlexItemTest, FlexItemAlignSelf025, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf025 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex alignSelf property to the flex items. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr column = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::FLEX_START, FlexAlign::FLEX_START); + root->AddChild(column); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + firstFlexItem->SetAlignSelf(FlexAlign::FLEX_START); + column->AddChild(firstFlexItem); + RefPtr secondFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + secondFlexItem->AddChild(secondBox); + secondFlexItem->SetAlignSelf(FlexAlign::FLEX_END); + column->AddChild(secondFlexItem); + RefPtr thirdFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + thirdBox->Attach(mockContext); + thirdFlexItem->AddChild(thirdBox); + column->AddChild(thirdFlexItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions are set correctly + */ + root->Attach(mockContext); + column->Attach(mockContext); + firstFlexItem->Attach(mockContext); + secondFlexItem->Attach(mockContext); + thirdFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition().IsZero()); + EXPECT_TRUE(secondFlexItem->GetPosition() == Offset(LARGE_BOX - MEDIUM_BOX, SMALL_BOX)); + EXPECT_TRUE(thirdFlexItem->GetPosition() == Offset(0, SMALL_BOX + MEDIUM_BOX)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(SMALL_BOX, SMALL_BOX)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(MEDIUM_BOX, MEDIUM_BOX)); + EXPECT_TRUE(thirdBox->GetLayoutSize() == Size(LARGE_BOX, LARGE_BOX)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf025 stop"; +} + +/** + * @tc.name: FlexItemAlignSelf026 + * @tc.desc: verify the column with three flex children works fine, + * where the flex alignSelf are set in the flex children. + * @tc.type: FUNC + * @tc.require: AR000FL29F + * @tc.author: wangzezhen + */ +HWTEST_F(RenderFlexItemTest, FlexItemAlignSelf026, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf026 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex alignSelf property to the flex items. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr column = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::FLEX_START, FlexAlign::FLEX_START); + root->AddChild(column); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + firstFlexItem->SetAlignSelf(FlexAlign::FLEX_START); + column->AddChild(firstFlexItem); + RefPtr secondFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + secondFlexItem->AddChild(secondBox); + secondFlexItem->SetAlignSelf(FlexAlign::STRETCH); + column->AddChild(secondFlexItem); + RefPtr thirdFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + thirdBox->Attach(mockContext); + thirdFlexItem->AddChild(thirdBox); + column->AddChild(thirdFlexItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions are set correctly + */ + root->Attach(mockContext); + column->Attach(mockContext); + firstFlexItem->Attach(mockContext); + secondFlexItem->Attach(mockContext); + thirdFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition().IsZero()); + EXPECT_TRUE(secondFlexItem->GetPosition() == Offset(0, SMALL_BOX)); + EXPECT_TRUE(thirdFlexItem->GetPosition() == Offset(0, SMALL_BOX + MEDIUM_BOX)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(SMALL_BOX, SMALL_BOX)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(LARGE_BOX, MEDIUM_BOX)); + EXPECT_TRUE(thirdBox->GetLayoutSize() == Size(LARGE_BOX, LARGE_BOX)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf026 stop"; +} + +/** + * @tc.name: FlexItemAlignSelf027 + * @tc.desc: verify the column with three flex children works fine, + * where the flex alignSelf are set in the flex children. + * @tc.type: FUNC + * @tc.require: AR000FL29F + * @tc.author: wangzezhen + */ +HWTEST_F(RenderFlexItemTest, FlexItemAlignSelf027, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf027 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex alignSelf property to the flex items. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr column = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::FLEX_START, FlexAlign::FLEX_START); + root->AddChild(column); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + firstFlexItem->SetAlignSelf(FlexAlign::CENTER); + column->AddChild(firstFlexItem); + RefPtr secondFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + secondFlexItem->AddChild(secondBox); + secondFlexItem->SetAlignSelf(FlexAlign::FLEX_END); + column->AddChild(secondFlexItem); + RefPtr thirdFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + thirdBox->Attach(mockContext); + thirdFlexItem->AddChild(thirdBox); + column->AddChild(thirdFlexItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions are set correctly + */ + root->Attach(mockContext); + column->Attach(mockContext); + firstFlexItem->Attach(mockContext); + secondFlexItem->Attach(mockContext); + thirdFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition() == Offset(LARGE_BOX/2 - SMALL_BOX/2, 0)); + EXPECT_TRUE(secondFlexItem->GetPosition() == Offset(LARGE_BOX - MEDIUM_BOX, SMALL_BOX)); + EXPECT_TRUE(thirdFlexItem->GetPosition() == Offset(0, SMALL_BOX + MEDIUM_BOX)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(SMALL_BOX, SMALL_BOX)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(MEDIUM_BOX, MEDIUM_BOX)); + EXPECT_TRUE(thirdBox->GetLayoutSize() == Size(LARGE_BOX, LARGE_BOX)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf027 stop"; +} + +/** + * @tc.name: FlexItemAlignSelf028 + * @tc.desc: verify the column with three flex children works fine, + * where the flex alignSelf are set in the flex children. + * @tc.type: FUNC + * @tc.require: AR000FL29E + * @tc.author: wangzezhen + */ +HWTEST_F(RenderFlexItemTest, FlexItemAlignSelf028, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf028 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex alignSelf property to the flex items. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr column = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::FLEX_START, FlexAlign::FLEX_START); + root->AddChild(column); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + firstFlexItem->SetAlignSelf(FlexAlign::CENTER); + column->AddChild(firstFlexItem); + RefPtr secondFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + secondFlexItem->AddChild(secondBox); + secondFlexItem->SetAlignSelf(FlexAlign::FLEX_START); + column->AddChild(secondFlexItem); + RefPtr thirdFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + thirdBox->Attach(mockContext); + thirdFlexItem->AddChild(thirdBox); + column->AddChild(thirdFlexItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions are set correctly + */ + root->Attach(mockContext); + column->Attach(mockContext); + firstFlexItem->Attach(mockContext); + secondFlexItem->Attach(mockContext); + thirdFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition() == Offset(LARGE_BOX/2 - SMALL_BOX/2, 0)); + EXPECT_TRUE(secondFlexItem->GetPosition() == Offset(0, SMALL_BOX)); + EXPECT_TRUE(thirdFlexItem->GetPosition() == Offset(0, SMALL_BOX + MEDIUM_BOX)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(SMALL_BOX, SMALL_BOX)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(MEDIUM_BOX, MEDIUM_BOX)); + EXPECT_TRUE(thirdBox->GetLayoutSize() == Size(LARGE_BOX, LARGE_BOX)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf028 stop"; +} + +/** + * @tc.name: FlexItemAlignSelf029 + * @tc.desc: verify the column with three flex children works fine, + * where the flex alignSelf are set in the flex children. + * @tc.type: FUNC + * @tc.require: AR000FL29E + * @tc.author: wangzezhen + */ +HWTEST_F(RenderFlexItemTest, FlexItemAlignSelf029, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf029 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex alignSelf property to the flex items. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr column = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::FLEX_START, FlexAlign::FLEX_START); + root->AddChild(column); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + firstFlexItem->SetAlignSelf(FlexAlign::FLEX_END); + column->AddChild(firstFlexItem); + RefPtr secondFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + secondFlexItem->AddChild(secondBox); + secondFlexItem->SetAlignSelf(FlexAlign::FLEX_START); + column->AddChild(secondFlexItem); + RefPtr thirdFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + thirdBox->Attach(mockContext); + thirdFlexItem->AddChild(thirdBox); + column->AddChild(thirdFlexItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions are set correctly + */ + root->Attach(mockContext); + column->Attach(mockContext); + firstFlexItem->Attach(mockContext); + secondFlexItem->Attach(mockContext); + thirdFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition() == Offset(LARGE_BOX - SMALL_BOX, 0)); + EXPECT_TRUE(secondFlexItem->GetPosition() == Offset(0, SMALL_BOX)); + EXPECT_TRUE(thirdFlexItem->GetPosition() == Offset(0, SMALL_BOX + MEDIUM_BOX)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(SMALL_BOX, SMALL_BOX)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(MEDIUM_BOX, MEDIUM_BOX)); + EXPECT_TRUE(thirdBox->GetLayoutSize() == Size(LARGE_BOX, LARGE_BOX)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf029 stop"; +} + +/** + * @tc.name: FlexItemAlignSelf030 + * @tc.desc: verify the column with three flex children works fine, + * where the flex alignSelf are set in the flex children. + * @tc.type: FUNC + * @tc.require: AR000FL29E + * @tc.author: wangzezhen + */ +HWTEST_F(RenderFlexItemTest, FlexItemAlignSelf030, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf030 start"; + /** + * @tc.steps: step1. construct the render node tree, set flex alignSelf property to the flex items. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr column = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::FLEX_START, FlexAlign::FLEX_START); + root->AddChild(column); + RefPtr firstFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + firstFlexItem->AddChild(firstBox); + firstFlexItem->SetAlignSelf(FlexAlign::FLEX_END); + column->AddChild(firstFlexItem); + RefPtr secondFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + secondFlexItem->AddChild(secondBox); + secondFlexItem->SetAlignSelf(FlexAlign::CENTER); + column->AddChild(secondFlexItem); + RefPtr thirdFlexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + thirdBox->Attach(mockContext); + thirdFlexItem->AddChild(thirdBox); + column->AddChild(thirdFlexItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions are set correctly + */ + root->Attach(mockContext); + column->Attach(mockContext); + firstFlexItem->Attach(mockContext); + secondFlexItem->Attach(mockContext); + thirdFlexItem->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstFlexItem->GetPosition() == Offset(LARGE_BOX - SMALL_BOX, 0)); + EXPECT_TRUE(secondFlexItem->GetPosition() == Offset(LARGE_BOX/2 - MEDIUM_BOX/2, SMALL_BOX)); + EXPECT_TRUE(thirdFlexItem->GetPosition() == Offset(0, SMALL_BOX + MEDIUM_BOX)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(SMALL_BOX, SMALL_BOX)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(MEDIUM_BOX, MEDIUM_BOX)); + EXPECT_TRUE(thirdBox->GetLayoutSize() == Size(LARGE_BOX, LARGE_BOX)); + GTEST_LOG_(INFO) << "RenderFlexItemTest FlexItemAlignSelf030 stop"; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/flex/render_magic_layout_test.cpp b/frameworks/core/components/test/unittest/flex/render_magic_layout_test.cpp new file mode 100644 index 00000000..0fe98116 --- /dev/null +++ b/frameworks/core/components/test/unittest/flex/render_magic_layout_test.cpp @@ -0,0 +1,555 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/log/log.h" +#include "base/utils/utils.h" +#include "core/components/test/unittest/flex/flex_test_utils.h" +#include "core/components/test/unittest/mock/mock_render_common.h" +#include "core/components/text/text_component.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +constexpr double SMALL_BOX = 100.0; +constexpr double MEDIUM_BOX = 200.0; +constexpr double LARGE_BOX = 300.0; +constexpr double RECT_WIDTH = 1080.0; +constexpr double RECT_HEIGHT = 2244.0; + +} // namespace + +class RenderMagicLayoutTest : public testing::Test { +public: + static void SetUpTestCase() + { + GTEST_LOG_(INFO) << "RenderMagicLayoutTest SetUpTestCase"; + } + + static void TearDownTestCase() + { + GTEST_LOG_(INFO) << "RenderMagicLayoutTest TearDownTestCase"; + } + + void SetUp() {} + void TearDown() {} +}; + +/** + * @tc.name: FlexWeight001 + * @tc.desc: Verify the row component with 1 weight child works fine. + * @tc.type: FUNC + * @tc.require: AR000F2BCC + * @tc.author: yangfan + */ +HWTEST_F(RenderMagicLayoutTest, FlexWeight001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the RenderNode tree, row are set as start-start. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr row = + FlexTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::FLEX_START, FlexAlign::FLEX_START); + row->Attach(mockContext); + root->AddChild(row); + RefPtr firstBox = FlexTestUtils::CreateWeightedBox(1, SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + row->AddChild(firstBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->PerformLayout(); + EXPECT_TRUE(firstBox->GetPosition().IsZero()); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(RECT_WIDTH, SMALL_BOX)); + EXPECT_TRUE(row->GetLayoutSize() == Size(RECT_WIDTH, SMALL_BOX)); +} + +/** + * @tc.name: FlexWeight002 + * @tc.desc: Verify the row component with 3 same weight child works fine. + * @tc.type: FUNC + * @tc.require: AR000F3BAS + * @tc.author: yangfan + */ +HWTEST_F(RenderMagicLayoutTest, FlexWeight002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the RenderNode tree, row are set as start-start. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr row = + FlexTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::FLEX_START, FlexAlign::FLEX_START); + row->Attach(mockContext); + root->AddChild(row); + RefPtr firstBox = FlexTestUtils::CreateWeightedBox(1, SMALL_BOX); + firstBox->Attach(mockContext); + row->AddChild(firstBox); + RefPtr secondBox = FlexTestUtils::CreateWeightedBox(2, SMALL_BOX); + secondBox->Attach(mockContext); + row->AddChild(secondBox); + RefPtr thirdBox = FlexTestUtils::CreateWeightedBox(3, SMALL_BOX); + thirdBox->Attach(mockContext); + row->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->PerformLayout(); + EXPECT_TRUE(firstBox->GetPosition().IsZero()); + EXPECT_TRUE(secondBox->GetPosition() == Offset(180, 0.0)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(540, 0.0)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(180.0, SMALL_BOX)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(360.0, SMALL_BOX)); + EXPECT_TRUE(thirdBox->GetLayoutSize() == Size(540.0, SMALL_BOX)); + EXPECT_TRUE(row->GetLayoutSize() == Size(RECT_WIDTH, SMALL_BOX)); +} + +/** + * @tc.name: FlexWeight003 + * @tc.desc: Verify the column component with 3 same weight child works fine. + * @tc.type: FUNC + * @tc.require: AR000F2BCC + * @tc.author: yangfan + */ +HWTEST_F(RenderMagicLayoutTest, FlexWeight003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the RenderNode tree, row are set as start-start. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr row = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::FLEX_START, FlexAlign::CENTER); + row->Attach(mockContext); + root->AddChild(row); + RefPtr firstBox = FlexTestUtils::CreateWeightedBox(1, SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + row->AddChild(firstBox); + RefPtr secondBox = FlexTestUtils::CreateWeightedBox(2, MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + row->AddChild(secondBox); + RefPtr thirdBox = FlexTestUtils::CreateWeightedBox(3, LARGE_BOX, LARGE_BOX); + thirdBox->Attach(mockContext); + row->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->PerformLayout(); + EXPECT_TRUE(firstBox->GetPosition() == Offset(100, 0)); + EXPECT_TRUE(secondBox->GetPosition() == Offset(50, 374.0)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(0, 1122.0)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(SMALL_BOX, 374.0)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(MEDIUM_BOX, 748.0)); + EXPECT_TRUE(thirdBox->GetLayoutSize() == Size(LARGE_BOX, 1122.0)); + EXPECT_TRUE(row->GetLayoutSize() == Size(LARGE_BOX, RECT_HEIGHT)); +} + +/** + * @tc.name: FlexWeight004 + * @tc.desc: Verify the row component with 3 different weight and aspect ratio children works fine. + * @tc.type: FUNC + * @tc.require: AR000F3BAI + * @tc.author: yangfan + */ +HWTEST_F(RenderMagicLayoutTest, FlexWeight004, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the RenderNode tree, row are set as start-start. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr row = + FlexTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::FLEX_START, FlexAlign::FLEX_START); + row->Attach(mockContext); + root->AddChild(row); + auto firstItem = FlexTestUtils::CreateMagicNode(2, 1, 1, LayoutParam(Size(), Size()), mockContext); + firstItem->Attach(mockContext); + row->AddChild(firstItem); + auto secondItem = FlexTestUtils::CreateMagicNode(1, 2, 1, LayoutParam(Size(), Size()), mockContext); + secondItem->Attach(mockContext); + row->AddChild(secondItem); + auto thirdItem = FlexTestUtils::CreateMagicNode(0.5, 3, 1, LayoutParam(Size(), Size()), mockContext); + thirdItem->Attach(mockContext); + row->AddChild(thirdItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->PerformLayout(); + EXPECT_TRUE(firstItem->GetPosition().IsZero()); + EXPECT_TRUE(secondItem->GetPosition() == Offset(180, 0.0)); + EXPECT_TRUE(thirdItem->GetPosition() == Offset(540, 0.0)); + EXPECT_TRUE(firstItem->GetLayoutSize() == Size(180.0, 90)); + EXPECT_TRUE(secondItem->GetLayoutSize() == Size(360.0, 360)); + EXPECT_TRUE(thirdItem->GetLayoutSize() == Size(540.0, 1080)); + EXPECT_TRUE(row->GetLayoutSize() == Size(RECT_WIDTH, 1080)); +} + +/** + * @tc.name: FlexWeight005 + * @tc.desc: Verify the column component with 3 different weight and aspect ratio children works fine. + * @tc.type: FUNC + * @tc.require: AR000F3BAR + * @tc.author: yangfan + */ +HWTEST_F(RenderMagicLayoutTest, FlexWeight005, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the RenderNode tree, row are set as start-start. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr column = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::FLEX_START, FlexAlign::CENTER); + column->Attach(mockContext); + root->AddChild(column); + auto firstItem = FlexTestUtils::CreateMagicNode(2, 1, 1, LayoutParam(Size(), Size()), mockContext); + firstItem->Attach(mockContext); + column->AddChild(firstItem); + auto secondItem = FlexTestUtils::CreateMagicNode(1, 2, 1, LayoutParam(Size(), Size()), mockContext); + secondItem->Attach(mockContext); + column->AddChild(secondItem); + auto thirdItem = FlexTestUtils::CreateMagicNode(0.5, 3, 1, LayoutParam(Size(), Size()), mockContext); + thirdItem->Attach(mockContext); + column->AddChild(thirdItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->PerformLayout(); + EXPECT_TRUE(firstItem->GetPosition() == Offset(0.0, 0.0)); + EXPECT_TRUE(secondItem->GetPosition() == Offset(0.0, 374.0)); + EXPECT_TRUE(thirdItem->GetPosition() == Offset(93.5, 1122.0)); + EXPECT_TRUE(firstItem->GetLayoutSize() == Size(748, 374.0)); + EXPECT_TRUE(secondItem->GetLayoutSize() == Size(748.0, 748.0)); + EXPECT_TRUE(thirdItem->GetLayoutSize() == Size(561.0, 1122)); + EXPECT_TRUE(column->GetLayoutSize() == Size(748.0, 2244.0)); +} + +/** + * @tc.name: FlexWeight006 + * @tc.desc: Verify the row component with 3 different weight and constraint children works fine. + * @tc.type: FUNC + * @tc.require: AR000F3BAJ + * @tc.author: yangfan + */ +HWTEST_F(RenderMagicLayoutTest, FlexWeight006, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the RenderNode tree, row are set as start-start. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr row = + FlexTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::FLEX_START, FlexAlign::FLEX_END); + row->Attach(mockContext); + root->AddChild(row); + LayoutParam constraint = LayoutParam(Size(1500.0, 500.0), Size(500.0, 100.0)); + auto firstItem = FlexTestUtils::CreateMagicNode(1, 1, 1, constraint, mockContext); + firstItem->Attach(mockContext); + row->AddChild(firstItem); + auto secondItem = FlexTestUtils::CreateMagicNode(1, 2, 1, constraint, mockContext); + secondItem->Attach(mockContext); + row->AddChild(secondItem); + auto thirdItem = FlexTestUtils::CreateMagicNode(1, 3, 3, constraint, mockContext); + thirdItem->Attach(mockContext); + row->AddChild(thirdItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->PerformLayout(); + EXPECT_TRUE(firstItem->GetPosition() == Offset(0.0, 500.0)); + EXPECT_TRUE(secondItem->GetPosition() == Offset(0.0, 500.0)); + EXPECT_TRUE(thirdItem->GetPosition() == Offset(0.0, 0.0)); + EXPECT_TRUE(firstItem->GetLayoutSize() == Size(0, 0.0)); + EXPECT_TRUE(secondItem->GetLayoutSize() == Size(0.0, 0.0)); + EXPECT_TRUE(thirdItem->GetLayoutSize() == Size(1080.0, 500)); + EXPECT_TRUE(row->GetLayoutSize() == Size(1080.0, 500.0)); +} + +/** + * @tc.name: FlexWeight007 + * @tc.desc: Verify the column component with 3 different weight and displayIndex children works fine. + * @tc.type: FUNC + * @tc.require: AR000F3BAK + * @tc.author: yangfan + */ +HWTEST_F(RenderMagicLayoutTest, FlexWeight007, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the RenderNode tree, row are set as start-start. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr column = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::FLEX_START, FlexAlign::FLEX_END); + column->Attach(mockContext); + root->AddChild(column); + LayoutParam constraint = LayoutParam(Size(150.0, 1200.0), Size(50.0, 500.0)); + auto firstItem = FlexTestUtils::CreateMagicNode(0, 1, 3, constraint, mockContext); + firstItem->Attach(mockContext); + column->AddChild(firstItem); + auto secondItem = FlexTestUtils::CreateMagicNode(1, 2, 2, constraint, mockContext); + secondItem->Attach(mockContext); + column->AddChild(secondItem); + auto thirdItem = FlexTestUtils::CreateMagicNode(0, 3, 1, constraint, mockContext); + thirdItem->Attach(mockContext); + column->AddChild(thirdItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->PerformLayout(); + EXPECT_TRUE(firstItem->GetPosition() == Offset(50.0, 0.0)); + EXPECT_TRUE(secondItem->GetPosition() == Offset(0.0, 748.0)); + EXPECT_TRUE(thirdItem->GetPosition() == Offset(150.0, 1948.0)); + EXPECT_TRUE(firstItem->GetLayoutSize() == Size(100.0, 748.0)); + EXPECT_TRUE(secondItem->GetLayoutSize() == Size(150.0, 1200.0)); + EXPECT_TRUE(thirdItem->GetLayoutSize() == Size(0.0, 0.0)); + EXPECT_TRUE(column->GetLayoutSize() == Size(150.0, 2244.0)); +} + +/** + * @tc.name: FlexWeight008 + * @tc.desc: Verify the row component in weight and stretch works fine. + * @tc.type: FUNC + * @tc.require: AR000F7J2H + * @tc.author: yangfan + */ +HWTEST_F(RenderMagicLayoutTest, FlexWeight008, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the RenderNode tree, row are set as start-stretch. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr row = + FlexTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::FLEX_START, FlexAlign::STRETCH); + row->Attach(mockContext); + root->AddChild(row); + LayoutParam constraint = LayoutParam(Size(1500.0, 500.0), Size(500.0, 100.0)); + auto firstItem = FlexTestUtils::CreateMagicNode(1, 5, 3, constraint, mockContext); + firstItem->Attach(mockContext); + row->AddChild(firstItem); + auto secondItem = FlexTestUtils::CreateMagicNode(1, 2, 1, constraint, mockContext); + secondItem->Attach(mockContext); + row->AddChild(secondItem); + auto thirdItem = FlexTestUtils::CreateMagicNode(1, 3, 3, constraint, mockContext); + thirdItem->Attach(mockContext); + row->AddChild(thirdItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->PerformLayout(); + EXPECT_TRUE(firstItem->GetPosition() == Offset(0.0, 0.0)); + EXPECT_TRUE(secondItem->GetPosition() == Offset(675.0, 0.0)); + EXPECT_TRUE(thirdItem->GetPosition() == Offset(675, 0.0)); + EXPECT_TRUE(firstItem->GetLayoutSize() == Size(675, 500.0)); + EXPECT_TRUE(secondItem->GetLayoutSize() == Size(0.0, 0.0)); + EXPECT_TRUE(thirdItem->GetLayoutSize() == Size(500.0, 500.0)); + EXPECT_TRUE(row->GetLayoutSize() == Size(1080.0, 500.0)); +} + +/** + * @tc.name: FlexWeight009 + * @tc.desc: Verify the column component with 3 different weight and stretch-mode works fine. + * @tc.type: FUNC + * @tc.require: AR000F7JGL + * @tc.author: yangfan + */ +HWTEST_F(RenderMagicLayoutTest, FlexWeight009, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the RenderNode tree, column are set as start-stretch. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr row = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::FLEX_START, FlexAlign::STRETCH); + row->Attach(mockContext); + root->AddChild(row); + LayoutParam constraint = LayoutParam(Size(1500.0, 500.0), Size(500.0, 100.0)); + auto firstItem = FlexTestUtils::CreateMagicNode(1, 1, 3, constraint, mockContext); + firstItem->Attach(mockContext); + row->AddChild(firstItem); + auto secondItem = FlexTestUtils::CreateMagicNode(1, 2, 1, constraint, mockContext); + secondItem->Attach(mockContext); + row->AddChild(secondItem); + auto thirdItem = FlexTestUtils::CreateMagicNode(1, 3, 3, constraint, mockContext); + thirdItem->Attach(mockContext); + row->AddChild(thirdItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->PerformLayout(); + EXPECT_TRUE(firstItem->GetPosition() == Offset(0.0, 0.0)); + EXPECT_TRUE(secondItem->GetPosition() == Offset(0.0, 374.0)); + EXPECT_TRUE(thirdItem->GetPosition() == Offset(0, 874.0)); + EXPECT_TRUE(firstItem->GetLayoutSize() == Size(500, 374.0)); + EXPECT_TRUE(secondItem->GetLayoutSize() == Size(500.0, 500.0)); + EXPECT_TRUE(thirdItem->GetLayoutSize() == Size(500.0, 500)); + EXPECT_TRUE(row->GetLayoutSize() == Size(500.0, 2244.0)); +} + +/** + * @tc.name: FlexWeight010 + * @tc.desc: Verify the row component with illegal weight works fine. + * @tc.type: FUNC + * @tc.require: AR000F7JGL + * @tc.author: yangfan + */ +HWTEST_F(RenderMagicLayoutTest, FlexWeight010, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the RenderNode tree, row are set as start-stretch. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr row = + FlexTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::FLEX_START, FlexAlign::STRETCH); + row->Attach(mockContext); + root->AddChild(row); + LayoutParam constraint = LayoutParam(Size(1500.0, 500.0), Size(500.0, 100.0)); + auto firstItem = FlexTestUtils::CreateMagicNode(1, 0, 3, constraint, mockContext); + firstItem->Attach(mockContext); + row->AddChild(firstItem); + auto secondItem = FlexTestUtils::CreateMagicNode(1, -1, 1, constraint, mockContext); + secondItem->Attach(mockContext); + row->AddChild(secondItem); + auto thirdItem = FlexTestUtils::CreateMagicNode(1, 3, 3, constraint, mockContext); + thirdItem->Attach(mockContext); + row->AddChild(thirdItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->PerformLayout(); + EXPECT_TRUE(firstItem->GetPosition() == Offset(0.0, 0.0)); + EXPECT_TRUE(secondItem->GetPosition() == Offset(500.0, 0.0)); + EXPECT_TRUE(thirdItem->GetPosition() == Offset(500, 0.0)); + EXPECT_TRUE(firstItem->GetLayoutSize() == Size(500, 500.0)); + EXPECT_TRUE(secondItem->GetLayoutSize() == Size(0.0, 0.0)); + EXPECT_TRUE(thirdItem->GetLayoutSize() == Size(500.0, 500)); + EXPECT_TRUE(row->GetLayoutSize() == Size(1080.0, 500.0)); +} + +/** + * @tc.name: DisplayIndexTest001 + * @tc.desc: Verify the row component with 3 constrainted and displayIndex children with no aspect-ratio works fine. + * @tc.type: FUNC + * @tc.require: AR000F3BAI + * @tc.author: yangfan + */ +HWTEST_F(RenderMagicLayoutTest, DisplayIndexTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the RenderNode tree, row are set as start-start. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr row = + FlexTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::FLEX_START, FlexAlign::FLEX_START); + row->Attach(mockContext); + root->AddChild(row); + LayoutParam constraint = LayoutParam(Size(1000.0, 1000.0), Size(500.0, 500.0)); + auto firstItem = FlexTestUtils::CreateMagicNode(0, 0, 3, constraint, mockContext); + firstItem->Attach(mockContext); + row->AddChild(firstItem); + auto secondItem = FlexTestUtils::CreateMagicNode(0, 0, 2, constraint, mockContext); + secondItem->Attach(mockContext); + row->AddChild(secondItem); + auto thirdItem = FlexTestUtils::CreateMagicNode(0, 0, 1, constraint, mockContext); + thirdItem->Attach(mockContext); + row->AddChild(thirdItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->PerformLayout(); + EXPECT_TRUE(firstItem->GetPosition() == Offset(0.0, 0.0)); + EXPECT_TRUE(secondItem->GetPosition() == Offset(500.0, 0.0)); + EXPECT_TRUE(thirdItem->GetPosition() == Offset(1000, 0.0)); + EXPECT_TRUE(firstItem->GetLayoutSize() == Size(500.0, 500.0)); + EXPECT_TRUE(secondItem->GetLayoutSize() == Size(500.0, 500.0)); + EXPECT_TRUE(thirdItem->GetLayoutSize() == Size(0.0, 0.0)); + EXPECT_TRUE(row->GetLayoutSize() == Size(1080.0, 500.0)); +} + +/** + * @tc.name: DisplayIndexTest002 + * @tc.desc: Verify the row component with 3 constrainted and displayIndex children with aspect-ratio works fine. + * @tc.type: FUNC + * @tc.require: AR000F3BAS + * @tc.author: yangfan + */ +HWTEST_F(RenderMagicLayoutTest, DisplayIndexTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the RenderNode tree, row are set as start-start. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr row = + FlexTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::FLEX_START, FlexAlign::STRETCH); + row->Attach(mockContext); + root->AddChild(row); + LayoutParam constraint = LayoutParam(Size(1000.0, 1000.0), Size(500.0, 500.0)); + auto firstItem = FlexTestUtils::CreateMagicNode(2, 0, 3, constraint, mockContext); + firstItem->Attach(mockContext); + row->AddChild(firstItem); + auto secondItem = FlexTestUtils::CreateMagicNode(2, 0, 2, constraint, mockContext); + secondItem->Attach(mockContext); + row->AddChild(secondItem); + auto thirdItem = FlexTestUtils::CreateMagicNode(1.5, 0, 1, constraint, mockContext); + thirdItem->Attach(mockContext); + row->AddChild(thirdItem); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->PerformLayout(); + EXPECT_TRUE(firstItem->GetPosition() == Offset(0.0, 0.0)); + EXPECT_TRUE(secondItem->GetPosition() == Offset(1000.0, 0.0)); + EXPECT_TRUE(thirdItem->GetPosition() == Offset(1000, 0.0)); + EXPECT_TRUE(firstItem->GetLayoutSize() == Size(1000.0, 500.0)); + EXPECT_TRUE(secondItem->GetLayoutSize() == Size(0.0, 0.0)); + EXPECT_TRUE(thirdItem->GetLayoutSize() == Size(0.0, 0.0)); + EXPECT_TRUE(row->GetLayoutSize() == Size(1080.0, 500.0)); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/flex/render_row_test.cpp b/frameworks/core/components/test/unittest/flex/render_row_test.cpp new file mode 100644 index 00000000..8c318757 --- /dev/null +++ b/frameworks/core/components/test/unittest/flex/render_row_test.cpp @@ -0,0 +1,712 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/log/log.h" +#include "base/utils/utils.h" +#include "core/components/test/unittest/flex/flex_test_utils.h" +#include "core/components/test/unittest/mock/mock_render_common.h" +#include "core/components/text/text_component.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +constexpr double SMALL_BOX = 100.0; +constexpr double MEDIUM_BOX = 200.0; +constexpr double LARGE_BOX = 300.0; +constexpr double SMALL_TEXT = 50.0; +constexpr double MEDIUM_TEXT = 100.0; +constexpr double LARGE_TEXT = 150.0; +constexpr double SMALL_BASELINE = 30; +constexpr double MEDIUM_BASELINE = 60; +constexpr double RECT_WIDTH = 1080.0; +constexpr double CENTER_SPACE_SIZE = 240.0; +constexpr double END_SPACE_SIZE = 480.0; +constexpr double BETWEEN_SPACE_SIZE = 240.0; +constexpr double AROUND_FRONT_SPACE_SIZE = 80.0; +constexpr double EVENLY_SPACE_SIZE = 120.0; +constexpr double AROUND_SPACE_SIZE = 160.0; +constexpr double CENTER_ALIGN_SIZE = 50.0; +constexpr double END_ALIGN_SIZE = 100.0; +constexpr double ROW_COL_CENTER_SIZE = 390.0; +constexpr double ROW_COL_SMALL_CENTER_SIZE = 290.0; + +} // namespace + +class RenderRowTest : public testing::Test { +public: + static void SetUpTestCase() + { + GTEST_LOG_(INFO) << "RenderRowTest SetUpTestCase"; + } + + static void TearDownTestCase() + { + GTEST_LOG_(INFO) << "RenderRowTest TearDownTestCase"; + } + + void SetUp() {} + void TearDown() {} +}; + +/** + * @tc.name: RenderFlexUpdate001 + * @tc.desc: Verify the Update Interface of RenderFlex does not work for other components + * @tc.type: FUNC + * @tc.require: AR000DAQTH AR000DAIH4 + * @tc.author: yangfan + */ +HWTEST_F(RenderRowTest, RenderFlexUpdate001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderRowTest RenderFlexUpdate001 start"; + /** + * @tc.steps: step1. construct Text Component and RenderFlex. + */ + RefPtr text = AceType::MakeRefPtr("Hi Ace"); + RefPtr renderFlex = AceType::MakeRefPtr(); + + /** + * @tc.steps: step2. call the Update interface of RenderFlex + * @tc.expected: step2. renderFlex are not set need layout + */ + renderFlex->Update(text); + EXPECT_TRUE(!renderFlex->NeedLayout()); +} + +/** + * @tc.name: RenderFlexUpdate002 + * @tc.desc: Verify that RenderFlex works for flex component. + * @tc.type: FUNC + * @tc.require: AR000DAQTH AR000DAIH4 + * @tc.author: yangfan + */ +HWTEST_F(RenderRowTest, RenderFlexUpdate002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderRowTest RenderFlexUpdate002 start"; + /** + * @tc.steps: step1. construct flex component and RenderFlex. + */ + RefPtr text = AceType::MakeRefPtr("Hi Ace"); + FlexAlign main = FlexAlign::FLEX_START; + FlexAlign cross = FlexAlign::FLEX_START; + std::list> child; + child.emplace_back(text); + RefPtr row = AceType::MakeRefPtr(main, cross, child); + RefPtr renderFlex = AceType::MakeRefPtr(); + + /** + * @tc.steps: step2. call Update interface of renderFlex + * @tc.expected: step2. renderFlex are set needLayout + */ + renderFlex->Update(row); + EXPECT_TRUE(renderFlex->NeedLayout()); +} + +/** + * @tc.name: RenderRowLayout001 + * @tc.desc: Verify the row component with main(start) and cross(start) works fine. + * @tc.type: FUNC + * @tc.require: AR000DAQTH AR000DAIH5 + * @tc.author: yangfan + */ +HWTEST_F(RenderRowTest, RenderRowLayout001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderRowTest RenderRowLayout001 start"; + /** + * @tc.steps: step1. construct the RenderNode tree, flex are set as start-start. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr row = + FlexTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::FLEX_START, FlexAlign::FLEX_START); + root->AddChild(row); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + row->AddChild(firstBox); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + row->AddChild(secondBox); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + thirdBox->Attach(mockContext); + row->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->Attach(mockContext); + row->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstBox->GetPosition().IsZero()); + EXPECT_TRUE(secondBox->GetPosition() == Offset(SMALL_BOX, 0)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(SMALL_BOX + MEDIUM_BOX, 0)); +} + +/** + * @tc.name: RenderRowLayout002 + * @tc.desc: Verify the row component with main(start) and cross(center) works fine. + * @tc.type: FUNC + * @tc.require: AR000DAQTH AR000DAIH5 + * @tc.author: yangfan + */ +HWTEST_F(RenderRowTest, RenderRowLayout002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderRowTest RenderRowLayout002 start"; + /** + * @tc.steps: step1. construct the RenderNode tree, flex are set as start-center. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr row = + FlexTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::FLEX_START, FlexAlign::CENTER); + root->AddChild(row); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + row->AddChild(firstBox); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + row->AddChild(secondBox); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + thirdBox->Attach(mockContext); + row->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->Attach(mockContext); + row->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstBox->GetPosition() == Offset(0, CENTER_ALIGN_SIZE + CENTER_ALIGN_SIZE)); + EXPECT_TRUE(secondBox->GetPosition() == Offset(SMALL_BOX, CENTER_ALIGN_SIZE)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(SMALL_BOX + MEDIUM_BOX, 0)); +} + +/** + * @tc.name: RenderRowLayout003 + * @tc.desc: Verify the row component with main(start) and cross(end) works fine. + * @tc.type: FUNC + * @tc.require: AR000DAQTH AR000DAIH5 + * @tc.author: yangfan + */ +HWTEST_F(RenderRowTest, RenderRowLayout003, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderRowTest RenderRowLayout003 start"; + /** + * @tc.steps: step1. construct the RenderNode tree, flex are set as start-end. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr row = + FlexTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::FLEX_START, FlexAlign::FLEX_END); + root->AddChild(row); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + row->AddChild(firstBox); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + row->AddChild(secondBox); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + thirdBox->Attach(mockContext); + row->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->Attach(mockContext); + row->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstBox->GetPosition() == Offset(0, END_ALIGN_SIZE + END_ALIGN_SIZE)); + EXPECT_TRUE(secondBox->GetPosition() == Offset(SMALL_BOX, END_ALIGN_SIZE)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(SMALL_BOX + MEDIUM_BOX, 0)); +} + +/** + * @tc.name: RenderRowLayout004 + * @tc.desc: Verify the row component with main(start) and cross(stretch) works fine. + * @tc.type: FUNC + * @tc.require: AR000DAQTH AR000DAIH5 + * @tc.author: yangfan + */ +HWTEST_F(RenderRowTest, RenderRowLayout004, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderRowTest RenderRowLayout004 start"; + /** + * @tc.steps: step1. construct the RenderNode tree, flex are set as start-stretch. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr row = + FlexTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::FLEX_START, FlexAlign::STRETCH); + root->AddChild(row); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + row->AddChild(firstBox); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + row->AddChild(secondBox); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + thirdBox->Attach(mockContext); + row->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly, the size of three boxes are set correctly + */ + root->Attach(mockContext); + row->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstBox->GetPosition() == Offset(0, 0.0)); + EXPECT_TRUE(secondBox->GetPosition() == Offset(SMALL_BOX, 0.0)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(SMALL_BOX + MEDIUM_BOX, 0.0)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(SMALL_BOX, LARGE_BOX)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(MEDIUM_BOX, LARGE_BOX)); + EXPECT_TRUE(thirdBox->GetLayoutSize() == Size(LARGE_BOX, LARGE_BOX)); +} + +/** + * @tc.name: RenderRowLayout005 + * @tc.desc: Verify the row component with main(center) and cross(start) works fine. + * @tc.type: FUNC + * @tc.require: AR000DAQTH AR000DAIH5 + * @tc.author: yangfan + */ +HWTEST_F(RenderRowTest, RenderRowLayout005, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderRowTest RenderRowLayout005 start"; + /** + * @tc.steps: step1. construct the RenderNode tree, flex are set as center-start. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr row = + FlexTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::CENTER, FlexAlign::FLEX_START); + root->AddChild(row); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + row->AddChild(firstBox); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + row->AddChild(secondBox); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + thirdBox->Attach(mockContext); + row->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->Attach(mockContext); + row->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstBox->GetPosition() == Offset(CENTER_SPACE_SIZE, 0.0)); + EXPECT_TRUE(secondBox->GetPosition() == Offset(CENTER_SPACE_SIZE + SMALL_BOX, 0.0)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(CENTER_SPACE_SIZE + SMALL_BOX + MEDIUM_BOX, 0.0)); +} + +/** + * @tc.name: RenderRowLayout006 + * @tc.desc: Verify the row component with main(end) and cross(start) works fine. + * @tc.type: FUNC + * @tc.require: AR000DAQTH AR000DAIH5 + * @tc.author: yangfan + */ +HWTEST_F(RenderRowTest, RenderRowLayout006, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderRowTest RenderRowLayout006 start"; + /** + * @tc.steps: step1. construct the RenderNode tree, flex are set as end-start. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr row = + FlexTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::FLEX_END, FlexAlign::FLEX_START); + root->AddChild(row); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + row->AddChild(firstBox); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + row->AddChild(secondBox); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + thirdBox->Attach(mockContext); + row->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->Attach(mockContext); + row->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstBox->GetPosition() == Offset(END_SPACE_SIZE, 0.0)); + EXPECT_TRUE(secondBox->GetPosition() == Offset(END_SPACE_SIZE + SMALL_BOX, 0.0)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(END_SPACE_SIZE + SMALL_BOX + MEDIUM_BOX, 0)); +} + +/** + * @tc.name: RenderRowLayout007 + * @tc.desc: Verify the row component with main(space-between) and cross(start) works fine. + * @tc.type: FUNC + * @tc.require: AR000DAQTH AR000DAIH5 + * @tc.author: yangfan + */ +HWTEST_F(RenderRowTest, RenderRowLayout007, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderRowTest RenderRowLayout007 start"; + /** + * @tc.steps: step1. construct the RenderNode tree, flex are set as space_between-start. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr row = + FlexTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::SPACE_BETWEEN, FlexAlign::FLEX_START); + root->AddChild(row); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + row->AddChild(firstBox); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + row->AddChild(secondBox); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + thirdBox->Attach(mockContext); + row->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->Attach(mockContext); + row->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstBox->GetPosition() == Offset(0, 0)); + EXPECT_TRUE(secondBox->GetPosition() == Offset(BETWEEN_SPACE_SIZE + SMALL_BOX, 0)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(BETWEEN_SPACE_SIZE + BETWEEN_SPACE_SIZE + SMALL_BOX + MEDIUM_BOX, 0)); +} + +/** + * @tc.name: RenderRowLayout008 + * @tc.desc: Verify the row component with main(space-around) and cross(start) works fine. + * @tc.type: FUNC + * @tc.require: AR000DAQTH AR000DAIH5 + * @tc.author: yangfan + */ +HWTEST_F(RenderRowTest, RenderRowLayout008, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderRowTest RenderRowLayout008 start"; + /** + * @tc.steps: step1. construct the RenderNode tree, flex are set as space_around-start. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr row = + FlexTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::SPACE_AROUND, FlexAlign::FLEX_START); + root->AddChild(row); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + row->AddChild(firstBox); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + row->AddChild(secondBox); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + thirdBox->Attach(mockContext); + row->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->Attach(mockContext); + row->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstBox->GetPosition() == Offset(AROUND_FRONT_SPACE_SIZE, 0.0)); + EXPECT_TRUE(secondBox->GetPosition() == Offset(AROUND_FRONT_SPACE_SIZE + AROUND_SPACE_SIZE + SMALL_BOX, 0.0)); + EXPECT_TRUE(thirdBox->GetPosition() == + Offset(AROUND_FRONT_SPACE_SIZE + AROUND_SPACE_SIZE + AROUND_SPACE_SIZE + SMALL_BOX + MEDIUM_BOX, 0)); +} + +/** + * @tc.name: RenderRowLayout009 + * @tc.desc: Verify the row component with main(center) and cross(center) under row component works fine. + * @tc.type: FUNC + * @tc.require: AR000DAQTH AR000DAIH5 + * @tc.author: yangfan + */ +HWTEST_F(RenderRowTest, RenderRowLayout009, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderRowTest RenderRowLayout009 start"; + /** + * @tc.steps: step1. construct the node tree, row has a child row, child row are set as center-center. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr row = + FlexTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::FLEX_START, FlexAlign::FLEX_START); + root->AddChild(row); + RefPtr childRow = + FlexTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::CENTER, FlexAlign::CENTER); + row->AddChild(childRow); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + childRow->AddChild(firstBox); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + childRow->AddChild(secondBox); + RefPtr secondChildRow = + FlexTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::CENTER, FlexAlign::CENTER); + row->AddChild(secondChildRow); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + thirdBox->Attach(mockContext); + secondChildRow->AddChild(thirdBox); + RefPtr fourthBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + fourthBox->Attach(mockContext); + secondChildRow->AddChild(fourthBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->Attach(mockContext); + row->Attach(mockContext); + childRow->Attach(mockContext); + secondChildRow->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(childRow->GetPosition() == Offset(0.0, 0.0)); + EXPECT_TRUE(secondChildRow->GetPosition() == Offset(RECT_WIDTH, 0.0)); + EXPECT_TRUE(firstBox->GetPosition() == Offset(ROW_COL_CENTER_SIZE, CENTER_ALIGN_SIZE)); + EXPECT_TRUE(secondBox->GetPosition() == Offset(ROW_COL_CENTER_SIZE + SMALL_BOX, 0.0)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(ROW_COL_SMALL_CENTER_SIZE, CENTER_ALIGN_SIZE)); + EXPECT_TRUE(fourthBox->GetPosition() == Offset(ROW_COL_SMALL_CENTER_SIZE + MEDIUM_BOX, 0.0)); +} + +/** + * @tc.name: RenderRowLayout010 + * @tc.desc: Verify the row component with main(center) and cross(center) under column component works fine. + * @tc.type: FUNC + * @tc.require: AR000DAQTH AR000DAIH5 + * @tc.author: yangfan + */ +HWTEST_F(RenderRowTest, RenderRowLayout010, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderRowTest RenderRowLayout010 start"; + /** + * @tc.steps: step1. construct the node tree, parent column has a child row, child column are set as center-center. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr column = + FlexTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::FLEX_START, FlexAlign::FLEX_START); + root->AddChild(column); + RefPtr childRow = + FlexTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::CENTER, FlexAlign::CENTER); + column->AddChild(childRow); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + childRow->AddChild(firstBox); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + childRow->AddChild(secondBox); + RefPtr secondChildRow = + FlexTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::CENTER, FlexAlign::CENTER); + column->AddChild(secondChildRow); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + thirdBox->Attach(mockContext); + secondChildRow->AddChild(thirdBox); + RefPtr fourthBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + fourthBox->Attach(mockContext); + secondChildRow->AddChild(fourthBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->Attach(mockContext); + column->Attach(mockContext); + childRow->Attach(mockContext); + secondChildRow->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(childRow->GetPosition() == Offset(0.0, 0.0)); + EXPECT_TRUE(secondChildRow->GetPosition() == Offset(0.0, MEDIUM_BOX)); + EXPECT_TRUE(firstBox->GetPosition() == Offset(ROW_COL_CENTER_SIZE, CENTER_ALIGN_SIZE)); + EXPECT_TRUE(secondBox->GetPosition() == Offset(ROW_COL_CENTER_SIZE + SMALL_BOX, 0.0)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(ROW_COL_SMALL_CENTER_SIZE, CENTER_ALIGN_SIZE)); + EXPECT_TRUE(fourthBox->GetPosition() == Offset(ROW_COL_SMALL_CENTER_SIZE + MEDIUM_BOX, 0.0)); +} + +/** + * @tc.name: RenderRowLayout011 + * @tc.desc: Verify the row component with main(space-evenly) and cross(start) works fine. + * @tc.type: FUNC + * @tc.require: SR000F3BA7 AR000F3BA9 + * @tc.author: yangfan + */ +HWTEST_F(RenderRowTest, RenderRowLayout011, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the RenderNode tree, flex are set as space_between-start. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr row = + FlexTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::SPACE_EVENLY, FlexAlign::FLEX_START); + root->AddChild(row); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + row->AddChild(firstBox); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + row->AddChild(secondBox); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + thirdBox->Attach(mockContext); + row->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->Attach(mockContext); + row->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstBox->GetPosition() == Offset(EVENLY_SPACE_SIZE, 0)); + EXPECT_TRUE(secondBox->GetPosition() == Offset(2 * EVENLY_SPACE_SIZE + SMALL_BOX, 0)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(3 * EVENLY_SPACE_SIZE + SMALL_BOX + MEDIUM_BOX, 0)); +} + + +/** + * @tc.name: RenderBaseline001 + * @tc.desc: Verify the row component with main(start) and cross(baseline) works fine when all the children are text. + * @tc.type: FUNC + * @tc.require: AR000DAQTI + * @tc.author: yangfan + */ +HWTEST_F(RenderRowTest, RenderBaseline001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderRowTest RenderBaseline001 start"; + /** + * @tc.steps: step1. construct the RenderNode tree, flex are set as start-baseline. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr row = + FlexTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::FLEX_START, FlexAlign::BASELINE); + root->AddChild(row); + RefPtr firstText = FlexTestUtils::CreateRenderText(SMALL_TEXT); + row->AddChild(firstText); + RefPtr secondText = FlexTestUtils::CreateRenderText(MEDIUM_TEXT); + row->AddChild(secondText); + RefPtr thirdText = FlexTestUtils::CreateRenderText(LARGE_TEXT); + row->AddChild(thirdText); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->Attach(mockContext); + row->Attach(mockContext); + firstText->Attach(mockContext); + secondText->Attach(mockContext); + thirdText->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstText->GetPosition() == Offset(0, MEDIUM_BASELINE)); + EXPECT_TRUE(secondText->GetPosition() == Offset(SMALL_TEXT, SMALL_BASELINE)); + EXPECT_TRUE(thirdText->GetPosition() == Offset(SMALL_TEXT + MEDIUM_TEXT, 0)); +} + +/** + * @tc.name: RenderBaseline002 + * @tc.desc: Verify the row component with main(start) and cross(baseline) works fine when not all children are text. + * @tc.type: FUNC + * @tc.require: AR000DAQTI + * @tc.author: yangfan + */ +HWTEST_F(RenderRowTest, RenderBaseline002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderRowTest RenderBaseline002 start"; + /** + * @tc.steps: step1. construct the RenderNode tree, flex are set as start-baseline. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr row = + FlexTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::FLEX_START, FlexAlign::BASELINE); + root->AddChild(row); + RefPtr firstText = FlexTestUtils::CreateRenderText(SMALL_TEXT); + row->AddChild(firstText); + RefPtr secondText = FlexTestUtils::CreateRenderText(MEDIUM_TEXT); + row->AddChild(secondText); + RefPtr box = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + box->Attach(mockContext); + row->AddChild(box); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->Attach(mockContext); + row->Attach(mockContext); + firstText->Attach(mockContext); + secondText->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstText->GetPosition() == Offset(0, MEDIUM_BOX - SMALL_BASELINE)); + EXPECT_TRUE(secondText->GetPosition() == Offset(SMALL_TEXT, MEDIUM_BOX - MEDIUM_BASELINE)); + EXPECT_TRUE(box->GetPosition() == Offset(SMALL_TEXT + MEDIUM_TEXT, 0)); +} + +/** + * @tc.name: RenderBaseline003 + * @tc.desc: Verify the row component with main(start) and cross(baseline) works fine when some children are flexItem. + * @tc.type: FUNC + * @tc.require: AR000DAQTI + * @tc.author: yangfan + */ +HWTEST_F(RenderRowTest, RenderBaseline003, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderRowTest RenderBaseline003 start"; + /** + * @tc.steps: step1. construct the RenderNode tree, flex are set as start-baseline. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr row = + FlexTestUtils::CreateRenderFlex(FlexDirection::ROW, FlexAlign::FLEX_START, FlexAlign::BASELINE); + root->AddChild(row); + RefPtr firstText = FlexTestUtils::CreateRenderText(SMALL_TEXT); + row->AddChild(firstText); + RefPtr flexItem = FlexTestUtils::CreateRenderFlexItem(0, 0, 0); + row->AddChild(flexItem); + RefPtr secondText = FlexTestUtils::CreateRenderText(MEDIUM_TEXT); + flexItem->AddChild(secondText); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->Attach(mockContext); + row->Attach(mockContext); + firstText->Attach(mockContext); + flexItem->Attach(mockContext); + secondText->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstText->GetPosition() == Offset(0, SMALL_BASELINE)); + EXPECT_TRUE(flexItem->GetPosition() == Offset(SMALL_TEXT, 0)); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/gestures/BUILD.gn b/frameworks/core/components/test/unittest/gestures/BUILD.gn new file mode 100644 index 00000000..016cd6b1 --- /dev/null +++ b/frameworks/core/components/test/unittest/gestures/BUILD.gn @@ -0,0 +1,52 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +if (is_standard_system) { + module_output_path = "ace_engine_standard/graphicalbasicability/gesture" +} + +ohos_unittest("GestureComponentTest") { + module_out_path = module_output_path + + sources = [ + "$ace_root/frameworks/core/components/test/json/json_frontend.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/mock_render_common.cpp", + "gesture_component_test.cpp", + ] + + configs = [ "$ace_root:ace_test_config" ] + + deps = [ + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "//third_party/googletest:gtest_main", + ] + if (is_standard_system) { + deps += [ "$ace_root/frameworks/bridge:js_framework_ohos" ] + } + + if (is_standard_system) { + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":GestureComponentTest" ] +} diff --git a/frameworks/core/components/test/unittest/gestures/gesture_component_test.cpp b/frameworks/core/components/test/unittest/gestures/gesture_component_test.cpp new file mode 100644 index 00000000..27e211d5 --- /dev/null +++ b/frameworks/core/components/test/unittest/gestures/gesture_component_test.cpp @@ -0,0 +1,439 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include "core/components/gesture_listener/render_gesture_listener.h" +#include "core/components/touch_listener/render_touch_listener.h" +#include "core/gestures/click_recognizer.h" +#include "core/gestures/long_press_recognizer.h" +#include "core/gestures/raw_recognizer.h" + +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +constexpr double LOCATION_X = 200; +constexpr double LOCATION_Y = 400; +constexpr double SIZE = 600; + +const std::string TOUCH_DOWN_TYPE = "onTouchDown"; +const std::string TOUCH_MOVE_TYPE = "onTouchMove"; +const std::string TOUCH_UP_TYPE = "onTouchUp"; +const std::string TOUCH_CANCEL_TYPE = "onTouchCancel"; + +} // namespace + +class TouchEventResult { +public: + explicit TouchEventResult(const std::string& type) : touchEventInfo_(type) {}; + ~TouchEventResult() = default; + + const TouchEventInfo& GetTouchEventInfo() const + { + return touchEventInfo_; + } + void SetTouchEventInfo(const TouchEventInfo& touchEventInfo) + { + touchEventInfo_ = touchEventInfo; + } + +private: + TouchEventInfo touchEventInfo_; +}; + +class ClickEventResult { +public: + ClickEventResult() : clickInfo_(0) {}; + ~ClickEventResult() = default; + + const ClickInfo& GetClickInfo() const + { + return clickInfo_; + } + + void SetClickInfo(const ClickInfo& clickInfo) + { + clickInfo_ = clickInfo; + } + +private: + ClickInfo clickInfo_; +}; + +class LongPressEventResult { +public: + LongPressEventResult() : longPressInfo_(0) {}; + ~LongPressEventResult() = default; + + void SetLongPress(bool longPress) + { + longPress_ = longPress; + } + + bool GetLongPress() const + { + return longPress_; + } + + void SetLongPressInfo(const LongPressInfo& longPressInfo) + { + longPressInfo_ = longPressInfo; + } + + const LongPressInfo& GetLongPressInfo() + { + return longPressInfo_; + } + +private: + bool longPress_ = false; + LongPressInfo longPressInfo_; +}; + +class GestureComponentTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; +}; + +void GestureComponentTest::SetUpTestCase() {} + +void GestureComponentTest::TearDownTestCase() {} + +void GestureComponentTest::SetUp() {} + +void GestureComponentTest::TearDown() {} + +/** + * @tc.name: TouchListener001 + * @tc.desc: Verify the touch listener component can response to touch down event. + * @tc.type: FUNC + * @tc.require: AR000DAIGO + * @tc.author: yanshuifeng + */ +HWTEST_F(GestureComponentTest, TouchListener001, TestSize.Level1) +{ + /** + * @tc.steps: step1. create touch listener component and set touch down event callback. + */ + TouchEventResult onTouchDown(TOUCH_DOWN_TYPE); + auto touchListener = AceType::MakeRefPtr(); + touchListener->SetOnTouchDown([&onTouchDown](const TouchEventInfo& info) { onTouchDown.SetTouchEventInfo(info); }); + + /** + * @tc.steps: step2. set component size for touch testing. + */ + Rect rect(0, 0, SIZE, SIZE); + touchListener->SetPaintRect(rect); + + /** + * @tc.steps: step3. do touch test to collect recognizer. + * @tc.expected: step3. receive raw recognizer. + */ + Point point { LOCATION_X, LOCATION_Y }; + TouchTestResult result; + touchListener->TouchTest(point, point, { TouchRestrict::NONE }, result); + ASSERT_FALSE(result.empty()); + + /** + * @tc.steps: step4. send touch down event. + * @tc.expected: step4. receive touch down callback and touch point result is right. + */ + TouchPoint touchDown { + .x = LOCATION_X, .y = LOCATION_Y, .type = TouchType::DOWN, .time = std::chrono::high_resolution_clock::now() + }; + result.front()->HandleEvent(touchDown); + ASSERT_FALSE(onTouchDown.GetTouchEventInfo().GetTouches().empty()); + ASSERT_TRUE(onTouchDown.GetTouchEventInfo().GetChangedTouches().empty()); + + /** + * @tc.steps: step5. check the touch location info. + * @tc.expected: step5. the touch location info is right. + */ + auto& locationInfo = onTouchDown.GetTouchEventInfo().GetTouches().front(); + ASSERT_EQ(locationInfo.GetGlobalLocation().GetX(), LOCATION_X); + ASSERT_EQ(locationInfo.GetGlobalLocation().GetY(), LOCATION_Y); +} + +/** + * @tc.name: TouchListener002 + * @tc.desc: Verify the touch listener component can response to touch move event. + * @tc.type: FUNC + * @tc.require: AR000DAIGO + * @tc.author: huye + */ +HWTEST_F(GestureComponentTest, TouchListener002, TestSize.Level1) +{ + /** + * @tc.steps: step1. create touch listener component and set touch move event callback. + */ + TouchEventResult onTouchMove(TOUCH_MOVE_TYPE); + auto touchListener = AceType::MakeRefPtr(); + touchListener->SetOnTouchMove([&onTouchMove](const TouchEventInfo& info) { onTouchMove.SetTouchEventInfo(info); }); + + /** + * @tc.steps: step2. set component size for touch testing. + */ + Rect rect(0, 0, SIZE, SIZE); + touchListener->SetPaintRect(rect); + + /** + * @tc.steps: step3. do touch test to collect recognizer. + * @tc.expected: step3. receive raw recognizer. + */ + Point point { LOCATION_X, LOCATION_Y }; + TouchTestResult result; + touchListener->TouchTest(point, point, { TouchRestrict::NONE }, result); + ASSERT_FALSE(result.empty()); + + /** + * @tc.steps: step4. send touch move event. + * @tc.expected: step4. receive touch move callback and touch point result is right. + */ + TouchPoint touchMove { + .x = LOCATION_X, .y = LOCATION_Y, .type = TouchType::MOVE, .time = std::chrono::high_resolution_clock::now() + }; + result.front()->HandleEvent(touchMove); + ASSERT_FALSE(onTouchMove.GetTouchEventInfo().GetTouches().empty()); + ASSERT_TRUE(onTouchMove.GetTouchEventInfo().GetChangedTouches().empty()); + + /** + * @tc.steps: step5. check the touch location info. + * @tc.expected: step5. the touch location info is right. + */ + auto& locationInfo = onTouchMove.GetTouchEventInfo().GetTouches().front(); + ASSERT_EQ(locationInfo.GetGlobalLocation().GetX(), LOCATION_X); + ASSERT_EQ(locationInfo.GetGlobalLocation().GetY(), LOCATION_Y); +} + +/** + * @tc.name: TouchListener003 + * @tc.desc: Verify the touch listener component can response to touch up event. + * @tc.type: FUNC + * @tc.require: AR000DAIGO + * @tc.author: huye + */ +HWTEST_F(GestureComponentTest, TouchListener003, TestSize.Level1) +{ + /** + * @tc.steps: step1. create touch listener component and set touch up event callback. + */ + TouchEventResult onTouchUp(TOUCH_UP_TYPE); + auto touchListener = AceType::MakeRefPtr(); + touchListener->SetOnTouchUp([&onTouchUp](const TouchEventInfo& info) { onTouchUp.SetTouchEventInfo(info); }); + + /** + * @tc.steps: step2. set component size for touch testing. + */ + Rect rect(0, 0, SIZE, SIZE); + touchListener->SetPaintRect(rect); + + /** + * @tc.steps: step3. do touch test to collect recognizer. + * @tc.expected: step3. receive raw recognizer. + */ + Point point { LOCATION_X, LOCATION_Y }; + TouchTestResult result; + touchListener->TouchTest(point, point, { TouchRestrict::NONE }, result); + ASSERT_FALSE(result.empty()); + + /** + * @tc.steps: step4. send touch up event. + * @tc.expected: step4. receive touch move callback and touch point result is right. + */ + TouchPoint touchMove { + .x = LOCATION_X, .y = LOCATION_Y, .type = TouchType::UP, .time = std::chrono::high_resolution_clock::now() + }; + result.front()->HandleEvent(touchMove); + ASSERT_FALSE(onTouchUp.GetTouchEventInfo().GetTouches().empty()); + ASSERT_TRUE(onTouchUp.GetTouchEventInfo().GetChangedTouches().empty()); + + /** + * @tc.steps: step5. check the touch location info. + * @tc.expected: step5. the touch location info is right. + */ + auto& locationInfo = onTouchUp.GetTouchEventInfo().GetTouches().front(); + ASSERT_EQ(locationInfo.GetGlobalLocation().GetX(), LOCATION_X); + ASSERT_EQ(locationInfo.GetGlobalLocation().GetY(), LOCATION_Y); +} + +/** + * @tc.name: TouchListener004 + * @tc.desc: Verify the touch listener component can response to touch cancel event. + * @tc.type: FUNC + * @tc.require: AR000DAIGO + * @tc.author: huye + */ +HWTEST_F(GestureComponentTest, TouchListener004, TestSize.Level1) +{ + /** + * @tc.steps: step1. create touch listener component and set touch cancel event callback. + */ + TouchEventResult onTouchCancel(TOUCH_CANCEL_TYPE); + auto touchListener = AceType::MakeRefPtr(); + touchListener->SetOnTouchCancel( + [&onTouchCancel](const TouchEventInfo& info) { onTouchCancel.SetTouchEventInfo(info); }); + + /** + * @tc.steps: step2. set component size for touch testing. + */ + Rect rect(0, 0, SIZE, SIZE); + touchListener->SetPaintRect(rect); + + /** + * @tc.steps: step3. do touch test to collect recognizer. + * @tc.expected: step3. receive raw recognizer. + */ + Point point { LOCATION_X, LOCATION_Y }; + TouchTestResult result; + touchListener->TouchTest(point, point, { TouchRestrict::NONE }, result); + ASSERT_FALSE(result.empty()); + + /** + * @tc.steps: step4. send touch up event. + * @tc.expected: step4. receive touch move callback and touch point result is right. + */ + TouchPoint touchMove { + .x = LOCATION_X, .y = LOCATION_Y, .type = TouchType::CANCEL, .time = std::chrono::high_resolution_clock::now() + }; + result.front()->HandleEvent(touchMove); + ASSERT_FALSE(onTouchCancel.GetTouchEventInfo().GetTouches().empty()); + ASSERT_TRUE(onTouchCancel.GetTouchEventInfo().GetChangedTouches().empty()); + + /** + * @tc.steps: step5. check the touch location info. + * @tc.expected: step5. the touch location info is right. + */ + auto& locationInfo = onTouchCancel.GetTouchEventInfo().GetTouches().front(); + ASSERT_EQ(locationInfo.GetGlobalLocation().GetX(), LOCATION_X); + ASSERT_EQ(locationInfo.GetGlobalLocation().GetY(), LOCATION_Y); +} + +/** + * @tc.name: GuestureListener001 + * @tc.desc: Verify the gesture listener component can response to touch click event. + * @tc.type: FUNC + * @tc.require: AR000DAIGP + * @tc.author: huye + */ +HWTEST_F(GestureComponentTest, GuestureListener001, TestSize.Level1) +{ + /** + * @tc.steps: step1. create gesture listener component and set click event callback. + */ + ClickEventResult onClickResult; + auto gestureListener = AceType::MakeRefPtr(); + gestureListener->SetOnClickCallback([&onClickResult](const ClickInfo& info) { onClickResult.SetClickInfo(info); }); + + /** + * @tc.steps: step2. set component size for touch testing. + */ + Rect rect(0, 0, SIZE, SIZE); + gestureListener->SetPaintRect(rect); + + /** + * @tc.steps: step3. do touch test to collect recognizer. + * @tc.expected: step3. receive raw recognizer. + */ + Point point { LOCATION_X, LOCATION_Y }; + TouchTestResult result; + gestureListener->TouchTest(point, point, { TouchRestrict::NONE }, result); + ASSERT_FALSE(result.empty()); + + /** + * @tc.steps: step4. send touch down and up event. + * @tc.expected: step4. receive click callback and touch point result is right. + */ + TouchPoint touchClick { .id = 2, + .x = LOCATION_X, + .y = LOCATION_Y, + .type = TouchType::DOWN, + .time = std::chrono::high_resolution_clock::now() }; + result.front()->HandleEvent(touchClick); + ASSERT_TRUE(onClickResult.GetClickInfo().GetGlobalLocation().IsZero()); + + touchClick.type = TouchType::UP; + result.front()->HandleEvent(touchClick); + + /** + * @tc.steps: step5. check the click location info. + * @tc.expected: step5. the click location info is right. + */ + ASSERT_FALSE(onClickResult.GetClickInfo().GetGlobalLocation().IsZero()); + ASSERT_EQ(onClickResult.GetClickInfo().GetGlobalLocation(), touchClick.GetOffset()); + ASSERT_EQ(onClickResult.GetClickInfo().GetFingerId(), touchClick.id); +} + +/** + * @tc.name: GuestureListener002 + * @tc.desc: Verify the gesture listener component can response to touch click event. + * @tc.type: FUNC + * @tc.require: AR000DAIGP + * @tc.author: huye + */ +HWTEST_F(GestureComponentTest, GuestureListener002, TestSize.Level1) +{ + /** + * @tc.steps: step1. create gesture listener component and set click event callback. + */ + LongPressEventResult onLongPressResult; + auto gestureListener = AceType::MakeRefPtr(); + gestureListener->SetOnLongPressCallback([&onLongPressResult](const LongPressInfo& info) { + onLongPressResult.SetLongPress(true); + onLongPressResult.SetLongPressInfo(info); + }); + + /** + * @tc.steps: step2. set component size for touch testing. + */ + Rect rect(0, 0, SIZE, SIZE); + gestureListener->SetPaintRect(rect); + + /** + * @tc.steps: step3. do touch test to collect recognizer. + * @tc.expected: step3. receive raw recognizer. + */ + Point point { LOCATION_X, LOCATION_Y }; + TouchTestResult result; + gestureListener->TouchTest(point, point, { TouchRestrict::NONE }, result); + ASSERT_FALSE(result.empty()); + + /** + * @tc.steps: step4. send touch down and up event. + * @tc.expected: step4. would not receive long press callback except click callback . + */ + TouchPoint touchClick { .id = 2, + .x = LOCATION_X, + .y = LOCATION_Y, + .type = TouchType::DOWN, + .time = std::chrono::high_resolution_clock::now() }; + result.front()->HandleEvent(touchClick); + ASSERT_FALSE(onLongPressResult.GetLongPress()); + + touchClick.type = TouchType::UP; + result.front()->HandleEvent(touchClick); + + /** + * @tc.steps: step5. check the click location info. + * @tc.expected: step5. can't receive long press callback. + */ + ASSERT_FALSE(onLongPressResult.GetLongPress()); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/grid/BUILD.gn b/frameworks/core/components/test/unittest/grid/BUILD.gn new file mode 100644 index 00000000..35045c3e --- /dev/null +++ b/frameworks/core/components/test/unittest/grid/BUILD.gn @@ -0,0 +1,91 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +if (is_standard_system) { + module_output_path = "ace_engine_standard/backenduicomponent/grid" +} + +ohos_unittest("GridCreatorTest") { + module_out_path = module_output_path + + sources = [ "grid_creator_test.cpp" ] + + configs = [ + ":config_json_creator_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "$ace_root/frameworks/core/components/test:json", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + configs += [ "//third_party/curl:curl_config" ] + deps += [ + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/curl:curl", + ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_json_creator_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +ohos_unittest("RenderGridTest") { + module_out_path = module_output_path + + sources = [ + "$ace_root/frameworks/core/components/test/json/json_frontend.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/mock_render_common.cpp", + "grid_test_utils.cpp", + "render_grid_test.cpp", + ] + + configs = [ "$ace_root:ace_test_config" ] + + deps = [ + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "//third_party/googletest:gtest_main", + ] + + if (is_standard_system) { + configs += [ "//third_party/curl:curl_config" ] + deps += [ + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/curl:curl", + ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +group("unittest") { + testonly = true + deps = [ + ":GridCreatorTest", + ":RenderGridTest", + ] +} diff --git a/frameworks/core/components/test/unittest/grid/grid_creator_test.cpp b/frameworks/core/components/test/unittest/grid/grid_creator_test.cpp new file mode 100644 index 00000000..66657c67 --- /dev/null +++ b/frameworks/core/components/test/unittest/grid/grid_creator_test.cpp @@ -0,0 +1,324 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/json/json_util.h" +#include "base/utils/utils.h" +#include "core/components/grid/grid_component.h" +#include "core/components/test/json/component_factory.h" +#include "core/components/test/json/grid_creator.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { + +class GridCreatorTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; +}; + +void GridCreatorTest::SetUpTestCase() {} +void GridCreatorTest::TearDownTestCase() {} +void GridCreatorTest::SetUp() {} +void GridCreatorTest::TearDown() {} + +/** + * @tc.name: GridCreator001 + * @tc.desc: Verify GridCreator can create grid component without child by row direction. + * @tc.type: FUNC + * @tc.require: AR000DBI7I + * @tc.author: zhongjianfei + */ +HWTEST_F(GridCreatorTest, GridCreator001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of grid component with grid and child. + */ + const std::string content = "{" + " \"className\": \"Grid\", " + " \"scrollPage\": true, " + " \"direction\": 0, " + " \"align\": 1, " + " \"columnCount\": 3, " + " \"columnExtent\": 540, " + " \"itemCount\": 20, " + " \"cachedCount\": 5, " + " \"width\": 800, " + " \"height\": 1000 " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get grid component. + * @tc.expected: step2. properties and child are set correctly. + */ + const auto dslBuf = reinterpret_cast(content.c_str()); + size_t dslLen = content.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component != nullptr); + RefPtr grid = AceType::DynamicCast(component); + ASSERT_TRUE(grid != nullptr); + ASSERT_TRUE(grid->GetScrollPage()); + ASSERT_TRUE(grid->GetDirection() == FlexDirection::ROW); + ASSERT_TRUE(grid->GetFlexAlign() == FlexAlign::FLEX_START); + ASSERT_TRUE(grid->GetColumnCount() == 3); + ASSERT_TRUE(grid->GetColumnExtent() == 540); + ASSERT_TRUE(grid->GetTotalCount() == 20); + ASSERT_TRUE(grid->GetCachedCount() == 5); + ASSERT_TRUE(NearEqual(grid->GetWidth(), 800.0)); + ASSERT_TRUE(NearEqual(grid->GetHeight(), 1000.0)); + ASSERT_TRUE(grid->GetGridController() != nullptr); + ASSERT_TRUE(grid->GetGridController()->GetInitialIndex() == 0); + std::list> children = grid->GetChildren(); + ASSERT_TRUE(children.empty()); +} + +/** + * @tc.name: GridCreator002 + * @tc.desc: Verify GridCreator can create grid component with one child by column direction. + * @tc.type: FUNC + * @tc.require: AR000DBI7I + * @tc.author: zhongjianfei + */ +HWTEST_F(GridCreatorTest, GridCreator002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of grid component with grid and child. + */ + const std::string content = "{" + " \"className\": \"Grid\", " + " \"child\": [ " + " {\"className\":\"Image\",\"src\":\"1.jpg\",\"width\":90,\"height\":90}" + " ], " + " \"direction\": 1, " + " \"columnCount\": 2, " + " \"initialItem\": 2 " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get grid component. + * @tc.expected: step2. properties and child are set correctly. + */ + const auto dslBuf = reinterpret_cast(content.c_str()); + size_t dslLen = content.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component != nullptr); + RefPtr grid = AceType::DynamicCast(component); + ASSERT_TRUE(grid != nullptr); + ASSERT_TRUE(!grid->GetScrollPage()); + ASSERT_TRUE(grid->GetDirection() == FlexDirection::COLUMN); + ASSERT_TRUE(grid->GetColumnCount() == 2); + ASSERT_TRUE(grid->GetColumnExtent() == 0); + ASSERT_TRUE(grid->GetTotalCount() == 0); + ASSERT_TRUE(grid->GetCachedCount() == 10); + ASSERT_TRUE(NearEqual(grid->GetWidth(), -1.0)); + ASSERT_TRUE(NearEqual(grid->GetHeight(), -1.0)); + ASSERT_TRUE(grid->GetGridController() != nullptr); + ASSERT_TRUE(grid->GetGridController()->GetInitialIndex() == 2); + std::list> children = grid->GetChildren(); + ASSERT_TRUE(children.size() == 1); +} + +/** + * @tc.name: GridCreator003 + * @tc.desc: Verify GridCreator can create grid component with five children by row reverse direction. + * @tc.type: FUNC + * @tc.require: AR000DBI7I + * @tc.author: zhongjianfei + */ +HWTEST_F(GridCreatorTest, GridCreator003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of grid component with grid and child. + */ + const std::string content = "{" + " \"className\": \"Grid\", " + " \"child\": [ " + " {\"className\":\"Image\",\"src\":\"1.jpg\",\"width\":90,\"height\":90}," + " {\"className\":\"Image\",\"src\":\"1.jpg\",\"width\":90,\"height\":90}," + " {\"className\":\"Image\",\"src\":\"1.jpg\",\"width\":90,\"height\":90}," + " {\"className\":\"Image\",\"src\":\"1.jpg\",\"width\":90,\"height\":90}," + " {\"className\":\"Image\",\"src\":\"1.jpg\",\"width\":90,\"height\":90} " + " ], " + " \"direction\": 2, " + " \"columnCount\": 3 " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get grid component. + * @tc.expected: step2. properties and child are set correctly. + */ + const auto dslBuf = reinterpret_cast(content.c_str()); + size_t dslLen = content.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component != nullptr); + RefPtr grid = AceType::DynamicCast(component); + ASSERT_TRUE(grid != nullptr); + ASSERT_TRUE(grid->GetDirection() == FlexDirection::ROW_REVERSE); + ASSERT_TRUE(grid->GetColumnCount() == 3); + ASSERT_TRUE(NearEqual(grid->GetWidth(), -1.0)); + ASSERT_TRUE(NearEqual(grid->GetHeight(), -1.0)); + std::list> children = grid->GetChildren(); + ASSERT_TRUE(children.size() == 5); +} + +/** + * @tc.name: GridCreator004 + * @tc.desc: Verify GridCreator can create grid component with three children by column reverse direction. + * @tc.type: FUNC + * @tc.require: AR000DBI7I + * @tc.author: zhongjianfei + */ +HWTEST_F(GridCreatorTest, GridCreator004, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of grid component with grid and child. + */ + const std::string content = "{" + " \"className\": \"Grid\", " + " \"child\": [ " + " {\"className\":\"Image\",\"src\":\"1.jpg\",\"width\":90,\"height\":90}," + " {\"className\":\"Image\",\"src\":\"1.jpg\",\"width\":90,\"height\":90}," + " {\"className\":\"Image\",\"src\":\"1.jpg\",\"width\":90,\"height\":90} " + " ], " + " \"direction\": 3, " + " \"columnCount\": 4, " + " \"scrollPage\": false " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get grid component. + * @tc.expected: step2. properties and child are set correctly. + */ + const auto dslBuf = reinterpret_cast(content.c_str()); + size_t dslLen = content.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component != nullptr); + RefPtr grid = AceType::DynamicCast(component); + ASSERT_TRUE(grid != nullptr); + ASSERT_TRUE(!grid->GetScrollPage()); + ASSERT_TRUE(grid->GetDirection() == FlexDirection::COLUMN_REVERSE); + ASSERT_TRUE(grid->GetColumnCount() == 4); + ASSERT_TRUE(NearEqual(grid->GetWidth(), -1.0)); + ASSERT_TRUE(NearEqual(grid->GetHeight(), -1.0)); + std::list> children = grid->GetChildren(); + ASSERT_TRUE(children.size() == 3); +} + +/** + * @tc.name: GridCreator005 + * @tc.desc: Verify GridCreator can create grid component with three children by invalid attribute. + * @tc.type: FUNC + * @tc.require: AR000DBI7I + * @tc.author: zhongjianfei + */ +HWTEST_F(GridCreatorTest, GridCreator005, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of grid component with grid and child. + */ + const std::string content = "{" + " \"className\": \"Grid\", " + " \"child\": [ " + " {\"className\":\"Image\",\"src\":\"1.jpg\",\"width\":90,\"height\":90}," + " {\"className\":\"Image\",\"src\":\"1.jpg\",\"width\":90,\"height\":90}," + " {\"className\":\"Image\",\"src\":\"1.jpg\",\"width\":90,\"height\":90} " + " ], " + " \"scrollPage\": 100, " + " \"direction\": 100, " + " \"align\": 5, " + " \"columnCount\": -12, " + " \"columnExtent\": -222, " + " \"itemCount\": -333, " + " \"initialItem\": -2, " + " \"cachedCount\": -1000, " + " \"width\": -8888, " + " \"height\": -9999 " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get grid component. + * @tc.expected: step2. properties and child are set correctly. + */ + const auto dslBuf = reinterpret_cast(content.c_str()); + size_t dslLen = content.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component != nullptr); + RefPtr grid = AceType::DynamicCast(component); + ASSERT_TRUE(grid != nullptr); + ASSERT_TRUE(!grid->GetScrollPage()); + ASSERT_TRUE(grid->GetDirection() == FlexDirection::COLUMN); + ASSERT_TRUE(grid->GetFlexAlign() == FlexAlign::STRETCH); + ASSERT_TRUE(grid->GetColumnCount() == 0); + ASSERT_TRUE(grid->GetColumnExtent() == 0); + ASSERT_TRUE(grid->GetTotalCount() == 0); + ASSERT_TRUE(grid->GetCachedCount() == 10); + ASSERT_TRUE(NearEqual(grid->GetWidth(), -1.0)); + ASSERT_TRUE(NearEqual(grid->GetHeight(), -1.0)); + ASSERT_TRUE(grid->GetGridController() != nullptr); + ASSERT_TRUE(grid->GetGridController()->GetInitialIndex() == 0); + std::list> children = grid->GetChildren(); + ASSERT_TRUE(children.size() == 3); +} + +/** + * @tc.name: GridCreator006 + * @tc.desc: Verify GridCreator can create grid component with no children by invalid attribute. + * @tc.type: FUNC + * @tc.require: AR000DBI7I + * @tc.author: zhongjianfei + */ +HWTEST_F(GridCreatorTest, GridCreator006, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of grid component with grid and child. + */ + const std::string content = "{" + " \"className\": \"Grid\", " + " \"direction\": 4, " + " \"columnCount\": 0, " + " \"columnExtent\": 0, " + " \"itemCount\": 0, " + " \"cachedCount\": 0, " + " \"width\": 0, " + " \"height\": 0 " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get grid component. + * @tc.expected: step2. properties and child are set correctly. + */ + const auto dslBuf = reinterpret_cast(content.c_str()); + size_t dslLen = content.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component != nullptr); + RefPtr grid = AceType::DynamicCast(component); + ASSERT_TRUE(grid != nullptr); + ASSERT_TRUE(grid->GetDirection() == FlexDirection::COLUMN); + ASSERT_TRUE(grid->GetColumnCount() == 0); + ASSERT_TRUE(grid->GetColumnExtent() == 0); + ASSERT_TRUE(grid->GetTotalCount() == 0); + ASSERT_TRUE(grid->GetCachedCount() == 10); + ASSERT_TRUE(NearEqual(grid->GetWidth(), -1.0)); + ASSERT_TRUE(NearEqual(grid->GetHeight(), -1.0)); + std::list> children = grid->GetChildren(); + ASSERT_TRUE(children.size() == 0); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/grid/grid_test_utils.cpp b/frameworks/core/components/test/unittest/grid/grid_test_utils.cpp new file mode 100644 index 00000000..fd55fed3 --- /dev/null +++ b/frameworks/core/components/test/unittest/grid/grid_test_utils.cpp @@ -0,0 +1,110 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/unittest/grid/grid_test_utils.h" + +#include "core/components/box/box_component.h" +#include "core/components/grid/grid_component.h" + +namespace OHOS::Ace { + +RefPtr GridTestUtils::CreateRenderBox(double width, double height) +{ + RefPtr renderBox = AceType::MakeRefPtr(); + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetWidth(width); + boxComponent->SetHeight(height); + renderBox->Update(boxComponent); + return renderBox; +} + +RefPtr GridTestUtils::CreateRenderItem(double width, double height, + int32_t span, const RefPtr& context) +{ + RefPtr parent = AceType::MakeRefPtr(); + RefPtr child = AceType::MakeRefPtr(); + RefPtr renderBox = AceType::MakeRefPtr(); + parent->Attach(context); + child->Attach(context); + renderBox->Attach(context); + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetWidth(width); + boxComponent->SetHeight(height); + renderBox->Update(boxComponent); + child->SetColumnSpan(span); + parent->AddChild(child); + child->AddChild(renderBox); + return parent; +} + +RefPtr GridTestUtils::InitRenderGridDiffSpan(FlexDirection direction, + const RefPtr& context) +{ + std::list> children; + RefPtr gridComponent = AceType::MakeRefPtr(children); + gridComponent->SetDirection(direction); + gridComponent->SetColumnCount(3); + gridComponent->SetWidth(750.0); + gridComponent->SetHeight(750.0); + RefPtr renderGrid = AceType::MakeRefPtr(); + renderGrid->Update(gridComponent); + renderGrid->Attach(context); + int32_t count = 9; + for (int32_t i = 0; i < count; ++i) { + int32_t span = 1; + if (i == 1 || i == 5) { + span = 2; + } + renderGrid->AddChild(GridTestUtils::CreateRenderItem(300.0, 300.0, span, context)); + } + return renderGrid; +} + +RefPtr GridTestUtils::InitRenderGridSameSpan(FlexDirection direction, + const RefPtr& context) +{ + std::list> children; + RefPtr gridComponent = AceType::MakeRefPtr(children); + gridComponent->SetDirection(direction); + gridComponent->SetColumnCount(4); + gridComponent->SetWidth(800.0); + gridComponent->SetHeight(800.0); + RefPtr renderGrid = AceType::MakeRefPtr(); + renderGrid->Update(gridComponent); + renderGrid->Attach(context); + int32_t count = 16; + for (int32_t i = 0; i < count; ++i) { + renderGrid->AddChild(GridTestUtils::CreateRenderItem(200.0, 200.0, 1, context)); + } + return renderGrid; +} + +Offset GridTestUtils::GetChildPosition(const RefPtr& grid, int32_t index) +{ + Offset offset = Offset(-1.0, -1.0); + if (!grid) { + return offset; + } + int32_t size = grid->GetChildren().size(); + if (index < 0 || index >= size) { + return offset; + } + auto pos = grid->GetChildren().begin(); + std::advance(pos, index); + offset = (*pos)->GetPosition(); + return offset; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/grid/grid_test_utils.h b/frameworks/core/components/test/unittest/grid/grid_test_utils.h new file mode 100644 index 00000000..5a59d493 --- /dev/null +++ b/frameworks/core/components/test/unittest/grid/grid_test_utils.h @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_GRID_GRID_TEST_UTILS_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_GRID_GRID_TEST_UTILS_H + +#include "core/components/box/render_box.h" +#include "core/components/grid/render_grid.h" +#include "core/components/grid/render_grid_item.h" +#include "core/components/proxy/render_item_proxy.h" + +namespace OHOS::Ace { +namespace { + +using GridEventCallback = std::function; + +class MockRenderBox final : public RenderBox { + DECLARE_ACE_TYPE(MockRenderBox, RenderBox); + +public: + MockRenderBox() = default; + ~MockRenderBox() override = default; +}; + +class MockRenderGridItem final : public RenderGridItem { + DECLARE_ACE_TYPE(MockRenderGridItem, RenderGridItem); + +public: + MockRenderGridItem() = default; + ~MockRenderGridItem() override = default; +}; + +class MockEventHandler : public AceEventHandler { + void HandleAsyncEvent(const EventMarker& eventMarker) override {}; + void HandleAsyncEvent(const EventMarker& eventMarker, int32_t param) override {}; + void HandleAsyncEvent(const EventMarker& eventMarker, const BaseEventInfo& info) override {}; + void HandleAsyncEvent(const EventMarker& eventMarker, const std::string& param) override {}; + void HandleAsyncEvent(const EventMarker& eventMarker, const KeyEvent& keyEvent) override {}; + void HandleSyncEvent(const EventMarker& eventMarker, bool& result) override {}; + void HandleSyncEvent(const EventMarker& eventMarker, const BaseEventInfo& info, bool& result) override {}; + void HandleSyncEvent(const EventMarker& eventMarker, const std::string& param, std::string& result) override {}; + void HandleSyncEvent(const EventMarker& eventMarker, const KeyEvent& keyEvent, bool& result) override {}; +}; + +class TestGridEventHander : public MockEventHandler { +public: + explicit TestGridEventHander(GridEventCallback eventCallback) : eventCallback_(eventCallback) {}; + ~TestGridEventHander() = default; + + void HandleAsyncEvent(const EventMarker& eventMarker, const std::string& param) + { + if (eventCallback_) { + eventCallback_(eventMarker.GetData().eventId, param); + } + }; + +private: + GridEventCallback eventCallback_; +}; + +} // namespace + +class GridTestUtils { +public: + static RefPtr CreateRenderBox(double width, double height); + static RefPtr CreateRenderItem(double width, double height, + int32_t span, const RefPtr& context); + static RefPtr InitRenderGridDiffSpan(FlexDirection direction, + const RefPtr& context); + static RefPtr InitRenderGridSameSpan(FlexDirection direction, + const RefPtr& context); + static Offset GetChildPosition(const RefPtr& grid, int32_t index); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_GRID_GRID_TEST_UTILS_H diff --git a/frameworks/core/components/test/unittest/grid/render_grid_test.cpp b/frameworks/core/components/test/unittest/grid/render_grid_test.cpp new file mode 100644 index 00000000..004a2415 --- /dev/null +++ b/frameworks/core/components/test/unittest/grid/render_grid_test.cpp @@ -0,0 +1,2973 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "core/animation/curves.h" +#include "core/components/grid/grid_component.h" +#include "core/components/grid/render_grid.h" +#include "core/components/test/unittest/grid/grid_test_utils.h" +#include "core/components/test/unittest/mock/mock_render_common.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { + +class RenderGridTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; + + RefPtr mockContext_; + RefPtr renderGrid_; + int32_t index_ = 0; +}; + +void RenderGridTest::SetUpTestCase() {} +void RenderGridTest::TearDownTestCase() {} + +void RenderGridTest::SetUp() +{ + mockContext_ = MockRenderCommon::GetMockContext(); + renderGrid_ = AceType::MakeRefPtr(); + renderGrid_->Attach(mockContext_); +} + +void RenderGridTest::TearDown() +{ + mockContext_ = nullptr; + renderGrid_ = nullptr; +} + +/** + * @tc.name: RenderGridTest001 + * @tc.desc: Verify Grid PerformLayout can calculate six children with row direction and one column. + * @tc.type: FUNC + * @tc.require: AR000DBI7J + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridTest, RenderGridTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct GridComponent with no child by row direction and one column. + * @tc.expected: step1. properties and children are set correctly. + */ + std::list> children; + RefPtr gridComponent = AceType::MakeRefPtr(children); + gridComponent->SetDirection(FlexDirection::ROW); + gridComponent->SetFlexAlign(FlexAlign::FLEX_START); + gridComponent->SetColumnCount(1); + ASSERT_TRUE(gridComponent->GetColumnCount() == 1); + + /** + * @tc.steps: step2. construct RenderGrid with grid component and add six children. + * @tc.expected: step2. properties and children are set correctly. + */ + renderGrid_->Update(gridComponent); + int32_t count = 6; + for (int32_t i = 0; i < count; ++i) { + RefPtr box = GridTestUtils::CreateRenderBox(400.0, 400.0); + box->Attach(mockContext_); + renderGrid_->AddChild(box); + } + ASSERT_TRUE(renderGrid_->GetChildren().size() == 6); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(1000.0, 1000.0)); + renderGrid_->SetLayoutParam(layoutParam); + ASSERT_TRUE(renderGrid_->NeedLayout()); + renderGrid_->PerformLayout(); + ASSERT_TRUE(renderGrid_->GetLayoutSize() == Size(1000.0, 1000.0)); + const std::list>& items = renderGrid_->GetChildren(); + ASSERT_TRUE(items.size() == 6); + int32_t index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset(index * 400.0, 0.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(400.0, 400.0)); + index++; + } + + /** + * @tc.steps: step4. Trigger a slide event with offset(-500.0, -500.0) and offset(500.0, 500.0). + * @tc.expected: step4. Children's position no change. + */ + renderGrid_->UpdateOffset(Offset(-500.0, -500.0)); + renderGrid_->PerformLayout(); + index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset(index * 400.0, 0.0)); + index++; + } + renderGrid_->UpdateOffset(Offset(500.0, 500.0)); + renderGrid_->PerformLayout(); + index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset(index * 400.0 - 500.0, 0.0)); + index++; + } +} + +/** + * @tc.name: RenderGridTest002 + * @tc.desc: Verify Grid PerformLayout can calculate six children with column direction and one column. + * @tc.type: FUNC + * @tc.require: AR000DBI7J + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridTest, RenderGridTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct GridComponent with no child by column direction and one column. + * @tc.expected: step1. properties and children are set correctly. + */ + std::list> children; + RefPtr gridComponent = AceType::MakeRefPtr(children); + gridComponent->SetDirection(FlexDirection::COLUMN); + gridComponent->SetFlexAlign(FlexAlign::CENTER); + gridComponent->SetColumnCount(1); + gridComponent->SetColumnExtent(200.0); + ASSERT_TRUE(gridComponent->GetColumnCount() == 1); + + /** + * @tc.steps: step2. construct RenderGrid with grid component and add six children. + * @tc.expected: step2. properties and children are set correctly. + */ + renderGrid_->Update(gridComponent); + int32_t count = 6; + for (int32_t i = 0; i < count; ++i) { + RefPtr box = GridTestUtils::CreateRenderBox(400.0, 400.0); + box->Attach(mockContext_); + renderGrid_->AddChild(box); + } + ASSERT_TRUE(renderGrid_->GetChildren().size() == 6); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(500.0, 800.0)); + renderGrid_->SetLayoutParam(layoutParam); + ASSERT_TRUE(renderGrid_->NeedLayout()); + renderGrid_->PerformLayout(); + ASSERT_TRUE(renderGrid_->GetLayoutSize() == Size(500.0, 800.0)); + const std::list>& items = renderGrid_->GetChildren(); + ASSERT_TRUE(items.size() == 6); + int32_t index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset(50.0, index * 400.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(400.0, 400.0)); + index++; + } + + /** + * @tc.steps: step4. Trigger a slide event with offset(500.0, 500.0) and offset(-500.0, -500.0). + * @tc.expected: step4. Children's position no change. + */ + renderGrid_->UpdateOffset(Offset(500.0, 500.0)); + renderGrid_->PerformLayout(); + index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset(50.0, index * 400.0 - 500.0)); + index++; + } + + renderGrid_->UpdateOffset(Offset(-500.0, -500.0)); + renderGrid_->PerformLayout(); + index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset(50.0, index * 400.0)); + index++; + } +} + +/** + * @tc.name: RenderGridTest003 + * @tc.desc: Verify Grid PerformLayout can calculate six children with row reverse direction and one column. + * @tc.type: FUNC + * @tc.require: AR000DBI7J + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridTest, RenderGridTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct GridComponent with no child by row reverse direction and one column. + * @tc.expected: step1. properties and children are set correctly. + */ + std::list> children; + RefPtr gridComponent = AceType::MakeRefPtr(children); + gridComponent->SetDirection(FlexDirection::ROW_REVERSE); + gridComponent->SetColumnCount(1); + gridComponent->SetWidth(800.0); + gridComponent->SetHeight(300.0); + ASSERT_TRUE(gridComponent->GetColumnCount() == 1); + + /** + * @tc.steps: step2. construct RenderGrid with grid component and add six children. + * @tc.expected: step2. properties and children are set correctly. + */ + renderGrid_->Update(gridComponent); + int32_t count = 6; + for (int32_t i = 0; i < count; ++i) { + RefPtr box = GridTestUtils::CreateRenderBox(400.0, 400.0); + box->Attach(mockContext_); + renderGrid_->AddChild(box); + } + ASSERT_TRUE(renderGrid_->GetChildren().size() == 6); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(1000.0, 1000.0)); + renderGrid_->SetLayoutParam(layoutParam); + ASSERT_TRUE(renderGrid_->NeedLayout()); + renderGrid_->PerformLayout(); + ASSERT_TRUE(renderGrid_->GetLayoutSize() == Size(800.0, 300.0)); + const std::list>& items = renderGrid_->GetChildren(); + ASSERT_TRUE(items.size() == 6); + int32_t index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset(800.0 - 400.0 - index * 400.0, 0.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(400.0, 300.0)); + index++; + } + + /** + * @tc.steps: step4. Trigger a slide event with offset(-2000.0, -2000.0) and offset(2000.0, 2000.0). + * @tc.expected: step4. Children's position no change. + */ + renderGrid_->UpdateOffset(Offset(-2000.0, -2000.0)); + renderGrid_->PerformLayout(); + index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset(800.0 - 400.0 - index * 400.0 + 1600.0, 0.0)); + index++; + } + renderGrid_->UpdateOffset(Offset(2000.0, 2000.0)); + renderGrid_->PerformLayout(); + index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset(800.0 - 400.0 - index * 400.0, 0.0)); + index++; + } +} + +/** + * @tc.name: RenderGridTest004 + * @tc.desc: Verify Grid PerformLayout can calculate six children with column reverse direction and one column. + * @tc.type: FUNC + * @tc.require: AR000DBI7J + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridTest, RenderGridTest004, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct GridComponent with no child by column reverse direction and one column. + * @tc.expected: step1. properties and children are set correctly. + */ + std::list> children; + RefPtr gridComponent = AceType::MakeRefPtr(children); + gridComponent->SetDirection(FlexDirection::COLUMN_REVERSE); + gridComponent->SetColumnCount(1); + gridComponent->SetWidth(300.0); + gridComponent->SetHeight(300.0); + ASSERT_TRUE(gridComponent->GetColumnCount() == 1); + + /** + * @tc.steps: step2. construct RenderGrid with grid component and add six children. + * @tc.expected: step2. properties and children are set correctly. + */ + renderGrid_->Update(gridComponent); + int32_t count = 6; + for (int32_t i = 0; i < count; ++i) { + RefPtr box = GridTestUtils::CreateRenderBox(400.0, 400.0); + box->Attach(mockContext_); + renderGrid_->AddChild(box); + } + ASSERT_TRUE(renderGrid_->GetChildren().size() == 6); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(500.0, 500.0)); + renderGrid_->SetLayoutParam(layoutParam); + ASSERT_TRUE(renderGrid_->NeedLayout()); + renderGrid_->PerformLayout(); + ASSERT_TRUE(renderGrid_->GetLayoutSize() == Size(300.0, 300.0)); + const std::list>& items = renderGrid_->GetChildren(); + ASSERT_TRUE(items.size() == 6); + int32_t index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset(0.0, 300.0 - 400.0 - 400.0 * index)); + ASSERT_TRUE(item->GetLayoutSize() == Size(300.0, 400.0)); + index++; + } + + /** + * @tc.steps: step4. Trigger a slide event with offset(-1500.0, -1500.0) and offset(1500.0, 1500.0). + * @tc.expected: step4. Children's position no change. + */ + renderGrid_->UpdateOffset(Offset(-1500.0, -1500.0)); + renderGrid_->PerformLayout(); + index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset(0.0, 300.0 - 400.0 - 400.0 * index + 1500.0)); + index++; + } + renderGrid_->UpdateOffset(Offset(1500.0, 1500.0)); + renderGrid_->PerformLayout(); + index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset(0.0, 300.0 - 400.0 - 400.0 * index)); + index++; + } +} + +/** + * @tc.name: RenderGridTest005 + * @tc.desc: Verify Grid PerformLayout can calculate six children with row direction and two columns. + * @tc.type: FUNC + * @tc.require: AR000DBI7J + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridTest, RenderGridTest005, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct GridComponent with no child by row direction and two columns. + * @tc.expected: step1. properties and children are set correctly. + */ + std::list> children; + RefPtr gridComponent = AceType::MakeRefPtr(children); + gridComponent->SetDirection(FlexDirection::ROW); + gridComponent->SetColumnCount(2); + ASSERT_TRUE(gridComponent->GetColumnCount() == 2); + + /** + * @tc.steps: step2. construct RenderGrid with grid component and add six children. + * @tc.expected: step2. properties and children are set correctly. + */ + renderGrid_->Update(gridComponent); + int32_t count = 6; + for (int32_t i = 0; i < count; ++i) { + RefPtr box = GridTestUtils::CreateRenderBox(400.0, 400.0); + box->Attach(mockContext_); + renderGrid_->AddChild(box); + } + ASSERT_TRUE(renderGrid_->GetChildren().size() == 6); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(800.0, 800.0)); + renderGrid_->SetLayoutParam(layoutParam); + ASSERT_TRUE(renderGrid_->NeedLayout()); + renderGrid_->PerformLayout(); + ASSERT_TRUE(renderGrid_->GetLayoutSize() == Size(800.0, 800.0)); + const std::list>& items = renderGrid_->GetChildren(); + ASSERT_TRUE(items.size() == 6); + int32_t index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset(index / 2 * 400.0, (index % 2) * 400.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(400.0, 400.0)); + index++; + } + + /** + * @tc.steps: step4. Trigger a slide event with offset(-200.0, -200.0) and offset(200.0, 200.0). + * @tc.expected: step4. Children's position no change. + */ + renderGrid_->UpdateOffset(Offset(-200.0, -200.0)); + renderGrid_->PerformLayout(); + index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset(index / 2 * 400.0, (index % 2) * 400.0)); + index++; + } + renderGrid_->UpdateOffset(Offset(200.0, 200.0)); + renderGrid_->PerformLayout(); + index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset(index / 2 * 400.0 - 200.0, (index % 2) * 400.0)); + index++; + } +} + +/** + * @tc.name: RenderGridTest006 + * @tc.desc: Verify Grid PerformLayout can calculate six children with column direction and two columns. + * @tc.type: FUNC + * @tc.require: AR000DBI7J + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridTest, RenderGridTest006, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct GridComponent with no child by column direction and two columns. + * @tc.expected: step1. properties and children are set correctly. + */ + std::list> children; + RefPtr gridComponent = AceType::MakeRefPtr(children); + gridComponent->SetDirection(FlexDirection::COLUMN); + gridComponent->SetColumnCount(2); + gridComponent->SetColumnExtent(180.0); + ASSERT_TRUE(gridComponent->GetColumnCount() == 2); + + /** + * @tc.steps: step2. construct RenderGrid with grid component and add six children. + * @tc.expected: step2. properties and children are set correctly. + */ + renderGrid_->Update(gridComponent); + int32_t count = 6; + for (int32_t i = 0; i < count; ++i) { + RefPtr box = GridTestUtils::CreateRenderBox(400.0, 400.0); + box->Attach(mockContext_); + renderGrid_->AddChild(box); + } + ASSERT_TRUE(renderGrid_->GetChildren().size() == 6); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(700.0, 700.0)); + renderGrid_->SetLayoutParam(layoutParam); + ASSERT_TRUE(renderGrid_->NeedLayout()); + renderGrid_->PerformLayout(); + ASSERT_TRUE(renderGrid_->GetLayoutSize() == Size(700.0, 700.0)); + const std::list>& items = renderGrid_->GetChildren(); + ASSERT_TRUE(items.size() == 6); + int32_t index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset((index % 2) * 350.0, index / 2 * 400.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(350.0, 400.0)); + index++; + } + + /** + * @tc.steps: step4. Trigger a slide event with offset(500.0, 500.0) and offset(-500.0, -500.0). + * @tc.expected: step4. Children's position no change. + */ + renderGrid_->UpdateOffset(Offset(500.0, 500.0)); + renderGrid_->PerformLayout(); + index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset((index % 2) * 350.0, index / 2 * 400.0 - 500.0)); + index++; + } + + renderGrid_->UpdateOffset(Offset(-500.0, -500.0)); + renderGrid_->PerformLayout(); + index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset((index % 2) * 350.0, index / 2 * 400.0)); + index++; + } +} + +/** + * @tc.name: RenderGridTest007 + * @tc.desc: Verify Grid PerformLayout can calculate six children with row reverse direction and two columns. + * @tc.type: FUNC + * @tc.require: AR000DBI7J + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridTest, RenderGridTest007, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct GridComponent with no child by row reverse direction and two columns. + * @tc.expected: step1. properties and children are set correctly. + */ + std::list> children; + RefPtr gridComponent = AceType::MakeRefPtr(children); + gridComponent->SetDirection(FlexDirection::ROW_REVERSE); + gridComponent->SetColumnCount(2); + gridComponent->SetWidth(900.0); + gridComponent->SetHeight(1200.0); + ASSERT_TRUE(gridComponent->GetColumnCount() == 2); + + /** + * @tc.steps: step2. construct RenderGrid with grid component and add six children. + * @tc.expected: step2. properties and children are set correctly. + */ + renderGrid_->Update(gridComponent); + int32_t count = 6; + for (int32_t i = 0; i < count; ++i) { + RefPtr box = GridTestUtils::CreateRenderBox(400.0, 400.0); + box->Attach(mockContext_); + renderGrid_->AddChild(box); + } + ASSERT_TRUE(renderGrid_->GetChildren().size() == 6); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(200.0, 200.0)); + renderGrid_->SetLayoutParam(layoutParam); + ASSERT_TRUE(renderGrid_->NeedLayout()); + renderGrid_->PerformLayout(); + ASSERT_TRUE(renderGrid_->GetLayoutSize() == Size(200.0, 200.0)); + const std::list>& items = renderGrid_->GetChildren(); + ASSERT_TRUE(items.size() == 6); + int32_t index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset(200.0 - 400.0 - (index / 2) * 400.0, (index % 2) * 100.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(400.0, 100.0)); + index++; + } + + /** + * @tc.steps: step4. Trigger a slide event with offset(-1000.0, -1000.0) and offset(1000.0, 1000.0). + * @tc.expected: step4. Children's position no change. + */ + renderGrid_->UpdateOffset(Offset(-1000.0, -1000.0)); + renderGrid_->PerformLayout(); + index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset(-200.0 - (index / 2) * 400.0 + 1000.0, (index % 2) * 100.0)); + index++; + } + renderGrid_->UpdateOffset(Offset(1000.0, 1000.0)); + renderGrid_->PerformLayout(); + index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset(-200.0 - (index / 2) * 400.0, (index % 2) * 100.0)); + index++; + } +} + +/** + * @tc.name: RenderGridTest008 + * @tc.desc: Verify Grid PerformLayout can calculate six children with column reverse direction and two columns. + * @tc.type: FUNC + * @tc.require: AR000DBI7J + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridTest, RenderGridTest008, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct GridComponent with no child by column reverse direction and two columns. + * @tc.expected: step1. properties and children are set correctly. + */ + std::list> children; + RefPtr gridComponent = AceType::MakeRefPtr(children); + gridComponent->SetDirection(FlexDirection::COLUMN_REVERSE); + gridComponent->SetColumnCount(2); + gridComponent->SetWidth(1000.0); + gridComponent->SetHeight(350.0); + ASSERT_TRUE(gridComponent->GetColumnCount() == 2); + + /** + * @tc.steps: step2. construct RenderGrid with grid component and add six children. + * @tc.expected: step2. properties and children are set correctly. + */ + renderGrid_->Update(gridComponent); + int32_t count = 6; + for (int32_t i = 0; i < count; ++i) { + RefPtr box = GridTestUtils::CreateRenderBox(400.0, 400.0); + box->Attach(mockContext_); + renderGrid_->AddChild(box); + } + ASSERT_TRUE(renderGrid_->GetChildren().size() == 6); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(350.0, 1000.0)); + renderGrid_->SetLayoutParam(layoutParam); + ASSERT_TRUE(renderGrid_->NeedLayout()); + renderGrid_->PerformLayout(); + ASSERT_TRUE(renderGrid_->GetLayoutSize() == Size(350.0, 350.0)); + const std::list>& items = renderGrid_->GetChildren(); + ASSERT_TRUE(items.size() == 6); + int32_t index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset((index % 2) * 175, 350.0 - 400.0 - (index / 2) * 400.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(175, 400.0)); + index++; + } + + /** + * @tc.steps: step4. Trigger a slide event with offset(-2500.0, -2500.0) and offset(2500.0, 2500.0). + * @tc.expected: step4. Children's position no change. + */ + renderGrid_->UpdateOffset(Offset(-2500.0, -2500.0)); + renderGrid_->PerformLayout(); + index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset((index % 2) * 175, -50.0 - (index / 2) * 400.0 + 850.0)); + index++; + } + renderGrid_->UpdateOffset(Offset(2500.0, 2500.0)); + renderGrid_->PerformLayout(); + index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset((index % 2) * 175, -50.0 - (index / 2) * 400.0)); + index++; + } +} + +/** + * @tc.name: RenderGridTest009 + * @tc.desc: Verify Grid PerformLayout can calculate six children with row direction and 5 columns. + * @tc.type: FUNC + * @tc.require: AR000DBI7J + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridTest, RenderGridTest009, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct GridComponent with no child by row direction and 5 columns. + * @tc.expected: step1. properties and children are set correctly. + */ + std::list> children; + RefPtr gridComponent = AceType::MakeRefPtr(children); + gridComponent->SetDirection(FlexDirection::ROW); + gridComponent->SetFlexAlign(FlexAlign::FLEX_END); + gridComponent->SetColumnCount(5); + ASSERT_TRUE(gridComponent->GetColumnCount() == 5); + + /** + * @tc.steps: step2. construct RenderGrid with grid component and add six children. + * @tc.expected: step2. properties and children are set correctly. + */ + renderGrid_->Update(gridComponent); + int32_t count = 6; + for (int32_t i = 0; i < count; ++i) { + RefPtr box = GridTestUtils::CreateRenderBox(200.0, 100.0); + box->Attach(mockContext_); + renderGrid_->AddChild(box); + } + ASSERT_TRUE(renderGrid_->GetChildren().size() == 6); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(600.0, 600.0)); + renderGrid_->SetLayoutParam(layoutParam); + ASSERT_TRUE(renderGrid_->NeedLayout()); + renderGrid_->PerformLayout(); + ASSERT_TRUE(renderGrid_->GetLayoutSize() == Size(600.0, 600.0)); + const std::list>& items = renderGrid_->GetChildren(); + ASSERT_TRUE(items.size() == 6); + int32_t index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset((index / 5) * 200.0, 20.0 + (index % 5) * 120.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(200.0, 100.0)); + index++; + } + + /** + * @tc.steps: step4. Trigger a slide event with offset(-50.0, -50.0) and offset(50.0, 50.0). + * @tc.expected: step4. Children's position no change. + */ + renderGrid_->UpdateOffset(Offset(-50.0, -50.0)); + renderGrid_->PerformLayout(); + index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset((index / 5) * 200.0, 20.0 + (index % 5) * 120.0)); + index++; + } + renderGrid_->UpdateOffset(Offset(50.0, 50.0)); + renderGrid_->PerformLayout(); + index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset((index / 5) * 200.0, 20.0 + (index % 5) * 120.0)); + index++; + } +} + +/** + * @tc.name: RenderGridTest010 + * @tc.desc: Verify Grid PerformLayout can calculate six children with column direction and 5 columns. + * @tc.type: FUNC + * @tc.require: AR000DBI7J + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridTest, RenderGridTest010, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct GridComponent with no child by column direction and 5 columns. + * @tc.expected: step1. properties and children are set correctly. + */ + std::list> children; + RefPtr gridComponent = AceType::MakeRefPtr(children); + gridComponent->SetDirection(FlexDirection::COLUMN); + gridComponent->SetColumnCount(5); + gridComponent->SetColumnExtent(2222); + ASSERT_TRUE(gridComponent->GetColumnCount() == 5); + + /** + * @tc.steps: step2. construct RenderGrid with grid component and add six children. + * @tc.expected: step2. properties and children are set correctly. + */ + renderGrid_->Update(gridComponent); + int32_t count = 6; + for (int32_t i = 0; i < count; ++i) { + RefPtr box = GridTestUtils::CreateRenderBox(200.0, 100.0); + box->Attach(mockContext_); + renderGrid_->AddChild(box); + } + ASSERT_TRUE(renderGrid_->GetChildren().size() == 6); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(1000.0, 150.0)); + renderGrid_->SetLayoutParam(layoutParam); + ASSERT_TRUE(renderGrid_->NeedLayout()); + renderGrid_->PerformLayout(); + ASSERT_TRUE(renderGrid_->GetLayoutSize() == Size(1000.0, 150.0)); + const std::list>& items = renderGrid_->GetChildren(); + ASSERT_TRUE(items.size() == 6); + int32_t index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset((index % 5) * 200.0, index / 5 * 100.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(200.0, 100.0)); + index++; + } + + /** + * @tc.steps: step4. Trigger a slide event with offset(50.0, 50.0) and offset(-50.0, -50.0). + * @tc.expected: step4. Children's position no change. + */ + renderGrid_->UpdateOffset(Offset(50.0, 50.0)); + renderGrid_->PerformLayout(); + index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset((index % 5) * 200.0, index / 5 * 100.0 - 50.0)); + index++; + } + + renderGrid_->UpdateOffset(Offset(-50.0, -50.0)); + renderGrid_->PerformLayout(); + index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset((index % 5) * 200.0, index / 5 * 100.0)); + index++; + } +} + +/** + * @tc.name: RenderGridTest011 + * @tc.desc: Verify Grid PerformLayout can calculate six children with row reverse direction and 5 columns. + * @tc.type: FUNC + * @tc.require: AR000DBI7J + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridTest, RenderGridTest011, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct GridComponent with no child by row reverse direction and 5 columns. + * @tc.expected: step1. properties and children are set correctly. + */ + std::list> children; + RefPtr gridComponent = AceType::MakeRefPtr(children); + gridComponent->SetDirection(FlexDirection::ROW_REVERSE); + gridComponent->SetColumnCount(5); + gridComponent->SetWidth(999.0); + gridComponent->SetHeight(888.0); + ASSERT_TRUE(gridComponent->GetColumnCount() == 5); + + /** + * @tc.steps: step2. construct RenderGrid with grid component and add six children. + * @tc.expected: step2. properties and children are set correctly. + */ + renderGrid_->Update(gridComponent); + int32_t count = 6; + for (int32_t i = 0; i < count; ++i) { + RefPtr box = GridTestUtils::CreateRenderBox(100.0, 200.0); + box->Attach(mockContext_); + renderGrid_->AddChild(box); + } + ASSERT_TRUE(renderGrid_->GetChildren().size() == 6); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(190.0, 850.0)); + renderGrid_->SetLayoutParam(layoutParam); + ASSERT_TRUE(renderGrid_->NeedLayout()); + renderGrid_->PerformLayout(); + ASSERT_TRUE(renderGrid_->GetLayoutSize() == Size(190.0, 850.0)); + const std::list>& items = renderGrid_->GetChildren(); + ASSERT_TRUE(items.size() == 6); + int32_t index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset(190.0 - 100.0 - (index / 5) * 100.0, (index % 5) * 170.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(100.0, 170.0)); + index++; + } + + /** + * @tc.steps: step4. Trigger a slide event with offset(-1111, -1111) and offset(1111, 1111). + * @tc.expected: step4. Children's position no change. + */ + renderGrid_->UpdateOffset(Offset(-1111.0, -1111.0)); + renderGrid_->PerformLayout(); + index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset(90.0 - (index / 5) * 100.0 + 10.0, (index % 5) * 170.0)); + index++; + } + renderGrid_->UpdateOffset(Offset(1111.0, 1111.0)); + renderGrid_->PerformLayout(); + index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset(190.0 - 100.0 - (index / 5) * 100.0, (index % 5) * 170.0)); + index++; + } +} + +/** + * @tc.name: RenderGridTest012 + * @tc.desc: Verify Grid PerformLayout can calculate six children with column reverse direction and 5 columns. + * @tc.type: FUNC + * @tc.require: AR000DBI7J + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridTest, RenderGridTest012, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct GridComponent with no child by column reverse direction and 5 columns. + * @tc.expected: step1. properties and children are set correctly. + */ + std::list> children; + RefPtr gridComponent = AceType::MakeRefPtr(children); + gridComponent->SetDirection(FlexDirection::COLUMN_REVERSE); + gridComponent->SetColumnCount(5); + gridComponent->SetWidth(800.0); + gridComponent->SetHeight(50.0); + ASSERT_TRUE(gridComponent->GetColumnCount() == 5); + + /** + * @tc.steps: step2. construct RenderGrid with grid component and add six children. + * @tc.expected: step2. properties and children are set correctly. + */ + renderGrid_->Update(gridComponent); + int32_t count = 6; + for (int32_t i = 0; i < count; ++i) { + RefPtr box = GridTestUtils::CreateRenderBox(100.0, 200.0); + box->Attach(mockContext_); + renderGrid_->AddChild(box); + } + ASSERT_TRUE(renderGrid_->GetChildren().size() == 6); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(450.0, 777.0)); + renderGrid_->SetLayoutParam(layoutParam); + ASSERT_TRUE(renderGrid_->NeedLayout()); + renderGrid_->PerformLayout(); + ASSERT_TRUE(renderGrid_->GetLayoutSize() == Size(450.0, 50.0)); + const std::list>& items = renderGrid_->GetChildren(); + ASSERT_TRUE(items.size() == 6); + int32_t index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset((index % 5) * 90.0, 50.0 - 200.0 - (index / 5) * 200.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(90.0, 200.0)); + index++; + } + + /** + * @tc.steps: step4. Trigger a slide event with offset(-300.0, -300.0) and offset(300.0, 300.0). + * @tc.expected: step4. Children's position no change. + */ + renderGrid_->UpdateOffset(Offset(-300.0, -300.0)); + renderGrid_->PerformLayout(); + index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset((index % 5) * 90.0, -150.0 - (index / 5) * 200.0 + 300.0)); + index++; + } + renderGrid_->UpdateOffset(Offset(300.0, 300.0)); + renderGrid_->PerformLayout(); + index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset((index % 5) * 90.0, -150.0 - (index / 5) * 200.0)); + index++; + } +} + +/** + * @tc.name: RenderGridTest013 + * @tc.desc: Verify Grid PerformLayout can calculate six children with row direction and 999 extent. + * @tc.type: FUNC + * @tc.require: AR000DBI7K + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridTest, RenderGridTest013, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct GridComponent with no child by row direction and 999 extent. + * @tc.expected: step1. properties and children are set correctly. + */ + std::list> children; + RefPtr gridComponent = AceType::MakeRefPtr(children); + gridComponent->SetDirection(FlexDirection::ROW); + gridComponent->SetFlexAlign(FlexAlign::FLEX_START); + gridComponent->SetColumnExtent(999); + gridComponent->SetWidth(800.0); + gridComponent->SetHeight(1000.0); + ASSERT_TRUE(gridComponent->GetColumnExtent() == 999); + + /** + * @tc.steps: step2. construct RenderGrid with grid component and add six children. + * @tc.expected: step2. properties and children are set correctly. + */ + renderGrid_->Update(gridComponent); + int32_t count = 20; + for (int32_t i = 0; i < count; ++i) { + RefPtr box = GridTestUtils::CreateRenderBox(300.0, 300.0); + box->Attach(mockContext_); + renderGrid_->AddChild(box); + } + ASSERT_TRUE(renderGrid_->GetChildren().size() == 20.0); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + ASSERT_TRUE(renderGrid_->NeedLayout()); + renderGrid_->PerformLayout(); + ASSERT_TRUE(renderGrid_->GetLayoutSize() == Size(800.0, 1000.0)); + const std::list>& items = renderGrid_->GetChildren(); + ASSERT_TRUE(items.size() == 20.0); + int32_t index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset((index / 2) * 300.0, (index % 2) * 500.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(300.0, 300.0)); + index++; + } + + /** + * @tc.steps: step4. Trigger a slide event with offset(-150.0, -150.0) and offset(150.0, 150.0). + * @tc.expected: step4. Children's position no change. + */ + renderGrid_->UpdateOffset(Offset(-150.0, -150.0)); + renderGrid_->PerformLayout(); + index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset((index / 2) * 300.0, (index % 2) * 500.0)); + index++; + } + renderGrid_->UpdateOffset(Offset(150.0, 150.0)); + renderGrid_->PerformLayout(); + index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset((index / 2) * 300.0 - 150.0, (index % 2) * 500.0)); + index++; + } +} + +/** + * @tc.name: RenderGridTest014 + * @tc.desc: Verify Grid PerformLayout can calculate six children with column direction and 700.0 extent. + * @tc.type: FUNC + * @tc.require: AR000DBI7K + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridTest, RenderGridTest014, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct GridComponent with no child by column direction and 700.0 extent. + * @tc.expected: step1. properties and children are set correctly. + */ + std::list> children; + RefPtr gridComponent = AceType::MakeRefPtr(children); + gridComponent->SetDirection(FlexDirection::COLUMN); + gridComponent->SetColumnExtent(700.0); + gridComponent->SetWidth(1000.0); + gridComponent->SetHeight(900.0); + ASSERT_TRUE(gridComponent->GetColumnExtent() == 700.0); + + /** + * @tc.steps: step2. construct RenderGrid with grid component and add six children. + * @tc.expected: step2. properties and children are set correctly. + */ + renderGrid_->Update(gridComponent); + int32_t count = 10; + for (int32_t i = 0; i < count; ++i) { + RefPtr box = GridTestUtils::CreateRenderBox(800.0, 200.0); + box->Attach(mockContext_); + renderGrid_->AddChild(box); + } + ASSERT_TRUE(renderGrid_->GetChildren().size() == 10.0); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(700.0, 900.0)); + renderGrid_->SetLayoutParam(layoutParam); + ASSERT_TRUE(renderGrid_->NeedLayout()); + renderGrid_->PerformLayout(); + ASSERT_TRUE(renderGrid_->GetLayoutSize() == Size(700.0, 900.0)); + const std::list>& items = renderGrid_->GetChildren(); + ASSERT_TRUE(items.size() == 10.0); + int32_t index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset(0.0, index * 200.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(700.0, 200.0)); + index++; + } + + /** + * @tc.steps: step4. Trigger a slide event with offset(1100.0, 1100.0) and offset(-1100.0, -1100.0). + * @tc.expected: step4. Children's position no change. + */ + renderGrid_->UpdateOffset(Offset(1100.0, 1100.0)); + renderGrid_->PerformLayout(); + index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset(0.0, index * 200.0 - 1100.0)); + index++; + } + + renderGrid_->UpdateOffset(Offset(-1100.0, -1100.0)); + renderGrid_->PerformLayout(); + index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset(0.0, index * 200.0)); + index++; + } +} + +/** + * @tc.name: RenderGridTest015 + * @tc.desc: Verify Grid PerformLayout can calculate six children with row reverse direction and 301 extent. + * @tc.type: FUNC + * @tc.require: AR000DBI7K + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridTest, RenderGridTest015, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct GridComponent with no child by row reverse direction and 301 extent. + * @tc.expected: step1. properties and children are set correctly. + */ + std::list> children; + RefPtr gridComponent = AceType::MakeRefPtr(children); + gridComponent->SetDirection(FlexDirection::ROW_REVERSE); + gridComponent->SetFlexAlign(FlexAlign::STRETCH); + gridComponent->SetColumnExtent(301); + gridComponent->SetWidth(900.0); + gridComponent->SetHeight(900.0); + ASSERT_TRUE(gridComponent->GetColumnExtent() == 301); + + /** + * @tc.steps: step2. construct RenderGrid with grid component and add six children. + * @tc.expected: step2. properties and children are set correctly. + */ + renderGrid_->Update(gridComponent); + int32_t count = 15; + for (int32_t i = 0; i < count; ++i) { + RefPtr box = GridTestUtils::CreateRenderBox(200.0, 200.0); + box->Attach(mockContext_); + renderGrid_->AddChild(box); + } + ASSERT_TRUE(renderGrid_->GetChildren().size() == 15); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(900.0, 900.0)); + renderGrid_->SetLayoutParam(layoutParam); + ASSERT_TRUE(renderGrid_->NeedLayout()); + renderGrid_->PerformLayout(); + ASSERT_TRUE(renderGrid_->GetLayoutSize() == Size(900.0, 900.0)); + const std::list>& items = renderGrid_->GetChildren(); + ASSERT_TRUE(items.size() == 15); + int32_t index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset(900.0 - 200.0 - index / 3 * 200.0, (index % 3) * 300.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(200.0, 300.0)); + index++; + } + + /** + * @tc.steps: step4. Trigger a slide event with offset(-200.0, -200.0) and offset(200.0, 200.0). + * @tc.expected: step4. Children's position no change. + */ + renderGrid_->UpdateOffset(Offset(-200.0, -200.0)); + renderGrid_->PerformLayout(); + index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset(700.0 - index / 3 * 200.0 + 100.0, (index % 3) * 300.0)); + index++; + } + renderGrid_->UpdateOffset(Offset(200.0, 200.0)); + renderGrid_->PerformLayout(); + index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset(700.0 - index / 3 * 200.0, (index % 3) * 300.0)); + index++; + } +} + +/** + * @tc.name: RenderGridTest016 + * @tc.desc: Verify Grid PerformLayout can calculate six children with column reverse direction and 319 extent. + * @tc.type: FUNC + * @tc.require: AR000DBI7K + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridTest, RenderGridTest016, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct GridComponent with no child by column reverse direction and 319 extent. + * @tc.expected: step1. properties and children are set correctly. + */ + std::list> children; + RefPtr gridComponent = AceType::MakeRefPtr(children); + gridComponent->SetDirection(FlexDirection::COLUMN_REVERSE); + gridComponent->SetColumnExtent(319); + gridComponent->SetWidth(960.0); + gridComponent->SetHeight(960.0); + ASSERT_TRUE(gridComponent->GetColumnExtent() == 319); + + /** + * @tc.steps: step2. construct RenderGrid with grid component and add six children. + * @tc.expected: step2. properties and children are set correctly. + */ + renderGrid_->Update(gridComponent); + int32_t count = 16; + for (int32_t i = 0; i < count; ++i) { + RefPtr box = GridTestUtils::CreateRenderBox(240.0, 240.0); + box->Attach(mockContext_); + renderGrid_->AddChild(box); + } + ASSERT_TRUE(renderGrid_->GetChildren().size() == 16); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + ASSERT_TRUE(renderGrid_->NeedLayout()); + renderGrid_->PerformLayout(); + ASSERT_TRUE(renderGrid_->GetLayoutSize() == Size(960.0, 960.0)); + const std::list>& items = renderGrid_->GetChildren(); + ASSERT_TRUE(items.size() == 16); + int32_t index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset((index % 4) * 240.0, 960.0 - 240.0 - 240.0 * (index / 4))); + ASSERT_TRUE(item->GetLayoutSize() == Size(240.0, 240.0)); + index++; + } + + /** + * @tc.steps: step4. Trigger a slide event with offset(-9999, -9999) and offset(9999, 9999). + * @tc.expected: step4. Children's position no change. + */ + renderGrid_->UpdateOffset(Offset(-9999.0, -9999.0)); + renderGrid_->PerformLayout(); + index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset((index % 4) * 240.0, 720.0 - 240.0 * (index / 4))); + index++; + } + renderGrid_->UpdateOffset(Offset(9999.0, 9999.0)); + renderGrid_->PerformLayout(); + index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset((index % 4) * 240.0, 720.0 - 240.0 * (index / 4))); + index++; + } +} + +/** + * @tc.name: RenderGridTest017 + * @tc.desc: Verify Grid PerformLayout can calculate six children with row direction and two columns. + * @tc.type: FUNC + * @tc.require: AR000DBI7K + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridTest, RenderGridTest017, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct GridComponent with no child by row direction and two columns. + * @tc.expected: step1. properties and children are set correctly. + */ + std::list> children; + RefPtr gridComponent = AceType::MakeRefPtr(children); + gridComponent->SetDirection(FlexDirection::ROW); + gridComponent->SetColumnExtent(190.0); + gridComponent->SetWidth(899.0); + gridComponent->SetHeight(950.0); + ASSERT_TRUE(gridComponent->GetColumnExtent() == 190.0); + + /** + * @tc.steps: step2. construct RenderGrid with grid component and add six children. + * @tc.expected: step2. properties and children are set correctly. + */ + renderGrid_->Update(gridComponent); + int32_t count = 25; + for (int32_t i = 0; i < count; ++i) { + RefPtr box = GridTestUtils::CreateRenderBox(180.0, 200.0); + box->Attach(mockContext_); + renderGrid_->AddChild(box); + } + ASSERT_TRUE(renderGrid_->GetChildren().size() == 25); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + ASSERT_TRUE(renderGrid_->NeedLayout()); + renderGrid_->PerformLayout(); + ASSERT_TRUE(renderGrid_->GetLayoutSize() == Size(899.0, 950.0)); + const std::list>& items = renderGrid_->GetChildren(); + ASSERT_TRUE(items.size() == 25); + int32_t index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset(index / 5 * 180.0, (index % 5) * 190.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(180.0, 190.0)); + index++; + } + + /** + * @tc.steps: step4. Trigger a slide event with offset(-1, -1) and offset(1, 1). + * @tc.expected: step4. Children's position no change. + */ + renderGrid_->UpdateOffset(Offset(-1.0, -1.0)); + renderGrid_->PerformLayout(); + index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset(index / 5 * 180.0, (index % 5) * 190.0)); + index++; + } + renderGrid_->UpdateOffset(Offset(1.0, 1.0)); + renderGrid_->PerformLayout(); + index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset(index / 5 * 180.0 - 1, (index % 5) * 190.0)); + index++; + } +} + +/** + * @tc.name: RenderGridTest018 + * @tc.desc: Verify Grid PerformLayout can calculate six children with column direction and 179 extent. + * @tc.type: FUNC + * @tc.require: AR000DBI7K + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridTest, RenderGridTest018, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct GridComponent with no child by column direction and 179 extent. + * @tc.expected: step1. properties and children are set correctly. + */ + std::list> children; + RefPtr gridComponent = AceType::MakeRefPtr(children); + gridComponent->SetDirection(FlexDirection::COLUMN); + gridComponent->SetColumnExtent(179); + gridComponent->SetWidth(900.0); + gridComponent->SetHeight(1201.0); + ASSERT_TRUE(gridComponent->GetColumnExtent() == 179); + + /** + * @tc.steps: step2. construct RenderGrid with grid component and add six children. + * @tc.expected: step2. properties and children are set correctly. + */ + renderGrid_->Update(gridComponent); + int32_t count = 36; + for (int32_t i = 0; i < count; ++i) { + RefPtr box = GridTestUtils::CreateRenderBox(222.0, 200.0); + box->Attach(mockContext_); + renderGrid_->AddChild(box); + } + ASSERT_TRUE(renderGrid_->GetChildren().size() == 36); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(1024.0, 2048.0)); + renderGrid_->SetLayoutParam(layoutParam); + ASSERT_TRUE(renderGrid_->NeedLayout()); + renderGrid_->PerformLayout(); + ASSERT_TRUE(renderGrid_->GetLayoutSize() == Size(900.0, 1201)); + const std::list>& items = renderGrid_->GetChildren(); + ASSERT_TRUE(items.size() == 36); + int32_t index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset((index % 6) * 150.0, index / 6 * 200.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(150.0, 200.0)); + index++; + } + + /** + * @tc.steps: step4. Trigger a slide event with offset(1, 1) and offset(-1, -1). + * @tc.expected: step4. Children's position no change. + */ + renderGrid_->UpdateOffset(Offset(1.0, 1.0)); + renderGrid_->PerformLayout(); + index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset((index % 6) * 150.0, index / 6 * 200.0)); + index++; + } + + renderGrid_->UpdateOffset(Offset(-1.0, -1.0)); + renderGrid_->PerformLayout(); + index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset((index % 6) * 150.0, index / 6 * 200.0)); + index++; + } +} + +/** + * @tc.name: RenderGridTest019 + * @tc.desc: Verify Grid PerformLayout can calculate six children with row reverse direction and two columns. + * @tc.type: FUNC + * @tc.require: AR000DBI7K + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridTest, RenderGridTest019, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct GridComponent with no child by row reverse direction and two columns. + * @tc.expected: step1. properties and children are set correctly. + */ + std::list> children; + RefPtr gridComponent = AceType::MakeRefPtr(children); + gridComponent->SetDirection(FlexDirection::ROW_REVERSE); + gridComponent->SetFlexAlign(FlexAlign::FLEX_START); + gridComponent->SetColumnExtent(233); + gridComponent->SetWidth(700.0); + gridComponent->SetHeight(1400.0); + ASSERT_TRUE(gridComponent->GetColumnExtent() == 233); + + /** + * @tc.steps: step2. construct RenderGrid with grid component and add six children. + * @tc.expected: step2. properties and children are set correctly. + */ + renderGrid_->Update(gridComponent); + int32_t count = 6; + for (int32_t i = 0; i < count; ++i) { + RefPtr box = GridTestUtils::CreateRenderBox(888.0, 100.0); + box->Attach(mockContext_); + renderGrid_->AddChild(box); + } + ASSERT_TRUE(renderGrid_->GetChildren().size() == 6); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderGrid_->PerformLayout(); + ASSERT_TRUE(renderGrid_->GetLayoutSize() == Size(700.0, 1400.0)); + const std::list>& items = renderGrid_->GetChildren(); + ASSERT_TRUE(items.size() == 6); + int32_t index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset(700.0 - 888 - (index / 7) * 888, (index % 7) * 200.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(888, 100.0)); + index++; + } + + /** + * @tc.steps: step4. Trigger a slide event with offset(-888, -888) and offset(888, 888). + * @tc.expected: step4. Children's position no change. + */ + renderGrid_->UpdateOffset(Offset(-888.0, -888.0)); + renderGrid_->PerformLayout(); + index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset(-188.0 - (index / 7) * 888.0 + 188.0, (index % 7) * 200.0)); + index++; + } + renderGrid_->UpdateOffset(Offset(888.0, 888.0)); + renderGrid_->PerformLayout(); + index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset(-188.0 - (index / 7) * 888.0, (index % 7) * 200.0)); + index++; + } +} + +/** + * @tc.name: RenderGridTest020 + * @tc.desc: Verify Grid PerformLayout can calculate six children with column reverse direction and 125 extent. + * @tc.type: FUNC + * @tc.require: AR000DBI7K + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridTest, RenderGridTest020, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct GridComponent with no child by column reverse direction and 125 extent. + * @tc.expected: step1. properties and children are set correctly. + */ + std::list> children; + RefPtr gridComponent = AceType::MakeRefPtr(children); + gridComponent->SetDirection(FlexDirection::COLUMN_REVERSE); + gridComponent->SetColumnExtent(125); + gridComponent->SetWidth(1000.0); + gridComponent->SetHeight(1200.0); + ASSERT_TRUE(gridComponent->GetColumnExtent() == 125); + + /** + * @tc.steps: step2. construct RenderGrid with grid component and add six children. + * @tc.expected: step2. properties and children are set correctly. + */ + renderGrid_->Update(gridComponent); + int32_t count = 32; + for (int32_t i = 0; i < count; ++i) { + RefPtr box = GridTestUtils::CreateRenderBox(150.0, 300.0); + box->Attach(mockContext_); + renderGrid_->AddChild(box); + } + ASSERT_TRUE(renderGrid_->GetChildren().size() == 32); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderGrid_->PerformLayout(); + ASSERT_TRUE(renderGrid_->GetLayoutSize() == Size(1000.0, 1200.0)); + const std::list>& items = renderGrid_->GetChildren(); + ASSERT_TRUE(items.size() == 32); + int32_t index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset((index % 8) * 125, 1200.0 - 300.0 - (index / 8) * 300.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(125.0, 300.0)); + index++; + } + + /** + * @tc.steps: step4. Trigger a slide event with offset(-10.0, -10.0) and offset(10.0, 10.0). + * @tc.expected: step4. Children's position no change. + */ + renderGrid_->UpdateOffset(Offset(-10.0, -10.0)); + renderGrid_->PerformLayout(); + index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset((index % 8) * 125.0, 1200.0 - 300.0 - (index / 8) * 300.0)); + index++; + } + renderGrid_->UpdateOffset(Offset(10.0, 10.0)); + renderGrid_->PerformLayout(); + index = 0; + for (const auto& item : items) { + ASSERT_TRUE(item->GetPosition() == Offset((index % 8) * 125.0, 1200.0 - 300.0 - (index / 8) * 300.0)); + index++; + } +} + +/** + * @tc.name: RenderGridTest021 + * @tc.desc: Verify Grid PerformLayout can calculate six children with row direction and 400.0 extent. + * @tc.type: FUNC + * @tc.require: AR000DBI7K + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridTest, RenderGridTest021, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct GridComponent with no child by row direction and 400.0 extent. + * @tc.expected: step1. properties and children are set correctly. + */ + std::list> children; + RefPtr gridComponent = AceType::MakeRefPtr(children); + gridComponent->SetDirection(FlexDirection::ROW); + gridComponent->SetFlexAlign(FlexAlign::CENTER); + gridComponent->SetColumnExtent(400.0); + gridComponent->SetWidth(400.0); + gridComponent->SetHeight(400.0); + ASSERT_TRUE(gridComponent->GetColumnExtent() == 400.0); + + /** + * @tc.steps: step2. construct RenderGrid with grid component and add six children. + * @tc.expected: step2. properties and children are set correctly. + */ + renderGrid_->Update(gridComponent); + RefPtr firstBox = GridTestUtils::CreateRenderBox(100.0, 100.0); + firstBox->Attach(mockContext_); + renderGrid_->AddChild(firstBox); + RefPtr secondBox = GridTestUtils::CreateRenderBox(200.0, 200.0); + secondBox->Attach(mockContext_); + renderGrid_->AddChild(secondBox); + RefPtr thirdBox = GridTestUtils::CreateRenderBox(400.0, 400.0); + thirdBox->Attach(mockContext_); + renderGrid_->AddChild(thirdBox); + RefPtr fourthBox = GridTestUtils::CreateRenderBox(800.0, 800.0); + fourthBox->Attach(mockContext_); + renderGrid_->AddChild(fourthBox); + ASSERT_TRUE(renderGrid_->GetChildren().size() == 4); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderGrid_->PerformLayout(); + ASSERT_TRUE(renderGrid_->GetLayoutSize() == Size(400.0, 400.0)); + const std::list>& items = renderGrid_->GetChildren(); + ASSERT_TRUE(items.size() == 4); + int32_t index = 0; + for (const auto& item : items) { + if (index == 0) { + ASSERT_TRUE(item->GetPosition() == Offset(0.0, 150.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(100.0, 100.0)); + } + if (index == 2) { + ASSERT_TRUE(item->GetPosition() == Offset(300.0, 0.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(400.0, 400.0)); + } + index++; + } + + /** + * @tc.steps: step4. Trigger a slide event with offset(1100.0, 1100.0). + * @tc.expected: step4. Children's position no change. + */ + renderGrid_->UpdateOffset(Offset(1100.0, 1100.0)); + renderGrid_->PerformLayout(); + index = 0; + for (const auto& item : items) { + if (index == 1) { + ASSERT_TRUE(item->GetPosition() == Offset(100.0 - 1100.0, 100.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(200.0, 200.0)); + } + if (index == 3) { + ASSERT_TRUE(item->GetPosition() == Offset(700.0 - 1100.0, 0.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(800.0, 400.0)); + } + index++; + } +} + +/** + * @tc.name: RenderGridTest022 + * @tc.desc: Verify Grid PerformLayout can calculate six children with column direction and 300.0 extent. + * @tc.type: FUNC + * @tc.require: AR000DBI7K + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridTest, RenderGridTest022, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct GridComponent with no child by column direction and 300.0 extent. + * @tc.expected: step1. properties and children are set correctly. + */ + std::list> children; + RefPtr gridComponent = AceType::MakeRefPtr(children); + gridComponent->SetDirection(FlexDirection::COLUMN); + gridComponent->SetColumnExtent(300.0); + gridComponent->SetWidth(600.0); + gridComponent->SetHeight(600.0); + ASSERT_TRUE(gridComponent->GetColumnExtent() == 300.0); + + /** + * @tc.steps: step2. construct RenderGrid with grid component and add six children. + * @tc.expected: step2. properties and children are set correctly. + */ + renderGrid_->Update(gridComponent); + RefPtr firstBox = GridTestUtils::CreateRenderBox(400.0, 100.0); + firstBox->Attach(mockContext_); + renderGrid_->AddChild(firstBox); + RefPtr secondBox = GridTestUtils::CreateRenderBox(500.0, 700.0); + secondBox->Attach(mockContext_); + renderGrid_->AddChild(secondBox); + RefPtr thirdBox = GridTestUtils::CreateRenderBox(600.0, 200.0); + thirdBox->Attach(mockContext_); + renderGrid_->AddChild(thirdBox); + ASSERT_TRUE(renderGrid_->GetChildren().size() == 3); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderGrid_->PerformLayout(); + ASSERT_TRUE(renderGrid_->GetLayoutSize() == Size(600.0, 600.0)); + const std::list>& items = renderGrid_->GetChildren(); + ASSERT_TRUE(items.size() == 3); + int32_t index = 0; + for (const auto& item : items) { + if (index == 0) { + ASSERT_TRUE(item->GetPosition() == Offset(0.0, 0.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(300.0, 100.0)); + } + if (index == 1) { + ASSERT_TRUE(item->GetPosition() == Offset(300.0, 0.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(300.0, 700.0)); + } + index++; + } + + /** + * @tc.steps: step4. Trigger a slide event with offset(101, 101). + * @tc.expected: step4. Children's position no change. + */ + renderGrid_->UpdateOffset(Offset(101.0, 101.0)); + renderGrid_->PerformLayout(); + index = 0; + for (const auto& item : items) { + if (index == 2) { + ASSERT_TRUE(item->GetPosition() == Offset(0.0, 100.0 - 100.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(300.0, 200.0)); + } + index++; + } +} + +/** + * @tc.name: RenderGridTest023 + * @tc.desc: Verify Grid PerformLayout can calculate six children with row reverse direction and 200.0 extent. + * @tc.type: FUNC + * @tc.require: AR000DBI7K + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridTest, RenderGridTest023, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct GridComponent with no child by row reverse direction and 200.0 extent. + * @tc.expected: step1. properties and children are set correctly. + */ + std::list> children; + RefPtr gridComponent = AceType::MakeRefPtr(children); + gridComponent->SetDirection(FlexDirection::ROW_REVERSE); + gridComponent->SetFlexAlign(FlexAlign::FLEX_END); + gridComponent->SetColumnExtent(200.0); + gridComponent->SetWidth(400.0); + gridComponent->SetHeight(400.0); + ASSERT_TRUE(gridComponent->GetColumnExtent() == 200.0); + + /** + * @tc.steps: step2. construct RenderGrid with grid component and add six children. + * @tc.expected: step2. properties and children are set correctly. + */ + renderGrid_->Update(gridComponent); + RefPtr firstBox = GridTestUtils::CreateRenderBox(100.0, 150.0); + firstBox->Attach(mockContext_); + renderGrid_->AddChild(firstBox); + RefPtr secondBox = GridTestUtils::CreateRenderBox(250.0, 200.0); + secondBox->Attach(mockContext_); + renderGrid_->AddChild(secondBox); + RefPtr thirdBox = GridTestUtils::CreateRenderBox(50.0, 250.0); + thirdBox->Attach(mockContext_); + renderGrid_->AddChild(thirdBox); + RefPtr fourthBox = GridTestUtils::CreateRenderBox(150.0, 300.0); + fourthBox->Attach(mockContext_); + renderGrid_->AddChild(fourthBox); + RefPtr fifthBox = GridTestUtils::CreateRenderBox(60.0, 350.0); + fifthBox->Attach(mockContext_); + renderGrid_->AddChild(fifthBox); + ASSERT_TRUE(renderGrid_->GetChildren().size() == 5); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderGrid_->PerformLayout(); + ASSERT_TRUE(renderGrid_->GetLayoutSize() == Size(400.0, 400.0)); + const std::list>& items = renderGrid_->GetChildren(); + ASSERT_TRUE(items.size() == 5); + int32_t index = 0; + for (const auto& item : items) { + if (index == 0) { + ASSERT_TRUE(item->GetPosition() == Offset(300.0, 50.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(100.0, 150.0)); + } + if (index == 4) { + ASSERT_TRUE(item->GetPosition() == Offset(190.0, 0.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(60.0, 200.0)); + } + index++; + } + + /** + * @tc.steps: step4. Trigger a slide event with offset(-1.0, -1.0) . + * @tc.expected: step4. Children's position no change. + */ + renderGrid_->UpdateOffset(Offset(-1.0, -1.0)); + renderGrid_->PerformLayout(); + index = 0; + for (const auto& item : items) { + if (index == 3) { + ASSERT_TRUE(item->GetPosition() == Offset(0.0, 200.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(150.0, 200.0)); + } + if (index == 1) { + ASSERT_TRUE(item->GetPosition() == Offset(150.0, 200.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(250.0, 200.0)); + } + index++; + } +} + +/** + * @tc.name: RenderGridTest024 + * @tc.desc: Verify Grid PerformLayout can calculate six children with column reverse direction and 5 columns. + * @tc.type: FUNC + * @tc.require: AR000DBI7K + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridTest, RenderGridTest024, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct GridComponent with no child by column reverse direction and 5 columns. + * @tc.expected: step1. properties and children are set correctly. + */ + std::list> children; + RefPtr gridComponent = AceType::MakeRefPtr(children); + gridComponent->SetDirection(FlexDirection::COLUMN_REVERSE); + gridComponent->SetFlexAlign(FlexAlign::STRETCH); + gridComponent->SetColumnExtent(500.0); + gridComponent->SetTotalCount(20.0); + gridComponent->SetOnRequestItem(EventMarker { "1-1" }); + gridComponent->SetCachedCount(5); + gridComponent->SetWidth(1000.0); + gridComponent->SetHeight(800.0); + ASSERT_TRUE(gridComponent->GetColumnExtent() == 500.0); + + /** + * @tc.steps: step2. construct RenderGrid with grid component and add six children. + * @tc.expected: step2. properties and children are set correctly. + */ + renderGrid_->Update(gridComponent); + RefPtr firstBox = GridTestUtils::CreateRenderBox(400.0, 500.0); + firstBox->Attach(mockContext_); + renderGrid_->AddChild(firstBox); + RefPtr secondBox = GridTestUtils::CreateRenderBox(300.0, 600.0); + secondBox->Attach(mockContext_); + renderGrid_->AddChild(secondBox); + RefPtr thirdBox = GridTestUtils::CreateRenderBox(200.0, 700.0); + thirdBox->Attach(mockContext_); + renderGrid_->AddChild(thirdBox); + ASSERT_TRUE(renderGrid_->GetChildren().size() == 3); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderGrid_->PerformLayout(); + ASSERT_TRUE(renderGrid_->GetLayoutSize() == Size(1000.0, 800.0)); + const std::list>& items = renderGrid_->GetChildren(); + ASSERT_TRUE(items.size() == 3); + int32_t index = 0; + for (const auto& item : items) { + if (index == 0) { + ASSERT_TRUE(item->GetPosition() == Offset(0.0, 300.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(500.0, 500.0)); + } + if (index == 1) { + ASSERT_TRUE(item->GetPosition() == Offset(500.0, 200.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(500.0, 600.0)); + } + index++; + } + + /** + * @tc.steps: step4. Trigger a slide event with offset(-400.0, -400.0). + * @tc.expected: step4. Children's position no change. + */ + renderGrid_->UpdateOffset(Offset(-400.0, -400.0)); + renderGrid_->PerformLayout(); + index = 0; + for (const auto& item : items) { + if (index == 2) { + ASSERT_TRUE(item->GetPosition() == Offset(0.0, -400.0 + 400.0)); + } + index++; + } +} + +/** + * @tc.name: RenderGridTest025 + * @tc.desc: Verify Grid PerformLayout can calculate multi children(span 2) by row direction. + * @tc.type: FUNC + * @tc.require: AR000DBI7K + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridTest, RenderGridTest025, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct GridComponent with multi children(span 2) by row direction. + * @tc.expected: step1. properties and children are set correctly. + */ + std::list> children; + RefPtr gridComponent = AceType::MakeRefPtr(children); + gridComponent->SetDirection(FlexDirection::ROW); + gridComponent->SetColumnCount(2); + gridComponent->SetWidth(500.0); + gridComponent->SetHeight(500.0); + ASSERT_TRUE(gridComponent->GetColumnCount() == 2); + + /** + * @tc.steps: step2. construct RenderGrid with grid component and add six children. + * @tc.expected: step2. properties and children are set correctly. + */ + renderGrid_->Update(gridComponent); + RefPtr firstItem = GridTestUtils::CreateRenderItem(200.0, 500.0, 2, mockContext_); + firstItem->Attach(mockContext_); + renderGrid_->AddChild(firstItem); + RefPtr secondItem = GridTestUtils::CreateRenderItem(200.0, 500.0, 1, mockContext_); + secondItem->Attach(mockContext_); + renderGrid_->AddChild(secondItem); + RefPtr thirdItem = GridTestUtils::CreateRenderItem(200.0, 500.0, 1, mockContext_); + thirdItem->Attach(mockContext_); + renderGrid_->AddChild(thirdItem); + ASSERT_TRUE(renderGrid_->GetChildren().size() == 3); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderGrid_->PerformLayout(); + ASSERT_TRUE(renderGrid_->GetLayoutSize() == Size(500.0, 500.0)); + const std::list>& items = renderGrid_->GetChildren(); + ASSERT_TRUE(items.size() == 3); + int32_t index = 0; + for (const auto& item : items) { + if (index == 0) { + ASSERT_TRUE(item->GetPosition() == Offset(0.0, 0.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(200.0, 500.0)); + } + if (index == 1) { + ASSERT_TRUE(item->GetPosition() == Offset(200.0, 0.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(200.0, 250.0)); + } + if (index == 2) { + ASSERT_TRUE(item->GetPosition() == Offset(200.0, 250.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(200.0, 250.0)); + } + index++; + } +} + +/** + * @tc.name: RenderGridTest026 + * @tc.desc: Verify Grid PerformLayout can calculate multi children(span 3) by column direction. + * @tc.type: FUNC + * @tc.require: AR000DBI7K + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridTest, RenderGridTest026, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct GridComponent with multi children(span 3) by column direction. + * @tc.expected: step1. properties and children are set correctly. + */ + std::list> children; + RefPtr gridComponent = AceType::MakeRefPtr(children); + gridComponent->SetDirection(FlexDirection::COLUMN); + gridComponent->SetColumnCount(4); + gridComponent->SetWidth(600.0); + gridComponent->SetHeight(600.0); + ASSERT_TRUE(gridComponent->GetColumnCount() == 4); + + /** + * @tc.steps: step2. construct RenderGrid with grid component and add six children. + * @tc.expected: step2. properties and children are set correctly. + */ + renderGrid_->Update(gridComponent); + RefPtr firstItem = GridTestUtils::CreateRenderItem(600.0, 200.0, 3, mockContext_); + firstItem->Attach(mockContext_); + renderGrid_->AddChild(firstItem); + RefPtr secondItem = GridTestUtils::CreateRenderItem(600.0, 200.0, 3, mockContext_); + secondItem->Attach(mockContext_); + renderGrid_->AddChild(secondItem); + RefPtr thirdItem = GridTestUtils::CreateRenderItem(600.0, 200.0, 1, mockContext_); + thirdItem->Attach(mockContext_); + renderGrid_->AddChild(thirdItem); + RefPtr fourthItem = GridTestUtils::CreateRenderItem(600.0, 200.0, 3, mockContext_); + fourthItem->Attach(mockContext_); + renderGrid_->AddChild(fourthItem); + ASSERT_TRUE(renderGrid_->GetChildren().size() == 4); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderGrid_->PerformLayout(); + ASSERT_TRUE(renderGrid_->GetLayoutSize() == Size(600.0, 600.0)); + const std::list>& items = renderGrid_->GetChildren(); + ASSERT_TRUE(items.size() == 4); + int32_t index = 0; + for (const auto& item : items) { + if (index == 0) { + ASSERT_TRUE(item->GetPosition() == Offset(0.0, 0.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(450.0, 200.0)); + } + if (index == 1) { + ASSERT_TRUE(item->GetPosition() == Offset(450.0, 0.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(150.0, 200.0)); + } + if (index == 2) { + ASSERT_TRUE(item->GetPosition() == Offset(0.0, 200.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(150.0, 200.0)); + } + if (index == 3) { + ASSERT_TRUE(item->GetPosition() == Offset(150.0, 200.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(450.0, 200.0)); + } + index++; + } +} + +/** + * @tc.name: RenderGridTest027 + * @tc.desc: Verify Grid PerformLayout can calculate multi children(span 4) by row reverse direction. + * @tc.type: FUNC + * @tc.require: AR000DBI7K + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridTest, RenderGridTest027, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct GridComponent with multi children(span 4) by row reverse direction. + * @tc.expected: step1. properties and children are set correctly. + */ + std::list> children; + RefPtr gridComponent = AceType::MakeRefPtr(children); + gridComponent->SetDirection(FlexDirection::ROW_REVERSE); + gridComponent->SetFlexAlign(FlexAlign::STRETCH); + gridComponent->SetColumnCount(3); + gridComponent->SetWidth(900.0); + gridComponent->SetHeight(900.0); + ASSERT_TRUE(gridComponent->GetColumnCount() == 3); + + /** + * @tc.steps: step2. construct RenderGrid with grid component and add six children. + * @tc.expected: step2. properties and children are set correctly. + */ + renderGrid_->Update(gridComponent); + RefPtr firstItem = GridTestUtils::CreateRenderItem(500.0, 400.0, 1, mockContext_); + firstItem->Attach(mockContext_); + renderGrid_->AddChild(firstItem); + RefPtr secondItem = GridTestUtils::CreateRenderItem(500.0, 400.0, 4, mockContext_); + secondItem->Attach(mockContext_); + renderGrid_->AddChild(secondItem); + RefPtr thirdItem = GridTestUtils::CreateRenderItem(500.0, 400.0, 4, mockContext_); + thirdItem->Attach(mockContext_); + renderGrid_->AddChild(thirdItem); + ASSERT_TRUE(renderGrid_->GetChildren().size() == 3); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderGrid_->PerformLayout(); + ASSERT_TRUE(renderGrid_->GetLayoutSize() == Size(900.0, 900.0)); + const std::list>& items = renderGrid_->GetChildren(); + ASSERT_TRUE(items.size() == 3); + int32_t index = 0; + for (const auto& item : items) { + if (index == 0) { + ASSERT_TRUE(item->GetPosition() == Offset(400.0, 0.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(500.0, 300.0)); + } + if (index == 1) { + ASSERT_TRUE(item->GetPosition() == Offset(400.0, 300.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(500.0, 600.0)); + } + if (index == 2) { + ASSERT_TRUE(item->GetPosition() == Offset(-100.0, 0.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(500.0, 900.0)); + } + index++; + } +} + +/** + * @tc.name: RenderGridTest028 + * @tc.desc: Verify Grid PerformLayout can calculate multi children(span 3) by column reverse direction. + * @tc.type: FUNC + * @tc.require: AR000DBI7K + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridTest, RenderGridTest028, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct GridComponent with multi children(span 3) by column reverse direction. + * @tc.expected: step1. properties and children are set correctly. + */ + std::list> children; + RefPtr gridComponent = AceType::MakeRefPtr(children); + gridComponent->SetDirection(FlexDirection::COLUMN_REVERSE); + gridComponent->SetColumnCount(3); + gridComponent->SetWidth(750.0); + gridComponent->SetHeight(750.0); + ASSERT_TRUE(gridComponent->GetColumnCount() == 3); + + /** + * @tc.steps: step2. construct RenderGrid with grid component and add six children. + * @tc.expected: step2. properties and children are set correctly. + */ + renderGrid_->Update(gridComponent); + RefPtr firstItem = GridTestUtils::CreateRenderItem(800.0, 400.0, 3, mockContext_); + firstItem->Attach(mockContext_); + renderGrid_->AddChild(firstItem); + RefPtr secondItem = GridTestUtils::CreateRenderItem(800.0, 400.0, 1, mockContext_); + secondItem->Attach(mockContext_); + renderGrid_->AddChild(secondItem); + RefPtr thirdItem = GridTestUtils::CreateRenderItem(800.0, 400.0, 3, mockContext_); + thirdItem->Attach(mockContext_); + renderGrid_->AddChild(thirdItem); + ASSERT_TRUE(renderGrid_->GetChildren().size() == 3); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderGrid_->PerformLayout(); + ASSERT_TRUE(renderGrid_->GetLayoutSize() == Size(750.0, 750.0)); + const std::list>& items = renderGrid_->GetChildren(); + ASSERT_TRUE(items.size() == 3); + int32_t index = 0; + for (const auto& item : items) { + if (index == 0) { + ASSERT_TRUE(item->GetPosition() == Offset(0.0, 350.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(750.0, 400.0)); + } + if (index == 1) { + ASSERT_TRUE(item->GetPosition() == Offset(0.0, -50.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(250.0, 400.0)); + } + if (index == 2) { + ASSERT_TRUE(item->GetPosition() == Offset(250.0, -50.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(500.0, 400.0)); + } + index++; + } +} + +/** + * @tc.name: RenderGridTest029 + * @tc.desc: Verify Grid JumpTo and AnimateTo API when row direction and two columns. + * @tc.type: FUNC + * @tc.require: AR000DBI7J + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridTest, RenderGridTest029, TestSize.Level1) +{ + /** + * @tc.steps: step1. Create RenderGrid with 10 child by row direction and two columns. + * @tc.expected: step1. properties and children are set correctly. + */ + std::list> children; + RefPtr gridComponent = AceType::MakeRefPtr(children); + gridComponent->SetDirection(FlexDirection::ROW); + gridComponent->SetColumnCount(2); + gridComponent->SetWidth(800.0); + gridComponent->SetHeight(800.0); + gridComponent->GetGridController()->SetInitialIndex(2); + renderGrid_->Update(gridComponent); + for (int32_t i = 0; i < 10; ++i) { + RefPtr box = GridTestUtils::CreateRenderBox(400.0, 400.0); + box->Attach(mockContext_); + renderGrid_->AddChild(box); + } + ASSERT_TRUE(gridComponent->GetGridController()->GetInitialIndex() == 2); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties and children are calculated correctly. + */ + renderGrid_->PerformLayout(); + ASSERT_TRUE(renderGrid_->GetChildren().size() == 10); + ASSERT_TRUE(gridComponent->GetGridController()->GetCurrentIndex() == 2); + ASSERT_TRUE(NearEqual(gridComponent->GetGridController()->GetCurrentPosition(), 400.0)); + int32_t index = 0; + for (const auto& item : renderGrid_->GetChildren()) { + ASSERT_TRUE(item->GetPosition() == Offset(index / 2 * 400.0 - 400.0, (index % 2) * 400.0)); + index++; + } + gridComponent->GetGridController()->JumpTo(600.0); + renderGrid_->PerformLayout(); + ASSERT_TRUE(gridComponent->GetGridController()->GetCurrentIndex() == 2); + ASSERT_TRUE(NearEqual(gridComponent->GetGridController()->GetCurrentPosition(), 600.0)); + index = 0; + for (const auto& item : renderGrid_->GetChildren()) { + ASSERT_TRUE(item->GetPosition() == Offset(index / 2 * 400.0 - 600.0, (index % 2) * 400.0)); + index++; + } + gridComponent->GetGridController()->JumpTo(9); + renderGrid_->PerformLayout(); + ASSERT_TRUE(gridComponent->GetGridController()->GetCurrentIndex() == 6); + ASSERT_TRUE(NearEqual(gridComponent->GetGridController()->GetCurrentPosition(), 1200.0)); + index = 0; + for (const auto& item : renderGrid_->GetChildren()) { + ASSERT_TRUE(item->GetPosition() == Offset(index / 2 * 400.0 - 1200.0, (index % 2) * 400.0)); + index++; + } + gridComponent->GetGridController()->JumpTo(0.0); + renderGrid_->PerformLayout(); + ASSERT_TRUE(gridComponent->GetGridController()->GetCurrentIndex() == 0); + ASSERT_TRUE(NearEqual(gridComponent->GetGridController()->GetCurrentPosition(), 0.0)); +} + +/** + * @tc.name: RenderGridTest030 + * @tc.desc: Verify Grid JumpTo and AnimateTo API when column direction and three columns. + * @tc.type: FUNC + * @tc.require: AR000DBI7J + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridTest, RenderGridTest030, TestSize.Level1) +{ + /** + * @tc.steps: step1. Create RenderGrid with 10 child by row direction and three columns. + * @tc.expected: step1. properties and children are set correctly. + */ + std::list> children; + RefPtr gridComponent = AceType::MakeRefPtr(children); + gridComponent->SetDirection(FlexDirection::COLUMN); + gridComponent->SetColumnCount(3); + gridComponent->SetWidth(900.0); + gridComponent->SetHeight(900.0); + gridComponent->GetGridController()->SetInitialIndex(3); + renderGrid_->Update(gridComponent); + for (int32_t i = 0; i < 10; ++i) { + RefPtr box = GridTestUtils::CreateRenderBox(300.0, 450.0); + box->Attach(mockContext_); + renderGrid_->AddChild(box); + } + ASSERT_TRUE(gridComponent->GetGridController()->GetInitialIndex() == 3); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties and children are calculated correctly. + */ + renderGrid_->PerformLayout(); + ASSERT_TRUE(renderGrid_->GetChildren().size() == 10); + ASSERT_TRUE(gridComponent->GetGridController()->GetCurrentIndex() == 3); + ASSERT_TRUE(NearEqual(gridComponent->GetGridController()->GetCurrentPosition(), 450.0)); + int32_t index = 0; + for (const auto& item : renderGrid_->GetChildren()) { + ASSERT_TRUE(item->GetPosition() == Offset((index % 3) * 300.0, index / 3 * 450.0 - 450.0)); + index++; + } + gridComponent->GetGridController()->JumpTo(899.0); + renderGrid_->PerformLayout(); + ASSERT_TRUE(gridComponent->GetGridController()->GetCurrentIndex() == 3); + ASSERT_TRUE(NearEqual(gridComponent->GetGridController()->GetCurrentPosition(), 899.0)); + index = 0; + for (const auto& item : renderGrid_->GetChildren()) { + ASSERT_TRUE(item->GetPosition() == Offset((index % 3) * 300.0, index / 3 * 450.0 - 899.0)); + index++; + } + gridComponent->GetGridController()->JumpTo(9); + renderGrid_->PerformLayout(); + ASSERT_TRUE(gridComponent->GetGridController()->GetCurrentIndex() == 6); + ASSERT_TRUE(NearEqual(gridComponent->GetGridController()->GetCurrentPosition(), 900.0)); + index = 0; + for (const auto& item : renderGrid_->GetChildren()) { + ASSERT_TRUE(item->GetPosition() == Offset((index % 3) * 300.0, index / 3 * 450.0 - 900.0)); + index++; + } + gridComponent->GetGridController()->JumpTo(0.0); + renderGrid_->PerformLayout(); + ASSERT_TRUE(gridComponent->GetGridController()->GetCurrentIndex() == 0); + ASSERT_TRUE(NearEqual(gridComponent->GetGridController()->GetCurrentPosition(), 0.0)); +} + +/** + * @tc.name: RenderGridTest031 + * @tc.desc: Verify Grid JumpTo and AnimateTo API when row reverse direction and four columns. + * @tc.type: FUNC + * @tc.require: AR000DBI7J + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridTest, RenderGridTest031, TestSize.Level1) +{ + /** + * @tc.steps: step1. Create RenderGrid with 10 child by row reverse direction and four columns. + * @tc.expected: step1. properties and children are set correctly. + */ + std::list> children; + RefPtr gridComponent = AceType::MakeRefPtr(children); + gridComponent->SetDirection(FlexDirection::ROW_REVERSE); + gridComponent->SetColumnCount(4); + gridComponent->SetWidth(1000.0); + gridComponent->SetHeight(1000.0); + gridComponent->GetGridController()->SetInitialIndex(4); + renderGrid_->Update(gridComponent); + for (int32_t i = 0; i < 10; ++i) { + renderGrid_->AddChild(GridTestUtils::CreateRenderItem(500.0, 250.0, 3, mockContext_)); + } + ASSERT_TRUE(gridComponent->GetGridController()->GetInitialIndex() == 4); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties and children are calculated correctly. + */ + renderGrid_->PerformLayout(); + ASSERT_TRUE(renderGrid_->GetChildren().size() == 10); + ASSERT_TRUE(gridComponent->GetGridController()->GetCurrentIndex() == 4); + ASSERT_TRUE(NearEqual(gridComponent->GetGridController()->GetCurrentPosition(), -1000.0)); + int32_t index = 0; + for (const auto& item : renderGrid_->GetChildren()) { + ASSERT_TRUE(item->GetPosition() == Offset(500.0 - index / 2 * 500.0 + 1000.0, (index % 2) * 750.0)); + index++; + } + gridComponent->GetGridController()->JumpTo(-1499.0); + renderGrid_->PerformLayout(); + ASSERT_TRUE(gridComponent->GetGridController()->GetCurrentIndex() == 4); + ASSERT_TRUE(NearEqual(gridComponent->GetGridController()->GetCurrentPosition(), -1499.0)); + index = 0; + for (const auto& item : renderGrid_->GetChildren()) { + ASSERT_TRUE(item->GetPosition() == Offset(500.0 - index / 2 * 500.0 + 1499.0, (index % 2) * 750.0)); + index++; + } + gridComponent->GetGridController()->JumpTo(9); + renderGrid_->PerformLayout(); + ASSERT_TRUE(gridComponent->GetGridController()->GetCurrentIndex() == 6); + ASSERT_TRUE(NearEqual(gridComponent->GetGridController()->GetCurrentPosition(), -1500.0)); + index = 0; + for (const auto& item : renderGrid_->GetChildren()) { + ASSERT_TRUE(item->GetPosition() == Offset(500.0 - index / 2 * 500.0 + 1500.0, (index % 2) * 750.0)); + index++; + } + gridComponent->GetGridController()->JumpTo(0.0); + renderGrid_->PerformLayout(); + ASSERT_TRUE(gridComponent->GetGridController()->GetCurrentIndex() == 0); + ASSERT_TRUE(NearEqual(gridComponent->GetGridController()->GetCurrentPosition(), 0.0)); +} + +/** + * @tc.name: RenderGridTest032 + * @tc.desc: Verify Grid JumpTo and AnimateTo API when column reverse direction and three columns. + * @tc.type: FUNC + * @tc.require: AR000DBI7J + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridTest, RenderGridTest032, TestSize.Level1) +{ + /** + * @tc.steps: step1. Create RenderGrid with 10 child by column reverse direction and three columns. + * @tc.expected: step1. properties and children are set correctly. + */ + std::list> children; + RefPtr gridComponent = AceType::MakeRefPtr(children); + gridComponent->SetDirection(FlexDirection::COLUMN_REVERSE); + gridComponent->SetColumnCount(3); + gridComponent->SetWidth(900.0); + gridComponent->SetHeight(900.0); + gridComponent->GetGridController()->SetInitialIndex(3); + renderGrid_->Update(gridComponent); + for (int32_t i = 0; i < 10; ++i) { + renderGrid_->AddChild(GridTestUtils::CreateRenderItem(300.0, 450.0, 2, mockContext_)); + } + ASSERT_TRUE(gridComponent->GetGridController()->GetInitialIndex() == 3); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties and children are calculated correctly. + */ + renderGrid_->PerformLayout(); + ASSERT_TRUE(renderGrid_->GetChildren().size() == 10); + ASSERT_TRUE(gridComponent->GetGridController()->GetCurrentIndex() == 2); + ASSERT_TRUE(NearEqual(gridComponent->GetGridController()->GetCurrentPosition(), -450.0)); + int32_t index = 0; + for (const auto& item : renderGrid_->GetChildren()) { + ASSERT_TRUE(item->GetPosition() == Offset((index % 2) * 600.0, 450.0 - index / 2 * 450.0 + 450.0)); + index++; + } + gridComponent->GetGridController()->JumpTo(-901.0); + renderGrid_->PerformLayout(); + ASSERT_TRUE(gridComponent->GetGridController()->GetCurrentIndex() == 4); + ASSERT_TRUE(NearEqual(gridComponent->GetGridController()->GetCurrentPosition(), -901.0)); + index = 0; + for (const auto& item : renderGrid_->GetChildren()) { + ASSERT_TRUE(item->GetPosition() == Offset((index % 2) * 600.0, 450.0 - index / 2 * 450.0 + 901.0)); + index++; + } + gridComponent->GetGridController()->AnimateTo(0, 200.0, Curves::LINEAR); + gridComponent->GetGridController()->AnimateTo(0.0, 300.0, Curves::SINE); + renderGrid_->PerformLayout(); + ASSERT_TRUE(gridComponent->GetGridController()->GetCurrentIndex() == 4); + ASSERT_TRUE(NearEqual(gridComponent->GetGridController()->GetCurrentPosition(), -901.0)); + index = 0; + for (const auto& item : renderGrid_->GetChildren()) { + ASSERT_TRUE(item->GetPosition() == Offset((index % 2) * 600.0, 450.0 - index / 2 * 450.0 + 901.0)); + index++; + } + gridComponent->GetGridController()->JumpTo(0.0); + renderGrid_->PerformLayout(); + ASSERT_TRUE(gridComponent->GetGridController()->GetCurrentIndex() == 0); + ASSERT_TRUE(NearEqual(gridComponent->GetGridController()->GetCurrentPosition(), 0.0)); +} + +/** + * @tc.name: RenderGridTest033 + * @tc.desc: Verify Grid Scroll Event can callback when event trigger. + * @tc.type: FUNC + * @tc.require: AR000DBI7J + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridTest, RenderGridTest033, TestSize.Level1) +{ + /** + * @tc.steps: step1. Create Event listener to receive Scroll event. + * @tc.expected: step1. Event listener create success. + */ + std::string scrollEventId = "grid_scroll_id"; + index_ = 0; + RefPtr eventHander = AceType::MakeRefPtr( + [this, scrollEventId](const std::string& eventId, const std::string& param) { + std::string scrollResult = std::string("\"scroll\",{\"scrollX\":") + .append(std::to_string(450.0 * (index_ % 3))) + .append(",\"scrollY\":") + .append(std::to_string(450.0 * (index_ % 3))) + .append(",\"scrollState\":") + .append(std::to_string(index_ % 3)) + .append("},null"); + EXPECT_EQ(param, scrollResult); + EXPECT_EQ(eventId, scrollEventId); + index_++; + }); + mockContext_->RegisterEventHandler(eventHander); + + /** + * @tc.steps: step2. Create RenderGrid and add 10 child by row Direction. + * @tc.expected: step2. Properties and children are calculated correctly. + */ + std::list> children; + RefPtr gridComponent = AceType::MakeRefPtr(children); + gridComponent->SetDirection(FlexDirection::ROW); + gridComponent->SetColumnCount(3); + gridComponent->SetWidth(900.0); + gridComponent->SetHeight(900.0); + gridComponent->SetOnScroll(EventMarker(scrollEventId)); + renderGrid_->Update(gridComponent); + for (int32_t i = 0; i < 10; ++i) { + renderGrid_->AddChild(GridTestUtils::CreateRenderItem(300.0, 450.0, 2, mockContext_)); + } + + /** + * @tc.steps: step2. Trigger scroll event by call grid API. + * @tc.expected: step2. scroll event triggered success. + */ + renderGrid_->PerformLayout(); + renderGrid_->HandleTouchDown(); + renderGrid_->UpdateOffset(Offset(450.0, 450.0)); + renderGrid_->HandleTouchUp(); + renderGrid_->UpdateOffset(Offset(900.0, 900.0)); + renderGrid_->HandleScrollEnd(); +} + +/** + * @tc.name: RenderGridTest034 + * @tc.desc: Verify Grid ScrollBottom Event can callback when event trigger. + * @tc.type: FUNC + * @tc.require: AR000DBI7J + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridTest, RenderGridTest034, TestSize.Level1) +{ + /** + * @tc.steps: step1. Create Event listener to receive ScrollBottom event. + * @tc.expected: step1. Event listener create success. + */ + std::string scrollEventId = "grid_scrollbottom_id"; + index_ = 0; + RefPtr eventHander = AceType::MakeRefPtr( + [this, scrollEventId](const std::string& eventId, const std::string& param) { + std::string ret = std::string("\"scrollbottom\",null"); + EXPECT_EQ(param, ret); + EXPECT_EQ(eventId, scrollEventId); + index_++; + }); + mockContext_->RegisterEventHandler(eventHander); + + /** + * @tc.steps: step2. Create RenderGrid and add 10 child by COLUMN Direction. + * @tc.expected: step2. Properties and children are calculated correctly. + */ + std::list> children; + RefPtr gridComponent = AceType::MakeRefPtr(children); + gridComponent->SetDirection(FlexDirection::COLUMN); + gridComponent->SetColumnCount(3); + gridComponent->SetWidth(900.0); + gridComponent->SetHeight(900.0); + gridComponent->SetOnScrollBottom(EventMarker(scrollEventId)); + renderGrid_->Update(gridComponent); + for (int32_t i = 0; i < 10; ++i) { + renderGrid_->AddChild(GridTestUtils::CreateRenderItem(300.0, 450.0, 1, mockContext_)); + } + + /** + * @tc.steps: step2. Trigger scrollbottom event by call grid API. + * @tc.expected: step2. scrollbottom event triggered success. + */ + renderGrid_->PerformLayout(); + renderGrid_->UpdateOffset(Offset(500.0, 500.0)); + renderGrid_->UpdateOffset(Offset(1350.0, 1350.0)); + renderGrid_->HandleScrollEnd(); +} + +/** + * @tc.name: RenderGridTest035 + * @tc.desc: Verify Grid ScrollTop Event can callback when event trigger. + * @tc.type: FUNC + * @tc.require: AR000DBI7J + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridTest, RenderGridTest035, TestSize.Level1) +{ + /** + * @tc.steps: step1. Create Event listener to receive ScrollTop event. + * @tc.expected: step1. Event listener create success. + */ + std::string scrollEventId = "grid_scrolltop_id"; + index_ = 0; + RefPtr eventHander = AceType::MakeRefPtr( + [this, scrollEventId](const std::string& eventId, const std::string& param) { + std::string ret = std::string("\"scrolltop\",null"); + EXPECT_EQ(param, ret); + EXPECT_EQ(eventId, scrollEventId); + index_++; + }); + mockContext_->RegisterEventHandler(eventHander); + + /** + * @tc.steps: step2. Create RenderGrid and add 10 child by ROW_REVERSE Direction. + * @tc.expected: step2. Properties and children are calculated correctly. + */ + std::list> children; + RefPtr gridComponent = AceType::MakeRefPtr(children); + gridComponent->SetDirection(FlexDirection::ROW_REVERSE); + gridComponent->SetColumnCount(3); + gridComponent->SetWidth(900.0); + gridComponent->SetHeight(900.0); + gridComponent->SetOnScrollTop(EventMarker(scrollEventId)); + renderGrid_->Update(gridComponent); + for (int32_t i = 0; i < 10; ++i) { + renderGrid_->AddChild(GridTestUtils::CreateRenderItem(300.0, 450.0, 1, mockContext_)); + } + + /** + * @tc.steps: step2. Trigger scrolltop event by call grid API. + * @tc.expected: step2. scrolltop event triggered success. + */ + renderGrid_->PerformLayout(); + renderGrid_->UpdateOffset(Offset(-100.0, -100.0)); + renderGrid_->UpdateOffset(Offset(100.0, 100.0)); + renderGrid_->HandleScrollEnd(); +} + +/** + * @tc.name: RenderGridTest036 + * @tc.desc: Verify Grid ScrollEnd Event can callback when event trigger. + * @tc.type: FUNC + * @tc.require: AR000DBI7J + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridTest, RenderGridTest036, TestSize.Level1) +{ + /** + * @tc.steps: step1. Create Event listener to receive ScrollEnd event. + * @tc.expected: step1. Event listener create success. + */ + std::string scrollEventId = "grid_scrollend_id"; + index_ = 0; + RefPtr eventHander = AceType::MakeRefPtr( + [this, scrollEventId](const std::string& eventId, const std::string& param) { + std::string ret = std::string("\"scrollend\",null"); + EXPECT_EQ(param, ret); + EXPECT_EQ(eventId, scrollEventId); + index_++; + }); + mockContext_->RegisterEventHandler(eventHander); + + /** + * @tc.steps: step2. Create RenderGrid and add 10 child by COLUMN_REVERSE Direction. + * @tc.expected: step2. Properties and children are calculated correctly. + */ + std::list> children; + RefPtr gridComponent = AceType::MakeRefPtr(children); + gridComponent->SetDirection(FlexDirection::COLUMN_REVERSE); + gridComponent->SetColumnCount(3); + gridComponent->SetWidth(900.0); + gridComponent->SetHeight(900.0); + gridComponent->SetOnScrollEnd(EventMarker(scrollEventId)); + renderGrid_->Update(gridComponent); + for (int32_t i = 0; i < 10; ++i) { + renderGrid_->AddChild(GridTestUtils::CreateRenderItem(300.0, 450.0, 1, mockContext_)); + } + + /** + * @tc.steps: step2. Trigger scrollend event by call grid API. + * @tc.expected: step2. scrollend event triggered success. + */ + renderGrid_->PerformLayout(); + renderGrid_->HandleScrollEnd(); +} + +/** + * @tc.name: RenderGridTest037 + * @tc.desc: Verify Grid ScrollTouchUp Event can callback when event trigger. + * @tc.type: FUNC + * @tc.require: AR000DBI7J + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridTest, RenderGridTest037, TestSize.Level1) +{ + /** + * @tc.steps: step1. Create Event listener to receive ScrollTouchUp event. + * @tc.expected: step1. Event listener create success. + */ + std::string scrollEventId = "grid_scrolltouchup_id"; + index_ = 0; + RefPtr eventHander = AceType::MakeRefPtr( + [this, scrollEventId](const std::string& eventId, const std::string& param) { + std::string ret = std::string("\"scrolltouchup\",null"); + EXPECT_EQ(param, ret); + EXPECT_EQ(eventId, scrollEventId); + index_++; + }); + mockContext_->RegisterEventHandler(eventHander); + + /** + * @tc.steps: step2. Create RenderGrid and add 10 child by COLUMN Direction. + * @tc.expected: step2. Properties and children are calculated correctly. + */ + std::list> children; + RefPtr gridComponent = AceType::MakeRefPtr(children); + gridComponent->SetDirection(FlexDirection::COLUMN); + gridComponent->SetColumnCount(3); + gridComponent->SetWidth(900.0); + gridComponent->SetHeight(900.0); + gridComponent->SetOnScrollTouchUp(EventMarker(scrollEventId)); + renderGrid_->Update(gridComponent); + for (int32_t i = 0; i < 10; ++i) { + renderGrid_->AddChild(GridTestUtils::CreateRenderItem(300.0, 450.0, 1, mockContext_)); + } + + /** + * @tc.steps: step2. Trigger scrolltouchup event by call grid API. + * @tc.expected: step2. scrolltouchup event triggered success. + */ + renderGrid_->PerformLayout(); + renderGrid_->HandleTouchDown(); + renderGrid_->UpdateOffset(Offset(450.0, 450.0)); + renderGrid_->HandleTouchUp(); + renderGrid_->UpdateOffset(Offset(900.0, 900.0)); +} + +/** + * @tc.name: RenderGridTest038 + * @tc.desc: Verify Grid can obtain and lost focus when row direction. + * @tc.type: FUNC + * @tc.require: AR000DHJ5P + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridTest, RenderGridTest038, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct RenderGrid with multi children by row direction. + * @tc.expected: step1. properties and children are set correctly. + */ + renderGrid_ = GridTestUtils::InitRenderGridDiffSpan(FlexDirection::ROW, mockContext_); + renderGrid_->PerformLayout(); + ASSERT_TRUE(renderGrid_->GetLayoutSize() == Size(750.0, 750.0)); + ASSERT_TRUE(renderGrid_->GetFocusState() == false); + ASSERT_TRUE(renderGrid_->GetFocusIndex() == -1); + ASSERT_TRUE(renderGrid_->GetChildren().size() == 9); + + /** + * @tc.steps: step2. Trigger Focus Move RIGHT event to Grid. + * @tc.expected: step2. Focus cand obtain and lost success. + */ + ASSERT_TRUE(renderGrid_->RequestNextFocus(false, false, Offset(-150.0, 150.0)) == 0); // RIGHT + renderGrid_->HandleOnFocus(0); + ASSERT_TRUE(renderGrid_->RequestNextFocus(false, false, Offset(150.0, 150.0)) == 2); // RIGHT + ASSERT_TRUE(renderGrid_->RequestNextFocus(false, false, Offset(450.0, 150.0)) == 5); // RIGHT + renderGrid_->PerformLayout(); + ASSERT_TRUE(GridTestUtils::GetChildPosition(renderGrid_, 5) == Offset(450.0, 0.0)); // Move Visible + ASSERT_TRUE(renderGrid_->RequestNextFocus(false, false, Offset(675.0, 250.0)) == 7); // RIGHT + renderGrid_->PerformLayout(); + ASSERT_TRUE(GridTestUtils::GetChildPosition(renderGrid_, 7) == Offset(450.0, 0.0)); // Move Visible + ASSERT_TRUE(renderGrid_->RequestNextFocus(false, false, Offset(675.0, 150.0)) == -1); // RIGHT + renderGrid_->HandleOnBlur(); + renderGrid_->JumpTo(0); + renderGrid_->PerformLayout(); + + /** + * @tc.steps: step3. Trigger Focus Move DOWN event to Grid. + * @tc.expected: step3. Focus cand obtain and lost success. + */ + ASSERT_TRUE(renderGrid_->RequestNextFocus(true, false, Offset(450.0, -125.0)) == 2); // DOWN + renderGrid_->HandleOnFocus(2); + ASSERT_TRUE(renderGrid_->RequestNextFocus(true, false, Offset(450.0, 125.0)) == 3); // DOWN + ASSERT_TRUE(renderGrid_->RequestNextFocus(true, false, Offset(450.0, 375.0)) == 4); // DOWN + ASSERT_TRUE(renderGrid_->RequestNextFocus(true, false, Offset(450.0, 625.0)) == -1); // DOWN + renderGrid_->HandleOnBlur(); + + /** + * @tc.steps: step4. Trigger Focus Move LEFT event to Grid. + * @tc.expected: step4. Focus cand obtain and lost success. + */ + ASSERT_TRUE(renderGrid_->RequestNextFocus(false, true, Offset(950.0, 375.0)) == 8); // LEFT + renderGrid_->HandleOnFocus(8); + ASSERT_TRUE(renderGrid_->RequestNextFocus(false, true, Offset(900.0, 375.0)) == 5); // LEFT + ASSERT_TRUE(renderGrid_->RequestNextFocus(false, true, Offset(750.0, 300.0)) == 2); // LEFT + ASSERT_TRUE(renderGrid_->RequestNextFocus(false, true, Offset(450.0, 375.0)) == 0); // LEFT + ASSERT_TRUE(renderGrid_->RequestNextFocus(false, true, Offset(150.0, 375.0)) == -1); // LEFT + renderGrid_->HandleOnBlur(); + + /** + * @tc.steps: step5. Trigger Focus Move UP event to Grid. + * @tc.expected: step5. Focus cand obtain and lost success. + */ + ASSERT_TRUE(renderGrid_->RequestNextFocus(true, true, Offset(750.0, 800.0)) == 6); // UP + renderGrid_->HandleOnFocus(6); + ASSERT_TRUE(renderGrid_->RequestNextFocus(true, true, Offset(750.0, 625.0)) == 5); // UP + ASSERT_TRUE(renderGrid_->RequestNextFocus(true, true, Offset(750.0, 250.0)) == -1); // UP + renderGrid_->HandleOnBlur(); + ASSERT_TRUE(renderGrid_->GetFocusState() == false); + ASSERT_TRUE(renderGrid_->GetFocusIndex() == 5); +} + +/** + * @tc.name: RenderGridTest039 + * @tc.desc: Verify Grid can obtain and lost focus when column direction. + * @tc.type: FUNC + * @tc.require: AR000DHJ5P + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridTest, RenderGridTest039, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct RenderGrid with multi children by column direction. + * @tc.expected: step1. properties and children are set correctly. + */ + renderGrid_ = GridTestUtils::InitRenderGridDiffSpan(FlexDirection::COLUMN, mockContext_); + renderGrid_->PerformLayout(); + ASSERT_TRUE(renderGrid_->GetLayoutSize() == Size(750.0, 750.0)); + ASSERT_TRUE(renderGrid_->GetFocusState() == false); + ASSERT_TRUE(renderGrid_->GetFocusIndex() == -1); + ASSERT_TRUE(renderGrid_->GetChildren().size() == 9); + + /** + * @tc.steps: step2. Trigger Focus Move RIGHT event to Grid. + * @tc.expected: step2. Focus cand obtain and lost success. + */ + ASSERT_TRUE(renderGrid_->RequestNextFocus(false, false, Offset(-125.0, 1050.0)) == 5); // RIGHT + renderGrid_->HandleOnFocus(5); + ASSERT_TRUE(renderGrid_->RequestNextFocus(false, false, Offset(250.0, 750.0)) == 6); // RIGHT + ASSERT_TRUE(renderGrid_->RequestNextFocus(false, false, Offset(625.0, 750.0)) == -1); // RIGHT + renderGrid_->HandleOnBlur(); + + /** + * @tc.steps: step3. Trigger Focus Move DOWN event to Grid. + * @tc.expected: step3. Focus cand obtain and lost success. + */ + ASSERT_TRUE(renderGrid_->RequestNextFocus(true, false, Offset(375.0, -150.0)) == 1); // DOWN + renderGrid_->HandleOnFocus(1); + ASSERT_TRUE(renderGrid_->RequestNextFocus(true, false, Offset(375.0, 150.0)) == 3); // DOWN + ASSERT_TRUE(renderGrid_->RequestNextFocus(true, false, Offset(375.0, 450.0)) == 5); // DOWN + ASSERT_TRUE(renderGrid_->RequestNextFocus(true, false, Offset(250.0, 750.0)) == 7); // DOWN + ASSERT_TRUE(renderGrid_->RequestNextFocus(true, false, Offset(125.0, 800.0)) == -1); // DOWN + renderGrid_->HandleOnBlur(); + + /** + * @tc.steps: step4. Trigger Focus Move LEFT event to Grid. + * @tc.expected: step4. Focus cand obtain and lost success. + */ + ASSERT_TRUE(renderGrid_->RequestNextFocus(false, true, Offset(900.0, 450.0)) == 4); // LEFT + renderGrid_->HandleOnFocus(4); + ASSERT_TRUE(renderGrid_->RequestNextFocus(false, true, Offset(625.0, 450.0)) == 3); // LEFT + ASSERT_TRUE(renderGrid_->RequestNextFocus(false, true, Offset(375.0, 450.0)) == 2); // LEFT + ASSERT_TRUE(renderGrid_->RequestNextFocus(false, true, Offset(125.0, 450.0)) == -1); // LEFT + renderGrid_->HandleOnBlur(); + + /** + * @tc.steps: step5. Trigger Focus Move UP event to Grid. + * @tc.expected: step5. Focus cand obtain and lost success. + */ + renderGrid_->PerformLayout(); + renderGrid_->JumpTo(0); + renderGrid_->PerformLayout(); + ASSERT_TRUE(renderGrid_->RequestNextFocus(true, true, Offset(125.0, 1200.0)) == 7); // UP + renderGrid_->HandleOnFocus(7); + renderGrid_->PerformLayout(); + ASSERT_TRUE(GridTestUtils::GetChildPosition(renderGrid_, 7) == Offset(0.0, 450.0)); // Move Visible + ASSERT_TRUE(renderGrid_->RequestNextFocus(true, true, Offset(125.0, 1050.0)) == 5); // UP + ASSERT_TRUE(renderGrid_->RequestNextFocus(true, true, Offset(250.0, 750.0)) == 2); // UP + renderGrid_->PerformLayout(); + ASSERT_TRUE(GridTestUtils::GetChildPosition(renderGrid_, 2) == Offset(0.0, 0.0)); // Move Visible + ASSERT_TRUE(renderGrid_->RequestNextFocus(true, true, Offset(125.0, 450.0)) == 0); // UP + renderGrid_->PerformLayout(); + ASSERT_TRUE(GridTestUtils::GetChildPosition(renderGrid_, 0) == Offset(0.0, 0.0)); // Move Visible + ASSERT_TRUE(renderGrid_->RequestNextFocus(true, true, Offset(125.0, 150.0)) == -1); // UP + renderGrid_->HandleOnBlur(); + ASSERT_TRUE(renderGrid_->GetFocusState() == false); + ASSERT_TRUE(renderGrid_->GetFocusIndex() == 0); +} + +/** + * @tc.name: RenderGridTest040 + * @tc.desc: Verify Grid can obtain and lost focus when row reverse direction. + * @tc.type: FUNC + * @tc.require: AR000DHJ5P + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridTest, RenderGridTest040, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct RenderGrid with multi children by row reverse direction. + * @tc.expected: step1. properties and children are set correctly. + */ + renderGrid_ = GridTestUtils::InitRenderGridDiffSpan(FlexDirection::ROW_REVERSE, mockContext_); + renderGrid_->PerformLayout(); + ASSERT_TRUE(renderGrid_->GetLayoutSize() == Size(750.0, 750.0)); + ASSERT_TRUE(renderGrid_->GetFocusState() == false); + ASSERT_TRUE(renderGrid_->GetFocusIndex() == -1); + ASSERT_TRUE(renderGrid_->GetChildren().size() == 9); + + /** + * @tc.steps: step2. Trigger Focus Move RIGHT event to Grid. + * @tc.expected: step2. Focus cand obtain and lost success. + */ + ASSERT_TRUE(renderGrid_->RequestNextFocus(false, false, Offset(-500.0, 375.0)) == 8); // RIGHT + renderGrid_->HandleOnFocus(8); + ASSERT_TRUE(renderGrid_->RequestNextFocus(false, false, Offset(-300.0, 375.0)) == 5); // RIGHT + ASSERT_TRUE(renderGrid_->RequestNextFocus(false, false, Offset(0.0, 375.0)) == 2); // RIGHT + ASSERT_TRUE(renderGrid_->RequestNextFocus(false, false, Offset(300.0, 375.0)) == 0); // RIGHT + ASSERT_TRUE(renderGrid_->RequestNextFocus(false, false, Offset(600.0, 375.0)) == -1); // RIGHT + renderGrid_->HandleOnBlur(); + renderGrid_->PerformLayout(); + renderGrid_->JumpTo(0); + renderGrid_->PerformLayout(); + + /** + * @tc.steps: step3. Trigger Focus Move DOWN event to Grid. + * @tc.expected: step3. Focus cand obtain and lost success. + */ + ASSERT_TRUE(renderGrid_->RequestNextFocus(true, false, Offset(-300.0, -125.0)) == 5); // DOWN + renderGrid_->PerformLayout(); + renderGrid_->HandleOnFocus(5); + ASSERT_TRUE(GridTestUtils::GetChildPosition(renderGrid_, 5) == Offset(0.0, 0.0)); // Move Visible + ASSERT_TRUE(renderGrid_->RequestNextFocus(true, false, Offset(0.0, 250.0)) == 6); // DOWN + ASSERT_TRUE(renderGrid_->RequestNextFocus(true, false, Offset(0.0, 625.0)) == -1); // DOWN + ASSERT_TRUE(renderGrid_->GetFocusState() == true); + ASSERT_TRUE(renderGrid_->GetFocusIndex() == 6); + renderGrid_->HandleOnBlur(); + + /** + * @tc.steps: step4. Trigger Focus Move LEFT event to Grid. + * @tc.expected: step4. Focus cand obtain and lost success. + */ + ASSERT_TRUE(renderGrid_->RequestNextFocus(false, true, Offset(900.0, 500.0)) == 1); // LEFT + renderGrid_->HandleOnFocus(1); + ASSERT_TRUE(renderGrid_->RequestNextFocus(false, true, Offset(600.0, 500.0)) == 3); // LEFT + ASSERT_TRUE(renderGrid_->RequestNextFocus(false, true, Offset(300.0, 375.0)) == 5); // LEFT + ASSERT_TRUE(renderGrid_->RequestNextFocus(false, true, Offset(0.0, 250.0)) == 7); // LEFT + ASSERT_TRUE(renderGrid_->RequestNextFocus(false, true, Offset(-300.0, 125.0)) == -1); // LEFT + renderGrid_->HandleOnBlur(); + + /** + * @tc.steps: step5. Trigger Focus Move UP event to Grid. + * @tc.expected: step5. Focus cand obtain and lost success. + */ + ASSERT_TRUE(renderGrid_->RequestNextFocus(true, true, Offset(750.0, 900.0)) == 1); // UP + renderGrid_->HandleOnFocus(1); + ASSERT_TRUE(renderGrid_->RequestNextFocus(true, true, Offset(600.0, 500.0)) == 0); // UP + ASSERT_TRUE(renderGrid_->RequestNextFocus(true, true, Offset(600.0, 125.0)) == -1); // UP + renderGrid_->HandleOnBlur(); + ASSERT_TRUE(renderGrid_->GetFocusState() == false); + ASSERT_TRUE(renderGrid_->GetFocusIndex() == 0); +} + +/** + * @tc.name: RenderGridTest041 + * @tc.desc: Verify Grid can obtain and lost focus when column reverse direction and diff span. + * @tc.type: FUNC + * @tc.require: AR000DHJ5P + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridTest, RenderGridTest041, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct RenderGrid with multi children by column reverse direction and diff span. + * @tc.expected: step1. properties and children are set correctly. + */ + renderGrid_ = GridTestUtils::InitRenderGridDiffSpan(FlexDirection::COLUMN_REVERSE, mockContext_); + renderGrid_->PerformLayout(); + ASSERT_TRUE(renderGrid_->GetLayoutSize() == Size(750.0, 750.0)); + ASSERT_TRUE(renderGrid_->GetFocusState() == false); + ASSERT_TRUE(renderGrid_->GetFocusIndex() == -1); + ASSERT_TRUE(renderGrid_->GetChildren().size() == 9); + + /** + * @tc.steps: step2. Trigger Focus Move RIGHT event to Grid. + * @tc.expected: step2. Focus cand obtain and lost success. + */ + ASSERT_TRUE(renderGrid_->RequestNextFocus(false, false, Offset(-125.0, 300.0)) == 2); // RIGHT + renderGrid_->HandleOnFocus(2); + ASSERT_TRUE(renderGrid_->RequestNextFocus(false, false, Offset(125.0, 300.0)) == 3); // RIGHT + ASSERT_TRUE(renderGrid_->RequestNextFocus(false, false, Offset(375, 300.0)) == 4); // RIGHT + ASSERT_TRUE(renderGrid_->RequestNextFocus(false, false, Offset(625.0, 300.0)) == -1); // RIGHT + renderGrid_->HandleOnBlur(); + + /** + * @tc.steps: step3. Trigger Focus Move DOWN event to Grid. + * @tc.expected: step3. Focus cand obtain and lost success. + */ + ASSERT_TRUE(renderGrid_->RequestNextFocus(true, false, Offset(125.0, -600.0)) == 7); // DOWN + renderGrid_->PerformLayout(); + renderGrid_->HandleOnFocus(7); + ASSERT_TRUE(GridTestUtils::GetChildPosition(renderGrid_, 7) == Offset(0.0, 0.0)); // Move Visible + ASSERT_TRUE(renderGrid_->RequestNextFocus(true, false, Offset(125.0, -300.0)) == 5); // DOWN + ASSERT_TRUE(renderGrid_->RequestNextFocus(true, false, Offset(125.0, 0.0)) == 2); // DOWN + renderGrid_->PerformLayout(); + ASSERT_TRUE(GridTestUtils::GetChildPosition(renderGrid_, 2) == Offset(0.0, 450.0)); // Move Visible + ASSERT_TRUE(renderGrid_->RequestNextFocus(true, false, Offset(125.0, 300.0)) == 0); // DOWN + renderGrid_->PerformLayout(); + ASSERT_TRUE(GridTestUtils::GetChildPosition(renderGrid_, 0) == Offset(0.0, 450.0)); // Move Visible + ASSERT_TRUE(renderGrid_->RequestNextFocus(true, false, Offset(125.0, 600.0)) == -1); // DOWN + renderGrid_->HandleOnBlur(); + + /** + * @tc.steps: step4. Trigger Focus Move LEFT event to Grid. + * @tc.expected: step4. Focus cand obtain and lost success. + */ + ASSERT_TRUE(renderGrid_->RequestNextFocus(false, true, Offset(800.0, 0.0)) == 6); // LEFT + renderGrid_->HandleOnFocus(6); + ASSERT_TRUE(renderGrid_->RequestNextFocus(false, true, Offset(625.0, 0.0)) == 5); // LEFT + ASSERT_TRUE(renderGrid_->RequestNextFocus(false, true, Offset(250.0, 0.0)) == -1); // LEFT + renderGrid_->HandleOnBlur(); + + /** + * @tc.steps: step5. Trigger Focus Move UP event to Grid. + * @tc.expected: step5. Focus cand obtain and lost success. + */ + ASSERT_TRUE(renderGrid_->RequestNextFocus(true, true, Offset(500.0, 900.0)) == 1); // UP + renderGrid_->HandleOnFocus(1); + ASSERT_TRUE(renderGrid_->RequestNextFocus(true, true, Offset(500.0, 600.0)) == 3); // UP + ASSERT_TRUE(renderGrid_->RequestNextFocus(true, true, Offset(375.0, 300.0)) == 5); // UP + ASSERT_TRUE(renderGrid_->RequestNextFocus(true, true, Offset(250.0, 0.0)) == 7); // UP + ASSERT_TRUE(renderGrid_->RequestNextFocus(true, true, Offset(125.0, -300.0)) == -1); // UP + ASSERT_TRUE(renderGrid_->GetFocusState() == true); + ASSERT_TRUE(renderGrid_->GetFocusIndex() == 7); + renderGrid_->HandleOnBlur(); + ASSERT_TRUE(renderGrid_->GetFocusState() == false); + ASSERT_TRUE(renderGrid_->GetFocusIndex() == 7); +} + +/** + * @tc.name: RenderGridTest042 + * @tc.desc: Verify Grid can obtain and lost focus when column direction and same span. + * @tc.type: FUNC + * @tc.require: AR000DHJ5P + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridTest, RenderGridTest042, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct RenderGrid with multi children by column reverse direction. + * @tc.expected: step1. properties and children are set correctly. + */ + renderGrid_ = GridTestUtils::InitRenderGridSameSpan(FlexDirection::COLUMN, mockContext_); + renderGrid_->PerformLayout(); + ASSERT_TRUE(renderGrid_->GetLayoutSize() == Size(800.0, 800.0)); + ASSERT_TRUE(renderGrid_->GetFocusState() == false); + ASSERT_TRUE(renderGrid_->GetFocusIndex() == -1); + ASSERT_TRUE(renderGrid_->GetChildren().size() == 16); + + /** + * @tc.steps: step2. Trigger Focus Move up/down/left/right event to Grid. + * @tc.expected: step2. Focus cand obtain and lost success. + */ + ASSERT_TRUE(renderGrid_->RequestNextFocus(false, false, Offset(-100.0, 300.0)) == 4); // RIGHT + renderGrid_->HandleOnFocus(4); + ASSERT_TRUE(renderGrid_->RequestNextFocus(false, false, Offset(0.0, 0.0)) == 5); // RIGHT + ASSERT_TRUE(renderGrid_->RequestNextFocus(true, false, Offset(0.0, 0.0)) == 9); // DOWN + ASSERT_TRUE(renderGrid_->RequestNextFocus(false, true, Offset(0.0, 0.0)) == 8); // LEFT + ASSERT_TRUE(renderGrid_->RequestNextFocus(true, true, Offset(0.0, 0.0)) == 4); // UP + ASSERT_TRUE(renderGrid_->RequestNextFocus(false, true, Offset(0.0, 0.0)) == -1); // LEFT + ASSERT_TRUE(renderGrid_->RequestNextFocus(true, false, Offset(0.0, 0.0)) == 8); // DOWN + ASSERT_TRUE(renderGrid_->RequestNextFocus(false, true, Offset(0.0, 0.0)) == -1); // LEFT + renderGrid_->HandleOnBlur(); + + ASSERT_TRUE(renderGrid_->RequestNextFocus(true, false, Offset(500.0, -100.0)) == 2); // DOWN + renderGrid_->HandleOnFocus(2); + ASSERT_TRUE(renderGrid_->RequestNextFocus(true, false, Offset(0.0, 0.0)) == 6); // DOWN + ASSERT_TRUE(renderGrid_->RequestNextFocus(true, false, Offset(0.0, 0.0)) == 10); // DOWN + ASSERT_TRUE(renderGrid_->RequestNextFocus(false, false, Offset(0.0, 0.0)) == 11); // RIGHT + ASSERT_TRUE(renderGrid_->RequestNextFocus(false, false, Offset(0.0, 0.0)) == -1); // RIGHT + renderGrid_->HandleOnBlur(); + + ASSERT_TRUE(renderGrid_->RequestNextFocus(false, true, Offset(900.0, 100.0)) == 3); // LEFT + renderGrid_->HandleOnFocus(3); + ASSERT_TRUE(renderGrid_->RequestNextFocus(false, true, Offset(0.0, 0.0)) == 2); // LEFT + ASSERT_TRUE(renderGrid_->RequestNextFocus(false, true, Offset(0.0, 0.0)) == 1); // LEFT + ASSERT_TRUE(renderGrid_->RequestNextFocus(false, true, Offset(0.0, 0.0)) == 0); // LEFT + ASSERT_TRUE(renderGrid_->RequestNextFocus(true, true, Offset(0.0, 0.0)) == -1); // UP + renderGrid_->HandleOnBlur(); + + ASSERT_TRUE(renderGrid_->RequestNextFocus(true, true, Offset(700.0, 900.0)) == 15); // UP + renderGrid_->HandleOnFocus(15); + ASSERT_TRUE(renderGrid_->RequestNextFocus(true, true, Offset(0.0, 0.0)) == 11); // UP + ASSERT_TRUE(renderGrid_->RequestNextFocus(false, true, Offset(0.0, 0.0)) == 10); // LEFT + ASSERT_TRUE(renderGrid_->RequestNextFocus(false, true, Offset(0.0, 0.0)) == 9); // LEFT + ASSERT_TRUE(renderGrid_->RequestNextFocus(true, false, Offset(0.0, 0.0)) == 13); // DOWN + ASSERT_TRUE(renderGrid_->RequestNextFocus(true, false, Offset(0.0, 0.0)) == -1); // DOWN + renderGrid_->HandleOnBlur(); + ASSERT_TRUE(renderGrid_->GetFocusState() == false); + ASSERT_TRUE(renderGrid_->GetFocusIndex() == 13); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/grid_layout/BUILD.gn b/frameworks/core/components/test/unittest/grid_layout/BUILD.gn new file mode 100644 index 00000000..ae63d3b1 --- /dev/null +++ b/frameworks/core/components/test/unittest/grid_layout/BUILD.gn @@ -0,0 +1,53 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +if (is_standard_system) { + module_output_path = "ace_engine_standard/backenduicomponent/gridlayout" +} + +ohos_unittest("RenderGridLayoutTest") { + module_out_path = module_output_path + + sources = [ + "$ace_root/frameworks/core/components/test/json/json_frontend.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/mock_render_common.cpp", + "grid_layout_test_utils.cpp", + "render_grid_layout_test.cpp", + ] + + configs = [ "$ace_root:ace_test_config" ] + + deps = [ + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "//third_party/googletest:gtest_main", + ] + + if (is_standard_system) { + configs += [ "//third_party/curl:curl_config" ] + deps += [ + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/curl:curl", + ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +group("unittest") { + testonly = true + deps = [ ":RenderGridLayoutTest" ] +} diff --git a/frameworks/core/components/test/unittest/grid_layout/grid_layout_test_utils.cpp b/frameworks/core/components/test/unittest/grid_layout/grid_layout_test_utils.cpp new file mode 100644 index 00000000..1b9ee12c --- /dev/null +++ b/frameworks/core/components/test/unittest/grid_layout/grid_layout_test_utils.cpp @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/unittest/grid_layout/grid_layout_test_utils.h" + +#include "core/components/box/box_component.h" +#include "core/components/grid_layout/grid_layout_component.h" + +namespace OHOS::Ace { + +void GridLayoutTestUtils::PrintNodeInfo(const RefPtr& node) +{ + if (!node) { + printf("ERROR: node is nullptr."); + return; + } + printf("Node Position(%lf %lf) Size(%lf %lf)\n", node->GetPosition().GetX(), node->GetPosition().GetY(), + node->GetLayoutSize().Width(), node->GetLayoutSize().Height()); +} + +RefPtr GridLayoutTestUtils::CreateComponent(FlexDirection direction, std::string rows, std::string cols) +{ + std::list> children; + RefPtr component = AceType::MakeRefPtr(children); + component->SetWidth(1080.0); + component->SetHeight(1080.0); + component->SetDirection(direction); + component->SetRowsArgs(rows); + component->SetColumnsArgs(cols); + return component; +} + +RefPtr GridLayoutTestUtils::CreateRenderItem(int32_t row, int32_t col, int32_t rowSpan, int32_t colSpan) +{ + RefPtr boxComponent = AceType::MakeRefPtr(); + RefPtr renderBox = AceType::MakeRefPtr(); + boxComponent->SetWidth(540.0); + boxComponent->SetHeight(540.0); + renderBox->Update(boxComponent); + RefPtr item = AceType::MakeRefPtr(); + item->SetRowIndex(row); + item->SetColumnIndex(col); + item->SetRowSpan(rowSpan); + item->SetColumnSpan(colSpan); + item->AddChild(renderBox); + return item; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/grid_layout/grid_layout_test_utils.h b/frameworks/core/components/test/unittest/grid_layout/grid_layout_test_utils.h new file mode 100644 index 00000000..b84210d3 --- /dev/null +++ b/frameworks/core/components/test/unittest/grid_layout/grid_layout_test_utils.h @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_GRID_LAYOUT_GRID_LAYOUT_TEST_UTILS_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_GRID_LAYOUT_GRID_LAYOUT_TEST_UTILS_H + +#include "core/components/box/render_box.h" +#include "core/components/grid_layout/render_grid_layout.h" +#include "core/components/grid_layout/render_grid_layout_item.h" + +namespace OHOS::Ace { +namespace { + +class MockRenderBox final : public RenderBox { + DECLARE_ACE_TYPE(MockRenderBox, RenderBox); + +public: + MockRenderBox() = default; + ~MockRenderBox() override = default; +}; + +class MockRenderGridLayoutItem final : public RenderGridLayoutItem { + DECLARE_ACE_TYPE(MockRenderGridLayoutItem, RenderGridLayoutItem); + +public: + MockRenderGridLayoutItem() = default; + ~MockRenderGridLayoutItem() override = default; +}; + +} // namespace + +class GridLayoutTestUtils { +public: + static void PrintNodeInfo(const RefPtr& node); + static RefPtr CreateComponent(FlexDirection direction, std::string rows, std::string cols); + static RefPtr CreateRenderItem(int32_t row, int32_t col, int32_t rowSpan, int32_t colSpan); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_GRID_LAYOUT_GRID_LAYOUT_TEST_UTILS_H diff --git a/frameworks/core/components/test/unittest/grid_layout/render_grid_layout_test.cpp b/frameworks/core/components/test/unittest/grid_layout/render_grid_layout_test.cpp new file mode 100644 index 00000000..6bb539d9 --- /dev/null +++ b/frameworks/core/components/test/unittest/grid_layout/render_grid_layout_test.cpp @@ -0,0 +1,1283 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "core/components/grid_layout/grid_layout_component.h" +#include "core/components/grid_layout/render_grid_layout.h" +#include "core/components/test/unittest/grid_layout/grid_layout_test_utils.h" +#include "core/components/test/unittest/mock/mock_render_common.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { + +class RenderGridLayoutTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; + + RefPtr mockContext_; + RefPtr renderNode_; + int32_t index_ = 0; +}; + +void RenderGridLayoutTest::SetUpTestCase() {} +void RenderGridLayoutTest::TearDownTestCase() {} + +void RenderGridLayoutTest::SetUp() +{ + mockContext_ = MockRenderCommon::GetMockContext(); + renderNode_ = AceType::MakeRefPtr(); + renderNode_->Attach(mockContext_); +} + +void RenderGridLayoutTest::TearDown() +{ + mockContext_ = nullptr; + renderNode_ = nullptr; +} + +/** + * @tc.name: RenderGridLayoutTest001 + * @tc.desc: Verify Grid Layout PerformLayout can calculate four children with row direction. + * @tc.type: FUNC + * @tc.require: AR000DQ1SO + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridLayoutTest, RenderGridLayoutTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct component and render with 4 child by row direction. + * @tc.expected: step1. properties and children are set correctly. + */ + std::string rowArgs = "1fr 50%"; + std::string colArgs = "50% 1fr"; + renderNode_->Update(GridLayoutTestUtils::CreateComponent(FlexDirection::ROW, rowArgs, colArgs)); + int32_t count = 4; + for (int32_t i = 0; i < count; ++i) { + RefPtr item = GridLayoutTestUtils::CreateRenderItem(-1, -1, 1, 1); + item->GetChildren().front()->Attach(mockContext_); + item->Attach(mockContext_); + renderNode_->AddChild(item); + } + ASSERT_TRUE(renderNode_->GetChildren().size() == 4); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties and children are calculated correctly. + */ + renderNode_->PerformLayout(); + ASSERT_TRUE(renderNode_->GetLayoutSize() == Size(1080.0, 1080.0)); + const std::list>& items = renderNode_->GetChildren(); + ASSERT_TRUE(items.size() == 4); + int32_t index = 0; + for (const auto& item : items) { + GridLayoutTestUtils::PrintNodeInfo(item); + ASSERT_TRUE(item->GetPosition() == Offset(index / 2 * 540.0, index % 2 * 540.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(540.0, 540.0)); + index++; + } +} + +/** + * @tc.name: RenderGridLayoutTest002 + * @tc.desc: Verify Grid Layout PerformLayout can calculate four children with column direction. + * @tc.type: FUNC + * @tc.require: AR000DQ1SO + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridLayoutTest, RenderGridLayoutTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct component and render with 4 child by column direction. + * @tc.expected: step1. properties and children are set correctly. + */ + std::string rowArgs = "1fr 1fr"; + std::string colArgs = "50% 50%"; + renderNode_->Update(GridLayoutTestUtils::CreateComponent(FlexDirection::COLUMN, rowArgs, colArgs)); + int32_t count = 4; + for (int32_t i = 0; i < count; ++i) { + RefPtr item = GridLayoutTestUtils::CreateRenderItem(0, 0, 1, 1); + item->GetChildren().front()->Attach(mockContext_); + item->Attach(mockContext_); + renderNode_->AddChild(item); + } + ASSERT_TRUE(renderNode_->GetChildren().size() == 4); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties and children are calculated correctly. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(800.0, 800.0)); + renderNode_->SetLayoutParam(layoutParam); + renderNode_->PerformLayout(); + ASSERT_TRUE(renderNode_->GetLayoutSize() == Size(800.0, 800.0)); + const std::list>& items = renderNode_->GetChildren(); + ASSERT_TRUE(items.size() == 4); + int32_t index = 0; + for (const auto& item : items) { + GridLayoutTestUtils::PrintNodeInfo(item); + ASSERT_TRUE(item->GetPosition() == Offset(index % 2 * 400.0, index / 2 * 400.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(400.0, 400.0)); + index++; + } +} + +/** + * @tc.name: RenderGridLayoutTest003 + * @tc.desc: Verify Grid Layout can Dynamic adjustment row count. + * @tc.type: FUNC + * @tc.require: AR000DQ1SO + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridLayoutTest, RenderGridLayoutTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct component and render with 4 child by row direction. + * @tc.expected: step1. properties and children are set correctly. + */ + std::string rowArgs = "1fr 540px"; + std::string colArgs = "540px 50%"; + renderNode_->Update(GridLayoutTestUtils::CreateComponent(FlexDirection::ROW, rowArgs, colArgs)); + int32_t count = 4; + for (int32_t i = 0; i < count; ++i) { + RefPtr item = GridLayoutTestUtils::CreateRenderItem(0, 0, 1, 1); + item->GetChildren().front()->Attach(mockContext_); + item->Attach(mockContext_); + renderNode_->AddChild(item); + } + ASSERT_TRUE(renderNode_->GetChildren().size() == 4); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties and children are calculated correctly. + */ + renderNode_->PerformLayout(); + ASSERT_TRUE(renderNode_->GetLayoutSize() == Size(1080.0, 1080.0)); + const std::list>& items = renderNode_->GetChildren(); + ASSERT_TRUE(items.size() == 4); + int32_t index = 0; + for (const auto& item : items) { + GridLayoutTestUtils::PrintNodeInfo(item); + ASSERT_TRUE(item->GetPosition() == Offset(index / 2 * 540.0, index % 2 * 540.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(540.0, 540.0)); + index++; + } + + /** + * @tc.steps: step3. adjustment row count and trigger the relayout. + * @tc.expected: step2. Properties and children are calculated correctly. + */ + rowArgs = ""; + colArgs = "540px 540px"; + renderNode_->Update(GridLayoutTestUtils::CreateComponent(FlexDirection::ROW, rowArgs, colArgs)); + renderNode_->PerformLayout(); + ASSERT_TRUE(renderNode_->GetLayoutSize() == Size(1080.0, 1080.0)); + index = 0; + for (const auto& item : renderNode_->GetChildren()) { + GridLayoutTestUtils::PrintNodeInfo(item); + if (index < 2) { + ASSERT_TRUE(item->GetPosition() == Offset(index % 2 * 540.0, 270.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(540.0, 540.0)); + } else { + ASSERT_TRUE(item->GetPosition() == Offset(0.0, 0.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(0.0, 0.0)); + } + index++; + } +} + +/** + * @tc.name: RenderGridLayoutTest004 + * @tc.desc: Verify Grid Layout can Dynamic adjustment column count. + * @tc.type: FUNC + * @tc.require: AR000DQ1SO + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridLayoutTest, RenderGridLayoutTest004, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct component and render with 9 child by column direction. + * @tc.expected: step1. properties and children are set correctly. + */ + std::string rowArgs = "1fr 360px 1fr"; + std::string colArgs = "360px 1fr 360px"; + renderNode_->Update(GridLayoutTestUtils::CreateComponent(FlexDirection::COLUMN, rowArgs, colArgs)); + int32_t count = 9; + for (int32_t i = 0; i < count; ++i) { + RefPtr item = GridLayoutTestUtils::CreateRenderItem(-1, -1, 1, 1); + item->GetChildren().front()->Attach(mockContext_); + item->Attach(mockContext_); + renderNode_->AddChild(item); + } + ASSERT_TRUE(renderNode_->GetChildren().size() == 9); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties and children are calculated correctly. + */ + renderNode_->PerformLayout(); + ASSERT_TRUE(renderNode_->GetLayoutSize() == Size(1080.0, 1080.0)); + const std::list>& items = renderNode_->GetChildren(); + ASSERT_TRUE(items.size() == 9); + int32_t index = 0; + for (const auto& item : items) { + GridLayoutTestUtils::PrintNodeInfo(item); + ASSERT_TRUE(item->GetPosition() == Offset(index % 3 * 360.0, index / 3 * 360.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(360.0, 360.0)); + index++; + } + + /** + * @tc.steps: step3. adjustment column count and trigger the relayout. + * @tc.expected: step2. Properties and children are calculated correctly. + */ + rowArgs = "1fr 1fr"; + colArgs = "216px 216px 216px 216px 216px"; + renderNode_->Update(GridLayoutTestUtils::CreateComponent(FlexDirection::ROW, rowArgs, colArgs)); + renderNode_->PerformLayout(); + ASSERT_TRUE(renderNode_->GetLayoutSize() == Size(1080.0, 1080.0)); + index = 0; + for (const auto& item : renderNode_->GetChildren()) { + GridLayoutTestUtils::PrintNodeInfo(item); + ASSERT_TRUE(item->GetPosition() == Offset(index / 2 * 216.0, index % 2 * 540.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(216.0, 540.0)); + index++; + } +} + +/** + * @tc.name: RenderGridLayoutTest005 + * @tc.desc: Verify Grid Layout can layout item with index and span when row. + * @tc.type: FUNC + * @tc.require: AR000DQ1SP + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridLayoutTest, RenderGridLayoutTest005, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct component and render with 3 child by row direction. + * @tc.expected: step1. properties and children are set correctly. + */ + std::string rowArgs = "1fr 1fr 1fr"; + std::string colArgs = "1fr 1fr 1fr"; + renderNode_->Update(GridLayoutTestUtils::CreateComponent(FlexDirection::ROW, rowArgs, colArgs)); + RefPtr item1 = GridLayoutTestUtils::CreateRenderItem(0, 0, 3, 1); + item1->GetChildren().front()->Attach(mockContext_); + item1->Attach(mockContext_); + renderNode_->AddChild(item1); + RefPtr item2 = GridLayoutTestUtils::CreateRenderItem(1, 1, 2, 2); + item2->GetChildren().front()->Attach(mockContext_); + item2->Attach(mockContext_); + renderNode_->AddChild(item2); + RefPtr item3 = GridLayoutTestUtils::CreateRenderItem(0, 1, 1, 2); + item3->GetChildren().front()->Attach(mockContext_); + item3->Attach(mockContext_); + renderNode_->AddChild(item3); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties and children are calculated correctly. + */ + renderNode_->PerformLayout(); + ASSERT_TRUE(renderNode_->GetLayoutSize() == Size(1080.0, 1080.0)); + const std::list>& items = renderNode_->GetChildren(); + ASSERT_TRUE(items.size() == 3); + int32_t index = 0; + for (const auto& item : items) { + GridLayoutTestUtils::PrintNodeInfo(item); + if (index == 0) { + ASSERT_TRUE(item->GetPosition() == Offset(0.0, 270.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(360.0, 540.0)); + } + if (index == 1) { + ASSERT_TRUE(item->GetPosition() == Offset(450.0, 450.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(540.0, 540.0)); + } + if (index == 2) { + ASSERT_TRUE(item->GetPosition() == Offset(450.0, 0.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(540.0, 360.0)); + } + index++; + } +} + +/** + * @tc.name: RenderGridLayoutTest006 + * @tc.desc: Verify Grid Layout can layout item with index and span when column. + * @tc.type: FUNC + * @tc.require: AR000DQ1SP + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridLayoutTest, RenderGridLayoutTest006, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct component and render with 7 child by column direction. + * @tc.expected: step1. properties and children are set correctly. + */ + std::string rowArgs = "1fr 1fr 1fr 1fr"; + std::string colArgs = "1fr 1fr 1fr 1fr"; + renderNode_->Update(GridLayoutTestUtils::CreateComponent(FlexDirection::COLUMN, rowArgs, colArgs)); + RefPtr item1 = GridLayoutTestUtils::CreateRenderItem(2, 0, 2, 4); + item1->GetChildren().front()->Attach(mockContext_); + item1->Attach(mockContext_); + renderNode_->AddChild(item1); + RefPtr item2 = GridLayoutTestUtils::CreateRenderItem(0, 2, 4, 2); + item2->GetChildren().front()->Attach(mockContext_); + item2->Attach(mockContext_); + renderNode_->AddChild(item2); + int32_t count = 5; + for (int32_t i = 0; i < count; ++i) { + RefPtr item = GridLayoutTestUtils::CreateRenderItem(-1, -1, 1, 1); + item->GetChildren().front()->Attach(mockContext_); + item->Attach(mockContext_); + renderNode_->AddChild(item); + } + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties and children are calculated correctly. + */ + renderNode_->PerformLayout(); + ASSERT_TRUE(renderNode_->GetLayoutSize() == Size(1080.0, 1080.0)); + const std::list>& items = renderNode_->GetChildren(); + ASSERT_TRUE(items.size() == 7); + int32_t index = 0; + for (const auto& item : items) { + GridLayoutTestUtils::PrintNodeInfo(item); + if (index == 0) { + ASSERT_TRUE(item->GetPosition() == Offset(270.0, 540.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(540.0, 540.0)); + } else if (index == 1) { + ASSERT_TRUE(item->GetPosition() == Offset(540.0, 0.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(540.0, 540.0)); + } else if (index > 5) { + ASSERT_TRUE(item->GetPosition() == Offset(0.0, 0.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(0.0, 0.0)); + } else { + ASSERT_TRUE(item->GetPosition() == Offset((index - 2) % 2 * 270.0, (index - 2) / 2 * 270.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(270.0, 270.0)); + } + index++; + } +} + +/** + * @tc.name: RenderGridLayoutTest007 + * @tc.desc: Verify Grid Layout can layout item with index and span. + * @tc.type: FUNC + * @tc.require: AR000DQ1SM + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridLayoutTest, RenderGridLayoutTest007, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct component and render with 4 child by column direction. + * @tc.expected: step1. properties and children are set correctly. + */ + std::string rowArgs = "50% 50%"; + std::string colArgs = "1fr 1fr 1fr"; + renderNode_->Update(GridLayoutTestUtils::CreateComponent(FlexDirection::COLUMN, rowArgs, colArgs)); + RefPtr item1 = GridLayoutTestUtils::CreateRenderItem(1, 0, 1, 2); + item1->GetChildren().front()->Attach(mockContext_); + item1->Attach(mockContext_); + renderNode_->AddChild(item1); + RefPtr item2 = GridLayoutTestUtils::CreateRenderItem(0, 1, 1, 2); + item2->GetChildren().front()->Attach(mockContext_); + item2->Attach(mockContext_); + renderNode_->AddChild(item2); + int32_t count = 2; + for (int32_t i = 0; i < count; ++i) { + RefPtr item = GridLayoutTestUtils::CreateRenderItem(-1, -1, 2, 2); + item->GetChildren().front()->Attach(mockContext_); + item->Attach(mockContext_); + renderNode_->AddChild(item); + } + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties and children are calculated correctly. + */ + renderNode_->PerformLayout(); + ASSERT_TRUE(renderNode_->GetLayoutSize() == Size(1080.0, 1080.0)); + const std::list>& items = renderNode_->GetChildren(); + ASSERT_TRUE(items.size() == 4); + int32_t index = 0; + for (const auto& item : items) { + GridLayoutTestUtils::PrintNodeInfo(item); + if (index == 0) { + ASSERT_TRUE(item->GetPosition() == Offset(90.0, 540.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(540.0, 540.0)); + } + if (index == 1) { + ASSERT_TRUE(item->GetPosition() == Offset(450.0, 0.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(540.0, 540.0)); + } + if (index == 2) { + ASSERT_TRUE(item->GetPosition() == Offset(0.0, 0.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(360.0, 540.0)); + } + if (index == 3) { + ASSERT_TRUE(item->GetPosition() == Offset(720.0, 540.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(360.0, 540.0)); + } + index++; + } +} + +/** + * @tc.name: RenderGridLayoutTest008 + * @tc.desc: Verify Grid Layout can support focus obtain. + * @tc.type: FUNC + * @tc.require: AR000DQ1SN + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridLayoutTest, RenderGridLayoutTest008, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct component and render with 9 child by row direction. + * @tc.expected: step1. properties and children are set correctly. + */ + std::string rowArgs = "1fr 1fr 1fr"; + std::string colArgs = "1fr 1fr 1fr"; + renderNode_->Update(GridLayoutTestUtils::CreateComponent(FlexDirection::ROW, rowArgs, colArgs)); + int32_t count = 9; + for (int32_t i = 0; i < count; ++i) { + RefPtr item = GridLayoutTestUtils::CreateRenderItem(-1, -1, 1, 1); + item->GetChildren().front()->Attach(mockContext_); + item->Attach(mockContext_); + renderNode_->AddChild(item); + } + renderNode_->PerformLayout(); + ASSERT_TRUE(renderNode_->GetLayoutSize() == Size(1080.0, 1080.0)); + + /** + * @tc.steps: step2. trigger focus event. + * @tc.expected: step2. grid layout can obtain focus. + */ + ASSERT_TRUE(renderNode_->RequestNextFocus(false, false) == 3); // RIGHT + ASSERT_TRUE(renderNode_->RequestNextFocus(true, false) == 4); // DOWN + ASSERT_TRUE(renderNode_->RequestNextFocus(false, true) == 1); // LEFT + ASSERT_TRUE(renderNode_->RequestNextFocus(true, true) == 0); // UP + ASSERT_TRUE(renderNode_->RequestNextFocus(false, false) == 3); // RIGHT + ASSERT_TRUE(renderNode_->RequestNextFocus(true, false) == 4); // DOWN + ASSERT_TRUE(renderNode_->RequestNextFocus(true, false) == 5); // DOWN + ASSERT_TRUE(renderNode_->RequestNextFocus(true, false) == -1); // DOWN + ASSERT_TRUE(renderNode_->RequestNextFocus(false, false) == 8); // RIGHT + ASSERT_TRUE(renderNode_->RequestNextFocus(false, false) == -1); // RIGHT +} + +/** + * @tc.name: RenderGridLayoutTest009 + * @tc.desc: Verify Grid Layout can support focus lost. + * @tc.type: FUNC + * @tc.require: AR000DQ1SN + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridLayoutTest, RenderGridLayoutTest009, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct component and render with 9 child by column direction. + * @tc.expected: step1. properties and children are set correctly. + */ + std::string rowArgs = "360px 360px 360px"; + std::string colArgs = "1fr 1fr 1fr"; + renderNode_->Update(GridLayoutTestUtils::CreateComponent(FlexDirection::COLUMN, rowArgs, colArgs)); + int32_t count = 9; + for (int32_t i = 0; i < count; ++i) { + RefPtr item = GridLayoutTestUtils::CreateRenderItem(-1, -1, 1, 1); + item->GetChildren().front()->Attach(mockContext_); + item->Attach(mockContext_); + renderNode_->AddChild(item); + } + renderNode_->PerformLayout(); + ASSERT_TRUE(renderNode_->GetLayoutSize() == Size(1080.0, 1080.0)); + + /** + * @tc.steps: step2. trigger focus event. + * @tc.expected: step2. grid layout can obtain focus. + */ + ASSERT_TRUE(renderNode_->RequestNextFocus(false, false) == 1); // RIGHT + ASSERT_TRUE(renderNode_->RequestNextFocus(true, false) == 4); // DOWN + ASSERT_TRUE(renderNode_->RequestNextFocus(false, true) == 3); // LEFT + ASSERT_TRUE(renderNode_->RequestNextFocus(true, true) == 0); // UP + ASSERT_TRUE(renderNode_->RequestNextFocus(false, false) == 1); // RIGHT + ASSERT_TRUE(renderNode_->RequestNextFocus(true, false) == 4); // DOWN + ASSERT_TRUE(renderNode_->RequestNextFocus(true, false) == 7); // DOWN + ASSERT_TRUE(renderNode_->RequestNextFocus(true, false) == -1); // DOWN + ASSERT_TRUE(renderNode_->RequestNextFocus(false, false) == 8); // RIGHT + ASSERT_TRUE(renderNode_->RequestNextFocus(false, false) == -1); // RIGHT +} + +/** + * @tc.name: RenderGridLayoutTest010 + * @tc.desc: Verify Grid Layout can support focus move. + * @tc.type: FUNC + * @tc.require: AR000DQ1SN + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridLayoutTest, RenderGridLayoutTest010, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct component and render with 3 child by row direction. + * @tc.expected: step1. properties and children are set correctly. + */ + std::string rowArgs = "1fr 1fr 1fr"; + std::string colArgs = "360px 360px 360px"; + renderNode_->Update(GridLayoutTestUtils::CreateComponent(FlexDirection::ROW, rowArgs, colArgs)); + RefPtr item1 = GridLayoutTestUtils::CreateRenderItem(1, 0, 1, 3); + item1->GetChildren().front()->Attach(mockContext_); + item1->Attach(mockContext_); + renderNode_->AddChild(item1); + RefPtr item2 = GridLayoutTestUtils::CreateRenderItem(0, 0, 1, 2); + item2->GetChildren().front()->Attach(mockContext_); + item2->Attach(mockContext_); + renderNode_->AddChild(item2); + RefPtr item3 = GridLayoutTestUtils::CreateRenderItem(2, 1, 1, 2); + item3->GetChildren().front()->Attach(mockContext_); + item3->Attach(mockContext_); + renderNode_->AddChild(item3); + int32_t count = 2; + for (int32_t i = 0; i < count; ++i) { + RefPtr item = GridLayoutTestUtils::CreateRenderItem(-1, -1, 2, 2); + item->GetChildren().front()->Attach(mockContext_); + item->Attach(mockContext_); + renderNode_->AddChild(item); + } + renderNode_->PerformLayout(); + ASSERT_TRUE(renderNode_->GetLayoutSize() == Size(1080.0, 1080.0)); + + /** + * @tc.steps: step2. trigger focus event. + * @tc.expected: step2. grid layout can obtain focus. + */ + ASSERT_TRUE(renderNode_->RequestNextFocus(false, false) == -1); // RIGHT + ASSERT_TRUE(renderNode_->RequestNextFocus(true, false) == 3); // DOWN + ASSERT_TRUE(renderNode_->RequestNextFocus(false, true) == -1); // LEFT + ASSERT_TRUE(renderNode_->RequestNextFocus(true, true) == 0); // UP + ASSERT_TRUE(renderNode_->RequestNextFocus(true, true) == 1); // UP + ASSERT_TRUE(renderNode_->RequestNextFocus(false, false) == 4); // RIGHT + ASSERT_TRUE(renderNode_->RequestNextFocus(true, false) == 0); // DOWN + ASSERT_TRUE(renderNode_->RequestNextFocus(true, false) == 2); // DOWN + ASSERT_TRUE(renderNode_->RequestNextFocus(false, false) == -1); // RIGHT + ASSERT_TRUE(renderNode_->RequestNextFocus(false, true) == 3); // LEFT +} + +/** + * @tc.name: RenderGridLayoutTest011 + * @tc.desc: Verify Grid Layout can support focus move with empty grid. + * @tc.type: FUNC + * @tc.require: AR000DQ1SN + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridLayoutTest, RenderGridLayoutTest011, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct component and render with 3 child by row direction. + * @tc.expected: step1. properties and children are set correctly. + */ + std::string rowArgs = "1fr 1fr 1fr"; + std::string colArgs = "25% 25% 25% 25%"; + renderNode_->Update(GridLayoutTestUtils::CreateComponent(FlexDirection::COLUMN, rowArgs, colArgs)); + RefPtr item1 = GridLayoutTestUtils::CreateRenderItem(0, 0, 1, 3); + item1->GetChildren().front()->Attach(mockContext_); + item1->Attach(mockContext_); + renderNode_->AddChild(item1); + RefPtr item2 = GridLayoutTestUtils::CreateRenderItem(1, 0, 2, 1); + item2->GetChildren().front()->Attach(mockContext_); + item2->Attach(mockContext_); + renderNode_->AddChild(item2); + RefPtr item3 = GridLayoutTestUtils::CreateRenderItem(1, 2, 2, 1); + item3->GetChildren().front()->Attach(mockContext_); + item3->Attach(mockContext_); + renderNode_->AddChild(item3); + RefPtr item4 = GridLayoutTestUtils::CreateRenderItem(2, 1, 1, 2); + item4->GetChildren().front()->Attach(mockContext_); + item4->Attach(mockContext_); + renderNode_->AddChild(item4); + renderNode_->PerformLayout(); + ASSERT_TRUE(renderNode_->GetLayoutSize() == Size(1080.0, 1080.0)); + + /** + * @tc.steps: step2. trigger focus event. + * @tc.expected: step2. grid layout can obtain focus. + */ + ASSERT_TRUE(renderNode_->RequestNextFocus(false, false) == -1); // RIGHT + ASSERT_TRUE(renderNode_->RequestNextFocus(true, false) == 1); // DOWN + ASSERT_TRUE(renderNode_->RequestNextFocus(false, true) == -1); // LEFT + ASSERT_TRUE(renderNode_->RequestNextFocus(true, true) == 0); // UP + ASSERT_TRUE(renderNode_->RequestNextFocus(true, false) == 1); // DOWN + ASSERT_TRUE(renderNode_->RequestNextFocus(false, false) == 2); // RIGHT + ASSERT_TRUE(renderNode_->RequestNextFocus(false, false) == -1); // RIGHT + ASSERT_TRUE(renderNode_->RequestNextFocus(true, true) == 0); // UP +} + +/** + * @tc.name: RenderGridLayoutTest012 + * @tc.desc: Verify Grid Layout PerformLayout can calculate children with gap + * @tc.type: FUNC + * @tc.require: AR000DQ1SM + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridLayoutTest, RenderGridLayoutTest012, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct component and render with 4 child by row direction. + * @tc.expected: step1. properties and children are set correctly. + */ + std::string rowArgs = "30% 70%"; + std::string colArgs = "1fr 2fr"; + auto component = GridLayoutTestUtils::CreateComponent(FlexDirection::ROW, rowArgs, colArgs); + auto gridcomponent = AceType::DynamicCast(component); + gridcomponent->SetRowGap(80.0); + gridcomponent->SetColumnGap(60.0); + renderNode_->Update(component); + int32_t count = 4; + for (int32_t i = 0; i < count; ++i) { + RefPtr item = GridLayoutTestUtils::CreateRenderItem(-1, -1, 1, 1); + item->GetChildren().front()->Attach(mockContext_); + item->Attach(mockContext_); + renderNode_->AddChild(item); + } + ASSERT_TRUE(renderNode_->GetChildren().size() == 4); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties and children are calculated correctly. + */ + renderNode_->PerformLayout(); + ASSERT_TRUE(renderNode_->GetLayoutSize() == Size(1080.0, 1080.0)); + const std::list>& items = renderNode_->GetChildren(); + ASSERT_TRUE(items.size() == 4); + int32_t index = 0; + for (const auto& item : items) { + GridLayoutTestUtils::PrintNodeInfo(item); + if (index == 0) { + ASSERT_TRUE(item->GetPosition() == Offset(0.0, 0.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(340.0, 324.0)); + } + if (index == 1) { + ASSERT_TRUE(item->GetPosition() == Offset(0.0, 512.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(340.0, 540.0)); + } + if (index == 2) { + ASSERT_TRUE(item->GetPosition() == Offset(470.0, 0.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(540.0, 324.0)); + } + if (index == 3) { + ASSERT_TRUE(item->GetPosition() == Offset(470.0, 512.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(540.0, 540.0)); + } + index++; + } +} + +/** + * @tc.name: RenderGridLayoutTest013 + * @tc.desc: Verify Grid Layout PerformLayout can calculate children with gap + * @tc.type: FUNC + * @tc.require: AR000DQ1SM + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridLayoutTest, RenderGridLayoutTest013, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct component and render with 4 child by row direction. + * @tc.expected: step1. properties and children are set correctly. + */ + std::string rowArgs = "20% 30% 70%"; + std::string colArgs = "600px 700px"; + auto component = GridLayoutTestUtils::CreateComponent(FlexDirection::COLUMN, rowArgs, colArgs); + auto gridcomponent = AceType::DynamicCast(component); + gridcomponent->SetRowGap(60.0); + gridcomponent->SetColumnGap(80.0); + renderNode_->Update(component); + int32_t count = 6; + for (int32_t i = 0; i < count; ++i) { + RefPtr item = GridLayoutTestUtils::CreateRenderItem(-1, -1, 1, 1); + item->GetChildren().front()->Attach(mockContext_); + item->Attach(mockContext_); + renderNode_->AddChild(item); + } + ASSERT_TRUE(renderNode_->GetChildren().size() == 6); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties and children are calculated correctly. + */ + renderNode_->PerformLayout(); + ASSERT_TRUE(renderNode_->GetLayoutSize() == Size(1080.0, 1080.0)); + const std::list>& items = renderNode_->GetChildren(); + ASSERT_TRUE(items.size() == 6); + int32_t index = 0; + for (const auto& item : items) { + GridLayoutTestUtils::PrintNodeInfo(item); + if (index == 0) { + ASSERT_TRUE(item->GetPosition() == Offset(30.0, 0.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(540.0, 216.0)); + } + if (index == 1) { + ASSERT_TRUE(item->GetPosition() == Offset(680.0, 0.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(400.0, 216.0)); + } + if (index == 2) { + ASSERT_TRUE(item->GetPosition() == Offset(30.0, 276.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(540.0, 324.0)); + } + if (index == 3) { + ASSERT_TRUE(item->GetPosition() == Offset(680.0, 276.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(400.0, 324.0)); + } + if (index == 4) { + ASSERT_TRUE(item->GetPosition() == Offset(30.0, 660.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(540.0, 540.0)); + } + if (index == 5) { + ASSERT_TRUE(item->GetPosition() == Offset(680.0, 660.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(400.0, 540.0)); + } + index++; + } +} + +/** + * @tc.name: RenderGridLayoutTest014 + * @tc.desc: Verify Grid Layout PerformLayout can calculate children when RTL + * @tc.type: FUNC + * @tc.require: AR000DQ1SM + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridLayoutTest, RenderGridLayoutTest014, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct component and render with 4 child by RTL. + * @tc.expected: step1. properties and children are set correctly. + */ + std::string rowArgs = "20% 30% 70%"; + std::string colArgs = "600px 700px"; + auto component = GridLayoutTestUtils::CreateComponent(FlexDirection::COLUMN, rowArgs, colArgs); + auto gridcomponent = AceType::DynamicCast(component); + gridcomponent->SetRowGap(60.0); + gridcomponent->SetColumnGap(80.0); + gridcomponent->SetRightToLeft(true); + renderNode_->Update(component); + int32_t count = 4; + for (int32_t i = 0; i < count; ++i) { + RefPtr item = GridLayoutTestUtils::CreateRenderItem(-1, -1, 1, 1); + item->GetChildren().front()->Attach(mockContext_); + item->Attach(mockContext_); + renderNode_->AddChild(item); + } + ASSERT_TRUE(renderNode_->GetChildren().size() == 4); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties and children are calculated correctly. + */ + renderNode_->PerformLayout(); + ASSERT_TRUE(renderNode_->GetLayoutSize() == Size(1080.0, 1080.0)); + const std::list>& items = renderNode_->GetChildren(); + ASSERT_TRUE(items.size() == 4); + int32_t index = 0; + for (const auto& item : items) { + GridLayoutTestUtils::PrintNodeInfo(item); + if (index == 0) { + ASSERT_TRUE(item->GetPosition() == Offset(510.0, 0.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(540.0, 216.0)); + } + if (index == 1) { + ASSERT_TRUE(item->GetPosition() == Offset(0.0, 0.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(400.0, 216.0)); + } + if (index == 2) { + ASSERT_TRUE(item->GetPosition() == Offset(510.0, 276.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(540.0, 324.0)); + } + if (index == 3) { + ASSERT_TRUE(item->GetPosition() == Offset(0.0, 276.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(400.0, 324.0)); + } + index++; + } +} + +/** + * @tc.name: RenderGridLayoutTest015 + * @tc.desc: Verify Grid Layout can support focus move when RTL. + * @tc.type: FUNC + * @tc.require: AR000DQ1SN + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridLayoutTest, RenderGridLayoutTest015, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct component and render with 3 child when RTL. + * @tc.expected: step1. properties and children are set correctly. + */ + std::string rowArgs = "1fr 1fr 1fr"; + std::string colArgs = "360px 360px 360px"; + auto component = GridLayoutTestUtils::CreateComponent(FlexDirection::ROW, rowArgs, colArgs); + auto gridcomponent = AceType::DynamicCast(component); + gridcomponent->SetRightToLeft(true); + renderNode_->Update(gridcomponent); + RefPtr item1 = GridLayoutTestUtils::CreateRenderItem(1, 0, 1, 3); + item1->GetChildren().front()->Attach(mockContext_); + item1->Attach(mockContext_); + renderNode_->AddChild(item1); + RefPtr item2 = GridLayoutTestUtils::CreateRenderItem(0, 0, 1, 2); + item2->GetChildren().front()->Attach(mockContext_); + item2->Attach(mockContext_); + renderNode_->AddChild(item2); + RefPtr item3 = GridLayoutTestUtils::CreateRenderItem(2, 1, 1, 2); + item3->GetChildren().front()->Attach(mockContext_); + item3->Attach(mockContext_); + renderNode_->AddChild(item3); + int32_t count = 2; + for (int32_t i = 0; i < count; ++i) { + RefPtr item = GridLayoutTestUtils::CreateRenderItem(-1, -1, 2, 2); + item->GetChildren().front()->Attach(mockContext_); + item->Attach(mockContext_); + renderNode_->AddChild(item); + } + renderNode_->PerformLayout(); + ASSERT_TRUE(renderNode_->GetLayoutSize() == Size(1080.0, 1080.0)); + + /** + * @tc.steps: step2. trigger focus event. + * @tc.expected: step2. grid layout can obtain focus. + */ + ASSERT_TRUE(renderNode_->RequestNextFocus(false, true) == -1); // LEFT + ASSERT_TRUE(renderNode_->RequestNextFocus(true, false) == 3); // DOWN + ASSERT_TRUE(renderNode_->RequestNextFocus(false, false) == -1); // RIGHT + ASSERT_TRUE(renderNode_->RequestNextFocus(true, true) == 0); // UP + ASSERT_TRUE(renderNode_->RequestNextFocus(true, true) == 1); // UP + ASSERT_TRUE(renderNode_->RequestNextFocus(false, true) == 4); // LEFT + ASSERT_TRUE(renderNode_->RequestNextFocus(true, false) == 0); // DOWN + ASSERT_TRUE(renderNode_->RequestNextFocus(true, false) == 2); // DOWN + ASSERT_TRUE(renderNode_->RequestNextFocus(false, true) == -1); // LEFT + ASSERT_TRUE(renderNode_->RequestNextFocus(false, false) == 3); // RIGHT +} + +/** + * @tc.name: RenderGridLayoutTest016 + * @tc.desc: Verify Grid Layout PerformLayout can calculate children with invalid index. + * @tc.type: FUNC + * @tc.require: AR000DQ1SM + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridLayoutTest, RenderGridLayoutTest016, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct component and render with two children with invalid index. + * @tc.expected: step1. properties and children are set correctly. + */ + std::string rowArgs = "50% 50%"; + std::string colArgs = "600px 700px"; + auto component = GridLayoutTestUtils::CreateComponent(FlexDirection::COLUMN, rowArgs, colArgs); + auto gridcomponent = AceType::DynamicCast(component); + gridcomponent->SetRowGap(60.0); + gridcomponent->SetColumnGap(80.0); + renderNode_->Update(component); + RefPtr item1 = GridLayoutTestUtils::CreateRenderItem(2, 0, 1, 1); + item1->GetChildren().front()->Attach(mockContext_); + item1->Attach(mockContext_); + renderNode_->AddChild(item1); + RefPtr item2 = GridLayoutTestUtils::CreateRenderItem(0, 3, 1, 1); + item2->GetChildren().front()->Attach(mockContext_); + item2->Attach(mockContext_); + renderNode_->AddChild(item2); + ASSERT_TRUE(renderNode_->GetChildren().size() == 2); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties and children are calculated correctly. + */ + renderNode_->PerformLayout(); + ASSERT_TRUE(renderNode_->GetLayoutSize() == Size(1080.0, 1080.0)); + const std::list>& items = renderNode_->GetChildren(); + ASSERT_TRUE(items.size() == 2); + int32_t index = 0; + for (const auto& item : items) { + GridLayoutTestUtils::PrintNodeInfo(item); + if (index == 0) { + ASSERT_TRUE(item->GetPosition() == Offset(30.0, 0.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(540.0, 540.0)); + } + if (index == 1) { + ASSERT_TRUE(item->GetPosition() == Offset(680.0, 0.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(400.0, 540.0)); + } + index++; + } +} + +/** + * @tc.name: RenderGridLayoutTest017 + * @tc.desc: Verify Grid Layout can layout items with auto params. + * @tc.type: FUNC + * @tc.require: AR000DQ1SP + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridLayoutTest, RenderGridLayoutTest017, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct component and render with 3 child by column direction. + * @tc.expected: step1. properties and children are set correctly. + */ + std::string colArgs = "1fr auto 1fr"; + renderNode_->Update(GridLayoutTestUtils::CreateComponent(FlexDirection::COLUMN, "", colArgs)); + RefPtr item1 = GridLayoutTestUtils::CreateRenderItem(-1, -1, 1, 1); + item1->GetChildren().front()->Attach(mockContext_); + item1->Attach(mockContext_); + renderNode_->AddChild(item1); + RefPtr item2 = GridLayoutTestUtils::CreateRenderItem(-1, -1, 1, 1); + item2->GetChildren().front()->Attach(mockContext_); + item2->Attach(mockContext_); + renderNode_->AddChild(item2); + RefPtr item3 = GridLayoutTestUtils::CreateRenderItem(-1, -1, 1, 1); + item3->GetChildren().front()->Attach(mockContext_); + item3->Attach(mockContext_); + renderNode_->AddChild(item3); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties and children are calculated correctly. + */ + renderNode_->PerformLayout(); + ASSERT_TRUE(renderNode_->GetLayoutSize() == Size(1080.0, 1080.0)); + const std::list>& items = renderNode_->GetChildren(); + ASSERT_TRUE(items.size() == 3); + int32_t index = 0; + for (const auto& item : items) { + GridLayoutTestUtils::PrintNodeInfo(item); + if (index == 0) { + ASSERT_TRUE(item->GetPosition() == Offset(0.0, 270.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(270.0, 540.0)); + } + if (index == 1) { + ASSERT_TRUE(item->GetPosition() == Offset(270.0, 270.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(540.0, 540.0)); + } + if (index == 2) { + ASSERT_TRUE(item->GetPosition() == Offset(810.0, 270.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(270.0, 540.0)); + } + index++; + } +} + +/** + * @tc.name: RenderGridLayoutTest018 + * @tc.desc: Verify Grid Layout can layout items with auto params. + * @tc.type: FUNC + * @tc.require: AR000DQ1SP + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderGridLayoutTest, RenderGridLayoutTest018, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct component and render with 9 child by row direction. + * @tc.expected: step1. properties and children are set correctly. + */ + std::string rowArgs = "auto 1fr 200px"; + std::string colArgs = "270px 50% auto"; + renderNode_->Update(GridLayoutTestUtils::CreateComponent(FlexDirection::ROW, rowArgs, colArgs)); + int32_t count = 9; + for (int32_t i = 0; i < count; ++i) { + RefPtr item = GridLayoutTestUtils::CreateRenderItem(-1, -1, 1, 1); + item->GetChildren().front()->Attach(mockContext_); + item->Attach(mockContext_); + renderNode_->AddChild(item); + } + ASSERT_TRUE(renderNode_->GetChildren().size() == 9); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties and children are calculated correctly. + */ + renderNode_->PerformLayout(); + ASSERT_TRUE(renderNode_->GetLayoutSize() == Size(1080.0, 1080.0)); + const std::list>& items = renderNode_->GetChildren(); + ASSERT_TRUE(items.size() == 9); + int32_t index = 0; + for (const auto& item : items) { + GridLayoutTestUtils::PrintNodeInfo(item); + if (index == 0) { + ASSERT_TRUE(item->GetPosition() == Offset(0.0, 0.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(270.0, 540.0)); + } + if (index == 3) { + ASSERT_TRUE(item->GetPosition() == Offset(270.0, 0.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(540.0, 540.0)); + } + if (index == 6) { + ASSERT_TRUE(item->GetPosition() == Offset(810.0, 0.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(270.0, 540.0)); + } + if (index == 1) { + ASSERT_TRUE(item->GetPosition() == Offset(0.0, 540.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(270.0, 340.0)); + } + if (index == 4) { + ASSERT_TRUE(item->GetPosition() == Offset(270.0, 540.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(540.0, 340.0)); + } + if (index == 7) { + ASSERT_TRUE(item->GetPosition() == Offset(810.0, 540.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(270.0, 340.0)); + } + if (index == 2) { + ASSERT_TRUE(item->GetPosition() == Offset(0.0, 880.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(270.0, 200.0)); + } + if (index == 5) { + ASSERT_TRUE(item->GetPosition() == Offset(270.0, 880.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(540.0, 200.0)); + } + if (index == 8) { + ASSERT_TRUE(item->GetPosition() == Offset(810.0, 880.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(270.0, 200.0)); + } + index++; + } +} + +/** + * @tc.name: RenderGridLayoutTest019 + * @tc.desc: Verify Grid Layout is useful for auto-fill in px mode. + * @tc.type: FUNC + * @tc.require: AR000F3BAN + * @tc.author: yangfan + */ +HWTEST_F(RenderGridLayoutTest, RenderGridLayoutTest019, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct component and render with 9 child by column direction. + * @tc.expected: step1. properties and children are set correctly. + */ + std::string rowArgs = "auto-fill 360px 180px"; + std::string colArgs = "360px 1fr 360px"; + renderNode_->Update(GridLayoutTestUtils::CreateComponent(FlexDirection::ROW, rowArgs, colArgs)); + int32_t count = 9; + for (int32_t i = 0; i < count; ++i) { + RefPtr item = GridLayoutTestUtils::CreateRenderItem(-1, -1, 1, 1); + item->GetChildren().front()->Attach(mockContext_); + item->Attach(mockContext_); + renderNode_->AddChild(item); + } + ASSERT_TRUE(renderNode_->GetChildren().size() == 9); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties and children are calculated correctly. + */ + renderNode_->PerformLayout(); + ASSERT_TRUE(renderNode_->GetLayoutSize() == Size(1080.0, 1080.0)); + const std::list>& items = renderNode_->GetChildren(); + ASSERT_TRUE(items.size() == 9); + int32_t index = 0; + for (const auto& item : items) { + GridLayoutTestUtils::PrintNodeInfo(item); + if (index == 0) { + ASSERT_TRUE(item->GetPosition() == Offset(0.0, 0.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(360.0, 360.0)); + } + if (index == 1) { + ASSERT_TRUE(item->GetPosition() == Offset(0.0, 360.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(360.0, 180.0)); + } + if (index == 2) { + ASSERT_TRUE(item->GetPosition() == Offset(0.0, 540.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(360.0, 360.0)); + } + if (index == 3) { + ASSERT_TRUE(item->GetPosition() == Offset(0.0, 900.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(360.0, 180.0)); + } + if (index == 4) { + ASSERT_TRUE(item->GetPosition() == Offset(360.0, 0.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(360.0, 360.0)); + } + if (index == 5) { + ASSERT_TRUE(item->GetPosition() == Offset(360.0, 360.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(360.0, 180.0)); + } + if (index == 6) { + ASSERT_TRUE(item->GetPosition() == Offset(360.0, 540.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(360.0, 360.0)); + } + if (index == 7) { + ASSERT_TRUE(item->GetPosition() == Offset(360.0, 900.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(360.0, 180.0)); + } + if (index == 8) { + ASSERT_TRUE(item->GetPosition() == Offset(720.0, 0.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(360.0, 360.0)); + } + index++; + } +} + +/** + * @tc.name: RenderGridLayoutTest020 + * @tc.desc: Verify Grid Layout is useful for auto-fill in percent mode. + * @tc.type: FUNC + * @tc.require: AR000F3BAO + * @tc.author: yangfan + */ +HWTEST_F(RenderGridLayoutTest, RenderGridLayoutTest020, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct component and render with 9 child by column direction. + * @tc.expected: step1. properties and children are set correctly. + */ + std::string rowArgs = "auto-fill 30% 25%"; + std::string colArgs = "auto-fill 10% 30%"; + renderNode_->Update(GridLayoutTestUtils::CreateComponent(FlexDirection::COLUMN, rowArgs, colArgs)); + int32_t count = 9; + for (int32_t i = 0; i < count; ++i) { + RefPtr item = GridLayoutTestUtils::CreateRenderItem(-1, -1, 1, 1); + item->GetChildren().front()->Attach(mockContext_); + item->Attach(mockContext_); + renderNode_->AddChild(item); + } + ASSERT_TRUE(renderNode_->GetChildren().size() == 9); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties and children are calculated correctly. + */ + renderNode_->PerformLayout(); + ASSERT_TRUE(renderNode_->GetLayoutSize() == Size(1080.0, 1080.0)); + const std::list>& items = renderNode_->GetChildren(); + ASSERT_TRUE(items.size() == 9); + int32_t index = 0; + for (const auto& item : items) { + GridLayoutTestUtils::PrintNodeInfo(item); + if (index == 0) { + ASSERT_TRUE(item->GetPosition() == Offset(0.0, 0.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(108.0, 324.0)); + } + if (index == 1) { + ASSERT_TRUE(item->GetPosition() == Offset(108.0, 0.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(324.0, 324.0)); + } + if (index == 2) { + ASSERT_TRUE(item->GetPosition() == Offset(432.0, 0.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(108.0, 324.0)); + } + if (index == 3) { + ASSERT_TRUE(item->GetPosition() == Offset(540.0, 0.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(324.0, 324.0)); + } + if (index == 4) { + ASSERT_TRUE(item->GetPosition() == Offset(864.0, 0.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(108.0, 324.0)); + } + if (index == 5) { + ASSERT_TRUE(item->GetPosition() == Offset(0.0, 324.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(108.0, 270.0)); + } + if (index == 6) { + ASSERT_TRUE(item->GetPosition() == Offset(108.0, 324.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(324.0, 270.0)); + } + if (index == 7) { + ASSERT_TRUE(item->GetPosition() == Offset(432.0, 324.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(108.0, 270.0)); + } + if (index == 8) { + ASSERT_TRUE(item->GetPosition() == Offset(540.0, 324.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(324.0, 270.0)); + } + index++; + } +} + +/** + * @tc.name: RenderGridLayoutTest021 + * @tc.desc: Verify Grid Layout is useful for auto-fill in percent mode when percent and px is mixed. + * @tc.type: FUNC + * @tc.require: AR000F3BAO + * @tc.author: yangfan + */ +HWTEST_F(RenderGridLayoutTest, RenderGridLayoutTest021, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct component and render with 7 child by column direction. + * @tc.expected: step1. properties and children are set correctly. + */ + std::string rowArgs = "auto-fill 30% 200px"; + std::string colArgs = "auto-fill 400px 10%"; + renderNode_->Update(GridLayoutTestUtils::CreateComponent(FlexDirection::ROW, rowArgs, colArgs)); + int32_t count = 7; + for (int32_t i = 0; i < count; ++i) { + RefPtr item = GridLayoutTestUtils::CreateRenderItem(-1, -1, 1, 1); + item->GetChildren().front()->Attach(mockContext_); + item->Attach(mockContext_); + renderNode_->AddChild(item); + } + ASSERT_TRUE(renderNode_->GetChildren().size() == 7); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties and children are calculated correctly. + */ + renderNode_->PerformLayout(); + ASSERT_TRUE(renderNode_->GetLayoutSize() == Size(1080.0, 1080.0)); + const std::list>& items = renderNode_->GetChildren(); + ASSERT_TRUE(items.size() == 7); + int32_t index = 0; + for (const auto& item : items) { + GridLayoutTestUtils::PrintNodeInfo(item); + if (index == 0) { + ASSERT_TRUE(item->GetPosition() == Offset(0.0, 0.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(400.0, 324.0)); + } + if (index == 1) { + ASSERT_TRUE(item->GetPosition() == Offset(0.0, 324.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(400.0, 200.0)); + } + if (index == 2) { + ASSERT_TRUE(item->GetPosition() == Offset(0.0, 524.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(400.0, 324.0)); + } + if (index == 3) { + ASSERT_TRUE(item->GetPosition() == Offset(0.0, 848.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(400.0, 200.0)); + } + if (index == 4) { + ASSERT_TRUE(item->GetPosition() == Offset(400.0, 0.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(108.0, 324.0)); + } + if (index == 5) { + ASSERT_TRUE(item->GetPosition() == Offset(400.0, 324.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(108.0, 200.0)); + } + if (index == 6) { + ASSERT_TRUE(item->GetPosition() == Offset(400.0, 524.0)); + ASSERT_TRUE(item->GetLayoutSize() == Size(108.0, 324.0)); + } + index++; + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/image/BUILD.gn b/frameworks/core/components/test/unittest/image/BUILD.gn new file mode 100644 index 00000000..df0ee149 --- /dev/null +++ b/frameworks/core/components/test/unittest/image/BUILD.gn @@ -0,0 +1,201 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/graphicalbasicability/image" + +ohos_unittest("ImageCreatorTest") { + module_out_path = module_output_path + + sources = [ "image_creator_test.cpp" ] + + configs = [ + ":config_json_creator_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "$ace_root/frameworks/core/components/test:json", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + deps += [ "$ace_root/frameworks/bridge:js_framework_ohos" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_json_creator_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +ohos_unittest("RenderImageTest") { + module_out_path = module_output_path + + sources = [ + #base + "$ace_root/adapter/common/cpp/thread_util.cpp", + "$ace_root/adapter/ohos/osal/log_wrapper.cpp", + "$ace_root/frameworks/base/geometry/matrix4.cpp", + "$ace_root/frameworks/base/json/json_util.cpp", + "$ace_root/frameworks/base/log/dump_log.cpp", + "$ace_root/frameworks/base/thread/background_task_executor.cpp", + "$ace_root/frameworks/base/utils/base_id.cpp", + + # common + "$ace_root/frameworks/core/common/ace_engine.cpp", + "$ace_root/frameworks/core/common/focus_animation_manager.cpp", + "$ace_root/frameworks/core/common/font_manager.cpp", + "$ace_root/frameworks/core/common/window.cpp", + "$ace_root/frameworks/core/components/display/display_component.cpp", + "$ace_root/frameworks/core/components/test/json/json_frontend.cpp", + "$ace_root/frameworks/core/mock/mock_watch_dog.cpp", + "$ace_root/frameworks/core/pipeline/base/composed_component.cpp", + "$ace_root/frameworks/core/pipeline/pipeline_context.cpp", + + # components + "$ace_root/frameworks/core/components/image/image_component.cpp", + "$ace_root/frameworks/core/components/root/root_component.cpp", + "$ace_root/frameworks/core/pipeline/base/component.cpp", + "$ace_root/frameworks/core/pipeline/base/composed_element.cpp", + + # elements + "$ace_root/frameworks/core/components/bubble/bubble_element.cpp", + "$ace_root/frameworks/core/components/dialog_modal/dialog_modal_element.cpp", + "$ace_root/frameworks/core/components/display/display_element.cpp", + "$ace_root/frameworks/core/components/page_transition/page_transition_element.cpp", + "$ace_root/frameworks/core/components/root/root_element.cpp", + "$ace_root/frameworks/core/components/semi_modal/semi_modal_element.cpp", + "$ace_root/frameworks/core/components/stage/stage_element.cpp", + "$ace_root/frameworks/core/components/tween/tween_element.cpp", + "$ace_root/frameworks/core/pipeline/base/element.cpp", + "$ace_root/frameworks/core/pipeline/base/render_element.cpp", + "$ace_root/frameworks/core/pipeline/base/sole_child_element.cpp", + + # event + "$ace_root/frameworks/core/components/display/render_display.cpp", + "$ace_root/frameworks/core/components/focus_animation/render_focus_animation.cpp", + "$ace_root/frameworks/core/components/image/render_image.cpp", + "$ace_root/frameworks/core/event/back_end_event_manager.cpp", + "$ace_root/frameworks/core/event/multimodal/multimodal_manager.cpp", + "$ace_root/frameworks/core/event/multimodal/multimodal_scene.cpp", + "$ace_root/frameworks/core/gestures/drag_recognizer.cpp", + + # image + "$ace_root/frameworks/core/image/flutter_image_cache.cpp", + "$ace_root/frameworks/core/image/image_cache.cpp", + + # rendering + "$ace_root/frameworks/core/common/vibrator/vibrator_proxy.cpp", + "$ace_root/frameworks/core/components/refresh/render_refresh.cpp", + "$ace_root/frameworks/core/components/root/render_root.cpp", + "$ace_root/frameworks/core/components/scroll/render_multi_child_scroll.cpp", + "$ace_root/frameworks/core/components/scroll/render_scroll.cpp", + "$ace_root/frameworks/core/components/scroll/render_single_child_scroll.cpp", + "$ace_root/frameworks/core/components/scroll/scroll_bar_controller.cpp", + "$ace_root/frameworks/core/components/stack/render_stack.cpp", + "$ace_root/frameworks/core/components/stage/render_stage.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/mock_flutter_font_manager.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/mock_render_node_factory.cpp", + "$ace_root/frameworks/core/pipeline/base/render_node.cpp", + "image_test_utils.cpp", + "render_image_test.cpp", + "render_imagefit_none_test.cpp", + "render_imagefit_others_test.cpp", + + # focus + "$ace_root/frameworks/core/animation/animator.cpp", + "$ace_root/frameworks/core/animation/anticipate_curve.cpp", + "$ace_root/frameworks/core/animation/cubic_curve.cpp", + "$ace_root/frameworks/core/animation/curves.cpp", + "$ace_root/frameworks/core/animation/scheduler.cpp", + "$ace_root/frameworks/core/focus/focus_node.cpp", + + # others + "$ace_root/frameworks/core/components/common/properties/alignment.cpp", + "$ace_root/frameworks/core/components/common/properties/border.cpp", + "$ace_root/frameworks/core/components/common/properties/border_edge.cpp", + "$ace_root/frameworks/core/components/common/properties/color.cpp", + "$ace_root/frameworks/core/components/common/properties/decoration.cpp", + "$ace_root/frameworks/core/components/common/properties/scroll_bar.cpp", + "$ace_root/frameworks/core/components/common/properties/text_style.cpp", + "$ace_root/frameworks/core/components/theme/app_theme.cpp", + "$ace_root/frameworks/core/components/theme/theme_attributes.cpp", + "$ace_root/frameworks/core/components/theme/theme_constants.cpp", + "$ace_root/frameworks/core/components/theme/theme_manager.cpp", + "$ace_root/frameworks/core/components/theme/theme_utils.cpp", + "$root_out_dir/ace/framework/core/components/theme/theme_constants_default.cpp", + + #mock + "$ace_root/frameworks/core/components/test/unittest/mock/ace_trace_mock.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/event_report_mock.cpp", + "$ace_root/frameworks/core/mock/mock_ace_application_info.cpp", + "$ace_root/frameworks/core/mock/mock_system_properties.cpp", + ] + + # add sources only needed by wearable like watch. + if (is_wearable_product) { + sources += [ "$root_out_dir/ace/framework/core/components/theme/theme_constants_watch.cpp" ] + } + + # add sources needed by phone and TV. wearable like watch do not need them + if (!is_wearable_product) { + sources += [ + # theme + "$root_out_dir/ace/framework/core/components/theme/theme_constants_tv.cpp", + ] + } + + configs = [ + "//third_party/cJSON:cJSON_config", + "$ace_root:ace_test_config", + "$flutter_root:flutter_config", + "$flutter_root:icu_config_ohos", + ":config_render_test", + ] + + deps = [ + "$ace_root:third_party_cjson", + "$ace_root/frameworks/core/components/theme:build_theme_code", + "$flutter_root:ace_skia_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + external_deps = [ "hiviewdfx_hilog_native:libhilog" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_render_test") { + visibility = [ ":*" ] + include_dirs = [] +} + +group("unittest") { + testonly = true + deps = [ + ":ImageCreatorTest", + ":RenderImageTest", + ] +} diff --git a/frameworks/core/components/test/unittest/image/image_creator_test.cpp b/frameworks/core/components/test/unittest/image/image_creator_test.cpp new file mode 100644 index 00000000..0ec16d21 --- /dev/null +++ b/frameworks/core/components/test/unittest/image/image_creator_test.cpp @@ -0,0 +1,186 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "core/components/common/layout/constants.h" +#include "core/components/common/properties/color.h" +#include "core/components/image/image_component.h" +#include "core/components/test/json/component_factory.h" +#include "core/components/test/json/image_creator.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +constexpr double LEFT = -1.0; +constexpr double TOP = -1.0; +constexpr double ALIGNMENT_CENTER = 0.0; +constexpr double IMAGE_WIDTH_DEFAULT = -1.0; +constexpr double IMAGE_HEIGHT_DEFAULT = -1.0; +constexpr double IMAGE_WIDTH_JSON = 300.0; +constexpr double IMAGE_HEIGHT_JSON = 200.0; +const ImageRepeat IMAGE_REPEAT_JSON = ImageRepeat::REPEAT; +const ImageRepeat IMAGE_NO_REPEAT = ImageRepeat::NOREPEAT; +const Color IMAGE_COLOR_BLACK = Color(255); +const Color IMAGE_COLOR_TRANSPARENT = Color::TRANSPARENT; +const ImageFit IMAGE_FIT_JSON = ImageFit::CONTAIN; +const std::string IMAGE_ALT_BLANK_JSON = "blank"; +const std::string IMAGE_SRC_JSON = "file://data/data/com.example.test/res/example.jpg"; + +} // namespace + +class ImageCreatorTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); +}; + +void ImageCreatorTest::SetUpTestCase() {} +void ImageCreatorTest::TearDownTestCase() {} +void ImageCreatorTest::SetUp() {} +void ImageCreatorTest::TearDown() {} + +/** + * @tc.name: ImageCreator001 + * @tc.desc: Verify that ImageCreator can parse json when all attributes are set. + * @tc.type: FUNC + * @tc.require: AR000DBAPR AR000DAQUL AR000DAQUM AR000DAQUN AR000DAQUO AR000DAQUP AR000DAQUR + * @tc.author: chenxuankai + */ +HWTEST_F(ImageCreatorTest, ImageCreator001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of Image with all attributes. + */ + const std::string jsonImageStr = "" + "{ " + " \"className\": \"Image\", \"width\": 300, \"height\": 200, " + " \"alignment\": { \"horizontal\": \"left\", \"vertical\": \"top\" }, " + " \"color\": { \"className\": \"Color\", \"value\": 255 }, " + " \"imageFit\": \"contain\", \"imageRepeat\": 0, \"alt\": \"blank\", " + " \"src\": \"file://data/data/com.example.test/res/example.jpg\" " + "}"; + /** + * @tc.steps: step2. call CreateFromJson interface and get ImageComponent. + */ + const auto dslBuf = reinterpret_cast(jsonImageStr.c_str()); + size_t dslLen = jsonImageStr.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + RefPtr imageComponent = AceType::DynamicCast(component); + + /** + * @tc.steps: step3. Verify whether the attributes of ImageComponent is as set. + * @tc.expected: step3. The attributes of ImageComponent is as set. + */ + ASSERT_TRUE(imageComponent != nullptr); + ASSERT_TRUE(NearEqual(imageComponent->GetWidth().Value(), IMAGE_WIDTH_JSON)); + ASSERT_TRUE(NearEqual(imageComponent->GetHeight().Value(), IMAGE_HEIGHT_JSON)); + ASSERT_TRUE(NearEqual(imageComponent->GetAlignment().GetHorizontal(), LEFT)); + ASSERT_TRUE(NearEqual(imageComponent->GetAlignment().GetVertical(), TOP)); + ASSERT_TRUE(imageComponent->GetColor() == IMAGE_COLOR_BLACK); + ASSERT_TRUE(imageComponent->GetImageFit() == IMAGE_FIT_JSON); + ASSERT_TRUE(imageComponent->GetImageRepeat() == IMAGE_REPEAT_JSON); + ASSERT_TRUE(imageComponent->GetSrc() == IMAGE_SRC_JSON); + ASSERT_TRUE(imageComponent->GetAlt() == IMAGE_ALT_BLANK_JSON); +} + +/** + * @tc.name: ImageCreator002 + * @tc.desc: Verify that ImageCreator can parse json with no attributes set. + * @tc.type: FUNC + * @tc.require: AR000DBAPR AR000DAQUL AR000DAQUM AR000DAQUN AR000DAQUO AR000DAQUP AR000DAQUR + * @tc.author: chenxuankai + */ +HWTEST_F(ImageCreatorTest, ImageCreator002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of Image with no attributes. + */ + const std::string jsonImageStr = "" + "{ " + " \"className\": \"Image\" " + "}"; + /** + * @tc.steps: step2. call CreateFromJson interface and get ImageComponent. + */ + const auto dslBuf = reinterpret_cast(jsonImageStr.c_str()); + size_t dslLen = jsonImageStr.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + RefPtr imageComponent = AceType::DynamicCast(component); + + /** + * @tc.steps: step3. Verify whether the attributes of ImageComponent is as default. + * @tc.expected: step3. The attributes of ImageComponent is as default. + */ + ASSERT_TRUE(imageComponent != nullptr); + ASSERT_TRUE(NearEqual(imageComponent->GetWidth().Value(), IMAGE_WIDTH_DEFAULT)); + ASSERT_TRUE(NearEqual(imageComponent->GetHeight().Value(), IMAGE_HEIGHT_DEFAULT)); + ASSERT_TRUE(NearEqual(imageComponent->GetAlignment().GetHorizontal(), ALIGNMENT_CENTER)); + ASSERT_TRUE(NearEqual(imageComponent->GetAlignment().GetVertical(), ALIGNMENT_CENTER)); + ASSERT_TRUE(imageComponent->GetColor() == IMAGE_COLOR_TRANSPARENT); + ASSERT_TRUE(imageComponent->GetImageFit() == IMAGE_FIT_JSON); + ASSERT_TRUE(imageComponent->GetImageRepeat() == IMAGE_NO_REPEAT); + ASSERT_TRUE(imageComponent->GetSrc().empty()); + ASSERT_TRUE(imageComponent->GetAlt().empty()); +} + +/** + * @tc.name: ImageCreator003 + * @tc.desc: Verify that ImageCreator can parse json when all attributes are set incorrectly. + * @tc.type: FUNC + * @tc.require: AR000DBAPR AR000DAQUL AR000DAQUM AR000DAQUN AR000DAQUO AR000DAQUP AR000DAQUR + * @tc.author: chenxuankai + */ +HWTEST_F(ImageCreatorTest, ImageCreator003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of Image with all attributes. + */ + const std::string jsonImageStr = "" + "{ " + " \"className\": \"Image\", \"imageFit\": 0, \"imageRepeat\": -3, " + " \"alignment\": \"BOTTOM_RIGHT\", \"color\": \"RED\", \"src\": 12, " + " \"width\": \"wrap-content\", \"height\": \"wrap-content\", \"alt\": 1 " + "}"; + /** + * @tc.steps: step2. call CreateFromJson interface and get ImageComponent. + */ + const auto dslBuf = reinterpret_cast(jsonImageStr.c_str()); + size_t dslLen = jsonImageStr.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + RefPtr imageComponent = AceType::DynamicCast(component); + + /** + * @tc.steps: step3. Verify whether the attributes of ImageComponent is as default. + * @tc.expected: step3. The attributes of ImageComponent is as default. + */ + ASSERT_TRUE(imageComponent != nullptr); + ASSERT_TRUE(NearEqual(imageComponent->GetWidth().Value(), IMAGE_WIDTH_DEFAULT)); + ASSERT_TRUE(NearEqual(imageComponent->GetHeight().Value(), IMAGE_HEIGHT_DEFAULT)); + ASSERT_TRUE(NearEqual(imageComponent->GetAlignment().GetHorizontal(), ALIGNMENT_CENTER)); + ASSERT_TRUE(NearEqual(imageComponent->GetAlignment().GetVertical(), ALIGNMENT_CENTER)); + ASSERT_TRUE(imageComponent->GetColor() == IMAGE_COLOR_TRANSPARENT); + ASSERT_TRUE(imageComponent->GetImageFit() == IMAGE_FIT_JSON); + ASSERT_TRUE(imageComponent->GetImageRepeat() == IMAGE_NO_REPEAT); + ASSERT_TRUE(imageComponent->GetSrc().empty()); + ASSERT_TRUE(imageComponent->GetAlt().empty()); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/image/image_test_utils.cpp b/frameworks/core/components/test/unittest/image/image_test_utils.cpp new file mode 100644 index 00000000..326d1705 --- /dev/null +++ b/frameworks/core/components/test/unittest/image/image_test_utils.cpp @@ -0,0 +1,149 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/unittest/image/image_test_utils.h" + +#include "gtest/gtest.h" + +#include "adapter/ohos/osal/fake_asset_manager.h" +#include "adapter/ohos/osal/fake_task_executor.h" +#include "core/animation/animator.h" +#include "core/animation/card_transition_controller.h" +#include "core/animation/shared_transition_controller.h" +#include "core/components/align/render_align.h" +#include "core/components/image/image_component.h" +#include "core/components/test/json/json_frontend.h" +#include "core/mock/mock_resource_register.h" + +namespace OHOS::Ace { + +void VerifyImageFit(ImageFitConfig&& imageFitConfig, const Rect& expectSrcRect, const Rect& expectDstRect) +{ + /** + * @tc.steps: step1. Create an object of ImageComponent and set expected properties. + */ + RefPtr image = AceType::MakeRefPtr(""); + image->SetAlignment(imageFitConfig.alignment); + image->SetImageFit(imageFitConfig.imageFit); + + /** + * @tc.steps: step2. Create an object of FlutterRenderImage initialized with ImageComponent and then set properties. + */ + RefPtr renderImage = AceType::MakeRefPtr(); + auto mockContext = GetMockContext(); + renderImage->Attach(mockContext); + renderImage->Update(image); + renderImage->SetLayoutSize(imageFitConfig.dstRect.GetSize()); + renderImage->ApplyImageFit(imageFitConfig.srcRect, imageFitConfig.dstRect); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties are calculated correctly. + */ + ASSERT_TRUE(imageFitConfig.srcRect == expectSrcRect); + ASSERT_TRUE(imageFitConfig.dstRect == expectDstRect); +} + +void VerifyRectSize(const std::list& rectList, const Size& expectRectSize) +{ + for (const auto& rect : rectList) { + ASSERT_TRUE(rect.GetSize() == expectRectSize); + } +} + +std::list GetRectList(const ImageRepeat&& imageRepeat, const Size& parentSize) +{ + Rect fundamentalRect = Rect(Offset(EXTRA_SMALL_LENGTH, EXTRA_SMALL_LENGTH), Size(SMALL_LENGTH, SMALL_LENGTH)); + RefPtr image = AceType::MakeRefPtr(""); + RefPtr renderImage = AceType::MakeRefPtr(); + auto mockContext = GetMockContext(); + renderImage->Attach(mockContext); + renderImage->Update(image); + renderImage->GenerateRepeatRects(fundamentalRect, parentSize, imageRepeat); + return renderImage->GetRectList(); +} + +RefPtr RenderContext::Create() +{ + return AceType::MakeRefPtr(); +} + +RefPtr RenderImage::Create() +{ + return AceType::MakeRefPtr(); +} + +std::unique_ptr PlatformWindow::Create(AceView* aceView) +{ + return std::make_unique(aceView); +} + +RefPtr RenderRoot::Create() +{ + return AceType::MakeRefPtr(); +} + +RefPtr RenderStack::Create() +{ + return AceType::MakeRefPtr(); +} + +RefPtr RenderDisplay::Create() +{ + return AceType::MakeRefPtr(); +} + +RefPtr CreateRenderRoot(const Size& maxSize) +{ + RefPtr root = AceType::MakeRefPtr(); + const Rect paintRect(Offset(), maxSize); + root->SetPaintRect(paintRect); + return root; +} + +RefPtr CreateRenderImage(double width, double height) +{ + RefPtr renderImage = AceType::MakeRefPtr(); + RefPtr imageComponent = AceType::MakeRefPtr(""); + imageComponent->SetWidth(Dimension(width)); + imageComponent->SetHeight(Dimension(height)); + auto mockContext = GetMockContext(); + renderImage->Attach(mockContext); + renderImage->Update(imageComponent); + return renderImage; +} + +RefPtr GetMockContext() +{ + auto platformWindow = PlatformWindow::Create(nullptr); + auto window = std::make_unique(std::move(platformWindow)); + auto taskExecutor = Referenced::MakeRefPtr(); + auto assetManager = Referenced::MakeRefPtr(); + auto resRegister = Referenced::MakeRefPtr(); + auto fakeFrontend = Frontend::CreateDefault(); + return AceType::MakeRefPtr( + std::move(window), taskExecutor, assetManager, resRegister, fakeFrontend, 0); +} + +SharedTransitionController::SharedTransitionController(const WeakPtr& context) {}; + +CardTransitionController::CardTransitionController(const WeakPtr& context) {}; + +RRect CardTransitionController::GetCardRect(const ComposeId& composeId) const +{ + return RRect(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/image/image_test_utils.h b/frameworks/core/components/test/unittest/image/image_test_utils.h new file mode 100644 index 00000000..7f92490e --- /dev/null +++ b/frameworks/core/components/test/unittest/image/image_test_utils.h @@ -0,0 +1,119 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_IMAGE_IMAGE_TEST_UTILS_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_IMAGE_IMAGE_TEST_UTILS_H + +#include "base/geometry/offset.h" +#include "base/geometry/rect.h" +#include "core/common/window.h" +#include "core/components/common/properties/alignment.h" +#include "core/components/display/render_display.h" +#include "core/components/root/render_root.h" +#include "core/components/stack/render_stack.h" +#include "core/pipeline/base/constants.h" + +#define protected public +#include "core/components/image/render_image.h" + +namespace OHOS::Ace { + +const double EXTRA_SMALL_LENGTH = 100.0; +const double SMALL_LENGTH = 200.0; +const double MINUS_EXTRA_SMALL_LENGTH = -100.0; +const double MIDDLE_LENGTH = 300.0; +const double LARGE_LENGTH = 400.0; +const double EXTRA_LARGE_LENGTH = 500.0; +const double DEFAULT_LENGTH = -1.0; +const int32_t REPEAT_LIST_LENGTH = 4; +const int32_t REPEATX_LIST_LENGTH = 2; +const int32_t REPEATY_LIST_LENGTH = 2; +const int32_t NOREPEAT_LIST_LENGTH = 1; +const Size PARENT_SIZE = Size(300.0, 300.0); + +class MockRenderImage final : public RenderImage { + DECLARE_ACE_TYPE(MockRenderImage, RenderImage); + +public: + MockRenderImage() = default; + ~MockRenderImage() override = default; + + Size Measure() override + { + return Size(LARGE_LENGTH, LARGE_LENGTH); + } +}; + +class MockRenderRoot final : public RenderRoot { + DECLARE_ACE_TYPE(MockRenderRoot, RenderRoot); + +public: + MockRenderRoot() = default; + ~MockRenderRoot() override = default; +}; + +class MockWindow final : public PlatformWindow { +public: + explicit MockWindow(AceView* aceView) {} + ~MockWindow() override = default; + + // Platform window interface + void RequestFrame() override {} + void RegisterVsyncCallback(AceVsyncCallback&& callback) override {} + void SetRootRenderNode(const RefPtr& root) override {} + +private: + ACE_DISALLOW_COPY_AND_MOVE(MockWindow); +}; + +class MockRenderContext : public RenderContext { +public: + void Repaint(const RefPtr& node) override {}; + void PaintChild(const RefPtr& child, const Offset& offset) override {}; +}; + +class MockRenderStack : public RenderStack { + DECLARE_ACE_TYPE(MockRenderStack, RenderStack); +}; + +class MockRenderDisplay : public RenderDisplay { + DECLARE_ACE_TYPE(MockRenderDisplay, RenderDisplay); +}; + +struct ImageFitConfig final { + ImageFitConfig( + const Alignment& alignment, const ImageFit& imageFit, const Size& srcRectSize, const Size& dstRectSize) + : alignment(alignment), imageFit(imageFit), srcRectSize(srcRectSize), dstRectSize(dstRectSize), + srcRect(Offset::Zero(), srcRectSize), dstRect(Offset::Zero(), dstRectSize) + {} + ~ImageFitConfig() = default; + + Alignment alignment; + ImageFit imageFit = ImageFit::CONTAIN; + Size srcRectSize; + Size dstRectSize; + Rect srcRect; + Rect dstRect; +}; + +void VerifyImageFit(ImageFitConfig&& imageFitConfig, const Rect& expectSrcRect, const Rect& expectDstRect); +void VerifyRectSize(const std::list& rectList, const Size& expectRectSize); +std::list GetRectList(const ImageRepeat&& imageRepeat, const Size& parentSize); +RefPtr CreateRenderRoot(const Size& maxSize); +RefPtr CreateRenderImage(double width, double height); +RefPtr GetMockContext(); +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_IMAGE_IMAGE_TEST_UTILS_H diff --git a/frameworks/core/components/test/unittest/image/render_image_test.cpp b/frameworks/core/components/test/unittest/image/render_image_test.cpp new file mode 100644 index 00000000..71e35437 --- /dev/null +++ b/frameworks/core/components/test/unittest/image/render_image_test.cpp @@ -0,0 +1,267 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "core/components/test/unittest/image/image_test_utils.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { + +class RenderImageTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; +}; + +void RenderImageTest::SetUpTestCase() {} +void RenderImageTest::TearDownTestCase() {} +void RenderImageTest::SetUp() {} +void RenderImageTest::TearDown() {} + +/** + * @tc.name: GenerateRepeatRects001 + * @tc.desc: Verify that GenerateRepeatRects can generate all rects in all direction. + * @tc.type: FUNC + * @tc.require: AR000DAQUP + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageTest, GenerateRepeatRects001, TestSize.Level1) +{ + /** + * @tc.steps: step1. build a fundamentalRect, set parentSize and imageRepeat and then call GenerateRepeatRects. + */ + auto rectList = GetRectList(ImageRepeat::REPEAT, PARENT_SIZE); + + /** + * @tc.steps: step2. Verify whether the receList has 4 expected rects. + * @tc.expected: step2. The rectList has 4 expected rects. + */ + ASSERT_TRUE(rectList.size() == REPEAT_LIST_LENGTH); + VerifyRectSize(rectList, Size(SMALL_LENGTH, SMALL_LENGTH)); + auto iter = rectList.begin(); + ASSERT_TRUE(iter->GetOffset() == Offset(MINUS_EXTRA_SMALL_LENGTH, MINUS_EXTRA_SMALL_LENGTH)); + ASSERT_TRUE((++iter)->GetOffset() == Offset(EXTRA_SMALL_LENGTH, MINUS_EXTRA_SMALL_LENGTH)); + ASSERT_TRUE((++iter)->GetOffset() == Offset(MINUS_EXTRA_SMALL_LENGTH, EXTRA_SMALL_LENGTH)); + ASSERT_TRUE((++iter)->GetOffset() == Offset(EXTRA_SMALL_LENGTH, EXTRA_SMALL_LENGTH)); +} + +/** + * @tc.name: GenerateRepeatRects002 + * @tc.desc: Verify that GenerateRepeatRects can generate all rects horizontally. + * @tc.type: FUNC + * @tc.require: AR000DAQUP + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageTest, GenerateRepeatRects002, TestSize.Level1) +{ + /** + * @tc.steps: step1. build a fundamentalRect, set parentSize and imageRepeat and then call GenerateRepeatRects. + */ + auto rectList = GetRectList(ImageRepeat::REPEATX, PARENT_SIZE); + + /** + * @tc.steps: step2. Verify whether the receList has 2 expected rects. + * @tc.expected: step2. The rectList has 2 expected rects. + */ + ASSERT_TRUE(rectList.size() == REPEATX_LIST_LENGTH); + VerifyRectSize(rectList, Size(SMALL_LENGTH, SMALL_LENGTH)); + auto iter = rectList.begin(); + ASSERT_TRUE(iter->GetOffset() == Offset(MINUS_EXTRA_SMALL_LENGTH, EXTRA_SMALL_LENGTH)); + ASSERT_TRUE((++iter)->GetOffset() == Offset(EXTRA_SMALL_LENGTH, EXTRA_SMALL_LENGTH)); +} + +/** + * @tc.name: GenerateRepeatRects003 + * @tc.desc: Verify that GenerateRepeatRects can generate all rects vertically. + * @tc.type: FUNC + * @tc.require: AR000DAQUP + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageTest, GenerateRepeatRects003, TestSize.Level1) +{ + /** + * @tc.steps: step1. build a fundamentalRect, set parentSize and imageRepeat and then call GenerateRepeatRects. + */ + auto rectList = GetRectList(ImageRepeat::REPEATY, PARENT_SIZE); + + /** + * @tc.steps: step2. Verify whether the receList has 2 expected rects. + * @tc.expected: step2. The rectList has 2 expected rects. + */ + ASSERT_TRUE(rectList.size() == REPEATY_LIST_LENGTH); + VerifyRectSize(rectList, Size(SMALL_LENGTH, SMALL_LENGTH)); + auto iter = rectList.begin(); + ASSERT_TRUE(iter->GetOffset() == Offset(EXTRA_SMALL_LENGTH, MINUS_EXTRA_SMALL_LENGTH)); + ASSERT_TRUE((++iter)->GetOffset() == Offset(EXTRA_SMALL_LENGTH, EXTRA_SMALL_LENGTH)); +} + +/** + * @tc.name: GenerateRepeatRects004 + * @tc.desc: Verify that GenerateRepeatRects can generate a single rect. + * @tc.type: FUNC + * @tc.require: AR000DAQUP + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageTest, GenerateRepeatRects004, TestSize.Level1) +{ + /** + * @tc.steps: step1. build a fundamentalRect, set parentSize and imageRepeat and then call GenerateRepeatRects. + */ + auto rectList = GetRectList(ImageRepeat::NOREPEAT, PARENT_SIZE); + + /** + * @tc.steps: step2. Verify whether the receList has 1 expected rects. + * @tc.expected: step2. The rectList has 1 expected rects. + */ + ASSERT_TRUE(rectList.size() == NOREPEAT_LIST_LENGTH); + VerifyRectSize(rectList, Size(SMALL_LENGTH, SMALL_LENGTH)); + auto iter = rectList.begin(); + ASSERT_TRUE(iter->GetOffset() == Offset(EXTRA_SMALL_LENGTH, EXTRA_SMALL_LENGTH)); +} + +/** + * @tc.name: GenerateRepeatRects005 + * @tc.desc: Verify that GenerateRepeatRects can work correctly when parentSize . + * @tc.type: FUNC + * @tc.require: AR000DAQUP + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageTest, GenerateRepeatRects005, TestSize.Level1) +{ + /** + * @tc.steps: step1. build a fundamentalRect, set parentSize and imageRepeat and then call GenerateRepeatRects. + */ + auto rectList = GetRectList(ImageRepeat::NOREPEAT, Size(EXTRA_SMALL_LENGTH, EXTRA_SMALL_LENGTH)); + + /** + * @tc.steps: step2. Verify whether the receList has 1 expected rects. + * @tc.expected: step2. The rectList has 1 expected rects. + */ + ASSERT_TRUE(rectList.size() == NOREPEAT_LIST_LENGTH); + VerifyRectSize(rectList, Size(SMALL_LENGTH, SMALL_LENGTH)); + auto iter = rectList.begin(); + ASSERT_TRUE(iter->GetOffset() == Offset(EXTRA_SMALL_LENGTH, EXTRA_SMALL_LENGTH)); +} + +/** + * @tc.name: DecideLayoutSize001 + * @tc.desc: Verify that RenderImage can decide a right layout size when width and height are set and maxSize > piSize. + * @tc.type: FUNC + * @tc.require: AR000DAQUM + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageTest, DecideLayoutSize001, TestSize.Level1) +{ + /** + * @tc.steps: step1. create renderImage with expected maxSize, width and height and then call PerformLayout() + */ + RefPtr root = CreateRenderRoot(Size(LARGE_LENGTH, SMALL_LENGTH)); + RefPtr renderImage = CreateRenderImage(LARGE_LENGTH, SMALL_LENGTH); + auto mockContext = GetMockContext(); + renderImage->Attach(mockContext); + root->AddChild(renderImage); + root->PerformLayout(); + + /** + * @tc.steps: step2. Verify that layout size is Size(LARGE_LENGTH, SMALL_LENGTH). + * @tc.expected: step2. layout size is Size(LARGE_LENGTH, SMALL_LENGTH). + */ + ASSERT_TRUE(renderImage->GetLayoutSize() == Size(LARGE_LENGTH, SMALL_LENGTH)); +} + +/** + * @tc.name: DecideLayoutSize002 + * @tc.desc: Verify that RenderImage can decide a right layout size when width and height are set and maxSize < picSize. + * @tc.type: FUNC + * @tc.require: AR000DAQUM + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageTest, DecideLayoutSize002, TestSize.Level1) +{ + /** + * @tc.steps: step1. create renderImage with expected maxSize, width and height and then call PerformLayout() + */ + RefPtr root = CreateRenderRoot(Size(SMALL_LENGTH, EXTRA_SMALL_LENGTH)); + RefPtr renderImage = CreateRenderImage(LARGE_LENGTH, SMALL_LENGTH); + auto mockContext = GetMockContext(); + renderImage->Attach(mockContext); + root->AddChild(renderImage); + root->PerformLayout(); + + /** + * @tc.steps: step2. Verify that layout size is Size(SMALL_LENGTH, EXTRA_SMALL_LENGTH). + * @tc.expected: step2. layout size is Size(SMALL_LENGTH, EXTRA_SMALL_LENGTH). + */ + ASSERT_TRUE(renderImage->GetLayoutSize() == Size(SMALL_LENGTH, EXTRA_SMALL_LENGTH)); +} + +/** + * @tc.name: DecideLayoutSize003 + * @tc.desc: Verify that RenderImage can decide a right layout size when maxSize > picSize with no width and height. + * @tc.type: FUNC + * @tc.require: AR000DAQUM + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageTest, DecideLayoutSize003, TestSize.Level1) +{ + /** + * @tc.steps: step1. create renderImage with expected maxSize, width and height and then call PerformLayout() + */ + RefPtr root = CreateRenderRoot(Size(EXTRA_LARGE_LENGTH, LARGE_LENGTH)); + RefPtr renderImage = CreateRenderImage(DEFAULT_LENGTH, DEFAULT_LENGTH); + auto mockContext = GetMockContext(); + renderImage->Attach(mockContext); + root->AddChild(renderImage); + root->PerformLayout(); + + /** + * @tc.steps: step2. Verify that layout size is Size(LARGE_LENGTH, LARGE_LENGTH). + * @tc.expected: step2. layout size is Size(LARGE_LENGTH, LARGE_LENGTH). + */ + ASSERT_TRUE(renderImage->GetLayoutSize() == Size(LARGE_LENGTH, LARGE_LENGTH)); +} + +/** + * @tc.name: DecideLayoutSize004 + * @tc.desc: Verify that RenderImage can decide a right layout size when maxSize < picSize with no width and height. + * @tc.type: FUNC + * @tc.require: AR000DAQUM + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageTest, DecideLayoutSize004, TestSize.Level1) +{ + /** + * @tc.steps: step1. create renderImage with expected maxSize, width and height and then call PerformLayout() + */ + RefPtr root = CreateRenderRoot(Size(SMALL_LENGTH, EXTRA_SMALL_LENGTH)); + RefPtr renderImage = CreateRenderImage(DEFAULT_LENGTH, DEFAULT_LENGTH); + auto mockContext = GetMockContext(); + renderImage->Attach(mockContext); + root->AddChild(renderImage); + root->PerformLayout(); + + /** + * @tc.steps: step2. Verify that layout size is Size(EXTRA_SMALL_LENGTH, EXTRA_SMALL_LENGTH). + * @tc.expected: step2. layout size is Size(EXTRA_SMALL_LENGTH, EXTRA_SMALL_LENGTH). + */ + ASSERT_TRUE(renderImage->GetLayoutSize() == Size(SMALL_LENGTH, EXTRA_SMALL_LENGTH)); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/image/render_imagefit_none_test.cpp b/frameworks/core/components/test/unittest/image/render_imagefit_none_test.cpp new file mode 100644 index 00000000..757a1f54 --- /dev/null +++ b/frameworks/core/components/test/unittest/image/render_imagefit_none_test.cpp @@ -0,0 +1,614 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "core/components/test/unittest/image/image_test_utils.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { + +class RenderImageFitNoneTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); +}; + +void RenderImageFitNoneTest::SetUpTestCase() {} +void RenderImageFitNoneTest::TearDownTestCase() {} +void RenderImageFitNoneTest::SetUp() {} +void RenderImageFitNoneTest::TearDown() {} + +/** + * @tc.name: ImageFitNone001 + * @tc.desc: Verify the implementation of imageFit : NONE when srcHeight > dstHeight and srcWidth > dstWidth, + * alignment : TOP_LEFT + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitNoneTest, ImageFitNone001, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::TOP_LEFT, ImageFit::NONE, Size(EXTRA_LARGE_LENGTH, LARGE_LENGTH), + Size(MIDDLE_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, 0.0), Size(MIDDLE_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, 0.0), Size(MIDDLE_LENGTH, SMALL_LENGTH))); +} + +/** + * @tc.name: ImageFitNone002 + * @tc.desc: Verify the implementation of imageFit : NONE when srcHeight > dstHeight and srcWidth > dstWidth, + * alignment : TOP_CENTER + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitNoneTest, ImageFitNone002, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::TOP_CENTER, ImageFit::NONE, Size(EXTRA_LARGE_LENGTH, LARGE_LENGTH), + Size(MIDDLE_LENGTH, SMALL_LENGTH)), + Rect(Offset(EXTRA_SMALL_LENGTH, 0.0), Size(MIDDLE_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, 0.0), Size(MIDDLE_LENGTH, SMALL_LENGTH))); +} + +/** + * @tc.name: ImageFitNone003 + * @tc.desc: Verify the implementation of imageFit : NONE when srcHeight > dstHeight and srcWidth > dstWidth, + * alignment : TOP_RIGHT + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitNoneTest, ImageFitNone003, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::TOP_RIGHT, ImageFit::NONE, Size(EXTRA_LARGE_LENGTH, LARGE_LENGTH), + Size(MIDDLE_LENGTH, SMALL_LENGTH)), + Rect(Offset(SMALL_LENGTH, 0.0), Size(MIDDLE_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, 0.0), Size(MIDDLE_LENGTH, SMALL_LENGTH))); +} + +/** + * @tc.name: ImageFitNone004 + * @tc.desc: Verify the implementation of imageFit : NONE when srcHeight > dstHeight and srcWidth > dstWidth, + * alignment : CENTER_LEFT + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitNoneTest, ImageFitNone004, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::CENTER_LEFT, ImageFit::NONE, Size(EXTRA_LARGE_LENGTH, LARGE_LENGTH), + Size(MIDDLE_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, EXTRA_SMALL_LENGTH), Size(MIDDLE_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, 0.0), Size(MIDDLE_LENGTH, SMALL_LENGTH))); +} + +/** + * @tc.name: ImageFitNone005 + * @tc.desc: Verify the implementation of imageFit : NONE when srcHeight > dstHeight and srcWidth > dstWidth, + * alignment : CENTER + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitNoneTest, ImageFitNone005, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::CENTER, ImageFit::NONE, Size(EXTRA_LARGE_LENGTH, LARGE_LENGTH), + Size(MIDDLE_LENGTH, SMALL_LENGTH)), + Rect(Offset(EXTRA_SMALL_LENGTH, EXTRA_SMALL_LENGTH), Size(MIDDLE_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, 0.0), Size(MIDDLE_LENGTH, SMALL_LENGTH))); +} + +/** + * @tc.name: ImageFitNone006 + * @tc.desc: Verify the implementation of imageFit : NONE when srcHeight > dstHeight and srcWidth > dstWidth, + * alignment : CENTER_RIGHT + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitNoneTest, ImageFitNone006, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::CENTER_RIGHT, ImageFit::NONE, Size(EXTRA_LARGE_LENGTH, LARGE_LENGTH), + Size(MIDDLE_LENGTH, SMALL_LENGTH)), + Rect(Offset(SMALL_LENGTH, EXTRA_SMALL_LENGTH), Size(MIDDLE_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, 0.0), Size(MIDDLE_LENGTH, SMALL_LENGTH))); +} + +/** + * @tc.name: ImageFitNone007 + * @tc.desc: Verify the implementation of imageFit : NONE when srcHeight > dstHeight and srcWidth > dstWidth, + * alignment : BOTTOM_LEFT + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitNoneTest, ImageFitNone007, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::BOTTOM_LEFT, ImageFit::NONE, Size(EXTRA_LARGE_LENGTH, LARGE_LENGTH), + Size(MIDDLE_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, SMALL_LENGTH), Size(MIDDLE_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, 0.0), Size(MIDDLE_LENGTH, SMALL_LENGTH))); +} + +/** + * @tc.name: ImageFitNone008 + * @tc.desc: Verify the implementation of imageFit : NONE when srcHeight > dstHeight and srcWidth > dstWidth, + * alignment : BOTTOM_CENTER + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitNoneTest, ImageFitNone008, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::BOTTOM_CENTER, ImageFit::NONE, Size(EXTRA_LARGE_LENGTH, LARGE_LENGTH), + Size(MIDDLE_LENGTH, SMALL_LENGTH)), + Rect(Offset(EXTRA_SMALL_LENGTH, SMALL_LENGTH), Size(MIDDLE_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, 0.0), Size(MIDDLE_LENGTH, SMALL_LENGTH))); +} + +/** + * @tc.name: ImageFitNone009 + * @tc.desc: Verify the implementation of imageFit : NONE when srcHeight > dstHeight and srcWidth > dstWidth, + * alignment : BOTTOM_RIGHT + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitNoneTest, ImageFitNone009, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::BOTTOM_RIGHT, ImageFit::NONE, Size(EXTRA_LARGE_LENGTH, LARGE_LENGTH), + Size(MIDDLE_LENGTH, SMALL_LENGTH)), + Rect(Offset(SMALL_LENGTH, SMALL_LENGTH), Size(MIDDLE_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, 0.0), Size(MIDDLE_LENGTH, SMALL_LENGTH))); +} + +/** + * @tc.name: ImageFitNone010 + * @tc.desc: Verify the implementation of imageFit : NONE when srcHeight > dstHeight and srcWidth <= dstWidth, + * alignment : TOP_LEFT + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitNoneTest, ImageFitNone010, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::TOP_LEFT, ImageFit::NONE, Size(SMALL_LENGTH, LARGE_LENGTH), + Size(LARGE_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, 0.0), Size(SMALL_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, 0.0), Size(SMALL_LENGTH, SMALL_LENGTH))); +} + +/** + * @tc.name: ImageFitNone011 + * @tc.desc: Verify the implementation of imageFit : NONE when srcHeight > dstHeight and srcWidth <= dstWidth, + * alignment : TOP_CENTER + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitNoneTest, ImageFitNone011, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::TOP_CENTER, ImageFit::NONE, Size(SMALL_LENGTH, LARGE_LENGTH), + Size(LARGE_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, 0.0), Size(SMALL_LENGTH, SMALL_LENGTH)), + Rect(Offset(EXTRA_SMALL_LENGTH, 0.0), Size(SMALL_LENGTH, SMALL_LENGTH))); +} + +/** + * @tc.name: ImageFitNone012 + * @tc.desc: Verify the implementation of imageFit : NONE when srcHeight > dstHeight and srcWidth <= dstWidth, + * alignment : TOP_RIGHT + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitNoneTest, ImageFitNone012, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::TOP_RIGHT, ImageFit::NONE, Size(SMALL_LENGTH, LARGE_LENGTH), + Size(LARGE_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, 0.0), Size(SMALL_LENGTH, SMALL_LENGTH)), + Rect(Offset(SMALL_LENGTH, 0.0), Size(SMALL_LENGTH, SMALL_LENGTH))); +} + +/** + * @tc.name: ImageFitNone013 + * @tc.desc: Verify the implementation of imageFit : NONE when srcHeight > dstHeight and srcWidth <= dstWidth, + * alignment : CENTER_LEFT + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitNoneTest, ImageFitNone013, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::CENTER_LEFT, ImageFit::NONE, Size(SMALL_LENGTH, LARGE_LENGTH), + Size(LARGE_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, EXTRA_SMALL_LENGTH), Size(SMALL_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, 0.0), Size(SMALL_LENGTH, SMALL_LENGTH))); +} + +/** + * @tc.name: ImageFitNone014 + * @tc.desc: Verify the implementation of imageFit : NONE when srcHeight > dstHeight and srcWidth <= dstWidth, + * alignment : CENTER + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitNoneTest, ImageFitNone014, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::CENTER, ImageFit::NONE, Size(SMALL_LENGTH, LARGE_LENGTH), + Size(LARGE_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, EXTRA_SMALL_LENGTH), Size(SMALL_LENGTH, SMALL_LENGTH)), + Rect(Offset(EXTRA_SMALL_LENGTH, 0.0), Size(SMALL_LENGTH, SMALL_LENGTH))); +} + +/** + * @tc.name: ImageFitNone015 + * @tc.desc: Verify the implementation of imageFit : NONE when srcHeight > dstHeight and srcWidth <= dstWidth, + * alignment : CENTER_RIGHT + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitNoneTest, ImageFitNone015, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::CENTER_RIGHT, ImageFit::NONE, Size(SMALL_LENGTH, LARGE_LENGTH), + Size(LARGE_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, EXTRA_SMALL_LENGTH), Size(SMALL_LENGTH, SMALL_LENGTH)), + Rect(Offset(SMALL_LENGTH, 0.0), Size(SMALL_LENGTH, SMALL_LENGTH))); +} + +/** + * @tc.name: ImageFitNone016 + * @tc.desc: Verify the implementation of imageFit : NONE when srcHeight > dstHeight and srcWidth <= dstWidth, + * alignment : BOTTOM_LEFT + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitNoneTest, ImageFitNone016, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::BOTTOM_LEFT, ImageFit::NONE, Size(SMALL_LENGTH, LARGE_LENGTH), + Size(LARGE_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, SMALL_LENGTH), Size(SMALL_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, 0.0), Size(SMALL_LENGTH, SMALL_LENGTH))); +} + +/** + * @tc.name: ImageFitNone017 + * @tc.desc: Verify the implementation of imageFit : NONE when srcHeight > dstHeight and srcWidth <= dstWidth, + * alignment : BOTTOM_CENTER + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitNoneTest, ImageFitNone017, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::BOTTOM_CENTER, ImageFit::NONE, Size(SMALL_LENGTH, LARGE_LENGTH), + Size(LARGE_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, SMALL_LENGTH), Size(SMALL_LENGTH, SMALL_LENGTH)), + Rect(Offset(EXTRA_SMALL_LENGTH, 0.0), Size(SMALL_LENGTH, SMALL_LENGTH))); +} + +/** + * @tc.name: ImageFitNone018 + * @tc.desc: Verify the implementation of imageFit : NONE when srcHeight > dstHeight and srcWidth <= dstWidth, + * alignment : BOTTOM_RIGHT + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitNoneTest, ImageFitNone018, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::BOTTOM_RIGHT, ImageFit::NONE, Size(SMALL_LENGTH, LARGE_LENGTH), + Size(LARGE_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, SMALL_LENGTH), Size(SMALL_LENGTH, SMALL_LENGTH)), + Rect(Offset(SMALL_LENGTH, 0.0), Size(SMALL_LENGTH, SMALL_LENGTH))); +} + +/** + * @tc.name: ImageFitNone019 + * @tc.desc: Verify the implementation of imageFit : NONE when srcHeight <= dstHeight and srcWidth > dstWidth, + * alignment : TOP_LEFT + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitNoneTest, ImageFitNone019, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::TOP_LEFT, ImageFit::NONE, Size(LARGE_LENGTH, SMALL_LENGTH), + Size(SMALL_LENGTH, LARGE_LENGTH)), + Rect(Offset(0.0, 0.0), Size(SMALL_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, 0.0), Size(SMALL_LENGTH, SMALL_LENGTH))); +} + +/** + * @tc.name: ImageFitNone020 + * @tc.desc: Verify the implementation of imageFit : NONE when srcHeight <= dstHeight and srcWidth > dstWidth, + * alignment : TOP_CENTER + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitNoneTest, ImageFitNone020, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::TOP_CENTER, ImageFit::NONE, Size(LARGE_LENGTH, SMALL_LENGTH), + Size(SMALL_LENGTH, LARGE_LENGTH)), + Rect(Offset(EXTRA_SMALL_LENGTH, 0.0), Size(SMALL_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, 0.0), Size(SMALL_LENGTH, SMALL_LENGTH))); +} + +/** + * @tc.name: ImageFitNone021 + * @tc.desc: Verify the implementation of imageFit : NONE when srcHeight <= dstHeight and srcWidth > dstWidth, + * alignment : TOP_RIGHT + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitNoneTest, ImageFitNone021, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::TOP_RIGHT, ImageFit::NONE, Size(LARGE_LENGTH, SMALL_LENGTH), + Size(SMALL_LENGTH, LARGE_LENGTH)), + Rect(Offset(SMALL_LENGTH, 0.0), Size(SMALL_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, 0.0), Size(SMALL_LENGTH, SMALL_LENGTH))); +} + +/** + * @tc.name: ImageFitNone022 + * @tc.desc: Verify the implementation of imageFit : NONE when srcHeight <= dstHeight and srcWidth > dstWidth, + * alignment : CENTER_LEFT + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitNoneTest, ImageFitNone022, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::CENTER_LEFT, ImageFit::NONE, Size(LARGE_LENGTH, SMALL_LENGTH), + Size(SMALL_LENGTH, LARGE_LENGTH)), + Rect(Offset(0.0, 0.0), Size(SMALL_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, EXTRA_SMALL_LENGTH), Size(SMALL_LENGTH, SMALL_LENGTH))); +} + +/** + * @tc.name: ImageFitNone023 + * @tc.desc: Verify the implementation of imageFit : NONE when srcHeight <= dstHeight and srcWidth > dstWidth, + * alignment : CENTER + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitNoneTest, ImageFitNone023, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::CENTER, ImageFit::NONE, Size(LARGE_LENGTH, SMALL_LENGTH), + Size(SMALL_LENGTH, LARGE_LENGTH)), + Rect(Offset(EXTRA_SMALL_LENGTH, 0.0), Size(SMALL_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, EXTRA_SMALL_LENGTH), Size(SMALL_LENGTH, SMALL_LENGTH))); +} + +/** + * @tc.name: ImageFitNone024 + * @tc.desc: Verify the implementation of imageFit : NONE when srcHeight <= dstHeight and srcWidth > dstWidth, + * alignment : CENTER_RIGHT + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitNoneTest, ImageFitNone024, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::CENTER_RIGHT, ImageFit::NONE, Size(LARGE_LENGTH, SMALL_LENGTH), + Size(SMALL_LENGTH, LARGE_LENGTH)), + Rect(Offset(SMALL_LENGTH, 0.0), Size(SMALL_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, EXTRA_SMALL_LENGTH), Size(SMALL_LENGTH, SMALL_LENGTH))); +} + +/** + * @tc.name: ImageFitNone025 + * @tc.desc: Verify the implementation of imageFit : NONE when srcHeight <= dstHeight and srcWidth > dstWidth, + * alignment : BOTTOM_LEFT + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitNoneTest, ImageFitNone025, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::BOTTOM_LEFT, ImageFit::NONE, Size(LARGE_LENGTH, SMALL_LENGTH), + Size(SMALL_LENGTH, LARGE_LENGTH)), + Rect(Offset(0.0, 0.0), Size(SMALL_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, SMALL_LENGTH), Size(SMALL_LENGTH, SMALL_LENGTH))); +} + +/** + * @tc.name: ImageFitNone026 + * @tc.desc: Verify the implementation of imageFit : NONE when srcHeight <= dstHeight and srcWidth > dstWidth, + * alignment : BOTTOM_CENTER + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitNoneTest, ImageFitNone026, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::BOTTOM_CENTER, ImageFit::NONE, Size(LARGE_LENGTH, SMALL_LENGTH), + Size(SMALL_LENGTH, LARGE_LENGTH)), + Rect(Offset(EXTRA_SMALL_LENGTH, 0.0), Size(SMALL_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, SMALL_LENGTH), Size(SMALL_LENGTH, SMALL_LENGTH))); +} + +/** + * @tc.name: ImageFitNone027 + * @tc.desc: Verify the implementation of imageFit : NONE when srcHeight <= dstHeight and srcWidth > dstWidth, + * alignment : BOTTOM_RIGHT + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitNoneTest, ImageFitNone027, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::BOTTOM_RIGHT, ImageFit::NONE, Size(LARGE_LENGTH, SMALL_LENGTH), + Size(SMALL_LENGTH, LARGE_LENGTH)), + Rect(Offset(SMALL_LENGTH, 0.0), Size(SMALL_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, SMALL_LENGTH), Size(SMALL_LENGTH, SMALL_LENGTH))); +} + +/** + * @tc.name: ImageFitNone028 + * @tc.desc: Verify the implementation of imageFit : NONE when srcHeight <= dstHeight and srcWidth <= dstWidth, + * alignment : TOP_LEFT + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitNoneTest, ImageFitNone028, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::TOP_LEFT, ImageFit::NONE, Size(SMALL_LENGTH, MIDDLE_LENGTH), + Size(LARGE_LENGTH, EXTRA_LARGE_LENGTH)), + Rect(Offset(0.0, 0.0), Size(SMALL_LENGTH, MIDDLE_LENGTH)), + Rect(Offset(0.0, 0.0), Size(SMALL_LENGTH, MIDDLE_LENGTH))); +} + +/** + * @tc.name: ImageFitNone029 + * @tc.desc: Verify the implementation of imageFit : NONE when srcHeight <= dstHeight and srcWidth <= dstWidth, + * alignment : TOP_CENTER + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitNoneTest, ImageFitNone029, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::TOP_CENTER, ImageFit::NONE, Size(SMALL_LENGTH, MIDDLE_LENGTH), + Size(LARGE_LENGTH, EXTRA_LARGE_LENGTH)), + Rect(Offset(0.0, 0.0), Size(SMALL_LENGTH, MIDDLE_LENGTH)), + Rect(Offset(EXTRA_SMALL_LENGTH, 0.0), Size(SMALL_LENGTH, MIDDLE_LENGTH))); +} + +/** + * @tc.name: ImageFitNone030 + * @tc.desc: Verify the implementation of imageFit : NONE when srcHeight <= dstHeight and srcWidth <= dstWidth, + * alignment : TOP_RIGHT + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitNoneTest, ImageFitNone030, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::TOP_RIGHT, ImageFit::NONE, Size(SMALL_LENGTH, MIDDLE_LENGTH), + Size(LARGE_LENGTH, EXTRA_LARGE_LENGTH)), + Rect(Offset(0.0, 0.0), Size(SMALL_LENGTH, MIDDLE_LENGTH)), + Rect(Offset(SMALL_LENGTH, 0.0), Size(SMALL_LENGTH, MIDDLE_LENGTH))); +} + +/** + * @tc.name: ImageFitNone031 + * @tc.desc: Verify the implementation of imageFit : NONE when srcHeight <= dstHeight and srcWidth <= dstWidth, + * alignment : CENTER_LEFT + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitNoneTest, ImageFitNone031, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::CENTER_LEFT, ImageFit::NONE, Size(SMALL_LENGTH, MIDDLE_LENGTH), + Size(LARGE_LENGTH, EXTRA_LARGE_LENGTH)), + Rect(Offset(0.0, 0.0), Size(SMALL_LENGTH, MIDDLE_LENGTH)), + Rect(Offset(0.0, EXTRA_SMALL_LENGTH), Size(SMALL_LENGTH, MIDDLE_LENGTH))); +} + +/** + * @tc.name: ImageFitNone032 + * @tc.desc: Verify the implementation of imageFit : NONE when srcHeight <= dstHeight and srcWidth <= dstWidth, + * alignment : CENTER + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitNoneTest, ImageFitNone032, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::CENTER, ImageFit::NONE, Size(SMALL_LENGTH, MIDDLE_LENGTH), + Size(LARGE_LENGTH, EXTRA_LARGE_LENGTH)), + Rect(Offset(0.0, 0.0), Size(SMALL_LENGTH, MIDDLE_LENGTH)), + Rect(Offset(EXTRA_SMALL_LENGTH, EXTRA_SMALL_LENGTH), Size(SMALL_LENGTH, MIDDLE_LENGTH))); +} + +/** + * @tc.name: ImageFitNone033 + * @tc.desc: Verify the implementation of imageFit : NONE when srcHeight <= dstHeight and srcWidth <= dstWidth, + * alignment : CENTER_RIGHT + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitNoneTest, ImageFitNone033, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::CENTER_RIGHT, ImageFit::NONE, Size(SMALL_LENGTH, MIDDLE_LENGTH), + Size(LARGE_LENGTH, EXTRA_LARGE_LENGTH)), + Rect(Offset(0.0, 0.0), Size(SMALL_LENGTH, MIDDLE_LENGTH)), + Rect(Offset(SMALL_LENGTH, EXTRA_SMALL_LENGTH), Size(SMALL_LENGTH, MIDDLE_LENGTH))); +} + +/** + * @tc.name: ImageFitNone034 + * @tc.desc: Verify the implementation of imageFit : NONE when srcHeight <= dstHeight and srcWidth <= dstWidth, + * alignment : BOTTOM_LEFT + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitNoneTest, ImageFitNone034, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::BOTTOM_LEFT, ImageFit::NONE, Size(SMALL_LENGTH, MIDDLE_LENGTH), + Size(LARGE_LENGTH, EXTRA_LARGE_LENGTH)), + Rect(Offset(0.0, 0.0), Size(SMALL_LENGTH, MIDDLE_LENGTH)), + Rect(Offset(0.0, SMALL_LENGTH), Size(SMALL_LENGTH, MIDDLE_LENGTH))); +} + +/** + * @tc.name: ImageFitNone035 + * @tc.desc: Verify the implementation of imageFit : NONE when srcHeight <= dstHeight and srcWidth <= dstWidth, + * alignment : BOTTOM_CENTER + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitNoneTest, ImageFitNone035, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::BOTTOM_CENTER, ImageFit::NONE, Size(SMALL_LENGTH, MIDDLE_LENGTH), + Size(LARGE_LENGTH, EXTRA_LARGE_LENGTH)), + Rect(Offset(0.0, 0.0), Size(SMALL_LENGTH, MIDDLE_LENGTH)), + Rect(Offset(EXTRA_SMALL_LENGTH, SMALL_LENGTH), Size(SMALL_LENGTH, MIDDLE_LENGTH))); +} + +/** + * @tc.name: ImageFitNone036 + * @tc.desc: Verify the implementation of imageFit : NONE when srcHeight <= dstHeight and srcWidth <= dstWidth, + * alignment : BOTTOM_RIGHT + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitNoneTest, ImageFitNone036, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::BOTTOM_RIGHT, ImageFit::NONE, Size(SMALL_LENGTH, MIDDLE_LENGTH), + Size(LARGE_LENGTH, EXTRA_LARGE_LENGTH)), + Rect(Offset(0.0, 0.0), Size(SMALL_LENGTH, MIDDLE_LENGTH)), + Rect(Offset(SMALL_LENGTH, SMALL_LENGTH), Size(SMALL_LENGTH, MIDDLE_LENGTH))); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/image/render_imagefit_others_test.cpp b/frameworks/core/components/test/unittest/image/render_imagefit_others_test.cpp new file mode 100644 index 00000000..5a090ec8 --- /dev/null +++ b/frameworks/core/components/test/unittest/image/render_imagefit_others_test.cpp @@ -0,0 +1,470 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "core/components/test/unittest/image/image_test_utils.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { + +class RenderImageFitOthersTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); +}; + +void RenderImageFitOthersTest::SetUpTestCase() {} +void RenderImageFitOthersTest::TearDownTestCase() {} +void RenderImageFitOthersTest::SetUp() {} +void RenderImageFitOthersTest::TearDown() {} + +/** + * @tc.name: ImageFitOthers001 + * @tc.desc: Verify the implementation of imageFit : FILL with any alignment and combination of srcSize and dstSize, + * set this alignment to BOTTOM_RIGHT + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitOthersTest, ImageFitOthers001, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::BOTTOM_RIGHT, ImageFit::FILL, Size(SMALL_LENGTH, MIDDLE_LENGTH), + Size(LARGE_LENGTH, EXTRA_LARGE_LENGTH)), + Rect(Offset(0.0, 0.0), Size(SMALL_LENGTH, MIDDLE_LENGTH)), + Rect(Offset(0.0, 0.0), Size(LARGE_LENGTH, EXTRA_LARGE_LENGTH))); +} + +/** + * @tc.name: ImageFitOthers002 + * @tc.desc: Verify the implementation of imageFit : CONTAIN with srcRatio > dstRatio, in which ratio = width / height. + * In this case, only alignY takes effect, set alignment to TOP_LEFT + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitOthersTest, ImageFitOthers002, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::TOP_LEFT, ImageFit::CONTAIN, Size(LARGE_LENGTH, SMALL_LENGTH), + Size(SMALL_LENGTH, MIDDLE_LENGTH)), + Rect(Offset(0.0, 0.0), Size(LARGE_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, 0.0), Size(SMALL_LENGTH, EXTRA_SMALL_LENGTH))); +} + +/** + * @tc.name: ImageFitOthers003 + * @tc.desc: Verify the implementation of imageFit : CONTAIN with srcRatio > dstRatio, in which ratio = width / height. + * In this case, only alignY takes effect, set alignment to CENTER_LEFT + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitOthersTest, ImageFitOthers003, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::CENTER_LEFT, ImageFit::CONTAIN, Size(LARGE_LENGTH, SMALL_LENGTH), + Size(SMALL_LENGTH, MIDDLE_LENGTH)), + Rect(Offset(0.0, 0.0), Size(LARGE_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, EXTRA_SMALL_LENGTH), Size(SMALL_LENGTH, EXTRA_SMALL_LENGTH))); +} + +/** + * @tc.name: ImageFitOthers004 + * @tc.desc: Verify the implementation of imageFit : CONTAIN with srcRatio > dstRatio, in which ratio = width / height. + * In this case, only alignY takes effect, set alignment to BOTTOM_LEFT + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitOthersTest, ImageFitOthers004, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::BOTTOM_LEFT, ImageFit::CONTAIN, Size(LARGE_LENGTH, SMALL_LENGTH), + Size(SMALL_LENGTH, MIDDLE_LENGTH)), + Rect(Offset(0.0, 0.0), Size(LARGE_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, SMALL_LENGTH), Size(SMALL_LENGTH, EXTRA_SMALL_LENGTH))); +} + +/** + * @tc.name: ImageFitOthers005 + * @tc.desc: Verify the implementation of imageFit : CONTAIN with srcRatio <= dstRatio, in which ratio = width / height. + * In this case, only alignX takes effect, set alignment to BOTTOM_LEFT + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitOthersTest, ImageFitOthers005, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::BOTTOM_LEFT, ImageFit::CONTAIN, Size(SMALL_LENGTH, LARGE_LENGTH), + Size(LARGE_LENGTH, LARGE_LENGTH)), + Rect(Offset(0.0, 0.0), Size(SMALL_LENGTH, LARGE_LENGTH)), + Rect(Offset(0.0, 0.0), Size(SMALL_LENGTH, LARGE_LENGTH))); +} + +/** + * @tc.name: ImageFitOthers006 + * @tc.desc: Verify the implementation of imageFit : CONTAIN with srcRatio <= dstRatio, in which ratio = width / height. + * In this case, only alignX takes effect, set alignment to BOTTOM_CENTER + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitOthersTest, ImageFitOthers006, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::BOTTOM_CENTER, ImageFit::CONTAIN, Size(SMALL_LENGTH, LARGE_LENGTH), + Size(LARGE_LENGTH, LARGE_LENGTH)), + Rect(Offset(0.0, 0.0), Size(SMALL_LENGTH, LARGE_LENGTH)), + Rect(Offset(EXTRA_SMALL_LENGTH, 0.0), Size(SMALL_LENGTH, LARGE_LENGTH))); +} + +/** + * @tc.name: ImageFitOthers007 + * @tc.desc: Verify the implementation of imageFit : CONTAIN with srcRatio <= dstRatio, in which ratio = width / height. + * In this case, only alignX takes effect, set alignment to CENTER_RIGHT + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitOthersTest, ImageFitOthers007, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::CENTER_RIGHT, ImageFit::CONTAIN, Size(SMALL_LENGTH, LARGE_LENGTH), + Size(LARGE_LENGTH, LARGE_LENGTH)), + Rect(Offset(0.0, 0.0), Size(SMALL_LENGTH, LARGE_LENGTH)), + Rect(Offset(SMALL_LENGTH, 0.0), Size(SMALL_LENGTH, LARGE_LENGTH))); +} + +/** + * @tc.name: ImageFitOthers008 + * @tc.desc: Verify the implementation of imageFit : COVER with srcRatio > dstRatio, in which ratio = width / height. + * In this case, only alignX takes effect, set alignment to CENTER_LEFT + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitOthersTest, ImageFitOthers008, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::CENTER_LEFT, ImageFit::COVER, Size(LARGE_LENGTH, LARGE_LENGTH), + Size(EXTRA_SMALL_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, 0.0), Size(SMALL_LENGTH, LARGE_LENGTH)), + Rect(Offset(0.0, 0.0), Size(EXTRA_SMALL_LENGTH, SMALL_LENGTH))); +} + +/** + * @tc.name: ImageFitOthers009 + * @tc.desc: Verify the implementation of imageFit : COVER with srcRatio > dstRatio, in which ratio = width / height. + * In this case, only alignX takes effect, set alignment to CENTER + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitOthersTest, ImageFitOthers009, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::CENTER, ImageFit::COVER, Size(LARGE_LENGTH, LARGE_LENGTH), + Size(EXTRA_SMALL_LENGTH, SMALL_LENGTH)), + Rect(Offset(EXTRA_SMALL_LENGTH, 0.0), Size(SMALL_LENGTH, LARGE_LENGTH)), + Rect(Offset(0.0, 0.0), Size(EXTRA_SMALL_LENGTH, SMALL_LENGTH))); +} + +/** + * @tc.name: ImageFitOthers010 + * @tc.desc: Verify the implementation of imageFit : COVER with srcRatio > dstRatio, in which ratio = width / height. + * In this case, only alignX takes effect, set alignment to CENTER_RIGHT + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitOthersTest, ImageFitOthers010, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::CENTER_RIGHT, ImageFit::COVER, Size(LARGE_LENGTH, LARGE_LENGTH), + Size(EXTRA_SMALL_LENGTH, SMALL_LENGTH)), + Rect(Offset(SMALL_LENGTH, 0.0), Size(SMALL_LENGTH, LARGE_LENGTH)), + Rect(Offset(0.0, 0.0), Size(EXTRA_SMALL_LENGTH, SMALL_LENGTH))); +} + +/** + * @tc.name: ImageFitOthers011 + * @tc.desc: Verify the implementation of imageFit : COVER with srcRatio <= dstRatio, in which ratio = width / height. + * In this case, only alignY takes effect, set alignment to TOP_RIGHT + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitOthersTest, ImageFitOthers011, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::TOP_RIGHT, ImageFit::COVER, Size(LARGE_LENGTH, LARGE_LENGTH), + Size(SMALL_LENGTH, EXTRA_SMALL_LENGTH)), + Rect(Offset(0.0, 0.0), Size(LARGE_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, 0.0), Size(SMALL_LENGTH, EXTRA_SMALL_LENGTH))); +} + +/** + * @tc.name: ImageFitOthers012 + * @tc.desc: Verify the implementation of imageFit : COVER with srcRatio <= dstRatio, in which ratio = width / height. + * In this case, only alignY takes effect, set alignment to CENTER_RIGHT + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitOthersTest, ImageFitOthers012, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::CENTER_RIGHT, ImageFit::COVER, Size(LARGE_LENGTH, LARGE_LENGTH), + Size(SMALL_LENGTH, EXTRA_SMALL_LENGTH)), + Rect(Offset(0.0, EXTRA_SMALL_LENGTH), Size(LARGE_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, 0.0), Size(SMALL_LENGTH, EXTRA_SMALL_LENGTH))); +} + +/** + * @tc.name: ImageFitOthers013 + * @tc.desc: Verify the implementation of imageFit : COVER with srcRatio <= dstRatio, in which ratio = width / height. + * In this case, only alignY takes effect, set alignment to BOTTOM_RIGHT + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitOthersTest, ImageFitOthers013, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::BOTTOM_RIGHT, ImageFit::COVER, Size(LARGE_LENGTH, LARGE_LENGTH), + Size(SMALL_LENGTH, EXTRA_SMALL_LENGTH)), + Rect(Offset(0.0, SMALL_LENGTH), Size(LARGE_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, 0.0), Size(SMALL_LENGTH, EXTRA_SMALL_LENGTH))); +} + +/** + * @tc.name: ImageFitOthers014 + * @tc.desc: Verify the implementation of imageFit : FITWIDTH with srcRatio > dstRatio, in which ratio = width / height. + * In this case, only alignY takes effect, set alignment to TOP_RIGHT + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitOthersTest, ImageFitOthers014, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::TOP_RIGHT, ImageFit::FITWIDTH, Size(LARGE_LENGTH, SMALL_LENGTH), + Size(SMALL_LENGTH, MIDDLE_LENGTH)), + Rect(Offset(0.0, 0.0), Size(LARGE_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, 0.0), Size(SMALL_LENGTH, EXTRA_SMALL_LENGTH))); +} + +/** + * @tc.name: ImageFitOthers015 + * @tc.desc: Verify the implementation of imageFit : FITWIDTH with srcRatio > dstRatio, in which ratio = width / height. + * In this case, only alignY takes effect, set alignment to CENTER_RIGHT + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitOthersTest, ImageFitOthers015, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::CENTER_RIGHT, ImageFit::FITWIDTH, Size(LARGE_LENGTH, SMALL_LENGTH), + Size(SMALL_LENGTH, MIDDLE_LENGTH)), + Rect(Offset(0.0, 0.0), Size(LARGE_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, EXTRA_SMALL_LENGTH), Size(SMALL_LENGTH, EXTRA_SMALL_LENGTH))); +} + +/** + * @tc.name: ImageFitOthers016 + * @tc.desc: Verify the implementation of imageFit : FITWIDTH with srcRatio > dstRatio, in which ratio = width / height. + * In this case, only alignY takes effect, set alignment to BOTTOM_RIGHT + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitOthersTest, ImageFitOthers016, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::BOTTOM_RIGHT, ImageFit::FITWIDTH, Size(LARGE_LENGTH, SMALL_LENGTH), + Size(SMALL_LENGTH, MIDDLE_LENGTH)), + Rect(Offset(0.0, 0.0), Size(LARGE_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, SMALL_LENGTH), Size(SMALL_LENGTH, EXTRA_SMALL_LENGTH))); +} + +/** + * @tc.name: ImageFitOthers017 + * @tc.desc: Verify the implementation of imageFit : FITWIDTH with srcRatio <= dstRatio, in which ratio = width / + * height. In this case, only alignY takes effect, set alignment to TOP_RIGHT + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitOthersTest, ImageFitOthers017, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::TOP_RIGHT, ImageFit::FITWIDTH, Size(SMALL_LENGTH, LARGE_LENGTH), + Size(EXTRA_SMALL_LENGTH, EXTRA_SMALL_LENGTH)), + Rect(Offset(0.0, 0.0), Size(SMALL_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, 0.0), Size(EXTRA_SMALL_LENGTH, EXTRA_SMALL_LENGTH))); +} + +/** + * @tc.name: ImageFitOthers018 + * @tc.desc: Verify the implementation of imageFit : FITWIDTH with srcRatio <= dstRatio, in which ratio = width / + * height. In this case, only alignY takes effect, set alignment to CENTER_RIGHT + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitOthersTest, ImageFitOthers018, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::CENTER_RIGHT, ImageFit::FITWIDTH, Size(SMALL_LENGTH, LARGE_LENGTH), + Size(EXTRA_SMALL_LENGTH, EXTRA_SMALL_LENGTH)), + Rect(Offset(0.0, EXTRA_SMALL_LENGTH), Size(SMALL_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, 0.0), Size(EXTRA_SMALL_LENGTH, EXTRA_SMALL_LENGTH))); +} + +/** + * @tc.name: ImageFitOthers019 + * @tc.desc: Verify the implementation of imageFit : FITWIDTH with srcRatio <= dstRatio, in which ratio = width / + * height. In this case, only alignY takes effect, set alignment to BOTTOM_RIGHT + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitOthersTest, ImageFitOthers019, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::BOTTOM_RIGHT, ImageFit::FITWIDTH, Size(SMALL_LENGTH, LARGE_LENGTH), + Size(EXTRA_SMALL_LENGTH, EXTRA_SMALL_LENGTH)), + Rect(Offset(0.0, SMALL_LENGTH), Size(SMALL_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, 0.0), Size(EXTRA_SMALL_LENGTH, EXTRA_SMALL_LENGTH))); +} + +/** + * @tc.name: ImageFitOthers020 + * @tc.desc: Verify the implementation of imageFit : FITHEIGHT with srcRatio > dstRatio, in which ratio = width / + * height. In this case, only alignX takes effect, set alignment to BOTTOM_LEFT + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitOthersTest, ImageFitOthers020, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::BOTTOM_LEFT, ImageFit::FITHEIGHT, Size(LARGE_LENGTH, SMALL_LENGTH), + Size(SMALL_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, 0.0), Size(SMALL_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, 0.0), Size(SMALL_LENGTH, SMALL_LENGTH))); +} + +/** + * @tc.name: ImageFitOthers021 + * @tc.desc: Verify the implementation of imageFit : FITHEIGHT with srcRatio > dstRatio, in which ratio = width / + * height. In this case, only alignX takes effect, set alignment to BOTTOM_CENTER + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitOthersTest, ImageFitOthers021, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::BOTTOM_CENTER, ImageFit::FITHEIGHT, Size(LARGE_LENGTH, SMALL_LENGTH), + Size(SMALL_LENGTH, SMALL_LENGTH)), + Rect(Offset(EXTRA_SMALL_LENGTH, 0.0), Size(SMALL_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, 0.0), Size(SMALL_LENGTH, SMALL_LENGTH))); +} + +/** + * @tc.name: ImageFitOthers022 + * @tc.desc: Verify the implementation of imageFit : FITHEIGHT with srcRatio > dstRatio, in which ratio = width / + * height. In this case, only alignX takes effect, set alignment to BOTTOM_RIGHT + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitOthersTest, ImageFitOthers022, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::BOTTOM_RIGHT, ImageFit::FITHEIGHT, Size(LARGE_LENGTH, SMALL_LENGTH), + Size(SMALL_LENGTH, SMALL_LENGTH)), + Rect(Offset(SMALL_LENGTH, 0.0), Size(SMALL_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, 0.0), Size(SMALL_LENGTH, SMALL_LENGTH))); +} + +/** + * @tc.name: ImageFitOthers023 + * @tc.desc: Verify the implementation of imageFit : FITHEIGHT with srcRatio <= dstRatio, in which ratio = width / + * height. In this case, only alignX takes effect, set alignment to BOTTOM_LEFT + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitOthersTest, ImageFitOthers023, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::BOTTOM_LEFT, ImageFit::FITHEIGHT, Size(SMALL_LENGTH, LARGE_LENGTH), + Size(MIDDLE_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, 0.0), Size(SMALL_LENGTH, LARGE_LENGTH)), + Rect(Offset(0.0, 0.0), Size(EXTRA_SMALL_LENGTH, SMALL_LENGTH))); +} + +/** + * @tc.name: ImageFitOthers024 + * @tc.desc: Verify the implementation of imageFit : FITHEIGHT with srcRatio <= dstRatio, in which ratio = width / + * height. In this case, only alignX takes effect, set alignment to BOTTOM_CENTER + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitOthersTest, ImageFitOthers024, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::BOTTOM_CENTER, ImageFit::FITHEIGHT, Size(SMALL_LENGTH, LARGE_LENGTH), + Size(MIDDLE_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, 0.0), Size(SMALL_LENGTH, LARGE_LENGTH)), + Rect(Offset(EXTRA_SMALL_LENGTH, 0.0), Size(EXTRA_SMALL_LENGTH, SMALL_LENGTH))); +} + +/** + * @tc.name: ImageFitOthers025 + * @tc.desc: Verify the implementation of imageFit : FITHEIGHT with srcRatio <= dstRatio, in which ratio = width / + * height. In this case, only alignX takes effect, set alignment to BOTTOM_RIGHT + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitOthersTest, ImageFitOthers025, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::BOTTOM_RIGHT, ImageFit::FITHEIGHT, Size(SMALL_LENGTH, LARGE_LENGTH), + Size(MIDDLE_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, 0.0), Size(SMALL_LENGTH, LARGE_LENGTH)), + Rect(Offset(SMALL_LENGTH, 0.0), Size(EXTRA_SMALL_LENGTH, SMALL_LENGTH))); +} + +/** + * @tc.name: ImageFitOthers026 + * @tc.desc: Verify the implementation of imageFit : SCALEDOWN with srcHeight <= dstHeight and srcWidth <= dstWidth. + * In this kind of situation, we apply the same strategy as the implementation of imageFit : NONE. + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitOthersTest, ImageFitOthers026, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::TOP_LEFT, ImageFit::SCALEDOWN, Size(SMALL_LENGTH, MIDDLE_LENGTH), + Size(LARGE_LENGTH, EXTRA_LARGE_LENGTH)), + Rect(Offset(0.0, 0.0), Size(SMALL_LENGTH, MIDDLE_LENGTH)), + Rect(Offset(0.0, 0.0), Size(SMALL_LENGTH, MIDDLE_LENGTH))); +} + +/** + * @tc.name: ImageFitOthers027 + * @tc.desc: Verify the implementation of imageFit : SCALEDOWN with srcHeight > dstHeight or srcWidth > dstWidth. + * In this kind of situation, we apply the same strategy as the implementation of imageFit : CONTAIN. + * @tc.type: FUNC + * @tc.require: AR000DAQUO + * @tc.author: chenxuankai + */ +HWTEST_F(RenderImageFitOthersTest, ImageFitOthers027, TestSize.Level1) +{ + VerifyImageFit(ImageFitConfig(Alignment::TOP_LEFT, ImageFit::SCALEDOWN, Size(LARGE_LENGTH, SMALL_LENGTH), + Size(SMALL_LENGTH, MIDDLE_LENGTH)), + Rect(Offset(0.0, 0.0), Size(LARGE_LENGTH, SMALL_LENGTH)), + Rect(Offset(0.0, 0.0), Size(SMALL_LENGTH, EXTRA_SMALL_LENGTH))); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/image_animator/BUILD.gn b/frameworks/core/components/test/unittest/image_animator/BUILD.gn new file mode 100644 index 00000000..f6c1ab69 --- /dev/null +++ b/frameworks/core/components/test/unittest/image_animator/BUILD.gn @@ -0,0 +1,217 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = + "$ace_test_output_root/frameworkbasicability/image_animator" + +ohos_unittest("ImageAnimatorElementTest") { + module_out_path = module_output_path + + sources = [ + "image_animator_test.cpp", + + # animation + "$ace_root/frameworks/core/animation/animator.cpp", + "$ace_root/frameworks/core/animation/anticipate_curve.cpp", + "$ace_root/frameworks/core/animation/cubic_curve.cpp", + "$ace_root/frameworks/core/animation/curves.cpp", + "$ace_root/frameworks/core/animation/friction_motion.cpp", + "$ace_root/frameworks/core/animation/scheduler.cpp", + "$ace_root/frameworks/core/animation/shared_transition_controller.cpp", + "$ace_root/frameworks/core/animation/shared_transition_effect.cpp", + "$ace_root/frameworks/core/animation/spring_animation.cpp", + "$ace_root/frameworks/core/animation/spring_model.cpp", + "$ace_root/frameworks/core/animation/spring_motion.cpp", + + # common + "$ace_root/frameworks/core/common/ace_engine.cpp", + "$ace_root/frameworks/core/common/event_manager.cpp", + "$ace_root/frameworks/core/common/focus_animation_manager.cpp", + "$ace_root/frameworks/core/common/font_manager.cpp", + "$ace_root/frameworks/core/common/vibrator/vibrator_proxy.cpp", + "$ace_root/frameworks/core/common/window.cpp", + "$ace_root/frameworks/core/components/box/box_component.cpp", + "$ace_root/frameworks/core/components/display/display_component.cpp", + "$ace_root/frameworks/core/components/image/image_animator_component.cpp", + "$ace_root/frameworks/core/components/image/image_component.cpp", + "$ace_root/frameworks/core/components/overlay/overlay_component.cpp", + "$ace_root/frameworks/core/components/page/page_component.cpp", + "$ace_root/frameworks/core/components/test/json/json_frontend.cpp", + "$ace_root/frameworks/core/pipeline/base/composed_component.cpp", + "$ace_root/frameworks/core/pipeline/pipeline_context.cpp", + + #base + "$ace_root/adapter/common/cpp/thread_util.cpp", + "$ace_root/adapter/ohos/osal/log_wrapper.cpp", + "$ace_root/frameworks/base/geometry/matrix4.cpp", + "$ace_root/frameworks/base/log/dump_log.cpp", + "$ace_root/frameworks/base/thread/background_task_executor.cpp", + "$ace_root/frameworks/base/utils/base_id.cpp", + + # components + "$ace_root/frameworks/core/components/root/root_component.cpp", + "$ace_root/frameworks/core/components/transform/transform_component.cpp", + "$ace_root/frameworks/core/components/tween/tween_component.cpp", + "$ace_root/frameworks/core/pipeline/base/component.cpp", + "$ace_root/frameworks/core/pipeline/base/component_group_element.cpp", + + # elements + "$ace_root/frameworks/core/components/bubble/bubble_element.cpp", + "$ace_root/frameworks/core/components/dialog_modal/dialog_modal_element.cpp", + "$ace_root/frameworks/core/components/display/display_element.cpp", + "$ace_root/frameworks/core/components/image/image_animator_element.cpp", + "$ace_root/frameworks/core/components/overlay/overlay_element.cpp", + "$ace_root/frameworks/core/components/page/page_element.cpp", + "$ace_root/frameworks/core/components/page_transition/page_transition_element.cpp", + "$ace_root/frameworks/core/components/root/root_element.cpp", + "$ace_root/frameworks/core/components/semi_modal/semi_modal_element.cpp", + "$ace_root/frameworks/core/components/shared_transition/shared_transition_element.cpp", + "$ace_root/frameworks/core/components/stack/stack_element.cpp", + "$ace_root/frameworks/core/components/stage/stage_element.cpp", + "$ace_root/frameworks/core/components/transform/transform_element.cpp", + "$ace_root/frameworks/core/components/transition/transition_element.cpp", + "$ace_root/frameworks/core/components/tween/tween_element.cpp", + "$ace_root/frameworks/core/pipeline/base/composed_element.cpp", + "$ace_root/frameworks/core/pipeline/base/element.cpp", + "$ace_root/frameworks/core/pipeline/base/render_element.cpp", + "$ace_root/frameworks/core/pipeline/base/sole_child_element.cpp", + + # event + "$ace_root/frameworks/core/event/back_end_event_manager.cpp", + "$ace_root/frameworks/core/event/multimodal/multimodal_manager.cpp", + "$ace_root/frameworks/core/event/multimodal/multimodal_scene.cpp", + + # focus + "$ace_root/frameworks/core/focus/focus_node.cpp", + "$ace_root/frameworks/core/gestures/drag_recognizer.cpp", + "$ace_root/frameworks/core/gestures/gesture_recognizer.cpp", + "$ace_root/frameworks/core/gestures/gesture_referee.cpp", + + # gestures + "$ace_root/frameworks/core/gestures/velocity_tracker.cpp", + + # image + "$ace_root/frameworks/core/image/image_cache.cpp", + + # layout + "$ace_root/frameworks/core/components/common/layout/grid_column_info.cpp", + "$ace_root/frameworks/core/components/common/layout/grid_container_info.cpp", + "$ace_root/frameworks/core/components/common/layout/grid_system_manager.cpp", + + # others + "$ace_root/frameworks/core/components/box/render_box.cpp", + "$ace_root/frameworks/core/components/box/render_box_base.cpp", + "$ace_root/frameworks/core/components/common/properties/alignment.cpp", + "$ace_root/frameworks/core/components/common/properties/border.cpp", + "$ace_root/frameworks/core/components/common/properties/border_edge.cpp", + "$ace_root/frameworks/core/components/common/properties/color.cpp", + "$ace_root/frameworks/core/components/common/properties/decoration.cpp", + "$ace_root/frameworks/core/components/common/properties/edge.cpp", + "$ace_root/frameworks/core/components/common/properties/page_transition_option.cpp", + "$ace_root/frameworks/core/components/common/properties/scroll_bar.cpp", + "$ace_root/frameworks/core/components/common/properties/text_style.cpp", + "$ace_root/frameworks/core/components/display/render_display.cpp", + "$ace_root/frameworks/core/components/focus_animation/render_focus_animation.cpp", + "$ace_root/frameworks/core/components/image/render_image.cpp", + + # rendering + "$ace_root/frameworks/core/components/bubble/render_bubble.cpp", + "$ace_root/frameworks/core/components/clip/render_clip.cpp", + "$ace_root/frameworks/core/components/dialog_modal/render_dialog_modal.cpp", + "$ace_root/frameworks/core/components/drag_bar/render_drag_bar.cpp", + "$ace_root/frameworks/core/components/positioned/render_positioned.cpp", + "$ace_root/frameworks/core/components/proxy/render_proxy.cpp", + "$ace_root/frameworks/core/components/refresh/render_refresh.cpp", + "$ace_root/frameworks/core/components/root/render_root.cpp", + "$ace_root/frameworks/core/components/scroll/render_multi_child_scroll.cpp", + "$ace_root/frameworks/core/components/scroll/render_scroll.cpp", + "$ace_root/frameworks/core/components/scroll/render_single_child_scroll.cpp", + "$ace_root/frameworks/core/components/scroll/scroll_bar_controller.cpp", + "$ace_root/frameworks/core/components/scroll/scrollable.cpp", + "$ace_root/frameworks/core/components/semi_modal/render_semi_modal.cpp", + "$ace_root/frameworks/core/components/stack/render_stack.cpp", + "$ace_root/frameworks/core/components/stage/render_stage.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/mock_flutter_font_manager.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/mock_render_node_factory.cpp", + "$ace_root/frameworks/core/pipeline/base/render_node.cpp", + + # theme + "$ace_root/frameworks/core/components/theme/app_theme.cpp", + "$ace_root/frameworks/core/components/theme/theme_attributes.cpp", + "$ace_root/frameworks/core/components/theme/theme_constants.cpp", + "$ace_root/frameworks/core/components/theme/theme_manager.cpp", + "$ace_root/frameworks/core/components/theme/theme_utils.cpp", + "$root_out_dir/ace/framework/core/components/theme/theme_constants_default.cpp", + + #mock + "$ace_root/frameworks/core/components/test/unittest/mock/ace_trace_mock.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/event_report_mock.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/render_mock.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/semi_modal_mock.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/transform_mock.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/tween_mock.cpp", + "$ace_root/frameworks/core/mock/mock_ace_application_info.cpp", + "$ace_root/frameworks/core/mock/mock_system_properties.cpp", + "$ace_root/frameworks/core/mock/mock_watch_dog.cpp", + ] + + # add sources only needed by wearable like watch. + if (is_wearable_product) { + sources += [ "$root_out_dir/ace/framework/core/components/theme/theme_constants_watch.cpp" ] + } + + # add sources needed by phone and TV. wearable like watch do not need them + if (!is_wearable_product) { + sources += [ + # theme + "$root_out_dir/ace/framework/core/components/theme/theme_constants_tv.cpp", + ] + } + + configs = [ + "$ace_root/frameworks/base:ace_base_config", + "$ace_root:ace_test_config", + ":config_tween_element_test", + "$flutter_root:flutter_config", + ] + + deps = [ + "$ace_root/frameworks/core/components/theme:build_theme_code", + "$flutter_root:ace_skia_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + external_deps = [ "hiviewdfx_hilog_native:libhilog" ] + deps += [ "//base/global/resmgr_standard/frameworks/resmgr:global_resmgr" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_tween_element_test") { + visibility = [ ":*" ] + include_dirs = [ + "//utils/native/base/include", + "$ace_root", + ] +} + +group("unittest") { + testonly = true + deps = [ ":ImageAnimatorElementTest" ] +} diff --git a/frameworks/core/components/test/unittest/image_animator/image_animator_test.cpp b/frameworks/core/components/test/unittest/image_animator/image_animator_test.cpp new file mode 100644 index 00000000..8351ef4d --- /dev/null +++ b/frameworks/core/components/test/unittest/image_animator/image_animator_test.cpp @@ -0,0 +1,686 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "adapter/ohos/osal/fake_asset_manager.h" +#include "adapter/ohos/osal/fake_task_executor.h" +#include "base/log/log.h" +#include "core/animation/card_transition_controller.h" +#include "core/components/box/box_component.h" +#include "core/components/image/image_animator_component.h" +#include "core/components/image/image_animator_element.h" +#include "core/components/stage/stage_element.h" +#include "core/components/test/json/json_frontend.h" +#include "core/components/test/unittest/mock/render_mock.h" +#include "core/components/test/unittest/mock/window_mock.h" +#include "core/mock/mock_resource_register.h" +#include "core/pipeline/pipeline_context.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { + +CardTransitionController::CardTransitionController(const WeakPtr& context) {}; + +void CardTransitionController::RegisterTransitionListener() {}; + +RRect CardTransitionController::GetCardRect(const ComposeId& composeId) const +{ + return RRect(); +} + +namespace { + +constexpr int32_t FRAME_TIME_IN_MILLISECOND = 10; +constexpr int32_t NANOSECOND_TO_MILLISECOND = 1000000; +constexpr int32_t TEST_SURFACE_WIDTH = 1080; +constexpr int32_t TEST_SURFACE_HEIGHT = 1920; +std::vector g_images; +std::vector g_secondImages; +std::vector g_thirdImages; + +using ConfigImageAnimator = std::function&)>; +ConfigImageAnimator g_configImageAnimator; + +} // namespace + +class ImageAnimatorTest : public testing::Test { +public: + static void SetUpTestCase() {} + + static void TearDownTestCase() {} + + void SetUp() override + { + ImageProperties image1 = { "image1", "220", "220", "100", "100" }; + ImageProperties image2 = { "image2", "240", "240", "110", "110" }; + ImageProperties image3 = { "image3", "260", "260", "120", "120" }; + g_images.emplace_back(image1); + g_images.emplace_back(image2); + g_images.emplace_back(image3); + ImageProperties secondImage1 = { "image1", "220", "220", "100", "100", "30" }; + ImageProperties secondImage2 = { "image2", "240", "240", "110", "110", "30" }; + ImageProperties secondImage3 = { "image3", "260", "260", "120", "120", "30" }; + g_secondImages.emplace_back(secondImage1); + g_secondImages.emplace_back(secondImage2); + g_secondImages.emplace_back(secondImage3); + ImageProperties thirdImage1 = { "image1", "220", "220", "100", "100" }; + ImageProperties thirdImage2 = { "image2", "240", "240", "110", "110", "30" }; + ImageProperties thirdImage3 = { "image3", "260", "260", "120", "120", "30" }; + g_thirdImages.emplace_back(thirdImage1); + g_thirdImages.emplace_back(thirdImage2); + g_thirdImages.emplace_back(thirdImage3); + } + + void TearDown() override + { + g_images.clear(); + g_secondImages.clear(); + g_thirdImages.clear(); + } + + void InitImageAnimatorComponent() + { + std::unique_ptr platformWindow = TweenTestUtils::CreatePlatformWindow(); + platformWindowRaw_ = reinterpret_cast(platformWindow.get()); + auto window = TweenTestUtils::CreateWindow(std::move(platformWindow)); + auto taskExecutor = AceType::MakeRefPtr(); + auto assetManager = Referenced::MakeRefPtr(); + auto resRegister = Referenced::MakeRefPtr(); + RefPtr frontend = Frontend::CreateDefault(); + context_ = AceType::MakeRefPtr( + std::move(window), taskExecutor, assetManager, resRegister, frontend, 0); + context_->SetTimeProvider( + [this] { return this->platformWindowRaw_->GetCurrentTimestampNano() + NANOSECOND_TO_MILLISECOND * 10; }); + + imageAnimatorComponent_ = AceType::MakeRefPtr("ImageAnimatorTest"); + if (g_configImageAnimator) { + g_configImageAnimator(imageAnimatorComponent_); + } + auto pageComponent = AceType::MakeRefPtr(0, imageAnimatorComponent_); + context_->SetupRootElement(); + context_->PushPage(pageComponent); + + context_->OnSurfaceChanged(TEST_SURFACE_WIDTH, TEST_SURFACE_HEIGHT); + platformWindowRaw_->SetNanoFrameTime(NANOSECOND_TO_MILLISECOND * frameTimeMs_); + + GetImageAnimatorElement(); + } + + void GetImageAnimatorElement() + { + EXPECT_TRUE(context_); + auto stageElement = context_->GetStageElement(); + EXPECT_TRUE(stageElement); + auto displayElement = stageElement->GetFirstChild(); + EXPECT_TRUE(displayElement); + auto pageElement = displayElement->GetFirstChild(); + EXPECT_TRUE(pageElement); + imageAnimatorElement_ = AceType::DynamicCast(pageElement->GetFirstChild()); + EXPECT_TRUE(imageAnimatorElement_); + } + +protected: + RefPtr imageAnimatorElement_; + RefPtr imageAnimatorComponent_; + RefPtr context_; + uint32_t frameTimeMs_ = FRAME_TIME_IN_MILLISECOND; + MockPlatformWindow* platformWindowRaw_ = nullptr; +}; + +/** + * @tc.name: ImageAnimatorTest001 + * @tc.desc: test image animator element(go forward). + * @tc.type: FUNC + * @tc.require: AR000E3DMG + * @tc.author: jiangdayuan + */ +HWTEST_F(ImageAnimatorTest, ImageAnimatorTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. init ImageAnimator component + */ + g_configImageAnimator = [](const RefPtr& imageAnimator) { + imageAnimator->SetDuration(20); + imageAnimator->SetIteration(1); + // go forward. + imageAnimator->SetIsReverse(false); + imageAnimator->SetIsFixedSize(false); + imageAnimator->SetImageProperties(g_images); + imageAnimator->SetAnimator(AceType::MakeRefPtr()); + }; + InitImageAnimatorComponent(); + + /** + * @tc.steps: step2. get the init value + * @tc.expected: step2. value is correct + */ + auto box = imageAnimatorElement_->GetFirstChild(); + EXPECT_TRUE(box); + auto renderBox = box->GetRenderNode(); + EXPECT_TRUE(renderBox); + auto render = AceType::DynamicCast(renderBox); + EXPECT_TRUE(render); + EXPECT_EQ(220, render->GetWidth()); + EXPECT_EQ(220, render->GetHeight()); + + /** + * @tc.steps: step3. trigger frames to let image animation go + * @tc.expected: step3. value is correct + */ + platformWindowRaw_->TriggerOneFrame(); + box = imageAnimatorElement_->GetFirstChild(); + EXPECT_TRUE(box); + renderBox = box->GetRenderNode(); + EXPECT_TRUE(renderBox); + render = AceType::DynamicCast(renderBox); + EXPECT_TRUE(render); + EXPECT_EQ(240, render->GetWidth()); + EXPECT_EQ(240, render->GetHeight()); +} + +/** + * @tc.name: ImageAnimatorTest002 + * @tc.desc: test image animator element(go back). + * @tc.type: FUNC + * @tc.require: AR000E3DMG + * @tc.author: jiangdayuan + */ +HWTEST_F(ImageAnimatorTest, ImageAnimatorTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. init ImageAnimator component + */ + g_configImageAnimator = [](const RefPtr& imageAnimator) { + std::vector> images; + imageAnimator->SetDuration(20); + imageAnimator->SetIteration(1); + imageAnimator->SetIsFixedSize(false); + // go back. + imageAnimator->SetIsReverse(true); + imageAnimator->SetImageProperties(g_images); + imageAnimator->SetAnimator(AceType::MakeRefPtr()); + }; + InitImageAnimatorComponent(); + + /** + * @tc.steps: step2. get the init value + * @tc.expected: step2. value is correct + */ + auto box = imageAnimatorElement_->GetFirstChild(); + EXPECT_TRUE(box); + auto renderBox = box->GetRenderNode(); + EXPECT_TRUE(renderBox); + auto render = AceType::DynamicCast(renderBox); + EXPECT_TRUE(render); + EXPECT_EQ(260, render->GetWidth()); + EXPECT_EQ(260, render->GetHeight()); + + /** + * @tc.steps: step3. trigger frames to let image animation go + * @tc.expected: step3. value is correct + */ + platformWindowRaw_->TriggerOneFrame(); + box = imageAnimatorElement_->GetFirstChild(); + EXPECT_TRUE(box); + renderBox = box->GetRenderNode(); + EXPECT_TRUE(renderBox); + render = AceType::DynamicCast(renderBox); + EXPECT_TRUE(render); + EXPECT_EQ(240, render->GetWidth()); + EXPECT_EQ(240, render->GetHeight()); +} + +/** + * @tc.name: ImageAnimatorTest003 + * @tc.desc: test image animator element(infinite play). + * @tc.type: FUNC + * @tc.require: AR000E3DMG + * @tc.author: jiangdayuan + */ +HWTEST_F(ImageAnimatorTest, ImageAnimatorTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. init ImageAnimator component + */ + g_configImageAnimator = [](const RefPtr& imageAnimator) { + std::vector> images; + imageAnimator->SetDuration(20); + // infinite repeat + imageAnimator->SetIteration(-1); + imageAnimator->SetIsReverse(false); + imageAnimator->SetIsFixedSize(false); + imageAnimator->SetImageProperties(g_images); + imageAnimator->SetAnimator(AceType::MakeRefPtr()); + }; + InitImageAnimatorComponent(); + + /** + * @tc.steps: step2. trigger frames and get the first repeat time value + * @tc.expected: step2. value is correct + */ + platformWindowRaw_->TriggerOneFrame(); + auto box = imageAnimatorElement_->GetFirstChild(); + EXPECT_TRUE(box); + auto renderBox = box->GetRenderNode(); + EXPECT_TRUE(renderBox); + auto render = AceType::DynamicCast(renderBox); + EXPECT_TRUE(render); + EXPECT_EQ(240, render->GetWidth()); + EXPECT_EQ(240, render->GetHeight()); + + /** + * @tc.steps: step3. trigger frames and get the second repeat time value + * @tc.expected: step3. value is correct + */ + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + box = imageAnimatorElement_->GetFirstChild(); + EXPECT_TRUE(box); + renderBox = box->GetRenderNode(); + EXPECT_TRUE(renderBox); + render = AceType::DynamicCast(renderBox); + EXPECT_TRUE(render); + EXPECT_EQ(240, render->GetWidth()); + EXPECT_EQ(240, render->GetHeight()); +} + +/** + * @tc.name: ImageAnimatorTest004 + * @tc.desc: test image animator element(go forward). + * @tc.type: FUNC + * @tc.require: AR000FL0UC + * @tc.author: jiachunhui + */ +HWTEST_F(ImageAnimatorTest, ImageAnimatorTest004, TestSize.Level1) +{ + /** + * @tc.steps: step1. init ImageAnimator component + */ + g_configImageAnimator = [](const RefPtr& imageAnimator) { + imageAnimator->SetDuration(20); + imageAnimator->SetIteration(1); + // go forward. + imageAnimator->SetIsReverse(false); + imageAnimator->SetIsFixedSize(false); + imageAnimator->SetImageProperties(g_secondImages); + imageAnimator->SetAnimator(AceType::MakeRefPtr()); + }; + InitImageAnimatorComponent(); + + /** + * @tc.steps: step2. get the init value + * @tc.expected: step2. value is correct + */ + auto box = imageAnimatorElement_->GetFirstChild(); + EXPECT_TRUE(box); + auto renderBox = box->GetRenderNode(); + EXPECT_TRUE(renderBox); + auto render = AceType::DynamicCast(renderBox); + EXPECT_TRUE(render); + EXPECT_EQ(220, render->GetWidth()); + EXPECT_EQ(220, render->GetHeight()); + + /** + * @tc.steps: step3. trigger frames to let image animation go + * @tc.expected: step3. value is correct + */ + platformWindowRaw_->TriggerOneFrame(); + box = imageAnimatorElement_->GetFirstChild(); + EXPECT_TRUE(box); + renderBox = box->GetRenderNode(); + EXPECT_TRUE(renderBox); + render = AceType::DynamicCast(renderBox); + EXPECT_TRUE(render); + EXPECT_EQ(220, render->GetWidth()); + EXPECT_EQ(220, render->GetHeight()); +} + +/** + * @tc.name: ImageAnimatorTest005 + * @tc.desc: test image animator element(go back). + * @tc.type: FUNC + * @tc.require: AR000FL0UC + * @tc.author: jiachunhui + */ +HWTEST_F(ImageAnimatorTest, ImageAnimatorTest005, TestSize.Level1) +{ + /** + * @tc.steps: step1. init ImageAnimator component + */ + g_configImageAnimator = [](const RefPtr& imageAnimator) { + std::vector> images; + imageAnimator->SetDuration(20); + imageAnimator->SetIteration(1); + imageAnimator->SetIsFixedSize(false); + // go back. + imageAnimator->SetIsReverse(true); + imageAnimator->SetImageProperties(g_secondImages); + imageAnimator->SetAnimator(AceType::MakeRefPtr()); + }; + InitImageAnimatorComponent(); + + /** + * @tc.steps: step2. get the init value + * @tc.expected: step2. value is correct + */ + auto box = imageAnimatorElement_->GetFirstChild(); + EXPECT_TRUE(box); + auto renderBox = box->GetRenderNode(); + EXPECT_TRUE(renderBox); + auto render = AceType::DynamicCast(renderBox); + EXPECT_TRUE(render); + EXPECT_EQ(260, render->GetWidth()); + EXPECT_EQ(260, render->GetHeight()); + + /** + * @tc.steps: step3. trigger frames to let image animation go + * @tc.expected: step3. value is correct + */ + platformWindowRaw_->TriggerOneFrame(); + box = imageAnimatorElement_->GetFirstChild(); + EXPECT_TRUE(box); + renderBox = box->GetRenderNode(); + EXPECT_TRUE(renderBox); + render = AceType::DynamicCast(renderBox); + EXPECT_TRUE(render); + EXPECT_EQ(260, render->GetWidth()); + EXPECT_EQ(260, render->GetHeight()); +} + +/** + * @tc.name: ImageAnimatorTest006 + * @tc.desc: test image animator element(infinite play). + * @tc.type: FUNC + * @tc.require: AR000FL0UC + * @tc.author: jiachunhui + */ +HWTEST_F(ImageAnimatorTest, ImageAnimatorTest006, TestSize.Level1) +{ + /** + * @tc.steps: step1. init ImageAnimator component + */ + g_configImageAnimator = [](const RefPtr& imageAnimator) { + std::vector> images; + imageAnimator->SetDuration(20); + // infinite repeat + imageAnimator->SetIteration(-1); + imageAnimator->SetIsReverse(false); + imageAnimator->SetIsFixedSize(false); + imageAnimator->SetImageProperties(g_secondImages); + imageAnimator->SetAnimator(AceType::MakeRefPtr()); + }; + InitImageAnimatorComponent(); + + /** + * @tc.steps: step2. trigger frames and get the first repeat time value + * @tc.expected: step2. value is correct + */ + platformWindowRaw_->TriggerOneFrame(); + auto box = imageAnimatorElement_->GetFirstChild(); + EXPECT_TRUE(box); + auto renderBox = box->GetRenderNode(); + EXPECT_TRUE(renderBox); + auto render = AceType::DynamicCast(renderBox); + EXPECT_TRUE(render); + EXPECT_EQ(220, render->GetWidth()); + EXPECT_EQ(220, render->GetHeight()); + + /** + * @tc.steps: step3. trigger frames and get the second repeat time value + * @tc.expected: step3. value is correct + */ + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + box = imageAnimatorElement_->GetFirstChild(); + EXPECT_TRUE(box); + renderBox = box->GetRenderNode(); + EXPECT_TRUE(renderBox); + render = AceType::DynamicCast(renderBox); + EXPECT_TRUE(render); + EXPECT_EQ(240, render->GetWidth()); + EXPECT_EQ(240, render->GetHeight()); +} + +/** + * @tc.name: ImageAnimatorTest007 + * @tc.desc: test image animator element(go forward). + * @tc.type: FUNC + * @tc.require: AR000FL0UC + * @tc.author: jiachunhui + */ +HWTEST_F(ImageAnimatorTest, ImageAnimatorTest007, TestSize.Level1) +{ + /** + * @tc.steps: step1. init ImageAnimator component + */ + g_configImageAnimator = [](const RefPtr& imageAnimator) { + imageAnimator->SetDuration(20); + imageAnimator->SetIteration(1); + // go forward. + imageAnimator->SetIsReverse(false); + imageAnimator->SetIsFixedSize(false); + imageAnimator->SetImageProperties(g_thirdImages); + imageAnimator->SetAnimator(AceType::MakeRefPtr()); + }; + InitImageAnimatorComponent(); + + /** + * @tc.steps: step2. get the init value + * @tc.expected: step2. value is correct + */ + auto box = imageAnimatorElement_->GetFirstChild(); + EXPECT_TRUE(box); + auto renderBox = box->GetRenderNode(); + EXPECT_TRUE(renderBox); + auto render = AceType::DynamicCast(renderBox); + EXPECT_TRUE(render); + EXPECT_EQ(240, render->GetWidth()); + EXPECT_EQ(240, render->GetHeight()); + + /** + * @tc.steps: step3. trigger frames to let image animation go + * @tc.expected: step3. value is correct + */ + platformWindowRaw_->TriggerOneFrame(); + box = imageAnimatorElement_->GetFirstChild(); + EXPECT_TRUE(box); + renderBox = box->GetRenderNode(); + EXPECT_TRUE(renderBox); + render = AceType::DynamicCast(renderBox); + EXPECT_TRUE(render); + EXPECT_EQ(240, render->GetWidth()); + EXPECT_EQ(240, render->GetHeight()); +} + +/** + * @tc.name: ImageAnimatorTest008 + * @tc.desc: test image animator element(go back). + * @tc.type: FUNC + * @tc.require: AR000FL0UC + * @tc.author: jiachunhui + */ +HWTEST_F(ImageAnimatorTest, ImageAnimatorTest008, TestSize.Level1) +{ + /** + * @tc.steps: step1. init ImageAnimator component + */ + g_configImageAnimator = [](const RefPtr& imageAnimator) { + std::vector> images; + imageAnimator->SetDuration(20); + imageAnimator->SetIteration(1); + imageAnimator->SetIsFixedSize(false); + // go back. + imageAnimator->SetIsReverse(true); + imageAnimator->SetImageProperties(g_thirdImages); + imageAnimator->SetAnimator(AceType::MakeRefPtr()); + }; + InitImageAnimatorComponent(); + + /** + * @tc.steps: step2. get the init value + * @tc.expected: step2. value is correct + */ + auto box = imageAnimatorElement_->GetFirstChild(); + EXPECT_TRUE(box); + auto renderBox = box->GetRenderNode(); + EXPECT_TRUE(renderBox); + auto render = AceType::DynamicCast(renderBox); + EXPECT_TRUE(render); + EXPECT_EQ(260, render->GetWidth()); + EXPECT_EQ(260, render->GetHeight()); + + /** + * @tc.steps: step3. trigger frames to let image animation go + * @tc.expected: step3. value is correct + */ + platformWindowRaw_->TriggerOneFrame(); + box = imageAnimatorElement_->GetFirstChild(); + EXPECT_TRUE(box); + renderBox = box->GetRenderNode(); + EXPECT_TRUE(renderBox); + render = AceType::DynamicCast(renderBox); + EXPECT_TRUE(render); + EXPECT_EQ(260, render->GetWidth()); + EXPECT_EQ(260, render->GetHeight()); +} + +/** + * @tc.name: ImageAnimatorTest009 + * @tc.desc: test image animator element(infinite play). + * @tc.type: FUNC + * @tc.require: AR000FL0UC + * @tc.author: jiachunhui + */ +HWTEST_F(ImageAnimatorTest, ImageAnimatorTest009, TestSize.Level1) +{ + /** + * @tc.steps: step1. init ImageAnimator component + */ + g_configImageAnimator = [](const RefPtr& imageAnimator) { + std::vector> images; + imageAnimator->SetDuration(20); + // infinite repeat + imageAnimator->SetIteration(-1); + imageAnimator->SetIsReverse(false); + imageAnimator->SetIsFixedSize(false); + imageAnimator->SetImageProperties(g_thirdImages); + imageAnimator->SetAnimator(AceType::MakeRefPtr()); + }; + InitImageAnimatorComponent(); + + /** + * @tc.steps: step2. trigger frames and get the first repeat time value + * @tc.expected: step2. value is correct + */ + platformWindowRaw_->TriggerOneFrame(); + auto box = imageAnimatorElement_->GetFirstChild(); + EXPECT_TRUE(box); + auto renderBox = box->GetRenderNode(); + EXPECT_TRUE(renderBox); + auto render = AceType::DynamicCast(renderBox); + EXPECT_TRUE(render); + EXPECT_EQ(240, render->GetWidth()); + EXPECT_EQ(240, render->GetHeight()); + + /** + * @tc.steps: step3. trigger frames and get the second repeat time value + * @tc.expected: step3. value is correct + */ + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + box = imageAnimatorElement_->GetFirstChild(); + EXPECT_TRUE(box); + renderBox = box->GetRenderNode(); + EXPECT_TRUE(renderBox); + render = AceType::DynamicCast(renderBox); + EXPECT_TRUE(render); + EXPECT_EQ(260, render->GetWidth()); + EXPECT_EQ(260, render->GetHeight()); +} + +/** + * @tc.name: ImageAnimatorTest010 + * @tc.desc: test image animator paly duration. + * @tc.type: FUNC + * @tc.require: AR000FL0UC + * @tc.author: jiachunhui + */ +HWTEST_F(ImageAnimatorTest, ImageAnimatorTest010, TestSize.Level1) +{ + /** + * @tc.steps: step1. init ImageAnimator component + */ + g_configImageAnimator = [](const RefPtr& imageAnimator) { + std::vector> images; + imageAnimator->SetDuration(20); + imageAnimator->SetIteration(-1); + imageAnimator->SetIsReverse(false); + imageAnimator->SetIsFixedSize(false); + imageAnimator->SetImageProperties(g_thirdImages); + imageAnimator->SetAnimator(AceType::MakeRefPtr()); + }; + InitImageAnimatorComponent(); + + /** + * @tc.steps: step2. trigger frames and get the first repeat time value + * @tc.expected: step2. value is correct + */ + auto box = imageAnimatorElement_->GetFirstChild(); + EXPECT_TRUE(box); + auto renderBox = box->GetRenderNode(); + EXPECT_TRUE(renderBox); + auto render = AceType::DynamicCast(renderBox); + EXPECT_TRUE(render); + EXPECT_EQ(240, render->GetWidth()); + EXPECT_EQ(240, render->GetHeight()); + + /** + * @tc.steps: step3. trigger frames and get the second repeat time value + * @tc.expected: step3. value is correct + */ + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + box = imageAnimatorElement_->GetFirstChild(); + EXPECT_TRUE(box); + renderBox = box->GetRenderNode(); + EXPECT_TRUE(renderBox); + render = AceType::DynamicCast(renderBox); + EXPECT_TRUE(render); + EXPECT_EQ(260, render->GetWidth()); + EXPECT_EQ(260, render->GetHeight()); + + /** + * @tc.steps: step3. trigger frames six times and get the second repeat time value + * @tc.expected: step3. if value is same as first frame value, the duration is 60. + */ + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + box = imageAnimatorElement_->GetFirstChild(); + EXPECT_TRUE(box); + renderBox = box->GetRenderNode(); + EXPECT_TRUE(renderBox); + render = AceType::DynamicCast(renderBox); + EXPECT_TRUE(render); + // verify the animation duration is 60, not 20. + EXPECT_EQ(240, render->GetWidth()); + EXPECT_EQ(240, render->GetHeight()); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/indexer/BUILD.gn b/frameworks/core/components/test/unittest/indexer/BUILD.gn new file mode 100644 index 00000000..18154ffd --- /dev/null +++ b/frameworks/core/components/test/unittest/indexer/BUILD.gn @@ -0,0 +1,53 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +if (is_standard_system) { + module_output_path = "ace_engine_standard/backenduicomponent/indexer" +} + +ohos_unittest("RenderIndexerTest") { + module_out_path = module_output_path + + sources = [ + "$ace_root/frameworks/core/components/test/json/json_frontend.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/mock_render_common.cpp", + "indexer_test_utils.cpp", + "render_indexer_test.cpp", + ] + + configs = [ "$ace_root:ace_test_config" ] + + deps = [ + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "//third_party/googletest:gtest_main", + ] + + if (is_standard_system) { + configs += [ "//third_party/curl:curl_config" ] + deps += [ + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/curl:curl", + ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +group("unittest") { + testonly = true + deps = [ ":RenderIndexerTest" ] +} diff --git a/frameworks/core/components/test/unittest/indexer/indexer_test_utils.cpp b/frameworks/core/components/test/unittest/indexer/indexer_test_utils.cpp new file mode 100644 index 00000000..64b9ac2b --- /dev/null +++ b/frameworks/core/components/test/unittest/indexer/indexer_test_utils.cpp @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/unittest/indexer/indexer_test_utils.h" + +#include "core/components/box/box_component.h" + +namespace OHOS::Ace { + +RefPtr IndexerTestUtils::CreateRenderBox(double width, double height) +{ + RefPtr renderBox = AceType::MakeRefPtr(); + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetWidth(width); + boxComponent->SetHeight(height); + renderBox->Update(boxComponent); + return renderBox; +} + +RefPtr IndexerTestUtils::CreateRenderItem( + double width, double height, const RefPtr& context) +{ + RefPtr parent = AceType::MakeRefPtr(); + RefPtr listItem = AceType::MakeRefPtr(); + RefPtr renderBox = AceType::MakeRefPtr(); + parent->Attach(context); + renderBox->Attach(context); + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetWidth(width); + boxComponent->SetHeight(height); + renderBox->Update(boxComponent); + parent->AddChild(listItem); + listItem->AddChild(renderBox); + return parent; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/indexer/indexer_test_utils.h b/frameworks/core/components/test/unittest/indexer/indexer_test_utils.h new file mode 100644 index 00000000..e684ba35 --- /dev/null +++ b/frameworks/core/components/test/unittest/indexer/indexer_test_utils.h @@ -0,0 +1,222 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_INDEXER_INDEXER_TEST_UTILS_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_INDEXER_INDEXER_TEST_UTILS_H + +#include "core/components/arc/arc_component.h" +#include "core/components/indexer/render_indexer.h" +#include "core/components/indexer/render_indexer_circle.h" +#include "core/components/indexer/render_indexer_list.h" +#include "core/components/test/unittest/list/list_test_utils.h" + +namespace OHOS::Ace { +namespace { + +class MockRenderIndexList final : public RenderIndexerList { +DECLARE_ACE_TYPE(MockRenderIndexList, RenderIndexerList); + +public: + MockRenderIndexList() = default; + ~MockRenderIndexList() override = default; +}; + +} // namespace + +class MockRenderArc final : public RenderArc { +DECLARE_ACE_TYPE(MockRenderArc, RenderArc); + +public: + MockRenderArc() = default; + ~MockRenderArc() override = default; + + bool IsInRange(double position, double radius = 0) + { + double start = GetStartAngle(); + double sweep = GetSweepAngle(); + return GreatOrEqual(position, start - radius) && LessNotEqual(position, start + sweep + radius); + } +}; + +class MockRenderIndexer final : public RenderIndexer { +DECLARE_ACE_TYPE(MockRenderIndexer, RenderIndexer); + +public: + MockRenderIndexer() = default; + ~MockRenderIndexer() override = default; + + int32_t GetFocusItemIndex() const + { + return focusedItem_; + } + + void MoveSection(int32_t indexInlist) + { + RenderIndexer::MoveSection(indexInlist); + } +}; + +class MockRenderIndexerCircle final : public RenderIndexerCircle { +DECLARE_ACE_TYPE(MockRenderIndexerCircle, RenderIndexerCircle); + +public: + MockRenderIndexerCircle() = default; + ~MockRenderIndexerCircle() override = default; + + RefPtr GetSpecificItem(int32_t index) + { + return RenderIndexerCircle::GetSpecificItem(index); + } + + bool NeedChangeLanguage(int32_t index) + { + return RenderIndexerCircle::NeedChangeIndexer(index); + } + + bool ChangeLanguage(int32_t index) + { + bool res = RenderIndexerCircle::ChangeLanguage(index); + if (res) { + PerformLayout(); + } + return res; + } + + int32_t GetFocusItemIndex() const + { + return focusedItem_; + } + + int32_t GetMaxShowItemCount() const + { + return itemMaxCount_; + } + + int32_t GetCurrentItemType() const + { + return curItemType_; + } + + int32_t GetFocusItemIndex() + { + return focusedItem_; + } + + double GetArcHeadOffset() + { + return arcHeadOffset_; + } + + IndexerItemStatus GetIndexerStatus() const + { + return curStatus_; + } + + IndexerItemStatus GetIndexerNextStatus() const + { + return nextStatus_; + } + + int32_t GetActualItemIndex(int32_t index) + { + return RenderIndexerCircle::GetActualItemIndex(index); + } + + void HandleRotation(double value) + { + RenderIndexerCircle::HandleRotation(value); + } + + void CollapseItems() + { + RenderIndexerCircle::CollapseItems(); + } + + void ExpandItems() + { + RenderIndexerCircle::ExpandItems(); + } + + void FinishCollapseAnimation() + { + if (collapseController_ && collapseController_->IsRunning()) { + if (GetIndexerNextStatus() == IndexerItemStatus::COLLAPSE) { + collapseController_->TriggerFrame(0); + collapseController_->Stop(); + } else if (GetIndexerNextStatus() == IndexerItemStatus::EXPAND) { + collapseController_->Finish(); + } + } + } + + void FinishFocusAnimation() + { + if (focusController_ && focusController_->IsRunning()) { + focusController_->TriggerFrame(INDEXER_ANIMATION_DURATION); + focusController_->Finish(); + } + } + + void MoveSection(int32_t indexInlist) + { + RenderIndexer::MoveSection(indexInlist); + } + + void SetItemsFocused(int32_t index) + { + RenderIndexerCircle::SetItemsFocused(index); + } +}; + +class MockRenderDisplay final : public RenderDisplay { +DECLARE_ACE_TYPE(MockRenderDisplay, RenderDisplay); + +public: + MockRenderDisplay() = default; + ~MockRenderDisplay() override = default; +}; + +class MockRenderText : public RenderText { +DECLARE_ACE_TYPE(MockRenderText, RenderText); + +public: + MockRenderText() = default; + ~MockRenderText() override = default; + + uint32_t GetTextLines() override + { + return 0; + } + + double GetTextWidth() override + { + return 0; + } + + Size Measure() override + { + return Size(0.0, 0.0); + } +}; + +class IndexerTestUtils { +public: + static RefPtr CreateRenderBox(double width, double height); + static RefPtr CreateRenderItem(double width, double height, const RefPtr& context); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_INDEXER_INDEXER_TEST_UTILS_H diff --git a/frameworks/core/components/test/unittest/indexer/render_indexer_test.cpp b/frameworks/core/components/test/unittest/indexer/render_indexer_test.cpp new file mode 100644 index 00000000..c3280233 --- /dev/null +++ b/frameworks/core/components/test/unittest/indexer/render_indexer_test.cpp @@ -0,0 +1,1925 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "gtest/gtest.h" + +#include "base/i18n/localization.h" +#include "core/animation/curves.h" +#include "core/components/arc/arc_component.h" +#include "core/components/arc/render_arc.h" +#include "core/components/indexer/indexer_list_component.h" +#include "core/components/indexer/render_indexer_circle.h" +#include "core/components/list/list_item_component.h" +#include "core/components/test/unittest/indexer/indexer_test_utils.h" +#include "core/components/test/unittest/mock/mock_render_common.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { + +class RenderIndexerTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; + + // check item visible status exclude collapse item; + bool CheckItemVisible(RefPtr renderIndexer) const; + RefPtr GetBubbleText(RefPtr renderIndexer) const; + RefPtr CreateRenderIndexer(RefPtr indexerComponent, bool isCircle, bool isBubble) + const; + + RefPtr mockContext_; + RefPtr indexerList_; + + int32_t index_ = 0; +}; + +RefPtr RenderIndexerTest::GetBubbleText(RefPtr renderIndexer) const +{ + auto children = renderIndexer->GetChildren(); + for (auto iter = children.begin(); iter != children.end(); ++iter) { + if (AceType::InstanceOf(*iter)) { + RefPtr renderBox = AceType::DynamicCast((*iter)->GetChildren().front()); + if (!renderBox) { + return nullptr; + } + RefPtr renderText = AceType::DynamicCast(renderBox->GetChildren().front()); + return renderText; + } + } + return nullptr; +} + +bool RenderIndexerTest::CheckItemVisible(RefPtr renderIndexer) const +{ + auto renderCircleIndexer = AceType::DynamicCast(renderIndexer); + if (!renderCircleIndexer) { + return false; + } + auto arc = AceType::DynamicCast(renderIndexer->GetChildren().front()); + if (!arc) { + return false; + } + + IndexerItemStatus curStatus = renderCircleIndexer->GetIndexerStatus(); + auto iter = renderCircleIndexer->GetChildren().begin(); + while (!AceType::InstanceOf(*iter)) { + ++iter; + } + if (curStatus == IndexerItemStatus::EXPAND) { + for (; iter != renderCircleIndexer->GetChildren().end(); ++iter) { + auto item = AceType::DynamicCast(*iter); + // skip ">" + if (item->GetSectionText() == ">") { + return true; + } + if (renderCircleIndexer->NeedProcess(*iter) != (*iter)->GetVisible()) { + return false; + } + } + } else if (curStatus == IndexerItemStatus::COLLAPSE) { + int32_t index = 0; + int32_t maxCount = renderCircleIndexer->GetMaxShowItemCount(); + double itemExtent = 2 * M_PI / maxCount; + double arcHead = renderCircleIndexer->GetArcHeadOffset() + INDEXER_ARC_BEGIN; // actual arc head position + for (; iter != renderCircleIndexer->GetChildren().end(); ++iter) { + auto item = AceType::DynamicCast(*iter); + // skip ">" + if (item->GetSectionText() == ">") { + return true; + } + if (renderCircleIndexer->NeedProcess(*iter) && index < INDEXER_COLLAPSE_ITEM_COUNT) { + auto position = arcHead - itemExtent / 2.0; + arcHead += itemExtent; + if (arc->IsInRange(position, itemExtent / 2.0)) { + ++index; + } + if (arc->IsInRange(position, itemExtent / 2.0) != (*iter)->GetVisible()) { + return false; + } + } else { + if ((*iter)->GetVisible()) { + return false; + } + } + } + } + return true; +} + +RefPtr RenderIndexerTest::CreateRenderIndexer(RefPtr indexerComponent, bool isCircle, + bool isBubble) const +{ + RefPtr renderIndexer; + if (isCircle) { + renderIndexer = AceType::MakeRefPtr(); + } else { + renderIndexer = AceType::MakeRefPtr(); + } + renderIndexer->Attach(mockContext_); + + auto children = indexerComponent->GetChildren(); + auto iter = children.begin(); + if (isCircle) { + // add arc + if (AceType::InstanceOf(*iter)) { + RefPtr renderArc = AceType::MakeRefPtr(); + renderArc->Attach(mockContext_); + renderArc->Update(*iter); + renderIndexer->AddChild(renderArc); + } + ++iter; + // add indicatorBox + if (AceType::InstanceOf(*iter)) { + RefPtr renderIndicator = AceType::MakeRefPtr(); + renderIndicator->Attach(mockContext_); + renderIndicator->Update(*iter); + renderIndexer->AddChild(renderIndicator); + } + ++iter; + } + if (isBubble) { + // add bubbleIndex + auto display = AceType::DynamicCast(*iter); + auto box = AceType::DynamicCast(display->GetChild()); + auto text = AceType::DynamicCast(box->GetChild()); + + RefPtr renderText = AceType::MakeRefPtr(); + renderText->Attach(mockContext_); + renderText->Update(text); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->Attach(mockContext_); + renderBox->AddChild(renderText); + renderBox->Update(box); + RefPtr renderDisplay = AceType::MakeRefPtr(); + renderDisplay->Attach(mockContext_); + renderDisplay->AddChild(renderBox); + renderDisplay->Update(display); + renderIndexer->AddChild(renderDisplay); + } + + std::list> itemList = indexerComponent->GetIndexerItemsComponents(); + for (auto item : itemList) { + RefPtr renderIndexerItem = AceType::MakeRefPtr(); + renderIndexerItem->Attach(mockContext_); + renderIndexerItem->Update(item); + renderIndexer->AddChild(renderIndexerItem); + } + renderIndexer->Update(indexerComponent); + return renderIndexer; +} + +void RenderIndexerTest::SetUpTestCase() +{ + Localization::GetInstance()->SetLocale("zh", "CN", "", "", ""); + GTEST_LOG_(INFO) << "IndexerTest SetUpTestCase"; +} + +void RenderIndexerTest::TearDownTestCase() {} + +void RenderIndexerTest::SetUp() +{ + mockContext_ = MockRenderCommon::GetMockContext(); + indexerList_ = AceType::MakeRefPtr(); + indexerList_->Attach(mockContext_); + index_ = 0; +} + +void RenderIndexerTest::TearDown() +{ + mockContext_ = nullptr; + indexerList_ = nullptr; +} + +/** + * @tc.name: RenderIndexerTest001 + * @tc.desc: Verify IndexList can create with list mode, the input is sorted. + * @tc.type: FUNC + * @tc.require: AR000DQ1TJ + * @tc.author: xuliangjun + */ +HWTEST_F(RenderIndexerTest, RenderIndexerTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct IndexerListComponent with list mode. + * @tc.expected: step1. properties are set correctly. + */ + RefPtr list = AceType::MakeRefPtr(); + list->SetDirection(FlexDirection::COLUMN); + RefPtr indexerList = AceType::MakeRefPtr(list, false, false); + RefPtr indexer = indexerList->GetIndexer(); + ASSERT_TRUE(indexer != nullptr); + bool circleMode = true; + if (indexer) { + indexer->SetCircleMode(false); + circleMode = indexer->GetCircleMode(); + } + ASSERT_TRUE(!circleMode); + + /** + * @tc.steps: step2. insert item with index key string. + * @tc.expected: step2. the count of items are correctly. + */ + std::string indexKey[] = { "A1", "A2", "B1", "B2", "D1" }; + for (int32_t i = 0; i < 5; i++) { + RefPtr box = AceType::MakeRefPtr(); + box->SetWidth(400.0); + box->SetHeight(100.0); + RefPtr listItem = AceType::MakeRefPtr("item", box); + listItem->SetIndexKey(indexKey[i]); + RefPtr composedItem = + AceType::MakeRefPtr("section", "sectionComposed", listItem); + indexerList->AppendChild(composedItem); + } + EXPECT_TRUE(indexerList->GetItemCountInList() == 8); + + /** + * @tc.steps: step3. IndexList insert section head item to the list. + * @tc.expected: step3. the index of section head is correct. + */ + int32_t index = indexerList->GetIndexer()->GetSectionIndexInList(indexKey[4]); + ASSERT_TRUE(index == 6); +} + +/** + * @tc.name: RenderIndexerTest002 + * @tc.desc: Verify IndexList can create with list mode, the input is not sorted. + * @tc.type: FUNC + * @tc.require: AR000DQ1TK + * @tc.author: xuliangjun + */ +HWTEST_F(RenderIndexerTest, RenderIndexerTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct IndexerListComponent with list mode. + * @tc.expected: step1. properties are set correctly. + */ + RefPtr list = AceType::MakeRefPtr(); + list->SetDirection(FlexDirection::COLUMN); + RefPtr indexerList = AceType::MakeRefPtr(list, false, false); + RefPtr indexer = indexerList->GetIndexer(); + ASSERT_TRUE(indexer != nullptr); + bool circleMode = true; + if (indexer) { + indexer->SetCircleMode(false); + circleMode = indexer->GetCircleMode(); + } + ASSERT_TRUE(!circleMode); + + /** + * @tc.steps: step2. insert item with index key string, the input is not sorted. + * @tc.expected: step2. the count of items are correctly. + */ + std::string indexKey[] = { "D1", "B2", "B1", "A2", "A1" }; + for (int32_t i = 0; i < 5; i++) { + RefPtr box = AceType::MakeRefPtr(); + box->SetWidth(400.0); + box->SetHeight(100.0); + RefPtr listItem = AceType::MakeRefPtr("item", box); + listItem->SetIndexKey(indexKey[i]); + RefPtr composedItem = + AceType::MakeRefPtr("section", "sectionComposed", listItem); + indexerList->AppendChild(composedItem); + } + EXPECT_TRUE(indexerList->GetItemCountInList() == 8); + + /** + * @tc.steps: step3. IndexList insert section head item to the list. + * @tc.expected: step3. the index of section head is correct. + */ + int32_t index = indexerList->GetIndexer()->GetSectionIndexInList(indexKey[4]); + ASSERT_TRUE(index == 0); +} + +/** + * @tc.name: RenderIndexerTest003 + * @tc.desc: Verify IndexList can return section index by item index. + * @tc.type: FUNC + * @tc.require: AR000DQ1TM + * @tc.author: xuliangjun + */ +HWTEST_F(RenderIndexerTest, RenderIndexerTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct IndexerListComponent with list mode. + * @tc.expected: step1. properties are set correctly. + */ + RefPtr list = AceType::MakeRefPtr(); + list->SetDirection(FlexDirection::COLUMN); + RefPtr indexerList = AceType::MakeRefPtr(list, false, false); + RefPtr indexer = indexerList->GetIndexer(); + ASSERT_TRUE(indexer != nullptr); + bool circleMode = true; + if (indexer) { + indexer->SetCircleMode(false); + circleMode = indexer->GetCircleMode(); + } + ASSERT_TRUE(!circleMode); + + /** + * @tc.steps: step2. insert item with index key string, the input is not sorted. + * @tc.expected: step2. the count of items are correctly. + */ + std::string indexKey[] = { "D1", "B2", "B1", "A2", "A1" }; + for (int32_t i = 0; i < 5; i++) { + RefPtr box = AceType::MakeRefPtr(); + box->SetWidth(400.0); + box->SetHeight(100.0); + RefPtr listItem = AceType::MakeRefPtr("item", box); + listItem->SetIndexKey(indexKey[i]); + RefPtr composedItem = + AceType::MakeRefPtr("section", "sectionComposed", listItem); + indexerList->AppendChild(composedItem); + } + EXPECT_TRUE(indexerList->GetItemCountInList() == 8); + + /** + * @tc.steps: step3. IndexList insert section head item to the list. + * @tc.expected: step3. the index of section is correct. + */ + int32_t index = indexerList->GetIndexer()->GetSectionIndexInIndexer(4); + ASSERT_TRUE(index == 2); +} + +/** + * @tc.name: RenderIndexerTest004 + * @tc.desc: Verify IndexList can create with circle mode, the input is not sorted. + * @tc.type: FUNC + * @tc.require: AR000DQ1TP + * @tc.author: xuliangjun + */ +HWTEST_F(RenderIndexerTest, RenderIndexerTest004, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct IndexerListComponent with list mode. + * @tc.expected: step1. properties are set correctly. + */ + RefPtr list = AceType::MakeRefPtr(); + list->SetDirection(FlexDirection::COLUMN); + RefPtr indexerList = AceType::MakeRefPtr(list, true, false); + RefPtr indexer = indexerList->GetIndexer(); + ASSERT_TRUE(indexer != nullptr); + bool circleMode = false; + if (indexer) { + circleMode = indexer->GetCircleMode(); + } + ASSERT_TRUE(circleMode); + + /** + * @tc.steps: step2. insert item with index key string, the input is not sorted. + * @tc.expected: step2. the count of items are correctly. + */ + std::string indexKey[] = { "D1", "B2", "B1", "A2", "A1" }; + for (int32_t i = 0; i < 5; i++) { + RefPtr box = AceType::MakeRefPtr(); + box->SetWidth(400.0); + box->SetHeight(100.0); + RefPtr listItem = AceType::MakeRefPtr("item", box); + listItem->SetIndexKey(indexKey[i]); + RefPtr composedItem = + AceType::MakeRefPtr("section", "sectionComposed", listItem); + indexerList->AppendChild(composedItem); + } + EXPECT_TRUE(indexerList->GetItemCountInList() == 5); + + /** + * @tc.steps: step3. IndexList insert section head item to the list. + * @tc.expected: step3. the index of section head is correct. + */ + int32_t index = indexerList->GetIndexer()->GetSectionIndexInList(indexKey[1]); + ASSERT_TRUE(index == 2); +} + +/** + * @tc.name: RenderIndexerTest005 + * @tc.desc: Verify IndexList can return section index by item index. + * @tc.type: FUNC + * @tc.require: AR000DQ1TP + * @tc.author: xuliangjun + */ +HWTEST_F(RenderIndexerTest, RenderIndexerTest005, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct IndexerListComponent with list mode. + * @tc.expected: step1. properties are set correctly. + */ + RefPtr list = AceType::MakeRefPtr(); + list->SetDirection(FlexDirection::COLUMN); + RefPtr indexerList = AceType::MakeRefPtr(list, true, false); + RefPtr indexer = indexerList->GetIndexer(); + ASSERT_TRUE(indexer != nullptr); + bool circleMode = false; + if (indexer) { + circleMode = indexer->GetCircleMode(); + } + ASSERT_TRUE(circleMode); + + /** + * @tc.steps: step2. insert item with index key string, the input is not sorted. + * @tc.expected: step2. the count of items are correctly. + */ + std::string indexKey[] = { "D1", "B2", "B1", "A2", "A1" }; + for (int32_t i = 0; i < 5; i++) { + RefPtr box = AceType::MakeRefPtr(); + box->SetWidth(400.0); + box->SetHeight(100.0); + RefPtr listItem = AceType::MakeRefPtr("item", box); + listItem->SetIndexKey(indexKey[i]); + RefPtr composedItem = + AceType::MakeRefPtr("section", "sectionComposed", listItem); + indexerList->AppendChild(composedItem); + } + EXPECT_TRUE(indexerList->GetItemCountInList() == 5); + + /** + * @tc.steps: step3. IndexList insert section head item to the list. + * @tc.expected: step3. the index of section is correct. + */ + int32_t index = indexerList->GetIndexer()->GetSectionIndexInIndexer(3); + ASSERT_TRUE(index == 3); +} + +/** + * @tc.name: RenderIndexerTest006 + * @tc.desc: Verify IndexList can create with list mode, the input is not sorted, and the indexkey is NULL. + * @tc.type: FUNC + * @tc.require: AR000DQ1TK + * @tc.author: xuliangjun + */ +HWTEST_F(RenderIndexerTest, RenderIndexerTest006, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct IndexerListComponent with list mode. + * @tc.expected: step1. properties are set correctly. + */ + RefPtr list = AceType::MakeRefPtr(); + list->SetDirection(FlexDirection::COLUMN); + RefPtr indexerList = AceType::MakeRefPtr(list, false, false); + RefPtr indexer = indexerList->GetIndexer(); + ASSERT_TRUE(indexer != nullptr); + bool circleMode = true; + if (indexer) { + indexer->SetCircleMode(false); + circleMode = indexer->GetCircleMode(); + } + ASSERT_TRUE(!circleMode); + + /** + * @tc.steps: step2. insert item with index key string, the input is not sorted. + * @tc.expected: step2. the count of items are correctly. + */ + std::string indexKey[] = { "D1", "B2", "B1", "A2", "A1", "" }; + for (int32_t i = 0; i < 6; i++) { + RefPtr box = AceType::MakeRefPtr(); + box->SetWidth(400.0); + box->SetHeight(100.0); + RefPtr listItem = AceType::MakeRefPtr("item", box); + listItem->SetIndexKey(indexKey[i]); + RefPtr composedItem = + AceType::MakeRefPtr("section", "sectionComposed", listItem); + indexerList->AppendChild(composedItem); + } + EXPECT_TRUE(indexerList->GetItemCountInList() == 10); + + /** + * @tc.steps: step3. IndexList insert section head item to the list. + * @tc.expected: step3. the index of section head is correct. + */ + int32_t index = indexerList->GetIndexer()->GetSectionIndexInList(indexKey[4]); + ASSERT_TRUE(index == 2); +} + +/** + * @tc.name: RenderIndexerTest007 + * @tc.desc: Verify IndexList can index with circle mode, the input is not sorted, and the indexkey is NULL. + * @tc.type: FUNC + * @tc.require: AR000DQ1TK + * @tc.author: xuliangjun + */ +HWTEST_F(RenderIndexerTest, RenderIndexerTest007, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct IndexerListComponent with circle mode. + * @tc.expected: step1. properties are set correctly. + */ + RefPtr list = AceType::MakeRefPtr(); + list->SetDirection(FlexDirection::COLUMN); + RefPtr indexerList = AceType::MakeRefPtr(list, true, false); + RefPtr indexer = indexerList->GetIndexer(); + ASSERT_TRUE(indexer != nullptr); + bool circleMode = false; + if (indexer) { + circleMode = indexer->GetCircleMode(); + } + ASSERT_TRUE(circleMode); + + /** + * @tc.steps: step2. insert item with index key string, the input is not sorted. + * @tc.expected: step2. the count of items are correctly. + */ + std::string indexKey[] = { "D1", "B2", "B1", "A2", "A1", "" }; + for (int32_t i = 0; i < 6; i++) { + RefPtr box = AceType::MakeRefPtr(); + box->SetWidth(400.0); + box->SetHeight(100.0); + RefPtr listItem = AceType::MakeRefPtr("item", box); + listItem->SetIndexKey(indexKey[i]); + RefPtr composedItem = + AceType::MakeRefPtr("section", "sectionComposed", listItem); + indexerList->AppendChild(composedItem); + } + EXPECT_TRUE(indexerList->GetItemCountInList() == 6); + + /** + * @tc.steps: step3. IndexList insert section head item to the list. + * @tc.expected: step3. the index of section head is correct. + */ + int32_t index = indexerList->GetIndexer()->GetSectionIndexInList(indexKey[4]); + ASSERT_TRUE(index == 1); +} + +/** + * @tc.name: RenderIndexerTest008 + * @tc.desc: Verify IndexList can create with list mode, return section index by item index, and the indexkey is Null. + * @tc.type: FUNC + * @tc.require: AR000DQ1TM + * @tc.author: xuliangjun + */ +HWTEST_F(RenderIndexerTest, RenderIndexerTest008, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct IndexerListComponent with list mode. + * @tc.expected: step1. properties are set correctly. + */ + RefPtr list = AceType::MakeRefPtr(); + list->SetDirection(FlexDirection::COLUMN); + RefPtr indexerList = AceType::MakeRefPtr(list, false, false); + RefPtr indexer = indexerList->GetIndexer(); + ASSERT_TRUE(indexer != nullptr); + bool circleMode = true; + if (indexer) { + indexer->SetCircleMode(false); + circleMode = indexer->GetCircleMode(); + } + ASSERT_TRUE(!circleMode); + + /** + * @tc.steps: step2. insert item with index key string, the input is not sorted. + * @tc.expected: step2. the count of items are correctly. + */ + std::string indexKey[] = { "D1", "B2", "B1", "A2", "A1", "" }; + for (int32_t i = 0; i < 6; i++) { + RefPtr box = AceType::MakeRefPtr(); + box->SetWidth(400.0); + box->SetHeight(100.0); + RefPtr listItem = AceType::MakeRefPtr("item", box); + listItem->SetIndexKey(indexKey[i]); + RefPtr composedItem = + AceType::MakeRefPtr("section", "sectionComposed", listItem); + indexerList->AppendChild(composedItem); + } + EXPECT_TRUE(indexerList->GetItemCountInList() == 10); + + /** + * @tc.steps: step3. IndexList insert section head item to the list. + * @tc.expected: step3. the index of section is correct. + */ + int32_t index = indexerList->GetIndexer()->GetSectionIndexInIndexer(6); + ASSERT_TRUE(index == 2); +} + +/** + * @tc.name: RenderIndexerTest009 + * @tc.desc: Verify IndexList can create with circle mode, return section index by item index, and the indexkey is + * number. + * @tc.type: FUNC + * @tc.require: AR000DQ1TM + * @tc.author: xuliangjun + */ +HWTEST_F(RenderIndexerTest, RenderIndexerTest009, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct IndexerListComponent circle list mode. + * @tc.expected: step1. properties are set correctly. + */ + RefPtr list = AceType::MakeRefPtr(); + list->SetDirection(FlexDirection::COLUMN); + RefPtr indexerList = AceType::MakeRefPtr(list, true, false); + RefPtr indexer = indexerList->GetIndexer(); + ASSERT_TRUE(indexer != nullptr); + bool circleMode = false; + if (indexer) { + circleMode = indexer->GetCircleMode(); + } + ASSERT_TRUE(circleMode); + + /** + * @tc.steps: step2. insert item with index key string, the input is not sorted. + * @tc.expected: step2. the count of items are correctly. + */ + std::string indexKey[] = { "D1", "B2", "B1", "A2", "A1", "" }; + for (int32_t i = 0; i < 6; i++) { + RefPtr box = AceType::MakeRefPtr(); + box->SetWidth(400.0); + box->SetHeight(100.0); + RefPtr listItem = AceType::MakeRefPtr("item", box); + listItem->SetIndexKey(indexKey[i]); + RefPtr composedItem = + AceType::MakeRefPtr("section", "sectionComposed", listItem); + indexerList->AppendChild(composedItem); + } + EXPECT_TRUE(indexerList->GetItemCountInList() == 6); + + /** + * @tc.steps: step3. IndexList insert section head item to the list. + * @tc.expected: step3. the index of section is correct. + */ + int32_t index = indexerList->GetIndexer()->GetSectionIndexInIndexer(4); + ASSERT_TRUE(index == 3); +} + +/** + * @tc.name: RenderIndexerTest010 + * @tc.desc: Verify IndexList can index with list mode, the input is not sorted, and the indexkey is number. + * @tc.type: FUNC + * @tc.require: AR000DQ1TP + * @tc.author: xuliangjun + */ +HWTEST_F(RenderIndexerTest, RenderIndexerTest010, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct IndexerListComponent with list mode. + * @tc.expected: step1. properties are set correctly. + */ + RefPtr list = AceType::MakeRefPtr(); + list->SetDirection(FlexDirection::COLUMN); + RefPtr indexerList = AceType::MakeRefPtr(list, false, false); + RefPtr indexer = indexerList->GetIndexer(); + ASSERT_TRUE(indexer != nullptr); + bool circleMode = true; + if (indexer) { + circleMode = indexer->GetCircleMode(); + } + ASSERT_TRUE(!circleMode); + + /** + * @tc.steps: step2. insert item with index key string, the input is not sorted. + * @tc.expected: step2. the count of items are correctly. + */ + std::string indexKey[] = { "D1", "B2", "B1", "A2", "A1", "123" }; + for (int32_t i = 0; i < 6; i++) { + RefPtr box = AceType::MakeRefPtr(); + box->SetWidth(400.0); + box->SetHeight(100.0); + RefPtr listItem = AceType::MakeRefPtr("item", box); + listItem->SetIndexKey(indexKey[i]); + RefPtr composedItem = + AceType::MakeRefPtr("section", "sectionComposed", listItem); + indexerList->AppendChild(composedItem); + } + EXPECT_TRUE(indexerList->GetItemCountInList() == 10); + + /** + * @tc.steps: step3. IndexList insert section head item to the list. + * @tc.expected: step3. the index of section head is correct. + */ + int32_t index = indexerList->GetIndexer()->GetSectionIndexInList(indexKey[1]); + ASSERT_TRUE(index == 5); +} + +/** + * @tc.name: RenderIndexerTest011 + * @tc.desc: Verify IndexList can return section index by item index with list mode, while indexkey is number. + * @tc.type: FUNC + * @tc.require: AR000DQ1TP + * @tc.author: xuliangjun + */ +HWTEST_F(RenderIndexerTest, RenderIndexerTest011, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct IndexerListComponent with list mode. + * @tc.expected: step1. properties are set correctly. + */ + RefPtr list = AceType::MakeRefPtr(); + list->SetDirection(FlexDirection::COLUMN); + RefPtr indexerList = AceType::MakeRefPtr(list, false, false); + RefPtr indexer = indexerList->GetIndexer(); + ASSERT_TRUE(indexer != nullptr); + bool circleMode = true; + if (indexer) { + circleMode = indexer->GetCircleMode(); + } + ASSERT_TRUE(!circleMode); + + /** + * @tc.steps: step2. insert item with index key string, the input is not sorted. + * @tc.expected: step2. the count of items are correctly. + */ + std::string indexKey[] = { "D1", "B2", "B1", "A2", "A1", "123" }; + for (int32_t i = 0; i < 6; i++) { + RefPtr box = AceType::MakeRefPtr(); + box->SetWidth(400.0); + box->SetHeight(100.0); + RefPtr listItem = AceType::MakeRefPtr("item", box); + listItem->SetIndexKey(indexKey[i]); + RefPtr composedItem = + AceType::MakeRefPtr("section", "sectionComposed", listItem); + indexerList->AppendChild(composedItem); + } + EXPECT_TRUE(indexerList->GetItemCountInList() == 10); + + /** + * @tc.steps: step3. IndexList insert section head item to the list. + * @tc.expected: step3. the index of section is correct. + */ + int32_t index = indexerList->GetIndexer()->GetSectionIndexInIndexer(3); + ASSERT_TRUE(index == 1); +} + +/** + * @tc.name: RenderIndexerTest012 + * @tc.desc: Verify IndexList can index with circle mode, the input is not sorted, and the indexkey is number. + * @tc.type: FUNC + * @tc.require: AR000DQ1TP + * @tc.author: xuliangjun + */ +HWTEST_F(RenderIndexerTest, RenderIndexerTest012, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct IndexerListComponent with list mode. + * @tc.expected: step1. properties are set correctly. + */ + RefPtr list = AceType::MakeRefPtr(); + list->SetDirection(FlexDirection::COLUMN); + RefPtr indexerList = AceType::MakeRefPtr(list, true, false); + RefPtr indexer = indexerList->GetIndexer(); + ASSERT_TRUE(indexer != nullptr); + bool circleMode = false; + if (indexer) { + circleMode = indexer->GetCircleMode(); + } + ASSERT_TRUE(circleMode); + + /** + * @tc.steps: step2. insert item with index key string, the input is not sorted. + * @tc.expected: step2. the count of items are correctly. + */ + std::string indexKey[] = { "D1", "B2", "B1", "A2", "A1", "123" }; + for (int32_t i = 0; i < 6; i++) { + RefPtr box = AceType::MakeRefPtr(); + box->SetWidth(400.0); + box->SetHeight(100.0); + RefPtr listItem = AceType::MakeRefPtr("item", box); + listItem->SetIndexKey(indexKey[i]); + RefPtr composedItem = + AceType::MakeRefPtr("section", "sectionComposed", listItem); + indexerList->AppendChild(composedItem); + } + EXPECT_TRUE(indexerList->GetItemCountInList() == 6); + + /** + * @tc.steps: step3. IndexList insert section head item to the list. + * @tc.expected: step3. the index of section head is correct. + */ + int32_t index = indexerList->GetIndexer()->GetSectionIndexInList(indexKey[1]); + ASSERT_TRUE(index == 3); +} + +/** + * @tc.name: RenderIndexerTest013 + * @tc.desc: Verify IndexList can return section index by item index with circle mode, while indexkey is number. + * @tc.type: FUNC + * @tc.require: AR000DQ1TP + * @tc.author: xuliangjun + */ +HWTEST_F(RenderIndexerTest, RenderIndexerTest013, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct IndexerListComponent with list mode. + * @tc.expected: step1. properties are set correctly. + */ + RefPtr list = AceType::MakeRefPtr(); + list->SetDirection(FlexDirection::COLUMN); + RefPtr indexerList = AceType::MakeRefPtr(list, true, false); + RefPtr indexer = indexerList->GetIndexer(); + ASSERT_TRUE(indexer != nullptr); + bool circleMode = false; + if (indexer) { + circleMode = indexer->GetCircleMode(); + } + ASSERT_TRUE(circleMode); + + /** + * @tc.steps: step2. insert item with index key string, the input is not sorted. + * @tc.expected: step2. the count of items are correctly. + */ + std::string indexKey[] = { "D1", "B2", "B1", "A2", "A1", "123" }; + for (int32_t i = 0; i < 6; i++) { + RefPtr box = AceType::MakeRefPtr(); + box->SetWidth(400.0); + box->SetHeight(100.0); + RefPtr listItem = AceType::MakeRefPtr("item", box); + listItem->SetIndexKey(indexKey[i]); + RefPtr composedItem = + AceType::MakeRefPtr("section", "sectionComposed", listItem); + indexerList->AppendChild(composedItem); + } + EXPECT_TRUE(indexerList->GetItemCountInList() == 6); + + /** + * @tc.steps: step3. IndexList insert section head item to the list. + * @tc.expected: step3. the index of section is correct. + */ + int32_t index = indexerList->GetIndexer()->GetSectionIndexInIndexer(3); + ASSERT_TRUE(index == 3); +} + +/** + * @tc.name: RenderIndexerTest014 + * @tc.desc: Verify IndexList can return section index by item index with list mode, while indexkey is number. + * @tc.type: FUNC + * @tc.require: AR000DQ1TP + * @tc.author: xuliangjun + */ +HWTEST_F(RenderIndexerTest, RenderIndexerTest014, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct IndexerListComponent with list mode. + * @tc.expected: step1. properties are set correctly. + */ + RefPtr list = AceType::MakeRefPtr(); + list->SetDirection(FlexDirection::COLUMN); + RefPtr indexerList = AceType::MakeRefPtr(list, false, false); + RefPtr indexer = indexerList->GetIndexer(); + ASSERT_TRUE(indexer != nullptr); + bool circleMode = true; + if (indexer) { + circleMode = indexer->GetCircleMode(); + } + ASSERT_TRUE(!circleMode); + + /** + * @tc.steps: step2. insert item with index key string, the input is not sorted. + * @tc.expected: step2. the count of items are correctly. + */ + std::string indexKey[] = { "D1", "B2", "B1", "A2", "A1", "123" }; + for (int32_t i = 0; i < 6; i++) { + RefPtr box = AceType::MakeRefPtr(); + box->SetWidth(400.0); + box->SetHeight(100.0); + RefPtr listItem = AceType::MakeRefPtr("item", box); + listItem->SetIndexKey(indexKey[i]); + RefPtr composedItem = + AceType::MakeRefPtr("section", "sectionComposed", listItem); + indexerList->AppendChild(composedItem); + } + EXPECT_TRUE(indexerList->GetItemCountInList() == 10); + + /** + * @tc.steps: step3. IndexList insert section head item to the list. + * @tc.expected: step3. the index of section is correct. + */ + std::string itemIndexKey; + RefPtr firstItem = ListItemComponent::GetListItem(list->GetChildren().front()); + if (firstItem) { + itemIndexKey = firstItem->GetIndexKey(); + } + ASSERT_TRUE(itemIndexKey == "#"); +} + +/** + * @tc.name: RenderIndexerTest015 + * @tc.desc: Verify IndexList can return section index by item index with list mode, while indexkey is number. + * @tc.type: FUNC + * @tc.require: AR000DQ1TP + * @tc.author: xuliangjun + */ +HWTEST_F(RenderIndexerTest, RenderIndexerTest015, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct IndexerListComponent with list mode. + * @tc.expected: step1. properties are set correctly. + */ + RefPtr list = AceType::MakeRefPtr(); + list->SetDirection(FlexDirection::COLUMN); + RefPtr indexerList = AceType::MakeRefPtr(list, false, false); + RefPtr indexer = indexerList->GetIndexer(); + ASSERT_TRUE(indexer != nullptr); + bool circleMode = true; + if (indexer) { + circleMode = indexer->GetCircleMode(); + } + ASSERT_TRUE(!circleMode); + + /** + * @tc.steps: step2. insert item with index key string, the input is not sorted. + * @tc.expected: step2. the count of items are correctly. + */ + std::string indexKey[] = { "D1", "B2", "B1", "A2", "A1", "123" }; + for (int32_t i = 0; i < 6; i++) { + RefPtr box = AceType::MakeRefPtr(); + box->SetWidth(400.0); + box->SetHeight(100.0); + RefPtr listItem = AceType::MakeRefPtr("item", box); + listItem->SetIndexKey(indexKey[i]); + RefPtr composedItem = + AceType::MakeRefPtr("section", "sectionComposed", listItem); + indexerList->AppendChild(composedItem); + } + EXPECT_TRUE(indexerList->GetItemCountInList() == 10); + + /** + * @tc.steps: step3. IndexList insert section head item to the list. + * @tc.expected: step3. the index of section is correct. + */ + bool sticky = false; + RefPtr firstItem = ListItemComponent::GetListItem(list->GetChildren().front()); + if (firstItem) { + sticky = firstItem->GetSticky(); + } + ASSERT_TRUE(sticky); +} + +/** + * @tc.name: RenderIndexerTest016 + * @tc.desc: Verify IndexList can return section index by item index with list mode, while indexkey is number. + * @tc.type: FUNC + * @tc.require: AR000DQ1TP + * @tc.author: xuliangjun + */ +HWTEST_F(RenderIndexerTest, RenderIndexerTest016, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct IndexerListComponent with list mode. + * @tc.expected: step1. properties are set correctly. + */ + RefPtr list = AceType::MakeRefPtr(); + list->SetDirection(FlexDirection::COLUMN); + RefPtr indexerList = AceType::MakeRefPtr(list, false, false); + RefPtr indexer = indexerList->GetIndexer(); + ASSERT_TRUE(indexer != nullptr); + bool circleMode = true; + if (indexer) { + circleMode = indexer->GetCircleMode(); + } + ASSERT_TRUE(!circleMode); + + /** + * @tc.steps: step2. insert item with index key string, the input is not sorted. + * @tc.expected: step2. the count of items are correctly. + */ + std::string indexKey[] = { "123", "A1", "A2", "B1", "B2", "D1" }; + for (int32_t i = 0; i < 6; i++) { + RefPtr box = AceType::MakeRefPtr(); + box->SetWidth(400.0); + box->SetHeight(100.0); + RefPtr listItem = AceType::MakeRefPtr("item", box); + listItem->SetIndexKey(indexKey[i]); + RefPtr composedItem = + AceType::MakeRefPtr("section", "sectionComposed", listItem); + indexerList->AppendChild(composedItem); + } + EXPECT_TRUE(indexerList->GetItemCountInList() == 10); + + /** + * @tc.steps: step3. IndexList insert section head item to the list. + * @tc.expected: step3. the index of section is correct. + */ + std::string itemIndexKey; + RefPtr lastItem = ListItemComponent::GetListItem(list->GetChildren().back()); + if (lastItem) { + itemIndexKey = lastItem->GetIndexKey(); + } + ASSERT_TRUE(itemIndexKey == "D1"); +} + +/** + * @tc.name: RenderIndexerTest017 + * @tc.desc: Verify IndexList has a bubble component with default setting. + * @tc.type: FUNC + * @tc.require: AR000F3CCD + * @tc.author: jinwuwen + */ +HWTEST_F(RenderIndexerTest, RenderIndexerTest017, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct IndexerListComponent with list mode. + * @tc.expected: step1. properties are set correctly. + */ + RefPtr list = AceType::MakeRefPtr(); + list->SetDirection(FlexDirection::COLUMN); + RefPtr indexerList = AceType::MakeRefPtr(list, false, false); + RefPtr indexer = indexerList->GetIndexer(); + ASSERT_TRUE(indexer != nullptr); + bool circleMode = true; + if (indexer) { + circleMode = indexer->GetCircleMode(); + } + ASSERT_TRUE(!circleMode); + + /** + * @tc.steps: step2. insert item with index key string, the input is not sorted. + * @tc.expected: step2. the count of items are correctly. + */ + std::string indexKey[] = { "123", "A1", "A2", "B1", "B2", "D1" }; + for (int32_t i = 0; i < 6; i++) { + RefPtr box = AceType::MakeRefPtr(); + box->SetWidth(400.0); + box->SetHeight(100.0); + RefPtr listItem = AceType::MakeRefPtr("item", box); + listItem->SetIndexKey(indexKey[i]); + RefPtr composedItem = + AceType::MakeRefPtr("section", "sectionComposed", listItem); + indexerList->AppendChild(composedItem); + } + EXPECT_TRUE(indexerList->GetItemCountInList() == 10); + + /** + * @tc.steps: step3. IndexList insert section head item to the list. + * @tc.expected: step3. the index of section is correct. + */ + EXPECT_TRUE(indexer->GetChildren().size() == 28); + auto child = indexer->GetChildren().front(); + auto display = AceType::DynamicCast(child); + ASSERT_TRUE(display); +} + +/** + * @tc.name: RenderIndexerTest018 + * @tc.desc: Verify IndexList children count with circle mode、 non-bubble、multi-language. + * @tc.type: FUNC + * @tc.require: AR000F3CCD + * @tc.author: jinwuwen + */ +HWTEST_F(RenderIndexerTest, RenderIndexerTest018, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct IndexerListComponent with list mode. + * @tc.expected: step1. properties are set correctly. + */ + std::vector labels = {"#", "1", "2"}; + RefPtr list = AceType::MakeRefPtr(); + list->SetDirection(FlexDirection::COLUMN); + RefPtr indexerList = + AceType::MakeRefPtr(list, labels, true, false, false, true); + RefPtr indexer = indexerList->GetIndexer(); + ASSERT_TRUE(indexer != nullptr); + bool circleMode = true; + if (indexer) { + circleMode = indexer->GetCircleMode(); + } + ASSERT_TRUE(circleMode); + + /** + * @tc.steps: step2. insert item with index key string, the input is not sorted. + * @tc.expected: step2. the count of items are correctly. + */ + std::string indexKey[] = { "123", "A1", "A2", "B1", "B2", "D1" }; + for (int32_t i = 0; i < 6; i++) { + RefPtr box = AceType::MakeRefPtr(); + box->SetWidth(400.0); + box->SetHeight(100.0); + RefPtr listItem = AceType::MakeRefPtr("item", box); + listItem->SetIndexKey(indexKey[i]); + RefPtr composedItem = + AceType::MakeRefPtr("section", "sectionComposed", listItem); + indexerList->AppendChild(composedItem); + } + EXPECT_TRUE(indexerList->GetItemCountInList() == 6); + + /** + * @tc.steps: step3. IndexList insert section head item to the list. + * @tc.expected: step3. the index of section is correct. + */ + auto itemList = indexer->GetIndexerItemsComponents(); + EXPECT_TRUE(itemList.size() == 30); + EXPECT_TRUE(indexer->GetChildren().size() == 32); + auto iter = indexer->GetChildren().begin(); + auto arc = AceType::DynamicCast(*iter); + ASSERT_TRUE(arc); + ++iter; + auto box = AceType::DynamicCast(*iter); + ASSERT_TRUE(box); + ++iter; + auto item = AceType::DynamicCast(*iter); + ASSERT_TRUE(item); +} + +/** + * @tc.name: RenderIndexerTest019 + * @tc.desc: Verify IndexList can shown correctly with circle-mode、bubble、multi-language. + * @tc.type: FUNC + * @tc.require: AR000F3CCD + * @tc.author: jinwuwen + */ +HWTEST_F(RenderIndexerTest, RenderIndexerTest019, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct IndexerListComponent with list mode. + * @tc.expected: step1. properties are set correctly. + */ + std::vector labels = {"#", "1", "2", "3", "4"}; + RefPtr list = AceType::MakeRefPtr(); + list->SetDirection(FlexDirection::COLUMN); + RefPtr indexerList = + AceType::MakeRefPtr(list, labels, true, false, true, true); + RefPtr indexer = indexerList->GetIndexer(); + ASSERT_TRUE(indexer != nullptr); + bool circleMode = true; + if (indexer) { + circleMode = indexer->GetCircleMode(); + } + ASSERT_TRUE(circleMode); + + /** + * @tc.steps: step2. insert item with index key string, the input is not sorted. + * @tc.expected: step2. the count of items are correctly. + */ + std::string indexKey[] = { "123", "A1", "A2", "B1", "B2", "D1" }; + for (int32_t i = 0; i < 6; i++) { + RefPtr box = AceType::MakeRefPtr(); + box->SetWidth(400.0); + box->SetHeight(100.0); + RefPtr listItem = AceType::MakeRefPtr("item", box); + listItem->SetIndexKey(indexKey[i]); + RefPtr composedItem = + AceType::MakeRefPtr("section", "sectionComposed", listItem); + indexerList->AppendChild(composedItem); + } + EXPECT_TRUE(indexerList->GetItemCountInList() == 6); + + /** + * @tc.steps: step3. IndexList insert section head item to the list. + * @tc.expected: step3. the index of section is correct. + */ + RefPtr renderNode = CreateRenderIndexer(indexer, true, true); + ASSERT_TRUE(AceType::InstanceOf(renderNode)); + RefPtr renderIndex019 = AceType::DynamicCast(renderNode); + ASSERT_TRUE(renderIndex019); + ASSERT_TRUE(renderIndex019->GetChildren().size() == indexer->GetChildren().size()); + ASSERT_TRUE(renderIndex019->GetCircleMode()); + ASSERT_TRUE(renderIndex019->GetIndexerStatus() == IndexerItemStatus::EXPAND); + ASSERT_TRUE(renderIndex019->GetFocusItemIndex() == -1); + renderIndex019->PerformLayout(); + EXPECT_TRUE(renderIndex019->GetFocusItemIndex() == 1); + EXPECT_TRUE(renderIndex019->GetSpecificItem(1)->GetKeyCount() == 1); // "1" + EXPECT_TRUE(renderIndex019->GetSpecificItem(5)->GetKeyCount() == 2); // "A" + EXPECT_TRUE(renderIndex019->GetSpecificItem(6)->GetKeyCount() == 2); // "B" + EXPECT_TRUE(renderIndex019->GetSpecificItem(7)->GetKeyCount() == 0); // "C" + EXPECT_TRUE(renderIndex019->GetSpecificItem(8)->GetKeyCount() == 1); // "D" + EXPECT_TRUE(CheckItemVisible(renderIndex019)); +} + +/** + * @tc.name: RenderIndexerTest020 + * @tc.desc: Verify IndexList can change language when touch specific item when on expand status. + * @tc.type: FUNC + * @tc.require: AR000F3CCD + * @tc.author: jinwuwen + */ +HWTEST_F(RenderIndexerTest, RenderIndexerTest020, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct IndexerListComponent with list mode. + * @tc.expected: step1. properties are set correctly. + */ + std::vector labels = {"#", "1", "2", "3", "4"}; + RefPtr list = AceType::MakeRefPtr(); + list->SetDirection(FlexDirection::COLUMN); + RefPtr indexerList = + AceType::MakeRefPtr(list, labels, true, false, true, true); + RefPtr indexer = indexerList->GetIndexer(); + ASSERT_TRUE(indexer != nullptr); + bool circleMode = true; + if (indexer) { + circleMode = indexer->GetCircleMode(); + } + ASSERT_TRUE(circleMode); + + /** + * @tc.steps: step2. insert item with index key string, the input is not sorted. + * @tc.expected: step2. the count of items are correctly. + */ + std::string indexKey[] = { "123", "A1", "A2", "B1", "B2", "D1" }; + for (int32_t i = 0; i < 6; i++) { + RefPtr box = AceType::MakeRefPtr(); + box->SetWidth(400.0); + box->SetHeight(100.0); + RefPtr listItem = AceType::MakeRefPtr("item", box); + listItem->SetIndexKey(indexKey[i]); + RefPtr composedItem = + AceType::MakeRefPtr("section", "sectionComposed", listItem); + indexerList->AppendChild(composedItem); + } + EXPECT_TRUE(indexerList->GetItemCountInList() == 6); + + /** + * @tc.steps: step3. IndexList insert section head item to the list. + * @tc.expected: step3. the index of section is correct. + */ + RefPtr renderNode = CreateRenderIndexer(indexer, true, true); + RefPtr renderIndex020 = AceType::DynamicCast(renderNode); + renderIndex020->PerformLayout(); + ASSERT_TRUE(renderIndex020->GetCurrentItemType() == 0); + ASSERT_TRUE(renderIndex020->GetIndexerStatus() == IndexerItemStatus::EXPAND); + ASSERT_TRUE(!renderIndex020->NeedChangeLanguage(1)); // "1" + ASSERT_TRUE(renderIndex020->NeedChangeLanguage(5)); // "A" + ASSERT_TRUE(renderIndex020->GetSpecificItem(5)->GetVisible()); + ASSERT_TRUE(!renderIndex020->GetSpecificItem(6)->GetVisible()); // "B" is not visible + ASSERT_TRUE(renderIndex020->GetActualItemIndex(3) == 3); // position 3 is "3" + EXPECT_TRUE(CheckItemVisible(renderIndex020)); +} + +/** + * @tc.name: RenderIndexerTest021 + * @tc.desc: Verify IndexList can change language when touch specific item when on collapse status. + * @tc.type: FUNC + * @tc.require: AR000F3CCD + * @tc.author: jinwuwen + */ +HWTEST_F(RenderIndexerTest, RenderIndexerTest021, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct IndexerListComponent with list mode. + * @tc.expected: step1. properties are set correctly. + */ + std::vector labels = {"#", "1", "2", "3", "4"}; + RefPtr list = AceType::MakeRefPtr(); + list->SetDirection(FlexDirection::COLUMN); + RefPtr indexerList = + AceType::MakeRefPtr(list, labels, true, false, true, true); + RefPtr indexer = indexerList->GetIndexer(); + ASSERT_TRUE(indexer != nullptr); + bool circleMode = true; + if (indexer) { + circleMode = indexer->GetCircleMode(); + } + ASSERT_TRUE(circleMode); + + /** + * @tc.steps: step2. insert item with index key string, the input is not sorted. + * @tc.expected: step2. the count of items are correctly. + */ + std::string indexKey[] = { "123", "A1", "A2", "B1", "B2", "D1" }; + for (int32_t i = 0; i < 6; i++) { + RefPtr box = AceType::MakeRefPtr(); + box->SetWidth(400.0); + box->SetHeight(100.0); + RefPtr listItem = AceType::MakeRefPtr("item", box); + listItem->SetIndexKey(indexKey[i]); + RefPtr composedItem = + AceType::MakeRefPtr("section", "sectionComposed", listItem); + indexerList->AppendChild(composedItem); + } + EXPECT_TRUE(indexerList->GetItemCountInList() == 6); + + /** + * @tc.steps: step3. IndexList insert section head item to the list. + * @tc.expected: step3. the index of section is correct. + */ + RefPtr renderNode = CreateRenderIndexer(indexer, true, true); + RefPtr renderIndex021 = AceType::DynamicCast(renderNode); + renderIndex021->PerformLayout(); + + renderIndex021->CollapseItems(); + ASSERT_TRUE(renderIndex021->GetIndexerStatus() == IndexerItemStatus::ANIMATION); + ASSERT_TRUE(renderIndex021->GetIndexerNextStatus() == IndexerItemStatus::COLLAPSE); + + renderIndex021->FinishCollapseAnimation(); + ASSERT_TRUE(renderIndex021->GetIndexerStatus() == IndexerItemStatus::COLLAPSE); + ASSERT_TRUE(renderIndex021->GetCurrentItemType() == 0); + ASSERT_TRUE(!renderIndex021->NeedChangeLanguage(1)); // "1" + ASSERT_TRUE(!renderIndex021->NeedChangeLanguage(5)); // "A" +} + +/** + * @tc.name: RenderIndexerTest022 + * @tc.desc: Verify IndexList can shown correctly after language changed. + * @tc.type: FUNC + * @tc.require: AR000F3CCF + * @tc.author: jinwuwen + */ +HWTEST_F(RenderIndexerTest, RenderIndexerTest022, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct IndexerListComponent with list mode. + * @tc.expected: step1. properties are set correctly. + */ + std::vector labels = {"#", "1", "2", "3", "4"}; + RefPtr list = AceType::MakeRefPtr(); + list->SetDirection(FlexDirection::COLUMN); + RefPtr indexerList = + AceType::MakeRefPtr(list, labels, true, false, true, true); + RefPtr indexer = indexerList->GetIndexer(); + ASSERT_TRUE(indexer != nullptr); + bool circleMode = true; + if (indexer) { + circleMode = indexer->GetCircleMode(); + } + ASSERT_TRUE(circleMode); + + /** + * @tc.steps: step2. insert item with index key string, the input is not sorted. + * @tc.expected: step2. the count of items are correctly. + */ + std::string indexKey[] = { "123", "A1", "A2", "B1", "B2", "D1" }; + for (int32_t i = 0; i < 6; i++) { + RefPtr box = AceType::MakeRefPtr(); + box->SetWidth(400.0); + box->SetHeight(100.0); + RefPtr listItem = AceType::MakeRefPtr("item", box); + listItem->SetIndexKey(indexKey[i]); + RefPtr composedItem = + AceType::MakeRefPtr("section", "sectionComposed", listItem); + indexerList->AppendChild(composedItem); + } + EXPECT_TRUE(indexerList->GetItemCountInList() == 6); + + /** + * @tc.steps: step3. IndexList insert section head item to the list. + * @tc.expected: step3. the index of section is correct. + */ + RefPtr renderNode = CreateRenderIndexer(indexer, true, true); + RefPtr renderIndex022 = AceType::DynamicCast(renderNode); + renderIndex022->PerformLayout(); + EXPECT_TRUE(renderIndex022->GetSpecificItem(0)->GetItemType() == 0); + EXPECT_TRUE(!renderIndex022->ChangeLanguage(0)); // "#" + EXPECT_TRUE(!renderIndex022->ChangeLanguage(1)); + ASSERT_TRUE(renderIndex022->ChangeLanguage(5)); + EXPECT_TRUE(renderIndex022->GetCurrentItemType() == 1); + EXPECT_TRUE(renderIndex022->GetIndexerStatus() == IndexerItemStatus::EXPAND); + EXPECT_TRUE(renderIndex022->NeedChangeLanguage(1)); // "1" + EXPECT_TRUE(!renderIndex022->GetSpecificItem(2)->GetVisible()); // "2" is not visible + EXPECT_TRUE(!renderIndex022->NeedChangeLanguage(5)); // "A" + EXPECT_TRUE(renderIndex022->GetSpecificItem(5)->GetVisible()); + EXPECT_TRUE(renderIndex022->GetSpecificItem(6)->GetVisible()); // "B" is visible + EXPECT_TRUE(renderIndex022->GetActualItemIndex(3) == 6); // position 3 is "B" + EXPECT_TRUE(CheckItemVisible(renderIndex022)); +} + +/** + * @tc.name: RenderIndexerTest023 + * @tc.desc: Verify IndexList can change index correctly. + * @tc.type: FUNC + * @tc.require: AR000F3CCF + * @tc.author: jinwuwen + */ +HWTEST_F(RenderIndexerTest, RenderIndexerTest023, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct IndexerListComponent with list mode. + * @tc.expected: step1. properties are set correctly. + */ + std::vector labels = {"#", "1", "2", "3", "4"}; + RefPtr list = AceType::MakeRefPtr(); + list->SetDirection(FlexDirection::COLUMN); + RefPtr indexerList = + AceType::MakeRefPtr(list, labels, true, false, true, true); + RefPtr indexer = indexerList->GetIndexer(); + ASSERT_TRUE(indexer != nullptr); + bool circleMode = true; + if (indexer) { + circleMode = indexer->GetCircleMode(); + } + ASSERT_TRUE(circleMode); + + /** + * @tc.steps: step2. insert item with index key string, the input is not sorted. + * @tc.expected: step2. the count of items are correctly. + */ + std::string indexKey[] = { "123", "A1", "A2", "B1", "B2", "D1" }; + for (int32_t i = 0; i < 6; i++) { + RefPtr box = AceType::MakeRefPtr(); + box->SetWidth(400.0); + box->SetHeight(100.0); + RefPtr listItem = AceType::MakeRefPtr("item", box); + listItem->SetIndexKey(indexKey[i]); + RefPtr composedItem = + AceType::MakeRefPtr("section", "sectionComposed", listItem); + indexerList->AppendChild(composedItem); + } + EXPECT_TRUE(indexerList->GetItemCountInList() == 6); + + /** + * @tc.steps: step3. IndexList insert section head item to the list. + * @tc.expected: step3. the index of section is correct. + */ + RefPtr renderNode = CreateRenderIndexer(indexer, true, true); + RefPtr renderIndex023 = AceType::DynamicCast(renderNode); + renderIndex023->PerformLayout(); + ASSERT_TRUE(renderIndex023->ChangeLanguage(5)); + EXPECT_TRUE(renderIndex023->GetFocusItemIndex() == 5); + + renderIndex023->SetItemsFocused(7); + EXPECT_TRUE(!renderIndex023->GetSpecificItem(7)->GetClicked()); // "C" can not clicked + EXPECT_TRUE(renderIndex023->GetFocusItemIndex() == 5); + + renderIndex023->SetItemsFocused(8); + renderIndex023->FinishFocusAnimation(); + EXPECT_TRUE(renderIndex023->GetSpecificItem(8)->GetClicked()); // "D" clicked + EXPECT_TRUE(renderIndex023->GetFocusItemIndex() == 8); + + renderIndex023->CollapseItems(); + renderIndex023->FinishCollapseAnimation(); + ASSERT_TRUE(renderIndex023->GetIndexerStatus() == IndexerItemStatus::COLLAPSE); + EXPECT_TRUE(renderIndex023->GetSpecificItem(31)->GetVisible()); // ">" + ASSERT_TRUE(CheckItemVisible(renderIndex023)); + + renderIndex023->ExpandItems(); + renderIndex023->FinishCollapseAnimation(); + EXPECT_TRUE(renderIndex023->GetSpecificItem(31)->GetVisible()); // ">" + EXPECT_TRUE(CheckItemVisible(renderIndex023)); +} + +/** + * @tc.name: RenderIndexerTest024 + * @tc.desc: Verify bubble text when focus change on circle mode. + * @tc.type: FUNC + * @tc.require: AR000F3CCF + * @tc.author: jinwuwen + */ +HWTEST_F(RenderIndexerTest, RenderIndexerTest024, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct IndexerListComponent with list mode. + * @tc.expected: step1. properties are set correctly. + */ + std::vector labels = {"#", "1", "2", "3", "4"}; + RefPtr list = AceType::MakeRefPtr(); + list->SetDirection(FlexDirection::COLUMN); + RefPtr indexerList = + AceType::MakeRefPtr(list, labels, true, false, true, true); + RefPtr indexer = indexerList->GetIndexer(); + ASSERT_TRUE(indexer != nullptr); + bool circleMode = true; + if (indexer) { + circleMode = indexer->GetCircleMode(); + } + ASSERT_TRUE(circleMode); + + /** + * @tc.steps: step2. insert item with index key string, the input is not sorted. + * @tc.expected: step2. the count of items are correctly. + */ + std::string indexKey[] = { "123", "A1", "A2", "B1", "B2", "D1" }; + for (int32_t i = 0; i < 6; i++) { + RefPtr box = AceType::MakeRefPtr(); + box->SetWidth(400.0); + box->SetHeight(100.0); + RefPtr listItem = AceType::MakeRefPtr("item", box); + listItem->SetIndexKey(indexKey[i]); + RefPtr composedItem = + AceType::MakeRefPtr("section", "sectionComposed", listItem); + indexerList->AppendChild(composedItem); + } + EXPECT_TRUE(indexerList->GetItemCountInList() == 6); + + /** + * @tc.steps: step3. IndexList insert section head item to the list. + * @tc.expected: step3. the index of section is correct. + */ + RefPtr renderNode = CreateRenderIndexer(indexer, true, true); + RefPtr renderIndex024 = AceType::DynamicCast(renderNode); + renderIndex024->PerformLayout(); + ASSERT_TRUE(renderIndex024->ChangeLanguage(5)); + + renderIndex024->SetItemsFocused(8); + renderIndex024->FinishFocusAnimation(); + EXPECT_TRUE(renderIndex024->GetSpecificItem(8)->GetClicked()); // "D" clicked + + RefPtr renderText = GetBubbleText(renderIndex024); + ASSERT_TRUE(renderText); + EXPECT_TRUE(renderText->GetTextData() == "D"); + renderIndex024->SetItemsFocused(7); + EXPECT_TRUE(renderText->GetTextData() == "D"); + renderIndex024->SetItemsFocused(6); + EXPECT_TRUE(renderText->GetTextData() == "B"); + ASSERT_TRUE(renderIndex024->ChangeLanguage(1)); + EXPECT_TRUE(renderText->GetTextData() == "1"); +} + +/** + * @tc.name: RenderIndexerTest025 + * @tc.desc: Verify indexer shown correctly when section letter than four. + * @tc.type: FUNC + * @tc.require: AR000F3CCF + * @tc.author: jinwuwen + */ +HWTEST_F(RenderIndexerTest, RenderIndexerTest025, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct IndexerListComponent with list mode. + * @tc.expected: step1. properties are set correctly. + */ + std::vector labels = {"#", "1", "2"}; + RefPtr list = AceType::MakeRefPtr(); + list->SetDirection(FlexDirection::COLUMN); + RefPtr indexerList = + AceType::MakeRefPtr(list, labels, true, false, true, false); + RefPtr indexer = indexerList->GetIndexer(); + ASSERT_TRUE(indexer != nullptr); + bool circleMode = true; + if (indexer) { + circleMode = indexer->GetCircleMode(); + } + ASSERT_TRUE(circleMode); + + /** + * @tc.steps: step2. insert item with index key string, the input is not sorted. + * @tc.expected: step2. the count of items are correctly. + */ + std::string indexKey[] = { "123", "A1", "A2", "B1", "B2", "D1" }; + for (int32_t i = 0; i < 6; i++) { + RefPtr box = AceType::MakeRefPtr(); + box->SetWidth(400.0); + box->SetHeight(100.0); + RefPtr listItem = AceType::MakeRefPtr("item", box); + listItem->SetIndexKey(indexKey[i]); + RefPtr composedItem = + AceType::MakeRefPtr("section", "sectionComposed", listItem); + indexerList->AppendChild(composedItem); + } + EXPECT_TRUE(indexerList->GetItemCountInList() == 6); + + /** + * @tc.steps: step3. IndexList insert section head item to the list. + * @tc.expected: step3. the index of section is correct. + */ + RefPtr renderNode = CreateRenderIndexer(indexer, true, true); + RefPtr renderIndex025 = AceType::DynamicCast(renderNode); + renderIndex025->PerformLayout(); + RefPtr collapse = AceType::DynamicCast(renderIndex025->GetChildren().back()); + ASSERT_TRUE(collapse); + EXPECT_TRUE(collapse->GetSectionText() != ">"); + EXPECT_TRUE(CheckItemVisible(renderIndex025)); +} + +/** + * @tc.name: RenderIndexerTest026 + * @tc.desc: Verify indexer shown correctly when section letter than four with multi-language + * @tc.type: FUNC + * @tc.require: AR000F3CCF + * @tc.author: jinwuwen + */ +HWTEST_F(RenderIndexerTest, RenderIndexerTest026, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct IndexerListComponent with list mode. + * @tc.expected: step1. properties are set correctly. + */ + std::vector labels = {"#", "1", "2"}; + RefPtr list = AceType::MakeRefPtr(); + list->SetDirection(FlexDirection::COLUMN); + RefPtr indexerList = + AceType::MakeRefPtr(list, labels, true, false, true, true); + RefPtr indexer = indexerList->GetIndexer(); + ASSERT_TRUE(indexer != nullptr); + bool circleMode = true; + if (indexer) { + circleMode = indexer->GetCircleMode(); + } + ASSERT_TRUE(circleMode); + + /** + * @tc.steps: step2. insert item with index key string, the input is not sorted. + * @tc.expected: step2. the count of items are correctly. + */ + std::string indexKey[] = { "123", "A1", "A2", "B1", "B2", "D1" }; + for (int32_t i = 0; i < 6; i++) { + RefPtr box = AceType::MakeRefPtr(); + box->SetWidth(400.0); + box->SetHeight(100.0); + RefPtr listItem = AceType::MakeRefPtr("item", box); + listItem->SetIndexKey(indexKey[i]); + RefPtr composedItem = + AceType::MakeRefPtr("section", "sectionComposed", listItem); + indexerList->AppendChild(composedItem); + } + EXPECT_TRUE(indexerList->GetItemCountInList() == 6); + + /** + * @tc.steps: step3. IndexList insert section head item to the list. + * @tc.expected: step3. the index of section is correct. + */ + RefPtr renderNode = CreateRenderIndexer(indexer, true, true); + RefPtr renderIndex026 = AceType::DynamicCast(renderNode); + renderIndex026->PerformLayout(); + RefPtr renderText = GetBubbleText(renderIndex026); + + RefPtr collapse = AceType::DynamicCast(renderIndex026->GetChildren().back()); + ASSERT_TRUE(collapse); + EXPECT_TRUE(collapse->GetSectionText() == ">"); + EXPECT_TRUE(!collapse->GetVisible()); + EXPECT_TRUE(CheckItemVisible(renderIndex026)); + EXPECT_TRUE(renderIndex026->GetFocusItemIndex() == 1); + EXPECT_TRUE(renderIndex026->GetIndexerStatus() == IndexerItemStatus::EXPAND); + + renderIndex026->MoveSection(4); + EXPECT_TRUE(renderIndex026->GetIndexerStatus() == IndexerItemStatus::EXPAND); + EXPECT_TRUE(renderIndex026->GetFocusItemIndex() == 1); + + renderIndex026->MoveSection(2); + EXPECT_TRUE(renderIndex026->GetIndexerStatus() == IndexerItemStatus::EXPAND); + EXPECT_TRUE(renderIndex026->GetFocusItemIndex() == 3); + + ASSERT_TRUE(renderIndex026->ChangeLanguage(3)); // "A" + EXPECT_TRUE(collapse->GetVisible()); + EXPECT_TRUE(CheckItemVisible(renderIndex026)); + + renderIndex026->CollapseItems(); + renderIndex026->FinishCollapseAnimation(); + ASSERT_TRUE(renderIndex026->GetIndexerStatus() == IndexerItemStatus::COLLAPSE); + EXPECT_TRUE(CheckItemVisible(renderIndex026)); + EXPECT_TRUE(collapse->GetVisible()); +} + +/** + * @tc.name: RenderIndexerTest027 + * @tc.desc: Verify indexer can change focus when list scroll on circle mode. + * @tc.type: FUNC + * @tc.require: AR000F3CCF + * @tc.author: jinwuwen + */ +HWTEST_F(RenderIndexerTest, RenderIndexerTest027, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct IndexerListComponent with list mode. + * @tc.expected: step1. properties are set correctly. + */ + std::vector labels = {"#", "1", "2", "3", "4"}; + RefPtr list = AceType::MakeRefPtr(); + list->SetDirection(FlexDirection::COLUMN); + RefPtr indexerList = + AceType::MakeRefPtr(list, labels, true, false, true, true); + RefPtr indexer = indexerList->GetIndexer(); + ASSERT_TRUE(indexer != nullptr); + bool circleMode = true; + if (indexer) { + circleMode = indexer->GetCircleMode(); + } + ASSERT_TRUE(circleMode); + + /** + * @tc.steps: step2. insert item with index key string, the input is not sorted. + * @tc.expected: step2. the count of items are correctly. + */ + // list is {"9", "123", "19", "31", "32", "A1", "A2", "B1", "B2", "D1", "H1", "H2", "Z1"} + std::string indexKey[] = { "123", "9", "Z1", "31", "19", "32", "H1", "H2", "A1", "A2", "B1", "B2", "D1" }; + for (int32_t i = 0; i < 13; i++) { + RefPtr box = AceType::MakeRefPtr(); + box->SetWidth(400.0); + box->SetHeight(100.0); + RefPtr listItem = AceType::MakeRefPtr("item", box); + listItem->SetIndexKey(indexKey[i]); + RefPtr composedItem = + AceType::MakeRefPtr("section", "sectionComposed", listItem); + indexerList->AppendChild(composedItem); + } + EXPECT_TRUE(indexerList->GetItemCountInList() == 13); + + /** + * @tc.steps: step3. IndexList insert section head item to the list. + * @tc.expected: step3. the index of section is correct. + */ + RefPtr renderNode = CreateRenderIndexer(indexer, true, true); + RefPtr renderIndex027 = AceType::DynamicCast(renderNode); + renderIndex027->PerformLayout(); + EXPECT_TRUE(renderIndex027->GetFocusItemIndex() == 0); + EXPECT_TRUE(renderIndex027->GetIndexerStatus() == IndexerItemStatus::EXPAND); + + renderIndex027->MoveSection(1); + if (renderIndex027->GetIndexerStatus() == IndexerItemStatus::ANIMATION) { + renderIndex027->FinishCollapseAnimation(); + } + EXPECT_TRUE(renderIndex027->GetIndexerStatus() == IndexerItemStatus::COLLAPSE); + EXPECT_TRUE(renderIndex027->GetFocusItemIndex() == 1); + + renderIndex027->MoveSection(4); + EXPECT_TRUE(renderIndex027->GetFocusItemIndex() == 3); + renderIndex027->MoveSection(2); + EXPECT_TRUE(renderIndex027->GetFocusItemIndex() == 1); +} + +/** + * @tc.name: RenderIndexerTest028 + * @tc.desc: Verify indexer handle rotation event correctly on circle mode. + * @tc.type: FUNC + * @tc.require: AR000F3CCC + * @tc.author: jinwuwen + */ +HWTEST_F(RenderIndexerTest, RenderIndexerTest028, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct IndexerListComponent with list mode. + * @tc.expected: step1. properties are set correctly. + */ + + std::vector labels = {"#", "1", "2", "3", "4"}; + RefPtr list = AceType::MakeRefPtr(); + list->SetDirection(FlexDirection::COLUMN); + RefPtr indexerList = + AceType::MakeRefPtr(list, labels, true, false, true, true); + RefPtr indexer = indexerList->GetIndexer(); + ASSERT_TRUE(indexer != nullptr); + bool circleMode = true; + if (indexer) { + circleMode = indexer->GetCircleMode(); + } + ASSERT_TRUE(circleMode); + + /** + * @tc.steps: step2. insert item with index key string, the input is not sorted. + * @tc.expected: step2. the count of items are correctly. + */ + // list is {"9", "123", "19", "31", "32", "A1", "A2", "B1", "B2", "D1", "H1", "H2", "Z1"} + std::string indexKey[] = { "123", "9", "Z1", "31", "19", "32", "H1", "H2", "A1", "A2", "B1", "B2", "D1" }; + for (int32_t i = 0; i < 13; i++) { + RefPtr box = AceType::MakeRefPtr(); + box->SetWidth(400.0); + box->SetHeight(100.0); + RefPtr listItem = AceType::MakeRefPtr("item", box); + listItem->SetIndexKey(indexKey[i]); + RefPtr composedItem = + AceType::MakeRefPtr("section", "sectionComposed", listItem); + indexerList->AppendChild(composedItem); + } + EXPECT_TRUE(indexerList->GetItemCountInList() == 13); + + /** + * @tc.steps: step3. IndexList insert section head item to the list. + * @tc.expected: step3. the index of section is correct. + */ + RefPtr renderNode = CreateRenderIndexer(indexer, true, true); + RefPtr renderIndex028 = AceType::DynamicCast(renderNode); + renderIndex028->PerformLayout(); + EXPECT_TRUE(renderIndex028->GetFocusItemIndex() == 0); + EXPECT_TRUE(renderIndex028->GetIndexerStatus() == IndexerItemStatus::EXPAND); + + renderIndex028->SetItemsFocused(3); + EXPECT_TRUE(renderIndex028->GetFocusItemIndex() == 3); + + renderIndex028->HandleRotation(ROTATION_THRESHOLD - 1.0); // can not change + EXPECT_TRUE(renderIndex028->GetFocusItemIndex() == 3); + + renderIndex028->HandleRotation(ROTATION_THRESHOLD + 1.0); // show previous + EXPECT_TRUE(renderIndex028->GetFocusItemIndex() == 1); + + renderIndex028->HandleRotation(-(ROTATION_THRESHOLD + 1.0)); // show next + EXPECT_TRUE(renderIndex028->GetFocusItemIndex() == 3); +} + +/** + * @tc.name: RenderIndexerTest029 + * @tc.desc: Verify indexer can change focus when list scroll on list mode. + * @tc.type: FUNC + * @tc.require: AR000F3CCF + * @tc.author: jinwuwen + */ +HWTEST_F(RenderIndexerTest, RenderIndexerTest029, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct IndexerListComponent with list mode. + * @tc.expected: step1. properties are set correctly. + */ + std::vector labels = {"#", "1", "2", "3", "4"}; + RefPtr list = AceType::MakeRefPtr(); + list->SetDirection(FlexDirection::COLUMN); + RefPtr indexerList = + AceType::MakeRefPtr(list, labels, false, false, true, false); + RefPtr indexer = indexerList->GetIndexer(); + ASSERT_TRUE(indexer != nullptr); + bool circleMode = true; + if (indexer) { + circleMode = indexer->GetCircleMode(); + } + ASSERT_TRUE(!circleMode); + + /** + * @tc.steps: step2. insert item with index key string, the input is not sorted. + * @tc.expected: step2. the count of items are correctly. + */ + // list is {"#", "9", "A1","1", "123", "19", "3", "31", "32",} + std::string indexKey[] = { "123", "9", "31", "19", "32", "A1" }; + for (int32_t i = 0; i < 6; i++) { + RefPtr box = AceType::MakeRefPtr(); + box->SetWidth(400.0); + box->SetHeight(100.0); + RefPtr listItem = AceType::MakeRefPtr("item", box); + listItem->SetIndexKey(indexKey[i]); + RefPtr composedItem = + AceType::MakeRefPtr("section", "sectionComposed", listItem); + indexerList->AppendChild(composedItem); + } + EXPECT_TRUE(indexerList->GetItemCountInList() == 9); + + /** + * @tc.steps: step3. IndexList insert section head item to the list. + * @tc.expected: step3. the index of section is correct. + */ + RefPtr renderNode = CreateRenderIndexer(indexer, circleMode, true); + RefPtr renderIndex029 = AceType::DynamicCast(renderNode); + ASSERT_TRUE(renderIndex029); + renderIndex029->PerformLayout(); + RefPtr renderText = GetBubbleText(renderIndex029); + ASSERT_TRUE(renderText); + + EXPECT_TRUE(renderIndex029->GetFocusItemIndex() == 0); + renderIndex029->MoveSection(3); // "1" + EXPECT_TRUE(renderText->GetTextData() == "1"); + EXPECT_TRUE(renderIndex029->GetFocusItemIndex() == 1); + + renderIndex029->MoveSection(7); // "31" + EXPECT_TRUE(renderText->GetTextData() == "3"); + EXPECT_TRUE(renderIndex029->GetFocusItemIndex() == 3); + + renderIndex029->MoveSection(5); // "19" + EXPECT_TRUE(renderText->GetTextData() == "1"); + EXPECT_TRUE(renderIndex029->GetFocusItemIndex() == 1); +} + +/** + * @tc.name: RenderIndexerTest030 + * @tc.desc: Verify indexer can change focus when list scroll on circle mode with different status. + * @tc.type: FUNC + * @tc.require: AR000F3CCE + * @tc.author: jinwuwen + */ +HWTEST_F(RenderIndexerTest, RenderIndexerTest030, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct IndexerListComponent with list mode. + * @tc.expected: step1. properties are set correctly. + */ + std::vector labels = {"#", "1", "2", "3", "4"}; + RefPtr list = AceType::MakeRefPtr(); + list->SetDirection(FlexDirection::COLUMN); + RefPtr indexerList = + AceType::MakeRefPtr(list, labels, true, false, true, true); + RefPtr indexer = indexerList->GetIndexer(); + ASSERT_TRUE(indexer != nullptr); + bool circleMode = true; + if (indexer) { + circleMode = indexer->GetCircleMode(); + } + ASSERT_TRUE(circleMode); + + /** + * @tc.steps: step2. insert item with index key string, the input is not sorted. + * @tc.expected: step2. the count of items are correctly. + */ + // list is {"9", "123", "19", "31", "32", "A1", "A2", "B1", "B2", "D1", "H1", "H2", "Z1"} + std::string indexKey[] = { "123", "9", "Z1", "31", "19", "32", "H1", "H2", "A1", "A2", "B1", "B2", "D1" }; + for (int32_t i = 0; i < 13; i++) { + RefPtr box = AceType::MakeRefPtr(); + box->SetWidth(400.0); + box->SetHeight(100.0); + RefPtr listItem = AceType::MakeRefPtr("item", box); + listItem->SetIndexKey(indexKey[i]); + RefPtr composedItem = + AceType::MakeRefPtr("section", "sectionComposed", listItem); + indexerList->AppendChild(composedItem); + } + EXPECT_TRUE(indexerList->GetItemCountInList() == 13); + + /** + * @tc.steps: step3. IndexList insert section head item to the list. + * @tc.expected: step3. the index of section is correct. + */ + RefPtr renderNode = CreateRenderIndexer(indexer, true, true); + RefPtr renderIndex030 = AceType::DynamicCast(renderNode); + renderIndex030->PerformLayout(); + EXPECT_TRUE(renderIndex030->GetFocusItemIndex() == 0); + EXPECT_TRUE(renderIndex030->GetIndexerStatus() == IndexerItemStatus::EXPAND); + + renderIndex030->MoveSection(1); + renderIndex030->FinishCollapseAnimation(); + EXPECT_TRUE(renderIndex030->GetIndexerStatus() == IndexerItemStatus::COLLAPSE); + + renderIndex030->ExpandItems(); + renderIndex030->FinishCollapseAnimation(); + EXPECT_TRUE(renderIndex030->GetIndexerStatus() == IndexerItemStatus::EXPAND); + + renderIndex030->SetItemsFocused(1); + EXPECT_TRUE(renderIndex030->GetIndexerStatus() == IndexerItemStatus::EXPAND); + + renderIndex030->MoveSection(1); // do not collapse item + EXPECT_TRUE(renderIndex030->GetIndexerStatus() == IndexerItemStatus::EXPAND); + renderIndex030->MoveSection(2); + renderIndex030->FinishCollapseAnimation(); + EXPECT_TRUE(renderIndex030->GetIndexerStatus() == IndexerItemStatus::COLLAPSE); +} +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/list/BUILD.gn b/frameworks/core/components/test/unittest/list/BUILD.gn new file mode 100644 index 00000000..464af268 --- /dev/null +++ b/frameworks/core/components/test/unittest/list/BUILD.gn @@ -0,0 +1,129 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +if (is_standard_system) { + module_output_path = "ace_engine_standard/backenduicomponent/list" +} + +ohos_unittest("ListCreatorTest") { + module_out_path = module_output_path + + sources = [ "list_creator_test.cpp" ] + + configs = [ + ":config_json_creator_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "$ace_root/frameworks/core/components/test:json", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + deps += [ "$ace_root/frameworks/bridge:js_framework_ohos" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_json_creator_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +ohos_unittest("RenderListTest") { + module_out_path = module_output_path + + sources = [ + "$ace_root/frameworks/core/components/test/json/json_frontend.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/mock_render_common.cpp", + "list_test_utils.cpp", + "render_list_test.cpp", + ] + + configs = [ "$ace_root:ace_test_config" ] + + deps = [ + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "//third_party/googletest:gtest_main", + ] + + if (is_standard_system) { + configs += [ "//third_party/curl:curl_config" ] + deps += [ + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/curl:curl", + ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +ohos_unittest("ListElementTest") { + module_out_path = module_output_path + + sources = [ + "$ace_root/frameworks/core/components/test/unittest/mock/mock_render_common.cpp", + "list_element_test.cpp", + ] + + configs = [ + ":config_tabbar_element_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "$ace_root/frameworks/core/components/test:json", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + configs += [ "//third_party/curl:curl_config" ] + deps += [ + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/curl:curl", + ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_tabbar_element_test") { + visibility = [ ":*" ] + include_dirs = [ + "//utils/native/base/include", + "$ace_root", + ] +} + +group("unittest") { + testonly = true + deps = [ + ":ListCreatorTest", + ":ListElementTest", + ":RenderListTest", + ] +} diff --git a/frameworks/core/components/test/unittest/list/list_creator_test.cpp b/frameworks/core/components/test/unittest/list/list_creator_test.cpp new file mode 100644 index 00000000..5a00f423 --- /dev/null +++ b/frameworks/core/components/test/unittest/list/list_creator_test.cpp @@ -0,0 +1,190 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/json/json_util.h" +#include "base/utils/utils.h" +#include "core/components/box/box_component.h" +#include "core/components/list/list_component.h" +#include "core/components/test/json/component_factory.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { + +class ListCreatorTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; +}; + +void ListCreatorTest::SetUpTestCase() {} +void ListCreatorTest::TearDownTestCase() {} +void ListCreatorTest::SetUp() {} +void ListCreatorTest::TearDown() {} + +/** + * @tc.name: ListCreator001 + * @tc.desc: Verify TransformCreator can create list component without child. + * @tc.type: FUNC + * @tc.require: AR000DAR0A + * @tc.author: zhongjianfei + */ +HWTEST_F(ListCreatorTest, ListCreator001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of list component without child. + */ + const std::string content = "" + "{ " + " \"className\": \"List\", " + " \"direction\": 0, " + " \"count\": 15, " + " \"cachedCount\": 8, " + " \"listPosition\": 100, " + " \"scrollPage\": true " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get list component. + * @tc.expected: step2. properties and child are set correctly. + */ + const auto dslBuf = reinterpret_cast(content.c_str()); + size_t dslLen = content.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component != nullptr); + RefPtr list = AceType::DynamicCast(component); + ASSERT_TRUE(list != nullptr); + ASSERT_TRUE(list->GetDirection() == FlexDirection::ROW); + ASSERT_TRUE(list->GetTotalCount() == 15); + ASSERT_TRUE(list->GetCachedCount() == 8); + ASSERT_TRUE(list->GetScrollPage()); + ASSERT_TRUE(NearEqual(list->GetPositionController()->GetInitialOffset(), 100.0)); +} + +/** + * @tc.name: ListCreatorTest001 + * @tc.desc: Verify list component can open scrollpage. + * @tc.type: FUNC + * @tc.require: AR000DQ1SR + * @tc.author: chenlien + */ +HWTEST_F(ListCreatorTest, ListCreatorTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of list component with scrollpage property. + */ + const std::string content = "" + "{ " + " \"className\": \"List\", " + " \"direction\": 0, " + " \"count\": 15, " + " \"cachedCount\": 8, " + " \"listPosition\": 100, " + " \"scrollPage\": true " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get list component. + * @tc.expected: step2. properties are set correctly. + */ + const auto dslBuf = reinterpret_cast(content.c_str()); + size_t dslLen = content.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component != nullptr); + RefPtr list = AceType::DynamicCast(component); + ASSERT_TRUE(list != nullptr); + ASSERT_TRUE(list->GetScrollPage()); +} + +/** + * @tc.name: ListCreatorTest002 + * @tc.desc: Verify list component can close scrollpage. + * @tc.type: FUNC + * @tc.require: AR000DAR0J + * @tc.author: chenlien + */ +HWTEST_F(ListCreatorTest, ListCreatorTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of list component with scrollpage property. + */ + const std::string content = "" + "{ " + " \"className\": \"List\", " + " \"direction\": 0, " + " \"count\": 15, " + " \"cachedCount\": 8, " + " \"listPosition\": 100, " + " \"scrollPage\": false " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get list component. + * @tc.expected: step2. properties are set correctly. + */ + const auto dslBuf = reinterpret_cast(content.c_str()); + size_t dslLen = content.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component != nullptr); + RefPtr list = AceType::DynamicCast(component); + ASSERT_TRUE(list != nullptr); + ASSERT_TRUE(!list->GetScrollPage()); +} + +/** + * @tc.name: ListCreatorScrollBarTest001 + * @tc.desc: Verify list component can close scrollbar. + * @tc.type: FUNC + * @tc.require: AR000DQ1UI + * @tc.author: chenlien + */ +HWTEST_F(ListCreatorTest, ListCreatorScrollBarTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of list component with scrollBar property. + */ + const std::string content = "" + "{ " + " \"className\": \"List\", " + " \"direction\": 0, " + " \"count\": 15, " + " \"cachedCount\": 8, " + " \"listPosition\": 100, " + " \"scrollbar\": 1, " + " \"shapemode\": 1 " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get list component. + * @tc.expected: step2. properties are set correctly. + */ + const auto dslBuf = reinterpret_cast(content.c_str()); + size_t dslLen = content.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component != nullptr); + RefPtr list = AceType::DynamicCast(component); + ASSERT_TRUE(list != nullptr); + ASSERT_TRUE(list->GetScrollBar() != nullptr); + auto scrollBar = list->GetScrollBar(); + ASSERT_TRUE(scrollBar->GetDisplayMode() == DisplayMode::AUTO); + ASSERT_TRUE(scrollBar->GetShapeMode() == ShapeMode::RECT); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/list/list_element_test.cpp b/frameworks/core/components/test/unittest/list/list_element_test.cpp new file mode 100644 index 00000000..7222beaa --- /dev/null +++ b/frameworks/core/components/test/unittest/list/list_element_test.cpp @@ -0,0 +1,1419 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +#include "gtest/gtest.h" + +#include "core/components/box/box_component.h" +#include "core/components/box/box_element.h" +#include "core/components/list/list_component.h" +#include "core/components/list/list_element.h" +#include "core/components/list/list_item_component.h" +#include "core/components/list/list_item_element.h" +#include "core/components/list/list_item_group_component.h" +#include "core/components/list/list_item_group_element.h" +#include "core/components/list/render_list_item_group.h" +#include "core/components/scroll/render_multi_child_scroll.h" +#include "core/components/test/unittest/mock/mock_render_common.h" +#include "core/components/test/unittest/tabbar/tab_test_utils.h" +#include "core/pipeline/base/composed_element.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +constexpr int32_t ITEM_COUNT = 4; + +bool CheckItemFocus(const std::list>& children, int32_t index) +{ + int32_t count = 0; + bool flag = true; + for (auto pos = children.begin(); pos != children.end(); ++pos) { + auto composed = AceType::DynamicCast(*pos); + if (composed) { + auto listItem = AceType::DynamicCast(composed->GetFirstChild()); + if (listItem) { + auto focus = AceType::DynamicCast(listItem); + if (count == index) { + if (!focus->IsCurrentFocus()) { + flag = false; + } + } else { + if (focus->IsCurrentFocus()) { + flag = false; + } + } + } + } + count++; + } + return flag; +} + +} // namespace + +class ListElementTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; + void InitFocusTree(FlexDirection direction); + std::vector> MakeListChildArray(double itemHeight); + RefPtr MakeListChild(std::string id, std::string name, std::string type = std::string("default"), + double width = 0.0, double height = 0.0); + RefPtr MakeListItemGroupChild(std::string id, std::string name, + std::string type = std::string("default"), double width = 0.0, double height = 0.0); + bool CheckInsertAndDelete(const RefPtr& multiChildNode, double itemHeight, + int32_t size, int32_t firstIndex, std::string firstType); + void SetListDirection(FlexDirection direction); + void DisableAddDeleteEffect(const RefPtr& multiChildNode); + RefPtr BuildElementTree(const RefPtr& listComponent); + +protected: + static constexpr double ITEM_HEIGHT = 50.0; + static constexpr double LIST_WIDTH = 60.0; + static constexpr double LIST_HEIGHT = 100.0; + static constexpr double CACHE_EXTENT = 0.0; + + RefPtr context_; + RefPtr listZero_ = AceType::MakeRefPtr(); + RefPtr listOne_ = AceType::MakeRefPtr(); + RefPtr listTwo_ = AceType::MakeRefPtr(); + RefPtr rootContainer_ = AceType::MakeRefPtr(); +}; + +void ListElementTest::SetUpTestCase() {} + +void ListElementTest::TearDownTestCase() {} + +void ListElementTest::SetUp() +{ + rootContainer_->Create(); + context_ = MockRenderCommon::GetMockContext(); + context_->SetupRootElement(); + rootContainer_->SetPipelineContext(context_); +} + +void ListElementTest::TearDown() +{ + context_ = nullptr; +} + +RefPtr ListElementTest::MakeListChild( + std::string id, std::string name, std::string type, double width, double height) +{ + auto child = AceType::MakeRefPtr(); + child->SetWidth(width); + child->SetHeight(height); + auto listItem = AceType::MakeRefPtr(type, child); + auto composed = AceType::MakeRefPtr(id, name, listItem); + return composed; +} + +RefPtr ListElementTest::MakeListItemGroupChild( + std::string id, std::string name, std::string type, double width, double height) +{ + auto listItemGroup = AceType::MakeRefPtr("group"); + for (int32_t i = 0; i < 5; ++i) { + listItemGroup->AppendChild(MakeListChild("list1_id", "list1_name", "focus", 200, ITEM_HEIGHT)); + } + auto composed = AceType::MakeRefPtr(id, name, listItemGroup); + return composed; +} + +void ListElementTest::InitFocusTree(FlexDirection direction) +{ + // create list 0 + auto listComponentZero = AceType::MakeRefPtr(); + listComponentZero->AppendChild(MakeListChild("list0_id", "list0_name")); + listComponentZero->SetPositionController(AceType::MakeRefPtr()); + listZero_->SetNewComponent(listComponentZero); + + // create list 1 + RefPtr listComponent = AceType::MakeRefPtr(); + for (int32_t i = 0; i < ITEM_COUNT; ++i) { + listComponent->AppendChild(MakeListChild("list1_id", "list1_name")); + } + listComponent->SetDirection(direction); + listComponent->SetPositionController(AceType::MakeRefPtr()); + listOne_->SetNewComponent(listComponent); + + // create list 2 + auto listComponentTwo = AceType::MakeRefPtr(); + listComponentTwo->AppendChild(MakeListChild("list2_id", "list2_name")); + listComponentTwo->SetPositionController(AceType::MakeRefPtr()); + listTwo_->SetNewComponent(listComponentTwo); + + listZero_->Mount(rootContainer_); + auto renderNodeZero = listZero_->GetRenderNode(); + + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(1000.0, 1000.0)); + renderNodeZero->SetLayoutParam(layoutParam); + renderNodeZero->PerformLayout(); + + listOne_->Mount(rootContainer_); + auto renderNodeOne = listOne_->GetRenderNode(); + renderNodeOne->SetLayoutParam(layoutParam); + renderNodeOne->PerformLayout(); + + listTwo_->Mount(rootContainer_); + auto renderNodeTwo = listTwo_->GetRenderNode(); + renderNodeTwo->SetLayoutParam(layoutParam); + renderNodeTwo->PerformLayout(); + + rootContainer_->RequestFocusImmediately(); +} + +void ListElementTest::SetListDirection(FlexDirection direction) +{ + if (listOne_) { + printf("SetListDirection direction\n"); + } +} + +void ListElementTest::DisableAddDeleteEffect(const RefPtr& multiChildNode) +{ + auto children = multiChildNode->GetChildren(); + if (!children.empty()) { + auto renderList = AceType::DynamicCast(children.front()); + if (renderList) { + renderList->SetAddDeleteEffect(false); + } + } +} + +/** + * @tc.name: ListElementTest001 + * @tc.desc: Verify the basic function of request focus and release focus, while the direction is column. + * @tc.type: FUNC + * @tc.require: AR000DHJ5O + * @tc.author: xuliangjun + */ +HWTEST_F(ListElementTest, ListElementTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the RootContainer with three lists, the direction is column. + * @tc.expected: step1. RootContainer and listZero acquire the focus. + */ + InitFocusTree(FlexDirection::COLUMN); + EXPECT_TRUE(rootContainer_->IsCurrentFocus()); + EXPECT_TRUE(listZero_->IsCurrentFocus()); + EXPECT_TRUE(CheckItemFocus(listZero_->GetChildren(), 0)); + + /** + * @tc.steps: step2. Animation to the down + * @tc.expected: step2. RootContainer and listOne acquire the focus. listOne's first child Get the focus. + */ + rootContainer_->HandleKeyEvent(DOWN_KEY); + EXPECT_TRUE(rootContainer_->IsCurrentFocus()); + EXPECT_TRUE(listOne_->IsCurrentFocus()); + EXPECT_TRUE(CheckItemFocus(listOne_->GetChildren(), 0)); + + /** + * @tc.steps: step3. Animation to the down + * @tc.expected: step3. RootContainer and listOne acquire the focus. listOne's second child Get the focus. + */ + rootContainer_->HandleKeyEvent(DOWN_KEY); + EXPECT_TRUE(rootContainer_->IsCurrentFocus()); + EXPECT_TRUE(listOne_->IsCurrentFocus()); + EXPECT_TRUE(CheckItemFocus(listOne_->GetChildren(), 1)); + + /** + * @tc.steps: step4. Animation to the up + * @tc.expected: step4. RootContainer and listOne acquire the focus. listOne's first child Get the focus. + */ + rootContainer_->HandleKeyEvent(UP_KEY); + EXPECT_TRUE(rootContainer_->IsCurrentFocus()); + EXPECT_TRUE(listOne_->IsCurrentFocus()); + EXPECT_TRUE(CheckItemFocus(listOne_->GetChildren(), 0)); + + /** + * @tc.steps: step5. Animation to the left + * @tc.expected: step5. RootContainer and listZero acquire the focus. listZero's first child Get the focus. + */ + rootContainer_->HandleKeyEvent(LEFT_KEY); + EXPECT_TRUE(rootContainer_->IsCurrentFocus()); + EXPECT_TRUE(listZero_->IsCurrentFocus()); + EXPECT_TRUE(CheckItemFocus(listZero_->GetChildren(), 0)); + + /** + * @tc.steps: step6. Animation to the right + * @tc.expected: step6. RootContainer and listOne acquire the focus. listOne's first child Get the focus. + */ + rootContainer_->HandleKeyEvent(RIGHT_KEY); + EXPECT_TRUE(rootContainer_->IsCurrentFocus()); + EXPECT_TRUE(listOne_->IsCurrentFocus()); + EXPECT_TRUE(CheckItemFocus(listOne_->GetChildren(), 0)); +} + +/** + * @tc.name: ListElementTest002 + * @tc.desc: Verify the basic function of request focus and release focus, while the direction is row. + * @tc.type: FUNC + * @tc.require: AR000DHJ5O + * @tc.author: xuliangjun + */ +HWTEST_F(ListElementTest, ListElementTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the RootContainer with three lists, the direction is row. + * @tc.expected: step1. RootContainer and listZero acquire the focus. + */ + InitFocusTree(FlexDirection::ROW); + EXPECT_TRUE(rootContainer_->IsCurrentFocus()); + EXPECT_TRUE(listZero_->IsCurrentFocus()); + EXPECT_TRUE(CheckItemFocus(listZero_->GetChildren(), 0)); + + /** + * @tc.steps: step2. Animation to the right + * @tc.expected: step2. RootContainer and listOne acquire the focus. listOne's second child Get the focus. + */ + rootContainer_->HandleKeyEvent(RIGHT_KEY); + EXPECT_TRUE(rootContainer_->IsCurrentFocus()); + EXPECT_TRUE(listOne_->IsCurrentFocus()); + EXPECT_TRUE(CheckItemFocus(listOne_->GetChildren(), 0)); + + /** + * @tc.steps: step3. Animation to the right + * @tc.expected: step3. RootContainer and listOne acquire the focus. listOne's second child Get the focus. + */ + rootContainer_->HandleKeyEvent(RIGHT_KEY); + EXPECT_TRUE(rootContainer_->IsCurrentFocus()); + EXPECT_TRUE(listOne_->IsCurrentFocus()); + EXPECT_TRUE(CheckItemFocus(listOne_->GetChildren(), 1)); + + /** + * @tc.steps: step4. Animation to the left + * @tc.expected: step4. RootContainer and listOne acquire the focus. listOne's first child Get the focus. + */ + rootContainer_->HandleKeyEvent(LEFT_KEY); + EXPECT_TRUE(rootContainer_->IsCurrentFocus()); + EXPECT_TRUE(listOne_->IsCurrentFocus()); + EXPECT_TRUE(CheckItemFocus(listOne_->GetChildren(), 0)); + + /** + * @tc.steps: step5. Animation to the up + * @tc.expected: step5. RootContainer and listZero acquire the focus. listZero's first child Get the focus. + */ + rootContainer_->HandleKeyEvent(UP_KEY); + EXPECT_TRUE(rootContainer_->IsCurrentFocus()); + EXPECT_TRUE(listZero_->IsCurrentFocus()); + EXPECT_TRUE(CheckItemFocus(listZero_->GetChildren(), 0)); + + /** + * @tc.steps: step6. Animation to the down + * @tc.expected: step6. RootContainer and listOne acquire the focus. listOne's first child Get the focus. + */ + rootContainer_->HandleKeyEvent(DOWN_KEY); + EXPECT_TRUE(rootContainer_->IsCurrentFocus()); + EXPECT_TRUE(listOne_->IsCurrentFocus()); + EXPECT_TRUE(CheckItemFocus(listOne_->GetChildren(), 0)); +} + +/** + * @tc.name: ListElementTest003 + * @tc.desc: Verify the basic function of moving focus in list, while the direction is column. + * @tc.type: FUNC + * @tc.require: AR000DHJ5O + * @tc.author: xuliangjun + */ +HWTEST_F(ListElementTest, ListElementTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the RootContainer with three lists, the direction is column. + * @tc.expected: step1. RootContainer and listZero acquire the focus. + */ + InitFocusTree(FlexDirection::COLUMN); + EXPECT_TRUE(rootContainer_->IsCurrentFocus()); + EXPECT_TRUE(listZero_->IsCurrentFocus()); + EXPECT_TRUE(CheckItemFocus(listZero_->GetChildren(), 0)); + + /** + * @tc.steps: step2. Animation to the down + * @tc.expected: step2. RootContainer and listOne acquire the focus. listOne's first child Get the focus. + */ + rootContainer_->HandleKeyEvent(DOWN_KEY); + EXPECT_TRUE(rootContainer_->IsCurrentFocus()); + EXPECT_TRUE(listOne_->IsCurrentFocus()); + EXPECT_TRUE(CheckItemFocus(listOne_->GetChildren(), 0)); + + /** + * @tc.steps: step3. Animation to the down + * @tc.expected: step3. RootContainer and listOne acquire the focus. listOne's second child Get the focus. + */ + rootContainer_->HandleKeyEvent(DOWN_KEY); + EXPECT_TRUE(rootContainer_->IsCurrentFocus()); + EXPECT_TRUE(listOne_->IsCurrentFocus()); + EXPECT_TRUE(CheckItemFocus(listOne_->GetChildren(), 1)); + + /** + * @tc.steps: step4. Animation to the down + * @tc.expected: step4. RootContainer and listOne acquire the focus. listOne's third child Get the focus. + */ + rootContainer_->HandleKeyEvent(DOWN_KEY); + EXPECT_TRUE(rootContainer_->IsCurrentFocus()); + EXPECT_TRUE(listOne_->IsCurrentFocus()); + EXPECT_TRUE(CheckItemFocus(listOne_->GetChildren(), 2)); + + /** + * @tc.steps: step5. Animation to the down + * @tc.expected: step5. RootContainer and listOne acquire the focus. listOne's fourth child Get the focus. + */ + rootContainer_->HandleKeyEvent(DOWN_KEY); + EXPECT_TRUE(rootContainer_->IsCurrentFocus()); + EXPECT_TRUE(listOne_->IsCurrentFocus()); + EXPECT_TRUE(CheckItemFocus(listOne_->GetChildren(), 3)); + + /** + * @tc.steps: step6. Animation to the up + * @tc.expected: step6. RootContainer and listOne acquire the focus. listOne's third child Get the focus. + */ + rootContainer_->HandleKeyEvent(UP_KEY); + EXPECT_TRUE(rootContainer_->IsCurrentFocus()); + EXPECT_TRUE(listOne_->IsCurrentFocus()); + EXPECT_TRUE(CheckItemFocus(listOne_->GetChildren(), 2)); + + /** + * @tc.steps: step7. Animation to the up + * @tc.expected: step7. RootContainer and listOne acquire the focus. listOne's second child Get the focus. + */ + rootContainer_->HandleKeyEvent(UP_KEY); + EXPECT_TRUE(rootContainer_->IsCurrentFocus()); + EXPECT_TRUE(listOne_->IsCurrentFocus()); + EXPECT_TRUE(CheckItemFocus(listOne_->GetChildren(), 1)); + + /** + * @tc.steps: step8. Animation to the up + * @tc.expected: step8. RootContainer and listOne acquire the focus. listOne's first child Get the focus. + */ + rootContainer_->HandleKeyEvent(UP_KEY); + EXPECT_TRUE(rootContainer_->IsCurrentFocus()); + EXPECT_TRUE(listOne_->IsCurrentFocus()); + EXPECT_TRUE(CheckItemFocus(listOne_->GetChildren(), 0)); +} + +/** + * @tc.name: ListElementTest004 + * @tc.desc: Verify the basic function of moving focus in list, while the direction is row. + * @tc.type: FUNC + * @tc.require: AR000DHJ5O + * @tc.author: xuliangjun + */ +HWTEST_F(ListElementTest, ListElementTest004, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the RootContainer with three lists, the direction is row. + * @tc.expected: step1. RootContainer and listZero acquire the focus. + */ + InitFocusTree(FlexDirection::ROW); + EXPECT_TRUE(rootContainer_->IsCurrentFocus()); + EXPECT_TRUE(listZero_->IsCurrentFocus()); + EXPECT_TRUE(CheckItemFocus(listZero_->GetChildren(), 0)); + + /** + * @tc.steps: step2. Animation to the right + * @tc.expected: step2. RootContainer and listOne acquire the focus. listOne's first child Get the focus. + */ + rootContainer_->HandleKeyEvent(RIGHT_KEY); + EXPECT_TRUE(rootContainer_->IsCurrentFocus()); + EXPECT_TRUE(listOne_->IsCurrentFocus()); + EXPECT_TRUE(CheckItemFocus(listOne_->GetChildren(), 0)); + + /** + * @tc.steps: step3. Animation to the right + * @tc.expected: step3. RootContainer and listOne acquire the focus. listOne's second child Get the focus. + */ + rootContainer_->HandleKeyEvent(RIGHT_KEY); + EXPECT_TRUE(rootContainer_->IsCurrentFocus()); + EXPECT_TRUE(listOne_->IsCurrentFocus()); + EXPECT_TRUE(CheckItemFocus(listOne_->GetChildren(), 1)); + + /** + * @tc.steps: step4. Animation to the right + * @tc.expected: step4. RootContainer and listOne acquire the focus. listOne's third child Get the focus. + */ + rootContainer_->HandleKeyEvent(RIGHT_KEY); + EXPECT_TRUE(rootContainer_->IsCurrentFocus()); + EXPECT_TRUE(listOne_->IsCurrentFocus()); + EXPECT_TRUE(CheckItemFocus(listOne_->GetChildren(), 2)); + + /** + * @tc.steps: step5. Animation to the right + * @tc.expected: step5. RootContainer and listOne acquire the focus. listOne's fourth child Get the focus. + */ + rootContainer_->HandleKeyEvent(RIGHT_KEY); + EXPECT_TRUE(rootContainer_->IsCurrentFocus()); + EXPECT_TRUE(listOne_->IsCurrentFocus()); + EXPECT_TRUE(CheckItemFocus(listOne_->GetChildren(), 3)); + + /** + * @tc.steps: step6. Animation to the left + * @tc.expected: step6. RootContainer and listOne acquire the focus. listOne's third child Get the focus. + */ + rootContainer_->HandleKeyEvent(LEFT_KEY); + EXPECT_TRUE(rootContainer_->IsCurrentFocus()); + EXPECT_TRUE(listOne_->IsCurrentFocus()); + EXPECT_TRUE(CheckItemFocus(listOne_->GetChildren(), 2)); + + /** + * @tc.steps: step7. Animation to the left + * @tc.expected: step7. RootContainer and listOne acquire the focus. listOne's second child Get the focus. + */ + rootContainer_->HandleKeyEvent(LEFT_KEY); + EXPECT_TRUE(rootContainer_->IsCurrentFocus()); + EXPECT_TRUE(listOne_->IsCurrentFocus()); + EXPECT_TRUE(CheckItemFocus(listOne_->GetChildren(), 1)); + + /** + * @tc.steps: step8. Animation to the left + * @tc.expected: step8. RootContainer and listOne acquire the focus. listOne's first child Get the focus. + */ + rootContainer_->HandleKeyEvent(LEFT_KEY); + EXPECT_TRUE(rootContainer_->IsCurrentFocus()); + EXPECT_TRUE(listOne_->IsCurrentFocus()); + EXPECT_TRUE(CheckItemFocus(listOne_->GetChildren(), 0)); +} + +RefPtr ListElementTest::BuildElementTree(const RefPtr& listComponent) +{ + RefPtr listElement = AceType::MakeRefPtr(); + listElement->SetNewComponent(listComponent); + listElement->Mount(rootContainer_); + return listElement; +} + +/** + * @tc.name: InsertionAndDeletion001 + * @tc.desc: Verify insertion when there is no item. + * @tc.type: FUNC + * @tc.require: AR000DQ1SV + * @tc.author: zhanghaibo + */ +HWTEST_F(ListElementTest, InsertionAndDeletion001, TestSize.Level1) +{ + double listHeight = 1000.0; + auto listComponent = AceType::MakeRefPtr(); + listComponent->SetPositionController(AceType::MakeRefPtr()); + listComponent->InsertChild(0, MakeListChild("id0", "name0", "common", 0.0, ITEM_HEIGHT)); + + RefPtr listElement = BuildElementTree(listComponent); + auto multiChildNode = listElement->GetRenderNode(); + DisableAddDeleteEffect(multiChildNode); + + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(LIST_WIDTH, listHeight)); + multiChildNode->SetLayoutParam(layoutParam); + multiChildNode->PerformLayout(); + + ASSERT_FALSE(multiChildNode->GetChildren().empty()); + + auto renderList = multiChildNode->GetChildren().front(); + + auto children = renderList->GetChildren(); + int32_t childrenSize = children.size(); + EXPECT_EQ(childrenSize, 1); + + double position = 0.0; + for (const auto& child : children) { + auto listItem = RenderListItem::GetRenderListItem(child); + EXPECT_TRUE(listItem); + EXPECT_TRUE(NearEqual(listItem->GetPositionInList(), position)); + + Size listItemSize = child->GetLayoutSize(); + EXPECT_TRUE(NearEqual(listItemSize.Height(), ITEM_HEIGHT)); + position += ITEM_HEIGHT; + } +} + +std::vector> ListElementTest::MakeListChildArray(double itemHeight) +{ + std::vector> children; + children.push_back(MakeListChild("id0", "name0", "type0", 0.0, itemHeight)); + children.push_back(MakeListChild("id1", "name1", "type1", 0.0, itemHeight)); + children.push_back(MakeListChild("id2", "name2", "type2", 0.0, itemHeight)); + children.push_back(MakeListChild("id3", "name3", "type3", 0.0, itemHeight)); + children.push_back(MakeListChild("id4", "name4", "type4", 0.0, itemHeight)); + return children; +} + +bool ListElementTest::CheckInsertAndDelete(const RefPtr& multiChildNode, double itemHeight, + int32_t size, int32_t firstIndex, std::string firstType) +{ + if (multiChildNode->GetChildren().empty()) { + GTEST_LOG_(INFO) << "multiChildNode has no child"; + return false; + } + + auto listNode = multiChildNode->GetChildren().front(); + int32_t childrenSize = listNode->GetChildren().size(); + if (childrenSize != size) { + GTEST_LOG_(INFO) << "size: expect: " << size << ", actual: " << childrenSize; + return false; + } + + int32_t index = firstIndex; + double position = itemHeight * firstIndex; + auto renderList = AceType::DynamicCast(listNode); + for (const auto& item : renderList->GetItems()) { + auto listItem = RenderListItem::GetRenderListItem(item.second); + if (!listItem) { + return false; + } + if (!NearEqual(listItem->GetPositionInList(), position)) { + GTEST_LOG_(INFO) << "position: expect: " << position << ", actual: " << + listItem->GetPositionInList(); + return false; + } + + if (listItem->GetIndex() != index) { + GTEST_LOG_(INFO) << "index: expect: " << index << ", actual: " << listItem->GetIndex(); + return false; + } + + if (index == firstIndex) { + if (listItem->GetType() != firstType) { + GTEST_LOG_(INFO) << "first type: expect: " << firstType << ", actual: " << listItem->GetType(); + return false; + } + } + index++; + + Size listItemSize = item.second->GetLayoutSize(); + if (!NearEqual(listItemSize.Height(), itemHeight)) { + GTEST_LOG_(INFO) << "height: expect: " << itemHeight << ", actual: " << listItemSize.Height(); + return false; + } + position += itemHeight; + } + + return true; +} + +/** + * @tc.name: InsertionAndDeletion002 + * @tc.desc: Verify insertion and deletion before display range. + * @tc.type: FUNC + * @tc.require: AR000DQ1SV + * @tc.author: zhanghaibo + */ +HWTEST_F(ListElementTest, InsertionAndDeletion002, TestSize.Level1) +{ + auto listComponent = AceType::MakeRefPtr(); + auto positionController = AceType::MakeRefPtr(); + listComponent->SetPositionController(positionController); + + // 0. prepare environment + auto listItems = MakeListChildArray(ITEM_HEIGHT); + int32_t listItemsSize = listItems.size(); + for (int32_t i = 0; i < listItemsSize; i++) { + listComponent->InsertChild(i, listItems[i]); + } + + RefPtr listElement = BuildElementTree(listComponent); + auto multiChildNode = listElement->GetRenderNode(); + DisableAddDeleteEffect(multiChildNode); + + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(LIST_WIDTH, LIST_HEIGHT)); + auto multiChild = AceType::DynamicCast(multiChildNode); + multiChild->SetCacheExtent(CACHE_EXTENT); + multiChildNode->SetLayoutParam(layoutParam); + multiChildNode->PerformLayout(); + + ASSERT_FALSE(multiChildNode->GetChildren().empty()); + auto listNode = multiChildNode->GetChildren().front(); + + positionController->JumpTo(ITEM_HEIGHT); + multiChildNode->PerformLayout(); + int32_t childrenSize = listNode->GetChildren().size(); + EXPECT_EQ(childrenSize, 2); + + // 1. same position + auto newChild0 = MakeListChild("newid0", "newname0", "newtype0", 0.0, ITEM_HEIGHT); + listComponent->SetPageReady(true); + listComponent->InsertChild(0, newChild0); + listComponent->RemoveChild(newChild0); + listComponent->InsertChild(0, newChild0); + rootContainer_->UpdateChild(listElement, listComponent); + multiChildNode->PerformLayout(); + EXPECT_TRUE(CheckInsertAndDelete(multiChildNode, ITEM_HEIGHT, 3, 0, "newtype0")); + + // 2. different position + positionController->JumpTo(ITEM_HEIGHT * 2); + multiChildNode->PerformLayout(); + auto newChild1 = MakeListChild("newid1", "newname1", "newtype1", 0.0, ITEM_HEIGHT); + listComponent->InsertChild(1, newChild1); + listComponent->RemoveChild(newChild0); + rootContainer_->UpdateChild(listElement, listComponent); + multiChildNode->PerformLayout(); + EXPECT_TRUE(CheckInsertAndDelete(multiChildNode, ITEM_HEIGHT, 4, 0, "newtype1")); + + positionController->JumpTo(0.0); + multiChildNode->PerformLayout(); + EXPECT_TRUE(CheckInsertAndDelete(multiChildNode, ITEM_HEIGHT, 2, 0, "newtype1")); +} + +/** + * @tc.name: InsertionAndDeletion003 + * @tc.desc: Verify insertion and deletion at beginning of the display range. + * @tc.type: FUNC + * @tc.require: AR000DQ1SV + * @tc.author: zhanghaibo + */ +HWTEST_F(ListElementTest, InsertionAndDeletion003, TestSize.Level1) +{ + auto listComponent = AceType::MakeRefPtr(); + auto positionController = AceType::MakeRefPtr(); + listComponent->SetPositionController(positionController); + + // 0. prepare environment + auto listItems = MakeListChildArray(ITEM_HEIGHT); + int32_t listItemsSize = listItems.size(); + for (int32_t i = 0; i < listItemsSize; i++) { + listComponent->InsertChild(i, listItems[i]); + } + + RefPtr listElement = BuildElementTree(listComponent); + auto multiChildNode = listElement->GetRenderNode(); + DisableAddDeleteEffect(multiChildNode); + + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(LIST_WIDTH, LIST_HEIGHT)); + auto multiChild = AceType::DynamicCast(multiChildNode); + multiChild->SetCacheExtent(CACHE_EXTENT); + multiChildNode->SetLayoutParam(layoutParam); + multiChildNode->PerformLayout(); + + ASSERT_FALSE(multiChildNode->GetChildren().empty()); + auto listNode = multiChildNode->GetChildren().front(); + + positionController->JumpTo(ITEM_HEIGHT); + multiChildNode->PerformLayout(); + int32_t childrenSize = listNode->GetChildren().size(); + // viewPort is [50.0, 150.0], CACHE_EXTENT is 0.0, so it's 2. + EXPECT_EQ(childrenSize, 2); + + // 1. same position + auto newChild0 = MakeListChild("newid0", "newname0", "newtype0", 0.0, ITEM_HEIGHT); + listComponent->InsertChild(1, newChild0); + listComponent->RemoveChild(newChild0); + listComponent->InsertChild(1, newChild0); + rootContainer_->UpdateChild(listElement, listComponent); + multiChildNode->PerformLayout(); + EXPECT_TRUE(CheckInsertAndDelete(multiChildNode, ITEM_HEIGHT, 3, 0, "type0")); + + // 2. different position + auto newChild1 = MakeListChild("newid1", "newname1", "newtype1", 0.0, ITEM_HEIGHT); + listComponent->InsertChild(2, newChild1); + listComponent->RemoveChild(newChild1); + listComponent->InsertChild(2, newChild1); + rootContainer_->UpdateChild(listElement, listComponent); + multiChildNode->PerformLayout(); + EXPECT_TRUE(CheckInsertAndDelete(multiChildNode, ITEM_HEIGHT, 2, 0, "type0")); + + positionController->JumpTo(ITEM_HEIGHT * 2); + multiChildNode->PerformLayout(); + EXPECT_TRUE(CheckInsertAndDelete(multiChildNode, ITEM_HEIGHT, 2, 1, "newtype0")); +} + +/** + * @tc.name: InsertionAndDeletion004 + * @tc.desc: Verify insertion and deletion at middle of the display range. + * @tc.type: FUNC + * @tc.require: AR000DQ1SV + * @tc.author: zhanghaibo + */ +HWTEST_F(ListElementTest, InsertionAndDeletion004, TestSize.Level1) +{ + auto listComponent = AceType::MakeRefPtr(); + auto positionController = AceType::MakeRefPtr(); + listComponent->SetPositionController(positionController); + + // 0. prepare environment + auto listItems = MakeListChildArray(ITEM_HEIGHT); + int32_t listItemsSize = listItems.size(); + for (int32_t i = 0; i < listItemsSize; i++) { + listComponent->InsertChild(i, listItems[i]); + } + + RefPtr listElement = BuildElementTree(listComponent); + auto multiChildNode = listElement->GetRenderNode(); + DisableAddDeleteEffect(multiChildNode); + + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(LIST_WIDTH, LIST_HEIGHT)); + auto multiChild = AceType::DynamicCast(multiChildNode); + multiChild->SetCacheExtent(CACHE_EXTENT); + multiChildNode->SetLayoutParam(layoutParam); + multiChildNode->PerformLayout(); + + ASSERT_FALSE(multiChildNode->GetChildren().empty()); + auto listNode = multiChildNode->GetChildren().front(); + + positionController->JumpTo(ITEM_HEIGHT); + multiChildNode->PerformLayout(); + int32_t childrenSize = listNode->GetChildren().size(); + // viewPort is [50.0, 150.0], CACHE_EXTENT is 0.0, so it's 2. + EXPECT_EQ(childrenSize, 2); + + // 1. same position + auto newChild0 = MakeListChild("newid0", "newname0", "newtype0", 0.0, ITEM_HEIGHT); + listComponent->InsertChild(2, newChild0); + listComponent->RemoveChild(newChild0); + listComponent->InsertChild(2, newChild0); + rootContainer_->UpdateChild(listElement, listComponent); + multiChildNode->PerformLayout(); + EXPECT_TRUE(CheckInsertAndDelete(multiChildNode, ITEM_HEIGHT, 2, 1, "type1")); + + // 2. different position + auto newChild1 = MakeListChild("newid1", "newname1", "newtype1", 0.0, ITEM_HEIGHT); + listComponent->InsertChild(3, newChild1); + listComponent->RemoveChild(newChild0); + rootContainer_->UpdateChild(listElement, listComponent); + multiChildNode->PerformLayout(); + EXPECT_TRUE(CheckInsertAndDelete(multiChildNode, ITEM_HEIGHT, 2, 1, "type1")); + + positionController->JumpTo(ITEM_HEIGHT * 2); + multiChildNode->PerformLayout(); + EXPECT_TRUE(CheckInsertAndDelete(multiChildNode, ITEM_HEIGHT, 2, 2, "newtype1")); +} + +/** + * @tc.name: InsertionAndDeletion005 + * @tc.desc: Verify insertion and deletion at end of the display range. + * @tc.type: FUNC + * @tc.require: AR000DQ1T0 + * @tc.author: zhanghaibo + */ +HWTEST_F(ListElementTest, InsertionAndDeletion005, TestSize.Level1) +{ + auto listComponent = AceType::MakeRefPtr(); + auto positionController = AceType::MakeRefPtr(); + listComponent->SetPositionController(positionController); + + // 0. prepare environment + auto listItems = MakeListChildArray(ITEM_HEIGHT); + int32_t listItemsSize = listItems.size(); + for (int32_t i = 0; i < listItemsSize; i++) { + listComponent->InsertChild(i, listItems[i]); + } + + RefPtr listElement = BuildElementTree(listComponent); + auto multiChildNode = listElement->GetRenderNode(); + DisableAddDeleteEffect(multiChildNode); + + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(LIST_WIDTH, LIST_HEIGHT)); + auto multiChild = AceType::DynamicCast(multiChildNode); + multiChild->SetCacheExtent(CACHE_EXTENT); + multiChildNode->SetLayoutParam(layoutParam); + multiChildNode->PerformLayout(); + + ASSERT_FALSE(multiChildNode->GetChildren().empty()); + auto listNode = multiChildNode->GetChildren().front(); + + positionController->JumpTo(ITEM_HEIGHT); + multiChildNode->PerformLayout(); + int32_t childrenSize = listNode->GetChildren().size(); + // viewPort is [50.0, 150.0], CACHE_EXTENT is 0.0, so it's 2. + EXPECT_EQ(childrenSize, 2); + + // 1. same position + auto newChild0 = MakeListChild("newid0", "newname0", "newtype0", 0.0, ITEM_HEIGHT); + listComponent->InsertChild(3, newChild0); + listComponent->RemoveChild(newChild0); + listComponent->InsertChild(3, newChild0); + rootContainer_->UpdateChild(listElement, listComponent); + multiChildNode->PerformLayout(); + EXPECT_TRUE(CheckInsertAndDelete(multiChildNode, ITEM_HEIGHT, 2, 1, "type1")); + + // 2. different position + auto newChild1 = MakeListChild("newid1", "newname1", "newtype1", 0.0, ITEM_HEIGHT); + listComponent->InsertChild(3, newChild1); + listComponent->RemoveChild(newChild1); + listComponent->InsertChild(3, newChild1); + rootContainer_->UpdateChild(listElement, listComponent); + multiChildNode->PerformLayout(); + EXPECT_TRUE(CheckInsertAndDelete(multiChildNode, ITEM_HEIGHT, 2, 1, "type1")); + + // Long jump is not support now, so jump one by one. + positionController->JumpTo(ITEM_HEIGHT * 2); + multiChildNode->PerformLayout(); + positionController->JumpTo(ITEM_HEIGHT * 3); + multiChildNode->PerformLayout(); + EXPECT_TRUE(CheckInsertAndDelete(multiChildNode, ITEM_HEIGHT, 2, 3, "newtype1")); + + positionController->JumpTo(ITEM_HEIGHT * 4); + multiChildNode->PerformLayout(); + EXPECT_TRUE(CheckInsertAndDelete(multiChildNode, ITEM_HEIGHT, 2, 4, "newtype0")); +} + +/** + * @tc.name: InsertionAndDeletion006 + * @tc.desc: Verify insertion and deletion after the display range. + * @tc.type: FUNC + * @tc.require: AR000DQ1T0 + * @tc.author: zhanghaibo + */ +HWTEST_F(ListElementTest, InsertionAndDeletion006, TestSize.Level1) +{ + auto listComponent = AceType::MakeRefPtr(); + auto positionController = AceType::MakeRefPtr(); + listComponent->SetPositionController(positionController); + + // 0. prepare environment + auto listItems = MakeListChildArray(ITEM_HEIGHT); + int32_t listItemsSize = listItems.size(); + for (int32_t i = 0; i < listItemsSize; i++) { + listComponent->InsertChild(i, listItems[i]); + } + + RefPtr listElement = BuildElementTree(listComponent); + auto multiChildNode = listElement->GetRenderNode(); + DisableAddDeleteEffect(multiChildNode); + + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(LIST_WIDTH, LIST_HEIGHT)); + auto multiChild = AceType::DynamicCast(multiChildNode); + multiChild->SetCacheExtent(CACHE_EXTENT); + multiChildNode->SetLayoutParam(layoutParam); + multiChildNode->PerformLayout(); + + ASSERT_FALSE(multiChildNode->GetChildren().empty()); + auto listNode = multiChildNode->GetChildren().front(); + + positionController->JumpTo(ITEM_HEIGHT); + multiChildNode->PerformLayout(); + int32_t childrenSize = listNode->GetChildren().size(); + // viewPort is [50.0, 150.0], CACHE_EXTENT is 0.0, so it's 2. + EXPECT_EQ(childrenSize, 2); + + // 1. same position + auto newChild0 = MakeListChild("newid0", "newname0", "newtype0", 0.0, ITEM_HEIGHT); + listComponent->InsertChild(4, newChild0); + listComponent->RemoveChild(newChild0); + listComponent->InsertChild(4, newChild0); + rootContainer_->UpdateChild(listElement, listComponent); + multiChildNode->PerformLayout(); + EXPECT_TRUE(CheckInsertAndDelete(multiChildNode, ITEM_HEIGHT, 2, 1, "type1")); + + // 2. different position + auto newChild1 = MakeListChild("newid1", "newname1", "newtype1", 0.0, ITEM_HEIGHT); + listComponent->InsertChild(6, newChild1); + listComponent->RemoveChild(listItems[4]); + rootContainer_->UpdateChild(listElement, listComponent); + multiChildNode->PerformLayout(); + EXPECT_TRUE(CheckInsertAndDelete(multiChildNode, ITEM_HEIGHT, 2, 1, "type1")); + + // Long jump is not support now, so jump one by one. + positionController->JumpTo(ITEM_HEIGHT * 2); + multiChildNode->PerformLayout(); + positionController->JumpTo(ITEM_HEIGHT * 3); + multiChildNode->PerformLayout(); + positionController->JumpTo(ITEM_HEIGHT * 4); + multiChildNode->PerformLayout(); + EXPECT_TRUE(CheckInsertAndDelete(multiChildNode, ITEM_HEIGHT, 2, 4, "newtype0")); + + auto newChild2 = MakeListChild("newid2", "newname2", "newtype2", 0.0, ITEM_HEIGHT); + listComponent->AppendChild(newChild2); + rootContainer_->UpdateChild(listElement, listComponent); + multiChildNode->PerformLayout(); + positionController->JumpTo(ITEM_HEIGHT * 5); + multiChildNode->PerformLayout(); + EXPECT_TRUE(CheckInsertAndDelete(multiChildNode, ITEM_HEIGHT, 2, 5, "newtype1")); +} + +/** + * @tc.name: InsertionAndDeletion007 + * @tc.desc: Verify deletion when there is no item. + * @tc.type: FUNC + * @tc.require: AR000DQ1T0 + * @tc.author: zhanghaibo + */ +HWTEST_F(ListElementTest, InsertionAndDeletion007, TestSize.Level1) +{ + double listHeight = 1000.0; + auto listComponent = AceType::MakeRefPtr(); + listComponent->SetPositionController(AceType::MakeRefPtr()); + listComponent->RemoveChild(MakeListChild("id0", "name0", "common", 0.0, ITEM_HEIGHT)); + + RefPtr listElement = BuildElementTree(listComponent); + auto multiChildNode = listElement->GetRenderNode(); + DisableAddDeleteEffect(multiChildNode); + + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(LIST_WIDTH, listHeight)); + multiChildNode->SetLayoutParam(layoutParam); + multiChildNode->PerformLayout(); + + ASSERT_FALSE(multiChildNode->GetChildren().empty()); + + auto renderList = multiChildNode->GetChildren().front(); + + auto children = renderList->GetChildren(); + int32_t childrenSize = children.size(); + EXPECT_EQ(childrenSize, 0); +} + +/** + * @tc.name: InsertionAndDeletion008 + * @tc.desc: Verify delete all. + * @tc.type: FUNC + * @tc.require: AR000DQ1T0 + * @tc.author: zhanghaibo + */ +HWTEST_F(ListElementTest, InsertionAndDeletion008, TestSize.Level1) +{ + auto listComponent = AceType::MakeRefPtr(); + auto positionController = AceType::MakeRefPtr(); + listComponent->SetPositionController(positionController); + + // 0. prepare environment + auto listItems = MakeListChildArray(ITEM_HEIGHT); + int32_t listItemsSize = listItems.size(); + for (int32_t i = 0; i < listItemsSize; i++) { + listComponent->InsertChild(i, listItems[i]); + } + + RefPtr listElement = BuildElementTree(listComponent); + auto multiChildNode = listElement->GetRenderNode(); + DisableAddDeleteEffect(multiChildNode); + + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(LIST_WIDTH, LIST_HEIGHT)); + auto multiChild = AceType::DynamicCast(multiChildNode); + multiChild->SetCacheExtent(CACHE_EXTENT); + multiChildNode->SetLayoutParam(layoutParam); + multiChildNode->PerformLayout(); + + ASSERT_FALSE(multiChildNode->GetChildren().empty()); + auto listNode = multiChildNode->GetChildren().front(); + + positionController->JumpTo(ITEM_HEIGHT); + multiChildNode->PerformLayout(); + int32_t childrenSize = listNode->GetChildren().size(); + // viewPort is [50.0, 150.0], CACHE_EXTENT is 0.0, so it's 2. + EXPECT_EQ(childrenSize, 2); + + for (int32_t i = 0; i < listItemsSize; i++) { + listComponent->RemoveChild(listItems[i]); + } + rootContainer_->UpdateChild(listElement, listComponent); + multiChildNode->PerformLayout(); + childrenSize = listNode->GetChildren().size(); + EXPECT_EQ(childrenSize, 0); + EXPECT_TRUE(CheckInsertAndDelete(multiChildNode, ITEM_HEIGHT, 0, 0, "")); +} + +/** + * @tc.name: InsertionAndDeletion009 + * @tc.desc: Verify insertion and deletion randomly. + * @tc.type: FUNC + * @tc.require: AR000DQ1T1 + * @tc.author: zhanghaibo + */ +HWTEST_F(ListElementTest, InsertionAndDeletion009, TestSize.Level1) +{ + double listHeight = 1000.0; + auto listComponent = AceType::MakeRefPtr(); + listComponent->SetPositionController(AceType::MakeRefPtr()); + auto child0 = MakeListChild("id0", "name0", "common", 0.0, ITEM_HEIGHT); + auto child1 = MakeListChild("id1", "name1", "common", 0.0, ITEM_HEIGHT); + auto child2 = MakeListChild("id2", "name2", "common", 0.0, ITEM_HEIGHT); + listComponent->InsertChild(0, child0); + listComponent->InsertChild(1, child1); + listComponent->InsertChild(2, child2); + + RefPtr listElement = BuildElementTree(listComponent); + auto multiChildNode = listElement->GetRenderNode(); + DisableAddDeleteEffect(multiChildNode); + + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(LIST_WIDTH, listHeight)); + multiChildNode->SetLayoutParam(layoutParam); + multiChildNode->PerformLayout(); + + ASSERT_FALSE(multiChildNode->GetChildren().empty()); + auto listNode = multiChildNode->GetChildren().front(); + + // insert + listComponent->InsertChild(0, MakeListChild("newid0", "newname0", "common", 0.0, ITEM_HEIGHT)); + listComponent->InsertChild(1, MakeListChild("newid1", "newname1", "common", 0.0, ITEM_HEIGHT)); + rootContainer_->UpdateChild(listElement, listComponent); + multiChildNode->PerformLayout(); + + listNode = multiChildNode->GetChildren().front(); + auto children = listNode->GetChildren(); + int32_t childrenSize = children.size(); + EXPECT_EQ(childrenSize, 5); + + int32_t index = 0; + double position = 0.0; + auto renderList = AceType::DynamicCast(listNode); + for (const auto& item : renderList->GetItems()) { + auto listItem = RenderListItem::GetRenderListItem(item.second); + EXPECT_TRUE(listItem); + EXPECT_TRUE(NearEqual(listItem->GetPositionInList(), position)); + EXPECT_EQ(listItem->GetIndex(), index); + index++; + + Size listItemSize = item.second->GetLayoutSize(); + EXPECT_TRUE(NearEqual(listItemSize.Height(), ITEM_HEIGHT)); + position += ITEM_HEIGHT; + } +} + +/** + * @tc.name: ListElementItemFocusTest001 + * @tc.desc: Verify list item by render sequence. + * @tc.type: FUNC + * @tc.require: AR000DR6DF + * @tc.author: jinwuwen + */ +HWTEST_F(ListElementTest, ListElementItemFocusTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. create list. + * @tc.expected: step1. create list correctly and item 0 on focus. + */ + RefPtr listComponent = AceType::MakeRefPtr(); + for (int32_t i = 0; i < ITEM_COUNT; ++i) { + listComponent->AppendChild(MakeListChild("list1_id", "list1_name")); + } + listComponent->SetDirection(FlexDirection::COLUMN); + listComponent->SetPositionController(AceType::MakeRefPtr()); + listOne_->SetNewComponent(listComponent); + listOne_->Mount(rootContainer_); + auto renderNodeOne = listOne_->GetRenderNode(); + + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(1000.0, 1000.0)); + renderNodeOne->SetLayoutParam(layoutParam); + renderNodeOne->PerformLayout(); + rootContainer_->RequestFocusImmediately(); + + EXPECT_TRUE(rootContainer_->IsCurrentFocus()); + EXPECT_TRUE(listOne_->IsCurrentFocus()); + EXPECT_TRUE(CheckItemFocus(listOne_->GetChildren(), 0)); + + /** + * @tc.steps: step2. Animation to the down + * @tc.expected: step2. RootContainer and listOne acquire the focus. listOne's second child Get the focus. + */ + listOne_->RequestNextFocus(true, false, Rect()); + EXPECT_TRUE(rootContainer_->IsCurrentFocus()); + EXPECT_TRUE(listOne_->IsCurrentFocus()); + EXPECT_TRUE(CheckItemFocus(listOne_->GetChildren(), 1)); +} + +/** + * @tc.name: ListElementItemFocusTest002 + * @tc.desc: Verify list item support long jump. + * @tc.type: FUNC + * @tc.require: AR000DQ1T9 + * @tc.author: jinwuwen + */ +HWTEST_F(ListElementTest, ListElementItemFocusTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. create list with 50 item. + * @tc.expected: step1. create list correctly and item 0 on focus. + */ + RefPtr listComponent = AceType::MakeRefPtr(); + for (int32_t i = 0; i < 50; ++i) { + listComponent->AppendChild(MakeListChild("list1_id", "list1_name")); + } + listComponent->SetDirection(FlexDirection::COLUMN); + listComponent->SetPositionController(AceType::MakeRefPtr()); + listOne_->SetNewComponent(listComponent); + listOne_->Mount(rootContainer_); + auto renderNodeOne = listOne_->GetRenderNode(); + + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(1000.0, 5000.0)); + renderNodeOne->SetLayoutParam(layoutParam); + renderNodeOne->PerformLayout(); + rootContainer_->RequestFocusImmediately(); + + /** + * @tc.steps: step2. set item focusable false partly. + * @tc.expected: step2. set item focusable false correctly. + */ + for (auto focusNode : listOne_->GetChildrenList()) { + auto listItem = AceType::DynamicCast(focusNode); + if (listItem->GetIndex() > 0 && listItem->GetIndex() < 48) { + focusNode->SetFocusable(false); + } + } + + EXPECT_TRUE(rootContainer_->IsCurrentFocus()); + EXPECT_TRUE(listOne_->IsCurrentFocus()); + EXPECT_TRUE(CheckItemFocus(listOne_->GetChildren(), 0)); + + /** + * @tc.steps: step3. Animation to the down + * @tc.expected: step3. RootContainer and listOne acquire the focus. item 48 Get the focus. + */ + listOne_->RequestNextFocus(true, false, Rect()); + EXPECT_TRUE(CheckItemFocus(listOne_->GetChildren(), 48)); + + /** + * @tc.steps: step4. Animation to the down + * @tc.expected: step4. RootContainer and listOne acquire the focus. item 49 Get the focus. + */ + listOne_->RequestNextFocus(true, false, Rect()); + EXPECT_TRUE(CheckItemFocus(listOne_->GetChildren(), 49)); +} + +/** + * @tc.name: ListElementItemFocusTest003 + * @tc.desc: Verify list item support long jump. + * @tc.type: FUNC + * @tc.require: AR000DRS0L + * @tc.author: jinwuwen + */ +HWTEST_F(ListElementTest, ListElementItemFocusTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. create list with 50 item. + * @tc.expected: step1. create list correctly and item 0 on focus. + */ + RefPtr listComponent = AceType::MakeRefPtr(); + for (int32_t i = 0; i < 50; ++i) { + listComponent->AppendChild(MakeListChild("list1_id", "list1_name")); + } + listComponent->SetDirection(FlexDirection::COLUMN); + listComponent->SetPositionController(AceType::MakeRefPtr()); + listOne_->SetNewComponent(listComponent); + listOne_->Mount(rootContainer_); + auto renderNodeOne = listOne_->GetRenderNode(); + + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(1000.0, 5000.0)); + renderNodeOne->SetLayoutParam(layoutParam); + renderNodeOne->PerformLayout(); + rootContainer_->RequestFocusImmediately(); + + /** + * @tc.steps: step2. set item focusable false partly. + * @tc.expected: step2. set item focusable false correctly. + */ + for (auto focusNode : listOne_->GetChildrenList()) { + auto listItem = AceType::DynamicCast(focusNode); + if (listItem->GetIndex() > 0 && listItem->GetIndex() < 48) { + focusNode->SetFocusable(false); + } + } + + EXPECT_TRUE(rootContainer_->IsCurrentFocus()); + EXPECT_TRUE(listOne_->IsCurrentFocus()); + EXPECT_TRUE(CheckItemFocus(listOne_->GetChildren(), 0)); + + /** + * @tc.steps: step3. Animation to the down + * @tc.expected: step3. RootContainer and listOne acquire the focus. item 48 Get the focus. + */ + listOne_->RequestNextFocus(true, false, Rect()); + EXPECT_TRUE(CheckItemFocus(listOne_->GetChildren(), 48)); + + /** + * @tc.steps: step4. Animation to the up + * @tc.expected: step4. RootContainer and listOne acquire the focus. item 0 Get the focus. + */ + listOne_->RequestNextFocus(true, true, Rect()); + EXPECT_TRUE(CheckItemFocus(listOne_->GetChildren(), 0)); +} + +/** + * @tc.name: ListItemFocusTest004 + * @tc.desc: Verify list item support long jump. + * @tc.type: FUNC + * @tc.require: AR000DR6DF + * @tc.author: jinwuwen + */ +HWTEST_F(ListElementTest, ListElementItemFocusTest004, TestSize.Level1) +{ + /** + * @tc.steps: step1. create list with 50 item. + * @tc.expected: step1. create list correctly and item 0 on focus. + */ + RefPtr listComponent = AceType::MakeRefPtr(); + for (int32_t i = 0; i < 50; ++i) { + listComponent->AppendChild(MakeListChild("list1_id", "list1_name", "focus", 200, ITEM_HEIGHT)); + } + listComponent->SetDirection(FlexDirection::COLUMN); + listComponent->SetPositionController(AceType::MakeRefPtr()); + listOne_->SetNewComponent(listComponent); + listOne_->Mount(rootContainer_); + auto renderNodeOne = listOne_->GetRenderNode(); + + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(1000.0, 5000.0)); + renderNodeOne->SetLayoutParam(layoutParam); + renderNodeOne->PerformLayout(); + rootContainer_->RequestFocusImmediately(); + + /** + * @tc.steps: step2. set item focusable false partly. + * @tc.expected: step2. set item focusable false correctly. + */ + for (auto focusNode : listOne_->GetChildrenList()) { + auto listItem = AceType::DynamicCast(focusNode); + if (listItem->GetIndex() > 0 && listItem->GetIndex() < 48) { + focusNode->SetFocusable(false); + } + } + + EXPECT_TRUE(rootContainer_->IsCurrentFocus()); + EXPECT_TRUE(listOne_->IsCurrentFocus()); + EXPECT_TRUE(CheckItemFocus(listOne_->GetChildren(), 0)); + + /** + * @tc.steps: step3. Animation to the down + * @tc.expected: step3. RootContainer and listOne acquire the focus. item 48 Get the focus. + */ + listOne_->RequestNextFocus(true, false, Rect()); + EXPECT_TRUE(CheckItemFocus(listOne_->GetChildren(), 48)); + + /** + * @tc.steps: step4. Get the focus item position in list + * @tc.expected: step4. position in list may not be zero when item index is not zero. + */ + auto renderList = AceType::DynamicCast(renderNodeOne->GetChildren().front()); + ASSERT_TRUE(renderList); + auto itemChild = renderList->GetChildByIndex(48); + ASSERT_TRUE(itemChild); + auto listItem = RenderListItem::GetRenderListItem(itemChild); + ASSERT_TRUE(listItem); + double focusPostion = listItem->GetPositionInList(); + EXPECT_TRUE(NearEqual(focusPostion, ITEM_HEIGHT * 48)); +} + +/** + * @tc.name: ListItemGroupFocusTest001 + * @tc.desc: Verify list item group nextFocusNode when item group is collapse. + * @tc.type: FUNC + * @tc.require: AR000DQ1TB + * @tc.author: chenlien + */ +HWTEST_F(ListElementTest, ListItemGroupFocusTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. create list with 50 item. + * @tc.expected: step1. create list correctly and item 0 on focus. + */ + RefPtr listComponent = AceType::MakeRefPtr(); + for (int32_t i = 0; i < 50; ++i) { + listComponent->AppendChild(MakeListItemGroupChild("list1_id", "list1_name", "focus", 200, ITEM_HEIGHT)); + } + listComponent->SetDirection(FlexDirection::COLUMN); + listComponent->SetPositionController(AceType::MakeRefPtr()); + listOne_->SetNewComponent(listComponent); + listOne_->Mount(rootContainer_); + auto renderNodeOne = listOne_->GetRenderNode(); + + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(1000.0, 5000.0)); + renderNodeOne->SetLayoutParam(layoutParam); + renderNodeOne->PerformLayout(); + rootContainer_->RequestFocusImmediately(); + + /** + * @tc.steps: step3. Animation to the down + * @tc.expected: step3. expand the first item group, and then focus the first and second item + */ + EXPECT_TRUE(CheckItemFocus(listOne_->GetChildren(), 0)); + auto listItemElement = ListItemElement::GetListItem(listOne_->GetFirstChild()); + if (listItemElement) { + auto listItemGroupElement = AceType::DynamicCast(listItemElement); + EXPECT_TRUE(listItemGroupElement->GetItemGroupFocusIndex() == 0); + listItemGroupElement->RequestNextFocus(true, false, Rect()); + EXPECT_TRUE(listItemGroupElement->GetItemGroupFocusIndex() == 0); + } +} + +/** + * @tc.name: ListItemGroupFocusTest002 + * @tc.desc: Verify list item group nextFocusNode when item group is expanded. + * @tc.type: FUNC + * @tc.require: AR000DQ1TB + * @tc.author: chenlien + */ +HWTEST_F(ListElementTest, ListItemGroupFocusTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. create list with 50 item. + * @tc.expected: step1. create list correctly and item 0 on focus. + */ + RefPtr listComponent = AceType::MakeRefPtr(); + for (int32_t i = 0; i < 50; ++i) { + listComponent->AppendChild(MakeListItemGroupChild("list1_id", "list1_name", "focus", 200, ITEM_HEIGHT)); + } + listComponent->SetDirection(FlexDirection::COLUMN); + listComponent->SetPositionController(AceType::MakeRefPtr()); + listOne_->SetNewComponent(listComponent); + listOne_->Mount(rootContainer_); + auto renderNodeOne = listOne_->GetRenderNode(); + + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(1000.0, 5000.0)); + renderNodeOne->SetLayoutParam(layoutParam); + renderNodeOne->PerformLayout(); + rootContainer_->RequestFocusImmediately(); + + /** + * @tc.steps: step3. Animation to the down + * @tc.expected: step3. expand the first item group, and then focus the first and second item, + * the list item group focus index will be 2 + */ + auto listItemElement = ListItemElement::GetListItem(listOne_->GetFirstChild()); + EXPECT_TRUE(CheckItemFocus(listOne_->GetChildren(), 0)); + if (listItemElement) { + auto listItemGroupElement = AceType::DynamicCast(listItemElement); + auto renderNode = listItemGroupElement->GetRenderNode(); + auto itemGroupRender = AceType::DynamicCast(renderNode); + itemGroupRender->SetExpand(true); + EXPECT_TRUE(listItemGroupElement->GetItemGroupFocusIndex() == 0); + listItemGroupElement->RequestNextFocus(true, false, Rect()); + EXPECT_TRUE(listItemGroupElement->GetItemGroupFocusIndex() == 1); + listItemGroupElement->RequestNextFocus(true, false, Rect()); + EXPECT_TRUE(listItemGroupElement->GetItemGroupFocusIndex() == 2); + EXPECT_TRUE(CheckItemFocus(listOne_->GetChildren(), 0)); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/list/list_test_utils.cpp b/frameworks/core/components/test/unittest/list/list_test_utils.cpp new file mode 100644 index 00000000..e91f3e0b --- /dev/null +++ b/frameworks/core/components/test/unittest/list/list_test_utils.cpp @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/unittest/list/list_test_utils.h" + +#include "core/components/box/box_component.h" +#include "core/components/list/list_item_group_component.h" + +namespace OHOS::Ace { + +RefPtr ListTestUtils::CreateRenderBox(double width, double height) +{ + RefPtr renderBox = AceType::MakeRefPtr(); + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetWidth(width); + boxComponent->SetHeight(height); + renderBox->Update(boxComponent); + return renderBox; +} + +RefPtr ListTestUtils::CreateRenderItem( + double width, double height, const RefPtr& context, bool primary) +{ + RefPtr parent = AceType::MakeRefPtr(); + RefPtr listItem = AceType::MakeRefPtr(); + listItem->Attach(context); + listItem->SetPrimary(primary); + RefPtr renderBox = AceType::MakeRefPtr(); + RefPtr decoration = AceType::MakeRefPtr(); + decoration->SetBorderRadius(Radius(10.0)); + renderBox->SetBackDecoration(decoration); + parent->Attach(context); + renderBox->Attach(context); + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetWidth(width); + boxComponent->SetHeight(height); + renderBox->Update(boxComponent); + parent->AddChild(listItem); + listItem->AddChild(renderBox); + return parent; +} + +RefPtr ListTestUtils::CreateRenderItemGroup( + double width, double height, const RefPtr& context, bool needItem, bool specifyPrimary) +{ + RefPtr parent = AceType::MakeRefPtr(); + RefPtr listItemGroup = AceType::MakeRefPtr(); + listItemGroup->SetOnClick( + AceAsyncEvent::Create(EventMarker { "groupclick_id" }, context)); + listItemGroup->SetOnCollapse( + AceAsyncEvent::Create(EventMarker { "groupcollapse_id" }, context)); + listItemGroup->SetOnExpand( + AceAsyncEvent::Create(EventMarker { "groupexpand_id" }, context)); + listItemGroup->SetGroupId("test"); + listItemGroup->SetExpand(true); + auto primaryItem = CreateRenderItem(width, height, context, specifyPrimary); + listItemGroup->AddChild(primaryItem); + auto arrowItem = CreateRenderBox(width, height); + listItemGroup->AddChild(arrowItem); // Add arrow child. + if (needItem) { + auto secondLevelItem = CreateRenderItem(width, height, context, false); + listItemGroup->AddChild(secondLevelItem); + } + listItemGroup->Attach(context); + parent->Attach(context); + parent->AddChild(listItemGroup); + return parent; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/list/list_test_utils.h b/frameworks/core/components/test/unittest/list/list_test_utils.h new file mode 100644 index 00000000..0c49b1ba --- /dev/null +++ b/frameworks/core/components/test/unittest/list/list_test_utils.h @@ -0,0 +1,277 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_LIST_LIST_TEST_UTILS_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_LIST_LIST_TEST_UTILS_H + +#include +#include +#include + +#include "core/components/box/render_box.h" +#include "core/components/list/list_item_group_component.h" +#include "core/components/list/render_list.h" +#include "core/components/list/render_list_item.h" +#include "core/components/list/render_list_item_group.h" + +namespace OHOS::Ace { +namespace { + +using ListEventCallback = std::function; + +class MockRenderBox final : public RenderBox { + DECLARE_ACE_TYPE(MockRenderBox, RenderBox); + +public: + MockRenderBox() = default; + ~MockRenderBox() override = default; +}; + +class MockRenderList final : public RenderList { + DECLARE_ACE_TYPE(MockRenderList, RenderList); + +public: + MockRenderList() = default; + ~MockRenderList() override = default; + + bool IsWatch() const + { + return SystemProperties::GetDeviceType() == DeviceType::WATCH; + } + + bool IsTV() const + { + return SystemProperties::GetDeviceType() == DeviceType::TV; + } + + double GetViewPortSize() + { + return GetMainSize(viewPort_); + } +}; + +class MockRenderListItem final : public RenderListItem { + DECLARE_ACE_TYPE(MockRenderListItem, RenderListItem); + +public: + MockRenderListItem() = default; + ~MockRenderListItem() override = default; + const RefPtr& GetEffectController() const + { + return focusController_; + } + + void SetPrimary(bool primary) + { + primary_ = primary; + } + + bool NeedDivider() const + { + return needDivider_; + } + + Dimension GetDividerHeight() const + { + return dividerHeight_; + } + + Dimension GetDividerOrigin() const + { + return dividerOrigin_; + } + + Dimension GetDividerLength() const + { + return dividerLength_; + } + + Color GetDividerColor() const + { + return dividerColor_; + } + + void MarkNeedDivider() + { + needDivider_ = true; + } + + void SetDividerHeight(const Dimension& height) + { + dividerHeight_ = height; + } + + void PerformLayout() override; + void HandleClicked(); + void PlayPressDownAnimation(); + void ResetFocusEffect(const WeakPtr& context); +}; + +void MockRenderListItem::PerformLayout() +{ + RenderListItem::PerformLayout(); +} + +void MockRenderListItem::HandleClicked() +{ + RenderListItem::HandleClicked(); +} + +void MockRenderListItem::PlayPressDownAnimation() +{ + RenderListItem::PlayPressDownAnimation(); +} + +void MockRenderListItem::ResetFocusEffect(const WeakPtr& context) +{ +#ifdef WEARABLE_PRODUCT + if (SystemProperties::GetDeviceType() == DeviceType::WATCH) { + focusController_ = AceType::MakeRefPtr(context); +#else + if (SystemProperties::GetDeviceType() == DeviceType::TV) { + focusController_ = AceType::MakeRefPtr(context); +#endif + } else { + focusController_ = AceType::MakeRefPtr(GetContext()); + } + + auto pipelineContext = context.Upgrade(); + if (pipelineContext) { + focusController_->Initialize(pipelineContext->GetThemeManager()); + } + focusController_->UpdateContext(context); + focusController_->SetItemNode(AceType::WeakClaim(this)); +} + +class MockRenderScroll final : public RenderMultiChildScroll { + DECLARE_ACE_TYPE(MockRenderScroll, RenderMultiChildScroll); + +public: + MockRenderScroll() = default; + ~MockRenderScroll() override = default; + + void Update(const RefPtr& component) override; + void PerformLayout() override; + double GetOverScroll(); + RefPtr GetScrollEffect(); +}; + +double MockRenderScroll::GetOverScroll() +{ + return overScroll_; +} + +void MockRenderScroll::Update(const RefPtr& component) +{ + return RenderMultiChildScroll::Update(component); +} + +void MockRenderScroll::PerformLayout() +{ + return RenderMultiChildScroll::PerformLayout(); +} + +RefPtr MockRenderScroll::GetScrollEffect() +{ + return scrollEffect_; +} + +class MockRenderListItemGroup final : public RenderListItemGroup { + DECLARE_ACE_TYPE(MockRenderListItemGroup, RenderListItemGroup); + +public: + MockRenderListItemGroup() = default; + ~MockRenderListItemGroup() override = default; + + void SetExpand(bool expand) + { + expand_ = expand; + } + + bool GetExpand() const + { + return expand_; + } + + void SetOnClick(GroupEventFunc onClicked) + { + onClicked_ = onClicked; + } + + void SetOnCollapse(GroupEventFunc onCollapse) + { + onCollapse_ = onCollapse; + } + + void SetOnExpand(GroupEventFunc onExpand) + { + onExpand_ = onExpand; + } + + void SetGroupId(const std::string groupId) + { + groupId_ = groupId; + } + + void HandleClicked(); +}; + +void MockRenderListItemGroup::HandleClicked() +{ + RenderListItemGroup::HandleClicked(); +} + +class MockEventHandler : public AceEventHandler { + void HandleAsyncEvent(const EventMarker& eventMarker) override {}; + void HandleAsyncEvent(const EventMarker& eventMarker, int32_t param) override {}; + void HandleAsyncEvent(const EventMarker& eventMarker, const BaseEventInfo& info) override {}; + void HandleAsyncEvent(const EventMarker& eventMarker, const std::string& param) override {}; + void HandleAsyncEvent(const EventMarker& eventMarker, const KeyEvent& keyEvent) override {}; + void HandleSyncEvent(const EventMarker& eventMarker, bool& result) override {}; + void HandleSyncEvent(const EventMarker& eventMarker, const BaseEventInfo& info, bool& result) override {}; + void HandleSyncEvent(const EventMarker& eventMarker, const std::string& param, std::string& result) override {}; + void HandleSyncEvent(const EventMarker& eventMarker, const KeyEvent& keyEvent, bool& result) override {}; +}; + +class TestListEventHander : public MockEventHandler { +public: + explicit TestListEventHander(ListEventCallback eventCallback) : eventCallback_(eventCallback) {}; + ~TestListEventHander() = default; + + void HandleAsyncEvent(const EventMarker& eventMarker, const std::string& param) + { + if (eventCallback_) { + eventCallback_(eventMarker.GetData().eventId, param); + } + }; + +private: + ListEventCallback eventCallback_; +}; + +} // namespace + +class ListTestUtils { +public: + static RefPtr CreateRenderBox(double width, double height); + static RefPtr CreateRenderItem( + double width, double height, const RefPtr& context, bool primary_ = false); + static RefPtr CreateRenderItemGroup(double width, double height, const RefPtr& context, + bool needItem = false, bool specifyPrimary = true); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_LIST_LIST_TEST_UTILS_H diff --git a/frameworks/core/components/test/unittest/list/render_list_test.cpp b/frameworks/core/components/test/unittest/list/render_list_test.cpp new file mode 100644 index 00000000..45feddfa --- /dev/null +++ b/frameworks/core/components/test/unittest/list/render_list_test.cpp @@ -0,0 +1,3032 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "core/animation/curves.h" +#include "core/components/list/list_component.h" +#include "core/components/list/render_list.h" +#include "core/components/scroll/scroll_bar_theme.h" +#include "core/components/scroll/scroll_edge_effect.h" +#include "core/components/scroll/scroll_fade_effect.h" +#include "core/components/scroll/scroll_spring_effect.h" +#include "core/components/test/unittest/list/list_test_utils.h" +#include "core/components/test/unittest/mock/mock_render_common.h" +#include "core/components/theme/theme_manager.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +const RefPtr THEME_MANAGER = AceType::MakeRefPtr(); +const char LIST_ITEM_GROUP_EVENT_GROUPCLICK[] = "groupclick"; + +} // namespace + +class RenderListTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; + + RefPtr mockContext_; + RefPtr renderList_; + RefPtr renderScroll_; + int32_t index_ = 0; +}; + +void RenderListTest::SetUpTestCase() {} +void RenderListTest::TearDownTestCase() {} + +void RenderListTest::SetUp() +{ + mockContext_ = MockRenderCommon::GetMockContext(); + renderList_ = AceType::MakeRefPtr(); + renderList_->Attach(mockContext_); + renderScroll_ = AceType::MakeRefPtr(); + renderScroll_->Attach(mockContext_); + index_ = 0; +} + +void RenderListTest::TearDown() +{ + mockContext_ = nullptr; + renderList_ = nullptr; + renderScroll_ = nullptr; +} + +/** + * @tc.name: RenderListTest001 + * @tc.desc: Verify List PerformLayout can calculate children with row direction. + * @tc.type: FUNC + * @tc.require: AR000DBI7B + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderListTest, RenderListTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct ListComponent by row direction. + * @tc.expected: step1. properties are set correctly. + */ + int32_t totalCount = 10; + RefPtr listComponent = AceType::MakeRefPtr(); + listComponent->SetDirection(FlexDirection::ROW); + listComponent->SetTotalCount(totalCount); + listComponent->SetOnRequestItem(EventMarker { "itemBuilder_ID" }); + ASSERT_TRUE(listComponent->GetDirection() == FlexDirection::ROW); + ASSERT_TRUE(listComponent->GetTotalCount() == totalCount); + + /** + * @tc.steps: step2. construct RenderList with list component. + * @tc.expected: step2. properties are set correctly. + */ + renderList_->Update(listComponent); + renderList_->RegisterBuildItemCallback([this](int32_t index) -> bool { + RefPtr node = ListTestUtils::CreateRenderItem(400.0, 400.0, mockContext_); + renderList_->AddListItem(index, node); + return true; + }); + + /** + * @tc.steps: step3. trigger layout for render list. + * @tc.expected: step3. List and children layout correct. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(1000.0, 1000.0)); + renderList_->SetLayoutParam(layoutParam); + renderList_->PerformLayout(); + if (renderList_->IsWatch()) { + ASSERT_TRUE(NearEqual(renderList_->GetLayoutSize().Width(), renderList_->GetViewPortSize())); + } else { + ASSERT_TRUE(NearEqual(renderList_->GetLayoutSize().Width(), 400.0)); + } +} + +/** + * @tc.name: RenderListTest002 + * @tc.desc: Verify List PerformLayout can calculate children with column direction. + * @tc.type: FUNC + * @tc.require: AR000DBI7C + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderListTest, RenderListTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct ListComponent by column direction. + * @tc.expected: step1. properties are set correctly. + */ + int32_t totalCount = 6; + RefPtr listComponent = AceType::MakeRefPtr(); + listComponent->SetDirection(FlexDirection::COLUMN); + listComponent->SetTotalCount(totalCount); + listComponent->SetOnRequestItem(EventMarker { "itemBuilder_ID" }); + ASSERT_TRUE(listComponent->GetDirection() == FlexDirection::COLUMN); + ASSERT_TRUE(listComponent->GetTotalCount() == totalCount); + + /** + * @tc.steps: step2. construct RenderList with list component. + * @tc.expected: step2. properties are set correctly. + */ + renderList_->Update(listComponent); + renderList_->RegisterBuildItemCallback([this](int32_t index) -> bool { + RefPtr node = ListTestUtils::CreateRenderItem(500.0, 500.0, mockContext_); + renderList_->AddListItem(index, node); + return true; + }); + + /** + * @tc.steps: step3. trigger layout for render list. + * @tc.expected: step3. List and children layout correct. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(100.0, 100.0)); + layoutParam.SetMaxSize(Size(900.0, 900.0)); + renderList_->SetLayoutParam(layoutParam); + renderList_->PerformLayout(); + if (renderList_->IsWatch()) { + ASSERT_TRUE(NearEqual(renderList_->GetLayoutSize().Width(), renderList_->GetViewPortSize())); + } else { + ASSERT_TRUE(NearEqual(renderList_->GetLayoutSize().Height(), 500.0)); + } +} + +/** + * @tc.name: RenderListTest003 + * @tc.desc: Verify List PerformLayout can load children by step. + * @tc.type: FUNC + * @tc.require: AR000DAR0A + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderListTest, RenderListTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct ListComponent by default direction. + * @tc.expected: step1. properties are set correctly. + */ + int32_t totalCount = 100; + RefPtr listComponent = AceType::MakeRefPtr(); + listComponent->SetDirection(FlexDirection::COLUMN); + listComponent->SetTotalCount(totalCount); + listComponent->SetOnRequestItem(EventMarker { "builder_ID" }); + ASSERT_TRUE(listComponent->GetDirection() == FlexDirection::COLUMN); + ASSERT_TRUE(listComponent->GetTotalCount() == totalCount); + + /** + * @tc.steps: step2. construct RenderList with list component. + * @tc.expected: step2. properties are set correctly. + */ + renderList_->Update(listComponent); + renderList_->RegisterBuildItemCallback([this](int32_t index) -> bool { + RefPtr node = ListTestUtils::CreateRenderItem(300.0, 300.0, mockContext_); + renderList_->AddListItem(0, node); + index_++; + return true; + }); + + /** + * @tc.steps: step3. trigger layout for render list. + * @tc.expected: step3. List and children layout correct. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(200.0, 200.0)); + layoutParam.SetMaxSize(Size(600.0, 600.0)); + renderList_->SetLayoutParam(layoutParam); + ASSERT_TRUE(index_ == 0); + renderList_->PerformLayout(); + ASSERT_TRUE(index_ > 0); +} + +/** + * @tc.name: RenderListTest004 + * @tc.desc: Verify List Scroll Event can callback when event trigger. + * @tc.type: FUNC + * @tc.require: AR000DAR0J + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderListTest, RenderListTest004, TestSize.Level1) +{ + /** + * @tc.steps: step1. Create Event listener to receive Scroll event. + * @tc.expected: step1. Event listener create success. + */ + std::string scrollEventId = "list_scroll_id"; + index_ = 0; + RefPtr eventHander = AceType::MakeRefPtr( + [this, scrollEventId](const std::string& eventId, const std::string& param) { + std::string scrollResult = std::string("\"scroll\",{\"scrollX\":") + .append(std::to_string(450.0 * (index_ % 3))) + .append(",\"scrollY\":") + .append(std::to_string(450.0 * (index_ % 3))) + .append(",\"scrollState\":") + .append(std::to_string(index_ % 3)) + .append("},null"); + EXPECT_EQ(param, scrollResult); + EXPECT_EQ(eventId, scrollEventId); + index_++; + }); + mockContext_->RegisterEventHandler(eventHander); + + /** + * @tc.steps: step2. Create RenderList and add 10 child by row Direction. + * @tc.expected: step2. Properties and children are calculated correctly. + */ + int32_t totalCount = 200; + RefPtr listComponent = AceType::MakeRefPtr(); + listComponent->SetDirection(FlexDirection::COLUMN); + listComponent->SetTotalCount(totalCount); + listComponent->SetOnRequestItem(EventMarker { "itemBuilder_ID" }); + ASSERT_TRUE(listComponent->GetDirection() == FlexDirection::COLUMN); + ASSERT_TRUE(listComponent->GetTotalCount() == totalCount); + renderList_->Update(listComponent); + for (int32_t i = 0; i < 10; ++i) { + RefPtr box = ListTestUtils::CreateRenderBox(400.0, 400.0); + box->Attach(mockContext_); + renderList_->AddChild(box); + } + ASSERT_TRUE(renderList_->GetChildren().size() == 10); +} + +/** + * @tc.name: RenderListTest005 + * @tc.desc: Verify List ScrollBottom Event can callback when event trigger. + * @tc.type: FUNC + * @tc.require: AR000DC9BF + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderListTest, RenderListTest005, TestSize.Level1) +{ + /** + * @tc.steps: step1. Create Event listener to receive ScrollBottom event. + * @tc.expected: step1. Event listener create success. + */ + std::string scrollEventId = "list_scrollbottom_id"; + RefPtr eventHander = AceType::MakeRefPtr( + [this, scrollEventId](const std::string& eventId, const std::string& param) { + std::string ret = std::string("\"scrollbottom\",null"); + EXPECT_EQ(param, ret); + EXPECT_EQ(eventId, scrollEventId); + }); + mockContext_->RegisterEventHandler(eventHander); + + /** + * @tc.steps: step2. Create RenderList and add 10 child by COLUMN Direction. + * @tc.expected: step2. Properties and children are calculated correctly. + */ + int32_t totalCount = 99; + RefPtr listComponent = AceType::MakeRefPtr(); + listComponent->SetDirection(FlexDirection::COLUMN); + listComponent->SetTotalCount(totalCount); + listComponent->SetOnRequestItem(EventMarker { "itemBuilder_ID" }); + ASSERT_TRUE(listComponent->GetDirection() == FlexDirection::COLUMN); + ASSERT_TRUE(listComponent->GetTotalCount() == totalCount); + renderList_->Update(listComponent); + renderList_->RegisterRequestItemsCallback([this](int32_t index, int32_t count) { + RefPtr node = ListTestUtils::CreateRenderItem(200.0, 500.0, mockContext_); + renderList_->AddListItem(1, node); + }); + ASSERT_TRUE(renderList_->GetChildren().size() == 0); +} + +/** + * @tc.name: RenderListTest006 + * @tc.desc: Verify List ScrollTop Event can callback when event trigger. + * @tc.type: FUNC + * @tc.require: AR000DAR0K + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderListTest, RenderListTest006, TestSize.Level1) +{ + /** + * @tc.steps: step1. Create Event listener to receive ScrollTop event. + * @tc.expected: step1. Event listener create success. + */ + std::string scrollEventId = "list_scrolltop_id"; + index_ = 0; + RefPtr eventHander = AceType::MakeRefPtr( + [this, scrollEventId](const std::string& eventId, const std::string& param) { + std::string ret = std::string("\"scrolltop\",null"); + EXPECT_EQ(param, ret); + EXPECT_EQ(eventId, scrollEventId); + index_++; + }); + mockContext_->RegisterEventHandler(eventHander); + + /** + * @tc.steps: step2. Create RenderList and add 10 child by ROW_REVERSE Direction. + * @tc.expected: step2. Properties and children are calculated correctly. + */ + int32_t totalCount = 0; + RefPtr listComponent = AceType::MakeRefPtr(); + listComponent->SetDirection(FlexDirection::ROW); + listComponent->SetTotalCount(totalCount); + listComponent->SetOnRequestItem(EventMarker { "itemBuilder_ID" }); + ASSERT_TRUE(listComponent->GetDirection() == FlexDirection::ROW); + ASSERT_TRUE(listComponent->GetTotalCount() == totalCount); + renderList_->Update(listComponent); + renderList_->RegisterRequestItemsCallback([this](int32_t index, int32_t count) { + RefPtr node = ListTestUtils::CreateRenderItem(500.0, 600.0, mockContext_); + renderList_->AddListItem(2, node); + }); + ASSERT_TRUE(renderList_->GetChildren().size() == 0); +} + +/** + * @tc.name: RenderListTest007 + * @tc.desc: Verify List ScrollEnd Event can callback when event trigger. + * @tc.type: FUNC + * @tc.require: AR000DAR0M + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderListTest, RenderListTest007, TestSize.Level1) +{ + /** + * @tc.steps: step1. Create Event listener to receive ScrollEnd event. + * @tc.expected: step1. Event listener create success. + */ + std::string scrollEventId = "list_scrollend_id"; + index_ = 0; + RefPtr eventHander = AceType::MakeRefPtr( + [this, scrollEventId](const std::string& eventId, const std::string& param) { + std::string ret = std::string("\"scrollend\",null"); + EXPECT_EQ(param, ret); + EXPECT_EQ(eventId, scrollEventId); + index_++; + }); + mockContext_->RegisterEventHandler(eventHander); + + /** + * @tc.steps: step2. Create RenderList and add 10 child by COLUMN_REVERSE Direction. + * @tc.expected: step2. Properties and children are calculated correctly. + */ + int32_t totalCount = 0; + RefPtr listComponent = AceType::MakeRefPtr(); + listComponent->SetDirection(FlexDirection::COLUMN); + listComponent->SetTotalCount(totalCount); + listComponent->SetOnRequestItem(EventMarker { "itemBuilder_ID" }); + ASSERT_TRUE(listComponent->GetDirection() == FlexDirection::COLUMN); + ASSERT_TRUE(listComponent->GetTotalCount() == totalCount); + renderList_->Update(listComponent); + RefPtr node = ListTestUtils::CreateRenderItem(150.0, 500.0, mockContext_); + renderList_->AddListItem(100, node); + ASSERT_TRUE(renderList_->GetChildren().size() == 0); +} + +/** + * @tc.name: RenderListTest008 + * @tc.desc: Verify List ScrollTouchUp Event can callback when event trigger. + * @tc.type: FUNC + * @tc.require: AR000DAR0L + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderListTest, RenderListTest008, TestSize.Level1) +{ + /** + * @tc.steps: step1. Create Event listener to receive ScrollTouchUp event. + * @tc.expected: step1. Event listener create success. + */ + std::string scrollEventId = "list_scrolltouchup_id"; + index_ = 0; + RefPtr eventHander = AceType::MakeRefPtr( + [this, scrollEventId](const std::string& eventId, const std::string& param) { + std::string ret = std::string("\"scrolltouchup\",null"); + EXPECT_EQ(param, ret); + EXPECT_EQ(eventId, scrollEventId); + index_++; + }); + mockContext_->RegisterEventHandler(eventHander); + + /** + * @tc.steps: step2. Create RenderList and add 10 child by ROW Direction. + * @tc.expected: step2. Properties and children are calculated correctly. + */ + int32_t totalCount = -100; + RefPtr listComponent = AceType::MakeRefPtr(); + listComponent->SetDirection(FlexDirection::ROW); + listComponent->SetTotalCount(totalCount); + listComponent->SetOnRequestItem(EventMarker { "itemBuilder_ID" }); + ASSERT_TRUE(listComponent->GetDirection() == FlexDirection::ROW); + ASSERT_TRUE(listComponent->GetTotalCount() == 0); + renderList_->Update(listComponent); + renderList_->RegisterRequestItemsCallback([this](int32_t index, int32_t count) { + RefPtr node = ListTestUtils::CreateRenderItem(150.0, 150.0, mockContext_); + renderList_->AddListItem(-1, node); + }); + ASSERT_TRUE(renderList_->GetChildren().size() == 0); +} + +/** + * @tc.name: ScrollMotionTest001 + * @tc.desc: Verify scroll can calculate attributes with different edge effect. + * @tc.type: FUNC + * @tc.require: AR000DQ1UO AR000DQ1UP + * @tc.author: jinwuwen + */ +HWTEST_F(RenderListTest, ScrollMotionTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct ListComponent by column direction. + * @tc.expected: step1. properties are set correctly. + */ + int32_t totalCount = 6; + RefPtr listComponent = AceType::MakeRefPtr(); + listComponent->SetDirection(FlexDirection::COLUMN); + listComponent->SetTotalCount(totalCount); + listComponent->SetOnRequestItem(EventMarker { "itemBuilder_ID" }); + listComponent->SetPositionController(AceType::MakeRefPtr()); + RefPtr scrollEffect = AceType::MakeRefPtr(); + listComponent->SetScrollEffect(scrollEffect); + + /** + * @tc.steps: step2. trigger Update for render scroll. + * @tc.expected: step2. attribute set correct. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(100.0, 100.0)); + layoutParam.SetMaxSize(Size(900.0, 900.0)); + renderScroll_->AddChild(renderList_); + renderScroll_->Update(listComponent); + EXPECT_TRUE(renderScroll_->NeedLayout()); + renderScroll_->SetLayoutParam(layoutParam); + renderScroll_->PerformLayout(); + renderScroll_->JumpToPosition(-100.0); + EXPECT_EQ(0.0, renderScroll_->GetCurrentPosition()); +} + +/** + * @tc.name: ScrollMotionTest002 + * @tc.desc: Verify scroll can calculate attributes with different edge effect. + * @tc.type: FUNC + * @tc.require: AR000DQ1UO AR000DQ1UQ + * @tc.author: jinwuwen + */ +HWTEST_F(RenderListTest, ScrollMotionTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct ListComponent by column direction. + * @tc.expected: step1. properties are set correctly. + */ + int32_t totalCount = 6; + RefPtr listComponent = AceType::MakeRefPtr(); + listComponent->SetDirection(FlexDirection::COLUMN); + listComponent->SetTotalCount(totalCount); + listComponent->SetOnRequestItem(EventMarker { "itemBuilder_ID" }); + listComponent->SetPositionController(AceType::MakeRefPtr()); + RefPtr scrollEffect = + AceType::DynamicCast(AceType::MakeRefPtr(Color::RED)); + listComponent->SetScrollEffect(scrollEffect); + + /** + * @tc.steps: step2. construct RenderList with list component. + * @tc.expected: step2. properties are set correctly. + */ + renderList_->Update(listComponent); + renderList_->RegisterBuildItemCallback([this](int32_t index) -> bool { + RefPtr node = ListTestUtils::CreateRenderItem(500.0, 500.0, mockContext_); + renderList_->AddListItem(index, node); + return true; + }); + + /** + * @tc.steps: step3. trigger Update for render scroll. + * @tc.expected: step3. attribute set correct. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(100.0, 100.0)); + layoutParam.SetMaxSize(Size(900.0, 900.0)); + renderScroll_->AddChild(renderList_); + renderScroll_->Update(listComponent); + EXPECT_TRUE(renderScroll_->NeedLayout()); + renderScroll_->SetLayoutParam(layoutParam); + renderScroll_->PerformLayout(); + renderScroll_->JumpToPosition(-100.0); + EXPECT_EQ(-100.0, renderScroll_->GetOverScroll()); + EXPECT_EQ(0.0, renderScroll_->GetCurrentPosition()); + RefPtr fadeEffect = AceType::DynamicCast(renderScroll_->GetScrollEffect()); + EXPECT_TRUE(fadeEffect); + EXPECT_EQ(Color::RED, fadeEffect->GetFadeColor()); +} + +/** + * @tc.name: ScrollMotionTest003 + * @tc.desc: Verify scroll can calculate attributes with different edge effect. + * @tc.type: FUNC + * @tc.require: AR000DQ1UO AR000DQ1UQ + * @tc.author: jinwuwen + */ +HWTEST_F(RenderListTest, ScrollMotionTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct ListComponent by column direction. + * @tc.expected: step1. properties are set correctly. + */ + int32_t totalCount = 6; + RefPtr listComponent = AceType::MakeRefPtr(); + listComponent->SetDirection(FlexDirection::COLUMN); + listComponent->SetTotalCount(totalCount); + listComponent->SetOnRequestItem(EventMarker { "itemBuilder_ID" }); + listComponent->SetPositionController(AceType::MakeRefPtr()); + RefPtr scrollEffect = AceType::MakeRefPtr(EdgeEffect::NONE); + listComponent->SetScrollEffect(scrollEffect); + + /** + * @tc.steps: step2. construct RenderList with list component. + * @tc.expected: step2. properties are set correctly. + */ + renderList_->Update(listComponent); + renderList_->RegisterBuildItemCallback([this](int32_t index) -> bool { + RefPtr node = ListTestUtils::CreateRenderItem(500.0, 500.0, mockContext_); + renderList_->AddListItem(index, node); + return true; + }); + + /** + * @tc.steps: step3. trigger Update for render scroll. + * @tc.expected: step3. attribute set correct. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(100.0, 100.0)); + layoutParam.SetMaxSize(Size(900.0, 900.0)); + renderScroll_->AddChild(renderList_); + renderScroll_->Update(listComponent); + EXPECT_TRUE(renderScroll_->NeedLayout()); + renderScroll_->SetLayoutParam(layoutParam); + renderScroll_->PerformLayout(); + renderScroll_->JumpToPosition(-100.0); + EXPECT_EQ(0, renderScroll_->GetOverScroll()); + EXPECT_EQ(0.0, renderScroll_->GetCurrentPosition()); +} + +/** + * @tc.name: ScrollMotionTest004 + * @tc.desc: Verify scroll can calculate attributes with different edge effect. + * @tc.type: FUNC + * @tc.require: AR000DQ1UQ + * @tc.author: jinwuwen + */ +HWTEST_F(RenderListTest, ScrollMotionTest004, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct ListComponent by column direction. + * @tc.expected: step1. properties are set correctly. + */ + int32_t totalCount = 6; + RefPtr listComponent = AceType::MakeRefPtr(); + listComponent->SetDirection(FlexDirection::COLUMN); + listComponent->SetTotalCount(totalCount); + listComponent->SetOnRequestItem(EventMarker { "itemBuilder_ID" }); + listComponent->SetPositionController(AceType::MakeRefPtr()); + RefPtr scrollEffect = + AceType::DynamicCast(AceType::MakeRefPtr(Color::BLUE)); + listComponent->SetScrollEffect(scrollEffect); + + /** + * @tc.steps: step2. trigger Update for render scroll. + * @tc.expected: step2. fade color set correct. + */ + renderScroll_->AddChild(renderList_); + renderScroll_->Update(listComponent); + RefPtr fadeEffect = AceType::DynamicCast(renderScroll_->GetScrollEffect()); + EXPECT_TRUE(fadeEffect); + EXPECT_EQ(Color::BLUE, fadeEffect->GetFadeColor()); +} + +/** + * @tc.name: RenderListItemExtentTest001 + * @tc.desc: Verify List PerformLayout can calculate children with row direction. + * @tc.type: FUNC + * @tc.require: AR000DQ1UC + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderListTest, RenderListItemExtentTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct ListComponent by row direction. + * @tc.expected: step1. properties are set correctly. + */ + int32_t totalCount = 8; + RefPtr listComponent = AceType::MakeRefPtr(); + listComponent->SetDirection(FlexDirection::ROW); + listComponent->SetFlexAlign(FlexAlign::CENTER); + listComponent->SetTotalCount(totalCount); + listComponent->SetOnRequestItem(EventMarker { "itemBuilder_ID" }); + listComponent->SetItemExtent(Dimension(250.0, DimensionUnit::PX)); + ASSERT_TRUE(listComponent->GetDirection() == FlexDirection::ROW); + ASSERT_TRUE(listComponent->GetTotalCount() == totalCount); + + /** + * @tc.steps: step2. construct RenderList with list component. + * @tc.expected: step2. properties are set correctly. + */ + renderList_->Update(listComponent); + renderList_->RegisterBuildItemCallback([this](int32_t index) -> bool { + RefPtr node = ListTestUtils::CreateRenderItem(300.0, 300.0, mockContext_); + renderList_->AddListItem(index, node); + return true; + }); + + /** + * @tc.steps: step3. trigger layout for render list. + * @tc.expected: step3. List and children layout correct. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(1000.0, 1000.0)); + renderList_->SetLayoutParam(layoutParam); + renderList_->ResetLayoutRange(0.0, 1000.0, Offset(0.0, 0.0), Size(1000.0, 1000.0)); + renderList_->PerformLayout(); + int32_t index = 0; + for (auto iter : renderList_->GetItems()) { + ASSERT_TRUE(iter.second->GetLayoutSize() == Size(250.0, 300.0)); + ASSERT_TRUE(iter.second->GetPosition() == Offset(250.0 * index, 350.0)); + index++; + } +} + +/** + * @tc.name: RenderListItemExtentTest002 + * @tc.desc: Verify List PerformLayout can calculate children with row direction. + * @tc.type: FUNC + * @tc.require: AR000DQ1UC + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderListTest, RenderListItemExtentTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct ListComponent by column direction. + * @tc.expected: step1. properties are set correctly. + */ + int32_t totalCount = 10; + RefPtr listComponent = AceType::MakeRefPtr(); + listComponent->SetDirection(FlexDirection::COLUMN); + listComponent->SetFlexAlign(FlexAlign::FLEX_END); + listComponent->SetTotalCount(totalCount); + listComponent->SetOnRequestItem(EventMarker { "itemBuilder_ID" }); + listComponent->SetItemExtent(Dimension(0.5, DimensionUnit::PERCENT)); + ASSERT_TRUE(listComponent->GetDirection() == FlexDirection::COLUMN); + ASSERT_TRUE(listComponent->GetTotalCount() == totalCount); + + /** + * @tc.steps: step2. construct RenderList with list component. + * @tc.expected: step2. properties are set correctly. + */ + renderList_->Update(listComponent); + renderList_->RegisterBuildItemCallback([this](int32_t index) -> bool { + RefPtr node = ListTestUtils::CreateRenderItem(300.0, 300.0, mockContext_); + renderList_->AddListItem(index, node); + return true; + }); + + /** + * @tc.steps: step3. trigger layout for render list. + * @tc.expected: step3. List and children layout correct. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(1000.0, 1000.0)); + renderList_->ResetLayoutRange(0.0, 1000.0, Offset(0.0, 0.0), Size(1000.0, 1000.0)); + renderList_->SetLayoutParam(layoutParam); + renderList_->PerformLayout(); + int32_t index = 0; + for (auto iter : renderList_->GetItems()) { + ASSERT_TRUE(iter.second->GetLayoutSize() == Size(300.0, 500.0)); + ASSERT_TRUE(iter.second->GetPosition() == Offset(700.0, 500.0 * index)); + index++; + } +} + +/** + * @tc.name: RenderListItemExtentTest003 + * @tc.desc: Verify List PerformLayout can calculate children with row direction. + * @tc.type: FUNC + * @tc.require: AR000DQ1UC + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderListTest, RenderListItemExtentTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct ListComponent by row direction. + * @tc.expected: step1. properties are set correctly. + */ + int32_t totalCount = 8; + RefPtr listComponent = AceType::MakeRefPtr(); + listComponent->SetDirection(FlexDirection::ROW); + listComponent->SetFlexAlign(FlexAlign::FLEX_START); + listComponent->SetTotalCount(totalCount); + listComponent->SetColumnCount(2); + listComponent->SetOnRequestItem(EventMarker { "itemBuilder_ID" }); + listComponent->SetItemExtent(Dimension(150.0, DimensionUnit::PX)); + ASSERT_TRUE(listComponent->GetDirection() == FlexDirection::ROW); + ASSERT_TRUE(listComponent->GetTotalCount() == totalCount); + ASSERT_TRUE(listComponent->GetColumnCount() == 2); + + /** + * @tc.steps: step2. construct RenderList with list component. + * @tc.expected: step2. properties are set correctly. + */ + renderList_->Update(listComponent); + renderList_->RegisterBuildItemCallback([this](int32_t index) -> bool { + RefPtr node = ListTestUtils::CreateRenderItem(300.0, 300.0, mockContext_); + renderList_->AddListItem(index, node); + return true; + }); + + /** + * @tc.steps: step3. trigger layout for render list. + * @tc.expected: step3. List and children layout correct. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(1000.0, 1000.0)); + renderList_->SetLayoutParam(layoutParam); + renderList_->ResetLayoutRange(0.0, 1000.0, Offset(0.0, 0.0), Size(1000.0, 1000.0)); + renderList_->PerformLayout(); + int32_t index = 0; + for (auto iter : renderList_->GetItems()) { + ASSERT_TRUE(iter.second->GetLayoutSize() == Size(150.0, 300.0)); + ASSERT_TRUE(iter.second->GetPosition() == Offset(150.0 * (index / 2), 500 * (index % 2))); + index++; + } +} + +/** + * @tc.name: RenderListItemExtentTest004 + * @tc.desc: Verify List PerformLayout can calculate children with row direction. + * @tc.type: FUNC + * @tc.require: AR000DQ1UC + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderListTest, RenderListItemExtentTest004, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct ListComponent by column direction. + * @tc.expected: step1. properties are set correctly. + */ + int32_t totalCount = 10; + RefPtr listComponent = AceType::MakeRefPtr(); + listComponent->SetDirection(FlexDirection::COLUMN); + listComponent->SetFlexAlign(FlexAlign::STRETCH); + listComponent->SetTotalCount(totalCount); + listComponent->SetColumnCount(4); + listComponent->SetOnRequestItem(EventMarker { "itemBuilder_ID" }); + listComponent->SetItemExtent(Dimension(0.4, DimensionUnit::PERCENT)); + ASSERT_TRUE(listComponent->GetDirection() == FlexDirection::COLUMN); + ASSERT_TRUE(listComponent->GetTotalCount() == totalCount); + ASSERT_TRUE(listComponent->GetColumnCount() == 4); + + /** + * @tc.steps: step2. construct RenderList with list component. + * @tc.expected: step2. properties are set correctly. + */ + renderList_->Update(listComponent); + renderList_->RegisterBuildItemCallback([this](int32_t index) -> bool { + RefPtr node = ListTestUtils::CreateRenderItem(100.0, 200.0, mockContext_); + renderList_->AddListItem(index, node); + return true; + }); + + /** + * @tc.steps: step3. trigger layout for render list. + * @tc.expected: step3. List and children layout correct. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(1000.0, 1000.0)); + renderList_->ResetLayoutRange(0.0, 1000.0, Offset(0.0, 0.0), Size(1000.0, 1000.0)); + renderList_->SetLayoutParam(layoutParam); + renderList_->PerformLayout(); + int32_t index = 0; + for (auto iter : renderList_->GetItems()) { + ASSERT_TRUE(iter.second->GetLayoutSize() == Size(250.0, 400.0)); + ASSERT_TRUE(iter.second->GetPosition() == Offset(250.0 * (index % 4), 400.0 * (index / 4))); + index++; + } +} + +/** + * @tc.name: ListInteractionTest001 + * @tc.desc: Verify list interaction effect when item clicked on phone. + * @tc.type: FUNC + * @tc.require: AR000DQ4FT + * @tc.author: jinwuwen + */ +HWTEST_F(RenderListTest, ListInteractionTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct ListComponent by column direction. + * @tc.expected: step1. properties are set correctly. + */ + RefPtr listComponent = AceType::MakeRefPtr(); + listComponent->SetDirection(FlexDirection::COLUMN); + listComponent->SetTotalCount(5); + listComponent->SetOnRequestItem(EventMarker { "itemBuilder_ID" }); + + /** + * @tc.steps: step2. construct RenderList with list component. + * @tc.expected: step2. properties are set correctly. + */ + renderList_->Update(listComponent); + renderList_->RegisterBuildItemCallback([this](int32_t index) -> bool { + RefPtr node = ListTestUtils::CreateRenderItem(300.0, 300.0, mockContext_); + renderList_->AddListItem(index, node); + return true; + }); + + /** + * @tc.steps: step3. trigger layout for render list. + * @tc.expected: step3. List and children layout correct. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(1000.0, 1000.0)); + renderList_->ResetLayoutRange(0.0, 1000.0, Offset(0.0, 0.0), Size(1000.0, 1000.0)); + renderList_->SetLayoutParam(layoutParam); + renderList_->PerformLayout(); + + RefPtr listItem = AceType::DynamicCast(renderList_->GetItemByIndex(0)); + if (listItem) { + listItem->ResetFocusEffect(AceType::WeakClaim(Referenced::RawPtr(mockContext_))); + listItem->PlayPressDownAnimation(); + auto controller = listItem->GetEffectController(); + ASSERT_FALSE(controller == nullptr); + auto animator = controller->GetAnimator(); + ASSERT_FALSE(animator == nullptr); + animator->TriggerFrame(17); + auto alpha01 = controller->GetAlpha(); + animator->TriggerFrame(57); + auto alpha02 = controller->GetAlpha(); + ASSERT_FALSE(NearEqual(alpha02, alpha01)); + } +} + +/** + * @tc.name: ListInteractionTest002 + * @tc.desc: Verify list interaction effect when on TV. + * @tc.type: FUNC + * @tc.require: AR000DQ4FU + * @tc.author: jinwuwen + */ +HWTEST_F(RenderListTest, ListInteractionTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct ListComponent by column direction. + * @tc.expected: step1. properties are set correctly. + */ + RefPtr listComponent = AceType::MakeRefPtr(); + listComponent->SetDirection(FlexDirection::COLUMN); + listComponent->SetTotalCount(5); + listComponent->SetOnRequestItem(EventMarker { "itemBuilder_ID" }); + + /** + * @tc.steps: step2. construct RenderList with list component. + * @tc.expected: step2. properties are set correctly. + */ + renderList_->Update(listComponent); + renderList_->RegisterBuildItemCallback([this](int32_t index) -> bool { + RefPtr node = ListTestUtils::CreateRenderItem(300.0, 300.0, mockContext_); + renderList_->AddListItem(index, node); + return true; + }); + + /** + * @tc.steps: step3. trigger layout for render list. + * @tc.expected: step3. List and children layout correct. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(1000.0, 1000.0)); + renderList_->ResetLayoutRange(0.0, 1000.0, Offset(0.0, 0.0), Size(1000.0, 1000.0)); + renderList_->SetLayoutParam(layoutParam); + renderList_->PerformLayout(); + + if (renderList_->IsTV()) { + RefPtr listItem = AceType::DynamicCast(renderList_->GetItemByIndex(0)); + if (listItem) { + listItem->ResetFocusEffect(AceType::WeakClaim(Referenced::RawPtr(mockContext_))); + listItem->HandleClicked(); + auto controller = listItem->GetEffectController(); + auto specialController = AceType::DynamicCast(controller); + ASSERT_FALSE(specialController == nullptr); + } + } +} + +/** + * @tc.name: ListInteractionTest003 + * @tc.desc: Verify list interaction effect when on watch. + * @tc.type: FUNC + * @tc.require: AR000DQ4FV + * @tc.author: jinwuwen + */ +HWTEST_F(RenderListTest, ListInteractionTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct ListComponent by column direction. + * @tc.expected: step1. properties are set correctly. + */ + RefPtr listComponent = AceType::MakeRefPtr(); + listComponent->SetDirection(FlexDirection::COLUMN); + listComponent->SetTotalCount(5); + listComponent->SetOnRequestItem(EventMarker { "itemBuilder_ID" }); + + /** + * @tc.steps: step2. construct RenderList with list component. + * @tc.expected: step2. properties are set correctly. + */ + renderList_->Update(listComponent); + renderList_->RegisterBuildItemCallback([this](int32_t index) -> bool { + RefPtr node = ListTestUtils::CreateRenderItem(300.0, 300.0, mockContext_); + renderList_->AddListItem(index, node); + return true; + }); + + /** + * @tc.steps: step3. trigger layout for render list. + * @tc.expected: step3. List and children layout correct. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(1000.0, 1000.0)); + renderList_->ResetLayoutRange(0.0, 1000.0, Offset(0.0, 0.0), Size(1000.0, 1000.0)); + renderList_->SetLayoutParam(layoutParam); + renderList_->PerformLayout(); + + if (renderList_->IsWatch()) { + RefPtr listItem = AceType::DynamicCast(renderList_->GetItemByIndex(0)); + if (listItem) { + listItem->ResetFocusEffect(AceType::WeakClaim(Referenced::RawPtr(mockContext_))); + listItem->HandleClicked(); + auto controller = listItem->GetEffectController(); + auto specialController = AceType::DynamicCast(controller); + ASSERT_FALSE(specialController == nullptr); + } + } +} + +/** + * @tc.name: ListItemFocusTest001 + * @tc.desc: Verify list item effect when focus switch. + * @tc.type: FUNC + * @tc.require: AR000DQ1T7 + * @tc.author: jinwuwen + */ +HWTEST_F(RenderListTest, ListItemFocusTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct ListComponent by column direction. + * @tc.expected: step1. properties are set correctly. + */ + RefPtr listComponent = AceType::MakeRefPtr(); + listComponent->SetDirection(FlexDirection::COLUMN); + listComponent->SetTotalCount(5); + listComponent->SetOnRequestItem(EventMarker { "itemBuilder_ID" }); + + /** + * @tc.steps: step2. construct RenderList with list component. + * @tc.expected: step2. properties are set correctly. + */ + renderList_->Update(listComponent); + renderList_->RegisterBuildItemCallback([this](int32_t index) -> bool { + RefPtr node = ListTestUtils::CreateRenderItem(300.0, 300.0, mockContext_); + renderList_->AddListItem(index, node); + return true; + }); + + /** + * @tc.steps: step3. trigger layout for render list. + * @tc.expected: step3. List and children layout correct. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(1000.0, 1000.0)); + renderList_->ResetLayoutRange(0.0, 1000.0, Offset(0.0, 0.0), Size(1000.0, 1000.0)); + renderList_->SetLayoutParam(layoutParam); + renderList_->PerformLayout(); + + if (renderList_->IsTV()) { + RefPtr listItem = AceType::DynamicCast(renderList_->GetItemByIndex(0)); + if (listItem) { + listItem->ResetFocusEffect(AceType::WeakClaim(Referenced::RawPtr(mockContext_))); + listItem->HandleFocusEvent(true); + auto controller = listItem->GetEffectController(); + ASSERT_FALSE(controller == nullptr); + + auto animator = controller->GetAnimator(); + ASSERT_FALSE(animator == nullptr); + + animator->TriggerFrame(17); + auto scale01 = controller->GetScale(); + animator->TriggerFrame(32); + auto scale02 = controller->GetScale(); + ASSERT_TRUE(scale02 > scale01); + ASSERT_FALSE(NearEqual(controller->GetScale(), 1.0)); + } + } +} + +/** + * @tc.name: ListItemFocusTest002 + * @tc.desc: Verify list item effect when focus switch. + * @tc.type: FUNC + * @tc.require: AR000DQ1T8 + * @tc.author: jinwuwen + */ +HWTEST_F(RenderListTest, ListItemFocusTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct ListComponent by column direction. + * @tc.expected: step1. properties are set correctly. + */ + RefPtr listComponent = AceType::MakeRefPtr(); + listComponent->SetDirection(FlexDirection::COLUMN); + listComponent->SetTotalCount(5); + listComponent->SetOnRequestItem(EventMarker { "itemBuilder_ID" }); + + /** + * @tc.steps: step2. construct RenderList with list component. + * @tc.expected: step2. properties are set correctly. + */ + renderList_->Update(listComponent); + renderList_->RegisterBuildItemCallback([this](int32_t index) -> bool { + RefPtr node = ListTestUtils::CreateRenderItem(300.0, 300.0, mockContext_); + renderList_->AddListItem(index, node); + return true; + }); + + /** + * @tc.steps: step3. trigger layout for render list. + * @tc.expected: step3. List and children layout correct. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(1000.0, 1000.0)); + renderList_->ResetLayoutRange(0.0, 1000.0, Offset(0.0, 0.0), Size(1000.0, 1000.0)); + renderList_->SetLayoutParam(layoutParam); + renderList_->PerformLayout(); + + if (renderList_->IsTV()) { + RefPtr listItem = AceType::DynamicCast(renderList_->GetItemByIndex(0)); + if (listItem) { + listItem->ResetFocusEffect(AceType::WeakClaim(Referenced::RawPtr(mockContext_))); + auto controller = listItem->GetEffectController(); + ASSERT_FALSE(controller == nullptr); + + auto animator = controller->GetAnimator(); + ASSERT_FALSE(animator == nullptr); + + controller->SetScale(1.05); + listItem->HandleFocusEvent(false); + animator->TriggerFrame(16); + auto scale01 = controller->GetScale(); + animator->TriggerFrame(32); + auto scale02 = controller->GetScale(); + ASSERT_TRUE(scale02 < scale01); + ASSERT_FALSE(NearEqual(controller->GetScale(), 1.0)); + } + } +} + +/** + * @tc.name: ListItemFocusTest003 + * @tc.desc: Verify list item effect when item clicked. + * @tc.type: FUNC + * @tc.require: AR000DQ1T6 + * @tc.author: jinwuwen + */ +HWTEST_F(RenderListTest, ListItemFocusTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct ListComponent by column direction. + * @tc.expected: step1. properties are set correctly. + */ + RefPtr listComponent = AceType::MakeRefPtr(); + listComponent->SetDirection(FlexDirection::COLUMN); + listComponent->SetTotalCount(5); + listComponent->SetOnRequestItem(EventMarker { "itemBuilder_ID" }); + + /** + * @tc.steps: step2. construct RenderList with list component. + * @tc.expected: step2. properties are set correctly. + */ + renderList_->Update(listComponent); + renderList_->RegisterBuildItemCallback([this](int32_t index) -> bool { + RefPtr node = ListTestUtils::CreateRenderItem(300.0, 300.0, mockContext_); + renderList_->AddListItem(index, node); + return true; + }); + + /** + * @tc.steps: step3. trigger layout for render list. + * @tc.expected: step3. List and children layout correct. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(1000.0, 1000.0)); + renderList_->ResetLayoutRange(0.0, 1000.0, Offset(0.0, 0.0), Size(1000.0, 1000.0)); + renderList_->SetLayoutParam(layoutParam); + renderList_->PerformLayout(); + + if (!renderList_->IsTV()) { + RefPtr listItem = AceType::DynamicCast(renderList_->GetItemByIndex(0)); + if (listItem) { + listItem->ResetFocusEffect(AceType::WeakClaim(Referenced::RawPtr(mockContext_))); + + listItem->HandleClicked(); + auto controller = listItem->GetEffectController(); + ASSERT_FALSE(controller == nullptr); + + auto animator = controller->GetAnimator(); + ASSERT_FALSE(animator == nullptr); + } + } +} + +/** + * @tc.name: RenderListFocusMoveTest001 + * @tc.desc: Verify List can move focus when single column and Direction::ROW. + * @tc.type: FUNC + * @tc.require: AR000DQ1UC + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderListTest, RenderListFocusMoveTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct ListComponent by row direction. + * @tc.expected: step1. properties are set correctly. + */ + int32_t totalCount = 8; + RefPtr listComponent = AceType::MakeRefPtr(); + listComponent->SetDirection(FlexDirection::ROW); + listComponent->SetTotalCount(totalCount); + listComponent->SetColumnCount(1); + listComponent->SetOnRequestItem(EventMarker { "itemBuilder_ID" }); + ASSERT_TRUE(listComponent->GetDirection() == FlexDirection::ROW); + ASSERT_TRUE(listComponent->GetTotalCount() == totalCount); + ASSERT_TRUE(listComponent->GetColumnCount() == 1); + + /** + * @tc.steps: step2. construct RenderList with list component. + * @tc.expected: step2. properties are set correctly. + */ + renderList_->Update(listComponent); + renderList_->RegisterBuildItemCallback([this](int32_t index) -> bool { + RefPtr node = ListTestUtils::CreateRenderItem(200.0, 300.0, mockContext_); + renderList_->AddListItem(index, node); + return true; + }); + + /** + * @tc.steps: step3. trigger layout for render list. + * @tc.expected: step3. List and children layout correct. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(600.0, 300.0)); + renderList_->SetLayoutParam(layoutParam); + renderList_->ResetLayoutRange(0.0, 600.0, Offset(0.0, 0.0), Size(600.0, 300.0)); + renderList_->PerformLayout(); + + /** + * @tc.steps: step4. trigger focus move for render list. + * @tc.expected: step4. Focus move correct. + */ + ASSERT_TRUE(renderList_->RequestNextFocus(false, false) == 1); // RIGHT + renderList_->ListItemFocused(1); + ASSERT_TRUE(renderList_->RequestNextFocus(false, false) == 2); // RIGHT + renderList_->ListItemFocused(2); + ASSERT_TRUE(renderList_->RequestNextFocus(false, true) == 1); // LEFT + renderList_->ListItemFocused(1); + ASSERT_TRUE(renderList_->RequestNextFocus(true, false) == -1); // DOWN + ASSERT_TRUE(renderList_->RequestNextFocus(true, true) == -1); // UP + ASSERT_TRUE(renderList_->RequestNextFocus(false, true) == 0); // LEFT + renderList_->ListItemFocused(0); +} + +/** + * @tc.name: RenderListFocusMoveTest002 + * @tc.desc: Verify List can move focus when single column and Direction::ROW and RTL. + * @tc.type: FUNC + * @tc.require: AR000DQ1UC + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderListTest, RenderListFocusMoveTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct ListComponent by row direction and RTL. + * @tc.expected: step1. properties are set correctly. + */ + int32_t totalCount = 8; + RefPtr listComponent = AceType::MakeRefPtr(); + listComponent->SetDirection(FlexDirection::ROW); + listComponent->SetTotalCount(totalCount); + listComponent->SetRightToLeft(true); + listComponent->SetOnRequestItem(EventMarker { "itemBuilder_ID" }); + ASSERT_TRUE(listComponent->GetDirection() == FlexDirection::ROW); + ASSERT_TRUE(listComponent->GetTotalCount() == totalCount); + ASSERT_TRUE(listComponent->GetRightToLeft()); + + /** + * @tc.steps: step2. construct RenderList with list component. + * @tc.expected: step2. properties are set correctly. + */ + renderList_->Update(listComponent); + renderList_->RegisterBuildItemCallback([this](int32_t index) -> bool { + RefPtr node = ListTestUtils::CreateRenderItem(200.0, 300.0, mockContext_); + renderList_->AddListItem(index, node); + return true; + }); + + /** + * @tc.steps: step3. trigger layout for render list. + * @tc.expected: step3. List and children layout correct. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(600.0, 300.0)); + renderList_->SetLayoutParam(layoutParam); + renderList_->ResetLayoutRange(0.0, 600.0, Offset(0.0, 0.0), Size(600.0, 300.0)); + renderList_->PerformLayout(); + + /** + * @tc.steps: step4. trigger focus move for render list. + * @tc.expected: step4. Focus move correct. + */ + ASSERT_TRUE(renderList_->RequestNextFocus(false, true) == 1); // LEFT + renderList_->ListItemFocused(1); + ASSERT_TRUE(renderList_->RequestNextFocus(false, true) == 2); // LEFT + renderList_->ListItemFocused(2); + ASSERT_TRUE(renderList_->RequestNextFocus(false, false) == 1); // RIGHT + renderList_->ListItemFocused(1); + ASSERT_TRUE(renderList_->RequestNextFocus(true, false) == -1); // DOWN + ASSERT_TRUE(renderList_->RequestNextFocus(true, true) == -1); // UP + ASSERT_TRUE(renderList_->RequestNextFocus(false, false) == 0); // RIGHT + renderList_->ListItemFocused(0); +} + +/** + * @tc.name: RenderListFocusMoveTest003 + * @tc.desc: Verify List can move focus when single column and Direction::COLUMN. + * @tc.type: FUNC + * @tc.require: AR000DQ1UC + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderListTest, RenderListFocusMoveTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct ListComponent by column direction. + * @tc.expected: step1. properties are set correctly. + */ + int32_t totalCount = 8; + RefPtr listComponent = AceType::MakeRefPtr(); + listComponent->SetDirection(FlexDirection::COLUMN); + listComponent->SetTotalCount(totalCount); + listComponent->SetOnRequestItem(EventMarker { "itemBuilder_ID" }); + ASSERT_TRUE(listComponent->GetDirection() == FlexDirection::COLUMN); + ASSERT_TRUE(listComponent->GetTotalCount() == totalCount); + + /** + * @tc.steps: step2. construct RenderList with list component. + * @tc.expected: step2. properties are set correctly. + */ + renderList_->Update(listComponent); + renderList_->RegisterBuildItemCallback([this](int32_t index) -> bool { + RefPtr node = ListTestUtils::CreateRenderItem(300.0, 200.0, mockContext_); + renderList_->AddListItem(index, node); + return true; + }); + + /** + * @tc.steps: step3. trigger layout for render list. + * @tc.expected: step3. List and children layout correct. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(300.0, 600.0)); + renderList_->SetLayoutParam(layoutParam); + renderList_->ResetLayoutRange(0.0, 600.0, Offset(0.0, 0.0), Size(300.0, 600.0)); + renderList_->PerformLayout(); + + /** + * @tc.steps: step4. trigger focus move for render list. + * @tc.expected: step4. Focus move correct. + */ + ASSERT_TRUE(renderList_->RequestNextFocus(true, false) == 1); // DOWN + renderList_->ListItemFocused(1); + ASSERT_TRUE(renderList_->RequestNextFocus(true, false) == 2); // DOWN + renderList_->ListItemFocused(2); + ASSERT_TRUE(renderList_->RequestNextFocus(true, true) == 1); // UP + renderList_->ListItemFocused(1); + ASSERT_TRUE(renderList_->RequestNextFocus(false, false) == -1); // RIGHT + ASSERT_TRUE(renderList_->RequestNextFocus(false, true) == -1); // LEFT + ASSERT_TRUE(renderList_->RequestNextFocus(true, true) == 0); // UP + renderList_->ListItemFocused(0); +} + +/** + * @tc.name: RenderListFocusMoveTest004 + * @tc.desc: Verify List can move focus when multi columns and Direction::ROW. + * @tc.type: FUNC + * @tc.require: AR000DQ1UC + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderListTest, RenderListFocusMoveTest004, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct ListComponent by row direction. + * @tc.expected: step1. properties are set correctly. + */ + int32_t totalCount = 8; + RefPtr listComponent = AceType::MakeRefPtr(); + listComponent->SetDirection(FlexDirection::ROW); + listComponent->SetTotalCount(totalCount); + listComponent->SetColumnCount(2); + listComponent->SetOnRequestItem(EventMarker { "itemBuilder_ID" }); + ASSERT_TRUE(listComponent->GetDirection() == FlexDirection::ROW); + ASSERT_TRUE(listComponent->GetTotalCount() == totalCount); + ASSERT_TRUE(listComponent->GetColumnCount() == 2); + + /** + * @tc.steps: step2. construct RenderList with list component. + * @tc.expected: step2. properties are set correctly. + */ + renderList_->Update(listComponent); + renderList_->RegisterBuildItemCallback([this](int32_t index) -> bool { + RefPtr node = ListTestUtils::CreateRenderItem(200.0, 300.0, mockContext_); + renderList_->AddListItem(index, node); + return true; + }); + + /** + * @tc.steps: step3. trigger layout for render list. + * @tc.expected: step3. List and children layout correct. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(600.0, 600.0)); + renderList_->SetLayoutParam(layoutParam); + renderList_->ResetLayoutRange(0.0, 600.0, Offset(0.0, 0.0), Size(600.0, 600.0)); + renderList_->PerformLayout(); + + /** + * @tc.steps: step4. trigger focus move for render list. + * @tc.expected: step4. Focus move correct. + */ + ASSERT_TRUE(renderList_->RequestNextFocus(false, false) == 2); // RIGHT + renderList_->ListItemFocused(2); + ASSERT_TRUE(renderList_->RequestNextFocus(false, false) == 4); // RIGHT + renderList_->ListItemFocused(4); + ASSERT_TRUE(renderList_->RequestNextFocus(true, false) == 5); // DOWN + renderList_->ListItemFocused(5); + ASSERT_TRUE(renderList_->RequestNextFocus(false, true) == 3); // LEFT + renderList_->ListItemFocused(3); + ASSERT_TRUE(renderList_->RequestNextFocus(false, true) == 1); // LEFT + renderList_->ListItemFocused(1); + ASSERT_TRUE(renderList_->RequestNextFocus(true, false) == -1); // DOWN + ASSERT_TRUE(renderList_->RequestNextFocus(true, true) == 0); // UP + renderList_->ListItemFocused(0); +} + +/** + * @tc.name: RenderListFocusMoveTest005 + * @tc.desc: Verify List can move focus when multi columns and Direction::ROW and RTL. + * @tc.type: FUNC + * @tc.require: AR000DQ1UC + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderListTest, RenderListFocusMoveTest005, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct ListComponent by row direction and RTL. + * @tc.expected: step1. properties are set correctly. + */ + int32_t totalCount = 8; + RefPtr listComponent = AceType::MakeRefPtr(); + listComponent->SetDirection(FlexDirection::ROW); + listComponent->SetTotalCount(totalCount); + listComponent->SetColumnCount(2); + listComponent->SetRightToLeft(true); + listComponent->SetOnRequestItem(EventMarker { "itemBuilder_ID" }); + ASSERT_TRUE(listComponent->GetDirection() == FlexDirection::ROW); + ASSERT_TRUE(listComponent->GetTotalCount() == totalCount); + ASSERT_TRUE(listComponent->GetColumnCount() == 2); + ASSERT_TRUE(listComponent->GetRightToLeft()); + + /** + * @tc.steps: step2. construct RenderList with list component. + * @tc.expected: step2. properties are set correctly. + */ + renderList_->Update(listComponent); + renderList_->RegisterBuildItemCallback([this](int32_t index) -> bool { + RefPtr node = ListTestUtils::CreateRenderItem(200.0, 300.0, mockContext_); + renderList_->AddListItem(index, node); + return true; + }); + + /** + * @tc.steps: step3. trigger layout for render list. + * @tc.expected: step3. List and children layout correct. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(600.0, 600.0)); + renderList_->SetLayoutParam(layoutParam); + renderList_->ResetLayoutRange(0.0, 600.0, Offset(0.0, 0.0), Size(600.0, 600.0)); + renderList_->PerformLayout(); + + /** + * @tc.steps: step4. trigger focus move for render list. + * @tc.expected: step4. Focus move correct. + */ + ASSERT_TRUE(renderList_->RequestNextFocus(false, true) == 2); // LEFT + renderList_->ListItemFocused(2); + ASSERT_TRUE(renderList_->RequestNextFocus(false, true) == 4); // LEFT + renderList_->ListItemFocused(4); + ASSERT_TRUE(renderList_->RequestNextFocus(true, false) == 5); // DOWN + renderList_->ListItemFocused(5); + ASSERT_TRUE(renderList_->RequestNextFocus(false, false) == 3); // RIGHT + renderList_->ListItemFocused(3); + ASSERT_TRUE(renderList_->RequestNextFocus(false, false) == 1); // RIGHT + renderList_->ListItemFocused(1); + ASSERT_TRUE(renderList_->RequestNextFocus(true, false) == -1); // DOWN + ASSERT_TRUE(renderList_->RequestNextFocus(true, true) == 0); // UP + renderList_->ListItemFocused(0); +} + +/** + * @tc.name: RenderListFocusMoveTest006 + * @tc.desc: Verify List can move focus when multi columns and Direction::COLUMN. + * @tc.type: FUNC + * @tc.require: AR000DQ1UC + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderListTest, RenderListFocusMoveTest006, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct ListComponent by column direction. + * @tc.expected: step1. properties are set correctly. + */ + int32_t totalCount = 6; + RefPtr listComponent = AceType::MakeRefPtr(); + listComponent->SetDirection(FlexDirection::COLUMN); + listComponent->SetTotalCount(totalCount); + listComponent->SetColumnCount(2); + listComponent->SetOnRequestItem(EventMarker { "itemBuilder_ID" }); + ASSERT_TRUE(listComponent->GetDirection() == FlexDirection::COLUMN); + ASSERT_TRUE(listComponent->GetTotalCount() == totalCount); + ASSERT_TRUE(listComponent->GetColumnCount() == 2); + + /** + * @tc.steps: step2. construct RenderList with list component. + * @tc.expected: step2. properties are set correctly. + */ + renderList_->Update(listComponent); + renderList_->RegisterBuildItemCallback([this](int32_t index) -> bool { + RefPtr node = ListTestUtils::CreateRenderItem(300.0, 200.0, mockContext_); + renderList_->AddListItem(index, node); + return true; + }); + + /** + * @tc.steps: step3. trigger layout for render list. + * @tc.expected: step3. List and children layout correct. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(600.0, 600.0)); + renderList_->SetLayoutParam(layoutParam); + renderList_->ResetLayoutRange(0.0, 600.0, Offset(0.0, 0.0), Size(600.0, 600.0)); + renderList_->PerformLayout(); + + /** + * @tc.steps: step4. trigger focus move for render list. + * @tc.expected: step4. Focus move correct. + */ + ASSERT_TRUE(renderList_->RequestNextFocus(true, false) == 2); // DOWN + renderList_->ListItemFocused(2); + ASSERT_TRUE(renderList_->RequestNextFocus(true, false) == 4); // DOWN + renderList_->ListItemFocused(4); + ASSERT_TRUE(renderList_->RequestNextFocus(false, false) == 5); // RIGHT + renderList_->ListItemFocused(5); + ASSERT_TRUE(renderList_->RequestNextFocus(true, true) == 3); // UP + renderList_->ListItemFocused(3); + ASSERT_TRUE(renderList_->RequestNextFocus(true, true) == 1); // UP + renderList_->ListItemFocused(1); + ASSERT_TRUE(renderList_->RequestNextFocus(false, false) == -1); // RIGHT + ASSERT_TRUE(renderList_->RequestNextFocus(false, true) == 0); // LEFT + renderList_->ListItemFocused(0); +} + +/** + * @tc.name: RenderListFocusMoveTest007 + * @tc.desc: Verify List can move focus when multi columns and Direction::COLUMN and RTL. + * @tc.type: FUNC + * @tc.require: AR000DQ1UC + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderListTest, RenderListFocusMoveTest007, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct ListComponent by column direction and RTL. + * @tc.expected: step1. properties are set correctly. + */ + int32_t totalCount = 6; + RefPtr listComponent = AceType::MakeRefPtr(); + listComponent->SetDirection(FlexDirection::COLUMN); + listComponent->SetTotalCount(totalCount); + listComponent->SetRightToLeft(true); + listComponent->SetColumnCount(2); + listComponent->SetOnRequestItem(EventMarker { "itemBuilder_ID" }); + ASSERT_TRUE(listComponent->GetDirection() == FlexDirection::COLUMN); + ASSERT_TRUE(listComponent->GetTotalCount() == totalCount); + listComponent->SetRightToLeft(true); + ASSERT_TRUE(listComponent->GetColumnCount() == 2); + + /** + * @tc.steps: step2. construct RenderList with list component. + * @tc.expected: step2. properties are set correctly. + */ + renderList_->Update(listComponent); + renderList_->RegisterBuildItemCallback([this](int32_t index) -> bool { + RefPtr node = ListTestUtils::CreateRenderItem(300.0, 200.0, mockContext_); + renderList_->AddListItem(index, node); + return true; + }); + + /** + * @tc.steps: step3. trigger layout for render list. + * @tc.expected: step3. List and children layout correct. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(600.0, 600.0)); + renderList_->SetLayoutParam(layoutParam); + renderList_->ResetLayoutRange(0.0, 600.0, Offset(0.0, 0.0), Size(600.0, 600.0)); + renderList_->PerformLayout(); + + /** + * @tc.steps: step4. trigger focus move for render list. + * @tc.expected: step4. Focus move correct. + */ + ASSERT_TRUE(renderList_->RequestNextFocus(true, false) == 2); // DOWN + renderList_->ListItemFocused(2); + ASSERT_TRUE(renderList_->RequestNextFocus(true, false) == 4); // DOWN + renderList_->ListItemFocused(4); + ASSERT_TRUE(renderList_->RequestNextFocus(false, true) == 5); // LEFT + renderList_->ListItemFocused(5); + ASSERT_TRUE(renderList_->RequestNextFocus(true, true) == 3); // UP + renderList_->ListItemFocused(3); + ASSERT_TRUE(renderList_->RequestNextFocus(true, true) == 1); // UP + renderList_->ListItemFocused(1); + ASSERT_TRUE(renderList_->RequestNextFocus(false, true) == -1); // LEFT + ASSERT_TRUE(renderList_->RequestNextFocus(false, false) == 0); // RIGHT + renderList_->ListItemFocused(0); +} + +/** + * @tc.name: AceListExpansion001 + * @tc.desc: Verify List can create groupItem without second Level item. + * @tc.type: FUNC + * @tc.require: AR000DQ1TB + * @tc.author: chenlien + */ +HWTEST_F(RenderListTest, AceListExpansion001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct ListComponent by column direction. + * @tc.expected: step1. properties are set correctly. + */ + int32_t totalCount = 6; + RefPtr listComponent = AceType::MakeRefPtr(); + listComponent->SetDirection(FlexDirection::COLUMN); + listComponent->SetTotalCount(totalCount); + listComponent->SetOnRequestItem(EventMarker { "itemBuilder_ID" }); + ASSERT_TRUE(listComponent->GetDirection() == FlexDirection::COLUMN); + ASSERT_TRUE(listComponent->GetTotalCount() == totalCount); + + /** + * @tc.steps: step2. construct RenderList with list component. + * @tc.expected: step2. properties are set correctly. + */ + renderList_->Update(listComponent); + renderList_->RegisterBuildItemCallback([this](int32_t index) -> bool { + if (index == 0) { + RefPtr node = ListTestUtils::CreateRenderItemGroup(300.0, 200.0, mockContext_); + renderList_->AddListItem(index, node); + } else { + RefPtr node = ListTestUtils::CreateRenderItem(300.0, 200.0, mockContext_); + renderList_->AddListItem(index, node); + } + return true; + }); + + /** + * @tc.steps: step3. trigger layout for render list. + * @tc.expected: step3. List and children layout correct. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(100.0, 100.0)); + layoutParam.SetMaxSize(Size(900.0, 900.0)); + renderList_->SetLayoutParam(layoutParam); + renderList_->PerformLayout(); + if (renderList_->IsWatch()) { + ASSERT_TRUE(NearEqual(renderList_->GetLayoutSize().Width(), renderList_->GetViewPortSize())); + } else { + ASSERT_TRUE(NearEqual(renderList_->GetLayoutSize().Height(), 200.0)); + } +} + +/** + * @tc.name: AceListExpansion002 + * @tc.desc: Verify List can create groupItem with second Level item. + * @tc.type: FUNC + * @tc.require: AR000DQ1TC + * @tc.author: chenlien + */ +HWTEST_F(RenderListTest, AceListExpansion002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct ListComponent by column direction. + * @tc.expected: step1. properties are set correctly. + */ + int32_t totalCount = 6; + RefPtr listComponent = AceType::MakeRefPtr(); + listComponent->SetDirection(FlexDirection::COLUMN); + listComponent->SetTotalCount(totalCount); + listComponent->SetOnRequestItem(EventMarker { "itemBuilder_ID" }); + ASSERT_TRUE(listComponent->GetDirection() == FlexDirection::COLUMN); + ASSERT_TRUE(listComponent->GetTotalCount() == totalCount); + + /** + * @tc.steps: step2. construct RenderList with list component. + * @tc.expected: step2. properties are set correctly. + */ + renderList_->Update(listComponent); + renderList_->RegisterBuildItemCallback([this](int32_t index) -> bool { + if (index == 0) { + RefPtr node = ListTestUtils::CreateRenderItemGroup(300.0, 200.0, mockContext_, true); + renderList_->AddListItem(index, node); + } else { + RefPtr node = ListTestUtils::CreateRenderItem(300.0, 200.0, mockContext_); + renderList_->AddListItem(index, node); + } + return true; + }); + + /** + * @tc.steps: step3. trigger layout for render list. + * @tc.expected: step3. List and children layout correct. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(100.0, 100.0)); + layoutParam.SetMaxSize(Size(900.0, 900.0)); + renderList_->SetLayoutParam(layoutParam); + renderList_->GetLayoutManager()->SetExpandAll(true); + renderList_->PerformLayout(); + if (renderList_->IsWatch()) { + ASSERT_TRUE(NearEqual(renderList_->GetLayoutSize().Width(), renderList_->GetViewPortSize())); + } else { + ASSERT_TRUE(NearEqual(renderList_->GetLayoutSize().Height(), 400.0)); + } +} + +/** + * @tc.name: AceListExpansion003 + * @tc.desc: Verify List can create groupItem with multiple second Level item and not specify primary. + * @tc.type: FUNC + * @tc.require: AR000DQ1TC + * @tc.author: chenlien + */ +HWTEST_F(RenderListTest, AceListExpansion003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct ListComponent by column direction. + * @tc.expected: step1. properties are set correctly. + */ + int32_t totalCount = 6; + RefPtr listComponent = AceType::MakeRefPtr(); + listComponent->SetDirection(FlexDirection::COLUMN); + listComponent->SetTotalCount(totalCount); + listComponent->SetOnRequestItem(EventMarker { "itemBuilder_ID" }); + ASSERT_TRUE(listComponent->GetDirection() == FlexDirection::COLUMN); + ASSERT_TRUE(listComponent->GetTotalCount() == totalCount); + + /** + * @tc.steps: step2. construct RenderList with list component. + * @tc.expected: step2. properties are set correctly. + */ + renderList_->Update(listComponent); + renderList_->RegisterBuildItemCallback([this](int32_t index) -> bool { + if (index == 0) { + RefPtr node = ListTestUtils::CreateRenderItemGroup(300.0, 200.0, mockContext_, true, false); + renderList_->AddListItem(index, node); + } else { + RefPtr node = ListTestUtils::CreateRenderItem(300.0, 200.0, mockContext_); + renderList_->AddListItem(index, node); + } + return true; + }); + + /** + * @tc.steps: step3. trigger layout for render list. + * @tc.expected: step3. List and children layout correct. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(100.0, 100.0)); + layoutParam.SetMaxSize(Size(900.0, 900.0)); + renderList_->SetLayoutParam(layoutParam); + renderList_->GetLayoutManager()->SetExpandAll(true); + renderList_->PerformLayout(); + if (renderList_->IsWatch()) { + ASSERT_TRUE(NearEqual(renderList_->GetLayoutSize().Width(), renderList_->GetViewPortSize())); + } else { + ASSERT_TRUE(NearEqual(renderList_->GetLayoutSize().Height(), 400.0)); + } +} + +/** + * @tc.name: AceListExpansion006 + * @tc.desc: Verify itemGroup click event. + * @tc.type: FUNC + * @tc.require: AR000DQ1TD + * @tc.author: chenlien + */ +HWTEST_F(RenderListTest, AceListExpansion006, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct ListComponent by column direction. + * @tc.expected: step1. properties are set correctly. + */ + int32_t totalCount = 6; + RefPtr listComponent = AceType::MakeRefPtr(); + listComponent->SetDirection(FlexDirection::COLUMN); + listComponent->SetTotalCount(totalCount); + listComponent->SetOnRequestItem(EventMarker { "itemBuilder_ID" }); + ASSERT_TRUE(listComponent->GetDirection() == FlexDirection::COLUMN); + ASSERT_TRUE(listComponent->GetTotalCount() == totalCount); + + /** + * @tc.steps: step2. construct RenderList with list component and set click event. + * @tc.expected: step2. properties are set correctly. + */ + renderList_->Update(listComponent); + renderList_->RegisterBuildItemCallback([this](int32_t index) -> bool { + if (index == 0) { + RefPtr node = ListTestUtils::CreateRenderItemGroup(300.0, 200.0, mockContext_, true, false); + std::string scrollEventId = "groupclick_id"; + index_ = 0; + RefPtr eventHander = AceType::MakeRefPtr( + [this, scrollEventId](const std::string& eventId, const std::string& param) { + std::string scrollResult = std::string("\"") + .append(LIST_ITEM_GROUP_EVENT_GROUPCLICK) + .append("\", ") + .append("{\"groupid\": \"") + .append("test") + .append("\"}"); + EXPECT_EQ(param, scrollResult); + EXPECT_EQ(eventId, scrollEventId); + index_++; + }); + mockContext_->RegisterEventHandler(eventHander); + renderList_->AddListItem(index, node); + } else { + RefPtr node = ListTestUtils::CreateRenderItem(300.0, 200.0, mockContext_); + renderList_->AddListItem(index, node); + } + return true; + }); + + /** + * @tc.steps: step3. trigger layout for render list. + * @tc.expected: step3. List and children layout correct. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(100.0, 100.0)); + layoutParam.SetMaxSize(Size(900.0, 900.0)); + renderList_->SetLayoutParam(layoutParam); + renderList_->PerformLayout(); + + RefPtr listItem = + AceType::DynamicCast(renderList_->GetItemByIndex(0)); + if (listItem) { + bool lastExpand = listItem->GetExpand(); + listItem->HandleClicked(); + ASSERT_FALSE(listItem->GetExpand() == lastExpand); + } +} + +/** + * @tc.name: AceListExpansion007 + * @tc.desc: Verify itemGroup coollapse event. + * @tc.type: FUNC + * @tc.require: AR000DQ1TD + * @tc.author: chenlien + */ +HWTEST_F(RenderListTest, AceListExpansion007, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct ListComponent by column direction. + * @tc.expected: step1. properties are set correctly. + */ + int32_t totalCount = 6; + RefPtr listComponent = AceType::MakeRefPtr(); + listComponent->SetDirection(FlexDirection::COLUMN); + listComponent->SetTotalCount(totalCount); + listComponent->SetOnRequestItem(EventMarker { "itemBuilder_ID" }); + ASSERT_TRUE(listComponent->GetDirection() == FlexDirection::COLUMN); + ASSERT_TRUE(listComponent->GetTotalCount() == totalCount); + + /** + * @tc.steps: step2. construct RenderList with list component and set click event. + * @tc.expected: step2. properties are set correctly. + */ + renderList_->Update(listComponent); + renderList_->RegisterBuildItemCallback([this](int32_t index) -> bool { + if (index == 0) { + RefPtr node = ListTestUtils::CreateRenderItemGroup(300.0, 200.0, mockContext_, true, false); + std::string scrollEventId = "groupcollapse_id"; + index_ = 0; + RefPtr eventHander = AceType::MakeRefPtr( + [this, scrollEventId](const std::string& eventId, const std::string& param) { + std::string scrollResult = std::string("\"") + .append(LIST_ITEM_GROUP_EVENT_GROUPCLICK) + .append("\", ") + .append("{\"groupid\": \"") + .append("test") + .append("\"}"); + EXPECT_EQ(param, scrollResult); + EXPECT_EQ(eventId, scrollEventId); + index_++; + }); + mockContext_->RegisterEventHandler(eventHander); + renderList_->AddListItem(index, node); + } else { + RefPtr node = ListTestUtils::CreateRenderItem(300.0, 200.0, mockContext_); + renderList_->AddListItem(index, node); + } + return true; + }); + + /** + * @tc.steps: step3. trigger layout for render list. + * @tc.expected: step3. List and children layout correct. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(100.0, 100.0)); + layoutParam.SetMaxSize(Size(900.0, 900.0)); + renderList_->SetLayoutParam(layoutParam); + renderList_->PerformLayout(); + + RefPtr listItem = + AceType::DynamicCast(renderList_->GetItemByIndex(0)); + if (listItem) { + bool lastExpand = listItem->GetExpand(); + listItem->HandleClicked(); + ASSERT_FALSE(listItem->GetExpand() == lastExpand); + } +} + +/** + * @tc.name: AceListExpansion008 + * @tc.desc: Verify itemGroup expand event. + * @tc.type: FUNC + * @tc.require: AR000DQ1TD + * @tc.author: chenlien + */ +HWTEST_F(RenderListTest, AceListExpansion008, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct ListComponent by column direction. + * @tc.expected: step1. properties are set correctly. + */ + int32_t totalCount = 6; + RefPtr listComponent = AceType::MakeRefPtr(); + listComponent->SetDirection(FlexDirection::COLUMN); + listComponent->SetTotalCount(totalCount); + listComponent->SetOnRequestItem(EventMarker { "itemBuilder_ID" }); + ASSERT_TRUE(listComponent->GetDirection() == FlexDirection::COLUMN); + ASSERT_TRUE(listComponent->GetTotalCount() == totalCount); + + /** + * @tc.steps: step2. construct RenderList with list component and set click event. + * @tc.expected: step2. properties are set correctly. + */ + renderList_->Update(listComponent); + renderList_->RegisterBuildItemCallback([this](int32_t index) -> bool { + if (index == 0) { + RefPtr node = ListTestUtils::CreateRenderItemGroup(300.0, 200.0, mockContext_, true, false); + std::string scrollEventId = "groupexpand_id"; + index_ = 0; + RefPtr eventHander = AceType::MakeRefPtr( + [this, scrollEventId](const std::string& eventId, const std::string& param) { + std::string scrollResult = std::string("\"") + .append(LIST_ITEM_GROUP_EVENT_GROUPCLICK) + .append("\", ") + .append("{\"groupid\": \"") + .append("test") + .append("\"}"); + EXPECT_EQ(param, scrollResult); + EXPECT_EQ(eventId, scrollEventId); + index_++; + }); + mockContext_->RegisterEventHandler(eventHander); + renderList_->AddListItem(index, node); + } else { + RefPtr node = ListTestUtils::CreateRenderItem(300.0, 200.0, mockContext_); + renderList_->AddListItem(index, node); + } + return true; + }); + + /** + * @tc.steps: step3. trigger layout for render list. + * @tc.expected: step3. List and children layout correct. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(100.0, 100.0)); + layoutParam.SetMaxSize(Size(900.0, 900.0)); + renderList_->SetLayoutParam(layoutParam); + renderList_->PerformLayout(); + + RefPtr listItem = + AceType::DynamicCast(renderList_->GetItemByIndex(0)); + if (listItem) { + bool lastExpand = listItem->GetExpand(); + listItem->HandleClicked(); + ASSERT_FALSE(listItem->GetExpand() == lastExpand); + } +} + +/** + * @tc.name: AceListExpansion010 + * @tc.desc: Verify List can create groupItem with multiple second Level item and not specify primary. + * @tc.type: FUNC + * @tc.require: AR000DQ1TH + * @tc.author: chenlien + */ +HWTEST_F(RenderListTest, AceListExpansion010, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct ListComponent by column direction. + * @tc.expected: step1. properties are set correctly. + */ + int32_t totalCount = 6; + RefPtr listComponent = AceType::MakeRefPtr(); + listComponent->SetDirection(FlexDirection::COLUMN); + listComponent->SetTotalCount(totalCount); + listComponent->SetOnRequestItem(EventMarker { "itemBuilder_ID" }); + ASSERT_TRUE(listComponent->GetDirection() == FlexDirection::COLUMN); + ASSERT_TRUE(listComponent->GetTotalCount() == totalCount); + + /** + * @tc.steps: step2. construct RenderList with list component. + * @tc.expected: step2. properties are set correctly. + */ + renderList_->Update(listComponent); + renderList_->RegisterBuildItemCallback([this](int32_t index) -> bool { + if (index == 0) { + RefPtr node = ListTestUtils::CreateRenderItemGroup(300.0, 200.0, mockContext_, true, false); + renderList_->AddListItem(index, node); + } else { + RefPtr node = ListTestUtils::CreateRenderItem(300.0, 200.0, mockContext_); + renderList_->AddListItem(index, node); + } + return true; + }); + + /** + * @tc.steps: step3. trigger layout for render list. + * @tc.expected: step3. List and children layout correct. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(100.0, 100.0)); + layoutParam.SetMaxSize(Size(900.0, 900.0)); + renderList_->SetLayoutParam(layoutParam); + renderList_->PerformLayout(); + if (renderList_->IsWatch()) { + ASSERT_TRUE(NearEqual(renderList_->GetLayoutSize().Width(), renderList_->GetViewPortSize())); + } +} + +/** + * @tc.name: ListDividerTest001 + * @tc.desc: Verify list divider. + * @tc.type: FUNC + * @tc.require: AR000DQ4FT + * @tc.author: jinwuwen + */ +HWTEST_F(RenderListTest, ListDividerTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct ListComponent by column direction. + * @tc.expected: step1. properties are set correctly. + */ + RefPtr listComponent = AceType::MakeRefPtr(); + listComponent->SetDirection(FlexDirection::COLUMN); + listComponent->SetTotalCount(5); + listComponent->SetOnRequestItem(EventMarker { "itemBuilder_ID" }); + + /** + * @tc.steps: step2. construct RenderList with list component. + * @tc.expected: step2. properties are set correctly. + */ + renderList_->Update(listComponent); + renderList_->RegisterBuildItemCallback([this](int32_t index) -> bool { + RefPtr node = ListTestUtils::CreateRenderItem(300.0, 300.0, mockContext_); + renderList_->AddListItem(index, node); + return true; + }); + + /** + * @tc.steps: step3. trigger layout for render list. + * @tc.expected: step3. List and children layout correct. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(1000.0, 1000.0)); + renderList_->ResetLayoutRange(0.0, 1000.0, Offset(0.0, 0.0), Size(1000.0, 1000.0)); + renderList_->SetLayoutParam(layoutParam); + renderList_->PerformLayout(); + + RefPtr listItem = AceType::DynamicCast(renderList_->GetItemByIndex(0)); + if (listItem) { + ASSERT_FALSE(listItem->NeedDivider()); + ASSERT_TRUE(NearEqual(listItem->GetDividerHeight().Value(), 1.0)); + ASSERT_TRUE(NearEqual(listItem->GetDividerOrigin().Value(), 0.0)); + ASSERT_TRUE(NearEqual(listItem->GetDividerLength().Value(), 0.0)); + } +} + +/** + * @tc.name: ListDividerTest002 + * @tc.desc: Verify list divider. + * @tc.type: FUNC + * @tc.require: AR000DQ4FT + * @tc.author: jinwuwen + */ +HWTEST_F(RenderListTest, ListDividerTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct ListComponent by column direction. + * @tc.expected: step1. properties are set correctly. + */ + RefPtr listComponent = AceType::MakeRefPtr(); + listComponent->SetDirection(FlexDirection::COLUMN); + listComponent->SetTotalCount(5); + listComponent->SetOnRequestItem(EventMarker { "itemBuilder_ID" }); + + /** + * @tc.steps: step2. construct RenderList with list component. + * @tc.expected: step2. properties are set correctly. + */ + renderList_->Update(listComponent); + renderList_->RegisterBuildItemCallback([this](int32_t index) -> bool { + RefPtr node = ListTestUtils::CreateRenderItem(300.0, 300.0, mockContext_); + renderList_->AddListItem(index, node); + return true; + }); + + /** + * @tc.steps: step3. trigger layout for render list. + * @tc.expected: step3. List and children layout correct. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(1000.0, 1000.0)); + renderList_->ResetLayoutRange(0.0, 1000.0, Offset(0.0, 0.0), Size(1000.0, 1000.0)); + renderList_->SetLayoutParam(layoutParam); + renderList_->PerformLayout(); + + RefPtr listItem = AceType::DynamicCast(renderList_->GetItemByIndex(0)); + if (listItem) { + ASSERT_FALSE(listItem->NeedDivider()); + ASSERT_TRUE(NearEqual(listItem->GetDividerHeight().Value(), 1.0)); + + listItem->MarkNeedDivider(); + listItem->SetDividerHeight(Dimension(5.0, DimensionUnit::PX)); + listItem->PerformLayout(); + ASSERT_TRUE(NearEqual(listItem->GetLayoutSize().Height(), 305.0)); + } +} + +#ifndef WEARABLE_PRODUCT +/** + * @tc.name: AceListScrollBar001 + * @tc.desc: Verify List can create scrollBar. + * @tc.type: FUNC + * @tc.require:AR000F3CBO + * @tc.author: liujinwei + */ +HWTEST_F(RenderListTest, AceListScrollBar001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct ListComponent. + * @tc.expected: step1. properties are set correctly. + */ + int32_t totalCount = 15; + RefPtr listComponent = AceType::MakeRefPtr(); + + ASSERT_FALSE(renderScroll_->GetScrollBar()); + RefPtr scrollBar = AceType::MakeRefPtr(DisplayMode::ON); + listComponent->SetScrollBar(scrollBar); + listComponent->SetDirection(FlexDirection::COLUMN); + listComponent->SetFlexAlign(FlexAlign::FLEX_START); + listComponent->SetTotalCount(totalCount); + listComponent->SetOnRequestItem(EventMarker { "itemBuilder_ID" }); + listComponent->SetItemExtent(Dimension(150.0, DimensionUnit::PX)); + ASSERT_TRUE(listComponent->GetDirection() == FlexDirection::COLUMN); + ASSERT_TRUE(listComponent->GetTotalCount() == totalCount); + + /** + * @tc.steps: step2. construct RenderList with list component. + * @tc.expected: step2. properties are set correctly. + */ + renderList_->Update(listComponent); + renderList_->RegisterBuildItemCallback([this](int32_t index) -> bool { + RefPtr node = ListTestUtils::CreateRenderItem(300.0, 200.0, mockContext_); + renderList_->AddListItem(index, node); + return true; + }); + + /** + * @tc.steps: step3. trigger layout for render list. + * @tc.expected: step3. List and children layout correct. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(1000.0, 1000.0)); + renderList_->SetLayoutParam(layoutParam); + renderList_->ResetLayoutRange(0.0, 1000.0, Offset(0.0, 0.0), Size(1000.0, 1000.0)); + renderList_->PerformLayout(); + int32_t index = 0; + for (auto iter : renderList_->GetItems()) { + ASSERT_TRUE(iter.second->GetLayoutSize() == Size(300.0, 150.0)); + ASSERT_TRUE(iter.second->GetPosition() == Offset(0.0, 150.0 * index)); + index++; + } + renderScroll_->AddChild(renderList_); + ASSERT_TRUE(listComponent->GetScrollBar() != nullptr); + renderScroll_->Update(listComponent); + EXPECT_TRUE(renderScroll_->NeedLayout()); + renderScroll_->SetLayoutParam(layoutParam); + renderScroll_->PerformLayout(); + + ASSERT_TRUE(renderScroll_->GetScrollBar()); + + RefPtr bar = renderScroll_->GetScrollBar(); + ASSERT_TRUE(bar->IsScrollable() == true); + ASSERT_TRUE(bar->NeedScrollBar() == true); +} + +/** + * @tc.name: AceListScrollBar002 + * @tc.desc: Verify List can create scrollBar. + * @tc.type: FUNC + * @tc.require:AR000F3CBK + * @tc.author: liujinwei + */ +HWTEST_F(RenderListTest, AceListScrollBar002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct ListComponent. + * @tc.expected: step1. properties are set correctly. + */ + int32_t totalCount = 8; + RefPtr listComponent = AceType::MakeRefPtr(); + + ASSERT_FALSE(renderScroll_->GetScrollBar()); + RefPtr scrollBar = AceType::MakeRefPtr(DisplayMode::ON); + + // scrollBar theme + auto scrollBarTheme = THEME_MANAGER->GetTheme(); + if (scrollBarTheme) { + scrollBar->SetInactiveWidth(scrollBarTheme->GetNormalWidth()); + scrollBar->SetNormalWidth(scrollBarTheme->GetNormalWidth()); + scrollBar->SetActiveWidth(scrollBarTheme->GetActiveWidth()); + scrollBar->SetMinHeight(scrollBarTheme->GetMinHeight()); + scrollBar->SetTouchWidth(scrollBarTheme->GetTouchWidth()); + scrollBar->SetBackgroundColor(scrollBarTheme->GetBackgroundColor()); + scrollBar->SetForegroundColor(scrollBarTheme->GetForegroundColor()); + scrollBar->SetPadding(scrollBarTheme->GetPadding()); + } + + listComponent->SetScrollBar(scrollBar); + listComponent->SetDirection(FlexDirection::COLUMN); + listComponent->SetFlexAlign(FlexAlign::FLEX_START); + listComponent->SetTotalCount(totalCount); + listComponent->SetOnRequestItem(EventMarker { "itemBuilder_ID" }); + listComponent->SetItemExtent(Dimension(150.0, DimensionUnit::PX)); + ASSERT_TRUE(listComponent->GetDirection() == FlexDirection::COLUMN); + ASSERT_TRUE(listComponent->GetTotalCount() == totalCount); + + /** + * @tc.steps: step2. construct RenderList with list component. + * @tc.expected: step2. properties are set correctly. + */ + renderList_->Update(listComponent); + renderList_->RegisterBuildItemCallback([this](int32_t index) -> bool { + RefPtr node = ListTestUtils::CreateRenderItem(300.0, 200.0, mockContext_); + renderList_->AddListItem(index, node); + return true; + }); + + /** + * @tc.steps: step3. trigger layout for render list. + * @tc.expected: step3. List and children layout correct. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(960.0, 960.0)); + renderList_->SetLayoutParam(layoutParam); + renderList_->ResetLayoutRange(0.0, 960.0, Offset(0.0, 0.0), Size(960.0, 960.0)); + renderList_->PerformLayout(); + int32_t index = 0; + for (auto iter : renderList_->GetItems()) { + ASSERT_TRUE(iter.second->GetLayoutSize() == Size(300.0, 150.0)); + ASSERT_TRUE(iter.second->GetPosition() == Offset(0.0, 150.0 * index)); + index++; + } + renderScroll_->AddChild(renderList_); + ASSERT_TRUE(listComponent->GetScrollBar() != nullptr); + renderScroll_->Update(listComponent); + EXPECT_TRUE(renderScroll_->NeedLayout()); + renderScroll_->SetLayoutParam(layoutParam); + renderScroll_->PerformLayout(); + + ASSERT_TRUE(renderScroll_->GetScrollBar()); + RefPtr bar = renderScroll_->GetScrollBar(); + renderScroll_->SetMainScrollExtentForBar(renderScroll_->GetMainScrollExtent()); + bar->UpdateScrollBarRegion( + Offset(0.0, 0.0), renderScroll_->GetLayoutSize(), Offset(0.0, 0.0), renderScroll_->GetEstimatedHeight()); + + ASSERT_TRUE(bar->IsScrollable() == true); + ASSERT_TRUE(bar->IsActive() == false); + ASSERT_TRUE(bar->GetController() != nullptr); + ASSERT_TRUE(NearEqual(bar->GetController()->GetInactiveWidth().Value(), 4.0)); + ASSERT_TRUE(NearEqual(bar->GetController()->GetActiveWidth().Value(), 8.0)); + ASSERT_TRUE(NearEqual(bar->GetMinHeight().Value(), 48.0)); + bar->UpdateScrollBarRegion( + Offset(0.0, 0.0), renderScroll_->GetLayoutSize(), Offset(0.0, 0.0), renderScroll_->GetEstimatedHeight()); + ASSERT_TRUE(NearEqual(bar->GetActiveRect().Height(), 768)); +} + +/** + * @tc.name: AceListScrollBar003 + * @tc.desc: Verify List can create scrollBar. + * @tc.type: FUNC + * @tc.require:AR000F3CBL + * @tc.author: liujinwei + */ +HWTEST_F(RenderListTest, AceListScrollBar003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct ListComponent. + * @tc.expected: step1. properties are set correctly. + */ + int32_t totalCount = 10; + RefPtr listComponent = AceType::MakeRefPtr(); + + ASSERT_FALSE(renderScroll_->GetScrollBar()); + RefPtr scrollBar = AceType::MakeRefPtr(DisplayMode::ON); + + // scrollBar theme + auto scrollBarTheme = THEME_MANAGER->GetTheme(); + if (scrollBarTheme) { + scrollBar->SetInactiveWidth(scrollBarTheme->GetNormalWidth()); + scrollBar->SetNormalWidth(scrollBarTheme->GetNormalWidth()); + scrollBar->SetActiveWidth(scrollBarTheme->GetActiveWidth()); + scrollBar->SetMinHeight(scrollBarTheme->GetMinHeight()); + scrollBar->SetTouchWidth(scrollBarTheme->GetTouchWidth()); + scrollBar->SetBackgroundColor(scrollBarTheme->GetBackgroundColor()); + scrollBar->SetForegroundColor(scrollBarTheme->GetForegroundColor()); + scrollBar->SetPadding(scrollBarTheme->GetPadding()); + } + + listComponent->SetScrollBar(scrollBar); + listComponent->SetDirection(FlexDirection::COLUMN); + listComponent->SetFlexAlign(FlexAlign::FLEX_START); + listComponent->SetTotalCount(totalCount); + listComponent->SetOnRequestItem(EventMarker { "itemBuilder_ID" }); + listComponent->SetItemExtent(Dimension(200.0, DimensionUnit::PX)); + ASSERT_TRUE(listComponent->GetDirection() == FlexDirection::COLUMN); + ASSERT_TRUE(listComponent->GetTotalCount() == totalCount); + + /** + * @tc.steps: step2. construct RenderList with list component. + * @tc.expected: step2. properties are set correctly. + */ + renderList_->Update(listComponent); + renderList_->RegisterBuildItemCallback([this](int32_t index) -> bool { + RefPtr node = ListTestUtils::CreateRenderItem(300.0, 200.0, mockContext_); + renderList_->AddListItem(index, node); + return true; + }); + + /** + * @tc.steps: step3. trigger layout for render list. + * @tc.expected: step3. List and children layout correct. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(1600.0, 1600.0)); + renderList_->ResetLayoutRange(0.0, 1600.0, Offset(0.0, 0.0), Size(1600.0, 1600.0)); + renderList_->SetLayoutParam(layoutParam); + renderList_->PerformLayout(); + renderScroll_->AddChild(renderList_); + ASSERT_TRUE(listComponent->GetScrollBar() != nullptr); + renderScroll_->Update(listComponent); + EXPECT_TRUE(renderScroll_->NeedLayout()); + renderScroll_->SetLayoutParam(layoutParam); + renderScroll_->PerformLayout(); + + ASSERT_TRUE(renderScroll_->GetScrollBar()); + RefPtr bar = renderScroll_->GetScrollBar(); + renderScroll_->SetMainScrollExtentForBar(renderScroll_->GetMainScrollExtent()); + bar->UpdateScrollBarRegion( + Offset(0.0, 0.0), renderScroll_->GetLayoutSize(), Offset(0.0, 0.0), renderScroll_->GetEstimatedHeight()); + + ASSERT_TRUE(bar->IsScrollable() == true); + ASSERT_TRUE(bar->IsActive() == false); + ASSERT_TRUE(bar->GetController() != nullptr); + ASSERT_TRUE(NearEqual(bar->GetController()->GetInactiveWidth().Value(), 4.0)); + ASSERT_TRUE(NearEqual(bar->GetController()->GetActiveWidth().Value(), 8.0)); + ASSERT_TRUE(NearEqual(bar->GetMinHeight().Value(), 48.0)); + ASSERT_TRUE(NearEqual(bar->GetActiveRect().Height(), 1280)); +} + +/** + * @tc.name: AceListScrollBar004 + * @tc.desc: Verify List can create scrollBar. + * @tc.type: FUNC + * @tc.require:AR000F3CBM + * @tc.author: liujinwei + */ +HWTEST_F(RenderListTest, AceListScrollBar004, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct ListComponent. + * @tc.expected: step1. properties are set correctly. + */ + int32_t totalCount = 12; + RefPtr listComponent = AceType::MakeRefPtr(); + + ASSERT_FALSE(renderScroll_->GetScrollBar()); + RefPtr scrollBar = AceType::MakeRefPtr(DisplayMode::ON); + + // scrollBar theme + auto scrollBarTheme = THEME_MANAGER->GetTheme(); + if (scrollBarTheme) { + scrollBar->SetInactiveWidth(scrollBarTheme->GetNormalWidth()); + scrollBar->SetNormalWidth(scrollBarTheme->GetNormalWidth()); + scrollBar->SetActiveWidth(scrollBarTheme->GetActiveWidth()); + scrollBar->SetMinHeight(scrollBarTheme->GetMinHeight()); + scrollBar->SetTouchWidth(scrollBarTheme->GetTouchWidth()); + scrollBar->SetBackgroundColor(scrollBarTheme->GetBackgroundColor()); + scrollBar->SetForegroundColor(scrollBarTheme->GetForegroundColor()); + scrollBar->SetPadding(scrollBarTheme->GetPadding()); + } + + listComponent->SetScrollBar(scrollBar); + listComponent->SetDirection(FlexDirection::COLUMN); + listComponent->SetFlexAlign(FlexAlign::FLEX_START); + listComponent->SetTotalCount(totalCount); + listComponent->SetOnRequestItem(EventMarker { "itemBuilder_ID" }); + listComponent->SetItemExtent(Dimension(100.0, DimensionUnit::PX)); + ASSERT_TRUE(listComponent->GetDirection() == FlexDirection::COLUMN); + ASSERT_TRUE(listComponent->GetTotalCount() == totalCount); + + /** + * @tc.steps: step2. construct RenderList with list component. + * @tc.expected: step2. properties are set correctly. + */ + renderList_->Update(listComponent); + renderList_->RegisterBuildItemCallback([this](int32_t index) -> bool { + RefPtr node = ListTestUtils::CreateRenderItem(300.0, 100.0, mockContext_); + renderList_->AddListItem(index, node); + return true; + }); + + /** + * @tc.steps: step3. trigger layout for render list. + * @tc.expected: step3. List and children layout correct. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(300.0, 300.0)); + renderList_->SetLayoutParam(layoutParam); + renderList_->ResetLayoutRange(0.0, 300.0, Offset(0.0, 0.0), Size(300.0, 300.0)); + renderList_->PerformLayout(); + + renderScroll_->AddChild(renderList_); + ASSERT_TRUE(listComponent->GetScrollBar() != nullptr); + renderScroll_->Update(listComponent); + EXPECT_TRUE(renderScroll_->NeedLayout()); + renderScroll_->SetLayoutParam(layoutParam); + renderScroll_->PerformLayout(); + + ASSERT_TRUE(renderScroll_->GetScrollBar()); + + RefPtr bar = renderScroll_->GetScrollBar(); + ASSERT_TRUE(bar->IsScrollable() == true); + ASSERT_TRUE(bar->IsActive() == false); + ASSERT_TRUE(bar->GetController() != nullptr); + ASSERT_TRUE(NearEqual(bar->GetController()->GetInactiveWidth().Value(), 4.0)); + ASSERT_TRUE(NearEqual(bar->GetController()->GetActiveWidth().Value(), 8.0)); + ASSERT_TRUE(NearEqual(bar->GetMinHeight().Value(), 48.0)); + renderScroll_->SetMainScrollExtentForBar(renderScroll_->GetMainScrollExtent()); + bar->UpdateScrollBarRegion( + Offset(0.0, 0.0), renderScroll_->GetLayoutSize(), Offset(0.0, 0.0), renderScroll_->GetEstimatedHeight()); + + ASSERT_TRUE(NearEqual(bar->GetActiveRect().Height(), 150)); + renderScroll_->JumpToPosition(2000.0); + + renderScroll_->SetMainScrollExtentForBar(renderScroll_->GetMainScrollExtent()); + bar->UpdateScrollBarRegion(Offset(0.0, std::abs(renderScroll_->GetScrollBarOutBoundaryExtent())), + renderScroll_->GetLayoutSize(), Offset(0.0, 0.0), renderScroll_->GetEstimatedHeight()); + ASSERT_TRUE(NearEqual(bar->GetActiveRect().Height(), 75)); +} + +/** + * @tc.name: AceListScrollBar005 + * @tc.desc: Verify the scrollBar param. + * @tc.type: FUNC + * @tc.require:AR000F3CBN + * @tc.author: liujinwei + */ +HWTEST_F(RenderListTest, AceListScrollBar005, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct ListComponent. + * @tc.expected: step1. properties are set correctly. + */ + int32_t totalCount = 8; + RefPtr listComponent = AceType::MakeRefPtr(); + + ASSERT_FALSE(renderScroll_->GetScrollBar()); + RefPtr scrollBar = AceType::MakeRefPtr(DisplayMode::ON); + + // scrollBar theme + auto scrollBarTheme = THEME_MANAGER->GetTheme(); + if (scrollBarTheme) { + scrollBar->SetInactiveWidth(scrollBarTheme->GetNormalWidth()); + scrollBar->SetNormalWidth(scrollBarTheme->GetNormalWidth()); + scrollBar->SetActiveWidth(scrollBarTheme->GetActiveWidth()); + } + + listComponent->SetScrollBar(scrollBar); + listComponent->SetDirection(FlexDirection::COLUMN); + listComponent->SetFlexAlign(FlexAlign::FLEX_START); + listComponent->SetTotalCount(totalCount); + listComponent->SetOnRequestItem(EventMarker { "itemBuilder_ID" }); + listComponent->SetItemExtent(Dimension(150.0, DimensionUnit::PX)); + ASSERT_TRUE(listComponent->GetDirection() == FlexDirection::COLUMN); + ASSERT_TRUE(listComponent->GetTotalCount() == totalCount); + + /** + * @tc.steps: step2. construct RenderList with list component. + * @tc.expected: step2. properties are set correctly. + */ + renderList_->Update(listComponent); + renderList_->RegisterBuildItemCallback([this](int32_t index) -> bool { + RefPtr node = ListTestUtils::CreateRenderItem(300.0, 200.0, mockContext_); + renderList_->AddListItem(index, node); + return true; + }); + + /** + * @tc.steps: step3. trigger layout for render list. + * @tc.expected: step3. List and children layout correct. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(960.0, 960.0)); + renderList_->SetLayoutParam(layoutParam); + renderList_->ResetLayoutRange(0.0, 960.0, Offset(0.0, 0.0), Size(960.0, 960.0)); + renderList_->PerformLayout(); + + renderScroll_->AddChild(renderList_); + ASSERT_TRUE(listComponent->GetScrollBar() != nullptr); + renderScroll_->Update(listComponent); + EXPECT_TRUE(renderScroll_->NeedLayout()); + renderScroll_->SetLayoutParam(layoutParam); + renderScroll_->PerformLayout(); + RefPtr bar = renderScroll_->GetScrollBar(); + ASSERT_TRUE(bar->GetController() != nullptr); + ASSERT_TRUE(NearEqual(bar->GetController()->GetActiveWidth().Value(), 8.0)); +} + +/** + * @tc.name: AceListScrollBar006 + * @tc.desc: Verify the scrollBar param. + * @tc.type: FUNC + * @tc.require:AR000F3CBK + * @tc.author: liujinwei + */ +HWTEST_F(RenderListTest, AceListScrollBar006, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct ListComponent. + * @tc.expected: step1. properties are set correctly. + */ + int32_t totalCount = 8; + RefPtr listComponent = AceType::MakeRefPtr(); + + ASSERT_FALSE(renderScroll_->GetScrollBar()); + RefPtr scrollBar = AceType::MakeRefPtr(DisplayMode::ON); + + // scrollBar theme + auto scrollBarTheme = THEME_MANAGER->GetTheme(); + if (scrollBarTheme) { + scrollBar->SetMinDynamicHeight(scrollBarTheme->GetMinDynamicHeight()); + } + + listComponent->SetScrollBar(scrollBar); + listComponent->SetDirection(FlexDirection::COLUMN); + listComponent->SetFlexAlign(FlexAlign::FLEX_START); + listComponent->SetTotalCount(totalCount); + listComponent->SetOnRequestItem(EventMarker { "itemBuilder_ID" }); + listComponent->SetItemExtent(Dimension(150.0, DimensionUnit::PX)); + ASSERT_TRUE(listComponent->GetDirection() == FlexDirection::COLUMN); + ASSERT_TRUE(listComponent->GetTotalCount() == totalCount); + + /** + * @tc.steps: step2. construct RenderList with list component. + * @tc.expected: step2. properties are set correctly. + */ + renderList_->Update(listComponent); + renderList_->RegisterBuildItemCallback([this](int32_t index) -> bool { + RefPtr node = ListTestUtils::CreateRenderItem(300.0, 200.0, mockContext_); + renderList_->AddListItem(index, node); + return true; + }); + + /** + * @tc.steps: step3. trigger layout for render list. + * @tc.expected: step3. List and children layout correct. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(960.0, 960.0)); + renderList_->SetLayoutParam(layoutParam); + renderList_->ResetLayoutRange(0.0, 960.0, Offset(0.0, 0.0), Size(960.0, 960.0)); + renderList_->PerformLayout(); + + renderScroll_->AddChild(renderList_); + ASSERT_TRUE(listComponent->GetScrollBar() != nullptr); + renderScroll_->Update(listComponent); + EXPECT_TRUE(renderScroll_->NeedLayout()); + renderScroll_->SetLayoutParam(layoutParam); + renderScroll_->PerformLayout(); + RefPtr bar = renderScroll_->GetScrollBar(); + ASSERT_TRUE(bar->GetController() != nullptr); + ASSERT_TRUE(NearEqual(bar->GetMinDynamicHeight().Value(), 4.0)); +} + +/** + * @tc.name: AceListScrollBar007 + * @tc.desc: Verify List can create scrollBar. + * @tc.type: FUNC + * @tc.require:AR000F3CBL + * @tc.author: liujinwei + */ +HWTEST_F(RenderListTest, AceListScrollBar007, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct ListComponent. + * @tc.expected: step1. properties are set correctly. + */ + int32_t totalCount = 12; + RefPtr listComponent = AceType::MakeRefPtr(); + + ASSERT_FALSE(renderScroll_->GetScrollBar()); + RefPtr scrollBar = AceType::MakeRefPtr(DisplayMode::AUTO); + + // scrollBar theme + auto scrollBarTheme = THEME_MANAGER->GetTheme(); + if (scrollBarTheme) { + scrollBar->SetInactiveWidth(scrollBarTheme->GetNormalWidth()); + scrollBar->SetNormalWidth(scrollBarTheme->GetNormalWidth()); + scrollBar->SetActiveWidth(scrollBarTheme->GetActiveWidth()); + scrollBar->SetMinHeight(scrollBarTheme->GetMinHeight()); + } + + listComponent->SetScrollBar(scrollBar); + listComponent->SetDirection(FlexDirection::COLUMN); + listComponent->SetFlexAlign(FlexAlign::FLEX_START); + listComponent->SetTotalCount(totalCount); + listComponent->SetOnRequestItem(EventMarker { "itemBuilder_ID" }); + listComponent->SetItemExtent(Dimension(100.0, DimensionUnit::PX)); + ASSERT_TRUE(listComponent->GetDirection() == FlexDirection::COLUMN); + ASSERT_TRUE(listComponent->GetTotalCount() == totalCount); + + /** + * @tc.steps: step2. construct RenderList with list component. + * @tc.expected: step2. properties are set correctly. + */ + renderList_->Update(listComponent); + renderList_->RegisterBuildItemCallback([this](int32_t index) -> bool { + RefPtr node = ListTestUtils::CreateRenderItem(300.0, 100.0, mockContext_); + renderList_->AddListItem(index, node); + return true; + }); + + /** + * @tc.steps: step3. trigger layout for render list. + * @tc.expected: step3. List and children layout correct. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(300.0, 300.0)); + renderList_->SetLayoutParam(layoutParam); + renderList_->ResetLayoutRange(0.0, 300.0, Offset(0.0, 0.0), Size(300.0, 300.0)); + renderList_->PerformLayout(); + + renderScroll_->AddChild(renderList_); + ASSERT_TRUE(listComponent->GetScrollBar() != nullptr); + renderScroll_->Update(listComponent); + EXPECT_TRUE(renderScroll_->NeedLayout()); + renderScroll_->SetLayoutParam(layoutParam); + renderScroll_->PerformLayout(); + + ASSERT_TRUE(renderScroll_->GetScrollBar()); + + RefPtr bar = renderScroll_->GetScrollBar(); + ASSERT_TRUE(bar->IsScrollable() == true); + ASSERT_TRUE(bar->IsActive() == false); + ASSERT_TRUE(bar->GetController() != nullptr); + ASSERT_TRUE(NearEqual(bar->GetController()->GetInactiveWidth().Value(), 4.0)); + ASSERT_TRUE(NearEqual(bar->GetController()->GetActiveWidth().Value(), 8.0)); + ASSERT_TRUE(NearEqual(bar->GetMinHeight().Value(), 48.0)); + renderScroll_->SetMainScrollExtentForBar(renderScroll_->GetMainScrollExtent()); + bar->UpdateScrollBarRegion( + Offset(0.0, 0.0), renderScroll_->GetLayoutSize(), Offset(0.0, 0.0), renderScroll_->GetEstimatedHeight()); + + ASSERT_TRUE(NearEqual(bar->GetActiveRect().Height(), 150.0)); +} + +/** + * @tc.name: AceListScrollBar008 + * @tc.desc: Verify the scrollBar param. + * @tc.type: FUNC + * @tc.require:AR000F3CBM + * @tc.author: liujinwei + */ +HWTEST_F(RenderListTest, AceListScrollBar008, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct ListComponent. + * @tc.expected: step1. properties are set correctly. + */ + int32_t totalCount = 10; + RefPtr listComponent = AceType::MakeRefPtr(); + + ASSERT_FALSE(renderScroll_->GetScrollBar()); + RefPtr scrollBar = AceType::MakeRefPtr(DisplayMode::OFF); + + // scrollBar theme + auto scrollBarTheme = THEME_MANAGER->GetTheme(); + if (scrollBarTheme) { + scrollBar->SetInactiveWidth(scrollBarTheme->GetNormalWidth()); + scrollBar->SetNormalWidth(scrollBarTheme->GetNormalWidth()); + scrollBar->SetActiveWidth(scrollBarTheme->GetActiveWidth()); + scrollBar->SetMinHeight(scrollBarTheme->GetMinHeight()); + } + + listComponent->SetScrollBar(scrollBar); + listComponent->SetDirection(FlexDirection::COLUMN); + listComponent->SetFlexAlign(FlexAlign::FLEX_START); + listComponent->SetTotalCount(totalCount); + listComponent->SetOnRequestItem(EventMarker { "itemBuilder_ID" }); + listComponent->SetItemExtent(Dimension(200.0, DimensionUnit::PX)); + ASSERT_TRUE(listComponent->GetDirection() == FlexDirection::COLUMN); + ASSERT_TRUE(listComponent->GetTotalCount() == totalCount); + + /** + * @tc.steps: step2. construct RenderList with list component. + * @tc.expected: step2. properties are set correctly. + */ + renderList_->Update(listComponent); + renderList_->RegisterBuildItemCallback([this](int32_t index) -> bool { + RefPtr node = ListTestUtils::CreateRenderItem(300.0, 200.0, mockContext_); + renderList_->AddListItem(index, node); + return true; + }); + + /** + * @tc.steps: step3. trigger layout for render list. + * @tc.expected: step3. List and children layout correct. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(1600.0, 1600.0)); + renderList_->ResetLayoutRange(0.0, 1600.0, Offset(0.0, 0.0), Size(1600.0, 1600.0)); + renderList_->SetLayoutParam(layoutParam); + renderList_->PerformLayout(); + renderScroll_->AddChild(renderList_); + ASSERT_TRUE(listComponent->GetScrollBar() != nullptr); + renderScroll_->Update(listComponent); + EXPECT_TRUE(renderScroll_->NeedLayout()); + renderScroll_->SetLayoutParam(layoutParam); + renderScroll_->PerformLayout(); + + ASSERT_TRUE(renderScroll_->GetScrollBar()); + RefPtr bar = renderScroll_->GetScrollBar(); + renderScroll_->SetMainScrollExtentForBar(renderScroll_->GetMainScrollExtent()); + bar->UpdateScrollBarRegion( + Offset(0.0, 0.0), renderScroll_->GetLayoutSize(), Offset(0.0, 0.0), renderScroll_->GetEstimatedHeight()); + + ASSERT_TRUE(bar->IsActive() == false); + ASSERT_TRUE(bar->GetController() == nullptr); +} + +/** + * @tc.name: AceListScrollBar009 + * @tc.desc: Verify the scrollBar param. + * @tc.type: FUNC + * @tc.require:AR000F3L35 + * @tc.author: liujinwei + */ +HWTEST_F(RenderListTest, AceListScrollBar009, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct scrollBar. + * @tc.expected: step1. properties are set correctly. + */ + RefPtr scrollBar = AceType::MakeRefPtr(DisplayMode::ON); + + // scrollBar theme + auto scrollBarTheme = THEME_MANAGER->GetTheme(); + if (scrollBarTheme) { + scrollBar->SetReservedHeight(scrollBarTheme->GetReservedHeight()); + } + + ASSERT_TRUE(NearEqual(scrollBar->GetReservedHeight().Value(), 24.0)); +} + +/** + * @tc.name: AceListScrollBar010 + * @tc.desc: Verify List can create scrollBar. + * @tc.type: FUNC + * @tc.require:AR000F3L36 + * @tc.author: liujinwei + */ +HWTEST_F(RenderListTest, AceListScrollBar010, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct ScrollBar. + * @tc.expected: step1. properties are set correctly. + */ + ASSERT_FALSE(renderScroll_->GetScrollBar()); + RefPtr scrollBar = AceType::MakeRefPtr(DisplayMode::ON); + + // scrollBar theme + auto scrollBarTheme = THEME_MANAGER->GetTheme(); + if (scrollBarTheme) { + scrollBar->SetActiveWidth(scrollBarTheme->GetActiveWidth()); + scrollBar->SetTouchWidth(scrollBarTheme->GetTouchWidth()); + } + + ASSERT_TRUE(NearEqual(scrollBar->GetActiveWidth().Value(), 8.0)); + ASSERT_TRUE(NearEqual(scrollBar->GetTouchWidth().Value(), 32.0)); +} + +/** + * @tc.name: AceListScrollBar011 + * @tc.desc: Verify List can create scrollBar. + * @tc.type: FUNC + * @tc.require:AR000F3L37 + * @tc.author: liujinwei + */ +HWTEST_F(RenderListTest, AceListScrollBar011, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct ListComponent. + * @tc.expected: step1. properties are set correctly. + */ + int32_t totalCount = 12; + RefPtr listComponent = AceType::MakeRefPtr(); + + ASSERT_FALSE(renderScroll_->GetScrollBar()); + RefPtr scrollBar = AceType::MakeRefPtr(DisplayMode::ON); + + // scrollBar theme + auto scrollBarTheme = THEME_MANAGER->GetTheme(); + if (scrollBarTheme) { + scrollBar->SetInactiveWidth(scrollBarTheme->GetNormalWidth()); + scrollBar->SetNormalWidth(scrollBarTheme->GetNormalWidth()); + scrollBar->SetActiveWidth(scrollBarTheme->GetActiveWidth()); + scrollBar->SetMinHeight(scrollBarTheme->GetMinHeight()); + scrollBar->SetTouchWidth(scrollBarTheme->GetTouchWidth()); + scrollBar->SetBackgroundColor(scrollBarTheme->GetBackgroundColor()); + scrollBar->SetForegroundColor(scrollBarTheme->GetForegroundColor()); + scrollBar->SetPadding(scrollBarTheme->GetPadding()); + scrollBar->SetReservedHeight(scrollBarTheme->GetReservedHeight()); + } + + listComponent->SetScrollBar(scrollBar); + listComponent->SetDirection(FlexDirection::COLUMN); + listComponent->SetFlexAlign(FlexAlign::FLEX_START); + listComponent->SetTotalCount(totalCount); + listComponent->SetOnRequestItem(EventMarker { "itemBuilder_ID" }); + listComponent->SetItemExtent(Dimension(100.0, DimensionUnit::PX)); + ASSERT_TRUE(listComponent->GetDirection() == FlexDirection::COLUMN); + ASSERT_TRUE(listComponent->GetTotalCount() == totalCount); + + /** + * @tc.steps: step2. construct RenderList with list component. + * @tc.expected: step2. properties are set correctly. + */ + renderList_->Update(listComponent); + renderList_->RegisterBuildItemCallback([this](int32_t index) -> bool { + RefPtr node = ListTestUtils::CreateRenderItem(300.0, 100.0, mockContext_); + renderList_->AddListItem(index, node); + return true; + }); + + /** + * @tc.steps: step3. trigger layout for render list. + * @tc.expected: step3. List and children layout correct. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(300.0, 300.0)); + renderList_->SetLayoutParam(layoutParam); + renderList_->ResetLayoutRange(0.0, 300.0, Offset(0.0, 0.0), Size(300.0, 300.0)); + renderList_->PerformLayout(); + + renderScroll_->AddChild(renderList_); + ASSERT_TRUE(listComponent->GetScrollBar() != nullptr); + renderScroll_->Update(listComponent); + EXPECT_TRUE(renderScroll_->NeedLayout()); + renderScroll_->SetLayoutParam(layoutParam); + renderScroll_->PerformLayout(); + + ASSERT_TRUE(renderScroll_->GetScrollBar()); + + RefPtr bar = renderScroll_->GetScrollBar(); + ASSERT_TRUE(bar->IsScrollable() == true); + ASSERT_TRUE(bar->IsActive() == false); + ASSERT_TRUE(bar->GetController() != nullptr); + ASSERT_TRUE(NearEqual(bar->GetController()->GetInactiveWidth().Value(), 4.0)); + ASSERT_TRUE(NearEqual(bar->GetController()->GetActiveWidth().Value(), 8.0)); + ASSERT_TRUE(NearEqual(bar->GetMinHeight().Value(), 48.0)); + renderScroll_->SetMainScrollExtentForBar(renderScroll_->GetMainScrollExtent()); + bar->UpdateScrollBarRegion( + Offset(0.0, 0.0), renderScroll_->GetLayoutSize(), Offset(0.0, 0.0), renderScroll_->GetEstimatedHeight()); + ASSERT_TRUE(NearEqual(bar->GetActiveRect().Height(), 138.0)); + renderScroll_->JumpToPosition(2000.0); + + renderScroll_->SetMainScrollExtentForBar(renderScroll_->GetMainScrollExtent()); + bar->UpdateScrollBarRegion(Offset(0.0, std::abs(renderScroll_->GetScrollBarOutBoundaryExtent())), + renderScroll_->GetLayoutSize(), renderScroll_->GetLastOffset(), renderScroll_->GetEstimatedHeight()); + ASSERT_TRUE(NearEqual(bar->GetActiveRect().Height(), 69.0)); + ASSERT_TRUE(NearEqual(bar->GetActiveRect().Bottom(), 276.0)); +} + +/** + * @tc.name: AceListScrollBar012 + * @tc.desc: Verify List can create scrollBar. + * @tc.type: FUNC + * @tc.require:AR000F3L37 + * @tc.author: liujinwei + */ +HWTEST_F(RenderListTest, AceListScrollBar012, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct ListComponent. + * @tc.expected: step1. properties are set correctly. + */ + int32_t totalCount = 12; + RefPtr listComponent = AceType::MakeRefPtr(); + + ASSERT_FALSE(renderScroll_->GetScrollBar()); + RefPtr scrollBar = AceType::MakeRefPtr(DisplayMode::ON); + + // scrollBar theme + auto scrollBarTheme = THEME_MANAGER->GetTheme(); + if (scrollBarTheme) { + scrollBar->SetMinHeight(scrollBarTheme->GetMinHeight()); + scrollBar->SetPadding(scrollBarTheme->GetPadding()); + scrollBar->SetReservedHeight(scrollBarTheme->GetReservedHeight()); + } + + listComponent->SetScrollBar(scrollBar); + listComponent->SetDirection(FlexDirection::COLUMN); + listComponent->SetFlexAlign(FlexAlign::FLEX_START); + listComponent->SetTotalCount(totalCount); + listComponent->SetOnRequestItem(EventMarker { "itemBuilder_ID" }); + listComponent->SetItemExtent(Dimension(100.0, DimensionUnit::PX)); + + /** + * @tc.steps: step2. construct RenderList with list component. + * @tc.expected: step2. properties are set correctly. + */ + renderList_->Update(listComponent); + renderList_->RegisterBuildItemCallback([this](int32_t index) -> bool { + RefPtr node = ListTestUtils::CreateRenderItem(300.0, 100.0, mockContext_); + renderList_->AddListItem(index, node); + return true; + }); + + /** + * @tc.steps: step3. trigger layout for render list. + * @tc.expected: step3. List and children layout correct. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(50.0, 50.0)); + renderList_->SetLayoutParam(layoutParam); + renderList_->ResetLayoutRange(0.0, 50.0, Offset(0.0, 0.0), Size(50.0, 50.0)); + renderList_->PerformLayout(); + + renderScroll_->AddChild(renderList_); + ASSERT_TRUE(listComponent->GetScrollBar() != nullptr); + renderScroll_->Update(listComponent); + EXPECT_TRUE(renderScroll_->NeedLayout()); + renderScroll_->SetLayoutParam(layoutParam); + renderScroll_->PerformLayout(); + + ASSERT_TRUE(renderScroll_->GetScrollBar()); + + RefPtr bar = renderScroll_->GetScrollBar(); + ASSERT_TRUE(bar->IsScrollable() == true); + ASSERT_TRUE(bar->IsActive() == false); + ASSERT_TRUE(bar->GetController() != nullptr); + ASSERT_TRUE(NearEqual(bar->GetMinHeight().Value(), 48.0)); + renderScroll_->SetMainScrollExtentForBar(renderScroll_->GetMainScrollExtent()); + bar->UpdateScrollBarRegion( + Offset(0.0, 0.0), renderScroll_->GetLayoutSize(), Offset(0.0, 0.0), renderScroll_->GetEstimatedHeight()); + ASSERT_TRUE(NearEqual(bar->GetActiveRect().Height(), 48.0)); +} +#endif + +/** + * @tc.name: RenderListItemCardTransitionTest001 + * @tc.desc: Verify that the list item can get correct RRect. + * @tc.type: FUNC + * @tc.require: AR000F3CA8 + * @tc.author: chenlien + */ +HWTEST_F(RenderListTest, RenderListItemCardTransitionTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct ListComponent by column direction. + * @tc.expected: step1. properties are set correctly. + */ + int32_t totalCount = 10; + RefPtr listComponent = AceType::MakeRefPtr(); + listComponent->SetDirection(FlexDirection::COLUMN); + listComponent->SetFlexAlign(FlexAlign::FLEX_START); + listComponent->SetTotalCount(totalCount); + listComponent->SetOnRequestItem(EventMarker { "itemBuilder_ID" }); + ASSERT_TRUE(listComponent->GetDirection() == FlexDirection::COLUMN); + ASSERT_TRUE(listComponent->GetTotalCount() == totalCount); + + /** + * @tc.steps: step2. construct RenderList with list component. + * @tc.expected: step2. properties are set correctly. + */ + renderList_->Update(listComponent); + renderList_->RegisterBuildItemCallback([this](int32_t index) -> bool { + RefPtr node = ListTestUtils::CreateRenderItem(300.0, 300.0, mockContext_); + renderList_->AddListItem(index, node); + return true; + }); + + /** + * @tc.steps: step3. trigger layout for render list. + * @tc.expected: step3. get listItem rrect correct. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(1000.0, 1000.0)); + renderList_->ResetLayoutRange(0.0, 1000.0, Offset(0.0, 0.0), Size(1000.0, 1000.0)); + renderList_->SetLayoutParam(layoutParam); + renderList_->PerformLayout(); + int32_t index = 0; + for (auto iter : renderList_->GetItems()) { + auto item = AceType::DynamicCast(iter.second->GetFirstChild()); + ASSERT_TRUE(item); + ASSERT_TRUE(iter.second->GetLayoutSize() == Size(300.0, 300.0)); + ASSERT_TRUE(iter.second->GetPosition() == Offset(0.0, 300.0 * index)); + RRect rrect = item->GetRRect(); + NearEqual(rrect.GetCorner().topLeftRadius.GetX().Value(), 10.0); + index++; + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/marquee/BUILD.gn b/frameworks/core/components/test/unittest/marquee/BUILD.gn new file mode 100644 index 00000000..a16d98dc --- /dev/null +++ b/frameworks/core/components/test/unittest/marquee/BUILD.gn @@ -0,0 +1,234 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/backenduicomponent/marquee" + +ohos_unittest("MarqueeCreatorTest") { + module_out_path = module_output_path + + sources = [ "marquee_creator_test.cpp" ] + + configs = [ + ":config_json_creator_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "$ace_root/frameworks/core/components/test:json", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + deps += [ "$ace_root/frameworks/bridge:js_framework_ohos" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_json_creator_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +ohos_unittest("RenderMarqueeTest") { + module_out_path = module_output_path + + sources = [ + # accessibility + "$ace_root/frameworks/core/accessibility/accessibility_node.cpp", + + # animation + "$ace_root/frameworks/core/animation/animator.cpp", + "$ace_root/frameworks/core/animation/anticipate_curve.cpp", + "$ace_root/frameworks/core/animation/cubic_curve.cpp", + "$ace_root/frameworks/core/animation/curves.cpp", + "$ace_root/frameworks/core/animation/scheduler.cpp", + + #base + "$ace_root/adapter/common/cpp/thread_util.cpp", + "$ace_root/adapter/ohos/osal/log_wrapper.cpp", + "$ace_root/frameworks/base/geometry/matrix4.cpp", + "$ace_root/frameworks/base/json/json_util.cpp", + "$ace_root/frameworks/base/log/dump_log.cpp", + "$ace_root/frameworks/base/thread/background_task_executor.cpp", + "$ace_root/frameworks/base/utils/base_id.cpp", + + # common + "$ace_root/frameworks/core/common/ace_engine.cpp", + "$ace_root/frameworks/core/common/event_manager.cpp", + "$ace_root/frameworks/core/common/focus_animation_manager.cpp", + "$ace_root/frameworks/core/common/font_loader.cpp", + "$ace_root/frameworks/core/common/font_manager.cpp", + "$ace_root/frameworks/core/common/window.cpp", + "$ace_root/frameworks/core/components/test/json/json_frontend.cpp", + "$ace_root/frameworks/core/mock/mock_watch_dog.cpp", + "$ace_root/frameworks/core/pipeline/pipeline_context.cpp", + + # components + "$ace_root/frameworks/core/components/box/box_component.cpp", + "$ace_root/frameworks/core/components/display/display_component.cpp", + "$ace_root/frameworks/core/components/overlay/overlay_component.cpp", + "$ace_root/frameworks/core/components/page/page_component.cpp", + "$ace_root/frameworks/core/components/root/root_component.cpp", + "$ace_root/frameworks/core/components/text/text_component.cpp", + "$ace_root/frameworks/core/pipeline/base/component.cpp", + "$ace_root/frameworks/core/pipeline/base/composed_component.cpp", + + # dsl + "$ace_root/frameworks/core/pipeline/base/constants.cpp", + + # elements + "$ace_root/frameworks/core/components/bubble/bubble_element.cpp", + "$ace_root/frameworks/core/components/display/display_element.cpp", + "$ace_root/frameworks/core/components/page/page_element.cpp", + "$ace_root/frameworks/core/components/page_transition/page_transition_element.cpp", + "$ace_root/frameworks/core/components/root/root_element.cpp", + "$ace_root/frameworks/core/components/stack/stack_element.cpp", + "$ace_root/frameworks/core/components/stage/stage_element.cpp", + "$ace_root/frameworks/core/components/transform/render_transform.cpp", + "$ace_root/frameworks/core/components/transition/transition_element.cpp", + "$ace_root/frameworks/core/components/tween/tween_element.cpp", + "$ace_root/frameworks/core/pipeline/base/component_group_element.cpp", + "$ace_root/frameworks/core/pipeline/base/composed_element.cpp", + "$ace_root/frameworks/core/pipeline/base/element.cpp", + "$ace_root/frameworks/core/pipeline/base/render_element.cpp", + "$ace_root/frameworks/core/pipeline/base/sole_child_element.cpp", + + # others + "$ace_root/frameworks/core/event/back_end_event_manager.cpp", + "$ace_root/frameworks/core/event/multimodal/multimodal_manager.cpp", + "$ace_root/frameworks/core/event/multimodal/multimodal_scene.cpp", + + # focus + "$ace_root/frameworks/core/focus/focus_node.cpp", + + # gestures + "$ace_root/frameworks/core/gestures/drag_recognizer.cpp", + "$ace_root/frameworks/core/gestures/gesture_recognizer.cpp", + "$ace_root/frameworks/core/gestures/gesture_referee.cpp", + "$ace_root/frameworks/core/gestures/velocity_tracker.cpp", + + # image + "$ace_root/frameworks/core/image/flutter_image_cache.cpp", + "$ace_root/frameworks/core/image/image_cache.cpp", + + # layout + "$ace_root/frameworks/core/components/common/layout/grid_column_info.cpp", + "$ace_root/frameworks/core/components/common/layout/grid_container_info.cpp", + "$ace_root/frameworks/core/components/common/layout/grid_system_manager.cpp", + + # properties + "$ace_root/frameworks/core/components/box/render_box.cpp", + "$ace_root/frameworks/core/components/common/properties/alignment.cpp", + "$ace_root/frameworks/core/components/common/properties/border.cpp", + "$ace_root/frameworks/core/components/common/properties/border_edge.cpp", + "$ace_root/frameworks/core/components/common/properties/color.cpp", + "$ace_root/frameworks/core/components/common/properties/decoration.cpp", + "$ace_root/frameworks/core/components/common/properties/page_transition_option.cpp", + "$ace_root/frameworks/core/components/common/properties/scroll_bar.cpp", + "$ace_root/frameworks/core/components/common/properties/text_style.cpp", + + # rendering + "$ace_root/frameworks/core/common/vibrator/vibrator_proxy.cpp", + "$ace_root/frameworks/core/components/box/render_box_base.cpp", + "$ace_root/frameworks/core/components/bubble/render_bubble.cpp", + "$ace_root/frameworks/core/components/display/render_display.cpp", + "$ace_root/frameworks/core/components/focus_animation/render_focus_animation.cpp", + "$ace_root/frameworks/core/components/marquee/render_marquee.cpp", + "$ace_root/frameworks/core/components/refresh/render_refresh.cpp", + "$ace_root/frameworks/core/components/root/render_root.cpp", + "$ace_root/frameworks/core/components/scroll/render_multi_child_scroll.cpp", + "$ace_root/frameworks/core/components/scroll/render_scroll.cpp", + "$ace_root/frameworks/core/components/scroll/render_single_child_scroll.cpp", + "$ace_root/frameworks/core/components/scroll/scroll_bar_controller.cpp", + "$ace_root/frameworks/core/components/stack/render_stack.cpp", + "$ace_root/frameworks/core/components/stage/render_stage.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/mock_flutter_font_manager.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/mock_render_node_factory.cpp", + "$ace_root/frameworks/core/components/text/render_text.cpp", + "$ace_root/frameworks/core/components/text_span/render_text_span.cpp", + "$ace_root/frameworks/core/pipeline/base/render_node.cpp", + + # theme + "$ace_root/frameworks/core/components/theme/app_theme.cpp", + "$ace_root/frameworks/core/components/theme/theme_attributes.cpp", + "$ace_root/frameworks/core/components/theme/theme_constants.cpp", + "$ace_root/frameworks/core/components/theme/theme_manager.cpp", + "$ace_root/frameworks/core/components/theme/theme_utils.cpp", + "$root_out_dir/ace/framework/core/components/theme/theme_constants_default.cpp", + "render_marquee_test.cpp", + + # mock + "$ace_root/frameworks/core/components/test/unittest/mock/ace_trace_mock.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/event_report_mock.cpp", + "$ace_root/frameworks/core/mock/mock_ace_application_info.cpp", + "$ace_root/frameworks/core/mock/mock_system_properties.cpp", + ] + + # add sources only needed by wearable like watch. + if (is_wearable_product) { + sources += [ "$root_out_dir/ace/framework/core/components/theme/theme_constants_watch.cpp" ] + } + + # add sources needed by phone and TV. wearable like watch do not need them + if (!is_wearable_product) { + sources += [ + # theme + "$root_out_dir/ace/framework/core/components/theme/theme_constants_tv.cpp", + ] + } + + configs = [ + ":config_render_marquee_test", + "$ace_root:ace_test_config", + "$flutter_root:flutter_config", + "//third_party/cJSON:cJSON_config", + ] + + deps = [ + "$ace_root:third_party_cjson", + "$ace_root/frameworks/core/components/theme:build_theme_code", + "$flutter_root:ace_skia_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + external_deps = [ "hiviewdfx_hilog_native:libhilog" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_render_marquee_test") { + visibility = [ ":*" ] + include_dirs = [ + "//utils/native/base/include", + "$ace_root", + ] +} + +group("unittest") { + testonly = true + deps = [ + ":MarqueeCreatorTest", + ":RenderMarqueeTest", + ] +} diff --git a/frameworks/core/components/test/unittest/marquee/marquee_creator_test.cpp b/frameworks/core/components/test/unittest/marquee/marquee_creator_test.cpp new file mode 100644 index 00000000..8c1b9ac9 --- /dev/null +++ b/frameworks/core/components/test/unittest/marquee/marquee_creator_test.cpp @@ -0,0 +1,192 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "core/components/marquee/marquee_component.h" +#include "core/components/test/json/marquee_creator.h" +#include "core/components/theme/theme_constants.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +const std::string DSL_VALUE = "testValue"; +const Color DSL_TEXT_COLOR = Color(0xff000000); +const Dimension DSL_FONT_SIZE = Dimension(30.0, DimensionUnit::PX); +const FontWeight DSL_FONT_WEIGHT = FontWeight::W100; +const std::vector DSL_FONT_FAMILIES = { "normal", "sans-serif", "serif", "monospace" }; +constexpr double DSL_SCROLL_AMOUNT = 10.0; +constexpr int32_t DSL_LOOP = 3; +const MarqueeDirection DSL_DIRECTION = MarqueeDirection::RIGHT; +const std::string DSL_BOUNCE = "onBounceEventId"; +const std::string DSL_FINISH = "onFinishEventId"; +const std::string DSL_START = "onStartEventId"; +const std::vector DEFAULT_FONT_FAMILIES = {}; +const Dimension DEFAULT_MARQUEE_FONT_SIZE = Dimension(37.5, DimensionUnit::PX); + +RefPtr CreateMarqueeComponent(const std::string& json) +{ + const auto buffer = reinterpret_cast(json.c_str()); + size_t length = json.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(buffer, length); + return AceType::DynamicCast(component); +} + +void CheckMarqueeDefaultValue(const RefPtr& marquee) +{ + ASSERT_TRUE(marquee); + EXPECT_TRUE(marquee->GetValue().empty()); + + const auto& textStyle = marquee->GetTextStyle(); + auto themeManager = AceType::MakeRefPtr(); + auto themeConstants = themeManager->GetThemeConstants(); + ASSERT_NE(themeConstants, nullptr); + EXPECT_EQ(textStyle.GetTextColor().GetValue(), themeConstants->GetColor(THEME_OHOS_COLOR_TEXT_PRIMARY).GetValue()); + EXPECT_EQ(textStyle.GetFontSize().Unit(), DEFAULT_MARQUEE_FONT_SIZE.Unit()); + EXPECT_TRUE(NearEqual(textStyle.GetFontSize().Value(), DEFAULT_MARQUEE_FONT_SIZE.Value())); + EXPECT_EQ(textStyle.GetFontWeight(), FontWeight::NORMAL); + EXPECT_EQ(textStyle.GetFontFamilies(), DEFAULT_FONT_FAMILIES); + + EXPECT_TRUE(NearEqual(marquee->GetScrollAmount(), DEFAULT_MARQUEE_SCROLL_AMOUNT)); + EXPECT_EQ(marquee->GetLoop(), DEFAULT_MARQUEE_LOOP); + EXPECT_EQ(marquee->GetDirection(), MarqueeDirection::LEFT); + EXPECT_TRUE(marquee->GetBounceEventId().IsEmpty()); + EXPECT_TRUE(marquee->GetFinishEventId().IsEmpty()); + EXPECT_TRUE(marquee->GetStartEventId().IsEmpty()); +} + +} // namespace + +class MarqueeCreatorTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); +}; + +void MarqueeCreatorTest::SetUpTestCase() {} +void MarqueeCreatorTest::TearDownTestCase() {} +void MarqueeCreatorTest::SetUp() {} +void MarqueeCreatorTest::TearDown() {} + +/** + * @tc.name: MarqueeCreator001 + * @tc.desc: Test parse marquee component successfully from dsl that contains all attributes. + * @tc.type: FUNC + * @tc.require: AR000DAVDJ AR000DAVDK AR000DAVDL AR000DAVDM AR000DAVDN + * @tc.author: liruokun + */ +HWTEST_F(MarqueeCreatorTest, MarqueeCreator001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct the json string with each attribute, create marquee component with the json. + * @tc.expected: step1. Marquee component successfully created, each attribute equals with the value in json. + */ + std::string dslJson = "{ " + " \"className\": \"Marquee\", " + " \"value\": \"testValue\", " + " \"scrollAmount\": 10, " + " \"loop\": 3, " + " \"direction\": \"right\", " + " \"bounce\": \"onBounceEventId\", " + " \"finish\": \"onFinishEventId\", " + " \"start\": \"onStartEventId\", " + " \"textStyle\": { " + " \"className\": \"TextStyle\", " + " \"fontSize\": 30, " + " \"fontWeight\": 0, " + " \"fontFamilies\": [ " + " \"normal\", " + " \"sans-serif\", " + " \"serif\", " + " \"monospace\" " + " ], " + " \"color\": { " + " \"className\": \"Color\", " + " \"value\": 4278190080 " + " } " + " } " + "} "; + + RefPtr marquee = CreateMarqueeComponent(dslJson); + ASSERT_TRUE(marquee); + EXPECT_EQ(marquee->GetValue(), DSL_VALUE); + + const auto& textStyle = marquee->GetTextStyle(); + EXPECT_EQ(textStyle.GetTextColor().GetValue(), DSL_TEXT_COLOR.GetValue()); + EXPECT_EQ(textStyle.GetFontSize().Unit(), DSL_FONT_SIZE.Unit()); + EXPECT_TRUE(NearEqual(textStyle.GetFontSize().Value(), DSL_FONT_SIZE.Value())); + EXPECT_EQ(textStyle.GetFontWeight(), DSL_FONT_WEIGHT); + EXPECT_EQ(textStyle.GetFontFamilies(), DSL_FONT_FAMILIES); + + EXPECT_TRUE(NearEqual(marquee->GetScrollAmount(), DSL_SCROLL_AMOUNT)); + EXPECT_EQ(marquee->GetLoop(), DSL_LOOP); + EXPECT_EQ(marquee->GetDirection(), DSL_DIRECTION); + EXPECT_EQ(marquee->GetBounceEventId(), DSL_BOUNCE); + EXPECT_EQ(marquee->GetFinishEventId(), DSL_FINISH); + EXPECT_EQ(marquee->GetStartEventId(), DSL_START); +} + +/** + * @tc.name: MarqueeCreator002 + * @tc.desc: Test parse marquee successfully from dsl json with no attributes defined. + * @tc.type: FUNC + * @tc.require: AR000DAVDJ AR000DAVDK AR000DAVDL AR000DAVDM AR000DAVDN + * @tc.author: liruokun + */ +HWTEST_F(MarqueeCreatorTest, MarqueeCreator002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct json string with no attributes, then create marquee component with the json. + * @tc.expected: step1. Marquee component successfully created, each attribute equals default value. + */ + std::string dslJson = "{ \"className\": \"Marquee\" }"; + RefPtr marquee = CreateMarqueeComponent(dslJson); + CheckMarqueeDefaultValue(marquee); +} + +/** + * @tc.name: MarqueeCreator003 + * @tc.desc: Test parse marquee from dsl json with illegal attributes. + * @tc.type: FUNC + * @tc.require: AR000DAVDJ AR000DAVDK AR000DAVDL AR000DAVDM AR000DAVDN + * @tc.author: liruokun + */ +HWTEST_F(MarqueeCreatorTest, MarqueeCreator003, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct json with illegal value, then create marquee component with the json. + * @tc.expected: step1. Marquee component successfully created, each attribute equals default value. + */ + std::string dslJson = "{ " + " \"className\": \"Marquee\", " + " \"value\": 10, " + " \"scrollAmount\": \"scrollAmount\", " + " \"loop\": \"loop\", " + " \"direction\": 10, " + " \"bounce\": 10, " + " \"finish\": 10, " + " \"start\": 10, " + " \"textStyle\": \"textStyle\" " + "} "; + RefPtr marquee = CreateMarqueeComponent(dslJson); + CheckMarqueeDefaultValue(marquee); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/marquee/render_marquee_test.cpp b/frameworks/core/components/test/unittest/marquee/render_marquee_test.cpp new file mode 100644 index 00000000..e83cbbba --- /dev/null +++ b/frameworks/core/components/test/unittest/marquee/render_marquee_test.cpp @@ -0,0 +1,562 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include "gtest/gtest.h" + +#include "base/log/log.h" +#include "core/components/marquee/marquee_component.h" +#include "core/components/test/unittest/mock/mock_render_depend.h" +#include "core/pipeline/base/constants.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +using MarqueeEventCallback = std::function; + +constexpr int32_t SURFACE_WIDTH = 1080; +constexpr int32_t SURFACE_HEIGHT = 2244; +constexpr uint64_t MILLI_TO_NANO = 1000000; +constexpr uint64_t VSYNC_FIRST_FRAME = 1; +constexpr int64_t VSYNC_INTERVAL_MILLI = 16; +constexpr int64_t VSYNC_INTERVAL_NANO = VSYNC_INTERVAL_MILLI * MILLI_TO_NANO; +constexpr double DEFAULT_MARQUEE_SCROLL_DELAY = 85.0; +constexpr uint32_t LOOP_COUNT_FOREVER = 100; // the loop count we treat as loop forever. +constexpr double SCROLL_AMOUNT_EQUAL_EPSILON = 0.001; // the accuracy when check position. + +const std::string CUSTOM_TEXT = "marqueeText"; +constexpr double CUSTOM_SCROLL_AMOUNT = 1000.0; +constexpr double CUSTOM_SCROLL_AMOUNT_INVALID = -10.0; +constexpr int32_t CUSTOM_LOOP = 10; +constexpr int32_t CUSTOM_LOOP_INVALID = -10; +uint64_t g_runningNano = 0; + +class TestMarqueeEventHandler : public MockEventHandler { +public: + explicit TestMarqueeEventHandler(MarqueeEventCallback callback) : callback_(callback) {}; + ~TestMarqueeEventHandler() = default; + + void HandleAsyncEvent(const EventMarker& eventMarker) override + { + if (callback_) { + callback_(eventMarker.GetData().eventId); + } + }; + +private: + MarqueeEventCallback callback_; +}; + +class MockRenderMarquee : public RenderMarquee { + DECLARE_ACE_TYPE(MockRenderMarquee, RenderMarquee); + +public: + MockRenderMarquee() = default; + ~MockRenderMarquee() override = default; + + static RefPtr g_mockRenderMarquee; + +protected: + TextDirection GetTextDirection(const std::string& text) const override + { + return TextDirection::LTR; + } +}; + +void PrepareRender(const RefPtr& context, const RefPtr& component) +{ + g_runningNano = 0; + auto pageComponent = AceType::MakeRefPtr(0, component); + context->SetTimeProvider([] { return g_runningNano; }); + context->SetupRootElement(); + context->PushPage(pageComponent); + context->OnVsyncEvent(g_runningNano, 0); + context->OnSurfaceChanged(SURFACE_WIDTH, SURFACE_HEIGHT); +} + +void MockVsync(const RefPtr& context, uint64_t nanoDuration) +{ + uint64_t runningNano = VSYNC_FIRST_FRAME; + while (runningNano < nanoDuration) { + runningNano += VSYNC_INTERVAL_NANO; + g_runningNano = runningNano; + context->OnVsyncEvent(runningNano, 0); + } + // vsync one more time to trigger bounce, finish callback + runningNano += VSYNC_INTERVAL_NANO; + g_runningNano = runningNano; + context->OnVsyncEvent(runningNano, 0); +} + +RefPtr CreateDefaultMarquee() +{ + RefPtr component = AceType::MakeRefPtr(); + component->SetValue(CUSTOM_TEXT); + component->SetBounceEventId(EventMarker(MARQUEE_BOUNCE)); + component->SetStartEventId(EventMarker(MARQUEE_START)); + component->SetFinishEventId(EventMarker(MARQUEE_FINISH)); + return component; +} + +uint64_t CalculateLoopDuration(double scrollAmount) +{ + ACE_DCHECK(scrollAmount > 0); + ACE_DCHECK(!NearZero(scrollAmount)); + double millisecond = static_cast(SURFACE_WIDTH) * DEFAULT_MARQUEE_SCROLL_DELAY / scrollAmount; + // Translate raw duration to vsync duration + uint64_t vsyncCount = static_cast(std::ceil(millisecond / VSYNC_INTERVAL_MILLI)); + return MILLI_TO_NANO * vsyncCount * VSYNC_INTERVAL_MILLI; +} + +// Mock vsync and check marquee whether loop as expected +void CheckLoopCount( + const RefPtr& context, const RefPtr& component, uint32_t expectedLoop) +{ + uint32_t bounceCount = 0; + RefPtr eventHandler = + AceType::MakeRefPtr([&bounceCount](const std::string& eventId) { + if (eventId == MARQUEE_BOUNCE) { + bounceCount++; + } + }); + context->RegisterEventHandler(eventHandler); + PrepareRender(context, component); + + uint64_t loopOnceDuration = CalculateLoopDuration(CUSTOM_SCROLL_AMOUNT); + MockVsync(context, loopOnceDuration * expectedLoop); + GTEST_LOG_(INFO) << "CheckLoopCount expectedLoop=" << expectedLoop << ", bounceCount=" << bounceCount; + EXPECT_TRUE(bounceCount == expectedLoop); +} + +double GetTextChildPosition() +{ + if (!MockRenderMarquee::g_mockRenderMarquee) { + EXPECT_TRUE(false); + return 0.0; + } + const auto& children = MockRenderMarquee::g_mockRenderMarquee->GetChildren(); + if (children.empty()) { + EXPECT_TRUE(false); + return 0.0; + } + auto textChild = children.front(); + if (!textChild) { + EXPECT_TRUE(false); + return 0.0; + } + return textChild->GetPosition().GetX(); +} + +// Mock vsync and check marquee whether move expected distance in one vsync. +// Note: "scrollAmount" should not be zero. +void CheckScrollAmount(const RefPtr& context, double scrollAmount) +{ + auto startPosition = GetTextChildPosition(); + MockVsync(context, VSYNC_INTERVAL_NANO); + uint32_t duration = static_cast( + MockRenderMarquee::g_mockRenderMarquee->GetLayoutSize().Width() * DEFAULT_MARQUEE_SCROLL_DELAY / scrollAmount); + double expectPosition = startPosition * (1.0 - 2.0 * static_cast(VSYNC_INTERVAL_MILLI) / duration); + auto endPosition = GetTextChildPosition(); + GTEST_LOG_(INFO) << "CheckScrollAmount expectPosition=" << expectPosition << ", endPosition=" << endPosition; + EXPECT_TRUE(NearEqual(expectPosition, endPosition, SCROLL_AMOUNT_EQUAL_EPSILON)); +} + +} // namespace + +class RenderMarqueeTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); + +protected: + RefPtr context_; + RefPtr frontend_; +}; + +void RenderMarqueeTest::SetUpTestCase() {} +void RenderMarqueeTest::TearDownTestCase() {} + +void RenderMarqueeTest::SetUp() +{ + frontend_ = Frontend::CreateDefault(); + context_ = RenderTestUtils::GetMockPipelineContext(frontend_); +} + +void RenderMarqueeTest::TearDown() +{ + frontend_ = nullptr; + context_ = nullptr; +} + +RefPtr MockRenderMarquee::g_mockRenderMarquee = nullptr; + +RefPtr RenderMarquee::Create() +{ + MockRenderMarquee::g_mockRenderMarquee = AceType::MakeRefPtr(); + return MockRenderMarquee::g_mockRenderMarquee; +} + +/** + * @tc.name: RenderMarqueeLoop001 + * @tc.desc: Test marquee could loop continuously by default. + * @tc.type: FUNC + * @tc.require: AR000DAVDL + * @tc.author: liruokun + */ +HWTEST_F(RenderMarqueeTest, RenderMarqueeLoop001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Build a marquee component with default loop value. + * @tc.expected: step1. Default loop value is -1. + */ + auto component = CreateDefaultMarquee(); + component->SetScrollAmount(CUSTOM_SCROLL_AMOUNT); + EXPECT_EQ(component->GetLoop(), DEFAULT_MARQUEE_LOOP); + + /** + * @tc.steps: step2. Mock Vsync and check whether marquee will loop forever. + * @tc.expected: step2. Marquee will loop forever. + */ + CheckLoopCount(context_, component, LOOP_COUNT_FOREVER); +} + +/** + * @tc.name: RenderMarqueeLoop002 + * @tc.desc: Test marquee could loop as user defined. + * @tc.type: FUNC + * @tc.require: AR000DAVDL + * @tc.author: liruokun + */ +HWTEST_F(RenderMarqueeTest, RenderMarqueeLoop002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Build a marquee component with custom loop value. + */ + auto component = CreateDefaultMarquee(); + component->SetScrollAmount(CUSTOM_SCROLL_AMOUNT); + component->SetLoop(CUSTOM_LOOP); + + /** + * @tc.steps: step2. Mock Vsync and check whether marquee will loop defined times. + * @tc.expected: step2. Marquee loop times is same as custom defined. + */ + CheckLoopCount(context_, component, CUSTOM_LOOP); +} + +/** + * @tc.name: RenderMarqueeLoop003 + * @tc.desc: Test marquee loop value is invalid. + * @tc.type: FUNC + * @tc.require: AR000DAVDL + * @tc.author: liruokun + */ +HWTEST_F(RenderMarqueeTest, RenderMarqueeLoop003, TestSize.Level1) +{ + /** + * @tc.steps: step1. Build a marquee component with invalid custom loop value. + */ + auto component = CreateDefaultMarquee(); + component->SetScrollAmount(CUSTOM_SCROLL_AMOUNT); + component->SetLoop(CUSTOM_LOOP_INVALID); + + /** + * @tc.steps: step2. Mock Vsync and check whether marquee will loop forever. + * @tc.expected: step2. Marquee will loop forever. + */ + CheckLoopCount(context_, component, LOOP_COUNT_FOREVER); +} + +/** + * @tc.name: RenderMarqueeScrollAmount001 + * @tc.desc: Test marquee default scroll amount. + * @tc.type: FUNC + * @tc.require: AR000DAVDK + * @tc.author: liruokun + */ +HWTEST_F(RenderMarqueeTest, RenderMarqueeScrollAmount001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Build a marquee component with default scroll amount. + */ + auto component = CreateDefaultMarquee(); + PrepareRender(context_, component); + + /** + * @tc.steps: step2. Mock Vsync and check whether text child move expected distance. + * @tc.expected: step2. Text child moved expected distance during this vsync. + */ + CheckScrollAmount(context_, DEFAULT_MARQUEE_SCROLL_AMOUNT); +} + +/** + * @tc.name: RenderMarqueeScrollAmount002 + * @tc.desc: Test marquee custom scroll amount. + * @tc.type: FUNC + * @tc.require: AR000DAVDK + * @tc.author: liruokun + */ +HWTEST_F(RenderMarqueeTest, RenderMarqueeScrollAmount002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Build a marquee component with default scroll amount. + */ + auto component = CreateDefaultMarquee(); + component->SetScrollAmount(CUSTOM_SCROLL_AMOUNT); + PrepareRender(context_, component); + + /** + * @tc.steps: step2. Mock Vsync and check whether text child move expected distance. + * @tc.expected: step2. Text child moved expected distance during this vsync. + */ + CheckScrollAmount(context_, CUSTOM_SCROLL_AMOUNT); +} + +/** + * @tc.name: RenderMarqueeScrollAmount003 + * @tc.desc: Test marquee use default scroll amount when an invalid value is set. + * @tc.type: FUNC + * @tc.require: AR000DAVDK + * @tc.author: liruokun + */ +HWTEST_F(RenderMarqueeTest, RenderMarqueeScrollAmount003, TestSize.Level1) +{ + /** + * @tc.steps: step1. Build a marquee component with default scroll amount. + */ + auto component = CreateDefaultMarquee(); + component->SetScrollAmount(CUSTOM_SCROLL_AMOUNT_INVALID); + PrepareRender(context_, component); + + /** + * @tc.steps: step2. Mock Vsync and check whether text child move expected distance. + * @tc.expected: step2. Text child moved expected distance during this vsync. + */ + CheckScrollAmount(context_, DEFAULT_MARQUEE_SCROLL_AMOUNT); +} + +/** + * @tc.name: RenderMarqueeDirection001 + * @tc.desc: Test marquee default scroll direction. + * @tc.type: FUNC + * @tc.require: AR000DAVDJ + * @tc.author: liruokun + */ +HWTEST_F(RenderMarqueeTest, RenderMarqueeDirection001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Build a marquee component with default direction. + */ + auto component = CreateDefaultMarquee(); + PrepareRender(context_, component); + + /** + * @tc.steps: step2. Mock Vsync and check whether text child move left. + * @tc.expected: step2. Text child moved to left. + */ + auto startPosition = GetTextChildPosition(); + MockVsync(context_, VSYNC_INTERVAL_NANO); + auto endPosition = GetTextChildPosition(); + EXPECT_TRUE(endPosition < startPosition); +} + +/** + * @tc.name: RenderMarqueeDirection002 + * @tc.desc: Test marquee scroll direction to right. + * @tc.type: FUNC + * @tc.require: AR000DAVDJ + * @tc.author: liruokun + */ +HWTEST_F(RenderMarqueeTest, RenderMarqueeDirection002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Build a marquee component with default direction. + */ + auto component = CreateDefaultMarquee(); + component->SetDirection(MarqueeDirection::RIGHT); + PrepareRender(context_, component); + + /** + * @tc.steps: step2. Mock Vsync and check whether text child move right. + * @tc.expected: step2. Text child moved to right. + */ + auto startPosition = GetTextChildPosition(); + MockVsync(context_, VSYNC_INTERVAL_NANO); + auto endPosition = GetTextChildPosition(); + EXPECT_TRUE(endPosition > startPosition); +} + +/** + * @tc.name: RenderMarqueeEvent001 + * @tc.desc: Test marquee bounce event. + * @tc.type: FUNC + * @tc.require: AR000DAVDM + * @tc.author: liruokun + */ +HWTEST_F(RenderMarqueeTest, RenderMarqueeEvent001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Build a marquee component and register bounce handler. + */ + auto component = CreateDefaultMarquee(); + component->SetScrollAmount(CUSTOM_SCROLL_AMOUNT); + uint32_t bounceCount = 0; + RefPtr eventHandler = + AceType::MakeRefPtr([&bounceCount](const std::string& eventId) { + if (eventId == MARQUEE_BOUNCE) { + bounceCount++; + } + }); + context_->RegisterEventHandler(eventHandler); + PrepareRender(context_, component); + + /** + * @tc.steps: step2. Mock Vsync and check whether received bounce event. + * @tc.expected: step2. Bounce event received. + */ + uint64_t loopOnceDuration = CalculateLoopDuration(CUSTOM_SCROLL_AMOUNT); + MockVsync(context_, loopOnceDuration); + EXPECT_TRUE(bounceCount == 1); +} + +/** + * @tc.name: RenderMarqueeEvent002 + * @tc.desc: Test marquee finish event. + * @tc.type: FUNC + * @tc.require: AR000DAVDM + * @tc.author: liruokun + */ +HWTEST_F(RenderMarqueeTest, RenderMarqueeEvent002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Build a marquee component and register finish handler. + */ + auto component = CreateDefaultMarquee(); + component->SetScrollAmount(CUSTOM_SCROLL_AMOUNT); + component->SetLoop(CUSTOM_LOOP); + uint32_t finishCount = 0; + RefPtr eventHandler = + AceType::MakeRefPtr([&finishCount](const std::string& eventId) { + if (eventId == MARQUEE_FINISH) { + finishCount++; + } + }); + context_->RegisterEventHandler(eventHandler); + PrepareRender(context_, component); + + /** + * @tc.steps: step2. Mock Vsync and check whether received finish event. + * @tc.expected: step2. Finish event received. + */ + uint64_t loopOnceDuration = CalculateLoopDuration(CUSTOM_SCROLL_AMOUNT); + MockVsync(context_, loopOnceDuration * CUSTOM_LOOP); + EXPECT_TRUE(finishCount == 1); +} + +/** + * @tc.name: RenderMarqueeEvent003 + * @tc.desc: Test marquee start event. + * @tc.type: FUNC + * @tc.require: AR000DAVDM + * @tc.author: liruokun + */ +HWTEST_F(RenderMarqueeTest, RenderMarqueeEvent003, TestSize.Level1) +{ + /** + * @tc.steps: step1. Build a marquee component and register start handler. + */ + auto component = CreateDefaultMarquee(); + component->SetScrollAmount(CUSTOM_SCROLL_AMOUNT); + component->SetLoop(CUSTOM_LOOP); + uint32_t startCount = 0; + RefPtr eventHandler = + AceType::MakeRefPtr([&startCount](const std::string& eventId) { + if (eventId == MARQUEE_START) { + startCount++; + } + }); + context_->RegisterEventHandler(eventHandler); + PrepareRender(context_, component); + + /** + * @tc.steps: step2. Mock Vsync one time and check whether received start event. + * @tc.expected: step2. Start event received. + */ + MockVsync(context_, VSYNC_INTERVAL_NANO); + EXPECT_TRUE(startCount == 1); +} + +/** + * @tc.name: RenderMarqueePlayControl001 + * @tc.desc: Test marquee animation could stop. + * @tc.type: FUNC + * @tc.require: AR000DAVDN + * @tc.author: liruokun + */ +HWTEST_F(RenderMarqueeTest, RenderMarqueePlayControl001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Build a marquee component and prepare render. + */ + auto component = CreateDefaultMarquee(); + component->SetScrollAmount(CUSTOM_SCROLL_AMOUNT); + PrepareRender(context_, component); + + /** + * @tc.steps: step2. Stop marquee and mock vsync, check whether text child still move. + * @tc.expected: step2. Text child is not moving. + */ + auto controller = component->GetController(); + ASSERT_TRUE(controller); + controller->Stop(); + auto startPosition = GetTextChildPosition(); + MockVsync(context_, VSYNC_INTERVAL_NANO); + auto endPosition = GetTextChildPosition(); + EXPECT_TRUE(NearEqual(startPosition, endPosition)); +} + +/** + * @tc.name: RenderMarqueePlayControl002 + * @tc.desc: Test marquee animation could start after a stop. + * @tc.type: FUNC + * @tc.require: AR000DAVDN + * @tc.author: liruokun + */ +HWTEST_F(RenderMarqueeTest, RenderMarqueePlayControl002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Build a marquee component and prepare render. + */ + auto component = CreateDefaultMarquee(); + component->SetScrollAmount(CUSTOM_SCROLL_AMOUNT); + PrepareRender(context_, component); + + /** + * @tc.steps: step2. Stop marquee and call start, mock vsync, check whether text child still move. + * @tc.expected: step2. Text child will continue moving. + */ + auto controller = component->GetController(); + ASSERT_TRUE(controller); + controller->Stop(); + controller->Start(); + CheckScrollAmount(context_, CUSTOM_SCROLL_AMOUNT); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/menu/BUILD.gn b/frameworks/core/components/test/unittest/menu/BUILD.gn new file mode 100644 index 00000000..6a6686b4 --- /dev/null +++ b/frameworks/core/components/test/unittest/menu/BUILD.gn @@ -0,0 +1,56 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +if (is_standard_system) { + module_output_path = "ace_engine_standard/backenduicomponent/menu" +} + +ohos_unittest("MenuComponentTest") { + module_out_path = module_output_path + + sources = [ "menu_component_test.cpp" ] + + configs = [ + ":config_menu_component_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "$ace_root/frameworks/core/components/test:json", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + deps += [ "$ace_root/frameworks/bridge:js_framework_ohos" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_menu_component_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + + deps = [ ":MenuComponentTest" ] +} diff --git a/frameworks/core/components/test/unittest/menu/menu_component_test.cpp b/frameworks/core/components/test/unittest/menu/menu_component_test.cpp new file mode 100644 index 00000000..1bb705d3 --- /dev/null +++ b/frameworks/core/components/test/unittest/menu/menu_component_test.cpp @@ -0,0 +1,169 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/utils/utils.h" +#include "core/components/menu/menu_component.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +const std::string TEST_TITLE = "Title of test."; +const uint32_t TEST_INVALIDATE_INDEX = 0xffffffff; +const uint32_t TEST_OPTION_COUNT = 10u; + +} // namespace + +class MenuComponentTest : public testing::Test { +public: + static void SetUpTestCase() {} + static void TearDownTestCase() {} + + void SetUp() override {} + void TearDown() override {} +}; + +/** + * @tc.name: MenuComponent001 + * @tc.desc: Verify MenuComponent can get and set title correctly. + * @tc.type: FUNC + * @tc.require: AR000DQ1QT + * @tc.author: huangzhangmin + */ +HWTEST_F(MenuComponentTest, MenuComponent001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the component and set title. + */ + auto menu = AceType::MakeRefPtr("", ""); + menu->SetTitle(TEST_TITLE); + + /** + * @tc.steps: step2. call get title interface and check it's value. + * @tc.expected: step2. the value is correct. + */ + auto title = menu->GetTitle(); + EXPECT_EQ(title, TEST_TITLE); +} + +/** + * @tc.name: MenuComponent002 + * @tc.desc: Verify MenuComponent can get option with invalidate index. + * @tc.type: FUNC + * @tc.require: AR000DQ1QT + * @tc.author: huangzhangmin + */ +HWTEST_F(MenuComponentTest, MenuComponent002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the component. + */ + auto menu = AceType::MakeRefPtr("", ""); + + /** + * @tc.steps: step2. call get option with invalidate index. + * @tc.expected: step2. can get option, and is nullptr. + */ + auto option = menu->GetOption(TEST_INVALIDATE_INDEX); + EXPECT_EQ(option, nullptr); +} + +/** + * @tc.name: MenuComponent003 + * @tc.desc: Verify MenuComponent can append option correctly. + * @tc.type: FUNC + * @tc.require: AR000DQ1QT + * @tc.author: huangzhangmin + */ +HWTEST_F(MenuComponentTest, MenuComponent003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the component with options. + */ + auto menu = AceType::MakeRefPtr("", ""); + for (uint32_t index = 0; index < TEST_OPTION_COUNT; index++) { + auto option = AceType::MakeRefPtr(); + option->SetIndex(index); + menu->AppendOption(option); + } + + /** + * @tc.steps: step2. call get option count, and check it's value. + * @tc.expected: step2. it's value is correct. + */ + auto count = menu->GetOptionCount(); + EXPECT_EQ(count, TEST_OPTION_COUNT); +} + +/** + * @tc.name: MenuComponent004 + * @tc.desc: Verify MenuComponent can clear all option correctly. + * @tc.type: FUNC + * @tc.require: AR000DQ1QT + * @tc.author: huangzhangmin + */ +HWTEST_F(MenuComponentTest, MenuComponent004, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the component with options. + */ + auto menu = AceType::MakeRefPtr("", ""); + for (uint32_t index = 0; index < TEST_OPTION_COUNT; index++) { + auto option = AceType::MakeRefPtr(); + option->SetIndex(index); + menu->AppendOption(option); + } + + /** + * @tc.steps: step2. call clear all option, and check it's result. + * @tc.expected: step2. it's result is correct. + */ + menu->ClearOptions(); + auto result = menu->GetOptionCount(); + EXPECT_EQ(result, 0u); +} + +/** + * @tc.name: MenuComponent005 + * @tc.desc: Verify MenuComponent can set text color correctly. + * @tc.type: FUNC + * @tc.require: AR000DQ1QT + * @tc.author: huangzhangmin + */ +HWTEST_F(MenuComponentTest, MenuComponent005, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the component with text color green. + */ + auto menu = AceType::MakeRefPtr("", ""); + auto themeManager = AceType::MakeRefPtr(); + menu->InitTheme(themeManager); + TextStyle style; + style.SetTextColor(Color::GREEN); + menu->SetTitleStyle(style); + + /** + * @tc.steps: step2. call get style, and check it's text color. + * @tc.expected: step2. it's text color is correct. + */ + style = menu->GetTitleStyle(); + EXPECT_EQ(style.GetTextColor(), Color::GREEN); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/mock/ace_trace_mock.cpp b/frameworks/core/components/test/unittest/mock/ace_trace_mock.cpp new file mode 100644 index 00000000..42de1d02 --- /dev/null +++ b/frameworks/core/components/test/unittest/mock/ace_trace_mock.cpp @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "base/log/ace_trace.h" + +namespace OHOS::Ace { + +AceScopedTrace::AceScopedTrace(const char* format, ...) +{ + traceEnabled_ = false; +} + +AceScopedTrace::~AceScopedTrace() +{ +} + +} \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/mock/event_report_mock.cpp b/frameworks/core/components/test/unittest/mock/event_report_mock.cpp new file mode 100644 index 00000000..2e29b362 --- /dev/null +++ b/frameworks/core/components/test/unittest/mock/event_report_mock.cpp @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "base/log/event_report.h" + +#include + +namespace OHOS::Ace { + +void EventReport::SendEvent(const EventInfo& eventInfo) +{ + (void)eventInfo; +} + +void EventReport::SendAppStartException(AppStartExcepType type) {} + +void EventReport::SendPageRouterException(PageRouterExcepType type, const std::string& pageUrl) {} + +void EventReport::SendComponentException(ComponentExcepType type) {} + +void EventReport::SendAPIChannelException(APIChannelExcepType type) {} + +void EventReport::SendRenderException(RenderExcepType type) {} + +void EventReport::SendJsException(JsExcepType type) {} + +void EventReport::SendAnimationException(AnimationExcepType type) {} + +void EventReport::SendEventException(EventExcepType type) {} + +void EventReport::SendInternalException(InternalExcepType type) {} + +void EventReport::SendAccessibilityException(AccessibilityExcepType type) {} + +void EventReport::SendFormException(FormExcepType type) {} + +void EventReport::JsEventReport(int32_t eventType, const std::string& jsonStr) +{ + (void)eventType; + (void)jsonStr; +} + +void EventReport::SendEventInner(const EventInfo& eventInfo) {} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/mock/mock_flutter_font_manager.cpp b/frameworks/core/components/test/unittest/mock/mock_flutter_font_manager.cpp new file mode 100644 index 00000000..8a2e432c --- /dev/null +++ b/frameworks/core/components/test/unittest/mock/mock_flutter_font_manager.cpp @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/font/flutter_font_manager.h" + +namespace OHOS::Ace { + +RefPtr FontManager::Create() +{ + return nullptr; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/mock/mock_render_common.cpp b/frameworks/core/components/test/unittest/mock/mock_render_common.cpp new file mode 100644 index 00000000..e0a54252 --- /dev/null +++ b/frameworks/core/components/test/unittest/mock/mock_render_common.cpp @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/unittest/mock/mock_render_common.h" + +#include "adapter/ohos/osal/fake_asset_manager.h" +#include "adapter/ohos/osal/fake_task_executor.h" +#include "core/components/stage/stage_element.h" +#include "core/components/test/json/json_frontend.h" +#include "core/mock/mock_resource_register.h" + +namespace OHOS::Ace { + +RefPtr MockRenderCommon::GetMockContext() +{ + auto platformWindow = std::make_unique(nullptr); + auto window = std::make_unique(std::move(platformWindow)); + auto taskExecutor = Referenced::MakeRefPtr(); + auto assetManager = Referenced::MakeRefPtr(); + auto resRegister = Referenced::MakeRefPtr(); + auto fakeFrontend = Frontend::CreateDefault(); + + auto pipelineContext = AceType::MakeRefPtr( + std::move(window), taskExecutor, assetManager, resRegister, fakeFrontend, 0); + pipelineContext->SetRootHeight(2049.0); + pipelineContext->SetupRootElement(); + auto stageElement = pipelineContext->GetStageElement(); + if (!stageElement) { + return pipelineContext; + } + auto renderStage = stageElement->GetRenderNode(); + if (!renderStage) { + return pipelineContext; + } + renderStage->SetLayoutSize(Size(1080.0, 2049.0)); // same with root size. + return pipelineContext; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/mock/mock_render_common.h b/frameworks/core/components/test/unittest/mock/mock_render_common.h new file mode 100644 index 00000000..15bef133 --- /dev/null +++ b/frameworks/core/components/test/unittest/mock/mock_render_common.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_MOCK_MOCK_RENDER_COMMON_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_MOCK_MOCK_RENDER_COMMON_H + +#include "core/common/window.h" +#include "core/components/root/render_root.h" + +namespace OHOS::Ace { + +class MockWindow final : public PlatformWindow { +public: + explicit MockWindow(AceView* aceView) {} + ~MockWindow() override = default; + + // Platform window interface + void RequestFrame() override {} + void RegisterVsyncCallback(AceVsyncCallback&& callback) override {} + void SetRootRenderNode(const RefPtr& root) override {} + +private: + ACE_DISALLOW_COPY_AND_MOVE(MockWindow); +}; + +class MockRenderCommon { +public: + static RefPtr GetMockContext(); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_MOCK_MOCK_RENDER_COMMON_H diff --git a/frameworks/core/components/test/unittest/mock/mock_render_depend.h b/frameworks/core/components/test/unittest/mock/mock_render_depend.h new file mode 100644 index 00000000..8413b51c --- /dev/null +++ b/frameworks/core/components/test/unittest/mock/mock_render_depend.h @@ -0,0 +1,293 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_MOCK_MOCK_RENDER_DEPEND_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_MOCK_MOCK_RENDER_DEPEND_H + +#include "adapter/ohos/osal/fake_asset_manager.h" +#include "adapter/ohos/osal/fake_task_executor.h" +#include "core/animation/animator.h" +#include "core/animation/card_transition_controller.h" +#include "core/animation/shared_transition_controller.h" +#include "core/common/window.h" +#include "core/components/box/box_component.h" +#include "core/components/box/render_box.h" +#include "core/components/dialog_modal/dialog_modal_component.h" +#include "core/components/dialog_modal/dialog_modal_element.h" +#include "core/components/display/render_display.h" +#include "core/components/positioned/render_positioned.h" +#include "core/components/rating/render_rating.h" +#include "core/components/root/render_root.h" +#include "core/components/root/root_element.h" +#include "core/components/semi_modal/semi_modal_component.h" +#include "core/components/semi_modal/semi_modal_element.h" +#include "core/components/stack/render_stack.h" +#include "core/components/swiper/swiper_component.h" +#include "core/components/test/json/json_frontend.h" +#include "core/components/text/render_text.h" +#include "core/components/transform/render_transform.h" +#include "core/mock/mock_resource_register.h" +#include "core/pipeline/base/composed_element.h" + +namespace OHOS::Ace { + +std::function&)> hookRenderBox; + +class MockWindow final : public PlatformWindow { +public: + explicit MockWindow(AceView* aceView) {} + ~MockWindow() override = default; + + // Platform window interface + void RequestFrame() override {} + void RegisterVsyncCallback(AceVsyncCallback&& callback) override {} + void SetRootRenderNode(const RefPtr& root) override {} + +private: + ACE_DISALLOW_COPY_AND_MOVE(MockWindow); +}; + +std::unique_ptr PlatformWindow::Create(AceView* aceView) +{ + return std::make_unique(aceView); +} + +class MockRenderSwiper : public RenderSwiper { + DECLARE_ACE_TYPE(MockRenderSwiper, RenderSwiper); + +private: + void UpdateIndicator() override {} +}; + +class MockRenderText : public RenderText { + DECLARE_ACE_TYPE(MockRenderText, RenderText); + +public: + MockRenderText() = default; + ~MockRenderText() override = default; + + uint32_t GetTextLines() override + { + return 0; + } + + double GetTextWidth() override + { + return 0; + } + + Size Measure() override + { + return Size(0.0, 0.0); + } +}; + +class MockRenderPositioned : public RenderPositioned { + DECLARE_ACE_TYPE(MockRenderPositioned, RenderPositioned); +}; + +class MockRenderTransform : public RenderTransform { + DECLARE_ACE_TYPE(MockRenderTransform, RenderTransform); +}; + +class MockRenderContext : public RenderContext { + DECLARE_ACE_TYPE(MockRenderContext, RenderContext); + +public: + void Repaint(const RefPtr& node) override {}; + void PaintChild(const RefPtr& child, const Offset& offset) override {}; +}; + +class MockRenderImage : public RenderImage { + DECLARE_ACE_TYPE(MockRenderImage, RenderImage); + +public: + MockRenderImage() = default; + ~MockRenderImage() override = default; + + Size Measure() override + { + return Size(); + } +}; + +RefPtr RenderImage::Create() +{ + return AceType::MakeRefPtr(); +} + +class MockRenderRating : public RenderRating { + DECLARE_ACE_TYPE(MockRenderRating, RenderRating); + +public: + MockRenderRating() = default; + ~MockRenderRating() override = default; + +protected: + void PaintFocus( + const Offset& offset, double rrectRadius, const Size& boardSize, RenderContext& context) override {}; +}; + +RefPtr RenderRating::Create() +{ + return AceType::MakeRefPtr(); +} + +class MockEventHandler : public AceEventHandler { + void HandleAsyncEvent(const EventMarker& eventMarker) override {}; + void HandleAsyncEvent(const EventMarker& eventMarker, int32_t param) override {}; + void HandleAsyncEvent(const EventMarker& eventMarker, const BaseEventInfo& info) override {}; + void HandleAsyncEvent(const EventMarker& eventMarker, const std::string& param) override {}; + void HandleAsyncEvent(const EventMarker& eventMarker, const KeyEvent& keyEvent) override {}; + void HandleSyncEvent(const EventMarker& eventMarker, bool& result) override {}; + void HandleSyncEvent(const EventMarker& eventMarker, const BaseEventInfo& info, bool& result) override {}; + void HandleSyncEvent(const EventMarker& eventMarker, const std::string& param, std::string& result) override {}; + void HandleSyncEvent(const EventMarker& eventMarker, const KeyEvent& keyEvent, bool& result) override {}; +}; + +class MockRenderBox : public RenderBox {}; +class MockRenderBoxBase : public RenderBoxBase {}; +class MockRenderRoot : public RenderRoot {}; +class MockRenderStack : public RenderStack {}; +class MockRenderDisplay : public RenderDisplay {}; + +class RenderTestUtils { +public: + static RefPtr GetMockPipelineContext(const RefPtr& frontend); +}; + +RefPtr RenderTestUtils::GetMockPipelineContext(const RefPtr& frontend) +{ + auto platformWindow = PlatformWindow::Create(nullptr); + auto window = std::make_unique(std::move(platformWindow)); + auto taskExecutor = Referenced::MakeRefPtr(); + auto assetManager = Referenced::MakeRefPtr(); + auto resRegister = Referenced::MakeRefPtr(); + return AceType::MakeRefPtr( + std::move(window), taskExecutor, assetManager, resRegister, frontend, 0); +} + +RefPtr RenderContext::Create() +{ + return AceType::MakeRefPtr(); +} + +RefPtr RenderSwiper::Create() +{ + return AceType::MakeRefPtr(); +} + +RefPtr RenderDisplay::Create() +{ + return AceType::MakeRefPtr(); +} + +RefPtr RenderStack::Create() +{ + return AceType::MakeRefPtr(); +} + +RefPtr RenderBox::Create() +{ + const auto& box = AceType::MakeRefPtr(); + + if (hookRenderBox) { + hookRenderBox(box); + } + return box; +} + +RefPtr RenderRoot::Create() +{ + return AceType::MakeRefPtr(); +} + +RefPtr RenderText::Create() +{ + return AceType::MakeRefPtr(); +} + +void RenderPositioned::Update(const RefPtr& component) {}; + +SharedTransitionController::SharedTransitionController(const WeakPtr& context) {}; +void SharedTransitionController::RegisterTransitionListener() {}; +bool SharedTransitionController::HasSharedTransition(TransitionEvent event) +{ + return false; +}; + +RefPtr SharedTransitionElement::GetContentElement() const +{ + return nullptr; +} + +CardTransitionController::CardTransitionController(const WeakPtr& context) {}; + +void CardTransitionController::RegisterTransitionListener() {}; + +RRect CardTransitionController::GetCardRect(const ComposeId& composeId) const +{ + return RRect(); +} + +RefPtr RenderPositioned::Create() +{ + return AceType::MakeRefPtr(); +} + +RefPtr RenderTransform::Create() +{ + return AceType::MakeRefPtr(); +} + +void SemiModalElement::UpdateSystemBarHeight(double statusBar, double navigationBar) {} + +RefPtr SemiModalElement::GetOverlayElement() const +{ + return nullptr; +} + +RefPtr SemiModalComponent::Create( + RefPtr child, bool isFullScreen, int32_t modalHeight, uint32_t color) +{ + return nullptr; +} + +void DialogModalElement::UpdateSystemBarHeight(double statusBar, double navigationBar) {} + +RefPtr DialogModalElement::GetOverlayElement() const +{ + return nullptr; +} + +RefPtr DialogModalComponent::Create(RefPtr child) +{ + return nullptr; +} + +void SemiModalElement::AnimateToExitApp() const {} + +bool SemiModalElement::IsFullWindow() const +{ + return true; +} + +void DialogModalElement::AnimateToExitApp() {} + +void DialogModalElement::RegisterTransitionListener() {} + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_MOCK_MOCK_RENDER_DEPEND_H diff --git a/frameworks/core/components/test/unittest/mock/mock_render_node_factory.cpp b/frameworks/core/components/test/unittest/mock/mock_render_node_factory.cpp new file mode 100644 index 00000000..b3a011e3 --- /dev/null +++ b/frameworks/core/components/test/unittest/mock/mock_render_node_factory.cpp @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/pipeline/base/factories/render_node_factory.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +RenderNodeFactory::~RenderNodeFactory() +{ + for (auto it = nodeCache_.begin(); it != nodeCache_.end(); ++it) { + delete *it; + } + nodeCache_.clear(); +} + +RefPtr RenderNodeFactory::Get() +{ + return GetNodeFromCache(); +} + +bool RenderNodeFactory::Recycle(RenderNode* node) +{ + return true; +} + +RefPtr RenderNodeFactory::GetNodeFromCache() +{ + return nullptr; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/mock/overlay_mock.cpp b/frameworks/core/components/test/unittest/mock/overlay_mock.cpp new file mode 100644 index 00000000..5d6741c0 --- /dev/null +++ b/frameworks/core/components/test/unittest/mock/overlay_mock.cpp @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/unittest/mock/overlay_mock.h" + +#include "core/components/overlay/overlay_component.h" + +namespace OHOS::Ace { + +namespace { + +MockOverlayElement::HookOverlay g_hookOverlay; + +} // namespace + +void MockOverlayElement::SetMockHook(const HookOverlay& hook) +{ + LOGD("set hook."); + g_hookOverlay = std::move(hook); +} + +RefPtr OverlayComponent::CreateElement() +{ + auto overlay = AceType::MakeRefPtr(); + if (g_hookOverlay) { + LOGD("execute hook."); + g_hookOverlay(overlay); + } + return overlay; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/mock/overlay_mock.h b/frameworks/core/components/test/unittest/mock/overlay_mock.h new file mode 100644 index 00000000..459a7fba --- /dev/null +++ b/frameworks/core/components/test/unittest/mock/overlay_mock.h @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_MOCK_OVERLAY_MOCK_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_MOCK_OVERLAY_MOCK_H + +#include "core/components/overlay/overlay_element.h" + +namespace OHOS::Ace { + +class MockOverlayElement : public OverlayElement { +public: + using HookOverlay = std::function&)>; + static void SetMockHook(const HookOverlay& hook); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_MOCK_OVERLAY_MOCK_H diff --git a/frameworks/core/components/test/unittest/mock/render_mock.cpp b/frameworks/core/components/test/unittest/mock/render_mock.cpp new file mode 100644 index 00000000..c84805d1 --- /dev/null +++ b/frameworks/core/components/test/unittest/mock/render_mock.cpp @@ -0,0 +1,127 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/unittest/mock/render_mock.h" + +#include "core/components/dialog_modal/dialog_modal_component.h" +#include "core/components/semi_modal/semi_modal_component.h" + +namespace OHOS::Ace { +namespace { + +MockRenderDisplay::HookRenderDisplay g_hookRenderDisplay; +MockRenderDropFilter::HookRenderDropFilter g_hookRenderDropfilter; + +} // namespace + +RefPtr RenderDisplay::Create() +{ + LOGD("Mock RenderDisplay Create"); + const auto& display = AceType::MakeRefPtr(); + if (g_hookRenderDisplay) { + LOGD("execute hook"); + g_hookRenderDisplay(display); + } + return display; +} + +void MockRenderDisplay::SetMockHook(const HookRenderDisplay& hook) +{ + LOGD("set hook"); + g_hookRenderDisplay = hook; +} + +RefPtr RenderRoot::Create() +{ + return AceType::MakeRefPtr(); +} + +RefPtr RenderStack::Create() +{ + return AceType::MakeRefPtr(); +} + +RefPtr RenderBox::Create() +{ + return AceType::MakeRefPtr(); +} + +RefPtr RenderClip::Create() +{ + return AceType::MakeRefPtr(); +} + +RefPtr RenderImage::Create() +{ + return AceType::MakeRefPtr(); +} + +RefPtr ImageCache::Create() +{ + return AceType::MakeRefPtr(); +} + +BackgroundPositionPropertyAnimatable::SetterMap MockRenderBox::GetBackgroundPositionPropertySetterMap() +{ + BackgroundPositionPropertyAnimatable::SetterMap map; + auto weak = AceType::WeakClaim(this); + map[PropertyAnimatableType::PROPERTY_BACKGROUND_POSITION] = [weak](BackgroundImagePosition position) { + auto box = weak.Upgrade(); + if (!box) { + LOGE("Set background position failed. box is null."); + return; + } + LOGD("set background position: x: %{public}lf, y: %{public}lf.", position.GetSizeValueX(), + position.GetSizeValueY()); + box->backgroundImagePosition_ = position; + }; + return map; +} + +BackgroundPositionPropertyAnimatable::GetterMap MockRenderBox::GetBackgroundPositionPropertyGetterMap() +{ + BackgroundPositionPropertyAnimatable::GetterMap map; + auto weak = AceType::WeakClaim(this); + map[PropertyAnimatableType::PROPERTY_BACKGROUND_POSITION] = [weak]() -> BackgroundImagePosition { + auto box = weak.Upgrade(); + if (!box) { + LOGE("Get background position failed. box is null."); + return BackgroundImagePosition(); + } + LOGD("get background position: x: %{public}lf, y: %{public}lf.", box->backgroundImagePosition_.GetSizeValueX(), + box->backgroundImagePosition_.GetSizeValueY()); + return box->backgroundImagePosition_; + }; + return map; +} + +RefPtr RenderDropFilter::Create() +{ + LOGD("Mock RenderDropFilter Create"); + const auto& dropFilter = AceType::MakeRefPtr(); + if (g_hookRenderDropfilter) { + LOGD("execute hook"); + g_hookRenderDropfilter(dropFilter); + } + return dropFilter; +} + +void MockRenderDropFilter::SetMockHook(const HookRenderDropFilter& hook) +{ + LOGD("set hook"); + g_hookRenderDropfilter = hook; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/mock/render_mock.h b/frameworks/core/components/test/unittest/mock/render_mock.h new file mode 100644 index 00000000..83b611b8 --- /dev/null +++ b/frameworks/core/components/test/unittest/mock/render_mock.h @@ -0,0 +1,111 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_MOCK_RENDER_MOCK_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_MOCK_RENDER_MOCK_H + +#include "core/common/platform_window.h" +#include "core/common/window.h" +#include "core/components/box/render_box.h" +#include "core/components/clip/render_clip.h" +#include "core/components/display/render_display.h" +#include "core/components/drop_filter/render_drop_filter.h" +#include "core/components/image/render_image.h" +#include "core/components/positioned/render_positioned.h" +#include "core/components/root/render_root.h" +#include "core/components/stack/render_stack.h" +#include "core/components/test/unittest/mock/transform_mock.h" + +namespace OHOS::Ace { + +class MockRenderRoot : public RenderRoot { DECLARE_ACE_TYPE(MockRenderRoot, RenderRoot); }; +class MockRenderStack : public RenderStack { DECLARE_ACE_TYPE(MockRenderStack, RenderStack); }; +class MockRenderPositioned : public RenderPositioned { DECLARE_ACE_TYPE(MockRenderPositioned, RenderPositioned); }; + +class MockRenderImage : public RenderImage { + DECLARE_ACE_TYPE(MockRenderImage, RenderImage); + +public: + Size Measure() override + { + return Size(); + } +}; + +class MockRenderDropFilter : public RenderDropFilter { + DECLARE_ACE_TYPE(MockRenderDropFilter, RenderDropFilter); + +public: + using HookRenderDropFilter = std::function&)>; + double GetSigmaX() const + { + return sigmaX_; + } + double GetSigmaY() const + { + return sigmaY_; + } + static void SetMockHook(const HookRenderDropFilter& hook); +}; + +class MockRenderBox : public RenderBox { + DECLARE_ACE_TYPE(MockRenderBox, RenderBox); + +public: + BackgroundImagePosition GetBackgroundPositionPublic() const + { + return backgroundImagePosition_; + } + int32_t GetPercentFlag() const + { + return percentFlag_; + } + +private: + BackgroundImagePosition backgroundImagePosition_; + BackgroundPositionPropertyAnimatable::SetterMap GetBackgroundPositionPropertySetterMap() override; + BackgroundPositionPropertyAnimatable::GetterMap GetBackgroundPositionPropertyGetterMap() override; +}; + +class MockRenderClip : public RenderClip { + DECLARE_ACE_TYPE(MockRenderClip, RenderClip); +}; + +class MockRenderBoxBase : public RenderBoxBase { + DECLARE_ACE_TYPE(MockRenderBoxBase, RenderBoxBase); +}; + +class MockImageCache : public ImageCache { + DECLARE_ACE_TYPE(MockImageCache, ImageCache); + +public: + void Clear() override {}; +}; + +class MockRenderDisplay : public RenderDisplay { + DECLARE_ACE_TYPE(MockRenderDisplay, RenderDisplay); + +public: + using HookRenderDisplay = std::function&)>; + float GetOpacity() + { + return static_cast(opacity_) / UINT8_MAX; + } + static void SetMockHook(const HookRenderDisplay& hook); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_MOCK_RENDER_MOCK_H diff --git a/frameworks/core/components/test/unittest/mock/semi_modal_mock.cpp b/frameworks/core/components/test/unittest/mock/semi_modal_mock.cpp new file mode 100644 index 00000000..a4ad973d --- /dev/null +++ b/frameworks/core/components/test/unittest/mock/semi_modal_mock.cpp @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/dialog_modal/dialog_modal_component.h" +#include "core/components/semi_modal/semi_modal_component.h" + +namespace OHOS::Ace { + +RefPtr SemiModalComponent::Create( + RefPtr child, bool isFullScreen, int32_t modalHeight, uint32_t color) +{ + return nullptr; +} + +RefPtr DialogModalComponent::Create(RefPtr child) +{ + return nullptr; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/mock/transform_mock.cpp b/frameworks/core/components/test/unittest/mock/transform_mock.cpp new file mode 100644 index 00000000..a94b9c62 --- /dev/null +++ b/frameworks/core/components/test/unittest/mock/transform_mock.cpp @@ -0,0 +1,242 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/unittest/mock/transform_mock.h" + +#include + +#include "core/components/transform/render_transform.h" +#include "core/components/transform/transform_component.h" + +namespace OHOS::Ace { +namespace { + +MockRenderTransform::HookRenderTransform g_hookRenderTransform; + +} // namespace + +void RenderTransform::Translate(const Dimension& x, const Dimension& y) +{ + LOGD("TransformMock Translate. x: %{public}lf, y: %{public}lf", x.Value(), y.Value()); + auto mock = AceType::DynamicCast(this); + if (mock) { + mock->MockTranslate(x, y); + } +} + +void RenderTransform::Scale(float value) +{ + LOGD("TransformMock Scale. scale: %{public}f, this:%p", value, this); + auto mock = AceType::DynamicCast(this); + if (mock) { + mock->MockScale(value); + } +} + +void RenderTransform::Scale(float x, float y) +{ + LOGD("TransformMock Scale. scaleX: %{public}f, scaleY: %{public}f", x, y); + auto mock = AceType::DynamicCast(this); + if (mock) { + mock->MockScale(x, y); + } +} + +void RenderTransform::Rotate(float angle, float x, float y, float z) +{ + LOGD("TransformMock Rotate. angle: %{public}f, rotateX: %{public}f, rotateY: %{public}f, rotateZ: %{public}f", + angle, x, y, z); + auto mock = AceType::DynamicCast(this); + if (mock) { + mock->MockRotate(angle, x, y, z); + } +} + +void RenderTransform::RotateX(float angle) +{ + LOGD("TransformMock RotateX. angle: %{public}f ", angle); + auto mock = AceType::DynamicCast(this); + if (mock) { + mock->MockRotateX(angle); + } +} + +void RenderTransform::RotateY(float angle) +{ + LOGD("TransformMock RotateY. angle: %{public}f ", angle); + auto mock = AceType::DynamicCast(this); + if (mock) { + mock->MockRotateY(angle); + } +} + +void RenderTransform::RotateZ(float angle) +{ + LOGD("TransformMock RotateZ. angle: %{public}f ", angle); + auto mock = AceType::DynamicCast(this); + if (mock) { + mock->MockRotateZ(angle); + } +} + +void RenderTransform::Update(const RefPtr& component) +{ + LOGD("TransformMock Update."); + const RefPtr transform = AceType::DynamicCast(component); + if (transform) { + transform_ = transform->GetTransform(); + MarkNeedLayout(); + } +} + +void RenderTransform::OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) +{} + +void RenderTransform::ResetTransform() {} + +void RenderTransform::PerformLayout() +{ + LOGD("TransformMock PerformLayout"); + Size layoutSize; + if (!GetChildren().empty()) { + auto child = GetChildren().front(); + + LayoutParam innerLayout; + Size maxLayoutSize = GetLayoutParam().GetMaxSize(); + if (maxLayoutSize.IsValid()) { + innerLayout.SetMaxSize(maxLayoutSize); + child->Layout(innerLayout); + layoutSize += child->GetLayoutSize(); + } + SetLayoutSize(layoutSize); + origin_ = Offset(child->GetLayoutSize().Width() / 2.0, child->GetLayoutSize().Height() / 2.0); + } +} + +void RenderTransform::SetTouchable(bool enable) +{ + LOGD("Mock RenderTransform enable touch test: %{public}d", enable); + enableTouchTest_ = enable; +} + +void MockRenderTransform::SetMockHook(const MockRenderTransform::HookRenderTransform& hook) +{ + LOGD("set hook."); + g_hookRenderTransform = std::move(hook); +} + +RefPtr RenderTransform::Create() +{ + LOGD("Mock RenderTransform Create"); + const auto& transform = AceType::MakeRefPtr(); + if (g_hookRenderTransform) { + LOGD("execute hook."); + g_hookRenderTransform(transform); + } + return transform; +} + +void MockRenderTransform::MockTranslate(Dimension x, Dimension y) +{ + LOGD("translate in MockRenderTransform. x: %{public}f, y: %{public}f", x.Value(), y.Value()); + translateX_ = x; + translateY_ = y; +} + +void MockRenderTransform::MockScale(float value) +{ + LOGD("scale in MockRenderTransform, value: %{public}f", value); + scaleXY_ = value; +} + +void MockRenderTransform::MockScale(float x, float y) +{ + LOGD("scale in MockRenderTransform, x: %{public}f, y: %{public}f", x, y); + scaleX_ = x; + scaleY_ = y; +} + +void MockRenderTransform::MockRotate(float angle, float x, float y, float z) +{ + LOGD("rotate in MockRenderTransform, angle: %{public}f, x: %{public}f, y: %{public}f, z: %{public}f", angle, x, y, + z); + rotateAngle_ = angle; + rotateAxisX_ = x; + rotateAxisY_ = y; + rotateAxisZ_ = z; +} + +void MockRenderTransform::MockRotateX(float angle) +{ + LOGD("rotateX in MockRenderTransform, angle: %{public}f", angle); + rotateAxisX_ = angle; +} + +void MockRenderTransform::MockRotateY(float angle) +{ + LOGD("rotateY in MockRenderTransform, angle: %{public}f", angle); + rotateAxisY_ = angle; +} + +void MockRenderTransform::MockRotateZ(float angle) +{ + LOGD("rotateZ in MockRenderTransform, angle: %{public}f", angle); + rotateAxisZ_ = angle; +} + +void MockRenderTransform::GetTranslateSetting(Dimension& x, Dimension& y) const +{ + x = translateX_; + y = translateY_; +} + +void MockRenderTransform::GetScaleSetting(float& scaleX, float& scaleY) const +{ + scaleX = scaleX_; + scaleY = scaleY_; +} + +void MockRenderTransform::GetScaleSetting(float& scale) const +{ + scale = scaleXY_; +} + +void MockRenderTransform::GetRotateSetting(float& angle, float& x, float& y, float& z) const +{ + angle = rotateAngle_; + x = rotateAxisX_; + y = rotateAxisY_; + z = rotateAxisZ_; +} + +void MockRenderTransform::ResetSetting() +{ + translateX_ = Dimension(); + translateY_ = Dimension(); + rotateAngle_ = 0.0f; + rotateAxisX_ = 0.0f; + rotateAxisY_ = 0.0f; + rotateAxisZ_ = 0.0f; + scaleX_ = 0.0f; + scaleY_ = 0.0f; +} + +bool MockRenderTransform::GetTouchable() const +{ + return enableTouchTest_; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/mock/transform_mock.h b/frameworks/core/components/test/unittest/mock/transform_mock.h new file mode 100644 index 00000000..e939b4a3 --- /dev/null +++ b/frameworks/core/components/test/unittest/mock/transform_mock.h @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_MOCK_TRANSFORM_MOCK_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_MOCK_TRANSFORM_MOCK_H + +#include "core/components/transform/render_transform.h" + +namespace OHOS::Ace { + +class MockRenderTransform : public RenderTransform { + DECLARE_ACE_TYPE(MockRenderTransform, RenderTransform); + +public: + using HookRenderTransform = std::function&)>; + void MockTranslate(Dimension x, Dimension y); + void MockScale(float value); + void MockScale(float x, float y); + void MockRotate(float angle, float x, float y, float z); + void MockRotateX(float angle); + void MockRotateY(float angle); + void MockRotateZ(float angle); + + void GetTranslateSetting(Dimension& x, Dimension& y) const; + void GetScaleSetting(float& scaleX, float& scaleY) const; + void GetScaleSetting(float& scale) const; + void GetRotateSetting(float& angle, float& x, float& y, float& z) const; + bool GetTouchable() const; + void ResetSetting(); + + static void SetMockHook(const HookRenderTransform& hook); + +private: + Dimension translateX_; + Dimension translateY_; + float rotateAngle_ = 0.0f; + float rotateAxisX_ = 0.0f; + float rotateAxisY_ = 0.0f; + float rotateAxisZ_ = 0.0f; + float scaleX_ = 1.0f; + float scaleY_ = 1.0f; + float scaleXY_ = 1.0f; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_MOCK_TRANSFORM_MOCK_H diff --git a/frameworks/core/components/test/unittest/mock/transition_mock.cpp b/frameworks/core/components/test/unittest/mock/transition_mock.cpp new file mode 100644 index 00000000..5d9c5af6 --- /dev/null +++ b/frameworks/core/components/test/unittest/mock/transition_mock.cpp @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/unittest/mock/transition_mock.h" + +namespace OHOS::Ace { +namespace { + +MockTransitionElement::HookTransitionElement g_hookTransitionElement; + +} // namespace + +void MockTransitionElement::SetMockHook(const HookTransitionElement& hook) +{ + LOGD("set hook."); + g_hookTransitionElement = hook; +} + +RefPtr MockTransitionComponent::CreateElement() +{ + LOGD("MockTransitionComponent CreateElement"); + auto transitionElement = AceType::MakeRefPtr(); + if (g_hookTransitionElement) { + LOGD("execute hook."); + g_hookTransitionElement(transitionElement); + } + return transitionElement; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/mock/transition_mock.h b/frameworks/core/components/test/unittest/mock/transition_mock.h new file mode 100644 index 00000000..e01b31ce --- /dev/null +++ b/frameworks/core/components/test/unittest/mock/transition_mock.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_MOCK_TRANSITION_MOCK_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_MOCK_TRANSITION_MOCK_H + +#include "core/components/page_transition/page_transition_component.h" +#include "core/components/page_transition/page_transition_element.h" + +namespace OHOS::Ace { + +class MockTransitionElement : public PageTransitionElement { + DECLARE_ACE_TYPE(MockTransitionElement, PageTransitionElement); + +public: + using HookTransitionElement = std::function&)>; + static void SetMockHook(const HookTransitionElement& hook); +}; + +class MockTransitionComponent : public PageTransitionComponent { + DECLARE_ACE_TYPE(MockTransitionComponent, PageTransitionComponent); + +public: + RefPtr CreateElement() override; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_MOCK_TRANSITION_MOCK_H diff --git a/frameworks/core/components/test/unittest/mock/tween_mock.cpp b/frameworks/core/components/test/unittest/mock/tween_mock.cpp new file mode 100644 index 00000000..6be3a61b --- /dev/null +++ b/frameworks/core/components/test/unittest/mock/tween_mock.cpp @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/unittest/mock/tween_mock.h" + +namespace OHOS::Ace { +namespace { + +MockTweenComponent::HookTweenElement g_hookTweenElement; + +} // namespace + +RefPtr MockTweenComponent::CreateElement() +{ + LOGD("MockTweenComponent CreateElement"); + auto tweenElement = AceType::MakeRefPtr(GetId()); + if (g_hookTweenElement) { + LOGD("execute hook."); + g_hookTweenElement(tweenElement); + } + return tweenElement; +} + +void MockTweenComponent::SetMockHook(const HookTweenElement& hook) +{ + LOGD("set hook."); + g_hookTweenElement = hook; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/mock/tween_mock.h b/frameworks/core/components/test/unittest/mock/tween_mock.h new file mode 100644 index 00000000..1bf70402 --- /dev/null +++ b/frameworks/core/components/test/unittest/mock/tween_mock.h @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_MOCK_TWEEN_MOCK_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_MOCK_TWEEN_MOCK_H + +#include + +#include "core/components/tween/tween_component.h" + +namespace OHOS::Ace { + +class MockTweenComponent : public TweenComponent { +public: + MockTweenComponent(const ComposeId& id, const std::string& name, const RefPtr& child) + : TweenComponent(id, name, child) + {} + ~MockTweenComponent() override = default; + + using HookTweenElement = std::function&)>; + RefPtr CreateElement() override; + + static void SetMockHook(const HookTweenElement& hook); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_MOCK_TWEEN_MOCK_H diff --git a/frameworks/core/components/test/unittest/mock/window_mock.h b/frameworks/core/components/test/unittest/mock/window_mock.h new file mode 100644 index 00000000..d16f74f1 --- /dev/null +++ b/frameworks/core/components/test/unittest/mock/window_mock.h @@ -0,0 +1,135 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_MOCK_WINDOW_MOCK_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_MOCK_WINDOW_MOCK_H + +#include + +#include "core/common/platform_window.h" +#include "core/common/window.h" +#include "core/components/box/render_box.h" +#include "core/components/display/render_display.h" +#include "core/components/root/render_root.h" +#include "core/components/stack/render_stack.h" +#include "core/pipeline/base/render_context.h" + +namespace OHOS::Ace { + +class MockPlatformWindow final : public PlatformWindow { +public: + MockPlatformWindow() = default; + ~MockPlatformWindow() override = default; + + // Request next vsync. + void RequestFrame() override + { + LOGD("MockPlatformWindow RequestFrame"); + ++requestFrameCnt_; + } + + int32_t GetRequestFrameCnt() const + { + return requestFrameCnt_; + } + + void ResetRequestFrameCnt() + { + requestFrameCnt_ = 0; + } + + void TriggerOneFrame() + { + TriggerFrame(nanoFrameTime_, 1); + } + + void TriggerFrames(int32_t frames) + { + for (int32_t frameIdx = 0; frameIdx < frames; ++frameIdx) { + LOGD("start to trigger frame. loop: %{public}d", frameIdx); + TriggerFrame(nanoFrameTime_, 1); + } + } + + uint64_t GetCurrentTimestampNano() const + { + return nanoTimestamp_; + } + + void TriggerFrame(uint64_t deltaNanoTimestamp, uint32_t deltaFrameCount) + { + nanoTimestamp_ += deltaNanoTimestamp; + frameCount_ += deltaFrameCount; + LOGI("MockPlatformWindow TriggerFrame. nanoTimestamp: %{public}d, frameCount: %{public}d", + static_cast(nanoTimestamp_), frameCount_); + if (callback_) { + callback_(nanoTimestamp_, frameCount_); + } + } + + // Register Vsync callback. + void RegisterVsyncCallback(AceVsyncCallback&& callback) override + { + callback_ = std::move(callback); + } + + // Attach root render node to container + void SetRootRenderNode(const RefPtr& root) override {} + + void SetNanoFrameTime(uint64_t nanoFrameTime) + { + nanoFrameTime_ = nanoFrameTime; + } + +private: + static constexpr uint16_t SCREEN_FREQUENCY = 60; + static constexpr uint64_t NANO_FRAME_TIME = static_cast(1e9 / SCREEN_FREQUENCY); + uint32_t frameCount_ = 0; + uint32_t requestFrameCnt_ = 0; + uint64_t nanoFrameTime_ = NANO_FRAME_TIME; + uint64_t nanoTimestamp_ = 0; + AceVsyncCallback callback_; +}; + +class MockRenderContext : public RenderContext { +public: + void Repaint(const RefPtr& node) override {}; + void PaintChild(const RefPtr& child, const Offset& offset) override {}; +}; + +RefPtr RenderContext::Create() +{ + return AceType::MakeRefPtr(); +} + +class TweenTestUtils { +public: + TweenTestUtils() = delete; + ~TweenTestUtils() = delete; + + static std::unique_ptr CreatePlatformWindow() + { + return std::make_unique(); + } + + static std::unique_ptr CreateWindow(std::unique_ptr platformWindow) + { + return std::make_unique(std::move(platformWindow)); + } +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_MOCK_WINDOW_MOCK_H diff --git a/frameworks/core/components/test/unittest/padding/BUILD.gn b/frameworks/core/components/test/unittest/padding/BUILD.gn new file mode 100644 index 00000000..2ea68f24 --- /dev/null +++ b/frameworks/core/components/test/unittest/padding/BUILD.gn @@ -0,0 +1,88 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +if (is_standard_system) { + module_output_path = "ace_engine_standard/backenduicomponent/padding" +} + +ohos_unittest("PaddingCreatorTest") { + module_out_path = module_output_path + + sources = [ + "edge_creator_test.cpp", + "padding_creator_test.cpp", + ] + + configs = [ + ":config_json_creator_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "$ace_root/frameworks/core/components/test:json", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + deps += [ "$ace_root/frameworks/bridge:js_framework_ohos" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_json_creator_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +ohos_unittest("RenderPaddingTest") { + module_out_path = module_output_path + + sources = [ + "$ace_root/frameworks/core/components/test/unittest/display/display_test_utils.cpp", + "render_padding_test.cpp", + ] + + configs = [ "$ace_root:ace_test_config" ] + + deps = [ + "$ace_root/frameworks/core:ace_core_ohos", + "$ace_root/frameworks/core/components/test:json", + "//third_party/googletest:gtest_main", + ] + + if (is_standard_system) { + configs += [ "//third_party/curl:curl_config" ] + deps += [ + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/curl:curl", + ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +group("unittest") { + testonly = true + deps = [ + ":PaddingCreatorTest", + ":RenderPaddingTest", + ] +} diff --git a/frameworks/core/components/test/unittest/padding/edge_creator_test.cpp b/frameworks/core/components/test/unittest/padding/edge_creator_test.cpp new file mode 100644 index 00000000..eddc9072 --- /dev/null +++ b/frameworks/core/components/test/unittest/padding/edge_creator_test.cpp @@ -0,0 +1,148 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/geometry/dimension.h" +#include "base/json/json_util.h" +#include "base/utils/utils.h" +#include "core/components/common/properties/edge.h" +#include "core/components/test/json/edge_creator.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +const Dimension EDGE_DEFAULT = Dimension(0.0); +const Dimension EDGE_COMMON_VALUE = Dimension(5.0); +const Dimension EDGE_LEFT_VALUE = Dimension(1.0); +const Dimension EDGE_TOP_VALUE = Dimension(2.0); +const Dimension EDGE_RIGHT_VALUE = Dimension(3.0); +const Dimension EDGE_BOTTOM_VALUE = Dimension(4.0); + +} // namespace + +class EdgeCreatorTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); + Edge CreateFromDsl(const std::string jsonEdgeStr) const; +}; + +void EdgeCreatorTest::SetUpTestCase() {} +void EdgeCreatorTest::TearDownTestCase() {} +void EdgeCreatorTest::SetUp() {} +void EdgeCreatorTest::TearDown() {} + +Edge EdgeCreatorTest::CreateFromDsl(const std::string jsonEdgeStr) const +{ + const auto dslBuf = reinterpret_cast(jsonEdgeStr.c_str()); + size_t dslLen = jsonEdgeStr.length(); + std::string jsonStr(reinterpret_cast(dslBuf), dslLen); + std::unique_ptr edgeJson = JsonUtil::ParseJsonString(jsonStr); + return EdgeCreator::CreateFromJson(*edgeJson); +} + +/** + * @tc.name: EdgeCreator001 + * @tc.desc: Verify EdgeCreator can create edge with value. + * @tc.type: FUNC + * @tc.require: AR000DAQUF + */ +HWTEST_F(EdgeCreatorTest, EdgeCreator001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of edge with value. + */ + const std::string jsonEdgeStr = "" + "{ " + " \"className\": \"Edge\", " + " \"value\": 5.0 " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get edge. + * @tc.expected: step2. properties are set correctly. + */ + Edge edge = CreateFromDsl(jsonEdgeStr); + EXPECT_EQ(edge.Left(), EDGE_COMMON_VALUE); + EXPECT_EQ(edge.Top(), EDGE_COMMON_VALUE); + EXPECT_EQ(edge.Right(), EDGE_COMMON_VALUE); + EXPECT_EQ(edge.Bottom(), EDGE_COMMON_VALUE); +} + +/** + * @tc.name: EdgeCreator002 + * @tc.desc: Verify EdgeCreator can create edge with left | top | right | bottom. + * @tc.type: FUNC + * @tc.require: AR000DAQUF + */ +HWTEST_F(EdgeCreatorTest, EdgeCreator002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of edge with left | top | right | bottom. + */ + const std::string jsonEdgeStr = "" + "{ " + " \"className\": \"Edge\", " + " \"left\": 1.0, " + " \"top\": 2.0, " + " \"right\": 3.0, " + " \"bottom\": 4.0 " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get edge. + * @tc.expected: step2. properties are set correctly. + */ + Edge edge = CreateFromDsl(jsonEdgeStr); + EXPECT_EQ(edge.Left(), EDGE_LEFT_VALUE); + EXPECT_EQ(edge.Top(), EDGE_TOP_VALUE); + EXPECT_EQ(edge.Right(), EDGE_RIGHT_VALUE); + EXPECT_EQ(edge.Bottom(), EDGE_BOTTOM_VALUE); +} + +/** + * @tc.name: EdgeCreator003 + * @tc.desc: Verify EdgeCreator can create Edge with className only. + * @tc.type: FUNC + * @tc.require: AR000DAQUF + */ +HWTEST_F(EdgeCreatorTest, EdgeCreator003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of edge with className only. + */ + const std::string jsonEdgeStr = "" + "{ " + " \"className\": \"Edge\" " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get edge. + * @tc.expected: step2. properties are set as default. + */ + Edge edge = CreateFromDsl(jsonEdgeStr); + EXPECT_EQ(edge.Left(), EDGE_DEFAULT); + EXPECT_EQ(edge.Top(), EDGE_DEFAULT); + EXPECT_EQ(edge.Right(), EDGE_DEFAULT); + EXPECT_EQ(edge.Bottom(), EDGE_DEFAULT); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/padding/padding_creator_test.cpp b/frameworks/core/components/test/unittest/padding/padding_creator_test.cpp new file mode 100644 index 00000000..c80efb58 --- /dev/null +++ b/frameworks/core/components/test/unittest/padding/padding_creator_test.cpp @@ -0,0 +1,266 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/geometry/dimension.h" +#include "base/json/json_util.h" +#include "base/utils/utils.h" +#include "core/components/common/properties/edge.h" +#include "core/components/padding/padding_component.h" +#include "core/components/test/json/component_factory.h" +#include "core/components/test/json/padding_creator.h" +#include "core/components/text/text_component.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +const Edge EDGE_DEFAULT_VALUE = Edge(0.0); +const Edge EDGE_COMMON_VALUE = Edge(5.0); +const Dimension EDGE_LEFT_VALUE = Dimension(1.0); +const Dimension EDGE_TOP_VALUE = Dimension(2.0); +const Dimension EDGE_RIGHT_VALUE = Dimension(3.0); +const Dimension EDGE_BOTTOM_VALUE = Dimension(4.0); + +const std::string TEXT_VALUE = "Hi Ace"; + +} // namespace + +class PaddingCreatorTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); +}; + +void PaddingCreatorTest::SetUpTestCase() {} +void PaddingCreatorTest::TearDownTestCase() {} +void PaddingCreatorTest::SetUp() {} +void PaddingCreatorTest::TearDown() {} + +/** + * @tc.name: PaddingCreator001 + * @tc.desc: Verify PaddingCreator can create padding component with padding and child. + * @tc.type: FUNC + * @tc.require: AR000DAQUF + * @tc.author: jinwuwen + */ +HWTEST_F(PaddingCreatorTest, PaddingCreator001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of padding component with padding and child. + */ + const std::string content = "" + "{ " + " \"className\": \"Padding\", " + " \"padding\": { " + " \"className\": \"Edge\", " + " \"value\": 5.0 " + " }, " + " \"child\": { " + " \"className\": \"Text\", " + " \"value\": \"Hi Ace\" " + " } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get padding component. + * @tc.expected: step2. properties and child are set correctly. + */ + const auto dslBuf = reinterpret_cast(content.c_str()); + size_t dslLen = content.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component != nullptr); + RefPtr padding = AceType::DynamicCast(component); + ASSERT_TRUE(padding != nullptr); + ASSERT_TRUE(padding->GetPadding() == EDGE_COMMON_VALUE); + RefPtr text = AceType::DynamicCast(padding->GetChild()); + ASSERT_TRUE(text != nullptr); + ASSERT_TRUE(text->GetData() == TEXT_VALUE); +} + +/** + * @tc.name: PaddingCreator002 + * @tc.desc: Verify PaddingCreator can create padding component with className only. + * @tc.type: FUNC + * @tc.require: AR000DAQUF + * @tc.author: jinwuwen + */ +HWTEST_F(PaddingCreatorTest, PaddingCreator002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of padding component with className only. + */ + const std::string content = "" + "{ " + " \"className\": \"Padding\" " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get padding component. + * @tc.expected: step2. properties are set as default, child is nullptr. + */ + const auto dslBuf = reinterpret_cast(content.c_str()); + size_t dslLen = content.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component != nullptr); + RefPtr padding = AceType::DynamicCast(component); + ASSERT_TRUE(padding != nullptr); + ASSERT_TRUE(padding->GetPadding() == EDGE_DEFAULT_VALUE); + RefPtr text = AceType::DynamicCast(padding->GetChild()); + ASSERT_TRUE(text == nullptr); +} + +/** + * @tc.name: PaddingCreator003 + * @tc.desc: Verify PaddingCreator can create padding component with directions params only + * @tc.type: FUNC + * @tc.require: AR000DAQUF + * @tc.author: jinwuwen + */ +HWTEST_F(PaddingCreatorTest, PaddingCreator003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of padding component with padding and child. + */ + const std::string content = "" + "{ " + " \"className\": \"Padding\", " + " \"padding\": { " + " \"className\": \"Edge\", " + " \"left\" : 1.0, " + " \"right\" : 3.0, " + " \"top\" : 2.0, " + " \"bottom\" : 4.0 " + " }, " + " \"child\": { " + " \"className\": \"Text\", " + " \"value\": \"Hi Ace\" " + " } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get padding component. + * @tc.expected: step2. properties and child are set correctly. + */ + const auto dslBuf = reinterpret_cast(content.c_str()); + size_t dslLen = content.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component != nullptr); + RefPtr padding = AceType::DynamicCast(component); + ASSERT_TRUE(padding != nullptr); + ASSERT_TRUE(padding->GetPadding().Left() == EDGE_LEFT_VALUE); + ASSERT_TRUE(padding->GetPadding().Right() == EDGE_RIGHT_VALUE); + ASSERT_TRUE(padding->GetPadding().Top() == EDGE_TOP_VALUE); + ASSERT_TRUE(padding->GetPadding().Bottom() == EDGE_BOTTOM_VALUE); + RefPtr text = AceType::DynamicCast(padding->GetChild()); + ASSERT_TRUE(text != nullptr); + ASSERT_TRUE(text->GetData() == TEXT_VALUE); +} + +/** + * @tc.name: PaddingCreator004 + * @tc.desc: Verify PaddingCreator can create padding component with value param and other directions params + * @tc.type: FUNC + * @tc.require: AR000DAQUF + * @tc.author: jinwuwen + */ +HWTEST_F(PaddingCreatorTest, PaddingCreator004, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of padding component with padding and child. + */ + const std::string content = "" + "{ " + " \"className\": \"Padding\", " + " \"padding\": { " + " \"className\": \"Edge\", " + " \"value\": 5.0, " + " \"left\" : 1.0, " + " \"right\" : 3.0, " + " \"top\" : 2.0, " + " \"bottom\" : 4.0 " + " }, " + " \"child\": { " + " \"className\": \"Text\", " + " \"value\": \"Hi Ace\" " + " } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get padding component. + * @tc.expected: step2. properties and child are set correctly. + */ + const auto dslBuf = reinterpret_cast(content.c_str()); + size_t dslLen = content.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component != nullptr); + RefPtr padding = AceType::DynamicCast(component); + ASSERT_TRUE(padding != nullptr); + ASSERT_TRUE(padding->GetPadding() == EDGE_COMMON_VALUE); + RefPtr text = AceType::DynamicCast(padding->GetChild()); + ASSERT_TRUE(text != nullptr); + ASSERT_TRUE(text->GetData() == TEXT_VALUE); +} + +/** + * @tc.name: PaddingCreator005 + * @tc.desc: Verify PaddingCreator can create padding component with directions param negative + * @tc.type: FUNC + * @tc.require: AR000DAQUF + * @tc.author: jinwuwen + */ +HWTEST_F(PaddingCreatorTest, PaddingCreator005, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of padding component with padding and child. + */ + const std::string content = "" + "{ " + " \"className\": \"Padding\", " + " \"padding\": { " + " \"className\": \"Edge\", " + " \"left\" : 1.0, " + " \"right\" : 3.0, " + " \"bottom\" : -4.0 " + " }, " + " \"child\": { " + " \"className\": \"Text\", " + " \"value\": \"Hi Ace\" " + " } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get padding component. + * @tc.expected: step2. properties and child are set correctly. + */ + const auto dslBuf = reinterpret_cast(content.c_str()); + size_t dslLen = content.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component != nullptr); + RefPtr padding = AceType::DynamicCast(component); + ASSERT_TRUE(padding != nullptr); + ASSERT_TRUE(NearZero(padding->GetPadding().Top().Value())); + ASSERT_TRUE(NearZero(padding->GetPadding().Bottom().Value())); + RefPtr text = AceType::DynamicCast(padding->GetChild()); + ASSERT_TRUE(text != nullptr); + ASSERT_TRUE(text->GetData() == TEXT_VALUE); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/padding/render_padding_test.cpp b/frameworks/core/components/test/unittest/padding/render_padding_test.cpp new file mode 100644 index 00000000..586328ef --- /dev/null +++ b/frameworks/core/components/test/unittest/padding/render_padding_test.cpp @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/json/json_util.h" +#include "core/components/button/button_component.h" +#include "core/components/button/render_button.h" +#include "core/components/padding/padding_component.h" +#include "core/components/padding/render_padding.h" +#include "core/components/test/unittest/display/display_test_utils.h" +#include "core/components/text/text_component.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { + +const Offset PADDING_TEST_OFFSET = Offset(40, 50); +const Size PADDING_TEST_SIZE = Size(500, 500); +const Size PADDING_TEST_LAYOUT = Size(140, 200); +const Size PADDING_TEST_SIZE_DEFAULT = Size(0, 0); +const Size PADDING_TEST_SIZE_MAX = Size(600, 600); +const Size PADDING_TEST_SIZE_BUTTON = Size(40, 100); + +class MockRenderButton final : public RenderButton { +public: + MockRenderButton() = default; + ~MockRenderButton() override = default; + Size Measure() override; +}; + +Size MockRenderButton::Measure() +{ + return PADDING_TEST_SIZE_BUTTON; +} + +class RenderPaddingTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); +}; + +void RenderPaddingTest::SetUpTestCase() {} +void RenderPaddingTest::TearDownTestCase() {} +void RenderPaddingTest::SetUp() {} +void RenderPaddingTest::TearDown() {} + +/** + * @tc.name: RenderPaddingTest001 + * @tc.desc: Verify PerformLayout can calculate padding properties with a child. + * @tc.type: FUNC + * @tc.require: AR000DAQUF + * @tc.author: jinwuwen + */ +HWTEST_F(RenderPaddingTest, RenderPaddingTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of padding component with padding and child. + */ + std::list> buttonChildren; + RefPtr text = AceType::MakeRefPtr("Hi Ace"); + buttonChildren.emplace_back(text); + RefPtr padding = AceType::MakeRefPtr(); + RefPtr button = AceType::MakeRefPtr(buttonChildren); + button->SetHeight(Dimension(100.0)); + button->SetWidth(Dimension(40.0)); + padding->SetPadding(Edge(40.0, 50.0, 60.0, 50.0)); + padding->SetChild(button); + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties are calculated correctly. + */ + auto mockContext = DisplayTestUtils::GetMockContext(); + RefPtr renderPadding = AceType::MakeRefPtr(); + renderPadding->Attach(mockContext); + renderPadding->Update(padding); + RefPtr renderButton = AceType::MakeRefPtr(); + renderButton->Attach(mockContext); + renderButton->Update(button); + renderPadding->AddChild(renderButton); + + LayoutParam layoutParam; + layoutParam.SetMinSize(PADDING_TEST_SIZE_DEFAULT); + layoutParam.SetMaxSize(PADDING_TEST_SIZE_MAX); + renderPadding->SetLayoutParam(layoutParam); + EXPECT_TRUE(renderPadding->NeedLayout()); + + renderPadding->PerformLayout(); + ASSERT_TRUE(renderButton->GetLayoutParam().GetMaxSize() == PADDING_TEST_SIZE); + ASSERT_TRUE(renderButton->GetPosition() == PADDING_TEST_OFFSET); + ASSERT_TRUE(renderPadding->GetLayoutSize() == PADDING_TEST_LAYOUT); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/picker/BUILD.gn b/frameworks/core/components/test/unittest/picker/BUILD.gn new file mode 100644 index 00000000..e7e59d70 --- /dev/null +++ b/frameworks/core/components/test/unittest/picker/BUILD.gn @@ -0,0 +1,63 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +if (is_standard_system) { + module_output_path = "ace_engine_standard/backenduicomponent/picker" +} + +ohos_unittest("RenderPickerTest") { + module_out_path = module_output_path + + sources = [ + "$ace_root/frameworks/core/components/test/json/json_frontend.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/mock_render_common.cpp", + "render_picker_test.cpp", + ] + + configs = [ + ":config_render_picker_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + configs += [ "//third_party/curl:curl_config" ] + deps += [ + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/curl:curl", + ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_render_picker_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + + deps = [ ":RenderPickerTest" ] +} diff --git a/frameworks/core/components/test/unittest/picker/render_picker_test.cpp b/frameworks/core/components/test/unittest/picker/render_picker_test.cpp new file mode 100644 index 00000000..691d55fc --- /dev/null +++ b/frameworks/core/components/test/unittest/picker/render_picker_test.cpp @@ -0,0 +1,369 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/utils/utils.h" +#include "core/components/picker/picker_option_component.h" +#include "core/components/picker/render_picker_base.h" +#include "core/components/picker/render_picker_column.h" +#include "core/components/picker/render_picker_option.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +constexpr uint32_t TEST_LEAP_YEAR = 2020; +constexpr uint32_t TEST_LEAP_HUNDREDS = 2000; +constexpr uint32_t TEST_OTHER_YEAR = 2019; +constexpr uint32_t TEST_OTHER_HUNDREDS = 1900; +constexpr uint32_t TEST_MONTH = 2; +constexpr uint32_t TEST_DAY = 1; +constexpr uint32_t TEST_BIG_MONTH = 3; +constexpr uint32_t TEST_SMALL_MONTH = 11; +constexpr uint32_t TEST_BIT_MONTH_MAX_DAY = 31; +constexpr uint32_t TEST_SMALL_MONTH_MAX_DAY = 30; +constexpr uint32_t TEST_LEAP_YEAR_MAX_DAY = 29u; +constexpr uint32_t TEST_OTHER_YEAR_MAX_DAY = 28u; +const std::string TEST_OPTION_TEXT = "new option text"; +const std::string TEST_COLUMN_TAG = "year"; +const RefPtr THEME_MANAGER = AceType::MakeRefPtr(); + +} // namespace + +class RenderPickerTest : public testing::Test { +public: + static void SetUpTestCase() {} + static void TearDownTestCase() {} + + void SetUp() override {} + void TearDown() override {} +}; + +/** + * @tc.name: RenderPicker001 + * @tc.desc: Verify the max day of february would be calculate correctly. + * @tc.type: FUNC + * @tc.require: AR000DTE1R + * @tc.author: huangzhangmin + */ +HWTEST_F(RenderPickerTest, RenderPicker001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the leap year's february and other february. + */ + PickerDate leapYearDate(TEST_LEAP_YEAR, TEST_MONTH, TEST_DAY); + PickerDate otherYearDate(TEST_OTHER_YEAR, TEST_MONTH, TEST_DAY); + + /** + * @tc.steps: step2. call max day calculating, and check it's value. + * @tc.expected: step2. max day of leap year's february is 29 and other 28. + */ + uint32_t leapMaxDay = PickerDate::GetMaxDay(leapYearDate.GetYear(), leapYearDate.GetMonth()); + uint32_t otherMaxDay = PickerDate::GetMaxDay(otherYearDate.GetYear(), otherYearDate.GetMonth()); + + EXPECT_EQ(leapMaxDay, TEST_LEAP_YEAR_MAX_DAY); + EXPECT_EQ(otherMaxDay, TEST_OTHER_YEAR_MAX_DAY); +} + +/** + * @tc.name: RenderPicker002 + * @tc.desc: Verify the flag of render mark after update function. + * @tc.type: FUNC + * @tc.require: AR000DTE1R + * @tc.author: huangzhangmin + */ +HWTEST_F(RenderPickerTest, RenderPicker002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the component and the render. + */ + auto component = AceType::MakeRefPtr(); + auto render = AceType::DynamicCast(component->CreateRenderNode()); + EXPECT_TRUE(render != nullptr); + + /** + * @tc.steps: step2. call the update function of render, and check it's render mark flag. + * @tc.expected: step2. the need render mark flag is true. + */ + render->Update(component); + EXPECT_EQ(render->NeedLayout(), true); +} + +/** + * @tc.name: RenderPicker003 + * @tc.desc: Verify the flag of selected of render picker option. + * @tc.type: FUNC + * @tc.require: AR000DTE1R + * @tc.author: huangzhangmin + */ +HWTEST_F(RenderPickerTest, RenderPicker003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the component and the render. + */ + auto component = AceType::MakeRefPtr(); + auto render = AceType::DynamicCast(component->CreateRenderNode()); + EXPECT_TRUE(render != nullptr); + + /** + * @tc.steps: step2. call the update function of render, and check it's flag of selected. + * @tc.expected: step2. the flag is the same with the component. + */ + render->Update(component); + EXPECT_EQ(component->GetSelected(), render->GetSelected()); +} + +/** + * @tc.name: RenderPicker004 + * @tc.desc: Verify the text of option after calling of UpdateValue. + * @tc.type: FUNC + * @tc.require: AR000DTE1R + * @tc.author: huangzhangmin + */ +HWTEST_F(RenderPickerTest, RenderPicker004, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the component and the render. + */ + auto theme = THEME_MANAGER->GetTheme(); + auto component = AceType::MakeRefPtr(); + component->SetTheme(theme->clone()); + component->Initialize(); + auto render = AceType::DynamicCast(component->CreateRenderNode()); + auto text = component->GetTextComponent(); + EXPECT_TRUE(render != nullptr); + EXPECT_TRUE(text != nullptr); + + /** + * @tc.steps: step2. call the UpdateValue function of render, and check it's text. + * @tc.expected: step2. the text is the same with the input text. + */ + render->Update(component); + render->UpdateValue(0, TEST_OPTION_TEXT); + EXPECT_EQ(text->GetData(), TEST_OPTION_TEXT); +} + +/** + * @tc.name: RenderPicker005 + * @tc.desc: Verify the flag of render mark after call function of UpdateScrollDelta. + * @tc.type: FUNC + * @tc.require: AR000DTE1R + * @tc.author: huangzhangmin + */ +HWTEST_F(RenderPickerTest, RenderPicker005, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the component and the render. + */ + auto theme = THEME_MANAGER->GetTheme(); + auto component = AceType::MakeRefPtr(); + component->SetTheme(theme->clone()); + component->Initialize(); + auto render = AceType::DynamicCast(component->CreateRenderNode()); + auto text = component->GetTextComponent(); + EXPECT_TRUE(render != nullptr); + EXPECT_TRUE(text != nullptr); + + /** + * @tc.steps: step2. call the UpdateScrollDelta function of render, and check it's render flag. + * @tc.expected: step2. it's render flag is true which means need layout. + */ + render->Update(component); + render->UpdateScrollDelta(0); + EXPECT_EQ(render->NeedLayout(), true); +} + +/** + * @tc.name: RenderPicker006 + * @tc.desc: Verify the column tag of render picker column. + * @tc.type: FUNC + * @tc.require: AR000DTE1R + * @tc.author: huangzhangmin + */ +HWTEST_F(RenderPickerTest, RenderPicker006, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the component and the render. + */ + auto theme = THEME_MANAGER->GetTheme(); + auto component = AceType::MakeRefPtr(); + component->SetTheme(theme->clone()); + component->AppendOption(TEST_OPTION_TEXT); + component->SetColumnTag(TEST_COLUMN_TAG); + component->Initialize(); + auto render = AceType::DynamicCast(component->CreateRenderNode()); + EXPECT_TRUE(render != nullptr); + + /** + * @tc.steps: step2. call the UpdateScrollDelta function of render, and check it's render flag. + * @tc.expected: step2. it's render flag is true which means need layout. + */ + render->Update(component); + EXPECT_EQ(render->GetColumnTag(), TEST_COLUMN_TAG); +} + +/** + * @tc.name: RenderPicker007 + * @tc.desc: Verify the max day of big month would be calculate correctly. + * @tc.type: FUNC + * @tc.require: AR000DQ1Q8 + * @tc.author: huangzhangmin + */ +HWTEST_F(RenderPickerTest, RenderPicker007, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the big month date. + */ + PickerDate bigMonthDate(TEST_OTHER_YEAR, TEST_BIG_MONTH, TEST_DAY); + + /** + * @tc.steps: step2. call max day calculating, and check it's value. + * @tc.expected: step2. max day of big month is 31 days. + */ + uint32_t maxDay = PickerDate::GetMaxDay(bigMonthDate.GetYear(), bigMonthDate.GetMonth()); + EXPECT_EQ(maxDay, TEST_BIT_MONTH_MAX_DAY); +} + +/** + * @tc.name: RenderPicker008 + * @tc.desc: Verify the max day of small month would be calculate correctly. + * @tc.type: FUNC + * @tc.require: AR000DQ1Q8 + * @tc.author: huangzhangmin + */ +HWTEST_F(RenderPickerTest, RenderPicker008, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the small month date. + */ + PickerDate smallMonthDate(TEST_OTHER_YEAR, TEST_SMALL_MONTH, TEST_DAY); + + /** + * @tc.steps: step2. call max day calculating, and check it's value. + * @tc.expected: step2. max day of small month is 30 days. + */ + uint32_t maxDay = PickerDate::GetMaxDay(smallMonthDate.GetYear(), smallMonthDate.GetMonth()); + EXPECT_EQ(maxDay, TEST_SMALL_MONTH_MAX_DAY); +} + +/** + * @tc.name: RenderPicker009 + * @tc.desc: Verify the leap year would be calculate correctly. + * @tc.type: FUNC + * @tc.require: AR000DQ1Q8 + * @tc.author: huangzhangmin + */ +HWTEST_F(RenderPickerTest, RenderPicker009, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the leap year date. + */ + PickerDate leapYear(TEST_LEAP_YEAR, TEST_MONTH, TEST_DAY); + PickerDate leapHundreds(TEST_LEAP_HUNDREDS, TEST_MONTH, TEST_DAY); + + /** + * @tc.steps: step2. call leap year checking function, and check it's value. + * @tc.expected: step2. both year is leap year. + */ + bool checkLeapYear = PickerDate::IsLeapYear(leapYear.GetYear()); + bool checkLeapHundreds = PickerDate::IsLeapYear(leapHundreds.GetYear()); + EXPECT_EQ(checkLeapYear, true); + EXPECT_EQ(checkLeapHundreds, true); +} + +/** + * @tc.name: RenderPicker010 + * @tc.desc: Verify the none leap year would be calculate correctly. + * @tc.type: FUNC + * @tc.require: AR000DQ1Q8 + * @tc.author: huangzhangmin + */ +HWTEST_F(RenderPickerTest, RenderPicker010, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the none leap year date. + */ + PickerDate otherYear(TEST_OTHER_YEAR, TEST_MONTH, TEST_DAY); + PickerDate otherHundreds(TEST_OTHER_HUNDREDS, TEST_MONTH, TEST_DAY); + + /** + * @tc.steps: step2. call leap year checking function, and check it's value. + * @tc.expected: step2. both year is none leap year. + */ + bool checkOtherYear = PickerDate::IsLeapYear(otherYear.GetYear()); + bool checkOtherHundreds = PickerDate::IsLeapYear(otherHundreds.GetYear()); + EXPECT_EQ(checkOtherYear, false); + EXPECT_EQ(checkOtherHundreds, false); +} + +/** + * @tc.name: RenderPicker011 + * @tc.desc: Verify the flags of picker would be setted correctly. + * @tc.type: FUNC + * @tc.require: AR000DQ1Q8 + * @tc.author: huangzhangmin + */ +HWTEST_F(RenderPickerTest, RenderPicker011, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the picker component and set it's flags to be false. + */ + auto picker = AceType::MakeRefPtr(); + picker->SetHasButtons(false); + picker->SetHasLunar(false); + picker->SetHasTitle(false); + + /** + * @tc.steps: step2. get it's flags, and check it's value. + * @tc.expected: step2. all flags is false. + */ + auto hasButtons = picker->GetHasButtons(); + auto hasLunar = picker->GetHasLunar(); + auto hasTitle = picker->GetHasTitle(); + EXPECT_EQ(hasButtons, false); + EXPECT_EQ(hasLunar, false); + EXPECT_EQ(hasTitle, false); +} + +/** + * @tc.name: RenderPicker012 + * @tc.desc: Verify the column would be removed correctly. + * @tc.type: FUNC + * @tc.require: AR000DQ1Q8 + * @tc.author: huangzhangmin + */ +HWTEST_F(RenderPickerTest, RenderPicker012, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the picker component and operate appending and removing to column. + */ + auto picker = AceType::MakeRefPtr(); + auto column = AceType::MakeRefPtr(); + column->SetColumnTag(TEST_COLUMN_TAG); + picker->AppendColumn(column); + picker->RemoveColumn(TEST_COLUMN_TAG); + + /** + * @tc.steps: step2. get the column, and check it's value. + * @tc.expected: step2. the column is removed which is nullptr. + */ + auto nullColumn = picker->GetColumn(TEST_COLUMN_TAG); + EXPECT_EQ(nullColumn, nullptr); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/piece/BUILD.gn b/frameworks/core/components/test/unittest/piece/BUILD.gn new file mode 100644 index 00000000..246e1deb --- /dev/null +++ b/frameworks/core/components/test/unittest/piece/BUILD.gn @@ -0,0 +1,60 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +if (is_standard_system) { + module_output_path = "ace_engine_standard/backenduicomponent/piece" +} + +ohos_unittest("PieceComponentTest") { + module_out_path = module_output_path + + sources = [ "piece_component_test.cpp" ] + + configs = [ + ":config_component_build_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "$ace_root/frameworks/core/components/test:json", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + deps += [ "$ace_root/frameworks/bridge:js_framework_ohos" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_component_build_test") { + visibility = [ ":*" ] + include_dirs = [ + "//utils/native/base/include", + "$ace_root", + ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":PieceComponentTest" ] +} diff --git a/frameworks/core/components/test/unittest/piece/piece_component_test.cpp b/frameworks/core/components/test/unittest/piece/piece_component_test.cpp new file mode 100644 index 00000000..30886e71 --- /dev/null +++ b/frameworks/core/components/test/unittest/piece/piece_component_test.cpp @@ -0,0 +1,207 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/geometry/dimension.h" +#include "base/resource/internal_resource.h" +#include "core/components/flex/flex_component.h" +#include "core/components/flex/flex_item_component.h" +#include "core/components/gesture_listener/gesture_listener_component.h" +#include "core/components/image/image_component.h" +#include "core/components/padding/padding_component.h" +#include "core/components/piece/piece_component.h" +#include "core/components/text/text_component.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +const std::string PIECE_TEXT = "Chips"; +const std::string PIECE_ICON_SRC = "test.svg"; +constexpr Dimension PIECE_INTERVAL = 4.0_vp; +const Edge PIECE_IMAGE_PADDING_LTR = Edge(4.0_vp, 0.0_vp, 0.0_vp, 0.0_vp); +const Edge PIECE_IMAGE_PADDING_RTL = Edge(0.0_vp, 0.0_vp, 4.0_vp, 0.0_vp); + +} // namespace + +class PieceComponentTest : public testing::Test { +public: + static void SetUpTestCase() {} + static void TearDownTestCase() {} + void SetUp() {} + void TearDown() {} +}; + +/** + * @tc.name: PieceComponentBuildChild001 + * @tc.desc: Verify the BuildChild Interface of PieceComponent work correctly with content and showDelete. + * @tc.type: FUNC + * @tc.require: AR000F3L33 + * @tc.author: caocan + */ +HWTEST_F(PieceComponentTest, PieceComponentBuildChild001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct PieceComponent with content and showDelete. + */ + RefPtr piece = AceType::MakeRefPtr(); + piece->SetContent(PIECE_TEXT); + piece->SetShowDelete(true); + piece->SetInterval(PIECE_INTERVAL); + piece->SetTextDirection(TextDirection::LTR); + piece->SetIconResource(InternalResource::ResourceId::PIECE_DELETE_SVG); + + /** + * @tc.steps: step2. call the BuildChild interface of PieceComponent. + * @tc.expected: step2. child of PieceComponent is built correctly. + */ + auto row = AceType::DynamicCast(piece->BuildChild()); + EXPECT_TRUE(row); + EXPECT_TRUE(row->GetChildren().size() == 2); + auto textFlex = AceType::DynamicCast(row->GetChildren().front()); + EXPECT_TRUE(textFlex); + auto text = AceType::DynamicCast(textFlex->GetChild()); + EXPECT_TRUE(text); + auto content = text->GetData(); + EXPECT_TRUE(PIECE_TEXT == content); + auto imageFlex = AceType::DynamicCast(row->GetChildren().back()); + EXPECT_TRUE(imageFlex); + auto padding = AceType::DynamicCast(imageFlex->GetChild()); + EXPECT_TRUE(padding); + EXPECT_TRUE(PIECE_IMAGE_PADDING_LTR == padding->GetPadding()); + auto gestureListener = AceType::DynamicCast(padding->GetChild()); + EXPECT_TRUE(gestureListener); + auto image = AceType::DynamicCast(gestureListener->GetChild()); + EXPECT_TRUE(image); + EXPECT_TRUE(image->GetSrc().empty()); + EXPECT_TRUE(image->GetResourceId() == InternalResource::ResourceId::PIECE_DELETE_SVG); +} + +/** + * @tc.name: PieceComponentBuildChild002 + * @tc.desc: Verify the BuildChild Interface of PieceComponent work correctly in RTL. + * @tc.type: FUNC + * @tc.require: AR000F3L33 + * @tc.author: caocan + */ +HWTEST_F(PieceComponentTest, PieceComponentBuildChild002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct PieceComponent with content, showDelete and icon in RTL. + */ + RefPtr piece = AceType::MakeRefPtr(); + piece->SetContent(PIECE_TEXT); + piece->SetShowDelete(true); + piece->SetIcon(PIECE_ICON_SRC); + piece->SetInterval(PIECE_INTERVAL); + piece->SetTextDirection(TextDirection::RTL); + + /** + * @tc.steps: step2. call the BuildChild interface of PieceComponent. + * @tc.expected: step2. child of PieceComponent is built correctly. + */ + auto row = AceType::DynamicCast(piece->BuildChild()); + EXPECT_TRUE(row); + EXPECT_TRUE(row->GetChildren().size() == 2); + auto imageFlex = AceType::DynamicCast(row->GetChildren().back()); + EXPECT_TRUE(imageFlex); + auto padding = AceType::DynamicCast(imageFlex->GetChild()); + EXPECT_TRUE(padding); + EXPECT_TRUE(PIECE_IMAGE_PADDING_RTL == padding->GetPadding()); + auto gestureListener = AceType::DynamicCast(padding->GetChild()); + EXPECT_TRUE(gestureListener); + auto image = AceType::DynamicCast(gestureListener->GetChild()); + EXPECT_TRUE(image); + EXPECT_TRUE(PIECE_ICON_SRC == image->GetSrc()); + EXPECT_TRUE(image->GetResourceId() == InternalResource::ResourceId::NO_ID); +} + +/** + * @tc.name: PieceComponentBuildChild003 + * @tc.desc: Verify the BuildChild Interface of PieceComponent work correctly with content only. + * @tc.type: FUNC + * @tc.require: AR000F3L33 + * @tc.author: caocan + */ +HWTEST_F(PieceComponentTest, PieceComponentBuildChild003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct PieceComponent with content and showDelete. + */ + RefPtr piece = AceType::MakeRefPtr(); + piece->SetContent(PIECE_TEXT); + + /** + * @tc.steps: step2. call the BuildChild interface of PieceComponent. + * @tc.expected: step2. child of PieceComponent is built correctly. + */ + auto row = AceType::DynamicCast(piece->BuildChild()); + EXPECT_TRUE(row); + EXPECT_TRUE(row->GetChildren().size() == 1); + auto flex = AceType::DynamicCast(row->GetChildren().front()); + EXPECT_TRUE(flex); + auto text = AceType::DynamicCast(flex->GetChild()); + EXPECT_TRUE(text); +} + +/** + * @tc.name: PieceComponentBuildChild004 + * @tc.desc: Verify the BuildChild Interface of PieceComponent work correctly with showDelete only. + * @tc.type: FUNC + * @tc.require: AR000F3L33 + * @tc.author: caocan + */ +HWTEST_F(PieceComponentTest, PieceComponentBuildChild004, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct PieceComponent with showDelete only. + */ + RefPtr piece = AceType::MakeRefPtr(); + piece->SetShowDelete(true); + + /** + * @tc.steps: step2. call the BuildChild interface of PieceComponent. + * @tc.expected: step2. child of PieceComponent is built correctly. + */ + auto row = AceType::DynamicCast(piece->BuildChild()); + EXPECT_TRUE(row == nullptr); +} + +/** + * @tc.name: PieceComponentBuildChild005 + * @tc.desc: Verify the BuildChild Interface of PieceComponent work correctly no attributes. + * @tc.type: FUNC + * @tc.require: AR000F3L33 + * @tc.author: caocan + */ +HWTEST_F(PieceComponentTest, PieceComponentBuildChild005, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct PieceComponent with no attributes. + */ + RefPtr piece = AceType::MakeRefPtr(); + + /** + * @tc.steps: step2. call the BuildChild interface of PieceComponent. + * @tc.expected: step2. child of PieceComponent is built correctly. + */ + auto row = AceType::DynamicCast(piece->BuildChild()); + EXPECT_TRUE(row == nullptr); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/progress/BUILD.gn b/frameworks/core/components/test/unittest/progress/BUILD.gn new file mode 100644 index 00000000..12935d43 --- /dev/null +++ b/frameworks/core/components/test/unittest/progress/BUILD.gn @@ -0,0 +1,93 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +if (is_standard_system) { + module_output_path = "ace_engine_standard/backenduicomponent/progress" +} + +ohos_unittest("ProgressCreatorTest") { + module_out_path = module_output_path + + sources = [ "progress_creator_test.cpp" ] + + configs = [ + ":config_json_creator_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "$ace_root/frameworks/core/components/test:json", + "$flutter_root:ace_skia_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + configs += [ "//third_party/curl:curl_config" ] + deps += [ + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/curl:curl", + ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_json_creator_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +ohos_unittest("RenderProgressTest") { + module_out_path = module_output_path + + sources = [ + "$ace_root/frameworks/core/components/test/json/json_frontend.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/mock_render_common.cpp", + "render_progress_test.cpp", + ] + + configs = [ "$ace_root:ace_test_config" ] + + deps = [ + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "//third_party/googletest:gtest_main", + ] + + if (is_standard_system) { + configs += [ "//third_party/curl:curl_config" ] + deps += [ + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/curl:curl", + ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ + ":ProgressCreatorTest", + ":RenderProgressTest", + ] +} diff --git a/frameworks/core/components/test/unittest/progress/progress_creator_test.cpp b/frameworks/core/components/test/unittest/progress/progress_creator_test.cpp new file mode 100644 index 00000000..94ce15ea --- /dev/null +++ b/frameworks/core/components/test/unittest/progress/progress_creator_test.cpp @@ -0,0 +1,490 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include "gtest/gtest.h" + +#include "base/utils/utils.h" +#include "core/components/common/properties/color.h" +#include "core/components/progress/loading_progress_component.h" +#include "core/components/progress/progress_theme.h" +#include "core/components/test/json/loading_progress_creator.h" +#include "core/components/test/json/progress_creator.h" +#include "core/components/theme/theme_manager.h" +#include "core/components/track/track_component.h" +#include "core/pipeline/base/component.h" +#include "core/pipeline/base/constants.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +constexpr double JSON_VALUE = 0.0; +constexpr double JSON_MIN_VALUE = 0.0; +constexpr double JSON_MAX_VALUE = 10.0; +constexpr double JSON_CACHED_VALUE = 0.0; +constexpr double JSON_THICKNESS = 10.0; +// This color value is easy to compare +const Color TEST_TRACK_SELECTED_COLOR = Color(123456789); +const Color TEST_TRACK_BACKGROUND_COLOR = Color(987654321); +const Color TEST_TRACK_CACHED_COLOR = Color(567891234); + +constexpr double JSON_DIAMETER = 50.0; +constexpr double DEFAULT_DIAMETER = 100.0; + +} // namespace + +class ProgressCreatorTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; + +protected: + RefPtr CreateComponent(const std::string& testJson); + void CompareAllProperty(const RefPtr& progress); + void CompareAllDefault(const RefPtr& progress); +}; + +void ProgressCreatorTest::SetUpTestCase() {} + +void ProgressCreatorTest::TearDownTestCase() {} + +void ProgressCreatorTest::SetUp() {} + +void ProgressCreatorTest::TearDown() {} + +RefPtr ProgressCreatorTest::CreateComponent(const std::string& testJson) +{ + const auto dslBuf = reinterpret_cast(testJson.c_str()); + size_t dslLen = testJson.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + if (component == nullptr) { + return nullptr; + } + return AceType::DynamicCast(component); +} + +void ProgressCreatorTest::CompareAllProperty(const RefPtr& progress) +{ + double min = progress->GetMinValue(); + double max = progress->GetMaxValue(); + double cachedValue = progress->GetCachedValue(); + double value = progress->GetValue(); + EXPECT_TRUE(NearEqual(min, JSON_MIN_VALUE)); + EXPECT_TRUE(NearEqual(max, JSON_MAX_VALUE)); + EXPECT_TRUE(NearEqual(cachedValue, JSON_CACHED_VALUE)); + EXPECT_TRUE(NearEqual(value, JSON_VALUE)); + RefPtr track = progress->GetTrack(); + Color trackBackgroundColor = track->GetBackgroundColor(); + EXPECT_TRUE(trackBackgroundColor == TEST_TRACK_BACKGROUND_COLOR); + Color selectedColor = track->GetSelectColor(); + EXPECT_TRUE(selectedColor == TEST_TRACK_SELECTED_COLOR); + Color cachedColor = track->GetCachedColor(); + EXPECT_TRUE(cachedColor == TEST_TRACK_CACHED_COLOR); + double thickness = track->GetTrackThickness().Value(); + EXPECT_TRUE(NearEqual(thickness, JSON_THICKNESS)); +} + +void ProgressCreatorTest::CompareAllDefault(const RefPtr& progress) +{ + double min = progress->GetMinValue(); + double max = progress->GetMaxValue(); + double cachedValue = progress->GetCachedValue(); + double value = progress->GetValue(); + EXPECT_TRUE(NearEqual(min, JSON_MIN_VALUE)); + EXPECT_TRUE(NearEqual(max, JSON_MAX_VALUE)); + EXPECT_TRUE(NearEqual(cachedValue, JSON_CACHED_VALUE)); + EXPECT_TRUE(NearEqual(value, JSON_VALUE)); + auto type = progress->GetType(); + EXPECT_EQ(type, ProgressType::LINEAR); + RefPtr track = progress->GetTrack(); + Color trackBackgroundColor = track->GetBackgroundColor(); + auto themeManager = AceType::MakeRefPtr(); + auto theme = themeManager->GetTheme(); + ASSERT_TRUE(theme); + EXPECT_TRUE(trackBackgroundColor == theme->GetTrackBgColor()); + Color selectedColor = track->GetSelectColor(); + EXPECT_TRUE(selectedColor == theme->GetTrackSelectedColor()); + Color cachedColor = track->GetCachedColor(); + EXPECT_TRUE(cachedColor == theme->GetTrackCachedColor()); + auto thickness = track->GetTrackThickness(); + EXPECT_TRUE(thickness == theme->GetTrackThickness()); +} + +/** + * @tc.name: ProgressComponentCreator001 + * @tc.desc: Test all the property created properly + * @tc.type: FUNC + * @tc.require: AR000DAR1T AR000DAR1V + * @tc.author: YaoYuchi + */ +HWTEST_F(ProgressCreatorTest, ProgressComponentCreator001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string with all property. + */ + std::string testJson = "{ " + " \"className\": \"Progress\", " + " \"value\": 0.0, " + " \"min\": 0.0, " + " \"max\": 10.0, " + " \"cachedValue\": 0.0, " + " \"thickness\": 10.0, " + " \"selectColor\": { " + " \"className\": \"Color\", " + " \"value\": 123456789 " + " }, " + " \"trackColor\": { " + " \"className\": \"Color\", " + " \"value\": 987654321 " + " }, " + " \"cachedColor\": { " + " \"className\": \"Color\", " + " \"value\": 567891234 " + " } " + "}"; + /** + * @tc.steps: step2. check all property matched + * @tc.expected: step2. all property match + */ + RefPtr progress = CreateComponent(testJson); + ASSERT_TRUE(progress != nullptr); + CompareAllProperty(progress); + GTEST_LOG_(INFO) << progress->GetMaxValue() << " " << progress->GetMinValue(); + auto type = progress->GetType(); + EXPECT_EQ(type, ProgressType::LINEAR); +} + +/** + * @tc.name: ProgressComponentCreator002 + * @tc.desc: Test default property. And all essential properly. + * @tc.type: FUNC + * @tc.require: AR000DAR1T AR000DAR1V + * @tc.author: YaoYuchi + */ +HWTEST_F(ProgressCreatorTest, ProgressComponentCreator002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string with all property. + */ + std::string testJson = "{ " + " \"className\": \"Progress\", " + " \"value\": 0.0, " + " \"min\": 0.0, " + " \"max\": 10.0, " + " \"cachedValue\": 0.0 " + "}"; + /** + * @tc.steps: step2. check all property including default property matched + * @tc.expected: step2. all property match + */ + RefPtr progress = CreateComponent(testJson); + ASSERT_TRUE(progress != nullptr); + CompareAllDefault(progress); +} + +/** + * @tc.name: ProgressComponentCreator003 + * @tc.desc: Missing min property. Fail to create component. + * @tc.type: FUNC + * @tc.require: AR000DAR1T AR000DAR1V + * @tc.author: YaoYuchi + */ +HWTEST_F(ProgressCreatorTest, ProgressComponentCreator003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string with missing min. + */ + std::string testJson = "{ " + " \"className\": \"Progress\", " + " \"value\": 0.0, " + " \"max\": 10.0, " + " \"cachedValue\": 0.0 " + "}"; + /** + * @tc.steps: step2. check component is null or not + * @tc.expected: step2. component is null + */ + RefPtr progress = CreateComponent(testJson); + EXPECT_TRUE(progress == nullptr); +} + +/** + * @tc.name: ProgressComponentCreator004 + * @tc.desc: Missing max property. Fail to create component. + * @tc.type: FUNC + * @tc.require: AR000DAR1T AR000DAR1V + * @tc.author: YaoYuchi + */ +HWTEST_F(ProgressCreatorTest, ProgressComponentCreator004, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string with missing max. + */ + std::string testJson = "{ " + " \"className\": \"Progress\", " + " \"value\": 10.0, " + " \"min\": 10.0, " + " \"cachedValue\": 0.0 " + "}"; + /** + * @tc.steps: step2. check component is null or not + * @tc.expected: step2. component is null + */ + RefPtr progress = CreateComponent(testJson); + EXPECT_TRUE(progress == nullptr); +} + +/** + * @tc.name: ProgressComponentCreator005 + * @tc.desc: Missing value property. Fail to create component. + * @tc.type: FUNC + * @tc.require: AR000DAR1T AR000DAR1V + * @tc.author: YaoYuchi + */ +HWTEST_F(ProgressCreatorTest, ProgressComponentCreator005, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string with missing value. + */ + std::string testJson = "{ " + " \"className\": \"Progress\", " + " \"min\": 0.0, " + " \"max\": 10.0, " + " \"cachedValue\": 0.0 " + "}"; + /** + * @tc.steps: step2. check component is null or not + * @tc.expected: step2. component is null + */ + RefPtr progress = CreateComponent(testJson); + EXPECT_TRUE(progress == nullptr); +} + +/** + * @tc.name: ProgressComponentCreator006 + * @tc.desc: Missing cachedValue property. Fail to create component. + * @tc.type: FUNC + * @tc.require: AR000DAR1T AR000DAR1V + * @tc.author: YaoYuchi + */ +HWTEST_F(ProgressCreatorTest, ProgressComponentCreator006, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string with missing value. + */ + std::string testJson = "{ " + " \"className\": \"Progress\", " + " \"min\": 0.0, " + " \"max\": 10.0, " + " \"value\": 0.0 " + "}"; + /** + * @tc.steps: step2. check component is null or not + * @tc.expected: step2. component is null + */ + RefPtr progress = CreateComponent(testJson); + EXPECT_TRUE(progress == nullptr); +} + +/** + * @tc.name: ProgressComponentCreator007 + * @tc.desc: Max and min value is illegal. + * @tc.type: FUNC + * @tc.require: AR000DAR1T AR000DAR1V + * @tc.author: YaoYuchi + */ +HWTEST_F(ProgressCreatorTest, ProgressComponentCreator007, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string with min = max. + */ + std::string testJson = "{ " + " \"className\": \"Progress\", " + " \"min\": 10.0, " + " \"max\": 10.0, " + " \"value\": 10.0, " + " \"cachedValue\": 10.0 " + "}"; + /** + * @tc.steps: step2. check component is null or not + * @tc.expected: step2. component is null + */ + RefPtr progress = CreateComponent(testJson); + EXPECT_TRUE(progress == nullptr); +} + +/** + * @tc.name: ProgressComponentCreator008 + * @tc.desc: Value is illegal. + * @tc.type: FUNC + * @tc.require: AR000DAR1T AR000DAR1V + * @tc.author: YaoYuchi + */ +HWTEST_F(ProgressCreatorTest, ProgressComponentCreator008, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string with value < min. + */ + std::string testJson = "{ " + " \"className\": \"Progress\", " + " \"min\": 8.0, " + " \"max\": 10.0, " + " \"value\": 0.0, " + " \"cachedValue\": 10.0 " + "}"; + /** + * @tc.steps: step2. check component is null or not + * @tc.expected: step2. component is null + */ + RefPtr progress = CreateComponent(testJson); + EXPECT_TRUE(progress == nullptr); +} + +/** + * @tc.name: ProgressComponentCreator009 + * @tc.desc: CachedValue is illegal. + * @tc.type: FUNC + * @tc.require: AR000DAR1T AR000DAR1V + * @tc.author: YaoYuchi + */ +HWTEST_F(ProgressCreatorTest, ProgressComponentCreator009, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string with cachedValue < min. + */ + std::string testJson = "{ " + " \"className\": \"Progress\", " + " \"min\": 8.0, " + " \"max\": 10.0, " + " \"value\": 9.0, " + " \"cachedValue\": 0.0 " + "}"; + /** + * @tc.steps: step2. check component is null or not + * @tc.expected: step2. component is null + */ + RefPtr progress = CreateComponent(testJson); + EXPECT_TRUE(progress == nullptr); +} + +/** + * @tc.name: ProgressComponentCreator010 + * @tc.desc: Create circular progress with all parameter + * @tc.type: FUNC + * @tc.require: AR000DAR1U AR000DAR1V + * @tc.author: YaoYuchi + */ +HWTEST_F(ProgressCreatorTest, ProgressComponentCreator010, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string with all parameter. + */ + std::string testJson = "{ " + " \"className\": \"Progress\", " + " \"value\": 0.0, " + " \"min\": 0.0, " + " \"max\": 10.0, " + " \"cachedValue\": 0.0, " + " \"thickness\": 10.0, " + " \"type\": 4, " + " \"selectColor\": { " + " \"className\": \"Color\", " + " \"value\": 123456789 " + " }, " + " \"trackColor\": { " + " \"className\": \"Color\", " + " \"value\": 987654321 " + " }, " + " \"cachedColor\": { " + " \"className\": \"Color\", " + " \"value\": 567891234 " + " } " + "}"; + /** + * @tc.steps: step2. check component is null or not and compare all parameter. + * @tc.expected: step2. component is null + */ + RefPtr progress = CreateComponent(testJson); + ASSERT_TRUE(progress != nullptr); + CompareAllProperty(progress); + auto type = progress->GetType(); + EXPECT_EQ(type, ProgressType::CIRCLE); +} + +/** + * @tc.name: LoadingProgressCreator001 + * @tc.desc: Input correct loading progress json. The loading progress can be generated correctly. + * @tc.type: FUNC + * @tc.require: AR000DAUN8 + * @tc.author: YaoYuchi + */ +HWTEST_F(ProgressCreatorTest, LoadingProgressCreator001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string with diameter = 50.0 + */ + std::string testJson = "{ " + " \"className\": \"LoadingProgress\"," + " \"diameter\": 50.0 " + "}"; + /** + * @tc.steps: step2. check the diameter is 50.0 + * @tc.expected: step2. diameter matches + */ + const auto dslBuf = reinterpret_cast(testJson.c_str()); + size_t dslLen = testJson.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + EXPECT_TRUE(component != nullptr); + RefPtr loadingProgress = AceType::DynamicCast(component); + EXPECT_TRUE(loadingProgress != nullptr); + EXPECT_TRUE(NearEqual(loadingProgress->GetDiameter().Value(), JSON_DIAMETER)); +} + +/** + * @tc.name: LoadingProgressCreator002 + * @tc.desc: Input correct loading progress json. The loading progress can be generated correctly. And the diameter + * is default value. + * @tc.type: FUNC + * @tc.require: AR000DAUN8 + * @tc.author: YaoYuchi + */ +HWTEST_F(ProgressCreatorTest, LoadingProgressCreator002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string with no diameter = 50.0 + */ + std::string testJson = "{ " + " \"className\": \"LoadingProgress\" " + "}"; + /** + * @tc.steps: step2. check the diameter is 100.0 + * @tc.expected: step2. diameter matches + */ + const auto dslBuf = reinterpret_cast(testJson.c_str()); + size_t dslLen = testJson.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component != nullptr); + RefPtr loadingProgress = AceType::DynamicCast(component); + ASSERT_TRUE(loadingProgress != nullptr); + EXPECT_TRUE(NearEqual(loadingProgress->GetDiameter().Value(), DEFAULT_DIAMETER)); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/progress/progress_test_utils.h b/frameworks/core/components/test/unittest/progress/progress_test_utils.h new file mode 100644 index 00000000..bfd29108 --- /dev/null +++ b/frameworks/core/components/test/unittest/progress/progress_test_utils.h @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_PROGRESS_PROGRESS_TEST_UTILS_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_PROGRESS_PROGRESS_TEST_UTILS_H + +#include "core/components/progress/render_loading_progress.h" + +namespace OHOS::Ace { +namespace { + +class MockRenderLoadingProgress final : public RenderLoadingProgress { + DECLARE_ACE_TYPE(MockRenderLoadingProgress, RenderLoadingProgress); + +public: + MockRenderLoadingProgress() = default; + ~MockRenderLoadingProgress() override = default; + + double GetCometRadius() const + { + return cometRadius_; + } + + bool CheckLoadingMode(int32_t value) + { + return value == loadingMode_; + } + + bool CheckDiameter(double value) + { + return NearEqual(value, diameter_); + } + + bool CheckCenter(Offset value) + { + return value == center_; + } + + bool CheckScale(double value) + { + return NearEqual(value, scale_); + } + + bool CheckMoveRatio(double value) + { + return NearEqual(value, moveRatio_); + } + + bool CheckRingWidth(double value) + { + return NearEqual(value, ringWidth_); + } + + bool CheckRingRadius(double value) + { + return NearEqual(value, ringRadius_); + } + + bool CheckOrbitRadius(double value) + { + return NearEqual(value, orbitRadius_); + } + + bool CheckCometRadius(double value) + { + return NearEqual(value, cometRadius_); + } + + bool CheckCometTailLen(double value) + { + return NearEqual(value, cometTailLen_); + } + + bool CheckProgressColor(Color value) + { + return value == progressColor_; + } + + bool CheckRingBgWidth(double value) + { + return NearEqual(value, ringBgWidth_); + } + + bool CheckRingBlurRadius(double value) + { + return NearEqual(value, ringBlurRadius_); + } + + bool CheckRingBgBlurRadius(double value) + { + return NearEqual(value, ringBgBlurRadius_); + } + +}; + +} // namespace + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_PROGRESS_PROGRESS_TEST_UTILS_H diff --git a/frameworks/core/components/test/unittest/progress/render_progress_test.cpp b/frameworks/core/components/test/unittest/progress/render_progress_test.cpp new file mode 100644 index 00000000..cc553979 --- /dev/null +++ b/frameworks/core/components/test/unittest/progress/render_progress_test.cpp @@ -0,0 +1,254 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "core/components/progress/loading_progress_component.h" +#include "core/components/test/unittest/mock/mock_render_common.h" +#include "core/components/test/unittest/progress/progress_test_utils.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { + +class RenderProgressTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; + + RefPtr mockContext_; + RefPtr renderNode_; + int32_t index_ = 0; +}; + +void RenderProgressTest::SetUpTestCase() {} +void RenderProgressTest::TearDownTestCase() {} + +void RenderProgressTest::SetUp() +{ + mockContext_ = MockRenderCommon::GetMockContext(); + renderNode_ = AceType::MakeRefPtr(); + renderNode_->Attach(mockContext_); +} + +void RenderProgressTest::TearDown() +{ + mockContext_ = nullptr; + renderNode_ = nullptr; +} + +/** + * @tc.name: RenderProgressTest001 + * @tc.desc: Verify the default value for loading progress. + * @tc.type: FUNC + * @tc.require: AR000F3CAF + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderProgressTest, RenderProgressTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct loading progress component. + * @tc.expected: step1. properties are set correctly. + */ + RefPtr loading = AceType::MakeRefPtr(); + ASSERT_TRUE(loading->GetDiameter() == Dimension()); + ASSERT_TRUE(loading->GetProgressColor() == Color(0xff666666)); + ASSERT_TRUE(NearEqual(loading->GetMoveRatio(), 0.06)); + ASSERT_TRUE(NearEqual(loading->GetRingRadius().Value(), 10.5)); + ASSERT_TRUE(NearEqual(loading->GetOrbitRadius().Value(), 17.0)); + ASSERT_TRUE(NearEqual(loading->GetCometTailLen(), 60.0)); +} + +/** + * @tc.name: RenderProgressTest002 + * @tc.desc: Verify the set value for loading progress. + * @tc.type: FUNC + * @tc.require: AR000F3CAG + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderProgressTest, RenderProgressTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct loading progress component. + * @tc.expected: step1. properties are set correctly. + */ + RefPtr loading = AceType::MakeRefPtr(); + loading->SetDiameter(Dimension(100.0, DimensionUnit::PX)); + loading->SetProgressColor(Color(0xff111111)); + loading->SetMoveRatio(0.05); + loading->SetRingRadius(Dimension(50.0)); + loading->SetOrbitRadius(Dimension(80.0)); + loading->SetCometTailLen(50.0); + + /** + * @tc.steps: step2. Update the component to render node and trggier layout. + * @tc.expected: step2. properties are Calculate correctly. + */ + renderNode_->Update(loading); + ASSERT_TRUE(renderNode_->CheckLoadingMode(MODE_LOOP)); + renderNode_->PerformLayout(); + ASSERT_TRUE(renderNode_->CheckDiameter(100.0)); + ASSERT_TRUE(renderNode_->CheckCenter(Offset(50.0, 50.0))); + ASSERT_TRUE(renderNode_->CheckScale(100.0 / ((80.0 + renderNode_->GetCometRadius()) * 2.0))); + ASSERT_TRUE(renderNode_->CheckMoveRatio(0.05)); + ASSERT_TRUE(renderNode_->CheckRingRadius(50.0)); + ASSERT_TRUE(renderNode_->CheckOrbitRadius(80.0)); + ASSERT_TRUE(renderNode_->CheckCometTailLen(50.0)); + ASSERT_TRUE(renderNode_->CheckProgressColor(Color(0xff111111))); +} + +/** + * @tc.name: RenderProgressTest003 + * @tc.desc: Verify the layout size for loading progress. + * @tc.type: FUNC + * @tc.require: AR000F3CAH + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderProgressTest, RenderProgressTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct loading progress component. + * @tc.expected: step1. properties are set correctly. + */ + RefPtr loading = AceType::MakeRefPtr(); + loading->SetDiameter(Dimension(200.0, DimensionUnit::PX)); + + /** + * @tc.steps: step2. Update the layout param to render node and trggier layout. + * @tc.expected: step2. properties are Calculate correctly. + */ + renderNode_->Update(loading); + renderNode_->PerformLayout(); + ASSERT_TRUE(renderNode_->CheckDiameter(200.0)); + ASSERT_TRUE(renderNode_->CheckCenter(Offset(100.0, 100.0))); + loading->SetDiameter(Dimension(0.0, DimensionUnit::PX)); + renderNode_->Update(loading); + renderNode_->PerformLayout(); + ASSERT_TRUE(renderNode_->CheckDiameter(0.0)); + ASSERT_TRUE(renderNode_->CheckCenter(Offset(36.0, 36.0))); + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(1000.0, 1000.0)); + renderNode_->SetLayoutParam(layoutParam); + renderNode_->PerformLayout(); + ASSERT_TRUE(renderNode_->CheckDiameter(0.0)); + ASSERT_TRUE(renderNode_->CheckCenter(Offset(500.0, 500.0))); +} + +/** + * @tc.name: RenderProgressTest004 + * @tc.desc: Verify layout size effect the loading progress size. + * @tc.type: FUNC + * @tc.require: AR000F3CAG + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderProgressTest, RenderProgressTest004, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct loading progress component. + * @tc.expected: step1. properties are set correctly. + */ + RefPtr loading = AceType::MakeRefPtr(); + loading->SetRingRadius(Dimension(10.5, DimensionUnit::VP)); + loading->SetOrbitRadius(Dimension(17.0, DimensionUnit::VP)); + + /** + * @tc.steps: step2. Update the component with MODE_SMALL and trggier layout. + * @tc.expected: step2. properties are Calculate correctly. + */ + loading->SetDiameter(Dimension(16.0, DimensionUnit::VP)); + renderNode_->Update(loading); + renderNode_->PerformLayout(); + ASSERT_TRUE(renderNode_->CheckCometRadius(3.0)); + ASSERT_TRUE(renderNode_->CheckRingWidth(2.8)); + ASSERT_TRUE(renderNode_->CheckRingBlurRadius(0.5)); + ASSERT_TRUE(renderNode_->CheckRingBgWidth(3.0)); + ASSERT_TRUE(renderNode_->CheckRingBgBlurRadius(2.0)); + + /** + * @tc.steps: step3. Update the component with MODE_MIDDLE and trggier layout. + * @tc.expected: step3. properties are Calculate correctly. + */ + loading->SetDiameter(Dimension(40.0, DimensionUnit::VP)); + renderNode_->Update(loading); + renderNode_->PerformLayout(); + ASSERT_TRUE(renderNode_->CheckCometRadius(3.0)); + ASSERT_TRUE(renderNode_->CheckRingWidth(1.9)); + ASSERT_TRUE(renderNode_->CheckRingBlurRadius(0.2)); + ASSERT_TRUE(renderNode_->CheckRingBgWidth(3.0)); + ASSERT_TRUE(renderNode_->CheckRingBgBlurRadius(2.0)); + + /** + * @tc.steps: step4. Update the component with MODE_LARGE and trggier layout. + * @tc.expected: step4. properties are Calculate correctly. + */ + loading->SetDiameter(Dimension(76.0, DimensionUnit::VP)); + renderNode_->Update(loading); + renderNode_->PerformLayout(); + ASSERT_TRUE(renderNode_->CheckCometRadius(2.2)); + ASSERT_TRUE(renderNode_->CheckRingWidth(1.2)); + ASSERT_TRUE(renderNode_->CheckRingBlurRadius(0.1)); + ASSERT_TRUE(renderNode_->CheckRingBgWidth(2.0)); + ASSERT_TRUE(renderNode_->CheckRingBgBlurRadius(2.0)); +} + +/** + * @tc.name: RenderProgressTest005 + * @tc.desc: Verify layout size effect the loading progress size. + * @tc.type: FUNC + * @tc.require: AR000F3CAG + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderProgressTest, RenderProgressTest005, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct loading progress component. + * @tc.expected: step1. properties are set correctly. + */ + RefPtr loading = AceType::MakeRefPtr(); + loading->SetRingRadius(Dimension(10.5, DimensionUnit::VP)); + loading->SetOrbitRadius(Dimension(17.0, DimensionUnit::VP)); + + /** + * @tc.steps: step2. Update the component (MODE_SMALL - MODE_MIDDLE) and trggier layout. + * @tc.expected: step2. properties are Calculate correctly. + */ + loading->SetDiameter(Dimension(28.0, DimensionUnit::VP)); + renderNode_->Update(loading); + renderNode_->PerformLayout(); + ASSERT_TRUE(renderNode_->CheckCometRadius(3.0)); + ASSERT_TRUE(renderNode_->CheckRingWidth(2.35)); + ASSERT_TRUE(renderNode_->CheckRingBlurRadius(0.35)); + ASSERT_TRUE(renderNode_->CheckRingBgWidth(3.0)); + ASSERT_TRUE(renderNode_->CheckRingBgBlurRadius(2.0)); + + /** + * @tc.steps: step3. Update the component with (MODE_MIDDLE - MODE_LARGE) and trggier layout. + * @tc.expected: step3. properties are Calculate correctly. + */ + loading->SetDiameter(Dimension(58.0, DimensionUnit::VP)); + renderNode_->Update(loading); + renderNode_->PerformLayout(); + ASSERT_TRUE(renderNode_->CheckCometRadius(2.6)); + ASSERT_TRUE(renderNode_->CheckRingWidth(1.55)); + ASSERT_TRUE(renderNode_->CheckRingBlurRadius(0.15)); + ASSERT_TRUE(renderNode_->CheckRingBgWidth(2.5)); + ASSERT_TRUE(renderNode_->CheckRingBgBlurRadius(2.0)); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/rating/BUILD.gn b/frameworks/core/components/test/unittest/rating/BUILD.gn new file mode 100644 index 00000000..35e99112 --- /dev/null +++ b/frameworks/core/components/test/unittest/rating/BUILD.gn @@ -0,0 +1,232 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/backenduicomponent/rating" + +ohos_unittest("RatingCreatorTest") { + module_out_path = module_output_path + + sources = [ "rating_creator_test.cpp" ] + + configs = [ + ":config_json_creator_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "$ace_root/frameworks/core/components/test:json", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + deps += [ "$ace_root/frameworks/bridge:js_framework_ohos" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_json_creator_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +ohos_unittest("RatingComponentTest") { + module_out_path = module_output_path + + sources = [ + # accessibility + "$ace_root/frameworks/core/accessibility/accessibility_node.cpp", + + # animation + "$ace_root/frameworks/core/animation/animator.cpp", + "$ace_root/frameworks/core/animation/anticipate_curve.cpp", + "$ace_root/frameworks/core/animation/cubic_curve.cpp", + "$ace_root/frameworks/core/animation/curves.cpp", + "$ace_root/frameworks/core/animation/scheduler.cpp", + + #base + "$ace_root/adapter/common/cpp/thread_util.cpp", + "$ace_root/adapter/ohos/osal/log_wrapper.cpp", + "$ace_root/frameworks/base/geometry/matrix4.cpp", + "$ace_root/frameworks/base/log/dump_log.cpp", + "$ace_root/frameworks/base/thread/background_task_executor.cpp", + "$ace_root/frameworks/base/utils/base_id.cpp", + + # common + "$ace_root/frameworks/core/common/ace_engine.cpp", + "$ace_root/frameworks/core/common/event_manager.cpp", + "$ace_root/frameworks/core/common/focus_animation_manager.cpp", + "$ace_root/frameworks/core/common/font_manager.cpp", + "$ace_root/frameworks/core/common/vibrator/vibrator_proxy.cpp", + "$ace_root/frameworks/core/common/window.cpp", + "$ace_root/frameworks/core/components/test/json/json_frontend.cpp", + "$ace_root/frameworks/core/pipeline/pipeline_context.cpp", + + # components + "$ace_root/frameworks/core/components/box/box_component.cpp", + "$ace_root/frameworks/core/components/display/display_component.cpp", + "$ace_root/frameworks/core/components/image/image_component.cpp", + "$ace_root/frameworks/core/components/overlay/overlay_component.cpp", + "$ace_root/frameworks/core/components/page/page_component.cpp", + "$ace_root/frameworks/core/components/rating/rating_component.cpp", + "$ace_root/frameworks/core/components/root/root_component.cpp", + "$ace_root/frameworks/core/pipeline/base/component.cpp", + "$ace_root/frameworks/core/pipeline/base/composed_component.cpp", + "$ace_root/frameworks/core/pipeline/base/constants.cpp", + + # elements + "$ace_root/frameworks/core/components/bubble/bubble_element.cpp", + "$ace_root/frameworks/core/components/display/display_element.cpp", + "$ace_root/frameworks/core/components/flex/flex_element.cpp", + "$ace_root/frameworks/core/components/page/page_element.cpp", + "$ace_root/frameworks/core/components/page_transition/page_transition_element.cpp", + "$ace_root/frameworks/core/components/root/root_element.cpp", + "$ace_root/frameworks/core/components/stack/stack_element.cpp", + "$ace_root/frameworks/core/components/stage/stage_element.cpp", + "$ace_root/frameworks/core/components/swiper/swiper_element.cpp", + "$ace_root/frameworks/core/components/transition/transition_element.cpp", + "$ace_root/frameworks/core/components/tween/tween_element.cpp", + "$ace_root/frameworks/core/pipeline/base/component_group_element.cpp", + "$ace_root/frameworks/core/pipeline/base/composed_element.cpp", + "$ace_root/frameworks/core/pipeline/base/element.cpp", + "$ace_root/frameworks/core/pipeline/base/render_element.cpp", + "$ace_root/frameworks/core/pipeline/base/sole_child_element.cpp", + + # others + "$ace_root/frameworks/core/event/back_end_event_manager.cpp", + "$ace_root/frameworks/core/event/multimodal/multimodal_manager.cpp", + "$ace_root/frameworks/core/event/multimodal/multimodal_scene.cpp", + + # focus + "$ace_root/frameworks/core/focus/focus_node.cpp", + + # gestures + "$ace_root/frameworks/core/gestures/click_recognizer.cpp", + "$ace_root/frameworks/core/gestures/drag_recognizer.cpp", + "$ace_root/frameworks/core/gestures/gesture_recognizer.cpp", + "$ace_root/frameworks/core/gestures/gesture_referee.cpp", + "$ace_root/frameworks/core/gestures/raw_recognizer.cpp", + "$ace_root/frameworks/core/gestures/velocity_tracker.cpp", + + # image + "$ace_root/frameworks/core/image/image_cache.cpp", + + # layout + "$ace_root/frameworks/core/components/common/layout/grid_column_info.cpp", + "$ace_root/frameworks/core/components/common/layout/grid_container_info.cpp", + "$ace_root/frameworks/core/components/common/layout/grid_system_manager.cpp", + + # properties + "$ace_root/frameworks/core/components/box/render_box.cpp", + "$ace_root/frameworks/core/components/common/properties/alignment.cpp", + "$ace_root/frameworks/core/components/common/properties/border.cpp", + "$ace_root/frameworks/core/components/common/properties/border_edge.cpp", + "$ace_root/frameworks/core/components/common/properties/color.cpp", + "$ace_root/frameworks/core/components/common/properties/decoration.cpp", + "$ace_root/frameworks/core/components/common/properties/edge.cpp", + "$ace_root/frameworks/core/components/common/properties/page_transition_option.cpp", + "$ace_root/frameworks/core/components/common/properties/scroll_bar.cpp", + "$ace_root/frameworks/core/components/common/properties/text_style.cpp", + + # rendering + "$ace_root/frameworks/core/components/box/render_box_base.cpp", + "$ace_root/frameworks/core/components/bubble/render_bubble.cpp", + "$ace_root/frameworks/core/components/display/render_display.cpp", + "$ace_root/frameworks/core/components/focus_animation/render_focus_animation.cpp", + "$ace_root/frameworks/core/components/image/render_image.cpp", + "$ace_root/frameworks/core/components/rating/render_rating.cpp", + "$ace_root/frameworks/core/components/refresh/render_refresh.cpp", + "$ace_root/frameworks/core/components/root/render_root.cpp", + "$ace_root/frameworks/core/components/scroll/render_multi_child_scroll.cpp", + "$ace_root/frameworks/core/components/scroll/render_scroll.cpp", + "$ace_root/frameworks/core/components/scroll/render_single_child_scroll.cpp", + "$ace_root/frameworks/core/components/stack/render_stack.cpp", + "$ace_root/frameworks/core/components/stage/render_stage.cpp", + "$ace_root/frameworks/core/components/swiper/render_swiper.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/mock_flutter_font_manager.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/mock_render_node_factory.cpp", + "$ace_root/frameworks/core/components/transform/render_transform.cpp", + "$ace_root/frameworks/core/event/key_event.cpp", + "$ace_root/frameworks/core/pipeline/base/render_node.cpp", + + # theme + "$ace_root/frameworks/core/components/theme/app_theme.cpp", + "$ace_root/frameworks/core/components/theme/theme_attributes.cpp", + "$ace_root/frameworks/core/components/theme/theme_constants.cpp", + "$ace_root/frameworks/core/components/theme/theme_manager.cpp", + "$ace_root/frameworks/core/components/theme/theme_utils.cpp", + "$root_out_dir/ace/framework/core/components/theme/theme_constants_default.cpp", + "render_rating_test.cpp", + + #mock + "$ace_root/frameworks/core/components/test/unittest/mock/ace_trace_mock.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/event_report_mock.cpp", + "$ace_root/frameworks/core/mock/mock_ace_application_info.cpp", + "$ace_root/frameworks/core/mock/mock_system_properties.cpp", + "$ace_root/frameworks/core/mock/mock_watch_dog.cpp", + ] + + # add sources only needed by wearable like watch. + if (is_wearable_product) { + sources += [ "$root_out_dir/ace/framework/core/components/theme/theme_constants_watch.cpp" ] + } + + # add sources needed by phone and TV. wearable like watch do not need them + if (!is_wearable_product) { + sources += [ + # theme + "$root_out_dir/ace/framework/core/components/theme/theme_constants_tv.cpp", + ] + } + + configs = [ + ":config_render_rating_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/core/components/theme:build_theme_code", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + external_deps = [ "hiviewdfx_hilog_native:libhilog" ] + deps += [ "//base/global/resmgr_standard/frameworks/resmgr:global_resmgr" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_render_rating_test") { + visibility = [ ":*" ] + include_dirs = [ + "//utils/native/base/include", + "$ace_root", + ] +} + +group("unittest") { + testonly = true + deps = [ + ":RatingComponentTest", + ":RatingCreatorTest", + ] +} diff --git a/frameworks/core/components/test/unittest/rating/rating_creator_test.cpp b/frameworks/core/components/test/unittest/rating/rating_creator_test.cpp new file mode 100644 index 00000000..4c97c37d --- /dev/null +++ b/frameworks/core/components/test/unittest/rating/rating_creator_test.cpp @@ -0,0 +1,169 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "core/components/rating/rating_component.h" +#include "core/components/test/json/rating_creator.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +RefPtr CreateRatingComponent(const std::string& testJson) +{ + const auto dslBuf = reinterpret_cast(testJson.c_str()); + size_t dslLen = testJson.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + if (!component) { + return nullptr; + } + return AceType::DynamicCast(component); +} + +void CheckRatingDefaultValue(const RefPtr& rating) +{ + EXPECT_TRUE(rating); + EXPECT_EQ(rating->GetStarNum(), DEFAULT_RATING_STAR_NUM); + EXPECT_EQ(rating->GetRatingScore(), DEFAULT_RATING_SCORE); + EXPECT_EQ(rating->GetStepSize(), DEFAULT_RATING_STEP_SIZE); + EXPECT_EQ(rating->GetWidth().Value(), DEFAULT_RATING_WIDTH); + EXPECT_EQ(rating->GetHeight().Value(), DEFAULT_RATING_HEIGHT); + EXPECT_EQ(rating->GetPaddingHorizontal().Value(), DEFAULT_RATING_HORIZONTAL_PADDING); + EXPECT_EQ(rating->GetPaddingVertical().Value(), DEFAULT_RATING_VERTICAL_PADDING); + EXPECT_EQ(rating->GetForegroundSrc(), ""); + EXPECT_EQ(rating->GetSecondarySrc(), ""); + EXPECT_EQ(rating->GetBackgroundSrc(), ""); + EXPECT_TRUE(!rating->GetIndicator()); + EXPECT_TRUE(rating->GetChangeEventId().IsEmpty()); +} + +} // namespace + +class RatingCreatorTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); +}; + +void RatingCreatorTest::SetUpTestCase() {} + +void RatingCreatorTest::TearDownTestCase() {} + +void RatingCreatorTest::SetUp() {} + +void RatingCreatorTest::TearDown() {} + +/** + * @tc.name: RatingCreator001 + * @tc.desc: Test parse rating's field successfully from the right fields dsl json of rating component. + * @tc.type: FUNC + * @tc.require: AR000DBSLB AR000DBSLC AR000DBSLD AR000DBSLE + * @tc.author: kouxinxin + */ +HWTEST_F(RatingCreatorTest, RatingCreator001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct the json string with right fields, then create rating component with the json. + * @tc.expected: step1. Rating component successfully created, and the fields value same with the json fields. + */ + std::string dslJson = "{ " + " \"className\": \"Rating\", " + " \"onChange\": \"changeId001\", " + " \"starNum\": 1, " + " \"ratingScore\": 1, " + " \"stepsize\": 0.1, " + " \"width\": 500, " + " \"height\": 80, " + " \"paddingHorizontal\": 20, " + " \"paddingVertical\": 20, " + " \"isIndicator\": 1, " + " \"foregroundSrc\": \"/rating/foreground.img\", " + " \"secondarySrc\": \"/rating/secondary.img\", " + " \"backgroundSrc\": \"/rating/background.img\" " + "} "; + + RefPtr rating = CreateRatingComponent(dslJson); + EXPECT_TRUE(rating); + EXPECT_EQ(rating->GetChangeEventId(), "changeId001"); + EXPECT_EQ(rating->GetStarNum(), 1); + EXPECT_EQ(rating->GetRatingScore(), 1); + EXPECT_EQ(rating->GetStepSize(), 0.1); + EXPECT_EQ(rating->GetWidth().Value(), 500); + EXPECT_EQ(rating->GetHeight().Value(), 80); + EXPECT_EQ(rating->GetPaddingHorizontal().Value(), 20); + EXPECT_EQ(rating->GetPaddingVertical().Value(), 20); + EXPECT_EQ(rating->GetForegroundSrc(), "/rating/foreground.img"); + EXPECT_EQ(rating->GetSecondarySrc(), "/rating/secondary.img"); + EXPECT_EQ(rating->GetBackgroundSrc(), "/rating/background.img"); + EXPECT_TRUE(rating->GetIndicator()); +} + +/** + * @tc.name: RatingCreator002 + * @tc.desc: Test parse rating's field successfully from no field dsl json of rating component. + * @tc.type: FUNC + * @tc.require: AR000DBSLB AR000DBSLC AR000DBSLD AR000DBSLE + * @tc.author: kouxinxin + */ +HWTEST_F(RatingCreatorTest, RatingCreator002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct the json string with no fields, then create rating component with the json. + * @tc.expected: step1. Rating component successfully created, and the fields has default values. + */ + std::string dslJson = "{ \"className\": \"Rating\" }"; + RefPtr rating = CreateRatingComponent(dslJson); + CheckRatingDefaultValue(rating); +} + +/** + * @tc.name: RatingCreator003 + * @tc.desc: Test parse rating's field successfully from the type error fields dsl json of rating component. + * @tc.type: FUNC + * @tc.require: AR000DBSLB AR000DBSLC AR000DBSLD AR000DBSLE + * @tc.author: kouxinxin + */ +HWTEST_F(RatingCreatorTest, RatingCreator003, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct the json string with type error fields, then create rating component with the json. + * @tc.expected: step1. Rating component successfully created, and the fields has default values. + */ + std::string dslJson = "{ " + " \"className\": \"Rating\", " + " \"onChange\": 1, " + " \"numstars\": \"1\", " + " \"ratingScore\": \"1\", " + " \"rating\": \"3\", " + " \"stepsize\": \"0.1\", " + " \"width\": \"500\", " + " \"height\": \"80\", " + " \"paddingHorizontal\": \"20\", " + " \"paddingVertical\": \"20\", " + " \"isIndicator\": \"true\", " + " \"foregroundSrc\": 1, " + " \"secondarySrc\": 1, " + " \"backgroundSrc\": 1 " + "} "; + RefPtr rating = CreateRatingComponent(dslJson); + CheckRatingDefaultValue(rating); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/rating/render_rating_test.cpp b/frameworks/core/components/test/unittest/rating/render_rating_test.cpp new file mode 100644 index 00000000..f3f97a5f --- /dev/null +++ b/frameworks/core/components/test/unittest/rating/render_rating_test.cpp @@ -0,0 +1,592 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "adapter/ohos/osal/fake_asset_manager.h" +#include "adapter/ohos/osal/fake_task_executor.h" +#include "base/utils/system_properties.h" +#include "frameworks/core/components/rating/rating_component.h" +#include "frameworks/core/components/test/json/json_frontend.h" +#include "frameworks/core/event/key_event.h" +#include "frameworks/core/mock/mock_resource_register.h" +#define protected public +#include "frameworks/core/components/rating/render_rating.h" +#include "frameworks/core/components/test/unittest/mock/mock_render_depend.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +using RatingEventCallback = std::function; +using UpdateRatingCallback = std::function&)>; +const UpdateRatingCallback EMPTY_CALLBACK; + +constexpr int32_t SURFACE_WIDTH = 1080; +constexpr int32_t SURFACE_HEIGHT = 2244; + +constexpr uint32_t TEST_RATING_STAR_NUM = 5; +constexpr double TEST_RATING_SCORE = 3.0; +constexpr double TEST_RATING_STEP_SIZE = 1.5; +constexpr double TEST_RATING_STEP_SIZE_FOR_TV = 1.0; +constexpr double TEST_RATING_BIG_STEP_SIZE = 6; +constexpr double TEST_RATING_BIG_SCORE = 6; +constexpr double TEST_SINGLE_STAR_WIDTH = 216.0; +constexpr uint32_t TEST_INVALID_RATING_STAR_NUM = -1; +constexpr double TEST_INVALID_RATING_SCORE = -1.0; +constexpr double TEST_INVALID_RATING_STEP_SIZE = -1.0; +constexpr uint32_t TEST_DEFAULT_RATING_STAR_NUM = 5; +constexpr double TEST_DEFAULT_RATING_SCORE = 0.0; +constexpr double TEST_DEFAULT_RATING_STEP_SIZE = 0.5; + +const KeyEvent KEY_EVENT_RIGHT(KeyCode::KEYBOARD_RIGHT, KeyAction::CLICK, 0, 0, 0); +const KeyEvent KEY_EVENT_LEFT(KeyCode::KEYBOARD_LEFT, KeyAction::CLICK, 0, 0, 0); +const KeyEvent KEY_EVENT_ENTER(KeyCode::KEYBOARD_ENTER, KeyAction::CLICK, 0, 0, 0); + +const TouchPoint MOCK_DOWN_TOUCH_EVENT { 10, 648, 20, TouchType::DOWN }; +const TouchPoint MOCK_MOVE_TOUCH_EVENT { 10, 648, 20, TouchType::MOVE }; +const TouchPoint MOCK_UP_TOUCH_EVENT { 10, 648, 20, TouchType::UP }; +enum class DragDirection { + LEFT, + RIGHT, +}; + +int64_t g_timeStamp = 0; + +int64_t GetTickCount() +{ + return g_timeStamp; +} + +class TestRatingEventHandler : public MockEventHandler { +public: + explicit TestRatingEventHandler(const RatingEventCallback& eventCallback) : eventCallback_(eventCallback) {}; + ~TestRatingEventHandler() = default; + + void HandleAsyncEvent(const EventMarker& eventMarker, const std::string& param) + { + if (eventCallback_) { + eventCallback_(eventMarker.GetData().eventId, param); + } + }; + +private: + RatingEventCallback eventCallback_; +}; + +} // namespace + +class MockImageCache : public ImageCache { + void Clear() override {}; +}; + +RefPtr ImageCache::Create() +{ + return AceType::MakeRefPtr(); +} + +bool IsTv() +{ + return SystemProperties::GetDeviceType() == DeviceType::TV; +} + +class RatingComponentTest : public testing::Test { +public: + static void SetUpTestCase() {} + + static void TearDownTestCase() {} + + void SetUp() + { + auto platformWindow = PlatformWindow::Create(nullptr); + auto window = std::make_unique(std::move(platformWindow)); + auto taskExecutor = Referenced::MakeRefPtr(); + auto assetManager = Referenced::MakeRefPtr(); + auto resRegister = Referenced::MakeRefPtr(); + frontend_ = Frontend::CreateDefault(); + context_ = AceType::MakeRefPtr( + std::move(window), taskExecutor, assetManager, resRegister, frontend_, 0); + } + void TearDown() {} + +protected: + RefPtr context_; + RefPtr frontend_; + void CreateAndRenderRating(UpdateRatingCallback callback) const; + void DragRating(const DragDirection& dragDirection, double dragOffset) const; +}; + +void RatingComponentTest::CreateAndRenderRating(UpdateRatingCallback updateRating) const +{ + RefPtr rating = AceType::MakeRefPtr(); + + if (updateRating) { + updateRating(rating); + } + + auto pageComponent = AceType::MakeRefPtr(0, rating); + + context_->SetupRootElement(); + context_->PushPage(pageComponent); + context_->OnVsyncEvent(GetTickCount(), 0); + context_->OnSurfaceChanged(SURFACE_WIDTH, SURFACE_HEIGHT); +} + +void RatingComponentTest::DragRating(const DragDirection& dragDirection, double dragOffset) const +{ + context_->OnTouchEvent(MOCK_DOWN_TOUCH_EVENT); + TouchPoint touchPoint = MOCK_MOVE_TOUCH_EVENT; + if (dragDirection == DragDirection::LEFT) { + touchPoint.x -= dragOffset; + } else if (dragDirection == DragDirection::RIGHT) { + touchPoint.x += dragOffset; + } + context_->OnTouchEvent(touchPoint); + TouchPoint touchEndPoint = MOCK_UP_TOUCH_EVENT; + touchEndPoint.x = touchPoint.x; + context_->OnTouchEvent(touchEndPoint); + context_->OnVsyncEvent(GetTickCount(), 0); +} + +/** + * @tc.name: RatingOperation001 + * @tc.desc: Test when rating component receives drag event, score is increased by stepsize and won't exceed starNum + * @tc.type: FUNC + * @tc.require: AR000DBSLB + * @tc.author: chenxuankai + */ +HWTEST_F(RatingComponentTest, RatingOperation001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Build a Rating component tree, and add event listeners in Rating. + */ + std::string changeEventId = "rating_change_id"; + double score = TEST_RATING_SCORE; + score += IsTv() ? TEST_RATING_STEP_SIZE_FOR_TV : TEST_RATING_STEP_SIZE; + RefPtr eventHandler = AceType::MakeRefPtr( + [this, changeEventId, &score](const std::string& eventId, const std::string& param) { + GTEST_LOG_(INFO) << param; + std::string expectChangeResult = + std::string("\"change\",{\"rating\":").append(std::to_string(score).append("}")); + EXPECT_EQ(param, expectChangeResult); + EXPECT_EQ(eventId, changeEventId); + }); + + context_->RegisterEventHandler(eventHandler); + CreateAndRenderRating([this, changeEventId](const RefPtr& rating) { + rating->SetChangeEventId(EventMarker(changeEventId)); + rating->SetStarNum(TEST_RATING_STAR_NUM); // starNum = 5 + rating->SetRatingScore(TEST_RATING_SCORE); // ratingScore = 3 + rating->SetStepSize(TEST_RATING_STEP_SIZE); // stepsize = 1.5 + }); + + /** + * @tc.steps: step2. Drag from third star to fourth star. + * @tc.expected: step2. Event of change of score triggers, score is 4.5 on phone (score is 4 on tv). + */ + DragRating(DragDirection::RIGHT, TEST_SINGLE_STAR_WIDTH); + + /** + * @tc.steps: step3. Drag forward from third star to area beyond rating zone. + * @tc.expected: step3. Event of change of score triggers, score is 5. + */ + score = TEST_RATING_STAR_NUM; + DragRating(DragDirection::RIGHT, TEST_SINGLE_STAR_WIDTH * TEST_RATING_STAR_NUM); +} + +/** + * @tc.name: RatingOperation002 + * @tc.desc: Test when stepsize is greater than starNum, score won't exceed starNum + * @tc.type: FUNC + * @tc.require: AR000DBSLB + * @tc.author: chenxuankai + */ +HWTEST_F(RatingComponentTest, RatingOperation002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Build a Rating component tree, and add event listeners in Rating. + */ + std::string changeEventId = "rating_change_id"; + double score = IsTv() ? TEST_RATING_SCORE + TEST_RATING_STEP_SIZE_FOR_TV : TEST_RATING_STAR_NUM; + RefPtr eventHandler = AceType::MakeRefPtr( + [this, changeEventId, &score](const std::string& eventId, const std::string& param) { + GTEST_LOG_(INFO) << param; + std::string expectChangeResult = + std::string("\"change\",{\"rating\":").append(std::to_string(score).append("}")); + EXPECT_EQ(param, expectChangeResult); + EXPECT_EQ(eventId, changeEventId); + }); + + context_->RegisterEventHandler(eventHandler); + CreateAndRenderRating([this, changeEventId](const RefPtr& rating) { + rating->SetChangeEventId(EventMarker(changeEventId)); + rating->SetStarNum(TEST_RATING_STAR_NUM); // starNum = 5 + rating->SetRatingScore(TEST_RATING_SCORE); // ratingScore = 3 + rating->SetStepSize(TEST_RATING_BIG_STEP_SIZE); // stepsize = 6 + }); + + /** + * @tc.steps: step2. Drag from third star to fourth star. + * @tc.expected: step2. Event of change of score triggers, score is 5 on phone (score is 4 on tv). + */ + DragRating(DragDirection::RIGHT, TEST_SINGLE_STAR_WIDTH); +} + +/** + * @tc.name: RatingOperation003 + * @tc.desc: Test while operating rating, if stepsize is greater than starNum, score won't be less than starNum + * @tc.type: FUNC + * @tc.require: AR000DBSLB + * @tc.author: chenxuankai + */ +HWTEST_F(RatingComponentTest, RatingOperation003, TestSize.Level1) +{ + /** + * @tc.steps: step1. Build a Rating component tree, and add event listeners in Rating. + */ + std::string changeEventId = "rating_change_id"; + double score = IsTv() ? TEST_RATING_STEP_SIZE_FOR_TV : TEST_RATING_STAR_NUM; + RefPtr eventHandler = AceType::MakeRefPtr( + [this, changeEventId, &score](const std::string& eventId, const std::string& param) { + GTEST_LOG_(INFO) << param; + std::string expectChangeResult = + std::string("\"change\",{\"rating\":").append(std::to_string(score).append("}")); + EXPECT_EQ(param, expectChangeResult); + EXPECT_EQ(eventId, changeEventId); + }); + + context_->RegisterEventHandler(eventHandler); + CreateAndRenderRating([this, changeEventId](const RefPtr& rating) { + rating->SetChangeEventId(EventMarker(changeEventId)); + rating->SetStarNum(TEST_RATING_STAR_NUM); // starNum = 5 + rating->SetRatingScore(TEST_RATING_SCORE); // ratingScore = 3 + rating->SetStepSize(TEST_RATING_BIG_STEP_SIZE); // stepsize = 6 + }); + + /** + * @tc.steps: step2. Drag from third star to zero star. + * @tc.expected: step2. Event of change of score triggers, score is 5 on phone (score is 4 on tv). + */ + DragRating(DragDirection::LEFT, TEST_SINGLE_STAR_WIDTH * TEST_RATING_SCORE); +} + +/** + * @tc.name: RatingOperation004 + * @tc.desc: Test while operating rating, if stepsize is less than starNum, score won't be less than stepsize and + * change event will trigger even if score doesn't change when click event occurs. + * @tc.type: FUNC + * @tc.require: AR000DBSLB + * @tc.author: chenxuankai + */ +HWTEST_F(RatingComponentTest, RatingOperation004, TestSize.Level1) +{ + /** + * @tc.steps: step1. Build a Rating component tree, and add event listeners in Rating. + */ + std::string changeEventId = "rating_change_id"; + double score = IsTv() ? TEST_RATING_STEP_SIZE_FOR_TV : TEST_RATING_STEP_SIZE; + RefPtr eventHandler = AceType::MakeRefPtr( + [this, changeEventId, &score](const std::string& eventId, const std::string& param) { + GTEST_LOG_(INFO) << param; + std::string expectChangeResult = + std::string("\"change\",{\"rating\":").append(std::to_string(score).append("}")); + EXPECT_EQ(param, expectChangeResult); + EXPECT_EQ(eventId, changeEventId); + }); + + context_->RegisterEventHandler(eventHandler); + CreateAndRenderRating([this, changeEventId](const RefPtr& rating) { + rating->SetChangeEventId(EventMarker(changeEventId)); + rating->SetStarNum(TEST_RATING_STAR_NUM); // starNum = 5 + rating->SetRatingScore(TEST_RATING_SCORE); // ratingScore = 3 + rating->SetStepSize(TEST_RATING_STEP_SIZE); // stepsize = 1.5 + }); + + /** + * @tc.steps: step2. Drag from third star to zero star. + * @tc.expected: step2. Event of change of score triggers, score is 1.5 (score is 1 on tv). + */ + DragRating(DragDirection::LEFT, TEST_SINGLE_STAR_WIDTH * TEST_RATING_SCORE); + + /** + * @tc.steps: step3. Click star 1. + * @tc.expected: step3. Event of change of score still triggers. + */ + double scoreDelta = 2.0; + TouchPoint touchPoint = MOCK_DOWN_TOUCH_EVENT; + touchPoint.x -= TEST_SINGLE_STAR_WIDTH * scoreDelta; + context_->OnTouchEvent(touchPoint); + touchPoint = MOCK_UP_TOUCH_EVENT; + touchPoint.x -= TEST_SINGLE_STAR_WIDTH * scoreDelta; + context_->OnTouchEvent(touchPoint); +} + +/** + * @tc.name: RatingOperation005 + * @tc.desc: Test when rating component receives keyevent:right, score is increased by stepsize and won't exceed starNum + * @tc.type: FUNC + * @tc.require: AR000DBSLB + * @tc.author: chenxuankai + */ +HWTEST_F(RatingComponentTest, RatingOperation005, TestSize.Level1) +{ + /** + * @tc.steps: step1. Build a Rating component tree, and add event listeners in Rating. + */ + std::string changeEventId = "rating_change_id"; + double score = TEST_RATING_SCORE + TEST_RATING_STEP_SIZE; + RefPtr eventHandler = AceType::MakeRefPtr( + [this, changeEventId, &score](const std::string& eventId, const std::string& param) { + GTEST_LOG_(INFO) << param; + std::string expectChangeResult = + std::string("\"change\",{\"rating\":").append(std::to_string(score).append("}")); + EXPECT_EQ(param, expectChangeResult); + EXPECT_EQ(eventId, changeEventId); + }); + + context_->RegisterEventHandler(eventHandler); + CreateAndRenderRating([this, changeEventId](const RefPtr& rating) { + rating->SetChangeEventId(EventMarker(changeEventId)); + rating->SetStarNum(TEST_RATING_STAR_NUM); // starNum = 5 + rating->SetRatingScore(TEST_RATING_SCORE); // ratingScore = 3 + rating->SetStepSize(TEST_RATING_STEP_SIZE); // stepsize = 1.5 + }); + + /** + * @tc.steps: step2. Receive a keyevent:right and keyevent:enter. + * @tc.expected: step2. Event of change of score triggers, score is 4.5. + */ + context_->OnKeyEvent(KEY_EVENT_RIGHT); + context_->OnKeyEvent(KEY_EVENT_ENTER); +} + +/** + * @tc.name: RatingOperation006 + * @tc.desc: Test when stepsize is greater than starNum, keyevent won't make score greater than starNum + * @tc.type: FUNC + * @tc.require: AR000DBSLB + * @tc.author: chenxuankai + */ +HWTEST_F(RatingComponentTest, RatingOperation006, TestSize.Level1) +{ + /** + * @tc.steps: step1. Build a Rating component tree, and add event listeners in Rating. + */ + std::string changeEventId = "rating_change_id"; + double score = TEST_RATING_STAR_NUM; + RefPtr eventHandler = AceType::MakeRefPtr( + [this, changeEventId, &score](const std::string& eventId, const std::string& param) { + GTEST_LOG_(INFO) << param; + std::string expectChangeResult = + std::string("\"change\",{\"rating\":").append(std::to_string(score).append("}")); + EXPECT_EQ(param, expectChangeResult); + EXPECT_EQ(eventId, changeEventId); + }); + + context_->RegisterEventHandler(eventHandler); + CreateAndRenderRating([this, changeEventId](const RefPtr& rating) { + rating->SetChangeEventId(EventMarker(changeEventId)); + rating->SetStarNum(TEST_RATING_STAR_NUM); // starNum = 5 + rating->SetRatingScore(TEST_RATING_SCORE); // ratingScore = 3 + rating->SetStepSize(TEST_RATING_BIG_STEP_SIZE); // stepsize = 6 + }); + + /** + * @tc.steps: step2. Receive a keyevent:right and keyevent:enter. + * @tc.expected: step2. Event of change of score triggers, score is 5. + */ + context_->OnKeyEvent(KEY_EVENT_RIGHT); + context_->OnKeyEvent(KEY_EVENT_ENTER); +} + +/** + * @tc.name: RatingOperation007 + * @tc.desc: Test while operating rating via keyboard, if stepsize is greater than starNum, + * score won't be less than starNum. + * @tc.type: FUNC + * @tc.require: AR000DBSLB + * @tc.author: chenxuankai + */ +HWTEST_F(RatingComponentTest, RatingOperation007, TestSize.Level1) +{ + /** + * @tc.steps: step1. Build a Rating component tree, and add event listeners in Rating. + */ + std::string changeEventId = "rating_change_id"; + double score = TEST_RATING_STAR_NUM; + RefPtr eventHandler = AceType::MakeRefPtr( + [this, changeEventId, &score](const std::string& eventId, const std::string& param) { + GTEST_LOG_(INFO) << param; + std::string expectChangeResult = + std::string("\"change\",{\"rating\":").append(std::to_string(score).append("}")); + EXPECT_EQ(param, expectChangeResult); + EXPECT_EQ(eventId, changeEventId); + }); + + context_->RegisterEventHandler(eventHandler); + CreateAndRenderRating([this, changeEventId](const RefPtr& rating) { + rating->SetChangeEventId(EventMarker(changeEventId)); + rating->SetStarNum(TEST_RATING_STAR_NUM); // starNum = 5 + rating->SetRatingScore(TEST_RATING_SCORE); // ratingScore = 3 + rating->SetStepSize(TEST_RATING_BIG_STEP_SIZE); // stepsize = 6 + }); + + /** + * @tc.steps: step2. Receive a keyevent:left and keyevent:enter. + * @tc.expected: step2. Event of change of score triggers, score is 5. + */ + context_->OnKeyEvent(KEY_EVENT_LEFT); + context_->OnKeyEvent(KEY_EVENT_ENTER); +} + +/** + * @tc.name: RatingOperation008 + * @tc.desc: Test while operating rating via keyboard, if stepsize is less than starNum, score won't be less than + * stepsize. And change event still triggers via keyevent:enter even if score doesn't change. + * @tc.type: FUNC + * @tc.require: AR000DBSLB + * @tc.author: chenxuankai + */ +HWTEST_F(RatingComponentTest, RatingOperation008, TestSize.Level1) +{ + /** + * @tc.steps: step1. Build a Rating component tree, and add event listeners in Rating. + */ + std::string changeEventId = "rating_change_id"; + double score = TEST_RATING_STEP_SIZE; + RefPtr eventHandler = AceType::MakeRefPtr( + [this, changeEventId, &score](const std::string& eventId, const std::string& param) { + GTEST_LOG_(INFO) << param; + std::string expectChangeResult = + std::string("\"change\",{\"rating\":").append(std::to_string(score).append("}")); + EXPECT_EQ(param, expectChangeResult); + EXPECT_EQ(eventId, changeEventId); + }); + + context_->RegisterEventHandler(eventHandler); + CreateAndRenderRating([this, changeEventId](const RefPtr& rating) { + rating->SetChangeEventId(EventMarker(changeEventId)); + rating->SetStarNum(TEST_RATING_STAR_NUM); // starNum = 5 + rating->SetRatingScore(TEST_RATING_SCORE); // ratingScore = 3 + rating->SetStepSize(TEST_RATING_STEP_SIZE); // stepsize = 1.5 + }); + + /** + * @tc.steps: step2. Receive a keyevent:left and keyevent:enter. + * @tc.expected: step2. Event of change of score triggers, score is 1.5. + */ + context_->OnKeyEvent(KEY_EVENT_LEFT); + context_->OnKeyEvent(KEY_EVENT_ENTER); + + /** + * @tc.steps: step3. Receive a keyevent:left and keyevent:enter. + * @tc.expected: step3. Event of change triggers. + */ + context_->OnKeyEvent(KEY_EVENT_LEFT); + context_->OnKeyEvent(KEY_EVENT_ENTER); +} + +/** + * @tc.name: RatingUpdate001 + * @tc.desc: Test rating component can handle valid params + * @tc.type: FUNC + * @tc.require: AR000DBSLB + * @tc.author: chenxuankai + */ +HWTEST_F(RatingComponentTest, RatingUpdate001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Create a rating component and set valid params. + */ + RefPtr rating = AceType::MakeRefPtr(); + rating->SetStepSize(TEST_RATING_STEP_SIZE); + rating->SetStarNum(TEST_RATING_STAR_NUM); + rating->SetRatingScore(TEST_RATING_SCORE); + RefPtr renderRating = AceType::MakeRefPtr(); + renderRating->Attach(context_); + renderRating->Update(rating); + + /** + * @tc.steps: step2. Verify params after update. + * @tc.expected: step2. Params are as expected. + */ + ASSERT_TRUE(renderRating->stepSize_ == (IsTv() ? TEST_RATING_STEP_SIZE_FOR_TV : TEST_RATING_STEP_SIZE)); + ASSERT_TRUE(renderRating->starNum_ == TEST_RATING_STAR_NUM); + ASSERT_TRUE(renderRating->ratingScore_ == TEST_RATING_SCORE); +} + +/** + * @tc.name: RatingUpdate002 + * @tc.desc: Test rating component can handle invalid params + * @tc.type: FUNC + * @tc.require: AR000DBSLB + * @tc.author: chenxuankai + */ +HWTEST_F(RatingComponentTest, RatingUpdate002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Create a rating component and set invalid params. + */ + RefPtr rating = AceType::MakeRefPtr(); + rating->SetStepSize(TEST_INVALID_RATING_STEP_SIZE); + rating->SetStarNum(TEST_INVALID_RATING_STAR_NUM); + rating->SetRatingScore(TEST_INVALID_RATING_SCORE); + RefPtr renderRating = AceType::MakeRefPtr(); + renderRating->Attach(context_); + renderRating->Update(rating); + + /** + * @tc.steps: step2. Verify params after update. + * @tc.expected: step2. Params are as expected. + */ + ASSERT_TRUE(renderRating->stepSize_ == (IsTv() ? TEST_RATING_STEP_SIZE_FOR_TV : TEST_DEFAULT_RATING_STEP_SIZE)); + ASSERT_TRUE(renderRating->starNum_ == TEST_DEFAULT_RATING_STAR_NUM); + ASSERT_TRUE(renderRating->ratingScore_ == TEST_DEFAULT_RATING_SCORE); +} + +/** + * @tc.name: RatingUpdate003 + * @tc.desc: Test rating component can handle valid params that does not match + * @tc.type: FUNC + * @tc.require: AR000DBSLB + * @tc.author: chenxuankai + */ +HWTEST_F(RatingComponentTest, RatingUpdate003, TestSize.Level1) +{ + /** + * @tc.steps: step1. Create a rating component and set params that does not match. + */ + RefPtr rating = AceType::MakeRefPtr(); + rating->SetStepSize(TEST_RATING_BIG_STEP_SIZE); // stepsize = 6, which exceeds starNum + rating->SetStarNum(TEST_RATING_STAR_NUM); // starNum = 5 + rating->SetRatingScore(TEST_RATING_BIG_SCORE); // ratingScore = 6, which exceeds starNum + RefPtr renderRating = AceType::MakeRefPtr(); + renderRating->Attach(context_); + renderRating->Update(rating); + + /** + * @tc.steps: step2. Verify params after update. + * @tc.expected: step2. Params are as expected. + */ + // stepsize is limited to starNum on phone (stepsize remains to be 1 on tv) + ASSERT_TRUE(renderRating->stepSize_ == + (IsTv() ? TEST_RATING_STEP_SIZE_FOR_TV : TEST_RATING_STAR_NUM)); + ASSERT_TRUE(renderRating->starNum_ == TEST_RATING_STAR_NUM); + ASSERT_TRUE(renderRating->ratingScore_ == TEST_RATING_STAR_NUM); // ratingScore is limited to starNum +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/refresh/BUILD.gn b/frameworks/core/components/test/unittest/refresh/BUILD.gn new file mode 100644 index 00000000..4b2fd545 --- /dev/null +++ b/frameworks/core/components/test/unittest/refresh/BUILD.gn @@ -0,0 +1,52 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +if (is_standard_system) { + module_output_path = "ace_engine_standard/backenduicomponent/refresh" +} + +ohos_unittest("RenderRefreshTest") { + module_out_path = module_output_path + + sources = [ + "$ace_root/frameworks/core/components/test/json/json_frontend.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/mock_render_common.cpp", + "render_refresh_test.cpp", + ] + + configs = [ "$ace_root:ace_test_config" ] + + deps = [ + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "//third_party/googletest:gtest_main", + ] + + if (is_standard_system) { + configs += [ "//third_party/curl:curl_config" ] + deps += [ + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/curl:curl", + ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +group("unittest") { + testonly = true + deps = [ ":RenderRefreshTest" ] +} diff --git a/frameworks/core/components/test/unittest/refresh/render_refresh_test.cpp b/frameworks/core/components/test/unittest/refresh/render_refresh_test.cpp new file mode 100644 index 00000000..e8b5261d --- /dev/null +++ b/frameworks/core/components/test/unittest/refresh/render_refresh_test.cpp @@ -0,0 +1,537 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/i18n/localization.h" +#include "base/log/log.h" +#include "core/components/box/render_box.h" +#include "core/components/refresh/refresh_component.h" +#include "core/components/refresh/refresh_theme.h" +#include "core/components/refresh/render_refresh.h" +#include "core/components/test/unittest/mock/mock_render_common.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +using RefreshEventCallback = std::function; +using PulldownEventCallback = std::function; + +constexpr int64_t SEC_TO_NANOSEC = 1000000000; +constexpr int64_t MILLISEC_TO_MICROSEC = 1000; +constexpr int64_t VSYNC_INTERVAL_MILLISEC = 16; +constexpr int64_t VSYNC_INTERVAL_MICROSEC = VSYNC_INTERVAL_MILLISEC * MILLISEC_TO_MICROSEC; +const RefPtr THEME_MANAGER = AceType::MakeRefPtr(); + +static int64_t GetTickCount() +{ + struct timespec ts; + clock_gettime(CLOCK_MONOTONIC, &ts); + return (ts.tv_sec * SEC_TO_NANOSEC + ts.tv_nsec); +} + +const TouchPoint MOCK_DOWN_TOUCH_EVENT { 10, 540.0f, 500.0f, TouchType::DOWN }; +const TouchPoint MOCK_MOVE_TOUCH_EVENT { 10, 540.0f, 500.0f, TouchType::MOVE }; +const TouchPoint MOCK_UP_TOUCH_EVENT { 10, 540.0f, 500.0f, TouchType::UP }; + +enum class DragDirection { + UP, + DOWN, +}; + +class TestPulldownEventHandler : public AceEventHandler { +public: + explicit TestPulldownEventHandler(PulldownEventCallback eventCallback) : eventCallback_(eventCallback) {}; + ~TestPulldownEventHandler() override = default; + + void HandleAsyncEvent(const EventMarker& eventMarker, const std::string& param) override + { + if (eventCallback_) { + eventCallback_(eventMarker.GetData().eventId, param); + } + } + + void HandleAsyncEvent(const EventMarker& eventMarker) override {}; + void HandleAsyncEvent(const EventMarker& eventMarker, int32_t param) override {}; + void HandleAsyncEvent(const EventMarker& eventMarker, const BaseEventInfo& info) override {}; + void HandleAsyncEvent(const EventMarker& eventMarker, const KeyEvent& keyEvent) override {}; + void HandleSyncEvent(const EventMarker& eventMarker, bool& result) override {}; + void HandleSyncEvent(const EventMarker& eventMarker, const BaseEventInfo& info, bool& result) override {}; + void HandleSyncEvent(const EventMarker& eventMarker, const std::string& param, std::string& result) override {}; + void HandleSyncEvent(const EventMarker& eventMarker, const KeyEvent& keyEvent, bool& result) override {}; + +private: + PulldownEventCallback eventCallback_; +}; + +class MockRenderRefresh final : public RenderRefresh { + DECLARE_ACE_TYPE(MockRenderRefresh, RenderRefresh); + +public: + MockRenderRefresh() = default; + ~MockRenderRefresh() override = default; +}; + +class MockRenderBox : public RenderBox {}; +} // namespace + +class RenderRefreshTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; + void DragRefresh(const DragDirection& dragDirection); + void WaitAndMockVsync(int64_t waitFor); + + RefPtr context_; + RefPtr renderRefresh_; +}; + +void RenderRefreshTest::SetUpTestCase() +{ + Localization::GetInstance()->SetLocale("zh", "CN", "", "", ""); + GTEST_LOG_(INFO) << "RefreshTest SetUpTestCase"; +} + +void RenderRefreshTest::TearDownTestCase() +{ + GTEST_LOG_(INFO) << "RefreshTest TearDownTestCase"; +} + +void RenderRefreshTest::SetUp() +{ + context_ = MockRenderCommon::GetMockContext(); + renderRefresh_ = AceType::MakeRefPtr(); + renderRefresh_->Attach(context_); + RefPtr renderBox = AceType::MakeRefPtr(); + renderBox->Attach(context_); + renderRefresh_->AddChild(renderBox); +} + +void RenderRefreshTest::TearDown() +{ + renderRefresh_ = nullptr; + context_ = nullptr; +} + +void RenderRefreshTest::WaitAndMockVsync(int64_t waitFor) +{ + int64_t runningTime = 0; + while (runningTime <= waitFor) { + runningTime += VSYNC_INTERVAL_MILLISEC; + context_->OnVsyncEvent(GetTickCount(), 0); + usleep(VSYNC_INTERVAL_MICROSEC); + } + context_->OnVsyncEvent(GetTickCount(), 0); +} + +void RenderRefreshTest::DragRefresh(const DragDirection& dragDirection) +{ + context_->OnTouchEvent(MOCK_DOWN_TOUCH_EVENT); + TouchPoint touchPoint = MOCK_MOVE_TOUCH_EVENT; + for (int32_t i = 0; i < 3; i++) { + context_->OnTouchEvent(touchPoint); + context_->OnVsyncEvent(GetTickCount(), 0); + if (dragDirection == DragDirection::DOWN) { + touchPoint.y += 20.0f; + } else if (dragDirection == DragDirection::UP) { + touchPoint.y -= 20.0f; + } + } + TouchPoint touchEndPoint = MOCK_UP_TOUCH_EVENT; + touchEndPoint.x = touchPoint.x; + touchEndPoint.y = touchPoint.y; + context_->OnTouchEvent(touchEndPoint); + usleep(VSYNC_INTERVAL_MICROSEC); + context_->OnVsyncEvent(GetTickCount(), 0); +} + +/** + * @tc.name: RenderRefreshTest001 + * @tc.desc: Test the refresh + * @tc.type: FUNC + * @tc.require: AR000DQ1RK + * @tc.author: liujinwei + */ +HWTEST_F(RenderRefreshTest, RenderRefreshTest001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderRefreshTest RenderRefreshTest001 start"; + + /** + * @tc.steps: step1. Build a component tree containing sub-components + * @tc.expected: step1. Refresh component displays correctly. + */ + RefPtr refresh = AceType::MakeRefPtr(); + + ASSERT_TRUE(refresh->GetRefreshType() == RefreshType::AUTO); + GTEST_LOG_(INFO) << "RenderRefreshTest RenderRefreshTest001 stop"; +} + +/** + * @tc.name: RenderRefreshTest002 + * @tc.desc: Test the refresh + * @tc.type: FUNC + * @tc.require: AR000DQ1RK + * @tc.author: liujinwei + */ +HWTEST_F(RenderRefreshTest, RenderRefreshTest002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderRefreshTest RenderRefreshTest002 start"; + + /** + * @tc.steps: step1. Build a component tree containing sub-components + * @tc.expected: step1. Refresh component displays correctly. + */ + RefPtr refresh = AceType::MakeRefPtr(); + ASSERT_TRUE(refresh->IsRefreshing() == false); + GTEST_LOG_(INFO) << "RenderRefreshTest RenderRefreshTest002 stop"; +} + +/** + * @tc.name: RenderRefreshTest003 + * @tc.desc: Test the refresh + * @tc.type: FUNC + * @tc.require: AR000DQ1RK + * @tc.author: liujinwei + */ +HWTEST_F(RenderRefreshTest, RenderRefreshTest003, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderRefreshTest RenderRefreshTest003 start"; + + /** + * @tc.steps: step1. Build a component tree containing sub-components + * @tc.expected: step1. Refresh component displays correctly. + */ + RefPtr refresh = AceType::MakeRefPtr(); + ASSERT_TRUE(refresh->GetIndicatorOffset() == Dimension(16.0, DimensionUnit::VP)); + GTEST_LOG_(INFO) << "RenderRefreshTest RenderRefreshTest003 stop"; +} + +/** + * @tc.name: RenderRefreshTest004 + * @tc.desc: Test the refresh + * @tc.type: FUNC + * @tc.require: AR000DQ1RI + * @tc.author: liujinwei + */ +HWTEST_F(RenderRefreshTest, RenderRefreshTest004, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderRefreshTest RenderRefreshTest004 start"; + + /** + * @tc.steps: step1. Build a component tree containing sub-components + * @tc.expected: step1. Refresh component displays correctly. + */ + RefPtr refresh = AceType::MakeRefPtr(); + ASSERT_TRUE(refresh->IsShowLastTime() == false); + GTEST_LOG_(INFO) << "RenderRefreshTest RenderRefreshTest004 stop"; +} + +#ifndef WEARABLE_PRODUCT +/** + * @tc.name: RenderRefreshTest005 + * @tc.desc: Test the refresh + * @tc.type: FUNC + * @tc.require: AR000DQ1RL + * @tc.author: liujinwei + */ +HWTEST_F(RenderRefreshTest, RenderRefreshTest005, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderRefreshTest RenderRefreshTest005 start"; + + /** + * @tc.steps: step1. Build a component tree containing sub-components + * @tc.expected: step1. Refresh component displays correctly. + */ + RefPtr refresh = AceType::MakeRefPtr(); + ASSERT_TRUE(refresh->GetBackgroundColor() == Color::WHITE); + GTEST_LOG_(INFO) << "RenderRefreshTest RenderRefreshTest005 stop"; +} + +/** + * @tc.name: RenderRefreshTest006 + * @tc.desc: Test the refresh + * @tc.type: FUNC + * @tc.require: AR000DQ1RL + * @tc.author: liujinwei + */ +HWTEST_F(RenderRefreshTest, RenderRefreshTest006, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderRefreshTest RenderRefreshTest006 start"; + + /** + * @tc.steps: step1. Build a component tree containing sub-components + * @tc.expected: step1. Refresh component displays correctly. + */ + RefPtr refresh = AceType::MakeRefPtr(); + ASSERT_TRUE(refresh->GetProgressColor() == Color::BLACK); + GTEST_LOG_(INFO) << "RenderRefreshTest RenderRefreshTest006 stop"; +} +#endif + +/** + * @tc.name: RenderRefreshTest007 + * @tc.desc: Test the refresh + * @tc.type: FUNC + * @tc.require: AR000E8T7M + * @tc.author: liujinwei + */ +HWTEST_F(RenderRefreshTest, RenderRefreshTest007, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderRefreshTest RenderRefreshTest007 start"; + + /** + * @tc.steps: step1. Build a component tree containing sub-components + * @tc.expected: step1. Refresh component displays correctly. + */ + RefPtr refresh = AceType::MakeRefPtr(); + auto theme = THEME_MANAGER->GetTheme(); + if (theme) { + refresh->SetLoadingDistance(theme->GetLoadingDistance()); + refresh->SetRefreshDistance(theme->GetRefreshDistance()); + refresh->SetProgressDistance(theme->GetProgressDistance()); + refresh->SetProgressDiameter(theme->GetProgressDiameter()); + refresh->SetMaxDistance(theme->GetMaxDistance()); + refresh->SetShowTimeDistance(theme->GetShowTimeDistance()); + } + renderRefresh_->Update(refresh); + renderRefresh_->PerformLayout(); + ASSERT_TRUE(renderRefresh_->GetStatus() == RefreshStatus::INACTIVE); + + /** + * @tc.steps: step2. handle drag update 10px + * @tc.expected: step2. Refresh change status to drag. + */ + renderRefresh_->HandleDragUpdate(10.0); + renderRefresh_->PerformLayout(); + ASSERT_TRUE(renderRefresh_->GetStatus() == RefreshStatus::DRAG); + + /** + * @tc.steps: step3. handle drag update 200px + * @tc.expected: step3. Refresh change status to drag. + */ + renderRefresh_->HandleDragUpdate(200.0); + renderRefresh_->PerformLayout(); + ASSERT_TRUE(renderRefresh_->GetStatus() == RefreshStatus::OVER_DRAG); + renderRefresh_->PerformLayout(); + ASSERT_TRUE(renderRefresh_->GetStatus() == RefreshStatus::DONE); + GTEST_LOG_(INFO) << "RenderRefreshTest RenderRefreshTest007 stop"; +} + +/** + * @tc.name: RenderRefreshTest008 + * @tc.desc: Test the refresh + * @tc.type: FUNC + * @tc.require: AR000E8T7M + * @tc.author: liujinwei + */ +HWTEST_F(RenderRefreshTest, RenderRefreshTest008, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderRefreshTest RenderRefreshTest008 start"; + + std::string pulldownEventId = "pulldown_id"; + + RefPtr eventHandler = AceType::MakeRefPtr( + [this, pulldownEventId](const std::string& eventId, const std::string& param) { + std::string expectPulldownResult = + std::string("\"pulldown\",{\"state\":\"start\"").append("},null"); + EXPECT_EQ(param, expectPulldownResult); + EXPECT_EQ(eventId, pulldownEventId); + }); + + context_->RegisterEventHandler(eventHandler); + /** + * @tc.steps: step1. Build a component tree containing sub-components + * @tc.expected: step1. Refresh component displays correctly. + */ + RefPtr refresh = AceType::MakeRefPtr(); + refresh->SetPulldownEventId(EventMarker(pulldownEventId)); + + auto theme = THEME_MANAGER->GetTheme(); + if (theme) { + refresh->SetLoadingDistance(theme->GetLoadingDistance()); + refresh->SetRefreshDistance(theme->GetRefreshDistance()); + refresh->SetProgressDistance(theme->GetProgressDistance()); + refresh->SetProgressDiameter(theme->GetProgressDiameter()); + refresh->SetMaxDistance(theme->GetMaxDistance()); + refresh->SetShowTimeDistance(theme->GetShowTimeDistance()); + } + renderRefresh_->Update(refresh); + renderRefresh_->PerformLayout(); + ASSERT_TRUE(renderRefresh_->GetStatus() == RefreshStatus::INACTIVE); + + /** + * @tc.steps: step2. handle drag update 10px + * @tc.expected: step2. Refresh change status to drag. + */ + renderRefresh_->HandleDragUpdate(10.0); + renderRefresh_->PerformLayout(); + ASSERT_TRUE(renderRefresh_->GetStatus() == RefreshStatus::DRAG); + GTEST_LOG_(INFO) << "RenderRefreshTest RenderRefreshTest008 stop"; +} + +/** + * @tc.name: RenderRefreshTest009 + * @tc.desc: Test the refresh pulldown to OVER_DRAG STATE + * @tc.type: FUNC + * @tc.require: AR000F3CAK + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderRefreshTest, RenderRefreshTest009, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderRefreshTest RenderRefreshTest009 start"; + /** + * @tc.steps: step1. Build a component tree containing sub-components + * @tc.expected: step1. Refresh component displays correctly. + */ + auto refresh = AceType::MakeRefPtr(); + auto theme = THEME_MANAGER->GetTheme(); + if (theme) { + refresh->SetProgressDistance(theme->GetProgressDistance()); + refresh->SetProgressDiameter(theme->GetProgressDiameter()); + refresh->SetRefreshDistance(theme->GetRefreshDistance()); + refresh->SetMaxDistance(theme->GetMaxDistance()); + refresh->SetShowTimeDistance(theme->GetShowTimeDistance()); + refresh->SetLoadingDistance(theme->GetLoadingDistance()); + } + renderRefresh_->RemoveChild(renderRefresh_->GetChildren().front()); + renderRefresh_->Update(refresh); + auto loadingBox = renderRefresh_->GetChildren().front(); + ASSERT_TRUE(loadingBox != nullptr && !loadingBox->GetChildren().empty()); + auto loadingBGBox = loadingBox->GetChildren().front(); + ASSERT_TRUE(loadingBGBox != nullptr); + auto loading = AceType::DynamicCast(loadingBGBox->GetChildren().front()); + ASSERT_TRUE(loading != nullptr); + ASSERT_TRUE(loading->GetLoadingMode() == MODE_DRAG); + + /** + * @tc.steps: step2. Trigger pulldown event to refresh. + * @tc.expected: step2. Refresh and Loading state correctly. + */ + renderRefresh_->HandleDragUpdate(100.0); + renderRefresh_->PerformLayout(); + ASSERT_TRUE(loading->GetLoadingMode() == MODE_DRAG); + renderRefresh_->HandleDragEnd(); + renderRefresh_->PerformLayout(); + ASSERT_TRUE(loading->GetLoadingMode() == MODE_LOOP); + GTEST_LOG_(INFO) << "RenderRefreshTest RenderRefreshTest009 stop"; +} + +/** + * @tc.name: RenderRefreshTest010 + * @tc.desc: Test the refresh pulldown to DRAG STATE + * @tc.type: FUNC + * @tc.require: AR000F3CAL + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderRefreshTest, RenderRefreshTest010, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderRefreshTest RenderRefreshTest010 start"; + /** + * @tc.steps: step1. Build a component tree containing sub-components + * @tc.expected: step1. Refresh component displays correctly. + */ + auto refresh = AceType::MakeRefPtr(); + auto theme = THEME_MANAGER->GetTheme(); + if (theme) { + refresh->SetShowTimeDistance(theme->GetShowTimeDistance()); + refresh->SetLoadingDistance(theme->GetLoadingDistance()); + refresh->SetRefreshDistance(theme->GetRefreshDistance()); + refresh->SetProgressDiameter(theme->GetProgressDiameter()); + refresh->SetMaxDistance(theme->GetMaxDistance()); + refresh->SetProgressDistance(theme->GetProgressDistance()); + } + renderRefresh_->RemoveChild(renderRefresh_->GetChildren().front()); + renderRefresh_->Update(refresh); + auto loadingBox = renderRefresh_->GetChildren().front(); + ASSERT_TRUE(loadingBox != nullptr); + auto loadingBGBox = loadingBox->GetChildren().front(); + ASSERT_TRUE(loadingBGBox != nullptr); + auto loading = AceType::DynamicCast(loadingBGBox->GetChildren().front()); + ASSERT_TRUE(loading != nullptr); + ASSERT_TRUE(loading->GetLoadingMode() == MODE_DRAG); + + /** + * @tc.steps: step2. Trigger pulldown event to refresh. + * @tc.expected: step2. Refresh and Loading state correctly. + */ + renderRefresh_->HandleDragUpdate(10.0); + renderRefresh_->PerformLayout(); + ASSERT_TRUE(loading->GetLoadingMode() == MODE_DRAG); + renderRefresh_->HandleDragEnd(); + renderRefresh_->PerformLayout(); + ASSERT_TRUE(loading->GetLoadingMode() == MODE_DRAG); + GTEST_LOG_(INFO) << "RenderRefreshTest RenderRefreshTest010 stop"; +} + +/** + * @tc.name: RenderRefreshTest011 + * @tc.desc: Test the refresh change from REFRESH to NONE STATE + * @tc.type: FUNC + * @tc.require: AR000F3CAM + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderRefreshTest, RenderRefreshTest011, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderRefreshTest RenderRefreshTest011 start"; + /** + * @tc.steps: step1. Build a component tree containing sub-components + * @tc.expected: step1. Refresh and Loading state correctly. + */ + auto refresh = AceType::MakeRefPtr(); + refresh->SetRefreshEventId(EventMarker("eventId")); + auto theme = THEME_MANAGER->GetTheme(); + if (theme) { + refresh->SetProgressDistance(theme->GetProgressDistance()); + refresh->SetLoadingDistance(theme->GetLoadingDistance()); + refresh->SetRefreshDistance(theme->GetRefreshDistance()); + refresh->SetMaxDistance(theme->GetMaxDistance()); + refresh->SetShowTimeDistance(theme->GetShowTimeDistance()); + refresh->SetProgressDiameter(theme->GetProgressDiameter()); + } + renderRefresh_->RemoveChild(renderRefresh_->GetChildren().front()); + renderRefresh_->Update(refresh); + auto box = renderRefresh_->GetChildren().front(); + ASSERT_TRUE(box != nullptr); + auto bgBox = box->GetChildren().front(); + ASSERT_TRUE(bgBox != nullptr); + auto loading = AceType::DynamicCast(bgBox->GetChildren().front()); + ASSERT_TRUE(loading != nullptr); + ASSERT_TRUE(loading->GetLoadingMode() == MODE_DRAG); + + /** + * @tc.steps: step2. Trigger pulldown event to refresh. + * @tc.expected: step2. Refresh and Loading state correctly. + */ + renderRefresh_->HandleDragUpdate(100.0); + renderRefresh_->PerformLayout(); + ASSERT_TRUE(loading->GetLoadingMode() == MODE_DRAG); + renderRefresh_->HandleDragEnd(); + renderRefresh_->SetRefreshStatus(true); + renderRefresh_->HandleDragUpdate(-100.0); + renderRefresh_->PerformLayout(); + ASSERT_TRUE(loading->GetLoadingMode() == MODE_LOOP); + refresh->SetRefreshing(false); + renderRefresh_->Update(refresh); + renderRefresh_->PerformLayout(); + ASSERT_TRUE(loading->GetLoadingMode() == MODE_EXIT); + GTEST_LOG_(INFO) << "RenderRefreshTest RenderRefreshTest011 stop"; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/rotation/BUILD.gn b/frameworks/core/components/test/unittest/rotation/BUILD.gn new file mode 100644 index 00000000..ca551776 --- /dev/null +++ b/frameworks/core/components/test/unittest/rotation/BUILD.gn @@ -0,0 +1,48 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +if (is_standard_system) { + module_output_path = "ace_engine_standard/backenduicomponent/rotation" +} + +ohos_unittest("RotationTest") { + module_out_path = module_output_path + + sources = [ + "$ace_root/frameworks/core/components/test/json/json_frontend.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/mock_render_common.cpp", + "rotation_test.cpp", + ] + + configs = [ "$ace_root:ace_test_config" ] + + deps = [ + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "//third_party/googletest:gtest_main", + ] + + if (is_standard_system) { + deps += [ "$ace_root/frameworks/bridge:js_framework_ohos" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +group("unittest") { + testonly = true + deps = [ ":RotationTest" ] +} diff --git a/frameworks/core/components/test/unittest/rotation/rotation_test.cpp b/frameworks/core/components/test/unittest/rotation/rotation_test.cpp new file mode 100644 index 00000000..b42aae74 --- /dev/null +++ b/frameworks/core/components/test/unittest/rotation/rotation_test.cpp @@ -0,0 +1,188 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "core/components/common/rotation/rotation_node.h" +#include "core/pipeline/base/render_node.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { + +const double ROTATION_VALUE = 200.0; + +class MockRotationRenderNode final : public RenderNode, public RotationNode { + DECLARE_ACE_TYPE(MockRotationRenderNode, RenderNode, RotationNode); + +public: + explicit MockRotationRenderNode(bool accept) : accept_(accept) {} + ~MockRotationRenderNode() override = default; + + bool OnRotation(const RotationEvent& event) override; + bool CheckResult(const RotationEvent& event); + + void Update(const RefPtr& component) override {} + void PerformLayout() override {} + +private: + double value_ = 0.0; + bool accept_ = false; +}; + +class MockRenderNode : public RenderNode { +public: + void Update(const RefPtr& component) override {} + void PerformLayout() override {} +}; + +bool MockRotationRenderNode::OnRotation(const RotationEvent& event) +{ + if (accept_) { + value_ = event.value; + return true; + } + return false; +} + +bool MockRotationRenderNode::CheckResult(const RotationEvent& event) +{ + return (accept_ && event.value == value_); +} + +class RotationTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; +}; + +void RotationTest::SetUpTestCase() {} +void RotationTest::TearDownTestCase() {} +void RotationTest::SetUp() {} +void RotationTest::TearDown() {} + +/** + * @tc.name: RotationTest001 + * @tc.desc: Build render tree and dispatch rotation event to rotation node, then node accept it and check result. + * @tc.type: FUNC + * @tc.require: AR000DQ24K AR000DQ24I + */ +HWTEST_F(RotationTest, RotationTest001, TestSize.Level0) +{ + /** + * @tc.steps: step1. build render tree and dispatch rotation event. + */ + RefPtr renderTree = AceType::MakeRefPtr(); + renderTree->AddChild(AceType::MakeRefPtr()); + auto rotationNode = AceType::MakeRefPtr(true); + renderTree->AddChild(rotationNode); + renderTree->AddChild(AceType::MakeRefPtr()); + + RotationEvent event { ROTATION_VALUE }; + renderTree->RotationTest(event); + + /** + * @tc.steps: step2. Verify that the event is dispatched to rotation node. + * @tc.expected: step2. Properties are calculated correctly. + */ + ASSERT_TRUE(rotationNode->CheckResult(event)); +} + +/** + * @tc.name: RotationTest002 + * @tc.desc: Build render tree and dispatch rotation event to rotation node, then node refuse it and check result. + * @tc.type: FUNC + * @tc.require: AR000DQ24K AR000DQ24J + */ +HWTEST_F(RotationTest, RotationTest002, TestSize.Level0) +{ + /** + * @tc.steps: step1. build render tree and dispatch rotation event. + */ + RefPtr renderTree = AceType::MakeRefPtr(); + renderTree->AddChild(AceType::MakeRefPtr()); + auto rotationNode = AceType::MakeRefPtr(false); + renderTree->AddChild(rotationNode); + renderTree->AddChild(AceType::MakeRefPtr()); + + RotationEvent event { ROTATION_VALUE }; + renderTree->RotationTest(event); + + /** + * @tc.steps: step2. Verify that the event is dispatched to rotation node. + * @tc.expected: step2. Properties are calculated correctly. + */ + ASSERT_FALSE(rotationNode->CheckResult(event)); +} + +/** + * @tc.name: RotationTest003 + * @tc.desc: Build render tree and dispatch rotation event to rotation node, then third node accept it and check result. + * @tc.type: FUNC + * @tc.require: AR000DQ24K AR000DQ24J + */ +HWTEST_F(RotationTest, RotationTest003, TestSize.Level0) +{ + /** + * @tc.steps: step1. build render tree and dispatch rotation event. + */ + RefPtr renderTree = AceType::MakeRefPtr(); + auto secondNode = AceType::MakeRefPtr(true); + auto thirdNode = AceType::MakeRefPtr(true); + renderTree->AddChild(secondNode); + secondNode->AddChild(thirdNode); + + RotationEvent event { ROTATION_VALUE }; + renderTree->RotationTest(event); + + /** + * @tc.steps: step2. Verify that the event is dispatched to rotation node. + * @tc.expected: step2. Properties are calculated correctly. + */ + ASSERT_FALSE(secondNode->CheckResult(event)); + ASSERT_TRUE(thirdNode->CheckResult(event)); +} + +/** + * @tc.name: RotationTest004 + * @tc.desc: Build render tree and dispatch rotation event to rotation node, then third node refuse it and check result. + * @tc.type: FUNC + * @tc.require: AR000DQ24K AR000DQ24J + */ +HWTEST_F(RotationTest, RotationTest004, TestSize.Level0) +{ + /** + * @tc.steps: step1. build render tree and dispatch rotation event. + */ + RefPtr renderTree = AceType::MakeRefPtr(); + auto secondNode = AceType::MakeRefPtr(true); + auto thirdNode = AceType::MakeRefPtr(false); + renderTree->AddChild(secondNode); + secondNode->AddChild(thirdNode); + + RotationEvent event { ROTATION_VALUE }; + renderTree->RotationTest(event); + + /** + * @tc.steps: step2. Verify that the event is dispatched to rotation node. + * @tc.expected: step2. Properties are calculated correctly. + */ + ASSERT_TRUE(secondNode->CheckResult(event)); + ASSERT_FALSE(thirdNode->CheckResult(event)); +} +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/scroll/BUILD.gn b/frameworks/core/components/test/unittest/scroll/BUILD.gn new file mode 100644 index 00000000..7867feff --- /dev/null +++ b/frameworks/core/components/test/unittest/scroll/BUILD.gn @@ -0,0 +1,87 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +if (is_standard_system) { + module_output_path = "ace_engine_standard/backenduicomponent/scroll" +} + +ohos_unittest("ScrollCreatorTest") { + module_out_path = module_output_path + + sources = [ "scroll_creator_test.cpp" ] + + configs = [ + ":config_json_creator_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "$ace_root/frameworks/core/components/test:json", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + deps += [ "$ace_root/frameworks/bridge:js_framework_ohos" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_json_creator_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +ohos_unittest("RenderScrollTest") { + module_out_path = module_output_path + + sources = [ + "$ace_root/frameworks/core/components/test/json/json_frontend.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/mock_render_common.cpp", + "render_scroll_test.cpp", + "scroll_test_utils.cpp", + ] + + configs = [ "$ace_root:ace_test_config" ] + + deps = [ + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "//third_party/googletest:gtest_main", + ] + + if (is_standard_system) { + configs += [ "//third_party/curl:curl_config" ] + deps += [ + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/curl:curl", + ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +group("unittest") { + testonly = true + deps = [ + ":RenderScrollTest", + ":ScrollCreatorTest", + ] +} diff --git a/frameworks/core/components/test/unittest/scroll/render_scroll_test.cpp b/frameworks/core/components/test/unittest/scroll/render_scroll_test.cpp new file mode 100644 index 00000000..66d20e73 --- /dev/null +++ b/frameworks/core/components/test/unittest/scroll/render_scroll_test.cpp @@ -0,0 +1,1061 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/json/json_util.h" +#include "core/animation/curves.h" +#include "core/components/flex/flex_component.h" +#include "core/components/scroll/scroll_component.h" +#include "core/components/test/unittest/mock/mock_render_common.h" +#include "core/components/test/unittest/scroll/scroll_test_utils.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { + +const Size LAYOUT_TEST_SIZE_DEFAULT = Size(0, 0); +const Size LAYOUT_TEST_SIZE_MAX = Size(300, 300); +const Edge SCROLL_TEST_PADDING = Edge(5.0, 10.0, 15.0, 20.0); +const Size SCROLL_TEST_PADDING_EXCEPT = Size(280, 570); +const Offset SCROLL_TEST_PADDING_OFFSET = Offset(5, 10); +const Size SCROLL_TEST_CHILD = Size(300.0, 600.0); +const double SCROLL_CHILD_BOX_WIDTH = 300.0; +const double SCROLL_CHILD_BOX_HEIGHT = 600.0; +const Size PARENT_LAYOUT_TEST_SIZE_MAX = Size(500, 700); +const double PARENT1_BOX_WIDTH = 300.0; +const double PARENT1_BOX_HEIGHT = 300.0; +const double PARENT2_BOX_WIDTH = 400.0; +const double PARENT2_BOX_HEIGHT = 1000.0; +const double PARENT3_BOX_WIDTH = 500.0; +const double PARENT3_BOX_HEIGHT = 700.0; +const double SCROLL_INITIAL_OFFSET = 50.0; +const double SCROLL_JUMP_OFFSET = 100.0; +const double SCROLL_ANIMATE_DURATION = 200.0; + +class MockRenderScroll final : public RenderSingleChildScroll { + DECLARE_ACE_TYPE(MockRenderScroll, RenderSingleChildScroll); + +public: + MockRenderScroll() = default; + ~MockRenderScroll() override = default; + + Axis GetAxisDirection() const; + Edge GetPadding() const; + void Update(const RefPtr& component) override; + void PerformLayout() override; +}; + +Axis MockRenderScroll::GetAxisDirection() const +{ + return axis_; +} + +Edge MockRenderScroll::GetPadding() const +{ + return padding_; +} + +void MockRenderScroll::Update(const RefPtr& component) +{ + return RenderSingleChildScroll::Update(component); +} + +void MockRenderScroll::PerformLayout() +{ + return RenderSingleChildScroll::PerformLayout(); +} + +class RenderScrollTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; + void BuildRenderTree(); + + RefPtr mockContext_; + RefPtr renderScroll_; + RefPtr renderFocusScroll_; + RefPtr renderBox_; + RefPtr parentRenderScroll_; + RefPtr parentRenderBox_; + RefPtr parentRenderBox1_; + RefPtr parentRenderBox2_; +}; + +void RenderScrollTest::BuildRenderTree() +{ + auto renderBox = ScrollTestUtils::CreateRenderBox(800.0, 4000.0); + RefPtr renderFlex = + ScrollTestUtils::CreateRenderFlex(FlexDirection::COLUMN, FlexAlign::FLEX_START, FlexAlign::STRETCH); + + RefPtr firstBox = ScrollTestUtils::CreateRenderBox(400.0, 800.0); + firstBox->Attach(mockContext_); + renderFlex->AddChild(firstBox); + RefPtr secondBox = ScrollTestUtils::CreateRenderBox(400.0, 800.0); + secondBox->Attach(mockContext_); + renderFlex->AddChild(secondBox); + RefPtr thirdBox = ScrollTestUtils::CreateRenderBox(400.0, 800.0); + thirdBox->Attach(mockContext_); + renderFlex->AddChild(thirdBox); + RefPtr forthBox = ScrollTestUtils::CreateRenderBox(400.0, 800.0); + forthBox->Attach(mockContext_); + renderFlex->AddChild(forthBox); + renderFlex->Attach(mockContext_); + renderBox->AddChild(renderFlex); + renderBox->Attach(mockContext_); + renderFocusScroll_->Attach(mockContext_); + renderFocusScroll_->AddChild(renderBox); +} + +void RenderScrollTest::SetUpTestCase() {} +void RenderScrollTest::TearDownTestCase() {} + +void RenderScrollTest::SetUp() +{ + mockContext_ = MockRenderCommon::GetMockContext(); + renderBox_ = ScrollTestUtils::CreateRenderBox(SCROLL_CHILD_BOX_WIDTH, SCROLL_CHILD_BOX_HEIGHT); + renderBox_->Attach(mockContext_); + + LayoutParam layoutParam; + layoutParam.SetMinSize(LAYOUT_TEST_SIZE_DEFAULT); + layoutParam.SetMaxSize(LAYOUT_TEST_SIZE_MAX); + + renderFocusScroll_ = AceType::MakeRefPtr(); + renderFocusScroll_->Attach(mockContext_); + renderScroll_ = AceType::MakeRefPtr(); + renderScroll_->Attach(mockContext_); + renderScroll_->SetLayoutParam(layoutParam); + renderScroll_->AddChild(renderBox_); + + parentRenderBox_ = ScrollTestUtils::CreateRenderBox(PARENT1_BOX_WIDTH, PARENT1_BOX_HEIGHT); + parentRenderBox_->Attach(mockContext_); + parentRenderBox_->AddChild(renderScroll_); + + parentRenderBox1_ = ScrollTestUtils::CreateRenderBox(PARENT2_BOX_WIDTH, PARENT2_BOX_HEIGHT, false); + parentRenderBox1_->Attach(mockContext_); + parentRenderBox1_->AddChild(parentRenderBox_); + + LayoutParam parentLayoutParam; + parentLayoutParam.SetMinSize(LAYOUT_TEST_SIZE_DEFAULT); + parentLayoutParam.SetMaxSize(PARENT_LAYOUT_TEST_SIZE_MAX); + parentRenderScroll_ = AceType::MakeRefPtr(); + parentRenderScroll_->Attach(mockContext_); + parentRenderScroll_->SetLayoutParam(parentLayoutParam); + parentRenderScroll_->AddChild(parentRenderBox1_); + + parentRenderBox2_ = ScrollTestUtils::CreateRenderBox(PARENT3_BOX_WIDTH, PARENT3_BOX_HEIGHT); + parentRenderBox2_->Attach(mockContext_); + parentRenderBox2_->AddChild(parentRenderScroll_); +} + +void RenderScrollTest::TearDown() +{ + mockContext_ = nullptr; + renderScroll_ = nullptr; + renderFocusScroll_ = nullptr; + parentRenderScroll_ = nullptr; +} + +/** + * @tc.name: RenderScrollTest001 + * @tc.desc: Verify PerformLayout can calculate scroll properties without setting direction. + * @tc.type: FUNC + * @tc.require: AR000DAR08 AR000DAR0B + * @tc.author: jinwuwen + */ +HWTEST_F(RenderScrollTest, RenderScrollTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the scroll component with a box child. + */ + RefPtr box001 = AceType::MakeRefPtr(); + box001->SetWidth(SCROLL_CHILD_BOX_WIDTH); + box001->SetHeight(SCROLL_CHILD_BOX_HEIGHT); + RefPtr scroll001 = AceType::MakeRefPtr(box001); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties are calculated correctly. + */ + renderScroll_->Update(scroll001); + EXPECT_TRUE(renderScroll_->NeedLayout()); + renderScroll_->PerformLayout(); + + ASSERT_TRUE(renderScroll_->GetAxisDirection() == Axis::VERTICAL); +} + +/** + * @tc.name: RenderScrollTest002 + * @tc.desc: Verify PerformLayout can calculate scroll properties where direction is set to horizontal. + * @tc.type: FUNC + * @tc.require: AR000DAR08 AR000DAR0B + * @tc.author: jinwuwen + */ +HWTEST_F(RenderScrollTest, RenderScrollTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the scroll component with a box child. + */ + RefPtr box002 = AceType::MakeRefPtr(); + box002->SetWidth(SCROLL_CHILD_BOX_WIDTH); + box002->SetHeight(SCROLL_CHILD_BOX_HEIGHT); + RefPtr scroll002 = AceType::MakeRefPtr(box002); + scroll002->SetAxisDirection(Axis::HORIZONTAL); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties are calculated correctly. + */ + ASSERT_TRUE(scroll002->GetAxisDirection() == Axis::HORIZONTAL); + renderScroll_->Update(scroll002); + EXPECT_TRUE(renderScroll_->NeedLayout()); + renderScroll_->PerformLayout(); + + ASSERT_TRUE(renderScroll_->GetAxisDirection() == Axis::HORIZONTAL); +} + +/** + * @tc.name: RenderScrollTest003 + * @tc.desc: Verify PerformLayout can calculate scroll properties when execute animate to method. + * @tc.type: FUNC + * @tc.require: AR000DAR0C + * @tc.author: jinwuwen + */ +HWTEST_F(RenderScrollTest, RenderScrollTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the scroll component with a box child. + */ + RefPtr box003 = AceType::MakeRefPtr(); + box003->SetWidth(SCROLL_CHILD_BOX_WIDTH); + box003->SetHeight(SCROLL_CHILD_BOX_HEIGHT); + RefPtr positionController = AceType::MakeRefPtr(); + + RefPtr scroll003 = AceType::MakeRefPtr(box003); + scroll003->SetAxisDirection(Axis::VERTICAL); + scroll003->SetScrollPositionController(positionController); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties are calculated correctly. + */ + ASSERT_TRUE(scroll003->GetAxisDirection() == Axis::VERTICAL); + renderScroll_->Update(scroll003); + + EXPECT_TRUE(renderScroll_->NeedLayout()); + renderScroll_->PerformLayout(); + + Size childSize = renderScroll_->GetChildren().front()->GetLayoutSize(); + ASSERT_TRUE(childSize == SCROLL_TEST_CHILD); + + renderScroll_->AnimateTo(SCROLL_JUMP_OFFSET, SCROLL_ANIMATE_DURATION, Curves::LINEAR); + renderScroll_->PerformLayout(); + ASSERT_TRUE(NearZero(renderScroll_->GetCurrentPosition())); +} + +/** + * @tc.name: RenderScrollTest004 + * @tc.desc: Verify scroll can jump to fixed offset where axis is set to vertical. + * @tc.type: FUNC + * @tc.require: AR000DAR0D + * @tc.author: jinwuwen + */ +HWTEST_F(RenderScrollTest, RenderScrollTest004, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the scroll component with a box child. + */ + RefPtr box004 = AceType::MakeRefPtr(); + box004->SetWidth(SCROLL_CHILD_BOX_WIDTH); + box004->SetHeight(SCROLL_CHILD_BOX_HEIGHT); + RefPtr positionController = AceType::MakeRefPtr(); + + RefPtr scroll004 = AceType::MakeRefPtr(box004); + scroll004->SetAxisDirection(Axis::VERTICAL); + scroll004->SetScrollPositionController(positionController); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties are calculated correctly. + */ + ASSERT_TRUE(scroll004->GetAxisDirection() == Axis::VERTICAL); + renderScroll_->Update(scroll004); + + EXPECT_TRUE(renderScroll_->NeedLayout()); + renderScroll_->PerformLayout(); + + renderScroll_->JumpToPosition(SCROLL_JUMP_OFFSET); + renderScroll_->PerformLayout(); + ASSERT_TRUE(NearEqual(renderScroll_->GetCurrentPosition(), SCROLL_JUMP_OFFSET)); +} + +/** + * @tc.name: RenderScrollTest005 + * @tc.desc: Verify scroll can jump to fixed offset where axis is set to horizontal. + * @tc.type: FUNC + * @tc.require: AR000DAR0D + * @tc.author: jinwuwen + */ +HWTEST_F(RenderScrollTest, RenderScrollTest005, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the scroll component with a box child. + */ + RefPtr box005 = AceType::MakeRefPtr(); + box005->SetWidth(SCROLL_CHILD_BOX_WIDTH); + box005->SetHeight(SCROLL_CHILD_BOX_HEIGHT); + RefPtr positionController = AceType::MakeRefPtr(); + + RefPtr scroll005 = AceType::MakeRefPtr(box005); + scroll005->SetAxisDirection(Axis::VERTICAL); + scroll005->SetScrollPositionController(positionController); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties are calculated correctly. + */ + renderScroll_->Update(scroll005); + + EXPECT_TRUE(renderScroll_->NeedLayout()); + renderScroll_->PerformLayout(); + + renderScroll_->JumpToPosition(SCROLL_JUMP_OFFSET); + renderScroll_->PerformLayout(); + ASSERT_TRUE(NearEqual(renderScroll_->GetCurrentPosition(), SCROLL_JUMP_OFFSET)); +} + +/** + * @tc.name: RenderScrollTest006 + * @tc.desc: Verify PerformLayout can calculate scroll properties with a padding properties. + * @tc.type: FUNC + * @tc.require: AR000DAR0E + * @tc.author: jinwuwen + */ +HWTEST_F(RenderScrollTest, RenderScrollTest006, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the scroll component with a box child and padding properties. + */ + RefPtr box006 = AceType::MakeRefPtr(); + box006->SetWidth(SCROLL_CHILD_BOX_WIDTH); + box006->SetHeight(SCROLL_CHILD_BOX_HEIGHT); + RefPtr positionController = AceType::MakeRefPtr(); + + RefPtr scroll006 = AceType::MakeRefPtr(box006); + scroll006->SetAxisDirection(Axis::VERTICAL); + scroll006->SetScrollPositionController(positionController); + scroll006->SetPadding(SCROLL_TEST_PADDING); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties are calculated correctly. + */ + ASSERT_TRUE(scroll006->GetAxisDirection() == Axis::VERTICAL); + renderScroll_->Update(scroll006); + + EXPECT_TRUE(renderScroll_->NeedLayout()); + renderScroll_->PerformLayout(); + + ASSERT_TRUE(renderScroll_->GetPadding() == SCROLL_TEST_PADDING); + Size childSize = renderScroll_->GetChildren().front()->GetLayoutSize(); + Offset childPosition = renderScroll_->GetChildren().front()->GetPosition(); + ASSERT_TRUE(childSize == SCROLL_TEST_PADDING_EXCEPT); + ASSERT_TRUE(childPosition == SCROLL_TEST_PADDING_OFFSET); +} + +/** + * @tc.name: RenderScrollTest007 + * @tc.desc: Verify PerformLayout can calculate scroll properties with a initialOffset and direction is vertical. + * @tc.type: FUNC + * @tc.require: AR000DAR0F AR000DAR0G + * @tc.author: jinwuwen + */ +HWTEST_F(RenderScrollTest, RenderScrollTest007, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the scroll component with a initialOffset. + */ + RefPtr box007 = AceType::MakeRefPtr(); + box007->SetWidth(SCROLL_CHILD_BOX_WIDTH); + box007->SetHeight(SCROLL_CHILD_BOX_HEIGHT); + RefPtr positionController = AceType::MakeRefPtr(); + positionController->SetInitialOffset(SCROLL_INITIAL_OFFSET); + + RefPtr scroll007 = AceType::MakeRefPtr(box007); + scroll007->SetAxisDirection(Axis::VERTICAL); + scroll007->SetScrollPositionController(positionController); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties are calculated correctly. + */ + ASSERT_TRUE(scroll007->GetAxisDirection() == Axis::VERTICAL); + renderScroll_->Update(scroll007); + + EXPECT_TRUE(renderScroll_->NeedLayout()); + renderScroll_->PerformLayout(); + ASSERT_TRUE(NearEqual(renderScroll_->GetCurrentPosition(), SCROLL_INITIAL_OFFSET)); +} + +/** + * @tc.name: RenderScrollTest008 + * @tc.desc: Verify PerformLayout can calculate scroll properties with a initialOffset and direction is horizontal. + * @tc.type: FUNC + * @tc.require: AR000DAR0F AR000DAR0G + * @tc.author: jinwuwen + */ +HWTEST_F(RenderScrollTest, RenderScrollTest008, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the scroll component with a initialOffset. + */ + RefPtr box008 = AceType::MakeRefPtr(); + box008->SetWidth(SCROLL_CHILD_BOX_WIDTH); + box008->SetHeight(SCROLL_CHILD_BOX_HEIGHT); + RefPtr positionController = AceType::MakeRefPtr(); + positionController->SetInitialOffset(SCROLL_INITIAL_OFFSET); + + RefPtr scroll008 = AceType::MakeRefPtr(box008); + scroll008->SetAxisDirection(Axis::HORIZONTAL); + scroll008->SetScrollPositionController(positionController); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties are calculated correctly. + */ + renderScroll_->Update(scroll008); + + EXPECT_TRUE(renderScroll_->NeedLayout()); + renderScroll_->PerformLayout(); + ASSERT_TRUE(NearEqual(renderScroll_->GetCurrentPosition(), 0.0)); +} + +/** + * @tc.name: RenderScrollTest009 + * @tc.desc: Verify PerformLayout can calculate scroll and update offset. + * @tc.type: FUNC + * @tc.require: AR000DAR09 + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderScrollTest, RenderScrollTest009, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the scroll component with a initialOffset. + */ + RefPtr box009 = AceType::MakeRefPtr(); + box009->SetWidth(SCROLL_CHILD_BOX_WIDTH); + box009->SetHeight(SCROLL_CHILD_BOX_HEIGHT); + RefPtr positionController = AceType::MakeRefPtr(); + positionController->SetInitialOffset(SCROLL_INITIAL_OFFSET); + RefPtr scroll009 = AceType::MakeRefPtr(box009); + scroll009->SetAxisDirection(Axis::VERTICAL); + scroll009->SetScrollPositionController(positionController); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties are calculated correctly. + */ + ASSERT_TRUE(scroll009->GetAxisDirection() == Axis::VERTICAL); + renderScroll_->Update(scroll009); + EXPECT_TRUE(renderScroll_->NeedLayout()); + renderScroll_->PerformLayout(); + ASSERT_TRUE(NearEqual(renderScroll_->GetCurrentPosition(), SCROLL_INITIAL_OFFSET)); + + /** + * @tc.steps: step3. Trigger a slide event with offset(100.0, 100.0) and offset(-10.0, -10.0) + * @tc.expected: step3. Current Position will offset 100.0 and -10.0. + */ + Offset offset1 = Offset(100.0, 100.0); + renderScroll_->UpdateOffset(offset1, SCROLL_FROM_NONE); + renderScroll_->PerformLayout(); + ASSERT_TRUE(NearEqual(renderScroll_->GetCurrentPosition(), SCROLL_INITIAL_OFFSET + 100.0)); + Offset offset2 = Offset(-10.0, -10.0); + renderScroll_->UpdateOffset(offset2, SCROLL_FROM_NONE); + renderScroll_->PerformLayout(); + ASSERT_TRUE(NearEqual(renderScroll_->GetCurrentPosition(), SCROLL_INITIAL_OFFSET + 90.0)); +} + +/** + * @tc.name: RenderScrollScrollpageChangeTest001 + * @tc.desc: Verify Scroll UpdateOffset When scrollpage is true. + * @tc.type: FUNC + * @tc.require: AR000DQ1SR + * @tc.author: chenlien + */ +HWTEST_F(RenderScrollTest, RenderScrollScrollpageChangeTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the scroll component with a initialOffset. + */ + RefPtr box001 = ScrollTestUtils::CreateBoxComponent(SCROLL_CHILD_BOX_WIDTH, SCROLL_CHILD_BOX_HEIGHT); + RefPtr positionController = AceType::MakeRefPtr(); + positionController->SetInitialOffset(SCROLL_INITIAL_OFFSET); + RefPtr scroll001 = AceType::MakeRefPtr(box001); + scroll001->SetAxisDirection(Axis::VERTICAL); + scroll001->SetScrollPositionController(positionController); + scroll001->SetScrollPage(true); + RefPtr box002 = ScrollTestUtils::CreateBoxComponent(PARENT1_BOX_WIDTH, PARENT1_BOX_HEIGHT); + box002->SetChild(scroll001); + RefPtr box003 = ScrollTestUtils::CreateBoxComponent(PARENT2_BOX_WIDTH, PARENT2_BOX_HEIGHT, false); + box003->SetChild(box002); + RefPtr parentPositionController = AceType::MakeRefPtr(); + positionController->SetInitialOffset(SCROLL_INITIAL_OFFSET); + RefPtr scroll002 = AceType::MakeRefPtr(box003); + scroll002->SetAxisDirection(Axis::VERTICAL); + scroll002->SetScrollPositionController(positionController); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties are calculated correctly. + */ + ASSERT_TRUE(scroll002->GetAxisDirection() == Axis::VERTICAL); + parentRenderScroll_->Update(scroll002); + EXPECT_TRUE(parentRenderScroll_->NeedLayout()); + parentRenderScroll_->PerformLayout(); + ASSERT_TRUE(NearEqual(parentRenderScroll_->GetCurrentPosition(), SCROLL_INITIAL_OFFSET)); + ASSERT_TRUE(scroll001->GetAxisDirection() == Axis::VERTICAL); + renderScroll_->Update(scroll001); + EXPECT_TRUE(renderScroll_->NeedLayout()); + renderScroll_->PerformLayout(); + ASSERT_TRUE(NearEqual(renderScroll_->GetCurrentPosition(), SCROLL_INITIAL_OFFSET)); + parentRenderBox2_->PerformLayout(); + + /** + * @tc.steps: step3. Trigger a slide event with offset(100.0, 100.0) + * @tc.expected: step3. child scroll Current Position would not change, and parent Would offset 100.0. + */ + Offset offset1 = Offset(100.0, 100.0); + parentRenderScroll_->UpdateOffset(offset1, SCROLL_FROM_NONE); + ASSERT_TRUE(NearEqual(renderScroll_->GetCurrentPosition(), SCROLL_INITIAL_OFFSET)); + ASSERT_TRUE(NearEqual(parentRenderScroll_->GetCurrentPosition(), SCROLL_INITIAL_OFFSET + 100.0)); +} + +/** + * @tc.name: RenderScrollScrollpageChangeTest002 + * @tc.desc: Verify Scroll UpdateOffset When scrollpage is true. + * @tc.type: FUNC + * @tc.require: AR000DQ1SR + * @tc.author: chenlien + */ +HWTEST_F(RenderScrollTest, RenderScrollScrollpageChangeTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the scroll component with a initialOffset. + */ + RefPtr box001 = ScrollTestUtils::CreateBoxComponent(SCROLL_CHILD_BOX_WIDTH, SCROLL_CHILD_BOX_HEIGHT); + RefPtr positionController = AceType::MakeRefPtr(); + positionController->SetInitialOffset(SCROLL_INITIAL_OFFSET); + RefPtr scroll001 = AceType::MakeRefPtr(box001); + scroll001->SetAxisDirection(Axis::VERTICAL); + scroll001->SetScrollPositionController(positionController); + scroll001->SetScrollPage(true); + RefPtr box002 = ScrollTestUtils::CreateBoxComponent(PARENT1_BOX_WIDTH, PARENT1_BOX_HEIGHT); + box002->SetChild(scroll001); + RefPtr box003 = ScrollTestUtils::CreateBoxComponent(PARENT2_BOX_WIDTH, PARENT2_BOX_HEIGHT, false); + box003->SetChild(box002); + RefPtr parentPositionController = AceType::MakeRefPtr(); + positionController->SetInitialOffset(SCROLL_INITIAL_OFFSET); + RefPtr scroll002 = AceType::MakeRefPtr(box003); + scroll002->SetAxisDirection(Axis::VERTICAL); + scroll002->SetScrollPositionController(positionController); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties are calculated correctly. + */ + ASSERT_TRUE(scroll002->GetAxisDirection() == Axis::VERTICAL); + parentRenderScroll_->Update(scroll002); + EXPECT_TRUE(parentRenderScroll_->NeedLayout()); + parentRenderScroll_->PerformLayout(); + ASSERT_TRUE(NearEqual(parentRenderScroll_->GetCurrentPosition(), SCROLL_INITIAL_OFFSET)); + ASSERT_TRUE(scroll001->GetAxisDirection() == Axis::VERTICAL); + renderScroll_->Update(scroll001); + EXPECT_TRUE(renderScroll_->NeedLayout()); + renderScroll_->PerformLayout(); + ASSERT_TRUE(NearEqual(renderScroll_->GetCurrentPosition(), SCROLL_INITIAL_OFFSET)); + parentRenderBox2_->PerformLayout(); + + /** + * @tc.steps: step3. Trigger a slide event with offset(-10.0, -10.0) + * @tc.expected: step3. child scroll Current Position would offset -10.0, and parent scroll would not change + */ + Offset offset1 = Offset(-10.0, -10.0); + renderScroll_->UpdateOffset(offset1, SCROLL_FROM_NONE); + ASSERT_TRUE(NearEqual(renderScroll_->GetCurrentPosition(), SCROLL_INITIAL_OFFSET - 10.0)); + ASSERT_TRUE(NearEqual(parentRenderScroll_->GetCurrentPosition(), SCROLL_INITIAL_OFFSET)); +} + +/** + * @tc.name: RenderScrollFocusTest001 + * @tc.desc: Verify scroll support move child into viewport. + * @tc.type: FUNC + * @tc.require: AR000DRS0L + * @tc.author: jinwuwen + */ +HWTEST_F(RenderScrollTest, RenderScrollFocusTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the scroll component with a initialOffset. + */ + RefPtr focusBox001 = AceType::MakeRefPtr(); + focusBox001->SetWidth(400.0); + focusBox001->SetHeight(800.0); + RefPtr focusScroll001 = AceType::MakeRefPtr(focusBox001); + renderFocusScroll_->Update(focusScroll001); + + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(800.0, 1000.0)); + BuildRenderTree(); + renderFocusScroll_->SetLayoutParam(layoutParam); + renderFocusScroll_->PerformLayout(); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties are calculated correctly. + */ + auto renderBox = AceType::DynamicCast(renderFocusScroll_->GetChildren().front()); + ASSERT_TRUE(renderBox); + + auto viewRect = renderFocusScroll_->GetPaintRect(); + auto renderScroll1 = AceType::DynamicCast(renderFocusScroll_); + auto renderFlex = AceType::DynamicCast(renderBox->GetChildren().front()); + ASSERT_TRUE(renderFlex); + + // get last child posotion and rect size + auto lastChild = renderFlex->GetChildren().back(); + if (lastChild) { + auto offset = lastChild->GetGlobalOffset(); + auto rect = lastChild->GetPaintRect(); + auto size = lastChild->GetLayoutSize(); + ASSERT_FALSE(rect.IsWrappedBy(viewRect)); + + renderFocusScroll_->MoveChildToViewPort(size, offset, Offset()); + renderFocusScroll_->PerformLayout(); + rect = lastChild->GetPaintRect(); + Offset boxPostion = renderBox->GetPosition(); + auto lastChildRect = Rect(rect.GetOffset() + boxPostion, rect.GetSize()); + ASSERT_TRUE(lastChildRect.IsWrappedBy(viewRect)); + } +} + +/** + * @tc.name: RenderScrollScrollerTest001 + * @tc.desc: Verify renderScroll can get currentOffset. + * @tc.type: FUNC + * @tc.require: AR000DQ1UT + * @tc.author: chenlien + */ +HWTEST_F(RenderScrollTest, RenderScrollScrollerTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the scroll component with a initialOffset. + */ + RefPtr box009 = AceType::MakeRefPtr(); + box009->SetWidth(SCROLL_CHILD_BOX_WIDTH); + box009->SetHeight(SCROLL_CHILD_BOX_HEIGHT); + RefPtr positionController = AceType::MakeRefPtr(); + positionController->SetInitialOffset(SCROLL_INITIAL_OFFSET); + + RefPtr scroll009 = AceType::MakeRefPtr(box009); + scroll009->SetAxisDirection(Axis::VERTICAL); + scroll009->SetScrollPositionController(positionController); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties are calculated correctly. + */ + ASSERT_TRUE(scroll009->GetAxisDirection() == Axis::VERTICAL); + renderScroll_->Update(scroll009); + EXPECT_TRUE(renderScroll_->NeedLayout()); + renderScroll_->PerformLayout(); + ASSERT_TRUE(positionController->GetCurrentOffset() == Offset(0.0, SCROLL_INITIAL_OFFSET)); + + /** + * @tc.steps: step3. Trigger a slide event with offset(100.0, 100.0) + * @tc.expected: step3. Current Offset will be (0.0, 150.0). + */ + Offset offset1 = Offset(100.0, 100.0); + renderScroll_->UpdateOffset(offset1, SCROLL_FROM_NONE); + renderScroll_->PerformLayout(); + ASSERT_TRUE(positionController->GetCurrentOffset() == Offset(0.0, SCROLL_INITIAL_OFFSET + 100.0)); +} + +/** + * @tc.name: RenderScrollScrollerTest002 + * @tc.desc: Verify renderScroll can scroll up one page. + * @tc.type: FUNC + * @tc.require: AR000DQ1UU + * @tc.author: chenlien + */ +HWTEST_F(RenderScrollTest, RenderScrollScrollerTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the scroll component with a initialOffset. + */ + RefPtr box009 = AceType::MakeRefPtr(); + box009->SetWidth(SCROLL_CHILD_BOX_WIDTH); + box009->SetHeight(800.0); + RefPtr positionController = AceType::MakeRefPtr(); + positionController->SetInitialOffset(SCROLL_INITIAL_OFFSET); + + RefPtr scroll009 = AceType::MakeRefPtr(box009); + scroll009->SetAxisDirection(Axis::VERTICAL); + scroll009->SetScrollPositionController(positionController); + + renderBox_ = ScrollTestUtils::CreateRenderBox(SCROLL_CHILD_BOX_WIDTH, 800.0); + renderBox_->Attach(mockContext_); + LayoutParam layoutParam; + layoutParam.SetMinSize(LAYOUT_TEST_SIZE_DEFAULT); + layoutParam.SetMaxSize(LAYOUT_TEST_SIZE_MAX); + renderScroll_ = AceType::MakeRefPtr(); + renderScroll_->Attach(mockContext_); + renderScroll_->SetLayoutParam(layoutParam); + renderScroll_->AddChild(renderBox_); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties are calculated correctly. + */ + ASSERT_TRUE(scroll009->GetAxisDirection() == Axis::VERTICAL); + renderScroll_->Update(scroll009); + EXPECT_TRUE(renderScroll_->NeedLayout()); + renderScroll_->PerformLayout(); + ASSERT_TRUE(renderScroll_->GetCurrentOffset() == Offset(0.0, SCROLL_INITIAL_OFFSET)); + + /** + * @tc.steps: step3. Scroll up on page + * @tc.expected: step3. Current Offset will be (0.0, 350.0). + */ + renderScroll_->ScrollPage(false, false); + renderScroll_->PerformLayout(); + ASSERT_TRUE(renderScroll_->GetViewPort().Height() == 300.0); + ASSERT_TRUE(renderScroll_->GetCurrentOffset() == Offset(0.0, 350.0)); +} + +/** + * @tc.name: RenderScrollScrollerTest003 + * @tc.desc: Verify renderScroll can scroll down one page. + * @tc.type: FUNC + * @tc.require: AR000DQ1UU + * @tc.author: chenlien + */ +HWTEST_F(RenderScrollTest, RenderScrollScrollerTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the scroll component with a initialOffset. + */ + RefPtr box009 = AceType::MakeRefPtr(); + box009->SetWidth(SCROLL_CHILD_BOX_WIDTH); + box009->SetHeight(800.0); + RefPtr positionController = AceType::MakeRefPtr(); + positionController->SetInitialOffset(SCROLL_INITIAL_OFFSET); + + RefPtr scroll009 = AceType::MakeRefPtr(box009); + scroll009->SetAxisDirection(Axis::VERTICAL); + scroll009->SetScrollPositionController(positionController); + + renderBox_ = ScrollTestUtils::CreateRenderBox(SCROLL_CHILD_BOX_WIDTH, 800.0); + renderBox_->Attach(mockContext_); + LayoutParam layoutParam; + layoutParam.SetMinSize(LAYOUT_TEST_SIZE_DEFAULT); + layoutParam.SetMaxSize(LAYOUT_TEST_SIZE_MAX); + renderScroll_ = AceType::MakeRefPtr(); + renderScroll_->Attach(mockContext_); + renderScroll_->SetLayoutParam(layoutParam); + renderScroll_->AddChild(renderBox_); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties are calculated correctly. + */ + ASSERT_TRUE(scroll009->GetAxisDirection() == Axis::VERTICAL); + renderScroll_->Update(scroll009); + EXPECT_TRUE(renderScroll_->NeedLayout()); + renderScroll_->PerformLayout(); + ASSERT_TRUE(renderScroll_->GetCurrentOffset() == Offset(0.0, SCROLL_INITIAL_OFFSET)); + + /** + * @tc.steps: step3. Scroll to bottom and then Scroll up on page + * @tc.expected: step3. Current Offset will be (0.0, 200.0). + */ + renderScroll_->ScrollToEdge(ScrollEdgeType::SCROLL_BOTTOM, false); + ASSERT_TRUE(renderScroll_->GetCurrentOffset() == Offset(0.0, 500.0)); + renderScroll_->ScrollPage(true, false); + renderScroll_->PerformLayout(); + ASSERT_TRUE(renderScroll_->GetViewPort().Height() == 300.0); + ASSERT_TRUE(renderScroll_->GetCurrentOffset() == Offset(0.0, 200.0)); +} + + +/** + * @tc.name: RenderScrollScrollerTest004 + * @tc.desc: Verify renderScroll can scroll to top. + * @tc.type: FUNC + * @tc.require: AR000DQ1UV + * @tc.author: chenlien + */ +HWTEST_F(RenderScrollTest, RenderScrollScrollerTest004, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the scroll component with a initialOffset. + */ + RefPtr box009 = AceType::MakeRefPtr(); + box009->SetWidth(SCROLL_CHILD_BOX_WIDTH); + box009->SetHeight(SCROLL_CHILD_BOX_HEIGHT); + RefPtr positionController = AceType::MakeRefPtr(); + positionController->SetInitialOffset(SCROLL_INITIAL_OFFSET); + + RefPtr scroll009 = AceType::MakeRefPtr(box009); + scroll009->SetAxisDirection(Axis::VERTICAL); + scroll009->SetScrollPositionController(positionController); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties are calculated correctly. + */ + ASSERT_TRUE(scroll009->GetAxisDirection() == Axis::VERTICAL); + renderScroll_->Update(scroll009); + EXPECT_TRUE(renderScroll_->NeedLayout()); + renderScroll_->PerformLayout(); + ASSERT_TRUE(renderScroll_->GetCurrentOffset() == Offset(0.0, SCROLL_INITIAL_OFFSET)); + + /** + * @tc.steps: step3. Scroll to top + * @tc.expected: step3. Current Offset will be (0.0, 0.0). + */ + renderScroll_->ScrollToEdge(ScrollEdgeType::SCROLL_TOP, false); + renderScroll_->PerformLayout(); + ASSERT_TRUE(renderScroll_->GetCurrentOffset() == Offset(0.0, 0.0)); +} + +/** + * @tc.name: RenderScrollScrollerTest005 + * @tc.desc: Verify renderScroll can scroll to bottom. + * @tc.type: FUNC + * @tc.require: AR000DQ1UV + * @tc.author: chenlien + */ +HWTEST_F(RenderScrollTest, RenderScrollScrollerTest005, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the scroll component with a initialOffset. + */ + RefPtr box009 = AceType::MakeRefPtr(); + box009->SetWidth(SCROLL_CHILD_BOX_WIDTH); + box009->SetHeight(SCROLL_CHILD_BOX_HEIGHT); + RefPtr positionController = AceType::MakeRefPtr(); + positionController->SetInitialOffset(SCROLL_INITIAL_OFFSET); + + RefPtr scroll009 = AceType::MakeRefPtr(box009); + scroll009->SetAxisDirection(Axis::VERTICAL); + scroll009->SetScrollPositionController(positionController); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties are calculated correctly. + */ + ASSERT_TRUE(scroll009->GetAxisDirection() == Axis::VERTICAL); + renderScroll_->Update(scroll009); + EXPECT_TRUE(renderScroll_->NeedLayout()); + renderScroll_->PerformLayout(); + ASSERT_TRUE(renderScroll_->GetCurrentOffset() == Offset(0.0, SCROLL_INITIAL_OFFSET)); + + /** + * @tc.steps: step3. Scroll to bottom + * @tc.expected: step3. Current Offset will be (0.0, 300.0). + */ + renderScroll_->ScrollToEdge(ScrollEdgeType::SCROLL_BOTTOM, false); + renderScroll_->PerformLayout(); + ASSERT_TRUE(renderScroll_->GetCurrentOffset() == Offset(0.0, 300.0)); +} + +/** + * @tc.name: RenderScrollRotateTest001 + * @tc.desc: Verify renderScroll by rotate. + * @tc.type: FUNC + * @tc.require: AR000DQ1T4 + * @tc.author: liujinwei + */ +HWTEST_F(RenderScrollTest, RenderScrollRotateTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the scroll component with a initialOffset. + */ + RefPtr rotatebox001 = AceType::MakeRefPtr(); + rotatebox001->SetWidth(SCROLL_CHILD_BOX_WIDTH); + rotatebox001->SetHeight(SCROLL_CHILD_BOX_HEIGHT); + RefPtr positionController = AceType::MakeRefPtr(); + positionController->SetInitialOffset(SCROLL_INITIAL_OFFSET); + + RefPtr scroll = AceType::MakeRefPtr(rotatebox001); + scroll->SetAxisDirection(Axis::VERTICAL); + scroll->SetScrollPositionController(positionController); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties are calculated correctly. + */ + ASSERT_TRUE(scroll->GetAxisDirection() == Axis::VERTICAL); + renderScroll_->Update(scroll); + EXPECT_TRUE(renderScroll_->NeedLayout()); + renderScroll_->PerformLayout(); + ASSERT_TRUE(renderScroll_->GetCurrentOffset() == Offset(0.0, SCROLL_INITIAL_OFFSET)); + + /** + * @tc.steps: step3. rotate 10 + * @tc.expected: step3. Current Offset will be (0.0, SCROLL_INITIAL_OFFSET + 10). + */ + renderScroll_->HandleRotate(10,true); + renderScroll_->PerformLayout(); + ASSERT_TRUE(renderScroll_->GetCurrentOffset() == Offset(0.0, SCROLL_INITIAL_OFFSET - 10)); + + /** + * @tc.steps: step4. rotate 10 + * @tc.expected: step4. Current Offset will be (0.0, SCROLL_INITIAL_OFFSET + 20). + */ + renderScroll_->HandleRotate(10, true); + renderScroll_->PerformLayout(); + ASSERT_TRUE(renderScroll_->GetCurrentOffset() == Offset(0.0, SCROLL_INITIAL_OFFSET - 20)); +} + +/** + * @tc.name: RenderScrollRotateTest002 + * @tc.desc: Verify renderScroll by rotate. + * @tc.type: FUNC + * @tc.require: AR000DQ1T4 + * @tc.author: liujinwei + */ +HWTEST_F(RenderScrollTest, RenderScrollRotateTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the scroll component with a initialOffset. + */ + RefPtr rotatebox002 = AceType::MakeRefPtr(); + rotatebox002->SetWidth(SCROLL_CHILD_BOX_WIDTH); + rotatebox002->SetHeight(SCROLL_CHILD_BOX_HEIGHT); + RefPtr positionController = AceType::MakeRefPtr(); + positionController->SetInitialOffset(SCROLL_INITIAL_OFFSET); + + RefPtr scroll = AceType::MakeRefPtr(rotatebox002); + scroll->SetAxisDirection(Axis::VERTICAL); + scroll->SetScrollPositionController(positionController); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties are calculated correctly. + */ + ASSERT_TRUE(scroll->GetAxisDirection() == Axis::VERTICAL); + renderScroll_->Update(scroll); + EXPECT_TRUE(renderScroll_->NeedLayout()); + renderScroll_->PerformLayout(); + ASSERT_TRUE(renderScroll_->GetCurrentOffset() == Offset(0.0, SCROLL_INITIAL_OFFSET)); + + /** + * @tc.steps: step3. rotate -10 + * @tc.expected: step3. Current Offset will be (0.0, SCROLL_INITIAL_OFFSET - 10). + */ + renderScroll_->HandleRotate(10, true); + renderScroll_->PerformLayout(); + ASSERT_TRUE(renderScroll_->GetCurrentOffset() == Offset(0.0, SCROLL_INITIAL_OFFSET - 10)); + + /** + * @tc.steps: step4. rotate -10 + * @tc.expected: step4. Current Offset will be (0.0, SCROLL_INITIAL_OFFSET - 20), no more moving. + */ + renderScroll_->HandleRotate(10, true); + renderScroll_->PerformLayout(); + ASSERT_TRUE(renderScroll_->GetCurrentOffset() == Offset(0.0, SCROLL_INITIAL_OFFSET - 20)); + + /** + * @tc.steps: step5. rotate -30 + * @tc.expected: step5. Current Offset will be (0.0, SCROLL_INITIAL_OFFSET - 50). + */ + renderScroll_->HandleRotate(30, true); + renderScroll_->PerformLayout(); + ASSERT_TRUE(renderScroll_->GetCurrentOffset() == Offset(0.0, SCROLL_INITIAL_OFFSET - 50)); + + /** + * @tc.steps: step5. rotate -10 + * @tc.expected: step5. Current Offset will be (0.0, 0.0), no more moving. + */ + renderScroll_->HandleRotate(10, true); + renderScroll_->PerformLayout(); + ASSERT_TRUE(renderScroll_->GetCurrentOffset() == Offset(0.0, 0.0)); +} + +/** + * @tc.name: RenderScrollRotateTest003 + * @tc.desc: Verify renderScroll by rotate. + * @tc.type: FUNC + * @tc.require: AR000DQ1T4 + * @tc.author: liujinwei + */ +HWTEST_F(RenderScrollTest, RenderScrollRotateTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the scroll component with a initialOffset. + */ + RefPtr rotatebox003 = AceType::MakeRefPtr(); + rotatebox003->SetWidth(SCROLL_CHILD_BOX_WIDTH); + rotatebox003->SetHeight(SCROLL_CHILD_BOX_HEIGHT); + RefPtr positionController = AceType::MakeRefPtr(); + positionController->SetInitialOffset(SCROLL_INITIAL_OFFSET); + + RefPtr scroll = AceType::MakeRefPtr(rotatebox003); + scroll->SetAxisDirection(Axis::VERTICAL); + scroll->SetScrollPositionController(positionController); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties are calculated correctly. + */ + ASSERT_TRUE(scroll->GetAxisDirection() == Axis::VERTICAL); + renderScroll_->Update(scroll); + EXPECT_TRUE(renderScroll_->NeedLayout()); + renderScroll_->PerformLayout(); + ASSERT_TRUE(renderScroll_->GetCurrentOffset() == Offset(0.0, SCROLL_INITIAL_OFFSET)); + + /** + * @tc.steps: step3. rotate 180 + * @tc.expected: step3. Current Offset will be (0.0, SCROLL_INITIAL_OFFSET + 180). + */ + renderScroll_->HandleRotate(-180, true); + renderScroll_->PerformLayout(); + GTEST_LOG_(INFO) <GetCurrentOffset().GetY(); + ASSERT_TRUE(renderScroll_->GetCurrentOffset() == Offset(0.0, SCROLL_INITIAL_OFFSET + 180)); + + /** + * @tc.steps: step4. rotate 180 + * @tc.expected: step4. Current Offset will be (0.0, 300). + */ + renderScroll_->HandleRotate(-180, true); + renderScroll_->PerformLayout(); + GTEST_LOG_(INFO) <GetCurrentOffset().GetY(); + ASSERT_TRUE(renderScroll_->GetCurrentOffset() == Offset(0.0, 300.0)); + + /** + * @tc.steps: step5. rotate -180 + * @tc.expected: step5. Current Offset will be (0.0, 300 - 180). + */ + renderScroll_->HandleRotate(180, true); + renderScroll_->PerformLayout(); + ASSERT_TRUE(renderScroll_->GetCurrentOffset() == Offset(0.0, 120.0)); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/scroll/scroll_creator_test.cpp b/frameworks/core/components/test/unittest/scroll/scroll_creator_test.cpp new file mode 100644 index 00000000..d05ddbbc --- /dev/null +++ b/frameworks/core/components/test/unittest/scroll/scroll_creator_test.cpp @@ -0,0 +1,163 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/json/json_util.h" +#include "base/utils/utils.h" +#include "core/components/box/box_component.h" +#include "core/components/scroll/scroll_component.h" +#include "core/components/test/json/component_factory.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +const std::string TEXT_VALUE = "Hi Ace"; +constexpr double SCROLL_INIT_POSITION = 50.0; +const Edge SCROLL_TEST_PADDING = Edge(15.0); + +} // namespace + +class ScrollCreatorTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; +}; + +void ScrollCreatorTest::SetUpTestCase() {} +void ScrollCreatorTest::TearDownTestCase() {} +void ScrollCreatorTest::SetUp() {} +void ScrollCreatorTest::TearDown() {} + +/** + * @tc.name: ScrollCreator001 + * @tc.desc: Verify TransformCreator can create scroll component without child. + * @tc.type: FUNC + * @tc.require: AR000DAR08 + * @tc.author: jinwuwen + */ +HWTEST_F(ScrollCreatorTest, ScrollCreator001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of scroll component without child. + */ + const std::string content = "" + "{ " + " \"className\": \"Scroll\", " + " \"direction\": 0, " + " \"scrollPosition\": 50, " + " \"scrollPadding\": { " + " \"className\": \"Edge\", " + " \"value\": 15 " + " } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get scroll component. + * @tc.expected: step2. properties and child are set correctly. + */ + const auto dslBuf = reinterpret_cast(content.c_str()); + size_t dslLen = content.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component != nullptr); + RefPtr scroll = AceType::DynamicCast(component); + ASSERT_TRUE(scroll != nullptr); + ASSERT_TRUE(NearEqual(scroll->GetScrollPositionController()->GetInitialOffset(), SCROLL_INIT_POSITION)); + ASSERT_TRUE(scroll->GetAxisDirection() == Axis::VERTICAL); + ASSERT_TRUE(scroll->GetPadding() == SCROLL_TEST_PADDING); +} + +/** + * @tc.name: ScrollCreator002 + * @tc.desc: Verify TransformCreator can create scroll component with a box child. + * @tc.type: FUNC + * @tc.require: AR000DAR08 + * @tc.author: jinwuwen + */ +HWTEST_F(ScrollCreatorTest, ScrollCreator002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of scroll component with a box child. + */ + const std::string content = "" + "{ " + " \"className\": \"Scroll\", " + " \"direction\": 0, " + " \"scrollPosition\": 50, " + " \"scrollPadding\": { " + " \"className\": \"Edge\", " + " \"value\": 15 " + " }, " + " \"child\":{ " + " \"className\": \"Box\" " + " } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get scroll component. + * @tc.expected: step2. properties and child are set correctly. + */ + const auto dslBuf = reinterpret_cast(content.c_str()); + size_t dslLen = content.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component != nullptr); + RefPtr scroll = AceType::DynamicCast(component); + ASSERT_TRUE(scroll != nullptr); + RefPtr box = AceType::DynamicCast(scroll->GetChild()); + ASSERT_TRUE(box != nullptr); + ASSERT_TRUE(NearEqual(scroll->GetScrollPositionController()->GetInitialOffset(), SCROLL_INIT_POSITION)); + ASSERT_TRUE(scroll->GetAxisDirection() == Axis::VERTICAL); + ASSERT_TRUE(scroll->GetPadding() == SCROLL_TEST_PADDING); +} + +/** + * @tc.name: ScrollCreator003 + * @tc.desc: Verify TransformCreator can create scroll component with a box child when direction is missing. + * @tc.type: FUNC + * @tc.require: AR000DAR08 + * @tc.author: jinwuwen + */ +HWTEST_F(ScrollCreatorTest, ScrollCreator003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of scroll component with a box child. + */ + const std::string content = "" + "{ " + " \"className\": \"Scroll\", " + " \"scrollPosition\": 50, " + " \"child\":{ " + " \"className\": \"Box\" " + " } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get scroll component. + * @tc.expected: step2. properties and child are set correctly. + */ + const auto dslBuf = reinterpret_cast(content.c_str()); + size_t dslLen = content.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component != nullptr); + RefPtr scroll = AceType::DynamicCast(component); + ASSERT_TRUE(scroll->GetAxisDirection() == Axis::VERTICAL); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/scroll/scroll_test_utils.cpp b/frameworks/core/components/test/unittest/scroll/scroll_test_utils.cpp new file mode 100644 index 00000000..1baad566 --- /dev/null +++ b/frameworks/core/components/test/unittest/scroll/scroll_test_utils.cpp @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/box/box_component.h" +#include "core/components/flex/flex_component.h" +#include "core/components/test/unittest/scroll/scroll_test_utils.h" + +namespace OHOS::Ace { + +RefPtr ScrollTestUtils::CreateRenderFlex(FlexDirection direction, FlexAlign main, FlexAlign cross) +{ + RefPtr flex = AceType::MakeRefPtr(); + std::list> children; + if (direction == FlexDirection::ROW) { + RefPtr flexComponent = AceType::MakeRefPtr(main, cross, children); + flex->Update(flexComponent); + return flex; + } else { + RefPtr flexComponent = AceType::MakeRefPtr(main, cross, children); + flex->Update(flexComponent); + return flex; + } +} + +RefPtr ScrollTestUtils::CreateRenderBox(double width, double height, bool deliverMinToChild) +{ + RefPtr renderBox = AceType::MakeRefPtr(); + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetWidth(width); + boxComponent->SetHeight(height); + boxComponent->SetDeliverMinToChild(deliverMinToChild); + renderBox->Update(boxComponent); + return renderBox; +} + +RefPtr ScrollTestUtils::CreateBoxComponent(double width, double height, bool deliverMinToChild) +{ + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetWidth(width); + boxComponent->SetHeight(height); + boxComponent->SetDeliverMinToChild(deliverMinToChild); + return boxComponent; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/scroll/scroll_test_utils.h b/frameworks/core/components/test/unittest/scroll/scroll_test_utils.h new file mode 100644 index 00000000..5c727ecd --- /dev/null +++ b/frameworks/core/components/test/unittest/scroll/scroll_test_utils.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_SCROLL_SCROLL_TEST_UTILS_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_SCROLL_SCROLL_TEST_UTILS_H + +#include "core/components/box/render_box.h" +#include "core/components/flex/render_flex.h" +#include "core/components/scroll/render_single_child_scroll.h" + +namespace OHOS::Ace { +namespace { + +class MockRenderBox final : public RenderBox { + DECLARE_ACE_TYPE(MockRenderBox, RenderBox); + +public: + MockRenderBox() = default; + ~MockRenderBox() override = default; +}; + +} // namespace + +class ScrollTestUtils { +public: + static RefPtr CreateRenderFlex(FlexDirection direction, FlexAlign main, FlexAlign cross); + static RefPtr CreateRenderBox(double width, double height, bool deliverMinToChild = true); + static RefPtr CreateBoxComponent(double width, double height, bool deliverMinToChild = true); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_SCROLL_SCROLL_TEST_UTILS_H diff --git a/frameworks/core/components/test/unittest/select/BUILD.gn b/frameworks/core/components/test/unittest/select/BUILD.gn new file mode 100644 index 00000000..a15180b7 --- /dev/null +++ b/frameworks/core/components/test/unittest/select/BUILD.gn @@ -0,0 +1,56 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +if (is_standard_system) { + module_output_path = "ace_engine_standard/backenduicomponent/select" +} + +ohos_unittest("SelectCreatorTest") { + module_out_path = module_output_path + + sources = [ "select_creator_test.cpp" ] + + configs = [ + ":config_json_creator_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "$ace_root/frameworks/core/components/test:json", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + deps += [ "$ace_root/frameworks/bridge:js_framework_ohos" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_json_creator_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + + deps = [ ":SelectCreatorTest" ] +} diff --git a/frameworks/core/components/test/unittest/select/select_creator_test.cpp b/frameworks/core/components/test/unittest/select/select_creator_test.cpp new file mode 100644 index 00000000..0fb208b5 --- /dev/null +++ b/frameworks/core/components/test/unittest/select/select_creator_test.cpp @@ -0,0 +1,815 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/json/json_util.h" +#include "base/utils/utils.h" +#include "core/components/select/select_component.h" +#include "core/components/test/json/component_factory.h" +#include "core/components/test/json/select_creator.h" +#include "core/components/theme/theme_constants.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +constexpr std::size_t SELECT_TEST_OPTION_INDEX = 0; +constexpr std::size_t SELECT_TEST_OPTION_COUNT = 1; +const std::string SELECT_TEST_OPTION_VALUE = "item1"; +const std::string SELECT_TEST_OPTION_TEXT = "menu1"; +const std::string SELECT_TEST_OPTION_ICON = "icon.jpg"; +const Dimension SELECT_TEST_FONT_SIZE(100.0); +constexpr std::size_t SELECT_TEST_OPTION_SIZE = 10; +const std::string SELECT_TEST_TIP_TEXT = "please select!"; +const std::string SELECT_TEST_ON_CHANGED = "onChangedTest"; +const std::string SELECT_TEST_FONT_FAMILY = "Kaushan,Italiana"; + +} // namespace + +class SelectCreatorTest : public testing::Test { +public: + static void SetUpTestCase() {} + static void TearDownTestCase() {} + + void SetUp() override {} + void TearDown() override {} +}; + +/** + * @tc.name: SelectCreator001 + * @tc.desc: Verify SelectCreator can create SelectComponent with default value. + * @tc.type: FUNC + * @tc.require: AR000DBAPS + * @tc.author: huangzhangmin + */ +HWTEST_F(SelectCreatorTest, SelectCreator001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string. + */ + const std::string jsonStr = "" + "{" + " \"className\": \"Select\"," + " \"options\" : [" + " {" + " \"value\": \"item1\"," + " \"text\" : \"menu1\"" + " }" + " ]" + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get select component. + * @tc.expected: step2. properties and child are set correctly. + */ + auto component = ComponentFactory::GetInstance().CreateComponentFromDsl( + reinterpret_cast(jsonStr.c_str()), jsonStr.size()); + ASSERT_TRUE(component != nullptr); + + auto select = AceType::DynamicCast(component); + ASSERT_TRUE(select != nullptr); + + EXPECT_EQ(select->GetDisabled(), false); + EXPECT_EQ(select->GetClicked(), false); +} + +/** + * @tc.name: SelectCreator002 + * @tc.desc: Verify SelectCreator can create SelectComponent with all values. + * @tc.type: FUNC + * @tc.require: AR000DBAPS + * @tc.author: huangzhangmin + */ +HWTEST_F(SelectCreatorTest, SelectCreator002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string. + */ + const std::string jsonStr = + "" + "{" + " \"className\": \"Select\"," + " \"disabled\": \"true\"," + " \"selectedColor\": { \"className\": \"Color\", \"red\" : 255, \"green\" : 0, \"blue\" : 0 }," + " \"clickedColor\":{ \"className\": \"Color\", \"red\": 0, \"green\": 255, \"blue\": 0 }," + " \"fontSize\": 100," + " \"optionSize\": 10," + " \"onChanged\": \"handleChanged\"," + " \"tipText\" : \"please select!\"," + " \"options\" :" + " [{ \"value\": \"item1\", \"text\" : \"menu1\", \"selected\": \"true\", \"icon\": \"icon.jpg\" }]" + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get select component. + * @tc.expected: step2. properties and child are set correctly. + */ + auto component = ComponentFactory::GetInstance().CreateComponentFromDsl( + reinterpret_cast(jsonStr.c_str()), jsonStr.size()); + ASSERT_TRUE(component != nullptr); + auto select = AceType::DynamicCast(component); + ASSERT_TRUE(select != nullptr); + + EXPECT_EQ(select->GetDisabled(), true); + EXPECT_EQ(select->GetClicked(), false); + EXPECT_EQ(select->GetClickedColor(), Color::GREEN); + EXPECT_EQ(select->GetSelectedColor(), Color::RED); + EXPECT_EQ(select->GetFontSize(), SELECT_TEST_FONT_SIZE); + EXPECT_EQ(select->GetOptionSize(), SELECT_TEST_OPTION_SIZE); + auto tipText = select->GetTipText(); + ASSERT_TRUE(tipText != nullptr); + EXPECT_EQ(tipText->GetData(), SELECT_TEST_OPTION_TEXT); + + EXPECT_EQ(select->GetSelectOptionCount(), SELECT_TEST_OPTION_COUNT); + auto option = select->GetSelectOption(SELECT_TEST_OPTION_INDEX); + ASSERT_TRUE(option != nullptr); + EXPECT_EQ(option->GetSelected(), true); + EXPECT_EQ(option->GetValue(), SELECT_TEST_OPTION_VALUE); + auto text = option->GetText(); + ASSERT_TRUE(text != nullptr); + EXPECT_EQ(text->GetData(), SELECT_TEST_OPTION_TEXT); + auto icon = option->GetIcon(); + ASSERT_TRUE(icon != nullptr); + EXPECT_EQ(icon->GetSrc(), SELECT_TEST_OPTION_ICON); +} + +/** + * @tc.name: SelectCreator003 + * @tc.desc: Verify SelectCreator can create SelectComponent with enabled. + * @tc.type: FUNC + * @tc.require: AR000DBAPS + * @tc.author: huangzhangmin + */ +HWTEST_F(SelectCreatorTest, SelectCreator003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string. + */ + const std::string jsonStr = + "" + "{" + " \"className\": \"Select\"," + " \"disabled\": \"false\"," + " \"options\" :" + " [{ \"value\": \"item1\", \"text\" : \"menu1\", \"selected\": \"true\", \"icon\": \"icon.jpg\" }]" + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get select component. + * @tc.expected: step2. disabled are set correctly. + */ + auto component = ComponentFactory::GetInstance().CreateComponentFromDsl( + reinterpret_cast(jsonStr.c_str()), jsonStr.size()); + ASSERT_TRUE(component != nullptr); + auto select = AceType::DynamicCast(component); + ASSERT_TRUE(select != nullptr); + EXPECT_EQ(select->GetDisabled(), false); +} + +/** + * @tc.name: SelectCreator004 + * @tc.desc: Verify SelectCreator can create SelectComponent with disabled. + * @tc.type: FUNC + * @tc.require: AR000DBAPS + * @tc.author: huangzhangmin + */ +HWTEST_F(SelectCreatorTest, SelectCreator004, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string. + */ + const std::string jsonStr = + "" + "{" + " \"className\": \"Select\"," + " \"disabled\": \"true\"," + " \"options\" :" + " [{ \"value\": \"item1\", \"text\" : \"menu1\", \"selected\": \"true\", \"icon\": \"icon.jpg\" }]" + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get select component. + * @tc.expected: step2. disabled are set correctly. + */ + auto component = ComponentFactory::GetInstance().CreateComponentFromDsl( + reinterpret_cast(jsonStr.c_str()), jsonStr.size()); + ASSERT_TRUE(component != nullptr); + auto select = AceType::DynamicCast(component); + ASSERT_TRUE(select != nullptr); + EXPECT_EQ(select->GetDisabled(), true); +} + +/** + * @tc.name: SelectCreator005 + * @tc.desc: Verify SelectCreator can create SelectComponent with clicked color. + * @tc.type: FUNC + * @tc.require: AR000DBAPS + * @tc.author: huangzhangmin + */ +HWTEST_F(SelectCreatorTest, SelectCreator005, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string. + */ + const std::string jsonStr = + "" + "{" + " \"className\": \"Select\"," + " \"clickedColor\": {\"className\":\"Color\",\"red\":255,\"green\":255,\"blue\":255}," + " \"options\" :" + " [{ \"value\": \"item1\", \"text\" : \"menu1\", \"selected\": \"true\", \"icon\": \"icon.jpg\" }]" + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get select component. + * @tc.expected: step2. clickedColor are set correctly. + */ + auto component = ComponentFactory::GetInstance().CreateComponentFromDsl( + reinterpret_cast(jsonStr.c_str()), jsonStr.size()); + ASSERT_TRUE(component != nullptr); + auto select = AceType::DynamicCast(component); + ASSERT_TRUE(select != nullptr); + EXPECT_EQ(select->GetClickedColor(), Color::WHITE); +} + +/** + * @tc.name: SelectCreator006 + * @tc.desc: Verify SelectCreator can create SelectComponent with selected color. + * @tc.type: FUNC + * @tc.require: AR000DBAPS + * @tc.author: huangzhangmin + */ +HWTEST_F(SelectCreatorTest, SelectCreator006, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string. + */ + const std::string jsonStr = + "" + "{" + " \"className\": \"Select\"," + " \"selectedColor\": {\"className\":\"Color\",\"red\":0,\"green\":0,\"blue\":0}," + " \"options\" :" + " [{ \"value\": \"item1\", \"text\" : \"menu1\", \"selected\": \"true\", \"icon\": \"icon.jpg\" }]" + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get select component. + * @tc.expected: step2. selectedColor are set correctly. + */ + auto component = ComponentFactory::GetInstance().CreateComponentFromDsl( + reinterpret_cast(jsonStr.c_str()), jsonStr.size()); + ASSERT_TRUE(component != nullptr); + auto select = AceType::DynamicCast(component); + ASSERT_TRUE(select != nullptr); + EXPECT_EQ(select->GetSelectedColor(), Color::BLACK); +} + +/** + * @tc.name: SelectCreator007 + * @tc.desc: Verify SelectCreator can create SelectComponent with disabled color. + * @tc.type: FUNC + * @tc.require: AR000DBAPS + * @tc.author: huangzhangmin + */ +HWTEST_F(SelectCreatorTest, SelectCreator007, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string. + */ + const std::string jsonStr = + "" + "{" + " \"className\": \"Select\"," + " \"disabledColor\": {\"className\":\"Color\",\"red\":255,\"green\":0,\"blue\":0}," + " \"options\" :" + " [{ \"value\": \"item1\", \"text\" : \"menu1\", \"selected\": \"true\", \"icon\": \"icon.jpg\" }]" + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get select component. + * @tc.expected: step2. disabledColor are set correctly. + */ + auto component = ComponentFactory::GetInstance().CreateComponentFromDsl( + reinterpret_cast(jsonStr.c_str()), jsonStr.size()); + ASSERT_TRUE(component != nullptr); + auto select = AceType::DynamicCast(component); + ASSERT_TRUE(select != nullptr); + EXPECT_EQ(select->GetDisabledColor(), Color::RED); +} + +/** + * @tc.name: SelectCreator008 + * @tc.desc: Verify SelectCreator can create SelectComponent with onchange event. + * @tc.type: FUNC + * @tc.require: AR000DBAPS + * @tc.author: huangzhangmin + */ +HWTEST_F(SelectCreatorTest, SelectCreator008, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string. + */ + const std::string jsonStr = + "" + "{" + " \"className\": \"Select\"," + " \"onChanged\": \"onChangedTest\"," + " \"options\" :" + " [{ \"value\": \"item1\", \"text\" : \"menu1\", \"selected\": \"true\", \"icon\": \"icon.jpg\" }]" + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get select component. + * @tc.expected: step2. onChanged event are set correctly. + */ + auto component = ComponentFactory::GetInstance().CreateComponentFromDsl( + reinterpret_cast(jsonStr.c_str()), jsonStr.size()); + ASSERT_TRUE(component != nullptr); + auto select = AceType::DynamicCast(component); + ASSERT_TRUE(select != nullptr); + EXPECT_EQ(select->GetOnChanged(), SELECT_TEST_ON_CHANGED); +} + +/** + * @tc.name: SelectCreator009 + * @tc.desc: Verify SelectCreator can create SelectComponent with tipText. + * @tc.type: FUNC + * @tc.require: AR000DBAPS + * @tc.author: huangzhangmin + */ +HWTEST_F(SelectCreatorTest, SelectCreator009, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string. + */ + const std::string jsonStr = "" + "{" + " \"className\": \"Select\"," + " \"tipText\": \"please select!\"," + " \"options\" :" + " [{ \"value\": \"item1\", \"text\" : \"menu1\", \"icon\": \"icon.jpg\" }]" + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get select component. + * @tc.expected: step2. tipText are set correctly. + */ + auto component = ComponentFactory::GetInstance().CreateComponentFromDsl( + reinterpret_cast(jsonStr.c_str()), jsonStr.size()); + ASSERT_TRUE(component != nullptr); + auto select = AceType::DynamicCast(component); + ASSERT_TRUE(select != nullptr); + ASSERT_TRUE(select->GetTipText() != nullptr); + EXPECT_EQ(select->GetTipText()->GetData(), SELECT_TEST_TIP_TEXT); +} + +/** + * @tc.name: SelectCreator010 + * @tc.desc: Verify SelectCreator can create SelectComponent with fontSize. + * @tc.type: FUNC + * @tc.require: AR000DBAPS + * @tc.author: huangzhangmin + */ +HWTEST_F(SelectCreatorTest, SelectCreator010, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string. + */ + const std::string jsonStr = + "" + "{" + " \"className\": \"Select\"," + " \"fontSize\": 100," + " \"options\" :" + " [{ \"value\": \"item1\", \"text\" : \"menu1\", \"selected\": \"true\", \"icon\": \"icon.jpg\" }]" + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get select component. + * @tc.expected: step2. fontSize are set correctly. + */ + auto component = ComponentFactory::GetInstance().CreateComponentFromDsl( + reinterpret_cast(jsonStr.c_str()), jsonStr.size()); + ASSERT_TRUE(component != nullptr); + auto select = AceType::DynamicCast(component); + ASSERT_TRUE(select != nullptr); + EXPECT_EQ(select->GetFontSize(), SELECT_TEST_FONT_SIZE); +} + +/** + * @tc.name: SelectCreator011 + * @tc.desc: Verify SelectCreator can create SelectComponent with fontFamily. + * @tc.type: FUNC + * @tc.require: AR000DBAPS + * @tc.author: huangzhangmin + */ +HWTEST_F(SelectCreatorTest, SelectCreator011, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string. + */ + const std::string jsonStr = + "" + "{" + " \"className\": \"Select\"," + " \"fontFamilies\": \"Kaushan,Italiana\"," + " \"options\" :" + " [{ \"value\": \"item1\", \"text\" : \"menu1\", \"selected\": \"true\", \"icon\": \"icon.jpg\" }]" + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get select component. + * @tc.expected: step2. fontFamily are set correctly. + */ + auto component = ComponentFactory::GetInstance().CreateComponentFromDsl( + reinterpret_cast(jsonStr.c_str()), jsonStr.size()); + ASSERT_TRUE(component != nullptr); + auto select = AceType::DynamicCast(component); + ASSERT_TRUE(select != nullptr); + EXPECT_EQ(select->GetFontFamily(), SELECT_TEST_FONT_FAMILY); +} + +/** + * @tc.name: SelectCreator012 + * @tc.desc: Verify SelectCreator can create SelectComponent with optionSize. + * @tc.type: FUNC + * @tc.require: AR000DBAPS + * @tc.author: huangzhangmin + */ +HWTEST_F(SelectCreatorTest, SelectCreator012, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string. + */ + const std::string jsonStr = + "" + "{" + " \"className\": \"Select\"," + " \"optionSize\": 10," + " \"options\" :" + " [{ \"value\": \"item1\", \"text\" : \"menu1\", \"selected\": \"true\", \"icon\": \"icon.jpg\" }]" + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get select component. + * @tc.expected: step2. optionSize are set correctly. + */ + auto component = ComponentFactory::GetInstance().CreateComponentFromDsl( + reinterpret_cast(jsonStr.c_str()), jsonStr.size()); + ASSERT_TRUE(component != nullptr); + auto select = AceType::DynamicCast(component); + ASSERT_TRUE(select != nullptr); + EXPECT_EQ(select->GetOptionSize(), SELECT_TEST_OPTION_SIZE); +} + +/** + * @tc.name: SelectCreator013 + * @tc.desc: Verify SelectCreator can create SelectComponent has OptionComponent with icon. + * @tc.type: FUNC + * @tc.require: AR000DBAPT + * @tc.author: huangzhangmin + */ +HWTEST_F(SelectCreatorTest, SelectCreator013, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string. + */ + const std::string jsonStr = "" + "{" + " \"className\": \"Select\"," + " \"options\" :" + " [{ \"value\": \"item1\", \"text\" : \"menu1\", \"icon\": \"icon.jpg\" }]" + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get select option component. + * @tc.expected: step2. icon are set correctly. + */ + auto component = ComponentFactory::GetInstance().CreateComponentFromDsl( + reinterpret_cast(jsonStr.c_str()), jsonStr.size()); + ASSERT_TRUE(component != nullptr); + auto select = AceType::DynamicCast(component); + ASSERT_TRUE(select != nullptr); + auto option = select->GetSelectOption(SELECT_TEST_OPTION_INDEX); + ASSERT_TRUE(option != nullptr); + ASSERT_TRUE(option->GetIcon() != nullptr); + EXPECT_EQ(option->GetIcon()->GetSrc(), SELECT_TEST_OPTION_ICON); +} + +/** + * @tc.name: SelectCreator014 + * @tc.desc: Verify SelectCreator can create SelectComponent has OptionComponent with value. + * @tc.type: FUNC + * @tc.require: AR000DBAPT + * @tc.author: huangzhangmin + */ +HWTEST_F(SelectCreatorTest, SelectCreator014, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string. + */ + const std::string jsonStr = "" + "{" + " \"className\": \"Select\"," + " \"options\" :" + " [{ \"value\": \"item1\", \"text\" : \"menu1\" }]" + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get select option component. + * @tc.expected: step2. value are set correctly. + */ + auto component = ComponentFactory::GetInstance().CreateComponentFromDsl( + reinterpret_cast(jsonStr.c_str()), jsonStr.size()); + ASSERT_TRUE(component != nullptr); + auto select = AceType::DynamicCast(component); + ASSERT_TRUE(select != nullptr); + auto option = select->GetSelectOption(SELECT_TEST_OPTION_INDEX); + ASSERT_TRUE(option != nullptr); + EXPECT_EQ(option->GetValue(), SELECT_TEST_OPTION_VALUE); +} + +/** + * @tc.name: SelectCreator015 + * @tc.desc: Verify SelectCreator can create SelectComponent has OptionComponent with text. + * @tc.type: FUNC + * @tc.require: AR000DBAPT + * @tc.author: huangzhangmin + */ +HWTEST_F(SelectCreatorTest, SelectCreator015, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string. + */ + const std::string jsonStr = "" + "{" + " \"className\": \"Select\"," + " \"options\" :" + " [{ \"value\": \"item1\", \"text\" : \"menu1\" }]" + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get select option component. + * @tc.expected: step2. text are set correctly. + */ + auto component = ComponentFactory::GetInstance().CreateComponentFromDsl( + reinterpret_cast(jsonStr.c_str()), jsonStr.size()); + ASSERT_TRUE(component != nullptr); + auto select = AceType::DynamicCast(component); + ASSERT_TRUE(select != nullptr); + auto option = select->GetSelectOption(SELECT_TEST_OPTION_INDEX); + ASSERT_TRUE(option != nullptr); + ASSERT_TRUE(option->GetText() != nullptr); + EXPECT_EQ(option->GetText()->GetData(), SELECT_TEST_OPTION_TEXT); +} + +/** + * @tc.name: SelectCreator016 + * @tc.desc: Verify SelectCreator can create SelectComponent has OptionComponent with selected. + * @tc.type: FUNC + * @tc.require: AR000DBAPT + * @tc.author: huangzhangmin + */ +HWTEST_F(SelectCreatorTest, SelectCreator016, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string. + */ + const std::string jsonStr = "" + "{" + " \"className\": \"Select\"," + " \"options\" :" + " [{ \"value\": \"item1\", \"text\" : \"menu1\", \"selected\":\"true\" }]" + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get select option component. + * @tc.expected: step2. selected are set correctly. + */ + auto component = ComponentFactory::GetInstance().CreateComponentFromDsl( + reinterpret_cast(jsonStr.c_str()), jsonStr.size()); + ASSERT_TRUE(component != nullptr); + auto select = AceType::DynamicCast(component); + ASSERT_TRUE(select != nullptr); + auto option = select->GetSelectOption(SELECT_TEST_OPTION_INDEX); + ASSERT_TRUE(option != nullptr); + EXPECT_EQ(option->GetSelected(), true); +} + +/** + * @tc.name: SelectCreator017 + * @tc.desc: Verify SelectCreator can create SelectComponent has OptionComponent with unselected. + * @tc.type: FUNC + * @tc.require: AR000DBAPT + * @tc.author: huangzhangmin + */ +HWTEST_F(SelectCreatorTest, SelectCreator017, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string. + */ + const std::string jsonStr = "" + "{" + " \"className\": \"Select\"," + " \"options\" :" + " [{ \"value\": \"item1\", \"text\" : \"menu1\", \"selected\":\"false\" }]" + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get select option component. + * @tc.expected: step2. unselected are set correctly. + */ + auto component = ComponentFactory::GetInstance().CreateComponentFromDsl( + reinterpret_cast(jsonStr.c_str()), jsonStr.size()); + ASSERT_TRUE(component != nullptr); + auto select = AceType::DynamicCast(component); + ASSERT_TRUE(select != nullptr); + auto option = select->GetSelectOption(SELECT_TEST_OPTION_INDEX); + ASSERT_TRUE(option != nullptr); + EXPECT_EQ(option->GetSelected(), false); +} + +/** + * @tc.name: SelectCreator018 + * @tc.desc: Verify SelectCreator can create SelectComponent has OptionComponent with fontColor. + * @tc.type: FUNC + * @tc.require: AR000DBAPT + * @tc.author: huangzhangmin + */ +HWTEST_F(SelectCreatorTest, SelectCreator018, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string. + */ + const std::string jsonStr = + "" + "{" + " \"className\": \"Select\"," + " \"options\" : [{ \"text\" : \"t\", \"value\" : \"v\", " + " \"color\" : { \"className\" : \"Color\", \"red\" : 0, \"green\" : 255, \"blue\" : 0 } }]" + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get select option component. + * @tc.expected: step2. fontColor are set correctly. + */ + auto component = ComponentFactory::GetInstance().CreateComponentFromDsl( + reinterpret_cast(jsonStr.c_str()), jsonStr.size()); + ASSERT_TRUE(component != nullptr); + auto select = AceType::DynamicCast(component); + ASSERT_TRUE(select != nullptr); + auto option = select->GetSelectOption(SELECT_TEST_OPTION_INDEX); + ASSERT_TRUE(option != nullptr); + EXPECT_EQ(option->GetFontColor(), Color::GREEN); +} + +/** + * @tc.name: SelectCreator019 + * @tc.desc: Verify SelectCreator can create SelectComponent has OptionComponent with fontWeight. + * @tc.type: FUNC + * @tc.require: AR000DBAPT + * @tc.author: huangzhangmin + */ +HWTEST_F(SelectCreatorTest, SelectCreator019, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string. + */ + const std::string jsonStr = "" + "{" + " \"className\": \"Select\"," + " \"options\" :" + " [{ \"text\" : \"t1\", \"value\" : \"v1\", \"fontWeight\" : 12 }]" + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get select option component. + * @tc.expected: step2. fontWeight are set correctly. + */ + auto component = ComponentFactory::GetInstance().CreateComponentFromDsl( + reinterpret_cast(jsonStr.c_str()), jsonStr.size()); + ASSERT_TRUE(component != nullptr); + auto select = AceType::DynamicCast(component); + ASSERT_TRUE(select != nullptr); + auto option = select->GetSelectOption(SELECT_TEST_OPTION_INDEX); + ASSERT_TRUE(option != nullptr); + EXPECT_EQ(option->GetFontWeight(), FontWeight::LIGHTER); +} + +/** + * @tc.name: SelectCreator020 + * @tc.desc: Verify SelectCreator can create SelectComponent has OptionComponent with fontFamily. + * @tc.type: FUNC + * @tc.require: AR000DBAPT + * @tc.author: huangzhangmin + */ +HWTEST_F(SelectCreatorTest, SelectCreator020, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string. + */ + const std::string jsonStr = + "" + "{" + " \"className\": \"Select\"," + " \"options\" :" + " [{ \"text\" : \"t1\", \"value\" : \"v1\", \"fontFamilies\" : \"Kaushan,Italiana\" }]" + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get select option component. + * @tc.expected: step2. fontFamily are set correctly. + */ + auto component = ComponentFactory::GetInstance().CreateComponentFromDsl( + reinterpret_cast(jsonStr.c_str()), jsonStr.size()); + ASSERT_TRUE(component != nullptr); + auto select = AceType::DynamicCast(component); + ASSERT_TRUE(select != nullptr); + auto option = select->GetSelectOption(SELECT_TEST_OPTION_INDEX); + ASSERT_TRUE(option != nullptr); + EXPECT_EQ(option->GetFontFamily(), SELECT_TEST_FONT_FAMILY); +} + +/** + * @tc.name: SelectCreator021 + * @tc.desc: Verify SelectCreator can create SelectComponent has OptionComponent with textDecoration. + * @tc.type: FUNC + * @tc.require: AR000DBAPT + * @tc.author: huangzhangmin + */ +HWTEST_F(SelectCreatorTest, SelectCreator021, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string. + */ + const std::string jsonStr = "" + "{" + " \"className\": \"Select\"," + " \"options\" :" + " [{ \"text\" : \"t1\", \"value\" : \"v1\", \"textDecoration\" : 3 }]" + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get select option component. + * @tc.expected: step2. textDecoration are set correctly. + */ + auto component = ComponentFactory::GetInstance().CreateComponentFromDsl( + reinterpret_cast(jsonStr.c_str()), jsonStr.size()); + ASSERT_TRUE(component != nullptr); + auto select = AceType::DynamicCast(component); + ASSERT_TRUE(select != nullptr); + auto option = select->GetSelectOption(SELECT_TEST_OPTION_INDEX); + ASSERT_TRUE(option != nullptr); + EXPECT_EQ(option->GetTextDecoration(), TextDecoration::LINE_THROUGH); +} + +/** + * @tc.name: SelectCreator022 + * @tc.desc: Verify SelectCreator can create SelectComponent has OptionComponent with fontSize. + * @tc.type: FUNC + * @tc.require: AR000DBAPT + * @tc.author: huangzhangmin + */ +HWTEST_F(SelectCreatorTest, SelectCreator022, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string. + */ + const std::string jsonStr = "" + "{" + " \"className\": \"Select\"," + " \"options\" :" + " [{ \"text\" : \"t1\", \"value\" : \"v1\", \"fontSize\" : 100 }]" + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get select option component. + * @tc.expected: step2. fontSize are set correctly. + */ + auto component = ComponentFactory::GetInstance().CreateComponentFromDsl( + reinterpret_cast(jsonStr.c_str()), jsonStr.size()); + ASSERT_TRUE(component != nullptr); + auto select = AceType::DynamicCast(component); + ASSERT_TRUE(select != nullptr); + auto option = select->GetSelectOption(SELECT_TEST_OPTION_INDEX); + ASSERT_TRUE(option != nullptr); + EXPECT_EQ(option->GetFontSize(), SELECT_TEST_FONT_SIZE); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/semimodal/BUILD.gn b/frameworks/core/components/test/unittest/semimodal/BUILD.gn new file mode 100644 index 00000000..bf522851 --- /dev/null +++ b/frameworks/core/components/test/unittest/semimodal/BUILD.gn @@ -0,0 +1,229 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/backenduicomponent/semimodal" + +ohos_unittest("RenderSemiModalTest") { + module_out_path = module_output_path + + sources = [ + "$ace_root/frameworks/core/accessibility/accessibility_node.cpp", + + # animation + "$ace_root/frameworks/core/animation/animator.cpp", + "$ace_root/frameworks/core/animation/anticipate_curve.cpp", + "$ace_root/frameworks/core/animation/cubic_curve.cpp", + "$ace_root/frameworks/core/animation/curves.cpp", + "$ace_root/frameworks/core/animation/friction_motion.cpp", + "$ace_root/frameworks/core/animation/scheduler.cpp", + "$ace_root/frameworks/core/animation/scroll_motion.cpp", + "$ace_root/frameworks/core/animation/shared_transition_controller.cpp", + "$ace_root/frameworks/core/animation/shared_transition_effect.cpp", + "$ace_root/frameworks/core/animation/spring_animation.cpp", + "$ace_root/frameworks/core/animation/spring_model.cpp", + "$ace_root/frameworks/core/animation/spring_motion.cpp", + + # common + "$ace_root/frameworks/core/common/ace_engine.cpp", + "$ace_root/frameworks/core/common/event_manager.cpp", + "$ace_root/frameworks/core/common/focus_animation_manager.cpp", + "$ace_root/frameworks/core/common/font_loader.cpp", + "$ace_root/frameworks/core/common/font_manager.cpp", + "$ace_root/frameworks/core/common/window.cpp", + "$ace_root/frameworks/core/pipeline/pipeline_context.cpp", + + #base + "$ace_root/adapter/common/cpp/thread_util.cpp", + "$ace_root/adapter/ohos/osal/log_wrapper.cpp", + "$ace_root/frameworks/base/geometry/matrix4.cpp", + "$ace_root/frameworks/base/log/dump_log.cpp", + "$ace_root/frameworks/base/thread/background_task_executor.cpp", + "$ace_root/frameworks/base/utils/base_id.cpp", + + # components + "$ace_root/frameworks/core/components/box/box_component.cpp", + "$ace_root/frameworks/core/components/clip/clip_component.cpp", + "$ace_root/frameworks/core/components/dialog_modal/dialog_modal_component.cpp", + "$ace_root/frameworks/core/components/display/display_component.cpp", + "$ace_root/frameworks/core/components/drag_bar/drag_bar_component.cpp", + "$ace_root/frameworks/core/components/focus_animation/focus_animation_component.cpp", + "$ace_root/frameworks/core/components/image/image_component.cpp", + "$ace_root/frameworks/core/components/page/page_component.cpp", + "$ace_root/frameworks/core/components/root/root_component.cpp", + "$ace_root/frameworks/core/components/semi_modal/semi_modal_component.cpp", + "$ace_root/frameworks/core/components/test/json/json_frontend.cpp", + "$ace_root/frameworks/core/components/transform/transform_component.cpp", + "$ace_root/frameworks/core/components/transition/transition_component.cpp", + "$ace_root/frameworks/core/components/tween/tween_component.cpp", + "$ace_root/frameworks/core/pipeline/base/component.cpp", + "$ace_root/frameworks/core/pipeline/base/composed_component.cpp", + + # elements + "$ace_root/frameworks/core/components/bubble/bubble_element.cpp", + "$ace_root/frameworks/core/components/dialog_modal/dialog_modal_element.cpp", + "$ace_root/frameworks/core/components/display/display_element.cpp", + "$ace_root/frameworks/core/components/drag_bar/drag_bar_element.cpp", + "$ace_root/frameworks/core/components/flex/flex_element.cpp", + "$ace_root/frameworks/core/components/focus_collaboration/focus_collaboration_element.cpp", + "$ace_root/frameworks/core/components/overlay/overlay_element.cpp", + "$ace_root/frameworks/core/components/page/page_element.cpp", + "$ace_root/frameworks/core/components/page_transition/page_transition_element.cpp", + "$ace_root/frameworks/core/components/root/root_element.cpp", + "$ace_root/frameworks/core/components/semi_modal/semi_modal_element.cpp", + "$ace_root/frameworks/core/components/shared_transition/shared_transition_element.cpp", + "$ace_root/frameworks/core/components/stack/stack_element.cpp", + "$ace_root/frameworks/core/components/stage/stage_element.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/overlay_mock.cpp", + "$ace_root/frameworks/core/pipeline/base/component_group_element.cpp", + "$ace_root/frameworks/core/pipeline/base/composed_element.cpp", + "$ace_root/frameworks/core/pipeline/base/element.cpp", + "$ace_root/frameworks/core/pipeline/base/render_element.cpp", + "$ace_root/frameworks/core/pipeline/base/sole_child_element.cpp", + + # mock + "$ace_root/frameworks/core/components/test/unittest/mock/mock_render_node_factory.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/render_mock.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/transform_mock.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/transition_mock.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/tween_mock.cpp", + "$ace_root/frameworks/core/components/transform/transform_element.cpp", + "$ace_root/frameworks/core/components/transition/transition_element.cpp", + "$ace_root/frameworks/core/components/tween/tween_element.cpp", + + # event + "$ace_root/frameworks/core/event/back_end_event_manager.cpp", + "$ace_root/frameworks/core/event/multimodal/multimodal_manager.cpp", + "$ace_root/frameworks/core/event/multimodal/multimodal_scene.cpp", + + # focus + "$ace_root/frameworks/core/focus/focus_node.cpp", + "$ace_root/frameworks/core/gestures/click_recognizer.cpp", + "$ace_root/frameworks/core/gestures/drag_recognizer.cpp", + "$ace_root/frameworks/core/gestures/gesture_recognizer.cpp", + "$ace_root/frameworks/core/gestures/gesture_referee.cpp", + "$ace_root/frameworks/core/gestures/raw_recognizer.cpp", + + # gestures + "$ace_root/frameworks/core/gestures/velocity_tracker.cpp", + + # image + "$ace_root/frameworks/core/image/image_cache.cpp", + + # layout + "$ace_root/frameworks/core/components/common/layout/grid_column_info.cpp", + "$ace_root/frameworks/core/components/common/layout/grid_container_info.cpp", + "$ace_root/frameworks/core/components/common/layout/grid_system_manager.cpp", + + # others + "$ace_root/frameworks/core/components/box/render_box.cpp", + "$ace_root/frameworks/core/components/box/render_box_base.cpp", + "$ace_root/frameworks/core/components/clip/render_clip.cpp", + "$ace_root/frameworks/core/components/common/properties/alignment.cpp", + "$ace_root/frameworks/core/components/common/properties/border.cpp", + "$ace_root/frameworks/core/components/common/properties/border_edge.cpp", + "$ace_root/frameworks/core/components/common/properties/color.cpp", + "$ace_root/frameworks/core/components/common/properties/decoration.cpp", + "$ace_root/frameworks/core/components/common/properties/edge.cpp", + "$ace_root/frameworks/core/components/common/properties/page_transition_option.cpp", + "$ace_root/frameworks/core/components/common/properties/scroll_bar.cpp", + "$ace_root/frameworks/core/components/common/properties/text_style.cpp", + "$ace_root/frameworks/core/components/dialog_modal/render_dialog_modal.cpp", + "$ace_root/frameworks/core/components/display/render_display.cpp", + "$ace_root/frameworks/core/components/drag_bar/render_drag_bar.cpp", + "$ace_root/frameworks/core/components/flex/render_flex.cpp", + "$ace_root/frameworks/core/components/flex/render_flex_item.cpp", + "$ace_root/frameworks/core/components/focus_animation/render_focus_animation.cpp", + "$ace_root/frameworks/core/components/focus_collaboration/render_focus_collaboration.cpp", + "$ace_root/frameworks/core/components/image/render_image.cpp", + "$ace_root/frameworks/core/components/scroll/render_multi_child_scroll.cpp", + + # rendering + "$ace_root/frameworks/core/common/vibrator/vibrator_proxy.cpp", + "$ace_root/frameworks/core/components/bubble/render_bubble.cpp", + "$ace_root/frameworks/core/components/positioned/render_positioned.cpp", + "$ace_root/frameworks/core/components/proxy/render_proxy.cpp", + "$ace_root/frameworks/core/components/refresh/render_refresh.cpp", + "$ace_root/frameworks/core/components/root/render_root.cpp", + "$ace_root/frameworks/core/components/scroll/render_scroll.cpp", + "$ace_root/frameworks/core/components/scroll/render_single_child_scroll.cpp", + "$ace_root/frameworks/core/components/scroll/scroll_bar_controller.cpp", + "$ace_root/frameworks/core/components/semi_modal/render_semi_modal.cpp", + "$ace_root/frameworks/core/components/shadow/render_shadow.cpp", + "$ace_root/frameworks/core/components/stack/render_stack.cpp", + "$ace_root/frameworks/core/components/stage/render_stage.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/mock_flutter_font_manager.cpp", + "$ace_root/frameworks/core/components/theme/app_theme.cpp", + "$ace_root/frameworks/core/components/theme/theme_attributes.cpp", + "$ace_root/frameworks/core/components/theme/theme_constants.cpp", + "$ace_root/frameworks/core/components/theme/theme_manager.cpp", + "$ace_root/frameworks/core/components/theme/theme_utils.cpp", + "$ace_root/frameworks/core/pipeline/base/render_node.cpp", + "$root_out_dir/ace/framework/core/components/theme/theme_constants_default.cpp", + "render_semi_modal_test.cpp", + + #mock + "$ace_root/frameworks/core/components/test/unittest/mock/ace_trace_mock.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/event_report_mock.cpp", + "$ace_root/frameworks/core/mock/mock_ace_application_info.cpp", + "$ace_root/frameworks/core/mock/mock_system_properties.cpp", + "$ace_root/frameworks/core/mock/mock_watch_dog.cpp", + ] + + if (!is_wearable_product) { + sources += [ + # theme + "$root_out_dir/ace/framework/core/components/theme/theme_constants_tv.cpp", + ] + } + + # add sources only needed by wearable like watch. + if (is_wearable_product) { + sources += [ "$root_out_dir/ace/framework/core/components/theme/theme_constants_watch.cpp" ] + } + + configs = [ + ":config_render_semi_modal_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core/components/theme:build_theme_code", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + external_deps = [ "hiviewdfx_hilog_native:libhilog" ] + deps += [ "//base/global/resmgr_standard/frameworks/resmgr:global_resmgr" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_render_semi_modal_test") { + visibility = [ ":*" ] + include_dirs = [ + "//utils/native/base/include", + "$ace_root", + ] +} + +group("unittest") { + testonly = true + deps = [] + deps += [ ":RenderSemiModalTest" ] +} diff --git a/frameworks/core/components/test/unittest/semimodal/render_semi_modal_test.cpp b/frameworks/core/components/test/unittest/semimodal/render_semi_modal_test.cpp new file mode 100644 index 00000000..72f00fe2 --- /dev/null +++ b/frameworks/core/components/test/unittest/semimodal/render_semi_modal_test.cpp @@ -0,0 +1,292 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "adapter/ohos/osal/fake_asset_manager.h" +#include "adapter/ohos/osal/fake_task_executor.h" +#include "base/log/log.h" +#include "base/utils/utils.h" +#include "core/animation/card_transition_controller.h" +#include "core/components/box/box_component.h" +#include "core/components/focus_animation/render_focus_animation.h" +#include "core/components/focus_collaboration/focus_collaboration_component.h" +#include "core/components/page_transition/page_transition_component.h" +#include "core/components/semi_modal/render_semi_modal.h" +#include "core/components/semi_modal/semi_modal_element.h" +#include "core/components/shadow/render_shadow.h" +#include "core/components/stage/stage_element.h" +#include "core/components/test/json/json_frontend.h" +#include "core/components/test/unittest/mock/mock_render_common.h" +#include "core/components/test/unittest/mock/window_mock.h" +#include "core/mock/mock_resource_register.h" +#include "core/pipeline/pipeline_context.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +constexpr int32_t NANOSECOND_TO_MILLISECOND = 1000000; +constexpr int32_t FRAME_TIME_IN_MILLISECOND = 100; +constexpr int32_t TEST_SURFACE_WIDTH = 1080; +constexpr int32_t TEST_SURFACE_HEIGHT = 1920; +constexpr double TEST_STATUS_BAR_HEIGHT = 72.0; +constexpr double TEST_NAVIGATION_BAR_HEIGHT = 122.0; +constexpr double ERROR_BOUND = 0.01; +int32_t g_pageId = 0; // for alloc page id. + +class MockRenderFocusAnimation : public RenderFocusAnimation {}; +class MockRenderShadow : public RenderShadow {}; +class MockRenderDragBar : public RenderDragBar {}; + +} // namespace + +CardTransitionController::CardTransitionController(const WeakPtr& context) {}; + +void CardTransitionController::RegisterTransitionListener() {}; + +RRect CardTransitionController::GetCardRect(const ComposeId& composeId) const +{ + return RRect(); +} + +RefPtr RenderFocusAnimation::Create() +{ + return AceType::MakeRefPtr(); +} + +RefPtr RenderShadow::Create() +{ + return AceType::MakeRefPtr(); +} + +RefPtr RenderDragBar::Create() +{ + return AceType::MakeRefPtr(); +} + +class RenderSemiModalTest : public testing::Test { +public: + static void SetUpTestCase() {} + static void TearDownTestCase() {} + void SetUp() {} + void TearDown() {} + + void CreateAndBuildSemiModal() + { + std::unique_ptr platformWindow = TweenTestUtils::CreatePlatformWindow(); + platformWindowRaw_ = reinterpret_cast(platformWindow.get()); + auto window = TweenTestUtils::CreateWindow(std::move(platformWindow)); + auto taskExecutor = AceType::MakeRefPtr(); + auto assetManager = Referenced::MakeRefPtr(); + auto resRegister = Referenced::MakeRefPtr(); + RefPtr frontend = Frontend::CreateDefault(); + context_ = AceType::MakeRefPtr( + std::move(window), taskExecutor, assetManager, resRegister, frontend, 0); + context_->SetTimeProvider( + [this] { return this->platformWindowRaw_->GetCurrentTimestampNano() + NANOSECOND_TO_MILLISECOND * 10; }); + context_->SetWindowModal(WindowModal::SEMI_MODAL); + + auto pageComponent = CreatePushPageWithShared(); + + context_->SetupRootElement(); + GetSemiModal(); + context_->PushPage(pageComponent); + context_->OnSystemBarHeightChanged(TEST_STATUS_BAR_HEIGHT, TEST_NAVIGATION_BAR_HEIGHT); + context_->OnSurfaceChanged(TEST_SURFACE_WIDTH, TEST_SURFACE_HEIGHT); + + platformWindowRaw_->SetNanoFrameTime(NANOSECOND_TO_MILLISECOND * frameTimeMs_); + } + + void GetSemiModal() + { + RefPtr stage = context_->GetStageElement(); + auto parent = stage->GetElementParent().Upgrade(); + semiModalElement_ = AceType::DynamicCast(parent); + while (parent && !semiModalElement_) { + parent = parent->GetElementParent().Upgrade(); + semiModalElement_ = AceType::DynamicCast(parent); + } + // semi modal element must be found. + EXPECT_TRUE(!!semiModalElement_); + } + + static RefPtr CreatePushPageWithShared() + { + g_pageId++; + // make content. + auto box = AceType::MakeRefPtr(); + box->SetWidth(TEST_SURFACE_WIDTH); + box->SetHeight(TEST_SURFACE_HEIGHT / 2.0); + + std::list> stackChildren { box }; + auto rootStackComponent = AceType::MakeRefPtr( + Alignment::TOP_LEFT, StackFit::INHERIT, Overflow::OBSERVABLE, stackChildren); + rootStackComponent->SetMainStackSize(MainStackSize::MAX); + auto composed = AceType::MakeRefPtr("semiModalTest", "Init"); + composed->SetChild(rootStackComponent); + + auto collaboration = AceType::MakeRefPtr(); + collaboration->InsertChild(0, composed); + // make page. + auto transitionComponent = AceType::MakeRefPtr(); + transitionComponent->SetSeparation(true); + transitionComponent->SetContent(collaboration); + return AceType::MakeRefPtr(g_pageId, transitionComponent); + } + +protected: + RefPtr context_; + uint32_t frameTimeMs_ = FRAME_TIME_IN_MILLISECOND; + MockPlatformWindow* platformWindowRaw_ = nullptr; + RefPtr semiModalElement_; +}; + +/** + * @tc.name: SemiModalAnimationTest001 + * @tc.desc: Test Semi Modal enter transition + * @tc.type: FUNC + * @tc.require: AR000ELMHS + * @tc.author: zhouzebin + */ +HWTEST_F(RenderSemiModalTest, SemiModalAnimationTest001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderSemiModalTest SemiModalAnimationTest001"; + /** + * @tc.steps: step1. Build a semi modal component and push. + */ + CreateAndBuildSemiModal(); + platformWindowRaw_->TriggerFrames(3); + /** + * @tc.steps: step2. wait until transition done + * @tc.expected: step2. check blank height. + */ + auto semiRender = AceType::DynamicCast(semiModalElement_->GetRenderNode()); + EXPECT_TRUE(!!semiRender); + EXPECT_NEAR(semiRender->GetBlankHeight(), 1775.71, ERROR_BOUND); +} + +/** + * @tc.name: SemiModalAnimationTest002 + * @tc.desc: Test Semi Modal full window transition + * @tc.type: FUNC + * @tc.require: AR000ELMHT + * @tc.author: zhouzebin + */ +HWTEST_F(RenderSemiModalTest, SemiModalAnimationTest002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderSemiModalTest SemiModalAnimationTest002"; + /** + * @tc.steps: step1. Build a semi modal component and push. + */ + CreateAndBuildSemiModal(); + platformWindowRaw_->TriggerFrames(3); + /** + * @tc.steps: step2. switch to full window + */ + semiModalElement_->AnimateToFullWindow(-1); + platformWindowRaw_->TriggerFrames(5); + /** + * @tc.steps: step3. wait until transition done + * @tc.expected: step3. check blank height. + */ + auto semiRender = AceType::DynamicCast(semiModalElement_->GetRenderNode()); + EXPECT_TRUE(!!semiRender); + EXPECT_EQ(semiRender->GetBlankHeight(), 0); +} + +/** + * @tc.name: SemiModalAnimationTest003 + * @tc.desc: Test Semi Modal System bar height padding + * @tc.type: FUNC + * @tc.require: AR000EMO97 + * @tc.author: zhouzebin + */ +HWTEST_F(RenderSemiModalTest, SemiModalAnimationTest003, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderSemiModalTest SemiModalAnimationTest003"; + /** + * @tc.steps: step1. Build a semi modal component and push. + */ + CreateAndBuildSemiModal(); + platformWindowRaw_->TriggerFrames(3); + semiModalElement_->AnimateToFullWindow(-1); + platformWindowRaw_->TriggerFrames(5); + auto semiRender = AceType::DynamicCast(semiModalElement_->GetRenderNode()); + EXPECT_TRUE(!!semiRender); + /** + * @tc.steps: step2. wait until transition done + * @tc.expected: step2. check status bar height. + */ + auto dragBar = AceType::DynamicCast(semiRender->GetDragBar()); + EXPECT_TRUE(!!dragBar); + EXPECT_EQ(dragBar->GetStatusBarHeight(), TEST_STATUS_BAR_HEIGHT); +} + +/** + * @tc.name: SemiModalAnimationTest004 + * @tc.desc: Test Semi Modal with drag_bar init show mode + * @tc.type: FUNC + * @tc.require: AR000F3CBH + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderSemiModalTest, SemiModalAnimationTest004, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderSemiModalTest SemiModalAnimationTest004"; + /** + * @tc.steps: step1. Build a semi modal component and push. + * @tc.expected: step1. check drag_bar show mode is HALF. + */ + CreateAndBuildSemiModal(); + auto semiRender = AceType::DynamicCast(semiModalElement_->GetRenderNode()); + EXPECT_TRUE(semiRender != nullptr); + auto dragBar = AceType::DynamicCast(semiRender->GetDragBar()); + EXPECT_TRUE(dragBar != nullptr); + EXPECT_TRUE(dragBar->GetPanelMode() == PanelMode::HALF); +} + +/** + * @tc.name: SemiModalAnimationTest005 + * @tc.desc: Test Semi Modal with drag_bar FullWindow show mode + * @tc.type: FUNC + * @tc.require: AR000F3CBI + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderSemiModalTest, SemiModalAnimationTest005, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderSemiModalTest SemiModalAnimationTest005"; + /** + * @tc.steps: step1. Build a semi modal component and push. + * @tc.expected: step1. check the semimodal render node not null. + */ + CreateAndBuildSemiModal(); + auto semiRender = AceType::DynamicCast(semiModalElement_->GetRenderNode()); + EXPECT_TRUE(semiRender != nullptr); + + /** + * @tc.steps: step2. Animate to Full window mode. + * @tc.expected: step2. Check drag_bar show mode is FULL. + */ + platformWindowRaw_->TriggerFrames(3); + semiModalElement_->AnimateToFullWindow(-1); + platformWindowRaw_->TriggerFrames(5); + auto dragBar = AceType::DynamicCast(semiRender->GetDragBar()); + EXPECT_TRUE(dragBar != nullptr); + EXPECT_TRUE(dragBar->GetPanelMode() == PanelMode::FULL); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/shadow/BUILD.gn b/frameworks/core/components/test/unittest/shadow/BUILD.gn new file mode 100644 index 00000000..f8bdf761 --- /dev/null +++ b/frameworks/core/components/test/unittest/shadow/BUILD.gn @@ -0,0 +1,57 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +if (is_standard_system) { + module_output_path = "ace_engine_standard/backenduicomponent/shadow" +} + +ohos_unittest("ShadowCreatorTest") { + module_out_path = module_output_path + + sources = [ "shadow_creator_test.cpp" ] + + configs = [ + ":config_json_creator_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "$ace_root/frameworks/core/components/test:json", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + deps += [ "$ace_root/frameworks/bridge:js_framework_ohos" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_json_creator_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":ShadowCreatorTest" ] +} diff --git a/frameworks/core/components/test/unittest/shadow/shadow_creator_test.cpp b/frameworks/core/components/test/unittest/shadow/shadow_creator_test.cpp new file mode 100644 index 00000000..abcc61e5 --- /dev/null +++ b/frameworks/core/components/test/unittest/shadow/shadow_creator_test.cpp @@ -0,0 +1,225 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/json/json_util.h" +#include "base/utils/utils.h" +#include "core/components/common/layout/constants.h" +#include "core/components/common/properties/color.h" +#include "core/components/common/properties/shadow.h" +#include "core/components/test/json/shadow_creator.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +const Color COLOR_DEFAULT = Color(0xff000000); +constexpr double BLUR_RADIUS_DEFAULT = 0.0; +const Offset OFFSET_DEFAULT = Offset(0.0, 0.0); +const Color COLOR_VALUE = Color(0xffff0000); +constexpr double BLUR_RADIUS_VALUE = 10.0; +constexpr double SPREAD_RADIUS_VALUE = 20.0; +constexpr float ELEVATION = 30.0f; +const Offset OFFSET_VALUE = Offset(10.0, 10.0); + +} // namespace + +class ShadowCreatorTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); + Shadow CreateFromDsl(const std::string content) const; +}; + +void ShadowCreatorTest::SetUpTestCase() {} +void ShadowCreatorTest::TearDownTestCase() {} +void ShadowCreatorTest::SetUp() {} +void ShadowCreatorTest::TearDown() {} + +Shadow ShadowCreatorTest::CreateFromDsl(const std::string content) const +{ + const auto dslBuf = reinterpret_cast(content.c_str()); + size_t dslLen = content.length(); + std::string jsonStr(reinterpret_cast(dslBuf), dslLen); + std::unique_ptr shadowJson = JsonUtil::ParseJsonString(jsonStr); + return ShadowCreator::CreateFromJson(*shadowJson); +} + +/** + * @tc.name: ShadowCreator001 + * @tc.desc: Verify ShadowCreator can create a shadow with value. + * @tc.type: FUNC + * @tc.require: AR000DAQU7 + * @tc.author: chenlien + */ +HWTEST_F(ShadowCreatorTest, ShadowCreator001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of shadow with all properties. + */ + const std::string content = "" + "{ " + " \"color\": { " + " \"className\": \"Color\", " + " \"alpha\": 255, " + " \"red\": 255, " + " \"green\": 0, " + " \"blue\": 0 " + " }, " + " \"blurRadius\": 10, " + " \"offset\":{ " + " \"dx\":10, " + " \"dy\":10 " + " } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get shadow. + * @tc.expected: step2. shadow properties are set correctly. + */ + Shadow shadow = CreateFromDsl(content); + ASSERT_TRUE(shadow.GetColor() == COLOR_VALUE); + ASSERT_TRUE(shadow.GetOffset() == OFFSET_VALUE); + ASSERT_TRUE(shadow.GetBlurRadius() == BLUR_RADIUS_VALUE); +} + +/** + * @tc.name: ShadowCreator002 + * @tc.desc: Verify ShadowCreator can create a shadow with value. + * @tc.type: FUNC + * @tc.require: AR000DAQU7 + * @tc.author: chenlien + */ +HWTEST_F(ShadowCreatorTest, ShadowCreator002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of shadow with none properties. + */ + const std::string content = "" + "{}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get shadow. + * @tc.expected: step2. shadow properties are set as default. + */ + Shadow shadow = CreateFromDsl(content); + ASSERT_TRUE(shadow.GetColor() == COLOR_DEFAULT); + ASSERT_TRUE(shadow.GetOffset() == OFFSET_DEFAULT); + ASSERT_TRUE(shadow.GetBlurRadius() == BLUR_RADIUS_DEFAULT); +} + +/** + * @tc.name: ShadowCreator003 + * @tc.desc: Verify ShadowCreator can create a shadow with spreadRadius. + * @tc.type: FUNC + * @tc.require: AR000DAQU7 + * @tc.author: jiangdayuan + */ +HWTEST_F(ShadowCreatorTest, ShadowCreator003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of shadow with correct properties. + */ + const std::string content = "" + "{" + " \"blurRadius\": 10, " + " \"spreadRadius\": 20, " + " \"offset\":{ " + " \"dx\":10, " + " \"dy\":10 " + " } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get shadow. + * @tc.expected: step2. shadow properties are set correctly. + */ + Shadow shadow = CreateFromDsl(content); + ASSERT_TRUE(shadow.GetBlurRadius() == BLUR_RADIUS_VALUE); + ASSERT_TRUE(shadow.GetOffset() == OFFSET_VALUE); + ASSERT_TRUE(shadow.GetSpreadRadius() == SPREAD_RADIUS_VALUE); + ASSERT_FALSE(shadow.GetHardwareAcceleration()); +} + +/** + * @tc.name: ShadowCreator004 + * @tc.desc: Verify ShadowCreator can create a shadow with elevation. + * @tc.type: FUNC + * @tc.require: AR000DAQU7 + * @tc.author: jiangdayuan + */ +HWTEST_F(ShadowCreatorTest, ShadowCreator004, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of shadow with elevation properties. + */ + const std::string content = "" + "{" + " \"elevation\": 30, " + " \"offset\":{ " + " \"dx\":10, " + " \"dy\":10 " + " } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get shadow. + * @tc.expected: step2. shadow properties are set correctly. + */ + Shadow shadow = CreateFromDsl(content); + ASSERT_TRUE(shadow.GetElevation() == ELEVATION); + ASSERT_TRUE(shadow.GetOffset() == OFFSET_VALUE); + ASSERT_TRUE(shadow.IsValid()); + // set elevation for hardrware acceleration. + ASSERT_TRUE(shadow.GetHardwareAcceleration()); +} + +/** + * @tc.name: ShadowCreator005 + * @tc.desc: Verify error shadow properties. + * @tc.type: FUNC + * @tc.require: AR000DAQU7 + * @tc.author: jiangdayuan + */ +HWTEST_F(ShadowCreatorTest, ShadowCreator005, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of shadow with error properties. + */ + const std::string content = "" + "{" + " \"elevation\": -10, " + " \"blurRadius\": -10, " + " \"spreadRadius\": 20 " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get shadow. + * @tc.expected: step2. shadow properties should be set default value. + */ + Shadow shadow = CreateFromDsl(content); + ASSERT_TRUE(NearZero(shadow.GetElevation())); + ASSERT_TRUE(NearEqual(shadow.GetSpreadRadius(), SPREAD_RADIUS_VALUE)); + ASSERT_TRUE(NearZero(shadow.GetBlurRadius())); + ASSERT_TRUE(shadow.GetColor() == Color::BLACK); + ASSERT_TRUE(shadow.IsValid()); + ASSERT_FALSE(shadow.GetHardwareAcceleration()); +} +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/slider/BUILD.gn b/frameworks/core/components/test/unittest/slider/BUILD.gn new file mode 100644 index 00000000..187fbf0a --- /dev/null +++ b/frameworks/core/components/test/unittest/slider/BUILD.gn @@ -0,0 +1,91 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +if (is_standard_system) { + module_output_path = "ace_engine_standard/backenduicomponent/slider" +} + +ohos_unittest("SliderCreatorTest") { + module_out_path = module_output_path + + sources = [ "slider_creator_test.cpp" ] + + configs = [ + ":config_json_creator_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "$ace_root/frameworks/core/components/test:json", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + configs += [ "//third_party/curl:curl_config" ] + deps += [ + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/curl:curl", + ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_json_creator_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +ohos_unittest("RenderSliderTest") { + module_out_path = module_output_path + + sources = [ + "$ace_root/frameworks/core/components/test/json/json_frontend.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/mock_render_common.cpp", + "render_slider_test.cpp", + ] + + configs = [ "$ace_root:ace_test_config" ] + + deps = [ + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "//third_party/googletest:gtest_main", + ] + + if (is_standard_system) { + configs += [ "//third_party/curl:curl_config" ] + deps += [ + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/curl:curl", + ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +group("unittest") { + testonly = true + + deps = [ + ":RenderSliderTest", + ":SliderCreatorTest", + ] +} diff --git a/frameworks/core/components/test/unittest/slider/render_slider_test.cpp b/frameworks/core/components/test/unittest/slider/render_slider_test.cpp new file mode 100644 index 00000000..fed50d5f --- /dev/null +++ b/frameworks/core/components/test/unittest/slider/render_slider_test.cpp @@ -0,0 +1,235 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/i18n/localization.h" +#include "core/components/slider/block_component.h" +#include "core/components/slider/render_block.h" +#include "core/components/slider/render_slider.h" +#include "core/components/slider/slider_component.h" +#include "core/components/test/unittest/mock/mock_render_common.h" +#include "core/components/tip/render_tip.h" +#include "core/components/tip/tip_component.h" +#include "core/components/track/render_track.h" +#include "core/components/track/track_component.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { + +class RenderSliderTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); +}; + +void RenderSliderTest::SetUpTestCase() {} +void RenderSliderTest::TearDownTestCase() {} +void RenderSliderTest::TearDown() {} +void RenderSliderTest::SetUp() +{ + Localization::GetInstance()->SetLocale("zh", "CN", "", "", ""); +} + +/** + * @tc.name: RenderSliderTest001 + * @tc.desc: Verify PerformLayout can calculate slider properties. + * @tc.type: FUNC + * @tc.require: AR000F3L3A + * @tc.author: jinwuwen + */ +HWTEST_F(RenderSliderTest, RenderSliderTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the slider component. + */ + RefPtr slider = AceType::MakeRefPtr(0.0, 1.0, 0.0, 100.0); + slider->SetShowTips(true); + slider->SetShowSteps(true); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties are calculated correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr node = RenderSlider::Create(); + node->Attach(mockContext); + node->Update(slider); + LayoutParam layoutParam; + layoutParam.SetMaxSize(Size(500.0, 200.0)); + node->SetLayoutParam(layoutParam); + EXPECT_TRUE(node->NeedLayout()); + EXPECT_TRUE(node->GetChildren().size() == 3); +} + +/** + * @tc.name: RenderSliderTest002 + * @tc.desc: Verify PerformLayout can calculate slider properties. + * @tc.type: FUNC + * @tc.require: AR000F3L3B + * @tc.author: jinwuwen + */ +HWTEST_F(RenderSliderTest, RenderSliderTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the slider component. + */ + RefPtr slider = AceType::MakeRefPtr(0.0, 1.0, 0.0, 100.0); + slider->SetStepValue(10.0); + slider->SetShowTips(true); + slider->SetShowSteps(true); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties are calculated correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr node = RenderSlider::Create(); + node->Attach(mockContext); + node->Update(slider); + LayoutParam layoutParam; + layoutParam.SetMaxSize(Size(500.0, 200.0)); + node->SetLayoutParam(layoutParam); + node->PerformLayout(); + EXPECT_TRUE(node->GetChildren().size() == 3); + auto renderSlider = AceType::DynamicCast(node); + ASSERT_TRUE(renderSlider); + renderSlider->SyncValueToComponent(3.0); + EXPECT_EQ(slider->GetValue(), 3.0); +} + +/** + * @tc.name: RenderSliderTest003 + * @tc.desc: Verify PerformLayout can calculate slider properties. + * @tc.type: FUNC + * @tc.require: AR000F3L3B + * @tc.author: jinwuwen + */ +HWTEST_F(RenderSliderTest, RenderSliderTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the slider component. + */ + RefPtr slider = AceType::MakeRefPtr(0.0, 1.0, 0.0, 100.0); + slider->SetStepValue(10.0); + slider->SetShowTips(true); + slider->SetShowSteps(true); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties are calculated correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr node = RenderSlider::Create(); + node->Attach(mockContext); + node->Update(slider); + LayoutParam layoutParam; + layoutParam.SetMaxSize(Size(500.0, 200.0)); + node->SetLayoutParam(layoutParam); + node->PerformLayout(); + + auto renderSlider = AceType::DynamicCast(node); + ASSERT_TRUE(renderSlider); + renderSlider->SetTotalRatio(0.3); + for (auto item : renderSlider->GetChildren()) { + if (AceType::DynamicCast(item)) { + if (!item->GetChildren().empty()) { + auto text = AceType::DynamicCast(item->GetChildren().front()); + if (text) { + EXPECT_EQ(text->GetTextData(), "30%"); + } + } + break; + } + } +} + +/** + * @tc.name: RenderSliderTest004 + * @tc.desc: Verify PerformLayout can calculate slider properties. + * @tc.type: FUNC + * @tc.require: AR000F3CBT + * @tc.author: jinwuwen + */ +HWTEST_F(RenderSliderTest, RenderSliderTest004, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the slider component. + */ + RefPtr slider = AceType::MakeRefPtr(0.0, 1.0, 0.0, 100.0); + slider->SetStepValue(10.0); + slider->SetShowTips(true); + slider->SetShowSteps(true); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties are calculated correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr node = RenderSlider::Create(); + node->Attach(mockContext); + node->Update(slider); + LayoutParam layoutParam; + layoutParam.SetMaxSize(Size(500.0, 200.0)); + node->SetLayoutParam(layoutParam); + node->PerformLayout(); + + auto renderSlider = AceType::DynamicCast(node); + ASSERT_TRUE(renderSlider); + EXPECT_FALSE(renderSlider->NeedSmoothMoving()); + slider->SetSliderMode(SliderMode::INSET); + renderSlider->Update(slider); + EXPECT_TRUE(renderSlider->NeedSmoothMoving()); +} + +/** + * @tc.name: RenderSliderTest005 + * @tc.desc: Verify PerformLayout can calculate slider properties. + * @tc.type: FUNC + * @tc.require: AR000F3CBU + * @tc.author: jinwuwen + */ +HWTEST_F(RenderSliderTest, RenderSliderTest005, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the slider component. + */ + RefPtr slider = AceType::MakeRefPtr(0.0, 1.0, 0.0, 100.0); + slider->SetMinValue(5.0); + slider->SetMaxValue(20.0); + slider->SetCurrentValue(30.0); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties are calculated correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr node = RenderSlider::Create(); + node->Attach(mockContext); + node->Update(slider); + auto renderSlider = AceType::DynamicCast(node); + ASSERT_TRUE(renderSlider); + EXPECT_EQ(renderSlider->GetValue(), 20.0); + + slider->SetCurrentValue(3.0); + node->Update(slider); + EXPECT_EQ(renderSlider->GetValue(), 5.0); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/slider/slider_creator_test.cpp b/frameworks/core/components/test/unittest/slider/slider_creator_test.cpp new file mode 100644 index 00000000..00a98d5c --- /dev/null +++ b/frameworks/core/components/test/unittest/slider/slider_creator_test.cpp @@ -0,0 +1,636 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include "gtest/gtest.h" + +#include "base/log/log.h" +#include "base/utils/utils.h" +#include "core/components/common/properties/color.h" +#include "core/components/slider/block_component.h" +#include "core/components/slider/slider_theme.h" +#include "core/components/test/json/slider_creator.h" +#include "core/components/theme/theme_manager.h" +#include "core/components/track/track_component.h" +#include "core/pipeline/base/component.h" +#include "core/pipeline/base/constants.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +constexpr double JSON_VALUE = 0.0; +constexpr double JSON_MIN_VALUE = 0.0; +constexpr double JSON_MAX_VALUE = 10.0; +constexpr double JSON_STEP = 1.0; +// This color value is easy to compare +const Color BAR_SELECTED_COLOR = Color(123456789); +const Color BAR_BACKGROUND_COLOR = Color(987654321); +const Color BLOCK_COLOR = Color(567891234); +const std::string JSON_ON_MOVE_ID = "123456"; + +} // namespace + +class SliderCreatorTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; + +protected: + RefPtr CreateComponent(const std::string& testJson); + void CompareAllProperty(const RefPtr& slider); + void CompareAllDefault(const RefPtr& slider); + void CompareAllEssential(const RefPtr& slider); +}; + +void SliderCreatorTest::SetUpTestCase() {} + +void SliderCreatorTest::TearDownTestCase() {} + +void SliderCreatorTest::SetUp() {} + +void SliderCreatorTest::TearDown() {} + +RefPtr SliderCreatorTest::CreateComponent(const std::string& testJson) +{ + const auto dslBuf = reinterpret_cast(testJson.c_str()); + size_t dslLen = testJson.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + if (!component) { + return nullptr; + } + return AceType::DynamicCast(component); +} + +void SliderCreatorTest::CompareAllProperty(const RefPtr& slider) +{ + CompareAllEssential(slider); + + RefPtr linearBar = slider->GetTrack(); + Color barBackgroundColor = linearBar->GetBackgroundColor(); + EXPECT_TRUE(barBackgroundColor == BAR_BACKGROUND_COLOR); + Color selectedColor = linearBar->GetSelectColor(); + EXPECT_TRUE(selectedColor == BAR_SELECTED_COLOR); + + RefPtr block = slider->GetBlock(); + Color blockColor = block->GetBlockColor(); + EXPECT_TRUE(blockColor == BLOCK_COLOR); + const auto& onMoveEndId = slider->GetOnMoveEndEventId(); + EXPECT_TRUE(onMoveEndId == JSON_ON_MOVE_ID); +} + +void SliderCreatorTest::CompareAllDefault(const RefPtr& slider) +{ + CompareAllEssential(slider); + RefPtr linearBar = slider->GetTrack(); + auto themeManager = AceType::MakeRefPtr(); + auto theme = themeManager->GetTheme(); + ASSERT_TRUE(theme); + Color barBackgroundColor = linearBar->GetBackgroundColor(); + Color selectedColor = linearBar->GetSelectColor(); + EXPECT_TRUE(selectedColor == theme->GetTrackSelectedColor()); + EXPECT_TRUE(barBackgroundColor == theme->GetTrackBgColor()); + RefPtr block = slider->GetBlock(); + Color blockColor = block->GetBlockColor(); + EXPECT_TRUE(blockColor == theme->GetBlockColor()); + const auto& onMoveEndId = slider->GetOnMoveEndEventId(); + EXPECT_TRUE(onMoveEndId == ""); +} + +void SliderCreatorTest::CompareAllEssential(const RefPtr& slider) +{ + double value = slider->GetValue(); + EXPECT_TRUE(NearEqual(value, JSON_VALUE)); + double minValue = slider->GetMinValue(); + EXPECT_TRUE(NearEqual(minValue, JSON_MIN_VALUE)); + double maxValue = slider->GetMaxValue(); + EXPECT_TRUE(NearEqual(maxValue, JSON_MAX_VALUE)); + double step = slider->GetStep(); + EXPECT_TRUE(NearEqual(step, JSON_STEP)); +} + +/** + * @tc.name: SliderComponentCreator001 + * @tc.desc: Test all the property created properly + * @tc.type: FUNC + * @tc.require: AR000DAQV7 AR000DAQV8 AR000DAQV9 + * @tc.author: YaoYuchi + */ +HWTEST_F(SliderCreatorTest, SliderComponentCreator001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string with all property. + */ + std::string testJson = "{ " + " \"className\": \"Slider\", " + " \"value\": 0.0, " + " \"min\": 0.0, " + " \"max\": 10.0, " + " \"step\": 1.0, " + " \"onMoveEndId\": \"123456\", " + " \"barSelectedColor\": { " + " \"className\": \"Color\", " + " \"value\": 123456789 " + " }, " + " \"barBackgroundColor\": { " + " \"className\": \"Color\", " + " \"value\": 987654321 " + " }, " + " \"blockColor\": { " + " \"className\": \"Color\", " + " \"value\": 567891234 " + " } " + "}"; + /** + * @tc.steps: step2. check all property matched + * @tc.expected: step2. all property match + */ + RefPtr slider = CreateComponent(testJson); + ASSERT_TRUE(slider != nullptr); + CompareAllProperty(slider); +} + +/** + * @tc.name: SliderComponentCreator002 + * @tc.desc: Test the SliderComponent initialized by default value + * @tc.type: FUNC + * @tc.require: AR000DAQV7 AR000DAQV8 AR000DAQV9 + * @tc.author: YaoYuchi + */ +HWTEST_F(SliderCreatorTest, SliderComponentCreator002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string with value only. + */ + std::string testJson = "{ " + " \"className\": \"Slider\", " + " \"value\": 0.0, " + " \"min\": 0.0, " + " \"max\": 10.0, " + " \"step\": 1 " + "}"; + /** + * @tc.steps: step2. check all property matched + * @tc.expected: step2. all property match + */ + RefPtr slider = CreateComponent(testJson); + ASSERT_TRUE(slider != nullptr); + CompareAllDefault(slider); +} + +/** + * @tc.name: SliderComponentCreator003 + * @tc.desc: Test value validation. If the value is invalid, set a default value + * @tc.type: FUNC + * @tc.require: AR000DAQVA + * @tc.author: YaoYuchi + */ +HWTEST_F(SliderCreatorTest, SliderComponentCreator003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string with value, minValue and maxValue. And choose min > value + */ + std::string testJson = "{ " + " \"className\": \"Slider\", " + " \"value\": 0.0, " + " \"min\": 1.0, " + " \"max\": 3.0, " + " \"step\": 0.5 " + "}"; + /** + * @tc.steps: step2. check component is null or not + * @tc.expected: step2. component is nullptr + */ + RefPtr slider = CreateComponent(testJson); + EXPECT_TRUE(slider == nullptr); + /** + * @tc.steps: step3. create a new json string with value, minValue and maxValue. And choose max < value + */ + testJson = "{ " + " \"className\": \"Slider\", " + " \"value\": 4.0, " + " \"min\": 1.0, " + " \"max\": 3.0, " + " \"step\": 0.5 " + "}"; + /** + * @tc.steps: step4. check component is null or not + * @tc.expected: step4. component is nullptr + */ + slider = CreateComponent(testJson); + EXPECT_TRUE(slider == nullptr); +} + +/** + * @tc.name: SliderComponentCreator004 + * @tc.desc: Test max and min validation. + * @tc.type: FUNC + * @tc.require: AR000DAQVA + * @tc.author: YaoYuchi + */ +HWTEST_F(SliderCreatorTest, SliderComponentCreator004, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string with value, minValue and maxValue. And choose min >= max + */ + std::string testJson = "{ " + " \"className\": \"Slider\", " + " \"value\": 0.0, " + " \"min\": 0.0, " + " \"max\": 0.0, " + " \"step\": 0.0 " + "}"; + /** + * @tc.steps: step2. check component is null or not + * @tc.expected: step2. component is nullptr + */ + RefPtr slider = CreateComponent(testJson); + EXPECT_TRUE(slider == nullptr); +} + +/** + * @tc.name: SliderComponentCreator005 + * @tc.desc: Test the step validation or not + * @tc.type: FUNC + * @tc.require: AR000DAQVA + * @tc.author: YaoYuchi + */ +HWTEST_F(SliderCreatorTest, SliderComponentCreator005, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string with value, minValue, maxValue and step. And choose step > max - min + */ + std::string testJson = "{ " + " \"className\": \"Slider\", " + " \"value\": 0.0, " + " \"min\": 0.0, " + " \"max\": 1.0, " + " \"step\": 3.0 " + "}"; + /** + * @tc.steps: step2. check component nullptr or not + * @tc.expected: step2. component is nullptr + */ + RefPtr slider = CreateComponent(testJson); + EXPECT_TRUE(slider == nullptr); +} + +/** + * @tc.name: SliderComponentCreator006 + * @tc.desc: check step: 0, component is created successfully + * @tc.type: FUNC + * @tc.require: AR000DAQVA + * @tc.author: YaoYuchi + */ +HWTEST_F(SliderCreatorTest, SliderComponentCreator006, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string with value, minValue, maxValue and step. And choose step > max - min + */ + std::string testJson = "{ " + " \"className\": \"Slider\", " + " \"value\": 0.0, " + " \"min\": 0.0, " + " \"max\": 10.0, " + " \"step\": 0.0 " + "}"; + /** + * @tc.steps: step2. check component nullptr or not + * @tc.expected: step2. component is not nullptr + */ + RefPtr slider = CreateComponent(testJson); + EXPECT_TRUE(slider != nullptr); + double value = slider->GetValue(); + EXPECT_TRUE(NearEqual(value, JSON_VALUE)); + double minValue = slider->GetMinValue(); + EXPECT_TRUE(NearEqual(minValue, JSON_MIN_VALUE)); + double maxValue = slider->GetMaxValue(); + EXPECT_TRUE(NearEqual(maxValue, JSON_MAX_VALUE)); + double step = slider->GetStep(); + EXPECT_TRUE(NearEqual(step, 0.0)); +} + +/** + * @tc.name: SliderComponentCreator007 + * @tc.desc: check step: -1, component is created - failed + * @tc.type: FUNC + * @tc.require: AR000DAQVA + * @tc.author: YaoYuchi + */ +HWTEST_F(SliderCreatorTest, SliderComponentCreator007, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string with value, minValue, maxValue and step. step: -1 + */ + std::string testJson = "{ " + " \"className\": \"Slider\", " + " \"value\": 0.0, " + " \"min\": 0.0, " + " \"max\": 10.0, " + " \"step\": -1.0 " + "}"; + /** + * @tc.steps: step2. check component nullptr or not + * @tc.expected: step2. component is nullptr + */ + RefPtr slider = CreateComponent(testJson); + EXPECT_TRUE(slider == nullptr); +} + +/** + * @tc.name: SliderComponentCreator008 + * @tc.desc: missing essential param [value] + * @tc.type: FUNC + * @tc.require: AR000DAQVA + * @tc.author: YaoYuchi + */ +HWTEST_F(SliderCreatorTest, SliderComponentCreator008, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string with minValue, maxValue and step. + */ + std::string testJson = "{ " + " \"className\": \"Slider\", " + " \"min\": 0.0, " + " \"max\": 10.0, " + " \"step\": -1.0 " + "}"; + /** + * @tc.steps: step2. check component nullptr or not + * @tc.expected: step2. component is nullptr + */ + RefPtr slider = CreateComponent(testJson); + EXPECT_TRUE(slider == nullptr); +} + +/** + * @tc.name: SliderComponentCreator009 + * @tc.desc: missing essential param [max] + * @tc.type: FUNC + * @tc.require: AR000DAQVA + * @tc.author: YaoYuchi + */ +HWTEST_F(SliderCreatorTest, SliderComponentCreator009, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string with value, minValue, and step. + */ + std::string testJson = "{ " + " \"className\": \"Slider\", " + " \"min\": 0.0, " + " \"value\": 0.0, " + " \"step\": -1.0 " + "}"; + /** + * @tc.steps: step2. check component nullptr or not + * @tc.expected: step2. component is nullptr + */ + RefPtr slider = CreateComponent(testJson); + EXPECT_TRUE(slider == nullptr); +} + +/** + * @tc.name: SliderComponentCreator010 + * @tc.desc: missing essential param [step] + * @tc.type: FUNC + * @tc.require: AR000DAQVA + * @tc.author: YaoYuchi + */ +HWTEST_F(SliderCreatorTest, SliderComponentCreator010, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string with value, minValue, maxValue. + */ + std::string testJson = "{ " + " \"className\": \"Slider\", " + " \"min\": 0.0, " + " \"value\": 0.0, " + " \"max\": 10.0 " + "}"; + /** + * @tc.steps: step2. check component nullptr or not + * @tc.expected: step2. component is nullptr + */ + RefPtr slider = CreateComponent(testJson); + EXPECT_TRUE(slider == nullptr); +} + +/** + * @tc.name: SliderComponentCreator011 + * @tc.desc: missing essential param [min] + * @tc.type: FUNC + * @tc.require: AR000DAQVA + * @tc.author: YaoYuchi + */ +HWTEST_F(SliderCreatorTest, SliderComponentCreator011, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string with value, step, maxValue. + */ + std::string testJson = "{ " + " \"className\": \"Slider\", " + " \"step\": 0.0, " + " \"value\": 0.0, " + " \"max\": 10.0 " + "}"; + /** + * @tc.steps: step2. check component nullptr or not + * @tc.expected: step2. component is nullptr + */ + RefPtr slider = CreateComponent(testJson); + EXPECT_TRUE(slider == nullptr); +} + +/** + * @tc.name: SliderComponentCreator012 + * @tc.desc: type error essential param [value] + * @tc.type: FUNC + * @tc.require: AR000DAQVA + * @tc.author: YaoYuchi + */ +HWTEST_F(SliderCreatorTest, SliderComponentCreator012, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string with step, min, max. value type is string + */ + std::string testJson = "{ " + " \"className\": \"Slider\", " + " \"step\": 0.0, " + " \"min\": 0.0, " + " \"max\": 10.0, " + " \"value\": \"5.0\" " + "}"; + /** + * @tc.steps: step2. check component nullptr or not + * @tc.expected: step2. component is nullptr + */ + RefPtr slider = CreateComponent(testJson); + EXPECT_TRUE(slider == nullptr); +} + +/** + * @tc.name: SliderComponentCreator013 + * @tc.desc: type error essential param [max] + * @tc.type: FUNC + * @tc.require: AR000DAQVA + * @tc.author: YaoYuchi + */ +HWTEST_F(SliderCreatorTest, SliderComponentCreator013, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string with step, min, value. max type is string + */ + std::string testJson = "{ " + " \"className\": \"Slider\", " + " \"step\": 0.0, " + " \"min\": 0.0, " + " \"value\": 3.0, " + " \"max\": \"5.0\" " + "}"; + /** + * @tc.steps: step2. check component nullptr or not + * @tc.expected: step2. component is nullptr + */ + RefPtr slider = CreateComponent(testJson); + EXPECT_TRUE(slider == nullptr); +} + +/** + * @tc.name: SliderComponentCreator014 + * @tc.desc: type error essential param [min] + * @tc.type: FUNC + * @tc.require: AR000DAQVA + * @tc.author: YaoYuchi + */ +HWTEST_F(SliderCreatorTest, SliderComponentCreator014, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string with step, max, value. min type is string + */ + std::string testJson = "{ " + " \"className\": \"Slider\", " + " \"step\": 0.0, " + " \"max\": 10.0, " + " \"value\": 3.0, " + " \"min\": \"0.0\" " + "}"; + /** + * @tc.steps: step2. check component nullptr or not + * @tc.expected: step2. component is nullptr + */ + RefPtr slider = CreateComponent(testJson); + EXPECT_TRUE(slider == nullptr); +} + +/** + * @tc.name: SliderComponentCreator015 + * @tc.desc: type error essential param [step] + * @tc.type: FUNC + * @tc.require: AR000DAQVA + * @tc.author: YaoYuchi + */ +HWTEST_F(SliderCreatorTest, SliderComponentCreator015, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string with min, max, value. step type is string + */ + std::string testJson = "{ " + " \"className\": \"Slider\", " + " \"min\": 0.0, " + " \"max\": 10.0, " + " \"value\": 3.0, " + " \"step\": \"1.0\" " + "}"; + /** + * @tc.steps: step2. check component nullptr or not + * @tc.expected: step2. component is nullptr + */ + RefPtr slider = CreateComponent(testJson); + EXPECT_TRUE(slider == nullptr); +} + +/** + * @tc.name: SliderComponentCreator016 + * @tc.desc: type error: all non-essential param + * @tc.type: FUNC + * @tc.require: AR000DAQVA + * @tc.author: YaoYuchi + */ +HWTEST_F(SliderCreatorTest, SliderComponentCreator016, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string with min, max, value, step. Other param is type error + */ + std::string testJson = "{ " + " \"className\": \"Slider\", " + " \"value\": 0.0, " + " \"min\": 0.0, " + " \"max\": 10.0, " + " \"step\": 1.0, " + " \"onMoveEndId\": 123456, " + " \"barSelectedColor\": 123456, " + " \"barBackgroundColor\": 654321, " + " \"blockColor\": 456123 " + "}"; + /** + * @tc.steps: step2. check component nullptr or not + * @tc.expected: step2. component is nullptr + */ + RefPtr slider = CreateComponent(testJson); + EXPECT_TRUE(slider != nullptr); + CompareAllDefault(slider); +} + +/** + * @tc.name: SliderComponentCreator017 + * @tc.desc: when value, min, max are negative value, test creator performance + * @tc.type: FUNC + * @tc.require: AR000DAQVA + * @tc.author: YaoYuchi + */ +HWTEST_F(SliderCreatorTest, SliderComponentCreator017, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string with min, max, value, step. + */ + std::string testJson = "{ " + " \"className\": \"Slider\", " + " \"value\": -1.0, " + " \"min\": -10, " + " \"max\": -1, " + " \"step\": 1.0 " + "}"; + /** + * @tc.steps: step2. check component nullptr or not + * @tc.expected: step2. component is not nullptr + */ + RefPtr slider = CreateComponent(testJson); + EXPECT_TRUE(slider != nullptr); + double value = slider->GetValue(); + EXPECT_TRUE(NearEqual(value, -1.0)); + double minValue = slider->GetMinValue(); + EXPECT_TRUE(NearEqual(minValue, -10)); + double maxValue = slider->GetMaxValue(); + EXPECT_TRUE(NearEqual(maxValue, -1)); + double step = slider->GetStep(); + EXPECT_TRUE(NearEqual(step, 1.0)); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/stack/BUILD.gn b/frameworks/core/components/test/unittest/stack/BUILD.gn new file mode 100644 index 00000000..083b0e57 --- /dev/null +++ b/frameworks/core/components/test/unittest/stack/BUILD.gn @@ -0,0 +1,107 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +if (is_standard_system) { + module_output_path = "ace_engine_standard/backenduicomponent/stack" +} + +ohos_unittest("StackCreatorTest") { + module_out_path = module_output_path + + sources = [ + "positioned_creator_test.cpp", + "stack_creator_test.cpp", + ] + + configs = [ + ":config_json_creator_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "$ace_root/frameworks/core/components/test:json", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + deps += [ "$ace_root/frameworks/bridge:js_framework_ohos" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_json_creator_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +ohos_unittest("RenderStackTest") { + module_out_path = module_output_path + + sources = [ + "$ace_root/frameworks/core/components/test/json/json_frontend.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/mock_render_common.cpp", + "../flex/flex_test_utils.cpp", + "render_positioned_test.cpp", + "render_stack_test.cpp", + "stack_test_utils.cpp", + ] + + configs = [ + ":config_render_flex_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + configs += [ "//third_party/curl:curl_config" ] + deps += [ + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/curl:curl", + ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_render_flex_test") { + visibility = [ ":*" ] + include_dirs = [ + "//utils/native/base/include", + "$ace_root", + ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ + ":RenderStackTest", + ":StackCreatorTest", + ] +} diff --git a/frameworks/core/components/test/unittest/stack/positioned_creator_test.cpp b/frameworks/core/components/test/unittest/stack/positioned_creator_test.cpp new file mode 100644 index 00000000..c952ddf6 --- /dev/null +++ b/frameworks/core/components/test/unittest/stack/positioned_creator_test.cpp @@ -0,0 +1,326 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/log/log.h" +#include "base/utils/utils.h" +#include "core/components/positioned/positioned_component.h" +#include "core/components/test/json/positioned_creator.h" +#include "core/components/text/text_component.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +constexpr double TEST_TOP = 10.0; +constexpr double TEST_BOTTOM = 10.0; +constexpr double TEST_LEFT = 10.0; +constexpr double TEST_RIGHT = 10.0; +constexpr double TEST_WIDTH = 10.0; +constexpr double TEST_HEIGHT = 10.0; +const std::string TEST_TEXT_VALUE = "Hi Ace"; + +} // namespace + +class PositionedCreatorTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); + +protected: + RefPtr CreateComponent(const std::string& testJson); + void CheckItemProperties(const RefPtr& positioned, bool isDefault); +}; + +void PositionedCreatorTest::SetUpTestCase() +{ + GTEST_LOG_(INFO) << "PositionedCreatorTest SetUpTestCase"; +} + +void PositionedCreatorTest::TearDownTestCase() +{ + GTEST_LOG_(INFO) << "PositionedCreatorTest TearDownTestCase"; +} + +void PositionedCreatorTest::SetUp() {} + +void PositionedCreatorTest::TearDown() {} + +RefPtr PositionedCreatorTest::CreateComponent(const std::string& testJson) +{ + const auto dslBuf = reinterpret_cast(testJson.c_str()); + size_t dslLen = testJson.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + return component; +} + +void PositionedCreatorTest::CheckItemProperties(const RefPtr& positioned, bool isDefault) +{ + double bottom = positioned->GetBottom().Value(); + double top = positioned->GetTop().Value(); + double left = positioned->GetLeft().Value(); + double right = positioned->GetRight().Value(); + double width = positioned->GetWidth(); + double height = positioned->GetHeight(); + if (isDefault) { + EXPECT_TRUE(NearEqual(top, 0)); + EXPECT_TRUE(NearEqual(bottom, 0)); + EXPECT_TRUE(NearEqual(left, 0)); + EXPECT_TRUE(NearEqual(right, 0)); + EXPECT_TRUE(NearEqual(width, 0)); + EXPECT_TRUE(NearEqual(height, 0)); + } else { + EXPECT_TRUE(NearEqual(top, TEST_TOP)); + EXPECT_TRUE(NearEqual(bottom, TEST_BOTTOM)); + EXPECT_TRUE(NearEqual(left, TEST_LEFT)); + EXPECT_TRUE(NearEqual(right, TEST_RIGHT)); + EXPECT_TRUE(NearEqual(width, TEST_WIDTH)); + EXPECT_TRUE(NearEqual(height, TEST_HEIGHT)); + } + RefPtr child = positioned->GetChild(); + ASSERT_TRUE(child != nullptr); + RefPtr text = AceType::DynamicCast(child); + ASSERT_TRUE(text != nullptr); + EXPECT_TRUE(text->GetData() == TEST_TEXT_VALUE); +} + +/** + * @tc.name: PositionedProperties001 + * @tc.desc: Check positioned component with no properties can be created with default properties. + * @tc.type: FUNC + * @tc.require: AR000DAR27 + * @tc.author: yangfan + */ +HWTEST_F(PositionedCreatorTest, PositionedProperties001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string where positioned has no properties. + */ + std::string testJson = "" + "{ " + " \"className\": \"Positioned\", " + " \"child\": { " + " \"className\":\"Text\"," + " \"value\":\"Hi Ace\" " + " } " + "}"; + /** + * @tc.steps: step2. get positioned component. + * @tc.expected: step2. properties are set as default. + */ + RefPtr component = CreateComponent(testJson); + ASSERT_TRUE(component != nullptr); + RefPtr positioned = AceType::DynamicCast(component); + ASSERT_TRUE(positioned != nullptr); + CheckItemProperties(positioned, true); +} + +/** + * @tc.name: PositionedProperties002 + * @tc.desc: Check positioned component with invalid properties can be created with default properties. + * @tc.type: FUNC + * @tc.require: AR000DAR27 + * @tc.author: yangfan + */ +HWTEST_F(PositionedCreatorTest, PositionedProperties002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of flex item with invalid properties. + */ + std::string testJson = "" + "{ " + " \"className\": \"Positioned\", " + " \"top\": \"-1\", " + " \"bottom\": \"-1\", " + " \"left\": \"-0.5\", " + " \"right\": \"-1\", " + " \"width\": \"-1\", " + " \"height\": \"-0.5\", " + " \"child\": { " + " \"className\":\"Text\"," + " \"value\":\"Hi Ace\" " + " } " + "}"; + /** + * @tc.steps: step2. get flex item component. + * @tc.expected: step2. properties are set as default. + */ + RefPtr component = CreateComponent(testJson); + ASSERT_TRUE(component != nullptr); + RefPtr positioned = AceType::DynamicCast(component); + ASSERT_TRUE(positioned != nullptr); + CheckItemProperties(positioned, true); +} + +/** + * @tc.name: PositionedProperties003 + * @tc.desc: Check positioned component with valid properties can be created with correct properties. + * @tc.type: FUNC + * @tc.require: AR000DAR27 + * @tc.author: yangfan + */ +HWTEST_F(PositionedCreatorTest, PositionedProperties003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of flex item with valid properties. + */ + std::string testJson = "" + "{ " + " \"className\": \"Positioned\", " + " \"top\": 10.0, " + " \"right\": 10.0, " + " \"bottom\": 10.0, " + " \"left\": 10.0, " + " \"width\": 10.0, " + " \"height\": 10.0, " + " \"child\": { " + " \"className\":\"Text\"," + " \"value\":\"Hi Ace\" " + " } " + "}"; + /** + * @tc.steps: step2. get flex item component. + * @tc.expected: step2. properties are set correctly. + */ + RefPtr component = CreateComponent(testJson); + ASSERT_TRUE(component != nullptr); + RefPtr positioned = AceType::DynamicCast(component); + ASSERT_TRUE(positioned != nullptr); + CheckItemProperties(positioned, false); +} + +/** + * @tc.name: PositionedChild001 + * @tc.desc: Verify the positioned component with single flex child is correct. + * @tc.type: FUNC + * @tc.require: AR000DAR27 + * @tc.author: yangfan + */ +HWTEST_F(PositionedCreatorTest, PositionedChild001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of positioned with single child. + */ + std::string testJson = "" + "{ " + " \"className\": \"Positioned\", " + " \"left\": 0, " + " \"right\": 0, " + " \"width\": 0, " + " \"child\": { " + " \"className\":\"Text\"," + " \"value\":\"Hi Ace\" " + " } " + "}"; + /** + * @tc.steps: step2. get positioned component. + * @tc.expected: step2. properties are set correctly. + */ + RefPtr component = CreateComponent(testJson); + ASSERT_TRUE(component != nullptr); + RefPtr positioned = AceType::DynamicCast(component); + ASSERT_TRUE(positioned != nullptr); + CheckItemProperties(positioned, true); +} + +/** + * @tc.name: PositionedChild002 + * @tc.desc: Verify the positioned component with double child returns single child. + * @tc.type: FUNC + * @tc.require: AR000DAR27 + * @tc.author: yangfan + */ +HWTEST_F(PositionedCreatorTest, PositionedChild002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of positioned with double child. + */ + std::string testJson = "" + "{ " + " \"className\": \"Positioned\", " + " \"left\": 0, " + " \"right\": 0, " + " \"top\": 0, " + " \"child\": [" + " { " + " \"className\":\"Text\"," + " \"value\":\"Hi Ace\" " + " }, " + " { " + " \"className\":\"Text\"," + " \"value\":\"Hi Ace\" " + " } " + " ] " + "}"; + /** + * @tc.steps: step2. get positioned component. + * @tc.expected: step2. properties are set correctly, only one child in the positioned. + */ + RefPtr component = CreateComponent(testJson); + ASSERT_TRUE(component != nullptr); + RefPtr positioned = AceType::DynamicCast(component); + ASSERT_TRUE(positioned != nullptr); + CheckItemProperties(positioned, true); +} + +/** + * @tc.name: PositionedChild003 + * @tc.desc: Verify the positioned component with no child returns no child. + * @tc.type: FUNC + * @tc.require: AR000DAR27 + * @tc.author: yangfan + */ +HWTEST_F(PositionedCreatorTest, PositionedChild003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of positioned with double child. + */ + std::string testJson = "" + "{ " + " \"className\": \"Positioned\", " + " \"left\": 0, " + " \"right\": 0, " + " \"top\": 0 " + "}"; + /** + * @tc.steps: step2. get positioned component. + * @tc.expected: step2. properties are set correctly, only one child in the positioned. + */ + RefPtr component = CreateComponent(testJson); + ASSERT_TRUE(component != nullptr); + RefPtr positioned = AceType::DynamicCast(component); + ASSERT_TRUE(positioned != nullptr); + double bottom = positioned->GetBottom().Value(); + double top = positioned->GetTop().Value(); + double left = positioned->GetLeft().Value(); + double right = positioned->GetRight().Value(); + double width = positioned->GetWidth(); + double height = positioned->GetHeight(); + EXPECT_TRUE(NearEqual(top, 0)); + EXPECT_TRUE(NearEqual(bottom, 0)); + EXPECT_TRUE(NearEqual(left, 0)); + EXPECT_TRUE(NearEqual(right, 0)); + EXPECT_TRUE(NearEqual(width, 0)); + EXPECT_TRUE(NearEqual(height, 0)); + RefPtr child = positioned->GetChild(); + ASSERT_TRUE(child == nullptr); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/stack/render_positioned_test.cpp b/frameworks/core/components/test/unittest/stack/render_positioned_test.cpp new file mode 100644 index 00000000..52ab4214 --- /dev/null +++ b/frameworks/core/components/test/unittest/stack/render_positioned_test.cpp @@ -0,0 +1,271 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/log/log.h" +#include "base/utils/utils.h" +#include "core/components/box/box_component.h" +#include "core/components/positioned/positioned_component.h" +#include "core/components/stack/stack_component.h" +#include "core/components/test/unittest/flex/flex_test_utils.h" +#include "core/components/test/unittest/mock/mock_render_common.h" +#include "core/components/test/unittest/stack/stack_test_utils.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +constexpr double TEST_HORIZONTAL_VALUE = 40.0; +constexpr double TEST_VERTICAL_VALUE = 40.0; +constexpr double TEST_WIDTH_VALUE = 50.0; +constexpr double TEST_HEIGHT_VALUE = 50.0; +constexpr double SMALL_BOX = 100.0; + +} // namespace + +class RenderPositionedTest : public testing::Test { +public: + static void SetUpTestCase() + { + GTEST_LOG_(INFO) << "RenderPositionedTest SetUpTestCase"; + } + + static void TearDownTestCase() + { + GTEST_LOG_(INFO) << "RenderPositionedTest TearDownTestCase"; + } + + void SetUp() {} + void TearDown() {} +}; + +/** + * @tc.name: HorizontalLayout001 + * @tc.desc: verify the stack with positioned children works fine, where the positioned are set left. + * @tc.type: FUNC + * @tc.require: AR000DAR27 + * @tc.author: yangfan + */ +HWTEST_F(RenderPositionedTest, HorizontalLayout001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the render node tree, set left property to the positioned item + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr stack = StackTestUtils::CreateRenderStack(Alignment::TOP_LEFT, Overflow::CLIP, StackFit::KEEP); + root->AddChild(stack); + RefPtr positionedComponent = AceType::MakeRefPtr(nullptr); + positionedComponent->SetLeft(Dimension(TEST_HORIZONTAL_VALUE, DimensionUnit::PX)); + RefPtr renderPositioned = StackTestUtils::CreateRenderPositioned(positionedComponent); + stack->AddChild(renderPositioned); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + renderPositioned->AddChild(firstBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the position of the positioned items are set correctly + */ + root->Attach(mockContext); + stack->Attach(mockContext); + renderPositioned->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(renderPositioned->GetPosition() == Offset(TEST_HORIZONTAL_VALUE, 0)); +} + +/** + * @tc.name: HorizontalLayout002 + * @tc.desc: verify the stack with positioned children works fine, where the positioned are both set left and right. + * @tc.type: FUNC + * @tc.require: AR000DAR27 + * @tc.author: yangfan + */ +HWTEST_F(RenderPositionedTest, HorizontalLayout002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the render node tree, set left property to the positioned item + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr stack = StackTestUtils::CreateRenderStack(Alignment::TOP_LEFT, Overflow::CLIP, StackFit::KEEP); + root->AddChild(stack); + RefPtr positioned = AceType::MakeRefPtr(nullptr); + positioned->SetLeft(Dimension(TEST_HORIZONTAL_VALUE, DimensionUnit::PX)); + positioned->SetRight(Dimension(TEST_HORIZONTAL_VALUE, DimensionUnit::PX)); + RefPtr renderPositioned = StackTestUtils::CreateRenderPositioned(positioned); + stack->AddChild(renderPositioned); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + renderPositioned->AddChild(firstBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the position of the positioned items are set correctly + */ + root->Attach(mockContext); + stack->Attach(mockContext); + renderPositioned->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(renderPositioned->GetPosition() == Offset(TEST_HORIZONTAL_VALUE, 0)); +} + +/** + * @tc.name: HorizontalLayout003 + * @tc.desc: verify the stack with positioned children works fine, where the positioned are set width. + * @tc.type: FUNC + * @tc.require: AR000DAR27 + * @tc.author: yangfan + */ +HWTEST_F(RenderPositionedTest, HorizontalLayout003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the render node tree, set width property to the positioned item + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr stack = StackTestUtils::CreateRenderStack(Alignment::TOP_LEFT, Overflow::CLIP, StackFit::KEEP); + root->AddChild(stack); + RefPtr positioned = AceType::MakeRefPtr(nullptr); + positioned->SetWidth(TEST_WIDTH_VALUE); + RefPtr renderPositioned = StackTestUtils::CreateRenderPositioned(positioned); + stack->AddChild(renderPositioned); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + renderPositioned->AddChild(firstBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the position of the positioned items are set correctly + */ + root->Attach(mockContext); + stack->Attach(mockContext); + renderPositioned->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(renderPositioned->GetPosition() == Offset(0, 0)); + EXPECT_TRUE(renderPositioned->GetLayoutSize() == Size(TEST_WIDTH_VALUE, SMALL_BOX)); +} + +/** + * @tc.name: VerticalLayout001 + * @tc.desc: verify the stack with positioned children works fine, where the positioned are set top. + * @tc.type: FUNC + * @tc.require: AR000DAR27 + * @tc.author: yangfan + */ +HWTEST_F(RenderPositionedTest, VerticalLayout001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the render node tree, set top property to the positioned item + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr stack = StackTestUtils::CreateRenderStack(Alignment::TOP_LEFT, Overflow::CLIP, StackFit::KEEP); + root->AddChild(stack); + RefPtr positionedComponent = AceType::MakeRefPtr(nullptr); + positionedComponent->SetTop(Dimension(TEST_VERTICAL_VALUE, DimensionUnit::PX)); + RefPtr renderPositioned = StackTestUtils::CreateRenderPositioned(positionedComponent); + stack->AddChild(renderPositioned); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + renderPositioned->AddChild(firstBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the position of the positioned items are set correctly + */ + root->Attach(mockContext); + stack->Attach(mockContext); + renderPositioned->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(renderPositioned->GetPosition() == Offset(0, TEST_VERTICAL_VALUE)); +} + +/** + * @tc.name: VerticalLayout002 + * @tc.desc: verify the stack with positioned children works fine, where the positioned are both set top and bottom. + * @tc.type: FUNC + * @tc.require: AR000DAR27 + * @tc.author: yangfan + */ +HWTEST_F(RenderPositionedTest, VerticalLayout002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the render node tree, set top and bottom property to the positioned item + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr stack = StackTestUtils::CreateRenderStack(Alignment::TOP_LEFT, Overflow::CLIP, StackFit::KEEP); + root->AddChild(stack); + RefPtr positioned = AceType::MakeRefPtr(nullptr); + positioned->SetTop(Dimension(TEST_VERTICAL_VALUE, DimensionUnit::PX)); + positioned->SetBottom(Dimension(TEST_VERTICAL_VALUE, DimensionUnit::PX)); + RefPtr renderPositioned = StackTestUtils::CreateRenderPositioned(positioned); + stack->AddChild(renderPositioned); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + renderPositioned->AddChild(firstBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the position of the positioned items are set correctly + */ + root->Attach(mockContext); + stack->Attach(mockContext); + renderPositioned->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(renderPositioned->GetPosition() == Offset(0, TEST_VERTICAL_VALUE)); +} + +/** + * @tc.name: VerticalLayout003 + * @tc.desc: verify the stack with positioned children works fine, where the positioned are set height. + * @tc.type: FUNC + * @tc.require: AR000DAR27 + * @tc.author: yangfan + */ +HWTEST_F(RenderPositionedTest, VerticalLayout003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the render node tree, set height property to the positioned item + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr stack = StackTestUtils::CreateRenderStack(Alignment::TOP_LEFT, Overflow::CLIP, StackFit::KEEP); + root->AddChild(stack); + RefPtr positioned = AceType::MakeRefPtr(nullptr); + positioned->SetHeight(TEST_HEIGHT_VALUE); + RefPtr renderPositioned = StackTestUtils::CreateRenderPositioned(positioned); + stack->AddChild(renderPositioned); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + renderPositioned->AddChild(firstBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the position of the positioned items are set correctly + */ + root->Attach(mockContext); + stack->Attach(mockContext); + renderPositioned->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(renderPositioned->GetPosition() == Offset(0, 0)); + EXPECT_TRUE(renderPositioned->GetLayoutSize() == Size(SMALL_BOX, TEST_HEIGHT_VALUE)); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/stack/render_stack_test.cpp b/frameworks/core/components/test/unittest/stack/render_stack_test.cpp new file mode 100644 index 00000000..8ba36a0e --- /dev/null +++ b/frameworks/core/components/test/unittest/stack/render_stack_test.cpp @@ -0,0 +1,495 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/log/log.h" +#include "base/utils/utils.h" +#include "core/components/box/box_component.h" +#include "core/components/test/unittest/flex/flex_test_utils.h" +#include "core/components/test/unittest/mock/mock_render_common.h" +#include "core/components/test/unittest/stack/stack_test_utils.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +constexpr double SMALL_BOX = 100.0; +constexpr double MEDIUM_BOX = 200.0; +constexpr double LARGE_BOX = 300.0; +constexpr double RECT_WIDTH = 1080.0; +constexpr double RECT_HEIGHT = 2244.0; + +} // namespace + +class RenderStackTest : public testing::Test { +public: + static void SetUpTestCase() + { + GTEST_LOG_(INFO) << "RenderStackTest SetUpTestCase"; + } + + static void TearDownTestCase() + { + GTEST_LOG_(INFO) << "RenderStackTest TearDownTestCase"; + } + + void SetUp() {} + void TearDown() {} +}; + +/** + * @tc.name: RenderStackUpdate001 + * @tc.desc: Verify the Update Interface of RenderStack does not work for other components + * @tc.type: FUNC + * @tc.require: AR000DAQTN AR000DAQTO AR000DAQTP + * @tc.author: yangfan + */ +HWTEST_F(RenderStackTest, RenderStackUpdate001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct Box Component and RenderStack. + */ + RefPtr box = AceType::MakeRefPtr(); + RefPtr renderStack = AceType::MakeRefPtr(); + /** + * @tc.steps: step2. call the Update interface of RenderFlex + * @tc.expected: step2. renderFlex are not set need layout + */ + renderStack->Update(box); + EXPECT_TRUE(!renderStack->NeedLayout()); +} + +/** + * @tc.name: RenderStackUpdate002 + * @tc.desc: Verify that RenderStack works for stack component. + * @tc.type: FUNC + * @tc.require: AR000DAQTN AR000DAQTO AR000DAQTP + * @tc.author: yangfan + */ +HWTEST_F(RenderStackTest, RenderStackUpdate002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct Stack component and RenderStack. + */ + RefPtr box = AceType::MakeRefPtr(); + Alignment alignment = Alignment::TOP_LEFT; + Overflow overflow = Overflow::CLIP; + StackFit stackFit = StackFit::KEEP; + std::list> child; + child.emplace_back(box); + RefPtr stack = AceType::MakeRefPtr(alignment, stackFit, overflow, child); + RefPtr renderStack = AceType::MakeRefPtr(); + /** + * @tc.steps: step2. call Update interface of renderStack + * @tc.expected: step2. renderStack are set needLayout + */ + renderStack->Update(stack); + EXPECT_TRUE(renderStack->NeedLayout()); +} + +/** + * @tc.name: RenderStackLayout001 + * @tc.desc: Verify the stack with top-left alignment works fine. + * @tc.type: FUNC + * @tc.require: AR000DAQTN + * @tc.author: yangfan + */ +HWTEST_F(RenderStackTest, RenderStackLayout001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the RenderNode tree, stack are set as top-left, clip and keep. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr stack = StackTestUtils::CreateRenderStack(Alignment::TOP_LEFT, Overflow::CLIP, StackFit::KEEP); + root->AddChild(stack); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + stack->AddChild(firstBox); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + stack->AddChild(secondBox); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + thirdBox->Attach(mockContext); + stack->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->Attach(mockContext); + stack->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstBox->GetPosition() == Offset(0, 0)); + EXPECT_TRUE(secondBox->GetPosition() == Offset(0, 0)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(0, 0)); +} + +/** + * @tc.name: RenderStackLayout002 + * @tc.desc: Verify the stack component with top-center works fine. + * @tc.type: FUNC + * @tc.require: AR000DAQTN + * @tc.author: yangfan + */ +HWTEST_F(RenderStackTest, RenderStackLayout002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the RenderNode tree, stack are set as top-center. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr stack = + StackTestUtils::CreateRenderStack(Alignment::TOP_CENTER, Overflow::CLIP, StackFit::KEEP); + root->AddChild(stack); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + stack->AddChild(firstBox); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + stack->AddChild(secondBox); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + thirdBox->Attach(mockContext); + stack->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->Attach(mockContext); + stack->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstBox->GetPosition() == Offset(SMALL_BOX, 0)); + EXPECT_TRUE(secondBox->GetPosition() == Offset(SMALL_BOX / 2, 0)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(0, 0)); +} + +/** + * @tc.name: RenderStackLayout003 + * @tc.desc: Verify the stack component with top-right works fine. + * @tc.type: FUNC + * @tc.require: AR000DAQTN + * @tc.author: yangfan + */ +HWTEST_F(RenderStackTest, RenderStackLayout003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the RenderNode tree, stack are set as top-right. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr stack = StackTestUtils::CreateRenderStack(Alignment::TOP_RIGHT, Overflow::CLIP, StackFit::KEEP); + root->AddChild(stack); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + stack->AddChild(firstBox); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + stack->AddChild(secondBox); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + thirdBox->Attach(mockContext); + stack->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->Attach(mockContext); + stack->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstBox->GetPosition() == Offset(MEDIUM_BOX, 0.0)); + EXPECT_TRUE(secondBox->GetPosition() == Offset(SMALL_BOX, 0.0)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(0, 0)); +} + +/** + * @tc.name: RenderStackLayout004 + * @tc.desc: Verify the stack component with center-left works fine. + * @tc.type: FUNC + * @tc.require: AR000DAQTN + * @tc.author: yangfan + */ +HWTEST_F(RenderStackTest, RenderStackLayout004, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the RenderNode tree, flex are set as center-left. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr stack = + StackTestUtils::CreateRenderStack(Alignment::CENTER_LEFT, Overflow::CLIP, StackFit::KEEP); + root->AddChild(stack); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + stack->AddChild(firstBox); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + stack->AddChild(secondBox); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + thirdBox->Attach(mockContext); + stack->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->Attach(mockContext); + stack->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstBox->GetPosition() == Offset(0, SMALL_BOX)); + EXPECT_TRUE(secondBox->GetPosition() == Offset(0, SMALL_BOX / 2)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(0, 0)); +} + +/** + * @tc.name: RenderStackLayout005 + * @tc.desc: Verify the stack component with center-center works fine. + * @tc.type: FUNC + * @tc.require: AR000DAQTN + * @tc.author: yangfan + */ +HWTEST_F(RenderStackTest, RenderStackLayout005, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the RenderNode tree, stack are set as center-center. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr stack = StackTestUtils::CreateRenderStack(Alignment::CENTER, Overflow::CLIP, StackFit::KEEP); + root->AddChild(stack); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + stack->AddChild(firstBox); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + stack->AddChild(secondBox); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + thirdBox->Attach(mockContext); + stack->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->Attach(mockContext); + stack->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstBox->GetPosition() == Offset(SMALL_BOX, SMALL_BOX)); + EXPECT_TRUE(secondBox->GetPosition() == Offset(SMALL_BOX / 2, SMALL_BOX / 2)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(0, 0)); +} + +/** + * @tc.name: RenderStackLayout006 + * @tc.desc: Verify the stack component with center-right works fine. + * @tc.type: FUNC + * @tc.require: AR000DAQTN + * @tc.author: yangfan + */ +HWTEST_F(RenderStackTest, RenderStackLayout006, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the RenderNode tree, stack are set as center-right. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr stack = + StackTestUtils::CreateRenderStack(Alignment::CENTER_RIGHT, Overflow::CLIP, StackFit::KEEP); + root->AddChild(stack); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + stack->AddChild(firstBox); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + stack->AddChild(secondBox); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + thirdBox->Attach(mockContext); + stack->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->Attach(mockContext); + stack->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstBox->GetPosition() == Offset(MEDIUM_BOX, SMALL_BOX)); + EXPECT_TRUE(secondBox->GetPosition() == Offset(SMALL_BOX, SMALL_BOX / 2)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(0, 0)); +} + +/** + * @tc.name: RenderStackLayout007 + * @tc.desc: Verify the stack component with bottom-left works fine. + * @tc.type: FUNC + * @tc.require: AR000DAQTN + * @tc.author: yangfan + */ +HWTEST_F(RenderStackTest, RenderStackLayout007, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the RenderNode tree, stack are set as bottom-left. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr stack = + StackTestUtils::CreateRenderStack(Alignment::BOTTOM_LEFT, Overflow::CLIP, StackFit::KEEP); + root->AddChild(stack); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + stack->AddChild(firstBox); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + stack->AddChild(secondBox); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + thirdBox->Attach(mockContext); + stack->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->Attach(mockContext); + stack->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstBox->GetPosition() == Offset(0, MEDIUM_BOX)); + EXPECT_TRUE(secondBox->GetPosition() == Offset(0, SMALL_BOX)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(0, 0)); +} + +/** + * @tc.name: RenderStackLayout008 + * @tc.desc: Verify the stack component with bottom-center works fine. + * @tc.type: FUNC + * @tc.require: AR000DAQTN + * @tc.author: yangfan + */ +HWTEST_F(RenderStackTest, RenderStackLayout008, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the RenderNode tree, stack are set as bottom-center. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr stack = + StackTestUtils::CreateRenderStack(Alignment::BOTTOM_CENTER, Overflow::CLIP, StackFit::KEEP); + root->AddChild(stack); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + stack->AddChild(firstBox); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + stack->AddChild(secondBox); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + thirdBox->Attach(mockContext); + stack->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->Attach(mockContext); + stack->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstBox->GetPosition() == Offset(SMALL_BOX, MEDIUM_BOX)); + EXPECT_TRUE(secondBox->GetPosition() == Offset(SMALL_BOX / 2, SMALL_BOX)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(0, 0)); +} + +/** + * @tc.name: RenderStackLayout009 + * @tc.desc: Verify the stack component with bottom-right works fine. + * @tc.type: FUNC + * @tc.require: AR000DAQTN + * @tc.author: yangfan + */ +HWTEST_F(RenderStackTest, RenderStackLayout009, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the node tree, stack are set as bottom-right. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr stack = + StackTestUtils::CreateRenderStack(Alignment::BOTTOM_RIGHT, Overflow::CLIP, StackFit::KEEP); + root->AddChild(stack); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + stack->AddChild(firstBox); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + stack->AddChild(secondBox); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + thirdBox->Attach(mockContext); + stack->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->Attach(mockContext); + stack->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstBox->GetPosition() == Offset(MEDIUM_BOX, MEDIUM_BOX)); + EXPECT_TRUE(secondBox->GetPosition() == Offset(SMALL_BOX, SMALL_BOX)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(0, 0)); +} + +/** + * @tc.name: RenderStackLayout010 + * @tc.desc: Verify the stack component with stretch stackfit works fine. + * @tc.type: FUNC + * @tc.require: AR000DAQTO + * @tc.author: yangfan + */ +HWTEST_F(RenderStackTest, RenderStackLayout010, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the node tree, stack is set stretch. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr root = FlexTestUtils::CreateRenderRoot(); + RefPtr stack = + StackTestUtils::CreateRenderStack(Alignment::TOP_LEFT, Overflow::CLIP, StackFit::STRETCH); + root->AddChild(stack); + RefPtr firstBox = FlexTestUtils::CreateRenderBox(SMALL_BOX, SMALL_BOX); + firstBox->Attach(mockContext); + stack->AddChild(firstBox); + RefPtr secondBox = FlexTestUtils::CreateRenderBox(MEDIUM_BOX, MEDIUM_BOX); + secondBox->Attach(mockContext); + stack->AddChild(secondBox); + RefPtr thirdBox = FlexTestUtils::CreateRenderBox(LARGE_BOX, LARGE_BOX); + thirdBox->Attach(mockContext); + stack->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + * @tc.expected: step2. the positions of three boxes are set correctly + */ + root->Attach(mockContext); + stack->Attach(mockContext); + root->PerformLayout(); + EXPECT_TRUE(firstBox->GetPosition() == Offset(0.0, 0.0)); + EXPECT_TRUE(secondBox->GetPosition() == Offset(0.0, 0.0)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(0.0, 0.0)); + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(RECT_WIDTH, RECT_HEIGHT)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(RECT_WIDTH, RECT_HEIGHT)); + EXPECT_TRUE(thirdBox->GetLayoutSize() == Size(RECT_WIDTH, RECT_HEIGHT)); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/stack/stack_creator_test.cpp b/frameworks/core/components/test/unittest/stack/stack_creator_test.cpp new file mode 100644 index 00000000..64c19faa --- /dev/null +++ b/frameworks/core/components/test/unittest/stack/stack_creator_test.cpp @@ -0,0 +1,330 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/log/log.h" +#include "base/utils/utils.h" +#include "core/components/flex/flex_component.h" +#include "core/components/root/root_component.h" +#include "core/components/stack/stack_component.h" +#include "core/components/test/json/flex_creator.h" +#include "core/components/text/text_component.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +constexpr int32_t SINGLE_CHILD_COUNT = 1; +constexpr int32_t MULTI_CHILD_COUNT = 2; +const std::string TEST_TEXT_VALUE = "Hi Ace"; + +} // namespace + +class StackCreatorTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; + +protected: + RefPtr CreateComponent(const std::string& testJson); +}; + +void StackCreatorTest::SetUpTestCase() +{ + GTEST_LOG_(INFO) << "StackCreatorTest SetUpTestCase"; +} + +void StackCreatorTest::TearDownTestCase() +{ + GTEST_LOG_(INFO) << "StackCreatorTest TearDownTestCase"; +} + +void StackCreatorTest::SetUp() {} + +void StackCreatorTest::TearDown() {} + +RefPtr StackCreatorTest::CreateComponent(const std::string& testJson) +{ + const auto dslBuf = reinterpret_cast(testJson.c_str()); + size_t dslLen = testJson.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + return component; +} + +/** + * @tc.name: StackProperties001 + * @tc.desc: Check stack component with no properties in the json returns default properties. + * @tc.type: FUNC + * @tc.require: AR000DAQTN AR000DAQTO AR000DAQTP + * @tc.author: yangfan + */ +HWTEST_F(StackCreatorTest, StackProperties001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string where stack has no properties. + */ + std::string testJson = "" + "{ " + " \"className\": \"Stack\", " + " \"child\": { " + " \"className\":\"Text\"," + " \"value\":\"Hi Ace\" " + " } " + "}"; + /** + * @tc.steps: step2. get column component + * @tc.expected: step2. properties are set as default + */ + RefPtr component = CreateComponent(testJson); + ASSERT_TRUE(component != nullptr); + RefPtr stack = AceType::DynamicCast(component); + ASSERT_TRUE(stack != nullptr); + Alignment align = stack->GetAlignment(); + EXPECT_TRUE(NearEqual(align.GetVertical(), -1.0)); + EXPECT_TRUE(NearEqual(align.GetHorizontal(), -1.0)); + int32_t stackFit = static_cast(stack->GetStackFit()); + int32_t overflowFlag = static_cast(stack->GetOverflow()); + std::list> children = stack->GetChildren(); + EXPECT_TRUE(stackFit == 0); + EXPECT_TRUE(overflowFlag == 0); + EXPECT_TRUE(children.size() == SINGLE_CHILD_COUNT); +} + +/** + * @tc.name: StackProperties002 + * @tc.desc: Check stack component with invalid properties in the json returns default properties + * @tc.type: FUNC + * @tc.require: AR000DAQTN AR000DAQTO AR000DAQTP + * @tc.author: yangfan + */ +HWTEST_F(StackCreatorTest, StackProperties002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string where stack has invalid properties. + */ + std::string testJson = "" + "{ " + " \"className\": \"Stack\", " + " \"stackFit\": -1.5, " + " \"overflow\": -1, " + " \"child\": { " + " \"className\":\"Text\"," + " \"value\":\"Hi Ace\" " + " } " + "}"; + /** + * @tc.steps: step2. get row component + * @tc.expected: step2. properties are set as default + */ + RefPtr component = CreateComponent(testJson); + ASSERT_TRUE(component != nullptr); + RefPtr stack = AceType::DynamicCast(component); + ASSERT_TRUE(stack != nullptr); + int32_t overflowFlag = static_cast(stack->GetOverflow()); + int32_t stackFit = static_cast(stack->GetStackFit()); + std::list> children = stack->GetChildren(); + EXPECT_TRUE(overflowFlag == 0); + EXPECT_TRUE(stackFit == 0); + EXPECT_TRUE(children.size() == SINGLE_CHILD_COUNT); +} + +/** + * @tc.name: StackProperties003 + * @tc.desc: Check stack component with valid properties in the json returns correct properties + * @tc.type: FUNC + * @tc.require: AR000DAQTN AR000DAQTO AR000DAQTP + * @tc.author: yangfan + */ +HWTEST_F(StackCreatorTest, StackProperties003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string where stack has valid properties. + */ + std::string testJson = "" + "{ " + " \"className\": \"Stack\", " + " \"overflow\": 1, " + " \"stackFit\": 1, " + " \"child\": [{ " + " \"className\":\"Text\"," + " \"value\":\"Hi Ace\" " + " }," + " {" + " \"className\":\"Text\"," + " \"value\":\"Hi Ace\" " + " }] " + "}"; + /** + * @tc.steps: step2. get row component + * @tc.expected: step2. properties are set as default + */ + RefPtr component = CreateComponent(testJson); + ASSERT_TRUE(component != nullptr); + RefPtr stack = AceType::DynamicCast(component); + ASSERT_TRUE(stack != nullptr); + int32_t overflow = static_cast(stack->GetOverflow()); + int32_t stackFit = static_cast(stack->GetStackFit()); + std::list> children = stack->GetChildren(); + EXPECT_TRUE(overflow == 1); + EXPECT_TRUE(stackFit == 1); + EXPECT_TRUE(children.size() == MULTI_CHILD_COUNT); +} + +/** + * @tc.name: StackChild001 + * @tc.desc: Verify stack component with single flex child is correct when load the json + * @tc.type: FUNC + * @tc.require: AR000DAQTN AR000DAQTO AR000DAQTP + * @tc.author: yangfan + */ +HWTEST_F(StackCreatorTest, StackChild001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json with one child + */ + std::string testJson = "" + "{ " + " \"className\": \"Stack\", " + " \"stackFit\": 1, " + " \"overflow\": 0, " + " \"child\": { " + " \"className\": \"Row\", " + " \"child\": {" + " \"className\": \"Text\", " + " \"value\": \"Hi Ace\" " + " } " + " } " + "}"; + /** + * @tc.steps: step2. get row component with one child + * @tc.expected: step2. properties are set correctly + */ + RefPtr component = CreateComponent(testJson); + ASSERT_TRUE(component != nullptr); + RefPtr stack = AceType::DynamicCast(component); + ASSERT_TRUE(stack != nullptr); + int32_t stackFit = static_cast(stack->GetStackFit()); + int32_t overflow = static_cast(stack->GetOverflow()); + int32_t childrenCount = stack->GetChildren().size(); + EXPECT_TRUE(childrenCount == SINGLE_CHILD_COUNT); + EXPECT_TRUE(stackFit == 1); + EXPECT_TRUE(overflow == 0); + RefPtr row = AceType::DynamicCast(stack->GetChildren().front()); + ASSERT_TRUE(row != nullptr); + ASSERT_TRUE(row->GetChildren().size() == SINGLE_CHILD_COUNT); + RefPtr text = AceType::DynamicCast(row->GetChildren().front()); + ASSERT_TRUE(text != nullptr); + EXPECT_TRUE(text->GetData() == TEST_TEXT_VALUE); +} + +/** + * @tc.name: StackChild002 + * @tc.desc: Verify stack component with two child is correct when load the json + * @tc.type: FUNC + * @tc.require: AR000DAQTN AR000DAQTO AR000DAQTP + * @tc.author: yangfan + */ +HWTEST_F(StackCreatorTest, StackChild002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json with two child + */ + std::string testJson = "" + "{ " + " \"className\": \"Stack\", " + " \"stackFit\": 1, " + " \"overflow\": 1, " + " \"child\": [" + " { " + " \"className\": \"Column\", " + " \"child\": {" + " \"className\": \"Text\", " + " \"value\": \"Hi Ace\" " + " }" + " }, " + " { " + " \"className\": \"Column\", " + " \"child\": {" + " \"className\": \"Text\", " + " \"value\": \"Hi Ace\" " + " }" + " } " + " ]" + "}"; + /** + * @tc.steps: step2. get stack component with two children + * @tc.expected: step2. properties are set correctly + */ + RefPtr component = CreateComponent(testJson); + ASSERT_TRUE(component != nullptr); + RefPtr stack = AceType::DynamicCast(component); + ASSERT_TRUE(stack != nullptr); + int32_t stackFit = static_cast(stack->GetStackFit()); + int32_t overflow = static_cast(stack->GetOverflow()); + int32_t childrenCount = stack->GetChildren().size(); + EXPECT_TRUE(childrenCount == MULTI_CHILD_COUNT); + EXPECT_TRUE(stackFit == 1); + EXPECT_TRUE(overflow == 1); + RefPtr firstChild = AceType::DynamicCast(stack->GetChildren().front()); + ASSERT_TRUE(firstChild != nullptr); + RefPtr firstChildText = AceType::DynamicCast(firstChild->GetChildren().front()); + ASSERT_TRUE(firstChildText != nullptr); + EXPECT_TRUE(firstChildText->GetData() == TEST_TEXT_VALUE); + RefPtr secondChild = AceType::DynamicCast(stack->GetChildren().back()); + RefPtr secondChildText = AceType::DynamicCast(secondChild->GetChildren().front()); + ASSERT_TRUE(secondChildText != nullptr); + EXPECT_TRUE(secondChildText->GetData() == TEST_TEXT_VALUE); +} + +/** + * @tc.name: StackChild003 + * @tc.desc: Verify stack component with no child is correct when load the json + * @tc.type: FUNC + * @tc.require: AR000DAQTN AR000DAQTO AR000DAQTP + * @tc.author: yangfan + */ +HWTEST_F(StackCreatorTest, StackChild003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json with no child + */ + std::string testJson = "" + "{ " + " \"className\": \"Stack\", " + " \"stackFit\": 1, " + " \"overflow\": 1 " + "}"; + /** + * @tc.steps: step2. get row component with no child + * @tc.expected: step2. properties are set correctly + */ + RefPtr component = CreateComponent(testJson); + ASSERT_TRUE(component != nullptr); + RefPtr stack = AceType::DynamicCast(component); + ASSERT_TRUE(stack != nullptr); + int32_t stackFit = static_cast(stack->GetStackFit()); + int32_t overflow = static_cast(stack->GetOverflow()); + std::list> children = stack->GetChildren(); + EXPECT_TRUE(stackFit == 1); + EXPECT_TRUE(overflow == 1); + EXPECT_TRUE(children.size() == 0); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/stack/stack_test_utils.cpp b/frameworks/core/components/test/unittest/stack/stack_test_utils.cpp new file mode 100644 index 00000000..06ebe822 --- /dev/null +++ b/frameworks/core/components/test/unittest/stack/stack_test_utils.cpp @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/unittest/stack/stack_test_utils.h" + +#include "core/components/positioned/positioned_component.h" +#include "core/components/stack/stack_component.h" + +namespace OHOS::Ace { + +RefPtr StackTestUtils::CreateRenderStack(const Alignment& alignment, Overflow overflow, StackFit stackFit) +{ + RefPtr stack = AceType::MakeRefPtr(); + std::list> children; + RefPtr stackComponent = + AceType::MakeRefPtr(alignment, stackFit, overflow, children); + stack->Update(stackComponent); + return stack; +} + +RefPtr StackTestUtils::CreateRenderPositioned(RefPtr positioned) +{ + RefPtr renderPositioned = AceType::MakeRefPtr(); + renderPositioned->Update(positioned); + return renderPositioned; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/stack/stack_test_utils.h b/frameworks/core/components/test/unittest/stack/stack_test_utils.h new file mode 100644 index 00000000..1182fbd0 --- /dev/null +++ b/frameworks/core/components/test/unittest/stack/stack_test_utils.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_STACK_STACK_TEST_UTILS_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_STACK_STACK_TEST_UTILS_H + +#include "core/components/positioned/positioned_component.h" +#include "core/components/positioned/render_positioned.h" +#include "core/components/stack/render_stack.h" +#include "core/components/stack/stack_component.h" + +namespace OHOS::Ace { + +class MockRenderStack : public RenderStack { + DECLARE_ACE_TYPE(MockRenderStack, RenderStack); +}; + +class StackTestUtils { +public: + static RefPtr CreateRenderStack(const Alignment& alignment, Overflow overflow, StackFit stackFit); + static RefPtr CreateRenderPositioned(RefPtr positioned); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_STACK_STACK_TEST_UTILS_H diff --git a/frameworks/core/components/test/unittest/stage/BUILD.gn b/frameworks/core/components/test/unittest/stage/BUILD.gn new file mode 100644 index 00000000..bc5fb01a --- /dev/null +++ b/frameworks/core/components/test/unittest/stage/BUILD.gn @@ -0,0 +1,63 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +if (is_standard_system) { + module_output_path = "ace_engine_standard/frameworkbasicability/stage" +} + +ohos_unittest("StageElementTest") { + module_out_path = module_output_path + + sources = [ "stage_element_test.cpp" ] + + configs = [ + ":config_stage_element_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + configs += [ "//third_party/curl:curl_config" ] + deps += [ + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/curl:curl", + ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_stage_element_test") { + visibility = [ ":*" ] + include_dirs = [ + "//utils/native/base/include", + "$ace_root", + ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":StageElementTest" ] +} diff --git a/frameworks/core/components/test/unittest/stage/stage_element_test.cpp b/frameworks/core/components/test/unittest/stage/stage_element_test.cpp new file mode 100644 index 00000000..e66fc7d5 --- /dev/null +++ b/frameworks/core/components/test/unittest/stage/stage_element_test.cpp @@ -0,0 +1,238 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/log/log.h" +#include "core/components/box/box_component.h" +#include "core/components/box/render_box.h" +#include "core/components/display/display_component.h" +#include "core/components/display/display_element.h" +#include "core/components/display/render_display.h" +#include "core/components/flex/flex_item_component.h" +#include "core/components/flex/flex_item_element.h" +#include "core/components/flex/render_flex_item.h" +#include "core/components/stage/stage_component.h" +#include "core/components/stage/stage_element.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { + +class StageElementTest : public testing::Test { +public: + static void SetUpTestCase() + { + GTEST_LOG_(INFO) << "StageElementTest SetUpTestCase"; + } + + static void TearDownTestCase() + { + GTEST_LOG_(INFO) << "StageElementTest TearDownTestCase"; + } + + void SetUp() override + { + RefPtr rootStage = AceType::MakeRefPtr(std::list>()); + stage_ = AceType::MakeRefPtr(); + stage_->SetPipelineContext(nullptr); + stage_->SetNewComponent(rootStage); + stage_->Mount(nullptr); + } + + void TearDown() override + { + stage_ = nullptr; + } + +protected: + RefPtr stage_; +}; + +/** + * @tc.name: StagePushTest001 + * @tc.desc: Verify the push interface works fine when there is no children in stage + * @tc.type: FUNC + * @tc.require: AR000DACL6 + * @tc.author: yangfan + */ +HWTEST_F(StageElementTest, StagePushTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. init new component + */ + RefPtr testBox = AceType::MakeRefPtr(); + RefPtr testDisplay = AceType::MakeRefPtr(testBox); + + /** + * @tc.steps: step2. call PushPage and PerformBuild interfaces + * @tc.expected: step2. the child of stage are created. + */ + stage_->PushPage(testDisplay); + stage_->PerformBuild(); + auto child = stage_->GetFirstChild(); + auto displayChild = AceType::DynamicCast(child); + ASSERT_TRUE(displayChild != nullptr); + auto renderDisplay = AceType::DynamicCast(displayChild->GetRenderNode()); + ASSERT_TRUE(renderDisplay != nullptr); + EXPECT_TRUE(renderDisplay->GetVisibleType() == VisibleType::VISIBLE); +} + +/** + * @tc.name: StagePushTest002 + * @tc.desc: Verify the push interface works fine when there are children in stage + * @tc.type: FUNC + * @tc.require: AR000DACL6 + * @tc.author: yangfan + */ +HWTEST_F(StageElementTest, StagePushTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. init two new components + */ + RefPtr firstBox = AceType::MakeRefPtr(); + RefPtr firstDisplay = AceType::MakeRefPtr(firstBox); + RefPtr secondBox = AceType::MakeRefPtr(); + RefPtr secondDisplay = AceType::MakeRefPtr(secondBox); + /** + * @tc.steps: step2. call PushPage and PerformBuild interfaces + * @tc.expected: step2. the first display child is set gone. + */ + stage_->PushPage(firstDisplay); + stage_->PerformBuild(); + stage_->PushPage(secondDisplay); + stage_->PerformBuild(); + auto child = stage_->GetFirstChild(); + auto displayChild = AceType::DynamicCast(child); + ASSERT_TRUE(displayChild); + auto renderDisplay = AceType::DynamicCast(displayChild->GetRenderNode()); + ASSERT_TRUE(renderDisplay != nullptr); +} + +/** + * @tc.name: StagePopTest001 + * @tc.desc: Verify the pop interface works fine when there are children in stage + * @tc.type: FUNC + * @tc.require: AR000DACL6 + * @tc.author: yangfan + */ +HWTEST_F(StageElementTest, StagePopTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. init two new components + */ + RefPtr firstBox = AceType::MakeRefPtr(); + RefPtr firstDisplay = AceType::MakeRefPtr(firstBox); + RefPtr secondBox = AceType::MakeRefPtr(); + RefPtr secondDisplay = AceType::MakeRefPtr(secondBox); + /** + * @tc.steps: step2. call Push, Pop and PerformBuild interfaces + * @tc.expected: step2. only one child in the stage, the first child is set visible. + */ + stage_->PushPage(firstDisplay); + stage_->PerformBuild(); + stage_->PushPage(secondDisplay); + stage_->PerformBuild(); + stage_->Pop(); + stage_->PerformBuild(); + auto child = stage_->GetFirstChild(); + auto displayChild = AceType::DynamicCast(child); + ASSERT_TRUE(displayChild); + auto renderDisplay = AceType::DynamicCast(displayChild->GetRenderNode()); + ASSERT_TRUE(renderDisplay != nullptr); + EXPECT_TRUE(renderDisplay->GetVisibleType() == VisibleType::VISIBLE); +} + +/** + * @tc.name: StageReplaceTest001 + * @tc.desc: Verify the Replace interface works fine when there are children in stage + * @tc.type: FUNC + * @tc.require: AR000DACL6 + * @tc.author: yangfan + */ +HWTEST_F(StageElementTest, StageReplaceTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. init two new components + */ + RefPtr firstFlexItem = AceType::MakeRefPtr(0, 0, 0, nullptr); + RefPtr firstDisplay = AceType::MakeRefPtr(firstFlexItem); + RefPtr secondFlexItem = AceType::MakeRefPtr(1, 1, 1, nullptr); + RefPtr secondDisplay = AceType::MakeRefPtr(secondFlexItem); + /** + * @tc.steps: step2. call PushPage, replace and PerformBuild interfaces + * @tc.expected: step2. there is only one child in the stage, the properties are correctly + */ + stage_->PushPage(firstDisplay); + stage_->PerformBuild(); + stage_->Replace(secondDisplay); + stage_->PerformBuild(); + auto child = stage_->GetFirstChild(); + auto displayChild = AceType::DynamicCast(child); + ASSERT_TRUE(displayChild); + auto renderDisplay = AceType::DynamicCast(displayChild->GetRenderNode()); + auto renderFlexItem = AceType::DynamicCast(renderDisplay->GetChildren().front()); + ASSERT_TRUE(renderDisplay != nullptr); + ASSERT_TRUE(renderFlexItem != nullptr); + EXPECT_TRUE(renderFlexItem->GetFlexGrow() == 1); + EXPECT_TRUE(renderFlexItem->GetFlexShrink() == 1); + EXPECT_TRUE(renderDisplay->GetVisibleType() == VisibleType::VISIBLE); +} + +/** + * @tc.name: StageClearTest001 + * @tc.desc: Verify the clear interface works fine when there are children in stage + * @tc.type: FUNC + * @tc.require: AR000DACL6 + * @tc.author: yangfan + */ +HWTEST_F(StageElementTest, StageClearTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. init three new components + */ + RefPtr firstFlexItem = AceType::MakeRefPtr(0, 0, 0, nullptr); + RefPtr firstDisplay = AceType::MakeRefPtr(firstFlexItem); + RefPtr secondFlexItem = AceType::MakeRefPtr(0, 0, 0, nullptr); + RefPtr secondDisplay = AceType::MakeRefPtr(secondFlexItem); + RefPtr thirdFlexItem = AceType::MakeRefPtr(1, 1, 1, nullptr); + RefPtr thirdDisplay = AceType::MakeRefPtr(thirdFlexItem); + /** + * @tc.steps: step2. call PushPage, clear and PerformBuild interfaces + * @tc.expected: step2. there is only one child in the stage, the properties are set correctly + */ + stage_->PushPage(firstDisplay); + stage_->PerformBuild(); + stage_->PushPage(secondDisplay); + stage_->PerformBuild(); + stage_->PushPage(thirdDisplay); + stage_->PerformBuild(); + stage_->ClearOffStage(); + stage_->PerformBuild(); + auto child = stage_->GetFirstChild(); + ASSERT_TRUE(child); + auto displayChild = AceType::DynamicCast(child); + ASSERT_TRUE(displayChild); + auto renderDisplay = AceType::DynamicCast(displayChild->GetRenderNode()); + auto renderFlexItem = AceType::DynamicCast(renderDisplay->GetChildren().front()); + ASSERT_TRUE(renderDisplay != nullptr); + ASSERT_TRUE(renderFlexItem != nullptr); + EXPECT_TRUE(renderFlexItem->GetFlexGrow() == 1); + EXPECT_TRUE(renderFlexItem->GetFlexShrink() == 1); + EXPECT_TRUE(renderDisplay->GetVisibleType() == VisibleType::VISIBLE); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/svg/BUILD.gn b/frameworks/core/components/test/unittest/svg/BUILD.gn new file mode 100644 index 00000000..92d87aae --- /dev/null +++ b/frameworks/core/components/test/unittest/svg/BUILD.gn @@ -0,0 +1,66 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +if (is_standard_system) { + module_output_path = "ace_engine_standard/backenduicomponent/svg" +} + +ohos_unittest("RenderSvgTest") { + module_out_path = module_output_path + + sources = [ + "$ace_root/frameworks/core/components/test/unittest/mock/mock_render_common.cpp", + "render_svg_test.cpp", + ] + + configs = [ + ":config_render_svg_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "$ace_root/frameworks/core/components/test:json", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + configs += [ "//third_party/curl:curl_config" ] + deps += [ + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/curl:curl", + ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_render_svg_test") { + visibility = [ ":*" ] + include_dirs = [ + "//utils/native/base/include", + "$ace_root", + ] +} + +group("unittest") { + testonly = true + deps = [] + deps += [ ":RenderSvgTest" ] +} diff --git a/frameworks/core/components/test/unittest/svg/render_svg_test.cpp b/frameworks/core/components/test/unittest/svg/render_svg_test.cpp new file mode 100644 index 00000000..f52cc7e8 --- /dev/null +++ b/frameworks/core/components/test/unittest/svg/render_svg_test.cpp @@ -0,0 +1,304 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/log/log.h" +#include "base/utils/utils.h" + +#include "core/components/svg/render_svg.h" +#include "core/components/svg/render_svg_circle.h" +#include "core/components/svg/render_svg_ellipse.h" +#include "core/components/svg/render_svg_line.h" +#include "core/components/svg/render_svg_path.h" +#include "core/components/svg/render_svg_polygon.h" +#include "core/components/svg/render_svg_polyline.h" +#include "core/components/svg/render_svg_rect.h" +#include "core/components/svg/svg_circle_component.h" +#include "core/components/svg/svg_component.h" +#include "core/components/svg/svg_ellipse_component.h" +#include "core/components/svg/svg_line_component.h" +#include "core/components/svg/svg_path_component.h" +#include "core/components/svg/svg_polygon_component.h" +#include "core/components/svg/svg_polyline_component.h" +#include "core/components/svg/svg_rect_component.h" +#include "core/components/test/unittest/mock/mock_render_common.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { + +class RenderSvgTest : public testing::Test { +public: + static void SetUpTestCase() {} + static void TearDownTestCase() {} + void SetUp() {} + void TearDown() {} +}; + +/** + * @tc.name: RenderSvgTest001 + * @tc.desc: Verify the Update Interface of RenderSvg work correctly with svg component. + * @tc.type: FUNC + * @tc.require: AR000FL0TG + * @tc.author: chenlien + */ +HWTEST_F(RenderSvgTest, RenderSvgTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct SvgComponent and RenderSvg. + */ + auto svgComponent = AceType::MakeRefPtr(); + svgComponent->SetWidth(Dimension(100.0)); + svgComponent->SetHeight(Dimension(50.0)); + + auto mockContext = MockRenderCommon::GetMockContext(); + auto renderSvg = AceType::MakeRefPtr(); + renderSvg->Attach(mockContext); + + /** + * @tc.steps: step2. call the Update interface of RenderSvg. + * @tc.expected: step2. renderSvg is setted as needLayout. + */ + renderSvg->Update(svgComponent); + EXPECT_TRUE(renderSvg->NeedLayout()); + renderSvg->PerformLayout(); + EXPECT_TRUE(renderSvg->GetLayoutSize() == Size(100.0, 50.0)); +} + +/** + * @tc.name: RenderSvgTest002 + * @tc.desc: Verify the Update Interface of RenderSvgRect work correctly with svg rect component. + * @tc.type: FUNC + * @tc.require: AR000FL0TH + * @tc.author: chenlien + */ +HWTEST_F(RenderSvgTest, RenderSvgTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct SvgRectComponent and RenderSvgRect. + */ + auto component = AceType::MakeRefPtr(); + component->SetWidth(Dimension(100.0)); + component->SetHeight(Dimension(50.0)); + component->SetX(Dimension(10.0)); + component->SetY(Dimension(20.0)); + component->SetRx(Dimension(5.0)); + component->SetRy(Dimension(3.0)); + auto mockContext = MockRenderCommon::GetMockContext(); + auto render = AceType::MakeRefPtr(); + render->Attach(mockContext); + + /** + * @tc.steps: step2. call the Update interface of RenderSvgRect. + * @tc.expected: step2. renderSvgRect is setted as needLayout. + */ + render->Update(component); + EXPECT_TRUE(render->NeedLayout()); + EXPECT_NEAR(render->GetWidth().Value(), 100.0, FLT_EPSILON); + EXPECT_NEAR(render->GetHeight().Value(), 50.0, FLT_EPSILON); + EXPECT_NEAR(render->GetX().Value(), 10.0, FLT_EPSILON); + EXPECT_NEAR(render->GetY().Value(), 20.0, FLT_EPSILON); + EXPECT_NEAR(render->GetRx().Value(), 5.0, FLT_EPSILON); + EXPECT_NEAR(render->GetRy().Value(), 3.0, FLT_EPSILON); + render->PerformLayout(); +} + +/** + * @tc.name: RenderSvgTest003 + * @tc.desc: Verify the Update Interface of RenderSvgCircle work correctly with svg circle component. + * @tc.type: FUNC + * @tc.require: AR000FL0TI + * @tc.author: chenlien + */ +HWTEST_F(RenderSvgTest, RenderSvgTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct SvgCircleComponent and RenderSvgRect. + */ + auto component = AceType::MakeRefPtr(); + component->SetCx(Dimension(20.0)); + component->SetCy(Dimension(30.0)); + component->SetR(Dimension(50.0)); + auto mockContext = MockRenderCommon::GetMockContext(); + auto render = AceType::MakeRefPtr(); + render->Attach(mockContext); + + /** + * @tc.steps: step2. call the Update interface of renderSvgCircle. + * @tc.expected: step2. renderSvgCircle is setted as needLayout. + */ + render->Update(component); + EXPECT_TRUE(render->NeedLayout()); + EXPECT_NEAR(render->GetCx().Value(), 20.0, FLT_EPSILON); + EXPECT_NEAR(render->GetCy().Value(), 30.0, FLT_EPSILON); + EXPECT_NEAR(render->GetR().Value(), 50.0, FLT_EPSILON); + render->PerformLayout(); +} + +/** + * @tc.name: RenderSvgTest004 + * @tc.desc: Verify the Update Interface of RenderSvgEllipse work correctly with svg ellipse component. + * @tc.type: FUNC + * @tc.require: AR000FL0TJ + * @tc.author: chenlien + */ +HWTEST_F(RenderSvgTest, RenderSvgTest004, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct SvgEllipseComponent and RenderSvgEllipse. + */ + auto component = AceType::MakeRefPtr(); + component->SetCx(Dimension(20.0)); + component->SetCy(Dimension(30.0)); + component->SetRx(Dimension(50.0)); + component->SetRy(Dimension(40.0)); + auto mockContext = MockRenderCommon::GetMockContext(); + auto render = AceType::MakeRefPtr(); + render->Attach(mockContext); + + /** + * @tc.steps: step2. call the Update interface of renderSvgEllipse. + * @tc.expected: step2. renderSvgEllipse is setted as needLayout. + */ + render->Update(component); + EXPECT_TRUE(render->NeedLayout()); + EXPECT_NEAR(render->GetCx().Value(), 20.0, FLT_EPSILON); + EXPECT_NEAR(render->GetCy().Value(), 30.0, FLT_EPSILON); + EXPECT_NEAR(render->GetRx().Value(), 50.0, FLT_EPSILON); + EXPECT_NEAR(render->GetRy().Value(), 40.0, FLT_EPSILON); + render->PerformLayout(); +} + +/** + * @tc.name: RenderSvgTest005 + * @tc.desc: Verify the Update Interface of RenderSvgPath work correctly with svg path component. + * @tc.type: FUNC + * @tc.require: AR000FL0TK + * @tc.author: chenlien + */ +HWTEST_F(RenderSvgTest, RenderSvgTest005, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct SvgPathComponent and RenderSvgPath. + */ + auto component = AceType::MakeRefPtr(); + component->SetD("M20,50 C20,-50 180,150 180,50 C180,-50 20,150 20,50 z"); + auto mockContext = MockRenderCommon::GetMockContext(); + auto render = AceType::MakeRefPtr(); + render->Attach(mockContext); + + /** + * @tc.steps: step2. call the Update interface of renderSvgPath. + * @tc.expected: step2. renderSvgPath is setted as needLayout. + */ + render->Update(component); + EXPECT_TRUE(render->NeedLayout()); + ASSERT_TRUE(render->GetD() == "M20,50 C20,-50 180,150 180,50 C180,-50 20,150 20,50 z"); + render->PerformLayout(); +} + +/** + * @tc.name: RenderSvgTest006 + * @tc.desc: Verify the Update Interface of RenderSvgLine work correctly with svg line component. + * @tc.type: FUNC + * @tc.require: AR000FL0TL + * @tc.author: chenlien + */ +HWTEST_F(RenderSvgTest, RenderSvgTest006, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct SvgLineComponent and RenderSvgLine. + */ + auto component = AceType::MakeRefPtr(); + component->SetX1(Dimension(10.0)); + component->SetY1(Dimension(20.0)); + component->SetX2(Dimension(60.0)); + component->SetY2(Dimension(50.0)); + auto mockContext = MockRenderCommon::GetMockContext(); + auto render = AceType::MakeRefPtr(); + render->Attach(mockContext); + + /** + * @tc.steps: step2. call the Update interface of renderSvgLine. + * @tc.expected: step2. renderSvgLine is setted as needLayout. + */ + render->Update(component); + EXPECT_TRUE(render->NeedLayout()); + EXPECT_NEAR(render->GetX1().Value(), 10.0, FLT_EPSILON); + EXPECT_NEAR(render->GetY1().Value(), 20.0, FLT_EPSILON); + EXPECT_NEAR(render->GetX2().Value(), 60.0, FLT_EPSILON); + EXPECT_NEAR(render->GetY2().Value(), 50.0, FLT_EPSILON); + render->PerformLayout(); +} + +/** + * @tc.name: RenderSvgTest007 + * @tc.desc: Verify the Update Interface of RenderSvgPolyline work correctly with svg polyline component. + * @tc.type: FUNC + * @tc.require: AR000FL0TM + * @tc.author: chenlien + */ +HWTEST_F(RenderSvgTest, RenderSvgTest007, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct SvgPolygonComponent and RenderSvgPolygon. + */ + auto component = AceType::MakeRefPtr(); + component->SetPoints("0,400 60,325 70,375 100,300"); + auto mockContext = MockRenderCommon::GetMockContext(); + auto render = AceType::MakeRefPtr(); + render->Attach(mockContext); + + /** + * @tc.steps: step2. call the Update interface of renderSvgPolygon. + * @tc.expected: step2. renderSvgPolygon is setted as needLayout. + */ + render->Update(component); + EXPECT_TRUE(render->NeedLayout()); + ASSERT_TRUE(render->GetPoints() == "0,400 60,325 70,375 100,300"); + render->PerformLayout(); +} + +/** + * @tc.name: RenderSvgTest008 + * @tc.desc: Verify the Update Interface of RenderSvgPolygon work correctly with svg polygon component. + * @tc.type: FUNC + * @tc.require: AR000FL0TN + * @tc.author: chenlien + */ +HWTEST_F(RenderSvgTest, RenderSvgTest008, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct SvgPolylineComponent and RenderSvgPolygon. + */ + auto component = AceType::MakeRefPtr(); + component->SetPoints("0,400 60,325 70,375 100,300"); + auto mockContext = MockRenderCommon::GetMockContext(); + auto render = AceType::MakeRefPtr(); + render->Attach(mockContext); + + /** + * @tc.steps: step2. call the Update interface of renderSvgPolygon. + * @tc.expected: step2. renderSvgPolygon is setted as needLayout. + */ + render->Update(component); + EXPECT_TRUE(render->NeedLayout()); + ASSERT_TRUE(render->GetPoints() == "0,400 60,325 70,375 100,300"); + render->PerformLayout(); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/swiper/BUILD.gn b/frameworks/core/components/test/unittest/swiper/BUILD.gn new file mode 100644 index 00000000..3c15bac4 --- /dev/null +++ b/frameworks/core/components/test/unittest/swiper/BUILD.gn @@ -0,0 +1,237 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/backenduicomponent/swiper" + +ohos_unittest("SwiperCreatorTest") { + module_out_path = module_output_path + + sources = [ "swiper_creator_test.cpp" ] + + configs = [ + ":config_json_creator_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "$ace_root/frameworks/core/components/test:json", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + deps += [ "$ace_root/frameworks/bridge:js_framework_ohos" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_json_creator_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +ohos_unittest("SwiperComponentTest") { + module_out_path = module_output_path + + sources = [ + # accessibility + "$ace_root/frameworks/core/accessibility/accessibility_node.cpp", + + # animation + "$ace_root/frameworks/core/animation/animator.cpp", + "$ace_root/frameworks/core/animation/anticipate_curve.cpp", + "$ace_root/frameworks/core/animation/cubic_curve.cpp", + "$ace_root/frameworks/core/animation/curves.cpp", + "$ace_root/frameworks/core/animation/scheduler.cpp", + "$ace_root/frameworks/core/animation/spring_model.cpp", + "$ace_root/frameworks/core/animation/spring_motion.cpp", + + # common + "$ace_root/frameworks/core/common/ace_engine.cpp", + "$ace_root/frameworks/core/common/event_manager.cpp", + "$ace_root/frameworks/core/common/focus_animation_manager.cpp", + "$ace_root/frameworks/core/common/font_loader.cpp", + "$ace_root/frameworks/core/common/font_manager.cpp", + "$ace_root/frameworks/core/common/window.cpp", + "$ace_root/frameworks/core/components/test/json/json_frontend.cpp", + "$ace_root/frameworks/core/pipeline/pipeline_context.cpp", + + #base + "$ace_root/adapter/common/cpp/thread_util.cpp", + "$ace_root/adapter/ohos/osal/log_wrapper.cpp", + "$ace_root/frameworks/base/geometry/matrix4.cpp", + "$ace_root/frameworks/base/log/dump_log.cpp", + "$ace_root/frameworks/base/thread/background_task_executor.cpp", + "$ace_root/frameworks/base/utils/base_id.cpp", + + # components + "$ace_root/frameworks/core/components/box/box_component.cpp", + "$ace_root/frameworks/core/components/display/display_component.cpp", + "$ace_root/frameworks/core/components/overlay/overlay_component.cpp", + "$ace_root/frameworks/core/components/page/page_component.cpp", + "$ace_root/frameworks/core/components/root/root_component.cpp", + "$ace_root/frameworks/core/components/text/text_component.cpp", + "$ace_root/frameworks/core/pipeline/base/component.cpp", + "$ace_root/frameworks/core/pipeline/base/composed_component.cpp", + + # elements + "$ace_root/frameworks/core/components/bubble/bubble_element.cpp", + "$ace_root/frameworks/core/components/display/display_element.cpp", + "$ace_root/frameworks/core/components/flex/flex_element.cpp", + "$ace_root/frameworks/core/components/page/page_element.cpp", + "$ace_root/frameworks/core/components/page_transition/page_transition_element.cpp", + "$ace_root/frameworks/core/components/root/root_element.cpp", + "$ace_root/frameworks/core/components/stack/stack_element.cpp", + "$ace_root/frameworks/core/components/stage/stage_element.cpp", + "$ace_root/frameworks/core/components/swiper/swiper_element.cpp", + "$ace_root/frameworks/core/components/transition/transition_element.cpp", + "$ace_root/frameworks/core/components/tween/tween_element.cpp", + "$ace_root/frameworks/core/pipeline/base/component_group_element.cpp", + "$ace_root/frameworks/core/pipeline/base/composed_element.cpp", + "$ace_root/frameworks/core/pipeline/base/element.cpp", + "$ace_root/frameworks/core/pipeline/base/render_element.cpp", + "$ace_root/frameworks/core/pipeline/base/sole_child_element.cpp", + + # others + "$ace_root/frameworks/core/event/back_end_event_manager.cpp", + "$ace_root/frameworks/core/event/multimodal/multimodal_manager.cpp", + "$ace_root/frameworks/core/event/multimodal/multimodal_scene.cpp", + + # focus + "$ace_root/frameworks/core/focus/focus_node.cpp", + + # gestures + "$ace_root/frameworks/core/gestures/click_recognizer.cpp", + "$ace_root/frameworks/core/gestures/drag_recognizer.cpp", + "$ace_root/frameworks/core/gestures/gesture_recognizer.cpp", + "$ace_root/frameworks/core/gestures/gesture_referee.cpp", + "$ace_root/frameworks/core/gestures/raw_recognizer.cpp", + "$ace_root/frameworks/core/gestures/velocity_tracker.cpp", + + # image + "$ace_root/frameworks/core/image/flutter_image_cache.cpp", + "$ace_root/frameworks/core/image/image_cache.cpp", + + # layout + "$ace_root/frameworks/core/components/common/layout/grid_column_info.cpp", + "$ace_root/frameworks/core/components/common/layout/grid_container_info.cpp", + "$ace_root/frameworks/core/components/common/layout/grid_system_manager.cpp", + + # properties + "$ace_root/frameworks/core/components/box/render_box.cpp", + "$ace_root/frameworks/core/components/common/properties/alignment.cpp", + "$ace_root/frameworks/core/components/common/properties/border.cpp", + "$ace_root/frameworks/core/components/common/properties/border_edge.cpp", + "$ace_root/frameworks/core/components/common/properties/color.cpp", + "$ace_root/frameworks/core/components/common/properties/decoration.cpp", + "$ace_root/frameworks/core/components/common/properties/edge.cpp", + "$ace_root/frameworks/core/components/common/properties/page_transition_option.cpp", + "$ace_root/frameworks/core/components/common/properties/scroll_bar.cpp", + "$ace_root/frameworks/core/components/common/properties/text_style.cpp", + + # rendering + "$ace_root/frameworks/core/common/vibrator/vibrator_proxy.cpp", + "$ace_root/frameworks/core/components/box/render_box_base.cpp", + "$ace_root/frameworks/core/components/bubble/render_bubble.cpp", + "$ace_root/frameworks/core/components/display/render_display.cpp", + "$ace_root/frameworks/core/components/flex/render_flex.cpp", + "$ace_root/frameworks/core/components/focus_animation/render_focus_animation.cpp", + "$ace_root/frameworks/core/components/refresh/render_refresh.cpp", + "$ace_root/frameworks/core/components/root/render_root.cpp", + "$ace_root/frameworks/core/components/scroll/render_multi_child_scroll.cpp", + "$ace_root/frameworks/core/components/scroll/render_scroll.cpp", + "$ace_root/frameworks/core/components/scroll/render_single_child_scroll.cpp", + "$ace_root/frameworks/core/components/scroll/scroll_bar_controller.cpp", + "$ace_root/frameworks/core/components/stack/render_stack.cpp", + "$ace_root/frameworks/core/components/stage/render_stage.cpp", + "$ace_root/frameworks/core/components/swiper/render_swiper.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/mock_flutter_font_manager.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/mock_render_node_factory.cpp", + "$ace_root/frameworks/core/components/text/render_text.cpp", + "$ace_root/frameworks/core/components/text_span/render_text_span.cpp", + "$ace_root/frameworks/core/components/transform/render_transform.cpp", + "$ace_root/frameworks/core/pipeline/base/render_node.cpp", + + # theme + "$ace_root/frameworks/core/components/theme/app_theme.cpp", + "$ace_root/frameworks/core/components/theme/theme_attributes.cpp", + "$ace_root/frameworks/core/components/theme/theme_constants.cpp", + "$ace_root/frameworks/core/components/theme/theme_manager.cpp", + "$ace_root/frameworks/core/components/theme/theme_utils.cpp", + "$root_out_dir/ace/framework/core/components/theme/theme_constants_default.cpp", + "render_swiper_test.cpp", + + #mock + "$ace_root/frameworks/core/components/test/unittest/mock/ace_trace_mock.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/event_report_mock.cpp", + "$ace_root/frameworks/core/mock/mock_ace_application_info.cpp", + "$ace_root/frameworks/core/mock/mock_system_properties.cpp", + "$ace_root/frameworks/core/mock/mock_watch_dog.cpp", + ] + + # add sources only needed by wearable like watch. + if (is_wearable_product) { + sources += [ "$root_out_dir/ace/framework/core/components/theme/theme_constants_watch.cpp" ] + } + + # add sources needed by phone and TV. wearable like watch do not need them + if (!is_wearable_product) { + sources += [ + # theme + "$root_out_dir/ace/framework/core/components/theme/theme_constants_tv.cpp", + ] + } + + configs = [ + ":config_render_swiper_test", + "$ace_root:ace_test_config", + "$flutter_root:flutter_config", + ] + + deps = [ + "$ace_root/frameworks/core/components/theme:build_theme_code", + "$flutter_root:ace_skia_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + external_deps = [ "hiviewdfx_hilog_native:libhilog" ] + deps += [ "//base/global/resmgr_standard/frameworks/resmgr:global_resmgr" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_render_swiper_test") { + visibility = [ ":*" ] + include_dirs = [ + "//utils/native/base/include", + "$ace_root", + ] +} + +group("unittest") { + testonly = true + deps = [ + ":SwiperComponentTest", + ":SwiperCreatorTest", + ] +} diff --git a/frameworks/core/components/test/unittest/swiper/render_swiper_test.cpp b/frameworks/core/components/test/unittest/swiper/render_swiper_test.cpp new file mode 100644 index 00000000..3f24c986 --- /dev/null +++ b/frameworks/core/components/test/unittest/swiper/render_swiper_test.cpp @@ -0,0 +1,1166 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "adapter/ohos/osal/fake_asset_manager.h" +#include "adapter/ohos/osal/fake_task_executor.h" +#include "base/log/log.h" +#include "core/components/test/json/json_frontend.h" +#include "core/components/test/unittest/mock/mock_render_depend.h" +#include "core/mock/mock_resource_register.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +using SwiperEventCallback = std::function; +using UpdateSwiperCallback = std::function&)>; +const UpdateSwiperCallback EMPTY_CALLBAK; + +constexpr int32_t SURFACE_WIDTH = 1080; +constexpr int32_t SURFACE_HEIGHT = 2244; + +constexpr int64_t SEC_TO_NANOSEC = 1000000000; +constexpr int64_t MILLISEC_TO_MICROSEC = 1000; +constexpr int64_t VSYNC_INTERVAL_MILLISEC = 16; +constexpr int64_t VSYNC_INTERVAL_MICROSEC = VSYNC_INTERVAL_MILLISEC * MILLISEC_TO_MICROSEC; + +constexpr uint32_t SWIPER_CHILD_COUNT = 5; +constexpr int32_t FIRST_CHILD_INDEX = 0; +constexpr int32_t SECOND_CHILD_INDEX = FIRST_CHILD_INDEX + 1; +constexpr int32_t LAST_CHILD_INDEX = SWIPER_CHILD_COUNT - 1; +constexpr int32_t PENULTIMATE_CHILD_INDEX = LAST_CHILD_INDEX - 1; +constexpr int64_t SWIPETO_ANIMATION_TIME = 500; + +constexpr double SWIPER_WIDTH = 1080; +constexpr double SWIPER_HEIGHT = 1920; +constexpr double DRAG_OFFSET_MIN = 0.0; +constexpr double DRAG_OFFSET_MAX = 1.0; +constexpr double DRAG_OFFSET_MAX_NEGATIVE = -1.0; +constexpr double DRAG_OFFSET_SWITCH_DP = 14.0; + +const TouchPoint MOCK_DOWN_TOUCH_EVENT { 10, 540, 200, TouchType::DOWN }; +const TouchPoint MOCK_MOVE_TOUCH_EVENT { 10, 540, 200, TouchType::MOVE }; +const TouchPoint MOCK_UP_TOUCH_EVENT { 10, 540, 200, TouchType::UP }; +enum class DragDirection { + LEFT, + RIGHT, +}; + +int64_t GetTickCount() +{ + struct timespec ts; + clock_gettime(CLOCK_MONOTONIC, &ts); + return (ts.tv_sec * SEC_TO_NANOSEC + ts.tv_nsec); +} + +class TestSwiperEventHander : public MockEventHandler { +public: + explicit TestSwiperEventHander(SwiperEventCallback eventCallback) : eventCallback_(eventCallback) {}; + ~TestSwiperEventHander() = default; + + void HandleAsyncEvent(const EventMarker& eventMarker, const std::string& param) + { + if (eventCallback_) { + eventCallback_(eventMarker.GetData().eventId, param); + } + }; + +private: + SwiperEventCallback eventCallback_; +}; + +} // namespace + +class SwiperComponentTest : public testing::Test { +public: + static void SetUpTestCase() + { + GTEST_LOG_(INFO) << "SwiperComponentTest SetUpTestCase"; + } + + static void TearDownTestCase() + { + GTEST_LOG_(INFO) << "SwiperComponentTest TearDownTestCase"; + } + + void SetUp() + { + auto platformWindow = PlatformWindow::Create(nullptr); + auto window = std::make_unique(std::move(platformWindow)); + auto taskExecutor = Referenced::MakeRefPtr(); + auto assetManager = Referenced::MakeRefPtr(); + auto resRegister = Referenced::MakeRefPtr(); + frontend_ = Frontend::CreateDefault(); + context_ = AceType::MakeRefPtr( + std::move(window), taskExecutor, assetManager, resRegister, frontend_, 0); + + swiperChildren_.clear(); + hookRenderBox = [this](const RefPtr& box) { + box->Attach(context_); + swiperChildren_.push_back(box); + }; + } + void TearDown() {} + +protected: + RefPtr context_; + RefPtr frontend_; + std::vector> swiperChildren_; + void CreateAndRenderSwiper(UpdateSwiperCallback callback); + void CreateAndRenderSwiper(uint32_t childCount, UpdateSwiperCallback updateSwiper); + void DragSwiper(const DragDirection& dragDirection); + void WaitAndMockVsync(int64_t waitFor); +}; + +class SwiperIndicatorTest : public RenderSwiper { +public: + explicit SwiperIndicatorTest(const RefPtr& context) + { + std::list> componentChildren; + for (uint32_t i = 0; i < 10; i++) { + componentChildren.emplace_back(AceType::MakeRefPtr()); + } + + RefPtr swiperComponent = AceType::MakeRefPtr(componentChildren); + auto themeManager = AceType::MakeRefPtr(); + auto theme = themeManager->GetTheme(); + if (theme) { + auto indicator = AceType::MakeRefPtr(); + indicator->InitStyle(theme); + indicator->SetSize(Dimension(6.0)); + indicator->SetSelectedSize(Dimension(12.0)); + indicator->SetPressSize(Dimension(8.0)); + indicator->SetHoverSize(Dimension(12.0)); + indicator->SetHotZoneSize(Dimension(32.0)); + indicator->SetIndicatorPointPadding(Dimension(8.0)); + indicator->SetPressPointPadding(Dimension(10.0)); + indicator->SetStartEndPadding(Dimension(13.0)); + indicator->SetPressPadding(Dimension(12.0)); + swiperComponent->SetIndicator(indicator); + } + Attach(context); + Update(swiperComponent); + swiperWidth_ = SWIPER_WIDTH; + swiperHeight_ = SWIPER_HEIGHT; + scale_ = 1.0; + } + ~SwiperIndicatorTest() = default; + + static RefPtr CreateIndicatorTest(const RefPtr& context) + { + return AceType::MakeRefPtr(context); + } + + virtual void UpdateIndicator() + { + return; + } + + int32_t GetTargetIndex() const + { + return targetIndex_; + } + + double GetIndicatorHeadOffset() const + { + return indicatorHeadOffset_; + } + + double GetIndicatorTailOffset() const + { + return indicatorTailOffset_; + } + + double GetIndicatorPointOffset() const + { + return indicatorPointOffset_; + } + + double GetIndicatorAnimationDirect() const + { + return animationDirect_; + } + + void SetCurrentIndex(int32_t index) + { + currentIndex_ = index; + } + + SwiperIndicatorData& GetSwiperIndicatorData() + { + return swiperIndicatorData_; + } +}; + +void SwiperComponentTest::CreateAndRenderSwiper(uint32_t childCount, UpdateSwiperCallback updateSwiper) +{ + std::list> componentChildren; + for (uint32_t i = 0; i < childCount; i++) { + componentChildren.emplace_back(AceType::MakeRefPtr()); + } + RefPtr swiperComponent = AceType::MakeRefPtr(componentChildren); + + if (updateSwiper) { + updateSwiper(swiperComponent); + } + + auto pageComponent = AceType::MakeRefPtr(0, swiperComponent); + + context_->SetupRootElement(); + context_->PushPage(pageComponent); + context_->OnVsyncEvent(GetTickCount(), 0); + context_->OnSurfaceChanged(SURFACE_WIDTH, SURFACE_HEIGHT); +} + +void SwiperComponentTest::CreateAndRenderSwiper(UpdateSwiperCallback updateSwiper) +{ + CreateAndRenderSwiper(SWIPER_CHILD_COUNT, updateSwiper); +} + +void SwiperComponentTest::WaitAndMockVsync(int64_t waitFor) +{ + int64_t runningTime = 0; + do { + runningTime += VSYNC_INTERVAL_MILLISEC; + context_->OnVsyncEvent(GetTickCount(), 0); + usleep(VSYNC_INTERVAL_MICROSEC); + } while (runningTime < waitFor); + context_->OnVsyncEvent(GetTickCount(), 0); +} + +void SwiperComponentTest::DragSwiper(const DragDirection& dragDirection) +{ + context_->OnTouchEvent(MOCK_DOWN_TOUCH_EVENT); + TouchPoint touchPoint = MOCK_MOVE_TOUCH_EVENT; + double dragOffset = SWIPER_WIDTH * 0.1; // 0.1 mean darg 10% of the swiper width + for (int i = 0; i < 3; i++) { + context_->OnTouchEvent(touchPoint); + if (dragDirection == DragDirection::LEFT) { + touchPoint.x -= dragOffset; + } else if (dragDirection == DragDirection::RIGHT) { + touchPoint.x += dragOffset; + } + } + TouchPoint touchEndPoint = MOCK_UP_TOUCH_EVENT; + touchEndPoint.x = touchPoint.x; + context_->OnTouchEvent(touchEndPoint); +} + +/** + * @tc.name: RenderSwiper001 + * @tc.desc: Test when the swiper component is listening index changes, Can receive event callback when the index + * changes. + * @tc.type: FUNC + * @tc.require: AR000DAQVD + */ +HWTEST_F(SwiperComponentTest, RenderSwiper001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "SwiperComponentTest RenderSwiper001 start"; + + /** + * @tc.steps: step1. Build a swiper component tree containing subcomponents, and add event listeners in swiper. + */ + std::string changeEventId = "swiper_change_id"; + RefPtr eventHander = AceType::MakeRefPtr( + [this, changeEventId](const std::string& eventId, const std::string& param) { + GTEST_LOG_(INFO) << param; + std::string expectChangeResult = + std::string("{\"index\":").append(std::to_string(FIRST_CHILD_INDEX + 1).append("}")); + EXPECT_EQ(param, expectChangeResult); + EXPECT_EQ(eventId, changeEventId); + }); + + context_->RegisterEventHandler(eventHander); + CreateAndRenderSwiper([this, changeEventId](const RefPtr& swiper) { + swiper->SetChangeEventId(EventMarker(changeEventId)); + }); + + /** + * @tc.steps: step2. Swipe to changes component index. + * @tc.expected: step2. Event listener the index changes. + */ + DragSwiper(DragDirection::LEFT); + GTEST_LOG_(INFO) << "SwiperComponentTest RenderSwiper001 stop"; +} + +/** + * @tc.name: RenderSwiper002 + * @tc.desc: Test the invalid index value to create a swiper component. The component can be successfully created, but + * the initial swiper display page is the default value. + * @tc.type: FUNC + * @tc.require: AR000DAQVE + */ +HWTEST_F(SwiperComponentTest, RenderSwiper002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "SwiperComponentTest RenderSwiper002 start"; + + /** + * @tc.steps: step1. Build a swiper component tree containing sub-components, the index field of the swiper + * component is -1. + * @tc.expected: step1. swiper component displays the first page. + */ + CreateAndRenderSwiper([this](const RefPtr& swiper) { + int32_t invalidIndex = -1; + swiper->SetIndex(invalidIndex); + }); + EXPECT_EQ(swiperChildren_[FIRST_CHILD_INDEX]->GetPosition().GetX(), 0); + GTEST_LOG_(INFO) << "SwiperComponentTest RenderSwiper002 stop"; +} + +/** + * @tc.name: RenderSwiper003 + * @tc.desc: The test did not set the index property of the swiper component, and the initial display page of swiper was + * the first page. + * @tc.type: FUNC + * @tc.require: AR000DAQVE + */ +HWTEST_F(SwiperComponentTest, RenderSwiper003, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "SwiperComponentTest RenderSwiper003 start"; + + /** + * @tc.steps: step1. Build a swiper component tree containing subcomponents, and the swiper component not contain + * the index field. + * @tc.expected: step1. swiper component displays the first page. + */ + CreateAndRenderSwiper(EMPTY_CALLBAK); + EXPECT_EQ(swiperChildren_[FIRST_CHILD_INDEX]->GetPosition().GetX(), 0); + GTEST_LOG_(INFO) << "SwiperComponentTest RenderSwiper003 stop"; +} + +/** + * @tc.name: RenderSwiper004 + * @tc.desc: Test set the index property of the swiper component. The initial swiper display page is the page specified + * by index. + * @tc.type: FUNC + * @tc.require: AR000DAQVE + */ +HWTEST_F(SwiperComponentTest, RenderSwiper004, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "SwiperComponentTest RenderSwiper004 start"; + + /** + * @tc.steps: step1. Build a swiper component tree containing subcomponents, and the swiper component contains + * the index field. + * @tc.expected: step1. swiper component displays the page specified by index. + */ + uint32_t initIndex = 1; + RefPtr swiperController; + CreateAndRenderSwiper([this, initIndex, &swiperController](const RefPtr& swiper) mutable { + swiper->SetIndex(initIndex); + swiperController = swiper->GetSwiperController(); + }); + ASSERT_NE(swiperController, nullptr); + swiperController->SwipeTo(initIndex); + WaitAndMockVsync(SWIPETO_ANIMATION_TIME); + EXPECT_EQ(swiperChildren_[initIndex]->GetPosition().GetX(), 0); + GTEST_LOG_(INFO) << "SwiperComponentTest RenderSwiper004 stop"; +} + +/** + * @tc.name: RenderSwiper005 + * @tc.desc: Tests that when the component is set to play automatically and the playback duration is not set, the + * sub-component will be played backward according to the default duration. + * @tc.type: FUNC + * @tc.require: AR000DAQVF + */ +HWTEST_F(SwiperComponentTest, RenderSwiper005, TestSize.Level2) +{ + GTEST_LOG_(INFO) << "SwiperComponentTest RenderSwiper005 start"; + + /** + * @tc.steps: step1. Build a swiper component tree with sub-components. The swiper component contains the autoplay + * field and does not include the time interval field. + */ + CreateAndRenderSwiper([this](const RefPtr& swiper) { swiper->SetAutoPlay(true); }); + + /** + * @tc.steps: step2. Before the default playback duration interval, check the current display component index. + * @tc.expected: step2. The current display component index has not changed. + */ + EXPECT_EQ(swiperChildren_[FIRST_CHILD_INDEX]->GetPosition().GetX(), 0); + + /** + * @tc.steps: step3. After the default playback duration interval, check the current display component index. + * @tc.expected: step3. The current display component index is displayed as the second page. + */ + WaitAndMockVsync(DEFAULT_SWIPER_AUTOPLAY_INTERVAL); + WaitAndMockVsync(DEFAULT_SWIPER_ANIMATION_DURATION); + EXPECT_EQ(swiperChildren_[FIRST_CHILD_INDEX + 1]->GetPosition().GetX(), 0); + GTEST_LOG_(INFO) << "SwiperComponentTest RenderSwiper005 stop"; +} + +/** + * @tc.name: RenderSwiper006 + * @tc.desc: Test that when the component is set to play automatically and the playback duration is set, the + * sub-component will be played backwards according to the set duration. + * @tc.type: FUNC + * @tc.require: AR000DAQVF + */ +HWTEST_F(SwiperComponentTest, RenderSwiper006, TestSize.Level2) +{ + GTEST_LOG_(INFO) << "SwiperComponentTest RenderSwiper006 start"; + + /** + * @tc.steps: step1. Build a swiper component tree with sub-components. The swiper component contains the autoplay + * field and does not include the time interval field. + */ + double autoPlayInterval = 800; + CreateAndRenderSwiper([this, autoPlayInterval](const RefPtr& swiper) { + swiper->SetAutoPlay(true); + swiper->SetAutoPlayInterval(autoPlayInterval); + }); + + /** + * @tc.steps: step2. Before the specified playback duration interval, check the current display component index. + * @tc.expected: step2. The current display component index has not changed. + */ + EXPECT_EQ(swiperChildren_[FIRST_CHILD_INDEX]->GetPosition().GetX(), 0); + + /** + * @tc.steps: step3. After the specified playback duration interval, check the current display component index. + * @tc.expected: step3. The current display component index is displayed as the second page. + */ + WaitAndMockVsync(autoPlayInterval); + WaitAndMockVsync(DEFAULT_SWIPER_ANIMATION_DURATION); + EXPECT_EQ(swiperChildren_[FIRST_CHILD_INDEX + 1]->GetPosition().GetX(), 0); + GTEST_LOG_(INFO) << "SwiperComponentTest RenderSwiper006 stop"; +} + +/** + * @tc.name: RenderSwiper007 + * @tc.desc: Test that when the component support cyclic sliding, it can right slide from the first. + * @tc.type: FUNC + * @tc.require: AR000DAQVH + */ +HWTEST_F(SwiperComponentTest, RenderSwiper007, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "SwiperComponentTest RenderSwiper007 start"; + + /** + * @tc.steps: step1. Build a swiper component tree containing subcomponents, the loop field in the swiper is true. + */ + CreateAndRenderSwiper([this](const RefPtr& swiper) { + swiper->SetIndex(FIRST_CHILD_INDEX); + swiper->SetLoop(true); + }); + + /** + * @tc.steps: step2. Swipe right from the last one to the first. + * @tc.expected: step2. Swipe success. + */ + DragSwiper(DragDirection::RIGHT); + WaitAndMockVsync(DEFAULT_SWIPER_ANIMATION_DURATION); + EXPECT_EQ(swiperChildren_[SWIPER_CHILD_COUNT - 1]->GetPosition().GetX(), 0); + EXPECT_NE(swiperChildren_[0]->GetPosition().GetX(), 0); + GTEST_LOG_(INFO) << "SwiperComponentTest RenderSwiper007 stop"; +} + +/** + * @tc.name: RenderSwiper008 + * @tc.desc: Test that when the component support cyclic sliding, it can left slide from the last. + * @tc.require: AR000DAQVH + */ +HWTEST_F(SwiperComponentTest, RenderSwiper008, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "SwiperComponentTest RenderSwiper008 start"; + + /** + * @tc.steps: step1. Build a swiper component tree containing subcomponents, the loop field in the swiper is true. + */ + RefPtr swiperController; + CreateAndRenderSwiper([this, &swiperController](const RefPtr& swiper) mutable { + swiper->SetIndex(LAST_CHILD_INDEX); + swiper->SetLoop(true); + swiperController = swiper->GetSwiperController(); + }); + + /** + * @tc.steps: step2. Swipe left from the first one to the last. + * @tc.expected: step2. Swipe success. + */ + ASSERT_NE(swiperController, nullptr); + swiperController->SwipeTo(LAST_CHILD_INDEX); + WaitAndMockVsync(SWIPETO_ANIMATION_TIME); + DragSwiper(DragDirection::LEFT); + WaitAndMockVsync(DEFAULT_SWIPER_ANIMATION_DURATION); + EXPECT_EQ(swiperChildren_[FIRST_CHILD_INDEX]->GetPosition().GetX(), 0); + EXPECT_NE(swiperChildren_[LAST_CHILD_INDEX]->GetPosition().GetX(), 0); + GTEST_LOG_(INFO) << "SwiperComponentTest RenderSwiper008 stop"; +} + +/** + * @tc.name: RenderSwiper009 + * @tc.desc: Test that when the component does not support cyclic sliding, it cannot right slide from the first. + * @tc.type: FUNC + * @tc.require: AR000DAQVH + */ +HWTEST_F(SwiperComponentTest, RenderSwiper009, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "SwiperComponentTest RenderSwiper009 start"; + + /** + * @tc.steps: step1. Build a swiper component tree containing subcomponents, the loop field in the swiper is false. + */ + CreateAndRenderSwiper([this](const RefPtr& swiper) { + swiper->SetIndex(FIRST_CHILD_INDEX); + swiper->SetLoop(false); + }); + + /** + * @tc.steps: step2. Swipe right. + * @tc.expected: step2. Swipe failed. + */ + DragSwiper(DragDirection::RIGHT); + EXPECT_EQ(swiperChildren_[FIRST_CHILD_INDEX]->GetPosition().GetX(), 0); + GTEST_LOG_(INFO) << "SwiperComponentTest RenderSwiper009 stop"; +} + +/** + * @tc.name: RenderSwiper010 + * @tc.desc: Test that when the component does not support cyclic sliding, it cannot left slide from the last. + * @tc.type: FUNC + * @tc.require: AR000DAQVH + */ +HWTEST_F(SwiperComponentTest, RenderSwiper010, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "SwiperComponentTest RenderSwiper010 start"; + + /** + * @tc.steps: step1. Build a swiper component tree containing subcomponents, the loop field in the swiper is false. + */ + RefPtr swiperController; + CreateAndRenderSwiper([this, &swiperController](const RefPtr& swiper) mutable { + swiper->SetIndex(LAST_CHILD_INDEX); + swiper->SetLoop(false); + swiperController = swiper->GetSwiperController(); + }); + + /** + * @tc.steps: step2. Swipe left. + * @tc.expected: step2. Swipe failed. + */ + ASSERT_NE(swiperController, nullptr); + swiperController->SwipeTo(LAST_CHILD_INDEX); + WaitAndMockVsync(SWIPETO_ANIMATION_TIME); + DragSwiper(DragDirection::LEFT); + EXPECT_EQ(swiperChildren_[LAST_CHILD_INDEX]->GetPosition().GetX(), 0); + GTEST_LOG_(INFO) << "SwiperComponentTest RenderSwiper010 stop"; +} + +/** + * @tc.name: RenderSwiper011 + * @tc.desc: Test when the number of swiper sub-components is only 1, the component is set to cyclic sliding and will + * not be cyclic sliding. + * @tc.type: FUNC + * @tc.require: AR000DAQVH + */ +HWTEST_F(SwiperComponentTest, RenderSwiper011, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "SwiperComponentTest RenderSwiper011 start"; + + /** + * @tc.steps: step1. Build a swiper component tree containing subcomponents, the loop field in the swiper is true. + */ + CreateAndRenderSwiper(1, EMPTY_CALLBAK); + + /** + * @tc.steps: step2. Swipe right. + * @tc.expected: step2. Swipe failed. + */ + DragSwiper(DragDirection::RIGHT); + EXPECT_EQ(swiperChildren_[FIRST_CHILD_INDEX]->GetPosition().GetX(), 0); + WaitAndMockVsync(DEFAULT_SWIPER_ANIMATION_DURATION); + EXPECT_EQ(swiperChildren_[FIRST_CHILD_INDEX]->GetPosition().GetX(), 0); + + /** + * @tc.steps: step3. Swipe left. + * @tc.expected: step3. Swipe failed. + */ + DragSwiper(DragDirection::LEFT); + EXPECT_EQ(swiperChildren_[FIRST_CHILD_INDEX]->GetPosition().GetX(), 0); + WaitAndMockVsync(DEFAULT_SWIPER_ANIMATION_DURATION); + EXPECT_EQ(swiperChildren_[FIRST_CHILD_INDEX]->GetPosition().GetX(), 0); + GTEST_LOG_(INFO) << "SwiperComponentTest RenderSwiper011 stop"; +} + +/** + * @tc.name: RenderSwiper012 + * @tc.desc: Test that when the component does not support cyclic sliding, it cannot left slide from the last. + * @tc.type: FUNC + * @tc.require: AR000DAQVI + */ +HWTEST_F(SwiperComponentTest, RenderSwiper012, TestSize.Level2) +{ + GTEST_LOG_(INFO) << "SwiperComponentTest RenderSwiper012 start"; + + /** + * @tc.steps: step1. Build a swiper component tree with subcomponents, and the swiper component contains the + * duration field. + */ + double animationDuration = 1000; + CreateAndRenderSwiper( + [this, animationDuration](const RefPtr& swiper) { swiper->SetDuration(animationDuration); }); + + /** + * @tc.steps: step2. Swipe to left, check animation execution results. + * @tc.expected: step2. Animation execution is incomplete and does not reach the destination. + */ + DragSwiper(DragDirection::LEFT); + EXPECT_NE(swiperChildren_[FIRST_CHILD_INDEX + 1]->GetPosition().GetX(), 0); + + /** + * @tc.steps: step3. After duration which set by step1, check animation execution results. + * @tc.expected: step3. Animation execution is complete and reach the destination. + */ + WaitAndMockVsync(animationDuration); + EXPECT_NE(swiperChildren_[FIRST_CHILD_INDEX]->GetPosition().GetX(), 0); + EXPECT_EQ(swiperChildren_[FIRST_CHILD_INDEX + 1]->GetPosition().GetX(), 0); + GTEST_LOG_(INFO) << "SwiperComponentTest RenderSwiper012 stop"; +} + +/** + * @tc.name: RenderSwiper013 + * @tc.desc: Test component can be extended to a specified page other than the current page through the swipeTo + * interface + * @tc.type: FUNC + * @tc.require: AR000DAQVE + */ +HWTEST_F(SwiperComponentTest, RenderSwiper013, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "SwiperComponentTest RenderSwiper013 start"; + /** + * @tc.steps: step1. Build a swiper component tree with subcomponents. + */ + RefPtr swiperController; + CreateAndRenderSwiper([this, &swiperController](const RefPtr& swiper) mutable { + swiperController = swiper->GetSwiperController(); + }); + + /** + * @tc.steps: step2. Get swiperController and call the controller's swipeTo interface to jump to the last page. + */ + ASSERT_NE(swiperController, nullptr); + swiperController->SwipeTo(LAST_CHILD_INDEX); + WaitAndMockVsync(SWIPETO_ANIMATION_TIME); + /** + * @tc.steps: step3. View the current page index. + * @tc.expected: step3. The current page is on the last page. + */ + EXPECT_EQ(swiperChildren_[LAST_CHILD_INDEX]->GetPosition().GetX(), 0); + GTEST_LOG_(INFO) << "SwiperComponentTest RenderSwiper013 stop"; +} + +/** + * @tc.name: RenderSwiper014 + * @tc.desc: Test component can be extended to jump to next page circular through the showNext interface. + * @tc.type: FUNC + * @tc.require: AR000E0LJT + */ +HWTEST_F(SwiperComponentTest, RenderSwiper014, TestSize.Level1) +{ + /** + * @tc.steps: step1. Build a swiper component tree with subcomponents and set current index to penultimate index. + */ + RefPtr swiperController; + CreateAndRenderSwiper([this, &swiperController](const RefPtr& swiper) mutable { + swiperController = swiper->GetSwiperController(); + swiper->SetIndex(PENULTIMATE_CHILD_INDEX); + }); + + /** + * @tc.steps: step2. Get swiperController and call the controller's showNext interface to jump to the last page. + */ + ASSERT_NE(swiperController, nullptr); + swiperController->SwipeTo(PENULTIMATE_CHILD_INDEX); + WaitAndMockVsync(SWIPETO_ANIMATION_TIME); + swiperController->ShowNext(); + WaitAndMockVsync(SWIPETO_ANIMATION_TIME); + + /** + * @tc.steps: step3. View the current page index and call the controller's showNext interface to jump to the first + * page. + * @tc.expected: step3. The current page is on the last page. + */ + EXPECT_EQ(swiperChildren_[LAST_CHILD_INDEX]->GetPosition().GetX(), 0); + swiperController->ShowNext(); + WaitAndMockVsync(SWIPETO_ANIMATION_TIME); + + /** + * @tc.steps: step4. View the current page index. + * @tc.expected: step4. The current page is on the first page. + */ + EXPECT_EQ(swiperChildren_[FIRST_CHILD_INDEX]->GetPosition().GetX(), 0); +} + +/** + * @tc.name: RenderSwiper015 + * @tc.desc: Test component can be extended to jump to previous page circular through the showPrevious interface. + * @tc.type: FUNC + * @tc.require: AR000E0LJU + */ +HWTEST_F(SwiperComponentTest, RenderSwiper015, TestSize.Level1) +{ + /** + * @tc.steps: step1. Build a swiper component tree with subcomponents and set current index to second index. + */ + RefPtr swiperController; + CreateAndRenderSwiper([this, &swiperController](const RefPtr& swiper) mutable { + swiperController = swiper->GetSwiperController(); + swiper->SetIndex(SECOND_CHILD_INDEX); + }); + + /** + * @tc.steps: step2. Get swiperController and call the controller's showPrevious interface to jump to the first + * page. + */ + ASSERT_NE(swiperController, nullptr); + swiperController->SwipeTo(SECOND_CHILD_INDEX); + WaitAndMockVsync(SWIPETO_ANIMATION_TIME); + swiperController->ShowPrevious(); + WaitAndMockVsync(SWIPETO_ANIMATION_TIME); + + /** + * @tc.steps: step3. View the current page index and call the controller's showPrevious interface to jump to the + * last page. + * @tc.expected: step3. The current page is on the first page. + */ + EXPECT_EQ(swiperChildren_[FIRST_CHILD_INDEX]->GetPosition().GetX(), 0); + swiperController->ShowPrevious(); + WaitAndMockVsync(SWIPETO_ANIMATION_TIME); + + /** + * @tc.steps: step4. View the current page index. + * @tc.expected: step4. The current page is on the last page. + */ + EXPECT_EQ(swiperChildren_[LAST_CHILD_INDEX]->GetPosition().GetX(), 0); +} + +/** + * @tc.name: Indicator001 + * @tc.desc: Test animation of indicator move to the next page. + * @tc.type: FUNC + * @tc.require: AR000F3CC1 AR000F3CC5 + */ +HWTEST_F(SwiperComponentTest, Indicator001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Build a swiper render, init animation resouce. + */ + RefPtr swiperIndicator = SwiperIndicatorTest::CreateIndicatorTest(context_); + + /** + * @tc.steps: step2. indicator start moving animation, set index from 0 to 1. + */ + swiperIndicator->StartIndicatorAnimation(0, 1); + + /** + * @tc.steps: step3. View the current indicator offset. + * @tc.expected: step3. check the offsets of indicator, value is in range of [0.0, 1.0). + */ + double headOffset = swiperIndicator->GetIndicatorHeadOffset(); + double pointOffset = swiperIndicator->GetIndicatorPointOffset(); + double tailOffset = swiperIndicator->GetIndicatorTailOffset(); + EXPECT_TRUE(headOffset >= DRAG_OFFSET_MIN && headOffset < DRAG_OFFSET_MAX); + EXPECT_TRUE(tailOffset >= DRAG_OFFSET_MIN && tailOffset < DRAG_OFFSET_MAX); + EXPECT_TRUE(pointOffset >= DRAG_OFFSET_MIN && pointOffset < DRAG_OFFSET_MAX); + EXPECT_EQ(swiperIndicator->GetIndicatorAnimationDirect(), DRAG_OFFSET_MAX); + swiperIndicator->StopIndicatorAnimation(); +} + +/** + * @tc.name: Indicator002 + * @tc.desc: Test the offset of move indicator. + * @tc.type: FUNC + * @tc.require: AR000F3CC1 AR000F3CC5 + */ +HWTEST_F(SwiperComponentTest, Indicator002, TestSize.Level0) +{ + /** + * @tc.steps: step1. Build a swiper render, init animation resouce. + */ + RefPtr swiperIndicator = SwiperIndicatorTest::CreateIndicatorTest(context_); + + /** + * @tc.steps: step2. move indicator -10.0dp, set index from 0 to 1. + */ + swiperIndicator->MoveIndicator(1, -10.0, false); + + /** + * @tc.steps: step3. View the current indicator offset. + * @tc.expected: step3. check the offsets of indicator, value is in range of (0.0, 1.0). + */ + double headOffset = swiperIndicator->GetIndicatorHeadOffset(); + double pointOffset = swiperIndicator->GetIndicatorPointOffset(); + double tailOffset = swiperIndicator->GetIndicatorTailOffset(); + EXPECT_TRUE(headOffset > DRAG_OFFSET_MIN && headOffset < DRAG_OFFSET_MAX); + EXPECT_TRUE(tailOffset > DRAG_OFFSET_MIN && tailOffset < DRAG_OFFSET_MAX); + EXPECT_TRUE(pointOffset > DRAG_OFFSET_MIN && pointOffset < DRAG_OFFSET_MAX); + EXPECT_EQ(swiperIndicator->GetIndicatorAnimationDirect(), DRAG_OFFSET_MAX); +} + +/** + * @tc.name: Indicator003 + * @tc.desc: Test animation of indicator move to the last page. + * @tc.type: FUNC + * @tc.require: AR000F3CC2 AR000F3CC5 + */ +HWTEST_F(SwiperComponentTest, Indicator003, TestSize.Level1) +{ + /** + * @tc.steps: step1. Build a swiper render, init animation resouce. + */ + RefPtr swiperIndicator = SwiperIndicatorTest::CreateIndicatorTest(context_); + + /** + * @tc.steps: step2. indicator start moving animation, set index from 1 to 0. + */ + swiperIndicator->StartIndicatorAnimation(1, 0); + + /** + * @tc.steps: step3. View the current indicator offset. + * @tc.expected: step3. check the offsets of indicator, value is in range of (-1.0, 0.0]. + */ + double headOffset = swiperIndicator->GetIndicatorHeadOffset(); + double pointOffset = swiperIndicator->GetIndicatorPointOffset(); + double tailOffset = swiperIndicator->GetIndicatorTailOffset(); + EXPECT_TRUE(headOffset <= DRAG_OFFSET_MIN && headOffset > DRAG_OFFSET_MAX_NEGATIVE); + EXPECT_TRUE(tailOffset <= DRAG_OFFSET_MIN && tailOffset > DRAG_OFFSET_MAX_NEGATIVE); + EXPECT_TRUE(pointOffset <= DRAG_OFFSET_MIN && pointOffset > DRAG_OFFSET_MAX_NEGATIVE); + EXPECT_EQ(swiperIndicator->GetIndicatorAnimationDirect(), DRAG_OFFSET_MAX_NEGATIVE); + swiperIndicator->StopIndicatorAnimation(); +} + +/** + * @tc.name: Indicator004 + * @tc.desc: Test the offset of move indicator. + * @tc.type: FUNC + * @tc.require: AR000F3CC2 AR000F3CC5 + */ +HWTEST_F(SwiperComponentTest, Indicator004, TestSize.Level0) +{ + /** + * @tc.steps: step1. Build a swiper render, init animation resouce. + */ + RefPtr swiperIndicator = SwiperIndicatorTest::CreateIndicatorTest(context_); + + /** + * @tc.steps: step2. move indicator 10.0dp, set index from 2 to 1. + */ + swiperIndicator->SetCurrentIndex(2); + swiperIndicator->MoveIndicator(1, 10.0, false); + + /** + * @tc.steps: step3. View the current indicator offset. + * @tc.expected: step3. check the offsets of indicator, value is in range of (-1.0, 0.0). + */ + double headOffset = swiperIndicator->GetIndicatorHeadOffset(); + double pointOffset = swiperIndicator->GetIndicatorPointOffset(); + double tailOffset = swiperIndicator->GetIndicatorTailOffset(); + EXPECT_TRUE(headOffset < DRAG_OFFSET_MIN && headOffset > DRAG_OFFSET_MAX_NEGATIVE); + EXPECT_TRUE(tailOffset < DRAG_OFFSET_MIN && tailOffset > DRAG_OFFSET_MAX_NEGATIVE); + EXPECT_TRUE(pointOffset < DRAG_OFFSET_MIN && pointOffset > DRAG_OFFSET_MAX_NEGATIVE); + EXPECT_EQ(swiperIndicator->GetIndicatorAnimationDirect(), DRAG_OFFSET_MAX_NEGATIVE); +} + +/** + * @tc.name: Indicator005 + * @tc.desc: Test the offset of forward dragging indicator. + * @tc.type: FUNC + * @tc.require: AR000F3CC3 AR000F3CC4 + */ +HWTEST_F(SwiperComponentTest, Indicator005, TestSize.Level0) +{ + /** + * @tc.steps: step1. Build a swiper render. + */ + RefPtr swiperIndicator = SwiperIndicatorTest::CreateIndicatorTest(context_); + // drag must after zoom completed. this command animation it. + swiperIndicator->StopZoomAnimation(); + + /** + * @tc.steps: step2. drag indicator less than 4.0dp. + * @tc.expected: step2. check the offsets of indicator, value is 0.0. + */ + swiperIndicator->DragIndicator(3.0); + EXPECT_EQ(swiperIndicator->GetIndicatorHeadOffset(), 0.0); + swiperIndicator->DragIndicator(1.0); + EXPECT_EQ(swiperIndicator->GetIndicatorHeadOffset(), 0.0); + + /** + * @tc.steps: step3. drag indicator more than 4.0dp. + * @tc.expected: step3. check the offsets of indicator, value is in range of (0.0, 1.0). + */ + swiperIndicator->DragIndicator(8.0); + double headOffset = swiperIndicator->GetIndicatorHeadOffset(); + double pointOffset = swiperIndicator->GetIndicatorPointOffset(); + double tailOffset = swiperIndicator->GetIndicatorTailOffset(); + EXPECT_TRUE(headOffset > DRAG_OFFSET_MIN && headOffset < DRAG_OFFSET_MAX); + EXPECT_TRUE(tailOffset > DRAG_OFFSET_MIN && tailOffset < DRAG_OFFSET_MAX); + EXPECT_TRUE(pointOffset > DRAG_OFFSET_MIN && pointOffset < DRAG_OFFSET_MAX); +} + +/** + * @tc.name: Indicator006 + * @tc.desc: Test the offset of reverse dragging indicator at edge position. + * @tc.type: FUNC + * @tc.require: AR000F3CC3 AR000F3CC4 + */ +HWTEST_F(SwiperComponentTest, Indicator006, TestSize.Level0) +{ + /** + * @tc.steps: step1. Build a swiper render. + */ + RefPtr swiperIndicator = SwiperIndicatorTest::CreateIndicatorTest(context_); + swiperIndicator->StopZoomAnimation(); + + /** + * @tc.steps: step2. drag indicator less than 4.0dp. + * @tc.expected: step2. check the offsets of indicator, value is 0.0. + */ + swiperIndicator->DragIndicator(-3.0); + EXPECT_EQ(swiperIndicator->GetIndicatorHeadOffset(), DRAG_OFFSET_MIN); + swiperIndicator->DragIndicator(-1.0); + EXPECT_EQ(swiperIndicator->GetIndicatorHeadOffset(), DRAG_OFFSET_MIN); + + /** + * @tc.steps: step3. drag indicator more than 4.0dp. + * @tc.expected: step3. check the offsets of indicator, value is 0.0. + */ + swiperIndicator->DragIndicator(-8.0); + double headOffset = swiperIndicator->GetIndicatorHeadOffset(); + double pointOffset = swiperIndicator->GetIndicatorPointOffset(); + double tailOffset = swiperIndicator->GetIndicatorTailOffset(); + EXPECT_EQ(headOffset, DRAG_OFFSET_MIN); + EXPECT_EQ(tailOffset, DRAG_OFFSET_MIN); + EXPECT_EQ(pointOffset, DRAG_OFFSET_MIN); +} + +/** + * @tc.name: Indicator007 + * @tc.desc: Test the offset of reverse dragging indicator at middle position. + * @tc.type: FUNC + * @tc.require: AR000F3CC3 AR000F3CC4 + */ +HWTEST_F(SwiperComponentTest, Indicator007, TestSize.Level0) +{ + /** + * @tc.steps: step1. Build a swiper render. + */ + RefPtr swiperIndicator = SwiperIndicatorTest::CreateIndicatorTest(context_); + swiperIndicator->SetCurrentIndex(2); + swiperIndicator->StopZoomAnimation(); + + /** + * @tc.steps: step2. drag indicator less than 4.0dp. + * @tc.expected: step2. check the offsets of indicator, value is 0.0. + */ + swiperIndicator->DragIndicator(-3.0); + EXPECT_EQ(swiperIndicator->GetIndicatorHeadOffset(), DRAG_OFFSET_MIN); + swiperIndicator->DragIndicator(-1.0); + EXPECT_EQ(swiperIndicator->GetIndicatorHeadOffset(), DRAG_OFFSET_MIN); + + /** + * @tc.steps: step3. drag indicator more than 4.0dp. + * @tc.expected: step3. check the offsets of indicator, value is in range of (-1.0, 0.0). + */ + swiperIndicator->DragIndicator(-8.0); + double headOffset = swiperIndicator->GetIndicatorHeadOffset(); + double pointOffset = swiperIndicator->GetIndicatorPointOffset(); + double tailOffset = swiperIndicator->GetIndicatorTailOffset(); + EXPECT_TRUE(headOffset < DRAG_OFFSET_MIN && headOffset > DRAG_OFFSET_MAX_NEGATIVE); + EXPECT_TRUE(tailOffset < DRAG_OFFSET_MIN && tailOffset > DRAG_OFFSET_MAX_NEGATIVE); + EXPECT_TRUE(pointOffset < DRAG_OFFSET_MIN && pointOffset > DRAG_OFFSET_MAX_NEGATIVE); +} + +/** + * @tc.name: Indicator008 + * @tc.desc: Test the center position of point is correct. + * @tc.type: FUNC + * @tc.require: AR000F3CC5 + */ +HWTEST_F(SwiperComponentTest, Indicator008, TestSize.Level0) +{ + /** + * @tc.steps: step1. Build a swiper render. + * @tc.expected: step1. check point position of indicator is 0.0. + */ + RefPtr swiperIndicator = SwiperIndicatorTest::CreateIndicatorTest(context_); + Offset center1 = swiperIndicator->GetSwiperIndicatorData().indicatorItemData[2].center; + EXPECT_EQ(center1.GetY(), DRAG_OFFSET_MIN); + + /** + * @tc.steps: step2. update indicator layout. + * @tc.expected: step2. check the point position of indicator is larger than 0.0. + */ + swiperIndicator->UpdateIndicatorLayout(); + Offset center2 = swiperIndicator->GetSwiperIndicatorData().indicatorItemData[2].center; + EXPECT_NE(center1.GetY(), center2.GetY()); + EXPECT_TRUE(center2.GetY() > DRAG_OFFSET_MIN); + + /** + * @tc.steps: step3. update indicator layout. + * @tc.expected: step3. check the point position of indicator is not changed. + */ + swiperIndicator->UpdateIndicatorLayout(); + Offset center3 = swiperIndicator->GetSwiperIndicatorData().indicatorItemData[2].center; + EXPECT_EQ(center2, center3); +} + +/** + * @tc.name: Indicator009 + * @tc.desc: Test the indicator offset can't be changed by drag when it is zoomming.. + * @tc.type: FUNC + * @tc.require: AR000F3CC5 + */ +HWTEST_F(SwiperComponentTest, Indicator009, TestSize.Level0) +{ + /** + * @tc.steps: step1. Build a swiper render, start zoom animation and set current index. + * @tc.expected: step1. check indicator head offset is 0.0. + */ + RefPtr swiperIndicator = SwiperIndicatorTest::CreateIndicatorTest(context_); + swiperIndicator->SetCurrentIndex(2); + swiperIndicator->StopZoomAnimation(); + swiperIndicator->StartZoomInAnimation(false); + double headOffset1 = swiperIndicator->GetIndicatorHeadOffset(); + EXPECT_EQ(headOffset1, DRAG_OFFSET_MIN); + + /** + * @tc.steps: step2. drag indicator more than 4.0dp. + * @tc.expected: step2. check indicator head offset is 0.0. + */ + swiperIndicator->DragIndicator(1.0); + swiperIndicator->DragIndicator(7.0); + double headOffset2 = swiperIndicator->GetIndicatorHeadOffset(); + EXPECT_EQ(headOffset2, DRAG_OFFSET_MIN); + + /** + * @tc.steps: step3. stop zoom animation and drag indicator more than 4.0dp. + * @tc.expected: step3. check indicator head offset is not 0.0. + */ + swiperIndicator->StopZoomAnimation(); + swiperIndicator->DragIndicator(1.0); + swiperIndicator->DragIndicator(7.0); + double headOffset3 = swiperIndicator->GetIndicatorHeadOffset(); + EXPECT_NE(headOffset3, DRAG_OFFSET_MIN); + + /** + * @tc.steps: step4. drag end. + * @tc.expected: step4. check indicator head offset is reset to 0.0. + */ + swiperIndicator->DragIndicatorEnd(); + double headOffset4 = swiperIndicator->GetIndicatorHeadOffset(); + EXPECT_EQ(headOffset4, DRAG_OFFSET_MIN); +} + +/** + * @tc.name: Indicator010 + * @tc.desc: Test the focus changed when indicator drag offset 14.0dp. + * @tc.type: FUNC + * @tc.require: AR000F3CC5 + */ +HWTEST_F(SwiperComponentTest, Indicator010, TestSize.Level0) +{ + /** + * @tc.steps: step1. Build a swiper render, and set current index. + * @tc.expected: step1. check indicator index is 2. + */ + RefPtr swiperIndicator = SwiperIndicatorTest::CreateIndicatorTest(context_); + swiperIndicator->SetCurrentIndex(2); + swiperIndicator->StopZoomAnimation(); + double currentIndex1 = swiperIndicator->GetCurrentIndex(); + EXPECT_EQ(currentIndex1, 2); + + /** + * @tc.steps: step2. drag indicator more than 14.0dp. + * @tc.expected: step2. check indicator index is 3. + */ + swiperIndicator->DragIndicator(1.0); + swiperIndicator->DragIndicator(DRAG_OFFSET_SWITCH_DP); + double currentIndex2 = swiperIndicator->GetCurrentIndex(); + EXPECT_EQ(currentIndex2, 3); +} + + +/** + * @tc.name: Indicator011 + * @tc.desc: Test the twice click event can't start new animation when indicator is in moving animation. + * @tc.type: FUNC + * @tc.require: AR000F3CC5 + */ +HWTEST_F(SwiperComponentTest, Indicator011, TestSize.Level0) +{ + /** + * @tc.steps: step1. Build a swiper render, set current index and start indicator animation from 2 to 3. + * @tc.expected: step1. check indicator target index is 3. + */ + RefPtr swiperIndicator = SwiperIndicatorTest::CreateIndicatorTest(context_); + swiperIndicator->SetCurrentIndex(2); + swiperIndicator->StopZoomAnimation(); + swiperIndicator->StartIndicatorAnimation(2, 3, false); + double targeIndex1 = swiperIndicator->GetTargetIndex(); + EXPECT_EQ(targeIndex1, 3); + + /** + * @tc.steps: step2. start indicator animation from 2 to 1. + * @tc.expected: step2. check indicator target index is 3. + */ + swiperIndicator->StartIndicatorAnimation(2, 1, false); + double targeIndex2 = swiperIndicator->GetTargetIndex(); + EXPECT_EQ(targeIndex2, 3); +} + +/** + * @tc.name: Indicator012 + * @tc.desc: Test the indicator moving distance when indicator moving animation cross multiple dots. + * @tc.type: FUNC + * @tc.require: AR000F3CC5 + */ +HWTEST_F(SwiperComponentTest, Indicator012, TestSize.Level0) +{ + /** + * @tc.steps: step1. Build a swiper render, set current index and start indicator animation from 2 to 3. + */ + RefPtr swiperIndicator = SwiperIndicatorTest::CreateIndicatorTest(context_); + swiperIndicator->SetCurrentIndex(2); + swiperIndicator->StopZoomAnimation(); + swiperIndicator->StartIndicatorAnimation(2, 3, false); + swiperIndicator->UpdateIndicatorOffset(2, 3, 0.5); + double offsetHead1 = swiperIndicator->GetIndicatorHeadOffset(); + double offsetTail1 = swiperIndicator->GetIndicatorTailOffset(); + double offsetPoint1 = swiperIndicator->GetIndicatorPointOffset(); + swiperIndicator->StopIndicatorAnimation(); + + /** + * @tc.steps: step2. start indicator animation from 2 to 5. + * @tc.expected: step2. point offfset is equal, but head and tail offset is multiple relation. + */ + swiperIndicator->SetCurrentIndex(2); + swiperIndicator->StartIndicatorAnimation(2, 5, false); + swiperIndicator->UpdateIndicatorOffset(2, 5, 0.5); + double offsetHead2 = swiperIndicator->GetIndicatorHeadOffset(); + double offsetTail2 = swiperIndicator->GetIndicatorTailOffset(); + double offsetPoint2 = swiperIndicator->GetIndicatorPointOffset(); + EXPECT_TRUE(NearZero(offsetPoint2 - offsetPoint1)); + EXPECT_TRUE(NearZero(offsetTail2 - 3 * offsetTail1)); + EXPECT_TRUE(NearZero(offsetHead2 - 3 * offsetHead1)); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/swiper/swiper_creator_test.cpp b/frameworks/core/components/test/unittest/swiper/swiper_creator_test.cpp new file mode 100644 index 00000000..2a290176 --- /dev/null +++ b/frameworks/core/components/test/unittest/swiper/swiper_creator_test.cpp @@ -0,0 +1,190 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "core/components/swiper/swiper_component.h" +#include "core/components/test/json/swiper_creator.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +RefPtr CreateSwiperComponent(const std::string& testJson) +{ + const auto dslBuf = reinterpret_cast(testJson.c_str()); + size_t dslLen = testJson.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + if (!component) { + return nullptr; + } + return AceType::DynamicCast(component); +} + +void CheckSwiperDefaultValue(const RefPtr& swiper) +{ + EXPECT_TRUE(swiper); + EXPECT_TRUE(swiper->GetChangeEventId().IsEmpty()); + EXPECT_EQ(swiper->GetIndex(), DEFAULT_SWIPER_CURRENT_INDEX); + EXPECT_FALSE(swiper->IsAutoPlay()); + EXPECT_EQ(swiper->GetAutoPlayInterval(), DEFAULT_SWIPER_AUTOPLAY_INTERVAL); + EXPECT_TRUE(swiper->IsLoop()); + EXPECT_EQ(swiper->GetDuration(), DEFAULT_SWIPER_ANIMATION_DURATION); + auto indicator = swiper->GetIndicator(); + EXPECT_TRUE(indicator); + EXPECT_EQ(swiper->GetAxis(), Axis::HORIZONTAL); +} + +} // namespace + +class SwiperCreatorTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); +}; + +void SwiperCreatorTest::SetUpTestCase() {} + +void SwiperCreatorTest::TearDownTestCase() {} + +void SwiperCreatorTest::SetUp() {} + +void SwiperCreatorTest::TearDown() {} + +/** + * @tc.name: SwiperCreator001 + * @tc.desc: Test parse swiper's field successfully from the right fields dsl json of swiper component. + * @tc.type: FUNC + * @tc.require: AR000DAQVD AR000DAQVE AR000DAQVF AR000DAQVH AR000DAQVG AR000DAQVI AR000DAQVJ + * @tc.author: kouxinxin + */ +HWTEST_F(SwiperCreatorTest, SwiperCreator001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct the json string with right fields, then create swiper component with the json. + * @tc.expected: step1. Swiper component successfully created, and the fields value same with the json fields. + */ + std::string dslJson = "{ " + " \"className\": \"Swiper\", " + " \"onChanged\": \"changeId001\", " + " \"index\": 1, " + " \"duration\": 500, " + " \"loop\": false, " + " \"autoPlay\": true, " + " \"autoPlayInterval\": 2000, " + " \"isVertical\": true, " + " \"showIndicator\": true, " + " \"indicatorColor\": { \"className\": \"Color\", \"value\": 255 }, " + " \"indicatorSelectedColor\": { \"className\": \"Color\", \"value\": 128 }, " + " \"indicatorSize\": 10, " + " \"indicatorSelectedSize\": 15, " + " \"indicatorTop\": 20, " + " \"indicatorLeft\": 20, " + " \"indicatorBottom\": 20, " + " \"indicatorRight\": 20, " + " \"child\": [{ " + " \"className\":\"Text\", " + " \"value\":\"Hi Ace\" " + " }, { " + " \"className\":\"Text\", " + " \"value\":\"Hi Ace\" " + " }] " + "} "; + + RefPtr swiper = CreateSwiperComponent(dslJson); + EXPECT_TRUE(swiper); + EXPECT_EQ(swiper->GetChangeEventId(), "changeId001"); + EXPECT_EQ(swiper->GetIndex(), 1U); + EXPECT_TRUE(swiper->IsAutoPlay()); + EXPECT_EQ(swiper->GetAutoPlayInterval(), 2000.0); + EXPECT_FALSE(swiper->IsLoop()); + EXPECT_EQ(swiper->GetDuration(), 500.0); + auto indicator = swiper->GetIndicator(); + EXPECT_TRUE(indicator); + if (indicator) { + EXPECT_EQ(indicator->GetSize().Value(), 10.0); + EXPECT_EQ(indicator->GetSelectedSize().Value(), 15.0); + EXPECT_EQ(indicator->GetTop().Value(), 20.0); + EXPECT_EQ(indicator->GetLeft().Value(), 20.0); + EXPECT_EQ(indicator->GetBottom().Value(), 20.0); + EXPECT_EQ(indicator->GetRight().Value(), 20.0); + Color indicatorColor(255U); + EXPECT_EQ(indicator->GetColor(), indicatorColor); + Color indicatorSelectedColor(128U); + EXPECT_EQ(indicator->GetSelectedColor(), indicatorSelectedColor); + } + EXPECT_EQ(swiper->GetAxis(), Axis::VERTICAL); +} + +/** + * @tc.name: SwiperCreator002 + * @tc.desc: Test parse swiper's field successfully from no field dsl json of swiper component. + * @tc.type: FUNC + * @tc.require: AR000DAQVD AR000DAQVE AR000DAQVF AR000DAQVH AR000DAQVG AR000DAQVI AR000DAQVJ + * @tc.author: kouxinxin + */ +HWTEST_F(SwiperCreatorTest, SwiperCreator002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct the json string with no fields, then create swiper component with the json. + * @tc.expected: step1. Swiper component successfully created, and the fields has default values. + */ + std::string dslJson = "{ \"className\": \"Swiper\" }"; + RefPtr swiper = CreateSwiperComponent(dslJson); + CheckSwiperDefaultValue(swiper); +} + +/** + * @tc.name: SwiperCreator003 + * @tc.desc: Test parse swiper's field successfully from the type error fields dsl json of swiper component. + * @tc.type: FUNC + * @tc.require: AR000DAQVD AR000DAQVE AR000DAQVF AR000DAQVH AR000DAQVG AR000DAQVI AR000DAQVJ + * @tc.author: kouxinxin + */ +HWTEST_F(SwiperCreatorTest, SwiperCreator003, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct the json string with type error fields, then create swiper component with the json. + * @tc.expected: step1. Swiper component successfully created, and the fields has default values. + */ + std::string dslJson = "{ " + " \"className\": \"Swiper\", " + " \"onChanged\": 1, " + " \"index\": \"1\", " + " \"duration\": \"500\", " + " \"loop\": \"false\", " + " \"autoPlay\": \"true\", " + " \"autoPlayInterval\": \"2000\", " + " \"isVertical\": \"true\", " + " \"showIndicator\": \"true\", " + " \"indicatorColor\": [], " + " \"indicatorSelectedColor\": [], " + " \"indicatorSize\": \"10\", " + " \"indicatorSelectedSize\": \"15\", " + " \"indicatorTop\": \"20\", " + " \"indicatorLeft\": \"20\", " + " \"indicatorBottom\": \"20\", " + " \"indicatorRight\": \"20\", " + " \"child\": {} " + "} "; + RefPtr swiper = CreateSwiperComponent(dslJson); + CheckSwiperDefaultValue(swiper); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/tabbar/BUILD.gn b/frameworks/core/components/test/unittest/tabbar/BUILD.gn new file mode 100644 index 00000000..0efb41d1 --- /dev/null +++ b/frameworks/core/components/test/unittest/tabbar/BUILD.gn @@ -0,0 +1,355 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +if (is_standard_system) { + module_output_path = "ace_engine_standard/backenduicomponent/tabbar" +} + +ohos_unittest("RenderTabBarTest") { + module_out_path = module_output_path + + sources = [ + "$ace_root/frameworks/core/components/test/json/json_frontend.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/mock_render_common.cpp", + "render_tab_bar_test.cpp", + "tabbar_test_utils.cpp", + ] + + configs = [ "$ace_root:ace_test_config" ] + + deps = [ + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "//third_party/googletest:gtest_main", + ] + + if (is_standard_system) { + configs += [ "//third_party/curl:curl_config" ] + deps += [ + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/curl:curl", + ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +ohos_unittest("RenderTabContentTest") { + module_out_path = module_output_path + + sources = [ + # accessibility + "$ace_root/frameworks/core/accessibility/accessibility_node.cpp", + "$ace_root/frameworks/core/animation/anticipate_curve.cpp", + "$ace_root/frameworks/core/animation/cubic_curve.cpp", + "$ace_root/frameworks/core/animation/curves.cpp", + "$ace_root/frameworks/core/animation/friction_motion.cpp", + "$ace_root/frameworks/core/animation/scroll_motion.cpp", + + # animation + "$ace_root/frameworks/core/animation/animator.cpp", + "$ace_root/frameworks/core/animation/scheduler.cpp", + "$ace_root/frameworks/core/animation/spring_model.cpp", + "$ace_root/frameworks/core/animation/spring_motion.cpp", + + # common + "$ace_root/frameworks/core/common/ace_engine.cpp", + "$ace_root/frameworks/core/common/event_manager.cpp", + "$ace_root/frameworks/core/common/focus_animation_manager.cpp", + "$ace_root/frameworks/core/common/font_manager.cpp", + "$ace_root/frameworks/core/common/window.cpp", + "$ace_root/frameworks/core/components/test/json/json_frontend.cpp", + "$ace_root/frameworks/core/mock/mock_watch_dog.cpp", + "$ace_root/frameworks/core/pipeline/pipeline_context.cpp", + + # components + "$ace_root/frameworks/core/components/box/box_component.cpp", + "$ace_root/frameworks/core/components/display/display_component.cpp", + "$ace_root/frameworks/core/components/overlay/overlay_component.cpp", + "$ace_root/frameworks/core/components/page/page_component.cpp", + "$ace_root/frameworks/core/components/root/root_component.cpp", + "$ace_root/frameworks/core/components/tab_bar/tab_bar_component.cpp", + "$ace_root/frameworks/core/components/tab_bar/tab_bar_indicator_component.cpp", + "$ace_root/frameworks/core/components/tab_bar/tab_bar_item_component.cpp", + "$ace_root/frameworks/core/components/tab_bar/tab_content_component.cpp", + "$ace_root/frameworks/core/components/tab_bar/tab_controller.cpp", + "$ace_root/frameworks/core/components/text/text_component.cpp", + "$ace_root/frameworks/core/pipeline/base/component.cpp", + "$ace_root/frameworks/core/pipeline/base/composed_component.cpp", + + # elements + "$ace_root/frameworks/core/components/bubble/bubble_element.cpp", + "$ace_root/frameworks/core/components/display/display_element.cpp", + "$ace_root/frameworks/core/components/flex/flex_element.cpp", + "$ace_root/frameworks/core/components/page/page_element.cpp", + "$ace_root/frameworks/core/components/page_transition/page_transition_element.cpp", + "$ace_root/frameworks/core/components/root/root_element.cpp", + "$ace_root/frameworks/core/components/stack/stack_element.cpp", + "$ace_root/frameworks/core/components/stage/stage_element.cpp", + "$ace_root/frameworks/core/components/tab_bar/tab_bar_element.cpp", + "$ace_root/frameworks/core/components/tab_bar/tab_content_element.cpp", + "$ace_root/frameworks/core/components/transition/transition_element.cpp", + "$ace_root/frameworks/core/components/tween/tween_element.cpp", + "$ace_root/frameworks/core/pipeline/base/component_group_element.cpp", + "$ace_root/frameworks/core/pipeline/base/composed_element.cpp", + "$ace_root/frameworks/core/pipeline/base/element.cpp", + "$ace_root/frameworks/core/pipeline/base/render_element.cpp", + "$ace_root/frameworks/core/pipeline/base/sole_child_element.cpp", + + # others + "$ace_root/frameworks/core/event/back_end_event_manager.cpp", + "$ace_root/frameworks/core/event/multimodal/multimodal_manager.cpp", + "$ace_root/frameworks/core/event/multimodal/multimodal_scene.cpp", + + # focus + "$ace_root/frameworks/core/focus/focus_node.cpp", + "$ace_root/frameworks/core/gestures/click_recognizer.cpp", + + # gestures + "$ace_root/frameworks/core/gestures/drag_recognizer.cpp", + "$ace_root/frameworks/core/gestures/gesture_recognizer.cpp", + "$ace_root/frameworks/core/gestures/gesture_referee.cpp", + "$ace_root/frameworks/core/gestures/raw_recognizer.cpp", + "$ace_root/frameworks/core/gestures/velocity_tracker.cpp", + + # image + "$ace_root/frameworks/core/image/flutter_image_cache.cpp", + "$ace_root/frameworks/core/image/image_cache.cpp", + + # layout + "$ace_root/frameworks/core/components/common/layout/grid_column_info.cpp", + "$ace_root/frameworks/core/components/common/layout/grid_container_info.cpp", + "$ace_root/frameworks/core/components/common/layout/grid_system_manager.cpp", + + # properties + "$ace_root/frameworks/core/components/box/render_box.cpp", + "$ace_root/frameworks/core/components/common/properties/alignment.cpp", + "$ace_root/frameworks/core/components/common/properties/border.cpp", + "$ace_root/frameworks/core/components/common/properties/border_edge.cpp", + "$ace_root/frameworks/core/components/common/properties/color.cpp", + "$ace_root/frameworks/core/components/common/properties/decoration.cpp", + "$ace_root/frameworks/core/components/common/properties/edge.cpp", + "$ace_root/frameworks/core/components/common/properties/page_transition_option.cpp", + "$ace_root/frameworks/core/components/common/properties/scroll_bar.cpp", + "$ace_root/frameworks/core/components/common/properties/text_style.cpp", + + # rendering + "$ace_root/frameworks/core/common/vibrator/vibrator_proxy.cpp", + "$ace_root/frameworks/core/components/box/render_box_base.cpp", + "$ace_root/frameworks/core/components/bubble/render_bubble.cpp", + "$ace_root/frameworks/core/components/display/render_display.cpp", + "$ace_root/frameworks/core/components/flex/render_flex.cpp", + "$ace_root/frameworks/core/components/flex/render_flex_item.cpp", + "$ace_root/frameworks/core/components/focus_animation/render_focus_animation.cpp", + "$ace_root/frameworks/core/components/refresh/render_refresh.cpp", + "$ace_root/frameworks/core/components/root/render_root.cpp", + "$ace_root/frameworks/core/components/scroll/render_multi_child_scroll.cpp", + "$ace_root/frameworks/core/components/scroll/render_scroll.cpp", + "$ace_root/frameworks/core/components/scroll/render_single_child_scroll.cpp", + "$ace_root/frameworks/core/components/scroll/scroll_bar_controller.cpp", + "$ace_root/frameworks/core/components/scroll/scrollable.cpp", + "$ace_root/frameworks/core/components/stack/render_stack.cpp", + "$ace_root/frameworks/core/components/stage/render_stage.cpp", + "$ace_root/frameworks/core/components/tab_bar/render_tab_bar.cpp", + "$ace_root/frameworks/core/components/tab_bar/render_tab_bar_item.cpp", + "$ace_root/frameworks/core/components/tab_bar/render_tab_content.cpp", + "$ace_root/frameworks/core/components/tab_bar/tab_bar_size_animation.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/mock_flutter_font_manager.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/mock_render_node_factory.cpp", + "$ace_root/frameworks/core/components/text/render_text.cpp", + "$ace_root/frameworks/core/components/transform/render_transform.cpp", + "$ace_root/frameworks/core/pipeline/base/related_node.cpp", + "$ace_root/frameworks/core/pipeline/base/render_node.cpp", + + # theme + "$ace_root/frameworks/core/components/theme/app_theme.cpp", + "$ace_root/frameworks/core/components/theme/theme_attributes.cpp", + "$ace_root/frameworks/core/components/theme/theme_constants.cpp", + "$ace_root/frameworks/core/components/theme/theme_manager.cpp", + "$ace_root/frameworks/core/components/theme/theme_utils.cpp", + "$ace_root/frameworks/core/mock/mock_ace_application_info.cpp", + "$root_out_dir/ace/framework/core/components/theme/theme_constants_default.cpp", + "render_tabcontent_test.cpp", + ] + + if (is_standard_system) { + sources += [ + "$ace_root/adapter/common/cpp/thread_util.cpp", + "$ace_root/adapter/ohos/osal/log_wrapper.cpp", + "$ace_root/frameworks/base/geometry/matrix4.cpp", + "$ace_root/frameworks/base/log/dump_log.cpp", + "$ace_root/frameworks/base/thread/background_task_executor.cpp", + "$ace_root/frameworks/base/utils/base_id.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/ace_trace_mock.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/event_report_mock.cpp", + "$ace_root/frameworks/core/mock/mock_system_properties.cpp", + ] + } + + # add sources only needed by wearable like watch. + if (is_wearable_product) { + sources += [ "$root_out_dir/ace/framework/core/components/theme/theme_constants_watch.cpp" ] + } + + # add sources needed by phone and TV. wearable like watch do not need them + if (!is_wearable_product) { + sources += [ + # theme + "$root_out_dir/ace/framework/core/components/theme/theme_constants_tv.cpp", + ] + } + + configs = [ + ":config_render_tabcontent_test", + "$ace_root:ace_test_config", + "$flutter_root:flutter_config", + ] + + deps = [ + "$ace_root/frameworks/core/components/theme:build_theme_code", + "$flutter_root:ace_skia_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + external_deps = [ "hiviewdfx_hilog_native:libhilog" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_render_tabcontent_test") { + visibility = [ ":*" ] + include_dirs = [ + "//utils/native/base/include", + "$ace_root", + ] +} + +ohos_unittest("TabContentCreatorTest") { + module_out_path = module_output_path + + sources = [ "tabcontent_creator_test.cpp" ] + + configs = [ + ":config_json_creator_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "$ace_root/frameworks/core/components/test:json", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + deps += [ "$ace_root/frameworks/bridge:js_framework_ohos" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_json_creator_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +ohos_unittest("TabBarElementTest") { + module_out_path = module_output_path + + sources = [ + "$ace_root/frameworks/core/components/test/unittest/mock/mock_render_common.cpp", + "tab_bar_element_test.cpp", + "tab_content_element_test.cpp", + ] + + configs = [ + ":config_tabbar_element_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "$ace_root/frameworks/core/components/test:json", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + configs += [ "//third_party/curl:curl_config" ] + deps += [ + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/curl:curl", + ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_tabbar_element_test") { + visibility = [ ":*" ] + include_dirs = [ + "//utils/native/base/include", + "$ace_root", + ] +} + +ohos_unittest("TabBarCreatorTest") { + module_out_path = module_output_path + + sources = [ + "tabbar_creator_test.cpp", + "tabbarindicator_creator_test.cpp", + ] + + configs = [ + ":config_json_creator_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "$ace_root/frameworks/core/components/test:json", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + deps += [ "$ace_root/frameworks/bridge:js_framework_ohos" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +group("unittest") { + testonly = true + + deps = [ + ":RenderTabBarTest", + ":RenderTabContentTest", + ":TabBarCreatorTest", + ":TabBarElementTest", + ":TabContentCreatorTest", + ] +} diff --git a/frameworks/core/components/test/unittest/tabbar/render_tab_bar_test.cpp b/frameworks/core/components/test/unittest/tabbar/render_tab_bar_test.cpp new file mode 100644 index 00000000..77e4cdc4 --- /dev/null +++ b/frameworks/core/components/test/unittest/tabbar/render_tab_bar_test.cpp @@ -0,0 +1,274 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "core/components/root/render_root.h" +#include "core/components/tab_bar/render_tab_bar.h" +#include "core/components/tab_bar/tab_bar_component.h" +#include "core/components/tab_bar/tab_controller.h" +#include "core/components/test/unittest/mock/mock_render_common.h" +#include "core/components/test/unittest/tabbar/tabbar_test_utils.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +constexpr int32_t CONTROLLER_ID = 12345; +constexpr int32_t SMALLTABSIZE = 3; +constexpr int32_t TABSIZE = 5; +constexpr double RECT_WIDTH = 1080.0; +const Size ITEM_SIZE = Size(250.0, 250.0); + +void AddItem(const RefPtr& tabBar, const RefPtr& context, int32_t size) +{ + auto flex = BoxFlex::FLEX_XY; + if (tabBar->GetMode() == TabBarMode::SCROLLABEL) { + flex = BoxFlex::FLEX_Y; + } + + for (int32_t i = 0; i < size; i++) { + auto renderBox = TabBarTestUtils::CreateRenderBox(ITEM_SIZE.Width(), ITEM_SIZE.Height(), flex); + renderBox->Attach(context); + tabBar->AddChild(renderBox); + } +} + +Offset GetItemOffset(TabBarMode mod, int index, double actualWidth) +{ + Offset offset; + double unitWidth = ITEM_SIZE.Width(); + if (mod == TabBarMode::FIXED) { + unitWidth = RECT_WIDTH / TABSIZE; + } else if (actualWidth < RECT_WIDTH) { + offset.SetX((RECT_WIDTH - actualWidth) / 2.0); + } + return Offset(index * unitWidth, 0.0) + offset; +} + +void CheckItemPosition(const RefPtr& tabBar, int size) +{ + auto mode = tabBar->GetMode(); + auto actualWidth = tabBar->GetActualWidth(); + const auto& children = tabBar->GetChildren(); + auto pos = children.begin(); + ++pos; + for (int index = 0; index < size; ++index) { + auto offset = (*pos)->GetPosition(); + ASSERT_EQ(offset, GetItemOffset(mode, index, actualWidth)); + ++pos; + } +} + +} // namespace + +class RenderTabBarTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; +}; + +void RenderTabBarTest::SetUpTestCase() {} +void RenderTabBarTest::TearDownTestCase() {} +void RenderTabBarTest::SetUp() {} +void RenderTabBarTest::TearDown() {} + +/** + * @tc.name: RenderTabBarTest001 + * @tc.desc: Verify TabBar PerformLayout when mod fix. + * @tc.type: FUNC + * @tc.require: AR000DAR2V + * @tc.author: jiangtao + */ +HWTEST_F(RenderTabBarTest, RenderTabBarTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct TabBarComponent with mod fixed. + * @tc.expected: step1. properties set correctly. + */ + TabBarMode mode = TabBarMode::FIXED; + RefPtr tabBarComponent = AceType::MakeRefPtr( + std::list>(), TabController::GetController(CONTROLLER_ID)); + tabBarComponent->SetMode(mode); + + /** + * @tc.steps: step2. construct RenderTabBar with 5 child. + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = TabBarTestUtils::CreateRenderRoot(); + RefPtr renderTabBar = AceType::MakeRefPtr(); + renderRoot->Attach(mockContext); + renderTabBar->Attach(mockContext); + renderRoot->AddChild(renderTabBar); + renderTabBar->Update(tabBarComponent); + AddItem(renderTabBar, mockContext, TABSIZE); + ASSERT_TRUE(renderTabBar->GetChildren().size() == TABSIZE + 1); + ASSERT_TRUE(renderTabBar->NeedLayout()); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + CheckItemPosition(renderTabBar, TABSIZE); +} + +/** + * @tc.name: RenderTabBarTest002 + * @tc.desc: Verify TabBar PerformLayout when mod scrollable and children's width greater than TabBar. + * @tc.type: FUNC + * @tc.require: AR000DAR2V + * @tc.author: jiangtao + */ +HWTEST_F(RenderTabBarTest, RenderTabBarTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct TabBarComponent with mod scrollable. + * @tc.expected: step1. properties set correctly. + */ + TabBarMode mode = TabBarMode::SCROLLABEL; + RefPtr tabBarComponent = AceType::MakeRefPtr( + std::list>(), TabController::GetController(CONTROLLER_ID)); + tabBarComponent->SetMode(mode); + + /** + * @tc.steps: step2. construct RenderTabBar with 5 child. + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = TabBarTestUtils::CreateRenderRoot(); + RefPtr renderTabBar = AceType::MakeRefPtr(); + renderRoot->Attach(mockContext); + renderTabBar->Attach(mockContext); + renderRoot->AddChild(renderTabBar); + renderTabBar->Update(tabBarComponent); + AddItem(renderTabBar, mockContext, TABSIZE); + ASSERT_TRUE(renderTabBar->GetChildren().size() == TABSIZE + 1); + ASSERT_TRUE(renderTabBar->NeedLayout()); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + CheckItemPosition(renderTabBar, TABSIZE); +} + +/** + * @tc.name: RenderTabBarTest003 + * @tc.desc: Verify TabBar PerformLayout when mod scrollable and children's width less than TabBar. + * @tc.type: FUNC + * @tc.require: AR000DAR2V + * @tc.author: jiangtao + */ +HWTEST_F(RenderTabBarTest, RenderTabBarTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct TabBarComponent with mod scrollable. + * @tc.expected: step1. properties set correctly. + */ + TabBarMode mode = TabBarMode::SCROLLABEL; + RefPtr tabBarComponent = AceType::MakeRefPtr( + std::list>(), TabController::GetController(CONTROLLER_ID)); + tabBarComponent->SetMode(mode); + + /** + * @tc.steps: step2. construct RenderTabBar with 3 child. + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = TabBarTestUtils::CreateRenderRoot(); + RefPtr renderTabBar = AceType::MakeRefPtr(); + renderRoot->Attach(mockContext); + renderTabBar->Attach(mockContext); + renderRoot->AddChild(renderTabBar); + renderTabBar->Update(tabBarComponent); + AddItem(renderTabBar, mockContext, SMALLTABSIZE); + ASSERT_TRUE(renderTabBar->GetChildren().size() == SMALLTABSIZE + 1); + ASSERT_TRUE(renderTabBar->NeedLayout()); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + CheckItemPosition(renderTabBar, SMALLTABSIZE); +} + +/** + * @tc.name: RenderTabBarTest004 + * @tc.desc: Verify TabBar SetIndex with invalid value. + * @tc.type: FUNC + * @tc.require: AR000DAR2V + * @tc.author: jiangtao + */ +HWTEST_F(RenderTabBarTest, RenderTabBarTest004, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct TabBarComponent with mod scrollable and set index less than zero. + * @tc.expected: step1. properties set correctly. + */ + TabBarMode mode = TabBarMode::SCROLLABEL; + RefPtr tabBarComponent = AceType::MakeRefPtr( + std::list>(), TabController::GetController(CONTROLLER_ID)); + tabBarComponent->SetMode(mode); + for (int i = 0; i < SMALLTABSIZE; i++) { + tabBarComponent->AppendChild(AceType::MakeRefPtr()); + } + tabBarComponent->SetIndex(2); + + /** + * @tc.steps: step2. construct RenderTabBar with 3 child. + * @tc.expected: step2. properties and children are set correctly. + */ + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr renderRoot = TabBarTestUtils::CreateRenderRoot(); + RefPtr renderTabBar = AceType::MakeRefPtr(); + renderRoot->Attach(mockContext); + renderTabBar->Attach(mockContext); + renderRoot->AddChild(renderTabBar); + renderTabBar->Update(tabBarComponent); + AddItem(renderTabBar, mockContext, SMALLTABSIZE); + ASSERT_TRUE(renderTabBar->GetChildren().size() == SMALLTABSIZE + 1); + ASSERT_TRUE(renderTabBar->NeedLayout()); + ASSERT_EQ(renderTabBar->GetIndex(), 2); + ASSERT_EQ(renderTabBar->GetTabsSize(), SMALLTABSIZE); + + renderTabBar->SetIndex(-1); + ASSERT_EQ(renderTabBar->GetIndex(), 0); + renderTabBar->SetIndex(1); + ASSERT_EQ(renderTabBar->GetIndex(), 1); + renderTabBar->SetIndex(SMALLTABSIZE); + ASSERT_EQ(renderTabBar->GetIndex(), 0); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Properties and children are calculated correctly. + */ + renderRoot->PerformLayout(); + renderTabBar->SetIndex(-1); + ASSERT_EQ(renderTabBar->GetIndex(), 0); + renderTabBar->SetIndex(1); + ASSERT_EQ(renderTabBar->GetIndex(), 1); + renderTabBar->SetIndex(SMALLTABSIZE); + ASSERT_EQ(renderTabBar->GetIndex(), 0); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/tabbar/render_tabcontent_test.cpp b/frameworks/core/components/test/unittest/tabbar/render_tabcontent_test.cpp new file mode 100644 index 00000000..fd2d6dfc --- /dev/null +++ b/frameworks/core/components/test/unittest/tabbar/render_tabcontent_test.cpp @@ -0,0 +1,884 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/log/log.h" +#include "core/components/flex/flex_component.h" +#include "core/components/tab_bar/render_tab_bar.h" +#include "core/components/tab_bar/render_tab_bar_item.h" +#include "core/components/tab_bar/render_tab_content.h" +#include "core/components/test/unittest/mock/mock_render_depend.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +using TabContentEventCallback = std::function; +using UpdateTabContentCallback = std::function&)>; +using UpdateTabBarCallback = std::function&)>; + +constexpr int32_t WAIT_TIME = 212; +constexpr int32_t CONTENT_WIDTH = 1080; +constexpr int64_t SEC_TO_NANOSEC = 1000000000; +constexpr int64_t MILLISEC_TO_MICROSEC = 1000; +constexpr int64_t VSYNC_INTERVAL_MILLISEC = 16; +constexpr int64_t VSYNC_INTERVAL_MICROSEC = VSYNC_INTERVAL_MILLISEC * MILLISEC_TO_MICROSEC; + +static int64_t GetTickCount() +{ + struct timespec ts; + clock_gettime(CLOCK_MONOTONIC, &ts); + return (ts.tv_sec * SEC_TO_NANOSEC + ts.tv_nsec); +} + +const TouchPoint MOCK_DOWN_TOUCH_EVENT { 10, 540.0f, 500.0f, TouchType::DOWN }; +const TouchPoint MOCK_MOVE_TOUCH_EVENT { 10, 540.0f, 500.0f, TouchType::MOVE }; +const TouchPoint MOCK_UP_TOUCH_EVENT { 10, 540.0f, 500.0f, TouchType::UP }; + +std::function&)> hookContent; +std::function&)> hookBar; + +enum class DragDirection { + LEFT, + RIGHT, + UP, + DOWN, +}; + +class MockRenderTabBar : public RenderTabBar {}; +class MockRenderTabContent : public RenderTabContent {}; +class MockRenderTabBarItem : public RenderTabBarItem {}; + +class TestTabContentEventHandler : public MockEventHandler { +public: + explicit TestTabContentEventHandler(TabContentEventCallback eventCallback) : eventCallback_(eventCallback) {}; + ~TestTabContentEventHandler() = default; + + void HandleAsyncEvent(const EventMarker& eventMarker, const std::string& param) + { + if (eventCallback_) { + eventCallback_(eventMarker.GetData().eventId, param); + } + } + +private: + TabContentEventCallback eventCallback_; +}; + +} // namespace + +class RenderTabContentTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; + + int32_t index_ = 0; + int32_t totalEventsNum_ = 0; + + RefPtr renderTabContent_; + RefPtr context_; + RefPtr frontend_; + +protected: + void CreateAndRenderBarAndContent(UpdateTabBarCallback updateBar); + void CreateAndRenderContent(UpdateTabContentCallback callback); + void CreateBarAndContent(RefPtr& tabBarComponent, UpdateTabContentCallback callback); + void DragTabContent(const DragDirection& dragDirection); + void WaitAndMockVsync(int64_t waitFor); + bool TestContentPosition(int32_t index, double position); +}; + +RefPtr RenderTabBar::Create() +{ + const auto& tabBar = AceType::MakeRefPtr(); + if (hookBar) { + hookBar(tabBar); + } + return tabBar; +} + +RefPtr RenderTabBarItem::Create() +{ + const auto& tabBarItem = AceType::MakeRefPtr(); + return tabBarItem; +} + +RefPtr RenderTabContent::Create() +{ + const auto& tabContent = AceType::MakeRefPtr(); + if (hookContent) { + hookContent(tabContent); + } + return tabContent; +} + +void RenderTabContentTest::SetUpTestCase() +{ + GTEST_LOG_(INFO) << "TabContentTest SetUpTestCase"; +} + +void RenderTabContentTest::TearDownTestCase() +{ + GTEST_LOG_(INFO) << "TabContentTest TearDownTestCase"; +} + +void RenderTabContentTest::SetUp() +{ + auto platformWindow = PlatformWindow::Create(nullptr); + auto window = std::make_unique(std::move(platformWindow)); + auto taskExecutor = Referenced::MakeRefPtr(); + auto assetManager = Referenced::MakeRefPtr(); + auto resRegister = Referenced::MakeRefPtr(); + frontend_ = Frontend::CreateDefault(); + context_ = + AceType::MakeRefPtr(std::move(window), taskExecutor, assetManager, resRegister, frontend_, 0); + + // used for creating tabContent + hookContent = [this](const RefPtr& tabContent) { + tabContent->Attach(context_); + renderTabContent_ = tabContent; + }; + + hookBar = [this](const RefPtr& tabBar) { tabBar->Attach(context_); }; +} + +void RenderTabContentTest::TearDown() +{ +} + +void RenderTabContentTest::WaitAndMockVsync(int64_t waitFor) +{ + int64_t runningTime = 0; + while (runningTime <= waitFor) { + runningTime += VSYNC_INTERVAL_MILLISEC; + context_->OnVsyncEvent(GetTickCount(), 0); + usleep(VSYNC_INTERVAL_MICROSEC); + } + context_->OnVsyncEvent(GetTickCount(), 0); +} + +void RenderTabContentTest::DragTabContent(const DragDirection& dragDirection) +{ + context_->OnTouchEvent(MOCK_DOWN_TOUCH_EVENT); + TouchPoint touchPoint = MOCK_MOVE_TOUCH_EVENT; + for (int32_t i = 0; i < 3; i++) { + context_->OnTouchEvent(touchPoint); + context_->OnVsyncEvent(GetTickCount(), 0); + if (dragDirection == DragDirection::LEFT) { + touchPoint.x -= 200.0f; + } else if (dragDirection == DragDirection::RIGHT) { + touchPoint.x += 200.0f; + } else if (dragDirection == DragDirection::DOWN) { + touchPoint.y += 300.0f; + } else if (dragDirection == DragDirection::UP) { + touchPoint.y -= 300.0f; + } + } + TouchPoint touchEndPoint = MOCK_UP_TOUCH_EVENT; + touchEndPoint.x = touchPoint.x; + touchEndPoint.y = touchPoint.y; + context_->OnTouchEvent(touchEndPoint); + usleep(VSYNC_INTERVAL_MICROSEC); + context_->OnVsyncEvent(GetTickCount(), 0); + WaitAndMockVsync(WAIT_TIME); +} + +void RenderTabContentTest::CreateAndRenderBarAndContent(UpdateTabBarCallback updateBar) +{ + std::list> barChildren; + for (uint32_t i = 0; i < 5; i++) { + barChildren.emplace_back(AceType::MakeRefPtr()); + } + + auto tabController = TabController::GetController(0); + + RefPtr tabBarComponent = + AceType::MakeRefPtr(barChildren, tabController); + + std::list> componentChildren; + for (uint32_t i = 0; i < 5; i++) { + componentChildren.emplace_back(AceType::MakeRefPtr()); + } + + RefPtr tabContentComponent = + AceType::MakeRefPtr(componentChildren, tabController); + + if (updateBar) { + updateBar(tabBarComponent); + } + + std::list> children; + children.push_back(tabBarComponent); + children.push_back(tabContentComponent); + + RefPtr column = + AceType::MakeRefPtr(FlexAlign::FLEX_START, FlexAlign::FLEX_START, children); + auto pageComponent = AceType::MakeRefPtr(0, column); + + context_->SetupRootElement(); + context_->PushPage(pageComponent); + context_->OnVsyncEvent(GetTickCount(), 0); + context_->OnSurfaceChanged(1080, 2244); +} + +void RenderTabContentTest::CreateAndRenderContent(UpdateTabContentCallback callback) +{ + std::list> componentChildren; + for (uint32_t i = 0; i < 5; i++) { + componentChildren.emplace_back(AceType::MakeRefPtr()); + } + + auto tabController = TabController::GetController(0); + + RefPtr tabContentComponent = + AceType::MakeRefPtr(componentChildren, tabController); + + if (callback) { + callback(tabContentComponent); + } + + auto pageComponent = AceType::MakeRefPtr(0, tabContentComponent); + + context_->SetupRootElement(); + context_->PushPage(pageComponent); + context_->OnVsyncEvent(GetTickCount(), 0); + context_->OnSurfaceChanged(1080, 2244); +} + +void RenderTabContentTest::CreateBarAndContent( + RefPtr& tabBarComponent, UpdateTabContentCallback callback) +{ + std::list> barChildren; + for (uint32_t i = 0; i < 5; i++) { + barChildren.emplace_back(AceType::MakeRefPtr()); + } + + auto tabController = TabController::GetController(0); + + tabBarComponent = AceType::MakeRefPtr(barChildren, tabController); + + std::list> componentChildren; + for (uint32_t i = 0; i < 5; i++) { + componentChildren.emplace_back(AceType::MakeRefPtr()); + } + + RefPtr tabContentComponent = + AceType::MakeRefPtr(componentChildren, tabController); + + if (callback) { + callback(tabContentComponent); + } + std::list> children; + children.push_back(tabBarComponent); + children.push_back(tabContentComponent); + + RefPtr column = + AceType::MakeRefPtr(FlexAlign::FLEX_START, FlexAlign::FLEX_START, children); + auto pageComponent = AceType::MakeRefPtr(0, column); + + context_->SetupRootElement(); + context_->PushPage(pageComponent); + context_->OnVsyncEvent(GetTickCount(), 0); + context_->OnSurfaceChanged(1080, 2244); +} + +bool RenderTabContentTest::TestContentPosition(int32_t index, double position) +{ + const auto& contents = renderTabContent_->GetChildContents(); + auto it = contents.find(index); + if (it == contents.end()) { + return false; + } + + if (!NearEqual((*it).second->GetPosition().GetX(), position)) { + return false; + } + return true; +} + +/** + * @tc.name: RenderTabContentTest001 + * @tc.desc: Test the invalid index value to create a tab component. The component can be successfully created, but + * the initial tabContent display page is the default value. + * @tc.type: FUNC + * @tc.require: AR000DAR32 AR000DHJ5Q + * @tc.author: liujinwei + */ +HWTEST_F(RenderTabContentTest, RenderTabContentTest001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderTabContentTest RenderTabContentTest001 start"; + + /** + * @tc.steps: step1. Build a component tree containing sub-components, the index field of the + * component is -1. + * @tc.expected: step1. TabContent component displays the first page. + */ + CreateAndRenderBarAndContent([this](const RefPtr& tabBar) { tabBar->SetIndex(-1); }); + EXPECT_EQ(renderTabContent_->GetCurrentIndex(), 0); + EXPECT_TRUE(TestContentPosition(0, 0.0)); + + GTEST_LOG_(INFO) << "RenderTabContentTest RenderTabContentTest001 stop"; +} + +/** + * @tc.name: RenderTabContentTest002 + * @tc.desc: Test the invalid index value to create a tab component. The component can be successfully created, but + * the initial tabContent display page is the default value. + * @tc.type: FUNC + * @tc.require: AR000DAR32 AR000DHJ5Q + * @tc.author: liujinwei + */ +HWTEST_F(RenderTabContentTest, RenderTabContentTest002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderTabContentTest RenderTabContentTest002 start"; + + /** + * @tc.steps: step1. Build a component tree containing sub-components, the index field of the + * component is 10. + * @tc.expected: step1. TabContent component displays the first page. + */ + CreateAndRenderBarAndContent([this](const RefPtr& tabBar) { tabBar->SetIndex(10); }); + + EXPECT_EQ(renderTabContent_->GetCurrentIndex(), 0); + EXPECT_TRUE(TestContentPosition(0, 0.0)); + + GTEST_LOG_(INFO) << "RenderTabContentTest RenderTabContentTest002 stop"; +} + +/** + * @tc.name: RenderTabContentTest003 + * @tc.desc: Test the valid index value to create a tab component. The component can be successfully created, + * the initial tabContent display page is the index value. + * @tc.type: FUNC + * @tc.require: AR000DAR32 AR000DHJ5Q + * @tc.author: liujinwei + */ +HWTEST_F(RenderTabContentTest, RenderTabContentTest003, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderTabContentTest RenderTabContentTest003 start"; + + /** + * @tc.steps: step1. Build a component tree containing sub-components, the index field of the + * component is 2. + * @tc.expected: step1. TabContent component displays the third page. + */ + CreateAndRenderBarAndContent([this](const RefPtr& tabBar) { tabBar->SetIndex(2); }); + + EXPECT_EQ(renderTabContent_->GetCurrentIndex(), 2); + EXPECT_TRUE(TestContentPosition(2, 0.0)); + + GTEST_LOG_(INFO) << "RenderTabContentTest RenderTabContentTest003 stop"; +} + +/** + * @tc.name: RenderTabContentTest004 + * @tc.desc: Create a tab component. The component can be successfully created, + * then test the link of bar and content + * @tc.type: FUNC + * @tc.require: AR000DAR32 AR000DHJ5Q + * @tc.author: liujinwei + */ +HWTEST_F(RenderTabContentTest, RenderTabContentTest004, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderTabContentTest RenderTabContentTest004 start"; + + /** + * @tc.steps: step1. Build a component tree containing sub-components + * @tc.expected: step1. TabContent component displays the default page. + */ + RefPtr tabBarComponent; + CreateBarAndContent(tabBarComponent, [this](const RefPtr& tabContent) {}); + + EXPECT_EQ(renderTabContent_->GetCurrentIndex(), 0); + EXPECT_TRUE(TestContentPosition(0, 0.0)); + + /** + * @tc.steps: step2. Change the index from 0 to 1 + * @tc.expected: step2. TabContent component displays the second page. + */ + tabBarComponent->SetIndex(1); + WaitAndMockVsync(WAIT_TIME); + EXPECT_EQ(renderTabContent_->GetCurrentIndex(), 1); + + EXPECT_TRUE(TestContentPosition(0, -CONTENT_WIDTH)); + EXPECT_TRUE(TestContentPosition(1, 0.0)); + + GTEST_LOG_(INFO) << "RenderTabContentTest RenderTabContentTest004 stop"; +} + +/** + * @tc.name: RenderTabContentTest005 + * @tc.desc: Test the event + * @tc.type: FUNC + * @tc.require: AR000DAR32 AR000DHJ5Q + * @tc.author: liujinwei + */ +HWTEST_F(RenderTabContentTest, RenderTabContentTest005, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderTabContentTest RenderTabContentTest005 start"; + /** + * @tc.steps: step1. Build a component tree containing sub-components + * @tc.expected: step1. TabContent component create successfully + */ + std::string changeEventId = "tab_change_id"; + RefPtr tabBarComponent; + CreateBarAndContent(tabBarComponent, [this, changeEventId](const RefPtr& tabContent) { + tabContent->SetChangeEventId(EventMarker(changeEventId)); + }); + + RefPtr eventHandler = AceType::MakeRefPtr( + [this, changeEventId](const std::string& eventId, const std::string& param) { + index_++; + std::string expectChangeResult = + std::string("\"change\",{\"index\":").append(std::to_string(index_).append("},null")); + EXPECT_EQ(param, expectChangeResult); + EXPECT_EQ(eventId, changeEventId); + }); + + context_->RegisterEventHandler(eventHandler); + EXPECT_EQ(renderTabContent_->GetCurrentIndex(), 0); + EXPECT_TRUE(TestContentPosition(0, 0.0)); + + /** + * @tc.steps: step2. Set the index of bar from 0 to 1. + * @tc.expected: step2. TabContent component change index successfully, and fire the event successfully. + */ + tabBarComponent->SetIndex(1); + WaitAndMockVsync(WAIT_TIME); + EXPECT_EQ(renderTabContent_->GetCurrentIndex(), 1); + EXPECT_TRUE(TestContentPosition(1, 0.0)); + + /** + * @tc.steps: step3. Set the index of bar from 1 to 2. + * @tc.expected: step3. TabContent component change index successfully, and fire the event successfully. + */ + tabBarComponent->SetIndex(2); + WaitAndMockVsync(WAIT_TIME); + EXPECT_EQ(renderTabContent_->GetCurrentIndex(), 2); + EXPECT_TRUE(TestContentPosition(2, 0.0)); + + GTEST_LOG_(INFO) << "RenderTabContentTest RenderTabContentTest005 stop"; +} + +/** + * @tc.name: RenderTabContentTest006 + * @tc.desc: Test the drag + * @tc.type: FUNC + * @tc.require: AR000DAR32 AR000DHJ5Q + * @tc.author: liujinwei + */ +HWTEST_F(RenderTabContentTest, RenderTabContentTest006, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderTabContentTest RenderTabContentTest006 start"; + + /** + * @tc.steps: step1. Build a component tree containing sub-components. + * @tc.expected: step1. TabContent component create successfully. + */ + std::string changeEventId = "tab_change_id"; + + CreateAndRenderContent([this, changeEventId](const RefPtr& tabContent) { + tabContent->SetChangeEventId(EventMarker(changeEventId)); + }); + + RefPtr eventHandler = AceType::MakeRefPtr( + [this, changeEventId](const std::string& eventId, const std::string& param) { + std::string expectChangeResult = + std::string("\"change\",{\"index\":").append(std::to_string(index_).append("},null")); + EXPECT_EQ(param, expectChangeResult); + EXPECT_EQ(eventId, changeEventId); + }); + + context_->RegisterEventHandler(eventHandler); + + EXPECT_EQ(renderTabContent_->GetCurrentIndex(), 0); + EXPECT_TRUE(TestContentPosition(0, 0.0)); + + /** + * @tc.steps: step2. Drag left + * @tc.expected: step2. TabContent change the index from 0 to 1, and fire the change event. + */ + index_ = 1; + DragTabContent(DragDirection::LEFT); + EXPECT_EQ(renderTabContent_->GetCurrentIndex(), 1); + EXPECT_TRUE(TestContentPosition(1, 0.0)); + + /** + * @tc.steps: step3. Drag left + * @tc.expected: step3. TabContent change the index from 1 to 2, and fire the change event. + */ + index_ = 2; + DragTabContent(DragDirection::LEFT); + EXPECT_EQ(renderTabContent_->GetCurrentIndex(), 2); + EXPECT_TRUE(TestContentPosition(2, 0.0)); + + /** + * @tc.steps: step4. Drag left and to the last, and then drag right + * @tc.expected: step4. TabContent change the index, and fire the change event. + */ + index_ = 3; + DragTabContent(DragDirection::LEFT); + EXPECT_EQ(renderTabContent_->GetCurrentIndex(), 3); + EXPECT_TRUE(TestContentPosition(3, 0.0)); + + index_ = 4; + DragTabContent(DragDirection::LEFT); + EXPECT_EQ(renderTabContent_->GetCurrentIndex(), 4); + EXPECT_TRUE(TestContentPosition(4, 0.0)); + + index_ = 4; + DragTabContent(DragDirection::LEFT); + EXPECT_EQ(renderTabContent_->GetCurrentIndex(), 4); + EXPECT_TRUE(TestContentPosition(4, 0.0)); + + index_ = 3; + DragTabContent(DragDirection::RIGHT); + EXPECT_EQ(renderTabContent_->GetCurrentIndex(), 3); + EXPECT_TRUE(TestContentPosition(3, 0.0)); + + index_ = 2; + DragTabContent(DragDirection::RIGHT); + EXPECT_EQ(renderTabContent_->GetCurrentIndex(), 2); + EXPECT_TRUE(TestContentPosition(2, 0.0)); + + GTEST_LOG_(INFO) << "RenderTabContentTest RenderTabContentTest006 stop"; +} + +/** + * @tc.name: RenderTabContentTest007 + * @tc.desc: Create a tab component. The component can be successfully created, + * then test the lazy build of the content + * @tc.type: FUNC + * @tc.require: AR000DAR32 + * @tc.author: liujinwei + */ +HWTEST_F(RenderTabContentTest, RenderTabContentTest007, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderTabContentTest RenderTabContentTest007 start"; + + /** + * @tc.steps: step1. Build a component tree containing sub-components + * @tc.expected: step1. TabContent component displays the default page. + */ + RefPtr tabBarComponent; + CreateBarAndContent(tabBarComponent, [this](const RefPtr& tabContent) {}); + + EXPECT_EQ(renderTabContent_->GetCurrentIndex(), 0); + EXPECT_TRUE(TestContentPosition(0, 0.0)); + EXPECT_TRUE(renderTabContent_->GetChildContents().size() - 1 == 0); + + /** + * @tc.steps: step2. Change the index + * @tc.expected: step2. TabContent component size is correct. + */ + tabBarComponent->SetIndex(1); + WaitAndMockVsync(WAIT_TIME); + EXPECT_EQ(renderTabContent_->GetCurrentIndex(), 1); + EXPECT_TRUE(TestContentPosition(1, 0.0)); + EXPECT_TRUE(renderTabContent_->GetChildContents().size() - 2 == 0); + + tabBarComponent->SetIndex(4); + WaitAndMockVsync(WAIT_TIME); + EXPECT_EQ(renderTabContent_->GetCurrentIndex(), 4); + EXPECT_TRUE(TestContentPosition(4, 0.0)); + EXPECT_TRUE(renderTabContent_->GetChildContents().size() - 3 == 0); + + GTEST_LOG_(INFO) << "RenderTabContentTest RenderTabContentTest007 stop"; +} + +/** + * @tc.name: RenderTabContentTest008 + * @tc.desc: Test the event of the first tab and last one + * @tc.type: FUNC + * @tc.require: AR000DAR32 + * @tc.author: liujinwei + */ +HWTEST_F(RenderTabContentTest, RenderTabContentTest008, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderTabContentTest RenderTabContentTest008 start"; + + /** + * @tc.steps: step1. Build a component tree containing sub-components. + * @tc.expected: step1. TabContent component create successfully. + */ + std::string changeEventId = "tab_change_id"; + + CreateAndRenderContent([this, changeEventId](const RefPtr& tabContent) { + tabContent->SetChangeEventId(EventMarker(changeEventId)); + }); + + RefPtr eventHandler = AceType::MakeRefPtr( + [this, changeEventId](const std::string& eventId, const std::string& param) { + std::string expectChangeResult = + std::string("\"change\",{\"index\":").append(std::to_string(index_).append("},null")); + EXPECT_EQ(param, expectChangeResult); + EXPECT_EQ(eventId, changeEventId); + totalEventsNum_++; + }); + + context_->RegisterEventHandler(eventHandler); + + EXPECT_EQ(renderTabContent_->GetCurrentIndex(), 0); + EXPECT_TRUE(TestContentPosition(0, 0.0)); + + /** + * @tc.steps: step2. Drag left + * @tc.expected: step2. TabContent change the index from 0 to 1, and fire the change event. + */ + index_ = 1; + DragTabContent(DragDirection::LEFT); + EXPECT_EQ(renderTabContent_->GetCurrentIndex(), 1); + EXPECT_TRUE(TestContentPosition(1, 0.0)); + + /** + * @tc.steps: step3. Drag right + * @tc.expected: step3. TabContent change the index from 1 to 0, and fire the change event. + */ + index_ = 0; + DragTabContent(DragDirection::RIGHT); + EXPECT_EQ(renderTabContent_->GetCurrentIndex(), 0); + EXPECT_TRUE(TestContentPosition(0, 0.0)); + EXPECT_EQ(totalEventsNum_, 2); + + /** + * @tc.steps: step4. Drag to the first, and then drag right + * @tc.expected: step4. The index is 0. + */ + index_ = 0; + DragTabContent(DragDirection::RIGHT); + EXPECT_EQ(renderTabContent_->GetCurrentIndex(), 0); + EXPECT_TRUE(TestContentPosition(0, 0.0)); + EXPECT_EQ(totalEventsNum_, 2); + + GTEST_LOG_(INFO) << "RenderTabContentTest RenderTabContentTest008 stop"; +} + +/** + * @tc.name: RenderTabContentTest009 + * @tc.desc: Test the event of the first tab and last one + * @tc.type: FUNC + * @tc.require: AR000DAR32 + * @tc.author: liujinwei + */ +HWTEST_F(RenderTabContentTest, RenderTabContentTest009, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderTabContentTest RenderTabContentTest009 start"; + + /** + * @tc.steps: step1. Build a component tree containing sub-components. + * @tc.expected: step1. TabContent component create successfully. + */ + std::string changeEventId = "tab_change_id"; + RefPtr tabBarComponent; + CreateBarAndContent(tabBarComponent, [this, changeEventId](const RefPtr& tabContent) { + tabContent->SetChangeEventId(EventMarker(changeEventId)); + }); + + RefPtr eventHandler = AceType::MakeRefPtr( + [this, changeEventId](const std::string& eventId, const std::string& param) { + std::string expectChangeResult = + std::string("\"change\",{\"index\":").append(std::to_string(index_).append("},null")); + EXPECT_EQ(param, expectChangeResult); + EXPECT_EQ(eventId, changeEventId); + totalEventsNum_++; + }); + + context_->RegisterEventHandler(eventHandler); + + EXPECT_EQ(renderTabContent_->GetCurrentIndex(), 0); + EXPECT_TRUE(TestContentPosition(0, 0.0)); + + /** + * @tc.steps: step2. Set index = 4 + * @tc.expected: step2. TabContent change the index from 0 to 4, and fire the change event. + */ + index_ = 4; + tabBarComponent->SetIndex(4); + WaitAndMockVsync(WAIT_TIME); + EXPECT_EQ(renderTabContent_->GetCurrentIndex(), 4); + EXPECT_TRUE(TestContentPosition(4, 0.0)); + EXPECT_EQ(totalEventsNum_, 1); + + /** + * @tc.steps: step3. Drag left + * @tc.expected: step3. Index of tab is 4 + */ + DragTabContent(DragDirection::LEFT); + EXPECT_EQ(renderTabContent_->GetCurrentIndex(), 4); + EXPECT_TRUE(TestContentPosition(4, 0.0)); + EXPECT_EQ(totalEventsNum_, 1); + + GTEST_LOG_(INFO) << "RenderTabContentTest RenderTabContentTest009 stop"; +} + +/** + * @tc.name: RenderTabContentTest010 + * @tc.desc: Test the drag + * @tc.type: FUNC + * @tc.require: AR000DQ1V2 AR000DQ1V3 + * @tc.author: liujinwei + */ +HWTEST_F(RenderTabContentTest, RenderTabContentTest010, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderTabContentTest RenderTabContentTest010 start"; + + /** + * @tc.steps: step1. Build a component tree containing sub-components. + * @tc.expected: step1. TabContent component create successfully. + */ + std::string changeEventId = "tab_change_id"; + + CreateAndRenderContent([this, changeEventId](const RefPtr& tabContent) { + tabContent->SetChangeEventId(EventMarker(changeEventId)); + tabContent->SetVertical(true); + }); + + RefPtr eventHandler = AceType::MakeRefPtr( + [this, changeEventId](const std::string& eventId, const std::string& param) { + std::string expectChangeResult = + std::string("\"change\",{\"index\":").append(std::to_string(index_).append("},null")); + EXPECT_EQ(param, expectChangeResult); + EXPECT_EQ(eventId, changeEventId); + }); + + context_->RegisterEventHandler(eventHandler); + + EXPECT_EQ(renderTabContent_->GetCurrentIndex(), 0); + EXPECT_TRUE(TestContentPosition(0, 0.0)); + + /** + * @tc.steps: step2. Drag up + * @tc.expected: step2. TabContent change the index from 0 to 1, and fire the change event. + */ + index_ = 1; + DragTabContent(DragDirection::UP); + EXPECT_EQ(renderTabContent_->GetCurrentIndex(), 1); + EXPECT_TRUE(TestContentPosition(1, 0.0)); + + /** + * @tc.steps: step3. Drag up + * @tc.expected: step3. TabContent change the index from 1 to 2, and fire the change event. + */ + index_ = 2; + DragTabContent(DragDirection::UP); + EXPECT_EQ(renderTabContent_->GetCurrentIndex(), 2); + EXPECT_TRUE(TestContentPosition(2, 0.0)); + + /** + * @tc.steps: step4. Drag up and to the last, and then drag right + * @tc.expected: step4. TabContent change the index, and fire the change event. + */ + index_ = 3; + DragTabContent(DragDirection::UP); + EXPECT_EQ(renderTabContent_->GetCurrentIndex(), 3); + EXPECT_TRUE(TestContentPosition(3, 0.0)); + + index_ = 4; + DragTabContent(DragDirection::UP); + EXPECT_EQ(renderTabContent_->GetCurrentIndex(), 4); + EXPECT_TRUE(TestContentPosition(4, 0.0)); + + index_ = 4; + DragTabContent(DragDirection::UP); + EXPECT_EQ(renderTabContent_->GetCurrentIndex(), 4); + EXPECT_TRUE(TestContentPosition(4, 0.0)); + + index_ = 3; + DragTabContent(DragDirection::DOWN); + EXPECT_EQ(renderTabContent_->GetCurrentIndex(), 3); + EXPECT_TRUE(TestContentPosition(3, 0.0)); + + index_ = 2; + DragTabContent(DragDirection::DOWN); + EXPECT_EQ(renderTabContent_->GetCurrentIndex(), 2); + EXPECT_TRUE(TestContentPosition(2, 0.0)); + + GTEST_LOG_(INFO) << "RenderTabContentTest RenderTabContentTest010 stop"; +} + +/** + * @tc.name: RenderTabContentTest011 + * @tc.desc: Create a tab component. The component can be successfully created, + * then test the link of bar and content when vertical is true + * @tc.type: FUNC + * @tc.require: AR000DQ1V2 AR000DQ1V3 + * @tc.author: liujinwei + */ +HWTEST_F(RenderTabContentTest, RenderTabContentTest011, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderTabContentTest RenderTabContentTest011 start"; + + /** + * @tc.steps: step1. Build a component tree containing sub-components + * @tc.expected: step1. TabContent component displays the default page. + */ + RefPtr tabBarComponent; + CreateBarAndContent( + tabBarComponent, [this](const RefPtr& tabContent) { tabContent->SetVertical(true); }); + + EXPECT_EQ(renderTabContent_->GetCurrentIndex(), 0); + EXPECT_TRUE(TestContentPosition(0, 0.0)); + + /** + * @tc.steps: step2. Change the index from 0 to 1 + * @tc.expected: step2. TabContent component displays the second page. + */ + tabBarComponent->SetIndex(2); + WaitAndMockVsync(WAIT_TIME); + EXPECT_EQ(renderTabContent_->GetCurrentIndex(), 2); + + EXPECT_TRUE(TestContentPosition(2, 0.0)); + + GTEST_LOG_(INFO) << "RenderTabContentTest RenderTabContentTest011 stop"; +} + +/** + * @tc.name: RenderTabContentTest012 + * @tc.desc: Create a tab component. The component can be successfully created, + * then test the link of bar and content + * @tc.type: FUNC + * @tc.require: AR000DQ4E3 + * @tc.author: liujinwei + */ +HWTEST_F(RenderTabContentTest, RenderTabContentTest012, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "RenderTabContentTest RenderTabContentTest012 start"; + + /** + * @tc.steps: step1. Build a component tree containing sub-components + * @tc.expected: step1. TabContent component displays the default page. + */ + RefPtr tabBarComponent; + CreateBarAndContent(tabBarComponent, [this](const RefPtr& tabContent) {}); + + EXPECT_EQ(renderTabContent_->GetCurrentIndex(), 0); + + /** + * @tc.steps: step2. Change the index from 0 to 1 + * @tc.expected: step2. TabContent component displays the second page. + */ + tabBarComponent->SetIndex(1); + WaitAndMockVsync(WAIT_TIME); + EXPECT_EQ(renderTabContent_->GetCurrentIndex(), 1); + + GTEST_LOG_(INFO) << "RenderTabContentTest RenderTabContentTest012 stop"; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/tabbar/tab_bar_element_test.cpp b/frameworks/core/components/test/unittest/tabbar/tab_bar_element_test.cpp new file mode 100644 index 00000000..1dc9a087 --- /dev/null +++ b/frameworks/core/components/test/unittest/tabbar/tab_bar_element_test.cpp @@ -0,0 +1,445 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "core/components/focusable/focusable_component.h" +#include "core/components/root/root_component.h" +#include "core/components/root/root_element.h" +#include "core/components/tab_bar/tab_bar_element.h" +#include "core/components/tab_bar/tab_bar_item_element.h" +#include "core/components/test/unittest/mock/mock_render_common.h" +#include "core/components/test/unittest/tabbar/tab_test_utils.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +constexpr int32_t TAB_ITEM_COUNT = 3; +constexpr int32_t CONTROLLER_ID_ONE = 9526; +constexpr int32_t CONTROLLER_ID_TWO = 9527; + +bool CheckFocus(const std::list>& children, int32_t index, int32_t& count) +{ + count = 0; + for (auto pos = children.begin(); pos != children.end(); ++pos) { + auto focus = AceType::DynamicCast(*pos); + if (!focus) { + continue; + } + bool onFocus = focus->IsCurrentFocus(); + if (count == index) { + if (!onFocus) { + return false; + } + } else { + if (onFocus) { + return false; + } + } + count++; + } + return true; +} + +} // namespace + +class TabBarElementTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; + void InitFocusTree(); + +protected: + RefPtr context_; + RefPtr tabBarOne_ = AceType::MakeRefPtr(); + RefPtr tabBarTwo_ = AceType::MakeRefPtr(); + RefPtr rootContainer_ = AceType::MakeRefPtr(); +}; + +void TabBarElementTest::SetUpTestCase() {} + +void TabBarElementTest::TearDownTestCase() {} + +void TabBarElementTest::SetUp() +{ + InitFocusTree(); +} + +void TabBarElementTest::TearDown() {} + +void TabBarElementTest::InitFocusTree() +{ + // create fake renderNode + rootContainer_->Create(); + context_ = MockRenderCommon::GetMockContext(); + context_->SetupRootElement(); + rootContainer_->SetPipelineContext(context_); + + std::list> children; + children.clear(); + + // create first TabBar + for (int32_t i = 0; i < TAB_ITEM_COUNT; i++) { + auto child = AceType::MakeRefPtr(); + children.emplace_back(AceType::MakeRefPtr(child)); + } + auto controllerOne = TabController::GetController(CONTROLLER_ID_ONE); + controllerOne->SetIndex(0); + tabBarOne_->SetNewComponent( + AceType::MakeRefPtr(children, controllerOne)); + + // create second TabBar + children.clear(); + for (int32_t i = 0; i < TAB_ITEM_COUNT; i++) { + auto child = AceType::MakeRefPtr(); + children.emplace_back(AceType::MakeRefPtr(child)); + } + auto controllerTwo = TabController::GetController(CONTROLLER_ID_TWO); + controllerTwo->SetIndex(0); + tabBarTwo_->SetNewComponent(AceType::MakeRefPtr(children, controllerTwo)); + + // mount on rootContainer_ + tabBarOne_->Mount(rootContainer_); + tabBarTwo_->Mount(rootContainer_); + + rootContainer_->RequestFocusImmediately(); +} + +/** + * @tc.name: TabBarElementTest001 + * @tc.desc: Verify the basic function of request focus and release focus. + * @tc.type: FUNC + * @tc.require: AR000DHJ5Q + * @tc.author: jiangtao + */ +HWTEST_F(TabBarElementTest, TabBarElementTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the RootContainer with two tabBars. + * @tc.expected: step1. RootContainer and tabBarOne acquire the focus. + */ + int32_t count = 0; + ASSERT_TRUE(rootContainer_->IsCurrentFocus()); + ASSERT_TRUE(tabBarOne_->IsCurrentFocus()); + if (!CheckFocus(tabBarOne_->GetChildren(), 0, count)) { + printf("index[%d] focus is not expected\n", count); + ASSERT_TRUE(false); + } + ASSERT_FALSE(tabBarTwo_->IsCurrentFocus()); + if (!CheckFocus(tabBarTwo_->GetChildren(), -1, count)) { + printf("index[%d] focus is not expected\n", count); + ASSERT_TRUE(false); + } + + /** + * @tc.steps: step2. Animation to the right + * @tc.expected: step2. RootContainer and tabBarOne acquire the focus. tabBarOne's second child Get the focus. + */ + rootContainer_->HandleKeyEvent(RIGHT_KEY); + ASSERT_TRUE(rootContainer_->IsCurrentFocus()); + ASSERT_TRUE(tabBarOne_->IsCurrentFocus()); + if (!CheckFocus(tabBarOne_->GetChildren(), 1, count)) { + printf("index[%d] focus is not expected", count); + ASSERT_TRUE(false); + } + ASSERT_FALSE(tabBarTwo_->IsCurrentFocus()); + if (!CheckFocus(tabBarTwo_->GetChildren(), -1, count)) { + printf("index[%d] focus is not expected\n", count); + ASSERT_TRUE(false); + } + + /** + * @tc.steps: step3. Animation to the left + * @tc.expected: step3. RootContainer and tabBarOne acquire the focus. tabBarOne's first child Get the focus. + */ + rootContainer_->HandleKeyEvent(LEFT_KEY); + ASSERT_TRUE(rootContainer_->IsCurrentFocus()); + ASSERT_TRUE(tabBarOne_->IsCurrentFocus()); + if (!CheckFocus(tabBarOne_->GetChildren(), 0, count)) { + printf("index[%d] focus is not expected", count); + ASSERT_TRUE(false); + } + ASSERT_FALSE(tabBarTwo_->IsCurrentFocus()); + if (!CheckFocus(tabBarTwo_->GetChildren(), -1, count)) { + printf("index[%d] focus is not expected\n", count); + ASSERT_TRUE(false); + } + + /** + * @tc.steps: step4. Animation to the down + * @tc.expected: step4. RootContainer and tabBarTwo acquire the focus. tabBarTwo's first child Get the focus. + * tabBarOne lost the focus. + */ + rootContainer_->HandleKeyEvent(DOWN_KEY); + ASSERT_TRUE(rootContainer_->IsCurrentFocus()); + ASSERT_FALSE(tabBarOne_->IsCurrentFocus()); + if (!CheckFocus(tabBarOne_->GetChildren(), -1, count)) { + printf("index[%d] focus is not expected", count); + ASSERT_TRUE(false); + } + ASSERT_TRUE(tabBarTwo_->IsCurrentFocus()); + if (!CheckFocus(tabBarTwo_->GetChildren(), 0, count)) { + printf("index[%d] focus is not expected", count); + ASSERT_TRUE(false); + } + + /** + * @tc.steps: step5. Animation to the up + * @tc.expected: step5. tabOne and tabOne's first child get the focus. tabTwo lost the focus. + * tabBarOne lost the focus. + */ + rootContainer_->HandleKeyEvent(UP_KEY); + ASSERT_TRUE(rootContainer_->IsCurrentFocus()); + ASSERT_TRUE(tabBarOne_->IsCurrentFocus()); + if (!CheckFocus(tabBarOne_->GetChildren(), 0, count)) { + printf("index[%d] focus is not expected", count); + ASSERT_TRUE(false); + } + ASSERT_FALSE(tabBarTwo_->IsCurrentFocus()); + if (!CheckFocus(tabBarTwo_->GetChildren(), -1, count)) { + printf("index[%d] focus is not expected", count); + ASSERT_TRUE(false); + } +} + +/** + * @tc.name: TabBarElementTest002 + * @tc.desc: when focus lost and got again, TabBar should remember the latest on focused child. + * @tc.type: FUNC + * @tc.require: AR000DHJ5Q + * @tc.author: jiangtao + */ +HWTEST_F(TabBarElementTest, TabBarElementTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the RootContainer with two tabBars. + * @tc.expected: step1. RootContainer and tabBarOne acquire the focus. + */ + int32_t count = 0; + ASSERT_TRUE(rootContainer_->IsCurrentFocus()); + ASSERT_TRUE(tabBarOne_->IsCurrentFocus()); + if (!CheckFocus(tabBarOne_->GetChildren(), 0, count)) { + printf("index[%d] focus is not expected\n", count); + ASSERT_TRUE(false); + } + ASSERT_FALSE(tabBarTwo_->IsCurrentFocus()); + if (!CheckFocus(tabBarTwo_->GetChildren(), -1, count)) { + printf("index[%d] focus is not expected\n", count); + ASSERT_TRUE(false); + } + + /** + * @tc.steps: step2. Animation to the right + * @tc.expected: step2. RootContainer and tabBarOne acquire the focus. tabBarOne's second child Get the focus. + */ + rootContainer_->HandleKeyEvent(RIGHT_KEY); + ASSERT_TRUE(rootContainer_->IsCurrentFocus()); + ASSERT_TRUE(tabBarOne_->IsCurrentFocus()); + if (!CheckFocus(tabBarOne_->GetChildren(), 1, count)) { + printf("index[%d] focus is not expected", count); + ASSERT_TRUE(false); + } + ASSERT_FALSE(tabBarTwo_->IsCurrentFocus()); + if (!CheckFocus(tabBarTwo_->GetChildren(), -1, count)) { + printf("index[%d] focus is not expected\n", count); + ASSERT_TRUE(false); + } + + /** + * @tc.steps: step3. Animation to the down + * @tc.expected: step3. RootContainer and tabBarTwo acquire the focus. tabBarTwo's first child Get the focus. + * tabBarOne lost the focus. + */ + rootContainer_->HandleKeyEvent(DOWN_KEY); + ASSERT_TRUE(rootContainer_->IsCurrentFocus()); + ASSERT_FALSE(tabBarOne_->IsCurrentFocus()); + if (!CheckFocus(tabBarOne_->GetChildren(), -1, count)) { + printf("index[%d] focus is not expected", count); + ASSERT_TRUE(false); + } + ASSERT_TRUE(tabBarTwo_->IsCurrentFocus()); + if (!CheckFocus(tabBarTwo_->GetChildren(), 0, count)) { + printf("index[%d] focus is not expected", count); + ASSERT_TRUE(false); + } + + /** + * @tc.steps: step4. Animation to the right + * @tc.expected: step4. RootContainer and tabBarTwo acquire the focus. tabBarTwo's second child Get the focus. + */ + rootContainer_->HandleKeyEvent(RIGHT_KEY); + ASSERT_TRUE(rootContainer_->IsCurrentFocus()); + ASSERT_FALSE(tabBarOne_->IsCurrentFocus()); + if (!CheckFocus(tabBarOne_->GetChildren(), -1, count)) { + printf("index[%d] focus is not expected", count); + ASSERT_TRUE(false); + } + ASSERT_TRUE(tabBarTwo_->IsCurrentFocus()); + if (!CheckFocus(tabBarTwo_->GetChildren(), 1, count)) { + printf("index[%d] focus is not expected\n", count); + ASSERT_TRUE(false); + } + + /** + * @tc.steps: step5. Animation to the up + * @tc.expected: step5. tabOne and tabOne's second child get the focus. tabTwo lost the focus. + * tabBarOne lost the focus. + */ + rootContainer_->HandleKeyEvent(UP_KEY); + ASSERT_TRUE(rootContainer_->IsCurrentFocus()); + ASSERT_TRUE(tabBarOne_->IsCurrentFocus()); + if (!CheckFocus(tabBarOne_->GetChildren(), 1, count)) { + printf("index[%d] focus is not expected", count); + ASSERT_TRUE(false); + } + ASSERT_FALSE(tabBarTwo_->IsCurrentFocus()); + if (!CheckFocus(tabBarTwo_->GetChildren(), -1, count)) { + printf("index[%d] focus is not expected", count); + ASSERT_TRUE(false); + } + + /** + * @tc.steps: step5. Animation to the down + * @tc.expected: step5. tabTwo and tabTwo's second child get the focus. tabOne lost the focus. + * tabBarOne lost the focus. + */ + rootContainer_->HandleKeyEvent(DOWN_KEY); + ASSERT_TRUE(rootContainer_->IsCurrentFocus()); + ASSERT_FALSE(tabBarOne_->IsCurrentFocus()); + if (!CheckFocus(tabBarOne_->GetChildren(), -1, count)) { + printf("index[%d] focus is not expected", count); + ASSERT_TRUE(false); + } + ASSERT_TRUE(tabBarTwo_->IsCurrentFocus()); + if (!CheckFocus(tabBarTwo_->GetChildren(), 1, count)) { + printf("index[%d] focus is not expected", count); + ASSERT_TRUE(false); + } +} + +/** + * @tc.name: TabBarElementTest003 + * @tc.desc: when focus at the edge of left, still left will not lost the focus. + * @tc.type: FUNC + * @tc.require: AR000DHJ5Q + * @tc.author: jiangtao + */ +HWTEST_F(TabBarElementTest, TabBarElementTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the RootContainer with two tabBars. + * @tc.expected: step1. RootContainer and tabBarOne acquire the focus. + */ + int32_t count = 0; + ASSERT_TRUE(rootContainer_->IsCurrentFocus()); + ASSERT_TRUE(tabBarOne_->IsCurrentFocus()); + if (!CheckFocus(tabBarOne_->GetChildren(), 0, count)) { + printf("index[%d] focus is not expected\n", count); + ASSERT_TRUE(false); + } + ASSERT_FALSE(tabBarTwo_->IsCurrentFocus()); + if (!CheckFocus(tabBarTwo_->GetChildren(), -1, count)) { + printf("index[%d] focus is not expected\n", count); + ASSERT_TRUE(false); + } + + /** + * @tc.steps: step2. Animation to the left. + * @tc.expected: step2. the focus will not change. + */ + rootContainer_->HandleKeyEvent(LEFT_KEY); + ASSERT_TRUE(rootContainer_->IsCurrentFocus()); + ASSERT_TRUE(tabBarOne_->IsCurrentFocus()); + if (!CheckFocus(tabBarOne_->GetChildren(), 0, count)) { + printf("index[%d] focus is not expected\n", count); + ASSERT_TRUE(false); + } + ASSERT_FALSE(tabBarTwo_->IsCurrentFocus()); + if (!CheckFocus(tabBarTwo_->GetChildren(), -1, count)) { + printf("index[%d] focus is not expected\n", count); + ASSERT_TRUE(false); + } +} + +/** + * @tc.name: TabBarElementTest004 + * @tc.desc: when focus at the edge of child's right, still right will left the next component the focus. + * @tc.type: FUNC + * @tc.require: AR000DHJ5Q + * @tc.author: jiangtao + */ +HWTEST_F(TabBarElementTest, TabBarElementTest004, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the RootContainer with two tabBars. + * @tc.expected: step1. RootContainer and tabBarOne acquire the focus. + */ + int32_t count = 0; + ASSERT_TRUE(rootContainer_->IsCurrentFocus()); + ASSERT_TRUE(tabBarOne_->IsCurrentFocus()); + if (!CheckFocus(tabBarOne_->GetChildren(), 0, count)) { + printf("index[%d] focus is not expected\n", count); + ASSERT_TRUE(false); + } + ASSERT_FALSE(tabBarTwo_->IsCurrentFocus()); + if (!CheckFocus(tabBarTwo_->GetChildren(), -1, count)) { + printf("index[%d] focus is not expected\n", count); + ASSERT_TRUE(false); + } + + /** + * @tc.steps: step2. Animation to the right. + * @tc.expected: step2. RootContainer and tabBarTwo acquire the focus. tabBarTwo's first child Get the focus. + * tabBarOne lost the focus. + */ + for (int32_t i = 0; i < TAB_ITEM_COUNT; i++) { + // go right + rootContainer_->HandleKeyEvent(RIGHT_KEY); + } + ASSERT_TRUE(rootContainer_->IsCurrentFocus()); + ASSERT_FALSE(tabBarOne_->IsCurrentFocus()); + if (!CheckFocus(tabBarOne_->GetChildren(), -1, count)) { + printf("index[%d] focus is not expected\n", count); + ASSERT_TRUE(false); + } + ASSERT_TRUE(tabBarTwo_->IsCurrentFocus()); + if (!CheckFocus(tabBarTwo_->GetChildren(), 0, count)) { + printf("index[%d] focus is not expected\n", count); + ASSERT_TRUE(false); + } + + /** + * @tc.steps: step3. Animation to the left. + * @tc.expected: step3. RootContainer and tabBarOne acquire the focus. + */ + rootContainer_->HandleKeyEvent(LEFT_KEY); + ASSERT_TRUE(rootContainer_->IsCurrentFocus()); + ASSERT_TRUE(tabBarOne_->IsCurrentFocus()); + if (!CheckFocus(tabBarOne_->GetChildren(), 2, count)) { + printf("index[%d] focus is not expected\n", count); + ASSERT_TRUE(false); + } + ASSERT_FALSE(tabBarTwo_->IsCurrentFocus()); + if (!CheckFocus(tabBarTwo_->GetChildren(), -1, count)) { + printf("index[%d] focus is not expected\n", count); + ASSERT_TRUE(false); + } +} +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/tabbar/tab_content_element_test.cpp b/frameworks/core/components/test/unittest/tabbar/tab_content_element_test.cpp new file mode 100644 index 00000000..08fbcba2 --- /dev/null +++ b/frameworks/core/components/test/unittest/tabbar/tab_content_element_test.cpp @@ -0,0 +1,390 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "core/components/flex/flex_component.h" +#include "core/components/focusable/focusable_component.h" +#include "core/components/tab_bar/tab_bar_element.h" +#include "core/components/tab_bar/tab_content_component.h" +#include "core/components/tab_bar/tab_content_element.h" +#include "core/components/test/unittest/mock/mock_render_common.h" +#include "core/components/test/unittest/tabbar/tab_test_utils.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +constexpr int32_t ITEM_COUNT = 3; +constexpr int32_t CONTROLLER_ID = 9528; + +bool CheckContent(const RefPtr child, int32_t focusIndex) +{ + if (!child) { + printf("child == nullptr"); + return false; + } + + const auto& items = child->GetChildren(); + int32_t count = 0; + for (auto pos = items.begin(); pos != items.begin(); ++pos) { + auto focus = AceType::DynamicCast(*pos); + if (!focus) { + continue; + } + bool focused = focus->IsCurrentFocus(); + if (count == focusIndex) { + if (!focused) { + printf("index[%d] focus is not expected\n", count); + return false; + } + } else { + if (focused) { + printf("index[%d] focus is not expected\n", count); + return false; + } + } + count++; + } + return true; +} + +} // namespace + +class TabContentElementTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDowntestCase(); + void SetUp() override; + void TearDown() override; + void InitFocusTree(); + +protected: + RefPtr context_; + RefPtr controller_ = TabController::GetController(CONTROLLER_ID); + RefPtr rootContainer_ = AceType::MakeRefPtr(); + RefPtr tabBar_ = AceType::MakeRefPtr(); + RefPtr tabContent_; + +private: + RefPtr CreateContent(); +}; + +void TabContentElementTest::SetUpTestCase() {} + +void TabContentElementTest::TearDowntestCase() {} + +void TabContentElementTest::SetUp() +{ + InitFocusTree(); +} + +void TabContentElementTest::TearDown() {} + +void TabContentElementTest::InitFocusTree() +{ + // create fake renderNode + rootContainer_->Create(); + context_ = MockRenderCommon::GetMockContext(); + context_->SetupRootElement(); + rootContainer_->SetPipelineContext(context_); + + // create TabBar + std::list> children; + children.clear(); + for (int32_t i = 0; i < ITEM_COUNT; i++) { + children.emplace_back(AceType::MakeRefPtr(AceType::MakeRefPtr())); + } + tabBar_->SetNewComponent(AceType::MakeRefPtr(children, controller_)); + + // create TabContent + children.clear(); + // first child is focusable + children.push_back(CreateContent()); + // second child is focusable + children.push_back(CreateContent()); + // third child is not focusable + RefPtr focusableComponent = + AceType::MakeRefPtr(AceType::MakeRefPtr()); + focusableComponent->SetFocusable(false); + focusableComponent->SetFocusNode(true); + children.push_back(focusableComponent); + tabContent_ = AceType::MakeRefPtr(children); + tabContent_->SetNewComponent(AceType::MakeRefPtr(children, controller_)); + + // add to rootContainer_ + tabBar_->Mount(rootContainer_); + tabContent_->Mount(rootContainer_); + + rootContainer_->RequestFocusImmediately(); +} + +RefPtr TabContentElementTest::CreateContent() +{ + std::list> children; + for (int32_t i = 0; i < ITEM_COUNT; i++) { + children.emplace_back(AceType::MakeRefPtr()); + } + + return AceType::MakeRefPtr(FlexAlign::FLEX_START, FlexAlign::FLEX_START, children); +} + +/** + * @tc.name: TabContentElementTest001 + * @tc.desc: Verify the basic function of request focus and release focus. + * @tc.type: FUNC + * @tc.require: AR000DHJ5Q + * @tc.author: jiangtao + */ +HWTEST_F(TabContentElementTest, TabContentElementTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the RootContainer with tabBar and tabContent. + * @tc.expected: step1. RootContainer and tabBar acquire the focus. + */ + ASSERT_TRUE(rootContainer_->IsCurrentFocus()); + ASSERT_TRUE(tabBar_->IsCurrentFocus()); + ASSERT_FALSE(tabContent_->IsCurrentFocus()); + + /** + * @tc.steps: step2. Animation to the down ITEM_COUNT + 1 times. + * @tc.expected: step2. tabContent acquire the focus. tabContent's latest child get the focus. + */ + for (int32_t i = 0; i < ITEM_COUNT + 1; i++) { + rootContainer_->HandleKeyEvent(DOWN_KEY); + } + ASSERT_TRUE(rootContainer_->IsCurrentFocus()); + ASSERT_FALSE(tabBar_->IsCurrentFocus()); + ASSERT_TRUE(tabContent_->IsCurrentFocus()); + if (!CheckContent(tabContent_->GetTabContentChild(controller_->GetIndex()), 2)) { + ASSERT_TRUE(false); + } + + /** + * @tc.steps: step2. Animation to the up. + * @tc.expected: step2. tabContent acquire the focus. tabContent's second child get the focus. + */ + rootContainer_->HandleKeyEvent(UP_KEY); + ASSERT_TRUE(rootContainer_->IsCurrentFocus()); + ASSERT_FALSE(tabBar_->IsCurrentFocus()); + ASSERT_TRUE(tabContent_->IsCurrentFocus()); + if (!CheckContent(tabContent_->GetTabContentChild(controller_->GetIndex()), 1)) { + ASSERT_TRUE(false); + } + + /** + * @tc.steps: step3. Animation to the right. + * @tc.expected: step3. focus will not change. + */ + rootContainer_->HandleKeyEvent(RIGHT_KEY); + ASSERT_TRUE(rootContainer_->IsCurrentFocus()); + ASSERT_FALSE(tabBar_->IsCurrentFocus()); + ASSERT_TRUE(tabContent_->IsCurrentFocus()); + if (!CheckContent(tabContent_->GetTabContentChild(controller_->GetIndex()), 1)) { + ASSERT_TRUE(false); + } + + /** + * @tc.steps: step4. Animation to the left. + * @tc.expected: step4. focus will not change. + */ + rootContainer_->HandleKeyEvent(LEFT_KEY); + ASSERT_TRUE(rootContainer_->IsCurrentFocus()); + ASSERT_TRUE(tabBar_->IsCurrentFocus()); +} + +/** + * @tc.name: TabContentElementTest002 + * @tc.desc: When tabContent got the focus, change to another focusable child. + * @tc.type: FUNC + * @tc.require: AR000DHJ5Q + * @tc.author: jiangtao + */ +HWTEST_F(TabContentElementTest, TabContentElementTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the RootContainer with tabBar and tabContent. + * @tc.expected: step1. RootContainer and tabBar acquire the focus. + */ + ASSERT_TRUE(rootContainer_->IsCurrentFocus()); + ASSERT_TRUE(tabBar_->IsCurrentFocus()); + ASSERT_FALSE(tabContent_->IsCurrentFocus()); + + /** + * @tc.steps: step2. Animation to the down ITEM_COUNT + 1 times. + * @tc.expected: step2. tabContent acquire the focus. latest child get the focus. + */ + for (int32_t i = 0; i < ITEM_COUNT + 1; i++) { + rootContainer_->HandleKeyEvent(DOWN_KEY); + } + ASSERT_TRUE(rootContainer_->IsCurrentFocus()); + ASSERT_FALSE(tabBar_->IsCurrentFocus()); + ASSERT_TRUE(tabContent_->IsCurrentFocus()); + if (!CheckContent(tabContent_->GetTabContentChild(controller_->GetIndex()), 2)) { + ASSERT_TRUE(false); + } + + /** + * @tc.steps: step3. Change to another focusable child + * @tc.expected: step3. tabContent acquire the focus. first child get the focus. + */ + tabContent_->ChangeByContent(1); + tabContent_->PrepareContent(1); + tabContent_->PerformBuild(); + ASSERT_TRUE(rootContainer_->IsCurrentFocus()); + ASSERT_FALSE(tabBar_->IsCurrentFocus()); + ASSERT_FALSE(tabContent_->IsCurrentFocus()); + if (!CheckContent(tabContent_->GetTabContentChild(controller_->GetIndex()), 0)) { + ASSERT_TRUE(false); + } +} + +/** + * @tc.name: TabContentElementTest003 + * @tc.desc: When tabContent got the focus, change to another can't not focusable child. + * @tc.type: FUNC + * @tc.require: AR000DHJ5Q + * @tc.author: jiangtao + */ +HWTEST_F(TabContentElementTest, TabContentElementTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the RootContainer with tabBar and tabContent. + * @tc.expected: step1. RootContainer and tabBar acquire the focus. + */ + ASSERT_TRUE(rootContainer_->IsCurrentFocus()); + ASSERT_TRUE(tabBar_->IsCurrentFocus()); + ASSERT_FALSE(tabContent_->IsCurrentFocus()); + + /** + * @tc.steps: step2. Animation to the down ITEM_COUNT + 1 times. + * @tc.expected: step2. tabContent acquire the focus. latest child get the focus. + */ + for (int32_t i = 0; i < ITEM_COUNT + 1; i++) { + rootContainer_->HandleKeyEvent(DOWN_KEY); + } + ASSERT_TRUE(rootContainer_->IsCurrentFocus()); + ASSERT_FALSE(tabBar_->IsCurrentFocus()); + ASSERT_TRUE(tabContent_->IsCurrentFocus()); + if (!CheckContent(tabContent_->GetTabContentChild(controller_->GetIndex()), 2)) { + ASSERT_TRUE(false); + } + + /** + * @tc.steps: step3. Change to can't not focusable child. + * @tc.expected: step3. all element lost focus, and tabContent is not focusable. + */ + tabContent_->PrepareContent(2); + tabContent_->PerformBuild(); + tabContent_->ChangeByContent(2); + ASSERT_TRUE(rootContainer_->IsCurrentFocus()); + ASSERT_FALSE(tabBar_->IsCurrentFocus()); + ASSERT_FALSE(tabContent_->IsCurrentFocus()); + ASSERT_FALSE(tabContent_->IsFocusable()); + + /** + * @tc.steps: step4. Animation to the up. + * @tc.expected: step4. RootContainer and tabBar acquire the focus. + */ + rootContainer_->HandleKeyEvent(UP_KEY); + ASSERT_TRUE(rootContainer_->IsCurrentFocus()); + ASSERT_TRUE(tabBar_->IsCurrentFocus()); + ASSERT_FALSE(tabContent_->IsCurrentFocus()); +} + +/** + * @tc.name: TabContentElementTest004 + * @tc.desc: When tabContent lost the focus, change to another focusable child. + * @tc.type: FUNC + * @tc.require: AR000DHJ5Q + * @tc.author: jiangtao + */ +HWTEST_F(TabContentElementTest, TabContentElementTest004, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the RootContainer with tabBar and tabContent. + * @tc.expected: step1. RootContainer and tabBar acquire the focus. + */ + ASSERT_TRUE(rootContainer_->IsCurrentFocus()); + ASSERT_TRUE(tabBar_->IsCurrentFocus()); + ASSERT_FALSE(tabContent_->IsCurrentFocus()); + + /** + * @tc.steps: step2. Change to another focusable child + * @tc.expected: step2. focus not change, tabContent can be focusable. + */ + tabContent_->ChangeByContent(1); + tabContent_->PrepareContent(1); + tabContent_->PerformBuild(); + ASSERT_TRUE(rootContainer_->IsCurrentFocus()); + ASSERT_TRUE(tabBar_->IsCurrentFocus()); + ASSERT_FALSE(tabContent_->IsCurrentFocus()); + ASSERT_TRUE(tabContent_->IsFocusable()); + + /** + * @tc.steps: step3. Animation to the down. + * @tc.expected: step3. tabContent acquire the focus. first child get the focus. + */ + rootContainer_->HandleKeyEvent(DOWN_KEY); + ASSERT_TRUE(rootContainer_->IsCurrentFocus()); + ASSERT_FALSE(tabBar_->IsCurrentFocus()); + ASSERT_TRUE(tabContent_->IsCurrentFocus()); + if (!CheckContent(tabContent_->GetTabContentChild(controller_->GetIndex()), 0)) { + ASSERT_TRUE(false); + } +} + +/** + * @tc.name: TabContentElementTest005 + * @tc.desc: When tabContent lost the focus, change to another can't not focusable child. + * @tc.type: FUNC + * @tc.require: AR000DHJ5Q + * @tc.author: jiangtao + */ +HWTEST_F(TabContentElementTest, TabContentElementTest005, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the RootContainer with tabBar and tabContent. + * @tc.expected: step1. RootContainer and tabBar acquire the focus. + */ + ASSERT_TRUE(rootContainer_->IsCurrentFocus()); + ASSERT_TRUE(tabBar_->IsCurrentFocus()); + ASSERT_FALSE(tabContent_->IsCurrentFocus()); + + /** + * @tc.steps: step2. Change to another focusable child + * @tc.expected: step2. focus not change, tabContent can not be focusable. + */ + tabContent_->ChangeByContent(2); + tabContent_->PrepareContent(2); + tabContent_->PerformBuild(); + ASSERT_TRUE(rootContainer_->IsCurrentFocus()); + ASSERT_TRUE(tabBar_->IsCurrentFocus()); + ASSERT_FALSE(tabContent_->IsCurrentFocus()); + ASSERT_FALSE(tabContent_->IsFocusable()); + + /** + * @tc.steps: step3. Animation to the down. + * @tc.expected: step3. focus will not change. + */ + rootContainer_->HandleKeyEvent(DOWN_KEY); + ASSERT_TRUE(rootContainer_->IsCurrentFocus()); + ASSERT_TRUE(tabBar_->IsCurrentFocus()); + ASSERT_FALSE(tabContent_->IsCurrentFocus()); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/tabbar/tab_test_utils.h b/frameworks/core/components/test/unittest/tabbar/tab_test_utils.h new file mode 100644 index 00000000..d4960459 --- /dev/null +++ b/frameworks/core/components/test/unittest/tabbar/tab_test_utils.h @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_TABBAR_TAB_TEST_UTILS_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_TABBAR_TAB_TEST_UTILS_H + +#include "core/event/key_event.h" +#include "core/focus/focus_node.h" +#include "core/pipeline/base/render_element.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { +namespace { + +const KeyEvent RIGHT_KEY { KeyCode::TV_CONTROL_RIGHT, KeyAction::UP, 0, 0, 0}; +const KeyEvent LEFT_KEY { KeyCode::TV_CONTROL_LEFT, KeyAction::UP, 0, 0, 0}; +const KeyEvent UP_KEY { KeyCode::TV_CONTROL_UP, KeyAction::UP, 0, 0, 0}; +const KeyEvent DOWN_KEY { KeyCode::TV_CONTROL_DOWN, KeyAction::UP, 0, 0, 0}; + +} // namespace + +class MockRenderNode : public RenderNode { + DECLARE_ACE_TYPE(MockRenderNode, RenderNode); + +public: + explicit MockRenderNode(bool takeBoundary = false) : RenderNode(takeBoundary) {} + ~MockRenderNode() override = default; + + void PerformLayout() override {} + void Update(const RefPtr& component) override {} + + void MockSetParent() + { + SetParent(nullptr); + } +}; + +class ContainerElement : public FocusGroup, public RenderElement { + DECLARE_ACE_TYPE(ContainerElement, FocusGroup, RenderElement); + +public: + void Create() + { + RefPtr temp = AceType::MakeRefPtr(); + temp->MockSetParent(); + renderNode_ = temp; + } + + bool RequestNextFocus(bool vertical, bool reverse, const Rect& rect) override + { + return GoToNextFocus(reverse); + } +}; + +class FocusElement : public BoxElement, public FocusNode { + DECLARE_ACE_TYPE(FocusElement, BoxElement, FocusNode); +}; + +class FocusComponet : public BoxComponent { + DECLARE_ACE_TYPE(FocusComponet, BoxComponent) + +public: + RefPtr CreateElement() override + { + return AceType::MakeRefPtr(); + }; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_TABBAR_TAB_TEST_UTILS_H diff --git a/frameworks/core/components/test/unittest/tabbar/tabbar_creator_test.cpp b/frameworks/core/components/test/unittest/tabbar/tabbar_creator_test.cpp new file mode 100644 index 00000000..3490fac9 --- /dev/null +++ b/frameworks/core/components/test/unittest/tabbar/tabbar_creator_test.cpp @@ -0,0 +1,667 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "core/components/tab_bar/tab_bar_component.h" +#include "core/components/test/json/component_factory.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +const int32_t CONTROLLER_ID = 12345; +const Edge LABEL_PADDING = Edge(100.0, 50.0, 50.0, 0.0); + +RefPtr CreateTabBarComponent(const std::string& testJson) +{ + const auto dslBuf = reinterpret_cast(testJson.c_str()); + size_t dslLen = testJson.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + if (!component) { + return nullptr; + } + return AceType::DynamicCast(component); +} + +} // namespace + +class TabBarCreatorTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; +}; + +void TabBarCreatorTest::SetUpTestCase() {} + +void TabBarCreatorTest::TearDownTestCase() {} + +void TabBarCreatorTest::SetUp() {} + +void TabBarCreatorTest::TearDown() {} + +/** + * @tc.name: TabBarCreator001 + * @tc.desc: Verify BoxCreator can create TabBar with controllerId and tabs only. + * @tc.type: FUNC + * @tc.require: AR000DAR2V + * @tc.author: jiangtao + */ +HWTEST_F(TabBarCreatorTest, TabBarCreator001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of TabBar component with controllerId and tabs. + */ + std::string dslJson = R"( + { + "className": "Tabbar", + "controllerId": 12345, + "tabs": [ + { + "className": "Tab", + "text": "Tab1" + } + ] + })"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get TabBar component. + * @tc.expected: step2. tabs and controller are set correctly and other properties set default. + */ + RefPtr tabBar = CreateTabBarComponent(dslJson); + EXPECT_TRUE(tabBar); + EXPECT_EQ(tabBar->GetChildren().size(), std::size_t(1)); + EXPECT_EQ(tabBar->GetController()->GetId(), CONTROLLER_ID); + EXPECT_EQ(tabBar->GetIndex(), 0); + EXPECT_EQ(tabBar->GetMode(), TabBarMode::FIXED); + EXPECT_EQ(tabBar->GetIndicatorSize(), TabBarIndicatorType::LABEL); + EXPECT_EQ(tabBar->GetLabelPadding(), Edge()); +} + +/** + * @tc.name: TabBarCreator002 + * @tc.desc: Verify BoxCreator can not create TabBar with tabs only. + * @tc.type: FUNC + * @tc.require: AR000DAR2V + * @tc.author: jiangtao + */ +HWTEST_F(TabBarCreatorTest, TabBarCreator002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of TabBar component with tabs only. + */ + std::string dslJson = R"( + { + "className": "Tabbar", + "tabs": [ + { + "className": "Tab", + "text": "Tab1" + } + ] + })"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get TabBar component. + * @tc.expected: step2. TabBar component is null + */ + RefPtr tabBar = CreateTabBarComponent(dslJson); + EXPECT_TRUE(!tabBar); +} + +/** + * @tc.name: TabBarCreator003 + * @tc.desc: Verify BoxCreator can not create TabBar with invalid type of controllerId. + * @tc.type: FUNC + * @tc.require: AR000DAR2V + * @tc.author: jiangtao + */ +HWTEST_F(TabBarCreatorTest, TabBarCreator003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of TabBar component with invalid type of controllerId. + */ + std::string dslJson = R"( + { + "className": "Tabbar", + "controllerId": "0", + "tabs": [ + { + "className": "Tab", + "text": "Tab1" + } + ] + })"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get TabBar component. + * @tc.expected: step2. TabBar component is null + */ + RefPtr tabBar = CreateTabBarComponent(dslJson); + EXPECT_TRUE(!tabBar); +} + +/** + * @tc.name: TabBarCreator004 + * @tc.desc: Verify BoxCreator can not create TabBar without tabs. + * @tc.type: FUNC + * @tc.require: AR000DAR2V + * @tc.author: jiangtao + */ +HWTEST_F(TabBarCreatorTest, TabBarCreator004, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of TabBar component without tabs. + */ + std::string dslJson = R"( + { + "className": "Tabbar", + "controllerId": 0 + })"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get TabBar component. + * @tc.expected: step2. TabBar component is null + */ + RefPtr tabBar = CreateTabBarComponent(dslJson); + EXPECT_TRUE(!tabBar); +} + +/** + * @tc.name: TabBarCreator005 + * @tc.desc: Verify BoxCreator can not create TabBar with empty tabs. + * @tc.type: FUNC + * @tc.require: AR000DAR2V + * @tc.author: jiangtao + */ +HWTEST_F(TabBarCreatorTest, TabBarCreator005, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of TabBar component with empty tabs. + */ + std::string dslJson = R"( + { + "className": "Tabbar", + "controllerId": 0, + "tabs": [] + })"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get TabBar component. + * @tc.expected: step2. TabBar component is null + */ + RefPtr tabBar = CreateTabBarComponent(dslJson); + EXPECT_TRUE(!tabBar); +} + +/** + * @tc.name: TabBarCreator006 + * @tc.desc: Verify BoxCreator can not create TabBar with invalid value of index. + * @tc.type: FUNC + * @tc.require: AR000DAR2V AR000DAR30 + * @tc.author: jiangtao + */ +HWTEST_F(TabBarCreatorTest, TabBarCreator006, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of TabBar component with invalid value of index. + */ + std::string dslJson = R"( + { + "className": "Tabbar", + "controllerId": 12345, + "index": -1, + "tabs": [ + { + "className": "Tab", + "text": "Tab1" + } + ] + })"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get TabBar component. + * @tc.expected: step2. TabBar component create success and index is default 0. + */ + RefPtr tabBar = CreateTabBarComponent(dslJson); + EXPECT_TRUE(tabBar != nullptr); + EXPECT_TRUE(tabBar->GetIndex() == 0); +} + +/** + * @tc.name: TabBarCreator007 + * @tc.desc: Verify BoxCreator can not create TabBar with invalid value of index. + * @tc.type: FUNC + * @tc.require: AR000DAR2V AR000DAR30 + * @tc.author: jiangtao + */ +HWTEST_F(TabBarCreatorTest, TabBarCreator007, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of TabBar component with invalid value of index. + */ + std::string dslJson = R"( + { + "className": "Tabbar", + "controllerId": 12345, + "index": 1, + "tabs": [ + { + "className": "Tab", + "text": "Tab1" + } + ] + })"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get TabBar component. + * @tc.expected: step2. TabBar component create success and index is default 0. + */ + RefPtr tabBar = CreateTabBarComponent(dslJson); + EXPECT_TRUE(tabBar != nullptr); + EXPECT_TRUE(tabBar->GetIndex() == 0); +} + +/** + * @tc.name: TabBarCreator008 + * @tc.desc: Verify the default value of labelColor and unselectedLabelColor. + * @tc.type: FUNC + * @tc.require: AR000DAR2V + * @tc.author: jiangtao + */ +HWTEST_F(TabBarCreatorTest, TabBarCreator008, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of TabBar component with labelColor. + */ + std::string dslJson = R"( + { + "className": "Tabbar", + "controllerId": 1, + "labelColor": { + "className": "Color", + "alpha": 255, + "red": 0, + "green": 0, + "blue": 255 + }, + "tabs": [ + { + "className": "Tab", + "text": "Tab1" + } + ] + })"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get TabBar component. + * @tc.expected: step2. unselectedLabelColor's alpha is 70% of labelColor. + */ + RefPtr tabBar = CreateTabBarComponent(dslJson); + EXPECT_TRUE(tabBar); +} + +/** + * @tc.name: TabBarCreator009 + * @tc.desc: Verify the default value of labelStyle and unselectedLabelStyle. + * @tc.type: FUNC + * @tc.require: AR000DAR2V + * @tc.author: jiangtao + */ +HWTEST_F(TabBarCreatorTest, TabBarCreator009, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of TabBar component with labelStyle. + */ + std::string dslJson = R"( + { + "className": "Tabbar", + "controllerId": 1, + "labelStyle": { + "className": "TextStyle", + "fontSize": 123 + }, + "tabs": [ + { + "className": "Tab", + "text": "Tab1" + } + ] + })"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get TabBar component. + * @tc.expected: step2. unselectedLabelStyle is same as labelStyle. + */ + RefPtr tabBar = CreateTabBarComponent(dslJson); + EXPECT_TRUE(tabBar); +} + +/** + * @tc.name: TabBarCreator010 + * @tc.desc: Verify TabBarCreator can create TabBar component with all properties. + * @tc.type: FUNC + * @tc.require: AR000DAR2V + * @tc.author: jiangtao + */ +HWTEST_F(TabBarCreatorTest, TabBarCreator010, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of TabBar component with all properties. + */ + std::string dslJson = R"( + { + "className": "Tabbar", + "controllerId": 12345, + "index": 1, + "indicatorSize": "label", + "mode": "scrollable", + "labelPadding": { + "className": "Edge", + "left": 100.0, + "top": 50.0, + "right": 50.0 + }, + "labelStyle": { + "className": "TextStyle", + "fontSize": 123 + }, + "unselectedLabelStyle": { + "className": "TextStyle", + "fontSize": 100 + }, + "labelColor": { + "className": "Color", + "alpha": 255, + "red": 0, + "green": 0, + "blue": 255 + }, + "unselectedLabelColor": { + "className": "Color", + "alpha": 255, + "red": 0, + "green": 255, + "blue": 0 + }, + "tabs": [ + { + "className": "Tab", + "text": "Tab1" + }, + { + "className": "Tab", + "text": "Tab2" + } + ] + })"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get TabBar component. + * @tc.expected: step2. all properties are set correctly. + */ + RefPtr tabBar = CreateTabBarComponent(dslJson); + + EXPECT_TRUE(tabBar); + EXPECT_EQ(tabBar->GetChildren().size(), std::size_t(2)); + EXPECT_EQ(tabBar->GetController()->GetId(), CONTROLLER_ID); + EXPECT_EQ(tabBar->GetIndex(), 1); + EXPECT_EQ(tabBar->GetMode(), TabBarMode::SCROLLABEL); + EXPECT_EQ(tabBar->GetIndicatorSize(), TabBarIndicatorType::LABEL); + EXPECT_EQ(tabBar->GetLabelPadding(), LABEL_PADDING); +} + +/** + * @tc.name: TabBarCreator011 + * @tc.desc: Verify TabBarCreator can not create TabBarItem component with className only. + * @tc.type: FUNC + * @tc.require: AR000DAR2V + * @tc.author: jiangtao + */ +HWTEST_F(TabBarCreatorTest, TabBarCreator011, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of TabBar component with className only. + */ + std::string dslJson = R"( + { + "className": "Tabbar", + "controllerId": 12345, + "tabs": [ + { + "className": "Tab" + } + ] + })"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get TabBar component. + * @tc.expected: step2. TabBar component create success. + */ + RefPtr tabBar = CreateTabBarComponent(dslJson); + EXPECT_TRUE(tabBar != nullptr); +} + +/** + * @tc.name: TabBarCreator012 + * @tc.desc: Verify TabBarCreator can create TabBarItem component with different property set. + * @tc.type: FUNC + * @tc.require: AR000DAR2V + * @tc.author: jiangtao + */ +HWTEST_F(TabBarCreatorTest, TabBarCreator012, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of TabBar component with different property set. + */ + std::string dslJson = R"( + { + "className": "Tabbar", + "controllerId": 12345, + "tabs": [ + { + "className": "Tab" + }, + { + "className": "Tab", + "text": "Tab1" + }, + { + "className": "Tab", + "icon": { + "className": "Image", + "src": "pictures/480x480/001.jpg", + "width": 100, + "height": 100 + } + }, + { + "className": "Tab", + "text": "Tab3", + "icon": { + "className": "Image", + "src": "pictures/480x480/001.jpg", + "width": 100, + "height": 100 + } + }, + { + "className": "Tab", + "child": { + "className": "Text", + "value": "Tab4", + "textStyle": { + "className": "TextStyle", + "fontSize": 50 + } + } + }, + { + "className": "Tab", + "text": "Tab5", + "icon": { + "className": "Image", + "src": "pictures/480x480/001.jpg", + "width": 100, + "height": 100 + }, + "child": { + "className": "Text", + "value": "Tab5", + "textStyle": { + "className": "TextStyle", + "fontSize": 50 + } + } + } + ] + })"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get TabBar component. + * @tc.expected: step2. TabBar's size is 5. + */ + RefPtr tabBar = CreateTabBarComponent(dslJson); + EXPECT_TRUE(tabBar); + const std::list>& tabs = tabBar->GetChildren(); + EXPECT_EQ(tabs.size(), size_t(5)); +} + +/** + * @tc.name: TabBarCreator013 + * @tc.desc: Verify vertical of TabBarCreator. + * @tc.type: FUNC + * @tc.require: AR000DQ1V2 + * @tc.author: liujinwei + */ +HWTEST_F(TabBarCreatorTest, TabBarCreator013, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of TabBar component . + */ + std::string dslJson = R"( + { + "className": "Tabbar", + "controllerId": 12346, + "tabs": [ + { + "className": "Tab", + "child": { + "className": "Text", + "value": "Tab4", + "textStyle": { + "className": "TextStyle", + "fontSize": 50 + } + } + } + ] + })"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get TabBar component. + * @tc.expected: step2. TabBar component is right + */ + RefPtr tabBar = CreateTabBarComponent(dslJson); + EXPECT_TRUE(tabBar); + EXPECT_EQ(tabBar->IsVertical(), false); +} + +/** + * @tc.name: TabBarCreator014 + * @tc.desc: Verify vertical of TabBarCreator. + * @tc.type: FUNC + * @tc.require: AR000DQ1V2 + * @tc.author: liujinwei + */ +HWTEST_F(TabBarCreatorTest, TabBarCreator014, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of TabBar component . + */ + std::string dslJson = R"( + { + "className": "Tabbar", + "controllerId": 12347, + "vertical":false, + "tabs": [ + { + "className": "Tab", + "child": { + "className": "Text", + "value": "Tab4", + "textStyle": { + "className": "TextStyle", + "fontSize": 50 + } + } + } + ] + })"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get TabBar component. + * @tc.expected: step2. TabBar component is right + */ + RefPtr tabBar = CreateTabBarComponent(dslJson); + EXPECT_TRUE(tabBar); + EXPECT_EQ(tabBar->IsVertical(), false); +} + +/** + * @tc.name: TabBarCreator015 + * @tc.desc: Verify vertical of TabBarCreator. + * @tc.type: FUNC + * @tc.require: AR000DQ1V2 + * @tc.author: liujinwei + */ +HWTEST_F(TabBarCreatorTest, TabBarCreator015, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of TabBar component . + */ + std::string dslJson = R"( + { + "className": "Tabbar", + "controllerId": 12348, + "vertical":true, + "tabs": [ + { + "className": "Tab", + "child": { + "className": "Text", + "value": "Tab4", + "textStyle": { + "className": "TextStyle", + "fontSize": 50 + } + } + } + ] + })"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get TabBar component. + * @tc.expected: step2. TabBar component is right + */ + RefPtr tabBar = CreateTabBarComponent(dslJson); + EXPECT_TRUE(tabBar); + EXPECT_EQ(tabBar->IsVertical(), true); +} +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/tabbar/tabbar_test_utils.cpp b/frameworks/core/components/test/unittest/tabbar/tabbar_test_utils.cpp new file mode 100644 index 00000000..9ad77e7c --- /dev/null +++ b/frameworks/core/components/test/unittest/tabbar/tabbar_test_utils.cpp @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/unittest/tabbar/tabbar_test_utils.h" + +#include "core/components/box/box_component.h" +#include "core/components/text/text_component.h" + +namespace OHOS::Ace { +namespace { + +constexpr double RECT_WIDTH = 1080.0; +constexpr double RECT_HEIGHT = 2244.0; + +} // namespace + +RefPtr TabBarTestUtils::CreateRenderRoot() +{ + RefPtr root = AceType::MakeRefPtr(); + const Rect paintRect(0.0, 0.0, RECT_WIDTH, RECT_HEIGHT); + root->SetPaintRect(paintRect); + return root; +} + +RefPtr TabBarTestUtils::CreateRenderBox(const double width, const double height, BoxFlex flex) +{ + RefPtr renderBox = AceType::MakeRefPtr(); + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetWidth(width); + boxComponent->SetHeight(height); + boxComponent->SetFlex(flex); + renderBox->Update(boxComponent); + return renderBox; +} + +RefPtr TabBarTestUtils::CreateRenderTabBar() +{ + return nullptr; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/tabbar/tabbar_test_utils.h b/frameworks/core/components/test/unittest/tabbar/tabbar_test_utils.h new file mode 100644 index 00000000..4275b7e5 --- /dev/null +++ b/frameworks/core/components/test/unittest/tabbar/tabbar_test_utils.h @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_TABBAR_TABBAR_TEST_UTILS_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_TABBAR_TABBAR_TEST_UTILS_H + +#include "core/components/box/render_box.h" +#include "core/components/flex/render_flex.h" +#include "core/components/root/render_root.h" +#include "core/components/tab_bar/render_tab_bar.h" + +namespace OHOS::Ace { + +class MockRenderBox final : public RenderBox { + DECLARE_ACE_TYPE(MockRenderBox, RenderBox); + +public: + MockRenderBox() = default; + ~MockRenderBox() override = default; +}; + +class MockRenderRoot final : public RenderRoot { + DECLARE_ACE_TYPE(MockRenderRoot, RenderRoot); + +public: + MockRenderRoot() = default; + ~MockRenderRoot() override = default; +}; + +class MockRenderTabBar final : public RenderTabBar { + DECLARE_ACE_TYPE(MockRenderTabBar, RenderTabBar); + +public: + MockRenderTabBar() = default; + ~MockRenderTabBar() override = default; + + double GetActualWidth() const + { + return actualWidth_; + } + + TabBarMode GetMode() const + { + return mode_; + } + + int32_t GetIndex() const + { + return index_; + } + + int32_t GetTabsSize() const + { + return tabsSize_; + } +}; + +class TabBarTestUtils { +public: + static RefPtr CreateRenderRoot(); + static RefPtr CreateRenderBox(const double width, const double height, BoxFlex flex = BoxFlex::FLEX_NO); + static RefPtr CreateRenderTabBar(); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_TABBAR_TABBAR_TEST_UTILS_H diff --git a/frameworks/core/components/test/unittest/tabbar/tabbarindicator_creator_test.cpp b/frameworks/core/components/test/unittest/tabbar/tabbarindicator_creator_test.cpp new file mode 100644 index 00000000..0e7b2f7a --- /dev/null +++ b/frameworks/core/components/test/unittest/tabbar/tabbarindicator_creator_test.cpp @@ -0,0 +1,204 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/json/json_util.h" +#include "core/components/tab_bar/tab_bar_component.h" +#include "core/components/test/json/tab_bar_creator.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +const Dimension INDICATOR_WIDTH = Dimension(10.0, DimensionUnit::PX); +const Color INDICATOR_COLOR = Color::FromARGB(255, 100, 100, 100); +const Edge INDICATOR_PADDING = Edge(123.0); + +RefPtr CreateTabBarIndicatorComponent(const std::string& testJson) +{ + const char* errMsg = nullptr; + std::unique_ptr componentJson = JsonUtil::ParseJsonString(testJson.c_str(), &errMsg); + if (componentJson == nullptr) { + return nullptr; + } + + RefPtr component = TabBarCreator::CreateIndicatorFromJson(*componentJson); + if (!component) { + return nullptr; + } + + RefPtr indicatorComponent = AceType::DynamicCast(component); + return indicatorComponent; +} + +} // namespace + +class TabBarIndicatorCreatorTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; +}; + +void TabBarIndicatorCreatorTest::SetUpTestCase() {} + +void TabBarIndicatorCreatorTest::TearDownTestCase() {} + +void TabBarIndicatorCreatorTest::SetUp() {} + +void TabBarIndicatorCreatorTest::TearDown() {} + +/** + * @tc.name: TabBarIndicatorCreator001 + * @tc.desc: Verify BoxCreator can create Indicator with empty json string. + * @tc.type: FUNC + * @tc.require: AR000DAR2V + * @tc.author: jiangtao + */ +HWTEST_F(TabBarIndicatorCreatorTest, TabBarIndicator001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of Indicator component with empty json string. + */ + std::string dslJson = "{}"; + + /** + * @tc.steps: step2. call CreateIndicatorFromJson interface and get Indicator component. + * @tc.expected: step2. Indicator's all properties are default . + */ + RefPtr indicator = CreateTabBarIndicatorComponent(dslJson); + EXPECT_TRUE(indicator); + EXPECT_EQ(indicator->GetIndicatorStyle(), TabBarIndicatorStyle::DEFAULT); + EXPECT_EQ(indicator->GetIndicatorColor(), DEFAULT_INDICATOR_COLOR); + EXPECT_EQ(indicator->GetIndicatorWidth(), DEFAULT_INDICATOR_WIDTH); + EXPECT_EQ(indicator->GetIndicatorPadding(), DEFAULT_INDICATOR_PADDING); + + const auto& backDecoration = indicator->GetBackDecoration(); + EXPECT_EQ(backDecoration->GetBackgroundColor(), DEFAULT_INDICATOR_COLOR); + EXPECT_TRUE(NearEqual(indicator->GetHeightDimension().Value(), DEFAULT_INDICATOR_WIDTH.Value())); + EXPECT_EQ(indicator->GetMargin(), DEFAULT_INDICATOR_PADDING); +} + +/** + * @tc.name: TabBarIndicatorCreator002 + * @tc.desc: Verify BoxCreator can create Indicator with default style properties. + * @tc.type: FUNC + * @tc.require: AR000DAR2V + * @tc.author: jiangtao + */ +HWTEST_F(TabBarIndicatorCreatorTest, TabBarIndicator002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of Indicator component with default style properties. + */ + std::string dslJson = R"( + { + "indicatorWidth": 10, + "indicatorPadding": { + "className": "Edge", + "value": 123.0 + }, + "indicatorColor": { + "className": "Color", + "alpha": 255, + "red": 0, + "green": 0, + "blue": 255 + } + })"; + + /** + * @tc.steps: step2. call CreateIndicatorFromJson interface and get Indicator component. + * @tc.expected: step2. default style properties are correct set . + */ + RefPtr indicator = CreateTabBarIndicatorComponent(dslJson); + EXPECT_TRUE(indicator); + EXPECT_EQ(indicator->GetIndicatorStyle(), TabBarIndicatorStyle::DEFAULT); + EXPECT_EQ(indicator->GetIndicatorColor(), Color::BLUE); + EXPECT_EQ(indicator->GetIndicatorWidth(), INDICATOR_WIDTH); + EXPECT_EQ(indicator->GetIndicatorPadding(), INDICATOR_PADDING); + + const auto& backDecoration = indicator->GetBackDecoration(); + EXPECT_EQ(backDecoration->GetBackgroundColor(), Color::BLUE); + EXPECT_TRUE(NearEqual(indicator->GetHeightDimension().Value(), INDICATOR_WIDTH.Value())); +} + +/** + * @tc.name: TabBarIndicatorCreator003 + * @tc.desc: Verify BoxCreator can create Indicator with custom style properties. + * @tc.type: FUNC + * @tc.require: AR000DAR2V + * @tc.author: jiangtao + */ +HWTEST_F(TabBarIndicatorCreatorTest, TabBarIndicator003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of Indicator component with custom style properties. + */ + std::string dslJson = R"( + { + "indicator": { + "className": "Decoration", + "border": { + "className": "Border", + "top": { + "className": "BorderEdge", + "color": { + "className": "Color", + "alpha": 255, + "red": 100, + "green": 100, + "blue": 100 + }, + "width": 10.0, + "style": "solid" + } + } + }, + "indicatorWidth": 10, + "indicatorPadding": { + "className": "Edge", + "value": 0 + }, + "indicatorColor": { + "className": "Color", + "alpha": 255, + "red": 0, + "green": 0, + "blue": 255 + } + })"; + + /** + * @tc.steps: step2. call CreateIndicatorFromJson interface and get Indicator component. + * @tc.expected: step2. custom style are correct set and default style properties are not set . + */ + RefPtr indicator = CreateTabBarIndicatorComponent(dslJson); + EXPECT_TRUE(indicator); + EXPECT_EQ(indicator->GetIndicatorColor(), DEFAULT_INDICATOR_COLOR); + EXPECT_EQ(indicator->GetIndicatorWidth(), DEFAULT_INDICATOR_WIDTH); + EXPECT_EQ(indicator->GetIndicatorPadding(), DEFAULT_INDICATOR_PADDING); + EXPECT_EQ(indicator->GetIndicatorStyle(), TabBarIndicatorStyle::CUSTOM); + const Border& border = indicator->GetBackDecoration()->GetBorder(); + EXPECT_EQ(border.Top().GetColor(), INDICATOR_COLOR); + EXPECT_TRUE(NearEqual(border.Top().GetWidth().Value(), INDICATOR_WIDTH.Value())); + EXPECT_EQ(border.Top().GetBorderStyle(), BorderStyle::SOLID); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/tabbar/tabcontent_creator_test.cpp b/frameworks/core/components/test/unittest/tabbar/tabcontent_creator_test.cpp new file mode 100644 index 00000000..823c6305 --- /dev/null +++ b/frameworks/core/components/test/unittest/tabbar/tabcontent_creator_test.cpp @@ -0,0 +1,454 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "core/components/tab_bar/tab_bar_component.h" +#include "core/components/tab_bar/tab_content_component.h" +#include "core/components/test/json/tab_bar_creator.h" +#include "core/components/test/json/tab_content_creator.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +RefPtr CreateTabContentComponent(const std::string& testJson) +{ + const auto dslBuf = reinterpret_cast(testJson.c_str()); + size_t dslLen = testJson.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + if (!component) { + return nullptr; + } + return AceType::DynamicCast(component); +} + +void CheckTabContentDefaultValue(const RefPtr& tabContent) +{ + EXPECT_TRUE(tabContent); + EXPECT_EQ(tabContent->GetController()->GetIndex(), 0); +} + +RefPtr CreateTabBarComponent(const std::string& testJson) +{ + const auto dslBuf = reinterpret_cast(testJson.c_str()); + size_t dslLen = testJson.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + if (!component) { + return nullptr; + } + return AceType::DynamicCast(component); +} + +} // namespace + +class TabContentCreatorTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; +}; + +void TabContentCreatorTest::SetUpTestCase() {} + +void TabContentCreatorTest::TearDownTestCase() {} + +void TabContentCreatorTest::SetUp() {} + +void TabContentCreatorTest::TearDown() {} + +/** + * @tc.name: TabContentCreator001 + * @tc.desc: Test parse TabContent's field successfully from no field dsl json of tabcontent component. + * @tc.type: FUNC + * @tc.require: AR000DAR32 + * @tc.author: liujinwei + */ +HWTEST_F(TabContentCreatorTest, TabContentCreator001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct the json string with no fields, then create tabcontent component with the json. + * @tc.expected: step1. TabContent component successfully created, and default fields. + */ + std::string dslJson = "{ \"className\": \"Tabcontent\" }"; + RefPtr tabContent = CreateTabContentComponent(dslJson); + CheckTabContentDefaultValue(tabContent); +} + +/** + * @tc.name: TabContentCreator002 + * @tc.desc: Test tabContent's field successfully from fields. + * @tc.type: FUNC + * @tc.require: AR000DAR32 AR000DAR33 + * @tc.author: liujinwei + */ +HWTEST_F(TabContentCreatorTest, TabContentCreator002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct the tab json string, then create tabContent component. + * @tc.expected: step1. TabContent component successfully created, and correct fields. + */ + std::string contentJson = "{" + " \"child\": [" + " {" + " \"className\": \"Text\"," + " \"value\": \"0000Good news!\"" + " }," + " {" + " \"className\": \"Text\"," + " \"value\": \"1111Good news!\"" + " }" + " ]," + " \"className\": \"Tabcontent\"," + " \"controllerId\": 1," + " \"scrollable\": false" + "}"; + RefPtr tabContent = CreateTabContentComponent(contentJson); + EXPECT_TRUE(tabContent); + EXPECT_EQ(tabContent->IsScrollable(), false); + EXPECT_EQ(tabContent->GetController()->GetIndex(), 0); +} + +/** + * @tc.name: TabContentCreator003 + * @tc.desc: Test parse TabContent's field successfully from invalid index of tabbar component. + * @tc.type: FUNC + * @tc.require: AR000DAR32 + * @tc.author: liujinwei + */ +HWTEST_F(TabContentCreatorTest, TabContentCreator003, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct the tabBar json string with invalid fields, then create tabContent component. + * @tc.expected: step1. TabContent component successfully created, and the fields has default values. + */ + std::string contentJson = "{" + " \"child\": [" + " {" + " \"className\": \"Text\"," + " \"value\": \"0000Good news!\"" + " }," + " {" + " \"className\": \"Text\"," + " \"value\": \"1111Good news!\"" + " }" + " ]," + " \"className\": \"Tabcontent\"," + " \"controllerId\": 0," + " \"scrollable\": true" + "}"; + + std::string barJson = "{" + " \"className\": \"Tabbar\"," + " \"controllerId\": 0," + " \"index\": -1," + " \"tabs\": [" + " {" + " \"className\": \"Tab\"," + " \"text\": \"Tab1\"" + " }," + " {" + " \"className\": \"Tab\"," + " \"text\": \"Tab1\"" + " }" + " ]" + "}"; + + RefPtr tabBar = CreateTabBarComponent(barJson); + RefPtr tabContent = CreateTabContentComponent(contentJson); + EXPECT_TRUE(tabContent); + EXPECT_EQ(tabContent->GetController()->GetIndex(), 0); + + /** + * @tc.steps: step2. set the index = 1, check the index of controller + * @tc.expected: step2. the new index = 1 + */ + tabBar->SetIndex(1); + + /** + * @tc.steps: step3. set the index = 5, 5 is more than the size, check the index of controller + * @tc.expected: step3. the new index = 0 + */ + tabBar->SetIndex(5); + EXPECT_EQ(tabContent->GetController()->GetIndex(), 0); +} + +/** + * @tc.name: TabContentCreator004 + * @tc.desc: Test tabContent's field successfully from tabbar component without index. + * @tc.type: FUNC + * @tc.require: AR000DAR32 + * @tc.author: liujinwei + */ +HWTEST_F(TabContentCreatorTest, TabContentCreator004, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct the tabBar json string without index, then create tabContent component. + * @tc.expected: step1. TabContent component successfully created, and the fields has default values. + */ + std::string contentJson = "{" + " \"child\": [" + " {" + " \"className\": \"Text\"," + " \"value\": \"0000Good news!\"" + " }," + " {" + " \"className\": \"Text\"," + " \"value\": \"1111Good news!\"" + " }" + " ]," + " \"className\": \"Tabcontent\"," + " \"controllerId\": 0," + " \"scrollable\": true" + "}"; + + std::string barJson = "{" + " \"className\": \"Tabbar\"," + " \"controllerId\": 0," + " \"tabs\": [" + " {" + " \"className\": \"Tab\"," + " \"text\": \"Tab1\"" + " }," + " {" + " \"className\": \"Tab\"," + " \"text\": \"Tab1\"" + " }" + " ]" + "}"; + + RefPtr tabBar = CreateTabBarComponent(barJson); + RefPtr tabContent = CreateTabContentComponent(contentJson); + EXPECT_TRUE(tabContent); + EXPECT_EQ(tabContent->GetController()->GetIndex(), 0); +} + +/** + * @tc.name: TabContentCreator005 + * @tc.desc: Test tabContent's field successfully from tabbar component with index. + * @tc.type: FUNC + * @tc.require: AR000DAR32 + * @tc.author: liujinwei + */ +HWTEST_F(TabContentCreatorTest, TabContentCreator005, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct the tabBar json string with index, then create tabContent component. + * @tc.expected: step1. TabContent component successfully created, and the fields has correct value. + */ + std::string contentJson = "{" + " \"child\": [" + " {" + " \"className\": \"Text\"," + " \"value\": \"0000Good news!\"" + " }," + " {" + " \"className\": \"Text\"," + " \"value\": \"1111Good news!\"" + " }" + " ]," + " \"className\": \"Tabcontent\"," + " \"controllerId\": 0," + " \"scrollable\": true" + "}"; + + std::string barJson = "{" + " \"className\": \"Tabbar\"," + " \"controllerId\": 0," + " \"index\": 1," + " \"tabs\": [" + " {" + " \"className\": \"Tab\"," + " \"text\": \"Tab1\"" + " }," + " {" + " \"className\": \"Tab\"," + " \"text\": \"Tab1\"" + " }" + " ]" + "}"; + + RefPtr tabBar = CreateTabBarComponent(barJson); + RefPtr tabContent = CreateTabContentComponent(contentJson); + EXPECT_TRUE(tabContent); +} + +/** + * @tc.name: TabContentCreator006 + * @tc.desc: Test tabContent's field successfully from tabbar component without scrollable. + * @tc.type: FUNC + * @tc.require: AR000DAR33 + * @tc.author: liujinwei + */ +HWTEST_F(TabContentCreatorTest, TabContentCreator006, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct the tabBar json string without index, then create tabContent component. + * @tc.expected: step1. TabContent component successfully created, and the fields has default values. + */ + std::string contentJson = "{" + " \"child\": [" + " {" + " \"className\": \"Text\"," + " \"value\": \"0000Good news!\"" + " }," + " {" + " \"className\": \"Text\"," + " \"value\": \"1111Good news!\"" + " }" + " ]," + " \"className\": \"Tabcontent\"," + " \"controllerId\": 0" + "}"; + RefPtr tabContent = CreateTabContentComponent(contentJson); + EXPECT_TRUE(tabContent); + EXPECT_EQ(tabContent->IsScrollable(), true); +} + +/** + * @tc.name: TabContentCreator007 + * @tc.desc: Test tabContent's field successfully from tabbar component with scrollable. + * @tc.type: FUNC + * @tc.require: AR000DAR33 + * @tc.author: liujinwei + */ +HWTEST_F(TabContentCreatorTest, TabContentCreator007, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct the tabBar json string with index, then create tabContent component. + * @tc.expected: step1. TabContent component successfully created, and the fields has default values. + */ + std::string contentJson = "{" + " \"child\": [" + " {" + " \"className\": \"Text\"," + " \"value\": \"0000Good news!\"" + " }," + " {" + " \"className\": \"Text\"," + " \"value\": \"1111Good news!\"" + " }" + " ]," + " \"className\": \"Tabcontent\"," + " \"controllerId\": 0," + " \"scrollable\": false" + "}"; + RefPtr tabContent = CreateTabContentComponent(contentJson); + EXPECT_TRUE(tabContent); + EXPECT_EQ(tabContent->IsScrollable(), false); +} + +/** + * @tc.name: TabContentCreator008 + * @tc.desc: Test tabContent's field successfully. + * @tc.type: FUNC + * @tc.require: AR000DQ1V3 + * @tc.author: liujinwei + */ +HWTEST_F(TabContentCreatorTest, TabContentCreator008, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct the tab json string without vertical, then create tabContent component. + * @tc.expected: step1. TabContent component successfully created, and the fields has default values. + */ + std::string contentJson = "{" + " \"child\": [" + " {" + " \"className\": \"Text\"," + " \"value\": \"0000Good news!\"" + " }," + " {" + " \"className\": \"Text\"," + " \"value\": \"1111Good news!\"" + " }" + " ]," + " \"className\": \"Tabcontent\"," + " \"controllerId\": 0" + "}"; + RefPtr tabContent = CreateTabContentComponent(contentJson); + EXPECT_TRUE(tabContent); + EXPECT_EQ(tabContent->IsVertical(), false); +} + +/** + * @tc.name: TabContentCreator009 + * @tc.desc: Test tabContent's field successfully. + * @tc.type: FUNC + * @tc.require: AR000DQ1V3 + * @tc.author: liujinwei + */ +HWTEST_F(TabContentCreatorTest, TabContentCreator009, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct the tabBar json string with index, then create tabContent component. + * @tc.expected: step1. TabContent component successfully created, and the fields has default values. + */ + std::string contentJson = "{" + " \"child\": [" + " {" + " \"className\": \"Text\"," + " \"value\": \"0000Good news!\"" + " }," + " {" + " \"className\": \"Text\"," + " \"value\": \"1111Good news!\"" + " }" + " ]," + " \"className\": \"Tabcontent\"," + " \"controllerId\": 0," + " \"vertical\": true" + "}"; + RefPtr tabContent = CreateTabContentComponent(contentJson); + EXPECT_TRUE(tabContent); + EXPECT_EQ(tabContent->IsVertical(), true); +} + +/** + * @tc.name: TabContentCreator010 + * @tc.desc: Test tabContent's field successfully. + * @tc.type: FUNC + * @tc.require: AR000DQ1V3 + * @tc.author: liujinwei + */ +HWTEST_F(TabContentCreatorTest, TabContentCreator010, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct the tabBar json string with index, then create tabContent component. + * @tc.expected: step1. TabContent component successfully created, and the fields has default values. + */ + std::string contentJson = "{" + " \"child\": [" + " {" + " \"className\": \"Text\"," + " \"value\": \"0000Good news!\"" + " }," + " {" + " \"className\": \"Text\"," + " \"value\": \"1111Good news!\"" + " }" + " ]," + " \"className\": \"Tabcontent\"," + " \"controllerId\": 0," + " \"vertical\": false" + "}"; + RefPtr tabContent = CreateTabContentComponent(contentJson); + EXPECT_TRUE(tabContent); + EXPECT_EQ(tabContent->IsVertical(), false); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/text/BUILD.gn b/frameworks/core/components/test/unittest/text/BUILD.gn new file mode 100644 index 00000000..992489be --- /dev/null +++ b/frameworks/core/components/test/unittest/text/BUILD.gn @@ -0,0 +1,64 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +if (is_standard_system) { + module_output_path = "ace_engine_standard/backenduicomponent/text" +} + +ohos_unittest("TextCreatorTest") { + module_out_path = module_output_path + + sources = [ + "text_creator_test.cpp", + "textspan_creator_test.cpp", + "textstyle_creator_test.cpp", + ] + + configs = [ + ":config_json_creator_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "$ace_root/frameworks/core/components/test:json", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + deps += [ "$ace_root/frameworks/bridge:js_framework_ohos" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_json_creator_test") { + visibility = [ ":*" ] + include_dirs = [ + "//utils/native/base/include", + "$ace_root", + ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":TextCreatorTest" ] +} diff --git a/frameworks/core/components/test/unittest/text/text_creator_test.cpp b/frameworks/core/components/test/unittest/text/text_creator_test.cpp new file mode 100644 index 00000000..2405fa29 --- /dev/null +++ b/frameworks/core/components/test/unittest/text/text_creator_test.cpp @@ -0,0 +1,160 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/json/json_util.h" +#include "base/utils/utils.h" +#include "core/components/common/layout/constants.h" +#include "core/components/test/json/component_factory.h" +#include "core/components/text/text_component.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +const std::string TEXT_DATA_JSON = "ohos1234@?!"; +constexpr int32_t TEXT_ALIGN_JSON = 3; +constexpr int32_t TEXT_ALIGN_DEFAULT = 4; +constexpr uint32_t TEXT_MAX_LINES_JSON = 10; +constexpr uint32_t TEXT_MAX_LINES_DEFAULT = UINT32_MAX; +constexpr int32_t TEXT_OVERFLOW_JSON = 1; +constexpr int32_t TEXT_OVERFLOW_DEFAULT = 0; +constexpr TextDirection TEXT_DIRECTION_JSON = TextDirection::RTL; +constexpr TextDirection TEXT_DIRECTION_DEFAULT = TextDirection::LTR; + +} // namespace + +class TextCreatorTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); + +protected: + RefPtr CreateComponent(const std::string& textJson); +}; + +void TextCreatorTest::SetUpTestCase() {} +void TextCreatorTest::TearDownTestCase() {} +void TextCreatorTest::SetUp() {} +void TextCreatorTest::TearDown() {} + +RefPtr TextCreatorTest::CreateComponent(const std::string& textJson) +{ + const auto dslBuf = reinterpret_cast(textJson.c_str()); + size_t dslLen = textJson.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + if (!component) { + return nullptr; + } + return AceType::DynamicCast(component); +} + +/** + * @tc.name: TextComponentCreator001 + * @tc.desc: Test all the properties of text. + * @tc.type: FUNC + * @tc.require: AR000DAQVN AR000DAQVP AR000DAQVQ AR000DAQVS + * @tc.author: shanshurong + */ +HWTEST_F(TextCreatorTest, TextComponentCreator001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct the json string with all property. + */ + const std::string jsonTextStr = "{ " + " \"className\": \"Text\", " + " \"value\": \"ohos1234@?!\", " + " \"textAlign\": 3, " + " \"textDirection\": 1, " + " \"textMaxLines\": 10, " + " \"textOverflow\": 1 " + "}"; + /** + * @tc.steps: step2. Check all the properties matched. + * @tc.expected: step2. All the properties are matched. + */ + RefPtr text = CreateComponent(jsonTextStr); + EXPECT_TRUE(text != nullptr); + EXPECT_EQ(text->GetData(), TEXT_DATA_JSON); + EXPECT_EQ(static_cast(text->GetTextStyle().GetTextAlign()), TEXT_ALIGN_JSON); + EXPECT_EQ(text->GetTextDirection(), TEXT_DIRECTION_JSON); + EXPECT_EQ(text->GetTextStyle().GetMaxLines(), TEXT_MAX_LINES_JSON); + EXPECT_EQ(static_cast(text->GetTextStyle().GetTextOverflow()), TEXT_OVERFLOW_JSON); +} + +/** + * @tc.name: TextComponentCreator002 + * @tc.desc: Test all the properties set by default value when value is invalid. + * @tc.type: FUNC + * @tc.require: AR000DAQVP AR000DAQVQ AR000DAQVS + * @tc.author: shanshurong + */ +HWTEST_F(TextCreatorTest, TextComponentCreator002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct the json string with all property. + */ + const std::string jsonTextStr = "{ " + " \"className\": \"Text\", " + " \"textAlign\": 10, " + " \"textDirection\": 10, " + " \"textMaxLines\": 10, " + " \"textOverflow\": 10 " + "}"; + /** + * @tc.steps: step2. Check all the properties matched. + * @tc.expected: step2. All the properties are matched. + */ + RefPtr text = CreateComponent(jsonTextStr); + EXPECT_TRUE(text != nullptr); + EXPECT_EQ(static_cast(text->GetTextStyle().GetTextAlign()), TEXT_ALIGN_DEFAULT); + EXPECT_EQ(text->GetTextDirection(), TEXT_DIRECTION_DEFAULT); + EXPECT_EQ(text->GetTextStyle().GetMaxLines(), TEXT_MAX_LINES_JSON); + EXPECT_EQ(static_cast(text->GetTextStyle().GetTextOverflow()), TEXT_OVERFLOW_DEFAULT); +} + +/** + * @tc.name: TextComponentCreator003 + * @tc.desc: Test all the properties when initialized by default value. + * @tc.type: FUNC + * @tc.require: AR000DAQVP AR000DAQVQ AR000DAQVS + * @tc.author: shanshurong + */ +HWTEST_F(TextCreatorTest, TextComponentCreator003, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct the json string with all property. + */ + const std::string jsonTextStr = "{ " + " \"className\": \"Text\" " + "}"; + /** + * @tc.steps: step2. Check all the properties matched. + * @tc.expected: step2. All the properties are matched. + */ + RefPtr text = CreateComponent(jsonTextStr); + EXPECT_TRUE(text != nullptr); + EXPECT_EQ(static_cast(text->GetTextStyle().GetTextAlign()), TEXT_ALIGN_DEFAULT); + EXPECT_EQ(text->GetTextDirection(), TEXT_DIRECTION_DEFAULT); + EXPECT_EQ(text->GetTextStyle().GetMaxLines(), TEXT_MAX_LINES_DEFAULT); + EXPECT_EQ(static_cast(text->GetTextStyle().GetTextOverflow()), TEXT_OVERFLOW_DEFAULT); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/text/textspan_creator_test.cpp b/frameworks/core/components/test/unittest/text/textspan_creator_test.cpp new file mode 100644 index 00000000..3d610086 --- /dev/null +++ b/frameworks/core/components/test/unittest/text/textspan_creator_test.cpp @@ -0,0 +1,269 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/json/json_util.h" +#include "base/utils/utils.h" +#include "core/components/common/properties/text_style.h" +#include "core/components/test/json/component_factory.h" +#include "core/components/text_span/text_span_component.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +const std::string SPAN_DATA = "ohos1234@?!"; +constexpr double FONT_SIZE = 10.0; +constexpr int32_t FONT_WEIGHT = 1; +constexpr int32_t FONT_STYLE = 1; +constexpr int32_t TEXT_BASE_LINE_JSON = 1; +constexpr int32_t TEXT_DECORATION_JSON = 1; +constexpr double WORD_SPACING = 10.0; +constexpr double LETTER_SPACING = 10.0; +constexpr double LINE_HEIGHT = 10.0; +constexpr uint32_t TEXT_COLOR_VALUE = 255; +constexpr uint32_t TEXT_COLOR_ALPHA = 100; +constexpr uint32_t TEXT_COLOR_RED = 100; +constexpr uint32_t TEXT_COLOR_GREEN = 100; +constexpr uint32_t TEXT_COLOR_BLUE = 100; +constexpr double OFFSET_DX = 10.0; +constexpr double OFFSET_DY = 10.0; +constexpr double BLURRADIUS = 10.0; +const std::vector FONT_FAMILIES = { "normal", "sans-serif", "serif", "monospace" }; +const std::string JSON_SPAN_STR = "{ " + " \"className\": \"TextSpan\", " + " \"value\": \"ohos1234@?!\", " + " \"textStyle\": " + "{ " + " \"className\": \"TextStyle\", " + " \"fontSize\": 10.0, " + " \"fontWeight\": 1, " + " \"fontStyle\": 1, " + " \"textBaseline\": 1, " + " \"textDecoration\": 1, " + " \"wordSpacing\": 10.0, " + " \"letterSpacing\": 10.0, " + " \"lineHeight\": 10.0, " + " \"color\": " + "{ " + " \"className\": \"Color\", " + " \"value\": 255 " + "}, " + " \"shadow\": " + "{ " + " \"className\": \"Shadow\", " + " \"blurRadius\": 10.0, " + " \"offset\": " + "{ " + " \"className\": \"Offset\", " + "\"dx\": 10.0, " + "\"dy\": 10.0 " + "}, " + " \"color\": " + "{ " + " \"className\": \"Color\", " + " \"alpha\": 100, " + " \"red\": 100, " + " \"green\": 100, " + " \"blue\": 100 " + "} " + "}, " + " \"lineHeight\": 10.0, " + " \"fontFamilies\": " + "[ " + " \"normal\", " + " \"sans-serif\", " + " \"serif\", " + " \"monospace\" " + "] " + "}" + "}"; +const std::string JSON_NESTED_SPAN_STR = "{ " + " \"className\": \"TextSpan\", " + " \"child\": " + "{ " + " \"className\": \"TextSpan\", " + " \"value\": \"ohos1234@?!\", " + " \"textStyle\": " + "{ " + " \"className\": \"TextStyle\", " + " \"fontSize\": 10.0, " + " \"fontWeight\": 1, " + " \"fontStyle\": 1, " + " \"textBaseline\": 1, " + " \"textDecoration\": 1, " + " \"wordSpacing\": 10.0, " + " \"letterSpacing\": 10.0, " + " \"lineHeight\": 10.0, " + " \"color\": " + "{ " + " \"className\": \"Color\", " + " \"value\": 255 " + "}, " + " \"shadow\": " + "{ " + " \"className\": \"Shadow\", " + " \"blurRadius\": 10.0, " + " \"offset\": " + "{ " + " \"className\": \"Offset\", " + "\"dx\": 10.0, " + "\"dy\": 10.0 " + "}, " + " \"color\": " + "{ " + " \"className\": \"Color\", " + " \"alpha\": 100, " + " \"red\": 100, " + " \"green\": 100, " + " \"blue\": 100 " + "} " + "}, " + " \"lineHeight\": 10.0, " + " \"fontFamilies\": " + "[ " + " \"normal\", " + " \"sans-serif\", " + " \"serif\", " + " \"monospace\" " + "] " + "} " + "} " + "}"; + +} // namespace + +class TextSpanCreatorTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); + +protected: + RefPtr CreateComponent(const std::string& spanJson); +}; + +void TextSpanCreatorTest::SetUpTestCase() {} +void TextSpanCreatorTest::TearDownTestCase() {} +void TextSpanCreatorTest::SetUp() {} +void TextSpanCreatorTest::TearDown() {} + +RefPtr TextSpanCreatorTest::CreateComponent(const std::string& spanJson) +{ + const auto dslBuf = reinterpret_cast(spanJson.c_str()); + size_t dslLen = spanJson.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + if (!component) { + return nullptr; + } + return AceType::DynamicCast(component); +} + +/** + * @tc.name: TextSpanCreator001 + * @tc.desc: Test all the properties of text span. + * @tc.type: FUNC + * @tc.require: AR000DBAOK AR000DAR00 AR000DAR01 AR000DAR02 AR000DAR03 AR000DAR04 AR000DAR05 AR000DAR06 AR000DBK1A + * AR000DBK1B AR000DBK1C AR000DAQVR + * @tc.author: shanshurong + */ +HWTEST_F(TextSpanCreatorTest, TextSpanCreator001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Create component based on json string. + */ + RefPtr span = CreateComponent(JSON_SPAN_STR); + /** + * @tc.steps: step2. Check all the properties matched. + * @tc.expected: step2. All the properties are matched. + */ + EXPECT_TRUE(span != nullptr); + const auto& textStyle = span->GetTextStyle(); + EXPECT_TRUE(NearEqual(textStyle.GetFontSize().Value(), FONT_SIZE)); + EXPECT_EQ(static_cast(textStyle.GetFontWeight()), FONT_WEIGHT); + EXPECT_EQ(static_cast(textStyle.GetFontStyle()), FONT_STYLE); + EXPECT_EQ(static_cast(textStyle.GetTextBaseline()), TEXT_BASE_LINE_JSON); + EXPECT_EQ(static_cast(textStyle.GetTextDecoration()), TEXT_DECORATION_JSON); + EXPECT_TRUE(NearEqual(textStyle.GetWordSpacing(), WORD_SPACING)); + EXPECT_TRUE(NearEqual(textStyle.GetLetterSpacing(), LETTER_SPACING)); + EXPECT_TRUE(NearEqual(textStyle.GetLineHeight().Value(), LINE_HEIGHT)); + EXPECT_EQ(textStyle.GetTextColor().GetValue(), TEXT_COLOR_VALUE); + + const auto& spanShadow = textStyle.GetShadow(); + EXPECT_TRUE(NearEqual(spanShadow.GetOffset().GetX(), OFFSET_DX)); + EXPECT_TRUE(NearEqual(spanShadow.GetOffset().GetY(), OFFSET_DY)); + EXPECT_TRUE(NearEqual(spanShadow.GetBlurRadius(), BLURRADIUS)); + const auto& spanShadowColor = textStyle.GetShadow().GetColor(); + EXPECT_EQ(spanShadowColor.GetAlpha(), TEXT_COLOR_ALPHA); + EXPECT_EQ(spanShadowColor.GetRed(), TEXT_COLOR_RED); + EXPECT_EQ(spanShadowColor.GetGreen(), TEXT_COLOR_GREEN); + EXPECT_EQ(spanShadowColor.GetBlue(), TEXT_COLOR_BLUE); + EXPECT_TRUE(textStyle.GetFontFamilies() == FONT_FAMILIES); +} + +/** + * @tc.name: TextSpanCreator002 + * @tc.desc: Test all the properties of nested text span. + * @tc.type: FUNC + * @tc.require: AR000DBAOK AR000DAR00 AR000DAR01 AR000DAR02 AR000DAR03 AR000DAR04 AR000DAR05 AR000DAR06 AR000DBK1A + * AR000DBK1B AR000DBK1C AR000DAQVR + * @tc.author: shanshurong + */ +HWTEST_F(TextSpanCreatorTest, TextSpanCreator002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Create child component based on json string. + */ + JsonComponentFactory* factory = static_cast(&(ComponentFactory::GetInstance())); + const auto& parseJson = JsonUtil::ParseJsonString(JSON_NESTED_SPAN_STR); + ASSERT_FALSE(!parseJson); + std::list> spanChild = factory->CreateChildComponent(*parseJson); + /** + * @tc.steps: step2. Check all the properties matched. + * @tc.expected: step2. All the properties are matched. + */ + for (const auto& child : spanChild) { + RefPtr span = AceType::DynamicCast(child); + EXPECT_TRUE(span != nullptr); + + const auto& textStyle = span->GetTextStyle(); + EXPECT_TRUE(NearEqual(textStyle.GetFontSize().Value(), FONT_SIZE)); + EXPECT_EQ(static_cast(textStyle.GetFontWeight()), FONT_WEIGHT); + EXPECT_EQ(static_cast(textStyle.GetFontStyle()), FONT_STYLE); + EXPECT_EQ(static_cast(textStyle.GetTextBaseline()), TEXT_BASE_LINE_JSON); + EXPECT_EQ(static_cast(textStyle.GetTextDecoration()), TEXT_DECORATION_JSON); + EXPECT_TRUE(NearEqual(textStyle.GetWordSpacing(), WORD_SPACING)); + EXPECT_TRUE(NearEqual(textStyle.GetLetterSpacing(), LETTER_SPACING)); + EXPECT_TRUE(NearEqual(textStyle.GetLineHeight().Value(), LINE_HEIGHT)); + EXPECT_EQ(textStyle.GetTextColor().GetValue(), TEXT_COLOR_VALUE); + + const auto& spanShadow = textStyle.GetShadow(); + EXPECT_TRUE(NearEqual(spanShadow.GetOffset().GetX(), OFFSET_DX)); + EXPECT_TRUE(NearEqual(spanShadow.GetOffset().GetY(), OFFSET_DY)); + EXPECT_TRUE(NearEqual(spanShadow.GetBlurRadius(), BLURRADIUS)); + const auto& spanShadowColor = textStyle.GetShadow().GetColor(); + EXPECT_EQ(spanShadowColor.GetAlpha(), TEXT_COLOR_ALPHA); + EXPECT_EQ(spanShadowColor.GetRed(), TEXT_COLOR_RED); + EXPECT_EQ(spanShadowColor.GetGreen(), TEXT_COLOR_GREEN); + EXPECT_EQ(spanShadowColor.GetBlue(), TEXT_COLOR_BLUE); + EXPECT_TRUE(textStyle.GetFontFamilies() == FONT_FAMILIES); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/text/textstyle_creator_test.cpp b/frameworks/core/components/test/unittest/text/textstyle_creator_test.cpp new file mode 100644 index 00000000..1971263c --- /dev/null +++ b/frameworks/core/components/test/unittest/text/textstyle_creator_test.cpp @@ -0,0 +1,275 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/json/json_util.h" +#include "base/utils/utils.h" +#include "core/components/common/properties/text_style.h" +#include "core/components/test/json/component_factory.h" +#include "core/components/text/text_component.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +constexpr double FONT_SIZE = 10.0; +constexpr double FONT_SIZE_DEFAULT = 14.0; +constexpr int32_t FONT_WEIGHT = 1; +constexpr int32_t FONT_WEIGHT_DEFAULT = 10; +constexpr int32_t FONT_STYLE = 1; +constexpr int32_t FONT_STYLE_DEFAULT = 0; +constexpr int32_t TEXT_BASE_LINE_JSON = 1; +constexpr int32_t TEXT_BASE_LINE_DEFAULT = 0; +constexpr int32_t TEXT_DECORATION_JSON = 1; +constexpr int32_t TEXT_DECORATION_DEFAULT = 0; +constexpr uint32_t COLOR_VALUE_DEFAULT = 4278190080; +constexpr double WORD_SPACING = 10.0; +constexpr double WORD_SPACING_DEFAULT = 0.0; +constexpr double LETTER_SPACING = 10.0; +constexpr double LETTER_SPACING_DEFAULT = 0.0; +constexpr double LINE_HEIGHT = 10.0; +constexpr double LINE_HEIGHT_DEFAULT = 0.0; +constexpr uint32_t TEXT_COLOR_VALUE = 255; +constexpr uint32_t TEXT_COLOR_ALPHA = 100; +constexpr uint32_t TEXT_COLOR_RED = 100; +constexpr uint32_t TEXT_COLOR_GREEN = 100; +constexpr uint32_t TEXT_COLOR_BLUE = 100; +constexpr double OFFSET_DX = 10.0; +constexpr double OFFSET_DY = 10.0; +constexpr double OFFSET_DX_DEFAULT = 0.0; +constexpr double OFFSET_DY_DEFAULT = 0.0; +constexpr double SHADOW_BLUR_RADIUS = 10.0; +constexpr double BLUR_RADIUS_DEFAULT = 0.0; +const std::vector FONT_FAMILIES = { "normal", "sans-serif", "serif", "monospace" }; +const std::string JSON_TEXT_STR = "{ " + " \"className\": \"Text\", " + " \"textStyle\": " + "{ " + " \"className\": \"TextStyle\", " + " \"fontSize\": 10.0, " + " \"fontWeight\": 1, " + " \"fontStyle\": 1, " + " \"textBaseline\": 1, " + " \"textDecoration\": 1, " + " \"wordSpacing\": 10.0, " + " \"letterSpacing\": 10.0, " + " \"lineHeight\": 10.0, " + " \"color\": " + "{ " + " \"className\": \"Color\", " + " \"value\": 255 " + "}, " + " \"shadow\": " + "{ " + " \"className\": \"Shadow\", " + " \"blurRadius\": 10.0, " + " \"offset\": " + "{ " + " \"className\": \"Offset\", " + "\"dx\": 10.0, " + "\"dy\": 10.0 " + "}, " + " \"color\": " + "{ " + " \"className\": \"Color\", " + " \"alpha\": 100, " + " \"red\": 100, " + " \"green\": 100, " + " \"blue\": 100 " + "} " + "}, " + " \"lineHeight\": 10.0, " + " \"fontFamilies\": " + "[ " + " \"normal\", " + " \"sans-serif\", " + " \"serif\", " + " \"monospace\" " + "] " + "}" + "}"; + +} // namespace + +class TextStyleCreatorTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); + +protected: + RefPtr CreateComponent(const std::string& textJson); +}; + +void TextStyleCreatorTest::SetUpTestCase() {} +void TextStyleCreatorTest::TearDownTestCase() {} +void TextStyleCreatorTest::SetUp() {} +void TextStyleCreatorTest::TearDown() {} + +RefPtr TextStyleCreatorTest::CreateComponent(const std::string& textJson) +{ + const auto dslBuf = reinterpret_cast(textJson.c_str()); + size_t dslLen = textJson.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + if (!component) { + return nullptr; + } + return AceType::DynamicCast(component); +} + +/** + * @tc.name: TextStyleCreator001 + * @tc.desc: Test all the properties of text style. + * @tc.type: FUNC + * @tc.require: AR000DAR00 AR000DAR01 AR000DAR02 AR000DAR03 AR000DAR04 AR000DAR05 AR000DAR06 AR000DBK1A AR000DBK1B + * AR000DBK1C + * @tc.author: shanshurong + */ +HWTEST_F(TextStyleCreatorTest, TextStyleCreator001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Create component based on json string. + */ + RefPtr text = CreateComponent(JSON_TEXT_STR); + /** + * @tc.steps: step2. Check all the properties matched. + * @tc.expected: step2. All the properties are matched. + */ + EXPECT_TRUE(text != nullptr); + const auto& textStyle = text->GetTextStyle(); + EXPECT_TRUE(NearEqual(textStyle.GetFontSize().Value(), FONT_SIZE)); + EXPECT_EQ(static_cast(textStyle.GetFontWeight()), FONT_WEIGHT); + EXPECT_EQ(static_cast(textStyle.GetFontStyle()), FONT_STYLE); + EXPECT_EQ(static_cast(textStyle.GetTextBaseline()), TEXT_BASE_LINE_JSON); + EXPECT_EQ(static_cast(textStyle.GetTextDecoration()), TEXT_DECORATION_JSON); + EXPECT_TRUE(NearEqual(textStyle.GetWordSpacing(), WORD_SPACING)); + EXPECT_TRUE(NearEqual(textStyle.GetLetterSpacing(), LETTER_SPACING)); + EXPECT_TRUE(NearEqual(textStyle.GetLineHeight().Value(), LINE_HEIGHT)); + EXPECT_EQ(textStyle.GetTextColor().GetValue(), TEXT_COLOR_VALUE); + + const auto& textShadow = textStyle.GetShadow(); + EXPECT_TRUE(NearEqual(textShadow.GetOffset().GetX(), OFFSET_DX)); + EXPECT_TRUE(NearEqual(textShadow.GetOffset().GetY(), OFFSET_DY)); + EXPECT_TRUE(NearEqual(textShadow.GetBlurRadius(), SHADOW_BLUR_RADIUS)); + const auto& textShadowColor = textStyle.GetShadow().GetColor(); + EXPECT_EQ(textShadowColor.GetAlpha(), TEXT_COLOR_ALPHA); + EXPECT_EQ(textShadowColor.GetRed(), TEXT_COLOR_RED); + EXPECT_EQ(textShadowColor.GetGreen(), TEXT_COLOR_GREEN); + EXPECT_EQ(textShadowColor.GetBlue(), TEXT_COLOR_BLUE); + EXPECT_TRUE(textStyle.GetFontFamilies() == FONT_FAMILIES); +} + +/** + * @tc.name: TextStyleCreator002 + * @tc.desc: Test all the properties set by default value when value is invalid. + * @tc.type: FUNC + * @tc.require: AR000DAR01 AR000DAR02 AR000DAR03 AR000DAR04 AR000DAR05 AR000DAR06 AR000DBK1B AR000DBK1C + * @tc.author: shanshurong + */ +HWTEST_F(TextStyleCreatorTest, TextStyleCreator002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct the json string with all property. + */ + const std::string jsonText = "{ " + " \"className\": \"Text\", " + " \"textStyle\": " + "{ " + " \"className\": \"TextStyle\", " + " \"fontSize\": 10.0, " + " \"fontWeight\": 10, " + " \"fontStyle\": 10, " + " \"textBaseline\": 10, " + " \"textDecoration\": 10, " + " \"wordSpacing\": 10.0, " + " \"letterSpacing\": 10.0, " + " \"lineHeight\": 10.0, " + " \"fontFamilies\": " + "[ " + " \"normal\", " + " \"sans-serif\", " + " \"serif\", " + " \"monospace\" " + "] " + "}" + "}"; + /** + * @tc.steps: step2. Check all the properties matched. + * @tc.expected: step2. All the properties are matched. + */ + RefPtr text = CreateComponent(jsonText); + EXPECT_TRUE(text != nullptr); + const auto& textStyle = text->GetTextStyle(); + EXPECT_TRUE(NearEqual(textStyle.GetFontSize().Value(), FONT_SIZE)); + EXPECT_EQ(static_cast(textStyle.GetFontWeight()), FONT_WEIGHT_DEFAULT); + EXPECT_EQ(static_cast(textStyle.GetFontStyle()), FONT_STYLE_DEFAULT); + EXPECT_EQ(static_cast(textStyle.GetTextBaseline()), TEXT_BASE_LINE_DEFAULT); + EXPECT_EQ(static_cast(textStyle.GetTextDecoration()), TEXT_DECORATION_DEFAULT); + EXPECT_TRUE(NearEqual(textStyle.GetWordSpacing(), WORD_SPACING)); + EXPECT_TRUE(NearEqual(textStyle.GetLetterSpacing(), LETTER_SPACING)); + EXPECT_TRUE(NearEqual(textStyle.GetLineHeight().Value(), LINE_HEIGHT)); + EXPECT_TRUE(textStyle.GetFontFamilies() == FONT_FAMILIES); +} + +/** + * @tc.name: TextStyleCreator003 + * @tc.desc: Test all the properties when initialized by default value. + * @tc.type: FUNC + * @tc.require: AR000DAR01 AR000DAR02 AR000DAR03 AR000DAR04 AR000DAR05 AR000DAR06 AR000DBK1A AR000DBK1B AR000DBK1C + * @tc.author: shanshurong + */ +HWTEST_F(TextStyleCreatorTest, TextStyleCreator003, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct the json string with all property. + */ + const std::string jsonText = "{ " + " \"className\": \"Text\", " + " \"textStyle\": " + "{ " + " \"className\": \"TextStyle\" " + "}" + "}"; + /** + * @tc.steps: step2. Check all the properties matched. + * @tc.expected: step2. All the properties are matched. + */ + RefPtr text = CreateComponent(jsonText); + EXPECT_TRUE(text != nullptr); + const auto& textStyle = text->GetTextStyle(); + EXPECT_TRUE(NearEqual(textStyle.GetFontSize().Value(), FONT_SIZE_DEFAULT)); + EXPECT_EQ(static_cast(textStyle.GetFontWeight()), FONT_WEIGHT_DEFAULT); + EXPECT_EQ(static_cast(textStyle.GetFontStyle()), FONT_STYLE_DEFAULT); + EXPECT_EQ(static_cast(textStyle.GetTextBaseline()), TEXT_BASE_LINE_DEFAULT); + EXPECT_EQ(static_cast(textStyle.GetTextDecoration()), TEXT_DECORATION_DEFAULT); + EXPECT_TRUE(NearEqual(textStyle.GetWordSpacing(), WORD_SPACING_DEFAULT)); + EXPECT_TRUE(NearEqual(textStyle.GetLetterSpacing(), LETTER_SPACING_DEFAULT)); + EXPECT_TRUE(NearEqual(textStyle.GetLineHeight().Value(), LINE_HEIGHT_DEFAULT)); + + const auto& textShadow = textStyle.GetShadow(); + const auto& textShadowColor = textShadow.GetColor().GetValue(); + Offset textShadowOffset = textShadow.GetOffset(); + double textShadowBlurRadius = textShadow.GetBlurRadius(); + EXPECT_EQ(static_cast(textShadowColor), COLOR_VALUE_DEFAULT); + EXPECT_TRUE(NearEqual(textShadowOffset.GetX(), OFFSET_DX_DEFAULT)); + EXPECT_TRUE(NearEqual(textShadowOffset.GetY(), OFFSET_DY_DEFAULT)); + EXPECT_TRUE(NearEqual(textShadowBlurRadius, BLUR_RADIUS_DEFAULT)); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/text_field/BUILD.gn b/frameworks/core/components/test/unittest/text_field/BUILD.gn new file mode 100644 index 00000000..2bb00526 --- /dev/null +++ b/frameworks/core/components/test/unittest/text_field/BUILD.gn @@ -0,0 +1,108 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +if (is_standard_system) { + module_output_path = "ace_engine_standard/backenduicomponent/textfield" +} + +ohos_unittest("TextFieldCreatorTest") { + module_out_path = module_output_path + + sources = [ + "dsl_text_field_creator_test.cpp", + "dsl_text_field_style_creator_test.cpp", + ] + + configs = [ + ":config_json_creator_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/bridge:js_framework_ohos", + "$ace_root/frameworks/core:ace_core_ohos", + "$ace_root/frameworks/core/components/test:json", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + deps += [ "$ace_root/frameworks/bridge:js_framework_ohos" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_json_creator_test") { + visibility = [ ":*" ] + include_dirs = [ + "//utils/native/base/include", + "$ace_root", + ] +} + +ohos_unittest("RenderTextFieldTest") { + module_out_path = module_output_path + + sources = [ + "$ace_root/frameworks/core/components/test/json/json_frontend.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/mock_render_common.cpp", + "render_text_field_test.cpp", + ] + + configs = [ + ":config_render_text_field_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + configs += [ "//third_party/curl:curl_config" ] + deps += [ + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/curl:curl", + ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_render_text_field_test") { + visibility = [ ":*" ] + include_dirs = [ + "//utils/native/base/include", + "$ace_root", + ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ + ":RenderTextFieldTest", + ":TextFieldCreatorTest", + ] +} diff --git a/frameworks/core/components/test/unittest/text_field/dsl_text_field_creator_test.cpp b/frameworks/core/components/test/unittest/text_field/dsl_text_field_creator_test.cpp new file mode 100644 index 00000000..267bd714 --- /dev/null +++ b/frameworks/core/components/test/unittest/text_field/dsl_text_field_creator_test.cpp @@ -0,0 +1,191 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/json/json_util.h" +#include "base/utils/utils.h" +#include "core/components/common/layout/constants.h" +#include "core/components/test/json/component_factory.h" +#include "core/components/text_field/text_field_component.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +constexpr uint32_t TEXT_FIELD_ATTR_MAX_LINES_DEFAULT = 1; +constexpr uint32_t TEXT_FIELD_ATTR_MAX_LENGTH_DEFAULT = std::numeric_limits::max(); +const TextAlign TEXT_FIELD_ATTR_ALIGN_DEFAULT = TextAlign::START; +const TextDirection TEXT_FIELD_ATTR_DIRECTION_DEFAULT = TextDirection::INHERIT; +const TextInputType TEXT_FIELD_ATTR_INPUT_TYPE_DEFAULT = TextInputType::TEXT; +const TextInputAction TEXT_FIELD_ATTR_ACTION_DEFAULT = TextInputAction::UNSPECIFIED; +const std::string TEXT_FIELD_ATTR_ACTION_LABEL_DEFAULT; +const std::string TEXT_FIELD_ATTR_PLACEHOLDER_DEFAULT; +const uint32_t TEXT_FIELD_ATTR_COLOR_DEFAULT = 4278190080; +constexpr uint32_t TEXT_FIELD_ATTR_MAX_LINES = 3; +constexpr uint32_t TEXT_FIELD_ATTR_MAX_LENGTH = 50; +constexpr uint32_t TEXT_FIELD_ATTR_ALIGN = 2; +constexpr uint32_t TEXT_FIELD_ATTR_DIRECTION = 2; +constexpr uint32_t TEXT_FIELD_ATTR_INPUT_TYPE = 0; +constexpr uint32_t TEXT_FIELD_ATTR_ACTION = 0; +const std::string TEXT_FIELD_ATTR_ACTION_LABEL = "TextField"; +const std::string TEXT_FIELD_ATTR_PLACEHOLDER = "please input"; +constexpr uint32_t TEXT_FIELD_ATTR_COLOR_ALPHA = 100; +constexpr uint32_t TEXT_FIELD_ATTR_COLOR_RED = 100; +constexpr uint32_t TEXT_FIELD_ATTR_COLOR_GREEN = 100; +constexpr uint32_t TEXT_FIELD_ATTR_COLOR_BLUE = 100; +const std::string TEXT_FIELD_ATTR_ICON_IMAGE = "test.png"; + +} // namespace + +class TextFieldCreatorTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); +}; + +void TextFieldCreatorTest::SetUpTestCase() {} +void TextFieldCreatorTest::TearDownTestCase() {} +void TextFieldCreatorTest::SetUp() {} +void TextFieldCreatorTest::TearDown() {} + +/** + * @tc.name: TextFieldComponentCreator001 + * @tc.desc: Test all the properties of text_field. + * @tc.type: FUNC + * @tc.require: AR000DBI7U AR000DQ1Q1 AR000DQ1Q2 + * @tc.author: hushilong + */ +HWTEST_F(TextFieldCreatorTest, TextFieldComponentCreator001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct the json string with all property. + */ + const std::string jsonTextFieldStr = "" + "{ " + " \"className\": \"TextField\", " + " \"obscure\": false, " + " \"enabled\": true, " + " \"autoFocus\": false, " + " \"maxLines\": 3, " + " \"maxLength\": 50, " + " \"action\": 0, " + " \"actionLabel\": \"TextField\", " + " \"textOverflow\": 2, " + " \"placeholder\": \"please input\", " + " \"placeholderColor\": " + " {" + " \"className\": \"Color\", " + " \"alpha\": 100, " + " \"red\": 100, " + " \"green\": 100, " + " \"blue\": 100 " + " }," + " \"cursorColor\": " + " {" + " \"className\": \"Color\", " + " \"alpha\": 100, " + " \"red\": 100, " + " \"green\": 100, " + " \"blue\": 100 " + " }," + " \"keyboardType\": 0, " + " \"textAlign\": 2, " + " \"extend\": true, " + " \"iconImage\": \"test.png\" " + "}"; + /** + * @tc.steps: step2. Check all the properties matched. + * @tc.expected: step2. All the properties are matched. + */ + const auto dslBuf = reinterpret_cast(jsonTextFieldStr.c_str()); + size_t dslLen = jsonTextFieldStr.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + RefPtr textFieldComponent = AceType::DynamicCast(component); + EXPECT_TRUE(textFieldComponent != nullptr); + EXPECT_TRUE(!textFieldComponent->NeedObscure()); + EXPECT_TRUE(textFieldComponent->IsEnabled()); + EXPECT_TRUE(!textFieldComponent->GetAutoFocus()); + EXPECT_TRUE(textFieldComponent->IsExtend()); + EXPECT_EQ(static_cast(textFieldComponent->GetTextMaxLines()), TEXT_FIELD_ATTR_MAX_LINES); + EXPECT_EQ(static_cast(textFieldComponent->GetMaxLength()), TEXT_FIELD_ATTR_MAX_LENGTH); + EXPECT_EQ(static_cast(textFieldComponent->GetAction()), TEXT_FIELD_ATTR_ACTION); + EXPECT_EQ(textFieldComponent->GetActionLabel(), TEXT_FIELD_ATTR_ACTION_LABEL); + EXPECT_EQ(static_cast(textFieldComponent->GetTextDirection()), TEXT_FIELD_ATTR_DIRECTION); + EXPECT_EQ(static_cast(textFieldComponent->GetTextInputType()), TEXT_FIELD_ATTR_INPUT_TYPE); + EXPECT_EQ(static_cast(textFieldComponent->GetTextAlign()), TEXT_FIELD_ATTR_ALIGN); + EXPECT_EQ(textFieldComponent->GetIconImage(), TEXT_FIELD_ATTR_ICON_IMAGE); + // placeholder + EXPECT_EQ(textFieldComponent->GetPlaceholder(), TEXT_FIELD_ATTR_PLACEHOLDER); + const auto& placeholderColor = textFieldComponent->GetPlaceholderColor(); + EXPECT_EQ(placeholderColor.GetAlpha(), TEXT_FIELD_ATTR_COLOR_ALPHA); + EXPECT_EQ(placeholderColor.GetRed(), TEXT_FIELD_ATTR_COLOR_RED); + EXPECT_EQ(placeholderColor.GetGreen(), TEXT_FIELD_ATTR_COLOR_GREEN); + EXPECT_EQ(placeholderColor.GetBlue(), TEXT_FIELD_ATTR_COLOR_BLUE); + // cursor color + const auto& cursorColor = textFieldComponent->GetCursorColor(); + EXPECT_EQ(cursorColor.GetAlpha(), TEXT_FIELD_ATTR_COLOR_ALPHA); + EXPECT_EQ(cursorColor.GetRed(), TEXT_FIELD_ATTR_COLOR_RED); + EXPECT_EQ(cursorColor.GetGreen(), TEXT_FIELD_ATTR_COLOR_GREEN); + EXPECT_EQ(cursorColor.GetBlue(), TEXT_FIELD_ATTR_COLOR_BLUE); +} + +/** + * @tc.name: TextFieldComponentCreator002 + * @tc.desc: Test all the properties when initialized by default value. + * @tc.type: FUNC + * @tc.require: AR000DBI7U + * @tc.author: hushilong + */ +HWTEST_F(TextFieldCreatorTest, TextFieldComponentCreator002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct the json string with default. + */ + const std::string jsonTextFieldStr = "" + "{ " + " \"className\": \"TextField\" " + "}"; + /** + * @tc.steps: step2. Check all the properties matched. + * @tc.expected: step2. All the properties are matched. + */ + const auto dslBuf = reinterpret_cast(jsonTextFieldStr.c_str()); + size_t dslLen = jsonTextFieldStr.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + RefPtr textFieldComponent = AceType::DynamicCast(component); + EXPECT_TRUE(textFieldComponent != nullptr); + EXPECT_TRUE(!textFieldComponent->NeedObscure()); + EXPECT_TRUE(textFieldComponent->IsEnabled()); + EXPECT_TRUE(!textFieldComponent->GetAutoFocus()); + EXPECT_EQ(static_cast(textFieldComponent->GetTextMaxLines()), TEXT_FIELD_ATTR_MAX_LINES_DEFAULT); + EXPECT_EQ(static_cast(textFieldComponent->GetMaxLength()), TEXT_FIELD_ATTR_MAX_LENGTH_DEFAULT); + EXPECT_EQ(textFieldComponent->GetAction(), TEXT_FIELD_ATTR_ACTION_DEFAULT); + EXPECT_EQ(textFieldComponent->GetActionLabel(), TEXT_FIELD_ATTR_ACTION_LABEL_DEFAULT); + EXPECT_EQ(textFieldComponent->GetTextDirection(), TEXT_FIELD_ATTR_DIRECTION_DEFAULT); + EXPECT_EQ(textFieldComponent->GetTextInputType(), TEXT_FIELD_ATTR_INPUT_TYPE_DEFAULT); + EXPECT_EQ(textFieldComponent->GetTextAlign(), TEXT_FIELD_ATTR_ALIGN_DEFAULT); + // placeholder + EXPECT_EQ(textFieldComponent->GetPlaceholder(), TEXT_FIELD_ATTR_PLACEHOLDER_DEFAULT); + EXPECT_EQ(textFieldComponent->GetPlaceholderColor().GetValue(), TEXT_FIELD_ATTR_COLOR_DEFAULT); + // cursor color + EXPECT_EQ(textFieldComponent->GetCursorColor().GetValue(), TEXT_FIELD_ATTR_COLOR_DEFAULT); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/text_field/dsl_text_field_style_creator_test.cpp b/frameworks/core/components/test/unittest/text_field/dsl_text_field_style_creator_test.cpp new file mode 100644 index 00000000..dafefe42 --- /dev/null +++ b/frameworks/core/components/test/unittest/text_field/dsl_text_field_style_creator_test.cpp @@ -0,0 +1,206 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/json/json_util.h" +#include "base/utils/utils.h" +#include "core/components/common/properties/color.h" +#include "core/components/common/properties/shadow.h" +#include "core/components/common/properties/text_style.h" +#include "core/components/test/json/component_factory.h" +#include "core/components/text_field/text_field_component.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +constexpr double TEXT_FIELD_STYLE_FONT_SIZE = 10.0; +constexpr double TEXT_FIELD_STYLE_FONT_SIZE_DEFAULT = 14.0; +constexpr int32_t TEXT_FIELD_STYLE_FONT_WEIGHT = 1; +constexpr int32_t TEXT_FIELD_STYLE_FONT_WEIGHT_DEFAULT = 10; +constexpr int32_t TEXT_FIELD_STYLE_FONT_STYLE = 1; +constexpr int32_t TEXT_FIELD_STYLE_FONT_STYLE_DEFAULT = 0; +constexpr int32_t TEXT_FIELD_STYLE_TEXT_BASE_LINE = 1; +constexpr int32_t TEXT_FIELD_STYLE_TEXT_BASE_LINE_DEFAULT = 0; +constexpr int32_t TEXT_FIELD_STYLE_TEXT_DECORATION = 1; +constexpr int32_t TEXT_FIELD_STYLE_TEXT_DECORATION_DEFAULT = 0; +constexpr uint32_t TEXT_FIELD_STYLE_COLOR_VALUE_DEFAULT = 4278190080; +constexpr double TEXT_FIELD_STYLE_WORD_SPACING = 10.0; +constexpr double TEXT_FIELD_STYLE_WORD_SPACING_DEFAULT = 0.0; +constexpr double TEXT_FIELD_STYLE_LETTER_SPACING = 10.0; +constexpr double TEXT_FIELD_STYLE_LETTER_SPACING_DEFAULT = 0.0; +constexpr double TEXT_FIELD_STYLE_LINE_HEIGHT = 12.0; +constexpr double TEXT_FIELD_STYLE_LINE_HEIGHT_DEFAULT = 0.0; +constexpr uint32_t TEXT_FIELD_STYLE_TEXT_COLOR_VALUE = 255; +constexpr uint32_t TEXT_FIELD_STYLE_TEXT_COLOR_ALPHA = 100; +constexpr uint32_t TEXT_FIELD_STYLE_TEXT_COLOR_RED = 100; +constexpr uint32_t TEXT_FIELD_STYLE_TEXT_COLOR_GREEN = 100; +constexpr uint32_t TEXT_FIELD_STYLE_TEXT_COLOR_BLUE = 100; +constexpr double TEXT_FIELD_STYLE_OFFSET_DX = 10.0; +constexpr double TEXT_FIELD_STYLE_OFFSET_DY = 10.0; +constexpr double TEXT_FIELD_STYLE_BLURRADIUS = 10.0; +const std::vector TEXT_FIELD_STYLE_FONT_FAMILIES = { "normal", "sans-serif", "serif", "monospace" }; + +} // namespace + +class TextFieldStyleCreatorTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); +}; + +void TextFieldStyleCreatorTest::SetUpTestCase() {} +void TextFieldStyleCreatorTest::TearDownTestCase() {} +void TextFieldStyleCreatorTest::SetUp() {} +void TextFieldStyleCreatorTest::TearDown() {} + +/** + * @tc.name: TextFieldStyleCreator001 + * @tc.desc: Test all the properties of text filed style. + * @tc.type: FUNC + * @tc.require: AR000DBI7U + * @tc.author: hushilong + */ +HWTEST_F(TextFieldStyleCreatorTest, TextFieldStyleCreator001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct the json string with all property. + */ + const std::string jsonTextFieldStr = "{" + " \"className\": \"TextField\", " + " \"textStyle\": " + " { " + " \"className\": \"TextStyle\", " + " \"fontSize\": 10.0, " + " \"fontWeight\": 1, " + " \"fontStyle\": 1, " + " \"textBaseline\": 1, " + " \"textDecoration\": 1, " + " \"wordSpacing\": 10.0, " + " \"letterSpacing\": 10.0, " + " \"lineHeight\": 12.0, " + " \"color\": " + " { " + " \"className\": \"Color\", " + " \"value\": 255 " + " }, " + " \"shadow\": " + " { " + " \"className\": \"Shadow\", " + " \"blurRadius\": 10.0, " + " \"offset\": " + " { " + " \"className\": \"Offset\", " + " \"dx\": 10.0, " + " \"dy\": 10.0 " + " }, " + " \"color\": " + " { " + " \"className\": \"Color\", " + " \"alpha\": 100, " + " \"red\": 100, " + " \"green\": 100, " + " \"blue\": 100 " + " } " + " }, " + " \"fontFamilies\": " + " [ " + " \"normal\", " + " \"sans-serif\", " + " \"serif\", " + " \"monospace\" " + " ] " + " }" + "}"; + /** + * @tc.steps: step2. Check all the properties matched. + * @tc.expected: step2. All the properties are matched. + */ + const auto dslBuf = reinterpret_cast(jsonTextFieldStr.c_str()); + size_t dslLen = jsonTextFieldStr.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + RefPtr textFieldComponent = AceType::DynamicCast(component); + EXPECT_TRUE(textFieldComponent != nullptr); + const auto& textStyle = textFieldComponent->GetTextStyle(); + EXPECT_TRUE(NearEqual(textStyle.GetFontSize().Value(), TEXT_FIELD_STYLE_FONT_SIZE)); + EXPECT_EQ(static_cast(textStyle.GetFontWeight()), TEXT_FIELD_STYLE_FONT_WEIGHT); + EXPECT_EQ(static_cast(textStyle.GetFontStyle()), TEXT_FIELD_STYLE_FONT_STYLE); + EXPECT_EQ(static_cast(textStyle.GetTextBaseline()), TEXT_FIELD_STYLE_TEXT_BASE_LINE); + EXPECT_EQ(static_cast(textStyle.GetTextDecoration()), TEXT_FIELD_STYLE_TEXT_DECORATION); + EXPECT_TRUE(NearEqual(textStyle.GetWordSpacing(), TEXT_FIELD_STYLE_WORD_SPACING)); + EXPECT_TRUE(NearEqual(textStyle.GetLetterSpacing(), TEXT_FIELD_STYLE_LETTER_SPACING)); + EXPECT_TRUE(NearEqual(textStyle.GetLineHeight().Value(), TEXT_FIELD_STYLE_LINE_HEIGHT)); + EXPECT_EQ(textStyle.GetTextColor().GetValue(), TEXT_FIELD_STYLE_TEXT_COLOR_VALUE); + EXPECT_EQ(textStyle.GetFontFamilies(), TEXT_FIELD_STYLE_FONT_FAMILIES); + // shadow + const auto& textShadow = textStyle.GetShadow(); + EXPECT_TRUE(NearEqual(textShadow.GetOffset().GetX(), TEXT_FIELD_STYLE_OFFSET_DX)); + EXPECT_TRUE(NearEqual(textShadow.GetOffset().GetY(), TEXT_FIELD_STYLE_OFFSET_DY)); + EXPECT_TRUE(NearEqual(textShadow.GetBlurRadius(), TEXT_FIELD_STYLE_BLURRADIUS)); + // color + const auto& textShadowColor = textStyle.GetShadow().GetColor(); + EXPECT_EQ(textShadowColor.GetAlpha(), TEXT_FIELD_STYLE_TEXT_COLOR_ALPHA); + EXPECT_EQ(textShadowColor.GetRed(), TEXT_FIELD_STYLE_TEXT_COLOR_RED); + EXPECT_EQ(textShadowColor.GetGreen(), TEXT_FIELD_STYLE_TEXT_COLOR_GREEN); + EXPECT_EQ(textShadowColor.GetBlue(), TEXT_FIELD_STYLE_TEXT_COLOR_BLUE); +} + +/** + * @tc.name: TextFieldStyleCreator002 + * @tc.desc: Test all the properties when initialized by default value. + * @tc.type: FUNC + * @tc.require: AR000DBI7U + * @tc.author: hushilong + */ +HWTEST_F(TextFieldStyleCreatorTest, TextFieldStyleCreator002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct the json string with default. + */ + const std::string jsonTextFieldStr = "{" + " \"className\": \"TextField\", " + " \"textStyle\": " + " { " + " \"className\": \"TextStyle\" " + " }" + "}"; + /** + * @tc.steps: step2. Check all the properties matched. + * @tc.expected: step2. All the properties are matched. + */ + const auto dslBuf = reinterpret_cast(jsonTextFieldStr.c_str()); + size_t dslLen = jsonTextFieldStr.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + RefPtr textFieldComponent = AceType::DynamicCast(component); + EXPECT_TRUE(textFieldComponent != nullptr); + const auto& textStyle = textFieldComponent->GetTextStyle(); + EXPECT_TRUE(NearEqual(textStyle.GetFontSize().Value(), TEXT_FIELD_STYLE_FONT_SIZE_DEFAULT)); + EXPECT_EQ(static_cast(textStyle.GetFontWeight()), TEXT_FIELD_STYLE_FONT_WEIGHT_DEFAULT); + EXPECT_EQ(static_cast(textStyle.GetFontStyle()), TEXT_FIELD_STYLE_FONT_STYLE_DEFAULT); + EXPECT_EQ(static_cast(textStyle.GetTextBaseline()), TEXT_FIELD_STYLE_TEXT_BASE_LINE_DEFAULT); + EXPECT_EQ(static_cast(textStyle.GetTextDecoration()), TEXT_FIELD_STYLE_TEXT_DECORATION_DEFAULT); + EXPECT_TRUE(NearEqual(textStyle.GetWordSpacing(), TEXT_FIELD_STYLE_WORD_SPACING_DEFAULT)); + EXPECT_TRUE(NearEqual(textStyle.GetWordSpacing(), TEXT_FIELD_STYLE_LETTER_SPACING_DEFAULT)); + EXPECT_TRUE(NearEqual(textStyle.GetLineHeight().Value(), TEXT_FIELD_STYLE_LINE_HEIGHT_DEFAULT)); + const auto& textShadowColor = textStyle.GetShadow().GetColor().GetValue(); + EXPECT_EQ(static_cast(textShadowColor), TEXT_FIELD_STYLE_COLOR_VALUE_DEFAULT); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/text_field/render_text_field_test.cpp b/frameworks/core/components/test/unittest/text_field/render_text_field_test.cpp new file mode 100644 index 00000000..971a2860 --- /dev/null +++ b/frameworks/core/components/test/unittest/text_field/render_text_field_test.cpp @@ -0,0 +1,413 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "core/components/text_field/render_text_field.h" +#include "core/components/text_field/text_field_component.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +constexpr int32_t TEXT_FIELD_MAXLINE_THREE = 3; +constexpr size_t TEXT_FIELD_MAXLENGTH = 100; +const std::string TEXT_FIELD_PLACEHOLDER_VALUE = "please input"; +const TextInputType TEXT_FIELD_TEXTINPUTTYPE_EMAIL = TextInputType::EMAIL_ADDRESS; +const TextInputAction TEXT_FIELD_TEXTINPUTACTION_SEARCH = TextInputAction::SEARCH; +const TextAlign TEXT_FIELD_TEXTALIGN_CENTER = TextAlign::CENTER; +constexpr bool TEXT_FIELD_ISENABLE_FALSE = false; + +} // namespace + +class MockRenderTextField final : public RenderTextField { + DECLARE_ACE_TYPE(MockRenderTextField, RenderTextField); + +public: + MockRenderTextField() = default; + ~MockRenderTextField() override = default; + + int32_t GetTextMaxLines() const + { + return maxLines_; + } + + size_t GetMaxLength() const + { + return maxLength_; + } + + bool ShowCursor() const + { + return showCursor_; + } + + const Color& GetCursorColor() + { + return cursorColor_; + } + + const std::string& GetPlaceholder() const + { + return placeholder_; + } + + const Color& GetPlaceholderColor() const + { + return placeholderColor_; + } + + TextInputType GetTextInputType() const + { + return keyboard_; + } + + TextInputAction GetAction() const + { + return action_; + } + + TextAlign GetTextAlign() const + { + return textAlign_; + } + + bool IsEnabled() const + { + return enabled_; + } + + bool IsExtend() const + { + return extend_; + } + + int32_t GetCursorPositionForMoveUp() override + { + return 0; + } + + int32_t GetCursorPositionForMoveDown() override + { + return 0; + } + + int32_t GetCursorPositionForClick(const Offset& offset) override + { + return 0; + } + + double PreferredLineHeight() override + { + return 0.0; + } + + int32_t AdjustCursorAndSelection(int32_t currentCursorPosition) override + { + return 0; + } + + DirectionStatus GetDirectionStatusOfPosition(int32_t position) const override + { + return DirectionStatus::LEFT_LEFT; + } + + bool GetCaretRect(int32_t extent, Rect& caretRect, double caretHeightOffset = 0.0) const override + { + return false; + } + + Offset GetHandleOffset(int32_t extend) override + { + return Offset(); + } + + Size ComputeDeflateSizeOfErrorAndCountText() const override + { + return Size(); + } +}; + +class RenderTextFieldTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); +}; + +void RenderTextFieldTest::SetUpTestCase() {} +void RenderTextFieldTest::TearDownTestCase() {} +void RenderTextFieldTest::SetUp() {} +void RenderTextFieldTest::TearDown() {} + +/** + * @tc.name: RenderTextFieldUpdate001 + * @tc.desc: Verify the Update Interface of RenderTextField work correctly with show cursor. + * @tc.type: FUNC + * @tc.require: AR000DBI7U + * @tc.author: hushilong + */ +HWTEST_F(RenderTextFieldTest, RenderTextFieldUpdate001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct TextFieldComponent and RenderTextField. + */ + RefPtr textField = AceType::MakeRefPtr(); + textField->SetShowCursor(true); + RefPtr renderTextField = AceType::MakeRefPtr(); + + /** + * @tc.steps: step2. call the Update interface of RenderTextField. + * @tc.expected: step2. RenderTextField is set as needLayout, showCursor_ is set as true + */ + renderTextField->Update(textField); + EXPECT_TRUE(renderTextField->NeedLayout()); + EXPECT_EQ(renderTextField->ShowCursor(), true); +} + +/** + * @tc.name: RenderTextFieldUpdate002 + * @tc.desc: Verify the Update Interface of RenderTextField work correctly with textfield component. + * @tc.type: FUNC + * @tc.require: AR000DBI7U + * @tc.author: hushilong + */ +HWTEST_F(RenderTextFieldTest, RenderTextFieldUpdate002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct TextFieldComponent and RenderTextField. + */ + RefPtr textField = AceType::MakeRefPtr(); + textField->SetShowCursor(true); + textField->SetCursorColor(Color::RED); + RefPtr renderTextField = AceType::MakeRefPtr(); + + /** + * @tc.steps: step2. call the Update interface of RenderTextField. + * @tc.expected: step2. renderTextField is set as needLayout, cursorColor_ is set as RED. + */ + renderTextField->Update(textField); + EXPECT_TRUE(renderTextField->NeedLayout()); + EXPECT_EQ(renderTextField->GetCursorColor(), Color::RED); +} + +/** + * @tc.name: RenderTextFieldUpdate003 + * @tc.desc: Verify the Update Interface of RenderTextField work correctly with maxLength. + * @tc.type: FUNC + * @tc.require: AR000DBI7U + * @tc.author: hushilong + */ +HWTEST_F(RenderTextFieldTest, RenderTextFieldUpdate003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct TextFieldComponent and RenderTextField. + */ + RefPtr textField = AceType::MakeRefPtr(); + textField->SetMaxLength(TEXT_FIELD_MAXLENGTH); + RefPtr renderTextField = AceType::MakeRefPtr(); + + /** + * @tc.steps: step2. call the Update interface of RenderTextField. + * @tc.expected: step2. RenderTextField is set as needLayout, maxLength_ is set as 100 + */ + renderTextField->Update(textField); + EXPECT_TRUE(renderTextField->NeedLayout()); + EXPECT_EQ(renderTextField->GetMaxLength(), TEXT_FIELD_MAXLENGTH); +} + +/** + * @tc.name: RenderTextFieldUpdate004 + * @tc.desc: Verify the Update Interface of RenderTextField work correctly with placeholder. + * @tc.type: FUNC + * @tc.require: AR000DBI7U + * @tc.author: hushilong + */ +HWTEST_F(RenderTextFieldTest, RenderTextFieldUpdate004, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct TextFieldComponent and RenderTextField. + */ + RefPtr textField = AceType::MakeRefPtr(); + textField->SetPlaceholderColor(Color::RED); + textField->SetPlaceholder(TEXT_FIELD_PLACEHOLDER_VALUE); + + RefPtr renderTextField = AceType::MakeRefPtr(); + + /** + * @tc.steps: step2. call the Update interface of RenderTextField. + * @tc.expected: step2. RenderTextField is set as needLayout, showCursor_ is set as false + */ + renderTextField->Update(textField); + EXPECT_TRUE(renderTextField->NeedLayout()); + EXPECT_EQ(renderTextField->GetPlaceholderColor(), Color::RED); + EXPECT_EQ(renderTextField->GetPlaceholder(), TEXT_FIELD_PLACEHOLDER_VALUE); +} + +/** + * @tc.name: RenderTextFieldUpdate005 + * @tc.desc: Verify the Update Interface of RenderTextField work correctly with maxLines. + * @tc.type: FUNC + * @tc.require: AR000DBI7U + * @tc.author: hushilong + */ +HWTEST_F(RenderTextFieldTest, RenderTextFieldUpdate005, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct TextFieldComponent and RenderTextField. + */ + RefPtr textField = AceType::MakeRefPtr(); + textField->SetTextMaxLines(TEXT_FIELD_MAXLINE_THREE); + RefPtr renderTextField = AceType::MakeRefPtr(); + + /** + * @tc.steps: step2. call the Update interface of RenderTextField. + * @tc.expected: step2. RenderTextField is set as needLayout, maxLines_ is set as 3 + */ + renderTextField->Update(textField); + EXPECT_TRUE(renderTextField->NeedLayout()); + EXPECT_EQ(renderTextField->GetTextMaxLines(), TEXT_FIELD_MAXLINE_THREE); +} + +/** + * @tc.name: RenderTextFieldUpdate006 + * @tc.desc: Verify the Update Interface of RenderTextField work correctly with keyboard_. + * @tc.type: FUNC + * @tc.require: AR000DBI7U + * @tc.author: hushilong + */ +HWTEST_F(RenderTextFieldTest, RenderTextFieldUpdate006, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct TextFieldComponent and RenderTextField. + */ + RefPtr textField = AceType::MakeRefPtr(); + textField->SetTextInputType(TEXT_FIELD_TEXTINPUTTYPE_EMAIL); + RefPtr renderTextField = AceType::MakeRefPtr(); + + /** + * @tc.steps: step2. call the Update interface of RenderTextField. + * @tc.expected: step2. RenderTextField is set as needLayout, + * keyboard_ is set as TextInputType::EMAIL_ADDRESS + */ + renderTextField->Update(textField); + EXPECT_TRUE(renderTextField->NeedLayout()); + EXPECT_EQ(renderTextField->GetTextInputType(), TEXT_FIELD_TEXTINPUTTYPE_EMAIL); +} + +/** + * @tc.name: RenderTextFieldUpdate007 + * @tc.desc: Verify the Update Interface of RenderTextField work correctly with action_. + * @tc.type: FUNC + * @tc.require: AR000DBI7U + * @tc.author: hushilong + */ +HWTEST_F(RenderTextFieldTest, RenderTextFieldUpdate007, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct TextFieldComponent and RenderTextField. + */ + RefPtr textField = AceType::MakeRefPtr(); + textField->SetAction(TEXT_FIELD_TEXTINPUTACTION_SEARCH); + RefPtr renderTextField = AceType::MakeRefPtr(); + + /** + * @tc.steps: step2. call the Update interface of RenderTextField. + * @tc.expected: step2. RenderTextField is set as needLayout, action_ is set as TextInputAction::SEARCH + */ + renderTextField->Update(textField); + EXPECT_TRUE(renderTextField->NeedLayout()); + EXPECT_EQ(renderTextField->GetAction(), TEXT_FIELD_TEXTINPUTACTION_SEARCH); +} + +/** + * @tc.name: RenderTextFieldUpdate008 + * @tc.desc: Verify the Update Interface of RenderTextField work correctly with textAlign_. + * @tc.type: FUNC + * @tc.require: AR000DBI7U + * @tc.author: hushilong + */ +HWTEST_F(RenderTextFieldTest, RenderTextFieldUpdate008, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct TextFieldComponent and RenderTextField. + */ + RefPtr textField = AceType::MakeRefPtr(); + textField->SetTextAlign(TEXT_FIELD_TEXTALIGN_CENTER); + RefPtr renderTextField = AceType::MakeRefPtr(); + + /** + * @tc.steps: step2. call the Update interface of RenderTextField. + * @tc.expected: step2. RenderTextField is set as needLayout, textAlign_ is set as TextAlign::CENTER + */ + renderTextField->Update(textField); + EXPECT_TRUE(renderTextField->NeedLayout()); + EXPECT_EQ(renderTextField->GetTextAlign(), TEXT_FIELD_TEXTALIGN_CENTER); +} + +/** + * @tc.name: RenderTextFieldUpdate009 + * @tc.desc: Verify the Update Interface of RenderTextField work correctly with enabled_. + * @tc.type: FUNC + * @tc.require: AR000DBI7U + * @tc.author: hushilong + */ +HWTEST_F(RenderTextFieldTest, RenderTextFieldUpdate009, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct TextFieldComponent and RenderTextField. + */ + RefPtr textField = AceType::MakeRefPtr(); + textField->SetEnabled(TEXT_FIELD_ISENABLE_FALSE); + RefPtr renderTextField = AceType::MakeRefPtr(); + + /** + * @tc.steps: step2. call the Update interface of RenderTextField. + * @tc.expected: step2. RenderTextField is set as needLayout, enabled_ is set as false + */ + renderTextField->Update(textField); + EXPECT_TRUE(renderTextField->NeedLayout()); + EXPECT_TRUE(!renderTextField->IsEnabled()); +} + +/** + * @tc.name: RenderTextFieldUpdate010 + * @tc.desc: Verify the Update Interface of RenderTextField work correctly with extend_. + * @tc.type: FUNC + * @tc.require: AR000DQ1Q2 + * @tc.author: caocan + */ +HWTEST_F(RenderTextFieldTest, RenderTextFieldUpdate010, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct TextFieldComponent and RenderTextField. + */ + RefPtr textField = AceType::MakeRefPtr(); + textField->SetExtend(true); + RefPtr renderTextField = AceType::MakeRefPtr(); + + /** + * @tc.steps: step2. call the Update interface of RenderTextField. + * @tc.expected: step2. RenderTextField is set as needLayout, extend_ is set as true. + */ + renderTextField->Update(textField); + EXPECT_TRUE(renderTextField->NeedLayout()); + EXPECT_TRUE(renderTextField->IsExtend()); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/text_select/BUILD.gn b/frameworks/core/components/test/unittest/text_select/BUILD.gn new file mode 100644 index 00000000..a2852cc8 --- /dev/null +++ b/frameworks/core/components/test/unittest/text_select/BUILD.gn @@ -0,0 +1,65 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/backenduicomponent/textselect" + +ohos_unittest("RenderTextSelectTest") { + module_out_path = module_output_path + + sources = [ + "$ace_root/frameworks/core/components/test/json/json_frontend.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/mock_render_common.cpp", + "render_text_select_test.cpp", + ] + + configs = [ + ":config_render_text_select_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + configs += [ "//third_party/curl:curl_config" ] + deps += [ + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/curl:curl", + ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_render_text_select_test") { + visibility = [ ":*" ] + include_dirs = [ + "//utils/native/base/include", + "$ace_root", + ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":RenderTextSelectTest" ] +} diff --git a/frameworks/core/components/test/unittest/text_select/render_text_select_test.cpp b/frameworks/core/components/test/unittest/text_select/render_text_select_test.cpp new file mode 100644 index 00000000..163f4f1e --- /dev/null +++ b/frameworks/core/components/test/unittest/text_select/render_text_select_test.cpp @@ -0,0 +1,520 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "core/common/clipboard/clipboard_proxy.h" +#include "core/components/test/unittest/mock/mock_render_common.h" +#include "core/components/text_field/render_text_field.h" +#include "core/components/text_field/text_field_component.h" +#include "core/components/text_field/text_field_controller.h" +#include "core/components/text_field/textfield_theme.h" +#include "core/components/text_overlay/render_text_overlay.h" +#include "core/components/text_overlay/text_overlay_component.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +const Color TEST_HANDLE_COLOR = Color(0xFF007DFF); +const Color TEST_SELECT_TEXT_COLOR = Color(0x33254FF7); +const double TEST_HANDLE_DIAMETER = 16.0; +const int64_t SEC_TO_NANOSEC = 1000000000; +const int64_t MILLISEC_TO_MICROSEC = 1000; +const int64_t VSYNC_INTERVAL_MILLISEC = 1; +const int64_t VSYNC_INTERVAL_MICROSEC = VSYNC_INTERVAL_MILLISEC * MILLISEC_TO_MICROSEC; +const int64_t WAIT_TIME = 1000; +const Offset OFFSET_FIRST_LETTER = Offset(0.0, 0.0); +const Offset OFFSET_SECOND_LETTER = Offset(10.0, 0.0); +const Offset OFFSET_THIRD_LETTER = Offset(20.0, 0.0); +const Offset OFFSET_FOURTH_LETTER = Offset(30.0, 0.0); +const Offset OFFSET_END = Offset(40.0, 0.0); + +static int64_t GetTickCount() +{ + struct timespec ts; + clock_gettime(CLOCK_MONOTONIC, &ts); + return (ts.tv_sec * SEC_TO_NANOSEC + ts.tv_nsec); +} + +} // namespace + +class MockRenderTextField final : public RenderTextField { + DECLARE_ACE_TYPE(MockRenderTextField, RenderTextField); + +public: + MockRenderTextField() = default; + ~MockRenderTextField() override = default; + + bool IsPhone() const + { + return SystemProperties::GetDeviceType() == DeviceType::PHONE; + } + + int32_t GetTextMaxLines() const + { + return maxLines_; + } + + size_t GetMaxLength() const + { + return maxLength_; + } + + bool ShowCursor() const + { + return showCursor_; + } + + const Color& GetCursorColor() + { + return cursorColor_; + } + + const std::string& GetPlaceholder() const + { + return placeholder_; + } + + const Color& GetPlaceholderColor() const + { + return placeholderColor_; + } + + TextInputType GetTextInputType() const + { + return keyboard_; + } + + TextInputAction GetAction() const + { + return action_; + } + + TextAlign GetTextAlign() const + { + return textAlign_; + } + + bool IsEnabled() const + { + return enabled_; + } + + bool IsExtend() const + { + return extend_; + } + + int32_t GetCursorPositionForMoveUp() override + { + return 0; + } + + int32_t GetCursorPositionForMoveDown() override + { + return 0; + } + + int32_t GetCursorPositionForClick(const Offset& offset) override + { + if (offset == OFFSET_FIRST_LETTER) { + return 0; + } else if (offset == OFFSET_SECOND_LETTER) { + return 1; + } else if (offset == OFFSET_THIRD_LETTER) { + return 2; + } else if (offset == OFFSET_FOURTH_LETTER) { + return 3; + } else if (offset == OFFSET_END) { + return 4; + } else { + return 0; + } + } + + double PreferredLineHeight() override + { + return 0.0; + } + + int32_t AdjustCursorAndSelection(int32_t currentCursorPosition) override + { + return 0; + } + + DirectionStatus GetDirectionStatusOfPosition(int32_t position) const override + { + return DirectionStatus::LEFT_LEFT; + } + + bool GetCaretRect(int32_t extent, Rect& caretRect, double caretHeightOffset = 0.0) const override + { + return false; + } + + Offset GetHandleOffset(int32_t extend) override + { + return Offset(); + } + + Size ComputeDeflateSizeOfErrorAndCountText() const override + { + return Size(); + } + + const Color& GetSelectedColor() const + { + return selectedColor_; + } + + void AppendText() + { + TextEditingValue textEditingValue; + textEditingValue.text = "TEXT"; + textEditingValue.UpdateSelection(0, 0); + SetEditingValue(std::move(textEditingValue)); + } + + void ClearText() + { + TextEditingValue emptyValue; + SetEditingValue(std::move(emptyValue)); + } + + const TextEditingValue& GetText() const + { + return GetEditingValue(); + } + + void HandleLongPress(const LongPressInfo& longPressInfo) + { + OnLongPress(longPressInfo); + } + + void HandleClick(const ClickInfo& clickInfo) + { + OnClick(clickInfo); + } +}; + +class MockRenderTextOverlay final : public RenderTextOverlay { + DECLARE_ACE_TYPE(MockRenderTextOverlay, RenderTextOverlay); + +public: + MockRenderTextOverlay() = default; + ~MockRenderTextOverlay() override = default; + + const Dimension& GetHandleDiameter() const + { + return handleDiameter_; + } + + const Dimension& GetHandleRadius() const + { + return handleRadius_; + } + + const Color& GetHandleColor() const + { + return handleColor_; + } +}; + +class MockClipboard final { +public: + static bool MockGetData( + const std::function& callback, const WeakPtr& taskExecutor) + { + auto executor = taskExecutor.Upgrade(); + if (executor) { + executor->PostTask( + [callback] { + if (callback) { + callback(""); + } + }, + TaskExecutor::TaskType::BACKGROUND); + } + return true; + }; + +private: + MockClipboard() = delete; + ~MockClipboard() = delete; +}; + +class MockClipboardImpl : public Clipboard { +public: + explicit MockClipboardImpl(const RefPtr& taskExecutor); + ~MockClipboardImpl() override = default; + + // Implement Clipboard + void SetData(const std::string& data) override {}; + void GetData(const std::function& callback) override + { + if (taskExecutor_) { + taskExecutor_->PostTask( + [callback, taskExecutor = WeakClaim(RawPtr(taskExecutor_))] { + MockClipboard::MockGetData(callback, taskExecutor); + }, + TaskExecutor::TaskType::BACKGROUND); + } + }; + void Clear() override {}; +}; + +MockClipboardImpl::MockClipboardImpl(const RefPtr& taskExecutor) : Clipboard(taskExecutor) {}; + +class MockClipboardProxyImpl final : public ClipboardInterface { +public: + MockClipboardProxyImpl() = default; + ~MockClipboardProxyImpl() = default; + + // Implement ClipboardInterface + RefPtr GetClipboard(const RefPtr& taskExecutor) const override + { + return AceType::MakeRefPtr(taskExecutor); + }; +}; + +class RenderTextSelectTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); + + void WaitAndMockVsync(int64_t waitFor); + RefPtr context_; +}; + +void RenderTextSelectTest::SetUpTestCase() {} +void RenderTextSelectTest::TearDownTestCase() {} +void RenderTextSelectTest::TearDown() +{ + context_ = nullptr; +} +void RenderTextSelectTest::SetUp() +{ + context_ = MockRenderCommon::GetMockContext(); + ClipboardProxy::GetInstance().SetDelegate(std::make_unique()); +} + +void RenderTextSelectTest::WaitAndMockVsync(int64_t waitFor) +{ + int64_t runningTime = 0; + while (runningTime <= waitFor) { + runningTime += VSYNC_INTERVAL_MILLISEC; + context_->OnVsyncEvent(GetTickCount(), 0); + usleep(VSYNC_INTERVAL_MICROSEC); + } + context_->OnVsyncEvent(GetTickCount(), 0); +} + +/** + * @tc.name: RenderTextSelectTest001 + * @tc.desc: Verify the Update Interface of RenderTextSelect. + * @tc.type: FUNC + * @tc.require: AR000F3CCI + * @tc.author: liujinwei + */ +HWTEST_F(RenderTextSelectTest, RenderTextSelectTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct TextOverlayComponent and RenderTextOverlay. + * @tc.expected: step1. RenderTextOverlay is setted as theme + */ + auto themeManager = AceType::MakeRefPtr(); + RefPtr textOverlayComponent = + AceType::MakeRefPtr(themeManager, context_->GetAccessibilityManager()); + RefPtr renderTextOverlay = AceType::MakeRefPtr(); + renderTextOverlay->Update(textOverlayComponent); + + EXPECT_EQ(renderTextOverlay->GetHandleDiameter().Value(), TEST_HANDLE_DIAMETER); + EXPECT_EQ(renderTextOverlay->GetHandleColor(), TEST_HANDLE_COLOR); +} + +/** + * @tc.name: RenderTextSelectTest002 + * @tc.desc: Verify the Update Interface of RenderTextSelect. + * @tc.type: FUNC + * @tc.require: AR000F3CCM + * @tc.author: liujinwei + */ +HWTEST_F(RenderTextSelectTest, RenderTextSelectTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct textfield and get the theme. + * @tc.expected: step1. theme is correct. + */ + auto themeManager = AceType::MakeRefPtr(); + RefPtr textFieldTheme = themeManager->GetTheme(); + ASSERT_TRUE(textFieldTheme); + + RefPtr textField = AceType::MakeRefPtr(); + textField->SetSelectedColor(textFieldTheme->GetSelectedColor()); + RefPtr renderTextField = AceType::MakeRefPtr(); + + /** + * @tc.steps: step2. call the Update interface of RenderTextField. + * @tc.expected: step2. RenderTextField is setted as theme + */ + renderTextField->Update(textField); + EXPECT_EQ(renderTextField->GetSelectedColor(), TEST_SELECT_TEXT_COLOR); +} + +/** + * @tc.name: RenderTextSelectTest003 + * @tc.desc: Verify the selection of RenderTextSelect. + * @tc.type: FUNC + * @tc.require: AR000F3CCJ + * @tc.author: liujinwei + */ +HWTEST_F(RenderTextSelectTest, RenderTextSelectTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct textfield and get the theme. + * @tc.expected: step1. theme is correct. + */ + auto themeManager = AceType::MakeRefPtr(); + RefPtr textFieldTheme = themeManager->GetTheme(); + ASSERT_TRUE(textFieldTheme); + + // Add the component + RefPtr textField = AceType::MakeRefPtr(); + textField->SetSelectedColor(textFieldTheme->GetSelectedColor()); + RefPtr renderTextField = AceType::MakeRefPtr(); + + // Update the component + context_->SetupRootElement(); + context_->OnVsyncEvent(GetTickCount(), 0); + renderTextField->Attach(context_); + renderTextField->Update(textField); + renderTextField->AppendText(); + + if (renderTextField->IsPhone()) { + /** + * @tc.steps: step2. construct longpress the first letter. + * @tc.expected: step2. the text is selected from 0 to 1. + */ + LongPressInfo longPressInfo(0); + longPressInfo.SetGlobalLocation(OFFSET_FIRST_LETTER); + renderTextField->HandleLongPress(longPressInfo); + + EXPECT_EQ(renderTextField->GetText().selection.GetStart(), 0); + EXPECT_EQ(renderTextField->GetText().selection.GetEnd(), 1); + + /** + * @tc.steps: step3. construct longpress the second letter. + * @tc.expected: step3. the text is selected from 1 to 2. + */ + longPressInfo.SetGlobalLocation(OFFSET_SECOND_LETTER); + renderTextField->HandleLongPress(longPressInfo); + + EXPECT_EQ(renderTextField->GetText().selection.GetStart(), 1); + EXPECT_EQ(renderTextField->GetText().selection.GetEnd(), 2); + } +} + +/** + * @tc.name: RenderTextSelectTest004 + * @tc.desc: Verify the selection of RenderTextSelect. + * @tc.type: FUNC + * @tc.require: AR000F3CCK + * @tc.author: liujinwei + */ +HWTEST_F(RenderTextSelectTest, RenderTextSelectTest004, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct textfield and get the theme. + * @tc.expected: step1. theme is correct. + */ + auto themeManager = AceType::MakeRefPtr(); + RefPtr textFieldTheme = themeManager->GetTheme(); + ASSERT_TRUE(textFieldTheme); + + // Add the component + RefPtr textField = AceType::MakeRefPtr(); + textField->SetSelectedColor(textFieldTheme->GetSelectedColor()); + RefPtr renderTextField = AceType::MakeRefPtr(); + + context_->SetupRootElement(); + renderTextField->Attach(context_); + renderTextField->Update(textField); + renderTextField->AppendText(); + + if (renderTextField->IsPhone()) { + /** + * @tc.steps: step2. construct longpress the first letter. + * @tc.expected: step2. IsTextOverlayPushed function return true. + */ + LongPressInfo longPressInfo(0); + longPressInfo.SetGlobalLocation(OFFSET_FIRST_LETTER); + renderTextField->HandleLongPress(longPressInfo); + + WaitAndMockVsync(WAIT_TIME); + EXPECT_TRUE(renderTextField->HasTextOverlayPushed()); + EXPECT_EQ(renderTextField->GetText().selection.GetStart(), 0); + EXPECT_EQ(renderTextField->GetText().selection.GetEnd(), 1); + } +} + +/** + * @tc.name: RenderTextSelectTest005 + * @tc.desc: Verify the selection of RenderTextSelect. + * @tc.type: FUNC + * @tc.require: AR000F3CCL + * @tc.author: liujinwei + */ +HWTEST_F(RenderTextSelectTest, RenderTextSelectTest005, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct textfield and get the renderNode. + * @tc.expected: step1. renderNode is correct. + */ + RefPtr textField = AceType::MakeRefPtr(); + RefPtr renderTextField = AceType::MakeRefPtr(); + context_->SetupRootElement(); + renderTextField->Attach(context_); + renderTextField->Update(textField); + + if (renderTextField->IsPhone()) { + /** + * @tc.steps: step2. construct click the last letter. + * @tc.expected: step2. the textOverlay is not showed. + */ + ClickInfo clickInfo(1); + clickInfo.SetGlobalLocation(OFFSET_END); + renderTextField->HandleClick(clickInfo); + WaitAndMockVsync(WAIT_TIME); + EXPECT_FALSE(renderTextField->HasTextOverlayPushed()); + + /** + * @tc.steps: step3. Append text then construct click the last letter. + * @tc.expected: step3. the textOverlay is showed, and text select at the end. + */ + renderTextField->AppendText(); + renderTextField->HandleClick(clickInfo); + WaitAndMockVsync(WAIT_TIME); + EXPECT_TRUE(renderTextField->HasTextOverlayPushed()); + EXPECT_EQ(renderTextField->GetText().selection.GetStart(), 4); + EXPECT_EQ(renderTextField->GetText().selection.GetEnd(), 4); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/theme/BUILD.gn b/frameworks/core/components/test/unittest/theme/BUILD.gn new file mode 100644 index 00000000..0ced7899 --- /dev/null +++ b/frameworks/core/components/test/unittest/theme/BUILD.gn @@ -0,0 +1,159 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +if (is_standard_system) { + module_output_path = "ace_engine_standard/backenduicomponent/theme" +} + +ohos_unittest("ThemeManagerTest") { + module_out_path = module_output_path + + sources = [ + # properties + "$ace_root/frameworks/core/components/common/properties/border.cpp", + "$ace_root/frameworks/core/components/common/properties/border_edge.cpp", + "$ace_root/frameworks/core/components/common/properties/color.cpp", + "$ace_root/frameworks/core/components/common/properties/text_style.cpp", + "$ace_root/frameworks/core/mock/mock_ace_application_info.cpp", + + # theme + "$ace_root/frameworks/core/components/theme/app_theme.cpp", + "$ace_root/frameworks/core/components/theme/theme_attributes.cpp", + "$ace_root/frameworks/core/components/theme/theme_constants.cpp", + "$ace_root/frameworks/core/components/theme/theme_manager.cpp", + "$ace_root/frameworks/core/components/theme/theme_utils.cpp", + "$root_out_dir/ace/framework/core/components/theme/theme_constants_default.cpp", + "theme_manager_test.cpp", + ] + + # add sources only needed by wearable like watch. + if (is_wearable_product) { + sources += [ "$root_out_dir/ace/framework/core/components/theme/theme_constants_watch.cpp" ] + } + + # add sources needed by phone and TV. wearable like watch do not need them + if (!is_wearable_product) { + sources += [ + # theme + "$root_out_dir/ace/framework/core/components/theme/theme_constants_tv.cpp", + ] + } + + configs = [ + ":config_theme_manager_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/core/components/theme:build_theme_code", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + sources += [ + "$ace_root/adapter/ohos/osal/log_wrapper.cpp", + "$ace_root/adapter/ohos/osal/system_properties.cpp", + ] + + if (is_standard_system) { + external_deps = [ + "hiviewdfx_hilog_native:libhilog", + "startup_l2:syspara", + ] + configs += [ "//base/startup/syspara_lite/interfaces/innerkits/native/syspara:syspara_config" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +ohos_unittest("ThemeConstantsTest") { + module_out_path = module_output_path + + sources = [ + # base + "$ace_root/frameworks/base/json/json_util.cpp", + + # properties + "$ace_root/frameworks/core/components/common/properties/border.cpp", + "$ace_root/frameworks/core/components/common/properties/border_edge.cpp", + "$ace_root/frameworks/core/components/common/properties/color.cpp", + "$ace_root/frameworks/core/components/common/properties/text_style.cpp", + "$ace_root/frameworks/core/mock/mock_ace_application_info.cpp", + + # theme + "$ace_root/frameworks/core/components/theme/app_theme.cpp", + "$ace_root/frameworks/core/components/theme/theme_attributes.cpp", + "$ace_root/frameworks/core/components/theme/theme_constants.cpp", + "$ace_root/frameworks/core/components/theme/theme_manager.cpp", + "$ace_root/frameworks/core/components/theme/theme_utils.cpp", + "$root_out_dir/ace/framework/core/components/theme/theme_constants_default.cpp", + "theme_constants_test.cpp", + "theme_mock.cpp", + ] + + # add sources only needed by wearable like watch. + if (is_wearable_product) { + sources += [ "$root_out_dir/ace/framework/core/components/theme/theme_constants_watch.cpp" ] + } + + # add sources needed by phone and TV. wearable like watch do not need them + if (!is_wearable_product) { + sources += [ + # theme + "$root_out_dir/ace/framework/core/components/theme/theme_constants_tv.cpp", + ] + } + + configs = [ + ":config_theme_manager_test", + "$ace_root:ace_test_config", + "//third_party/cJSON:cJSON_config", + ] + + deps = [ + "$ace_root:third_party_cjson", + "$ace_root/frameworks/core/components/theme:build_theme_code", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + sources += [ "$ace_root/adapter/ohos/osal/log_wrapper.cpp" ] + if (is_standard_system) { + external_deps = [ + "hiviewdfx_hilog_native:libhilog", + "startup_l2:syspara", + ] + configs += [ "//base/startup/syspara_lite/interfaces/innerkits/native/syspara:syspara_config" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_theme_manager_test") { + visibility = [ ":*" ] + include_dirs = [ + "//utils/native/base/include", + "$ace_root", + ] +} + +group("unittest") { + testonly = true + deps = [ + ":ThemeConstantsTest", + ":ThemeManagerTest", + ] +} diff --git a/frameworks/core/components/test/unittest/theme/theme_constants_test.cpp b/frameworks/core/components/test/unittest/theme/theme_constants_test.cpp new file mode 100644 index 00000000..7c162464 --- /dev/null +++ b/frameworks/core/components/test/unittest/theme/theme_constants_test.cpp @@ -0,0 +1,617 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include "gtest/gtest.h" + +#define private public +#include "base/log/log.h" +#include "base/utils/system_properties.h" +#include "core/components/button/button_theme.h" +#include "core/components/checkable/checkable_theme.h" +#include "core/components/dialog/dialog_theme.h" +#include "core/components/marquee/marquee_theme.h" +#include "core/components/popup/popup_theme.h" +#include "core/components/progress/progress_theme.h" +#include "core/components/select/select_theme.h" +#include "core/components/slider/slider_theme.h" +#include "core/components/stepper/stepper_theme.h" +#include "core/components/swiper/swiper_indicator_theme.h" +#include "core/components/test/unittest/theme/theme_mock.h" +#include "core/components/text/text_theme.h" +#include "core/components/theme/app_theme.h" +#include "core/components/theme/theme_attributes.h" +#include "core/components/theme/theme_constants.h" +#include "core/components/theme/theme_manager.h" +#include "core/components/toast/toast_theme.h" +#include "core/components/video/video_theme.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +DeviceType g_mockDeviceType = DeviceType::PHONE; +RefPtr g_themeConstants = nullptr; +// Same with value defined at ThemeConstants +const Color COLOR_CONTROL_ACTIVATED_PHONE = Color(0xff0a59f7); +const Color COLOR_ERROR = Color(0xff000000); +const Dimension BUTTON_TEXT_FONTSIZE_PHONE = Dimension(16.0, DimensionUnit::FP); +const Dimension DIMENSION_ERROR = Dimension(0.0, DimensionUnit::VP); +const Color CUSTOM_COLOR_FG = Color(0xffffff00); +constexpr double CUSTOM_ALPHA = 0.5; +constexpr double CUSTOM_LINE_HEIGHT = 1.5; +constexpr int32_t CUSTOM_ANIM_DURATION = 500; +const Dimension CUSTOM_FONT_SIZE = Dimension(10.0, DimensionUnit::PX); +const Dimension CUSTOM_MARGIN = Dimension(10.0, DimensionUnit::PX); +constexpr uint32_t STYLE_ID_INVALID = 9999; +const Dimension PARSE_DIMENSION_ERROR = Dimension(0.0, DimensionUnit::PX); +// test value same with ResourceAdapterMock +constexpr uint32_t THEME_ID_VALID = 0; +constexpr uint32_t THEME_ID_INVALID = 1; +const std::string TEXT_SIZE_VALUE = "?theme:textSizeButton1"; +constexpr double SYS_RES_BUTTON_WIDTH = 36.0; +const Dimension SYS_RES_BUTTON_HEIGHT = Dimension(36.0, DimensionUnit::VP); +const Color STATE_NORMAL_COLOR = Color(0x0c000000); +const Color STATE_PRESSED_COLOR = Color(0x19000000); +const Color THEME_BG_COLOR_TRANSPARENT = Color(0x33000000); +constexpr uint32_t SYS_RES_ID_COLOR = 117440512; +constexpr uint32_t SYS_RES_ID_DIMENSION = 117440513; +constexpr uint32_t SYS_RES_ID_DOUBLE = 117440514; +constexpr uint32_t SYS_RES_ID_INT = 117440515; +constexpr uint32_t SYS_RES_ID_STRING = 117440516; +const Color SYS_VALUE_COLOR = Color(0xffffffff); +const Dimension SYS_VALUE_DIMENSION = Dimension(10.0, DimensionUnit::VP); +constexpr double SYS_VALUE_DOUBLE = 10.0; +constexpr int32_t SYS_VALUE_INT = -10; +const std::string SYS_VALUE_STRING = "sans-serif"; +#ifndef WEARABLE_PRODUCT +const Color COLOR_CONTROL_ACTIVATED_TV = Color(0xff266efb); +#endif + +} // namespace + +class ThemeConstantsTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); +}; + +void ThemeConstantsTest::SetUpTestCase() +{ + auto resAdapter = AceType::MakeRefPtr(); + g_themeConstants = AceType::MakeRefPtr(resAdapter); +} + +void ThemeConstantsTest::TearDownTestCase() {} +void ThemeConstantsTest::SetUp() {} +void ThemeConstantsTest::TearDown() {} + +// Mock get device type. +DeviceType SystemProperties::GetDeviceType() +{ + return g_mockDeviceType; +} + +/** + * @tc.name: PlatformConstants001 + * @tc.desc: Test get default theme at phone. + * @tc.type: FUNC + * @tc.require: AR000DAR29 AR000DAR2C + * @tc.author: liruokun + */ +HWTEST_F(ThemeConstantsTest, PlatformConstants001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Mock device type is phone. + */ + g_mockDeviceType = DeviceType::PHONE; + ThemeConstants::InitDeviceType(); + + /** + * @tc.steps: step2. Get color THEME_OHOS_COLOR_CONTROL_ACTIVATED, check THEME_COLOR_FOREGROUND is 0xff0a59f7. + * @tc.expected: step2. Color is 0xff0a59f7. + */ + auto color = g_themeConstants->GetColor(THEME_OHOS_COLOR_CONTROL_ACTIVATED); + EXPECT_EQ(color.GetValue(), COLOR_CONTROL_ACTIVATED_PHONE.GetValue()); +} + +#ifndef WEARABLE_PRODUCT +/** + * @tc.name: PlatformConstants002 + * @tc.desc: Test get default theme at tv. + * @tc.type: FUNC + * @tc.require: AR000DAR29 AR000DAR2C + * @tc.author: liruokun + */ +HWTEST_F(ThemeConstantsTest, PlatformConstants002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Mock device type is tv. + */ + g_mockDeviceType = DeviceType::TV; + ThemeConstants::InitDeviceType(); + + /** + * @tc.steps: step2. Get color THEME_OHOS_COLOR_CONTROL_ACTIVATED, check THEME_COLOR_FOREGROUND is 0xff266efb. + * @tc.expected: step2. Color is 0xff266efb. + */ + auto color = g_themeConstants->GetColor(THEME_OHOS_COLOR_CONTROL_ACTIVATED); + EXPECT_EQ(color.GetValue(), COLOR_CONTROL_ACTIVATED_TV.GetValue()); +} +#endif + +/** + * @tc.name: PlatformConstants003 + * @tc.desc: Test get default theme at other platform. + * @tc.type: FUNC + * @tc.require: AR000DAR29 AR000DAR2C + * @tc.author: liruokun + */ +HWTEST_F(ThemeConstantsTest, PlatformConstants003, TestSize.Level1) +{ + /** + * @tc.steps: step1. Mock device type is unknown. + */ + g_mockDeviceType = DeviceType::UNKNOWN; + ThemeConstants::InitDeviceType(); + + /** + * @tc.steps: step2. Get color THEME_OHOS_COLOR_CONTROL_ACTIVATED, check THEME_COLOR_FOREGROUND is 0xff0a59f7. + * @tc.expected: step2. Color is 0xff0a59f7. + */ + auto color = g_themeConstants->GetColor(THEME_OHOS_COLOR_CONTROL_ACTIVATED); + EXPECT_EQ(color.GetValue(), COLOR_CONTROL_ACTIVATED_PHONE.GetValue()); +} + +/** + * @tc.name: ConstantsDefine001 + * @tc.desc: Test get value with key corresponding with correct value type. + * @tc.type: FUNC + * @tc.require: AR000DAR29 AR000DAR2C + * @tc.author: liruokun + */ +HWTEST_F(ThemeConstantsTest, ConstantsDefine001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Mock device type is phone. + */ + g_mockDeviceType = DeviceType::PHONE; + ThemeConstants::InitDeviceType(); + + /** + * @tc.steps: step2. Get color, dimension with correct key. + * @tc.expected: step2. Returned value is correct. + */ + auto color = g_themeConstants->GetColor(THEME_OHOS_COLOR_CONTROL_ACTIVATED); + EXPECT_EQ(color.GetValue(), COLOR_CONTROL_ACTIVATED_PHONE.GetValue()); + auto dimension = g_themeConstants->GetDimension(THEME_BUTTON_TEXT_FONTSIZE); + EXPECT_TRUE(NearEqual(dimension.Value(), BUTTON_TEXT_FONTSIZE_PHONE.Value())); + EXPECT_EQ(dimension.Unit(), BUTTON_TEXT_FONTSIZE_PHONE.Unit()); +} + +/** + * @tc.name: ConstantsDefine002 + * @tc.desc: Test get value with key corresponding with incorrect value type. + * @tc.type: FUNC + * @tc.require: AR000DAR29 AR000DAR2C + * @tc.author: liruokun + */ +HWTEST_F(ThemeConstantsTest, ConstantsDefine002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Get color, dimension with incorrect key. + * @tc.expected: step1. Returned value is correct. + */ + auto color = g_themeConstants->GetColor(THEME_BUTTON_TEXT_FONTSIZE); + EXPECT_EQ(color.GetValue(), COLOR_ERROR.GetValue()); + auto dimension = g_themeConstants->GetDimension(THEME_OHOS_COLOR_CONTROL_ACTIVATED); + EXPECT_TRUE(NearEqual(dimension.Value(), DIMENSION_ERROR.Value())); + EXPECT_EQ(dimension.Unit(), DIMENSION_ERROR.Unit()); +} + +/** + * @tc.name: ParseStyle001 + * @tc.desc: Parse user input custom style config. + * @tc.type: FUNC + * @tc.require: AR000DQ1PR + * @tc.author: liruokun + */ +HWTEST_F(ThemeConstantsTest, ParseStyle001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct custom style json input. + */ + auto resAdapter = AceType::MakeRefPtr(); + auto themeConstants = AceType::MakeRefPtr(resAdapter); + const std::string jsonStr = "{ " + " \"style\": { " + " \"000\": \"#ffff00\", " + " \"400\": \"0.5\", " + " \"500\": \"10px\", " + " \"550\": \"HwChinese-bold\", " + " \"700\": \"10px\", " + " \"780\": \"1.5\", " + " \"2020\": \"500\" " + " }" + "}"; + + /** + * @tc.steps: step2. Parse input json string, check style map. + * @tc.expected: step2. Value in ThemeConstants is same with input custom style. + */ + themeConstants->ParseCustomStyle(jsonStr); + EXPECT_EQ(themeConstants->GetColor(THEME_OHOS_COLOR_FG).GetValue(), CUSTOM_COLOR_FG.GetValue()); + EXPECT_TRUE(NearEqual(themeConstants->GetDouble(THEME_OHOS_PRIMARY_CONTENT_ALPHA), CUSTOM_ALPHA)); + EXPECT_EQ(themeConstants->GetDimension(THEME_OHOS_TEXT_SIZE_HEADLINE1), CUSTOM_FONT_SIZE); + EXPECT_EQ(themeConstants->GetDimension(THEME_OHOS_DIMENS_DEFAULT_START), CUSTOM_MARGIN); + EXPECT_TRUE(NearEqual(themeConstants->GetDouble(THEME_OHOS_TEXT_SIZE_SPACE_SHORT), CUSTOM_LINE_HEIGHT)); + EXPECT_EQ(themeConstants->GetInt(THEME_DIALOG_ANIMATION_DURATION_IN), CUSTOM_ANIM_DURATION); +} + +/** + * @tc.name: ParseStyle002 + * @tc.desc: Parse user input custom style config, value format error. + * @tc.type: FUNC + * @tc.require: AR000DQ1PR + * @tc.author: liruokun + */ +HWTEST_F(ThemeConstantsTest, ParseStyle002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct custom style json input. + */ + auto resAdapter = AceType::MakeRefPtr(); + auto themeConstants = AceType::MakeRefPtr(resAdapter); + const std::string jsonStr = "{ " + " \"style\": { " + " \"000\": \"0.5\", " + " \"400\": \"#ff0000\", " + " \"500\": \"#ff0000\", " + " \"550\": \"400\", " + " \"700\": \"#ff0000\", " + " \"780\": \"#ff0000\", " + " \"2020\": \"#ff0000\" " + " }" + "}"; + + /** + * @tc.steps: step2. Parse input json string, check style map. + * @tc.expected: step2. Value in ThemeConstants is not changed, except font family. + */ + themeConstants->ParseCustomStyle(jsonStr); + EXPECT_EQ(themeConstants->GetColor(THEME_OHOS_COLOR_FG).GetValue(), COLOR_ERROR.GetValue()); + EXPECT_TRUE(NearEqual(themeConstants->GetDouble(THEME_OHOS_PRIMARY_CONTENT_ALPHA), 0.0)); + EXPECT_EQ(themeConstants->GetDimension(THEME_OHOS_TEXT_SIZE_HEADLINE1), PARSE_DIMENSION_ERROR); + EXPECT_EQ(themeConstants->GetDimension(THEME_OHOS_DIMENS_DEFAULT_START), PARSE_DIMENSION_ERROR); + EXPECT_TRUE(NearEqual(themeConstants->GetDouble(THEME_OHOS_TEXT_SIZE_SPACE_SHORT), 0.0)); + EXPECT_EQ(themeConstants->GetInt(THEME_DIALOG_ANIMATION_DURATION_IN), 0); +} + +/** + * @tc.name: ParseStyle003 + * @tc.desc: Parse user input custom style config, id not found. + * @tc.type: FUNC + * @tc.require: AR000DQ1PR + * @tc.author: liruokun + */ +HWTEST_F(ThemeConstantsTest, ParseStyle003, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct custom style json input. + */ + const std::string jsonStr = "{ " + " \"style\": { " + " \"9999\": \"0.5\", " + " }" + "}"; + + /** + * @tc.steps: step2. Parse input json string, check style map. + * @tc.expected: step2. Key 9999 in ThemeConstants is not exist. + */ + g_themeConstants->ParseCustomStyle(jsonStr); + EXPECT_EQ(g_themeConstants->GetValue(STYLE_ID_INVALID).type, ThemeConstantsType::ERROR); +} + +/** + * @tc.name: ParseStyle004 + * @tc.desc: Parse user input custom style config, id not public. + * @tc.type: FUNC + * @tc.require: AR000DQ1PR + * @tc.author: liruokun + */ +HWTEST_F(ThemeConstantsTest, ParseStyle004, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct custom style json input. Cache current style value. + */ + const std::string jsonStr = "{ " + " \"style\": { " + " \"136\": \"#ff0000\", " + " }" + "}"; + const auto cacheColor = g_themeConstants->GetColor(THEME_OHOS_COLOR_TIPS_BG); + + /** + * @tc.steps: step2. Parse input json string, check style map. + * @tc.expected: step2. Style in ThemeConstants is not changed. + */ + g_themeConstants->ParseCustomStyle(jsonStr); + EXPECT_EQ(g_themeConstants->GetColor(THEME_OHOS_COLOR_TIPS_BG).GetValue(), cacheColor.GetValue()); +} + +/** + * @tc.name: ThemeStyleRead001 + * @tc.desc: Initialize theme style correctly. + * @tc.type: FUNC + * @tc.require: AR000F3L1L + * @tc.author: liruokun + */ +HWTEST_F(ThemeConstantsTest, ThemeStyleRead001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct theme constants with mock adapter, load theme resource. + */ + auto resAdapter = AceType::MakeRefPtr(); + auto themeConstants = AceType::MakeRefPtr(resAdapter); + themeConstants->LoadTheme(THEME_ID_VALID); + + /** + * @tc.steps: step2. Check currentThemeStyle_ of themeConstants. + * @tc.expected: step2. Style content in currentThemeStyle_ is same with mock data. + */ + auto themeStyle = themeConstants->GetThemeStyle(); + ASSERT_NE(themeStyle, nullptr); + // app background color + EXPECT_EQ(themeStyle->GetAttr(THEME_ATTR_BG_COLOR, Color()).GetValue(), CUSTOM_COLOR_FG.GetValue()); + // button style + auto buttonStyle = themeStyle->GetAttr>(THEME_PATTERN_BUTTON, RefPtr()); + ASSERT_NE(buttonStyle, nullptr); + // button background color + auto buttonBgStates = buttonStyle->GetAttr>(PATTERN_BG_COLOR, RefPtr()); + ASSERT_NE(buttonBgStates, nullptr); + EXPECT_EQ( + buttonBgStates->GetState(STATE_NORMAL, Color()).GetValue(), STATE_NORMAL_COLOR.GetValue()); + EXPECT_EQ( + buttonBgStates->GetState(STATE_PRESSED, Color()).GetValue(), STATE_PRESSED_COLOR.GetValue()); + // button text size + EXPECT_EQ(buttonStyle->GetAttr(PATTERN_TEXT_SIZE, ""), TEXT_SIZE_VALUE); + // button width + EXPECT_TRUE(NearEqual(buttonStyle->GetAttr(PATTERN_WIDTH, 0.0), SYS_RES_BUTTON_WIDTH)); + // button height + EXPECT_EQ(buttonStyle->GetAttr(PATTERN_HEIGHT, 0.0_vp), SYS_RES_BUTTON_HEIGHT); +} + +/** + * @tc.name: ThemeStyleRead002 + * @tc.desc: Initialize theme style, get attributes with wrong type. + * @tc.type: FUNC + * @tc.require: AR000F3L1L + * @tc.author: liruokun + */ +HWTEST_F(ThemeConstantsTest, ThemeStyleRead002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct theme constants with mock adapter, load theme resource. + */ + auto resAdapter = AceType::MakeRefPtr(); + auto themeConstants = AceType::MakeRefPtr(resAdapter); + themeConstants->LoadTheme(THEME_ID_VALID); + + /** + * @tc.steps: step2. Check currentThemeStyle_ of themeConstants. + * @tc.expected: step2. Style content in currentThemeStyle_ is same with mock data. + */ + auto themeStyle = themeConstants->GetThemeStyle(); + ASSERT_NE(themeStyle, nullptr); + // app background color + auto bgColor = themeStyle->GetAttr(THEME_ATTR_BG_COLOR, Dimension()); + EXPECT_EQ(bgColor.Value(), 0.0); + EXPECT_EQ(bgColor.Unit(), DimensionUnit::PX); + // button style + auto buttonStyle = themeStyle->GetAttr>(THEME_PATTERN_BUTTON, RefPtr()); + ASSERT_NE(buttonStyle, nullptr); + // button background color + auto buttonBgStyle = buttonStyle->GetAttr(PATTERN_BG_COLOR, 0.0); + EXPECT_TRUE(NearEqual(buttonBgStyle, 0.0)); + // button text size + EXPECT_EQ(buttonStyle->GetAttr>(PATTERN_TEXT_SIZE, RefPtr()), nullptr); + // button width + EXPECT_EQ(buttonStyle->GetAttr(PATTERN_WIDTH, Color()).GetValue(), Color().GetValue()); + // button height + EXPECT_EQ(buttonStyle->GetAttr(PATTERN_HEIGHT, ""), ""); +} + +/** + * @tc.name: ThemeStyleRead003 + * @tc.desc: Initialize theme style with incorrect theme id. + * @tc.type: FUNC + * @tc.require: AR000F3L1L + * @tc.author: liruokun + */ +HWTEST_F(ThemeConstantsTest, ThemeStyleRead003, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct theme constants with mock adapter, load theme resource with invalid theme id. + */ + auto resAdapter = AceType::MakeRefPtr(); + auto themeConstants = AceType::MakeRefPtr(resAdapter); + themeConstants->LoadTheme(THEME_ID_INVALID); + + /** + * @tc.steps: step2. Check currentThemeStyle_ of themeConstants. + * @tc.expected: step2. currentThemeStyle_ is nullptr. + */ + EXPECT_EQ(themeConstants->currentThemeStyle_, nullptr); +} + +/** + * @tc.name: ThemeStyleRead004 + * @tc.desc: Initialize theme style correctly, override app background color. + * @tc.type: FUNC + * @tc.require: AR000F3L1L + * @tc.author: liruokun + */ +HWTEST_F(ThemeConstantsTest, ThemeStyleRead004, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct theme constants with mock adapter, load theme resource, set ColorScheme::TRANSPARENT. + */ + auto resAdapter = AceType::MakeRefPtr(); + auto themeConstants = AceType::MakeRefPtr(resAdapter); + themeConstants->LoadTheme(THEME_ID_VALID); + themeConstants->SetColorScheme(ColorScheme::SCHEME_TRANSPARENT); + + /** + * @tc.steps: step2. Check app background color of currentThemeStyle_. + * @tc.expected: step2. App background color is . + */ + auto themeStyle = themeConstants->GetThemeStyle(); + EXPECT_EQ( + themeStyle->GetAttr(THEME_ATTR_BG_COLOR, Color()).GetValue(), THEME_BG_COLOR_TRANSPARENT.GetValue()); +} + +/** + * @tc.name: ThemeResourceRead001 + * @tc.desc: Read theme resource correctly. + * @tc.type: FUNC + * @tc.require: AR000F3L1N + * @tc.author: liruokun + */ +HWTEST_F(ThemeConstantsTest, ThemeResourceRead001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct theme constants with mock adapter, load theme resource. + */ + auto resAdapter = AceType::MakeRefPtr(); + auto themeConstants = AceType::MakeRefPtr(resAdapter); + + /** + * @tc.steps: step2. Get different type of resources from themeConstants. + * @tc.expected: step2. Resource value is same with ResourceAdapterMock. + */ + auto color = themeConstants->GetColor(SYS_RES_ID_COLOR); + EXPECT_EQ(color.GetValue(), SYS_VALUE_COLOR.GetValue()); + auto dimension = themeConstants->GetDimension(SYS_RES_ID_DIMENSION); + EXPECT_TRUE(NearEqual(dimension.Value(), SYS_VALUE_DIMENSION.Value())); + EXPECT_EQ(dimension.Unit(), SYS_VALUE_DIMENSION.Unit()); + auto doubleValue = themeConstants->GetDouble(SYS_RES_ID_DOUBLE); + EXPECT_TRUE(NearEqual(doubleValue, SYS_VALUE_DOUBLE)); + auto intValue = themeConstants->GetInt(SYS_RES_ID_INT); + EXPECT_EQ(intValue, SYS_VALUE_INT); + auto str = themeConstants->GetString(SYS_RES_ID_STRING); + EXPECT_EQ(str, SYS_VALUE_STRING); +} + +/** + * @tc.name: ThemeResourceRead002 + * @tc.desc: Read theme resource with wrong type. + * @tc.type: FUNC + * @tc.require: AR000F3L1N + * @tc.author: liruokun + */ +HWTEST_F(ThemeConstantsTest, ThemeResourceRead002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct theme constants with mock adapter, load theme resource. + */ + auto resAdapter = AceType::MakeRefPtr(); + auto themeConstants = AceType::MakeRefPtr(resAdapter); + + /** + * @tc.steps: step2. Get value from themeConstants use wrong interface. + * @tc.expected: step2. Resource value is same with error value. + */ + auto dimension = themeConstants->GetDimension(SYS_RES_ID_COLOR); + EXPECT_TRUE(NearEqual(dimension.Value(), 0.0)); + EXPECT_EQ(dimension.Unit(), DimensionUnit::VP); + auto doubleValue = themeConstants->GetDouble(SYS_RES_ID_DIMENSION); + EXPECT_TRUE(NearEqual(doubleValue, 0.0)); + auto intValue = themeConstants->GetInt(SYS_RES_ID_DOUBLE); + EXPECT_EQ(intValue, 0); + auto str = themeConstants->GetString(SYS_RES_ID_INT); + EXPECT_EQ(str, ""); + auto color = themeConstants->GetColor(SYS_RES_ID_STRING); + EXPECT_EQ(color.GetValue(), Color().GetValue()); +} + +/** + * @tc.name: MultiInstance001 + * @tc.desc: Parse custom style with multi theme constants. + * @tc.type: FUNC + * @tc.require: AR000F3L1M + * @tc.author: liruokun + */ +HWTEST_F(ThemeConstantsTest, MultiInstance001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct custom style json input. + */ + auto resAdapter = AceType::MakeRefPtr(); + auto themeConstantsA = AceType::MakeRefPtr(resAdapter); + auto themeConstantsB = AceType::MakeRefPtr(resAdapter); + const std::string jsonStrA = "{ " + " \"style\": { " + " \"000\": \"#ff0000\" " + " }" + "}"; + const std::string jsonStrB = "{ " + " \"style\": { " + " \"000\": \"#0000ff\" " + " }" + "}"; + + /** + * @tc.steps: step2. Parse input json string, check style map. + * @tc.expected: step2. Value in ThemeConstants is not changed, except font family. + */ + themeConstantsA->ParseCustomStyle(jsonStrA); + themeConstantsB->ParseCustomStyle(jsonStrB); + EXPECT_EQ(themeConstantsA->GetColor(THEME_OHOS_COLOR_FG).GetValue(), Color::RED.GetValue()); + EXPECT_EQ(themeConstantsB->GetColor(THEME_OHOS_COLOR_FG).GetValue(), Color::BLUE.GetValue()); +} + +/** + * @tc.name: ParseIdStyle001 + * @tc.desc: Parse user input id style config. + * @tc.type: FUNC + * @tc.require: AR000FDGO4 + * @tc.author: yangfan + */ +HWTEST_F(ThemeConstantsTest, ParseIdStyle001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Construct custom style json input. + */ + auto resAdapter = AceType::MakeRefPtr(); + auto themeConstants = AceType::MakeRefPtr(resAdapter); + const std::string jsonStr = "@ohos_id_500"; + auto parseResult = ThemeUtils::ParseThemeIdReference(jsonStr); + auto parseColor = themeConstants->GetColor(parseResult.id); + + /** + * @tc.steps: step2. Check style map. + * @tc.expected: step2. Style in ThemeConstants is not changed. + */ + Color correctColor = Color(0xff5434ff); + EXPECT_EQ(correctColor.GetValue(), parseColor.GetValue()); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/theme/theme_manager_test.cpp b/frameworks/core/components/test/unittest/theme/theme_manager_test.cpp new file mode 100644 index 00000000..26fd87c6 --- /dev/null +++ b/frameworks/core/components/test/unittest/theme/theme_manager_test.cpp @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include + +#include "gtest/gtest.h" + +#include "base/log/log.h" +#include "core/components/button/button_theme.h" +#include "core/components/checkable/checkable_theme.h" +#include "core/components/dialog/dialog_theme.h" +#include "core/components/focus_animation/focus_animation_theme.h" +#include "core/components/marquee/marquee_theme.h" +#include "core/components/popup/popup_theme.h" +#include "core/components/progress/progress_theme.h" +#include "core/components/rating/rating_theme.h" +#include "core/components/select/select_theme.h" +#include "core/components/slider/slider_theme.h" +#include "core/components/stepper/stepper_theme.h" +#include "core/components/swiper/swiper_indicator_theme.h" +#include "core/components/tab_bar/tab_theme.h" +#include "core/components/text/text_theme.h" +#include "core/components/text_field/textfield_theme.h" +#include "core/components/theme/app_theme.h" +#include "core/components/theme/theme_constants.h" +#include "core/components/theme/theme_manager.h" +#include "core/components/toast/toast_theme.h" +#include "core/components/video/video_theme.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +const std::unordered_map COMPONENTS_THEMES = { + { "ButtonTheme", ButtonTheme::TypeId() }, + { "CheckboxTheme", CheckboxTheme::TypeId() }, + { "SwitchTheme", SwitchTheme::TypeId() }, + { "RadioTheme", RadioTheme::TypeId() }, + { "DialogTheme", DialogTheme::TypeId() }, + { "MarqueeTheme", MarqueeTheme::TypeId() }, + { "PopupTheme", PopupTheme::TypeId() }, + { "ProgressTheme", ProgressTheme::TypeId() }, + { "SelectTheme", SelectTheme::TypeId() }, + { "SliderTheme", SliderTheme::TypeId() }, + { "StepperTheme", StepperTheme::TypeId() }, + { "SwiperIndicatorTheme", SwiperIndicatorTheme::TypeId() }, + { "TabTheme", TabTheme::TypeId() }, + { "TextTheme", TextTheme::TypeId() }, + { "TextFieldTheme", TextFieldTheme::TypeId() }, + { "ToastTheme", ToastTheme::TypeId() }, + { "VideoTheme", VideoTheme::TypeId() }, + { "RatingTheme", RatingTheme::TypeId() }, + { "FocusAnimationTheme", FocusAnimationTheme::TypeId() }, +}; + +} // namespace + +class ThemeManagerTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); +}; + +void ThemeManagerTest::SetUpTestCase() {} +void ThemeManagerTest::TearDownTestCase() {} +void ThemeManagerTest::SetUp() {} +void ThemeManagerTest::TearDown() {} + +/** + * @tc.name: GlobalTheme001 + * @tc.desc: Test global theme exists. + * @tc.type: FUNC + * @tc.require: AR000DAR29 AR000DAR2C + * @tc.author: liruokun + */ +HWTEST_F(ThemeManagerTest, GlobalTheme001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Get global AppTheme from ThemeManager, check whether is nullptr. + * @tc.expected: step1. Global AppTheme is not nullptr. + */ + auto themeManager = AceType::MakeRefPtr(); + RefPtr theme = themeManager->GetTheme(); + EXPECT_TRUE(theme); +} + +/** + * @tc.name: GlobalTheme002 + * @tc.desc: Test global theme contains all components' theme. + * @tc.type: FUNC + * @tc.require: AR000DAR29 AR000DAR2C + * @tc.author: liruokun + */ +HWTEST_F(ThemeManagerTest, GlobalTheme002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Get all components' theme from ThemeManager, check each whether is nullptr. + * @tc.expected: step1. Each components' theme is not nullptr, and typeId is correct. + */ + auto themeManager = AceType::MakeRefPtr(); + for (const auto& [name, themeType] : COMPONENTS_THEMES) { + auto theme = themeManager->GetTheme(themeType); + EXPECT_TRUE(theme) << "Theme not found: " << name; + EXPECT_EQ(themeType, AceType::TypeId(theme)); + } +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/theme/theme_mock.cpp b/frameworks/core/components/test/unittest/theme/theme_mock.cpp new file mode 100644 index 00000000..e3e91246 --- /dev/null +++ b/frameworks/core/components/test/unittest/theme/theme_mock.cpp @@ -0,0 +1,177 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/unittest/theme/theme_mock.h" + +#include "core/components/common/layout/constants.h" +#include "core/components/theme/theme_attributes.h" + +namespace OHOS::Ace { +namespace { + +std::unordered_map> g_themes = { + { 0, + { + { THEME_ATTR_BG_COLOR, { .type = ThemeConstantsType::COLOR, .value = Color(0xffffff00) } }, + { THEME_PATTERN_BUTTON, { .type = ThemeConstantsType::PATTERN, .value = 0U } }, + } }, +}; + +std::unordered_map> g_componentStyles = { + // buttonStyle + { 0, + { + { PATTERN_BG_COLOR, { .type = ThemeConstantsType::STATE_RESOURCE, .value = 0U } }, + { PATTERN_TEXT_SIZE, { .type = ThemeConstantsType::STRING, .value = "?theme:textSizeButton1" } }, + { PATTERN_WIDTH, { .type = ThemeConstantsType::DOUBLE, .value = 36.0 } }, + { PATTERN_HEIGHT, { .type = ThemeConstantsType::DIMENSION, .value = 36.0_vp } }, + } }, +}; + +const std::unordered_map> STATE_ELEMENTS = { + // buttonBackgroundColor + { 0, + { + { STATE_NORMAL, { .type = ThemeConstantsType::COLOR, .value = Color(0x0c000000) } }, + { STATE_PRESSED, { .type = ThemeConstantsType::COLOR, .value = Color(0x19000000) } }, + } }, +}; + +const std::unordered_map RESOURCES = { + { 117440511, { .type = ThemeConstantsType::COLOR, .value = Color(0xffffffff) } }, + { 117440512, { .type = ThemeConstantsType::COLOR, .value = Color(0xffffffff) } }, + { 117440513, { .type = ThemeConstantsType::DIMENSION, .value = 10.0_vp } }, + { 117440514, { .type = ThemeConstantsType::DOUBLE, .value = 10.0 } }, + { 117440515, { .type = ThemeConstantsType::INT, .value = -10 } }, + { 117440516, { .type = ThemeConstantsType::STRING, .value = "sans-serif" } }, + { 117441012, { .type = ThemeConstantsType::COLOR, .value = Color(0xff5434ff) } }, +}; + +const Color ERROR_VALUE_COLOR = Color(0xff000000); +constexpr Dimension ERROR_VALUE_DIMENSION = 0.0_vp; +constexpr double ERROR_VALUE_DOUBLE = 0.0; +constexpr int32_t ERROR_VALUE_INT = 0; + +} // namespace + +ResourceAdapterMock::ResourceAdapterMock() +{ + Initialize(); +} + +void ResourceAdapterMock::Initialize() +{ + // Replace state resource id with real content in g_componentStyles. + for (auto& iter : g_componentStyles) { + for (auto& [attr, valueWrapper] : iter.second) { + if (valueWrapper.type != ThemeConstantsType::STATE_RESOURCE) { + continue; + } + auto uintPtr = std::get_if(&(valueWrapper.value)); + if (!uintPtr) { + continue; + } + auto elementItr = STATE_ELEMENTS.find(*uintPtr); + if (elementItr == STATE_ELEMENTS.end()) { + continue; + } + auto states = AceType::MakeRefPtr(); + for (const auto& [state, value] : elementItr->second) { + states->SetStateValue(state, value); + } + valueWrapper.type = ThemeConstantsType::STATE_RESOURCE; + valueWrapper.value = states; + } + } + for (auto& iter : g_themes) { + for (auto& [attr, valueWrapper] : iter.second) { + if (valueWrapper.type != ThemeConstantsType::PATTERN) { + continue; + } + auto uintPtr = std::get_if(&(valueWrapper.value)); + if (!uintPtr) { + continue; + } + auto styleItr = g_componentStyles.find(*uintPtr); + if (styleItr == g_componentStyles.end()) { + continue; + } + RefPtr componentStyle = AceType::MakeRefPtr(); + for (const auto& [attr, value] : styleItr->second) { + componentStyle->SetAttr(attr, value); + } + valueWrapper.type = ThemeConstantsType::PATTERN; + valueWrapper.value = componentStyle; + } + } +} + +RefPtr ResourceAdapterMock::GetTheme(int32_t themeId) +{ + auto findIter = g_themes.find(themeId); + if (findIter == g_themes.end()) { + return nullptr; + } + RefPtr theme = AceType::MakeRefPtr(); + theme->SetAttributes(findIter->second); + return theme; +} + +Color ResourceAdapterMock::GetColor(uint32_t resId) +{ + auto findIter = RESOURCES.find(resId); + if (findIter == RESOURCES.end()) { + return ERROR_VALUE_COLOR; + } + return findIter->second.GetValue(ERROR_VALUE_COLOR).second; +} + +Dimension ResourceAdapterMock::GetDimension(uint32_t resId) +{ + auto findIter = RESOURCES.find(resId); + if (findIter == RESOURCES.end()) { + return ERROR_VALUE_DIMENSION; + } + return findIter->second.GetValue(ERROR_VALUE_DIMENSION).second; +} + +std::string ResourceAdapterMock::GetString(uint32_t resId) +{ + auto findIter = RESOURCES.find(resId); + if (findIter == RESOURCES.end()) { + return ""; + } + return findIter->second.GetValue("").second; +} + +double ResourceAdapterMock::GetDouble(uint32_t resId) +{ + auto findIter = RESOURCES.find(resId); + if (findIter == RESOURCES.end()) { + return ERROR_VALUE_DOUBLE; + } + return findIter->second.GetValue(ERROR_VALUE_DOUBLE).second; +} + +int32_t ResourceAdapterMock::GetInt(uint32_t resId) +{ + auto findIter = RESOURCES.find(resId); + if (findIter == RESOURCES.end()) { + return ERROR_VALUE_INT; + } + return findIter->second.GetValue(ERROR_VALUE_INT).second; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/theme/theme_mock.h b/frameworks/core/components/test/unittest/theme/theme_mock.h new file mode 100644 index 00000000..553e4d7e --- /dev/null +++ b/frameworks/core/components/test/unittest/theme/theme_mock.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_THEME_THEME_MOCK_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_THEME_THEME_MOCK_H + +#include "core/components/theme/resource_adapter.h" + +namespace OHOS::Ace { + +class ResourceAdapterMock : public virtual ResourceAdapter { + DECLARE_ACE_TYPE(ResourceAdapterMock, ResourceAdapter); + +public: + ResourceAdapterMock(); + ~ResourceAdapterMock() override = default; + + void Initialize(); + + RefPtr GetTheme(int32_t themeId) override; + + Color GetColor(uint32_t resId) override; + Dimension GetDimension(uint32_t resId) override; + std::string GetString(uint32_t resId) override; + double GetDouble(uint32_t resId) override; + int32_t GetInt(uint32_t resId) override; + +private: + ACE_DISALLOW_COPY_AND_MOVE(ResourceAdapterMock); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_THEME_THEME_MOCK_H diff --git a/frameworks/core/components/test/unittest/transform/BUILD.gn b/frameworks/core/components/test/unittest/transform/BUILD.gn new file mode 100644 index 00000000..070652bb --- /dev/null +++ b/frameworks/core/components/test/unittest/transform/BUILD.gn @@ -0,0 +1,88 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +if (is_standard_system) { + module_output_path = "ace_engine_standard/backenduicomponent/transform" +} + +ohos_unittest("TransformCreatorTest") { + module_out_path = module_output_path + + sources = [ "transform_creator_test.cpp" ] + + configs = [ + ":config_json_creator_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "$ace_root/frameworks/core/components/test:json", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + deps += [ "$ace_root/frameworks/bridge:js_framework_ohos" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_json_creator_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +ohos_unittest("RenderTransformTest") { + module_out_path = module_output_path + + sources = [ + "$ace_root/frameworks/core/components/test/unittest/display/display_test_utils.cpp", + "render_transform_test.cpp", + ] + + configs = [ "$ace_root:ace_test_config" ] + + deps = [ + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "$ace_root/frameworks/core/components/test:json", + "//third_party/googletest:gtest_main", + ] + + if (is_standard_system) { + configs += [ "//third_party/curl:curl_config" ] + deps += [ + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/curl:curl", + ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ + ":RenderTransformTest", + ":TransformCreatorTest", + ] +} diff --git a/frameworks/core/components/test/unittest/transform/render_transform_test.cpp b/frameworks/core/components/test/unittest/transform/render_transform_test.cpp new file mode 100644 index 00000000..7e79474e --- /dev/null +++ b/frameworks/core/components/test/unittest/transform/render_transform_test.cpp @@ -0,0 +1,682 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "gtest/gtest.h" + +#include "base/json/json_util.h" +#include "core/components/button/button_component.h" +#include "core/components/button/render_button.h" +#include "core/components/test/unittest/display/display_test_utils.h" +#include "core/components/text/text_component.h" +#include "core/components/transform/render_transform.h" +#include "core/components/transform/transform_component.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { + +const Offset RESULT_ORIGIN_CENTER = Offset(75, 50); +const Offset RESULT_ORIGIN_MIX = Offset(50, 40); +const Offset RESULT_ORIGIN_TEST = Offset(25, 20); +const Offset RESULT_ORIGIN_PERCENT = Offset(60, 60); + +const DimensionOffset TRANSFORM_ORIGIN_PERCENT = + DimensionOffset(Dimension(0.4, DimensionUnit::PERCENT), Dimension(0.6, DimensionUnit::PERCENT)); +const DimensionOffset TRANSFORM_ORIGIN_MIX = + DimensionOffset(Dimension(50, DimensionUnit::PX), Dimension(0.4, DimensionUnit::PERCENT)); +const DimensionOffset TRANSFORM_ORIGIN_TEST = DimensionOffset(Offset(25, 20)); +const DimensionOffset TRANSFORM_ORIGIN_CENTER = DimensionOffset(Offset(75, 50)); +const Size TRANSFORM_TEST_SIZE_BUTTON = Size(150, 100); +const Size TRANSFORM_TEST_SIZE_DEFAULT = Size(0, 0); +const Size TRANSFORM_TEST_SIZE_MAX = Size(600, 600); +const Dimension BUTTON_SIZE = Dimension(10.0, DimensionUnit::FP); + +class MockRenderButton final : public RenderButton { +public: + MockRenderButton() = default; + ~MockRenderButton() override = default; + Size Measure() override; +}; + +Size MockRenderButton::Measure() +{ + return TRANSFORM_TEST_SIZE_BUTTON; +} + +class MockRenderTranform final : public RenderTransform { +public: + MockRenderTranform() = default; + ~MockRenderTranform() override = default; + Offset GetOrigin() const + { + return origin_; + } + + Matrix4 GetTransform() const + { + return transform_; + } +}; + +class RenderTransformTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; +}; + +void RenderTransformTest::SetUpTestCase() {} +void RenderTransformTest::TearDownTestCase() {} +void RenderTransformTest::SetUp() {} +void RenderTransformTest::TearDown() {} + +/** + * @tc.name: RenderTransformTest001 + * @tc.desc: Verify PerformLayout can calculate transform properties with a child where tansfrom origin set in PX + * and transform origin set to (25,25). + * @tc.type: FUNC + * @tc.require: AR000DAQUJ + * @tc.author: jinwuwen + */ +HWTEST_F(RenderTransformTest, RenderTransformTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of transform component with a button child. + */ + std::list> buttonChildren; + RefPtr text = AceType::MakeRefPtr("Hi Ace"); + buttonChildren.emplace_back(text); + RefPtr transform = AceType::MakeRefPtr(); + RefPtr button = AceType::MakeRefPtr(buttonChildren); + transform->SetChild(button); + transform->SetOriginDimension(TRANSFORM_ORIGIN_TEST); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties are calculated correctly. + */ + auto mockContext = DisplayTestUtils::GetMockContext(); + RefPtr renderTransform = AceType::MakeRefPtr(); + renderTransform->Attach(mockContext); + renderTransform->Update(transform); + RefPtr renderButton = AceType::MakeRefPtr(); + renderButton->Attach(mockContext); + renderButton->Update(button); + renderTransform->AddChild(renderButton); + + LayoutParam layoutParam; + layoutParam.SetMinSize(TRANSFORM_TEST_SIZE_DEFAULT); + layoutParam.SetMaxSize(TRANSFORM_TEST_SIZE_MAX); + renderTransform->SetLayoutParam(layoutParam); + EXPECT_TRUE(renderTransform->NeedLayout()); + + renderTransform->PerformLayout(); + renderTransform->UpdateTransformOrigin(); + ASSERT_TRUE(renderTransform->GetOrigin() == RESULT_ORIGIN_TEST); +} + +/** + * @tc.name: RenderTransformTest002 + * @tc.desc: Verify PerformLayout can calculate transform properties with a child where tansform origin is default + * @tc.type: FUNC + * @tc.require: AR000DAQUJ + * @tc.author: jinwuwen + */ +HWTEST_F(RenderTransformTest, RenderTransformTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of transform component with a button child. + */ + std::list> buttonChildren; + RefPtr text = AceType::MakeRefPtr("Hi Ace"); + buttonChildren.emplace_back(text); + RefPtr transform = AceType::MakeRefPtr(); + RefPtr button = AceType::MakeRefPtr(buttonChildren); + button->SetWidth(BUTTON_SIZE); + button->SetHeight(BUTTON_SIZE); + transform->SetChild(button); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties are calculated correctly. + */ + auto mockContext = DisplayTestUtils::GetMockContext(); + RefPtr renderTransform = AceType::MakeRefPtr(); + renderTransform->Attach(mockContext); + renderTransform->Update(transform); + RefPtr renderButton = AceType::MakeRefPtr(); + renderButton->Attach(mockContext); + renderButton->Update(button); + renderTransform->AddChild(renderButton); + + LayoutParam layoutParam; + layoutParam.SetMinSize(TRANSFORM_TEST_SIZE_DEFAULT); + layoutParam.SetMaxSize(TRANSFORM_TEST_SIZE_MAX); + renderTransform->SetLayoutParam(layoutParam); + EXPECT_TRUE(renderTransform->NeedLayout()); + + renderTransform->PerformLayout(); + renderTransform->UpdateTransformOrigin(); + ASSERT_TRUE(renderTransform->GetOrigin() == RESULT_ORIGIN_CENTER); +} + +/** + * @tc.name: RenderTransformTest003 + * @tc.desc: Verify PerformLayout can calculate transform properties with a child where origin is set by percent + * @tc.type: FUNC + * @tc.require: AR000DAQUJ + * @tc.author: jinwuwen + */ +HWTEST_F(RenderTransformTest, RenderTransformTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of transform component with a button child. + */ + std::list> buttonChildren; + RefPtr text = AceType::MakeRefPtr("Hi Ace"); + buttonChildren.emplace_back(text); + RefPtr transform = AceType::MakeRefPtr(); + RefPtr button = AceType::MakeRefPtr(buttonChildren); + button->SetWidth(BUTTON_SIZE); + button->SetHeight(BUTTON_SIZE); + transform->SetChild(button); + transform->SetOriginDimension(TRANSFORM_ORIGIN_PERCENT); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties are calculated correctly. + */ + auto mockContext = DisplayTestUtils::GetMockContext(); + RefPtr renderTransform = AceType::MakeRefPtr(); + renderTransform->Attach(mockContext); + renderTransform->Update(transform); + RefPtr renderButton = AceType::MakeRefPtr(); + renderButton->Attach(mockContext); + renderButton->Update(button); + renderTransform->AddChild(renderButton); + + LayoutParam layoutParam; + layoutParam.SetMinSize(TRANSFORM_TEST_SIZE_DEFAULT); + layoutParam.SetMaxSize(TRANSFORM_TEST_SIZE_MAX); + renderTransform->SetLayoutParam(layoutParam); + EXPECT_TRUE(renderTransform->NeedLayout()); + + renderTransform->PerformLayout(); + renderTransform->UpdateTransformOrigin(); + ASSERT_TRUE(renderTransform->GetOrigin() == RESULT_ORIGIN_PERCENT); +} + +/** + * @tc.name: RenderTransformTest004 + * @tc.desc: Verify PerformLayout can calculate transform properties with a child where transform origin is set by px + * and percent. + * @tc.type: FUNC + * @tc.require: AR000DAQUJ + * @tc.author: jinwuwen + */ +HWTEST_F(RenderTransformTest, RenderTransformTest004, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of transform component with a button child. + */ + std::list> buttonChildren; + RefPtr text = AceType::MakeRefPtr("Hi Ace"); + buttonChildren.emplace_back(text); + RefPtr transform = AceType::MakeRefPtr(); + RefPtr button = AceType::MakeRefPtr(buttonChildren); + button->SetWidth(BUTTON_SIZE); + button->SetHeight(BUTTON_SIZE); + transform->SetChild(button); + transform->SetOriginDimension(TRANSFORM_ORIGIN_MIX); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties are calculated correctly. + */ + auto mockContext = DisplayTestUtils::GetMockContext(); + RefPtr renderTransform = AceType::MakeRefPtr(); + renderTransform->Attach(mockContext); + renderTransform->Update(transform); + RefPtr renderButton = AceType::MakeRefPtr(); + renderButton->Attach(mockContext); + renderButton->Update(button); + renderTransform->AddChild(renderButton); + + LayoutParam layoutParam; + layoutParam.SetMinSize(TRANSFORM_TEST_SIZE_DEFAULT); + layoutParam.SetMaxSize(TRANSFORM_TEST_SIZE_MAX); + renderTransform->SetLayoutParam(layoutParam); + EXPECT_TRUE(renderTransform->NeedLayout()); + + renderTransform->PerformLayout(); + renderTransform->UpdateTransformOrigin(); + ASSERT_TRUE(renderTransform->GetOrigin() == RESULT_ORIGIN_MIX); +} + +/** + * @tc.name: RenderTransformTest005 + * @tc.desc: Verify Multi Rotate Effect can overlay to Matrix by transform Component. + * and percent. + * @tc.type: FUNC + * @tc.require: AR000DAQUJ + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderTransformTest, RenderTransformTest005, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct transform component with a box child. + */ + RefPtr transform = AceType::MakeRefPtr(); + transform->RotateX(10.0f); + transform->RotateY(20.0f); + transform->RotateZ(30.0f); + transform->RotateY(40.0f); + transform->RotateZ(50.0f); + transform->RotateX(60.0f); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties are calculated correctly. + */ + auto mockContext = DisplayTestUtils::GetMockContext(); + RefPtr renderTransform = AceType::MakeRefPtr(); + renderTransform->Attach(mockContext); + renderTransform->Update(transform); + RefPtr renderBox = DisplayTestUtils::CreateRenderBox(200.0, 100.0); + renderBox->Attach(mockContext); + renderTransform->AddChild(renderBox); + LayoutParam layoutParam; + layoutParam.SetMinSize(TRANSFORM_TEST_SIZE_DEFAULT); + layoutParam.SetMaxSize(TRANSFORM_TEST_SIZE_MAX); + renderTransform->SetLayoutParam(layoutParam); + EXPECT_TRUE(renderTransform->NeedLayout()); + renderTransform->PerformLayout(); + renderTransform->UpdateTransform(); + Matrix4 expect = Matrix4::CreateIdentity(); + expect.SetEntry(INDEX_THREE, INDEX_TWO, PERSPECTIVE); + expect = Matrix4::CreateRotate(-10.0, 1.0f, 0.0f, 0.0f) * expect; // RotateX(10.0) + expect.SetEntry(INDEX_THREE, INDEX_TWO, PERSPECTIVE); + expect = Matrix4::CreateRotate(-20.0, 0.0f, 1.0f, 0.0f) * expect; // RotateY(20.0) + expect.SetEntry(INDEX_THREE, INDEX_TWO, PERSPECTIVE); + expect = Matrix4::CreateRotate(30.0, 0.0f, 0.0f, 1.0f) * expect; // RotateZ(30.0) + expect.SetEntry(INDEX_THREE, INDEX_TWO, PERSPECTIVE); + expect = Matrix4::CreateRotate(-40.0, 0.0f, 1.0f, 0.0f) * expect; // RotateY(40.0) + expect.SetEntry(INDEX_THREE, INDEX_TWO, PERSPECTIVE); + expect = Matrix4::CreateRotate(50.0, 0.0f, 0.0f, 1.0f) * expect; // RotateZ(50.0) + expect.SetEntry(INDEX_THREE, INDEX_TWO, PERSPECTIVE); + expect = Matrix4::CreateRotate(-60.0, 1.0f, 0.0f, 0.0f) * expect; // RotateX(60.0) + ASSERT_TRUE(renderTransform->GetTransform() == expect); +} + +/** + * @tc.name: RenderTransformTest006 + * @tc.desc: Verify Multi Scale Effect can overlay to Matrix by transform Component. + * and percent. + * @tc.type: FUNC + * @tc.require: AR000DAQUJ + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderTransformTest, RenderTransformTest006, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct transform component with a box child. + */ + RefPtr transform = AceType::MakeRefPtr(); + transform->Scale(0.5f, 0.5f); + transform->ScaleX(1.5f); + transform->ScaleY(2.5f); + transform->ScaleX(0.5f); + transform->ScaleY(0.8f); + transform->Scale(5.0f, 6.0f); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties are calculated correctly. + */ + auto mockContext = DisplayTestUtils::GetMockContext(); + RefPtr renderTransform = AceType::MakeRefPtr(); + renderTransform->Attach(mockContext); + renderTransform->Update(transform); + RefPtr renderBox = DisplayTestUtils::CreateRenderBox(200.0, 100.0); + renderBox->Attach(mockContext); + renderTransform->AddChild(renderBox); + LayoutParam layoutParam; + layoutParam.SetMinSize(TRANSFORM_TEST_SIZE_DEFAULT); + layoutParam.SetMaxSize(TRANSFORM_TEST_SIZE_MAX); + renderTransform->SetLayoutParam(layoutParam); + EXPECT_TRUE(renderTransform->NeedLayout()); + renderTransform->PerformLayout(); + renderTransform->UpdateTransform(); + Matrix4 effect = renderTransform->GetTransform(); + ASSERT_TRUE(NearEqual(effect[0], 0.5 * 1.5 * 0.5 * 5.0)); + ASSERT_TRUE(NearEqual(effect[5], 0.5 * 2.5 * 0.8 * 6.0)); +} + +/** + * @tc.name: RenderTransformTest007 + * @tc.desc: Verify Multi Translate Effect can overlay to Matrix by transform Component. + * and percent. + * @tc.type: FUNC + * @tc.require: AR000DAQUJ + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderTransformTest, RenderTransformTest007, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct transform component with a box child. + */ + RefPtr transform = AceType::MakeRefPtr(); + transform->Translate(Dimension(100.0), Dimension(100.0)); + transform->TranslateX(Dimension(0.2, DimensionUnit::PERCENT)); + transform->TranslateY(Dimension(0.5, DimensionUnit::PERCENT)); + transform->TranslateX(Dimension(-50.0)); + transform->TranslateY(Dimension(-80.0)); + transform->Translate(Dimension(70.0), Dimension(-60.0)); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties are calculated correctly. + */ + auto mockContext = DisplayTestUtils::GetMockContext(); + RefPtr renderTransform = AceType::MakeRefPtr(); + renderTransform->Attach(mockContext); + renderTransform->Update(transform); + RefPtr renderBox = DisplayTestUtils::CreateRenderBox(200.0, 100.0); + renderBox->Attach(mockContext); + renderTransform->AddChild(renderBox); + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(200.0, 100.0)); + renderTransform->SetLayoutParam(layoutParam); + EXPECT_TRUE(renderTransform->NeedLayout()); + renderTransform->PerformLayout(); + renderTransform->UpdateTransform(); + Matrix4 effect = renderTransform->GetTransform(); + ASSERT_TRUE(NearEqual(effect[12], 100.0 + 0.2 * 200.0 - 50.0 + 70.0)); + ASSERT_TRUE(NearEqual(effect[13], 100.0 + 0.5 * 100.0 - 80.0 - 60.0)); +} + +/** + * @tc.name: RenderTransformTest008 + * @tc.desc: Verify Rotate/Scale/Translate Effect can overlay to Matrix by transform Component. + * and percent. + * @tc.type: FUNC + * @tc.require: AR000DAQUJ + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderTransformTest, RenderTransformTest008, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct transform component with a box child. + */ + RefPtr transform = AceType::MakeRefPtr(); + transform->RotateX(10.0f); + transform->ScaleX(0.5f); + transform->RotateY(20.0f); + transform->TranslateX(Dimension(0.2, DimensionUnit::PERCENT)); + transform->RotateZ(30.0f); + transform->ScaleY(0.8f); + transform->TranslateY(Dimension(0.5, DimensionUnit::PERCENT)); + + /** + * @tc.steps: step2. Verify that the properties are calculated correctly. + * @tc.expected: step2. Properties are calculated correctly. + */ + auto mockContext = DisplayTestUtils::GetMockContext(); + RefPtr renderTransform = AceType::MakeRefPtr(); + renderTransform->Attach(mockContext); + renderTransform->Update(transform); + RefPtr renderBox = DisplayTestUtils::CreateRenderBox(200.0, 100.0); + renderBox->Attach(mockContext); + renderTransform->AddChild(renderBox); + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(200.0, 100.0)); + renderTransform->SetLayoutParam(layoutParam); + EXPECT_TRUE(renderTransform->NeedLayout()); + renderTransform->PerformLayout(); + renderTransform->UpdateTransform(); + Matrix4 expect = Matrix4::CreateIdentity(); + expect.SetEntry(INDEX_THREE, INDEX_TWO, PERSPECTIVE); + expect = Matrix4::CreateRotate(-10.0, 1.0f, 0.0f, 0.0f) * expect; // RotateX(10.0) + expect = Matrix4::CreateScale(0.5f, 1.0f, 1.0f) * expect; // ScaleX(0.5) + expect.SetEntry(INDEX_THREE, INDEX_TWO, PERSPECTIVE); + expect = Matrix4::CreateRotate(-20.0, 0.0f, 1.0f, 0.0f) * expect; // RotateY(20.0) + expect = Matrix4::CreateTranslate(40.0f, 0.0f, 0.0f) * expect; // TranslateX(20%) + expect.SetEntry(INDEX_THREE, INDEX_TWO, PERSPECTIVE); + expect = Matrix4::CreateRotate(30.0, 0.0f, 0.0f, 1.0f) * expect; // RotateZ(30.0) + expect = Matrix4::CreateScale(1.0f, 0.8f, 1.0f) * expect; // ScaleY(0.8) + expect = Matrix4::CreateTranslate(0.0f, 50.0f, 0.0f) * expect; // TranslateY(50%) + ASSERT_TRUE(renderTransform->GetTransform() == expect); + + /** + * @tc.steps: step3. Reset the transform component and update to render node. + * @tc.expected: step3. Check the render node Matrix is the Identity matrix. + */ + transform->ResetTransform(); + renderTransform->Update(transform); + renderTransform->UpdateTransform(); + expect = Matrix4::CreateIdentity(); + ASSERT_TRUE(renderTransform->GetTransform() == expect); +} + +/** + * @tc.name: RenderTransformTest009 + * @tc.desc: Verify Multi Rotate Effect can overlay to Matrix by render transform. + * and percent. + * @tc.type: FUNC + * @tc.require: AR000DAQUJ + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderTransformTest, RenderTransformTest009, TestSize.Level1) +{ + /** + * @tc.steps: step1. Create render transform and add multi rotate Effect. + * @tc.expected: step1. Properties are calculated correctly. + */ + auto mockContext = DisplayTestUtils::GetMockContext(); + RefPtr renderTransform = AceType::MakeRefPtr(); + renderTransform->Attach(mockContext); + renderTransform->Update(AceType::MakeRefPtr()); + RefPtr renderBox = DisplayTestUtils::CreateRenderBox(200.0, 100.0); + renderBox->Attach(mockContext); + renderTransform->AddChild(renderBox); + renderTransform->RotateX(10.0f); + renderTransform->RotateY(20.0f); + renderTransform->RotateZ(30.0f); + renderTransform->RotateY(40.0f); + renderTransform->RotateZ(50.0f); + renderTransform->RotateX(60.0f); + + /** + * @tc.steps: step2. Trigger PerformLayout and UpdateTransform. + * @tc.expected: step2. The multi rotate Effect set to Matrix correctly. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(TRANSFORM_TEST_SIZE_DEFAULT); + layoutParam.SetMaxSize(TRANSFORM_TEST_SIZE_MAX); + renderTransform->SetLayoutParam(layoutParam); + EXPECT_TRUE(renderTransform->NeedLayout()); + renderTransform->PerformLayout(); + renderTransform->UpdateTransform(); + Matrix4 expect = Matrix4::CreateIdentity(); + expect.SetEntry(INDEX_THREE, INDEX_TWO, PERSPECTIVE); + expect = Matrix4::CreateRotate(10.0, 1.0f, 0.0f, 0.0f) * expect; // RotateX(10.0) + expect.SetEntry(INDEX_THREE, INDEX_TWO, PERSPECTIVE); + expect = Matrix4::CreateRotate(20.0, 0.0f, 1.0f, 0.0f) * expect; // RotateY(20.0) + expect.SetEntry(INDEX_THREE, INDEX_TWO, PERSPECTIVE); + expect = Matrix4::CreateRotate(30.0, 0.0f, 0.0f, 1.0f) * expect; // RotateZ(30.0) + expect.SetEntry(INDEX_THREE, INDEX_TWO, PERSPECTIVE); + expect = Matrix4::CreateRotate(40.0, 0.0f, 1.0f, 0.0f) * expect; // RotateY(40.0) + expect.SetEntry(INDEX_THREE, INDEX_TWO, PERSPECTIVE); + expect = Matrix4::CreateRotate(50.0, 0.0f, 0.0f, 1.0f) * expect; // RotateZ(50.0) + expect.SetEntry(INDEX_THREE, INDEX_TWO, PERSPECTIVE); + expect = Matrix4::CreateRotate(60.0, 1.0f, 0.0f, 0.0f) * expect; // RotateX(60.0) + ASSERT_TRUE(renderTransform->GetTransform() == expect); +} + +/** + * @tc.name: RenderTransformTest010 + * @tc.desc: Verify Multi Scale Effect can overlay to Matrix by render transform. + * and percent. + * @tc.type: FUNC + * @tc.require: AR000DAQUJ + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderTransformTest, RenderTransformTest010, TestSize.Level1) +{ + /** + * @tc.steps: step1. Create render transform and add multi scale Effect. + * @tc.expected: step1. Properties are calculated correctly. + */ + auto mockContext = DisplayTestUtils::GetMockContext(); + RefPtr renderTransform = AceType::MakeRefPtr(); + renderTransform->Attach(mockContext); + renderTransform->Update(AceType::MakeRefPtr()); + RefPtr renderBox = DisplayTestUtils::CreateRenderBox(200.0, 100.0); + renderBox->Attach(mockContext); + renderTransform->AddChild(renderBox); + renderTransform->Scale(0.5f); // X:0.5 Y:0.5 + renderTransform->Scale(1.5f, 1.0f); // X:1.5 + renderTransform->Scale(1.0f, 2.5f); // Y:2.5 + renderTransform->Scale(0.5f, 1.0f); // X:0.5 + renderTransform->Scale(1.0f, 0.8f); // Y:0.8 + renderTransform->Scale(5.0f, 6.0f); // X:5.0 Y:6.0 + + /** + * @tc.steps: step2. Trigger PerformLayout and UpdateTransform. + * @tc.expected: step2. The multi Scale Effect set to Matrix correctly. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(TRANSFORM_TEST_SIZE_DEFAULT); + layoutParam.SetMaxSize(TRANSFORM_TEST_SIZE_MAX); + renderTransform->SetLayoutParam(layoutParam); + EXPECT_TRUE(renderTransform->NeedLayout()); + renderTransform->PerformLayout(); + renderTransform->UpdateTransform(); + Matrix4 effect = renderTransform->GetTransform(); + ASSERT_TRUE(NearEqual(effect[0], 0.5 * 1.5 * 0.5 * 5.0)); + ASSERT_TRUE(NearEqual(effect[5], 0.5 * 2.5 * 0.8 * 6.0)); +} + +/** + * @tc.name: RenderTransformTest011 + * @tc.desc: Verify Multi Translate Effect can overlay to Matrix by render transform. + * and percent. + * @tc.type: FUNC + * @tc.require: AR000DAQUJ + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderTransformTest, RenderTransformTest011, TestSize.Level1) +{ + /** + * @tc.steps: step1. Create render transform and add multi translate Effect. + * @tc.expected: step1. Properties are calculated correctly. + */ + auto mockContext = DisplayTestUtils::GetMockContext(); + RefPtr renderTransform = AceType::MakeRefPtr(); + renderTransform->Attach(mockContext); + renderTransform->Update(AceType::MakeRefPtr()); + RefPtr renderBox = DisplayTestUtils::CreateRenderBox(200.0, 100.0); + renderBox->Attach(mockContext); + renderTransform->AddChild(renderBox); + + /** + * @tc.steps: step2. Trigger PerformLayout and UpdateTransform. + * @tc.expected: step2. The multi Translate Effect set to Matrix correctly. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(200.0, 100.0)); + renderTransform->SetLayoutParam(layoutParam); + EXPECT_TRUE(renderTransform->NeedLayout()); + renderTransform->PerformLayout(); + renderTransform->Translate(Dimension(100.0), Dimension(100.0)); + renderTransform->Translate(Dimension(0.2, DimensionUnit::PERCENT), Dimension()); + renderTransform->Translate(Dimension(), Dimension(0.5, DimensionUnit::PERCENT)); + renderTransform->Translate(Dimension(-50.0), Dimension()); + renderTransform->Translate(Dimension(), Dimension(-80.0)); + renderTransform->Translate(Dimension(70.0), Dimension(-60.0)); + renderTransform->UpdateTransform(); + Matrix4 effect = renderTransform->GetTransform(); + ASSERT_TRUE(NearEqual(effect[12], 100.0 + 0.2 * 200.0 - 50.0 + 70.0)); + ASSERT_TRUE(NearEqual(effect[13], 100.0 + 0.5 * 100.0 - 80.0 - 60.0)); +} + +/** + * @tc.name: RenderTransformTest012 + * @tc.desc: Verify Rotate/Scale/Translate Effect can overlay to Matrix by render transform. + * and percent. + * @tc.type: FUNC + * @tc.require: AR000DAQUJ + * @tc.author: zhongjianfei + */ +HWTEST_F(RenderTransformTest, RenderTransformTest012, TestSize.Level1) +{ + /** + * @tc.steps: step1. Create render transform and add Rotate/Scale/Translate Effect. + * @tc.expected: step1. Properties are calculated correctly. + */ + auto mockContext = DisplayTestUtils::GetMockContext(); + RefPtr renderTransform = AceType::MakeRefPtr(); + renderTransform->Attach(mockContext); + renderTransform->Update(AceType::MakeRefPtr()); + RefPtr renderBox = DisplayTestUtils::CreateRenderBox(200.0, 100.0); + renderBox->Attach(mockContext); + renderTransform->AddChild(renderBox); + + /** + * @tc.steps: step2. Trigger PerformLayout and UpdateTransform. + * @tc.expected: step2. The Rotate/Scale/Translate Effect set to Matrix correctly. + */ + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(Size(200.0, 100.0)); + renderTransform->SetLayoutParam(layoutParam); + EXPECT_TRUE(renderTransform->NeedLayout()); + renderTransform->PerformLayout(); + renderTransform->RotateX(10.0f); + renderTransform->Scale(0.5f, 1.0f); + renderTransform->RotateY(20.0f); + renderTransform->Translate(Dimension(0.2, DimensionUnit::PERCENT), Dimension()); + renderTransform->RotateZ(30.0f); + renderTransform->Scale(1.0f, 0.8f); + renderTransform->Translate(Dimension(), Dimension(0.5, DimensionUnit::PERCENT)); + renderTransform->UpdateTransform(); + Matrix4 expect = Matrix4::CreateIdentity(); + expect.SetEntry(INDEX_THREE, INDEX_TWO, PERSPECTIVE); + expect = Matrix4::CreateRotate(10.0, 1.0f, 0.0f, 0.0f) * expect; // RotateX(10.0) + expect = Matrix4::CreateScale(0.5f, 1.0f, 1.0f) * expect; // ScaleX(0.5) + expect.SetEntry(INDEX_THREE, INDEX_TWO, PERSPECTIVE); + expect = Matrix4::CreateRotate(20.0, 0.0f, 1.0f, 0.0f) * expect; // RotateY(20.0) + expect = Matrix4::CreateTranslate(40.0f, 0.0f, 0.0f) * expect; // TranslateX(20%) + expect.SetEntry(INDEX_THREE, INDEX_TWO, PERSPECTIVE); + expect = Matrix4::CreateRotate(30.0, 0.0f, 0.0f, 1.0f) * expect; // RotateZ(30.0) + expect = Matrix4::CreateScale(1.0f, 0.8f, 1.0f) * expect; // ScaleY(0.8) + expect = Matrix4::CreateTranslate(0.0f, 50.0f, 0.0f) * expect; // TranslateY(50%) + ASSERT_TRUE(renderTransform->GetTransform() == expect); + + /** + * @tc.steps: step3. Reset the transform. + * @tc.expected: step3. Check Matrix is Identity. + */ + renderTransform->ResetTransform(); + renderTransform->UpdateTransform(); + expect = Matrix4::CreateIdentity(); + ASSERT_TRUE(renderTransform->GetTransform() == expect); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/transform/transform_creator_test.cpp b/frameworks/core/components/test/unittest/transform/transform_creator_test.cpp new file mode 100644 index 00000000..b5716c01 --- /dev/null +++ b/frameworks/core/components/test/unittest/transform/transform_creator_test.cpp @@ -0,0 +1,268 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/json/json_util.h" +#include "base/utils/utils.h" +#include "core/components/test/json/component_factory.h" +#include "core/components/test/json/transform_creator.h" +#include "core/components/text/text_component.h" +#include "core/components/transform/transform_component.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +const std::string TEXT_VALUE = "Hi Ace"; + +} // namespace + +class TransformCreatorTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); +}; + +void TransformCreatorTest::SetUpTestCase() {} +void TransformCreatorTest::TearDownTestCase() {} +void TransformCreatorTest::SetUp() {} +void TransformCreatorTest::TearDown() {} + +/** + * @tc.name: TransformCreator001 + * @tc.desc: Verify TransformCreator can create transform component with a translate operation. + * @tc.type: FUNC + * @tc.require: AR000DAQUJ + * @tc.author: jinwuwen + */ +HWTEST_F(TransformCreatorTest, TransformCreator001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of transform component with a translate operation. + */ + const std::string content = "" + "{ " + " \"className\": \"Transform\", " + " \"transform\": \"translate\", " + " \"parameter\": { " + " \"px\": 100, " + " \"py\": 150, " + " \"pz\": 0 " + " }, " + " \"child\": { " + " \"className\": \"Text\", " + " \"value\": \"Hi Ace\" " + " } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get transform component. + * @tc.expected: step2. properties and child are set correctly. + */ + const auto dslBuf = reinterpret_cast(content.c_str()); + size_t dslLen = content.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component != nullptr); + RefPtr transform = AceType::DynamicCast(component); + ASSERT_TRUE(transform != nullptr); + RefPtr text = AceType::DynamicCast(transform->GetChild()); + ASSERT_TRUE(text != nullptr); + ASSERT_TRUE(text->GetData() == TEXT_VALUE); + Matrix4 transformMatrix = transform->GetTransform(); + ASSERT_TRUE(transformMatrix == Matrix4::CreateTranslate(100.0f, 150.0f, 0.0f)); +} + +/** + * @tc.name: TransformCreator002 + * @tc.desc: Verify TransformCreator can create transform component with a rotate operation. + * @tc.type: FUNC + * @tc.require: AR000DAQUH + * @tc.author: jinwuwen + */ +HWTEST_F(TransformCreatorTest, TransformCreator002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of transform component with a rotate operation. + */ + const std::string content = "" + "{ " + " \"className\": \"Transform\", " + " \"transform\": \"rotate\", " + " \"angleValue\": 45, " + " \"parameter\": { " + " \"px\": 0, " + " \"py\": 0, " + " \"pz\": 1 " + " }, " + " \"child\": { " + " \"className\": \"Text\", " + " \"value\": \"Hi Ace\" " + " } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get transform component. + * @tc.expected: step2. properties and child are set correctly. + */ + const auto dslBuf = reinterpret_cast(content.c_str()); + size_t dslLen = content.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component != nullptr); + RefPtr transform = AceType::DynamicCast(component); + ASSERT_TRUE(transform != nullptr); + RefPtr text = AceType::DynamicCast(transform->GetChild()); + ASSERT_TRUE(text != nullptr); + ASSERT_TRUE(text->GetData() == TEXT_VALUE); + Matrix4 transformMatrix = transform->GetTransform(); + Matrix4 rotateMatrix = Matrix4::CreateRotate(45.0f, 0.0f, 0.0f, 1.0f); + rotateMatrix.SetEntry(3, 2, PERSPECTIVE); + ASSERT_TRUE(transformMatrix == rotateMatrix); +} + +/** + * @tc.name: TransformCreator003 + * @tc.desc: Verify TransformCreator can create transform component with a scale operation. + * @tc.type: FUNC + * @tc.require: AR000DAQUI + * @tc.author: jinwuwen + */ +HWTEST_F(TransformCreatorTest, TransformCreator003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of transform component with a scale operation. + */ + const std::string content = "" + "{ " + " \"className\": \"Transform\", " + " \"transform\": \"scale\", " + " \"parameter\": { " + " \"px\": 2, " + " \"py\": 0.5, " + " \"pz\": 1 " + " }, " + " \"child\": { " + " \"className\": \"Text\", " + " \"value\": \"Hi Ace\" " + " } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get transform component. + * @tc.expected: step2. properties and child are set correctly. + */ + const auto dslBuf = reinterpret_cast(content.c_str()); + size_t dslLen = content.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component != nullptr); + RefPtr transform = AceType::DynamicCast(component); + ASSERT_TRUE(transform != nullptr); + RefPtr text = AceType::DynamicCast(transform->GetChild()); + ASSERT_TRUE(text != nullptr); + ASSERT_TRUE(text->GetData() == TEXT_VALUE); + Matrix4 transformMatrix = transform->GetTransform(); + ASSERT_TRUE(transformMatrix == Matrix4::CreateScale(2.0f, 0.5f, 1.0f)); +} + +/** + * @tc.name: TransformCreator004 + * @tc.desc: Verify TransformCreator can create transform component with a scale operation. + * @tc.type: FUNC + * @tc.require: AR000DAQUI + * @tc.author: jinwuwen + */ +HWTEST_F(TransformCreatorTest, TransformCreator004, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of transform component with a scale operation. + */ + const std::string content = "" + "{ " + " \"className\": \"Transform\", " + " \"transform\": \"scale\", " + " \"scaleValue\": 1.5, " + " \"parameter\": { " + " \"px\": 2, " + " \"py\": 0.5, " + " \"pz\": 1 " + " }, " + " \"child\": { " + " \"className\": \"Text\", " + " \"value\": \"Hi Ace\" " + " } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get transform component. + * @tc.expected: step2. properties and child are set correctly. + */ + const auto dslBuf = reinterpret_cast(content.c_str()); + size_t dslLen = content.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component != nullptr); + RefPtr transform = AceType::DynamicCast(component); + ASSERT_TRUE(transform != nullptr); + RefPtr text = AceType::DynamicCast(transform->GetChild()); + ASSERT_TRUE(text != nullptr); + ASSERT_TRUE(text->GetData() == TEXT_VALUE); + Matrix4 transformMatrix = transform->GetTransform(); + ASSERT_TRUE(transformMatrix == Matrix4::CreateScale(2.0f, 0.5f, 1.0f)); +} + +/** + * @tc.name: TransformCreator005 + * @tc.desc: Verify TransformCreator can create transform component with a scale operation. + * @tc.type: FUNC + * @tc.require: AR000DAQUI + * @tc.author: jinwuwen + */ +HWTEST_F(TransformCreatorTest, TransformCreator005, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string of transform component with a scale operation. + */ + const std::string content = "" + "{ " + " \"className\": \"Transform\", " + " \"transform\": \"scale\", " + " \"scaleValue\": 1.5, " + " \"child\": { " + " \"className\": \"Text\", " + " \"value\": \"Hi Ace\" " + " } " + "}"; + + /** + * @tc.steps: step2. call CreateFromJson interface and get transform component. + * @tc.expected: step2. properties and child are set correctly. + */ + const auto dslBuf = reinterpret_cast(content.c_str()); + size_t dslLen = content.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + ASSERT_TRUE(component != nullptr); + RefPtr transform = AceType::DynamicCast(component); + ASSERT_TRUE(transform != nullptr); + RefPtr text = AceType::DynamicCast(transform->GetChild()); + ASSERT_TRUE(text != nullptr); + ASSERT_TRUE(text->GetData() == TEXT_VALUE); + Matrix4 transformMatrix = transform->GetTransform(); + ASSERT_TRUE(transformMatrix == Matrix4::CreateScale(1.5f, 1.5f, 1.0f)); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/transition/BUILD.gn b/frameworks/core/components/test/unittest/transition/BUILD.gn new file mode 100644 index 00000000..f3d20ea0 --- /dev/null +++ b/frameworks/core/components/test/unittest/transition/BUILD.gn @@ -0,0 +1,308 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +if (is_standard_system) { + module_output_path = "ace_engine_standard/frameworkbasicability/transition" +} + +common_mock_files = [ + "$ace_root/frameworks/core/components/test/unittest/mock/render_mock.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/transform_mock.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/transition_mock.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/overlay_mock.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/semi_modal_mock.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/event_report_mock.cpp", + "transition_test_utils.cpp", +] + +common_module_files = [ + # animation + "$ace_root/frameworks/core/animation/animator.cpp", + "$ace_root/frameworks/core/animation/friction_motion.cpp", + "$ace_root/frameworks/core/animation/scheduler.cpp", + "$ace_root/frameworks/core/animation/cubic_curve.cpp", + "$ace_root/frameworks/core/animation/anticipate_curve.cpp", + "$ace_root/frameworks/core/animation/curves.cpp", + "$ace_root/frameworks/core/animation/shared_transition_controller.cpp", + "$ace_root/frameworks/core/animation/shared_transition_effect.cpp", + "$ace_root/frameworks/core/animation/spring_animation.cpp", + "$ace_root/frameworks/core/animation/spring_model.cpp", + "$ace_root/frameworks/core/animation/spring_motion.cpp", + + # base + "$ace_root/frameworks/base/log/ace_trace.cpp", + "$ace_root/frameworks/base/json/json_util.cpp", + "$ace_root/frameworks/base/utils/base_id.cpp", + "$ace_root/frameworks/base/thread/background_task_executor.cpp", + "$ace_root/frameworks/base/geometry/matrix4.cpp", + "$ace_root/frameworks/base/log/dump_log.cpp", + + # common + "$ace_root/frameworks/core/common/ace_engine.cpp", + "$ace_root/frameworks/core/common/event_manager.cpp", + "$ace_root/frameworks/core/common/font_manager.cpp", + "$ace_root/frameworks/core/pipeline/pipeline_context.cpp", + "$ace_root/frameworks/core/common/vibrator/vibrator_proxy.cpp", + "$ace_root/frameworks/core/components/test/json/json_frontend.cpp", + "$ace_root/frameworks/core/common/window.cpp", + + # components + "$ace_root/frameworks/core/pipeline/base/component.cpp", + "$ace_root/frameworks/core/components/root/root_component.cpp", + "$ace_root/frameworks/core/components/display/display_component.cpp", + "$ace_root/frameworks/core/components/page/page_component.cpp", + "$ace_root/frameworks/core/pipeline/base/composed_component.cpp", + "$ace_root/frameworks/core/components/clip/clip_component.cpp", + "$ace_root/frameworks/core/components/box/box_component.cpp", + "$ace_root/frameworks/core/components/transform/transform_component.cpp", + "$ace_root/frameworks/core/components/tween/tween_component.cpp", + "$ace_root/frameworks/core/components/transition/transition_component.cpp", + "$ace_root/frameworks/core/components/shared_transition/shared_transition_component.cpp", + "$ace_root/frameworks/core/components/drop_filter/drop_filter_component.cpp", + "$ace_root/frameworks/core/components/flex/flex_component.h", + + # elements + "$ace_root/frameworks/core/pipeline/base/element.cpp", + "$ace_root/frameworks/core/pipeline/base/sole_child_element.cpp", + "$ace_root/frameworks/core/pipeline/base/component_group_element.cpp", + "$ace_root/frameworks/core/pipeline/base/composed_element.cpp", + "$ace_root/frameworks/core/pipeline/base/render_element.cpp", + "$ace_root/frameworks/core/components/stage/stage_element.cpp", + "$ace_root/frameworks/core/components/root/root_element.cpp", + "$ace_root/frameworks/core/components/page/page_element.cpp", + "$ace_root/frameworks/core/components/tween/tween_element.cpp", + "$ace_root/frameworks/core/components/stack/stack_element.cpp", + "$ace_root/frameworks/core/components/display/display_element.cpp", + "$ace_root/frameworks/core/components/transform/transform_element.cpp", + "$ace_root/frameworks/core/components/transition/transition_element.cpp", + "$ace_root/frameworks/core/components/page_transition/page_transition_element.cpp", + "$ace_root/frameworks/core/components/shared_transition/shared_transition_element.cpp", + "$ace_root/frameworks/core/components/overlay/overlay_element.cpp", + "$ace_root/frameworks/core/components/semi_modal/semi_modal_element.cpp", + "$ace_root/frameworks/core/components/dialog_modal/dialog_modal_element.cpp", + "$ace_root/frameworks/core/components/flex/flex_element.cpp", + "$ace_root/frameworks/core/components/bubble/bubble_element.cpp", + + # event + "$ace_root/frameworks/core/event/back_end_event_manager.cpp", + "$ace_root/frameworks/core/event/multimodal/multimodal_manager.cpp", + "$ace_root/frameworks/core/event/multimodal/multimodal_scene.cpp", + + # focus + "$ace_root/frameworks/core/focus/focus_node.cpp", + "$ace_root/frameworks/core/common/focus_animation_manager.cpp", + + # gestures + "$ace_root/frameworks/core/gestures/velocity_tracker.cpp", + "$ace_root/frameworks/core/gestures/gesture_recognizer.cpp", + "$ace_root/frameworks/core/gestures/gesture_referee.cpp", + "$ace_root/frameworks/core/gestures/drag_recognizer.cpp", + + # layout + "$ace_root/frameworks/core/components/common/layout/grid_column_info.cpp", + "$ace_root/frameworks/core/components/common/layout/grid_container_info.cpp", + "$ace_root/frameworks/core/components/common/layout/grid_system_manager.cpp", + + # image + "$ace_root/frameworks/core/image/image_cache.cpp", + + # rendering + "$ace_root/frameworks/core/pipeline/base/render_node.cpp", + "$ace_root/frameworks/core/components/root/render_root.cpp", + "$ace_root/frameworks/core/components/stack/render_stack.cpp", + "$ace_root/frameworks/core/components/stage/render_stage.cpp", + "$ace_root/frameworks/core/components/display/render_display.cpp", + "$ace_root/frameworks/core/components/box/render_box_base.cpp", + "$ace_root/frameworks/core/components/box/render_box.cpp", + "$ace_root/frameworks/core/components/clip/render_clip.cpp", + "$ace_root/frameworks/core/components/focus_animation/render_focus_animation.cpp", + "$ace_root/frameworks/core/components/drop_filter/render_drop_filter.cpp", + "$ace_root/frameworks/core/components/positioned/render_positioned.cpp", + "$ace_root/frameworks/core/components/proxy/render_proxy.cpp", + "$ace_root/frameworks/core/components/refresh/render_refresh.cpp", + "$ace_root/frameworks/core/components/scroll/render_scroll.cpp", + "$ace_root/frameworks/core/components/scroll/scroll_bar_controller.cpp", + "$ace_root/frameworks/core/components/scroll/render_single_child_scroll.cpp", + "$ace_root/frameworks/core/components/scroll/render_multi_child_scroll.cpp", + "$ace_root/frameworks/core/components/semi_modal/render_semi_modal.cpp", + "$ace_root/frameworks/core/components/drag_bar/render_drag_bar.cpp", + "$ace_root/frameworks/core/components/dialog_modal/render_dialog_modal.cpp", + "$ace_root/frameworks/core/components/flex/render_flex.cpp", + "$ace_root/frameworks/core/components/bubble/render_bubble.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/mock_flutter_font_manager.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/mock_render_node_factory.cpp", + + # theme + "$ace_root/frameworks/core/components/theme/app_theme.cpp", + "$ace_root/frameworks/core/components/theme/theme_attributes.cpp", + "$ace_root/frameworks/core/components/theme/theme_constants.cpp", + "$root_out_dir/ace/framework/core/components/theme/theme_constants_default.cpp", + "$ace_root/frameworks/core/components/theme/theme_manager.cpp", + "$ace_root/frameworks/core/components/theme/theme_utils.cpp", + + # others + "$ace_root/frameworks/core/components/common/properties/alignment.cpp", + "$ace_root/frameworks/core/components/common/properties/color.cpp", + "$ace_root/frameworks/core/components/common/properties/edge.cpp", + "$ace_root/frameworks/core/components/common/properties/border.cpp", + "$ace_root/frameworks/core/components/common/properties/border_edge.cpp", + "$ace_root/frameworks/core/components/common/properties/page_transition_option.cpp", + "$ace_root/frameworks/core/components/common/properties/decoration.cpp", + "$ace_root/frameworks/core/components/common/properties/scroll_bar.cpp", + "$ace_root/frameworks/core/components/common/properties/text_style.cpp", + "$ace_root/frameworks/core/mock/mock_ace_application_info.cpp", + + # add secure c API + "//utils/native/base/src/securec/strcpy_s.c", + "//utils/native/base/src/securec/vsnprintf_s.c", + "//utils/native/base/src/securec/securecutil.c", + "//utils/native/base/src/securec/secureprintoutput_a.c", +] + +ohos_unittest("TransitionElementTest") { + module_out_path = module_output_path + + sources = [ "transition_element_test.cpp" ] + sources += common_module_files + common_mock_files + + # add sources only needed by wearable like watch. + if (is_wearable_product) { + sources += [ "$root_out_dir/ace/framework/core/components/theme/theme_constants_watch.cpp" ] + } + + # add sources needed by phone and TV. wearable like watch do not need them + if (!is_wearable_product) { + sources += [ + # theme + "$root_out_dir/ace/framework/core/components/theme/theme_constants_tv.cpp", + ] + } + + configs = [ + "$ace_root/frameworks/base:ace_base_config", + "$ace_root:ace_test_config", + ":config_transition_element_test", + "$flutter_root:flutter_config", + "//third_party/cJSON:cJSON_config", + ] + + deps = [ + "$ace_root:third_party_cjson", + "$ace_root/frameworks/core/components/theme:build_theme_code", + "//third_party/googletest:gtest_main", + "//third_party/zlib:libz", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + external_deps = [ + "appexecfwk_standard:libeventhandler", + "bytrace_standard:bytrace_core", + "hiviewdfx_hilog_native:libhilog", + "ipc:ipc_core", + "startup_l2:syspara", + ] + configs += [ "//base/startup/syspara_lite/interfaces/innerkits/native/syspara:syspara_config" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } + + sources += [ + "$ace_root/adapter/common/cpp/ace_trace.cpp", + "$ace_root/adapter/common/cpp/file_asset_provider.cpp", + "$ace_root/adapter/common/cpp/flutter_task_executor.cpp", + "$ace_root/adapter/common/cpp/thread_util.cpp", + "$ace_root/adapter/ohos/osal/ace_trace.cpp", + "$ace_root/adapter/ohos/osal/log_wrapper.cpp", + ] +} + +ohos_unittest("SharedTransitionElementTest") { + module_out_path = module_output_path + + sources = [ "shared_transition_element_test.cpp" ] + sources += common_module_files + common_mock_files + + # add sources only needed by wearable like watch. + if (is_wearable_product) { + sources += [ "$root_out_dir/ace/framework/core/components/theme/theme_constants_watch.cpp" ] + } + + # add sources needed by phone and TV. wearable like watch do not need them + if (!is_wearable_product) { + sources += [ + # theme + "$root_out_dir/ace/framework/core/components/theme/theme_constants_tv.cpp", + ] + } + + configs = [ + "$ace_root/frameworks/base:ace_base_config", + "$ace_root:ace_test_config", + ":config_transition_element_test", + "$flutter_root:flutter_config", + "//third_party/cJSON:cJSON_config", + ] + + deps = [ + "$ace_root:third_party_cjson", + "$ace_root/frameworks/core/components/theme:build_theme_code", + "//third_party/googletest:gtest_main", + "//third_party/zlib:libz", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + external_deps = [ + "appexecfwk_standard:libeventhandler", + "bytrace_standard:bytrace_core", + "hiviewdfx_hilog_native:libhilog", + "ipc:ipc_core", + "startup_l2:syspara", + ] + configs += [ "//base/startup/syspara_lite/interfaces/innerkits/native/syspara:syspara_config" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } + + sources += [ + "$ace_root/adapter/common/cpp/ace_trace.cpp", + "$ace_root/adapter/common/cpp/file_asset_provider.cpp", + "$ace_root/adapter/common/cpp/flutter_task_executor.cpp", + "$ace_root/adapter/common/cpp/thread_util.cpp", + "$ace_root/adapter/ohos/osal/ace_trace.cpp", + "$ace_root/adapter/ohos/osal/log_wrapper.cpp", + "$ace_root/frameworks/core/accessibility/accessibility_node.cpp", + ] +} + +config("config_transition_element_test") { + visibility = [ ":*" ] + include_dirs = [ + "//utils/native/base/include", + "$ace_root", + ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ + ":SharedTransitionElementTest", + ":TransitionElementTest", + ] +} diff --git a/frameworks/core/components/test/unittest/transition/shared_transition_element_test.cpp b/frameworks/core/components/test/unittest/transition/shared_transition_element_test.cpp new file mode 100644 index 00000000..2529615a --- /dev/null +++ b/frameworks/core/components/test/unittest/transition/shared_transition_element_test.cpp @@ -0,0 +1,615 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "adapter/ohos/osal/fake_asset_manager.h" +#include "adapter/ohos/osal/fake_task_executor.h" +#include "base/log/log.h" +#include "base/utils/system_properties.h" +#include "core/animation/card_transition_controller.h" +#include "core/animation/curve_animation.h" +#include "core/components/box/box_component.h" +#include "core/components/drop_filter/drop_filter_component.h" +#include "core/components/flex/flex_component.h" +#include "core/components/page/page_element.h" +#include "core/components/positioned/positioned_element.h" +#include "core/components/test/json/json_frontend.h" +#include "core/components/test/unittest/mock/overlay_mock.h" +#include "core/components/test/unittest/mock/render_mock.h" +#include "core/components/test/unittest/mock/transform_mock.h" +#include "core/components/test/unittest/mock/transition_mock.h" +#include "core/components/test/unittest/mock/window_mock.h" +#include "core/components/transition/transition_component.h" +#include "core/components/tween/tween_element.h" +#include "core/mock/mock_resource_register.h" +#include "core/pipeline/pipeline_context.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { + +CardTransitionController::CardTransitionController(const WeakPtr& context) {}; + +void CardTransitionController::RegisterTransitionListener() {}; + +RRect CardTransitionController::GetCardRect(const ComposeId& composeId) const +{ + return RRect(); +} + +namespace { + +constexpr float TRANSITION_EPSILON = 0.01f; +constexpr int32_t NANOSECOND_TO_MILLISECOND = 1000000; +constexpr int32_t FRAME_TIME_IN_MILLISECOND = 200; +constexpr int32_t TEST_SURFACE_WIDTH = 1080; +constexpr int32_t TEST_SURFACE_HEIGHT = 1920; +RefPtr g_dropFilter; +int32_t g_pageId = 0; // for alloc page id. +int32_t g_nodeId = 0; // for alloc node id. +double g_componentWidth = 0.0; +double g_componentHeight = 0.0; +using CreatePushComponent = std::function(void)>; +using ConfigPushTransition = std::function&)>; +CreatePushComponent g_createPushComponent; +ConfigPushTransition g_configPushTransition; +SharedTransitionEffectType g_effectType = SharedTransitionEffectType::SHARED_EFFECT_EXCHANGE; +const char SHARE_ID_EXCHANGE[] = "share_id_exchange"; +const char SHARE_ID_EXCHANGE_OTHER[] = "share_id_exchange_other"; +const char SHARE_ID_STATIC[] = "share_id_static"; + +RefPtr GetSharedSuitFromPositioned(RefPtr element) +{ + auto positioned = AceType::DynamicCast(element); + if (!positioned) { + LOGE("Get Shared Suit failed. positioned is null."); + return nullptr; + } + auto tweenElement = AceType::DynamicCast(positioned->GetFirstChild()); + if (!tweenElement) { + LOGE("Get Shared Suit failed. tween element is null."); + return nullptr; + } + return AceType::DynamicCast(tweenElement->GetContentRender()); +} + +} // namespace + +class SharedTransitionElementTest : public testing::Test { +public: + static void SetUpTestCase() {} + + static void TearDownTestCase() {} + + void SetUp() override + { + const auto& info = testing::UnitTest::GetInstance()->current_test_info(); + GTEST_LOG_(INFO) << info->test_case_name() << " SetUpTestCase " << info->name(); + + MockOverlayElement::SetMockHook([this](const RefPtr& overlay) { overlay_ = overlay; }); + SystemProperties::InitDeviceType(DeviceType::TV); + g_createPushComponent = CreatePushPage; + g_pageId = 0; + g_nodeId = 0; + g_componentWidth = TEST_SURFACE_WIDTH / 2.0; + g_componentHeight = TEST_SURFACE_HEIGHT / 2.0; + g_effectType = SharedTransitionEffectType::SHARED_EFFECT_EXCHANGE; + } + + void TearDown() override {} + + void InitEnvAndPushFirstComponent() + { + std::unique_ptr platformWindow = TweenTestUtils::CreatePlatformWindow(); + platformWindowRaw_ = reinterpret_cast(platformWindow.get()); + auto window = TweenTestUtils::CreateWindow(std::move(platformWindow)); + auto taskExecutor = AceType::MakeRefPtr(); + auto assetManager = Referenced::MakeRefPtr(); + auto resRegister = Referenced::MakeRefPtr(); + RefPtr frontend = Frontend::CreateDefault(); + context_ = AceType::MakeRefPtr( + std::move(window), taskExecutor, assetManager, resRegister, frontend, 0); + context_->SetTimeProvider( + [this] { return this->platformWindowRaw_->GetCurrentTimestampNano() + NANOSECOND_TO_MILLISECOND * 10; }); + EXPECT_TRUE(g_createPushComponent); + auto pushPage = AceType::DynamicCast(g_createPushComponent()); + EXPECT_TRUE(pushPage); + context_->SetupRootElement(); + EXPECT_TRUE(context_->CanPushPage()); + context_->PushPage(pushPage); + context_->OnSurfaceChanged(TEST_SURFACE_WIDTH, TEST_SURFACE_HEIGHT); + + platformWindowRaw_->SetNanoFrameTime(NANOSECOND_TO_MILLISECOND * frameTimeMs_); + } + + void CheckSharedSuitWithUIStandardBecomeSmaller(RefPtr sharedSuitRender) + { + /** + * @tc.steps: step1. trigger frames to make shared transition work. + * @tc.expected: step1. check height for shared suit render + */ + EXPECT_NEAR(TEST_SURFACE_HEIGHT / 2.0, sharedSuitRender->GetHeight(), TRANSITION_EPSILON); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(800.16, sharedSuitRender->GetHeight(), TRANSITION_EPSILON); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(622.06, sharedSuitRender->GetHeight(), TRANSITION_EPSILON); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(532.28, sharedSuitRender->GetHeight(), TRANSITION_EPSILON); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(491.39, sharedSuitRender->GetHeight(), TRANSITION_EPSILON); + + // Last frame when push page, render node put back to source page, and height recovers to original height. + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(TEST_SURFACE_HEIGHT / 2.0f, sharedSuitRender->GetHeight(), TRANSITION_EPSILON); + } + + void CheckSharedSuitWithUIStandardBecomeBigger(RefPtr sharedSuitRender) + { + /** + * @tc.steps: step1. trigger frames to make shared transition work. + * @tc.expected: step1. check width for shared suit render + */ + EXPECT_NEAR(TEST_SURFACE_WIDTH / 4.0f, sharedSuitRender->GetWidth(), TRANSITION_EPSILON); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(359.90, sharedSuitRender->GetWidth(), TRANSITION_EPSILON); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(460.08, sharedSuitRender->GetWidth(), TRANSITION_EPSILON); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(510.59, sharedSuitRender->GetWidth(), TRANSITION_EPSILON); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(533.59, sharedSuitRender->GetWidth(), TRANSITION_EPSILON); + + // Last frame when pop page, render node put back to source page, and height recovers to original height. + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(TEST_SURFACE_WIDTH / 4.0, sharedSuitRender->GetWidth(), TRANSITION_EPSILON); + } + + void CheckSharedSuitWithUIStandardDynamicallyShareId1(RefPtr sharedSuitRender) const + { + /** + * @tc.steps: step1. trigger frames to make shared transition work. + * @tc.expected: step1. check height for shared suit render + */ + EXPECT_NEAR(50.0, sharedSuitRender->GetHeight(), TRANSITION_EPSILON); + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(66.65, sharedSuitRender->GetHeight(), TRANSITION_EPSILON); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(85.20, sharedSuitRender->GetHeight(), TRANSITION_EPSILON); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(94.55, sharedSuitRender->GetHeight(), TRANSITION_EPSILON); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(98.81, sharedSuitRender->GetHeight(), TRANSITION_EPSILON); + + // Last frame when push page, render node put back to source page, and height recovers to original height. + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(50.0, sharedSuitRender->GetHeight(), TRANSITION_EPSILON); + } + + void CheckSharedSuitWithUIStandardDynamicallyShareId2(RefPtr sharedSuitRender) const + { + /** + * @tc.steps: step1. trigger frames to make shared transition work. + * @tc.expected: step1. check height for shared suit render + */ + EXPECT_NEAR(50.0, sharedSuitRender->GetHeight(), TRANSITION_EPSILON); + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(99.95, sharedSuitRender->GetHeight(), TRANSITION_EPSILON); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(155.60, sharedSuitRender->GetHeight(), TRANSITION_EPSILON); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(183.66, sharedSuitRender->GetHeight(), TRANSITION_EPSILON); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(196.44, sharedSuitRender->GetHeight(), TRANSITION_EPSILON); + + // Last frame when push page, render node put back to source page, and height recovers to original height. + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(50.0, sharedSuitRender->GetHeight(), TRANSITION_EPSILON); + } + + void CheckSharedSuitWithUIStandardStatic(RefPtr sharedSuitRender) + { + // Second Page width equals quarter of TEST_SURFACE_WIDTH. + EXPECT_NEAR(TEST_SURFACE_WIDTH / 4.0, sharedSuitRender->GetWidth(), TRANSITION_EPSILON); + auto width = sharedSuitRender->GetWidth(); + for (int32_t i = 0; i < 5; i++) { + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(width, sharedSuitRender->GetWidth(), TRANSITION_EPSILON); + } + } + + static RefPtr CreatePushPage() + { + // make content. + auto boxComponent = AceType::MakeRefPtr(); + boxComponent->SetWidth(g_componentWidth); + boxComponent->SetHeight(g_componentHeight); + RefPtr sharedComponent; + if (g_effectType == SharedTransitionEffectType::SHARED_EFFECT_STATIC) { + sharedComponent = AceType::MakeRefPtr( + "TestCase" + std::to_string(g_nodeId++), "shared component", SHARE_ID_STATIC); + auto effect = SharedTransitionEffect::GetSharedTransitionEffect(g_effectType, SHARE_ID_STATIC); + sharedComponent->SetEffect(effect); + } else { + sharedComponent = AceType::MakeRefPtr( + "TestCase" + std::to_string(g_nodeId++), "shared component", SHARE_ID_EXCHANGE); + } + sharedComponent->SetChild(boxComponent); + // make page. + auto transitionComponent = AceType::MakeRefPtr(); + transitionComponent->SetContent(sharedComponent); + if (g_configPushTransition) { + g_configPushTransition(transitionComponent); + } + auto pageComponent = AceType::MakeRefPtr(++g_pageId, transitionComponent); + return AceType::DynamicCast(pageComponent); + } + + static RefPtr CreatePushPageComponent(std::string shareId1, std::string shareId2) + { + // make content. + auto sharedComponent1 = CreateSharedComponent(200.0, 200.0, shareId1); + auto sharedComponent2 = CreateSharedComponent(100.0, 100.0, shareId2); + std::list> children; + children.emplace_back(sharedComponent1); + children.emplace_back(sharedComponent2); + RefPtr flexComponent = + AceType::MakeRefPtr(FlexAlign::FLEX_START, FlexAlign::FLEX_START, children); + + // make page. + auto transitionComponent = AceType::MakeRefPtr(); + transitionComponent->SetContent(flexComponent); + if (g_configPushTransition) { + g_configPushTransition(transitionComponent); + } + auto pageComponent = AceType::MakeRefPtr(++g_pageId, transitionComponent); + return AceType::DynamicCast(pageComponent); + } + + static RefPtr CreateSharedComponent(double width, double height, std::string shareId) + { + // make content. + auto boxComponent = AceType::MakeRefPtr(); + boxComponent->SetWidth(width); + boxComponent->SetHeight(height); + RefPtr sharedComponent; + if (g_effectType == SharedTransitionEffectType::SHARED_EFFECT_STATIC) { + sharedComponent = AceType::MakeRefPtr( + "TestCase" + std::to_string(g_nodeId++), "shared component", shareId); + auto effect = SharedTransitionEffect::GetSharedTransitionEffect(g_effectType, shareId); + sharedComponent->SetEffect(effect); + } else { + sharedComponent = AceType::MakeRefPtr( + "TestCase" + std::to_string(g_nodeId++), "shared component", shareId); + } + sharedComponent->SetChild(boxComponent); + return AceType::DynamicCast(sharedComponent); + } + + static RefPtr CreatePushPageWithBlur() + { + // make content. + auto boxComponent = AceType::MakeRefPtr(); + boxComponent->SetWidth(g_componentWidth); + boxComponent->SetHeight(g_componentHeight); + auto dropFilterComponent = AceType::MakeRefPtr(boxComponent, 2.5, 1.5); + // make page. + auto transitionComponent = AceType::MakeRefPtr(); + transitionComponent->SetContent(dropFilterComponent); + if (g_configPushTransition) { + g_configPushTransition(transitionComponent); + } + auto pageComponent = AceType::MakeRefPtr(++g_pageId, transitionComponent); + return AceType::DynamicCast(pageComponent); + } + +protected: + RefPtr context_; + RefPtr overlay_; + uint32_t frameTimeMs_ = FRAME_TIME_IN_MILLISECOND; + MockPlatformWindow* platformWindowRaw_ = nullptr; +}; + +/** + * @tc.name: SharedTransitionTest001 + * @tc.desc: test shared transition with exchange effect when push page. use default page transition parameters. + * @tc.type: FUNC + * @tc.require: AR000DQ2TU + * @tc.author: zhouzebin + */ +HWTEST_F(SharedTransitionElementTest, SharedTransitionTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. init tween option and push first page + */ + InitEnvAndPushFirstComponent(); + EXPECT_TRUE(!!overlay_); + + /** + * @tc.steps: step2. push the second page. + */ + g_componentWidth = g_componentWidth / 2.0; // 1080 / 4 = 270 + g_componentHeight = g_componentHeight / 2.0; // 1920 / 4 = 480 + auto page = AceType::DynamicCast(g_createPushComponent()); + context_->PushPage(page); + /** + * @tc.steps: step3. trigger frame to make shared transition work. + * @tc.expected: step3. check passenger in overlay + */ + LOGD("trigger frame for stage's transition build and prepare animation"); + platformWindowRaw_->TriggerOneFrame(); + auto& children = overlay_->GetChildren(); + EXPECT_EQ(2UL, children.size()); // Stage + SharedElement. + auto sharedElement = children.back(); + auto sharedSuitRender = GetSharedSuitFromPositioned(sharedElement); + CheckSharedSuitWithUIStandardBecomeSmaller(sharedSuitRender); + /** + * @tc.steps: step4. trigger last frame to make transition done. + * @tc.expected: step4. no passenger left in overlay. + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(1UL, children.size()); // Stage. +} + +/** + * @tc.name: SharedTransitionTest002 + * @tc.desc: test shared transition with exchange effect when pop page. use default page transition parameters. + * @tc.type: FUNC + * @tc.require: AR000DQ200 + * @tc.author: zhouzebin + */ +HWTEST_F(SharedTransitionElementTest, SharedTransitionTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. init tween option and push first page + */ + InitEnvAndPushFirstComponent(); + EXPECT_TRUE(!!overlay_); + + /** + * @tc.steps: step2. push the second page. + */ + g_componentWidth = g_componentWidth / 2.0; // 1080 / 4 = 270 + g_componentHeight = g_componentHeight / 2.0; // 1920 / 4 = 480 + auto page = AceType::DynamicCast(g_createPushComponent()); + context_->PushPage(page); + platformWindowRaw_->TriggerFrames(6); + + /** + * @tc.steps: step3. pop page and trigger frame to make shared transition work. + * @tc.expected: step3. check passenger in overlay + */ + context_->PopPage(); + LOGD("trigger frame for stage's transition build and prepare animation"); + platformWindowRaw_->TriggerOneFrame(); + auto& children = overlay_->GetChildren(); + EXPECT_EQ(2UL, children.size()); // Stage + SharedElement. + auto sharedElement = children.back(); + auto sharedSuitRender = GetSharedSuitFromPositioned(sharedElement); + CheckSharedSuitWithUIStandardBecomeBigger(sharedSuitRender); + /** + * @tc.steps: step4. trigger last frame to make transition done. + * @tc.expected: step4. no passenger left in overlay. + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(1UL, children.size()); // Stage. +} + +/** + * @tc.name: SharedTransitionTest003 + * @tc.desc: test shared transition with static effect when push page. use default page transition parameters. + * @tc.type: FUNC + * @tc.require: AR000DQ201 + * @tc.author: zhouzebin + */ +HWTEST_F(SharedTransitionElementTest, SharedTransitionTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. init tween option and push first page + */ + InitEnvAndPushFirstComponent(); + EXPECT_TRUE(!!overlay_); + + /** + * @tc.steps: step2. push the second page. + */ + g_componentWidth = g_componentWidth / 2.0; // 1080 / 4 = 270 + g_componentHeight = g_componentHeight / 2.0; // 1920 / 4 = 480 + g_effectType = SharedTransitionEffectType::SHARED_EFFECT_STATIC; + auto page = AceType::DynamicCast(g_createPushComponent()); + context_->PushPage(page); + /** + * @tc.steps: step3. trigger frame to make shared transition work. + * @tc.expected: step3. check passenger in overlay + */ + LOGD("trigger frame for stage's transition build and prepare animation"); + platformWindowRaw_->TriggerOneFrame(); + auto& children = overlay_->GetChildren(); + EXPECT_EQ(2UL, children.size()); // Stage + SharedElement. + auto sharedElement = children.back(); + auto sharedSuitRender = GetSharedSuitFromPositioned(sharedElement); + CheckSharedSuitWithUIStandardStatic(sharedSuitRender); + /** + * @tc.steps: step4. trigger last frame to make transition done. + * @tc.expected: step4. no passenger left in overlay. + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(1UL, children.size()); // Stage. +} + +/** + * @tc.name: SharedTransitionTest004 + * @tc.desc: test shared transition with static effect when pop page. (no effect applied) + * @tc.type: FUNC + * @tc.require: AR000DQ201 + * @tc.author: zhouzebin + */ +HWTEST_F(SharedTransitionElementTest, SharedTransitionTest004, TestSize.Level1) +{ + /** + * @tc.steps: step1. init tween option and push first page + */ + InitEnvAndPushFirstComponent(); + EXPECT_TRUE(!!overlay_); + + /** + * @tc.steps: step2. push the second page. + */ + g_componentWidth = g_componentWidth / 2.0; // 1080 / 4 = 270 + g_componentHeight = g_componentHeight / 2.0; // 1920 / 4 = 480 + g_effectType = SharedTransitionEffectType::SHARED_EFFECT_STATIC; + auto page = AceType::DynamicCast(g_createPushComponent()); + context_->PushPage(page); + platformWindowRaw_->TriggerFrames(6); + /** + * @tc.steps: step3. trigger frame to make shared transition work. + * @tc.expected: step3. no passenger in overlay + */ + LOGD("trigger frame for stage's transition build and prepare animation"); + context_->PopPage(); + auto& children = overlay_->GetChildren(); + EXPECT_EQ(1UL, children.size()); // Stage. + /** + * @tc.steps: step4. trigger last frame to make transition done. + * @tc.expected: step4. no passenger left in overlay. + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(1UL, children.size()); // Stage. +} + +/** + * @tc.name: OneShotTransitionBlurTest001 + * @tc.desc: test transition with blur component. + * @tc.type: FUNC + * @tc.require: AR000DQ205 + * @tc.author: zhouzebin + */ +HWTEST_F(SharedTransitionElementTest, OneShotTransitionBlurTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. init tween option and push first page + * @tc.expected: step1. check sigmaX/Y value in render node. + */ + g_createPushComponent = CreatePushPageWithBlur; + MockRenderDropFilter::SetMockHook( + [](const RefPtr& dropFilter) { g_dropFilter = dropFilter; }); + InitEnvAndPushFirstComponent(); + EXPECT_TRUE(g_dropFilter); + EXPECT_NEAR(g_dropFilter->GetSigmaX(), 2.5, TRANSITION_EPSILON); + EXPECT_NEAR(g_dropFilter->GetSigmaY(), 1.5, TRANSITION_EPSILON); +} + +/** + * @tc.name: SharedTransitionTest005 + * @tc.desc: test dynamically modify shareId in shared transition with exchange effect when push page. + * use default page transition parameters. + * @tc.type: FUNC + * @tc.require: AR000F3CAC + * @tc.author: chenlien + */ +HWTEST_F(SharedTransitionElementTest, SharedTransitionTest005, TestSize.Level1) +{ + /** + * @tc.steps: step1. init tween option and push first page + */ + g_componentWidth = 50.0; + g_componentHeight = 50.0; + InitEnvAndPushFirstComponent(); + EXPECT_TRUE(!!overlay_); + + /** + * @tc.steps: step2. push the second page. + */ + auto page = + AceType::DynamicCast(CreatePushPageComponent(SHARE_ID_EXCHANGE_OTHER, SHARE_ID_EXCHANGE)); + context_->PushPage(page); + /** + * @tc.steps: step3. trigger frame to make shared transition work. + * @tc.expected: step3. check passenger in overlay + */ + LOGD("trigger frame for stage's transition build and prepare animation"); + platformWindowRaw_->TriggerOneFrame(); + auto& children = overlay_->GetChildren(); + EXPECT_EQ(2UL, children.size()); // Stage + SharedElement. + auto sharedElement = children.back(); + auto sharedSuitRender = GetSharedSuitFromPositioned(sharedElement); + CheckSharedSuitWithUIStandardDynamicallyShareId1(sharedSuitRender); + /** + * @tc.steps: step4. trigger last frame to make transition done. + * @tc.expected: step4. no passenger left in overlay. + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(1UL, children.size()); // Stage. +} + +/** + * @tc.name: SharedTransitionTest006 + * @tc.desc: test dynamically modify shareId in shared transition with exchange effect when push page. + * use default page transition parameters. + * @tc.type: FUNC + * @tc.require: AR000F3CAC + * @tc.author: chenlien + */ +HWTEST_F(SharedTransitionElementTest, SharedTransitionTest006, TestSize.Level1) +{ + /** + * @tc.steps: step1. init tween option and push first page + */ + g_componentWidth = 50.0; + g_componentHeight = 50.0; + InitEnvAndPushFirstComponent(); + EXPECT_TRUE(!!overlay_); + + /** + * @tc.steps: step2. push the second page. + */ + auto page = + AceType::DynamicCast(CreatePushPageComponent(SHARE_ID_EXCHANGE, SHARE_ID_EXCHANGE_OTHER)); + context_->PushPage(page); + /** + * @tc.steps: step3. trigger frame to make shared transition work. + * @tc.expected: step3. check passenger in overlay + */ + LOGD("trigger frame for stage's transition build and prepare animation"); + platformWindowRaw_->TriggerOneFrame(); + auto& children = overlay_->GetChildren(); + EXPECT_EQ(2UL, children.size()); // Stage + SharedElement. + auto sharedElement = children.back(); + auto sharedSuitRender = GetSharedSuitFromPositioned(sharedElement); + CheckSharedSuitWithUIStandardDynamicallyShareId2(sharedSuitRender); + /** + * @tc.steps: step4. trigger last frame to make transition done. + * @tc.expected: step4. no passenger left in overlay. + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(1UL, children.size()); // Stage. +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/transition/transition_element_test.cpp b/frameworks/core/components/test/unittest/transition/transition_element_test.cpp new file mode 100644 index 00000000..911274e1 --- /dev/null +++ b/frameworks/core/components/test/unittest/transition/transition_element_test.cpp @@ -0,0 +1,1435 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "adapter/ohos/osal/fake_asset_manager.h" +#include "adapter/ohos/osal/fake_task_executor.h" +#include "base/log/log.h" +#include "base/utils/system_properties.h" +#include "core/animation/card_transition_controller.h" +#include "core/animation/curve_animation.h" +#include "core/components/box/box_component.h" +#include "core/components/page/page_element.h" +#include "core/components/page_transition/page_transition_component.h" +#include "core/components/stage/stage_component.h" +#include "core/components/test/json/json_frontend.h" +#include "core/components/test/unittest/mock/overlay_mock.h" +#include "core/components/test/unittest/mock/render_mock.h" +#include "core/components/test/unittest/mock/transform_mock.h" +#include "core/components/test/unittest/mock/transition_mock.h" +#include "core/components/test/unittest/mock/window_mock.h" +#include "core/components/tween/tween_element.h" +#include "core/mock/mock_resource_register.h" +#include "core/pipeline/pipeline_context.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +constexpr int32_t NANOSECOND_TO_MILLISECOND = 1000000; +constexpr int32_t FRAME_TIME_IN_MILLISECOND = 200; +constexpr int32_t TEST_SURFACE_WIDTH = 1080; +constexpr int32_t TEST_SURFACE_HEIGHT = 1920; +constexpr float TRANSITION_EPSILON = 0.01f; +const char SHARE_ID_EXCHANGE[] = "share_id_exchange"; +int32_t g_pageId = 0; // for alloc page id. +double g_componentWidth = 0.0; +double g_componentHeight = 0.0; +using CreatePushComponent = std::function(void)>; +using ConfigPushTransition = std::function&)>; +CreatePushComponent g_createPushComponent; +ConfigPushTransition g_configPushTransition; +bool g_isSeparation = false; +RRect g_rrect = RRect(); + +class TransitionRecord { +public: + void Init() + { + pageInId_ = 0; + pageOutId_ = 0; + event_ = TransitionEvent::POP_START; + eventCount_ = 0; + } + int32_t pageInId_ = 0; + int32_t pageOutId_ = 0; + TransitionEvent event_ = TransitionEvent::POP_START; + int32_t eventCount_ = 0; +}; + +TransitionRecord g_transitionRecord; + +} // namespace + +CardTransitionController::CardTransitionController(const WeakPtr& context) {}; + +void CardTransitionController::RegisterTransitionListener() {}; + +RRect CardTransitionController::GetCardRect(const ComposeId& composeId) const +{ + return g_rrect; +} + +class TransitionGroup { +public: + explicit TransitionGroup(const char* name) : name_(name) {} + ~TransitionGroup() = default; + + // only for test use. + WeakPtr transformRenderContent_; + WeakPtr transformRenderBackground_; + WeakPtr displayRenderContent_; + WeakPtr displayRenderBackground_; + WeakPtr transitionElementContent_; + WeakPtr transitionElementBackground_; + WeakPtr pageTransitionElement_; + int32_t startCounter_ = 0; + int32_t stopCounter_ = 0; + const char* name_ = nullptr; +}; + +class TransitionElementTest : public testing::Test { +public: + static void SetUpTestCase() + { + GTEST_LOG_(INFO) << "TransitionElementTest SetUpTestCase"; + } + + static void TearDownTestCase() + { + GTEST_LOG_(INFO) << "TransitionElementTest TearDownTestCase"; + } + + void SetUp() override + { + const auto& info = testing::UnitTest::GetInstance()->current_test_info(); + GTEST_LOG_(INFO) << info->test_case_name() << " SetUpTestCase " << info->name(); + deviceType_ = DeviceType::TV; + g_isSeparation = false; + SystemProperties::InitDeviceType(deviceType_); + SwitchHookToTransition(transitionA_); + g_createPushComponent = CreatePushPage; + g_pageId = 0; + g_componentWidth = TEST_SURFACE_WIDTH / 2.0; + g_componentHeight = TEST_SURFACE_HEIGHT / 2.0; + MockOverlayElement::SetMockHook([this](const RefPtr& overlay) { overlay_ = overlay; }); + g_configPushTransition = nullptr; + g_transitionRecord.Init(); + // reset transitions every test + transitionA_ = TransitionGroup("transitionA"); + transitionB_ = TransitionGroup("transitionB"); + transitionC_ = TransitionGroup("transitionC"); + } + + void TearDown() override {} + + void InitEnvAndPushFirstComponent() + { + SystemProperties::InitDeviceType(deviceType_); + std::unique_ptr platformWindow = TweenTestUtils::CreatePlatformWindow(); + platformWindowRaw_ = reinterpret_cast(platformWindow.get()); + auto window = TweenTestUtils::CreateWindow(std::move(platformWindow)); + auto taskExecutor = AceType::MakeRefPtr(); + auto assetManager = Referenced::MakeRefPtr(); + auto resRegister = Referenced::MakeRefPtr(); + RefPtr frontend = Frontend::CreateDefault(); + context_ = AceType::MakeRefPtr( + std::move(window), taskExecutor, assetManager, resRegister, frontend, 0); + context_->SetTimeProvider( + [this] { return this->platformWindowRaw_->GetCurrentTimestampNano() + NANOSECOND_TO_MILLISECOND * 10; }); + EXPECT_TRUE(g_createPushComponent); + auto pushPage = AceType::DynamicCast(g_createPushComponent()); + EXPECT_TRUE(pushPage); + context_->SetupRootElement(); + auto stageElement = context_->GetStageElement(); + ASSERT_TRUE(stageElement); + auto renderStage = stageElement->GetRenderNode(); + ASSERT_TRUE(renderStage); + RefPtr rootStage = AceType::MakeRefPtr(std::list>()); + rootStage->SetMainStackSize(MainStackSize::MAX); + renderStage->Update(rootStage); + context_->AddPageTransitionListener(PageTransitionRecorder); + EXPECT_TRUE(context_->CanPushPage()); + context_->PushPage(pushPage); + context_->OnSurfaceChanged(TEST_SURFACE_WIDTH, TEST_SURFACE_HEIGHT); + + platformWindowRaw_->SetNanoFrameTime(NANOSECOND_TO_MILLISECOND * frameTimeMs_); + } + + void InitCustomScaleTransition() + { + g_configPushTransition = [](const RefPtr& transitionComponent) { + TweenOption InOption; + auto scaleIn = AceType::MakeRefPtr>(1.0f, 6.0f, Curves::LINEAR); + InOption.SetTransformFloatAnimation(AnimationType::SCALE, scaleIn); + InOption.SetDuration(1000); + + TweenOption OutOption; + auto scaleOut = AceType::MakeRefPtr>(60.0f, 10.0f, Curves::LINEAR); + OutOption.SetTransformFloatAnimation(AnimationType::SCALE, scaleOut); + transitionComponent->SetContentTransitionOption(InOption, OutOption); + }; + InitEnvAndPushFirstComponent(); + } + + void InitCustomTranslateTransition() + { + g_configPushTransition = [](const RefPtr& transitionComponent) { + TweenOption InOption; + auto translateIn = AceType::MakeRefPtr>( + DimensionOffset(Dimension(1.0, DimensionUnit::PX), Dimension()), + DimensionOffset(Dimension(6.0, DimensionUnit::PX), Dimension()), Curves::LINEAR); + InOption.SetTranslateAnimations(AnimationType::TRANSLATE_X, translateIn); + InOption.SetDuration(1000); + + TweenOption OutOption; + auto translateOut = AceType::MakeRefPtr>( + DimensionOffset(Dimension(60.0, DimensionUnit::PX), Dimension()), + DimensionOffset(Dimension(10.0, DimensionUnit::PX), Dimension()), Curves::LINEAR); + OutOption.SetTranslateAnimations(AnimationType::TRANSLATE_X, translateOut); + transitionComponent->SetContentTransitionOption(InOption, OutOption); + }; + InitEnvAndPushFirstComponent(); + } + + void InitCardClipTransition(TransitionEvent event) + { + g_configPushTransition = [event](const RefPtr& transitionComponent) { + TweenOption InOption; + RRect cardRRect = RRect::MakeRRect(Rect(Offset(100.0, 100.0), Size(100.0, 100.0)), Radius(10.0)); + auto translateAnimationIn = AceType::MakeRefPtr>( + DimensionOffset(Offset(cardRRect.GetRect().Left(), cardRRect.GetRect().Top())), + DimensionOffset(Offset()), Curves::FRICTION); + auto heightAnimationIn = AceType::MakeRefPtr>( + cardRRect.GetRect().Height() * 600.0f / cardRRect.GetRect().Width(), 1000.0f, Curves::FRICTION); + auto scaleAnimationIn = AceType::MakeRefPtr>( + cardRRect.GetRect().Width() / 600.0f, 1.0f, Curves::FRICTION); + InOption.SetPropertyAnimationFloat(PropertyAnimatableType::PROPERTY_HEIGHT, heightAnimationIn); + InOption.SetTranslateAnimations(AnimationType::TRANSLATE, translateAnimationIn); + InOption.SetTransformFloatAnimation(AnimationType::SCALE, scaleAnimationIn); + + TweenOption OutOption; + auto translateAnimationOut = AceType::MakeRefPtr>(DimensionOffset(Offset()), + DimensionOffset(Offset(cardRRect.GetRect().Left(), cardRRect.GetRect().Top())), Curves::FRICTION); + auto heightAnimationOut = AceType::MakeRefPtr>( + 1000.0f, cardRRect.GetRect().Height() * 600.0f / cardRRect.GetRect().Width(), Curves::FRICTION); + auto scaleAnimationOut = AceType::MakeRefPtr>( + 1.0f, cardRRect.GetRect().Width() / 600.0f, Curves::FRICTION); + OutOption.SetPropertyAnimationFloat(PropertyAnimatableType::PROPERTY_HEIGHT, heightAnimationOut); + OutOption.SetTranslateAnimations(AnimationType::TRANSLATE, translateAnimationOut); + OutOption.SetTransformFloatAnimation(AnimationType::SCALE, scaleAnimationOut); + InOption.SetDuration(350); + + if (event == TransitionEvent::POP_START) { + transitionComponent->SetContentTransitionOption(OutOption, InOption); + } else { + transitionComponent->SetContentTransitionOption(InOption, OutOption); + } + }; + } + + void InitCardOpacityTransition(TransitionEvent event) + { + g_configPushTransition = [event](const RefPtr& transitionComponent) { + TweenOption InOption; + auto opacityInAnimation = AceType::MakeRefPtr>(); + auto opacityInKeyframe1 = AceType::MakeRefPtr>(0.0f, 0.0f); + auto opacityInKeyframe2 = AceType::MakeRefPtr>(0.286f, 1.0f); + auto opacityInKeyframe3 = AceType::MakeRefPtr>(1.0f, 1.0f); + opacityInKeyframe2->SetCurve(Curves::SHARP); + opacityInAnimation->AddKeyframe(opacityInKeyframe1); + opacityInAnimation->AddKeyframe(opacityInKeyframe2); + opacityInAnimation->AddKeyframe(opacityInKeyframe3); + InOption.SetOpacityAnimation(opacityInAnimation); + InOption.SetDuration(350); + TweenOption OutOption; + auto opacityOutAnimation = AceType::MakeRefPtr>(); + auto opacityOutKeyframe1 = AceType::MakeRefPtr>(0.0f, 1.0f); + auto opacityOutKeyframe2 = AceType::MakeRefPtr>(0.571f, 1.0f); + auto opacityOutKeyframe3 = AceType::MakeRefPtr>(1.0f, 0.0f); + opacityOutKeyframe3->SetCurve(Curves::SHARP); + opacityOutAnimation->AddKeyframe(opacityOutKeyframe1); + opacityOutAnimation->AddKeyframe(opacityOutKeyframe2); + opacityOutAnimation->AddKeyframe(opacityOutKeyframe3); + OutOption.SetOpacityAnimation(opacityOutAnimation); + if (event == TransitionEvent::POP_START) { + transitionComponent->SetContentTransitionOption(OutOption, InOption); + } else { + transitionComponent->SetContentTransitionOption(InOption, OutOption); + } + }; + } + + // checked for PushPageTest001 + void CheckCustomScaleTransitionFrames() + { + /** + * @tc.steps: step1. trigger frames to check transition goes right + * @tc.expected: step1. check scale value is right and transition is not stopped. + */ + float scale = 0.0f; + for (int32_t idx = 1; idx < 5; idx++) { + LOGD("trigger frame for verify transition. frame idx: %{public}d", idx); + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(VisibleType::VISIBLE, transitionB_.displayRenderContent_.Upgrade()->GetVisibleType()); + transitionB_.transformRenderContent_.Upgrade()->GetScaleSetting(scale); + EXPECT_NEAR(scale, 1.0f * (idx + 1), TRANSITION_EPSILON); + transitionA_.transformRenderContent_.Upgrade()->GetScaleSetting(scale); + EXPECT_NEAR(scale, 10.0f * (6 - idx), TRANSITION_EPSILON); + EXPECT_EQ(0, transitionA_.stopCounter_); + EXPECT_EQ(0, transitionB_.stopCounter_); + } + + /** + * @tc.steps: step2. trigger last frame to check transition is done + * @tc.expected: step2. check final scale value is right, and transition is stopped. + */ + LOGD("trigger last frame for verify transition."); + platformWindowRaw_->TriggerOneFrame(); + transitionB_.transformRenderContent_.Upgrade()->GetScaleSetting(scale); + EXPECT_NEAR(scale, 6.0f, TRANSITION_EPSILON); + transitionA_.transformRenderContent_.Upgrade()->GetScaleSetting(scale); + EXPECT_NEAR(scale, 10.0f, TRANSITION_EPSILON); + EXPECT_EQ(1, transitionA_.stopCounter_); + EXPECT_EQ(1, transitionB_.stopCounter_); + CheckTouchable(false, transitionA_); + CheckTouchable(true, transitionB_); + } + + // checked for PushPageTest002 + void CheckCustomTranslateTransitionFrames() + { + /** + * @tc.steps: step1. trigger frames to check transition goes right + * @tc.expected: step1. check scale value is right and transition is not stopped. + */ + Dimension offsetX; + Dimension offsetY; + for (int32_t idx = 1; idx < 5; idx++) { + LOGD("trigger frame for verify transition. frame idx: %{public}d", idx); + platformWindowRaw_->TriggerOneFrame(); + transitionB_.transformRenderContent_.Upgrade()->GetTranslateSetting(offsetX, offsetY); + EXPECT_NEAR(offsetX.Value(), 1.0f * (idx + 1), TRANSITION_EPSILON); + transitionA_.transformRenderContent_.Upgrade()->GetTranslateSetting(offsetX, offsetY); + EXPECT_NEAR(offsetX.Value(), 10.0f * (6 - idx), TRANSITION_EPSILON); + + EXPECT_EQ(0, transitionA_.stopCounter_); + EXPECT_EQ(0, transitionB_.stopCounter_); + } + + /** + * @tc.steps: step2. trigger last frame to check transition is done + * @tc.expected: step2. check final offset value is right, and transition is stopped. + */ + platformWindowRaw_->TriggerOneFrame(); + transitionB_.transformRenderContent_.Upgrade()->GetTranslateSetting(offsetX, offsetY); + EXPECT_NEAR(offsetX.Value(), 6.0f, TRANSITION_EPSILON); + transitionA_.transformRenderContent_.Upgrade()->GetTranslateSetting(offsetX, offsetY); + EXPECT_NEAR(offsetX.Value(), 10.0f, TRANSITION_EPSILON); + + EXPECT_EQ(1, transitionA_.stopCounter_); + EXPECT_EQ(1, transitionB_.stopCounter_); + } + + void CheckPushPageClipFrames() + { + /** + * @tc.steps: step1. trigger frames to check transition goes right + * @tc.expected: step1. check clip value is right. + */ + auto renderNode = transitionB_.transitionElementContent_.Upgrade()->GetContentElement()->GetRenderNode(); + auto clipRender = AceType::DynamicCast(renderNode); + EXPECT_TRUE(clipRender); + platformWindowRaw_->TriggerOneFrame(); + float scale = 0.0f; + transitionB_.transformRenderContent_.Upgrade()->GetScaleSetting(scale); + EXPECT_NEAR(scale, 0.327342f, TRANSITION_EPSILON); + Rect clipRect = clipRender->GetClipRect(Offset()); + EXPECT_NEAR(clipRect.Height(), 677.124, TRANSITION_EPSILON); + EXPECT_NEAR(clipRect.Width(), 540.0, TRANSITION_EPSILON); + EXPECT_NEAR(clipRect.Top(), 0.0, TRANSITION_EPSILON); + EXPECT_NEAR(clipRect.Left(), 0.0, TRANSITION_EPSILON); + + /** + * @tc.steps: step2. trigger the fifth frame to check transition is done + * @tc.expected: step2. check final clip value is right + */ + platformWindowRaw_->TriggerFrames(4); + transitionB_.transformRenderContent_.Upgrade()->GetScaleSetting(scale); + EXPECT_NEAR(scale, 0.957529f, TRANSITION_EPSILON); + clipRect = clipRender->GetClipRect(Offset()); + EXPECT_NEAR(clipRect.Height(), 979.614, TRANSITION_EPSILON); + EXPECT_NEAR(clipRect.Width(), 540.0, TRANSITION_EPSILON); + EXPECT_NEAR(clipRect.Top(), 0.0, TRANSITION_EPSILON); + EXPECT_NEAR(clipRect.Left(), 0.0, TRANSITION_EPSILON); + + /** + * @tc.steps: step3. trigger last frame to check transition is done + * @tc.expected: step3. check final clip value is right + */ + platformWindowRaw_->TriggerFrames(2); + transitionB_.transformRenderContent_.Upgrade()->GetScaleSetting(scale); + EXPECT_NEAR(scale, 1.0f, TRANSITION_EPSILON); + clipRect = clipRender->GetClipRect(Offset()); + EXPECT_NEAR(clipRect.Height(), 1000.0, TRANSITION_EPSILON); + EXPECT_NEAR(clipRect.Width(), 540.0, TRANSITION_EPSILON); + EXPECT_NEAR(clipRect.Top(), 0.0, TRANSITION_EPSILON); + EXPECT_NEAR(clipRect.Left(), 0.0, TRANSITION_EPSILON); + } + + void CheckPushPageCardOpacityFrames() + { + /** + * @tc.steps: step1. trigger frames to check transition goes right + * @tc.expected: step1. check opacity value is right. + */ + auto display = transitionB_.displayRenderContent_.Upgrade(); + EXPECT_TRUE(display); + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(display->GetOpacity(), 0.501961, TRANSITION_EPSILON); + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(display->GetOpacity(), 1.0, TRANSITION_EPSILON); + } + + void CheckPopPageClipFrames() + { + /** + * @tc.steps: step1. trigger frames to check transition goes right + * @tc.expected: step1. check clip value is right. + */ + auto renderNode = transitionB_.transitionElementContent_.Upgrade()->GetContentElement()->GetRenderNode(); + auto clipRender = AceType::DynamicCast(renderNode); + EXPECT_TRUE(clipRender); + + /** + * @tc.steps: step2. trigger the first frame to check transition is done + * @tc.expected: step2. check final clip value is right + */ + platformWindowRaw_->TriggerOneFrame(); + float scale = 0.0f; + transitionB_.transformRenderContent_.Upgrade()->GetScaleSetting(scale); + EXPECT_NEAR(scale, 0.839325f, TRANSITION_EPSILON); + Rect clipRect = clipRender->GetClipRect(Offset()); + EXPECT_NEAR(clipRect.Height(), 922.876, TRANSITION_EPSILON); + EXPECT_NEAR(clipRect.Width(), 540.0, TRANSITION_EPSILON); + EXPECT_NEAR(clipRect.Top(), 0.0, TRANSITION_EPSILON); + EXPECT_NEAR(clipRect.Left(), 0.0, TRANSITION_EPSILON); + + /** + * @tc.steps: step2. trigger the fifth frame to check transition is done + * @tc.expected: step2. check final clip value is right + */ + platformWindowRaw_->TriggerFrames(4); + transitionB_.transformRenderContent_.Upgrade()->GetScaleSetting(scale); + EXPECT_NEAR(scale, 0.209137f, TRANSITION_EPSILON); + clipRect = clipRender->GetClipRect(Offset()); + EXPECT_NEAR(clipRect.Height(), 620.386, TRANSITION_EPSILON); + EXPECT_NEAR(clipRect.Width(), 540.0, TRANSITION_EPSILON); + EXPECT_NEAR(clipRect.Top(), 0.0, TRANSITION_EPSILON); + EXPECT_NEAR(clipRect.Left(), 0.0, TRANSITION_EPSILON); + + /** + * @tc.steps: step3. trigger last frame to check transition is done + * @tc.expected: step3. check final clip value is right + */ + platformWindowRaw_->TriggerFrames(2); + clipRect = clipRender->GetClipRect(Offset()); + EXPECT_NEAR(clipRect.Height(), 600.0, TRANSITION_EPSILON); + EXPECT_NEAR(clipRect.Width(), 540.0, TRANSITION_EPSILON); + EXPECT_NEAR(clipRect.Top(), 0.0, TRANSITION_EPSILON); + EXPECT_NEAR(clipRect.Left(), 0.0, TRANSITION_EPSILON); + } + + void CheckPopPageCardOpacityFrames() + { + /** + * @tc.steps: step1. trigger frames to check transition goes right + * @tc.expected: step1. check opacity value is right. + */ + auto display = transitionB_.displayRenderContent_.Upgrade(); + EXPECT_TRUE(display); + platformWindowRaw_->TriggerFrames(4); + EXPECT_NEAR(display->GetOpacity(), 1, TRANSITION_EPSILON); + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(display->GetOpacity(), 0.741176, TRANSITION_EPSILON); + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(display->GetOpacity(), 0.258824, TRANSITION_EPSILON); + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(display->GetOpacity(), 0.0, TRANSITION_EPSILON); + } + + // checked for TV transition + void CheckTvTransitionFrame() + { + /** + * @tc.steps: step1. trigger 4 frames to check transition goes right + * @tc.expected: step1. check scale value is right and transition is not stopped. + */ + float scale = 0.0f; + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(VisibleType::VISIBLE, transitionB_.displayRenderContent_.Upgrade()->GetVisibleType()); + transitionB_.transformRenderContent_.Upgrade()->GetScaleSetting(scale); + EXPECT_NEAR(scale, 0.58f, TRANSITION_EPSILON); + transitionA_.transformRenderContent_.Upgrade()->GetScaleSetting(scale); + EXPECT_NEAR(scale, 1.04f, TRANSITION_EPSILON); + + platformWindowRaw_->TriggerOneFrame(); + transitionB_.transformRenderContent_.Upgrade()->GetScaleSetting(scale); + EXPECT_NEAR(scale, 0.85f, TRANSITION_EPSILON); + transitionA_.transformRenderContent_.Upgrade()->GetScaleSetting(scale); + EXPECT_NEAR(scale, 1.09f, TRANSITION_EPSILON); + + platformWindowRaw_->TriggerOneFrame(); + transitionB_.transformRenderContent_.Upgrade()->GetScaleSetting(scale); + EXPECT_NEAR(scale, 0.91f, TRANSITION_EPSILON); + transitionA_.transformRenderContent_.Upgrade()->GetScaleSetting(scale); + EXPECT_NEAR(scale, 1.08f, TRANSITION_EPSILON); + + platformWindowRaw_->TriggerOneFrame(); + transitionB_.transformRenderContent_.Upgrade()->GetScaleSetting(scale); + EXPECT_NEAR(scale, 0.98f, TRANSITION_EPSILON); + transitionA_.transformRenderContent_.Upgrade()->GetScaleSetting(scale); + EXPECT_NEAR(scale, 1.01f, TRANSITION_EPSILON); + + /** + * @tc.steps: step2. trigger last frame to check transition is done + * @tc.expected: step2. check final scale value is right, and transition is stopped. + */ + LOGD("trigger last frame for verify transition."); + platformWindowRaw_->TriggerOneFrame(); + transitionB_.transformRenderContent_.Upgrade()->GetScaleSetting(scale); + EXPECT_NEAR(scale, 1.0f, TRANSITION_EPSILON); + transitionA_.transformRenderContent_.Upgrade()->GetScaleSetting(scale); + EXPECT_NEAR(scale, 1.0f, TRANSITION_EPSILON); + EXPECT_EQ(1, transitionA_.stopCounter_); + EXPECT_EQ(1, transitionB_.stopCounter_); + } + + // checked for phone push transition + void CheckPhonePushTransitionFrame() + { + /** + * @tc.steps: step1. trigger 2 frames to check transition goes right + * @tc.expected: step1. check offset value is right and transition is not stopped. + */ + Dimension offsetX; + Dimension offsetY; + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(VisibleType::VISIBLE, transitionB_.displayRenderContent_.Upgrade()->GetVisibleType()); + transitionB_.transformRenderContent_.Upgrade()->GetTranslateSetting(offsetX, offsetY); + EXPECT_NEAR(offsetX.Value(), 69.49f, TRANSITION_EPSILON); + EXPECT_NEAR(offsetY.Value(), 0.0f, TRANSITION_EPSILON); + transitionA_.transformRenderContent_.Upgrade()->GetTranslateSetting(offsetX, offsetY); + EXPECT_NEAR(offsetX.Value(), -188.20f, TRANSITION_EPSILON); + EXPECT_NEAR(offsetY.Value(), 0.0f, TRANSITION_EPSILON); + + /** + * @tc.steps: step2. trigger last frame to check transition is done + * @tc.expected: step2. check final offset value is right, and transition is stopped. + */ + LOGD("trigger last frame for verify transition."); + platformWindowRaw_->TriggerOneFrame(); + transitionB_.transformRenderContent_.Upgrade()->GetTranslateSetting(offsetX, offsetY); + EXPECT_NEAR(offsetX.Value(), 0.0f, TRANSITION_EPSILON); + EXPECT_NEAR(offsetY.Value(), 0.0f, TRANSITION_EPSILON); + transitionA_.transformRenderContent_.Upgrade()->GetTranslateSetting(offsetX, offsetY); + EXPECT_NEAR(offsetX.Value(), -216.0f, TRANSITION_EPSILON); + EXPECT_NEAR(offsetY.Value(), 0.0f, TRANSITION_EPSILON); + + EXPECT_EQ(1, transitionA_.stopCounter_); + EXPECT_EQ(1, transitionB_.stopCounter_); + } + + void PushPhoneOrWatchTwoPages() + { + /** + * @tc.steps: step1. init pipeline and build tween component + */ + InitEnvAndPushFirstComponent(); + /** + * @tc.steps: step2. push page + * @tc.expected: step2. check push page success + */ + platformWindowRaw_->TriggerOneFrame(); + SwitchHookToTransition(transitionB_); + RefPtr page = AceType::DynamicCast(g_createPushComponent()); + EXPECT_TRUE(page); + EXPECT_TRUE(context_->CanPushPage()); + context_->PushPage(page); + + /** + * @tc.steps: step3. trigger frames to let transition done + */ + platformWindowRaw_->TriggerOneFrame(); + GetTransitionGroupFromTransition(transitionB_); + GetTransitionGroupFromTransition(transitionA_); + platformWindowRaw_->TriggerFrames(3); + } + + void PushPhoneTwoPages() + { + /** + * @tc.steps: step1. init device type and push two pages + */ + deviceType_ = DeviceType::PHONE; + PushPhoneOrWatchTwoPages(); + } + + void PushWatchTwoPages() + { + /** + * @tc.steps: step1. init device type and push two pages + */ + deviceType_ = DeviceType::WATCH; + PushPhoneOrWatchTwoPages(); + } + + // checked for phone pop transition + void CheckPhonePopTransitionFrame() + { + /** + * @tc.steps: step1. trigger 2 frames to check transition goes right + * @tc.expected: step1. check offset value is right and transition is not stopped. + */ + Dimension offsetX; + Dimension offsetY; + platformWindowRaw_->TriggerOneFrame(); + transitionB_.transformRenderContent_.Upgrade()->GetTranslateSetting(offsetX, offsetY); + EXPECT_NEAR(offsetX.Value(), 179.81f, TRANSITION_EPSILON); + EXPECT_NEAR(offsetY.Value(), 0.0f, TRANSITION_EPSILON); + transitionA_.transformRenderContent_.Upgrade()->GetTranslateSetting(offsetX, offsetY); + EXPECT_NEAR(offsetX.Value(), -144.07f, TRANSITION_EPSILON); + EXPECT_NEAR(offsetY.Value(), 0.0f, TRANSITION_EPSILON); + + /** + * @tc.steps: step2. trigger last frame to check transition is done + * @tc.expected: step2. check final offset value is right, and transition is stopped. + */ + platformWindowRaw_->TriggerOneFrame(); + // page B has been pop and destroyed + EXPECT_FALSE(transitionB_.transformRenderContent_.Upgrade()); + transitionA_.transformRenderContent_.Upgrade()->GetTranslateSetting(offsetX, offsetY); + EXPECT_NEAR(offsetX.Value(), 0.0f, TRANSITION_EPSILON); + EXPECT_NEAR(offsetY.Value(), 0.0f, TRANSITION_EPSILON); + + EXPECT_EQ(1, transitionA_.stopCounter_); + EXPECT_EQ(1, transitionB_.stopCounter_); + } + + // checked for phone pop transition + void CheckPhonePopSharedTransitionFrame() + { + /** + * @tc.steps: step1. trigger 2 frames to check transition goes right + * @tc.expected: step1. check offset value is right and transition is not stopped. + */ + Dimension offsetX; + Dimension offsetY; + platformWindowRaw_->TriggerOneFrame(); + transitionB_.transformRenderContent_.Upgrade()->GetTranslateSetting(offsetX, offsetY); + EXPECT_NEAR(offsetX.Value(), -1011.98, TRANSITION_EPSILON); // -1011.9884336590767 + EXPECT_NEAR(offsetY.Value(), 0.0f, TRANSITION_EPSILON); + transitionA_.transformRenderContent_.Upgrade()->GetTranslateSetting(offsetX, offsetY); + EXPECT_NEAR(offsetX.Value(), 0.0f, TRANSITION_EPSILON); + EXPECT_NEAR(offsetY.Value(), 0.0f, TRANSITION_EPSILON); + + /** + * @tc.steps: step2. trigger last frame to check transition is done + * @tc.expected: step2. check final offset value is right, and transition is stopped. + */ + platformWindowRaw_->TriggerOneFrame(); + // page B has been pop and destroyed + EXPECT_FALSE(transitionB_.transformRenderContent_.Upgrade()); + transitionA_.transformRenderContent_.Upgrade()->GetTranslateSetting(offsetX, offsetY); + EXPECT_NEAR(offsetX.Value(), 0.0f, TRANSITION_EPSILON); + EXPECT_NEAR(offsetY.Value(), 0.0f, TRANSITION_EPSILON); + + EXPECT_EQ(1, transitionA_.stopCounter_); + EXPECT_EQ(1, transitionB_.stopCounter_); + } + + // checked for watch pop transition + void CheckWatchPushTransitionFrame() + { + /** + * @tc.steps: step1. trigger 2 frames to check transition goes right + * @tc.expected: step1. check offset value is right and transition is not stopped. + */ + Dimension offsetX; + Dimension offsetY; + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(VisibleType::VISIBLE, transitionB_.displayRenderContent_.Upgrade()->GetVisibleType()); + transitionB_.transformRenderContent_.Upgrade()->GetTranslateSetting(offsetX, offsetY); + EXPECT_NEAR(offsetX.Value(), 138.98f, TRANSITION_EPSILON); + EXPECT_NEAR(offsetY.Value(), 0.0f, TRANSITION_EPSILON); + transitionA_.transformRenderContent_.Upgrade()->GetTranslateSetting(offsetX, offsetY); + EXPECT_NEAR(offsetX.Value(), -470.50f, TRANSITION_EPSILON); + EXPECT_NEAR(offsetY.Value(), 0.0f, TRANSITION_EPSILON); + + /** + * @tc.steps: step2. trigger last frame to check transition is done + * @tc.expected: step2. check final offset value is right, and transition is stopped. + */ + LOGD("trigger last frame for verify transition."); + platformWindowRaw_->TriggerOneFrame(); + transitionB_.transformRenderContent_.Upgrade()->GetTranslateSetting(offsetX, offsetY); + EXPECT_NEAR(offsetX.Value(), 0.0f, TRANSITION_EPSILON); + EXPECT_NEAR(offsetY.Value(), 0.0f, TRANSITION_EPSILON); + transitionA_.transformRenderContent_.Upgrade()->GetTranslateSetting(offsetX, offsetY); + EXPECT_NEAR(offsetX.Value(), -540.0f, TRANSITION_EPSILON); + EXPECT_NEAR(offsetY.Value(), 0.0f, TRANSITION_EPSILON); + + EXPECT_EQ(1, transitionA_.stopCounter_); + EXPECT_EQ(1, transitionB_.stopCounter_); + } + + // checked for watch push transition + void CheckWatchPopTransitionFrame() + { + /** + * @tc.steps: step1. trigger 2 frames to check transition goes right + * @tc.expected: step1. check offset value is right and transition is not stopped. + */ + Dimension offsetX; + Dimension offsetY; + platformWindowRaw_->TriggerOneFrame(); + transitionB_.transformRenderContent_.Upgrade()->GetTranslateSetting(offsetX, offsetY); + EXPECT_NEAR(offsetX.Value(), 359.62f, TRANSITION_EPSILON); + EXPECT_NEAR(offsetY.Value(), 0.0f, TRANSITION_EPSILON); + transitionA_.transformRenderContent_.Upgrade()->GetTranslateSetting(offsetX, offsetY); + EXPECT_NEAR(offsetX.Value(), -360.18f, TRANSITION_EPSILON); + EXPECT_NEAR(offsetY.Value(), 0.0f, TRANSITION_EPSILON); + + /** + * @tc.steps: step2. trigger last frame to check transition is done + * @tc.expected: step2. check final offset value is right, and transition is stopped. + */ + LOGD("trigger last frame for verify transition."); + platformWindowRaw_->TriggerOneFrame(); + // page B has been pop and destroyed + EXPECT_FALSE(transitionB_.transformRenderContent_.Upgrade()); + transitionA_.transformRenderContent_.Upgrade()->GetTranslateSetting(offsetX, offsetY); + EXPECT_NEAR(offsetX.Value(), 0.0f, TRANSITION_EPSILON); + EXPECT_NEAR(offsetY.Value(), 0.0f, TRANSITION_EPSILON); + + EXPECT_EQ(1, transitionA_.stopCounter_); + EXPECT_EQ(1, transitionB_.stopCounter_); + } + + static RefPtr CreatePushPage() + { + LOGD("start create push page."); + auto boxComponent = AceType::MakeRefPtr(); + boxComponent->SetWidth(TEST_SURFACE_WIDTH / 2.0f); + boxComponent->SetHeight(TEST_SURFACE_HEIGHT / 2.0f); + auto transitionComponent = AceType::MakeRefPtr(); + g_isSeparation = SystemProperties::GetDeviceType() == DeviceType::TV; + transitionComponent->SetSeparation(g_isSeparation); + transitionComponent->SetContent(boxComponent); + if (g_configPushTransition) { + g_configPushTransition(transitionComponent); + } + auto pageComponent = AceType::MakeRefPtr(++g_pageId, transitionComponent); + LOGD("end create push page."); + return AceType::DynamicCast(pageComponent); + } + + static RefPtr CreatePushPageWithShared() + { + g_pageId++; + // make content. + auto boxComponent = AceType::MakeRefPtr(); + boxComponent->SetWidth(g_componentWidth); + boxComponent->SetHeight(g_componentHeight); + RefPtr sharedComponent; + sharedComponent = AceType::MakeRefPtr( + "TestCase" + std::to_string(g_pageId), "shared component", SHARE_ID_EXCHANGE); + + sharedComponent->SetChild(boxComponent); + // make page. + auto transitionComponent = AceType::MakeRefPtr(); + g_isSeparation = SystemProperties::GetDeviceType() == DeviceType::TV; + transitionComponent->SetSeparation(g_isSeparation); + transitionComponent->SetContent(sharedComponent); + if (g_configPushTransition) { + g_configPushTransition(transitionComponent); + } + auto pageComponent = AceType::MakeRefPtr(g_pageId, transitionComponent); + return AceType::DynamicCast(pageComponent); + } + + static void PageTransitionRecorder( + const TransitionEvent& event, const WeakPtr& pageIn, const WeakPtr& pageOut) + { + g_transitionRecord.event_ = event; + g_transitionRecord.eventCount_++; + if (pageIn.Upgrade()) { + g_transitionRecord.pageInId_ = pageIn.Upgrade()->GetPageId(); + } + if (pageOut.Upgrade()) { + g_transitionRecord.pageOutId_ = pageOut.Upgrade()->GetPageId(); + } + } + + static void SwitchHookToTransition(TransitionGroup& transitionGroup) + { + MockTransitionElement::SetMockHook([&transitionGroup](const RefPtr& transitionElement) { + LOGD("Switch Hook To transition group: %{public}s", transitionGroup.name_); + transitionGroup.pageTransitionElement_ = transitionElement; + }); + } + + static void GetTransitionGroupFromTransition(TransitionGroup& transitionGroup) + { + EXPECT_TRUE(transitionGroup.pageTransitionElement_.Upgrade()); + auto transitionMock = AceType::DynamicCast(transitionGroup.pageTransitionElement_); + EXPECT_TRUE(transitionMock.Upgrade()); + transitionGroup.transitionElementContent_ = transitionMock.Upgrade()->GetContentTransitionElement(); + EXPECT_TRUE(transitionGroup.transitionElementContent_.Upgrade()); + + transitionGroup.displayRenderContent_ = AceType::DynamicCast( + transitionGroup.transitionElementContent_.Upgrade()->GetFirstChild()->GetRenderNode()); + EXPECT_TRUE(transitionGroup.displayRenderContent_.Upgrade()); + auto displayChildren = transitionGroup.displayRenderContent_.Upgrade()->GetChildren(); + EXPECT_TRUE(displayChildren.size() == 1); + transitionGroup.transformRenderContent_ = AceType::DynamicCast(displayChildren.front()); + EXPECT_TRUE(transitionGroup.transformRenderContent_.Upgrade()); + + if (g_isSeparation) { + transitionGroup.transitionElementBackground_ = transitionMock.Upgrade()->GetBackgroundTransitionElement(); + EXPECT_TRUE(transitionGroup.transitionElementBackground_.Upgrade()); + transitionGroup.displayRenderBackground_ = AceType::DynamicCast( + transitionGroup.transitionElementBackground_.Upgrade()->GetFirstChild()->GetRenderNode()); + EXPECT_TRUE(transitionGroup.displayRenderBackground_.Upgrade()); + displayChildren = transitionGroup.displayRenderBackground_.Upgrade()->GetChildren(); + EXPECT_TRUE(displayChildren.size() == 1); + transitionGroup.transformRenderBackground_ = + AceType::DynamicCast(displayChildren.front()); + EXPECT_TRUE(transitionGroup.transformRenderBackground_.Upgrade()); + } + + auto controller = transitionMock.Upgrade()->GetTransitionController(); + EXPECT_TRUE(controller); + LOGI("add start / stop listener for transition's animator."); + controller->AddStartListener([&transitionGroup]() { + auto transition = transitionGroup.pageTransitionElement_.Upgrade(); + EXPECT_TRUE(transition); + LOGD("transition start. transition name: %{public}s", transitionGroup.name_); + transitionGroup.startCounter_++; + }); + controller->AddStopListener([&transitionGroup]() { + auto transition = transitionGroup.pageTransitionElement_.Upgrade(); + EXPECT_TRUE(transition); + LOGD("transition stop. transition name: %{public}s", transitionGroup.name_); + transitionGroup.stopCounter_++; + }); + } + + static void CheckTouchable(bool touchable, const TransitionGroup& transition) + { + EXPECT_EQ(touchable, transition.transformRenderContent_.Upgrade()->GetTouchable()); + EXPECT_EQ(touchable, transition.transformRenderBackground_.Upgrade()->GetTouchable()); + } + +protected: + DeviceType deviceType_ { DeviceType::TV }; + RefPtr context_; + uint32_t frameTimeMs_ = FRAME_TIME_IN_MILLISECOND; + MockPlatformWindow* platformWindowRaw_ = nullptr; + RefPtr overlay_; + TransitionGroup transitionA_ { TransitionGroup("transitionA") }; + TransitionGroup transitionB_ { TransitionGroup("transitionB") }; + TransitionGroup transitionC_ { TransitionGroup("transitionC") }; +}; + +/** + * @tc.name: PushPageTest001 + * @tc.desc: test scale animation in tween. + * @tc.type: FUNC + * @tc.require: AR000DAIGV + * @tc.author: zhouzebin + */ +HWTEST_F(TransitionElementTest, PushPageTest001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TransitionElementTest PushTest001"; + /** + * @tc.steps: step1. init tween option and build tween component + */ + InitCustomScaleTransition(); + EXPECT_EQ(2, g_transitionRecord.eventCount_); + EXPECT_EQ(TransitionEvent::PUSH_END, g_transitionRecord.event_); + EXPECT_EQ(1, g_transitionRecord.pageInId_); + g_transitionRecord.Init(); + + /** + * @tc.steps: step2. push page + * @tc.expected: step2. check push page success + */ + platformWindowRaw_->TriggerOneFrame(); + SwitchHookToTransition(transitionB_); + RefPtr page = AceType::DynamicCast(g_createPushComponent()); + EXPECT_TRUE(page); + EXPECT_TRUE(context_->CanPushPage()); + context_->PushPage(page); + EXPECT_EQ(0, g_transitionRecord.eventCount_); + + /** + * @tc.steps: step3. trigger first frame to let transition go + * @tc.expected: step3. check all transition is visible + */ + LOGD("trigger frame for stage's transition build and prepare animation"); + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(1, g_transitionRecord.eventCount_); + EXPECT_EQ(TransitionEvent::PUSH_START, g_transitionRecord.event_); + EXPECT_EQ(2, g_transitionRecord.pageInId_); + EXPECT_EQ(1, g_transitionRecord.pageOutId_); + GetTransitionGroupFromTransition(transitionB_); + GetTransitionGroupFromTransition(transitionA_); + EXPECT_NE(transitionA_.pageTransitionElement_, transitionB_.pageTransitionElement_); + LOGD("transition in: content display render %{public}p, transform render %{public}p", + &(*transitionB_.displayRenderContent_.Upgrade()), &(*transitionB_.transformRenderContent_.Upgrade())); + LOGD("transition out: content display render %{public}p, transform render %{public}p", + &(*transitionA_.displayRenderContent_.Upgrade()), &(*transitionA_.transformRenderContent_.Upgrade())); + EXPECT_EQ(VisibleType::INVISIBLE, transitionB_.displayRenderContent_.Upgrade()->GetVisibleType()); + EXPECT_EQ(VisibleType::VISIBLE, transitionA_.displayRenderContent_.Upgrade()->GetVisibleType()); + + /** + * @tc.steps: step4. push page while transition is going + * @tc.expected: step4. push page failed + */ + EXPECT_FALSE(context_->CanPushPage()); + CheckTouchable(false, transitionA_); + CheckTouchable(false, transitionB_); + + /** + * @tc.steps: step5. do custom scale transition + * @tc.expected: step5. check custom scale transition + */ + CheckCustomScaleTransitionFrames(); +} + +/** + * @tc.name: PushPageTest002 + * @tc.desc: test translate animation in tween. + * @tc.type: FUNC + * @tc.require: AR000DQ1VJ + * @tc.author: jiangdayuan + */ +HWTEST_F(TransitionElementTest, PushPageTest002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TransitionElementTest PushTest002"; + /** + * @tc.steps: step1. init tween option and build tween component + */ + InitCustomTranslateTransition(); + + /** + * @tc.steps: step2. push page + * @tc.expected: step2. check push page success + */ + platformWindowRaw_->TriggerOneFrame(); + SwitchHookToTransition(transitionB_); + RefPtr page = AceType::DynamicCast(g_createPushComponent()); + context_->PushPage(page); + + /** + * @tc.steps: step3. trigger first frame to let transition go + */ + platformWindowRaw_->TriggerOneFrame(); + GetTransitionGroupFromTransition(transitionB_); + GetTransitionGroupFromTransition(transitionA_); + + /** + * @tc.steps: step4. do custom translate transition + * @tc.expected: step4. check custom translate transition + */ + CheckCustomTranslateTransitionFrames(); +} + +/** + * @tc.name: TransitionUIStandardTest001 + * @tc.desc: test ui standard for transition + * @tc.type: FUNC + * @tc.require: AR000DBTLT + * @tc.author: zhouzebin + */ +HWTEST_F(TransitionElementTest, TransitionUIStandardTest001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TransitionElementTest TransitionUIStandardTest001"; + /** + * @tc.steps: step1. init tween option and build tween component + */ + g_configPushTransition = nullptr; + InitEnvAndPushFirstComponent(); + + /** + * @tc.steps: step2. push page + * @tc.expected: step2. check push page success + */ + platformWindowRaw_->TriggerOneFrame(); + SwitchHookToTransition(transitionB_); + RefPtr page = AceType::DynamicCast(g_createPushComponent()); + EXPECT_TRUE(page); + EXPECT_TRUE(context_->CanPushPage()); + context_->PushPage(page); + + /** + * @tc.steps: step3. trigger first frame to let transition go + * @tc.expected: step3. check all transition is visible + */ + LOGD("trigger frame for stage's transition build and prepare animation"); + platformWindowRaw_->TriggerOneFrame(); + GetTransitionGroupFromTransition(transitionB_); + GetTransitionGroupFromTransition(transitionA_); + EXPECT_NE(transitionA_.pageTransitionElement_, transitionB_.pageTransitionElement_); + LOGD("transition in: content display render %p, transform render %p", + &(*transitionB_.displayRenderContent_.Upgrade()), &(*transitionB_.transformRenderContent_.Upgrade())); + LOGD("transition out: content display render %p, transform render %p", + &(*transitionA_.displayRenderContent_.Upgrade()), &(*transitionA_.transformRenderContent_.Upgrade())); + EXPECT_EQ(VisibleType::INVISIBLE, transitionB_.displayRenderContent_.Upgrade()->GetVisibleType()); + EXPECT_EQ(VisibleType::VISIBLE, transitionA_.displayRenderContent_.Upgrade()->GetVisibleType()); + + /** + * @tc.steps: step4. push page while transition is going + * @tc.expected: step4. push page failed + */ + EXPECT_FALSE(context_->CanPushPage()); + + /** + * @tc.steps: step5. do tv transition + * @tc.expected: step5. check tv transition + */ + CheckTvTransitionFrame(); +} + +/** + * @tc.name: TransitionUIStandardTest002 + * @tc.desc: test phone push transition + * @tc.type: FUNC + * @tc.require: AR000DQ1VF + * @tc.author: zhouzebin + */ +HWTEST_F(TransitionElementTest, TransitionUIStandardTest002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TransitionElementTest TransitionUIStandardTest002"; + /** + * @tc.steps: step1. init tween option and build tween component + */ + deviceType_ = DeviceType::PHONE; + g_configPushTransition = nullptr; + InitEnvAndPushFirstComponent(); + + /** + * @tc.steps: step2. push page + * @tc.expected: step2. check push page success + */ + platformWindowRaw_->TriggerOneFrame(); + SwitchHookToTransition(transitionB_); + RefPtr page = AceType::DynamicCast(g_createPushComponent()); + EXPECT_TRUE(page); + EXPECT_TRUE(context_->CanPushPage()); + context_->PushPage(page); + + /** + * @tc.steps: step3. trigger first frame to let transition go + * @tc.expected: step3. check all transition is visible + */ + LOGD("trigger frame for stage's transition build and prepare animation"); + platformWindowRaw_->TriggerOneFrame(); + GetTransitionGroupFromTransition(transitionB_); + GetTransitionGroupFromTransition(transitionA_); + EXPECT_NE(transitionA_.pageTransitionElement_, transitionB_.pageTransitionElement_); + EXPECT_EQ(VisibleType::INVISIBLE, transitionB_.displayRenderContent_.Upgrade()->GetVisibleType()); + EXPECT_EQ(VisibleType::VISIBLE, transitionA_.displayRenderContent_.Upgrade()->GetVisibleType()); + + /** + * @tc.steps: step4. push page while transition is going + * @tc.expected: step4. push page failed + */ + EXPECT_FALSE(context_->CanPushPage()); + + /** + * @tc.steps: step5. do phone transition + * @tc.expected: step5. check phone transition + */ + CheckPhonePushTransitionFrame(); +} + +/** + * @tc.name: TransitionUIStandardTest003 + * @tc.desc: test watch push transition + * @tc.type: FUNC + * @tc.require: AR000DQ1VG + * @tc.author: jiangdayuan + */ +HWTEST_F(TransitionElementTest, TransitionUIStandardTest003, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TransitionElementTest TransitionUIStandardTest003"; + /** + * @tc.steps: step1. init tween option and build tween component + */ + deviceType_ = DeviceType::WATCH; + g_configPushTransition = nullptr; + InitEnvAndPushFirstComponent(); + + /** + * @tc.steps: step2. push page + * @tc.expected: step2. check push page success + */ + platformWindowRaw_->TriggerOneFrame(); + SwitchHookToTransition(transitionB_); + RefPtr page = AceType::DynamicCast(g_createPushComponent()); + EXPECT_TRUE(page); + EXPECT_TRUE(context_->CanPushPage()); + context_->PushPage(page); + + /** + * @tc.steps: step3. trigger first frame to let transition go + * @tc.expected: step3. check all transition is visible + */ + LOGD("trigger frame for stage's transition build and prepare animation"); + platformWindowRaw_->TriggerOneFrame(); + GetTransitionGroupFromTransition(transitionB_); + GetTransitionGroupFromTransition(transitionA_); + EXPECT_NE(transitionA_.pageTransitionElement_, transitionB_.pageTransitionElement_); + EXPECT_EQ(VisibleType::INVISIBLE, transitionB_.displayRenderContent_.Upgrade()->GetVisibleType()); + EXPECT_EQ(VisibleType::VISIBLE, transitionA_.displayRenderContent_.Upgrade()->GetVisibleType()); + + /** + * @tc.steps: step4. push page while transition is going + * @tc.expected: step4. push page failed + */ + EXPECT_FALSE(context_->CanPushPage()); + + /** + * @tc.steps: step5. do watch transition + * @tc.expected: step5. check watch transition + */ + CheckWatchPushTransitionFrame(); +} + +/** + * @tc.name: TransitionUIStandardTest004 + * @tc.desc: test watch pop transition + * @tc.type: FUNC + * @tc.require: AR000DR6DE + * @tc.author: jiangdayuan + */ +HWTEST_F(TransitionElementTest, TransitionUIStandardTest004, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TransitionElementTest TransitionUIStandardTest004"; + /** + * @tc.steps: step1. push two pages. + */ + g_configPushTransition = nullptr; + PushWatchTwoPages(); + /** + * @tc.steps: step2. pop page while transition is done + * @tc.expected: step2. pop page success + */ + EXPECT_TRUE(context_->CanPopPage()); + context_->PopPage(); + platformWindowRaw_->TriggerOneFrame(); + CheckWatchPopTransitionFrame(); +} + +/** + * @tc.name: TransitionUIStandardTest005 + * @tc.desc: test phone pop transition + * @tc.type: FUNC + * @tc.require: AR000DQ1VE + * @tc.author: jiangdayuan + */ +HWTEST_F(TransitionElementTest, TransitionUIStandardTest005, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TransitionElementTest TransitionUIStandardTest005"; + /** + * @tc.steps: step1. init tween option and push two pages + */ + g_configPushTransition = nullptr; + PushPhoneTwoPages(); + + /** + * @tc.steps: step2. pop page while transition is done + * @tc.expected: step2. pop page success + */ + EXPECT_TRUE(context_->CanPopPage()); + context_->PopPage(); + platformWindowRaw_->TriggerOneFrame(); + CheckPhonePopTransitionFrame(); +} + +/** + * @tc.name: OneShotTransitionTest001 + * @tc.desc: test tv push transition with shared element with custom page transition parameters. + * @tc.type: FUNC + * @tc.require: AR000DR6TF + * @tc.author: zhouzebin + */ +HWTEST_F(TransitionElementTest, OneShotTransitionTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. init tween option and build tween component + */ + g_createPushComponent = CreatePushPageWithShared; + InitCustomScaleTransition(); + g_transitionRecord.Init(); + + /** + * @tc.steps: step2. push page + * @tc.expected: step2. check push page success + */ + platformWindowRaw_->TriggerOneFrame(); + SwitchHookToTransition(transitionB_); + RefPtr page = AceType::DynamicCast(g_createPushComponent()); + EXPECT_TRUE(page); + EXPECT_TRUE(context_->CanPushPage()); + context_->PushPage(page); + EXPECT_EQ(0, g_transitionRecord.eventCount_); + + /** + * @tc.steps: step3. trigger first frame to let transition go + * @tc.expected: step3. check shared element in overlay + */ + LOGD("trigger frame for stage's transition build and prepare animation"); + platformWindowRaw_->TriggerOneFrame(); + GetTransitionGroupFromTransition(transitionB_); + GetTransitionGroupFromTransition(transitionA_); + auto& children = overlay_->GetChildren(); + EXPECT_EQ(2UL, children.size()); // Stage + SharedElement. + + /** + * @tc.steps: step4. do custom scale transition + * @tc.expected: step4. check custom scale transition and shared element removed from overlay + */ + CheckCustomScaleTransitionFrames(); + EXPECT_EQ(1UL, children.size()); // Stage + SharedElement. +} + +/** + * @tc.name: OneShotTransitionTest002 + * @tc.desc: test phone pop transition with shared element with default page transition parameters. + * @tc.type: FUNC + * @tc.require: AR000DQ2TV + * @tc.author: zhouzebin + */ +HWTEST_F(TransitionElementTest, OneShotTransitionTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. init tween option and push two pages with shared transition, exchange effect + */ + g_createPushComponent = CreatePushPageWithShared; + g_configPushTransition = nullptr; + PushPhoneTwoPages(); + + /** + * @tc.steps: step2. pop page while transition is done + * @tc.expected: step2. page pops up, transition is the reverse of the entrance, without the normal exit animation + */ + EXPECT_TRUE(context_->CanPopPage()); + context_->PopPage(); + platformWindowRaw_->TriggerOneFrame(); + auto& children = overlay_->GetChildren(); + EXPECT_EQ(2UL, children.size()); // Stage + SharedElement. + CheckPhonePopSharedTransitionFrame(); + EXPECT_EQ(1UL, children.size()); // Stage. +} + +/** + * @tc.name: OneShotTransitionTest003 + * @tc.desc: test watch pop transition with shared element with default page transition parameters. + * @tc.type: FUNC + * @tc.require: AR000DQ203 + * @tc.author: zhouzebin + */ +HWTEST_F(TransitionElementTest, OneShotTransitionTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. init tween option and build tween component + */ + g_createPushComponent = CreatePushPageWithShared; + g_configPushTransition = nullptr; + PushWatchTwoPages(); + + /** + * @tc.steps: step4. pop page while transition is done + * @tc.expected: step4. pop page success + */ + EXPECT_TRUE(context_->CanPopPage()); + context_->PopPage(); + auto& children = overlay_->GetChildren(); + EXPECT_EQ(1UL, children.size()); // Stage + SharedElement. + platformWindowRaw_->TriggerOneFrame(); + CheckWatchPopTransitionFrame(); + EXPECT_EQ(1UL, children.size()); // Stage. +} + +/** + * @tc.name: PushPageCardTransitionTest001 + * @tc.desc: test card container size and offset animation in card push transition. + * @tc.type: FUNC + * @tc.require: AR000F3C9H + * @tc.author: chenlien + */ +HWTEST_F(TransitionElementTest, PushPageCardTransitionTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. init card transition option + */ + g_rrect = RRect::MakeRRect(Rect(Offset(100.0, 100.0), Size(100.0, 100.0)), Radius(10.0)); + deviceType_ = DeviceType::PHONE; + frameTimeMs_ = 50; + InitCardClipTransition(TransitionEvent::PUSH_START); + InitEnvAndPushFirstComponent(); + + /** + * @tc.steps: step2. push page + * @tc.expected: step2. check push page success + */ + platformWindowRaw_->TriggerOneFrame(); + SwitchHookToTransition(transitionB_); + RefPtr page = AceType::DynamicCast(g_createPushComponent()); + context_->PushPage(page); + + /** + * @tc.steps: step3. trigger first frame to let transition go + */ + platformWindowRaw_->TriggerOneFrame(); + GetTransitionGroupFromTransition(transitionB_); + GetTransitionGroupFromTransition(transitionA_); + + /** + * @tc.steps: step4. do card transition + * @tc.expected: step4. check card container animation + */ + CheckPushPageClipFrames(); + frameTimeMs_ = FRAME_TIME_IN_MILLISECOND; +} + +/** + * @tc.name: PushPageCardTransitionTest002 + * @tc.desc: test Opacity animation in card push transition. + * @tc.type: FUNC + * @tc.require: AR000F3C9H + * @tc.author: chenlien + */ +HWTEST_F(TransitionElementTest, PushPageCardTransitionTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. init card transition option + */ + g_rrect = RRect::MakeRRect(Rect(Offset(100.0, 100.0), Size(100.0, 100.0)), Radius(10.0)); + deviceType_ = DeviceType::PHONE; + frameTimeMs_ = 50; + InitCardOpacityTransition(TransitionEvent::PUSH_START); + InitEnvAndPushFirstComponent(); + + /** + * @tc.steps: step2. push page + * @tc.expected: step2. check push page success + */ + platformWindowRaw_->TriggerOneFrame(); + SwitchHookToTransition(transitionB_); + RefPtr page = AceType::DynamicCast(g_createPushComponent()); + context_->PushPage(page); + + /** + * @tc.steps: step3. trigger first frame to let transition go + */ + platformWindowRaw_->TriggerOneFrame(); + GetTransitionGroupFromTransition(transitionB_); + GetTransitionGroupFromTransition(transitionA_); + + /** + * @tc.steps: step4. do card transition + * @tc.expected: step4. check opacity animation + */ + CheckPushPageCardOpacityFrames(); + frameTimeMs_ = FRAME_TIME_IN_MILLISECOND; +} + +/** + * @tc.name: PopPageCardTransitionTest001 + * @tc.desc: test clip size and offset animation in card pop transition. + * @tc.type: FUNC + * @tc.require: AR000F3CA6 + * @tc.author: chenlien + */ +HWTEST_F(TransitionElementTest, PopPageCardTransitionTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. init card transition and push two pages + */ + g_rrect = RRect::MakeRRect(Rect(Offset(100.0, 100.0), Size(100.0, 100.0)), Radius(10.0)); + frameTimeMs_ = 50; + deviceType_ = DeviceType::PHONE; + InitCardClipTransition(TransitionEvent::POP_START); + PushPhoneTwoPages(); + platformWindowRaw_->TriggerFrames(5); + + /** + * @tc.steps: step2. pop page while transition is done + * @tc.expected: step2. pop page success + */ + EXPECT_TRUE(context_->CanPopPage()); + context_->PopPage(); + platformWindowRaw_->TriggerOneFrame(); + + /** + * @tc.steps: step3. do card transition + * @tc.expected: step3. check clip animation + */ + CheckPopPageClipFrames(); + frameTimeMs_ = FRAME_TIME_IN_MILLISECOND; +} + +/** + * @tc.name: PopPageCardTransitionTest002 + * @tc.desc: test opacity animation in card pop transition. + * @tc.type: FUNC + * @tc.require: AR000F3CA6 + * @tc.author: chenlien + */ +HWTEST_F(TransitionElementTest, PopPageCardTransitionTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. init card transition and push two pages + */ + g_rrect = RRect::MakeRRect(Rect(Offset(100.0, 100.0), Size(100.0, 100.0)), Radius(10.0)); + frameTimeMs_ = 50; + deviceType_ = DeviceType::PHONE; + InitCardOpacityTransition(TransitionEvent::POP_START); + PushPhoneTwoPages(); + platformWindowRaw_->TriggerFrames(5); + /** + * @tc.steps: step2. pop page while transition is done + * @tc.expected: step2. pop page success + */ + EXPECT_TRUE(context_->CanPopPage()); + context_->PopPage(); + platformWindowRaw_->TriggerOneFrame(); + + /** + * @tc.steps: step3. do card transition + * @tc.expected: step3. check opacity animation + */ + CheckPopPageCardOpacityFrames(); + frameTimeMs_ = FRAME_TIME_IN_MILLISECOND; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/transition/transition_test_utils.cpp b/frameworks/core/components/test/unittest/transition/transition_test_utils.cpp new file mode 100644 index 00000000..7a1866a7 --- /dev/null +++ b/frameworks/core/components/test/unittest/transition/transition_test_utils.cpp @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "base/utils/system_properties.h" + +namespace OHOS::Ace { +namespace { +DeviceType g_deviceType = DeviceType::TV; +} + +bool SystemProperties::traceEnabled_ = false; + +void SystemProperties::InitDeviceType(DeviceType type) +{ + // Treat all other device type as phone. + g_deviceType = type; +} + +DeviceType SystemProperties::GetDeviceType() +{ + return g_deviceType; +} + +float SystemProperties::GetFontWeightScale() +{ + return 1.0f; +} +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/tween/BUILD.gn b/frameworks/core/components/test/unittest/tween/BUILD.gn new file mode 100644 index 00000000..b6138229 --- /dev/null +++ b/frameworks/core/components/test/unittest/tween/BUILD.gn @@ -0,0 +1,216 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/frameworkbasicability/tween" + +ohos_unittest("TweenElementTest") { + module_out_path = module_output_path + + sources = [ + "tween_element_test.cpp", + + # animation + "$ace_root/frameworks/core/animation/animator.cpp", + "$ace_root/frameworks/core/animation/anticipate_curve.cpp", + "$ace_root/frameworks/core/animation/cubic_curve.cpp", + "$ace_root/frameworks/core/animation/curves.cpp", + "$ace_root/frameworks/core/animation/friction_motion.cpp", + "$ace_root/frameworks/core/animation/scheduler.cpp", + "$ace_root/frameworks/core/animation/shared_transition_controller.cpp", + "$ace_root/frameworks/core/animation/shared_transition_effect.cpp", + "$ace_root/frameworks/core/animation/spring_animation.cpp", + "$ace_root/frameworks/core/animation/spring_model.cpp", + "$ace_root/frameworks/core/animation/spring_motion.cpp", + + #base + "$ace_root/adapter/common/cpp/thread_util.cpp", + "$ace_root/adapter/ohos/osal/log_wrapper.cpp", + "$ace_root/frameworks/base/geometry/matrix4.cpp", + "$ace_root/frameworks/base/json/json_util.cpp", + "$ace_root/frameworks/base/log/dump_log.cpp", + "$ace_root/frameworks/base/thread/background_task_executor.cpp", + "$ace_root/frameworks/base/utils/base_id.cpp", + + # common + "$ace_root/frameworks/core/common/ace_engine.cpp", + "$ace_root/frameworks/core/common/event_manager.cpp", + "$ace_root/frameworks/core/common/focus_animation_manager.cpp", + "$ace_root/frameworks/core/common/font_manager.cpp", + "$ace_root/frameworks/core/common/vibrator/vibrator_proxy.cpp", + "$ace_root/frameworks/core/common/window.cpp", + "$ace_root/frameworks/core/components/box/box_component.cpp", + "$ace_root/frameworks/core/components/display/display_component.cpp", + "$ace_root/frameworks/core/components/overlay/overlay_component.cpp", + "$ace_root/frameworks/core/components/page/page_component.cpp", + "$ace_root/frameworks/core/components/test/json/json_frontend.cpp", + "$ace_root/frameworks/core/pipeline/base/composed_component.cpp", + "$ace_root/frameworks/core/pipeline/pipeline_context.cpp", + + # components + "$ace_root/frameworks/core/components/root/root_component.cpp", + "$ace_root/frameworks/core/components/transform/transform_component.cpp", + "$ace_root/frameworks/core/components/tween/tween_component.cpp", + "$ace_root/frameworks/core/pipeline/base/component.cpp", + "$ace_root/frameworks/core/pipeline/base/component_group_element.cpp", + "$ace_root/frameworks/core/pipeline/base/composed_element.cpp", + + # elements + "$ace_root/frameworks/core/components/bubble/bubble_element.cpp", + "$ace_root/frameworks/core/components/dialog_modal/dialog_modal_element.cpp", + "$ace_root/frameworks/core/components/display/display_element.cpp", + "$ace_root/frameworks/core/components/overlay/overlay_element.cpp", + "$ace_root/frameworks/core/components/page/page_element.cpp", + "$ace_root/frameworks/core/components/page_transition/page_transition_element.cpp", + "$ace_root/frameworks/core/components/root/root_element.cpp", + "$ace_root/frameworks/core/components/semi_modal/semi_modal_element.cpp", + "$ace_root/frameworks/core/components/shared_transition/shared_transition_element.cpp", + "$ace_root/frameworks/core/components/stack/stack_element.cpp", + "$ace_root/frameworks/core/components/stage/stage_element.cpp", + "$ace_root/frameworks/core/components/transform/transform_element.cpp", + "$ace_root/frameworks/core/components/transition/transition_element.cpp", + "$ace_root/frameworks/core/components/tween/tween_element.cpp", + "$ace_root/frameworks/core/pipeline/base/element.cpp", + "$ace_root/frameworks/core/pipeline/base/render_element.cpp", + "$ace_root/frameworks/core/pipeline/base/sole_child_element.cpp", + + # event + "$ace_root/frameworks/core/event/back_end_event_manager.cpp", + "$ace_root/frameworks/core/event/multimodal/multimodal_manager.cpp", + "$ace_root/frameworks/core/event/multimodal/multimodal_scene.cpp", + + # focus + "$ace_root/frameworks/core/focus/focus_node.cpp", + "$ace_root/frameworks/core/gestures/drag_recognizer.cpp", + "$ace_root/frameworks/core/gestures/gesture_recognizer.cpp", + "$ace_root/frameworks/core/gestures/gesture_referee.cpp", + + # gestures + "$ace_root/frameworks/core/gestures/velocity_tracker.cpp", + + # image + "$ace_root/frameworks/core/image/image_cache.cpp", + + # layout + "$ace_root/frameworks/core/components/common/layout/grid_column_info.cpp", + "$ace_root/frameworks/core/components/common/layout/grid_container_info.cpp", + "$ace_root/frameworks/core/components/common/layout/grid_system_manager.cpp", + + # others + "$ace_root/frameworks/core/components/box/render_box.cpp", + "$ace_root/frameworks/core/components/box/render_box_base.cpp", + "$ace_root/frameworks/core/components/common/properties/alignment.cpp", + "$ace_root/frameworks/core/components/common/properties/border.cpp", + "$ace_root/frameworks/core/components/common/properties/border_edge.cpp", + "$ace_root/frameworks/core/components/common/properties/color.cpp", + "$ace_root/frameworks/core/components/common/properties/decoration.cpp", + "$ace_root/frameworks/core/components/common/properties/edge.cpp", + "$ace_root/frameworks/core/components/common/properties/page_transition_option.cpp", + "$ace_root/frameworks/core/components/common/properties/scroll_bar.cpp", + "$ace_root/frameworks/core/components/common/properties/text_style.cpp", + "$ace_root/frameworks/core/components/display/render_display.cpp", + "$ace_root/frameworks/core/components/focus_animation/render_focus_animation.cpp", + + # rendering + "$ace_root/frameworks/core/components/bubble/render_bubble.cpp", + "$ace_root/frameworks/core/components/clip/render_clip.cpp", + "$ace_root/frameworks/core/components/dialog_modal/render_dialog_modal.cpp", + "$ace_root/frameworks/core/components/drag_bar/render_drag_bar.cpp", + "$ace_root/frameworks/core/components/positioned/render_positioned.cpp", + "$ace_root/frameworks/core/components/proxy/render_proxy.cpp", + "$ace_root/frameworks/core/components/refresh/render_refresh.cpp", + "$ace_root/frameworks/core/components/root/render_root.cpp", + "$ace_root/frameworks/core/components/scroll/render_multi_child_scroll.cpp", + "$ace_root/frameworks/core/components/scroll/render_scroll.cpp", + "$ace_root/frameworks/core/components/scroll/render_single_child_scroll.cpp", + "$ace_root/frameworks/core/components/scroll/scroll_bar_controller.cpp", + "$ace_root/frameworks/core/components/scroll/scrollable.cpp", + "$ace_root/frameworks/core/components/semi_modal/render_semi_modal.cpp", + "$ace_root/frameworks/core/components/stack/render_stack.cpp", + "$ace_root/frameworks/core/components/stage/render_stage.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/mock_flutter_font_manager.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/mock_render_node_factory.cpp", + "$ace_root/frameworks/core/pipeline/base/render_node.cpp", + + # theme + "$ace_root/frameworks/core/components/theme/app_theme.cpp", + "$ace_root/frameworks/core/components/theme/theme_attributes.cpp", + "$ace_root/frameworks/core/components/theme/theme_constants.cpp", + "$ace_root/frameworks/core/components/theme/theme_manager.cpp", + "$ace_root/frameworks/core/components/theme/theme_utils.cpp", + "$root_out_dir/ace/framework/core/components/theme/theme_constants_default.cpp", + + #mock + "$ace_root/frameworks/core/components/test/unittest/mock/ace_trace_mock.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/event_report_mock.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/render_mock.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/semi_modal_mock.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/transform_mock.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/tween_mock.cpp", + "$ace_root/frameworks/core/mock/mock_ace_application_info.cpp", + "$ace_root/frameworks/core/mock/mock_system_properties.cpp", + "$ace_root/frameworks/core/mock/mock_watch_dog.cpp", + ] + + # add sources only needed by wearable like watch. + if (is_wearable_product) { + sources += [ "$root_out_dir/ace/framework/core/components/theme/theme_constants_watch.cpp" ] + } + + # add sources needed by phone and TV. wearable like watch do not need them + if (!is_wearable_product) { + sources += [ + # theme + "$root_out_dir/ace/framework/core/components/theme/theme_constants_tv.cpp", + ] + } + + configs = [ + "$ace_root/frameworks/base:ace_base_config", + "$ace_root:ace_test_config", + ":config_tween_element_test", + "$flutter_root:flutter_config", + "//third_party/cJSON:cJSON_config", + ] + + deps = [ + "$ace_root:third_party_cjson", + "$ace_root/frameworks/core/components/theme:build_theme_code", + "$flutter_root:ace_skia_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + external_deps = [ "hiviewdfx_hilog_native:libhilog" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_tween_element_test") { + visibility = [ ":*" ] + include_dirs = [ + "//utils/native/base/include", + "$ace_root", + ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":TweenElementTest" ] +} diff --git a/frameworks/core/components/test/unittest/tween/tween_element_test.cpp b/frameworks/core/components/test/unittest/tween/tween_element_test.cpp new file mode 100644 index 00000000..bff630d1 --- /dev/null +++ b/frameworks/core/components/test/unittest/tween/tween_element_test.cpp @@ -0,0 +1,1595 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "adapter/ohos/osal/fake_asset_manager.h" +#include "adapter/ohos/osal/fake_task_executor.h" +#include "base/log/log.h" +#include "core/animation/card_transition_controller.h" +#include "core/animation/curve_animation.h" +#include "core/animation/keyframe_animation.h" +#include "core/components/box/box_component.h" +#include "core/components/test/json/json_frontend.h" +#include "core/components/test/unittest/mock/render_mock.h" +#include "core/components/test/unittest/mock/transform_mock.h" +#include "core/components/test/unittest/mock/tween_mock.h" +#include "core/components/test/unittest/mock/window_mock.h" +#include "core/components/tween/tween_component.h" +#include "core/components/tween/tween_element.h" +#include "core/mock/mock_resource_register.h" +#include "core/pipeline/pipeline_context.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { + +CardTransitionController::CardTransitionController(const WeakPtr& context) {}; + +void CardTransitionController::RegisterTransitionListener() {}; + +RRect CardTransitionController::GetCardRect(const ComposeId& composeId) const +{ + return RRect(); +} + +namespace { + +constexpr int32_t NANOSECOND_TO_MILLISECOND = 1000000; +constexpr int32_t FRAME_TIME_IN_MILLISECOND = 10; +constexpr int32_t TEST_SURFACE_WIDTH = 1080; +constexpr int32_t TEST_SURFACE_HEIGHT = 1920; +constexpr float ABS_ERROR = 0.1f; +using ConfigTweenComponent = std::function&)>; +ConfigTweenComponent g_configTweenComponent; + +void CreateScaleTweenKeyFrame(TweenOption& tweenOption, float begin, float end) +{ + auto keyframe1 = AceType::MakeRefPtr>(0.0f, begin); + auto keyframe2 = AceType::MakeRefPtr>(1.0f, end); + auto scale = AceType::MakeRefPtr>(); + scale->AddKeyframe(keyframe1); + scale->AddKeyframe(keyframe2); + tweenOption.SetTransformFloatAnimation(AnimationType::SCALE, scale); +} + +} // namespace + +class TweenElementTest : public testing::Test { +public: + static void SetUpTestCase() + { + GTEST_LOG_(INFO) << "TweenElementTest SetUpTestCase"; + } + + static void TearDownTestCase() + { + GTEST_LOG_(INFO) << "TweenElementTest TearDownTestCase"; + } + + void SetUp() override + { + MockRenderDisplay::SetMockHook( + [this](const RefPtr& displayRender) { displayRender_ = displayRender; }); + MockTweenComponent::SetMockHook( + [this](const RefPtr& tweenElement) { tweenElement_ = tweenElement; }); + MockRenderTransform::SetMockHook( + [this](const RefPtr& transformRender) { transformRender_ = transformRender; }); + } + + void TearDown() override {} + + void CreateAndBuildTweenComponent() + { + std::unique_ptr platformWindow = TweenTestUtils::CreatePlatformWindow(); + platformWindowRaw_ = reinterpret_cast(platformWindow.get()); + auto window = TweenTestUtils::CreateWindow(std::move(platformWindow)); + auto taskExecutor = AceType::MakeRefPtr(); + auto assetManager = Referenced::MakeRefPtr(); + auto resRegister = Referenced::MakeRefPtr(); + RefPtr frontend = Frontend::CreateDefault(); + context_ = AceType::MakeRefPtr( + std::move(window), taskExecutor, assetManager, resRegister, frontend, 0); + context_->SetTimeProvider( + [this] { return this->platformWindowRaw_->GetCurrentTimestampNano() + NANOSECOND_TO_MILLISECOND * 10; }); + + boxComponent_ = AceType::MakeRefPtr(); + boxComponent_->SetWidth(TEST_SURFACE_WIDTH); + boxComponent_->SetHeight(TEST_SURFACE_HEIGHT); + boxComponent_->SetColor(Color::WHITE); + tweenComponent_ = AceType::MakeRefPtr("test_tween_id", "tween component", boxComponent_); + if (g_configTweenComponent) { + tweenComponent_->SetTweenOperation(TweenOperation::PLAY); + g_configTweenComponent(tweenComponent_); + } + auto pageComponent = AceType::MakeRefPtr(0, tweenComponent_); + + context_->SetupRootElement(); + context_->PushPage(pageComponent); + context_->OnSurfaceChanged(TEST_SURFACE_WIDTH, TEST_SURFACE_HEIGHT); + + platformWindowRaw_->SetNanoFrameTime(NANOSECOND_TO_MILLISECOND * frameTimeMs_); + } + +protected: + RefPtr context_; + uint32_t frameTimeMs_ = FRAME_TIME_IN_MILLISECOND; + MockPlatformWindow* platformWindowRaw_ = nullptr; + RefPtr transformRender_; + RefPtr displayRender_; + RefPtr tweenElement_; + RefPtr tweenComponent_; + RefPtr boxComponent_; +}; + +/** + * @tc.name: TweenScaleTest001 + * @tc.desc: test scale animation in tween. + * @tc.type: FUNC + * @tc.require: AR000DAUL3 + * @tc.author: zhouzebin + */ +HWTEST_F(TweenElementTest, TweenScaleTest001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TweenElementTest TweenScaleTest001"; + /** + * @tc.steps: step1. init tween option and build tween component + */ + g_configTweenComponent = [](const RefPtr& tweenComponent) { + TweenOption tweenOption; + CreateScaleTweenKeyFrame(tweenOption, 1.0f, 4.0f); + tweenOption.SetDuration(15); + tweenOption.SetCurve(Curves::LINEAR); + tweenOption.SetFillMode(FillMode::FORWARDS); + tweenComponent->SetTweenOption(tweenOption); + }; + CreateAndBuildTweenComponent(); + + /** + * @tc.steps: step2. trigger frames to let animation go + * @tc.expected: step2. verify set curve taking effect + */ + platformWindowRaw_->TriggerOneFrame(); + float scale = 0.0f; + platformWindowRaw_->TriggerOneFrame(); + transformRender_->GetScaleSetting(scale); + EXPECT_NEAR(scale, 3.0f, FLT_EPSILON); + + /** + * @tc.steps: step3. trigger last frame + * @tc.expected: step3. check the final value + */ + platformWindowRaw_->TriggerOneFrame(); + transformRender_->GetScaleSetting(scale); + EXPECT_NEAR(scale, 4.0f, FLT_EPSILON); +} + +/** + * @tc.name: TweenBackgroundPositionTest001 + * @tc.desc: test background position animation in tween. + * @tc.type: FUNC + * @tc.require: AR000DQ20H + * @tc.author: zhouzebin + */ +HWTEST_F(TweenElementTest, TweenBackgroundPositionTest001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TweenElementTest TweenBackgroundPositionTest001"; + /** + * @tc.steps: step1. init tween option and build tween component + */ + BackgroundImagePosition backgroundImagePositionBegin = + BackgroundImagePosition(BackgroundImagePositionType::PERCENT, 0, BackgroundImagePositionType::PX, 0); + BackgroundImagePosition backgroundImagePositionEnd = + BackgroundImagePosition(BackgroundImagePositionType::PERCENT, 100, BackgroundImagePositionType::PX, 50); + g_configTweenComponent = [backgroundImagePositionBegin, backgroundImagePositionEnd]( + const RefPtr& tweenComponent) { + TweenOption tweenOption; + auto backgroundPosition = AceType::MakeRefPtr>( + backgroundImagePositionBegin, backgroundImagePositionEnd, Curves::LINEAR); + tweenOption.SetBackgroundPositionAnimation(backgroundPosition); + tweenOption.SetDuration(20); + tweenOption.SetFillMode(FillMode::FORWARDS); + tweenComponent->SetTweenOption(tweenOption); + }; + CreateAndBuildTweenComponent(); + + /** + * @tc.steps: step2. trigger frames to let animation go + * @tc.expected: step2. verify set curve taking effect + */ + platformWindowRaw_->TriggerOneFrame(); + auto box = AceType::DynamicCast(tweenElement_->GetContentRender()); + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(box->GetBackgroundPositionPublic(), (backgroundImagePositionEnd + backgroundImagePositionBegin) * 0.5); + + /** + * @tc.steps: step3. trigger last frame + * @tc.expected: step3. check the final value + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(box->GetBackgroundPositionPublic(), backgroundImagePositionEnd); +} + +/** + * @tc.name: TweenElementPauseTest001 + * @tc.desc: test pause operation in tween with duration equals 0. + * @tc.type: FUNC + * @tc.require: AR000DSB28 + * @tc.author: zhouzebin + */ +HWTEST_F(TweenElementTest, PauseTest001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TweenElementTest PauseTest001"; + /** + * @tc.steps: step1. init tween option and build tween component + */ + g_configTweenComponent = [](const RefPtr& tweenComponent) { + TweenOption tweenOption; + CreateScaleTweenKeyFrame(tweenOption, 1.0f, 4.0f); + tweenOption.SetDuration(0); + tweenOption.SetFillMode(FillMode::FORWARDS); + tweenComponent->SetTweenOption(tweenOption); + tweenComponent->SetTweenOperation(TweenOperation::PAUSE); + }; + CreateAndBuildTweenComponent(); + + /** + * @tc.steps: step2. trigger frames to let animation done + * @tc.expected: step2. check the final value + */ + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + float scale = 0.0f; + transformRender_->GetScaleSetting(scale); + EXPECT_NEAR(scale, 1.0f, FLT_EPSILON); +} + +/** + * @tc.name: TweenElementCancelTest001 + * @tc.desc: test cancel operation in tween with duration equals 0. + * @tc.type: FUNC + * @tc.require: AR000DSB29 + * @tc.author: zhouzebin + */ +HWTEST_F(TweenElementTest, CancelTest001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TweenElementTest CancelTest001"; + /** + * @tc.steps: step1. init tween option and build tween component + */ + g_configTweenComponent = [](const RefPtr& tweenComponent) { + TweenOption tweenOption; + CreateScaleTweenKeyFrame(tweenOption, 0.5f, 4.0f); + tweenOption.SetDuration(0); + tweenOption.SetFillMode(FillMode::FORWARDS); + tweenComponent->SetTweenOption(tweenOption); + tweenComponent->SetTweenOperation(TweenOperation::CANCEL); + }; + CreateAndBuildTweenComponent(); + + /** + * @tc.steps: step2. trigger frames to let animation done + * @tc.expected: step2. check the final value + */ + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + float scale = 0.0f; + transformRender_->GetScaleSetting(scale); + EXPECT_NEAR(scale, 1.0f, FLT_EPSILON); +} + +/** + * @tc.name: TweenElementDurationTest001 + * @tc.desc: test negative duration value in tween. + * @tc.type: FUNC + * @tc.require: AR000DAUL1 + * @tc.author: chenlien + */ +HWTEST_F(TweenElementTest, DurationTest001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TweenElementTest DurationTest001"; + /** + * @tc.steps: step1. init tween option and build tween component + */ + g_configTweenComponent = [](const RefPtr& tweenComponent) { + TweenOption tweenOption; + auto scale = AceType::MakeRefPtr>(1.0f, 5.0f, nullptr); + tweenOption.SetTransformFloatAnimation(AnimationType::SCALE, scale); + tweenOption.SetDuration(-4); + tweenOption.SetFillMode(FillMode::FORWARDS); + tweenComponent->SetTweenOption(tweenOption); + }; + CreateAndBuildTweenComponent(); + + /** + * @tc.steps: step2. trigger frames to let animation done + * @tc.expected: step2. check the final value + */ + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + float scale = 0.0f; + transformRender_->GetScaleSetting(scale); + EXPECT_NEAR(scale, 5.0f, FLT_EPSILON); +} + +/** + * @tc.name: TweenElementDurationTest002 + * @tc.desc: test normal duration value in tween. + * @tc.type: FUNC + * @tc.require: AR000DAUL1 + * @tc.author: chenlien + */ +HWTEST_F(TweenElementTest, DurationTest002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TweenElementTest DurationTest002"; + /** + * @tc.steps: step1. init tween option and build tween component + */ + g_configTweenComponent = [](const RefPtr& tweenComponent) { + TweenOption tweenOption; + CreateScaleTweenKeyFrame(tweenOption, 1.0f, 5.0f); + tweenOption.SetDuration(8); + tweenOption.SetFillMode(FillMode::FORWARDS); + tweenComponent->SetTweenOption(tweenOption); + }; + CreateAndBuildTweenComponent(); + + /** + * @tc.steps: step2. trigger frames to let animation done + * @tc.expected: step2. check the final value + */ + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + float scale = 0.0f; + transformRender_->GetScaleSetting(scale); + EXPECT_NEAR(scale, 5.0f, FLT_EPSILON); +} + +/** + * @tc.name: TweenElementDelayTest001 + * @tc.desc: test negative delay value in tween. + * @tc.type: FUNC + * @tc.require: AR000DAUL1 + * @tc.author: chenlien + */ +HWTEST_F(TweenElementTest, DelayTest001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TweenElementTest DelayTest001"; + /** + * @tc.steps: step1. init tween option and build tween component + */ + g_configTweenComponent = [](const RefPtr& tweenComponent) { + TweenOption tweenOption; + auto scale = AceType::MakeRefPtr>(1.0f, 5.0f, nullptr); + tweenOption.SetTransformFloatAnimation(AnimationType::SCALE, scale); + tweenOption.SetDuration(8); + tweenOption.SetDelay(-1); + tweenOption.SetFillMode(FillMode::FORWARDS); + tweenComponent->SetTweenOption(tweenOption); + }; + CreateAndBuildTweenComponent(); + + /** + * @tc.steps: step2. trigger frames to let animation done + * @tc.expected: step2. check the final value + */ + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + float scale = 0.0f; + transformRender_->GetScaleSetting(scale); + EXPECT_NEAR(scale, 5.0f, FLT_EPSILON); +} + +/** + * @tc.name: TweenElementDelayTest002 + * @tc.desc: test normal delay value in tween. + * @tc.type: FUNC + * @tc.require: AR000DAUL1 + * @tc.author: chenlien + */ +HWTEST_F(TweenElementTest, DelayTest002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TweenElementTest DelayTest002"; + /** + * @tc.steps: step1. init tween option and build tween component + */ + g_configTweenComponent = [](const RefPtr& tweenComponent) { + TweenOption tweenOption; + auto scale = AceType::MakeRefPtr>(1.0f, 5.0f, nullptr); + tweenOption.SetTransformFloatAnimation(AnimationType::SCALE, scale); + tweenOption.SetDuration(8); + tweenOption.SetDelay(12); + tweenOption.SetCurve(Curves::LINEAR); + tweenOption.SetFillMode(FillMode::FORWARDS); + tweenComponent->SetTweenOption(tweenOption); + }; + CreateAndBuildTweenComponent(); + + /** + * @tc.steps: step2. trigger frames to let animation done + * @tc.expected: step2. check the final value + */ + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + float scale = 0.0f; + transformRender_->GetScaleSetting(scale); + EXPECT_NEAR(scale, 1.0f, FLT_EPSILON); + platformWindowRaw_->TriggerOneFrame(); + transformRender_->GetScaleSetting(scale); + EXPECT_NEAR(scale, 5.0f, FLT_EPSILON); +} + +/** + * @tc.name: TweenElementRepeatTest001 + * @tc.desc: test repeatTimes value in tween. + * @tc.type: FUNC + * @tc.require: AR000DAUL1 + * @tc.author: chenlien + */ +HWTEST_F(TweenElementTest, RepeatTest001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TweenElementTest RepeatTest001"; + /** + * @tc.steps: step1. init tween option and build tween component + */ + g_configTweenComponent = [](const RefPtr& tweenComponent) { + TweenOption tweenOption; + auto scale = AceType::MakeRefPtr>(1.0f, 5.0f, nullptr); + tweenOption.SetTransformFloatAnimation(AnimationType::SCALE, scale); + tweenOption.SetDuration(8); + tweenOption.SetIteration(2); + tweenOption.SetCurve(Curves::LINEAR); + tweenOption.SetFillMode(FillMode::FORWARDS); + tweenComponent->SetTweenOption(tweenOption); + }; + CreateAndBuildTweenComponent(); + + /** + * @tc.steps: step2. trigger frames to let animation done + * @tc.expected: step2. check the final value + */ + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + float scale = 0.0; + transformRender_->GetScaleSetting(scale); + EXPECT_NE(scale, 5.0f); + platformWindowRaw_->TriggerOneFrame(); + transformRender_->GetScaleSetting(scale); + EXPECT_NEAR(scale, 5.0f, FLT_EPSILON); +} + +/** + * @tc.name: TweenElementRepeatTest002 + * @tc.desc: test repeateTimes value in tween. + * @tc.type: FUNC + * @tc.require: AR000DAUL1 + * @tc.author: chenlien + */ +HWTEST_F(TweenElementTest, RepeatTest002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TweenElementTest RepeatTest002"; + /** + * @tc.steps: step1. init tween option and build tween component + */ + g_configTweenComponent = [](const RefPtr& tweenComponent) { + TweenOption tweenOption; + auto scale = AceType::MakeRefPtr>(1.0f, 5.0f, Curves::LINEAR); + tweenOption.SetTransformFloatAnimation(AnimationType::SCALE, scale); + tweenOption.SetDuration(8); + tweenOption.SetIteration(-1); + tweenOption.SetFillMode(FillMode::FORWARDS); + tweenComponent->SetTweenOption(tweenOption); + }; + CreateAndBuildTweenComponent(); + + /** + * @tc.steps: step2. trigger frames to let animation done + * @tc.expected: step2. check the final value + */ + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + float scale = 0.0f; + transformRender_->GetScaleSetting(scale); + EXPECT_NE(scale, 5.0f); + platformWindowRaw_->TriggerOneFrame(); + transformRender_->GetScaleSetting(scale); + EXPECT_NE(scale, 5.0f); + platformWindowRaw_->TriggerOneFrame(); + transformRender_->GetScaleSetting(scale); + EXPECT_NE(scale, 5.0f); +} + +/** + * @tc.name: TweenElementRepeatTest003 + * @tc.desc: test repeateTimes value in tween. + * @tc.type: FUNC + * @tc.require: AR000DAUL1 + * @tc.author: chenlien + */ +HWTEST_F(TweenElementTest, RepeatTest003, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TweenElementTest RepeatTest003"; + /** + * @tc.steps: step1. init tween option and build tween component + */ + g_configTweenComponent = [](const RefPtr& tweenComponent) { + TweenOption tweenOption; + auto scale = AceType::MakeRefPtr>(1.0f, 5.0f, nullptr); + tweenOption.SetTransformFloatAnimation(AnimationType::SCALE, scale); + tweenOption.SetDuration(8); + tweenOption.SetIteration(-3); + tweenOption.SetCurve(Curves::LINEAR); + tweenOption.SetFillMode(FillMode::FORWARDS); + tweenComponent->SetTweenOption(tweenOption); + }; + CreateAndBuildTweenComponent(); + + /** + * @tc.steps: step2. trigger frames to let animation done + * @tc.expected: step2. check the final value + */ + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + float scale = 0.0f; + transformRender_->GetScaleSetting(scale); + EXPECT_NEAR(scale, 5.0f, FLT_EPSILON); + platformWindowRaw_->TriggerOneFrame(); + transformRender_->GetScaleSetting(scale); + EXPECT_NEAR(scale, 5.0f, FLT_EPSILON); +} + +/** + * @tc.name: TweenElementCurveTest001 + * @tc.desc: test curves value in tween. + * @tc.type: FUNC + * @tc.require: AR000DAUL1 + * @tc.author: chenlien + */ +HWTEST_F(TweenElementTest, CurveTest001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TweenElementTest CurveTest001"; + /** + * @tc.steps: step1. init tween option and build tween component + */ + g_configTweenComponent = [](const RefPtr& tweenComponent) { + TweenOption tweenOption; + auto scale = AceType::MakeRefPtr>(1.0f, 5.0f, nullptr); + tweenOption.SetTransformFloatAnimation(AnimationType::SCALE, scale); + tweenOption.SetDuration(20); + tweenOption.SetCurve(Curves::LINEAR); + tweenOption.SetFillMode(FillMode::FORWARDS); + tweenComponent->SetTweenOption(tweenOption); + }; + CreateAndBuildTweenComponent(); + + /** + * @tc.steps: step2. trigger frames to let animation done + * @tc.expected: step2. check the final value + */ + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + float scale = 0.0f; + transformRender_->GetScaleSetting(scale); + EXPECT_NEAR(scale, 3.0f, FLT_EPSILON); + platformWindowRaw_->TriggerOneFrame(); + transformRender_->GetScaleSetting(scale); + EXPECT_NEAR(scale, 5.0f, FLT_EPSILON); +} + +/** + * @tc.name: TweenElementCurveTest002 + * @tc.desc: test curves value in tween. + * @tc.type: FUNC + * @tc.require: AR000DAUL1 + * @tc.author: chenlien + */ +HWTEST_F(TweenElementTest, CurveTest002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TweenElementTest CurveTest002"; + /** + * @tc.steps: step1. init tween option and build tween component + */ + g_configTweenComponent = [](const RefPtr& tweenComponent) { + TweenOption tweenOption; + CreateScaleTweenKeyFrame(tweenOption, 1.0f, 5.0f); + tweenOption.SetDuration(20); + tweenOption.SetFillMode(FillMode::FORWARDS); + tweenComponent->SetTweenOption(tweenOption); + }; + CreateAndBuildTweenComponent(); + + /** + * @tc.steps: step2. trigger frames to let animation done + * @tc.expected: step2. check the final value + */ + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + float scale = 0.0f; + transformRender_->GetScaleSetting(scale); + EXPECT_LE(scale, 4.20797f); + EXPECT_GE(scale, 4.20796f); + platformWindowRaw_->TriggerOneFrame(); + transformRender_->GetScaleSetting(scale); + EXPECT_NEAR(scale, 5.0f, FLT_EPSILON); +} + +/** + * @tc.name: TweenElementCurveTest003 + * @tc.desc: test curves value in tween. + * @tc.type: FUNC + * @tc.require: AR000DAUL1 + * @tc.author: chenlien + */ +HWTEST_F(TweenElementTest, CurveTest003, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TweenElementTest CurveTest003"; + /** + * @tc.steps: step1. init tween option and build tween component + */ + g_configTweenComponent = [](const RefPtr& tweenComponent) { + TweenOption tweenOption; + CreateScaleTweenKeyFrame(tweenOption, 1.0f, 5.0f); + tweenOption.SetDuration(20); + tweenOption.SetCurve(Curves::EASE_IN); + tweenOption.SetFillMode(FillMode::FORWARDS); + tweenComponent->SetTweenOption(tweenOption); + }; + CreateAndBuildTweenComponent(); + + /** + * @tc.steps: step2. trigger frames to let animation done + * @tc.expected: step2. check the final value + */ + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + float scale = 0.0f; + transformRender_->GetScaleSetting(scale); + EXPECT_LE(scale, 2.26563f); + EXPECT_GE(scale, 2.26562f); + platformWindowRaw_->TriggerOneFrame(); + transformRender_->GetScaleSetting(scale); + EXPECT_NEAR(scale, 5.0f, FLT_EPSILON); +} + +/** + * @tc.name: TweenElementCurveTest004 + * @tc.desc: test curves value in tween. + * @tc.type: FUNC + * @tc.require: AR000DAUL1 + * @tc.author: chenlien + */ +HWTEST_F(TweenElementTest, CurveTest004, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TweenElementTest CurveTest004"; + /** + * @tc.steps: step1. init tween option and build tween component + */ + g_configTweenComponent = [](const RefPtr& tweenComponent) { + TweenOption tweenOption; + auto scale = AceType::MakeRefPtr>(1.0f, 5.0f, nullptr); + tweenOption.SetTransformFloatAnimation(AnimationType::SCALE, scale); + tweenOption.SetDuration(20); + tweenOption.SetCurve(Curves::EASE_OUT); + tweenOption.SetFillMode(FillMode::FORWARDS); + tweenComponent->SetTweenOption(tweenOption); + }; + CreateAndBuildTweenComponent(); + + /** + * @tc.steps: step2. trigger frames to let animation done + * @tc.expected: step2. check the final value + */ + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + float scale = 0.0f; + transformRender_->GetScaleSetting(scale); + EXPECT_LE(scale, 3.73439f); + EXPECT_GE(scale, 3.73437f); + platformWindowRaw_->TriggerOneFrame(); + transformRender_->GetScaleSetting(scale); + EXPECT_NEAR(scale, 5.0f, FLT_EPSILON); +} + +/** + * @tc.name: TweenElementCurveTest005 + * @tc.desc: test curves value in tween. + * @tc.type: FUNC + * @tc.require: AR000DAUL1 + * @tc.author: chenlien + */ +HWTEST_F(TweenElementTest, CurveTest005, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TweenElementTest CurveTest005"; + /** + * @tc.steps: step1. init tween option and build tween component + */ + g_configTweenComponent = [](const RefPtr& tweenComponent) { + TweenOption tweenOption; + auto scale = AceType::MakeRefPtr>(1.0f, 5.0f, nullptr); + tweenOption.SetTransformFloatAnimation(AnimationType::SCALE, scale); + tweenOption.SetDuration(20); + tweenOption.SetCurve(Curves::EASE_IN_OUT); + tweenOption.SetFillMode(FillMode::FORWARDS); + tweenComponent->SetTweenOption(tweenOption); + }; + CreateAndBuildTweenComponent(); + + /** + * @tc.steps: step2. trigger frames to let animation done + * @tc.expected: step2. check the final value + */ + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + float scale = 0.0f; + transformRender_->GetScaleSetting(scale); + EXPECT_NEAR(scale, 3.0f, FLT_EPSILON); + platformWindowRaw_->TriggerOneFrame(); + transformRender_->GetScaleSetting(scale); + EXPECT_NEAR(scale, 5.0f, FLT_EPSILON); +} + +/** + * @tc.name: TweenElementFillModeTest001 + * @tc.desc: test fillMode value in tween. + * @tc.type: FUNC + * @tc.require: AR000DAUL2 + * @tc.author: chenlien + */ +HWTEST_F(TweenElementTest, FillModeTest001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TweenElementTest FillModeTest001"; + /** + * @tc.steps: step1. init tween option and build tween component + */ + g_configTweenComponent = [](const RefPtr& tweenComponent) { + TweenOption tweenOption; + auto scale = AceType::MakeRefPtr>(1.0f, 5.0f, nullptr); + tweenOption.SetTransformFloatAnimation(AnimationType::SCALE, scale); + tweenOption.SetDuration(20); + tweenOption.SetCurve(Curves::LINEAR); + tweenOption.SetFillMode(FillMode::NONE); + tweenComponent->SetTweenOption(tweenOption); + }; + CreateAndBuildTweenComponent(); + + /** + * @tc.steps: step2. trigger frames to let animation done + * @tc.expected: step2. check the final value + */ + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + float scale = 0.0f; + transformRender_->GetScaleSetting(scale); + EXPECT_NEAR(scale, 3.0f, FLT_EPSILON); + platformWindowRaw_->TriggerOneFrame(); + transformRender_->GetScaleSetting(scale); + EXPECT_NEAR(scale, 1.0f, FLT_EPSILON); +} + +/** + * @tc.name: TweenElementFillModeTest002 + * @tc.desc: test fillMode value in tween. + * @tc.type: FUNC + * @tc.require: AR000DAUL2 + * @tc.author: chenlien + */ +HWTEST_F(TweenElementTest, FillModeTest002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TweenElementTest FillModeTest002"; + /** + * @tc.steps: step1. init tween option and build tween component + */ + g_configTweenComponent = [](const RefPtr& tweenComponent) { + TweenOption tweenOption; + auto scale = AceType::MakeRefPtr>(1.0f, 5.0f, nullptr); + tweenOption.SetTransformFloatAnimation(AnimationType::SCALE, scale); + tweenOption.SetDuration(8); + tweenOption.SetFillMode(FillMode::FORWARDS); + tweenComponent->SetTweenOption(tweenOption); + }; + CreateAndBuildTweenComponent(); + + /** + * @tc.steps: step2. trigger frames to let animation done + * @tc.expected: step2. check the final value + */ + float scale = 0.0f; + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + transformRender_->GetScaleSetting(scale); + EXPECT_NEAR(scale, 5.0f, FLT_EPSILON); + platformWindowRaw_->TriggerOneFrame(); + transformRender_->GetScaleSetting(scale); + EXPECT_NEAR(scale, 5.0f, FLT_EPSILON); +} + +/** + * @tc.name: TweenElementFillModeTest003 + * @tc.desc: test fillMode value in tween, fillMode is backwards. + * @tc.type: FUNC + * @tc.require: AR000FL0VL + * @tc.author: jiangdayuan + */ +HWTEST_F(TweenElementTest, FillModeTest003, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TweenElementTest FillModeTest003"; + /** + * @tc.steps: step1. init tween option and build tween component + */ + g_configTweenComponent = [](const RefPtr& tweenComponent) { + TweenOption tweenOption; + auto scale = AceType::MakeRefPtr>(1.0f, 5.0f, Curves::LINEAR); + scale->SetInitValue(0.5f); + tweenOption.SetTransformFloatAnimation(AnimationType::SCALE, scale); + tweenOption.SetDuration(20); + tweenOption.SetDelay(10); + tweenOption.SetFillMode(FillMode::BACKWARDS); + tweenComponent->SetTweenOption(tweenOption); + }; + CreateAndBuildTweenComponent(); + + /** + * @tc.steps: step2. trigger frames to let animation done + * @tc.expected: step2. check the start value and end value + */ + float scale = 0.0f; + platformWindowRaw_->TriggerOneFrame(); + transformRender_->GetScaleSetting(scale); + EXPECT_NEAR(scale, 1.0f, FLT_EPSILON); + + // In the start delay time, the animation is at the begin value + platformWindowRaw_->TriggerOneFrame(); + transformRender_->GetScaleSetting(scale); + EXPECT_NEAR(scale, 1.0f, FLT_EPSILON); + + platformWindowRaw_->TriggerOneFrame(); + transformRender_->GetScaleSetting(scale); + EXPECT_NEAR(scale, 3.0f, FLT_EPSILON); + + // Return to the init value when the animation is over + platformWindowRaw_->TriggerOneFrame(); + transformRender_->GetScaleSetting(scale); + EXPECT_NEAR(scale, 0.5f, FLT_EPSILON); +} + +/** + * @tc.name: TweenElementFillModeTest004 + * @tc.desc: test fillMode value in tween, fillMode is both. + * @tc.type: FUNC + * @tc.require: AR000FL0VL + * @tc.author: jiangdayuan + */ +HWTEST_F(TweenElementTest, FillModeTest004, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TweenElementTest FillModeTest004"; + /** + * @tc.steps: step1. init tween option and build tween component + */ + g_configTweenComponent = [](const RefPtr& tweenComponent) { + TweenOption tweenOption; + auto scale = AceType::MakeRefPtr>(1.0f, 5.0f, Curves::LINEAR); + scale->SetInitValue(0.5f); + tweenOption.SetTransformFloatAnimation(AnimationType::SCALE, scale); + tweenOption.SetDuration(20); + tweenOption.SetDelay(10); + tweenOption.SetFillMode(FillMode::BOTH); + tweenComponent->SetTweenOption(tweenOption); + }; + CreateAndBuildTweenComponent(); + + /** + * @tc.steps: step2. trigger frames to let animation done + * @tc.expected: step2. check the start value and end value + */ + float scale = 0.0f; + platformWindowRaw_->TriggerOneFrame(); + transformRender_->GetScaleSetting(scale); + EXPECT_NEAR(scale, 1.0f, FLT_EPSILON); + + // In the start delay time, the animation is at the begin value + platformWindowRaw_->TriggerOneFrame(); + transformRender_->GetScaleSetting(scale); + EXPECT_NEAR(scale, 1.0f, FLT_EPSILON); + + platformWindowRaw_->TriggerOneFrame(); + transformRender_->GetScaleSetting(scale); + EXPECT_NEAR(scale, 3.0f, FLT_EPSILON); + + // Return to the end value when the animation is over + platformWindowRaw_->TriggerOneFrame(); + transformRender_->GetScaleSetting(scale); + EXPECT_NEAR(scale, 5.0f, FLT_EPSILON); +} + +/** + * @tc.name: TweenElementFillModeTest005 + * @tc.desc: test fillMode value in tween, fillMode is backwards, duration is 0. + * @tc.type: FUNC + * @tc.require: AR000FL0VL + * @tc.author: jiangdayuan + */ +HWTEST_F(TweenElementTest, FillModeTest005, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TweenElementTest FillModeTest005"; + /** + * @tc.steps: step1. init tween option and build tween component + */ + g_configTweenComponent = [](const RefPtr& tweenComponent) { + TweenOption tweenOption; + auto scale = AceType::MakeRefPtr>(1.0f, 5.0f, Curves::LINEAR); + scale->SetInitValue(0.5f); + tweenOption.SetTransformFloatAnimation(AnimationType::SCALE, scale); + tweenOption.SetDuration(0); + tweenOption.SetDelay(11); + tweenOption.SetFillMode(FillMode::BACKWARDS); + tweenComponent->SetTweenOption(tweenOption); + }; + CreateAndBuildTweenComponent(); + + /** + * @tc.steps: step2. trigger frames to let animation done + * @tc.expected: step2. check the start value and end value + */ + float scale = 0.0f; + platformWindowRaw_->TriggerOneFrame(); + transformRender_->GetScaleSetting(scale); + EXPECT_NEAR(scale, 1.0f, FLT_EPSILON); + + // In the start delay time, the animation is at the begin value + platformWindowRaw_->TriggerOneFrame(); + transformRender_->GetScaleSetting(scale); + EXPECT_NEAR(scale, 1.0f, FLT_EPSILON); + + // Return to the init value after delay time + platformWindowRaw_->TriggerOneFrame(); + transformRender_->GetScaleSetting(scale); + EXPECT_NEAR(scale, 0.5f, FLT_EPSILON); +} + +/** + * @tc.name: TweenElementFillModeTest006 + * @tc.desc: test fillMode value in tween, fillMode is both, duration is 0. + * @tc.type: FUNC + * @tc.require: AR000FL0VL + * @tc.author: jiangdayuan + */ +HWTEST_F(TweenElementTest, FillModeTest006, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TweenElementTest FillModeTest006"; + /** + * @tc.steps: step1. init tween option and build tween component + */ + g_configTweenComponent = [](const RefPtr& tweenComponent) { + TweenOption tweenOption; + auto scale = AceType::MakeRefPtr>(1.0f, 5.0f, Curves::LINEAR); + scale->SetInitValue(0.5f); + tweenOption.SetTransformFloatAnimation(AnimationType::SCALE, scale); + tweenOption.SetDuration(0); + tweenOption.SetDelay(11); + tweenOption.SetFillMode(FillMode::BOTH); + tweenComponent->SetTweenOption(tweenOption); + }; + CreateAndBuildTweenComponent(); + + /** + * @tc.steps: step2. trigger frames to let animation done + * @tc.expected: step2. check the start value and end value + */ + float scale = 0.0f; + platformWindowRaw_->TriggerOneFrame(); + transformRender_->GetScaleSetting(scale); + EXPECT_NEAR(scale, 1.0f, FLT_EPSILON); + + // In the start delay time, the animation is at the begin value + platformWindowRaw_->TriggerOneFrame(); + transformRender_->GetScaleSetting(scale); + EXPECT_NEAR(scale, 1.0f, FLT_EPSILON); + + // Return to the end value after delay time + platformWindowRaw_->TriggerOneFrame(); + transformRender_->GetScaleSetting(scale); + EXPECT_NEAR(scale, 5.0f, FLT_EPSILON); +} + +/** + * @tc.name: TweenElementFillModeTest007 + * @tc.desc: test fillMode value in tween, fillMode is backwards, repteat time is 2. + * @tc.type: FUNC + * @tc.require: AR000FL0VL + * @tc.author: jiangdayuan + */ +HWTEST_F(TweenElementTest, FillModeTest007, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TweenElementTest FillModeTest007"; + /** + * @tc.steps: step1. init tween option and build tween component + */ + g_configTweenComponent = [](const RefPtr& tweenComponent) { + TweenOption tweenOption; + auto scale = AceType::MakeRefPtr>(1.0f, 5.0f, Curves::LINEAR); + scale->SetInitValue(0.5f); + tweenOption.SetTransformFloatAnimation(AnimationType::SCALE, scale); + tweenOption.SetDuration(20); + tweenOption.SetDelay(10); + tweenOption.SetIteration(2); + tweenOption.SetFillMode(FillMode::BACKWARDS); + tweenComponent->SetTweenOption(tweenOption); + }; + CreateAndBuildTweenComponent(); + + /** + * @tc.steps: step2. trigger frames to let animation done + * @tc.expected: step2. check the start value and end value + */ + float scale = 0.0f; + platformWindowRaw_->TriggerOneFrame(); + transformRender_->GetScaleSetting(scale); + EXPECT_NEAR(scale, 1.0f, FLT_EPSILON); + + // In the start delay time, the animation is at the begin value + platformWindowRaw_->TriggerOneFrame(); + transformRender_->GetScaleSetting(scale); + EXPECT_NEAR(scale, 1.0f, FLT_EPSILON); + + // first repeat time, back to begin value. + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + transformRender_->GetScaleSetting(scale); + EXPECT_NEAR(scale, 1.0f, FLT_EPSILON); + + // Return to the init value after repeat time. + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + transformRender_->GetScaleSetting(scale); + EXPECT_NEAR(scale, 0.5f, FLT_EPSILON); +} + +/** + * @tc.name: TweenElementFillModeTest008 + * @tc.desc: test fillMode value in tween, fillMode is both, repeat time is 2. + * @tc.type: FUNC + * @tc.require: AR000FL0VL + * @tc.author: jiangdayuan + */ +HWTEST_F(TweenElementTest, FillModeTest008, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TweenElementTest FillModeTest008"; + /** + * @tc.steps: step1. init tween option and build tween component + */ + g_configTweenComponent = [](const RefPtr& tweenComponent) { + TweenOption tweenOption; + auto scale = AceType::MakeRefPtr>(1.0f, 5.0f, Curves::LINEAR); + scale->SetInitValue(0.5f); + tweenOption.SetTransformFloatAnimation(AnimationType::SCALE, scale); + tweenOption.SetDuration(20); + tweenOption.SetDelay(10); + tweenOption.SetIteration(2); + tweenOption.SetFillMode(FillMode::BOTH); + tweenComponent->SetTweenOption(tweenOption); + }; + CreateAndBuildTweenComponent(); + + /** + * @tc.steps: step2. trigger frames to let animation done + * @tc.expected: step2. check the start value and end value + */ + float scale = 0.0f; + platformWindowRaw_->TriggerOneFrame(); + transformRender_->GetScaleSetting(scale); + EXPECT_NEAR(scale, 1.0f, FLT_EPSILON); + + // In the start delay time, the animation is at the begin value + platformWindowRaw_->TriggerOneFrame(); + transformRender_->GetScaleSetting(scale); + EXPECT_NEAR(scale, 1.0f, FLT_EPSILON); + + // first repeat time, back to begin value + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + transformRender_->GetScaleSetting(scale); + EXPECT_NEAR(scale, 1.0f, FLT_EPSILON); + + // Return to the end value after repeat time + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + transformRender_->GetScaleSetting(scale); + EXPECT_NEAR(scale, 5.0f, FLT_EPSILON); +} + +/** + * @tc.name: TweenElementKeyframeTest001 + * @tc.desc: test Keyframe value in tween. + * @tc.type: FUNC + * @tc.require: AR000DBULF + * @tc.author: chenlien + */ +HWTEST_F(TweenElementTest, KeyframeTest001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TweenElementTest KeyframeTest001"; + /** + * @tc.steps: step1. init tween option and build tween component + */ + g_configTweenComponent = [](const RefPtr& tweenComponent) { + TweenOption tweenOption; + tweenOption.SetDuration(20); + tweenOption.SetFillMode(FillMode::FORWARDS); + auto translateAnimation = AceType::MakeRefPtr>(); + auto keyframe0 = + AceType::MakeRefPtr>(0.0f, DimensionOffset(Dimension(), Dimension())); + auto keyframe1 = AceType::MakeRefPtr>( + 0.5f, DimensionOffset(Dimension(40.0f, DimensionUnit::PX), Dimension(50.0f, DimensionUnit::PX))); + auto keyframe2 = AceType::MakeRefPtr>( + 1.0f, DimensionOffset(Dimension(100.0f, DimensionUnit::PX), Dimension(120.0f, DimensionUnit::PX))); + translateAnimation->AddKeyframe(keyframe0); + translateAnimation->AddKeyframe(keyframe1); + translateAnimation->AddKeyframe(keyframe2); + tweenOption.SetTranslateAnimations(AnimationType::TRANSLATE, translateAnimation); + tweenComponent->SetTweenOption(tweenOption); + }; + CreateAndBuildTweenComponent(); + + /** + * @tc.steps: step2. trigger frames to let animation done + * @tc.expected: step2. check the final value + */ + Dimension x; + Dimension y; + + platformWindowRaw_->TriggerOneFrame(); + transformRender_->GetTranslateSetting(x, y); + EXPECT_NEAR(x.Value(), 0.0f, ABS_ERROR); + EXPECT_NEAR(y.Value(), 0.0f, ABS_ERROR); + + platformWindowRaw_->TriggerOneFrame(); + transformRender_->GetTranslateSetting(x, y); + EXPECT_NEAR(x.Value(), 40.0f, ABS_ERROR); + EXPECT_NEAR(y.Value(), 50.0f, ABS_ERROR); + + platformWindowRaw_->TriggerOneFrame(); + transformRender_->GetTranslateSetting(x, y); + EXPECT_NEAR(x.Value(), 100.0f, ABS_ERROR); + EXPECT_NEAR(y.Value(), 120.0f, ABS_ERROR); +} + +/** + * @tc.name: TweenElementKeyframeTest002 + * @tc.desc: test Keyframe value in tween. + * @tc.type: FUNC + * @tc.require: AR000DBULF + * @tc.author: chenlien + */ +HWTEST_F(TweenElementTest, KeyframeTest002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TweenElementTest KeyframeTest002"; + /** + * @tc.steps: step1. init tween option and build tween component + */ + g_configTweenComponent = [](const RefPtr& tweenComponent) { + TweenOption tweenOption; + tweenOption.SetDuration(40); + tweenOption.SetFillMode(FillMode::FORWARDS); + auto scaleAnimation = AceType::MakeRefPtr>(); + auto keyframe0 = AceType::MakeRefPtr>(0.0f, 1.0f); + auto keyframe1 = AceType::MakeRefPtr>(0.25f, 2.0f); + auto keyframe2 = AceType::MakeRefPtr>(0.5f, 3.0f); + auto keyframe3 = AceType::MakeRefPtr>(0.75f, 4.0f); + auto keyframe4 = AceType::MakeRefPtr>(1.0f, 5.0f); + scaleAnimation->AddKeyframe(keyframe0); + scaleAnimation->AddKeyframe(keyframe1); + scaleAnimation->AddKeyframe(keyframe2); + scaleAnimation->AddKeyframe(keyframe3); + scaleAnimation->AddKeyframe(keyframe4); + tweenOption.SetTransformFloatAnimation(AnimationType::SCALE, scaleAnimation); + tweenComponent->SetTweenOption(tweenOption); + }; + CreateAndBuildTweenComponent(); + + /** + * @tc.steps: step2. trigger frames to let animation done + * @tc.expected: step2. check the final value + */ + float scale = 0.0f; + platformWindowRaw_->TriggerOneFrame(); + + platformWindowRaw_->TriggerOneFrame(); + transformRender_->GetScaleSetting(scale); + EXPECT_NEAR(scale, 2.0f, ABS_ERROR); + + platformWindowRaw_->TriggerOneFrame(); + transformRender_->GetScaleSetting(scale); + EXPECT_NEAR(scale, 3.0f, ABS_ERROR); + + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + transformRender_->GetScaleSetting(scale); + EXPECT_NEAR(scale, 5.0f, ABS_ERROR); +} + +/** + * @tc.name: TweenElementKeyframeTest003 + * @tc.desc: test Keyframe value in tween. + * @tc.type: FUNC + * @tc.require: AR000DBULF + * @tc.author: chenlien + */ +HWTEST_F(TweenElementTest, KeyframeTest003, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TweenElementTest KeyframeTest003"; + /** + * @tc.steps: step1. init tween option and build tween component + */ + g_configTweenComponent = [](const RefPtr& tweenComponent) { + TweenOption tweenOption; + tweenOption.SetDuration(40); + tweenOption.SetFillMode(FillMode::FORWARDS); + auto rotateAnimation = AceType::MakeRefPtr>(); + auto keyframe0 = AceType::MakeRefPtr>(0.0f, 1.0f); + auto keyframe1 = AceType::MakeRefPtr>(0.25f, 2.0f); + auto keyframe2 = AceType::MakeRefPtr>(0.5f, 3.0f); + auto keyframe3 = AceType::MakeRefPtr>(0.75f, 4.0f); + auto keyframe4 = AceType::MakeRefPtr>(1.0f, 5.0f); + rotateAnimation->AddKeyframe(keyframe0); + rotateAnimation->AddKeyframe(keyframe1); + rotateAnimation->AddKeyframe(keyframe2); + rotateAnimation->AddKeyframe(keyframe3); + rotateAnimation->AddKeyframe(keyframe4); + tweenOption.SetTransformFloatAnimation(AnimationType::ROTATE_X, rotateAnimation); + tweenComponent->SetTweenOption(tweenOption); + }; + CreateAndBuildTweenComponent(); + + /** + * @tc.steps: step2. trigger frames to let animation done + * @tc.expected: step2. check the final value + */ + float angle = 0.0f; + float x = 0.0f; + float y = 0.0f; + float z = 0.0f; + platformWindowRaw_->TriggerOneFrame(); + + platformWindowRaw_->TriggerOneFrame(); + transformRender_->GetRotateSetting(angle, x, y, z); + EXPECT_NEAR(x, 2.0, ABS_ERROR); + EXPECT_NEAR(y, 0.0, ABS_ERROR); + EXPECT_NEAR(z, 0.0, ABS_ERROR); + + platformWindowRaw_->TriggerOneFrame(); + transformRender_->GetRotateSetting(angle, x, y, z); + EXPECT_NEAR(x, 3.0, ABS_ERROR); + EXPECT_NEAR(y, 0.0, ABS_ERROR); + EXPECT_NEAR(z, 0.0, ABS_ERROR); + + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + transformRender_->GetRotateSetting(angle, x, y, z); + EXPECT_NEAR(x, 5.0, ABS_ERROR); + EXPECT_NEAR(y, 0.0, ABS_ERROR); + EXPECT_NEAR(z, 0.0, ABS_ERROR); +} + +/** + * @tc.name: TweenElementKeyframeTest004 + * @tc.desc: test Keyframe value in tween. + * @tc.type: FUNC + * @tc.require: AR000DBULF + * @tc.author: jiangdayuan + */ +HWTEST_F(TweenElementTest, KeyframeTest004, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TweenElementTest KeyframeTest004"; + /** + * @tc.steps: step1. init tween option and build tween component + */ + g_configTweenComponent = [](const RefPtr& tweenComponent) { + TweenOption tweenOption; + tweenOption.SetDuration(40); + tweenOption.SetFillMode(FillMode::FORWARDS); + auto opacityAnimation = AceType::MakeRefPtr>(); + auto keyframe0 = AceType::MakeRefPtr>(0.0f, 1.0f); + auto keyframe1 = AceType::MakeRefPtr>(0.25f, 0.75f); + auto keyframe2 = AceType::MakeRefPtr>(0.5f, 0.5f); + auto keyframe3 = AceType::MakeRefPtr>(0.75f, 0.25f); + auto keyframe4 = AceType::MakeRefPtr>(1.0f, 0.0f); + opacityAnimation->AddKeyframe(keyframe0); + opacityAnimation->AddKeyframe(keyframe1); + opacityAnimation->AddKeyframe(keyframe2); + opacityAnimation->AddKeyframe(keyframe3); + opacityAnimation->AddKeyframe(keyframe4); + tweenOption.SetOpacityAnimation(opacityAnimation); + tweenComponent->SetTweenOption(tweenOption); + }; + CreateAndBuildTweenComponent(); + + /** + * @tc.steps: step2. trigger frames to let animation done + * @tc.expected: step2. check the final value + */ + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(displayRender_->GetOpacity(), 1.0f, ABS_ERROR); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(displayRender_->GetOpacity(), 0.75f, ABS_ERROR); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(displayRender_->GetOpacity(), 0.5f, ABS_ERROR); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(displayRender_->GetOpacity(), 0.25f, ABS_ERROR); + + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(displayRender_->GetOpacity(), 0.0f, ABS_ERROR); +} + +/** + * @tc.name: TweenElementKeyframeTest005 + * @tc.desc: test Keyframe value in tween. + * @tc.type: FUNC + * @tc.require: AR000DBULF + * @tc.author: jiangdayuan + */ +HWTEST_F(TweenElementTest, KeyframeTest005, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TweenElementTest KeyframeTest005"; + /** + * @tc.steps: step1. init tween option and build tween component + */ + g_configTweenComponent = [](const RefPtr& tweenComponent) { + TweenOption tweenOption; + tweenOption.SetDuration(20); + tweenOption.SetFillMode(FillMode::FORWARDS); + auto colorAnimation = AceType::MakeRefPtr>(); + auto keyframe0 = AceType::MakeRefPtr>(0.0f, Color::WHITE); + auto keyframe1 = AceType::MakeRefPtr>(0.5f, Color::BLACK); + auto keyframe2 = AceType::MakeRefPtr>(1.0f, Color::BLUE); + + keyframe1->SetCurve(Curves::LINEAR); + keyframe2->SetCurve(Curves::LINEAR); + + colorAnimation->AddKeyframe(keyframe0); + colorAnimation->AddKeyframe(keyframe1); + colorAnimation->AddKeyframe(keyframe2); + + colorAnimation->SetEvaluator(AceType::MakeRefPtr()); + tweenOption.SetColorAnimation(colorAnimation); + tweenComponent->SetTweenOption(tweenOption); + }; + CreateAndBuildTweenComponent(); + + /** + * @tc.steps: step2. trigger frames to let animation done + * @tc.expected: step2. check the final value + */ + auto box = AceType::DynamicCast(tweenElement_->GetContentRender()); + EXPECT_TRUE(box); + EXPECT_EQ(box->GetColor(), Color::WHITE); + + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(box->GetColor(), Color::BLUE); +} + +/** + * @tc.name: PropertyAnimationTest001 + * @tc.desc: verify float property animation + * @tc.type: FUNC + * @tc.require: AR000DQ20S + * @tc.author: jiangdayuan + */ +HWTEST_F(TweenElementTest, PropertyAnimationTest001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TweenElementTest PropertyAnimationTest001"; + /** + * @tc.steps: step1. init tween option and build tween component + */ + g_configTweenComponent = [](const RefPtr& tweenComponent) { + TweenOption tweenOption; + auto height = AceType::MakeRefPtr>(1.0f, 5.0f, Curves::LINEAR); + tweenOption.SetPropertyAnimationFloat(PropertyAnimatableType::PROPERTY_HEIGHT, height); + tweenOption.SetDuration(20); + tweenOption.SetFillMode(FillMode::FORWARDS); + tweenComponent->SetTweenOption(tweenOption); + }; + CreateAndBuildTweenComponent(); + + /** + * @tc.steps: step2. trigger frames to let animation done + * @tc.expected: step2. check the final value + */ + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + auto box = AceType::DynamicCast(tweenElement_->GetContentRender()); + EXPECT_TRUE(box); + EXPECT_NEAR(box->GetHeight(), 3.0f, DBL_EPSILON); + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(box->GetHeight(), 5.0f, DBL_EPSILON); +} + +/** + * @tc.name: PropertyAnimationTest002 + * @tc.desc: verify color property animation + * @tc.type: FUNC + * @tc.require: AR000DQ20S + * @tc.author: jiangdayuan + */ +HWTEST_F(TweenElementTest, PropertyAnimationTest002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TweenElementTest PropertyAnimationTest002"; + /** + * @tc.steps: step1. init tween option and build tween component + */ + g_configTweenComponent = [](const RefPtr& tweenComponent) { + TweenOption tweenOption; + auto color = AceType::MakeRefPtr>(Color::WHITE, Color::BLACK, Curves::LINEAR); + color->SetEvaluator(AceType::MakeRefPtr()); + tweenOption.SetColorAnimation(color); + tweenOption.SetDuration(20); + tweenOption.SetFillMode(FillMode::FORWARDS); + tweenComponent->SetTweenOption(tweenOption); + }; + CreateAndBuildTweenComponent(); + + /** + * @tc.steps: step2. trigger frames to let animation done + * @tc.expected: step2. check the final value + */ + auto box = AceType::DynamicCast(tweenElement_->GetContentRender()); + EXPECT_TRUE(box); + EXPECT_EQ(box->GetColor(), Color::WHITE); + + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + EXPECT_EQ(box->GetColor(), Color::BLACK); +} + +/** + * @tc.name: TweenElementReplayTest001 + * @tc.desc: replay when previous is done. + * @tc.type: FUNC + * @tc.require: AR000DBULF + * @tc.author: zhouzebin + */ +HWTEST_F(TweenElementTest, ReplayTest001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TweenElementTest ReplayTest001"; + /** + * @tc.steps: step1. init tween option and build tween component + */ + g_configTweenComponent = [](const RefPtr& tweenComponent) { + TweenOption tweenOption; + auto width = AceType::MakeRefPtr>(1.0f, 5.0f, Curves::LINEAR); + tweenOption.SetPropertyAnimationFloat(PropertyAnimatableType::PROPERTY_WIDTH, width); + tweenOption.SetDuration(20); + tweenComponent->SetTweenOption(tweenOption); + tweenComponent->SetTweenOperation(TweenOperation::PLAY); + }; + CreateAndBuildTweenComponent(); + + /** + * @tc.steps: step2. trigger frames to let animation done + * @tc.expected: step2. check the final value + */ + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + auto box = AceType::DynamicCast(tweenElement_->GetContentRender()); + EXPECT_TRUE(box); + EXPECT_NEAR(box->GetWidth(), 3.0, DBL_EPSILON); + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(box->GetWidth(), TEST_SURFACE_WIDTH, DBL_EPSILON); + + /** + * @tc.steps: step3. update it again to make it replay, and check + * @tc.expected: step3. check the final value + */ + tweenComponent_->SetTweenOperation(TweenOperation::PLAY); + context_->ScheduleUpdate(tweenComponent_); + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + box = AceType::DynamicCast(tweenElement_->GetContentRender()); + EXPECT_TRUE(box); + EXPECT_NEAR(box->GetWidth(), 3.0, DBL_EPSILON); + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(box->GetWidth(), TEST_SURFACE_WIDTH, DBL_EPSILON); +} + +/** + * @tc.name: TweenElementReplayTest002 + * @tc.desc: replay when previous is playing. + * @tc.type: FUNC + * @tc.require: AR000DBULF + * @tc.author: zhouzebin + */ +HWTEST_F(TweenElementTest, ReplayTest002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TweenElementTest ReplayTest002"; + /** + * @tc.steps: step1. init tween option and build tween component + */ + g_configTweenComponent = [](const RefPtr& tweenComponent) { + TweenOption tweenOption; + auto width = AceType::MakeRefPtr>(1.0f, 5.0f, Curves::LINEAR); + tweenOption.SetPropertyAnimationFloat(PropertyAnimatableType::PROPERTY_WIDTH, width); + tweenOption.SetDuration(20); + tweenComponent->SetTweenOption(tweenOption); + }; + CreateAndBuildTweenComponent(); + + /** + * @tc.steps: step2. trigger frames to let animation done + * @tc.expected: step2. check the final value + */ + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + auto box = AceType::DynamicCast(tweenElement_->GetContentRender()); + EXPECT_TRUE(box); + EXPECT_NEAR(box->GetWidth(), 3.0, DBL_EPSILON); + + /** + * @tc.steps: step3. make it replay before previous is done. and check + * @tc.expected: step3. check the final value + */ + tweenComponent_->SetTweenOperation(TweenOperation::PLAY); + context_->ScheduleUpdate(tweenComponent_); + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + platformWindowRaw_->TriggerOneFrame(); + box = AceType::DynamicCast(tweenElement_->GetContentRender()); + EXPECT_TRUE(box); + EXPECT_NEAR(box->GetWidth(), 3.0, DBL_EPSILON); + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(box->GetWidth(), TEST_SURFACE_WIDTH, DBL_EPSILON); +} + +/** + * @tc.name: TweenElementTimerUpdateTest001 + * @tc.desc: update element when times up. + * @tc.type: FUNC + * @tc.require: AR000DSB2A + * @tc.author: zhouzebin + */ +HWTEST_F(TweenElementTest, TweenElementTimerUpdateTest001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "TweenElement TimerUpdateTest001"; + /** + * @tc.steps: step1. build tween component + */ + CreateAndBuildTweenComponent(); + platformWindowRaw_->TriggerOneFrame(); + /** + * @tc.steps: step2. update box's width and trigger update + * @tc.expected: step2. check the width updated + */ + boxComponent_->SetWidth(5.0); + context_->ScheduleUpdate(tweenComponent_); + platformWindowRaw_->TriggerOneFrame(); + auto box = AceType::DynamicCast(tweenElement_->GetContentRender()); + EXPECT_NEAR(box->GetWidth(), 5.0, DBL_EPSILON); + + /** + * @tc.steps: step3. update box's width and trigger update again + * @tc.expected: step3. check the width updated + */ + boxComponent_->SetWidth(15.0); + context_->ScheduleUpdate(tweenComponent_); + platformWindowRaw_->TriggerOneFrame(); + EXPECT_NEAR(box->GetWidth(), 15.0, DBL_EPSILON); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/video/BUILD.gn b/frameworks/core/components/test/unittest/video/BUILD.gn new file mode 100644 index 00000000..24df7dcc --- /dev/null +++ b/frameworks/core/components/test/unittest/video/BUILD.gn @@ -0,0 +1,82 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +if (is_standard_system) { + module_output_path = "ace_engine_standard/backenduicomponent/video" +} + +ohos_unittest("VideoCreatorTest") { + module_out_path = module_output_path + + sources = [ "video_creator_test.cpp" ] + + configs = [ + ":config_json_creator_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "$ace_root/frameworks/core/components/test:json", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + if (is_standard_system) { + deps += [ "$ace_root/frameworks/bridge:js_framework_ohos" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_json_creator_test") { + visibility = [ ":*" ] + include_dirs = [ "$ace_root" ] +} + +ohos_unittest("RenderTextureTest") { + module_out_path = module_output_path + + sources = [ + "$ace_root/frameworks/core/components/test/json/json_frontend.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/mock_render_common.cpp", + "render_texture_test.cpp", + "texture_test_utils.cpp", + ] + + configs = [ "$ace_root:ace_test_config" ] + + deps = [ + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "//third_party/googletest:gtest_main", + ] + if (is_standard_system) { + deps += [ "$ace_root/frameworks/bridge:js_framework_ohos" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +group("unittest") { + testonly = true + + deps = [ + ":RenderTextureTest", + ":VideoCreatorTest", + ] +} diff --git a/frameworks/core/components/test/unittest/video/render_texture_test.cpp b/frameworks/core/components/test/unittest/video/render_texture_test.cpp new file mode 100644 index 00000000..738093b8 --- /dev/null +++ b/frameworks/core/components/test/unittest/video/render_texture_test.cpp @@ -0,0 +1,900 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "core/components/test/unittest/video/texture_test_utils.h" +#include "core/components/video/render_texture.h" +#include "core/components/video/texture_component.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +const int64_t TEXTURE_ID_DEFAULT = 1; + +const uint32_t VIDEO_WIDTH_SMALL_PORTRAIT = 576; +const uint32_t VIDEO_HEIGHT_SMALL_PORTRAIT = 704; +const uint32_t VIDEO_WIDTH_SMALL_LANDSCAPE = 704; +const uint32_t VIDEO_HEIGHT_SMALL_LANDSCAPE = 576; + +const uint32_t VIDEO_WIDTH_LARGE_PORTRAIT = 1080; +const uint32_t VIDEO_HEIGHT_LARGE_PORTRAIT = 1920; +const uint32_t VIDEO_WIDTH_LARGE_LANDSCAPE = 1920; +const uint32_t VIDEO_HEIGHT_LARGE_LANDSCAPE = 1080; + +const Size AREA_SMALL_PORTRAIT = Size(720.0, 1280.0); + +} // namespace + +class RenderTextureTest : public testing::Test { +public: + static void SetUpTestCase() {} + static void TearDownTestCase() {} + void SetUp() {} + void TearDown() {} +}; + +/** + * @tc.name: RenderTextureTest001 + * @tc.desc: Verify the video display area with contain fit when the horizontal video is on the vertical screen, + * and the video resolution is smaller than the screen resolution. + * @tc.type: FUNC + * @tc.require: AR000DAR0T + * @tc.author: HeSu + */ +HWTEST_F(RenderTextureTest, RenderTextureTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct TextureComponent. + * @tc.expected: step1. properties set correctly. + */ + RefPtr component = AceType::MakeRefPtr(); + component->SetTextureId(TEXTURE_ID_DEFAULT); + component->SetSrcWidth(VIDEO_WIDTH_SMALL_PORTRAIT); + component->SetSrcHeight(VIDEO_HEIGHT_SMALL_PORTRAIT); + component->SetFit(ImageFit::CONTAIN); + + /** + * @tc.steps: step2. construct RenderTexture, update it with component. + * @tc.expected: step2. properties is set correctly. + */ + RefPtr renderTexture = AceType::MakeRefPtr(); + renderTexture->Update(component); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Image offset and Size are calculated correctly. + */ + LayoutParam layoutParam; + layoutParam.SetMaxSize(AREA_SMALL_PORTRAIT); + renderTexture->SetLayoutParam(layoutParam); + renderTexture->PerformLayout(); + + Offset imageOffset(0, 200); + Size imageSize(720, 880); + + ASSERT_TRUE(IsNearEqual(renderTexture->GetImageOffset(), imageOffset)); + ASSERT_TRUE(IsNearEqual(renderTexture->GetImageSize(), imageSize)); +} + +/** + * @tc.name: RenderTextureTest002 + * @tc.desc: Verify the video display area with contain fit when the vertical video is on the vertical screen, + * and the video resolution is smaller than the screen resolution. + * @tc.type: FUNC + * @tc.require: AR000DAR0T + * @tc.author: HeSu + */ +HWTEST_F(RenderTextureTest, RenderTextureTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct TextureComponent. + * @tc.expected: step1. properties set correctly. + */ + RefPtr component = AceType::MakeRefPtr(); + component->SetTextureId(TEXTURE_ID_DEFAULT); + component->SetSrcWidth(VIDEO_WIDTH_SMALL_LANDSCAPE); + component->SetSrcHeight(VIDEO_HEIGHT_SMALL_LANDSCAPE); + component->SetFit(ImageFit::CONTAIN); + + /** + * @tc.steps: step2. construct RenderTexture, update it with component. + * @tc.expected: step2. properties is set correctly. + */ + RefPtr renderTexture = AceType::MakeRefPtr(); + renderTexture->Update(component); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Image offset and Size are calculated correctly. + */ + LayoutParam layoutParam; + layoutParam.SetMaxSize(AREA_SMALL_PORTRAIT); + renderTexture->SetLayoutParam(layoutParam); + renderTexture->PerformLayout(); + + Offset imageOffset(0, 345.5); + Size imageSize(720, 589); + ASSERT_TRUE(IsNearEqual(renderTexture->GetImageOffset(), imageOffset)); + ASSERT_TRUE(IsNearEqual(renderTexture->GetImageSize(), imageSize)); +} + +/** + * @tc.name: RenderTextureTest003 + * @tc.desc: Verify the video display area with contain fit when the horizontal video is on the vertical screen, + * and the video resolution is greater than the screen resolution. + * @tc.type: FUNC + * @tc.require: AR000DAR0T + * @tc.author: HeSu + */ +HWTEST_F(RenderTextureTest, RenderTextureTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct TextureComponent. + * @tc.expected: step1. properties set correctly. + */ + RefPtr component = AceType::MakeRefPtr(); + component->SetTextureId(TEXTURE_ID_DEFAULT); + component->SetSrcWidth(VIDEO_WIDTH_LARGE_PORTRAIT); + component->SetSrcHeight(VIDEO_HEIGHT_LARGE_PORTRAIT); + component->SetFit(ImageFit::CONTAIN); + + /** + * @tc.steps: step2. construct RenderTexture, update it with component. + * @tc.expected: step2. properties is set correctly. + */ + RefPtr renderTexture = AceType::MakeRefPtr(); + renderTexture->Update(component); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Image offset and Size are calculated correctly. + */ + LayoutParam layoutParam; + layoutParam.SetMaxSize(AREA_SMALL_PORTRAIT); + renderTexture->SetLayoutParam(layoutParam); + renderTexture->PerformLayout(); + + Offset imageOffset(0, 0); + Size imageSize(720, 1280); + ASSERT_TRUE(IsNearEqual(renderTexture->GetImageOffset(), imageOffset)); + ASSERT_TRUE(IsNearEqual(renderTexture->GetImageSize(), imageSize)); +} + +/** + * @tc.name: RenderTextureTest004 + * @tc.desc: Verify the video display area with contain fit when the vertical video is on the vertical screen, + * and the video resolution is greater than the screen resolution. + * @tc.type: FUNC + * @tc.require: AR000DAR0T + * @tc.author: HeSu + */ +HWTEST_F(RenderTextureTest, RenderTextureTest004, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct TextureComponent. + * @tc.expected: step1. properties set correctly. + */ + RefPtr component = AceType::MakeRefPtr(); + component->SetTextureId(TEXTURE_ID_DEFAULT); + component->SetSrcWidth(VIDEO_WIDTH_LARGE_LANDSCAPE); + component->SetSrcHeight(VIDEO_HEIGHT_LARGE_LANDSCAPE); + component->SetFit(ImageFit::CONTAIN); + + /** + * @tc.steps: step2. construct RenderTexture, update it with component. + * @tc.expected: step2. properties is set correctly. + */ + RefPtr renderTexture = AceType::MakeRefPtr(); + renderTexture->Update(component); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Image offset and Size are calculated correctly. + */ + LayoutParam layoutParam; + layoutParam.SetMaxSize(AREA_SMALL_PORTRAIT); + renderTexture->SetLayoutParam(layoutParam); + renderTexture->PerformLayout(); + + Offset imageOffset(0, 437); + Size imageSize(720, 405); + ASSERT_TRUE(IsNearEqual(renderTexture->GetImageOffset(), imageOffset)); + ASSERT_TRUE(IsNearEqual(renderTexture->GetImageSize(), imageSize)); +} + +/** + * @tc.name: RenderTextureTest005 + * @tc.desc: Verify the video display area with cover fit when the horizontal video is on the vertical screen, + * and the video resolution is smaller than the screen resolution. + * @tc.type: FUNC + * @tc.require: AR000DAR0T + * @tc.author: HeSu + */ +HWTEST_F(RenderTextureTest, RenderTextureTest005, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct TextureComponent. + * @tc.expected: step1. properties set correctly. + */ + RefPtr component = AceType::MakeRefPtr(); + component->SetTextureId(TEXTURE_ID_DEFAULT); + component->SetSrcWidth(VIDEO_WIDTH_SMALL_PORTRAIT); + component->SetSrcHeight(VIDEO_HEIGHT_SMALL_PORTRAIT); + component->SetFit(ImageFit::COVER); + + /** + * @tc.steps: step2. construct RenderTexture, update it with component. + * @tc.expected: step2. properties is set correctly. + */ + RefPtr renderTexture = AceType::MakeRefPtr(); + renderTexture->Update(component); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Image offset and Size are calculated correctly. + */ + LayoutParam layoutParam; + layoutParam.SetMaxSize(AREA_SMALL_PORTRAIT); + renderTexture->SetLayoutParam(layoutParam); + renderTexture->PerformLayout(); + + Offset imageOffset(-163, 0); + Size imageSize(1047, 1280); + + ASSERT_TRUE(IsNearEqual(renderTexture->GetImageOffset(), imageOffset)); + ASSERT_TRUE(IsNearEqual(renderTexture->GetImageSize(), imageSize)); +} + +/** + * @tc.name: RenderTextureTest006 + * @tc.desc: Verify the video display area with cover fit when the vertical video is on the vertical screen, + * and the video resolution is smaller than the screen resolution. + * @tc.type: FUNC + * @tc.require: AR000DAR0T + * @tc.author: HeSu + */ +HWTEST_F(RenderTextureTest, RenderTextureTest006, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct TextureComponent. + * @tc.expected: step1. properties set correctly. + */ + RefPtr component = AceType::MakeRefPtr(); + component->SetTextureId(TEXTURE_ID_DEFAULT); + component->SetSrcWidth(VIDEO_WIDTH_SMALL_LANDSCAPE); + component->SetSrcHeight(VIDEO_HEIGHT_SMALL_LANDSCAPE); + component->SetFit(ImageFit::COVER); + + /** + * @tc.steps: step2. construct RenderTexture, update it with component. + * @tc.expected: step2. properties is set correctly. + */ + RefPtr renderTexture = AceType::MakeRefPtr(); + renderTexture->Update(component); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Image offset and Size are calculated correctly. + */ + LayoutParam layoutParam; + layoutParam.SetMaxSize(AREA_SMALL_PORTRAIT); + renderTexture->SetLayoutParam(layoutParam); + renderTexture->PerformLayout(); + + Offset imageOffset(-422, 0); + Size imageSize(1564, 1280); + ASSERT_TRUE(IsNearEqual(renderTexture->GetImageOffset(), imageOffset)); + ASSERT_TRUE(IsNearEqual(renderTexture->GetImageSize(), imageSize)); +} + +/** + * @tc.name: RenderTextureTest007 + * @tc.desc: Verify the video display area with cover fit when the horizontal video is on the vertical screen, + * and the video resolution is greater than the screen resolution. + * @tc.type: FUNC + * @tc.require: AR000DAR0T + * @tc.author: HeSu + */ +HWTEST_F(RenderTextureTest, RenderTextureTest007, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct TextureComponent. + * @tc.expected: step1. properties set correctly. + */ + RefPtr component = AceType::MakeRefPtr(); + component->SetTextureId(TEXTURE_ID_DEFAULT); + component->SetSrcWidth(VIDEO_WIDTH_LARGE_PORTRAIT); + component->SetSrcHeight(VIDEO_HEIGHT_LARGE_PORTRAIT); + component->SetFit(ImageFit::COVER); + + /** + * @tc.steps: step2. construct RenderTexture, update it with component. + * @tc.expected: step2. properties is set correctly. + */ + RefPtr renderTexture = AceType::MakeRefPtr(); + renderTexture->Update(component); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Image offset and Size are calculated correctly. + */ + LayoutParam layoutParam; + layoutParam.SetMaxSize(AREA_SMALL_PORTRAIT); + renderTexture->SetLayoutParam(layoutParam); + renderTexture->PerformLayout(); + + Offset imageOffset(0, 0); + Size imageSize(720, 1280); + ASSERT_TRUE(IsNearEqual(renderTexture->GetImageOffset(), imageOffset)); + ASSERT_TRUE(IsNearEqual(renderTexture->GetImageSize(), imageSize)); +} + +/** + * @tc.name: RenderTextureTest008 + * @tc.desc: Verify the video display area with cover fit when the vertical video is on the vertical screen, + * and the video resolution is greater than the screen resolution. + * @tc.type: FUNC + * @tc.require: AR000DAR0T + * @tc.author: HeSu + */ +HWTEST_F(RenderTextureTest, RenderTextureTest008, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct TextureComponent. + * @tc.expected: step1. properties set correctly. + */ + RefPtr component = AceType::MakeRefPtr(); + component->SetTextureId(TEXTURE_ID_DEFAULT); + component->SetSrcWidth(VIDEO_WIDTH_LARGE_LANDSCAPE); + component->SetSrcHeight(VIDEO_HEIGHT_LARGE_LANDSCAPE); + component->SetFit(ImageFit::COVER); + + /** + * @tc.steps: step2. construct RenderTexture, update it with component. + * @tc.expected: step2. properties is set correctly. + */ + RefPtr renderTexture = AceType::MakeRefPtr(); + renderTexture->Update(component); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Image offset and Size are calculated correctly. + */ + LayoutParam layoutParam; + layoutParam.SetMaxSize(AREA_SMALL_PORTRAIT); + renderTexture->SetLayoutParam(layoutParam); + renderTexture->PerformLayout(); + + Offset imageOffset(-778, 0); + Size imageSize(2275.56, 1280); + ASSERT_TRUE(IsNearEqual(renderTexture->GetImageOffset(), imageOffset)); + ASSERT_TRUE(IsNearEqual(renderTexture->GetImageSize(), imageSize)); +} + +/** + * @tc.name: RenderTextureTest009 + * @tc.desc: Verify the video display area with fill fit when the horizontal video is on the vertical screen, + * and the video resolution is smaller than the screen resolution. + * @tc.type: FUNC + * @tc.require: AR000DAR0T + * @tc.author: HeSu + */ +HWTEST_F(RenderTextureTest, RenderTextureTest009, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct TextureComponent. + * @tc.expected: step1. properties set correctly. + */ + RefPtr component = AceType::MakeRefPtr(); + component->SetTextureId(TEXTURE_ID_DEFAULT); + component->SetSrcWidth(VIDEO_WIDTH_SMALL_PORTRAIT); + component->SetSrcHeight(VIDEO_HEIGHT_SMALL_PORTRAIT); + component->SetFit(ImageFit::FILL); + + /** + * @tc.steps: step2. construct RenderTexture, update it with component. + * @tc.expected: step2. properties is set correctly. + */ + RefPtr renderTexture = AceType::MakeRefPtr(); + renderTexture->Update(component); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Image offset and Size are calculated correctly. + */ + LayoutParam layoutParam; + layoutParam.SetMaxSize(AREA_SMALL_PORTRAIT); + renderTexture->SetLayoutParam(layoutParam); + renderTexture->PerformLayout(); + + Offset imageOffset(0, 0); + Size imageSize(720, 1280); + + ASSERT_TRUE(IsNearEqual(renderTexture->GetImageOffset(), imageOffset)); + ASSERT_TRUE(IsNearEqual(renderTexture->GetImageSize(), imageSize)); +} + +/** + * @tc.name: RenderTextureTest010 + * @tc.desc: Verify the video display area with fill fit when the vertical video is on the vertical screen, + * and the video resolution is smaller than the screen resolution. + * @tc.type: FUNC + * @tc.require: AR000DAR0T + * @tc.author: HeSu + */ +HWTEST_F(RenderTextureTest, RenderTextureTest010, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct TextureComponent. + * @tc.expected: step1. properties set correctly. + */ + RefPtr component = AceType::MakeRefPtr(); + component->SetTextureId(TEXTURE_ID_DEFAULT); + component->SetSrcWidth(VIDEO_WIDTH_SMALL_LANDSCAPE); + component->SetSrcHeight(VIDEO_HEIGHT_SMALL_LANDSCAPE); + component->SetFit(ImageFit::FILL); + + /** + * @tc.steps: step2. construct RenderTexture, update it with component. + * @tc.expected: step2. properties is set correctly. + */ + RefPtr renderTexture = AceType::MakeRefPtr(); + renderTexture->Update(component); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Image offset and Size are calculated correctly. + */ + LayoutParam layoutParam; + layoutParam.SetMaxSize(AREA_SMALL_PORTRAIT); + renderTexture->SetLayoutParam(layoutParam); + renderTexture->PerformLayout(); + + Offset imageOffset(0, 0); + Size imageSize(720, 1280); + + ASSERT_TRUE(IsNearEqual(renderTexture->GetImageOffset(), imageOffset)); + ASSERT_TRUE(IsNearEqual(renderTexture->GetImageSize(), imageSize)); +} + +/** + * @tc.name: RenderTextureTest011 + * @tc.desc: Verify the video display area with fill fit when the horizontal video is on the vertical screen, + * and the video resolution is greater than the screen resolution. + * @tc.type: FUNC + * @tc.require: AR000DAR0T + * @tc.author: HeSu + */ +HWTEST_F(RenderTextureTest, RenderTextureTest011, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct TextureComponent. + * @tc.expected: step1. properties set correctly. + */ + RefPtr component = AceType::MakeRefPtr(); + component->SetTextureId(TEXTURE_ID_DEFAULT); + component->SetSrcWidth(VIDEO_WIDTH_LARGE_PORTRAIT); + component->SetSrcHeight(VIDEO_HEIGHT_LARGE_PORTRAIT); + component->SetFit(ImageFit::FILL); + + /** + * @tc.steps: step2. construct RenderTexture, update it with component. + * @tc.expected: step2. properties is set correctly. + */ + RefPtr renderTexture = AceType::MakeRefPtr(); + renderTexture->Update(component); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Image offset and Size are calculated correctly. + */ + LayoutParam layoutParam; + layoutParam.SetMaxSize(AREA_SMALL_PORTRAIT); + renderTexture->SetLayoutParam(layoutParam); + renderTexture->PerformLayout(); + + Offset imageOffset(0, 0); + Size imageSize(720, 1280); + + ASSERT_TRUE(IsNearEqual(renderTexture->GetImageOffset(), imageOffset)); + ASSERT_TRUE(IsNearEqual(renderTexture->GetImageSize(), imageSize)); +} + +/** + * @tc.name: RenderTextureTest012 + * @tc.desc: Verify the video display area with fill fit when the vertical video is on the vertical screen, + * and the video resolution is greater than the screen resolution. + * @tc.type: FUNC + * @tc.require: AR000DAR0T + * @tc.author: HeSu + */ +HWTEST_F(RenderTextureTest, RenderTextureTest012, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct TextureComponent. + * @tc.expected: step1. properties set correctly. + */ + RefPtr component = AceType::MakeRefPtr(); + component->SetTextureId(TEXTURE_ID_DEFAULT); + component->SetSrcWidth(VIDEO_WIDTH_LARGE_LANDSCAPE); + component->SetSrcHeight(VIDEO_HEIGHT_LARGE_LANDSCAPE); + component->SetFit(ImageFit::FILL); + + /** + * @tc.steps: step2. construct RenderTexture, update it with component. + * @tc.expected: step2. properties is set correctly. + */ + RefPtr renderTexture = AceType::MakeRefPtr(); + renderTexture->Update(component); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Image offset and Size are calculated correctly. + */ + LayoutParam layoutParam; + layoutParam.SetMaxSize(AREA_SMALL_PORTRAIT); + renderTexture->SetLayoutParam(layoutParam); + renderTexture->PerformLayout(); + + Offset imageOffset(0, 0); + Size imageSize(720, 1280); + + ASSERT_TRUE(IsNearEqual(renderTexture->GetImageOffset(), imageOffset)); + ASSERT_TRUE(IsNearEqual(renderTexture->GetImageSize(), imageSize)); +} + +/** + * @tc.name: RenderTextureTest013 + * @tc.desc: Verify the video display area with none fit when the horizontal video is on the vertical screen, + * and the video resolution is smaller than the screen resolution. + * @tc.type: FUNC + * @tc.require: AR000DAR0T + * @tc.author: HeSu + */ +HWTEST_F(RenderTextureTest, RenderTextureTest013, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct TextureComponent. + * @tc.expected: step1. properties set correctly. + */ + RefPtr component = AceType::MakeRefPtr(); + component->SetTextureId(TEXTURE_ID_DEFAULT); + component->SetSrcWidth(VIDEO_WIDTH_SMALL_PORTRAIT); + component->SetSrcHeight(VIDEO_HEIGHT_SMALL_PORTRAIT); + component->SetFit(ImageFit::NONE); + + /** + * @tc.steps: step2. construct RenderTexture, update it with component. + * @tc.expected: step2. properties is set correctly. + */ + RefPtr renderTexture = AceType::MakeRefPtr(); + renderTexture->Update(component); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Image offset and Size are calculated correctly. + */ + LayoutParam layoutParam; + layoutParam.SetMaxSize(AREA_SMALL_PORTRAIT); + renderTexture->SetLayoutParam(layoutParam); + renderTexture->PerformLayout(); + + Offset imageOffset(72, 288); + Size imageSize(576, 704); + + ASSERT_TRUE(IsNearEqual(renderTexture->GetImageOffset(), imageOffset)); + ASSERT_TRUE(IsNearEqual(renderTexture->GetImageSize(), imageSize)); +} + +/** + * @tc.name: RenderTextureTest014 + * @tc.desc: Verify the video display area with none fit when the vertical video is on the vertical screen, + * and the video resolution is smaller than the screen resolution. + * @tc.type: FUNC + * @tc.require: AR000DAR0T + * @tc.author: HeSu + */ +HWTEST_F(RenderTextureTest, RenderTextureTest014, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct TextureComponent. + * @tc.expected: step1. properties set correctly. + */ + RefPtr component = AceType::MakeRefPtr(); + component->SetTextureId(TEXTURE_ID_DEFAULT); + component->SetSrcWidth(VIDEO_WIDTH_SMALL_LANDSCAPE); + component->SetSrcHeight(VIDEO_HEIGHT_SMALL_LANDSCAPE); + component->SetFit(ImageFit::NONE); + + /** + * @tc.steps: step2. construct RenderTexture, update it with component. + * @tc.expected: step2. properties is set correctly. + */ + RefPtr renderTexture = AceType::MakeRefPtr(); + renderTexture->Update(component); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Image offset and Size are calculated correctly. + */ + LayoutParam layoutParam; + layoutParam.SetMaxSize(AREA_SMALL_PORTRAIT); + renderTexture->SetLayoutParam(layoutParam); + renderTexture->PerformLayout(); + + Offset imageOffset(8, 352); + Size imageSize(704, 576); + ASSERT_TRUE(IsNearEqual(renderTexture->GetImageOffset(), imageOffset)); + ASSERT_TRUE(IsNearEqual(renderTexture->GetImageSize(), imageSize)); +} + +/** + * @tc.name: RenderTextureTest015 + * @tc.desc: Verify the video display area with none fit when the horizontal video is on the vertical screen, + * and the video resolution is greater than the screen resolution. + * @tc.type: FUNC + * @tc.require: AR000DAR0T + * @tc.author: HeSu + */ +HWTEST_F(RenderTextureTest, RenderTextureTest015, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct TextureComponent. + * @tc.expected: step1. properties set correctly. + */ + RefPtr component = AceType::MakeRefPtr(); + component->SetTextureId(TEXTURE_ID_DEFAULT); + component->SetSrcWidth(VIDEO_WIDTH_LARGE_PORTRAIT); + component->SetSrcHeight(VIDEO_HEIGHT_LARGE_PORTRAIT); + component->SetFit(ImageFit::NONE); + + /** + * @tc.steps: step2. construct RenderTexture, update it with component. + * @tc.expected: step2. properties is set correctly. + */ + RefPtr renderTexture = AceType::MakeRefPtr(); + renderTexture->Update(component); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Image offset and Size are calculated correctly. + */ + LayoutParam layoutParam; + layoutParam.SetMaxSize(AREA_SMALL_PORTRAIT); + renderTexture->SetLayoutParam(layoutParam); + renderTexture->PerformLayout(); + + Offset imageOffset(-180, -320); + Size imageSize(1080, 1920); + ASSERT_TRUE(IsNearEqual(renderTexture->GetImageOffset(), imageOffset)); + ASSERT_TRUE(IsNearEqual(renderTexture->GetImageSize(), imageSize)); +} + +/** + * @tc.name: RenderTextureTest016 + * @tc.desc: Verify the video display area with none fit when the vertical video is on the vertical screen, + * and the video resolution is greater than the screen resolution. + * @tc.type: FUNC + * @tc.require: AR000DAR0T + * @tc.author: HeSu + */ +HWTEST_F(RenderTextureTest, RenderTextureTest016, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct TextureComponent. + * @tc.expected: step1. properties set correctly. + */ + RefPtr component = AceType::MakeRefPtr(); + component->SetTextureId(TEXTURE_ID_DEFAULT); + component->SetSrcWidth(VIDEO_WIDTH_LARGE_LANDSCAPE); + component->SetSrcHeight(VIDEO_HEIGHT_LARGE_LANDSCAPE); + component->SetFit(ImageFit::NONE); + + /** + * @tc.steps: step2. construct RenderTexture, update it with component. + * @tc.expected: step2. properties is set correctly. + */ + RefPtr renderTexture = AceType::MakeRefPtr(); + renderTexture->Update(component); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Image offset and Size are calculated correctly. + */ + LayoutParam layoutParam; + layoutParam.SetMaxSize(AREA_SMALL_PORTRAIT); + renderTexture->SetLayoutParam(layoutParam); + renderTexture->PerformLayout(); + + Offset imageOffset(-600, 100); + Size imageSize(1920, 1080); + ASSERT_TRUE(IsNearEqual(renderTexture->GetImageOffset(), imageOffset)); + ASSERT_TRUE(IsNearEqual(renderTexture->GetImageSize(), imageSize)); +} + +/** + * @tc.name: RenderTextureTest017 + * @tc.desc: Verify the video display area with scaledown fit when the horizontal video is on the vertical screen, + * and the video resolution is smaller than the screen resolution. + * @tc.type: FUNC + * @tc.require: AR000DAR0T + * @tc.author: HeSu + */ +HWTEST_F(RenderTextureTest, RenderTextureTest017, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct TextureComponent. + * @tc.expected: step1. properties set correctly. + */ + RefPtr component = AceType::MakeRefPtr(); + component->SetTextureId(TEXTURE_ID_DEFAULT); + component->SetSrcWidth(VIDEO_WIDTH_SMALL_PORTRAIT); + component->SetSrcHeight(VIDEO_HEIGHT_SMALL_PORTRAIT); + component->SetFit(ImageFit::SCALEDOWN); + + /** + * @tc.steps: step2. construct RenderTexture, update it with component. + * @tc.expected: step2. properties is set correctly. + */ + RefPtr renderTexture = AceType::MakeRefPtr(); + renderTexture->Update(component); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Image offset and Size are calculated correctly. + */ + LayoutParam layoutParam; + layoutParam.SetMaxSize(AREA_SMALL_PORTRAIT); + renderTexture->SetLayoutParam(layoutParam); + renderTexture->PerformLayout(); + + Offset imageOffset(72, 288); + Size imageSize(576, 704); + + ASSERT_TRUE(IsNearEqual(renderTexture->GetImageOffset(), imageOffset)); + ASSERT_TRUE(IsNearEqual(renderTexture->GetImageSize(), imageSize)); +} + +/** + * @tc.name: RenderTextureTest018 + * @tc.desc: Verify the video display area with scaledown fit when the vertical video is on the vertical screen, + * and the video resolution is smaller than the screen resolution. + * @tc.type: FUNC + * @tc.require: AR000DAR0T + * @tc.author: HeSu + */ +HWTEST_F(RenderTextureTest, RenderTextureTest018, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct TextureComponent. + * @tc.expected: step1. properties set correctly. + */ + RefPtr component = AceType::MakeRefPtr(); + component->SetTextureId(TEXTURE_ID_DEFAULT); + component->SetSrcWidth(VIDEO_WIDTH_SMALL_LANDSCAPE); + component->SetSrcHeight(VIDEO_HEIGHT_SMALL_LANDSCAPE); + component->SetFit(ImageFit::SCALEDOWN); + + /** + * @tc.steps: step2. construct RenderTexture, update it with component. + * @tc.expected: step2. properties is set correctly. + */ + RefPtr renderTexture = AceType::MakeRefPtr(); + renderTexture->Update(component); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Image offset and Size are calculated correctly. + */ + LayoutParam layoutParam; + layoutParam.SetMaxSize(AREA_SMALL_PORTRAIT); + renderTexture->SetLayoutParam(layoutParam); + renderTexture->PerformLayout(); + + Offset imageOffset(8, 352); + Size imageSize(704, 576); + ASSERT_TRUE(IsNearEqual(renderTexture->GetImageOffset(), imageOffset)); + ASSERT_TRUE(IsNearEqual(renderTexture->GetImageSize(), imageSize)); +} + +/** + * @tc.name: RenderTextureTest019 + * @tc.desc: Verify the video display area with scaledown fit when the horizontal video is on the vertical screen, + * and the video resolution is greater than the screen resolution. + * @tc.type: FUNC + * @tc.require: AR000DAR0T + * @tc.author: HeSu + */ +HWTEST_F(RenderTextureTest, RenderTextureTest019, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct TextureComponent. + * @tc.expected: step1. properties set correctly. + */ + RefPtr component = AceType::MakeRefPtr(); + component->SetTextureId(TEXTURE_ID_DEFAULT); + component->SetSrcWidth(VIDEO_WIDTH_LARGE_PORTRAIT); + component->SetSrcHeight(VIDEO_HEIGHT_LARGE_PORTRAIT); + component->SetFit(ImageFit::SCALEDOWN); + + /** + * @tc.steps: step2. construct RenderTexture, update it with component. + * @tc.expected: step2. properties is set correctly. + */ + RefPtr renderTexture = AceType::MakeRefPtr(); + renderTexture->Update(component); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Image offset and Size are calculated correctly. + */ + LayoutParam layoutParam; + layoutParam.SetMaxSize(AREA_SMALL_PORTRAIT); + renderTexture->SetLayoutParam(layoutParam); + renderTexture->PerformLayout(); + + Offset imageOffset(0, 0); + Size imageSize(720, 1280); + ASSERT_TRUE(IsNearEqual(renderTexture->GetImageOffset(), imageOffset)); + ASSERT_TRUE(IsNearEqual(renderTexture->GetImageSize(), imageSize)); +} + +/** + * @tc.name: RenderTextureTest020 + * @tc.desc: Verify the video display area with scaledown fit when the vertical video is on the vertical screen, + * and the video resolution is greater than the screen resolution. + * @tc.type: FUNC + * @tc.require: AR000DAR0T + * @tc.author: HeSu + */ +HWTEST_F(RenderTextureTest, RenderTextureTest020, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct TextureComponent. + * @tc.expected: step1. properties set correctly. + */ + RefPtr component = AceType::MakeRefPtr(); + component->SetTextureId(TEXTURE_ID_DEFAULT); + component->SetSrcWidth(VIDEO_WIDTH_LARGE_LANDSCAPE); + component->SetSrcHeight(VIDEO_HEIGHT_LARGE_LANDSCAPE); + component->SetFit(ImageFit::SCALEDOWN); + + /** + * @tc.steps: step2. construct RenderTexture, update it with component. + * @tc.expected: step2. properties is set correctly. + */ + RefPtr renderTexture = AceType::MakeRefPtr(); + renderTexture->Update(component); + + /** + * @tc.steps: step3. Verify that the properties are calculated correctly. + * @tc.expected: step3. Image offset and Size are calculated correctly. + */ + LayoutParam layoutParam; + layoutParam.SetMaxSize(AREA_SMALL_PORTRAIT); + renderTexture->SetLayoutParam(layoutParam); + renderTexture->PerformLayout(); + + Offset imageOffset(0, 437); + Size imageSize(720, 405); + ASSERT_TRUE(IsNearEqual(renderTexture->GetImageOffset(), imageOffset)); + ASSERT_TRUE(IsNearEqual(renderTexture->GetImageSize(), imageSize)); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/video/texture_test_utils.cpp b/frameworks/core/components/test/unittest/video/texture_test_utils.cpp new file mode 100644 index 00000000..612918fc --- /dev/null +++ b/frameworks/core/components/test/unittest/video/texture_test_utils.cpp @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/unittest/video/texture_test_utils.h" + +#include + +#include "core/components/text/text_component.h" + +namespace OHOS::Ace { + +const Offset MockRenderTexture::GetImageOffset() const +{ + return Offset(alignmentX_, alignmentY_); +} + +const Size& MockRenderTexture::GetImageSize() const +{ + return drawSize_; +} + +bool IsNearEqual(const Offset& left, const Offset& right) +{ + return std::abs(left.GetX() - right.GetX()) < 1.0 && std::abs(left.GetY() - right.GetY()) < 1.0; +} + +bool IsNearEqual(const Size& left, const Size& right) +{ + return std::abs(left.Width() - right.Width()) < 1.0 && std::abs(left.Height() - right.Height()) < 1.0; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/video/texture_test_utils.h b/frameworks/core/components/test/unittest/video/texture_test_utils.h new file mode 100644 index 00000000..b2c7c72a --- /dev/null +++ b/frameworks/core/components/test/unittest/video/texture_test_utils.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_VIDEO_TEXTURE_TEST_UTILS_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_VIDEO_TEXTURE_TEST_UTILS_H + +#include "core/components/video/render_texture.h" + +namespace OHOS::Ace { + +class MockRenderTexture final : public RenderTexture { + DECLARE_ACE_TYPE(MockRenderTexture, RenderTexture); + +public: + MockRenderTexture() = default; + ~MockRenderTexture() override = default; + + const Offset GetImageOffset() const; + const Size& GetImageSize() const; +}; + +bool IsNearEqual(const Offset& left, const Offset& right); +bool IsNearEqual(const Size& left, const Size& right); + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_VIDEO_TEXTURE_TEST_UTILS_H diff --git a/frameworks/core/components/test/unittest/video/video_creator_test.cpp b/frameworks/core/components/test/unittest/video/video_creator_test.cpp new file mode 100644 index 00000000..32a72f22 --- /dev/null +++ b/frameworks/core/components/test/unittest/video/video_creator_test.cpp @@ -0,0 +1,221 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include "gtest/gtest.h" + +#include "base/log/log.h" +#include "base/utils/utils.h" +#include "core/components/common/layout/constants.h" +#include "core/components/test/json/component_factory.h" +#include "core/components/video/video_component.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +const std::string JSON_SRC = "file:///data/data/hiace/files/data/test.mp4"; +constexpr bool JSON_AUTOPLAY = true; +const std::string JSON_POSTER = "file:///data/data/hiace/files/data/test.png"; +constexpr bool JSON_CONTROLS = true; +constexpr bool JSON_MUTED = true; +constexpr ImageFit JSON_FIT = ImageFit::COVER; +const std::string JSON_PREPARED_EVENT_ID = "onPreparedId1"; +const std::string JSON_START_EVENT_ID = "onStartId1"; +const std::string JSON_PAUSE_EVENT_ID = "onPauseId1"; +const std::string JSON_FINISH_EVENT_ID = "onFinishId1"; +const std::string JSON_ERROR_EVENT_ID = "onErrorId1"; +const std::string JSON_SEEKING_EVENT_ID = "onSeekingId1"; +const std::string JSON_SEEKED_EVENT_ID = "onSeekedId1"; +const std::string JSON_TIMEUPDATE_EVENT_ID = "onTimeUpdateId1"; +const std::string JSON_FULLSCREENCHANGE_EVENT_ID = "onFullScreenChangeId1"; + +} // namespace + +class VideoCreatorTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); + +protected: + RefPtr CreateComponent(const std::string& testJson); + void CompareAllProperty(const RefPtr& slider); + void CompareAllDefault(const RefPtr& slider); +}; + +void VideoCreatorTest::SetUpTestCase() {} + +void VideoCreatorTest::TearDownTestCase() {} + +void VideoCreatorTest::SetUp() {} + +void VideoCreatorTest::TearDown() {} + +RefPtr VideoCreatorTest::CreateComponent(const std::string& testJson) +{ + const auto dslBuf = reinterpret_cast(testJson.c_str()); + size_t dslLen = testJson.length(); + RefPtr component = ComponentFactory::GetInstance().CreateComponentFromDsl(dslBuf, dslLen); + if (component == nullptr) { + return nullptr; + } + return AceType::DynamicCast(component); +} + +void VideoCreatorTest::CompareAllProperty(const RefPtr& video) +{ + EXPECT_TRUE(video->GetSrc() == JSON_SRC); + EXPECT_TRUE(video->IsAutoPlay() == JSON_AUTOPLAY); + EXPECT_TRUE(video->GetPoster() == JSON_POSTER); + EXPECT_TRUE(video->NeedControls() == JSON_CONTROLS); + EXPECT_TRUE(video->IsMute() == JSON_MUTED); + EXPECT_TRUE(video->GetFit() == JSON_FIT); + EXPECT_TRUE(video->GetPreparedEventId() == JSON_PREPARED_EVENT_ID); + EXPECT_TRUE(video->GetStartEventId() == JSON_START_EVENT_ID); + EXPECT_TRUE(video->GetPauseEventId() == JSON_PAUSE_EVENT_ID); + EXPECT_TRUE(video->GetFinishEventId() == JSON_FINISH_EVENT_ID); + EXPECT_TRUE(video->GetErrorEventId() == JSON_ERROR_EVENT_ID); + EXPECT_TRUE(video->GetSeekingEventId() == JSON_SEEKING_EVENT_ID); + EXPECT_TRUE(video->GetSeekedEventId() == JSON_SEEKED_EVENT_ID); + EXPECT_TRUE(video->GetTimeUpdateEventId() == JSON_TIMEUPDATE_EVENT_ID); + EXPECT_TRUE(video->GetFullscreenChangeEventId() == JSON_FULLSCREENCHANGE_EVENT_ID); +} + +void VideoCreatorTest::CompareAllDefault(const RefPtr& video) +{ + EXPECT_TRUE(video->GetSrc() == JSON_SRC); + EXPECT_TRUE(video->IsAutoPlay() == false); + EXPECT_TRUE(video->GetPoster().empty()); + EXPECT_TRUE(video->NeedControls() == true); + EXPECT_TRUE(video->IsMute() == false); + EXPECT_TRUE(video->GetFit() == ImageFit::CONTAIN); + EXPECT_TRUE(video->GetPreparedEventId().IsEmpty()); + EXPECT_TRUE(video->GetStartEventId().IsEmpty()); + EXPECT_TRUE(video->GetPauseEventId().IsEmpty()); + EXPECT_TRUE(video->GetFinishEventId().IsEmpty()); + EXPECT_TRUE(video->GetErrorEventId().IsEmpty()); + EXPECT_TRUE(video->GetSeekingEventId().IsEmpty()); + EXPECT_TRUE(video->GetSeekedEventId().IsEmpty()); + EXPECT_TRUE(video->GetTimeUpdateEventId().IsEmpty()); + EXPECT_TRUE(video->GetFullscreenChangeEventId().IsEmpty()); +} + +/** + * @tc.name: VideoComponentCreator001 + * @tc.desc: Test all the property created properly + * @tc.type: FUNC + * @tc.require: AR000DAR0T AR000DACKK + * @tc.author: HeSu + */ +HWTEST_F(VideoCreatorTest, VideoComponentCreator001, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string with all property. + */ + std::string testJson = "{ " + " \"className\": \"Video\", " + " \"src\": \"file:///data/data/hiace/files/data/test.mp4\", " + " \"autoplay\": true, " + " \"poster\": \"file:///data/data/hiace/files/data/test.png\", " + " \"controls\": true, " + " \"muted\": true, " + " \"videofit\": \"cover\", " + " \"onPreparedId\": \"onPreparedId1\", " + " \"onStartId\": \"onStartId1\", " + " \"onPauseId\": \"onPauseId1\", " + " \"onFinishId\": \"onFinishId1\", " + " \"onErrorId\": \"onErrorId1\", " + " \"onSeekingId\": \"onSeekingId1\", " + " \"onSeekedId\": \"onSeekedId1\", " + " \"onTimeUpdateId\": \"onTimeUpdateId1\", " + " \"onFullScreenChangeId\": \"onFullScreenChangeId1\" " + "}"; + /** + * @tc.steps: step2. check all property matched + * @tc.expected: step2. all property match + */ + RefPtr video = CreateComponent(testJson); + ASSERT_TRUE(video != nullptr); + CompareAllProperty(video); +} + +/** + * @tc.name: VideoComponentCreator002 + * @tc.desc: Test value validation. If src is invalid, create component failed. + * @tc.type: FUNC + * @tc.require: AR000DAR0T AR000DACKK + * @tc.author: HeSu + */ +HWTEST_F(VideoCreatorTest, VideoComponentCreator002, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string without src. + */ + std::string testJson = "{ " + " \"className\": \"Video\", " + " \"autoplay\": true, " + " \"poster\": \"file:///data/data/hiace/files/data/test.png\", " + " \"controls\": true, " + " \"muted\": true, " + " \"videofit\": \"contain\", " + " \"onPreparedId\": \"onPreparedId1\", " + " \"onStartId\": \"onStartId1\", " + " \"onPauseId\": \"onPauseId1\", " + " \"onFinishId\": \"onFinishId\", " + " \"onErrorId\": \"onErrorId\", " + " \"onSeekingId\": \"onSeekingId\", " + " \"onSeekedId\": \"onSeekedId\", " + " \"onTimeUpdateId\": \"onTimeUpdateId\", " + " \"onFullScreenChangeId\": \"onFullScreenChangeId\" " + "}"; + /** + * @tc.steps: step2. check component is null or not + * @tc.expected: step2. component is nullptr + */ + RefPtr video = CreateComponent(testJson); + ASSERT_TRUE(video == nullptr); +} + +/** + * @tc.name: VideoComponentCreator003 + * @tc.desc: Test the VideoComponent initialized by default value. + * @tc.type: FUNC + * @tc.require: AR000DAR0T AR000DACKK + * @tc.author: YaoYuchi + */ +HWTEST_F(VideoCreatorTest, VideoComponentCreator003, TestSize.Level1) +{ + /** + * @tc.steps: step1. construct the json string with value, minValue and maxValue. And choose min > value + */ + std::string testJson = "{ " + " \"className\": \"Video\", " + " \"src\": \"file:///data/data/hiace/files/data/test.mp4\" " + "}"; + /** + * @tc.steps: step2. check all property matched + * @tc.expected: step2. all property matched + */ + RefPtr video = CreateComponent(testJson); + EXPECT_TRUE(video != nullptr); + CompareAllDefault(video); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/view_update/BUILD.gn b/frameworks/core/components/test/unittest/view_update/BUILD.gn new file mode 100644 index 00000000..560d3791 --- /dev/null +++ b/frameworks/core/components/test/unittest/view_update/BUILD.gn @@ -0,0 +1,59 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +if (is_standard_system) { + module_output_path = "ace_engine_standard/graphicalbasicability/viewupdate" +} + +ohos_unittest("ViewUpdateTest") { + module_out_path = module_output_path + + sources = [ "view_update_test.cpp" ] + + configs = [ + ":config_view_update_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + deps += [ "$ace_root/frameworks/bridge:js_framework_ohos" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_view_update_test") { + visibility = [ ":*" ] + include_dirs = [ + "//utils/native/base/include", + "$ace_root", + ] +} + +group("unittest") { + testonly = true + deps = [] + + deps = [ ":ViewUpdateTest" ] +} diff --git a/frameworks/core/components/test/unittest/view_update/view_update_test.cpp b/frameworks/core/components/test/unittest/view_update/view_update_test.cpp new file mode 100644 index 00000000..289ad98b --- /dev/null +++ b/frameworks/core/components/test/unittest/view_update/view_update_test.cpp @@ -0,0 +1,767 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "core/components/box/box_component.h" +#include "core/components/flex/flex_component.h" +#include "core/components/padding/padding_component.h" +#include "core/components/root/root_component.h" +#include "core/components/root/root_element.h" +#include "core/components/text/render_text.h" +#include "core/components/text/text_component.h" +#include "core/pipeline/base/composed_component.h" +#include "core/pipeline/base/composed_element.h" + +using namespace testing; +using namespace testing::ext; +using namespace std; + +namespace OHOS::Ace { + +const ComposeId ROOT_COMPOSE_ID = "root"; +const string ROOT_COMPOSE_NAME = "rootCompose"; + +class NodeInfo { +public: + NodeInfo(const string& tag, int32_t depth, int32_t childrenNum) + : tag_(tag), depth_(depth), childrenNum_(childrenNum), data_() + {} + + NodeInfo(const string& tag, int32_t depth, int32_t childrenNum, string data) + : tag_(tag), depth_(depth), childrenNum_(childrenNum), data_(data) + {} + + ~NodeInfo() = default; + +public: + string tag_; + int32_t depth_ = 0; + int32_t childrenNum_ = 0; + string data_; +}; + +class ViewUpdateTest : public testing::Test { +public: + static void SetUpTestCase() {} + static void TearDownTestCase() {} + void SetUp(); + void TearDown(); + + void BuildEmptyTrees(); + void BuildSingleChildTrees(const string& child, const string& textData = ""); + void BuildMultipleChildrenTrees(const vector& children, const vector& textData = vector()); + void UpdateAndValidate(); + + static void DumpElementTree(const RefPtr& element, int32_t depth, vector& treeInfo); + static void DumpRenderTree(const RefPtr& renderNode, int32_t depth, vector& treeInfo); + static void PrintTreeInfo(const vector& treeInfo); + static bool IsTreeEqual(const vector& treeInfoA, const vector& treeInfoB); + +private: + RefPtr composedElement_; + RefPtr rootElement_; + RefPtr rootRender_; + + RefPtr newComposedComponent_; + vector newElementTree_; + vector newRenderTree_; +}; + +void ViewUpdateTest::SetUp() +{ + // setup component tree + RefPtr rootCompose = + AceType::MakeRefPtr(ROOT_COMPOSE_ID, ROOT_COMPOSE_NAME, nullptr); + RefPtr rootComponent = AceType::MakeRefPtr(rootCompose); + + // setup element tree and render tree + rootElement_ = AceType::MakeRefPtr(); + ASSERT_TRUE(rootElement_); + rootElement_->SetPipelineContext(nullptr); + rootElement_->SetNewComponent(rootComponent); + rootElement_->Mount(nullptr); + ASSERT_FALSE(rootElement_->GetChildren().empty()); + composedElement_ = AceType::DynamicCast(rootElement_->GetChildren().front()); + ASSERT_TRUE(composedElement_); + rootRender_ = rootElement_->GetRenderNode(); + ASSERT_TRUE(rootRender_); +} + +void ViewUpdateTest::TearDown() +{ + rootElement_ = nullptr; + composedElement_ = nullptr; + rootRender_ = nullptr; + + newComposedComponent_ = nullptr; + newElementTree_.clear(); + newRenderTree_.clear(); +} + +void ViewUpdateTest::DumpElementTree(const RefPtr& element, int32_t depth, vector& treeInfo) +{ + const list>& children = element->GetChildren(); + treeInfo.emplace_back(AceType::TypeName(element), depth, children.size()); + for (const auto& item : children) { + DumpElementTree(item, depth + 1, treeInfo); + } +} + +void ViewUpdateTest::DumpRenderTree(const RefPtr& renderNode, int32_t depth, vector& treeInfo) +{ + const list>& children = renderNode->GetChildren(); + RefPtr renderText = AceType::DynamicCast(renderNode); + if (renderText) { + treeInfo.emplace_back(AceType::TypeName(renderNode), depth, children.size(), renderText->GetTextData()); + } else { + treeInfo.emplace_back(AceType::TypeName(renderNode), depth, children.size()); + } + for (const auto& item : children) { + DumpRenderTree(item, depth + 1, treeInfo); + } +} + +void ViewUpdateTest::PrintTreeInfo(const vector& treeInfo) +{ + for (const auto& node : treeInfo) { + ostringstream nodeInfo; + nodeInfo << "[" << node.depth_ << "]\t[" << node.childrenNum_ << "]\t[" << node.tag_; + if (node.data_.empty()) { + nodeInfo << "]"; + } else { + nodeInfo << "]\t[" << node.data_ << "]"; + } + GTEST_LOG_(INFO) << nodeInfo.str(); + } +} + +bool ViewUpdateTest::IsTreeEqual(const vector& treeInfoA, const vector& treeInfoB) +{ + if (treeInfoA.size() != treeInfoB.size()) { + return false; + } + for (size_t i = 0; i < treeInfoA.size(); ++i) { + if (treeInfoA[i].tag_ != treeInfoB[i].tag_ || + treeInfoA[i].depth_ != treeInfoB[i].depth_ || + treeInfoA[i].childrenNum_ != treeInfoB[i].childrenNum_ || + treeInfoA[i].data_ != treeInfoB[i].data_) { + return false; + } + } + return true; +} + +void ViewUpdateTest::BuildEmptyTrees() +{ + newElementTree_.clear(); + newElementTree_.emplace_back("RootElement", 0, 1); + newElementTree_.emplace_back("ComposedElement", 1, 0); + + newRenderTree_.clear(); + newRenderTree_.emplace_back("FlutterRenderRoot", 0, 0); + + newComposedComponent_ = AceType::MakeRefPtr(ROOT_COMPOSE_ID, ROOT_COMPOSE_NAME, nullptr); +}; + +void ViewUpdateTest::BuildSingleChildTrees(const string& child, const string& textData) +{ + newElementTree_.clear(); + newElementTree_.emplace_back("RootElement", 0, 1); + newElementTree_.emplace_back("ComposedElement", 1, 1); + + newRenderTree_.clear(); + newRenderTree_.emplace_back("FlutterRenderRoot", 0, 1); + + RefPtr childComponent; + if (child == "text") { + childComponent = AceType::MakeRefPtr(textData); + newElementTree_.emplace_back("TextElement", 2, 0); + newRenderTree_.emplace_back("FlutterRenderText", 1, 0, textData); + } else if (child == "box") { + childComponent = AceType::MakeRefPtr(); + newElementTree_.emplace_back("BoxElement", 2, 0); + newRenderTree_.emplace_back("FlutterRenderBox", 1, 0); + } else if (child == "padding") { + childComponent = AceType::MakeRefPtr(); + newElementTree_.emplace_back("PaddingElement", 2, 0); + newRenderTree_.emplace_back("FlutterRenderPadding", 1, 0); + } + newComposedComponent_ = AceType::MakeRefPtr(ROOT_COMPOSE_ID, ROOT_COMPOSE_NAME, childComponent); +} + +void ViewUpdateTest::BuildMultipleChildrenTrees(const vector& children, const vector& textData) +{ + size_t textChildrenNum = count(children.begin(), children.end(), "text"); + ASSERT_EQ(textChildrenNum, textData.size()); + + newElementTree_.clear(); + newElementTree_.emplace_back("RootElement", 0, 1); + newElementTree_.emplace_back("ComposedElement", 1, 1); + newElementTree_.emplace_back("RowElement", 2, children.size()); + + newRenderTree_.clear(); + newRenderTree_.emplace_back("FlutterRenderRoot", 0, 1); + newRenderTree_.emplace_back("RenderFlex", 1, children.size()); + + std::list> rowChildren; + size_t textId = 0; + for (const auto& node : children) { + if (node == "text") { + rowChildren.emplace_back(AceType::MakeRefPtr(textData.at(textId))); + newElementTree_.emplace_back("TextElement", 3, 0); + newRenderTree_.emplace_back("FlutterRenderText", 2, 0, textData.at(textId)); + ++textId; + } else if (node == "box") { + rowChildren.emplace_back(AceType::MakeRefPtr()); + newElementTree_.emplace_back("BoxElement", 3, 0); + newRenderTree_.emplace_back("FlutterRenderBox", 2, 0); + } else if (node == "padding") { + rowChildren.emplace_back(AceType::MakeRefPtr()); + newElementTree_.emplace_back("PaddingElement", 3, 0); + newRenderTree_.emplace_back("FlutterRenderPadding", 2, 0); + } + } + RefPtr rowComponent = + AceType::MakeRefPtr(FlexAlign::CENTER, FlexAlign::CENTER, rowChildren); + newComposedComponent_ = AceType::MakeRefPtr(ROOT_COMPOSE_ID, ROOT_COMPOSE_NAME, rowComponent); +} + +void ViewUpdateTest::UpdateAndValidate() +{ + vector elementTreeInfo; + vector renderTreeInfo; + composedElement_->SetNewComponent(newComposedComponent_); + composedElement_->Rebuild(); + DumpElementTree(rootElement_, 0, elementTreeInfo); + DumpRenderTree(rootRender_, 0, renderTreeInfo); + + ASSERT_TRUE(IsTreeEqual(elementTreeInfo, newElementTree_)); + ASSERT_TRUE(IsTreeEqual(renderTreeInfo, newRenderTree_)); +} + +/** + * @tc.name: ViewUpdateTest001 + * @tc.desc: View Updates caused by adding components. + * @tc.type: FUNC + * @tc.require: AR000DAIGB + * @tc.author: fanzhaonan + */ +HWTEST_F(ViewUpdateTest, ViewUpdateTest001, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "ViewUpdateTest001"; + + /** + * @tc.steps: step1. Build a composed component tree containing only one TextComponent, update and check results. + * @tc.expected: step1. Element tree and render tree are the same as expected. + */ + BuildSingleChildTrees("text", "text data"); + UpdateAndValidate(); +} + +/** + * @tc.name: ViewUpdateTest002 + * @tc.desc: View Updates caused by adding components. + * @tc.type: FUNC + * @tc.require: AR000DAIGB + * @tc.author: fanzhaonan + */ +HWTEST_F(ViewUpdateTest, ViewUpdateTest002, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "ViewUpdateTest002"; + vector children; + vector textData; + + /** + * @tc.steps: step1. Build a composed component tree containing a Row Component, update and check results. + * @tc.expected: step1. Element tree and render tree are the same as expected. + */ + children.emplace_back("text"); + children.emplace_back("text"); + textData.emplace_back("first text"); + textData.emplace_back("second text"); + BuildMultipleChildrenTrees(children, textData); + UpdateAndValidate(); +} + +/** + * @tc.name: ViewUpdateTest003 + * @tc.desc: View Updates caused by adding components. + * @tc.type: FUNC + * @tc.require: AR000DAIGB + * @tc.author: fanzhaonan + */ +HWTEST_F(ViewUpdateTest, ViewUpdateTest003, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "ViewUpdateTest003"; + vector children; + vector textData; + + /** + * @tc.steps: step1. Build a composed component tree containing a Row Component with two children, + * update and check results. + * @tc.expected: step1. Element tree and render tree are the same as expected. + */ + children.emplace_back("text"); + children.emplace_back("text"); + textData.emplace_back("first text"); + textData.emplace_back("second text"); + BuildMultipleChildrenTrees(children, textData); + UpdateAndValidate(); + + /** + * @tc.steps: step2. Build a composed component tree containing a Row Component with three children, + * update and check results. + * @tc.expected: step2. New elements are correctly added into element tree, + * and new render objects are correctly added into render tree. + */ + children.clear(); + textData.clear(); + children.emplace_back("text"); + children.emplace_back("text"); + children.emplace_back("text"); + textData.emplace_back("first text"); + textData.emplace_back("second text"); + textData.emplace_back("third text"); + BuildMultipleChildrenTrees(children, textData); + UpdateAndValidate(); +} + +/** + * @tc.name: ViewUpdateTest004 + * @tc.desc: View Updates caused by deleting components. + * @tc.type: FUNC + * @tc.require: AR000DAIGD + * @tc.author: fanzhaonan + */ +HWTEST_F(ViewUpdateTest, ViewUpdateTest004, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "ViewUpdateTest004"; + + /** + * @tc.steps: step1. Build a composed component tree containing only one TextComponent, update and check results. + * @tc.expected: step1. Element tree and render tree are the same as expected. + */ + BuildSingleChildTrees("text", "text data"); + UpdateAndValidate(); + + /** + * @tc.steps: step2. Build an empty composed component tree, update and check results. + * @tc.expected: step2. TextElement is removed form element tree and RenderText is removed from render tree. + */ + BuildEmptyTrees(); + UpdateAndValidate(); +} + +/** + * @tc.name: ViewUpdateTest005 + * @tc.desc: View Updates caused by deleting components. + * @tc.type: FUNC + * @tc.require: AR000DAIGD + * @tc.author: fanzhaonan + */ +HWTEST_F(ViewUpdateTest, ViewUpdateTest005, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "ViewUpdateTest005"; + vector children; + vector textData; + + /** + * @tc.steps: step1. Build a composed component tree containing a Row Component with three children, + * update and check results. + * @tc.expected: step1. Element tree and render tree are the same as expected. + */ + children.emplace_back("text"); + children.emplace_back("text"); + children.emplace_back("text"); + textData.emplace_back("first text"); + textData.emplace_back("second text"); + textData.emplace_back("third text"); + BuildMultipleChildrenTrees(children, textData); + UpdateAndValidate(); + + /** + * @tc.steps: step2. Build an empty composed component tree, update and check results. + * @tc.expected: step2. All TextElement is removed form element tree and All RenderText is removed from render tree. + */ + BuildEmptyTrees(); + UpdateAndValidate(); +} + +/** + * @tc.name: ViewUpdateTest006 + * @tc.desc: View Updates caused by deleting components. + * @tc.type: FUNC + * @tc.require: AR000DAIGD + * @tc.author: fanzhaonan + */ +HWTEST_F(ViewUpdateTest, ViewUpdateTest006, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "ViewUpdateTest006"; + vector children; + vector textData; + + /** + * @tc.steps: step1. Build a composed component tree containing a Row Component with three children, + * update and check results. + * @tc.expected: step1. Element tree and render tree are the same as expected. + */ + children.emplace_back("text"); + children.emplace_back("text"); + children.emplace_back("text"); + textData.emplace_back("first text"); + textData.emplace_back("second text"); + textData.emplace_back("third text"); + BuildMultipleChildrenTrees(children, textData); + UpdateAndValidate(); + + /** + * @tc.steps: step2. Build a composed component tree containing a Row Component with two children, + * update and check results. + * @tc.expected: step2. One TextElement is removed form element tree and One RenderText is removed from render tree. + */ + children.clear(); + textData.clear(); + children.emplace_back("text"); + children.emplace_back("text"); + textData.emplace_back("first text"); + textData.emplace_back("second text"); + BuildMultipleChildrenTrees(children, textData); + UpdateAndValidate(); +} + +/** + * @tc.name: ViewUpdateTest007 + * @tc.desc: View Updates caused by updating components. + * @tc.type: FUNC + * @tc.require: AR000DAIGC + * @tc.author: fanzhaonan + */ +HWTEST_F(ViewUpdateTest, ViewUpdateTest007, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "ViewUpdateTest007"; + + /** + * @tc.steps: step1. Build a composed component tree containing only one TextComponent which content is "text data", + * update and check results. + * @tc.expected: step1. Element tree and render tree are the same as expected. + */ + BuildSingleChildTrees("text", "text data"); + UpdateAndValidate(); + + /** + * @tc.steps: step2. Build a composed component tree containing only one TextComponent which content is "updated + * text data", update and check results. + * @tc.expected: step2. Content of RenderText is changed as expected. + */ + BuildSingleChildTrees("text", "updated text data"); + UpdateAndValidate(); +} + +/** + * @tc.name: ViewUpdateTest008 + * @tc.desc: View Updates caused by updating components. + * @tc.type: FUNC + * @tc.require: AR000DAIGC + * @tc.author: fanzhaonan + */ +HWTEST_F(ViewUpdateTest, ViewUpdateTest008, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "ViewUpdateTest008"; + + /** + * @tc.steps: step1. Build a composed component tree containing only one TextComponent which content is "text data", + * update and check results. + * @tc.expected: step1. Element tree and render tree are the same as expected. + */ + BuildSingleChildTrees("text", "text data"); + UpdateAndValidate(); + + /** + * @tc.steps: step2. Build a composed component tree containing one BoxComponent, update and check results. + * @tc.expected: step2. Elements in element tree and render objects in render tree are changed as expected. + */ + BuildSingleChildTrees("box"); + UpdateAndValidate(); +} + +/** + * @tc.name: ViewUpdateTest009 + * @tc.desc: View Updates caused by updating components. + * @tc.type: FUNC + * @tc.require: AR000DAIGC + * @tc.author: fanzhaonan + */ +HWTEST_F(ViewUpdateTest, ViewUpdateTest009, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "ViewUpdateTest009"; + vector children; + vector textData; + + /** + * @tc.steps: step1. Build a composed component tree containing a Row Component with five children, all of them are + * Text Component. The content of these child nodes as follows: + * "first text" | "second text" | "third text" | "fourth text" | "fifth text" + * update and check results. + * @tc.expected: step1. Element tree and render tree are the same as expected. + */ + children.emplace_back("text"); + children.emplace_back("text"); + children.emplace_back("text"); + children.emplace_back("text"); + children.emplace_back("text"); + textData.emplace_back("first text"); + textData.emplace_back("second text"); + textData.emplace_back("third text"); + textData.emplace_back("fourth text"); + textData.emplace_back("fifth text"); + BuildMultipleChildrenTrees(children, textData); + UpdateAndValidate(); + + /** + * @tc.steps: step2. Build a composed component tree containing a Row Component with five children, all of them are + * Text Component. The content of these child nodes as follows: + * "first text" | "updated second text" | "third text" | "fourth text" | "fifth text" + * update and check results. + * @tc.expected: step2. Element tree and render tree are the same as expected. + */ + children.clear(); + textData.clear(); + children.emplace_back("text"); + children.emplace_back("text"); + children.emplace_back("text"); + children.emplace_back("text"); + children.emplace_back("text"); + textData.emplace_back("first text"); + textData.emplace_back("updated second text"); + textData.emplace_back("third text"); + textData.emplace_back("fourth text"); + textData.emplace_back("fifth text"); + BuildMultipleChildrenTrees(children, textData); + UpdateAndValidate(); +} + +/** + * @tc.name: ViewUpdateTest010 + * @tc.desc: View Updates caused by updating components. + * @tc.type: FUNC + * @tc.require: AR000DAIGC + * @tc.author: fanzhaonan + */ +HWTEST_F(ViewUpdateTest, ViewUpdateTest010, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "ViewUpdateTest010"; + vector children; + vector textData; + + /** + * @tc.steps: step1. Build a composed component tree containing a Row Component with five children, all of them are + * Text Component. The content of these child nodes as follows: + * "first text" | "second text" | "third text" | "fourth text" | "fifth text" + * update and check results. + * @tc.expected: step1. Element tree and render tree are the same as expected. + */ + children.emplace_back("text"); + children.emplace_back("text"); + children.emplace_back("text"); + children.emplace_back("text"); + children.emplace_back("text"); + textData.emplace_back("first text"); + textData.emplace_back("second text"); + textData.emplace_back("third text"); + textData.emplace_back("fourth text"); + textData.emplace_back("fifth text"); + BuildMultipleChildrenTrees(children, textData); + UpdateAndValidate(); + + /** + * @tc.steps: step2. Build a composed component tree containing a Row Component with five children, all of them are + * Text Component. The content of these child nodes as follows: + * "first text" | "updated second text" | "third text" | "updated fourth text" | "fifth text" + * update and check results. + * @tc.expected: step2. Element tree and render tree are the same as expected. + */ + children.clear(); + textData.clear(); + children.emplace_back("text"); + children.emplace_back("text"); + children.emplace_back("text"); + children.emplace_back("text"); + children.emplace_back("text"); + textData.emplace_back("first text"); + textData.emplace_back("updated second text"); + textData.emplace_back("third text"); + textData.emplace_back("updated fourth text"); + textData.emplace_back("fifth text"); + BuildMultipleChildrenTrees(children, textData); + UpdateAndValidate(); +} + +/** + * @tc.name: ViewUpdateTest011 + * @tc.desc: View Updates caused by updating components. + * @tc.type: FUNC + * @tc.require: AR000DAIGC + * @tc.author: fanzhaonan + */ +HWTEST_F(ViewUpdateTest, ViewUpdateTest011, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "ViewUpdateTest011"; + vector children; + vector textData; + + /** + * @tc.steps: step1. Build a composed component tree containing a Row Component with five children, all of them are + * Text Component. + * @tc.expected: step1. Element tree and render tree are the same as expected. + */ + children.emplace_back("text"); + children.emplace_back("text"); + children.emplace_back("text"); + children.emplace_back("text"); + children.emplace_back("text"); + textData.emplace_back("first text"); + textData.emplace_back("second text"); + textData.emplace_back("third text"); + textData.emplace_back("fourth text"); + textData.emplace_back("fifth text"); + BuildMultipleChildrenTrees(children, textData); + UpdateAndValidate(); + + /** + * @tc.steps: step2. Build a composed component tree containing a Row Component with five children, four of them are + * Text Component and one is Box Component. + * @tc.expected: step2. Element tree and render tree are the same as expected. + */ + children.clear(); + textData.clear(); + children.emplace_back("text"); + children.emplace_back("box"); + children.emplace_back("text"); + children.emplace_back("text"); + children.emplace_back("text"); + textData.emplace_back("first text"); + textData.emplace_back("third text"); + textData.emplace_back("fourth text"); + textData.emplace_back("fifth text"); + BuildMultipleChildrenTrees(children, textData); + UpdateAndValidate(); +} + +/** + * @tc.name: ViewUpdateTest012 + * @tc.desc: View Updates caused by updating components. + * @tc.type: FUNC + * @tc.require: AR000DAIGC + * @tc.author: fanzhaonan + */ +HWTEST_F(ViewUpdateTest, ViewUpdateTest012, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "ViewUpdateTest012"; + vector children; + vector textData; + + /** + * @tc.steps: step1. Build a composed component tree containing a Row Component with five children, all of them are + * Text Component. + * @tc.expected: step1. Element tree and render tree are the same as expected. + */ + children.emplace_back("text"); + children.emplace_back("text"); + children.emplace_back("text"); + children.emplace_back("text"); + children.emplace_back("text"); + textData.emplace_back("first text"); + textData.emplace_back("second text"); + textData.emplace_back("third text"); + textData.emplace_back("fourth text"); + textData.emplace_back("fifth text"); + BuildMultipleChildrenTrees(children, textData); + UpdateAndValidate(); + + /** + * @tc.steps: step2. Build a composed component tree containing a Row Component with five children, three of them + * are Text Component and two are Box Component. + * @tc.expected: step2. Element tree and render tree are the same as expected. + */ + children.clear(); + textData.clear(); + children.emplace_back("text"); + children.emplace_back("text"); + children.emplace_back("box"); + children.emplace_back("box"); + children.emplace_back("text"); + textData.emplace_back("first text"); + textData.emplace_back("second text"); + textData.emplace_back("fifth text"); + BuildMultipleChildrenTrees(children, textData); + UpdateAndValidate(); +} + +/** + * @tc.name: ViewUpdateTest013 + * @tc.desc: View Updates caused by updating components. + * @tc.type: FUNC + * @tc.require: AR000DAIGC + * @tc.author: fanzhaonan + */ +HWTEST_F(ViewUpdateTest, ViewUpdateTest013, TestSize.Level1) +{ + GTEST_LOG_(INFO) << "ViewUpdateTest0013"; + vector children; + vector textData; + + /** + * @tc.steps: step1. Build a composed component tree containing a Row Component with five children, all of them are + * Text Component. The content of these child nodes as follows: + * "first text" | "second text" | "third text" | "fourth text" | "fifth text" + * update and check results. + * @tc.expected: step1. Element tree and render tree are the same as expected. + */ + children.emplace_back("text"); + children.emplace_back("text"); + children.emplace_back("text"); + children.emplace_back("text"); + children.emplace_back("text"); + textData.emplace_back("first text"); + textData.emplace_back("second text"); + textData.emplace_back("third text"); + textData.emplace_back("fourth text"); + textData.emplace_back("fifth text"); + BuildMultipleChildrenTrees(children, textData); + UpdateAndValidate(); + + /** + * @tc.steps: step2. Build a composed component tree containing a Row Component with five children, three of them + * are Text Component and two are Box Component. The content of those Text Component as follows: + * "updated second text" | "updated fourth text" | "fifth text" + * update and check results. + * @tc.expected: step2. Element tree and render tree are the same as expected. + */ + children.clear(); + textData.clear(); + children.emplace_back("box"); + children.emplace_back("text"); + children.emplace_back("box"); + children.emplace_back("text"); + children.emplace_back("text"); + textData.emplace_back("updated second text"); + textData.emplace_back("updated fourth text"); + textData.emplace_back("fifth text"); + BuildMultipleChildrenTrees(children, textData); + UpdateAndValidate(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/test/unittest/wrap/BUILD.gn b/frameworks/core/components/test/unittest/wrap/BUILD.gn new file mode 100644 index 00000000..5b885bd3 --- /dev/null +++ b/frameworks/core/components/test/unittest/wrap/BUILD.gn @@ -0,0 +1,68 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +if (is_standard_system) { + module_output_path = "ace_engine_standard/backenduicomponent/wrap" +} + +ohos_unittest("RenderWrapTest") { + module_out_path = module_output_path + + sources = [ + "$ace_root/frameworks/core/components/test/json/json_frontend.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/mock_render_common.cpp", + "render_wrap_test.cpp", + "wrap_test_utils.cpp", + ] + + configs = [ + ":config_render_wrap_test", + "$ace_root:ace_test_config", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + configs += [ "//third_party/curl:curl_config" ] + deps += [ + "$ace_root/frameworks/bridge:js_framework_ohos", + "//third_party/curl:curl", + ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_render_wrap_test") { + visibility = [ ":*" ] + include_dirs = [ + "//utils/native/base/include", + "$ace_root", + ] +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":RenderWrapTest" ] +} diff --git a/frameworks/core/components/test/unittest/wrap/render_wrap_test.cpp b/frameworks/core/components/test/unittest/wrap/render_wrap_test.cpp new file mode 100644 index 00000000..ca24ce04 --- /dev/null +++ b/frameworks/core/components/test/unittest/wrap/render_wrap_test.cpp @@ -0,0 +1,1023 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "base/geometry/dimension.h" +#include "base/log/log.h" +#include "base/utils/utils.h" +#include "core/components/test/unittest/mock/mock_render_common.h" +#include "core/components/test/unittest/wrap/wrap_test_utils.h" +#include "core/components/wrap/wrap_component.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +constexpr double BOX_WIDTH = 500; +constexpr double BOX_HEIGHT = 40; +constexpr double SMALL_BOX_WIDTH = 100; +constexpr double SMALL_BOX_HEIGHT = 100; +constexpr double MID_BOX_HEIGHT = 500; +constexpr double MID_BOX_WIDTH = 500; +constexpr double MID_LARGE_BOX_HEIGHT = 1000; + +constexpr double BIG_BOX_WIDTH = 2000; +constexpr double BIG_BOX_HEIGHT = 2000; +constexpr double SPACE = 20; +constexpr double CROSS_LENGTH = 20; +constexpr double MAIN_LENGTH = 80; + +constexpr double ALIGNMENT_OFFSET_VALUE = 290; +constexpr double SPACE_BETWEEN_OFFSET = 80; +constexpr double SPACE_AROUND_OFFSET_WIDTH = 560; +constexpr double SPACE_AROUND_OFFSET = 290; + +// constants for test18 +constexpr double VERTICAL_SPACE_AROUND_OFFSET = 1424; +constexpr double VERTICAL_SPACE_AROUND_OFFSET_HEIGHT = 1948; + +// constants for test19 +constexpr double FIRST_BOX_HEIGHT_OFFSET = 12; +constexpr double SECOND_BOX_HEIGHT_OFFSET = 1036; +constexpr double THIRD_BOX_HEIGHT_OFFSET = 524; + +} // namespace + +class RenderWrapTest : public testing::Test { +public: + static void SetUpTestCase() {} + static void TearDownTestCase() {} + void SetUp() {} + void TearDown() {} +}; + +/** + * @tc.name: RenderWrapPerformLayout001 + * @tc.desc: Wrap component layout children correctly in horizontal + * @tc.type: FUNC + * @tc.require: AR000DBAOR + * @tc.author: Yao Yuchi + */ +HWTEST_F(RenderWrapTest, RenderWrapPerformLayout001, TestSize.Level1) +{ + /** + * @tc.steps: step1. create three boxes with size [500, 40], [500, 40], [500, 40] + */ + RefPtr root = WrapTestUtils::CreateRenderRoot(); + std::list> children; + RefPtr wrapComponent = AceType::MakeRefPtr(children); + wrapComponent->SetAlignment(WrapAlignment::START); + wrapComponent->SetMainAlignment(WrapAlignment::START); + wrapComponent->SetCrossAlignment(WrapAlignment::START); + + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr wrap = WrapTestUtils::CreateRenderWrap(wrapComponent, mockContext); + root->AddChild(wrap); + RefPtr firstBox = WrapTestUtils::CreateRenderBox(BOX_WIDTH, BOX_HEIGHT); + firstBox->Attach(mockContext); + wrap->AddChild(firstBox); + RefPtr secondBox = WrapTestUtils::CreateRenderBox(BOX_WIDTH, BOX_HEIGHT); + secondBox->Attach(mockContext); + wrap->AddChild(secondBox); + RefPtr thirdBox = WrapTestUtils::CreateRenderBox(BOX_WIDTH, BOX_HEIGHT); + thirdBox->Attach(mockContext); + wrap->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + */ + root->PerformLayout(); + + /** + * @tc.steps: step3. call PerformLayout interface + * @tc.expected: step3. the positions of three boxes are set correctly + */ + EXPECT_TRUE(firstBox->GetPosition().IsZero()); + EXPECT_TRUE(secondBox->GetPosition() == Offset(BOX_WIDTH, 0)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(0, BOX_HEIGHT)); +} + +/** + * @tc.name: RenderWrapPerformLayout002 + * @tc.desc: Wrap component layout children correctly in vertical + * @tc.type: FUNC + * @tc.require: AR000DBAOR + * @tc.author: Yao Yuchi + */ +HWTEST_F(RenderWrapTest, RenderWrapPerformLayout002, TestSize.Level1) +{ + /** + * @tc.steps: step1. create three boxes with size [500, 40], [500, 40], [500, 40] + */ + RefPtr root = WrapTestUtils::CreateRenderRoot(); + std::list> children; + RefPtr wrapComponent = AceType::MakeRefPtr(children); + wrapComponent->SetDirection(WrapDirection::VERTICAL); + wrapComponent->SetAlignment(WrapAlignment::START); + wrapComponent->SetMainAlignment(WrapAlignment::START); + wrapComponent->SetCrossAlignment(WrapAlignment::START); + + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr wrap = WrapTestUtils::CreateRenderWrap(wrapComponent, mockContext); + wrap->Attach(mockContext); + root->AddChild(wrap); + RefPtr firstBox = WrapTestUtils::CreateRenderBox(BOX_WIDTH, BOX_HEIGHT); + firstBox->Attach(mockContext); + wrap->AddChild(firstBox); + RefPtr secondBox = WrapTestUtils::CreateRenderBox(BOX_WIDTH, BOX_HEIGHT); + secondBox->Attach(mockContext); + wrap->AddChild(secondBox); + RefPtr thirdBox = WrapTestUtils::CreateRenderBox(BOX_WIDTH, BOX_HEIGHT); + thirdBox->Attach(mockContext); + wrap->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + */ + root->PerformLayout(); + + /** + * @tc.steps: step3. compare boxes position + * @tc.expected: step3. the positions of three boxes are set correctly + */ + EXPECT_TRUE(firstBox->GetPosition().IsZero()); + EXPECT_TRUE(secondBox->GetPosition() == Offset(0, BOX_HEIGHT)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(0, BOX_HEIGHT + BOX_HEIGHT)); +} + +/** + * @tc.name: RenderWrapPerformLayout003 + * @tc.desc: Wrap component layout children correctly when the constrain is smaller than requested + * @tc.type: FUNC + * @tc.require: AR000DBAOR + * @tc.author: Yao Yuchi + */ +HWTEST_F(RenderWrapTest, RenderWrapPerformLayout003, TestSize.Level1) +{ + /** + * @tc.steps: step1. create three boxes with size [2000, 2000], [2000, 2000], [2000, 2000] + */ + RefPtr root = WrapTestUtils::CreateRenderRoot(); + std::list> children; + RefPtr wrapComponent = AceType::MakeRefPtr(children); + wrapComponent->SetAlignment(WrapAlignment::START); + wrapComponent->SetMainAlignment(WrapAlignment::START); + wrapComponent->SetCrossAlignment(WrapAlignment::START); + + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr wrap = WrapTestUtils::CreateRenderWrap(wrapComponent, mockContext); + root->AddChild(wrap); + RefPtr firstBox = WrapTestUtils::CreateRenderBox(BIG_BOX_WIDTH, BIG_BOX_HEIGHT); + firstBox->Attach(mockContext); + wrap->AddChild(firstBox); + RefPtr secondBox = WrapTestUtils::CreateRenderBox(BIG_BOX_WIDTH, BIG_BOX_HEIGHT); + secondBox->Attach(mockContext); + wrap->AddChild(secondBox); + RefPtr thirdBox = WrapTestUtils::CreateRenderBox(BIG_BOX_WIDTH, BIG_BOX_HEIGHT); + thirdBox->Attach(mockContext); + wrap->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + */ + root->PerformLayout(); + + /** + * @tc.steps: step3. compare boxes position and box size + * @tc.expected: step3. the position and size of three boxes are set correctly + */ + EXPECT_TRUE(firstBox->GetPosition().IsZero()); + EXPECT_TRUE(secondBox->GetPosition() == Offset(0, BIG_BOX_HEIGHT)); + + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(SCREEN_WIDTH, BIG_BOX_HEIGHT)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(SCREEN_WIDTH, BIG_BOX_HEIGHT)); + EXPECT_TRUE(thirdBox->GetLayoutSize() == Size(SCREEN_WIDTH, BIG_BOX_HEIGHT)); +} + +/** + * @tc.name: RenderWrapPerformLayout004 + * @tc.desc: Wrap component layout children in vertical correctly when the constrain is smaller than requested + * @tc.type: FUNC + * @tc.require: AR000DBAOR + * @tc.author: Yao Yuchi + */ +HWTEST_F(RenderWrapTest, RenderWrapPerformLayout004, TestSize.Level1) +{ + /** + * @tc.steps: step1. create three boxes with size [2000, 2000], [2000, 2000], [2000, 2000] + */ + RefPtr root = WrapTestUtils::CreateRenderRoot(); + std::list> children; + RefPtr wrapComponent = AceType::MakeRefPtr(children); + wrapComponent->SetDirection(WrapDirection::VERTICAL); + wrapComponent->SetAlignment(WrapAlignment::START); + wrapComponent->SetMainAlignment(WrapAlignment::START); + wrapComponent->SetCrossAlignment(WrapAlignment::START); + + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr wrap = WrapTestUtils::CreateRenderWrap(wrapComponent, mockContext); + root->AddChild(wrap); + RefPtr firstBox = WrapTestUtils::CreateRenderBox(BIG_BOX_WIDTH, BIG_BOX_HEIGHT); + firstBox->Attach(mockContext); + wrap->AddChild(firstBox); + RefPtr secondBox = WrapTestUtils::CreateRenderBox(BIG_BOX_WIDTH, BIG_BOX_HEIGHT); + secondBox->Attach(mockContext); + wrap->AddChild(secondBox); + RefPtr thirdBox = WrapTestUtils::CreateRenderBox(BIG_BOX_WIDTH, BIG_BOX_HEIGHT); + thirdBox->Attach(mockContext); + wrap->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + */ + root->PerformLayout(); + + /** + * @tc.steps: step3. compare boxes position and box size + * @tc.expected: step3. the position and size of three boxes are set correctly + */ + EXPECT_TRUE(firstBox->GetPosition().IsZero()); + + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(SCREEN_WIDTH, BIG_BOX_HEIGHT)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(SCREEN_WIDTH, BIG_BOX_HEIGHT)); + EXPECT_TRUE(thirdBox->GetLayoutSize() == Size(SCREEN_WIDTH, BIG_BOX_HEIGHT)); +} + +/** + * @tc.name: RenderWrapPerformLayout005 + * @tc.desc: Wrap component layout children in horizontal correctly when the constrain is smaller than requested + * @tc.type: FUNC + * @tc.require: AR000DBAOR + * @tc.author: Yao Yuchi + */ +HWTEST_F(RenderWrapTest, RenderWrapPerformLayout005, TestSize.Level1) +{ + /** + * @tc.steps: step1. create three boxes with size [500, 40], [100, 100] + */ + RefPtr root = WrapTestUtils::CreateRenderRoot(); + std::list> children; + RefPtr wrapComponent = AceType::MakeRefPtr(children); + wrapComponent->SetAlignment(WrapAlignment::START); + wrapComponent->SetMainAlignment(WrapAlignment::START); + wrapComponent->SetCrossAlignment(WrapAlignment::START); + + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr wrap = WrapTestUtils::CreateRenderWrap(wrapComponent, mockContext); + root->AddChild(wrap); + RefPtr firstBox = WrapTestUtils::CreateRenderBox(BOX_WIDTH, BOX_HEIGHT); + firstBox->Attach(mockContext); + wrap->AddChild(firstBox); + RefPtr secondBox = WrapTestUtils::CreateRenderBox(SMALL_BOX_WIDTH, SMALL_BOX_HEIGHT); + secondBox->Attach(mockContext); + wrap->AddChild(secondBox); + + /** + * @tc.steps: step2. call PerformLayout interface + */ + root->PerformLayout(); + + /** + * @tc.steps: step3. compare boxes position and check the size of whole wrap + * @tc.expected: step3. the position and size of two boxes are set correctly and wrap size match + */ + EXPECT_TRUE(firstBox->GetPosition().IsZero()); + EXPECT_TRUE(secondBox->GetPosition() == Offset(BOX_WIDTH, 0)); + + EXPECT_TRUE(wrap->GetLayoutSize() == Size(SCREEN_WIDTH, SMALL_BOX_HEIGHT)); +} + +/** + * @tc.name: RenderWrapPerformLayout006 + * @tc.desc: Wrap component layout children in horizontal correctly and wrap size is correct + * @tc.type: FUNC + * @tc.require: AR000DBAOR + * @tc.author: Yao Yuchi + */ +HWTEST_F(RenderWrapTest, RenderWrapPerformLayout006, TestSize.Level1) +{ + /** + * @tc.steps: step1. create three boxes with size [500, 40], [100, 100] + */ + RefPtr root = WrapTestUtils::CreateRenderRoot(); + std::list> children; + RefPtr wrapComponent = AceType::MakeRefPtr(children); + wrapComponent->SetDirection(WrapDirection::VERTICAL); + wrapComponent->SetAlignment(WrapAlignment::START); + wrapComponent->SetMainAlignment(WrapAlignment::START); + wrapComponent->SetCrossAlignment(WrapAlignment::START); + + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr wrap = WrapTestUtils::CreateRenderWrap(wrapComponent, mockContext); + root->AddChild(wrap); + RefPtr firstBox = WrapTestUtils::CreateRenderBox(BOX_WIDTH, BOX_HEIGHT); + firstBox->Attach(mockContext); + wrap->AddChild(firstBox); + RefPtr secondBox = WrapTestUtils::CreateRenderBox(SMALL_BOX_WIDTH, SMALL_BOX_HEIGHT); + secondBox->Attach(mockContext); + wrap->AddChild(secondBox); + + /** + * @tc.steps: step2. call PerformLayout interface + */ + root->PerformLayout(); + + /** + * @tc.steps: step3. compare boxes position and check the size of whole wrap + * @tc.expected: step3. the position and size of two boxes are set correctly and wrap size match + */ + EXPECT_TRUE(firstBox->GetPosition().IsZero()); + EXPECT_TRUE(secondBox->GetPosition() == Offset(0, BOX_HEIGHT)); + + EXPECT_TRUE(wrap->GetLayoutSize() == Size(BOX_WIDTH, SCREEN_HEIGHT)); +} + +/** + * @tc.name: RenderWrapPerformLayout007 + * @tc.desc: Wrap component layout children in horizontal correctly and set space + * @tc.type: FUNC + * @tc.require: AR000DBAOS + * @tc.author: Yao Yuchi + */ +HWTEST_F(RenderWrapTest, RenderWrapPerformLayout007, TestSize.Level1) +{ + /** + * @tc.steps: step1. create three boxes with size [500, 500], [500, 500], [500, 500] + */ + RefPtr root = WrapTestUtils::CreateRenderRoot(); + std::list> children; + RefPtr wrapComponent = AceType::MakeRefPtr(children); + wrapComponent->SetAlignment(WrapAlignment::START); + wrapComponent->SetMainAlignment(WrapAlignment::START); + wrapComponent->SetCrossAlignment(WrapAlignment::START); + wrapComponent->SetSpacing(Dimension(SPACE, DimensionUnit::PX)); + wrapComponent->SetContentSpacing(Dimension(SPACE, DimensionUnit::PX)); + + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr wrap = WrapTestUtils::CreateRenderWrap(wrapComponent, mockContext); + root->AddChild(wrap); + RefPtr firstBox = WrapTestUtils::CreateRenderBox(MID_BOX_WIDTH, MID_BOX_HEIGHT); + firstBox->Attach(mockContext); + wrap->AddChild(firstBox); + RefPtr secondBox = WrapTestUtils::CreateRenderBox(MID_BOX_WIDTH, MID_BOX_HEIGHT); + secondBox->Attach(mockContext); + wrap->AddChild(secondBox); + RefPtr thirdBox = WrapTestUtils::CreateRenderBox(MID_BOX_WIDTH, MID_BOX_HEIGHT); + thirdBox->Attach(mockContext); + wrap->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + */ + root->PerformLayout(); + + /** + * @tc.steps: step3. compare boxes position and check the size of whole wrap + * @tc.expected: step3. the position and size of two boxes are set correctly and wrap size match + */ + EXPECT_TRUE(firstBox->GetPosition().IsZero()); + GTEST_LOG_(INFO) << "Posistion: %lf, %lf"; + EXPECT_TRUE(secondBox->GetPosition() == Offset(MID_BOX_WIDTH + SPACE, 0)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(0, MID_BOX_HEIGHT + SPACE)); +} + +/** + * @tc.name: RenderWrapPerformLayout008 + * @tc.desc: Wrap component layout children in vertical correctly and set space + * @tc.type: FUNC + * @tc.require: AR000DBAOS + * @tc.author: Yao Yuchi + */ +HWTEST_F(RenderWrapTest, RenderWrapPerformLayout008, TestSize.Level1) +{ + /** + * @tc.steps: step1. create three boxes with size [500, 500], [500, 500], [500, 500] + */ + RefPtr root = WrapTestUtils::CreateRenderRoot(); + std::list> children; + RefPtr wrapComponent = AceType::MakeRefPtr(children); + wrapComponent->SetDirection(WrapDirection::VERTICAL); + wrapComponent->SetAlignment(WrapAlignment::START); + wrapComponent->SetMainAlignment(WrapAlignment::START); + wrapComponent->SetCrossAlignment(WrapAlignment::START); + wrapComponent->SetSpacing(Dimension(SPACE, DimensionUnit::PX)); + wrapComponent->SetContentSpacing(Dimension(SPACE, DimensionUnit::PX)); + + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr wrap = WrapTestUtils::CreateRenderWrap(wrapComponent, mockContext); + root->AddChild(wrap); + RefPtr firstBox = WrapTestUtils::CreateRenderBox(BOX_HEIGHT, MID_LARGE_BOX_HEIGHT); + firstBox->Attach(mockContext); + wrap->AddChild(firstBox); + RefPtr secondBox = WrapTestUtils::CreateRenderBox(BOX_HEIGHT, MID_LARGE_BOX_HEIGHT); + secondBox->Attach(mockContext); + wrap->AddChild(secondBox); + RefPtr thirdBox = WrapTestUtils::CreateRenderBox(BOX_HEIGHT, MID_LARGE_BOX_HEIGHT); + thirdBox->Attach(mockContext); + wrap->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + */ + root->PerformLayout(); + + /** + * @tc.steps: step3. compare boxes position and check the size of whole wrap + * @tc.expected: step3. the position and size of two boxes are set correctly and wrap size match + */ + EXPECT_TRUE(firstBox->GetPosition().IsZero()); + EXPECT_TRUE(secondBox->GetPosition() == Offset(0, MID_LARGE_BOX_HEIGHT + SPACE)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(BOX_HEIGHT + SPACE, 0)); +} + +/** + * @tc.name: RenderWrapPerformLayout009 + * @tc.desc: Wrap component layout children in horizontal correctly. Children align by main:START and cross:CENTER + * alignment. + * @tc.type: FUNC + * @tc.require: AR000DBAOT + * @tc.author: Yao Yuchi + */ +HWTEST_F(RenderWrapTest, RenderWrapPerformLayout009, TestSize.Level1) +{ + /** + * @tc.steps: step1. create three boxes with size [500, 40], [500, 20], [500, 40] + */ + RefPtr root = WrapTestUtils::CreateRenderRoot(); + std::list> children; + RefPtr wrapComponent = AceType::MakeRefPtr(children); + wrapComponent->SetAlignment(WrapAlignment::START); + wrapComponent->SetMainAlignment(WrapAlignment::START); + wrapComponent->SetCrossAlignment(WrapAlignment::CENTER); + + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr wrap = WrapTestUtils::CreateRenderWrap(wrapComponent, mockContext); + root->AddChild(wrap); + RefPtr firstBox = WrapTestUtils::CreateRenderBox(BOX_WIDTH, BOX_HEIGHT); + firstBox->Attach(mockContext); + wrap->AddChild(firstBox); + RefPtr secondBox = WrapTestUtils::CreateRenderBox(BOX_WIDTH, CROSS_LENGTH); + secondBox->Attach(mockContext); + wrap->AddChild(secondBox); + RefPtr thirdBox = WrapTestUtils::CreateRenderBox(BOX_WIDTH, BOX_HEIGHT); + thirdBox->Attach(mockContext); + wrap->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + */ + root->PerformLayout(); + + /** + * @tc.steps: step3. compare boxes position + * @tc.expected: step3. the position matches + */ + EXPECT_TRUE(firstBox->GetPosition().IsZero()); + EXPECT_TRUE(secondBox->GetPosition() == Offset(BOX_WIDTH, (BOX_HEIGHT - CROSS_LENGTH) / 2)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(0, BOX_HEIGHT)); +} + +/** + * @tc.name: RenderWrapPerformLayout010 + * @tc.desc: Wrap component layout children in horizontal correctly. Children align by main:CENTER and cross:START. + * @tc.type: FUNC + * @tc.require: AR000DBAOT + * @tc.author: Yao Yuchi + */ +HWTEST_F(RenderWrapTest, RenderWrapPerformLayout010, TestSize.Level1) +{ + /** + * @tc.steps: step1. create three boxes with size [500, 40], [500, 20], [500, 40] + */ + RefPtr root = WrapTestUtils::CreateRenderRoot(); + std::list> children; + RefPtr wrapComponent = AceType::MakeRefPtr(children); + wrapComponent->SetAlignment(WrapAlignment::START); + wrapComponent->SetMainAlignment(WrapAlignment::CENTER); + wrapComponent->SetCrossAlignment(WrapAlignment::START); + + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr wrap = WrapTestUtils::CreateRenderWrap(wrapComponent, mockContext); + root->AddChild(wrap); + RefPtr firstBox = WrapTestUtils::CreateRenderBox(BOX_WIDTH, BOX_HEIGHT); + firstBox->Attach(mockContext); + wrap->AddChild(firstBox); + RefPtr secondBox = WrapTestUtils::CreateRenderBox(BOX_WIDTH, CROSS_LENGTH); + secondBox->Attach(mockContext); + wrap->AddChild(secondBox); + RefPtr thirdBox = WrapTestUtils::CreateRenderBox(BOX_WIDTH, BOX_HEIGHT); + thirdBox->Attach(mockContext); + wrap->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + */ + root->PerformLayout(); + + /** + * @tc.steps: step3. compare boxes position + * @tc.expected: step3. the position matches + */ + EXPECT_TRUE(firstBox->GetPosition() == Offset(BOX_HEIGHT, 0)); + EXPECT_TRUE(secondBox->GetPosition() == Offset(BOX_WIDTH + BOX_HEIGHT, 0)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(ALIGNMENT_OFFSET_VALUE, BOX_HEIGHT)); +} + +/** + * @tc.name: RenderWrapPerformLayout011 + * @tc.desc: Wrap component layout children in horizontal correctly. Children align by main:END and cross:END. + * @tc.type: FUNC + * @tc.require: AR000DBAOT + * @tc.author: Yao Yuchi + */ +HWTEST_F(RenderWrapTest, RenderWrapPerformLayout011, TestSize.Level1) +{ + /** + * @tc.steps: step1. create three boxes with size [500, 40], [500, 20], [500, 40] + */ + RefPtr root = WrapTestUtils::CreateRenderRoot(); + std::list> children; + RefPtr wrapComponent = AceType::MakeRefPtr(children); + wrapComponent->SetAlignment(WrapAlignment::START); + wrapComponent->SetMainAlignment(WrapAlignment::END); + wrapComponent->SetCrossAlignment(WrapAlignment::END); + + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr wrap = WrapTestUtils::CreateRenderWrap(wrapComponent, mockContext); + root->AddChild(wrap); + RefPtr firstBox = WrapTestUtils::CreateRenderBox(BOX_WIDTH, BOX_HEIGHT); + firstBox->Attach(mockContext); + wrap->AddChild(firstBox); + RefPtr secondBox = WrapTestUtils::CreateRenderBox(BOX_WIDTH, CROSS_LENGTH); + secondBox->Attach(mockContext); + wrap->AddChild(secondBox); + RefPtr thirdBox = WrapTestUtils::CreateRenderBox(BOX_WIDTH, BOX_HEIGHT); + thirdBox->Attach(mockContext); + wrap->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + */ + root->PerformLayout(); + + /** + * @tc.steps: step3. compare boxes position + * @tc.expected: step3. the position matches + */ + EXPECT_TRUE(firstBox->GetPosition() == Offset(MAIN_LENGTH, 0)); + EXPECT_TRUE(secondBox->GetPosition() == Offset(MID_BOX_WIDTH + MAIN_LENGTH, CROSS_LENGTH)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(MID_BOX_WIDTH + MAIN_LENGTH, BOX_HEIGHT)); +} + +/** + * @tc.name: RenderWrapPerformLayout012 + * @tc.desc: Wrap component layout children in vertical correctly. Children align by main:START and cross:CENTER. + * @tc.type: FUNC + * @tc.require: AR000DBAOT + * @tc.author: Yao Yuchi + */ +HWTEST_F(RenderWrapTest, RenderWrapPerformLayout012, TestSize.Level1) +{ + /** + * @tc.steps: step1. create three boxes with size [40, 1000], [20, 1000], [40, 1000] + */ + RefPtr root = WrapTestUtils::CreateRenderRoot(); + std::list> children; + RefPtr wrapComponent = AceType::MakeRefPtr(children); + wrapComponent->SetDirection(WrapDirection::VERTICAL); + wrapComponent->SetAlignment(WrapAlignment::START); + wrapComponent->SetMainAlignment(WrapAlignment::START); + wrapComponent->SetCrossAlignment(WrapAlignment::CENTER); + + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr wrap = WrapTestUtils::CreateRenderWrap(wrapComponent, mockContext); + root->AddChild(wrap); + RefPtr firstBox = WrapTestUtils::CreateRenderBox(BOX_HEIGHT, MID_LARGE_BOX_HEIGHT); + firstBox->Attach(mockContext); + wrap->AddChild(firstBox); + RefPtr secondBox = WrapTestUtils::CreateRenderBox(CROSS_LENGTH, MID_LARGE_BOX_HEIGHT); + secondBox->Attach(mockContext); + wrap->AddChild(secondBox); + RefPtr thirdBox = WrapTestUtils::CreateRenderBox(BOX_HEIGHT, MID_LARGE_BOX_HEIGHT); + thirdBox->Attach(mockContext); + wrap->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + */ + root->PerformLayout(); + + /** + * @tc.steps: step3. compare boxes position + * @tc.expected: step3. the position matches + */ + EXPECT_TRUE(firstBox->GetPosition() == Offset(0, 0)); + EXPECT_TRUE(secondBox->GetPosition() == Offset((BOX_HEIGHT - CROSS_LENGTH) / 2, MID_LARGE_BOX_HEIGHT)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(BOX_HEIGHT, 0)); +} + +/** + * @tc.name: RenderWrapPerformLayout013 + * @tc.desc: Wrap component layout children in vertical correctly. Children align by main:CENTER and cross:START. + * @tc.type: FUNC + * @tc.require: AR000DBAOT + * @tc.author: Yao Yuchi + */ +HWTEST_F(RenderWrapTest, RenderWrapPerformLayout013, TestSize.Level1) +{ + /** + * @tc.steps: step1. create three boxes with size [40, 1000], [20, 1000], [40, 1000] + */ + RefPtr root = WrapTestUtils::CreateRenderRoot(); + std::list> children; + RefPtr wrapComponent = AceType::MakeRefPtr(children); + wrapComponent->SetDirection(WrapDirection::VERTICAL); + wrapComponent->SetAlignment(WrapAlignment::START); + wrapComponent->SetMainAlignment(WrapAlignment::CENTER); + wrapComponent->SetCrossAlignment(WrapAlignment::START); + + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr wrap = WrapTestUtils::CreateRenderWrap(wrapComponent, mockContext); + root->AddChild(wrap); + RefPtr firstBox = WrapTestUtils::CreateRenderBox(BOX_HEIGHT, MID_LARGE_BOX_HEIGHT); + firstBox->Attach(mockContext); + wrap->AddChild(firstBox); + RefPtr secondBox = WrapTestUtils::CreateRenderBox(CROSS_LENGTH, MID_LARGE_BOX_HEIGHT); + secondBox->Attach(mockContext); + wrap->AddChild(secondBox); + RefPtr thirdBox = WrapTestUtils::CreateRenderBox(BOX_HEIGHT, MID_LARGE_BOX_HEIGHT); + thirdBox->Attach(mockContext); + wrap->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + */ + root->PerformLayout(); + + /** + * @tc.steps: step3. compare boxes position + * @tc.expected: step3. the position matches + */ + EXPECT_TRUE(firstBox->GetPosition() == Offset(0, (SCREEN_HEIGHT - BIG_BOX_HEIGHT) / 2)); + EXPECT_TRUE(secondBox->GetPosition() == Offset(0, MID_LARGE_BOX_HEIGHT + (SCREEN_HEIGHT - BIG_BOX_HEIGHT) / 2)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(BOX_HEIGHT, MID_BOX_HEIGHT + (SCREEN_HEIGHT - BIG_BOX_HEIGHT) / 2)); +} + +/** + * @tc.name: RenderWrapPerformLayout014 + * @tc.desc: Wrap component layout children in vertical correctly. Children align by main:END and cross:END. + * @tc.type: FUNC + * @tc.require: AR000DBAOT + * @tc.author: Yao Yuchi + */ +HWTEST_F(RenderWrapTest, RenderWrapPerformLayout014, TestSize.Level1) +{ + /** + * @tc.steps: step1. create three boxes with size [40, 1000], [20, 1000], [40, 1000] + */ + RefPtr root = WrapTestUtils::CreateRenderRoot(); + std::list> children; + RefPtr wrapComponent = AceType::MakeRefPtr(children); + wrapComponent->SetDirection(WrapDirection::VERTICAL); + wrapComponent->SetAlignment(WrapAlignment::START); + wrapComponent->SetMainAlignment(WrapAlignment::END); + wrapComponent->SetCrossAlignment(WrapAlignment::END); + + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr wrap = WrapTestUtils::CreateRenderWrap(wrapComponent, mockContext); + root->AddChild(wrap); + RefPtr firstBox = WrapTestUtils::CreateRenderBox(BOX_HEIGHT, MID_LARGE_BOX_HEIGHT); + firstBox->Attach(mockContext); + wrap->AddChild(firstBox); + RefPtr secondBox = WrapTestUtils::CreateRenderBox(CROSS_LENGTH, MID_LARGE_BOX_HEIGHT); + secondBox->Attach(mockContext); + wrap->AddChild(secondBox); + RefPtr thirdBox = WrapTestUtils::CreateRenderBox(BOX_HEIGHT, MID_LARGE_BOX_HEIGHT); + thirdBox->Attach(mockContext); + wrap->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + */ + root->PerformLayout(); + + /** + * @tc.steps: step3. compare boxes position + * @tc.expected: step3. the position matches + */ + EXPECT_TRUE(firstBox->GetPosition() == Offset(0, SCREEN_HEIGHT - BIG_BOX_HEIGHT)); + EXPECT_TRUE( + secondBox->GetPosition() == Offset(CROSS_LENGTH, MID_LARGE_BOX_HEIGHT + SCREEN_HEIGHT - BIG_BOX_HEIGHT)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(BOX_HEIGHT, MID_LARGE_BOX_HEIGHT + SCREEN_HEIGHT - BIG_BOX_HEIGHT)); +} + +/** + * @tc.name: RenderWrapPerformLayout015 + * @tc.desc: Wrap component layout children in horizontal correctly. Children align by main alignment: space_between. + * @tc.type: FUNC + * @tc.require: AR000DBAOT + * @tc.author: Yao Yuchi + */ +HWTEST_F(RenderWrapTest, RenderWrapPerformLayout015, TestSize.Level1) +{ + /** + * @tc.steps: step1. create three boxes with size [500, 40], [500, 20], [500, 40] + */ + RefPtr root = WrapTestUtils::CreateRenderRoot(); + std::list> children; + RefPtr wrapComponent = AceType::MakeRefPtr(children); + wrapComponent->SetAlignment(WrapAlignment::START); + wrapComponent->SetMainAlignment(WrapAlignment::SPACE_BETWEEN); + wrapComponent->SetCrossAlignment(WrapAlignment::START); + + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr wrap = WrapTestUtils::CreateRenderWrap(wrapComponent, mockContext); + root->AddChild(wrap); + RefPtr firstBox = WrapTestUtils::CreateRenderBox(BOX_WIDTH, BOX_HEIGHT); + firstBox->Attach(mockContext); + wrap->AddChild(firstBox); + RefPtr secondBox = WrapTestUtils::CreateRenderBox(BOX_WIDTH, CROSS_LENGTH); + secondBox->Attach(mockContext); + wrap->AddChild(secondBox); + RefPtr thirdBox = WrapTestUtils::CreateRenderBox(BOX_WIDTH, BOX_HEIGHT); + thirdBox->Attach(mockContext); + wrap->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + */ + root->PerformLayout(); + + /** + * @tc.steps: step3. compare boxes position + * @tc.expected: step3. the position matches + */ + EXPECT_TRUE(firstBox->GetPosition().IsZero()); + EXPECT_TRUE(secondBox->GetPosition() == Offset(MID_BOX_WIDTH + SPACE_BETWEEN_OFFSET, 0)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(0, BOX_HEIGHT)); +} + +/** + * @tc.name: RenderWrapPerformLayout016 + * @tc.desc: Wrap component layout children in horizontal correctly. Children align by main alignment: space_around. + * @tc.type: FUNC + * @tc.require: AR000DBAOT + * @tc.author: Yao Yuchi + */ +HWTEST_F(RenderWrapTest, RenderWrapPerformLayout016, TestSize.Level1) +{ + /** + * @tc.steps: step1. create three boxes with size [500, 40], [500, 20], [500, 40] + */ + RefPtr root = WrapTestUtils::CreateRenderRoot(); + std::list> children; + RefPtr wrapComponent = AceType::MakeRefPtr(children); + wrapComponent->SetAlignment(WrapAlignment::START); + wrapComponent->SetMainAlignment(WrapAlignment::SPACE_AROUND); + wrapComponent->SetCrossAlignment(WrapAlignment::START); + + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr wrap = WrapTestUtils::CreateRenderWrap(wrapComponent, mockContext); + root->AddChild(wrap); + RefPtr firstBox = WrapTestUtils::CreateRenderBox(BOX_WIDTH, BOX_HEIGHT); + firstBox->Attach(mockContext); + wrap->AddChild(firstBox); + RefPtr secondBox = WrapTestUtils::CreateRenderBox(BOX_WIDTH, CROSS_LENGTH); + secondBox->Attach(mockContext); + wrap->AddChild(secondBox); + RefPtr thirdBox = WrapTestUtils::CreateRenderBox(BOX_WIDTH, BOX_HEIGHT); + thirdBox->Attach(mockContext); + wrap->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + */ + root->PerformLayout(); + + /** + * @tc.steps: step3. compare boxes position + * @tc.expected: step3. the position matches + */ + EXPECT_TRUE(firstBox->GetPosition() == Offset(CROSS_LENGTH, 0)); + EXPECT_TRUE(secondBox->GetPosition() == Offset(SPACE_AROUND_OFFSET_WIDTH, 0)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(SPACE_AROUND_OFFSET, BOX_HEIGHT)); +} + +/** + * @tc.name: RenderWrapPerformLayout017 + * @tc.desc: Wrap component layout children in horizontal correctly. Children align by cross alignment: stretch. + * @tc.type: FUNC + * @tc.require: AR000DBAOT + * @tc.author: Yao Yuchi + */ +HWTEST_F(RenderWrapTest, RenderWrapPerformLayout017, TestSize.Level1) +{ + /** + * @tc.steps: step1. create three boxes with size [500, 40], [500, 20], [500, 40] + */ + RefPtr root = WrapTestUtils::CreateRenderRoot(); + std::list> children; + RefPtr wrapComponent = AceType::MakeRefPtr(children); + wrapComponent->SetAlignment(WrapAlignment::START); + wrapComponent->SetMainAlignment(WrapAlignment::START); + wrapComponent->SetCrossAlignment(WrapAlignment::STRETCH); + + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr wrap = WrapTestUtils::CreateRenderWrap(wrapComponent, mockContext); + root->AddChild(wrap); + RefPtr firstBox = WrapTestUtils::CreateRenderBox(BOX_WIDTH, BOX_HEIGHT); + firstBox->Attach(mockContext); + wrap->AddChild(firstBox); + RefPtr secondBox = WrapTestUtils::CreateRenderBox(BOX_WIDTH, CROSS_LENGTH); + secondBox->Attach(mockContext); + wrap->AddChild(secondBox); + RefPtr thirdBox = WrapTestUtils::CreateRenderBox(BOX_WIDTH, BOX_HEIGHT); + thirdBox->Attach(mockContext); + wrap->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + */ + root->PerformLayout(); + + /** + * @tc.steps: step3. compare boxes position and size match + * @tc.expected: step3. the position matches + */ + EXPECT_TRUE(firstBox->GetPosition() == Offset(0, 0)); + EXPECT_TRUE(secondBox->GetPosition() == Offset(MID_BOX_WIDTH, 0)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(0, BOX_HEIGHT)); + + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(BOX_WIDTH, BOX_HEIGHT)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(BOX_WIDTH, BOX_HEIGHT)); + EXPECT_TRUE(thirdBox->GetLayoutSize() == Size(BOX_WIDTH, BOX_HEIGHT)); +} + +/** + * @tc.name: RenderWrapPerformLayout018 + * @tc.desc: Wrap component layout children in vertical correctly. Children align by main alignment: space_between. + * @tc.type: FUNC + * @tc.require: AR000DBAOT + * @tc.author: Yao Yuchi + */ +HWTEST_F(RenderWrapTest, RenderWrapPerformLayout018, TestSize.Level1) +{ + /** + * @tc.steps: step1. create three boxes with size [40, 1000], [20, 100], [10, 100] + */ + RefPtr root = WrapTestUtils::CreateRenderRoot(); + std::list> children; + RefPtr wrapComponent = AceType::MakeRefPtr(children); + wrapComponent->SetDirection(WrapDirection::VERTICAL); + wrapComponent->SetAlignment(WrapAlignment::START); + wrapComponent->SetMainAlignment(WrapAlignment::SPACE_BETWEEN); + wrapComponent->SetCrossAlignment(WrapAlignment::START); + + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr wrap = WrapTestUtils::CreateRenderWrap(wrapComponent, mockContext); + root->AddChild(wrap); + RefPtr firstBox = WrapTestUtils::CreateRenderBox(BOX_HEIGHT, MID_LARGE_BOX_HEIGHT); + firstBox->Attach(mockContext); + wrap->AddChild(firstBox); + RefPtr secondBox = WrapTestUtils::CreateRenderBox(CROSS_LENGTH, SMALL_BOX_HEIGHT); + secondBox->Attach(mockContext); + wrap->AddChild(secondBox); + // half of the cross length + RefPtr thirdBox = WrapTestUtils::CreateRenderBox(CROSS_LENGTH / 2, SMALL_BOX_HEIGHT); + thirdBox->Attach(mockContext); + wrap->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + */ + root->PerformLayout(); + + /** + * @tc.steps: step3. compare boxes position and size match + * @tc.expected: step3. the position matches + */ + EXPECT_TRUE(firstBox->GetPosition() == Offset(0, 0)); + EXPECT_TRUE(secondBox->GetPosition() == Offset(0, VERTICAL_SPACE_AROUND_OFFSET)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(0, VERTICAL_SPACE_AROUND_OFFSET_HEIGHT)); + + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(BOX_HEIGHT, MID_LARGE_BOX_HEIGHT)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(CROSS_LENGTH, SMALL_BOX_HEIGHT)); + EXPECT_TRUE(thirdBox->GetLayoutSize() == Size(CROSS_LENGTH / 2, SMALL_BOX_HEIGHT)); +} + +/** + * @tc.name: RenderWrapPerformLayout019 + * @tc.desc: Wrap component layout children in vertical correctly. Children align by main alignment: space_around. + * @tc.type: FUNC + * @tc.require: AR000DBAOT + * @tc.author: Yao Yuchi + */ +HWTEST_F(RenderWrapTest, RenderWrapPerformLayout019, TestSize.Level1) +{ + /** + * @tc.steps: step1. create three boxes with size [40, 1000], [20, 100], [10, 100] + */ + RefPtr root = WrapTestUtils::CreateRenderRoot(); + std::list> children; + RefPtr wrapComponent = AceType::MakeRefPtr(children); + wrapComponent->SetDirection(WrapDirection::VERTICAL); + wrapComponent->SetAlignment(WrapAlignment::START); + wrapComponent->SetMainAlignment(WrapAlignment::SPACE_AROUND); + wrapComponent->SetCrossAlignment(WrapAlignment::START); + + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr wrap = WrapTestUtils::CreateRenderWrap(wrapComponent, mockContext); + root->AddChild(wrap); + RefPtr firstBox = WrapTestUtils::CreateRenderBox(BOX_HEIGHT, MID_LARGE_BOX_HEIGHT); + firstBox->Attach(mockContext); + wrap->AddChild(firstBox); + RefPtr secondBox = WrapTestUtils::CreateRenderBox(CROSS_LENGTH, MID_LARGE_BOX_HEIGHT); + secondBox->Attach(mockContext); + wrap->AddChild(secondBox); + // half of the cross length + RefPtr thirdBox = WrapTestUtils::CreateRenderBox(CROSS_LENGTH / 2, MID_LARGE_BOX_HEIGHT); + thirdBox->Attach(mockContext); + wrap->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + */ + root->PerformLayout(); + + /** + * @tc.steps: step3. compare boxes position and size match + * @tc.expected: step3. the position matches + */ + EXPECT_TRUE(firstBox->GetPosition() == Offset(0, FIRST_BOX_HEIGHT_OFFSET)); + EXPECT_TRUE(secondBox->GetPosition() == Offset(0, SECOND_BOX_HEIGHT_OFFSET)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(BOX_HEIGHT, THIRD_BOX_HEIGHT_OFFSET)); +} + +/** + * @tc.name: RenderWrapPerformLayout020 + * @tc.desc: Wrap component layout children in vertical correctly. Children align by cross alignment: stretch. + * @tc.type: FUNC + * @tc.require: AR000DBAOT + * @tc.author: Yao Yuchi + */ +HWTEST_F(RenderWrapTest, RenderWrapPerformLayout020, TestSize.Level1) +{ + /** + * @tc.steps: step1. create three boxes with size [40, 1000], [20, 100], [10, 100] + */ + RefPtr root = WrapTestUtils::CreateRenderRoot(); + std::list> children; + RefPtr wrapComponent = AceType::MakeRefPtr(children); + wrapComponent->SetDirection(WrapDirection::VERTICAL); + wrapComponent->SetAlignment(WrapAlignment::START); + wrapComponent->SetMainAlignment(WrapAlignment::START); + wrapComponent->SetCrossAlignment(WrapAlignment::STRETCH); + + auto mockContext = MockRenderCommon::GetMockContext(); + RefPtr wrap = WrapTestUtils::CreateRenderWrap(wrapComponent, mockContext); + root->AddChild(wrap); + RefPtr firstBox = WrapTestUtils::CreateRenderBox(BOX_HEIGHT, MID_LARGE_BOX_HEIGHT); + firstBox->Attach(mockContext); + wrap->AddChild(firstBox); + RefPtr secondBox = WrapTestUtils::CreateRenderBox(CROSS_LENGTH, MID_LARGE_BOX_HEIGHT); + secondBox->Attach(mockContext); + wrap->AddChild(secondBox); + // half of the cross length + RefPtr thirdBox = WrapTestUtils::CreateRenderBox(CROSS_LENGTH / 2, MID_LARGE_BOX_HEIGHT); + thirdBox->Attach(mockContext); + wrap->AddChild(thirdBox); + + /** + * @tc.steps: step2. call PerformLayout interface + */ + root->PerformLayout(); + + /** + * @tc.steps: step3. compare boxes position and size matches + * @tc.expected: step3. the position matches and size matches + */ + EXPECT_TRUE(firstBox->GetPosition() == Offset(0, 0)); + EXPECT_TRUE(secondBox->GetPosition() == Offset(0, MID_LARGE_BOX_HEIGHT)); + EXPECT_TRUE(thirdBox->GetPosition() == Offset(BOX_HEIGHT, 0)); + + EXPECT_TRUE(firstBox->GetLayoutSize() == Size(BOX_HEIGHT, MID_LARGE_BOX_HEIGHT)); + EXPECT_TRUE(secondBox->GetLayoutSize() == Size(BOX_HEIGHT, MID_LARGE_BOX_HEIGHT)); + EXPECT_TRUE(thirdBox->GetLayoutSize() == Size(CROSS_LENGTH / 2, MID_LARGE_BOX_HEIGHT)); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/wrap/wrap_test_utils.cpp b/frameworks/core/components/test/unittest/wrap/wrap_test_utils.cpp new file mode 100644 index 00000000..b25de918 --- /dev/null +++ b/frameworks/core/components/test/unittest/wrap/wrap_test_utils.cpp @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/test/unittest/wrap/wrap_test_utils.h" + +#include "core/components/box/box_component.h" + +namespace OHOS::Ace { + +RefPtr WrapTestUtils::CreateRenderRoot() +{ + RefPtr root = AceType::MakeRefPtr(); + const Rect wholeScreenRect = Rect(0.0, 0.0, SCREEN_WIDTH, SCREEN_HEIGHT); + root->SetPaintRect(wholeScreenRect); + return root; +} + +RefPtr WrapTestUtils::CreateRenderWrap( + const RefPtr& component, const RefPtr& context) +{ + RefPtr wrapRenderNode = AceType::MakeRefPtr(); + wrapRenderNode->Attach(context); + wrapRenderNode->Update(component); + return wrapRenderNode; +} + +RefPtr WrapTestUtils::CreateRenderBox(double width, double height) +{ + RefPtr renderBox = AceType::MakeRefPtr(); + RefPtr boxComponent = AceType::MakeRefPtr(); + boxComponent->SetWidth(width); + boxComponent->SetHeight(height); + renderBox->Update(boxComponent); + return renderBox; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/test/unittest/wrap/wrap_test_utils.h b/frameworks/core/components/test/unittest/wrap/wrap_test_utils.h new file mode 100644 index 00000000..9a9947df --- /dev/null +++ b/frameworks/core/components/test/unittest/wrap/wrap_test_utils.h @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_WRAP_WRAP_TEST_UTILS_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_WRAP_WRAP_TEST_UTILS_H + +#include "core/components/box/render_box.h" +#include "core/components/root/render_root.h" +#include "core/components/wrap/wrap_component.h" + +namespace OHOS::Ace { +namespace { + +constexpr double SCREEN_WIDTH = 1080.0; +constexpr double SCREEN_HEIGHT = 2048.0; + +} // namespace + +class MockRenderBox final : public RenderBox { + DECLARE_ACE_TYPE(MockRenderBox, RenderBox); + +public: + MockRenderBox() = default; + ~MockRenderBox() override = default; +}; + +class MockRenderRoot final : public RenderRoot { + DECLARE_ACE_TYPE(MockRenderRoot, RenderRoot); + +public: + MockRenderRoot() = default; + ~MockRenderRoot() override = default; +}; + +class WrapTestUtils { +public: + static RefPtr CreateRenderRoot(); + static RefPtr CreateRenderWrap(const RefPtr& component, + const RefPtr& context); + static RefPtr CreateRenderBox(double width, double height); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEST_UNITTEST_WRAP_WRAP_TEST_UTILS_H diff --git a/frameworks/core/components/text/BUILD.gn b/frameworks/core/components/text/BUILD.gn new file mode 100644 index 00000000..26ccc06f --- /dev/null +++ b/frameworks/core/components/text/BUILD.gn @@ -0,0 +1,22 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("text") { + sources = [ + "flutter_render_text.cpp", + "render_text.cpp", + "text_component.cpp", + ] +} diff --git a/frameworks/core/components/text/flutter_render_text.cpp b/frameworks/core/components/text/flutter_render_text.cpp new file mode 100644 index 00000000..42fe22b2 --- /dev/null +++ b/frameworks/core/components/text/flutter_render_text.cpp @@ -0,0 +1,419 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/text/flutter_render_text.h" + +#include + +#include "flutter/lib/ui/text/font_collection.h" +#include "flutter/lib/ui/ui_dart_state.h" +#include "flutter/third_party/icu/source/common/unicode/uchar.h" +#include "flutter/third_party/txt/src/txt/paragraph_txt.h" + +#include "base/geometry/dimension.h" +#include "base/i18n/localization.h" +#include "base/utils/string_utils.h" +#include "base/utils/utils.h" +#include "core/common/font_manager.h" +#include "core/components/calendar/flutter_render_calendar.h" +#include "core/components/font/constants_converter.h" +#include "core/components/font/flutter_font_collection.h" +#include "core/components/text_span/flutter_render_text_span.h" +#include "core/pipeline/base/flutter_render_context.h" +#include "core/pipeline/base/scoped_canvas_state.h" +#include "core/pipeline/pipeline_context.h" + +namespace OHOS::Ace { +namespace { + +const std::u16string ELLIPSIS = u"\u2026"; +constexpr Dimension ADAPT_UNIT = 1.0_fp; +const uint32_t ELLIPSIS_DEFAULT_MAX_LINES = 1; + +} // namespace + +double FlutterRenderText::GetBaselineDistance(TextBaseline textBaseline) +{ + if (textBaseline == TextBaseline::IDEOGRAPHIC) { + return paragraph_->GetIdeographicBaseline(); + } + return paragraph_->GetAlphabeticBaseline(); +} + +RefPtr RenderText::Create() +{ + return AceType::MakeRefPtr(); +} + +void FlutterRenderText::Paint(RenderContext& context, const Offset& offset) +{ + if (!NeedPaint()) { + return; + } + + if (needMeasure_) { + LOGW("Text can not paint before measure."); + return; + } + auto canvas = ScopedCanvas::Create(context); + if (!canvas || !paragraph_) { + LOGE("Paint canvas or paragraph is null"); + return; + } + if (textStyle_.GetTextOverflow() == TextOverflow::CLIP) { + const auto& clipRect = Rect(offset, GetLayoutSize()); + canvas->clipRect(clipRect.Left(), clipRect.Top(), clipRect.Right(), clipRect.Bottom(), SkClipOp::kIntersect); + } + auto textRealWidth = paragraph_->GetMaxWidth(); + switch (textStyle_.GetTextAlign()) { + case TextAlign::LEFT: + case TextAlign::START: + paragraph_->Paint(canvas->canvas(), offset.GetX(), offset.GetY()); + break; + case TextAlign::RIGHT: + case TextAlign::END: + paragraph_->Paint( + canvas->canvas(), offset.GetX() - (textRealWidth - GetLayoutSize().Width()), offset.GetY()); + break; + case TextAlign::CENTER: + paragraph_->Paint(canvas->canvas(), offset.GetX() - ((textRealWidth - GetLayoutSize().Width()) / 2.0), + offset.GetY()); + break; + case TextAlign::JUSTIFY: + paragraph_->Paint(canvas->canvas(), offset.GetX(), offset.GetY()); + break; + default: + paragraph_->Paint(canvas->canvas(), offset.GetX(), offset.GetY()); + } +} + +bool FlutterRenderText::NeedPaint() +{ + // If font is custom font, paint text until font is ready. + auto pipelineContext = context_.Upgrade(); + if (pipelineContext && pipelineContext->GetFontManager()) { + auto fontNames = pipelineContext->GetFontManager()->GetFontNames(); + for (const auto& familyName : textStyle_.GetFontFamilies()) { + if (std::find(std::begin(fontNames), std::end(fontNames), familyName) != std::end(fontNames) && + !isCallbackCalled_) { + return false; + } + } + for (const auto& child : GetChildren()) { + auto span = AceType::DynamicCast(child); + if (!span) { + continue; + } + for (const auto& familyName : span->GetSpanStyle().GetFontFamilies()) { + if (std::find(std::begin(fontNames), std::end(fontNames), familyName) != std::end(fontNames) && + !span->IsCallbackCalled()) { + return false; + } + } + } + } + return true; +} + +Size FlutterRenderText::Measure() +{ + if (CheckMeasureFlag()) { + return GetSize(); + } + lastLayoutMaxWidth_ = GetLayoutParam().GetMaxSize().Width(); + lastLayoutMinWidth_ = GetLayoutParam().GetMinSize().Width(); + if (!textStyle_.GetAdaptTextSize()) { + if (!UpdateParagraph()) { + LOGE("fail to initialize text paragraph"); + return Size(); + } + paragraph_->Layout(lastLayoutMaxWidth_); + } else { + if (!AdaptTextSize(lastLayoutMaxWidth_)) { + LOGE("fail to initialize text paragraph in adapt text size step"); + return Size(); + } + } + needMeasure_ = false; + // If you need to lay out the text according to the maximum layout width given by the parent, use it. + if (isMaxWidthLayout_) { + paragraphNewWidth_ = GetLayoutParam().GetMaxSize().Width(); + return GetSize(); + } + // The reason for the second layout is because the TextAlign property needs the width of the layout, + // and the width of the second layout is used as the width of the TextAlign layout. + if (!NearEqual(lastLayoutMinWidth_, lastLayoutMaxWidth_)) { + paragraphNewWidth_ = std::clamp(paragraph_->GetMaxIntrinsicWidth(), lastLayoutMinWidth_, lastLayoutMaxWidth_); + if (!NearEqual(paragraphNewWidth_, paragraph_->GetMaxWidth())) { + paragraph_->Layout(std::ceil(paragraphNewWidth_)); + } + } + return GetSize(); +} + +bool FlutterRenderText::CheckMeasureFlag() +{ + if (isCallbackCalled_) { + needMeasure_ = true; + } + for (const auto& child : GetChildren()) { + auto span = AceType::DynamicCast(child); + if (span && (span->IsCallbackCalled() || span->NeedLayout())) { + paragraph_.reset(); + needMeasure_ = true; + break; + } + } + + double paragraphMaxWidth = GetLayoutParam().GetMaxSize().Width(); + double paragraphMinWidth = GetLayoutParam().GetMinSize().Width(); + + if (!needMeasure_) { + bool constrainsAffect = true; + auto layoutWidth = GetSize().Width(); + if (NearEqual(paragraphMaxWidth, lastLayoutMaxWidth_) && NearEqual(paragraphMinWidth, lastLayoutMinWidth_)) { + // Constrains not changed. + constrainsAffect = false; + } else if (GreatOrEqual(layoutWidth, paragraphMinWidth) && LessOrEqual(layoutWidth, paragraphMaxWidth) && + (lastLayoutMaxWidth_ - layoutWidth > 1.0)) { + // Constrains changed but has no effect. For example, text width is 100 when constrains [0, 200]. + // When constrains changed to [100, 300], there's no need to do layout. + // An exception is that given [0, 100], resulting in layout 100. We assume the actual layout size is more + // than 100 due to soft-wrap. + if (!textStyle_.GetAdaptTextSize()) { + constrainsAffect = false; + } + } + if (!constrainsAffect) { + LOGD("Text content and constrains not affect, no need measure."); + return true; + } + } + return false; +} + +bool FlutterRenderText::AdaptTextSize(double paragraphMaxWidth) +{ + const auto& preferTextSizeGroups = textStyle_.GetPreferTextSizeGroups(); + if (!preferTextSizeGroups.empty()) { + return AdaptPreferTextSizeGroup(paragraphMaxWidth); + } + const auto& preferFontSizes = textStyle_.GetPreferFontSizes(); + if (!preferFontSizes.empty()) { + return AdaptPreferTextSize(paragraphMaxWidth); + } + return AdaptMinTextSize(paragraphMaxWidth); +} + +bool FlutterRenderText::AdaptMinTextSize(double paragraphMaxWidth) +{ + double maxFontSize = NormalizeToPx(textStyle_.GetAdaptMaxFontSize()); + double minFontSize = NormalizeToPx(textStyle_.GetAdaptMinFontSize()); + if (LessNotEqual(maxFontSize, minFontSize) || LessOrEqual(textStyle_.GetAdaptMinFontSize().Value(), 0.0)) { + if (!UpdateParagraph()) { + LOGE("fail to initialize text paragraph when adapt min text size."); + return false; + } + paragraph_->Layout(lastLayoutMaxWidth_); + return true; + } + Dimension step = ADAPT_UNIT; + if (GreatNotEqual(textStyle_.GetAdaptFontSizeStep().Value(), 0.0)) { + step = textStyle_.GetAdaptFontSizeStep(); + } + double stepSize = NormalizeToPx(step); + while (GreatOrEqual(maxFontSize, minFontSize)) { + textStyle_.SetFontSize(Dimension(maxFontSize)); + if (!UpdateParagraphAndLayout(paragraphMaxWidth)) { + return false; + } + if (!DidExceedMaxLines()) { + break; + } + maxFontSize -= stepSize; + } + return true; +} + +bool FlutterRenderText::AdaptPreferTextSize(double paragraphMaxWidth) +{ + // Use preferFontSizes to adapt lines. + const auto& preferFontSizes = textStyle_.GetPreferFontSizes(); + for (const auto& fontSize : preferFontSizes) { + textStyle_.SetFontSize(fontSize); + if (!UpdateParagraphAndLayout(paragraphMaxWidth)) { + return false; + } + if (!DidExceedMaxLines()) { + break; + } + } + return true; +} + +bool FlutterRenderText::AdaptPreferTextSizeGroup(double paragraphMaxWidth) +{ + // Use preferTextSizeGroup. + const auto& preferTextSizeGroups = textStyle_.GetPreferTextSizeGroups(); + for (const auto& preferTextSizeGroup : preferTextSizeGroups) { + textStyle_.SetFontSize(preferTextSizeGroup.fontSize); + textStyle_.SetMaxLines(preferTextSizeGroup.maxLines); + textStyle_.SetTextOverflow(preferTextSizeGroup.textOverflow); + if (!UpdateParagraphAndLayout(paragraphMaxWidth)) { + return false; + } + if ((preferTextSizeGroup.textOverflow == TextOverflow::NONE) || (!DidExceedMaxLines())) { + break; + } + } + return true; +} + +bool FlutterRenderText::UpdateParagraphAndLayout(double paragraphMaxWidth) +{ + if (!UpdateParagraph()) { + return false; + } + if (paragraph_) { + paragraph_->Layout(paragraphMaxWidth); + } + return true; +} + +uint32_t FlutterRenderText::GetTextLines() +{ + uint32_t textLines = 0; + auto paragraphTxt = static_cast(paragraph_.get()); + if (paragraphTxt != nullptr) { + textLines = paragraphTxt->GetLineCount(); + } + return textLines; +} + +Size FlutterRenderText::GetSize() +{ + double height = paragraph_ ? paragraph_->GetHeight() : 0.0; + return Size(isMaxWidthLayout_ ? paragraphNewWidth_ : std::ceil(paragraphNewWidth_), + std::min(height, GetLayoutParam().GetMaxSize().Height())); +} + +bool FlutterRenderText::UpdateParagraph() +{ + using namespace Constants; + + txt::ParagraphStyle style; + + const auto& textAlign = textStyle_.GetTextAlign(); + if (textAlign == TextAlign::START || textAlign == TextAlign::END) { + std::string data = textData_; + if (!GetChildren().empty()) { + for (const auto& child : GetChildren()) { + auto span = DynamicCast(child); + if (span && !span->GetSpanData().empty()) { + data = span->GetSpanData(); + break; + } + } + } + auto showingTextForWString = StringUtils::ToWstring(data); + for (const auto& charOfShowingText : showingTextForWString) { + if (u_charDirection(charOfShowingText) == UCharDirection::U_LEFT_TO_RIGHT) { + textDirection_ = TextDirection::LTR; + break; + } else if (u_charDirection(charOfShowingText) == UCharDirection::U_RIGHT_TO_LEFT) { + textDirection_ = TextDirection::RTL; + break; + } else if (u_charDirection(charOfShowingText) == UCharDirection::U_RIGHT_TO_LEFT_ARABIC) { + textDirection_ = TextDirection::RTL; + break; + } + } + } + style.text_direction = ConvertTxtTextDirection(textDirection_); + style.text_align = ConvertTxtTextAlign(textAlign); + style.max_lines = textStyle_.GetMaxLines(); + style.locale = Localization::GetInstance()->GetFontLocale(); + if (textStyle_.GetTextOverflow() == TextOverflow::ELLIPSIS) { + if (textStyle_.GetMaxLines() == UINT32_MAX) { + style.max_lines = ELLIPSIS_DEFAULT_MAX_LINES; + } + style.ellipsis = ELLIPSIS; + } + style.word_break_type = static_cast(textStyle_.GetWordBreak()); + + std::unique_ptr builder; + auto fontCollection = FlutterFontCollection::GetInstance().GetFontCollection(); + if (!fontCollection) { + LOGW("UpdateParagraph: fontCollection is null"); + return false; + } + builder = txt::ParagraphBuilder::CreateTxtBuilder(style, fontCollection); + + txt::TextStyle txtStyle; + ConvertTxtStyle(textStyle_, context_, txtStyle); + builder->PushStyle(txtStyle); + const auto& children = GetChildren(); + if (!children.empty()) { + for (const auto& child : children) { + auto textSpan = AceType::DynamicCast(child); + if (textSpan) { + textSpan->UpdateTextContent(*builder); + } + } + } else { + builder->AddText(StringUtils::Str8ToStr16(textData_)); + } + paragraph_ = builder->Build(); + return true; +} + +double FlutterRenderText::GetTextWidth() +{ + if (paragraph_) { + return paragraph_->GetMaxIntrinsicWidth(); + } + return 0; +} + +bool FlutterRenderText::DidExceedMaxLines() +{ + auto* paragraphTxt = static_cast(paragraph_.get()); + if (paragraphTxt != nullptr) { + return paragraphTxt->DidExceedMaxLines(); + } + return false; +} + +bool FlutterRenderText::MaybeRelease() +{ + auto context = GetContext().Upgrade(); + if (context && context->GetRenderFactory()->GetRenderTextFactory()->Recycle(this)) { + ClearRenderObject(); + return false; + } + return true; +} + +void FlutterRenderText::ClearRenderObject() +{ + RenderText::ClearRenderObject(); + LOGI("FlutterRenderText ClearRenderObject"); + paragraph_ = nullptr; + paragraphNewWidth_ = 0.0; + lastLayoutMaxWidth_ = 0.0; + lastLayoutMinWidth_ = 0.0; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/text/flutter_render_text.h b/frameworks/core/components/text/flutter_render_text.h new file mode 100644 index 00000000..1f1a0baa --- /dev/null +++ b/frameworks/core/components/text/flutter_render_text.h @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_FLUTTER_RENDER_TEXT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_FLUTTER_RENDER_TEXT_H + +#include "flutter/lib/ui/text/paragraph_builder.h" + +#include "core/components/text/render_text.h" +#include "core/components/text_span/render_text_span.h" + +namespace OHOS::Ace { + +class FlutterRenderText final : public RenderText { + DECLARE_ACE_TYPE(FlutterRenderText, RenderText); + +public: + FlutterRenderText() = default; + ~FlutterRenderText() override = default; + + void Paint(RenderContext& context, const Offset& offset) override; + double GetBaselineDistance(TextBaseline textBaseline) override; + double GetTextWidth() override; + +protected: + virtual bool MaybeRelease() override; + virtual void ClearRenderObject() override; + +private: + Size Measure() override; + bool UpdateParagraph(); + bool UpdateParagraphAndLayout(double paragraphMaxWidth); + Size GetSize(); + bool NeedPaint(); + bool AdaptTextSize(double paragraphMaxWidth); + bool AdaptMinTextSize(double paragraphMaxWidth); + bool AdaptPreferTextSize(double paragraphMaxWidth); + bool AdaptPreferTextSizeGroup(double paragraphMaxWidth); + bool CheckMeasureFlag(); + uint32_t GetTextLines() override; + bool DidExceedMaxLines(); + + std::unique_ptr paragraph_; + + double paragraphNewWidth_ = 0.0; + double lastLayoutMaxWidth_ = 0.0; + double lastLayoutMinWidth_ = 0.0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_FLUTTER_RENDER_TEXT_H diff --git a/frameworks/core/components/text/render_text.cpp b/frameworks/core/components/text/render_text.cpp new file mode 100644 index 00000000..bbd26a77 --- /dev/null +++ b/frameworks/core/components/text/render_text.cpp @@ -0,0 +1,186 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/text/render_text.h" + +#include "base/geometry/size.h" +#include "core/common/font_manager.h" +#include "core/components/text/text_component.h" + +namespace OHOS::Ace { + +RenderText::~RenderText() +{ + auto context = context_.Upgrade(); + if (context) { + context->RemoveFontNode(AceType::WeakClaim(this)); + auto fontManager = context->GetFontManager(); + if (fontManager) { + fontManager->UnRegisterCallback(AceType::WeakClaim(this)); + fontManager->RemoveVariationNode(WeakClaim(this)); + } + } +} + +void RenderText::Update(const RefPtr& component) +{ + const RefPtr text = AceType::DynamicCast(component); + if (text) { + CheckIfNeedMeasure(text); + } + auto context = context_.Upgrade(); + if (!context) { + LOGE("the context is nullptr in text update"); + return; + } + // Register callback for fonts. + auto callback = [weakText = AceType::WeakClaim(this)] { + auto text = weakText.Upgrade(); + if (text) { + text->isCallbackCalled_ = true; + text->MarkNeedLayout(); + } + }; + auto fontManager = context->GetFontManager(); + if (fontManager) { + for (const auto& familyName : textStyle_.GetFontFamilies()) { + fontManager->RegisterCallback(AceType::WeakClaim(this), familyName, callback); + } + fontManager->AddVariationNode(WeakClaim(this)); + } + if (isFocus_) { + textStyle_.SetTextColor(focusColor_); + } + + if (textStyle_.IsAllowScale() || textStyle_.GetFontSize().Unit() == DimensionUnit::FP) { + context->AddFontNode(AceType::WeakClaim(this)); + } +} + +void RenderText::OnPaintFinish() +{ + UpdateAccessibilityText(); +} + +void RenderText::UpdateAccessibilityText() +{ + const auto& context = context_.Upgrade(); + if (!context) { + return; + } + auto viewScale = context->GetViewScale(); + if (NearZero(viewScale)) { + return; + } + auto accessibilityNode = GetAccessibilityNode().Upgrade(); + if (!accessibilityNode) { + return; + } + if (GetChildren().empty()) { + accessibilityNode->SetText(textData_); + } else { + std::string accessibilityText; + for (const auto& child : GetChildren()) { + auto renderTextSpan = AceType::DynamicCast(child); + if (renderTextSpan) { + accessibilityText += renderTextSpan->GetSpanData(); + } + } + accessibilityNode->SetText(accessibilityText); + } + if (!accessibilityNode->GetVisible()) { // Set 0 to item when whole outside of view port. + accessibilityNode->SetWidth(0.0); + accessibilityNode->SetHeight(0.0); + accessibilityNode->SetTop(0.0); + accessibilityNode->SetLeft(0.0); + return; + } + if (accessibilityNode->IsValidRect()) { + return; // Rect already clamp by viewport, no need to set again. + } + Size size = GetLayoutSize(); + Offset globalOffset = GetGlobalOffset(); + PositionInfo positionInfo = { (size.Width()) * viewScale, (size.Height()) * viewScale, + (globalOffset.GetX()) * viewScale, (globalOffset.GetY()) * viewScale }; + accessibilityNode->SetPositionInfo(positionInfo); + accessibilityNode->SetIsMultiLine(GetTextLines() > 1); +} + +void RenderText::PerformLayout() +{ + auto pipelineContext = GetContext().Upgrade(); + if ((textStyle_.IsAllowScale() || textStyle_.GetFontSize().Unit() == DimensionUnit::FP) && pipelineContext && + !NearEqual(fontScale_, pipelineContext->GetFontScale())) { + needMeasure_ = true; + fontScale_ = pipelineContext->GetFontScale(); + } + if (pipelineContext) { + UpdateIfChanged(dipScale_, pipelineContext->GetDipScale()); + } + Size size = Measure(); + SetLayoutSize(GetLayoutParam().Constrain(size)); + for (const auto& spanChild : GetChildren()) { + if (spanChild) { + const auto& param = GetLayoutParam(); + spanChild->Layout(param); + } + } +} + +void RenderText::OnStatusChanged(OHOS::Ace::RenderStatus renderStatus) +{ + if (renderStatus == RenderStatus::FOCUS) { + textStyle_.SetTextColor(focusColor_); + isFocus_ = true; + } else { + textStyle_.SetTextColor(lostFocusColor_); + isFocus_ = false; + } + needMeasure_ = true; + Measure(); + MarkNeedRender(); +} + +void RenderText::CheckIfNeedMeasure(const RefPtr& text) +{ + UpdateIfChanged(textData_, text->GetData()); + UpdateIfChanged(textDirection_, text->GetTextDirection()); + UpdateIfChanged(isMaxWidthLayout_, text->GetMaxWidthLayout()); + UpdateIfChanged(textStyle_, text->GetTextStyle()); + UpdateIfChanged(focusColor_, text->GetFocusColor()); + UpdateIfChanged(lostFocusColor_, textStyle_.GetTextColor()); + if (needMeasure_) { + MarkNeedLayout(); + } +} + +void RenderText::ClearRenderObject() +{ + RenderNode::ClearRenderObject(); + LOGI("TextNode ClearRenderObject"); + textData_ = ""; + textStyle_ = TextStyle(); + textDirection_ = TextDirection::LTR; + focusColor_ = Color(); + lostFocusColor_ = Color(); + fontScale_ = 1.0; + dipScale_ = 1.0; + isFocus_ = false; + isMaxWidthLayout_ = false; + needMeasure_ = true; + isCallbackCalled_ = false; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/text/render_text.h b/frameworks/core/components/text/render_text.h new file mode 100644 index 00000000..24feba3c --- /dev/null +++ b/frameworks/core/components/text/render_text.h @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_RENDER_TEXT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_RENDER_TEXT_H + +#include "base/geometry/dimension.h" +#include "core/components/common/layout/constants.h" +#include "core/components/common/properties/color.h" +#include "core/components/common/properties/text_style.h" +#include "core/components/text_span/render_text_span.h" +#include "core/components/text_span/text_span_component.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class TextComponent; + +class RenderText : public RenderNode { + DECLARE_ACE_TYPE(RenderText, RenderNode); + +public: + ~RenderText() override; + + static RefPtr Create(); + + void Update(const RefPtr& component) override; + + void PerformLayout() override; + + void OnStatusChanged(RenderStatus renderStatus) override; + + void OnPaintFinish() override; + + const std::string& GetTextData() const + { + return textData_; + } + + void SetTextData(const std::string& textData) + { + textData_ = textData; + } + + void SetTextStyle(const TextStyle& textStyle) + { + textStyle_ = textStyle; + } + + void MarkNeedMeasure() + { + needMeasure_ = true; + } + + virtual double GetTextWidth() = 0; + +protected: + virtual Size Measure() = 0; + virtual uint32_t GetTextLines() = 0; + void UpdateAccessibilityText(); + + template + void UpdateIfChanged(T& update, const T& val) + { + if (update != val) { + needMeasure_ = true; + update = val; + } + } + + void CheckIfNeedMeasure(const RefPtr& text); + void ClearRenderObject() override; + std::string textData_; + TextStyle textStyle_; + TextDirection textDirection_ = TextDirection::LTR; + Color focusColor_; + Color lostFocusColor_; + double fontScale_ = 1.0; + double dipScale_ = 1.0; + bool isFocus_ = false; + bool isMaxWidthLayout_ = false; + bool needMeasure_ = true; + bool isCallbackCalled_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_RENDER_TEXT_H diff --git a/frameworks/core/components/text/text_component.cpp b/frameworks/core/components/text/text_component.cpp new file mode 100644 index 00000000..d13d4c6e --- /dev/null +++ b/frameworks/core/components/text/text_component.cpp @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/text/text_component.h" + +#include "core/components/text/render_text.h" +#include "core/components/text/text_element.h" + +namespace OHOS::Ace { + +TextComponent::TextComponent(const std::string& data) : ComponentGroup(std::list>()), data_(data) {} + +RefPtr TextComponent::CreateRenderNode() +{ + return RenderText::Create(); +} + +RefPtr TextComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/text/text_component.h b/frameworks/core/components/text/text_component.h new file mode 100644 index 00000000..f8efaec7 --- /dev/null +++ b/frameworks/core/components/text/text_component.h @@ -0,0 +1,90 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_TEXT_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_TEXT_COMPONENT_H + +#include + +#include "base/utils/macros.h" +#include "core/components/common/layout/constants.h" +#include "core/components/common/properties/color.h" +#include "core/components/common/properties/shadow.h" +#include "core/components/common/properties/text_style.h" +#include "core/pipeline/base/component_group.h" + +namespace OHOS::Ace { + +// A component can show text. +class ACE_EXPORT TextComponent : public ComponentGroup { + DECLARE_ACE_TYPE(TextComponent, ComponentGroup); + +public: + explicit TextComponent(const std::string& data); + ~TextComponent() override = default; + + RefPtr CreateRenderNode() override; + RefPtr CreateElement() override; + + const std::string& GetData() const + { + return data_; + } + + void SetData(const std::string& data) + { + data_ = data; + } + + const TextStyle& GetTextStyle() const + { + return textStyle_; + } + + void SetTextStyle(const TextStyle& textStyle) + { + textStyle_ = textStyle; + } + + void SetFocusColor(const Color& focusColor) + { + focusColor_ = focusColor; + } + + const Color& GetFocusColor() const + { + return focusColor_; + } + + void SetMaxWidthLayout(bool isMaxWidthLayout) + { + isMaxWidthLayout_ = isMaxWidthLayout; + } + + bool GetMaxWidthLayout() const + { + return isMaxWidthLayout_; + } + +private: + std::string data_; + TextStyle textStyle_; + Color focusColor_; + bool isMaxWidthLayout_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_TEXT_COMPONENT_H diff --git a/frameworks/core/components/text/text_element.h b/frameworks/core/components/text/text_element.h new file mode 100644 index 00000000..c6803148 --- /dev/null +++ b/frameworks/core/components/text/text_element.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_TEXT_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_TEXT_ELEMENT_H + +#include "core/components/text/text_component.h" +#include "core/pipeline/base/component_group_element.h" + +namespace OHOS::Ace { + +class TextElement : public ComponentGroupElement { + DECLARE_ACE_TYPE(TextElement, ComponentGroupElement); + +protected: + virtual RefPtr GetCachedRenderNode() override + { + auto context = GetContext().Upgrade(); + if (context) { + return context->GetRenderFactory()->GetRenderTextFactory()->Get(); + } + return nullptr; + } +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_TEXT_ELEMENT_H diff --git a/frameworks/core/components/text/text_theme.h b/frameworks/core/components/text/text_theme.h new file mode 100644 index 00000000..82b0fc62 --- /dev/null +++ b/frameworks/core/components/text/text_theme.h @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_TEXT_THEME_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_TEXT_THEME_H + +#include "core/components/common/properties/text_style.h" +#include "core/components/theme/theme.h" +#include "core/components/theme/theme_constants.h" + +namespace OHOS::Ace { + +/** + * TextTheme defines color and styles of ThemeComponent. TextTheme should be built + * using TextTheme::Builder. + */ +class TextTheme : public virtual Theme { + DECLARE_ACE_TYPE(TextTheme, Theme); + +public: + class Builder { + public: + Builder() = default; + ~Builder() = default; + + RefPtr Build(const RefPtr& themeConstants) const + { + RefPtr theme = AceType::Claim(new TextTheme()); + if (!themeConstants) { + return theme; + } + theme->textStyle_.SetTextColor(themeConstants->GetColor(THEME_OHOS_COLOR_TEXT_PRIMARY)); + theme->textStyle_.SetFontSize(themeConstants->GetDimension(THEME_TEXT_SIZE)); + // Styles below do not need to get from ThemeConstants, directly set at here. + theme->textStyle_.SetFontStyle(FontStyle::NORMAL); + theme->textStyle_.SetFontWeight(FontWeight::NORMAL); + theme->textStyle_.SetTextDecoration(TextDecoration::NONE); + ParsePattern(themeConstants->GetThemeStyle(), theme); + return theme; + } + private: + void ParsePattern(const RefPtr& themeStyle, const RefPtr& theme) const + { + if (!themeStyle) { + return; + } + theme->textStyle_.SetTextColor(themeStyle->GetAttr(THEME_ATTR_TEXT_COLOR_PRIMARY, Color::BLACK)); + } + }; + + ~TextTheme() override = default; + + TextStyle GetTextStyle() const + { + return textStyle_; + } + +protected: + TextTheme() = default; + +private: + TextStyle textStyle_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_TEXT_THEME_H diff --git a/frameworks/core/components/text_field/BUILD.gn b/frameworks/core/components/text_field/BUILD.gn new file mode 100644 index 00000000..6fee734b --- /dev/null +++ b/frameworks/core/components/text_field/BUILD.gn @@ -0,0 +1,24 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("text_field") { + sources = [ + "flutter_render_text_field.cpp", + "render_text_field.cpp", + "text_field_component.cpp", + "text_field_controller.cpp", + "text_field_element.cpp", + ] +} diff --git a/frameworks/core/components/text_field/flutter_render_text_field.cpp b/frameworks/core/components/text_field/flutter_render_text_field.cpp new file mode 100644 index 00000000..252e9b65 --- /dev/null +++ b/frameworks/core/components/text_field/flutter_render_text_field.cpp @@ -0,0 +1,1318 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "flutter_render_text_field.h" + +#include + +#include "flutter/lib/ui/text/font_collection.h" +#include "flutter/lib/ui/text/paragraph_builder.h" +#include "flutter/third_party/icu/source/common/unicode/uchar.h" +#include "flutter/third_party/txt/src/txt/paragraph_txt.h" +#include "third_party/skia/include/effects/SkGradientShader.h" + +#include "base/i18n/localization.h" +#include "base/utils/string_utils.h" +#include "base/utils/system_properties.h" +#include "core/components/box/render_box_base.h" +#include "core/components/calendar/flutter_render_calendar.h" +#include "core/components/common/painter/flutter_decoration_painter.h" +#include "core/components/font/constants_converter.h" +#include "core/components/font/flutter_font_collection.h" +#include "core/pipeline/base/flutter_render_context.h" +#include "core/pipeline/base/scoped_canvas_state.h" + +namespace OHOS::Ace { +namespace { + +constexpr char16_t NEWLINE_CODE = u'\n'; +// pixel for how far the caret to the top of paint rect. Sometimes may leave some space for the floor. +constexpr double CARET_HEIGHT_OFFSET = 2.0; +constexpr Dimension CURSOR_WIDTH = 1.5_vp; +constexpr Dimension COUNT_SPACING = 4.0_vp; +constexpr double MAGNIFIER_GAIN = 1.25; +const char ELLIPSIS[] = "..."; + +} // namespace + +RefPtr RenderTextField::Create() +{ + return AceType::MakeRefPtr(); +} + +// The outer rect has a decoration, return the inner rect excluded the decoration. +Rect FlutterRenderTextField::GetInnerRect(const Decoration& decoration, const Rect& outer, double dipScale) const +{ + auto leftWidth = decoration.GetBorder().Left().GetWidth().ConvertToPx(dipScale) + + NormalizePercentToPx(decoration.GetPadding().Left(), false); + auto topWidth = decoration.GetBorder().Top().GetWidth().ConvertToPx(dipScale) + + NormalizePercentToPx(decoration.GetPadding().Top(), true); + auto rightWidth = decoration.GetBorder().Right().GetWidth().ConvertToPx(dipScale) + + NormalizePercentToPx(decoration.GetPadding().Right(), false); + auto bottomWidth = decoration.GetBorder().Bottom().GetWidth().ConvertToPx(dipScale) + + NormalizePercentToPx(decoration.GetPadding().Bottom(), true); + if (textDirection_ == TextDirection::RTL) { + leftWidth += paddingHorizonForSearch_; + } else { + rightWidth += paddingHorizonForSearch_; + } + double iconSpacing = iconImage_ ? NormalizeToPx(iconHotZoneSizeInDimension_) : 0.0; + double passwordIconSpacing = + (keyboard_ == TextInputType::VISIBLE_PASSWORD && SystemProperties::GetDeviceType() == DeviceType::PHONE) + ? NormalizeToPx(iconHotZoneSizeInDimension_) + : 0.0; + if (textDirection_ == TextDirection::RTL) { + return Rect(outer.Left() + leftWidth + passwordIconSpacing, outer.Top() + topWidth, + outer.Right() - rightWidth - leftWidth - iconSpacing - passwordIconSpacing, + outer.Bottom() - bottomWidth - topWidth); + } else { + return Rect(outer.Left() + leftWidth + iconSpacing, outer.Top() + topWidth, + outer.Right() - rightWidth - leftWidth - iconSpacing - passwordIconSpacing, + outer.Bottom() - bottomWidth - topWidth); + } +} + +RenderLayer FlutterRenderTextField::GetRenderLayer() +{ + if (!layer_) { + layer_ = AceType::MakeRefPtr( + 0, GetLayoutSize().Width(), 0, GetLayoutSize().Height(), Flutter::Clip::HARD_EDGE); + } + return AceType::RawPtr(layer_); +} + +bool FlutterRenderTextField::GetCaretRect(int32_t extent, Rect& caretRect, double caretHeightOffset) const +{ + CaretMetrics metrics; + bool computeSuccess = false; + DirectionStatus directionStatus = GetDirectionStatusOfPosition(extent); + if (extent != 0 && extent != static_cast(GetEditingValue().GetWideText().length()) && + (directionStatus == DirectionStatus::LEFT_RIGHT || directionStatus == DirectionStatus::RIGHT_LEFT) && + cursorPositionType_ != CursorPositionType::NONE && LessOrEqual(clickOffset_.GetX(), innerRect_.Width())) { + computeSuccess = ComputeOffsetForCaretCloserToClick(cursorPositionForShow_, metrics); + } else { + if (textAffinity_ == TextAffinity::DOWNSTREAM) { + computeSuccess = + ComputeOffsetForCaretDownstream(extent, metrics) || ComputeOffsetForCaretUpstream(extent, metrics); + } else { + computeSuccess = + ComputeOffsetForCaretUpstream(extent, metrics) || ComputeOffsetForCaretDownstream(extent, metrics); + } + } + if (computeSuccess && !GetEditingValue().text.empty()) { + if (metrics.height <= 0 || std::isnan(metrics.height)) { + // The reason may be text lines is exceed the paragraph maxline. + LOGD("Illegal caret height. Consider release restriction of paragraph max_line."); + return false; + } + caretRect.SetRect(metrics.offset.GetX(), metrics.offset.GetY() + caretHeightOffset, NormalizeToPx(CURSOR_WIDTH), + metrics.height - caretHeightOffset * 2.0); + } else { + LOGD("Caret is at the begin of text. Make caret offset according to alignment."); + // Use proto caret. + caretRect = caretProto_ + MakeEmptyOffset(); + } + + return true; +} + +void FlutterRenderTextField::PaintCaret(SkCanvas& canvas, const Rect& caretRect) +{ + // We simply not to draw the caret rather than do an alpha animation. + if (!caretRect_.IsValid() || !showCursor_ || !cursorVisibility_) { + return; + } + SkPaint paint; + Color cursorColor = cursorColor_; + if (!cursorColorIsSet_) { + // Default strategy: Keep color same with text. + cursorColor = style_.GetTextColor(); + } + paint.setColor(Constants::ConvertSkColor(cursorColor)); + + if (NearZero(cursorRadius_.Value())) { + canvas.drawRect( + SkRect::MakeLTRB(caretRect.Left(), caretRect.Top(), caretRect.Right(), caretRect.Bottom()), paint); + } else { + const SkScalar radius = SkDoubleToScalar(NormalizeToPx(cursorRadius_)); + flutter::RRect rrect; + rrect.sk_rrect.setRectXY(SkRect::MakeLTRB(SkDoubleToScalar(caretRect.Left()), SkDoubleToScalar(caretRect.Top()), + SkDoubleToScalar(caretRect.Right()), SkDoubleToScalar(caretRect.Bottom())), radius, radius); + canvas.drawRRect(rrect.sk_rrect, paint); + } +} + +void FlutterRenderTextField::PaintSelectCaret(SkCanvas* canvas) +{ + if (!isOverlayShowed_ || !paragraph_) { + return; + } + + SkPaint paint; + paint.setAntiAlias(true); + paint.setColor(cursorColor_.GetValue()); + paint.setStrokeWidth(caretRect_.Width()); + paint.setStrokeCap(SkPaint::Cap::kRound_Cap); + + Rect caretRect = caretRect_; + // 1.0_dp is UX design. + caretRect = caretRect + Offset(0.0, -CARET_HEIGHT_OFFSET - NormalizeToPx(1.0_vp)) + + Size(0.0, (CARET_HEIGHT_OFFSET + NormalizeToPx(1.0_vp)) * 2.0); + if (IsSingleHandle()) { + canvas->drawLine((caretRect.Left() + caretRect.Right()) / 2.0, caretRect.Top(), + (caretRect.Top(), caretRect.Left() + caretRect.Right()) / 2.0, caretRect.Bottom(), paint); + } + + const auto& selection = GetEditingValue().selection; + int32_t start = selection.GetStart(); + int32_t end = selection.GetEnd(); + + const auto& boxes = paragraph_->GetRectsForRange(selection.GetStart(), selection.GetEnd(), + txt::Paragraph::RectHeightStyle::kMax, txt::Paragraph::RectWidthStyle::kTight); + if (!boxes.empty()) { + Offset startCaretOffset = Offset( + boxes.back().rect.fRight - boxes.front().rect.fLeft, boxes.back().rect.fTop - boxes.front().rect.fTop); + if (start >= GetInitIndex() && end >= GetInitIndex()) { + startCaretRect_ = caretRect + startCaretOffset; + } else { + startCaretRect_ = caretRect - startCaretOffset; + } + } else { + startCaretRect_ = caretRect; + } + + // Draw line + if (IsSingleHandle()) { + canvas->drawLine((startCaretRect_.Left() + startCaretRect_.Right()) / 2.0, startCaretRect_.Top(), + (startCaretRect_.Top(), startCaretRect_.Left() + startCaretRect_.Right()) / 2.0, startCaretRect_.Bottom(), + paint); + } +} + +void FlutterRenderTextField::PaintDecoration( + const Offset& offset, SkCanvas* canvas, const Size& size, RenderContext& context) +{ + auto pipelineContext = context_.Upgrade(); + if (!pipelineContext || !decoration_) { + return; + } + pipelineContext->AddDirtyLayoutNode(AceType::Claim(this)); + + Size deflateSize = ComputeDeflateSizeOfErrorAndCountText(); + RefPtr decorationPainter = AceType::MakeRefPtr( + decoration_, GetPaintRect() - deflateSize, size - deflateSize, pipelineContext->GetDipScale()); + decorationPainter->PaintDecoration(offset, canvas, context); +} + +void FlutterRenderTextField::PaintIcon(const Offset& offset, RenderContext& context) +{ + auto pipelineContext = context_.Upgrade(); + if (!pipelineContext) { + return; + } + Offset verticalOffsetForCenter = ComputeVerticalOffsetForCenter(innerRect_.Height(), iconSize_); + // Paint header icon. + Offset iconOffset = offset; + Offset hotZoneOffset = Offset((iconHotZoneSize_ - iconSize_) / 2.0, 0.0); + if (iconImage_) { + iconOffset += innerRect_.GetOffset() + verticalOffsetForCenter; + if (textDirection_ == TextDirection::RTL) { + iconOffset += Offset(innerRect_.Width(), 0.0) + hotZoneOffset; + } else { + iconOffset += hotZoneOffset - Offset(iconHotZoneSize_, 0.0); + } + iconImage_->RenderWithContext(context, iconOffset); + } + + // Paint password icon. + if (keyboard_ == TextInputType::VISIBLE_PASSWORD && renderShowIcon_ && renderHideIcon_) { + Offset passwordIconOffset = offset + verticalOffsetForCenter + hotZoneOffset + + Offset(GetLayoutSize().Width() - iconHotZoneSize_, innerRect_.GetOffset().GetY()); + if (textDirection_ == TextDirection::RTL) { + passwordIconOffset += Offset(-(GetLayoutSize().Width() - iconHotZoneSize_), 0.0); + } + if (obscure_) { + renderHideIcon_->RenderWithContext(context, passwordIconOffset); + } else { + renderShowIcon_->RenderWithContext(context, passwordIconOffset); + } + passwordIconRect_ = Rect( + passwordIconOffset - Offset((iconHotZoneSize_ - iconSize_) / 2.0, (iconHotZoneSize_ - iconSize_) / 2.0) + + GetGlobalOffset(), Size(iconHotZoneSize_, iconHotZoneSize_)); + } +} + +void FlutterRenderTextField::PaintSelection(SkCanvas* canvas) const +{ + if (SystemProperties::GetDeviceType() != DeviceType::PHONE) { + return; + } + using namespace Constants; + + if (!paragraph_ || (canvas == nullptr)) { + return; + } + const auto& selection = GetEditingValue().selection; + if (GetEditingValue().text.empty() || selection.GetStart() == selection.GetEnd()) { + return; + } + const auto& boxes = paragraph_->GetRectsForRange(selection.GetStart(), selection.GetEnd(), + txt::Paragraph::RectHeightStyle::kMax, txt::Paragraph::RectWidthStyle::kTight); + if (boxes.empty()) { + return; + } + canvas->save(); + SkPaint paint; + paint.setColor(selectedColor_.GetValue()); + Offset effectiveOffset = innerRect_.GetOffset() + textOffsetForShowCaret_ + + ComputeVerticalOffsetForCenter(innerRect_.Height(), paragraph_->GetHeight()); + for (const auto& box : boxes) { + const auto& selectionRect = ConvertSkRect(box.rect) + effectiveOffset; + if (box.direction == txt::TextDirection::ltr) { + canvas->drawRect(SkRect::MakeLTRB(selectionRect.Left(), selectionRect.Top(), selectionRect.Right(), + selectionRect.Bottom()), paint); + } else { + canvas->drawRect(SkRect::MakeLTRB(selectionRect.Right(), selectionRect.Top(), selectionRect.Left(), + selectionRect.Bottom()), paint); + } + } + canvas->restore(); +} + +void FlutterRenderTextField::PaintTextAndPlaceholder(SkCanvas* canvas) const +{ + // Offset for the painting area of text + Offset textAreaOffset = innerRect_.GetOffset(); + if (showPlaceholder_) { + textAreaOffset += ComputeVerticalOffsetForCenter(innerRect_.Height(), placeholderParagraph_->GetHeight()); + placeholderParagraph_->Paint(canvas, textAreaOffset.GetX(), textAreaOffset.GetY()); + } else { + textAreaOffset += ComputeVerticalOffsetForCenter(innerRect_.Height(), paragraph_->GetHeight()); + Offset textOffset = textOffsetForShowCaret_ + textAreaOffset; + paragraph_->Paint(canvas, textOffset.GetX(), textOffset.GetY()); + } +} + +void FlutterRenderTextField::PaintErrorText(SkCanvas* canvas) const +{ + if (!errorParagraph_ || (canvas == nullptr)) { + return; + } + Offset errorOffset = innerRect_.GetOffset(); + if (errorIsInner_) { + double errorSpacing = + GreatOrEqual(errorParagraph_->GetLongestLine(), originInnerWidth_ - errorSpacing_) ? 0.0 : errorSpacing_; + errorOffset += + Offset(innerRect_.Width() + errorSpacing, (innerRect_.Height() - errorParagraph_->GetHeight()) / 2.0); + } else { + double bottomPadding = 0.0; + if (decoration_) { + bottomPadding = NormalizeToPx(decoration_->GetPadding().Bottom()); + } + errorOffset += Offset(0.0, innerRect_.Height() + bottomPadding + NormalizeToPx(COUNT_SPACING)); + } + errorParagraph_->Paint(canvas, errorOffset.GetX(), errorOffset.GetY()); +} + +void FlutterRenderTextField::PaintCountText(SkCanvas* canvas) const +{ + if (!countParagraph_ || (canvas == nullptr)) { + return; + } + if (ShowCounter()) { + Offset countOffset = innerRect_.GetOffset() + + Offset(innerRect_.Width() - countParagraph_->GetLongestLine(), innerRect_.Height()); + if (maxLines_ == 1) { + double bottomPadding = 0.0; + if (decoration_) { + bottomPadding = NormalizeToPx(decoration_->GetPadding().Bottom()); + } + countOffset += Offset(0.0, bottomPadding + NormalizeToPx(COUNT_SPACING)); + } + countParagraph_->Paint(canvas, countOffset.GetX(), countOffset.GetY()); + } +} + +void FlutterRenderTextField::PaintOverlayForHoverAndPress(SkCanvas* canvas) const +{ + if (canvas == nullptr) { + return; + } + SkPaint paint; + auto pipelineContext = context_.Upgrade(); + if (!pipelineContext) { + return; + } + Size deflateSize = ComputeDeflateSizeOfErrorAndCountText(); + RefPtr decorationPainter = AceType::MakeRefPtr(decoration_, + GetPaintRect() - deflateSize, GetPaintRect().GetSize() - deflateSize, pipelineContext->GetDipScale()); + Border border; + if (decoration_) { + border = decoration_->GetBorder(); + } + flutter::RRect clipRRect = decorationPainter->GetBoxRRect(Offset(), border, 0.0, true); + canvas->save(); + canvas->clipRRect(clipRRect.sk_rrect, true); + // Background overlay 5% opacity black when hover, 10% opacity black when press. + paint.setColor(GetEventEffectColor().GetValue()); + Rect rect(Offset::Zero(), GetLayoutSize()); + canvas->drawRect(SkRect::MakeLTRB(rect.Left(), rect.Top(), rect.Width(), rect.Height()), paint); + canvas->restore(); +} + +void FlutterRenderTextField::Paint(RenderContext& context, const Offset& offset) +{ + if (layer_) { + layer_->SetClip(0, GetLayoutSize().Width(), 0, GetLayoutSize().Height(), Flutter::Clip::HARD_EDGE); + } + + auto canvas = ScopedCanvas::Create(context); + if (!canvas) { + LOGE("canvas fetch failed"); + return; + } + auto pipelineContext = context_.Upgrade(); + if (!canvas || !(paragraph_ || placeholderParagraph_ || !pipelineContext) || IsInfiniteLayout()) { + LOGE("Paint canvas or paragraph is null"); + return; + } + auto viewScale = pipelineContext->GetViewScale(); + SkCanvas* skCanvas = canvas->canvas(); + if (lastLayoutSize_ != GetLayoutSize()) { + auto imageInfo = SkImageInfo::Make(GetLayoutSize().Width() * viewScale * MAGNIFIER_GAIN, + GetLayoutSize().Height() * viewScale * MAGNIFIER_GAIN, SkColorType::kRGBA_8888_SkColorType, + SkAlphaType::kOpaque_SkAlphaType); + canvasCache_.reset(); + canvasCache_.allocPixels(imageInfo); + magnifierCanvas_ = std::make_unique(canvasCache_); + lastLayoutSize_ = GetLayoutSize(); + } + + canvasCache_.eraseColor(SK_ColorTRANSPARENT); + magnifierCanvas_->scale(viewScale * MAGNIFIER_GAIN, viewScale * MAGNIFIER_GAIN); + + PaintTextField(offset, context, skCanvas); + PaintTextField(offset, context, magnifierCanvas_.get(), true); + + magnifierCanvas_->scale(1.0 / (viewScale * MAGNIFIER_GAIN), 1.0 / (viewScale * MAGNIFIER_GAIN)); +} + +Size FlutterRenderTextField::Measure() +{ + ResetParagraphIfNeeded(); + + UpdateCaretProto(); + + auto pipelineContext = context_.Upgrade(); + if (!pipelineContext) { + LOGE("No pipelineContext."); + return Size(); + } + + double decorationHeight = 0.0; + if (decoration_) { + decorationHeight = decoration_->VerticalSpaceOccupied(pipelineContext->GetDipScale()); + } + + auto paragraphStyle = CreateParagraphStyle(); + std::unique_ptr txtStyle; + double textAreaWidth = MeasureParagraph(paragraphStyle, txtStyle); + ComputeExtendHeight(decorationHeight); + + double height = NearZero(extendHeight_) ? GetLayoutParam().GetMaxSize().Height() : extendHeight_; + innerRect_ = { Offset::Zero(), GetLayoutParam().GetMaxSize() }; + innerRect_.SetHeight(height); + Size size = innerRect_.GetSize(); + if (decoration_) { + // Restrict painting rect to text area, excluding the decoration. + innerRect_ = GetInnerRect(*decoration_, innerRect_, pipelineContext->GetDipScale()); + } + originInnerWidth_ = innerRect_.Width(); + if (errorParagraph_ && errorIsInner_) { + double deflateWidth = innerRect_.Width() - errorParagraph_->GetLongestLine() - errorSpacing_; + innerRect_.SetWidth(GreatOrEqual(deflateWidth, 0.0) ? deflateWidth : 0.0); + } + + // Get height of text + auto paragraphTxt = static_cast(paragraph_.get()); + if (paragraphTxt != nullptr) { + textHeight_ = paragraphTxt->GetHeight(); + textLines_ = paragraphTxt->GetLineCount(); + } else { + textHeight_ = 0.0; + textLines_ = 0; + } + + ComputeOffsetAfterLayout(); + + SetShaderIfNeeded(std::move(paragraphStyle), std::move(txtStyle), textAreaWidth); + + return ComputeLayoutSize(size, decorationHeight); +} + +double FlutterRenderTextField::MeasureParagraph( + const std::unique_ptr& paragraphStyle, std::unique_ptr& txtStyle) +{ + double maxWidth = GetLayoutParam().GetMaxSize().Width(); + // If single-line, give it infinity for layout and text will auto scroll following with caret. + double textAreaWidth = std::numeric_limits::infinity(); + + auto pipelineContext = context_.Upgrade(); + if (!pipelineContext) { + LOGE("No pipelineContext."); + return textAreaWidth; + } + + double limitWidth = maxWidth; + if (decoration_) { + limitWidth = maxWidth - decoration_->HorizontalSpaceOccupied(pipelineContext->GetDipScale()); + } + if (iconImage_) { + limitWidth -= iconHotZoneSize_; + } + if (keyboard_ == TextInputType::VISIBLE_PASSWORD) { + limitWidth -= iconHotZoneSize_; + } + limitWidth -= paddingHorizonForSearch_; + // If multi-line, set the maxWidth so that Paragraph can help us do soft-wrap. + if (maxLines_ != 1 || resetToStart_) { + textAreaWidth = limitWidth; + } + + auto displayText = GetTextForDisplay(GetEditingValue().text); + showPlaceholder_ = displayText.empty(); + double errorTextWidth = 0.0; + paragraph_.reset(nullptr); + errorParagraph_.reset(nullptr); + countParagraph_.reset(nullptr); + placeholderParagraph_.reset(nullptr); + if (!errorText_.empty()) { + std::unique_ptr errorBuilder = + txt::ParagraphBuilder::CreateTxtBuilder(*CreateParagraphStyle(true), GetFontCollection()); + txtStyle = CreateTextStyle(errorTextStyle_); + errorBuilder->PushStyle(*txtStyle); + errorBuilder->AddText(StringUtils::Str8ToStr16(errorText_)); + errorParagraph_ = errorBuilder->Build(); + errorParagraph_->Layout(textAreaWidth); + errorTextWidth = errorIsInner_ ? errorParagraph_->GetLongestLine() : 0.0; + } + if (ShowCounter()) { + std::unique_ptr countBuilder = + txt::ParagraphBuilder::CreateTxtBuilder(*CreateParagraphStyle(), GetFontCollection()); + if (overCount_) { + txtStyle = CreateTextStyle(maxLines_ == 1 ? overCountStyleOuter_ : overCountStyle_); + } else { + txtStyle = CreateTextStyle(maxLines_ == 1 ? countTextStyleOuter_ : countTextStyle_); + } + countBuilder->PushStyle(*txtStyle); + countBuilder->AddText(StringUtils::Str8ToStr16( + std::to_string(GetEditingValue().GetWideText().size()) + "/" + std::to_string(maxLength_))); + countParagraph_ = countBuilder->Build(); + countParagraph_->Layout(textAreaWidth); + } + if (!showPlaceholder_) { + std::unique_ptr builder = + txt::ParagraphBuilder::CreateTxtBuilder(*paragraphStyle, GetFontCollection()); + txtStyle = CreateTextStyle(style_); + builder->PushStyle(*txtStyle); + builder->AddText(displayText); + paragraph_ = builder->Build(); + paragraph_->Layout(textAreaWidth - errorTextWidth); + if ((textDirection_ == TextDirection::RTL || realTextDirection_ == TextDirection::RTL) && + LessOrEqual(paragraph_->GetLongestLine(), innerRect_.Width())) { + paragraph_->Layout(limitWidth); + } + } else { + std::unique_ptr placeholderBuilder = + txt::ParagraphBuilder::CreateTxtBuilder(*paragraphStyle, GetFontCollection()); + txtStyle = CreateTextStyle(style_, true); + placeholderBuilder->PushStyle(*txtStyle); + placeholderBuilder->AddText(StringUtils::Str8ToStr16(placeholder_)); + placeholderParagraph_ = placeholderBuilder->Build(); + placeholderParagraph_->Layout(textAreaWidth - errorTextWidth); + if (textDirection_ == TextDirection::RTL && + LessOrEqual(placeholderParagraph_->GetLongestLine(), innerRect_.Width())) { + placeholderParagraph_->Layout(limitWidth); + } + } + return textAreaWidth; +} + +void FlutterRenderTextField::ComputeExtendHeight(double decorationHeight) +{ + // Compute extendHeight which adjust to paragraph's height and max height when extend. + double heightInPx = 0.0; + if (height_.Unit() == DimensionUnit::PERCENT) { + auto parent = GetParent().Upgrade(); + // If textfield can't handle percent, traverse parent to handle, here set max depth 4. + for (int32_t depth = 1; depth <= 4; ++depth) { + if (!parent) { + break; + } + auto boxParent = AceType::DynamicCast(parent); + if (boxParent) { + heightInPx = boxParent->CalculateHeightPercent(height_.Value()); + break; + } + parent = parent->GetParent().Upgrade(); + } + } else { + heightInPx = NormalizeToPx(height_); + } + double deflateHeight = 0.0; + if (errorParagraph_ && !errorIsInner_) { + deflateHeight = errorParagraph_->GetHeight() + errorSpacing_; + } + if (countParagraph_ && ShowCounter()) { + deflateHeight = std::max(deflateHeight, countParagraph_->GetHeight() + errorSpacing_); + } + heightInPx = std::clamp(heightInPx, GetLayoutParam().GetMinSize().Height() - deflateHeight, + GetLayoutParam().GetMaxSize().Height() - deflateHeight); + if (paragraph_ && extend_ && GreatOrEqual(paragraph_->GetHeight(), heightInPx - decorationHeight)) { + extendHeight_ = paragraph_->GetHeight() + decorationHeight; + } else { + extendHeight_ = heightInPx; + } + extendHeight_ = std::min(extendHeight_, GetLayoutParam().GetMaxSize().Height()); +} + +void FlutterRenderTextField::ComputeOffsetAfterLayout() +{ + // Use glyphs dependent height. + if (GetCaretRect(GetEditingValue().selection.extentOffset, caretRect_, CARET_HEIGHT_OFFSET)) { + caretRect_ += innerRect_.GetOffset(); + textOffsetForShowCaret_ = caretRect_.MagneticAttractedBy(innerRect_); + if (resetToStart_) { + caretRect_ -= textOffsetForShowCaret_; + textOffsetForShowCaret_ = Offset(); + } + if (showPlaceholder_) { + caretRect_ += ComputeVerticalOffsetForCenter(innerRect_.Height(), placeholderParagraph_->GetHeight()); + } else { + caretRect_ += ComputeVerticalOffsetForCenter(innerRect_.Height(), paragraph_->GetHeight()); + } + } +} + +Offset FlutterRenderTextField::ComputeVerticalOffsetForCenter(double outerHeight, double innerHeight) const +{ + // Compute verticalOffsetForCenter_ when TextInputType is not MULTILINE. + if (keyboard_ == TextInputType::MULTILINE) { + return Offset(); + } + return Offset(0.0, (outerHeight - innerHeight) / 2.0); +} + +sk_sp FlutterRenderTextField::MakeGradientShader(double shadeWidth) const +{ + // If need move canvas for caret, the left side must be overflow. + bool needShadeLeft = !NearZero(textOffsetForShowCaret_.GetX()); + // The actual width for text occupied. + double textWidth = paragraph_->GetMaxIntrinsicWidth(); + // Width hidden on the right side. Attention: textOffsetForShowCaret_.GetX() is less than 0. + double rightOverflow = textWidth + textOffsetForShowCaret_.GetX() - innerRect_.Width(); + bool needShadeRight = rightOverflow > 1.0; + + if (!needShadeLeft && !needShadeRight) { + return nullptr; + } + if (!innerRect_.IsValid()) { + return nullptr; + } + + auto posLeft = static_cast(shadeWidth / innerRect_.Width()); + float posRight = 1.0f - (posLeft * 2.0f); + if (posRight < posLeft) { + posRight = posLeft; + } + + uint32_t originColor = style_.GetTextColor().GetValue(); + uint32_t transparentColor = originColor & 0x00FFFFFF; + + SkPoint pts[] = { SkPoint::Make(SkDoubleToScalar(innerRect_.Left()), SkDoubleToScalar(0.0)), + SkPoint::Make(SkDoubleToScalar(innerRect_.Right()), SkDoubleToScalar(0.0)) }; + // Text or placeholder color from alpha 0 - 255 + SkColor colors[] = { transparentColor, originColor, originColor, transparentColor }; + float pos[] = { 0.0f, posLeft, posRight, 1.0f }; + + int32_t start = 0; + int32_t renderCount = sizeof(pos) / sizeof(pos[0]); + int32_t totalCount = renderCount; + if (!needShadeLeft) { + start = 2; + renderCount = 2; + } else if (!needShadeRight) { + start = 0; + renderCount = 2; + } + if ((start + renderCount == totalCount) && blockRightShade_) { + // when blocking right shade, ignore the last 2 points + // in which case the renderCount must be greater or equal than 2 + renderCount -= 2; + if (directionStatus_ == DirectionStatus::RIGHT_RIGHT) { + start = 2; + } + } +#ifdef USE_SYSTEM_SKIA + return SkGradientShader::MakeLinear(pts, &colors[start], &pos[start], renderCount, SkShader::kClamp_TileMode); +#else + return SkGradientShader::MakeLinear(pts, &colors[start], &pos[start], renderCount, SkTileMode::kClamp); +#endif +} + +void FlutterRenderTextField::SetShaderIfNeeded( + std::unique_ptr paragraphStyle, std::unique_ptr txtStyle, double textAreaWidth) +{ + if (maxLines_ != 1 || showPlaceholder_ || !paragraph_ || !needFade_) { + // Not support placeHolder or multiline. + return; + } + + const double shadeWidth = innerRect_.Left(); + if (shadeWidth * 2 > innerRect_.Width()) { + LOGD("The region is too short to do shade."); + return; + } + + auto shader = MakeGradientShader(shadeWidth); + if (!shader) { + return; + } + + std::unique_ptr builder = + txt::ParagraphBuilder::CreateTxtBuilder(*paragraphStyle, GetFontCollection()); + txtStyle->has_foreground = true; + txtStyle->foreground.setShader(shader); + builder->PushStyle(*txtStyle); + builder->AddText(GetTextForDisplay(GetEditingValue().text)); + paragraph_ = builder->Build(); + paragraph_->Layout(textAreaWidth); +} + +Size FlutterRenderTextField::ComputeLayoutSize(const Size& size, double decorationHeight) +{ + if (!extend_ || GreatOrEqual(innerRect_.GetSize().Height(), textHeight_)) { + Size inflateSize; + if (errorParagraph_ && !errorIsInner_) { + // If error text is under textfield, height of textfield should add error text's height. + inflateSize.SetHeight(errorParagraph_->GetHeight() + errorSpacing_); + } + if (countParagraph_ && ShowCounter()) { + // If count text is under textfield, height of textfield should add count text's height. + inflateSize.SetHeight(std::max(inflateSize.Height(), countParagraph_->GetHeight() + errorSpacing_)); + } + return size + inflateSize; + } + if (GreatNotEqual(textHeight_, 0.0)) { + innerRect_.SetHeight(textHeight_); + } + double maxWidth = GetLayoutParam().GetMaxSize().Width(); + return Size(maxWidth, innerRect_.Height() + decorationHeight); +} + +std::unique_ptr FlutterRenderTextField::CreateParagraphStyle(bool isErrorText) +{ + using namespace Constants; + + auto style = std::make_unique(); + // If single-line, it shouldn't do soft-wrap for us. + if (maxLines_ == 1 && resetToStart_) { + style->max_lines = 1; + if (showEllipsis_) { + style->ellipsis = StringUtils::Str8ToStr16(ELLIPSIS); + } + } + style->text_align = ConvertTxtTextAlign(textAlign_); + style->font_size = NormalizeToPx(style_.GetFontSize()); + + // If keyboard is password, don't change text_direction with first strong direction letter + if (!isErrorText && keyboard_ == TextInputType::VISIBLE_PASSWORD && !GetEditingValue().text.empty()) { + style->text_direction = ConvertTxtTextDirection(textDirection_); + realTextDirection_ = textDirection_; + UpdateDirectionStatus(); + return style; + } + std::string showingText; + if (isErrorText) { + showingText = errorText_; + } else { + showingText = GetEditingValue().text; + if (showingText.empty()) { + showingText = placeholder_; + } + } + // Use first strong direction letter to decide text_direction. + existStrongDirectionLetter_ = false; + auto showingTextForWString = StringUtils::ToWstring(showingText); + for (const auto& charOfShowingText : showingTextForWString) { + auto charDirection = u_charDirection(charOfShowingText); + if (charDirection == UCharDirection::U_LEFT_TO_RIGHT) { + style->text_direction = ConvertTxtTextDirection(TextDirection::LTR); + existStrongDirectionLetter_ = true; + realTextDirection_ = TextDirection::LTR; + } else if (charDirection == UCharDirection::U_RIGHT_TO_LEFT || + charDirection == UCharDirection::U_RIGHT_TO_LEFT_ARABIC || + charDirection == UCharDirection::U_ARABIC_NUMBER) { + style->text_direction = ConvertTxtTextDirection(TextDirection::RTL); + existStrongDirectionLetter_ = true; + realTextDirection_ = TextDirection::RTL; + } + if (existStrongDirectionLetter_) { + break; + } + } + if (!existStrongDirectionLetter_) { + style->text_direction = ConvertTxtTextDirection(textDirection_); + realTextDirection_ = textDirection_; + } + UpdateDirectionStatus(); + return style; +} + +std::unique_ptr FlutterRenderTextField::CreateTextStyle(const TextStyle& style, bool isPlaceholder) +{ + using namespace Constants; + + auto txtStyle = std::make_unique(); + if (isPlaceholder) { + txtStyle->color = ConvertSkColor(placeholderColor_); + } else { + txtStyle->color = ConvertSkColor(style.GetTextColor()); + } + + txtStyle->font_families = style.GetFontFamilies(); + txtStyle->font_weight = ConvertTxtFontWeight(style.GetFontWeight()); + txtStyle->font_size = NormalizeToPx(style.GetFontSize()); + txtStyle->font_style = ConvertTxtFontStyle(style.GetFontStyle()); + txtStyle->text_baseline = ConvertTxtTextBaseline(style.GetTextBaseline()); + txtStyle->locale = Localization::GetInstance()->GetFontLocale(); + return txtStyle; +} + +void FlutterRenderTextField::UpdateCaretProto() +{ + caretProto_.SetRect( + 0.0, CARET_HEIGHT_OFFSET, NormalizeToPx(CURSOR_WIDTH), PreferredLineHeight() - 2.0 * CARET_HEIGHT_OFFSET); +} + +double FlutterRenderTextField::GetBoundaryOfParagraph(bool isLeftBoundary) const +{ + if (!paragraph_ || GetEditingValue().text.empty()) { + return 0.0; + } + auto boxes = paragraph_->GetRectsForRange(0, GetEditingValue().GetWideText().length(), + txt::Paragraph::RectHeightStyle::kMax, txt::Paragraph::RectWidthStyle::kTight); + if (boxes.empty()) { + return 0.0; + } + double leftBoundaryOfParagraph = boxes.front().rect.fLeft; + double rightBoundaryOfParagraph = boxes.front().rect.fLeft; + double bottomBoundaryOfParagraph = boxes.front().rect.fBottom; + for (const auto& box : boxes) { + if (cursorPositionType_ == CursorPositionType::END && !NearEqual(box.rect.fBottom, bottomBoundaryOfParagraph)) { + bottomBoundaryOfParagraph = box.rect.fBottom; + leftBoundaryOfParagraph = box.rect.fLeft; + rightBoundaryOfParagraph = box.rect.fRight; + continue; + } + leftBoundaryOfParagraph = std::min(static_cast(box.rect.fLeft), leftBoundaryOfParagraph); + rightBoundaryOfParagraph = std::max(static_cast(box.rect.fRight), rightBoundaryOfParagraph); + } + return isLeftBoundary ? leftBoundaryOfParagraph : rightBoundaryOfParagraph; +} + +bool FlutterRenderTextField::ComputeOffsetForCaretUpstream(int32_t extent, CaretMetrics& result) const +{ + auto text = GetTextForDisplay(GetEditingValue().text); + if (!paragraph_ || text.empty()) { + return false; + } + + char16_t prevChar = 0; + if (static_cast(extent) <= text.length()) { + prevChar = text[std::max(0, extent - 1)]; + } + + result.Reset(); + int32_t graphemeClusterLength = StringUtils::NotInUtf16Bmp(prevChar) ? 2 : 1; + int32_t prev = extent - graphemeClusterLength; + auto boxes = paragraph_->GetRectsForRange( + prev, extent, txt::Paragraph::RectHeightStyle::kMax, txt::Paragraph::RectWidthStyle::kTight); + while (boxes.empty() && !GetEditingValue().text.empty()) { + graphemeClusterLength *= 2; + prev = extent - graphemeClusterLength; + if (prev < 0) { + boxes = paragraph_->GetRectsForRange( + 0, extent, txt::Paragraph::RectHeightStyle::kMax, txt::Paragraph::RectWidthStyle::kTight); + break; + } + boxes = paragraph_->GetRectsForRange( + prev, extent, txt::Paragraph::RectHeightStyle::kMax, txt::Paragraph::RectWidthStyle::kTight); + } + if (boxes.empty()) { + return false; + } + + const auto& textBox = *boxes.begin(); + + if (prevChar == NEWLINE_CODE) { + // Return the start of next line. + auto emptyOffset = MakeEmptyOffset(); + result.offset.SetX(emptyOffset.GetX()); + result.offset.SetY(textBox.rect.fBottom); + result.height = caretProto_.Height(); + return true; + } + + bool isLtr = textBox.direction == txt::TextDirection::ltr; + // Caret is within width of the upstream glyphs. + double caretEnd = isLtr ? textBox.rect.fRight : textBox.rect.fLeft; + if (cursorPositionType_ == CursorPositionType::END) { + caretEnd = GetBoundaryOfParagraph(realTextDirection_ != TextDirection::LTR); + } + double dx = isLtr ? caretEnd : caretEnd - caretProto_.Width(); + double offsetX = std::min(dx, paragraph_->GetMaxWidth()); + result.offset.SetX(offsetX); + result.offset.SetY(textBox.rect.fTop); + result.height = textBox.rect.fBottom - textBox.rect.fTop; + + return true; +} + +bool FlutterRenderTextField::ComputeOffsetForCaretDownstream(int32_t extent, CaretMetrics& result) const +{ + if (!paragraph_ || static_cast(extent) >= GetEditingValue().GetWideText().length()) { + return false; + } + + result.Reset(); + const int32_t graphemeClusterLength = 1; + const int32_t next = extent + graphemeClusterLength; + auto boxes = paragraph_->GetRectsForRange( + extent, next, txt::Paragraph::RectHeightStyle::kMax, txt::Paragraph::RectWidthStyle::kTight); + if (boxes.empty()) { + return false; + } + + const auto& textBox = *boxes.begin(); + bool isLtr = textBox.direction == txt::TextDirection::ltr; + // Caret is within width of the downstream glyphs. + double caretStart = isLtr ? textBox.rect.fLeft : textBox.rect.fRight; + if (cursorPositionType_ == CursorPositionType::END) { + caretStart = GetBoundaryOfParagraph(realTextDirection_ != TextDirection::LTR); + } + double dx = isLtr ? caretStart : caretStart - caretProto_.Width(); + double offsetX = std::min(dx, paragraph_->GetMaxWidth()); + result.offset.SetX(offsetX); + result.offset.SetY(textBox.rect.fTop); + result.height = textBox.rect.fBottom - textBox.rect.fTop; + + return true; +} + +bool FlutterRenderTextField::ComputeOffsetForCaretCloserToClick(int32_t extent, CaretMetrics& result) const +{ + CaretMetrics upStreamMetrics; + bool upStreamSuccess = ComputeOffsetForCaretUpstream(extent, upStreamMetrics); + CaretMetrics downStreamMetrics; + bool downStreamSuccess = ComputeOffsetForCaretDownstream(extent, downStreamMetrics); + bool nearToUpStream = LessOrEqual(std::abs(upStreamMetrics.offset.GetX() - clickOffset_.GetX()), + std::abs(downStreamMetrics.offset.GetX() - clickOffset_.GetX())); + result = nearToUpStream ? upStreamMetrics : downStreamMetrics; + return upStreamSuccess || downStreamSuccess; +} + +Offset FlutterRenderTextField::MakeEmptyOffset() const +{ + if (realTextDirection_ == TextDirection::RTL) { + return Offset(innerRect_.Width(), 0.0); + } + + switch (textAlign_) { + case TextAlign::LEFT: { + return Offset::Zero(); + } + case TextAlign::RIGHT: { + return Offset(innerRect_.Width(), 0.0); + } + case TextAlign::JUSTIFY: + case TextAlign::CENTER: { + return Offset(innerRect_.Width() / 2.0, 0.0); + } + case TextAlign::END: { + switch (textDirection_) { + case TextDirection::RTL: { + return Offset::Zero(); + } + case TextDirection::LTR: + default:{ + return Offset(innerRect_.Width(), 0.0); + } + } + } + case TextAlign::START: + default: { + // Default to start. + switch (textDirection_) { + case TextDirection::RTL: { + return Offset(innerRect_.Width(), 0.0); + } + case TextDirection::LTR: + default:{ + return Offset::Zero(); + } + } + } + } +} + +double FlutterRenderTextField::PreferredLineHeight() +{ + if (!template_) { + std::unique_ptr builder = + txt::ParagraphBuilder::CreateTxtBuilder(*CreateParagraphStyle(), GetFontCollection()); + builder->PushStyle(*CreateTextStyle(style_)); + // Use a space for estimating line height if there is no placeholder. + // Actually it has slight differ between cases. + if (placeholder_.empty()) { + builder->AddText(u" "); + } else { + builder->AddText(StringUtils::Str8ToStr16(placeholder_)); + } + template_ = builder->Build(); + template_->Layout(Size::INFINITE_SIZE); + } + return template_->GetHeight(); +} + +std::shared_ptr FlutterRenderTextField::GetFontCollection() +{ + return FlutterFontCollection::GetInstance().GetFontCollection(); +} + +void FlutterRenderTextField::ResetParagraphIfNeeded() +{ + // When custom font is loaded, reset the paragraph. + if (isCallbackCalled_) { + if (paragraph_) { + paragraph_.reset(); + } + if (placeholderParagraph_) { + placeholderParagraph_.reset(); + } + } +} + +int32_t FlutterRenderTextField::GetCursorPositionForMoveUp() +{ + if (!paragraph_) { + return 0; + } + double verticalOffset = -textOffsetForShowCaret_.GetY() - PreferredLineHeight(); + return static_cast( + paragraph_->GetGlyphPositionAtCoordinate(caretRect_.Left(), caretRect_.Top() + verticalOffset).position - 1); +} + +int32_t FlutterRenderTextField::GetCursorPositionForMoveDown() +{ + if (!paragraph_) { + return 0; + } + double verticalOffset = -textOffsetForShowCaret_.GetY() + PreferredLineHeight(); + return static_cast( + paragraph_->GetGlyphPositionAtCoordinate(caretRect_.Left(), caretRect_.Top() + verticalOffset).position - 1); +} + +int32_t FlutterRenderTextField::GetCursorPositionForClick(const Offset& offset) +{ + if (!paragraph_) { + return 0; + } + cursorPositionType_ = CursorPositionType::NORMAL; + clickOffset_ = offset - GetGlobalOffset() - innerRect_.GetOffset() - textOffsetForShowCaret_; + // Solve can't select right boundary of RTL language. + double rightBoundary = GetBoundaryOfParagraph(false); + if (GreatOrEqual(clickOffset_.GetX(), rightBoundary)) { + int32_t rightBoundaryPosition = + static_cast(paragraph_->GetGlyphPositionAtCoordinate( + rightBoundary - NormalizeToPx(CURSOR_WIDTH), clickOffset_.GetY()).position); + return realTextDirection_ == TextDirection::RTL ? 0 : rightBoundaryPosition; + } + return static_cast( + paragraph_->GetGlyphPositionAtCoordinate(clickOffset_.GetX(), clickOffset_.GetY()).position); +} + +int32_t FlutterRenderTextField::AdjustCursorAndSelection(int32_t currentCursorPosition) +{ + int32_t result = currentCursorPosition; + // Place cursor to the right boundary of paragraph when direction is LTR, + // place to the left boundary of paragraph when direction is RTL. + auto paragraphStyle = CreateParagraphStyle(); + std::unique_ptr txtStyle; + MeasureParagraph(paragraphStyle, txtStyle); + Rect tempRect; + GetCaretRect(currentCursorPosition, tempRect); + auto maxPosition = static_cast(GetEditingValue().GetWideText().length()); + double leftBoundary = GetBoundaryOfParagraph(true); + double rightBoundary = GetBoundaryOfParagraph(false); + if ((realTextDirection_ == TextDirection::LTR && + (NearEqual(tempRect.Left(), rightBoundary) || NearEqual(tempRect.Right(), rightBoundary))) || + (realTextDirection_ == TextDirection::RTL && + (NearEqual(tempRect.Left(), leftBoundary) || NearEqual(tempRect.Right(), leftBoundary)))) { + result = maxPosition; + cursorPositionType_ = CursorPositionType::END; + return result; + } + + // Get wstring before cursor. + const char mark = ' '; + std::string tempBefore = GetEditingValue().GetSelectedText(TextSelection(0, currentCursorPosition)); + StringUtils::DeleteAllMark(tempBefore, mark); + const auto& textBeforeCursor = StringUtils::ToWstring(tempBefore); + // Get wstring after cursor. + std::string tempAfter = GetEditingValue().GetSelectedText( + TextSelection(currentCursorPosition, GetEditingValue().GetWideText().length())); + StringUtils::DeleteAllMark(tempAfter, mark); + const auto& textAfterCursor = StringUtils::ToWstring(tempAfter); + // Judge should or shouldn't adjust position. + bool needAdjustPosition = NeedAdjustPosition(textBeforeCursor); + if (!needAdjustPosition) { + cursorPositionForShow_ = currentCursorPosition; + return currentCursorPosition; + } + + // Adjust position when click boundary of RTL and LTR. + const auto& charBefore = textBeforeCursor.back(); + const auto& charAfter = textAfterCursor.front(); + bool isBeforeCharRtl = + !textBeforeCursor.empty() && (u_charDirection(charBefore) == UCharDirection::U_RIGHT_TO_LEFT || + u_charDirection(charBefore) == UCharDirection::U_RIGHT_TO_LEFT_ARABIC); + bool isAfterCharRtl = + !textAfterCursor.empty() && (u_charDirection(charAfter) == UCharDirection::U_RIGHT_TO_LEFT || + u_charDirection(charAfter) == UCharDirection::U_RIGHT_TO_LEFT_ARABIC); + bool adjustSuccess = true; + if (realTextDirection_ == TextDirection::RTL) { + adjustSuccess = + AdjustCursorAndSelectionForRtl(isBeforeCharRtl, isAfterCharRtl, textBeforeCursor, textAfterCursor, result); + } else if (realTextDirection_ == TextDirection::LTR) { + adjustSuccess = + AdjustCursorAndSelectionForLtr(isBeforeCharRtl, isAfterCharRtl, textBeforeCursor, textAfterCursor, result); + } + if (!adjustSuccess) { + return currentCursorPosition; + } + + if (isValueFromRemote_) { + isValueFromRemote_ = false; + return currentCursorPosition; + } + return result; +} + +bool FlutterRenderTextField::NeedAdjustPosition(const std::wstring& textBeforeCursor) +{ + bool needAdjustPosition = false; + if (!textBeforeCursor.empty()) { + UCharDirection firstCharDirection = u_charDirection(*(textBeforeCursor.rbegin())); + bool isFirstCharRtl = (firstCharDirection == UCharDirection::U_RIGHT_TO_LEFT || + firstCharDirection == UCharDirection::U_RIGHT_TO_LEFT_ARABIC); + for (auto iter = textBeforeCursor.rbegin(); iter != textBeforeCursor.rend(); ++iter) { + auto charDirection = u_charDirection(*iter); + bool isDirectionRtl = (charDirection == UCharDirection::U_RIGHT_TO_LEFT || + charDirection == UCharDirection::U_RIGHT_TO_LEFT_ARABIC); + if (isDirectionRtl != isFirstCharRtl) { + needAdjustPosition = true; + break; + } + } + } + return needAdjustPosition; +} + +bool FlutterRenderTextField::AdjustCursorAndSelectionForLtr(bool isBeforeCharRtl, bool isAfterCharRtl, + const std::wstring& textBeforeCursor, const std::wstring& textAfterCursor, int32_t& result) +{ + int32_t currentCursorPosition = result; + if (isBeforeCharRtl && !isAfterCharRtl) { + if (textBeforeCursor.empty()) { + return false; + } + int32_t count = 0; + UCharDirection charDirection; + for (auto iter = textBeforeCursor.rbegin(); iter != textBeforeCursor.rend(); ++iter) { + charDirection = u_charDirection(*iter); + if (charDirection != UCharDirection::U_RIGHT_TO_LEFT && + charDirection != UCharDirection::U_RIGHT_TO_LEFT_ARABIC) { + break; + } + count++; + } + result = currentCursorPosition - count; + cursorPositionType_ = CursorPositionType::BOUNDARY; + cursorPositionForShow_ = currentCursorPosition; + } else if (!isBeforeCharRtl && isAfterCharRtl) { + if (textAfterCursor.empty()) { + return false; + } + int32_t count = 0; + UCharDirection charDirection; + for (auto iter = textAfterCursor.begin(); iter != textAfterCursor.end(); ++iter) { + charDirection = u_charDirection(*iter); + if (charDirection != UCharDirection::U_RIGHT_TO_LEFT && + charDirection != UCharDirection::U_RIGHT_TO_LEFT_ARABIC) { + break; + } + count++; + } + result = currentCursorPosition + count; + cursorPositionType_ = CursorPositionType::BOUNDARY; + cursorPositionForShow_ = currentCursorPosition; + } + return true; +} + +bool FlutterRenderTextField::AdjustCursorAndSelectionForRtl(bool isBeforeCharRtl, bool isAfterCharRtl, + const std::wstring& textBeforeCursor, const std::wstring& textAfterCursor, int32_t& result) +{ + int32_t currentCursorPosition = result; + if (!isBeforeCharRtl && (isAfterCharRtl || textAfterCursor.empty())) { + if (textBeforeCursor.empty()) { + return false; + } + int32_t count = 0; + UCharDirection charDirection; + for (auto iter = textBeforeCursor.rbegin(); iter != textBeforeCursor.rend(); ++iter) { + charDirection = u_charDirection(*iter); + if (charDirection == UCharDirection::U_RIGHT_TO_LEFT || + charDirection == UCharDirection::U_RIGHT_TO_LEFT_ARABIC) { + break; + } + count++; + } + result = currentCursorPosition - count; + cursorPositionType_ = CursorPositionType::BOUNDARY; + cursorPositionForShow_ = currentCursorPosition; + } else if (isBeforeCharRtl && !isAfterCharRtl) { + if (textAfterCursor.empty()) { + return false; + } + int32_t count = 0; + UCharDirection charDirection; + for (auto iter = textAfterCursor.begin(); iter != textAfterCursor.end(); ++iter) { + charDirection = u_charDirection(*iter); + if (charDirection == UCharDirection::U_RIGHT_TO_LEFT || + charDirection == UCharDirection::U_RIGHT_TO_LEFT_ARABIC) { + break; + } + count++; + } + result = currentCursorPosition + count; + cursorPositionType_ = CursorPositionType::BOUNDARY; + cursorPositionForShow_ = currentCursorPosition; + } + return true; +} + +DirectionStatus FlutterRenderTextField::GetDirectionStatusOfPosition(int32_t position) const +{ + const char mark = ' '; + std::string tempBefore = GetEditingValue().GetSelectedText(TextSelection(0, position)); + StringUtils::DeleteAllMark(tempBefore, mark); + const auto& textBeforeCursor = StringUtils::ToWstring(tempBefore); + + std::string tempAfter = + GetEditingValue().GetSelectedText(TextSelection(position, GetEditingValue().GetWideText().length())); + StringUtils::DeleteAllMark(tempAfter, mark); + const auto& textAfterCursor = StringUtils::ToWstring(tempAfter); + + bool isBeforeCharRtl = false; + if (!textBeforeCursor.empty()) { + const auto& charBefore = textBeforeCursor.back(); + isBeforeCharRtl = (u_charDirection(charBefore) == UCharDirection::U_RIGHT_TO_LEFT || + u_charDirection(charBefore) == UCharDirection::U_RIGHT_TO_LEFT_ARABIC); + } + + bool isAfterCharRtl = false; + if (!textAfterCursor.empty()) { + const auto& charAfter = textAfterCursor.front(); + isAfterCharRtl = (u_charDirection(charAfter) == UCharDirection::U_RIGHT_TO_LEFT || + u_charDirection(charAfter) == UCharDirection::U_RIGHT_TO_LEFT_ARABIC); + } + return static_cast( + (static_cast(isBeforeCharRtl) << 1) | static_cast(isAfterCharRtl)); +} + +Offset FlutterRenderTextField::GetHandleOffset(int32_t extend) +{ + Rect result; + GetCaretRect(extend, result); + selectHeight_ = result.Bottom() - result.Top(); + Offset handleLocalOffset = Offset((result.Left() + result.Right()) / 2.0, result.Bottom()); + Offset handleOffset = handleLocalOffset + innerRect_.GetOffset() + GetOffsetToPage() + textOffsetForShowCaret_; + if (paragraph_) { + handleOffset += ComputeVerticalOffsetForCenter(innerRect_.Height(), paragraph_->GetHeight()); + } else if (placeholderParagraph_) { + handleOffset += ComputeVerticalOffsetForCenter(innerRect_.Height(), placeholderParagraph_->GetHeight()); + } else { + handleOffset += Offset(0.0, (innerRect_.Height() - PreferredLineHeight()) / 2.0); + } + return handleOffset; +} + +Size FlutterRenderTextField::ComputeDeflateSizeOfErrorAndCountText() const +{ + Size deflateSize; + if (errorParagraph_ && !errorIsInner_) { + deflateSize.SetHeight(errorParagraph_->GetHeight() + errorSpacing_); + } + if (maxLines_ == 1 && countParagraph_ && ShowCounter()) { + deflateSize.SetHeight(std::max(deflateSize.Height(), countParagraph_->GetHeight() + errorSpacing_)); + } + return deflateSize; +} + +void FlutterRenderTextField::PaintTextField( + const Offset& offset, RenderContext& context, SkCanvas* canvas, bool isMagnifier) +{ + canvas->save(); + canvas->translate(offset.GetX(), offset.GetY()); + Rect clipRect(Offset::Zero(), GetLayoutSize()); + canvas->clipRect( + SkRect::MakeLTRB(clipRect.Left(), clipRect.Top(), clipRect.Right(), clipRect.Bottom()), SkClipOp::kIntersect); + if (!isMagnifier) { + PaintDecoration(offset, canvas, GetPaintRect().GetSize(), context); + PaintOverlayForHoverAndPress(canvas); + PaintIcon(offset, context); + } + + canvas->save(); + // Restric painting rect to text area, excluding the decoration. + canvas->clipRect(SkRect::MakeLTRB(innerRect_.Left(), innerRect_.Top(), innerRect_.Right(), innerRect_.Bottom()), + SkClipOp::kIntersect); + PaintSelection(canvas); + // Paint cursor. + PaintCaret(*canvas, caretRect_); + PaintTextAndPlaceholder(canvas); + canvas->restore(); + + PaintErrorText(canvas); + canvas->restore(); + PaintCountText(canvas); + if (isMagnifier) { + PaintSelectCaret(canvas); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/text_field/flutter_render_text_field.h b/frameworks/core/components/text_field/flutter_render_text_field.h new file mode 100644 index 00000000..fe755d1f --- /dev/null +++ b/frameworks/core/components/text_field/flutter_render_text_field.h @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_FIELD_FLUTTER_RENDER_TEXT_FIELD_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_FIELD_FLUTTER_RENDER_TEXT_FIELD_H + +#include +#include + +#include "core/components/common/properties/decoration.h" +#include "core/components/text_field/render_text_field.h" +#include "core/pipeline/layers/clip_layer.h" + +namespace txt { +class FontCollection; +class Paragraph; +class ParagraphStyle; +class TextStyle; +} // namespace txt + +namespace flutter { +class Canvas; +} + +namespace OHOS::Ace { + +class Component; + +class FlutterRenderTextField final : public RenderTextField { + DECLARE_ACE_TYPE(FlutterRenderTextField, RenderTextField); + +public: + FlutterRenderTextField() = default; + ~FlutterRenderTextField() override = default; + + void Paint(RenderContext& context, const Offset& offset) override; + RenderLayer GetRenderLayer() override; + + const Rect& GetCaretRect() const + { + return caretRect_; + } + + const Rect& GetStartRect() const + { + return startCaretRect_; + } + + const SkBitmap& GetBitmap() const + { + return canvasCache_; + } + +protected: + int32_t GetCursorPositionForMoveUp() override; + int32_t GetCursorPositionForMoveDown() override; + int32_t GetCursorPositionForClick(const Offset& offset) override; + int32_t AdjustCursorAndSelection(int32_t currentCursorPosition) override; + DirectionStatus GetDirectionStatusOfPosition(int32_t position) const override; + Offset GetHandleOffset(int32_t extend) override; + Size ComputeDeflateSizeOfErrorAndCountText() const override; + +private: + std::unique_ptr CreateParagraphStyle(bool isErrorText = false); + std::unique_ptr CreateTextStyle(const TextStyle& style, bool isPlaceholder = false); + + double PreferredLineHeight() override; + void UpdateCaretProto(); + // Case of upstream affinity, which means the caret size should fit with the glyphs before [extent]. + bool ComputeOffsetForCaretUpstream(int32_t extent, CaretMetrics& result) const; + bool ComputeOffsetForCaretDownstream(int32_t extent, CaretMetrics& result) const; + bool ComputeOffsetForCaretCloserToClick(int32_t extent, CaretMetrics& result) const; + // Make an offset when no text exists. The position of caret depends on the [textAlign_] && [textDirection_]. + Offset MakeEmptyOffset() const; + Size Measure() override; + double MeasureParagraph( + const std::unique_ptr& paragraphStyle, std::unique_ptr& txtStyle); + Size ComputeLayoutSize(const Size& size, double decorationHeight); + + Rect GetInnerRect(const Decoration& decoration, const Rect& outer, double dipScale) const; + bool GetCaretRect(int32_t extent, Rect& caretRect, double caretHeightOffset = 0.0) const override; + // Compute the offset of caret and text. Must be called after paragraph built. + void ComputeOffsetAfterLayout(); + // Compute the offset to align text and icon to vertical center. + Offset ComputeVerticalOffsetForCenter(double outerHeight, double innerHeight) const; + void SetShaderIfNeeded(std::unique_ptr paragraphStyle, + std::unique_ptr txtStyle, double textAreaWidth); + sk_sp MakeGradientShader(double shadeWidth) const; + std::shared_ptr GetFontCollection(); + void ResetParagraphIfNeeded(); + void ComputeExtendHeight(double decorationHeight); + double GetBoundaryOfParagraph(bool isLeftBoundary) const; + bool AdjustCursorAndSelectionForLtr(bool isBeforeCharRtl, bool isAfterCharRtl, + const std::wstring& textBeforeCursor, const std::wstring& textAfterCursor, int32_t& result); + bool AdjustCursorAndSelectionForRtl(bool isBeforeCharRtl, bool isAfterCharRtl, + const std::wstring& textBeforeCursor, const std::wstring& textAfterCursor, int32_t& result); + bool NeedAdjustPosition(const std::wstring& textBeforeCursor); + + // Paint cursor at the extent position. When [affinity] supported, extends this function. + void PaintCaret(SkCanvas& canvas, const Rect& caretRect); + void PaintDecoration(const Offset& offset, SkCanvas* canvas, const Size& size, RenderContext& context); + void PaintSelectCaret(SkCanvas* canvas); + void PaintIcon(const Offset& offset, RenderContext& context); + void PaintSelection(SkCanvas* canvas) const; + void PaintTextAndPlaceholder(SkCanvas* canvas) const; + void PaintErrorText(SkCanvas* canvas) const; + void PaintCountText(SkCanvas* canvas) const; + void PaintOverlayForHoverAndPress(SkCanvas* canvas) const; + void PaintTextField(const Offset& offset, RenderContext& context, SkCanvas* canvas, bool isMagnifier = false); + + std::unique_ptr paragraph_; + std::unique_ptr errorParagraph_; + std::unique_ptr countParagraph_; + std::unique_ptr placeholderParagraph_; + // Used to estimate size. + std::unique_ptr template_; + + Rect caretRect_; + Rect startCaretRect_; + Size lastLayoutSize_; + double originInnerWidth_ = 0.0; + + RefPtr layer_; + SkBitmap canvasCache_{}; + std::unique_ptr magnifierCanvas_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_FIELD_FLUTTER_RENDER_TEXT_FIELD_H diff --git a/frameworks/core/components/text_field/render_text_field.cpp b/frameworks/core/components/text_field/render_text_field.cpp new file mode 100644 index 00000000..746f27f3 --- /dev/null +++ b/frameworks/core/components/text_field/render_text_field.cpp @@ -0,0 +1,1668 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/text_field/render_text_field.h" + +#include "base/i18n/localization.h" +#include "base/json/json_util.h" +#include "base/utils/string_utils.h" +#include "core/animation/curve_animation.h" +#include "core/common/clipboard/clipboard_proxy.h" +#include "core/common/font_manager.h" +#include "core/components/stack/stack_element.h" +#include "core/components/text_overlay/text_overlay_component.h" +#include "core/components/text_overlay/text_overlay_element.h" +#include "core/event/ace_event_helper.h" + +namespace OHOS::Ace { +namespace { + +constexpr uint32_t TWINKLING_INTERVAL_MS = 500; +// Tick count indicate how long should the naked character should be displayed while obscure_ == true. +constexpr uint32_t OBSCURE_SHOW_TICKS = 3; +constexpr double HANDLE_HOT_ZONE = 10.0; + +constexpr char16_t OBSCURING_CHARACTER = u'•'; +constexpr char16_t OBSCURING_CHARACTER_FOR_AR = u'*'; + +constexpr int32_t DEFAULT_SELECT_INDEX = 0; +constexpr int32_t NUMBER_CODE_START = 7; +constexpr int32_t NUMBER_CODE_END = 16; +constexpr int32_t LETTER_CODE_START = 29; +constexpr int32_t LETTER_CODE_END = 54; +constexpr int32_t LOWER_CASE_LETTER_DIFF = 68; +constexpr int32_t UPPER_CASE_LETTER_DIFF = 36; +constexpr int32_t LEFT_SHIFT_CODE = 59; +constexpr int32_t RIGHT_SHIFT_CODE = 60; +constexpr int32_t NUMBER_CODE_DIFF = 7; +constexpr int32_t SHOW_HANDLE_DURATION = 250; +constexpr double FIFTY_PERCENT = 0.5; + +constexpr Dimension OFFSET_FOCUS = 4.0_vp; +constexpr Dimension DEFLATE_RADIUS_FOCUS = 3.0_vp; + +} // namespace + +RenderTextField::RenderTextField() + : twinklingInterval(TWINKLING_INTERVAL_MS), controller_(AceType::MakeRefPtr()) +{} + +RenderTextField::~RenderTextField() +{ + if (controller_) { + controller_->Clear(); + controller_->RemoveObserver(WeakClaim(this)); + } + auto pipelineContext = context_.Upgrade(); + if (!pipelineContext) { + return; + } + pipelineContext->RemoveFontNode(AceType::WeakClaim(this)); + auto fontManager = pipelineContext->GetFontManager(); + if (fontManager) { + fontManager->UnRegisterCallback(AceType::WeakClaim(this)); + fontManager->RemoveVariationNode(WeakClaim(this)); + } +} + +void RenderTextField::Update(const RefPtr& component) +{ + const RefPtr textField = AceType::DynamicCast(component); + if (!textField) { + return; + } + + if (textField->IsTextLengthLimited()) { + maxLength_ = textField->GetMaxLength(); + } + + placeholder_ = textField->GetPlaceholder(); + inactivePlaceholderColor_ = textField->GetPlaceholderColor(); + focusPlaceholderColor_ = textField->GetFocusPlaceholderColor(); + focusBgColor_ = textField->GetFocusBgColor(); + focusTextColor_ = textField->GetFocusTextColor(); + selectedColor_ = textField->GetSelectedColor(); + pressColor_ = textField->GetPressColor(); + decoration_ = textField->GetDecoration(); + inactiveBgColor_ = textField->GetBgColor(); + if (decoration_ && (decoration_->GetImage() || decoration_->GetGradient().IsValid())) { + inactiveBgColor_ = Color::TRANSPARENT; + focusBgColor_ = Color::TRANSPARENT; + } + originBorder_ = textField->GetOriginBorder(); + style_ = textField->GetTextStyle(); + fontSize_ = style_.GetFontSize(); + errorTextStyle_ = textField->GetErrorTextStyle(); + errorSpacingInDimension_ = textField->GetErrorSpacing(); + errorIsInner_ = textField->GetErrorIsInner(); + errorBorderWidth_ = textField->GetErrorBorderWidth(); + errorBorderColor_ = textField->GetErrorBorderColor(); + needFade_ = textField->NeedFade(); + inactiveTextColor_ = style_.GetTextColor(); + maxLines_ = textField->GetTextMaxLines(); + onTextChangeEvent_ = AceAsyncEvent::Create(textField->GetOnTextChange(), context_); + onFinishInputEvent_ = AceAsyncEvent::Create(textField->GetOnFinishInput(), context_); + onTapEvent_ = AceAsyncEvent::Create(textField->GetOnTap(), context_); + onLongPressEvent_ = AceAsyncEvent::Create(textField->GetOnLongPress(), context_); + textAlign_ = textField->GetTextAlign(); + textDirection_ = textField->GetTextDirection(); + realTextDirection_ = textDirection_; + showCursor_ = textField->ShowCursor(); + obscure_ = textField->NeedObscure(); + enabled_ = textField->IsEnabled(); + widthReserved_ = textField->GetWidthReserved(); + blockRightShade_ = textField->GetBlockRightShade(); + isVisible_ = textField->IsVisible(); + if (textField->GetUpdateType() == UpdateType::ALL) { + resetToStart_ = textField->GetResetToStart(); + } + if (keyboard_ != textField->GetTextInputType()) { + if (keyboard_ == TextInputType::VISIBLE_PASSWORD) { + ClearEditingValue(); + } + keyboard_ = textField->GetTextInputType(); + CloseKeyboard(); + } + + action_ = textField->GetAction(); + actionLabel_ = textField->GetActionLabel(); + height_ = textField->GetHeight(); + if (textField->IsCursorColorSet()) { + cursorColorIsSet_ = true; + cursorColor_ = textField->GetCursorColor(); + } + cursorRadius_ = textField->GetCursorRadius(); + if (textField->GetTextEditController() && controller_ != textField->GetTextEditController()) { + if (controller_) { + controller_->RemoveObserver(WeakClaim(this)); + } + controller_ = textField->GetTextEditController(); + controller_->AddObserver(WeakClaim(this)); + } + if (controller_ && textField->IsValueUpdated()) { + controller_->SetText(textField->GetValue(), false); + } + extend_ = textField->IsExtend(); + showEllipsis_ = textField->ShowEllipsis(); + auto context = context_.Upgrade(); + if (!clipboard_ && context) { + clipboard_ = ClipboardProxy::GetInstance().GetClipboard(context->GetTaskExecutor()); + } + + if ((style_.IsAllowScale() || style_.GetFontSize().Unit() == DimensionUnit::FP) && context) { + context->AddFontNode(AceType::WeakClaim(this)); + } + + showCounter_ = textField->ShowCounter(); + countTextStyle_ = textField->GetCountTextStyle(); + overCountStyle_ = textField->GetOverCountStyle(); + countTextStyleOuter_ = textField->GetCountTextStyleOuter(); + overCountStyleOuter_ = textField->GetOverCountStyleOuter(); + + inputOptions_ = textField->GetInputOptions(); + onOptionsClick_ = textField->GetOnOptionsClick(); + onTranslate_ = textField->GetOnTranslate(); + onShare_ = textField->GetOnShare(); + onSearch_ = textField->GetOnSearch(); + + UpdateFormatters(); + UpdateFocusStyles(); + UpdateIcon(textField); + RegisterFontCallbacks(); + MarkNeedLayout(); + UpdateAccessibilityAttr(); +} + +void RenderTextField::OnPaintFinish() +{ + UpdateFocusAnimation(); + UpdateOverlay(); + InitAccessibilityEventListener(); + UpdateAccessibilityPosition(); +} + +void RenderTextField::PerformLayout() +{ + if (GetEditingValue().text.empty()) { + cursorPositionType_ = CursorPositionType::END; + } + + auto pipelineContext = GetContext().Upgrade(); + if ((style_.IsAllowScale() || style_.GetFontSize().Unit() == DimensionUnit::FP) && pipelineContext && + !NearEqual(fontScale_, pipelineContext->GetFontScale())) { + fontScale_ = pipelineContext->GetFontScale(); + style_.SetFontSize(fontSize_ * fontScale_); + } + + iconSize_ = NormalizeToPx(iconSizeInDimension_); + iconHotZoneSize_ = NormalizeToPx(iconHotZoneSizeInDimension_); + errorSpacing_ = NormalizeToPx(errorSpacingInDimension_); + if (!GetChildren().empty()) { + auto innerLayout = GetLayoutParam(); + innerLayout.SetMinSize(Size()); + const auto& child = GetChildren().front(); + child->Layout(innerLayout); + } + SetLayoutSize(GetLayoutParam().Constrain(Measure())); + UpdateFocusAnimation(); + + LayoutParam layoutParam = GetLayoutParam(); + layoutParam.SetMinSize(Size()); + if (iconImage_) { + iconImage_->Layout(layoutParam); + } + if (renderShowIcon_) { + renderShowIcon_->Layout(layoutParam); + } + if (renderHideIcon_) { + renderHideIcon_->Layout(layoutParam); + } + + if (needNotifyChangeEvent_ && onTextChangeEvent_) { + needNotifyChangeEvent_ = false; + auto jsonResult = JsonUtil::Create(true); + jsonResult->Put("text", GetEditingValue().text.c_str()); + jsonResult->Put("value", GetEditingValue().text.c_str()); + jsonResult->Put("lines", textLines_); + jsonResult->Put("height", textHeight_); + onTextChangeEvent_(std::string(R"("change",)").append(jsonResult->ToString())); + } + + HandleDeviceOrientationChange(); +} + +void RenderTextField::OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) +{ + if (!enabled_) { + return; + } + if (!clickRecognizer_) { + clickRecognizer_ = AceType::MakeRefPtr(); + auto weak = WeakClaim(this); + clickRecognizer_->SetOnClick([weak](const ClickInfo& info) { + auto client = weak.Upgrade(); + if (client) { + client->OnClick(info); + } + }); + } + result.emplace_back(clickRecognizer_); + + if (!longPressRecognizer_) { + longPressRecognizer_ = AceType::MakeRefPtr(context_); + auto weak = WeakClaim(this); + longPressRecognizer_->SetOnLongPress([weak = WeakClaim(this)](const LongPressInfo& info) { + auto client = weak.Upgrade(); + if (client) { + client->OnLongPress(info); + } + }); + } + longPressRecognizer_->SetTouchRestrict(touchRestrict); + result.emplace_back(longPressRecognizer_); + + if (!rawRecognizer_) { + rawRecognizer_ = AceType::MakeRefPtr(); + auto weak = WeakClaim(this); + rawRecognizer_->SetOnTouchDown([weak = WeakClaim(this)](const TouchEventInfo& info) { + auto textField = weak.Upgrade(); + if (textField) { + textField->StartPressAnimation(true); + } + }); + + rawRecognizer_->SetOnTouchUp([weak = WeakClaim(this)](const TouchEventInfo& info) { + auto textField = weak.Upgrade(); + if (textField) { + textField->StartPressAnimation(false); + } + }); + + rawRecognizer_->SetOnTouchCancel([weak = WeakClaim(this)](const TouchEventInfo& info) { + auto textField = weak.Upgrade(); + if (textField) { + textField->StartPressAnimation(false); + } + }); + } + rawRecognizer_->SetTouchRestrict(touchRestrict); + result.emplace_back(rawRecognizer_); +} + +void RenderTextField::StartPressAnimation(bool pressDown) +{ + if (!pressController_) { + pressController_ = AceType::MakeRefPtr(context_); + } + if (pressController_->IsRunning()) { + pressController_->Stop(); + } + pressController_->ClearInterpolators(); + RefPtr> animation = AceType::MakeRefPtr>(); + if (pressDown) { + CreateMouseAnimation(animation, GetEventEffectColor(), pressColor_); + } else { + CreateMouseAnimation(animation, GetEventEffectColor(), Color::TRANSPARENT); + } + pressController_->AddInterpolator(animation); + pressController_->SetDuration(PRESS_DURATION); + pressController_->SetFillMode(FillMode::FORWARDS); + pressController_->Forward(); +} + +void RenderTextField::OnClick(const ClickInfo& clickInfo) +{ + Point clickPoint = Point(clickInfo.GetLocalLocation().GetX(), clickInfo.GetLocalLocation().GetY()); + if (passwordIconRect_.IsInRegion(clickPoint)) { + obscure_ = !obscure_; + MarkNeedLayout(); + return; + } + isValueFromRemote_ = false; + auto globalPosition = clickInfo.GetGlobalLocation(); + auto globalOffset = GetGlobalOffset(); + + if (SearchAction(globalPosition, globalOffset)) { + return; + } + if (tapCallback_) { + if (!tapCallback_()) { + return; + } + } + if (onTapEvent_) { + onTapEvent_(); + } + + CursorMoveOnClick(globalPosition); + + ShowError("", false); + + UpdateStartSelection(DEFAULT_SELECT_INDEX, globalPosition, true, false); + ShowTextOverlay(globalPosition, true); + + auto context = GetContext().Upgrade(); + if (context) { + context->SetClickPosition(GetGlobalOffset() + Size(0, GetLayoutSize().Height())); + } +} + +bool RenderTextField::SearchAction(const Offset& globalPosition, const Offset& globalOffset) +{ + double widthReserved = NormalizeToPx(widthReserved_); + if (widthReserved > 0) { + if (textDirection_ == TextDirection::RTL) { + if ((globalPosition.GetX() - globalOffset.GetX()) < widthReserved) { + controller_->SetText(""); + return true; + } else if ((globalPosition.GetX() - globalOffset.GetX()) > (GetLayoutSize().Width() - iconHotZoneSize_) && + iconImage_ && action_ == TextInputAction::SEARCH) { + PerformAction(action_, true); + return true; + } + } else { + if ((globalPosition.GetX() - globalOffset.GetX()) >= (GetLayoutSize().Width() - widthReserved)) { + controller_->SetText(""); + return true; + } else if ((globalPosition.GetX() - globalOffset.GetX()) < iconHotZoneSize_ && iconImage_ && + action_ == TextInputAction::SEARCH) { + PerformAction(action_, true); + return true; + } + } + } + return false; +} + +void RenderTextField::OnLongPress(const LongPressInfo& longPressInfo) +{ + if (tapCallback_ && !isOverlayShowed_) { + if (!tapCallback_()) { + return; + } + } + + if (onLongPressEvent_) { + onLongPressEvent_(); + } + + ShowError("", false); + Offset longPressPosition = longPressInfo.GetGlobalLocation(); + + bool isTextEnd = + (static_cast(GetCursorPositionForClick(longPressPosition)) == GetEditingValue().GetWideText().length()); + bool singleHandle = isTextEnd || GetEditingValue().text.empty(); + bool isPassword = (keyboard_ == TextInputType::VISIBLE_PASSWORD); + UpdateStartSelection(DEFAULT_SELECT_INDEX, longPressPosition, singleHandle || isPassword, true); + ShowTextOverlay(longPressPosition, false); +} + +void RenderTextField::ShowTextOverlay(const Offset& showOffset, bool isSingleHandle) +{ + if (!isVisible_) { + return; + } + + if (SystemProperties::GetDeviceType() != DeviceType::PHONE) { + StartTwinkling(); + return; + } + + isSingleHandle_ = isSingleHandle; + + auto selStart = GetEditingValue().selection.GetStart(); + auto selEnd = GetEditingValue().selection.GetStart(); + + Offset startHandleOffset = GetHandleOffset(selStart); + Offset endHandleOffset = isSingleHandle ? startHandleOffset : GetHandleOffset(selEnd); + + if (isOverlayShowed_ && updateHandlePosition_) { + Rect caretStart; + bool visible = GetCaretRect(selStart, caretStart) ? IsVisible(caretStart + textOffsetForShowCaret_) : false; + OverlayShowOption option { .showMenu = isOverlayShowed_, + .showStartHandle = visible, + .showEndHandle = visible, + .isSingleHandle = isSingleHandle, + .updateOverlayType = isSingleHandle ? UpdateOverlayType::CLICK : UpdateOverlayType::LONG_PRESS, + .startHandleOffset = startHandleOffset, + .endHandleOffset = endHandleOffset }; + if (!isSingleHandle_ || startHandleOffset != endHandleOffset) { + isOverlayFocus_ = true; + } + updateHandlePosition_(option); + + // When the textOverlay is showed, restart the animation + if (!animator_) { + LOGE("Show textOverlay error, animator is nullptr"); + return; + } + if (!animator_->IsStopped()) { + animator_->Stop(); + } + animator_->Play(); + return; + } + + // Pop text overlay before push. + auto lastStack = GetLastStack(); + if (lastStack) { + lastStack->PopTextOverlay(true); + } + + // If there is no text, don't show overlay. + if (isSingleHandle && GetEditingValue().text.empty()) { + StartTwinkling(); + return; + } + StopTwinkling(); + + textOverlay_ = + AceType::MakeRefPtr(GetThemeManager(), context_.Upgrade()->GetAccessibilityManager()); + textOverlay_->SetWeakTextField(WeakClaim(this)); + textOverlay_->SetIsSingleHandle(isSingleHandle || (keyboard_ == TextInputType::VISIBLE_PASSWORD)); + textOverlay_->SetLineHeight(selectHeight_); + textOverlay_->SetClipRect( + innerRect_ + Size(HANDLE_HOT_ZONE, HANDLE_HOT_ZONE) + GetOffsetToPage() - Offset(HANDLE_HOT_ZONE / 2.0, 0.0)); + textOverlay_->SetTextDirection(textDirection_); + textOverlay_->SetRealTextDirection(existStrongDirectionLetter_ ? realTextDirection_ : TextDirection::LTR); + textOverlay_->SetIsPassword(keyboard_ == TextInputType::VISIBLE_PASSWORD); + textOverlay_->SetStartHandleOffset(startHandleOffset); + textOverlay_->SetEndHandleOffset(endHandleOffset); + textOverlay_->SetOptions(inputOptions_); + textOverlay_->SetOptionsClickMarker(onOptionsClick_); + textOverlay_->SetTranslateButtonMarker(onTranslate_); + textOverlay_->SetShareButtonMarker(onShare_); + textOverlay_->SetSearchButtonMarker(onSearch_); + textOverlay_->SetContext(context_); + + // Add the Animation + InitAnimation(); + + if (!isSingleHandle_ || startHandleOffset != endHandleOffset) { + isOverlayFocus_ = true; + } + RegisterCallbacksToOverlay(); +} + +void RenderTextField::InitAnimation() +{ + if (!textOverlay_) { + LOGE("InitAnimation error, textOverlay is nullptr"); + return; + } + + // Get the handleDiameter in theme, textoverlay is not nullptr + double initHandleDiameter = textOverlay_->GetHandleDiameter().Value(); + double initHandleDiameterInner = textOverlay_->GetHandleDiameterInner().Value(); + + // Add the animation for handleDiameter + auto diameterAnimation = AceType::MakeRefPtr>( + initHandleDiameter * FIFTY_PERCENT, initHandleDiameter, Curves::ELASTICS); + diameterAnimation->AddListener([text = AceType::WeakClaim(this)](double value) { + auto textField = text.Upgrade(); + if (textField && textField->updateHandleDiameter_) { + textField->updateHandleDiameter_(value); + } + }); + + // Add the animation for handleDiameterinner + auto diameterInnerAnimation = AceType::MakeRefPtr>( + initHandleDiameterInner * FIFTY_PERCENT, initHandleDiameterInner, Curves::ELASTICS); + diameterInnerAnimation->AddListener([text = AceType::WeakClaim(this)](double value) { + auto textField = text.Upgrade(); + if (textField && textField->updateHandleDiameterInner_) { + textField->updateHandleDiameterInner_(value); + } + }); + + // Add the animation + LOGD("Add animation to animator"); + animator_ = AceType::MakeRefPtr(context_); + animator_->AddInterpolator(diameterAnimation); + animator_->AddInterpolator(diameterInnerAnimation); + animator_->SetDuration(SHOW_HANDLE_DURATION); + animator_->Play(); +} + +void RenderTextField::RegisterCallbacksToOverlay() +{ + if (!textOverlay_) { + return; + } + textOverlay_->SetOnCut([weak = AceType::WeakClaim(this)] { + auto textfield = weak.Upgrade(); + if (textfield) { + textfield->HandleOnCut(); + } + }); + + textOverlay_->SetOnCopy([weak = AceType::WeakClaim(this)] { + auto textfield = weak.Upgrade(); + if (textfield) { + textfield->HandleOnCopy(); + } + }); + + textOverlay_->SetOnCopyAll( + [weak = AceType::WeakClaim(this)](const std::function& callback) { + auto textfield = weak.Upgrade(); + if (textfield) { + textfield->HandleOnCopyAll(callback); + } + }); + + textOverlay_->SetOnStartHandleMove( + [weak = AceType::WeakClaim(this)](int32_t end, const Offset& startHandleOffset, + const std::function& startCallback, bool isSingleHandle) { + auto textfield = weak.Upgrade(); + if (textfield) { + textfield->HandleOnStartHandleMove(end, startHandleOffset, startCallback, isSingleHandle); + } + }); + + textOverlay_->SetOnEndHandleMove([weak = AceType::WeakClaim(this)](int32_t start, const Offset& endHandleOffset, + const std::function& endCallback) { + auto textfield = weak.Upgrade(); + if (textfield) { + textfield->HandleOnEndHandleMove(start, endHandleOffset, endCallback); + } + }); + + auto callback = [weakTextField = WeakClaim(this)](const std::string& data) { + auto textfield = weakTextField.Upgrade(); + if (textfield) { + auto textOverlay = textfield->textOverlay_; + if (textOverlay && !data.empty()) { + textOverlay->SetOnPaste([weakTextField] { + auto textfield = weakTextField.Upgrade(); + if (textfield) { + textfield->HandleOnPaste(); + } + }); + } + textfield->PushTextOverlayToStack(); + textfield->UpdateOverlay(); + } + }; + if (clipboard_) { + clipboard_->GetData(callback); + } + + auto onFocusChange = [weak = WeakClaim(this)](bool isFocus, bool needCloseKeyboard) { + auto textField = weak.Upgrade(); + if (textField) { + textField->OnOverlayFocusChange(isFocus, needCloseKeyboard); + } + }; + textOverlay_->SetOnFocusChange(onFocusChange); +} + +void RenderTextField::PushTextOverlayToStack() +{ + if (!textOverlay_) { + LOGE("TextOverlay is null"); + return; + } + hasTextOverlayPushed_ = true; + auto lastStack = GetLastStack(); + if (!lastStack) { + LOGE("LastStack is null"); + return; + } + isOverlayShowed_ = true; + lastStack->PushComponent(textOverlay_, true, false); + stackElement_ = WeakClaim(RawPtr(lastStack)); + MarkNeedRender(); +} + +bool RenderTextField::RequestKeyboard(bool isFocusViewChanged, bool needStartTwinkling) +{ + if (!enabled_) { + LOGD("TextField is not enabled."); + return false; + } + + if (!HasConnection()) { + AttachIme(); + if (!HasConnection()) { + LOGE("Get TextInput connection error"); + return false; + } + connection_->SetEditingState(GetEditingValue(), GetInstanceId()); + } + connection_->Show(isFocusViewChanged, GetInstanceId()); + if (keyboard_ != TextInputType::MULTILINE) { + resetToStart_ = false; + MarkNeedLayout(); + } + if (needStartTwinkling) { + StartTwinkling(); + } + return true; +} + +bool RenderTextField::CloseKeyboard(bool forceClose) +{ + if (!isOverlayShowed_ || (isOverlayShowed_ && !isOverlayFocus_) || forceClose) { + StopTwinkling(); + if (HasConnection()) { + connection_->Close(GetInstanceId()); + connection_ = nullptr; + } + + if (onKeyboardClose_) { + onKeyboardClose_(forceClose); + onKeyboardClose_ = nullptr; + UpdateSelection(GetEditingValue().selection.GetEnd()); + MarkNeedLayout(); + } + + if (keyboard_ != TextInputType::MULTILINE) { + resetToStart_ = true; + MarkNeedLayout(); + } + return true; + } + return false; +} + +void RenderTextField::AttachIme() +{ + auto context = context_.Upgrade(); + if (!context) { + LOGW("No context exists, failed to request keyboard."); + return; + } + + TextInputConfiguration config; + config.type = keyboard_; + config.action = action_; + config.actionLabel = actionLabel_; + config.obscureText = obscure_; + LOGD("Request keyboard configuration: type=%{private}d action=%{private}d actionLabel=%{private}s " + "obscureText=%{private}d", + keyboard_, action_, actionLabel_.c_str(), obscure_); + connection_ = + TextInputProxy::GetInstance().Attach(WeakClaim(this), config, context->GetTaskExecutor(), GetInstanceId()); +} + +void RenderTextField::StartTwinkling() +{ + // Ignore the result because all ops are called on this same thread (ACE UI). + // The only reason failed is that the task has finished. + cursorTwinklingTask_.Cancel(); + + // Show cursor right now. + cursorVisibility_ = true; + // Does not matter call more than one times. + MarkNeedRender(); + + ScheduleCursorTwinkling(); +} + +void RenderTextField::StopTwinkling() +{ + obscureTickPendings_ = 0; + cursorTwinklingTask_.Cancel(); + + if (cursorVisibility_) { + // Repaint only if cursor is visible for now. + cursorVisibility_ = false; + MarkNeedRender(); + } +} + +const TextEditingValue& RenderTextField::GetEditingValue() const +{ + return controller_->GetValue(); +} + +void RenderTextField::SetEditingValue(TextEditingValue&& newValue, bool needFireChangeEvent) +{ + if (newValue.text != GetEditingValue().text && needFireChangeEvent) { + needNotifyChangeEvent_ = true; + } + ChangeCounterStyle(newValue); + controller_->SetValue(newValue, needFireChangeEvent); + UpdateAccessibilityAttr(); +} + +void RenderTextField::ClearEditingValue() +{ + TextEditingValue emptyValue; + SetEditingValue(std::move(emptyValue)); +} + +std::u16string RenderTextField::GetTextForDisplay(const std::string& text) const +{ + std::u16string txtContent = StringUtils::Str8ToStr16(text); + auto len = txtContent.length(); + if (!obscure_ || len == 0 || (obscureTickPendings_ > 0 && len == 1)) { + return txtContent; + } + + std::u16string obscured; + if (Localization::GetInstance()->GetLanguage() == "ar") { // ar is the abbreviation of Arabic. + obscured = std::u16string(len, OBSCURING_CHARACTER_FOR_AR); + } else { + obscured = std::u16string(len, OBSCURING_CHARACTER); + } + int32_t posBeforeCursor = GetEditingValue().selection.extentOffset - 1; + if (obscureTickPendings_ > 0 && posBeforeCursor >= 0 && static_cast(posBeforeCursor) < obscured.length()) { + // Let the last commit character naked. + obscured[posBeforeCursor] = txtContent[posBeforeCursor]; + } + + return obscured; +} + +void RenderTextField::UpdateFormatters() +{ + textInputFormatters_.clear(); + + if (maxLength_ < std::numeric_limits::max()) { + textInputFormatters_.emplace_back(std::make_unique(maxLength_)); + } + + if (maxLines_ == 1) { + textInputFormatters_.emplace_back(std::make_unique()); + } + + switch (keyboard_) { + case TextInputType::NUMBER: { + textInputFormatters_.emplace_back(std::make_unique()); + break; + } + case TextInputType::PHONE: { + textInputFormatters_.emplace_back(std::make_unique()); + break; + } + case TextInputType::EMAIL_ADDRESS: { + textInputFormatters_.emplace_back(std::make_unique()); + break; + } + case TextInputType::URL: { + textInputFormatters_.emplace_back(std::make_unique()); + break; + } + default: { + // No need limit. + } + } + + TextEditingValue temp = GetEditingValue(); + for (const auto& formatter : textInputFormatters_) { + if (formatter) { + formatter->Format(GetEditingValue(), temp); + } + } + SetEditingValue(std::move(temp)); +} + +void RenderTextField::UpdateEditingValue(const std::shared_ptr& value, bool needFireChangeEvent) +{ + if (!value) { + LOGE("the value is nullptr"); + return; + } + if (cursorPositionType_ != CursorPositionType::END) { + cursorPositionType_ = CursorPositionType::NORMAL; + isValueFromRemote_ = true; + } + + lastKnownRemoteEditingValue_ = value; + TextEditingValue temp = *lastKnownRemoteEditingValue_; + ChangeCounterStyle(temp); + for (const auto& formatter : textInputFormatters_) { + // GetEditingValue() is the old value, and lastKnownRemoteEditingValue_ is the newer. + if (formatter) { + formatter->Format(GetEditingValue(), temp); + } + } + + if (obscure_ && (temp.text.length() == GetEditingValue().text.length() + 1)) { + // Reset pending. + obscureTickPendings_ = OBSCURE_SHOW_TICKS; + } + + if (temp.text != GetEditingValue().text && needFireChangeEvent) { + needNotifyChangeEvent_ = true; + } + + auto editingText = GetEditingValue().text; + SetEditingValue(std::move(temp), needFireChangeEvent); + UpdateRemoteEditingIfNeeded(needFireChangeEvent); + + MarkNeedLayout(); + + // If input or delete text when overlay is showing, pop overlay from stack. + if (lastKnownRemoteEditingValue_ && (lastKnownRemoteEditingValue_->text != editingText)) { + if (onValueChange_) { + onValueChange_(); + } + } +} + +void RenderTextField::PerformAction(TextInputAction action, bool forceCloseKeyboard) +{ + LOGD("PerformAction %{public}d", static_cast(action)); + if (action == TextInputAction::NEXT && moveNextFocusEvent_) { + moveNextFocusEvent_(); + } else { + CloseKeyboard(forceCloseKeyboard); + } + if (onFinishInputEvent_) { + auto jsonResult = JsonUtil::Create(true); + jsonResult->Put("value", static_cast(action)); + onFinishInputEvent_(std::string(R"("enterkeyclick",)").append(jsonResult->ToString())); + } + if (onSubmitEvent_ && controller_) { + onSubmitEvent_(controller_->GetValue().text); + } +} + +Size RenderTextField::Measure() +{ + return Size(); +} + +void RenderTextField::ScheduleCursorTwinkling() +{ + auto context = context_.Upgrade(); + if (!context) { + LOGW("No context exists."); + return; + } + + if (!context->GetTaskExecutor()) { + LOGW("context has no task executor."); + return; + } + + auto weak = WeakClaim(this); + cursorTwinklingTask_.Reset([weak] { + auto client = weak.Upgrade(); + if (client) { + client->OnCursorTwinkling(); + } + }); + auto taskExecutor = context->GetTaskExecutor(); + if (taskExecutor) { + taskExecutor->PostDelayedTask(cursorTwinklingTask_, TaskExecutor::TaskType::UI, twinklingInterval); + } else { + LOGE("the task executor is nullptr"); + } +} + +void RenderTextField::OnCursorTwinkling() +{ + // When glyph changes from visible to invisible, layout is needed. + obscureTickPendings_ == 1 ? MarkNeedLayout() : MarkNeedRender(); + if (obscureTickPendings_ > 0) { + --obscureTickPendings_; + } + cursorVisibility_ = !cursorVisibility_; + ScheduleCursorTwinkling(); +} + +bool RenderTextField::OnKeyEvent(const KeyEvent& event) +{ + if (!enabled_) { + return false; + } + + // If back or escape is clicked and overlay is showing, pop overlay firstly. + if (event.action == KeyAction::UP && + (event.code == KeyCode::KEYBOARD_BACK || event.code == KeyCode::KEYBOARD_ESCAPE)) { + if (isOverlayShowed_) { + auto stack = stackElement_.Upgrade(); + if (stack) { + stack->PopTextOverlay(true); + } + return false; + } + } + + if (event.action == KeyAction::DOWN) { + cursorPositionType_ = CursorPositionType::NONE; + bool moved = true; + if (event.code == KeyCode::TV_CONTROL_LEFT) { + CursorMoveLeft(); + } else if (event.code == KeyCode::TV_CONTROL_RIGHT) { + CursorMoveRight(); + } else if (event.code == KeyCode::TV_CONTROL_UP) { + CursorMoveUp(); + } else if (event.code == KeyCode::TV_CONTROL_DOWN) { + CursorMoveDown(); + } else { + moved = HandleKeyEvent(event); + } + if (moved) { + // Obscure all glyphs immediately after cursor moved. + obscureTickPendings_ = 0; + } + return moved; + } + + return false; +} + +void RenderTextField::UpdateFocusStyles() +{ + if (hasFocus_) { + style_.SetTextColor(focusTextColor_); + placeholderColor_ = focusPlaceholderColor_; + if (decoration_) { + decoration_->SetBackgroundColor(focusBgColor_); + } + } else { + style_.SetTextColor(inactiveTextColor_); + placeholderColor_ = inactivePlaceholderColor_; + if (decoration_) { + decoration_->SetBackgroundColor(inactiveBgColor_); + } + } +} + +void RenderTextField::UpdateFocusAnimation() +{ + if (hasFocus_) { + auto context = context_.Upgrade(); + if (!context) { + return; + } + Offset offset; + Size size; + Radius deflateRadius; + if (SystemProperties::GetDeviceType() == DeviceType::PHONE) { + double focusOffset = NormalizeToPx(OFFSET_FOCUS); + offset = Offset(focusOffset, focusOffset); + size = Size(focusOffset * 2.0, focusOffset * 2.0); + deflateRadius = Radius(DEFLATE_RADIUS_FOCUS, DEFLATE_RADIUS_FOCUS); + } + RRect rrect = RRect::MakeRect( + Rect(GetPosition() + offset, GetLayoutSize() - ComputeDeflateSizeOfErrorAndCountText() - size)); + if (decoration_) { + const auto& border = decoration_->GetBorder(); + rrect.SetCorner({ border.TopLeftRadius() - deflateRadius, border.TopRightRadius() - deflateRadius, + border.BottomRightRadius() - deflateRadius, border.BottomLeftRadius() - deflateRadius }); + } + context->ShowFocusAnimation(rrect, focusBgColor_, GetGlobalOffset() + offset); + } +} + +void RenderTextField::UpdateIcon(const RefPtr& textField) +{ + if (!textField) { + return; + } + iconSizeInDimension_ = textField->GetIconSize(); + iconHotZoneSizeInDimension_ = textField->GetIconHotZoneSize(); + UpdatePasswordIcon(textField); + + double widthReserved = NormalizeToPx(widthReserved_); + if (textField->GetIconImage() == iconSrc_ && widthReserved <= 0.0) { + return; + } + iconSrc_ = textField->GetIconImage(); + if (!iconSrc_.empty() || widthReserved > 0.0) { + RefPtr imageComponent; + if (iconSrc_.empty() && widthReserved > 0.0) { + imageComponent = AceType::MakeRefPtr(InternalResource::ResourceId::SEARCH_SVG); + } else { + imageComponent = AceType::MakeRefPtr(iconSrc_); + } + imageComponent->SetWidth(textField->GetIconSize()); + imageComponent->SetHeight(textField->GetIconSize()); + if (textDirection_ == TextDirection::RTL) { + imageComponent->SetMatchTextDirection(true); + imageComponent->SetTextDirection(TextDirection::RTL); + } + + iconImage_ = AceType::DynamicCast(imageComponent->CreateRenderNode()); + if (!iconImage_) { + return; + } + iconImage_->Attach(GetContext()); + iconImage_->Update(imageComponent); + AddChild(iconImage_); + } +} + +void RenderTextField::UpdatePasswordIcon(const RefPtr& textField) +{ + if (SystemProperties::GetDeviceType() != DeviceType::PHONE) { + return; + } + showIconSrc_ = textField->GetShowIconImage(); + hideIconSrc_ = textField->GetHideIconImage(); + + // update show icon. + RefPtr showImage; + if (showIconSrc_.empty()) { + showImage = AceType::MakeRefPtr(InternalResource::ResourceId::SHOW_PASSWORD_SVG); + } else { + showImage = AceType::MakeRefPtr(showIconSrc_); + } + showImage->SetWidth(textField->GetIconSize()); + showImage->SetHeight(textField->GetIconSize()); + + renderShowIcon_ = AceType::DynamicCast(showImage->CreateRenderNode()); + if (!renderShowIcon_) { + return; + } + renderShowIcon_->Attach(GetContext()); + renderShowIcon_->Update(showImage); + AddChild(renderShowIcon_); + + // update hide icon. + RefPtr hideImage; + if (hideIconSrc_.empty()) { + hideImage = AceType::MakeRefPtr(InternalResource::ResourceId::HIDE_PASSWORD_SVG); + } else { + hideImage = AceType::MakeRefPtr(hideIconSrc_); + } + hideImage->SetWidth(textField->GetIconSize()); + hideImage->SetHeight(textField->GetIconSize()); + + renderHideIcon_ = AceType::DynamicCast(hideImage->CreateRenderNode()); + if (!renderHideIcon_) { + return; + } + renderHideIcon_->Attach(GetContext()); + renderHideIcon_->Update(hideImage); + AddChild(renderHideIcon_); +} + +void RenderTextField::UpdateOverlay() +{ + // When textfield PerformLayout, update overlay. + if (isOverlayShowed_ && updateHandlePosition_) { + auto selStart = GetEditingValue().selection.GetStart(); + auto selEnd = GetEditingValue().selection.GetEnd(); + Rect caretStart; + Rect caretEnd; + bool startHandleVisible = + GetCaretRect(selStart, caretStart) ? IsVisible(caretStart + textOffsetForShowCaret_) : false; + bool endHandleVisible = (selStart == selEnd) ? startHandleVisible + : (GetCaretRect(selEnd, caretEnd) ? IsVisible(caretEnd + textOffsetForShowCaret_) : false); + + OverlayShowOption option { .showMenu = isOverlayShowed_, + .showStartHandle = startHandleVisible, + .showEndHandle = endHandleVisible, + .isSingleHandle = isSingleHandle_, + .updateOverlayType = UpdateOverlayType::SCROLL, + .startHandleOffset = GetPositionForExtend(selStart, isSingleHandle_), + .endHandleOffset = GetPositionForExtend(selEnd, isSingleHandle_) }; + updateHandlePosition_(option); + if (onClipRectChanged_) { + onClipRectChanged_(innerRect_ + Size(HANDLE_HOT_ZONE, HANDLE_HOT_ZONE) + GetOffsetToPage() - + Offset(HANDLE_HOT_ZONE / 2.0, 0.0)); + } + } +} + +void RenderTextField::RegisterFontCallbacks() +{ + // Register callback for fonts. + auto pipelineContext = context_.Upgrade(); + if (!pipelineContext) { + return; + } + auto callback = [textfield = AceType::WeakClaim(this)] { + auto refPtr = textfield.Upgrade(); + if (refPtr) { + refPtr->isCallbackCalled_ = true; + refPtr->MarkNeedLayout(); + } + }; + auto fontManager = pipelineContext->GetFontManager(); + if (fontManager) { + for (const auto& familyName : style_.GetFontFamilies()) { + fontManager->RegisterCallback(AceType::WeakClaim(this), familyName, callback); + } + fontManager->AddVariationNode(WeakClaim(this)); + } +} + +void RenderTextField::OnStatusChanged(OHOS::Ace::RenderStatus renderStatus) +{ + hasFocus_ = renderStatus == RenderStatus::FOCUS; + UpdateFocusStyles(); + MarkNeedLayout(); + + if (!hasFocus_) { + auto context = context_.Upgrade(); + if (!context) { + return; + } + // Don't call cancel focus animation when next frame comes because then focus is switched, next node will + // show focus immediately, we shouldn't cancel focus animation that time. + context->CancelFocusAnimation(); + } +} + +void RenderTextField::OnValueChanged(bool needFireChangeEvent) +{ + TextEditingValue temp = GetEditingValue(); + for (const auto& formatter : textInputFormatters_) { + if (formatter) { + formatter->Format(GetEditingValue(), temp); + } + } + if (cursorPositionType_ == CursorPositionType::NORMAL && temp.selection.GetStart() == temp.selection.GetEnd()) { + temp.selection.Update(AdjustCursorAndSelection(temp.selection.GetEnd())); + } + SetEditingValue(std::move(temp), needFireChangeEvent); + UpdateRemoteEditingIfNeeded(needFireChangeEvent); + MarkNeedLayout(); +} + +void RenderTextField::CursorMoveLeft(const CursorMoveSkip skip) +{ + if (skip != CursorMoveSkip::CHARACTER) { + // Not support yet. + LOGE("move skip not support character yet"); + return; + } + if (GetEditingValue().selection.extentOffset > 0) { + isValueFromRemote_ = false; + auto value = GetEditingValue(); + value.MoveLeft(); + SetEditingValue(std::move(value)); + } +} + +void RenderTextField::CursorMoveRight(const CursorMoveSkip skip) +{ + if (skip != CursorMoveSkip::CHARACTER) { + // Not support yet. + LOGE("move skip not support character yet"); + return; + } + + auto text = GetTextForDisplay(GetEditingValue().text); + if (text.length() > static_cast(GetEditingValue().selection.extentOffset)) { + isValueFromRemote_ = false; + auto value = GetEditingValue(); + value.MoveRight(); + SetEditingValue(std::move(value)); + } +} + +void RenderTextField::CursorMoveUp() +{ + if (keyboard_ != TextInputType::MULTILINE) { + return; + } + isValueFromRemote_ = false; + auto value = GetEditingValue(); + value.MoveToPosition(GetCursorPositionForMoveUp()); + SetEditingValue(std::move(value)); +} + +void RenderTextField::CursorMoveDown() +{ + if (keyboard_ != TextInputType::MULTILINE) { + return; + } + isValueFromRemote_ = false; + auto value = GetEditingValue(); + value.MoveToPosition(GetCursorPositionForMoveDown()); + SetEditingValue(std::move(value)); +} + +void RenderTextField::CursorMoveOnClick(const Offset& offset) +{ + auto value = GetEditingValue(); + auto position = GetCursorPositionForClick(offset); + value.MoveToPosition(position); + SetEditingValue(std::move(value)); + + if (!GetEditingValue().text.empty() && position == GetEditingValue().selection.GetEnd()) { + OnValueChanged(); + } +} + +void RenderTextField::UpdateSelection(int32_t both) +{ + UpdateSelection(both, both); +} + +void RenderTextField::UpdateSelection(int32_t start, int32_t end) +{ + auto value = GetEditingValue(); + value.UpdateSelection(start, end); + SetEditingValue(std::move(value)); + auto refPtr = accessibilityNode_.Upgrade(); + if (refPtr) { + refPtr->SetTextSelectionStart(start); + refPtr->SetTextSelectionEnd(end); + } +} + +void RenderTextField::UpdateRemoteEditing(bool needFireChangeEvent) +{ + if (!HasConnection()) { + return; + } + connection_->SetEditingState(GetEditingValue(), GetInstanceId(), needFireChangeEvent); +} + +void RenderTextField::UpdateRemoteEditingIfNeeded(bool needFireChangeEvent) +{ + if (!enabled_) { + return; + } + if (!lastKnownRemoteEditingValue_ || GetEditingValue() != *lastKnownRemoteEditingValue_) { + lastKnownRemoteEditingValue_ = std::make_shared(GetEditingValue()); + UpdateRemoteEditing(needFireChangeEvent); + } +} + +void RenderTextField::ShowError(const std::string& errorText, bool resetToStart) +{ + errorText_ = errorText; + resetToStart_ = resetToStart; + if (!errorText.empty()) { + auto refPtr = accessibilityNode_.Upgrade(); + if (refPtr) { + refPtr->SetErrorText(errorText); + } + } + + if (!errorText.empty()) { + ChangeBorderToErrorStyle(); + } else { + if (decoration_) { + decoration_->SetBorder(originBorder_); + } + } + MarkNeedLayout(); +} + +void RenderTextField::SetOnValueChange(const std::function& onValueChange) +{ + onValueChange_ = onValueChange; +} + +const std::function& RenderTextField::GetOnValueChange() const +{ + return onValueChange_; +} + +void RenderTextField::SetOnKeyboardClose(const std::function& onKeyboardClose) +{ + onKeyboardClose_ = onKeyboardClose; +} + +void RenderTextField::SetOnClipRectChanged(const std::function& onClipRectChanged) +{ + onClipRectChanged_ = onClipRectChanged; +} + +void RenderTextField::SetUpdateHandlePosition(const std::function& updateHandlePosition) +{ + updateHandlePosition_ = updateHandlePosition; +} + +void RenderTextField::SetUpdateHandleDiameter(const std::function& updateHandleDiameter) +{ + updateHandleDiameter_ = updateHandleDiameter; +} + +void RenderTextField::SetUpdateHandleDiameterInner(const std::function& updateHandleDiameterInner) +{ + updateHandleDiameterInner_ = updateHandleDiameterInner; +} + +void RenderTextField::SetIsOverlayShowed(bool isOverlayShowed, bool needStartTwinkling) +{ + isOverlayShowed_ = isOverlayShowed; + // When pop overlay, reset selection and clear selected style. + if (GetEditingValue().selection.GetStart() != GetEditingValue().selection.GetEnd()) { + UpdateSelection(GetEditingValue().selection.GetEnd()); + } + if (!isOverlayShowed_ && hasFocus_ && needStartTwinkling) { + StartTwinkling(); + } +} + +void RenderTextField::HandleOnCut() +{ + if (!clipboard_) { + return; + } + clipboard_->SetData(GetEditingValue().GetSelectedText()); + auto value = GetEditingValue(); + value.text = value.GetBeforeSelection() + value.GetAfterSelection(); + value.UpdateSelection(GetEditingValue().selection.GetStart()); + SetEditingValue(std::move(value)); +} + +void RenderTextField::HandleOnCopy() +{ + if (!clipboard_) { + return; + } + clipboard_->SetData(GetEditingValue().GetSelectedText()); + UpdateSelection(GetEditingValue().selection.GetEnd()); +} + +void RenderTextField::HandleOnPaste() +{ + if (!clipboard_) { + return; + } + + auto textSelection = GetEditingValue().selection; + auto pasteCallback = [weak = WeakClaim(this), textSelection](const std::string& data) { + auto textfield = weak.Upgrade(); + if (textfield) { + auto value = textfield->GetEditingValue(); + value.selection = textSelection; + value.text = value.GetBeforeSelection() + data + value.GetAfterSelection(); + value.UpdateSelection(textSelection.GetStart() + StringUtils::Str8ToStr16(data).length()); + textfield->SetEditingValue(std::move(value)); + } + }; + clipboard_->GetData(pasteCallback); +} + +void RenderTextField::HandleOnCopyAll(const std::function& callback) +{ + isSingleHandle_ = false; + cursorPositionType_ = CursorPositionType::NORMAL; + auto textSize = GetEditingValue().GetWideText().length(); + if (textSize == 0) { + isSingleHandle_ = true; + } + UpdateSelection(0, textSize); + if (callback) { + callback(GetPositionForExtend(0, isSingleHandle_), + GetPositionForExtend(GetEditingValue().GetWideText().length(), isSingleHandle_)); + } +} + +void RenderTextField::HandleOnStartHandleMove(int32_t end, const Offset& startHandleOffset, + const std::function& startCallback, bool isSingleHandle) +{ + Offset realOffset = startHandleOffset; + if (startCallback) { + UpdateStartSelection(end, realOffset, isSingleHandle, false); + startCallback(GetHandleOffset(GetEditingValue().selection.GetStart())); + } +} + +void RenderTextField::HandleOnEndHandleMove( + int32_t start, const Offset& endHandleOffset, const std::function& endCallback) +{ + Offset realOffset = endHandleOffset; + if (endCallback) { + UpdateEndSelection(start, realOffset); + endCallback(GetHandleOffset(GetEditingValue().selection.GetEnd())); + } +} + +RefPtr RenderTextField::GetLastStack() const +{ + auto context = context_.Upgrade(); + if (!context) { + LOGE("Context is nullptr"); + return nullptr; + } + return context->GetLastStack(); +} + +bool RenderTextField::HandleKeyEvent(const KeyEvent& event) +{ + std::string appendElement; + if (event.action == KeyAction::DOWN) { + auto codeValue = static_cast(event.code); + if (codeValue >= NUMBER_CODE_START && codeValue <= NUMBER_CODE_END) { + appendElement = std::to_string(codeValue - NUMBER_CODE_DIFF); + } else if (codeValue >= LETTER_CODE_START && codeValue <= LETTER_CODE_END) { + int32_t letterCode = + isShiftDown_ ? (codeValue + UPPER_CASE_LETTER_DIFF) : (codeValue + LOWER_CASE_LETTER_DIFF); + appendElement = static_cast(letterCode); + isShiftDown_ = false; + } else if (codeValue == LEFT_SHIFT_CODE || codeValue == RIGHT_SHIFT_CODE) { + isShiftDown_ = true; + } + } + if (appendElement.empty()) { + return false; + } + auto value = GetEditingValue(); + value.text = value.GetBeforeSelection() + appendElement + value.GetAfterSelection(); + value.UpdateSelection( + std::max(GetEditingValue().selection.GetEnd(), 0) + StringUtils::Str8ToStr16(appendElement).length()); + SetEditingValue(std::move(value)); + return true; +} + +void RenderTextField::UpdateAccessibilityAttr() +{ + auto refPtr = accessibilityNode_.Upgrade(); + if (!refPtr) { + LOGW("RenderTextField accessibilityNode is null."); + return; + } + + refPtr->SetHintText(placeholder_); + refPtr->SetMaxTextLength(maxLength_); + refPtr->SetEditable(enabled_); + refPtr->SetClickableState(true); + refPtr->SetLongClickableState(true); + if (maxLines_ > 1) { + refPtr->SetIsMultiLine(true); + } + if (controller_) { + refPtr->SetText(controller_->GetText()); + } + switch (keyboard_) { + case TextInputType::TEXT: + refPtr->SetTextInputType(AceTextCategory::INPUT_TYPE_TEXT); + break; + case TextInputType::NUMBER: + refPtr->SetTextInputType(AceTextCategory::INPUT_TYPE_NUMBER); + break; + case TextInputType::DATETIME: + refPtr->SetTextInputType(AceTextCategory::INPUT_TYPE_DATE); + break; + case TextInputType::EMAIL_ADDRESS: + refPtr->SetTextInputType(AceTextCategory::INPUT_TYPE_EMAIL); + break; + case TextInputType::VISIBLE_PASSWORD: + refPtr->SetTextInputType(AceTextCategory::INPUT_TYPE_PASSWORD); + break; + default: + break; + } +} + +void RenderTextField::InitAccessibilityEventListener() +{ + const auto& accessibilityNode = GetAccessibilityNode().Upgrade(); + if (!accessibilityNode) { + return; + } + accessibilityNode->AddSupportAction(AceAction::ACTION_CLICK); + accessibilityNode->SetActionClickImpl([weakPtr = WeakClaim(this)]() { + const auto& textField = weakPtr.Upgrade(); + if (textField) { + textField->OnClick(ClickInfo(0)); + } + }); + + accessibilityNode->AddSupportAction(AceAction::ACTION_LONG_CLICK); + accessibilityNode->SetActionLongClickImpl([weakPtr = WeakClaim(this)]() { + const auto& textField = weakPtr.Upgrade(); + if (textField) { + textField->OnLongPress(LongPressInfo(0)); + } + }); +} + +void RenderTextField::UpdateDirectionStatus() +{ + directionStatus_ = static_cast( + (static_cast(textDirection_) << 1) | static_cast(realTextDirection_)); +} + +void RenderTextField::UpdateStartSelection(int32_t end, const Offset& pos, bool isSingleHandle, bool isLongPress) +{ + int32_t extend = GetCursorPositionForClick(pos); + int32_t extendEnd = GetEditingValue().selection.GetEnd(); + if (isLongPress) { + extendEnd = extend + GetGraphemeClusterLength(extend, false); + UpdateSelection(extend, extendEnd); + return; + } + if (isSingleHandle) { + UpdateSelection(extend); + } else { + UpdateSelection(extend, end); + } +} + +void RenderTextField::UpdateEndSelection(int32_t start, const Offset& pos) +{ + int32_t extend = GetCursorPositionForClick(pos); + UpdateSelection(start, extend); +} + +Offset RenderTextField::GetPositionForExtend(int32_t extend, bool isSingleHandle) +{ + if (extend < 0) { + extend = 0; + } + if (static_cast(extend) > GetEditingValue().GetWideText().length()) { + extend = GetEditingValue().GetWideText().length(); + } + return GetHandleOffset(extend); +} + +int32_t RenderTextField::GetGraphemeClusterLength(int32_t extend, bool isPrefix) const +{ + auto text = GetTextForDisplay(GetEditingValue().text); + char16_t aroundChar = 0; + if (isPrefix) { + if (static_cast(extend) <= text.length()) { + aroundChar = text[std::max(0, extend - 1)]; + } + } else { + if (static_cast(extend) < (text.length())) { + aroundChar = text[std::min(static_cast(text.length() - 1), extend)]; + } + } + return StringUtils::NotInUtf16Bmp(aroundChar) ? 2 : 1; +} + +bool RenderTextField::ShowCounter() const +{ + return showCounter_ && maxLength_ < std::numeric_limits::max(); +} + +void RenderTextField::ChangeCounterStyle(const TextEditingValue& value) +{ + if (!ShowCounter()) { + return; + } + if (value.GetWideText().size() > maxLength_) { + overCount_ = true; + ChangeBorderToErrorStyle(); + } else if (value.GetWideText().size() < maxLength_) { + overCount_ = false; + if (decoration_) { + decoration_->SetBorder(originBorder_); + } + } +} + +void RenderTextField::ChangeBorderToErrorStyle() +{ + if (!decoration_) { + decoration_ = AceType::MakeRefPtr(); + } + const auto& border = decoration_->GetBorder(); + BorderEdge errorBorderEdge(errorBorderColor_, errorBorderWidth_, BorderStyle::SOLID); + Border errorBorder; + if (!border.Left().HasValue() && !border.Top().HasValue() && !border.Right().HasValue() && + border.Bottom().HasValue()) { + // Change over count style for linear input. + errorBorder = Border(BorderEdge(), BorderEdge(), BorderEdge(), errorBorderEdge); + } else { + errorBorder = Border(errorBorderEdge); + } + errorBorder.SetBorderRadius(decoration_->GetBorder().TopLeftRadius()); + decoration_->SetBorder(errorBorder); +} + +void RenderTextField::HandleDeviceOrientationChange() +{ + if (deviceOrientation_ != SystemProperties::GetDevcieOrientation()) { + deviceOrientation_ = SystemProperties::GetDevcieOrientation(); + const auto& stackElement = stackElement_.Upgrade(); + if (stackElement && isOverlayShowed_) { + onKeyboardClose_ = nullptr; + stackElement->PopTextOverlay(true); + StartTwinkling(); + isOverlayShowed_ = false; + } + } +} + +void RenderTextField::OnHiddenChanged(bool hidden) +{ + if (hidden) { + CloseKeyboard(); + const auto& stackElement = stackElement_.Upgrade(); + if (stackElement) { + stackElement->PopTextOverlay(true); + isOverlayShowed_ = false; + } + } +} + +void RenderTextField::OnOverlayFocusChange(bool isFocus, bool needCloseKeyboard) +{ + isOverlayFocus_ = isFocus; + if (needCloseKeyboard && onOverlayFocusChange_) { + onOverlayFocusChange_(isFocus); + } +} + +int32_t RenderTextField::GetInstanceId() const +{ + auto context = context_.Upgrade(); + if (context) { + return context->GetInstanceId(); + } + return 0; +} + +void RenderTextField::Delete(int32_t start, int32_t end) +{ + auto value = GetEditingValue(); + value.Delete(start, end); + SetEditingValue(std::move(value)); + if (onValueChange_) { + onValueChange_(); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/text_field/render_text_field.h b/frameworks/core/components/text_field/render_text_field.h new file mode 100644 index 00000000..9f91f3b9 --- /dev/null +++ b/frameworks/core/components/text_field/render_text_field.h @@ -0,0 +1,482 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_FIELD_RENDER_TEXT_FIELD_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_FIELD_RENDER_TEXT_FIELD_H + +#include + +#include "base/geometry/dimension.h" +#include "base/geometry/offset.h" +#include "base/geometry/rect.h" +#include "base/geometry/size.h" +#include "base/utils/system_properties.h" +#include "core/common/clipboard/clipboard.h" +#include "core/common/ime/text_edit_controller.h" +#include "core/common/ime/text_input_client.h" +#include "core/common/ime/text_input_connection.h" +#include "core/common/ime/text_input_formatter.h" +#include "core/common/ime/text_input_type.h" +#include "core/common/ime/text_selection.h" +#include "core/components/common/properties/color.h" +#include "core/components/common/properties/decoration.h" +#include "core/components/common/properties/text_style.h" +#include "core/components/image/render_image.h" +#include "core/components/text_field/text_field_component.h" +#include "core/gestures/click_recognizer.h" +#include "core/gestures/long_press_recognizer.h" +#include "core/gestures/raw_recognizer.h" +#include "core/pipeline/base/overlay_show_option.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class ClickRecognizer; +class ClickInfo; +class TextOverlayComponent; +struct TextEditingValue; + +enum class DirectionStatus : uint8_t { + LEFT_LEFT = 0, // System direction is LTR, text direction is LTR. + LEFT_RIGHT, + RIGHT_LEFT, + RIGHT_RIGHT, +}; + +enum class CursorPositionType { + NONE = 0, + END, // end of paragraph + BOUNDARY, // boundary of LTR and RTL + NORMAL, +}; + +class RenderTextField : public RenderNode, public TextInputClient, public ValueChangeObserver { + DECLARE_ACE_TYPE(RenderTextField, RenderNode, TextInputClient, ValueChangeObserver); + +public: + ~RenderTextField() override; + + static RefPtr Create(); + + using TapCallback = std::function; + + void Update(const RefPtr& component) override; + void PerformLayout() override; + // Override TextInputClient + void UpdateEditingValue(const std::shared_ptr& value, bool needFireChangeEvent = true) override; + void PerformAction(TextInputAction action, bool forceCloseKeyboard = false) override; + void OnStatusChanged(RenderStatus renderStatus) override; + void OnValueChanged(bool needFireChangeEvent = true) override; + void OnPaintFinish() override; + + bool OnKeyEvent(const KeyEvent& event); + bool RequestKeyboard(bool isFocusViewChanged, bool needStartTwinkling = false); + bool CloseKeyboard(bool forceClose = false); + void ShowError(const std::string& errorText, bool resetToStart = true); + void ShowTextOverlay(const Offset& showOffset, bool isSingleHandle); + void SetOnValueChange(const std::function& onValueChange); + const std::function& GetOnValueChange() const; + void SetOnKeyboardClose(const std::function& onKeyboardClose); + void SetOnClipRectChanged(const std::function& onClipRectChanged); + void SetUpdateHandlePosition(const std::function& updateHandlePosition); + void SetUpdateHandleDiameter(const std::function& updateHandleDiameter); + void SetUpdateHandleDiameterInner(const std::function& updateHandleDiameterInner); + void SetIsOverlayShowed(bool isOverlayShowed, bool needStartTwinkling = true); + void UpdateFocusAnimation(); + const TextEditingValue& GetEditingValue() const; + void Delete(int32_t start, int32_t end); + void SetOnOverlayFocusChange(const std::function& onOverlayFocusChange) + { + onOverlayFocusChange_ = onOverlayFocusChange; + } + + // Whether textOverlay is showed. + bool IsOverlayShowed() const + { + return isOverlayShowed_; + } + + void SetOverlayColor(const Color& overlayColor) + { + overlayColor_ = overlayColor; + } + + void RegisterTapCallback(const TapCallback& callback) + { + tapCallback_ = callback; + } + + void SetNextFocusEvent(const std::function& event) + { + moveNextFocusEvent_ = event; + } + + void SetSubmitEvent(std::function&& event) + { + onSubmitEvent_ = event; + } + + const Color& GetColor() const + { + if (decoration_) { + return decoration_->GetBackgroundColor(); + } + return Color::TRANSPARENT; + } + + void SetColor(const Color& color) + { + if (decoration_) { + decoration_->SetBackgroundColor(color); + MarkNeedRender(); + } + } + + double GetHeight() const + { + return height_.Value(); + } + + void SetHeight(double height) + { + if (GreatOrEqual(height, 0.0) && !NearEqual(height_.Value(), height)) { + height_.SetValue(height); + MarkNeedLayout(); + } + } + + const WeakPtr GetStackElement() const + { + return stackElement_; + } + + void SetWidthReservedForSearch(double widthReservedForSearch) + { + widthReservedForSearch_ = widthReservedForSearch; + } + + void SetPaddingHorizonForSearch(double paddingHorizon) + { + paddingHorizonForSearch_ = paddingHorizon; + } + + bool HasTextOverlayPushed() const + { + return hasTextOverlayPushed_; + } + + void SetTextOverlayPushed(bool hasTextOverlayPushed) + { + hasTextOverlayPushed_ = hasTextOverlayPushed; + } + + bool IsSingleHandle() const + { + return isSingleHandle_; + } + + int32_t GetInitIndex() const + { + return initIndex_; + } + + void SetInitIndex(int32_t initIndex) + { + initIndex_ = initIndex; + } + + void SetOnTextChangeEvent(const std::function& onTextChangeEvent) + { + onTextChangeEvent_ = onTextChangeEvent; + } + + void SetNeedNotifyChangeEvent(bool needNotifyChangeEvent) + { + needNotifyChangeEvent_ = needNotifyChangeEvent; + } + +protected: + // Describe where caret is and how tall visually. + struct CaretMetrics { + void Reset() + { + offset.Reset(); + height = 0.0; + } + + Offset offset; + // When caret is close to different glyphs, the height will be different. + double height = 0.0; + }; + + RenderTextField(); + virtual Size Measure(); + virtual int32_t GetCursorPositionForMoveUp() = 0; + virtual int32_t GetCursorPositionForMoveDown() = 0; + virtual int32_t GetCursorPositionForClick(const Offset& offset) = 0; + virtual Offset GetHandleOffset(int32_t extend) = 0; + virtual double PreferredLineHeight() = 0; + virtual int32_t AdjustCursorAndSelection(int32_t currentCursorPosition) = 0; + virtual DirectionStatus GetDirectionStatusOfPosition(int32_t position) const = 0; + virtual Size ComputeDeflateSizeOfErrorAndCountText() const = 0; + + void OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) override; + void OnHiddenChanged(bool hidden) override; + void OnClick(const ClickInfo& clickInfo); + void OnLongPress(const LongPressInfo& longPressInfo); + + void StartTwinkling(); + void StopTwinkling(); + + void SetEditingValue(TextEditingValue&& newValue, bool needFireChangeEvent = true); + std::u16string GetTextForDisplay(const std::string& text) const; + + void UpdateStartSelection(int32_t end, const Offset& pos, bool isSingleHandle, bool isLongPress); + void UpdateEndSelection(int32_t start, const Offset& pos); + void UpdateSelection(int32_t both); + void UpdateSelection(int32_t start, int32_t end); + void UpdateDirectionStatus(); + Offset GetPositionForExtend(int32_t extend, bool isSingleHandle); + /** + * Get grapheme cluster length before or after extend. + * For example, here is a sentence: 123🎉👍 + * The emoji character contains 2 code unit. Assumpt that the cursor is at the end (that will be 3+2+2 = 7). + * When calling GetGraphemeClusterLength(3, false), '🎉' is not in Utf16Bmp, so result is 2. + * When calling GetGraphemeClusterLength(3, true), '3' is in Utf16Bmp, so result is 1. + */ + int32_t GetGraphemeClusterLength(int32_t extend, bool isPrefix) const; + + bool HasConnection() const + { + return connection_; + } + + bool ShowCounter() const; + + // Used for compare to the current value and decide whether to UpdateRemoteEditing(). + std::shared_ptr lastKnownRemoteEditingValue_; + + // An outline for caret. It is used by default when the actual size cannot be retrieved. + Rect caretProto_; + Rect innerRect_; + // Click region of password icon. + Rect passwordIconRect_; + + std::string placeholder_; + Color placeholderColor_; + // Colors when not focused. + Color inactivePlaceholderColor_; + Color inactiveBgColor_; + Color inactiveTextColor_; + // Colors when focused. + Color focusPlaceholderColor_; + Color focusBgColor_; + Color focusTextColor_; + // Color when selected. + Color selectedColor_; + Color cursorColor_; + // Overlay color for hover and press. + Color overlayColor_ = Color::TRANSPARENT; + // The interval for caret twinkling, in ms. + uint32_t twinklingInterval = 0; + bool showPlaceholder_ = false; + bool cursorVisibility_ = false; + bool showCursor_ = true; + bool cursorColorIsSet_ = false; + Dimension cursorRadius_; + Dimension fontSize_; + // Used under case of [obscure_ == true]. + // When a character input, it will be displayed naked for a while. + // The remaining time to naked display the recent character is indicated by [obscureTickPendings_], + // multiply by [twinklingInterval]. For example, 3 * 500ms = 1500ms. + int32_t obscureTickPendings_ = 0; + // What the keyboard should appears. + TextInputType keyboard_ = TextInputType::TEXT; + // Action when "enter" pressed. + TextInputAction action_ = TextInputAction::UNSPECIFIED; + std::string actionLabel_; + uint32_t maxLength_ = std::numeric_limits::max(); + // Default to the start of text (according to RTL/LTR). + TextAlign textAlign_ = TextAlign::START; + // RTL/LTR is inherit from parent. + TextDirection textDirection_ = TextDirection::INHERIT; + TextDirection realTextDirection_ = TextDirection::INHERIT; + TextAffinity textAffinity_ = TextAffinity::DOWNSTREAM; + + TextStyle countTextStyle_; + TextStyle overCountStyle_; + TextStyle countTextStyleOuter_; + TextStyle overCountStyleOuter_; + TextStyle style_; + std::string errorText_; + TextStyle errorTextStyle_; + double errorSpacing_ = 0.0; + Dimension errorSpacingInDimension_; + // Place error text in or under input. In input when device is TV, under input when device is phone. + bool errorIsInner_ = false; + Dimension errorBorderWidth_; + Color errorBorderColor_; + + RefPtr decoration_; + Border originBorder_; + + // One line TextField is more common in usual cases. + uint32_t maxLines_ = 1; + size_t textLines_ = 0; + int32_t cursorPositionForShow_ = 0; + CursorPositionType cursorPositionType_ = CursorPositionType::NORMAL; + DirectionStatus directionStatus_ = DirectionStatus::LEFT_LEFT; + + bool showCounter_ = false; // Whether show counter, 10/100 means maxlength is 100 and 10 has inputed. + bool overCount_ = false; // Whether count of text is over limit. + bool obscure_ = false; // Obscure the text, for example, password. + bool enabled_ = true; // Whether input is disable of enable. + bool needFade_ = false; // Fade in/out text when overflow. + bool blockRightShade_ = false; + bool isValueFromRemote_ = false; // Remote value coming form typing, other is from clopboard. + bool existStrongDirectionLetter_ = false; // Whether exist strong direction letter in text. + bool isVisible_ = true; + bool needNotifyChangeEvent_ = true; + bool resetToStart_ = true; // When finish inputting text, whether show header of text. + bool showEllipsis_ = false; // When text is overflow, whether show ellipsis. + bool extend_ = false; // Whether input support extend, this attribute is worked in textarea. + bool isCallbackCalled_ = false; // Whether custom font is loaded. + bool isOverlayShowed_ = false; // Whether overlay has showed. + double textHeight_ = 0.0; // Height of text. + double iconSize_ = 0.0; + double iconHotZoneSize_ = 0.0; + double extendHeight_ = 0.0; + double widthReservedForSearch_ = 0.0; // Width reserved for delete icon of search. + double paddingHorizonForSearch_ = 0.0; // Width reserved for search button of search. + double selectHeight_ = 0.0; + Dimension height_; + Dimension iconSizeInDimension_; + Dimension iconHotZoneSizeInDimension_; + Dimension widthReserved_; + std::string iconSrc_; + std::string showIconSrc_; + std::string hideIconSrc_; + RefPtr iconImage_; + RefPtr renderShowIcon_; + RefPtr renderHideIcon_; + + Offset clickOffset_; + // For ensuring caret is visible on screen, we take a strategy that move the whole text painting area. + // It maybe seems rough, and doesn't support scrolling smoothly. + Offset textOffsetForShowCaret_; + +private: + // Currently only CHARACTER. + enum class CursorMoveSkip { + CHARACTER, // Smallest code unit. + WORDS, + SIBLING_SPACE, + PARAGRAPH, + }; + + void StartPressAnimation(bool isPressDown); + void ScheduleCursorTwinkling(); + void OnCursorTwinkling(); + void CursorMoveLeft(CursorMoveSkip skip = CursorMoveSkip::CHARACTER); + void CursorMoveRight(CursorMoveSkip skip = CursorMoveSkip::CHARACTER); + void CursorMoveUp(); + void CursorMoveDown(); + void CursorMoveOnClick(const Offset& offset); + void UpdateRemoteEditing(bool needFireChangeEvent = true); + void UpdateFormatters(); + void UpdateFocusStyles(); + void UpdateIcon(const RefPtr& textField); + void UpdatePasswordIcon(const RefPtr& textField); + void UpdateOverlay(); + void RegisterFontCallbacks(); + void HandleOnCut(); + void HandleOnCopy(); + void HandleOnPaste(); + void HandleOnCopyAll(const std::function& callback); + void HandleOnStartHandleMove(int32_t end, const Offset& startHandleOffset, + const std::function& startCallback, bool isSingleHandle = false); + void HandleOnEndHandleMove( + int32_t start, const Offset& endHandleOffset, const std::function& endCallback); + RefPtr GetLastStack() const; + void InitAnimation(); + void RegisterCallbacksToOverlay(); + void PushTextOverlayToStack(); + void UpdateAccessibilityAttr(); + void InitAccessibilityEventListener(); + bool HandleKeyEvent(const KeyEvent& event); + void ClearEditingValue(); + virtual bool GetCaretRect(int32_t extent, Rect& caretRect, double caretHeightOffset = 0.0) const = 0; + bool SearchAction(const Offset& globalPosition, const Offset& globalOffset); + void ChangeCounterStyle(const TextEditingValue& value); + void ChangeBorderToErrorStyle(); + void HandleDeviceOrientationChange(); + void OnOverlayFocusChange(bool isFocus, bool needCloseKeyboard); + int32_t GetInstanceId() const; + + /** + * @brief Update remote editing value only if text or selection is changed. + */ + void UpdateRemoteEditingIfNeeded(bool needFireChangeEvent = true); + + void AttachIme(); + + int32_t initIndex_ = 0; + bool isOverlayFocus_ = false; + bool isShiftDown_ = false; + bool hasFocus_ = false; + double fontScale_ = 1.0; + bool isSingleHandle_ = false; + bool hasTextOverlayPushed_ = false; + Color pressColor_; + DeviceOrientation deviceOrientation_ = DeviceOrientation::PORTRAIT; + std::function onValueChange_; + std::function onKeyboardClose_; + std::function onClipRectChanged_; + std::function updateHandlePosition_; + std::function updateHandleDiameter_; + std::function updateHandleDiameterInner_; + std::function onTextChangeEvent_; + std::function onFinishInputEvent_; + std::function onSubmitEvent_; + std::function onTapEvent_; + std::function onLongPressEvent_; + std::function moveNextFocusEvent_; + std::function onOverlayFocusChange_; + EventMarker onOptionsClick_; + EventMarker onTranslate_; + EventMarker onShare_; + EventMarker onSearch_; + + TapCallback tapCallback_; + CancelableCallback cursorTwinklingTask_; + + std::vector inputOptions_; + std::list> textInputFormatters_; + RefPtr controller_; + RefPtr connection_; + RefPtr clipboard_; + RefPtr textOverlay_; + WeakPtr stackElement_; + RefPtr clickRecognizer_; + RefPtr longPressRecognizer_; + RefPtr rawRecognizer_; + RefPtr pressController_; + RefPtr animator_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_FIELD_RENDER_TEXT_FIELD_H diff --git a/frameworks/core/components/text_field/text_field_component.cpp b/frameworks/core/components/text_field/text_field_component.cpp new file mode 100644 index 00000000..2a8f4105 --- /dev/null +++ b/frameworks/core/components/text_field/text_field_component.cpp @@ -0,0 +1,651 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/text_field/text_field_component.h" + +#include "core/components/text_field/render_text_field.h" +#include "core/components/text_field/text_field_element.h" + +namespace OHOS::Ace { + +RefPtr TextFieldComponent::CreateRenderNode() +{ + return RenderTextField::Create(); +} + +RefPtr TextFieldComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +const std::string& TextFieldComponent::GetValue() const +{ + return value_; +} + +void TextFieldComponent::SetValue(const std::string& value) +{ + value_ = value; + isValueUpdated_ = true; +} + +bool TextFieldComponent::IsValueUpdated() const +{ + return isValueUpdated_; +} + +const std::string& TextFieldComponent::GetPlaceholder() const +{ + return placeholder_; +} + +void TextFieldComponent::SetPlaceholder(const std::string& placeholder) +{ + placeholder_ = placeholder; +} + +const Color& TextFieldComponent::GetPlaceholderColor() const +{ + return placeholderColor_; +} + +void TextFieldComponent::SetPlaceholderColor(const Color& placeholderColor) +{ + placeholderColor_ = placeholderColor; +} + +void TextFieldComponent::SetTextMaxLines(uint32_t textMaxLines) +{ + textMaxLines_ = textMaxLines; +} + +TextAlign TextFieldComponent::GetTextAlign() const +{ + return textAlign_; +} + +void TextFieldComponent::SetTextAlign(TextAlign textAlign) +{ + textAlign_ = textAlign; +} + +uint32_t TextFieldComponent::GetTextMaxLines() const +{ + return textMaxLines_; +} + +const TextStyle& TextFieldComponent::GetTextStyle() const +{ + return textStyle_; +} + +void TextFieldComponent::SetTextStyle(const TextStyle& textStyle) +{ + textStyle_ = textStyle; +} + +const TextStyle& TextFieldComponent::GetErrorTextStyle() const +{ + return errorTextStyle_; +} + +void TextFieldComponent::SetErrorTextStyle(const TextStyle& errorTextStyle) +{ + errorTextStyle_ = errorTextStyle; +} + +const Dimension& TextFieldComponent::GetErrorSpacing() const +{ + return errorSpacing_; +} + +void TextFieldComponent::SetErrorSpacing(const Dimension& errorSpacing) +{ + errorSpacing_ = errorSpacing; +} + +bool TextFieldComponent::GetErrorIsInner() const +{ + return errorIsInner_; +} + +void TextFieldComponent::SetErrorIsInner(bool errorIsInner) +{ + errorIsInner_ = errorIsInner; +} + +const Dimension& TextFieldComponent::GetErrorBorderWidth() const +{ + return errorBorderWidth_; +} + +void TextFieldComponent::SetErrorBorderWidth(const Dimension& errorBorderWidth) +{ + errorBorderWidth_ = errorBorderWidth; +} + +const Color& TextFieldComponent::GetErrorBorderColor() const +{ + return errorBorderColor_; +} + +void TextFieldComponent::SetErrorBorderColor(const Color& errorBorderColor) +{ + errorBorderColor_ = errorBorderColor; +} + +bool TextFieldComponent::NeedFade() const +{ + return needFade_; +} + +void TextFieldComponent::SetNeedFade(bool needFade) +{ + needFade_ = needFade; +} + +RefPtr TextFieldComponent::GetDecoration() const +{ + return decoration_; +} + +void TextFieldComponent::SetDecoration(const RefPtr& decoration) +{ + decoration_ = decoration; +} + +void TextFieldComponent::SetOriginBorder(const Border& originBorder) +{ + originBorder_ = originBorder; +} + +const Border& TextFieldComponent::GetOriginBorder() const +{ + return originBorder_; +} + +bool TextFieldComponent::ShowCursor() const +{ + return showCursor_; +} + +void TextFieldComponent::SetShowCursor(bool show) +{ + showCursor_ = show; +} + +bool TextFieldComponent::NeedObscure() const +{ + return obscure_; +} + +void TextFieldComponent::SetObscure(bool obscure) +{ + obscure_ = obscure; +} + +bool TextFieldComponent::IsEnabled() const +{ + return enabled_; +} + +void TextFieldComponent::SetEnabled(bool enable) +{ + enabled_ = enable; +} + +TextInputType TextFieldComponent::GetTextInputType() const +{ + return keyboard_; +} + +void TextFieldComponent::SetTextInputType(TextInputType type) +{ + keyboard_ = type; +} + +TextInputAction TextFieldComponent::GetAction() const +{ + return action_; +} + +void TextFieldComponent::SetAction(TextInputAction action) +{ + action_ = action; +} + +void TextFieldComponent::SetCursorColor(const Color& color) +{ + cursorColor_ = color; + cursorColorIsSet_ = true; +} + +const Color& TextFieldComponent::GetCursorColor() +{ + return cursorColor_; +} + +void TextFieldComponent::SetCursorRadius(const Dimension& radius) +{ + cursorRadius_ = radius; +} + +const Dimension& TextFieldComponent::GetCursorRadius() const +{ + return cursorRadius_; +} + +bool TextFieldComponent::IsCursorColorSet() const +{ + return cursorColorIsSet_; +} + +const std::string& TextFieldComponent::GetActionLabel() const +{ + return actionLabel_; +} + +void TextFieldComponent::SetActionLabel(const std::string& actionLabel) +{ + actionLabel_ = actionLabel; +} + +uint32_t TextFieldComponent::GetMaxLength() const +{ + return maxLength_; +} + +void TextFieldComponent::SetMaxLength(uint32_t maxLength) +{ + maxLength_ = maxLength; + lengthLimited_ = true; +} + +bool TextFieldComponent::IsTextLengthLimited() const +{ + return lengthLimited_; +} + +const Dimension& TextFieldComponent::GetHeight() const +{ + return height_; +} + +void TextFieldComponent::SetHeight(const Dimension& height) +{ + height_ = height; +} + +bool TextFieldComponent::GetAutoFocus() const +{ + return autoFocus_; +} + +void TextFieldComponent::SetAutoFocus(bool autoFocus) +{ + autoFocus_ = autoFocus; +} + +bool TextFieldComponent::IsExtend() const +{ + return extend_; +} + +void TextFieldComponent::SetExtend(bool extend) +{ + extend_ = extend; +} + +bool TextFieldComponent::ShowEllipsis() const +{ + return showEllipsis_; +} + +void TextFieldComponent::SetShowEllipsis(bool showEllipsis) +{ + showEllipsis_ = showEllipsis; +} + +const std::string& TextFieldComponent::GetIconImage() const +{ + return iconImage_; +} + +void TextFieldComponent::SetIconImage(const std::string& iconImage) +{ + iconImage_ = iconImage; +} + +const std::string& TextFieldComponent::GetShowIconImage() const +{ + return showImage_; +} + +void TextFieldComponent::SetShowIconImage(const std::string& showImage) +{ + showImage_ = showImage; +} + +const std::string& TextFieldComponent::GetHideIconImage() const +{ + return hideImage_; +} + +void TextFieldComponent::SetHideIconImage(const std::string& hideImage) +{ + hideImage_ = hideImage; +} + +const Dimension& TextFieldComponent::GetIconSize() const +{ + return iconSize_; +} + +void TextFieldComponent::SetIconSize(const Dimension& iconSize) +{ + iconSize_ = iconSize; +} + +const Dimension& TextFieldComponent::GetIconHotZoneSize() const +{ + return iconHotZoneSize_; +} + +void TextFieldComponent::SetIconHotZoneSize(const Dimension& iconHotZoneSize) +{ + iconHotZoneSize_ = iconHotZoneSize; +} + +const EventMarker& TextFieldComponent::GetOnTextChange() const +{ + return onTextChange_; +} + +void TextFieldComponent::SetOnTextChange(const EventMarker& onTextChange) +{ + onTextChange_ = onTextChange; +} + +const EventMarker& TextFieldComponent::GetOnFinishInput() const +{ + return onFinishInput_; +} + +void TextFieldComponent::SetOnFinishInput(const EventMarker& onFinishInput) +{ + onFinishInput_ = onFinishInput; +} + +const EventMarker& TextFieldComponent::GetOnTap() const +{ + return onTap_; +} + +void TextFieldComponent::SetOnTap(const EventMarker& onTap) +{ + onTap_ = onTap; +} + +const EventMarker& TextFieldComponent::GetOnLongPress() const +{ + return onLongPress_; +} + +void TextFieldComponent::SetOnLongPress(const EventMarker& onLongPress) +{ + onLongPress_ = onLongPress; +} + +const RefPtr& TextFieldComponent::GetTextEditController() const +{ + return controller_; +} + +void TextFieldComponent::SetTextEditController(const RefPtr& controller) +{ + controller_ = controller; +} + +const RefPtr& TextFieldComponent::GetTextFieldController() const +{ + return textFieldController_; +} + +void TextFieldComponent::SetTextFieldController(const RefPtr& controller) +{ + textFieldController_ = controller; +} + +void TextFieldComponent::SetFocusBgColor(const Color& focusBgColor) +{ + focusBgColor_ = focusBgColor; +} + +const Color& TextFieldComponent::GetFocusBgColor() +{ + return focusBgColor_; +} + +void TextFieldComponent::SetFocusPlaceholderColor(const Color& focusPlaceholderColor) +{ + focusPlaceholderColor_ = focusPlaceholderColor; +} + +const Color& TextFieldComponent::GetFocusPlaceholderColor() +{ + return focusPlaceholderColor_; +} + +void TextFieldComponent::SetFocusTextColor(const Color& focusTextColor) +{ + focusTextColor_ = focusTextColor; +} + +const Color& TextFieldComponent::GetFocusTextColor() +{ + return focusTextColor_; +} + +void TextFieldComponent::SetBgColor(const Color& bgColor) +{ + bgColor_ = bgColor; +} + +const Color& TextFieldComponent::GetBgColor() +{ + return bgColor_; +} + +void TextFieldComponent::SetTextColor(const Color& textColor) +{ + textColor_ = textColor; +} + +const Color& TextFieldComponent::GetTextColor() +{ + return textColor_; +} + +void TextFieldComponent::SetWidthReserved(const Dimension& widthReserved) +{ + widthReserved_ = widthReserved; +} + +const Dimension& TextFieldComponent::GetWidthReserved() const +{ + return widthReserved_; +} + +const Color& TextFieldComponent::GetSelectedColor() const +{ + return selectedColor_; +} + +void TextFieldComponent::SetSelectedColor(const Color& selectedColor) +{ + selectedColor_ = selectedColor; +} + +const Color& TextFieldComponent::GetHoverColor() const +{ + return hoverColor_; +} + +void TextFieldComponent::SetHoverColor(const Color& hoverColor) +{ + hoverColor_ = hoverColor; +} + +const Color& TextFieldComponent::GetPressColor() const +{ + return pressColor_; +} + +void TextFieldComponent::SetPressColor(const Color& pressColor) +{ + pressColor_ = pressColor; +} + +void TextFieldComponent::SetBlockRightShade(bool blockRightShade) +{ + blockRightShade_ = blockRightShade; +} + +bool TextFieldComponent::GetBlockRightShade() const +{ + return blockRightShade_; +} + +void TextFieldComponent::SetIsVisible(bool isVisible) +{ + isVisible_ = isVisible; +} + +bool TextFieldComponent::IsVisible() const +{ + return isVisible_; +} + +void TextFieldComponent::SetResetToStart(bool resetToStart) +{ + resetToStart_ = resetToStart; +} + +bool TextFieldComponent::GetResetToStart() const +{ + return resetToStart_; +} + +void TextFieldComponent::SetShowCounter(bool showCounter) +{ + showCounter_ = showCounter; +} + +bool TextFieldComponent::ShowCounter() const +{ + return showCounter_; +} + +void TextFieldComponent::SetCountTextStyle(const TextStyle& countTextStyle) +{ + countTextStyle_ = countTextStyle; +} + +const TextStyle& TextFieldComponent::GetCountTextStyle() const +{ + return countTextStyle_; +} + +void TextFieldComponent::SetOverCountStyle(const TextStyle& overCountStyle) +{ + overCountStyle_ = overCountStyle; +} + +const TextStyle& TextFieldComponent::GetOverCountStyle() const +{ + return overCountStyle_; +} + +void TextFieldComponent::SetCountTextStyleOuter(const TextStyle& countTextStyleOuter) +{ + countTextStyleOuter_ = countTextStyleOuter; +} + +const TextStyle& TextFieldComponent::GetCountTextStyleOuter() const +{ + return countTextStyleOuter_; +} + +void TextFieldComponent::SetOverCountStyleOuter(const TextStyle& overCountStyleOuter) +{ + overCountStyleOuter_ = overCountStyleOuter; +} + +const TextStyle& TextFieldComponent::GetOverCountStyleOuter() const +{ + return overCountStyleOuter_; +} + +void TextFieldComponent::SetInputOptions(const std::vector& inputOptions) +{ + inputOptions_ = inputOptions; +} + +const std::vector& TextFieldComponent::GetInputOptions() const +{ + return inputOptions_; +} + +const EventMarker& TextFieldComponent::GetOnOptionsClick() const +{ + return onOptionsClick_; +} + +void TextFieldComponent::SetOnOptionsClick(const EventMarker& onOptionsClick) +{ + onOptionsClick_ = onOptionsClick; +} + +const EventMarker& TextFieldComponent::GetOnTranslate() const +{ + return onTranslate_; +} + +void TextFieldComponent::SetOnTranslate(const EventMarker& onTranslate) +{ + onTranslate_ = onTranslate; +} + +const EventMarker& TextFieldComponent::GetOnShare() const +{ + return onShare_; +} + +void TextFieldComponent::SetOnShare(const EventMarker& onShare) +{ + onShare_ = onShare; +} + +const EventMarker& TextFieldComponent::GetOnSearch() const +{ + return onSearch_; +} + +void TextFieldComponent::SetOnSearch(const EventMarker& onSearch) +{ + onSearch_ = onSearch; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/text_field/text_field_component.h b/frameworks/core/components/text_field/text_field_component.h new file mode 100644 index 00000000..412f6235 --- /dev/null +++ b/frameworks/core/components/text_field/text_field_component.h @@ -0,0 +1,322 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_FIELD_TEXT_FIELD_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_FIELD_TEXT_FIELD_COMPONENT_H + +#include "base/memory/referenced.h" +#include "base/utils/label_target.h" +#include "core/common/ime/text_edit_controller.h" +#include "core/common/ime/text_input_action.h" +#include "core/common/ime/text_input_proxy.h" +#include "core/components/common/layout/constants.h" +#include "core/components/common/properties/color.h" +#include "core/components/common/properties/decoration.h" +#include "core/components/common/properties/text_style.h" +#include "core/components/image/image_component.h" +#include "core/components/text_field/text_field_controller.h" +#include "core/event/ace_event_handler.h" +#include "core/pipeline/base/render_component.h" +#include "frameworks/bridge/common/dom/dom_input.h" + +namespace OHOS::Ace { + +class RenderNode; +class Element; + +class TextFieldComponent : public RenderComponent, public LabelTarget { + DECLARE_ACE_TYPE(TextFieldComponent, RenderComponent, LabelTarget); + +public: + TextFieldComponent() = default; + ~TextFieldComponent() override = default; + + RefPtr CreateRenderNode() override; + RefPtr CreateElement() override; + + const std::string& GetValue() const; + void SetValue(const std::string& value); + + const std::string& GetPlaceholder() const; + void SetPlaceholder(const std::string& placeholder); + + const Color& GetPlaceholderColor() const; + void SetPlaceholderColor(const Color& placeholderColor); + + void SetTextMaxLines(uint32_t textMaxLines); + TextAlign GetTextAlign() const; + + void SetTextAlign(TextAlign textAlign); + uint32_t GetTextMaxLines() const; + + const TextStyle& GetTextStyle() const; + void SetTextStyle(const TextStyle& textStyle); + + const TextStyle& GetErrorTextStyle() const; + void SetErrorTextStyle(const TextStyle& errorTextStyle); + + const Dimension& GetErrorSpacing() const; + void SetErrorSpacing(const Dimension& errorSpacing); + + bool GetErrorIsInner() const; + void SetErrorIsInner(bool errorIsInner); + + const Dimension& GetErrorBorderWidth() const; + void SetErrorBorderWidth(const Dimension& errorBorderWidth); + + const Color& GetErrorBorderColor() const; + void SetErrorBorderColor(const Color& errorBorderColor); + + bool NeedFade() const; + void SetNeedFade(bool needFade); + + RefPtr GetDecoration() const; + void SetDecoration(const RefPtr& decoration); + + void SetOriginBorder(const Border& originBorder); + const Border& GetOriginBorder() const; + + bool ShowCursor() const; + void SetShowCursor(bool show); + + bool NeedObscure() const; + void SetObscure(bool obscure); + + bool IsEnabled() const; + void SetEnabled(bool enable); + + TextInputType GetTextInputType() const; + void SetTextInputType(TextInputType type); + + TextInputAction GetAction() const; + void SetAction(TextInputAction action); + + void SetCursorColor(const Color& color); + const Color& GetCursorColor(); + + void SetCursorRadius(const Dimension& radius); + const Dimension& GetCursorRadius() const; + + bool IsCursorColorSet() const; + + const std::string& GetActionLabel() const; + void SetActionLabel(const std::string& actionLabel); + + uint32_t GetMaxLength() const; + void SetMaxLength(uint32_t maxLength); + + bool IsTextLengthLimited() const; + + const Dimension& GetHeight() const; + void SetHeight(const Dimension& height); + + bool GetAutoFocus() const; + void SetAutoFocus(bool autoFocus); + + bool IsExtend() const; + void SetExtend(bool extend); + + bool ShowEllipsis() const; + void SetShowEllipsis(bool showEllipsis); + + const std::string& GetIconImage() const; + void SetIconImage(const std::string& iconImage); + + const std::string& GetShowIconImage() const; + void SetShowIconImage(const std::string& showImage); + + const std::string& GetHideIconImage() const; + void SetHideIconImage(const std::string& hideImage); + + const Dimension& GetIconSize() const; + void SetIconSize(const Dimension& iconSize); + + const Dimension& GetIconHotZoneSize() const; + void SetIconHotZoneSize(const Dimension& iconHotZoneSize); + + const EventMarker& GetOnTextChange() const; + void SetOnTextChange(const EventMarker& onTextChange); + + const EventMarker& GetOnFinishInput() const; + void SetOnFinishInput(const EventMarker& onFinishInput); + + const EventMarker& GetOnTap() const; + void SetOnTap(const EventMarker& onTap); + + const EventMarker& GetOnLongPress() const; + void SetOnLongPress(const EventMarker& onLongPress); + + const RefPtr& GetTextEditController() const; + void SetTextEditController(const RefPtr& controller); + + const RefPtr& GetTextFieldController() const; + void SetTextFieldController(const RefPtr& controller); + + void SetFocusBgColor(const Color& focusBgColor); + const Color& GetFocusBgColor(); + + void SetFocusPlaceholderColor(const Color& focusPlaceholderColor); + const Color& GetFocusPlaceholderColor(); + + void SetFocusTextColor(const Color& focusTextColor); + const Color& GetFocusTextColor(); + + void SetBgColor(const Color& bgColor); + const Color& GetBgColor(); + + void SetTextColor(const Color& textColor); + const Color& GetTextColor(); + + void SetWidthReserved(const Dimension& widthReserved); + const Dimension& GetWidthReserved() const; + + const Color& GetSelectedColor() const; + void SetSelectedColor(const Color& selectedColor); + + const Color& GetHoverColor() const; + void SetHoverColor(const Color& hoverColor); + + const Color& GetPressColor() const; + void SetPressColor(const Color& pressColor); + + void SetBlockRightShade(bool blockRightShade); + bool GetBlockRightShade() const; + + void SetIsVisible(bool isVisible); + bool IsVisible() const; + + void SetResetToStart(bool resetToStart); + bool GetResetToStart() const; + + void SetShowCounter(bool showCounter); + bool ShowCounter() const; + + void SetCountTextStyle(const TextStyle& countTextStyle); + const TextStyle& GetCountTextStyle() const; + + void SetOverCountStyle(const TextStyle& overCountStyle); + const TextStyle& GetOverCountStyle() const; + + void SetCountTextStyleOuter(const TextStyle& countTextStyleOuter); + const TextStyle& GetCountTextStyleOuter() const; + + void SetOverCountStyleOuter(const TextStyle& overCountStyleOuter); + const TextStyle& GetOverCountStyleOuter() const; + + void SetInputOptions(const std::vector& inputOptions); + const std::vector& GetInputOptions() const; + + const EventMarker& GetOnOptionsClick() const; + void SetOnOptionsClick(const EventMarker& onOptionsClick); + + const EventMarker& GetOnTranslate() const; + void SetOnTranslate(const EventMarker& onTranslate); + + const EventMarker& GetOnShare() const; + void SetOnShare(const EventMarker& onShare); + + const EventMarker& GetOnSearch() const; + void SetOnSearch(const EventMarker& onSearch); + + bool IsValueUpdated() const; + +private: + std::string value_; + std::string placeholder_; + Color placeholderColor_; + Color cursorColor_; + Dimension cursorRadius_; + Dimension widthReserved_; + bool cursorColorIsSet_ = false; + bool showCursor_ = true; + // Obscure the text, for example, password. + bool obscure_ = false; + bool enabled_ = true; + TextInputType keyboard_ = TextInputType::TEXT; + // Action when "enter" pressed. + TextInputAction action_ = TextInputAction::UNSPECIFIED; + std::string actionLabel_; + bool lengthLimited_ = false; + uint32_t maxLength_ = std::numeric_limits::max(); + bool autoFocus_ = false; + // Whether height of textfield can auto-extend. + bool extend_ = false; + bool showEllipsis_ = false; + bool blockRightShade_ = false; + bool isVisible_ = true; + bool resetToStart_ = true; + bool isValueUpdated_ = false; + + // Herder-icon of textField. + std::string iconImage_; + Dimension iconSize_; + Dimension iconHotZoneSize_; + // Icon to control password show or hide. + std::string showImage_; + std::string hideImage_; + + TextAlign textAlign_ = TextAlign::START; + uint32_t textMaxLines_ = 1; + Dimension height_; + TextStyle textStyle_; + TextStyle errorTextStyle_; + // Spacing between error text and input text. + Dimension errorSpacing_; + // Whether error text show inner or under. + bool errorIsInner_ = false; + Dimension errorBorderWidth_; + Color errorBorderColor_; + bool needFade_ = false; + RefPtr decoration_; + Border originBorder_; + + // theme setting + Color focusBgColor_; + Color focusPlaceholderColor_; + Color focusTextColor_; + Color bgColor_; + Color textColor_; + Color selectedColor_; + Color hoverColor_; + Color pressColor_; + + // Callback id for when text is changed. + EventMarker onTextChange_; + // Callback id for when user press "enter" + EventMarker onFinishInput_; + EventMarker onTap_; + EventMarker onLongPress_; + EventMarker onOptionsClick_; + // Callback id for text overlay. + EventMarker onTranslate_; + EventMarker onShare_; + EventMarker onSearch_; + + RefPtr controller_; + RefPtr textFieldController_; + + // Whether show counter, should work together with maxLength_. + bool showCounter_ = false; + TextStyle countTextStyle_; + TextStyle overCountStyle_; + TextStyle countTextStyleOuter_; + TextStyle overCountStyleOuter_; + + std::vector inputOptions_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_FIELD_TEXT_FIELD_COMPONENT_H diff --git a/frameworks/core/components/text_field/text_field_controller.cpp b/frameworks/core/components/text_field/text_field_controller.cpp new file mode 100644 index 00000000..452306d4 --- /dev/null +++ b/frameworks/core/components/text_field/text_field_controller.cpp @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/text_field/text_field_controller.h" + +#include "core/components/text_field/text_field_element.h" + +namespace OHOS::Ace { + +void TextFieldController::Focus(bool focus) +{ + auto textField = AceType::DynamicCast(element_.Upgrade()); + if (!textField) { + return; + } + if (focus) { + textField->RequestKeyboard(); + } else { + textField->LostSelfFocus(); + } +} + +void TextFieldController::ShowError(const std::string& errorText) +{ + auto textField = AceType::DynamicCast(element_.Upgrade()); + if (!textField) { + return; + } + textField->ShowError(errorText); +} + +void TextFieldController::Delete() +{ + auto textField = AceType::DynamicCast(element_.Upgrade()); + if (!textField) { + return; + } + textField->Delete(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/text_field/text_field_controller.h b/frameworks/core/components/text_field/text_field_controller.h new file mode 100644 index 00000000..fbf11c35 --- /dev/null +++ b/frameworks/core/components/text_field/text_field_controller.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_FIELD_TEXT_FIELD_CONTROLLER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_FIELD_TEXT_FIELD_CONTROLLER_H + +#include "base/memory/ace_type.h" + +namespace OHOS::Ace { + +class Element; + +class TextFieldController : public AceType { +public: + void SetHandler(WeakPtr element) + { + element_ = element; + } + + void Focus(bool focus); + + void ShowError(const std::string& errorText); + void Delete(); + +private: + WeakPtr element_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_FIELD_TEXT_FIELD_CONTROLLER_H diff --git a/frameworks/core/components/text_field/text_field_element.cpp b/frameworks/core/components/text_field/text_field_element.cpp new file mode 100644 index 00000000..316acabe --- /dev/null +++ b/frameworks/core/components/text_field/text_field_element.cpp @@ -0,0 +1,226 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/text_field/text_field_element.h" + +#include "core/components/text_field/text_field_component.h" +#include "core/components/text_field/text_field_controller.h" + +namespace OHOS::Ace { + +void TextFieldElement::Update() +{ + RenderElement::Update(); + + auto labelTarget = AceType::DynamicCast(component_); + if (labelTarget) { + auto trigger = labelTarget->GetTrigger(); + if (trigger) { + auto weak = AceType::WeakClaim(this); + trigger->clickHandler_ = [weak]() { + auto textField = weak.Upgrade(); + if (textField) { + textField->RequestKeyboard(); + } + }; + } + } + + auto textField = AceType::DynamicCast(component_); + if (textField) { + if (textField->GetTextFieldController()) { + textField->GetTextFieldController()->SetHandler(AceType::WeakClaim(this)); + } + enabled_ = textField->IsEnabled(); + } +} + +RefPtr TextFieldElement::CreateRenderNode() +{ + RefPtr node = RenderElement::CreateRenderNode(); + + auto renderNode = AceType::DynamicCast(node); + if (renderNode) { + renderNode->RegisterTapCallback([wp = AceType::WeakClaim(this)]() { + auto sp = wp.Upgrade(); + if (sp) { + return sp->RequestKeyboard(); + } + return false; + }); + renderNode->SetNextFocusEvent([wp = AceType::WeakClaim(this)]() { + auto sp = wp.Upgrade(); + if (sp) { + auto pipeline = sp->context_.Upgrade(); + if (!pipeline) { + LOGW("pipeline is null."); + return; + } + sp->isNextAction_ = true; + + KeyEvent keyEvent(KeyCode::KEYBOARD_DOWN, KeyAction::UP, 0, 0, 0); + if (!pipeline->OnKeyEvent(keyEvent)) { + sp->CloseKeyboard(); + } else { + // below textfield will auto open keyboard + KeyEvent keyEventEnter(KeyCode::KEYBOARD_ENTER, KeyAction::UP, 0, 0, 0); + pipeline->OnKeyEvent(keyEventEnter); + } + } + }); + + renderNode->SetOnOverlayFocusChange([wp = AceType::WeakClaim(this)](bool isFocus) { + auto sp = wp.Upgrade(); + if (sp) { + if (!isFocus && !sp->isRequestFocus_) { + sp->CloseKeyboard(); + } + } + }); + } + return node; +} + +bool TextFieldElement::OnKeyEvent(const KeyEvent& keyEvent) +{ + if (!enabled_) { + return false; + } + + if (editingMode_ && FocusNode::OnKeyEvent(keyEvent)) { + return true; + } + + if (editingMode_) { + auto textField = DynamicCast(renderNode_); + if (textField && textField->OnKeyEvent(keyEvent)) { + return true; + } + } + + if (keyEvent.action != KeyAction::UP) { + return false; + } + + switch (keyEvent.code) { + case KeyCode::KEYBOARD_BACK: + case KeyCode::KEYBOARD_ESCAPE: { + bool editingMode = editingMode_; + CloseKeyboard(); + // If not editingMode, mark the keyevent unhandled to let navigator pop page.. + return editingMode; + } + case KeyCode::KEYBOARD_ENTER: + case KeyCode::KEYBOARD_NUMBER_ENTER: + case KeyCode::KEYBOARD_CENTER: + RequestKeyboard(true); + return true; + case KeyCode::KEYBOARD_LEFT: + case KeyCode::KEYBOARD_RIGHT: + case KeyCode::KEYBOARD_UP: + case KeyCode::KEYBOARD_DOWN: { + bool result = editingMode_ && !isNextAction_; + isNextAction_ = false; + return result; + } + default: + return false; + } +} + +void TextFieldElement::OnFocus() +{ + if (!enabled_) { + return; + } + FocusNode::OnFocus(); + renderNode_->ChangeStatus(RenderStatus::FOCUS); +} + +void TextFieldElement::OnBlur() +{ + if (!enabled_) { + return; + } + if (renderNode_) { + renderNode_->ChangeStatus(RenderStatus::BLUR); + } + CloseKeyboard(); + FocusNode::OnBlur(); +} + +void TextFieldElement::CloseKeyboard() +{ + isRequestFocus_ = false; + auto textField = DynamicCast(renderNode_); + if (textField) { + if (textField->CloseKeyboard()) { + editingMode_ = false; + } + } +} + +bool TextFieldElement::RequestKeyboard(bool needStartTwinkling) +{ + if (!enabled_) { + return false; + } + isRequestFocus_ = true; + if (RequestFocusImmediately()) { + auto textField = DynamicCast(renderNode_); + if (textField) { + if (textField->RequestKeyboard(!editingMode_, needStartTwinkling)) { + editingMode_ = true; + } + } + return true; + } else { + isRequestFocus_ = false; + return false; + } +} + +void TextFieldElement::ShowError(const std::string& errorText) +{ + auto textField = DynamicCast(renderNode_); + if (textField) { + textField->ShowError(errorText); + } +} + +void TextFieldElement::Delete() +{ + auto textField = DynamicCast(renderNode_); + if (!textField) { + return; + } + auto value = textField->GetEditingValue(); + if (value.text.empty()) { + RequestKeyboard(true); + return; + } + if (editingMode_) { + auto start = value.selection.GetStart(); + auto end = value.selection.GetEnd(); + if (start > 0 && end > 0) { + textField->Delete(start == end ? start - 1 : start, end); + } + } else { + textField->Delete(value.GetWideText().size() - 1, value.GetWideText().size()); + } + RequestKeyboard(true); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/text_field/text_field_element.h b/frameworks/core/components/text_field/text_field_element.h new file mode 100644 index 00000000..503fce74 --- /dev/null +++ b/frameworks/core/components/text_field/text_field_element.h @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_FIELD_TEXT_FIELD_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_FIELD_TEXT_FIELD_ELEMENT_H + +#include "base/utils/label_target.h" +#include "core/components/text_field/render_text_field.h" +#include "core/focus/focus_node.h" +#include "core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +class TextFieldElement : public RenderElement, public FocusNode { + DECLARE_ACE_TYPE(TextFieldElement, RenderElement, FocusNode); + +public: + RefPtr CreateRenderNode() override; + + void Update() override; + void OnFocus() override; + void OnBlur() override; + bool OnKeyEvent(const KeyEvent& keyEvent) override; + + bool RequestKeyboard(bool needStartTwinkling = false); + void ShowError(const std::string& errorText); + void Delete(); + +private: + void CloseKeyboard(); + + bool enabled_ = true; + bool editingMode_ = false; + bool isNextAction_ = false; + bool isRequestFocus_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_FIELD_TEXT_FIELD_ELEMENT_H diff --git a/frameworks/core/components/text_field/textfield_theme.h b/frameworks/core/components/text_field/textfield_theme.h new file mode 100644 index 00000000..a0ff35b3 --- /dev/null +++ b/frameworks/core/components/text_field/textfield_theme.h @@ -0,0 +1,365 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_FIELD_TEXTFIELD_THEME_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_FIELD_TEXTFIELD_THEME_H + +#include "base/geometry/dimension.h" +#include "core/components/common/properties/border.h" +#include "core/components/common/properties/color.h" +#include "core/components/common/properties/edge.h" +#include "core/components/common/properties/radius.h" +#include "core/components/theme/theme.h" +#include "core/components/theme/theme_constants.h" + +namespace OHOS::Ace { + +/** + * TextFieldTheme defines color and styles of SliderComponent. TextFieldTheme should be built + * using TextFieldTheme::Builder. + */ +class TextFieldTheme : public virtual Theme { + DECLARE_ACE_TYPE(TextFieldTheme, Theme); + +public: + class Builder { + public: + Builder() = default; + ~Builder() = default; + + RefPtr Build(const RefPtr& themeConstants) const + { + RefPtr theme = AceType::Claim(new TextFieldTheme()); + if (!themeConstants) { + return theme; + } + // init theme from global data + theme->padding_ = Edge(themeConstants->GetDimension(THEME_TEXTFIELD_PADDING_HORIZONTAL), + themeConstants->GetDimension(THEME_TEXTFIELD_PADDING_VERTICAL), + themeConstants->GetDimension(THEME_TEXTFIELD_PADDING_HORIZONTAL), + themeConstants->GetDimension(THEME_TEXTFIELD_PADDING_VERTICAL)); + theme->height_ = themeConstants->GetDimension(THEME_TEXTFIELD_HEIGHT); + theme->fontSize_ = themeConstants->GetDimension(THEME_TEXTFIELD_FONT_SIZE); + theme->fontWeight_ = FontWeight(themeConstants->GetInt(THEME_TEXTFIELD_FONT_WEIGHT)); + theme->borderRadius_ = Radius(themeConstants->GetDimension(THEME_TEXTFIELD_BORDER_RADIUS)); + + theme->bgColor_ = themeConstants->GetColor(THEME_TEXTFIELD_BACKGROUND_COLOR); + theme->placeholderColor_ = themeConstants->GetColor(THEME_TEXTFIELD_PLACEHOLDER_COLOR); + theme->textColor_ = themeConstants->GetColor(THEME_TEXTFIELD_TEXT_COLOR); + theme->selectedColor_ = themeConstants->GetColor(THEME_TEXTFIELD_TEXT_SELECTED_COLOR); + theme->hoverColor_ = themeConstants->GetColor(THEME_TEXTFIELD_HOVER_COLOR); + theme->pressColor_ = themeConstants->GetColor(THEME_TEXTFIELD_PRESS_COLOR); + + theme->focusBgColor_ = themeConstants->GetColor(THEME_TEXTFIELD_FOCUS_BACKGROUND_COLOR); + theme->focusPlaceholderColor_ = themeConstants->GetColor(THEME_TEXTFIELD_FOCUS_PLACEHOLDER_COLOR); + theme->focusTextColor_ = themeConstants->GetColor(THEME_TEXTFIELD_FOCUS_TEXT_COLOR); + + theme->disableOpacityRatio_ = themeConstants->GetDouble(THEME_TEXTFIELD_DISABLE_OPACITY_RATIO); + theme->disableTextColor_ = themeConstants->GetColor(THEME_TEXTFIELD_TEXT_COLOR_DISABLE); + + theme->overHideLength_ = themeConstants->GetDimension(THEME_TEXTFIELD_OVER_HIDE_LENGTH); + + theme->cursorColor_ = themeConstants->GetColor(THEME_TEXTFIELD_CURSOR_COLOR); + theme->cursorRadius_ = themeConstants->GetDimension(THEME_TEXTFIELD_CURSOR_RADIUS); + theme->needFade_ = static_cast(themeConstants->GetInt(THEME_TEXTFIELD_NEED_FADE)); + + theme->iconSize_ = themeConstants->GetDimension(THEME_TEXTFIELD_ICON_SIZE); + theme->iconHotZoneSize_ = themeConstants->GetDimension(THEME_TEXTFIELD_ICON_HOT_ZONE_SIZE); + + theme->showEllipsis_ = static_cast(themeConstants->GetInt(THEME_TEXTFIELD_SHOW_ELLIPSIS)); + + theme->errorSpacing_ = themeConstants->GetDimension(THEME_TEXTFIELD_ERROR_SPACING); + theme->errorIsInner_ = static_cast(themeConstants->GetInt(THEME_TEXTFIELD_ERROR_IS_INNER)); + theme->errorBorderWidth_ = themeConstants->GetDimension(THEME_TEXTFIELD_ERROR_BORDER_WIDTH); + theme->errorBorderColor_ = themeConstants->GetColor(THEME_TEXTFIELD_ERROR_BORDER_COLOR); + theme->errorTextStyle_.SetTextColor(themeConstants->GetColor(THEME_TEXTFIELD_ERROR_COLOR)); + theme->errorTextStyle_.SetFontSize(themeConstants->GetDimension(THEME_TEXTFIELD_ERROR_FONT_SIZE)); + theme->errorTextStyle_.SetFontWeight(FontWeight(themeConstants->GetInt(THEME_TEXTFIELD_ERROR_FONT_WEIGHT))); + + theme->countTextStyle_.SetTextColor(themeConstants->GetColor(THEME_TEXTFIELD_COUNT_TEXT_COLOR)); + theme->countTextStyle_.SetFontSize(themeConstants->GetDimension(THEME_TEXTFIELD_COUNT_FONT_SIZE)); + theme->countTextStyle_.SetFontWeight( + FontWeight(themeConstants->GetInt(THEME_TEXTFIELD_COUNT_FONT_WEIGHT))); + theme->overCountStyle_.SetTextColor(themeConstants->GetColor(THEME_TEXTFIELD_OVER_COUNT_TEXT_COLOR)); + theme->overCountStyle_.SetFontSize(themeConstants->GetDimension(THEME_TEXTFIELD_OVER_COUNT_FONT_SIZE)); + theme->overCountStyle_.SetFontWeight( + FontWeight(themeConstants->GetInt(THEME_TEXTFIELD_OVER_COUNT_FONT_WEIGHT))); + + theme->countTextStyleOuter_.SetTextColor(themeConstants->GetColor(THEME_TEXTFIELD_COUNT_TEXT_COLOR)); + theme->countTextStyleOuter_.SetFontSize( + themeConstants->GetDimension(THEME_TEXTFIELD_COUNT_FONT_SIZE_OUTER)); + theme->countTextStyleOuter_.SetFontWeight( + FontWeight(themeConstants->GetInt(THEME_TEXTFIELD_COUNT_FONT_WEIGHT))); + theme->overCountStyleOuter_.SetTextColor(themeConstants->GetColor(THEME_TEXTFIELD_OVER_COUNT_TEXT_COLOR)); + theme->overCountStyleOuter_.SetFontSize( + themeConstants->GetDimension(THEME_TEXTFIELD_COUNT_FONT_SIZE_OUTER)); + theme->overCountStyleOuter_.SetFontWeight( + FontWeight(themeConstants->GetInt(THEME_TEXTFIELD_OVER_COUNT_FONT_WEIGHT))); + + ParsePattern(themeConstants->GetThemeStyle(), theme); + return theme; + } + + private: + void ParsePattern(const RefPtr& themeStyle, const RefPtr& theme) const + { + if (!themeStyle || !theme) { + return; + } + theme->fontSize_ = themeStyle->GetAttr(TEXTFIELD_FONT_SIZE, 0.0_fp); + theme->textColor_ = themeStyle->GetAttr(TEXTFIELD_TEXT_COLOR, Color()); + theme->focusTextColor_ = themeStyle->GetAttr(TEXTFIELD_TEXT_COLOR, Color()); + theme->placeholderColor_ = themeStyle->GetAttr(TEXTFIELD_HINT_TEXT_COLOR, Color()); + theme->focusPlaceholderColor_ = themeStyle->GetAttr(TEXTFIELD_HINT_TEXT_COLOR, Color()); + theme->bgColor_ = themeStyle->GetAttr(TEXTFIELD_BACKGROUND_COLOR, Color()); + theme->focusBgColor_ = themeStyle->GetAttr(TEXTFIELD_BACKGROUND_COLOR, Color()); + // color of error border blend 60% opacity + theme->errorBorderColor_ = themeStyle->GetAttr(TEXTFIELD_ERROR_COLOR, Color()).BlendOpacity(0.6); + theme->errorTextStyle_.SetTextColor(themeStyle->GetAttr(TEXTFIELD_ERROR_COLOR, Color())); + theme->errorTextStyle_.SetFontSize(themeStyle->GetAttr(TEXTFIELD_ERROR_TEXT_FONT_SIZE, 0.0_fp)); + + theme->countTextStyle_.SetTextColor(themeStyle->GetAttr(TEXTFIELD_COUNT_TEXT_COLOR, Color())); + theme->countTextStyle_.SetFontSize(themeStyle->GetAttr(TEXTFIELD_COUNT_TEXT_FONT_SIZE, 0.0_fp)); + theme->overCountStyle_.SetTextColor(themeStyle->GetAttr(TEXTFIELD_ERROR_COLOR, Color())); + theme->overCountStyle_.SetFontSize(themeStyle->GetAttr(TEXTFIELD_COUNT_TEXT_FONT_SIZE, 0.0_fp)); + + theme->countTextStyleOuter_.SetTextColor(themeStyle->GetAttr(TEXTFIELD_COUNT_TEXT_COLOR, Color())); + theme->countTextStyleOuter_.SetFontSize( + themeStyle->GetAttr(TEXTFIELD_COUNT_TEXT_FONT_SIZE_OUTER, 0.0_fp)); + theme->overCountStyleOuter_.SetTextColor(themeStyle->GetAttr(TEXTFIELD_ERROR_COLOR, Color())); + theme->overCountStyleOuter_.SetFontSize( + themeStyle->GetAttr(TEXTFIELD_COUNT_TEXT_FONT_SIZE_OUTER, 0.0_fp)); + + theme->selectedColor_ = themeStyle->GetAttr(TEXTFIELD_SELECTED_COLOR, Color()); + theme->disableTextColor_ = themeStyle->GetAttr(TEXTFIELD_TEXT_COLOR_DISABLE, Color()); + theme->cursorColor_ = themeStyle->GetAttr(TEXTFIELD_CURSOR_COLOR, Color()); + theme->hoverColor_ = themeStyle->GetAttr(TEXTFIELD_HOVER_COLOR, Color()); + theme->pressColor_ = themeStyle->GetAttr(TEXTFIELD_PRESS_COLOR, Color()); + } + }; + + ~TextFieldTheme() override = default; + + const Edge& GetPadding() const + { + return padding_; + } + + const Dimension& GetHeight() const + { + return height_; + } + + const Dimension& GetFontSize() const + { + return fontSize_; + } + + const FontWeight& GetFontWeight() const + { + return fontWeight_; + } + + const Radius& GetBorderRadius() const + { + return borderRadius_; + } + + const Color& GetBgColor() const + { + return bgColor_; + } + + const Color& GetPlaceholderColor() const + { + return placeholderColor_; + } + + const Color& GetFocusBgColor() const + { + return focusBgColor_; + } + + const Color& GetFocusPlaceholderColor() const + { + return focusPlaceholderColor_; + } + + const Color& GetFocusTextColor() const + { + return focusTextColor_; + } + + const Color& GetTextColor() const + { + return textColor_; + } + + const Color& GetDisableTextColor() const + { + return disableTextColor_; + } + + const Color& GetSelectedColor() const + { + return selectedColor_; + } + + const Color& GetHoverColor() const + { + return hoverColor_; + } + + const Color& GetPressColor() const + { + return pressColor_; + } + + double GetDisableOpacityRatio() const + { + return disableOpacityRatio_; + } + + const Dimension& GetOverHideLength() const + { + return overHideLength_; + } + + const Color& GetCursorColor() const + { + return cursorColor_; + } + + const Dimension& GetCursorRadius() const + { + return cursorRadius_; + } + + bool NeedFade() const + { + return needFade_; + } + + const Dimension& GetIconSize() const + { + return iconSize_; + } + + const Dimension& GetIconHotZoneSize() const + { + return iconHotZoneSize_; + } + + bool ShowEllipsis() const + { + return showEllipsis_; + } + + const Dimension& GetErrorSpacing() const + { + return errorSpacing_; + } + + bool GetErrorIsInner() const + { + return errorIsInner_; + } + + const Dimension& GetErrorBorderWidth() const + { + return errorBorderWidth_; + } + + const Color& GetErrorBorderColor() const + { + return errorBorderColor_; + } + + const TextStyle& GetErrorTextStyle() const + { + return errorTextStyle_; + } + + const TextStyle& GetCountTextStyle() const + { + return countTextStyle_; + } + + const TextStyle& GetOverCountStyle() const + { + return overCountStyle_; + } + + const TextStyle& GetCountTextStyleOuter() const + { + return countTextStyleOuter_; + } + + const TextStyle& GetOverCountStyleOuter() const + { + return overCountStyleOuter_; + } + +protected: + TextFieldTheme() = default; + +private: + Edge padding_; + Dimension height_; + Dimension fontSize_; + FontWeight fontWeight_ = FontWeight::NORMAL; + Radius borderRadius_; + + Color bgColor_; + Color placeholderColor_; + Color focusBgColor_; + Color focusPlaceholderColor_; + Color focusTextColor_; + Color textColor_; + Color disableTextColor_; + Color selectedColor_; + Color hoverColor_; + Color pressColor_; + Dimension errorSpacing_; + bool errorIsInner_ = false; + Dimension errorBorderWidth_; + Color errorBorderColor_; + TextStyle errorTextStyle_; + TextStyle countTextStyle_; + TextStyle overCountStyle_; + TextStyle countTextStyleOuter_; + TextStyle overCountStyleOuter_; + + // UX::disable state: opacity is set to 38% of the default + double disableOpacityRatio_ = 1.0; + + // UX::over length state + Dimension overHideLength_; + + // UX::cursor state cursor-color=#000000, cursor blur-radius=0.9, cursor-width=2, cursor-height=24, cursor-radius=1 + Color cursorColor_; + Dimension cursorRadius_; + bool needFade_ = false; + + // UX::icon size = 24, hotZoneSize = 36 + Dimension iconSize_; + Dimension iconHotZoneSize_; + + bool showEllipsis_ = true; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_FIELD_TEXTFIELD_THEME_H diff --git a/frameworks/core/components/text_overlay/BUILD.gn b/frameworks/core/components/text_overlay/BUILD.gn new file mode 100644 index 00000000..4fae3629 --- /dev/null +++ b/frameworks/core/components/text_overlay/BUILD.gn @@ -0,0 +1,23 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("text_overlay") { + sources = [ + "flutter_render_text_overlay.cpp", + "render_text_overlay.cpp", + "text_overlay_component.cpp", + "text_overlay_element.cpp", + ] +} diff --git a/frameworks/core/components/text_overlay/flutter_render_text_overlay.cpp b/frameworks/core/components/text_overlay/flutter_render_text_overlay.cpp new file mode 100644 index 00000000..bb4aa573 --- /dev/null +++ b/frameworks/core/components/text_overlay/flutter_render_text_overlay.cpp @@ -0,0 +1,402 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/text_overlay/flutter_render_text_overlay.h" + +#include "third_party/skia/include/core/SkMaskFilter.h" + +#include "core/components/common/painter/flutter_decoration_painter.h" +#include "core/components/common/properties/shadow_config.h" +#include "core/components/text_field/flutter_render_text_field.h" +#include "core/pipeline/base/flutter_render_context.h" +#include "core/pipeline/base/scoped_canvas_state.h" + +namespace OHOS::Ace { +namespace { + +constexpr Dimension CLIP_ORIGIN_X = 4.5754_vp; +constexpr Dimension CLIP_ORIGIN_Y = 6.3432_vp; +constexpr Dimension CLIP_LENGTH = 4.0_vp; +constexpr Dimension MAGNIFIER_WIDTH = 48.0_vp; +constexpr Dimension MAGNIFIER_RADIUS = 24.0_vp; +constexpr Dimension MAGNIFIER_OFFSET = 7.0_vp; +constexpr Dimension FIRST_DRAG_OFFSET = 19.0_vp; +constexpr Dimension HANDLE_LINE_WIDTH = 1.5_vp; +constexpr Dimension MORE_BUTTON_SIZE = 40.0_vp; +constexpr double MAGNIFIER_GAIN = 1.25; +constexpr double FIXED_OFFSET = 18.0; + +} // namespace + +RefPtr RenderTextOverlay::Create() +{ + return AceType::MakeRefPtr(); +} + +void FlutterRenderTextOverlay::Paint(RenderContext& context, const Offset& offset) +{ + if (!showOption_.showStartHandle && !showOption_.showEndHandle) { + return; + } + + PaintHandles(context); + + AdjustForAnimation(); + + if (showMagnifier_) { + PaintMagnifier(context); + } + + if ((!isSingleHandle_ || showOption_.showMenu) && !showMagnifier_) { + RenderNode::Paint(context, offset); + } + + PaintMore(context); +} + +void FlutterRenderTextOverlay::PaintHandles(RenderContext& context) const +{ + auto renderContext = AceType::DynamicCast(&context); + if (!renderContext) { + return; + } + auto canvas = renderContext->GetCanvas(); + if (!canvas) { + return; + } + SkCanvas* skCanvas = canvas->canvas(); + Offset centerOffset = Offset(0.0, NormalizeToPx(handleRadius_)); + + // Paint one handle. + if (isSingleHandle_ && clipRect_.IsInRegion(Point(startHandleOffset_.GetX(), startHandleOffset_.GetY()))) { + PaintHandle(skCanvas, startHandleOffset_ + centerOffset); + return; + } + + // Paint start handle of textOverlay. + if (showOption_.showStartHandle && + clipRect_.IsInRegion(Point(startHandleOffset_.GetX(), startHandleOffset_.GetY()))) { + PaintHandle(skCanvas, startHandleOffset_ + Offset(0.0, -lineHeight_ - NormalizeToPx(handleRadius_)), true); + } + + // Paint end handle of textOverlay. + if (showOption_.showEndHandle && clipRect_.IsInRegion(Point(endHandleOffset_.GetX(), endHandleOffset_.GetY()))) { + PaintHandle(skCanvas, endHandleOffset_ + centerOffset); + } +} + +void FlutterRenderTextOverlay::PaintHandle(SkCanvas* skCanvas, Offset centerOffset, bool isLeftHandle) const +{ + if (!skCanvas) { + return; + } + + SkPaint paint; + paint.setAntiAlias(true); + skCanvas->save(); + skCanvas->translate(centerOffset.GetX(), centerOffset.GetY()); + // Paint outer circle. + paint.setColor(handleColor_.GetValue()); + skCanvas->drawCircle(0.0, 0.0, NormalizeToPx(handleRadius_), paint); + // Paint inner circle. + paint.setColor(handleColorInner_.GetValue()); + skCanvas->drawCircle(0.0, 0.0, NormalizeToPx(handleRadiusInner_), paint); + // Paint line of handle. + paint.setAntiAlias(true); + paint.setColor(handleColor_.GetValue()); + paint.setStrokeWidth(NormalizeToPx(HANDLE_LINE_WIDTH)); + paint.setStrokeCap(SkPaint::Cap::kRound_Cap); + // 1.0 is avoid separation of handle circle and handle line. + Offset startPoint(Offset(0.0, NormalizeToPx(-handleRadius_) + 1.0)); + // 1.0_dp is designed by UX, handle line is higher than height of select region. + Offset endPoint(Offset(0.0, NormalizeToPx(-handleRadius_) - lineHeight_ - NormalizeToPx(1.0_vp))); + if (isLeftHandle) { + startPoint.SetY(NormalizeToPx(handleRadius_) - 1.0); + endPoint.SetY(NormalizeToPx(handleRadius_) + lineHeight_ + NormalizeToPx(1.0_vp)); + } + skCanvas->drawLine(startPoint.GetX(), startPoint.GetY(), endPoint.GetX(), endPoint.GetY(), paint); + skCanvas->restore(); +} + +void FlutterRenderTextOverlay::PaintMagnifier(RenderContext& context) +{ + auto textField = weakTextField_.Upgrade(); + auto flutterTextField = AceType::DynamicCast(textField); + if (!flutterTextField) { + return; + } + auto bitMap = flutterTextField->GetBitmap(); + auto canvas = ScopedCanvas::Create(context); + if (!canvas) { + return; + } + auto pipelineContext = context_.Upgrade(); + double viewScale = pipelineContext->GetViewScale(); + SkCanvas* skCanvas = canvas->canvas(); + double globalX = 0.0; + double globalY = 0.0; + double x = 0.0; + double y = 0.0; + if (isTouchEndDrag_ || isSingleHandle_) { + auto caretRect = flutterTextField->GetCaretRect(); + auto textFieldGlobalOffset = flutterTextField->GetGlobalOffset(); + globalX = textFieldGlobalOffset.GetX() + caretRect.GetOffset().GetX() + caretRect.Width() / 2 - + NormalizeToPx(MAGNIFIER_RADIUS); + globalY = textFieldGlobalOffset.GetY() + caretRect.GetOffset().GetY() - NormalizeToPx(MAGNIFIER_WIDTH) - + NormalizeToPx(MAGNIFIER_OFFSET); + if (!isSingleHandle_ && NeedAdjustEndHandle()) { + globalY -= NormalizeToPx(FIRST_DRAG_OFFSET - MAGNIFIER_OFFSET); + } + x = caretRect.GetOffset().GetX() + caretRect.Width() / 2 - NormalizeToPx(MAGNIFIER_RADIUS); + y = caretRect.GetOffset().GetY() + caretRect.Height() / 2 - NormalizeToPx(MAGNIFIER_RADIUS); + } else if (isTouchStartDrag_) { + auto caretRect = flutterTextField->GetStartRect(); + auto textFieldGlobalOffset = flutterTextField->GetGlobalOffset(); + globalX = textFieldGlobalOffset.GetX() + caretRect.GetOffset().GetX() + caretRect.Width() / 2 - + NormalizeToPx(MAGNIFIER_RADIUS); + globalY = textFieldGlobalOffset.GetY() + caretRect.GetOffset().GetY() - NormalizeToPx(MAGNIFIER_WIDTH) - + NormalizeToPx(FIRST_DRAG_OFFSET); + + if (!isSingleHandle_ && NeedAdjustStartHandle()) { + globalY += NormalizeToPx(FIRST_DRAG_OFFSET - MAGNIFIER_OFFSET); + } + x = caretRect.GetOffset().GetX() + caretRect.Width() / 2 - NormalizeToPx(MAGNIFIER_RADIUS); + y = caretRect.GetOffset().GetY() + caretRect.Height() / 2 - NormalizeToPx(MAGNIFIER_RADIUS); + } else { + return; + } + + globalX = LessOrEqual(globalX, 0.0) ? 0.0 : globalX; + globalY = LessOrEqual(globalY, 0.0) ? 0.0 : globalY; + + SkRRect rrect = SkRRect::MakeRectXY( + SkRect::MakeXYWH(globalX, globalY, NormalizeToPx(MAGNIFIER_WIDTH), NormalizeToPx(MAGNIFIER_WIDTH)), + NormalizeToPx(MAGNIFIER_WIDTH), NormalizeToPx(MAGNIFIER_WIDTH)); + + FlutterDecorationPainter::PaintShadow(SkPath().addRRect(rrect), ShadowConfig::DefaultShadowM, skCanvas); + + SkRRect ScaleRrect = + SkRRect::MakeRectXY(SkRect::MakeXYWH(globalX * viewScale, globalY * viewScale, + NormalizeToPx(MAGNIFIER_WIDTH) * viewScale, NormalizeToPx(MAGNIFIER_WIDTH) * viewScale), + NormalizeToPx(MAGNIFIER_WIDTH) * viewScale, NormalizeToPx(MAGNIFIER_WIDTH) * viewScale); + + skCanvas->save(); + skCanvas->scale(1.0 / viewScale, 1.0 / viewScale); + SkPaint paint; + skCanvas->clipRRect(ScaleRrect, true); + + paint.setColor(SK_ColorWHITE); + paint.setAntiAlias(true); + skCanvas->drawRRect(ScaleRrect, paint); + + skCanvas->drawBitmapRect(bitMap, + SkRect::MakeXYWH(x * viewScale * MAGNIFIER_GAIN + FIXED_OFFSET, y * viewScale * MAGNIFIER_GAIN + FIXED_OFFSET, + NormalizeToPx(MAGNIFIER_WIDTH) * viewScale, NormalizeToPx(MAGNIFIER_WIDTH) * viewScale), + SkRect::MakeXYWH(globalX * viewScale, globalY * viewScale, NormalizeToPx(MAGNIFIER_WIDTH) * viewScale, + NormalizeToPx(MAGNIFIER_WIDTH) * viewScale), nullptr); + skCanvas->restore(); +} + +void FlutterRenderTextOverlay::PaintClipLine(SkCanvas* skCanvas, SkPaint paint) +{ + if (!skCanvas) { + LOGE("Paint skCanvas is null"); + return; + } + + if (LessOrEqual(clipWidth_, 0.0)) { + return; + } + + paint.setStrokeWidth(NormalizeToPx(Dimension(clipWidth_, DimensionUnit::VP))); + paint.setColor(clipColor_.GetValue()); + SkPath linePath; + linePath.moveTo(SkDoubleToScalar(NormalizeToPx(CLIP_ORIGIN_X)), SkDoubleToScalar(NormalizeToPx(CLIP_ORIGIN_Y))); + linePath.rLineTo(SkDoubleToScalar(NormalizeToPx(CLIP_LENGTH)), SkDoubleToScalar(NormalizeToPx(CLIP_LENGTH))); + skCanvas->drawPath(linePath, paint); +} + +void FlutterRenderTextOverlay::InitMoreButtonPaintColor() +{ + RefPtr theme = GetTheme(); + if (theme) { + clipColor_ = theme->GetMenuBackgroundColor(); + arrowColor_ = theme->GetMenuButtonTextStyle().GetTextColor(); + } +} + +Offset FlutterRenderTextOverlay::CalculateMoreButtonCenter() +{ + Offset offset = moreButtonPosition_; + if (textDirection_ == TextDirection::RTL) { + offset += Offset(NormalizeToPx(ICON_PADDING), NormalizeToPx(ICON_PADDING)); + } else { + offset += Offset(-NormalizeToPx(ICON_SIZE + ICON_PADDING), NormalizeToPx(ICON_PADDING)); + } + RefPtr theme = GetTheme(); + if (theme) { + auto padding = theme->GetMenuPadding(); + if (textDirection_ == TextDirection::RTL) { + offset += Offset(NormalizeToPx(padding.Left()), NormalizeToPx(padding.Top())); + } else { + offset += Offset(-NormalizeToPx(padding.Right()), NormalizeToPx(padding.Top())); + } + } + return offset; +} + +bool FlutterRenderTextOverlay::CheckNeedPaintMore() +{ + auto overlay = overlayComponent_.Upgrade(); + if (overlay && !overlay->HasMoreButton()) { + LOGD("not has a more button"); + return false; + } + + if (isDragging_) { + LOGD("handle is in dragging"); + return false; + } + + if (hasPoped_ || GetChildren().empty()) { + LOGD("overlay has been poped"); + RestoreMoreButtonStyle(); + return false; + } + + if (HasToolBarOnly()) { + RestoreMoreButtonStyle(); + } + + return true; +} + +void FlutterRenderTextOverlay::PaintMore(RenderContext& context) +{ + if (!CheckNeedPaintMore()) { + return; + } + + const auto renderContext = static_cast(&context); + flutter::Canvas* canvas = renderContext->GetCanvas(); + if (canvas == nullptr) { + LOGE("Paint canvas is null"); + return; + } + SkCanvas* skCanvas = canvas->canvas(); + if (skCanvas == nullptr) { + LOGE("Paint skCanvas is null"); + return; + } + + auto pipelineContext = context_.Upgrade(); + double dipScale = 1.0; + if (pipelineContext) { + dipScale = pipelineContext->GetDipScale(); + } + InitMoreButtonPaintColor(); + Offset moreOffset = CalculateMoreButtonCenter(); + Offset center = (DOT1_POSITION + DOT4_POSITION) * dipScale * HALF; + skCanvas->save(); + skCanvas->translate(moreOffset.GetX() + center.GetX(), moreOffset.GetY() + center.GetY()); + if (textDirection_ == TextDirection::RTL) { + // mirror effect + skCanvas->scale(-1.0, 1.0); + } + skCanvas->rotate(rotateDegree_); + skCanvas->translate(-center.GetX(), -center.GetY()); + + Offset topLeft = (DOT1_POSITION + dot1StartOffset_) * dipScale; + Offset topRight = (DOT2_POSITION + dot2StartOffset_) * dipScale; + Offset bottomLeft = (DOT3_POSITION + dot3StartOffset_) * dipScale; + Offset bottomRight = (DOT4_POSITION + dot4StartOffset_) * dipScale; + + SkPaint skPaint; + skPaint.setAntiAlias(true); + skPaint.setColor(arrowColor_.GetValue()); + skPaint.setStyle(SkPaint::Style::kStroke_Style); + skPaint.setStrokeWidth(NormalizeToPx(strokeWidth_)); + skPaint.setStrokeCap(SkPaint::Cap::kRound_Cap); + + SkPath path; + path.moveTo(SkDoubleToScalar(topLeft.GetX()), SkDoubleToScalar(topLeft.GetY())); + path.lineTo(SkDoubleToScalar(topLeft.GetX()), SkDoubleToScalar(topLeft.GetY())); + path.moveTo(SkDoubleToScalar(topRight.GetX()), SkDoubleToScalar(topRight.GetY())); + path.rLineTo(SkDoubleToScalar(dot2Offset_.GetX() * dipScale), SkDoubleToScalar(0.0)); + path.moveTo(SkDoubleToScalar(bottomLeft.GetX()), SkDoubleToScalar(bottomLeft.GetY())); + path.rLineTo(SkDoubleToScalar(0.0), SkDoubleToScalar(dot3Offset_.GetY() * dipScale)); + path.moveTo(SkDoubleToScalar(bottomRight.GetX()), SkDoubleToScalar(bottomRight.GetY())); + path.rLineTo(SkDoubleToScalar(dot4Offset_.GetX() * dipScale), SkDoubleToScalar(dot4Offset_.GetY() * dipScale)); + skCanvas->drawPath(path, skPaint); + + PaintClipLine(skCanvas, skPaint); + skCanvas->restore(); +} + +void FlutterRenderTextOverlay::AdjustForAnimation() +{ + ResetRenderChild(); + InitRenderChild(AceType::Claim(this)); + if (!renderBox_ || !renderClip_) { + return; + } + double moreButtonSize = NormalizeToPx(MORE_BUTTON_SIZE); + + // Adjust box and menu for painting before animation. + if (!isAnimationStarted_ && GetChildren().front()) { + if (hasMenu_) { + if (renderMenu_) { + renderMenu_->SetIsWattingForAnimationStart(true); + } + } else { + renderBox_->SetPaintSize(Size(moreButtonSize, moreButtonSize)); + renderBox_->SetPosition(Offset(GetChildren().front()->GetLayoutSize().Width() - moreButtonSize, 0.0)); + } + } else { + if (renderMenu_) { + renderMenu_->SetIsWattingForAnimationStart(false); + } + } + + // Adjust box for painting after animation. + if (isAnimationStopped_ && hasMenu_ && GetChildren().front()) { + renderBox_->SetPaintSize(Size(moreButtonSize, moreButtonSize)); + renderBox_->SetPosition(Offset(GetChildren().front()->GetLayoutSize().Width() - moreButtonSize, 0.0)); + } +} + +bool FlutterRenderTextOverlay::NeedAdjustEndHandle() +{ + auto textField = weakTextField_.Upgrade(); + auto flutterTextField = AceType::DynamicCast(textField); + if (!flutterTextField) { + LOGE("FlutterTextField is nullptr"); + return false; + } + return flutterTextField->GetEditingValue().selection.GetEnd() <= startIndex_; +} + +bool FlutterRenderTextOverlay::NeedAdjustStartHandle() +{ + auto textField = weakTextField_.Upgrade(); + auto flutterTextField = AceType::DynamicCast(textField); + if (!flutterTextField) { + LOGE("FlutterTextField is nullptr"); + return false; + } + return flutterTextField->GetEditingValue().selection.GetEnd() > endIndex_; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/text_overlay/flutter_render_text_overlay.h b/frameworks/core/components/text_overlay/flutter_render_text_overlay.h new file mode 100644 index 00000000..ca9f27ea --- /dev/null +++ b/frameworks/core/components/text_overlay/flutter_render_text_overlay.h @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_OVERLAY_FLUTTER_RENDER_TEXT_OVERLAY_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_OVERLAY_FLUTTER_RENDER_TEXT_OVERLAY_H + +#include "third_party/skia/include/core/SkCanvas.h" + +#include "core/components/text_overlay/render_text_overlay.h" +#include "core/pipeline/base/flutter_render_context.h" + +namespace OHOS::Ace { + +class FlutterRenderTextOverlay final : public RenderTextOverlay { + DECLARE_ACE_TYPE(FlutterRenderTextOverlay, RenderTextOverlay) + +public: + FlutterRenderTextOverlay() = default; + ~FlutterRenderTextOverlay() override = default; + + void Paint(RenderContext& context, const Offset& offset) override; + +private: + void PaintHandles(RenderContext& context) const; + void PaintHandle(SkCanvas* skCanvas, Offset centerOffset, bool isLeftHandle = false) const; + void PaintMagnifier(RenderContext& context); + void PaintClipLine(SkCanvas* skCanvas, SkPaint paint); + void PaintMore(RenderContext& context); + void InitMoreButtonPaintColor(); + Offset CalculateMoreButtonCenter(); + bool CheckNeedPaintMore(); + bool NeedAdjustStartHandle(); + bool NeedAdjustEndHandle(); + void AdjustForAnimation(); + + Color clipColor_ = Color::WHITE; + Color arrowColor_ = Color::BLACK; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_OVERLAY_FLUTTER_RENDER_TEXT_OVERLAY_H diff --git a/frameworks/core/components/text_overlay/render_text_overlay.cpp b/frameworks/core/components/text_overlay/render_text_overlay.cpp new file mode 100644 index 00000000..3683d712 --- /dev/null +++ b/frameworks/core/components/text_overlay/render_text_overlay.cpp @@ -0,0 +1,900 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/text_overlay/render_text_overlay.h" + +#include "core/components/focus_collaboration/render_focus_collaboration.h" +#include "core/components/stack/stack_element.h" + +namespace OHOS::Ace { +namespace { + +const Offset DOT1_OFFSET = Offset(-0.790737726, -1.290737726); +const Offset DOT2_OFFSET = Offset(-0.623475836, -1.290737726); +const Offset DOT3_OFFSET = Offset(-0.790737726, -0.123475836); +const Offset DOT4_OFFSET = Offset(0.790737726, 1.290737726); +const Offset END_POINT = DOT1_POSITION + DOT1_OFFSET; +constexpr Dimension TOOL_BAR_HEIGHT = 40.0_vp; +constexpr Dimension HANDLE_HOTZONE_DIAMETER = 20.0_vp; +constexpr Dimension MORE_BUTTON_SIZE = 40.0_vp; +constexpr Dimension ANIMATION_OFFSET_X = 16.0_vp; +constexpr double DEFAULT_SPACING = 10.0; +constexpr double FIFTY_PERCENT = 0.5; +constexpr double ROTATE_DEGREE = -45.0; +constexpr double CLIP_WIDTH = 1.0; +constexpr double OPACITY_KEYFRAME = 250.0 / 350.0; // Clip and translate animation is 350ms, opacity animation is 250ms. +constexpr float KEYFRAME_PERCENT_THIRTY = 0.33f; +constexpr float KEYFRAME_BEGINNING = 0.0f; +constexpr float KEYFRAME_ENDING = 1.0f; +constexpr int32_t MORE_ANIMATION_DURATION = 300; // Duration of more icon animation. +constexpr int32_t ANIMATION_DURATION = 350; // Duration of clip and translate animation + +} // namespace + +RenderTextOverlay::RenderTextOverlay() +{ + clickDetector_ = AceType::MakeRefPtr(); + clickDetector_->SetOnClick([weak = AceType::WeakClaim(this)](const ClickInfo& clickInfo) { + auto overlay = weak.Upgrade(); + if (overlay) { + overlay->HandleClick(clickInfo.GetLocalLocation()); + } + }); + + dragDetector_ = AceType::MakeRefPtr(Axis::FREE); + dragDetector_->SetOnDragStart([weak = AceType::WeakClaim(this)](const DragStartInfo& startInfo) { + auto overlay = weak.Upgrade(); + if (overlay) { + overlay->HandleDragStart(startInfo.GetLocalLocation()); + } + }); + + dragDetector_->SetOnDragUpdate([weak = AceType::WeakClaim(this)](const DragUpdateInfo& updateInfo) { + auto overlay = weak.Upgrade(); + if (overlay) { + overlay->HandleDragUpdateAndEnd(updateInfo.GetLocalLocation()); + } + }); + + dragDetector_->SetOnDragEnd([weak = AceType::WeakClaim(this)](const DragEndInfo& endInfo) { + auto overlay = weak.Upgrade(); + if (overlay) { + overlay->HandleDragUpdateAndEnd(endInfo.GetLocalLocation()); + overlay->isDragging_ = false; + } + }); + + touchDetector_ = AceType::MakeRefPtr(); + touchDetector_->SetOnTouchDown([weak = AceType::WeakClaim(this)](const TouchEventInfo& info) { + auto overlay = weak.Upgrade(); + if (overlay) { + overlay->showMagnifier_ = true; + auto startOffset = info.GetTouches().front().GetLocalLocation(); + if (overlay->startHandleRegion_.ContainsInRegion(startOffset.GetX(), startOffset.GetY())) { + overlay->isTouchStartDrag_ = true; + overlay->isTouchEndDrag_ = false; + } else { + overlay->isTouchStartDrag_ = false; + overlay->isTouchEndDrag_ = + overlay->endHandleRegion_.ContainsInRegion(startOffset.GetX(), startOffset.GetY()); + } + } + }); + + touchDetector_->SetOnTouchUp([weak = AceType::WeakClaim(this)](const TouchEventInfo&) { + auto overlay = weak.Upgrade(); + if (overlay) { + overlay->showMagnifier_ = false; + } + }); +} + +RenderTextOverlay::~RenderTextOverlay() +{ + auto renderTextField = weakTextField_.Upgrade(); + if (renderTextField) { + renderTextField->SetIsOverlayShowed(false, needStartTwinkling_); + } + auto spOverlayComponent = overlayComponent_.Upgrade(); + if (spOverlayComponent) { + RemoveBackendEvent(spOverlayComponent); + } +} + +void RenderTextOverlay::Update(const RefPtr& component) +{ + auto overlay = AceType::DynamicCast(component); + if (!overlay) { + return; + } + overlayComponent_ = overlay; + overlay->SetPopOverlay([weak = WeakClaim(this)]() { + auto overlay = weak.Upgrade(); + if (overlay) { + overlay->needCloseKeyboard_ = false; + overlay->PopOverlay(); + } + }); + onFocusChange_ = overlay->GetOnFocusChange(); + onCut_ = overlay->GetOnCut(); + onCopy_ = overlay->GetOnCopy(); + onPaste_ = overlay->GetOnPaste(); + onCopyAll_ = overlay->GetOnCopyAll(); + startHandleOffset_ = overlay->GetStartHandleOffset(); + endHandleOffset_ = overlay->GetEndHandleOffset(); + onStartHandleMove_ = overlay->GetOnStartHandleMove(); + onEndHandleMove_ = overlay->GetOnEndHandleMove(); + isSingleHandle_ = overlay->GetIsSingleHandle() || (startHandleOffset_ == endHandleOffset_); + lineHeight_ = overlay->GetLineHeight(); + handleDiameter_ = overlay->GetHandleDiameter(); + menuSpacingWithHandle_ = handleDiameter_; + handleDiameterInner_ = overlay->GetHandleDiameterInner(); + handleRadius_ = handleDiameter_ / 2.0; + handleRadiusInner_ = handleDiameterInner_ / 2.0; + menuSpacingWithText_ = overlay->GetMenuSpacingWithText(); + handleColor_ = overlay->GetHandleColor(); + handleColorInner_ = overlay->GetHandleColorInner(); + clipRect_ = overlay->GetClipRect(); + textDirection_ = overlay->GetTextDirection(); + realTextDirection_ = overlay->GetRealTextDirection(); + BindBackendEvent(overlay); + UpdateWeakTextField(overlay); + MarkNeedLayout(); +} + +void RenderTextOverlay::BindBackendEvent(const RefPtr& overlay) +{ + BackEndEventManager::GetInstance().BindBackendEvent( + overlay->GetCutButtonMarker(), [weak = WeakClaim(this)]() { + auto overlay = weak.Upgrade(); + if (overlay) { + overlay->HandleCut(); + } + }); + + BackEndEventManager::GetInstance().BindBackendEvent( + overlay->GetCopyButtonMarker(), [weak = WeakClaim(this)]() { + auto overlay = weak.Upgrade(); + if (overlay) { + overlay->HandleCopy(); + } + }); + + BackEndEventManager::GetInstance().BindBackendEvent( + overlay->GetPasteButtonMarker(), [weak = WeakClaim(this)]() { + auto overlay = weak.Upgrade(); + if (overlay) { + overlay->HandlePaste(); + } + }); + + BackEndEventManager::GetInstance().BindBackendEvent( + overlay->GetCopyAllButtonMarker(), [weak = WeakClaim(this)]() { + auto overlay = weak.Upgrade(); + if (overlay) { + overlay->HandleCopyAll(); + } + }); + + BackEndEventManager::GetInstance().BindBackendEvent( + overlay->GetMoreButtonMarker(), [weak = WeakClaim(this)]() { + auto overlay = weak.Upgrade(); + if (overlay) { + overlay->HandleMoreButtonClick(); + } + }); +} + +void RenderTextOverlay::RemoveBackendEvent(const RefPtr& overlay) +{ + BackEndEventManager::GetInstance().RemoveBackEndEvent(overlay->GetCutButtonMarker()); + BackEndEventManager::GetInstance().RemoveBackEndEvent(overlay->GetCopyButtonMarker()); + BackEndEventManager::GetInstance().RemoveBackEndEvent(overlay->GetPasteButtonMarker()); + BackEndEventManager::GetInstance().RemoveBackEndEvent(overlay->GetCopyAllButtonMarker()); + BackEndEventManager::GetInstance().RemoveBackEndEvent(overlay->GetMoreButtonMarker()); +} + +void RenderTextOverlay::UpdateWeakTextField(const RefPtr& overlay) +{ + if (!overlay) { + return; + } + weakTextField_ = overlay->GetWeakTextField(); + auto renderTextField = weakTextField_.Upgrade(); + if (!renderTextField) { + return; + } + auto callback = [weak = WeakClaim(this)](const OverlayShowOption& option) { + auto overlay = weak.Upgrade(); + if (!overlay) { + return; + } + if (option.updateOverlayType == UpdateOverlayType::CLICK || + option.updateOverlayType == UpdateOverlayType::LONG_PRESS) { + overlay->childRightBoundary_ = 0.0; + } + if (option.startHandleOffset == overlay->startHandleOffset_ && + option.endHandleOffset == overlay->endHandleOffset_) { + return; + } + overlay->SetVisible(true); + overlay->showOption_ = option; + overlay->startHandleOffset_ = option.startHandleOffset; + overlay->endHandleOffset_ = option.endHandleOffset; + overlay->isSingleHandle_ = option.isSingleHandle; + if (option.updateOverlayType == UpdateOverlayType::CLICK) { + if (overlay->onRebuild_) { + overlay->hasMenu_ = false; + overlay->onRebuild_(true, false, false, false, false); + } + } else if (option.updateOverlayType == UpdateOverlayType::LONG_PRESS) { + if (overlay->onRebuild_) { + overlay->hasMenu_ = false; + overlay->onRebuild_(false, true, false, true, false); + } + } + }; + renderTextField->SetUpdateHandlePosition(callback); + + auto callbackDiameter = [weak = WeakClaim(this)](const double& value) { + auto overlay = weak.Upgrade(); + if (!overlay) { + LOGE("UpdateWeakTextField error, overlay is nullptr"); + return; + } + + overlay->SetVisible(true); + if (overlay->onRebuild_) { + overlay->onRebuild_(overlay->isSingleHandle_, !overlay->isSingleHandle_, overlay->hasMenu_, + !overlay->isSingleHandle_, false); + } + overlay->handleDiameter_ = Dimension(value, DimensionUnit::VP); + overlay->handleRadius_ = overlay->handleDiameter_ * FIFTY_PERCENT; + }; + renderTextField->SetUpdateHandleDiameter(callbackDiameter); + + auto callbackDiameterInner = [weak = WeakClaim(this)](const double& value) { + auto overlay = weak.Upgrade(); + if (!overlay) { + LOGE("UpdateWeakTextField error, overlay is nullptr"); + return; + } + + overlay->SetVisible(true); + if (overlay->onRebuild_) { + overlay->onRebuild_(overlay->isSingleHandle_, !overlay->isSingleHandle_, overlay->hasMenu_, + !overlay->isSingleHandle_, false); + } + overlay->handleDiameterInner_ = Dimension(value, DimensionUnit::VP); + overlay->handleRadiusInner_ = overlay->handleDiameterInner_ * FIFTY_PERCENT; + }; + renderTextField->SetUpdateHandleDiameterInner(callbackDiameterInner); + + auto onValueChange = [weak = WeakClaim(this)] { + auto overlay = weak.Upgrade(); + if (overlay) { + overlay->needCloseKeyboard_ = false; + overlay->PopOverlay(); + } + }; + renderTextField->SetOnValueChange(onValueChange); + + auto onKeyboardClose = [weak = WeakClaim(this)](bool forceCloseKeyboard) { + auto overlay = weak.Upgrade(); + if (overlay) { + overlay->needCloseKeyboard_ = !forceCloseKeyboard; + overlay->needStartTwinkling_ = !forceCloseKeyboard; + overlay->PopOverlay(); + } + }; + renderTextField->SetOnKeyboardClose(onKeyboardClose); + + auto onClipRectChanged = [weak = WeakClaim(this)](const Rect& clipRect) { + auto overlay = weak.Upgrade(); + if (overlay && (overlay->clipRect_ != clipRect)) { + overlay->clipRect_ = clipRect; + overlay->MarkNeedLayout(); + } + }; + renderTextField->SetOnClipRectChanged(onClipRectChanged); +} + +void RenderTextOverlay::PerformLayout() +{ + double handleRadius = NormalizeToPx(handleRadius_); + startHandleCenter_ = Offset(-handleRadius, handleRadius); + endHandleCenter_ = Offset(handleRadius, handleRadius); + + if (!GetChildren().empty()) { + const auto& child = GetChildren().front(); + if (child) { + child->Layout(GetLayoutParam()); + child->SetPosition(ComputeChildPosition(child)); + if (NearZero(childRightBoundary_)) { + childRightBoundary_ = child->GetPosition().GetX() + child->GetLayoutSize().Width(); + } else { + child->SetPosition( + Offset(childRightBoundary_ - child->GetLayoutSize().Width(), child->GetPosition().GetY())); + } + } + SetLayoutSize(GetLayoutParam().GetMaxSize()); + + // If child size is changed, refresh animation, when there is tool bar only. + if (HasToolBarOnly()) { + double horizonOffsetForAnimation = child->GetLayoutSize().Width() - NormalizeToPx(MORE_BUTTON_SIZE); + if (!NearEqual(horizonOffsetForAnimation, horizonOffsetForAnimation_)) { + horizonOffsetForAnimation_ = horizonOffsetForAnimation; + isAnimationInited_ = false; + } + } + if (child && renderClip_) { + renderClip_->SetShadowBoxOffset(Offset( + std::max( + child->GetLayoutSize().Width() - horizonOffsetForAnimation_ - NormalizeToPx(MORE_BUTTON_SIZE), 0.0), + 0.0)); + } + + if (textDirection_ == TextDirection::RTL) { + moreButtonPosition_ = child->GetGlobalOffset(); + } else { + moreButtonPosition_ = child->GetGlobalOffset() + Offset(child->GetLayoutSize().Width(), 0.0); + } + } + + // Compute touch region of handle. + double hotZoneDiameter = NormalizeToPx(HANDLE_HOTZONE_DIAMETER); + double hotZoneRadius = hotZoneDiameter / 2.0; + if (isSingleHandle_) { + startHandleRegion_ = TouchRegion(startHandleOffset_ + Offset(-hotZoneRadius, 0.0), + startHandleOffset_ + Offset(hotZoneRadius, hotZoneDiameter)); + } else { + startHandleRegion_ = TouchRegion(startHandleOffset_ + Offset(-hotZoneRadius, -lineHeight_ - hotZoneDiameter), + startHandleOffset_ + Offset(hotZoneRadius, -lineHeight_)); + endHandleRegion_ = TouchRegion( + endHandleOffset_ + Offset(-hotZoneRadius, 0.0), endHandleOffset_ + Offset(hotZoneRadius, hotZoneDiameter)); + } + + InitAnimation(); +} + +Offset RenderTextOverlay::ComputeChildPosition(const RefPtr& child) +{ + Offset startHandleOffset = startHandleOffset_; + startHandleOffset.SetX(std::clamp(startHandleOffset.GetX(), clipRect_.Left(), clipRect_.Right())); + startHandleOffset.SetY(std::clamp(startHandleOffset.GetY(), clipRect_.Top(), clipRect_.Bottom())); + Offset endHandleOffset = endHandleOffset_; + endHandleOffset.SetX(std::clamp(endHandleOffset.GetX(), clipRect_.Left(), clipRect_.Right())); + endHandleOffset.SetY(std::clamp(endHandleOffset.GetY(), clipRect_.Top(), clipRect_.Bottom())); + if (!NearEqual(startHandleOffset.GetY(), endHandleOffset.GetY())) { + startHandleOffset.SetX(clipRect_.Left()); + endHandleOffset.SetX(clipRect_.Right()); + } + + // Calculate the spacing with text and handle, menu is fixed up the handle and text. + double menuSpacingWithText = NormalizeToPx(menuSpacingWithText_); + double menuSpacingWithHandle = NormalizeToPx(menuSpacingWithHandle_); + double menuSpacing = isSingleHandle_ ? menuSpacingWithText : menuSpacingWithHandle + menuSpacingWithText; + + Offset childPosition = + Offset((startHandleOffset.GetX() + endHandleOffset.GetX() - child->GetLayoutSize().Width()) / 2.0, + startHandleOffset.GetY() - lineHeight_ - menuSpacing - NormalizeToPx(TOOL_BAR_HEIGHT)); + // Adjust position of overlay. + if (LessOrEqual(childPosition.GetX(), 0.0)) { + childPosition.SetX(DEFAULT_SPACING); + } else if (GreatOrEqual( + childPosition.GetX() + child->GetLayoutSize().Width(), GetLayoutParam().GetMaxSize().Width())) { + childPosition.SetX(GetLayoutParam().GetMaxSize().Width() - child->GetLayoutSize().Width() - DEFAULT_SPACING); + } + if (LessNotEqual(childPosition.GetY(), 0.0)) { + childPosition.SetY(endHandleOffset_.GetY() + menuSpacingWithHandle + menuSpacingWithText); + } + return childPosition; +} + +void RenderTextOverlay::InitAnimation() +{ + if (isAnimationInited_) { + return; + } + isAnimationInited_ = true; + + // Create tween option for in. + // Add offset animation for outer tween. + auto xCurveIn = AceType::MakeRefPtr>(horizonOffsetForAnimation_, 0.0f, Curves::FRICTION); + tweenOptionIn_.SetPropertyAnimationFloat(PropertyAnimatableType::PROPERTY_OFFSET_X, xCurveIn); + + // Add opacity animation for outer tween. + auto opacityKeyframeInFirst = AceType::MakeRefPtr>(0.0f, 0.0f); + auto opacityKeyframeInSecond = AceType::MakeRefPtr>(OPACITY_KEYFRAME, 1.0f); + opacityKeyframeInSecond->SetCurve(Curves::SHARP); + auto opacityKeyframeInThird = AceType::MakeRefPtr>(1.0f, 1.0f); + auto opacityAnimationIn = AceType::MakeRefPtr>(); + opacityAnimationIn->AddKeyframe(opacityKeyframeInFirst); + opacityAnimationIn->AddKeyframe(opacityKeyframeInSecond); + opacityAnimationIn->AddKeyframe(opacityKeyframeInThird); + tweenOptionIn_.SetOpacityAnimation(opacityAnimationIn); + tweenOptionIn_.SetDuration(ANIMATION_DURATION); + tweenOptionIn_.SetFillMode(FillMode::FORWARDS); + + // Add translate animation for inner tween. + auto xTranslateIn = AceType::MakeRefPtr>( + DimensionOffset(ANIMATION_OFFSET_X, 0.0_vp), DimensionOffset(0.0_vp, 0.0_vp), Curves::FRICTION); + innerTweenOptionIn_.SetTranslateAnimations(AnimationType::TRANSLATE_X, xTranslateIn); + innerTweenOptionIn_.SetDuration(ANIMATION_DURATION); + innerTweenOptionIn_.SetFillMode(FillMode::FORWARDS); + + // Create tween option for out. + // Add offset animation for outer tween. + auto xCurveOut = AceType::MakeRefPtr>(0.0f, horizonOffsetForAnimation_, Curves::FRICTION); + tweenOptionOut_.SetPropertyAnimationFloat(PropertyAnimatableType::PROPERTY_OFFSET_X, xCurveOut); + + // Add opacity animation for outer tween. + auto opacityKeyframeOutFirst = AceType::MakeRefPtr>(0.0f, 1.0f); + auto opacityKeyframeOutSecond = AceType::MakeRefPtr>(OPACITY_KEYFRAME, 0.0f); + opacityKeyframeOutSecond->SetCurve(Curves::SHARP); + auto opacityKeyframeOutThird = AceType::MakeRefPtr>(1.0f, 0.0f); + auto opacityAnimationOut = AceType::MakeRefPtr>(); + opacityAnimationOut->AddKeyframe(opacityKeyframeOutFirst); + opacityAnimationOut->AddKeyframe(opacityKeyframeOutSecond); + opacityAnimationOut->AddKeyframe(opacityKeyframeOutThird); + tweenOptionOut_.SetOpacityAnimation(opacityAnimationOut); + tweenOptionOut_.SetDuration(ANIMATION_DURATION); + tweenOptionOut_.SetFillMode(FillMode::FORWARDS); + + // Create translate animation for inner tween. + auto xTranslateOut = AceType::MakeRefPtr>( + DimensionOffset(0.0_vp, 0.0_vp), DimensionOffset(ANIMATION_OFFSET_X, 0.0_vp), Curves::FRICTION); + innerTweenOptionOut_.SetTranslateAnimations(AnimationType::TRANSLATE_X, xTranslateOut); + innerTweenOptionOut_.SetDuration(ANIMATION_DURATION); + innerTweenOptionOut_.SetFillMode(FillMode::FORWARDS); +} + +bool RenderTextOverlay::TouchTest(const Point& globalPoint, const Point& parentLocalPoint, + const TouchRestrict& touchRestrict, TouchTestResult& result) +{ + if (GetDisableTouchEvent() || disabled_ || !isAnimationStopped_) { + return false; + } + const auto localPoint = parentLocalPoint - GetPaintRect().GetOffset(); + if (showOption_.showMenu) { + for (auto iter = GetChildren().rbegin(); iter != GetChildren().rend(); ++iter) { + const auto& child = *iter; + if (child->TouchTest(globalPoint, localPoint, touchRestrict, result)) { + return true; + } + } + } + if (startHandleRegion_.ContainsInRegion(parentLocalPoint.GetX(), parentLocalPoint.GetY()) || + endHandleRegion_.ContainsInRegion(parentLocalPoint.GetX(), parentLocalPoint.GetY())) { + const auto coordinateOffset = globalPoint - localPoint; + globalPoint_ = globalPoint; + OnTouchTestHit(coordinateOffset, touchRestrict, result); + return true; + } + return false; +} + +void RenderTextOverlay::OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) +{ + clickDetector_->SetCoordinateOffset(coordinateOffset); + result.emplace_back(clickDetector_); + dragDetector_->SetCoordinateOffset(coordinateOffset); + result.emplace_back(dragDetector_); + touchDetector_->SetCoordinateOffset(coordinateOffset); + result.emplace_back(touchDetector_); +} + +void RenderTextOverlay::HandleClick(const Offset& clickOffset) +{ + if (isSingleHandle_ && startHandleRegion_.ContainsInRegion(clickOffset.GetX(), clickOffset.GetY())) { + childRightBoundary_ = 0.0; + showOption_.showMenu = true; + auto textField = weakTextField_.Upgrade(); + if (textField) { + textField->SetIsOverlayShowed(true, false); + } + if (onRebuild_) { + OnFocusChange(RenderStatus::FOCUS); + onRebuild_(true, true, hasMenu_, true, false); + } + } +} + +void RenderTextOverlay::HandleDragStart(const Offset& startOffset) +{ + childRightBoundary_ = 0.0; + showOption_.showMenu = true; + auto textField = weakTextField_.Upgrade(); + if (!textField) { + LOGE("TextField is nullptr"); + return; + } + + // Mark start and end index + startIndex_ = textField->GetEditingValue().selection.GetStart(); + endIndex_ = textField->GetEditingValue().selection.GetEnd(); + + // Mark start or end flag and mark the index + if (startHandleRegion_.ContainsInRegion(startOffset.GetX(), startOffset.GetY())) { + isStartDrag_ = true; + isEndDrag_ = false; + textField->SetInitIndex(endIndex_); + } else { + isStartDrag_ = false; + isEndDrag_ = endHandleRegion_.ContainsInRegion(startOffset.GetX(), startOffset.GetY()); + textField->SetInitIndex(startIndex_); + } +} + +void RenderTextOverlay::HandleDragUpdateAndEnd(const Offset& offset) +{ + childRightBoundary_ = 0.0; + if (isStartDrag_) { + auto startCallback = [weak = WeakClaim(this)](const Offset& startHandleOffset) { + auto overlay = weak.Upgrade(); + if (overlay) { + overlay->startHandleOffset_ = startHandleOffset; + if (overlay->isSingleHandle_) { + overlay->endHandleOffset_ = startHandleOffset; + } + overlay->MarkNeedLayout(); + } + }; + onStartHandleMove_(endIndex_, offset - Offset(0.0, lineHeight_), startCallback, isSingleHandle_); + isDragging_ = true; + } else if (isEndDrag_) { + auto endCallback = [weak = WeakClaim(this)](const Offset& endHandleOffset) { + auto overlay = weak.Upgrade(); + if (overlay) { + overlay->endHandleOffset_ = endHandleOffset; + overlay->MarkNeedLayout(); + } + }; + onEndHandleMove_(startIndex_, offset - Offset(0.0, lineHeight_), endCallback); + isDragging_ = true; + } +} + +void RenderTextOverlay::HandleCut() +{ + needCloseKeyboard_ = false; + if (onCut_) { + onCut_(); + } + PopOverlay(); +} + +void RenderTextOverlay::HandleCopy() +{ + needCloseKeyboard_ = false; + if (onCopy_) { + onCopy_(); + } + PopOverlay(); +} + +void RenderTextOverlay::HandlePaste() +{ + needCloseKeyboard_ = false; + if (onPaste_) { + onPaste_(); + } + PopOverlay(); +} + +void RenderTextOverlay::HandleCopyAll() +{ + needCloseKeyboard_ = false; + isSingleHandle_ = false; + childRightBoundary_ = 0.0; + auto callback = [weak = WeakClaim(this)](const Offset& startHandleOffset, const Offset& endHandleOffset) { + auto overlay = weak.Upgrade(); + if (overlay) { + overlay->startHandleOffset_ = startHandleOffset; + overlay->endHandleOffset_ = endHandleOffset; + overlay->isSingleHandle_ = false; + if (startHandleOffset == endHandleOffset) { + overlay->isSingleHandle_ = true; + } + if (overlay->onRebuild_) { + overlay->onRebuild_(overlay->isSingleHandle_, true, overlay->hasMenu_, true, false); + } + } + }; + if (onCopyAll_) { + onCopyAll_(callback); + } +} + +void RenderTextOverlay::HandleMoreButtonClick() +{ + needCloseKeyboard_ = false; + // Is animation is not stopped, do not handle click to start a new animation. + if (!isAnimationStopped_) { + return; + } + + hasMenu_ = !hasMenu_; + isAnimationStarted_ = false; + isAnimationStopped_ = false; + if (onRebuild_) { + animateUntilPaint_ = hasMenu_; + onRebuild_(isSingleHandle_, true, true, true, true); + } + + if (!animateUntilPaint_) { + startAnimation_(tweenOptionIn_, innerTweenOptionIn_, isSingleHandle_, true); + StartMoreAnimation(reverse_); + } +} + +void RenderTextOverlay::OnPaintFinish() +{ + if (animateUntilPaint_) { + animateUntilPaint_ = false; + startAnimation_(tweenOptionOut_, innerTweenOptionOut_, isSingleHandle_, false); + StartMoreAnimation(reverse_); + } +} + +void RenderTextOverlay::RestoreMoreButtonStyle() +{ + if (!controller_) { + return; + } + if (reverse_) { + BuildAndStartMoreButtonAnimation(); + controller_->Finish(); + } else if (controller_->IsRunning()) { + controller_->Finish(); + } +} + +void RenderTextOverlay::StartMoreAnimation(bool reverse) +{ + if (controller_ && controller_->IsRunning()) { + reverse_ = !reverse_; + controller_->Reverse(); + return; + } + BuildAndStartMoreButtonAnimation(); +} + +void RenderTextOverlay::BuildStrokeWidthAnimation(const RefPtr>& widthAnimation, + const Dimension& from, const Dimension& to, bool reverse) +{ + auto widthFrameStart = AceType::MakeRefPtr>(KEYFRAME_BEGINNING, from); + auto widthFrameEnd = AceType::MakeRefPtr>(KEYFRAME_ENDING, to); + widthAnimation->AddKeyframe(widthFrameStart); + if (reverse) { + widthFrameEnd->SetCurve(Curves::FRICTION); + } else { + auto widthFrameMid = AceType::MakeRefPtr>(KEYFRAME_PERCENT_THIRTY, to); + widthFrameMid->SetCurve(Curves::FRICTION); + widthFrameEnd->SetCurve(Curves::LINEAR); + widthAnimation->AddKeyframe(widthFrameMid); + } + widthAnimation->AddKeyframe(widthFrameEnd); + widthAnimation->AddListener([weakText = AceType::WeakClaim(this)](const Dimension& value) { + auto overlay = weakText.Upgrade(); + if (overlay) { + overlay->strokeWidth_ = value; + overlay->clipWidth_ = std::clamp((CLIP_WIDTH - (value - STROKE_MIN_WIDTH).Value()), 0.0, CLIP_WIDTH); + overlay->MarkNeedRender(true); + } + }); +} + +void RenderTextOverlay::BuildEndPointOffsetAnimation( + const RefPtr>& offsetAnimation, double from, double to, bool reverse) +{ + auto offsetFrameStart = AceType::MakeRefPtr>(KEYFRAME_BEGINNING, from); + auto offsetFrameEnd = AceType::MakeRefPtr>(KEYFRAME_ENDING, to); + + offsetAnimation->AddKeyframe(offsetFrameStart); + if (reverse) { + offsetFrameEnd->SetCurve(Curves::FRICTION); + } else { + auto offsetFrameMid = AceType::MakeRefPtr>(KEYFRAME_PERCENT_THIRTY, from); + offsetFrameMid->SetCurve(Curves::LINEAR); + offsetFrameEnd->SetCurve(Curves::FRICTION); + offsetAnimation->AddKeyframe(offsetFrameMid); + } + offsetAnimation->AddKeyframe(offsetFrameEnd); + offsetAnimation->AddListener([weakText = AceType::WeakClaim(this)](double value) { + auto overlay = weakText.Upgrade(); + if (overlay) { + overlay->ProcessEndPointAnimation(value); + overlay->MarkNeedRender(true); + } + }); +} + +void RenderTextOverlay::BuildFrictionAnimation( + const RefPtr>& animation, double from, double to) +{ + auto frameStart = AceType::MakeRefPtr>(KEYFRAME_BEGINNING, from); + auto frameEnd = AceType::MakeRefPtr>(KEYFRAME_ENDING, to); + frameEnd->SetCurve(Curves::FRICTION); + + animation->AddKeyframe(frameStart); + animation->AddKeyframe(frameEnd); + animation->AddListener([weakText = AceType::WeakClaim(this)](double value) { + auto overlay = weakText.Upgrade(); + if (overlay) { + overlay->ProcessFrictionAnimation(value); + overlay->MarkNeedRender(true); + } + }); +} + +void RenderTextOverlay::ProcessFrictionAnimation(double value) +{ + // calculate start point offset of dots + dot1StartOffset_ = DOT1_OFFSET * value; + dot2StartOffset_ = DOT2_OFFSET * value; + dot3StartOffset_ = DOT3_OFFSET * value; + dot4StartOffset_ = DOT4_OFFSET * value; + + // calculate rotate degree + rotateDegree_ = ROTATE_DEGREE * value; +} + +void RenderTextOverlay::ProcessEndPointAnimation(double value) +{ + dot2Offset_ = (END_POINT - DOT2_POSITION - DOT2_OFFSET) * value; + dot3Offset_ = (END_POINT - DOT3_POSITION - DOT3_OFFSET) * value; + dot4Offset_ = (END_POINT - DOT4_POSITION - DOT4_OFFSET) * value; +} + +void RenderTextOverlay::BuildAndStartMoreButtonAnimation() +{ + if (!controller_) { + controller_ = AceType::MakeRefPtr(GetContext()); + } + controller_->ClearInterpolators(); + controller_->ClearAllListeners(); + + RefPtr> strokeWidthAnimation = AceType::MakeRefPtr>(); + RefPtr> startPointAnimation = AceType::MakeRefPtr>(); + RefPtr> endPointAnimation = AceType::MakeRefPtr>(); + if (reverse_) { + BuildStrokeWidthAnimation(strokeWidthAnimation, STROKE_MIN_WIDTH, STROKE_MAX_WIDTH, true); + BuildFrictionAnimation(startPointAnimation, KEYFRAME_ENDING, KEYFRAME_BEGINNING); + BuildEndPointOffsetAnimation(endPointAnimation, KEYFRAME_ENDING, KEYFRAME_BEGINNING, true); + } else { + BuildStrokeWidthAnimation(strokeWidthAnimation, STROKE_MAX_WIDTH, STROKE_MIN_WIDTH, false); + BuildFrictionAnimation(startPointAnimation, KEYFRAME_BEGINNING, KEYFRAME_ENDING); + BuildEndPointOffsetAnimation(endPointAnimation, KEYFRAME_BEGINNING, KEYFRAME_ENDING, false); + } + + controller_->SetDuration(MORE_ANIMATION_DURATION); + controller_->AddStopListener([more = AceType::WeakClaim(this)]() { + auto textMore = more.Upgrade(); + if (textMore) { + textMore->reverse_ = (!textMore->reverse_); + } + }); + controller_->AddInterpolator(strokeWidthAnimation); + controller_->AddInterpolator(startPointAnimation); + controller_->AddInterpolator(endPointAnimation); + controller_->Forward(); +} + +void RenderTextOverlay::PopOverlay() +{ + if (hasPoped_) { + return; + } + auto textField = weakTextField_.Upgrade(); + if (!textField) { + return; + } + auto stack = textField->GetStackElement().Upgrade(); + if (stack) { + hasPoped_ = true; + stack->PopTextOverlay(true); + } + textField->SetIsOverlayShowed(false, needStartTwinkling_); + textField->SetTextOverlayPushed(false); +} + +void RenderTextOverlay::OnFocusChange(RenderStatus renderStatus) +{ + if (onFocusChange_) { + onFocusChange_(renderStatus == RenderStatus::FOCUS, needCloseKeyboard_); + } +} + +void RenderTextOverlay::InitRenderChild(const RefPtr& render) +{ + if (!render) { + return; + } + + if (AceType::InstanceOf(render)) { + if (!renderBox_) { + renderBox_ = AceType::DynamicCast(render); + } + } else if (AceType::InstanceOf(render)) { + if (!renderClip_) { + renderClip_ = AceType::DynamicCast(render); + } + } else if (AceType::InstanceOf(render)) { + if (!renderMenu_) { + renderMenu_ = AceType::DynamicCast(render); + } + } + + for (const auto& child : render->GetChildren()) { + InitRenderChild(child); + } +} + +void RenderTextOverlay::ResetRenderChild() +{ + renderBox_.Reset(); + renderClip_.Reset(); + renderMenu_.Reset(); +} + +bool RenderTextOverlay::HasToolBarOnly() const +{ + // Child of render overlay is focus collaboration. + auto focusCollaboration = AceType::DynamicCast(GetChildren().front()); + if (!focusCollaboration) { + return false; + } + // Child of render focus collaboration is column. + auto column = AceType::DynamicCast(focusCollaboration->GetChildren().front()); + if (!column) { + return false; + } + // Column has two children at most, tool bar and menu, if there is only one, it must be tool bar. + return column->GetChildren().size() == 1; +} + +void RenderTextOverlay::SetOnRebuild(const std::function& onRebuild) +{ + onRebuild_ = onRebuild; +} + +void RenderTextOverlay::SetStartAnimationCallback(const StartAnimationCallback& callback) +{ + startAnimation_ = callback; +} + +void RenderTextOverlay::SetIsAnimationStarted(bool isAnimationStarted) +{ + isAnimationStarted_ = isAnimationStarted; +} + +bool RenderTextOverlay::IsAnimationStarted() const +{ + return isAnimationStarted_; +} + +void RenderTextOverlay::SetIsAnimationStopped(bool isAnimationStopped) +{ + isAnimationStopped_ = isAnimationStopped; +} + +double RenderTextOverlay::GetHorizonOffsetForAnimation() const +{ + return horizonOffsetForAnimation_; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/text_overlay/render_text_overlay.h b/frameworks/core/components/text_overlay/render_text_overlay.h new file mode 100644 index 00000000..34aec5ae --- /dev/null +++ b/frameworks/core/components/text_overlay/render_text_overlay.h @@ -0,0 +1,205 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_OVERLAY_RENDER_TEXT_OVERLAY_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_OVERLAY_RENDER_TEXT_OVERLAY_H + +#include + +#include "core/components/box/render_box.h" +#include "core/components/clip/render_clip.h" +#include "core/components/select_popup/render_select_popup.h" +#include "core/components/slider/render_slider.h" +#include "core/components/text_field/render_text_field.h" +#include "core/components/text_overlay/text_overlay_component.h" +#include "core/gestures/click_recognizer.h" +#include "core/gestures/drag_recognizer.h" +#include "core/gestures/raw_recognizer.h" +#include "core/pipeline/base/overlay_show_option.h" +#include "core/pipeline/base/render_node.h" +#include "frameworks/base/utils/system_properties.h" + +namespace OHOS::Ace { + +const Offset DOT1_POSITION = Offset(6.25, 6.75); +const Offset DOT2_POSITION = Offset(17.75, 6.75); +const Offset DOT3_POSITION = Offset(6.25, 17.25); +const Offset DOT4_POSITION = Offset(17.75, 17.25); +const Dimension STROKE_MAX_WIDTH = 4.0_vp; +const Dimension STROKE_MIN_WIDTH = 1.5_vp; + +using StartAnimationCallback = std::function; + +class RenderTextOverlay : public RenderNode { + DECLARE_ACE_TYPE(RenderTextOverlay, RenderNode) + +public: + RenderTextOverlay(); + ~RenderTextOverlay() override; + + static RefPtr Create(); + void Update(const RefPtr& component) override; + void PerformLayout() override; + bool TouchTest(const Point& globalPoint, const Point& parentLocalPoint, const TouchRestrict& touchRestrict, + TouchTestResult& result) override; + + void PopOverlay(); + void OnFocusChange(RenderStatus renderStatus); + void SetOnRebuild(const std::function& onRebuild); + void SetStartAnimationCallback(const StartAnimationCallback& value); + + void SetIsAnimationStarted(bool isAnimationStart); + bool IsAnimationStarted() const; + void SetIsAnimationStopped(bool isAnimationStopped); + double GetHorizonOffsetForAnimation() const; + +protected: + void OnPaintFinish() override; + void OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) override; + + void RestoreMoreButtonStyle(); + void InitRenderChild(const RefPtr& render); + void ResetRenderChild(); + bool HasToolBarOnly() const; // Has tool bar and has no menu. + + bool hasMenu_ = false; + bool hasPoped_ = false; + bool reverse_ = false; + bool showMagnifier_ = false; + bool showOverlay_ = true; + bool isDragging_ = false; + bool isSingleHandle_ = false; + bool isStartDrag_ = false; + bool isEndDrag_ = false; + bool isTouchStartDrag_ = false; + bool isTouchEndDrag_ = false; + bool isAnimationStarted_ = true; + bool isAnimationStopped_ = true; + float rotateDegree_ = 0.0f; + double clipWidth_ = 0.0; + double lineHeight_ = 0.0; + + // Mark startHandle and endHandle index + int32_t startIndex_ = 0; + int32_t endIndex_ = 0; + + OverlayShowOption showOption_; + + Dimension handleRadius_; + Dimension handleRadiusInner_; + Dimension handleDiameter_; + Dimension handleDiameterInner_; + Dimension menuSpacingWithText_; + Dimension menuSpacingWithHandle_; + Dimension strokeWidth_ = STROKE_MAX_WIDTH; + + Color handleColor_; + Color handleColorInner_; + + Offset startHandleOffset_; + Offset endHandleOffset_; + Offset startHandleCenter_; + Offset endHandleCenter_; + + // dot offset align to arrow endings + Offset dot1StartOffset_; + Offset dot2StartOffset_; + Offset dot3StartOffset_; + Offset dot4StartOffset_; + + // line ending offset compare to dot position in animation + Offset dot2Offset_; + Offset dot3Offset_; + Offset dot4Offset_; + + Offset moreButtonPosition_; + + Rect clipRect_; + TouchRegion startHandleRegion_; + TouchRegion endHandleRegion_; + + TextDirection textDirection_ = TextDirection::LTR; + TextDirection realTextDirection_ = TextDirection::LTR; + + RefPtr renderBox_; + RefPtr renderClip_; + RefPtr renderMenu_; + RefPtr clickDetector_; + RefPtr dragDetector_; + RefPtr touchDetector_; + WeakPtr weakTextField_; + RefPtr controller_; + WeakPtr overlayComponent_; + +private: + void UpdateWeakTextField(const RefPtr& overlay); + void BindBackendEvent(const RefPtr& overlay); + void RemoveBackendEvent(const RefPtr& overlay); + + void HandleClick(const Offset& clickOffset); + void HandleDragStart(const Offset& startOffset); + void HandleDragUpdateAndEnd(const Offset& offset); + + void HandleCut(); + void HandleCopy(); + void HandlePaste(); + void HandleCopyAll(); + void HandleMoreButtonClick(); + + void StartMoreAnimation(bool reverse); + void BuildAndStartMoreButtonAnimation(); + + void BuildStrokeWidthAnimation(const RefPtr>& widthAnimation, const Dimension& from, + const Dimension& to, bool reverse); + + void ProcessFrictionAnimation(double value); + void BuildFrictionAnimation(const RefPtr>& animation, double from, double to); + + void ProcessEndPointAnimation(double value); + void BuildEndPointOffsetAnimation( + const RefPtr>& offsetAnimation, double from, double to, bool reverse); + + Offset ComputeChildPosition(const RefPtr& child); + + void InitAnimation(); + + bool needStartTwinkling_ = true; + bool needCloseKeyboard_ = true; + bool isAnimationInited_ = false; + bool animateUntilPaint_ = false; + double horizonOffsetForAnimation_ = 0.0; + double childRightBoundary_ = 0.0; + + TweenOption tweenOptionIn_; + TweenOption tweenOptionOut_; + TweenOption innerTweenOptionIn_; + TweenOption innerTweenOptionOut_; + + CommonCallback onCut_; + CommonCallback onCopy_; + CommonCallback onPaste_; + CopyAllCallback onCopyAll_; + StartHandleMoveCallback onStartHandleMove_; + EndHandleMoveCallback onEndHandleMove_; + StartAnimationCallback startAnimation_; + + std::function onFocusChange_; + std::function onRebuild_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_OVERLAY_RENDER_TEXT_OVERLAY_H diff --git a/frameworks/core/components/text_overlay/text_overlay_component.cpp b/frameworks/core/components/text_overlay/text_overlay_component.cpp new file mode 100644 index 00000000..8f31a4f2 --- /dev/null +++ b/frameworks/core/components/text_overlay/text_overlay_component.cpp @@ -0,0 +1,692 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/text_overlay/text_overlay_component.h" + +#include "base/i18n/localization.h" +#include "base/json/json_util.h" +#include "core/components/box/box_component.h" +#include "core/components/button/button_component.h" +#include "core/components/clip/clip_component.h" +#include "core/components/common/properties/shadow_config.h" +#include "core/components/flex/flex_component.h" +#include "core/components/focus_collaboration/focus_collaboration_component.h" +#include "core/components/padding/padding_component.h" +#include "core/components/text/text_component.h" +#include "core/components/text_overlay/render_text_overlay.h" +#include "core/components/text_overlay/text_overlay_element.h" +#include "core/components/theme/theme_manager.h" +#include "core/event/ace_event_helper.h" +#include "core/event/back_end_event_manager.h" + +namespace OHOS::Ace { +namespace { + +constexpr char BUTTON_COPY_ALL[] = "textoverlay.select_all"; +constexpr char BUTTON_CUT[] = "textoverlay.cut"; +constexpr char BUTTON_COPY[] = "textoverlay.copy"; +constexpr char BUTTON_PASTE[] = "textoverlay.paste"; +constexpr char BUTTON_TRANSLATE[] = "textoverlay.translate"; +constexpr char BUTTON_SHARE[] = "textoverlay.share"; +constexpr char BUTTON_SEARCH[] = "textoverlay.search"; +constexpr char OVERLAY_TRANSLATE[] = "translate"; +constexpr char OVERLAY_SHARE[] = "share"; +constexpr char OVERLAY_SEARCH[] = "search"; + +constexpr Dimension OVERLAY_MARGIN_BOTTOM = 8.0_vp; +constexpr Dimension TOOL_BAR_HEIGHT = 40.0_vp; + +} // namespace + +TextOverlayComponent::TextOverlayComponent( + const RefPtr& themeManager, const RefPtr& accessibilityManager) +{ + themeManager_ = themeManager; + accessibilityManager_ = accessibilityManager; + InitThemeStyle(themeManager); +} + +RefPtr TextOverlayComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +RefPtr TextOverlayComponent::CreateRenderNode() +{ + return RenderTextOverlay::Create(); +} + +void TextOverlayComponent::InitThemeStyle(const RefPtr& themeManager) +{ + theme_ = themeManager->GetTheme(); + if (!theme_) { + return; + } + handleColor_ = theme_->GetHandleColor(); + handleColorInner_ = theme_->GetHandleColorInner(); + handleDiameter_ = theme_->GetHandleDiameter(); + handleDiameterInner_ = theme_->GetHandleDiameterInner(); + menuSpacingWithText_ = theme_->GetMenuSpacingWithText(); +} + +RefPtr TextOverlayComponent::BuildChild( + bool isSingleHandle, bool hasToolBar, bool hasMenu, bool hasIcon, bool hasAnimation) +{ + // if type of input is password, don't show tool menu. + if (isPassword_) { + return nullptr; + } + if (!hasToolBar && !hasMenu && !hasIcon) { + return nullptr; + } + std::list> columnChildren; + auto column = AceType::MakeRefPtr(FlexAlign::SPACE_AROUND, FlexAlign::FLEX_END, columnChildren); + if (GetTextDirection() == TextDirection::RTL) { + column->SetCrossAxisAlign(FlexAlign::FLEX_START); + } + column->SetMainAxisSize(MainAxisSize::MIN); + + // Add toolbar. + column->AppendChild(BuildToolBar(isSingleHandle, hasToolBar, hasMenu, hasIcon, hasAnimation)); + if (hasMenu) { + // Add menu. + column->AppendChild(BuildMenu()); + } else { + menu_.Reset(); + } + + // Add focus collaboration to show focus animation. + auto focusCollaboration = AceType::MakeRefPtr(); + focusCollaboration->InsertChild(0, column); + return focusCollaboration; +} + +RefPtr TextOverlayComponent::BuildToolBar( + bool isSingleHandle, bool hasToolBar, bool hasMenu, bool hasIcon, bool hasAnimation) +{ + if (!hasToolBar && !hasMenu && !hasIcon) { + return nullptr; + } + + std::list> operations; + auto row = AceType::MakeRefPtr(FlexAlign::SPACE_AROUND, FlexAlign::FLEX_START, operations); + row->SetMainAxisSize(MainAxisSize::MIN); + row->SetStretchToParent(true); + if (hasToolBar) { + if (!isSingleHandle) { + if (onCut_) { + row->AppendChild( + BuildButton(Localization::GetInstance()->GetEntryLetters(BUTTON_CUT), cutButtonMarker_)); + } + if (onCopy_) { + row->AppendChild( + BuildButton(Localization::GetInstance()->GetEntryLetters(BUTTON_COPY), copyButtonMarker_)); + } + } + if (onPaste_) { + row->AppendChild( + BuildButton(Localization::GetInstance()->GetEntryLetters(BUTTON_PASTE), pasteButtonMarker_)); + } + if (onCopyAll_) { + row->AppendChild( + BuildButton(Localization::GetInstance()->GetEntryLetters(BUTTON_COPY_ALL), copyAllButtonMarker_)); + } + if (!translateButtonMarker_.IsEmpty()) { + const auto& translateButtonMarker = BackEndEventManager::GetInstance().GetAvailableMarker(); + BackEndEventManager::GetInstance().BindBackendEvent( + translateButtonMarker, [weak = WeakClaim(this)]() { + auto overlay = weak.Upgrade(); + if (overlay) { + overlay->OnToolBarButtonClick(overlay->translateButtonMarker_, OVERLAY_TRANSLATE); + } + }); + row->AppendChild( + BuildButton(Localization::GetInstance()->GetEntryLetters(BUTTON_TRANSLATE), translateButtonMarker)); + } + } + if (hasIcon && (!options_.empty() || !shareButtonMarker_.IsEmpty() || !searchButtonMarker_.IsEmpty())) { + hasMoreButton_ = true; + row->AppendChild(BuildMoreIconButton(hasMenu)); + } else { + hasMoreButton_ = false; + } + auto firstButton = DynamicCast(row->GetChildren().front()); + if (firstButton) { + firstButton->SetAutoFocusState(true); + } + auto box = AceType::MakeRefPtr(); + if (theme_) { + auto backDecoration = AceType::MakeRefPtr(); + backDecoration->SetBackgroundColor(theme_->GetMenuBackgroundColor()); + backDecoration->SetBorder(theme_->GetMenuBorder()); + backDecoration->SetBorderRadius(Radius(theme_->GetMenuButtonHeight())); + box->SetBackDecoration(backDecoration); + box->SetPadding(theme_->GetMenuPadding()); + } + + if (hasAnimation) { + if (innerComposeId_.empty()) { + innerComposeId_ = TweenComponent::AllocTweenComponentId(); + } + auto innerTween = AceType::MakeRefPtr(innerComposeId_, innerComposeId_, row); + innerTween->SetIsFirstFrameShow(true); + box->SetChild(innerTween); + } else { + box->SetChild(row); + } + box->SetTextDirection(GetTextDirection()); + return BuildAnimation(box, hasAnimation); +} + +RefPtr TextOverlayComponent::BuildButton(const std::string& data, const EventMarker& onClick) +{ + if (!theme_) { + return nullptr; + } + auto text = AceType::MakeRefPtr(data); + text->SetTextStyle(theme_->GetMenuButtonTextStyle()); + text->SetFocusColor(theme_->GetMenuButtonTextStyle().GetTextColor()); + + auto padding = AceType::MakeRefPtr(); + padding->SetPadding(theme_->GetMenuButtonPadding()); + padding->SetChild(text); + + std::list> children; + children.emplace_back(padding); + auto button = AceType::MakeRefPtr(children); + button->SetIsInnerBorder(true); + button->SetClickedEventId(onClick); + button->SetHeight(theme_->GetMenuButtonHeight()); + button->SetRectRadius(theme_->GetMenuButtonHeight() / 2.0); + button->SetBackgroundColor(theme_->GetMenuBackgroundColor()); + button->SetHoverColor(theme_->GetButtonHoverColor()); + button->SetClickedColor(theme_->GetButtonClickedColor()); + button->SetFocusColor(theme_->GetMenuBackgroundColor()); + return button; +} + +RefPtr TextOverlayComponent::BuildMoreIconButton(bool hasMenu) +{ + if (!theme_) { + return nullptr; + } + + std::list> children; + auto button = AceType::MakeRefPtr(children); + button->SetIsInnerBorder(true); + button->SetClickedEventId(moreButtonMarker_); + button->SetHeight(theme_->GetMenuButtonHeight()); + button->SetWidth(theme_->GetMenuButtonHeight()); + button->SetRectRadius(theme_->GetMenuButtonHeight() / 2.0); + button->SetBackgroundColor(Color::TRANSPARENT); + button->SetHoverColor(theme_->GetButtonHoverColor()); + button->SetClickedColor(theme_->GetButtonClickedColor()); + button->SetFocusColor(theme_->GetMenuBackgroundColor()); + return button; +} + +RefPtr TextOverlayComponent::BuildAnimation(const RefPtr& child, bool hasAnimation) +{ + auto box = AceType::MakeRefPtr(); + if (hasAnimation) { + auto clip = AceType::MakeRefPtr(child); + clip->SetTopLeftRadius(Radius(theme_->GetMenuButtonHeight())); + clip->SetTopRightRadius(Radius(theme_->GetMenuButtonHeight())); + clip->SetBottomLeftRadius(Radius(theme_->GetMenuButtonHeight())); + clip->SetBottomRightRadius(Radius(theme_->GetMenuButtonHeight())); + clip->SetHeight(TOOL_BAR_HEIGHT); + clip->SetClipWithShadow(true); + + if (outerComposeId_.empty()) { + outerComposeId_ = TweenComponent::AllocTweenComponentId(); + } + auto outerTween = AceType::MakeRefPtr(outerComposeId_, outerComposeId_, clip); + outerTween->SetIsFirstFrameShow(true); + box->SetChild(outerTween); + } else { + box->SetChild(child); + } + + auto backDecoration = AceType::MakeRefPtr(); + backDecoration->AddShadow(ShadowConfig::DefaultShadowM); + backDecoration->SetBackgroundColor(theme_->GetMenuBackgroundColor()); + backDecoration->SetBorder(theme_->GetMenuBorder()); + backDecoration->SetBorderRadius(Radius(theme_->GetMenuButtonHeight())); + box->SetBackDecoration(backDecoration); + return box; +} + +RefPtr TextOverlayComponent::BuildMenu() +{ + if (!menu_) { + menu_ = AceType::MakeRefPtr(); + menu_->ClearAllOptions(); + + if (!shareButtonMarker_.IsEmpty()) { + auto optionComponent = BuildMenuOption("", InternalResource::ResourceId::SHARE_SVG, + Localization::GetInstance()->GetEntryLetters(BUTTON_SHARE), true); + const auto& shareButtonMarker = BackEndEventManager::GetInstance().GetAvailableMarker(); + optionComponent->SetClickEvent(shareButtonMarker); + BackEndEventManager::GetInstance().BindBackendEvent(shareButtonMarker, [weak = WeakClaim(this)]() { + auto overlay = weak.Upgrade(); + if (overlay) { + overlay->OnToolBarButtonClick(overlay->shareButtonMarker_, OVERLAY_SHARE); + } + }); + menu_->AppendSelectOption(optionComponent); + } + if (!searchButtonMarker_.IsEmpty()) { + auto optionComponent = BuildMenuOption("", InternalResource::ResourceId::SEARCH_SVG, + Localization::GetInstance()->GetEntryLetters(BUTTON_SEARCH), true); + const auto& searchButtonMarker = BackEndEventManager::GetInstance().GetAvailableMarker(); + optionComponent->SetClickEvent(searchButtonMarker); + BackEndEventManager::GetInstance().BindBackendEvent(searchButtonMarker, [weak = WeakClaim(this)]() { + auto overlay = weak.Upgrade(); + if (overlay) { + overlay->OnToolBarButtonClick(overlay->searchButtonMarker_, OVERLAY_SEARCH); + } + }); + menu_->AppendSelectOption(optionComponent); + } + + int32_t index = 0; + for (const auto& option : options_) { + auto optionComponent = + BuildMenuOption(option.image_, InternalResource::ResourceId::NO_ID, option.text_, false); + EventMarker clickEvent = BackEndEventManager::GetInstance().GetAvailableMarker(); + optionComponent->SetClickEvent(clickEvent); + BackEndEventManager::GetInstance().BindBackendEvent(clickEvent, [weak = WeakClaim(this), index]() { + auto overlay = weak.Upgrade(); + overlay->OnOptionClick(index); + }); + menu_->AppendSelectOption(optionComponent); + ++index; + } + menu_->SetIsFullScreen(false); + menu_->InitTheme(themeManager_); + menu_->Initialize(accessibilityManager_.Upgrade()); + } + + auto box = AceType::MakeRefPtr(); + box->SetChild(menu_); + box->SetMargin(Edge(0.0_vp, OVERLAY_MARGIN_BOTTOM, 0.0_vp, 0.0_vp)); + return box; +} + +RefPtr TextOverlayComponent::BuildMenuOption( + const std::string& imageSrc, InternalResource::ResourceId resourceId, const std::string& text, bool useResource) +{ + auto optionComponent = AceType::MakeRefPtr(); + RefPtr image; + if (useResource) { + image = AceType::MakeRefPtr(resourceId); + if (theme_) { + image->SetColor(theme_->GetMenuIconColor()); + } + } else { + image = AceType::MakeRefPtr(imageSrc); + } + optionComponent->SetIcon(image); + auto textComponent = AceType::MakeRefPtr(text); + optionComponent->SetText(textComponent); + optionComponent->SetValue(text); + optionComponent->InitTheme(themeManager_); + optionComponent->Initialize(accessibilityManager_.Upgrade()); + return optionComponent; +} + +void TextOverlayComponent::OnOptionClick(int32_t index) +{ + const auto& event = AceAsyncEvent::Create(optionsClickMarker_, context_); + if (event) { + auto jsonResult = JsonUtil::Create(true); + jsonResult->Put("index", index); + jsonResult->Put("value", GetSelectedText().c_str()); + event(std::string(R"("optionselect",)").append(jsonResult->ToString())); + } + if (popOverlay_) { + popOverlay_(); + } +} + +void TextOverlayComponent::OnToolBarButtonClick(const EventMarker& marker, const std::string& eventName) +{ + const auto& event = AceAsyncEvent::Create(marker, context_); + if (event) { + auto jsonResult = JsonUtil::Create(true); + jsonResult->Put("value", GetSelectedText().c_str()); + if (eventName == OVERLAY_TRANSLATE) { + event(std::string(R"("translate",)").append(jsonResult->ToString())); + } else if (eventName == OVERLAY_SHARE) { + event(std::string(R"("share",)").append(jsonResult->ToString())); + } else if (eventName == OVERLAY_SEARCH) { + event(std::string(R"("search",)").append(jsonResult->ToString())); + } + } + if (popOverlay_) { + popOverlay_(); + } +} + +std::string TextOverlayComponent::GetSelectedText() const +{ + const auto& textField = weakTextField_.Upgrade(); + if (textField) { + return textField->GetEditingValue().GetSelectedText(); + } + return ""; +} + +bool TextOverlayComponent::HasMoreButton() const +{ + return hasMoreButton_; +} + +void TextOverlayComponent::SetIsPassword(bool isPassword) +{ + isPassword_ = isPassword; +} + +bool TextOverlayComponent::GetIsPassword() const +{ + return isPassword_; +} + +void TextOverlayComponent::SetIsSingleHandle(bool isSingleHandle) +{ + isSingleHandle_ = isSingleHandle; +} + +bool TextOverlayComponent::GetIsSingleHandle() const +{ + return isSingleHandle_; +} + +void TextOverlayComponent::SetLineHeight(double lineHeight) +{ + lineHeight_ = lineHeight; +} + +double TextOverlayComponent::GetLineHeight() const +{ + return lineHeight_; +} + +void TextOverlayComponent::SetClipRect(const Rect& clipRect) +{ + clipRect_ = clipRect; +} + +const Rect& TextOverlayComponent::GetClipRect() const +{ + return clipRect_; +} + +void TextOverlayComponent::SetHandleColor(const Color& handleColor) +{ + handleColor_ = handleColor; +} + +const Color& TextOverlayComponent::GetHandleColor() const +{ + return handleColor_; +} + +void TextOverlayComponent::SetHandleColorInner(const Color& handleColorInner) +{ + handleColorInner_ = handleColorInner; +} + +const Color& TextOverlayComponent::GetHandleColorInner() const +{ + return handleColorInner_; +} + +void TextOverlayComponent::SetHandleDiameter(const Dimension& handleDiameter) +{ + handleDiameter_ = handleDiameter; +} + +const Dimension& TextOverlayComponent::GetHandleDiameter() const +{ + return handleDiameter_; +} + +void TextOverlayComponent::SetHandleDiameterInner(const Dimension& handleDiameterInner) +{ + handleDiameterInner_ = handleDiameterInner; +} + +const Dimension& TextOverlayComponent::GetHandleDiameterInner() const +{ + return handleDiameterInner_; +} + +void TextOverlayComponent::SetMenuSpacingWithText(const Dimension& menuSpacingWithText) +{ + menuSpacingWithText_ = menuSpacingWithText; +} + +const Dimension& TextOverlayComponent::GetMenuSpacingWithText() const +{ + return menuSpacingWithText_; +} + +void TextOverlayComponent::SetOnFocusChange(const std::function& onFocusChange) +{ + onFocusChange_ = onFocusChange; +} + +const std::function& TextOverlayComponent::GetOnFocusChange() const +{ + return onFocusChange_; +} + +void TextOverlayComponent::SetOnCut(const CommonCallback& onCut) +{ + onCut_ = onCut; +} + +const CommonCallback& TextOverlayComponent::GetOnCut() const +{ + return onCut_; +} + +void TextOverlayComponent::SetOnCopy(const CommonCallback& onCopy) +{ + onCopy_ = onCopy; +} + +const CommonCallback& TextOverlayComponent::GetOnCopy() const +{ + return onCopy_; +} + +void TextOverlayComponent::SetOnPaste(const CommonCallback& onPaste) +{ + onPaste_ = onPaste; +} + +const CommonCallback& TextOverlayComponent::GetOnPaste() const +{ + return onPaste_; +} + +void TextOverlayComponent::SetOnCopyAll(const CopyAllCallback& onCopyAll) +{ + onCopyAll_ = onCopyAll; +} + +const CopyAllCallback& TextOverlayComponent::GetOnCopyAll() const +{ + return onCopyAll_; +} + +void TextOverlayComponent::SetCutButtonMarker(const EventMarker& cutButtonMarker) +{ + cutButtonMarker_ = cutButtonMarker; +} + +const EventMarker& TextOverlayComponent::GetCutButtonMarker() const +{ + return cutButtonMarker_; +} + +void TextOverlayComponent::SetCopyButtonMarker(const EventMarker& copyButtonMarker) +{ + copyButtonMarker_ = copyButtonMarker; +} + +const EventMarker& TextOverlayComponent::GetCopyButtonMarker() const +{ + return copyButtonMarker_; +} + +void TextOverlayComponent::SetPasteButtonMarker(const EventMarker& pasteButtonMarker) +{ + pasteButtonMarker_ = pasteButtonMarker; +} + +const EventMarker& TextOverlayComponent::GetPasteButtonMarker() const +{ + return pasteButtonMarker_; +} + +void TextOverlayComponent::SetCopyAllButtonMarker(const EventMarker& copyAllButtonMarker) +{ + copyAllButtonMarker_ = copyAllButtonMarker; +} + +const EventMarker& TextOverlayComponent::GetCopyAllButtonMarker() const +{ + return copyAllButtonMarker_; +} + +void TextOverlayComponent::SetMoreButtonMarker(const EventMarker& moreButtonMarker) +{ + moreButtonMarker_ = moreButtonMarker; +} + +const EventMarker& TextOverlayComponent::GetMoreButtonMarker() const +{ + return moreButtonMarker_; +} + +void TextOverlayComponent::SetStartHandleOffset(const Offset& offset) +{ + startHandleOffset_ = offset; +} + +const Offset& TextOverlayComponent::GetStartHandleOffset() const +{ + return startHandleOffset_; +} + +void TextOverlayComponent::SetEndHandleOffset(const Offset& offset) +{ + endHandleOffset_ = offset; +} + +const Offset& TextOverlayComponent::GetEndHandleOffset() const +{ + return endHandleOffset_; +} + +void TextOverlayComponent::SetOnStartHandleMove(const StartHandleMoveCallback& onStartHandleMove) +{ + onStartHandleMove_ = onStartHandleMove; +} + +const StartHandleMoveCallback& TextOverlayComponent::GetOnStartHandleMove() const +{ + return onStartHandleMove_; +} + +void TextOverlayComponent::SetOnEndHandleMove(const EndHandleMoveCallback& onEndHandleMove) +{ + onEndHandleMove_ = onEndHandleMove; +} + +const EndHandleMoveCallback& TextOverlayComponent::GetOnEndHandleMove() const +{ + return onEndHandleMove_; +} + +void TextOverlayComponent::SetWeakTextField(const WeakPtr& weakTextField) +{ + weakTextField_ = weakTextField; +} + +const WeakPtr& TextOverlayComponent::GetWeakTextField() const +{ + return weakTextField_; +} + +void TextOverlayComponent::SetRealTextDirection(TextDirection realTextDirection) +{ + realTextDirection_ = realTextDirection; +} + +TextDirection TextOverlayComponent::GetRealTextDirection() const +{ + return realTextDirection_; +} + +void TextOverlayComponent::SetOptions(const std::vector& options) +{ + options_ = options; +} + +const std::vector& TextOverlayComponent::GetOptions() const +{ + return options_; +} + +void TextOverlayComponent::SetOptionsClickMarker(const EventMarker& onOptionsClick) +{ + optionsClickMarker_ = onOptionsClick; +} + +void TextOverlayComponent::SetTranslateButtonMarker(const EventMarker& onTranslate) +{ + translateButtonMarker_ = onTranslate; +} + +void TextOverlayComponent::SetShareButtonMarker(const EventMarker& onShare) +{ + shareButtonMarker_ = onShare; +} + +void TextOverlayComponent::SetSearchButtonMarker(const EventMarker& onSearch) +{ + searchButtonMarker_ = onSearch; +} + +void TextOverlayComponent::SetPopOverlay(const CommonCallback& popOverlay) +{ + popOverlay_ = popOverlay; +} + +void TextOverlayComponent::SetContext(const WeakPtr& context) +{ + context_ = context; +} + +const RefPtr& TextOverlayComponent::GetMenu() const +{ + return menu_; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/text_overlay/text_overlay_component.h b/frameworks/core/components/text_overlay/text_overlay_component.h new file mode 100644 index 00000000..c171ac50 --- /dev/null +++ b/frameworks/core/components/text_overlay/text_overlay_component.h @@ -0,0 +1,209 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_OVERLAY_TEXT_OVERLAY_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_OVERLAY_TEXT_OVERLAY_COMPONENT_H + +#include "core/components/box/box_component.h" +#include "core/components/button/button_component.h" +#include "core/components/menu/menu_component.h" +#include "core/components/option/option_component.h" +#include "core/components/select_popup/select_popup_component.h" +#include "core/components/text_field/render_text_field.h" +#include "core/components/text_field/text_field_component.h" +#include "core/components/text_overlay/text_overlay_theme.h" +#include "core/components/tween/tween_component.h" +#include "core/pipeline/base/component.h" +#include "core/pipeline/base/sole_child_component.h" +#include "frameworks/core/animation/animator.h" + +namespace OHOS::Ace { + +constexpr Dimension ICON_SIZE = 24.0_vp; +constexpr Dimension ICON_PADDING = 2.0_vp; + +using CommonCallback = std::function; +using StartHandleMoveCallback = + std::function&, bool isSingleHandle)>; +using EndHandleMoveCallback = + std::function&)>; +using CopyAllCallback = std::function&)>; + +class TextOverlayComponent : public SoleChildComponent { + DECLARE_ACE_TYPE(TextOverlayComponent, SoleChildComponent) + +public: + TextOverlayComponent( + const RefPtr& themeManager, const RefPtr& accessibilityManager); + ~TextOverlayComponent() override = default; + + RefPtr CreateElement() override; + RefPtr CreateRenderNode() override; + + void InitThemeStyle(const RefPtr& themeManager); + RefPtr BuildChild( + bool isSingleHandle, bool hasToolBar, bool hasMenu, bool hasIcon, bool hasAnimation = true); + RefPtr BuildToolBar(bool isSingleHandle, bool hasToolBar, bool hasMenu, bool hasIcon, bool hasAnimation); + + void SetWeakTextField(const WeakPtr& weakTextField); + const WeakPtr& GetWeakTextField() const; + + bool HasMoreButton() const; + + void SetIsPassword(bool isPassword); + bool GetIsPassword() const; + + void SetIsSingleHandle(bool isSingleHandle); + bool GetIsSingleHandle() const; + + void SetLineHeight(double lineHeight); + double GetLineHeight() const; + + void SetClipRect(const Rect& clipRect); + const Rect& GetClipRect() const; + + void SetHandleColor(const Color& handleColor); + const Color& GetHandleColor() const; + + void SetHandleColorInner(const Color& handleColorInner); + const Color& GetHandleColorInner() const; + + void SetHandleDiameter(const Dimension& handleDiameter); + const Dimension& GetHandleDiameter() const; + + void SetHandleDiameterInner(const Dimension& handleDiameterInner); + const Dimension& GetHandleDiameterInner() const; + + void SetMenuSpacingWithText(const Dimension& menuSpacingWithText); + const Dimension& GetMenuSpacingWithText() const; + + void SetOnFocusChange(const std::function& onFocusChange); + const std::function& GetOnFocusChange() const; + + void SetOnCut(const CommonCallback& onCut); + const CommonCallback& GetOnCut() const; + + void SetOnCopy(const CommonCallback& onCopy); + const CommonCallback& GetOnCopy() const; + + void SetOnPaste(const CommonCallback& onPaste); + const CommonCallback& GetOnPaste() const; + + void SetOnCopyAll(const CopyAllCallback& onCopyAll); + const CopyAllCallback& GetOnCopyAll() const; + + void SetCutButtonMarker(const EventMarker& cutButtonMarker); + const EventMarker& GetCutButtonMarker() const; + + void SetCopyButtonMarker(const EventMarker& copyButtonMarker); + const EventMarker& GetCopyButtonMarker() const; + + void SetPasteButtonMarker(const EventMarker& pasteButtonMarker); + const EventMarker& GetPasteButtonMarker() const; + + void SetCopyAllButtonMarker(const EventMarker& copyAllButtonMarker); + const EventMarker& GetCopyAllButtonMarker() const; + + void SetMoreButtonMarker(const EventMarker& moreButtonMarker); + const EventMarker& GetMoreButtonMarker() const; + + void SetStartHandleOffset(const Offset& offset); + const Offset& GetStartHandleOffset() const; + + void SetEndHandleOffset(const Offset& offset); + const Offset& GetEndHandleOffset() const; + + void SetOnStartHandleMove(const StartHandleMoveCallback& onStartHandleMove); + const StartHandleMoveCallback& GetOnStartHandleMove() const; + + void SetOnEndHandleMove(const EndHandleMoveCallback& onEndHandleMove); + const EndHandleMoveCallback& GetOnEndHandleMove() const; + + void SetRealTextDirection(TextDirection realTextDirection); + TextDirection GetRealTextDirection() const; + + void SetOptions(const std::vector& options); + const std::vector& GetOptions() const; + + void SetOptionsClickMarker(const EventMarker& onOptionsClick); + void SetTranslateButtonMarker(const EventMarker& onTranslate); + void SetShareButtonMarker(const EventMarker& onShare); + void SetSearchButtonMarker(const EventMarker& onSearch); + void SetPopOverlay(const CommonCallback& popOverlay); + void SetContext(const WeakPtr& context); + void SetShowOption(const TweenOption& tweenOption); + void SetHideOption(const TweenOption& tweenOption); + + const RefPtr& GetMenu() const; + +private: + RefPtr BuildButton(const std::string& data, const EventMarker& onClick); + RefPtr BuildMoreIconButton(bool hasMenu); + RefPtr BuildMenu(); + RefPtr BuildMenuOption(const std::string& imageSrc, InternalResource::ResourceId resourceId, + const std::string& text, bool useResource); + RefPtr BuildAnimation(const RefPtr& child, bool hasAnimation); + void OnOptionClick(int32_t index); + void OnToolBarButtonClick(const EventMarker& marker, const std::string& eventName); + std::string GetSelectedText() const; + + WeakPtr context_; + WeakPtr weakTextField_; + RefPtr theme_; + RefPtr menu_; + RefPtr themeManager_; + WeakPtr accessibilityManager_; + + bool hasMoreButton_ = false; + bool isPassword_ = false; + bool isSingleHandle_ = false; + double lineHeight_ = 0.0; + Rect clipRect_; + Color handleColor_; + Color handleColorInner_; + Dimension handleDiameter_; + Dimension handleDiameterInner_; + Dimension menuSpacingWithText_; + Offset startHandleOffset_; + Offset endHandleOffset_; + TextDirection realTextDirection_ = TextDirection::LTR; + ComposeId innerComposeId_; + ComposeId outerComposeId_; + + CommonCallback popOverlay_; + CommonCallback onCut_; + CommonCallback onCopy_; + CommonCallback onPaste_; + CopyAllCallback onCopyAll_; + StartHandleMoveCallback onStartHandleMove_; + EndHandleMoveCallback onEndHandleMove_; + std::function onFocusChange_; + + EventMarker optionsClickMarker_; + EventMarker translateButtonMarker_; + EventMarker shareButtonMarker_; + EventMarker searchButtonMarker_; + EventMarker cutButtonMarker_ = BackEndEventManager::GetInstance().GetAvailableMarker(); + EventMarker copyButtonMarker_ = BackEndEventManager::GetInstance().GetAvailableMarker(); + EventMarker pasteButtonMarker_ = BackEndEventManager::GetInstance().GetAvailableMarker(); + EventMarker copyAllButtonMarker_ = BackEndEventManager::GetInstance().GetAvailableMarker(); + EventMarker moreButtonMarker_ = BackEndEventManager::GetInstance().GetAvailableMarker(); + + std::vector options_; // Options for menu. +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_OVERLAY_TEXT_OVERLAY_COMPONENT_H diff --git a/frameworks/core/components/text_overlay/text_overlay_element.cpp b/frameworks/core/components/text_overlay/text_overlay_element.cpp new file mode 100644 index 00000000..df08f1c7 --- /dev/null +++ b/frameworks/core/components/text_overlay/text_overlay_element.cpp @@ -0,0 +1,242 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/text_overlay/text_overlay_element.h" + +#include "core/components/focus_collaboration/focus_collaboration_element.h" +#include "core/components/text_overlay/render_text_overlay.h" +#include "core/components/text_overlay/text_overlay_component.h" + +namespace OHOS::Ace { + +void TextOverlayElement::PerformBuild() +{ + overlayComponent_ = AceType::DynamicCast(component_); + if (!overlayComponent_) { + return; + } + const auto& child = children_.empty() ? nullptr : children_.front(); + UpdateChild(child, overlayComponent_->BuildChild(overlayComponent_->GetIsSingleHandle(), + !overlayComponent_->GetIsSingleHandle(), false, !overlayComponent_->GetIsSingleHandle())); + + auto renderTextOverlay = AceType::DynamicCast(renderNode_); + if (!renderTextOverlay) { + return; + } + auto callback = [weak = WeakClaim(this)]( + bool isSingleHandle, bool hasToolBar, bool hasMenu, bool hasIcon, bool hasAnimation) { + auto overlay = weak.Upgrade(); + if (overlay) { + overlay->RebuildChild(isSingleHandle, hasToolBar, hasMenu, hasIcon, hasAnimation); + } + }; + renderTextOverlay->SetOnRebuild(callback); + + auto startAnimationCallback = [weak = WeakClaim(this)](const TweenOption& outerOption, + const TweenOption& innerOption, bool isSingleHandle, bool isIn) { + auto overlay = weak.Upgrade(); + if (overlay) { + overlay->OnStartAnimation(outerOption, innerOption, isSingleHandle, isIn); + } + }; + renderTextOverlay->SetStartAnimationCallback(startAnimationCallback); + + RequestFocus(); +} + +void TextOverlayElement::OnFocus() +{ + auto renderOverlay = AceType::DynamicCast(renderNode_); + if (renderOverlay) { + renderOverlay->OnFocusChange(RenderStatus::FOCUS); + } +} + +void TextOverlayElement::OnBlur() +{ + auto renderOverlay = AceType::DynamicCast(renderNode_); + if (renderOverlay) { + renderOverlay->OnFocusChange(RenderStatus::BLUR); + } +} + +void TextOverlayElement::RebuildChild( + bool isSingleHandle, bool hasToolBar, bool hasMenu, bool hasIcon, bool hasAnimation, bool buildToolBarOnly) +{ + if (!overlayComponent_) { + return; + } + auto renderOverlay = AceType::DynamicCast(renderNode_); + if (!renderOverlay) { + return; + } + + if (!buildToolBarOnly) { + const auto& child = children_.empty() ? nullptr : children_.front(); + UpdateChild(child, overlayComponent_->BuildChild(isSingleHandle, hasToolBar, hasMenu, hasIcon, hasAnimation)); + renderOverlay->MarkNeedLayout(); + return; + } + if (GetChildren().front()) { + auto columnElement = GetChildren().front()->GetChildren().front(); + if (!columnElement) { + return; + } + columnElement->UpdateChild(columnElement->GetFirstChild(), + overlayComponent_->BuildToolBar(isSingleHandle, hasToolBar, hasMenu, hasIcon, hasAnimation)); + if (!columnElement->GetFirstChild()) { + return; + } + auto renderBox = columnElement->GetFirstChild()->GetRenderNode(); + if (renderBox) { + renderBox->MarkNeedLayout(true, false); + } + } +} + +bool TextOverlayElement::RequestNextFocus(bool vertical, bool reverse, const Rect& rect) +{ + return false; +} + +void TextOverlayElement::OnStartAnimation( + const TweenOption& outerOption, const TweenOption& innerOption, bool isSingleHandle, bool isIn) +{ + InitTween(AceType::Claim(this)); + + // Start animation of outer tween. + if (outerTween_) { + AddListener(isSingleHandle, isIn); + outerTween_->SetOption(outerOption); + outerTween_->ApplyOptions(); + outerTween_->ApplyKeyframes(); + auto controller = outerTween_->GetController(); + if (controller) { + controller->Play(); + } + } + + // Start animation of inner tween. + if (innerTween_) { + innerTween_->SetOption(innerOption); + innerTween_->ApplyOptions(); + innerTween_->ApplyKeyframes(); + if (innerTween_->GetController()) { + innerTween_->GetController()->Play(); + } + } + + // Show animation of menu is auto play, but hide animation should manual start. + if (!isIn || !overlayComponent_) { + return; + } + auto menu = overlayComponent_->GetMenu(); + if (menu) { + auto menuAnimationCallback = menu->GetRefreshAnimationCallback(); + auto menuController = menu->GetAnimationController(); + if (menuAnimationCallback && menuController) { + auto hideOption = menu->GetHideOption(); + hideOption.SetFillMode(FillMode::FORWARDS); + menuAnimationCallback(hideOption, false); + menuController->Play(); + } + } +} + +void TextOverlayElement::InitTween(const RefPtr& element) +{ + if (!element || (outerTween_ && innerTween_)) { + return; + } + + if (AceType::InstanceOf(element)) { + if (!outerTween_) { + outerTween_ = AceType::DynamicCast(element); + } else if (!innerTween_) { + innerTween_ = AceType::DynamicCast(element); + } else { + return; + } + } + + for (const auto& child : element->GetChildren()) { + InitTween(child); + } +} + +void TextOverlayElement::AddListener(bool isSingleHandle, bool isIn) +{ + if (!outerTween_) { + return; + } + auto controller = outerTween_->GetController(); + if (!controller) { + return; + } + controller->AddStartListener([weak = WeakClaim(this)]() { + auto overlay = weak.Upgrade(); + if (overlay) { + auto context = overlay->context_.Upgrade(); + if (context) { + overlay->hasFocusAnimation_ = context->IsKeyEvent(); + // Don't show focus animation when show tween animation. + context->SetIsKeyEvent(false); + } + } + }); + + // When animation is stop, rebuild child without animation. + controller->AddStopListener([weak = WeakClaim(this), isSingleHandle, isIn]() { + auto overlay = weak.Upgrade(); + if (overlay) { + overlay->outerTween_.Reset(); + overlay->innerTween_.Reset(); + if (isIn) { + overlay->RebuildChild(isSingleHandle, true, false, true, false, false); + } else { + overlay->RebuildChild(isSingleHandle, false, true, true, false, true); + } + auto context = overlay->context_.Upgrade(); + if (context && overlay->hasFocusAnimation_) { + // When tween animation is stopped, restart focus animation. + context->SetIsKeyEvent(true); + } + } + auto renderOverlay = AceType::DynamicCast(overlay->renderNode_); + if (renderOverlay) { + renderOverlay->SetIsAnimationStopped(true); + } + }); + + auto renderOverlay = DynamicCast(renderNode_); + if (renderOverlay) { + double offsetX = renderOverlay->GetHorizonOffsetForAnimation(); + double from = isIn ? offsetX : 0.0; + double to = isIn ? 0.0 : offsetX; + + RefPtr> offset = AceType::MakeRefPtr>(from, to, Curves::FRICTION); + offset->AddListener(Animation::ValueCallback([count = 0, renderOverlay](double value) mutable { + // Delay one frame to avoid flashing of text overlay when paintting. + if (count > 1 && !renderOverlay->IsAnimationStarted()) { + renderOverlay->SetIsAnimationStarted(true); + renderOverlay->MarkNeedRender(); + } + ++count; + })); + controller->AddInterpolator(offset); + } +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/text_overlay/text_overlay_element.h b/frameworks/core/components/text_overlay/text_overlay_element.h new file mode 100644 index 00000000..0ad5fa1d --- /dev/null +++ b/frameworks/core/components/text_overlay/text_overlay_element.h @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_OVERLAY_TEXT_OVERLAY_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_OVERLAY_TEXT_OVERLAY_ELEMENT_H + +#include "core/components/box/box_component.h" +#include "core/components/text_overlay/text_overlay_component.h" +#include "core/components/tween/tween_element.h" +#include "core/focus/focus_node.h" +#include "core/pipeline/base/sole_child_element.h" + +namespace OHOS::Ace { + +class TextOverlayElement : public SoleChildElement, public FocusGroup { + DECLARE_ACE_TYPE(TextOverlayElement, SoleChildElement, FocusGroup) + +public: + void PerformBuild() override; + void OnFocus() override; + void OnBlur() override; + + void RebuildChild(bool isSingleHandle, bool hasToolBar, bool hasMenu, bool hasIcon, bool hasAnimation, + bool buildToolBarOnly = false); + +private: + bool RequestNextFocus(bool vertical, bool reverse, const Rect& rect) override; + + void OnStartAnimation( + const TweenOption& outerOption, const TweenOption& innerOption, bool isSingleHandle, bool isIn); + // Init outer and inner tween element. + void InitTween(const RefPtr& element); + void AddListener(bool isSingleHandle, bool isIn); + + bool hasFocusAnimation_ = false; + RefPtr overlayComponent_; + RefPtr outerTween_; + RefPtr innerTween_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_OVERLAY_TEXT_OVERLAY_ELEMENT_H diff --git a/frameworks/core/components/text_overlay/text_overlay_theme.h b/frameworks/core/components/text_overlay/text_overlay_theme.h new file mode 100644 index 00000000..80184c1d --- /dev/null +++ b/frameworks/core/components/text_overlay/text_overlay_theme.h @@ -0,0 +1,210 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_OVERLAY_TEXT_OVERLAY_THEME_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_OVERLAY_TEXT_OVERLAY_THEME_H + +#include "core/components/common/properties/border.h" +#include "core/components/common/properties/border_edge.h" +#include "core/components/common/properties/color.h" +#include "core/components/common/properties/edge.h" +#include "core/components/common/properties/radius.h" +#include "core/components/common/properties/text_style.h" +#include "core/components/theme/theme.h" +#include "core/components/theme/theme_constants.h" + +namespace OHOS::Ace { + +/** + * DialogTheme defines color and styles of PopupComponent. PopupTheme should be built + * using DialogTheme::Builder. + */ +class TextOverlayTheme : public virtual Theme { + DECLARE_ACE_TYPE(TextOverlayTheme, Theme); + +public: + class Builder { + public: + Builder() = default; + ~Builder() = default; + + RefPtr Build(const RefPtr& themeConstants) const + { + RefPtr theme = AceType::Claim(new TextOverlayTheme()); + if (!themeConstants) { + return theme; + } + // init theme from global data + theme->menuBorder_ = Border(BorderEdge(themeConstants->GetColor(THEME_TEXT_OVERLAY_MENU_BORDER_COLOR), + themeConstants->GetDimension(THEME_TEXT_OVERLAY_MENU_BORDER_WIDTH), + BorderStyle(themeConstants->GetInt(THEME_TEXT_OVERLAY_MENU_BORDER_STYLE)))); + theme->menuBackgroundColor_ = themeConstants->GetColor(THEME_TEXT_OVERLAY_MENU_BACKGROUND_COLOR); + theme->handleColor_ = themeConstants->GetColor(THEME_TEXT_OVERLAY_HANDLE_COLOR); + theme->handleColorInner_ = themeConstants->GetColor(THEME_TEXT_OVERLAY_HANDLE_COLOR_INNER); + theme->buttonClickedColor_ = themeConstants->GetColor(THEME_TEXT_OVERLAY_BUTTON_CLICKED_COLOR); + theme->buttonHoverColor_ = themeConstants->GetColor(THEME_TEXT_OVERLAY_BUTTON_HOVER_COLOR); + theme->iconColor_ = themeConstants->GetColor(THEME_TEXT_OVERLAY_MENU_ICON_COLOR); + theme->menuIconColor_ = themeConstants->GetColor(THEME_TEXT_OVERLAY_MENU_ICON_COLOR); + theme->menuPadding_ = Edge(themeConstants->GetDimension(THEME_TEXT_OVERLAY_MENU_PADDING_LEFT), + themeConstants->GetDimension(THEME_TEXT_OVERLAY_MENU_PADDING_TOP), + themeConstants->GetDimension(THEME_TEXT_OVERLAY_MENU_PADDING_RIGHT), + themeConstants->GetDimension(THEME_TEXT_OVERLAY_MENU_PADDING_BOTTOM)); + theme->handleDiameter_ = themeConstants->GetDimension(THEME_TEXT_OVERLAY_HANDLE_DIAMETER); + theme->handleDiameterInner_ = themeConstants->GetDimension(THEME_TEXT_OVERLAY_HANDLE_DIAMETER_INNER); + theme->menuSpacingWithText_ = themeConstants->GetDimension(THEME_TEXT_OVERLAY_MENU_SPACING_WITH_TEXT); + theme->menuButtonWidth_ = themeConstants->GetDimension(THEME_TEXT_OVERLAY_MENU_BUTTON_WIDTH); + theme->menuButtonHeight_ = themeConstants->GetDimension(THEME_TEXT_OVERLAY_MENU_BUTTON_HEIGHT); + theme->menuButtonTextStyle_.SetFontSize( + themeConstants->GetDimension(THEME_TEXT_OVERLAY_BUTTON_TEXT_FONTSIZE)); + theme->menuButtonTextStyle_.SetFontWeight( + FontWeight(themeConstants->GetInt(THEME_TEXT_OVERLAY_BUTTON_TEXT_FONTWEIGHT))); + theme->menuButtonTextStyle_.SetTextColor(themeConstants->GetColor(THEME_TEXT_OVERLAY_BUTTON_TEXT_COLOR)); + theme->menuButtonPadding_ = + Edge(themeConstants->GetDimension(THEME_TEXT_OVERLAY_MENU_BUTTON_PADDING_LEFT).Value(), + themeConstants->GetDimension(THEME_TEXT_OVERLAY_MENU_BUTTON_PADDING_TOP).Value(), + themeConstants->GetDimension(THEME_TEXT_OVERLAY_MENU_BUTTON_PADDING_RIGHT).Value(), + themeConstants->GetDimension(THEME_TEXT_OVERLAY_MENU_BUTTON_PADDING_BOTTOM).Value(), + themeConstants->GetDimension(THEME_TEXT_OVERLAY_MENU_PADDING_LEFT).Unit()); + ParsePattern(themeConstants->GetThemeStyle(), theme); + return theme; + } + + private: + void ParsePattern(const RefPtr& themeStyle, const RefPtr& theme) const + { + if (!themeStyle || !theme) { + return; + } + theme->iconColor_ = themeStyle->GetAttr(TEXT_OVERLAY_TOOL_BAR_ICON_COLOR, Color()); + theme->menuIconColor_ = themeStyle->GetAttr(TEXT_OVERLAY_MENU_ICON_COLOR, Color()); + theme->handleColor_ = themeStyle->GetAttr(TEXT_OVERLAY_HANDLE_COLOR, Color()); + theme->handleColorInner_ = themeStyle->GetAttr(TEXT_OVERLAY_HANDLE_COLOR_INNER, Color()); + theme->menuBackgroundColor_ = themeStyle->GetAttr(TEXT_OVERLAY_TOOL_BAR_BACKGROUND_COLOR, Color()); + theme->buttonHoverColor_ = themeStyle->GetAttr(TEXT_OVERLAY_TOOL_BAR_BUTTON_HOVER_COLOR, Color()); + theme->buttonClickedColor_ = themeStyle->GetAttr(TEXT_OVERLAY_TOOL_BAR_BUTTON_PRESS_COLOR, Color()); + theme->menuButtonTextStyle_.SetTextColor( + themeStyle->GetAttr(TEXT_OVERLAY_TOOL_BAR_TEXT_COLOR, Color())); + theme->menuButtonTextStyle_.SetFontSize( + themeStyle->GetAttr(TEXT_OVERLAY_TOOL_BAR_FONT_SIZE, 0.0_fp)); + } + }; + + ~TextOverlayTheme() override = default; + + const Border& GetMenuBorder() const + { + return menuBorder_; + } + + const Color& GetMenuBackgroundColor() const + { + return menuBackgroundColor_; + } + + const Color& GetHandleColor() const + { + return handleColor_; + } + + const Color& GetHandleColorInner() const + { + return handleColorInner_; + } + + const Color& GetButtonClickedColor() const + { + return buttonClickedColor_; + } + + const Color& GetButtonHoverColor() const + { + return buttonHoverColor_; + } + + const Color& GetIconColor() const + { + return iconColor_; + } + + const Color& GetMenuIconColor() const + { + return menuIconColor_; + } + + const Edge& GetMenuPadding() const + { + return menuPadding_; + } + + const Edge& GetMenuButtonPadding() const + { + return menuButtonPadding_; + } + + const Dimension& GetHandleDiameter() const + { + return handleDiameter_; + } + + const Dimension& GetHandleDiameterInner() const + { + return handleDiameterInner_; + } + + const Dimension& GetMenuSpacingWithText() const + { + return menuSpacingWithText_; + } + + const Dimension& GetMenuButtonWidth() const + { + return menuButtonWidth_; + } + + const Dimension& GetMenuButtonHeight() const + { + return menuButtonHeight_; + } + + const TextStyle& GetMenuButtonTextStyle() const + { + return menuButtonTextStyle_; + } + +protected: + TextOverlayTheme() = default; + +private: + Border menuBorder_; + Color iconColor_; + Color menuIconColor_; + Color menuBackgroundColor_; + Color handleColor_; + Color handleColorInner_; + Color buttonClickedColor_; + Color buttonHoverColor_; + Edge menuPadding_; + Edge menuButtonPadding_; + Dimension handleDiameter_; + Dimension handleDiameterInner_; + Dimension menuSpacingWithText_; + Dimension menuButtonWidth_; + Dimension menuButtonHeight_; + TextStyle menuButtonTextStyle_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_OVERLAY_TEXT_OVERLAY_THEME_H diff --git a/frameworks/core/components/text_span/BUILD.gn b/frameworks/core/components/text_span/BUILD.gn new file mode 100644 index 00000000..af8c0f62 --- /dev/null +++ b/frameworks/core/components/text_span/BUILD.gn @@ -0,0 +1,22 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("text_span") { + sources = [ + "flutter_render_text_span.cpp", + "render_text_span.cpp", + "text_span_component.cpp", + ] +} diff --git a/frameworks/core/components/text_span/flutter_render_text_span.cpp b/frameworks/core/components/text_span/flutter_render_text_span.cpp new file mode 100644 index 00000000..31e28d9b --- /dev/null +++ b/frameworks/core/components/text_span/flutter_render_text_span.cpp @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/text_span/flutter_render_text_span.h" + +#include "base/utils/string_utils.h" +#include "core/components/calendar/flutter_render_calendar.h" +#include "core/components/font/constants_converter.h" + +namespace OHOS::Ace { + +RefPtr RenderTextSpan::Create() +{ + return AceType::MakeRefPtr(); +} + +void FlutterRenderTextSpan::UpdateTextContent(txt::ParagraphBuilder& builder) +{ + if (!isShow_) { + LOGD("the span is not show"); + return; + } + if (hasNewStyle_) { + LOGD("test span has new style"); + txt::TextStyle style; + Constants::ConvertTxtStyle(spanStyle_, context_, style); + builder.PushStyle(style); + } + builder.AddText(StringUtils::Str8ToStr16(spanData_)); + for (const auto& child : GetChildren()) { + auto flutterRenderTextSpan = AceType::DynamicCast(child); + if (flutterRenderTextSpan) { + flutterRenderTextSpan->UpdateTextContent(builder); + } + } + if (hasNewStyle_) { + builder.Pop(); + } +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/text_span/flutter_render_text_span.h b/frameworks/core/components/text_span/flutter_render_text_span.h new file mode 100644 index 00000000..114431a9 --- /dev/null +++ b/frameworks/core/components/text_span/flutter_render_text_span.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_SPAN_FLUTTER_RENDER_TEXT_SPAN_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_SPAN_FLUTTER_RENDER_TEXT_SPAN_H + +#include "flutter/lib/ui/text/paragraph_builder.h" + +#include "core/components/text_span/render_text_span.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class FlutterRenderTextSpan final : public RenderTextSpan { + DECLARE_ACE_TYPE(FlutterRenderTextSpan, RenderTextSpan); + +public: + FlutterRenderTextSpan() = default; + ~FlutterRenderTextSpan() override = default; + + // Called by parent to add text with style to builder. + void UpdateTextContent(txt::ParagraphBuilder& builder); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_SPAN_FLUTTER_RENDER_TEXT_SPAN_H diff --git a/frameworks/core/components/text_span/render_text_span.cpp b/frameworks/core/components/text_span/render_text_span.cpp new file mode 100644 index 00000000..4a4975ad --- /dev/null +++ b/frameworks/core/components/text_span/render_text_span.cpp @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/text_span/render_text_span.h" + +#include "core/common/font_manager.h" +#include "core/components/text_span/text_span_component.h" + +namespace OHOS::Ace { + +RenderTextSpan::~RenderTextSpan() +{ + auto pipelineContext = context_.Upgrade(); + if (!pipelineContext) { + return; + } + auto fontManager = pipelineContext->GetFontManager(); + if (fontManager) { + fontManager->UnRegisterCallback(AceType::WeakClaim(this)); + } +} + +void RenderTextSpan::Update(const RefPtr& component) +{ + auto textSpan = AceType::DynamicCast(component); + if (!textSpan) { + return; + } + spanData_ = textSpan->GetSpanData(); + hasNewStyle_ = textSpan->HasNewStyle(); + if (hasNewStyle_) { + spanStyle_ = textSpan->GetTextStyle(); + } + isShow_ = textSpan->IsShow(); + + MarkNeedLayout(); + + // Register callback for fonts. + auto pipelineContext = context_.Upgrade(); + if (!pipelineContext) { + return; + } + auto callback = [span = AceType::WeakClaim(this)] { + auto refPtr = span.Upgrade(); + if (refPtr) { + refPtr->isCallbackCalled_ = true; + refPtr->MarkNeedLayout(); + } + }; + for (const auto& familyName : spanStyle_.GetFontFamilies()) { + auto fontManager = pipelineContext->GetFontManager(); + if (fontManager) { + fontManager->RegisterCallback(AceType::WeakClaim(this), familyName, callback); + } + } +} + +bool RenderTextSpan::IsCallbackCalled() const +{ + return isCallbackCalled_; +} + +const TextStyle& RenderTextSpan::GetSpanStyle() const +{ + return spanStyle_; +} + +const std::string& RenderTextSpan::GetSpanData() const +{ + return spanData_; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/text_span/render_text_span.h b/frameworks/core/components/text_span/render_text_span.h new file mode 100644 index 00000000..67775ae0 --- /dev/null +++ b/frameworks/core/components/text_span/render_text_span.h @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_SPAN_RENDER_TEXT_SPAN_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_SPAN_RENDER_TEXT_SPAN_H + +#include "core/components/common/properties/text_style.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderTextSpan : public RenderNode { + DECLARE_ACE_TYPE(RenderTextSpan, RenderNode); + +public: + ~RenderTextSpan() override; + + static RefPtr Create(); + + void Update(const RefPtr& component) override; + + // The layout of RenderTextSpan is performed by the RenderText parent node. + void PerformLayout() override {}; + + bool IsCallbackCalled() const; + const TextStyle& GetSpanStyle() const; + + const std::string& GetSpanData() const; + +protected: + std::string spanData_; + TextStyle spanStyle_; + bool hasNewStyle_ = false; + bool isCallbackCalled_ = false; + bool isShow_ = true; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_SPAN_RENDER_TEXT_SPAN_H diff --git a/frameworks/core/components/text_span/text_span_component.cpp b/frameworks/core/components/text_span/text_span_component.cpp new file mode 100644 index 00000000..ab53fe09 --- /dev/null +++ b/frameworks/core/components/text_span/text_span_component.cpp @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/text_span/text_span_component.h" + +#include "core/components/text_span/render_text_span.h" +#include "core/components/text_span/text_span_element.h" + +namespace OHOS::Ace { + +TextSpanComponent::TextSpanComponent(const std::string& spanData) + : ComponentGroup(std::list>()), spanData_(spanData) +{} + +RefPtr TextSpanComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +RefPtr TextSpanComponent::CreateRenderNode() +{ + return RenderTextSpan::Create(); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/text_span/text_span_component.h b/frameworks/core/components/text_span/text_span_component.h new file mode 100644 index 00000000..369ef29b --- /dev/null +++ b/frameworks/core/components/text_span/text_span_component.h @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_SPAN_TEXT_SPAN_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_SPAN_TEXT_SPAN_COMPONENT_H + +#include "core/components/common/properties/text_style.h" +#include "core/components/text_span/text_span_element.h" +#include "core/pipeline/base/component_group.h" + +namespace OHOS::Ace { + +class TextSpanComponent : public ComponentGroup { + DECLARE_ACE_TYPE(TextSpanComponent, ComponentGroup); + +public: + explicit TextSpanComponent(const std::string& spanData); + ~TextSpanComponent() override = default; + + RefPtr CreateRenderNode() override; + RefPtr CreateElement() override; + + const std::string& GetSpanData() const + { + return spanData_; + } + + void SetSpanData(const std::string& data) + { + spanData_ = data; + } + + const TextStyle& GetTextStyle() const + { + return spanStyle_; + } + + void SetTextStyle(const TextStyle& spanStyle) + { + hasNewStyle_ = true; + spanStyle_ = spanStyle; + } + + bool HasNewStyle() const + { + return hasNewStyle_; + } + + bool IsShow() const + { + return isShow_; + } + + void SetIsShow(bool isShow) + { + isShow_ = isShow; + } + +private: + std::string spanData_; + TextStyle spanStyle_; + bool hasNewStyle_ = false; + bool isShow_ = true; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_SPAN_TEXT_SPAN_COMPONENT_H diff --git a/frameworks/core/components/text_span/text_span_element.h b/frameworks/core/components/text_span/text_span_element.h new file mode 100644 index 00000000..6bd8587a --- /dev/null +++ b/frameworks/core/components/text_span/text_span_element.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_SPAN_TEXT_SPAN_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_SPAN_TEXT_SPAN_ELEMENT_H + +#include "core/pipeline/base/component_group_element.h" + +namespace OHOS::Ace { + +class TextSpanElement : public ComponentGroupElement { + DECLARE_ACE_TYPE(TextSpanElement, ComponentGroupElement); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TEXT_SPAN_TEXT_SPAN_ELEMENT_H diff --git a/frameworks/core/components/theme/BUILD.gn b/frameworks/core/components/theme/BUILD.gn new file mode 100644 index 00000000..b2290de8 --- /dev/null +++ b/frameworks/core/components/theme/BUILD.gn @@ -0,0 +1,72 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +action("build_theme_code") { + script = "tools/build_theme_code.py" + inputs = [ "theme.csv" ] + outputs = [ + "$root_out_dir/ace/framework/core/components/theme/", + "$root_out_dir/ace/framework/core/components/theme/theme_constants_default.cpp", + "$root_out_dir/ace/framework/core/components/theme/theme_constants_watch.cpp", + "$root_out_dir/ace/framework/core/components/theme/theme_constants_tv.cpp", + ] + args = [ + rebase_path(inputs[0], root_build_dir), + rebase_path(outputs[0], root_build_dir), + ] +} + +# build core theme sources +template("ace_core_components_theme_set") { + forward_variables_from(invoker, "*") + ohos_source_set(target_name) { + defines += invoker.defines + configs = [ "$ace_root:ace_config" ] + deps = [ ":build_theme_code" ] + + sources = [ + "$root_out_dir/ace/framework/core/components/theme/theme_constants_default.cpp", + "app_theme.cpp", + "theme_attributes.cpp", + "theme_constants.cpp", + "theme_manager.cpp", + "theme_utils.cpp", + ] + + # add sources only needed by wearable like watch. + if (is_wearable_product) { + sources += [ "$root_out_dir/ace/framework/core/components/theme/theme_constants_watch.cpp" ] + } else { + sources += [ "$root_out_dir/ace/framework/core/components/theme/theme_constants_tv.cpp" ] + } + + if (use_mingw_win || use_mac) { + sources += [ "resource_adapter_preview.cpp" ] + } + } +} + +ace_core_components_theme_set("ace_core_components_theme_ohos") { + defines = ace_ohos_defines +} + +ace_core_components_theme_set("ace_core_components_theme_windows") { + defines = ace_windows_defines +} + +ace_core_components_theme_set("ace_core_components_theme_mac") { + defines = ace_mac_defines +} diff --git a/frameworks/core/components/theme/app_theme.cpp b/frameworks/core/components/theme/app_theme.cpp new file mode 100644 index 00000000..602f1c83 --- /dev/null +++ b/frameworks/core/components/theme/app_theme.cpp @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/theme/app_theme.h" + +namespace OHOS::Ace { + +RefPtr AppTheme::Builder::Build(const RefPtr& themeConstants) const +{ + RefPtr theme = AceType::Claim(new AppTheme()); + if (!themeConstants) { + LOGE("Build AppTheme error, themeConstants is null!"); + return theme; + } + auto themeStyle = themeConstants->GetThemeStyle(); + if (!themeStyle) { + LOGE("Build AppTheme error, no theme resource, use prebuild color!"); + theme->backgroundColor_ = themeConstants->GetColor(THEME_APP_BACKGROUND); + return theme; + } + if (themeStyle->HasAttr(THEME_ATTR_BG_COLOR) && !themeConstants->HasCustomStyle(THEME_APP_BACKGROUND)) { + // Get from resource. + theme->backgroundColor_ = themeStyle->GetAttr(THEME_ATTR_BG_COLOR, Color::BLACK); + } else { + // Get from prebuild or custom color. + theme->backgroundColor_ = themeConstants->GetColor(THEME_APP_BACKGROUND); + } + return theme; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/theme/app_theme.h b/frameworks/core/components/theme/app_theme.h new file mode 100644 index 00000000..59c3c10a --- /dev/null +++ b/frameworks/core/components/theme/app_theme.h @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_THEME_APP_THEME_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_THEME_APP_THEME_H + +#include + +#include "core/components/common/properties/color.h" +#include "core/components/theme/theme.h" +#include "core/components/theme/theme_constants.h" + +namespace OHOS::Ace { + +/** + * AppTheme defines color and styles of whole app. AppTheme should be built + * using AppTheme::Builder. + */ +class AppTheme : public virtual Theme { + DECLARE_ACE_TYPE(AppTheme, Theme); + +public: + class Builder { + public: + Builder() = default; + ~Builder() = default; + + RefPtr Build(const RefPtr& themeConstants) const; + }; + + ~AppTheme() override = default; + + const Color& GetBackgroundColor() const + { + return backgroundColor_; + } + +protected: + AppTheme() = default; + +private: + Color backgroundColor_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_THEME_APP_THEME_H diff --git a/frameworks/core/components/theme/card_theme.h b/frameworks/core/components/theme/card_theme.h new file mode 100644 index 00000000..f054bd9b --- /dev/null +++ b/frameworks/core/components/theme/card_theme.h @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_THEME_CARD_THEME_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_THEME_CARD_THEME_H + +#include "core/components/common/properties/color.h" +#include "core/components/theme/theme.h" +#include "core/components/theme/theme_constants.h" +#include "core/components/theme/theme_manager.h" + +namespace OHOS::Ace { + +class CardTheme : public virtual Theme { + DECLARE_ACE_TYPE(CardTheme, Theme); + +public: + class Builder { + public: + Builder() = default; + ~Builder() = default; + + RefPtr Build(const RefPtr& themeConstants) const + { + RefPtr theme = AceType::Claim(new CardTheme()); + if (!themeConstants) { + return theme; + } + theme = AceType::Claim(new CardTheme()); + theme->borderRadius_ = themeConstants->GetDimension(THEME_CARD_BORDER_RADIUS); + theme->backgroundColor_ = themeConstants->GetColor(THEME_CARD_BACKGROUND_COLOR); + theme->blurRadius_ = themeConstants->GetDimension(THEME_CARD_BLUR_RADIUS); + return theme; + } + }; + + ~CardTheme() override = default; + + const Color& GetBackgroundColor() const + { + return backgroundColor_; + } + + const Dimension& GetBorderRadius() const + { + return borderRadius_; + } + + const Dimension& GetBlurRadius() const + { + return blurRadius_; + } + +protected: + CardTheme() = default; + +private: + Dimension borderRadius_; + Color backgroundColor_; + Dimension blurRadius_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_THEME_CARD_THEME_H diff --git a/frameworks/core/components/theme/resource_adapter.cpp b/frameworks/core/components/theme/resource_adapter.cpp new file mode 100644 index 00000000..effe4abe --- /dev/null +++ b/frameworks/core/components/theme/resource_adapter.cpp @@ -0,0 +1,371 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/theme/resource_adapter.h" + +#include + +#include "ResourceManager.h" +#include "TypeAttribute.h" + +#include "core/common/ace_application_info.h" +#include "core/components/common/layout/constants.h" +#include "core/components/theme/theme_attributes.h" + +namespace OHOS::Ace { +namespace { + +constexpr char COLOR_VALUE_PREFIX[] = "$color:"; +constexpr char PATTERN_NAME_KEY_WORD[] = "$pattern:"; +constexpr char STATE_VALUE_KEY_WORD[] = ".sxml"; +constexpr char REF_ATTR_VALUE_KEY_WORD[] = "?theme:"; +constexpr char STATE_CONTAINER[] = "state-container"; +constexpr char STATE_ELEMENT[] = "element"; +constexpr uint32_t STATE_MAX = 128; +constexpr double DPI_BASE = 160.0; +constexpr uint32_t THEME_ID_LIGHT = 117440515; +constexpr uint32_t THEME_ID_DARK = 117440516; + +void CheckThemeId(int32_t& themeId) +{ + if (themeId >= 0) { + return; + } + auto deviceType = SystemProperties::GetDeviceType(); + themeId = (deviceType == DeviceType::PHONE || deviceType == DeviceType::UNKNOWN) ? THEME_ID_LIGHT : THEME_ID_DARK; +} + +DimensionUnit ParseDimensionUnit(const std::string& unit) +{ + if (unit == "fp" || unit == "sp") { + return DimensionUnit::FP; + } + return DimensionUnit::VP; +}; + +Global::Resource::ORIENTATION ConvertOrientation(DeviceOrientation orientation) +{ + return orientation == DeviceOrientation::PORTRAIT ? Global::Resource::ORIENTATION::ORIENTATION_PORTRAIT + : Global::Resource::ORIENTATION::ORIENTATION_LANDSCAPE; +} + +Global::Resource::RESOLUTION ConvertResolution(double density) +{ + static const std::vector> resolutions = { + { 120.0, Global::Resource::RESOLUTION::RESOLUTION_LOW }, + { 160.0, Global::Resource::RESOLUTION::RESOLUTION_MEDIUM }, + { 240.0, Global::Resource::RESOLUTION::RESOLUTION_HIGH }, + { 320.0, Global::Resource::RESOLUTION::RESOLUTION_XHIGH }, + { 480.0, Global::Resource::RESOLUTION::RESOLUTION_XXHIGH }, + { 640.0, Global::Resource::RESOLUTION::RESOLUTION_XXXHIGH }, + }; + double deviceDpi = density * DPI_BASE; + auto resolution = Global::Resource::RESOLUTION::RESOLUTION_LOW; + for (const auto& [dpi, value] : resolutions) { + resolution = value; + if (LessOrEqual(deviceDpi, dpi)) { + break; + } + } + return resolution; +} + +Global::Resource::DEVICE_TYPE ConvertDeviceType(DeviceType type) +{ + switch (type) { + case DeviceType::PHONE: + return Global::Resource::DEVICE_TYPE::DEVICE_TYPE_PHONE; + case DeviceType::TV: + return Global::Resource::DEVICE_TYPE::DEVICE_TYPE_TV; + case DeviceType::WATCH: + return Global::Resource::DEVICE_TYPE::DEVICE_TYPE_WATCH; + case DeviceType::CAR: + return Global::Resource::DEVICE_TYPE::DEVICE_TYPE_CAR; + default: + return Global::Resource::DEVICE_TYPE::DEVICE_TYPE_UNDEFINED; + } +} + +Global::Resource::COLOR_MODE ConvertColorMode(ColorMode colorMode) +{ + return colorMode == ColorMode::LIGHT ? Global::Resource::COLOR_MODE::COLOR_MODE_LIGHT + : Global::Resource::COLOR_MODE::COLOR_MODE_DARK; +} + +Global::Resource::Configuration ConvertConfig(const DeviceConfig& config) +{ + Global::Resource::Configuration::Locale locale(AceApplicationInfo::GetInstance().GetLanguage(), + AceApplicationInfo::GetInstance().GetCountryOrRegion(), AceApplicationInfo::GetInstance().GetScript()); + Global::Resource::Configuration globalConfig = { + .locales_ = { locale }, + .orientation_ = ConvertOrientation(config.orientation), + .resolution_ = ConvertResolution(config.density), + .deviceType_ = ConvertDeviceType(config.deviceType), + .fontRatio_ = config.fontRatio, + .colorMode_ = ConvertColorMode(config.colorMode), + }; + return globalConfig; +} + +RefPtr ParseStateResource(const std::string& styleName, const std::string& attrName, + std::unique_ptr xmlWrapper) +{ + auto rootNode = xmlWrapper->GetRoot(); + if (!rootNode) { + LOGE("Parse %{public}s state resource %{public}s error! No root!", styleName.c_str(), attrName.c_str()); + return nullptr; + } + if (rootNode->GetNodeName() != STATE_CONTAINER) { + LOGE("Parse %{public}s state resource %{public}s error! Root name error!", styleName.c_str(), attrName.c_str()); + return nullptr; + } + auto stateResource = AceType::MakeRefPtr(); + auto node = rootNode->GetChild(); + uint32_t stateCount = 0; + while (node && ++stateCount < STATE_MAX) { + // Parse each item + auto nodeAttrs = node->GetAttributes(); + auto valueFindIter = nodeAttrs.find(STATE_ELEMENT); + if (valueFindIter == nodeAttrs.end()) { + continue; + } + auto stateColor = Color(valueFindIter->second.GetColorValue()); + uint32_t state = STATE_NORMAL; + static const std::unordered_map stateMap = { + { "state_pressed", STATE_PRESSED }, + { "state_focus", STATE_FOCUS }, + { "state_checked", STATE_CHECKED }, + { "state_disabled", STATE_DISABLED }, + { "state_waiting", STATE_WAITING }, + { "state_hovered", STATE_HOVERED }, + }; + for (auto& [stateKey, stateValue] : nodeAttrs) { + auto stateFindIter = stateMap.find(stateKey); + if (stateFindIter == stateMap.end()) { + continue; + } + if (stateValue.GetStringValue() != "true") { + continue; + } + state |= stateFindIter->second; + } + stateResource->SetStateValue(state, { .type = ThemeConstantsType::COLOR, .value = stateColor }); + node = node->GetSibling(); + } + return stateResource; +} + +} // namespace + +class ResourceAdapterImpl : public ResourceAdapter { + DECLARE_ACE_TYPE(ResourceAdapterImpl, ResourceAdapter); + +public: + ResourceAdapterImpl() = default; + ~ResourceAdapterImpl() override = default; + + void Init(const DeviceResourceInfo& resourceInfo) override; + void UpdateConfig(const DeviceConfig& config) override; + + RefPtr GetTheme(int32_t themeId) override; + + Color GetColor(uint32_t resId) override; + Dimension GetDimension(uint32_t resId) override; + std::string GetString(uint32_t resId) override; + double GetDouble(uint32_t resId) override; + int32_t GetInt(uint32_t resId) override; + +private: + Global::Resource::ResourceManager resourceManger_; + + ACE_DISALLOW_COPY_AND_MOVE(ResourceAdapterImpl); +}; + +class RawThemeStyle : public ThemeStyle { + DECLARE_ACE_TYPE(RawThemeStyle, ThemeStyle); + +public: + friend class ResourceAdapterImpl; + using RawAttrMap = std::unordered_map>; + + explicit RawThemeStyle(RefPtr resAdapter) : resAdapter_(resAdapter) {}; + ~RawThemeStyle() override = default; + + void ParseContent() override; + +private: + RawAttrMap rawAttrs_; // key and value read from global resource api. + RefPtr resAdapter_; +}; + +void RawThemeStyle::ParseContent() +{ + static const std::set stringAttrs = { + "attr_text_font_family_regular", + "attr_text_font_family_medium" + }; + for (auto& [attrName, attrValue] : rawAttrs_) { + if (!attrValue) { + continue; + } + auto rawString = attrValue->GetOriginalValue(); + if (rawString.size() == 0) { + continue; + } + if (rawString.front() == '#' || rawString.find(COLOR_VALUE_PREFIX) != std::string::npos) { + // color + attributes_[attrName] = { .type = ThemeConstantsType::COLOR, .value = Color(attrValue->GetColorValue()) }; + } else if (stringAttrs.find(attrName) != stringAttrs.end()) { + // string + attributes_[attrName] = { .type = ThemeConstantsType::STRING, .value = rawString }; + } else if (rawString.find(PATTERN_NAME_KEY_WORD) != std::string::npos) { + // pattern + auto patternStyle = AceType::MakeRefPtr(resAdapter_); + patternStyle->SetName(attrName); + patternStyle->parentStyle_ = AceType::WeakClaim(this); + patternStyle->rawAttrs_ = attrValue->GetPattern(); + patternStyle->ParseContent(); + attributes_[attrName] = { .type = ThemeConstantsType::PATTERN, + .value = RefPtr(std::move(patternStyle)) }; + } else if (rawString.rfind(STATE_VALUE_KEY_WORD) != std::string::npos) { + // state graphic value + auto xmlWrapper = attrValue->GetLayoutValue(); + if (!xmlWrapper) { + LOGE("Parse %{public}s state resource %{public}s error! xml is null!", name_.c_str(), attrName.c_str()); + continue; + } + auto stateResource = ParseStateResource(name_, attrName, std::move(xmlWrapper)); + if (!stateResource) { + continue; + } + attributes_[attrName] = { .type = ThemeConstantsType::STATE_RESOURCE, .value = stateResource }; + } else if (rawString.find(REF_ATTR_VALUE_KEY_WORD) != std::string::npos) { + attributes_[attrName] = { .type = ThemeConstantsType::REFERENCE_ATTR, .value = rawString }; + } else { + // double & dimension + std::string unit = ""; + auto doubleValue = static_cast(attrValue->GetFloat(unit)); + if (unit.empty()) { + attributes_[attrName] = { .type = ThemeConstantsType::DOUBLE, .value = doubleValue }; + } else { + attributes_[attrName] = { .type = ThemeConstantsType::DIMENSION, + .value = Dimension(doubleValue, ParseDimensionUnit(unit)) }; + } + } + } +} + +RefPtr ResourceAdapter::Create() +{ + return AceType::MakeRefPtr(); +} + +void ResourceAdapterImpl::Init(const DeviceResourceInfo& resourceInfo) +{ + std::vector hapFiles = { resourceInfo.packagePath }; + auto configuration = ConvertConfig(resourceInfo.deviceConfig); + auto handlers = resourceInfo.resourcehandlers; + bool initRet = false; + if (handlers.empty()) { + initRet = resourceManger_.Init(hapFiles, configuration); + } else { + initRet = resourceManger_.Init(hapFiles, handlers); + resourceManger_.UpdateConfig(configuration); + } + LOGI("Init result=%{public}d, handle=%{public}zu, ori=%{public}d, dpi=%{public}d, device=%{public}d, " + "font=%{public}f, color=%{public}d", + initRet, handlers.size(), configuration.orientation_, configuration.resolution_, configuration.deviceType_, + configuration.fontRatio_, configuration.colorMode_); +} + +void ResourceAdapterImpl::UpdateConfig(const DeviceConfig& config) +{ + auto configuration = ConvertConfig(config); + LOGI("UpdateConfig ori=%{public}d, dpi=%{public}d, device=%{public}d, font=%{public}f, color=%{public}d", + configuration.orientation_, configuration.resolution_, configuration.deviceType_, configuration.fontRatio_, + configuration.colorMode_); + resourceManger_.UpdateConfig(configuration); +} + +RefPtr ResourceAdapterImpl::GetTheme(int32_t themeId) +{ + CheckThemeId(themeId); + auto theme = AceType::MakeRefPtr(AceType::Claim(this)); + auto& attrMap = theme->rawAttrs_; + auto ret = resourceManger_.GetTheme(themeId, attrMap); + LOGI("GetTheme themeId=%{public}d, ret=%{public}d, attr size=%{public}zu", themeId, ret, attrMap.size()); + auto iter = attrMap.find(THEME_ATTR_BG_COLOR); + if (iter != attrMap.end()) { + auto& attribute = iter->second; + if (attribute) { + Color bgColor(attribute->GetColorValue()); + theme->SetAttr(THEME_ATTR_BG_COLOR, { .type = ThemeConstantsType::COLOR, .value = bgColor }); + } + } + return theme; +} + +Color ResourceAdapterImpl::GetColor(uint32_t resId) +{ + uint32_t result = 0; + auto ret = resourceManger_.GetColor(static_cast(resId), result); + if (!ret) { + LOGE("GetColor error, id=%{public}u", resId); + } + return Color(result); +} + +Dimension ResourceAdapterImpl::GetDimension(uint32_t resId) +{ + float result = 0; + std::string unit = ""; + auto ret = resourceManger_.GetFloat(static_cast(resId), result, unit); + if (!ret) { + LOGE("GetDimension error, id=%{public}u", resId); + } + return Dimension(result, ParseDimensionUnit(unit)); +} + +std::string ResourceAdapterImpl::GetString(uint32_t resId) +{ + std::string strResult = ""; + auto ret = resourceManger_.GetString(static_cast(resId), strResult); + if (!ret) { + LOGE("GetString error, id=%{public}u", resId); + } + return strResult; +} + +double ResourceAdapterImpl::GetDouble(uint32_t resId) +{ + float result = 0.0f; + auto ret = resourceManger_.GetFloat(static_cast(resId), result); + if (!ret) { + LOGE("GetDouble error, id=%{public}u", resId); + } + return static_cast(result); +} + +int32_t ResourceAdapterImpl::GetInt(uint32_t resId) +{ + int32_t result = 0; + auto ret = resourceManger_.GetInt(static_cast(resId), result); + if (!ret) { + LOGE("GetInt error, id=%{public}u", resId); + } + return result; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/theme/resource_adapter.h b/frameworks/core/components/theme/resource_adapter.h new file mode 100644 index 00000000..9c31621d --- /dev/null +++ b/frameworks/core/components/theme/resource_adapter.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_THEME_RESOURCE_ADAPTER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_THEME_RESOURCE_ADAPTER_H + +#include "base/utils/device_config.h" +#include "core/components/theme/theme_style.h" + +namespace OHOS::Ace { + +class ResourceAdapter : public virtual AceType { + DECLARE_ACE_TYPE(ResourceAdapter, AceType); + +public: + ResourceAdapter() = default; + ~ResourceAdapter() override = default; + + static RefPtr Create(); + + virtual void Init(const DeviceResourceInfo& resourceInfo) {}; + virtual void UpdateConfig(const DeviceConfig& config) {}; + + virtual RefPtr GetTheme(int32_t themeId) = 0; + + virtual Color GetColor(uint32_t resId) = 0; + virtual Dimension GetDimension(uint32_t resId) = 0; + virtual std::string GetString(uint32_t resId) = 0; + virtual double GetDouble(uint32_t resId) = 0; + virtual int32_t GetInt(uint32_t resId) = 0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_THEME_RESOURCE_ADAPTER_H diff --git a/frameworks/core/components/theme/resource_adapter_preview.cpp b/frameworks/core/components/theme/resource_adapter_preview.cpp new file mode 100644 index 00000000..bfde9dce --- /dev/null +++ b/frameworks/core/components/theme/resource_adapter_preview.cpp @@ -0,0 +1,598 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/theme/resource_adapter_preview.h" + +#include +#include +#include + +#include "frameworks/base/json/json_util.h" + +namespace OHOS::Ace { +namespace { + +constexpr uint32_t SYSTEM_RES_ID_BASE = 0x7000000; +const std::string FLOAT_REFERENCE_PREFIX = "$float:"; +const std::string STRING_REFERENCE_PREFIX = "$string:"; +const std::string PATTERN_REFERENCE_PREFIX = "$pattern:"; +const std::string COLOR_REFERENCE_PREFIX = "$color:"; +const std::string THEME_DYNAMIC_REFERENCE_PREFIX = "?theme:"; +// the length of dimension unit(vp/fp) is 2. +constexpr int32_t DIMENSION_UNIT_LENGTH = 2; +const std::regex COLOR_REGEX("#[0-9A-Fa-f]{6,8}"); +// end with fp/vp +const std::regex DIMENSION_UNIT_REGEX("[fsvd]p$"); +// non negative float or int number +const std::regex NON_NEGATIVE_FLOAT_OR_INT_REGEX("^(\\d+)(\\.?)(\\d*)$"); +#if defined(WINDOWS_PLATFORM) +const std::string SYSTEM_RESOURCE_BASE_ELEMENT_DIR_SUFFIX = "\\base\\element\\"; +const std::string SYSTEM_RESOURCE_DARK_ELEMENT_DIR_SUFFIX = "\\dark\\element\\"; +#else +// for MAC platform +const std::string SYSTEM_RESOURCE_BASE_ELEMENT_DIR_SUFFIX = "/base/element/"; +const std::string SYSTEM_RESOURCE_DARK_ELEMENT_DIR_SUFFIX = "/dark/element/"; +#endif +const std::string BASE_FLOAT_JSON_FILE_SUFFIX = SYSTEM_RESOURCE_BASE_ELEMENT_DIR_SUFFIX + "float.json"; +const std::string DARK_FLOAT_JSON_FILE_SUFFIX = SYSTEM_RESOURCE_DARK_ELEMENT_DIR_SUFFIX + "float.json"; +const std::string BASE_STRINGS_JSON_FILE_SUFFIX = SYSTEM_RESOURCE_BASE_ELEMENT_DIR_SUFFIX + "strings.json"; +const std::string BASE_COLORS_JSON_FILE_SUFFIX = SYSTEM_RESOURCE_BASE_ELEMENT_DIR_SUFFIX + "colors.json"; +const std::string DARK_COLORS_JSON_FILE_SUFFIX = SYSTEM_RESOURCE_DARK_ELEMENT_DIR_SUFFIX + "colors.json"; +const std::string BASE_DARK_COLORS_JSON_FILE_SUFFIX = SYSTEM_RESOURCE_BASE_ELEMENT_DIR_SUFFIX + "colors_dark.json"; +const std::string BASE_PATTENS_LIGHT_JSON_FILE_SUFFIX = SYSTEM_RESOURCE_BASE_ELEMENT_DIR_SUFFIX + "patterns_light.json"; +const std::string BASE_PATTENS_DARK_JSON_FILE_SUFFIX = SYSTEM_RESOURCE_BASE_ELEMENT_DIR_SUFFIX + "patterns_dark.json"; +const std::string BASE_THEME_LIGHT_JSON_FILE_SUFFIX = SYSTEM_RESOURCE_BASE_ELEMENT_DIR_SUFFIX + "theme_light.json"; +const std::string BASE_THEME_DARK_JSON_FILE_SUFFIX = SYSTEM_RESOURCE_BASE_ELEMENT_DIR_SUFFIX + "theme_dark.json"; +const std::string BASE_RECORD_JSON_FILE_SUFFIX = SYSTEM_RESOURCE_BASE_ELEMENT_DIR_SUFFIX + "id_defined.json"; + +} // namespace + +RefPtr ResourceAdapter::Create() +{ + return AceType::MakeRefPtr(); +} + +bool ResourceAdapterPreview::ReadFileToString(const std::string& filePath, std::string& fileContent) +{ + std::ifstream inFile(filePath.c_str()); + if (inFile.fail()) { + LOGE("open file(%{public}s) failed", filePath.c_str()); + inFile.close(); + return false; + } + + fileContent.clear(); + inFile.seekg(0, std::ios::end); + fileContent.reserve(static_cast(inFile.tellg())); + inFile.seekg(0, std::ios::beg); + fileContent.assign(std::istreambuf_iterator(inFile), std::istreambuf_iterator()); + inFile.close(); + + return true; +} + +bool ResourceAdapterPreview::ConvertFloatValToResValueWrapper(const std::string& floatVal, + ResValueWrapper& resValWrapper) +{ + std::string dimensionUnit; + std::string doubleVal; + if (std::regex_search(floatVal, DIMENSION_UNIT_REGEX)) { + dimensionUnit = floatVal.substr(floatVal.size() - DIMENSION_UNIT_LENGTH); + doubleVal = floatVal.substr(0, floatVal.size() - DIMENSION_UNIT_LENGTH); + } else if (strncmp(floatVal.c_str(), FLOAT_REFERENCE_PREFIX.c_str(), FLOAT_REFERENCE_PREFIX.length()) == 0) { + auto iter = sysResFloat_.find(floatVal.substr(strlen(FLOAT_REFERENCE_PREFIX.c_str()))); + resValWrapper = iter->second; + return true; + } else { + doubleVal = floatVal; + } + + if (std::regex_match(doubleVal, NON_NEGATIVE_FLOAT_OR_INT_REGEX)) { + if (dimensionUnit.empty()) { + resValWrapper = { .type = ThemeConstantsType::DOUBLE, .value = std::stod(doubleVal) }; + return true; + } + if (dimensionUnit == "fp") { + resValWrapper = { .type = ThemeConstantsType::DIMENSION, + .value = Dimension(std::stod(doubleVal), DimensionUnit::FP) }; + return true; + } + if (dimensionUnit == "vp") { + resValWrapper = { .type = ThemeConstantsType::DIMENSION, + .value = Dimension(std::stod(doubleVal), DimensionUnit::VP) }; + return true; + } + } + return false; +} + +bool ResourceAdapterPreview::ParseFloatJsonFile(const std::string& jsonFile) +{ + std::string fileContent; + if (!ReadFileToString(jsonFile, fileContent)) { + return false; + } + auto rootJson = JsonUtil::ParseJsonString(fileContent); + auto floatVal = rootJson->GetValue("float"); + if (floatVal->IsNull()) { + LOGE("float not found."); + return false; + } + + auto child = floatVal->GetChild(); + while (child && !child->IsNull()) { + const auto& key = child->GetString("name"); + const auto& value = child->GetString("value"); + child = child->GetNext(); + ResValueWrapper resValWrapper; + if (!ConvertFloatValToResValueWrapper(value, resValWrapper)) { + LOGE("convert FloatVal(%{public}s) to ResValueWrapper failed!", value.c_str()); + continue; + } + sysResFloat_[key] = resValWrapper; + } + + return true; +} + +bool ResourceAdapterPreview::ParseStringJsonFile(const std::string& jsonFile) +{ + std::string fileContent; + if (!ReadFileToString(jsonFile, fileContent)) { + return false; + } + auto rootJson = JsonUtil::ParseJsonString(fileContent); + auto strVal = rootJson->GetValue("string"); + if (strVal->IsNull()) { + LOGE("ParseStringJsonFile, 'string' not found."); + return false; + } + + auto child = strVal->GetChild(); + while (child && !child->IsNull()) { + const auto& key = child->GetString("name"); + const auto& value = child->GetString("value"); + child = child->GetNext(); + sysResString_[key] = { .type = ThemeConstantsType::STRING, .value = value }; + } + + return true; +} + +bool ResourceAdapterPreview::ConvertColorValToResValueWrapper(const std::string& colorVal, + ResValueWrapper& resValWrapper) +{ + if (std::regex_match(colorVal, COLOR_REGEX)) { + resValWrapper = { .type = ThemeConstantsType::COLOR, .value = Color::FromString(colorVal) }; + return true; + } + if (strncmp(colorVal.c_str(), COLOR_REFERENCE_PREFIX.c_str(), COLOR_REFERENCE_PREFIX.length()) == 0) { + auto iter = sysResColor_.find(colorVal.substr(strlen(COLOR_REFERENCE_PREFIX.c_str()))); + if (iter != sysResColor_.end()) { + resValWrapper = iter->second; + return true; + } + } + return false; +} + +bool ResourceAdapterPreview::ParseColorJsonFile(const std::string& jsonFile) +{ + std::string fileContent; + if (!ReadFileToString(jsonFile, fileContent)) { + return false; + } + auto rootJson = JsonUtil::ParseJsonString(fileContent); + auto colorsVal = rootJson->GetValue("color"); + if (colorsVal->IsNull()) { + LOGE("ParseColorJsonFile, 'color' not found."); + return false; + } + + auto child = colorsVal->GetChild(); + while (child && !child->IsNull()) { + const auto& key = child->GetString("name"); + const auto& value = child->GetString("value"); + child = child->GetNext(); + ResValueWrapper resValWrapper; + if (!ConvertColorValToResValueWrapper(value, resValWrapper)) { + LOGE("convert ColorVal(%{public}s) to ResValueWrapper failed!", value.c_str()); + continue; + } + sysResColor_[key] = resValWrapper; + } + + return true; +} + +bool ResourceAdapterPreview::ConvertStringValToResValueWrapper(const std::string& stringVal, + ResValueWrapper& resValWrapper) +{ + if (strncmp(stringVal.c_str(), STRING_REFERENCE_PREFIX.c_str(), STRING_REFERENCE_PREFIX.length()) == 0) { + auto iter = sysResString_.find(stringVal.substr(strlen(STRING_REFERENCE_PREFIX.c_str()))); + if (iter != sysResString_.end()) { + resValWrapper = iter->second; + return true; + } + } + return false; +} + +bool ResourceAdapterPreview::ParsePatternJsonFile(const std::string& jsonFile) +{ + std::string fileContent; + if (!ReadFileToString(jsonFile, fileContent)) { + return false; + } + auto rootJson = JsonUtil::ParseJsonString(fileContent); + auto patternVal = rootJson->GetValue("pattern"); + if (patternVal->IsNull()) { + LOGE("ParsePatternJsonFile, 'pattern' not found."); + return false; + } + + auto child = patternVal->GetChild(); + while (child && !child->IsNull()) { + const auto& key = child->GetString("name"); + const auto& parentValue = child->GetString("parent"); + auto themeStyle = AceType::MakeRefPtr(); + if (!parentValue.empty()) { + auto patternIter = sysResPattern_.find(parentValue); + if (patternIter != sysResPattern_.end()) { + themeStyle = (patternIter->second.GetValue>(nullptr)).second; + } + } + themeStyle->SetName(key); + const auto& value = child->GetValue("value"); + child = child->GetNext(); + auto item = value->GetChild(); + while (item && !item->IsNull()) { + const auto& itemKey = item->GetString("name"); + const auto& itemValue = item->GetString("value"); + item = item->GetNext(); + ResValueWrapper resValWrapper; + if (ConvertColorValToResValueWrapper(itemValue, resValWrapper)) { + themeStyle->SetAttr(itemKey, resValWrapper); + continue; + } + if (ConvertFloatValToResValueWrapper(itemValue, resValWrapper)) { + themeStyle->SetAttr(itemKey, resValWrapper); + continue; + } + if (strncmp(itemValue.c_str(), THEME_DYNAMIC_REFERENCE_PREFIX.c_str(), + THEME_DYNAMIC_REFERENCE_PREFIX.length()) == 0) { + resValWrapper = { .type = ThemeConstantsType::REFERENCE_ATTR, .value = itemValue }; + themeStyle->SetAttr(itemKey, resValWrapper); + continue; + } + if (ConvertStringValToResValueWrapper(itemValue, resValWrapper)) { + themeStyle->SetAttr(itemKey, resValWrapper); + continue; + } + } + sysResPattern_[key] = { .type = ThemeConstantsType::PATTERN, .value = std::move(themeStyle) }; + } + + return true; +} + +bool ResourceAdapterPreview::ConvertThemeValToResValueWrapper(const std::string& themeVal, + ResValueWrapper& resValWrapper) +{ + if (ConvertColorValToResValueWrapper(themeVal, resValWrapper)) { + return true; + } + if (ConvertFloatValToResValueWrapper(themeVal, resValWrapper)) { + return true; + } + if (ConvertStringValToResValueWrapper(themeVal, resValWrapper)) { + return true; + } + if (strncmp(themeVal.c_str(), PATTERN_REFERENCE_PREFIX.c_str(), PATTERN_REFERENCE_PREFIX.length()) == 0) { + auto iter = sysResPattern_.find(themeVal.substr(strlen(PATTERN_REFERENCE_PREFIX.c_str()))); + if (iter != sysResPattern_.end()) { + resValWrapper = iter->second; + return true; + } + } + return false; +} + +bool ResourceAdapterPreview::ParseThemeJsonFile(const std::string& jsonFile) +{ + std::string fileContent; + if (!ReadFileToString(jsonFile, fileContent)) { + return false; + } + auto rootJson = JsonUtil::ParseJsonString(fileContent); + auto themeVal = rootJson->GetValue("theme"); + if (themeVal->IsNull()) { + LOGE("ParseThemeJsonFile, 'theme' not found."); + return false; + } + + auto child = themeVal->GetChild(); + while (child && !child->IsNull()) { + const auto& key = child->GetString("name"); + const auto& parentValue = child->GetString("parent"); + auto themeStyle = AceType::MakeRefPtr(); + if (!parentValue.empty()) { + auto themeIter = sysResTheme_.find(parentValue); + if (themeIter != sysResTheme_.end()) { + themeStyle = (themeIter->second.GetValue>(nullptr)).second; + } + } + themeStyle->SetName(key); + const auto& value = child->GetValue("value"); + child = child->GetNext(); + auto item = value->GetChild(); + while (item && !item->IsNull()) { + const auto& itemKey = item->GetString("name"); + const auto& itemValue = item->GetString("value"); + item = item->GetNext(); + ResValueWrapper resValWrapper; + if (!ConvertThemeValToResValueWrapper(itemValue, resValWrapper)) { + LOGW("convert themeval(=%{public}s) to ResValueWrapper failed", itemValue.c_str()); + continue; + } + themeStyle->SetAttr(itemKey, resValWrapper); + } + sysResTheme_[key] = { .type = ThemeConstantsType::THEME, .value = std::move(themeStyle) }; + } + return true; +} + +bool ResourceAdapterPreview::PostprocessSystemResources() +{ + // After all json files have been loaded, resolve references to theme element in pattern element. + for (auto themeIter = sysResTheme_.begin(); themeIter != sysResTheme_.end(); ++themeIter) { + auto themeStyle = (themeIter->second.GetValue>(nullptr)).second; + if (!themeStyle) { + LOGW("PostprocessSystemResources invalid theme(%{public}s)", themeIter->first.c_str()); + continue; + } + auto themeAttrs = themeStyle->GetAttributes(); + for (auto themeAttrIter = themeAttrs.begin(); themeAttrIter != themeAttrs.end(); ++themeAttrIter) { + // There are four types of themeAttr: string/color/float/pattern + // Only element in pattern that reference to theme(for example, "?theme:xxx") need to be resolved by + // current theme attributes. + if (themeAttrIter->second.type != ThemeConstantsType::PATTERN) { + continue; + } + auto pattern = (themeAttrIter->second.GetValue>(nullptr)).second; + if (!pattern) { + continue; + } + // make a copy of pattern with all references are resolved. + auto resolvedPattern = AceType::MakeRefPtr(); + resolvedPattern->SetName(pattern->GetName()); + auto patternAttrs = pattern->GetAttributes(); + for (auto patternAttrIter = patternAttrs.begin(); patternAttrIter != patternAttrs.end(); + ++patternAttrIter) { + // There are four types of patternAttr: string/color/float and reference to theme. + if (patternAttrIter->second.type != ThemeConstantsType::REFERENCE_ATTR) { + resolvedPattern->SetAttr(patternAttrIter->first, patternAttrIter->second); + continue; + } + auto refToTheme = (patternAttrIter->second.GetValue("")).second; + if (strncmp(refToTheme.c_str(), THEME_DYNAMIC_REFERENCE_PREFIX.c_str(), + THEME_DYNAMIC_REFERENCE_PREFIX.length()) != 0) { + continue; + } + auto valueFromTheme = themeAttrs.find(refToTheme.substr(THEME_DYNAMIC_REFERENCE_PREFIX.size())); + if (valueFromTheme == themeAttrs.end()) { + LOGW("can't find pattern(%{public}s) element(%{public}s) in theme(%{public}s)", + patternAttrIter->first.c_str(), refToTheme.c_str(), themeIter->first.c_str()); + continue; + } + resolvedPattern->SetAttr(patternAttrIter->first, valueFromTheme->second); + } + // update pattern value in theme attributes. + themeStyle->SetAttr(themeAttrIter->first, { + .type = ThemeConstantsType::PATTERN, + .value = std::move(resolvedPattern) + }); + } + } + return true; +} + +bool ResourceAdapterPreview::ParseRecordJsonFile(const std::string& jsonFile) +{ + std::string fileContent; + if (!ReadFileToString(jsonFile, fileContent)) { + return false; + } + auto rootJson = JsonUtil::ParseJsonString(fileContent); + auto strVal = rootJson->GetValue("record"); + if (strVal->IsNull()) { + LOGE("ParseStringJsonFile, 'string' not found."); + return false; + } + + auto child = strVal->GetChild(); + while (child && !child->IsNull()) { + const auto& name = child->GetString("name"); + const auto& type = child->GetString("type"); + uint32_t resId = child->GetUInt("order") + SYSTEM_RES_ID_BASE; + child = child->GetNext(); + sysResRecord_[resId] = std::make_pair(name, type); + } + + return true; +} + +bool ResourceAdapterPreview::LoadSystemResources(const std::string& sysResDir, const int32_t& themeId, + const ColorMode& colorMode) +{ + LOGI("loading system resources from %{private}s", sysResDir.c_str()); + if (access(sysResDir.c_str(), F_OK) != 0) { + LOGE("load system resources failed, %{public}s does not exist!", sysResDir.c_str()); + return false; + } + // The float/string/color json files are parsed first, then the pattern json files, finally the theme json files. + ParseFloatJsonFile(sysResDir + BASE_FLOAT_JSON_FILE_SUFFIX); + ParseStringJsonFile(sysResDir + BASE_STRINGS_JSON_FILE_SUFFIX); + ParseColorJsonFile(sysResDir + BASE_COLORS_JSON_FILE_SUFFIX); + + // If dark color mode, parse the colors.json and float.json in dark directory. + if (colorMode == ColorMode::DARK) { + ParseFloatJsonFile(sysResDir + DARK_FLOAT_JSON_FILE_SUFFIX); + ParseColorJsonFile(sysResDir + DARK_COLORS_JSON_FILE_SUFFIX); + } + + ParsePatternJsonFile(sysResDir + BASE_PATTENS_LIGHT_JSON_FILE_SUFFIX); + ParseThemeJsonFile(sysResDir + BASE_THEME_LIGHT_JSON_FILE_SUFFIX); + + // If dark theme, parse colors_dark.json, patterns_dark.json, theme_dark.json. + if (themeId == 1) { + ParseColorJsonFile(sysResDir + BASE_DARK_COLORS_JSON_FILE_SUFFIX); + ParsePatternJsonFile(sysResDir + BASE_PATTENS_DARK_JSON_FILE_SUFFIX); + ParseThemeJsonFile(sysResDir + BASE_THEME_DARK_JSON_FILE_SUFFIX); + } + + PostprocessSystemResources(); + // get the mapping relationship between system resources id and name. + ParseRecordJsonFile(sysResDir + BASE_RECORD_JSON_FILE_SUFFIX); + LOGI("load system resources from json, float size = %{public}zu, string size = %{public}zu, " + "color size = %{public}zu, pattern size = %{public}zu, theme size = %{public}zu, record size = %{public}zu", + sysResFloat_.size(), sysResString_.size(), sysResColor_.size(), sysResPattern_.size(), sysResTheme_.size(), + sysResRecord_.size()); + return true; +} + +void ResourceAdapterPreview::Init(const DeviceResourceInfo& resourceInfo) +{ + LoadSystemResources(resourceInfo.packagePath, resourceInfo.themeId, resourceInfo.deviceConfig.colorMode); +} + +void ResourceAdapterPreview::UpdateConfig(const DeviceConfig& config) +{ + // dynamic theme modification is not supported in PC Preview mode! + LOGE("ResourceAdapterPreview::UpdateConfig is not implemented yet"); +} + +RefPtr ResourceAdapterPreview::GetTheme(int32_t themeId) +{ + if (themeId == 1) { + LOGD("ResourceAdapterPreview::GetTheme(themeId=%{public}d), theme style = theme_dark", themeId); + auto iter = sysResTheme_.find("theme_dark"); + if (iter == sysResTheme_.end()) { + LOGE("ResourceAdapterPreview::GetTheme failed, can't find theme."); + return nullptr; + } + auto themeStyle = iter->second.GetValue>(nullptr); + if (!themeStyle.first) { + LOGE("ResourceAdapterPreview::GetTheme failed, invalid theme style."); + } + return themeStyle.second; + } + + LOGD("ResourceAdapterPreview::GetTheme(themeId=%{public}d), theme style = theme_light", themeId); + auto iter = sysResTheme_.find("theme_light"); + if (iter == sysResTheme_.end()) { + LOGE("ResourceAdapterPreview::GetTheme failed, can't find theme."); + return nullptr; + } + auto themeStyle = iter->second.GetValue>(nullptr); + if (!themeStyle.first) { + LOGE("ResourceAdapterPreview::GetTheme failed, invalid theme style."); + } + return themeStyle.second; +} + +Color ResourceAdapterPreview::GetColor(uint32_t resId) +{ + auto recordIter = sysResRecord_.find(resId); + if (recordIter == sysResRecord_.end()) { + LOGW("GetColor can't find resource(id=%{public}u)", resId); + return Color(0); + } + auto resIter = sysResColor_.find(recordIter->second.first); + if (resIter == sysResColor_.end()) { + LOGW("GetColor can't find resource(name=%{public}s)", recordIter->second.first.c_str()); + return Color(0); + } + auto resVal = resIter->second.GetValue(Color(0)); + if (!resVal.first) { + LOGW("GetColor get color value from ResValueWrapper failed"); + } + return resVal.second; +} + +Dimension ResourceAdapterPreview::GetDimension(uint32_t resId) +{ + auto recordIter = sysResRecord_.find(resId); + if (recordIter == sysResRecord_.end()) { + LOGW("GetDimension can't find resource(id=%{public}u)", resId); + return 0.0_vp; + } + auto resIter = sysResFloat_.find(recordIter->second.first); + if (resIter == sysResFloat_.end()) { + LOGW("GetDimension can't find resource(name=%{public}s)", recordIter->second.first.c_str()); + return 0.0_vp; + } + auto resVal = resIter->second.GetValue(0.0_vp); + if (!resVal.first) { + LOGW("GetDimension get dimension value from ResValueWrapper failed"); + } + return resVal.second; +} + +std::string ResourceAdapterPreview::GetString(uint32_t resId) +{ + auto recordIter = sysResRecord_.find(resId); + if (recordIter == sysResRecord_.end()) { + LOGW("GetString can't find resource(id=%{public}u)", resId); + return ""; + } + auto resIter = sysResString_.find(recordIter->second.first); + if (resIter == sysResString_.end()) { + LOGW("GetString can't find resource(name=%{public}s)", recordIter->second.first.c_str()); + return ""; + } + auto resVal = resIter->second.GetValue(""); + if (!resVal.first) { + LOGW("GetString get string value from ResValueWrapper failed"); + } + return resVal.second; +} + +double ResourceAdapterPreview::GetDouble(uint32_t resId) +{ + auto recordIter = sysResRecord_.find(resId); + if (recordIter == sysResRecord_.end()) { + LOGW("GetDouble can't find resource(id=%{public}u)", resId); + return 0.0; + } + auto resIter = sysResFloat_.find(recordIter->second.first); + if (resIter == sysResFloat_.end()) { + LOGW("GetDouble can't find resource(name=%{public}s)", recordIter->second.first.c_str()); + return 0.0; + } + auto resVal = resIter->second.GetValue(0.0); + if (!resVal.first) { + LOGW("GetDouble get double value from ResValueWrapper failed"); + } + return resVal.second; +} + +int32_t ResourceAdapterPreview::GetInt(uint32_t resId) +{ + LOGE("ResourceAdapterPreview::GetInt is not implemented yet"); + return 0; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/theme/resource_adapter_preview.h b/frameworks/core/components/theme/resource_adapter_preview.h new file mode 100644 index 00000000..d30db888 --- /dev/null +++ b/frameworks/core/components/theme/resource_adapter_preview.h @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_THEME_RESOURCE_ADAPTER_PREVIEW_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_THEME_RESOURCE_ADAPTER_PREVIEW_H + +#include "core/components/theme/resource_adapter.h" + +namespace OHOS::Ace { + +class ResourceAdapterPreview : public ResourceAdapter { + DECLARE_ACE_TYPE(ResourceAdapterPreview, ResourceAdapter); + +public: + ResourceAdapterPreview() = default; + ~ResourceAdapterPreview() override = default; + + void Init(const DeviceResourceInfo& resourceInfo) override; + void UpdateConfig(const DeviceConfig& config) override; + + RefPtr GetTheme(int32_t themeId) override; + + Color GetColor(uint32_t resId) override; + Dimension GetDimension(uint32_t resId) override; + std::string GetString(uint32_t resId) override; + double GetDouble(uint32_t resId) override; + int32_t GetInt(uint32_t resId) override; + +private: + bool ReadFileToString(const std::string& filePath, std::string& fileContent); + bool ConvertColorValToResValueWrapper(const std::string& colorVal, ResValueWrapper& resValWrapper); + bool ConvertFloatValToResValueWrapper(const std::string& floatVal, ResValueWrapper& resValWrapper); + bool ConvertThemeValToResValueWrapper(const std::string& themeVal, ResValueWrapper& resValWrapper); + bool ConvertStringValToResValueWrapper(const std::string& StringVal, ResValueWrapper& resValWrapper); + bool ParseFloatJsonFile(const std::string& jsonFile); + bool ParseStringJsonFile(const std::string& jsonFile); + bool ParseColorJsonFile(const std::string& jsonFile); + bool ParsePatternJsonFile(const std::string& jsonFile); + bool ParseThemeJsonFile(const std::string& jsonFile); + bool ParseRecordJsonFile(const std::string& jsonFile); + bool LoadSystemResources(const std::string& sysResDir, const int32_t& themeId, const ColorMode& colorMode); + bool PostprocessSystemResources(); + +private: + std::unordered_map sysResFloat_; + std::unordered_map sysResString_; + std::unordered_map sysResColor_; + std::unordered_map sysResPattern_; + std::unordered_map sysResTheme_; + // record for mapping relationship between system resources id and name.(>) + std::unordered_map> sysResRecord_; + + ACE_DISALLOW_COPY_AND_MOVE(ResourceAdapterPreview); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_THEME_RESOURCE_ADAPTER_PREVIEW_H diff --git a/frameworks/core/components/theme/theme.csv b/frameworks/core/components/theme/theme.csv new file mode 100644 index 00000000..c9650455 --- /dev/null +++ b/frameworks/core/components/theme/theme.csv @@ -0,0 +1,941 @@ +key,base,offset,value,default_type,default,default_ispublic,defaults_blendalpha,tv_type,tv,tv_ispublic,tv_blendalpha,watch_type,watch,watch_ispublic,watch_blendalpha +THEME_KEY_BASE,,0,0,,,,,,,,,,,, +THEME_COLOR_CONTROL_KEY_BASE,THEME_KEY_BASE,50,50,,,,,,,,,,,, +THEME_COLOR_CONTROL_EXTRA_KEY_BASE,THEME_KEY_BASE,100,100,,,,,,,,,,,, +THEME_COLOR_ICON_KEY_BASE,THEME_KEY_BASE,200,200,,,,,,,,,,,, +THEME_COLOR_TEXT_KEY_BASE,THEME_KEY_BASE,250,250,,,,,,,,,,,, +THEME_COLOR_SWATCH_KEY_BASE,THEME_KEY_BASE,300,300,,,,,,,,,,,, +THEME_ALPHA_KEY_BASE,THEME_KEY_BASE,400,400,,,,,,,,,,,, +THEME_FONT_SIZE_KEY_BASE,THEME_KEY_BASE,500,500,,,,,,,,,,,, +THEME_FONT_FAMILY_KEY_BASE,THEME_KEY_BASE,550,550,,,,,,,,,,,, +THEME_RADIUS_COMPONENT_KEY_BASE,THEME_KEY_BASE,600,600,,,,,,,,,,,, +THEME_RADIUS_COMMON_KEY_BASE,THEME_KEY_BASE,650,650,,,,,,,,,,,, +THEME_SPACE_SCREEN_KEY_BASE,THEME_KEY_BASE,700,700,,,,,,,,,,,, +THEME_SPACE_SPECIAL_KEY_BASE,THEME_KEY_BASE,720,720,,,,,,,,,,,, +THEME_SPACE_TEXT_KEY_BASE,THEME_KEY_BASE,740,740,,,,,,,,,,,, +THEME_SPACE_COMPONENT_KEY_BASE,THEME_KEY_BASE,760,760,,,,,,,,,,,, +THEME_SPACE_LINE_KEY_BASE,THEME_KEY_BASE,780,780,,,,,,,,,,,, +THEME_OHOS_COLOR_FG,THEME_KEY_BASE,,0,ThemeConstantsType::COLOR,Color(0xff000000),TRUE,,ThemeConstantsType::COLOR,Color(0xfff1f3f5),TRUE,,ThemeConstantsType::COLOR,Color(0xffffffff),TRUE, +THEME_OHOS_COLOR_FG_INVERSE,THEME_KEY_BASE,1,1,ThemeConstantsType::COLOR,Color(0xffffffff),TRUE,,ThemeConstantsType::COLOR,Color(0xfff1f3f5),TRUE,,,,, +THEME_OHOS_COLOR_FG_INVERSE_DISABLE,THEME_KEY_BASE,2,2,ThemeConstantsType::COLOR,Color(0xffffffff),FALSE,,ThemeConstantsType::COLOR,Color(0xff666666),FALSE,,,,, +THEME_OHOS_COLOR_BG,THEME_KEY_BASE,3,3,ThemeConstantsType::COLOR,Color(0xffffffff),TRUE,,ThemeConstantsType::COLOR,Color(0xfff1f3f5),TRUE,,ThemeConstantsType::COLOR,Color(0xff000000),TRUE, +THEME_OHOS_ACCENT,THEME_KEY_BASE,4,4,ThemeConstantsType::COLOR,Color(0xff0a59f7),TRUE,,ThemeConstantsType::COLOR,Color(0xff266efb),TRUE,,ThemeConstantsType::COLOR,Color(0xff1f71ff),TRUE, +THEME_OHOS_ACCENT_INVERSE,THEME_KEY_BASE,5,5,ThemeConstantsType::COLOR,Color(0xff317af7),TRUE,,ThemeConstantsType::COLOR,Color(0xff266efb),TRUE,,,,, +THEME_OHOS_FUNCTIONAL_RED,THEME_KEY_BASE,6,6,ThemeConstantsType::COLOR,Color(0xffe84026),TRUE,,ThemeConstantsType::COLOR,Color(0xffe84026),TRUE,,ThemeConstantsType::COLOR,Color(0xffe62e31),TRUE, +THEME_OHOS_COLOR_WARNING,THEME_KEY_BASE,7,7,ThemeConstantsType::COLOR,Color(0xffed6f21),TRUE,,ThemeConstantsType::COLOR,Color(0xffed6f21),TRUE,,ThemeConstantsType::COLOR,Color(0xffff7500),TRUE, +THEME_OHOS_COLOR_HANDUP,THEME_KEY_BASE,8,8,ThemeConstantsType::COLOR,Color(0xffe84026),TRUE,,ThemeConstantsType::COLOR,Color(0xffe84026),TRUE,,ThemeConstantsType::COLOR,Color(0xffe62e31),TRUE, +THEME_OHOS_COLOR_CONNECTED,THEME_KEY_BASE,9,9,ThemeConstantsType::COLOR,Color(0xff64bb5c),TRUE,,ThemeConstantsType::COLOR,Color(0xff64bb5c),TRUE,,ThemeConstantsType::COLOR,Color(0xff64bb5c),TRUE, +THEME_OHOS_COLOR_SUBBG,THEME_KEY_BASE,10,10,ThemeConstantsType::COLOR,Color(0xfff1f3f5),TRUE,,,,,,,,, +THEME_OHOS_COLOR_CONTROL_ACTIVATED,THEME_COLOR_CONTROL_KEY_BASE,,50,ThemeConstantsType::REFERENCE,THEME_OHOS_ACCENT,TRUE,,,,,,,,, +THEME_OHOS_CONTROL_NORMAL,THEME_COLOR_CONTROL_KEY_BASE,1,51,ThemeConstantsType::COLOR,Color(0x19000000),TRUE,,ThemeConstantsType::COLOR,Color(0x33f1f3f5),TRUE,,ThemeConstantsType::COLOR,Color(0x26ffffff),TRUE, +THEME_OHOS_COLOR_DIVIDER_HORIZONTAL,THEME_COLOR_CONTROL_KEY_BASE,2,52,ThemeConstantsType::COLOR,Color(0x33000000),TRUE,,ThemeConstantsType::COLOR,Color(0x33f1f3f5),TRUE,,ThemeConstantsType::COLOR,Color(0x33ffffff),TRUE, +THEME_OHOS_COLOR_SUBHEADER_DIVIDER,THEME_COLOR_CONTROL_KEY_BASE,3,53,ThemeConstantsType::COLOR,Color(0x08000000),TRUE,,ThemeConstantsType::COLOR,Color(0x19f1f3f5),TRUE,,ThemeConstantsType::COLOR,Color(0x26ffffff),TRUE, +THEME_CLICKEFFIC_DEFAULT_COLOR_OHOS,THEME_COLOR_CONTROL_KEY_BASE,4,54,ThemeConstantsType::COLOR,Color(0x19000000),TRUE,,ThemeConstantsType::COLOR,Color(0x19f1f3f5),TRUE,,ThemeConstantsType::COLOR,Color(0x19ffffff),TRUE, +THEME_OHOS_FOCUSED_COLOR_1,THEME_COLOR_CONTROL_KEY_BASE,5,55,ThemeConstantsType::COLOR,Color(0xe5000000),TRUE,,ThemeConstantsType::COLOR,Color(0xe5000000),TRUE,,,,, +THEME_OHOS_FOCUSED_COLOR_2,THEME_COLOR_CONTROL_KEY_BASE,6,56,ThemeConstantsType::COLOR,Color(0x99000000),TRUE,,ThemeConstantsType::COLOR,Color(0x99000000),TRUE,,,,, +THEME_OHOS_FOCUSED_COLOR_3,THEME_COLOR_CONTROL_KEY_BASE,7,57,ThemeConstantsType::COLOR,Color(0x66000000),TRUE,,ThemeConstantsType::COLOR,Color(0x66000000),TRUE,,,,, +THEME_OHOS_CONTROL_FOCUSED,THEME_COLOR_CONTROL_KEY_BASE,8,58,ThemeConstantsType::COLOR,Color(0xff0a59f7),TRUE,,ThemeConstantsType::COLOR,Color(0xfff1f3f5),TRUE,,,,, +THEME_OHOS_CONTROL_HOVER,THEME_COLOR_CONTROL_KEY_BASE,9,59,ThemeConstantsType::COLOR,Color(0x0c000000),TRUE,,ThemeConstantsType::COLOR,Color(0x19f1f3f5),TRUE,,,,, +THEME_OHOS_CONTROL_FOCUSED_OUTLINE,THEME_COLOR_CONTROL_KEY_BASE,10,60,ThemeConstantsType::COLOR,Color(0xff0a59f7),TRUE,,ThemeConstantsType::COLOR,Color(0xfff1f3f5),TRUE,,,,, +THEME_OHOS_APPBAR_BG,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,,100,ThemeConstantsType::COLOR,Color(0xffffffff),FALSE,,ThemeConstantsType::COLOR,Color(0x00000000),FALSE,,,,, +THEME_OHOS_NAVIGATIONBAR_BG,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,1,101,ThemeConstantsType::COLOR,Color(0xffffffff),FALSE,,ThemeConstantsType::COLOR,Color(0x00000000),FALSE,,,,, +THEME_OHOS_APPBAR_ICON,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,2,102,ThemeConstantsType::COLOR,Color(0xe5000000),FALSE,,ThemeConstantsType::COLOR,Color(0xe5000000),FALSE,,,,, +THEME_OHOS_APPBAR_ICON_PRESSED,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,3,103,ThemeConstantsType::COLOR,Color(0xe5000000),FALSE,,ThemeConstantsType::COLOR,Color(0x33ffffff),FALSE,,,,, +THEME_OHOS_APPBAR_TITLE,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,4,104,ThemeConstantsType::COLOR,Color(0xe5000000),TRUE,,ThemeConstantsType::COLOR,Color(0xe5ffffff),TRUE,,ThemeConstantsType::COLOR,Color(0xffffffff),TRUE, +THEME_OHOS_APPBAR_SUBTITLE,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,5,105,ThemeConstantsType::COLOR,Color(0x99000000),FALSE,,ThemeConstantsType::COLOR,Color(0x99ffffff),FALSE,,ThemeConstantsType::COLOR,Color(0xa9ffffff),FALSE, +THEME_OHOS_BOTTOMBAR_ICON_ON,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,6,106,ThemeConstantsType::COLOR,Color(0xff0a59f7),TRUE,,ThemeConstantsType::COLOR,Color(0xe5000000),TRUE,,,,, +THEME_OHOS_BOTTOMBAR_ICON_OFF,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,7,107,ThemeConstantsType::COLOR,Color(0x33000000),TRUE,,ThemeConstantsType::COLOR,Color(0xe5ffffff),TRUE,,,,, +THEME_OHOS_BOTTOMBAR_TEXT_ON,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,8,108,ThemeConstantsType::COLOR,Color(0xff0a59f7),FALSE,,ThemeConstantsType::COLOR,Color(0xe5ffffff),FALSE,,,,, +THEME_OHOS_BOTTOMBAR_TEXT_OFF,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,9,109,ThemeConstantsType::COLOR,Color(0x99000000),FALSE,,ThemeConstantsType::COLOR,Color(0xe5ffffff),FALSE,,,,, +THEME_OHOS_TOOLBAR_BG,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,10,110,ThemeConstantsType::COLOR,Color(0xffffffff),TRUE,,ThemeConstantsType::COLOR,Color(0xff3c3c3c),TRUE,,,,, +THEME_OHOS_SUBTAB_TEXT_ON,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,11,111,ThemeConstantsType::COLOR,Color(0xff0a59f7),FALSE,,ThemeConstantsType::COLOR,Color(0xe5ffffff),FALSE,,,,, +THEME_OHOS_SUBTAB_TEXT_OFF,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,12,112,ThemeConstantsType::COLOR,Color(0x99000000),FALSE,,ThemeConstantsType::COLOR,Color(0x99ffffff),FALSE,,,,, +THEME_OHOS_SUBTAB_LINE_ON,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,13,113,ThemeConstantsType::COLOR,Color(0xff0a59f7),FALSE,,ThemeConstantsType::COLOR,Color(0xe5ffffff),FALSE,,,,, +THEME_OHOS_SUBTAB_BG,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,14,114,ThemeConstantsType::COLOR,Color(0x00ffffff),TRUE,,ThemeConstantsType::COLOR,Color(0xffffffff),TRUE,,,,, +THEME_OHOS_TOOLBAR_ICON,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,15,115,ThemeConstantsType::COLOR,Color(0xe5000000),FALSE,,ThemeConstantsType::COLOR,Color(0xe5ffffff),FALSE,,,,, +THEME_OHOS_TOOLBAR_ICON_ACTIVED,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,16,116,ThemeConstantsType::COLOR,Color(0xff0a59f7),FALSE,,ThemeConstantsType::COLOR,Color(0xe5000000),FALSE,,,,, +THEME_OHOS_TOOLBAR_TEXT,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,17,117,ThemeConstantsType::COLOR,Color(0xe5000000),FALSE,,ThemeConstantsType::COLOR,Color(0xe5ffffff),FALSE,,,,, +THEME_OHOS_TOOLBAR_TEXT_ACTIVED,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,18,118,ThemeConstantsType::COLOR,Color(0xff0a59f7),FALSE,,ThemeConstantsType::COLOR,Color(0xe5ffffff),FALSE,,,,, +THEME_OHOS_COLOR_PROGRESS,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,19,119,ThemeConstantsType::COLOR,Color(0xff666666),FALSE,,ThemeConstantsType::COLOR,Color(0xffebebeb),FALSE,,ThemeConstantsType::COLOR,Color(0xff5ea1ff),FALSE, +THEME_OHOS_COLOR_SPINNER_ICON,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,20,120,ThemeConstantsType::COLOR,Color(0xe5000000),FALSE,,ThemeConstantsType::COLOR,Color(0xe5ffffff),FALSE,,,,, +THEME_OHOS_COLOR_BADGE,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,21,121,ThemeConstantsType::COLOR,Color(0xff0a59f7),FALSE,,ThemeConstantsType::COLOR,Color(0xff266efb),FALSE,,ThemeConstantsType::COLOR,Color(0xff1f71ff),FALSE, +THEME_OHOS_BADGE_RED,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,22,122,ThemeConstantsType::COLOR,Color(0xffe84026),FALSE,,ThemeConstantsType::COLOR,Color(0xffe84026),FALSE,,ThemeConstantsType::COLOR,Color(0xffe62e31),FALSE, +THEME_OHOS_DIALOG_BG,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,23,123,ThemeConstantsType::COLOR,Color(0xffffffff),TRUE,,ThemeConstantsType::COLOR,Color(0xff3c3c3c),TRUE,,ThemeConstantsType::COLOR,Color(0xff000000),TRUE, +THEME_OHOS_FAB_ICON,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,24,124,ThemeConstantsType::COLOR,Color(0xffffffff),TRUE,,,,,,,,, +THEME_OHOS_FAB_ICON_START,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,25,125,ThemeConstantsType::COLOR,Color(0xffffffff),FALSE,,,,,,,,, +THEME_OHOS_FAB_ICON_END,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,26,126,ThemeConstantsType::COLOR,Color(0xffffffff),FALSE,,,,,,,,, +THEME_OHOS_FAB_BG_NORMAL,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,27,127,ThemeConstantsType::COLOR,Color(0xff0a59f7),TRUE,,ThemeConstantsType::COLOR,Color(0xff266efb),TRUE,,ThemeConstantsType::COLOR,Color(0xff1f71ff),TRUE, +THEME_OHOS_START_COLOR,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,28,128,ThemeConstantsType::COLOR,Color(0xff0a59f7),FALSE,,,,,,,,, +THEME_OHOS_CENTER_COLOR,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,29,129,ThemeConstantsType::COLOR,Color(0xff0a59f7),FALSE,,,,,,,,, +THEME_OHOS_END_COLOR,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,30,130,ThemeConstantsType::COLOR,Color(0xff0a59f7),FALSE,,,,,,,,, +THEME_OHOS_FAB_SHADOW_START,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,31,131,ThemeConstantsType::COLOR,Color(0x4d0a59f7),FALSE,,,,,,,,, +THEME_OHOS_FAB_SHADOW_END,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,32,132,ThemeConstantsType::COLOR,Color(0x4d0a59f7),FALSE,,,,,,,,, +THEME_OHOS_FAB_BG_PRESSED,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,33,133,ThemeConstantsType::COLOR,Color(0xff084fdd),FALSE,,ThemeConstantsType::COLOR,Color(0xff26a9fb),FALSE,,ThemeConstantsType::COLOR,Color(0x19ffffff),FALSE, +THEME_OHOS_TOAST_BG,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,34,134,ThemeConstantsType::COLOR,Color(0xff4d4d4d),FALSE,,ThemeConstantsType::COLOR,Color(0xff3c3c3c),FALSE,,ThemeConstantsType::COLOR,Color(0xf2404040),FALSE, +THEME_OHOS_CARD_BG,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,35,135,ThemeConstantsType::COLOR,Color(0xffffffff),TRUE,,ThemeConstantsType::COLOR,Color(0xff3c3c3c),TRUE,,,,, +THEME_OHOS_COLOR_TIPS_BG,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,36,136,ThemeConstantsType::COLOR,Color(0xf2d9d9d9),FALSE,,ThemeConstantsType::COLOR,Color(0xfff1f3f5),FALSE,,,,, +THEME_OHOS_COLOR_TOOLTIPS_BG,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,37,137,ThemeConstantsType::COLOR,Color(0xff4d4d4d),TRUE,,ThemeConstantsType::COLOR,Color(0xfff1f3f5),TRUE,,,,, +THEME_OHOS_ACTIVATED,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,38,138,ThemeConstantsType::COLOR,Color(0xff0a59f7),TRUE,,,,,,,,, +THEME_OHOS_ACTIVATED_START,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,39,139,ThemeConstantsType::COLOR,Color(0xff0a59f7),FALSE,,,,,,,,, +THEME_OHOS_ACTIVATED_END,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,40,140,ThemeConstantsType::COLOR,Color(0xff0a59f7),FALSE,,,,,,,,, +THEME_OHOS_APPBAR_TITLE_OFF,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,41,141,ThemeConstantsType::COLOR,Color(0x99000000),TRUE,,,,,,,,, +THEME_OHOS_APPBAR_SUBBG,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,42,142,ThemeConstantsType::COLOR,Color(0xfff1f3f5),TRUE,,,,,,,,, +THEME_OHOS_BOTTOMBAR_ICON_ON_AUXCOLOR_01,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,43,143,ThemeConstantsType::COLOR,Color(0xccffffff),TRUE,,ThemeConstantsType::COLOR,Color(0xe5000000),TRUE,,,,, +THEME_OHOS_BOTTOMBAR_ICON_OFF_AUXCOLOR_01,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,44,144,ThemeConstantsType::COLOR,Color(0x3f000000),TRUE,,ThemeConstantsType::COLOR,Color(0xe5ffffff),TRUE,,,,, +THEME_OHOS_BOTTOMBAR_ICON_ON_AUXCOLOR_02,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,45,145,ThemeConstantsType::COLOR,Color(0x990a59f7),TRUE,,ThemeConstantsType::COLOR,Color(0xe5000000),TRUE,,,,, +THEME_OHOS_BOTTOMBAR_ICON_OFF_AUXCOLOR_02,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,46,146,ThemeConstantsType::COLOR,Color(0x66000000),TRUE,,ThemeConstantsType::COLOR,Color(0xe5ffffff),TRUE,,,,, +THEME_OHOS_BOTTOMBAR_BG,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,47,147,ThemeConstantsType::COLOR,Color(0xffffffff),TRUE,,ThemeConstantsType::COLOR,Color(0xff3c3c3c),TRUE,,,,, +THEME_OHOS_BOTTOMBAR_BG_BLUR,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,48,148,ThemeConstantsType::COLOR,Color(0xf2ffffff),TRUE,,,,,,,,, +THEME_OHOS_BOTTOMBAR_SUBBG,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,49,149,ThemeConstantsType::COLOR,Color(0xfff1f3f5),TRUE,,ThemeConstantsType::COLOR,Color(0xff3c3c3c),TRUE,,,,, +THEME_OHOS_BOTTOMBAR_SUBBG_BLUR,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,50,150,ThemeConstantsType::COLOR,Color(0xf2f1f3f5),TRUE,,,,,,,,, +THEME_OHOS_TOOLBAR_SUBBG,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,51,151,ThemeConstantsType::COLOR,Color(0xfff1f3f5),TRUE,,ThemeConstantsType::COLOR,Color(0xff3c3c3c),TRUE,,,,, +THEME_OHOS_INPUTBOX_BG,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,52,152,ThemeConstantsType::COLOR,Color(0xffffffff),TRUE,,ThemeConstantsType::COLOR,Color(0x33f1f3f5),TRUE,,,,, +THEME_OHOS_INPUTBOX_SUBBG,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,53,153,ThemeConstantsType::COLOR,Color(0x0c000000),TRUE,,ThemeConstantsType::COLOR,Color(0x33f1f3f5),TRUE,,,,, +THEME_OHOS_BUTTON_DEFAULT,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,54,154,ThemeConstantsType::COLOR,Color(0x0c000000),TRUE,,ThemeConstantsType::COLOR,Color(0x33f1f3f5),TRUE,,ThemeConstantsType::COLOR,Color(0x26ffffff),TRUE, +THEME_OHOS_SWITCH_OUTLINE_OFF,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,55,155,ThemeConstantsType::COLOR,Color(0x66000000),FALSE,,ThemeConstantsType::COLOR,Color(0x99f1f3f5),FALSE,,,,, +THEME_OHOS_SWITCH_BG_OFF,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,56,156,ThemeConstantsType::COLOR,Color(0x33ffffff),FALSE,,ThemeConstantsType::COLOR,Color(0x33f1f3f5),FALSE,,ThemeConstantsType::COLOR,Color(0x33000000),FALSE, +THEME_OHOS_BOTTOMSHEET_BG,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,57,157,ThemeConstantsType::COLOR,Color(0xfff1f3f5),TRUE,,ThemeConstantsType::COLOR,Color(0xff3c3c3c),TRUE,,,,, +THEME_OHOS_CARD_PANEL_BG,THEME_COLOR_CONTROL_EXTRA_KEY_BASE,58,158,ThemeConstantsType::COLOR,Color(0xffffffff),TRUE,,ThemeConstantsType::COLOR,Color(0xfff1f3f5),TRUE,,,,, +THEME_OHOS_COLOR_PRIMARY,THEME_COLOR_ICON_KEY_BASE,,200,ThemeConstantsType::COLOR,Color(0xe5000000),TRUE,,ThemeConstantsType::COLOR,Color(0xe5ffffff),TRUE,,ThemeConstantsType::COLOR,Color(0xffffffff),TRUE, +THEME_OHOS_PRIMARY_INVERSE,THEME_COLOR_ICON_KEY_BASE,1,201,ThemeConstantsType::COLOR,Color(0xffffffff),TRUE,,ThemeConstantsType::COLOR,Color(0xe5000000),TRUE,,,,, +THEME_OHOS_COLOR_SECONDARY,THEME_COLOR_ICON_KEY_BASE,2,202,ThemeConstantsType::COLOR,Color(0x99000000),TRUE,,ThemeConstantsType::COLOR,Color(0x99ffffff),TRUE,,ThemeConstantsType::COLOR,Color(0xa9ffffff),TRUE, +THEME_OHOS_COLOR_TERTIARY,THEME_COLOR_ICON_KEY_BASE,3,203,ThemeConstantsType::COLOR,Color(0x66000000),TRUE,,ThemeConstantsType::COLOR,Color(0x66ffffff),TRUE,,ThemeConstantsType::COLOR,Color(0x66ffffff),TRUE, +THEME_OHOS_COLOR_FOURTH,THEME_COLOR_ICON_KEY_BASE,5,205,ThemeConstantsType::COLOR,Color(0x33000000),TRUE,,,,,,,,, +THEME_OHOS_COLOR_TEXT_PRIMARY,THEME_COLOR_TEXT_KEY_BASE,,250,ThemeConstantsType::COLOR,Color(0xe5000000),TRUE,,ThemeConstantsType::COLOR,Color(0xe5ffffff),TRUE,,ThemeConstantsType::COLOR,Color(0xffffffff),TRUE, +THEME_OHOS_TEXT_PRIMARY_INVERSE,THEME_COLOR_TEXT_KEY_BASE,1,251,ThemeConstantsType::COLOR,Color(0xffffffff),TRUE,,ThemeConstantsType::COLOR,Color(0xe5000000),TRUE,,,,, +THEME_OHOS_COLOR_TEXT_SECONDARY,THEME_COLOR_TEXT_KEY_BASE,2,252,ThemeConstantsType::COLOR,Color(0x99000000),TRUE,,ThemeConstantsType::COLOR,Color(0x99ffffff),TRUE,,ThemeConstantsType::COLOR,Color(0xa9ffffff),TRUE, +THEME_OHOS_TEXT_SECONDARY_INVERSE,THEME_COLOR_TEXT_KEY_BASE,3,253,ThemeConstantsType::COLOR,Color(0x99ffffff),TRUE,,ThemeConstantsType::COLOR,Color(0x99000000),TRUE,,,,, +THEME_OHOS_COLOR_TEXT_TERTIARY,THEME_COLOR_TEXT_KEY_BASE,4,254,ThemeConstantsType::COLOR,Color(0x66000000),TRUE,,ThemeConstantsType::COLOR,Color(0x66ffffff),TRUE,,,,, +THEME_OHOS_TEXT_TERTIARY_INVERSE,THEME_COLOR_TEXT_KEY_BASE,5,255,ThemeConstantsType::COLOR,Color(0x66ffffff),TRUE,,ThemeConstantsType::COLOR,Color(0x66000000),TRUE,,,,, +THEME_OHOS_TEXT_COLOR_ALERT_DIALOG_LIST_ITEM,THEME_COLOR_TEXT_KEY_BASE,6,256,ThemeConstantsType::REFERENCE,THEME_OHOS_COLOR_TEXT_PRIMARY,TRUE,,,,,,,,, +THEME_OHOS_FUNCTIONAL_BLUE,THEME_COLOR_TEXT_KEY_BASE,7,257,ThemeConstantsType::COLOR,Color(0xff0a59f7),TRUE,,ThemeConstantsType::COLOR,Color(0xff266efb),TRUE,,ThemeConstantsType::COLOR,Color(0xff5ea1ff),TRUE, +THEME_OHOS_TEXT_HINT,THEME_COLOR_TEXT_KEY_BASE,8,258,ThemeConstantsType::COLOR,Color(0x99000000),TRUE,,ThemeConstantsType::COLOR,Color(0x99ffffff),TRUE,,ThemeConstantsType::COLOR,Color(0xa9ffffff),TRUE, +THEME_OHOS_TEXT_HINT_INVERSE,THEME_COLOR_TEXT_KEY_BASE,9,259,ThemeConstantsType::COLOR,Color(0x99ffffff),TRUE,,ThemeConstantsType::COLOR,Color(0x99000000),TRUE,,,,, +THEME_OHOS_FUNCTIONAL_BLUE_INVERSE,THEME_COLOR_TEXT_KEY_BASE,10,260,ThemeConstantsType::COLOR,Color(0xff5291ff),TRUE,,ThemeConstantsType::COLOR,Color(0xe5000000),TRUE,,ThemeConstantsType::COLOR,Color(0xff5ea1ff),TRUE, +THEME_OHOS_COLOR_TEXT_HIGHLIGHT,THEME_COLOR_TEXT_KEY_BASE,11,261,ThemeConstantsType::COLOR,Color(0x330a59f7),TRUE,,ThemeConstantsType::COLOR,Color(0x66266efb),TRUE,,ThemeConstantsType::COLOR,Color(0x331f71ff),TRUE, +THEME_OHOS_TEXT_HIGHLIGHT_INVERSE,THEME_COLOR_TEXT_KEY_BASE,12,262,ThemeConstantsType::COLOR,Color(0x66317af7),TRUE,,ThemeConstantsType::COLOR,Color(0x66266efb),TRUE,,,,, +THEME_OHOS_COLOR_1,THEME_COLOR_SWATCH_KEY_BASE,,300,ThemeConstantsType::COLOR,Color(0xff564af7),TRUE,,ThemeConstantsType::COLOR,Color(0xff564af7),TRUE,,ThemeConstantsType::COLOR,Color(0xff564af7),TRUE, +THEME_OHOS_COLOR_2,THEME_COLOR_SWATCH_KEY_BASE,1,301,ThemeConstantsType::COLOR,Color(0xff46b1e3),TRUE,,ThemeConstantsType::COLOR,Color(0xff46b1e3),TRUE,,ThemeConstantsType::COLOR,Color(0xff46b1e3),TRUE, +THEME_OHOS_COLOR_3,THEME_COLOR_SWATCH_KEY_BASE,2,302,ThemeConstantsType::COLOR,Color(0xff61cfbe),TRUE,,ThemeConstantsType::COLOR,Color(0xff61cfbe),TRUE,,ThemeConstantsType::COLOR,Color(0xff00b6bf),TRUE, +THEME_OHOS_COLOR_4,THEME_COLOR_SWATCH_KEY_BASE,3,303,ThemeConstantsType::COLOR,Color(0xff64bb5c),TRUE,,ThemeConstantsType::COLOR,Color(0xff64bb5c),TRUE,,ThemeConstantsType::COLOR,Color(0xff64bb5c),TRUE, +THEME_OHOS_COLOR_5,THEME_COLOR_SWATCH_KEY_BASE,4,304,ThemeConstantsType::COLOR,Color(0xffa5d61d),TRUE,,ThemeConstantsType::COLOR,Color(0xffa5d61d),TRUE,,ThemeConstantsType::COLOR,Color(0xffa5d61d),TRUE, +THEME_OHOS_COLOR_6,THEME_COLOR_SWATCH_KEY_BASE,5,305,ThemeConstantsType::COLOR,Color(0xffac49f5),TRUE,,ThemeConstantsType::COLOR,Color(0xffac49f5),TRUE,,ThemeConstantsType::COLOR,Color(0xff8a2be2),TRUE, +THEME_OHOS_COLOR_7,THEME_COLOR_SWATCH_KEY_BASE,6,306,ThemeConstantsType::COLOR,Color(0xffe64566),TRUE,,ThemeConstantsType::COLOR,Color(0xffe64566),TRUE,,ThemeConstantsType::COLOR,Color(0xffe02d50),TRUE, +THEME_OHOS_COLOR_8,THEME_COLOR_SWATCH_KEY_BASE,7,307,ThemeConstantsType::COLOR,Color(0xffe84026),TRUE,,ThemeConstantsType::COLOR,Color(0xffe84026),TRUE,,ThemeConstantsType::COLOR,Color(0xffe02d2f),TRUE, +THEME_OHOS_COLOR_9,THEME_COLOR_SWATCH_KEY_BASE,8,308,ThemeConstantsType::COLOR,Color(0xffed6f21),TRUE,,ThemeConstantsType::COLOR,Color(0xffed6f21),TRUE,,ThemeConstantsType::COLOR,Color(0xfffb6522),TRUE, +THEME_OHOS_COLOR_10,THEME_COLOR_SWATCH_KEY_BASE,9,309,ThemeConstantsType::COLOR,Color(0xfff9a01e),TRUE,,ThemeConstantsType::COLOR,Color(0xfff9a01e),TRUE,,ThemeConstantsType::COLOR,Color(0xffff9800),TRUE, +THEME_OHOS_COLOR_11,THEME_COLOR_SWATCH_KEY_BASE,10,310,ThemeConstantsType::COLOR,Color(0xfff7ce00),TRUE,,ThemeConstantsType::COLOR,Color(0xfff7ce00),TRUE,,ThemeConstantsType::COLOR,Color(0xffffbf00),TRUE, +THEME_OHOS_COLOR_FG_1,THEME_COLOR_SWATCH_KEY_BASE,11,311,ThemeConstantsType::COLOR,Color(0xff8981f7),TRUE,,ThemeConstantsType::COLOR,Color(0xff8981f7),TRUE,,,,, +THEME_OHOS_COLOR_FG_2,THEME_COLOR_SWATCH_KEY_BASE,12,312,ThemeConstantsType::COLOR,Color(0xff86c5e3),TRUE,,ThemeConstantsType::COLOR,Color(0xff86c5e3),TRUE,,,,, +THEME_OHOS_COLOR_FG_3,THEME_COLOR_SWATCH_KEY_BASE,13,313,ThemeConstantsType::COLOR,Color(0xff92d6cc),TRUE,,ThemeConstantsType::COLOR,Color(0xff92d6cc),TRUE,,ThemeConstantsType::COLOR,Color(0xff52e4eb),TRUE, +THEME_OHOS_COLOR_FG_4,THEME_COLOR_SWATCH_KEY_BASE,14,314,ThemeConstantsType::COLOR,Color(0xff92c48d),TRUE,,ThemeConstantsType::COLOR,Color(0xff92c48d),TRUE,,ThemeConstantsType::COLOR,Color(0xff76d96c),TRUE, +THEME_OHOS_COLOR_FG_5,THEME_COLOR_SWATCH_KEY_BASE,15,315,ThemeConstantsType::COLOR,Color(0xffbddb69),TRUE,,ThemeConstantsType::COLOR,Color(0xffbddb69),TRUE,,,,, +THEME_OHOS_COLOR_FG_6,THEME_COLOR_SWATCH_KEY_BASE,16,316,ThemeConstantsType::COLOR,Color(0xffc386f0),TRUE,,ThemeConstantsType::COLOR,Color(0xffc386f0),TRUE,,ThemeConstantsType::COLOR,Color(0xffb566ff),TRUE, +THEME_OHOS_COLOR_FG_7,THEME_COLOR_SWATCH_KEY_BASE,17,317,ThemeConstantsType::COLOR,Color(0xffe67c92),TRUE,,ThemeConstantsType::COLOR,Color(0xffe67c92),TRUE,,ThemeConstantsType::COLOR,Color(0xffff4569),TRUE, +THEME_OHOS_COLOR_FG_8,THEME_COLOR_SWATCH_KEY_BASE,18,318,ThemeConstantsType::COLOR,Color(0xffe87361),TRUE,,ThemeConstantsType::COLOR,Color(0xffe87361),TRUE,,ThemeConstantsType::COLOR,Color(0xffff4d4f),TRUE, +THEME_OHOS_COLOR_FG_9,THEME_COLOR_SWATCH_KEY_BASE,19,319,ThemeConstantsType::COLOR,Color(0xffed955f),TRUE,,ThemeConstantsType::COLOR,Color(0xffed955f),TRUE,,ThemeConstantsType::COLOR,Color(0xffff7500),TRUE, +THEME_OHOS_COLOR_FG_10,THEME_COLOR_SWATCH_KEY_BASE,20,320,ThemeConstantsType::COLOR,Color(0xfff9bc64),TRUE,,ThemeConstantsType::COLOR,Color(0xfff9bc64),TRUE,,,,, +THEME_OHOS_COLOR_FG_11,THEME_COLOR_SWATCH_KEY_BASE,21,321,ThemeConstantsType::COLOR,Color(0xfff5dc62),TRUE,,ThemeConstantsType::COLOR,Color(0xfff5dc62),TRUE,,,,, +THEME_OHOS_SPECIAL_COLOR_1,THEME_COLOR_SWATCH_KEY_BASE,23,323,ThemeConstantsType::COLOR,Color(0xffbbb2c8),TRUE,,ThemeConstantsType::COLOR,Color(0xffbbb2c8),TRUE,,ThemeConstantsType::COLOR,Color(0xff392f49),TRUE, +THEME_OHOS_SPECIAL_COLOR_2,THEME_COLOR_SWATCH_KEY_BASE,24,324,ThemeConstantsType::COLOR,Color(0xffb6c5d1),TRUE,,ThemeConstantsType::COLOR,Color(0xffb6c5d1),TRUE,,ThemeConstantsType::COLOR,Color(0xff343e4a),TRUE, +THEME_OHOS_SPECIAL_COLOR_3,THEME_COLOR_SWATCH_KEY_BASE,25,325,ThemeConstantsType::COLOR,Color(0xff000000),TRUE,,,,,,,,, +THEME_OHOS_SPECIAL_COLOR_4,THEME_COLOR_SWATCH_KEY_BASE,26,326,ThemeConstantsType::COLOR,Color(0xffb6c6b3),TRUE,,ThemeConstantsType::COLOR,Color(0xffb6c6b3),TRUE,,ThemeConstantsType::COLOR,Color(0xff3c4b34),TRUE, +THEME_OHOS_SPECIAL_COLOR_5,THEME_COLOR_SWATCH_KEY_BASE,27,327,ThemeConstantsType::COLOR,Color(0xff000000),TRUE,,,,,,,,, +THEME_OHOS_SPECIAL_COLOR_6,THEME_COLOR_SWATCH_KEY_BASE,28,328,ThemeConstantsType::COLOR,Color(0xff000000),TRUE,,,,,,,,, +THEME_OHOS_SPECIAL_COLOR_7,THEME_COLOR_SWATCH_KEY_BASE,29,329,ThemeConstantsType::COLOR,Color(0xffd1bfc5),TRUE,,ThemeConstantsType::COLOR,Color(0xffd1bfc5),TRUE,,ThemeConstantsType::COLOR,Color(0xff443038),TRUE, +THEME_OHOS_SPECIAL_COLOR_8,THEME_COLOR_SWATCH_KEY_BASE,30,330,ThemeConstantsType::COLOR,Color(0xff000000),TRUE,,,,,,,,, +THEME_OHOS_SPECIAL_COLOR_9,THEME_COLOR_SWATCH_KEY_BASE,31,331,ThemeConstantsType::COLOR,Color(0xffd4bfb8),TRUE,,ThemeConstantsType::COLOR,Color(0xffd4bfb8),TRUE,,ThemeConstantsType::COLOR,Color(0xff463630),TRUE, +THEME_OHOS_SPECIAL_COLOR_10,THEME_COLOR_SWATCH_KEY_BASE,32,332,ThemeConstantsType::COLOR,Color(0xff000000),TRUE,,,,,,,,, +THEME_OHOS_SPECIAL_COLOR_11,THEME_COLOR_SWATCH_KEY_BASE,33,333,ThemeConstantsType::COLOR,Color(0xffd2cab3),TRUE,,ThemeConstantsType::COLOR,Color(0xffd2cab3),TRUE,,ThemeConstantsType::COLOR,Color(0xff4a4333),TRUE, +THEME_OHOS_MASK_THIN,THEME_COLOR_SWATCH_KEY_BASE,34,334,ThemeConstantsType::COLOR,Color(0x33000000),TRUE,,ThemeConstantsType::COLOR,Color(0x33000000),TRUE,,,,, +THEME_OHOS_MASK_LIGHT,THEME_COLOR_SWATCH_KEY_BASE,35,335,ThemeConstantsType::COLOR,Color(0x66000000),TRUE,,ThemeConstantsType::COLOR,Color(0x66000000),TRUE,,,,, +THEME_OHOS_MASK_REGULAR,THEME_COLOR_SWATCH_KEY_BASE,36,336,ThemeConstantsType::COLOR,Color(0x99000000),TRUE,,ThemeConstantsType::COLOR,Color(0x99000000),TRUE,,,,, +THEME_OHOS_MASK_THICK,THEME_COLOR_SWATCH_KEY_BASE,37,337,ThemeConstantsType::COLOR,Color(0xcc000000),TRUE,,ThemeConstantsType::COLOR,Color(0xe5000000),TRUE,,,,, +THEME_OHOS_PRIMARY_CONTENT_ALPHA,THEME_ALPHA_KEY_BASE,,400,ThemeConstantsType::DOUBLE,0.9,TRUE,,ThemeConstantsType::DOUBLE,0.9,TRUE,,ThemeConstantsType::DOUBLE,1,TRUE, +THEME_OHOS_SECONDARY_CONTENT_ALPHA,THEME_ALPHA_KEY_BASE,1,401,ThemeConstantsType::DOUBLE,0.6,TRUE,,ThemeConstantsType::DOUBLE,0.6,TRUE,,ThemeConstantsType::DOUBLE,0.66,TRUE, +THEME_OHOS_TERTIARY_CONTENT_ALPHA,THEME_ALPHA_KEY_BASE,2,402,ThemeConstantsType::DOUBLE,0.4,TRUE,,ThemeConstantsType::DOUBLE,0.4,TRUE,,ThemeConstantsType::DOUBLE,0.4,TRUE, +THEME_OHOS_DISABLED_ALPHA,THEME_ALPHA_KEY_BASE,3,403,ThemeConstantsType::DOUBLE,0.4,TRUE,,ThemeConstantsType::DOUBLE,0.4,TRUE,,ThemeConstantsType::DOUBLE,0.4,TRUE, +THEME_OHOS_HIGHLIGHT_BG_ALPHA,THEME_ALPHA_KEY_BASE,4,404,ThemeConstantsType::DOUBLE,0.2,TRUE,,ThemeConstantsType::DOUBLE,0.4,TRUE,,ThemeConstantsType::DOUBLE,0.2,TRUE, +THEME_OHOS_NORMAL_BG_ALPHA,THEME_ALPHA_KEY_BASE,5,405,ThemeConstantsType::DOUBLE,0.1,TRUE,,ThemeConstantsType::DOUBLE,0.2,TRUE,,ThemeConstantsType::DOUBLE,0.15,TRUE, +THEME_OHOS_TIPS_BG_ALPHA,THEME_ALPHA_KEY_BASE,6,406,ThemeConstantsType::DOUBLE,0.05,TRUE,,ThemeConstantsType::DOUBLE,0.2,TRUE,,,,, +THEME_OHOS_DIVIDER_ALPHA,THEME_ALPHA_KEY_BASE,7,407,ThemeConstantsType::DOUBLE,0,TRUE,,ThemeConstantsType::DOUBLE,0.1,TRUE,,ThemeConstantsType::DOUBLE,0.15,TRUE, +THEME_OHOS_FOURTH_CONTENT_ALPHA,THEME_ALPHA_KEY_BASE,8,408,ThemeConstantsType::DOUBLE,0.2,TRUE,,ThemeConstantsType::DOUBLE,0.4,TRUE,,,,, +THEME_OHOS_TEXT_SIZE_HEADLINE1,THEME_FONT_SIZE_KEY_BASE,,500,ThemeConstantsType::DIMENSION,"Dimension(96.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(96.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(76.0, DimensionUnit::VP)",TRUE, +THEME_OHOS_TEXT_SIZE_HEADLINE2,THEME_FONT_SIZE_KEY_BASE,1,501,ThemeConstantsType::DIMENSION,"Dimension(72.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(72.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(58.0, DimensionUnit::VP)",TRUE, +THEME_OHOS_TEXT_SIZE_HEADLINE3,THEME_FONT_SIZE_KEY_BASE,2,502,ThemeConstantsType::DIMENSION,"Dimension(60.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(60.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(40.0, DimensionUnit::VP)",TRUE, +THEME_OHOS_TEXT_SIZE_HEADLINE4,THEME_FONT_SIZE_KEY_BASE,3,503,ThemeConstantsType::DIMENSION,"Dimension(48.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(48.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(34.0, DimensionUnit::VP)",TRUE, +THEME_OHOS_TEXT_SIZE_HEADLINE5,THEME_FONT_SIZE_KEY_BASE,4,504,ThemeConstantsType::DIMENSION,"Dimension(38.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(40.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(30.0, DimensionUnit::VP)",TRUE, +THEME_OHOS_TEXT_SIZE_HEADLINE6,THEME_FONT_SIZE_KEY_BASE,5,505,ThemeConstantsType::DIMENSION,"Dimension(30.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(36.0, DimensionUnit::FP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::FP)",TRUE, +THEME_OHOS_TEXT_SIZE_HEADLINE7,THEME_FONT_SIZE_KEY_BASE,6,506,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(30.0, DimensionUnit::FP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(19.0, DimensionUnit::FP)",TRUE, +THEME_OHOS_TEXT_SIZE_HEADLINE8,THEME_FONT_SIZE_KEY_BASE,7,507,ThemeConstantsType::DIMENSION,"Dimension(20.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::FP)",TRUE,,,,, +THEME_OHOS_TEXT_SIZE_SUBTITLE1,THEME_FONT_SIZE_KEY_BASE,8,508,ThemeConstantsType::DIMENSION,"Dimension(18.0, DimensionUnit::FP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(20.0, DimensionUnit::FP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(19.0, DimensionUnit::FP)",TRUE, +THEME_OHOS_TEXT_SIZE_SUBTITLE2,THEME_FONT_SIZE_KEY_BASE,9,509,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::FP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(18.0, DimensionUnit::FP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(15.0, DimensionUnit::FP)",TRUE, +THEME_OHOS_TEXT_SIZE_SUBTITLE3,THEME_FONT_SIZE_KEY_BASE,10,510,ThemeConstantsType::DIMENSION,"Dimension(14.0, DimensionUnit::FP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::FP)",TRUE,,,,, +THEME_OHOS_TEXT_SIZE_BUTTON1,THEME_FONT_SIZE_KEY_BASE,11,511,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::FP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(18.0, DimensionUnit::FP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(19.0, DimensionUnit::FP)",TRUE, +THEME_OHOS_TEXT_SIZE_BUTTON2,THEME_FONT_SIZE_KEY_BASE,12,512,ThemeConstantsType::DIMENSION,"Dimension(14.0, DimensionUnit::FP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(14.0, DimensionUnit::FP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::FP)",TRUE, +THEME_OHOS_TEXT_SIZE_BODY1,THEME_FONT_SIZE_KEY_BASE,13,513,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::FP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(18.0, DimensionUnit::FP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(19.0, DimensionUnit::FP)",TRUE, +THEME_OHOS_TEXT_SIZE_BODY2,THEME_FONT_SIZE_KEY_BASE,14,514,ThemeConstantsType::DIMENSION,"Dimension(14.0, DimensionUnit::FP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::FP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(18.0, DimensionUnit::FP)",TRUE, +THEME_OHOS_TEXT_SIZE_BODY3,THEME_FONT_SIZE_KEY_BASE,15,515,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::FP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(14.0, DimensionUnit::FP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::FP)",TRUE, +THEME_OHOS_TEXT_SIZE_CAPTION,THEME_FONT_SIZE_KEY_BASE,16,516,ThemeConstantsType::DIMENSION,"Dimension(10.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::FP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(13.0, DimensionUnit::FP)",TRUE, +THEME_OHOS_TEXT_SIZE_CAPTION1,THEME_FONT_SIZE_KEY_BASE,17,517,ThemeConstantsType::DIMENSION,"Dimension(10.0, DimensionUnit::FP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(10.0, DimensionUnit::FP)",TRUE,,,,, +THEME_OHOS_TEXT_SIZE_CHART1,THEME_FONT_SIZE_KEY_BASE,18,518,ThemeConstantsType::DIMENSION,"Dimension(10.0, DimensionUnit::FP)",TRUE,,,,,,ThemeConstantsType::DIMENSION,"Dimension(10.0, DimensionUnit::FP)",TRUE, +THEME_OHOS_TEXT_SIZE_CHART2,THEME_FONT_SIZE_KEY_BASE,19,519,ThemeConstantsType::DIMENSION,"Dimension(0.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_OHOS_TEXT_SIZE_OVERLINE,THEME_FONT_SIZE_KEY_BASE,20,520,ThemeConstantsType::DIMENSION,"Dimension(14.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(18.0, DimensionUnit::FP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::FP)",TRUE, +THEME_OHOS_TEXT_SIZE_HEADLINE9,THEME_FONT_SIZE_KEY_BASE,21,521,ThemeConstantsType::DIMENSION,"Dimension(18.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_OHOS_TEXT_SIZE_BUTTON3,THEME_FONT_SIZE_KEY_BASE,22,522,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::FP)",TRUE,,,,,,,,, +THEME_OHOS_TEXT_FONT_FAMILY_REGULAR,THEME_FONT_FAMILY_KEY_BASE,,550,ThemeConstantsType::STRING,"""sans-serif""",TRUE,,,,,,,,, +THEME_OHOS_TEXT_FONT_FAMILY_MEDIUM,THEME_FONT_FAMILY_KEY_BASE,1,551,ThemeConstantsType::STRING,"""HwChinese-medium""",TRUE,,,,,,,,, +THEME_OHOS_CORNER_RADIUS_TOAST,THEME_RADIUS_COMPONENT_KEY_BASE,,600,ThemeConstantsType::DIMENSION,"Dimension(18.0, DimensionUnit::VP)",FALSE,,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",FALSE,,ThemeConstantsType::DIMENSION,"Dimension(20.0, DimensionUnit::VP)",FALSE, +THEME_OHOS_CORNER_RADIUS_BADGE,THEME_RADIUS_COMPONENT_KEY_BASE,1,601,ThemeConstantsType::DIMENSION,"Dimension(14.0, DimensionUnit::VP)",FALSE,,ThemeConstantsType::DIMENSION,"Dimension(14.0, DimensionUnit::VP)",FALSE,,,,, +THEME_OHOS_CORNER_RADIUS_TOOLTIPS,THEME_RADIUS_COMPONENT_KEY_BASE,2,602,ThemeConstantsType::DIMENSION,"Dimension(18.0, DimensionUnit::VP)",FALSE,,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::VP)",FALSE,,,,, +THEME_OHOS_CORNER_RADIUS_TOGGLE,THEME_RADIUS_COMPONENT_KEY_BASE,3,603,ThemeConstantsType::DIMENSION,"Dimension(14.0, DimensionUnit::VP)",FALSE,,ThemeConstantsType::DIMENSION,"Dimension(18.0, DimensionUnit::VP)",FALSE,,,,, +THEME_OHOS_CORNER_RADIUS_SWITCHBAR,THEME_RADIUS_COMPONENT_KEY_BASE,4,604,ThemeConstantsType::DIMENSION,"Dimension(10.0, DimensionUnit::VP)",FALSE,,ThemeConstantsType::DIMENSION,"Dimension(10.0, DimensionUnit::VP)",FALSE,,ThemeConstantsType::DIMENSION,"Dimension(11.0, DimensionUnit::VP)",FALSE, +THEME_OHOS_CORNER_RADIUS_CHIPS,THEME_RADIUS_COMPONENT_KEY_BASE,5,605,ThemeConstantsType::DIMENSION,"Dimension(14.0, DimensionUnit::VP)",FALSE,,ThemeConstantsType::DIMENSION,"Dimension(14.0, DimensionUnit::VP)",FALSE,,,,, +THEME_OHOS_CORNER_RADIUS_BUTTON,THEME_RADIUS_COMPONENT_KEY_BASE,6,606,ThemeConstantsType::DIMENSION,"Dimension(20.0, DimensionUnit::VP)",FALSE,,ThemeConstantsType::DIMENSION,"Dimension(20.0, DimensionUnit::VP)",FALSE,,,,, +THEME_OHOS_CORNER_RADIUS_BUTTON_SMALL,THEME_RADIUS_COMPONENT_KEY_BASE,7,607,ThemeConstantsType::DIMENSION,"Dimension(14.0, DimensionUnit::VP)",FALSE,,ThemeConstantsType::DIMENSION,"Dimension(14.0, DimensionUnit::VP)",FALSE,,ThemeConstantsType::DIMENSION,"Dimension(20.0, DimensionUnit::VP)",FALSE, +THEME_OHOS_CORNER_RADIUS_MARK,THEME_RADIUS_COMPONENT_KEY_BASE,8,608,ThemeConstantsType::DIMENSION,"Dimension(4.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(4.0, DimensionUnit::VP)",TRUE,,,,, +THEME_OHOS_CORNER_RADIUS_SUBTAB,THEME_RADIUS_COMPONENT_KEY_BASE,9,609,ThemeConstantsType::DIMENSION,"Dimension(4.0, DimensionUnit::VP)",FALSE,,ThemeConstantsType::DIMENSION,"Dimension(1.0, DimensionUnit::VP)",FALSE,,,,, +THEME_OHOS_CORNER_RADIUS_CLICKED,THEME_RADIUS_COMPONENT_KEY_BASE,10,610,ThemeConstantsType::DIMENSION,"Dimension(8.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(4.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(4.0, DimensionUnit::VP)",TRUE, +THEME_OHOS_CORNER_RADIUS_NOTIFICATION,THEME_RADIUS_COMPONENT_KEY_BASE,11,611,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::VP)",TRUE,,,,, +THEME_OHOS_CORNER_RADIUS_CARD,THEME_RADIUS_COMPONENT_KEY_BASE,12,612,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",TRUE,,,,, +THEME_OHOS_CORNER_RADIUS_PROGRESSBAR,THEME_RADIUS_COMPONENT_KEY_BASE,13,613,ThemeConstantsType::DIMENSION,"Dimension(2.0, DimensionUnit::VP)",FALSE,,ThemeConstantsType::DIMENSION,"Dimension(2.0, DimensionUnit::VP)",FALSE,,ThemeConstantsType::DIMENSION,"Dimension(4.0, DimensionUnit::VP)",FALSE, +THEME_OHOS_CORNER_RADIUS_DIALOG,THEME_RADIUS_COMPONENT_KEY_BASE,14,614,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::VP)",TRUE,,,,, +THEME_OHOS_CORNER_RADIUS_GRID,THEME_RADIUS_COMPONENT_KEY_BASE,15,615,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",TRUE,,,,, +THEME_OHOS_CORNER_RADIUS_CHECKBOX,THEME_RADIUS_COMPONENT_KEY_BASE,16,616,ThemeConstantsType::DIMENSION,"Dimension(4.0, DimensionUnit::VP)",FALSE,,ThemeConstantsType::DIMENSION,"Dimension(4.0, DimensionUnit::VP)",FALSE,,ThemeConstantsType::DIMENSION,"Dimension(4.0, DimensionUnit::VP)",FALSE, +THEME_OHOS_CORNER_RADIUS_POPWINDOW,THEME_RADIUS_COMPONENT_KEY_BASE,17,617,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::VP)",FALSE,,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",FALSE,,,,, +THEME_OHOS_CORNER_RADIUS_BANNER,THEME_RADIUS_COMPONENT_KEY_BASE,18,618,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",TRUE,,,,, +THEME_OHOS_CORNER_RADIUS_ICON,THEME_RADIUS_COMPONENT_KEY_BASE,19,619,ThemeConstantsType::DIMENSION,"Dimension(8.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(20.0, DimensionUnit::VP)",TRUE,,,,, +THEME_OHOS_CORNER_RADIUS_INPUTBOX,THEME_RADIUS_COMPONENT_KEY_BASE,20,620,ThemeConstantsType::DIMENSION,"Dimension(20.0, DimensionUnit::VP)",FALSE,,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",FALSE,,ThemeConstantsType::DIMENSION,"Dimension(22.0, DimensionUnit::VP)",FALSE, +THEME_OHOS_CORNER_RADIUS_BOTTOMSHEET,THEME_RADIUS_COMPONENT_KEY_BASE,21,621,ThemeConstantsType::DIMENSION,"Dimension(32.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_OHOS_CORNER_RADIUS_XLARGE,THEME_RADIUS_COMPONENT_KEY_BASE,23,623,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(32.0, DimensionUnit::VP)",TRUE, +THEME_OHOS_CORNER_RADIUS_LARGE,THEME_RADIUS_COMMON_KEY_BASE,,650,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",TRUE, +THEME_OHOS_CORNER_RADIUS_MEDIUMS,THEME_RADIUS_COMMON_KEY_BASE,1,651,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(10.0, DimensionUnit::VP)",TRUE, +THEME_OHOS_CORNER_RADIUS_SMALL,THEME_RADIUS_COMMON_KEY_BASE,2,652,ThemeConstantsType::DIMENSION,"Dimension(8.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(8.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(6.0, DimensionUnit::VP)",TRUE, +THEME_OHOS_CORNER_RADIUS_XSMAL,THEME_RADIUS_COMMON_KEY_BASE,3,653,ThemeConstantsType::DIMENSION,"Dimension(4.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(4.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(2.0, DimensionUnit::VP)",TRUE, +THEME_OHOS_DIMENS_DEFAULT_START,THEME_SPACE_SCREEN_KEY_BASE,,700,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",TRUE,,,,,,ThemeConstantsType::DIMENSION,"Dimension(11.0, DimensionUnit::VP)",TRUE, +THEME_OHOS_DIMENS_MAX_START,THEME_SPACE_SCREEN_KEY_BASE,1,701,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(48.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(26.0, DimensionUnit::VP)",TRUE, +THEME_OHOS_DIMENS_DEFAULT_END,THEME_SPACE_SCREEN_KEY_BASE,2,702,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",TRUE,,,,,,ThemeConstantsType::DIMENSION,"Dimension(11.0, DimensionUnit::VP)",TRUE, +THEME_OHOS_DIMENS_MAX_END,THEME_SPACE_SCREEN_KEY_BASE,3,703,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(48.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(26.0, DimensionUnit::VP)",TRUE, +THEME_OHOS_DIMENS_DEFAULT_TOP,THEME_SPACE_SCREEN_KEY_BASE,4,704,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(27.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(20.0, DimensionUnit::VP)",TRUE, +THEME_OHOS_DIMENS_DEFAULT_BOTTOM_FLEXIBLE,THEME_SPACE_SCREEN_KEY_BASE,5,705,ThemeConstantsType::DIMENSION,"Dimension(0.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_OHOS_DIMENS_DEFAULT_BOTTOM_FIXED,THEME_SPACE_SCREEN_KEY_BASE,6,706,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(27.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(36.0, DimensionUnit::VP)",TRUE, +THEME_OHOS_DIMENS_DIALOG_START,THEME_SPACE_SPECIAL_KEY_BASE,,720,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",FALSE,,,,,,ThemeConstantsType::DIMENSION,"Dimension(40.0, DimensionUnit::VP)",FALSE, +THEME_OHOS_DIMENS_DIALOG_END,THEME_SPACE_SPECIAL_KEY_BASE,1,721,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",FALSE,,,,,,ThemeConstantsType::DIMENSION,"Dimension(40.0, DimensionUnit::VP)",FALSE, +THEME_OHOS_DIMENS_DIALOG_BOTTOM,THEME_SPACE_SPECIAL_KEY_BASE,2,722,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::VP)",FALSE,,,,,,ThemeConstantsType::DIMENSION,"Dimension(20.0, DimensionUnit::VP)",FALSE, +THEME_OHOS_DIMENS_NOTIFICATION_START,THEME_SPACE_SPECIAL_KEY_BASE,3,723,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",FALSE,,,,,,,,, +THEME_OHOS_DIMENS_NOTIFICATION_END,THEME_SPACE_SPECIAL_KEY_BASE,4,724,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",FALSE,,,,,,,,, +THEME_OHOS_DIMENS_CARD_START,THEME_SPACE_SPECIAL_KEY_BASE,5,725,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_OHOS_DIMENS_CARD_END,THEME_SPACE_SPECIAL_KEY_BASE,6,726,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_OHOS_DIMENS_CARD_MIDDLE,THEME_SPACE_SPECIAL_KEY_BASE,7,727,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",TRUE,,,,, +THEME_OHOS_DIMENS_TEXT_VERTICAL,THEME_SPACE_TEXT_KEY_BASE,,740,ThemeConstantsType::DIMENSION,"Dimension(2.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(0.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(2.0, DimensionUnit::VP)",TRUE, +THEME_OHOS_DIMENS_TEXT_HORIZONTAL,THEME_SPACE_TEXT_KEY_BASE,1,741,ThemeConstantsType::DIMENSION,"Dimension(8.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(2.0, DimensionUnit::VP)",TRUE, +THEME_OHOS_DIMENS_TEXT_MARGIN_PRIMARY,THEME_SPACE_TEXT_KEY_BASE,2,742,ThemeConstantsType::DIMENSION,"Dimension(48.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(32.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::VP)",TRUE, +THEME_OHOS_DIMENS_TEXT_MARGIN_SECONDARY,THEME_SPACE_TEXT_KEY_BASE,3,743,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",TRUE, +THEME_OHOS_DIMENS_TEXT_MARGIN_TERTIARY,THEME_SPACE_TEXT_KEY_BASE,4,744,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(6.0, DimensionUnit::VP)",TRUE, +THEME_OHOS_DIMENS_TEXT_MARGIN_FOURTH,THEME_SPACE_TEXT_KEY_BASE,5,745,ThemeConstantsType::DIMENSION,"Dimension(8.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(8.0, DimensionUnit::VP)",TRUE,,,,, +THEME_OHOS_DIMENS_TEXT_MARGIN_FIFTH,THEME_SPACE_TEXT_KEY_BASE,6,746,ThemeConstantsType::DIMENSION,"Dimension(4.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(4.0, DimensionUnit::VP)",TRUE,,,,, +THEME_OHOS_DIMENS_ELEMENT_VERTICAL_LARGE,THEME_SPACE_COMPONENT_KEY_BASE,,760,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",TRUE, +THEME_OHOS_DIMENS_ELEMENT_VERTICAL_MIDDLE,THEME_SPACE_COMPONENT_KEY_BASE,1,761,ThemeConstantsType::DIMENSION,"Dimension(8.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(6.0, DimensionUnit::VP)",TRUE, +THEME_OHOS_DIMENS_ELEMENT_HORIZONTAL_LARGE,THEME_SPACE_COMPONENT_KEY_BASE,2,762,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(26.0, DimensionUnit::VP)",TRUE, +THEME_OHOS_DIMENS_ELEMENT_HORIZONTAL_MIDDLE,THEME_SPACE_COMPONENT_KEY_BASE,3,763,ThemeConstantsType::DIMENSION,"Dimension(8.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(8.0, DimensionUnit::VP)",TRUE, +THEME_OHOS_TEXT_SIZE_SPACE_SHORT,THEME_SPACE_LINE_KEY_BASE,,780,ThemeConstantsType::DOUBLE,1.1,TRUE,,,,,,ThemeConstantsType::DOUBLE,1.2,TRUE, +THEME_OHOS_TEXT_SIZE_SPACE_LARGE,THEME_SPACE_LINE_KEY_BASE,1,781,ThemeConstantsType::DOUBLE,1.4,TRUE,,,,,,ThemeConstantsType::DOUBLE,1.2,TRUE, +THEME_APP_BACKGROUND,THEME_KEY_BASE,900,900,ThemeConstantsType::COLOR,Color(0xffffffff),TRUE,,ThemeConstantsType::COLOR,Color(0xff202020),TRUE,,ThemeConstantsType::COLOR,Color(0xff000000),TRUE, +THEME_SELECT_KEY_BASE,THEME_KEY_BASE,1000,1000,,,,,,,,,,,, +THEME_SELECT_CLICKED_COLOR,THEME_SELECT_KEY_BASE,,1000,ThemeConstantsType::COLOR,Color(0x19000000),TRUE,,ThemeConstantsType::COLOR,Color(0xE6FFFFFF),TRUE,,,,, +THEME_SELECT_DISABLED_COLOR,THEME_SELECT_KEY_BASE,1,1001,ThemeConstantsType::COLOR,Color(0x5C000000),TRUE,,,,,,,,, +THEME_SELECT_SELECTED_COLOR,THEME_SELECT_KEY_BASE,2,1002,ThemeConstantsType::COLOR,Color(0x19254FF7),TRUE,,,,,,,,, +THEME_SELECT_FONT_SIZE,THEME_SELECT_KEY_BASE,3,1003,ThemeConstantsType::REFERENCE,THEME_OHOS_TEXT_SIZE_BUTTON1,TRUE,,ThemeConstantsType::DIMENSION,"Dimension(20.0, DimensionUnit::FP)",,,,,, +THEME_SELECT_FONT_COLOR,THEME_SELECT_KEY_BASE,4,1004,ThemeConstantsType::REFERENCE,THEME_OHOS_COLOR_TEXT_PRIMARY,TRUE,,ThemeConstantsType::COLOR,Color(0xE6FFFFFF),TRUE,,,,, +THEME_SELECT_NORMAL_PADDING,THEME_SELECT_KEY_BASE,5,1005,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::VP)",,,,,,,,,, +THEME_SELECT_POPUP_SPACING_HORIZONTAL,THEME_SELECT_KEY_BASE,6,1006,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(48.0, DimensionUnit::VP)",,,,,, +THEME_SELECT_POPUP_SPACING_VERTICAL,THEME_SELECT_KEY_BASE,7,1007,ThemeConstantsType::DIMENSION,"Dimension(27.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(27.0, DimensionUnit::VP)",,,,,, +THEME_SELECT_POPUP_SPACING_CONTENT,THEME_SELECT_KEY_BASE,8,1008,ThemeConstantsType::DIMENSION,"Dimension(0.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",,,,,, +THEME_SELECT_IS_TV,THEME_SELECT_KEY_BASE,9,1009,ThemeConstantsType::INT,static_cast(false),,,ThemeConstantsType::INT,static_cast(true),,,,,, +THEME_SELECT_ITSELF_RRECT_SIZE,THEME_SELECT_KEY_BASE,10,1010,ThemeConstantsType::REFERENCE,THEME_OHOS_CORNER_RADIUS_CLICKED,,,,,,,,,, +THEME_SELECT_ITSELF_ICON_SIZE,THEME_SELECT_KEY_BASE,11,1011,ThemeConstantsType::DIMENSION,"Dimension(8.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_SELECT_POPUP_RRECT_SIZE,THEME_SELECT_KEY_BASE,12,1012,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_SELECT_POPUP_BORDER_WIDTH,THEME_SELECT_KEY_BASE,13,1013,ThemeConstantsType::DIMENSION,"Dimension(2.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(0.0, DimensionUnit::VP)",,,,,, +THEME_SELECT_POPUP_SHADOW_WIDTH,THEME_SELECT_KEY_BASE,14,1014,ThemeConstantsType::DIMENSION,"Dimension(60.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(0.0, DimensionUnit::VP)",,,,,, +THEME_SELECT_POPUP_MIN_WIDTH,THEME_SELECT_KEY_BASE,15,1015,ThemeConstantsType::DIMENSION,"Dimension(136.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(284.0, DimensionUnit::VP)",TRUE,,,,, +THEME_SELECT_OPTION_SHOW_COUNT,THEME_SELECT_KEY_BASE,16,1016,ThemeConstantsType::INT,INT32_MAX,,,,,,,,,, +THEME_SELECT_OPTION_FOCUSED_DISABLE_COLOR,THEME_SELECT_KEY_BASE,17,1017,ThemeConstantsType::COLOR,Color(0x5DFFFFFF),,,ThemeConstantsType::COLOR,Color(0x5DFFFFFF),,,,,, +THEME_SELECT_OPTION_FOCUSED_DISABLE_TEXT_COLOR,THEME_SELECT_KEY_BASE,18,1018,ThemeConstantsType::COLOR,Color(0x66000000),,,ThemeConstantsType::COLOR,Color(0x5D000000),,,,,, +THEME_SELECT_OPTION_DISABLE_COLOR,THEME_SELECT_KEY_BASE,19,1019,ThemeConstantsType::COLOR,Color(0x32FFFFFF),,,ThemeConstantsType::COLOR,Color(0x32FFFFFF),,,,,, +THEME_SELECT_OPTION_DISABLE_TEXT_COLOR,THEME_SELECT_KEY_BASE,20,1020,ThemeConstantsType::COLOR,Color(0x5DFFFFFF),,,ThemeConstantsType::COLOR,Color(0x5DFFFFFF),,,,,, +THEME_BUTTON_KEY_BASE,THEME_KEY_BASE,1100,1100,,,,,,,,,,,, +THEME_BUTTON_BACKGROUND_COLOR,THEME_BUTTON_KEY_BASE,,1100,ThemeConstantsType::COLOR,Color(0xff0a59f7),TRUE,,ThemeConstantsType::COLOR,Color(0x33ffffff),TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_CONTROL_NORMAL,TRUE, +THEME_BUTTON_FOCUS_COLOR,THEME_BUTTON_KEY_BASE,1,1101,ThemeConstantsType::COLOR,Color(0x0c000000),,,ThemeConstantsType::REFERENCE,THEME_OHOS_CONTROL_FOCUSED,,,,,, +THEME_BUTTON_DISABLED_COLOR,THEME_BUTTON_KEY_BASE,2,1102,ThemeConstantsType::COLOR,Color(0x660a59f7),TRUE,,ThemeConstantsType::COLOR,Color(0x13ffffff),TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_CONTROL_NORMAL,TRUE, +THEME_BUTTON_DISABLED_ALPHA,THEME_BUTTON_KEY_BASE,3,1103,ThemeConstantsType::DOUBLE,0.4,,,ThemeConstantsType::REFERENCE,THEME_OHOS_DISABLED_ALPHA,,,ThemeConstantsType::REFERENCE,THEME_OHOS_DISABLED_ALPHA,, +THEME_BUTTON_CLICKED_COLOR,THEME_BUTTON_KEY_BASE,4,1104,ThemeConstantsType::COLOR,Color(0x19000000),,,,,,,ThemeConstantsType::COLOR,Color(0xff3b3b3b),, +THEME_BUTTON_HOVER_COLOR,THEME_BUTTON_KEY_BASE,5,1105,ThemeConstantsType::COLOR,Color(0x0c000000),,,,,,,,,, +THEME_BUTTON_BORDER_COLOR,THEME_BUTTON_KEY_BASE,6,1106,ThemeConstantsType::COLOR,Color(0x66FFFFFF),,,,,,,,,, +THEME_BUTTON_DOWNLOAD_BG_COLOR,THEME_BUTTON_KEY_BASE,7,1107,ThemeConstantsType::COLOR,Color(0x33ffffff),TRUE,,,,,,,,, +THEME_BUTTON_TEXT_BASE,THEME_BUTTON_KEY_BASE,20,1120,,,,,,,,,,,, +THEME_BUTTON_TEXT_FOCUS_COLOR,THEME_BUTTON_TEXT_BASE,,1120,ThemeConstantsType::REFERENCE,THEME_OHOS_COLOR_FG_INVERSE,TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_TEXT_PRIMARY_INVERSE,TRUE,,,,, +THEME_BUTTON_TEXT_COLOR,THEME_BUTTON_TEXT_BASE,1,1121,ThemeConstantsType::REFERENCE,THEME_OHOS_COLOR_FG_INVERSE,TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_COLOR_TEXT_PRIMARY,TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_FUNCTIONAL_BLUE,TRUE, +THEME_BUTTON_TEXT_DISABLED_COLOR,THEME_BUTTON_TEXT_BASE,2,1122,ThemeConstantsType::REFERENCE,THEME_OHOS_COLOR_FG_INVERSE,TRUE,0.4,ThemeConstantsType::REFERENCE,THEME_OHOS_COLOR_FG_INVERSE_DISABLE,TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_FUNCTIONAL_BLUE,TRUE,0.38 +THEME_BUTTON_TEXT_WAITING_COLOR,THEME_BUTTON_TEXT_BASE,3,1123,ThemeConstantsType::REFERENCE,THEME_OHOS_COLOR_FG_INVERSE,TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_TEXT_PRIMARY_INVERSE,TRUE,0.38,,,, +THEME_BUTTON_TEXT_FONTSIZE,THEME_BUTTON_TEXT_BASE,4,1124,ThemeConstantsType::REFERENCE,THEME_OHOS_TEXT_SIZE_BUTTON1,TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_TEXT_SIZE_BUTTON1,TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_TEXT_SIZE_BUTTON2,TRUE, +THEME_BUTTON_TEXT_FONTSIZE_MIN,THEME_BUTTON_TEXT_BASE,5,1125,ThemeConstantsType::DIMENSION,"Dimension(9.0, DimensionUnit::FP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(14.0, DimensionUnit::FP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(13.0, DimensionUnit::FP)",TRUE, +THEME_BUTTON_TEXT_FONTWEIGHT,THEME_BUTTON_TEXT_BASE,6,1126,ThemeConstantsType::INT,static_cast(FontWeight::W500),TRUE,,,,,,ThemeConstantsType::INT,static_cast(FontWeight::W500),TRUE, +THEME_BUTTON_TEXT_MAX_LINES,THEME_BUTTON_TEXT_BASE,7,1127,ThemeConstantsType::INT,1,TRUE,,,,,,,,, +THEME_BUTTON_NORMAL_TEXT_COLOR,THEME_BUTTON_TEXT_BASE,8,1128,ThemeConstantsType::COLOR,Color(0xff0a59f7),TRUE,,,,,,,,, +THEME_BUTTON_DOWNLOAD_TEXT_COLOR,THEME_BUTTON_TEXT_BASE,9,1129,ThemeConstantsType::COLOR,Color(0xe5000000),TRUE,,,,,,,,, +THEME_BUTTON_DOWNLOAD_TEXT_FONTSIZE,THEME_BUTTON_TEXT_BASE,10,1130,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::FP)",TRUE,,,,,,,,, +THEME_BUTTON_SIZE_BASE,THEME_BUTTON_KEY_BASE,40,1140,,,,,,,,,,,, +THEME_BUTTON_RADIUS,THEME_BUTTON_SIZE_BASE,,1140,ThemeConstantsType::DIMENSION,"Dimension(20.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(18.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(20.0, DimensionUnit::VP)",TRUE, +THEME_BUTTON_MIN_WIDTH,THEME_BUTTON_SIZE_BASE,1,1141,ThemeConstantsType::DIMENSION,"Dimension(1.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(104.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(116.0, DimensionUnit::VP)",TRUE, +THEME_BUTTON_HEIGHT,THEME_BUTTON_SIZE_BASE,2,1142,ThemeConstantsType::DIMENSION,"Dimension(40.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(36.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(40.0, DimensionUnit::VP)",TRUE, +THEME_BUTTON_PADDING_HORIZONTAL,THEME_BUTTON_SIZE_BASE,3,1143,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::VP)",TRUE, +THEME_BUTTON_PADDING_VERTICAL,THEME_BUTTON_SIZE_BASE,4,1144,ThemeConstantsType::DIMENSION,"Dimension(0.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_BUTTON_CIRCLE_MIN_DIAMETER,THEME_BUTTON_SIZE_BASE,5,1145,ThemeConstantsType::DIMENSION,"Dimension(52.0, DimensionUnit::VP)",,,,,,,ThemeConstantsType::DIMENSION,"Dimension(52.0, DimensionUnit::VP)",, +THEME_BUTTON_CIRCLE_MIN_ICON_SIZE,THEME_BUTTON_SIZE_BASE,6,1146,ThemeConstantsType::DIMENSION,"Dimension(28.0, DimensionUnit::VP)",,,,,,,ThemeConstantsType::DIMENSION,"Dimension(28.0, DimensionUnit::VP)",, +THEME_BUTTON_CIRCLE_MIN_PADDING,THEME_BUTTON_SIZE_BASE,7,1147,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",,,,,,,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",, +THEME_BUTTON_CIRCLE_MAX_DIAMETER,THEME_BUTTON_SIZE_BASE,8,1148,ThemeConstantsType::DIMENSION,"Dimension(76.0, DimensionUnit::VP)",,,,,,,ThemeConstantsType::DIMENSION,"Dimension(76.0, DimensionUnit::VP)",, +THEME_BUTTON_CIRCLE_MAX_ICON_SIZE,THEME_BUTTON_SIZE_BASE,9,1149,ThemeConstantsType::DIMENSION,"Dimension(38.0, DimensionUnit::VP)",,,,,,,ThemeConstantsType::DIMENSION,"Dimension(38.0, DimensionUnit::VP)",, +THEME_BUTTON_CIRCLE_MAX_PADDING,THEME_BUTTON_SIZE_BASE,10,1150,ThemeConstantsType::DIMENSION,"Dimension(19.0, DimensionUnit::VP)",,,,,,,ThemeConstantsType::DIMENSION,"Dimension(19.0, DimensionUnit::VP)",, +THEME_BUTTON_BORDER_WIDTH,THEME_BUTTON_SIZE_BASE,11,1151,ThemeConstantsType::DIMENSION,"Dimension(0.0, DimensionUnit::VP)",,,,,,,,,, +THEME_BUTTON_DOWNLOAD_HEIGHT,THEME_BUTTON_SIZE_BASE,12,1152,ThemeConstantsType::DIMENSION,"Dimension(28.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_BUTTON_PROGRESS_BASE,THEME_BUTTON_KEY_BASE,60,1160,,,,,,,,,,,, +THEME_BUTTON_PROGRESS_FOCUS_COLOR,THEME_BUTTON_PROGRESS_BASE,1,1161,ThemeConstantsType::COLOR,Color(0xff9e9e9e),,,ThemeConstantsType::COLOR,Color(0x33000000),,,,,, +THEME_BUTTON_DOWNLOAD_BORDER_COLOR,THEME_BUTTON_PROGRESS_BASE,2,1162,ThemeConstantsType::COLOR,Color(0x330a59f7),,,ThemeConstantsType::COLOR,Color(0xe5ffffff),,,,,, +THEME_BUTTON_PROGRESS_COLOR,THEME_BUTTON_PROGRESS_BASE,3,1163,ThemeConstantsType::COLOR,Color(0xffffffff),,,ThemeConstantsType::COLOR,Color(0xff282828),,,ThemeConstantsType::REFERENCE,THEME_OHOS_COLOR_PROGRESS,, +THEME_BUTTON_PROGRESS_DIAMETER,THEME_BUTTON_PROGRESS_BASE,4,1164,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(38.0, DimensionUnit::VP)",, +THEME_BUTTON_DOWNLOAD_PROGRESS_COLOR,THEME_BUTTON_PROGRESS_BASE,5,1165,ThemeConstantsType::COLOR,Color(0x330a59f7),,,ThemeConstantsType::COLOR,Color(0x33ffffff),,,,,, +THEME_BUTTON_INNER_PADDING,THEME_BUTTON_PROGRESS_BASE,6,1166,ThemeConstantsType::DIMENSION,"Dimension(8.0, DimensionUnit::VP)",,,,,,,,,, +THEME_CHECKBOX_KEY_BASE,THEME_KEY_BASE,1200,1200,,,,,,,,,,,, +THEME_CHECKBOX_POINT_COLOR,THEME_CHECKBOX_KEY_BASE,,1200,ThemeConstantsType::COLOR,Color(0xFFFFFFFF),,,ThemeConstantsType::REFERENCE,THEME_OHOS_COLOR_FG_INVERSE,TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_COLOR_FG,TRUE, +THEME_CHECKBOX_ACTIVE_COLOR,THEME_CHECKBOX_KEY_BASE,1,1201,ThemeConstantsType::COLOR,Color(0xFF0A59F7),TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_ACCENT_INVERSE,TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_ACCENT,TRUE, +THEME_CHECKBOX_INACTIVE_COLOR,THEME_CHECKBOX_KEY_BASE,2,1202,ThemeConstantsType::COLOR,Color(0x66000000),TRUE,,ThemeConstantsType::COLOR,Color(0x99FFFFFF),TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_COLOR_SECONDARY,TRUE, +THEME_CHECKBOX_FOCUS_COLOR,THEME_CHECKBOX_KEY_BASE,3,1203,ThemeConstantsType::REFERENCE,THEME_OHOS_FOCUSED_COLOR_2,,,ThemeConstantsType::COLOR,Color(0x99000000),,,,,, +THEME_CHECKBOX_SIZE,THEME_CHECKBOX_KEY_BASE,4,1204,ThemeConstantsType::DIMENSION,"Dimension(48.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(20.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(46.0, DimensionUnit::VP)",TRUE, +THEME_CHECKBOX_HOTZONE_PADDING,THEME_CHECKBOX_KEY_BASE,5,1205,ThemeConstantsType::DIMENSION,"Dimension(14.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(0.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",, +THEME_CHECKBOX_BORDER_RADIUS,THEME_CHECKBOX_KEY_BASE,6,1206,ThemeConstantsType::REFERENCE,THEME_OHOS_CORNER_RADIUS_CHECKBOX,TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_CORNER_RADIUS_CHECKBOX,TRUE,,ThemeConstantsType::DIMENSION,"Dimension(4.0, DimensionUnit::VP)",TRUE, +THEME_CHECKBOX_BORDER_WIDTH,THEME_CHECKBOX_KEY_BASE,7,1207,ThemeConstantsType::DIMENSION,"Dimension(1.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(1.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(1.0, DimensionUnit::VP)",TRUE, +THEME_CHECKBOX_STROKE_WIDTH,THEME_CHECKBOX_KEY_BASE,8,1208,ThemeConstantsType::DIMENSION,"Dimension(2.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(2.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(2.0, DimensionUnit::VP)",TRUE, +THEME_CHECKBOX_DEFAULT_SIZE,THEME_CHECKBOX_KEY_BASE,9,1209,ThemeConstantsType::DIMENSION,"Dimension(48.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(20.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(46.0, DimensionUnit::VP)",, +THEME_CHECKBOX_NEED_FOCUS,THEME_CHECKBOX_KEY_BASE,10,1210,ThemeConstantsType::INT,static_cast(false),,,ThemeConstantsType::INT,static_cast(true),,,ThemeConstantsType::INT,static_cast(false),, +THEME_CHECKBOX_INACTIVE_BACKGROUND_SOLID,THEME_CHECKBOX_KEY_BASE,11,1211,ThemeConstantsType::INT,static_cast(true),,,ThemeConstantsType::INT,static_cast(false),,,ThemeConstantsType::INT,static_cast(true),, +THEME_CHECKBOX_HOVER_COLOR,THEME_CHECKBOX_KEY_BASE,12,1212,ThemeConstantsType::COLOR,Color(0x0C000000),TRUE,,,,,,,,, +THEME_CHECKBOX_INACTIVE_POINT_COLOR,THEME_CHECKBOX_KEY_BASE,13,1213,ThemeConstantsType::COLOR,Color(0x66FFFFFF),TRUE,,,,,,ThemeConstantsType::COLOR,Color(0x00000000),, +THEME_CHECKBOX_HOVER_RADIUS,THEME_CHECKBOX_KEY_BASE,14,1214,ThemeConstantsType::DIMENSION,"Dimension(8.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_CHECKBOX_SHADOW_WIDTH,THEME_CHECKBOX_KEY_BASE,15,1215,ThemeConstantsType::DIMENSION,"Dimension(1.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_CHECKBOX_SHADOW_COLOR,THEME_CHECKBOX_KEY_BASE,16,1216,ThemeConstantsType::COLOR,Color(0x0C000000),TRUE,,,,,,,,, +THEME_RADIO_KEY_BASE,THEME_KEY_BASE,1300,1300,,,,,,,,,,,, +THEME_RADIO_POINT_COLOR,THEME_RADIO_KEY_BASE,,1300,ThemeConstantsType::COLOR,Color(0xFFFFFFFF),TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_COLOR_FG_INVERSE,TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_COLOR_FG,TRUE, +THEME_RADIO_ACTIVE_COLOR,THEME_RADIO_KEY_BASE,1,1301,ThemeConstantsType::COLOR,Color(0xFF0A59F7),TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_ACCENT_INVERSE,TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_ACCENT,TRUE, +THEME_RADIO_INACTIVE_COLOR,THEME_RADIO_KEY_BASE,2,1302,ThemeConstantsType::COLOR,Color(0x66000000),TRUE,,ThemeConstantsType::COLOR,Color(0x99FFFFFF),TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_COLOR_SECONDARY,TRUE, +THEME_RADIO_FOCUS_COLOR,THEME_RADIO_KEY_BASE,3,1303,ThemeConstantsType::COLOR,Color(0xFF0A59F7),TRUE,,ThemeConstantsType::COLOR,Color(0x99000000),,,,,, +THEME_RADIO_SIZE,THEME_RADIO_KEY_BASE,4,1304,ThemeConstantsType::DIMENSION,"Dimension(48.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(20.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(46.0, DimensionUnit::VP)",TRUE, +THEME_RADIO_HOTZONE_PADDING,THEME_RADIO_KEY_BASE,5,1305,ThemeConstantsType::DIMENSION,"Dimension(14.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(0.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(12, DimensionUnit::VP)",, +THEME_RADIO_BORDER_WIDTH,THEME_RADIO_KEY_BASE,6,1306,ThemeConstantsType::DIMENSION,"Dimension(1.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(1.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(1.0, DimensionUnit::VP)",TRUE, +THEME_RADIO_DEFAULT_SIZE,THEME_RADIO_KEY_BASE,7,1307,ThemeConstantsType::DIMENSION,"Dimension(48.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(20.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(46.0, DimensionUnit::VP)",, +THEME_RADIO_INNER_SIZE_RATIO,THEME_RADIO_KEY_BASE,8,1308,ThemeConstantsType::DOUBLE,0.5,,,ThemeConstantsType::DOUBLE,0.5,,,ThemeConstantsType::DOUBLE,0.521739,, +THEME_RADIO_NEED_FOCUS,THEME_RADIO_KEY_BASE,9,1309,ThemeConstantsType::INT,static_cast(false),,,ThemeConstantsType::INT,static_cast(true),,,ThemeConstantsType::INT,static_cast(false),, +THEME_RADIO_INACTIVE_BACKGROUND_SOLID,THEME_RADIO_KEY_BASE,10,1310,,,,,ThemeConstantsType::INT,static_cast(false),,,ThemeConstantsType::INT,static_cast(true),, +THEME_RADIO_HOVER_COLOR,THEME_RADIO_KEY_BASE,11,1311,ThemeConstantsType::COLOR,Color(0x0C000000),TRUE,,,,,,,,, +THEME_RADIO_INACTIVE_POINT_COLOR,THEME_RADIO_KEY_BASE,12,1312,ThemeConstantsType::COLOR,Color(0x66FFFFFF),TRUE,,,,,,ThemeConstantsType::COLOR,Color(0x00000000),, +THEME_RADIO_SHADOW_WIDTH,THEME_RADIO_KEY_BASE,13,1313,ThemeConstantsType::DIMENSION,"Dimension(1.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_RADIO_SHADOW_COLOR,THEME_RADIO_KEY_BASE,14,1314,ThemeConstantsType::COLOR,Color(0x0C000000),TRUE,,,,,,,,, +THEME_SWITCH_KEY_BASE,THEME_KEY_BASE,1400,1400,,,,,,,,,,,, +THEME_SWITCH_POINT_COLOR,THEME_SWITCH_KEY_BASE,,1400,ThemeConstantsType::COLOR,Color(0xFFFFFFFF),TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_COLOR_FG_INVERSE,TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_COLOR_FG,TRUE, +THEME_SWITCH_ACTIVE_COLOR,THEME_SWITCH_KEY_BASE,1,1401,ThemeConstantsType::COLOR,Color(0xFF0A59F7),TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_ACCENT_INVERSE,TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_ACCENT,TRUE, +THEME_SWITCH_INACTIVE_COLOR,THEME_SWITCH_KEY_BASE,2,1402,ThemeConstantsType::COLOR,Color(0x19000000),TRUE,,ThemeConstantsType::COLOR,Color(0x99FFFFFF),TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_COLOR_TERTIARY,TRUE, +THEME_SWITCH_FOCUS_COLOR,THEME_SWITCH_KEY_BASE,3,1403,ThemeConstantsType::COLOR,Color(0x66FFFFFF),TRUE,,ThemeConstantsType::COLOR,Color(0x99000000),,,ThemeConstantsType::REFERENCE,THEME_OHOS_COLOR_FG,, +THEME_SWITCH_WIDTH,THEME_SWITCH_KEY_BASE,4,1404,ThemeConstantsType::DIMENSION,"Dimension(48.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(36.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(46.0, DimensionUnit::VP)",TRUE, +THEME_SWITCH_HEIGHT,THEME_SWITCH_KEY_BASE,5,1405,ThemeConstantsType::DIMENSION,"Dimension(48.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(20.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(46.0, DimensionUnit::VP)",TRUE, +THEME_SWITCH_HOTZONE_HORIZONTAL_PADDING,THEME_SWITCH_KEY_BASE,6,1406,ThemeConstantsType::DIMENSION,"Dimension(6.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(0.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(7.0, DimensionUnit::VP)",, +THEME_SWITCH_HOTZONE_VERTICAL_PADDING,THEME_SWITCH_KEY_BASE,7,1407,ThemeConstantsType::DIMENSION,"Dimension(14.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(0.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(11.5, DimensionUnit::VP)",, +THEME_SWITCH_INACTIVE_BACKGROUND_SOLID,THEME_SWITCH_KEY_BASE,8,1408,ThemeConstantsType::INT,static_cast(true),,,ThemeConstantsType::INT,static_cast(false),,,ThemeConstantsType::INT,static_cast(true),, +THEME_SWITCH_BORDER_WIDTH,THEME_SWITCH_KEY_BASE,9,1409,ThemeConstantsType::DIMENSION,"Dimension(1.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(1.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(1.0, DimensionUnit::VP)",TRUE, +THEME_SWITCH_ASPECT_RATIO,THEME_SWITCH_KEY_BASE,10,1410,ThemeConstantsType::DOUBLE,1.8,,,ThemeConstantsType::DOUBLE,1.8,,,ThemeConstantsType::DOUBLE,1.3913,, +THEME_SWITCH_DEFAULT_WIDTH,THEME_SWITCH_KEY_BASE,11,1411,ThemeConstantsType::DIMENSION,"Dimension(48.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(36.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(46.0, DimensionUnit::VP)",, +THEME_SWITCH_DEFAULT_HEIGHT,THEME_SWITCH_KEY_BASE,12,1412,ThemeConstantsType::DIMENSION,"Dimension(48.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(20.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(46.0, DimensionUnit::VP)",, +THEME_SWITCH_NEED_FOCUS,THEME_SWITCH_KEY_BASE,13,1413,ThemeConstantsType::INT,static_cast(false),,,ThemeConstantsType::INT,static_cast(true),,,ThemeConstantsType::INT,static_cast(false),, +THEME_SWITCH_NEED_CLICK_EFFECT,THEME_SWITCH_KEY_BASE,14,1414,,,,,,,,,,,, +THEME_SWITCH_CLICK_EFFECT_COLOR,THEME_SWITCH_KEY_BASE,15,1415,,,,,,,,,,,, +THEME_SWITCH_HOVER_COLOR,THEME_SWITCH_KEY_BASE,16,1416,ThemeConstantsType::COLOR,Color(0x0C000000),TRUE,,,,,,,,, +THEME_SWITCH_INACTIVE_POINT_COLOR,THEME_SWITCH_KEY_BASE,17,1417,ThemeConstantsType::COLOR,Color(0x19000000),TRUE,,,,,,,,, +THEME_SWITCH_HOVER_RADIUS,THEME_SWITCH_KEY_BASE,18,1418,ThemeConstantsType::DIMENSION,"Dimension(8.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_SWITCH_SHADOW_WIDTH,THEME_SWITCH_KEY_BASE,19,1419,ThemeConstantsType::DIMENSION,"Dimension(1.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_SWITCH_SHADOW_COLOR,THEME_SWITCH_KEY_BASE,20,1420,ThemeConstantsType::COLOR,Color(0x0C000000),TRUE,,,,,,,,, +THEME_MARQUEE_KEY_BASE,THEME_KEY_BASE,1500,1500,,,,,,,,,,,, +THEME_MARQUEE_TEXT_COLOR,THEME_MARQUEE_KEY_BASE,,1500,ThemeConstantsType::REFERENCE,THEME_OHOS_COLOR_TEXT_PRIMARY,TRUE,,,,,,,,, +THEME_MARQUEE_FONT_SIZE,THEME_MARQUEE_KEY_BASE,1,1501,ThemeConstantsType::DIMENSION,"Dimension(37.5, DimensionUnit::PX)",TRUE,,,,,,,,, +THEME_PROGRESS_KEY_BASE,THEME_KEY_BASE,1600,1600,,,,,,,,,,,, +THEME_PROGRESS_CACHED_COLOR,THEME_PROGRESS_KEY_BASE,,1600,ThemeConstantsType::REFERENCE,THEME_OHOS_COLOR_CONTROL_ACTIVATED,TRUE,0.38,ThemeConstantsType::COLOR,Color(0x33ffffff),TRUE,,,,, +THEME_PROGRESS_BG_COLOR,THEME_PROGRESS_KEY_BASE,1,1601,ThemeConstantsType::REFERENCE,THEME_OHOS_CONTROL_NORMAL,TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_CONTROL_NORMAL,TRUE,THEME_OHOS_SECONDARY_CONTENT_ALPHA,ThemeConstantsType::REFERENCE,THEME_OHOS_CONTROL_NORMAL,TRUE, +THEME_PROGRERSS_THICKNESS,THEME_PROGRESS_KEY_BASE,2,1602,ThemeConstantsType::DIMENSION,"Dimension(4.0, DimensionUnit::VP)",TRUE,,,,,,ThemeConstantsType::DIMENSION,"Dimension(4.0, DimensionUnit::VP)",TRUE, +THEME_LOADING_COLOR,THEME_PROGRESS_KEY_BASE,3,1603,ThemeConstantsType::REFERENCE,THEME_OHOS_COLOR_PROGRESS,TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_COLOR_PROGRESS,TRUE,,ThemeConstantsType::COLOR,Color(0xffffffff),TRUE, +THEME_PROGRESS_STROKE_WIDTH,THEME_PROGRESS_KEY_BASE,4,1604,ThemeConstantsType::DIMENSION,"Dimension(10.0, DimensionUnit::VP)",TRUE,,,,,,ThemeConstantsType::DIMENSION,"Dimension(10.0, DimensionUnit::VP)",TRUE, +THEME_PROGRESS_SCALE_WIDTH,THEME_PROGRESS_KEY_BASE,5,1605,ThemeConstantsType::DIMENSION,"Dimension(2.0, DimensionUnit::VP)",TRUE,,,,,,ThemeConstantsType::DIMENSION,"Dimension(2.0, DimensionUnit::VP)",TRUE, +THEME_PROGRESS_DEFAULT_WIDTH,THEME_PROGRESS_KEY_BASE,6,1606,ThemeConstantsType::DIMENSION,"Dimension(300.0, DimensionUnit::VP)",,,,,,,,,, +THEME_PROGRESS_DEFAULT_DIAMETER,THEME_PROGRESS_KEY_BASE,7,1607,ThemeConstantsType::DIMENSION,"Dimension(72.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(76.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(76.0, DimensionUnit::VP)",, +THEME_PROGRESS_SCALE_NUMBER,THEME_PROGRESS_KEY_BASE,8,1608,ThemeConstantsType::INT,120,TRUE,,,,,,ThemeConstantsType::INT,120,TRUE, +THEME_LOADING_PROGRESS_DEFAULT_DIAMETER,THEME_PROGRESS_KEY_BASE,9,1609,ThemeConstantsType::DIMENSION,"Dimension(72.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(72.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(52.0, DimensionUnit::VP)",, +THEME_SCALE_PROGRESS_DEFAULT_DIAMETER,THEME_PROGRESS_KEY_BASE,10,1610,ThemeConstantsType::DIMENSION,"Dimension(750.0, DimensionUnit::PX)",,,,,,,ThemeConstantsType::DIMENSION,"Dimension(750.0, DimensionUnit::PX)",, +THEME_PROGRESS_COLOR,THEME_PROGRESS_KEY_BASE,11,1611,ThemeConstantsType::REFERENCE,THEME_OHOS_COLOR_CONTROL_ACTIVATED,TRUE,,ThemeConstantsType::COLOR,Color(0xe5ffffff),TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_COLOR_PROGRESS,TRUE, +THEME_PROGRESS_RING_THICKNESS,THEME_PROGRESS_KEY_BASE,12,1612,ThemeConstantsType::DIMENSION,"Dimension(10.0, DimensionUnit::VP)",TRUE,,,,,,ThemeConstantsType::DIMENSION,"Dimension(10.0, DimensionUnit::VP)",, +THEME_LOADING_PROGRESS_COLOR,THEME_PROGRESS_KEY_BASE,13,1613,ThemeConstantsType::COLOR,Color(0xff666666),,,ThemeConstantsType::COLOR,Color(0x99ffffff),,,ThemeConstantsType::COLOR,Color(0x99ffffff),, +THEME_LOADING_PROGRESS_MOVE_RATIO,THEME_PROGRESS_KEY_BASE,14,1614,ThemeConstantsType::DOUBLE,0.06,,,,,,,,,, +THEME_LOADING_PROGRESS_RING_RADIUS,THEME_PROGRESS_KEY_BASE,15,1615,ThemeConstantsType::DIMENSION,"Dimension(10.5, DimensionUnit::VP)",,,,,,,,,, +THEME_LOADING_PROGRESS_ORBIT_RADIUS,THEME_PROGRESS_KEY_BASE,16,1616,ThemeConstantsType::DIMENSION,"Dimension(17.0, DimensionUnit::VP)",,,,,,,,,, +THEME_LOADING_PROGRESS_COMET_TAIL_LEN,THEME_PROGRESS_KEY_BASE,17,1617,ThemeConstantsType::DOUBLE,60,,,,,,,,,, +THEME_MOON_PROGRESS_DIAMETER,THEME_PROGRESS_KEY_BASE,18,1618,ThemeConstantsType::DIMENSION,"Dimension(17.0, DimensionUnit::VP)",,,,,,,,,, +THEME_MOON_BACKGROUDN_COLOR,THEME_PROGRESS_KEY_BASE,19,1619,ThemeConstantsType::COLOR,Color(0xff0c0c0c),,,,,,,,,, +THEME_MOON_FRONT_COLOR,THEME_PROGRESS_KEY_BASE,20,1620,ThemeConstantsType::COLOR,Color(0xff303030),,,,,,,,,, +THEME_RATING_KEY_BASE,THEME_KEY_BASE,1700,1700,,,,,,,,,,,, +THEME_RATING_BIG_WIDTH,THEME_RATING_KEY_BASE,,1700,ThemeConstantsType::DIMENSION,"Dimension(140.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(360.0, DimensionUnit::VP)",TRUE,,,,, +THEME_RATING_BIG_HEIGHT,THEME_RATING_KEY_BASE,1,1701,ThemeConstantsType::DIMENSION,"Dimension(28.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(72.0, DimensionUnit::VP)",TRUE,,,,, +THEME_RATING_MINI_WIDTH,THEME_RATING_KEY_BASE,2,1702,ThemeConstantsType::DIMENSION,"Dimension(60.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(60.0, DimensionUnit::VP)",TRUE,,,,, +THEME_RATING_MINI_HEIGHT,THEME_RATING_KEY_BASE,3,1703,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",TRUE,,,,, +THEME_RATING_PADDING_VERTICAL,THEME_RATING_KEY_BASE,4,1704,ThemeConstantsType::DIMENSION,"Dimension(0.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(4.0, DimensionUnit::VP)",,,,,, +THEME_RATING_STAR_NUM,THEME_RATING_KEY_BASE,5,1705,ThemeConstantsType::INT,5,TRUE,,ThemeConstantsType::INT,5,TRUE,,,,, +THEME_RATING_SCORE,THEME_RATING_KEY_BASE,6,1706,ThemeConstantsType::DOUBLE,0,TRUE,,ThemeConstantsType::DOUBLE,0,TRUE,,,,, +THEME_RATING_MINI_SCORE,THEME_RATING_KEY_BASE,7,1707,ThemeConstantsType::DOUBLE,0,TRUE,,ThemeConstantsType::DOUBLE,0,TRUE,,,,, +THEME_RATING_STEPSIZE,THEME_RATING_KEY_BASE,8,1708,ThemeConstantsType::DOUBLE,0.5,TRUE,,ThemeConstantsType::DOUBLE,1,TRUE,,,,, +THEME_RATING_RESOURCE_ID_BIG_ON,THEME_RATING_KEY_BASE,9,1709,ThemeConstantsType::RESOURCE_ID,InternalResource::ResourceId::RATE_STAR_BIG_ON_SVG,,,ThemeConstantsType::RESOURCE_ID,InternalResource::ResourceId::TV_RATE_STAR_BIG_ON_SVG,,,,,, +THEME_RATING_RESOURCE_ID_BIG_HALF,THEME_RATING_KEY_BASE,10,1710,ThemeConstantsType::RESOURCE_ID,InternalResource::ResourceId::RATE_STAR_BIG_OFF_SVG,,,ThemeConstantsType::RESOURCE_ID,InternalResource::ResourceId::TV_RATE_STAR_BIG_OFF_SVG,,,,,, +THEME_RATING_RESOURCE_ID_BIG_OFF,THEME_RATING_KEY_BASE,11,1711,ThemeConstantsType::RESOURCE_ID,InternalResource::ResourceId::RATE_STAR_BIG_OFF_SVG,,,ThemeConstantsType::RESOURCE_ID,InternalResource::ResourceId::TV_RATE_STAR_BIG_OFF_SVG,,,,,, +THEME_RATING_RESOURCE_ID_MINI_ON,THEME_RATING_KEY_BASE,12,1712,ThemeConstantsType::RESOURCE_ID,InternalResource::ResourceId::RATE_STAR_SMALL_ON_SVG,,,ThemeConstantsType::RESOURCE_ID,InternalResource::ResourceId::TV_RATE_STAR_SMALL_ON_SVG,,,,,, +THEME_RATING_RESOURCE_ID_MINI_HALF,THEME_RATING_KEY_BASE,13,1713,ThemeConstantsType::RESOURCE_ID,InternalResource::ResourceId::RATE_STAR_SMALL_OFF_SVG,,,ThemeConstantsType::RESOURCE_ID,InternalResource::ResourceId::TV_RATE_STAR_SMALL_OFF_SVG,,,,,, +THEME_RATING_RESOURCE_ID_MINI_OFF,THEME_RATING_KEY_BASE,14,1714,ThemeConstantsType::RESOURCE_ID,InternalResource::ResourceId::RATE_STAR_SMALL_OFF_SVG,,,ThemeConstantsType::RESOURCE_ID,InternalResource::ResourceId::TV_RATE_STAR_SMALL_OFF_SVG,,,,,, +THEME_RATING_DESIGNED_STAR_ASPECT_RATIO,THEME_RATING_KEY_BASE,15,1715,ThemeConstantsType::DOUBLE,1,FALSE,,ThemeConstantsType::DOUBLE,1,FALSE,,,,, +THEME_RATING_FOCUS_BORDER_WIDTH,THEME_RATING_KEY_BASE,16,1716,ThemeConstantsType::DIMENSION,"Dimension(2.0, DimensionUnit::VP)",,,,,,,,,, +THEME_RATING_FOCUS_BORDER_RADIUS,THEME_RATING_KEY_BASE,17,1717,ThemeConstantsType::DIMENSION,"Dimension(4.0, DimensionUnit::VP)",,,,,,,,,, +THEME_RATING_HOVER_COLOR,THEME_RATING_KEY_BASE,18,1718,ThemeConstantsType::COLOR,Color(0x0C000000),TRUE,,,,,,,,, +THEME_RATING_STAR_COLOR_ACTIVE,THEME_RATING_KEY_BASE,19,1719,ThemeConstantsType::COLOR,Color(0xFFF7CE00),TRUE,,ThemeConstantsType::COLOR,Color(0xFFF7CE00),TRUE,,,,, +THEME_RATING_STAR_COLOR_INACTIVE,THEME_RATING_KEY_BASE,20,1720,ThemeConstantsType::COLOR,Color(0x19000000),TRUE,,ThemeConstantsType::COLOR,Color(0x33FFFFFF),TRUE,,,,, +THEME_SLIDER_KEY_BASE,THEME_KEY_BASE,1800,1800,,,,,,,,,,,, +THEME_SLIDER_BLOCK_COLOR,THEME_SLIDER_KEY_BASE,,1800,ThemeConstantsType::COLOR,Color(0xffffffff),TRUE,,ThemeConstantsType::COLOR,Color(0xffffffff),TRUE,,,,, +THEME_SLIDER_OUTSET_BLOCK_SIZE,THEME_SLIDER_KEY_BASE,1,1801,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",,,,,, +THEME_SLIDER_OUTSET_BLOCK_HOT_REGION_SIZE,THEME_SLIDER_KEY_BASE,2,1802,ThemeConstantsType::DIMENSION,"Dimension(40.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(40.0, DimensionUnit::VP)",,,,,, +THEME_SLIDER_OUTSET_TRACK_THICKNESS,THEME_SLIDER_KEY_BASE,3,1803,ThemeConstantsType::DIMENSION,"Dimension(4.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(4.0, DimensionUnit::VP)",TRUE,,,,, +THEME_SLIDER_TRACK_SELECTED,THEME_SLIDER_KEY_BASE,4,1804,ThemeConstantsType::REFERENCE,THEME_OHOS_COLOR_CONTROL_ACTIVATED,TRUE,,ThemeConstantsType::COLOR,Color(0xff007dff),TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_ACCENT,TRUE, +THEME_SLIDER_TRACK_BG,THEME_SLIDER_KEY_BASE,5,1805,ThemeConstantsType::REFERENCE,THEME_OHOS_CONTROL_NORMAL,TRUE,,ThemeConstantsType::COLOR,Color(0xafdbdbdb),TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_CONTROL_NORMAL,TRUE, +THEME_SLIDER_INSET_TRACK_THICKNESS,THEME_SLIDER_KEY_BASE,6,1806,ThemeConstantsType::DIMENSION,"Dimension(20.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_SLIDER_MARKER_SIZE,THEME_SLIDER_KEY_BASE,7,1807,ThemeConstantsType::DIMENSION,"Dimension(4.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_SLIDER_MARKER_COLOR,THEME_SLIDER_KEY_BASE,8,1808,ThemeConstantsType::REFERENCE,THEME_OHOS_CONTROL_NORMAL,TRUE,,,,,,,,, +THEME_SLIDER_INSET_BLOCK_SIZE,THEME_SLIDER_KEY_BASE,9,1809,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_SLIDER_INSET_BLOCK_HOT_REGION_SIZE,THEME_SLIDER_KEY_BASE,10,1810,ThemeConstantsType::DIMENSION,"Dimension(32.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_SLIDER_TIP_COLOR,THEME_SLIDER_KEY_BASE,11,1811,ThemeConstantsType::REFERENCE,THEME_OHOS_COLOR_TOOLTIPS_BG,TRUE,,,,,,,,, +THEME_SLIDER_TIP_TEXT_COLOR,THEME_SLIDER_KEY_BASE,12,1812,ThemeConstantsType::REFERENCE,THEME_OHOS_TEXT_PRIMARY_INVERSE,TRUE,,,,,,,,, +THEME_SLIDER_BLOCK_HOVER_COLOR,THEME_SLIDER_KEY_BASE,13,1813,ThemeConstantsType::COLOR,Color(0x0C000000),TRUE,,,,,,,,, +THEME_SLIDER_TIP_FONT_SIZE,THEME_SLIDER_KEY_BASE,14,1814,ThemeConstantsType::DIMENSION,"Dimension(14.0, DimensionUnit::FP)",TRUE,,,,,,,,, +THEME_SLIDER_TIP_TEXT_PADDING_SIZE,THEME_SLIDER_KEY_BASE,15,1815,ThemeConstantsType::DIMENSION,"Dimension(8.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_TEXT_KEY_BASE,THEME_KEY_BASE,1900,1900,,,,,,,,,,,, +THEME_TEXT_SIZE,THEME_TEXT_KEY_BASE,,1900,ThemeConstantsType::DIMENSION,"Dimension(30.0, DimensionUnit::PX)",TRUE,,,,,,ThemeConstantsType::DIMENSION,"Dimension(30.0, DimensionUnit::PX)",TRUE, +THEME_DIALOG_KEY_BASE,THEME_KEY_BASE,2000,2000,,,,,,,,,,,, +THEME_DIALOG_RADIUS,THEME_DIALOG_KEY_BASE,,2000,ThemeConstantsType::REFERENCE,THEME_OHOS_CORNER_RADIUS_DIALOG,TRUE,,,,,,,,, +THEME_DIALOG_BACKGROUND_COLOR,THEME_DIALOG_KEY_BASE,1,2001,ThemeConstantsType::REFERENCE,THEME_OHOS_DIALOG_BG,TRUE,,,,,,,,, +THEME_DIALOG_TITLE_TEXT_COLOR,THEME_DIALOG_KEY_BASE,2,2002,ThemeConstantsType::REFERENCE,THEME_OHOS_COLOR_TEXT_PRIMARY,TRUE,,,,,,,,, +THEME_DIALOG_TITLE_TEXT_FONTSIZE,THEME_DIALOG_KEY_BASE,3,2003,ThemeConstantsType::REFERENCE,THEME_OHOS_TEXT_SIZE_HEADLINE7,TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_TEXT_SIZE_SUBTITLE1,TRUE,,,,, +THEME_DIALOG_TITLE_TEXT_FONTSIZE_MIN,THEME_DIALOG_KEY_BASE,4,2004,ThemeConstantsType::DIMENSION,"Dimension(15.0, DimensionUnit::FP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(18.0, DimensionUnit::FP)",TRUE,,,,, +THEME_DIALOG_TITLE_TEXT_FONTWEIGHT,THEME_DIALOG_KEY_BASE,5,2005,ThemeConstantsType::INT,static_cast(FontWeight::W500),TRUE,,,,,,,,, +THEME_DIALOG_TITLE_TEXT_MAX_LINES,THEME_DIALOG_KEY_BASE,6,2006,ThemeConstantsType::INT,2,TRUE,,ThemeConstantsType::INT,1,TRUE,,,,, +THEME_DIALOG_CONTENT_TEXT_COLOR,THEME_DIALOG_KEY_BASE,7,2007,ThemeConstantsType::REFERENCE,THEME_OHOS_COLOR_TEXT_PRIMARY,TRUE,,,,,,,,, +THEME_DIALOG_CONTENT_TEXT_FONTSIZE,THEME_DIALOG_KEY_BASE,8,2008,ThemeConstantsType::REFERENCE,THEME_OHOS_TEXT_SIZE_BODY1,TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_TEXT_SIZE_BODY2,TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_TEXT_SIZE_HEADLINE7,TRUE, +THEME_DIALOG_PADDING_MIN,THEME_DIALOG_KEY_BASE,9,2009,ThemeConstantsType::DIMENSION,"Dimension(4.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(4.0, DimensionUnit::VP)",, +THEME_DIALOG_PADDING_MID,THEME_DIALOG_KEY_BASE,10,2010,ThemeConstantsType::DIMENSION,"Dimension(8.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(8.0, DimensionUnit::VP)",, +THEME_DIALOG_PADDING_MAX,THEME_DIALOG_KEY_BASE,11,2011,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",,,,,,,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",, +THEME_DIALOG_FRAME_START,THEME_DIALOG_KEY_BASE,12,2012,ThemeConstantsType::DOUBLE,0,,,,,,,,,, +THEME_DIALOG_FRAME_END,THEME_DIALOG_KEY_BASE,13,2013,ThemeConstantsType::DOUBLE,1,,,,,,,,,, +THEME_DIALOG_SCALE_START,THEME_DIALOG_KEY_BASE,14,2014,ThemeConstantsType::DOUBLE,0.85,,,ThemeConstantsType::DOUBLE,0.9,,,ThemeConstantsType::DOUBLE,1.2,, +THEME_DIALOG_SCALE_END,THEME_DIALOG_KEY_BASE,15,2015,ThemeConstantsType::DOUBLE,1,,,,,,,,,, +THEME_DIALOG_OPACITY_START,THEME_DIALOG_KEY_BASE,16,2016,ThemeConstantsType::DOUBLE,0,,,,,,,,,, +THEME_DIALOG_OPACITY_END,THEME_DIALOG_KEY_BASE,17,2017,ThemeConstantsType::DOUBLE,1,,,,,,,,,, +THEME_DIALOG_MASK_COLOR_START,THEME_DIALOG_KEY_BASE,18,2018,ThemeConstantsType::COLOR,Color(0x00000000),,,,,,,,,, +THEME_DIALOG_MASK_COLOR_END,THEME_DIALOG_KEY_BASE,19,2019,ThemeConstantsType::COLOR,Color(0x33000000),,,ThemeConstantsType::COLOR,Color(0x99000000),,,ThemeConstantsType::COLOR,Color(0xff000000),, +THEME_DIALOG_ANIMATION_DURATION_IN,THEME_DIALOG_KEY_BASE,20,2020,ThemeConstantsType::INT,250,TRUE,,ThemeConstantsType::INT,250,TRUE,,ThemeConstantsType::INT,300,TRUE, +THEME_DIALOG_ANIMATION_DURATION_OUT,THEME_DIALOG_KEY_BASE,21,2021,ThemeConstantsType::INT,220,TRUE,,ThemeConstantsType::INT,0,TRUE,,ThemeConstantsType::INT,250,TRUE, +THEME_DIALOG_BUTTON_SPACING_HORIZONTAL,THEME_DIALOG_KEY_BASE,22,2022,ThemeConstantsType::DIMENSION,"Dimension(8.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(8.0, DimensionUnit::VP)",, +THEME_DIALOG_BUTTON_SPACING_VERTICAL,THEME_DIALOG_KEY_BASE,23,2023,ThemeConstantsType::DIMENSION,"Dimension(8.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",,,,,, +THEME_DIALOG_PADDING_LEFT,THEME_DIALOG_KEY_BASE,24,2024,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",,,,,,,ThemeConstantsType::DIMENSION,"Dimension(40.0, DimensionUnit::VP)",, +THEME_DIALOG_PADDING_TOP,THEME_DIALOG_KEY_BASE,25,2025,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",,,,,,,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",, +THEME_DIALOG_PADDING_RIGHT,THEME_DIALOG_KEY_BASE,26,2026,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",,,,,,,ThemeConstantsType::DIMENSION,"Dimension(40.0, DimensionUnit::VP)",, +THEME_DIALOG_PADDING_BOTTOM,THEME_DIALOG_KEY_BASE,27,2027,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",,,,,,,ThemeConstantsType::DIMENSION,"Dimension(20.0, DimensionUnit::VP)",, +THEME_DIALOG_PADDING_LEFT_ADJUST,THEME_DIALOG_KEY_BASE,28,2028,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",,,,,,,ThemeConstantsType::DIMENSION,"Dimension(26.0, DimensionUnit::VP)",, +THEME_DIALOG_PADDING_TOP_ADJUST,THEME_DIALOG_KEY_BASE,29,2029,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",,,,,,,ThemeConstantsType::DIMENSION,"Dimension(40.0, DimensionUnit::VP)",, +THEME_DIALOG_PADDING_RIGHT_ADJUST,THEME_DIALOG_KEY_BASE,30,2030,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",,,,,,,ThemeConstantsType::DIMENSION,"Dimension(26.0, DimensionUnit::VP)",, +THEME_DIALOG_PADDING_BOTTOM_ADJUST,THEME_DIALOG_KEY_BASE,31,2031,ThemeConstantsType::DIMENSION,"Dimension(0.0, DimensionUnit::VP)",,,,,,,ThemeConstantsType::DIMENSION,"Dimension(0.0, DimensionUnit::VP)",, +THEME_DIALOG_PADDING_ACTIONS_LEFT,THEME_DIALOG_KEY_BASE,32,2032,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",,,,,, +THEME_DIALOG_PADDING_ACTIONS_TOP,THEME_DIALOG_KEY_BASE,33,2033,ThemeConstantsType::DIMENSION,"Dimension(8.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",,,,,, +THEME_DIALOG_PADDING_ACTIONS_RIGHT,THEME_DIALOG_KEY_BASE,34,2034,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",,,,,, +THEME_DIALOG_PADDING_ACTIONS_BOTTOM,THEME_DIALOG_KEY_BASE,35,2035,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",,,,,, +THEME_DIALOG_CONTENT_TEXT_FONTSIZE_MIN,THEME_DIALOG_KEY_BASE,36,2036,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::FP)",TRUE,,,,,,ThemeConstantsType::DIMENSION,"Dimension(18.0, DimensionUnit::FP)",TRUE, +THEME_DIALOG_TRANSLATE,THEME_DIALOG_KEY_BASE,37,2037,ThemeConstantsType::DOUBLE,500,,,,,,,,,, +THEME_DIALOG_DIVIDER_COLOR,THEME_DIALOG_KEY_BASE,38,2038,ThemeConstantsType::REFERENCE,THEME_OHOS_COLOR_DIVIDER_HORIZONTAL,TRUE,,,,,,,,, +THEME_DIALOG_DIVIDER_WIDTH,THEME_DIALOG_KEY_BASE,39,2039,ThemeConstantsType::DIMENSION,"Dimension(1.0, DimensionUnit::VP)",,,,,,,,,, +THEME_DIALOG_DIVIDER_HEIGHT,THEME_DIALOG_KEY_BASE,40,2040,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",,,,,,,,,, +THEME_DIALOG_DIVIDER_PADDING_HORIZON,THEME_DIALOG_KEY_BASE,41,2041,ThemeConstantsType::DIMENSION,"Dimension(4.0, DimensionUnit::VP)",,,,,,,,,, +THEME_DIALOG_DIVIDER_PADDING_VERTICAL,THEME_DIALOG_KEY_BASE,42,2042,ThemeConstantsType::DIMENSION,"Dimension(6.0, DimensionUnit::VP)",,,,,,,,,, +THEME_DIALOG_BUTTON_BG_COLOR,THEME_DIALOG_KEY_BASE,43,2043,ThemeConstantsType::COLOR,Color(0x00000000),,,ThemeConstantsType::REFERENCE,THEME_BUTTON_BACKGROUND_COLOR,,,ThemeConstantsType::COLOR,Color(0xff007dff),, +THEME_DIALOG_BUTTON_CLICKED_COLOR,THEME_DIALOG_KEY_BASE,44,2044,ThemeConstantsType::COLOR,Color(0x0c000000),,,ThemeConstantsType::REFERENCE,THEME_BUTTON_CLICKED_COLOR,,,ThemeConstantsType::COLOR,Color(0xff1989ff),, +THEME_DIALOG_TITLE_PADDING_VERTICAL,THEME_DIALOG_KEY_BASE,45,2045,ThemeConstantsType::DIMENSION,"Dimension(14.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",, +THEME_POPUP_KEY_BASE,THEME_KEY_BASE,2100,2100,,,,,,,,,,,, +THEME_POPUP_PADDING_HORIZONTAL,THEME_POPUP_KEY_BASE,,2100,ThemeConstantsType::REFERENCE,THEME_OHOS_DIMENS_ELEMENT_HORIZONTAL_LARGE,TRUE,,,,,,,,, +THEME_POPUP_PADDING_VERTICAL,THEME_POPUP_KEY_BASE,1,2101,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_POPUP_MASK_COLOR,THEME_POPUP_KEY_BASE,2,2102,ThemeConstantsType::COLOR,Color::TRANSPARENT,,,,,,,,,, +THEME_POPUP_BACKGROUND_COLOR,THEME_POPUP_KEY_BASE,3,2103,ThemeConstantsType::COLOR,Color(0xff4d4d4d),TRUE,,,,,,,,, +THEME_POPUP_TEXT_COLOR,THEME_POPUP_KEY_BASE,4,2104,ThemeConstantsType::REFERENCE,THEME_OHOS_COLOR_FG_INVERSE,TRUE,,,,,,,,, +THEME_POPUP_TEXT_FONTSIZE,THEME_POPUP_KEY_BASE,5,2105,ThemeConstantsType::REFERENCE,THEME_OHOS_TEXT_SIZE_BODY2,TRUE,,,,,,,,, +THEME_POPUP_RADIUS,THEME_POPUP_KEY_BASE,6,2106,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_SWIPER_KEY_BASE,THEME_KEY_BASE,2200,2200,,,,,,,,,,,, +THEME_SWIPER_INDICATOR_NORMAL_COLOR,THEME_SWIPER_KEY_BASE,,2200,ThemeConstantsType::REFERENCE,THEME_OHOS_CONTROL_NORMAL,TRUE,,,,,,ThemeConstantsType::REFERENCE,THEME_OHOS_COLOR_SECONDARY,TRUE, +THEME_SWIPER_INDICATOR_SELECTED_COLOR,THEME_SWIPER_KEY_BASE,1,2201,ThemeConstantsType::REFERENCE,THEME_OHOS_ACCENT,TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_COLOR_FG,TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_COLOR_FG,TRUE, +THEME_SWIPER_INDICATOR_SIZE,THEME_SWIPER_KEY_BASE,2,2202,ThemeConstantsType::DIMENSION,"Dimension(6.0, DimensionUnit::VP)",TRUE,,,,,,ThemeConstantsType::DIMENSION,"Dimension(5.0, DimensionUnit::VP)",TRUE, +THEME_SWIPER_INDICATOR_SELECTED_SIZE,THEME_SWIPER_KEY_BASE,3,2203,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",TRUE,,,,,,ThemeConstantsType::DIMENSION,"Dimension(6.0, DimensionUnit::VP)",TRUE, +THEME_SWIPER_INDICATOR_MASK,THEME_SWIPER_KEY_BASE,4,2204,ThemeConstantsType::INT,static_cast(false),TRUE,,ThemeConstantsType::INT,static_cast(false),TRUE,,ThemeConstantsType::INT,static_cast(true),TRUE, +THEME_SWIPER_INDICATOR_POINT_PADDING,THEME_SWIPER_KEY_BASE,5,2205,ThemeConstantsType::DIMENSION,"Dimension(8.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(8.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(4.0, DimensionUnit::VP)",, +THEME_SWIPER_DIGITAL_INDICATOR_FONT_SIZE,THEME_SWIPER_KEY_BASE,6,2206,ThemeConstantsType::REFERENCE,THEME_OHOS_TEXT_SIZE_BODY2,TRUE,,,,,,,,, +THEME_SWIPER_DIGITAL_INDICATOR_TEXT_COLOR,THEME_SWIPER_KEY_BASE,7,2207,ThemeConstantsType::REFERENCE,THEME_OHOS_COLOR_TEXT_SECONDARY,TRUE,,,,,,,,, +THEME_SWIPER_INDICATOR_START_END_PADDING,THEME_SWIPER_KEY_BASE,8,2208,ThemeConstantsType::DIMENSION,"Dimension(13.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_SWIPER_INDICATOR_PRESS_PADDING,THEME_SWIPER_KEY_BASE,9,2209,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_SWIPER_INDICATOR_PRESS_POINT_PADDING,THEME_SWIPER_KEY_BASE,10,2210,ThemeConstantsType::DIMENSION,"Dimension(10.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_SWIPER_INDICATOR_PRESS_SIZE,THEME_SWIPER_KEY_BASE,11,2211,ThemeConstantsType::DIMENSION,"Dimension(8.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_SWIPER_INDICATOR_HOVER_SIZE,THEME_SWIPER_KEY_BASE,12,2212,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_SWIPER_INDICATOR_HOTZONE_SIZE,THEME_SWIPER_KEY_BASE,13,2213,ThemeConstantsType::DIMENSION,"Dimension(32.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_SWIPER_INDICATOR_HOTZONE_COLOR,THEME_SWIPER_KEY_BASE,14,2214,ThemeConstantsType::COLOR,Color(0x19000000),TRUE,,,,,,,,, +THEME_SWIPER_DIGITAL_INDICATOR_FOCUS_TEXT_COLOR,THEME_SWIPER_KEY_BASE,15,2215,ThemeConstantsType::COLOR,Color(0xff0a59f7),TRUE,,,,,,,,, +THEME_SWIPER_INDICATOR_DISABLED,THEME_SWIPER_KEY_BASE,16,2216,ThemeConstantsType::INT,static_cast(false),TRUE,,,,,,,,, +THEME_SWIPER_ANIMATION_CURVE,THEME_SWIPER_KEY_BASE,17,2217,ThemeConstantsType::INT,static_cast(AnimationCurve::FRICTION),TRUE,,,,,,,,, +THEME_SWIPER_ANIMATION_OPACITY,THEME_SWIPER_KEY_BASE,18,2218,ThemeConstantsType::INT,static_cast(true),TRUE,,,,,,,,, +THEME_TOAST_KEY_BASE,THEME_KEY_BASE,2300,2300,,,,,,,,,,,, +THEME_TOAST_PADDING_HORIZONTAL,THEME_TOAST_KEY_BASE,,2300,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::VP)",TRUE, +THEME_TOAST_PADDING_VERTICAL,THEME_TOAST_KEY_BASE,1,2301,ThemeConstantsType::DIMENSION,"Dimension(8.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(10.0, DimensionUnit::VP)",TRUE, +THEME_TOAST_CONTENT_MAX_WIDTH,THEME_TOAST_KEY_BASE,2,2302,ThemeConstantsType::DIMENSION,"Dimension(260.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(420.0, DimensionUnit::VP)",,,,,, +THEME_TOAST_CONTENT_MIN_WIDTH,THEME_TOAST_KEY_BASE,3,2303,ThemeConstantsType::DIMENSION,"Dimension(100.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(124.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(116.0, DimensionUnit::VP)",, +THEME_TOAST_BACKGROUND_COLOR,THEME_TOAST_KEY_BASE,4,2304,ThemeConstantsType::COLOR,Color(0xff4d4d4d),TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_TOAST_BG,TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_TOAST_BG,TRUE, +THEME_TOAST_TEXT_TEXT_FONTWEIGHT,THEME_TOAST_KEY_BASE,5,2305,ThemeConstantsType::INT,static_cast(FontWeight::W500),TRUE,,ThemeConstantsType::INT,static_cast(FontWeight::W500),TRUE,,ThemeConstantsType::INT,static_cast(FontWeight::NORMAL),TRUE, +THEME_TOAST_TEXT_COLOR,THEME_TOAST_KEY_BASE,6,2306,ThemeConstantsType::REFERENCE,THEME_OHOS_TEXT_PRIMARY_INVERSE,TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_COLOR_TEXT_PRIMARY,TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_COLOR_TEXT_PRIMARY,TRUE, +THEME_TOAST_TEXT_FONTSIZE,THEME_TOAST_KEY_BASE,7,2307,ThemeConstantsType::REFERENCE,THEME_OHOS_TEXT_SIZE_BODY2,TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_TEXT_SIZE_BODY2,TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_TEXT_SIZE_BODY3,TRUE, +THEME_TOAST_RADIUS,THEME_TOAST_KEY_BASE,8,2308,ThemeConstantsType::DIMENSION,"Dimension(18.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_CORNER_RADIUS_TOAST,TRUE,,ThemeConstantsType::DIMENSION,"Dimension(20.0, DimensionUnit::VP)",TRUE, +THEME_TOAST_BOTTOM,THEME_TOAST_KEY_BASE,9,2309,ThemeConstantsType::DIMENSION,"Dimension(64.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(128.0, DimensionUnit::VP)",,,,,, +THEME_TOAST_TEXT_MAX_LINES,THEME_TOAST_KEY_BASE,10,2310,,,,,,,,,ThemeConstantsType::INT,2,, +THEME_TOAST_TEXT_FONTSIZE_MIN,THEME_TOAST_KEY_BASE,11,2311,,,,,,,,,ThemeConstantsType::DIMENSION,"Dimension(13.0, DimensionUnit::FP)",, +THEME_TOAST_MARGIN,THEME_TOAST_KEY_BASE,12,2312,,,,,,,,,ThemeConstantsType::DIMENSION,"Dimension(14.0, DimensionUnit::VP)",, +THEME_TOAST_CONTENT_MIN_HEIGHT,THEME_TOAST_KEY_BASE,13,2313,ThemeConstantsType::DIMENSION,"Dimension(36.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(48.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(40.0, DimensionUnit::VP)",, +THEME_TEXTFIELD_KEY_BASE,THEME_KEY_BASE,2400,2400,,,,,,,,,,,, +THEME_TEXTFIELD_PADDING_HORIZONTAL,THEME_TEXTFIELD_KEY_BASE,,2400,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",TRUE, +THEME_TEXTFIELD_PADDING_VERTICAL,THEME_TEXTFIELD_KEY_BASE,1,2401,ThemeConstantsType::DIMENSION,"Dimension(8.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",TRUE, +THEME_TEXTFIELD_HEIGHT,THEME_TEXTFIELD_KEY_BASE,2,2402,ThemeConstantsType::DIMENSION,"Dimension(40.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(48.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(48.0, DimensionUnit::VP)",TRUE, +THEME_TEXTFIELD_FONT_SIZE,THEME_TEXTFIELD_KEY_BASE,3,2403,ThemeConstantsType::REFERENCE,THEME_OHOS_TEXT_SIZE_BODY1,TRUE,,,,,,ThemeConstantsType::REFERENCE,THEME_OHOS_TEXT_SIZE_BODY1,TRUE, +THEME_TEXTFIELD_FONT_WEIGHT,THEME_TEXTFIELD_KEY_BASE,4,2404,ThemeConstantsType::INT,static_cast(FontWeight::W400),TRUE,,ThemeConstantsType::INT,static_cast(FontWeight::W500),TRUE,,ThemeConstantsType::INT,static_cast(FontWeight::W500),TRUE, +THEME_TEXTFIELD_BORDER_RADIUS,THEME_TEXTFIELD_KEY_BASE,5,2405,ThemeConstantsType::DIMENSION,"Dimension(20.0, DimensionUnit::VP)",TRUE,,,,,,ThemeConstantsType::DIMENSION,"Dimension(20.0, DimensionUnit::VP)",TRUE, +THEME_TEXTFIELD_NEED_FADE,THEME_TEXTFIELD_KEY_BASE,6,2406,ThemeConstantsType::INT,0,,,ThemeConstantsType::INT,1,,,ThemeConstantsType::INT,1,, +THEME_TEXTFIELD_BACKGROUND_COLOR,THEME_TEXTFIELD_KEY_BASE,7,2407,ThemeConstantsType::COLOR,Color(0x0C000000),TRUE,,ThemeConstantsType::COLOR,Color(0x33FFFFFF),TRUE,,ThemeConstantsType::COLOR,Color(0x33FFFFFF),TRUE, +THEME_TEXTFIELD_PLACEHOLDER_COLOR,THEME_TEXTFIELD_KEY_BASE,8,2408,ThemeConstantsType::REFERENCE,THEME_OHOS_TEXT_HINT,TRUE,,,,,,,,, +THEME_TEXTFIELD_TEXT_COLOR,THEME_TEXTFIELD_KEY_BASE,9,2409,ThemeConstantsType::COLOR,Color(0xE6000000),TRUE,,ThemeConstantsType::COLOR,Color(0xE6FFFFFF),TRUE,,ThemeConstantsType::COLOR,Color(0xE6FFFFFF),TRUE, +THEME_TEXTFIELD_FOCUS_BACKGROUND_COLOR,THEME_TEXTFIELD_KEY_BASE,10,2410,ThemeConstantsType::COLOR,Color(0x0C000000),TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_CONTROL_FOCUSED,TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_CONTROL_FOCUSED,TRUE, +THEME_TEXTFIELD_FOCUS_PLACEHOLDER_COLOR,THEME_TEXTFIELD_KEY_BASE,11,2411,ThemeConstantsType::REFERENCE,THEME_OHOS_FOCUSED_COLOR_2,TRUE,,,,,,,,, +THEME_TEXTFIELD_FOCUS_TEXT_COLOR,THEME_TEXTFIELD_KEY_BASE,12,2412,ThemeConstantsType::COLOR,Color(0xE6000000),TRUE,,,,,,ThemeConstantsType::COLOR,Color(0xE6FFFFFF),, +THEME_TEXTFIELD_DISABLE_OPACITY_RATIO,THEME_TEXTFIELD_KEY_BASE,13,2413,ThemeConstantsType::REFERENCE,THEME_OHOS_DISABLED_ALPHA,,,,,,,,,, +THEME_TEXTFIELD_OVER_HIDE_LENGTH,THEME_TEXTFIELD_KEY_BASE,14,2414,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",, +THEME_TEXTFIELD_CURSOR_COLOR,THEME_TEXTFIELD_KEY_BASE,15,2415,ThemeConstantsType::COLOR,Color(0xFF254FF7),TRUE,,ThemeConstantsType::COLOR,Color(0xE5000000),TRUE,,ThemeConstantsType::COLOR,Color(0xFF254FF7),TRUE, +THEME_TEXTFIELD_CURSOR_RADIUS,THEME_TEXTFIELD_KEY_BASE,16,2416,ThemeConstantsType::DIMENSION,"Dimension(0.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(1.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(1.0, DimensionUnit::VP)",, +THEME_TEXTFIELD_ICON_SIZE,THEME_TEXTFIELD_KEY_BASE,17,2417,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_TEXTFIELD_ICON_HOT_ZONE_SIZE,THEME_TEXTFIELD_KEY_BASE,18,2418,ThemeConstantsType::DIMENSION,"Dimension(40.0, DimensionUnit::VP)",,,,,,,,,, +THEME_TEXTFIELD_SHOW_ELLIPSIS,THEME_TEXTFIELD_KEY_BASE,19,2419,ThemeConstantsType::INT,static_cast(true),,,ThemeConstantsType::INT,static_cast(false),,,ThemeConstantsType::INT,static_cast(false),, +THEME_TEXTFIELD_ERROR_COLOR,THEME_TEXTFIELD_KEY_BASE,20,2420,ThemeConstantsType::COLOR,Color(0xFFFA2A2D),TRUE,,,,,,,,, +THEME_TEXTFIELD_ERROR_SPACING,THEME_TEXTFIELD_KEY_BASE,21,2421,ThemeConstantsType::DIMENSION,"Dimension(8.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",, +THEME_TEXTFIELD_ERROR_IS_INNER,THEME_TEXTFIELD_KEY_BASE,22,2422,ThemeConstantsType::INT,static_cast(false),,,ThemeConstantsType::INT,static_cast(true),,,ThemeConstantsType::INT,static_cast(true),, +THEME_TEXTFIELD_ERROR_BORDER_WIDTH,THEME_TEXTFIELD_KEY_BASE,23,2423,ThemeConstantsType::DIMENSION,"Dimension(1.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(1.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(1.0, DimensionUnit::VP)",, +THEME_TEXTFIELD_ERROR_BORDER_COLOR,THEME_TEXTFIELD_KEY_BASE,24,2424,ThemeConstantsType::COLOR,Color(0x99FA2A2D),TRUE,,,,,,,,, +THEME_TEXTFIELD_TEXT_SELECTED_COLOR,THEME_TEXTFIELD_KEY_BASE,25,2425,ThemeConstantsType::COLOR,Color(0x33254FF7),TRUE,,,,,,,,, +THEME_TEXTFIELD_ERROR_FONT_SIZE,THEME_TEXTFIELD_KEY_BASE,26,2426,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::FP)",TRUE,,,,,,,,, +THEME_TEXTFIELD_ERROR_FONT_WEIGHT,THEME_TEXTFIELD_KEY_BASE,27,2427,ThemeConstantsType::INT,static_cast(FontWeight::W400),TRUE,,,,,,,,, +THEME_TEXTFIELD_COUNT_TEXT_COLOR,THEME_TEXTFIELD_KEY_BASE,28,2428,ThemeConstantsType::COLOR,Color(0x61000000),TRUE,,,,,,,,, +THEME_TEXTFIELD_COUNT_FONT_SIZE,THEME_TEXTFIELD_KEY_BASE,29,2429,ThemeConstantsType::DIMENSION,"Dimension(10.0, DimensionUnit::FP)",TRUE,,,,,,,,, +THEME_TEXTFIELD_COUNT_FONT_WEIGHT,THEME_TEXTFIELD_KEY_BASE,30,2430,ThemeConstantsType::INT,static_cast(FontWeight::W400),TRUE,,,,,,,,, +THEME_TEXTFIELD_OVER_COUNT_TEXT_COLOR,THEME_TEXTFIELD_KEY_BASE,31,2431,ThemeConstantsType::COLOR,Color(0xFFFA2A2D),TRUE,,,,,,,,, +THEME_TEXTFIELD_OVER_COUNT_FONT_SIZE,THEME_TEXTFIELD_KEY_BASE,32,2432,ThemeConstantsType::DIMENSION,"Dimension(10.0, DimensionUnit::FP)",TRUE,,,,,,,,, +THEME_TEXTFIELD_OVER_COUNT_FONT_WEIGHT,THEME_TEXTFIELD_KEY_BASE,33,2433,ThemeConstantsType::INT,static_cast(FontWeight::W400),TRUE,,,,,,,,, +THEME_TEXTFIELD_TEXT_COLOR_DISABLE,THEME_TEXTFIELD_KEY_BASE,34,2434,ThemeConstantsType::COLOR,Color(0x61000000),TRUE,,,,,,,,, +THEME_TEXTFIELD_HOVER_COLOR,THEME_TEXTFIELD_KEY_BASE,35,2435,ThemeConstantsType::COLOR,Color(0x0C000000),TRUE,,,,,,,,, +THEME_TEXTFIELD_PRESS_COLOR,THEME_TEXTFIELD_KEY_BASE,36,2436,ThemeConstantsType::COLOR,Color(0x19000000),TRUE,,,,,,,,, +THEME_TEXTFIELD_COUNT_FONT_SIZE_OUTER,THEME_TEXTFIELD_KEY_BASE,37,2437,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::FP)",TRUE,,,,,,,,, +THEME_FOCUSANIMATION_KEY_BASE,THEME_KEY_BASE,2500,2500,,,,,,,,,,,, +THEME_FOCUSANIMATION_COLOR,THEME_FOCUSANIMATION_KEY_BASE,,2500,ThemeConstantsType::COLOR,Color(0xff000000),,,ThemeConstantsType::COLOR,Color(0xffffffff),,,,,, +THEME_VIDEO_KEY_BASE,THEME_KEY_BASE,2600,2600,,,,,,,,,,,, +THEME_VIDEO_BAR_BTN_WIDTH,THEME_VIDEO_KEY_BASE,,2600,ThemeConstantsType::DIMENSION,"Dimension(40.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(40.0, DimensionUnit::VP)",,,,,, +THEME_VIDEO_BAR_BTN_HEIGHT,THEME_VIDEO_KEY_BASE,1,2601,ThemeConstantsType::DIMENSION,"Dimension(40.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(40.0, DimensionUnit::VP)",,,,,, +THEME_VIDEO_BAR_BTN_PADDING_LEFT,THEME_VIDEO_KEY_BASE,2,2602,ThemeConstantsType::DIMENSION,"Dimension(10.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(10.0, DimensionUnit::VP)",,,,,, +THEME_VIDEO_BAR_BTN_PADDING_TOP,THEME_VIDEO_KEY_BASE,3,2603,ThemeConstantsType::DIMENSION,"Dimension(5.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(5.0, DimensionUnit::VP)",,,,,, +THEME_VIDEO_BAR_BTN_PADDING_RIGHT,THEME_VIDEO_KEY_BASE,4,2604,ThemeConstantsType::DIMENSION,"Dimension(10.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(10.0, DimensionUnit::VP)",,,,,, +THEME_VIDEO_BAR_BTN_PADDING_BOTTOM,THEME_VIDEO_KEY_BASE,5,2605,ThemeConstantsType::DIMENSION,"Dimension(5.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(5.0, DimensionUnit::VP)",,,,,, +THEME_VIDEO_BAR_TEXT_PADDING_LEFT,THEME_VIDEO_KEY_BASE,6,2606,ThemeConstantsType::DIMENSION,"Dimension(5.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(5.0, DimensionUnit::VP)",,,,,, +THEME_VIDEO_BAR_TEXT_PADDING_TOP,THEME_VIDEO_KEY_BASE,7,2607,ThemeConstantsType::DIMENSION,"Dimension(5.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(5.0, DimensionUnit::VP)",,,,,, +THEME_VIDEO_BAR_TEXT_PADDING_RIGHT,THEME_VIDEO_KEY_BASE,8,2608,ThemeConstantsType::DIMENSION,"Dimension(5.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(5.0, DimensionUnit::VP)",,,,,, +THEME_VIDEO_BAR_TEXT_PADDING_BOTTOM,THEME_VIDEO_KEY_BASE,9,2609,ThemeConstantsType::DIMENSION,"Dimension(5.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(5.0, DimensionUnit::VP)",,,,,, +THEME_VIDEO_BAR_SLIDER_PADDING_LEFT,THEME_VIDEO_KEY_BASE,10,2610,ThemeConstantsType::DIMENSION,"Dimension(0.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(0.0, DimensionUnit::VP)",,,,,, +THEME_VIDEO_BAR_SLIDER_PADDING_TOP,THEME_VIDEO_KEY_BASE,11,2611,ThemeConstantsType::DIMENSION,"Dimension(0.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(0.0, DimensionUnit::VP)",,,,,, +THEME_VIDEO_BAR_SLIDER_PADDING_RIGHT,THEME_VIDEO_KEY_BASE,12,2612,ThemeConstantsType::DIMENSION,"Dimension(0.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(0.0, DimensionUnit::VP)",,,,,, +THEME_VIDEO_BAR_SLIDER_PADDING_BOTTOM,THEME_VIDEO_KEY_BASE,13,2613,ThemeConstantsType::DIMENSION,"Dimension(0.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(0.0, DimensionUnit::VP)",,,,,, +THEME_VIDEO_TEXT_FONTSIZE,THEME_VIDEO_KEY_BASE,14,2614,ThemeConstantsType::DIMENSION,"Dimension(15.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(25.0, DimensionUnit::VP)",,,,,, +THEME_VIDEO_BAR_TIME_TEXT_COLOR,THEME_VIDEO_KEY_BASE,15,2615,ThemeConstantsType::COLOR,Color(0xff000000),TRUE,,ThemeConstantsType::COLOR,Color(0xff000000),TRUE,,,,, +THEME_VIDEO_ERROR_TEXT_COLOR,THEME_VIDEO_KEY_BASE,16,2616,ThemeConstantsType::COLOR,Color(0xffc0c0c0),TRUE,,ThemeConstantsType::COLOR,Color(0xffc0c0c0),TRUE,,,,, +THEME_VIDEO_BAR_BACKGROUND,THEME_VIDEO_KEY_BASE,17,2617,ThemeConstantsType::COLOR,"Color::FromARGB(100, 200, 200, 200)",TRUE,,ThemeConstantsType::COLOR,"Color::FromARGB(100, 200, 200, 200)",TRUE,,,,, +THEME_TAB_KEY_BASE,THEME_KEY_BASE,2700,2700,,,,,,,,,,,, +THEME_TAB_LABEL_PADDING,THEME_TAB_KEY_BASE,,2700,ThemeConstantsType::DIMENSION,"Dimension(8.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",,,,,, +THEME_TAB_PADDING,THEME_TAB_KEY_BASE,1,2701,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(36.0, DimensionUnit::VP)",,,,,, +THEME_TAB_DEFAULT_HEIGHT,THEME_TAB_KEY_BASE,2,2702,ThemeConstantsType::DIMENSION,"Dimension(56.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(60.0, DimensionUnit::VP)",,,,,, +THEME_TAB_GRADIENT_WIDTH,THEME_TAB_KEY_BASE,3,2703,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(48.0, DimensionUnit::VP)",,,,,, +THEME_TAB_BACKGROUND_COLOR,THEME_TAB_KEY_BASE,4,2704,ThemeConstantsType::REFERENCE,THEME_OHOS_COLOR_BG,,0.95,ThemeConstantsType::REFERENCE,THEME_APP_BACKGROUND,,,,,, +THEME_TAB_ACTIVE_INDICATOR_COLOR,THEME_TAB_KEY_BASE,5,2705,ThemeConstantsType::REFERENCE,THEME_OHOS_SUBTAB_LINE_ON,TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_SUBTAB_LINE_ON,TRUE,,,,, +THEME_TAB_ACTIVE_INDICATOR_WIDTH,THEME_TAB_KEY_BASE,6,2706,ThemeConstantsType::DIMENSION,"Dimension(2.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(2.0, DimensionUnit::VP)",,,,,, +THEME_TAB_ACTIVE_INDICATOR_MIN_WIDTH,THEME_TAB_KEY_BASE,7,2707,ThemeConstantsType::DIMENSION,"Dimension(32.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(32.0, DimensionUnit::VP)",,,,,, +THEME_TAB_ACTIVE_INDICATOR_PADDING,THEME_TAB_KEY_BASE,8,2708,ThemeConstantsType::DIMENSION,"Dimension(3.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(5.0, DimensionUnit::VP)",,,,,, +THEME_TAB_FOCUS_INDICATOR_COLOR,THEME_TAB_KEY_BASE,9,2709,ThemeConstantsType::REFERENCE,THEME_OHOS_SUBTAB_LINE_ON,,,ThemeConstantsType::REFERENCE,THEME_OHOS_CONTROL_FOCUSED,,,,,, +THEME_TAB_FOCUS_INDICATOR_RADIUS,THEME_TAB_KEY_BASE,10,2710,ThemeConstantsType::DIMENSION,"Dimension(8.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(18.0, DimensionUnit::VP)",,,,,, +THEME_TAB_FOCUS_INDICATOR_HORIZONTAL_PADDING,THEME_TAB_KEY_BASE,11,2711,ThemeConstantsType::DIMENSION,"Dimension(0.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",,,,,, +THEME_TAB_FOCUS_INDICATOR_VERTICAL_PADDING,THEME_TAB_KEY_BASE,12,2712,ThemeConstantsType::DIMENSION,"Dimension(0.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(5.0, DimensionUnit::VP)",,,,,, +THEME_TAB_DEFAULT_WIDTH,THEME_TAB_KEY_BASE,13,2713,ThemeConstantsType::DIMENSION,"Dimension(200.0, DimensionUnit::PX)",,,ThemeConstantsType::DIMENSION,"Dimension(100.0, DimensionUnit::VP)",,,,,, +THEME_TAB_DEFAULT_ITEM_HEIGHT,THEME_TAB_KEY_BASE,14,2714,ThemeConstantsType::DIMENSION,"Dimension(200.0, DimensionUnit::PX)",,,ThemeConstantsType::DIMENSION,"Dimension(100.0, DimensionUnit::VP)",,,,,, +THEME_LIST_KEY_BASE,THEME_KEY_BASE,2800,2800,,,,,,,,,,,, +THEME_LIST_GRADIENT_WIDTH,THEME_LIST_KEY_BASE,,2800,ThemeConstantsType::DIMENSION,"Dimension(0.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(64.0, DimensionUnit::VP)",,,,,, +THEME_LIST_BACKGROUND_COLOR,THEME_LIST_KEY_BASE,1,2801,ThemeConstantsType::COLOR,Color(0x00FFFFFF),,,ThemeConstantsType::REFERENCE,THEME_APP_BACKGROUND,,,,,, +THEME_LIST_SCROLL_DISTANCE,THEME_LIST_KEY_BASE,2,2802,ThemeConstantsType::DOUBLE,50,,,ThemeConstantsType::DOUBLE,50,,,,,, +THEME_LIST_DIVIDER_COLOR,THEME_LIST_KEY_BASE,3,2803,ThemeConstantsType::COLOR,Color(0x08000000),,,ThemeConstantsType::COLOR,Color(0x33FFFFFF),,,ThemeConstantsType::COLOR,Color(0x33FFFFFF),, +THEME_NAVIGATION_BAR_KEY_BASE,THEME_KEY_BASE,2900,2900,,,,,,,,,,,, +THEME_NAVIGATION_BAR_TITLE_COLOR,THEME_NAVIGATION_BAR_KEY_BASE,,2900,ThemeConstantsType::REFERENCE,THEME_OHOS_APPBAR_TITLE,TRUE,,,,,,,,, +THEME_NAVIGATION_BAR_TITLE_FONT_SIZE,THEME_NAVIGATION_BAR_KEY_BASE,1,2901,ThemeConstantsType::REFERENCE,THEME_OHOS_TEXT_SIZE_HEADLINE8,TRUE,,,,,,,,, +THEME_NAVIGATION_BAR_TITLE_FONT_SIZE_BIG,THEME_NAVIGATION_BAR_KEY_BASE,2,2902,ThemeConstantsType::REFERENCE,THEME_OHOS_TEXT_SIZE_HEADLINE6,TRUE,,,,,,,,, +THEME_NAVIGATION_BAR_SUBTITLE_COLOR,THEME_NAVIGATION_BAR_KEY_BASE,3,2903,ThemeConstantsType::REFERENCE,THEME_OHOS_APPBAR_SUBTITLE,TRUE,,,,,,,,, +THEME_NAVIGATION_BAR_SUBTITLE_FONT_SIZE,THEME_NAVIGATION_BAR_KEY_BASE,4,2904,ThemeConstantsType::REFERENCE,THEME_OHOS_TEXT_SIZE_OVERLINE,TRUE,,,,,,,,, +THEME_NAVIGATION_BAR_HEIGHT,THEME_NAVIGATION_BAR_KEY_BASE,5,2905,ThemeConstantsType::DIMENSION,"Dimension(56.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(60.0, DimensionUnit::VP)",TRUE,,,,, +THEME_NAVIGATION_BAR_HEIGHT_EMPHASIZE,THEME_NAVIGATION_BAR_KEY_BASE,6,2906,ThemeConstantsType::DIMENSION,"Dimension(128.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_NAVIGATION_BAR_RESOURCE_ID_BACK,THEME_NAVIGATION_BAR_KEY_BASE,7,2907,ThemeConstantsType::RESOURCE_ID,InternalResource::ResourceId::IC_BACK,,,,,,,,,, +THEME_NAVIGATION_BAR_RESOURCE_ID_MORE,THEME_NAVIGATION_BAR_KEY_BASE,8,2908,ThemeConstantsType::RESOURCE_ID,InternalResource::ResourceId::IC_MORE,,,,,,,,,, +THEME_NAVIGATION_BAR_MENU_ZONE_SIZE,THEME_NAVIGATION_BAR_KEY_BASE,9,2909,ThemeConstantsType::DIMENSION,"Dimension(48.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(36.0, DimensionUnit::VP)",TRUE,,,,, +THEME_NAVIGATION_BAR_MENU_ICON_SIZE,THEME_NAVIGATION_BAR_KEY_BASE,10,2910,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",TRUE,,,,, +THEME_NAVIGATION_BAR_LOGO_ICON_SIZE,THEME_NAVIGATION_BAR_KEY_BASE,11,2911,ThemeConstantsType::DIMENSION,"Dimension(40.0, DimensionUnit::VP)",TRUE,,,,,,ThemeConstantsType::DIMENSION,"Dimension(20.0, DimensionUnit::VP)",TRUE, +THEME_NAVIGATION_BAR_BUTTON_NORMAL_COLOR,THEME_NAVIGATION_BAR_KEY_BASE,16,2916,ThemeConstantsType::COLOR,Color(0x00ffffff),,,ThemeConstantsType::COLOR,Color(0x33ffffff),,,,,, +THEME_NAVIGATION_BAR_BUTTON_PRESSED_COLOR,THEME_NAVIGATION_BAR_KEY_BASE,17,2917,ThemeConstantsType::COLOR,Color(0x0D000000),,,,,,,,,, +THEME_NAVIGATION_BAR_BUTTON_FOCUS_COLOR,THEME_NAVIGATION_BAR_KEY_BASE,18,2918,,,,,ThemeConstantsType::COLOR,Color(0xe6ffffff),,,,,, +THEME_NAVIGATION_BAR_BUTTON_CORNER_RADIUS,THEME_NAVIGATION_BAR_KEY_BASE,19,2919,ThemeConstantsType::DIMENSION,"Dimension(8.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(18.0, DimensionUnit::VP)",,,,,, +THEME_NAVIGATION_BAR_MAX_PADDING_START,THEME_NAVIGATION_BAR_KEY_BASE,20,2920,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(48.0, DimensionUnit::VP)",TRUE,,,,, +THEME_NAVIGATION_BAR_MAX_PADDING_END,THEME_NAVIGATION_BAR_KEY_BASE,21,2921,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(48.0, DimensionUnit::VP)",TRUE,,,,, +THEME_NAVIGATION_BAR_DEFAULT_PADDING_START,THEME_NAVIGATION_BAR_KEY_BASE,22,2922,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_NAVIGATION_BAR_DEFAULT_PADDING_END,THEME_NAVIGATION_BAR_KEY_BASE,23,2923,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_NAVIGATION_BAR_MENU_ITEM_PADDING,THEME_NAVIGATION_BAR_KEY_BASE,24,2924,ThemeConstantsType::DIMENSION,"Dimension(0.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",,,,,, +THEME_NAVIGATION_BAR_TITLE_MIN_PADDING,THEME_NAVIGATION_BAR_KEY_BASE,25,2925,ThemeConstantsType::DIMENSION,"Dimension(4.0, DimensionUnit::VP)",,,,,,,,,, +THEME_NAVIGATION_BAR_MOST_MENU_ITEM_COUNT_IN_BAR,THEME_NAVIGATION_BAR_KEY_BASE,26,2926,ThemeConstantsType::INT,3,,,ThemeConstantsType::INT,4,,,,,, +THEME_PICKER_KEY_BASE,THEME_KEY_BASE,3000,3000,,,,,,,,,,,, +THEME_PICKER_SHOW_BUTTONS,THEME_PICKER_KEY_BASE,,3000,ThemeConstantsType::INT,1,,,ThemeConstantsType::INT,0,,,ThemeConstantsType::INT,0,, +THEME_PICKER_BACK_COLOR,THEME_PICKER_KEY_BASE,1,3001,ThemeConstantsType::COLOR,Color(0xffffffff),,,ThemeConstantsType::COLOR,Color(0xff3c3c3c),,,ThemeConstantsType::COLOR,Color(0xff000000),, +THEME_PICKER_POPUP_RADIUS,THEME_PICKER_KEY_BASE,2,3002,ThemeConstantsType::REFERENCE,THEME_OHOS_CORNER_RADIUS_DIALOG,TRUE,,ThemeConstantsType::DIMENSION,"Dimension(8.0, DimensionUnit::VP)",TRUE,,,,, +THEME_PICKER_POPUP_PADDING,THEME_PICKER_KEY_BASE,3,3003,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::VP)",TRUE,,,,, +THEME_PICKER_SHOW_OPTION_COUNT,THEME_PICKER_KEY_BASE,4,3004,ThemeConstantsType::INT,5,,,ThemeConstantsType::INT,5,,,ThemeConstantsType::INT,3,, +THEME_PICKER_FOCUS_COLOR,THEME_PICKER_KEY_BASE,5,3005,ThemeConstantsType::COLOR,Color(0xff0a59f7),,,ThemeConstantsType::COLOR,Color(0xe6ffffff),,,ThemeConstantsType::COLOR,Color(0xe6ffffff),, +THEME_PICKER_FOCUS_RADIUS,THEME_PICKER_KEY_BASE,6,3006,ThemeConstantsType::DIMENSION,"Dimension(28.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(28.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(20.0, DimensionUnit::VP)",, +THEME_PICKER_OPTION_WIDTH,THEME_PICKER_KEY_BASE,7,3007,ThemeConstantsType::DOUBLE,96,,,ThemeConstantsType::DOUBLE,96,,,ThemeConstantsType::DOUBLE,80,, +THEME_PICKER_SELECT_OPTION_HEIGHT,THEME_PICKER_KEY_BASE,8,3008,ThemeConstantsType::DOUBLE,56,,,ThemeConstantsType::DOUBLE,56,,,ThemeConstantsType::DOUBLE,44,, +THEME_PICKER_NORMAL_OPTION_HEIGHT,THEME_PICKER_KEY_BASE,9,3009,ThemeConstantsType::DOUBLE,36,,,ThemeConstantsType::DOUBLE,36,,,ThemeConstantsType::DOUBLE,36,, +THEME_PICKER_OPTION_PADDING,THEME_PICKER_KEY_BASE,10,3010,ThemeConstantsType::DOUBLE,8,,,ThemeConstantsType::DOUBLE,8,,,ThemeConstantsType::DOUBLE,8,, +THEME_PICKER_JUMP_INTERVAL,THEME_PICKER_KEY_BASE,11,3011,ThemeConstantsType::DIMENSION,"Dimension(18.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(18.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(18.0, DimensionUnit::VP)",, +THEME_PICKER_COLUMN_MARGIN,THEME_PICKER_KEY_BASE,12,3012,ThemeConstantsType::DIMENSION,"Dimension(8.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(0.0, DimensionUnit::VP)",, +THEME_PICKER_SELECT_OPTION_BACK_COLOR,THEME_PICKER_KEY_BASE,13,3013,ThemeConstantsType::COLOR,Color(0x00000000),,,ThemeConstantsType::COLOR,Color(0x33ffffff),,,ThemeConstantsType::COLOR,Color(0x00000000),, +THEME_PICKER_SELECT_OPTION_RADIUS,THEME_PICKER_KEY_BASE,14,3014,ThemeConstantsType::DIMENSION,"Dimension(8.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(28.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(20.0, DimensionUnit::VP)",, +THEME_PICKER_FOCUS_OPTION_BACK_COLOR,THEME_PICKER_KEY_BASE,15,3015,ThemeConstantsType::COLOR,Color(0xe6cccccc),,,ThemeConstantsType::COLOR,Color(0xe6ffffff),,,ThemeConstantsType::COLOR,Color(0x00000000),, +THEME_PICKER_FOCUS_OPTION_RADIUS,THEME_PICKER_KEY_BASE,16,3016,ThemeConstantsType::DIMENSION,"Dimension(28.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(28.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(20.0, DimensionUnit::VP)",, +THEME_PICKER_BUTTON_WIDTH,THEME_PICKER_KEY_BASE,17,3017,ThemeConstantsType::DIMENSION,"Dimension(150.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(144.0, DimensionUnit::VP)",,,,,, +THEME_PICKER_BUTTON_HEIGHT,THEME_PICKER_KEY_BASE,18,3018,ThemeConstantsType::DIMENSION,"Dimension(36.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(36.0, DimensionUnit::VP)",,,,,, +THEME_PICKER_BUTTON_FONT_SIZE,THEME_PICKER_KEY_BASE,19,3019,ThemeConstantsType::DIMENSION,"Dimension(18.0, DimensionUnit::FP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(18.0, DimensionUnit::FP)",TRUE,,,,, +THEME_PICKER_BUTTON_TEXT_COLOR,THEME_PICKER_KEY_BASE,20,3020,ThemeConstantsType::COLOR,Color(0xff007dff),TRUE,,ThemeConstantsType::COLOR,Color(0xff007dff),TRUE,,,,, +THEME_PICKER_SELECT_OPTION_FONT_SIZE,THEME_PICKER_KEY_BASE,21,3021,ThemeConstantsType::DIMENSION,"Dimension(20.0, DimensionUnit::VP)",,,ThemeConstantsType::REFERENCE,THEME_OHOS_TEXT_SIZE_SUBTITLE1,TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_TEXT_SIZE_HEADLINE6,TRUE, +THEME_PICKER_SELECT_OPTION_TEXT_COLOR,THEME_PICKER_KEY_BASE,22,3022,ThemeConstantsType::COLOR,Color(0xff0a59f7),TRUE,,ThemeConstantsType::COLOR,Color(0xe6ffffff),TRUE,,ThemeConstantsType::COLOR,Color(0xFF45A5FF),TRUE, +THEME_PICKER_FOCUS_OPTION_FONT_SIZE,THEME_PICKER_KEY_BASE,23,3023,ThemeConstantsType::DIMENSION,"Dimension(18.0, DimensionUnit::FP)",,,ThemeConstantsType::DIMENSION,"Dimension(20.0, DimensionUnit::FP)",,,ThemeConstantsType::REFERENCE,THEME_OHOS_TEXT_SIZE_HEADLINE6,TRUE, +THEME_PICKER_FOCUS_OPTION_TEXT_COLOR,THEME_PICKER_KEY_BASE,24,3024,ThemeConstantsType::COLOR,Color(0xff007dff),,,ThemeConstantsType::COLOR,Color(0xe6000000),,,ThemeConstantsType::COLOR,Color(0xFF45A5FF),, +THEME_PICKER_NORMAL_OPTION_FONT_SIZE,THEME_PICKER_KEY_BASE,25,3025,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::VP)",,,ThemeConstantsType::REFERENCE,THEME_OHOS_TEXT_SIZE_BODY2,TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_TEXT_SIZE_HEADLINE7,TRUE, +THEME_PICKER_NORMAL_OPTION_FONT_COLOR,THEME_PICKER_KEY_BASE,26,3026,ThemeConstantsType::REFERENCE,THEME_OHOS_COLOR_TEXT_PRIMARY,TRUE,,ThemeConstantsType::COLOR,Color(0x99ffffff),TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_COLOR_TEXT_SECONDARY,TRUE, +THEME_PICKER_BUTTON_TOP_PADDING,THEME_PICKER_KEY_BASE,27,3027,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::VP)",, +THEME_PICKER_TITLE_FONT_SIZE,THEME_PICKER_KEY_BASE,28,3028,ThemeConstantsType::DIMENSION,"Dimension(20.0, DimensionUnit::FP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(30.0, DimensionUnit::FP)",TRUE,,,,, +THEME_PICKER_TITLE_TEXT_COLOR,THEME_PICKER_KEY_BASE,29,3029,ThemeConstantsType::COLOR,Color(0xe6000000),TRUE,,ThemeConstantsType::COLOR,Color(0xe6ffffff),TRUE,,,,, +THEME_PICKER_TITLE_BOTTOM_PADDING,THEME_PICKER_KEY_BASE,30,3030,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::VP)",,,,,, +THEME_PICKER_TIME_SPLITTER,THEME_PICKER_KEY_BASE,31,3031,ThemeConstantsType::INT,0,,,,,,,ThemeConstantsType::INT,1,, +THEME_PICKER_NORMAL_OPTION_WEIGHT,THEME_PICKER_KEY_BASE,32,3032,ThemeConstantsType::INT,static_cast(FontWeight::NORMAL),,,ThemeConstantsType::INT,static_cast(FontWeight::W500),,,ThemeConstantsType::INT,static_cast(FontWeight::NORMAL),, +THEME_PICKER_SELECT_OPTION_WEIGHT,THEME_PICKER_KEY_BASE,33,3033,ThemeConstantsType::INT,static_cast(FontWeight::W500),,,ThemeConstantsType::INT,static_cast(FontWeight::W500),,,ThemeConstantsType::INT,static_cast(FontWeight::W500),, +THEME_PICKER_FOCUS_OPTION_WEIGHT,THEME_PICKER_KEY_BASE,34,3034,ThemeConstantsType::INT,static_cast(FontWeight::W500),,,ThemeConstantsType::INT,static_cast(FontWeight::W500),,,ThemeConstantsType::INT,static_cast(FontWeight::W500),, +THEME_PICKER_POPUP_PADDING_BOTTOM,THEME_PICKER_KEY_BASE,35,3035,ThemeConstantsType::DIMENSION,"Dimension(10.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::VP)",,,,,, +THEME_PICKER_SELECT_DIVIDER_THICKNESS,THEME_PICKER_KEY_BASE,36,3036,ThemeConstantsType::DIMENSION,"Dimension(0.25, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(0.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(0.0, DimensionUnit::VP)",, +THEME_PICKER_SELECT_DIVIDER_SPACING,THEME_PICKER_KEY_BASE,37,3037,ThemeConstantsType::DIMENSION,"Dimension(56.0, DimensionUnit::VP)",,,,,,,,,, +THEME_PICKER_SELECT_DIVIDER_COLOR,THEME_PICKER_KEY_BASE,38,3038,ThemeConstantsType::COLOR,Color(0x33000000),,,,,,,,,, +THEME_PICKER_DIALOG_MASK_COLOR,THEME_PICKER_KEY_BASE,39,3039,ThemeConstantsType::COLOR,Color(0x33000000),,,ThemeConstantsType::COLOR,Color(0x99000000),,,,,, +THEME_PICKER_SELECT_OPTION_MIN_FONT_SIZE,THEME_PICKER_KEY_BASE,40,3040,ThemeConstantsType::DIMENSION,"Dimension(13.0, DimensionUnit::FP)",,,ThemeConstantsType::DIMENSION,"Dimension(14.0, DimensionUnit::FP)",,,,,, +THEME_PICKER_NORMAL_OPTION_MIN_FONT_SIZE,THEME_PICKER_KEY_BASE,41,3041,ThemeConstantsType::DIMENSION,"Dimension(11.0, DimensionUnit::FP)",,,ThemeConstantsType::DIMENSION,"Dimension(14.0, DimensionUnit::FP)",,,,,, +THEME_PICKER_GRADIENT_HEIGHT,THEME_PICKER_KEY_BASE,42,3042,ThemeConstantsType::DIMENSION,"Dimension(36.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(0.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(28.0, DimensionUnit::VP)",, +THEME_PICKER_COLUMN_FIXED_WIDTH,THEME_PICKER_KEY_BASE,43,3043,ThemeConstantsType::DIMENSION,"Dimension(0.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(96.0, DimensionUnit::VP)",,,,,, +THEME_PICKER_DISAPPEAR_OPTION_FONT_SIZE,THEME_PICKER_KEY_BASE,44,3044,ThemeConstantsType::DIMENSION,"Dimension(14.0, DimensionUnit::VP)",,,,,,,,,, +THEME_ITEM_KEY_BASE,THEME_KEY_BASE,3200,3200,,,,,,,,,,,, +THEME_ITEM_CLICK_COLOR,THEME_ITEM_KEY_BASE,,3200,ThemeConstantsType::COLOR,Color(0xff000000),,,ThemeConstantsType::COLOR,Color(0xffffffff),,,ThemeConstantsType::COLOR,Color(0xffffffff),, +THEME_ITEM_CLICK_ALPHA_BEGIN,THEME_ITEM_KEY_BASE,1,3201,ThemeConstantsType::DOUBLE,0,,,ThemeConstantsType::DOUBLE,0.2,,,ThemeConstantsType::DOUBLE,0,, +THEME_ITEM_CLICK_ALPHA_END,THEME_ITEM_KEY_BASE,2,3202,ThemeConstantsType::DOUBLE,0.05,,,ThemeConstantsType::DOUBLE,0.9,,,ThemeConstantsType::DOUBLE,0.1,, +THEME_ITEM_CLICK_SCALE,THEME_ITEM_KEY_BASE,3,3203,ThemeConstantsType::DOUBLE,0.95,,,ThemeConstantsType::DOUBLE,0.95,,,ThemeConstantsType::DOUBLE,0.95,, +THEME_ITEM_FOCUS_SCALE,THEME_ITEM_KEY_BASE,4,3204,ThemeConstantsType::DOUBLE,1.12,,,ThemeConstantsType::DOUBLE,1.05,,,ThemeConstantsType::DOUBLE,1.12,, +THEME_ITEM_FOCUS_SCALE_LARGE,THEME_ITEM_KEY_BASE,5,3205,ThemeConstantsType::DOUBLE,0.94,,,ThemeConstantsType::DOUBLE,1,,,ThemeConstantsType::DOUBLE,0.94,, +THEME_ITEM_FOCUS_SCALE_MIDDLE,THEME_ITEM_KEY_BASE,6,3206,ThemeConstantsType::DOUBLE,0.8,,,ThemeConstantsType::DOUBLE,0.8,,,ThemeConstantsType::DOUBLE,0.8,, +THEME_ITEM_FOCUS_SCALE_LITTLE,THEME_ITEM_KEY_BASE,7,3207,ThemeConstantsType::DOUBLE,0.6,,,ThemeConstantsType::DOUBLE,0.6,,,ThemeConstantsType::DOUBLE,0.6,, +THEME_ITEM_FOCUS_OPACITY_LARGE,THEME_ITEM_KEY_BASE,8,3208,ThemeConstantsType::DOUBLE,1,,,ThemeConstantsType::DOUBLE,1,,,ThemeConstantsType::DOUBLE,1,, +THEME_ITEM_FOCUS_OPACITY_MIDDLE,THEME_ITEM_KEY_BASE,9,3209,ThemeConstantsType::DOUBLE,0.66,,,ThemeConstantsType::DOUBLE,0.66,,,ThemeConstantsType::DOUBLE,0.66,, +THEME_ITEM_FOCUS_OPACITY_LITTLE,THEME_ITEM_KEY_BASE,10,3210,ThemeConstantsType::DOUBLE,0.38,,,ThemeConstantsType::DOUBLE,0.38,,,ThemeConstantsType::DOUBLE,0.38,, +THEME_ITEM_FOCUS_ANIMATION_DURATION,THEME_ITEM_KEY_BASE,11,3211,ThemeConstantsType::DOUBLE,100,,,ThemeConstantsType::DOUBLE,100,,,ThemeConstantsType::DOUBLE,100,, +THEME_ITEM_CLICK_ANIMATION_DURATION,THEME_ITEM_KEY_BASE,12,3212,ThemeConstantsType::DOUBLE,200,,,ThemeConstantsType::DOUBLE,200,,,ThemeConstantsType::DOUBLE,200,, +THEME_ITEM_SIZE,THEME_ITEM_KEY_BASE,13,3213,ThemeConstantsType::DIMENSION,"Dimension(76.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(76.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(76.0, DimensionUnit::VP)",, +THEME_ITEM_MARGIN_IN_PERCENT,THEME_ITEM_KEY_BASE,14,3214,ThemeConstantsType::DOUBLE,0,,,ThemeConstantsType::DOUBLE,0.05,,,ThemeConstantsType::DOUBLE,0,, +THEME_ITEM_GROUP_IMAGE_SIZE,THEME_ITEM_KEY_BASE,15,3215,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(46.0, DimensionUnit::VP)",, +THEME_SCROLL_BAR_KEY_BASE,THEME_KEY_BASE,3300,3300,,,,,,,,,,,, +THEME_SCROLL_BAR_NORMAL_WIDTH,THEME_SCROLL_BAR_KEY_BASE,,3300,ThemeConstantsType::DIMENSION,"Dimension(4.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(4.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(3.0, DimensionUnit::VP)",, +THEME_SCROLL_BAR_ACTIVE_WIDTH,THEME_SCROLL_BAR_KEY_BASE,1,3301,ThemeConstantsType::DIMENSION,"Dimension(8.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(4.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(6.0, DimensionUnit::VP)",, +THEME_SCROLL_BAR_MIN_HEIGHT,THEME_SCROLL_BAR_KEY_BASE,2,3302,ThemeConstantsType::DIMENSION,"Dimension(48.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(48.0, DimensionUnit::VP)",, +THEME_SCROLL_BAR_TOUCH_WIDTH,THEME_SCROLL_BAR_KEY_BASE,3,3303,ThemeConstantsType::DIMENSION,"Dimension(32.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(32.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(32.0, DimensionUnit::VP)",, +THEME_SCROLL_BAR_BACKGROUND_COLOR,THEME_SCROLL_BAR_KEY_BASE,4,3304,ThemeConstantsType::COLOR,Color(0x00ffffff),TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_COLOR_FG,TRUE,0.2,ThemeConstantsType::REFERENCE,THEME_OHOS_CONTROL_NORMAL,TRUE, +THEME_SCROLL_BAR_FOREGROUND_COLOR,THEME_SCROLL_BAR_KEY_BASE,5,3305,ThemeConstantsType::REFERENCE,THEME_OHOS_COLOR_FG,TRUE,0.4,ThemeConstantsType::REFERENCE,THEME_OHOS_COLOR_FG,TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_COLOR_PRIMARY,TRUE,THEME_OHOS_SECONDARY_CONTENT_ALPHA +THEME_SCROLL_BAR_SHAPE_MODE,THEME_SCROLL_BAR_KEY_BASE,6,3306,ThemeConstantsType::INT,static_cast(ShapeMode::RECT),,,ThemeConstantsType::INT,static_cast(ShapeMode::RECT),,,ThemeConstantsType::INT,static_cast(ShapeMode::ROUND),, +THEME_SCROLL_BAR_PADDING_RIGHT,THEME_SCROLL_BAR_KEY_BASE,7,3307,ThemeConstantsType::DIMENSION,"Dimension(4.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(0.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(0.0, DimensionUnit::VP)",, +THEME_SCROLL_BAR_MIN_DYNAMIC_HEIGHT,THEME_SCROLL_BAR_KEY_BASE,8,3308,ThemeConstantsType::DIMENSION,"Dimension(4.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(4.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(3.0, DimensionUnit::VP)",, +THEME_SCROLL_BAR_RESERVED_HEIGHT,THEME_SCROLL_BAR_KEY_BASE,9,3309,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(0.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(0.0, DimensionUnit::VP)",, +THEME_REFRESH_KEY_BASE,THEME_KEY_BASE,3400,3400,,,,,,,,,,,, +THEME_REFRESH_DEFAULT_LOADING_DISTANCE,THEME_REFRESH_KEY_BASE,,3400,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::VP)",,,,,,,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::VP)",, +THEME_REFRESH_DEFAULT_PROGRESS_DISTANCE,THEME_REFRESH_KEY_BASE,1,3401,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::VP)",,,,,,,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::VP)",, +THEME_REFRESH_DEFAULT_REFRESHING_DISTANCE,THEME_REFRESH_KEY_BASE,2,3402,ThemeConstantsType::DIMENSION,"Dimension(64.0, DimensionUnit::VP)",,,,,,,ThemeConstantsType::DIMENSION,"Dimension(64.0, DimensionUnit::VP)",, +THEME_REFRESH_DEFAULT_MAX_DISTANCE,THEME_REFRESH_KEY_BASE,3,3403,ThemeConstantsType::DIMENSION,"Dimension(128.0, DimensionUnit::VP)",,,,,,,ThemeConstantsType::DIMENSION,"Dimension(120.0, DimensionUnit::VP)",, +THEME_REFRESH_DEFAULT_PROGRESS_DIAMETER,THEME_REFRESH_KEY_BASE,4,3404,ThemeConstantsType::DIMENSION,"Dimension(32.0, DimensionUnit::VP)",TRUE,,,,,,ThemeConstantsType::DIMENSION,"Dimension(28.0, DimensionUnit::VP)",TRUE, +THEME_REFRESH_DEFAULT_SHOWTIME_DISTANCE,THEME_REFRESH_KEY_BASE,5,3405,ThemeConstantsType::DIMENSION,"Dimension(96.0, DimensionUnit::VP)",,,,,,,,,, +THEME_REFRESH_DEFAULT_FONTSIZE,THEME_REFRESH_KEY_BASE,6,3406,ThemeConstantsType::DIMENSION,"Dimension(14.0, DimensionUnit::FP)",TRUE,,,,,,,,, +THEME_REFRESH_DEFAULT_TEXT_COLOR,THEME_REFRESH_KEY_BASE,7,3407,ThemeConstantsType::REFERENCE,THEME_OHOS_COLOR_TEXT_SECONDARY,TRUE,,,,,,,,, +THEME_REFRESH_DEFAULT_TEXT_FONT_WEIGHT,THEME_REFRESH_KEY_BASE,8,3408,ThemeConstantsType::INT,static_cast(FontWeight::W400),TRUE,,,,,,,,, +THEME_REFRESH_DEFAULT_PROGRESS_COLOR,THEME_REFRESH_KEY_BASE,9,3409,ThemeConstantsType::COLOR,Color(0xff666666),TRUE,,,,,,,,, +THEME_REFRESH_DEFAULT_BACKGROUND_COLOR,THEME_REFRESH_KEY_BASE,10,3410,ThemeConstantsType::COLOR,Color(0xffffffff),TRUE,,,,,,,,, +THEME_CALENDAR_BASE,THEME_KEY_BASE,3500,3500,,,,,,,,,,,, +THEME_CALENDAR_WEEK_FONT_SIZE,THEME_CALENDAR_BASE,,3500,ThemeConstantsType::DIMENSION,"Dimension(14.0, DimensionUnit::FP)",TRUE,,,,,,,,, +THEME_CALENDAR_DAY_FONT_SIZE,THEME_CALENDAR_BASE,1,3501,ThemeConstantsType::DIMENSION,"Dimension(18.0, DimensionUnit::FP)",TRUE,,,,,,,,, +THEME_CALENDAR_LUNAR_FONT_SIZE,THEME_CALENDAR_BASE,2,3502,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::FP)",TRUE,,,,,,,,, +THEME_CALENDAR_WEEK_COLOR,THEME_CALENDAR_BASE,3,3503,ThemeConstantsType::COLOR,Color(0xffa0a1a5),TRUE,,,,,,,,, +THEME_CALENDAR_DAY_COLOR,THEME_CALENDAR_BASE,4,3504,ThemeConstantsType::COLOR,Color(0xffeaebed),TRUE,,,,,,,,, +THEME_CALENDAR_LUNAR_COLOR,THEME_CALENDAR_BASE,5,3505,ThemeConstantsType::COLOR,Color(0xffa0a1a5),TRUE,,,,,,,,, +THEME_CALENDAR_WEEKEND_DAY_COLOR,THEME_CALENDAR_BASE,6,3506,ThemeConstantsType::COLOR,Color(0xff808080),TRUE,,,,,,,,, +THEME_CALENDAR_WEEKEND_LUNAR_COLOR,THEME_CALENDAR_BASE,7,3507,ThemeConstantsType::COLOR,Color(0xff808080),TRUE,,,,,,,,, +THEME_CALENDAR_TODAY_DAY_COLOR,THEME_CALENDAR_BASE,8,3508,ThemeConstantsType::COLOR,Color(0xff0d9ffb),TRUE,,,,,,,,, +THEME_CALENDAR_TODAY_LUNAR_COLOR,THEME_CALENDAR_BASE,9,3509,ThemeConstantsType::COLOR,Color(0xff0d9ffb),TRUE,,,,,,,,, +THEME_CALENDAR_NON_CURRENT_MONTH_DAY_COLOR,THEME_CALENDAR_BASE,10,3510,ThemeConstantsType::COLOR,Color(0xff555e6b),TRUE,,,,,,,,, +THEME_CALENDAR_NON_CURRENT_MONTH_LUNAR_COLOR,THEME_CALENDAR_BASE,11,3511,ThemeConstantsType::COLOR,Color(0xff555e6b),TRUE,,,,,,,,, +THEME_CALENDAR_WORK_DAY_MARK_FONT_SIZE,THEME_CALENDAR_BASE,12,3512,ThemeConstantsType::DIMENSION,"Dimension(10.0, DimensionUnit::FP)",TRUE,,,,,,,,, +THEME_CALENDAR_OFF_DAY_MARK_FONT_SIZE,THEME_CALENDAR_BASE,13,3513,ThemeConstantsType::DIMENSION,"Dimension(10.0, DimensionUnit::FP)",TRUE,,,,,,,,, +THEME_CALENDAR_WORK_DAY_MARK_COLOR,THEME_CALENDAR_BASE,14,3514,ThemeConstantsType::COLOR,Color(0xffff4d4f),TRUE,,,,,,,,, +THEME_CALENDAR_OFF_DAY_MARK_COLOR,THEME_CALENDAR_BASE,15,3515,ThemeConstantsType::COLOR,Color(0xff45a5ff),TRUE,,,,,,,,, +THEME_CALENDAR_NOT_CURRENT_MONTH_WORK_DAY_MARK_COLOR,THEME_CALENDAR_BASE,16,3516,ThemeConstantsType::COLOR,Color(0xffff4d4f),TRUE,,,,,,,,, +THEME_CALENDAR_NOT_CURRENT_MONTH_OFF_DAY_MARK_COLOR,THEME_CALENDAR_BASE,17,3517,ThemeConstantsType::COLOR,Color(0xff45a5ff),TRUE,,,,,,,,, +THEME_CALENDAR_FOCUSED_DAY_COLOR,THEME_CALENDAR_BASE,18,3518,ThemeConstantsType::COLOR,Color(0xff000000),TRUE,,,,,,,,, +THEME_CALENDAR_FOCUSED_LUNAR_COLOR,THEME_CALENDAR_BASE,19,3519,ThemeConstantsType::COLOR,Color(0xff000000),TRUE,,,,,,,,, +THEME_CALENDAR_FOCUSED_AREA_RADIUS,THEME_CALENDAR_BASE,20,3520,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_CALENDAR_FOCUSED_AREA_BACKGROUND_COLOR,THEME_CALENDAR_BASE,21,3521,ThemeConstantsType::COLOR,Color(0xffffffff),TRUE,,,,,,,,, +THEME_CALENDAR_TOP_PADDING,THEME_CALENDAR_BASE,22,3522,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_CALENDAR_BLUR_AREA_BACKGROUND_COLOR,THEME_CALENDAR_BASE,23,3523,ThemeConstantsType::COLOR,Color(0x19ffffff),TRUE,,,,,,,,, +THEME_CALENDAR_COL_SPACE,THEME_CALENDAR_BASE,24,3524,ThemeConstantsType::DIMENSION,"Dimension(39.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_CALENDAR_WEEK_HEIGHT,THEME_CALENDAR_BASE,25,3525,ThemeConstantsType::DIMENSION,"Dimension(19.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_CALENDAR_DAY_HEIGHT,THEME_CALENDAR_BASE,26,3526,ThemeConstantsType::DIMENSION,"Dimension(41.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_CALENDAR_WEEK_WIDTH,THEME_CALENDAR_BASE,27,3527,ThemeConstantsType::DIMENSION,"Dimension(48.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_CALENDAR_DAY_WIDTH,THEME_CALENDAR_BASE,28,3528,ThemeConstantsType::DIMENSION,"Dimension(48.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_CALENDAR_WEEK_AND_DAY_ROW_SPACE,THEME_CALENDAR_BASE,29,3529,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_CALENDAR_DAILY_FIVE_ROW_SPACE,THEME_CALENDAR_BASE,30,3530,ThemeConstantsType::DIMENSION,"Dimension(20.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_CALENDAR_DAILY_SIX_ROW_SPACE,THEME_CALENDAR_BASE,31,3531,ThemeConstantsType::DIMENSION,"Dimension(10.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_CALENDAR_GREGORIAN_CALENDAR_HEIGHT,THEME_CALENDAR_BASE,32,3532,ThemeConstantsType::DIMENSION,"Dimension(25.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_CALENDAR_WORK_STATE_WIDTH,THEME_CALENDAR_BASE,33,3533,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_CALENDAR_DAY_FONT_WIGHT,THEME_CALENDAR_BASE,34,3534,ThemeConstantsType::STRING,"""500""",TRUE,,,,,,,,, +THEME_CALENDAR_LUNAR_DAY_FONT_WIGHT,THEME_CALENDAR_BASE,35,3535,ThemeConstantsType::STRING,"""500""",TRUE,,,,,,,,, +THEME_CALENDAR_WORK_STATE_FONT_WIGHT,THEME_CALENDAR_BASE,36,3536,ThemeConstantsType::STRING,"""400""",TRUE,,,,,,,,, +THEME_CARD_CALENDAR_ARROW_WIDTH,THEME_CALENDAR_BASE,37,3537,ThemeConstantsType::DIMENSION,16.0_vp,TRUE,,,,,,,,, +THEME_CARD_CALENDAR_ARROW_HEIGHT,THEME_CALENDAR_BASE,38,3538,ThemeConstantsType::DIMENSION,16.0_vp,TRUE,,,,,,,,, +THEME_CARD_CALENDAR_BUTTON_WIDTH,THEME_CALENDAR_BASE,39,3539,ThemeConstantsType::DIMENSION,32.0_vp,TRUE,,,,,,,,, +THEME_CARD_CALENDAR_BUTTON_HEIGHT,THEME_CALENDAR_BASE,40,3540,ThemeConstantsType::DIMENSION,32.0_vp,TRUE,,,,,,,,, +THEME_CARD_CALENDAR_TITLE_FONT_SIZE,THEME_CALENDAR_BASE,41,3541,ThemeConstantsType::DIMENSION,16.0_fp,TRUE,,,,,,,,, +THEME_CARD_CALENDAR_TITLE_TEXT_COLOR,THEME_CALENDAR_BASE,42,3542,ThemeConstantsType::COLOR,Color(0xE1000000),TRUE,,,,,,,,, +THEME_CARD_CALENDAR_WEEK_COLOR,THEME_CALENDAR_BASE,43,3543,ThemeConstantsType::COLOR,Color(0xE1181819),TRUE,,,,,,,,, +THEME_CARD_CALENDAR_DAY_COLOR,THEME_CALENDAR_BASE,44,3544,ThemeConstantsType::COLOR,Color(0xE1181819),TRUE,,,,,,,,, +THEME_CARD_CALENDAR_WEEKEND_DAY_COLOR,THEME_CALENDAR_BASE,45,3545,ThemeConstantsType::COLOR,Color(0x7D181819),TRUE,,,,,,,,, +THEME_CARD_CALENDAR_NON_CURRENT_MONTH_DAY_COLOR,THEME_CALENDAR_BASE,46,3546,ThemeConstantsType::COLOR,Color(0x4B181819),TRUE,,,,,,,,, +THEME_CARD_CALENDAR_FOCUS_AREA_BACKGROUND_COLOR,THEME_CALENDAR_BASE,47,3547,ThemeConstantsType::COLOR,Color(0xFF0A59F7),TRUE,,,,,,,,, +THEME_CARD_CALENDAR_FOCUS_DAY_COLOR,THEME_CALENDAR_BASE,48,3548,ThemeConstantsType::COLOR,Color(0xFFFFFFFF),TRUE,,,,,,,,, +THEME_CARD_CALENDAR_TOP_PADDING,THEME_CALENDAR_BASE,49,3549,,,,,,,,,,,, +THEME_CARD_CALENDAR_WEEK_HEIGHT,THEME_CALENDAR_BASE,50,3550,ThemeConstantsType::DIMENSION,14.0_vp,TRUE,,,,,,,,, +THEME_CARD_CALENDAR_DAY_HEIGHT,THEME_CALENDAR_BASE,51,3551,ThemeConstantsType::DIMENSION,44.0_vp,TRUE,,,,,,,,, +THEME_CARD_CALENDAR_WEEK_WIDTH,THEME_CALENDAR_BASE,52,3552,ThemeConstantsType::DIMENSION,44.0_vp,TRUE,,,,,,,,, +THEME_CARD_CALENDAR_DAY_WIDTH,THEME_CALENDAR_BASE,53,3553,ThemeConstantsType::DIMENSION,44.0_vp,TRUE,,,,,,,,, +THEME_CARD_CALENDAR_FOCUS_AREA_RADIUS,THEME_CALENDAR_BASE,54,3554,ThemeConstantsType::DIMENSION,22.0_vp,TRUE,,,,,,,,, +THEME_CARD_CALENDAR_WEEK_FONT_SIZE,THEME_CALENDAR_BASE,55,3555,ThemeConstantsType::DIMENSION,10.0_fp,TRUE,,,,,,,,, +THEME_CARD_CALENDAR_DAY_FONT_SIZE,THEME_CALENDAR_BASE,56,3556,ThemeConstantsType::DIMENSION,16.0_vp,TRUE,,,,,,,,, +THEME_CARD_CALENDAR_TOUCH_COLOR,THEME_CALENDAR_BASE,57,3557,ThemeConstantsType::COLOR,Color(0x320A59F7),TRUE,,,,,,,,, +THEME_CARD_CALENDAR_LUNAR_COLOR,THEME_CALENDAR_BASE,58,3558,ThemeConstantsType::COLOR,Color(0x96181819),TRUE,,,,,,,,, +THEME_CARD_CALENDAR_WEEKEND_LUNAR_COLOR,THEME_CALENDAR_BASE,59,3559,ThemeConstantsType::COLOR,Color(0x7D181819),TRUE,,,,,,,,, +THEME_CARD_CALENDAR_NON_CURRENT_MONTH_LUNAR_COLOR,THEME_CALENDAR_BASE,60,3560,ThemeConstantsType::COLOR,Color(0x75181819),TRUE,,,,,,,,, +THEME_CARD_CALENDAR_GREGORIAN_CALENDAR_HEIGHT,THEME_CALENDAR_BASE,61,3561,ThemeConstantsType::DIMENSION,24.0_vp,TRUE,,,,,,,,, +THEME_CARD_CALENDAR_LUNAR_FONT_SIZE,THEME_CALENDAR_BASE,62,3562,ThemeConstantsType::DIMENSION,10.0_vp,TRUE,,,,,,,,, +THEME_CARD_CALENDAR_WORK_DAY_MARK_COLOR,THEME_CALENDAR_BASE,63,3563,ThemeConstantsType::COLOR,Color(0xFFE83F26),TRUE,,,,,,,,, +THEME_CARD_CALENDAR_DAILY_FIVE_ROW_SPACE,THEME_CALENDAR_BASE,64,3564,ThemeConstantsType::DIMENSION,10.0_vp,TRUE,,,,,,,,, +THEME_CARD_CALENDAR_WEEK_AND_DAY_ROW_SPACE,THEME_CALENDAR_BASE,65,3565,ThemeConstantsType::DIMENSION,4.0_vp,TRUE,,,,,,,,, +THEME_CALENDAR_WORK_STATE_HORIZONTAL_MOVING_DISTANCE,THEME_CALENDAR_BASE,66,3566,ThemeConstantsType::DIMENSION,"Dimension(2.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_CALENDAR_WORK_STATE_VERTICAL_MOVING_DISTANCE,THEME_CALENDAR_BASE,67,3567,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_SEARCH_KEY_BASE,THEME_KEY_BASE,3600,3600,,,,,,,,,,,, +THEME_SEARCH_ICON_SIZE,THEME_SEARCH_KEY_BASE,,3600,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(0.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::VP)",TRUE, +THEME_SEARCH_ICON_HOT_ZONE_SIZE,THEME_SEARCH_KEY_BASE,1,3601,ThemeConstantsType::DIMENSION,"Dimension(32.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(0.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(32.0, DimensionUnit::VP)",, +THEME_SEARCH_TEXT_FIELD_PADDING_LEFT,THEME_SEARCH_KEY_BASE,2,3602,ThemeConstantsType::DIMENSION,"Dimension(4.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",TRUE, +THEME_SEARCH_TEXT_FIELD_BORDER_RADIUS,THEME_SEARCH_KEY_BASE,3,3603,ThemeConstantsType::REFERENCE,THEME_OHOS_CORNER_RADIUS_INPUTBOX,TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_CORNER_RADIUS_INPUTBOX,TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_CORNER_RADIUS_INPUTBOX,TRUE, +THEME_SEARCH_TEXT_FIELD_WIDTH_RESERVED,THEME_SEARCH_KEY_BASE,4,3604,,,,,,,,,,,, +THEME_SEARCH_TEXT_COLOR,THEME_SEARCH_KEY_BASE,5,3605,ThemeConstantsType::REFERENCE,THEME_OHOS_COLOR_TEXT_PRIMARY,TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_TEXT_HINT_INVERSE,TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_TEXT_HINT_INVERSE,TRUE, +THEME_SEARCH_PLACEHOLDER_COLOR,THEME_SEARCH_KEY_BASE,6,3606,ThemeConstantsType::REFERENCE,THEME_OHOS_TEXT_HINT,TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_TEXT_HINT,TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_TEXT_HINT,TRUE, +THEME_SEARCH_CLOSE_ICON_SIZE,THEME_SEARCH_KEY_BASE,7,3607,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(0.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::VP)",TRUE, +THEME_SEARCH_CLOSE_ICON_HOT_ZONE_HORIZONTAL,THEME_SEARCH_KEY_BASE,8,3608,ThemeConstantsType::DIMENSION,"Dimension(40.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(0.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(40.0, DimensionUnit::VP)",, +THEME_SEARCH_DEFAULT_HEIGHT,THEME_SEARCH_KEY_BASE,9,3609,ThemeConstantsType::DIMENSION,"Dimension(40.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(48.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(48.0, DimensionUnit::VP)",, +THEME_SEARCH_FONT_SIZE,THEME_SEARCH_KEY_BASE,10,3610,ThemeConstantsType::REFERENCE,THEME_OHOS_TEXT_SIZE_BODY1,TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_TEXT_SIZE_BODY1,TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_TEXT_SIZE_BODY1,TRUE, +THEME_SEARCH_FONT_WEIGHT,THEME_SEARCH_KEY_BASE,11,3611,ThemeConstantsType::INT,static_cast(FontWeight::NORMAL),TRUE,,ThemeConstantsType::INT,static_cast(FontWeight::W500),TRUE,,ThemeConstantsType::INT,static_cast(FontWeight::W500),TRUE, +THEME_SEARCH_TEXT_FIELD_PADDING_RIGHT,THEME_SEARCH_KEY_BASE,12,3612,ThemeConstantsType::DIMENSION,"Dimension(0.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",,,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",, +THEME_SEARCH_FOCUS_TEXT_COLOR,THEME_SEARCH_KEY_BASE,13,3613,ThemeConstantsType::REFERENCE,THEME_OHOS_COLOR_TEXT_PRIMARY,TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_TEXT_HINT_INVERSE,TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_TEXT_HINT_INVERSE,TRUE, +THEME_SEARCH_BLOCK_RIGHT_SHADE,THEME_SEARCH_KEY_BASE,14,3614,ThemeConstantsType::INT,static_cast(false),,,ThemeConstantsType::INT,static_cast(true),,,ThemeConstantsType::INT,static_cast(true),, +THEME_SEARCH_FOCUS_PLACEHOLDER_COLOR,THEME_SEARCH_KEY_BASE,15,3615,ThemeConstantsType::REFERENCE,THEME_OHOS_TEXT_HINT,,,ThemeConstantsType::REFERENCE,THEME_OHOS_TEXT_HINT_INVERSE,,,ThemeConstantsType::REFERENCE,THEME_OHOS_TEXT_HINT_INVERSE,, +THEME_TEXT_OVERLAY_BASE,THEME_KEY_BASE,3700,3700,,,,,,,,,,,, +THEME_TEXT_OVERLAY_MENU_PADDING_LEFT,THEME_TEXT_OVERLAY_BASE,,3700,ThemeConstantsType::DIMENSION,"Dimension(6.0, DimensionUnit::VP)",,,,,,,,,, +THEME_TEXT_OVERLAY_MENU_PADDING_TOP,THEME_TEXT_OVERLAY_BASE,1,3701,ThemeConstantsType::DIMENSION,"Dimension(6.0, DimensionUnit::VP)",,,,,,,,,, +THEME_TEXT_OVERLAY_MENU_PADDING_RIGHT,THEME_TEXT_OVERLAY_BASE,2,3702,ThemeConstantsType::DIMENSION,"Dimension(6.0, DimensionUnit::VP)",,,,,,,,,, +THEME_TEXT_OVERLAY_MENU_PADDING_BOTTOM,THEME_TEXT_OVERLAY_BASE,3,3703,ThemeConstantsType::DIMENSION,"Dimension(6.0, DimensionUnit::VP)",,,,,,,,,, +THEME_TEXT_OVERLAY_MENU_BUTTON_WIDTH,THEME_TEXT_OVERLAY_BASE,4,3704,ThemeConstantsType::DIMENSION,"Dimension(30.0, DimensionUnit::VP)",,,,,,,,,, +THEME_TEXT_OVERLAY_MENU_BUTTON_HEIGHT,THEME_TEXT_OVERLAY_BASE,5,3705,ThemeConstantsType::DIMENSION,"Dimension(28.0, DimensionUnit::VP)",,,,,,,,,, +THEME_TEXT_OVERLAY_MENU_BUTTON_PADDING_LEFT,THEME_TEXT_OVERLAY_BASE,6,3706,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",,,,,,,,,, +THEME_TEXT_OVERLAY_MENU_BUTTON_PADDING_TOP,THEME_TEXT_OVERLAY_BASE,7,3707,ThemeConstantsType::DIMENSION,"Dimension(0.0, DimensionUnit::VP)",,,,,,,,,, +THEME_TEXT_OVERLAY_MENU_BUTTON_PADDING_RIGHT,THEME_TEXT_OVERLAY_BASE,8,3708,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",,,,,,,,,, +THEME_TEXT_OVERLAY_MENU_BUTTON_PADDING_BOTTOM,THEME_TEXT_OVERLAY_BASE,9,3709,ThemeConstantsType::DIMENSION,"Dimension(0.0, DimensionUnit::VP)",,,,,,,,,, +THEME_TEXT_OVERLAY_BUTTON_CLICKED_COLOR,THEME_TEXT_OVERLAY_BASE,10,3710,ThemeConstantsType::COLOR,Color(0x19000000),,,,,,,,,, +THEME_TEXT_OVERLAY_BUTTON_TEXT_FONTSIZE,THEME_TEXT_OVERLAY_BASE,11,3711,ThemeConstantsType::DIMENSION,"Dimension(14.0, DimensionUnit::FP)",,,,,,,,,, +THEME_TEXT_OVERLAY_BUTTON_TEXT_FONTWEIGHT,THEME_TEXT_OVERLAY_BASE,12,3712,ThemeConstantsType::INT,static_cast(FontWeight::W500),,,,,,,,,, +THEME_TEXT_OVERLAY_BUTTON_TEXT_COLOR,THEME_TEXT_OVERLAY_BASE,13,3713,ThemeConstantsType::COLOR,Color(0xE6000000),,,,,,,,,, +THEME_TEXT_OVERLAY_MENU_BORDER_WIDTH,THEME_TEXT_OVERLAY_BASE,14,3714,ThemeConstantsType::DIMENSION,"Dimension(0.0, DimensionUnit::VP)",,,,,,,,,, +THEME_TEXT_OVERLAY_MENU_BORDER_COLOR,THEME_TEXT_OVERLAY_BASE,15,3715,ThemeConstantsType::COLOR,Color(0x33000000),,,,,,,,,, +THEME_TEXT_OVERLAY_MENU_BORDER_STYLE,THEME_TEXT_OVERLAY_BASE,16,3716,ThemeConstantsType::INT,static_cast(BorderStyle::SOLID),,,,,,,,,, +THEME_TEXT_OVERLAY_MENU_BACKGROUND_COLOR,THEME_TEXT_OVERLAY_BASE,17,3717,ThemeConstantsType::COLOR,Color(0xffffffff),,,,,,,,,, +THEME_TEXT_OVERLAY_HANDLE_COLOR,THEME_TEXT_OVERLAY_BASE,18,3718,ThemeConstantsType::COLOR,Color(0xFF007DFF),TRUE,,,,,,,,, +THEME_TEXT_OVERLAY_HANDLE_DIAMETER,THEME_TEXT_OVERLAY_BASE,19,3719,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_TEXT_OVERLAY_MENU_SPACING_WITH_TEXT,THEME_TEXT_OVERLAY_BASE,20,3720,ThemeConstantsType::DIMENSION,"Dimension(4.0, DimensionUnit::VP)",,,,,,,,,, +THEME_TEXT_OVERLAY_BUTTON_HOVER_COLOR,THEME_TEXT_OVERLAY_BASE,21,3721,ThemeConstantsType::COLOR,Color(0x0C000000),,,,,,,,,, +THEME_TEXT_OVERLAY_HANDLE_COLOR_INNER,THEME_TEXT_OVERLAY_BASE,22,3722,ThemeConstantsType::COLOR,Color(0xFFFFFFFF),TRUE,,,,,,,,, +THEME_TEXT_OVERLAY_HANDLE_DIAMETER_INNER,THEME_TEXT_OVERLAY_BASE,23,3723,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_TEXT_OVERLAY_MENU_ICON_COLOR,THEME_TEXT_OVERLAY_BASE,24,3724,ThemeConstantsType::COLOR,Color(0xE5000000),TRUE,,,,,,,,, +THEME_DIVIDER_BASE,THEME_KEY_BASE,3800,3800,,,,,,,,,,,, +THEME_DIVIDER_COLOR,THEME_DIVIDER_BASE,,3800,ThemeConstantsType::COLOR,Color(0x08000000),,,ThemeConstantsType::COLOR,Color(0x33FFFFFF),,,ThemeConstantsType::COLOR,Color(0x33FFFFFF),, +THEME_TOGGLE_BASE,THEME_KEY_BASE,3900,3900,,,,,,,,,,,, +THEME_TOGGLE_BACKGROUND_COLOR,THEME_TOGGLE_BASE,1,3901,ThemeConstantsType::REFERENCE,THEME_OHOS_COLOR_FG,TRUE,0.05,,,,,,,, +THEME_TOGGLE_CHECKED_COLOR,THEME_TOGGLE_BASE,2,3902,ThemeConstantsType::COLOR,Color(0x330a59f7),TRUE,,,,,,,,, +THEME_TOGGLE_TEXT_COLOR,THEME_TOGGLE_BASE,3,3903,ThemeConstantsType::COLOR,Color(0xe6000000),TRUE,,,,,,,,, +THEME_TOGGLE_TEXT_FONTSIZE,THEME_TOGGLE_BASE,4,3904,ThemeConstantsType::REFERENCE,THEME_OHOS_TEXT_SIZE_BODY3,TRUE,,,,,,,,, +THEME_TOGGLE_TEXT_FONTWEIGHT,THEME_TOGGLE_BASE,5,3905,ThemeConstantsType::INT,static_cast(FontWeight::W500),TRUE,,,,,,,,, +THEME_TOGGLE_HEIGHT,THEME_TOGGLE_BASE,6,3906,ThemeConstantsType::DIMENSION,"Dimension(28.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_TOGGLE_PADDING_HORIZONTAL,THEME_TOGGLE_BASE,7,3907,ThemeConstantsType::DIMENSION,"Dimension(8.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_TOGGLE_PADDING_VERTICAL,THEME_TOGGLE_BASE,8,3908,ThemeConstantsType::DIMENSION,"Dimension(0.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_TOGGLE_DISABLED_ALPHA,THEME_TOGGLE_BASE,9,3909,ThemeConstantsType::DOUBLE,0.4,TRUE,,,,,,,,, +THEME_TOGGLE_PRESSED_BLEND_COLOR,THEME_TOGGLE_BASE,10,3910,ThemeConstantsType::REFERENCE,THEME_CLICKEFFIC_DEFAULT_COLOR_OHOS,TRUE,,,,,,,,, +THEME_CLOCK_BASE,THEME_KEY_BASE,4000,4000,,,,,,,,,,,, +THEME_CLOCK_DEFAULT_SIZE,THEME_CLOCK_BASE,1,4001,ThemeConstantsType::DIMENSION,"Dimension(150.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_PIECE_BASE,THEME_KEY_BASE,4100,4100,,,,,,,,,,,, +THEME_PIECE_HEIGHT,THEME_PIECE_BASE,1,4101,ThemeConstantsType::DIMENSION,"Dimension(28.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_PIECE_PADDING_VERTICAL,THEME_PIECE_BASE,2,4102,ThemeConstantsType::DIMENSION,"Dimension(0.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_PIECE_PADDING_HORIZONTAL,THEME_PIECE_BASE,3,4103,ThemeConstantsType::DIMENSION,"Dimension(8.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_PIECE_BACKGROUND_COLOR,THEME_PIECE_BASE,4,4104,ThemeConstantsType::COLOR,Color(0x0C000000),TRUE,,,,,,,,, +THEME_PIECE_TEXT_LINES,THEME_PIECE_BASE,5,4105,ThemeConstantsType::INT,1,TRUE,,,,,,,,, +THEME_PIECE_TEXT_COLOR,THEME_PIECE_BASE,6,4106,ThemeConstantsType::COLOR,Color(0xE6000000),TRUE,,,,,,,,, +THEME_PIECE_FONT_SIZE,THEME_PIECE_BASE,7,4107,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::FP)",TRUE,,,,,,,,, +THEME_PIECE_FONT_WEIGHT,THEME_PIECE_BASE,8,4108,ThemeConstantsType::INT,static_cast(FontWeight::W500),TRUE,,,,,,,,, +THEME_PIECE_INTERVAL,THEME_PIECE_BASE,9,4109,ThemeConstantsType::DIMENSION,"Dimension(4.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_PIECE_ICON_SOURCE,THEME_PIECE_BASE,10,4110,ThemeConstantsType::RESOURCE_ID,InternalResource::ResourceId::PIECE_DELETE_SVG,,,,,,,,,, +THEME_PIECE_ICON_SIZE,THEME_PIECE_BASE,11,4111,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_PIECE_HOVER_COLOR,THEME_PIECE_BASE,12,4112,ThemeConstantsType::COLOR,Color(0x0C000000),TRUE,,,,,,,,, +THEME_STEPPER_BASE,THEME_KEY_BASE,4200,4200,,,,,,,,,,,, +THEME_STEPPER_TEXT_COLOR,THEME_STEPPER_BASE,1,4201,ThemeConstantsType::COLOR,Color(0xe6000000),TRUE,,ThemeConstantsType::COLOR,Color(0xe6000000),TRUE,,,,, +THEME_STEPPER_TEXT_FONTSIZE,THEME_STEPPER_BASE,2,4202,ThemeConstantsType::REFERENCE,THEME_OHOS_TEXT_SIZE_BODY1,TRUE,,ThemeConstantsType::REFERENCE,THEME_OHOS_TEXT_SIZE_BODY1,TRUE,,,,, +THEME_STEPPER_TEXT_FONTWEIGHT,THEME_STEPPER_BASE,3,4203,ThemeConstantsType::INT,static_cast(FontWeight::W500),TRUE,,ThemeConstantsType::INT,static_cast(FontWeight::W500),TRUE,,,,, +THEME_STEPPER_TEXT_FONTSIZE_MIN,THEME_STEPPER_BASE,4,4204,ThemeConstantsType::DIMENSION,"Dimension(9.0, DimensionUnit::FP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(9.0, DimensionUnit::FP)",TRUE,,,,, +THEME_STEPPER_TEXT_MAX_LINES,THEME_STEPPER_BASE,5,4205,ThemeConstantsType::INT,2,TRUE,,ThemeConstantsType::INT,2,TRUE,,,,, +THEME_STEPPER_DEFAULT_PADDING_START,THEME_STEPPER_BASE,6,4206,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",TRUE,,,,, +THEME_STEPPER_DEFAULT_PADDING_END,THEME_STEPPER_BASE,7,4207,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",TRUE,,,,, +THEME_STEPPER_PROGRESS_COLOR,THEME_STEPPER_BASE,8,4208,ThemeConstantsType::COLOR,Color(0x99000000),TRUE,,ThemeConstantsType::COLOR,Color(0x99000000),TRUE,,,,, +THEME_STEPPER_PROGRESS_DIAMETER,THEME_STEPPER_BASE,9,4209,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",TRUE,,,,, +THEME_STEPPER_ARROW_WIDTH_DIAMETER,THEME_STEPPER_BASE,10,4210,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(12.0, DimensionUnit::VP)",TRUE,,,,, +THEME_STEPPER_ARROW_HEIGHT_DIAMETER,THEME_STEPPER_BASE,11,4211,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",TRUE,,,,, +THEME_STEPPER_ARROW_COLOR,THEME_STEPPER_BASE,12,4212,ThemeConstantsType::COLOR,Color(0xe6000000),TRUE,,ThemeConstantsType::COLOR,Color(0xe6000000),TRUE,,,,, +THEME_STEPPER_DISABLED_COLOR,THEME_STEPPER_BASE,13,4213,ThemeConstantsType::COLOR,Color(0x66000000),TRUE,,ThemeConstantsType::COLOR,Color(0x9effffff),TRUE,,,,, +THEME_STEPPER_RADIUS,THEME_STEPPER_BASE,14,4214,ThemeConstantsType::DIMENSION,"Dimension(8.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(8.0, DimensionUnit::VP)",TRUE,,,,, +THEME_STEPPER_BUTTON_PRESSED_COLOR,THEME_STEPPER_BASE,15,4215,ThemeConstantsType::REFERENCE,THEME_CLICKEFFIC_DEFAULT_COLOR_OHOS,TRUE,,ThemeConstantsType::REFERENCE,THEME_CLICKEFFIC_DEFAULT_COLOR_OHOS,TRUE,,,,, +THEME_STEPPER_BUTTON_PRESSED_HEIGHT,THEME_STEPPER_BASE,16,4216,ThemeConstantsType::DIMENSION,"Dimension(40.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(40.0, DimensionUnit::VP)",TRUE,,,,, +THEME_STEPPER_CONTROL_HEIGHT,THEME_STEPPER_BASE,17,4217,ThemeConstantsType::DIMENSION,"Dimension(48.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(48.0, DimensionUnit::VP)",TRUE,,,,, +THEME_STEPPER_CONTROL_MARGIN,THEME_STEPPER_BASE,18,4218,ThemeConstantsType::DIMENSION,"Dimension(4.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(4.0, DimensionUnit::VP)",TRUE,,,,, +THEME_STEPPER_CONTROL_PADDING,THEME_STEPPER_BASE,19,4219,ThemeConstantsType::DIMENSION,"Dimension(8.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(8.0, DimensionUnit::VP)",TRUE,,,,, +THEME_STEPPER_FOCUS_COLOR,THEME_STEPPER_BASE,20,4220,ThemeConstantsType::COLOR,Color(0xff0a59f7),TRUE,,ThemeConstantsType::COLOR,Color(0xff0a59f7),TRUE,,,,, +THEME_STEPPER_FOCUS_BORDER_WIDTH,THEME_STEPPER_BASE,21,4221,ThemeConstantsType::DIMENSION,"Dimension(2.0, DimensionUnit::VP)",TRUE,,ThemeConstantsType::DIMENSION,"Dimension(2.0, DimensionUnit::VP)",TRUE,,,,, +THEME_STEPPER_MOUSE_HOVER_COLOR,THEME_STEPPER_BASE,22,4222,ThemeConstantsType::COLOR,Color(0x0c000000),TRUE,,ThemeConstantsType::COLOR,Color(0x0c000000),TRUE,,,,, +THEME_STEPPER_DISABLED_ALPHA,THEME_STEPPER_BASE,23,4223,ThemeConstantsType::DOUBLE,0.4,TRUE,,,,,,,,, +THEME_DATA_PANEL_BASE,THEME_KEY_BASE,4300,4300,,,,,,,,,,,, +THEME_DATA_PANEL_BACKGROUND_COLOR,THEME_DATA_PANEL_BASE,1,4301,ThemeConstantsType::COLOR,Color(0x4C000000),TRUE,,,,,,,,, +THEME_DATA_PANEL_PROGRESS_START_COLOR,THEME_DATA_PANEL_BASE,2,4302,ThemeConstantsType::COLOR,Color(0xFF86C1FF),TRUE,,,,,,,,, +THEME_DATA_PANEL_PROGRESS_END_COLOR,THEME_DATA_PANEL_BASE,3,4303,ThemeConstantsType::COLOR,Color(0xFF254FF7),TRUE,,,,,,,,, +THEME_DATA_PANEL_LOADING_START_COLOR,THEME_DATA_PANEL_BASE,4,4304,ThemeConstantsType::COLOR,Color(0x0086C1FF),TRUE,,,,,,,,, +THEME_DATA_PANEL_LOADING_END_COLOR,THEME_DATA_PANEL_BASE,5,4305,ThemeConstantsType::COLOR,Color(0xFF254FF7),TRUE,,,,,,,,, +THEME_DATA_PANEL_THICKNESS,THEME_DATA_PANEL_BASE,6,4306,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_DATA_PANEL_HEIGHT,THEME_DATA_PANEL_BASE,7,4307,ThemeConstantsType::DIMENSION,"Dimension(252.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_DATA_PANEL_WIDTH,THEME_DATA_PANEL_BASE,8,4308,ThemeConstantsType::DIMENSION,"Dimension(252.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_DATA_PANEL_CONFIG_COLOR_1_START,THEME_DATA_PANEL_BASE,9,4309,ThemeConstantsType::COLOR,Color(0xFFF7CE00),TRUE,,,,,,,,, +THEME_DATA_PANEL_CONFIG_COLOR_2_START,THEME_DATA_PANEL_BASE,10,4310,ThemeConstantsType::COLOR,Color(0xFFF76223),TRUE,,,,,,,,, +THEME_DATA_PANEL_CONFIG_COLOR_3_START,THEME_DATA_PANEL_BASE,11,4311,ThemeConstantsType::COLOR,Color(0xFFF772AC),TRUE,,,,,,,,, +THEME_DATA_PANEL_CONFIG_COLOR_4_START,THEME_DATA_PANEL_BASE,12,4312,ThemeConstantsType::COLOR,Color(0xFFA575EB),TRUE,,,,,,,,, +THEME_DATA_PANEL_CONFIG_COLOR_5_START,THEME_DATA_PANEL_BASE,13,4313,ThemeConstantsType::COLOR,Color(0xFF7B79F7),TRUE,,,,,,,,, +THEME_DATA_PANEL_CONFIG_COLOR_6_START,THEME_DATA_PANEL_BASE,14,4314,ThemeConstantsType::COLOR,Color(0xFF4B8AF3),TRUE,,,,,,,,, +THEME_DATA_PANEL_CONFIG_COLOR_7_START,THEME_DATA_PANEL_BASE,15,4315,ThemeConstantsType::COLOR,Color(0xFF73C1E6),TRUE,,,,,,,,, +THEME_DATA_PANEL_CONFIG_COLOR_8_START,THEME_DATA_PANEL_BASE,16,4316,ThemeConstantsType::COLOR,Color(0xFFA5D61D),TRUE,,,,,,,,, +THEME_DATA_PANEL_CONFIG_COLOR_9_START,THEME_DATA_PANEL_BASE,17,4317,ThemeConstantsType::COLOR,Color(0xFFA2A2B0),TRUE,,,,,,,,, +THEME_DATA_PANEL_CONFIG_COLOR_1_END,THEME_DATA_PANEL_BASE,18,4318,ThemeConstantsType::COLOR,Color(0xFFF99B11),TRUE,,,,,,,,, +THEME_DATA_PANEL_CONFIG_COLOR_2_END,THEME_DATA_PANEL_BASE,19,4319,ThemeConstantsType::COLOR,Color(0xFFF2400A),TRUE,,,,,,,,, +THEME_DATA_PANEL_CONFIG_COLOR_3_END,THEME_DATA_PANEL_BASE,20,4320,ThemeConstantsType::COLOR,Color(0xFFE65392),TRUE,,,,,,,,, +THEME_DATA_PANEL_CONFIG_COLOR_4_END,THEME_DATA_PANEL_BASE,21,4321,ThemeConstantsType::COLOR,Color(0xFFA12DF7),TRUE,,,,,,,,, +THEME_DATA_PANEL_CONFIG_COLOR_5_END,THEME_DATA_PANEL_BASE,22,4322,ThemeConstantsType::COLOR,Color(0xFF4B48F7),TRUE,,,,,,,,, +THEME_DATA_PANEL_CONFIG_COLOR_6_END,THEME_DATA_PANEL_BASE,23,4323,ThemeConstantsType::COLOR,Color(0xFF007DFF),TRUE,,,,,,,,, +THEME_DATA_PANEL_CONFIG_COLOR_7_END,THEME_DATA_PANEL_BASE,24,4324,ThemeConstantsType::COLOR,Color(0xFF4FB4E3),TRUE,,,,,,,,, +THEME_DATA_PANEL_CONFIG_COLOR_8_END,THEME_DATA_PANEL_BASE,25,4325,ThemeConstantsType::COLOR,Color(0xFF69D14F),TRUE,,,,,,,,, +THEME_DATA_PANEL_CONFIG_COLOR_9_END,THEME_DATA_PANEL_BASE,26,4326,ThemeConstantsType::COLOR,Color(0xFF8E8E93),TRUE,,,,,,,,, +THEME_BADGE_BASE,THEME_KEY_BASE,4400,4400,,,,,,,,,,,, +THEME_BADGE_COLOR,THEME_BADGE_BASE,1,4401,ThemeConstantsType::REFERENCE,THEME_OHOS_BADGE_RED,TRUE,,,,,,,,, +THEME_BADGE_MESSAGECOUNT,THEME_BADGE_BASE,2,4402,ThemeConstantsType::INT,0,TRUE,,,,,,,,, +THEME_BADGE_POSITION,THEME_BADGE_BASE,3,4403,ThemeConstantsType::INT,static_cast(BadgePosition::RIGHT_TOP),TRUE,,,,,,,,, +THEME_BADGE_SHOWMESSAGE,THEME_BADGE_BASE,4,4404,ThemeConstantsType::INT,static_cast(false),TRUE,,,,,,,,, +THEME_BADGE_TEXT_COLOR,THEME_BADGE_BASE,5,4405,ThemeConstantsType::REFERENCE,THEME_OHOS_TEXT_PRIMARY_INVERSE,TRUE,,,,,,,,, +THEME_BADGE_TEXT_FONT_SIZE,THEME_BADGE_BASE,6,4406,ThemeConstantsType::REFERENCE,THEME_OHOS_TEXT_SIZE_CAPTION,TRUE,,,,,,,,, +THEME_TOOLBAR_BASE,THEME_KEY_BASE,4500,4500,,,,,,,,,,,, +THEME_TOOL_BAR_TEXT_FONTSIZE,THEME_TOOLBAR_BASE,1,4501,ThemeConstantsType::DIMENSION,"Dimension(10.0, DimensionUnit::FP)",,,,,,,,,, +THEME_TOOL_BAR_TEXT_COLOR,THEME_TOOLBAR_BASE,2,4502,ThemeConstantsType::COLOR,Color(0xE5000000),TRUE,,,,,,,,, +THEME_TOOL_BAR_ITEM_ICON_WIDTH,THEME_TOOLBAR_BASE,3,4503,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",,,,,,,,,, +THEME_TOOL_BAR_ITEM_ICON_HEIGHT,THEME_TOOLBAR_BASE,4,4504,ThemeConstantsType::DIMENSION,"Dimension(24.0, DimensionUnit::VP)",,,,,,,,,, +THEME_TOOL_BAR_ITEM_PADDING_ICON_LEFT,THEME_TOOLBAR_BASE,5,4505,ThemeConstantsType::DIMENSION,"Dimension(1.0, DimensionUnit::VP)",,,,,,,,,, +THEME_TOOL_BAR_ITEM_PADDING_ICON_TOP,THEME_TOOLBAR_BASE,6,4506,ThemeConstantsType::DIMENSION,"Dimension(8.0, DimensionUnit::VP)",,,,,,,,,, +THEME_TOOL_BAR_ITEM_PADDING_ICON_RIGHT,THEME_TOOLBAR_BASE,7,4507,ThemeConstantsType::DIMENSION,"Dimension(1.0, DimensionUnit::VP)",,,,,,,,,, +THEME_TOOL_BAR_ITEM_PADDING_ICON_BOTTOM,THEME_TOOLBAR_BASE,8,4508,ThemeConstantsType::DIMENSION,"Dimension(1.0, DimensionUnit::VP)",,,,,,,,,, +THEME_TOOL_BAR_ITEM_PADDING_TEXT_LEFT,THEME_TOOLBAR_BASE,9,4509,ThemeConstantsType::DIMENSION,"Dimension(1.0, DimensionUnit::VP)",,,,,,,,,, +THEME_TOOL_BAR_ITEM_PADDING_TEXT_TOP,THEME_TOOLBAR_BASE,10,4510,ThemeConstantsType::DIMENSION,"Dimension(1.0, DimensionUnit::VP)",,,,,,,,,, +THEME_TOOL_BAR_ITEM_PADDING_TEXT_RIGHT,THEME_TOOLBAR_BASE,11,4511,ThemeConstantsType::DIMENSION,"Dimension(1.0, DimensionUnit::VP)",,,,,,,,,, +THEME_TOOL_BAR_ITEM_PADDING_TEXT_BOTTOM,THEME_TOOLBAR_BASE,12,4512,ThemeConstantsType::DIMENSION,"Dimension(8.0, DimensionUnit::VP)",,,,,,,,,, +THEME_TOOL_BAR_BG_COLOR,THEME_TOOLBAR_BASE,13,4513,ThemeConstantsType::COLOR,Color(0xFFFFFFFF),TRUE,,,,,,,,, +THEME_TOOL_BAR_ITEM_FOCUS_COLOR,THEME_TOOLBAR_BASE,14,4514,ThemeConstantsType::COLOR,Color(0xe6254FF7),TRUE,,,,,,,,, +THEME_TOOL_BAR_ITEM_BACKGROUND_COLOR,THEME_TOOLBAR_BASE,15,4515,ThemeConstantsType::COLOR,Color(0x19F1F3F5),TRUE,,,,,,,,, +THEME_TOOL_BAR_ITEM_HOVER_COLOR,THEME_TOOLBAR_BASE,16,4516,ThemeConstantsType::COLOR,Color(0x0C000000),TRUE,,,,,,,,, +THEME_TOOL_BAR_ITEM_PRESS_COLOR,THEME_TOOLBAR_BASE,17,4517,ThemeConstantsType::COLOR,Color(0x19000000),TRUE,,,,,,,,, +THEME_TOOL_BAR_TEXT_MIN_FONTSIZE,THEME_TOOLBAR_BASE,18,4518,ThemeConstantsType::DIMENSION,"Dimension(9.0, DimensionUnit::FP)",,,,,,,,,, +THEME_TOOL_BAR_ITEM_RADIUS,THEME_TOOLBAR_BASE,19,4519,ThemeConstantsType::DIMENSION,"Dimension(8.0, DimensionUnit::VP)",,,,,,,,,, +THEME_TOOL_BAR_ENDITEM_COLOR,THEME_TOOLBAR_BASE,20,4520,ThemeConstantsType::COLOR,Color(0xff000000),TRUE,,,,,,,,, +THEME_CARD_BASE,THEME_KEY_BASE,4600,4600,,,,,,,,,,,, +THEME_CARD_BORDER_RADIUS,THEME_CARD_BASE,1,4601,ThemeConstantsType::DIMENSION,"Dimension(16.0, DimensionUnit::VP)",TRUE,,,,,,,,, +THEME_CARD_BACKGROUND_COLOR,THEME_CARD_BASE,2,4602,ThemeConstantsType::COLOR,Color(0xff202224),TRUE,,,,,,,,, +THEME_CARD_BLUR_RADIUS,THEME_CARD_BASE,3,4603,ThemeConstantsType::DIMENSION,"Dimension(10.0, DimensionUnit::PX)",TRUE,,,,,,,,, +THEME_QRCODE_BASE,THEME_KEY_BASE,4700,4700,,,,,,,,,,,, +THEME_QRCODE_BACKGROUND_COLOR,THEME_QRCODE_BASE,1,4701,ThemeConstantsType::COLOR,Color(0xffffffff),TRUE,,,,,,,,, +THEME_QRCODE_COLOR,THEME_QRCODE_BASE,2,4702,ThemeConstantsType::COLOR,Color(0xff000000),TRUE,,,,,,,,, +THEME_QRCODE_TYPE,THEME_QRCODE_BASE,3,4703,ThemeConstantsType::INT,static_cast(QrcodeType::RECT),TRUE,,,,,,,,, +THEME_QRCODE_SIZE,THEME_QRCODE_BASE,4,4704,ThemeConstantsType::DIMENSION,"Dimension(200.0, DimensionUnit::PX)",TRUE,,,,,,,,, +THEME_CAMERA_BASE,THEME_KEY_BASE,4800,4800,,,,,,,,,,,, +THEME_CAMERA_BUFFER_WIDTH,THEME_CAMERA_BASE,1,4801,ThemeConstantsType::DIMENSION,"Dimension(1080.0, DimensionUnit::PX)",TRUE,,,,,,,,, +THEME_CAMERA_BUFFER_HEIGHT,THEME_CAMERA_BASE,2,4802,ThemeConstantsType::DIMENSION,"Dimension(1920.0, DimensionUnit::PX)",TRUE,,,,,,,,, diff --git a/frameworks/core/components/theme/theme.h b/frameworks/core/components/theme/theme.h new file mode 100644 index 00000000..91413107 --- /dev/null +++ b/frameworks/core/components/theme/theme.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_THEME_THEME_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_THEME_THEME_H + +#include "base/memory/ace_type.h" + +namespace OHOS::Ace { + +using ThemeType = AceType::IdType; + +class Theme : public virtual AceType { + DECLARE_ACE_TYPE(Theme, AceType); + +public: + Theme() = default; + ~Theme() override = default; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_THEME_THEME_H diff --git a/frameworks/core/components/theme/theme_attributes.cpp b/frameworks/core/components/theme/theme_attributes.cpp new file mode 100644 index 00000000..6c9449a6 --- /dev/null +++ b/frameworks/core/components/theme/theme_attributes.cpp @@ -0,0 +1,187 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/theme/theme_attributes.h" + +namespace OHOS::Ace { + +// theme attributes +const char THEME_ATTR_BG_COLOR[] = "attribute_color_background"; +const char THEME_ATTR_COLOR_ACCENT[] = "attribute_color_emphasize"; +const char THEME_ATTR_COLOR_APPBAR_TITLE[] = "attribute_color_titlebar_text"; +const char THEME_ATTR_COLOR_APPBAR_SUBTITLE[] = "attribute_color_titlebar_subtitle_text"; +const char THEME_ATTR_COLOR_APPBAR_ICON[] = "attribute_color_titlebar_icon"; +const char THEME_ATTR_COLOR_BADGE_RED[] = "attribute_color_badge_red"; +const char THEME_ATTR_COLOR_CLICK_EFFECT[] = "attribute_color_click_effect"; +const char THEME_ATTR_COLOR_FOCUSED[] = "attribute_color_focused_outline"; +const char THEME_ATTR_COLOR_HOVER[] = "attribute_color_hover"; +const char THEME_ATTR_COLOR_SUBTAB_LINE_ON[] = "attribute_color_subtab_line_on"; +const char THEME_ATTR_COLOR_TAB_BACKGROUND[] = "attribute_color_subtab_bg"; +const char THEME_ATTR_COLOR_PRIMARY[] = "attribute_color_primary"; +const char THEME_ATTR_COLOR_TOAST_BG[] = "attribute_color_instant_tip_bg"; +const char THEME_ATTR_CLICK_CORNER_RADIUS[] = "attribute_corner_radius_clicked"; +const char THEME_ATTR_DEFAULT_PADDING_START[] = "attribute_default_padding_top"; +const char THEME_ATTR_DEFAULT_PADDING_END[] = "attribute_default_padding_end"; +const char THEME_ATTR_SUBHEADER_DIVIDER[] = "attribute_color_subheading_separator"; +const char THEME_ATTR_TEXT_COLOR_PRIMARY[] = "attribute_color_text_primary"; +const char THEME_ATTR_TEXT_COLOR_PRIMARY_INVERSE[] = "attribute_color_text_primary_contrary"; +const char THEME_ATTR_TEXT_COLOR_SECONDARY[] = "attribute_color_text_secondary"; +const char THEME_ATTR_TEXT_SIZE_BODY2[] = "attribute_text_size_body2"; +const char THEME_ATTR_TEXT_SIZE_CAPTION[] = "attribute_text_size_caption"; +const char THEME_ATTR_TEXT_SIZE_HEADLINE6[] = "attribute_text_size_headline6"; +const char THEME_ATTR_TEXT_SIZE_HEADLINE7[] = "attribute_text_size_headline7"; +const char THEME_ATTR_TEXT_SIZE_OVERLINE[] = "attribute_text_size_over_line"; +const char THEME_ATTR_FOURTH_CONTENT_ALPHA[] = "attribute_alpha_content_fourth"; +const char THEME_ATTR_HIGHLIGHT_BACKGROUND_ALPHA[] = "attribute_alpha_highlight_bg"; +const char THEME_ATTR_DISABLED_ALPHA[] = "attribute_alpha_disabled"; +const char THEME_ATTR_TOOLBAR_ICON_COLOR[] = "attribute_color_toolbar_icon"; +const char THEME_ATTR_TOOLBAR_TEXT_COLOR[] = "attribute_color_toolbar_text"; +const char THEME_ATTR_TOOLBAR_BG_COLOR[] = "attribute_color_toolbar_bg"; +const char THEME_ATTR_TOOLBAR_SUB_BG_COLOR[] = "attribute_color_toolbar_sub_bg"; +const char THEME_ATTR_TEXT_SIZE_BUTTON1[] = "attribute_text_size_button1"; +const char THEME_ATTR_COLOR_PROGRESS[] = "attribute_color_progress"; +const char THEME_ATTR_COLOR_COMPONENT_NORMAL[] = "attribute_color_component_normal"; +const char THEME_ATTR_COLOR_EMPHASIZE[] = "attribute_color_emphasize"; +const char THEME_ATTR_COLOR_DIALOG_BG[] = "attribute_color_dialog_bg"; +const char THEME_ATTR_COLOR_FOREGROUND[] = "attribute_color_foreground"; +const char THEME_ATTR_COLOR_TIPS_BG[] = "attribute_color_help_tip_bg"; +const char THEME_ATTR_COLOR_LIST_DIVIDER[] = "attribute_color_list_separator"; +const char THEME_ATTR_TEXT_COLOR_HIGHLIGHT[] = "attribute_color_text_highlight_bg"; +const char THEME_ATTRPALETTE_COLOR11[] = "attribute_color_palette11"; +const char THEME_ATTR_COLOR_SPINNER_ICON[] = "attribute_color_spinner_icon"; +const char THEME_ATTR_COLOR_CONTROL_ACTIVE[] = "attr_color_control_actived"; +const char THEME_ATTR_COLOR_TEXT_PRIMARY_ACTIVATED[] = "attribute_color_text_primary_activated"; +const char THEME_ATTR_COLOR_TERTIARY[] = "attribute_color_tertiary"; +const char THEME_ATTR_COLOR_FOURTH[] = "attribute_color_fourth"; + +// component patterns +const char THEME_PATTERN_BUTTON[] = "button_pattern"; +const char THEME_PATTERN_CHECKBOX[] = "checkbox_pattern"; +const char THEME_PATTERN_DATA_PANEL[] = "data_panel_pattern"; +const char THEME_PATTERN_RADIO[] = "radio_pattern"; +const char THEME_PATTERN_SWIPER[] = "swiper_pattern"; +const char THEME_PATTERN_SWITCH[] = "switch_pattern"; +const char THEME_PATTERN_TOOLBAR[] = "toolbar_pattern"; +const char THEME_PATTERN_TOGGLE[] = "toggle_pattern"; + +// pattern general attributes +const char PATTERN_BG_COLOR[] = "background_color"; +const char PATTERN_TEXT_SIZE[] = "text_size"; +const char PATTERN_WIDTH[] = "width"; +const char PATTERN_HEIGHT[] = "height"; + +// pattern attributes for piece +const char PIECE_TEXT_COLOR[] = "attribute_color_text_primary"; +const char PIECE_TEXT_FONT_SIZE[] = "attribute_text_size_button2"; +const char PIECE_BACKGROUND_COLOR[] = "attribute_color_foreground"; +const char PIECE_BACKGROUND_COLOR_ALPHA[] = "attribute_alpha_inapptip_bg"; +const char PIECE_HOVER_COLOR[] = "attribute_color_hover"; + +// pattern attributes for popup +const char POPUP_BACKGROUND_COLOR[] = "attribute_color_help_tip_bg"; + +// pattern attributes for search +const char SEARCH_PLACEHOLDER_COLOR[] = "attribute_color_text_hint"; +const char SEARCH_TEXT_COLOR[] = "attribute_color_text_primary"; +const char SEARCH_TEXT_FONT_SIZE[] = "attribute_text_size_body1"; + +// pattern attributes for textfield +const char TEXTFIELD_BACKGROUND_COLOR[] = "attribute_color_text_field_sub_bg"; +const char TEXTFIELD_FONT_SIZE[] = "attribute_text_size_body1"; +const char TEXTFIELD_HINT_TEXT_COLOR[] = "attribute_color_text_hint"; +const char TEXTFIELD_TEXT_COLOR[] = "attribute_color_text_primary"; +const char TEXTFIELD_TEXT_COLOR_DISABLE[] = "attribute_color_text_tertiary"; +const char TEXTFIELD_ERROR_COLOR[] = "attribute_color_alert"; +const char TEXTFIELD_ERROR_TEXT_FONT_SIZE[] = "attribute_text_size_body3"; +const char TEXTFIELD_COUNT_TEXT_COLOR[] = "attribute_color_text_tertiary"; +const char TEXTFIELD_COUNT_TEXT_FONT_SIZE[] = "attribute_text_size_caption"; +const char TEXTFIELD_COUNT_TEXT_FONT_SIZE_OUTER[] = "attribute_text_size_body3"; +const char TEXTFIELD_CURSOR_COLOR[] = "attribute_color_text_primary_activated"; +const char TEXTFIELD_HOVER_COLOR[] = "attribute_color_hover"; +const char TEXTFIELD_PRESS_COLOR[] = "attribute_color_click_effect"; +const char TEXTFIELD_SELECTED_COLOR[] = "attribute_color_text_highlight_bg"; + +// pattern attributes for button +const char BUTTON_CLICK_BLEND_COLOR[] = "click_mask_color"; +const char BUTTON_HOVER_COLOR[] = "attribute_color_hover"; +const char BUTTON_TEXT_COLOR[] = "emphasize_button_text_color"; +const char BUTTON_NORMAL_TEXT_COLOR[] = "text_button_text_color"; +const char BUTTON_DOWNLOAD_BG_COLOR[] = "attribute_color_background"; +const char BUTTON_DOWNLOAD_TEXT_COLOR[] = "download_button_text_color"; +const char BUTTON_DOWNLOAD_BORDER_COLOR[] = "download_button_border_color"; +const char BUTTON_BORDER_COLOR[] = "border_color"; +const char BUTTON_BORDER_WIDTH[] = "border_width"; + +// pattern attributes for toolbar +const char TOOLBAR_ICON_MORE_COLOR[] = "toolbar_icon_more_color"; + +// pattern attributes for checkable +const char HOVER_EFFECT_COLOR[] = "hover_effect_color"; +const char HOVER_EFFECT_RADIUS[] = "hover_effect_radius"; +const char BORDER_RADIUS[] = "border_radius"; +const char FG_COLOR_CHECKED[] = "fg_color_checked"; +const char BG_COLOR_CHECKED[] = "bg_color_checked"; +const char FG_COLOR_UNCHECKED[] = "fg_color_unchecked"; +const char BG_COLOR_UNCHECKED[] = "bg_color_unchecked"; + +// pattern attributes for swiper +const char INDICATOR_MASK_COLOR[] = "indicator_mask_color"; +const char INDICATOR_COLOR_SELECTED[] = "indicator_color_selected"; +const char INDICATOR_COLOR_UNSELECTED[] = "indicator_color_unselected"; +const char INDICATOR_TEXT_COLOR[] = "indicator_text_color"; +const char INDICATOR_TEXT_COLOR_FOCUS[] = "indicator_text_color_focus"; + +// data panel attributes +const char DATA_PANEL_COLOR_1_START[] = "rainbow_fg_color_1_start"; +const char DATA_PANEL_COLOR_2_START[] = "rainbow_fg_color_2_start"; +const char DATA_PANEL_COLOR_3_START[] = "rainbow_fg_color_3_start"; +const char DATA_PANEL_COLOR_4_START[] = "rainbow_fg_color_4_start"; +const char DATA_PANEL_COLOR_5_START[] = "rainbow_fg_color_5_start"; +const char DATA_PANEL_COLOR_6_START[] = "rainbow_fg_color_6_start"; +const char DATA_PANEL_COLOR_7_START[] = "rainbow_fg_color_7_start"; +const char DATA_PANEL_COLOR_8_START[] = "rainbow_fg_color_8_start"; +const char DATA_PANEL_COLOR_9_START[] = "rainbow_fg_color_9_start"; +const char DATA_PANEL_COLOR_1_END[] = "rainbow_fg_color_1_end"; +const char DATA_PANEL_COLOR_2_END[] = "rainbow_fg_color_2_end"; +const char DATA_PANEL_COLOR_3_END[] = "rainbow_fg_color_3_end"; +const char DATA_PANEL_COLOR_4_END[] = "rainbow_fg_color_4_end"; +const char DATA_PANEL_COLOR_5_END[] = "rainbow_fg_color_5_end"; +const char DATA_PANEL_COLOR_6_END[] = "rainbow_fg_color_6_end"; +const char DATA_PANEL_COLOR_7_END[] = "rainbow_fg_color_7_end"; +const char DATA_PANEL_COLOR_8_END[] = "rainbow_fg_color_8_end"; +const char DATA_PANEL_COLOR_9_END[] = "rainbow_fg_color_9_end"; +const char DATA_PANEL_LOADING_COLOR_START[] = "loading_fg_color_start"; +const char DATA_PANEL_LOADING_COLOR_END[] = "loading_fg_color_end"; +const char DATA_PANEL_PROGRESS_COLOR_START[] = "progress_fg_color_start"; +const char DATA_PANEL_PROGRESS_COLOR_END[] = "progress_fg_color_end"; +const char DATA_PANEL_TRACK_COLOR[] = "track_bg_color"; + +// pattern attributes for text overlay +const char TEXT_OVERLAY_HANDLE_COLOR[] = "attribute_color_emphasize"; +const char TEXT_OVERLAY_HANDLE_COLOR_INNER[] = "attribute_color_dialog_bg"; +const char TEXT_OVERLAY_TOOL_BAR_FONT_SIZE[] = "attribute_text_size_button2"; +const char TEXT_OVERLAY_TOOL_BAR_TEXT_COLOR[] = "attribute_color_text_primary"; +const char TEXT_OVERLAY_TOOL_BAR_ICON_COLOR[] = "attribute_color_primary"; +const char TEXT_OVERLAY_TOOL_BAR_BACKGROUND_COLOR[] = "attribute_color_dialog_bg"; +const char TEXT_OVERLAY_TOOL_BAR_BUTTON_HOVER_COLOR[] = "attribute_color_hover"; +const char TEXT_OVERLAY_TOOL_BAR_BUTTON_PRESS_COLOR[] = "attribute_color_click_effect"; +const char TEXT_OVERLAY_MENU_ICON_COLOR[] = "attribute_color_secondary"; + +// pattern attributes for toggle +const char TOGGLE_BACKGROUND_COLOR[] = "attribute_color_button_normal"; +const char TOGGLE_CHECKED_COLOR[] = "toggle_checked_color"; +const char TOGGLE_TEXT_COLOR[] = "toggle_text_color"; + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/theme/theme_attributes.h b/frameworks/core/components/theme/theme_attributes.h new file mode 100644 index 00000000..61895401 --- /dev/null +++ b/frameworks/core/components/theme/theme_attributes.h @@ -0,0 +1,188 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_THEME_THEME_ATTRIBUTES_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_THEME_THEME_ATTRIBUTES_H + +namespace OHOS::Ace { + +// theme attributes +extern const char THEME_ATTR_BG_COLOR[]; +extern const char THEME_ATTR_CLICK_CORNER_RADIUS[]; +extern const char THEME_ATTR_COLOR_ACCENT[]; +extern const char THEME_ATTR_COLOR_APPBAR_TITLE[]; +extern const char THEME_ATTR_COLOR_APPBAR_SUBTITLE[]; +extern const char THEME_ATTR_COLOR_APPBAR_ICON[]; +extern const char THEME_ATTR_COLOR_BADGE_RED[]; +extern const char THEME_ATTR_COLOR_CLICK_EFFECT[]; +extern const char THEME_ATTR_COLOR_FOCUSED[]; +extern const char THEME_ATTR_COLOR_HOVER[]; +extern const char THEME_ATTR_COLOR_TOAST_BG[]; +extern const char THEME_ATTR_COLOR_TAB_BACKGROUND[]; +extern const char THEME_ATTR_COLOR_SUBTAB_LINE_ON[]; +extern const char THEME_ATTR_COLOR_PRIMARY[]; +extern const char THEME_ATTR_COLOR_PROGRESS[]; +extern const char THEME_ATTR_DEFAULT_PADDING_START[]; +extern const char THEME_ATTR_DEFAULT_PADDING_END[]; +extern const char THEME_ATTR_SUBHEADER_DIVIDER[]; +extern const char THEME_ATTR_TEXT_COLOR_PRIMARY[]; +extern const char THEME_ATTR_TEXT_COLOR_PRIMARY_INVERSE[]; +extern const char THEME_ATTR_TEXT_COLOR_SECONDARY[]; +extern const char THEME_ATTR_TEXT_SIZE_BODY2[]; +extern const char THEME_ATTR_TEXT_SIZE_BUTTON1[]; +extern const char THEME_ATTR_TEXT_SIZE_CAPTION[]; +extern const char THEME_ATTR_TEXT_SIZE_HEADLINE6[]; +extern const char THEME_ATTR_TEXT_SIZE_HEADLINE7[]; +extern const char THEME_ATTR_TEXT_SIZE_OVERLINE[]; +extern const char THEME_ATTR_DISABLED_ALPHA[]; +extern const char THEME_ATTR_FOURTH_CONTENT_ALPHA[]; +extern const char THEME_ATTR_HIGHLIGHT_BACKGROUND_ALPHA[]; +extern const char THEME_ATTR_TOOLBAR_ICON_COLOR[]; +extern const char THEME_ATTR_TOOLBAR_TEXT_COLOR[]; +extern const char THEME_ATTR_TOOLBAR_BG_COLOR[]; +extern const char THEME_ATTR_TOOLBAR_SUB_BG_COLOR[]; +extern const char THEME_ATTR_COLOR_COMPONENT_NORMAL[]; +extern const char THEME_ATTR_COLOR_EMPHASIZE[]; +extern const char THEME_ATTR_COLOR_DIALOG_BG[]; +extern const char THEME_ATTR_COLOR_FOREGROUND[]; +extern const char THEME_ATTR_COLOR_TIPS_BG[]; +extern const char THEME_ATTR_COLOR_LIST_DIVIDER[]; +extern const char THEME_ATTR_TEXT_COLOR_HIGHLIGHT[]; +extern const char THEME_ATTRPALETTE_COLOR11[]; +extern const char THEME_ATTR_COLOR_SPINNER_ICON[]; +extern const char THEME_ATTR_COLOR_CONTROL_ACTIVE[]; +extern const char THEME_ATTR_COLOR_TEXT_PRIMARY_ACTIVATED[]; +extern const char THEME_ATTR_COLOR_TERTIARY[]; +extern const char THEME_ATTR_COLOR_FOURTH[]; +// component patterns +extern const char THEME_PATTERN_BUTTON[]; +extern const char THEME_PATTERN_CHECKBOX[]; +extern const char THEME_PATTERN_DATA_PANEL[]; +extern const char THEME_PATTERN_RADIO[]; +extern const char THEME_PATTERN_SWIPER[]; +extern const char THEME_PATTERN_SWITCH[]; +extern const char THEME_PATTERN_TOOLBAR[]; +extern const char THEME_PATTERN_TOGGLE[]; + +// pattern general attributes +extern const char PATTERN_BG_COLOR[]; +extern const char PATTERN_TEXT_SIZE[]; +extern const char PATTERN_WIDTH[]; +extern const char PATTERN_HEIGHT[]; + +// pattern attributes for piece +extern const char PIECE_TEXT_COLOR[]; +extern const char PIECE_TEXT_FONT_SIZE[]; +extern const char PIECE_BACKGROUND_COLOR[]; +extern const char PIECE_BACKGROUND_COLOR_ALPHA[]; +extern const char PIECE_HOVER_COLOR[]; + +// pattern attributes for popup +extern const char POPUP_BACKGROUND_COLOR[]; + +// pattern attributes for search +extern const char SEARCH_PLACEHOLDER_COLOR[]; +extern const char SEARCH_TEXT_COLOR[]; +extern const char SEARCH_TEXT_FONT_SIZE[]; + +// pattern attributes for textfield +extern const char TEXTFIELD_BACKGROUND_COLOR[]; +extern const char TEXTFIELD_FONT_SIZE[]; +extern const char TEXTFIELD_HINT_TEXT_COLOR[]; +extern const char TEXTFIELD_TEXT_COLOR[]; +extern const char TEXTFIELD_TEXT_COLOR_DISABLE[]; +extern const char TEXTFIELD_ERROR_COLOR[]; +extern const char TEXTFIELD_ERROR_TEXT_FONT_SIZE[]; +extern const char TEXTFIELD_COUNT_TEXT_COLOR[]; +extern const char TEXTFIELD_COUNT_TEXT_FONT_SIZE[]; +extern const char TEXTFIELD_COUNT_TEXT_FONT_SIZE_OUTER[]; +extern const char TEXTFIELD_CURSOR_COLOR[]; +extern const char TEXTFIELD_HOVER_COLOR[]; +extern const char TEXTFIELD_PRESS_COLOR[]; +extern const char TEXTFIELD_SELECTED_COLOR[]; + +// pattern attributes for button +extern const char BUTTON_CLICK_BLEND_COLOR[]; +extern const char BUTTON_HOVER_COLOR[]; +extern const char BUTTON_TEXT_COLOR[]; +extern const char BUTTON_NORMAL_TEXT_COLOR[]; +extern const char BUTTON_DOWNLOAD_BG_COLOR[]; +extern const char BUTTON_DOWNLOAD_TEXT_COLOR[]; +extern const char BUTTON_DOWNLOAD_BORDER_COLOR[]; +extern const char BUTTON_BORDER_COLOR[]; +extern const char BUTTON_BORDER_WIDTH[]; + +// pattern attributes for toolbar +extern const char TOOLBAR_ICON_MORE_COLOR[]; + +// pattern attributes for checkable +extern const char HOVER_EFFECT_COLOR[]; +extern const char HOVER_EFFECT_RADIUS[]; +extern const char BORDER_RADIUS[]; +extern const char FG_COLOR_CHECKED[]; +extern const char BG_COLOR_CHECKED[]; +extern const char FG_COLOR_UNCHECKED[]; +extern const char BG_COLOR_UNCHECKED[]; + +// pattern attributes for swiper +extern const char INDICATOR_MASK_COLOR[]; +extern const char INDICATOR_COLOR_SELECTED[]; +extern const char INDICATOR_COLOR_UNSELECTED[]; +extern const char INDICATOR_TEXT_COLOR[]; +extern const char INDICATOR_TEXT_COLOR_FOCUS[]; + +// pattern attributes for data panel +extern const char DATA_PANEL_COLOR_1_START[]; +extern const char DATA_PANEL_COLOR_2_START[]; +extern const char DATA_PANEL_COLOR_3_START[]; +extern const char DATA_PANEL_COLOR_4_START[]; +extern const char DATA_PANEL_COLOR_5_START[]; +extern const char DATA_PANEL_COLOR_6_START[]; +extern const char DATA_PANEL_COLOR_7_START[]; +extern const char DATA_PANEL_COLOR_8_START[]; +extern const char DATA_PANEL_COLOR_9_START[]; +extern const char DATA_PANEL_COLOR_1_END[]; +extern const char DATA_PANEL_COLOR_2_END[]; +extern const char DATA_PANEL_COLOR_3_END[]; +extern const char DATA_PANEL_COLOR_4_END[]; +extern const char DATA_PANEL_COLOR_5_END[]; +extern const char DATA_PANEL_COLOR_6_END[]; +extern const char DATA_PANEL_COLOR_7_END[]; +extern const char DATA_PANEL_COLOR_8_END[]; +extern const char DATA_PANEL_COLOR_9_END[]; +extern const char DATA_PANEL_LOADING_COLOR_START[]; +extern const char DATA_PANEL_LOADING_COLOR_END[]; +extern const char DATA_PANEL_PROGRESS_COLOR_START[]; +extern const char DATA_PANEL_PROGRESS_COLOR_END[]; +extern const char DATA_PANEL_TRACK_COLOR[]; + +// pattern attributes for text overlay +extern const char TEXT_OVERLAY_HANDLE_COLOR[]; +extern const char TEXT_OVERLAY_HANDLE_COLOR_INNER[]; +extern const char TEXT_OVERLAY_TOOL_BAR_FONT_SIZE[]; +extern const char TEXT_OVERLAY_TOOL_BAR_TEXT_COLOR[]; +extern const char TEXT_OVERLAY_TOOL_BAR_ICON_COLOR[]; +extern const char TEXT_OVERLAY_TOOL_BAR_BACKGROUND_COLOR[]; +extern const char TEXT_OVERLAY_TOOL_BAR_BUTTON_HOVER_COLOR[]; +extern const char TEXT_OVERLAY_TOOL_BAR_BUTTON_PRESS_COLOR[]; +extern const char TEXT_OVERLAY_MENU_ICON_COLOR[]; + +// pattern attributes for toggle +extern const char TOGGLE_BACKGROUND_COLOR[]; +extern const char TOGGLE_CHECKED_COLOR[]; +extern const char TOGGLE_TEXT_COLOR[]; + +} // namespace OHOS::Ace +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_THEME_THEME_ATTRIBUTES_H diff --git a/frameworks/core/components/theme/theme_constants.cpp b/frameworks/core/components/theme/theme_constants.cpp new file mode 100644 index 00000000..22a87ce2 --- /dev/null +++ b/frameworks/core/components/theme/theme_constants.cpp @@ -0,0 +1,366 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/theme/theme_constants.h" + +#include + +#include "base/json/json_util.h" +#include "base/utils/device_type.h" +#include "base/utils/string_utils.h" +#include "base/utils/system_properties.h" +#include "core/components/theme/theme_utils.h" + +namespace OHOS::Ace { +namespace { + +const ResValueWrapper ERROR_VALUE = { .type = ThemeConstantsType::ERROR }; +// Don't use Color::BLACK in case Color haven't been initialized. +const Color ERROR_VALUE_COLOR = Color(0xff000000); +constexpr Dimension ERROR_VALUE_DIMENSION = 0.0_vp; +constexpr int32_t ERROR_VALUE_INT = 0; +constexpr double ERROR_VALUE_DOUBLE = 0.0; +constexpr double BLEND_ALPHA_MAX = 1.0; +constexpr InternalResource::ResourceId ERROR_VALUE_RESOURCE_ID = InternalResource::ResourceId::NO_ID; +const char STYLE_FILE_PATH[] = "resources/styles/default.json"; +const char PHONE_STYLE_FILE_PATH[] = "resources/styles/phone.json"; +const char WEARABLE_STYLE_FILE_PATH[] = "resources/styles/wearable.json"; +const char TV_STYLE_FILE_PATH[] = "resources/styles/tv.json"; +const char CUSTOM_STYLE_ROOT_NAME[] = "style"; +const Color TRANSPARENT_BG_COLOR = Color::FromRGBO(0, 0, 0, 0.2); +// Same with global resource define. +constexpr uint32_t SYSTEM_RES_ID_START = 0x7000000; +constexpr uint32_t SYSTEM_RES_ID_END = 0x7ffffff; + +DeviceType g_deviceType = DeviceType::PHONE; + +// Check whether value is match with expected type +bool ValueTypeMatch(const ResValueWrapper& valueWrapper, uint32_t key, const ThemeConstantsType& expectType) +{ + if (valueWrapper.type == ThemeConstantsType::ERROR) { + LOGE("ThemeConstants value not found: %{public}u", key); + return false; + } + if (valueWrapper.type != expectType) { + LOGE("ThemeConstants value type error: %{public}u, expectType: %{public}u", key, expectType); + return false; + } + return true; +} + +bool IsSystemResource(uint32_t resId) +{ + return resId >= SYSTEM_RES_ID_START && resId <= SYSTEM_RES_ID_END; +} + +} // namespace + +void ThemeConstants::InitDeviceType() +{ + g_deviceType = SystemProperties::GetDeviceType(); + LOGD("InitDeviceType deviceType=%{public}d.", g_deviceType); +} + +const ResValueWrapper* ThemeConstants::GetPlatformConstants(uint32_t key) +{ +#ifdef WEARABLE_PRODUCT + if (g_deviceType == DeviceType::WATCH && key < ThemeConstants::WatchMapCount && + ThemeConstants::styleMapWatch[key] != nullptr) { + return ThemeConstants::styleMapWatch[key]; + } +#else + if (g_deviceType == DeviceType::TV && key < ThemeConstants::TvMapCount && + ThemeConstants::styleMapTv[key] != nullptr) { + return ThemeConstants::styleMapTv[key]; + } +#endif + if (key < ThemeConstants::DefaultMapCount) { + return ThemeConstants::styleMapDefault[key]; + } + return nullptr; +} + +Color ThemeConstants::GetColor(uint32_t key) const +{ + if (IsSystemResource(key)) { + if (!resAdapter_) { + return ERROR_VALUE_COLOR; + } + return resAdapter_->GetColor(key); + } + const auto& valueWrapper = GetValue(key); + if (!ValueTypeMatch(valueWrapper, key, ThemeConstantsType::COLOR)) { + return ERROR_VALUE_COLOR; + } + auto colorPair = valueWrapper.GetValue(ERROR_VALUE_COLOR); + if (!colorPair.first) { + LOGE("GetColor error: %{public}u, type: %{public}u", key, valueWrapper.type); + } + return colorPair.second; +} + +Dimension ThemeConstants::GetDimension(uint32_t key) const +{ + if (IsSystemResource(key)) { + if (!resAdapter_) { + return ERROR_VALUE_DIMENSION; + } + return resAdapter_->GetDimension(key); + } + const auto& valueWrapper = GetValue(key); + if (!ValueTypeMatch(valueWrapper, key, ThemeConstantsType::DIMENSION)) { + return ERROR_VALUE_DIMENSION; + } + auto dimensionPair = valueWrapper.GetValue(ERROR_VALUE_DIMENSION); + if (!dimensionPair.first) { + LOGE("GetDimension error: %{public}u, type: %{public}u", key, valueWrapper.type); + } + return dimensionPair.second; +} + +int32_t ThemeConstants::GetInt(uint32_t key) const +{ + if (IsSystemResource(key)) { + if (!resAdapter_) { + return ERROR_VALUE_INT; + } + return resAdapter_->GetInt(key); + } + const auto& valueWrapper = GetValue(key); + if (!ValueTypeMatch(valueWrapper, key, ThemeConstantsType::INT)) { + return ERROR_VALUE_INT; + } + auto intPair = valueWrapper.GetValue(ERROR_VALUE_INT); + if (!intPair.first) { + LOGE("GetInt error: %{public}u, type: %{public}u", key, valueWrapper.type); + } + return intPair.second; +} + +double ThemeConstants::GetDouble(uint32_t key) const +{ + if (IsSystemResource(key)) { + if (!resAdapter_) { + return ERROR_VALUE_DOUBLE; + } + return resAdapter_->GetDouble(key); + } + const auto& valueWrapper = GetValue(key); + if (!ValueTypeMatch(valueWrapper, key, ThemeConstantsType::DOUBLE)) { + return ERROR_VALUE_DOUBLE; + } + auto doublePair = valueWrapper.GetValue(ERROR_VALUE_DOUBLE); + if (!doublePair.first) { + LOGE("GetDouble error: %{public}u, type: %{public}u", key, valueWrapper.type); + } + return doublePair.second; +} + +std::string ThemeConstants::GetString(uint32_t key) const +{ + if (IsSystemResource(key)) { + if (!resAdapter_) { + return ""; + } + return resAdapter_->GetString(key); + } + const auto& valueWrapper = GetValue(key); + if (!ValueTypeMatch(valueWrapper, key, ThemeConstantsType::STRING)) { + return ""; + } + auto stringPair = valueWrapper.GetValue(""); + if (!stringPair.first) { + LOGE("GetString error: %{public}u, type: %{public}u", key, valueWrapper.type); + } + return stringPair.second; +} + +InternalResource::ResourceId ThemeConstants::GetResourceId(uint32_t key) const +{ + const auto& valueWrapper = GetValue(key); + if (!ValueTypeMatch(valueWrapper, key, ThemeConstantsType::RESOURCE_ID)) { + return ERROR_VALUE_RESOURCE_ID; + } + auto resPair = valueWrapper.GetValue(ERROR_VALUE_RESOURCE_ID); + if (!resPair.first) { + LOGE("GetResourceId error: %{public}u, type: %{public}u", key, valueWrapper.type); + } + return resPair.second; +} + +ResValueWrapper ThemeConstants::GetValue(uint32_t key) const +{ + // Find resource at custom styles. + auto customIter = customStyleMap_.find(key); + if (customIter != customStyleMap_.end()) { + return customIter->second; + } + // Find resource at prebuilt maps. + const auto platformConstants = ThemeConstants::GetPlatformConstants(key); + + if (platformConstants == nullptr) { + return ERROR_VALUE; + } + if (platformConstants->type != ThemeConstantsType::REFERENCE) { + return *platformConstants; + } + // This value point to another style, recursively find target. + auto uintPtr = std::get_if(&(platformConstants->value)); + if (!uintPtr) { + return ERROR_VALUE; + } + // Copy reference value, blend alpha if need(reference color and current blendAlpha < 1.0). + auto refValue = GetValue(*uintPtr); + refValue.isPublic = platformConstants->isPublic; + auto blendAlpha = GetBlendAlpha(platformConstants->blendAlpha); + if ((refValue.type == ThemeConstantsType::COLOR) && (blendAlpha < BLEND_ALPHA_MAX)) { + auto colorPtr = std::get_if(&refValue.value); + if (!colorPtr) { + return ERROR_VALUE; + } + refValue.value = colorPtr->BlendOpacity(blendAlpha); + } + return refValue; +} + +double ThemeConstants::GetBlendAlpha(const BlendAlpha& blendAlpha) const +{ + auto doublePtr = std::get_if(&blendAlpha); + if (doublePtr) { + return *doublePtr; + } + auto idPtr = std::get_if(&blendAlpha); + if (idPtr) { + return ThemeConstants::GetDouble(*idPtr); + } + return BLEND_ALPHA_MAX; +} + +void ThemeConstants::LoadTheme(int32_t themeId) +{ + if (!resAdapter_) { + LOGE("resAdapter_ is null, load theme resource failed!"); + return; + } + currentThemeStyle_ = resAdapter_->GetTheme(themeId); + if (currentThemeStyle_) { + currentThemeStyle_->SetName(std::to_string(themeId)); + } +} + +void ThemeConstants::ParseTheme() +{ + if (currentThemeStyle_) { + currentThemeStyle_->ParseContent(); + } +} + +void ThemeConstants::LoadCustomStyle(const RefPtr& assetManager) +{ + if (!assetManager) { + LOGE("AssetManager is null, load custom style failed!"); + return; + } + auto asset = assetManager->GetAsset(STYLE_FILE_PATH); + ThemeConstants::LoadFile(asset); + RefPtr deviceAsset; + switch (g_deviceType) { + case DeviceType::PHONE: + deviceAsset = assetManager->GetAsset(PHONE_STYLE_FILE_PATH); + break; + case DeviceType::TV: + deviceAsset = assetManager->GetAsset(TV_STYLE_FILE_PATH); + break; + case DeviceType::WATCH: + deviceAsset = assetManager->GetAsset(WEARABLE_STYLE_FILE_PATH); + break; + default: + return; + } + ThemeConstants::LoadFile(deviceAsset); +} + +void ThemeConstants::ParseCustomStyle(const std::string& content) +{ + auto rootJson = JsonUtil::ParseJsonString(content); + auto rootNode = rootJson->GetObject(CUSTOM_STYLE_ROOT_NAME); + if (rootNode->IsNull()) { + LOGE("Load custom style, root node 'style' not found."); + return; + } + auto child = rootNode->GetChild(); + while (child && !child->IsNull()) { + const auto& key = child->GetKey(); + const auto& value = child->GetString(); + child = child->GetNext(); + uint32_t styleId = StringUtils::StringToUint(key, UINT32_MAX); + if (styleId == UINT32_MAX) { + // Id format error. + continue; + } + const auto& oldValue = ThemeConstants::GetValue(styleId); + if (oldValue.type == ThemeConstantsType::ERROR) { + // Id not found. + continue; + } + if (!oldValue.isPublic) { + // Id is not public. + continue; + } + const auto& newValue = ThemeUtils::ParseStyleValue(styleId, oldValue, value); + // Replace default style with user custom style, use type to check parse success. + if (newValue.type == oldValue.type) { + customStyleMap_[styleId] = newValue; + } + } +} + +void ThemeConstants::LoadFile(const RefPtr& asset) +{ + if (!asset) { + LOGD("No custom style found."); + return; + } + + auto fileSize = asset->GetSize(); + if (fileSize <= 0) { + LOGD("Load custom style, file is empty."); + return; + } + const auto& fileData = asset->GetData(); + if (!fileData) { + LOGD("Load custom style, file data is null."); + return; + } + std::string styleContent; + styleContent.assign(fileData, fileData + fileSize); + if (styleContent.empty()) { + return; + } + ParseCustomStyle(styleContent); +} + +void ThemeConstants::SetColorScheme(ColorScheme colorScheme) +{ + if (!currentThemeStyle_) { + return; + } + if (colorScheme == ColorScheme::SCHEME_TRANSPARENT) { + currentThemeStyle_->SetAttr( + THEME_ATTR_BG_COLOR, { .type = ThemeConstantsType::COLOR, .value = TRANSPARENT_BG_COLOR }); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/theme/theme_constants.h b/frameworks/core/components/theme/theme_constants.h new file mode 100644 index 00000000..4a272464 --- /dev/null +++ b/frameworks/core/components/theme/theme_constants.h @@ -0,0 +1,156 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_THEME_THEME_CONSTANTS_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_THEME_THEME_CONSTANTS_H + +#include + +#include "base/geometry/dimension.h" +#include "base/resource/asset_manager.h" +#include "base/resource/internal_resource.h" +#include "base/utils/macros.h" +#include "core/components/common/layout/constants.h" +#include "core/components/common/properties/color.h" +#include "core/components/common/properties/edge.h" +#include "core/components/common/properties/radius.h" +#include "core/components/common/properties/text_style.h" +#include "core/components/theme/resource_adapter.h" +#include "core/components/theme/theme_attributes.h" +#include "core/components/theme/theme_constants_defines.h" +#include "core/components/theme/theme_style.h" + +namespace OHOS::Ace { + +class ACE_EXPORT ThemeConstants : public AceType { + DECLARE_ACE_TYPE(ThemeConstants, AceType); + +public: + explicit ThemeConstants(RefPtr resourceAdapter) : resAdapter_(resourceAdapter) {}; + ~ThemeConstants() override = default; + + /* + * Init properties at platform. + */ + static void InitDeviceType(); + + void InitResource(const DeviceResourceInfo& resourceInfo) + { + if (resAdapter_) { + resAdapter_->Init(resourceInfo); + } + } + + void UpdateConfig(const DeviceConfig& config) + { + if (resAdapter_) { + resAdapter_->UpdateConfig(config); + } + } + + void ParseTheme(); + + /* + * Get color value from platform constants. + * Color::BLACK will be returned if value not found or corresponding value is not Color. + * @param[in] key Target color key. + * @return Color corresponding to the key. + */ + Color GetColor(uint32_t key) const; + + /* + * Get dimension value from platform constants. + * Dimension with 0.0 will be returned if not found or value is not Dimension. + * @param[in] key Target dimension key. + * @return Dimension corresponding to the key. + */ + Dimension GetDimension(uint32_t key) const; + + /* + * Get int32_t value from platform constants. + * NOTE: -1 will be returned if not found or value is not int32_t. + * @param[in] key Target key. + * @return Int value corresponding to the key. + */ + int32_t GetInt(uint32_t key) const; + + /* + * Get double value from platform constants. + * NOTE: 0.0 will be returned if not found or value is not double. + * @param[in] key Target key. + * @return Double value corresponding to the key. + */ + double GetDouble(uint32_t key) const; + + /* + * Get string value from platform constants. + * NOTE: empty string will be returned if not found or value is not string. + * @param[in] key Target key. + * @return String value corresponding to the key. + */ + std::string GetString(uint32_t key) const; + + /* + * Get ResourceId from platform constants. + * NOTE: ResourceId::NO_ID will be returned if not found or value is not ResourceId. + */ + InternalResource::ResourceId GetResourceId(uint32_t key) const; + + void LoadCustomStyle(const RefPtr& assetManager); + + /* + * Load theme from system resource. + */ + void LoadTheme(int32_t themeId); + + RefPtr GetThemeStyle() const + { + return currentThemeStyle_; + } + + void SetColorScheme(ColorScheme colorScheme); + + bool HasCustomStyle(uint32_t key) const + { + return customStyleMap_.find(key) != customStyleMap_.end(); + } + +private: + static const ResValueWrapper* GetPlatformConstants(uint32_t key); + static const ResValueWrapper* styleMapDefault[]; + static uint32_t DefaultMapCount; +#ifdef WEARABLE_PRODUCT + static const ResValueWrapper* styleMapWatch[]; + static uint32_t WatchMapCount; +#else + static const ResValueWrapper* styleMapTv[]; + static uint32_t TvMapCount; +#endif + + ResValueWrapper GetValue(uint32_t key) const; + double GetBlendAlpha(const BlendAlpha& blendAlpha) const; + void ParseCustomStyle(const std::string& content); + void LoadFile(const RefPtr& asset); + + RefPtr resAdapter_; + RefPtr currentThemeStyle_; + ThemeConstantsMap customStyleMap_; + + ACE_DISALLOW_COPY_AND_MOVE(ThemeConstants); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_THEME_THEME_CONSTANTS_H diff --git a/frameworks/core/components/theme/theme_manager.cpp b/frameworks/core/components/theme/theme_manager.cpp new file mode 100644 index 00000000..2ca67d16 --- /dev/null +++ b/frameworks/core/components/theme/theme_manager.cpp @@ -0,0 +1,152 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/theme/theme_manager.h" + +#include "core/components/badge/badge_theme.h" +#include "core/components/button/button_theme.h" +#include "core/components/calendar/calendar_theme.h" +#include "core/components/checkable/checkable_theme.h" +#include "core/components/clock/clock_theme.h" +#include "core/components/data_panel/data_panel_theme.h" +#include "core/components/dialog/dialog_theme.h" +#include "core/components/divider/divider_theme.h" +#include "core/components/focus_animation/focus_animation_theme.h" +#include "core/components/list/list_item_theme.h" +#include "core/components/list/list_theme.h" +#include "core/components/marquee/marquee_theme.h" +#include "core/components/navigation_bar/navigation_bar_theme.h" +#include "core/components/picker/picker_theme.h" +#include "core/components/piece/piece_theme.h" +#include "core/components/popup/popup_theme.h" +#include "core/components/progress/progress_theme.h" +#include "core/components/qrcode/qrcode_theme.h" +#include "core/components/rating/rating_theme.h" +#include "core/components/refresh/refresh_theme.h" +#include "core/components/scroll/scroll_bar_theme.h" +#include "core/components/search/search_theme.h" +#include "core/components/select/select_theme.h" +#include "core/components/slider/slider_theme.h" +#include "core/components/stepper/stepper_theme.h" +#include "core/components/swiper/swiper_indicator_theme.h" +#include "core/components/tab_bar/tab_theme.h" +#include "core/components/text/text_theme.h" +#include "core/components/text_field/textfield_theme.h" +#include "core/components/text_overlay/text_overlay_theme.h" +#include "core/components/theme/app_theme.h" +#include "core/components/theme/card_theme.h" +#include "core/components/toast/toast_theme.h" +#include "core/components/toggle/toggle_theme.h" +#include "core/components/tool_bar/tool_bar_theme.h" +#include "core/components/video/video_theme.h" + +namespace OHOS::Ace { +namespace { + +template +RefPtr ThemeBuildFunc(const RefPtr& themeConstants) +{ + return T().Build(themeConstants); +} + +const std::unordered_map(*)(const RefPtr& themeConstants)> THEME_BUILDERS = { + { AppTheme::TypeId(), &ThemeBuildFunc }, + { ButtonTheme::TypeId(), &ThemeBuildFunc }, + { PickerTheme::TypeId(), &ThemeBuildFunc }, + { CheckboxTheme::TypeId(), &ThemeBuildFunc }, + { SwitchTheme::TypeId(), &ThemeBuildFunc }, + { RadioTheme::TypeId(), &ThemeBuildFunc }, + { DialogTheme::TypeId(), &ThemeBuildFunc }, + { MarqueeTheme::TypeId(), &ThemeBuildFunc }, + { NavigationBarTheme::TypeId(), &ThemeBuildFunc }, + { SelectTheme::TypeId(), &ThemeBuildFunc }, + { SliderTheme::TypeId(), &ThemeBuildFunc }, + { SwiperIndicatorTheme::TypeId(), &ThemeBuildFunc }, + { PopupTheme::TypeId(), &ThemeBuildFunc }, + { ProgressTheme::TypeId(), &ThemeBuildFunc }, + { VideoTheme::TypeId(), &ThemeBuildFunc }, + { TabTheme::TypeId(), &ThemeBuildFunc }, + { RefreshTheme::TypeId(), &ThemeBuildFunc }, + { ListTheme::TypeId(), &ThemeBuildFunc }, + { ListItemTheme::TypeId(), &ThemeBuildFunc }, + { ToastTheme::TypeId(), &ThemeBuildFunc }, + { TextTheme::TypeId(), &ThemeBuildFunc }, + { RatingTheme::TypeId(), &ThemeBuildFunc }, + { TextFieldTheme::TypeId(), &ThemeBuildFunc }, + { FocusAnimationTheme::TypeId(), &ThemeBuildFunc }, + { ScrollBarTheme::TypeId(), &ThemeBuildFunc }, + { CalendarTheme::TypeId(), &ThemeBuildFunc }, + { SearchTheme::TypeId(), &ThemeBuildFunc }, + { TextOverlayTheme::TypeId(), &ThemeBuildFunc }, + { DividerTheme::TypeId(), &ThemeBuildFunc }, + { ToggleTheme::TypeId(), &ThemeBuildFunc }, + { ClockTheme::TypeId(), &ThemeBuildFunc }, + { DataPanelTheme::TypeId(), &ThemeBuildFunc }, + { BadgeTheme::TypeId(), &ThemeBuildFunc }, + { PieceTheme::TypeId(), &ThemeBuildFunc }, + { StepperTheme::TypeId(), &ThemeBuildFunc }, + { ToolBarTheme::TypeId(), &ThemeBuildFunc }, + { CardTheme::TypeId(), &ThemeBuildFunc }, + { QrcodeTheme::TypeId(), &ThemeBuildFunc }, +}; + +} // namespace + +ThemeManager::ThemeManager() +{ + themeConstants_ = AceType::MakeRefPtr(nullptr); +} + +RefPtr ThemeManager::GetTheme(ThemeType type) +{ + auto findIter = themes_.find(type); + if (findIter != themes_.end()) { + return findIter->second; + } + auto builderIter = THEME_BUILDERS.find(type); + if (builderIter == THEME_BUILDERS.end()) { + LOGE("No theme builder defined! type=%{public}zu", type); + return nullptr; + } + auto theme = builderIter->second(themeConstants_); + themes_.emplace(type, theme); + return theme; +} + +Color ThemeManager::GetBackgroundColor() const +{ + auto findIter = themes_.find(AppTheme::TypeId()); + if (findIter != themes_.end()) { + auto appTheme = AceType::DynamicCast(findIter->second); + if (appTheme) { + return appTheme->GetBackgroundColor(); + } + } + // Parse attr from system theme style. + auto themeStyle = themeConstants_->GetThemeStyle(); + auto prebuildColor = themeConstants_->GetColor(THEME_APP_BACKGROUND); + if (!themeStyle) { + return prebuildColor; + } + return themeStyle->GetAttr(THEME_ATTR_BG_COLOR, prebuildColor); +} + +void ThemeManager::ReloadThemes() +{ + themes_.clear(); + themeConstants_->LoadTheme(currentThemeId_); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/theme/theme_manager.h b/frameworks/core/components/theme/theme_manager.h new file mode 100644 index 00000000..15c7e106 --- /dev/null +++ b/frameworks/core/components/theme/theme_manager.h @@ -0,0 +1,105 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_THEME_THEME_MANAGER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_THEME_THEME_MANAGER_H + +#include + +#include "base/memory/ace_type.h" +#include "base/resource/asset_manager.h" +#include "core/components/theme/theme.h" +#include "core/components/theme/theme_constants.h" + +namespace OHOS::Ace { + +class ACE_EXPORT ThemeManager : public AceType { + DECLARE_ACE_TYPE(ThemeManager, AceType); + +public: + ThemeManager(); + ~ThemeManager() = default; + + void InitResource(const DeviceResourceInfo& resourceInfo) + { + themeConstants_->InitResource(resourceInfo); + } + + void UpdateConfig(const DeviceConfig& config) + { + themeConstants_->UpdateConfig(config); + } + + void LoadSystemTheme(int32_t themeId) + { + currentThemeId_ = themeId; + themeConstants_->LoadTheme(themeId); + } + + void ParseSystemTheme() + { + themeConstants_->ParseTheme(); + } + + void LoadCustomTheme(const RefPtr& assetManager) + { + themeConstants_->LoadCustomStyle(assetManager); + } + + /* + * Color scheme of the whole window, app bg color will be change in transparent scheme. + */ + void SetColorScheme(ColorScheme colorScheme) + { + themeConstants_->SetColorScheme(colorScheme); + } + + /* + * Get color value from AppTheme (if exists) or system theme style. + * Prebuild background color will be returned if AppTheme and system theme style both not exists. + * @return App background color. + */ + Color GetBackgroundColor() const; + + RefPtr GetThemeConstants() const + { + return themeConstants_; + } + + /* + * Get target theme, this function will cause construction of the theme if it not exists. + * @return Target component theme. + */ + RefPtr GetTheme(ThemeType type); + + template + RefPtr GetTheme() + { + return AceType::DynamicCast(GetTheme(T::TypeId())); + } + + void ReloadThemes(); + +private: + std::unordered_map> themes_; + RefPtr themeConstants_; + int32_t currentThemeId_ = -1; + + ACE_DISALLOW_COPY_AND_MOVE(ThemeManager); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_THEME_THEME_MANAGER_H diff --git a/frameworks/core/components/theme/theme_style.h b/frameworks/core/components/theme/theme_style.h new file mode 100644 index 00000000..c1fb6d05 --- /dev/null +++ b/frameworks/core/components/theme/theme_style.h @@ -0,0 +1,189 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_THEME_THEME_STYLE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_THEME_THEME_STYLE_H + +#include +#include +#include + +#include "base/geometry/dimension.h" +#include "base/log/log.h" +#include "base/memory/ace_type.h" +#include "base/resource/internal_resource.h" +#include "core/components/common/properties/color.h" +#include "core/components/theme/theme_utils.h" + +namespace OHOS::Ace { + +class ThemeStyle; +class ThemeUtils; +class StateResource; + +using ResRawValue = std::variant, RefPtr>; +using BlendAlpha = std::variant; + +enum class ThemeConstantsType { + // Error type for check if key is match with value + ERROR = -1, + COLOR = 0, + DIMENSION, + INT, + DOUBLE, + RESOURCE_ID, + REFERENCE, + REFERENCE_ATTR, + STRING, + PATTERN, + STATE_RESOURCE, + THEME, +}; + +struct ResValueWrapper { + + template + std::pair GetValue(const T& errorValue) const + { + auto valuePtr = std::get_if(&value); + if (!valuePtr) { + return std::make_pair(false, errorValue); + } + return std::make_pair(true, *valuePtr); + } + + ThemeConstantsType type { ThemeConstantsType::COLOR }; + ResRawValue value; + // Whether style value is public to app. + bool isPublic { false }; + // Extra alpha needs to blend with color(uint means an ID reference, double means an alpha value). + BlendAlpha blendAlpha { 1.0 }; +}; + +using ThemeConstantsMap = std::unordered_map; + +class ThemeStyle : public virtual AceType { + DECLARE_ACE_TYPE(ThemeStyle, AceType); + +public: + ThemeStyle() = default; + ~ThemeStyle() override = default; + + void SetName(const std::string& name) + { + name_ = name; + } + + std::string GetName() const + { + return name_; + } + + virtual void ParseContent() {}; + + void SetAttributes(const std::unordered_map& attributes) + { + attributes_ = attributes; + } + + const std::unordered_map& GetAttributes() const + { + return attributes_; + } + + bool HasAttr(const std::string& attr) const + { + return attributes_.find(attr) != attributes_.end(); + } + + void SetAttr(const std::string& attr, const ResValueWrapper& value) + { + attributes_[attr] = value; + } + + template + T GetAttr(const std::string& attr, const T& errorValue) const + { + auto findIter = attributes_.find(attr); + if (findIter == attributes_.end()) { + LOGE("style %{public}s not contains %{public}s!", name_.c_str(), attr.c_str()); + return errorValue; + } + const auto& valueWrapper = findIter->second; + // parse attr reference. + if (valueWrapper.type == ThemeConstantsType::REFERENCE_ATTR) { + auto parent = parentStyle_.Upgrade(); + if (!parent) { + return errorValue; + } + auto parseResult = ThemeUtils::ParseThemeIdReference(valueWrapper.GetValue("").second); + if (!parseResult.parseSuccess || parseResult.isIdRef) { + return errorValue; + } + return parent->GetAttr(parseResult.refAttr, errorValue); + } + auto valuePair = valueWrapper.GetValue(errorValue); + if (!valuePair.first) { + LOGE("style %{public}s get attr %{public}s error!", name_.c_str(), attr.c_str()); + } + return valuePair.second; + } + +protected: + std::string name_; + std::unordered_map attributes_; + WeakPtr parentStyle_; +}; + +class StateResource : public virtual AceType { + DECLARE_ACE_TYPE(StateResource, AceType); + +public: + StateResource() = default; + ~StateResource() override = default; + + void SetName(const std::string& name) + { + name_ = name; + } + + void SetStateValue(uint32_t state, const ResValueWrapper& value) + { + states_[state] = value; + } + + template + T GetState(uint32_t state, const T& defaultValue) const + { + auto findIter = states_.find(state); + if (findIter == states_.end()) { + return defaultValue; + } + auto valuePair = findIter->second.GetValue(defaultValue); + if (!valuePair.first) { + LOGE("style %{public}s get state %{public}u error!", name_.c_str(), state); + } + return valuePair.second; + } + +private: + std::string name_; + std::unordered_map states_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_THEME_THEME_STYLE_H diff --git a/frameworks/core/components/theme/theme_utils.cpp b/frameworks/core/components/theme/theme_utils.cpp new file mode 100644 index 00000000..32a92c86 --- /dev/null +++ b/frameworks/core/components/theme/theme_utils.cpp @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/theme/theme_utils.h" + +#include +#include +#include + +#include "base/log/log.h" +#include "base/utils/string_utils.h" +#include "core/components/theme/theme_constants.h" + +namespace OHOS::Ace { +namespace { + +constexpr uint32_t THEME_ID_MIN_SIZE = 5; // Input should contain "@id" +constexpr uint32_t THEME_ID_MATCH_SIZE = 2; +const std::regex THEME_ID_REGEX(R"(^\"@id([0-9]+)\"$)", std::regex::icase); // regex for "@id001" +constexpr uint32_t THEME_ATTR_MIN_SIZE = 7; +const std::regex THEME_ATTR_REGEX(R"(\?theme:([a-zA-Z0-9_]+))"); // regex for "?theme:attr_color_emphasis" +constexpr uint32_t CUSTOM_STYLE_STRING_MAX_SIZE = 128; +constexpr uint32_t OHOS_ID_MIN_SIZE = 7; // Input should contain "@ohos_id" +constexpr uint32_t SYSTEM_RES_ID_START = 0x7000000; +const std::regex OHOS_ID_REGEX(R"(^@ohos_id_([0-9]+)$)", std::regex::icase); // regex for "@ohos_id_001" + +const std::set FONT_WEIGHT_STYLE_ID = { + THEME_BUTTON_TEXT_FONTWEIGHT, + THEME_DIALOG_TITLE_TEXT_FONTWEIGHT, + THEME_TOAST_TEXT_TEXT_FONTWEIGHT, + THEME_TEXTFIELD_FONT_WEIGHT, + THEME_SEARCH_FONT_WEIGHT +}; + +} // namespace + +IdParseResult ThemeUtils::ParseThemeIdReference(const std::string& str) +{ + std::smatch matches; + IdParseResult result { .parseSuccess = false, .isIdRef = false, .id = 0, .refAttr = "" }; + if (str.size() > THEME_ID_MIN_SIZE && std::regex_match(str, matches, THEME_ID_REGEX)) { + if (matches.size() == THEME_ID_MATCH_SIZE) { + // Platform style id is no more than 32 bit. + result.id = static_cast(std::stoul(matches[1].str())); + result.parseSuccess = true; + result.isIdRef = true; + } + } else if (str.size() > THEME_ATTR_MIN_SIZE && std::regex_match(str, matches, THEME_ATTR_REGEX)) { + if (matches.size() == THEME_ID_MATCH_SIZE) { + result.refAttr = matches[1].str(); + result.parseSuccess = true; + result.isIdRef = false; + } + } else if (str.size() > OHOS_ID_MIN_SIZE && std::regex_match(str, matches, OHOS_ID_REGEX)) { + if (matches.size() == THEME_ID_MATCH_SIZE) { + // Platform style id is no more than 32 bit. + result.id = static_cast(std::stoul(matches[1].str())) + SYSTEM_RES_ID_START; + result.parseSuccess = true; + result.isIdRef = true; + } + } else { + // Not reference format, ignore. + } + return result; +} + +ResValueWrapper ThemeUtils::ParseStyleValue( + uint32_t styleId, const ResValueWrapper& model, const std::string& value) +{ + ResValueWrapper resultValue = { .type = model.type, .isPublic = model.isPublic }; + if (FONT_WEIGHT_STYLE_ID.count(styleId) > 0) { + resultValue.value = static_cast(StringUtils::StringToFontWeight(value)); + return resultValue; + } + switch (model.type) { + case ThemeConstantsType::COLOR: + resultValue.value = Color::FromString(value, COLOR_ALPHA_MASK); + break; + case ThemeConstantsType::DIMENSION: + resultValue.value = StringUtils::StringToDimension(value); + break; + case ThemeConstantsType::INT: + resultValue.value = StringUtils::StringToInt(value); + break; + case ThemeConstantsType::DOUBLE: + resultValue.value = StringUtils::StringToDouble(value); + break; + case ThemeConstantsType::STRING: + if (value.size() < CUSTOM_STYLE_STRING_MAX_SIZE) { + resultValue.value = value; + } else { + LOGE("Custom style value size over limit!"); + resultValue.type = ThemeConstantsType::ERROR; + } + break; + default: + resultValue.type = ThemeConstantsType::ERROR; + break; + } + return resultValue; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/theme/theme_utils.h b/frameworks/core/components/theme/theme_utils.h new file mode 100644 index 00000000..67af494f --- /dev/null +++ b/frameworks/core/components/theme/theme_utils.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_THEME_THEME_UTILS_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_THEME_THEME_UTILS_H + +#include + +#include "base/utils/macros.h" + +namespace OHOS::Ace { + +struct IdParseResult { + bool parseSuccess = false; + bool isIdRef = false; + uint32_t id = 0; + std::string refAttr = ""; +}; + +struct ResValueWrapper; + +class ACE_EXPORT ThemeUtils { +public: + ThemeUtils() = delete; + ~ThemeUtils() = delete; + + static IdParseResult ParseThemeIdReference(const std::string& str); + + static ResValueWrapper ParseStyleValue( + uint32_t styleId, const ResValueWrapper& model, const std::string& value); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_THEME_THEME_UTILS_H diff --git a/frameworks/core/components/theme/tools/build_theme_code.py b/frameworks/core/components/theme/tools/build_theme_code.py new file mode 100755 index 00000000..94df335d --- /dev/null +++ b/frameworks/core/components/theme/tools/build_theme_code.py @@ -0,0 +1,253 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import sys +import os + +theme_list = {} + + +def read_row_value(row, param, offset, platform): + if row[offset] == '': + return + item = {} + item['.type'] = row[offset] + item['.value'] = row[offset + 1] + if item['.type'] == 'ThemeConstantsType::DOUBLE': + if item['.value'].find('.') == -1: + item['.value'] = item['.value'] + '.0' + if row[offset + 2] != '': + item['.isPublic'] = (row[offset + 2]).lower() + if row[offset + 3] != '': + item['.blendAlpha'] = row[offset + 3] + param[platform] = item + + +def spitrow(row): + values = [] + while True: + if len(row) == 0: + values.append(row) + break + pos = -1 + if row[0] == '\"': + pos = row.find('\"', 1) + if pos == -1: + break + pos = row.find(',', pos + 1) + else: + pos = row.find(',') + value = '' + if pos != -1: + value = row[:pos] + row = row[pos+1:] + else: + value = row + + if len(value) > 6 and value[0:3] == '\"\"\"' and \ + value[-3:] == '\"\"\"': + values.append(value[2:-2]) + else: + if len(value) > 2 and value[0] == '\"' and value[-1] == '\"': + values.append(value[1:-1]) + else: + values.append(value) + if pos == -1: + break + return values + + +def read_row(row): + if row[-1] == '\n': + row = row[:-1] + values = spitrow(row) + param = {} + if len(values) != 16: + print('error') + print(row) + return + + if values[1] != '': + param['base'] = values[1] + if values[2] != '': + param['offset'] = int(values[2]) + param['value'] = int(values[3]) + read_row_value(values, param, 4, 'default') + read_row_value(values, param, 8, 'tv') + read_row_value(values, param, 12, 'watch') + theme_list[values[0]] = param + + +def read_file(file_path): + with open(file_path) as file_read: + content = file_read.read() + return content + + +def write_file(file_path, content): + with open(file_path, 'wb+') as file_write: + file_write.write(content.encode()) + + +def build_header(file_path): + define = 'FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS'\ + '_THEME_THEME_CONSTANTS_DEFINES_H' + begin_str = '/*\n'\ + ' * Copyright (c) 2021 Huawei Device Co., Ltd.\n'\ + ' * Licensed under the Apache License, Version 2.0 (the "License");\n'\ + ' * you may not use this file except in compliance with the License.\n'\ + ' * You may obtain a copy of the License at\n'\ + ' *\n'\ + ' * http://www.apache.org/licenses/LICENSE-2.0\n'\ + ' *\n'\ + ' * Unless required by applicable law or agreed to in writing, software\n'\ + ' * distributed under the License is distributed on an "AS IS" BASIS,\n'\ + ' * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n'\ + ' * See the License for the specific language governing permissions and\n'\ + ' * limitations under the License.\n'\ + ' */\n'\ + '\n'\ + '#ifndef {}\n'\ + '#define {}\n'\ + '\n'\ + 'namespace OHOS::Ace {{\n'\ + '\n' + + new_content = begin_str.format(define, define) + for key, values in theme_list.items(): + row = 'constexpr uint32_t {} = '.format(key) + has_base = False + if 'base' in values: + row = ''.join((row, values['base'])) + has_base = True + if 'offset' in values: + if has_base == True: + row = ''.join((row, ' + ')) + row = ''.join((row, str(values['offset']))) + row = ''.join((row, ';\n')) + new_content = ''.join((new_content, row)) + end_str = '{}\n}} // namespace OHOS::Ace\n\n'\ + '#endif // {}' + write_file(file_path, end_str.format(new_content, define)) + + +def get_global_name(name): + offset = 0 + char = name.split('_') + ret = '' + for i in range(0, len(char)): + if i == 0: + ret = ''.join((ret, char[i])) + else: + ret = ''.join((ret, char[i].capitalize())) + return ret + + +def make_table(param_map, platform): + content = 'const ResValueWrapper* ThemeConstants::styleMap{}[] = '.format( + platform.capitalize()) + + table = {} + maxindex = 0 + for key, values in param_map.items(): + if maxindex < int(key): + maxindex = int(key) + + content = ''.join((content, '{')) + for i in range(0, maxindex + 1): + if str(i) in param_map: + content = '{} &{},'.format(content, param_map[str(i)]) + else: + content = ''.join((content, ' nullptr,')) + content = content[0:len(content) - 1] + content = ''.join((content, '};\n')) + return content + + +def build_cpp(file_path, platform): + begin_str = '/*\n'\ + ' * Copyright (c) 2021 Huawei Device Co., Ltd.\n'\ + ' * Licensed under the Apache License, Version 2.0 (the "License");\n'\ + ' * you may not use this file except in compliance with the License.\n'\ + ' * You may obtain a copy of the License at\n'\ + ' *\n'\ + ' * http://www.apache.org/licenses/LICENSE-2.0\n'\ + ' *\n'\ + ' * Unless required by applicable law or agreed to in writing, software\n'\ + ' * distributed under the License is distributed on an "AS IS" BASIS,\n'\ + ' * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n'\ + ' * See the License for the specific language governing permissions and\n'\ + ' * limitations under the License.\n'\ + ' */\n'\ + '\n'\ + '#include \"core/components/theme/theme_constants.h\"\n'\ + '\n'\ + '#include \"core/components/common/properties/scroll_bar.h\"\n'\ + '\n'\ + 'namespace OHOS::Ace {\n' + content = begin_str + table = {} + for key, values in theme_list.items(): + if platform in values: + name = 'g_{}{}'.format(get_global_name( + key.lower()), platform.capitalize()) + value = 'const ResValueWrapper {} {{'.format(name) + table[str(values['value'])] = name + for key1, values1 in values[platform].items(): + value = '{} {} = {},'.format(value, key1, values1) + value = value[0: len(value) - 1] + value = ''.join((value, ' };\n')) + content = ''.join((content, value)) + content = '{}\n'\ + '{}\n'\ + 'uint32_t ThemeConstants::{}MapCount = sizeof(styleMap{}) / sizeof(styleMap{}[0]);\n'\ + '\n}} // namespace OHOS::Ace'.format(content, make_table(table, platform), + platform.capitalize(), platform.capitalize(), platform.capitalize()) + file_name = '{}theme_constants_{}.cpp'.format(file_path, platform) + write_file(file_name, content) + + +def read_file_lines(file_path): + with open(file_path) as file_read: + content = file_read.readlines() + return content + + +def main(): + if len(sys.argv) != 3: + print('error, missing required parameters!') + print('\tbuild_theme_code theme.xls theme/') + return 1 + + folder = os.path.exists(sys.argv[2]) + if not folder: + os.makedirs(sys.argv[2]) + + cvs = read_file_lines(sys.argv[1]) + + for i in range(len(cvs)): + if i == 0: + continue + read_row(cvs[i]) + + dist_path = sys.argv[2] + + build_header(''.join((dist_path, 'theme_constants_defines.h'))) + build_cpp(dist_path, 'tv') + build_cpp(dist_path, 'default') + build_cpp(dist_path, 'watch') + +if __name__ == '__main__': + main() diff --git a/frameworks/core/components/tip/BUILD.gn b/frameworks/core/components/tip/BUILD.gn new file mode 100644 index 00000000..88610aa8 --- /dev/null +++ b/frameworks/core/components/tip/BUILD.gn @@ -0,0 +1,23 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("tip") { + sources = [ + "flutter_render_tip.cpp", + "render_tip.cpp", + "tip_component.cpp", + "tip_element.cpp", + ] +} diff --git a/frameworks/core/components/tip/flutter_render_tip.cpp b/frameworks/core/components/tip/flutter_render_tip.cpp new file mode 100644 index 00000000..eb599870 --- /dev/null +++ b/frameworks/core/components/tip/flutter_render_tip.cpp @@ -0,0 +1,133 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/tip/flutter_render_tip.h" + +#include "core/components/common/properties/border.h" +#include "core/components/common/properties/edge.h" +#include "core/pipeline/base/scoped_canvas_state.h" + +namespace OHOS::Ace { + +namespace { + +constexpr double HALF = 0.5; +constexpr Dimension BEZIER_HORIZON_OFFSET_FIRST = 1.3_vp; +constexpr Dimension BEZIER_HORIZON_OFFSET_SECOND = 3.2_vp; +constexpr Dimension BEZIER_HORIZON_OFFSET_THIRD = 6.6_vp; +constexpr Dimension BEZIER_HORIZON_OFFSET_FOURTH = 16.0_vp; +constexpr Dimension BEZIER_VERTICAL_OFFSET_FIRST = 0.1_vp; +constexpr Dimension BEZIER_VERTICAL_OFFSET_SECOND = 3.0_vp; +constexpr Dimension BEZIER_VERTICAL_OFFSET_THIRD = 8.0_vp; + +} // namespace + +RefPtr RenderTip::Create() +{ + return AceType::MakeRefPtr(); +} + +void FlutterRenderTip::Paint(RenderContext& context, const Offset& offset) +{ + PaintTip(context, offset); + auto child = GetFirstChild(); + if (!child) { + return; + } + if (child->GetVisible()) { + child->Paint(context, child->GetPosition() + offset); + } +} + +SkCanvas* FlutterRenderTip::GetSkCanvas(RenderContext& context) +{ + auto canvas = ScopedCanvas::Create(context); + if (!canvas) { + LOGE("canvas fetch failed"); + return nullptr; + } + return canvas->canvas(); +} + +void FlutterRenderTip::PaintTip(RenderContext& context, const Offset& offset) +{ + SkCanvas* skCanvas = GetSkCanvas(context); + SkPaint paint; + paint.setAntiAlias(true); + paint.setColor(bgColor_.GetValue()); + paint.setStyle(SkPaint::Style::kFill_Style); + PaintTopTip(skCanvas, paint, offset); +} + +void FlutterRenderTip::PaintTopTip(SkCanvas* skCanvas, SkPaint paint, const Offset& offset) +{ + if (!skCanvas) { + return; + } + + double bubbleSpacing = NormalizeToPx(TIP_SPACING); + double childHeight = GetLayoutSize().Height() - bubbleSpacing; + double childHalfWidth = childSize_.Width() * HALF; + double arrowOffset = NormalizeToPx(arrowOffset_); + auto globalArrowPosition = offset + Offset(childHalfWidth, GetLayoutSize().Height()); + + path_.reset(); + path_.moveTo(globalArrowPosition.GetX() + arrowOffset, globalArrowPosition.GetY()); + path_.quadTo(globalArrowPosition.GetX() + NormalizeToPx(BEZIER_HORIZON_OFFSET_FIRST) + arrowOffset, + globalArrowPosition.GetY() + NormalizeToPx(BEZIER_VERTICAL_OFFSET_FIRST), + globalArrowPosition.GetX() + NormalizeToPx(BEZIER_HORIZON_OFFSET_SECOND) + arrowOffset, + globalArrowPosition.GetY() - NormalizeToPx(BEZIER_VERTICAL_OFFSET_SECOND)); + path_.quadTo(globalArrowPosition.GetX() + NormalizeToPx(BEZIER_HORIZON_OFFSET_THIRD) + arrowOffset, + globalArrowPosition.GetY() - NormalizeToPx(BEZIER_VERTICAL_OFFSET_THIRD), + globalArrowPosition.GetX() + NormalizeToPx(BEZIER_HORIZON_OFFSET_FOURTH) + arrowOffset, + globalArrowPosition.GetY() - NormalizeToPx(BEZIER_VERTICAL_OFFSET_THIRD)); + path_.lineTo(globalArrowPosition.GetX() + (childHalfWidth - NormalizeToPx(border_.BottomRightRadius().GetX())), + globalArrowPosition.GetY() - bubbleSpacing); + path_.arcTo(NormalizeToPx(border_.BottomRightRadius().GetX()), NormalizeToPx(border_.BottomRightRadius().GetY()), + 0.0f, SkPath::ArcSize::kSmall_ArcSize, SkPath::Direction::kCCW_Direction, + globalArrowPosition.GetX() + childHalfWidth, + globalArrowPosition.GetY() - bubbleSpacing - NormalizeToPx(border_.BottomRightRadius().GetY())); + path_.lineTo(globalArrowPosition.GetX() + childHalfWidth, + globalArrowPosition.GetY() - bubbleSpacing - (childHeight - NormalizeToPx(border_.TopRightRadius().GetY()))); + path_.arcTo(NormalizeToPx(border_.TopRightRadius().GetX()), NormalizeToPx(border_.TopRightRadius().GetY()), 0.0f, + SkPath::ArcSize::kSmall_ArcSize, SkPath::Direction::kCCW_Direction, + globalArrowPosition.GetX() + childHalfWidth - NormalizeToPx(border_.TopRightRadius().GetX()), + globalArrowPosition.GetY() - bubbleSpacing - childHeight); + path_.lineTo(globalArrowPosition.GetX() - (childHalfWidth - NormalizeToPx(border_.TopLeftRadius().GetX())), + globalArrowPosition.GetY() - bubbleSpacing - childHeight); + path_.arcTo(NormalizeToPx(border_.TopLeftRadius().GetX()), NormalizeToPx(border_.TopLeftRadius().GetY()), 0.0f, + SkPath::ArcSize::kSmall_ArcSize, SkPath::Direction::kCCW_Direction, globalArrowPosition.GetX() - childHalfWidth, + globalArrowPosition.GetY() - bubbleSpacing - (childHeight - NormalizeToPx(border_.TopLeftRadius().GetY()))); + path_.lineTo(globalArrowPosition.GetX() - childHalfWidth, + globalArrowPosition.GetY() - bubbleSpacing - NormalizeToPx(border_.BottomLeftRadius().GetY())); + path_.arcTo(NormalizeToPx(border_.BottomLeftRadius().GetX()), NormalizeToPx(border_.BottomLeftRadius().GetY()), + 0.0f, SkPath::ArcSize::kSmall_ArcSize, SkPath::Direction::kCCW_Direction, + globalArrowPosition.GetX() - (childHalfWidth - NormalizeToPx(border_.BottomLeftRadius().GetX())), + globalArrowPosition.GetY() - bubbleSpacing); + path_.lineTo(globalArrowPosition.GetX() - NormalizeToPx(BEZIER_HORIZON_OFFSET_FOURTH) + arrowOffset, + globalArrowPosition.GetY() - NormalizeToPx(BEZIER_VERTICAL_OFFSET_THIRD)); + path_.quadTo(globalArrowPosition.GetX() - NormalizeToPx(BEZIER_HORIZON_OFFSET_THIRD) + arrowOffset, + globalArrowPosition.GetY() - NormalizeToPx(BEZIER_VERTICAL_OFFSET_THIRD), + globalArrowPosition.GetX() - NormalizeToPx(BEZIER_HORIZON_OFFSET_SECOND) + arrowOffset, + globalArrowPosition.GetY() - NormalizeToPx(BEZIER_VERTICAL_OFFSET_SECOND)); + path_.quadTo(globalArrowPosition.GetX() - NormalizeToPx(BEZIER_HORIZON_OFFSET_FIRST) + arrowOffset, + globalArrowPosition.GetY() + NormalizeToPx(BEZIER_VERTICAL_OFFSET_FIRST), + globalArrowPosition.GetX() + arrowOffset, globalArrowPosition.GetY()); + path_.close(); + skCanvas->drawPath(path_, paint); + skCanvas->clipPath(path_, SkClipOp::kIntersect); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/tip/flutter_render_tip.h b/frameworks/core/components/tip/flutter_render_tip.h new file mode 100644 index 00000000..27219074 --- /dev/null +++ b/frameworks/core/components/tip/flutter_render_tip.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TIP_FLUTTER_RENDER_TIP_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TIP_FLUTTER_RENDER_TIP_H + +#include "flutter/lib/ui/ui_dart_state.h" +#include "third_party/skia/include/core/SkCanvas.h" + +#include "core/components/tip/render_tip.h" +#include "core/pipeline/base/flutter_render_context.h" + +namespace OHOS::Ace { + +class FlutterRenderTip final : public RenderTip { +DECLARE_ACE_TYPE(FlutterRenderTip, RenderTip); + +public: + FlutterRenderTip() = default; + ~FlutterRenderTip() override = default; + + void Paint(RenderContext& context, const Offset& offset) override; + +private: + SkCanvas* GetSkCanvas(RenderContext& context); + void PaintTip(RenderContext& context, const Offset& offset); + void PaintTopTip(SkCanvas* skCanvas, SkPaint paint, const Offset& offset); + + SkPath path_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TIP_FLUTTER_RENDER_TIP_H diff --git a/frameworks/core/components/tip/render_tip.cpp b/frameworks/core/components/tip/render_tip.cpp new file mode 100644 index 00000000..12759719 --- /dev/null +++ b/frameworks/core/components/tip/render_tip.cpp @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/tip/render_tip.h" + +#include "core/components/tip/tip_component.h" + +namespace OHOS::Ace { + +namespace { + +constexpr double HALF = 0.5; +constexpr Dimension TEXT_MIN_WIDTH = 60.0_vp; + +} // namespace + +void RenderTip::Update(const RefPtr& component) +{ + const RefPtr tip = AceType::DynamicCast(component); + if (tip) { + bgColor_ = tip->GetBgColor(); + MarkNeedLayout(); + } +} + +void RenderTip::PerformLayout() +{ + auto context = GetContext().Upgrade(); + if (!context) { + return; + } + Size layoutSize; + if (!GetChildren().empty()) { + auto child = GetChildren().front(); + LayoutParam innerLayout; + Size maxLayoutSize = GetLayoutParam().GetMaxSize(); + if (maxLayoutSize.IsValid()) { + innerLayout.SetMaxSize(maxLayoutSize); + child->Layout(innerLayout); + layoutSize += child->GetLayoutSize(); + } + + // adjust padding around child + AdaptChildPadding(layoutSize, maxLayoutSize); + + // set text position + double paddingLeft = NormalizeToPx(padding_.Left()); + double paddingTop = NormalizeToPx(padding_.Top()); + child->SetPosition(Offset(paddingLeft, paddingTop)); + childSize_ = layoutSize + padding_.GetLayoutSizeInPx(context->GetDipScale()); + border_.SetBorderRadius(Radius(Dimension(childSize_.Height() * HALF, DimensionUnit::PX))); + SetLayoutSize(maxLayoutSize); + } +} + +void RenderTip::AdaptChildPadding(const Size& childSize, const Size& selfSize) +{ + double widthChange = std::max(0.0, NormalizeToPx(TEXT_MIN_WIDTH) - childSize.Width()); + if (NearEqual(widthChange, 0.0)) { + // convert to px + padding_.SetLeft(Dimension(NormalizeToPx(padding_.Left()), DimensionUnit::PX)); + padding_.SetRight(Dimension(NormalizeToPx(padding_.Right()), DimensionUnit::PX)); + } else { + padding_.SetLeft(Dimension(widthChange * HALF, DimensionUnit::PX)); + padding_.SetRight(Dimension(widthChange * HALF, DimensionUnit::PX)); + } + + double paddingTopBottom = (selfSize.Height() - NormalizeToPx(TIP_SPACING) - childSize.Height()) * HALF; + padding_.SetTop(Dimension(paddingTopBottom, DimensionUnit::PX)); + padding_.SetBottom(Dimension(paddingTopBottom, DimensionUnit::PX)); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/tip/render_tip.h b/frameworks/core/components/tip/render_tip.h new file mode 100644 index 00000000..37432427 --- /dev/null +++ b/frameworks/core/components/tip/render_tip.h @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TIP_RENDER_TIP_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TIP_RENDER_TIP_H + +#include "core/components/arc/arc_component.h" +#include "core/components/common/properties/border.h" +#include "core/components/common/properties/edge.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +constexpr Dimension TIP_SPACING = 8.0_vp; + +class RenderTip : public RenderNode { +DECLARE_ACE_TYPE(RenderTip, RenderNode); + +public: + static RefPtr Create(); + void Update(const RefPtr& component) override; + void PerformLayout() override; + + const Size& GetChildSize() const + { + return childSize_; + } + + void SetPadding(const Edge& padding) + { + padding_ = padding; + } + +protected: + Color bgColor_; + Dimension arrowOffset_; + Size childSize_; + Edge padding_; + Border border_; + +private: + void AdaptChildPadding(const Size& childSize, const Size& selfSize); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TIP_RENDER_TIP_H diff --git a/frameworks/core/components/tip/tip_component.cpp b/frameworks/core/components/tip/tip_component.cpp new file mode 100644 index 00000000..9e7d9ac0 --- /dev/null +++ b/frameworks/core/components/tip/tip_component.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/tip/tip_component.h" + +#include "core/components/tip/render_tip.h" +#include "core/components/tip/tip_element.h" + +namespace OHOS::Ace { + +RefPtr TipComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +RefPtr TipComponent::CreateRenderNode() +{ + return RenderTip::Create(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/tip/tip_component.h b/frameworks/core/components/tip/tip_component.h new file mode 100644 index 00000000..b0c786a3 --- /dev/null +++ b/frameworks/core/components/tip/tip_component.h @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TIP_TIP_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TIP_TIP_COMPONENT_H + +#include "base/geometry/dimension.h" +#include "core/components/common/properties/color.h" +#include "core/components/text/text_component.h" +#include "core/pipeline/base/render_component.h" +#include "core/pipeline/base/sole_child_component.h" + +namespace OHOS::Ace { + +class TipComponent : public SoleChildComponent { + DECLARE_ACE_TYPE(TipComponent, SoleChildComponent); + +public: + explicit TipComponent(const RefPtr& child) : SoleChildComponent(child) {} + + ~TipComponent() override = default; + RefPtr CreateElement() override; + RefPtr CreateRenderNode() override; + + const Color& GetBgColor() const + { + return bgColor_; + } + + void SetBgColor(const Color& color) + { + bgColor_ = color; + } + +private: + Color bgColor_ = Color::BLACK; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TIP_TIP_COMPONENT_H diff --git a/frameworks/core/components/tip/tip_element.cpp b/frameworks/core/components/tip/tip_element.cpp new file mode 100644 index 00000000..cb57aaaf --- /dev/null +++ b/frameworks/core/components/tip/tip_element.cpp @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/tip/tip_element.h" + +#include "core/components/tip/tip_component.h" + +namespace OHOS::Ace { + +void TipElement::PerformBuild() +{ + RefPtr tip = AceType::DynamicCast(component_); + if (tip) { + const auto& child = children_.empty() ? nullptr : children_.front(); + UpdateChild(child, tip->GetChild()); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/tip/tip_element.h b/frameworks/core/components/tip/tip_element.h new file mode 100644 index 00000000..d626d1c5 --- /dev/null +++ b/frameworks/core/components/tip/tip_element.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TIP_TIP_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TIP_TIP_ELEMENT_H + +#include "core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +class TipElement : public RenderElement { + DECLARE_ACE_TYPE(TipElement, RenderElement); + +public: + void PerformBuild() override; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TIP_TIP_ELEMENT_H diff --git a/frameworks/core/components/toast/BUILD.gn b/frameworks/core/components/toast/BUILD.gn new file mode 100644 index 00000000..e383fdc3 --- /dev/null +++ b/frameworks/core/components/toast/BUILD.gn @@ -0,0 +1,18 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("toast") { + sources = [ "toast_component.cpp" ] +} diff --git a/frameworks/core/components/toast/toast_component.cpp b/frameworks/core/components/toast/toast_component.cpp new file mode 100644 index 00000000..8cbe3596 --- /dev/null +++ b/frameworks/core/components/toast/toast_component.cpp @@ -0,0 +1,206 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/toast/toast_component.h" + +#include + +#include "base/utils/string_utils.h" +#include "base/utils/system_properties.h" +#include "core/components/align/align_component.h" +#include "core/components/common/layout/grid_system_manager.h" +#include "core/components/common/properties/shadow_config.h" +#include "core/components/flex/flex_component.h" +#include "core/components/positioned/positioned_component.h" +#include "core/components/stage/stage_element.h" +#include "core/components/tween/tween_component.h" + +namespace OHOS::Ace { +namespace { + +constexpr double START_FRAME_TIME = 0.0; +constexpr double END_FRAME_TIME = 0.9; +constexpr double START_FRAME_OPACITY = 0.0; +constexpr double MID_FRAME_OPACITY = 1.0; +constexpr double END_FRAME_OPACITY = 0.0; +constexpr float TOAST_ANIMATION_TIME = 100.0f; +constexpr char TOAST_TWEEN_NAME[] = "toast"; + +} // namespace + +ToastComponent::ToastComponent() = default; +ToastComponent::~ToastComponent() = default; + +static std::atomic g_toastId(1); + +int32_t ToastComponent::GenerateNextToastId() +{ + return g_toastId.fetch_add(1, std::memory_order_relaxed); +} + +void ToastComponent::InitToastAnimation() +{ + if (NearZero(toastDurationTime_)) { + return; + } + float midFrameTime = TOAST_ANIMATION_TIME / toastDurationTime_; + float stopFrameTime = END_FRAME_TIME - TOAST_ANIMATION_TIME / toastDurationTime_; + auto opacityKeyframeStart = AceType::MakeRefPtr>(START_FRAME_TIME, START_FRAME_OPACITY); + auto opacityKeyframeMid = AceType::MakeRefPtr>(midFrameTime, MID_FRAME_OPACITY); + opacityKeyframeMid->SetCurve(Curves::FRICTION); + auto opacityKeyframeStop = AceType::MakeRefPtr>(stopFrameTime, MID_FRAME_OPACITY); + opacityKeyframeStop->SetCurve(Curves::LINEAR); + auto opacityKeyframeEnd = AceType::MakeRefPtr>(END_FRAME_TIME, END_FRAME_OPACITY); + opacityKeyframeEnd->SetCurve(Curves::FRICTION); + auto opacityAnimation = AceType::MakeRefPtr>(); + opacityAnimation->AddKeyframe(opacityKeyframeStart); + opacityAnimation->AddKeyframe(opacityKeyframeMid); + opacityAnimation->AddKeyframe(opacityKeyframeStop); + opacityAnimation->AddKeyframe(opacityKeyframeEnd); + tweenOption_.SetOpacityAnimation(opacityAnimation); + tweenOption_.SetDuration(toastDurationTime_); + tweenOption_.SetFillMode(FillMode::FORWARDS); +} + +void ToastComponent::BuildToastContent(const RefPtr& text, const RefPtr& toastTheme) +{ + if (!text || !toastTheme) { + return; + } + TextStyle toastTextStyle = toastTheme->GetTextStyle(); + auto deviceType = SystemProperties::GetDeviceType(); + if (deviceType == DeviceType::WATCH) { + toastTextStyle.SetAdaptTextSize(toastTextStyle.GetFontSize(), toastTheme->GetMinFontSize()); + toastTextStyle.SetMaxLines(toastTheme->GetTextMaxLines()); + toastTextStyle.SetTextOverflow(TextOverflow::ELLIPSIS); + toastTextStyle.SetTextAlign(TextAlign::CENTER); + } + text->SetTextStyle(toastTextStyle); +} + +void ToastComponent::BuildPackageBox(const RefPtr& context, const RefPtr& box, + const RefPtr& text, const RefPtr& toastTheme) +{ + if (!context || !box || !text || !toastTheme) { + return; + } + // create base box for background of toast + RefPtr baseBox = AceType::MakeRefPtr(); + // baseBox set back decoration + RefPtr backDecoration = AceType::MakeRefPtr(); + backDecoration->SetBackgroundColor(toastTheme->GetBackgroundColor()); + backDecoration->AddShadow(ShadowConfig::DefaultShadowL); + Border border; + border.SetBorderRadius(toastTheme->GetRadius()); + backDecoration->SetBorder(border); + baseBox->SetBackDecoration(backDecoration); + // baseBox set padding + baseBox->SetPadding(toastTheme->GetPadding()); + auto deviceType = SystemProperties::GetDeviceType(); + if (deviceType == DeviceType::WATCH) { + // baseBox set constraints + LayoutParam constraints; + constraints.SetMinSize(Size( + context->NormalizeToPx(toastTheme->GetMinWidth()), context->NormalizeToPx(toastTheme->GetMinHeight()))); + constraints.SetMaxSize(Size(Size::INFINITE_SIZE, Size::INFINITE_SIZE)); + baseBox->SetConstraints(constraints); + } else { + baseBox->SetGridLayoutInfo(GridSystemManager::GetInstance().GetInfoByType(GridColumnType::TOAST)); + } + // baseBox set child + if (deviceType == DeviceType::WATCH) { + baseBox->SetMargin(toastTheme->GetMarging()); + baseBox->SetChild(text); + } else { + // Single line center alignment, multiple lines Left alignment. + std::list> rowChildren; + rowChildren.emplace_back(text); + RefPtr row = AceType::MakeRefPtr(FlexAlign::CENTER, FlexAlign::CENTER, rowChildren); + row->SetMainAxisSize(MainAxisSize::MIN); + baseBox->SetAlignment(Alignment::CENTER); + baseBox->SetChild(row); + } + + box->SetFlex(BoxFlex::FLEX_X); + box->SetChild(baseBox); +} + +void ToastComponent::Show(const RefPtr& context, const std::string& message, int32_t duration, + const std::string& bottom, bool isRightToLeft) +{ + if (!context) { + LOGE("fail to show toast due to context is null"); + return; + } + auto stackElement = context->GetLastStack(); + if (!stackElement) { + return; + } + + auto themeManager = context->GetThemeManager(); + if (!themeManager) { + return; + } + auto toastTheme = themeManager->GetTheme(); + if (!toastTheme) { + return; + } + + RefPtr text = AceType::MakeRefPtr(message); + text->SetTextDirection((isRightToLeft ? TextDirection::RTL : TextDirection::LTR)); + BuildToastContent(text, toastTheme); + RefPtr box = AceType::MakeRefPtr(); + BuildPackageBox(context, box, text, toastTheme); + + int32_t toastId = GenerateNextToastId(); + auto deviceType = SystemProperties::GetDeviceType(); + // get toast animation playing time + toastDurationTime_ = duration; + Dimension bottomPosition = StringUtils::StringToDimension(bottom); + RefPtr tween = + AceType::MakeRefPtr(TweenComponent::AllocTweenComponentId(), TOAST_TWEEN_NAME, box); + InitToastAnimation(); + tween->SetTweenOption(tweenOption_); + tween->SetTweenOperation(TweenOperation::PLAY); + // to prevent flicking when play animation + tween->SetIsFirstFrameShow(false); + + // prevent layer from clipping shadows + tween->SetShadow(ShadowConfig::DefaultShadowL); + + if (deviceType == DeviceType::WATCH) { + // center alignment + std::list> alignChildren; + alignChildren.emplace_back(tween); + RefPtr align = AceType::MakeRefPtr(alignChildren, Alignment::CENTER); + stackElement->PushToastComponent(align, toastId); + } else { + RefPtr positioned = AceType::MakeRefPtr(tween); + positioned->SetBottom(bottomPosition.IsValid() ? bottomPosition : toastTheme->GetBottom()); + stackElement->PushToastComponent(positioned, toastId); + } + + WeakPtr weak = stackElement; + context->GetTaskExecutor()->PostDelayedTask([weak, toastId] { + auto ref = weak.Upgrade(); + if (ref == nullptr) { + return; + } + ref->PopToastComponent(toastId); + }, + TaskExecutor::TaskType::UI, duration); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/toast/toast_component.h b/frameworks/core/components/toast/toast_component.h new file mode 100644 index 00000000..536bb35b --- /dev/null +++ b/frameworks/core/components/toast/toast_component.h @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOAST_TOAST_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOAST_TOAST_COMPONENT_H + +#include + +#include "base/memory/ace_type.h" +#include "base/utils/singleton.h" +#include "core/components/box/box_component.h" +#include "core/components/common/properties/tween_option.h" +#include "core/components/text/text_component.h" +#include "core/components/toast/toast_theme.h" +#include "core/pipeline/pipeline_context.h" + +namespace OHOS::Ace { + +class ToastComponent final : public Singleton { + DECLARE_SINGLETON(ToastComponent); + +public: + void Show(const RefPtr& context, const std::string& message, int32_t duration, + const std::string& bottom, bool isRightToLeft); + +private: + static int32_t GenerateNextToastId(); + void BuildToastContent(const RefPtr& text, const RefPtr& toastTheme); + void BuildPackageBox(const RefPtr& context, const RefPtr& box, + const RefPtr& text, const RefPtr& toastTheme); + void InitToastAnimation(); + + TweenOption tweenOption_; + float toastDurationTime_ = 0.0f; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOAST_TOAST_COMPONENT_H diff --git a/frameworks/core/components/toast/toast_theme.h b/frameworks/core/components/toast/toast_theme.h new file mode 100644 index 00000000..9bae51bc --- /dev/null +++ b/frameworks/core/components/toast/toast_theme.h @@ -0,0 +1,160 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOAST_TOAST_THEME_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOAST_TOAST_THEME_H + +#include "core/components/common/properties/color.h" +#include "core/components/common/properties/edge.h" +#include "core/components/common/properties/text_style.h" +#include "core/components/theme/theme.h" +#include "core/components/theme/theme_constants.h" + +namespace OHOS::Ace { + +/** + * ToastTheme defines color and styles of Toast. ToastTheme should be built + * using ToastTheme::Builder. + */ +class ToastTheme : public virtual Theme { + DECLARE_ACE_TYPE(ToastTheme, Theme); + +public: + class Builder { + public: + Builder() = default; + ~Builder() = default; + + RefPtr Build(const RefPtr& themeConstants) const + { + RefPtr theme = AceType::Claim(new ToastTheme()); + if (!themeConstants) { + return theme; + } + // init theme from global data + theme->padding_ = Edge(themeConstants->GetDimension(THEME_TOAST_PADDING_HORIZONTAL).Value(), + themeConstants->GetDimension(THEME_TOAST_PADDING_VERTICAL).Value(), + themeConstants->GetDimension(THEME_TOAST_PADDING_HORIZONTAL).Value(), + themeConstants->GetDimension(THEME_TOAST_PADDING_VERTICAL).Value(), + themeConstants->GetDimension(THEME_TOAST_PADDING_VERTICAL).Unit()); + theme->maxWidth_ = themeConstants->GetDimension(THEME_TOAST_CONTENT_MAX_WIDTH); + theme->minWidth_ = themeConstants->GetDimension(THEME_TOAST_CONTENT_MIN_WIDTH); + theme->minHeight_ = themeConstants->GetDimension(THEME_TOAST_CONTENT_MIN_HEIGHT); + theme->backgroundColor_ = themeConstants->GetColor(THEME_TOAST_BACKGROUND_COLOR); + theme->textStyle_.SetFontWeight(FontWeight(themeConstants->GetInt(THEME_TOAST_TEXT_TEXT_FONTWEIGHT))); + theme->textStyle_.SetTextColor(themeConstants->GetColor(THEME_TOAST_TEXT_COLOR)); + theme->textStyle_.SetFontSize(themeConstants->GetDimension(THEME_TOAST_TEXT_FONTSIZE)); + theme->radius_ = Radius( + themeConstants->GetDimension(THEME_TOAST_RADIUS), themeConstants->GetDimension(THEME_TOAST_RADIUS)); + theme->bottom_ = themeConstants->GetDimension(THEME_TOAST_BOTTOM); + theme->marging_ = Edge(themeConstants->GetDimension(THEME_TOAST_MARGIN).Value(), 0.0, + themeConstants->GetDimension(THEME_TOAST_MARGIN).Value(), 0.0, + themeConstants->GetDimension(THEME_TOAST_MARGIN).Unit()); + theme->minFontSize_ = themeConstants->GetDimension(THEME_TOAST_TEXT_FONTSIZE_MIN); + auto textMaxLines = themeConstants->GetInt(THEME_TOAST_TEXT_MAX_LINES); + theme->textMaxLines_ = textMaxLines < 0 ? theme->textMaxLines_ : static_cast(textMaxLines); + ParsePattern(themeConstants->GetThemeStyle(), theme); + return theme; + } + private: + void ParsePattern(const RefPtr& themeStyle, const RefPtr& theme) const + { + if (!themeStyle) { + return; + } + theme->textStyle_.SetFontSize(themeStyle->GetAttr(THEME_ATTR_TEXT_SIZE_BODY2, 0.0_vp)); + theme->textStyle_.SetTextColor(themeStyle->GetAttr(THEME_ATTR_TEXT_COLOR_PRIMARY_INVERSE, + Color::BLACK)); + theme->backgroundColor_ = themeStyle->GetAttr(THEME_ATTR_COLOR_TOAST_BG, Color::BLACK); + } + }; + + ~ToastTheme() override = default; + + const Edge& GetPadding() const + { + return padding_; + } + + const Dimension& GetMaxWidth() const + { + return maxWidth_; + } + + const Dimension& GetMinWidth() const + { + return minWidth_; + } + + const Dimension& GetMinHeight() const + { + return minHeight_; + } + + const Color& GetBackgroundColor() const + { + return backgroundColor_; + } + + const TextStyle& GetTextStyle() const + { + return textStyle_; + } + + const Radius& GetRadius() const + { + return radius_; + } + + const Dimension& GetBottom() const + { + return bottom_; + } + + const Dimension& GetMinFontSize() const + { + return minFontSize_; + } + + uint32_t GetTextMaxLines() const + { + return textMaxLines_; + } + + const Edge& GetMarging() const + { + return marging_; + } + +protected: + ToastTheme() = default; + +private: + Edge padding_; + Dimension maxWidth_; + Dimension minWidth_; + Dimension minHeight_; + Color backgroundColor_; + TextStyle textStyle_; + Radius radius_; + Dimension bottom_; + Dimension minFontSize_; + uint32_t textMaxLines_ = 1; + Edge marging_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOAST_TOAST_THEME_H diff --git a/frameworks/core/components/toggle/BUILD.gn b/frameworks/core/components/toggle/BUILD.gn new file mode 100644 index 00000000..2bfbbc98 --- /dev/null +++ b/frameworks/core/components/toggle/BUILD.gn @@ -0,0 +1,23 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("toggle") { + sources = [ + "flutter_render_toggle.cpp", + "render_toggle.cpp", + "toggle_component.cpp", + "toggle_element.cpp", + ] +} diff --git a/frameworks/core/components/toggle/flutter_render_toggle.cpp b/frameworks/core/components/toggle/flutter_render_toggle.cpp new file mode 100644 index 00000000..d70d7d93 --- /dev/null +++ b/frameworks/core/components/toggle/flutter_render_toggle.cpp @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/toggle/flutter_render_toggle.h" + +#include "core/components/transform/flutter_render_transform.h" +#include "core/pipeline/base/flutter_render_context.h" + +namespace OHOS::Ace { + +RefPtr RenderToggle::Create() +{ + return AceType::MakeRefPtr(); +} + +RenderLayer FlutterRenderToggle::GetRenderLayer() +{ + if (!transformLayer_) { + transformLayer_ = AceType::MakeRefPtr(Matrix4::CreateIdentity(), 0.0, 0.0); + } + return AceType::RawPtr(transformLayer_); +} + +void FlutterRenderToggle::UpdateLayer() +{ + float translateX = GetLayoutSize().Width() / 2.0 * (1.0 - scale_); + float translateY = GetLayoutSize().Height() / 2.0 * (1.0 - scale_); + Matrix4 translateMatrix = Matrix4::CreateTranslate(translateX, translateY, 0.0); + Matrix4 scaleMatrix = Matrix4::CreateScale(scale_, scale_, 1.0); + Matrix4 transformMatrix = translateMatrix * scaleMatrix; + transformMatrix = FlutterRenderTransform::GetTransformByOffset(transformMatrix, GetGlobalOffset()); + if (transformLayer_) { + transformLayer_->Update(transformMatrix); + } +} + +void FlutterRenderToggle::Paint(RenderContext& context, const Offset& offset) +{ + flutter::Canvas* canvas = static_cast(context).GetCanvas(); + if (canvas == nullptr) { + LOGE("Paint canvas is null"); + return; + } + UpdateLayer(); + DrawToggle(*canvas, offset); + RenderNode::Paint(context, offset); +} + +Size FlutterRenderToggle::Measure() +{ + toggleSize_ = GetLayoutParam().GetMaxSize(); + if (NearEqual(GetLayoutParam().GetMaxSize().Width(), Size::INFINITE_SIZE) || (!widthDefined_)) { + toggleSize_.SetWidth(0.0); + } + return toggleSize_; +} + +void FlutterRenderToggle::DrawToggle(flutter::Canvas& canvas, const Offset& offset) const +{ + flutter::Paint paint; + paint.paint()->setColor(GetStatusColor().GetValue()); + paint.paint()->setStyle(SkPaint::Style::kFill_Style); + paint.paint()->setAntiAlias(true); + + flutter::RRect rRect; + flutter::PaintData paintData; + double radius = toggleSize_.Height() / 2; + rRect.sk_rrect.setRectXY(SkRect::MakeIWH(toggleSize_.Width(), toggleSize_.Height()), radius, radius); + rRect.sk_rrect.offset(offset.GetX(), offset.GetY()); + canvas.drawRRect(rRect, paint, paintData); +} + +Color FlutterRenderToggle::GetStatusColor() const +{ + auto toggle = toggleComponent_.Upgrade(); + if (!toggle) { + LOGE("fail to get status color due to toggle is null"); + return Color::BLACK; + } + auto checkColor = toggle->GetCheckedColor(); + auto pressedColor = toggle->GetPressedBlendColor(); + auto backgroundColor = toggle->GetBackgroundColor(); + if (toggle->GetCheckedState()) { + if (isPressed_) { + return checkColor.BlendColor(pressedColor); + } + return checkColor; + } + if (isPressed_) { + return backgroundColor.BlendColor(pressedColor); + } + return backgroundColor; +} + +bool FlutterRenderToggle::HasEffectiveTransform() const +{ + if (!transformLayer_) { + return false; + } + return !transformLayer_->GetMatrix4().IsIdentityMatrix(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/toggle/flutter_render_toggle.h b/frameworks/core/components/toggle/flutter_render_toggle.h new file mode 100644 index 00000000..fd0ce951 --- /dev/null +++ b/frameworks/core/components/toggle/flutter_render_toggle.h @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOGGLE_FLUTTER_RENDER_TOGGLE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOGGLE_FLUTTER_RENDER_TOGGLE_H + +#include "flutter/lib/ui/painting/canvas.h" + +#include "core/components/toggle/render_toggle.h" +#include "core/pipeline/layers/transform_layer.h" + +namespace OHOS::Ace { + +class FlutterRenderToggle : public RenderToggle { + DECLARE_ACE_TYPE(FlutterRenderToggle, RenderToggle); + +public: + FlutterRenderToggle() = default; + ~FlutterRenderToggle() override = default; + + RenderLayer GetRenderLayer() override; + bool HasEffectiveTransform() const override; + void Paint(RenderContext& context, const Offset& offset) override; + +private: + Size Measure() override; + void DrawToggle(flutter::Canvas& canvas, const Offset& offset) const; + void UpdateLayer(); + Color GetStatusColor() const; + + RefPtr transformLayer_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOGGLE_FLUTTER_RENDER_TOGGLE_H diff --git a/frameworks/core/components/toggle/render_toggle.cpp b/frameworks/core/components/toggle/render_toggle.cpp new file mode 100644 index 00000000..fb830a50 --- /dev/null +++ b/frameworks/core/components/toggle/render_toggle.cpp @@ -0,0 +1,262 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/toggle/render_toggle.h" + +#include "base/log/log.h" +#include "core/components/common/properties/alignment.h" +#include "core/event/ace_event_helper.h" + +namespace OHOS::Ace { +namespace { + +constexpr int32_t HOVER_ANIMATION_DURATION = 250; + +} // namespace + +RenderToggle::RenderToggle() +{ + clickRecognizer_ = AceType::MakeRefPtr(); + clickRecognizer_->SetOnClick([wp = AceType::WeakClaim(this)](const ClickInfo&) { + auto toggle = wp.Upgrade(); + if (toggle) { + toggle->HandleClickEvent(); + } + }); + + auto wp = AceType::WeakClaim(this); + touchRecognizer_ = AceType::MakeRefPtr(); + touchRecognizer_->SetOnTouchDown([wp](const TouchEventInfo&) { + auto toggle = wp.Upgrade(); + if (toggle) { + toggle->HandleTouchEvent(true); + } + }); + touchRecognizer_->SetOnTouchUp([wp](const TouchEventInfo&) { + auto toggle = wp.Upgrade(); + if (toggle) { + toggle->HandleTouchEvent(false); + } + }); + touchRecognizer_->SetOnTouchMove([wp](const TouchEventInfo& info) { + auto toggle = wp.Upgrade(); + if (toggle) { + toggle->HandleMoveEvent(info); + } + }); +} + +void RenderToggle::HandleClickEvent() +{ + auto toggle = toggleComponent_.Upgrade(); + if (!toggle) { + LOGE("fail to perform click due to toggle is null"); + return; + } + if (onClick_) { + onClick_(); + } + auto checkValue = toggle->GetCheckedState(); + toggle->SetCheckedState(!checkValue); + MarkNeedRender(); + std::string checked = (!checkValue) ? "true" : "false"; + std::string result = std::string(R"("change",{"checked":)").append(checked.append("},null")); + if (onChange_) { + onChange_(result); + } +} + +void RenderToggle::HandleTouchEvent(bool touched) +{ + isPressed_ = touched; + if (isPressed_) { + isMoveEventValid_ = true; + } + if (isMoveEventValid_) { + MarkNeedRender(); + } +} + +void RenderToggle::HandleMoveEvent(const TouchEventInfo& info) +{ + if (!isMoveEventValid_ || info.GetTouches().empty()) { + return; + } + const auto& locationInfo = info.GetTouches().front(); + double moveX = locationInfo.GetLocalLocation().GetX(); + double moveY = locationInfo.GetLocalLocation().GetY(); + if ((LessNotEqual(moveX, 0.0) || GreatNotEqual(moveX, toggleSize_.Width())) + || (LessNotEqual(moveY, 0.0) || GreatNotEqual(moveY, toggleSize_.Height()))) { + isPressed_ = false; + isMoveEventValid_ = false; + MarkNeedRender(); + } +} + +void RenderToggle::OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) +{ + if ((!touchRecognizer_) || (!clickRecognizer_)) { + return; + } + touchRecognizer_->SetCoordinateOffset(coordinateOffset); + result.emplace_back(touchRecognizer_); + result.emplace_back(clickRecognizer_); +} + +void RenderToggle::UpdateFocusAnimation() +{ + auto context = context_.Upgrade(); + if (!context) { + return; + } + double radius = toggleSize_.Height() / 2.0; + context->ShowFocusAnimation(RRect::MakeRRect(Rect(Offset(0, 0), toggleSize_), Radius(radius)), + Color(), GetGlobalOffset()); + context->ShowShadow( RRect::MakeRRect(Rect(Offset(0, 0), toggleSize_), Radius(radius)), GetGlobalOffset()); +} + +void RenderToggle::OnMouseHoverEnterTest() +{ + ResetController(hoverControllerExit_); + if (!hoverControllerEnter_) { + hoverControllerEnter_ = AceType::MakeRefPtr(context_); + } + scaleAnimationEnter_ = AceType::MakeRefPtr>(); + CreateFloatAnimation(scaleAnimationEnter_, 1.0, 1.05); + hoverControllerEnter_->AddInterpolator(scaleAnimationEnter_); + hoverControllerEnter_->SetDuration(HOVER_ANIMATION_DURATION); + hoverControllerEnter_->Play(); + hoverControllerEnter_->SetFillMode(FillMode::FORWARDS); +} + +void RenderToggle::OnMouseHoverExitTest() +{ + ResetController(hoverControllerEnter_); + if (!hoverControllerExit_) { + hoverControllerExit_ = AceType::MakeRefPtr(context_); + } + scaleAnimationExit_ = AceType::MakeRefPtr>(); + auto begin = scale_; + CreateFloatAnimation(scaleAnimationExit_, begin, 1.0); + hoverControllerExit_->AddInterpolator(scaleAnimationExit_); + hoverControllerExit_->SetDuration(HOVER_ANIMATION_DURATION); + hoverControllerExit_->Play(); + hoverControllerExit_->SetFillMode(FillMode::FORWARDS); +} + +void RenderToggle::OnMouseClickDownAnimation() +{ + ResetController(clickControllerUp_); + if (!clickControllerDown_) { + clickControllerDown_ = AceType::MakeRefPtr(context_); + } + scaleAnimationDown_ = AceType::MakeRefPtr>(); + auto begin = scale_; + CreateFloatAnimation(scaleAnimationDown_, begin, 1.0); + clickControllerDown_->AddInterpolator(scaleAnimationDown_); + clickControllerDown_->SetDuration(HOVER_ANIMATION_DURATION); + clickControllerDown_->Play(); + clickControllerDown_->SetFillMode(FillMode::FORWARDS); +} + +void RenderToggle::OnMouseClickUpAnimation() +{ + ResetController(clickControllerDown_); + if (!clickControllerUp_) { + clickControllerUp_ = AceType::MakeRefPtr(context_); + } + scaleAnimationUp_ = AceType::MakeRefPtr>(); + auto begin = scale_; + CreateFloatAnimation(scaleAnimationUp_, begin, 1.05); + clickControllerUp_->AddInterpolator(scaleAnimationUp_); + clickControllerUp_->SetDuration(HOVER_ANIMATION_DURATION); + clickControllerUp_->Play(); + clickControllerUp_->SetFillMode(FillMode::FORWARDS); +} + +void RenderToggle::CreateFloatAnimation(RefPtr>& floatAnimation, float beginValue, + float endValue) +{ + if (!floatAnimation) { + return; + } + auto keyframeBegin = AceType::MakeRefPtr>(0.0, beginValue); + auto keyframeEnd = AceType::MakeRefPtr>(1.0, endValue); + floatAnimation->AddKeyframe(keyframeBegin); + floatAnimation->AddKeyframe(keyframeEnd); + floatAnimation->AddListener([weakToggle = AceType::WeakClaim(this)](float value) { + auto toggle = weakToggle.Upgrade(); + if (toggle) { + toggle->scale_ = value; + toggle->MarkNeedRender(); + } + }); +} + +void RenderToggle::ResetController(RefPtr& controller) +{ + if (controller) { + if (!controller->IsStopped()) { + controller->Stop(); + } + controller->ClearInterpolators(); + } +} + +void RenderToggle::Update(const RefPtr& component) +{ + auto toggle = AceType::DynamicCast(component); + if (!toggle) { + LOGE("Update error, toggle component is null"); + return; + } + toggleComponent_ = toggle; + widthDefined_ = !NearZero(toggle->GetWidth().Value()); + onClick_ = AceAsyncEvent::Create(toggle->GetClickEvent(), context_); + onChange_ = AceAsyncEvent::Create(toggle->GetChangeEvent(), context_); + MarkNeedLayout(); +} + +void RenderToggle::PerformLayout() +{ + auto toggle = toggleComponent_.Upgrade(); + if (!toggle) { + LOGE("fail to perform layout due to toggle is null"); + return; + } + toggleSize_ = Size(NormalizeToPx(toggle->GetWidth()), NormalizeToPx(toggle->GetHeight())); + Measure(); + LayoutParam innerLayoutParam; + double maxWidth = widthDefined_ ? toggleSize_.Width() : GetLayoutParam().GetMaxSize().Width(); + innerLayoutParam.SetMaxSize(Size(maxWidth, toggleSize_.Height())); + RefPtr child; + Size childrenSize; + if (!GetChildren().empty()) { + child = GetChildren().front(); + child->Layout(innerLayoutParam); + childrenSize.SetWidth(child->GetLayoutSize().Width()); + childrenSize.SetHeight(child->GetLayoutSize().Height()); + } + Size layoutSize = widthDefined_ ? toggleSize_ : Size(childrenSize.Width(), toggleSize_.Height()); + layoutSize = GetLayoutParam().Constrain(layoutSize); + SetLayoutSize(layoutSize); + toggleSize_ = GetLayoutSize(); + if (child) { + child->SetPosition(Alignment::GetAlignPosition(GetLayoutSize(), child->GetLayoutSize(), Alignment::CENTER)); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/toggle/render_toggle.h b/frameworks/core/components/toggle/render_toggle.h new file mode 100644 index 00000000..d0e5c43b --- /dev/null +++ b/frameworks/core/components/toggle/render_toggle.h @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOGGLE_RENDER_TOGGLE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOGGLE_RENDER_TOGGLE_H + +#include "base/utils/system_properties.h" +#include "core/animation/animator.h" +#include "core/animation/keyframe_animation.h" +#include "core/components/common/properties/color.h" +#include "core/components/toggle/toggle_component.h" +#include "core/gestures/click_recognizer.h" +#include "core/gestures/raw_recognizer.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderToggle : public RenderNode { + DECLARE_ACE_TYPE(RenderToggle, RenderNode); + +public: + ~RenderToggle() override = default; + + static RefPtr Create(); + + void Update(const RefPtr& component) override; + void PerformLayout() override; + void UpdateFocusAnimation(); + +protected: + RenderToggle(); + virtual Size Measure() = 0; + void OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) override; + void HandleClickEvent(); + void HandleTouchEvent(bool touched); + void HandleMoveEvent(const TouchEventInfo& info); + void OnMouseHoverEnterTest() override; + void OnMouseHoverExitTest() override; + void OnMouseClickDownAnimation() override; + void OnMouseClickUpAnimation() override; + + WeakPtr toggleComponent_; + + RefPtr clickRecognizer_; + RefPtr touchRecognizer_; + RefPtr hoverControllerEnter_; + RefPtr hoverControllerExit_; + RefPtr clickControllerDown_; + RefPtr clickControllerUp_; + RefPtr> scaleAnimationEnter_; + RefPtr> scaleAnimationExit_; + RefPtr> scaleAnimationUp_; + RefPtr> scaleAnimationDown_; + + bool widthDefined_ { false }; + bool isPressed_ { false }; + bool isMoveEventValid_ { false }; + bool isFocus_ { false }; + float scale_ { 1.0f }; + + Size toggleSize_; + std::function onClick_; + std::function onChange_; + +private: + void ResetController(RefPtr& controller); + void CreateFloatAnimation(RefPtr>& floatAnimation, float beginValue, float endValue); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOGGLE_RENDER_TOGGLE_H diff --git a/frameworks/core/components/toggle/toggle_component.cpp b/frameworks/core/components/toggle/toggle_component.cpp new file mode 100644 index 00000000..73c1b557 --- /dev/null +++ b/frameworks/core/components/toggle/toggle_component.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/toggle/toggle_component.h" + +#include "core/components/toggle/render_toggle.h" +#include "core/components/toggle/toggle_element.h" + +namespace OHOS::Ace { + +RefPtr ToggleComponent::CreateRenderNode() +{ + return RenderToggle::Create(); +} + +RefPtr ToggleComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/toggle/toggle_component.h b/frameworks/core/components/toggle/toggle_component.h new file mode 100644 index 00000000..3bfd4656 --- /dev/null +++ b/frameworks/core/components/toggle/toggle_component.h @@ -0,0 +1,127 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOGGLE_TOGGLE_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOGGLE_TOGGLE_COMPONENT_H + +#include "base/geometry/dimension.h" +#include "core/pipeline/base/sole_child_component.h" + +namespace OHOS::Ace { + +class ACE_EXPORT ToggleComponent : public SoleChildComponent { + DECLARE_ACE_TYPE(ToggleComponent, SoleChildComponent); + +public: + ToggleComponent() = default; + ~ToggleComponent() override = default; + + RefPtr CreateRenderNode() override; + RefPtr CreateElement() override; + + bool GetCheckedState() const + { + return isChecked_; + } + + const Dimension& GetWidth() const + { + return width_; + } + + const Dimension& GetHeight() const + { + return height_; + } + + const Color& GetBackgroundColor() const + { + return backgroundColor_; + } + + const Color& GetPressedBlendColor() const + { + return pressedBlendColor_; + } + + const Color& GetCheckedColor() const + { + return checkedColor_; + } + + const EventMarker& GetClickEvent() const + { + return clickEvent_; + } + + const EventMarker& GetChangeEvent() const + { + return changeEvent_; + } + + void SetCheckedState(bool state) + { + isChecked_ = state; + } + + void SetWidth(const Dimension& width) + { + width_ = width; + } + + void SetHeight(const Dimension& height) + { + height_ = height; + } + + void SetBackgroundColor(const Color& color) + { + backgroundColor_ = color; + } + + void SetCheckedColor(const Color& color) + { + checkedColor_ = color; + } + + void SetPressedBlendColor(const Color& color) + { + pressedBlendColor_ = color; + } + + void SetClickEvent(const EventMarker& event) + { + clickEvent_ = event; + } + + void SetChangeEvent(const EventMarker& event) + { + changeEvent_ = event; + } + +private: + bool isChecked_ { false }; + Color backgroundColor_; + Color checkedColor_; + Color pressedBlendColor_; + EventMarker clickEvent_; + EventMarker changeEvent_; + Dimension width_; + Dimension height_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOGGLE_TOGGLE_COMPONENT_H diff --git a/frameworks/core/components/toggle/toggle_element.cpp b/frameworks/core/components/toggle/toggle_element.cpp new file mode 100644 index 00000000..4f47882e --- /dev/null +++ b/frameworks/core/components/toggle/toggle_element.cpp @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/toggle/toggle_element.h" + +namespace OHOS::Ace { + +void ToggleElement::Update() +{ + RenderElement::Update(); + toggle_ = AceType::DynamicCast(renderNode_); +} + +void ToggleElement::OnFocus() +{ + if (!toggle_) { + return; + } + toggle_->UpdateFocusAnimation(); + toggle_->ChangeStatus(RenderStatus::FOCUS); +} + +void ToggleElement::OnBlur() +{ + if (!toggle_) { + return; + } + toggle_->ChangeStatus(RenderStatus::BLUR); + auto context = context_.Upgrade(); + if (!context) { + return; + } + context->CancelFocusAnimation(); + context->CancelShadow(); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/toggle/toggle_element.h b/frameworks/core/components/toggle/toggle_element.h new file mode 100644 index 00000000..0f219a22 --- /dev/null +++ b/frameworks/core/components/toggle/toggle_element.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOGGLE_TOGGLE_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOGGLE_TOGGLE_ELEMENT_H + +#include "core/components/toggle/render_toggle.h" +#include "core/components/toggle/toggle_component.h" +#include "core/focus/focus_node.h" +#include "core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +class ToggleElement : public SoleChildElement, public FocusNode { + DECLARE_ACE_TYPE(ToggleElement, SoleChildElement, FocusNode); + +public: + void Update() override; + +private: + void OnFocus() override; + void OnBlur() override; + + RefPtr toggle_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOGGLE_TOGGLE_ELEMENT_H diff --git a/frameworks/core/components/toggle/toggle_theme.h b/frameworks/core/components/toggle/toggle_theme.h new file mode 100644 index 00000000..e6ecbf3e --- /dev/null +++ b/frameworks/core/components/toggle/toggle_theme.h @@ -0,0 +1,132 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOGGLE_TOGGLE_THEME_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOGGLE_TOGGLE_THEME_H + +#include "core/components/common/properties/color.h" +#include "core/components/common/properties/text_style.h" +#include "core/components/theme/theme.h" +#include "core/components/theme/theme_constants.h" + +namespace OHOS::Ace { + +/** + * ToggleTheme defines color and styles of ToggleComponent. ToggleTheme should be built + * using ToggleTheme::Builder. + */ +class ToggleTheme : public virtual Theme { + DECLARE_ACE_TYPE(ToggleTheme, Theme); + +public: + class Builder { + public: + Builder() = default; + ~Builder() = default; + + RefPtr Build(const RefPtr& themeConstants) const + { + RefPtr theme = AceType::Claim(new ToggleTheme()); + if (!themeConstants) { + return theme; + } + theme->backgroundColor_ = themeConstants->GetColor(THEME_TOGGLE_BACKGROUND_COLOR); + theme->checkedColor_ = themeConstants->GetColor(THEME_TOGGLE_CHECKED_COLOR); + theme->textStyle_.SetTextColor(themeConstants->GetColor(THEME_TOGGLE_TEXT_COLOR)); + theme->textStyle_.SetFontSize(themeConstants->GetDimension(THEME_TOGGLE_TEXT_FONTSIZE)); + theme->textStyle_.SetFontWeight(FontWeight(themeConstants->GetInt(THEME_TOGGLE_TEXT_FONTWEIGHT))); + theme->height_ = themeConstants->GetDimension(THEME_TOGGLE_HEIGHT); + theme->padding_ = Edge(themeConstants->GetDimension(THEME_TOGGLE_PADDING_HORIZONTAL).Value(), + themeConstants->GetDimension(THEME_TOGGLE_PADDING_VERTICAL).Value(), + themeConstants->GetDimension(THEME_TOGGLE_PADDING_HORIZONTAL).Value(), + themeConstants->GetDimension(THEME_TOGGLE_PADDING_VERTICAL).Value(), + themeConstants->GetDimension(THEME_TOGGLE_PADDING_VERTICAL).Unit()); + theme->disabledAlpha_ = themeConstants->GetDouble(THEME_TOGGLE_DISABLED_ALPHA); + theme->pressedBlendColor_ = themeConstants->GetColor(THEME_TOGGLE_PRESSED_BLEND_COLOR); + ParsePattern(themeConstants->GetThemeStyle(), theme); + return theme; + } + + private: + void ParsePattern(const RefPtr& themeStyle, const RefPtr& theme) const + { + if (!themeStyle) { + return; + } + auto togglePattern = themeStyle->GetAttr>(THEME_PATTERN_TOGGLE, nullptr); + if (!togglePattern) { + return; + } + theme->backgroundColor_ = themeStyle->GetAttr(TOGGLE_BACKGROUND_COLOR, Color()); + theme->checkedColor_ = togglePattern->GetAttr(TOGGLE_CHECKED_COLOR, Color()) + .BlendOpacity(themeStyle->GetAttr(THEME_ATTR_HIGHLIGHT_BACKGROUND_ALPHA, 0.0)); + theme->textStyle_.SetTextColor(togglePattern->GetAttr(TOGGLE_TEXT_COLOR, Color())); + theme->pressedBlendColor_ = themeStyle->GetAttr(THEME_ATTR_COLOR_CLICK_EFFECT, Color()); + } + }; + + ~ToggleTheme() override = default; + + const Color& GetBackgroundColor() const + { + return backgroundColor_; + } + + const Color& GetCheckedColor() const + { + return checkedColor_; + } + + const TextStyle& GetTextStyle() const + { + return textStyle_; + } + + const Dimension& GetHeight() const + { + return height_; + } + + const Edge& GetPadding() const + { + return padding_; + } + + const Color& GetPressedBlendColor() const + { + return pressedBlendColor_; + } + + double GetDisabledAlpha() const + { + return disabledAlpha_; + } + +protected: + ToggleTheme() = default; + +private: + Color backgroundColor_; + Color checkedColor_; + Color pressedBlendColor_; + TextStyle textStyle_; + Dimension height_; + Edge padding_; + double disabledAlpha_ { 1.0 }; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOGGLE_TOGGLE_THEME_H diff --git a/frameworks/core/components/tool_bar/BUILD.gn b/frameworks/core/components/tool_bar/BUILD.gn new file mode 100644 index 00000000..77086007 --- /dev/null +++ b/frameworks/core/components/tool_bar/BUILD.gn @@ -0,0 +1,26 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("tool_bar") { + sources = [ + "flutter_render_tool_bar.cpp", + "flutter_render_tool_bar_item.cpp", + "render_tool_bar.cpp", + "render_tool_bar_item.cpp", + "tool_bar_component.cpp", + "tool_bar_item_component.cpp", + "tool_bar_item_element.cpp", + ] +} diff --git a/frameworks/core/components/tool_bar/flutter_render_tool_bar.cpp b/frameworks/core/components/tool_bar/flutter_render_tool_bar.cpp new file mode 100644 index 00000000..c4b1a98c --- /dev/null +++ b/frameworks/core/components/tool_bar/flutter_render_tool_bar.cpp @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/tool_bar/flutter_render_tool_bar.h" + +namespace OHOS::Ace { + +using namespace Flutter; + +RefPtr RenderToolBar::Create() +{ + return AceType::MakeRefPtr(); +} + +RenderLayer FlutterRenderToolBar::GetRenderLayer() +{ + if (!layer_) { + layer_ = AceType::MakeRefPtr( + 0.0, GetLayoutSize().Width(), 0.0, GetLayoutSize().Height(), Clip::HARD_EDGE); + } + return AceType::RawPtr(layer_); +} + +void FlutterRenderToolBar::Paint(RenderContext& context, const Offset& offset) +{ + layer_->SetClip(0.0, GetLayoutSize().Width(), 0.0, GetLayoutSize().Height(), Clip::HARD_EDGE); + RenderToolBar::Paint(context, offset); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/tool_bar/flutter_render_tool_bar.h b/frameworks/core/components/tool_bar/flutter_render_tool_bar.h new file mode 100644 index 00000000..89c5423c --- /dev/null +++ b/frameworks/core/components/tool_bar/flutter_render_tool_bar.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOOL_BAR_FLUTTER_RENDER_TOOL_BAR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOOL_BAR_FLUTTER_RENDER_TOOL_BAR_H + +#include "core/components/tool_bar/render_tool_bar.h" +#include "core/pipeline/layers/clip_layer.h" + +namespace OHOS::Ace { + +class FlutterRenderToolBar : public RenderToolBar { + DECLARE_ACE_TYPE(FlutterRenderToolBar, RenderToolBar); + +public: + RenderLayer GetRenderLayer() override; + void Paint(RenderContext& context, const Offset& offset) override; + +private: + RefPtr layer_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOOL_BAR_FLUTTER_RENDER_TOOL_BAR_H diff --git a/frameworks/core/components/tool_bar/flutter_render_tool_bar_item.cpp b/frameworks/core/components/tool_bar/flutter_render_tool_bar_item.cpp new file mode 100644 index 00000000..697edd70 --- /dev/null +++ b/frameworks/core/components/tool_bar/flutter_render_tool_bar_item.cpp @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/tool_bar/flutter_render_tool_bar_item.h" + +#include "third_party/skia/include/core/SkMaskFilter.h" + +#include "core/components/transform/flutter_render_transform.h" +#include "core/pipeline/base/flutter_render_context.h" + +namespace OHOS::Ace { + +// for focus +constexpr Dimension TOOL_BAR_FOCUS_DEL_OFFSET = 4.0_vp; +constexpr Dimension TOOL_BAR_FOCUS_DEL_SIZE = 8.0_vp; + +using namespace Flutter; + +RefPtr RenderToolBarItem::Create() +{ + return AceType::MakeRefPtr(); +} + +RenderLayer FlutterRenderToolBarItem::GetRenderLayer() +{ + if (!clipLayer_) { + clipLayer_ = AceType::MakeRefPtr( + 0.0, GetLayoutSize().Width(), 0.0, GetLayoutSize().Height(), Clip::HARD_EDGE); + } + return AceType::RawPtr(clipLayer_); +} + +void FlutterRenderToolBarItem::Paint(RenderContext& context, const Offset& offset) +{ + LOGD("ToolBarItem Paint"); + clipLayer_->SetClip(0.0, GetLayoutSize().Width(), 0.0, GetLayoutSize().Height(), Clip::HARD_EDGE); + auto renderContext = AceType::DynamicCast(&context); + if (!renderContext) { + LOGE("Render context is null"); + return; + } + flutter::Canvas* canvas = renderContext->GetCanvas(); + if (canvas == nullptr) { + LOGE("Paint canvas is null"); + return; + } + + DrawShape(*canvas, Rect(offset, GetLayoutSize()), GetEventEffectColor(), NormalizeToPx(rrectRadius_)); + + if (onFocus_) { + DrawFocus(); + } + if (onHover_) { + DrawShape(*canvas, Rect(offset, GetLayoutSize()), hoverColor_, NormalizeToPx(rrectRadius_)); + } + + RenderToolBarItem::Paint(context, offset); +} + +void FlutterRenderToolBarItem::DrawFocus() +{ + Offset offset = + GetPosition() + Offset(NormalizeToPx(TOOL_BAR_FOCUS_DEL_OFFSET), NormalizeToPx(TOOL_BAR_FOCUS_DEL_OFFSET)); + Size layoutSize = + GetLayoutSize() - Size(NormalizeToPx(TOOL_BAR_FOCUS_DEL_SIZE), NormalizeToPx(TOOL_BAR_FOCUS_DEL_SIZE)); + Offset globalOffset = + GetGlobalOffset() + Offset(NormalizeToPx(TOOL_BAR_FOCUS_DEL_OFFSET), NormalizeToPx(TOOL_BAR_FOCUS_DEL_OFFSET)); + RequestFocusAnimation(globalOffset, Rect(offset, layoutSize), Radius(rrectRadius_)); +} + +void FlutterRenderToolBarItem::DrawShape( + flutter::Canvas& canvas, const Rect& paintRect, const Color& color, double radius) +{ + flutter::Paint paint; + flutter::RRect rRect; + flutter::PaintData paintData; + + paint.paint()->setColor(color.GetValue()); + rRect.sk_rrect.setRectXY(SkRect::MakeIWH(paintRect.Width(), paintRect.Height()), radius, radius); + rRect.sk_rrect.offset(paintRect.GetOffset().GetX(), paintRect.GetOffset().GetY()); + canvas.drawRRect(rRect, paint, paintData); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/tool_bar/flutter_render_tool_bar_item.h b/frameworks/core/components/tool_bar/flutter_render_tool_bar_item.h new file mode 100644 index 00000000..55c2d9a6 --- /dev/null +++ b/frameworks/core/components/tool_bar/flutter_render_tool_bar_item.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOOL_BAR_FLUTTER_RENDER_TOOL_BAR_ITEM_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOOL_BAR_FLUTTER_RENDER_TOOL_BAR_ITEM_H + +#include "flutter/lib/ui/painting/canvas.h" + +#include "core/components/tool_bar/render_tool_bar_item.h" +#include "core/pipeline/layers/clip_layer.h" +#include "core/pipeline/layers/picture_layer.h" + +namespace OHOS::Ace { + +class FlutterRenderToolBarItem : public RenderToolBarItem { + DECLARE_ACE_TYPE(FlutterRenderToolBarItem, RenderToolBarItem); + +public: + RenderLayer GetRenderLayer() override; + void Paint(RenderContext& context, const Offset& offset) override; + +private: + void DrawFocus(); + void DrawShape(flutter::Canvas& canvas, const Rect& paintRect, const Color& color, double radius); + + RefPtr clipLayer_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOOL_BAR_FLUTTER_RENDER_TOOL_BAR_ITEM_H diff --git a/frameworks/core/components/tool_bar/render_tool_bar.cpp b/frameworks/core/components/tool_bar/render_tool_bar.cpp new file mode 100644 index 00000000..478ded50 --- /dev/null +++ b/frameworks/core/components/tool_bar/render_tool_bar.cpp @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/tool_bar/render_tool_bar.h" + +#include "core/components/tool_bar/tool_bar_component.h" + +namespace OHOS::Ace { + +RenderToolBar::RenderToolBar() : RenderNode(true) {} + +void RenderToolBar::Update(const RefPtr& component) +{ + RefPtr toolBar = AceType::DynamicCast(component); + if (!toolBar) { + LOGE("ToolBarComponent is nullptr"); + return; + } + + toolBarsSize_ = toolBar->GetChildren().size(); +} + +void RenderToolBar::PerformLayout() +{ + toolBarWidth_ = GetLayoutParam().GetMaxSize().Width(); + toolBarHeight_ = 0.0; + actualWidth_ = 0.0; + + LayoutChildren(); + Size layoutSize = GetLayoutParam().Constrain(Size(toolBarWidth_, toolBarHeight_)); + SetLayoutSize(layoutSize); +} + +void RenderToolBar::LayoutChildren() +{ + if (toolBarsSize_ < 1) { + return; + } + const std::list>& children = GetChildren(); + LayoutParam innerLayoutParam = MakeInnerLayoutParam(); + + auto item = children.begin(); + for (; item != children.end(); ++item) { + (*item)->Layout(innerLayoutParam); + toolBarHeight_ = std::max((*item)->GetLayoutSize().Height(), toolBarHeight_); + (*item)->SetPosition(Offset(actualWidth_, (*item)->GetPosition().GetY())); + actualWidth_ += (*item)->GetLayoutSize().Width(); + } +} + +LayoutParam RenderToolBar::MakeInnerLayoutParam() const +{ + LayoutParam innerLayout = GetLayoutParam(); + auto gridSizeType = GridSystemManager::GetInstance().GetCurrentSize(); + auto columnInfo = GridSystemManager::GetInstance().GetInfoByType(GridColumnType::TOOL_BAR); + columnInfo->GetParent()->BuildColumnWidth(innerLayout.GetMaxSize().Width()); + double toolBarMaxWidth = GetMaxWidthBasedOnGridType(columnInfo, gridSizeType); + double toolBarMinWidth = std::max(0.0, innerLayout.GetMinSize().Width()); + if (toolBarsSize_ > 1) { + toolBarMinWidth = toolBarMinWidth / toolBarsSize_; + toolBarMaxWidth = toolBarMaxWidth / toolBarsSize_; + } + innerLayout.SetMinSize(Size(std::max(toolBarMinWidth, 0.0), std::max(0.0, 0.0))); + innerLayout.SetMaxSize(Size(std::max(toolBarMaxWidth, 0.0), std::max(GetLayoutParam().GetMaxSize().Height(), 0.0))); + + return innerLayout; +} + +double RenderToolBar::GetMaxWidthBasedOnGridType( + const RefPtr& info, GridSizeType type) const +{ + double margin = NormalizeToPx(info->GetParent()->GetMarginLeft()); + if (type == GridSizeType::SM) { + double width = info->GetWidth(4); + if (toolBarsSize_ > 3) { + width += margin * 2; + } else { + actualWidth_ += margin; + } + return width; + } else if (type == GridSizeType::MD) { + actualWidth_ += margin; + if (toolBarsSize_ <= 3) { + double dipScale = NormalizeToPx(info->GetParent()->GetGutterWidth()); + actualWidth_ += info->GetWidth(1) + dipScale; + return info->GetWidth(6); + } else { + return info->GetWidth(8); + } + } else { + LOGI("GetMaxWidthBasedOnGridType is undefined"); + return info->GetMaxWidth(); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/tool_bar/render_tool_bar.h b/frameworks/core/components/tool_bar/render_tool_bar.h new file mode 100644 index 00000000..5402406d --- /dev/null +++ b/frameworks/core/components/tool_bar/render_tool_bar.h @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOOL_BAR_RENDER_TOOL_BAR_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOOL_BAR_RENDER_TOOL_BAR_H + +#include + +#include "core/components/common/layout/grid_layout_info.h" +#include "core/components/common/layout/grid_system_manager.h" +#include "core/components/common/properties/edge.h" +#include "core/components/flex/render_flex.h" +#include "core/components/tool_bar/tool_bar_component.h" + +namespace OHOS::Ace { + +class RenderToolBar : public RenderNode { + DECLARE_ACE_TYPE(RenderToolBar, RenderNode) + +public: + RenderToolBar(); + ~RenderToolBar() override = default; + static RefPtr Create(); + + void Update(const RefPtr& component) override; + void PerformLayout() override; + +protected: + double GetMaxWidthBasedOnGridType( + const RefPtr& info, GridSizeType type) const; + +private: + void LayoutChildren(); + LayoutParam MakeInnerLayoutParam() const; + + int32_t toolBarsSize_ { 0 }; + double toolBarHeight_ { 0.0 }; + mutable double toolBarWidth_ { 0.0 }; + mutable double actualWidth_ { 0.0 }; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOOL_BAR_RENDER_TOOL_BAR_H diff --git a/frameworks/core/components/tool_bar/render_tool_bar_item.cpp b/frameworks/core/components/tool_bar/render_tool_bar_item.cpp new file mode 100644 index 00000000..b1f5ff78 --- /dev/null +++ b/frameworks/core/components/tool_bar/render_tool_bar_item.cpp @@ -0,0 +1,267 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/tool_bar/render_tool_bar_item.h" + +#include "core/event/ace_event_helper.h" + +namespace OHOS::Ace { + +constexpr Dimension TOOL_BAR_HEIGHT = 56.0_vp; +constexpr int32_t HOVER_ANIMATION_DURATION = 250; + +RenderToolBarItem::RenderToolBarItem() : RenderNode(true) {} + +void RenderToolBarItem::Initialize() +{ + auto wp = AceType::WeakClaim(this); + + touchRecognizer_ = AceType::MakeRefPtr(); + touchRecognizer_->SetOnTouchDown([wp](const TouchEventInfo&) { + auto toolBarItem = wp.Upgrade(); + if (toolBarItem) { + toolBarItem->HandleTouchEvent(true); + } + }); + touchRecognizer_->SetOnTouchUp([wp](const TouchEventInfo&) { + auto toolBarItem = wp.Upgrade(); + if (toolBarItem) { + toolBarItem->HandleTouchEvent(false); + } + }); + touchRecognizer_->SetOnTouchMove([wp](const TouchEventInfo& info) { + auto toolBarItem = wp.Upgrade(); + if (toolBarItem) { + toolBarItem->HandleMoveEvent(info); + } + }); + + clickRecognizer_ = AceType::MakeRefPtr(); + clickRecognizer_->SetOnClick([wp](const ClickInfo&) { + auto toolBarItem = wp.Upgrade(); + if (toolBarItem) { + toolBarItem->HandleClickEvent(); + } + }); +} + +void RenderToolBarItem::HandleTouchEvent(bool isTouch) +{ + onTouch_ = isTouch; + isTouch ? PlayEventEffectAnimation(pressColor_) : PlayEventEffectAnimation(Color::TRANSPARENT); +} + +void RenderToolBarItem::HandleMoveEvent(const TouchEventInfo& info) +{ + if (info.GetTouches().empty()) { + return; + } + const auto& locationInfo = info.GetTouches().front(); + Point touchPoint = Point(locationInfo.GetLocalLocation().GetX(), locationInfo.GetLocalLocation().GetY()); + if (!GetPaintRect().IsInRegion(touchPoint)) { + onTouch_ = false; + MarkNeedRender(); + } +} + +void RenderToolBarItem::HandleClickEvent() +{ + if (isEndItem_) { + ShowMenu(); + return; + } + + if (onClick_) { + onClick_(); + } +} + +void RenderToolBarItem::ShowMenu() +{ + if (targetMenuCallBack_) { + Offset leftTop = GetOffsetToStage(); + double menuWidth = std::max(NormalizeToPx(menuMinWidth_), GetLayoutSize().Width()); + Size layoutSize = Size(menuWidth, GetLayoutSize().Height()); + double rootWidth = GetContext().Upgrade()->GetRootWidth(); + if (leftTop.GetX() + menuWidth > rootWidth) { + leftTop.SetX(rootWidth - menuWidth); + } + Offset rightBottom = leftTop + layoutSize; + targetMenuCallBack_(leftTop, rightBottom); + } +} + +void RenderToolBarItem::Update(const RefPtr& component) +{ + RefPtr toolBarItemComponent = AceType::DynamicCast(component); + if (!toolBarItemComponent) { + return; + } + if (!toolBarItemComponent->GetClickedEventId().IsEmpty()) { + onClick_ = AceAsyncEvent::Create(toolBarItemComponent->GetClickedEventId(), context_); + } + if (!eventEffectController_) { + eventEffectController_ = AceType::MakeRefPtr(context_); + } + isEndItem_ = toolBarItemComponent->GetIsEndItem(); + rrectRadius_ = toolBarItemComponent->GetRadius(); + pressColor_ = toolBarItemComponent->GetPressColor(); + mouseHoverColor_ = toolBarItemComponent->GetHoverColor(); + focusColor_ = toolBarItemComponent->GetFocusColor(); + menuMinWidth_ = toolBarItemComponent->GetMenuMinWidth(); + position_ = toolBarItemComponent->GetPositionType(); +} + +void RenderToolBarItem::PerformLayout() +{ + if (GetChildren().empty()) { + return; + } + Size innerSize = GetLayoutParam().GetMaxSize(); + innerSize.SetHeight(NormalizeToPx(TOOL_BAR_HEIGHT)); + LayoutParam innerLayout; + innerLayout.SetMaxSize(innerSize); + RefPtr child = GetChildren().front(); + child->Layout(innerLayout); + child->SetPosition(Offset((GetLayoutParam().GetMaxSize().Width() - child->GetPaintRect().Width()) / 2.0, 0.0)); + Size layoutSize = Size(child->GetLayoutParam().GetMaxSize().Width(), NormalizeToPx(TOOL_BAR_HEIGHT)); + SetLayoutSize(layoutSize); +} + +void RenderToolBarItem::OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) +{ + if ((!touchRecognizer_) || (!clickRecognizer_)) { + return; + } + touchRecognizer_->SetCoordinateOffset(coordinateOffset); + result.emplace_back(touchRecognizer_); + result.emplace_back(clickRecognizer_); +} + +void RenderToolBarItem::RequestFocusAnimation( + const Offset& animationOffset, const Rect& animationRect, const Radius& radius) +{ + auto context = context_.Upgrade(); + if (!context) { + LOGE("Pipeline context upgrade fail!"); + return; + } + focusAnimation_ = context->GetRenderFocusAnimation(); + if (!focusAnimation_) { + LOGE("focusAnimation is null!"); + return; + } + context->ShowFocusAnimation(RRect::MakeRRect(animationRect, radius), focusColor_, animationOffset); +} + +void RenderToolBarItem::OnMouseHoverEnterTest() +{ + ResetController(controllerExit_); + if (!controllerEnter_) { + controllerEnter_ = AceType::MakeRefPtr(context_); + } + colorAnimationEnter_ = AceType::MakeRefPtr>(); + colorAnimationEnter_->SetEvaluator(AceType::MakeRefPtr()); + CreateColorAnimation(colorAnimationEnter_, Color::TRANSPARENT, mouseHoverColor_, true); + colorAnimationEnter_->SetCurve(Curves::FRICTION); + StartHoverAnimation(controllerEnter_, colorAnimationEnter_); +} + +void RenderToolBarItem::OnMouseHoverExitTest() +{ + ResetController(controllerEnter_); + if (!controllerExit_) { + controllerExit_ = AceType::MakeRefPtr(context_); + } + colorAnimationExit_ = AceType::MakeRefPtr>(); + colorAnimationExit_->SetEvaluator(AceType::MakeRefPtr()); + CreateColorAnimation(colorAnimationExit_, hoverColor_, Color::TRANSPARENT, false); + if (hoverColor_ == mouseHoverColor_) { + colorAnimationExit_->SetCurve(Curves::FRICTION); + } else { + colorAnimationExit_->SetCurve(Curves::FAST_OUT_SLOW_IN); + } + StartHoverAnimation(controllerExit_, colorAnimationExit_); +} + +void RenderToolBarItem::StartHoverAnimation(RefPtr controller, + RefPtr>& colorAnimation) +{ + if (!controller || !colorAnimation) { + return; + } + controller->ClearInterpolators(); + controller->AddInterpolator(colorAnimation); + controller->SetDuration(HOVER_ANIMATION_DURATION); + controller->SetFillMode(FillMode::FORWARDS); + controller->Play(); +} + +void RenderToolBarItem::CreateColorAnimation( + RefPtr>& colorAnimation, const Color& beginValue, const Color& endValue, bool hover) +{ + if (!colorAnimation) { + return; + } + auto keyframeBegin = AceType::MakeRefPtr>(0.0, beginValue); + auto keyframeEnd = AceType::MakeRefPtr>(1.0, endValue); + colorAnimation->AddKeyframe(keyframeBegin); + colorAnimation->AddKeyframe(keyframeEnd); + colorAnimation->AddListener([weakBarItem = AceType::WeakClaim(this), hover](const Color& value) { + auto toolBarItem = weakBarItem.Upgrade(); + if (toolBarItem) { + toolBarItem->onHover_ = hover; + toolBarItem->hoverColor_ = value; + toolBarItem->MarkNeedRender(); + } + }); +} + +void RenderToolBarItem::ResetController(RefPtr& controller) +{ + if (controller) { + if (!controller->IsStopped()) { + controller->Stop(); + } + controller->ClearInterpolators(); + } +} + +void RenderToolBarItem::OnStatusChanged(RenderStatus renderStatus) +{ + if (renderStatus == RenderStatus::FOCUS) { + SetFocusEventFlag(true); + } else if (renderStatus == RenderStatus::BLUR) { + SetFocusEventFlag(false); + } +} + +void RenderToolBarItem::PlayEventEffectAnimation(const Color& endColor) +{ + if (!eventEffectController_->IsStopped()) { + eventEffectController_->Stop(); + } + auto colorAnimation = AceType::MakeRefPtr>(); + CreateMouseAnimation(colorAnimation, GetEventEffectColor(), endColor); + eventEffectController_->ClearInterpolators(); + eventEffectController_->ClearStopListeners(); + eventEffectController_->AddInterpolator(colorAnimation); + eventEffectController_->SetDuration(PRESS_DURATION); + eventEffectController_->SetFillMode(FillMode::FORWARDS); + eventEffectController_->Forward(); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/tool_bar/render_tool_bar_item.h b/frameworks/core/components/tool_bar/render_tool_bar_item.h new file mode 100644 index 00000000..eeb82e7b --- /dev/null +++ b/frameworks/core/components/tool_bar/render_tool_bar_item.h @@ -0,0 +1,125 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOOL_BAR_RENDER_TOOL_BAR_ITEM_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOOL_BAR_RENDER_TOOL_BAR_ITEM_H + +#include + +#include "core/animation/animator.h" +#include "core/animation/keyframe_animation.h" +#include "core/components/focus_animation/render_focus_animation.h" +#include "core/components/tool_bar/tool_bar_item_component.h" +#include "core/gestures/click_recognizer.h" +#include "core/gestures/raw_recognizer.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderToolBarItem : public RenderNode, public FocusNode { + DECLARE_ACE_TYPE(RenderToolBarItem, RenderNode) + +public: + using TargetMenuCallBack = std::function; + using EventCallback = std::function; + + RenderToolBarItem(); + ~RenderToolBarItem() override = default; + static RefPtr Create(); + + void Update(const RefPtr& component) override; + void PerformLayout() override; + void Initialize(); + + void SetTargetMenuCallBack(TargetMenuCallBack&& targetMenuCallBack) + { + targetMenuCallBack_ = std::move(targetMenuCallBack); + } + + void SetFocusEventFlag(bool onFocus) + { + onFocus_ = onFocus; + if (position_ == PositionType::FIXED) { + auto context = context_.Upgrade(); + if (!context) { + LOGE("Pipeline context upgrade fail!"); + return; + } + if (onFocus_) { + context->SetUseRootAnimation(true); + } else { + context->SetUseRootAnimation(false); + } + } + } + + void SetFocusAnimation(const RefPtr& focusAnimation) + { + focusAnimation_ = focusAnimation; + } + + const RefPtr& GetFocusAnimation() const + { + return focusAnimation_; + } + + void RequestFocusAnimation(const Offset& animationOffset, const Rect& animationRect, const Radius& radius); + void OnStatusChanged(RenderStatus renderStatus) override; + void HandleClickEvent(); + +protected: + void OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) override; + void OnMouseHoverEnterTest() override; + void OnMouseHoverExitTest() override; + void HandleTouchEvent(bool isTouch); + void HandleMoveEvent(const TouchEventInfo& info); + void ShowMenu(); + void PlayEventEffectAnimation(const Color& endColor); + + Color pressColor_; + Color focusColor_; + Color hoverColor_; + Color mouseHoverColor_; + Dimension rrectRadius_; + bool onFocus_ = false; + bool onHover_ = false; + bool onTouch_ = false; + + EventCallback onClick_; + RefPtr focusAnimation_; + +private: + void StartHoverAnimation(RefPtr controller, + RefPtr>& colorAnimation); + void ResetController(RefPtr& controller); + void CreateColorAnimation(RefPtr>& colorAnimation, const Color& beginValue, + const Color& endValue, bool hover); + + RefPtr touchRecognizer_; + RefPtr clickRecognizer_; + RefPtr controllerEnter_; + RefPtr controllerExit_; + RefPtr> colorAnimationEnter_; + RefPtr> colorAnimationExit_; + TargetMenuCallBack targetMenuCallBack_; + bool isEndItem_ = false; + Dimension menuMinWidth_; + PositionType position_ { PositionType::RELATIVE }; + RefPtr eventEffectController_; +}; + +} // namespace OHOS::Ace +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOOL_BAR_RENDER_TOOL_BAR_ITEM_H diff --git a/frameworks/core/components/tool_bar/tool_bar_component.cpp b/frameworks/core/components/tool_bar/tool_bar_component.cpp new file mode 100644 index 00000000..0021fd8e --- /dev/null +++ b/frameworks/core/components/tool_bar/tool_bar_component.cpp @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/tool_bar/tool_bar_component.h" + +#include "base/log/log.h" +#include "core/components/tool_bar/render_tool_bar.h" +#include "core/components/tool_bar/tool_bar_element.h" + +namespace OHOS::Ace { + +RefPtr ToolBarComponent::CreateRenderNode() +{ + return RenderToolBar::Create(); +} + +RefPtr ToolBarComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/tool_bar/tool_bar_component.h b/frameworks/core/components/tool_bar/tool_bar_component.h new file mode 100644 index 00000000..0e4cff09 --- /dev/null +++ b/frameworks/core/components/tool_bar/tool_bar_component.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOOL_BAR_TOOL_BAR_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOOL_BAR_TOOL_BAR_COMPONENT_H + +#include "core/components/common/properties/edge.h" +#include "core/pipeline/base/component_group.h" + +namespace OHOS::Ace { + +class ToolBarComponent : public ComponentGroup { + DECLARE_ACE_TYPE(ToolBarComponent, ComponentGroup); + +public: + explicit ToolBarComponent(const std::list>& children) + : ComponentGroup(children) {} + + ~ToolBarComponent() override = default; + + RefPtr CreateRenderNode() override; + RefPtr CreateElement() override; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOOL_BAR_TOOL_BAR_COMPONENT_H diff --git a/frameworks/core/components/tool_bar/tool_bar_element.h b/frameworks/core/components/tool_bar/tool_bar_element.h new file mode 100644 index 00000000..189a2564 --- /dev/null +++ b/frameworks/core/components/tool_bar/tool_bar_element.h @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOOL_BAR_TOOL_BAR_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOOL_BAR_TOOL_BAR_ELEMENT_H + +#include "core/focus/focus_node.h" +#include "core/pipeline/base/component_group_element.h" + +namespace OHOS::Ace { + +class ToolBarElement : public ComponentGroupElement, public FocusGroup { + DECLARE_ACE_TYPE(ToolBarElement, ComponentGroupElement, FocusGroup); + +public: + bool RequestNextFocus(bool vertical, bool reverse, const Rect& rect) override + { + return GoToNextFocus(reverse, rect); + } +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOOL_BAR_TOOL_BAR_ELEMENT_H diff --git a/frameworks/core/components/tool_bar/tool_bar_item_component.cpp b/frameworks/core/components/tool_bar/tool_bar_item_component.cpp new file mode 100644 index 00000000..3f6b28fb --- /dev/null +++ b/frameworks/core/components/tool_bar/tool_bar_item_component.cpp @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/tool_bar/tool_bar_item_component.h" + +#include "base/log/log.h" +#include "core/components/tool_bar/render_tool_bar_item.h" +#include "core/components/tool_bar/tool_bar_item_element.h" + +namespace OHOS::Ace { + +RefPtr ToolBarItemComponent::CreateRenderNode() +{ + return RenderToolBarItem::Create(); +} + +RefPtr ToolBarItemComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/tool_bar/tool_bar_item_component.h b/frameworks/core/components/tool_bar/tool_bar_item_component.h new file mode 100644 index 00000000..13233fef --- /dev/null +++ b/frameworks/core/components/tool_bar/tool_bar_item_component.h @@ -0,0 +1,132 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOOL_BAR_TOOL_BAR_ITEM_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOOL_BAR_TOOL_BAR_ITEM_COMPONENT_H + +#include "core/pipeline/base/component_group.h" +#include "core/pipeline/base/sole_child_component.h" + +namespace OHOS::Ace { + +class ToolBarItemComponent : public SoleChildComponent { + DECLARE_ACE_TYPE(ToolBarItemComponent, SoleChildComponent); + +public: + using OptionChildrenCallBack = std::function>()>; + using EventCallback = std::function; + + ToolBarItemComponent() = default; + ~ToolBarItemComponent() override = default; + + RefPtr CreateRenderNode() override; + RefPtr CreateElement() override; + + void SetIsEndItem(bool isEndItem) + { + isEndItem_ = isEndItem; + } + + bool GetIsEndItem() + { + return isEndItem_; + } + + void SetOptionChildrenCallBack(OptionChildrenCallBack&& optionChildrenCallBack) + { + optionChildrenCallBack_ = std::move(optionChildrenCallBack); + } + + const OptionChildrenCallBack& GetOptionChildrenCallBack() const + { + return optionChildrenCallBack_; + } + + void SetMenuMinWidth(const Dimension& menuMinWidth) + { + menuMinWidth_ = menuMinWidth; + } + + const Dimension& GetMenuMinWidth() const + { + return menuMinWidth_; + } + + void SetPressColor(const Color& pressColor) + { + pressColor_ = pressColor; + } + + const Color& GetPressColor() + { + return pressColor_; + } + + void SetClickedEventId(const EventMarker& eventId) + { + clickEventId_ = eventId; + } + + const EventMarker& GetClickedEventId() const + { + return clickEventId_; + } + + void SetRadius(const Dimension& rrectRadius) + { + rrectRadius_ = rrectRadius; + } + + const Dimension& GetRadius() + { + return rrectRadius_; + } + + void SetFocusColor(const Color& focusColor) + { + focusColor_ = focusColor; + } + + const Color& GetFocusColor() + { + return focusColor_; + } + + void SetHoverColor(const Color& hoverColor) + { + hoverColor_ = hoverColor; + } + + const Color& GetHoverColor() + { + return hoverColor_; + } + +private: + OptionChildrenCallBack optionChildrenCallBack_; + EventMarker clickEventId_; + + Dimension menuMinWidth_; + bool isEndItem_ = false; + Dimension rrectRadius_; + + Color pressColor_; + Color hoverColor_; + Color focusColor_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOOL_BAR_TOOL_BAR_ITEM_COMPONENT_H diff --git a/frameworks/core/components/tool_bar/tool_bar_item_element.cpp b/frameworks/core/components/tool_bar/tool_bar_item_element.cpp new file mode 100644 index 00000000..dca964ff --- /dev/null +++ b/frameworks/core/components/tool_bar/tool_bar_item_element.cpp @@ -0,0 +1,168 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/tool_bar/tool_bar_item_element.h" + +#include "base/geometry/dimension.h" +#include "base/geometry/size.h" +#include "core/components/tool_bar/render_tool_bar_item.h" +#include "core/event/ace_event_helper.h" +#include "core/pipeline/base/constants.h" + +namespace OHOS::Ace { + +void ToolBarItemElement::Prepare(const WeakPtr& parent) +{ + RenderElement::Prepare(parent); + if (renderNode_) { + auto renderToolBarItem = AceType::DynamicCast(renderNode_); + if (renderToolBarItem) { + renderToolBarItem->Initialize(); + renderToolBarItem->SetTargetMenuCallBack( + [weak = WeakClaim(this)](const Offset& leftTop, const Offset& rightBottom) { + auto toolBarItemElement = weak.Upgrade(); + if (toolBarItemElement) { + toolBarItemElement->OnTargetCallback(leftTop, rightBottom); + } + }); + } + } +} + +void ToolBarItemElement::Update() +{ + if (popup_) { + popup_->ClearAllOptions(); + popup_ = nullptr; + } + RefPtr toolBarItemComponent = AceType::DynamicCast(component_); + if (!toolBarItemComponent) { + LOGE("ToolBarItemElement::Update: get ToolBarItemComponent failed!"); + return; + } + isEndItem_ = toolBarItemComponent->GetIsEndItem(); + if (isEndItem_) { + optionChildrenCallBack_ = toolBarItemComponent->GetOptionChildrenCallBack(); + if (optionChildrenCallBack_ && renderNode_) { + auto renderToolBarItem = AceType::DynamicCast(renderNode_); + if (renderToolBarItem) { + IniteSelectPopup(); + renderToolBarItem->Initialize(); + } + } + } + SoleChildElement::Update(); +} + +void ToolBarItemElement::IniteSelectPopup() +{ + if (!popup_) { + popup_ = AceType::MakeRefPtr(); + popup_->InitTheme(GetThemeManager()); + } + if (optionChildrenCallBack_) { + std::list> children = optionChildrenCallBack_(); + if (children.empty()) { + return; + } + for (const auto& pos : children) { + RefPtr option = AceType::DynamicCast(pos); + if (option) { + option->InitTheme(GetThemeManager()); + popup_->AppendSelectOption(option); + } + } + popup_->SetOptionClickedCallback([weak = WeakClaim(this)](std::size_t index) { + auto refPtr = weak.Upgrade(); + if (!refPtr) { + return; + } + refPtr->OnOptionCallback(index); + }); + } +} + +void ToolBarItemElement::OnOptionCallback(std::size_t index) +{ + if (popup_) { + auto option = popup_->GetSelectOption(index); + if (!option) { + LOGE("option of the index is null."); + return; + } + auto onClick = AceAsyncEvent::Create(option->GetClickEventForToolBarItem(), context_); + if (onClick) { + onClick(); + } + } +} + +void ToolBarItemElement::OnTargetCallback(const Offset& leftTop, const Offset& rightBottom) +{ + auto context = context_.Upgrade(); + if (!context) { + LOGE("context is null."); + return; + } + + auto stack = context->GetLastStack(); + if (!stack) { + LOGE("can not get last stack."); + return; + } + + if (!popup_) { + LOGE("can not get popup component."); + return; + } + popup_->ShowDialog(stack, leftTop, rightBottom, false); +} + +void ToolBarItemElement::OnFocus() +{ + const auto& renderToolBarItem = AceType::DynamicCast(renderNode_); + if (!renderToolBarItem) { + return; + } + renderToolBarItem->ChangeStatus(RenderStatus::FOCUS); + renderToolBarItem->SetFocusEventFlag(true); + renderToolBarItem->MarkNeedLayout(); +} + +void ToolBarItemElement::OnBlur() +{ + const auto& renderToolBarItem = AceType::DynamicCast(renderNode_); + if (!renderToolBarItem) { + return; + } + renderToolBarItem->SetFocusEventFlag(false); + renderToolBarItem->MarkNeedLayout(); + auto focusAnimation = renderToolBarItem->GetFocusAnimation(); + if (!focusAnimation) { + return; + } + focusAnimation->CancelFocusAnimation(); +} + +void ToolBarItemElement::OnClick() +{ + const auto& renderToolBarItem = AceType::DynamicCast(renderNode_); + if (!renderToolBarItem) { + return; + } + renderToolBarItem->HandleClickEvent(); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/tool_bar/tool_bar_item_element.h b/frameworks/core/components/tool_bar/tool_bar_item_element.h new file mode 100644 index 00000000..7dec76b2 --- /dev/null +++ b/frameworks/core/components/tool_bar/tool_bar_item_element.h @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOOL_BAR_TOOL_BAR_ITEM_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOOL_BAR_TOOL_BAR_ITEM_ELEMENT_H + +#include "core/components/select_popup/select_popup_component.h" +#include "core/components/tool_bar/tool_bar_component.h" +#include "core/focus/focus_node.h" +#include "core/pipeline/base/sole_child_element.h" + +namespace OHOS::Ace { + +class ToolBarItemElement : public SoleChildElement, public FocusNode { + DECLARE_ACE_TYPE(ToolBarItemElement, SoleChildElement, FocusNode); + +public: + using OptionChildrenCallBack = std::function>()>; + + void OnTargetCallback(const Offset& leftTop, const Offset& rightBottom); + void OnOptionCallback(std::size_t index); + void Prepare(const WeakPtr& parent) override; + void Update() override; + void OnFocus() override; + void OnBlur() override; + void OnClick() override; + +private: + void IniteSelectPopup(); + + bool isEndItem_ = false; + RefPtr popup_; + OptionChildrenCallBack optionChildrenCallBack_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOOL_BAR_TOOL_BAR_ITEM_ELEMENT_H diff --git a/frameworks/core/components/tool_bar/tool_bar_theme.h b/frameworks/core/components/tool_bar/tool_bar_theme.h new file mode 100644 index 00000000..0bb9adb8 --- /dev/null +++ b/frameworks/core/components/tool_bar/tool_bar_theme.h @@ -0,0 +1,176 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOOL_BAR_TOOL_BAR_THEME_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOOL_BAR_TOOL_BAR_THEME_H + +#include + +#include "core/components/common/properties/edge.h" +#include "core/components/common/properties/text_style.h" +#include "core/components/theme/theme.h" +#include "core/components/theme/theme_constants.h" +#include "core/components/theme/theme_manager.h" +#include "frameworks/bridge/common/utils/utils.h" + +namespace OHOS::Ace { + +/** + * ToolBarTheme defines color and styles of ToolBar. ToolBarTheme should be built + * using ToolBarTheme::Builder. + */ +class ToolBarTheme : public virtual Theme { + DECLARE_ACE_TYPE(ToolBarTheme, Theme); + +public: + class Builder { + public: + Builder() = default; + ~Builder() = default; + + RefPtr Build(const RefPtr& themeConstants) const + { + RefPtr theme = AceType::Claim(new ToolBarTheme()); + if (!themeConstants) { + return theme; + } + theme->textStyle_.SetFontSize(themeConstants->GetDimension(THEME_TOOL_BAR_TEXT_FONTSIZE)); + theme->textStyle_.SetFontFamilies({ themeConstants->GetString(THEME_OHOS_TEXT_FONT_FAMILY_MEDIUM) }); + theme->textStyle_.SetAdaptTextSize(themeConstants->GetDimension(THEME_TOOL_BAR_TEXT_FONTSIZE), + themeConstants->GetDimension(THEME_TOOL_BAR_TEXT_MIN_FONTSIZE)); + theme->iconSize_ = Size(themeConstants->GetDimension(THEME_TOOL_BAR_ITEM_ICON_WIDTH).Value(), + themeConstants->GetDimension(THEME_TOOL_BAR_ITEM_ICON_HEIGHT).Value()); + theme->imageEdge_ = Edge(themeConstants->GetDimension(THEME_TOOL_BAR_ITEM_PADDING_ICON_LEFT), + themeConstants->GetDimension(THEME_TOOL_BAR_ITEM_PADDING_ICON_TOP), + themeConstants->GetDimension(THEME_TOOL_BAR_ITEM_PADDING_ICON_RIGHT), + themeConstants->GetDimension(THEME_TOOL_BAR_ITEM_PADDING_ICON_BOTTOM)); + theme->textEdge_ = Edge(themeConstants->GetDimension(THEME_TOOL_BAR_ITEM_PADDING_TEXT_LEFT), + themeConstants->GetDimension(THEME_TOOL_BAR_ITEM_PADDING_TEXT_TOP), + themeConstants->GetDimension(THEME_TOOL_BAR_ITEM_PADDING_TEXT_RIGHT), + themeConstants->GetDimension(THEME_TOOL_BAR_ITEM_PADDING_TEXT_BOTTOM)); + theme->toolBarBgColor_ = themeConstants->GetColor(THEME_TOOL_BAR_BG_COLOR); + theme->focusColor_ = themeConstants->GetColor(THEME_TOOL_BAR_ITEM_FOCUS_COLOR); + theme->hoverColor_ = themeConstants->GetColor(THEME_TOOL_BAR_ITEM_HOVER_COLOR); + theme->toolBarItemBgColor_ = themeConstants->GetColor(THEME_TOOL_BAR_ITEM_BACKGROUND_COLOR); + theme->pressColor_ = themeConstants->GetColor(THEME_OHOS_CONTROL_NORMAL); + theme->radius_ = themeConstants->GetDimension(THEME_TOOL_BAR_ITEM_RADIUS); + theme->iconMoreColor_ = themeConstants->GetColor(THEME_TOOL_BAR_ENDITEM_COLOR); + ParsePattern(themeConstants->GetThemeStyle(), theme); + return theme; + } + + private: + void ParsePattern(const RefPtr& themeStyle, const RefPtr& theme) const + { + if (!themeStyle) { + return; + } + theme->textStyle_.SetTextColor(themeStyle->GetAttr(THEME_ATTR_TOOLBAR_TEXT_COLOR, Color::BLACK)); + theme->iconColor_ = themeStyle->GetAttr(THEME_ATTR_TOOLBAR_ICON_COLOR, Color()); + theme->toolBarBgColor_ = themeStyle->GetAttr(THEME_ATTR_TOOLBAR_BG_COLOR, Color()); + theme->toolBarItemBgColor_ = themeStyle->GetAttr(THEME_ATTR_TOOLBAR_SUB_BG_COLOR, Color()); + + auto toolbarPattern = themeStyle->GetAttr>(THEME_PATTERN_TOOLBAR, nullptr); + if (!toolbarPattern) { + LOGI("ToolbarPattern is null"); + return; + } + theme->iconMoreColor_ = toolbarPattern->GetAttr(TOOLBAR_ICON_MORE_COLOR, Color()); + } + }; + + ~ToolBarTheme() override = default; + + const TextStyle& GetToolBarTextStyle() const + { + return textStyle_; + } + + const Size& GetIconSize() const + { + return iconSize_; + } + + const Edge& GetIconEdge() const + { + return imageEdge_; + } + + const Edge& GetTextEdge() const + { + return textEdge_; + } + + const Color& GetToolBarBgColor() const + { + return toolBarBgColor_; + } + + const Color& GetItemBackgroundColor() const + { + return toolBarItemBgColor_; + } + + const Color& GetIconColor() const + { + return iconColor_; + } + + const Color& GetFocusColor() const + { + return focusColor_; + } + + const Color& GetHoverColor() const + { + return hoverColor_; + } + + const Color& GetPressColor() const + { + return pressColor_; + } + + const Dimension& GetRadius() const + { + return radius_; + } + + const Color& GetIconMoreColor() const + { + return iconMoreColor_; + } + +protected: + ToolBarTheme() = default; + +private: + Edge imageEdge_; + Edge textEdge_; + TextStyle textStyle_; + Size iconSize_; + Color toolBarBgColor_; + Color iconColor_; + Color focusColor_; + Color hoverColor_; + Color toolBarItemBgColor_; + Color pressColor_; + Dimension radius_; + Color iconMoreColor_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOOL_BAR_TOOL_BAR_THEME_H diff --git a/frameworks/core/components/touch_listener/BUILD.gn b/frameworks/core/components/touch_listener/BUILD.gn new file mode 100644 index 00000000..4fa5df36 --- /dev/null +++ b/frameworks/core/components/touch_listener/BUILD.gn @@ -0,0 +1,18 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("touch_listener") { + sources = [ "render_touch_listener.cpp" ] +} diff --git a/frameworks/core/components/touch_listener/render_touch_listener.cpp b/frameworks/core/components/touch_listener/render_touch_listener.cpp new file mode 100644 index 00000000..7f6db9e3 --- /dev/null +++ b/frameworks/core/components/touch_listener/render_touch_listener.cpp @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "render_touch_listener.h" + +#include "core/components/touch_listener/touch_listener_component.h" +#include "core/event/ace_event_helper.h" + +namespace OHOS::Ace { + +RenderTouchListener::RenderTouchListener() : rawRecognizer_(AceType::MakeRefPtr()) {} + +RefPtr RenderTouchListener::Create() +{ + return AceType::MakeRefPtr(); +} + +void RenderTouchListener::Update(const RefPtr& component) +{ + auto touchComponent = AceType::DynamicCast(component); + ACE_DCHECK(touchComponent); + auto context = context_.Upgrade(); + if (context && context->GetIsDeclarative()) { + onTouchEventCallback_ = AceAsyncEvent&)>::Create( + touchComponent->GetOnTouchId(), context_); + return; + } + + for (uint32_t eventStage = 0; eventStage < EventStage::SIZE; eventStage++) { + for (uint32_t touchEventType = 0; touchEventType < EventType::SIZE; touchEventType++) { + auto& onEventId = touchComponent->GetEvent(EventAction::ON, eventStage, touchEventType); + if (!onEventId.IsEmpty()) { + rawRecognizer_->SetOnEventCallback( + AceAsyncEvent::Create(onEventId, context_), eventStage, + touchEventType); + } + auto& catchEventId = touchComponent->GetEvent(EventAction::CATCH, eventStage, touchEventType); + if (!catchEventId.IsEmpty()) { + rawRecognizer_->SetCatchEventCallback( + AceAsyncEvent::Create(catchEventId, context_), eventStage, touchEventType); + } + } + } + touchable_ = touchComponent->IsTouchable(); + isVisible_ = touchComponent->IsVisible(); + interceptTouchEvent_ = !touchable_; + + if (!touchComponent->GetEvent(EventAction::CATCH, EventStage::CAPTURE, EventType::TOUCH_DOWN).IsEmpty()) { + EventMarker eventMarker("catchEvent"); + auto event = AceAsyncEvent::Create(eventMarker, context_); + rawRecognizer_->SetCatchEventCallback(event, EventStage::CAPTURE, EventType::TOUCH_UP); + rawRecognizer_->SetCatchEventCallback(event, EventStage::CAPTURE, EventType::TOUCH_MOVE); + } + SetOnSwipe(AceAsyncEvent::Create(touchComponent->GetOnSwipeId(), context_)); +} + +void RenderTouchListener::OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) +{ + LOGD("render touch listener: on touch test hit!"); + auto context = context_.Upgrade(); + if (context && context->GetIsDeclarative()) { + coordinateOffset_ = coordinateOffset; + result.emplace_back(Claim(this)); + return; + } + rawRecognizer_->SetCoordinateOffset(coordinateOffset); + result.emplace_back(rawRecognizer_); + if (swipeRecognizer_) { + result.emplace_back(swipeRecognizer_); + } +} + +bool RenderTouchListener::GetVisible() const +{ + return RenderNode::GetVisible() && isVisible_; +} + +bool RenderTouchListener::DispatchEvent(const TouchPoint& point) +{ + return true; +} + +bool RenderTouchListener::HandleEvent(const TouchPoint& point) +{ + auto context = context_.Upgrade(); + if (context && context->GetIsDeclarative() && onTouchEventCallback_) { + auto event = std::make_shared(point.type); + event->SetScreenX(point.x); + event->SetScreenY(point.y); + event->SetLocalX(point.x - coordinateOffset_.GetX()); + event->SetLocalY(point.y - coordinateOffset_.GetY()); + event->SetTimeStamp(point.time); + event->SetPressure(point.pressure); + event->SetDeviceId(point.deviceId); + onTouchEventCallback_(event); + } + return true; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/touch_listener/render_touch_listener.h b/frameworks/core/components/touch_listener/render_touch_listener.h new file mode 100644 index 00000000..559f4123 --- /dev/null +++ b/frameworks/core/components/touch_listener/render_touch_listener.h @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOUCH_LISTENER_RENDER_TOUCH_LISTENER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOUCH_LISTENER_RENDER_TOUCH_LISTENER_H + +#include "base/utils/event_callback.h" +#include "base/utils/macros.h" +#include "core/components/proxy/render_item_proxy.h" +#include "core/gestures/raw_recognizer.h" +#include "core/gestures/swipe_recognizer.h" +#include "core/pipeline/base/component.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class ACE_EXPORT RenderTouchListener final : public RenderProxy, public TouchEventTarget { + DECLARE_ACE_TYPE(RenderTouchListener, RenderProxy, TouchEventTarget); + +public: + RenderTouchListener(); + ~RenderTouchListener() override = default; + static RefPtr Create(); + void Update(const RefPtr& component) override; + + void SetOnTouchDown(const OnTouchEventCallback& onTouchDown) const + { + if (onTouchDown) { + rawRecognizer_->SetOnTouchDown(onTouchDown); + } + } + void SetOnTouchMove(const OnTouchEventCallback& onTouchMove) const + { + if (onTouchMove) { + rawRecognizer_->SetOnTouchMove(onTouchMove); + } + } + void SetOnTouchUp(const OnTouchEventCallback& onTouchUp) const + { + if (onTouchUp) { + rawRecognizer_->SetOnTouchUp(onTouchUp); + } + } + void SetOnTouchCancel(const OnTouchEventCallback& onTouchCancel) const + { + if (onTouchCancel) { + rawRecognizer_->SetOnTouchCancel(onTouchCancel); + } + } + void SetOnSwipe(const SwipeCallback& onSwipeCallback) + { + if (onSwipeCallback) { + if (!swipeRecognizer_) { + swipeRecognizer_ = AceType::MakeRefPtr(); + } + swipeRecognizer_->AddSwipeCallback(onSwipeCallback); + } + } + + bool GetVisible() const override; + + bool DispatchEvent(const TouchPoint& point) override; + bool HandleEvent(const TouchPoint& point) override; + +protected: + void OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) override; + +private: + RefPtr rawRecognizer_; + RefPtr swipeRecognizer_; + + bool isVisible_ = true; + Offset coordinateOffset_; + std::function&)> onTouchEventCallback_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOUCH_LISTENER_RENDER_TOUCH_LISTENER_H diff --git a/frameworks/core/components/touch_listener/touch_listener_component.h b/frameworks/core/components/touch_listener/touch_listener_component.h new file mode 100644 index 00000000..63365c37 --- /dev/null +++ b/frameworks/core/components/touch_listener/touch_listener_component.h @@ -0,0 +1,130 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOUCH_LISTENER_TOUCH_LISTENER_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOUCH_LISTENER_TOUCH_LISTENER_COMPONENT_H + +#include + +#include "core/components/touch_listener/render_touch_listener.h" +#include "core/components/touch_listener/touch_listener_element.h" +#include "core/pipeline/base/sole_child_component.h" + +namespace OHOS::Ace { + +using OnTouchEventCallback = std::function; + +class TouchListenerComponent final : public SoleChildComponent { + DECLARE_ACE_TYPE(TouchListenerComponent, SoleChildComponent); + +public: + TouchListenerComponent() = default; + explicit TouchListenerComponent(const RefPtr& child) : SoleChildComponent(child) {} + ~TouchListenerComponent() override = default; + + RefPtr CreateElement() override + { + return MakeRefPtr(); + } + + RefPtr CreateRenderNode() override + { + return RenderTouchListener::Create(); + } + + void SetEvent(const EventMarker& eventMarker, uint32_t action, uint32_t stage, + uint32_t eventType) + { + eventIds_[action][stage][eventType] = eventMarker; + } + + const EventMarker& GetEvent( + uint32_t action, uint32_t stage, uint32_t eventType) const + { + return eventIds_[action][stage][eventType]; + } + + void SetOnTouchDownId(const EventMarker& onTouchDownId) + { + eventIds_[EventAction::ON][EventStage::BUBBLE][EventType::TOUCH_DOWN] = onTouchDownId; + } + void SetOnTouchMoveId(const EventMarker& onTouchMoveId) + { + eventIds_[EventAction::ON][EventStage::BUBBLE][EventType::TOUCH_MOVE] = onTouchMoveId; + } + void SetOnTouchUpId(const EventMarker& onTouchUpId) + { + eventIds_[EventAction::ON][EventStage::BUBBLE][EventType::TOUCH_UP] = onTouchUpId; + } + void SetOnTouchCancel(const EventMarker& onTouchCancel) + { + eventIds_[EventAction::ON][EventStage::BUBBLE][EventType::TOUCH_CANCEL] = onTouchCancel; + } + void SetOnSwipeId(const EventMarker& onSwipeId) + { + onSwipeId_ = onSwipeId; + } + + void SetOnTouchId(const EventMarker& onTouchId) + { + onTouchId_ = onTouchId; + } + + const EventMarker& GetOnTouchDownId() const + { + return eventIds_[EventAction::ON][EventStage::BUBBLE][EventType::TOUCH_DOWN]; + } + const EventMarker& GetOnTouchMoveId() const + { + return eventIds_[EventAction::ON][EventStage::BUBBLE][EventType::TOUCH_MOVE]; + } + const EventMarker& GetOnTouchUpId() const + { + return eventIds_[EventAction::ON][EventStage::BUBBLE][EventType::TOUCH_UP]; + } + const EventMarker& GetOnTouchCancelId() const + { + return eventIds_[EventAction::ON][EventStage::BUBBLE][EventType::TOUCH_CANCEL]; + } + const EventMarker& GetOnSwipeId() const + { + return onSwipeId_; + } + const EventMarker& GetOnTouchId() const + { + return onTouchId_; + } + + bool IsVisible() const + { + return isVisible_; + } + + void SetIsVisible(bool isVisible) + { + isVisible_ = isVisible; + } + +private: + EventMarker eventIds_[EventAction::SIZE][EventStage::SIZE][EventType::SIZE]; + EventMarker onSwipeId_; + EventMarker onTouchId_; + + bool isVisible_ = true; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOUCH_LISTENER_TOUCH_LISTENER_COMPONENT_H diff --git a/frameworks/core/components/touch_listener/touch_listener_element.h b/frameworks/core/components/touch_listener/touch_listener_element.h new file mode 100644 index 00000000..97211d48 --- /dev/null +++ b/frameworks/core/components/touch_listener/touch_listener_element.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOUCH_LISTENER_TOUCH_LISTENER_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOUCH_LISTENER_TOUCH_LISTENER_ELEMENT_H + +#include "core/pipeline/base/sole_child_element.h" + +namespace OHOS::Ace { + +class TouchListenerElement final : public SoleChildElement { + DECLARE_ACE_TYPE(TouchListenerElement, SoleChildElement); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TOUCH_LISTENER_TOUCH_LISTENER_ELEMENT_H diff --git a/frameworks/core/components/track/BUILD.gn b/frameworks/core/components/track/BUILD.gn new file mode 100644 index 00000000..a76b374d --- /dev/null +++ b/frameworks/core/components/track/BUILD.gn @@ -0,0 +1,26 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("track") { + sources = [ + "flutter_render_arc_track.cpp", + "flutter_render_circular_track.cpp", + "flutter_render_linear_track.cpp", + "flutter_render_moon_track.cpp", + "flutter_render_scale_ring_track.cpp", + "render_track.cpp", + "track_component.cpp", + ] +} diff --git a/frameworks/core/components/track/flutter_render_arc_track.cpp b/frameworks/core/components/track/flutter_render_arc_track.cpp new file mode 100644 index 00000000..6346ab5e --- /dev/null +++ b/frameworks/core/components/track/flutter_render_arc_track.cpp @@ -0,0 +1,165 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/track/flutter_render_arc_track.h" + +#include "flutter/lib/ui/painting/path.h" +#include "third_party/skia/include/core/SkClipOp.h" + +#include "core/pipeline/base/scoped_canvas_state.h" + +namespace OHOS::Ace { +namespace { + +constexpr double EDGE = 15.0; +constexpr double HEIGHT_OFFSET = 5.0; +constexpr double INDICATOR_STROKE_WIDTH = 5.0; +constexpr int8_t UNSELECT_ALPHA = 125; + +} // namespace + +RefPtr RenderArcTrack::Create() +{ + return AceType::MakeRefPtr(); +} + +void DrawGauge(RenderContext& context, const RenderRingInfo& trackInfo) +{ + auto canvas = ScopedCanvas::Create(context); + if (!canvas) { + LOGE("Paint canvas is null"); + return; + } + double thickness = trackInfo.thickness; + flutter::Paint paint; + flutter::PaintData paintData; + paint.paint()->setAntiAlias(true); + paint.paint()->setColor(trackInfo.color.GetValue()); + paint.paint()->setStyle(SkPaint::Style::kStroke_Style); + paint.paint()->setStrokeWidth(thickness); + paint.paint()->setStrokeCap(SkPaint::kRound_Cap); + + canvas->drawArc(trackInfo.center.GetX() + (thickness / 2) - trackInfo.radius, + trackInfo.center.GetY() + (thickness / 2) - trackInfo.radius, + trackInfo.center.GetX() + trackInfo.radius - (thickness / 2), + trackInfo.center.GetY() + trackInfo.radius - (thickness / 2), M_PI * ((trackInfo.startDegree / 180) - 0.5), + M_PI * 2 * (trackInfo.sweepDegree / 360), false, paint, paintData); +} + +bool ShouldHighLight(const double start, const double interval, const double percent) +{ + if (LessOrEqual(percent, start + interval) && GreatOrEqual(percent, start)) { + return true; + } + return false; +} + +void DrawIndicator(RenderContext& context, const RenderRingInfo& trackInfo) +{ + auto canvas = ScopedCanvas::Create(context); + if (!canvas) { + LOGE("Paint canvas is null"); + return; + } + canvas->save(); + + auto path = flutter::CanvasPath::Create(); + double pathStartVertexX = trackInfo.center.GetX(); + double pathStartVertexY = trackInfo.center.GetY() - trackInfo.radius + (trackInfo.thickness / 2); + path->moveTo(pathStartVertexX, pathStartVertexY); + path->lineTo(pathStartVertexX - EDGE, pathStartVertexY + EDGE); + path->lineTo(pathStartVertexX - EDGE, pathStartVertexY + EDGE + HEIGHT_OFFSET); + path->lineTo(pathStartVertexX + EDGE, pathStartVertexY + EDGE + HEIGHT_OFFSET); + path->lineTo(pathStartVertexX + EDGE, pathStartVertexY + EDGE); + path->lineTo(pathStartVertexX, pathStartVertexY); + + canvas->canvas()->rotate( + trackInfo.startDegree + trackInfo.sweepDegree, trackInfo.center.GetX(), trackInfo.center.GetY()); + flutter::Paint paint; + flutter::PaintData paintData; + paint.paint()->setStyle(SkPaint::kFill_Style); + paint.paint()->setColor(Color::WHITE.GetValue()); + paint.paint()->setStrokeCap(SkPaint::kSquare_Cap); + paint.paint()->setStrokeWidth(INDICATOR_STROKE_WIDTH); + canvas->drawPath(path.get(), paint, paintData); + + paint.paint()->setStyle(SkPaint::kStroke_Style); + paint.paint()->setColor(Color::BLACK.GetValue()); + canvas->drawPath(path.get(), paint, paintData); + canvas->restore(); +} + +void FlutterRenderArcTrack::Paint(RenderContext& context, const Offset& offset) +{ + RenderRingInfo data = paintData_; + // now depend on box to clip + if (data.center.GetX() < 0.0 || data.center.GetY() < 0.0) { + data.center = Offset(GetLayoutSize().Width() / 2, GetLayoutSize().Height() / 2); + } + if (data.radius < 0.0) { + data.radius = GetLayoutSize().Width() / 2; + } + data.center += offset; + if (!showIndicator_) { + data.startDegree = + leftToRight_ ? paintData_.startDegree : paintData_.startDegree + paintData_.sweepDegree; + data.sweepDegree = leftToRight_ ? paintData_.sweepDegree : -1 * paintData_.sweepDegree; + // draw background + data.color = GetBackgroundColor(); + DrawGauge(context, data); + data.color = GetSelectColor(); + data.sweepDegree = data.sweepDegree * GetTotalRatio(); + // draw content + DrawGauge(context, data); + } else { + if (colors_.size() == 0 || colors_.size() != weights_.size()) { + return; + } + double totalWeight = 0.0; + for (const auto& weight : weights_) { + totalWeight += weight; + } + if (NearEqual(totalWeight, 0.0)) { + LOGE("total weight is 0.0"); + return; + } + double currentStart = 0.0; + double highLightStart = 0.0; + size_t highLightIndex = 0; + double ratio = leftToRight_ ? GetTotalRatio() : 1 - GetTotalRatio(); + for (int32_t index = colors_.size() - 1; index >= 0; --index) { + data.color = colors_[index]; + data.color.ChangeAlpha(UNSELECT_ALPHA); + currentStart += weights_[index]; + if (ShouldHighLight(totalWeight - currentStart, weights_[index], ratio * totalWeight)) { + highLightIndex = index; + highLightStart = totalWeight - currentStart; + } + data.startDegree = paintData_.startDegree + (1 - currentStart / totalWeight) * paintData_.sweepDegree; + data.sweepDegree = (weights_[index] / totalWeight) * paintData_.sweepDegree; + DrawGauge(context, data); + } + // draw highlight part + data.color = colors_[highLightIndex]; + data.startDegree = paintData_.startDegree + (highLightStart / totalWeight) * paintData_.sweepDegree; + data.sweepDegree = (weights_[highLightIndex] / totalWeight) * paintData_.sweepDegree; + DrawGauge(context, data); + data.startDegree = paintData_.startDegree; + data.sweepDegree = paintData_.sweepDegree * ratio; + DrawIndicator(context, data); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/track/flutter_render_arc_track.h b/frameworks/core/components/track/flutter_render_arc_track.h new file mode 100644 index 00000000..c15f2257 --- /dev/null +++ b/frameworks/core/components/track/flutter_render_arc_track.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRACK_FLUTTER_RENDER_ARC_TRACK_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRACK_FLUTTER_RENDER_ARC_TRACK_H + +#include "core/components/track/render_track.h" + +namespace OHOS::Ace { + +class FlutterRenderArcTrack : public RenderArcTrack { + DECLARE_ACE_TYPE(FlutterRenderArcTrack, RenderArcTrack); + +public: + FlutterRenderArcTrack() = default; + ~FlutterRenderArcTrack() override = default; + + void Paint(RenderContext& context, const Offset& offset) override; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRACK_FLUTTER_RENDER_ARC_TRACK_H diff --git a/frameworks/core/components/track/flutter_render_circular_track.cpp b/frameworks/core/components/track/flutter_render_circular_track.cpp new file mode 100644 index 00000000..3a849bf9 --- /dev/null +++ b/frameworks/core/components/track/flutter_render_circular_track.cpp @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/track/flutter_render_circular_track.h" + +#include "third_party/skia/include/effects/SkGradientShader.h" + +#include "core/pipeline/base/flutter_render_context.h" +#include "core/pipeline/base/scoped_canvas_state.h" + +namespace OHOS::Ace { +namespace { + +constexpr double COLOR_STOP = 0.4; +constexpr int32_t COLOR_NUM = 3; + +} // namespace + +void DrawArc(RenderContext& context, const RenderRingInfo& trackInfo) +{ + auto canvas = ScopedCanvas::Create(context); + if (!canvas) { + LOGE("Paint canvas is null"); + return; + } + double thickness = trackInfo.thickness; + flutter::Paint paint; + flutter::PaintData paintData; + paint.paint()->setAntiAlias(true); + if (trackInfo.gradient.IsValid()) { + SkColor colors[trackInfo.gradient.GetColors().size() + 1]; + // size cannot be larger than uint32_t. + for (uint32_t index = 0; index < trackInfo.gradient.GetColors().size(); index++) { + colors[index] = trackInfo.gradient.GetColors()[index].GetColor().GetValue(); + } + colors[trackInfo.gradient.GetColors().size()] = trackInfo.gradient.GetColors()[0].GetColor().GetValue(); + float position[] = { COLOR_STOP, 2.0 * COLOR_STOP, 1.0 }; +#ifdef USE_SYSTEM_SKIA + paint.paint()->setShader( + SkGradientShader::MakeSweep(trackInfo.center.GetX(), trackInfo.center.GetY(), colors, position, COLOR_NUM, + SkShader::kClamp_TileMode, trackInfo.startDegree, trackInfo.startDegree + 360, true, nullptr)); +#else + paint.paint()->setShader( + SkGradientShader::MakeSweep(trackInfo.center.GetX(), trackInfo.center.GetY(), colors, position, COLOR_NUM, + SkTileMode::kClamp, trackInfo.startDegree, trackInfo.startDegree + 360, true, nullptr)); +#endif + } else { + paint.paint()->setColor(trackInfo.color.GetValue()); + } + paint.paint()->setStyle(SkPaint::Style::kStroke_Style); + paint.paint()->setStrokeWidth(thickness); + paint.paint()->setStrokeCap(SkPaint::kRound_Cap); + + canvas->drawArc(trackInfo.center.GetX() + (thickness / 2) - trackInfo.radius, + trackInfo.center.GetY() + (thickness / 2) - trackInfo.radius, + trackInfo.center.GetX() + trackInfo.radius - (thickness / 2), + trackInfo.center.GetY() + trackInfo.radius - (thickness / 2), + M_PI * (trackInfo.clockwise * (trackInfo.startDegree / 180)), + M_PI * 2 * (trackInfo.clockwise * trackInfo.sweepDegree / 360), false, paint, paintData); +} + +RefPtr RenderCircleTrack::Create() +{ + LOGD("Progress::Create"); + return AceType::MakeRefPtr(); +} + +void FlutterRenderCircularTrack::Paint(RenderContext& context, const Offset& offset) +{ + RenderRingInfo data = paintData_; + + data.center = offset + Offset(GetLayoutSize().Width() / 2, GetLayoutSize().Height() / 2); + data.radius = GetLayoutSize().Width() / 2; + auto canvas = ScopedCanvas::Create(context); + if (!canvas) { + LOGE("Paint canvas is null"); + return; + } + canvas->save(); + // change the start point to the top. + canvas.GetSkCanvas()->rotate(-90.0, data.center.GetX(), data.center.GetY()); + // draw background + data.color = GetBackgroundColor(); + DrawArc(context, data); + + // draw cache + data.color = GetCachedColor(); + data.sweepDegree = paintData_.sweepDegree * GetCachedRatio(); + DrawArc(context, data); + + // draw select + data.color = GetSelectColor(); + data.gradient = GetGradient(); + data.sweepDegree = paintData_.sweepDegree * GetTotalRatio(); + DrawArc(context, data); + + canvas->restore(); +} + +} \ No newline at end of file diff --git a/frameworks/core/components/track/flutter_render_circular_track.h b/frameworks/core/components/track/flutter_render_circular_track.h new file mode 100644 index 00000000..6720729b --- /dev/null +++ b/frameworks/core/components/track/flutter_render_circular_track.h @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRACK_FLUTTER_RENDER_CIRCULAR_TRACK_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRACK_FLUTTER_RENDER_CIRCULAR_TRACK_H + +#include "core/components/track/render_track.h" + +namespace OHOS::Ace { + +class FlutterRenderCircularTrack : public RenderCircleTrack { +public: + FlutterRenderCircularTrack() = default; + ~FlutterRenderCircularTrack() override = default; + + void Paint(RenderContext& context, const Offset& offset) override; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRACK_FLUTTER_RENDER_CIRCULAR_TRACK_H diff --git a/frameworks/core/components/track/flutter_render_linear_track.cpp b/frameworks/core/components/track/flutter_render_linear_track.cpp new file mode 100644 index 00000000..5e85099e --- /dev/null +++ b/frameworks/core/components/track/flutter_render_linear_track.cpp @@ -0,0 +1,237 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/track/flutter_render_linear_track.h" + +#include "flutter/lib/ui/ui_dart_state.h" +#include "third_party/skia/include/core/SkMaskFilter.h" +#include "third_party/skia/include/core/SkShader.h" +#include "third_party/skia/include/effects/SkGradientShader.h" + +#include "core/components/slider/render_slider.h" +#include "core/components/track/render_track.h" +#include "core/pipeline/base/flutter_render_context.h" + +namespace OHOS::Ace { + +sk_sp FlutterRenderLinearTrack::BlendSkShader(const SkPoint pts, const SkColor color, bool useAnimator) +{ + const double scanLeftOffset = NormalizeToPx(Dimension(75, DimensionUnit::VP)); + const double scanRightOffset = NormalizeToPx(Dimension(5, DimensionUnit::VP)); + const Color hightLight = Color::FromString("#88ffffff"); + const Color shadow = Color::FromString("#00ffffff"); + SkColor scanColors[3] = { shadow.GetValue(), hightLight.GetValue(), shadow.GetValue() }; + SkScalar scanPos[3] = { 0, 0.94, 1 }; + sk_sp scanShader; + sk_sp backgroundShader; + sk_sp blendShader; + const SkPoint gradientPoints[2] = { { pts.fX - scanLeftOffset, pts.fY }, { pts.fX + scanRightOffset, pts.fY } }; +#ifdef USE_SYSTEM_SKIA + backgroundShader = SkShader::MakeColorShader(color); + scanShader = SkGradientShader::MakeLinear(gradientPoints, scanColors, scanPos, 3, SkShader::kDecal_TileMode); + if (useAnimator) { + blendShader = SkShader::MakeCompose(backgroundShader, scanShader, SkBlendMode::kSrcOver); + } else { + blendShader = backgroundShader; + } +#else + backgroundShader = SkShaders::Color(color); + scanShader = SkGradientShader::MakeLinear(gradientPoints, scanColors, scanPos, 3, SkTileMode::kDecal); + if (useAnimator) { + blendShader = SkShaders::Blend(SkBlendMode::kSrcOver, backgroundShader, scanShader); + } else { + blendShader = backgroundShader; + } +#endif + return blendShader; +} + +RefPtr RenderTrack::Create() +{ + return AceType::MakeRefPtr(); +} + +void FlutterRenderLinearTrack::Paint(RenderContext& context, const Offset& offset) +{ + if (GetSliderMode() == SliderMode::INSET) { + PaintSliderTrack(context, offset); + return; + } + auto canvas = ScopedCanvas::Create(context); + if (!canvas) { + LOGE("Paint canvas is null"); + return; + } + double trackHeight = NormalizeToPx(TRACK_HEIGHT_DP); + if (!NearEqual(GetTrackThickness(), 0.0)) { + trackHeight = GetTrackThickness(); + } + // Draw background + PaintBackgroundTrack(canvas, offset, trackHeight); + + // Draw slider steps + PaintSliderSteps(context, offset); + + // Draw cache region + double trackLength = GetLayoutSize().Width(); + trackLength = trackLength - trackHeight; + if (!NearEqual(GetCachedRatio(), 0.0)) { + flutter::Paint cachedPaint; + flutter::PaintData cachedPaintData; + cachedPaint.paint()->setAntiAlias(true); + cachedPaint.paint()->setColor(GetCachedColor().GetValue()); + const double startRect = leftToRight_ ? offset.GetX() : offset.GetX() + GetLayoutSize().Width(); + const double endRect = leftToRight_ ? startRect + trackHeight + trackLength * GetCachedRatio() + : startRect - trackHeight - trackLength * GetCachedRatio(); + SkRRect cachedRect = SkRRect::MakeRectXY( + { startRect, offset.GetY(), endRect, offset.GetY() + trackHeight }, trackHeight * HALF, trackHeight * HALF); + flutter::RRect cachedRectFlutter = flutter::RRect(); + cachedRectFlutter.sk_rrect = cachedRect; + canvas->drawRRect(cachedRectFlutter, cachedPaint, cachedPaintData); + } + // Draw selected region + if (!NearEqual(GetTotalRatio(), 0.0)) { + flutter::Paint selectPaint; + flutter::PaintData selectPaintData; + selectPaint.paint()->setAntiAlias(true); + + const double startRect = leftToRight_ ? offset.GetX() : offset.GetX() + GetLayoutSize().Width(); + const double endRect = leftToRight_ ? startRect + trackHeight + trackLength * GetTotalRatio() + : startRect - trackHeight - trackLength * GetTotalRatio(); + SkRRect selectRect = SkRRect::MakeRectXY( + { startRect, offset.GetY(), endRect, offset.GetY() + trackHeight }, trackHeight * HALF, trackHeight * HALF); + flutter::RRect selectRectFlutter = flutter::RRect(); + selectRectFlutter.sk_rrect = selectRect; + selectPaint.paint()->setShader(BlendSkShader({ startRect + scanHighLightValue_ * trackLength, offset.GetY() }, + GetSelectColor().GetValue(), playAnimation_)); + canvas->drawRRect(selectRectFlutter, selectPaint, selectPaintData); + } +} + +void FlutterRenderLinearTrack::PaintSliderSteps(RenderContext& context, const Offset& offset) +{ + if (NearZero(GetSliderSteps()) || NearEqual(GetSliderSteps(), GetLayoutSize().Width())) { + LOGD("slider steps invalid"); + return; + } + auto canvas = ScopedCanvas::Create(context); + if (!canvas) { + LOGE("Paint canvas is null"); + return; + } + + SkCanvas* skCanvas = canvas->canvas(); + if (skCanvas == nullptr) { + LOGE("Paint skCanvas is null"); + return; + } + + double size = 0.0; + Color color; + RefPtr theme = GetTheme(); + if (theme) { + size = NormalizeToPx(theme->GetMarkerSize()); + color = theme->GetMarkerColor(); + } + + double trackHeight = NormalizeToPx(TRACK_HEIGHT_DP); + if (!NearEqual(GetTrackThickness(), 0.0)) { + trackHeight = GetTrackThickness(); + } + const double trackLength = GetLayoutSize().Width(); + const double dyOffset = offset.GetY() + trackHeight * HALF; + double current = offset.GetX(); + + SkPaint skPaint; + skPaint.setColor(color.GetValue()); + skPaint.setStyle(SkPaint::Style::kStroke_Style); + skPaint.setStrokeWidth(size); + skPaint.setStrokeCap(SkPaint::Cap::kRound_Cap); + SkPath path; + + while (current < offset.GetX() + trackLength) { + // do not draw first mark on track head + current += GetSliderSteps(); + double dxOffset = current; + if (GetSliderMode() == SliderMode::OUTSET) { + dxOffset = std::clamp(current, offset.GetX() + size * HALF, offset.GetX() + trackLength - size * HALF); + } else { + dxOffset = std::clamp(current, offset.GetX(), offset.GetX() + trackLength); + } + path.moveTo(SkDoubleToScalar(dxOffset), SkDoubleToScalar(dyOffset)); + path.lineTo(SkDoubleToScalar(dxOffset), SkDoubleToScalar(dyOffset)); + } + skCanvas->drawPath(path, skPaint); +} + +void FlutterRenderLinearTrack::PaintSliderTrack(RenderContext& context, const Offset& offset) +{ + auto canvas = ScopedCanvas::Create(context); + if (!canvas) { + LOGE("Paint canvas is null"); + return; + } + double trackHeight = NormalizeToPx(TRACK_HEIGHT_DP); + if (!NearEqual(GetTrackThickness(), 0.0)) { + trackHeight = GetTrackThickness(); + } + const double trackLength = GetLayoutSize().Width(); + const double dyOffset = offset.GetY() + trackHeight * HALF; + + // Draw background + flutter::Paint railPaint; + flutter::PaintData railPaintData; + railPaint.paint()->setAntiAlias(true); + railPaint.paint()->setColor(GetBackgroundColor().GetValue()); + railPaint.paint()->setStyle(SkPaint::Style::kStroke_Style); + railPaint.paint()->setStrokeWidth(trackHeight); + railPaint.paint()->setStrokeCap(SkPaint::kRound_Cap); + canvas->drawLine(offset.GetX(), dyOffset, offset.GetX() + trackLength, dyOffset, railPaint, railPaintData); + + // draw steps + PaintSliderSteps(context, offset); + + // Draw selected region + if (!NearEqual(GetTotalRatio(), 0.0)) { + flutter::Paint selectPaint; + flutter::PaintData selectPaintData; + selectPaint.paint()->setAntiAlias(true); + selectPaint.paint()->setColor(GetSelectColor().GetValue()); + selectPaint.paint()->setStyle(SkPaint::Style::kStroke_Style); + selectPaint.paint()->setStrokeWidth(trackHeight); + selectPaint.paint()->setStrokeCap(SkPaint::kRound_Cap); + const double fromX = leftToRight_ ? offset.GetX() : offset.GetX() + trackLength; + const double toX = leftToRight_ ? fromX + trackLength * GetTotalRatio() : fromX - trackLength * GetTotalRatio(); + canvas->drawLine(fromX, dyOffset, toX, dyOffset, selectPaint, selectPaintData); + } +} + +void FlutterRenderLinearTrack::PaintBackgroundTrack( + const ScopedCanvas& canvas, const Offset& offset, double trackHeight) const +{ + flutter::Paint railPaint; + flutter::PaintData railPaintData; + railPaint.paint()->setAntiAlias(true); + railPaint.paint()->setColor(GetBackgroundColor().GetValue()); + double trackLength = GetLayoutSize().Width(); + SkRRect rrect = + SkRRect::MakeRectXY({ offset.GetX(), offset.GetY(), offset.GetX() + trackLength, offset.GetY() + trackHeight }, + trackHeight * HALF, trackHeight * HALF); + flutter::RRect flutterRect = flutter::RRect(); + flutterRect.sk_rrect = rrect; + canvas->drawRRect(flutterRect, railPaint, railPaintData); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/track/flutter_render_linear_track.h b/frameworks/core/components/track/flutter_render_linear_track.h new file mode 100644 index 00000000..cc63f351 --- /dev/null +++ b/frameworks/core/components/track/flutter_render_linear_track.h @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRACK_FLUTTER_RENDER_LINEAR_TRACK_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRACK_FLUTTER_RENDER_LINEAR_TRACK_H + +#include "base/geometry/offset.h" +#include "core/components/track/render_track.h" +#include "core/pipeline/base/render_context.h" +#include "core/pipeline/base/scoped_canvas_state.h" + +namespace OHOS::Ace { + +class FlutterRenderLinearTrack : public RenderTrack { + DECLARE_ACE_TYPE(FlutterRenderLinearTrack, RenderTrack); + +public: + FlutterRenderLinearTrack() = default; + ~FlutterRenderLinearTrack() override = default; + + void Paint(RenderContext& context, const Offset& offset) override; + void PaintSliderTrack(RenderContext& context, const Offset& offset); + void PaintSliderSteps(RenderContext& context, const Offset& offset); + void PaintBackgroundTrack(const ScopedCanvas& canvas, const Offset& offset, double trackHeight) const; + +private: + sk_sp BlendSkShader(const SkPoint pts, const SkColor color, bool useAnimator = false); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRACK_FLUTTER_RENDER_LINEAR_TRACK_H diff --git a/frameworks/core/components/track/flutter_render_moon_track.cpp b/frameworks/core/components/track/flutter_render_moon_track.cpp new file mode 100644 index 00000000..6c7a4b4e --- /dev/null +++ b/frameworks/core/components/track/flutter_render_moon_track.cpp @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "flutter_render_moon_track.h" + +#include "flutter/lib/ui/painting/path.h" + +#include "core/pipeline/base/scoped_canvas_state.h" + +namespace OHOS::Ace { + +RefPtr RenderMoonTrack::Create() +{ + return AceType::MakeRefPtr(); +} + +void FlutterRenderMoonTrack::Paint(RenderContext& context, const Offset& offset) +{ + Size canvasSize = GetLayoutSize(); + Offset center = offset + Offset(canvasSize.Width() / 2, canvasSize.Height() / 2); + double radius = std::min(canvasSize.Width(), canvasSize.Height()) / 2; + flutter::Paint paint; + flutter::PaintData paintData; + paint.paint()->setAntiAlias(true); + paint.paint()->setColor(GetSelectColor().GetValue()); + paint.paint()->setStyle(SkPaint::kFill_Style); + auto canvas = ScopedCanvas::Create(context); + auto path = flutter::CanvasPath::Create(); + + SkPaint backgroundPaint; + backgroundPaint.setStyle(SkPaint::kFill_Style); + backgroundPaint.setAntiAlias(true); + backgroundPaint.setColor(GetBackgroundColor().GetValue()); + canvas->canvas()->drawCircle(center.GetX(), center.GetY(), radius, backgroundPaint); + + if (GetTotalRatio() <= 0.5) { + path->moveTo(center.GetX(), center.GetY() - radius); + path->addArc(center.GetX() - radius, center.GetY() - radius, center.GetX() + radius, center.GetY() + radius, + M_PI / 2, M_PI); + double progressOffset = radius - radius * GetTotalRatio() / 0.5; + path->addArc(center.GetX() - progressOffset, center.GetY() - radius, center.GetX() + progressOffset, + center.GetY() + radius, 3 * M_PI / 2, -M_PI); + canvas->drawPath(path.get(), paint, paintData); + } else { + double progressOffset = radius * (GetTotalRatio() - 0.5) / 0.5; + path->moveTo(center.GetX(), center.GetY() - radius); + path->addArc(center.GetX() - radius, center.GetY() - radius, center.GetX() + radius, center.GetY() + radius, + M_PI / 2, M_PI); + + path->addArc(center.GetX() - progressOffset, center.GetY() - radius, center.GetX() + progressOffset, + center.GetY() + radius, 3 * M_PI / 2, M_PI); + canvas->drawPath(path.get(), paint, paintData); + } +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/track/flutter_render_moon_track.h b/frameworks/core/components/track/flutter_render_moon_track.h new file mode 100644 index 00000000..aa2be2bb --- /dev/null +++ b/frameworks/core/components/track/flutter_render_moon_track.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRACK_FLUTTER_RENDER_MOON_TRACK_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRACK_FLUTTER_RENDER_MOON_TRACK_H + +#include "core/components/track/render_track.h" + +namespace OHOS::Ace { + +class FlutterRenderMoonTrack : public RenderMoonTrack { + DECLARE_ACE_TYPE(FlutterRenderMoonTrack, RenderMoonTrack); + +public: + FlutterRenderMoonTrack() = default; + ~FlutterRenderMoonTrack() override = default; + + void Paint(RenderContext& context, const Offset& offset) override; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRACK_FLUTTER_RENDER_MOON_TRACK_H diff --git a/frameworks/core/components/track/flutter_render_scale_ring_track.cpp b/frameworks/core/components/track/flutter_render_scale_ring_track.cpp new file mode 100644 index 00000000..e1abd8bc --- /dev/null +++ b/frameworks/core/components/track/flutter_render_scale_ring_track.cpp @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/track/flutter_render_scale_ring_track.h" + +#include "flutter/lib/ui/ui_dart_state.h" +#include "third_party/skia/include/effects/Sk1DPathEffect.h" + +#include "core/components/theme/theme_constants.h" +#include "core/pipeline/base/scoped_canvas_state.h" + +namespace OHOS::Ace { + +void DrawScaleArc(RenderContext& context, const RenderRingInfo& trackInfo) +{ + auto canvas = ScopedCanvas::Create(context); + if (!canvas) { + LOGE("Paint canvas is null"); + return; + } + flutter::Paint paint; + flutter::PaintData paintData; + SkPath path; + path.addRRect(SkRRect::MakeRectXY(SkRect::MakeWH(trackInfo.scaleStrokeWidth, trackInfo.thickness), + trackInfo.thickness / 2.0, trackInfo.thickness / 2.0)); + double pathDistance = 2.0 * M_PI * + (trackInfo.radius + (NearEqual(trackInfo.clockwise, 1.0) ? trackInfo.thickness : 0.0)) / + trackInfo.totalScaleNumber; + paint.paint()->setPathEffect( + SkPath1DPathEffect::Make(path, static_cast(pathDistance), 0.0f, SkPath1DPathEffect::kRotate_Style)); + paint.paint()->setStyle(SkPaint::Style::kStroke_Style); + paint.paint()->setStrokeWidth(trackInfo.thickness); + paint.paint()->setAntiAlias(true); + paint.paint()->setColor(trackInfo.color.GetValue()); + + static int32_t totalDegree = 360; + double radiusPrecision = trackInfo.thickness; + if (trackInfo.clockwise != 1) { + radiusPrecision = 0.0; + } + canvas->drawArc(trackInfo.center.GetX() - trackInfo.radius - radiusPrecision, + trackInfo.center.GetY() - trackInfo.radius - radiusPrecision, + trackInfo.center.GetX() + trackInfo.radius + radiusPrecision, + trackInfo.center.GetY() + trackInfo.radius + radiusPrecision, + M_PI * (trackInfo.clockwise * (trackInfo.startDegree / (totalDegree / 2.0)) - 0.5), + M_PI * 2 * (trackInfo.clockwise * trackInfo.sweepDegree / totalDegree), false, paint, paintData); +} + +void FlutterRenderScaleRingTrack::Paint(RenderContext& context, const Offset& offset) +{ + auto canvas = ScopedCanvas::Create(context); + if (!canvas) { + LOGE("Paint canvas is null"); + return; + } + RenderRingInfo data = paintData_; + data.center = offset + Offset(GetLayoutSize().Width() / 2.0, GetLayoutSize().Height() / 2.0); + data.radius = (GetLayoutSize().Width() / 2.0) - data.thickness; + + if (data.totalScaleNumber == 0) { + LOGE("Scale number error. Use default number(120)"); + data.totalScaleNumber = 120; + } + data.color = GetBackgroundColor(); + DrawScaleArc(context, data); + + data.color = GetCachedColor(); + data.sweepDegree = paintData_.sweepDegree * GetCachedRatio(); + DrawScaleArc(context, data); + + data.color = GetSelectColor(); + data.sweepDegree = paintData_.sweepDegree * GetTotalRatio(); + DrawScaleArc(context, data); +} + +RefPtr RenderScaleRingTrack::Create() +{ + LOGD("Progress::RenderScaleRingTrack Create"); + return AceType::MakeRefPtr(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/track/flutter_render_scale_ring_track.h b/frameworks/core/components/track/flutter_render_scale_ring_track.h new file mode 100644 index 00000000..237be47f --- /dev/null +++ b/frameworks/core/components/track/flutter_render_scale_ring_track.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRACK_FLUTTER_RENDER_SCALE_RING_TRACK_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRACK_FLUTTER_RENDER_SCALE_RING_TRACK_H + +#include "core/components/track/render_track.h" + +namespace OHOS::Ace { + +class FlutterRenderScaleRingTrack : public RenderScaleRingTrack { + DECLARE_ACE_TYPE(FlutterRenderScaleRingTrack, RenderScaleRingTrack); + +public: + FlutterRenderScaleRingTrack() = default; + ~FlutterRenderScaleRingTrack() override = default; + + void Paint(RenderContext& context, const Offset& offset) override; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRACK_FLUTTER_RENDER_SCALE_RING_TRACK_H diff --git a/frameworks/core/components/track/render_track.cpp b/frameworks/core/components/track/render_track.cpp new file mode 100644 index 00000000..6c067ad9 --- /dev/null +++ b/frameworks/core/components/track/render_track.cpp @@ -0,0 +1,216 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/track/render_track.h" + +#include "base/log/dump_log.h" +#include "core/components/theme/theme_constants.h" + +namespace OHOS::Ace { +namespace { + +constexpr double MILLISECOND_PER_PERCENT = 20.0; +constexpr double MAX_TRANSITION_TIME = 5000.0; +constexpr double MIN_TRANSITION_TIME = 200.0; +constexpr double SECOND_TO_MILLISECOND = 1000.0; + +} // namespace + +void RenderTrack::Update(const RefPtr& component) +{ + LOGD("Slider/Progress::RenderTrack Update"); + const RefPtr track = AceType::DynamicCast(component); + if (track == nullptr) { + LOGE("Slider/Progress::RenderTrack track updata with nullptr"); + return; + } + + theme_ = GetTheme(); + selectColor_ = track->GetSelectColor(); + selectGradient_ = track->GetSelectGradient(); + backgroundColor_ = track->GetBackgroundColor(); + cachedColor_ = track->GetCachedColor(); + colors_ = track->GetSectionsColors(); + weights_ = track->GetSectionsWeights(); + showIndicator_ = track->GetIndicatorFlag(); + + leftToRight_ = track->GetTextDirection() == TextDirection::LTR; + + paintData_.startDegree = track->GetStartDegree(); + paintData_.sweepDegree = track->GetSweepDegree(); + thickness_ = track->GetTrackThickness(); + paintData_.clockwise = track->GetClockwiseValue(); + paintData_.totalScaleNumber = track->GetScaleNumber(); + scaleStrokeWidth_ = track->GetScaleWidth(); + paintData_.radius = track->GetRadius(); + paintData_.center.SetY(track->GetCenterY()); + paintData_.center.SetX(track->GetCenterX()); + + auto pipelineContext = GetContext().Upgrade(); + if (!pipelineContext) { + return; + } + if (!progressTransitionController_) { + progressTransitionController_ = AceType::MakeRefPtr(pipelineContext); + } + if (!scanHaloController_) { + scanHaloController_ = AceType::MakeRefPtr(pipelineContext); + } + MarkNeedLayout(); +} + +void RenderTrack::PerformLayout() +{ + paintData_.thickness = NormalizeToPx(thickness_); + paintData_.scaleStrokeWidth = NormalizeToPx(scaleStrokeWidth_); + Size size = Measure(); + SetLayoutSize(size); + UpdateAnimation(); +} + +void RenderTrack::UpdateAnimation() +{ + if (!playAnimation_) { + return; + } + if (needUpdateAnimation_) { + auto transistionAnimation = + AceType::MakeRefPtr>(totalRatio_, prevousPercentValue_, Curves::EASE_OUT); + transistionAnimation->AddListener([this](const double& value) { + totalRatio_ = value; + MarkNeedRender(); + }); + if (progressTransitionController_) { + double animationTime = 0.0; + if (std::abs(percentChange_ * MILLISECOND_PER_PERCENT) > animationDuring_.count() * SECOND_TO_MILLISECOND) { + animationTime = std::abs(percentChange_ * MILLISECOND_PER_PERCENT); + } else { + animationTime = animationDuring_.count() * SECOND_TO_MILLISECOND; + } + + if (animationTime < MIN_TRANSITION_TIME || prevousPercentValue_ == 100.0) { + animationTime = MIN_TRANSITION_TIME; + } else if (animationTime > MAX_TRANSITION_TIME) { + animationTime = MAX_TRANSITION_TIME; + } + progressTransitionController_->ClearInterpolators(); + progressTransitionController_->AddInterpolator(transistionAnimation); + progressTransitionController_->SetDuration(animationTime); + progressTransitionController_->SetIteration(1); + progressTransitionController_->Stop(); + progressTransitionController_->Play(); + } + + auto scanAnimation = AceType::MakeRefPtr>(0, prevousPercentValue_, Curves::LINEAR); + scanAnimation->AddListener([this](const double& value) { + scanHighLightValue_ = value; + MarkNeedRender(); + }); + if (scanHaloController_) { + scanHaloController_->ClearInterpolators(); + scanHaloController_->AddInterpolator(scanAnimation); + scanHaloController_->SetDuration(1500); + scanHaloController_->SetIteration(ANIMATION_REPEAT_INFINITE); + scanHaloController_->Play(); + } + } +} + +Size RenderTrack::Measure() +{ + if (GetLayoutParam().GetMaxSize().IsInfinite()) { + auto defaultWidth = theme_ != nullptr ? NormalizeToPx(theme_->GetTrackWidth()) : 0.0; + return Size(defaultWidth, paintData_.thickness); + } + Size layoutSize; + layoutSize.SetHeight(paintData_.thickness); + layoutSize.SetWidth(GetLayoutParam().GetMaxSize().Width()); + return layoutSize; +} + +void RenderTrack::Dump() +{ + DumpLog::GetInstance().AddDesc(std::string("RenderTrack: ").append(GetLayoutSize().ToString())); +} + +Size RenderCircleTrack::Measure() +{ + if (GetLayoutParam().GetMaxSize().IsInfinite()) { + double diameter = theme_ != nullptr ? NormalizeToPx(theme_->GetRingDiameter()) : 0.0; + diameter = + std::min(diameter, std::min(GetLayoutParam().GetMaxSize().Width(), GetLayoutParam().GetMaxSize().Height())); + return Size(diameter, diameter); + } + double diameter = std::min(GetLayoutParam().GetMaxSize().Height(), GetLayoutParam().GetMaxSize().Width()); + return Size(diameter, diameter); +} + +void RenderCircleTrack::Dump() +{ + DumpLog::GetInstance().AddDesc(std::string("RenderCircleTrack: ").append(GetLayoutSize().ToString())); +} + +Size RenderScaleRingTrack::Measure() +{ + if (GetLayoutParam().GetMaxSize().IsInfinite()) { + double diameter = theme_ != nullptr ? NormalizeToPx(theme_->GetScaleRingDiameter()) : 0.0; + diameter = + std::min(diameter, std::min(GetLayoutParam().GetMaxSize().Width(), GetLayoutParam().GetMaxSize().Height())); + return Size(diameter, diameter); + } + double diameter = std::min(GetLayoutParam().GetMaxSize().Height(), GetLayoutParam().GetMaxSize().Width()); + return Size(diameter, diameter); +} + +void RenderScaleRingTrack::Dump() +{ + DumpLog::GetInstance().AddDesc(std::string("RenderScaleRingTrack: ").append(GetLayoutSize().ToString())); +} + +Size RenderArcTrack::Measure() +{ + if (GetLayoutParam().GetMaxSize().IsInfinite()) { + double diameter = theme_ != nullptr ? NormalizeToPx(theme_->GetRingDiameter()) : 0.0; + diameter = + std::min(diameter, std::min(GetLayoutParam().GetMaxSize().Width(), GetLayoutParam().GetMaxSize().Height())); + return Size(diameter, diameter); + } + double diameter = std::min(GetLayoutParam().GetMaxSize().Height(), GetLayoutParam().GetMaxSize().Width()); + return Size(diameter, diameter); +} + +void RenderArcTrack::Dump() +{ + DumpLog::GetInstance().AddDesc(std::string("RenderArcTrack: ").append(GetLayoutSize().ToString())); +} + +Size RenderMoonTrack::Measure() +{ + if (GetLayoutParam().GetMaxSize().IsInfinite()) { + double diameter = theme_ != nullptr ? NormalizeToPx(theme_->GetRingDiameter()) : 0.0; + diameter = + std::min(diameter, std::min(GetLayoutParam().GetMaxSize().Width(), GetLayoutParam().GetMaxSize().Height())); + return Size(diameter, diameter); + } + double diameter = std::min(GetLayoutParam().GetMaxSize().Height(), GetLayoutParam().GetMaxSize().Width()); + return Size(diameter, diameter); +} + +void RenderMoonTrack::Dump() +{ + DumpLog::GetInstance().AddDesc(std::string("RenderMoonTrack: ").append(GetLayoutSize().ToString())); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/track/render_track.h b/frameworks/core/components/track/render_track.h new file mode 100644 index 00000000..083c7e4d --- /dev/null +++ b/frameworks/core/components/track/render_track.h @@ -0,0 +1,235 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRACK_RENDER_TRACK_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRACK_RENDER_TRACK_H + +#include + +#include "core/animation/animator.h" +#include "core/animation/curve_animation.h" +#include "core/components/progress/progress_theme.h" +#include "core/components/track/track_component.h" +#include "core/pipeline/base/render_component.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +struct RenderRingInfo { + double radius = 0.0; + Gradient gradient; + Color color; + Offset center; + double startDegree = 0.0; + double sweepDegree = 0.0; + double thickness = 0.0; + double clockwise = 1.0; + + double scaleStrokeWidth = 0.0; + int32_t totalScaleNumber = 0; +}; + +class RenderTrack : public RenderNode { + DECLARE_ACE_TYPE(RenderTrack, RenderNode); + +public: + static RefPtr Create(); + + void Update(const RefPtr& component) override; + + void PerformLayout() override; + + void UpdateAnimation(); + + virtual Size Measure(); + + Color GetSelectColor() const + { + return selectColor_; + } + + void SetSelectColor(const Color& color) + { + selectColor_ = color; + } + + Color GetBackgroundColor() const + { + return backgroundColor_; + } + + void SetBackgroundColor(const Color& color) + { + backgroundColor_ = color; + } + + Color GetCachedColor() const + { + return cachedColor_; + } + + void SetCachedColor(const Color& color) + { + cachedColor_ = color; + } + + const Gradient& GetGradient() const + { + return selectGradient_; + } + + double GetTotalRatio() const + { + return totalRatio_; + } + + void SetTotalRatio(const double ratio) + { + needUpdateAnimation_ = false; + if (!playAnimation_) { + totalRatio_ = ratio; + } else if (!NearEqual(ratio, prevousPercentValue_)) { + animationDuring_ = std::chrono::steady_clock::now() - prevoiusUpdateTime_; + percentChange_ = ratio - prevousPercentValue_; + prevousPercentValue_ = ratio; + prevoiusUpdateTime_ = std::chrono::steady_clock::now(); + needUpdateAnimation_ = true; + } + } + + double GetCachedRatio() const + { + return cachedRatio_; + } + + void SetCachedRatio(const double ratio) + { + cachedRatio_ = ratio; + } + + const RenderRingInfo& GetRingTrackInfo() const + { + return paintData_; + } + + double GetTrackThickness() const + { + return paintData_.thickness; + } + + SliderMode GetSliderMode() const + { + return sliderMode_; + } + + void SetSliderMode(SliderMode mode) + { + sliderMode_ = mode; + } + + double GetSliderSteps() const + { + return sliderSteps_; + } + + void SetSliderSteps(double steps) + { + sliderSteps_ = steps; + } + + void SetAnimationPlay(bool playAnimation) + { + playAnimation_ = playAnimation; + } + + void Dump() override; + +protected: + RenderRingInfo paintData_; + bool showIndicator_ = false; + std::vector colors_; + std::vector weights_; + bool leftToRight_ = true; + RefPtr theme_; + SliderMode sliderMode_ = SliderMode::OUTSET; + double sliderSteps_ = 0.0; + + RefPtr progressTransitionController_; + RefPtr scanHaloController_; + double prevousPercentValue_ = 0.0; + double percentChange_ = 0.0; + std::chrono::steady_clock::time_point prevoiusUpdateTime_ = std::chrono::steady_clock::now(); + std::chrono::duration animationDuring_; + bool needUpdateAnimation_ = false; + bool playAnimation_ = false; + double scanHighLightValue_ = 0.0; + + Color selectColor_; + Gradient selectGradient_; + Color backgroundColor_; + Color cachedColor_; + double totalRatio_ = 0.0; + double cachedRatio_ = 0.0; + Dimension thickness_; + Dimension scaleStrokeWidth_; +}; + +class RenderCircleTrack : public RenderTrack { + DECLARE_ACE_TYPE(RenderCircleTrack, RenderTrack); + +public: + static RefPtr Create(); + + Size Measure() override; + + void Dump() override; +}; + +class RenderScaleRingTrack : public RenderTrack { + DECLARE_ACE_TYPE(RenderScaleRingTrack, RenderTrack); + +public: + static RefPtr Create(); + + Size Measure() override; + + void Dump() override; +}; + +class RenderArcTrack : public RenderTrack { + DECLARE_ACE_TYPE(RenderArcTrack, RenderTrack); + +public: + static RefPtr Create(); + + Size Measure() override; + + void Dump() override; +}; + +class RenderMoonTrack : public RenderTrack { + DECLARE_ACE_TYPE(RenderMoonTrack, RenderTrack); + +public: + static RefPtr Create(); + + Size Measure() override; + + void Dump() override; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRACK_RENDER_TRACK_H diff --git a/frameworks/core/components/track/track_component.cpp b/frameworks/core/components/track/track_component.cpp new file mode 100644 index 00000000..60273a11 --- /dev/null +++ b/frameworks/core/components/track/track_component.cpp @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/track/track_component.h" + +#include "core/components/track/render_track.h" + +namespace OHOS::Ace { + +RefPtr LinearTrack::CreateRenderNode() +{ + return RenderTrack::Create(); +} + +RefPtr CircularTrack::CreateRenderNode() +{ + return RenderCircleTrack::Create(); +} + +RefPtr ScaleRingTrack::CreateRenderNode() +{ + return RenderScaleRingTrack::Create(); +} + +RefPtr ArcTrack::CreateRenderNode() +{ + return RenderArcTrack::Create(); +} + +RefPtr MoonTrack::CreateRenderNode() +{ + return RenderMoonTrack::Create(); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/track/track_component.h b/frameworks/core/components/track/track_component.h new file mode 100644 index 00000000..eeddfb8e --- /dev/null +++ b/frameworks/core/components/track/track_component.h @@ -0,0 +1,389 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRACK_TRACK_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRACK_TRACK_COMPONENT_H + +#include + +#include "base/geometry/dimension.h" +#include "core/components/common/properties/color.h" +#include "core/components/common/properties/decoration.h" +#include "core/pipeline/base/component.h" +#include "core/pipeline/base/render_component.h" + +namespace OHOS::Ace { + +enum class SliderMode { + OUTSET, // block on track, track is thin + INSET, // block inside track, track is rough +}; + +inline const Dimension TRACK_HEIGHT_DP = Dimension(2.0, DimensionUnit::VP); + +class RingTrackInfo : public virtual AceType { + DECLARE_ACE_TYPE(RingTrackInfo, AceType); + +public: + RingTrackInfo() = default; + ~RingTrackInfo() override = default; + + void SetStartDegree(double startDegree) + { + startDegree_ = startDegree; + } + + void SetSweepDegree(double sweepDegree) + { + sweepDegree_ = sweepDegree; + } + + void SetClockwise(bool clockwise) + { + if (clockwise) { + clockwise_ = 1.0; + } else { + clockwise_ = -1.0; + } + } + + void SetDimension(const Dimension& thickness) + { + trackThickness_ = thickness; + } + + void SetScaleNumber(int32_t number) + { + totalScaleNumber_ = number; + } + + void SetScaleWidth(const Dimension& width) + { + scaleWidth_ = width; + } + + void SetRadius(double radius) + { + radius_ = radius; + } + + void SetX(double x) + { + coordinateX_ = x; + } + + void SetY(double y) + { + coordinateY_ = y; + } + + double GetRadius() const + { + return radius_; + } + + double GetX() const + { + return coordinateX_; + } + + double GetY() const + { + return coordinateY_; + } + + double GetStartDegree() const + { + return startDegree_; + } + + double GetSweepDegree() const + { + return sweepDegree_; + } + + const Dimension& GetTrackThickness() const + { + return trackThickness_; + } + + double GetClockwiseValue() const + { + return clockwise_; + } + + int32_t GetScaleNumber() const + { + return totalScaleNumber_; + } + + const Dimension& GetScaleWidth() const + { + return scaleWidth_; + } + +private: + Dimension trackThickness_; + + // degree from 0 to 360 + double startDegree_ = 0.0; + double sweepDegree_ = 360.0; + // clockwise is 1.0 and counter-clockwise is -1.0 + double clockwise_ = 1.0; + + double coordinateX_ = -1.0; + double coordinateY_ = -1.0; + double radius_ = -1.0; + + // the number of scale in ring. default number is 120 + int32_t totalScaleNumber_ = 120; + Dimension scaleWidth_; +}; + +class TrackComponent : public RenderComponent { + DECLARE_ACE_TYPE(TrackComponent, RenderComponent); + +public: + TrackComponent() = default; + ~TrackComponent() override = default; + + RefPtr CreateElement() override + { + // never use element to create element tree. + return nullptr; + } + + const Color& GetSelectColor() const + { + return selectColor_; + } + + void SetSelectColor(const Color& color) + { + selectColor_ = color; + } + + const Gradient& GetSelectGradient() const + { + return selectGradient_; + } + + void SetSelectGradient(const Gradient& color) + { + selectGradient_ = color; + } + + const Color& GetCachedColor() const + { + return cachedColor_; + } + + void SetCachedColor(const Color& color) + { + cachedColor_ = color; + } + + const Color& GetBackgroundColor() const + { + return backgroundColor_; + } + + void SetBackgroundColor(const Color& color) + { + backgroundColor_ = color; + } + + const Dimension& GetTrackThickness() const + { + return trackPaintData_->GetTrackThickness(); + } + + double GetStartDegree() const + { + return trackPaintData_->GetStartDegree(); + } + + double GetSweepDegree() const + { + return trackPaintData_->GetSweepDegree(); + } + + double GetClockwiseValue() const + { + return trackPaintData_->GetClockwiseValue(); + } + + int32_t GetScaleNumber() const + { + return trackPaintData_->GetScaleNumber(); + } + + const Dimension& GetScaleWidth() const + { + return trackPaintData_->GetScaleWidth(); + } + + void SetScaleNumber(int32_t number) + { + trackPaintData_->SetScaleNumber(number); + } + + void SetScaleWidth(const Dimension& width) + { + trackPaintData_->SetScaleWidth(width); + } + + void SetTrackThickness(const Dimension& thickness) + { + trackPaintData_->SetDimension(thickness); + } + + void SetIndicatorFlag(bool flag) + { + showIndicator_ = flag; + } + + void SetRadius(double radius) + { + trackPaintData_->SetRadius(radius); + } + + void SetCenterX(double x) + { + trackPaintData_->SetX(x); + } + + void SetCenterY(double y) + { + trackPaintData_->SetY(y); + } + + bool GetIndicatorFlag() const + { + return showIndicator_; + } + + void SetSectionsStyle(const std::vector& colors, const std::vector& weights) + { + colors_ = colors; + weights_ = weights; + } + + const std::vector& GetSectionsColors() const + { + return colors_; + } + + const std::vector& GetSectionsWeights() const + { + return weights_; + } + + RefPtr GetTrackInfo() const + { + return trackPaintData_; + } + + double GetRadius() const + { + return trackPaintData_->GetRadius(); + } + + double GetCenterX() const + { + return trackPaintData_->GetX(); + } + + double GetCenterY() const + { + return trackPaintData_->GetY(); + } + + bool GetShowAnimation() const + { + return showAnimation_; + } + + void SetShowAnimation(bool isAnimation) + { + showAnimation_ = isAnimation; + } + +private: + Color selectColor_; + Gradient selectGradient_; + Color cachedColor_; + Color backgroundColor_; + // the thickness of the track. when the track is circle, there is no effect. + RefPtr trackPaintData_ = AceType::MakeRefPtr(); + bool showIndicator_ = false; + std::vector colors_; + std::vector weights_; + bool showAnimation_ = true; +}; + +class LinearTrack : public TrackComponent { + DECLARE_ACE_TYPE(LinearTrack, TrackComponent); + +public: + LinearTrack() = default; + ~LinearTrack() override = default; + + RefPtr CreateRenderNode() override; +}; + +class CircularTrack : public TrackComponent { + DECLARE_ACE_TYPE(CircularTrack, TrackComponent); + +public: + CircularTrack() = default; + ~CircularTrack() override = default; + + RefPtr CreateRenderNode() override; +}; + +class ScaleRingTrack : public TrackComponent { + DECLARE_ACE_TYPE(ScaleRingTrack, TrackComponent); + +public: + ScaleRingTrack() = default; + ~ScaleRingTrack() override = default; + + RefPtr CreateRenderNode() override; +}; + +class ArcTrack : public TrackComponent { + DECLARE_ACE_TYPE(ArcTrack, TrackComponent); + +public: + ArcTrack() = default; + ~ArcTrack() override = default; + + RefPtr CreateRenderNode() override; +}; + +class MoonTrack : public TrackComponent { + DECLARE_ACE_TYPE(MoonTrack, TrackComponent); + +public: + MoonTrack() = default; + ~MoonTrack() override = default; + + RefPtr CreateRenderNode() override; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRACK_TRACK_COMPONENT_H diff --git a/frameworks/core/components/transform/BUILD.gn b/frameworks/core/components/transform/BUILD.gn new file mode 100644 index 00000000..30cd8120 --- /dev/null +++ b/frameworks/core/components/transform/BUILD.gn @@ -0,0 +1,24 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("transform") { + sources = [ + "click_spring_effect.cpp", + "flutter_render_transform.cpp", + "render_transform.cpp", + "transform_component.cpp", + "transform_element.cpp", + ] +} diff --git a/frameworks/core/components/transform/click_spring_effect.cpp b/frameworks/core/components/transform/click_spring_effect.cpp new file mode 100644 index 00000000..42729f4c --- /dev/null +++ b/frameworks/core/components/transform/click_spring_effect.cpp @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "click_spring_effect.h" + +#include + +namespace OHOS::Ace { +namespace { + +struct SpringEffectProperty { + double scale_; + double velocity_; + RefPtr springProperty_; +}; + +const static std::unordered_map CLICK_SPRING_EFFECT_PROPERTIES = { + { ClickSpringEffectType::SMALL, { 0.9, 1, AceType::MakeRefPtr(0.5, 410.0, 38.0) } }, + { ClickSpringEffectType::MEDIUM, { 0.95, 0.5, AceType::MakeRefPtr(0.5, 350.0, 35.0) } }, + { ClickSpringEffectType::LARGE, { 0.95, 0, AceType::MakeRefPtr(0.5, 240.0, 28.0) } }, +}; + +} // namespace + +ClickSpringEffect::ClickSpringEffect(const WeakPtr& context) +{ + controller_ = AceType::MakeRefPtr(context); +} + +void ClickSpringEffect::FinishPreviousAnimation() +{ + if (controller_ && !controller_->IsStopped()) { + controller_->Finish(); + } +} + +void ClickSpringEffect::ShowAnimation(TouchType touchType, ClickSpringEffectType type) +{ + FinishPreviousAnimation(); + auto propertyPos = CLICK_SPRING_EFFECT_PROPERTIES.find(type); + if (propertyPos == CLICK_SPRING_EFFECT_PROPERTIES.end()) { + LOGE("can't find type %{public}d", type); + return; + } + + auto& effectProperty = propertyPos->second; + RefPtr springMotion; + switch (touchType) { + case TouchType::DOWN: + springMotion = AceType::MakeRefPtr( + GetScale(), effectProperty.scale_, effectProperty.velocity_, effectProperty.springProperty_); + break; + case TouchType::UP: + case TouchType::CANCEL: + springMotion = AceType::MakeRefPtr( + GetScale(), 1.0, effectProperty.velocity_, effectProperty.springProperty_); + break; + default: + return; + } + if (!springMotion) { + return; + } + + springMotion->AddListener([weakEffect = AceType::WeakClaim(this)](double value) { + auto effect = weakEffect.Upgrade(); + if (effect) { + effect->SetScale(value); + effect->MarkRender(); + } + }); + + if (controller_) { + controller_->PlayMotion(springMotion); + } +} + +void ClickSpringEffect::MarkRender() +{ + auto node = renderNode_.Upgrade(); + if (node) { + node->MarkNeedRender(); + } +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/transform/click_spring_effect.h b/frameworks/core/components/transform/click_spring_effect.h new file mode 100644 index 00000000..152f1b40 --- /dev/null +++ b/frameworks/core/components/transform/click_spring_effect.h @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRANSFORM_CLICK_SPRING_EFFECT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRANSFORM_CLICK_SPRING_EFFECT_H + +#include + +#include "base/memory/ace_type.h" +#include "core/animation/animator.h" +#include "core/animation/spring_motion.h" +#include "core/gestures/touch_event.h" +#include "core/pipeline/base/render_node.h" +#include "core/pipeline/pipeline_context.h" + +namespace OHOS::Ace { + +enum class ClickSpringEffectType { + NONE, + SMALL, + MEDIUM, + LARGE +}; + +class ClickSpringEffect : public AceType { + DECLARE_ACE_TYPE(ClickSpringEffect, AceType) + +public: + explicit ClickSpringEffect(const WeakPtr& context); + virtual ~ClickSpringEffect() = default; + + void ShowAnimation(TouchType touchType, ClickSpringEffectType type); + + void MarkRender(); + + void SetRenderNode(const WeakPtr& renderNode) + { + renderNode_ = renderNode; + } + + double GetScale() const + { + return scale_; + } + + void SetScale(double scale) + { + scale_ = scale; + } + + void SetController(const RefPtr& controller) + { + controller_ = controller; + } + +private: + void FinishPreviousAnimation(); + + double scale_ { 1.0 }; + RefPtr controller_ = nullptr; + WeakPtr renderNode_ = nullptr; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRANSFORM_CLICK_SPRING_EFFECT_H diff --git a/frameworks/core/components/transform/flutter_render_transform.cpp b/frameworks/core/components/transform/flutter_render_transform.cpp new file mode 100644 index 00000000..17a3fecc --- /dev/null +++ b/frameworks/core/components/transform/flutter_render_transform.cpp @@ -0,0 +1,159 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/transform/flutter_render_transform.h" + +namespace OHOS::Ace { + +using namespace Flutter; + +tonic::Float64List ToFloat64List(const Matrix4& matrix4) +{ + tonic::Float64List floatData(matrix4.Count()); + for (int32_t i = 0; i < matrix4.Count(); i++) { + floatData[i] = matrix4[i]; + } + return floatData; +} + +RefPtr RenderTransform::Create() +{ + return AceType::MakeRefPtr(); +} + +RenderLayer FlutterRenderTransform::GetRenderLayer() +{ + if (!layer_) { + layer_ = AceType::MakeRefPtr(Matrix4::CreateIdentity(), 0.0, 0.0); + } + return AceType::RawPtr(layer_); +} + +void FlutterRenderTransform::UpdateTransformLayer() +{ + UpdateTransformByGlobalOffset(); +} + +void FlutterRenderTransform::Paint(RenderContext& context, const Offset& offset) +{ + if (needUpdateOrigin_) { + UpdateTransformOrigin(); + needUpdateOrigin_ = false; + } + UpdateTransform(); // Update transform param to Matrix. + + if (!CheckNeedPaint()) { + return; + } + + UpdateTransformByGlobalOffset(); + RenderNode::Paint(context, offset); +} + +void FlutterRenderTransform::UpdateTransformByGlobalOffset() +{ + Offset absoluteOffset = GetGlobalOffset(); + Matrix4 transform = GetEffectiveTransform(absoluteOffset); + if (layer_) { + layer_->Update(transform); + } +} + +void FlutterRenderTransform::OnGlobalPositionChanged() +{ + UpdateTransformByGlobalOffset(); +} + +bool FlutterRenderTransform::TouchTest(const Point& globalPoint, const Point& parentLocalPoint, + const TouchRestrict& touchRestrict, TouchTestResult& result) +{ + LOGD("Global point is %{public}lf, %{public}lf", globalPoint.GetX(), globalPoint.GetY()); + LOGD("Local point is %{public}lf, %{public}lf", parentLocalPoint.GetX(), parentLocalPoint.GetY()); + + if (!enableTouchTest_ || disabled_) { + LOGD("transform touch test disabled, skip touch test"); + return false; + } + Offset offset = GetPosition(); + Matrix4 transform = GetEffectiveTransform(offset); + Matrix4 inverse = Matrix4::Invert(transform); + Point beforeTransform = inverse * parentLocalPoint; + if (GetTouchRect().IsInRegion(beforeTransform)) { + const auto localPoint = beforeTransform - GetPaintRect().GetOffset(); + for (const auto& child : GetChildren()) { + if (child->TouchTest(globalPoint, localPoint, touchRestrict, result)) { + break; + } + } + const auto coordinateOffset = globalPoint - localPoint; + OnTouchTestHit(coordinateOffset, touchRestrict, result); + return true; + } + return false; +} + +Matrix4 FlutterRenderTransform::GetTransformByOffset(Matrix4 matrix, const Offset& offset) +{ + LOGD("Offset(%{public}lf, %{public}lf)", offset.GetX(), offset.GetY()); + if (offset.IsZero()) { + return matrix; + } + + Matrix4 transform = + Matrix4::CreateTranslate(static_cast(-offset.GetX()), static_cast(-offset.GetY()), 0.0f); + transform = matrix * transform; + transform = Matrix4::CreateTranslate(static_cast(offset.GetX()), static_cast(offset.GetY()), 0.0f) * + transform; + return transform; +} + +Matrix4 FlutterRenderTransform::GetEffectiveTransform(const Offset& offset) +{ + Matrix4 transform = GetTransformByOffset(UpdateWithEffectMatrix(transform_), origin_); + if (!offset.IsZero()) { + transform = GetTransformByOffset(transform, offset); + } + return transform; +} + +bool FlutterRenderTransform::HasEffectiveTransform() const +{ + if (!layer_) { + return false; + } + return !layer_->GetMatrix4().IsIdentityMatrix(); +} + +bool FlutterRenderTransform::CheckNeedPaint() const +{ + double rotateX = 0.0; + double rotateY = 0.0; + double sy = sqrt(transform_[0] * transform_[0] + transform_[4] * transform_[4]); + if (NearZero(sy)) { + rotateX = atan2(-transform_[6], transform_[5]); + rotateY = atan2(-transform_[8], sy); + } else { + rotateX = atan2(transform_[9], transform_[10]); + rotateY = atan2(-transform_[8], sy); + } + rotateX = std::abs(rotateX * (180.0f / M_PI)); + rotateY = std::abs(rotateY * (180.0f / M_PI)); + if (NearEqual(rotateX, 90.0, 1e-5) || NearEqual(rotateY, 90.0, 1e-5)) { + return false; // If RotateX or RotateY is 90 deg, not need to paint. + } + return true; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/transform/flutter_render_transform.h b/frameworks/core/components/transform/flutter_render_transform.h new file mode 100644 index 00000000..040235d7 --- /dev/null +++ b/frameworks/core/components/transform/flutter_render_transform.h @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRANSFORM_FLUTTER_RENDER_TRANSFORM_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRANSFORM_FLUTTER_RENDER_TRANSFORM_H + +#include "core/components/transform/render_transform.h" +#include "core/pipeline/base/flutter_render_context.h" +#include "core/pipeline/layers/transform_layer.h" + +namespace OHOS::Ace { + +class FlutterRenderTransform final : public RenderTransform { + DECLARE_ACE_TYPE(FlutterRenderTransform, RenderTransform); + +public: + static Matrix4 GetTransformByOffset(Matrix4 matrix, const Offset& offset); + FlutterRenderTransform() = default; + ~FlutterRenderTransform() override = default; + RenderLayer GetRenderLayer() override; + void Paint(RenderContext& context, const Offset& offset) override; + bool TouchTest(const Point& globalPoint, const Point& parentLocalPoint, const TouchRestrict& touchRestrict, + TouchTestResult& result) override; + void OnGlobalPositionChanged() override; + + bool IsRepaintBoundary() const override + { + return true; + } + + bool HasEffectiveTransform() const override; + + void UpdateTransformLayer() override; + +private: + Matrix4 GetEffectiveTransform(const Offset& offset); + void UpdateTransformByGlobalOffset(); + bool CheckNeedPaint() const; + + RefPtr layer_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRANSFORM_FLUTTER_RENDER_TRANSFORM_H diff --git a/frameworks/core/components/transform/render_transform.cpp b/frameworks/core/components/transform/render_transform.cpp new file mode 100644 index 00000000..21002ad4 --- /dev/null +++ b/frameworks/core/components/transform/render_transform.cpp @@ -0,0 +1,422 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/transform/render_transform.h" + +#include "base/utils/utils.h" +#include "core/components/box/render_box_base.h" +#include "core/components/transform/transform_component.h" + +namespace OHOS::Ace { + +// Effect translate to Matrix at the end for percent needs to be calculated after layout. +void RenderTransform::Translate(const Dimension& x, const Dimension& y) +{ + if (!NearEqual(x.Value(), 0.0)) { + double moveX = CovertDimensionToPxBySize(x, GetLayoutSize().Width()); + transform_ = Matrix4::CreateTranslate(moveX, 0.0f, 0.0f) * transform_; + } + if (!NearEqual(y.Value(), 0.0)) { + double moveY = CovertDimensionToPxBySize(y, GetLayoutSize().Height()); + transform_ = Matrix4::CreateTranslate(0.0f, moveY, 0.0f) * transform_; + } + UpdateTransformLayer(); + auto context = context_.Upgrade(); + if (context) { + context->MarkForcedRefresh(); + } +#if defined(WINDOWS_PLATFORM) || defined(MAC_PLATFORM) + UpdateTranslateToAccessibilityNode(x.Value(), y.Value()); +#endif +} + +void RenderTransform::Scale(float value) +{ + Scale(value, value); +} + +void RenderTransform::Scale(float x, float y) +{ + scaleX_ = x; + scaleY_ = y; + if (!NearEqual(x, 1.0f) || !NearEqual(y, 1.0f)) { + transform_ = Matrix4::CreateScale(x, y, 1.0f) * transform_; + } + UpdateTransformLayer(); + auto context = context_.Upgrade(); + if (context) { + context->MarkForcedRefresh(); + } +#if defined(WINDOWS_PLATFORM) || defined(MAC_PLATFORM) + if (!NearEqual(maxScaleXY_, -1.0)) { + UpdateScaleToAccessibilityNode(maxScaleXY_); + } +#endif +} + +void RenderTransform::Rotate(float angle, float x, float y, float z) +{ + if (!NearZero(angle) && !NearZero(fmod(angle, 360.0f))) { + Matrix4 rotate = Matrix4::CreateRotate(angle, x, y, z); + transform_.SetEntry(INDEX_THREE, INDEX_TWO, PERSPECTIVE); + transform_ = rotate * transform_; + } + UpdateTransformLayer(); + auto context = context_.Upgrade(); + if (context) { + context->MarkForcedRefresh(); + } + + if (x == 1.0f) { + rotateX_ = angle; + } + + if (y == 1.0f) { + rotateY_ = angle; + } + + if (z == 1.0f) { + rotateZ_ = angle; + } + +#if defined(WINDOWS_PLATFORM) || defined(MAC_PLATFORM) + if (!NearEqual(angle, 0.0) && !NearEqual(z, 0.0)) { + UpdateRotateToAccessibilityNode(angle, RotateAxis::AXIS_Z); + } +#endif +} + +void RenderTransform::RotateX(float angle) +{ + Rotate(angle, 1.0f, 0.0f, 0.0f); +} + +void RenderTransform::RotateY(float angle) +{ + Rotate(angle, 0.0f, 1.0f, 0.0f); +} + +void RenderTransform::RotateZ(float angle) +{ + Rotate(angle, 0.0f, 0.0f, 1.0f); +#if defined(WINDOWS_PLATFORM) || defined(MAC_PLATFORM) + if (!NearEqual(angle, 0.0)) { + UpdateRotateToAccessibilityNode(angle, RotateAxis::AXIS_Z); + } +#endif +} + +void RenderTransform::ResetTransform() +{ + transform_ = Matrix4::CreateIdentity(); + transformEffects_.clear(); +#if defined(WINDOWS_PLATFORM) || defined(MAC_PLATFORM) + ResetTransformToAccessibilityNode(); +#endif +} + +#if defined(WINDOWS_PLATFORM) || defined(MAC_PLATFORM) +void RenderTransform::ResetTransformToAccessibilityNode() +{ + const auto& context = context_.Upgrade(); + if (!context) { + return; + } + auto accessibilityManager = context->GetAccessibilityManager(); + if (!accessibilityManager) { + LOGE("accessibilityManager is null"); + return; + } + auto accessibilityNode = accessibilityManager->GetAccessibilityNodeById(GetNodeId()); + if (!accessibilityNode) { + LOGE("RenderTransform is null"); + return; + } + accessibilityNode->SetScaleToChild(1.0); + accessibilityNode->SetTranslateOffsetToChild(Offset(0.0, 0.0)); + accessibilityNode->SetRotateToChild(0.0, RotateAxis::AXIS_Z); + for (const auto& item : GetChildren()) { + item->NotifyPaintFinish(); + } +} + +void RenderTransform::UpdateScaleToAccessibilityNode(float maxScale) +{ + const auto& context = context_.Upgrade(); + if (!context) { + return; + } + auto accessibilityManager = context->GetAccessibilityManager(); + if (!accessibilityManager) { + LOGE("accessibilityManager is null"); + return; + } + auto accessibilityNode = accessibilityManager->GetAccessibilityNodeById(GetNodeId()); + if (!accessibilityNode) { + LOGE("RenderTransform is null"); + return; + } + + if (!NearEqual(maxScale, 1.0)) { + Size size = GetLayoutSize(); + Offset globalOffset = GetGlobalOffset(); + Offset scaleCenter = Offset(globalOffset.GetX() + size.Width() / 2.0, + globalOffset.GetY() + size.Height() / 2.0); + accessibilityNode->SetScaleToChild(maxScale); + accessibilityNode->SetScaleCenterToChild(scaleCenter); + for (const auto& item : GetChildren()) { + item->NotifyPaintFinish(); + } + } +} + +void RenderTransform::UpdateTranslateToAccessibilityNode(double translateX, double translateY) +{ + const auto& context = context_.Upgrade(); + if (!context) { + return; + } + auto accessibilityManager = context->GetAccessibilityManager(); + if (!accessibilityManager) { + LOGE("accessibilityManager is null"); + return; + } + auto accessibilityNode = accessibilityManager->GetAccessibilityNodeById(GetNodeId()); + if (!accessibilityNode) { + LOGE("RenderTransform is null"); + return; + } + if (!NearEqual(translateX, 0.0) || !NearEqual(translateY, 0.0)) { + Offset translateOffset(translateX, translateY); + accessibilityNode->SetTranslateOffsetToChild(translateOffset); + for (const auto& child : GetChildren()) { + child->NotifyPaintFinish(); + } + } +} + +void RenderTransform::UpdateRotateToAccessibilityNode(float angle, RotateAxis rotateAxis) +{ + const auto& context = context_.Upgrade(); + if (!context) { + return; + } + auto accessibilityManager = context->GetAccessibilityManager(); + if (!accessibilityManager) { + LOGE("accessibilityManager is null"); + return; + } + auto accessibilityNode = accessibilityManager->GetAccessibilityNodeById(GetNodeId()); + if (!accessibilityNode) { + LOGE("RenderTransform is null"); + return; + } + if (!NearEqual(angle, 0.0)) { + accessibilityNode->SetRotateToChild(angle, rotateAxis); + Size size = GetLayoutSize(); + Offset globalOffset = GetGlobalOffset(); + Offset scaleCenter = Offset(globalOffset.GetX() + size.Width() / 2.0, + globalOffset.GetY() + size.Height() / 2.0); + accessibilityNode->SetScaleCenterToChild(scaleCenter); + for (const auto& item : GetChildren()) { + item->NotifyPaintFinish(); + } + } +} +#endif + +void RenderTransform::UpdateTransform() +{ + if (!needUpdateTransform_) { + return; + } + needUpdateTransform_ = false; + for (const auto& effect : transformEffects_) { + switch (effect.first) { + case TransformType::TRANSLATE_X: { + double moveX = CovertDimensionToPxBySize(effect.second, GetLayoutSize().Width()); + transform_ = Matrix4::CreateTranslate(moveX, 0.0f, 0.0f) * transform_; + break; + } + case TransformType::TRANSLATE_Y: { + double moveY = CovertDimensionToPxBySize(effect.second, GetLayoutSize().Height()); + transform_ = Matrix4::CreateTranslate(0.0f, moveY, 0.0f) * transform_; + break; + } + case TransformType::SCALE_X: { + transform_ = Matrix4::CreateScale(effect.second.Value(), 1.0f, 1.0f) * transform_; + break; + } + case TransformType::SCALE_Y: { + transform_ = Matrix4::CreateScale(1.0f, effect.second.Value(), 1.0f) * transform_; + break; + } + case TransformType::ROTATE_X: { + transform_.SetEntry(INDEX_THREE, INDEX_TWO, PERSPECTIVE); + transform_ = Matrix4::CreateRotate(effect.second.Value(), 1.0f, 0.0f, 0.0f) * transform_; + break; + } + case TransformType::ROTATE_Y: { + transform_.SetEntry(INDEX_THREE, INDEX_TWO, PERSPECTIVE); + transform_ = Matrix4::CreateRotate(effect.second.Value(), 0.0f, 1.0f, 0.0f) * transform_; + break; + } + case TransformType::ROTATE_Z: { + transform_.SetEntry(INDEX_THREE, INDEX_TWO, PERSPECTIVE); + transform_ = Matrix4::CreateRotate(effect.second.Value(), 0.0f, 0.0f, 1.0f) * transform_; + break; + } + default: + break; + } + } +} + +void RenderTransform::SetTouchable(bool enable) +{ + LOGD("set transform touchable status: %{public}d", enable); + enableTouchTest_ = enable; +} + +void RenderTransform::Update(const RefPtr& component) +{ + auto transform = AceType::DynamicCast(component); + if (transform == nullptr) { + LOGE("transform component is nullptr."); + return; + } + if (!IsDeclarativeAnimationActive()) { + ResetTransform(); + needUpdateTransform_ = true; + transform_ = transform->GetTransform(); + transformEffects_ = transform->GetTransformEffects(); + originX_ = transform->GetOriginDimension().GetX(); + originY_ = transform->GetOriginDimension().GetY(); + SetTouchHandle(transform->GetClickSpringEffectType()); + SetShadow(transform->GetShadow()); + } + + MarkNeedLayout(); +} + +void RenderTransform::PerformLayout() +{ + LOGD("RenderTransform::PerformLayout"); + auto child = GetFirstChild(); + if (child == nullptr) { + LOGE("child component is nullptr."); + return; + } + + Size layoutSize; + LayoutParam innerLayout; + Size maxLayoutSize = GetLayoutParam().GetMaxSize(); + if (maxLayoutSize.IsValid()) { + innerLayout.SetMaxSize(maxLayoutSize); + child->Layout(innerLayout); + layoutSize = child->GetLayoutSize(); + } + SetLayoutSize(layoutSize); + needUpdateOrigin_ = true; +} + +void RenderTransform::UpdateTransformOrigin() +{ + auto child = GetFirstChild(); + if (child == nullptr) { + LOGE("child component is nullptr."); + return; + } + Size layoutSize = GetLayoutSize(); + const auto& renderBoxBase = AceType::DynamicCast(child); + if (renderBoxBase) { + auto margin = renderBoxBase->GetMargin(); + double marginTop = margin.TopPx(); + double marginLeft = margin.LeftPx(); + double marginBottom = margin.BottomPx(); + double marginRight = margin.RightPx(); + double paintWidthSize = layoutSize.Width() - marginLeft - marginRight; + double paintHeightSize = layoutSize.Height() - marginTop - marginBottom; + origin_.SetX(CovertDimensionToPxBySize(originX_, paintWidthSize) + marginLeft); + origin_.SetY(CovertDimensionToPxBySize(originY_, paintHeightSize) + marginTop); + } else { + origin_.SetX(CovertDimensionToPxBySize(originX_, layoutSize.Width())); + origin_.SetY(CovertDimensionToPxBySize(originY_, layoutSize.Height())); + } +} + +double RenderTransform::CovertDimensionToPxBySize(const Dimension& dimension, double size) +{ + double result = 0.0; + if (dimension.Unit() == DimensionUnit::PERCENT) { + result = dimension.Value() * size; + } else if (dimension.Unit() == DimensionUnit::VP) { + result = NormalizeToPx(dimension); + } else { + result = dimension.Value(); + } + return result; +}; + +void RenderTransform::OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) +{ + if (rawRecognizer_) { + rawRecognizer_->SetCoordinateOffset(coordinateOffset); + result.emplace_back(rawRecognizer_); + } +} + +void RenderTransform::SetTouchHandle(ClickSpringEffectType type) +{ + if (type == ClickSpringEffectType::NONE) { + if (rawRecognizer_) { + rawRecognizer_->SetOnTouchUp(nullptr); + rawRecognizer_->SetOnTouchDown(nullptr); + rawRecognizer_->SetOnTouchCancel(nullptr); + } + } else { + if (!rawRecognizer_) { + rawRecognizer_ = AceType::MakeRefPtr(); + } + if (!clickSpringEffect_) { + clickSpringEffect_ = AceType::MakeRefPtr(GetContext()); + clickSpringEffect_->SetRenderNode(WeakClaim(this)); + } + auto touchHandle = [weak = AceType::WeakClaim(this)]( + const TouchEventInfo&, TouchType touchType, ClickSpringEffectType effectType) { + auto transform = weak.Upgrade(); + if (transform && transform->clickSpringEffect_) { + transform->clickSpringEffect_->ShowAnimation(touchType, effectType); + } + }; + rawRecognizer_->SetOnTouchDown(std::bind(touchHandle, std::placeholders::_1, TouchType::DOWN, type)); + rawRecognizer_->SetOnTouchUp(std::bind(touchHandle, std::placeholders::_1, TouchType::UP, type)); + rawRecognizer_->SetOnTouchCancel(std::bind(touchHandle, std::placeholders::_1, TouchType::CANCEL, type)); + } +} + +Matrix4 RenderTransform::UpdateWithEffectMatrix(Matrix4 matrix) +{ + if (clickSpringEffect_ && !disableClickEffect_) { + double scale = clickSpringEffect_->GetScale(); + if (!NearEqual(scale, 1.0)) { + return matrix * Matrix4::CreateScale(scale, scale, 1.0); + } + } + return matrix; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/transform/render_transform.h b/frameworks/core/components/transform/render_transform.h new file mode 100644 index 00000000..b3091b46 --- /dev/null +++ b/frameworks/core/components/transform/render_transform.h @@ -0,0 +1,164 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRANSFORM_RENDER_TRANSFORM_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRANSFORM_RENDER_TRANSFORM_H + +#include "base/geometry/axis.h" +#include "base/geometry/matrix4.h" +#include "core/components/transform/click_spring_effect.h" +#include "core/gestures/raw_recognizer.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +enum class TransformType { + TRANSLATE_X, + TRANSLATE_Y, + SCALE_X, + SCALE_Y, + ROTATE_X, + ROTATE_Y, + ROTATE_Z, +}; + +class RenderTransform : public RenderNode { + DECLARE_ACE_TYPE(RenderTransform, RenderNode); + +public: + static RefPtr Create(); + void Translate(const Dimension& x, const Dimension& y); + void Scale(float value); + void Scale(float x, float y); + void Rotate(float angle, float x, float y, float z); + void RotateX(float angle); + void RotateY(float angle); + void RotateZ(float angle); + void ResetTransform(); + void UpdateTransform(); + void SetTouchable(bool enable); + void Update(const RefPtr& component) override; + void PerformLayout() override; + void UpdateTransformOrigin(); + + void SetMaxScaleXY(double maxScaleXY) + { + maxScaleXY_ = maxScaleXY; + } + + void MarkNeedUpdateOrigin() + { + needUpdateOrigin_ = true; + } + + void SetTransformOrigin(const Dimension& x, const Dimension& y) + { + originX_ = x; + originY_ = y; + MarkNeedRender(); + } + + void SetDisableClickEffect(bool isDisable) + { + disableClickEffect_ = isDisable; + } + + virtual void UpdateTransformLayer() {} + + Dimension GetTranslateX() const + { + Dimension translateX; + for (const auto& translate : transformEffects_) { + if (translate.first == TransformType::TRANSLATE_X) { + translateX = translate.second; + } + } + return translateX; + } + + Dimension GetTranslateY() const + { + Dimension translateY; + for (const auto& translate : transformEffects_) { + if (translate.first == TransformType::TRANSLATE_Y) { + translateY = translate.second; + } + } + return translateY; + } + + float GetScaleX() const + { + return scaleX_; + } + + float GetScaleY() const + { + return scaleY_; + } + + float GetRotateX() const + { + return rotateX_; + } + + float GetRotateY() const + { + return rotateY_; + } + + float GetRotateZ() const + { + return rotateZ_; + } + +protected: + void OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) override; + Matrix4 UpdateWithEffectMatrix(Matrix4 matrix); + + double scaleX_ = 0.0; + double scaleY_ = 0.0; + double rotateX_ = 0.0; + double rotateY_ = 0.0; + double rotateZ_ = 0.0; + Matrix4 transform_; + bool needUpdateTransform_ = false; + std::vector> transformEffects_; + Offset origin_; + Dimension originX_; + Dimension originY_; + bool needUpdateOrigin_ = false; + double maxScaleXY_ = -1.0; + RefPtr rawRecognizer_; + RefPtr clickSpringEffect_; + bool disableClickEffect_ = false; + bool enableTouchTest_ = true; + +private: + double CovertDimensionToPxBySize(const Dimension& dimension, double size); + void SetTouchHandle(ClickSpringEffectType type); + +#if defined(WINDOWS_PLATFORM) || defined(MAC_PLATFORM) + void ResetTransformToAccessibilityNode(); + void UpdateScaleToAccessibilityNode(float maxScale); + void UpdateTranslateToAccessibilityNode(double translateX, double translateY); + void UpdateRotateToAccessibilityNode(float angle, RotateAxis rotateAxis); +#endif +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRANSFORM_RENDER_TRANSFORM_H diff --git a/frameworks/core/components/transform/transform_component.cpp b/frameworks/core/components/transform/transform_component.cpp new file mode 100644 index 00000000..21a70b50 --- /dev/null +++ b/frameworks/core/components/transform/transform_component.cpp @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/transform/transform_component.h" + +#include "core/components/transform/transform_element.h" + +namespace OHOS::Ace { + +RefPtr TransformComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +RefPtr TransformComponent::CreateRenderNode() +{ + return RenderTransform::Create(); +} + +void TransformComponent::Translate(const Dimension& x, const Dimension& y) +{ + if (!NearEqual(x.Value(), 0.0)) { + transformEffects_.emplace_back(TransformType::TRANSLATE_X, x); + } + if (!NearEqual(y.Value(), 0.0)) { + transformEffects_.emplace_back(TransformType::TRANSLATE_Y, y); + } +} + +void TransformComponent::TranslateX(const Dimension& x) +{ + if (NearEqual(x.Value(), 0.0)) { + return; + } + transformEffects_.emplace_back(TransformType::TRANSLATE_X, x); +} + +void TransformComponent::TranslateY(const Dimension& y) +{ + if (NearEqual(y.Value(), 0.0)) { + return; + } + transformEffects_.emplace_back(TransformType::TRANSLATE_Y, y); +} + +void TransformComponent::Scale(float value) +{ + Scale(value, value); +} + +void TransformComponent::Scale(float x, float y) +{ + if (!NearEqual(x, 1.0f)) { + transformEffects_.emplace_back(TransformType::SCALE_X, Dimension(x)); + } + if (!NearEqual(y, 1.0f)) { + transformEffects_.emplace_back(TransformType::SCALE_Y, Dimension(y)); + } +} + +void TransformComponent::ScaleX(float x) +{ + if (NearEqual(x, 1.0f)) { + return; + } + transformEffects_.emplace_back(TransformType::SCALE_X, Dimension(x)); +} + +void TransformComponent::ScaleY(float y) +{ + if (NearEqual(y, 1.0f)) { + return; + } + transformEffects_.emplace_back(TransformType::SCALE_Y, Dimension(y)); +} + +void TransformComponent::RotateX(float angle) +{ + if (NearZero(angle) || NearZero(fmod(angle, 360.0f))) { + return; + } + // keep rotate direction same with quick app: angel --> -angle + transformEffects_.emplace_back(TransformType::ROTATE_X, Dimension(-angle)); +} + +void TransformComponent::RotateY(float angle) +{ + if (NearZero(angle) || NearZero(fmod(angle, 360.0f))) { + return; + } + // keep rotate direction same with quick app: angel --> -angle + transformEffects_.emplace_back(TransformType::ROTATE_Y, Dimension(-angle)); +} + +void TransformComponent::RotateZ(float angle) +{ + if (NearZero(angle) || NearZero(fmod(angle, 360.0f))) { + return; + } + transformEffects_.emplace_back(TransformType::ROTATE_Z, Dimension(angle)); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/transform/transform_component.h b/frameworks/core/components/transform/transform_component.h new file mode 100644 index 00000000..e4c972ea --- /dev/null +++ b/frameworks/core/components/transform/transform_component.h @@ -0,0 +1,124 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRANSFORM_TRANSFORM_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRANSFORM_TRANSFORM_COMPONENT_H + +#include "base/geometry/dimension_offset.h" +#include "base/geometry/matrix4.h" +#include "core/components/common/properties/alignment.h" +#include "core/components/transform/render_transform.h" +#include "core/pipeline/base/component_group.h" +#include "core/pipeline/base/sole_child_component.h" + +namespace OHOS::Ace { + +inline constexpr int32_t INDEX_TWO = 2; +inline constexpr int32_t INDEX_THREE = 3; +inline constexpr float PERSPECTIVE = 0.0005f; +inline constexpr Dimension HALF_PERCENT = 0.5_pct; + +class ACE_EXPORT TransformComponent : public SoleChildComponent { + DECLARE_ACE_TYPE(TransformComponent, SoleChildComponent) + +public: + RefPtr CreateElement() override; + RefPtr CreateRenderNode() override; + void Translate(const Dimension& x, const Dimension& y); + void TranslateX(const Dimension& x); + void TranslateY(const Dimension& y); + + void Scale(float value); + void Scale(float x, float y); + void ScaleX(float x); + void ScaleY(float y); + + void RotateX(float angle); + void RotateY(float angle); + void RotateZ(float angle); + + const DimensionOffset& GetOriginDimension() const + { + return originDimension_; + } + + void SetOriginDimension(const DimensionOffset& origin) + { + originDimension_ = origin; + } + + const std::vector>& GetTransformEffects() const + { + return transformEffects_; + } + + const Matrix4& GetTransform() const + { + return transform_; + } + + void SetTransform(const Matrix4& transform) + { + transform_ = transform; + } + + void ResetTransform() + { + transform_ = Matrix4::CreateIdentity(); + transformEffects_.clear(); + } + + void SetClickSpringEffectType(ClickSpringEffectType type) + { + clickSpringEffectType_ = type; + } + + ClickSpringEffectType GetClickSpringEffectType() const + { + return clickSpringEffectType_; + } + + void SetTransitionEffect(TransitionEffect transitionEffect) + { + transitionEffect_ = transitionEffect; + } + + TransitionEffect GetTransitionEffect() const + { + return transitionEffect_; + } + + void SetShadow(const Shadow& shadow) + { + shadow_ = shadow; + } + + const Shadow& GetShadow() const + { + return shadow_; + } + +private: + Matrix4 transform_; + std::vector> transformEffects_; + DimensionOffset originDimension_ = DimensionOffset(HALF_PERCENT, HALF_PERCENT); + ClickSpringEffectType clickSpringEffectType_ = ClickSpringEffectType::NONE; + TransitionEffect transitionEffect_ = TransitionEffect::NONE; + Shadow shadow_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRANSFORM_TRANSFORM_COMPONENT_H diff --git a/frameworks/core/components/transform/transform_element.cpp b/frameworks/core/components/transform/transform_element.cpp new file mode 100644 index 00000000..e2a9d2f1 --- /dev/null +++ b/frameworks/core/components/transform/transform_element.cpp @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/transform/transform_element.h" + +#include "core/components/page/page_element.h" + +namespace OHOS::Ace { + +TransformElement::~TransformElement() +{ + auto page = pageElement_.Upgrade(); + if (page) { + page->RemoveCardTransition(GetRetakeId()); + } +} + +void TransformElement::PerformBuild() +{ + RefPtr transform = AceType::DynamicCast(component_); + const auto& child = children_.empty() ? nullptr : children_.front(); + const auto& newComponent = transform ? transform->GetChild() : nullptr; + UpdateChild(child, newComponent); + if (transform) { + AddCardTransform(transform->GetTransitionEffect()); + } +} + +void TransformElement::AddCardTransform(TransitionEffect option) +{ + if (option == TransitionEffect::UNFOLD) { + auto page = SearchParentPage(); + if (!page) { + return; + } + pageElement_ = page; + page->AddCardTransition(AceType::Claim(this)); + } +} + +RefPtr TransformElement::SearchParentPage() const +{ + auto parent = GetElementParent().Upgrade(); + while (parent) { + auto page = AceType::DynamicCast(parent); + if (page) { + LOGD("Find parent page. page id: %{public}d", page->GetPageId()); + return page; + } + parent = parent->GetElementParent().Upgrade(); + } + LOGW("No parent page found."); + return nullptr; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/transform/transform_element.h b/frameworks/core/components/transform/transform_element.h new file mode 100644 index 00000000..77b67b70 --- /dev/null +++ b/frameworks/core/components/transform/transform_element.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRANSFORM_TRANSFORM_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRANSFORM_TRANSFORM_ELEMENT_H + +#include "core/components/transform/transform_component.h" +#include "core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +class PageElement; + +class TransformElement : public RenderElement { + DECLARE_ACE_TYPE(TransformElement, RenderElement); + +public: + ~TransformElement() override; + + void PerformBuild() override; + +private: + void AddCardTransform(TransitionEffect option); + RefPtr SearchParentPage() const; + + WeakPtr pageElement_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRANSFORM_TRANSFORM_ELEMENT_H diff --git a/frameworks/core/components/transition/BUILD.gn b/frameworks/core/components/transition/BUILD.gn new file mode 100644 index 00000000..ba92e052 --- /dev/null +++ b/frameworks/core/components/transition/BUILD.gn @@ -0,0 +1,21 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("transition") { + sources = [ + "transition_component.cpp", + "transition_element.cpp", + ] +} diff --git a/frameworks/core/components/transition/transition_component.cpp b/frameworks/core/components/transition/transition_component.cpp new file mode 100644 index 00000000..1ce361fb --- /dev/null +++ b/frameworks/core/components/transition/transition_component.cpp @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/transition/transition_component.h" + +#include "core/components/transition/transition_element.h" +#include "core/components/tween/tween_component.h" + +namespace OHOS::Ace { +namespace { + +const ComposeId PREFIX = "BackendTransition"; +uint32_t g_transitionComponentId = 0; + +} // namespace + +RefPtr TransitionComponent::CreateElement() +{ + return AceType::MakeRefPtr(GetId()); +} + +void TransitionComponent::SetTransitionOption(const TweenOption& in, const TweenOption& out) +{ + inOption_ = in; + outOption_ = out; +} + +const TweenOption& TransitionComponent::GetTransitionInOption() const +{ + return inOption_; +} + +const TweenOption& TransitionComponent::GetTransitionOutOption() const +{ + return outOption_; +} + +ComposeId TransitionComponent::AllocTransitionComponentId() +{ + return PREFIX + (std::to_string(g_transitionComponentId++)); +} + +bool TransitionComponent::IsFirstFrameShow() const +{ + return isFirstFrameShow_; +} + +void TransitionComponent::SetIsFirstFrameShow(bool isFirstFrameShow) +{ + isFirstFrameShow_ = isFirstFrameShow; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/transition/transition_component.h b/frameworks/core/components/transition/transition_component.h new file mode 100644 index 00000000..59c2371d --- /dev/null +++ b/frameworks/core/components/transition/transition_component.h @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRANSITION_TRANSITION_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRANSITION_TRANSITION_COMPONENT_H + +#include "core/components/common/properties/tween_option.h" +#include "core/pipeline/base/composed_component.h" + +namespace OHOS::Ace { + +class TransitionComponent : public ComposedComponent { + DECLARE_ACE_TYPE(TransitionComponent, ComposedComponent); + +public: + TransitionComponent(const ComposeId& id, const std::string& name, const RefPtr& child) + : ComposedComponent(id, name, child) + {} + TransitionComponent(const ComposeId& id, const std::string& name) : ComposedComponent(id, name) {} + + ~TransitionComponent() override = default; + + RefPtr CreateElement() override; + + void SetTransitionOption(const TweenOption& in, const TweenOption& out); + const TweenOption& GetTransitionInOption() const; + + const TweenOption& GetTransitionOutOption() const; + + static ComposeId AllocTransitionComponentId(); + + bool IsFirstFrameShow() const; + void SetIsFirstFrameShow(bool isFirstFrameShow); + +private: + TweenOption inOption_; // In option + TweenOption outOption_; // Out option + bool isFirstFrameShow_ = true; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRANSITION_TRANSITION_COMPONENT_H diff --git a/frameworks/core/components/transition/transition_element.cpp b/frameworks/core/components/transition/transition_element.cpp new file mode 100644 index 00000000..d33af5d5 --- /dev/null +++ b/frameworks/core/components/transition/transition_element.cpp @@ -0,0 +1,154 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/transition/transition_element.h" + +#include "core/components/transition/transition_component.h" +#include "core/components/tween/tween_component.h" +#include "core/components/tween/tween_element.h" + +namespace OHOS::Ace { + +void TransitionElement::Update() +{ + ComposedElement::Update(); + if (!component_) { + LOGE("Update failed. component is null"); + return; + } + const auto transitionComponent = AceType::DynamicCast(component_); + if (!transitionComponent) { + LOGE("transition element update failed. transition component is null."); + return; + } + optionMap_[TransitionOptionType::TRANSITION_IN] = transitionComponent->GetTransitionInOption(); + optionMap_[TransitionOptionType::TRANSITION_OUT] = transitionComponent->GetTransitionOutOption(); +} + +void TransitionElement::SetController(const RefPtr& controller) +{ + auto tween = GetChildTween(); + if (!tween) { + LOGE("set controller failed. no tween found."); + return; + } + tween->SetController(controller); +} + +RefPtr TransitionElement::GetController() const +{ + auto tween = GetChildTween(); + if (!tween) { + LOGE("get controller failed. no tween found."); + return nullptr; + } + return tween->GetController(); +} + +void TransitionElement::SetTouchable(bool enable) +{ + auto tween = GetChildTween(); + if (!tween) { + LOGE("set touchable failed. no tween found. enable: %{public}d", enable); + return; + } + tween->SetTouchable(enable); +} + +void TransitionElement::SwitchTransitionOption(TransitionOptionType type, bool needApplyOption) +{ + auto tween = GetChildTween(); + if (!tween) { + LOGE("Switch transition option failed. no tween found. direction: %{public}d", type); + return; + } + optionMap_[type].ClearListeners(); + // If never set before, use empty option instead. + tween->SetOption(optionMap_[type]); + if (!tween->ApplyKeyframes()) { + LOGW("Apply transition option failed. tween apply option fail."); + } + if (needApplyOption) { + tween->ApplyOptions(); + } +} + +RefPtr TransitionElement::BuildChild() +{ + RefPtr transition = AceType::DynamicCast(component_); + if (transition) { + RefPtr tweenComponent = + AceType::MakeRefPtr(TweenComponent::AllocTweenComponentId(), transition->GetName()); + tweenComponent->SetChild(ComposedElement::BuildChild()); + tweenComponent->SetIsFirstFrameShow(transition->IsFirstFrameShow()); + return tweenComponent; + } else { + LOGE("no transition component found. return empty child."); + return nullptr; + } +} + +void TransitionElement::SetVisible(VisibleType visible) +{ + auto tween = GetChildTween(); + if (!tween) { + LOGE("set visible failed. no tween found. visible: %{public}d", visible); + return; + } + tween->SetVisible(visible); +} + +RefPtr TransitionElement::GetChildTween() const +{ + if (children_.empty()) { + LOGW("get child tween failed. no child yet."); + return nullptr; + } + const auto& child = children_.front(); + if (!child) { + LOGW("get child tween failed. null child."); + return nullptr; + } + auto tween = AceType::DynamicCast(child); + if (!tween) { + LOGW("get child tween failed. null tween."); + return nullptr; + } + return tween; +} + +void TransitionElement::SetTransition(const TweenOption& inOption, const TweenOption& outOption) +{ + optionMap_[TransitionOptionType::TRANSITION_IN] = inOption; + optionMap_[TransitionOptionType::TRANSITION_OUT] = outOption; +} + +void TransitionElement::SetSharedTransition(const TweenOption& inOption, const TweenOption& outOption) +{ + optionMap_[TransitionOptionType::TRANSITION_SHARED_IN] = inOption; + optionMap_[TransitionOptionType::TRANSITION_SHARED_OUT] = outOption; +} + +RefPtr TransitionElement::GetContentElement() const +{ + auto tween = GetChildTween(); + if (!tween) { + LOGE("get content element failed. no tween found."); + return nullptr; + } + return tween->GetContentElement(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/transition/transition_element.h b/frameworks/core/components/transition/transition_element.h new file mode 100644 index 00000000..08e912eb --- /dev/null +++ b/frameworks/core/components/transition/transition_element.h @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRANSITION_TRANSITION_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRANSITION_TRANSITION_ELEMENT_H + +#include "core/components/common/properties/page_transition_option.h" +#include "core/components/common/properties/tween_option.h" +#include "core/components/display/display_component.h" +#include "core/pipeline/base/composed_element.h" + +namespace OHOS::Ace { + +class Animator; +class TweenElement; + +enum class TransitionOptionType { + TRANSITION_IN, + TRANSITION_OUT, + TRANSITION_SHARED_IN, + TRANSITION_SHARED_OUT, +}; + +class TransitionElement : public ComposedElement { + DECLARE_ACE_TYPE(TransitionElement, ComposedElement); + +public: + explicit TransitionElement(const ComposeId& id) : ComposedElement(id) {} + ~TransitionElement() override = default; + + void Update() override; + void SetController(const RefPtr& controller); + RefPtr GetController() const; + void SetTouchable(bool enable); + void SetVisible(VisibleType visible); + void SwitchTransitionOption(TransitionOptionType direction, bool needApplyOption = false); + void SetTransition(const TweenOption& inOption, const TweenOption& outOption); + void SetSharedTransition(const TweenOption& inOption, const TweenOption& outOption); + RefPtr GetContentElement() const; + +protected: + RefPtr BuildChild() override; + +private: + RefPtr GetChildTween() const; + + std::map optionMap_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRANSITION_TRANSITION_ELEMENT_H diff --git a/frameworks/core/components/triangle/BUILD.gn b/frameworks/core/components/triangle/BUILD.gn new file mode 100644 index 00000000..5e641c4c --- /dev/null +++ b/frameworks/core/components/triangle/BUILD.gn @@ -0,0 +1,22 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("triangle") { + sources = [ + "flutter_render_triangle.cpp", + "render_triangle.cpp", + "triangle_component.cpp", + ] +} diff --git a/frameworks/core/components/triangle/flutter_render_triangle.cpp b/frameworks/core/components/triangle/flutter_render_triangle.cpp new file mode 100644 index 00000000..c351c75c --- /dev/null +++ b/frameworks/core/components/triangle/flutter_render_triangle.cpp @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/triangle/flutter_render_triangle.h" + +#include "core/pipeline/base/scoped_canvas_state.h" + +namespace OHOS::Ace { + +RefPtr RenderTriangle::Create() +{ + return AceType::MakeRefPtr(); +} + +void FlutterRenderTriangle::Paint(RenderContext& context, const Offset& offset) +{ + data_.SetRadius(NormalizeToPx(1.0_vp)); // round radius of triangle is 1dp + if (!data_.Calculate(offset.GetX(), offset.GetY())) { + LOGE("calculate triangle points failed!"); + return; + } + auto canvas = ScopedCanvas::Create(context); + fml::RefPtr path = flutter::CanvasPath::Create(); + const auto& arc1 = data_.GetOutArc1(); + const auto& arc2 = data_.GetOutArc2(); + const auto& arc3 = data_.GetOutArc3(); + path->moveTo(arc1.GetStartPoint().GetX(), arc1.GetStartPoint().GetY()); + path->arcTo(arc1.GetLeft(), arc1.GetTop(), arc1.GetRight(), arc1.GetBottom(), + arc1.GetStartAngle(), arc1.GetSweepAngle(), false); + path->lineTo(arc2.GetStartPoint().GetX(), arc2.GetStartPoint().GetY()); + path->arcTo(arc2.GetLeft(), arc2.GetTop(), arc2.GetRight(), arc2.GetBottom(), + arc2.GetStartAngle(), arc2.GetSweepAngle(), false); + path->lineTo(arc3.GetStartPoint().GetX(), arc3.GetStartPoint().GetY()); + path->arcTo(arc3.GetLeft(), arc3.GetTop(), arc3.GetRight(), arc3.GetBottom(), + arc3.GetStartAngle(), arc3.GetSweepAngle(), false); + path->close(); + + flutter::Paint paint; + paint.paint()->setARGB(color_.GetAlpha(), color_.GetRed(), color_.GetGreen(), color_.GetBlue()); + paint.paint()->setAntiAlias(true); + flutter::PaintData paintData; + canvas->drawPath(path.get(), paint, paintData); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/triangle/flutter_render_triangle.h b/frameworks/core/components/triangle/flutter_render_triangle.h new file mode 100644 index 00000000..cce1eb39 --- /dev/null +++ b/frameworks/core/components/triangle/flutter_render_triangle.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRIANGLE_FLUTTER_RENDER_TRIANGLE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRIANGLE_FLUTTER_RENDER_TRIANGLE_H + +#include "core/components/triangle/render_triangle.h" + +namespace OHOS::Ace { + +class FlutterRenderTriangle final : public RenderTriangle { + DECLARE_ACE_TYPE(FlutterRenderTriangle, RenderTriangle); + +public: + FlutterRenderTriangle() = default; + ~FlutterRenderTriangle() override = default; + + void Paint(RenderContext& context, const Offset& offset) override; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRIANGLE_FLUTTER_RENDER_TRIANGLE_H diff --git a/frameworks/core/components/triangle/render_triangle.cpp b/frameworks/core/components/triangle/render_triangle.cpp new file mode 100644 index 00000000..a1d0e18a --- /dev/null +++ b/frameworks/core/components/triangle/render_triangle.cpp @@ -0,0 +1,152 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/triangle/render_triangle.h" + +#include "core/components/triangle/triangle_component.h" + +namespace OHOS::Ace { + +bool TriangleRotationCalculator::Calculate(double xOffset, double yOffset) +{ + // calculate bottom angle + const double PI = 3.14; + double width = x2_ - x1_; + double height = y3_ - y1_; + if (NearZero(height) || NearZero(width)) { + return false; + } + double bottomAngle = PI - std::atan(width / 2.0 / height) * 2.0; + double topAngle = PI - std::atan(height * 2.0 / width); + // calculate out arc 1 + Point centerPoint; + centerPoint.SetX(x1_ + radius_ * std::tan(topAngle / 2.0)); + centerPoint.SetY(y1_ + radius_); + double endAngle = PI + PI / 2.0; + double startAngle = endAngle - topAngle; + outArc1_.SetCenterPoint(centerPoint); + outArc1_.SetRadius(radius_); + outArc1_.SetStartAngle(startAngle); + outArc1_.SetEndAngle(endAngle); + // calculate out arc 2 + centerPoint.SetX(x2_ - radius_ * std::tan(topAngle / 2.0)); + centerPoint.SetY(y2_ + radius_); + startAngle = PI + PI / 2.0; + endAngle = startAngle + topAngle; + outArc2_.SetCenterPoint(centerPoint); + outArc2_.SetRadius(radius_); + outArc2_.SetStartAngle(startAngle); + outArc2_.SetEndAngle(endAngle); + // calculate out arc3 + centerPoint.SetX(x3_); + centerPoint.SetY(y3_ - radius_ / std::cos(bottomAngle / 2.0)); + startAngle = PI / 2.0 - bottomAngle / 2.0; + endAngle = startAngle + bottomAngle; + outArc3_.SetCenterPoint(centerPoint); + outArc3_.SetRadius(radius_); + outArc3_.SetStartAngle(startAngle); + outArc3_.SetEndAngle(endAngle); + // move with inner diff + double topDiff = radius_ * std::tan(topAngle / 2.0) - radius_; + double rate = height * 2.0 / width; + double newHeight = (width / 2.0 + topDiff) * rate; + double bottomDiff = newHeight - height; + outArc1_.Move(0.0 - topDiff, 0.0); + outArc2_.Move(topDiff, 0.0); + outArc3_.Move(0.0, bottomDiff); + // rotate with center point of triangle + centerPoint.SetX(x3_); + centerPoint.SetY((y1_ + y3_ + bottomDiff) / 2.0); + outArc1_.Rotate(centerPoint, angle_); + outArc2_.Rotate(centerPoint, angle_); + outArc3_.Rotate(centerPoint, angle_); + // move with offset + outArc1_.Move(xOffset, yOffset); + outArc2_.Move(xOffset, yOffset); + outArc3_.Move(xOffset, yOffset); + return true; +} + +bool TriangleRotationCalculator::IsDown() const +{ + return NearZero(angle_); +} + +void RenderTriangle::Update(const RefPtr& component) +{ + auto triangle = AceType::DynamicCast(component); + if (!triangle) { + LOGE("input component is incorrect type or null."); + return; + } + + width_ = triangle->GetWidth(); + height_ = triangle->GetHeight(); + color_ = triangle->GetColor(); + padding_ = triangle->GetPadding(); + MarkNeedLayout(); +} + +void RenderTriangle::PerformLayout() +{ + CalculateTrianglePoints(); + SetLayoutSize(Size(NormalizeToPx(width_), NormalizeToPx(height_))); +} + +void RenderTriangle::CalculateTrianglePoints() +{ + double width = NormalizeToPx(width_); + double height = NormalizeToPx(height_); + double padding = NormalizeToPx(padding_); + double x1 = padding; + double y1 = padding; + double x2 = width - padding; + double y2 = padding; + double x3 = (x1 + x2) / 2.0f; // the average + double y3 = height - padding; + data_.SetPointOne(x1, y1); + data_.SetPointTwo(x2, y2); + data_.SetPointThree(x3, y3); +} + +void RenderTriangle::HandleClick() +{ + if (!onClick_) { + return; // for select that no need to change direction + } + + bool down = data_.IsDown(); + down = !down; + onClick_(down); +} + +void RenderTriangle::OnTouchTestHit(const Offset&, const TouchRestrict&, TouchTestResult& result) +{ + if (!click_) { + click_ = AceType::MakeRefPtr(); + auto weak = WeakClaim(this); + click_->SetOnClick([weak = WeakClaim(this)](const ClickInfo&) { + auto refPtr = weak.Upgrade(); + if (refPtr) { + refPtr->HandleClick(); + } + }); + } + if (onClick_) { + result.emplace_back(click_); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/triangle/render_triangle.h b/frameworks/core/components/triangle/render_triangle.h new file mode 100644 index 00000000..e0dad981 --- /dev/null +++ b/frameworks/core/components/triangle/render_triangle.h @@ -0,0 +1,141 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRIANGLE_RENDER_TRIANGLE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRIANGLE_RENDER_TRIANGLE_H + +#include "base/geometry/arc.h" +#include "core/gestures/click_recognizer.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class TriangleRotationCalculator { + +public: + void SetPointOne(double x, double y) + { + x1_ = x; + y1_ = y; + } + + void SetPointTwo(double x, double y) + { + x2_ = x; + y2_ = y; + } + + void SetPointThree(double x, double y) + { + x3_ = x; + y3_ = y; + } + + void SetAngle(double value) + { + angle_ = value; + } + + void SetRadius(double value) + { + radius_ = value; + } + + bool Calculate(double xOffset, double yOffset); + + bool IsDown() const; + + const Arc& GetOutArc1() + { + return outArc1_; + } + + const Arc& GetOutArc2() + { + return outArc2_; + } + + const Arc& GetOutArc3() + { + return outArc3_; + } + +private: + // point one + double x1_ = 0.0; + double y1_ = 0.0; + // point two + double x2_ = 0.0; + double y2_ = 0.0; + // point three + double x3_ = 0.0; + double y3_ = 0.0; + // rotate angle + double angle_ = 0.0; + // radius value + double radius_ = 0.0; + // out arc 1 + Arc outArc1_; + // out arc 2 + Arc outArc2_; + // out arc 3 + Arc outArc3_; +}; + +class RenderTriangle : public RenderNode { + DECLARE_ACE_TYPE(RenderTriangle, RenderNode); + +public: + static RefPtr Create(); + + void Update(const RefPtr& component) override; + void PerformLayout() override; + + const std::function& GetOnClick() const + { + return onClick_; + } + void SetOnClick(const std::function& value) + { + onClick_ = value; + } + + void UpdateAngle(double value) + { + data_.SetAngle(value); + MarkNeedRender(); + } + + void OnTouchTestHit(const Offset&, const TouchRestrict&, TouchTestResult& result) override; + +protected: + void CalculateTrianglePoints(); + void HandleClick(); + + Dimension width_; + Dimension height_; + Dimension padding_; + Color color_; + + TriangleRotationCalculator data_; + +private: + RefPtr click_; + std::function onClick_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRIANGLE_RENDER_TRIANGLE_H diff --git a/frameworks/core/components/triangle/triangle_component.cpp b/frameworks/core/components/triangle/triangle_component.cpp new file mode 100644 index 00000000..821e3098 --- /dev/null +++ b/frameworks/core/components/triangle/triangle_component.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/triangle/triangle_component.h" + +#include "core/components/triangle/render_triangle.h" +#include "core/components/triangle/triangle_element.h" + +namespace OHOS::Ace { + +RefPtr TriangleComponent::CreateRenderNode() +{ + return RenderTriangle::Create(); +} + +RefPtr TriangleComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/triangle/triangle_component.h b/frameworks/core/components/triangle/triangle_component.h new file mode 100644 index 00000000..f7e30ef4 --- /dev/null +++ b/frameworks/core/components/triangle/triangle_component.h @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRIANGLE_TRIANGLE_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRIANGLE_TRIANGLE_COMPONENT_H + +#include "core/pipeline/base/constants.h" +#include "core/pipeline/base/sole_child_component.h" + +namespace OHOS::Ace { + +class TriangleComponent : public RenderComponent { + DECLARE_ACE_TYPE(TriangleComponent, RenderComponent); + +public: + TriangleComponent() = default; + ~TriangleComponent() override = default; + + RefPtr CreateRenderNode() override; + RefPtr CreateElement() override; + + const Dimension& GetWidth() const + { + return width_; + } + void SetWidth(const Dimension& width) + { + width_ = width; + } + + const Dimension& GetHeight() const + { + return height_; + } + void SetHeight(const Dimension& height) + { + height_ = height; + } + + const Color& GetColor() const + { + return color_; + } + void SetColor(const Color& color) + { + color_ = color; + } + + const Dimension& GetPadding() const + { + return padding_; + } + void SetPadding(const Dimension& value) + { + padding_ = value; + } + +private: + Dimension width_; + Dimension height_; + Dimension padding_; + Color color_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRIANGLE_TRIANGLE_COMPONENT_H diff --git a/frameworks/core/components/triangle/triangle_element.cpp b/frameworks/core/components/triangle/triangle_element.cpp new file mode 100644 index 00000000..9d78b9c6 --- /dev/null +++ b/frameworks/core/components/triangle/triangle_element.cpp @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/triangle/triangle_element.h" + +namespace OHOS::Ace { + +const char* TriangleElement::GetTag() +{ + return "TriangleElement"; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/triangle/triangle_element.h b/frameworks/core/components/triangle/triangle_element.h new file mode 100644 index 00000000..7cb8cad7 --- /dev/null +++ b/frameworks/core/components/triangle/triangle_element.h @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRIANGLE_TRIANGLE_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRIANGLE_TRIANGLE_ELEMENT_H + +#include "core/pipeline/base/sole_child_element.h" + +namespace OHOS::Ace { + +class TriangleElement : public RenderElement { + DECLARE_ACE_TYPE(TriangleElement, RenderElement); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TRIANGLE_TRIANGLE_ELEMENT_H diff --git a/frameworks/core/components/tween/BUILD.gn b/frameworks/core/components/tween/BUILD.gn new file mode 100644 index 00000000..d2cf3825 --- /dev/null +++ b/frameworks/core/components/tween/BUILD.gn @@ -0,0 +1,21 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("tween") { + sources = [ + "tween_component.cpp", + "tween_element.cpp", + ] +} diff --git a/frameworks/core/components/tween/tween_component.cpp b/frameworks/core/components/tween/tween_component.cpp new file mode 100644 index 00000000..7835efb3 --- /dev/null +++ b/frameworks/core/components/tween/tween_component.cpp @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/tween/tween_component.h" + +namespace OHOS::Ace { +namespace { + +const char* PREFIX = "BackendTween"; +uint32_t g_tweenComponentId = 0; + +} // namespace + +void TweenComponent::SetTweenOption(const TweenOption& option) +{ + SetOptionCssChanged(true); + optionCss_ = std::move(option); +} + +const TweenOption& TweenComponent::GetTweenOption() const +{ + return optionCss_; +} + +void TweenComponent::SetCustomTweenOption(const TweenOption& option) +{ + SetOptionCustomChanged(true); + optionCustom_ = std::move(option); +} + +const TweenOption& TweenComponent::GetCustomTweenOption() const +{ + return optionCustom_; +} + +void TweenComponent::SetTweenOperation(const TweenOperation& operation) +{ + SetOperationCssChanged(true); + operationCss_ = operation; +} + +const TweenOperation& TweenComponent::GetTweenOperation() const +{ + return operationCss_; +} + +void TweenComponent::SetCustomTweenOperation(const TweenOperation& operation) +{ + SetOperationCustomChanged(true); + operationCustom_ = operation; +} + +const TweenOperation& TweenComponent::GetCustomTweenOperation() const +{ + return operationCustom_; +} + +RefPtr TweenComponent::CreateElement() +{ + return AceType::MakeRefPtr(GetId()); +} + +ComposeId TweenComponent::AllocTweenComponentId() +{ + return PREFIX + (std::to_string(g_tweenComponentId++)); +} + +void TweenComponent::SetIsFirstFrameShow(bool isFirstFrameShow) +{ + isFirstFrameShow_ = isFirstFrameShow; +} + +bool TweenComponent::GetIsFirstFrameShow() const +{ + return isFirstFrameShow_; +} + +void TweenComponent::SetAnimator(const RefPtr& animator) +{ + animator_ = animator; +} + +RefPtr TweenComponent::GetAnimator() const +{ + return animator_; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/tween/tween_component.h b/frameworks/core/components/tween/tween_component.h new file mode 100644 index 00000000..97361f54 --- /dev/null +++ b/frameworks/core/components/tween/tween_component.h @@ -0,0 +1,206 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TWEEN_TWEEN_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TWEEN_TWEEN_COMPONENT_H + +#include "base/utils/macros.h" +#include "core/animation/animation_pub.h" +#include "core/animation/curve.h" +#include "core/components/common/properties/tween_option.h" +#include "core/components/tween/tween_element.h" +#include "core/pipeline/base/composed_component.h" + +namespace OHOS::Ace { + +class ACE_EXPORT TweenComponent : public ComposedComponent { + DECLARE_ACE_TYPE(TweenComponent, ComposedComponent); + +public: + TweenComponent(const ComposeId& id, const std::string& name, const RefPtr& child) + : ComposedComponent(id, name, child) + {} + TweenComponent(const std::string& name, const RefPtr& child) + : ComposedComponent(AllocTweenComponentId(), name, child) + {} + TweenComponent(const ComposeId& id, const std::string& name) : ComposedComponent(id, name) {} + explicit TweenComponent(const std::string& name) : ComposedComponent(AllocTweenComponentId(), name) {} + ~TweenComponent() override = default; + + void SetTweenOption(const TweenOption& option); + void SetCustomTweenOption(const TweenOption& option); + void SetTweenOperation(const TweenOperation& operation); + void SetCustomTweenOperation(const TweenOperation& operation); + + const TweenOption& GetTweenOption() const; + const TweenOption& GetCustomTweenOption() const; + const TweenOperation& GetTweenOperation() const; + const TweenOperation& GetCustomTweenOperation() const; + + void SetOptionCssChanged(bool change) + { + optionCssChanged_ = change; + } + + void SetOptionCustomChanged(bool change) + { + optionCustomChanged_ = change; + } + + bool IsOptionCssChanged() const + { + return optionCssChanged_; + } + + bool IsOptionCustomChanged() const + { + return optionCustomChanged_; + } + + void SetOperationCssChanged(bool change) + { + operationCssChanged_ = change; + } + + void SetOperationCustomChanged(bool change) + { + operationCustomChanged_ = change; + } + + bool IsOperationCssChanged() const + { + return operationCssChanged_; + } + + bool IsOperationCustomChanged() const + { + return operationCustomChanged_; + } + + RefPtr CreateElement() override; + + static ComposeId AllocTweenComponentId(); + + void SetIsFirstFrameShow(bool isFirstFrameShow); + + bool GetIsFirstFrameShow() const; + + void SetAnimator(const RefPtr& animator); + RefPtr GetAnimator() const; + + void MarkDeclarativeAniamtion() + { + isDeclarativeAnimation_ = true; + } + + bool IsDeclarativeAnimation() const + { + return isDeclarativeAnimation_; + } + + void SetLeafNode(bool isLeaf) + { + isLeaf_ = isLeaf; + } + + bool IsLeafNode() const + { + return isLeaf_; + } + + void SetShadow(const Shadow& shadow) + { + shadow_ = shadow; + } + + const Shadow& GetShadow() const + { + return shadow_; + } + + void SetLeft(const Dimension& left) + { + positionParam_.left.first = left; + positionParam_.left.second = true; + } + + void SetRight(const Dimension& right) + { + positionParam_.right.first = right; + positionParam_.right.second = true; + } + + void SetTop(const Dimension& top) + { + positionParam_.top.first = top; + positionParam_.top.second = true; + } + + void SetBottom(const Dimension& bottom) + { + positionParam_.bottom.first = bottom; + positionParam_.bottom.second = true; + } + + void SetHasLeft(bool hasLeft) + { + positionParam_.left.second = hasLeft; + } + + void SetHasRight(bool hasRight) + { + positionParam_.right.second = hasRight; + } + + void SetHasTop(bool hasTop) + { + positionParam_.top.second = hasTop; + } + + void SetHasBottom(bool hasBottom) + { + positionParam_.bottom.second = hasBottom; + } + + void SetPositionType(PositionType positionType) + { + positionParam_.type = positionType; + } + + const PositionParam& GetPositionParam() const + { + return positionParam_; + } + +private: + TweenOption optionCss_; + TweenOption optionCustom_; + TweenOperation operationCss_ = TweenOperation::PLAY; + TweenOperation operationCustom_ = TweenOperation::PLAY; + bool isFirstFrameShow_ = true; + bool optionCssChanged_ = false; + bool optionCustomChanged_ = false; + bool operationCssChanged_ = false; + bool operationCustomChanged_ = false; + bool isLeaf_ = false; + bool isDeclarativeAnimation_ = false; + RefPtr animator_; + Shadow shadow_; + PositionParam positionParam_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TWEEN_TWEEN_COMPONENT_H diff --git a/frameworks/core/components/tween/tween_element.cpp b/frameworks/core/components/tween/tween_element.cpp new file mode 100644 index 00000000..943a319f --- /dev/null +++ b/frameworks/core/components/tween/tween_element.cpp @@ -0,0 +1,1091 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/tween/tween_element.h" + +#include "core/animation/curve_animation.h" +#include "core/common/frontend.h" +#include "core/components/clip/render_clip.h" +#include "core/components/display/display_component.h" +#include "core/components/shared_transition/shared_transition_element.h" +#include "core/components/transform/transform_component.h" +#include "core/components/tween/tween_component.h" +#include "core/pipeline/base/render_element.h" + +namespace OHOS::Ace { +namespace { +RefPtr GetAnimatable(const RefPtr& contentElement) +{ + if (!contentElement) { + LOGE("Get Animatable failed. content element is null."); + return nullptr; + } + return AceType::DynamicCast(contentElement->GetRenderNode()); +} + +void SetTranslateProperties(const RefPtr>& translateAnimation, TweenOption& option) +{ + if (option.GetCurve()) { + translateAnimation->SetCurve(option.GetCurve()); + } + if (!translateAnimation->HasInitValue()) { + DimensionOffset beginPos = DimensionOffset(Dimension(), Dimension()); + translateAnimation->SetInitValue(beginPos); + } +} + +void SetScaleProperties(const RefPtr>& scaleAnimation, TweenOption& option) +{ + if (option.GetCurve()) { + scaleAnimation->SetCurve(option.GetCurve()); + } + if (!scaleAnimation->HasInitValue()) { + scaleAnimation->SetInitValue(1.0f); + } +} + +void SetRotateProperties(const RefPtr>& rotateAnimation, TweenOption& option) +{ + if (option.GetCurve()) { + rotateAnimation->SetCurve(option.GetCurve()); + } + if (!rotateAnimation->HasInitValue()) { + rotateAnimation->SetInitValue(0.0f); + } +} + +void ResetController(RefPtr& controller) +{ + if (!controller) { + LOGE("Reset Controller failed. controller is null."); + return; + } + if (controller->GetStatus() != Animator::Status::IDLE && controller->GetStatus() != Animator::Status::STOPPED) { + controller->Finish(); + } + controller->ClearInterpolators(); +} + +} // namespace + +const LinearEnumMapNode>&, WeakPtr&, TweenOption&)> + TweenElement::transformFloatAnimationAddMap_[] = { + { AnimationType::SCALE, + [](const RefPtr>& scaleAnimation, WeakPtr& weakRender, + TweenOption& option) { + SetScaleProperties(scaleAnimation, option); + scaleAnimation->AddListener([weakRender, scaleAnimation](float value) { + auto renderTransformNode = weakRender.Upgrade(); + if (renderTransformNode) { + if (scaleAnimation->ShouldSkipAnimation()) { + renderTransformNode->Scale(scaleAnimation->GetEndValue()); + } else { + renderTransformNode->Scale(value); + } + } + }); + } }, + { AnimationType::SCALE_X, + [](const RefPtr>& scaleXAnimation, WeakPtr& weakRender, + TweenOption& option) { + SetScaleProperties(scaleXAnimation, option); + double maxScaleXY = option.GetMaxScaleXY(); + auto renderTransformNode = weakRender.Upgrade(); + if (renderTransformNode) { + renderTransformNode->SetMaxScaleXY(maxScaleXY); + } + scaleXAnimation->AddListener([weakRender, scaleXAnimation](float value) { + auto renderTransformNode = weakRender.Upgrade(); + if (renderTransformNode) { + if (scaleXAnimation->ShouldSkipAnimation()) { + renderTransformNode->Scale(scaleXAnimation->GetEndValue(), 1.0f); + } else { + renderTransformNode->Scale(value, 1.0f); + } + } + }); + } }, + { AnimationType::SCALE_Y, + [](const RefPtr>& scaleYAnimation, WeakPtr& weakRender, + TweenOption& option) { + SetScaleProperties(scaleYAnimation, option); + scaleYAnimation->AddListener([weakRender, scaleYAnimation](float value) { + auto renderTransformNode = weakRender.Upgrade(); + if (renderTransformNode) { + if (scaleYAnimation->ShouldSkipAnimation()) { + renderTransformNode->Scale(1.0f, scaleYAnimation->GetEndValue()); + } else { + renderTransformNode->Scale(1.0f, value); + } + } + }); + } }, + { AnimationType::ROTATE_Z, + [](const RefPtr>& rotateZAnimation, WeakPtr& weakRender, + TweenOption& option) { + SetRotateProperties(rotateZAnimation, option); + rotateZAnimation->AddListener([weakRender, rotateZAnimation](float value) { + auto renderTransformNode = weakRender.Upgrade(); + if (renderTransformNode) { + if (rotateZAnimation->ShouldSkipAnimation()) { + renderTransformNode->RotateZ(rotateZAnimation->GetEndValue()); + } else { + renderTransformNode->RotateZ(value); + } + } + }); + } }, + { AnimationType::ROTATE_X, + [](const RefPtr>& rotateXAnimation, WeakPtr& weakRender, + TweenOption& option) { + SetRotateProperties(rotateXAnimation, option); + rotateXAnimation->AddListener([weakRender, rotateXAnimation](float value) { + auto renderTransformNode = weakRender.Upgrade(); + if (renderTransformNode) { + if (rotateXAnimation->ShouldSkipAnimation()) { + renderTransformNode->RotateX(rotateXAnimation->GetEndValue()); + } else { + renderTransformNode->RotateX(value); + } + } + }); + } }, + { AnimationType::ROTATE_Y, + [](const RefPtr>& rotateYAnimation, WeakPtr& weakRender, + TweenOption& option) { + SetRotateProperties(rotateYAnimation, option); + rotateYAnimation->AddListener([weakRender, rotateYAnimation](float value) { + auto renderTransformNode = weakRender.Upgrade(); + if (renderTransformNode) { + if (rotateYAnimation->ShouldSkipAnimation()) { + renderTransformNode->RotateY(rotateYAnimation->GetEndValue()); + } else { + renderTransformNode->RotateY(value); + } + } + }); + } } + }; + +void TweenElement::Update() +{ + ComposedElement::Update(); + if (!component_) { + return; + } + auto tweenComponent = AceType::DynamicCast(component_); + if (!tweenComponent) { + LOGE("Get TweenComponent failed."); + return; + } + shadow_ = tweenComponent->GetShadow(); + positionParam_ = tweenComponent->GetPositionParam(); + if (tweenComponent->IsOptionCssChanged()) { + needUpdateTweenOption_ = true; + option_ = tweenComponent->GetTweenOption(); + tweenComponent->SetOptionCssChanged(false); + } + if (tweenComponent->IsOptionCustomChanged()) { + needUpdateTweenOptionCustom_ = true; + optionCustom_ = tweenComponent->GetCustomTweenOption(); + tweenComponent->SetOptionCustomChanged(false); + } + if (tweenComponent->IsOperationCssChanged()) { + operation_ = tweenComponent->GetTweenOperation(); + tweenComponent->SetOperationCssChanged(false); + } + if (tweenComponent->IsOperationCustomChanged()) { + operationCustom_ = tweenComponent->GetCustomTweenOperation(); + tweenComponent->SetOperationCustomChanged(false); + } + auto pipelineContext = context_.Upgrade(); + if (pipelineContext) { + RefPtr controller = tweenComponent->GetAnimator(); + if (controller) { + isComponentController_ = true; + if (!controller->HasScheduler()) { + controller->AttachScheduler(context_); + } + controllerCustom_ = controller; + } + if (!controller_) { + isDelegatedController_ = false; + controller_ = AceType::MakeRefPtr(context_); + LOGD("set animator to component when update."); + + if (pipelineContext->GetIsDeclarative()) { + controller_->SetDeclarativeAnimator(true); + } + } + + LOGD("add request to pipeline context."); + pipelineContext->AddPostFlushListener(AceType::Claim(this)); + } +} + +void TweenElement::ApplyOperation(RefPtr& controller, TweenOperation& operation) +{ + LOGD("apply operation: %{public}d", operation); + switch (operation) { + case TweenOperation::PLAY: + controller->Play(); + break; + case TweenOperation::PAUSE: + controller->Pause(); + break; + case TweenOperation::CANCEL: + controller->Cancel(); + break; + case TweenOperation::FINISH: + controller->Finish(); + break; + case TweenOperation::REVERSE: + controller->Reverse(); + break; + case TweenOperation::NONE: + default: + break; + } +} + +void TweenElement::OnPostFlush() +{ + auto pipelineContext = context_.Upgrade(); + if (!pipelineContext) { + return; + } + pipelineContext->AddPreFlushListener(AceType::Claim(this)); +} + +void TweenElement::OnPreFlush() +{ + if (!controller_ && !controllerCustom_) { + LOGD("empty controller, skip start tween."); + return; + } + SetVisible(VisibleType::VISIBLE); + if (isDelegatedController_ && !isComponentController_) { + LOGD("controller is set from outside. skip prepare animation."); + return; + } + + if (needUpdateTweenOption_) { + ResetController(controller_); + ApplyKeyframes(); + ApplyOptions(); + needUpdateTweenOption_ = false; + } + if (needUpdateTweenOptionCustom_) { + ResetController(controllerCustom_); + ApplyKeyframes(controllerCustom_, optionCustom_, prepareIdCustom_); + ApplyOptions(controllerCustom_, optionCustom_); + needUpdateTweenOptionCustom_ = false; + } + if (operation_ != TweenOperation::NONE || operationCustom_ != TweenOperation::NONE) { + auto pipelineContext = context_.Upgrade(); + if (!pipelineContext) { + return; + } + } + + LOGD("Start tween animation with operation: %{public}d, operationCustom: %{public}d", operation_, operationCustom_); + if (controller_) { + ApplyOperation(controller_, operation_); + } + if (controllerCustom_) { + ApplyOperation(controllerCustom_, operationCustom_); + } + + // reset operation to none. + operation_ = TweenOperation::NONE; + operationCustom_ = TweenOperation::NONE; +} + +bool TweenElement::IsNeedAnimation(RefPtr& controller, TweenOption& option) +{ + if (!controller) { + LOGE("add interpolator failed. controller is null."); + return false; + } + bool needAnimation = false; + auto& transformOffsetAnimations = option.GetTranslateAnimations(); + for (auto&& [translate, animation] : transformOffsetAnimations) { + if (animation) { + needAnimation = true; + LOGD("add translate animation."); + controller->AddInterpolator(animation); + } + } + auto& transformFloatAnimations = option.GetTransformFloatAnimation(); + for (auto&& [transformFloat, animation] : transformFloatAnimations) { + if (animation) { + needAnimation = true; + LOGD("add transform float animation."); + controller->AddInterpolator(animation); + } + } + auto& opacityAnimation = option.GetOpacityAnimation(); + if (opacityAnimation) { + LOGD("add opacity animation."); + controller->AddInterpolator(opacityAnimation); + needAnimation = true; + } + auto& colorAnimation = option.GetColorAnimation(); + if (colorAnimation) { + LOGD("add color animation."); + controller->AddInterpolator(colorAnimation); + needAnimation = true; + } + auto& backgroundPositionAnimation = option.GetBackgroundPositionAnimation(); + if (backgroundPositionAnimation) { + LOGD("add background position animation."); + controller->AddInterpolator(backgroundPositionAnimation); + needAnimation = true; + } + + if (AddToAnimator(option.GetFloatPropertyAnimation(), controller, option)) { + needAnimation = true; + } + return needAnimation; +} + +RefPtr TweenElement::BuildChild() +{ + RefPtr tween = AceType::DynamicCast(component_); + if (tween) { + if (tween->IsDeclarativeAnimation()) { + return ComposedElement::BuildChild(); + } + + RefPtr transformComponent = AceType::MakeRefPtr(); + RefPtr displayComponent = AceType::MakeRefPtr(transformComponent); + displayComponent->SetPositionType(positionParam_.type); + displayComponent->SetHasLeft(positionParam_.left.second); + displayComponent->SetHasRight(positionParam_.right.second); + displayComponent->SetHasTop(positionParam_.top.second); + displayComponent->SetHasBottom(positionParam_.bottom.second); + displayComponent->SetLeft(positionParam_.left.first); + displayComponent->SetRight(positionParam_.right.first); + displayComponent->SetTop(positionParam_.top.first); + displayComponent->SetBottom(positionParam_.bottom.first); + displayComponent->DisableLayer(tween->IsLeafNode()); + transformComponent->SetChild(ComposedElement::BuildChild()); + if (!tween->GetIsFirstFrameShow()) { + displayComponent->SetVisible(VisibleType::INVISIBLE); + } + return displayComponent; + } else { + LOGE("no tween component found. return empty child."); + return nullptr; + } +} + +void TweenElement::PerformBuild() +{ + auto pipelineContext = context_.Upgrade(); + if (pipelineContext && !pipelineContext->GetIsDeclarative()) { + // if tween Option or child changes, need to do PerformBuild. These changes conflict with tween operation, so if + // there are any new operations, animate it first, just do not disturb child + if (((operation_ != TweenOperation::NONE) || (operationCustom_ != TweenOperation::NONE)) && + !children_.empty()) { + LOGI("Just update self, do not disturb children."); + return; + } + } + ComposedElement::PerformBuild(); +} + +void TweenElement::CreateTranslateAnimation(const RefPtr& renderTransformNode, TweenOption& option) +{ + if (!option.HasTransformOffsetChanged()) { + LOGD("create translate animation with null. skip it."); + return; + } + auto& transformOffsetAnimations = option.GetTranslateAnimations(); + WeakPtr weakRender = renderTransformNode; + static const LinearEnumMapNode>&, WeakPtr&, TweenOption&)> + translateAnimationAddMap[] = { + { AnimationType::TRANSLATE, + [](const RefPtr>& translateAnimation, + WeakPtr& weakRender, TweenOption& option) { + SetTranslateProperties(translateAnimation, option); + translateAnimation->AddListener([weakRender, translateAnimation]( + const DimensionOffset& value) { + auto renderTransformNode = weakRender.Upgrade(); + if (renderTransformNode) { + if (translateAnimation->ShouldSkipAnimation()) { + auto endValue = translateAnimation->GetEndValue(); + renderTransformNode->Translate( + endValue.GetX(), endValue.GetY()); + } else { + renderTransformNode->Translate(value.GetX(), value.GetY()); + } + } + }); + } }, + { AnimationType::TRANSLATE_X, + [](const RefPtr>& translateXAnimation, WeakPtr& weakRender, + TweenOption& option) { + SetTranslateProperties(translateXAnimation, option); + translateXAnimation->AddListener([weakRender, translateXAnimation](const DimensionOffset& value) { + auto renderTransformNode = weakRender.Upgrade(); + if (renderTransformNode) { + if (translateXAnimation->ShouldSkipAnimation()) { + auto endValue = translateXAnimation->GetEndValue(); + renderTransformNode->Translate(endValue.GetX(), 0.0_px); + } else { + renderTransformNode->Translate(value.GetX(), 0.0_px); + } + } + }); + } }, + { AnimationType::TRANSLATE_Y, + [](const RefPtr>& translateYAnimation, WeakPtr& weakRender, + TweenOption& option) { + SetTranslateProperties(translateYAnimation, option); + translateYAnimation->AddListener([weakRender, translateYAnimation](const DimensionOffset& value) { + auto renderTransformNode = weakRender.Upgrade(); + if (renderTransformNode) { + if (translateYAnimation->ShouldSkipAnimation()) { + auto endValue = translateYAnimation->GetEndValue(); + renderTransformNode->Translate(0.0_px, endValue.GetY()); + } else { + renderTransformNode->Translate(0.0_px, value.GetY()); + } + } + }); + } } + }; + size_t mapSize = ArraySize(translateAnimationAddMap); + auto iterTranslateAnimation = transformOffsetAnimations.find(AnimationType::TRANSLATE); + if (iterTranslateAnimation != transformOffsetAnimations.end()) { + auto translateAnimationIter = + BinarySearchFindIndex(translateAnimationAddMap, mapSize, AnimationType::TRANSLATE); + if (translateAnimationIter != -1) { + auto& translateAnimation = iterTranslateAnimation->second; + if (!translateAnimation->ShouldSkipAnimation()) { + if (translateAnimation->IsDeclarativeAnimation()) { + translateAnimation->SetStart( + DimensionOffset(renderTransformNode->GetTranslateX(), renderTransformNode->GetTranslateY())); + } + translateAnimationAddMap[translateAnimationIter].value(translateAnimation, weakRender, option); + } else { + translateAnimation->SetStart(translateAnimation->GetEndValue()); + translateAnimationAddMap[translateAnimationIter].value(translateAnimation, weakRender, option); + auto endValue = translateAnimation->GetEndValue(); + renderTransformNode->Translate(endValue.GetX(), endValue.GetY()); + } + } + } + + auto iterTranslateXAnimation = transformOffsetAnimations.find(AnimationType::TRANSLATE_X); + if (iterTranslateXAnimation != transformOffsetAnimations.end()) { + auto translateXAnimationIter = + BinarySearchFindIndex(translateAnimationAddMap, mapSize, AnimationType::TRANSLATE_X); + if (translateXAnimationIter != -1) { + auto& translateXAnimation = iterTranslateXAnimation->second; + if (!translateXAnimation->ShouldSkipAnimation()) { + if (translateXAnimation->IsDeclarativeAnimation()) { + translateXAnimation->SetStart(DimensionOffset(renderTransformNode->GetTranslateX(), Dimension())); + } + translateAnimationAddMap[translateXAnimationIter].value(translateXAnimation, weakRender, option); + } else { + translateXAnimation->SetStart(translateXAnimation->GetEndValue()); + translateAnimationAddMap[translateXAnimationIter].value(translateXAnimation, weakRender, option); + auto endValue = translateXAnimation->GetEndValue(); + renderTransformNode->Translate(endValue.GetX(), 0.0_px); + } + } + } + + auto iterTranslateYAnimation = transformOffsetAnimations.find(AnimationType::TRANSLATE_Y); + if (iterTranslateYAnimation != transformOffsetAnimations.end()) { + auto translateYAnimationIter = + BinarySearchFindIndex(translateAnimationAddMap, mapSize, AnimationType::TRANSLATE_Y); + if (translateYAnimationIter != -1) { + auto& translateYAnimation = iterTranslateYAnimation->second; + if (!translateYAnimation->ShouldSkipAnimation()) { + if (translateYAnimation->IsDeclarativeAnimation()) { + translateYAnimation->SetStart(DimensionOffset(Dimension(), renderTransformNode->GetTranslateY())); + } + translateAnimationAddMap[translateYAnimationIter].value(translateYAnimation, weakRender, option); + } else { + translateYAnimation->SetStart(translateYAnimation->GetEndValue()); + translateAnimationAddMap[translateYAnimationIter].value(translateYAnimation, weakRender, option); + auto endValue = translateYAnimation->GetEndValue(); + renderTransformNode->Translate(0.0_px, endValue.GetY()); + } + } + } +} + +void TweenElement::CreateScaleAnimation(const RefPtr& renderTransformNode, TweenOption& option) +{ + if (!option.HasTransformFloatChanged()) { + LOGD("create scale animation with null. skip it."); + return; + } + auto& transformFloatAnimations = option.GetTransformFloatAnimation(); + WeakPtr weakRender = renderTransformNode; + auto iterScaleAnimation = transformFloatAnimations.find(AnimationType::SCALE); + size_t mapSize = ArraySize(transformFloatAnimationAddMap_); + if (iterScaleAnimation != transformFloatAnimations.end()) { + auto scaleAnimationIter = BinarySearchFindIndex(transformFloatAnimationAddMap_, mapSize, AnimationType::SCALE); + if (scaleAnimationIter != -1) { + auto& scaleAnimation = iterScaleAnimation->second; + if (!scaleAnimation->ShouldSkipAnimation()) { + if (scaleAnimation->IsDeclarativeAnimation()) { + scaleAnimation->SetStart(renderTransformNode->GetScaleX()); + } + transformFloatAnimationAddMap_[scaleAnimationIter].value(scaleAnimation, weakRender, option); + } else { + scaleAnimation->SetStart(scaleAnimation->GetEndValue()); + transformFloatAnimationAddMap_[scaleAnimationIter].value(scaleAnimation, weakRender, option); + renderTransformNode->Scale(scaleAnimation->GetEndValue()); + } + } + } + + auto iterScaleXAnimation = transformFloatAnimations.find(AnimationType::SCALE_X); + if (iterScaleXAnimation != transformFloatAnimations.end()) { + auto scaleXAnimationIter = + BinarySearchFindIndex(transformFloatAnimationAddMap_, mapSize, AnimationType::SCALE_X); + if (scaleXAnimationIter != -1) { + auto& scaleXAnimation = iterScaleXAnimation->second; + if (!scaleXAnimation->ShouldSkipAnimation()) { + if (scaleXAnimation->IsDeclarativeAnimation()) { + scaleXAnimation->SetStart(renderTransformNode->GetScaleX()); + } + transformFloatAnimationAddMap_[scaleXAnimationIter].value(scaleXAnimation, weakRender, option); + } else { + scaleXAnimation->SetStart(scaleXAnimation->GetEndValue()); + transformFloatAnimationAddMap_[scaleXAnimationIter].value(scaleXAnimation, weakRender, option); + renderTransformNode->Scale(scaleXAnimation->GetEndValue(), 1.0f); + } + } + } + + auto iterScaleYAnimation = transformFloatAnimations.find(AnimationType::SCALE_Y); + if (iterScaleYAnimation != transformFloatAnimations.end()) { + auto scaleYAnimationIter = + BinarySearchFindIndex(transformFloatAnimationAddMap_, mapSize, AnimationType::SCALE_Y); + if (scaleYAnimationIter != -1) { + auto& scaleYAnimation = iterScaleYAnimation->second; + if (!scaleYAnimation->ShouldSkipAnimation()) { + if (scaleYAnimation->IsDeclarativeAnimation()) { + scaleYAnimation->SetStart(renderTransformNode->GetScaleY()); + } + transformFloatAnimationAddMap_[scaleYAnimationIter].value(scaleYAnimation, weakRender, option); + } else { + scaleYAnimation->SetStart(scaleYAnimation->GetEndValue()); + transformFloatAnimationAddMap_[scaleYAnimationIter].value(scaleYAnimation, weakRender, option); + renderTransformNode->Scale(1.0f, scaleYAnimation->GetEndValue()); + } + } + } +} + +void TweenElement::CreateTransformOriginAnimation( + const RefPtr& renderTransformNode, TweenOption& option) +{ + if (option.HasTransformOriginChanged()) { + renderTransformNode->SetTransformOrigin(option.GetTransformOriginX(), option.GetTransformOriginY()); + option.SetTransformOriginChanged(false); + } else { + renderTransformNode->SetTransformOrigin(HALF_PERCENT, HALF_PERCENT); + } + renderTransformNode->MarkNeedUpdateOrigin(); +} + +void TweenElement::CreateRotateAnimation(const RefPtr& renderTransformNode, TweenOption& option) +{ + if (!option.HasTransformFloatChanged()) { + LOGD("create rotate animation with null. skip it."); + return; + } + auto& transformFloatAnimations = option.GetTransformFloatAnimation(); + WeakPtr weakRender = renderTransformNode; + auto iterRotateZAnimation = transformFloatAnimations.find(AnimationType::ROTATE_Z); + size_t mapSize = ArraySize(transformFloatAnimationAddMap_); + if (iterRotateZAnimation != transformFloatAnimations.end()) { + auto rotateZAnimationIter = + BinarySearchFindIndex(transformFloatAnimationAddMap_, mapSize, AnimationType::ROTATE_Z); + if (rotateZAnimationIter != -1) { + auto& rotateZAnimation = iterRotateZAnimation->second; + transformFloatAnimationAddMap_[rotateZAnimationIter].value(rotateZAnimation, weakRender, option); + if (!rotateZAnimation->ShouldSkipAnimation()) { + if (rotateZAnimation->IsDeclarativeAnimation()) { + rotateZAnimation->SetStart(renderTransformNode->GetRotateZ()); + } + transformFloatAnimationAddMap_[rotateZAnimationIter].value(rotateZAnimation, weakRender, option); + } else { + rotateZAnimation->SetStart(rotateZAnimation->GetEndValue()); + transformFloatAnimationAddMap_[rotateZAnimationIter].value(rotateZAnimation, weakRender, option); + renderTransformNode->RotateZ(rotateZAnimation->GetEndValue()); + } + } + } + + auto iterRotateXAnimation = transformFloatAnimations.find(AnimationType::ROTATE_X); + if (iterRotateXAnimation != transformFloatAnimations.end()) { + auto rotateXAnimationIter = + BinarySearchFindIndex(transformFloatAnimationAddMap_, mapSize, AnimationType::ROTATE_X); + if (rotateXAnimationIter != -1) { + auto& rotateXAnimation = iterRotateXAnimation->second; + if (!rotateXAnimation->ShouldSkipAnimation()) { + if (rotateXAnimation->IsDeclarativeAnimation()) { + rotateXAnimation->SetStart(renderTransformNode->GetRotateX()); + } + transformFloatAnimationAddMap_[rotateXAnimationIter].value(rotateXAnimation, weakRender, option); + } else { + rotateXAnimation->SetStart(rotateXAnimation->GetEndValue()); + transformFloatAnimationAddMap_[rotateXAnimationIter].value(rotateXAnimation, weakRender, option); + renderTransformNode->RotateX(rotateXAnimation->GetEndValue()); + } + } + } + + auto iterRotateYAnimation = transformFloatAnimations.find(AnimationType::ROTATE_Y); + if (iterRotateYAnimation != transformFloatAnimations.end()) { + auto rotateYAnimationIter = + BinarySearchFindIndex(transformFloatAnimationAddMap_, mapSize, AnimationType::ROTATE_Y); + if (rotateYAnimationIter != -1) { + auto& rotateYAnimation = iterRotateYAnimation->second; + if (!rotateYAnimation->ShouldSkipAnimation()) { + if (rotateYAnimation->IsDeclarativeAnimation()) { + rotateYAnimation->SetStart(renderTransformNode->GetRotateY()); + } + transformFloatAnimationAddMap_[rotateYAnimationIter].value(rotateYAnimation, weakRender, option); + } else { + rotateYAnimation->SetStart(rotateYAnimation->GetEndValue()); + transformFloatAnimationAddMap_[rotateYAnimationIter].value(rotateYAnimation, weakRender, option); + renderTransformNode->RotateY(rotateYAnimation->GetEndValue()); + } + } + } +} + +void TweenElement::CreateOpacityAnimation(const RefPtr& renderDisplayNode, TweenOption& option) +{ + auto& opacityAnimation = option.GetOpacityAnimation(); + if (!opacityAnimation) { + LOGD("create opacity animation with null. skip it."); + return; + } + if (!opacityAnimation->HasInitValue()) { + opacityAnimation->SetInitValue(UINT8_MAX); + } + + if (!opacityAnimation->ShouldSkipAnimation()) { + if (opacityAnimation->IsDeclarativeAnimation()) { + opacityAnimation->SetStart(renderDisplayNode->GetOpacity() / (float)UINT8_MAX); + } + + WeakPtr weakRender = renderDisplayNode; + opacityAnimation->AddListener([weakRender, opacityAnimation](float value) { + auto opacity = static_cast(std::round(value * UINT8_MAX)); + if (value < 0.0f || value > 1.0f) { + opacity = UINT8_MAX; + } + auto renderDisplayNode = weakRender.Upgrade(); + if (renderDisplayNode) { + renderDisplayNode->UpdateOpacity(opacity); + } + }); + + if (option.GetCurve()) { + opacityAnimation->SetCurve(option.GetCurve()); + } + } else { + auto endValue = opacityAnimation->GetEndValue(); + auto opacity = static_cast(std::round(endValue * UINT8_MAX)); + if (endValue < 0.0f || endValue > 1.0f) { + opacity = UINT8_MAX; + } + renderDisplayNode->UpdateOpacity(opacity); + } +} + +void TweenElement::CreateColorAnimation(const RefPtr& animatable, TweenOption& option) +{ + if (!animatable) { + LOGE("create color animation failed. not a animatable child."); + return; + } + auto& colorAnimation = option.GetColorAnimation(); + if (!colorAnimation) { + LOGD("create color animation with null. skip it."); + return; + } + PropertyAnimatableType propertyType; + if (option.GetIsBackground()) { + propertyType = PropertyAnimatableType::PROPERTY_BACK_DECORATION_COLOR; + } else { + propertyType = PropertyAnimatableType::PROPERTY_FRONT_DECORATION_COLOR; + } + CreatePropertyAnimation(animatable, propertyType, option, colorAnimation); +} + +template +bool TweenElement::CreatePropertyAnimation(const RefPtr& propertyAnimatable, + PropertyAnimatableType propertyType, const TweenOption& option, RefPtr>& animation) +{ + if (animation && !animation->ShouldSkipAnimation()) { + typename U::Type initValue; + bool created = + PropertyAnimatable::AddPropertyAnimation(propertyAnimatable, propertyType, animation, initValue); + if (!created) { + LOGE("create property animation failed. property: %{public}d", propertyType); + return false; + } + if (option.GetCurve()) { + animation->SetCurve(option.GetCurve()); + } + if (!animation->HasInitValue()) { + animation->SetInitValue(initValue); + } + } else { + bool propertySet = PropertyAnimatable::SetProperty(propertyAnimatable, propertyType, animation); + if (!propertySet) { + LOGE("Cannot set property. property: %{public}d", propertyType); + return false; + } + } + return true; +} + +template +bool TweenElement::AddToAnimator( + const std::map& animations, RefPtr& controller, TweenOption& option) +{ + bool needAnimation = false; + for (auto&& [property, animation] : animations) { + if (animation) { + needAnimation = true; + LOGD("add property animation. property: %{public}d", property); + controller->AddInterpolator(animation); + } + } + return needAnimation; +} + +void TweenElement::CreateBackgroundPositionAnimation(const RefPtr& animatable, TweenOption& option) +{ + if (!animatable) { + LOGE("create background position animation failed. not a animatable child."); + return; + } + auto& backgroundPositionAnimation = option.GetBackgroundPositionAnimation(); + if (!backgroundPositionAnimation) { + LOGD("create background position animation with null. skip it."); + return; + } + + CreatePropertyAnimation( + animatable, PropertyAnimatableType::PROPERTY_BACKGROUND_POSITION, option, backgroundPositionAnimation); +} + +void TweenElement::SetController(const RefPtr& controller) +{ + if (!controller) { + LOGE("set controller failed. controller is empty."); + return; + } + LOGD("set controller"); + if (!controller_->IsStopped()) { + controller_->Stop(); + } + isDelegatedController_ = true; + controller_ = controller; +} + +const TweenOption& TweenElement::GetOption() const +{ + return option_; +} + +void TweenElement::SetOption(const TweenOption& option) +{ + LOGD("set tween option"); + option_ = option; +} + +const RefPtr& TweenElement::GetController() const +{ + return controller_; +} + +void TweenElement::SetOpacity(uint8_t opacity) +{ + if (children_.empty()) { + LOGE("no child when set Opacity"); + return; + } + const auto& child = children_.front(); + if (!child) { + LOGE("child is null."); + return; + } + auto childElement = AceType::DynamicCast(child); + if (!childElement) { + LOGE("child element is null."); + return; + } + const auto& displayRenderNode = AceType::DynamicCast(childElement->GetRenderNode()); + if (!displayRenderNode) { + LOGE("no display render node found."); + return; + } + LOGD("set Opacity. Opacity: %{public}d", opacity); + displayRenderNode->UpdateOpacity(opacity); +} + +void TweenElement::SetVisible(VisibleType visible) +{ + if (children_.empty()) { + LOGE("no child when set visible"); + return; + } + const auto& child = children_.front(); + if (!child) { + LOGE("child is null."); + return; + } + auto childElement = AceType::DynamicCast(child); + if (!childElement) { + LOGE("child element is null."); + return; + } + const auto& displayRenderNode = AceType::DynamicCast(childElement->GetRenderNode()); + if (!displayRenderNode) { + LOGE("no display render node found."); + return; + } + LOGD("set visible. visible: %{public}d", visible); + displayRenderNode->UpdateVisibleType(visible); +} + +void TweenElement::SetTouchable(bool enable) +{ + LOGD("set tween touchable status: %{public}d", enable); + + if (children_.empty()) { + LOGW("get content child failed. no child yet."); + return; + } + const auto& child = children_.front(); + if (!child || child->GetType() != RENDER_ELEMENT) { + LOGW("get content child failed. null child or not render child."); + return; + } + const auto& transformElement = AceType::DynamicCast(child)->GetFirstChild(); + if (!transformElement) { + LOGE("Get RenderElement failed."); + return; + } + const auto& transformRenderNode = AceType::DynamicCast(transformElement->GetRenderNode()); + if (transformRenderNode) { + transformRenderNode->SetTouchable(enable); + } +} + +RefPtr TweenElement::GetContentRender() const +{ + auto contentElement = GetContentElement(); + if (!contentElement) { + return nullptr; + } + return contentElement->GetRenderNode(); +} + +bool TweenElement::ApplyKeyframes() +{ + return ApplyKeyframes(controller_, option_, prepareId_); +} + +void TweenElement::AddPrepareListener( + RefPtr& controller, const WeakPtr& weakTransform, BaseId::IdType& prepareId) +{ + if (!controller) { + LOGE("Add Prepare Listener failed. controller is null."); + return; + } + controller->RemovePrepareListener(prepareId); + prepareId = + controller->AddPrepareListener([weakTransform, weakContext = context_, + weakTween = AceType::WeakClaim(this)]() { + // reset transform matrix at the start of every frame. + auto context = weakContext.Upgrade(); + auto tween = weakTween.Upgrade(); + auto transform = weakTransform.Upgrade(); + if (context && tween && transform) { + auto currentTimestamp = context->GetTimeFromExternalTimer(); + if (tween->currentTimestamp_ != currentTimestamp || tween->currentTimestamp_ == 0) { + if (!context->GetIsDeclarative() || tween->GetOption().IsValid()) { + transform->ResetTransform(); + } + tween->currentTimestamp_ = currentTimestamp; + } + } + }); +} + +bool TweenElement::ApplyKeyframes(RefPtr& controller, TweenOption& option, BaseId::IdType& prepareId) +{ + if (!controller) { + LOGW("controller is null."); + return false; + } + if (children_.empty()) { + LOGW("apply option failed. no child yet."); + return false; + } + const auto& child = children_.front(); + if (!child || child->GetType() != RENDER_ELEMENT) { + LOGW("apply option failed. null child or not render child."); + return false; + } + LOGD("TweenElement: ApplyKeyframes."); + + auto pipelineContext = context_.Upgrade(); + if (pipelineContext && pipelineContext->GetIsDeclarative()) { + if (shouldSkipAnimationOnCreation) { + option.SkipAllPendingAnimation(); + shouldSkipAnimationOnCreation = false; + } + } + + const auto& displayRenderNode = + AceType::DynamicCast(AceType::DynamicCast(child)->GetRenderNode()); + if (!displayRenderNode) { + LOGE("display render node is null."); + return false; + } + const auto& transformElement = AceType::DynamicCast(child)->GetFirstChild(); + if (!transformElement) { + LOGE("transform element node is null."); + return false; + } + const auto& transformRenderNode = AceType::DynamicCast(transformElement->GetRenderNode()); + if (!transformRenderNode) { + LOGE("transform render node is null."); + return false; + } + if (shadow_.IsValid()) { + displayRenderNode->SetShadow(shadow_); + transformRenderNode->SetShadow(shadow_); + } + + if (pipelineContext && pipelineContext->GetIsDeclarative()) { + displayRenderNode->SetDeclarativeAnimationActive(true); + transformRenderNode->SetDeclarativeAnimationActive(true); + } + + const auto& contentElement = AceType::DynamicCast(transformElement)->GetFirstChild(); + auto animatable = GetAnimatable(contentElement); + if (animatable) { + if (pipelineContext && pipelineContext->GetIsDeclarative()) { + contentElement->GetRenderNode()->SetDeclarativeAnimationActive(true); + } + CreateColorAnimation(animatable, option); + CreateBackgroundPositionAnimation(animatable, option); + CreatePropertyAnimationFloat(animatable, option); + } + CreateTranslateAnimation(transformRenderNode, option); + CreateScaleAnimation(transformRenderNode, option); + CreateRotateAnimation(transformRenderNode, option); + CreateTransformOriginAnimation(transformRenderNode, option); + if (option.HasTransformOffsetChanged() || option.HasTransformFloatChanged()) { + AddPrepareListener(controller, transformRenderNode, prepareId); + } + CreateOpacityAnimation(displayRenderNode, option); + return IsNeedAnimation(controller, option); +} + +void TweenElement::ApplyOptions(RefPtr& controller, TweenOption& option) +{ + if (!controller) { + LOGE("Apply Options failed. Controller is null."); + return; + } + LOGD("apply options."); + controller->SetDuration(option.GetDuration()); + controller->SetIteration(option.GetIteration()); + controller->SetStartDelay(option.GetDelay()); + controller->SetFillMode(option.GetFillMode()); + controller->SetAnimationDirection(option.GetAnimationDirection()); +} + +void TweenElement::ApplyOptions() +{ + ApplyOptions(controller_, option_); +} + +RefPtr TweenElement::GetContentElement() const +{ + const auto& mountParent = GetContentParent(); + if (!mountParent) { + LOGE("Get content element failed. content parent is null."); + return nullptr; + } + return mountParent->GetFirstChild(); +} + +RefPtr TweenElement::GetContentParent() const +{ + const auto child = GetFirstChild(); + if (!child) { + LOGW("Get transformElement failed. null child."); + return nullptr; + } + const auto& displayRenderNode = + AceType::DynamicCast(AceType::DynamicCast(child)->GetRenderNode()); + if (!displayRenderNode) { + LOGE("display render node is null."); + return nullptr; + } + const auto& transformElement = AceType::DynamicCast(child)->GetFirstChild(); + if (!transformElement) { + LOGE("Get transformElement failed. transform element is null"); + return nullptr; + } + const auto& transformRenderNode = AceType::DynamicCast(transformElement->GetRenderNode()); + if (!transformRenderNode) { + LOGE("Get transformElement failed. transform render node is null."); + return nullptr; + } + return transformElement; +} + +void TweenElement::CreatePropertyAnimationFloat(const RefPtr& animatable, TweenOption& option) +{ + if (!animatable) { + LOGE("Create property animation for float failed. animatable is null."); + return; + } + auto& propertyFloatMap = option.GetFloatPropertyAnimation(); + if (propertyFloatMap.empty()) { + LOGD("No property animation float found. skip it."); + return; + } + for (auto&& [property, animation] : propertyFloatMap) { + LOGD("Create animation float for property: %{public}d", property); + CreatePropertyAnimation(animatable, property, option, animation); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/tween/tween_element.h b/frameworks/core/components/tween/tween_element.h new file mode 100644 index 00000000..aa38848f --- /dev/null +++ b/frameworks/core/components/tween/tween_element.h @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TWEEN_TWEEN_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TWEEN_TWEEN_ELEMENT_H + +#include "base/utils/linear_map.h" +#include "base/utils/utils.h" +#include "core/animation/animation.h" +#include "core/animation/animator.h" +#include "core/animation/property_animatable.h" +#include "core/components/common/layout/position_param.h" +#include "core/components/common/properties/tween_option.h" +#include "core/components/display/render_display.h" +#include "core/components/transform/render_transform.h" +#include "core/pipeline/base/composed_element.h" + +namespace OHOS::Ace { + +class TweenElement : public ComposedElement, public FlushEvent { + DECLARE_ACE_TYPE(TweenElement, ComposedElement, FlushEvent); + +public: + explicit TweenElement(const ComposeId& id) : ComposedElement(id) {} + ~TweenElement() override = default; + + void PerformBuild() override; + void Update() override; + void OnPostFlush() override; + void OnPreFlush() override; + bool ApplyKeyframes(); + void ApplyOptions(); + const TweenOption& GetOption() const; + void SetOption(const TweenOption& option); + void SetVisible(VisibleType visible); + void SetOpacity(uint8_t opacity); + void SetController(const RefPtr& controller); + RefPtr GetContentRender() const; + RefPtr GetContentElement() const; + RefPtr GetContentParent() const; + const RefPtr& GetController() const; + void SetTouchable(bool enable); + + void Dump() override {} + +protected: + RefPtr BuildChild() override; + +private: + bool ApplyKeyframes(RefPtr& controller, TweenOption& option, BaseId::IdType& prepareId); + void ApplyOptions(RefPtr& controller, TweenOption& option); + bool IsNeedAnimation(RefPtr& controller, TweenOption& option); + void AddPrepareListener(RefPtr& controller, const WeakPtr& weakTransform, + BaseId::IdType& prepareId); + void CreateTranslateAnimation(const RefPtr& renderTransformNode, TweenOption& option); + void CreateScaleAnimation(const RefPtr& renderTransformNode, TweenOption& option); + void CreateRotateAnimation(const RefPtr& renderTransformNode, TweenOption& option); + void CreateTransformOriginAnimation(const RefPtr& renderTransformNode, TweenOption& option); + void CreateOpacityAnimation(const RefPtr& renderDisplayNode, TweenOption& option); + void CreateColorAnimation(const RefPtr& animatable, TweenOption& option); + void CreateBackgroundPositionAnimation(const RefPtr& animatable, TweenOption& option); + void CreatePropertyAnimationFloat(const RefPtr& animatable, TweenOption& option); + void ApplyOperation(RefPtr& controller, TweenOperation& operation); + template + static bool CreatePropertyAnimation(const RefPtr& propertyAnimatable, + PropertyAnimatableType propertyType, const TweenOption& option, RefPtr>& animation); + template + static bool AddToAnimator( + const std::map& animations, RefPtr& controller, TweenOption& option); + + bool isDelegatedController_ = false; + bool isComponentController_ = false; + bool needUpdateTweenOption_ = false; + bool needUpdateTweenOptionCustom_ = false; + RefPtr controller_; + RefPtr controllerCustom_; + BaseId::IdType prepareIdCustom_ = -1; + BaseId::IdType prepareId_ = -1; + TweenOperation operation_ = TweenOperation::NONE; + TweenOperation operationCustom_ = TweenOperation::NONE; + TweenOption option_; + TweenOption optionCustom_; + uint64_t currentTimestamp_ = 0; + const static LinearEnumMapNode>&, WeakPtr&, TweenOption&)> + transformFloatAnimationAddMap_[]; + Shadow shadow_; + bool shouldSkipAnimationOnCreation = false; + PositionParam positionParam_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_TWEEN_TWEEN_ELEMENT_H diff --git a/frameworks/core/components/video/BUILD.gn b/frameworks/core/components/video/BUILD.gn new file mode 100644 index 00000000..de14f145 --- /dev/null +++ b/frameworks/core/components/video/BUILD.gn @@ -0,0 +1,27 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("video") { + sources = [ + "flutter_render_texture.cpp", + "render_texture.cpp", + "resource/player.cpp", + "resource/resource.cpp", + "resource/texture.cpp", + "texture_component.cpp", + "video_component.cpp", + "video_element.cpp", + ] +} diff --git a/frameworks/core/components/video/flutter_render_texture.cpp b/frameworks/core/components/video/flutter_render_texture.cpp new file mode 100644 index 00000000..50a55f50 --- /dev/null +++ b/frameworks/core/components/video/flutter_render_texture.cpp @@ -0,0 +1,144 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/display/render_display.h" +#include "core/components/video/flutter_render_texture.h" + +#include "flutter/fml/memory/ref_counted.h" +#include "flutter/lib/ui/painting/canvas.h" +#include "flutter/lib/ui/painting/picture_recorder.h" +#include "flutter/lib/ui/ui_dart_state.h" + +#include "base/log/dump_log.h" + +namespace OHOS::Ace { + +using namespace Flutter; + +RefPtr RenderTexture::Create() +{ + return AceType::MakeRefPtr(); +} + +void FlutterRenderTexture::Paint(RenderContext& context, const Offset& offset) +{ + const Size& layout = GetLayoutSize(); + + layer_->SetClip(0.0, layout.Width(), 0.0, layout.Height(), Flutter::Clip::NONE); + AddBackgroundLayer(); + + if (textureId_ != INVALID_TEXTURE) { + AddTextureLayer(); + } + + RenderNode::Paint(context, offset); +} + +RenderLayer FlutterRenderTexture::GetRenderLayer() +{ + if (!layer_) { + layer_ = AceType::MakeRefPtr(0.0, 0.0, 0.0, 0.0, Flutter::Clip::NONE); + } + + return AceType::RawPtr(layer_); +} + +void FlutterRenderTexture::AddTextureLayer() +{ + if (!textureLayer_) { + textureLayer_ = + AceType::MakeRefPtr(textureId_, false, drawSize_.Width(), drawSize_.Height(), opacity_); + } else { + textureLayer_->Update(textureId_, false, drawSize_.Width(), drawSize_.Height(), opacity_); + } + + textureLayer_->SetOffset(alignmentX_, alignmentY_); + + layer_->AddChildren(textureLayer_); +} + +void FlutterRenderTexture::AddBackgroundLayer() +{ + if (!backgroundLayer_) { + backgroundLayer_ = AceType::MakeRefPtr(); + } + + if (needDrawBackground_) { + DrawBackground(); + } + + if (imageFit_ != ImageFit::FILL) { + layer_->AddChildren(backgroundLayer_); + } +} + +void FlutterRenderTexture::DrawBackground() +{ + const Size& layout = GetLayoutSize(); + fml::RefPtr recorder; + fml::RefPtr canvas; + flutter::Paint paint; + flutter::PaintData paintData; + + recorder = flutter::PictureRecorder::Create(); + canvas = flutter::Canvas::Create(recorder.get(), 0.0, 0.0, layout.Width(), layout.Height()); + paint.paint()->setColor(SK_ColorBLACK); + paint.paint()->setAlpha(opacity_); + canvas->drawRect(0.0, 0.0, layout.Width(), layout.Height(), paint, paintData); + backgroundLayer_->SetPicture(recorder->endRecording()); + + needDrawBackground_ = false; +} + +void FlutterRenderTexture::PerformLayout() +{ + RenderTexture::PerformLayout(); + needDrawBackground_ = true; +} + +void FlutterRenderTexture::UpdateOpacity(uint8_t opacity) +{ + if (!SupportOpacity()) { + return; + } + if (opacity_ != opacity) { + RenderNode::UpdateOpacity(opacity); + needDrawBackground_ = true; + auto displayChild = AceType::DynamicCast(GetFirstChild()); + if (displayChild) { + displayChild->UpdateOpacity(opacity); + } + } +} + +void FlutterRenderTexture::DumpTree(int32_t depth) +{ + auto children = GetChildren(); + + if (DumpLog::GetInstance().GetDumpFile() > 0) { + DumpLog::GetInstance().AddDesc("textureId:", textureId_); + DumpLog::GetInstance().AddDesc("drawSize:", "width = ", drawSize_.Width(), " height = ", drawSize_.Height()); + DumpLog::GetInstance().AddDesc("sourceSize:", "width = ", drawSize_.Width(), " height = ", drawSize_.Height()); + DumpLog::GetInstance().AddDesc("alignmentX:", alignmentX_); + DumpLog::GetInstance().AddDesc("alignmentY:", alignmentY_); + DumpLog::GetInstance().Print(depth, AceType::TypeName(this), children.size()); + } + + for (const auto& item : children) { + item->DumpTree(depth + 1); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/video/flutter_render_texture.h b/frameworks/core/components/video/flutter_render_texture.h new file mode 100644 index 00000000..9f1ce4fd --- /dev/null +++ b/frameworks/core/components/video/flutter_render_texture.h @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_VIDEO_FLUTTER_RENDER_TEXTURE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_VIDEO_FLUTTER_RENDER_TEXTURE_H + +#include "flutter/fml/memory/ref_counted.h" + +#include "core/components/common/properties/color.h" +#include "core/components/video/render_texture.h" +#include "core/pipeline/layers/clip_layer.h" +#include "core/pipeline/layers/picture_layer.h" +#include "core/pipeline/layers/texture_layer.h" + +namespace OHOS::Ace { + +class FlutterRenderTexture final : public RenderTexture { + DECLARE_ACE_TYPE(FlutterRenderTexture, RenderTexture); + +public: + FlutterRenderTexture() = default; + ~FlutterRenderTexture() override = default; + + void Paint(RenderContext& context, const Offset& offset) override; + RenderLayer GetRenderLayer() override; + void UpdateOpacity(uint8_t opacity) override; + void DumpTree(int32_t depth) override; + +private: + void PerformLayout() override; + + void AddTextureLayer(); + void AddBackgroundLayer(); + void DrawBackground(); + + RefPtr textureLayer_; + RefPtr layer_; + RefPtr backgroundLayer_; + bool needDrawBackground_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_VIDEO_FLUTTER_RENDER_TEXTURE_H diff --git a/frameworks/core/components/video/render_texture.cpp b/frameworks/core/components/video/render_texture.cpp new file mode 100644 index 00000000..4767133f --- /dev/null +++ b/frameworks/core/components/video/render_texture.cpp @@ -0,0 +1,155 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/video/render_texture.h" + +namespace OHOS::Ace { + +RenderTexture::RenderTexture() : RenderNode(true) {} + +void RenderTexture::Update(const RefPtr& component) +{ + const RefPtr texture = AceType::DynamicCast(component); + if (!texture) { + return; + } + + textureId_ = texture->GetTextureId(); + sourceSize_ = Size(static_cast(texture->GetSrcWidth()), static_cast(texture->GetSrcHeight())); + imageFit_ = texture->GetFit(); + + MarkNeedLayout(); +} + +void RenderTexture::SetHidden(bool hidden) +{ + RenderNode::SetHidden(hidden); + if (hiddenChangeEvent_) { + hiddenChangeEvent_(hidden); + } +} + +void RenderTexture::PerformLayout() +{ + if (!NeedLayout()) { + return; + } + double width = GetLayoutParam().GetMinSize().Width(); + double height = GetLayoutParam().GetMinSize().Height(); + for (const auto& item : GetChildren()) { + item->Layout(GetLayoutParam()); + width = std::max(width, item->GetLayoutSize().Width()); + height = std::max(height, item->GetLayoutSize().Height()); + } + + if (!GetLayoutParam().GetMaxSize().IsInfinite()) { + SetLayoutSize(GetLayoutParam().GetMaxSize()); + } else { + SetLayoutSize(Size(width, height)); + } + + switch (imageFit_) { + case ImageFit::CONTAIN: + CalculateFitContain(); + break; + case ImageFit::FILL: + CalculateFitFill(); + break; + case ImageFit::COVER: + CalculateFitCover(); + break; + case ImageFit::NONE: + CalculateFitNone(); + break; + case ImageFit::SCALEDOWN: + CalculateFitScaleDown(); + break; + default: + CalculateFitContain(); + break; + } + + SetNeedLayout(false); + if (textureSizeChangeEvent_) { + textureSizeChangeEvent_(textureId_, drawSize_.Width(), drawSize_.Height()); + } + if (textureOffsetChangeEvent_) { + textureOffsetChangeEvent_(textureId_, (int32_t)alignmentX_, (int32_t)alignmentY_); + } + MarkNeedRender(); +} + +void RenderTexture::CalculateFitContain() +{ + const Size& layoutSize = GetLayoutSize(); + double sourceRatio = sourceSize_.Width() / sourceSize_.Height(); + double layoutRatio = layoutSize.Width() / layoutSize.Height(); + + if (sourceRatio < layoutRatio) { + drawSize_ = Size(sourceRatio * layoutSize.Height(), layoutSize.Height()); + alignmentX_ = (layoutSize.Width() - drawSize_.Width()) / 2.0; + alignmentY_ = 0.0; + } else { + drawSize_ = Size(layoutSize.Width(), layoutSize.Width() / sourceRatio); + alignmentX_ = 0.0; + alignmentY_ = (layoutSize.Height() - drawSize_.Height()) / 2.0; + } +} + +void RenderTexture::CalculateFitCover() +{ + const Size& LayoutSize = GetLayoutSize(); + double sourceRatio = sourceSize_.Width() / sourceSize_.Height(); + double layoutRatio = LayoutSize.Width() / LayoutSize.Height(); + + if (sourceRatio < layoutRatio) { + drawSize_ = Size(LayoutSize.Width(), LayoutSize.Width() / sourceRatio); + alignmentX_ = 0.0; + alignmentY_ = (LayoutSize.Height() - drawSize_.Height()) / 2.0; + } else { + drawSize_ = Size(LayoutSize.Height() * sourceRatio, LayoutSize.Height()); + alignmentX_ = (LayoutSize.Width() - drawSize_.Width()) / 2.0; + alignmentY_ = 0.0; + } +} + +void RenderTexture::CalculateFitFill() +{ + drawSize_ = GetLayoutSize(); + alignmentY_ = 0.0; + alignmentX_ = 0.0; +} + +void RenderTexture::CalculateFitNone() +{ + const Size& LayoutSize = GetLayoutSize(); + + drawSize_ = sourceSize_; + alignmentX_ = (LayoutSize.Width() - drawSize_.Width()) / 2.0; + alignmentY_ = (LayoutSize.Height() - drawSize_.Height()) / 2.0; +} + +void RenderTexture::CalculateFitScaleDown() +{ + const Size& LayoutSize = GetLayoutSize(); + + if (LayoutSize.Width() > sourceSize_.Width()) { + CalculateFitNone(); + } else { + CalculateFitContain(); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/video/render_texture.h b/frameworks/core/components/video/render_texture.h new file mode 100644 index 00000000..93bf8aa9 --- /dev/null +++ b/frameworks/core/components/video/render_texture.h @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_VIDEO_RENDER_TEXTURE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_VIDEO_RENDER_TEXTURE_H + +#include "core/components/common/layout/constants.h" +#include "core/components/video/texture_component.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderTexture : public RenderNode { + DECLARE_ACE_TYPE(RenderTexture, RenderNode); + +public: + using HiddenChangeEvent = std::function; + using TextureSizeChangeEvent = std::function; + using TextureOffsetChangeEvent = std::function; + + ~RenderTexture() override = default; + + static RefPtr Create(); + + void Update(const RefPtr& component) override; + void PerformLayout() override; + void SetHidden(bool hidden) override; + + bool IsRepaintBoundary() const override + { + return true; + } + + void SetHiddenChangeEvent(HiddenChangeEvent&& hiddenChangeEvent) + { + hiddenChangeEvent_ = std::move(hiddenChangeEvent); + } + + void SetTextureSizeChange(TextureSizeChangeEvent&& textureSizeChangeEvent) + { + textureSizeChangeEvent_ = std::move(textureSizeChangeEvent); + } + + void SetTextureOffsetChange(TextureOffsetChangeEvent&& textureOffsetChangeEvent) + { + textureOffsetChangeEvent_ = std::move(textureOffsetChangeEvent); + } + + bool SupportOpacity() override + { + return true; + } + +protected: + RenderTexture(); + + int64_t textureId_ = INVALID_TEXTURE; + Size drawSize_; // size of draw area + Size sourceSize_; // size of source + ImageFit imageFit_ = ImageFit::CONTAIN; + double alignmentX_ = 0.0; + double alignmentY_ = 0.0; + +private: + void CalculateFitContain(); + void CalculateFitCover(); + void CalculateFitFill(); + void CalculateFitNone(); + void CalculateFitScaleDown(); + HiddenChangeEvent hiddenChangeEvent_; + TextureSizeChangeEvent textureSizeChangeEvent_; + TextureOffsetChangeEvent textureOffsetChangeEvent_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_VIDEO_RENDER_TEXTURE_H diff --git a/frameworks/core/components/video/resource/player.cpp b/frameworks/core/components/video/resource/player.cpp new file mode 100644 index 00000000..b1f8ad27 --- /dev/null +++ b/frameworks/core/components/video/resource/player.cpp @@ -0,0 +1,485 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/video/resource/player.h" + +#include +#include + +#include "base/log/log.h" + +namespace OHOS::Ace { + +const char PLAYER_PARAM_WIDTH[] = "width"; +const char PLAYER_PARAM_HEIGHT[] = "height"; +const char PLAYER_PARAM_DURATION[] = "duration"; +const char PLAYER_PARAM_CURRENTPOS[] = "currentpos"; +const char PLAYER_PARAM_ISPLAYING[] = "isplaying"; +const char PLAYER_PARAM_SRC[] = "src"; +const char PLAYER_PARAM_ISAUTOPLAY[] = "autoplay"; +const char PLAYER_PARAM_ISMUTE[] = "mute"; +const char PLAYER_PARAM_TEXTURE[] = "texture"; +const char PLAYER_PARAM_NEEDFRESHFORCE[] = "needRefreshForce"; + +const char PLAYER_METHOD_INIT[] = "init"; +const char PLAYER_METHOD_GETPOSITION[] = "getposition"; +const char PLAYER_METHOD_START[] = "start"; +const char PLAYER_METHOD_PAUSE[] = "pause"; +const char PLAYER_METHOD_SEEKTO[] = "seekto"; +const char PLAYER_METHOD_STOP[] = "stop"; +const char PLAYER_METHOD_SETVOLUME[] = "setvolume"; +const char PLAYER_METHOD_FULLSCREEN[] = "fullscreen"; + +const char PLAYER_EVENT_PREPARED[] = "prepared"; +const char PLAYER_EVENT_COMPLETION[] = "completion"; +const char PLAYER_EVENT_SEEKCOMPLETE[] = "seekcomplete"; +const char PLAYER_EVENT_ONPLAYSTATUS[] = "onplaystatus"; + +const char PLAYER_ERROR_CODE_CREATEFAIL[] = "error_video_000001"; +const char PLAYER_ERROR_MSG_CREATEFAIL[] = "Create player failed."; +const char PLAYER_ERROR_CODE_FILEINVALID[] = "error_video_000002"; +const char PLAYER_ERROR_MSG_FILEINVALID[] = "File invalid."; + +void Player::Create(const std::function& onCreate) +{ + scheduler_ = SchedulerBuilder::Build( + [weak = WeakClaim(this)](uint64_t timestamp) { + auto player = weak.Upgrade(); + if (player) { + player->OnTick(timestamp); + } + }, + context_); + auto context = context_.Upgrade(); + if (!context) { + LOGE("fail to get context to create player"); + return; + } + + auto platformTaskExecutor = SingleTaskExecutor::Make(context->GetTaskExecutor(), TaskExecutor::TaskType::PLATFORM); + + platformTaskExecutor.PostTask([weak = WeakClaim(this), onCreate] { + auto player = weak.Upgrade(); + if (player) { + player->CreatePlayer(onCreate); + } + }); +} + +void Player::CreatePlayer(const std::function& onCreate) +{ + auto context = context_.Upgrade(); + if (!context) { + return; + } + auto resRegister = context->GetPlatformResRegister(); + std::stringstream paramStream; + paramStream << PLAYER_PARAM_TEXTURE << PARAM_EQUALS << textureId_; + std::string param = paramStream.str(); + id_ = resRegister->CreateResource(type_, param); + if (id_ == INVALID_ID) { + if (onError_) { + onError_(PLAYER_ERROR_CODE_CREATEFAIL, PLAYER_ERROR_MSG_CREATEFAIL); + } + return; + } + hash_ = MakeResourceHash(); + resRegister->RegisterEvent( + MakeEventHash(PLAYER_EVENT_PREPARED), [weak = WeakClaim(this)](const std::string& param) { + auto player = weak.Upgrade(); + if (player) { + player->OnPrepared(param); + } + }); + resRegister->RegisterEvent( + MakeEventHash(PLAYER_EVENT_COMPLETION), [weak = WeakClaim(this)](const std::string& param) { + auto player = weak.Upgrade(); + if (player) { + player->OnCompletion(param); + } + }); + resRegister->RegisterEvent( + MakeEventHash(PLAYER_EVENT_SEEKCOMPLETE), [weak = WeakClaim(this)](const std::string& param) { + auto player = weak.Upgrade(); + if (player) { + player->OnSeekComplete(param); + } + }); + resRegister->RegisterEvent( + MakeEventHash(PLAYER_EVENT_ONPLAYSTATUS), [weak = WeakClaim(this)](const std::string& param) { + auto player = weak.Upgrade(); + if (player) { + player->OnPlayStatus(param); + } + }); + if (onCreate) { + onCreate(id_); + } + InitPlay(); +} + +void Player::InitPlay() +{ + std::stringstream paramStream; + paramStream << PLAYER_PARAM_SRC << PARAM_EQUALS << src_ << PARAM_AND << PLAYER_PARAM_ISMUTE << PARAM_EQUALS + << (isMute_ ? 1 : 0) << PARAM_AND << PLAYER_PARAM_ISAUTOPLAY << PARAM_EQUALS << (isAutoPlay_ ? 1 : 0); + + std::string param = paramStream.str(); + CallResRegisterMethod(MakeMethodHash(PLAYER_METHOD_INIT), param, [weak = WeakClaim(this)](std::string& result) { + auto player = weak.Upgrade(); + if (player) { + if (!player->IsResultSuccess(result)) { + player->OnError(PLAYER_ERROR_CODE_FILEINVALID, PLAYER_ERROR_MSG_FILEINVALID); + } + } + }); +} + +void Player::OnPrepared(const std::string& param) +{ + currentPos_ = 0; + width_ = GetIntParam(param, PLAYER_PARAM_WIDTH); + height_ = GetIntParam(param, PLAYER_PARAM_HEIGHT); + duration_ = GetIntParam(param, PLAYER_PARAM_DURATION) / 1000; + isPlaying_ = GetIntParam(param, PLAYER_PARAM_ISPLAYING) == 1; + isNeedFreshForce_ = GetIntParam(param, PLAYER_PARAM_NEEDFRESHFORCE) == 1; + isPrepared_ = true; + if (width_ == 0 || height_ == 0 || duration_ == 0) { + if (onError_) { + onError_(PLAYER_ERROR_CODE_FILEINVALID, PLAYER_ERROR_MSG_FILEINVALID); + } + return; + } + getCurrentPosMethod_ = MakeMethodHash(PLAYER_METHOD_GETPOSITION); + playMethod_ = MakeMethodHash(PLAYER_METHOD_START); + pauseMethod_ = MakeMethodHash(PLAYER_METHOD_PAUSE); + seekMethod_ = MakeMethodHash(PLAYER_METHOD_SEEKTO); + stopMethod_ = MakeMethodHash(PLAYER_METHOD_STOP); + setVolumeMethod_ = MakeMethodHash(PLAYER_METHOD_SETVOLUME); + fullscreenMethod_ = MakeMethodHash(PLAYER_METHOD_FULLSCREEN); + + if (isPlaying_) { + SetTickActive(true); + } + + for (const auto& listener : onPreparedListener_) { + listener(width_, height_, isPlaying_, duration_, currentPos_, true); + } +} + +void Player::OnCompletion(const std::string& param) +{ + isPlaying_ = false; + currentPos_ = duration_; + SetTickActive(isPlaying_); + for (const auto& listener : onCompletionListener_) { + listener(); + } +} + +void Player::OnSeekComplete(const std::string& param) +{ + currentPos_ = GetIntParam(param, PLAYER_PARAM_CURRENTPOS); + if (!onCurrentPosListener_.empty()) { + onCurrentPosListener_.back()(currentPos_); + } +} + +void Player::OnPlayStatus(const std::string& param) +{ + isPlaying_ = GetIntParam(param, PLAYER_PARAM_ISPLAYING) == 1; + for (const auto& listener : onPlayStatusListener_) { + listener(isPlaying_); + } +} + +void Player::SetTickActive(bool isActive) +{ + auto context = context_.Upgrade(); + if (!context) { + LOGE("fail to get context to set tick active"); + return; + } + + auto uiTaskExecutor = SingleTaskExecutor::Make(context->GetTaskExecutor(), TaskExecutor::TaskType::UI); + uiTaskExecutor.PostSyncTask([this, isActive] { + if (scheduler_) { + if (isActive) { + scheduler_->Start(); + } else { + scheduler_->Stop(); + } + } + }); +} + +void Player::OnTick(uint64_t timeStamp) +{ + timeStamp_ += timeStamp; + if (isNeedFreshForce_) { + auto context = context_.Upgrade(); + if (!context) { + LOGE("fail to get context"); + return; + } + context->DrawLastFrame(); + } + if (timeStamp_ > FREAUENCY_GET_CURRENT_TIME) { + GetCurrentTime(); + timeStamp_ -= FREAUENCY_GET_CURRENT_TIME; + } +} + +void Player::GetCurrentTime() +{ + CallResRegisterMethod(getCurrentPosMethod_, PARAM_NONE, [weak = WeakClaim(this)](std::string& result) { + auto player = weak.Upgrade(); + if (player) { + player->OnTimeGetted(result); + } + }); +} + +void Player::OnTimeGetted(const std::string& result) +{ + currentPos_ = GetIntParam(result, PLAYER_PARAM_CURRENTPOS); + if (!onCurrentPosListener_.empty()) { + onCurrentPosListener_.back()(currentPos_); + } +} + +void Player::Start() +{ + CallResRegisterMethod(playMethod_, PARAM_NONE, [weak = WeakClaim(this)](std::string& result) { + auto player = weak.Upgrade(); + if (player) { + player->OnStarted(); + } + }); +} + +void Player::OnStarted() +{ + isPlaying_ = true; + SetTickActive(isPlaying_); + + for (const auto& listener : onPlayStatusListener_) { + listener(isPlaying_); + } +} + +void Player::Pause() +{ + CallResRegisterMethod(pauseMethod_, PARAM_NONE, [weak = WeakClaim(this)](std::string& result) { + auto player = weak.Upgrade(); + if (player) { + player->OnPaused(); + } + }); +} + +void Player::OnPaused() +{ + isPlaying_ = false; + SetTickActive(isPlaying_); + + for (const auto& listener : onPlayStatusListener_) { + listener(isPlaying_); + } +} + +void Player::Stop() +{ + // The destructor will be executed at platform thread, so destroy scheduler at here. + if (scheduler_) { + scheduler_->Stop(); + scheduler_.Reset(); + } + + auto context = context_.Upgrade(); + if (!context) { + LOGE("fail to get context"); + return; + } + auto platformTaskExecutor = SingleTaskExecutor::Make(context->GetTaskExecutor(), TaskExecutor::TaskType::PLATFORM); + if (platformTaskExecutor.IsRunOnCurrentThread()) { + UnregisterEvent(); + } else { + platformTaskExecutor.PostTask([weak = WeakClaim(this)] { + auto player = weak.Upgrade(); + if (player) { + player->UnregisterEvent(); + } + }); + } +} + +void Player::UnregisterEvent() +{ + auto context = context_.Upgrade(); + if (!context) { + LOGE("fail to get context"); + return; + } + auto resRegister = context->GetPlatformResRegister(); + resRegister->UnregisterEvent(MakeEventHash(PLAYER_EVENT_PREPARED)); + resRegister->UnregisterEvent(MakeEventHash(PLAYER_EVENT_COMPLETION)); + resRegister->UnregisterEvent(MakeEventHash(PLAYER_EVENT_SEEKCOMPLETE)); + resRegister->UnregisterEvent(MakeEventHash(PLAYER_EVENT_ONPLAYSTATUS)); +} + +void Player::EnterFullScreen() +{ + CallResRegisterMethod(fullscreenMethod_, PARAM_NONE); +} + +void Player::SeekTo(uint32_t pos) +{ + std::stringstream paramStream; + paramStream << PARAM_VALUE << PARAM_EQUALS << pos; + + std::string param = paramStream.str(); + CallResRegisterMethod(seekMethod_, param); +} + +void Player::SetVolume(float volume) +{ + std::stringstream paramStream; + paramStream << PARAM_VALUE << PARAM_EQUALS << volume; + + std::string param = paramStream.str(); + CallResRegisterMethod(setVolumeMethod_, param); +} + +void Player::AddPreparedListener(PreparedListener&& listener) +{ + auto context = context_.Upgrade(); + if (!context) { + LOGE("fail to get context"); + return; + } + + auto platformTaskExecutor = SingleTaskExecutor::Make(context->GetTaskExecutor(), TaskExecutor::TaskType::PLATFORM); + platformTaskExecutor.PostTask([weak = WeakClaim(this), listener = std::move(listener)]() mutable { + auto player = weak.Upgrade(); + if (player) { + player->OnAddPreparedListener(std::move(listener)); + } + }); +} + +void Player::OnAddPreparedListener(PreparedListener&& listener) +{ + onPreparedListener_.push_back(std::move(listener)); + if (isPrepared_) { + onPreparedListener_.back()(width_, height_, isPlaying_, duration_, currentPos_, false); + } +} + +void Player::AddPlayStatusListener(PlayStatusListener&& listener) +{ + auto context = context_.Upgrade(); + if (!context) { + LOGE("fail to get context"); + return; + } + + auto platformTaskExecutor = SingleTaskExecutor::Make(context->GetTaskExecutor(), TaskExecutor::TaskType::PLATFORM); + platformTaskExecutor.PostTask([weak = WeakClaim(this), listener = std::move(listener)]() mutable { + auto player = weak.Upgrade(); + if (player) { + player->OnAddPlayStatusListener(std::move(listener)); + } + }); +} + +void Player::OnAddPlayStatusListener(PlayStatusListener&& listener) +{ + onPlayStatusListener_.push_back(std::move(listener)); +} + +void Player::AddCurrentPosListener(CurrentPosListener&& listener) +{ + auto context = context_.Upgrade(); + if (!context) { + LOGE("fail to get context"); + return; + } + + auto platformTaskExecutor = SingleTaskExecutor::Make(context->GetTaskExecutor(), TaskExecutor::TaskType::PLATFORM); + platformTaskExecutor.PostTask([weak = WeakClaim(this), listener = std::move(listener)]() mutable { + auto player = weak.Upgrade(); + if (player) { + player->OnAddCurrentPosListener(std::move(listener)); + } + }); +} + +void Player::OnAddCurrentPosListener(CurrentPosListener&& listener) +{ + onCurrentPosListener_.push_back(std::move(listener)); +} + +void Player::AddCompletionListener(CompletionListener&& listener) +{ + auto context = context_.Upgrade(); + if (!context) { + LOGE("fail to get context"); + return; + } + + auto platformTaskExecutor = SingleTaskExecutor::Make(context->GetTaskExecutor(), TaskExecutor::TaskType::PLATFORM); + platformTaskExecutor.PostTask([weak = WeakClaim(this), listener = std::move(listener)]() mutable { + auto player = weak.Upgrade(); + if (player) { + player->OnAddCompletionListener(std::move(listener)); + } + }); +} + +void Player::OnAddCompletionListener(CompletionListener&& listener) +{ + onCompletionListener_.push_back(std::move(listener)); +} + +void Player::PopListener() +{ + auto context = context_.Upgrade(); + if (!context) { + LOGE("fail to get context"); + return; + } + + auto platformTaskExecutor = SingleTaskExecutor::Make(context->GetTaskExecutor(), TaskExecutor::TaskType::PLATFORM); + platformTaskExecutor.PostTask([weak = WeakClaim(this)] { + auto player = weak.Upgrade(); + if (player) { + player->OnPopListener(); + } + }); +} + +void Player::OnPopListener() +{ + onPreparedListener_.pop_back(); + onPlayStatusListener_.pop_back(); + onCurrentPosListener_.pop_back(); + onCompletionListener_.pop_back(); + if (!onCurrentPosListener_.empty()) { + onCurrentPosListener_.back()(currentPos_); + } +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/video/resource/player.h b/frameworks/core/components/video/resource/player.h new file mode 100644 index 00000000..93b7ba01 --- /dev/null +++ b/frameworks/core/components/video/resource/player.h @@ -0,0 +1,148 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_VIDEO_RESOURCE_PLAYER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_VIDEO_RESOURCE_PLAYER_H + +#include + +#include "core/animation/scheduler.h" +#include "core/components/common/layout/constants.h" +#include "core/components/video/resource/resource.h" +#include "core/components/video/resource/texture.h" + +namespace OHOS::Ace { + +constexpr uint32_t FREAUENCY_GET_CURRENT_TIME = 250; // Millisecond + +class Player : public Resource { + DECLARE_ACE_TYPE(Player, Resource); + +public: + using PreparedListener = std::function; + using PlayStatusListener = std::function; + using CurrentPosListener = std::function; + using CompletionListener = std::function; + + Player(int64_t textureId, const std::string& src, const WeakPtr& context, ErrorCallback&& onError) + : Resource("video", context, std::move(onError)), textureId_(textureId), src_(src) + {} + ~Player() override = default; + + void Create(const std::function& onCreate); + void CreatePlayer(const std::function& onCreate); + + uint32_t GetWidth() const + { + return width_; + } + + uint32_t GetHeight() const + { + return height_; + } + + uint32_t GetDuration() const + { + return duration_; + } + + uint32_t GetCurrent() const + { + return currentPos_; + } + + bool IsPlaying() const + { + return isPlaying_; + } + + void SetMute(bool isMute) + { + isMute_ = isMute; + } + + void SetAutoPlay(bool isAutoPlay) + { + isAutoPlay_ = isAutoPlay; + } + + void AddPreparedListener(PreparedListener&& listener); + void AddPlayStatusListener(PlayStatusListener&& listener); + void AddCurrentPosListener(CurrentPosListener&& listener); + void AddCompletionListener(CompletionListener&& listener); + + void PopListener(); + void OnPopListener(); + void UnregisterEvent(); + + // The following public functions should be called in UI thread. + void Start(); + void Pause(); + void Stop(); + void SeekTo(uint32_t pos); + void SetVolume(float volume); + void EnterFullScreen(); + +private: + void OnAddPreparedListener(PreparedListener&& listener); + void OnAddPlayStatusListener(PlayStatusListener&& listener); + void OnAddCurrentPosListener(CurrentPosListener&& listener); + void OnAddCompletionListener(CompletionListener&& listener); + + void OnStarted(); + void OnPaused(); + void OnTimeGetted(const std::string& result); + + void InitPlay(); + void OnPrepared(const std::string& param); + void OnCompletion(const std::string& param); + void OnSeekComplete(const std::string& param); + void OnPlayStatus(const std::string& param); + void GetCurrentTime(); + void OnTick(uint64_t timeStamp); + void SetTickActive(bool isActive); + + int64_t textureId_ = INVALID_ID; + std::string src_; + uint32_t duration_ = 0; + uint32_t width_ = 0; + uint32_t height_ = 0; + uint32_t currentPos_ = 0; + bool isPlaying_ = false; + bool isMute_ = false; + bool isAutoPlay_ = false; + bool isPrepared_ = false; + bool isNeedFreshForce_ = false; + Method getCurrentPosMethod_; + Method playMethod_; + Method pauseMethod_; + Method stopMethod_; + Method seekMethod_; + Method setVolumeMethod_; + Method fullscreenMethod_; + + std::list onPreparedListener_; + std::list onPlayStatusListener_; + std::list onCurrentPosListener_; + std::list onCompletionListener_; + + RefPtr scheduler_; + uint64_t timeStamp_ = 0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_VIDEO_RESOURCE_PLAYER_H diff --git a/frameworks/core/components/video/resource/resource.cpp b/frameworks/core/components/video/resource/resource.cpp new file mode 100644 index 00000000..a80d5bf8 --- /dev/null +++ b/frameworks/core/components/video/resource/resource.cpp @@ -0,0 +1,168 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/video/resource/resource.h" + +#include + +#include "base/log/log.h" + +namespace OHOS::Ace { + +const char PARAM_NONE[] = ""; +const char PARAM_AND[] = "#HWJS-&-#"; +const char PARAM_VALUE[] = "value"; +const char PARAM_EQUALS[] = "#HWJS-=-#"; +const char PARAM_BEGIN[] = "#HWJS-?-#"; +const char METHOD[] = "method"; +const char EVENT[] = "event"; +const char RESULT_FAIL[] = "fail"; + +void Resource::Release(const std::function& onRelease) +{ + if (id_ == INVALID_ID) { + return; + } + + auto context = context_.Upgrade(); + if (!context) { + LOGE("fail to release resource due to context is null"); + return; + } + + auto resRegister = context->GetPlatformResRegister(); + auto platformTaskExecutor = SingleTaskExecutor::Make(context->GetTaskExecutor(), TaskExecutor::TaskType::PLATFORM); + auto releaseTask = [this, resRegister, onRelease] { + bool ret = resRegister->ReleaseResource(hash_); + if (ret) { + id_ = INVALID_ID; + hash_.clear(); + } + + if (onRelease) { + onRelease(ret); + } + }; + if (platformTaskExecutor.IsRunOnCurrentThread()) { + releaseTask(); + } else { + platformTaskExecutor.PostTask(releaseTask); + } +} + +double Resource::GetDoubleParam(const std::string& param, const std::string& name) const +{ + size_t len = name.length(); + size_t pos = param.find(name); + double result = 0.0; + + if (pos != std::string::npos) { + std::stringstream ss; + + ss << param.substr(pos + 1 + len); + ss >> result; + } + + return result; +} + +int32_t Resource::GetIntParam(const std::string& param, const std::string& name) const +{ + size_t len = name.length(); + size_t pos = param.find(name); + int32_t result = 0; + + if (pos != std::string::npos) { + std::stringstream ss; + + ss << param.substr(pos + 1 + len); + ss >> result; + } + + return result; +} + +std::string Resource::MakeResourceHash() const +{ + std::stringstream hashCode; + hashCode << type_ << "@" << id_; + + return hashCode.str(); +} + +std::string Resource::MakeEventHash(const std::string& event) const +{ + std::string eventHash = hash_; + + eventHash += std::string(EVENT); + eventHash += std::string(PARAM_EQUALS); + eventHash += event; + eventHash += std::string(PARAM_BEGIN); + + return eventHash; +} + +std::string Resource::MakeMethodHash(const std::string& method) const +{ + std::string methodHash = hash_; + + methodHash += std::string(METHOD); + methodHash += std::string(PARAM_EQUALS); + methodHash += method; + methodHash += std::string(PARAM_BEGIN); + + return methodHash; +} + +bool Resource::IsResultSuccess(const std::string& result) const +{ + size_t pos = result.find(RESULT_FAIL); + + return pos != 0; +} + +void Resource::OnError(const std::string& errorCode, const std::string& errorMsg) +{ + if (onError_) { + onError_(errorCode, errorMsg); + } +} + +void Resource::CallResRegisterMethod( + const std::string& method, const std::string& param, const std::function& callback) +{ + if (method.empty()) { + return; + } + + auto context = context_.Upgrade(); + if (!context) { + LOGE("fail to get context to call res register method"); + return; + } + + auto resRegister = context->GetPlatformResRegister(); + auto platformTaskExecutor = SingleTaskExecutor::Make(context->GetTaskExecutor(), TaskExecutor::TaskType::PLATFORM); + + platformTaskExecutor.PostTask([method, param, resRegister, callback] { + std::string result; + resRegister->OnMethodCall(method, param, result); + if (callback) { + callback(result); + } + }); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/video/resource/resource.h b/frameworks/core/components/video/resource/resource.h new file mode 100644 index 00000000..97f11eb5 --- /dev/null +++ b/frameworks/core/components/video/resource/resource.h @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_VIDEO_RESOURCE_RESOURCE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_VIDEO_RESOURCE_RESOURCE_H + +#include + +#include "base/memory/ace_type.h" +#include "core/pipeline/pipeline_context.h" + +namespace OHOS::Ace { + +constexpr int64_t INVALID_ID = -1; + +extern const char PARAM_NONE[]; +extern const char PARAM_AND[]; +extern const char PARAM_VALUE[]; +extern const char PARAM_EQUALS[]; +extern const char PARAM_BEGIN[]; +extern const char METHOD[]; +extern const char EVENT[]; +extern const char RESULT_FAIL[]; + +class Resource : public virtual AceType { + DECLARE_ACE_TYPE(Resource, AceType); + +public: + using ErrorCallback = std::function; + using Method = std::string; + + Resource(const std::string& type, const WeakPtr& context, ErrorCallback&& onError) + : type_(type), context_(context), onError_(std::move(onError)) + {} + virtual ~Resource() = default; + + void Release(const std::function& onRelease = nullptr); + + void CallResRegisterMethod( + const Method& method, const std::string& param, const std::function& callback = nullptr); + + int64_t GetId() const + { + return id_; + } + + const std::string& GetHashCode() const + { + return hash_; + } + +protected: + double GetDoubleParam(const std::string& param, const std::string& name) const; + int32_t GetIntParam(const std::string& param, const std::string& name) const; + std::string MakeResourceHash() const; + std::string MakeEventHash(const std::string& event) const; + std::string MakeMethodHash(const std::string& method) const; + bool IsResultSuccess(const std::string& result) const; + + void OnError(const std::string& errorCode, const std::string& errorMsg); + + int64_t id_ = INVALID_ID; + std::string hash_; + std::string type_; + WeakPtr context_; + ErrorCallback onError_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_VIDEO_RESOURCE_RESOURCE_H diff --git a/frameworks/core/components/video/resource/texture.cpp b/frameworks/core/components/video/resource/texture.cpp new file mode 100644 index 00000000..e0567d74 --- /dev/null +++ b/frameworks/core/components/video/resource/texture.cpp @@ -0,0 +1,110 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/video/resource/texture.h" + +#include + +#include "base/log/log.h" + +namespace OHOS::Ace { + +const char TEXTURE_ERRORCODE_CREATEFAIL[] = "error_video_000001"; +const char TEXTURE_ERRORMSG_CREATEFAIL[] = "Unable to initialize video player."; + +const char TEXTURE_METHOD_REFRESH[] = "markTextureFrameAvailable"; + +const char SET_TEXTURE_SIZE[] = "setTextureSize"; +const char TEXTURE_HEIGHT[] = "textureHeight"; +const char TEXTURE_ID[] = "textureId"; +const char TEXTURE_WIDTH[] = "textureWidth"; + +Texture::~Texture() +{ + auto context = context_.Upgrade(); + if (!context) { + LOGE("fail to create texture due to context is null"); + return; + } + + auto resRegister = context->GetPlatformResRegister(); + auto platformTaskExecutor = SingleTaskExecutor::Make(context->GetTaskExecutor(), TaskExecutor::TaskType::PLATFORM); + if (platformTaskExecutor.IsRunOnCurrentThread()) { + resRegister->UnregisterEvent(MakeEventHash(TEXTURE_METHOD_REFRESH)); + } else { + platformTaskExecutor.PostTask([eventHash = MakeEventHash(TEXTURE_METHOD_REFRESH), resRegister] { + resRegister->UnregisterEvent(eventHash); + }); + } +} + +void Texture::Create(const std::function& onCreate) +{ + auto context = context_.Upgrade(); + if (!context) { + LOGE("fail to create texture due to context is null"); + return; + } + + auto platformTaskExecutor = SingleTaskExecutor::Make(context->GetTaskExecutor(), TaskExecutor::TaskType::PLATFORM); + + platformTaskExecutor.PostTask([weak = WeakClaim(this), onCreate] { + auto texture = weak.Upgrade(); + if (texture) { + texture->CreateTexture(onCreate); + } + }); +} + +void Texture::CreateTexture(const std::function& onCreate) +{ + auto context = context_.Upgrade(); + auto resRegister = context->GetPlatformResRegister(); + id_ = resRegister->CreateResource(type_, PARAM_NONE); + if (id_ == INVALID_ID) { + if (onError_) { + onError_(TEXTURE_ERRORCODE_CREATEFAIL, TEXTURE_ERRORMSG_CREATEFAIL); + } + return; + } + hash_ = MakeResourceHash(); + resRegister->RegisterEvent( + MakeEventHash(TEXTURE_METHOD_REFRESH), [weak = WeakClaim(this)](const std::string& param) { + auto texture = weak.Upgrade(); + if (texture) { + texture->OnRefresh(param); + } + }); + + if (onCreate) { + onCreate(id_); + } +} + +void Texture::OnRefresh(const std::string& param) +{ + onRefreshListener_(); +} + +void Texture::OnSize(int64_t textureId, int32_t textureWidth, int32_t textureHeight) +{ + std::stringstream paramStream; + paramStream << TEXTURE_ID << PARAM_EQUALS << textureId << PARAM_AND << TEXTURE_WIDTH << PARAM_EQUALS << textureWidth + << PARAM_AND << TEXTURE_HEIGHT << PARAM_EQUALS << textureHeight; + std::string param = paramStream.str(); + CallResRegisterMethod(MakeMethodHash(SET_TEXTURE_SIZE), param); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/video/resource/texture.h b/frameworks/core/components/video/resource/texture.h new file mode 100644 index 00000000..3e5cc2e9 --- /dev/null +++ b/frameworks/core/components/video/resource/texture.h @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_VIDEO_RESOURCE_TEXTURE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_VIDEO_RESOURCE_TEXTURE_H + +#include "core/common/platform_res_register.h" +#include "core/components/video/resource/resource.h" + +namespace OHOS::Ace { + +class Texture : public Resource { + DECLARE_ACE_TYPE(Texture, Resource); +public: + using RefreshListener = std::function; + + Texture(const WeakPtr& context, ErrorCallback&& onError) + : Resource("texture", context, std::move(onError)) {} + ~Texture() override; + + void Create(const std::function& onCreate); + void CreateTexture(const std::function& onCreate); + void OnSize(int64_t textureId, int32_t textureWidth, int32_t textureHeight); + + void SetRefreshListener(RefreshListener&& listener) + { + onRefreshListener_ = std::move(listener); + } + +private: + void OnRefresh(const std::string& param); + RefreshListener onRefreshListener_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_VIDEO_RESOURCE_TEXTURE_H diff --git a/frameworks/core/components/video/texture_component.cpp b/frameworks/core/components/video/texture_component.cpp new file mode 100644 index 00000000..6960e9c3 --- /dev/null +++ b/frameworks/core/components/video/texture_component.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/video/texture_component.h" + +#include "core/components/video/render_texture.h" +#include "core/components/video/texture_element.h" + +namespace OHOS::Ace { + +RefPtr TextureComponent::CreateRenderNode() +{ + return RenderTexture::Create(); +} + +RefPtr TextureComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/video/texture_component.h b/frameworks/core/components/video/texture_component.h new file mode 100644 index 00000000..58e59765 --- /dev/null +++ b/frameworks/core/components/video/texture_component.h @@ -0,0 +1,102 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_VIDEO_TEXTURE_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_VIDEO_TEXTURE_COMPONENT_H + +#include + +#include "base/utils/utils.h" +#include "core/components/common/layout/constants.h" +#include "core/pipeline/base/element.h" +#include "core/pipeline/base/render_component.h" + +namespace OHOS::Ace { + +inline constexpr int64_t INVALID_TEXTURE = -1; + +// A component can show Texture. +class TextureComponent : public RenderComponent { + DECLARE_ACE_TYPE(TextureComponent, RenderComponent); + +public: + TextureComponent() = default; + ~TextureComponent() override = default; + + RefPtr CreateRenderNode() override; + RefPtr CreateElement() override; + + int64_t GetTextureId() const + { + return textureId_; + } + + void SetTextureId(int64_t textureId) + { + textureId_ = textureId; + } + + uint32_t GetSrcWidth() const + { + return srcWidth_; + } + + uint32_t GetSrcHeight() const + { + return srcHeight_; + } + + void SetSrcWidth(uint32_t width) + { + srcWidth_ = width; + } + + void SetSrcHeight(uint32_t height) + { + srcHeight_ = height; + } + + void SetFit(ImageFit fit) + { + imageFit_ = fit; + } + + ImageFit GetFit() const + { + return imageFit_; + } + + RefPtr GetChild() const + { + return child_; + } + + void SetChild(const RefPtr& child) + { + child_ = child; + } + +private: + int64_t textureId_ = INVALID_TEXTURE; + uint32_t srcWidth_ = 0; + uint32_t srcHeight_ = 0; + ImageFit imageFit_ { ImageFit::CONTAIN }; + + RefPtr child_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_VIDEO_TEXTURE_COMPONENT_H diff --git a/frameworks/core/components/video/texture_element.h b/frameworks/core/components/video/texture_element.h new file mode 100644 index 00000000..320893ef --- /dev/null +++ b/frameworks/core/components/video/texture_element.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_VIDEO_TEXTURE_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_VIDEO_TEXTURE_ELEMENT_H + +#include "core/components/text/text_component.h" +#include "core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +class TextureElement : public RenderElement { + DECLARE_ACE_TYPE(TextureElement, RenderElement); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_VIDEO_TEXTURE_ELEMENT_H diff --git a/frameworks/core/components/video/video_component.cpp b/frameworks/core/components/video/video_component.cpp new file mode 100644 index 00000000..653a247f --- /dev/null +++ b/frameworks/core/components/video/video_component.cpp @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/video/video_component.h" + +#include "base/log/log.h" +#include "core/components/video/render_texture.h" +#include "core/components/video/video_element.h" + +namespace OHOS::Ace { + +RefPtr VideoComponent::CreateRenderNode() +{ + return RenderTexture::Create(); +} + +RefPtr VideoComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/video/video_component.h b/frameworks/core/components/video/video_component.h new file mode 100644 index 00000000..9f8b7fc7 --- /dev/null +++ b/frameworks/core/components/video/video_component.h @@ -0,0 +1,337 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_VIDEO_VIDEO_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_VIDEO_VIDEO_COMPONENT_H + +#include + +#include "base/utils/utils.h" +#include "core/components/video/resource/player.h" +#include "core/components/video/resource/texture.h" +#include "core/components/video/texture_component.h" +#include "core/event/ace_event_helper.h" +#include "core/pipeline/base/element.h" + +namespace OHOS::Ace { + +class VideoController : public virtual AceType { + DECLARE_ACE_TYPE(VideoController, AceType); + +public: + using StartImpl = std::function; + using PauseImpl = std::function; + using SeekToImpl = std::function; + using RequestFullscreenImpl = std::function; + using ExitFullscreenImpl = std::function; + + void Start() + { + if (startImpl_) { + startImpl_(); + } + } + + void Pause() + { + if (pauseImpl_) { + pauseImpl_(); + } + } + + void SeekTo(uint32_t pos) + { + if (seekToImpl_) { + seekToImpl_(pos); + } + } + + void RequestFullscreen(bool isPortrait) + { + if (requestFullscreenImpl_) { + requestFullscreenImpl_(isPortrait); + } + } + + void ExitFullscreen(bool isSync) + { + if (exitFullscreenImpl_) { + exitFullscreenImpl_(isSync); + } + } + + void SetStartImpl(StartImpl&& startImpl) + { + startImpl_ = std::move(startImpl); + } + + void SetPausetImpl(PauseImpl&& pauseImpl) + { + pauseImpl_ = std::move(pauseImpl); + } + + void SetSeekToImpl(SeekToImpl&& seekToImpl) + { + seekToImpl_ = std::move(seekToImpl); + } + + void SetRequestFullscreenImpl(RequestFullscreenImpl&& requestFullscreenImpl) + { + requestFullscreenImpl_ = std::move(requestFullscreenImpl); + } + + void SetExitFullscreenImpl(ExitFullscreenImpl&& exitFullscreenImpl) + { + exitFullscreenImpl_ = std::move(exitFullscreenImpl); + } + +private: + StartImpl startImpl_; + PauseImpl pauseImpl_; + SeekToImpl seekToImpl_; + RequestFullscreenImpl requestFullscreenImpl_; + ExitFullscreenImpl exitFullscreenImpl_; +}; + +// A component can show Video. +class VideoComponent : public TextureComponent { + DECLARE_ACE_TYPE(VideoComponent, TextureComponent); + +public: + using FullscreenEvent = + std::function(bool, const WeakPtr&, const WeakPtr&)>; + + explicit VideoComponent() + { + videoController_ = AceType::MakeRefPtr(); + }; + + ~VideoComponent() override = default; + + RefPtr CreateRenderNode() override; + RefPtr CreateElement() override; + + const std::string& GetSrc() const + { + return src_; + } + + void SetSrc(const std::string& src) + { + src_ = src; + } + + const std::string& GetPoster() const + { + return poster_; + } + + void SetPoster(const std::string& poster) + { + poster_ = poster; + } + + bool NeedControls() const + { + return needControls_; + } + + void SetNeedControls(bool needControls) + { + needControls_ = needControls; + } + + bool IsMute() const + { + return isMute_; + } + + void SetMute(bool mute) + { + isMute_ = mute; + } + + bool IsAutoPlay() const + { + return isAutoPlay_; + } + + void SetAutoPlay(bool isAutoPlay) + { + isAutoPlay_ = isAutoPlay; + } + + const EventMarker& GetPreparedEventId() const + { + return preparedEventId_; + } + + void SetPreparedEventId(const EventMarker& eventId) + { + preparedEventId_ = eventId; + } + + const EventMarker& GetStartEventId() const + { + return startEventId_; + } + + void SetStartEventId(const EventMarker& eventId) + { + startEventId_ = eventId; + } + + const EventMarker& GetPauseEventId() const + { + return pauseEventId_; + } + + void SetPauseEventId(const EventMarker& eventId) + { + pauseEventId_ = eventId; + } + + const EventMarker& GetFinishEventId() const + { + return finishEventId_; + } + + void SetFinishEventId(const EventMarker& eventId) + { + finishEventId_ = eventId; + } + + const EventMarker& GetErrorEventId() const + { + return errorEventId_; + } + + void SetErrorEventId(const EventMarker& eventId) + { + errorEventId_ = eventId; + } + + const EventMarker& GetSeekingEventId() const + { + return seekingEventId_; + } + + void SetSeekingEventId(const EventMarker& eventId) + { + seekingEventId_ = eventId; + } + + const EventMarker& GetSeekedEventId() const + { + return seekedEventId_; + } + + void SetSeekedEventId(const EventMarker& eventId) + { + seekedEventId_ = eventId; + } + + const EventMarker& GetTimeUpdateEventId() const + { + return timeUpdateEventId_; + } + + void SetTimeUpdateEventId(const EventMarker& eventId) + { + timeUpdateEventId_ = eventId; + } + + const EventMarker& GetFullscreenChangeEventId() const + { + return fullscreenChangeEventId_; + } + + void SetFullscreenChangeEventId(const EventMarker& eventId) + { + fullscreenChangeEventId_ = eventId; + } + + RefPtr GetVideoController() const + { + return videoController_; + } + + void SetFullscreenEvent(FullscreenEvent&& fullscreenEvent) + { + fullscreenEvent_ = std::move(fullscreenEvent); + } + + const FullscreenEvent& GetFullscreenEvent() const + { + return fullscreenEvent_; + } + + bool IsFullscreen() const + { + return isFullscreen_; + } + + void SetFullscreen(bool isFullscreen) + { + isFullscreen_ = isFullscreen; + } + + void SetPlayer(const WeakPtr& player) + { + player_ = player; + } + + WeakPtr GetPlayer() const + { + return player_; + } + + void SetTexture(const WeakPtr& texture) + { + texture_ = texture; + } + + WeakPtr GetTexture() const + { + return texture_; + } + +private: + std::string src_; + std::string poster_; + bool isAutoPlay_ = false; + bool needControls_ = true; + bool isMute_ = false; + bool isFullscreen_ = false; + + EventMarker preparedEventId_; + EventMarker startEventId_; + EventMarker pauseEventId_; + EventMarker finishEventId_; + EventMarker errorEventId_; + EventMarker seekingEventId_; + EventMarker seekedEventId_; + EventMarker timeUpdateEventId_; + EventMarker fullscreenChangeEventId_; + FullscreenEvent fullscreenEvent_; + + RefPtr videoController_; + WeakPtr player_; + WeakPtr texture_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_VIDEO_VIDEO_COMPONENT_H diff --git a/frameworks/core/components/video/video_element.cpp b/frameworks/core/components/video/video_element.cpp new file mode 100644 index 00000000..e7845ff7 --- /dev/null +++ b/frameworks/core/components/video/video_element.cpp @@ -0,0 +1,1193 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/video/video_element.h" + +#include +#include +#include + +#include "base/i18n/localization.h" +#include "base/json/json_util.h" +#include "base/log/dump_log.h" +#include "base/log/log.h" +#include "base/resource/internal_resource.h" +#include "base/utils/utils.h" +#include "core/components/align/align_component.h" +#include "core/components/box/box_component.h" +#include "core/components/button/button_component.h" +#include "core/components/flex/flex_component.h" +#include "core/components/flex/flex_item_component.h" +#include "core/components/gesture_listener/gesture_listener_component.h" +#include "core/components/image/image_component.h" +#include "core/components/padding/padding_component.h" +#include "core/components/slider/slider_component.h" +#include "core/components/stage/stage_element.h" +#include "core/components/text/text_component.h" +#include "core/components/theme/theme_manager.h" +#include "core/components/video/render_texture.h" +#include "core/event/ace_event_helper.h" +#include "core/event/back_end_event_manager.h" +#include "core/pipeline/base/composed_component.h" +#include "core/pipeline/pipeline_context.h" + +namespace OHOS::Ace { +namespace { + +const char* PLAY_LABEL = "play"; +const char* PAUSE_LABEL = "pause"; +const char* FULLSCREEN_LABEL = "fullscreen"; +const char* EXIT_FULLSCREEN_LABEL = "exitFullscreen"; + +} // namespace + +VideoElement::~VideoElement() +{ + if (!startBtnClickId_.IsEmpty()) { + BackEndEventManager::GetInstance().RemoveBackEndEvent(startBtnClickId_); + } + + if (!sliderMovedCallbackId_.IsEmpty()) { + BackEndEventManager::GetInstance().RemoveBackEndEvent(sliderMovedCallbackId_); + } + + if (!sliderMovingCallbackId_.IsEmpty()) { + BackEndEventManager::GetInstance().RemoveBackEndEvent(sliderMovingCallbackId_); + } + + if (!fullscreenBtnClickId_.IsEmpty()) { + BackEndEventManager::GetInstance().RemoveBackEndEvent(fullscreenBtnClickId_); + } + + if (!shieldId_.IsEmpty()) { + BackEndEventManager::GetInstance().RemoveBackEndEvent(startBtnClickId_); + } + + if (!isExternalResource_) { + if (isFullScreen_) { + ExitFullScreen(); + } + UnSubscribeMultiModal(); + } else { + if (player_) { + player_->PopListener(); + } + } + ReleasePlatformResource(); +} + +void VideoElement::PerformBuild() +{ + RefPtr videoComponent = AceType::DynamicCast(component_); + + if (videoComponent == nullptr) { + return; + } + const auto& child = children_.empty() ? nullptr : children_.front(); + UpdateChild(child, videoComponent->GetChild()); +} + +void VideoElement::InitStatus(const RefPtr& videoComponent) +{ + imageFit_ = videoComponent->GetFit(); + needControls_ = videoComponent->NeedControls(); + isAutoPlay_ = videoComponent->IsAutoPlay(); + isMute_ = videoComponent->IsMute(); + src_ = videoComponent->GetSrc(); + poster_ = videoComponent->GetPoster(); + isFullScreen_ = videoComponent->IsFullscreen(); + + if (!videoComponent->GetPlayer().Invalid() && !videoComponent->GetTexture().Invalid()) { + player_ = videoComponent->GetPlayer().Upgrade(); + texture_ = videoComponent->GetTexture().Upgrade(); + + if (player_ && texture_) { + isExternalResource_ = true; + videoComponent->SetPlayer(nullptr); + videoComponent->SetTexture(nullptr); + InitListener(); + } + } +} + +void VideoElement::ResetStatus() +{ + needControls_ = true; + isAutoPlay_ = false; + isMute_ = false; + duration_ = 0; + currentPos_ = 0; + isPlaying_ = false; + isReady_ = false; + isInitialState_ = true; + isError_ = false; + videoWidth_ = 0.0; + videoHeight_ = 0.0; + durationText_ = Localization::GetInstance()->FormatDuration(0); + currentPosText_ = Localization::GetInstance()->FormatDuration(0); +} + +void VideoElement::Prepare(const WeakPtr& parent) +{ + auto themeManager = GetThemeManager(); + if (!themeManager) { + return; + } + auto videoComponent = AceType::DynamicCast(component_); + theme_ = themeManager->GetTheme(); + sliderTheme_ = themeManager->GetTheme(); + if (videoComponent) { + textDirection_ = videoComponent->GetTextDirection(); + + ResetStatus(); + InitStatus(videoComponent); + InitEvent(videoComponent); + SetRespondChildEvent(); + if (!isExternalResource_) { + SetMethodCall(videoComponent); + CreatePlatformResource(); + PrepareMultiModalEvent(); + SubscribeMultiModal(); + } + videoComponent->SetChild(CreateChild()); + fullscreenEvent_ = videoComponent->GetFullscreenEvent(); + } + + RenderElement::Prepare(parent); + if (renderNode_) { + auto renderTexture = AceType::DynamicCast(renderNode_); + if (renderTexture) { + renderTexture->SetHiddenChangeEvent([weak = WeakClaim(this)](bool hidden) { + auto videoElement = weak.Upgrade(); + if (videoElement) { + videoElement->HiddenChange(hidden); + } + }); + renderTexture->SetTextureSizeChange( + [weak = WeakClaim(this)](int64_t textureId, int32_t textureWidth, int32_t textureHeight) { + auto videoElement = weak.Upgrade(); + if (videoElement) { + videoElement->OnTextureSize(textureId, textureWidth, textureHeight); + } + }); + } + } + isElementPrepared_ = true; +} + +void VideoElement::OnTextureSize(int64_t textureId, int32_t textureWidth, int32_t textureHeight) +{ + if (texture_) { + texture_->OnSize(textureId, textureWidth, textureHeight); + } +} + +void VideoElement::HiddenChange(bool hidden) +{ + if (isPlaying_ && hidden && player_) { + pastPlayingStatus_ = isPlaying_; + Pause(); + return; + } + + if (!hidden && pastPlayingStatus_) { + isPlaying_ = !pastPlayingStatus_; + pastPlayingStatus_ = false; + Start(); + } +} + +void VideoElement::PrepareMultiModalEvent() +{ + if (!multimodalEventFullscreen_) { + multimodalEventFullscreen_ = [weak = WeakClaim(this)](const AceMultimodalEvent&) { + auto videoElement = weak.Upgrade(); + if (videoElement) { + videoElement->FullScreen(); + } + }; + } + + if (!multimodalEventPause_) { + multimodalEventPause_ = [weak = WeakClaim(this)](const AceMultimodalEvent&) { + auto videoElement = weak.Upgrade(); + if (videoElement) { + videoElement->Pause(); + } + }; + } + + if (!multimodalEventPlay_) { + multimodalEventPlay_ = [weak = WeakClaim(this)](const AceMultimodalEvent&) { + auto videoElement = weak.Upgrade(); + if (videoElement) { + videoElement->Start(); + } + }; + } + + if (!multimodalEventFullscreenExit_) { + multimodalEventFullscreenExit_ = [weak = WeakClaim(this)](const AceMultimodalEvent&) { + auto videoElement = weak.Upgrade(); + if (videoElement) { + videoElement->ExitFullScreen(); + } + }; + }; +} + +bool VideoElement::SubscribeMultiModal() +{ + if (isSubscribeMultimodal_) { + return true; + } + if (multiModalScene_.Invalid()) { + const auto pipelineContext = GetContext().Upgrade(); + if (!pipelineContext) { + LOGW("the pipeline context is null"); + return false; + } + const auto multimodalManager = pipelineContext->GetMultiModalManager(); + if (!multimodalManager) { + LOGW("the multimodal manager is null"); + return false; + } + const auto scene = multimodalManager->GetCurrentMultiModalScene(); + if (!scene) { + return false; + } + + playVoiceEvent_ = VoiceEvent(PLAY_LABEL, SceneLabel::VIDEO); + scene->SubscribeVoiceEvent(playVoiceEvent_, multimodalEventPlay_); + + pauseVoiceEvent_ = VoiceEvent(PAUSE_LABEL, SceneLabel::VIDEO); + scene->SubscribeVoiceEvent(pauseVoiceEvent_, multimodalEventPause_); + + fullscreenVoiceEvent_ = VoiceEvent(FULLSCREEN_LABEL, SceneLabel::VIDEO); + scene->SubscribeVoiceEvent(fullscreenVoiceEvent_, multimodalEventFullscreen_); + + exitFullscreenVoiceEvent_ = VoiceEvent(EXIT_FULLSCREEN_LABEL, SceneLabel::VIDEO); + scene->SubscribeVoiceEvent(exitFullscreenVoiceEvent_, multimodalEventFullscreenExit_); + multiModalScene_ = scene; + isSubscribeMultimodal_ = true; + } + return true; +} + +bool VideoElement::UnSubscribeMultiModal() +{ + if (!isSubscribeMultimodal_) { + return true; + } + auto multiModalScene = multiModalScene_.Upgrade(); + if (!multiModalScene) { + LOGE("fail to destroy multimodal event due to multiModalScene is null"); + return false; + } + if (!playVoiceEvent_.GetVoiceContent().empty()) { + multiModalScene->UnSubscribeVoiceEvent(playVoiceEvent_); + } + if (!pauseVoiceEvent_.GetVoiceContent().empty()) { + multiModalScene->UnSubscribeVoiceEvent(pauseVoiceEvent_); + } + if (!exitFullscreenVoiceEvent_.GetVoiceContent().empty()) { + multiModalScene->UnSubscribeVoiceEvent(exitFullscreenVoiceEvent_); + } + if (!fullscreenVoiceEvent_.GetVoiceContent().empty()) { + multiModalScene->UnSubscribeVoiceEvent(fullscreenVoiceEvent_); + } + isSubscribeMultimodal_ = false; + return true; +} + +void VideoElement::SetNewComponent(const RefPtr& newComponent) +{ + if (newComponent == nullptr || !isElementPrepared_) { + Element::SetNewComponent(newComponent); + return; + } + auto videoComponent = AceType::DynamicCast(newComponent); + if (videoComponent) { + if (src_ == videoComponent->GetSrc()) { + if (isError_) { + return; + } + InitStatus(videoComponent); + + // When the video is in the initial state and the attribute is auto play, start playing. + if (isInitialState_ && isAutoPlay_) { + Start(); + } + if (isMute_) { + SetVolume(0.0f); + } else { + SetVolume(1.0f); + } + } else { + ResetStatus(); + InitStatus(videoComponent); + CreatePlatformResource(); + } + if (texture_) { + videoComponent->SetTextureId(texture_->GetId()); + videoComponent->SetSrcWidth(videoWidth_); + videoComponent->SetSrcHeight(videoHeight_); + videoComponent->SetFit(imageFit_); + } + videoComponent->SetChild(CreateChild()); + + Element::SetNewComponent(videoComponent); + } +} + +void VideoElement::InitEvent(const RefPtr& videoComponent) +{ + if (!videoComponent->GetPreparedEventId().IsEmpty()) { + onPrepared_ = AceAsyncEvent::Create(videoComponent->GetPreparedEventId(), context_); + } + + if (!videoComponent->GetFinishEventId().IsEmpty()) { + onFinish_ = AceAsyncEvent::Create(videoComponent->GetFinishEventId(), context_); + } + + if (!videoComponent->GetErrorEventId().IsEmpty()) { + onError_ = AceAsyncEvent::Create(videoComponent->GetErrorEventId(), context_); + } + + if (!videoComponent->GetTimeUpdateEventId().IsEmpty()) { + onTimeUpdate_ = + AceAsyncEvent::Create(videoComponent->GetTimeUpdateEventId(), context_); + } + + if (!videoComponent->GetStartEventId().IsEmpty()) { + onStart_ = AceAsyncEvent::Create(videoComponent->GetStartEventId(), context_); + } + + if (!videoComponent->GetPauseEventId().IsEmpty()) { + onPause_ = AceAsyncEvent::Create(videoComponent->GetPauseEventId(), context_); + } + + if (!videoComponent->GetSeekingEventId().IsEmpty()) { + onSeeking_ = AceAsyncEvent::Create(videoComponent->GetSeekingEventId(), context_); + } + + if (!videoComponent->GetSeekedEventId().IsEmpty()) { + onSeeked_ = AceAsyncEvent::Create(videoComponent->GetSeekedEventId(), context_); + } + + if (!videoComponent->GetFullscreenChangeEventId().IsEmpty()) { + onFullScreenChange_ = + AceAsyncEvent::Create(videoComponent->GetFullscreenChangeEventId(), context_); + } +} + +void VideoElement::SetMethodCall(const RefPtr& videoComponent) +{ + auto videoController = videoComponent->GetVideoController(); + if (videoController) { + auto context = context_.Upgrade(); + if (!context) { + return; + } + auto uiTaskExecutor = SingleTaskExecutor::Make(context->GetTaskExecutor(), TaskExecutor::TaskType::UI); + videoController->SetStartImpl([weak = WeakClaim(this), uiTaskExecutor]() { + uiTaskExecutor.PostTask([weak]() { + auto videoElement = weak.Upgrade(); + if (videoElement) { + videoElement->Start(); + } + }); + }); + videoController->SetPausetImpl([weak = WeakClaim(this), uiTaskExecutor]() { + uiTaskExecutor.PostTask([weak]() { + auto videoElement = weak.Upgrade(); + if (videoElement) { + videoElement->Pause(); + } + }); + }); + videoController->SetSeekToImpl([weak = WeakClaim(this), uiTaskExecutor](uint32_t pos) { + uiTaskExecutor.PostTask([weak, pos]() { + auto videoElement = weak.Upgrade(); + if (videoElement) { + videoElement->SetCurrentTime(pos); + } + }); + }); + videoController->SetRequestFullscreenImpl([weak = WeakClaim(this), uiTaskExecutor](bool isPortrait) { + uiTaskExecutor.PostTask([weak, isPortrait]() { + auto videoElement = weak.Upgrade(); + if (videoElement) { + videoElement->FullScreen(); + } + }); + }); + videoController->SetExitFullscreenImpl([weak = WeakClaim(this), uiTaskExecutor](bool isSync) { + if (isSync) { + auto videoElement = weak.Upgrade(); + if (videoElement) { + videoElement->ExitFullScreen(); + } + return; + } + uiTaskExecutor.PostTask([weak]() { + auto videoElement = weak.Upgrade(); + if (videoElement) { + videoElement->ExitFullScreen(); + } + }); + }); + } +} + +void VideoElement::SetRespondChildEvent() +{ + shieldId_ = BackEndEventManager::GetInstance().GetAvailableMarker(); + startBtnClickId_ = BackEndEventManager::GetInstance().GetAvailableMarker(); + BackEndEventManager::GetInstance().BindBackendEvent(startBtnClickId_, [weak = WeakClaim(this)]() { + auto videoElement = weak.Upgrade(); + if (videoElement) { + videoElement->OnStartBtnClick(); + } + }); + sliderMovedCallbackId_ = BackEndEventManager::GetInstance().GetAvailableMarker(); + BackEndEventManager::GetInstance().BindBackendEvent( + sliderMovedCallbackId_, [weak = WeakClaim(this)](const std::string& param) { + auto videoElement = weak.Upgrade(); + if (videoElement) { + videoElement->OnSliderChange(param); + } + }); + sliderMovingCallbackId_ = BackEndEventManager::GetInstance().GetAvailableMarker(); + BackEndEventManager::GetInstance().BindBackendEvent( + sliderMovingCallbackId_, [weak = WeakClaim(this)](const std::string& param) { + auto videoElement = weak.Upgrade(); + if (videoElement) { + videoElement->OnSliderMoving(param); + } + }); + fullscreenBtnClickId_ = BackEndEventManager::GetInstance().GetAvailableMarker(); + BackEndEventManager::GetInstance().BindBackendEvent(fullscreenBtnClickId_, [weak = WeakClaim(this)]() { + auto videoElement = weak.Upgrade(); + if (videoElement) { + videoElement->OnFullScreenBtnClick(); + } + }); +} + +void VideoElement::CreatePlatformResource() +{ + ReleasePlatformResource(); + + auto context = context_.Upgrade(); + if (!context) { + return; + } + auto uiTaskExecutor = SingleTaskExecutor::Make(context->GetTaskExecutor(), TaskExecutor::TaskType::UI); + + auto errorCallback = [weak = WeakClaim(this), uiTaskExecutor]( + const std::string& errorId, const std::string& param) { + uiTaskExecutor.PostTask([weak, errorId, param] { + auto videoElement = weak.Upgrade(); + if (videoElement) { + videoElement->OnError(errorId, param); + } + }); + }; + texture_ = AceType::MakeRefPtr(context_, errorCallback); + + texture_->Create([weak = WeakClaim(this), errorCallback](int64_t id) mutable { + auto videoElement = weak.Upgrade(); + if (videoElement) { + videoElement->CreatePlayer(id, std::move(errorCallback)); + } + }); +} + +void VideoElement::CreatePlayer(int64_t id, ErrorCallback&& errorCallback) +{ + player_ = AceType::MakeRefPtr(id, src_, context_, std::move(errorCallback)); + player_->SetMute(isMute_); + player_->SetAutoPlay(isAutoPlay_); + InitListener(); + player_->Create(nullptr); +} + +void VideoElement::InitListener() +{ + auto context = context_.Upgrade(); + if (!context) { + return; + } + + auto uiTaskExecutor = SingleTaskExecutor::Make(context->GetTaskExecutor(), TaskExecutor::TaskType::UI); + auto videoElement = WeakClaim(this); + if (!isExternalResource_) { + auto onTextureRefresh = [videoElement, uiTaskExecutor]() { + uiTaskExecutor.PostSyncTask([&videoElement] { + auto video = videoElement.Upgrade(); + if (video) { + video->OnTextureRefresh(); + } + }); + }; + texture_->SetRefreshListener(onTextureRefresh); + } + + auto onPrepared = [videoElement, uiTaskExecutor](uint32_t width, uint32_t height, bool isPlaying, uint32_t duration, + uint32_t currentPos, bool needFireEvent) { + uiTaskExecutor.PostSyncTask([&videoElement, width, height, isPlaying, duration, currentPos, needFireEvent] { + auto video = videoElement.Upgrade(); + if (video) { + video->OnPrepared(width, height, isPlaying, duration, currentPos, needFireEvent); + } + }); + }; + + auto onPlayerStatus = [videoElement, uiTaskExecutor](bool isPlaying) { + uiTaskExecutor.PostSyncTask([&videoElement, isPlaying] { + auto video = videoElement.Upgrade(); + if (video) { + video->OnPlayerStatus(isPlaying); + } + }); + }; + + auto onCurrentTimeChange = [videoElement, uiTaskExecutor](uint32_t currentPos) { + uiTaskExecutor.PostSyncTask([&videoElement, currentPos] { + auto video = videoElement.Upgrade(); + if (video) { + video->OnCurrentTimeChange(currentPos); + } + }); + }; + + auto onCompletion = [videoElement, uiTaskExecutor] { + uiTaskExecutor.PostSyncTask([&videoElement] { + auto video = videoElement.Upgrade(); + if (video) { + video->OnCompletion(); + } + }); + }; + + player_->AddPreparedListener(onPrepared); + player_->AddPlayStatusListener(onPlayerStatus); + player_->AddCurrentPosListener(onCurrentTimeChange); + player_->AddCompletionListener(onCompletion); +} + +void VideoElement::ReleasePlatformResource() +{ + auto context = context_.Upgrade(); + if (!context) { + return; + } + + // Reusing texture will cause a problem that last frame of last video will be display. + if (texture_) { + auto platformTaskExecutor = + SingleTaskExecutor::Make(context->GetTaskExecutor(), TaskExecutor::TaskType::PLATFORM); + + // Release player first. + if (player_) { + if (!isExternalResource_) { + player_->Stop(); + player_->Release(); + } + + if (platformTaskExecutor.IsRunOnCurrentThread()) { + player_.Reset(); + } else { + // Make sure it's destroyed when it's release task done. + platformTaskExecutor.PostTask([player = player_]() {}); + } + } + + if (platformTaskExecutor.IsRunOnCurrentThread()) { + if (!isExternalResource_) { + texture_->Release(); + } + texture_.Reset(); + } else { + if (!isExternalResource_) { +#if defined(ENABLE_NATIVE_VIEW) + texture_->Release(); + } + // Make sure it's destroyed when it's release task done. + platformTaskExecutor.PostTask([texture = texture_]() {}); +#else + auto gpuTaskExecutor = + SingleTaskExecutor::Make(context->GetTaskExecutor(), TaskExecutor::TaskType::GPU); + // Release texture after paint. + gpuTaskExecutor.PostTask([texture = texture_, platformTaskExecutor]() { + texture->Release(); + // Make sure it's destroyed when it's release task done. + platformTaskExecutor.PostTask([texture]() {}); + }); + } else { + // Make sure it's destroyed when it's release task done. + platformTaskExecutor.PostTask([texture = texture_]() {}); + } +#endif + } + } +} + +void VideoElement::UpdataChild(const RefPtr& childComponent) +{ + const auto& child = children_.empty() ? nullptr : children_.front(); + UpdateChild(child, childComponent); +} + +void VideoElement::OnError(const std::string& errorId, const std::string& param) +{ + isError_ = true; + std::string errorcode = Localization::GetInstance()->GetErrorDescription(errorId); + UpdataChild(CreateErrorText(errorcode)); + + if (onError_) { + std::string param = std::string("\"error\",{").append("}"); + onError_(param); + } +} + +void VideoElement::OnPrepared( + uint32_t width, uint32_t height, bool isPlaying, uint32_t duration, uint32_t currentPos, bool needFireEvent) +{ + isPlaying_ = isPlaying; + isReady_ = true; + videoWidth_ = width; + videoHeight_ = height; + duration_ = duration; + currentPos_ = currentPos; + + IntTimeToText(duration_, durationText_); + IntTimeToText(currentPos_, currentPosText_); + + auto video = AceType::MakeRefPtr(); + video->SetTextureId(texture_->GetId()); + video->SetSrcWidth(videoWidth_); + video->SetSrcHeight(videoHeight_); + video->SetFit(imageFit_); + + if (isPlaying || currentPos != 0) { + isInitialState_ = false; + } + + if (renderNode_ != nullptr) { + renderNode_->Update(video); + } + UpdataChild(CreateChild()); + + if (needFireEvent && onPrepared_) { + std::string param = + std::string("\"prepared\",{\"duration\":").append(std::to_string(duration_)).append("}"); + onPrepared_(param); + } +} + +void VideoElement::OnPlayerStatus(bool isPlaying) +{ + if (isInitialState_) { + isInitialState_ = !isPlaying; + } + + isPlaying_ = isPlaying; + if (!isFullScreen_ || isExternalResource_) { + UpdataChild(CreateChild()); + } + + if (isPlaying) { + if (onStart_) { + std::string param = std::string("\"start\",{").append("}"); + onStart_(param); + } + } else { + if (onPause_) { + std::string param = std::string("\"pause\",{").append("}"); + onPause_(param); + } + } +} + +void VideoElement::OnCurrentTimeChange(uint32_t currentPos) +{ + isInitialState_ = isInitialState_ ? currentPos == 0 : false; + IntTimeToText(currentPos, currentPosText_); + currentPos_ = currentPos; + + UpdataChild(CreateChild()); + + if (onTimeUpdate_) { + std::string param = + std::string("\"timeupdate\",{\"currenttime\":").append(std::to_string(currentPos)).append("}"); + onTimeUpdate_(param); + } +} + +void VideoElement::OnCompletion() +{ + currentPos_ = duration_; + IntTimeToText(currentPos_, currentPosText_); + + isPlaying_ = false; + UpdataChild(CreateChild()); + + if (onFinish_) { + std::string param = std::string("\"finish\",{").append("}"); + onFinish_(param); + } +} + +const RefPtr VideoElement::CreateErrorText(const std::string& errorMsg) +{ + auto text = AceType::MakeRefPtr(errorMsg); + text->SetTextStyle(theme_->GetErrorTextStyle()); + text->SetTextDirection(textDirection_); + + std::list> childrenAlign; + childrenAlign.emplace_back(text); + + return AceType::MakeRefPtr(childrenAlign, Alignment::TOP_CENTER); +} + +const RefPtr VideoElement::CreateCurrentText() +{ + auto textPos = AceType::MakeRefPtr(currentPosText_); + textPos->SetTextStyle(theme_->GetTimeTextStyle()); + return textPos; +} + +const RefPtr VideoElement::CreateDurationText() +{ + auto textDuration = AceType::MakeRefPtr(durationText_); + textDuration->SetTextStyle(theme_->GetTimeTextStyle()); + return textDuration; +} + +const RefPtr VideoElement::CreateSlider() +{ + auto slider = AceType::MakeRefPtr(currentPos_, 1.0, 0.0, duration_); + slider->InitStyle(sliderTheme_); + slider->SetOnMoveEndEventId(sliderMovedCallbackId_); + slider->SetOnMovingEventId(sliderMovingCallbackId_); + slider->SetTextDirection(textDirection_); + return slider; +} + +const RefPtr VideoElement::CreatePlayBtn() +{ + auto imageIcon = InternalResource::ResourceId::PLAY_SVG; + + if (pastPlayingStatus_ || isPlaying_) { + imageIcon = InternalResource::ResourceId::PAUSE_SVG; + } + + auto image = AceType::MakeRefPtr(imageIcon); + const Size& btnSize = theme_->GetBtnSize(); + image->SetWidth(Dimension(btnSize.Width())); + image->SetHeight(Dimension(btnSize.Height())); + image->SetTextDirection(textDirection_); + image->SetMatchTextDirection(true); + std::list> btnChildren; + btnChildren.emplace_back(image); + + auto button = AceType::MakeRefPtr(btnChildren); + button->SetWidth(Dimension(btnSize.Width())); + button->SetHeight(Dimension(btnSize.Height())); + button->SetType(ButtonType::ICON); + button->SetClickedEventId(startBtnClickId_); + + return button; +} + +const RefPtr VideoElement::CreateFullScreenBtn() +{ + auto imageIcon = InternalResource::ResourceId::FULLSCREEN_SVG; + + if (isFullScreen_) { + imageIcon = InternalResource::ResourceId::QUIT_FULLSCREEN_SVG; + } + + auto image = AceType::MakeRefPtr(imageIcon); + const Size& btnSize = theme_->GetBtnSize(); + image->SetWidth(Dimension(btnSize.Width())); + image->SetHeight(Dimension(btnSize.Height())); + image->SetTextDirection(textDirection_); + image->SetMatchTextDirection(true); + + std::list> btnChildren; + btnChildren.emplace_back(image); + + auto button = AceType::MakeRefPtr(btnChildren); + button->SetWidth(Dimension(btnSize.Width())); + button->SetHeight(Dimension(btnSize.Height())); + button->SetType(ButtonType::ICON); + button->SetClickedEventId(fullscreenBtnClickId_); + return button; +} + +const RefPtr VideoElement::SetPadding(const RefPtr& component, Edge&& edge) +{ + auto paddingComponent = AceType::MakeRefPtr(); + paddingComponent->SetPadding(std::move(edge)); + paddingComponent->SetChild(component); + + return paddingComponent; +} + +const RefPtr VideoElement::CreateControl() +{ + std::list> rowChildren; + + rowChildren.emplace_back(SetPadding(CreatePlayBtn(), Edge(theme_->GetBtnEdge()))); + + rowChildren.emplace_back(SetPadding(CreateCurrentText(), Edge(theme_->GetTextEdge()))); + + rowChildren.emplace_back( + AceType::MakeRefPtr(VIDEO_CHILD_COMMON_FLEX_GROW, VIDEO_CHILD_COMMON_FLEX_SHRINK, + VIDEO_CHILD_COMMON_FLEX_BASIS, SetPadding(CreateSlider(), Edge(theme_->GetSliderEdge())))); + + rowChildren.emplace_back(SetPadding(CreateDurationText(), Edge(theme_->GetTextEdge()))); + + rowChildren.emplace_back(SetPadding(CreateFullScreenBtn(), Edge(theme_->GetBtnEdge()))); + + auto decoration = AceType::MakeRefPtr(); + decoration->SetBackgroundColor(theme_->GetBkgColor()); + auto box = AceType::MakeRefPtr(); + box->SetBackDecoration(decoration); + auto row = AceType::MakeRefPtr(FlexAlign::CENTER, FlexAlign::CENTER, rowChildren); + row->SetTextDirection(textDirection_); + box->SetChild(row); + + auto gestureListener = AceType::MakeRefPtr(box); + gestureListener->SetOnClickId(shieldId_); + gestureListener->SetOnLongPressId(shieldId_); + + return gestureListener; +} + +const RefPtr VideoElement::CreatePoster() +{ + auto image = AceType::MakeRefPtr(poster_); + image->SetImageFit(imageFit_); + image->SetFitMaxSize(true); + + std::list> childrenAlign; + childrenAlign.emplace_back(image); + + auto gestureListener = AceType::MakeRefPtr( + AceType::MakeRefPtr(childrenAlign, Alignment::CENTER)); + gestureListener->SetOnClickId(shieldId_); + gestureListener->SetOnLongPressId(shieldId_); + return gestureListener; +} + +const RefPtr VideoElement::CreateChild() +{ + RefPtr child; + if (isInitialState_ && !poster_.empty()) { + std::list> columnChildren; + columnChildren.emplace_back(AceType::MakeRefPtr(VIDEO_CHILD_COMMON_FLEX_GROW, + VIDEO_CHILD_COMMON_FLEX_SHRINK, VIDEO_CHILD_COMMON_FLEX_BASIS, CreatePoster())); + if (needControls_) { + columnChildren.emplace_back(CreateControl()); + } + child = AceType::MakeRefPtr(FlexAlign::FLEX_END, FlexAlign::SPACE_AROUND, columnChildren); + } else if (needControls_) { + std::list> childrenAlign; + childrenAlign.emplace_back(CreateControl()); + child = AceType::MakeRefPtr(childrenAlign, Alignment::BOTTOM_RIGHT); + } + + if (child) { + auto display = AceType::MakeRefPtr(child); + if (!display) { + LOGE("Create display component failed. display is null."); + return display; + } + auto textureRender = GetRenderNode(); + if (!textureRender) { + return display; + } + auto displayRender = AceType::DynamicCast(textureRender->GetFirstChild()); + if (!displayRender) { + return display; + } + uint8_t opacity = displayRender->GetOpacity(); + display->SetOpacity(opacity * 1.0 / UINT8_MAX); + return display; + } else { + return child; + } +} + +void VideoElement::OnStartBtnClick() +{ + if (isPlaying_) { + Pause(); + } else { + Start(); + } +} + +void VideoElement::OnFullScreenBtnClick() +{ + if (!isFullScreen_) { + FullScreen(); + } else { + ExitFullScreen(); + } +} + +void VideoElement::OnSliderChange(const std::string& param) +{ + size_t pos = param.find("\"value\":"); + if (pos != std::string::npos) { + if (pastPlayingStatus_) { + isPlaying_ = false; + Start(); + pastPlayingStatus_ = false; + } + std::stringstream ss; + uint32_t value = 0; + + ss << param.substr(pos + 8); // Need to add the length of "\"value\":". + ss >> value; + + SetCurrentTime(value); + if (onSeeked_) { + std::string param = std::string("\"seeked\",{\"currenttime\":").append(std::to_string(value)).append("}"); + onSeeked_(param); + } + } +} + +void VideoElement::OnSliderMoving(const std::string& param) +{ + size_t pos = param.find("\"value\":"); + if (pos != std::string::npos) { + if (isPlaying_ && !pastPlayingStatus_) { + Pause(); + pastPlayingStatus_ = true; + } + std::stringstream ss; + uint32_t value = 0; + + // Need to add the length of "\"value\":". + if (param.size() > (pos + 8)) { + ss << param.substr(pos + 8); + ss >> value; + } + + SetCurrentTime(value); + if (onSeeking_) { + std::string param = std::string("\"seeking\",{\"currenttime\":").append(std::to_string(value)).append("}"); + onSeeking_(param); + } + } +} + +void VideoElement::IntTimeToText(uint32_t time, std::string& timeText) +{ + // Whether the duration is longer than 1 hour. + bool needShowHour = duration_ > 3600; + timeText = Localization::GetInstance()->FormatDuration(time, needShowHour); +} + +void VideoElement::Start() +{ + if (!isPlaying_ && player_) { + player_->Start(); + } +} + +void VideoElement::Pause() +{ + if (isPlaying_ && player_) { + player_->Pause(); + } +} + +void VideoElement::SetCurrentTime(uint32_t currentPos) +{ + if (currentPos >= 0 && currentPos < duration_ && player_) { + player_->SeekTo(currentPos); + } +} + +void VideoElement::FullScreen() +{ + if (!isFullScreen_ && !isError_) { + if (fullscreenEvent_) { + auto component = AceType::DynamicCast(fullscreenEvent_(true, player_, texture_)); + if (component) { + auto context = context_.Upgrade(); + if (!context) { + return; + } + + auto stackElement = context->GetLastStack(); + if (!stackElement) { + return; + } + + // add fullscreen component cover component + stackElement->PushComponent(AceType::MakeRefPtr(component->GetId() + "fullscreen", + component->GetName() + "fullscreen", component->GetChild()), + true); + + isFullScreen_ = true; + if (onFullScreenChange_) { + std::string param = std::string("\"fullscreenchange\",{\"fullscreen\":") + .append(std::to_string(isFullScreen_)) + .append("}"); + onFullScreenChange_(param); + } + } + } + } +} + +void VideoElement::ExitFullScreen() +{ + if (fullscreenEvent_) { + fullscreenEvent_(false, nullptr, nullptr); + } + + if (!isExternalResource_ && isFullScreen_) { + auto context = context_.Upgrade(); + if (!context) { + return; + } + + auto stackElement = context->GetLastStack(); + if (!stackElement) { + return; + } + stackElement->PopComponent(true); + isFullScreen_ = false; + if (onFullScreenChange_) { + std::string param = + std::string("\"fullscreenchange\",{\"fullscreen\":").append(std::to_string(isFullScreen_)).append("}"); + onFullScreenChange_(param); + } + if (renderNode_) { + renderNode_->MarkNeedLayout(); + } + } +} + +void VideoElement::SetVolume(float volume) +{ + if (player_) { + player_->SetVolume(volume); + } +} + +void VideoElement::Dump() +{ + if (texture_) { + DumpLog::GetInstance().AddDesc("texture:", texture_->GetHashCode()); + } + if (player_) { + DumpLog::GetInstance().AddDesc("player:", player_->GetHashCode()); + } + DumpLog::GetInstance().AddDesc("isError:", isError_); + DumpLog::GetInstance().AddDesc("poster:", poster_); + DumpLog::GetInstance().AddDesc("isInitialState_:", isInitialState_); + DumpLog::GetInstance().AddDesc("videoWidth:", videoWidth_); + DumpLog::GetInstance().AddDesc("videoHeight:", videoHeight_); + DumpLog::GetInstance().AddDesc("isReady:", isReady_); + DumpLog::GetInstance().AddDesc("src:", src_); + DumpLog::GetInstance().AddDesc("isAutoPlay:", isAutoPlay_); + DumpLog::GetInstance().AddDesc("needControls:", needControls_); + DumpLog::GetInstance().AddDesc("isMute:", isMute_); +} + +bool VideoElement::OnKeyEvent(const KeyEvent& keyEvent) +{ + if (keyEvent.action != KeyAction::UP) { + return false; + } + switch (keyEvent.code) { + case KeyCode::KEYBOARD_BACK: + case KeyCode::KEYBOARD_ESCAPE: { + if (isFullScreen_) { + ExitFullScreen(); + return true; + } + break; + } + case KeyCode::KEYBOARD_ENTER: { + if (!isFullScreen_) { + FullScreen(); + } else { + OnStartBtnClick(); + } + return true; + } + case KeyCode::TV_CONTROL_MEDIA_PLAY: { + OnStartBtnClick(); + return true; + } + case KeyCode::TV_CONTROL_LEFT: { + if (isFullScreen_) { + OnKeyLeft(); + if (!isPlaying_) { + Start(); + } + return true; + } + break; + } + case KeyCode::TV_CONTROL_RIGHT: { + if (isFullScreen_) { + OnKeyRight(); + if (!isPlaying_) { + Start(); + } + return true; + } + break; + } + default: + break; + } + return false; +} + +void VideoElement::OnKeyLeft() +{ + SetCurrentTime(currentPos_ > VIDEO_SEEK_STEP ? currentPos_ - VIDEO_SEEK_STEP : 0); +} + +void VideoElement::OnKeyRight() +{ + if (currentPos_ + VIDEO_SEEK_STEP < duration_) { + SetCurrentTime(currentPos_ + VIDEO_SEEK_STEP); + } +} + +void VideoElement::OnTextureRefresh() +{ + auto context = context_.Upgrade(); + if (context) { + context->MarkForcedRefresh(); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/video/video_element.h b/frameworks/core/components/video/video_element.h new file mode 100644 index 00000000..bd268adf --- /dev/null +++ b/frameworks/core/components/video/video_element.h @@ -0,0 +1,163 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_VIDEO_VIDEO_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_VIDEO_VIDEO_ELEMENT_H + +#include "core/components/common/properties/edge.h" +#include "core/components/multimodal/render_multimodal.h" +#include "core/components/slider/slider_theme.h" +#include "core/components/video/resource/player.h" +#include "core/components/video/resource/texture.h" +#include "core/components/video/video_component.h" +#include "core/components/video/video_theme.h" +#include "core/focus/focus_node.h" +#include "core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +constexpr double VIDEO_CHILD_COMMON_FLEX_GROW = 1.0; +constexpr double VIDEO_CHILD_COMMON_FLEX_SHRINK = 1.0; +constexpr double VIDEO_CHILD_COMMON_FLEX_BASIS = 0.0; +constexpr uint32_t VIDEO_SEEK_STEP = 5; + +class VideoElement : public RenderElement, public FocusNode { + DECLARE_ACE_TYPE(VideoElement, RenderElement, FocusNode); + +public: + using EventCallback = std::function; + using FullscreenEvent = std::function(bool, const WeakPtr&, const WeakPtr&)>; + using ErrorCallback = std::function; + + VideoElement() = default; + ~VideoElement() override; + + void SetNewComponent(const RefPtr& newComponent) override; + void Prepare(const WeakPtr& parent) override; + void PerformBuild() override; + void Dump() override; + + void Start(); + void Pause(); + void SetCurrentTime(uint32_t currentPos); + void FullScreen(); + void ExitFullScreen(); + void SetVolume(float volume); + +private: + void OnError(const std::string& errorId, const std::string& param); + void OnPrepared( + uint32_t width, uint32_t height, bool isPlaying, uint32_t duration, uint32_t currentPos, bool needFireEvent); + void OnPlayerStatus(bool isPlaying); + void OnCurrentTimeChange(uint32_t currentPos); + void OnCompletion(); + void OnStartBtnClick(); + void OnFullScreenBtnClick(); + void OnSliderChange(const std::string& param); + void OnSliderMoving(const std::string& param); + void IntTimeToText(uint32_t time, std::string& timeText); + void InitEvent(const RefPtr& videoComponent); + void SetMethodCall(const RefPtr& videoComponent); + void SetRespondChildEvent(); + void CreatePlatformResource(); + void CreatePlayer(int64_t id, ErrorCallback&& errorCallback); + void ReleasePlatformResource(); + void UpdataChild(const RefPtr& childComponent); + void InitStatus(const RefPtr& videoComponent); + void InitListener(); + void ResetStatus(); + bool OnKeyEvent(const KeyEvent& keyEvent) override; + void OnKeyLeft(); + void OnKeyRight(); + void OnTextureRefresh(); + void HiddenChange(bool hidden); + void OnTextureSize(int64_t textureId, int32_t textureWidth, int32_t textureHeight); + + const RefPtr CreateChild(); + const RefPtr CreatePoster(); + const RefPtr CreateControl(); + const RefPtr CreateCurrentText(); + const RefPtr CreateDurationText(); + const RefPtr CreateSlider(); + const RefPtr CreatePlayBtn(); + const RefPtr CreateFullScreenBtn(); + const RefPtr CreateErrorText(const std::string& errorMsg); + const RefPtr SetPadding(const RefPtr& component, Edge&& edge); + + void PrepareMultiModalEvent(); + bool SubscribeMultiModal(); + bool UnSubscribeMultiModal(); + + bool isSubscribeMultimodal_ = false; + RefPtr theme_; + RefPtr sliderTheme_; + RefPtr player_; + RefPtr texture_; + bool isExternalResource_ = false; + + ImageFit imageFit_ { ImageFit::CONTAIN }; + + bool needControls_ = true; + bool isAutoPlay_ = false; + bool isMute_ = false; + std::string src_; + std::string poster_; + uint32_t duration_ = 0; + uint32_t currentPos_ = 0; + bool isPlaying_ = false; + bool pastPlayingStatus_ = false; // Record the player status before dragging the progress bar. + bool isReady_ = false; + bool isFullScreen_ = false; + bool isInitialState_ = true; // Initial state is true. Play or seek will set it to true. + bool isError_ = false; + bool isElementPrepared_ = false; + double videoWidth_ = 0.0; + double videoHeight_ = 0.0; + std::string durationText_; + std::string currentPosText_; + TextDirection textDirection_ = TextDirection::LTR; + + EventMarker shieldId_; // Shield the event on the control bar. + EventMarker startBtnClickId_; + EventMarker fullscreenBtnClickId_; + EventMarker sliderMovedCallbackId_; + EventMarker sliderMovingCallbackId_; + EventCallback onPrepared_; + EventCallback onStart_; + EventCallback onPause_; + EventCallback onFinish_; + EventCallback onError_; + EventCallback onSeeking_; + EventCallback onSeeked_; + EventCallback onTimeUpdate_; + EventCallback onFullScreenChange_; + + // multimodal required param + MultimodalEventCallback multimodalEventFullscreen_; + MultimodalEventCallback multimodalEventFullscreenExit_; + MultimodalEventCallback multimodalEventPlay_; + MultimodalEventCallback multimodalEventPause_; + WeakPtr multiModalScene_; + VoiceEvent playVoiceEvent_; + VoiceEvent pauseVoiceEvent_; + VoiceEvent fullscreenVoiceEvent_; + VoiceEvent exitFullscreenVoiceEvent_; + + FullscreenEvent fullscreenEvent_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_VIDEO_VIDEO_ELEMENT_H diff --git a/frameworks/core/components/video/video_theme.h b/frameworks/core/components/video/video_theme.h new file mode 100644 index 00000000..c1b8c469 --- /dev/null +++ b/frameworks/core/components/video/video_theme.h @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_VIDEO_VIDEO_THEME_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_VIDEO_VIDEO_THEME_H + +#include "base/geometry/size.h" +#include "core/components/common/properties/color.h" +#include "core/components/common/properties/edge.h" +#include "core/components/common/properties/text_style.h" +#include "core/components/theme/theme.h" +#include "core/components/theme/theme_constants.h" + +namespace OHOS::Ace { + +/** + * VideoTheme defines color and styles of VideoComponent. VideoTheme should be built + * using VideoTheme::Builder. + */ +class VideoTheme : public virtual Theme { + DECLARE_ACE_TYPE(VideoTheme, Theme); + +public: + class Builder { + public: + Builder() = default; + ~Builder() = default; + + RefPtr Build(const RefPtr& themeConstants) const + { + RefPtr theme = AceType::Claim(new VideoTheme()); + if (!themeConstants) { + return theme; + } + theme->btnSize_ = Size(themeConstants->GetDimension(THEME_VIDEO_BAR_BTN_WIDTH).Value(), + themeConstants->GetDimension(THEME_VIDEO_BAR_BTN_HEIGHT).Value()); + theme->btnEdge_ = Edge(themeConstants->GetDimension(THEME_VIDEO_BAR_BTN_PADDING_LEFT).Value(), + themeConstants->GetDimension(THEME_VIDEO_BAR_BTN_PADDING_TOP).Value(), + themeConstants->GetDimension(THEME_VIDEO_BAR_BTN_PADDING_RIGHT).Value(), + themeConstants->GetDimension(THEME_VIDEO_BAR_BTN_PADDING_BOTTOM).Value()); + theme->textEdge_ = Edge(themeConstants->GetDimension(THEME_VIDEO_BAR_TEXT_PADDING_LEFT).Value(), + themeConstants->GetDimension(THEME_VIDEO_BAR_TEXT_PADDING_TOP).Value(), + themeConstants->GetDimension(THEME_VIDEO_BAR_TEXT_PADDING_RIGHT).Value(), + themeConstants->GetDimension(THEME_VIDEO_BAR_TEXT_PADDING_BOTTOM).Value()); + theme->sliderEdge_ = Edge(themeConstants->GetDimension(THEME_VIDEO_BAR_SLIDER_PADDING_LEFT).Value(), + themeConstants->GetDimension(THEME_VIDEO_BAR_SLIDER_PADDING_TOP).Value(), + themeConstants->GetDimension(THEME_VIDEO_BAR_SLIDER_PADDING_RIGHT).Value(), + themeConstants->GetDimension(THEME_VIDEO_BAR_SLIDER_PADDING_BOTTOM).Value()); + theme->timeTextStyle_.SetFontSize(themeConstants->GetDimension(THEME_VIDEO_TEXT_FONTSIZE)); + theme->timeTextStyle_.SetTextColor(themeConstants->GetColor(THEME_VIDEO_BAR_TIME_TEXT_COLOR)); + theme->errorTextStyle_.SetFontSize(themeConstants->GetDimension(THEME_VIDEO_TEXT_FONTSIZE)); + theme->errorTextStyle_.SetTextColor(themeConstants->GetColor(THEME_VIDEO_ERROR_TEXT_COLOR)); + theme->bkgColor_ = themeConstants->GetColor(THEME_VIDEO_BAR_BACKGROUND); + return theme; + } + }; + + ~VideoTheme() override = default; + + const Size& GetBtnSize() const + { + return btnSize_; + } + + const Edge& GetBtnEdge() const + { + return btnEdge_; + } + + const Edge& GetTextEdge() const + { + return textEdge_; + } + + const Edge& GetSliderEdge() const + { + return sliderEdge_; + } + + const TextStyle& GetTimeTextStyle() const + { + return timeTextStyle_; + } + + const TextStyle& GetErrorTextStyle() const + { + return errorTextStyle_; + } + + const Color& GetBkgColor() const + { + return bkgColor_; + } + +protected: + VideoTheme() = default; + +private: + Size btnSize_; + Edge btnEdge_; + Edge textEdge_; + Edge sliderEdge_; + TextStyle timeTextStyle_; + TextStyle errorTextStyle_; + Color bkgColor_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_VIDEO_VIDEO_THEME_H diff --git a/frameworks/core/components/watch_slider/BUILD.gn b/frameworks/core/components/watch_slider/BUILD.gn new file mode 100644 index 00000000..727ed5ce --- /dev/null +++ b/frameworks/core/components/watch_slider/BUILD.gn @@ -0,0 +1,22 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("watch_slider") { + sources = [ + "flutter_render_watch_slider.cpp", + "render_watch_slider.cpp", + "watch_slider_component.cpp", + ] +} diff --git a/frameworks/core/components/watch_slider/flutter_render_watch_slider.cpp b/frameworks/core/components/watch_slider/flutter_render_watch_slider.cpp new file mode 100644 index 00000000..9c565d54 --- /dev/null +++ b/frameworks/core/components/watch_slider/flutter_render_watch_slider.cpp @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/watch_slider/flutter_render_watch_slider.h" + +#include "third_party/skia/include/core/SkRRect.h" + +#include "base/geometry/dimension.h" +#include "core/pipeline/base/scoped_canvas_state.h" + +namespace OHOS::Ace { +namespace { + +constexpr Dimension THICKNESS = 52.0_vp; +constexpr Dimension DEFAULT_PADDING = 3.0_vp; + +} // namespace + +RefPtr RenderWatchSlider::Create() +{ + return AceType::MakeRefPtr(); +} + +void FlutterRenderWatchSlider::Paint(RenderContext& context, const Offset& offset) +{ + UpdatePosition(offset); + ScopedCanvas canvas = ScopedCanvas::Create(context); + if (!canvas) { + LOGE("Paint canvas is null"); + return; + } + double topX = offset.GetX() + GetLayoutSize().Width() / 2.0 - NormalizeToPx(THICKNESS) / 2.0; + double topY = offset.GetY() + NormalizeToPx(DEFAULT_PADDING); + SkRect bottomClipRect = { topX, topY, topX + NormalizeToPx(THICKNESS), + topY + GetLayoutSize().Height() - 2.0 * NormalizeToPx(DEFAULT_PADDING) }; + SkRRect bottomClipLayer = + SkRRect::MakeRectXY(bottomClipRect, NormalizeToPx(THICKNESS) / 2.0, NormalizeToPx(THICKNESS) / 2.0); + canvas.GetSkCanvas()->clipRRect(bottomClipLayer, SkClipOp::kIntersect, true); + flutter::Paint paint; + flutter::PaintData paintData; + paint.paint()->setColor(backgroundColor_.GetValue()); + canvas->drawRect(topX, topY, topX + NormalizeToPx(THICKNESS), + topY + GetLayoutSize().Height() - 2.0 * NormalizeToPx(DEFAULT_PADDING), paint, paintData); + paint.paint()->setColor(selectColor_.GetValue()); + double maxRegion = 0.0; + if (!NearEqual(max_, min_)) { + maxRegion = + (GetLayoutSize().Height() - 2.0 * NormalizeToPx(DEFAULT_PADDING)) * ((max_ - value_) / (max_ - min_)); + } + canvas->drawRect(topX, topY + maxRegion, topX + NormalizeToPx(THICKNESS), + topY + GetLayoutSize().Height() - 2.0 * NormalizeToPx(DEFAULT_PADDING), paint, paintData); + double trackLength = GetLayoutSize().Height() - 2.0 * NormalizeToPx(DEFAULT_PADDING); + if (!isContinuous_) { + paint.paint()->setColor(Color::BLACK.GetValue()); + // equally divided track into three pieces. each block takes 1/4 + canvas->drawRect(topX, topY + trackLength * 0.25, topX + NormalizeToPx(THICKNESS), + topY + trackLength * 0.25 + 2.0, paint, paintData); + canvas->drawRect(topX, topY + trackLength * 0.5, topX + NormalizeToPx(THICKNESS), + topY + trackLength * 0.5 + 2.0, paint, paintData); + canvas->drawRect(topX, topY + trackLength * 0.75, topX + NormalizeToPx(THICKNESS), + topY + trackLength * 0.75 + 2.0, paint, paintData); + } + + bottomIcon_->RenderWithContext(context, bottomIconPosition_); + topIcon_->RenderWithContext(context, topIconPosition_); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/watch_slider/flutter_render_watch_slider.h b/frameworks/core/components/watch_slider/flutter_render_watch_slider.h new file mode 100644 index 00000000..3f3671bd --- /dev/null +++ b/frameworks/core/components/watch_slider/flutter_render_watch_slider.h @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_WATCH_SLIDER_FLUTTER_RENDER_WATCH_SLIDER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_WATCH_SLIDER_FLUTTER_RENDER_WATCH_SLIDER_H + +#include "core/components/watch_slider/render_watch_slider.h" + +namespace OHOS::Ace { + +class FlutterRenderWatchSlider final : public RenderWatchSlider { + DECLARE_ACE_TYPE(FlutterRenderWatchSlider, RenderWatchSlider); + +public: + FlutterRenderWatchSlider() = default; + ~FlutterRenderWatchSlider() override = default; + +private: + void Paint(RenderContext& context, const Offset& offset) override; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_WATCH_SLIDER_FLUTTER_RENDER_WATCH_SLIDER_H diff --git a/frameworks/core/components/watch_slider/render_watch_slider.cpp b/frameworks/core/components/watch_slider/render_watch_slider.cpp new file mode 100644 index 00000000..51cdea3f --- /dev/null +++ b/frameworks/core/components/watch_slider/render_watch_slider.cpp @@ -0,0 +1,331 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/watch_slider/render_watch_slider.h" + +#include "base/json/json_util.h" +#include "core/components/image/image_component.h" +#include "core/components/image/render_image.h" +#include "core/event/ace_event_helper.h" + +namespace OHOS::Ace { +namespace { + +constexpr double CHANGE_RATIO = 0.05; +constexpr double INTERMITTENT_RATIO = 0.25; +constexpr double SLIDER_CONTINUOUS_ROTATION_SENSITIVITY_NORMAL = 1.0; +// UX variation corresponding to each watch rotation base event. +constexpr double ROTATION_BASE_DELTA_DP = 0.834; +constexpr Dimension HOT_REGION = 52.0_vp; +constexpr Dimension ICON_SIZE = 28.0_vp; +constexpr Dimension PADDING_SIZE = 3.0_vp; +constexpr Dimension PADDING_ICON = 12.0_vp; +constexpr double THRESHOLD = 90.0; +constexpr double SCROLL_DELTA = 10.0; + +} // namespace + +void RenderWatchSlider::InitAccessibilityEventListener() +{ + const auto& accessibilityNode = GetAccessibilityNode().Upgrade(); + if (!accessibilityNode) { + return; + } + accessibilityNode->AddSupportAction(AceAction::ACTION_SCROLL_BACKWARD); + accessibilityNode->AddSupportAction(AceAction::ACTION_SCROLL_FORWARD); + + accessibilityNode->SetActionScrollBackward([weakPtr = WeakClaim(this)]() { + const auto& slider = weakPtr.Upgrade(); + if (slider) { + slider->HandleDragUpdate(SCROLL_DELTA * CHANGE_RATIO); + slider->HandleDragEnd(SCROLL_DELTA); + return true; + } + return false; + }); + + accessibilityNode->SetActionScrollForward([weakPtr = WeakClaim(this)]() { + const auto& slider = weakPtr.Upgrade(); + if (slider) { + slider->HandleDragUpdate(-1 * SCROLL_DELTA * CHANGE_RATIO); + slider->HandleDragEnd(-1 * SCROLL_DELTA * CHANGE_RATIO); + return true; + } + return false; + }); +} + +void RenderWatchSlider::Update(const RefPtr& component) +{ + auto sliderComponent = AceType::DynamicCast(component); + if (!sliderComponent) { + LOGE("component type error"); + return; + } + step_ = sliderComponent->GetStep(); + value_ = sliderComponent->GetValue(); + max_ = sliderComponent->GetMaxValue(); + min_ = sliderComponent->GetMinValue(); + disable_ = sliderComponent->GetDisable(); + minIconUrl_ = sliderComponent->GetMinIconUrl(); + maxIconUrl_ = sliderComponent->GetMaxIconUrl(); + backgroundColor_ = sliderComponent->GetBackgroundColor(); + selectColor_ = sliderComponent->GetSelectColor(); + isContinuous_ = sliderComponent->GetContinuous(); + + if (LessOrEqual(max_, min_)) { + max_ = 100.0; + min_ = 0.0; + } + + if (!isContinuous_) { + value_ = std::round(value_ / ((max_ - min_) / 4.0)) * ((max_ - min_) / 4.0); + } + + // Event update + if (!sliderComponent->GetOnMoveEndEventId().IsEmpty()) { + onMoveEnd_ = AceAsyncEvent::Create(sliderComponent->GetOnMoveEndEventId(), context_); + } + if (!sliderComponent->GetOnMovingEventId().IsEmpty()) { + onMoving_ = AceAsyncEvent::Create(sliderComponent->GetOnMovingEventId(), context_); + } + + // initialize event handler + Initialize(); + InitAccessibilityEventListener(); + + RefPtr minIconComponent = AceType::MakeRefPtr(minIconUrl_); + RefPtr maxIconComponent = AceType::MakeRefPtr(maxIconUrl_); + minIconComponent->SetWidth(ICON_SIZE); + minIconComponent->SetHeight(ICON_SIZE); + maxIconComponent->SetHeight(ICON_SIZE); + maxIconComponent->SetWidth(ICON_SIZE); + + topIcon_ = AceType::DynamicCast(maxIconComponent->CreateRenderNode()); + bottomIcon_ = AceType::DynamicCast(minIconComponent->CreateRenderNode()); + + topIcon_->Attach(GetContext()); + bottomIcon_->Attach(GetContext()); + + topIcon_->Update(maxIconComponent); + bottomIcon_->Update(minIconComponent); + + AddChild(topIcon_); + AddChild(bottomIcon_); + + const auto& rotationController = sliderComponent->GetRotationController(); + if (rotationController) { + auto weak = AceType::WeakClaim(this); + rotationController->SetRequestRotationImpl(weak, context_); + } +} + +void RenderWatchSlider::PerformLayout() +{ + SetLayoutSize(GetLayoutParam().GetMaxSize()); + + double iconSizeInPx = NormalizeToPx(ICON_SIZE); + LayoutParam iconParam; + iconParam.SetFixedSize(Size(iconSizeInPx, iconSizeInPx)); + topIcon_->Layout(iconParam); + bottomIcon_->Layout(iconParam); +} + +void RenderWatchSlider::Initialize() +{ + if (!dragDetector_) { + dragDetector_ = AceType::MakeRefPtr(); + dragDetector_->SetOnDragUpdate([weakSlider = AceType::WeakClaim(this)](const DragUpdateInfo& info) { + auto slider = weakSlider.Upgrade(); + if (slider) { + slider->HandleDragUpdate(info.GetMainDelta()); + } + }); + dragDetector_->SetOnDragEnd([weakSlider = AceType::WeakClaim(this)](const DragEndInfo& info) { + auto slider = weakSlider.Upgrade(); + if (slider) { + slider->HandleDragEnd(info.GetMainVelocity()); + } + }); + } + if (!clickDetector_) { + clickDetector_ = AceType::MakeRefPtr(); + clickDetector_->SetOnClick([weakSlider = AceType::WeakClaim(this)](const ClickInfo& info) { + auto slider = weakSlider.Upgrade(); + if (slider) { + slider->HandleClick(info.GetGlobalLocation()); + } + }); + } +} + +void RenderWatchSlider::HandleClick(const OHOS::Ace::Offset& clickPosition) +{ + if (topIconRect_.IsInRegion(Point(clickPosition.GetX(), clickPosition.GetY()))) { + if (isContinuous_) { + value_ = value_ + CHANGE_RATIO * (max_ - min_); + } else { + value_ = value_ + INTERMITTENT_RATIO * (max_ - min_); + } + if (value_ > max_) { + value_ = max_; + } + } else if (bottomIconRect_.IsInRegion(Point(clickPosition.GetX(), clickPosition.GetY()))) { + if (isContinuous_) { + value_ = value_ - CHANGE_RATIO * (max_ - min_); + } else { + value_ = value_ - INTERMITTENT_RATIO * (max_ - min_); + } + if (value_ < min_) { + value_ = min_; + } + } + if (onMoveEnd_) { + auto jsonResult = JsonUtil::Create(true); + jsonResult->Put("progress", std::to_string(value_).c_str()); + jsonResult->Put("isEnd", "true"); + onMoveEnd_(std::string(R"("change",)").append(jsonResult->ToString())); + } + MarkNeedRender(); +} + +void RenderWatchSlider::HandleDragUpdate(double delta) +{ + if (NearZero(GetLayoutSize().Height())) { + return; + } + double diff = (delta / GetLayoutSize().Height()) * (max_ - min_); + if (!isContinuous_) { + accumulatedValue_ += diff; + double blockValue = (max_ - min_) * INTERMITTENT_RATIO; + diff = std::round(accumulatedValue_ / blockValue) * blockValue; + // delete the consumed value + accumulatedValue_ -= diff; + } + value_ = value_ - diff; + if (value_ > max_) { + value_ = max_; + } + if (value_ < min_) { + value_ = min_; + } + if (onMoveEnd_) { + auto jsonResult = JsonUtil::Create(true); + jsonResult->Put("progress", std::to_string(value_).c_str()); + jsonResult->Put("isEnd", "false"); + onMoveEnd_(std::string(R"("change",)").append(jsonResult->ToString())); + } + MarkNeedRender(); +} + +void RenderWatchSlider::HandleDragEnd(double velocity) +{ + if (onMoveEnd_) { + auto jsonResult = JsonUtil::Create(true); + jsonResult->Put("progress", std::to_string(value_).c_str()); + jsonResult->Put("isEnd", "true"); + onMoveEnd_(std::string(R"("change",)").append(jsonResult->ToString())); + } + accumulatedValue_ = 0.0; + MarkNeedRender(); +} + +void RenderWatchSlider::OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) +{ + if (!disable_) { + dragDetector_->SetCoordinateOffset(coordinateOffset); + clickDetector_->SetCoordinateOffset(coordinateOffset); + result.emplace_back(dragDetector_); + result.emplace_back(clickDetector_); + } +} + +bool RenderWatchSlider::OnRotation(const RotationEvent& event) +{ + double eventValue = -1 * event.value; + accumulatedValue_ += eventValue; + if (!isContinuous_) { + if (accumulatedValue_ > THRESHOLD) { + value_ += INTERMITTENT_RATIO * (max_ - min_); + accumulatedValue_ = 0.0; + } else if (accumulatedValue_ < -THRESHOLD) { + value_ -= INTERMITTENT_RATIO * (max_ - min_); + accumulatedValue_ = 0.0; + } + } else { + auto context = GetContext().Upgrade(); + if (!context) { + LOGE("get context failed!"); + return false; + } + if (NearZero(GetLayoutSize().Height())) { + LOGE("slider layout height is near zero"); + return false; + } + double deltaPx = context->NormalizeToPx(Dimension(ROTATION_BASE_DELTA_DP, DimensionUnit::VP)); + double step = (max_ - min_) * deltaPx / GetLayoutSize().Height(); + double count = round(accumulatedValue_ / ROTATION_BASE_DELTA_DP); + value_ += count * step * SLIDER_CONTINUOUS_ROTATION_SENSITIVITY_NORMAL; + accumulatedValue_ = 0.0; + } + if (value_ > max_) { + value_ = max_; + } + if (value_ < min_) { + value_ = min_; + } + if (onMoveEnd_) { + auto jsonResult = JsonUtil::Create(true); + jsonResult->Put("progress", std::to_string(value_).c_str()); + jsonResult->Put("isEnd", "false"); + onMoveEnd_(std::string(R"("change",)").append(jsonResult->ToString())); + } + MarkNeedRender(); + return true; +} + +void RenderWatchSlider::OnPaintFinish() +{ + UpdateAccessibilityAttr(); +} + +void RenderWatchSlider::UpdateAccessibilityAttr() +{ + auto accessibilityNode = GetAccessibilityNode().Upgrade(); + if (!accessibilityNode) { + return; + } + accessibilityNode->SetAccessibilityValue(value_, min_, max_); +} + +void RenderWatchSlider::UpdatePosition(const Offset& offset) +{ + double iconSizeInPx = NormalizeToPx(ICON_SIZE); + double iconCenterX = offset.GetX() + GetLayoutSize().Width() / 2.0; + topIconPosition_ = + Offset(iconCenterX - (iconSizeInPx / 2.0), offset.GetY() + NormalizeToPx(PADDING_SIZE + PADDING_ICON)); + bottomIconPosition_ = Offset(iconCenterX - (iconSizeInPx / 2.0), + offset.GetY() + GetLayoutSize().Height() - NormalizeToPx(PADDING_SIZE + PADDING_ICON + ICON_SIZE)); + + topIconRect_.SetOffset( + Offset(iconCenterX - NormalizeToPx(HOT_REGION) / 2.0, offset.GetY() + NormalizeToPx(PADDING_SIZE))); + topIconRect_.SetSize(Size(NormalizeToPx(HOT_REGION), NormalizeToPx(HOT_REGION))); + bottomIconRect_.SetOffset(Offset(iconCenterX - NormalizeToPx(HOT_REGION) / 2.0, + offset.GetY() + GetLayoutSize().Height() - NormalizeToPx(PADDING_SIZE + HOT_REGION))); + bottomIconRect_.SetSize(Size(NormalizeToPx(HOT_REGION), NormalizeToPx(HOT_REGION))); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/watch_slider/render_watch_slider.h b/frameworks/core/components/watch_slider/render_watch_slider.h new file mode 100644 index 00000000..7bad2b76 --- /dev/null +++ b/frameworks/core/components/watch_slider/render_watch_slider.h @@ -0,0 +1,86 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_WATCH_SLIDER_RENDER_WATCH_SLIDER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_WATCH_SLIDER_RENDER_WATCH_SLIDER_H + +#include + +#include "core/components/common/rotation/rotation_node.h" +#include "core/components/watch_slider/watch_slider_component.h" +#include "core/gestures/click_recognizer.h" +#include "core/gestures/drag_recognizer.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderWatchSlider : public RenderNode, public RotationNode { + DECLARE_ACE_TYPE(RenderWatchSlider, RenderNode, RotationNode); + +public: + static RefPtr Create(); + + void Update(const RefPtr& component) override; + + void PerformLayout() override; + + void Initialize(); + + bool OnRotation(const RotationEvent& event) override; + + void UpdatePosition(const Offset& offset); + +protected: + Color backgroundColor_; + Color selectColor_; + std::string maxIconUrl_; + std::string minIconUrl_; + Rect topIconRect_; + Rect bottomIconRect_; + double value_ = 0.0; + double max_ = 100.0; + double min_ = 0.0; + double step_ = 1.0; + bool disable_ = false; + bool isContinuous_ = false; + + RefPtr topIcon_; + RefPtr bottomIcon_; + Offset topIconPosition_; + Offset bottomIconPosition_; + + double accumulatedValue_ = 0.0; + +private: + void HandleDragUpdate(double delta); + void HandleDragEnd(double delta); + void OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) override; + void HandleClick(const Offset& clickPosition); + + void OnPaintFinish() override; + void UpdateAccessibilityAttr(); + void InitAccessibilityEventListener(); + + std::function onMoveEnd_; + std::function onMoving_; + + RefPtr dragDetector_; + RefPtr clickDetector_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_WATCH_SLIDER_RENDER_WATCH_SLIDER_H diff --git a/frameworks/core/components/watch_slider/watch_slider_component.cpp b/frameworks/core/components/watch_slider/watch_slider_component.cpp new file mode 100644 index 00000000..69d5ea35 --- /dev/null +++ b/frameworks/core/components/watch_slider/watch_slider_component.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/watch_slider/watch_slider_component.h" + +#include "core/components/watch_slider/render_watch_slider.h" +#include "core/components/watch_slider/watch_slider_element.h" + +namespace OHOS::Ace { + +RefPtr WatchSliderComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +RefPtr WatchSliderComponent::CreateRenderNode() +{ + return RenderWatchSlider::Create(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/watch_slider/watch_slider_component.h b/frameworks/core/components/watch_slider/watch_slider_component.h new file mode 100644 index 00000000..2247cf6e --- /dev/null +++ b/frameworks/core/components/watch_slider/watch_slider_component.h @@ -0,0 +1,183 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_WATCH_SLIDER_WATCH_SLIDER_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_WATCH_SLIDER_WATCH_SLIDER_COMPONENT_H + +#include + +#include "core/components/common/properties/color.h" +#include "core/components/common/rotation/rotation_controller.h" +#include "core/event/ace_event_handler.h" +#include "core/pipeline/base/element.h" +#include "core/pipeline/base/render_component.h" + +namespace OHOS::Ace { + +class WatchSliderComponent : public RenderComponent { + DECLARE_ACE_TYPE(WatchSliderComponent, RenderComponent); + +public: + WatchSliderComponent() : rotationController_(AceType::MakeRefPtr()) {} + ~WatchSliderComponent() override = default; + + RefPtr CreateElement() override; + RefPtr CreateRenderNode() override; + + double GetMinValue() const + { + return min_; + } + + void SetMinValue(double min) + { + min_ = min; + } + + double GetMaxValue() const + { + return max_; + } + + void SetMaxValue(double min) + { + max_ = min; + } + + double GetStep() const + { + return step_; + } + + void SetStep(double step) + { + step_ = step; + } + + double GetValue() const + { + return value_; + } + + void SetValue(double value) + { + value_ = value; + } + + const EventMarker& GetOnMoveEndEventId() const + { + return onMoveEndEventId_; + } + + void SetOnMoveEndEventId(const EventMarker& methodId) + { + onMoveEndEventId_ = methodId; + } + + const EventMarker& GetOnMovingEventId() const + { + return onMovingEventId_; + } + + void SetOnMovingEventId(const EventMarker& methodId) + { + onMovingEventId_ = methodId; + } + + const std::string& GetMinIconUrl() const + { + return minIconUrl_; + } + + void SetMinIconUrl(const std::string& url) + { + minIconUrl_ = url; + } + + const std::string& GetMaxIconUrl() const + { + return maxIconUrl_; + } + + void SetMaxIconUrl(const std::string& url) + { + maxIconUrl_ = url; + } + + const Color& GetBackgroundColor() const + { + return color_; + } + + void SetBackgroundColor(const Color& color) + { + color_ = color; + } + + const Color& GetSelectColor() const + { + return selectColor_; + } + + void SetSelectColor(const Color& color) + { + selectColor_ = color; + } + + bool GetContinuous() const + { + return isContinuous_; + } + + void SetContinuous(bool flag) + { + isContinuous_ = flag; + } + + const RefPtr& GetRotationController() const + { + return rotationController_; + } + + void SetDisable(bool disable) + { + isDisable_ = disable; + } + + bool GetDisable() const + { + return isDisable_; + } + +private: + double max_ = 100.0; + double min_ = 0.0; + double step_ = 1.0; + double value_ = 100.0; + bool isDisable_ = false; + std::string minIconUrl_; + std::string maxIconUrl_; + Color color_; + Color selectColor_; + EventMarker onMoveEndEventId_; + EventMarker onMovingEventId_; + bool isContinuous_ = true; + + RefPtr rotationController_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_WATCH_SLIDER_WATCH_SLIDER_COMPONENT_H diff --git a/frameworks/core/components/watch_slider/watch_slider_element.h b/frameworks/core/components/watch_slider/watch_slider_element.h new file mode 100644 index 00000000..688c58a5 --- /dev/null +++ b/frameworks/core/components/watch_slider/watch_slider_element.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_WATCH_SLIDER_WATCH_SLIDER_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_WATCH_SLIDER_WATCH_SLIDER_ELEMENT_H + +#include "core/components/watch_slider/render_watch_slider.h" +#include "core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +class WatchSliderElement : public RenderElement, public FocusNode { + DECLARE_ACE_TYPE(WatchSliderElement, RenderElement, FocusNode); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_WATCH_SLIDER_WATCH_SLIDER_ELEMENT_H diff --git a/frameworks/core/components/web/BUILD.gn b/frameworks/core/components/web/BUILD.gn new file mode 100644 index 00000000..2b434dce --- /dev/null +++ b/frameworks/core/components/web/BUILD.gn @@ -0,0 +1,25 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("web") { + sources = [ + "flutter_render_web.cpp", + "render_web.cpp", + "resource/web_delegate.cpp", + "resource/web_resource.cpp", + "web_component.cpp", + "web_element.cpp", + ] +} diff --git a/frameworks/core/components/web/flutter_render_web.cpp b/frameworks/core/components/web/flutter_render_web.cpp new file mode 100644 index 00000000..b84bac21 --- /dev/null +++ b/frameworks/core/components/web/flutter_render_web.cpp @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/web/flutter_render_web.h" + +#include "flutter/fml/memory/ref_counted.h" +#include "flutter/lib/ui/painting/canvas.h" +#include "flutter/lib/ui/painting/picture_recorder.h" +#include "flutter/lib/ui/ui_dart_state.h" + +#include "base/log/ace_trace.h" +#include "base/log/dump_log.h" + +namespace OHOS::Ace { + +using namespace Flutter; + +RefPtr RenderWeb::Create() +{ + return AceType::MakeRefPtr(); +} + +void FlutterRenderWeb::PerformLayout() +{ + RenderWeb::PerformLayout(); +} + +void FlutterRenderWeb::DumpTree(int32_t depth) +{ + auto children = GetChildren(); + + if (DumpLog::GetInstance().GetDumpFile() > 0) { + DumpLog::GetInstance().AddDesc("sourceSize:", " width = ", GetLayoutSize().Width(), + " height = ", GetLayoutSize().Height()); + DumpLog::GetInstance().AddDesc("globalPosition:", "x = ", GetGlobalOffset().GetX(), + " y = ", GetGlobalOffset().GetY()); + DumpLog::GetInstance().Print(depth, AceType::TypeName(this), children.size()); + } + + for (const auto& item : children) { + item->DumpTree(depth + 1); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/web/flutter_render_web.h b/frameworks/core/components/web/flutter_render_web.h new file mode 100644 index 00000000..fdcc52a7 --- /dev/null +++ b/frameworks/core/components/web/flutter_render_web.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_WEB_FLUTTER_RENDER_WEB_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_WEB_FLUTTER_RENDER_WEB_H + +#include "core/components/common/properties/color.h" +#include "core/components/web/render_web.h" +#include "flutter/fml/memory/ref_counted.h" + +namespace OHOS::Ace { + +class FlutterRenderWeb final : public RenderWeb { + DECLARE_ACE_TYPE(FlutterRenderWeb, RenderWeb); + +public: + void DumpTree(int32_t depth) override; + +private: + void PerformLayout() override; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_WEB_FLUTTER_RENDER_WEB_H diff --git a/frameworks/core/components/web/render_web.cpp b/frameworks/core/components/web/render_web.cpp new file mode 100644 index 00000000..6cdce677 --- /dev/null +++ b/frameworks/core/components/web/render_web.cpp @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/web/render_web.h" + +#include +#include + +#include "base/log/log.h" +#include "core/event/ace_event_helper.h" + +namespace OHOS::Ace { + +void RenderWeb::OnAttachContext() +{ + auto pipelineContext = context_.Upgrade(); + if (!pipelineContext) { + LOGE("OnAttachContext context null"); + return; + } + if (delegate_) { + // web component is displayed in full screen by default. + drawSize_ = Size(pipelineContext->GetRootWidth(), pipelineContext->GetRootHeight()); + position_ = Offset(0, 0); + delegate_->CreatePlatformResource(drawSize_, position_, context_); + } +} + +void RenderWeb::Update(const RefPtr& component) +{ + if (!component) { + return; + } + MarkNeedLayout(); +} + +void RenderWeb::PerformLayout() +{ + if (!NeedLayout()) { + LOGI("RenderWeb::PerformLayout No Need to Layout"); + return; + } + + // render web do not support child. + drawSize_ = Size(GetLayoutParam().GetMaxSize().Width(), + (GetLayoutParam().GetMaxSize().Height() == Size::INFINITE_SIZE) ? + Size::INFINITE_SIZE : + (GetLayoutParam().GetMaxSize().Height())); + SetLayoutSize(drawSize_); + SetNeedLayout(false); + MarkNeedRender(); +} + +void RenderWeb::MarkNeedRender(bool overlay) +{ + RenderNode::MarkNeedRender(overlay); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/web/render_web.h b/frameworks/core/components/web/render_web.h new file mode 100644 index 00000000..b605ee10 --- /dev/null +++ b/frameworks/core/components/web/render_web.h @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_WEB_RENDER_WEB_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_WEB_RENDER_WEB_H + +#include "core/components/common/layout/constants.h" +#include "core/components/web/resource/web_delegate.h" +#include "core/components/web/web_component.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class RenderWeb : public RenderNode { + DECLARE_ACE_TYPE(RenderWeb, RenderNode); + +public: + static RefPtr Create(); + + RenderWeb() : RenderNode(true) {} + ~RenderWeb() override = default; + + void Update(const RefPtr& component) override; + void PerformLayout() override; + void MarkNeedRender(bool overlay = false); + void OnAttachContext() override; + + void SetDelegate(const RefPtr& delegate) + { + delegate_ = delegate; + } + +protected: + RefPtr delegate_; + +private: + Offset position_; + Size drawSize_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_WEB_RENDER_WEB_H diff --git a/frameworks/core/components/web/resource/web_delegate.cpp b/frameworks/core/components/web/resource/web_delegate.cpp new file mode 100644 index 00000000..5e4ffb11 --- /dev/null +++ b/frameworks/core/components/web/resource/web_delegate.cpp @@ -0,0 +1,381 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/web/resource/web_delegate.h" + +#include +#include +#include + +#include "base/log/log.h" +#include "core/event/ace_event_helper.h" +#include "core/event/back_end_event_manager.h" + +namespace OHOS::Ace { + +namespace { + +constexpr char WEB_METHOD_RELOAD[] = "reload"; +constexpr char WEB_METHOD_ROUTER_BACK[] = "routerBack"; +constexpr char WEB_METHOD_UPDATEURL[] = "updateUrl"; +constexpr char WEB_EVENT_PAGESTART[] = "onPageStarted"; +constexpr char WEB_EVENT_PAGEFINISH[] = "onPageFinished"; +constexpr char WEB_EVENT_PAGEERROR[] = "onPageError"; +constexpr char WEB_CREATE[] = "web"; +constexpr char NTC_PARAM_WEB[] = "web"; +constexpr char NTC_PARAM_WIDTH[] = "width"; +constexpr char NTC_PARAM_HEIGHT[] = "height"; +constexpr char NTC_PARAM_LEFT[] = "left"; +constexpr char NTC_PARAM_TOP[] = "top"; +constexpr char NTC_ERROR[] = "create error"; +constexpr char NTC_PARAM_SRC[] = "src"; +constexpr char NTC_PARAM_ERROR_CODE[] = "errorCode"; +constexpr char NTC_PARAM_URL[] = "url"; +constexpr char NTC_PARAM_DESCRIPTION[] = "description"; +constexpr char WEB_ERROR_CODE_CREATEFAIL[] = "error-web-delegate-000001"; +constexpr char WEB_ERROR_MSG_CREATEFAIL[] = "create web_delegate failed."; + +} // namespace + +WebDelegate::~WebDelegate() +{ + ReleasePlatformResource(); +} + +void WebDelegate::ReleasePlatformResource() +{ + auto delegate = WeakClaim(this).Upgrade(); + if (delegate) { + delegate->Stop(); + delegate->Release(); + } +} + +void WebDelegate::Stop() +{ + auto context = context_.Upgrade(); + if (!context) { + LOGE("fail to get context"); + return; + } + auto platformTaskExecutor = SingleTaskExecutor::Make(context->GetTaskExecutor(), + TaskExecutor::TaskType::PLATFORM); + if (platformTaskExecutor.IsRunOnCurrentThread()) { + UnregisterEvent(); + } else { + platformTaskExecutor.PostTask([weak = WeakClaim(this)] { + auto delegate = weak.Upgrade(); + if (delegate) { + delegate->UnregisterEvent(); + } + }); + } +} + +void WebDelegate::UnregisterEvent() +{ + auto context = context_.Upgrade(); + if (!context) { + LOGE("fail to get context"); + return; + } + auto resRegister = context->GetPlatformResRegister(); + resRegister->UnregisterEvent(MakeEventHash(WEB_EVENT_PAGESTART)); + resRegister->UnregisterEvent(MakeEventHash(WEB_EVENT_PAGEFINISH)); + resRegister->UnregisterEvent(MakeEventHash(WEB_EVENT_PAGEERROR)); +} + +void WebDelegate::CreatePlatformResource( + const Size& size, const Offset& position, const WeakPtr& context) +{ + ReleasePlatformResource(); + context_ = context; + CreatePluginResource(size, position, context); + + auto reloadCallback = [weak = WeakClaim(this)]() { + auto delegate = weak.Upgrade(); + if (!delegate) { + return false; + } + delegate->Reload(); + return true; + }; + WebClient::GetInstance().RegisterReloadCallback(reloadCallback); + + auto updateUrlCallback = [weak = WeakClaim(this)](const std::string& url) { + auto delegate = weak.Upgrade(); + if (!delegate) { + return false; + } + delegate->UpdateUrl(url); + return true; + }; + WebClient::GetInstance().RegisterUpdageUrlCallback(updateUrlCallback); + InitWebEvent(); +} + +void WebDelegate::CreatePluginResource( + const Size& size, const Offset& position, const WeakPtr& context) +{ + state_ = State::CREATING; + + auto webCom = webComponent_.Upgrade(); + if (!webCom) { + state_ = State::CREATEFAILED; + OnError(NTC_ERROR, "fail to call WebDelegate::Create due to webComponent is null"); + return; + } + + auto pipelineContext = context.Upgrade(); + if (!pipelineContext) { + state_ = State::CREATEFAILED; + OnError(NTC_ERROR, "fail to call WebDelegate::Create due to context is null"); + return; + } + context_ = context; + auto platformTaskExecutor = SingleTaskExecutor::Make(pipelineContext->GetTaskExecutor(), + TaskExecutor::TaskType::PLATFORM); + auto resRegister = pipelineContext->GetPlatformResRegister(); + + platformTaskExecutor.PostTask([this, resRegister, size, position] { + auto webCom = this->webComponent_.Upgrade(); + if (!webCom) { + OnError(NTC_ERROR, "fail to call WebDelegate::SetSrc PostTask"); + } + + if (!resRegister) { + if (onError_) { + onError_(WEB_ERROR_CODE_CREATEFAIL, WEB_ERROR_MSG_CREATEFAIL); + } + return; + } + auto context = this->context_.Upgrade(); + if (!context) { + LOGE("context is null"); + return; + } + + std::stringstream paramStream; + paramStream << NTC_PARAM_WEB << WEB_PARAM_EQUALS << id_ << WEB_PARAM_AND + << NTC_PARAM_WIDTH << WEB_PARAM_EQUALS + << size.Width() * context->GetViewScale() << WEB_PARAM_AND + << NTC_PARAM_HEIGHT << WEB_PARAM_EQUALS + << size.Height() * context->GetViewScale() << WEB_PARAM_AND + << NTC_PARAM_LEFT << WEB_PARAM_EQUALS + << position.GetX() * context->GetViewScale() << WEB_PARAM_AND + << NTC_PARAM_TOP << WEB_PARAM_EQUALS + << position.GetY() * context->GetViewScale() << WEB_PARAM_AND + << NTC_PARAM_SRC << WEB_PARAM_EQUALS << webCom->GetSrc(); + + std::string param = paramStream.str(); + id_ = resRegister->CreateResource(WEB_CREATE, param); + + if (id_ == INVALID_ID) { + if (onError_) { + onError_(WEB_ERROR_CODE_CREATEFAIL, WEB_ERROR_MSG_CREATEFAIL); + } + return; + } + state_ = State::CREATED; + hash_ = MakeResourceHash(); + RegisterWebEvent(); + BindRouterBackMethod(); + }); +} + +void WebDelegate::InitWebEvent() +{ + auto webCom = webComponent_.Upgrade(); + if (!webCom) { + state_ = State::CREATEFAILED; + OnError(NTC_ERROR, "fail to call WebDelegate::Create due to webComponent is null"); + return; + } + if (!webCom->GetPageStartedEventId().IsEmpty()) { + onPageStarted_ = + AceAsyncEvent::Create(webCom->GetPageStartedEventId(), context_); + } + if (!webCom->GetPageFinishedEventId().IsEmpty()) { + onPageFinished_ = + AceAsyncEvent::Create(webCom->GetPageFinishedEventId(), context_); + } + if (!webCom->GetPageErrorEventId().IsEmpty()) { + onPageError_ = + AceAsyncEvent::Create(webCom->GetPageErrorEventId(), context_); + } +} + +void WebDelegate::RegisterWebEvent() +{ + auto context = context_.Upgrade(); + if (!context) { + return; + } + auto resRegister = context->GetPlatformResRegister(); + resRegister->RegisterEvent(MakeEventHash(WEB_EVENT_PAGESTART), + [weak = WeakClaim(this)](const std::string& param) { + auto delegate = weak.Upgrade(); + if (delegate) { + delegate->OnPageStarted(param); + } + }); + resRegister->RegisterEvent(MakeEventHash(WEB_EVENT_PAGEFINISH), + [weak = WeakClaim(this)](const std::string& param) { + auto delegate = weak.Upgrade(); + if (delegate) { + delegate->OnPageFinished(param); + } + }); + resRegister->RegisterEvent(MakeEventHash(WEB_EVENT_PAGEERROR), + [weak = WeakClaim(this)](const std::string& param) { + auto delegate = weak.Upgrade(); + if (delegate) { + delegate->OnPageError(param); + } + }); +} + +// upper ui componnet which inherite from WebComponent +// could implement some curtain createdCallback to customized controller interface +// eg: web.loadurl. +void WebDelegate::AddCreatedCallback(const CreatedCallback& createdCallback) +{ + ACE_DCHECK(createdCallback != nullptr); + ACE_DCHECK(state_ != State::RELEASED); + createdCallbacks_.emplace_back(createdCallback); +} + +void WebDelegate::RemoveCreatedCallback() +{ + ACE_DCHECK(state_ != State::RELEASED); + createdCallbacks_.pop_back(); +} + +void WebDelegate::AddReleasedCallback(const ReleasedCallback& releasedCallback) +{ + ACE_DCHECK(releasedCallback != nullptr && state_ != State::RELEASED); + releasedCallbacks_.emplace_back(releasedCallback); +} + +void WebDelegate::RemoveReleasedCallback() +{ + ACE_DCHECK(state_ != State::RELEASED); + releasedCallbacks_.pop_back(); +} + +void WebDelegate::Reload() +{ + hash_ = MakeResourceHash(); + reloadMethod_ = MakeMethodHash(WEB_METHOD_RELOAD); + CallResRegisterMethod(reloadMethod_, WEB_PARAM_NONE, nullptr); +} + +void WebDelegate::UpdateUrl(const std::string& url) +{ + hash_ = MakeResourceHash(); + updateUrlMethod_ = MakeMethodHash(WEB_METHOD_UPDATEURL); + std::stringstream paramStream; + paramStream << NTC_PARAM_SRC << WEB_PARAM_EQUALS << url; + std::string param = paramStream.str(); + CallResRegisterMethod(updateUrlMethod_, param, nullptr); +} + +void WebDelegate::CallWebRouterBack() +{ + hash_ = MakeResourceHash(); + routerBackMethod_ = MakeMethodHash(WEB_METHOD_ROUTER_BACK); + CallResRegisterMethod(routerBackMethod_, WEB_PARAM_NONE, nullptr); +} + +void WebDelegate::OnPageStarted(const std::string& param) +{ + if (onPageStarted_) { + std::string paramStart = std::string(R"(")").append(param).append(std::string(R"(")")); + std::string param = + std::string(R"("pagestart",{"url":)").append(paramStart.append("},null")); + onPageStarted_(param); + } +} + +void WebDelegate::OnPageFinished(const std::string& param) +{ + if (onPageFinished_) { + std::string paramFinish = std::string(R"(")").append(param).append(std::string(R"(")")); + std::string param = + std::string(R"("pagefinish",{"url":)").append(paramFinish.append("},null")); + onPageFinished_(param); + } +} + +void WebDelegate::OnPageError(const std::string& param) +{ + if (onPageError_) { + int32_t errorCode = GetIntParam(param, NTC_PARAM_ERROR_CODE); + std::string url = GetUrlStringParam(param, NTC_PARAM_URL); + std::string description = GetStringParam(param, NTC_PARAM_DESCRIPTION); + + std::string paramUrl = std::string(R"(")").append(url) + .append(std::string(R"(")")) + .append(","); + + std::string paramErrorCode = std::string(R"(")").append(NTC_PARAM_ERROR_CODE) + .append(std::string(R"(")")) + .append(":") + .append(std::to_string(errorCode)) + .append(","); + + std::string paramDesc = std::string(R"(")").append(NTC_PARAM_DESCRIPTION) + .append(std::string(R"(")")) + .append(":") + .append(std::string(R"(")") + .append(description) + .append(std::string(R"(")"))); + std::string param = std::string(R"("error",{"url":)") + .append((paramUrl + paramErrorCode + paramDesc) + .append("},null")); + onPageError_(param); + } +} + +std::string WebDelegate::GetUrlStringParam(const std::string& param, const std::string& name) const +{ + size_t len = name.length(); + size_t posErrorCode = param.find(NTC_PARAM_ERROR_CODE); + size_t pos = param.find(name); + std::string result; + + if (pos != std::string::npos && posErrorCode != std::string::npos) { + std::stringstream ss; + + ss << param.substr(pos + 1 + len, posErrorCode - 5); + ss >> result; + } + return result; +} + +void WebDelegate::BindRouterBackMethod() +{ + auto context = context_.Upgrade(); + if (context) { + context->SetRouterBackEventHandler([weak = WeakClaim(this)] { + auto delegate = weak.Upgrade(); + if (delegate) { + delegate->CallWebRouterBack(); + } + }); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/web/resource/web_delegate.h b/frameworks/core/components/web/resource/web_delegate.h new file mode 100644 index 00000000..a8734113 --- /dev/null +++ b/frameworks/core/components/web/resource/web_delegate.h @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_WEB_RESOURCE_WEB_DELEGATE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_WEB_RESOURCE_WEB_DELEGATE_H + +#include + +#include "core/components/common/layout/constants.h" +#include "core/components/web/resource/web_resource.h" +#include "core/components/web/web_component.h" + +namespace OHOS::Ace { + +class WebDelegate : public WebResource { + DECLARE_ACE_TYPE(WebDelegate, WebResource); + +public: + using CreatedCallback = std::function; + using ReleasedCallback = std::function; + using EventCallback = std::function; + enum class State: char { + WAITINGFORSIZE, + CREATING, + CREATED, + CREATEFAILED, + RELEASED, + }; + + WebDelegate() = delete; + ~WebDelegate() override; + WebDelegate(const WeakPtr& webComponent, + const WeakPtr& context, ErrorCallback&& onError, const std::string& type) + : WebResource(type, context, std::move(onError)), + webComponent_(webComponent), state_(State::WAITINGFORSIZE) { + ACE_DCHECK(!type.empty()); + } + + void CreatePlatformResource(const Size& size, const Offset& position, + const WeakPtr& context); + void CreatePluginResource(const Size& size, const Offset& position, + const WeakPtr& context); + void AddCreatedCallback(const CreatedCallback& createdCallback); + void RemoveCreatedCallback(); + void AddReleasedCallback(const ReleasedCallback& releasedCallback); + void RemoveReleasedCallback(); + void Reload(); + void UpdateUrl(const std::string& url); + +private: + void InitWebEvent(); + void RegisterWebEvent(); + void ReleasePlatformResource(); + void Stop(); + void UnregisterEvent(); + void OnPageStarted(const std::string& param); + void OnPageFinished(const std::string& param); + void OnPageError(const std::string& param); + std::string GetUrlStringParam(const std::string& param, const std::string& name) const; + void CallWebRouterBack(); + void BindRouterBackMethod(); + + WeakPtr webComponent_; + std::list createdCallbacks_; + std::list releasedCallbacks_; + EventCallback onPageStarted_; + EventCallback onPageFinished_; + EventCallback onPageError_; + Method reloadMethod_; + Method updateUrlMethod_; + Method routerBackMethod_; + State state_ {State::WAITINGFORSIZE}; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_WEB_RESOURCE_WEB_DELEGATE_H diff --git a/frameworks/core/components/web/resource/web_resource.cpp b/frameworks/core/components/web/resource/web_resource.cpp new file mode 100644 index 00000000..5cdd4dbb --- /dev/null +++ b/frameworks/core/components/web/resource/web_resource.cpp @@ -0,0 +1,179 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/web/resource/web_resource.h" + +#include + +#include "base/log/log.h" + +namespace OHOS::Ace { + +const char WEB_PARAM_NONE[] = ""; +const char WEB_PARAM_AND[] = "#HWJS-&-#"; +const char WEB_PARAM_VALUE[] = "value"; +const char WEB_PARAM_EQUALS[] = "#HWJS-=-#"; +const char WEB_PARAM_BEGIN[] = "#HWJS-?-#"; +const char WEB_METHOD[] = "method"; +const char WEB_EVENT[] = "event"; +const char WEB_RESULT_FAIL[] = "fail"; + +void WebResource::Release(const std::function& onRelease) +{ + if (id_ == INVALID_ID) { + return; + } + + auto context = context_.Upgrade(); + if (!context) { + LOGE("fail to release resource due to context is null"); + return; + } + + auto resRegister = context->GetPlatformResRegister(); + auto platformTaskExecutor = SingleTaskExecutor::Make(context->GetTaskExecutor(), + TaskExecutor::TaskType::PLATFORM); + auto releaseTask = [this, resRegister, onRelease] { + bool ret = resRegister->ReleaseResource(hash_); + if (ret) { + id_ = INVALID_ID; + hash_.clear(); + } + + if (onRelease) { + onRelease(ret); + } + }; + if (platformTaskExecutor.IsRunOnCurrentThread()) { + releaseTask(); + } else { + platformTaskExecutor.PostTask(releaseTask); + } +} + +double WebResource::GetDoubleParam(const std::string& param, const std::string& name) const +{ + size_t len = name.length(); + size_t pos = param.find(name); + double result = 0.0; + + if (pos != std::string::npos) { + std::stringstream ss; + + ss << param.substr(pos + 1 + len); + ss >> result; + } + + return result; +} + +int32_t WebResource::GetIntParam(const std::string& param, const std::string& name) const +{ + size_t len = name.length(); + size_t pos = param.find(name); + int32_t result = 0; + + if (pos != std::string::npos) { + std::stringstream ss; + + ss << param.substr(pos + 1 + len); + ss >> result; + } + + return result; +} + +std::string WebResource::MakeResourceHash() const +{ + std::stringstream hashCode; + hashCode << type_ << "@" << id_; + + return hashCode.str(); +} + +std::string WebResource::MakeEventHash(const std::string& event) const +{ + std::string eventHash = hash_; + + eventHash += std::string(WEB_EVENT); + eventHash += std::string(WEB_PARAM_EQUALS); + eventHash += event; + eventHash += std::string(WEB_PARAM_BEGIN); + + return eventHash; +} + +std::string WebResource::MakeMethodHash(const std::string& method) const +{ + std::string methodHash = hash_; + + methodHash += std::string(WEB_METHOD); + methodHash += std::string(WEB_PARAM_EQUALS); + methodHash += method; + methodHash += std::string(WEB_PARAM_BEGIN); + + return methodHash; +} + +void WebResource::OnError(const std::string& errorCode, const std::string& errorMsg) +{ + if (onError_) { + onError_(errorCode, errorMsg); + } +} + +void WebResource::CallResRegisterMethod(const std::string& method, + const std::string& param, + const std::function& callback) +{ + if (method.empty()) { + return; + } + + auto context = context_.Upgrade(); + if (!context) { + LOGE("fail to get context to call res register method"); + return; + } + + auto resRegister = context->GetPlatformResRegister(); + auto platformTaskExecutor = SingleTaskExecutor::Make(context->GetTaskExecutor(), + TaskExecutor::TaskType::PLATFORM); + + platformTaskExecutor.PostTask([method, param, resRegister, callback] { + std::string result; + resRegister->OnMethodCall(method, param, result); + if (callback) { + callback(result); + } + }); +} + +std::string WebResource::GetStringParam(const std::string& param, const std::string& name) const +{ + size_t len = name.length(); + size_t pos = param.find(name); + std::string result; + + if (pos != std::string::npos) { + std::stringstream ss; + + ss << param.substr(pos + 1 + len); + ss >> result; + } + return result; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/web/resource/web_resource.h b/frameworks/core/components/web/resource/web_resource.h new file mode 100644 index 00000000..2a15c336 --- /dev/null +++ b/frameworks/core/components/web/resource/web_resource.h @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_WEB_RESOURCE_WEB_RESOURCE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_WEB_RESOURCE_WEB_RESOURCE_H + +#include + +#include "base/memory/ace_type.h" +#include "core/pipeline/pipeline_context.h" + +namespace OHOS::Ace { + +constexpr int64_t INVALID_ID = -1; + +extern const char WEB_PARAM_NONE[]; +extern const char WEB_PARAM_AND[]; +extern const char WEB_PARAM_VALUE[]; +extern const char WEB_PARAM_EQUALS[]; +extern const char WEB_PARAM_BEGIN[]; +extern const char WEB_METHOD[]; +extern const char WEB_EVENT[]; +extern const char WEB_RESULT_FAIL[]; + +class WebResource : public virtual AceType { + DECLARE_ACE_TYPE(WebResource, AceType); + +public: + using ErrorCallback = std::function; + using Method = std::string; + + WebResource(const std::string& type, + const WeakPtr& context, ErrorCallback&& onError) + : type_(type), context_(context), onError_(std::move(onError)) + {} + virtual ~WebResource() = default; + + void Release(const std::function& onRelease = nullptr); + + void CallResRegisterMethod(const Method& method, const std::string& param, + const std::function& callback = nullptr); + + int64_t GetId() const + { + return id_; + } + + const std::string& GetHashCode() const + { + return hash_; + } + +protected: + double GetDoubleParam(const std::string& param, const std::string& name) const; + int32_t GetIntParam(const std::string& param, const std::string& name) const; + std::string GetStringParam(const std::string& param, const std::string& name) const; + std::string MakeResourceHash() const; + std::string MakeEventHash(const std::string& event) const; + std::string MakeMethodHash(const std::string& method) const; + + void OnError(const std::string& errorCode, const std::string& errorMsg); + + int64_t id_ = INVALID_ID; + std::string hash_; + std::string type_; + WeakPtr context_; + ErrorCallback onError_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_WEB_RESOURCE_WEB_RESOURCE_H diff --git a/frameworks/core/components/web/web_component.cpp b/frameworks/core/components/web/web_component.cpp new file mode 100644 index 00000000..d58a8622 --- /dev/null +++ b/frameworks/core/components/web/web_component.cpp @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/web/web_component.h" + +#include "base/geometry/offset.h" +#include "base/geometry/size.h" +#include "base/log/log.h" +#include "core/components/web/render_web.h" +#include "core/components/web/resource/web_delegate.h" +#include "core/components/web/web_element.h" + +#include +#include + +namespace OHOS::Ace { + +WebComponent::WebComponent(const std::string& type) : type_(type) +{ + ACE_DCHECK(!type_.empty()); +} + +RefPtr WebComponent::CreateRenderNode() +{ + RefPtr renderNode = RenderWeb::Create(); + delegate_ = AceType::MakeRefPtr(AceType::WeakClaim(this), + renderNode->GetContext(), + std::move(errorCallback_), type_); + if (createdCallback_ != nullptr) { + delegate_->AddCreatedCallback(createdCallback_); + } + auto renderWeb = AceType::DynamicCast(renderNode); + delegate_->AddCreatedCallback([renderWeb, this]() { + if (!renderWeb) { + LOGE("renderWeb is null"); + return; + } + auto pipelineContext = renderWeb->GetContext().Upgrade(); + if (!pipelineContext) { + LOGE("fail to create Update due to context is null"); + return; + } + auto uiTaskExecutor = SingleTaskExecutor::Make(pipelineContext->GetTaskExecutor(), + TaskExecutor::TaskType::UI); + uiTaskExecutor.PostTask([renderWeb, this] { + if (renderWeb) { + renderWeb->Update(AceType::Claim(this)); + } + }); + }); + renderWeb->SetDelegate(delegate_); + return renderNode; +} + +RefPtr WebComponent::CreateElement() +{ + return AceType::MakeRefPtr(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/web/web_component.h b/frameworks/core/components/web/web_component.h new file mode 100644 index 00000000..401e68e3 --- /dev/null +++ b/frameworks/core/components/web/web_component.h @@ -0,0 +1,162 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_WEB_WEB_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_WEB_WEB_COMPONENT_H + +#include + +#include "base/geometry/size.h" +#include "base/utils/utils.h" +#include "core/pipeline/base/element.h" + +namespace OHOS::Ace { + +class WebClient { +public: + using ReloadCallback = std::function; + using UpdateUrlCallback = std::function; + WebClient &operator = (const WebClient &) = delete; + WebClient(const WebClient &) = delete; + ~WebClient() = default; + + static WebClient& GetInstance() + { + static WebClient instance; + return instance; + } + + void RegisterReloadCallback(ReloadCallback&& callback) + { + reloadCallback_ = callback; + } + + void RegisterUpdageUrlCallback(UpdateUrlCallback&& callback) + { + updateUrlCallback_ = callback; + } + + void UpdateWebviewUrl(const std::string& url) + { + if (updateUrlCallback_) { + return updateUrlCallback_(url); + } + } + + bool ReloadWebview() + { + if (reloadCallback_) { + return reloadCallback_(); + } else { + return false; + } + } + +private: + WebClient() = default; + ReloadCallback reloadCallback_; + UpdateUrlCallback updateUrlCallback_; +}; + +class WebDelegate; +// A component can show HTML5 webpages. +class WebComponent : public RenderComponent { + DECLARE_ACE_TYPE(WebComponent, RenderComponent); + +public: + using CreatedCallback = std::function; + using ReleasedCallback = std::function; + using ErrorCallback = std::function; + using MethodCall = std::function; + using Method = std::string; + + WebComponent() = default; + explicit WebComponent(const std::string& type); + ~WebComponent() override = default; + + RefPtr CreateRenderNode() override; + RefPtr CreateElement() override; + + void SetType(const std::string& type) + { + type_ = type; + } + + const std::string& GetType() const + { + return type_; + } + + void SetSrc(const std::string& src) + { + src_ = src; + } + + const std::string& GetSrc() const + { + return src_; + } + + void SetPageStartedEventId(const EventMarker& pageStartedEventId) + { + pageStartedEventId_ = pageStartedEventId; + } + + const EventMarker& GetPageStartedEventId() const + { + return pageStartedEventId_; + } + + void SetPageFinishedEventId(const EventMarker& pageFinishedEventId) + { + pageFinishedEventId_ = pageFinishedEventId; + } + + const EventMarker& GetPageFinishedEventId() const + { + return pageFinishedEventId_; + } + + void SetPageErrorEventId(const EventMarker& pageErrorEventId) + { + pageErrorEventId_ = pageErrorEventId; + } + + const EventMarker& GetPageErrorEventId() const + { + return pageErrorEventId_; + } + + void Reload() + { + WebClient::GetInstance().ReloadWebview(); + } + +private: + CreatedCallback createdCallback_ = nullptr; + ReleasedCallback releasedCallback_ = nullptr; + ErrorCallback errorCallback_ = nullptr; + RefPtr delegate_; + EventMarker pageStartedEventId_; + EventMarker pageFinishedEventId_; + EventMarker pageErrorEventId_; + + std::string type_; + std::string src_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_WEB_WEB_COMPONENT_H diff --git a/frameworks/core/components/web/web_element.cpp b/frameworks/core/components/web/web_element.cpp new file mode 100644 index 00000000..22261c42 --- /dev/null +++ b/frameworks/core/components/web/web_element.cpp @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/web/web_element.h" + +#include "core/components/web/web_component.h" + +namespace OHOS::Ace { + +void WebElement::SetNewComponent(const RefPtr& newComponent) +{ + if (newComponent == nullptr) { + Element::SetNewComponent(newComponent); + return; + } + auto webComponent = AceType::DynamicCast(newComponent); + if (webComponent) { + if (!webSrc_.empty() && webSrc_ != webComponent->GetSrc()) { + WebClient::GetInstance().UpdateWebviewUrl(webComponent->GetSrc()); + } + webSrc_ = webComponent->GetSrc(); + Element::SetNewComponent(webComponent); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/web/web_element.h b/frameworks/core/components/web/web_element.h new file mode 100644 index 00000000..055339b1 --- /dev/null +++ b/frameworks/core/components/web/web_element.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_WEB_WEB_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_WEB_WEB_ELEMENT_H + +#include "core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +class WebElement : public RenderElement { + DECLARE_ACE_TYPE(WebElement, RenderElement); + +public: + void SetNewComponent(const RefPtr& newComponent) override; + +private: + std::string webSrc_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_WEB_WEB_ELEMENT_H diff --git a/frameworks/core/components/wrap/BUILD.gn b/frameworks/core/components/wrap/BUILD.gn new file mode 100644 index 00000000..31be903d --- /dev/null +++ b/frameworks/core/components/wrap/BUILD.gn @@ -0,0 +1,21 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//foundation/ace/ace_engine/frameworks/core/components/components.gni") + +build_component("wrap") { + sources = [ + "render_wrap.cpp", + "wrap_element.cpp", + ] +} diff --git a/frameworks/core/components/wrap/render_wrap.cpp b/frameworks/core/components/wrap/render_wrap.cpp new file mode 100644 index 00000000..76fd6662 --- /dev/null +++ b/frameworks/core/components/wrap/render_wrap.cpp @@ -0,0 +1,481 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/wrap/render_wrap.h" + +#include + +#include "core/components/wrap/wrap_component.h" + +namespace OHOS::Ace { + +RefPtr RenderWrap::Create() +{ + return AceType::MakeRefPtr(); +} + +void RenderWrap::Update(const RefPtr& component) +{ + const RefPtr wrap = AceType::DynamicCast(component); + if (!wrap) { + LOGE("Wrap::RenderWrap update dynamicCast to nullptr error"); + return; + } + direction_ = wrap->GetDirection(); + // Whole alignment + alignment_ = wrap->GetAlignment(); + // content main alignment + mainAlignment_ = wrap->GetMainAlignment(); + // content cross alignment + crossAlignment_ = wrap->GetCrossAlignment(); + spacing_ = wrap->GetSpacing(); + contentSpace_ = wrap->GetContentSpacing(); + dialogStretch_ = wrap->GetDialogStretch(); + SetTextDirection(wrap->GetTextDirection()); + isLeftToRight_ = (wrap->GetTextDirection() == TextDirection::LTR); + contentList_.clear(); + MarkNeedLayout(); +} + +void RenderWrap::PerformLayout() +{ + if (GetChildren().empty()) { + // no child will set current to empty and return + SetLayoutSize(Size(0.0, 0.0)); + return; + } + + PerformLayoutInitialize(); + + // overall size including space + totalMainLength_ = 0.0; + totalCrossLength_ = 0.0; + + LayoutParam layoutParam; + layoutParam.SetMinSize(Size(0.0, 0.0)); + layoutParam.SetMaxSize(GetLeftSize(0.0, mainLengthLimit_, crossLengthLimit_)); + if (dialogStretch_) { + HandleDialogStretch(layoutParam); + } else { + auto spacing = NormalizeToPx(spacing_); + auto contentSpace = NormalizeToPx(contentSpace_); + // content size + double currentMainLength = 0.0; + // the cross length is without space + double currentCrossLength = 0.0; + // number of item in content + int32_t count = 0; + std::list> itemsList; + for (auto& item : GetChildren()) { + item->Layout(layoutParam); + + if (mainLengthLimit_ >= currentMainLength + GetMainItemLength(item)) { + currentMainLength += GetMainItemLength(item); + currentMainLength += spacing; + currentCrossLength = std::max(currentCrossLength, GetCrossItemLength(item)); + itemsList.push_back(item); + count += 1; + } else { + currentMainLength -= spacing; + if (direction_ == WrapDirection::HORIZONTAL && !isLeftToRight_) { + itemsList.reverse(); + } + contentList_.emplace_back(ContentInfo(currentMainLength, currentCrossLength, count, itemsList)); + itemsList.clear(); + totalMainLength_ = std::max(currentMainLength, totalMainLength_); + totalCrossLength_ += currentCrossLength + contentSpace; + currentMainLength = GetMainItemLength(item) + spacing; + currentCrossLength = GetCrossItemLength(item); + itemsList.push_back(item); + count = 1; + } + } + // Add last content into list + currentMainLength -= spacing; + if (direction_ == WrapDirection::HORIZONTAL && !isLeftToRight_) { + itemsList.reverse(); + } + contentList_.emplace_back(ContentInfo(currentMainLength, currentCrossLength, count, itemsList)); + if (direction_ == WrapDirection::VERTICAL && !isLeftToRight_) { + contentList_.reverse(); + } + totalMainLength_ = std::max(currentMainLength, totalMainLength_); + // n contents has n - 1 space + totalCrossLength_ += currentCrossLength; + } + LayoutWholeWrap(); + SetWrapLayoutSize(mainLengthLimit_, totalCrossLength_); + contentList_.clear(); +} + +void RenderWrap::HandleDialogStretch(const LayoutParam& layoutParam) +{ + int32_t dialogButtonNum = 0; + double totalLength = 0.0; + auto spacing = NormalizeToPx(spacing_); + auto contentSpace = NormalizeToPx(contentSpace_); + // whether the btn in the wrap needs wrap + for (const auto& item : GetChildren()) { + dialogButtonNum += 1; + item->Layout(layoutParam); + totalLength += GetMainItemLength(item) + spacing; + if (totalLength - spacing > mainLengthLimit_) { + dialogDirection_ = WrapDirection::VERTICAL; + } + } + if (dialogButtonNum == 0) { + LOGW("dialog button number is 0"); + return; + } + + double buttonSize = (mainLengthLimit_ - spacing * (dialogButtonNum - 1)) / dialogButtonNum; + std::list> itemsList; + for (const auto& item : GetChildren()) { + LayoutParam newParam; + // if dialog is vertical, stretch each button equally to fill max length, otherwise stretch equally in same line + double stretchSize = dialogDirection_ == WrapDirection::VERTICAL ? mainLengthLimit_ : buttonSize; + newParam.SetFixedSize( + (direction_ == WrapDirection::HORIZONTAL ? Size(stretchSize, item->GetLayoutSize().Height()) + : Size(item->GetLayoutSize().Width(), stretchSize))); + item->Layout(newParam); + itemsList.push_back(item); + totalMainLength_ = mainLengthLimit_; + + if (dialogDirection_ == WrapDirection::VERTICAL) { + // stretch each button equally to fill max length + + totalCrossLength_ += direction_ == WrapDirection::HORIZONTAL ? item->GetLayoutSize().Height() + : item->GetLayoutSize().Width(); + totalCrossLength_ += contentSpace; + contentList_.emplace_back( + ContentInfo(newParam.GetMaxSize().Width(), newParam.GetMaxSize().Height(), 1, itemsList)); + itemsList.clear(); + } else { + // stretch each button equally in same line + totalCrossLength_ = std::max(direction_ == WrapDirection::HORIZONTAL ? item->GetLayoutSize().Height() + : item->GetLayoutSize().Width(), + totalCrossLength_); + } + } + // if wrap direction is vertical, item has already added into content list + if (dialogDirection_ == WrapDirection::VERTICAL) { + totalCrossLength_ -= contentSpace; + return; + } + if (!isLeftToRight_) { + itemsList.reverse(); + } + if (direction_ == WrapDirection::HORIZONTAL) { + contentList_.emplace_back(ContentInfo(mainLengthLimit_, totalCrossLength_, dialogButtonNum, itemsList)); + } else { + contentList_.emplace_back(ContentInfo(totalCrossLength_, mainLengthLimit_, dialogButtonNum, itemsList)); + } +} + +double RenderWrap::GetMainItemLength(const RefPtr& item) const +{ + return direction_ == WrapDirection::HORIZONTAL ? item->GetLayoutSize().Width() : item->GetLayoutSize().Height(); +} + +double RenderWrap::GetCrossItemLength(const RefPtr& item) const +{ + return direction_ == WrapDirection::VERTICAL ? item->GetLayoutSize().Width() : item->GetLayoutSize().Height(); +} + +void RenderWrap::PerformLayoutInitialize() +{ + if (direction_ == WrapDirection::HORIZONTAL) { + mainLengthLimit_ = GetLayoutParam().GetMaxSize().Width(); + crossLengthLimit_ = GetLayoutParam().GetMaxSize().Height(); + } else { + mainLengthLimit_ = + GetLayoutParam().GetMaxSize().IsInfinite() ? viewPort_.Height() : GetLayoutParam().GetMaxSize().Height(); + crossLengthLimit_ = GetLayoutParam().GetMaxSize().Width(); + } +} + +Size RenderWrap::GetLeftSize(double crossLength, double mainLeftLength, double crossLeftLength) const +{ + if (direction_ == WrapDirection::HORIZONTAL) { + return Size(mainLeftLength, crossLeftLength - crossLength); + } else { + return Size(crossLeftLength - crossLength, mainLeftLength); + } +} + +void RenderWrap::LayoutWholeWrap() +{ + int32_t contentNum = contentList_.size(); + if (contentNum == 0) { + LOGW("no content in wrap"); + return; + } + Offset startPosition; + + switch (alignment_) { + case WrapAlignment::START: { + startPosition = Offset(0.0, 0.0); + break; + } + case WrapAlignment::END: { + startPosition = GetContentOffset(totalCrossLength_); + break; + } + case WrapAlignment::CENTER: { + // divided the space by two + startPosition = GetContentOffset(totalCrossLength_) / 2; + break; + } + case WrapAlignment::SPACE_BETWEEN: { + startPosition = Offset(0.0, 0.0); + break; + } + case WrapAlignment::SPACE_AROUND: { + double leftSpace = crossLengthLimit_ - totalCrossLength_; + double crossSpace = leftSpace / contentNum; + startPosition = Offset(direction_ == WrapDirection::HORIZONTAL ? 0.0 : crossSpace / 2, + direction_ == WrapDirection::HORIZONTAL ? crossSpace / 2 : 0.0); + break; + } + default: { + LOGE("Wrap::alignment setting error."); + startPosition = Offset(0.0, 0.0); + break; + } + } + TraverseContent(startPosition); +} + +Offset RenderWrap::GetContentOffset(double totalCrossLength) const +{ + if (direction_ == WrapDirection::HORIZONTAL) { + return Offset(0.0, crossLengthLimit_ - totalCrossLength); + } else { + return Offset(crossLengthLimit_ - totalCrossLength, 0.0); + } +} + +void RenderWrap::TraverseContent(const Offset& startPosition) const +{ + // determine the content start position by main axis + Offset accumulateOffset = startPosition; + int32_t startItemIndex = 0; + double currentMainSpaceLength = 0.0; + for (const auto& content : contentList_) { + // dfs positioned item in each content + currentMainSpaceLength = mainLengthLimit_ - content.mainLength_; + int32_t itemNum = content.count_; + if (itemNum == 0) { + LOGE("fail to TraverseContent due to item num is zero"); + return; + } + + switch (mainAlignment_) { + case WrapAlignment::START: { + if (direction_ == WrapDirection::HORIZONTAL && !isLeftToRight_) { + PositionedItem(0.0, content, accumulateOffset + GetItemMainOffset(currentMainSpaceLength), + content.crossLength_); + } else { + PositionedItem(0.0, content, accumulateOffset, content.crossLength_); + } + break; + } + case WrapAlignment::END: { + if (direction_ == WrapDirection::HORIZONTAL && !isLeftToRight_) { + PositionedItem(0.0, content, accumulateOffset, content.crossLength_); + } else { + PositionedItem(0.0, content, accumulateOffset + GetItemMainOffset(currentMainSpaceLength), + content.crossLength_); + } + break; + } + case WrapAlignment::CENTER: { + // divided the space by two + PositionedItem(0.0, content, accumulateOffset + GetItemMainOffset(currentMainSpaceLength / 2), + content.crossLength_); + break; + } + case WrapAlignment::SPACE_BETWEEN: { + double betweenSpace = (itemNum - 1 == 0) ? 0.0 : currentMainSpaceLength / (itemNum - 1); + PositionedItem(betweenSpace, content, accumulateOffset, content.crossLength_); + break; + } + case WrapAlignment::SPACE_AROUND: { + double itemMainSpace = currentMainSpaceLength / itemNum; + PositionedItem(itemMainSpace, content, accumulateOffset + GetItemMainOffset(itemMainSpace / 2), + content.crossLength_); + break; + } + default: { + LOGE("Wrap::mainAlignment setting error. Now using START"); + PositionedItem(0.0, content, accumulateOffset, content.crossLength_); + break; + } + } + auto contentSpace = NormalizeToPx(contentSpace_); + startItemIndex += itemNum; + accumulateOffset += (direction_ == WrapDirection::HORIZONTAL) + ? Offset(0.0, content.crossLength_ + contentSpace) + : Offset(content.crossLength_ + contentSpace, 0.0); + } +} + +Offset RenderWrap::GetItemMainOffset(double mainSpace) const +{ + // calculate the offset of each item in content + if (direction_ == WrapDirection::HORIZONTAL) { + return Offset(mainSpace, 0.0); + } else { + return Offset(0.0, mainSpace); + } +} + +void RenderWrap::PositionedItem( + double betweenSpace, const ContentInfo& content, const Offset& position, double totalCrossSpace) const +{ + Offset itemPositionOffset = Offset(0.0, 0.0); + // iterate every item in content + for (const auto& item : content.itemList_) { + switch (crossAlignment_) { + case WrapAlignment::START: { + if (direction_ == WrapDirection::VERTICAL && !isLeftToRight_) { + HandleEndAlignment(totalCrossSpace, item, position, betweenSpace, itemPositionOffset); + } else { + HandleStartAlignment(item, position, betweenSpace, itemPositionOffset); + } + break; + } + case WrapAlignment::STRETCH: { + PlaceItemAndLog(item, position + itemPositionOffset, "STRETCH"); + // stretch the component in wrap + LayoutParam layoutParam; + auto spacing = NormalizeToPx(spacing_); + if (direction_ == WrapDirection::HORIZONTAL) { + itemPositionOffset += Offset(item->GetLayoutSize().Width() + betweenSpace + spacing, 0.0); + layoutParam.SetFixedSize(Size(item->GetLayoutSize().Width(), totalCrossSpace)); + } else { + itemPositionOffset += Offset(0.0, item->GetLayoutSize().Height() + betweenSpace + spacing); + layoutParam.SetFixedSize(Size(totalCrossSpace, item->GetLayoutSize().Height())); + } + item->Layout(layoutParam); + break; + } + case WrapAlignment::END: { + if (direction_ == WrapDirection::VERTICAL && !isLeftToRight_) { + HandleStartAlignment(item, position, betweenSpace, itemPositionOffset); + } else { + HandleEndAlignment(totalCrossSpace, item, position, betweenSpace, itemPositionOffset); + } + break; + } + case WrapAlignment::CENTER: { + // divide the space by two + HandleCenterAlignment(totalCrossSpace, item, position, betweenSpace, itemPositionOffset); + break; + } + default: { + LOGW("Wrap::crossAlignment setting error. Now using START"); + if (direction_ == WrapDirection::VERTICAL && !isLeftToRight_) { + HandleEndAlignment(totalCrossSpace, item, position, betweenSpace, itemPositionOffset); + } else { + HandleStartAlignment(item, position, betweenSpace, itemPositionOffset); + } + break; + } + } + } +} + +void RenderWrap::PlaceItemAndLog(const RefPtr& node, const Offset& position, const std::string& align) const +{ + node->SetPosition(position); + LOGD("Wrap::PositionedItem %s item position x:%lf, y:%lf", align.c_str(), position.GetX(), position.GetY()); +} + +void RenderWrap::HandleCenterAlignment(double totalCrossSpace, const RefPtr& item, const Offset& position, + double betweenSpace, Offset& itemPositionOffset) const +{ + // itemPositionOffset will change in this function + Offset crossOffset; + auto spacing = NormalizeToPx(spacing_); + if (direction_ == WrapDirection::HORIZONTAL) { + crossOffset = Offset(0.0, (totalCrossSpace - item->GetLayoutSize().Height()) / 2.0); + PlaceItemAndLog(item, position + itemPositionOffset + crossOffset, "CENTER"); + itemPositionOffset += Offset(item->GetLayoutSize().Width() + betweenSpace + spacing, 0.0); + } else { + crossOffset = Offset((totalCrossSpace - item->GetLayoutSize().Width()) / 2, 0.0); + PlaceItemAndLog(item, position + itemPositionOffset + crossOffset, "CENTER"); + itemPositionOffset += Offset(0.0, item->GetLayoutSize().Height() + betweenSpace + spacing); + } +} + +void RenderWrap::HandleEndAlignment(double totalCrossSpace, const RefPtr& item, const Offset& position, + double betweenSpace, Offset& itemPositionOffset) const +{ + // itemPositionOffset will change in this function + Offset crossOffset; + auto spacing = NormalizeToPx(spacing_); + if (direction_ == WrapDirection::HORIZONTAL) { + crossOffset = Offset(0.0, totalCrossSpace - item->GetLayoutSize().Height()); + PlaceItemAndLog(item, position + itemPositionOffset + crossOffset, "END"); + itemPositionOffset += Offset(item->GetLayoutSize().Width() + betweenSpace + spacing, 0.0); + } else { + crossOffset = Offset(totalCrossSpace - item->GetLayoutSize().Width(), 0.0); + PlaceItemAndLog(item, position + itemPositionOffset + crossOffset, "END"); + itemPositionOffset += Offset(0.0, item->GetLayoutSize().Height() + betweenSpace + spacing); + } +} + +void RenderWrap::HandleStartAlignment( + const RefPtr& item, const Offset& position, double betweenSpace, Offset& itemPositionOffset) const +{ + PlaceItemAndLog(item, position + itemPositionOffset, "START"); + // Decide content offset position + auto spacing = NormalizeToPx(spacing_); + itemPositionOffset += + Offset(direction_ == WrapDirection::HORIZONTAL ? item->GetLayoutSize().Width() + betweenSpace + spacing : 0.0, + direction_ == WrapDirection::HORIZONTAL ? 0.0 : item->GetLayoutSize().Height() + betweenSpace + spacing); +} + +void RenderWrap::ClearRenderObject() +{ + RenderNode::ClearRenderObject(); + direction_ = WrapDirection::VERTICAL; + alignment_ = WrapAlignment::START; + mainAlignment_ = WrapAlignment::START; + crossAlignment_ = WrapAlignment::START; + spacing_ = Dimension(); + contentSpace_ = Dimension(); + mainLengthLimit_ = 0.0; + crossLengthLimit_ = 0.0; + totalMainLength_ = 0.0; + totalCrossLength_ = 0.0; + + dialogDirection_ = WrapDirection::HORIZONTAL; + dialogStretch_ = false; + isLeftToRight_ = true; +} + +bool RenderWrap::MaybeRelease() +{ + auto context = GetContext().Upgrade(); + if (context && context->GetRenderFactory()->GetRenderWrapFactory()->Recycle(this)) { + ClearRenderObject(); + return false; + } + return true; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/components/wrap/render_wrap.h b/frameworks/core/components/wrap/render_wrap.h new file mode 100644 index 00000000..dc7c65ad --- /dev/null +++ b/frameworks/core/components/wrap/render_wrap.h @@ -0,0 +1,123 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_WRAP_RENDER_WRAP_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_WRAP_RENDER_WRAP_H + +#include +#include + +#include "core/components/common/layout/constants.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +struct ContentInfo { + ContentInfo(double mainLength, double crossLength, int32_t count, const std::list>& itemList) + : mainLength_(mainLength), crossLength_(crossLength), count_(count), itemList_(itemList) + {} + + double mainLength_ = 0.0; + double crossLength_ = 0.0; + int32_t count_ = 0; + std::list> itemList_; +}; + +class ACE_EXPORT RenderWrap : public RenderNode { + DECLARE_ACE_TYPE(RenderWrap, RenderNode); + +public: + static RefPtr Create(); + + void Update(const RefPtr& component) override; + + void PerformLayout() override; + + Size GetLeftSize(double crossLength, double mainLeftLength, double crossLeftLength) const; + + void LayoutWholeWrap(); + + Offset GetContentOffset(double totalCrossLength) const; + + void TraverseContent(const Offset& startPosition) const; + + void PositionedItem( + double betweenSpace, const ContentInfo& content, const Offset& position, double crossSpace) const; + + Offset GetItemMainOffset(double mainSpace) const; + + void SetWrapLayoutSize(double mainLength, double crossLength) + { + if (direction_ == WrapDirection::HORIZONTAL) { + SetLayoutSize(GetLayoutParam().Constrain(Size(mainLength, crossLength))); + } else { + SetLayoutSize(GetLayoutParam().Constrain(Size(crossLength, mainLength))); + } + LOGD("wrap::wrap layout size width:%lf, height:%lf", GetLayoutSize().Width(), GetLayoutSize().Height()); + } + + void Paint(RenderContext& context, const Offset& offset) override + { + for (const auto& item : GetChildren()) { + if (item->GetLayoutParam().GetMaxSize().IsValid()) { + context.PaintChild(item, offset); + } + } + } + + WrapDirection GetDialogDirection() const + { + return dialogDirection_; + } + +protected: + void PerformLayoutInitialize(); + void PlaceItemAndLog(const RefPtr& node, const Offset& position, const std::string& align) const; + void HandleCenterAlignment(double totalCrossSpace, const RefPtr& node, const Offset& position, + double betweenSpace, Offset& itemPositionOffset) const; + void HandleEndAlignment(double totalCrossSpace, const RefPtr& node, const Offset& position, + double betweenSpace, Offset& itemPositionOffset) const; + void HandleStartAlignment( + const RefPtr& item, const Offset& position, double betweenSpace, Offset& itemPositionOffset) const; + double GetMainItemLength(const RefPtr& item) const; + double GetCrossItemLength(const RefPtr& item) const; + + void HandleDialogStretch(const LayoutParam& layoutParam); + std::list contentList_; + + virtual void ClearRenderObject() override; + virtual bool MaybeRelease() override; + +private: + WrapDirection direction_ = WrapDirection::VERTICAL; + WrapAlignment alignment_ = WrapAlignment::START; + WrapAlignment mainAlignment_ = WrapAlignment::START; + WrapAlignment crossAlignment_ = WrapAlignment::START; + Dimension spacing_; + Dimension contentSpace_; + double mainLengthLimit_ = 0.0; + double crossLengthLimit_ = 0.0; + double totalMainLength_ = 0.0; + double totalCrossLength_ = 0.0; + + WrapDirection dialogDirection_ = WrapDirection::HORIZONTAL; + bool dialogStretch_ = false; + + bool isLeftToRight_ = true; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_WRAP_RENDER_WRAP_H diff --git a/frameworks/core/components/wrap/wrap_component.h b/frameworks/core/components/wrap/wrap_component.h new file mode 100644 index 00000000..cd79c27d --- /dev/null +++ b/frameworks/core/components/wrap/wrap_component.h @@ -0,0 +1,137 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_WRAP_WRAP_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_WRAP_WRAP_COMPONENT_H + +#include "core/components/common/layout/constants.h" +#include "core/components/wrap/render_wrap.h" +#include "core/components/wrap/wrap_element.h" +#include "core/pipeline/base/component_group.h" + +namespace OHOS::Ace { + +class WrapComponent : public ComponentGroup { + DECLARE_ACE_TYPE(WrapComponent, ComponentGroup); + +public: + WrapComponent(double spacing, double contentSpacing, const std::list>& children) + : ComponentGroup(children), spacing_(Dimension(spacing, DimensionUnit::PX)), + contentSpacing_(Dimension(contentSpacing, DimensionUnit::PX)) + {} + explicit WrapComponent(const std::list>& children) : ComponentGroup(children) {} + ~WrapComponent() override = default; + + RefPtr CreateRenderNode() override + { + return RenderWrap::Create(); + } + + RefPtr CreateElement() override + { + return AceType::MakeRefPtr(); + } + + const Dimension& GetSpacing() const + { + return spacing_; + } + + void SetSpacing(const Dimension& spacing) + { + spacing_ = spacing; + } + + const Dimension& GetContentSpacing() const + { + return contentSpacing_; + } + + void SetContentSpacing(const Dimension& contentSpacing) + { + contentSpacing_ = contentSpacing; + } + + // get/set enum type below + WrapDirection GetDirection() const + { + return direction_; + } + + void SetDirection(WrapDirection direction) + { + direction_ = direction; + } + + WrapAlignment GetAlignment() const + { + return alignment_; + } + + void SetAlignment(WrapAlignment alignment) + { + alignment_ = alignment; + } + + WrapAlignment GetCrossAlignment() const + { + return crossAlignment_; + } + + void SetCrossAlignment(WrapAlignment crossAlignment) + { + crossAlignment_ = crossAlignment; + } + + WrapAlignment GetMainAlignment() const + { + return mainAlignment_; + } + + void SetMainAlignment(WrapAlignment mainAlignment) + { + mainAlignment_ = mainAlignment; + } + + bool GetDialogStretch() const + { + return dialogStretch_; + } + + void SetDialogStretch(bool dialogStretch) + { + dialogStretch_ = dialogStretch; + } + +private: + // The direction of main axis + WrapDirection direction_ = WrapDirection::HORIZONTAL; + // The overall alignment of all children in the wrap component + WrapAlignment alignment_ = WrapAlignment::START; + // The alignment of all components in current direction + WrapAlignment mainAlignment_ = WrapAlignment::SPACE_AROUND; + // The alignment in cross direction of all component in one direction group. + WrapAlignment crossAlignment_ = WrapAlignment::CENTER; + // The space between item in one direction content + Dimension spacing_; + // The space between each direction content + Dimension contentSpacing_; + + bool dialogStretch_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_WRAP_WRAP_COMPONENT_H diff --git a/frameworks/core/components/wrap/wrap_element.cpp b/frameworks/core/components/wrap/wrap_element.cpp new file mode 100644 index 00000000..74e72230 --- /dev/null +++ b/frameworks/core/components/wrap/wrap_element.cpp @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/components/wrap/wrap_element.h" + +#include "core/components/wrap/wrap_component.h" + +namespace OHOS::Ace { + +void WrapElement::Update() +{ + ComponentGroupElement::Update(); + auto wrapComponent = AceType::DynamicCast(component_); + if (wrapComponent != nullptr) { + direction_ = wrapComponent->GetDirection(); + dialogStretch_ = wrapComponent->GetDialogStretch(); + } +} + +bool WrapElement::RequestNextFocus(bool vertical, bool reverse, const Rect& rect) +{ + // (1) When the wrap direction is vertical and focus moves in horizontal, focus cannot move next. + // (2) When the wrap direction is horizontal and focus moves in vertical, focus cannot move next. + RefPtr renderWrap = AceType::DynamicCast(renderNode_); + auto direction = (dialogStretch_ && renderWrap) ? renderWrap->GetDialogDirection() : direction_; + if ((direction == WrapDirection::VERTICAL) != vertical) { + return false; + } + // For others, move to next focus node. + return GoToNextFocus(reverse, rect); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/components/wrap/wrap_element.h b/frameworks/core/components/wrap/wrap_element.h new file mode 100644 index 00000000..dd4b9534 --- /dev/null +++ b/frameworks/core/components/wrap/wrap_element.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_WRAP_WRAP_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_WRAP_WRAP_ELEMENT_H + +#include "core/components/common/layout/constants.h" +#include "core/components/flex/flex_element.h" +#include "core/focus/focus_node.h" + +namespace OHOS::Ace { + +class ACE_EXPORT WrapElement : public FlexElement { + DECLARE_ACE_TYPE(WrapElement, FlexElement); + +public: + RefPtr GetCachedRenderNode() override + { + auto context = GetContext().Upgrade(); + if (context) { + return context->GetRenderFactory()->GetRenderWrapFactory()->Get(); + } + return nullptr; + } + void Update() override; + bool RequestNextFocus(bool vertical, bool reverse, const Rect& rect) override; + +private: + WrapDirection direction_ = WrapDirection::HORIZONTAL; + bool dialogStretch_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_WRAP_WRAP_ELEMENT_H diff --git a/frameworks/core/event/ace_event_handler.h b/frameworks/core/event/ace_event_handler.h new file mode 100644 index 00000000..474973a5 --- /dev/null +++ b/frameworks/core/event/ace_event_handler.h @@ -0,0 +1,195 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_ACE_EVENT_HANDLER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_ACE_EVENT_HANDLER_H + +#include + +#include "base/memory/ace_type.h" +#include "core/event/ace_events.h" +#include "core/event/key_event.h" + +namespace OHOS::Ace { + +class EventMarker final { +public: + using Function = std::function; + using strFunction = std::function; + using ArgFunction = std::function; + using PreFunction = std::function; + + struct Data final { + Data() = default; + explicit Data(const Data& other) = default; + explicit Data(Data&& other) = default; + Data(const std::string& eventId, const std::string& eventType, int32_t pageId, bool isFront) + : eventId(eventId), eventType(eventType), pageId(pageId), isFront(isFront) + {} + Data(Function&& func, const std::string& eventType, int32_t pageId, bool isFront) + : uiFunction(std::move(func)), eventId("-1"), eventType(eventType), pageId(pageId), isFront(isFront), + isDeclarativeUi(true) + {} + Data(ArgFunction&& func, const std::string& eventType, int32_t pageId, bool isFront) + : uiArgFunction(std::move(func)), eventId("-1"), eventType(eventType), pageId(pageId), isFront(isFront), + isDeclarativeUi(true) + {} + Data(strFunction&& func, const std::string& eventType, int32_t pageId, bool isFront) + : uiStrFunction(std::move(func)), eventId("-1"), eventType(eventType), pageId(pageId), isFront(isFront), + isDeclarativeUi(true) + {} + + ~Data() = default; + + std::string GetEventParam() const + { + return std::string("\"").append(eventType).append("\","); + } + + Function uiFunction; + ArgFunction uiArgFunction; + strFunction uiStrFunction; + std::string eventId; + std::string eventType; + int32_t pageId = -1; + bool isFront = true; + bool isDeclarativeUi = false; + PreFunction preFunction; + }; + + EventMarker() = default; + explicit EventMarker(const std::string& eventId, const std::string& eventType = std::string(), int32_t pageId = -1, + bool isFront = true) + : data_(std::make_unique(eventId, eventType, pageId, isFront)) + {} + + explicit EventMarker(EventMarker&& other) = default; + explicit EventMarker( + Function&& func, const std::string& eventType = std::string(), int32_t pageId = -1, bool isFront = true) + : data_(std::make_unique(std::move(func), eventType, pageId, isFront)) + {} + + explicit EventMarker( + ArgFunction&& func, const std::string& eventType = std::string(), int32_t pageId = -1, bool isFront = true) + : data_(std::make_unique(std::move(func), eventType, pageId, isFront)) + {} + explicit EventMarker( + strFunction&& func, const std::string& eventType = std::string(), int32_t pageId = -1, bool isFront = true) + : data_(std::make_unique(std::move(func), eventType, pageId, isFront)) + {} + explicit EventMarker(const EventMarker& other) : data_(other.data_ ? std::make_unique(*other.data_) : nullptr) + {} + ~EventMarker() = default; + + EventMarker& operator=(EventMarker&& other) = default; + EventMarker& operator=(const EventMarker& other) + { + data_ = other.data_ ? std::make_unique(*other.data_) : nullptr; + return *this; + } + + void Reset() + { + data_.release(); + } + + bool operator!=(const std::string& markerEventId) const + { + return GetData().eventId != markerEventId; + } + + bool operator==(const std::string& markerEventId) const + { + return GetData().eventId == markerEventId; + } + + bool IsEmpty() const + { + return !data_ || data_->eventId.empty(); + } + + void SetPreFunction(PreFunction&& preFunc) + { + if (data_) { + data_->preFunction = std::move(preFunc); + } + } + + void CallPreFunction() const + { + if (data_ && data_->preFunction) { + data_->preFunction(); + } + } + + void CallUiFunction() const + { + if (data_ && data_->uiFunction) { + data_->uiFunction(); + } + } + + void CallUiArgFunction(const BaseEventInfo* info) const + { + if (data_ && data_->uiArgFunction) { + data_->uiArgFunction(info); + } + } + + void CallUiStrFunction(const std::string& info) const + { + if (data_ && data_->uiStrFunction) { + data_->uiStrFunction(info); + } + } + + const Data& GetData() const + { + if (data_) { + return *data_; + } + static const Data emptyData; + return emptyData; + } + +private: + std::unique_ptr data_; +}; + +class AceEventHandler : public AceType { + DECLARE_ACE_TYPE(AceEventHandler, AceType); + +public: + virtual void HandleAsyncEvent(const EventMarker& eventMarker) = 0; + virtual void HandleAsyncEvent(const EventMarker& eventMarker, int32_t param) = 0; + virtual void HandleAsyncEvent(const EventMarker& eventMarker, const BaseEventInfo& info) = 0; + virtual void HandleAsyncEvent(const EventMarker& eventMarker, const KeyEvent& info) = 0; + // For json dsl event which has json format param. + virtual void HandleAsyncEvent(const EventMarker& eventMarker, const std::string& param) = 0; + virtual void HandleAsyncEvent(const EventMarker& eventMarker, const std::shared_ptr& info) + { + HandleAsyncEvent(eventMarker, *info); + } + + virtual void HandleSyncEvent(const EventMarker& eventMarker, bool& result) = 0; + virtual void HandleSyncEvent(const EventMarker& eventMarker, const BaseEventInfo& info, bool& result) = 0; + virtual void HandleSyncEvent(const EventMarker& eventMarker, const KeyEvent& info, bool& result) = 0; + // For json dsl event which has json format param and json format result. + virtual void HandleSyncEvent(const EventMarker& eventMarker, const std::string& param, std::string& result) = 0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_ACE_EVENT_HANDLER_H diff --git a/frameworks/core/event/ace_event_helper.h b/frameworks/core/event/ace_event_helper.h new file mode 100644 index 00000000..c361732e --- /dev/null +++ b/frameworks/core/event/ace_event_helper.h @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_ACE_EVENT_HELPER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_ACE_EVENT_HELPER_H + +#include + +#include "base/log/log.h" +#include "base/memory/referenced.h" +#include "core/event/ace_event_handler.h" +#include "core/event/back_end_event_manager.h" +#include "core/pipeline/pipeline_context.h" + +namespace OHOS::Ace { + +template +class AceSyncEvent; + +template +class AceSyncEvent final { +public: + AceSyncEvent() = delete; + ~AceSyncEvent() = delete; + + // Uses eventId and context to create Ace back-end event. + // For sync event, the result needs to be referenced by out parameters. + // When the event id starts with "Backend_" flag, then uses backend event manager processing. + static std::function Create(const EventMarker& marker, const WeakPtr& context) + { + if (marker.IsEmpty()) { + return nullptr; + } + return [marker, context](Args... args) { + auto refContext = context.Upgrade(); + if (!refContext) { + LOGE("fail to fire sync event due to context is nullptr"); + return; + } + refContext->FireSyncEvent(marker, std::forward(args)...); + }; + } +}; + +template +class AceAsyncEvent; + +template +class AceAsyncEvent final { +public: + AceAsyncEvent() = delete; + ~AceAsyncEvent() = delete; + + // Uses eventId and context to create Ace back-end event. + // When the event id starts with "Backend_" flag, then uses backend event manager processing. + static std::function Create(const EventMarker& marker, const WeakPtr& context) + { + if (marker.IsEmpty()) { + return nullptr; + } + return [marker, context](Args... args) { + auto refContext = context.Upgrade(); + if (!refContext) { + LOGE("fail to fire async event due to context is nullptr"); + return; + } + marker.CallPreFunction(); + refContext->FireAsyncEvent(marker, std::forward(args)...); + }; + } +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_ACE_EVENT_HELPER_H diff --git a/frameworks/core/event/ace_events.h b/frameworks/core/event/ace_events.h new file mode 100644 index 00000000..d8444f33 --- /dev/null +++ b/frameworks/core/event/ace_events.h @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_ACE_EVENTS_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_ACE_EVENTS_H + +#include +#include + +#include "base/memory/type_info_base.h" +#include "base/utils/type_definition.h" + +namespace OHOS::Ace { + +struct EventTarget final { + std::string id; + std::string type; +}; + +class BaseEventInfo : public virtual TypeInfoBase { + DECLARE_RELATIONSHIP_OF_CLASSES(BaseEventInfo, TypeInfoBase); + +public: + explicit BaseEventInfo(const std::string& type) : type_(type) {} + ~BaseEventInfo() override = default; + + const std::string& GetType() const + { + return type_; + } + + const TimeStamp& GetTimeStamp() const + { + return timeStamp_; + } + BaseEventInfo& SetTimeStamp(const TimeStamp& timeStamp) + { + timeStamp_ = timeStamp; + return *this; + } + + const EventTarget& GetTarget() const + { + return target_; + } + BaseEventInfo& SetTarget(const EventTarget& target) + { + target_ = target; + return *this; + } + + const EventTarget& GetCurrentTarget() const + { + return currentTarget_; + } + BaseEventInfo& SetCurrentTarget(const EventTarget& currentTarget) + { + currentTarget_ = currentTarget; + return *this; + } + +private: + // Event type like onTouchDown, onClick and so on. + std::string type_; + // The origin event time stamp. + TimeStamp timeStamp_; + EventTarget target_; + EventTarget currentTarget_; +}; + +class EventToJSONStringAdapter : public virtual TypeInfoBase { + DECLARE_RELATIONSHIP_OF_CLASSES(EventToJSONStringAdapter, TypeInfoBase); + +public: + EventToJSONStringAdapter() = default; + ~EventToJSONStringAdapter() = default; + + virtual std::string ToJSONString() const = 0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_ACE_EVENTS_H diff --git a/frameworks/core/event/back_end_event_manager.cpp b/frameworks/core/event/back_end_event_manager.cpp new file mode 100644 index 00000000..519966d3 --- /dev/null +++ b/frameworks/core/event/back_end_event_manager.cpp @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/event/back_end_event_manager.h" + +#include +#include + +#include "base/utils/macros.h" + +namespace OHOS::Ace { +namespace { + +std::atomic g_currentId = 0; + +} // namespace + +BackEndEventIdManager::BackEndEventIdManager() = default; +BackEndEventIdManager::~BackEndEventIdManager() = default; + +std::string BackEndEventIdManager::GetAvailableId() +{ + ACE_DCHECK(g_currentId.load() == UINT64_MAX); + return std::to_string(++g_currentId); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/event/back_end_event_manager.h b/frameworks/core/event/back_end_event_manager.h new file mode 100644 index 00000000..912ed939 --- /dev/null +++ b/frameworks/core/event/back_end_event_manager.h @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_BACK_END_EVENT_MANAGER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_BACK_END_EVENT_MANAGER_H + +#include +#include +#include +#include + +#include "base/log/log.h" +#include "base/utils/singleton.h" +#include "core/event/ace_event_handler.h" + +namespace OHOS::Ace { + +// Note that this class is not thread-safe, and is processed on the UI thread of ACE uniformly. +// Uses BackEndEventManager to get available id. +// This class is only used by BackEndEventManager. +class BackEndEventIdManager final : public Singleton { + DECLARE_SINGLETON(BackEndEventIdManager); + +public: + std::string GetAvailableId(); +}; + + +// Note that this class is not thread-safe, and is processed on the UI thread of ACE uniformly. +// Need to use the void return type event, if you need to return the result, use the reference out parameter. +template +class BackEndEventManager; + +template +class BackEndEventManager final : public Singleton> { + DECLARE_SINGLETON(BackEndEventManager); + +public: + // Gets the globally unique event ID of the backend for subsequent event binding. + EventMarker GetAvailableMarker() const + { + // For back end event, the page id is -1. + constexpr int32_t pageId = -1; + return EventMarker(BackEndEventIdManager::GetInstance().GetAvailableId(), "", pageId, false); + } + + void BindBackendEvent(const EventMarker& marker, const std::function& event) + { + LOGD("the bind event id is %{public}s, the manager is %{private}p", marker.GetData().eventId.c_str(), this); + + bool isSuccess = false; + { + std::lock_guard lock(mutex_); + auto result = eventMap_.try_emplace(marker.GetData().eventId, event); + isSuccess = result.second; + } + if (!isSuccess) { + LOGE("fail to bind back end event due to event id is duplicate!"); + } + } + + void FireBackEndEvent(const EventMarker& marker, Args&&... args) + { + LOGD("the Fire event id is %{public}s, the manager is %{private}p", marker.GetData().eventId.c_str(), this); + std::function func; + { + std::lock_guard lock(mutex_); + auto iter = eventMap_.find(marker.GetData().eventId); + if (iter != eventMap_.end()) { + func = iter->second; + } + } + if (!func) { + LOGE("fail to trigger back end event due to no such event!"); + return; + } + func(std::forward(args)...); + } + + // When the event does not need to be used, release the corresponding event ID + void RemoveBackEndEvent(const EventMarker& marker) + { + std::lock_guard lock(mutex_); + eventMap_.erase(marker.GetData().eventId); + } + +private: + std::mutex mutex_; + std::unordered_map> eventMap_; +}; + +template +BackEndEventManager::BackEndEventManager() = default; + +template +BackEndEventManager::~BackEndEventManager() = default; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_BACK_END_EVENT_MANAGER_H diff --git a/frameworks/core/event/event_manager.cpp b/frameworks/core/event/event_manager.cpp new file mode 100644 index 00000000..695fa282 --- /dev/null +++ b/frameworks/core/event/event_manager.cpp @@ -0,0 +1,128 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/event/event_manager.h" + +#include "base/log/ace_trace.h" +#include "core/gestures/gesture_referee.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +void EventManager::TouchTest(const TouchPoint& touchPoint, const RefPtr& renderNode) +{ + ACE_FUNCTION_TRACE(); + if (!renderNode) { + LOGW("renderNode is null."); + return; + } + TouchTestResult hitTestResult; + + const Point point { touchPoint.x, touchPoint.y }; + // For root node, the parent local point is the same as global point. + renderNode->TouchTest(point, point, { TouchRestrict::NONE }, hitTestResult); + if (hitTestResult.empty()) { + LOGI("hit test result is empty"); + } + touchTestResults_[touchPoint.id] = std::move(hitTestResult); +} + +bool EventManager::DispatchTouchEvent(const TouchPoint& point) +{ + ACE_FUNCTION_TRACE(); + const auto iter = touchTestResults_.find(point.id); + if (iter == touchTestResults_.end()) { + LOGI("the %{public}d touch test result does not exist!", point.id); + return false; + } + + // If one gesture recognizer has already been won, other gesture recognizers will still be affected by + // the event, each recognizer needs to filter the extra events by itself. + for (const auto& entry : iter->second) { + entry->HandleEvent(point); + } + if (point.type == TouchType::UP) { + GestureReferee::GetInstance().AdjudicateGestureSequence(point.id); + } else if (point.type == TouchType::CANCEL) { + GestureReferee::GetInstance().CleanGestureScope(point.id); + } + return true; +} + +bool EventManager::DispatchKeyEvent(const KeyEvent& event, const RefPtr& focusNode) +{ + if (!focusNode) { + LOGW("focusNode is null."); + return false; + } + LOGD("The key code is %{public}d, the key action is %{public}d, the repeat time is %{public}d.", + event.code, event.action, event.repeatTime); + if (!focusNode->HandleKeyEvent(event)) { + LOGD("use platform to handle this event"); + return false; + } + return true; +} + +void EventManager::MouseTest(const MouseEvent& event, const RefPtr& renderNode) +{ + if (!renderNode) { + LOGW("renderNode is null."); + return; + } + MouseTestResult hitTestResult; + + const Point point { event.x, event.y }; + // For root node, the parent local point is the same as global point. + renderNode->MouseTest(point, point, hitTestResult); + if (hitTestResult.empty()) { + LOGI("mouse test result is empty"); + } + mouseTestResults_[event.GetId()] = std::move(hitTestResult); +} + +bool EventManager::DispatchRotationEvent( + const RotationEvent& event, const RefPtr& renderNode, const RefPtr& requestFocusNode) +{ + if (!renderNode) { + LOGW("renderNode is null."); + return false; + } + + if (requestFocusNode && renderNode->RotationMatchTest(requestFocusNode)) { + LOGD("RotationMatchTest: dispatch rotation to request node."); + return requestFocusNode->RotationTestForward(event); + } + LOGD("RotationMatchTest: dispatch rotation to stack render node."); + return renderNode->RotationTest(event); +} + +bool EventManager::DispatchMouseEvent(const MouseEvent& event) +{ + const auto iter = mouseTestResults_.find(event.GetId()); + if (iter == mouseTestResults_.end()) { + LOGI("the %{public}d mouse test result does not exist!", event.GetId()); + return false; + } + // If one mouse recognizer has already been won, other mouse recognizers will still be affected by + // the event, each recognizer needs to filter the extra events by itself. + for (const auto& entry : iter->second) { + entry->HandleEvent(event); + } + + return true; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/event/event_manager.h b/frameworks/core/event/event_manager.h new file mode 100644 index 00000000..4136e229 --- /dev/null +++ b/frameworks/core/event/event_manager.h @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_EVENT_MANAGER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_EVENT_MANAGER_H + +#include + +#include "base/memory/ace_type.h" +#include "core/event/key_event.h" +#include "core/event/mouse_event.h" +#include "core/event/rotation_event.h" +#include "core/focus/focus_node.h" +#include "core/gestures/touch_event.h" + +namespace OHOS::Ace { + +class RenderNode; + +class EventManager { +public: + // After the touch down event is triggered, the touch test is performed to collect the corresponding + // touch event target list. + void TouchTest(const TouchPoint& touchPoint, const RefPtr& renderNode); + + bool DispatchTouchEvent(const TouchPoint& point); + + // Distribute the key event to the corresponding root node. If the root node is not processed, return false and the + // platform will handle it. + static bool DispatchKeyEvent(const KeyEvent& event, const RefPtr& focusNode); + + // Distribute the rotation event to the corresponding render tree or requested render node. If the render is not + // processed, return false and the platform will handle it. + static bool DispatchRotationEvent( + const RotationEvent& event, const RefPtr& renderNode, const RefPtr& requestFocusNode); + + // mouse event target list. + void MouseTest(const MouseEvent& touchPoint, const RefPtr& renderNode); + + bool DispatchMouseEvent(const MouseEvent& event); + +private: + std::unordered_map touchTestResults_; + std::unordered_map mouseTestResults_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_EVENT_MANAGER_H diff --git a/frameworks/core/event/event_trigger.h b/frameworks/core/event/event_trigger.h new file mode 100644 index 00000000..b6fa355b --- /dev/null +++ b/frameworks/core/event/event_trigger.h @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_EVENT_TRIGGER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_EVENT_TRIGGER_H + +#include "base/log/log.h" +#include "core/event/ace_event_handler.h" +#include "core/event/ace_events.h" +#include "core/event/back_end_event_manager.h" + +namespace OHOS::Ace { + +class EventTrigger final { +public: + void RegisterEventHandler(const RefPtr& handler) + { + handler_ = handler; + } + + template + void TriggerAsyncEvent(const EventMarker& marker, Args&&... args) + { + if (!marker.GetData().isFront) { + LOGD("begin to use back end event manager to fire async event"); + BackEndEventManager::GetInstance().FireBackEndEvent(marker, std::forward(args)...); + LOGD("finish to use back end event manager to fire async event"); + return; + } + LOGD("begin to use event handler to fire async event"); + auto handler = handler_.Upgrade(); + if (!handler) { + LOGE("fail to trigger async event due to event handler is nullptr"); + return; + } + handler->HandleAsyncEvent(marker, std::forward(args)...); + LOGD("finish to use event handler to fire async event"); + } + + template + void TriggerSyncEvent(const EventMarker& marker, Args&&... args) + { + if (!marker.GetData().isFront) { + LOGD("begin to use back end event manager to fire sync event"); + BackEndEventManager::GetInstance().FireBackEndEvent(marker, std::forward(args)...); + LOGD("finish to use back end event manager to fire sync event"); + return; + } + LOGD("begin to use event handler to fire sync event"); + auto handler = handler_.Upgrade(); + if (!handler) { + LOGE("fail to trigger sync event due to event handler is nullptr"); + return; + } + handler->HandleSyncEvent(marker, std::forward(args)...); + LOGD("finish to use event handler to fire sync event"); + } + +private: + WeakPtr handler_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_EVENT_TRIGGER_H diff --git a/frameworks/core/event/key_event.cpp b/frameworks/core/event/key_event.cpp new file mode 100644 index 00000000..02ec21aa --- /dev/null +++ b/frameworks/core/event/key_event.cpp @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/event/key_event.h" + +namespace OHOS::Ace { + +namespace { + +// key : define key event code, value : define ace key string +constexpr int32_t KEYCODE_SIZE = 289; +const char* g_keycode2String[KEYCODE_SIZE] = { + "Unknown", "SoftLeft", "SoftRight", "Home", "Back", "Call", "EndCall", "Digit0", "Digit1", "Digit2", "Digit3", + "Digit4", "Digit5", "Digit6", "Digit7", "Digit8", "Digit9", "Star", "Pound", "DpadUp", "DpadDown", "DpadLeft", + "DpadRight", "DpadCenter", "VolumeUp", "VolumeDown", "Power", "Camera", "Clear", "KeyA", "KeyB", "KeyC", + "KeyD", "KeyE", "KeyF", "KeyG", "KeyH", "KeyI", "KeyJ", "KeyK", "KeyL", "KeyM", "KeyN", "KeyO", "KeyP", + "KeyQ", "KeyR", "KeyS", "KeyT", "KeyU", "KeyV", "KeyW", "KeyX", "KeyY", "KeyZ", "Comma", "Period", "AltLeft", + "AltRight", "ShiftLeft", "ShiftRight", "Tab", "Space", "Sym", "Explorer", "Envelope", "Enter", "Del", "Grave", + "Minus", "Equals", "LeftBracket", "RightBracket", "BackSlash", "Semicolon", "Apostrophe", "Slash", "At", + "Num", "HeadsetHook", "Focus", "Plus", "Menu", "Notification", "Search", "MeidaPlayPause", + "MeidaStop", "MeidaNext", "MeidaPrevious", "MeidaRewind", "MeidaFastForward", "Mute", "PageUp", "PageDown", + "PictSymbols", "SwitchCharset", "ButtonA", "ButtonB", "ButtonC", "ButtonX", "ButtonY", "ButtonZ", "ButtonL1", + "ButtonR1", "ButtonL2", "ButtonR2", "ButtonThumbl", "ButtonThumbr", "ButtonStart", "ButtonSelect", "ButtonMode", + "Escape", "ForwardDel", "CtrlLeft", "CtrlRight", "CapsLock", "ScrollLock", "MetaLeft", "MetaRight", "Function", + "SysRq", "Break", "MoveHome", "MoveEnd", "Insert", "Forward", "MediaPlay", "MediaPause", "MediaClose", + "MediaReject", "MediaRecord", "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12", "NumLock", + "Numpad0", "Numpad1", "Numpad2", "Numpad3", "Numpad4", "Numpad5", "Numpad6", "Numpad7", "Numpad8", "NumPad9", + "NumpadDivide", "NumpadMultiply", "NumpadSubtract", "NumpadAdd", "NumpadDot", "NumpadComma", "NumpadEnter", + "NumpadEquals", "NumpadLeftParen", "NumpadRightParen", "VolumeMute", "Info", "ChannelUp", "ChannelDown", "ZoomIn", + "ZoomOut", "Tv", "Window", "Guide", "Dvr", "BookMark", "Captions", "Settings", "TvPower", "TvInput", "StbPower", + "StbInput", "AvrPower", "AvrInput", "ProgRed", "ProgGreen", "ProgYellow", "ProgBlue", "AppSwitch", "Button1", + "Button2", "Button3", "Button4", "Button5", "Button6", "Button7", "Button8", "Button9", "Button10", "Button11", + "Button12", "Button13", "Button14", "Button15", "Button16", "LanguageSwitch", "MannerMode", "3DMode", "Contacts", + "Calendar", "Music", "Calculator", "ZenkakuHankaku", "Eisu", "Muhenkan", "Henkan", "KatakanaHiragana", "Yen", "Ro", + "Kana", "Assist", "BrightnessDown", "BrightnessUp", "MediaAudioTrack", "Sleep", "WakeUp", "Pairing", "MediaTopMenu", + "Digit11", "Digit12", "LastChannel", "TvDataService", "VoiceAssist", "TvRadioService", "TvTeletext", + "TvNumberEntry", "TvTerrestrialAnalog", "TvTerrestrialDigital", "TvSatellite", "TvSatelliteBS", "TvSatelliteCS", + "TvSatelliteService", "TvNetWork", "TvAntennaCable", "TvInputHdmi1", "TvInputHdmi2", "TvInputHdmi3", "TvInputHdmi4", + "TvInputComposite1", "TvInputComposite2", "TvInputComponent1", "TvInputComponent2", "TvInputVGA1", + "TvAudioDescription", "TvAudioDescriptionMixUp", "TvAudioDescriptionMixDown", "TvZoomMode", "TvContentsMenu", + "TvMediaContextMenu", "TvTimerProgramming", "Help", "NavigatePrevious", "NavigateNext", "NavigateIn", "NavigateOut", + "StemPrimary", "Stem1", "Stem2", "Stem3", "DpadUpLeft", "DpadDownLeft", "DpadUpRight", "DpadDownRight", + "MediaSkipForward", "MediaSkipBackward", "MediaStepForward", "MediaStepBackward", "SoftSleep", "Cut", "Copy", + "Paste", "SystemNavigationUp", "SystemNavigationDown", "SystemNavigationLeft", "SystemNavigationRight", "AllApps", + "Refresh", "ThumbsUp", "ThumbsDown", "ProfileSwitch" +}; + +} // namespace + +const char* KeyToString(int32_t code) +{ + if (code >= 0 && code < KEYCODE_SIZE) { + return g_keycode2String[code]; + } else { + return g_keycode2String[0]; // "UnKnown" + } +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/event/key_event.h b/frameworks/core/event/key_event.h new file mode 100644 index 00000000..025fbda4 --- /dev/null +++ b/frameworks/core/event/key_event.h @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_KEY_EVENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_KEY_EVENT_H + +#include + +namespace OHOS::Ace { + +enum class KeyCode : int32_t { + UNKNOWN = -1, + KEYBOARD_HOME = 3, + KEYBOARD_BACK = 4, + KEYBOARD_UP = 19, + KEYBOARD_DOWN = 20, + KEYBOARD_LEFT = 21, + KEYBOARD_RIGHT = 22, + KEYBOARD_CENTER = 23, + HANDLE_A = 96, + HANDLE_SELECT = 109, + KEYBOARD_TAB = 61, + KEYBOARD_SPACE = 62, + KEYBOARD_ENTER = 66, + KEYBOARD_ESCAPE = 111, + KEYBOARD_NUMBER_ENTER = 160, + + TV_CONTROL_BACK = KEYBOARD_BACK, + TV_CONTROL_UP = KEYBOARD_UP, + TV_CONTROL_DOWN = KEYBOARD_DOWN, + TV_CONTROL_LEFT = KEYBOARD_LEFT, + TV_CONTROL_RIGHT = KEYBOARD_RIGHT, + TV_CONTROL_ENTER = KEYBOARD_ENTER, + TV_CONTROL_CENTER = KEYBOARD_CENTER, + + TV_CONTROL_MEDIA_PLAY = 85, +}; + +enum class KeyAction : int32_t { + UNKNOWN = -1, + DOWN = 0, + UP = 1, + LONG_PRESS = 2, + CLICK = 3, +}; + +const char* KeyToString(int32_t code); + +struct KeyEvent final { + KeyEvent(KeyCode code, KeyAction action, int32_t repeatTime, int64_t timeStamp, int64_t timeStampStart) + : code(code), action(action), repeatTime(repeatTime), timeStamp(timeStamp), timeStampStart(timeStampStart), + key(KeyToString(static_cast(code))) + {} + ~KeyEvent() = default; + + KeyCode code { KeyCode::UNKNOWN }; + KeyAction action { KeyAction::UNKNOWN }; + // When the key is held down for a long period of time, it will be accumulated once in a while. + // Note that In the long press scene, you will receive a DOWN and an extra LONG_PRESS event. If you only want to + // identify the click event, you can use CLICK event. + int32_t repeatTime = 0; + int64_t timeStamp = 0; + int64_t timeStampStart = 0; + const char* key = nullptr; +}; +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_KEY_EVENT_H diff --git a/frameworks/core/event/key_event_recognizer.cpp b/frameworks/core/event/key_event_recognizer.cpp new file mode 100644 index 00000000..ee322467 --- /dev/null +++ b/frameworks/core/event/key_event_recognizer.cpp @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/event/key_event_recognizer.h" + +#include + +#include "base/log/log.h" + +namespace OHOS::Ace { +namespace { + +constexpr int32_t LONG_PRESS_DURATION = 1; + +} + +std::vector KeyEventRecognizer::GetKeyEvents( + int32_t keyCode, int32_t keyAction, int32_t repeatTime, int64_t timeStamp, int64_t timeStampStart) +{ + if (timeStamp == 0) { + timeStamp = clock(); + timeStampStart = timeStamp; + } + + std::vector keyEvents; + keyEvents.emplace_back( + static_cast(keyCode), static_cast(keyAction), repeatTime, timeStamp, timeStampStart); + auto result = keyMap_.try_emplace(keyCode, false); + auto iter = result.first; + + // Recognize long press event. + if ((keyAction == static_cast(KeyAction::DOWN)) && (repeatTime >= LONG_PRESS_DURATION) && + (!iter->second)) { + LOGD("this event is long press, key code is %{public}d", keyCode); + iter->second = true; + keyEvents.emplace_back( + static_cast(keyCode), KeyAction::LONG_PRESS, repeatTime, timeStamp, timeStampStart); + } + // Recognize click event. + if (keyAction == static_cast(KeyAction::UP)) { + if (iter->second) { + iter->second = false; + } else { + LOGD("this event is click, key code is %{public}d", keyCode); + keyEvents.emplace_back( + static_cast(keyCode), KeyAction::CLICK, repeatTime, timeStamp, timeStampStart); + } + } + return keyEvents; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/event/key_event_recognizer.h b/frameworks/core/event/key_event_recognizer.h new file mode 100644 index 00000000..4bf176f3 --- /dev/null +++ b/frameworks/core/event/key_event_recognizer.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_KEY_EVENT_RECOGNIZER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_KEY_EVENT_RECOGNIZER_H + +#include +#include + +#include "core/event/key_event.h" + +namespace OHOS::Ace { + +class KeyEventRecognizer { +public: + // This method recognizes events by recording raw key events. If the raw event can be identified as a special + // event, it returns the raw event and the identified special event, otherwise it returns only the raw event. + std::vector GetKeyEvents( + int32_t keyCode, int32_t keyAction, int32_t repeatTime, int64_t timeStamp = 0, int64_t timeStampStart = 0); + +private: + std::unordered_map keyMap_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_KEY_EVENT_RECOGNIZER_H diff --git a/frameworks/core/event/mouse_event.h b/frameworks/core/event/mouse_event.h new file mode 100644 index 00000000..78f31ced --- /dev/null +++ b/frameworks/core/event/mouse_event.h @@ -0,0 +1,158 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_MOUSE_EVENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_MOUSE_EVENT_H + +#include "core/gestures/touch_event.h" + +namespace OHOS::Ace { + +static const int32_t MOUSE_BASE_ID = 1000; + +enum class MouseAction : int32_t { + NONE = 0, + PRESS = 1, + RELEASE = 2, + MOVE = 3, + HOVER_ENTER = 4, + HOVER_MOVE = 5, + HOVER_EXIT = 6, +}; + +enum class MouseState : int32_t { + NONE = 0, + HOVER = 1, +}; + +enum class MouseButton : int32_t { + NONE_BUTTON = 0, + LEFT_BUTTON = 1, + RIGHT_BUTTON = 2, + MIDDLE_BUTTON = 4, + BACK_BUTTON = 8, + FORWARD_BUTTON = 16, +}; + +struct MouseEvent final { + float x = 0.0f; + float y = 0.0f; + float z = 0.0f; + float deltaX = 0.0f; + float deltaY = 0.0f; + float deltaZ = 0.0f; + float scrollX = 0.0f; + float scrollY = 0.0f; + float scrollZ = 0.0f; + MouseAction action = MouseAction::NONE; + MouseButton button = MouseButton::NONE_BUTTON; + int32_t pressedButtons = 0; // combined by MouseButtons + TimeStamp time; + + Offset GetOffset() const + { + return Offset(x, y); + } + + int32_t GetId() const + { + if (pressedButtons > 0) { + return pressedButtons + MOUSE_BASE_ID; + } else { + return (int32_t)button + MOUSE_BASE_ID; + } + } + + MouseEvent CreateScaleEvent(float scale) const + { + if (NearZero(scale)) { + return { .x = x, + .y = y, + .z = z, + .deltaX = deltaX, + .deltaY = deltaY, + .deltaZ = deltaZ, + .scrollX = scrollX, + .scrollY = scrollY, + .scrollZ = scrollZ, + .action = action, + .button = button, + .pressedButtons = pressedButtons, + .time = time }; + } + + return { .x = x / scale, + .y = y / scale, + .z = z / scale, + .deltaX = deltaX / scale, + .deltaY = deltaY / scale, + .deltaZ = deltaZ / scale, + .scrollX = scrollX / scale, + .scrollY = scrollY / scale, + .scrollZ = scrollZ / scale, + .action = action, + .button = button, + .pressedButtons = pressedButtons, + .time = time }; + } + + TouchPoint CreateTouchPoint() const + { + TouchType type = TouchType::UNKNOWN; + if (action == MouseAction::PRESS) { + type = TouchType::DOWN; + } else if (action == MouseAction::RELEASE) { + type = TouchType::UP; + } else if (action == MouseAction::MOVE) { + type = TouchType::MOVE; + } else { + type = TouchType::UNKNOWN; + } + + int32_t id = GetId(); + + return { id, .x = x, .y = y, type, .time = time, .size = 0.0 }; + } + + MouseEvent operator-(const Offset& offset) const + { + return { .x = x - offset.GetX(), + .y = y - offset.GetY(), + .z = z, + .deltaX = deltaX, + .deltaY = deltaY, + .deltaZ = deltaZ, + .scrollX = scrollX, + .scrollY = scrollY, + .scrollZ = scrollZ, + .action = action, + .button = button, + .pressedButtons = pressedButtons, + .time = time }; + } +}; + +class MouseEventTarget : public virtual AceType { + DECLARE_ACE_TYPE(MouseEventTarget, AceType); + +public: + virtual void HandleEvent(const MouseEvent& event) = 0; +}; + +using MouseTestResult = std::list>; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_MOUSE_EVENT_H diff --git a/frameworks/core/event/mouse_raw_recognizer.cpp b/frameworks/core/event/mouse_raw_recognizer.cpp new file mode 100644 index 00000000..eaa1ac0a --- /dev/null +++ b/frameworks/core/event/mouse_raw_recognizer.cpp @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/event/mouse_raw_recognizer.h" + +#include "base/log/log.h" + +namespace OHOS::Ace { +namespace { + +const char ON_MOUSE_EVENT[] = "onMouse"; + +} // namespace + +void MouseRawRecognizer::HandleEvent(const MouseEvent& event) +{ + LOGD("raw mouse recognizer handle event, action is %{public}d, button is %{public}d", event.action, event.button); + if (onMouse_) { + onMouse_(CreateMouseEventInfo(event)); + } + lastEvent_ = event; +} + +MouseEventInfo MouseRawRecognizer::CreateMouseEventInfo(const MouseEvent& event) const +{ + MouseEventInfo info(ON_MOUSE_EVENT); + info.SetMouseGlobalInfo(event); + info.SetMouseLocationInfo(event - coordinateOffset_); + info.SetTimeStamp(event.time); + + return info; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/event/mouse_raw_recognizer.h b/frameworks/core/event/mouse_raw_recognizer.h new file mode 100644 index 00000000..7c645df6 --- /dev/null +++ b/frameworks/core/event/mouse_raw_recognizer.h @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_MOUSE_RAW_RECOGNIZER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_MOUSE_RAW_RECOGNIZER_H + +#include + +#include "core/event/mouse_event.h" + +namespace OHOS::Ace { + +class MouseEventInfo : public BaseEventInfo { + DECLARE_RELATIONSHIP_OF_CLASSES(MouseEventInfo, BaseEventInfo); + +public: + explicit MouseEventInfo(const std::string& type) : BaseEventInfo(type) {} + ~MouseEventInfo() override = default; + + void SetMouseLocationInfo(const MouseEvent& event) + { + localMouse_ = event; + } + void SetMouseGlobalInfo(const MouseEvent& event) + { + globalMouse_ = event; + } + + const MouseEvent& GetGlobalMouse() const + { + return globalMouse_; + } + const MouseEvent& GetLocalMouse() const + { + return localMouse_; + } + +private: + MouseEvent localMouse_; + MouseEvent globalMouse_; +}; + +using MouseCallback = std::function; + +class MouseRawRecognizer : public MouseEventTarget { + DECLARE_ACE_TYPE(MouseRawRecognizer, MouseEventTarget); + +public: + void HandleEvent(const MouseEvent& event) override; + + void SetOnMouse(const MouseCallback& onMouse) + { + onMouse_ = onMouse; + } + + // Coordinate offset is used to calculate the local location of the mouse point in the render node. + void SetCoordinateOffset(const Offset& coordinateOffset) + { + coordinateOffset_ = coordinateOffset; + } + +private: + MouseEventInfo CreateMouseEventInfo(const MouseEvent& event) const; + + MouseCallback onMouse_; + Offset coordinateOffset_; + MouseEvent lastEvent_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_MOUSE_RAW_RECOGNIZER_H diff --git a/frameworks/core/event/multimodal/ace_multimodal_define.h b/frameworks/core/event/multimodal/ace_multimodal_define.h new file mode 100644 index 00000000..0f2f8f34 --- /dev/null +++ b/frameworks/core/event/multimodal/ace_multimodal_define.h @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_MULTIMODAL_ACE_MULTIMODAL_DEFINE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_MULTIMODAL_ACE_MULTIMODAL_DEFINE_H + +#include +#include + +namespace OHOS::Ace { + +enum ModuleMask { + VOICE_MASK = 0x0, + BODY_LANGUAGE_MASK = 0x1, + LOCATION_MASK = 0x2, + TRADITIONAL_KEY_MASK = 0x4, + TRADITIONAL_TP_MASK = 0x8, + MASK_SHIFT = 3, +}; + +enum class MultimodalSourceType { + SOURCE_INVALID = 0, + SOURCE_VOICE, + SOURCE_CV, + SOURCE_SENSOR, + SOURCE_KEY, + SOURCE_TP, + SOURCE_MOTION, + SOURCE_TYPE_MAX, +}; + +struct VoiceLabel { + std::string hotWord; + std::string slot; + int32_t action; + std::string badge; +}; + +enum class MultimodalGeneralEvent : uint32_t { + HOME = VOICE_MASK << MASK_SHIFT, + BACK, + OPEN_SETTING, + CLOSE_SETTING, + SWITCH_NIGHT_MODE, + QUIT_NIGHT_MODE, + SCREEN_CAPTURE, + NEXT, + PREV, + NO_INTENT +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_MULTIMODAL_ACE_MULTIMODAL_DEFINE_H diff --git a/frameworks/core/event/multimodal/ace_multimodal_event.h b/frameworks/core/event/multimodal/ace_multimodal_event.h new file mode 100644 index 00000000..66b17e3d --- /dev/null +++ b/frameworks/core/event/multimodal/ace_multimodal_event.h @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_MULTIMODAL_ACE_MULTIMODAL_EVENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_MULTIMODAL_ACE_MULTIMODAL_EVENT_H + +#include "core/event/multimodal/ace_multimodal_define.h" + +namespace OHOS::Ace { + +class AceMultimodalEvent final { +public: + MultimodalSourceType GetSourceType() const + { + return sourceType_; + } + + void SetSourceType(MultimodalSourceType sourceType) + { + sourceType_ = sourceType; + } + + const VoiceLabel& GetVoice() const + { + return voice_; + } + + void SetVoice(const VoiceLabel& voice) + { + voice_ = voice; + } + + MultimodalGeneralEvent GetMultimodalGeneralEvent() const + { + return multimodalGeneralEvent_; + } + + void SetMultimodalGeneralEvent(MultimodalGeneralEvent multimodalGeneralEvent) + { + multimodalGeneralEvent_ = multimodalGeneralEvent; + } + +private: + VoiceLabel voice_; + MultimodalSourceType sourceType_ = MultimodalSourceType::SOURCE_VOICE; + MultimodalGeneralEvent multimodalGeneralEvent_ = MultimodalGeneralEvent::NO_INTENT; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_MULTIMODAL_ACE_MULTIMODAL_EVENT_H diff --git a/frameworks/core/event/multimodal/multimodal_manager.cpp b/frameworks/core/event/multimodal/multimodal_manager.cpp new file mode 100644 index 00000000..a449eebe --- /dev/null +++ b/frameworks/core/event/multimodal/multimodal_manager.cpp @@ -0,0 +1,143 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/event/multimodal/multimodal_manager.h" + +#include "base/log/dump_log.h" +#include "base/log/log.h" +#include "core/pipeline/pipeline_context.h" + +namespace OHOS::Ace { + +RefPtr MultiModalManager::GetMultiModalScene(int32_t pageId) +{ + auto iter = multiModalScenes_.find(pageId); + if (iter == multiModalScenes_.end()) { + auto newScene = multiModalScenes_.try_emplace(pageId, MakeRefPtr(pageId, subscriber_)); + return newScene.first->second; + } + return iter->second; +} + +void MultiModalManager::PushActiveScene(int32_t newPageId) +{ + if (activeSceneId_ == newPageId) { + return; + } + if (activeSceneId_ > 0) { + GetMultiModalScene(activeSceneId_)->Hide(); + } + activeSceneId_ = newPageId; +} + +void MultiModalManager::PopActiveScene(int32_t poppedPageId, int32_t incomingPageId) +{ + RemoveMultimodalScene(poppedPageId); + if (activeSceneId_ == incomingPageId) { + return; + } + GetMultiModalScene(incomingPageId)->Resume(); + activeSceneId_ = incomingPageId; +} + +RefPtr MultiModalManager::GetCurrentMultiModalScene() +{ + if (activeSceneId_ < 0) { + return nullptr; + } + return GetMultiModalScene(activeSceneId_); +} + +void MultiModalManager::ReplaceActiveScene(int32_t newPageId, int32_t replaceId) +{ + RemoveMultimodalScene(replaceId); + if (activeSceneId_ == newPageId) { + return; + } + activeSceneId_ = newPageId; +} + +void MultiModalManager::RemoveMultimodalScene(int32_t pageId) +{ + multiModalScenes_.erase(pageId); +} + +void MultiModalManager::RemoveInactiveScene(int32_t pageId) +{ + if (activeSceneId_ == pageId) { + LOGW("fail to remove scene due to it is active"); + return; + } + RemoveMultimodalScene(pageId); +} + +void MultiModalManager::SetMultimodalSubscriber(const RefPtr& subscriber) +{ + if (subscriber) { + subscriber_ = subscriber; + } +} + +void MultiModalManager::OpenChannel(const RefPtr& context) +{ + if (!subscriber_) { + LOGE("fail to get subscriber to register callback"); + return; + } + if (isRegistered_) { + return; + } + auto callback = [weak = WeakClaim(this), weakContext = WeakPtr(context)]( + const AceMultimodalEvent& event) { + auto manager = weak.Upgrade(); + if (!manager) { + LOGE("fail to get manager to notify event"); + return; + } + auto context = weakContext.Upgrade(); + if (!context) { + LOGE("fail to get context to notify event"); + return; + } + auto scene = manager->GetCurrentMultiModalScene(); + if (!scene) { + LOGE("fail to get current multi modal scene"); + return; + } + context->GetTaskExecutor()->PostTask( + [event, scene]() { scene->OnNotifyMultimodalEvent(event); }, TaskExecutor::TaskType::UI); + }; + subscriber_->RegisterCallback(callback, [weak = WeakClaim(this)]() { + auto manager = weak.Upgrade(); + if (!manager) { + LOGE("fail to get manager to notify event"); + return; + } + manager->isRegistered_ = true; + }); +} + +void MultiModalManager::DumpMultimodalScene() +{ + if (DumpLog::GetInstance().GetDumpFile()) { + DumpLog::GetInstance().AddDesc("ActiveScene: ", activeSceneId_); + DumpLog::GetInstance().AddDesc("totalScene: ", multiModalScenes_.size()); + DumpLog::GetInstance().AddDesc("registered: ", isRegistered_); + DumpLog::GetInstance().Print(0, GetTypeName(), multiModalScenes_.size()); + } + GetCurrentMultiModalScene()->Dump(); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/event/multimodal/multimodal_manager.h b/frameworks/core/event/multimodal/multimodal_manager.h new file mode 100644 index 00000000..2e3d9f88 --- /dev/null +++ b/frameworks/core/event/multimodal/multimodal_manager.h @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_MULTIMODAL_MULTIMODAL_MANAGER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_MULTIMODAL_MULTIMODAL_MANAGER_H + +#include "base/memory/ace_type.h" +#include "core/event/multimodal/multimodal_scene.h" +#include "core/event/multimodal/multimodal_subscriber.h" + +namespace OHOS::Ace { + +class PipelineContext; + +class MultiModalManager final : public AceType { + DECLARE_ACE_TYPE(MultiModalManager, AceType) + +public: + MultiModalManager() = default; + ~MultiModalManager() override = default; + + void SetMultimodalSubscriber(const RefPtr& subscriber); + void OpenChannel(const RefPtr& context); + + RefPtr GetMultiModalScene(int32_t pageId); + RefPtr GetCurrentMultiModalScene(); + + void DumpMultimodalScene(); + + void PushActiveScene(int32_t newPageId); + void PopActiveScene(int32_t poppedPageId, int32_t incomingPageId); + void ReplaceActiveScene(int32_t newPageId, int32_t replaceId); + void RemoveInactiveScene(int32_t pageId); + +private: + void RemoveMultimodalScene(int32_t pageId); + + RefPtr subscriber_; + std::unordered_map> multiModalScenes_; + int32_t activeSceneId_ = -1; + bool isRegistered_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_MULTIMODAL_MULTIMODAL_MANAGER_H diff --git a/frameworks/core/event/multimodal/multimodal_properties.h b/frameworks/core/event/multimodal/multimodal_properties.h new file mode 100644 index 00000000..c8f7c3e5 --- /dev/null +++ b/frameworks/core/event/multimodal/multimodal_properties.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_MULTIMODAL_MULTIMODAL_PROPERTIES_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_MULTIMODAL_MULTIMODAL_PROPERTIES_H + +#include + +#include "core/event/multimodal/voice_event.h" + +namespace OHOS::Ace { + +struct MultimodalProperties { + std::string voiceLabel; + std::string subscriptLabel; + bool useSubscript = false; + SceneLabel scene = SceneLabel::PAGE; + + bool IsUnavailable() const + { + return voiceLabel.empty() && !useSubscript; + } +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_MULTIMODAL_MULTIMODAL_PROPERTIES_H diff --git a/frameworks/core/event/multimodal/multimodal_scene.cpp b/frameworks/core/event/multimodal/multimodal_scene.cpp new file mode 100644 index 00000000..29275007 --- /dev/null +++ b/frameworks/core/event/multimodal/multimodal_scene.cpp @@ -0,0 +1,159 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/event/multimodal/multimodal_scene.h" + +#include + +#include "base/log/dump_log.h" +#include "base/log/log.h" + +namespace OHOS::Ace { + +std::string MultiModalScene::GetAvailableSubscriptId() +{ + if (cachedIds_.empty()) { + auto newId = currentAvailableId_++; + return std::to_string(newId); + } + auto cachedId = *(cachedIds_.begin()); + cachedIds_.erase(cachedIds_.begin()); + return cachedId; +} + +void MultiModalScene::RemoveSubscriptId(const std::string& subscriptId) +{ + cachedIds_.emplace(subscriptId); +} + +std::string MultiModalScene::GetCurrentMaxSubscriptId() +{ + return std::to_string(currentAvailableId_ - 1); +} + +bool MultiModalScene::SubscribeVoiceEvent(const VoiceEvent& voiceEvent, const MultimodalEventCallback& callback) +{ + if (!callback) { + LOGW("fail to subscribe voice event due to callback is null"); + return false; + } + auto result = voiceEventCallbacks_.try_emplace(voiceEvent.GetVoiceContent(), callback); + if (!result.second) { + LOGW("subscribe duplicate voice event, voice label %{private}s", voiceEvent.GetVoiceContent().c_str()); + return false; + } + voiceEvents_.emplace_back(voiceEvent); + if (!subscriber_) { + LOGE("fail to subscribe voice event due to subscriber is null"); + return false; + } + if (!subscriber_->SubscribeVoiceEvents({ voiceEvent })) { + LOGE("fail to subscribe voice event due to subscribe fail"); + return false; + } + return true; +} + +void MultiModalScene::UnSubscribeVoiceEvent(const VoiceEvent& voiceEvent) +{ + voiceEventCallbacks_.erase(voiceEvent.GetVoiceContent()); + auto iter = std::remove(voiceEvents_.begin(), voiceEvents_.end(), voiceEvent); + if (iter != voiceEvents_.end()) { + voiceEvents_.erase(iter); + if (subscriber_) { + subscriber_->UnSubscribeVoiceEvents({ voiceEvent }); + } + } +} + +void MultiModalScene::SubscribeSubscriptSwitchEvent(const EventCallback& callback) +{ + subscriptSwitchListeners_.emplace_back(callback); +} + +void MultiModalScene::UnSubscribeSubscriptSwitchEvent(const EventCallback& callback) +{ + auto iter = std::remove(subscriptSwitchListeners_.begin(), subscriptSwitchListeners_.end(), callback); + if (iter != subscriptSwitchListeners_.end()) { + subscriptSwitchListeners_.erase(iter); + } +} + +void MultiModalScene::OnNotifyMultimodalEvent(const AceMultimodalEvent& event) +{ + static const int32_t SHOW_BADGE = 6; + static const int32_t HIDE_BADGE = 7; + if (event.GetVoice().action == SHOW_BADGE || event.GetVoice().action == HIDE_BADGE) { + badgeFlag_ = event.GetVoice().action == SHOW_BADGE; + for (const auto& callback : subscriptSwitchListeners_) { + if (callback) { + callback(event.GetVoice().action == SHOW_BADGE); + } + } + } + auto voiceIter = voiceEventCallbacks_.find(event.GetVoice().hotWord); + if (voiceIter != voiceEventCallbacks_.end()) { + (voiceIter->second)(event); + return; + } + auto badgeIter = voiceEventCallbacks_.find(event.GetVoice().badge); + if (badgeIter != voiceEventCallbacks_.end()) { + (badgeIter->second)(event); + } +} + +void MultiModalScene::UnSubscribeAllEvents() +{ + if (subscriber_ && !voiceEvents_.empty()) { + subscriber_->UnSubscribeVoiceEvents(voiceEvents_); + } + voiceEvents_.clear(); + voiceEventCallbacks_.clear(); + subscriptSwitchListeners_.clear(); +} + +void MultiModalScene::Hide() +{ + if (subscriber_ && !voiceEvents_.empty()) { + subscriber_->UnSubscribeVoiceEvents(voiceEvents_); + } +} + +void MultiModalScene::Resume() +{ + if (subscriber_ && !voiceEvents_.empty()) { + subscriber_->SubscribeVoiceEvents(voiceEvents_); + } +} + +MultiModalScene::~MultiModalScene() +{ + UnSubscribeAllEvents(); +} + +void MultiModalScene::Dump() const +{ + if (DumpLog::GetInstance().GetDumpFile()) { + for (const auto& event : voiceEvents_) { + DumpLog::GetInstance().AddDesc("voice event: ", event.GetVoiceContent()); + DumpLog::GetInstance().AddDesc("badge event: ", event.IsBadge()); + } + DumpLog::GetInstance().AddDesc("current badge id: ", currentAvailableId_); + DumpLog::GetInstance().AddDesc("badge flag: ", badgeFlag_); + DumpLog::GetInstance().Print(0, GetTypeName(), voiceEvents_.size()); + } +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/event/multimodal/multimodal_scene.h b/frameworks/core/event/multimodal/multimodal_scene.h new file mode 100644 index 00000000..f1486ae8 --- /dev/null +++ b/frameworks/core/event/multimodal/multimodal_scene.h @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_MULTIMODAL_MULTIMODAL_SCENE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_MULTIMODAL_MULTIMODAL_SCENE_H + +#include +#include +#include + +#include "base/memory/ace_type.h" +#include "base/utils/event_callback.h" +#include "core/event/multimodal/multimodal_subscriber.h" + +namespace OHOS::Ace { + +class MultiModalScene final : public AceType { + DECLARE_ACE_TYPE(MultiModalScene, AceType) + +public: + MultiModalScene(int32_t pageId, const RefPtr& subscriber) + : subscriber_(subscriber), pageId_(pageId) {}; + ~MultiModalScene() override; + + std::string GetAvailableSubscriptId(); + std::string GetCurrentMaxSubscriptId(); + void RemoveSubscriptId(const std::string& subscriptId); + + bool SubscribeVoiceEvent(const VoiceEvent& voiceEvent, const MultimodalEventCallback& callback); + void UnSubscribeVoiceEvent(const VoiceEvent& voiceEvent); + void SubscribeSubscriptSwitchEvent(const EventCallback& callback); + void UnSubscribeSubscriptSwitchEvent(const EventCallback& callback); + void OnNotifyMultimodalEvent(const AceMultimodalEvent& event); + void UnSubscribeAllEvents(); + + void Hide(); + void Resume(); + + int32_t GetPageId() const + { + return pageId_; + } + + void Dump() const; + +private: + std::unordered_set cachedIds_; + std::vector voiceEvents_; + std::vector> subscriptSwitchListeners_; + std::unordered_map voiceEventCallbacks_; + RefPtr subscriber_; + int32_t currentAvailableId_ = 1; + int32_t pageId_ = -1; + bool badgeFlag_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_MULTIMODAL_MULTIMODAL_SCENE_H diff --git a/frameworks/core/event/multimodal/multimodal_subscriber.h b/frameworks/core/event/multimodal/multimodal_subscriber.h new file mode 100644 index 00000000..5973a82f --- /dev/null +++ b/frameworks/core/event/multimodal/multimodal_subscriber.h @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_MULTIMODAL_MULTIMODAL_SUBSCRIBER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_MULTIMODAL_MULTIMODAL_SUBSCRIBER_H + +#include + +#include "base/memory/ace_type.h" +#include "core/event/multimodal/ace_multimodal_event.h" +#include "core/event/multimodal/voice_event.h" + +namespace OHOS::Ace { + +using MultimodalEventCallback = std::function; + +class MultimodalSubscriber : public AceType { + DECLARE_ACE_TYPE(MultimodalSubscriber, AceType) + +public: + virtual void RegisterCallback( + const MultimodalEventCallback& callback, const std::function& successCallback) = 0; + virtual bool SubscribeVoiceEvents(const std::vector& voiceEvents) = 0; + virtual void UnSubscribeVoiceEvents(const std::vector& voiceEvents) = 0; + virtual void UnSubscribeAllEvents() = 0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_MULTIMODAL_MULTIMODAL_SUBSCRIBER_H diff --git a/frameworks/core/event/multimodal/voice_event.h b/frameworks/core/event/multimodal/voice_event.h new file mode 100644 index 00000000..0565aff1 --- /dev/null +++ b/frameworks/core/event/multimodal/voice_event.h @@ -0,0 +1,85 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_MULTIMODAL_VOICE_EVENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_MULTIMODAL_VOICE_EVENT_H + +#include +#include +#include + +namespace OHOS::Ace { + +enum class SceneLabel { + COMMON = 0, + VIDEO, + AUDIO, + PAGE, + SWITCH, +}; + +class VoiceEvent final { +public: + VoiceEvent() = default; + ~VoiceEvent() = default; + VoiceEvent(const std::string& voice, SceneLabel scene, bool isBadge = false) + : voice_(voice), scene_(scene), isBadge_(isBadge) + {} + + void SetBadgeList(const std::vector>& badgeList) + { + badges_ = badgeList; + } + + const std::string& GetVoiceContent() const + { + return voice_; + } + + SceneLabel GetVoiceScene() const + { + return scene_; + } + + bool IsBadge() const + { + return isBadge_; + } + + const std::vector>& GetBadgeList() const + { + return badges_; + } + + bool operator==(const VoiceEvent& rhs) const + { + return voice_ == rhs.GetVoiceContent() && scene_ == rhs.GetVoiceScene(); + } + + bool operator!=(const VoiceEvent& rhs) const + { + return voice_ != rhs.GetVoiceContent() || scene_ != rhs.GetVoiceScene(); + } + +private: + std::string voice_; + SceneLabel scene_ = SceneLabel::COMMON; + bool isBadge_ = false; + std::vector> badges_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_MULTIMODAL_VOICE_EVENT_H diff --git a/frameworks/core/event/rotation_event.h b/frameworks/core/event/rotation_event.h new file mode 100644 index 00000000..2e3caa18 --- /dev/null +++ b/frameworks/core/event/rotation_event.h @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_ROTATION_EVENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_ROTATION_EVENT_H + +namespace OHOS::Ace { + +struct RotationEvent final { + double value = 0.0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_EVENT_ROTATION_EVENT_H diff --git a/frameworks/core/event/test/BUILD.gn b/frameworks/core/event/test/BUILD.gn new file mode 100644 index 00000000..e4c5ec83 --- /dev/null +++ b/frameworks/core/event/test/BUILD.gn @@ -0,0 +1,21 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") + +group("unittest") { + testonly = true + deps = [] + + deps += [ "unittest:unittest" ] +} diff --git a/frameworks/core/event/test/unittest/BUILD.gn b/frameworks/core/event/test/unittest/BUILD.gn new file mode 100644 index 00000000..138cb308 --- /dev/null +++ b/frameworks/core/event/test/unittest/BUILD.gn @@ -0,0 +1,69 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +if (is_standard_system) { + module_output_path = "ace_engine_standard/graphicalbasicability/event" +} + +ohos_unittest("EventsTest") { + module_out_path = module_output_path + + sources = [ "event_test.cpp" ] + + configs = [ "$ace_root:ace_test_config" ] + + deps = [ + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "$ace_root/frameworks/core/components/test:json", + "//third_party/googletest:gtest_main", + ] + if (is_standard_system) { + deps += [ "$ace_root/frameworks/bridge:js_framework_ohos" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +ohos_unittest("MultimodalTest") { + module_out_path = module_output_path + + sources = [ "multimodal_test.cpp" ] + + configs = [ "$ace_root:ace_test_config" ] + + deps = [ + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "$ace_root/frameworks/core/components/test:json", + "//third_party/googletest:gtest_main", + ] + if (is_standard_system) { + deps += [ "$ace_root/frameworks/bridge:js_framework_ohos" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":EventsTest" ] + if (!is_wearable_product) { + deps += [ ":MultimodalTest" ] + } +} diff --git a/frameworks/core/event/test/unittest/event_test.cpp b/frameworks/core/event/test/unittest/event_test.cpp new file mode 100644 index 00000000..759f7dcc --- /dev/null +++ b/frameworks/core/event/test/unittest/event_test.cpp @@ -0,0 +1,511 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include "adapter/ohos/osal/fake_asset_manager.h" +#include "adapter/ohos/osal/fake_task_executor.h" +#include "core/common/platform_window.h" +#include "core/components/test/json/json_frontend.h" +#include "core/event/ace_event_helper.h" +#include "core/event/event_trigger.h" +#include "core/event/key_event.h" +#include "core/event/key_event_recognizer.h" +#include "core/event/mouse_raw_recognizer.h" +#include "core/mock/mock_resource_register.h" + +using namespace testing::ext; +namespace OHOS::Ace { +namespace { + +const std::string EVENT_ID = "1"; +const std::string MOUSE_EVENT_TYPE = "onMouse"; +const double MOUSE_OFFSET = 10.0; +} // namespace + +using AsyncEventCallBack = std::function; +using SyncEventCallBack = std::function; + +class TestEventHandler final : public AceEventHandler { +public: + TestEventHandler() = default; + ~TestEventHandler() = default; + + void SetAsyncEventCallBack(const AsyncEventCallBack& eventCallBack) + { + asyncCallBack_ = eventCallBack; + } + + void SetSyncEventCallBack(const SyncEventCallBack& eventCallBack) + { + syncCallBack_ = eventCallBack; + } + + void HandleAsyncEvent(const EventMarker& eventMarker) override + { + if (asyncCallBack_) { + asyncCallBack_(eventMarker); + } + } + + void HandleAsyncEvent(const EventMarker& eventMarker, int32_t param) override + { + if (asyncCallBack_) { + asyncCallBack_(eventMarker); + } + } + + void HandleAsyncEvent(const EventMarker& eventMarker, const BaseEventInfo& info) override + { + if (asyncCallBack_) { + asyncCallBack_(eventMarker); + } + } + + void HandleAsyncEvent(const EventMarker& eventMarker, const KeyEvent& info) override + { + if (asyncCallBack_) { + asyncCallBack_(eventMarker); + } + } + + void HandleAsyncEvent(const EventMarker& eventMarker, const std::string& param) override + { + if (asyncCallBack_) { + asyncCallBack_(eventMarker); + } + } + + void HandleSyncEvent(const EventMarker& eventMarker, bool& result) override + { + if (syncCallBack_) { + syncCallBack_(eventMarker, result); + } + } + + void HandleSyncEvent(const EventMarker& eventMarker, const BaseEventInfo& info, bool& result) override + { + if (syncCallBack_) { + syncCallBack_(eventMarker, result); + } + } + + void HandleSyncEvent(const EventMarker& eventMarker, const KeyEvent& info, bool& result) override + { + if (syncCallBack_) { + syncCallBack_(eventMarker, result); + } + } + + void HandleSyncEvent(const EventMarker& eventMarker, const std::string& param, std::string& result) override + { + if (syncCallBack_) { + bool resultTmp = false; + syncCallBack_(eventMarker, resultTmp); + result = resultTmp ? "true" : "false"; + } + } + +private: + AsyncEventCallBack asyncCallBack_ = nullptr; + SyncEventCallBack syncCallBack_ = nullptr; +}; + +class TestWindow final : public PlatformWindow { +public: + explicit TestWindow(AceView* aceView) {} + ~TestWindow() override = default; + + // Platform window interface + void RequestFrame() override {} + void RegisterVsyncCallback(AceVsyncCallback&& callback) override {} + void SetRootRenderNode(const RefPtr& root) override {} + +private: + ACE_DISALLOW_COPY_AND_MOVE(TestWindow); +}; + +class EventTriggerResult { +public: + EventTriggerResult() = default; + ~EventTriggerResult() = default; + + void SetEventMaker(const EventMarker& eventMarker) + { + eventMarker_ = eventMarker; + } + + const EventMarker& GetEventMaker() + { + return eventMarker_; + } + +private: + EventMarker eventMarker_; +}; + +class MouseEventResult { +public: + explicit MouseEventResult(const std::string& type) : mouseEventInfo_(type) {}; + ~MouseEventResult() = default; + + const MouseEventInfo& GetMouseEventInfo() const + { + return mouseEventInfo_; + } + + void SetMouseEventInfo(const MouseEventInfo& mouseEventInfo) + { + mouseEventInfo_ = mouseEventInfo; + } + +private: + MouseEventInfo mouseEventInfo_; +}; + +class EventsTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; +}; + +void EventsTest::SetUpTestCase() {} + +void EventsTest::TearDownTestCase() {} + +void EventsTest::SetUp() {} + +void EventsTest::TearDown() {} + +/** + * @tc.name: AsyncEventTrigger001 + * @tc.desc: Verify the async event trigger corresponding asyn event. + * @tc.type: FUNC + * @tc.require: AR000DAVOU AR000DD68J + * @tc.author: huye + */ +HWTEST_F(EventsTest, AsyncEventTrigger001, TestSize.Level0) +{ + /** + * @tc.steps: step1. create event trigger and event handler, set event callback on handler and register to + * trigger. + */ + EventTriggerResult onTriggerResult; + auto testEventHandler = AceType::MakeRefPtr(); + testEventHandler->SetAsyncEventCallBack( + [&onTriggerResult](const EventMarker& eventMarker) { onTriggerResult.SetEventMaker(eventMarker); }); + EventTrigger eventTrigger; + eventTrigger.RegisterEventHandler(testEventHandler); + + /** + * @tc.steps: step2. send async event and trigger. + * @tc.expected: step2. receive event callback and result is right. + */ + EventMarker maker(EVENT_ID); + eventTrigger.TriggerAsyncEvent(maker); + + /** + * @tc.steps: step3. check event info. + * @tc.expected: step3. the event info is right. + */ + ASSERT_EQ(onTriggerResult.GetEventMaker(), EVENT_ID); +} + +/** + * @tc.name: AsyncEventTrigger002 + * @tc.desc: Verify the async event trigger corresponding create asyn event callback. + * @tc.type: FUNC + * @tc.require: AR000DAVOU AR000DD68J + * @tc.author: huye + */ +HWTEST_F(EventsTest, AsyncEventTrigger002, TestSize.Level0) +{ + /** + * @tc.steps: step1. create PipelineContext and register event callback handler. + */ + auto platformWindow = std::make_unique(nullptr); + auto window = std::make_unique(std::move(platformWindow)); + auto taskExecutor = Referenced::MakeRefPtr(); + auto assetManager = Referenced::MakeRefPtr(); + auto resRegister = Referenced::MakeRefPtr(); + auto frontend = Frontend::CreateDefault(); + auto context = + AceType::MakeRefPtr(std::move(window), taskExecutor, assetManager, resRegister, frontend, 0); + + EventTriggerResult onTriggerResult; + auto testEventHandler = AceType::MakeRefPtr(); + testEventHandler->SetAsyncEventCallBack( + [&onTriggerResult](const EventMarker& eventMarker) { onTriggerResult.SetEventMaker(eventMarker); }); + + context->RegisterEventHandler(testEventHandler); + + /** + * @tc.steps: step2. create ace async event call back function and touch the function. + * @tc.expected: step2. receive event callback. + */ + EventMarker maker(EVENT_ID); + auto aceAsyncEvent = AceAsyncEvent::Create(maker, context); + aceAsyncEvent(""); + + /** + * @tc.steps: step3. check event call back info. + * @tc.expected: step3. the event info is right. + */ + ASSERT_EQ(onTriggerResult.GetEventMaker(), EVENT_ID); +} + +/** + * @tc.name: SyncEventTrigger001 + * @tc.desc: Verify the sync event trigger corresponding sync event. + * @tc.type: FUNC + * @tc.require: AR000DC4F9 AR000DD68J + * @tc.author: huye + */ +HWTEST_F(EventsTest, SyncEventTrigger001, TestSize.Level0) +{ + /** + * @tc.steps: step1. create event trigger and event handler, set event callback on handler and register to + * trigger. + */ + EventTriggerResult onTriggerResult; + auto testEventHandler = AceType::MakeRefPtr(); + testEventHandler->SetSyncEventCallBack([&onTriggerResult](const EventMarker& eventMarker, bool& result) { + onTriggerResult.SetEventMaker(eventMarker); + result = true; + }); + EventTrigger eventTrigger; + eventTrigger.RegisterEventHandler(testEventHandler); + + /** + * @tc.steps: step2. send sync event and trigger. + * @tc.expected: step2. receive event callback and result is right. + */ + EventMarker maker(EVENT_ID); + bool result = false; + eventTrigger.TriggerSyncEvent(maker, result); + + /** + * @tc.steps: step3. check event info. + * @tc.expected: step3. the event info is right. + */ + ASSERT_EQ(onTriggerResult.GetEventMaker(), EVENT_ID); + ASSERT_TRUE(result); +} + +/** + * @tc.name: SyncEventTrigger002 + * @tc.desc: Verify the sync event trigger corresponding create asyn event callback. + * @tc.type: FUNC + * @tc.require: AR000DC4F9 AR000DD68J + * @tc.author: huye + */ +HWTEST_F(EventsTest, SyncEventTrigger002, TestSize.Level0) +{ + /** + * @tc.steps: step1. create PipelineContext and register event callback handler. + */ + auto platformWindow = std::make_unique(nullptr); + auto window = std::make_unique(std::move(platformWindow)); + auto taskExecutor = Referenced::MakeRefPtr(); + auto assetManager = Referenced::MakeRefPtr(); + auto resRegister = Referenced::MakeRefPtr(); + auto frontend = Frontend::CreateDefault(); + auto context = + AceType::MakeRefPtr(std::move(window), taskExecutor, assetManager, resRegister, frontend, 0); + + EventTriggerResult onTriggerResult; + auto testEventHandler = AceType::MakeRefPtr(); + testEventHandler->SetSyncEventCallBack([&onTriggerResult](const EventMarker& eventMarker, bool& result) { + onTriggerResult.SetEventMaker(eventMarker); + result = true; + }); + + context->RegisterEventHandler(testEventHandler); + + /** + * @tc.steps: step2. create ace sync event call back function and touch the function. + * @tc.expected: step2. receive event callback. + */ + EventMarker maker(EVENT_ID); + auto aceSyncEvent = AceSyncEvent::Create(maker, context); + + std::string result = "false"; + aceSyncEvent("", result); + + /** + * @tc.steps: step3. check event call back info. + * @tc.expected: step3. the event info is right. + */ + ASSERT_EQ(result, "true"); + ASSERT_EQ(onTriggerResult.GetEventMaker(), EVENT_ID); +} + +/** + * @tc.name: KeyLongPress001 + * @tc.desc: Verify the event corresponding touch key long press. + * @tc.type: FUNC + * @tc.require: AR000DB0UK + * @tc.author: huye + */ +HWTEST_F(EventsTest, KeyLongPress001, TestSize.Level0) +{ + /** + * @tc.steps: step1.create key event recognizer + */ + KeyEventRecognizer keyRecognizer; + + /** + * @tc.steps: step2. touch key down touch firstly. + * @tc.expected: step2. receive key events and check info right. + */ + auto keyEvents = keyRecognizer.GetKeyEvents( + static_cast(KeyCode::TV_CONTROL_LEFT), static_cast(KeyAction::DOWN), 0); + ASSERT_FALSE(keyEvents.empty()); + if (!keyEvents.empty()) { + ASSERT_EQ(keyEvents.back().code, KeyCode::TV_CONTROL_LEFT); + ASSERT_EQ(keyEvents.back().action, KeyAction::DOWN); + } + + /** + * @tc.steps: step3. touch key down touch secondly as platform. + * @tc.expected: step3. receive key events and check info right. + */ + keyEvents = keyRecognizer.GetKeyEvents( + static_cast(KeyCode::TV_CONTROL_LEFT), static_cast(KeyAction::DOWN), 1); + ASSERT_FALSE(keyEvents.empty()); + if (!keyEvents.empty()) { + ASSERT_EQ(keyEvents.back().code, KeyCode::TV_CONTROL_LEFT); + ASSERT_EQ(keyEvents.back().action, KeyAction::LONG_PRESS); + } + + /** + * @tc.steps: step4. touch key up touch + * @tc.expected: step4. receive key events and check info right. + */ + keyEvents = keyRecognizer.GetKeyEvents( + static_cast(KeyCode::TV_CONTROL_LEFT), static_cast(KeyAction::UP), 0); + ASSERT_FALSE(keyEvents.empty()); + if (!keyEvents.empty()) { + ASSERT_EQ(keyEvents.back().code, KeyCode::TV_CONTROL_LEFT); + ASSERT_EQ(keyEvents.back().action, KeyAction::UP); + } +} + +/** + * @tc.name: KeyLongPress002 + * @tc.desc: Verify the event corresponding touch key click press. + * @tc.type: FUNC + * @tc.require: AR000DB0UK + * @tc.author: huye + */ +HWTEST_F(EventsTest, KeyLongPress002, TestSize.Level0) +{ + /** + * @tc.steps: step1.create key event recognizer + */ + KeyEventRecognizer keyRecognizer; + + /** + * @tc.steps: step2. touch key down touch firstly. + * @tc.expected: step2. receive key events and check info right. + */ + auto keyEvents = keyRecognizer.GetKeyEvents( + static_cast(KeyCode::TV_CONTROL_LEFT), static_cast(KeyAction::DOWN), 0); + ASSERT_FALSE(keyEvents.empty()); + if (!keyEvents.empty()) { + ASSERT_EQ(keyEvents.back().code, KeyCode::TV_CONTROL_LEFT); + ASSERT_EQ(keyEvents.back().action, KeyAction::DOWN); + } + + /** + * @tc.steps: step3. touch key up touch + * @tc.expected: step3. receive key events and check info right. + */ + keyEvents = keyRecognizer.GetKeyEvents( + static_cast(KeyCode::TV_CONTROL_LEFT), static_cast(KeyAction::UP), 0); + ASSERT_FALSE(keyEvents.empty()); + if (!keyEvents.empty()) { + ASSERT_EQ(keyEvents.back().code, KeyCode::TV_CONTROL_LEFT); + ASSERT_EQ(keyEvents.back().action, KeyAction::CLICK); + } +} + +/** + * @tc.name: RawMouseRecognizer001 + * @tc.desc: Verify the raw recognizer recognizes corresponding mouse event. + * @tc.type: FUNC + * @tc.require: AR000DQ249 + * @tc.author: huye + */ +HWTEST_F(EventsTest, RawMouseRecognizer001, TestSize.Level0) +{ + /** + * @tc.steps: step1. create raw mouse recognizer and set mouse event callback. + */ + MouseEventResult onMouse(""); + auto mouseRawRecognizer = AceType::MakeRefPtr(); + mouseRawRecognizer->SetOnMouse([&onMouse](const MouseEventInfo& info) { onMouse.SetMouseEventInfo(info); }); + + /** + * @tc.steps: step2. send mouse event. + * @tc.expected: step2. receive mouse callback and result is right. + */ + MouseEvent event { .x = 100, + .y = 100, + .z = 100, + .deltaX = 50, + .deltaY = 50.0, + .deltaZ = 50.0, + .scrollX = 0.0, + .scrollY = 0.0, + .scrollZ = 0.0, + .action = MouseAction::PRESS, + .button = MouseButton::LEFT_BUTTON, + .pressedButtons = 0x11, + .time = std::chrono::high_resolution_clock::now() }; + + mouseRawRecognizer->SetCoordinateOffset(Offset(MOUSE_OFFSET, MOUSE_OFFSET)); + mouseRawRecognizer->HandleEvent(event); + + MouseEventInfo mouseInfo = onMouse.GetMouseEventInfo(); + ASSERT_EQ(mouseInfo.GetType(), MOUSE_EVENT_TYPE); + + /** + * @tc.steps: step3. check the mouse location info. + * @tc.expected: step3. the mouse location info is right. + */ + const MouseEvent& globalMouse = mouseInfo.GetGlobalMouse(); + const MouseEvent& localMouse = mouseInfo.GetLocalMouse(); + + ASSERT_EQ(globalMouse.x, event.x); + ASSERT_EQ(globalMouse.y, event.y); + ASSERT_EQ(globalMouse.z, event.z); + ASSERT_EQ(globalMouse.deltaX, event.deltaX); + ASSERT_EQ(globalMouse.deltaY, event.deltaY); + ASSERT_EQ(globalMouse.deltaZ, event.deltaZ); + ASSERT_EQ(globalMouse.scrollX, event.scrollX); + ASSERT_EQ(globalMouse.scrollY, event.scrollY); + ASSERT_EQ(globalMouse.scrollZ, event.scrollZ); + ASSERT_EQ(globalMouse.action, event.action); + ASSERT_EQ(globalMouse.button, event.button); + ASSERT_EQ(globalMouse.pressedButtons, event.pressedButtons); + ASSERT_EQ(globalMouse.time, event.time); + + ASSERT_EQ(localMouse.x, event.x - MOUSE_OFFSET); + ASSERT_EQ(localMouse.y, event.y - MOUSE_OFFSET); +} +} // namespace OHOS::Ace diff --git a/frameworks/core/event/test/unittest/multimodal_test.cpp b/frameworks/core/event/test/unittest/multimodal_test.cpp new file mode 100644 index 00000000..6af1f6d0 --- /dev/null +++ b/frameworks/core/event/test/unittest/multimodal_test.cpp @@ -0,0 +1,119 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include "core/event/multimodal/multimodal_manager.h" +#include "gtest/gtest.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { + +class MultimodalTest : public testing::Test { +public: + static void SetUpTestCase() {} + static void TearDownTestCase() {} + + void SetUp() override {} + void TearDown() override {} +}; + +/** + * @tc.name: MultimodalTest001 + * @tc.desc: Verify multi-mode page logic. + * @tc.type: FUNC + * @tc.require: AR000DQ3VB + * @tc.author: jiangyingjie + */ +HWTEST_F(MultimodalTest, MultimodalTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. Multi-mode manager for building two pages + */ + auto manager = AceType::MakeRefPtr(); + manager->PushActiveScene(1); + manager->PushActiveScene(2); + + /** + * @tc.steps: step2. get current multimodalScene + * @tc.expected: step2. pageId of multimodalScene is 2. + */ + auto multimodalScene = manager->GetCurrentMultiModalScene(); + EXPECT_EQ(multimodalScene->GetPageId(), 2); + + /** + * @tc.steps: step3. pop current multimodalScene + * @tc.expected: step3. pageId of multimodalScene is 1. + */ + manager->PopActiveScene(2, 1); + multimodalScene = manager->GetCurrentMultiModalScene(); + EXPECT_EQ(multimodalScene->GetPageId(), 1); + + /** + * @tc.steps: step4. replace current multimodalScene + * @tc.expected: step4. pageId of multimodalScene is 3. + */ + manager->ReplaceActiveScene(3, 1); + multimodalScene = manager->GetCurrentMultiModalScene(); + EXPECT_EQ(multimodalScene->GetPageId(), 3); +} + +/** + * @tc.name: MultimodalTest002 + * @tc.desc: Verification of incremental logic. + * @tc.type: FUNC + * @tc.require: AR000DQ3VE + * @tc.author: jiangyingjie + */ +HWTEST_F(MultimodalTest, MultimodalTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. Multi-mode manager for building two pages + */ + auto manager = AceType::MakeRefPtr(); + manager->PushActiveScene(1); + manager->PushActiveScene(2); + + /** + * @tc.steps: step2. Get current corner number + * @tc.expected: step2. Corner number increment. + */ + auto multimodalScene = manager->GetCurrentMultiModalScene(); + EXPECT_EQ(multimodalScene->GetAvailableSubscriptId(), "1"); + EXPECT_EQ(multimodalScene->GetAvailableSubscriptId(), "2"); + EXPECT_EQ(multimodalScene->GetAvailableSubscriptId(), "3"); + EXPECT_EQ(multimodalScene->GetAvailableSubscriptId(), "4"); + + /** + * @tc.steps: step3. Remove corner number 3 + * @tc.expected: step3. Minus one for the largest corner number. + */ + multimodalScene->RemoveSubscriptId("3"); + EXPECT_EQ(multimodalScene->GetAvailableSubscriptId(), "3"); + + /** + * @tc.steps: step4. Get the corner of a new page + * @tc.expected: step4. The subscript increases from 1. + */ + multimodalScene = manager->GetMultiModalScene(1); + EXPECT_EQ(multimodalScene->GetAvailableSubscriptId(), "1"); + EXPECT_EQ(multimodalScene->GetAvailableSubscriptId(), "2"); + EXPECT_EQ(multimodalScene->GetAvailableSubscriptId(), "3"); + +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/focus/focus_animation_manager.cpp b/frameworks/core/focus/focus_animation_manager.cpp new file mode 100644 index 00000000..7c8276fb --- /dev/null +++ b/frameworks/core/focus/focus_animation_manager.cpp @@ -0,0 +1,246 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/focus/focus_animation_manager.h" + +#include "core/components/focus_animation/render_focus_animation.h" +#include "core/components/shadow/render_shadow.h" +#include "core/components/shadow/shadow_element.h" +#include "core/components/stack/stack_element.h" + +namespace OHOS::Ace { + +void FocusAnimationManager::SetFocusAnimationProperties(const RRect& rrect, const Color& color, + const Offset& offset) const +{ + if (focusAnimationStack_.empty() || (useRoot_ && rootFocusAnimationStack_.empty())) { + LOGE("focus animation stack is empty"); + return; + } + auto focusAnimation = useRoot_ ? rootFocusAnimationStack_.top().Upgrade() : focusAnimationStack_.top().Upgrade(); + if (!focusAnimation) { + LOGE("focusAnimation get failed"); + return; + } + focusAnimation->SetFocusAnimationProperties(rrect, color, offset); +} + +void FocusAnimationManager::SetAvailableRect(const Rect& paintRect) +{ + availableRect_ = paintRect; +} + +void FocusAnimationManager::CancelFocusAnimation() const +{ + if (focusAnimationStack_.empty() || (useRoot_ && rootFocusAnimationStack_.empty())) { + LOGE("focus animation stack is empty"); + return; + } + auto focusAnimation = useRoot_ ? rootFocusAnimationStack_.top().Upgrade() : focusAnimationStack_.top().Upgrade(); + if (!focusAnimation) { + LOGE("focusAnimation get failed"); + return; + } + focusAnimation->CancelFocusAnimation(); +} + +void FocusAnimationManager::PushFocusAnimationElement(const RefPtr& element) +{ + auto focusElement = AceType::DynamicCast(element); + if (!focusElement) { + LOGE("fail to get FocusAnimationElement"); + return; + } + auto renderFocus = AceType::DynamicCast(focusElement->GetRenderNode()); + if (!renderFocus) { + LOGE("fail to get RenderFocusAnimation"); + return; + } + renderFocus->SetPaintRect(availableRect_); + RefPtr cancelAnimation; + if (focusElement->IsRoot()) { + if (!rootFocusAnimationStack_.empty()) { + cancelAnimation = rootFocusAnimationStack_.top().Upgrade(); + } + rootFocusAnimationStack_.push(renderFocus); + } else { + if (!focusAnimationStack_.empty()) { + cancelAnimation = focusAnimationStack_.top().Upgrade(); + } + focusAnimationStack_.push(renderFocus); + } + if (cancelAnimation) { + cancelAnimation->CancelFocusAnimation(); + } +} + +void FocusAnimationManager::PopFocusAnimationElement() +{ + if (focusAnimationStack_.empty()) { + LOGE("focus animation stack is empty"); + return; + } + focusAnimationStack_.pop(); + if (!focusAnimationStack_.empty()) { + auto focusAnimation = focusAnimationStack_.top().Upgrade(); + if (focusAnimation) { + focusAnimation->StartFocusAnimation(); + } + } +} + +void FocusAnimationManager::PopRootFocusAnimationElement() +{ + if (rootFocusAnimationStack_.empty()) { + LOGE("focus animation stack is empty"); + return; + } + rootFocusAnimationStack_.pop(); +} + +void FocusAnimationManager::StartFocusAnimation() const +{ + if (focusAnimationStack_.empty()) { + LOGE("focus animation stack is empty"); + return; + } + auto focusAnimation = focusAnimationStack_.top().Upgrade(); + if (!focusAnimation) { + LOGE("focusAnimation get failed"); + return; + } + focusAnimation->StartFocusAnimation(); +} + +void FocusAnimationManager::StopFocusAnimation() const +{ + if (focusAnimationStack_.empty()) { + LOGE("focus animation stack is empty"); + return; + } + auto focusAnimation = focusAnimationStack_.top().Upgrade(); + if (!focusAnimation) { + LOGE("focusAnimation get failed"); + return; + } + focusAnimation->StopFocusAnimation(); +} + +void FocusAnimationManager::SetFocusAnimationProperties( + const RRect& rrect, const Color& color, const Offset& offset, const Rect& clipRect) const +{ + if (focusAnimationStack_.empty()) { + LOGE("focus animation stack is empty"); + return; + } + auto focusAnimation = focusAnimationStack_.top().Upgrade(); + if (!focusAnimation) { + LOGE("focusAnimation get failed"); + return; + } + focusAnimation->SetFocusAnimationProperties(rrect, color, offset, clipRect); +} + +void FocusAnimationManager::PushShadow(const RefPtr& element) +{ + auto shadowElement = AceType::DynamicCast(element); + if (!shadowElement) { + LOGE("fail to get shadowElement"); + return; + } + auto renderShadow = AceType::DynamicCast(shadowElement->GetRenderNode()); + if (!renderShadow) { + LOGE("fail to get renderShadow"); + return; + } + shadowStack_.push(renderShadow); +} + +void FocusAnimationManager::PopShadow() +{ + if (shadowStack_.empty()) { + LOGE("shadow stack is empty"); + return; + } + shadowStack_.pop(); +} + +void FocusAnimationManager::SetShadowProperties(const RRect& rrect, const Offset& offset) +{ + if (shadowStack_.empty()) { + LOGE("shadow stack is empty"); + return; + } + auto shadow = shadowStack_.top().Upgrade(); + if (!shadow) { + LOGE("shadow get failed"); + return; + } + shadow->SetShadowProperties(rrect, offset); +} + +void FocusAnimationManager::SetShadowProperties(const RRect& rrect, const Offset& offset, const Rect& clipRect) +{ + if (shadowStack_.empty()) { + LOGE("shadow stack is empty"); + return; + } + auto shadow = shadowStack_.top().Upgrade(); + if (!shadow) { + LOGE("shadow get failed"); + return; + } + shadow->SetShadowProperties(rrect, offset, clipRect); +} + +void FocusAnimationManager::CancelShadow() const +{ + if (shadowStack_.empty()) { + LOGE("shadow stack is empty"); + return; + } + auto shadow = shadowStack_.top().Upgrade(); + if (!shadow) { + LOGE("shadow get failed"); + return; + } + shadow->CancelShadow(); +} + +RefPtr FocusAnimationManager::GetRenderFocusAnimation() const +{ + if (focusAnimationStack_.empty() || (useRoot_ && rootFocusAnimationStack_.empty())) { + return nullptr; + } + auto focusAnimation = useRoot_ ? rootFocusAnimationStack_.top().Upgrade() : focusAnimationStack_.top().Upgrade(); + if (!focusAnimation) { + LOGE("focusAnimation get failed"); + return nullptr; + } + return focusAnimation; +} + +void FocusAnimationManager::SetUseRoot(bool useRoot) +{ + useRoot_ = useRoot; + if (!useRoot_ && !rootFocusAnimationStack_.empty()) { + auto focusAnimation = rootFocusAnimationStack_.top().Upgrade(); + if (focusAnimation) { + focusAnimation->CancelFocusAnimation(); + } + } +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/focus/focus_animation_manager.h b/frameworks/core/focus/focus_animation_manager.h new file mode 100644 index 00000000..fd5b1e96 --- /dev/null +++ b/frameworks/core/focus/focus_animation_manager.h @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_FOCUS_ANIMATION_MANAGER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_FOCUS_ANIMATION_MANAGER_H + +#include + +#include "base/geometry/rrect.h" +#include "base/memory/ace_type.h" +#include "core/components/common/properties/color.h" + +namespace OHOS::Ace { + +class Element; +class RenderFocusAnimation; +class RenderShadow; + +class FocusAnimationManager : public virtual AceType { + DECLARE_ACE_TYPE(FocusAnimationManager, AceType); + +public: + FocusAnimationManager() = default; + ~FocusAnimationManager() override = default; + + void SetFocusAnimationProperties(const RRect& rrect, const Color& color, const Offset& offset) const; + void SetFocusAnimationProperties( + const RRect& rrect, const Color& color, const Offset& offset, const Rect& clipRect) const; + void SetAvailableRect(const Rect& paintRect); + void CancelFocusAnimation() const; + void PushFocusAnimationElement(const RefPtr& element); + void PopFocusAnimationElement(); + void PopRootFocusAnimationElement(); + void PushShadow(const RefPtr& element); + void PopShadow(); + void StartFocusAnimation() const; + void StopFocusAnimation() const; + void SetShadowProperties(const RRect& rrect, const Offset& offset); + void SetShadowProperties(const RRect& rrect, const Offset& offset, const Rect& clipRect); + void CancelShadow() const; + void SetUseRoot(bool useRoot); + RefPtr GetRenderFocusAnimation() const; + +private: + Rect availableRect_; + bool useRoot_ = false; + std::stack> rootFocusAnimationStack_; + std::stack> focusAnimationStack_; + std::stack> shadowStack_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_FOCUS_ANIMATION_MANAGER_H diff --git a/frameworks/core/focus/focus_node.cpp b/frameworks/core/focus/focus_node.cpp new file mode 100644 index 00000000..6bf4012f --- /dev/null +++ b/frameworks/core/focus/focus_node.cpp @@ -0,0 +1,554 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/focus/focus_node.h" + +#include + +#include "base/log/dump_log.h" +#include "base/log/log.h" +#include "core/common/ace_application_info.h" +#include "core/components/flex/flex_element.h" +#include "core/pipeline/base/composed_element.h" +#include "core/pipeline/base/render_element.h" + +namespace OHOS::Ace { +namespace { + +inline RefPtr GetRenderNode(const RefPtr& node) +{ + auto element = AceType::DynamicCast(node); + if (!element) { + auto composedElement = AceType::DynamicCast(node); + if (composedElement) { + auto child = composedElement->GetChildren().front(); + return child ? child->GetRenderNode() : nullptr; + } + return nullptr; + } + return element->GetRenderNode(); +} + +} // namespace + +int32_t FocusNode::GenerateFocusIndex() +{ + static std::atomic counter { 1 }; + return counter.fetch_add(1, std::memory_order_relaxed); +} + +bool FocusNode::HandleKeyEvent(const KeyEvent& keyEvent) +{ + if (!IsCurrentFocus()) { + return false; + } + + if (OnKeyEvent(keyEvent)) { + return true; + } + + if (keyEvent.action != KeyAction::CLICK) { + return false; + } + + switch (keyEvent.code) { + case KeyCode::KEYBOARD_ENTER: + case KeyCode::KEYBOARD_NUMBER_ENTER: + case KeyCode::KEYBOARD_CENTER: + OnClick(); + return true; + + default: + return false; + } +} + +void FocusNode::DumpFocus() {} + +void FocusNode::DumpFocusTree(int32_t depth) +{ + if (DumpLog::GetInstance().GetDumpFile()) { + DumpFocus(); + std::string information = AceType::TypeName(this); + if (IsCurrentFocus()) { + information += "(Node*)"; + } else { + information += "(Node)"; + } + + if (!IsFocusable()) { + information = "(-)" + information; + } + DumpLog::GetInstance().Print(depth, information, 0); + } +} + +bool FocusNode::RequestFocusImmediately() +{ + if (IsCurrentFocus()) { + return true; + } + + if (!IsFocusable()) { + return false; + } + + currentFocus_ = true; + UpdateAccessibilityFocusInfo(); + auto parent = GetParent().Upgrade(); + if (parent) { + parent->SwitchFocus(AceType::Claim(this)); + } + + HandleFocus(); + return true; +} + +void FocusNode::UpdateAccessibilityFocusInfo() +{ + auto renderNode = GetRenderNode(AceType::Claim(this)); + if (!renderNode) { + LOGW("FocusNode renderNode is null."); + return; + } + auto accessibilityNode = renderNode->GetAccessibilityNode().Upgrade(); + if (!accessibilityNode) { + return; + } + accessibilityNode->SetFocusedState(currentFocus_); +} + +void FocusNode::LostFocus() +{ + if (IsCurrentFocus()) { + currentFocus_ = false; + UpdateAccessibilityFocusInfo(); + OnBlur(); + } +} + +void FocusNode::LostSelfFocus() +{ + if (IsCurrentFocus()) { + SetFocusable(false); + SetFocusable(true); + } +} + +void FocusNode::RemoveSelf() +{ + auto parent = parent_.Upgrade(); + if (parent) { + parent->RemoveChild(AceType::Claim(this)); + } +} + +void FocusNode::SetFocusable(bool focusable) +{ + if (focusable_ == focusable) { + return; + } + focusable_ = focusable; + RefreshParentFocusable(FocusNode::IsFocusable()); + RefreshFocus(); +} + +void FocusNode::SetShow(bool show) +{ + show_ = show; + if (!show) { + RefreshFocus(); + } +} + +void FocusNode::RefreshFocus() +{ + if (!IsCurrentFocus()) { + return; + } + + // lost current focus and request another focus + auto parent = GetParent().Upgrade(); + + // current node is root node + if (!parent) { + LostFocus(); + return; + } + while (!parent->IsFocusable()) { + // parent node is root node + if (!parent->GetParent().Upgrade()) { + parent->LostFocus(); + return; + } + parent = parent->GetParent().Upgrade(); + } + parent->LostFocus(); + parent->RequestFocusImmediately(); +} + +void FocusNode::RefreshParentFocusable(bool focusable) +{ + // do nothing +} + +void FocusNode::RequestFocus() +{ + if (IsCurrentFocus()) { + return; + } + + auto element = AceType::DynamicCast(this); + if (!element) { + return; + } + auto context = element->GetContext().Upgrade(); + if (context) { + context->AddDirtyFocus(AceType::Claim(this)); + } else { + LOGE("fail to add dirty focus due to context is null"); + } +} + +void FocusGroup::AddChild(const RefPtr& focusNode) +{ + // Already belong to any focus scope. + if (!focusNode || !focusNode->GetParent().Invalid()) { + return; + } + + auto it = std::find(focusNodes_.begin(), focusNodes_.end(), focusNode); + if (it == focusNodes_.end()) { + focusNodes_.emplace_back(focusNode); + focusNode->SetParent(AceType::WeakClaim(this)); + } +} + +void FocusGroup::AddChild(const RefPtr& focusNode, const RefPtr& nextFocusNode) +{ + // Already belong to any focus scope. + if (!focusNode || !focusNode->GetParent().Invalid()) { + return; + } + + auto it = std::find(focusNodes_.begin(), focusNodes_.end(), focusNode); + auto pos = std::find(focusNodes_.begin(), focusNodes_.end(), nextFocusNode); + if (it == focusNodes_.end()) { + focusNodes_.insert(pos, focusNode); + focusNode->SetParent(AceType::WeakClaim(this)); + } +} + +void FocusGroup::DumpFocusTree(int32_t depth) +{ + if (DumpLog::GetInstance().GetDumpFile()) { + DumpFocus(); + std::string information = AceType::TypeName(this); + if (IsCurrentFocus()) { + information += "(Scope*)"; + } else { + information += "(Scope)"; + } + + if (!IsFocusable()) { + information = "(-)" + information; + } + DumpLog::GetInstance().Print(depth, information, focusNodes_.size()); + } + + for (const auto& item : focusNodes_) { + item->DumpFocusTree(depth + 1); + } +} + +void FocusGroup::RemoveChild(const RefPtr& focusNode) +{ + // Not belong to this focus scope. + if (!focusNode || focusNode->GetParent() != this) { + return; + } + + if (focusNode->IsCurrentFocus()) { + // Try to goto next focus, otherwise goto previous focus. + if (!GoToNextFocus(true) && !GoToNextFocus(false)) { + itLastFocusNode_ = focusNodes_.end(); + } + focusNode->LostFocus(); + } else { + if (itLastFocusNode_ != focusNodes_.end() && (*itLastFocusNode_) == focusNode) { + itLastFocusNode_ = focusNodes_.end(); + } + } + + auto it = std::find(focusNodes_.begin(), focusNodes_.end(), focusNode); + if (it == focusNodes_.end()) { + return; + } + focusNodes_.erase(it); + focusNode->SetParent(nullptr); +} + +void FocusGroup::SwitchFocus(const RefPtr& focusNode) +{ + auto it = std::find(focusNodes_.begin(), focusNodes_.end(), focusNode); + ACE_DCHECK(it != focusNodes_.end()); + + auto itFocusNode = itLastFocusNode_; + itLastFocusNode_ = it; + + if (IsCurrentFocus()) { + if (itFocusNode != focusNodes_.end() && itFocusNode != it) { + (*itFocusNode)->LostFocus(); + } + } else { + RequestFocusImmediately(); + } +} + +bool FocusGroup::IsFocusable() const +{ + if (!FocusNode::IsFocusable()) { + return false; + } + return std::any_of(focusNodes_.begin(), focusNodes_.end(), + [](const RefPtr& focusNode) { return focusNode->IsFocusable(); }); +} + +bool FocusGroup::GoToNextFocus(bool reverse, const Rect& rect) +{ + if (focusNodes_.empty()) { + return false; + } + auto itNewFocusNode = itLastFocusNode_; + + if (reverse) { + while (itNewFocusNode != focusNodes_.begin()) { + --itNewFocusNode; + if (TryRequestFocus(*itNewFocusNode, rect)) { + return true; + } + } + } else { + if (itNewFocusNode == focusNodes_.end()) { + itNewFocusNode = focusNodes_.begin(); + } else { + ++itNewFocusNode; + } + + while (itNewFocusNode != focusNodes_.end()) { + if (TryRequestFocus(*itNewFocusNode, rect)) { + return true; + } + ++itNewFocusNode; + } + } + + return false; +} + +bool FocusGroup::OnKeyEvent(const KeyEvent& keyEvent) +{ + ACE_DCHECK(IsCurrentFocus()); + if (itLastFocusNode_ != focusNodes_.end() && (*itLastFocusNode_)->HandleKeyEvent(keyEvent)) { + return true; + } + + if (FocusNode::OnKeyEvent(keyEvent)) { + return true; + } + + if (keyEvent.action != KeyAction::UP) { + return false; + } + + if (!CalculatePosition()) { + return false; + } + + LOGD("Position information: X: %{public}lf Y: %{public}lf W: %{public}lf H: %{public}lf", GetRect().Left(), + GetRect().Top(), GetRect().Width(), GetRect().Height()); + + switch (keyEvent.code) { + case KeyCode::TV_CONTROL_UP: + return RequestNextFocus(true, true, GetRect()); + case KeyCode::TV_CONTROL_DOWN: + return RequestNextFocus(true, false, GetRect()); + case KeyCode::TV_CONTROL_LEFT: + return RequestNextFocus(false, !AceApplicationInfo::GetInstance().IsRightToLeft(), GetRect()); + case KeyCode::TV_CONTROL_RIGHT: + return RequestNextFocus(false, AceApplicationInfo::GetInstance().IsRightToLeft(), GetRect()); + case KeyCode::KEYBOARD_TAB: + return RequestNextFocus(false, false, GetRect()) || RequestNextFocus(true, false, GetRect()); + default: + return false; + } +} + +bool FocusGroup::CalculatePosition() +{ + if (itLastFocusNode_ == focusNodes_.end()) { + return false; + } + + Rect childRect; + if (!CalculateRect(*itLastFocusNode_, childRect)) { + return false; + } + + if ((*itLastFocusNode_)->IsChild()) { + auto renderNode = GetRenderNode(*itLastFocusNode_); + if (!renderNode) { + return false; + } + + Rect rect(childRect.GetOffset(), renderNode->GetLayoutSize()); + (*itLastFocusNode_)->SetRect(rect); + SetRect(rect); + } else { + SetRect((*itLastFocusNode_)->GetRect() + childRect.GetOffset()); + } + + return true; +} + +void FocusGroup::OnFocus() +{ + if (focusNodes_.empty()) { + return; + } + + auto itFocusNode = itLastFocusNode_; + do { + if (itLastFocusNode_ == focusNodes_.end()) { + itLastFocusNode_ = focusNodes_.begin(); + } + if ((*itLastFocusNode_)->RequestFocusImmediately()) { + FocusNode::OnFocus(); + return; + } + } while ((++itLastFocusNode_) != itFocusNode); + + // Not found any focusable node, clear focus. + itLastFocusNode_ = focusNodes_.end(); +} + +void FocusGroup::OnBlur() +{ + FocusNode::OnBlur(); + + if (itLastFocusNode_ != focusNodes_.end()) { + (*itLastFocusNode_)->LostFocus(); + } +} + +void FocusGroup::SetShow(bool show) +{ + FocusNode::SetShow(show); + RefreshParentFocusable(FocusNode::IsFocusable()); +} + +bool FocusGroup::TryRequestFocus(const RefPtr& focusNode, const Rect& rect) +{ + if (rect.IsValid()) { + Rect childRect; + if (!CalculateRect(focusNode, childRect) || + !focusNode->AcceptFocusByRectOfLastFocus(rect - childRect.GetOffset())) { + return false; + } + } + return focusNode->RequestFocusImmediately(); +} + +bool FocusGroup::AcceptFocusByRectOfLastFocus(const Rect& rect) +{ + if (focusNodes_.empty()) { + return false; + } + + auto itFocusNode = itLastFocusNode_; + do { + if (itLastFocusNode_ == focusNodes_.end()) { + itLastFocusNode_ = focusNodes_.begin(); + if (itLastFocusNode_ == itFocusNode) { + break; + } + } + Rect childRect; + if (!CalculateRect(*itLastFocusNode_, childRect)) { + continue; + } + + if ((*itLastFocusNode_)->AcceptFocusByRectOfLastFocus(rect - childRect.GetOffset())) { + return true; + } + } while ((++itLastFocusNode_) != itFocusNode); + + return false; +} + +bool FocusGroup::CalculateRect(const RefPtr& node, Rect& rect) +{ + auto renderNode = GetRenderNode(AceType::Claim(this)); + if (!renderNode) { + return false; + } + Offset nowOffset = renderNode->GetOffsetFromOrigin(Offset()); + + renderNode = GetRenderNode(node); + if (!renderNode) { + return false; + } + Offset childOffset = renderNode->GetOffsetFromOrigin(Offset()); + rect.SetRect(childOffset - nowOffset, renderNode->GetLayoutSize()); + return true; +} + +void FocusGroup::RefreshParentFocusable(bool focusable) +{ + for (auto& item : focusNodes_) { + if (focusable != item->IsParentFocusable()) { + item->SetParentFocusable(focusable); + item->RefreshParentFocusable(item->FocusNode::IsFocusable()); + } + } +} + +void FocusGroup::RebuildChild(std::list>&& rebuildFocusNodes) +{ + if (rebuildFocusNodes.empty() || rebuildFocusNodes.size() > focusNodes_.size()) { + return; + } + + focusNodes_ = std::move(rebuildFocusNodes); + itLastFocusNode_ = focusNodes_.end(); + if (!IsCurrentFocus()) { + return; + } + + auto it = focusNodes_.begin(); + while (it != focusNodes_.end()) { + if ((*it)->IsCurrentFocus()) { + itLastFocusNode_ = it; + return; + } + ++it; + } + + LostFocus(); + itLastFocusNode_ = focusNodes_.end(); + RequestFocusImmediately(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/focus/focus_node.h b/frameworks/core/focus/focus_node.h new file mode 100644 index 00000000..9d15fb2f --- /dev/null +++ b/frameworks/core/focus/focus_node.h @@ -0,0 +1,248 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_FOCUS_FOCUS_NODE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_FOCUS_FOCUS_NODE_H + +#include +#include + +#include "base/geometry/rect.h" +#include "base/memory/ace_type.h" +#include "base/utils/macros.h" +#include "base/utils/noncopyable.h" +#include "core/event/key_event.h" + +namespace OHOS::Ace { + +class FocusGroup; + +class ACE_EXPORT FocusNode : public virtual AceType { + DECLARE_ACE_TYPE(FocusNode, AceType); + ACE_DISALLOW_COPY_AND_MOVE(FocusNode); + +public: + explicit FocusNode(bool focusable = true) : focusable_(focusable) {} + ~FocusNode() override = default; + + bool HandleKeyEvent(const KeyEvent& keyEvent); + bool RequestFocusImmediately(); + void UpdateAccessibilityFocusInfo(); + // Use pipeline to request focus. In this case that node gets focus when the layout needs to be completed. + void RequestFocus(); + void LostFocus(); + void LostSelfFocus(); + + virtual bool IsFocusable() const + { + return show_ && focusable_ && parentFocusable_; + } + + virtual bool AcceptFocusByRectOfLastFocus(const Rect& rect) + { + return IsFocusable(); + } + + void SetFocusable(bool focusable); + + bool IsParentFocusable() const + { + return parentFocusable_; + } + + void SetParentFocusable(bool parentFocusable) + { + parentFocusable_ = parentFocusable; + } + + bool IsCurrentFocus() const + { + return currentFocus_; + } + + void SetOnKeyCallback(std::function&& onKeyCallback) + { + onKeyCallback_ = std::move(onKeyCallback); + } + void SetOnClickCallback(std::function&& onClickCallback) + { + onClickCallback_ = std::move(onClickCallback); + } + void SetOnFocusCallback(std::function&& onFocusCallback) + { + onFocusCallback_ = std::move(onFocusCallback); + } + void SetOnBlurCallback(std::function&& onBlurCallback) + { + onBlurCallback_ = std::move(onBlurCallback); + } + void SetFocusMoveCallback(std::function&& focusMoveCallback) + { + focusMoveCallback_ = std::move(focusMoveCallback); + } + + void SetFocusIndex(int32_t focusIndex) + { + focusIndex_ = focusIndex; + autoFocusIndex_ = false; + } + + void RemoveSelf(); + + WeakPtr GetParent() const + { + return parent_; + } + void SetParent(WeakPtr&& parent) + { + parent_ = std::move(parent); + } + + virtual bool IsChild() const + { + return true; + } + + void SetRect(const Rect& rect) + { + rectFromOrigin_ = rect; + } + const Rect& GetRect() const + { + return rectFromOrigin_; + } + + bool CanShow() const + { + return show_; + } + virtual void SetShow(bool show); + + virtual void DumpFocusTree(int32_t depth); + + virtual void DumpFocus(); + + void RefreshFocus(); + + virtual void RefreshParentFocusable(bool focusable); + +protected: + virtual bool OnKeyEvent(const KeyEvent& keyEvent) + { + return onKeyCallback_ ? onKeyCallback_(keyEvent) : false; + } + virtual void OnClick() + { + if (onClickCallback_) { + onClickCallback_(); + } + } + virtual void OnFocus() + { + if (onFocusCallback_) { + onFocusCallback_(); + } + } + virtual void OnBlur() + { + if (onBlurCallback_) { + onBlurCallback_(); + } + } + + virtual void HandleFocus() + { + if ((!AceType::InstanceOf(this)) && focusMoveCallback_) { + focusMoveCallback_(); + } + OnFocus(); + } + +private: + static int32_t GenerateFocusIndex(); + + WeakPtr parent_; + + std::function onKeyCallback_; + std::function onClickCallback_; + std::function onFocusCallback_; + std::function onBlurCallback_; + std::function focusMoveCallback_; + + int32_t focusIndex_ { GenerateFocusIndex() }; + bool autoFocusIndex_ { true }; + + bool focusable_ { true }; + bool parentFocusable_ { true }; + bool currentFocus_ { false }; + bool show_ { true }; + + Rect rectFromOrigin_; +}; + +class ACE_EXPORT FocusGroup : public FocusNode { + DECLARE_ACE_TYPE(FocusGroup, FocusNode); + +public: + FocusGroup() : FocusNode(true) {} + ~FocusGroup() override = default; + + bool IsFocusable() const override; + + void AddChild(const RefPtr& focusNode); + void AddChild(const RefPtr& focusNode, const RefPtr& nextFocusNode); + void RemoveChild(const RefPtr& focusNode); + void RebuildChild(std::list>&& rebuildFocusNodes); + + void SwitchFocus(const RefPtr& focusNode); + bool GoToNextFocus(bool reverse, const Rect& rect = Rect()); + + const std::list>& GetChildrenList() const + { + return focusNodes_; + } + + bool IsChild() const override + { + return false; + } + + void DumpFocusTree(int32_t depth) override; + + void SetShow(bool show) override; + + void RefreshParentFocusable(bool focusable) override; + +protected: + bool OnKeyEvent(const KeyEvent& keyEvent) override; + void OnFocus() override; + void OnBlur() override; + + bool TryRequestFocus(const RefPtr& focusNode, const Rect& rect); + bool CalculateRect(const RefPtr& node, Rect& rect); + bool AcceptFocusByRectOfLastFocus(const Rect& rect) override; + + virtual bool RequestNextFocus(bool vertical, bool reverse, const Rect& rect) = 0; + + std::list> focusNodes_; + std::list>::iterator itLastFocusNode_ { focusNodes_.end() }; + +private: + bool CalculatePosition(); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_FOCUS_FOCUS_NODE_H diff --git a/frameworks/core/focus/test/BUILD.gn b/frameworks/core/focus/test/BUILD.gn new file mode 100644 index 00000000..c79a06f0 --- /dev/null +++ b/frameworks/core/focus/test/BUILD.gn @@ -0,0 +1,19 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") + +group("unittest") { + testonly = true + deps = [ "unittest/focus:unittest" ] +} diff --git a/frameworks/core/focus/test/unittest/focus/BUILD.gn b/frameworks/core/focus/test/unittest/focus/BUILD.gn new file mode 100644 index 00000000..f62d16ac --- /dev/null +++ b/frameworks/core/focus/test/unittest/focus/BUILD.gn @@ -0,0 +1,74 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/graphicalbasicability/focus" + +ohos_unittest("FocusTest") { + module_out_path = module_output_path + + sources = [ + "$ace_root/frameworks/core/animation/animator.cpp", + "$ace_root/frameworks/core/animation/anticipate_curve.cpp", + "$ace_root/frameworks/core/animation/cubic_curve.cpp", + "$ace_root/frameworks/core/animation/curves.cpp", + "$ace_root/frameworks/core/animation/scheduler.cpp", + "$ace_root/frameworks/core/common/ace_engine.cpp", + "$ace_root/frameworks/core/common/vibrator/vibrator_proxy.cpp", + "$ace_root/frameworks/core/components/common/properties/color.cpp", + "$ace_root/frameworks/core/components/common/properties/scroll_bar.cpp", + "$ace_root/frameworks/core/components/refresh/render_refresh.cpp", + "$ace_root/frameworks/core/components/scroll/render_multi_child_scroll.cpp", + "$ace_root/frameworks/core/components/scroll/render_scroll.cpp", + "$ace_root/frameworks/core/components/scroll/render_single_child_scroll.cpp", + "$ace_root/frameworks/core/components/scroll/scroll_bar_controller.cpp", + "$ace_root/frameworks/core/event/key_event.cpp", + "$ace_root/frameworks/core/focus/focus_node.cpp", + "$ace_root/frameworks/core/mock/mock_ace_application_info.cpp", + "$ace_root/frameworks/core/mock/mock_system_properties.cpp", + "$ace_root/frameworks/core/mock/mock_watch_dog.cpp", + "$ace_root/frameworks/core/pipeline/base/component.cpp", + "$ace_root/frameworks/core/pipeline/base/element.cpp", + "$ace_root/frameworks/core/pipeline/base/render_element.cpp", + "$ace_root/frameworks/core/pipeline/base/render_node.cpp", + "focus_test.cpp", + ] + + sources += [ + "$ace_root/adapter/ohos/osal/log_wrapper.cpp", + "$ace_root/frameworks/base/log/dump_log.cpp", + ] + + configs = [ + "$ace_root:ace_test_config", + "$flutter_root:flutter_config", + ] + + deps = [ + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + if (is_standard_system) { + external_deps = [ "hiviewdfx_hilog_native:libhilog" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +group("unittest") { + testonly = true + + deps = [ ":FocusTest" ] +} diff --git a/frameworks/core/focus/test/unittest/focus/focus_test.cpp b/frameworks/core/focus/test/unittest/focus/focus_test.cpp new file mode 100644 index 00000000..0d986040 --- /dev/null +++ b/frameworks/core/focus/test/unittest/focus/focus_test.cpp @@ -0,0 +1,539 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#define protected public +#define private public +#include "core/pipeline/base/render_element.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +const std::string KEY_CALLBACK = "key_callback"; +const std::string CLICK_CALLBACK = "click_callback"; +const std::string FOCUS_CALLBACK = "focus_callback"; +const std::string BLUR_CALLBACK = "blur_callback"; + +} // namespace + +class MockRenderNode : public RenderNode { + DECLARE_ACE_TYPE(MockRenderNode, RenderNode); + +public: + explicit MockRenderNode(bool takeBoundary = false) : RenderNode(takeBoundary) {} + ~MockRenderNode() override = default; + + void PerformLayout() override {} + void Update(const RefPtr& component) override {} +}; + +class MockElement : public FocusNode, public RenderElement { + DECLARE_ACE_TYPE(MockElement, FocusNode, RenderElement); + +public: + void Create() + { + RefPtr temp = AceType::MakeRefPtr(); + renderNode_ = AceType::DynamicCast(temp); + renderNode_->SetParent(nullptr); + } +}; + +class RowNode : public FocusGroup, public RenderElement { + DECLARE_ACE_TYPE(RowNode, FocusGroup, RenderElement); + +public: + void Create() + { + RefPtr temp = AceType::MakeRefPtr(); + renderNode_ = AceType::DynamicCast(temp); + renderNode_->SetParent(nullptr); + } + + bool RequestNextFocus(bool vertical, bool reverse, const Rect& rect) override; +}; + +class ColNode : public FocusGroup, public RenderElement { + DECLARE_ACE_TYPE(ColNode, FocusGroup, RenderElement); + +public: + void Create() + { + RefPtr temp = AceType::MakeRefPtr(); + renderNode_ = AceType::DynamicCast(temp); + renderNode_->SetParent(nullptr); + } + + bool RequestNextFocus(bool vertical, bool reverse, const Rect& rect) override; +}; + +bool RowNode::RequestNextFocus(bool vertical, bool reverse, const Rect& rect) +{ + if (vertical) { + return false; + } + + return GoToNextFocus(reverse); +} + +bool ColNode::RequestNextFocus(bool vertical, bool reverse, const Rect& rect) +{ + if (vertical) { + return GoToNextFocus(reverse); + } + + return false; +} + +void PipelineContext::AddToHoverList(const RefPtr& node) {} +void PipelineContext::AddDirtyLayoutNode(RefPtr const& renderNode) {} +void PipelineContext::AddDirtyRenderNode(const RefPtr& renderNode, bool overlay) {} +void PipelineContext::AddDirtyElement(const RefPtr& dirtyElement) {} +void PipelineContext::PushFocusAnimation(const RefPtr& element) const {} +void PipelineContext::PopFocusAnimation() const {} +void PipelineContext::PopRootFocusAnimation() const {} +void PipelineContext::PushShadow(const RefPtr& element) const {} +void PipelineContext::PopShadow() const {} +void PipelineContext::AddPredictLayoutNode(const RefPtr& renderNode) {} +void PipelineContext::RemoveScheduleTask(uint32_t id) {} + +double PipelineContext::NormalizeToPx(const Dimension& dimension) const +{ + return dimension.Value(); +} + +bool PipelineContext::GetIsDeclarative() const +{ + return false; +} + +uint64_t PipelineContext::GetTimeFromExternalTimer() +{ + return 0; +} + +uint32_t PipelineContext::AddScheduleTask(const RefPtr& task) +{ + return 0; +} + +RefPtr PipelineContext::GetAccessibilityManager() const +{ + return nullptr; +} + +class FocusTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp(); + void TearDown(); + void InitFocusTree(); + +protected: + RefPtr firstNodeElement_ = AceType::MakeRefPtr(); + RefPtr secondNodeElement_ = AceType::MakeRefPtr(); + RefPtr thirdNodeElement_ = AceType::MakeRefPtr(); + RefPtr fourthNodeElement_ = AceType::MakeRefPtr(); + + RefPtr root_ = AceType::MakeRefPtr(); + RefPtr firstRow_ = AceType::MakeRefPtr(); + RefPtr secondRow_ = AceType::MakeRefPtr(); + + RefPtr rootScope_ = AceType::DynamicCast(root_); + RefPtr firstRowScope_ = AceType::DynamicCast(firstRow_); + RefPtr secondRowScope_ = AceType::DynamicCast(secondRow_); + + RefPtr firstNode_ = AceType::DynamicCast(firstNodeElement_); + RefPtr secondNode_ = AceType::DynamicCast(secondNodeElement_); + RefPtr thirdNode_ = AceType::DynamicCast(thirdNodeElement_); + RefPtr fourthNode_ = AceType::DynamicCast(fourthNodeElement_); +}; + +void FocusTest::SetUpTestCase() {} + +void FocusTest::TearDownTestCase() {} + +void FocusTest::SetUp() +{ + InitFocusTree(); +} + +void FocusTest::TearDown() {} + +void FocusTest::InitFocusTree() +{ + firstRowScope_->AddChild(firstNode_); + firstRowScope_->AddChild(secondNode_); + secondRowScope_->AddChild(thirdNode_); + secondRowScope_->AddChild(fourthNode_); + rootScope_->AddChild(firstRowScope_); + rootScope_->AddChild(secondRowScope_); + root_->RequestFocusImmediately(); + + firstNodeElement_->Create(); + secondNodeElement_->Create(); + thirdNodeElement_->Create(); + fourthNodeElement_->Create(); + root_->Create(); + firstRow_->Create(); + secondRow_->Create(); +} + +/** + * @tc.name: FocusTest001 + * @tc.desc: Verify the state after the focus moves left and right. + * @tc.type: FUNC + * @tc.require: AR000DAUU9 AR000DAUUB + */ +HWTEST_F(FocusTest, FocusTest001, TestSize.Level1) +{ + /** + * @tc.steps: step1. focus moves to the right. + */ + KeyEvent keyEvent(KeyCode::TV_CONTROL_RIGHT, KeyAction::UP, 0, 0, 0); + root_->HandleKeyEvent(keyEvent); + + /** + * @tc.steps: step2. get focus status of each node. + * @tc.expected: step2. the state of focus is correct. + */ + ASSERT_TRUE(secondNode_->IsCurrentFocus()); + ASSERT_TRUE(firstRow_->IsCurrentFocus()); + ASSERT_TRUE(root_->IsCurrentFocus()); + ASSERT_FALSE(firstNode_->IsCurrentFocus()); + ASSERT_FALSE(secondRow_->IsCurrentFocus()); + ASSERT_FALSE(thirdNode_->IsCurrentFocus()); + ASSERT_FALSE(fourthNode_->IsCurrentFocus()); + + /** + * @tc.steps: step3. focus moves to the left. + */ + keyEvent.code = KeyCode::TV_CONTROL_LEFT; + keyEvent.action = KeyAction::UP; + root_->HandleKeyEvent(keyEvent); + + /** + * @tc.steps: step4. get focus status of each node. + * @tc.expected: step4. the state of focus is correct. + */ + ASSERT_TRUE(firstNode_->IsCurrentFocus()); + ASSERT_TRUE(firstRow_->IsCurrentFocus()); + ASSERT_TRUE(root_->IsCurrentFocus()); + ASSERT_FALSE(secondNode_->IsCurrentFocus()); + ASSERT_FALSE(secondRow_->IsCurrentFocus()); + ASSERT_FALSE(thirdNode_->IsCurrentFocus()); + ASSERT_FALSE(fourthNode_->IsCurrentFocus()); +} + +/** + * @tc.name: FocusTest002 + * @tc.desc: Verify the state after the focus moves up and down. + * @tc.type: FUNC + * @tc.require: AR000DAUU9 AR000DAUUB + */ +HWTEST_F(FocusTest, FocusTest002, TestSize.Level1) +{ + /** + * @tc.steps: step1. focus moves down. + */ + KeyEvent keyEvent(KeyCode::TV_CONTROL_DOWN, KeyAction::UP, 0, 0, 0); + root_->HandleKeyEvent(keyEvent); + + /** + * @tc.steps: step2. get focus status of each node. + * @tc.expected: step2. the state of focus is correct. + */ + ASSERT_TRUE(thirdNode_->IsCurrentFocus()); + ASSERT_TRUE(secondRow_->IsCurrentFocus()); + ASSERT_TRUE(root_->IsCurrentFocus()); + ASSERT_FALSE(firstNode_->IsCurrentFocus()); + ASSERT_FALSE(firstRow_->IsCurrentFocus()); + ASSERT_FALSE(secondNode_->IsCurrentFocus()); + ASSERT_FALSE(fourthNode_->IsCurrentFocus()); + + /** + * @tc.steps: step3. focus moves up. + */ + keyEvent.code = KeyCode::TV_CONTROL_UP; + keyEvent.action = KeyAction::UP; + root_->HandleKeyEvent(keyEvent); + + /** + * @tc.steps: step4. get focus status of each node. + * @tc.expected: step4. the state of focus is correct. + */ + ASSERT_TRUE(firstNode_->IsCurrentFocus()); + ASSERT_TRUE(firstRow_->IsCurrentFocus()); + ASSERT_TRUE(root_->IsCurrentFocus()); + ASSERT_FALSE(secondNode_->IsCurrentFocus()); + ASSERT_FALSE(secondRow_->IsCurrentFocus()); + ASSERT_FALSE(thirdNode_->IsCurrentFocus()); + ASSERT_FALSE(fourthNode_->IsCurrentFocus()); +} + +/** + * @tc.name: FocusTest003 + * @tc.desc: Verify the key callback interface. + * @tc.type: FUNC + * @tc.require: AR000DAUUA AR000DAIHU + */ +HWTEST_F(FocusTest, FocusTest003, TestSize.Level1) +{ + /** + * @tc.steps: step1. set the key callback function. + */ + KeyEvent keyEvent(KeyCode::TV_CONTROL_RIGHT, KeyAction::UP, 0, 0, 0); + std::string keyCallback; + firstNode_->SetOnKeyCallback([&keyCallback](const KeyEvent& keyEvent) { + keyCallback = KEY_CALLBACK; + return false; + }); + + /** + * @tc.steps: step2. handle key events. + * @tc.expected: step2. key callback gets executed. + */ + root_->HandleKeyEvent(keyEvent); + ASSERT_TRUE(keyCallback == KEY_CALLBACK); +} + +/** + * @tc.name: FocusTest004 + * @tc.desc: Verify the click callback interface. + * @tc.type: FUNC + * @tc.require: AR000DAIHU AR000DA11V + */ +HWTEST_F(FocusTest, FocusTest004, TestSize.Level1) +{ + /** + * @tc.steps: step1. set the click callback function. + */ + KeyEvent keyEvent(KeyCode::KEYBOARD_ENTER, KeyAction::CLICK, 0, 0, 0); + std::string clickCallback; + firstNode_->SetOnClickCallback([&clickCallback]() { clickCallback = CLICK_CALLBACK; }); + + /** + * @tc.steps: step2. handle key events. + * @tc.expected: step2. click callback gets executed. + */ + root_->HandleKeyEvent(keyEvent); + ASSERT_TRUE(clickCallback == CLICK_CALLBACK); +} + +/** + * @tc.name: FocusTest005 + * @tc.desc: Verify the focus callback interface. + * @tc.type: FUNC + * @tc.require: AR000DAIHV AR000DAUU9 + */ +HWTEST_F(FocusTest, FocusTest005, TestSize.Level1) +{ + /** + * @tc.steps: step1. set the focus callback function. + */ + std::string focusCallback; + secondNode_->SetOnFocusCallback([&focusCallback]() { focusCallback = FOCUS_CALLBACK; }); + + /** + * @tc.steps: step2. secondNode_ requests focus. + * @tc.expected: step2. focus callback gets executed. + */ + secondNode_->RequestFocusImmediately(); + ASSERT_TRUE(focusCallback == FOCUS_CALLBACK); +} + +/** + * @tc.name: FocusTest006 + * @tc.desc: Verify the blur callback interface. + * @tc.type: FUNC + * @tc.require: AR000DAIHU AR000DA11V + */ +HWTEST_F(FocusTest, FocusTest006, TestSize.Level1) +{ + /** + * @tc.steps: step1. set the blur callback function. + */ + std::string blurCallback; + firstNode_->SetOnBlurCallback([&blurCallback]() { blurCallback = BLUR_CALLBACK; }); + + /** + * @tc.steps: step2. secondNode_ requests focus. + * @tc.expected: step2. blur callback gets executed. + */ + secondNode_->RequestFocusImmediately(); + ASSERT_TRUE(blurCallback == BLUR_CALLBACK); +} + +/** + * @tc.name: FocusTest007 + * @tc.desc: Verify the request and lost focus interface. + * @tc.type: FUNC + * @tc.require: AR000DAIHU AR000DA11V + */ +HWTEST_F(FocusTest, FocusTest007, TestSize.Level1) +{ + /** + * @tc.steps: step1. thirdNode_ request focus. + * @tc.expected: step1. the state of focus is correct. + */ + thirdNode_->RequestFocusImmediately(); + ASSERT_TRUE(thirdNode_->IsCurrentFocus()); + ASSERT_TRUE(secondRow_->IsCurrentFocus()); + ASSERT_TRUE(root_->IsCurrentFocus()); + ASSERT_FALSE(firstNode_->IsCurrentFocus()); + ASSERT_FALSE(firstRow_->IsCurrentFocus()); + ASSERT_FALSE(secondNode_->IsCurrentFocus()); + ASSERT_FALSE(fourthNode_->IsCurrentFocus()); + + /** + * @tc.steps: step2. thirdNode_ lost focus. + * @tc.expected: step2. the state of focus is correct. + */ + thirdNode_->LostFocus(); + ASSERT_TRUE(secondRow_->IsCurrentFocus()); + ASSERT_TRUE(root_->IsCurrentFocus()); + ASSERT_FALSE(thirdNode_->IsCurrentFocus()); + ASSERT_FALSE(firstNode_->IsCurrentFocus()); + ASSERT_FALSE(firstRow_->IsCurrentFocus()); + ASSERT_FALSE(secondNode_->IsCurrentFocus()); + ASSERT_FALSE(fourthNode_->IsCurrentFocus()); +} + +/** + * @tc.name: FocusTest008 + * @tc.desc: Verify the interface of adding and deleting nodes. + * @tc.type: FUNC + * @tc.require: AR000DAIHU AR000DA11V + */ +HWTEST_F(FocusTest, FocusTest008, TestSize.Level1) +{ + /** + * @tc.steps: step1. parent node delete focus child node. + * @tc.expected: step1. next child node gets focus. + */ + firstRowScope_->RemoveChild(firstNode_); + ASSERT_TRUE(secondNode_->IsCurrentFocus()); + + /** + * @tc.steps: step2. add a child node to the parent node. + * @tc.expected: step2. the number of child nodes plus one. + */ + RefPtr newNode = AceType::MakeRefPtr(); + firstRowScope_->AddChild(newNode); + ASSERT_TRUE(firstRow_->GetChildrenList().size() == 2); + + /** + * @tc.steps: step3. new node requests focus. + * @tc.expected: step3. new node gets focus. + */ + newNode->RequestFocusImmediately(); + ASSERT_TRUE(newNode->IsCurrentFocus()); + + /** + * @tc.steps: step4. delete new node. + * @tc.expected: step4. The previous node gets focus and the number of child nodes is reduced by one. + */ + firstRowScope_->RemoveChild(newNode); + ASSERT_TRUE(secondNode_->IsCurrentFocus()); + ASSERT_TRUE(firstRow_->GetChildrenList().size() == 1); +} + +/** + * @tc.name: FocusTest009 + * @tc.desc: Test focus movement in complex scenes. + * @tc.type: FUNC + * @tc.require: AR000DAIHT AR000DAIHV + */ +HWTEST_F(FocusTest, FocusTest009, TestSize.Level1) +{ + /** + * @tc.steps: step1. initialize the focus tree. + */ + RefPtr fifthNodeElement = AceType::MakeRefPtr(); + RefPtr sixthNodeElement = AceType::MakeRefPtr(); + RefPtr seventhNodeElement = AceType::MakeRefPtr(); + RefPtr eighthNodeElement = AceType::MakeRefPtr(); + + RefPtr thirdRow = AceType::MakeRefPtr(); + RefPtr secondCol = AceType::MakeRefPtr(); + + RefPtr fifthNode = AceType::DynamicCast(fifthNodeElement); + RefPtr sixthNode = AceType::DynamicCast(sixthNodeElement); + RefPtr seventhNode = AceType::DynamicCast(seventhNodeElement); + RefPtr eighthNode = AceType::DynamicCast(eighthNodeElement); + + RefPtr thirdRowScope = AceType::DynamicCast(thirdRow); + RefPtr secondColScope = AceType::DynamicCast(secondCol); + + fifthNodeElement->Create(); + sixthNodeElement->Create(); + seventhNodeElement->Create(); + eighthNodeElement->Create(); + thirdRow->Create(); + secondCol->Create(); + + thirdRowScope->AddChild(fifthNode); + thirdRowScope->AddChild(sixthNode); + secondColScope->AddChild(seventhNode); + secondColScope->AddChild(eighthNode); + thirdRowScope->AddChild(secondColScope); + firstRowScope_->AddChild(thirdRowScope); + + /** + * @tc.steps: step2. focus moves to the right. + * @tc.expected: step2. the state of focus is correct. + */ + secondNode_->RequestFocusImmediately(); + KeyEvent keyEvent(KeyCode::TV_CONTROL_RIGHT, KeyAction::UP, 0, 0, 0); + root_->HandleKeyEvent(keyEvent); + ASSERT_TRUE(fifthNode->IsCurrentFocus()); + + root_->HandleKeyEvent(keyEvent); + ASSERT_TRUE(sixthNode->IsCurrentFocus()); + + root_->HandleKeyEvent(keyEvent); + ASSERT_TRUE(seventhNode->IsCurrentFocus()); + + root_->HandleKeyEvent(keyEvent); + ASSERT_TRUE(seventhNode->IsCurrentFocus()); + + /** + * @tc.steps: step3. focus moves down. + * @tc.expected: step3. the state of focus is correct. + */ + keyEvent.code = KeyCode::TV_CONTROL_DOWN; + keyEvent.action = KeyAction::UP; + root_->HandleKeyEvent(keyEvent); + ASSERT_TRUE(eighthNode->IsCurrentFocus()); + + root_->HandleKeyEvent(keyEvent); + ASSERT_TRUE(thirdNode_->IsCurrentFocus()); + + /** + * @tc.steps: step4. focus moves up. + * @tc.expected: step4. the state of focus is correct. + */ + keyEvent.code = KeyCode::TV_CONTROL_UP; + keyEvent.action = KeyAction::UP; + root_->HandleKeyEvent(keyEvent); + ASSERT_TRUE(eighthNode->IsCurrentFocus()); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/font/constants_converter.cpp b/frameworks/core/font/constants_converter.cpp new file mode 100644 index 00000000..36f03597 --- /dev/null +++ b/frameworks/core/font/constants_converter.cpp @@ -0,0 +1,243 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/font/constants_converter.h" + +#include "flutter/third_party/txt/src/txt/font_style.h" +#include "flutter/third_party/txt/src/txt/font_weight.h" +#include "flutter/third_party/txt/src/txt/paragraph_style.h" +#include "flutter/third_party/txt/src/txt/text_decoration.h" + +#include "base/i18n/localization.h" +#include "core/components/common/properties/text_style.h" + +namespace OHOS::Ace::Constants { + +txt::FontWeight ConvertTxtFontWeight(FontWeight fontWeight) +{ + txt::FontWeight convertValue; + switch (fontWeight) { + case FontWeight::W100: + case FontWeight::LIGHTER: + convertValue = txt::FontWeight::w100; + break; + case FontWeight::W200: + convertValue = txt::FontWeight::w200; + break; + case FontWeight::W300: + convertValue = txt::FontWeight::w300; + break; + case FontWeight::W400: + case FontWeight::NORMAL: + convertValue = txt::FontWeight::w400; + break; + case FontWeight::W500: + convertValue = txt::FontWeight::w500; + break; + case FontWeight::W600: + convertValue = txt::FontWeight::w600; + break; + case FontWeight::W700: + case FontWeight::BOLD: + convertValue = txt::FontWeight::w700; + break; + case FontWeight::W800: + convertValue = txt::FontWeight::w800; + break; + case FontWeight::W900: + case FontWeight::BOLDER: + convertValue = txt::FontWeight::w900; + break; + default: + LOGW("FontWeight setting error! Now using default FontWeight."); + convertValue = txt::FontWeight::w400; + break; + } + return convertValue; +} + +txt::FontStyle ConvertTxtFontStyle(FontStyle fontStyle) +{ + txt::FontStyle convertValue; + switch (fontStyle) { + case FontStyle::NORMAL: + convertValue = txt::FontStyle::normal; + break; + case FontStyle::ITALIC: + convertValue = txt::FontStyle::italic; + break; + default: + LOGW("FontStyle setting error! Now using default FontStyle"); + convertValue = txt::FontStyle::normal; + break; + } + return convertValue; +} + +txt::TextBaseline ConvertTxtTextBaseline(TextBaseline textBaseline) +{ + txt::TextBaseline convertValue; + switch (textBaseline) { + case TextBaseline::ALPHABETIC: + convertValue = txt::TextBaseline::kAlphabetic; + break; + case TextBaseline::IDEOGRAPHIC: + convertValue = txt::TextBaseline::kIdeographic; + break; + default: + LOGW("TextBaseline setting error! Now using default TextBaseline"); + convertValue = txt::TextBaseline::kAlphabetic; + break; + } + return convertValue; +} + +txt::TextAlign ConvertTxtTextAlign(TextAlign textAlign) +{ + txt::TextAlign convertValue; + switch (textAlign) { + case TextAlign::LEFT: + convertValue = txt::TextAlign::left; + break; + case TextAlign::RIGHT: + convertValue = txt::TextAlign::right; + break; + case TextAlign::CENTER: + convertValue = txt::TextAlign::center; + break; + case TextAlign::JUSTIFY: + convertValue = txt::TextAlign::justify; + break; + case TextAlign::START: + convertValue = txt::TextAlign::start; + break; + case TextAlign::END: + convertValue = txt::TextAlign::end; + break; + default: + LOGW("TextAlign setting error! Now using default TextAlign"); + convertValue = txt::TextAlign::start; + break; + } + return convertValue; +} + +txt::TextDirection ConvertTxtTextDirection(TextDirection textDirection) +{ + txt::TextDirection convertValue; + switch (textDirection) { + case TextDirection::RTL: + convertValue = txt::TextDirection::rtl; + break; + case TextDirection::LTR: + convertValue = txt::TextDirection::ltr; + break; + default: + LOGW("TextDirection setting error! Now using default TextDirection"); + convertValue = txt::TextDirection::ltr; + break; + } + return convertValue; +} + +SkColor ConvertSkColor(Color color) +{ + return color.GetValue(); +} + +txt::TextDecoration ConvertTxtTextDecoration(TextDecoration textDecoration) +{ + txt::TextDecoration convertValue = txt::TextDecoration::kNone; + switch (textDecoration) { + case TextDecoration::NONE: + convertValue = txt::TextDecoration::kNone; + break; + case TextDecoration::UNDERLINE: + convertValue = txt::TextDecoration::kUnderline; + break; + case TextDecoration::OVERLINE: + convertValue = txt::TextDecoration::kOverline; + break; + case TextDecoration::LINE_THROUGH: + convertValue = txt::TextDecoration::kLineThrough; + break; + default: + LOGW("TextDecoration setting error! Now using default TextDecoration"); + break; + } + return convertValue; +} + +void ConvertTxtStyle(const TextStyle& textStyle, const WeakPtr& context, txt::TextStyle& txtStyle) +{ + txtStyle.color = ConvertSkColor(textStyle.GetTextColor()); + txtStyle.font_weight = ConvertTxtFontWeight(textStyle.GetFontWeight()); + // Font size must be px when transferring to txt::TextStyle + auto pipelineContext = context.Upgrade(); + if (pipelineContext) { + txtStyle.font_size = pipelineContext->NormalizeToPx(textStyle.GetFontSize()); + if (textStyle.IsAllowScale()) { + txtStyle.font_size = + pipelineContext->NormalizeToPx(textStyle.GetFontSize() * pipelineContext->GetFontScale()); + } + } else { + txtStyle.font_size = textStyle.GetFontSize().Value(); + } + txtStyle.font_style = ConvertTxtFontStyle(textStyle.GetFontStyle()); + txtStyle.word_spacing = static_cast(textStyle.GetWordSpacing()); + txtStyle.letter_spacing = textStyle.GetLetterSpacing(); + txtStyle.text_baseline = ConvertTxtTextBaseline(textStyle.GetTextBaseline()); + txtStyle.decoration = ConvertTxtTextDecoration(textStyle.GetTextDecoration()); + txtStyle.font_families = textStyle.GetFontFamilies(); + + txt::TextShadow txtShadow; + const auto& spanShadow = textStyle.GetShadow(); + txtShadow.color = spanShadow.GetColor().GetValue(); + txtShadow.offset.fX = static_cast(spanShadow.GetOffset().GetX()); + txtShadow.offset.fY = static_cast(spanShadow.GetOffset().GetY()); + txtShadow.blur_radius = spanShadow.GetBlurRadius(); + txtStyle.text_shadows.emplace_back(txtShadow); + + if (textStyle.GetLineHeight().Unit() == DimensionUnit::PERCENT) { + txtStyle.has_height_override = true; + txtStyle.height = textStyle.GetLineHeight().Value(); + } else { + double fontSize = txtStyle.font_size; + double lineHeight = textStyle.GetLineHeight().Value(); + if (pipelineContext) { + lineHeight = pipelineContext->NormalizeToPx(textStyle.GetLineHeight()); + } + if (!NearEqual(lineHeight, fontSize) && (lineHeight > 0.0) && (!NearZero(fontSize))) { + txtStyle.has_height_override = true; + txtStyle.height = lineHeight / fontSize; + } else { + LOGD("use default text style height value."); + txtStyle.has_height_override = false; + txtStyle.height = 1; + } + } +} + +Rect ConvertSkRect(SkRect skRect) +{ + Rect result; + result.SetLeft(skRect.fLeft); + result.SetTop(skRect.fTop); + result.SetWidth(skRect.width()); + result.SetHeight(skRect.height()); + return result; +} + +} // namespace OHOS::Ace::Constants diff --git a/frameworks/core/font/constants_converter.h b/frameworks/core/font/constants_converter.h new file mode 100644 index 00000000..e259004f --- /dev/null +++ b/frameworks/core/font/constants_converter.h @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_RENDERING_FLUTTER_CONSTANTS_CONVERTER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_RENDERING_FLUTTER_CONSTANTS_CONVERTER_H + +#include "flutter/third_party/txt/src/txt/text_baseline.h" +#include "flutter/third_party/txt/src/txt/text_decoration.h" +#include "flutter/third_party/txt/src/txt/text_style.h" +#include "third_party/skia/include/core/SkColor.h" + +#include "core/components/common/properties/text_style.h" +#include "core/pipeline/pipeline_context.h" + +namespace txt { +enum class FontWeight; +enum class FontStyle; +enum class TextAlign; +enum class TextDirection; +} // namespace txt + +namespace OHOS::Ace { + +enum class FontWeight; +enum class FontStyle; +enum class TextBaseline; +enum class TextAlign; +enum class TextDirection; +enum class TextDecoration; +class Color; + +namespace Constants { + +txt::FontWeight ConvertTxtFontWeight(FontWeight fontWeight); + +txt::FontStyle ConvertTxtFontStyle(FontStyle fontStyle); + +txt::TextBaseline ConvertTxtTextBaseline(TextBaseline textBaseline); + +txt::TextAlign ConvertTxtTextAlign(TextAlign textAlign); + +txt::TextDirection ConvertTxtTextDirection(TextDirection textDirection); + +SkColor ConvertSkColor(Color color); + +txt::TextDecoration ConvertTxtTextDecoration(TextDecoration textDecoration); + +void ConvertTxtStyle(const TextStyle& textStyle, const WeakPtr& context, txt::TextStyle& txtStyle); + +Rect ConvertSkRect(SkRect skRect); + +} // namespace Constants + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_RENDERING_FLUTTER_CONSTANTS_CONVERTER_H diff --git a/frameworks/core/font/flutter_font_collection.cpp b/frameworks/core/font/flutter_font_collection.cpp new file mode 100644 index 00000000..b87a8fa2 --- /dev/null +++ b/frameworks/core/font/flutter_font_collection.cpp @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/font/flutter_font_collection.h" + +#include "flutter/lib/ui/ui_dart_state.h" + +#include "base/log/log.h" + +namespace OHOS::Ace { + +FlutterFontCollection FlutterFontCollection::instance; + +std::shared_ptr FlutterFontCollection::GetFontCollection() +{ + if (!isUseFlutterEngine) { + if (!isCompleted_) { + isCompleted_ = future_.get(); + } + return fontCollection_->GetFontCollection(); + } + + auto* windowClient = GetFlutterEngineWindowClient(); + if (!windowClient) { + return nullptr; + } + auto& fontCollection = windowClient->GetFontCollection(); + return fontCollection.GetFontCollection(); +} + +flutter::WindowClient* FlutterFontCollection::GetFlutterEngineWindowClient() +{ + if (!flutter::UIDartState::Current()) { + LOGE("uiDartState is null"); + return nullptr; + } + + auto* window = flutter::UIDartState::Current()->window(); + if (window == nullptr) { + LOGW("UpdateParagraph: window or client is null"); + return nullptr; + } + return window->client(); +} + +void FlutterFontCollection::LoadFontFromList(const uint8_t* font_data, size_t length, std::string family_name) +{ + if (!isUseFlutterEngine) { + if (!isCompleted_) { + isCompleted_ = future_.get(); + } + fontCollection_->LoadFontFromList(font_data, length, family_name); + return; + } + + auto* windowClient = GetFlutterEngineWindowClient(); + if (!windowClient) { + return; + } + auto& fontCollection = windowClient->GetFontCollection(); + fontCollection.LoadFontFromList(font_data, length, family_name); +} + +void FlutterFontCollection::CreateFontCollection(fml::RefPtr& ioTaskRunner) +{ + if (isInit_ || !ioTaskRunner) { + return; + } + isInit_ = true; + isUseFlutterEngine = false; + + ioTaskRunner->PostTask([&fontCollection = fontCollection_, &promise = promise_]() mutable { + fontCollection = std::make_unique(); + if (fontCollection->GetFontCollection()) { + std::string emptyLocale; + // 0x4e2d is unicode for '中'. + fontCollection->GetFontCollection()->MatchFallbackFont(0x4e2d, emptyLocale); + fontCollection->GetFontCollection()->GetMinikinFontCollectionForFamilies({ "sans-serif" }, emptyLocale); + } + promise.set_value(true); + }); +} + +FlutterFontCollection& FlutterFontCollection::GetInstance() +{ + return instance; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/font/flutter_font_collection.h b/frameworks/core/font/flutter_font_collection.h new file mode 100644 index 00000000..fb886fe8 --- /dev/null +++ b/frameworks/core/font/flutter_font_collection.h @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_RENDERING_FLUTTER_FLUTTER_FONT_COLLECTION_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_RENDERING_FLUTTER_FLUTTER_FONT_COLLECTION_H + +#include + +#include "flutter/common/task_runners.h" +#include "flutter/lib/ui/text/font_collection.h" +#include "flutter/lib/ui/window/window.h" + +#include "base/utils/macros.h" +#include "base/utils/noncopyable.h" + +namespace OHOS::Ace { + +class ACE_EXPORT FlutterFontCollection : public NonCopyable { +public: + static FlutterFontCollection& GetInstance(); + + std::shared_ptr GetFontCollection(); + + void LoadFontFromList(const uint8_t* font_data, size_t length, std::string family_name); + + void CreateFontCollection(fml::RefPtr& ioTaskRunner); + +private: + flutter::WindowClient* GetFlutterEngineWindowClient(); + + std::unique_ptr fontCollection_; + + std::promise promise_; + std::shared_future future_ = promise_.get_future(); + bool isInit_ = false; + bool isCompleted_ = false; + bool isUseFlutterEngine = true; + + static FlutterFontCollection instance; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_RENDERING_FLUTTER_FLUTTER_FONT_COLLECTION_H diff --git a/frameworks/core/font/flutter_font_loader.cpp b/frameworks/core/font/flutter_font_loader.cpp new file mode 100644 index 00000000..58927eff --- /dev/null +++ b/frameworks/core/font/flutter_font_loader.cpp @@ -0,0 +1,128 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/font/flutter_font_loader.h" + +#include "flutter/lib/ui/text/font_collection.h" + +#include "base/network/download_manager.h" +#include "core/font/flutter_font_collection.h" +#include "core/pipeline/base/flutter_render_context.h" + +namespace OHOS::Ace { + +const char FONT_SRC_NETWORK[] = "http"; + +FlutterFontLoader::FlutterFontLoader(const std::string& familyName, const std::string& familySrc) + : FontLoader(familyName, familySrc) {}; + +RefPtr FontLoader::Create(const std::string& familyName, const std::string& familySrc) +{ + return AceType::MakeRefPtr(familyName, familySrc); +} + +void FlutterFontLoader::AddFont(const RefPtr& context) +{ + if (familySrc_.empty()) { + return; + } + + if (familySrc_.substr(0, 4) == FONT_SRC_NETWORK) { + // Get font from NetWork. + LoadFromNetwork(context); + } else { + // Get font from asset. + LoadFromAsset(context); + } +} + +void FlutterFontLoader::LoadFromNetwork(const OHOS::Ace::RefPtr& context) +{ + context->GetTaskExecutor()->PostTask( + [weak = AceType::WeakClaim(this), context] { + auto fontLoader = weak.Upgrade(); + if (!fontLoader || !context) { + return; + } + + std::vector fontData; + if (!DownloadManager::GetInstance().Download(fontLoader->familySrc_, fontData) || fontData.empty()) { + return; + } + + context->GetTaskExecutor()->PostTask( + [fontData, fontLoader] { + // Load font. + FlutterFontCollection::GetInstance().LoadFontFromList( + fontData.data(), fontData.size(), fontLoader->familyName_); + fontLoader->isLoaded_ = true; + + // When font is already loaded, notify all which used this font. + for (const auto& [node, callback] : fontLoader->callbacks_) { + if (callback) { + callback(); + } + } + fontLoader->callbacks_.clear(); + }, + TaskExecutor::TaskType::UI); + }, + TaskExecutor::TaskType::BACKGROUND); +} + +void FlutterFontLoader::LoadFromAsset(const OHOS::Ace::RefPtr& context) +{ + context->GetTaskExecutor()->PostTask( + [fontLoader = AceType::Claim(this), context] { + if (!fontLoader || !context) { + return; + } + auto assetManager = context->GetAssetManager(); + if (!assetManager) { + LOGE("No asset manager!"); + return; + } + std::string assetSrc(fontLoader->familySrc_); + if (assetSrc[0] == '/') { + assetSrc = assetSrc.substr(1); // get the asset src without '/'. + } else if (assetSrc[0] == '.' && assetSrc.size() > 2 && assetSrc[1] == '/') { + assetSrc = assetSrc.substr(2); // get the asset src without './'. + } + auto assetData = assetManager->GetAsset(assetSrc); + if (!assetData) { + LOGE("No asset data!"); + return; + } + + context->GetTaskExecutor()->PostTask( + [assetData, fontLoader] { + // Load font. + FlutterFontCollection::GetInstance().LoadFontFromList( + assetData->GetData(), assetData->GetSize(), fontLoader->familyName_); + fontLoader->isLoaded_ = true; + + for (const auto& [node, callback] : fontLoader->callbacks_) { + if (callback) { + callback(); + } + } + fontLoader->callbacks_.clear(); + }, + TaskExecutor::TaskType::UI); + }, + TaskExecutor::TaskType::BACKGROUND); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/font/flutter_font_loader.h b/frameworks/core/font/flutter_font_loader.h new file mode 100644 index 00000000..d98ef49c --- /dev/null +++ b/frameworks/core/font/flutter_font_loader.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_RENDERING_FLUTTER_FLUTTER_FONT_LOADER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_RENDERING_FLUTTER_FLUTTER_FONT_LOADER_H + +#include "core/font/font_loader.h" + +namespace OHOS::Ace { + +extern const char FONT_SRC_NETWORK[]; + +class FlutterFontLoader : public FontLoader { + DECLARE_ACE_TYPE(FlutterFontLoader, FontLoader); + +public: + FlutterFontLoader(const std::string& familyName, const std::string& familySrc); + ~FlutterFontLoader() override = default; + + void AddFont(const RefPtr& context) override; + +private: + void LoadFromNetwork(const RefPtr& context); + void LoadFromAsset(const RefPtr& context); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_RENDERING_FLUTTER_FLUTTER_FONT_LOADER_H diff --git a/frameworks/core/font/font_loader.cpp b/frameworks/core/font/font_loader.cpp new file mode 100644 index 00000000..517d0173 --- /dev/null +++ b/frameworks/core/font/font_loader.cpp @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/font/font_loader.h" + +namespace OHOS::Ace { + +FontLoader::FontLoader(const std::string& familyName, const std::string& familySrc) + : familyName_(familyName), familySrc_(familySrc) {}; + +const std::string& FontLoader::GetFamilyName() const +{ + return familyName_; +} + +void FontLoader::SetOnLoaded(const WeakPtr& node, const std::function& callback) +{ + if (!callback) { + return; + } + if (isLoaded_) { + callback(); + } else { + callbacks_.emplace(node, callback); + } +} + +void FontLoader::RemoveCallback(const WeakPtr& node) +{ + callbacks_.erase(node); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/font/font_loader.h b/frameworks/core/font/font_loader.h new file mode 100644 index 00000000..6f8660ab --- /dev/null +++ b/frameworks/core/font/font_loader.h @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_FONT_LOADER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_FONT_LOADER_H + +#include "base/memory/ace_type.h" +#include "core/pipeline/pipeline_context.h" + +namespace OHOS::Ace { + +class FontLoader : public virtual AceType { + DECLARE_ACE_TYPE(FontLoader, AceType); + +public: + FontLoader(const std::string& familyName, const std::string& familySrc); + ~FontLoader() override = default; + + virtual void AddFont(const RefPtr& context) = 0; + + static RefPtr Create(const std::string& familyName, const std::string& familySrc); + + const std::string& GetFamilyName() const; + void SetOnLoaded(const WeakPtr& node, const std::function& callback); + void RemoveCallback(const WeakPtr& node); + +protected: + std::string familyName_; + std::string familySrc_; + std::map, std::function> callbacks_; + bool isLoaded_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_FONT_LOADER_H diff --git a/frameworks/core/font/font_manager.cpp b/frameworks/core/font/font_manager.cpp new file mode 100644 index 00000000..fb8f0b6e --- /dev/null +++ b/frameworks/core/font/font_manager.cpp @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/font/font_manager.h" + +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +void FontManager::RegisterFont( + const std::string& familyName, const std::string& familySrc, const RefPtr& context) +{ + if (std::find(std::begin(fontNames_), std::end(fontNames_), familyName) == std::end(fontNames_)) { + fontNames_.emplace_back(familyName); + } + + for (auto iter = fontLoaders_.begin(); iter != fontLoaders_.end(); ++iter) { + auto& fontLoader = *iter; + if (fontLoader->GetFamilyName() == familyName) { + LOGI("Font is already loaded!"); + return; + } + } + RefPtr fontLoader = FontLoader::Create(familyName, familySrc); + fontLoaders_.emplace_back(fontLoader); + fontLoader->AddFont(context); +} + +void FontManager::RegisterCallback( + const WeakPtr& node, const std::string& familyName, const std::function& callback) +{ + if (!callback) { + return; + } + for (auto& fontLoader : fontLoaders_) { + if (fontLoader->GetFamilyName() == familyName) { + fontLoader->SetOnLoaded(node, callback); + } + } +} + +const std::vector& FontManager::GetFontNames() const +{ + return fontNames_; +} + +void FontManager::AddFontNode(const WeakPtr& node) +{ + if (fontNodes_.find(node) == fontNodes_.end()) { + fontNodes_.emplace(node); + } +} + +void FontManager::RemoveFontNode(const WeakPtr& node) +{ + fontNodes_.erase(node); +} + +void FontManager::RebuildFontNode() +{ + for (auto iter = fontNodes_.begin(); iter != fontNodes_.end();) { + auto fontNode = iter->Upgrade(); + if (fontNode) { + fontNode->MarkNeedLayout(); + ++iter; + } else { + iter = fontNodes_.erase(iter); + } + } +} + +void FontManager::UnRegisterCallback(const WeakPtr& node) +{ + for (auto& fontLoader : fontLoaders_) { + fontLoader->RemoveCallback(node); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/font/font_manager.h b/frameworks/core/font/font_manager.h new file mode 100644 index 00000000..fc015155 --- /dev/null +++ b/frameworks/core/font/font_manager.h @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_FONT_MANAGER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_FONT_MANAGER_H + +#include +#include +#include + +#include "base/memory/ace_type.h" +#include "core/font/font_loader.h" +#include "core/pipeline/pipeline_context.h" + +namespace OHOS::Ace { + +class FontManager : public virtual AceType { + DECLARE_ACE_TYPE(FontManager, AceType); + +public: + FontManager() = default; + ~FontManager() override = default; + + void RegisterFont( + const std::string& familyName, const std::string& familySrc, const RefPtr& context); + void RegisterCallback( + const WeakPtr& node, const std::string& familyName, const std::function& callback); + void UnRegisterCallback(const WeakPtr& node); + const std::vector& GetFontNames() const; + void AddFontNode(const WeakPtr& node); + void RemoveFontNode(const WeakPtr& node); + void RebuildFontNode(); + +private: + std::list> fontLoaders_; + std::vector fontNames_; + std::set> fontNodes_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_FONT_MANAGER_H diff --git a/frameworks/core/gestures/click_recognizer.cpp b/frameworks/core/gestures/click_recognizer.cpp new file mode 100644 index 00000000..1cef7ffe --- /dev/null +++ b/frameworks/core/gestures/click_recognizer.cpp @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/gestures/click_recognizer.h" + +#include "base/geometry/offset.h" +#include "base/log/log.h" +#include "core/gestures/gesture_referee.h" + +namespace OHOS::Ace { +namespace { + +constexpr double MAX_THRESHOLD = 20.0; + +} // namespace + +void ClickRecognizer::OnAccepted(size_t touchId) +{ + LOGD("click gesture has been accepted! the touch id is %{public}zu", touchId); + state_ = DetectState::DETECTED; + if (onClick_) { + ClickInfo info(touchId); + info.SetTimeStamp(touchPoint_.time); + info.SetGlobalLocation(touchPoint_.GetOffset()).SetLocalLocation(touchPoint_.GetOffset() - coordinateOffset_); + onClick_(info); + } +} + +void ClickRecognizer::OnRejected(size_t touchId) +{ + LOGD("click gesture has been rejected! the touch id is %{public}zu", touchId); + state_ = DetectState::READY; +} + +void ClickRecognizer::HandleTouchDownEvent(const TouchPoint& event) +{ + LOGD("click recognizer receives touch down event, begin to detect click event"); + if (state_ == DetectState::READY) { + GestureReferee::GetInstance().AddGestureRecognizer(event.id, AceType::Claim(this)); + touchPoint_ = event; + state_ = DetectState::DETECTING; + } else { + LOGW("the state is not ready for detecting click event"); + } +} + +void ClickRecognizer::HandleTouchUpEvent(const TouchPoint& event) +{ + LOGD("click recognizer receives touch up event"); + if (state_ == DetectState::DETECTING) { + LOGD("this gesture is click, try to accept it"); + GestureReferee::GetInstance().Adjudicate(event.id, AceType::Claim(this), GestureDisposal::ACCEPT); + } + state_ = DetectState::READY; +} + +void ClickRecognizer::HandleTouchMoveEvent(const TouchPoint& event) +{ + LOGD("click recognizer receives touch move event"); + if (state_ == DetectState::DETECTING) { + Offset offset = event.GetOffset() - touchPoint_.GetOffset(); + if (offset.GetDistance() > MAX_THRESHOLD) { + LOGD("this gesture is not click, try to reject it"); + GestureReferee::GetInstance().Adjudicate(event.id, AceType::Claim(this), GestureDisposal::REJECT); + } + } +} + +void ClickRecognizer::HandleTouchCancelEvent(const TouchPoint& event) +{ + LOGD("click recognizer receives touch cancel event"); + if (state_ == DetectState::DETECTING) { + LOGD("cancel click gesture detect, try to reject it"); + GestureReferee::GetInstance().Adjudicate(event.id, AceType::Claim(this), GestureDisposal::REJECT); + } + state_ = DetectState::READY; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/gestures/click_recognizer.h b/frameworks/core/gestures/click_recognizer.h new file mode 100644 index 00000000..bc274e10 --- /dev/null +++ b/frameworks/core/gestures/click_recognizer.h @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_GESTURES_CLICK_RECOGNIZER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_GESTURES_CLICK_RECOGNIZER_H + +#include + +#include "core/gestures/gesture_recognizer.h" + +namespace OHOS::Ace { + +class ClickInfo : public BaseEventInfo, public TouchLocationInfo { + DECLARE_RELATIONSHIP_OF_CLASSES(ClickInfo, BaseEventInfo, TouchLocationInfo); + +public: + explicit ClickInfo(int32_t fingerId) : BaseEventInfo("onClick"), TouchLocationInfo(fingerId) {} + ~ClickInfo() override = default; +}; + +using ClickCallback = std::function; + +// ClickRecognizer identifies only single click events. +// For long press and double click, see: LongPressRecognizer and DoubleClickRecognizer. +class ClickRecognizer : public GestureRecognizer { + DECLARE_ACE_TYPE(ClickRecognizer, GestureRecognizer); + +public: + void OnAccepted(size_t touchId) override; + void OnRejected(size_t touchId) override; + + void SetOnClick(const ClickCallback& onClick) + { + onClick_ = onClick; + } + +private: + void HandleTouchDownEvent(const TouchPoint& event) override; + void HandleTouchUpEvent(const TouchPoint& event) override; + void HandleTouchMoveEvent(const TouchPoint& event) override; + void HandleTouchCancelEvent(const TouchPoint& event) override; + + ClickCallback onClick_; + TouchPoint touchPoint_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_GESTURES_CLICK_RECOGNIZER_H diff --git a/frameworks/core/gestures/drag_recognizer.cpp b/frameworks/core/gestures/drag_recognizer.cpp new file mode 100644 index 00000000..6ea05882 --- /dev/null +++ b/frameworks/core/gestures/drag_recognizer.cpp @@ -0,0 +1,217 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/gestures/drag_recognizer.h" + +#include + +#include "base/log/log.h" +#include "core/gestures/gesture_referee.h" + +namespace OHOS::Ace { +namespace { + +constexpr double DELTA_DURATION = 15.0; + +} // namespace + +void DragRecognizer::OnAccepted(size_t touchId) +{ + LOGD("drag gesture has been accepted! the touch id is %{public}zu", touchId); + auto iter = dragFingers_.find(touchId); + if (iter == dragFingers_.end()) { + LOGE("the dragFingers_ is not ready to receive accepted, id is %{public}zu", touchId); + return; + } + + auto& dragInfo = iter->second; + dragInfo.states_ = DetectState::DETECTED; + if (onDragStart_) { + const auto& firstPoint = dragInfo.velocityTracker_.GetFirstTrackPoint(); + DragStartInfo startInfo(firstPoint.id); + startInfo.SetGlobalLocation(firstPoint.GetOffset()) + .SetLocalLocation(firstPoint.GetOffset() - coordinateOffset_); + startInfo.SetTimeStamp(firstPoint.time); + onDragStart_(startInfo); + } + if (onDragUpdate_) { + const auto& currentPoint = dragInfo.velocityTracker_.GetCurrentTrackPoint(); + const auto dragOffsetInMainAxis = + axis_ == Axis::VERTICAL ? dragInfo.dragOffset_.GetY() : dragInfo.dragOffset_.GetX(); + DragUpdateInfo updateInfo(currentPoint.id); + updateInfo.SetDelta(dragInfo.dragOffset_) + .SetMainDelta(dragOffsetInMainAxis) + .SetGlobalLocation(currentPoint.GetOffset()) + .SetLocalLocation(currentPoint.GetOffset() - coordinateOffset_); + updateInfo.SetTimeStamp(currentPoint.time); + onDragUpdate_(updateInfo); + } +} + +void DragRecognizer::OnRejected(size_t touchId) +{ + LOGD("drag gesture has been rejected! the touch id is %{public}zu", touchId); + auto iter = dragFingers_.find(touchId); + if (iter == dragFingers_.end()) { + LOGE("the dragFingers_ is not ready to receive rejected, id is %{public}zu", touchId); + return; + } + // Resets drag state to ready. + iter->second.states_ = DetectState::READY; +} + +void DragRecognizer::HandleTouchDownEvent(const TouchPoint& event) +{ + LOGD("drag recognizer receives touch down event, detecting drag event"); + if ((touchRestrict_.forbiddenType & TouchRestrict::SWIPE) == TouchRestrict::SWIPE) { + LOGD("drag recognizer forbid swipe"); + return; + } + if (((touchRestrict_.forbiddenType & TouchRestrict::SWIPE_HORIZONTAL) == TouchRestrict::SWIPE_HORIZONTAL) && + axis_ == Axis::HORIZONTAL) { + LOGD("horizontal drag recognizer forbid swipe"); + return; + } + if (((touchRestrict_.forbiddenType & TouchRestrict::SWIPE_VERTICAL) == TouchRestrict::SWIPE_VERTICAL) && + axis_ == Axis::VERTICAL) { + LOGD("vertical drag recognizer forbid swipe"); + return; + } + DragFingersInfo dragFingerInfo(axis_); + auto result = dragFingers_.try_emplace(event.id, dragFingerInfo); + + auto& dragInfo = result.first->second; + if (dragInfo.states_ == DetectState::READY) { + GestureReferee::GetInstance().AddGestureRecognizer(event.id, AceType::Claim(this)); + dragInfo.dragOffset_.Reset(); + dragInfo.velocityTracker_.Reset(); + dragInfo.velocityTracker_.UpdateTouchPoint(event); + dragInfo.states_ = DetectState::DETECTING; + } else { + LOGE("the state is not ready to receive touch down event"); + } +} + +void DragRecognizer::HandleTouchMoveEvent(const TouchPoint& event) +{ + LOGD("drag recognizer receives touch move event"); + auto iter = dragFingers_.find(event.id); + if (iter == dragFingers_.end()) { + LOGE("the dragFingers_ is not ready to receive touch move event, id is %{public}d", event.id); + return; + } + + auto& dragInfo = iter->second; + dragInfo.velocityTracker_.UpdateTouchPoint(event); + if (dragInfo.states_ == DetectState::DETECTED) { + if (onDragUpdate_) { + DragUpdateInfo info(event.id); + info.SetDelta(dragInfo.velocityTracker_.GetDelta()) + .SetMainDelta(dragInfo.velocityTracker_.GetMainAxisDeltaPos()) + .SetGlobalLocation(event.GetOffset()) + .SetLocalLocation(event.GetOffset() - coordinateOffset_); + info.SetTimeStamp(event.time); + onDragUpdate_(info); + } + } else if (dragInfo.states_ == DetectState::DETECTING) { + dragInfo.dragOffset_ += dragInfo.velocityTracker_.GetDelta(); + double dragOffsetInMainAxis = 0.0; + if (axis_ == Axis::FREE) { + dragOffsetInMainAxis = dragInfo.dragOffset_.GetDistance(); + } else if (axis_ == Axis::VERTICAL) { + dragOffsetInMainAxis = dragInfo.dragOffset_.GetY(); + } else { + dragOffsetInMainAxis = dragInfo.dragOffset_.GetX(); + } + LOGD("handle move event, the drag offset is %{public}lf, axis is %{public}d", dragOffsetInMainAxis, axis_); + if (IsDragGestureAccept(dragOffsetInMainAxis)) { + LOGD("this gesture is drag, try to accept it"); + GestureReferee::GetInstance().Adjudicate(event.id, AceType::Claim(this), GestureDisposal::ACCEPT); + } + } else { + LOGD("state is ready, need to use touch down event to trigger"); + } +} + +void DragRecognizer::HandleTouchUpEvent(const TouchPoint& event) +{ + LOGD("drag recognizer receives touch up event"); + auto iter = dragFingers_.find(event.id); + if (iter == dragFingers_.end()) { + LOGE("the dragFingers_ is not ready to receive touch up event, id is %{public}d", event.id); + return; + } + + auto& dragInfo = iter->second; + if (dragInfo.states_ == DetectState::DETECTED) { + LOGD("use animation to end drag"); + if (onDragEnd_) { + DragEndInfo endInfo(event.id); + endInfo.SetVelocity(dragInfo.velocityTracker_.GetVelocity()) + .SetMainVelocity(dragInfo.velocityTracker_.GetMainAxisVelocity()) + .SetGlobalLocation(event.GetOffset()) + .SetLocalLocation(event.GetOffset() - coordinateOffset_); + endInfo.SetTimeStamp(event.time); + onDragEnd_(endInfo); + } + } else if (dragInfo.states_ == DetectState::DETECTING) { + LOGD("this gesture is not drag, try to reject it"); + GestureReferee::GetInstance().Adjudicate(event.id, AceType::Claim(this), GestureDisposal::REJECT); + } + dragInfo.states_ = DetectState::READY; +} + +void DragRecognizer::HandleTouchCancelEvent(const TouchPoint& event) +{ + LOGD("drag recognizer receives touch cancel event"); + auto iter = dragFingers_.find(event.id); + if (iter == dragFingers_.end()) { + LOGE("the dragFingers_ is not ready to receive touch cancel event, id is %{public}d", event.id); + return; + } + + auto& dragInfo = iter->second; + if (dragInfo.states_ == DetectState::DETECTED) { + if (onDragCancel_) { + onDragCancel_(); + } + } else if (dragInfo.states_ == DetectState::DETECTING) { + LOGD("cancel drag gesture detect, try to reject it"); + GestureReferee::GetInstance().Adjudicate(event.id, AceType::Claim(this), GestureDisposal::REJECT); + } + dragInfo.states_ = DetectState::READY; +} + +bool DragRecognizer::IsDragGestureAccept(double offset) const +{ + if (std::abs(offset) > DELTA_DURATION) { + if (axis_ == Axis::HORIZONTAL) { + uint32_t flag = offset > 0 ? TouchRestrict::SWIPE_RIGHT : TouchRestrict::SWIPE_LEFT; + if ((touchRestrict_.forbiddenType & flag) != flag) { + return true; + } + } else if (axis_ == Axis::VERTICAL) { + uint32_t flag = offset > 0 ? TouchRestrict::SWIPE_DOWN : TouchRestrict::SWIPE_UP; + if ((touchRestrict_.forbiddenType & flag) != flag) { + return true; + } + } else { + return true; + } + } + return false; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/gestures/drag_recognizer.h b/frameworks/core/gestures/drag_recognizer.h new file mode 100644 index 00000000..a42b7f3b --- /dev/null +++ b/frameworks/core/gestures/drag_recognizer.h @@ -0,0 +1,199 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_GESTURES_DRAG_RECOGNIZER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_GESTURES_DRAG_RECOGNIZER_H + +#include +#include + +#include "base/geometry/axis.h" +#include "base/geometry/offset.h" +#include "core/gestures/gesture_recognizer.h" +#include "core/gestures/touch_event.h" +#include "core/gestures/velocity.h" +#include "core/gestures/velocity_tracker.h" + +namespace OHOS::Ace { + +class DragStartInfo : public TouchLocationInfo, public BaseEventInfo { + DECLARE_RELATIONSHIP_OF_CLASSES(DragStartInfo, TouchLocationInfo, BaseEventInfo); + +public: + explicit DragStartInfo(int32_t fingerId) : TouchLocationInfo(fingerId), BaseEventInfo("onDragStart") {} + ~DragStartInfo() override = default; +}; + +class DragUpdateInfo : public TouchLocationInfo, public BaseEventInfo { + DECLARE_RELATIONSHIP_OF_CLASSES(DragUpdateInfo, TouchLocationInfo, BaseEventInfo); + +public: + explicit DragUpdateInfo(int32_t fingerId) : TouchLocationInfo(fingerId), BaseEventInfo("onDragUpdate") {} + ~DragUpdateInfo() override = default; + + DragUpdateInfo& SetDelta(const Offset& delta) + { + delta_ = delta; + return *this; + } + DragUpdateInfo& SetMainDelta(double mainDelta) + { + mainDelta_ = mainDelta; + return *this; + } + + const Offset& GetDelta() const + { + return delta_; + } + double GetMainDelta() const + { + return mainDelta_; + } + +private: + // The delta offset between current point and the previous update. + Offset delta_; + // The delta offset in the main axis between current point and the previous update. + double mainDelta_ = 0.0; +}; + +class DragEndInfo : public TouchLocationInfo, public BaseEventInfo { + DECLARE_RELATIONSHIP_OF_CLASSES(DragEndInfo, TouchLocationInfo, BaseEventInfo); + +public: + explicit DragEndInfo(int32_t fingerId) : TouchLocationInfo(fingerId), BaseEventInfo("onDragEnd") {} + ~DragEndInfo() override = default; + + const Velocity& GetVelocity() const + { + return velocity_; + } + double GetMainVelocity() const + { + return mainVelocity_; + } + + DragEndInfo& SetVelocity(const Velocity& velocity) + { + velocity_ = velocity; + return *this; + } + DragEndInfo& SetMainVelocity(double mainVelocity) + { + mainVelocity_ = mainVelocity; + return *this; + } + +private: + // The velocity of the moving touch point when it leaves screen. + Velocity velocity_; + // The velocity of the moving touch point in main axis when it leaves screen. + double mainVelocity_ = 0.0; +}; + +using DragStartCallback = std::function; +using DragUpdateCallback = std::function; +using DragEndCallback = std::function; +using DragCancelCallback = std::function; + +class DragRecognizer : public GestureRecognizer { + DECLARE_ACE_TYPE(DragRecognizer, GestureRecognizer); + +public: + explicit DragRecognizer(Axis axis) : axis_(axis) {} + ~DragRecognizer() override = default; + + void OnAccepted(size_t touchId) override; + void OnRejected(size_t touchId) override; + + void SetOnDragStart(const DragStartCallback& onDragStart) + { + onDragStart_ = onDragStart; + } + + void SetOnDragUpdate(const DragUpdateCallback& onDragUpdate) + { + onDragUpdate_ = onDragUpdate; + } + + void SetOnDragEnd(const DragEndCallback& onDragEnd) + { + onDragEnd_ = onDragEnd; + } + + void SetOnDragCancel(const DragCancelCallback& onDragCancel) + { + onDragCancel_ = onDragCancel; + } + + const TouchRestrict& GetTouchRestrict() const + { + return touchRestrict_; + } + +private: + void HandleTouchDownEvent(const TouchPoint& event) override; + void HandleTouchUpEvent(const TouchPoint& event) override; + void HandleTouchMoveEvent(const TouchPoint& event) override; + void HandleTouchCancelEvent(const TouchPoint& event) override; + bool IsDragGestureAccept(double offset) const; + + class DragFingersInfo { + public: + DragFingersInfo() = default; + explicit DragFingersInfo(Axis axis) : velocityTracker_(axis) {} + ~DragFingersInfo() = default; + + VelocityTracker velocityTracker_; + Offset dragOffset_; + DetectState states_ { DetectState::READY }; + }; + std::unordered_map dragFingers_; + + Axis axis_; + DragStartCallback onDragStart_; + DragUpdateCallback onDragUpdate_; + DragEndCallback onDragEnd_; + DragCancelCallback onDragCancel_; +}; + +class VerticalDragRecognizer : public DragRecognizer { + DECLARE_ACE_TYPE(VerticalDragRecognizer, DragRecognizer); + +public: + VerticalDragRecognizer() : DragRecognizer(Axis::VERTICAL) {} + ~VerticalDragRecognizer() override = default; +}; + +class HorizontalDragRecognizer : public DragRecognizer { + DECLARE_ACE_TYPE(HorizontalDragRecognizer, DragRecognizer); + +public: + HorizontalDragRecognizer() : DragRecognizer(Axis::HORIZONTAL) {} + ~HorizontalDragRecognizer() override = default; +}; + +class FreeDragRecognizer : public DragRecognizer { + DECLARE_ACE_TYPE(FreeDragRecognizer, DragRecognizer); + +public: + FreeDragRecognizer() : DragRecognizer(Axis::FREE) {} + ~FreeDragRecognizer() override = default; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_GESTURES_DRAG_RECOGNIZER_H diff --git a/frameworks/core/gestures/gesture_recognizer.cpp b/frameworks/core/gestures/gesture_recognizer.cpp new file mode 100644 index 00000000..b71de69f --- /dev/null +++ b/frameworks/core/gestures/gesture_recognizer.cpp @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/gestures/gesture_recognizer.h" + +#include "base/log/log.h" + +namespace OHOS::Ace { + +bool GestureRecognizer::HandleEvent(const TouchPoint& point) +{ + switch (point.type) { + case TouchType::MOVE: + HandleTouchMoveEvent(point); + break; + case TouchType::DOWN: + HandleTouchDownEvent(point); + break; + case TouchType::UP: + HandleTouchUpEvent(point); + break; + case TouchType::CANCEL: + HandleTouchCancelEvent(point); + break; + default: + LOGW("unknown touch type"); + break; + } + return true; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/gestures/gesture_recognizer.h b/frameworks/core/gestures/gesture_recognizer.h new file mode 100644 index 00000000..cd6121a7 --- /dev/null +++ b/frameworks/core/gestures/gesture_recognizer.h @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_GESTURES_GESTURE_RECOGNIZER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_GESTURES_GESTURE_RECOGNIZER_H + +#include "core/gestures/touch_event.h" + +namespace OHOS::Ace { + +enum class DetectState { READY, DETECTING, DETECTED }; + +class GestureRecognizer : public TouchEventTarget { + DECLARE_ACE_TYPE(GestureRecognizer, TouchEventTarget); + +public: + // Called when request of handling gesture sequence is accepted by gesture referee. + virtual void OnAccepted(size_t touchId) = 0; + + // Called when request of handling gesture sequence is rejected by gesture referee. + virtual void OnRejected(size_t touchId) = 0; + + bool DispatchEvent(const TouchPoint& point) override + { + return true; + } + bool HandleEvent(const TouchPoint& point) final; + + // Coordinate offset is used to calculate the local location of the touch point in the render node. + void SetCoordinateOffset(const Offset& coordinateOffset) + { + coordinateOffset_ = coordinateOffset; + } + + // Gets the coordinate offset to calculate the local location of the touch point by manually. + const Offset& GetCoordinateOffset() const + { + return coordinateOffset_; + } + +protected: + virtual void HandleTouchDownEvent(const TouchPoint& event) = 0; + virtual void HandleTouchUpEvent(const TouchPoint& event) = 0; + virtual void HandleTouchMoveEvent(const TouchPoint& event) = 0; + virtual void HandleTouchCancelEvent(const TouchPoint& event) = 0; + + Offset coordinateOffset_; + DetectState state_ { DetectState::READY }; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_GESTURES_GESTURE_RECOGNIZER_H diff --git a/frameworks/core/gestures/gesture_referee.cpp b/frameworks/core/gestures/gesture_referee.cpp new file mode 100644 index 00000000..f70c167a --- /dev/null +++ b/frameworks/core/gestures/gesture_referee.cpp @@ -0,0 +1,138 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/gestures/gesture_referee.h" + +namespace OHOS::Ace { + +void GestureScope::AddMember(const RefPtr& recognizer) +{ + if (!recognizer) { + LOGE("recognizer is null, AddMember failed."); + return; + } + recognizers_.emplace_back(recognizer); +} + +void GestureScope::ForceSelectRecipient() +{ + // Forcibly select the first one as the recipient when no gesture recognizer requests adjudication during the + // entire gesture sequence. In this case, recognizers must not be empty. + if (recognizers_.empty()) { + LOGE("the recognizer collection is empty"); + return; + } + recognizers_.front()->OnAccepted(touchId_); + recognizers_.pop_front(); + for (const auto& rejectedItem : recognizers_) { + rejectedItem->OnRejected(touchId_); + } + recognizers_.clear(); +} + +void GestureScope::HandleGestureDisposal(const RefPtr& recognizer, const GestureDisposal disposal) +{ + if (!recognizer) { + LOGE("recognizer is null, AddGestureRecognizer failed."); + return; + } + if (recognizers_.empty()) { + LOGE("the recognizer collection is empty"); + return; + } + auto result = std::find(recognizers_.cbegin(), recognizers_.cend(), recognizer); + if (result == recognizers_.cend()) { + LOGE("can not find the recognizer"); + return; + } + // First erases the find object. + recognizers_.erase(result); + // Handles recognizer callback. + if (disposal == GestureDisposal::REJECT) { + recognizer->OnRejected(touchId_); + } else { + recognizer->OnAccepted(touchId_); + for (const auto& rejectedItem : recognizers_) { + rejectedItem->OnRejected(touchId_); + } + recognizers_.clear(); + } +} + +void GestureScope::ForceClose() +{ + if (recognizers_.empty()) { + return; + } + for (const auto& rejectedItem : recognizers_) { + rejectedItem->OnRejected(touchId_); + } + recognizers_.clear(); +} + +void GestureReferee::AddGestureRecognizer(size_t touchId, const RefPtr& recognizer) +{ + if (!recognizer) { + LOGE("recognizer is null, AddGestureRecognizer failed."); + return; + } + LOGD("add gesture recognizer into scope, %{private}p", AceType::RawPtr(recognizer)); + const auto iter = gestureScopes_.find(touchId); + if (iter != gestureScopes_.end()) { + iter->second.AddMember(recognizer); + } else { + GestureScope gestureScope(touchId); + gestureScope.AddMember(recognizer); + gestureScopes_.try_emplace(touchId, std::move(gestureScope)); + } +} + +void GestureReferee::AdjudicateGestureSequence(size_t touchId) +{ + const auto iter = gestureScopes_.find(touchId); + if (iter != gestureScopes_.end()) { + if (!iter->second.IsEmpty()) { + iter->second.ForceSelectRecipient(); + } + gestureScopes_.erase(iter); + } +} + +void GestureReferee::CleanGestureScope(size_t touchId) +{ + const auto iter = gestureScopes_.find(touchId); + if (iter != gestureScopes_.end()) { + if (!iter->second.IsEmpty()) { + iter->second.ForceClose(); + } + gestureScopes_.erase(iter); + } +} + +void GestureReferee::Adjudicate(size_t touchId, const RefPtr& recognizer, GestureDisposal disposal) +{ + if (!recognizer) { + LOGE("recognizer is null, Adjudicate failed."); + return; + } + const auto iter = gestureScopes_.find(touchId); + if (iter != gestureScopes_.end()) { + iter->second.HandleGestureDisposal(recognizer, disposal); + } else { + LOGE("fail to find the gesture scope for %{public}zu session id", touchId); + } +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/gestures/gesture_referee.h b/frameworks/core/gestures/gesture_referee.h new file mode 100644 index 00000000..61c6d274 --- /dev/null +++ b/frameworks/core/gestures/gesture_referee.h @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_GESTURES_GESTURE_REFEREE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_GESTURES_GESTURE_REFEREE_H + +#include +#include + +#include "base/utils/singleton.h" +#include "core/gestures/gesture_recognizer.h" + +namespace OHOS::Ace { + +enum class GestureDisposal { + ACCEPT = 0, + REJECT, +}; + +class GestureScope { +public: + explicit GestureScope(size_t touchId) : touchId_(touchId) {} + ~GestureScope() = default; + GestureScope(GestureScope&&) = default; + GestureScope& operator=(GestureScope&&) = default; + + void AddMember(const RefPtr& recognizer); + + void ForceSelectRecipient(); + + void ForceClose(); + + void HandleGestureDisposal(const RefPtr& recognizer, GestureDisposal disposal); + + bool IsEmpty() const + { + return recognizers_.empty(); + } + +private: + size_t touchId_ = 0; + std::list> recognizers_; +}; + +class GestureReferee : public Singleton { +public: + // Each gesture recognizer should add itself to the gesture scope at the beginning of the gesture sequence + // (touch down event) for gesture adjudicating. + void AddGestureRecognizer(size_t touchId, const RefPtr& recognizer); + + // Adjudicates which gesture recognizer owns the gesture sequence when the gesture sequence ends (touch up event). + void AdjudicateGestureSequence(size_t touchId); + + // Try to clean gesture scope when receive cancel event. + void CleanGestureScope(size_t touchId); + + // Called by the gesture recognizer when the gesture recognizer has completed the recognition of the gesture (accept + // or reject) + void Adjudicate(size_t touchId, const RefPtr& recognizer, GestureDisposal disposal); + +private: + // Stores gesture recognizer collection according to Id. + std::unordered_map gestureScopes_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_GESTURES_GESTURE_REFEREE_H diff --git a/frameworks/core/gestures/long_press_recognizer.cpp b/frameworks/core/gestures/long_press_recognizer.cpp new file mode 100644 index 00000000..12c2c6b0 --- /dev/null +++ b/frameworks/core/gestures/long_press_recognizer.cpp @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/gestures/long_press_recognizer.h" + +#include "core/gestures/gesture_referee.h" + +namespace OHOS::Ace { +namespace { + +constexpr int32_t LONG_PRESS_TIMEOUT = 500; +constexpr double MAX_THRESHOLD = 5.0; + +} // namespace + +void LongPressRecognizer::OnAccepted(size_t touchId) +{ + LOGD("long press gesture has been accepted! the touch id is %{public}zu", touchId); + state_ = DetectState::DETECTED; + if (onLongPress_) { + LongPressInfo info(touchId); + info.SetTimeStamp(trackPoint_.time); + info.SetGlobalLocation(trackPoint_.GetOffset()).SetLocalLocation(trackPoint_.GetOffset() - coordinateOffset_); + onLongPress_(info); + } +} + +void LongPressRecognizer::OnRejected(size_t touchId) +{ + LOGD("long press gesture has been rejected! the touch id is %{public}zu", touchId); + deadlineTimer_.Cancel(); + state_ = DetectState::READY; +} + +void LongPressRecognizer::HandleTouchDownEvent(const TouchPoint& event) +{ + LOGD("long press recognizer receives touch down event, begin to detect long press event"); + if ((touchRestrict_.forbiddenType & TouchRestrict::LONG_PRESS) == TouchRestrict::LONG_PRESS) { + LOGI("the long press is forbidden"); + return; + } + if (state_ == DetectState::READY) { + auto context = context_.Upgrade(); + if (!context) { + LOGE("fail to detect long press gesture due to context is nullptr"); + return; + } + GestureReferee::GetInstance().AddGestureRecognizer(event.id, AceType::Claim(this)); + trackPoint_ = event; + state_ = DetectState::DETECTING; + auto&& callback = [weakPtr = AceType::WeakClaim(this)]() { + auto refPtr = weakPtr.Upgrade(); + if (refPtr) { + refPtr->HandleOverdueDeadline(); + } else { + LOGE("fail to handle overdue deadline due to context is nullptr"); + } + }; + deadlineTimer_.Reset(callback); + auto taskExecutor = SingleTaskExecutor::Make(context->GetTaskExecutor(), TaskExecutor::TaskType::UI); + taskExecutor.PostDelayedTask(deadlineTimer_, LONG_PRESS_TIMEOUT); + } else { + LOGW("the state is not ready for detecting long press gesture"); + } +} + +void LongPressRecognizer::HandleTouchUpEvent(const TouchPoint& event) +{ + LOGD("long press recognizer receives touch up event"); + if (state_ == DetectState::DETECTING) { + LOGD("this gesture is not long press, try to reject it"); + GestureReferee::GetInstance().Adjudicate(trackPoint_.id, AceType::Claim(this), GestureDisposal::REJECT); + } + state_ = DetectState::READY; +} + +void LongPressRecognizer::HandleTouchMoveEvent(const TouchPoint& event) +{ + LOGD("long press recognizer receives touch move event"); + if (state_ == DetectState::DETECTING) { + Offset offset = event.GetOffset() - trackPoint_.GetOffset(); + if (offset.GetDistance() > MAX_THRESHOLD) { + LOGD("this gesture is not long press, try to reject it"); + GestureReferee::GetInstance().Adjudicate(event.id, AceType::Claim(this), GestureDisposal::REJECT); + } + } +} + +void LongPressRecognizer::HandleTouchCancelEvent(const TouchPoint& event) +{ + LOGD("long press recognizer receives touch cancel event"); + if (state_ == DetectState::DETECTING) { + LOGD("cancel long press gesture detect, try to reject it"); + GestureReferee::GetInstance().Adjudicate(event.id, AceType::Claim(this), GestureDisposal::REJECT); + } + state_ = DetectState::READY; +} + +void LongPressRecognizer::HandleOverdueDeadline() +{ + if (state_ == DetectState::DETECTING) { + LOGD("this gesture is long press, try to accept it"); + GestureReferee::GetInstance().Adjudicate(trackPoint_.id, AceType::Claim(this), GestureDisposal::ACCEPT); + } else { + LOGW("the state is not detecting for accept long press gesture"); + } +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/gestures/long_press_recognizer.h b/frameworks/core/gestures/long_press_recognizer.h new file mode 100644 index 00000000..11c052c8 --- /dev/null +++ b/frameworks/core/gestures/long_press_recognizer.h @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_GESTURES_LONG_PRESS_RECOGNIZER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_GESTURES_LONG_PRESS_RECOGNIZER_H + +#include "base/thread/cancelable_callback.h" +#include "core/gestures/gesture_recognizer.h" +#include "core/pipeline/pipeline_context.h" + +namespace OHOS::Ace { + +class LongPressInfo : public BaseEventInfo, public TouchLocationInfo { + DECLARE_RELATIONSHIP_OF_CLASSES(LongPressInfo, BaseEventInfo, TouchLocationInfo); + +public: + explicit LongPressInfo(int32_t fingerId) : BaseEventInfo("onLongPress"), TouchLocationInfo(fingerId) {} + ~LongPressInfo() override = default; +}; + +using OnLongPress = std::function; + +class LongPressRecognizer : public GestureRecognizer { + DECLARE_ACE_TYPE(LongPressRecognizer, GestureRecognizer); + +public: + explicit LongPressRecognizer(const WeakPtr& context) : context_(context) {} + ~LongPressRecognizer() override = default; + + void OnAccepted(size_t touchId) override; + void OnRejected(size_t touchId) override; + + void SetOnLongPress(const OnLongPress& onLongPress) + { + onLongPress_ = onLongPress; + } + +private: + void HandleTouchDownEvent(const TouchPoint& event) override; + void HandleTouchUpEvent(const TouchPoint& event) override; + void HandleTouchMoveEvent(const TouchPoint& event) override; + void HandleTouchCancelEvent(const TouchPoint& event) override; + void HandleOverdueDeadline(); + + WeakPtr context_; + TouchPoint trackPoint_; + OnLongPress onLongPress_; + CancelableCallback deadlineTimer_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_GESTURES_LONG_PRESS_RECOGNIZER_H diff --git a/frameworks/core/gestures/press_recognizer.cpp b/frameworks/core/gestures/press_recognizer.cpp new file mode 100644 index 00000000..718b4d5b --- /dev/null +++ b/frameworks/core/gestures/press_recognizer.cpp @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/gestures/press_recognizer.h" + +namespace OHOS::Ace { +namespace { + +constexpr int32_t PRESS_TIMEOUT = 30; +constexpr double MAX_THRESHOLD = 2.0; + +} // namespace + +void PressRecognizer::OnAccepted(size_t touchId) +{ + LOGD("press gesture has been accepted! the touch id is %{public}zu", touchId); + state_ = DetectState::DETECTED; + if (onPress_) { + PressInfo info(touchId); + info.SetTimeStamp(trackPoint_.time); + info.SetGlobalLocation(trackPoint_.GetOffset()).SetLocalLocation(trackPoint_.GetOffset() - coordinateOffset_); + onPress_(info); + } +} + +void PressRecognizer::OnRejected(size_t touchId) +{ + LOGD("press gesture has been rejected! the touch id is %{public}zu", touchId); + deadlineTimer_.Cancel(); + state_ = DetectState::READY; +} + +void PressRecognizer::HandleTouchDownEvent(const TouchPoint& event) +{ + LOGD("press recognizer receives touch down event, begin to detect press event"); + if (state_ == DetectState::READY) { + auto context = context_.Upgrade(); + if (!context) { + LOGE("fail to detect press gesture due to context is nullptr"); + return; + } + trackPoint_ = event; + state_ = DetectState::DETECTING; + deadlineTimer_.Reset([weakPtr = AceType::WeakClaim(this)] { + auto refPtr = weakPtr.Upgrade(); + if (refPtr) { + refPtr->HandleOverdueDeadline(); + } else { + LOGE("fail to handle overdue deadline due to context is nullptr"); + } + }); + auto taskExecutor = SingleTaskExecutor::Make(context->GetTaskExecutor(), TaskExecutor::TaskType::UI); + taskExecutor.PostDelayedTask(deadlineTimer_, PRESS_TIMEOUT); + } else { + LOGW("the state is not ready for detecting press gesture"); + } +} + +void PressRecognizer::HandleTouchUpEvent(const TouchPoint& event) +{ + LOGD("press recognizer receives touch up event"); + if (state_ == DetectState::DETECTING) { + LOGD("this gesture is not press, try to reject it"); + OnRejected(trackPoint_.id); + } else if (state_ == DetectState::DETECTED) { + if (onPressCancel_) { + onPressCancel_(); + } + } + state_ = DetectState::READY; +} + +void PressRecognizer::HandleTouchMoveEvent(const TouchPoint& event) +{ + LOGD("press recognizer receives touch move event"); + if (state_ == DetectState::DETECTING) { + Offset offset = event.GetOffset() - trackPoint_.GetOffset(); + if (offset.GetDistance() > MAX_THRESHOLD) { + LOGD("this gesture is not press, try to reject it"); + OnRejected(event.id); + } + } else if (state_ == DetectState::DETECTED) { + Offset offset = event.GetOffset() - trackPoint_.GetOffset(); + if (offset.GetDistance() > MAX_THRESHOLD && onPressCancel_) { + onPressCancel_(); + } + } +} + +void PressRecognizer::HandleTouchCancelEvent(const TouchPoint& event) +{ + LOGD("press recognizer receives touch cancel event"); + if (state_ == DetectState::DETECTING) { + LOGD("cancel press gesture detect, try to reject it"); + OnRejected(event.id); + } + state_ = DetectState::READY; +} + +void PressRecognizer::HandleOverdueDeadline() +{ + if (state_ == DetectState::DETECTING) { + LOGD("this gesture is press, try to accept it"); + OnAccepted(trackPoint_.id); + } else { + LOGW("the state is not detecting for accept press gesture"); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/gestures/press_recognizer.h b/frameworks/core/gestures/press_recognizer.h new file mode 100644 index 00000000..931bf444 --- /dev/null +++ b/frameworks/core/gestures/press_recognizer.h @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_GESTURES_PRESS_RECOGNIZER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_GESTURES_PRESS_RECOGNIZER_H + +#include "base/thread/cancelable_callback.h" +#include "core/gestures/gesture_recognizer.h" +#include "core/pipeline/pipeline_context.h" + +namespace OHOS::Ace { + +class PressInfo : public BaseEventInfo, public TouchLocationInfo { + DECLARE_RELATIONSHIP_OF_CLASSES(PressInfo, BaseEventInfo, TouchLocationInfo); + +public: + explicit PressInfo(int32_t fingerId) : BaseEventInfo("onPress"), TouchLocationInfo(fingerId) {} + ~PressInfo() override = default; +}; + +using OnPress = std::function; +using OnPressCancel = std::function; + +class PressRecognizer : public GestureRecognizer { + DECLARE_ACE_TYPE(PressRecognizer, GestureRecognizer); + +public: + explicit PressRecognizer(const WeakPtr& context) : context_(context) {} + ~PressRecognizer() override = default; + + void OnAccepted(size_t touchId) override; + void OnRejected(size_t touchId) override; + + void SetOnPress(const OnPress& onPress) + { + onPress_ = onPress; + } + + void SetOnPressCancel(const OnPressCancel& onPressCancel) + { + onPressCancel_ = onPressCancel; + } + +private: + void HandleTouchDownEvent(const TouchPoint& event) override; + void HandleTouchUpEvent(const TouchPoint& event) override; + void HandleTouchMoveEvent(const TouchPoint& event) override; + void HandleTouchCancelEvent(const TouchPoint& event) override; + void HandleOverdueDeadline(); + + WeakPtr context_; + TouchPoint trackPoint_; + OnPress onPress_; + CancelableCallback deadlineTimer_; + OnPressCancel onPressCancel_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_GESTURES_PRESS_RECOGNIZER_H diff --git a/frameworks/core/gestures/raw_recognizer.cpp b/frameworks/core/gestures/raw_recognizer.cpp new file mode 100644 index 00000000..e4e6e7a2 --- /dev/null +++ b/frameworks/core/gestures/raw_recognizer.cpp @@ -0,0 +1,138 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/gestures/raw_recognizer.h" + +#include "base/log/log.h" + +namespace OHOS::Ace { +namespace { + +const char ON_TOUCH_DOWN_EVENT[] = "onTouchDown"; +const char ON_TOUCH_MOVE_EVENT[] = "onTouchMove"; +const char ON_TOUCH_UP_EVENT[] = "onTouchUp"; +const char ON_TOUCH_CANCEL_EVENT[] = "onTouchCancel"; + +} // namespace + +void RawRecognizer::HandleEvent(const TouchPoint& point, uint32_t stage) +{ + LOGD("raw recognizer handle event, event type is %{public}zu stage=%u", point.type, stage); + switch (point.type) { + case TouchType::MOVE: { + auto callback = onEventCallbacks_[stage][EventType::TOUCH_MOVE]; + if (callback) { + callback(CreateTouchEventInfo(ON_TOUCH_MOVE_EVENT, point)); + } + break; + } + case TouchType::DOWN: { + auto callback = onEventCallbacks_[stage][EventType::TOUCH_DOWN]; + if (callback) { + callback(CreateTouchEventInfo(ON_TOUCH_DOWN_EVENT, point)); + } + break; + } + case TouchType::UP: { + auto callback = onEventCallbacks_[stage][EventType::TOUCH_UP]; + if (callback) { + lastPoint_ = point; + callback(CreateTouchEventInfo(ON_TOUCH_UP_EVENT, point, true)); + } + break; + } + case TouchType::CANCEL: { + auto callback = onEventCallbacks_[stage][EventType::TOUCH_CANCEL]; + if (callback) { + lastPoint_ = point; + callback(CreateTouchEventInfo(ON_TOUCH_CANCEL_EVENT, point, true)); + } + break; + } + default: + LOGW("unknown touch type"); + break; + } + isFirstTrack_ = point.type == TouchType::DOWN; + lastPoint_ = point; +} + +bool RawRecognizer::DispatchEvent(const TouchPoint& point) +{ + HandleEvent(point, EventStage::CAPTURE); + CatchTouchEventCallback catchCallback; + if (point.type == TouchType::DOWN) { + catchCallback = catcheventCallbacks_[EventStage::CAPTURE][EventType::TOUCH_DOWN]; + } else if (point.type == TouchType::MOVE) { + catchCallback = catcheventCallbacks_[EventStage::CAPTURE][EventType::TOUCH_MOVE]; + } else if (point.type == TouchType::UP) { + catchCallback = catcheventCallbacks_[EventStage::CAPTURE][EventType::TOUCH_UP]; + } else if (point.type == TouchType::CANCEL) { + catchCallback = catcheventCallbacks_[EventStage::CAPTURE][EventType::TOUCH_CANCEL]; + } + + if (catchCallback) { + catchCallback(); + return false; + } + return true; +} + +bool RawRecognizer::HandleEvent(const TouchPoint& point) +{ + HandleEvent(point, EventStage::BUBBLE); + CatchTouchEventCallback catchCallback; + if (point.type == TouchType::DOWN) { + catchCallback = catcheventCallbacks_[EventStage::BUBBLE][EventType::TOUCH_DOWN]; + } else if (point.type == TouchType::MOVE) { + catchCallback = catcheventCallbacks_[EventStage::BUBBLE][EventType::TOUCH_MOVE]; + } else if (point.type == TouchType::UP) { + catchCallback = catcheventCallbacks_[EventStage::BUBBLE][EventType::TOUCH_UP]; + } else if (point.type == TouchType::CANCEL) { + catchCallback = catcheventCallbacks_[EventStage::BUBBLE][EventType::TOUCH_CANCEL]; + } + + if (catchCallback) { + catchCallback(); + return false; + } + return true; +}; + +TouchEventInfo RawRecognizer::CreateTouchEventInfo( + const std::string& type, const TouchPoint& point, bool ignoreCurrent) const +{ + TouchEventInfo info(type); + if (!isFirstTrack_) { + TouchLocationInfo lastTouchLocationInfo(lastPoint_.id); + lastTouchLocationInfo.SetGlobalLocation(lastPoint_.GetOffset()) + .SetLocalLocation(lastPoint_.GetOffset() - coordinateOffset_) + .SetSize(lastPoint_.size); + info.AddChangedTouchLocationInfo(std::move(lastTouchLocationInfo)); + if (ignoreCurrent) { + info.SetTimeStamp(lastPoint_.time); + return info; + } + } + info.SetTimeStamp(point.time); + TouchLocationInfo currentTouchLocationInfo(point.id); + currentTouchLocationInfo.SetGlobalLocation(point.GetOffset()) + .SetLocalLocation(point.GetOffset() - coordinateOffset_) + .SetSize(point.size); + info.AddTouchLocationInfo(std::move(currentTouchLocationInfo)); + return info; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/gestures/raw_recognizer.h b/frameworks/core/gestures/raw_recognizer.h new file mode 100644 index 00000000..45dabf81 --- /dev/null +++ b/frameworks/core/gestures/raw_recognizer.h @@ -0,0 +1,141 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_GESTURES_RAW_RECOGNIZER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_GESTURES_RAW_RECOGNIZER_H + +#include + +#include "core/gestures/gesture_recognizer.h" + +namespace OHOS::Ace { + +class TouchEventInfo : public BaseEventInfo { + DECLARE_RELATIONSHIP_OF_CLASSES(TouchEventInfo, BaseEventInfo); + +public: + explicit TouchEventInfo(const std::string& type) : BaseEventInfo(type) {} + ~TouchEventInfo() override = default; + + void AddTouchLocationInfo(TouchLocationInfo&& info) + { + touches_.emplace_back(info); + } + void AddChangedTouchLocationInfo(TouchLocationInfo&& info) + { + changedTouches_.emplace_back(info); + } + + const std::list& GetTouches() const + { + return touches_; + } + const std::list& GetChangedTouches() const + { + return changedTouches_; + } + +private: + std::list touches_; + std::list changedTouches_; +}; + +using OnTouchEventCallback = std::function; +using CatchTouchEventCallback = std::function; + +namespace EventAction { +constexpr uint32_t SIZE = 2; +constexpr uint32_t ON = 0; +constexpr uint32_t CATCH = 1; +} // namespace EventAction + +namespace EventStage { +constexpr uint32_t SIZE = 2; +constexpr uint32_t CAPTURE = 0; +constexpr uint32_t BUBBLE = 1; +} // namespace EventStage + +namespace EventType { +constexpr uint32_t SIZE = 4; +constexpr uint32_t TOUCH_DOWN = 0; +constexpr uint32_t TOUCH_MOVE = 1; +constexpr uint32_t TOUCH_UP = 2; +constexpr uint32_t TOUCH_CANCEL = 3; +} // namespace EventType + +// Notice: +// The RawRecognizer does not participate in the gesture decision and is not affected by the gesture disambiguation. +// If there are other gesture recognizers that have accepted the gesture, the RawRecognizer can also accept the +// original event. +class RawRecognizer : public TouchEventTarget { + DECLARE_ACE_TYPE(RawRecognizer, TouchEventTarget); + +public: + void HandleEvent(const TouchPoint& point, uint32_t stage); + bool DispatchEvent(const TouchPoint& point) override; + bool HandleEvent(const TouchPoint& point) override; + + void SetOnEventCallback( + const OnTouchEventCallback& eventCallback, uint32_t stage, uint32_t eventType) + { + onEventCallbacks_[stage][eventType] = eventCallback; + } + + void SetCatchEventCallback( + const CatchTouchEventCallback& eventCallback, uint32_t stage, uint32_t eventType) + { + catcheventCallbacks_[stage][eventType] = eventCallback; + } + + void SetOnTouchDown(const OnTouchEventCallback& onTouchDown) + { + onEventCallbacks_[EventStage::BUBBLE][EventType::TOUCH_DOWN] = onTouchDown; + } + + void SetOnTouchMove(const OnTouchEventCallback& onTouchMove) + { + onEventCallbacks_[EventStage::BUBBLE][EventType::TOUCH_MOVE] = onTouchMove; + } + + void SetOnTouchUp(const OnTouchEventCallback& onTouchUp) + { + onEventCallbacks_[EventStage::BUBBLE][EventType::TOUCH_UP] = onTouchUp; + } + + void SetOnTouchCancel(const OnTouchEventCallback& onTouchCancel) + { + onEventCallbacks_[EventStage::BUBBLE][EventType::TOUCH_CANCEL] = onTouchCancel; + } + + // Coordinate offset is used to calculate the local location of the touch point in the render node. + void SetCoordinateOffset(const Offset& coordinateOffset) + { + coordinateOffset_ = coordinateOffset; + } + +private: + TouchEventInfo CreateTouchEventInfo( + const std::string& type, const TouchPoint& point, bool ignoreCurrent = false) const; + + OnTouchEventCallback onEventCallbacks_[EventStage::SIZE][EventType::SIZE]; + CatchTouchEventCallback catcheventCallbacks_[EventStage::SIZE][EventType::SIZE]; + TouchPoint lastPoint_; + Offset coordinateOffset_; + bool isFirstTrack_ = true; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_GESTURES_RAW_RECOGNIZER_H diff --git a/frameworks/core/gestures/swipe_recognizer.cpp b/frameworks/core/gestures/swipe_recognizer.cpp new file mode 100644 index 00000000..459db691 --- /dev/null +++ b/frameworks/core/gestures/swipe_recognizer.cpp @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/gestures/swipe_recognizer.h" + +#include "base/json/json_util.h" +#include "base/log/log.h" + +namespace OHOS::Ace { +namespace { + +SwipeEventInfo::SwipeDirection GetSwipeDirection(const TouchPoint& firstPoint, const TouchPoint& lastPoint) +{ + static const double duration = 15.0; + auto xOffset = lastPoint.x - firstPoint.x; + auto yOffset = lastPoint.y - firstPoint.y; + if (std::abs(xOffset) > std::abs(yOffset)) { + if (std::abs(xOffset) < duration) { + return SwipeEventInfo::SwipeDirection::NONE; + } + return xOffset > 0.0 ? SwipeEventInfo::SwipeDirection::RIGHT : SwipeEventInfo::SwipeDirection::LEFT; + } else { + if (std::abs(yOffset) < duration) { + return SwipeEventInfo::SwipeDirection::NONE; + } + return yOffset > 0.0 ? SwipeEventInfo::SwipeDirection::DOWN : SwipeEventInfo::SwipeDirection::UP; + } +} + +} // namespace + +std::string SwipeEventInfo::ToJsonParamInfo() const +{ + static std::unordered_map conventMap { + { SwipeEventInfo::SwipeDirection::RIGHT, "right" }, + { SwipeEventInfo::SwipeDirection::LEFT, "left" }, + { SwipeEventInfo::SwipeDirection::UP, "up" }, + { SwipeEventInfo::SwipeDirection::DOWN, "down" }, + }; + auto jsonValue = JsonUtil::Create(true); + jsonValue->Put("type", GetType().c_str()); + jsonValue->Put("timestamp", static_cast(GetTimeStamp().time_since_epoch().count())); + jsonValue->Put("direction", conventMap[swipeDirection_].c_str()); + return jsonValue->ToString(); +} + +bool SwipeRecognizer::HandleEvent(const TouchPoint& point) +{ + switch (point.type) { + case TouchType::DOWN: { + // reset the recognizer status. + auto& status = statusMap_[point.id]; + status.first = point; + status.second = false; + break; + } + case TouchType::UP: { + auto& status = statusMap_[point.id]; + if (status.second && swipeCallback_) { + auto direction = GetSwipeDirection(status.first, point); + if (direction == SwipeEventInfo::SwipeDirection::NONE) { + return true; + } + swipeCallback_(SwipeEventInfo(direction)); + } + break; + } + case TouchType::MOVE: { + auto& status = statusMap_[point.id]; + status.second = true; + break; + } + case TouchType::CANCEL: { + auto& status = statusMap_[point.id]; + status.second = false; + break; + } + default: + LOGW("unknown type point type."); + } + return true; +} + +bool SwipeRecognizer::DispatchEvent(const TouchPoint& point) +{ + return true; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/gestures/swipe_recognizer.h b/frameworks/core/gestures/swipe_recognizer.h new file mode 100644 index 00000000..c675b837 --- /dev/null +++ b/frameworks/core/gestures/swipe_recognizer.h @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_GESTURES_SWIPE_RECOGNIZER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_GESTURES_SWIPE_RECOGNIZER_H + +#include +#include + +#include "core/gestures/touch_event.h" + +namespace OHOS::Ace { + +class SwipeEventInfo : public BaseEventInfo { + DECLARE_RELATIONSHIP_OF_CLASSES(SwipeEventInfo, BaseEventInfo) + +public: + enum class SwipeDirection { + LEFT = 0, + RIGHT, + UP, + DOWN, + NONE, + }; + explicit SwipeEventInfo(SwipeDirection swipeDirection) : BaseEventInfo("onswipe"), swipeDirection_(swipeDirection) + {} + ~SwipeEventInfo() override = default; + + std::string ToJsonParamInfo() const; + +private: + SwipeDirection swipeDirection_ = SwipeDirection::LEFT; +}; + +using SwipeCallback = std::function; + +class SwipeRecognizer : public TouchEventTarget { + DECLARE_ACE_TYPE(SwipeRecognizer, TouchEventTarget) + +public: + bool HandleEvent(const TouchPoint& point) override; + + bool DispatchEvent(const TouchPoint& point) override; + + void AddSwipeCallback(const SwipeCallback& swipeCallback) + { + swipeCallback_ = swipeCallback; + } + +private: + std::unordered_map> statusMap_; + SwipeCallback swipeCallback_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_GESTURES_SWIPE_RECOGNIZER_H diff --git a/frameworks/core/gestures/test/BUILD.gn b/frameworks/core/gestures/test/BUILD.gn new file mode 100644 index 00000000..e4c5ec83 --- /dev/null +++ b/frameworks/core/gestures/test/BUILD.gn @@ -0,0 +1,21 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") + +group("unittest") { + testonly = true + deps = [] + + deps += [ "unittest:unittest" ] +} diff --git a/frameworks/core/gestures/test/unittest/BUILD.gn b/frameworks/core/gestures/test/unittest/BUILD.gn new file mode 100644 index 00000000..76d14968 --- /dev/null +++ b/frameworks/core/gestures/test/unittest/BUILD.gn @@ -0,0 +1,45 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +if (is_standard_system) { + module_output_path = "ace_engine_standard/graphicalbasicability/gestures" +} + +ohos_unittest("GesturesTest") { + module_out_path = module_output_path + + sources = [ "gestures_test.cpp" ] + + configs = [ "$ace_root:ace_test_config" ] + + deps = [ + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core:ace_core_ohos", + "//third_party/googletest:gtest_main", + ] + if (is_standard_system) { + deps += [ "$ace_root/frameworks/bridge:js_framework_ohos" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":GesturesTest" ] +} diff --git a/frameworks/core/gestures/test/unittest/gestures_test.cpp b/frameworks/core/gestures/test/unittest/gestures_test.cpp new file mode 100644 index 00000000..a4388195 --- /dev/null +++ b/frameworks/core/gestures/test/unittest/gestures_test.cpp @@ -0,0 +1,1127 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include "core/gestures/click_recognizer.h" +#include "core/gestures/drag_recognizer.h" +#include "core/gestures/gesture_referee.h" +#include "core/gestures/long_press_recognizer.h" +#include "core/gestures/raw_recognizer.h" +#include "core/gestures/velocity_tracker.h" +#include "core/pipeline/pipeline_context.h" + +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +constexpr double LOCATION_X = 200.0; +constexpr double LOCATION_Y = 400.0; +constexpr double LOCATION_STATIC = 0.0; +constexpr int32_t TIME_MILLISECOND = 1000; +constexpr int32_t TIME_COUNTS = 500; + +constexpr double MAX_THRESHOLD = 20.0; + +const std::string TOUCH_DOWN_TYPE = "onTouchDown"; +const std::string TOUCH_UP_TYPE = "onTouchUp"; +const std::string TOUCH_MOVE_TYPE = "onTouchMove"; +const std::string TOUCH_CANCEL_TYPE = "onTouchCancel"; + +} // namespace + +class TouchEventResult { +public: + explicit TouchEventResult(const std::string& type) : touchEventInfo_(type) {}; + ~TouchEventResult() = default; + + const TouchEventInfo& GetTouchEventInfo() const + { + return touchEventInfo_; + } + + void SetTouchEventInfo(const TouchEventInfo& touchEventInfo) + { + touchEventInfo_ = touchEventInfo; + } + +private: + TouchEventInfo touchEventInfo_; +}; + +class LongPressEventResult { +public: + explicit LongPressEventResult() : longPressInfo_(0) {}; + ~LongPressEventResult() = default; + + void SetLongPress(bool longPress) + { + longPress_ = longPress; + } + + bool GetLongPress() const + { + return longPress_; + } + + void SetLongPressInfo(const LongPressInfo& longPressInfo) + { + longPressInfo_ = longPressInfo; + } + + const LongPressInfo& GetLongPressInfo() + { + return longPressInfo_; + } + +private: + bool longPress_ = false; + LongPressInfo longPressInfo_; +}; + +class ClickEventResult { +public: + explicit ClickEventResult() : clickInfo_(0) {}; + ~ClickEventResult() = default; + + const ClickInfo& GetClickInfo() const + { + return clickInfo_; + } + + void SetClickInfo(const ClickInfo& clickInfo) + { + clickInfo_ = clickInfo; + } + +private: + ClickInfo clickInfo_; +}; + +class GestureRefereeResult { +public: + GestureRefereeResult() : gestureName_("") {}; + ~GestureRefereeResult() = default; + + void SetGestureName(const std::string& gestureName) + { + gestureName_ = gestureName; + } + + const std::string& GetGestureName() const + { + return gestureName_; + } + +private: + std::string gestureName_; +}; + +class DragEventResult { +public: + DragEventResult() : dragStartInfo_(0), dragUpdateInfo_(0), dragEndInfo_(0) {}; + ~DragEventResult() = default; + + void SetDragStart(const DragStartInfo& info) + { + dragStartInfo_ = info; + } + + void SetDragUpdate(const DragUpdateInfo& info) + { + dragUpdateInfo_ = info; + } + + void SetDragEnd(const DragEndInfo& info) + { + dragEndInfo_ = info; + } + + const DragStartInfo& GetDragStart() const + { + return dragStartInfo_; + } + + const DragUpdateInfo& GetDragUpdate() const + { + return dragUpdateInfo_; + } + + const DragEndInfo& GetDragEnd() const + { + return dragEndInfo_; + } + + void SetDragCancel(bool dragCancel) + { + dragCancel_ = dragCancel; + } + + bool GetDragCancel() const + { + return dragCancel_; + } + +private: + DragStartInfo dragStartInfo_; + DragUpdateInfo dragUpdateInfo_; + DragEndInfo dragEndInfo_; + bool dragCancel_ = false; +}; + +class GesturesTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void SetUp() override; + void TearDown() override; +}; + +void GesturesTest::SetUpTestCase() {} + +void GesturesTest::TearDownTestCase() {} + +void GesturesTest::SetUp() {} + +void GesturesTest::TearDown() {} + +/** + * @tc.name: RawRecognizer001 + * @tc.desc: Verify the raw recognizer recognizes corresponding touch down event. + * @tc.type: FUNC + * @tc.require: AR000DAPU9 + * @tc.author: yanshuifeng + */ +HWTEST_F(GesturesTest, RawRecognizer001, TestSize.Level1) +{ + /** + * @tc.steps: step1. create raw recognizer and set touch down event callback. + */ + TouchEventResult onTouchDown(TOUCH_DOWN_TYPE); + auto rawRecognizer = AceType::MakeRefPtr(); + rawRecognizer->SetOnTouchDown([&onTouchDown](const TouchEventInfo& info) { onTouchDown.SetTouchEventInfo(info); }); + + /** + * @tc.steps: step2. send touch down event. + * @tc.expected: step2. receive touch down callback and touch point result is right. + */ + TouchPoint point { + .x = LOCATION_X, .y = LOCATION_Y, .type = TouchType::DOWN, .time = std::chrono::high_resolution_clock::now() + }; + rawRecognizer->HandleEvent(point); + ASSERT_FALSE(onTouchDown.GetTouchEventInfo().GetTouches().empty()); + ASSERT_TRUE(onTouchDown.GetTouchEventInfo().GetChangedTouches().empty()); + + /** + * @tc.steps: step3. check the touch location info. + * @tc.expected: step3. the touch location info is right. + */ + auto& locationInfo = onTouchDown.GetTouchEventInfo().GetTouches().front(); + ASSERT_EQ(locationInfo.GetGlobalLocation().GetX(), LOCATION_X); + ASSERT_EQ(locationInfo.GetGlobalLocation().GetY(), LOCATION_Y); +} + +/** + * @tc.name: RawRecognizer002 + * @tc.desc: Verify the raw recognizer recognizes corresponding touch up event. + * @tc.type: FUNC + * @tc.require: AR000DAPU9 + * @tc.author: huye + */ +HWTEST_F(GesturesTest, RawRecognizer002, TestSize.Level1) +{ + /** + * @tc.steps: step1. create raw recognizer and set touch up event callback. + */ + TouchEventResult onTouchUp(TOUCH_UP_TYPE); + auto rawRecognizer = AceType::MakeRefPtr(); + rawRecognizer->SetOnTouchUp([&onTouchUp](const TouchEventInfo& info) { onTouchUp.SetTouchEventInfo(info); }); + + /** + * @tc.steps: step2. send touch up event. + * @tc.expected: step2. receive touch up callback and touch point result is right. + */ + TouchPoint point { + .x = LOCATION_X, .y = LOCATION_Y, .type = TouchType::UP, .time = std::chrono::high_resolution_clock::now() + }; + rawRecognizer->HandleEvent(point); + ASSERT_FALSE(onTouchUp.GetTouchEventInfo().GetTouches().empty()); + ASSERT_TRUE(onTouchUp.GetTouchEventInfo().GetChangedTouches().empty()); + + /** + * @tc.steps: step3. check the touch location info. + * @tc.expected: step3. the touch location info is right. + */ + auto& locationInfo = onTouchUp.GetTouchEventInfo().GetTouches().front(); + ASSERT_EQ(locationInfo.GetGlobalLocation().GetX(), LOCATION_X); + ASSERT_EQ(locationInfo.GetGlobalLocation().GetY(), LOCATION_Y); +} + +/** + * @tc.name: RawRecognizer003 + * @tc.desc: Verify the raw recognizer recognizes corresponding touch cancel event. + * @tc.type: FUNC + * @tc.require: AR000DAPU9 + * @tc.author: huye + */ +HWTEST_F(GesturesTest, RawRecognizer003, TestSize.Level1) +{ + /** + * @tc.steps: step1. create raw recognizer and set touch cancel event callback. + */ + TouchEventResult onTouchCancel(TOUCH_CANCEL_TYPE); + auto rawRecognizer = AceType::MakeRefPtr(); + rawRecognizer->SetOnTouchCancel( + [&onTouchCancel](const TouchEventInfo& info) { onTouchCancel.SetTouchEventInfo(info); }); + + /** + * @tc.steps: step2. send touch cancel event. + * @tc.expected: step2. receive touch cancel callback and touch point result is right. + */ + TouchPoint point { + .x = LOCATION_X, .y = LOCATION_Y, .type = TouchType::CANCEL, .time = std::chrono::high_resolution_clock::now() + }; + rawRecognizer->HandleEvent(point); + ASSERT_FALSE(onTouchCancel.GetTouchEventInfo().GetTouches().empty()); + ASSERT_TRUE(onTouchCancel.GetTouchEventInfo().GetChangedTouches().empty()); + + /** + * @tc.steps: step3. check the touch location info. + * @tc.expected: step3. the touch location info is right. + */ + auto& locationInfo = onTouchCancel.GetTouchEventInfo().GetTouches().front(); + ASSERT_EQ(locationInfo.GetGlobalLocation().GetX(), LOCATION_X); + ASSERT_EQ(locationInfo.GetGlobalLocation().GetY(), LOCATION_Y); +} + +/** + * @tc.name: RawRecognizer004 + * @tc.desc: Verify the raw recognizer recognizes corresponding touch move event. + * @tc.type: FUNC + * @tc.require: AR000DAPU9 + * @tc.author: huye + */ +HWTEST_F(GesturesTest, RawRecognizer004, TestSize.Level1) +{ + /** + * @tc.steps: step1. create raw recognizer and set touch move event callback. + */ + TouchEventResult onTouchMove(TOUCH_MOVE_TYPE); + auto rawRecognizer = AceType::MakeRefPtr(); + rawRecognizer->SetOnTouchMove([&onTouchMove](const TouchEventInfo& info) { onTouchMove.SetTouchEventInfo(info); }); + + /** + * @tc.steps: step2. send touch move event. + * @tc.expected: step2. receive touch move callback and touch point result is right. + */ + TouchPoint point { + .x = LOCATION_X, .y = LOCATION_Y, .type = TouchType::MOVE, .time = std::chrono::high_resolution_clock::now() + }; + rawRecognizer->HandleEvent(point); + ASSERT_FALSE(onTouchMove.GetTouchEventInfo().GetTouches().empty()); + ASSERT_TRUE(onTouchMove.GetTouchEventInfo().GetChangedTouches().empty()); + + /** + * @tc.steps: step3. check the touch location info. + * @tc.expected: step3. the touch location info is right. + */ + auto& locationInfo = onTouchMove.GetTouchEventInfo().GetTouches().front(); + ASSERT_EQ(locationInfo.GetGlobalLocation().GetX(), LOCATION_X); + ASSERT_EQ(locationInfo.GetGlobalLocation().GetY(), LOCATION_Y); +} + +/** + * @tc.name: VelocityTracker001 + * @tc.desc: Verify the velocity vracker recognizes velocity vracker. + * @tc.type: FUNC + * @tc.require: AR000DAPUA + * @tc.author: huye + */ +HWTEST_F(GesturesTest, VelocityTracker001, TestSize.Level1) +{ + /** + * @tc.steps: step1. create velocity vracker. + */ + VelocityTracker onVelocityTracker(Axis::VERTICAL); + + /** + * @tc.steps: step2. send start point. + * @tc.expected: step2. receive first point to calculate the velocity. + */ + TouchPoint pointFirst { + .x = LOCATION_X, .y = LOCATION_Y, .type = TouchType::MOVE, .time = std::chrono::high_resolution_clock::now() + }; + onVelocityTracker.UpdateTouchPoint(pointFirst); + ASSERT_EQ(onVelocityTracker.GetMainAxisPos(), LOCATION_Y); + ASSERT_EQ(onVelocityTracker.GetMainAxisDeltaPos(), LOCATION_STATIC); + + /** + * @tc.steps: step3. send end point. + * @tc.expected: step3. receive first point to calculate the velocity. + */ + usleep(TIME_MILLISECOND); + TouchPoint pointSecond { + .x = LOCATION_X, .y = 2 * LOCATION_Y, .type = TouchType::MOVE, .time = std::chrono::high_resolution_clock::now() + }; + + onVelocityTracker.UpdateTouchPoint(pointSecond); + ASSERT_EQ(onVelocityTracker.GetMainAxisPos(), 2 * LOCATION_Y); + ASSERT_EQ(onVelocityTracker.GetMainAxisDeltaPos(), LOCATION_Y); + + // nanoseconds duration to seconds. + const std::chrono::duration duration = pointSecond.time - pointFirst.time; + if (!NearZero(duration.count())) { + Velocity velocity((pointSecond.GetOffset() - pointFirst.GetOffset()) / duration.count()); + ASSERT_EQ(onVelocityTracker.GetMainAxisVelocity(), velocity.GetVelocityY()); + } +} + +/** + * @tc.name: VelocityTracker002 + * @tc.desc: Verify the velocity tracker recognizes horizontal velocity. + * @tc.type: FUNC + * @tc.require: AR000DAPUA + * @tc.author: huye + */ +HWTEST_F(GesturesTest, VelocityTracker002, TestSize.Level1) +{ + /** + * @tc.steps: step1. create horizontal velocity tracker. + */ + VelocityTracker onVelocityTracker(Axis::HORIZONTAL); + + /** + * @tc.steps: step2. send start point. + * @tc.expected: step2. receive first point to calculate the velocity. + */ + TouchPoint pointFirst { + .x = LOCATION_X, .y = LOCATION_Y, .type = TouchType::MOVE, .time = std::chrono::high_resolution_clock::now() + }; + onVelocityTracker.UpdateTouchPoint(pointFirst); + ASSERT_EQ(onVelocityTracker.GetMainAxisPos(), LOCATION_X); + ASSERT_EQ(onVelocityTracker.GetMainAxisDeltaPos(), LOCATION_STATIC); + + /** + * @tc.steps: step3. send end point. + * @tc.expected: step3. receive first point to calculate the velocity. + */ + usleep(TIME_MILLISECOND); + TouchPoint pointSecond { + .x = 2 * LOCATION_X, .y = LOCATION_Y, .type = TouchType::MOVE, .time = std::chrono::high_resolution_clock::now() + }; + + onVelocityTracker.UpdateTouchPoint(pointSecond); + ASSERT_EQ(onVelocityTracker.GetMainAxisPos(), 2 * LOCATION_X); + ASSERT_EQ(onVelocityTracker.GetMainAxisDeltaPos(), LOCATION_X); + + // nanoseconds duration to seconds. + const std::chrono::duration duration = pointSecond.time - pointFirst.time; + if (!NearZero(duration.count())) { + Velocity velocity((pointSecond.GetOffset() - pointFirst.GetOffset()) / duration.count()); + ASSERT_EQ(onVelocityTracker.GetMainAxisVelocity(), velocity.GetVelocityX()); + } +} + +/** + * @tc.name: VelocityTracker003 + * @tc.desc: Verify the velocity tracker recognizes free velocity. + * @tc.type: FUNC + * @tc.require: AR000DAPUA + * @tc.author: huye + */ +HWTEST_F(GesturesTest, VelocityTracker003, TestSize.Level1) +{ + /** + * @tc.steps: step1. create free velocity tracker. + */ + VelocityTracker velTracker(Axis::FREE); + + /** + * @tc.steps: step2. send start point. + * @tc.expected: step2. receive first point to calculate the velocity. + */ + TouchPoint pointFirst { + .x = LOCATION_X, .y = LOCATION_Y, .type = TouchType::MOVE, .time = std::chrono::high_resolution_clock::now() + }; + velTracker.UpdateTouchPoint(pointFirst); + ASSERT_EQ(velTracker.GetMainAxisPos(), pointFirst.GetOffset().GetDistance()); + ASSERT_EQ(velTracker.GetMainAxisDeltaPos(), LOCATION_STATIC); + + /** + * @tc.steps: step3. send end point. + * @tc.expected: step3. receive first point to calculate the velocity. + */ + usleep(TIME_MILLISECOND); + TouchPoint pointSecond { .x = 2 * LOCATION_X, + .y = 2 * LOCATION_Y, + .type = TouchType::MOVE, + .time = std::chrono::high_resolution_clock::now() }; + + velTracker.UpdateTouchPoint(pointSecond); + ASSERT_EQ(velTracker.GetMainAxisPos(), pointSecond.GetOffset().GetDistance()); + ASSERT_EQ(velTracker.GetMainAxisDeltaPos(), (pointSecond.GetOffset() - pointFirst.GetOffset()).GetDistance()); + + // nanoseconds duration to seconds. + const std::chrono::duration duration = pointSecond.time - pointFirst.time; + if (!NearZero(duration.count())) { + Velocity velocity((pointSecond.GetOffset() - pointFirst.GetOffset()) / duration.count()); + ASSERT_EQ(velTracker.GetMainAxisVelocity(), velocity.GetVelocityValue()); + } +} + +/** + * @tc.name: LongPressRecognizer001 + * @tc.desc: Verify the long press recognizer recognizes corresponding long press event. + * @tc.type: FUNC + * @tc.require: AR000DB0UK + * @tc.author: huye + */ +HWTEST_F(GesturesTest, LongPressRecognizer001, TestSize.Level1) +{ + /** + * @tc.steps: step1. create long press recognizer and set long press event callback. + */ + LongPressEventResult onLongPress; + WeakPtr context; + auto longPressRecognizer = AceType::MakeRefPtr(context); + longPressRecognizer->SetOnLongPress([&onLongPress](const LongPressInfo& info) { + onLongPress.SetLongPress(true); + onLongPress.SetLongPressInfo(info); + }); + + /** + * @tc.steps: step2. send touch down event. + * @tc.expected: step2. touch point result is right. + */ + TouchPoint point { + .x = LOCATION_X, .y = LOCATION_Y, .type = TouchType::DOWN, .time = std::chrono::high_resolution_clock::now() + }; + longPressRecognizer->HandleEvent(point); + ASSERT_FALSE(onLongPress.GetLongPress()); + + /** + * @tc.steps: step3. end touch up event. check the touch location info. + * @tc.expected: step3. receive touch long press callback and the touch location info is right. + */ + point.type = TouchType::UP; + longPressRecognizer->HandleEvent(point); + ASSERT_FALSE(onLongPress.GetLongPress()); +} + +/** + * @tc.name: LongPressRecognizer002 + * @tc.desc: Verify the long press recognizer recognizes corresponding long press event. + * @tc.type: FUNC + * @tc.require: AR000DB0UK + * @tc.author: huye + */ +HWTEST_F(GesturesTest, LongPressRecognizer002, TestSize.Level1) +{ + /** + * @tc.steps: step1. create long press recognizer and set long press event callback. + */ + LongPressEventResult onLongPress; + WeakPtr context; + auto longPressRecognizer = AceType::MakeRefPtr(context); + longPressRecognizer->SetOnLongPress([&onLongPress](const LongPressInfo& info) { + onLongPress.SetLongPress(true); + onLongPress.SetLongPressInfo(info); + }); + + /** + * @tc.steps: step2. send touch down event. + * @tc.expected: step2. touch point result is right. + */ + TouchPoint point { + .x = LOCATION_X, .y = LOCATION_Y, .type = TouchType::DOWN, .time = std::chrono::high_resolution_clock::now() + }; + longPressRecognizer->HandleEvent(point); + ASSERT_FALSE(onLongPress.GetLongPress()); + + /** + * @tc.steps: step3. end touch move event. move range less than max threshold.check the touch location info. + * @tc.expected: step3. check the long press statusis right. + */ + point.type = TouchType::MOVE; + point.x += (MAX_THRESHOLD - 1); + + longPressRecognizer->HandleEvent(point); + ASSERT_FALSE(onLongPress.GetLongPress()); + + /** + * @tc.steps: step4. end touch move event. check the touch location info. + * @tc.expected: step4. receive touch long press callback and check the long press status is right. + */ + point.type = TouchType::UP; + longPressRecognizer->HandleEvent(point); + ASSERT_FALSE(onLongPress.GetLongPress()); +} + +/** + * @tc.name: LongPressRecognizer003 + * @tc.desc: Verify the long press recognizer recognizes corresponding long press event. + * @tc.type: FUNC + * @tc.require: AR000DB0UK + * @tc.author: huye + */ +HWTEST_F(GesturesTest, LongPressRecognizer003, TestSize.Level1) +{ + /** + * @tc.steps: step1. create long press recognizer and set long press event callback. + */ + LongPressEventResult onLongPress; + WeakPtr context; + auto longPressRecognizer = AceType::MakeRefPtr(context); + + longPressRecognizer->SetOnLongPress([&onLongPress](const LongPressInfo& info) { + onLongPress.SetLongPress(true); + onLongPress.SetLongPressInfo(info); + }); + + /** + * @tc.steps: step2. send touch down event. + * @tc.expected: step2. touch point result is right. + */ + TouchPoint point { + .x = LOCATION_X, .y = LOCATION_Y, .type = TouchType::DOWN, .time = std::chrono::high_resolution_clock::now() + }; + longPressRecognizer->HandleEvent(point); + ASSERT_FALSE(onLongPress.GetLongPress()); + + /** + * @tc.steps: step3. end touch move event.move range more than max threshold. check the touch location info. + * @tc.expected: step3. check the long press statusis right. + */ + point.type = TouchType::MOVE; + point.x += (MAX_THRESHOLD + 1); + + longPressRecognizer->HandleEvent(point); + ASSERT_FALSE(onLongPress.GetLongPress()); + + /** + * @tc.steps: step4. end touch move event. check the touch location info. + * @tc.expected: step4. receive touch long press callback and check the long press status is right. + */ + point.type = TouchType::UP; + + longPressRecognizer->HandleEvent(point); + ASSERT_FALSE(onLongPress.GetLongPress()); +} + +/** + * @tc.name: LongPressRecognizer004 + * @tc.desc: Verify the long press recognizer recognizes corresponding touch long press. + * @tc.type: FUNC + * @tc.require: AR000DB0UK + * @tc.author: huye + */ +HWTEST_F(GesturesTest, LongPressRecognizer004, TestSize.Level1) +{ + /** + * @tc.steps: step1. create long press recognizer and set long press event callback. + */ + LongPressEventResult onLongPress; + WeakPtr context; + auto longPressRecognizer = AceType::MakeRefPtr(context); + + longPressRecognizer->SetOnLongPress([&onLongPress](const LongPressInfo& info) { + onLongPress.SetLongPress(true); + onLongPress.SetLongPressInfo(info); + }); + + /** + * @tc.steps: step2. send touch down event. + * @tc.expected: step2. touch point result is right. + */ + TouchPoint point { + .x = LOCATION_X, .y = LOCATION_Y, .type = TouchType::DOWN, .time = std::chrono::high_resolution_clock::now() + }; + longPressRecognizer->HandleEvent(point); + ASSERT_FALSE(onLongPress.GetLongPress()); + + /** + * @tc.steps: step3. time wait longger than the max times(500ms). + * @tc.expected: step3. check the long press statusis right. + */ + usleep((TIME_COUNTS + 1) * TIME_MILLISECOND); + + /** + * @tc.steps: step4. end touch up event. check the touch location info. + * @tc.expected: step4. receive touch long press callback and check the long press status is right. + */ + point.type = TouchType::UP; + longPressRecognizer->HandleEvent(point); + ASSERT_FALSE(onLongPress.GetLongPress()); +} + +/** + * @tc.name: ClickRecognizer001 + * @tc.desc: Verify the click recognizer recognizes corresponding touch down event and up event. + * @tc.type: FUNC + * @tc.require: AR000DAIGG + * @tc.author: huye + */ +HWTEST_F(GesturesTest, ClickRecognizer001, TestSize.Level1) +{ + /** + * @tc.steps: step1. create click recognizer and set touch click event callback. + */ + ClickEventResult onClick; + auto clickRecognizer = AceType::MakeRefPtr(); + clickRecognizer->SetOnClick([&onClick](const ClickInfo& info) { onClick.SetClickInfo(info); }); + + /** + * @tc.steps: step2. send touch down event. + * @tc.expected: step2. receive touch down callback and touch point result is right. + */ + TouchPoint point { .id = 2, + .x = LOCATION_X, + .y = LOCATION_Y, + .type = TouchType::DOWN, + .time = std::chrono::high_resolution_clock::now() }; + clickRecognizer->HandleEvent(point); + ASSERT_TRUE(onClick.GetClickInfo().GetGlobalLocation().IsZero()); + + /** + * @tc.steps: step3. check the touch up event. + * @tc.expected: step3. the touch location info is right. + */ + point.type = TouchType::UP; + clickRecognizer->HandleEvent(point); + ASSERT_FALSE(onClick.GetClickInfo().GetGlobalLocation().IsZero()); + ASSERT_EQ(onClick.GetClickInfo().GetGlobalLocation(), point.GetOffset()); + ASSERT_EQ(onClick.GetClickInfo().GetFingerId(), point.id); +} + +/** + * @tc.name: ClickRecognizer002 + * @tc.desc: Verify the click recognizer recognizes corresponding touch down event and move and up event. move not far + * than MAX_THRESHOLD + * @tc.type: FUNC + * @tc.require: AR000DAIGG + * @tc.author: huye + */ +HWTEST_F(GesturesTest, ClickRecognizer002, TestSize.Level1) +{ + /** + * @tc.steps: step1. create click recognizer and set touch click event callback. + */ + ClickEventResult onClick; + auto clickRecognizer = AceType::MakeRefPtr(); + clickRecognizer->SetOnClick([&onClick](const ClickInfo& info) { onClick.SetClickInfo(info); }); + + /** + * @tc.steps: step2. send touch down event. + * @tc.expected: step2. receive touch down callback and touch point result is + * right. + */ + TouchPoint pointStart { + .x = LOCATION_X, .y = LOCATION_Y, .type = TouchType::DOWN, .time = std::chrono::high_resolution_clock::now() + }; + clickRecognizer->HandleEvent(pointStart); + ASSERT_TRUE(onClick.GetClickInfo().GetGlobalLocation().IsZero()); + + /** + * @tc.steps: step3. send the touch move event. move not far than max threshold + * @tc.expected: step3. the touch location info is right. + */ + TouchPoint pointEnd { .x = LOCATION_X + MAX_THRESHOLD, + .y = LOCATION_Y, + .type = TouchType::MOVE, + .time = std::chrono::high_resolution_clock::now() }; + clickRecognizer->HandleEvent(pointEnd); + ASSERT_TRUE(onClick.GetClickInfo().GetGlobalLocation().IsZero()); + + /** + * @tc.steps: step4. send the touch up event. + * @tc.expected: step4. the touch location info is right. + */ + pointEnd.type = TouchType::UP; + clickRecognizer->HandleEvent(pointEnd); + ASSERT_FALSE(onClick.GetClickInfo().GetGlobalLocation().IsZero()); + ASSERT_EQ(onClick.GetClickInfo().GetGlobalLocation(), pointStart.GetOffset()); +} + +/** + * @tc.name: ClickRecognizer003 + * @tc.desc: Verify the click recognizer recognizes corresponding touch down event and move and up event. move far than + * MAX_THRESHOLD + * @tc.type: FUNC + * @tc.require: AR000DAIGG + * @tc.author: huye + */ +HWTEST_F(GesturesTest, ClickRecognizer003, TestSize.Level1) +{ + /** + * @tc.steps: step1. create click recognizer and set touch click event callback. + */ + ClickEventResult onClick; + auto clickRecognizer = AceType::MakeRefPtr(); + clickRecognizer->SetOnClick([&onClick](const ClickInfo& info) { onClick.SetClickInfo(info); }); + + /** + * @tc.steps: step2. send touch down event. + * @tc.expected: step2. receive touch down callback and touch point result is right. + */ + TouchPoint pointStart { + .x = LOCATION_X, .y = LOCATION_Y, .type = TouchType::DOWN, .time = std::chrono::high_resolution_clock::now() + }; + clickRecognizer->HandleEvent(pointStart); + ASSERT_TRUE(onClick.GetClickInfo().GetGlobalLocation().IsZero()); + + /** + * @tc.steps: step3. send the touch move event. move far than max threshold + * @tc.expected: step3. the touch location info is right. + */ + TouchPoint pointEnd { .x = LOCATION_X + MAX_THRESHOLD + 0.1f, + .y = LOCATION_Y, + .type = TouchType::MOVE, + .time = std::chrono::high_resolution_clock::now() }; + clickRecognizer->HandleEvent(pointEnd); + ASSERT_TRUE(onClick.GetClickInfo().GetGlobalLocation().IsZero()); + + /** + * @tc.steps: step4. send the touch up event. + * @tc.expected: step4. the touch location info is right. + */ + pointEnd.type = TouchType::UP; + clickRecognizer->HandleEvent(pointEnd); + ASSERT_TRUE(onClick.GetClickInfo().GetGlobalLocation().IsZero()); +} + +/** + * @tc.name: GestureReferee001 + * @tc.desc: Verify the gesture referee corresponding gesture recognizer's referee + * @tc.type: FUNC + * @tc.require: AR000DAIGF + * @tc.author: huye + */ +HWTEST_F(GesturesTest, GestureReferee001, TestSize.Level1) +{ + /** + * @tc.steps: step1. create click recognizers and register to gesture arbiter. + */ + GestureRefereeResult refereeResult; + auto clickRecognizerA = AceType::MakeRefPtr(); + auto clickRecognizerB = AceType::MakeRefPtr(); + auto clickRecognizerC = AceType::MakeRefPtr(); + + clickRecognizerA->SetOnClick( + [&refereeResult](const ClickInfo& info) { refereeResult.SetGestureName("clickRecognizerA"); }); + clickRecognizerB->SetOnClick( + [&refereeResult](const ClickInfo& info) { refereeResult.SetGestureName("clickRecognizerB"); }); + clickRecognizerC->SetOnClick( + [&refereeResult](const ClickInfo& info) { refereeResult.SetGestureName("clickRecognizerC"); }); + + int32_t eventId = 2; + GestureReferee::GetInstance().AddGestureRecognizer(eventId, clickRecognizerA); + GestureReferee::GetInstance().AddGestureRecognizer(eventId, clickRecognizerB); + GestureReferee::GetInstance().AddGestureRecognizer(eventId, clickRecognizerC); + + /** + * @tc.steps: step2. send accept to gesture arbiter. + * @tc.expected: step2. receive event callback and check result is right. + */ + GestureReferee::GetInstance().Adjudicate(eventId, clickRecognizerC, GestureDisposal::ACCEPT); + GestureReferee::GetInstance().Adjudicate(eventId, clickRecognizerB, GestureDisposal::ACCEPT); + GestureReferee::GetInstance().Adjudicate(eventId, clickRecognizerA, GestureDisposal::ACCEPT); + + ASSERT_EQ(refereeResult.GetGestureName(), std::string("clickRecognizerC")); +} + +/** + * @tc.name: GestureReferee002 + * @tc.desc: Verify the gesture arbiter corresponding gesture recognizer's arbiter + * @tc.type: FUNC + * @tc.require: AR000DAIGF + * @tc.author: huye + */ +HWTEST_F(GesturesTest, GestureReferee002, TestSize.Level1) +{ + /** + * @tc.steps: step1. create click recognizers and register to gesture arbiter. + */ + GestureRefereeResult refereeResult; + auto clickRecognizerA = AceType::MakeRefPtr(); + + clickRecognizerA->SetOnClick( + [&refereeResult](const ClickInfo& info) { refereeResult.SetGestureName("clickRecognizerA"); }); + + int32_t eventId = 0; + GestureReferee::GetInstance().AddGestureRecognizer(++eventId, clickRecognizerA); + + /** + * @tc.steps: step2. send accept to gesture arbiter. + * @tc.expected: step2. receive event callback and check result is right. + */ + GestureReferee::GetInstance().Adjudicate(eventId--, clickRecognizerA, GestureDisposal::REJECT); + + ASSERT_TRUE(refereeResult.GetGestureName().empty()); +} + +/** + * @tc.name: DragRecognizer001 + * @tc.desc: verify the drag recognizer corresponding vertical drag event + * @tc.type: FUNC + * @tc.require: AR000DAIGH + * @tc.author: huye + */ +HWTEST_F(GesturesTest, DragRecognizer001, TestSize.Level1) +{ + /** + * @tc.steps: step1. create click recognizers and register to gesture referee. + */ + DragEventResult onDrag; + auto dragRecognizer = AceType::MakeRefPtr(Axis::VERTICAL); + + dragRecognizer->SetOnDragStart([&onDrag](const DragStartInfo& info) { onDrag.SetDragStart(info); }); + dragRecognizer->SetOnDragUpdate([&onDrag](const DragUpdateInfo& info) { onDrag.SetDragUpdate(info); }); + dragRecognizer->SetOnDragEnd([&onDrag](const DragEndInfo& info) { onDrag.SetDragEnd(info); }); + + /** + * @tc.steps: step2. send down event and vertical move event. + * @tc.expected: step2. receive event callback and result is right. + */ + TouchPoint pointStart { .id = 2, + .x = LOCATION_X, + .y = LOCATION_Y, + .type = TouchType::DOWN, + .time = std::chrono::high_resolution_clock::now() }; + dragRecognizer->HandleEvent(pointStart); + + TouchPoint pointEnd { .id = 2, + .x = LOCATION_X, + .y = 2 * LOCATION_Y, + .type = TouchType::MOVE, + .time = std::chrono::high_resolution_clock::now() }; + dragRecognizer->HandleEvent(pointEnd); + + ASSERT_EQ(onDrag.GetDragStart().GetGlobalLocation(), pointStart.GetOffset()); + ASSERT_EQ(onDrag.GetDragStart().GetFingerId(), pointStart.id); + ASSERT_EQ(onDrag.GetDragUpdate().GetGlobalLocation(), pointEnd.GetOffset()); + ASSERT_EQ(onDrag.GetDragUpdate().GetFingerId(), pointEnd.id); + + /** + * @tc.steps: step3. send up event, check touch point result is right + * @tc.expected: step3. touch point result is right. + */ + pointEnd.type = TouchType::UP; + dragRecognizer->HandleEvent(pointEnd); + + ASSERT_EQ(onDrag.GetDragEnd().GetGlobalLocation(), pointEnd.GetOffset()); + ASSERT_EQ(onDrag.GetDragEnd().GetFingerId(), pointEnd.id); +} + +/** + * @tc.name: DragRecognizer002 + * @tc.desc: verify the drag recognizer corresponding horizontal drag event + * @tc.type: FUNC + * @tc.require: AR000DAIGH + * @tc.author: huye + */ +HWTEST_F(GesturesTest, DragRecognizer002, TestSize.Level1) +{ + /** + * @tc.steps: step1. create click recognizers and register to gesture referee. + */ + DragEventResult onDrag; + auto dragRecognizer = AceType::MakeRefPtr(Axis::HORIZONTAL); + + dragRecognizer->SetOnDragStart([&onDrag](const DragStartInfo& info) { onDrag.SetDragStart(info); }); + dragRecognizer->SetOnDragUpdate([&onDrag](const DragUpdateInfo& info) { onDrag.SetDragUpdate(info); }); + dragRecognizer->SetOnDragEnd([&onDrag](const DragEndInfo& info) { onDrag.SetDragEnd(info); }); + + /** + * @tc.steps: step2. send down event and horizontal move event. + * @tc.expected: step2. receive event callback and result is right. + */ + TouchPoint pointStart { .id = 2, + .x = LOCATION_X, + .y = LOCATION_Y, + .type = TouchType::DOWN, + .time = std::chrono::high_resolution_clock::now() }; + dragRecognizer->HandleEvent(pointStart); + + TouchPoint pointEnd { .id = 2, + .x = 2 * LOCATION_X, + .y = LOCATION_Y, + .type = TouchType::MOVE, + .time = std::chrono::high_resolution_clock::now() }; + dragRecognizer->HandleEvent(pointEnd); + + ASSERT_EQ(onDrag.GetDragStart().GetGlobalLocation(), pointStart.GetOffset()); + ASSERT_EQ(onDrag.GetDragStart().GetFingerId(), pointStart.id); + ASSERT_EQ(onDrag.GetDragUpdate().GetGlobalLocation(), pointEnd.GetOffset()); + ASSERT_EQ(onDrag.GetDragUpdate().GetFingerId(), pointEnd.id); + + /** + * @tc.steps: step3. send up event, check touch point result is right + * @tc.expected: step3. touch point result is right. + */ + pointEnd.type = TouchType::UP; + dragRecognizer->HandleEvent(pointEnd); + + ASSERT_EQ(onDrag.GetDragEnd().GetGlobalLocation(), pointEnd.GetOffset()); + ASSERT_EQ(onDrag.GetDragEnd().GetFingerId(), pointEnd.id); +} + +/** + * @tc.name: DragRecognizer003 + * @tc.desc: verify the drag recognizer corresponding free drag event + * @tc.type: FUNC + * @tc.require: AR000DAIGH + * @tc.author: huye + */ +HWTEST_F(GesturesTest, DragRecognizer003, TestSize.Level1) +{ + /** + * @tc.steps: step1. create click recognizers and register to gesture referee. + */ + DragEventResult onDrag; + auto dragRecognizer = AceType::MakeRefPtr(Axis::FREE); + + dragRecognizer->SetOnDragStart([&onDrag](const DragStartInfo& info) { onDrag.SetDragStart(info); }); + dragRecognizer->SetOnDragUpdate([&onDrag](const DragUpdateInfo& info) { onDrag.SetDragUpdate(info); }); + dragRecognizer->SetOnDragEnd([&onDrag](const DragEndInfo& info) { onDrag.SetDragEnd(info); }); + + /** + * @tc.steps: step2. send down event and free move event. + * @tc.expected: step2. receive event callback and result is right. + */ + TouchPoint pointStart { .id = 2, + .x = 2 * LOCATION_X, + .y = 2 * LOCATION_Y, + .type = TouchType::DOWN, + .time = std::chrono::high_resolution_clock::now() }; + dragRecognizer->HandleEvent(pointStart); + + TouchPoint pointEnd { .id = 2, + .x = 2 * LOCATION_X, + .y = LOCATION_Y, + .type = TouchType::MOVE, + .time = std::chrono::high_resolution_clock::now() }; + dragRecognizer->HandleEvent(pointEnd); + + ASSERT_EQ(onDrag.GetDragStart().GetGlobalLocation(), pointStart.GetOffset()); + ASSERT_EQ(onDrag.GetDragStart().GetFingerId(), pointStart.id); + ASSERT_EQ(onDrag.GetDragUpdate().GetGlobalLocation(), pointEnd.GetOffset()); + ASSERT_EQ(onDrag.GetDragUpdate().GetFingerId(), pointEnd.id); + + /** + * @tc.steps: step3. send up event, check touch point result is right + * @tc.expected: step3. touch point result is right. + */ + pointEnd.type = TouchType::UP; + dragRecognizer->HandleEvent(pointEnd); + + ASSERT_EQ(onDrag.GetDragEnd().GetGlobalLocation(), pointEnd.GetOffset()); + ASSERT_EQ(onDrag.GetDragEnd().GetFingerId(), pointEnd.id); +} + +/** + * @tc.name: DragRecognizer004 + * @tc.desc: verify the drag recognizer corresponding drag cancel event + * @tc.type: FUNC + * @tc.require: AR000DAIGH + * @tc.author: huye + */ +HWTEST_F(GesturesTest, DragRecognizer004, TestSize.Level1) +{ + /** + * @tc.steps: step1. create click recognizers and register to gesture referee. + */ + DragEventResult onDrag; + auto dragRecognizer = AceType::MakeRefPtr(Axis::HORIZONTAL); + + dragRecognizer->SetOnDragStart([&onDrag](const DragStartInfo& info) { onDrag.SetDragStart(info); }); + dragRecognizer->SetOnDragUpdate([&onDrag](const DragUpdateInfo& info) { onDrag.SetDragUpdate(info); }); + dragRecognizer->SetOnDragEnd([&onDrag](const DragEndInfo& info) { onDrag.SetDragEnd(info); }); + dragRecognizer->SetOnDragCancel([&onDrag]() { onDrag.SetDragCancel(true); }); + + /** + * @tc.steps: step2. send down event and move event. + * @tc.expected: step2. receive event callback and check result is right. + */ + TouchPoint pointStart { .id = 2, + .x = 2 * LOCATION_X, + .y = 2 * LOCATION_Y, + .type = TouchType::DOWN, + .time = std::chrono::high_resolution_clock::now() }; + dragRecognizer->HandleEvent(pointStart); + + pointStart.type = TouchType::CANCEL; + dragRecognizer->HandleEvent(pointStart); + + ASSERT_FALSE(onDrag.GetDragCancel()); + ASSERT_TRUE(onDrag.GetDragStart().GetGlobalLocation().IsZero()); + ASSERT_TRUE(onDrag.GetDragUpdate().GetGlobalLocation().IsZero()); + ASSERT_TRUE(onDrag.GetDragEnd().GetGlobalLocation().IsZero()); +} + +/** + * @tc.name: DragRecognizer005 + * @tc.desc: verify the drag recognizer corresponding drag move and cancel event + * @tc.type: FUNC + * @tc.require: AR000DAIGH + * @tc.author: huye + */ +HWTEST_F(GesturesTest, DragRecognizer005, TestSize.Level1) +{ + /** + * @tc.steps: step1. create click recognizers and register to gesture referee. + */ + DragEventResult onDrag; + auto dragRecognizer = AceType::MakeRefPtr(Axis::VERTICAL); + + dragRecognizer->SetOnDragStart([&onDrag](const DragStartInfo& info) { onDrag.SetDragStart(info); }); + dragRecognizer->SetOnDragUpdate([&onDrag](const DragUpdateInfo& info) { onDrag.SetDragUpdate(info); }); + dragRecognizer->SetOnDragEnd([&onDrag](const DragEndInfo& info) { onDrag.SetDragEnd(info); }); + dragRecognizer->SetOnDragCancel([&onDrag]() { onDrag.SetDragCancel(true); }); + + /** + * @tc.steps: step2. send down event and cancel event. + * @tc.expected: step2. receive event callback and check result is right. + */ + TouchPoint pointStart { .id = 2, + .x = 2 * LOCATION_X, + .y = 2 * LOCATION_Y, + .type = TouchType::DOWN, + .time = std::chrono::high_resolution_clock::now() }; + dragRecognizer->HandleEvent(pointStart); + + TouchPoint pointEnd { .id = 2, + .x = 2 * LOCATION_X, + .y = LOCATION_Y, + .type = TouchType::MOVE, + .time = std::chrono::high_resolution_clock::now() }; + + dragRecognizer->HandleEvent(pointEnd); + ASSERT_EQ(onDrag.GetDragStart().GetGlobalLocation().GetY(), pointStart.GetOffset().GetY()); + ASSERT_EQ(onDrag.GetDragStart().GetFingerId(), pointStart.id); + ASSERT_EQ(onDrag.GetDragUpdate().GetGlobalLocation().GetY(), pointEnd.GetOffset().GetY()); + ASSERT_EQ(onDrag.GetDragUpdate().GetFingerId(), pointEnd.id); + ASSERT_FALSE(onDrag.GetDragCancel()); + + /** + * @tc.steps: step3. send cancel event. + * @tc.expected: step3. receive event callback and check result is right. + */ + pointEnd.type = TouchType::CANCEL; + dragRecognizer->HandleEvent(pointEnd); + ASSERT_TRUE(onDrag.GetDragCancel()); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/gestures/touch_event.h b/frameworks/core/gestures/touch_event.h new file mode 100644 index 00000000..8004e711 --- /dev/null +++ b/frameworks/core/gestures/touch_event.h @@ -0,0 +1,241 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_GESTURES_TOUCH_EVENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_GESTURES_TOUCH_EVENT_H + +#include + +#include "base/geometry/offset.h" +#include "base/memory/ace_type.h" +#include "core/event/ace_events.h" + +namespace OHOS::Ace { + +enum class TouchType : size_t { + DOWN = 0, + UP, + MOVE, + CANCEL, + UNKNOWN, +}; + +struct TouchRestrict final { + static constexpr uint32_t NONE = 0x00000000; + static constexpr uint32_t CLICK = 0x00000001; + static constexpr uint32_t LONG_PRESS = 0x00000010; + static constexpr uint32_t SWIPE_LEFT = 0x00000100; + static constexpr uint32_t SWIPE_RIGHT = 0x00000200; + static constexpr uint32_t SWIPE_UP = 0x00000400; + static constexpr uint32_t SWIPE_DOWN = 0x00000800; + static constexpr uint32_t SWIPE = 0x00000F00; + static constexpr uint32_t SWIPE_VERTICAL = 0x0000C00; // Vertical + static constexpr uint32_t SWIPE_HORIZONTAL = 0x0000300; // Horizontal + static constexpr uint32_t TOUCH = 0xFFFFFFFF; + + uint32_t forbiddenType = NONE; + + void UpdateForbiddenType(uint32_t gestureType) + { + forbiddenType |= gestureType; + } +}; + +struct TouchPoint final { + // The ID is used to identify the point of contact between the finger and the screen. Different fingers have + // different ids. + int32_t id = 0; + float x = 0.0f; + float y = 0.0f; + TouchType type = TouchType::UNKNOWN; + TimeStamp time; + double size = 0.0; + float pressure = 0.0f; + int64_t deviceId = 0; + + Offset GetOffset() const + { + return Offset(x, y); + } + + TouchPoint CreateScalePoint(float scale) const + { + if (NearZero(scale)) { + return { id, x, y, type, time, size, pressure, deviceId }; + } + return { id, x / scale, y / scale, type, time, size, pressure, deviceId }; + } +}; + +class TouchCallBackInfo : public BaseEventInfo { + DECLARE_RELATIONSHIP_OF_CLASSES(TouchCallBackInfo, BaseEventInfo); + +public: + explicit TouchCallBackInfo(TouchType type) : BaseEventInfo("onTouchEvent"), touchType_(type) {} + ~TouchCallBackInfo() override = default; + + void SetScreenX(float screenX) + { + screenX_ = screenX; + } + float GetScreenX() const + { + return screenX_; + } + void SetScreenY(float screenY) + { + screenY_ = screenY; + } + float GetScreenY() const + { + return screenY_; + } + void SetLocalX(float localX) + { + localX_ = localX; + } + float GetLocalX() const + { + return localX_; + } + void SetLocalY(float localY) + { + localY_ = localY; + } + float GetLocalY() const + { + return localY_; + } + void SetTouchType(TouchType type) + { + touchType_ = type; + } + TouchType GetTouchType() const + { + return touchType_; + } + void SetTimeStamp(const TimeStamp& time) + { + time_ = time; + } + TimeStamp GetTimeStamp() const + { + return time_; + } + void SetPressure(float pressure) + { + pressure_ = pressure; + } + float GetPressure() const + { + return pressure_; + } + void SetDeviceId(int64_t deviceId) + { + deviceId_ = deviceId; + } + int64_t GetDeviceId() const + { + return deviceId_; + } + +private: + float screenX_ = 0.0f; + float screenY_ = 0.0f; + float localX_ = 0.0f; + float localY_ = 0.0f; + float pressure_ = 0.0f; + TouchType touchType_ = TouchType::UNKNOWN; + TimeStamp time_; + int64_t deviceId_ = 0; +}; + +class TouchLocationInfo : public TypeInfoBase { + DECLARE_RELATIONSHIP_OF_CLASSES(TouchLocationInfo, TypeInfoBase); + +public: + explicit TouchLocationInfo(int32_t fingerId) : fingerId_(fingerId) {} + ~TouchLocationInfo() override = default; + + TouchLocationInfo& SetGlobalLocation(const Offset& globalLocation) + { + globalLocation_ = globalLocation; + return *this; + } + TouchLocationInfo& SetLocalLocation(const Offset& localLocation) + { + localLocation_ = localLocation; + return *this; + } + + const Offset& GetLocalLocation() const + { + return localLocation_; + } + const Offset& GetGlobalLocation() const + { + return globalLocation_; + } + int32_t GetFingerId() const + { + return fingerId_; + } + + void SetSize(double size) + { + size_ = size; + } + + double GetSize() const + { + return size_; + } + +private: + // The finger id is used to identify the point of contact between the finger and the screen. Different fingers have + // different ids. + int32_t fingerId_ = -1; + + // global position at which the touch point contacts the screen. + Offset globalLocation_; + // Different from global location, The local location refers to the location of the contact point relative to the + // current node which has the recognizer. + Offset localLocation_; + + // finger touch size + double size_ = 0.0; +}; + +class TouchEventTarget : public virtual AceType { + DECLARE_ACE_TYPE(TouchEventTarget, AceType); + +public: + virtual bool DispatchEvent(const TouchPoint& point) = 0; + virtual bool HandleEvent(const TouchPoint& point) = 0; + + void SetTouchRestrict(const TouchRestrict& touchRestrict) + { + touchRestrict_ = touchRestrict; + } + +protected: + TouchRestrict touchRestrict_ { TouchRestrict::NONE }; +}; + +using TouchTestResult = std::list>; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_GESTURES_TOUCH_EVENT_H diff --git a/frameworks/core/gestures/velocity.h b/frameworks/core/gestures/velocity.h new file mode 100644 index 00000000..abfd4025 --- /dev/null +++ b/frameworks/core/gestures/velocity.h @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_GESTURES_VELOCITY_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_GESTURES_VELOCITY_H + +#include "base/geometry/offset.h" + +namespace OHOS::Ace { + +class Velocity final { +public: + Velocity() = default; + explicit Velocity(const Offset& offsetPerSecond) : offsetPerSecond_(offsetPerSecond) {} + ~Velocity() = default; + + void Reset() + { + offsetPerSecond_.Reset(); + } + + void SetOffsetPerSecond(const Offset& offsetPerSecond) + { + offsetPerSecond_ = offsetPerSecond; + } + + Velocity operator+(const Velocity& velocity) const + { + return Velocity(offsetPerSecond_ + velocity.offsetPerSecond_); + } + + Velocity operator-(const Velocity& velocity) const + { + return Velocity(offsetPerSecond_ - velocity.offsetPerSecond_); + } + + Velocity operator*(double value) const + { + return Velocity(offsetPerSecond_ * value); + } + + Velocity& operator+=(const Velocity& velocity) + { + offsetPerSecond_ += velocity.offsetPerSecond_; + return *this; + } + + bool operator==(const Velocity& velocity) const + { + return offsetPerSecond_ == velocity.offsetPerSecond_; + } + + bool operator!=(const Velocity& velocity) const + { + return !operator==(velocity); + } + + const Offset& GetOffsetPerSecond() const + { + return offsetPerSecond_; + } + + double GetVelocityX() const + { + return offsetPerSecond_.GetX(); + } + + double GetVelocityY() const + { + return offsetPerSecond_.GetY(); + } + + double GetVelocityValue() const + { + return offsetPerSecond_.GetDistance(); + } + +private: + Offset offsetPerSecond_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_GESTURES_VELOCITY_H diff --git a/frameworks/core/gestures/velocity_tracker.cpp b/frameworks/core/gestures/velocity_tracker.cpp new file mode 100644 index 00000000..e83574db --- /dev/null +++ b/frameworks/core/gestures/velocity_tracker.cpp @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/gestures/velocity_tracker.h" + +#include + +namespace OHOS::Ace { + +void VelocityTracker::UpdateTouchPoint(const TouchPoint& event) +{ + currentTrackPoint_ = event; + if (isFirstPoint_) { + firstTrackPoint_ = event; + lastPosition_ = event.GetOffset(); + lastTimePoint_ = event.time; + isFirstPoint_ = false; + return; + } + + delta_ = event.GetOffset() - lastPosition_; + + // nanoseconds duration to seconds. + const std::chrono::duration duration = event.time - lastTimePoint_; + if (!NearZero(duration.count())) { + velocity_.SetOffsetPerSecond(delta_ / duration.count()); + } + + lastPosition_ = event.GetOffset(); + lastTimePoint_ = event.time; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/gestures/velocity_tracker.h b/frameworks/core/gestures/velocity_tracker.h new file mode 100644 index 00000000..72e319e4 --- /dev/null +++ b/frameworks/core/gestures/velocity_tracker.h @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_GESTURES_VELOCITY_TRACKER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_GESTURES_VELOCITY_TRACKER_H + +#include "base/geometry/axis.h" +#include "base/geometry/offset.h" +#include "core/gestures/touch_event.h" +#include "core/gestures/velocity.h" + +namespace OHOS::Ace { + +class VelocityTracker final { +public: + VelocityTracker() = default; + explicit VelocityTracker(Axis mainAxis) : mainAxis_(mainAxis) {} + ~VelocityTracker() = default; + + void Reset() + { + lastPosition_.Reset(); + velocity_.Reset(); + delta_.Reset(); + isFirstPoint_ = true; + } + + void UpdateTouchPoint(const TouchPoint& event); + + const TouchPoint& GetFirstTrackPoint() const + { + return firstTrackPoint_; + } + + const TouchPoint& GetCurrentTrackPoint() const + { + return currentTrackPoint_; + } + + const Offset& GetPosition() const + { + return lastPosition_; + } + + const Offset& GetDelta() const + { + return delta_; + } + + const Velocity& GetVelocity() const + { + return velocity_; + } + + double GetMainAxisPos() const + { + switch (mainAxis_) { + case Axis::FREE: + return lastPosition_.GetDistance(); + case Axis::HORIZONTAL: + return lastPosition_.GetX(); + case Axis::VERTICAL: + return lastPosition_.GetY(); + default: + return 0.0; + } + } + + double GetMainAxisDeltaPos() const + { + switch (mainAxis_) { + case Axis::FREE: + return delta_.GetDistance(); + case Axis::HORIZONTAL: + return delta_.GetX(); + case Axis::VERTICAL: + return delta_.GetY(); + default: + return 0.0; + } + } + + double GetMainAxisVelocity() const + { + switch (mainAxis_) { + case Axis::FREE: + return velocity_.GetVelocityValue(); + case Axis::HORIZONTAL: + return velocity_.GetVelocityX(); + case Axis::VERTICAL: + return velocity_.GetVelocityY(); + default: + return 0.0; + } + } + +private: + Axis mainAxis_ { Axis::FREE }; + TouchPoint firstTrackPoint_; + TouchPoint currentTrackPoint_; + Offset lastPosition_; + Velocity velocity_; + Offset delta_; + bool isFirstPoint_ = true; + TimeStamp lastTimePoint_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_GESTURES_VELOCITY_TRACKER_H diff --git a/frameworks/core/image/animated_image_player.cpp b/frameworks/core/image/animated_image_player.cpp new file mode 100644 index 00000000..e03d12bf --- /dev/null +++ b/frameworks/core/image/animated_image_player.cpp @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/image/animated_image_player.h" + +#include "third_party/skia/include/codec/SkCodecAnimation.h" +#include "third_party/skia/include/core/SkPixelRef.h" + +#include "base/log/log.h" +#include "core/image/image_provider.h" + +namespace OHOS::Ace { + +void AnimatedImagePlayer::Pause() +{ + animator_->Pause(); +} + +void AnimatedImagePlayer::Resume() +{ + animator_->Resume(); +} + +void AnimatedImagePlayer::RenderFrame(const int32_t& index) +{ + auto context = context_.Upgrade(); + if (!context) { + LOGW("Context may be destroyed!"); + return; + } + ACE_DCHECK(context->GetTaskExecutor()); + context->GetTaskExecutor()->PostTask( + [weak = AceType::WeakClaim(this), weakProvider = imageProvider_, index] { + auto player = weak.Upgrade(); + if (!player) { + return; + } + auto canvasImage = flutter::CanvasImage::Create(); + sk_sp skImage = player->DecodeFrameImage(index); + if (skImage) { + canvasImage->set_image({ skImage, player->unrefQueue_ }); + } else { + LOGW("cannot get skImage!"); + return; + } + auto provider = weakProvider.Upgrade(); + if (provider) { + provider->OnGPUImageReady(canvasImage); + return; + } + LOGI("Image provider has been released."); + }, + TaskExecutor::TaskType::IO); +} + +sk_sp AnimatedImagePlayer::DecodeFrameImage(const int32_t& index) +{ + SkBitmap bitmap; + SkImageInfo info = codec_->getInfo().makeColorType(kN32_SkColorType); + bitmap.allocPixels(info); + SkCodec::Options options; + options.fFrameIndex = index; + const int32_t requiredFrame = frameInfos_[index].fRequiredFrame; + if (requiredFrame != SkCodec::kNoFrame) { + if (lastRequiredBitmap_ == nullptr) { + LOGE("no required frames are cached!"); + return nullptr; + } + if (lastRequiredBitmap_->getPixels() && + CopyTo(&bitmap, lastRequiredBitmap_->colorType(), *lastRequiredBitmap_)) { + options.fPriorFrame = requiredFrame; + } + } + if (SkCodec::kSuccess != codec_->getPixels(info, bitmap.getPixels(), bitmap.rowBytes(), &options)) { + LOGE("Could not getPixels for frame %{public}i:", index); + return nullptr; + } + if (frameInfos_[index].fDisposalMethod == SkCodecAnimation::DisposalMethod::kKeep) { + lastRequiredBitmap_ = std::make_unique(bitmap); + requiredFrameIndex_ = index; + } + return SkImage::MakeFromBitmap(bitmap); +} + +bool AnimatedImagePlayer::CopyTo(SkBitmap* dst, SkColorType dstColorType, const SkBitmap& src) +{ + SkPixmap srcPixmap; + if (!src.peekPixels(&srcPixmap)) { + return false; + } + SkBitmap tempDstBitmap; + SkImageInfo dstInfo = srcPixmap.info().makeColorType(dstColorType); + if (!tempDstBitmap.setInfo(dstInfo)) { + return false; + } + if (!tempDstBitmap.tryAllocPixels()) { + return false; + } + SkPixmap dstPixmap; + if (!tempDstBitmap.peekPixels(&dstPixmap)) { + return false; + } + if (!srcPixmap.readPixels(dstPixmap)) { + return false; + } + dst->swap(tempDstBitmap); + return true; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/image/animated_image_player.h b/frameworks/core/image/animated_image_player.h new file mode 100644 index 00000000..fd819f2a --- /dev/null +++ b/frameworks/core/image/animated_image_player.h @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_IMAGE_ANIMATED_IMAGE_PLAYER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_IMAGE_ANIMATED_IMAGE_PLAYER_H + +#include "flutter/fml/memory/ref_counted.h" +#include "flutter/lib/ui/painting/image.h" +#include "third_party/skia/include/codec/SkCodec.h" + +#include "base/memory/ace_type.h" +#include "core/animation/animator.h" +#include "core/animation/picture_animation.h" +#include "core/pipeline/pipeline_context.h" + +namespace OHOS::Ace { + +class ImageProvider; + +class AnimatedImagePlayer : public virtual AceType { + DECLARE_ACE_TYPE(AnimatedImagePlayer, AceType); + +public: + AnimatedImagePlayer(const WeakPtr& weakProvider, const WeakPtr& weakContext, + const fml::WeakPtr& ioManager, const fml::RefPtr& gpuQueue, + std::unique_ptr codec) + : imageProvider_(weakProvider), context_(weakContext), ioManager_(ioManager), unrefQueue_(gpuQueue), + codec_(std::move(codec)), frameCount_(codec_->getFrameCount()), + repetitionCount_(codec_->getRepetitionCount()), frameInfos_(codec_->getFrameInfo()) + { + auto provider = imageProvider_.Upgrade(); + auto context = context_.Upgrade(); + if (provider && context) { + animator_ = AceType::MakeRefPtr(context); + auto pictureAnimation = AceType::MakeRefPtr>(); + float totalFrameDuration = 0.0f; + for (int32_t index = 0; index < frameCount_; index++) { + totalFrameDuration += frameInfos_[index].fDuration; + } + for (int32_t index = 0; index < frameCount_; index++) { + pictureAnimation->AddPicture( + static_cast(frameInfos_[index].fDuration) / totalFrameDuration, index); + } + pictureAnimation->AddListener([weak = WeakClaim(this)](const int32_t& index) { + auto player = weak.Upgrade(); + if (player) { + player->RenderFrame(index); + } + }); + animator_->AddInterpolator(pictureAnimation); + animator_->SetDuration(totalFrameDuration); + animator_->SetIteration( + repetitionCount_ >= 0 ? repetitionCount_ + 1 : ANIMATION_REPEAT_INFINITE); + animator_->Play(); + } + } + + ~AnimatedImagePlayer() override = default; + + void Pause(); + void Resume(); + void RenderFrame(const int32_t& index); + +private: + sk_sp DecodeFrameImage(const int32_t& index); + static bool CopyTo(SkBitmap* dst, SkColorType dstColorType, const SkBitmap& src); + + WeakPtr imageProvider_; + WeakPtr context_; + fml::WeakPtr ioManager_; + fml::RefPtr unrefQueue_; + const std::unique_ptr codec_; + const int32_t frameCount_; + const int32_t repetitionCount_; + std::vector frameInfos_; + std::unique_ptr lastRequiredBitmap_; + int32_t requiredFrameIndex_ = -1; + RefPtr animator_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_IMAGE_ANIMATED_IMAGE_PLAYER_H diff --git a/frameworks/core/image/flutter_image_cache.cpp b/frameworks/core/image/flutter_image_cache.cpp new file mode 100644 index 00000000..510dc846 --- /dev/null +++ b/frameworks/core/image/flutter_image_cache.cpp @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/image/flutter_image_cache.h" + +namespace OHOS::Ace { + +RefPtr ImageCache::Create() +{ + return MakeRefPtr(); +} + +void FlutterImageCache::Clear() +{ + std::scoped_lock clearLock(cacheListMutex_, imageCacheMutex_); + cacheList_.clear(); + imageCache_.clear(); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/image/flutter_image_cache.h b/frameworks/core/image/flutter_image_cache.h new file mode 100644 index 00000000..cc93410d --- /dev/null +++ b/frameworks/core/image/flutter_image_cache.h @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_IMAGE_FLUTTER_IMAGE_CACHE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_IMAGE_FLUTTER_IMAGE_CACHE_H + +#include "flutter/fml/memory/ref_counted.h" +#include "flutter/lib/ui/painting/image.h" + +#include "core/image/image_cache.h" + +namespace OHOS::Ace { + +struct CachedImage { + CachedImage(const fml::RefPtr& image) : imagePtr(image) {} + fml::RefPtr imagePtr; +}; + +class FlutterImageCache : public ImageCache { + DECLARE_ACE_TYPE(FlutterImageCache, ImageCache); + +public: + void Clear() override; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_IMAGE_FLUTTER_IMAGE_CACHE_H diff --git a/frameworks/core/image/image_cache.cpp b/frameworks/core/image/image_cache.cpp new file mode 100644 index 00000000..8fe9e00f --- /dev/null +++ b/frameworks/core/image/image_cache.cpp @@ -0,0 +1,152 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/image/image_cache.h" + +#include +#include +#include + +namespace OHOS::Ace { + +std::mutex ImageCache::cacheFilePathMutex_; +std::string ImageCache::cacheFilePath_; + +std::atomic ImageCache::cacheFileLimit_ = 100 * 1024 * 1024; // the capacity is 100MB + +std::atomic ImageCache::clearCacheFileRatio_ = 0.5f; // default clear ratio is 0.5 + +bool ImageCache::hasSetCacheFileInfo_ = false; + +std::mutex ImageCache::cacheFileSizeMutex_; +int32_t ImageCache::cacheFileSize_ = 0; + +std::mutex ImageCache::cacheFileInfoMutex_; +std::list ImageCache::cacheFileInfo_; + +void ImageCache::CacheImage(const std::string& key, const std::shared_ptr& image) +{ + if (key.empty()) { + return; + } + std::scoped_lock lock(imageCacheMutex_, cacheListMutex_); + auto iter = imageCache_.find(key); + if (iter == imageCache_.end()) { + if (imageCache_.size() == capacity_) { + imageCache_.erase(cacheList_.back().imageKey); + cacheList_.pop_back(); + } + cacheList_.emplace_front(key, image); + imageCache_.emplace(key, cacheList_.begin()); + } else { + iter->second->imagePtr = image; + cacheList_.splice(cacheList_.begin(), cacheList_, iter->second); + iter->second = cacheList_.begin(); + } +} + +std::shared_ptr ImageCache::GetCacheImage(const std::string& key) +{ + std::scoped_lock lock(imageCacheMutex_, cacheListMutex_); + auto iter = imageCache_.find(key); + if (iter != imageCache_.end()) { + cacheList_.splice(cacheList_.begin(), cacheList_, iter->second); + iter->second = cacheList_.begin(); + return iter->second->imagePtr; + } else { + return nullptr; + } +} + +void ImageCache::WriteCacheFile(const std::string& url, std::vector& byteData) +{ + std::vector removeVector; + std::string cacheNetworkFilePath = GetNetworkImageCacheFilePath(url); + { + std::scoped_lock lock(cacheFileSizeMutex_, cacheFileInfoMutex_); + cacheFileSize_ += byteData.size(); + cacheFileInfo_.emplace_back(cacheNetworkFilePath, byteData.size(), time(nullptr)); + // check if cache files too big. + if (cacheFileSize_ > static_cast(cacheFileLimit_)) { + int32_t removeCount = cacheFileInfo_.size() * clearCacheFileRatio_; + int32_t removeSize = 0; + auto iter = cacheFileInfo_.begin(); + int32_t count = 0; + while (count < removeCount) { + removeSize += iter->fileSize; + removeVector.push_back(iter->filePath); + iter++; + count++; + } + cacheFileInfo_.erase(cacheFileInfo_.begin(), iter); + cacheFileSize_ -= removeSize; + } + } + ClearCacheFile(removeVector); + +#ifdef WINDOWS_PLATFORM + std::ofstream outFile(cacheNetworkFilePath, std::ios::binary); +#else + std::ofstream outFile(cacheNetworkFilePath, std::fstream::out); +#endif + outFile.write(reinterpret_cast(byteData.data()), byteData.size()); +} + +void ImageCache::ClearCacheFile(const std::vector& removeFiles) +{ + LOGD("begin to clear %{public}zu files: ", removeFiles.size()); + for (auto iter : removeFiles) { + if (remove(iter.c_str()) != 0) { + LOGW("remove file %{private}s failed.", iter.c_str()); + continue; + } + } +} + +void ImageCache::SetCacheFileInfo() +{ + std::scoped_lock lock(cacheFileSizeMutex_, cacheFileInfoMutex_); + // Set cache file information only once. + if (hasSetCacheFileInfo_) { + return; + } + std::string cacheFilePath = GetImageCacheFilePath(); + std::unique_ptr dir(opendir(cacheFilePath.c_str()), closedir); + if (dir == nullptr) { + LOGW("cache file path wrong! maybe it is not set."); + return; + } + int32_t cacheFileSize = 0; + dirent* filePtr = readdir(dir.get()); + while (filePtr != nullptr) { + // skip . or .. + if (filePtr->d_name[0] != '.') { + std::string filePath = cacheFilePath + "/" + std::string(filePtr->d_name); + struct stat fileStatus; + if (stat(filePath.c_str(), &fileStatus) == -1) { + filePtr = readdir(dir.get()); + continue; + } + cacheFileInfo_.emplace_back(filePath, fileStatus.st_size, fileStatus.st_atime); + cacheFileSize += static_cast(fileStatus.st_size); + } + filePtr = readdir(dir.get()); + } + cacheFileInfo_.sort(); + cacheFileSize_ = cacheFileSize; + hasSetCacheFileInfo_ = true; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/image/image_cache.h b/frameworks/core/image/image_cache.h new file mode 100644 index 00000000..99cf642b --- /dev/null +++ b/frameworks/core/image/image_cache.h @@ -0,0 +1,181 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_IMAGE_IMAGE_CACHE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_IMAGE_IMAGE_CACHE_H + +#include +#include +#include +#include +#include + +#include "base/log/log.h" +#include "base/memory/ace_type.h" +#include "base/utils/macros.h" + +namespace OHOS::Ace { + +struct CachedImage; + +struct CacheNode { + CacheNode(const std::string& key, const std::shared_ptr& image) + : imageKey(key), imagePtr(image) + {} + std::string imageKey; + std::shared_ptr imagePtr; +}; + +struct FileInfo { + FileInfo(const std::string& path, size_t size, time_t time) + : filePath(path), fileSize(size), accessTime(time) + {} + + // file information will be sort by access time. + bool operator<(const FileInfo& otherFile) const + { + return accessTime < otherFile.accessTime; + } + std::string filePath; + size_t fileSize; + time_t accessTime; +}; + +class ACE_EXPORT ImageCache : public AceType { + DECLARE_ACE_TYPE(ImageCache, AceType); + +public: + static RefPtr Create(); + ImageCache() = default; + ~ImageCache() = default; + void CacheImage(const std::string& key, const std::shared_ptr& image); + std::shared_ptr GetCacheImage(const std::string& key); + static void SetCacheFileInfo(); + static void WriteCacheFile(const std::string& url, std::vector& byteData); + + void RemoveCachedImage(const std::string& key) + { + std::scoped_lock lock(imageCacheMutex_, cacheListMutex_); + cacheList_.remove_if([&key](const CacheNode& cacheNode) { return cacheNode.imageKey == key; }); + imageCache_.erase(key); + } + + void SetCapacity(size_t capacity) + { + capacity_ = capacity; + } + + size_t GetCapacity() const + { + return capacity_; + } + + size_t GetCachedImageCount() const + { + std::lock_guard lock(cacheListMutex_); + return cacheList_.size(); + } + + static void SetImageCacheFilePath(const std::string& cacheFilePath) + { + std::lock_guard lock(cacheFilePathMutex_); + if (cacheFilePath_.empty()) { + cacheFilePath_ = cacheFilePath; + } + } + + static std::string GetImageCacheFilePath() + { + std::lock_guard lock(cacheFilePathMutex_); + return cacheFilePath_; + } + + static std::string GetNetworkImageCacheFilePath(const std::string& url) + { + std::lock_guard lock(cacheFilePathMutex_); +#if !defined(WINDOWS_PLATFORM) && !defined(MAC_PLATFORM) + return cacheFilePath_ + "/" + std::to_string(std::hash {}(url)); +#elif defined(MAC_PLATFORM) + return "/tmp/" + std::to_string(std::hash {}(url)); +#elif defined(WINDOWS_PLATFORM) + char *pathvar; + pathvar = getenv("TEMP"); + if (!pathvar) { + return std::string("C:\\Windows\\Temp") + "\\" + std::to_string(std::hash {}(url)); + } + return std::string(pathvar) + "\\" + std::to_string(std::hash {}(url)); +#endif + } + + static void SetCacheFileLimit(size_t cacheFileLimit) + { + cacheFileLimit_ = cacheFileLimit; + } + + static void SetClearCacheFileRatio(float clearRatio) + { + // clearRatio must in (0, 1]. + if (clearRatio < 0) { + clearRatio = 0.1f; + } else if (clearRatio > 1) { + clearRatio = 1.0f; + } + clearCacheFileRatio_ = clearRatio; + } + + static bool GetFromCacheFile(const std::string& filePath) + { + std::lock_guard lock(cacheFileInfoMutex_); + std::list::iterator iter = std::find_if(cacheFileInfo_.begin(), cacheFileInfo_.end(), + [&filePath](const FileInfo& fileInfo) { return fileInfo.filePath == filePath; }); + if (iter == cacheFileInfo_.end()) { + return false; + } + iter->accessTime = time(nullptr); + cacheFileInfo_.splice(cacheFileInfo_.end(), cacheFileInfo_, iter); + return true; + } + + virtual void Clear() = 0; + +protected: + static void ClearCacheFile(const std::vector& removeFiles); + + mutable std::mutex cacheListMutex_; + std::list cacheList_; + + std::mutex imageCacheMutex_; + std::unordered_map::iterator> imageCache_; + + std::atomic capacity_ = 80; // by default memory cache can store 80 images. + + static std::mutex cacheFilePathMutex_; + static std::string cacheFilePath_; + + static std::atomic cacheFileLimit_; + + static std::atomic clearCacheFileRatio_; + + static std::mutex cacheFileSizeMutex_; + static int32_t cacheFileSize_; + + static std::mutex cacheFileInfoMutex_; + static std::list cacheFileInfo_; + static bool hasSetCacheFileInfo_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_IMAGE_IMAGE_CACHE_H diff --git a/frameworks/core/image/image_provider.cpp b/frameworks/core/image/image_provider.cpp new file mode 100644 index 00000000..74671815 --- /dev/null +++ b/frameworks/core/image/image_provider.cpp @@ -0,0 +1,739 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/image/image_provider.h" + +#include + +#include "third_party/skia/include/core/SkStream.h" +#include "third_party/skia/include/utils/SkBase64.h" + +#include "base/network/download_manager.h" +#include "base/thread/background_task_executor.h" +#include "base/utils/string_utils.h" +#include "core/common/ace_engine.h" +#include "core/event/ace_event_helper.h" +#include "core/image/flutter_image_cache.h" + +namespace OHOS::Ace { +namespace { + +constexpr size_t FILE_HEAD_LENGTH = 7; // 7 is the size of "file://" +constexpr size_t MEMORY_HEAD_LENGTH = 9; // 9 is the size of "memory://" +constexpr size_t INTERNAL_FILE_HEAD_LENGTH = 15; // 15 is the size of "internal://app/" + +#ifdef WINDOWS_PLATFORM +char* realpath(const char* path, char* resolved_path) +{ + if (strcpy_s(resolved_path, PATH_MAX, path) != 0) { + return nullptr; + } + return resolved_path; +} +#endif + +} // namespace + +std::mutex ImageProvider::loadingImageMutex_; +std::unordered_map> ImageProvider::loadingImage_; + +bool ImageProvider::TrySetLoadingImage( + const std::string& key, + const WeakPtr& provider) +{ + std::lock_guard lock(loadingImageMutex_); + if (key.empty()) { + return false; + } + auto result = loadingImage_.emplace(key, provider); + if (result.second) { + return true; + } + auto loadingProvider = loadingImage_[key].Upgrade(); + auto nowProvider = provider.Upgrade(); + if (loadingProvider && nowProvider) { + if (loadingProvider == nowProvider) { + return false; + } + LOGD("send listeners to some other provider callback"); + std::scoped_lock listenersLock(nowProvider->listenersMutex_, loadingProvider->listenersMutex_); + for (auto iter = nowProvider->listeners_.begin(); iter != nowProvider->listeners_.end(); iter++) { + auto listener = iter->Upgrade(); + if (listener) { + loadingProvider->listeners_.insert(listener); + listener->OnChangeProvider(loadingProvider); + } + } + } + return false; +} + +void ImageProvider::RemoveLoadingImage(const std::string& key) +{ + std::lock_guard lock(loadingImageMutex_); + loadingImage_.erase(key); +} + +RefPtr ImageProvider::Create(const std::string& uri, RefPtr sharedImageManager) +{ + SrcType srcType = ResolveURI(uri); + switch (srcType) { + case SrcType::INTERNAL: + case SrcType::FILE: { + LOGD("File Image!"); + return MakeRefPtr(); + } + case SrcType::NETWORK: { + LOGD("Network Image!"); + return MakeRefPtr(); + } + case SrcType::ASSET: { + LOGD("Asset Image!"); + return MakeRefPtr(); + } + case SrcType::BASE64: { + LOGD("Base64 Image!"); + return MakeRefPtr(); + } + case SrcType::MEMORY: { + LOGD("Memory Image!"); + if (!sharedImageManager) { + LOGE("sharedImageManager is null, uri: %{private}s", uri.c_str()); + return nullptr; + } + // check whether the current picName is waiting to be read from shared memory, if found, + // add to [ProviderMapToReload], and return [memoryImageProvider], waiting for call to load data + // when image data done added to [SharedImageMap]. + RefPtr memoryImageProvider = MakeRefPtr(); + RefPtr imageLoader = AceType::DynamicCast(memoryImageProvider); + auto nameOfSharedImage = RemovePathHead(uri); + if (sharedImageManager->AddProviderToReloadMap(nameOfSharedImage, imageLoader)) { + return memoryImageProvider; + } + // this is when current picName is not found in [ProviderMapToReload], indicating that image data of this + // image may have been written to [SharedImageMap], so return the [MemoryImageProvider] and start loading + if (sharedImageManager->FindImageInSharedImageMap(nameOfSharedImage, imageLoader)) { + return memoryImageProvider; + } + LOGE("memory image not found in SharedImageMap!, uri is %{private}s", uri.c_str()); + return nullptr; + } + default: { + LOGE("Image source type not supported!"); + return nullptr; + } + } +} + +SrcType ImageProvider::ResolveURI(const std::string& uri) +{ + if (uri.empty()) { + return SrcType::OTHER; + } + auto iter = uri.find_first_of(':'); + if (iter == std::string::npos) { + return SrcType::ASSET; + } + std::string head = uri.substr(0, iter); + std::transform(head.begin(), head.end(), head.begin(), [](unsigned char c) { return std::tolower(c); }); + if (head == "http" or head == "https") { + return SrcType::NETWORK; + } else if (head == "file") { + return SrcType::FILE; + } else if (head == "internal") { + return SrcType::INTERNAL; + } else if (head == "data") { + static constexpr char BASE64_PATTERN[] = "^data:image/(jpeg|jpg|png|ico|gif|bmp|webp);base64$"; + if (IsValidBase64Head(uri, BASE64_PATTERN)) { + return SrcType::BASE64; + } + return SrcType::OTHER; + } else if (head == "memory") { + return SrcType::MEMORY; + } else { + return SrcType::OTHER; + } +} + +bool ImageProvider::IsValidBase64Head(const std::string& uri, const std::string& pattern) +{ + auto iter = uri.find_first_of(','); + if (iter == std::string::npos) { + LOGE("wrong base64 head format."); + return false; + } + std::string base64Head = uri.substr(0, iter); + std::regex regular(pattern); + return std::regex_match(base64Head, regular); +} + +std::string ImageProvider::RemovePathHead(const std::string& uri) +{ + auto iter = uri.find_first_of(':'); + if (iter == std::string::npos) { + LOGE("No scheme, not a File or Memory path!"); + return std::string(); + } + std::string head = uri.substr(0, iter); + if ((head == "file" && uri.size() > FILE_HEAD_LENGTH) || (head == "memory" && uri.size() > MEMORY_HEAD_LENGTH) || + (head == "internal" && uri.size() > INTERNAL_FILE_HEAD_LENGTH)) { + // the file uri format is like "file:///data/data...", + // the memory uri format is like "memory://imagename.png" for example, + // iter + 3 to get the absolutely file path substring : "/data/data..." or the image name: "imagename.png" + return uri.substr(iter + 3); + } + LOGE("Wrong scheme, not a File!"); + return std::string(); +} + +// if do not override, return null string. +std::string ImageProvider::GenerateKey(const std::string& src, Size targetSize) const +{ + return std::string(); +} + +void ImageProvider::LoadImage( + const RefPtr& piplineContext, + const std::string& src, + Size imageSize) +{ + // set image uri now loading! + loadingUri_ = src; + BackgroundTaskExecutor::GetInstance().PostTask( + [src, weak = AceType::WeakClaim(this), piplineContext, imageSize] { + auto provider = weak.Upgrade(); + if (!provider) { + return; + } + // 1. if some other thread has loading the same url, get it from cache. + fml::RefPtr cachedFlutterImage; + auto imageCache = piplineContext->GetImageCache(); + if (imageCache) { + auto cachedImage = imageCache->GetCacheImage(provider->GenerateKey(src, imageSize)); + if (cachedImage) { + cachedFlutterImage = cachedImage->imagePtr; + } + } + if (cachedFlutterImage) { + LOGD("find the image in cache successful."); + provider->OnGPUImageReady(cachedFlutterImage); + if (provider->imageSkData_) { + provider->imageSkData_ = nullptr; + } + return; + } else { + // 2. load from real src. + provider->LoadFromRealSrc(src, imageSize, piplineContext); + return; + } + }); +} + +void ImageProvider::GetSVGImageDOMAsync( + const std::string& src, + std::function&)> successCallback, + std::function failedCallback, + RefPtr& taskExecutor, + const RefPtr assetManager, + uint64_t svgThemeColor) +{ + BackgroundTaskExecutor::GetInstance().PostTask( + [src, provider = Claim(this), taskExecutor, assetManager, successCallback, failedCallback, svgThemeColor] { + auto imageData = provider->LoadImageData(src, assetManager); + if (imageData) { + const auto svgStream = std::make_unique(std::move(imageData)); + if (svgStream) { + auto skiaDom = SkSVGDOM::MakeFromStream(*svgStream, svgThemeColor); + if (skiaDom) { + taskExecutor->PostTask( + [successCallback, skiaDom] { successCallback(skiaDom); }, TaskExecutor::TaskType::UI); + return; + } + } + } + LOGE("imageData is null! image source is %{private}s", src.c_str()); + taskExecutor->PostTask([failedCallback] { failedCallback(); }, TaskExecutor::TaskType::UI); + }); +} + +void ImageProvider::GetImageSize(bool syncMode, const RefPtr assetManager, const std::string& src) +{ + // set image uri now loading! + loadingUri_ = src; + auto task = [src, provider = Claim(this), syncMode, assetManager] { + provider->imageSkData_ = provider->LoadImageData(src, assetManager); + if (!provider->imageSkData_) { + LOGE("GetImageSize call, fetch data failed, src: %{private}s", src.c_str()); + provider->OnImageFailed(); + return; + } + auto codec = provider->GetCodec(provider->imageSkData_); + if (codec) { + provider->totalFrames_ = codec->getFrameCount(); + Size imageSize(codec->dimensions().fWidth, codec->dimensions().fHeight); + provider->OnImageSizeReady(imageSize, src, syncMode); + } else { + LOGE("decode image failed, src: %{private}s", src.c_str()); + provider->OnImageFailed(); + } + }; + + if (syncMode) { + task(); + } else { + BackgroundTaskExecutor::GetInstance().PostTask(task); + } +} + +void ImageProvider::LoadFromRealSrc( + const std::string& src, + Size imageSize, + const RefPtr& piplineContext) +{ + if (!imageSkData_) { + auto assertManager = piplineContext->GetAssetManager(); + imageSkData_ = LoadImageData(src, assertManager); + if (!imageSkData_) { + LOGE("LoadFromRealSrc call, fetch data failed, src: %{private}s", src.c_str()); + ImageProvider::RemoveLoadingImage(GenerateKey(src, imageSize)); + OnImageFailed(); + return; + } + } + ConstructCanvasImageForRender(GenerateKey(src, imageSize), imageSkData_, imageSize); + imageSkData_ = nullptr; +} + +std::unique_ptr ImageProvider::GetCodec(const sk_sp& data) +{ + return SkCodec::MakeFromData(data); +} + +void ImageProvider::ConstructCanvasImageForRender( + const std::string& key, + const sk_sp& data, + Size imageSize) +{ + auto codec = GetCodec(data); + if (!codec) { + LOGE("Decode the image failed! Missing codec."); + ImageProvider::RemoveLoadingImage(key); + OnImageFailed(); + return; + } + totalFrames_ = codec->getFrameCount(); + if (totalFrames_ > 1) { + LOGD("Animate image! Frame count: %{public}d", totalFrames_); + ImageProvider::RemoveLoadingImage(key); + OnAnimateImageReady(std::move(codec)); + } else { + LOGD("Static image! Frame count: %{public}d", totalFrames_); + ConstructSingleCanvasImage(key, data, imageSize); + } +} + +void ImageProvider::ConstructSingleCanvasImage( + const std::string& key, + const sk_sp& data, + Size imageSize) +{ + auto rawImage = SkImage::MakeFromEncoded(data); + if (!rawImage) { + LOGE("MakeFromEncoded fail! uri is %{private}s", loadingUri_.c_str()); + ImageProvider::RemoveLoadingImage(key); + OnImageFailed(); + return; + } + auto image = ResizeSkImage(rawImage, imageSize); + OnImageReady(image, key); +} + +sk_sp ImageProvider::ResizeSkImage(const sk_sp& rawImage, Size imageSize) +{ + if (!imageSize.IsValid()) { + LOGE("not valid size!, imageSize: %{private}s", imageSize.ToString().c_str()); + return rawImage; + } + int32_t dstWidth = static_cast(imageSize.Width() + 0.5); + int32_t dstHeight = static_cast(imageSize.Height() + 0.5); + + bool needResize = false; + if (rawImage->width() > dstWidth) { + needResize = true; + } else { + dstWidth = rawImage->width(); + } + if (rawImage->height() > dstHeight) { + needResize = true; + } else { + dstHeight = rawImage->height(); + } + + if (needResize) { + const auto scaledImageInfo = + SkImageInfo::Make(dstWidth, dstHeight, rawImage->colorType(), rawImage->alphaType()); + SkBitmap scaledBitmap; + if (!scaledBitmap.tryAllocPixels(scaledImageInfo)) { + LOGE("Could not allocate bitmap when attempting to scale."); + return rawImage; + } + if (!rawImage->scalePixels(scaledBitmap.pixmap(), kLow_SkFilterQuality, SkImage::kDisallow_CachingHint)) { + LOGE("Could not scale pixels"); + return rawImage; + } + // Marking this as immutable makes the MakeFromBitmap call share the pixels instead of copying. + scaledBitmap.setImmutable(); + auto scaledImage = SkImage::MakeFromBitmap(scaledBitmap); + if (!scaledImage) { + LOGE("Could not create a scaled image from a scaled bitmap."); + return rawImage; + } + return scaledImage; + } else { + return rawImage; + } +} + +void ImageProvider::OnImageSizeReady( + Size rawImageSize, + const std::string& imageSrc, + bool syncMode) +{ + std::lock_guard lock(listenersMutex_); + for (const auto& weak : listeners_) { + auto listener = weak.Upgrade(); + if (listener) { + listener->OnLoadImageSize(rawImageSize, imageSrc, Claim(this), syncMode); + } + } +} + +void ImageProvider::OnImageReady(const sk_sp& image, const std::string& key) +{ + std::lock_guard lock(listenersMutex_); + for (const auto& weak : listeners_) { + auto listener = weak.Upgrade(); + if (listener) { + listener->OnLoadSuccess(image, Claim(this), key); + } + } +} + +void ImageProvider::OnGPUImageReady(const fml::RefPtr& image) +{ + std::lock_guard lock(listenersMutex_); + for (const auto& weak : listeners_) { + auto listener = weak.Upgrade(); + if (listener) { + listener->OnLoadGPUImageSuccess(image, Claim(this)); + } + } +} + +void ImageProvider::OnAnimateImageReady(std::unique_ptr codec) +{ + std::lock_guard lock(listenersMutex_); + for (const auto& weak : listeners_) { + auto listener = weak.Upgrade(); + if (listener) { + listener->OnAnimateImageSuccess(Claim(this), std::move(codec)); + } + } +} + +void ImageProvider::OnImageFailed() +{ + LOGE("Image Load Failed!"); + std::lock_guard lock(listenersMutex_); + for (const auto& weak : listeners_) { + auto listener = weak.Upgrade(); + if (listener) { + listener->OnLoadFail(Claim(this)); + } + } +} + +void ImageProvider::AddListener(const WeakPtr& listener) +{ + std::lock_guard lock(listenersMutex_); + listeners_.insert(listener); +} + +void ImageProvider::RemoveListener(const WeakPtr& listener) +{ + std::lock_guard lock(listenersMutex_); + listeners_.erase(listener); +} + +int32_t ImageProvider::GetTotalFrames() const +{ + return totalFrames_; +} + +sk_sp ImageProvider::GetSkImage( + const std::string& src, + const RefPtr assetManager, + Size targetSize) +{ + imageSkData_ = LoadImageData(src, assetManager); + if (!imageSkData_) { + LOGE("fetch data failed"); + return nullptr; + } + auto rawImage = SkImage::MakeFromEncoded(imageSkData_); + if (!rawImage) { + LOGE("MakeFromEncoded failed!"); + return nullptr; + } + auto image = ResizeSkImage(rawImage, targetSize); + return image; +} + +void RenderImageProvider::CanLoadImage( + const RefPtr& context, const std::string& src, const std::map& callbacks) +{ + if (callbacks.find("success") == callbacks.end() || callbacks.find("fail") == callbacks.end()) { + return; + } + auto onSuccess = AceAsyncEvent::Create(callbacks.at("success"), context); + auto onFail = AceAsyncEvent::Create(callbacks.at("fail"), context); + auto imageProvider = ImageProvider::Create(src, nullptr); + if (imageProvider) { + auto assetManager = context->GetAssetManager(); + BackgroundTaskExecutor::GetInstance().PostTask( + [src, imageProvider, onSuccess, onFail, assetManager]() { + auto image = imageProvider->GetSkImage(src, assetManager); + if (image) { + onSuccess(); + return; + } + onFail(); + }); + } +} + +std::string FileImageProvider::GenerateKey(const std::string& src, Size targetImageSize) const +{ + return std::string(src) + std::to_string(static_cast(targetImageSize.Width())) + + std::to_string(static_cast(targetImageSize.Height())); +} + +sk_sp FileImageProvider::LoadImageData(const std::string& src, const RefPtr assetManager) +{ + LOGD("File Image!"); + bool isInternal = (ResolveURI(src) == SrcType::INTERNAL); + std::string filePath = RemovePathHead(src); + if (isInternal) { + // the internal source uri format is like "internal://app/imagename.png", the absolute path of which is like + // "/data/data/{bundleName}/files/imagename.png" + auto bundleName = AceEngine::Get().GetPackageName(); + if (bundleName.empty()) { + LOGE("bundleName is empty, LoadImageData for internal source fail!"); + return nullptr; + } + if (!StringUtils::StartWith(filePath, "app/")) { // "app/" is infix of internal path + LOGE("internal path format is wrong. path is %{private}s", src.c_str()); + return nullptr; + } + filePath = std::string("/data/data/") // head of absolute path + .append(bundleName) + .append("/files/") // infix of absolute path + .append(filePath.substr(4)); // 4 is the length of "app/" from "internal://app/" + } + if (filePath.length() > PATH_MAX) { + LOGE("src path is too long"); + return nullptr; + } + char realPath[PATH_MAX] = { 0x00 }; + if (realpath(filePath.c_str(), realPath) == nullptr) { + LOGE("realpath fail! filePath: %{private}s, fail reason: %{public}s", filePath.c_str(), strerror(errno)); + return nullptr; + } + std::unique_ptr file(fopen(realPath, "rb"), fclose); + if (!file) { + LOGE("open file failed, filePath: %{private}s, fail reason: %{public}s", filePath.c_str(), strerror(errno)); + return nullptr; + } + return SkData::MakeFromFILE(file.get()); +} + +std::string AssetImageProvider::GenerateKey(const std::string& src, Size targetImageSize) const +{ + return std::string(src) + std::to_string(static_cast(targetImageSize.Width())) + + std::to_string(static_cast(targetImageSize.Height())); +} + +sk_sp AssetImageProvider::LoadImageData(const std::string& src, const RefPtr assetManager) +{ + if (src.empty()) { + return nullptr; + } + std::string assetSrc(src); + if (assetSrc[0] == '/') { + assetSrc = assetSrc.substr(1); // get the asset src without '/'. + } else if (assetSrc[0] == '.' && assetSrc.size() > 2 && assetSrc[1] == '/') { + assetSrc = assetSrc.substr(2); // get the asset src without './'. + } + auto assetData = assetManager->GetAsset(assetSrc); + if (!assetData) { + LOGE("No asset data!"); + return nullptr; + } + const uint8_t* data = assetData->GetData(); + const size_t dataSize = assetData->GetSize(); + return SkData::MakeWithCopy(data, dataSize); +} + +std::string NetworkImageProvider::GenerateKey(const std::string& src, Size targetImageSize) const +{ + return std::string(src) + std::to_string(static_cast(targetImageSize.Width())) + + std::to_string(static_cast(targetImageSize.Height())); +} + +sk_sp NetworkImageProvider::LoadImageData(const std::string& url, const RefPtr assetManager) +{ + // 1. find in cache file path. + LOGD("Network Image!"); + std::string cacheFilePath = ImageCache::GetNetworkImageCacheFilePath(url); + if (cacheFilePath.length() > PATH_MAX) { + LOGE("cache file path is too long"); + return nullptr; + } + bool cacheFileFound = ImageCache::GetFromCacheFile(cacheFilePath); + if (cacheFileFound) { + char realPath[PATH_MAX] = { 0x00 }; + if (realpath(cacheFilePath.c_str(), realPath) == nullptr) { + LOGE("realpath fail! cacheFilePath: %{private}s, fail reason: %{public}s", cacheFilePath.c_str(), + strerror(errno)); + return nullptr; + } + std::unique_ptr file(fopen(realPath, "rb"), fclose); + if (file) { + LOGD("find network image in file cache!"); + return SkData::MakeFromFILE(file.get()); + } + } + // 2. if not found. download it. + std::vector imageData; + if (!DownloadManager::GetInstance().Download(url, imageData) || imageData.empty()) { + LOGE("Download image %{private}s failed!", url.c_str()); + return nullptr; + } + // 3. write it into file cache. + ImageCache::WriteCacheFile(url, imageData); + return SkData::MakeWithCopy(imageData.data(), imageData.size()); +} + +sk_sp MemoryImageProvider::LoadImageData(const std::string& uri, const RefPtr assetManager) +{ + loadingUri_ = uri; + return skData_; +} + +void MemoryImageProvider::UpdateData(const std::string& uri, const std::vector& memData) +{ + if (memData.empty()) { + LOGE("image data is null, uri: %{private}s", uri.c_str()); + skData_ = nullptr; + return; + } + skData_ = SkData::MakeWithCopy(memData.data(), memData.size()); + + std::lock_guard lock(listenersMutex_); + for (const auto& weak : listeners_) { + auto listener = weak.Upgrade(); + if (listener) { + listener->MarkNeedReload(); + } + } + GetImageSize(false, nullptr, uri); +} + +std::string MemoryImageProvider::GenerateKey(const std::string& src, Size targetImageSize) const +{ + return std::string(src) + std::to_string(static_cast(targetImageSize.Width())) + + std::to_string(static_cast(targetImageSize.Height())); +} + +std::string InternalImageProvider::GenerateKey(const std::string& src, Size targetImageSize) const +{ + return std::string("InterResource") + std::to_string(static_cast(resourceId_)) + + std::to_string(static_cast(targetImageSize.Width())) + + std::to_string(static_cast(targetImageSize.Height())); +} + +sk_sp InternalImageProvider::LoadImageData(const std::string& uri, const RefPtr assetManager) +{ + size_t imageSize = 0; + const uint8_t* internalData = InternalResource::GetInstance().GetResource(resourceId_, imageSize); + if (internalData == nullptr) { + LOGE("data null, the resource id may be wrong."); + return nullptr; + } + return SkData::MakeWithCopy(internalData, imageSize); +} + +sk_sp Base64ImageProvider::LoadImageData(const std::string& url, const RefPtr assetManager) +{ + SkBase64 base64Decoder; + size_t imageSize = 0; + std::string base64Code = GetBase64ImageCode(url, imageSize); + SkBase64::Error error = base64Decoder.decode(base64Code.c_str(), base64Code.size()); + if (error != SkBase64::kNoError) { + LOGE("error base64 image code!"); + return nullptr; + } + auto base64Data = base64Decoder.getData(); + const uint8_t* imageData = reinterpret_cast(base64Data); + auto resData = SkData::MakeWithCopy(imageData, imageSize); + // in SkBase64, the fData is not deleted after decoded. + if (base64Data != nullptr) { + delete[] base64Data; + base64Data = nullptr; + } + return resData; +} + +std::string Base64ImageProvider::GetBase64ImageCode(const std::string& url, size_t& imageSize) +{ + auto iter = url.find_first_of(','); + if (iter == std::string::npos || iter == url.size() - 1) { + LOGE("wrong code format!"); + imageSize = 0; + return std::string(); + } + // iter + 1 to skip the "," + std::string code = url.substr(iter + 1); + imageSize = GetBase64ImageSize(code); + return code; +} + +size_t Base64ImageProvider::GetBase64ImageSize(const std::string& code) +{ + // use base64 code size to calculate image byte size. + auto iter = code.rbegin(); + int32_t count = 0; + // skip all '=' in the end. + while (*iter == '=') { + count++; + iter++; + } + // get the valid code length. + size_t codeSize = code.size() - count; + // compute the image byte size. + return codeSize - (codeSize / 8) * 2; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/image/image_provider.h b/frameworks/core/image/image_provider.h new file mode 100644 index 00000000..12cdc6fa --- /dev/null +++ b/frameworks/core/image/image_provider.h @@ -0,0 +1,208 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_IMAGE_IMAGE_PROVIDER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_IMAGE_IMAGE_PROVIDER_H + +#include + +#include "experimental/svg/model/SkSVGDOM.h" +#include "flutter/fml/memory/ref_counted.h" +#include "flutter/lib/ui/painting/image.h" +#include "third_party/skia/include/codec/SkCodec.h" + +#include "base/memory/ace_type.h" +#include "base/resource/internal_resource.h" +#include "core/components/common/layout/constants.h" +#include "core/image/render_image_provider.h" +#include "core/pipeline/pipeline_context.h" + +namespace OHOS::Ace { + +class ImageProvider; +class LoadImageCallback : public virtual Referenced { +public: + virtual void OnLoadSuccess( + const sk_sp& image, const RefPtr& imageProvider, const std::string& key) = 0; + virtual void OnLoadGPUImageSuccess( + const fml::RefPtr& image, const RefPtr& imageProvider) = 0; + virtual void OnAnimateImageSuccess( + const RefPtr& provider, std::unique_ptr codec) = 0; + virtual void OnLoadFail(const RefPtr& imageProvider) = 0; + virtual void OnChangeProvider(const RefPtr& provider) = 0; + virtual void OnLoadImageSize( + Size imagSize, const std::string& imageSrc, const RefPtr& imageProvider, bool syncMode) = 0; + virtual void MarkNeedReload() = 0; +}; + +class ImageProvider : public RenderImageProvider { + DECLARE_ACE_TYPE(ImageProvider, RenderImageProvider); + +public: + // Create function can be used for create File, Asset, Network image provider. + // the image from memory should be create by class MemoryImageProvider constructor, + // by passing a vector as image data source to it. + static RefPtr Create( + const std::string& uri, RefPtr sharedImageManager = nullptr); + ~ImageProvider() override = default; + + static SrcType ResolveURI(const std::string& uri); + static std::string RemovePathHead(const std::string& uri); + static bool IsValidBase64Head(const std::string& uri, const std::string& pattern); + static sk_sp ResizeSkImage(const sk_sp& rawImage, Size imageSize); + static void RemoveLoadingImage(const std::string& key); + + virtual std::string GenerateKey(const std::string& src, Size targetSize) const; + virtual sk_sp LoadImageData(const std::string& src, const RefPtr assetManager) = 0; + + void LoadImage( + const RefPtr& pipelineContext, + const std::string& src = std::string(), + Size imageSize = Size()); + + void GetSVGImageDOMAsync( + const std::string& src, + std::function&)> callback, + std::function failedCallback, + RefPtr& taskExecutor, + const RefPtr assetManager, + uint64_t svgThemeColor = 0); + + void GetImageSize(bool syncMode, const RefPtr assetManager, const std::string& src = std::string()); + void AddListener(const WeakPtr& listener); + void RemoveListener(const WeakPtr& listener); + int32_t GetTotalFrames() const; + void OnImageReady(const sk_sp& image, const std::string& key); + void OnGPUImageReady(const fml::RefPtr& image); + void OnAnimateImageReady(const std::unique_ptr codec); + void OnImageFailed(); + void OnImageSizeReady(Size rawImageSize, const std::string& imageSrc, bool syncMode); + + sk_sp GetSkImage( + const std::string& src, + const RefPtr assetManager, + Size targetSize = Size()); + +protected: + ImageProvider() = default; + + static std::unique_ptr GetCodec(const sk_sp& data); + + void LoadFromRealSrc( + const std::string& src, + Size imageSize, + const RefPtr& piplineContext); + + // construct canvas image for rendering. + void ConstructCanvasImageForRender( + const std::string& key, + const sk_sp& data, + Size imageSize); + + void ConstructSingleCanvasImage( + const std::string& key, + const sk_sp& data, + Size imageSize); + + // manager loading image using static unordered_map. + static bool TrySetLoadingImage(const std::string& key, const WeakPtr& provider); + + std::string loadingUri_; + + // total frame count of this animated image + int32_t totalFrames_ = 0; + + std::mutex listenersMutex_; + std::set> listeners_; + + static std::mutex loadingImageMutex_; + static std::unordered_map> loadingImage_; + + sk_sp imageSkData_; +}; + +// File image provider: read image from file. +class FileImageProvider final : public ImageProvider { +public: + FileImageProvider() = default; + ~FileImageProvider() override = default; + + std::string GenerateKey(const std::string& src, Size targetSize) const override; + sk_sp LoadImageData(const std::string& src, const RefPtr assetManager = nullptr) override; +}; + +class AssetImageProvider final : public ImageProvider { +public: + AssetImageProvider() = default; + ~AssetImageProvider() override = default; + + std::string GenerateKey(const std::string& src, Size targetSize) const override; + sk_sp LoadImageData(const std::string& src, const RefPtr assetManager = nullptr) override; +}; + +// Network image provider: read image from network. +class NetworkImageProvider final : public ImageProvider { +public: + NetworkImageProvider() = default; + ~NetworkImageProvider() override = default; + std::string GenerateKey(const std::string& url, Size targetSize) const override; + sk_sp LoadImageData(const std::string& url, const RefPtr assetManager = nullptr) override; +}; + +class ImageProviderLoader; +// this class is for load image data in memory. +// The memory data vector should not be released in the life circle of the image provider. +class MemoryImageProvider final : public ImageProvider, public ImageProviderLoader { + DECLARE_ACE_TYPE(MemoryImageProvider, ImageProvider, ImageProviderLoader) + +public: + MemoryImageProvider() = default; + ~MemoryImageProvider() override = default; + sk_sp LoadImageData(const std::string& url, const RefPtr assetManager = nullptr) override; + std::string GenerateKey(const std::string& url, Size targetSize) const override; + void UpdateData(const std::string& uri, const std::vector& memData) override; + +private: + sk_sp skData_; +}; + +class InternalImageProvider final : public ImageProvider { +public: + explicit InternalImageProvider(InternalResource::ResourceId resourceId) + : resourceId_(resourceId) + {} + ~InternalImageProvider() override = default; + + std::string GenerateKey(const std::string& src, Size targetSize) const override; + + sk_sp LoadImageData(const std::string& url, const RefPtr assetManager = nullptr) override; + +private: + InternalResource::ResourceId resourceId_; +}; + +class Base64ImageProvider final : public ImageProvider { +public: + Base64ImageProvider() = default; + ~Base64ImageProvider() override = default; + + static std::string GetBase64ImageCode(const std::string& url, size_t& imagSize); + static size_t GetBase64ImageSize(const std::string& code); + sk_sp LoadImageData(const std::string& url, const RefPtr assetManager = nullptr) override; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_IMAGE_IMAGE_PROVIDER_H diff --git a/frameworks/core/image/render_image_provider.h b/frameworks/core/image/render_image_provider.h new file mode 100644 index 00000000..53c2430f --- /dev/null +++ b/frameworks/core/image/render_image_provider.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_IMAGE_RENDER_IMAGE_PROVIDER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_IMAGE_RENDER_IMAGE_PROVIDER_H + +#include + +#include "base/memory/ace_type.h" +#include "core/event/ace_event_handler.h" + +namespace OHOS::Ace { + +class PipelineContext; + +class RenderImageProvider : public virtual AceType { + DECLARE_ACE_TYPE(RenderImageProvider, AceType); + +public: + static void CanLoadImage(const RefPtr& context, const std::string& src, + const std::map& callbacks); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_IMAGE_RENDER_IMAGE_PROVIDER_H diff --git a/frameworks/core/image/test/BUILD.gn b/frameworks/core/image/test/BUILD.gn new file mode 100644 index 00000000..21f60a9e --- /dev/null +++ b/frameworks/core/image/test/BUILD.gn @@ -0,0 +1,20 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") + +group("unittest") { + testonly = true + + deps = [ "unittest:unittest" ] +} diff --git a/frameworks/core/image/test/unittest/BUILD.gn b/frameworks/core/image/test/unittest/BUILD.gn new file mode 100644 index 00000000..88c23ea6 --- /dev/null +++ b/frameworks/core/image/test/unittest/BUILD.gn @@ -0,0 +1,171 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +if (is_standard_system) { + module_output_path = "ace_engine_standard/graphicalbasicability/image" +} + +ohos_unittest("ImageCacheTest") { + module_out_path = module_output_path + sources = [ + "$ace_root/frameworks/core/accessibility/accessibility_node.cpp", + "$ace_root/frameworks/core/common/ace_engine.cpp", + "$ace_root/frameworks/core/common/vibrator/vibrator_proxy.cpp", + "$ace_root/frameworks/core/common/watch_dog.cpp", + "$ace_root/frameworks/core/common/window.cpp", + "$ace_root/frameworks/core/components/bubble/bubble_element.cpp", + "$ace_root/frameworks/core/components/common/properties/color.cpp", + "$ace_root/frameworks/core/components/common/properties/scroll_bar.cpp", + "$ace_root/frameworks/core/components/display/display_component.cpp", + "$ace_root/frameworks/core/components/display/render_display.cpp", + "$ace_root/frameworks/core/components/page/page_element.cpp", + "$ace_root/frameworks/core/components/refresh/render_refresh.cpp", + "$ace_root/frameworks/core/components/scroll/render_multi_child_scroll.cpp", + "$ace_root/frameworks/core/components/scroll/render_scroll.cpp", + "$ace_root/frameworks/core/components/scroll/render_single_child_scroll.cpp", + "$ace_root/frameworks/core/components/scroll/scroll_bar_controller.cpp", + "$ace_root/frameworks/core/components/stack/render_stack.cpp", + "$ace_root/frameworks/core/components/stage/render_stage.cpp", + "$ace_root/frameworks/core/components/stage/stage_element.cpp", + "$ace_root/frameworks/core/components/test/json/json_frontend.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/mock_render_common.cpp", + "$ace_root/frameworks/core/event/back_end_event_manager.cpp", + "$ace_root/frameworks/core/event/multimodal/multimodal_manager.cpp", + "$ace_root/frameworks/core/event/multimodal/multimodal_scene.cpp", + "$ace_root/frameworks/core/focus/focus_node.cpp", + "$ace_root/frameworks/core/gestures/drag_recognizer.cpp", + "$ace_root/frameworks/core/image/flutter_image_cache.cpp", + "$ace_root/frameworks/core/image/image_cache.cpp", + "$ace_root/frameworks/core/image/image_provider.cpp", + "$ace_root/frameworks/core/pipeline/base/component_group_element.cpp", + "$ace_root/frameworks/core/pipeline/base/composed_component.cpp", + "$ace_root/frameworks/core/pipeline/base/composed_element.cpp", + "$ace_root/frameworks/core/pipeline/base/element.cpp", + "$ace_root/frameworks/core/pipeline/base/render_element.cpp", + "$ace_root/frameworks/core/pipeline/base/render_node.cpp", + "$ace_root/frameworks/core/pipeline/base/sole_child_element.cpp", + "$ace_root/frameworks/core/pipeline/pipeline_context.cpp", + "image_cache_test.cpp", + ] + + configs = [ + ":config_image_cache_test", + "$ace_root:ace_test_config", + "$flutter_root:flutter_config", + "$flutter_root:icu_config_ohos", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$flutter_root:ace_skia_ohos", + "$flutter_root:third_party_flutter_engine_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_image_cache_test") { + visibility = [ ":*" ] + include_dirs = [] +} + +ohos_unittest("ImageProviderTest") { + module_out_path = module_output_path + sources = [ + "$ace_root/adapter/preview/osal/download_manager.cpp", + "$ace_root/frameworks/core/common/ace_engine.cpp", + "$ace_root/frameworks/core/common/focus_animation_manager.cpp", + "$ace_root/frameworks/core/common/vibrator/vibrator_proxy.cpp", + "$ace_root/frameworks/core/common/watch_dog.cpp", + "$ace_root/frameworks/core/common/window.cpp", + "$ace_root/frameworks/core/components/bubble/bubble_element.cpp", + "$ace_root/frameworks/core/components/common/properties/color.cpp", + "$ace_root/frameworks/core/components/common/properties/scroll_bar.cpp", + "$ace_root/frameworks/core/components/display/display_component.cpp", + "$ace_root/frameworks/core/components/display/render_display.cpp", + "$ace_root/frameworks/core/components/focus_animation/render_focus_animation.cpp", + "$ace_root/frameworks/core/components/page/page_element.cpp", + "$ace_root/frameworks/core/components/refresh/render_refresh.cpp", + "$ace_root/frameworks/core/components/scroll/render_multi_child_scroll.cpp", + "$ace_root/frameworks/core/components/scroll/render_scroll.cpp", + "$ace_root/frameworks/core/components/scroll/render_single_child_scroll.cpp", + "$ace_root/frameworks/core/components/scroll/scroll_bar_controller.cpp", + "$ace_root/frameworks/core/components/stack/render_stack.cpp", + "$ace_root/frameworks/core/components/stage/render_stage.cpp", + "$ace_root/frameworks/core/components/stage/stage_element.cpp", + "$ace_root/frameworks/core/components/test/json/json_frontend.cpp", + "$ace_root/frameworks/core/components/test/unittest/image/image_test_utils.cpp", + "$ace_root/frameworks/core/event/back_end_event_manager.cpp", + "$ace_root/frameworks/core/event/multimodal/multimodal_manager.cpp", + "$ace_root/frameworks/core/event/multimodal/multimodal_scene.cpp", + "$ace_root/frameworks/core/focus/focus_node.cpp", + "$ace_root/frameworks/core/gestures/drag_recognizer.cpp", + "$ace_root/frameworks/core/image/flutter_image_cache.cpp", + "$ace_root/frameworks/core/image/image_cache.cpp", + "$ace_root/frameworks/core/image/image_provider.cpp", + "$ace_root/frameworks/core/pipeline/base/component_group_element.cpp", + "$ace_root/frameworks/core/pipeline/base/composed_component.cpp", + "$ace_root/frameworks/core/pipeline/base/composed_element.cpp", + "$ace_root/frameworks/core/pipeline/base/element.cpp", + "$ace_root/frameworks/core/pipeline/base/render_element.cpp", + "$ace_root/frameworks/core/pipeline/base/render_node.cpp", + "$ace_root/frameworks/core/pipeline/base/sole_child_element.cpp", + "$ace_root/frameworks/core/pipeline/pipeline_context.cpp", + "image_provider_test.cpp", + ] + + configs = [ + ":config_image_provider_test", + "$ace_root:ace_test_config", + "$flutter_root:flutter_config", + "$flutter_root:icu_config_ohos", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_ohos", + "$ace_root/frameworks/base/resource:ace_resource", + "$flutter_root:ace_skia_ohos", + "$flutter_root:third_party_flutter_engine_ohos", + "//third_party/googletest:gtest_main", + "//utils/native/base:utils", + ] + + if (is_standard_system) { + configs += [ "//third_party/curl:curl_config" ] + deps += [ "//third_party/curl:curl" ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +config("config_image_provider_test") { + visibility = [ ":*" ] + include_dirs = [] +} + +group("unittest") { + testonly = true + deps = [ + ":ImageCacheTest", + ":ImageProviderTest", + ] +} diff --git a/frameworks/core/image/test/unittest/image_cache_test.cpp b/frameworks/core/image/test/unittest/image_cache_test.cpp new file mode 100644 index 00000000..343c73d8 --- /dev/null +++ b/frameworks/core/image/test/unittest/image_cache_test.cpp @@ -0,0 +1,215 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/image/test/unittest/image_cache_test.h" + +#include "gtest/gtest.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { + +class ImageCacheTest : public testing::Test { +public: + static void SetUpTestCase() {} + static void TearDownTestCase() {} + void SetUp() {} + void TearDown() {} + + RefPtr imageCache = ImageCache::Create(); +}; + +/** + * @tc.name: MemoryCache001 + * @tc.desc: new image success insert into cache with LRU. + * @tc.type: FUNC + */ +HWTEST_F(ImageCacheTest, MemoryCache001, TestSize.Level1) +{ + /** + * @tc.steps: step1. cache images one by one. + * @tc.expected: new item should at begin of cacheList_ and imagCache has right iters. + */ + for (size_t i = 0; i < CACHE_FILES.size(); i++) { + imageCache->CacheImage(FILE_KEYS[i], std::make_shared(flutter::CanvasImage::Create())); + std::string frontKey = (imageCache->cacheList_).front().imageKey; + ASSERT_EQ(frontKey, FILE_KEYS[i]); + ASSERT_EQ(frontKey, imageCache->imageCache_[FILE_KEYS[i]]->imageKey); + } + + /** + * @tc.steps: step2. cache a image already in cache for example FILE_KEYS[3] e.t. "key4". + * @tc.expected: the cached item should at begin of cacheList_ and imagCache has right iters. + */ + imageCache->CacheImage(FILE_KEYS[3], std::make_shared(flutter::CanvasImage::Create())); + ASSERT_EQ(imageCache->cacheList_.front().imageKey, FILE_KEYS[3]); + ASSERT_EQ(imageCache->imageCache_[FILE_KEYS[3]]->imageKey, FILE_KEYS[3]); +} + +/** + * @tc.name: MemoryCache002 + * @tc.desc: get image success in cache with LRU. + * @tc.type: FUNC + */ +HWTEST_F(ImageCacheTest, MemoryCache002, TestSize.Level1) +{ + /** + * @tc.steps: step1. cache images one by one. + */ + for (size_t i = 0; i < CACHE_FILES.size(); i++) { + imageCache->CacheImage(FILE_KEYS[i], std::make_shared(flutter::CanvasImage::Create())); + std::string frontKey = (imageCache->cacheList_).front().imageKey; + } + /** + * @tc.steps: step2. find a image already in cache for example FILE_KEYS[2] e.t. "key3". + * @tc.expected: the cached iterator should not at end() of cacheList_ and imagCache. + * after GetImageCache(), the item should at begin() of cacheList_. + */ + auto iter = (imageCache->imageCache_).find(FILE_KEYS[2]); + ASSERT_NE(iter, imageCache->imageCache_.end()); + imageCache->GetCacheImage(FILE_KEYS[2]); + ASSERT_EQ(imageCache->cacheList_.front().imageKey, FILE_KEYS[2]); + ASSERT_EQ(imageCache->imageCache_[FILE_KEYS[2]]->imageKey, FILE_KEYS[2]); + + /** + * @tc.steps: step3. find a image not in cache for example "key8". + * @tc.expected: return null. + */ + auto image = imageCache->GetCacheImage("key8"); + ASSERT_EQ(image, nullptr); +} + +/** + * @tc.name: MemoryCache003 + * @tc.desc: Set memory cache capacity success. + * @tc.type: FUNC + */ +HWTEST_F(ImageCacheTest, MemoryCache003, TestSize.Level1) +{ + /** + * @tc.steps: step1.check default capaticy + */ + ASSERT_EQ(static_cast(imageCache->capacity_), 80); + + /** + * @tc.steps: step2. call set capacity. + * @tc.expected: capacity set to 1000. + */ + imageCache->SetCapacity(1000); + ASSERT_EQ(static_cast(imageCache->capacity_), 1000); +} + +/** + * @tc.name: FileCache001 + * @tc.desc: init cacheFilePath and cacheFileInfo success. + * @tc.type: FUNC + */ +HWTEST_F(ImageCacheTest, FileCache001, TestSize.Level1) +{ + /** + * @tc.steps: step1.call SetImageCacheFilePath(). + * @tc.expected: cache file size init right and cache file Info init right. + */ + ImageCache::SetImageCacheFilePath(CACHE_FILE_PATH); + ASSERT_EQ(ImageCache::cacheFilePath_, CACHE_FILE_PATH); + + /** + * @tc.steps: step2. call SetCacheFileInfo(). + * @tc.expected: file info init right. + */ + ImageCache::SetCacheFileInfo(); + ASSERT_EQ(ImageCache::cacheFileSize_, FILE_SIZE); + ASSERT_EQ(static_cast(ImageCache::cacheFileInfo_.size()), 5); + size_t i = 0; + auto iter = ImageCache::cacheFileInfo_.begin(); + while (i < TEST_COUNT - 1) { + ASSERT_LE(iter->accessTime, (++iter)->accessTime); + i++; + } +} + +/** + * @tc.name: FileCache002 + * @tc.desc: write data into cacheFilePath success. + * @tc.type: FUNC + */ +HWTEST_F(ImageCacheTest, FileCache002, TestSize.Level1) +{ + /** + * @tc.steps: step1.construct a data. + */ + std::vector imageData = { 1, 2, 3, 4, 5, 6 }; + std::string url = "http:/testfilecache002/image"; + + /** + * @tc.steps: step2. call WriteCacheFile(). + * @tc.expected: file write into filePath and file info update right. + */ + ImageCache::WriteCacheFile(url, imageData); + ASSERT_EQ(ImageCache::cacheFileSize_, static_cast(FILE_SIZE + imageData.size())); + ASSERT_EQ(ImageCache::cacheFileInfo_.size(), TEST_COUNT + 1); + auto iter = ImageCache::cacheFileInfo_.rbegin(); + + ASSERT_EQ(iter->filePath, ImageCache::GetNetworkImageCacheFilePath(url)); +} + +/** + * @tc.name: FileCache003 + * @tc.desc: Get data from cacheFilePath success with right url. but null with wrong url. + * @tc.type: FUNC + */ +HWTEST_F(ImageCacheTest, FileCache003, TestSize.Level1) +{ + /** + * @tc.steps: step1.set cacheFileLimit_ to 0. + */ + std::string wrongFilePath = "/data/wrong_data"; + /** + * @tc.steps: step2. call GetFromCacheFile(). + * @tc.expected:data != nullptr. + */ + auto data = ImageCache::GetFromCacheFile(CACHE_IMAGE_FILE_2); + ASSERT_TRUE(data); + auto nullData = ImageCache::GetFromCacheFile(wrongFilePath); + ASSERT_TRUE(!nullData); +} + +/** + * @tc.name: FileCache004 + * @tc.desc: clear files from cacheFilePath success while write file exceed limit. + * @tc.type: FUNC + */ +HWTEST_F(ImageCacheTest, FileCache004, TestSize.Level1) +{ + /** + * @tc.steps: step1.set cacheFileLimit_ to 0. + */ + ImageCache::SetCacheFileLimit(0); + ASSERT_EQ(static_cast(ImageCache::cacheFileLimit_), 0); + + /** + * @tc.steps: step2. call WriteCacheFile(). + * @tc.expected: file write into filePath and file info update right. + */ + std::vector imageData = { 1, 2, 3 }; + std::string url = "http:/testfilecache003/image"; + ImageCache::WriteCacheFile(url, imageData); + float ratio = ImageCache::clearCacheFileRatio_; + ASSERT_EQ(ImageCache::cacheFileInfo_.size(), static_cast((TEST_COUNT + 2) * ratio + 1)); + ASSERT_LE(ImageCache::cacheFileSize_, FILE_SIZE); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/image/test/unittest/image_cache_test.h b/frameworks/core/image/test/unittest/image_cache_test.h new file mode 100644 index 00000000..ab4e383b --- /dev/null +++ b/frameworks/core/image/test/unittest/image_cache_test.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_IMAGE_TEST_UNITTEST_IMAGE_CACHE_TEST_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_IMAGE_TEST_UNITTEST_IMAGE_CACHE_TEST_H + +#define private public +#define protected public +#include "core/image/flutter_image_cache.h" + +namespace OHOS::Ace { + +const int32_t FILE_SIZE = 15; +const std::string CACHE_FILE_PATH = "/data/test/resource/imagecache/images"; +const std::string CACHE_IMAGE_FILE_1 = "/data/test/resource/imagecache/images/748621363886323660"; +const std::string CACHE_IMAGE_FILE_2 = "/data/test/resource/imagecache/images/8819493328252140263"; +const std::string CACHE_IMAGE_FILE_3 = "/data/test/resource/imagecache/images/1008157312073340586"; +const std::string CACHE_IMAGE_FILE_4 = "/data/test/resource/imagecache/images/13610839755484614436"; +const std::string CACHE_IMAGE_FILE_5 = "/data/test/resource/imagecache/images/5841967474238710136"; +const std::vector CACHE_FILES = { CACHE_IMAGE_FILE_1, CACHE_IMAGE_FILE_2, CACHE_IMAGE_FILE_3, + CACHE_IMAGE_FILE_4, CACHE_IMAGE_FILE_5 }; +const size_t TEST_COUNT = CACHE_FILES.size(); + +const std::string KEY_1 = "key1"; +const std::string KEY_2 = "key2"; +const std::string KEY_3 = "key3"; +const std::string KEY_4 = "key4"; +const std::string KEY_5 = "key5"; +const std::vector FILE_KEYS = { KEY_1, KEY_2, KEY_3, KEY_4, KEY_5 }; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_IMAGE_TEST_UNITTEST_IMAGE_CACHE_TEST_H diff --git a/frameworks/core/image/test/unittest/image_provider_test.cpp b/frameworks/core/image/test/unittest/image_provider_test.cpp new file mode 100644 index 00000000..a321928f --- /dev/null +++ b/frameworks/core/image/test/unittest/image_provider_test.cpp @@ -0,0 +1,284 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gtest/gtest.h" + +#include "core/image/test/unittest/image_provider_test_utils.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { + +class ImageProviderTest : public testing::Test { +public: + static void SetUpTestCase() {} + static void TearDownTestCase() {} + void SetUp() override {} + void TearDown() override {} +}; + +/** + * @tc.name: GIFSupport001 + * @tc.desc: if gif uri is right, loadImageData can get and decode the data. + * @tc.type: FUNC + */ +HWTEST_F(ImageProviderTest, GIFSupport001, TestSize.Level1) +{ + /** + * @tc.steps: step1. create FileImageProvider. + */ + auto imageProvider = FileImageProvider(); + /** + * @tc.steps: step2. Call LoadImageData. + * @tc.expected: step2. data should not be nullptr. + */ + auto data = imageProvider.LoadImageData(FILE_GIF); + ASSERT_TRUE(data); + + /** + * @tc.steps: step3. Call GetCodec. + * @tc.expected: step3. codec_ should not be nullptr. + */ + auto codec = imageProvider.GetCodec(data); + ASSERT_TRUE(codec); +} + +/** + * @tc.name: GIFSupport002 + * @tc.desc: if gif uri is right, but the file is broken, cannot decode the data. + * @tc.type: FUNC + */ +HWTEST_F(ImageProviderTest, GIFSupport002, TestSize.Level1) +{ + /** + * @tc.steps: step1. create FileImageProvider. + */ + auto imageProvider = FileImageProvider(); + + /** + * @tc.steps: step2. Call LoadImageData. + * @tc.expected: step2. data should not be nullptr. + */ + auto data = imageProvider.LoadImageData(FILE_GIF_BROKEN); + ASSERT_TRUE(data); + + /** + * @tc.steps: step3. Call GetCodec. + * @tc.expected: step3. codec_ should be nullptr. + */ + auto codec = imageProvider.GetCodec(data); + ASSERT_TRUE(!codec); +} + +/** + * @tc.name: FileSupport001 + * @tc.desc: if file uri is right, test for loadImage can load and decode the image. + * @tc.type: FUNC + */ +HWTEST_F(ImageProviderTest, FileSupport001, TestSize.Level1) +{ + std::vector fileImages = { FILE_JPG, FILE_PNG, FILE_WEBP, FILE_BMP }; + for (auto file : fileImages) { + /** + * @tc.steps: step1. create FileImageProvider. + */ + auto imageProvider = FileImageProvider(); + + /** + * @tc.steps: step2. Call LoadImageData. + * @tc.expected: step2. data should not be nullptr. + */ + auto data = imageProvider.LoadImageData(file); + ASSERT_TRUE(data); + + /** + * @tc.steps: step3. Call GetCodec.. + * @tc.expected: step3. codec_ should not be nullptr. + */ + auto codec = imageProvider.GetCodec(data); + ASSERT_TRUE(codec); + } +} + +/** + * @tc.name: FileSupport002 + * @tc.desc: if file uri is wrong, loadImageData can not load the image. + * @tc.type: FUNC + */ +HWTEST_F(ImageProviderTest, FileSupport002, TestSize.Level1) +{ + /** + * @tc.steps: step1. create FileImageProvider. + */ + auto imageProvider = FileImageProvider(); + + /** + * @tc.steps: step2. Call LoadImageData. + * @tc.expected: step2. data should be nullptr. + */ + auto data = imageProvider.LoadImageData(NO_FILE); + ASSERT_TRUE(!data); +} + +/** + * @tc.name: MemorySupport001 + * @tc.desc: given right memory data, loadImageData can load and decode the image. + * @tc.type: FUNC + */ +HWTEST_F(ImageProviderTest, MemorySupport001, TestSize.Level1) +{ + std::vector fileImages = { FILE_JPG, FILE_PNG, FILE_WEBP, FILE_BMP }; + for (auto fileImage : fileImages) { + /** + * @tc.steps: step1. create MemoryImageProvider by reading right image file. + */ + std::string filePath = ImageProvider::RemovePathHead(fileImage); + std::unique_ptr file(fopen(filePath.c_str(), "rb"), fclose); + std::vector imageData = ReadFromFile(std::move(file)); + auto imageProvider = AceType::MakeRefPtr(); + imageProvider->UpdateData(std::string(), imageData); + + /** + * @tc.steps: step2. Call LoadImageData. + * @tc.expected: step2. data should not be nullptr. + */ + auto data = imageProvider->LoadImageData(std::string()); + ASSERT_TRUE(data); + + /** + * @tc.steps: step3. Call GetCodec. + * @tc.expected: step3. codec_ should not be nullptr. + */ + auto codec = imageProvider->GetCodec(data); + ASSERT_TRUE(codec); + } +} + +/** + * @tc.name: MemorySupport002 + * @tc.desc: given wrong memory data, loadImageData can not decode the image. + * @tc.type: FUNC + */ +HWTEST_F(ImageProviderTest, MemorySupport002, TestSize.Level1) +{ + /** + * @tc.steps: step1. create MemoryImageProvider by a wrong memory data. + */ + std::vector emptyData(100, 0); + auto imageProvider = AceType::MakeRefPtr(); + imageProvider->UpdateData(std::string(), emptyData); + + /** + * @tc.steps: step2. Call LoadImageData. + * @tc.expected: step2. data should not be nullptr. + */ + auto data = imageProvider->LoadImageData(std::string()); + ASSERT_TRUE(data); + + /** + * @tc.steps: step3. Call GetCodec. + * @tc.expected: step3. codec_ should be nullptr. + */ + auto codec = imageProvider->GetCodec(data); + ASSERT_TRUE(!codec); +} + +/** + * @tc.name: MemorySupport003 + * @tc.desc: given null memory data, loadImageData can not load the image. + * @tc.type: FUNC + */ +HWTEST_F(ImageProviderTest, MemorySupport003, TestSize.Level1) +{ + /** + * @tc.steps: step1. create MemoryImageProvider by a null memory data. + */ + std::vector emptyData; + auto imageProvider = AceType::MakeRefPtr(); + imageProvider->UpdateData(std::string(), emptyData); + + /** + * @tc.steps: step2. Call LoadImageData. + * @tc.expected: step2. data should be nullptr. + */ + auto data = imageProvider->LoadImageData(std::string()); + ASSERT_TRUE(!data); +} + +/** + * @tc.name: Create001 + * @tc.desc: given right uri, ImageProvider::Create can create an ImageProvider pointer. + * @tc.type: FUNC + */ +HWTEST_F(ImageProviderTest, Create001, TestSize.Level1) +{ + std::vector uris = { ASSET_IMAGE, FILE_GIF, NETWORK_HTTP_IMAGE, NETWORK_HTTPS_IMAGE }; + for (auto uri : uris) { + /** + * @tc.steps: step1. create ImageProvider by calling Create(). + * @tc.expected: step1. imageProvider should not be nullptr. + */ + auto imageProvider = ImageProvider::Create(uri); + ASSERT_TRUE(imageProvider); + } +} + +/** + * @tc.name: Create002 + * @tc.desc: given wrong uri, ImageProvider::Create cannot create an ImageProvider pointer. + * @tc.type: FUNC + */ +HWTEST_F(ImageProviderTest, Create002, TestSize.Level1) +{ + /** + * @tc.steps: step1. create ImageProvider by calling Create(). + * @tc.expected: step1. imageProvider should be nullptr. + */ + auto imageProvider = ImageProvider::Create(WRONG_URI); + ASSERT_TRUE(!imageProvider); +} + +/** + * @tc.name: WrongImageData001 + * @tc.desc: given right uri, but broken image. FileImageProvider cannot decode the data. + * @tc.type: FUNC + */ +HWTEST_F(ImageProviderTest, WrongImageData001, TestSize.Level1) +{ + std::vector brokenFiles = { FILE_JPG_BROKEN, FILE_PNG_BROKEN, FILE_WEBP_BROKEN, FILE_BMP_BROKEN }; + for (auto brokenFile : brokenFiles) { + /** + * @tc.steps: step1. create FileImageProvider. + */ + auto imageProvider = FileImageProvider(); + + /** + * @tc.steps: step2. Call LoadImageData. + * @tc.expected: step2. data should not be nullptr. + */ + auto data = imageProvider.LoadImageData(brokenFile); + ASSERT_TRUE(data); + + /** + * @tc.steps: step3. Call GetCodec. + * @tc.expected: step3. codec_ should be nullptr. + */ + auto codec = imageProvider.GetCodec(data); + ASSERT_TRUE(!codec); + } +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/image/test/unittest/image_provider_test_utils.h b/frameworks/core/image/test/unittest/image_provider_test_utils.h new file mode 100644 index 00000000..236ccc5b --- /dev/null +++ b/frameworks/core/image/test/unittest/image_provider_test_utils.h @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_IMAGE_TEST_UNITTEST_IMAGE_PROVIDER_TEST_UTILS_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_IMAGE_TEST_UNITTEST_IMAGE_PROVIDER_TEST_UTILS_H + +#include "core/components/test/unittest/image/image_test_utils.h" +#define protected public +#include "core/components/display/render_display.h" +#include "core/components/stack/render_stack.h" +#define private public +#include "core/image/image_provider.h" + +namespace OHOS::Ace { + +const std::string ASSET_IMAGE = "gifs/unbroken.gif"; + +const std::string FILE_GIF = "file:///data/test/resource/imageprovider/images/unbroken.gif"; +const std::string FILE_GIF_BROKEN = "file:///data/test/resource/imageprovider/images/broken.gif"; + +const std::string FILE_JPG = "file:///data/test/resource/imageprovider/images/unbroken.jpg"; +const std::string FILE_JPG_BROKEN = "file:///data/test/resource/imageprovider/images/broken.jpg"; + +const std::string FILE_PNG = "file:///data/test/resource/imageprovider/images/unbroken.png"; +const std::string FILE_PNG_BROKEN = "file:///data/test/resource/imageprovider/images/broken.png"; + +const std::string FILE_WEBP = "file:///data/test/resource/imageprovider/images/unbroken.webp"; +const std::string FILE_WEBP_BROKEN = "file:///data/test/resource/imageprovider/images/broken.webp"; + +const std::string FILE_BMP = "file:///data/test/resource/imageprovider/images/unbroken.bmp"; +const std::string FILE_BMP_BROKEN = "file:///data/test/resource/imageprovider/images/broken.bmp"; + +const std::string NO_FILE = "file:///nofile"; + +const std::string NETWORK_HTTP_IMAGE = "http://data/images/webps/image.xxx"; +const std::string NETWORK_HTTPS_IMAGE = "https://data/images/webps/image.xxx"; + +const std::string WRONG_URI = "files:///wrong uri"; + +size_t GetFileSize(FILE* file) +{ + fseek(file, 0, SEEK_END); + size_t readLen = ftell(file); + fseek(file, 0, SEEK_SET); + return readLen; +} + +std::vector ReadFromFile(std::unique_ptr file) +{ + std::vector result; + if (file == nullptr) { + return result; + } + size_t fileSize = GetFileSize(file.get()); + if (fileSize != 0) { + result.resize(fileSize); + size_t num = fread(&result[0], 1, fileSize, file.get()); + if (num > fileSize) { + GTEST_LOG_(INFO) << "file is becoming bigger!"; + return result; + } + if (num != fileSize) { + GTEST_LOG_(INFO) << "file is becoming smaller!"; + result.resize(num); + } + } + return result; +} + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_IMAGE_TEST_UNITTEST_IMAGE_PROVIDER_TEST_UTILS_H diff --git a/frameworks/core/mock/mock_ace_application_info.cpp b/frameworks/core/mock/mock_ace_application_info.cpp new file mode 100644 index 00000000..2922c4c2 --- /dev/null +++ b/frameworks/core/mock/mock_ace_application_info.cpp @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "frameworks/core/common/ace_application_info.h" + +namespace OHOS::Ace { + +class MockAceApplicationInfo : public AceApplicationInfo { + void SetLocale(const std::string& language, const std::string& countryOrRegion, const std::string& script, + const std::string& keywordsAndValues) override {}; + void ChangeLocale(const std::string& language, const std::string& countryOrRegion) override {}; + std::vector GetLocaleFallback(const std::vector& localeList) const override + { + std::vector vector; + return vector; + }; + std::vector GetResourceFallback(const std::vector& resourceList) const override + { + std::vector vector; + return vector; + }; + bool GetFiles(const std::string& filePath, std::vector& fileList) const override + { + return false; + }; + + bool GetBundleInfo(const std::string& packageName, AceBundleInfo& bundleInfo) override + { + return false; + }; + + double GetLifeTime() const override + { + return 0; + } + + std::string GetJsEngineParam(const std::string& key) const override + { + return ""; + } + + std::string GetCurrentDeviceResTag() const override + { + return ""; + } + +public: + static MockAceApplicationInfo& GetInstance() + { + static MockAceApplicationInfo instance; + return instance; + } + + void SetResourceManager(std::shared_ptr& resourceManager) override {} +}; + +AceApplicationInfo& AceApplicationInfo::GetInstance() +{ + return MockAceApplicationInfo::GetInstance(); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/mock/mock_resource_register.h b/frameworks/core/mock/mock_resource_register.h new file mode 100644 index 00000000..9d709e9c --- /dev/null +++ b/frameworks/core/mock/mock_resource_register.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_MOCK_MOCK_RESOURCE_REGISTER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_MOCK_MOCK_RESOURCE_REGISTER_H + +#include "core/common/platform_res_register.h" + +namespace OHOS::Ace { + +class MockResourceRegister final : public PlatformResRegister { +public: + MockResourceRegister() = default; + ~MockResourceRegister() override = default; + + int64_t CreateResource(const std::string& resourceType, const std::string& param) override + { + return -1; + } + + bool ReleaseResource(const std::string& resourceHash) override + { + return false; + } + + bool OnMethodCall(const std::string& method, const std::string& param, std::string& result) override + { + return false; + } +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_MOCK_MOCK_RESOURCE_REGISTER_H diff --git a/frameworks/core/mock/mock_system_properties.cpp b/frameworks/core/mock/mock_system_properties.cpp new file mode 100644 index 00000000..4e013452 --- /dev/null +++ b/frameworks/core/mock/mock_system_properties.cpp @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "base/utils/system_properties.h" + +namespace OHOS::Ace { + +float SystemProperties::GetFontWeightScale() +{ + // Default value of font weight scale is 1.0. + return 1.0; +} + +DeviceType SystemProperties::GetDeviceType() +{ + return DeviceType::PHONE; +} + +} \ No newline at end of file diff --git a/frameworks/core/mock/mock_watch_dog.cpp b/frameworks/core/mock/mock_watch_dog.cpp new file mode 100644 index 00000000..4be82053 --- /dev/null +++ b/frameworks/core/mock/mock_watch_dog.cpp @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/common/watch_dog.h" + +namespace OHOS::Ace { + +class ThreadWatcher : public Referenced {}; + +WatchDog::WatchDog() {} + +WatchDog::~WatchDog() {} + +void WatchDog::Register(int32_t instanceId, const RefPtr& taskExecutor) {} + +void WatchDog::Unregister(int32_t instanceId) {} + +} // namespace OHOS::Ace diff --git a/frameworks/core/pipeline/BUILD.gn b/frameworks/core/pipeline/BUILD.gn new file mode 100644 index 00000000..2aeaf48d --- /dev/null +++ b/frameworks/core/pipeline/BUILD.gn @@ -0,0 +1,104 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +# build core sources +template("ace_core_pipeline_source_set") { + # get is_ohos_platform + forward_variables_from(invoker, "*") + + source_set(target_name) { + defines += invoker.defines + + # add common source file needed by all product platform here + sources = [ + # context + "pipeline_context.cpp", + + # base component + "base/component.cpp", + "base/component_group_element.cpp", + "base/composed_component.cpp", + "base/composed_element.cpp", + "base/constants.cpp", + "base/element.cpp", + "base/flutter_render_context.cpp", + "base/related_node.cpp", + "base/render_element.cpp", + "base/render_node.cpp", + "base/sole_child_element.cpp", + + # factories + "base/factories/render_node_factory.cpp", + + # layer + "layers/clip_layer.cpp", + "layers/container_layer.cpp", + "layers/dropfilter_layer.cpp", + "layers/flutter_scene_builder.cpp", + "layers/gradient_layer.cpp", + "layers/layer.cpp", + "layers/offset_layer.cpp", + "layers/opacity_layer.cpp", + "layers/picture_layer.cpp", + "layers/texture_layer.cpp", + "layers/transform_layer.cpp", + ] + + configs += [ + "$ace_root:ace_config", + "$flutter_root:flutter_config", + "$flutter_root:icu_config_$platform", + ] + + deps = [ + "$ace_root/frameworks/base:ace_base_$platform", + "$flutter_root:ace_skia_$platform", + "$flutter_root:third_party_flutter_engine_$platform", + ] + + if (is_ohos_platform && enable_native_view) { + sources += [ "layers/ace_scene_builder.cpp" ] + deps += [ "$flutter_root/engine/flutter/flow/ohos_layers:flutter_ohos_layers_$platform" ] + } + + if (use_mingw_win) { + cflags_cc = [ "-std=c++17" ] + + defines += [ + "_USE_MATH_DEFINES", + "NOGDI", + ] + } + } +} + +ace_core_pipeline_source_set("ace_core_pipeline_ohos") { + defines = ace_ohos_defines + platform = "ohos" + is_ohos_platform = true +} + +ace_core_pipeline_source_set("ace_core_pipeline_windows") { + defines = ace_windows_defines + platform = "windows" + is_ohos_platform = false +} + +ace_core_pipeline_source_set("ace_core_pipeline_mac") { + defines = ace_mac_defines + platform = "mac" + is_ohos_platform = false +} diff --git a/frameworks/core/pipeline/LICENSE b/frameworks/core/pipeline/LICENSE new file mode 100644 index 00000000..be35d76d --- /dev/null +++ b/frameworks/core/pipeline/LICENSE @@ -0,0 +1,43 @@ +Copyright (c) 2021 Huawei Device Co., Ltd. +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +*************************************************************** +pipeline, it is derived from the following: +https://flutter.dev/ +version v1.9.1+hotfix.1 +*************************************************************** +Copyright 2014 The Chromium Authors. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/frameworks/core/pipeline/base/component.cpp b/frameworks/core/pipeline/base/component.cpp new file mode 100644 index 00000000..42c10a6c --- /dev/null +++ b/frameworks/core/pipeline/base/component.cpp @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/pipeline/base/component.h" + +namespace OHOS::Ace { +std::atomic Component::key_ = 1; + +Component::Component() +{ + SetRetakeId(key_++); +} + +void Component::SetRetakeId(int32_t retakeId) +{ + retakeId_ = retakeId; +} + +int32_t Component::GetRetakeId() const +{ + return retakeId_; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/pipeline/base/component.h b/frameworks/core/pipeline/base/component.h new file mode 100644 index 00000000..c9de28fe --- /dev/null +++ b/frameworks/core/pipeline/base/component.h @@ -0,0 +1,131 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_COMPONENT_H + +#include "base/memory/ace_type.h" +#include "core/components/common/layout/constants.h" + +namespace OHOS::Ace { + +class Element; +class ComposedElement; + +using ElementFunction = std::function; + +enum class UpdateType { + STYLE, + ATTR, + EVENT, + METHOD, + ALL, +}; + +// Component is a read-only structure, represent the basic information how to display it. +class ACE_EXPORT Component : public virtual AceType { + DECLARE_ACE_TYPE(Component, AceType); + +public: + Component(); + ~Component() override = default; + + virtual RefPtr CreateElement() = 0; + + TextDirection GetTextDirection() const + { + return direction_; + } + + virtual void SetTextDirection(TextDirection direction) + { + direction_ = direction; + } + + UpdateType GetUpdateType() const + { + return updateType_; + } + + virtual void SetUpdateType(UpdateType updateType) + { + updateType_ = updateType; + } + + void SetParent(const WeakPtr& parent) + { + parent_ = parent; + } + + const WeakPtr& GetParent() const + { + return parent_; + } + + bool IsDisabledStatus() const + { + return disabledStatus_; + } + virtual void SetDisabledStatus(bool disabledStatus) + { + disabledStatus_ = disabledStatus; + } + bool IsTouchable() const + { + return touchable_; + } + void SetTouchable(bool touchable) + { + touchable_ = touchable; + } + + void SetRetakeId(int32_t retakeId); + int32_t GetRetakeId() const; + + virtual bool HasElementFunction() + { + return false; + } + + virtual void SetElementFunction(ElementFunction&& func) {} + virtual void CallElementFunction(Element* element) {} + + bool IsStatic() + { + return static_; + } + + void SetStatic() + { + static_ = true; + } + +protected: + TextDirection direction_ = TextDirection::LTR; + +private: + UpdateType updateType_ = UpdateType::ALL; + WeakPtr parent_; + bool disabledStatus_ = false; + bool touchable_ = true; + static std::atomic key_; + // Set the id for the component to identify the unique component. + int32_t retakeId_ = 0; + bool static_ = false; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_COMPONENT_H diff --git a/frameworks/core/pipeline/base/component_group.h b/frameworks/core/pipeline/base/component_group.h new file mode 100644 index 00000000..b44c7e31 --- /dev/null +++ b/frameworks/core/pipeline/base/component_group.h @@ -0,0 +1,140 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_COMPONENT_GROUP_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_COMPONENT_GROUP_H + +#include + +#include "core/pipeline/base/component_group_element.h" +#include "core/pipeline/base/composed_component.h" +#include "core/pipeline/base/render_component.h" + +namespace OHOS::Ace { + +class ComponentGroup : public RenderComponent { + DECLARE_ACE_TYPE(ComponentGroup, RenderComponent); + +public: + ComponentGroup() = default; + explicit ComponentGroup(const std::list>& children) : children_(children) {} + ~ComponentGroup() override = default; + + RefPtr CreateElement() override + { + return AceType::MakeRefPtr(); + } + + const std::list>& GetChildren() const + { + return children_; + } + + void ClearChildren() + { + for (const auto& child : children_) { + child->SetParent(nullptr); + } + children_.clear(); + } + + virtual void InsertChild(int32_t position, const RefPtr& child) + { + if (!child) { + return; + } + child->SetParent(WeakClaim(this)); + auto insertIter = children_.begin(); + std::advance(insertIter, position); + children_.insert(insertIter, child); + } + + virtual void AppendChild(const RefPtr& child) + { + if (!child) { + return; + } + child->SetParent(WeakClaim(this)); + children_.emplace_back(child); + } + + virtual void RemoveChildDirectly(const RefPtr& child) + { + if (!child) { + return; + } + + child->SetParent(nullptr); + children_.pop_back(); + return; + } + + virtual void RemoveChild(const RefPtr& child) + { + if (!child) { + return; + } + auto composedChild = AceType::DynamicCast(child); + if (!composedChild) { + LOGW("get composed component failed"); + return; + } + auto composeId = composedChild->GetId(); + for (const auto& item : children_) { + auto compose = AceType::DynamicCast(item); + if (compose && composeId == compose->GetId()) { + child->SetParent(nullptr); + children_.remove(item); + return; + } + } + } + + void SetUpdateType(UpdateType updateType) override + { + Component::SetUpdateType(updateType); + for (const auto& child : children_) { + child->SetUpdateType(updateType); + } + } + + void SetDisabledStatus(bool disabledStatus) override + { + Component::SetDisabledStatus(disabledStatus); + for (const auto& child : children_) { + child->SetDisabledStatus(disabledStatus); + } + } + + void SetTextDirection(TextDirection direction) override + { + direction_ = direction; + for (const auto& child : children_) { + child->SetTextDirection(direction); + } + } + + void ReverseChildren() + { + children_.reverse(); + } + +private: + std::list> children_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_COMPONENT_GROUP_H diff --git a/frameworks/core/pipeline/base/component_group_element.cpp b/frameworks/core/pipeline/base/component_group_element.cpp new file mode 100644 index 00000000..edc78f40 --- /dev/null +++ b/frameworks/core/pipeline/base/component_group_element.cpp @@ -0,0 +1,523 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/pipeline/base/component_group_element.h" + +#include "base/log/log.h" +#include "base/utils/macros.h" +#include "base/utils/utils.h" +#include "core/common/frontend.h" +#include "core/pipeline/base/component_group.h" +#include "core/pipeline/base/composed_element.h" + +namespace OHOS::Ace { + +RefPtr ComponentGroupElement::Create() +{ + LOGD("ComponentGroupElement::Create"); + return AceType::MakeRefPtr(); +} + +bool ComponentGroupElement::IsComposed(const std::list>& newComponents) +{ + for (const auto& child : children_) { + if (!AceType::InstanceOf(child)) { + return false; + } + } + + for (const auto& newComponent : newComponents) { + if (!AceType::InstanceOf(newComponent)) { + return false; + } + } + return true; +} + +void ComponentGroupElement::PerformBuild() +{ + LOGD("start build %{public}s", GetTag()); + + RefPtr group = AceType::DynamicCast(component_); + if (!group) { + return; + } + + const auto& newComponents = group->GetChildren(); + + if (IsComposed(newComponents)) { + LOGD("Reconcilliation via composeted path for %{public}s", GetTag()); + UpdateComposedChildren(newComponents); + } else { + auto context = context_.Upgrade(); + if (context && context->GetIsDeclarative()) { + LOGD("Reconcilliation via optimized common path %{public}s", GetTag()); + UpdateCommonChildrenOptimized(newComponents); + } else { + LOGD("Reconcilliation via NON optimized common path %{public}s", GetTag()); + UpdateCommonChildren(newComponents); + } + } + LOGD("end build %{public}s", GetTag()); +} + +std::list> ComponentGroupElement::UpdateCommonChildren( + const std::list>& newComponents) +{ + LOGD("ComponentGroupElement::UpdateCommonChildren start"); + const auto& oldChildren = children_; + auto componentIter = newComponents.begin(); + auto childIter = oldChildren.begin(); + while (childIter != oldChildren.end() && componentIter != newComponents.end()) { + if ((*childIter)->NeedUpdateWithComponent(*componentIter)) { + if ((*childIter)->CanUpdate(*componentIter)) { + UpdateChild(*childIter, *componentIter); + } else { + break; + } + } + ++childIter; + ++componentIter; + } + + // children_ will be modified during UpdateChild.(some items will be removed from children_) + while (childIter != oldChildren.end()) { + auto child = *childIter; + ++childIter; + UpdateChild(child, nullptr); + } + + while (componentIter != newComponents.end()) { + UpdateChild(nullptr, *componentIter); + ++componentIter; + } + + LOGD("ComponentGroupElement::UpdateCommonChildren end"); + return oldChildren; +} + +void ComponentGroupElement::UpdateCommonChildrenOptimized(const std::list>& newComponents) +{ + LOGD("%{public}s parent: %{public}s child count %{public}lu", GetTag(), + (GetElementParent().Upgrade() ? GetElementParent().Upgrade()->GetTag() : "No parent"), children_.size()); + + auto oldChildrenTopIter = children_.begin(); + auto oldChildrenBottomIter = children_.end(); + + auto newComponentsTopIter = newComponents.begin(); + auto newComponentsBottomIter = newComponents.end(); + + int32_t slot = 0; + std::size_t topLength = 0; + std::size_t bottomLength = 0; + + // Scan through the beggining of the list and update matching components + + while (oldChildrenTopIter != children_.end() && newComponentsTopIter != newComponents.end()) { + // For ComposedElement + // Condition is true if IDs are the same for Element and Component OR + // marked as update needed + // true if component not a ComposedComponent + // Not a ComposedComponent: + // always true + + if ((*oldChildrenTopIter)->NeedUpdateWithComponent(*newComponentsTopIter)) { + // For ComposedElement + // true, + // if ComposedComponent and element have the same ID OR + // ID is different, but childlen is empty or null + // if child exists call child's CanUpdate + // false + // if want to update with non composed component + // + // Summary checks for ID to be the same for all levels + // Not a ComposedComponent: + // Returns true if types components are the same + // Redefined by progress, picker, list... + if ((*oldChildrenTopIter)->CanUpdate(*newComponentsTopIter)) { + LOGD("%{public}s parent: %{public}s childer count %{public}lu updating child %{public}s", GetTag(), + (GetElementParent().Upgrade() ? GetElementParent().Upgrade()->GetTag() : "No parent"), + children_.size(), (*oldChildrenTopIter)->GetTag()); + UpdateChild(*oldChildrenTopIter, *newComponentsTopIter, slot); + } else { + LOGD("%{public}s parent: %{public}s childer count %{public}lu CAN NOT update child %{public}s", + GetTag(), (GetElementParent().Upgrade() ? GetElementParent().Upgrade()->GetTag() : "No parent"), + children_.size(), (*oldChildrenTopIter)->GetTag()); + + break; + } + } else { + break; + } + ++slot; + ++topLength; + ++oldChildrenTopIter; + ++newComponentsTopIter; + } + LOGD("%{public}s, checked TOP elements, count %{public}lu, slot %{public}d", GetTag(), topLength, slot); + + // Scan the bottom of the list. + if (topLength < children_.size() && topLength < newComponents.size()) { + do { + --oldChildrenBottomIter; + --newComponentsBottomIter; + auto oldChild = *oldChildrenBottomIter; + auto newComponent = *newComponentsBottomIter; + if (!oldChild || !newComponent) { + LOGE("Element or component is null during update proces"); + } + // Break out of the loop if IDs are not the same + if (!(oldChild && newComponent && oldChild->NeedUpdateWithComponent(newComponent) && + oldChild->CanUpdate(newComponent))) { + ++oldChildrenBottomIter; + ++newComponentsBottomIter; + break; + } + ++bottomLength; + } while ((oldChildrenTopIter != oldChildrenBottomIter) && (newComponentsTopIter != newComponentsBottomIter)); + } + LOGD("%{public}s, checked BOTTOM elements, count %{public}lu, slot %{public}d", GetTag(), bottomLength, slot); + + // Scan the old children in the middle of the list. + // Collect all childeren with ID into the map + + LOGD("%{public}s, processing MIDDLE section, slot %{public}d", GetTag(), slot); + std::map> oldKeyedChildren; + bool haveOldChildren = (topLength + bottomLength < children_.size()); + if (haveOldChildren) { + while (oldChildrenTopIter != oldChildrenBottomIter) { + auto oldChild = AceType::DynamicCast(*oldChildrenTopIter); + if (oldChild) { + // ComposedComponent + ++oldChildrenTopIter; + if (oldKeyedChildren.count(oldChild->GetId()) == 0) { + LOGD("%{public}s Adding old child in the middle of the list ID: \"%{public}s\"" + + "to update %{public}s", GetTag(), oldChild->GetId().c_str(), oldChild->GetTag()); + oldKeyedChildren[oldChild->GetId()] = oldChild; + } else { + LOGD("%{public}s Deleting old child in the middle of the list ID: \"%{public}s\" %{public}s", + GetTag(), oldChild->GetId().c_str(), oldChild->GetTag()); + RemoveChild(oldChild); + } + } else { + // Not a ComposedComponent + auto oldChild = *oldChildrenTopIter; + ++oldChildrenTopIter; + LOGD("%{public}s old child in the middle of the list: Delete it %{public}s", + GetTag(), oldChild->GetTag()); + RemoveChild(oldChild); + } + } + } + LOGD("%{public}s, checked MIDDLE old elements, count in the map %{public}lu", GetTag(), + oldKeyedChildren.size()); + + // Update the middle of the list. + + while (newComponentsTopIter != newComponentsBottomIter) { + RefPtr oldChild; + auto newComponent = AceType::DynamicCast(*newComponentsTopIter); + if (haveOldChildren && newComponent) { + auto key = newComponent->GetId(); + if (oldKeyedChildren.count(key) != 0) { + oldChild = oldKeyedChildren[key]; + LOGD("%{public}s, updating MIDDLE element: \"%{public}s\" ", GetTag(), + oldKeyedChildren[key]->GetId().c_str()); + oldKeyedChildren.erase(key); + } + } + + // newComponent can be null here, so use *newComponentsTopIter + // Will update exiting element or add a new one + + LOGD("%{public}s, updating MIDDLE element: for slot %{public}d with %{public}s old child", + GetTag(), slot, oldChild == nullptr ? "NO" : "existing"); + + UpdateChild(oldChild, *newComponentsTopIter, slot); + + ++slot; + ++newComponentsTopIter; + } + + LOGD("%{public}s, updated MIDDLE elements, slot %{public}d", GetTag(), slot); + + // Update the end of the list + + while ((oldChildrenBottomIter != children_.end()) && (newComponentsBottomIter != newComponents.end())) { + auto oldChild = *oldChildrenBottomIter; + auto newComponent = *newComponentsBottomIter; + + if (oldChild && oldChild->NeedUpdateWithComponent(newComponent)) { + UpdateChild(oldChild, newComponent, slot); + LOGD("%{public}s, updatin BOTTOM child %{public}s, slot %{public}d", GetTag(), oldChild->GetTag(), slot); + } + ++slot; + ++oldChildrenBottomIter; + ++newComponentsBottomIter; + } + + LOGD("%{public}s, updated BOTTOM elements, slot %{public}d", GetTag(), slot); + LOGD("%{public}s, clean up %{public}zu oldChildren", GetTag(), oldKeyedChildren.size()); + if (!oldKeyedChildren.empty()) { + for (const auto& oldChild : oldKeyedChildren) { + RemoveChild(oldChild.second); + } + } + LOGD("%{public}s end", GetTag()); +} + +void ComponentGroupElement::UpdateComposedChildrenPreprocess(const std::vector>& oldChildren, + const std::list>& newComponents, size_t& topLength, size_t& bottomLength, int32_t& slot) +{ + auto oldChildrenTopIter = oldChildren.begin(); + auto oldChildrenBottomIter = oldChildren.end(); + auto newComponentsTopIter = newComponents.begin(); + auto newComponentsBottomIter = newComponents.end(); + topLength = 0; + bottomLength = 0; + slot = 0; + + // Update the top of the list. + while ((oldChildrenTopIter != oldChildrenBottomIter) && (newComponentsTopIter != newComponentsBottomIter)) { + auto oldChild = AceType::DynamicCast(*oldChildrenTopIter); + auto newComponent = AceType::DynamicCast(*newComponentsTopIter); + if (oldChild && oldChild->NeedUpdateWithComponent(newComponent)) { + UpdateChild(oldChild, newComponent, slot); + } else { + auto context = context_.Upgrade(); + if (context && context->GetIsDeclarative()) { + break; + } + } + ++slot; + ++topLength; + ++newComponentsTopIter; + ++oldChildrenTopIter; + } + + // Scan the bottom of the list. + if (topLength < oldChildren.size() && topLength < newComponents.size()) { + do { + --oldChildrenBottomIter; + --newComponentsBottomIter; + auto oldChild = AceType::DynamicCast(*oldChildrenBottomIter); + auto newComponent = AceType::DynamicCast(*newComponentsBottomIter); + if (oldChild && newComponent && oldChild->GetId() != newComponent->GetId()) { + ++oldChildrenBottomIter; + ++newComponentsBottomIter; + break; + } + ++bottomLength; + } while ((oldChildrenTopIter != oldChildrenBottomIter) && (newComponentsTopIter != newComponentsBottomIter)); + } + + // here, oldChildren and newComponents are divided into three parts! + // first part: [oldChildren.begin(), oldChildrenTopIter) and [newComponents.begin(), newComponentsTopIter) + // the corresponding id is the same and all children in this range have been updated. + // second part: [oldChildrenTopIter, oldChildrenBottomIter) and [newComponentsTopIter, newComponentsBottomIter) + // the corresponding id is different. + // third part: [oldChildrenBottomIter, oldChildren.end()) and [newComponentsBottomIter, newComponents.end()) + // the corresponding id is the same and all children in this range have not been updated. + LOGD("oldChildren %{public}zu = %{public}zu + %{public}zd + %{public}zu", oldChildren.size(), topLength, + std::distance(oldChildrenTopIter, oldChildrenBottomIter), bottomLength); + LOGD("newComponents %{public}zu = %{public}zu+ %{public}zd + %{public}zu", newComponents.size(), topLength, + std::distance(newComponentsTopIter, newComponentsBottomIter), bottomLength); +} + +void ComponentGroupElement::UpdateComposedChildrenProcess(const std::vector>& oldChildren, + const std::list>& newComponents, size_t topLength, size_t bottomLength, int32_t& slot, + std::map>& oldKeyedChildren) +{ + auto oldChildrenTopIter = oldChildren.begin(); + auto oldChildrenBottomIter = oldChildren.end(); + auto newComponentsTopIter = newComponents.begin(); + auto newComponentsBottomIter = newComponents.end(); + std::advance(oldChildrenTopIter, topLength); + std::advance(newComponentsTopIter, topLength); + std::advance(oldChildrenBottomIter, -bottomLength); + std::advance(newComponentsBottomIter, -bottomLength); + oldKeyedChildren.clear(); + + // Scan the old children in the middle of the list. + bool haveOldChildren = (topLength + bottomLength < oldChildren.size()); + if (haveOldChildren) { + while (oldChildrenTopIter != oldChildrenBottomIter) { + auto oldChild = AceType::DynamicCast(*oldChildrenTopIter); + if (oldChild) { + oldKeyedChildren[oldChild->GetId()] = *oldChildrenTopIter; + } + ++oldChildrenTopIter; + } + } + + // Update the middle of the list. + while (newComponentsTopIter != newComponentsBottomIter) { + RefPtr oldChild; + auto newComponent = AceType::DynamicCast(*newComponentsTopIter); + if (haveOldChildren && newComponent) { + auto key = newComponent->GetId(); + if (oldKeyedChildren.count(key) != 0) { + oldChild = oldKeyedChildren[key]; + oldKeyedChildren.erase(key); + } + } + + if (!oldChild || oldChild->NeedUpdateWithComponent(newComponent)) { + UpdateChild(oldChild, newComponent, slot); + } + + ++slot; + ++newComponentsTopIter; + } + + // We've scanned the whole list. + ACE_DCHECK(oldChildrenTopIter == oldChildrenBottomIter); + ACE_DCHECK(newComponentsTopIter == newComponentsBottomIter); +} + +void ComponentGroupElement::UpdateComposedChildrenPostprocess(const std::vector>& oldChildren, + const std::list>& newComponents, size_t topLength, size_t bottomLength, int32_t& slot, + std::map>& oldKeyedChildren) +{ + auto oldChildrenBottomIter = oldChildren.end(); + auto newComponentsBottomIter = newComponents.end(); + std::advance(oldChildrenBottomIter, -bottomLength); + std::advance(newComponentsBottomIter, -bottomLength); + + // Update the bottom of the list. + while ((oldChildrenBottomIter != oldChildren.end()) && (newComponentsBottomIter != newComponents.end())) { + auto oldChild = *oldChildrenBottomIter; + auto newComponent = *newComponentsBottomIter; + if (oldChild && oldChild->NeedUpdateWithComponent(newComponent)) { + UpdateChild(oldChild, newComponent, slot); + } + ++slot; + ++oldChildrenBottomIter; + ++newComponentsBottomIter; + } + + // Clean up any of the remaining middle nodes from the old list. + bool haveOldChildren = (topLength + bottomLength < oldChildren.size()); + LOGD("clean up %{public}zu oldChildren", oldKeyedChildren.size()); + if (haveOldChildren && !oldKeyedChildren.empty()) { + for (const auto& oldChild : oldKeyedChildren) { + RemoveChild(oldChild.second); + } + } +} + +std::list> ComponentGroupElement::UpdateComposedChildren( + const std::list>& newComponents) +{ + // For javascript front-end, children of one node will keep their relative order during the update process. + // In other word, if child A is in front of B, child A will surely be in front of B after update. + // For a particular old child, after all the children before it have been processed, it must be in the right slot. + LOGD("ComponentGroupElement::UpdateComposedChildren start for %{public}s child count: %{public}lu", + GetTag(), children_.size()); + + // For security, we use a copy of children_ as it will change during processing. + std::vector> oldChildren(children_.begin(), children_.end()); + size_t topLength = 0; + size_t bottomLength = 0; + int32_t slot = 0; + std::map> oldKeyedChildren; + + UpdateComposedChildrenPreprocess(oldChildren, newComponents, topLength, bottomLength, slot); + UpdateComposedChildrenProcess(oldChildren, newComponents, topLength, bottomLength, slot, oldKeyedChildren); + UpdateComposedChildrenPostprocess(oldChildren, newComponents, topLength, bottomLength, slot, oldKeyedChildren); + + LOGD("ComponentGroupElement::UpdateComposedChildren end"); + return children_; +} + +std::list> ComponentGroupElement::UpdateComposedChildrenForEach(std::string oldFirstChildKey, + int32_t oldChildCount, std::vector newComponentsKeys, ComponentFunction&& componentFunc) +{ + LOGD("ComponentGroupElement::UpdateComposedChildrenForEach start"); + int32_t slot = 0; + auto oldChildrenTopIter = children_.begin(); + auto oldChildrenBottomIter = children_.end(); + + // Travese to get the start/end iter of foreach's item components. + while ((oldChildrenTopIter != oldChildrenBottomIter)) { + auto child = AceType::DynamicCast(*oldChildrenTopIter); + if (child && child->GetId() == oldFirstChildKey) { + break; + } + ++oldChildrenTopIter; + ++slot; + } + + oldChildrenBottomIter = oldChildrenTopIter; + + // Advance the bottomiter to the end of foreach items + std::advance(oldChildrenBottomIter, oldChildCount); + + std::map> oldKeyedChildren; + + // Scan the old foreach component in the middle of the list. + while (oldChildrenTopIter != oldChildrenBottomIter) { + auto oldChild = AceType::DynamicCast(*oldChildrenTopIter); + if (oldChild) { + oldKeyedChildren[oldChild->GetId()] = *oldChildrenTopIter; + } + ++oldChildrenTopIter; + } + + int32_t index = 0; + for (auto key : newComponentsKeys) { + RefPtr oldChild; + if (oldKeyedChildren.count(key) != 0) { + oldChild = oldKeyedChildren[key]; + oldKeyedChildren.erase(key); + } + + if (oldChild) { + // update the slot of the element + oldChild->SetSlot(slot); + children_.remove(oldChild); + auto pos = children_.begin(); + std::advance(pos, slot); + children_.insert(pos, oldChild); + + while (AceType::TypeName() == AceType::TypeName(oldChild)) { + // this child is a composedelement + // update its only child slot + // if the child is again composed component + // do the same until we hit a renderelement + oldChild = oldChild->GetFirstChild(); + oldChild->SetSlot(slot); + } + } else { + // New item in foreach added + UpdateChild(oldChild, componentFunc(index), slot); + } + + ++slot; + ++index; + } + + if (!oldKeyedChildren.empty()) { + // remove the foreach items view which are removed + for (const auto& oldChild : oldKeyedChildren) { + RemoveChild(oldChild.second); + } + } + + LOGD("ComponentGroupElement::UpdateComposedChildrenForEach end"); + return children_; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/pipeline/base/component_group_element.h b/frameworks/core/pipeline/base/component_group_element.h new file mode 100644 index 00000000..8a331eec --- /dev/null +++ b/frameworks/core/pipeline/base/component_group_element.h @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_COMPONENT_GROUP_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_COMPONENT_GROUP_ELEMENT_H + +#include "core/pipeline/base/render_element.h" +#include + +namespace OHOS::Ace { + +using ComponentFunction = std::function(int32_t index)>; + +class ACE_EXPORT ComponentGroupElement : public RenderElement { + DECLARE_ACE_TYPE(ComponentGroupElement, RenderElement); + +public: + ComponentGroupElement() = default; + ~ComponentGroupElement() override = default; + + static RefPtr Create(); + + void PerformBuild() override; + + bool IsComposed(const std::list>& newComponents); + + std::list> UpdateCommonChildren(const std::list>& newComponents); + void UpdateCommonChildrenOptimized(const std::list>& newComponents); + + std::list> UpdateComposedChildren(const std::list>& newComponents); + + // Updating the foreach's component + // this will be called only when the foreach array is a observableobject and registers to foreach. + std::list> UpdateComposedChildrenForEach(std::string oldFirstChildKey, int32_t oldChildCount, + std::vector newComponentsKeys, ComponentFunction&& func); + +private: + void UpdateComposedChildrenPreprocess(const std::vector>& oldChildren, + const std::list>& newComponents, size_t& topLength, size_t& bottomLength, int32_t& slot); + + void UpdateComposedChildrenProcess(const std::vector>& oldChildren, + const std::list>& newComponents, size_t topLength, size_t bottomLength, int32_t& slot, + std::map>& oldKeyedChildren); + + void UpdateComposedChildrenPostprocess(const std::vector>& oldChildren, + const std::list>& newComponents, size_t topLength, size_t bottomLength, int32_t& slot, + std::map>& oldKeyedChildren); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_COMPONENT_GROUP_ELEMENT_H diff --git a/frameworks/core/pipeline/base/composed_component.cpp b/frameworks/core/pipeline/base/composed_component.cpp new file mode 100644 index 00000000..ac189444 --- /dev/null +++ b/frameworks/core/pipeline/base/composed_component.cpp @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/pipeline/base/composed_component.h" + +#include "core/pipeline/base/composed_element.h" + +namespace OHOS::Ace { + +ComposedComponent::ComposedComponent(const ComposeId& id, const std::string& name, const RefPtr& child) + : SingleChild(child), id_(id), name_(name) +{} + +RefPtr ComposedComponent::CreateElement() +{ + auto element = ComposedElement::Create(GetId()); + + // elementFunction_ is true only for userdefined custom views + // in other case use default path in performBuild + if (elementFunction_) { + elementFunction_(AceType::DynamicCast(AceType::RawPtr(element))); + } + + return element; +} + +void ComposedComponent::SetElementFunction(ElementFunction&& func) +{ + elementFunction_ = std::move(func); +} + +void ComposedComponent::CallElementFunction(Element* element) +{ + elementFunction_(AceType::DynamicCast(element)); +} + + +} // namespace OHOS::Ace diff --git a/frameworks/core/pipeline/base/composed_component.h b/frameworks/core/pipeline/base/composed_component.h new file mode 100644 index 00000000..ae64cc27 --- /dev/null +++ b/frameworks/core/pipeline/base/composed_component.h @@ -0,0 +1,110 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_COMPOSED_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_COMPOSED_COMPONENT_H + +#include + +#include "core/pipeline/base/component.h" +#include "core/pipeline/base/single_child.h" + +namespace OHOS::Ace { + +using ComposeId = std::string; + +// A component can compose others components. +class ACE_EXPORT ComposedComponent : public Component, public SingleChild { + DECLARE_ACE_TYPE(ComposedComponent, Component, SingleChild); + +public: + ComposedComponent(const ComposeId& id, const std::string& name, const RefPtr& child); + ComposedComponent(const ComposeId& id, const std::string& name) : id_(id), name_(name) {}; + ~ComposedComponent() override = default; + + RefPtr CreateElement() override; + + const ComposeId& GetId() const + { + return id_; + } + + const std::string& GetName() const + { + return name_; + } + + bool NeedUpdate() const + { + return needUpdate_; + } + + void MarkNeedUpdate() + { + needUpdate_ = true; + } + + void ClearNeedUpdate() + { + needUpdate_ = false; + } + + void SetUpdateType(UpdateType updateType) override + { + auto child = GetChild(); + if (child) { + child->SetUpdateType(updateType); + } + } + + void SetDisabledStatus(bool disabledStatus) override + { + Component::SetDisabledStatus(disabledStatus); + auto child = GetChild(); + if (child) { + child->SetDisabledStatus(disabledStatus); + } + } + + void SetTextDirection(TextDirection direction) override + { + direction_ = direction; + auto child = GetChild(); + if (child) { + child->SetTextDirection(direction); + } + } + + bool HasElementFunction() override + { + if (elementFunction_) { + return true; + } + return false; + } + + void SetElementFunction(ElementFunction&& func) override; + void CallElementFunction(Element* element) override; + +private: + ComposeId id_; + std::string name_; + bool needUpdate_ = false; + ElementFunction elementFunction_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_COMPOSED_COMPONENT_H diff --git a/frameworks/core/pipeline/base/composed_element.cpp b/frameworks/core/pipeline/base/composed_element.cpp new file mode 100644 index 00000000..f2b082de --- /dev/null +++ b/frameworks/core/pipeline/base/composed_element.cpp @@ -0,0 +1,176 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/pipeline/base/composed_element.h" + +#include "base/log/dump_log.h" +#include "base/log/log.h" +#include "base/utils/utils.h" +#include "core/common/frontend.h" +#include "core/pipeline/base/composed_component.h" +#include "core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +ComposedElement::ComposedElement(const ComposeId& id) : id_(id) +{ + type_ = COMPOSED_ELEMENT; +} + +RefPtr ComposedElement::Create(const ComposeId& id) +{ + LOGD("ComposedElement::Create"); + return AceType::MakeRefPtr(id); +} + +void ComposedElement::Detached() +{ + auto context = context_.Upgrade(); + if (addedToMap_ && context) { + context->RemoveComposedElement(id_, AceType::Claim(this)); + addedToMap_ = false; + } +} + +void ComposedElement::Deactivate() +{ + Detached(); +} + +void ComposedElement::PerformBuild() +{ + LOGD("ComposedComponent PerformBuild."); + auto context = context_.Upgrade(); + if (context && !addedToMap_) { + context->AddComposedElement(id_, AceType::Claim(this)); + addedToMap_ = true; + } + + const auto& child = children_.empty() ? nullptr : children_.front(); + if (HasRenderFunction()) { + const auto& component = CallRenderFunction(); + UpdateChild(child, component, GetSlot()); + } else { + const auto& component = BuildChild(); + if (context && context->GetIsDeclarative()) { + UpdateChild(child, component, GetSlot()); + } else { + UpdateChild(child, component); + } + } +} + +void ComposedElement::Update() +{ + const RefPtr compose = AceType::DynamicCast(component_); + if (compose != nullptr) { + name_ = compose->GetName(); + if (id_ != compose->GetId()) { + auto context = context_.Upgrade(); + if (addedToMap_ && context != nullptr) { + context->RemoveComposedElement(id_, AceType::Claim(this)); + context->AddComposedElement(compose->GetId(), AceType::Claim(this)); + } + id_ = compose->GetId(); + } + compose->ClearNeedUpdate(); + } +} + +RefPtr ComposedElement::BuildChild() +{ + RefPtr compose = AceType::DynamicCast(component_); + if (compose != nullptr) { + return compose->GetChild(); + } + return nullptr; +} + +void ComposedElement::Apply(const RefPtr& child) +{ + if (!child) { + LOGE("Element child is null"); + return; + } + + if (!parentRenderNode_) { + LOGE("ComposedElement don't have a parent render node"); + return; + } + + if (child->GetType() == RENDER_ELEMENT) { + // Directly attach the RenderNode if child is ComposedElement + RefPtr renderChild = AceType::DynamicCast(child); + if (renderChild) { + parentRenderNode_->AddChild(renderChild->GetRenderNode(), GetSlot()); + } + } else if (child->GetType() == COMPOSED_ELEMENT) { + // if child is ComposedElement, just set parent render node + RefPtr composeChild = AceType::DynamicCast(child); + if (composeChild) { + composeChild->SetParentRenderNode(parentRenderNode_); + } + } +} + +void ComposedElement::Dump() +{ + DumpLog::GetInstance().AddDesc("name:" + name_); + DumpLog::GetInstance().AddDesc("id:" + id_); +} + +bool ComposedElement::CanUpdate(const RefPtr& newComponent) +{ + auto compose = AceType::DynamicCast(newComponent); + if (!compose) { + return false; + } + if (compose->GetId() == id_) { + return true; + } + if (children_.empty()) { + return true; + } + auto childComponent = compose->GetChild(); + if (!childComponent) { + return true; + } + return children_.front()->CanUpdate(childComponent); +} + +bool ComposedElement::NeedUpdateWithComponent(const RefPtr& newComponent) +{ + auto component = AceType::DynamicCast(newComponent); + if (component) { + auto newId = component->GetId(); + if (newId.empty()) { + return true; + } + + if (component->NeedUpdate()) { + return true; + } + + auto context = context_.Upgrade(); + if (context && context->GetIsDeclarative()) { + return newId == id_; + } else { + return newId != id_; + } + } + return true; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/pipeline/base/composed_element.h b/frameworks/core/pipeline/base/composed_element.h new file mode 100644 index 00000000..8f257fa6 --- /dev/null +++ b/frameworks/core/pipeline/base/composed_element.h @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_COMPOSED_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_COMPOSED_ELEMENT_H + +#include + +#include "base/utils/macros.h" +#include "core/pipeline/base/composed_component.h" +#include "core/pipeline/base/element.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +// ComposedElement just maintain a child element may have render node. +class ACE_EXPORT ComposedElement : public Element { + DECLARE_ACE_TYPE(ComposedElement, Element); + +public: + using RenderFunction = std::function()>; + explicit ComposedElement(const ComposeId& id); + ~ComposedElement() override = default; + + static RefPtr Create(const ComposeId& id); + void Detached() override; + void Deactivate() override; + void PerformBuild() override; + void Update() override; + + void Dump() override; + + bool CanUpdate(const RefPtr& newComponent) override; + bool NeedUpdateWithComponent(const RefPtr& newComponent) override; + + void SetParentRenderNode(const RefPtr& renderNode) + { + parentRenderNode_ = renderNode; + } + + const RefPtr& GetParentRenderNode() const + { + return parentRenderNode_; + } + + const ComposeId& GetId() const + { + return id_; + } + + RefPtr CallRenderFunction() + { + return renderFunction_(); + } + + void SetRenderFunction(RenderFunction&& func) + { + renderFunction_ = std::move(func); + } + + bool HasRenderFunction() + { + if (renderFunction_) { + return true; + } + return false; + } + +protected: + virtual RefPtr BuildChild(); + void Apply(const RefPtr& child) override; + + RefPtr parentRenderNode_; + +protected: + ComposeId id_; + std::string name_; + bool addedToMap_ = false; + RenderFunction renderFunction_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_COMPOSED_ELEMENT_H diff --git a/frameworks/core/pipeline/base/constants.cpp b/frameworks/core/pipeline/base/constants.cpp new file mode 100644 index 00000000..41fd7d00 --- /dev/null +++ b/frameworks/core/pipeline/base/constants.cpp @@ -0,0 +1,602 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/pipeline/base/constants.h" + +#include "base/utils/macros.h" + +namespace OHOS::Ace { + +// base constants +const char CLASS_NAME[] = "className"; +const char NAME[] = "name"; +const char CHILD[] = "child"; + +// common constants +const char DISABLED[] = "disabled"; +const char WIDTH[] = "width"; +const char HEIGHT[] = "height"; +const char ALIGN[] = "align"; + +// image constants +const char IMAGE_NAME[] = "Image"; +const char IMAGE_SRC[] = "src"; +const char IMAGE_ALT[] = "alt"; +const char IMAGE_WIDTH[] = "width"; +const char IMAGE_HEIGHT[] = "height"; +const char IMAGE_ALIGNMENT[] = "alignment"; +const char IMAGE_POSITION[] = "imagePosition"; +const char IMAGE_POSITION_SIZE_X[] = "positionX"; +const char IMAGE_POSITION_SIZE_Y[] = "positionY"; +const char IMAGE_POSITION_VALUE_X[] = "dx"; +const char IMAGE_POSITION_VALUE_Y[] = "dy"; +const char IMAGE_SIZE[] = "imageSize"; +const char IMAGE_SIZE_VALUE[] = "value"; +const char IMAGE_SIZE_TYPE[] = "type"; +const char IMAGE_REPEAT[] = "imageRepeat"; +const char IMAGE_FIT[] = "imageFit"; +const char IMAGE_COLOR[] = "color"; +const char SRC_TYPE[] = "srcType"; +const char IMAGE_ON_LOAD_SUCCESS[] = "onLoadSuccess"; +const char IMAGE_ON_LOAD_FAIL[] = "onLoadFail"; +const char IMAGE_ALT_BLANK[] = "blank"; +const uint32_t ALT_COLOR_GREY = 0xFFCCCCCC; + +// text constants +const char TEXT_NAME[] = "Text"; +const char TEXT_DATA[] = "value"; +const char TEXT_DIRECTION[] = "textDirection"; +const char TEXT_COLOR[] = "color"; +const char TEXT_DECORATION[] = "textDecoration"; +const char TEXT_FONT_WEIGHT[] = "fontWeight"; +const char TEXT_FONT_SIZE[] = "fontSize"; +const char TEXT_FONT_STYLE[] = "fontStyle"; +const char TEXT_BASE_LINE[] = "textBaseline"; +const char TEXT_FONT_FAMILIES[] = "fontFamilies"; +const char TEXT_MAX_LINES[] = "textMaxLines"; +const char TEXT_ALIGN[] = "textAlign"; +const char TEXT_OVERFLOW[] = "textOverflow"; +const char TEXT_WORD_SPACING[] = "wordSpacing"; +const char TEXT_LINE_HEIGHT[] = "lineHeight"; +const char TEXT_LETTER_SPACING[] = "letterSpacing"; +const char TEXT_STYLE[] = "textStyle"; +const char TEXT_SPAN[] = "textSpan"; +const char TEXT_SPAN_NAME[] = "TextSpan"; +const char TEXT_ADAPT[] = "textAdapt"; +const char TEXT_ADAPT_MIN_FONTSIZE[] = "textAdaptMinSize"; + +// text style constants +const char TEXT_STYLE_NAME[] = "TextStyle"; + +// textField constants +const char TEXT_FIELD_NAME[] = "TextField"; +const char TEXT_FIELD_TYPE[] = "keyboardType"; +const char OBSCURE_TEXT[] = "obscure"; +const char TEXT_FIELD_ENABLED[] = "enabled"; +const char TEXT_FIELD_MAX_LENGTH[] = "maxLength"; +const char TEXT_FIELD_MAX_LINES[] = "maxLines"; +const char TEXT_FIELD_AUTO_FOCUS[] = "autoFocus"; +const char TEXT_FIELD_ACTION_LABEL[] = "actionLabel"; +const char TEXT_FIELD_ACTION[] = "action"; +const char CURSOR_COLOR[] = "cursorColor"; +const char TEXT_FIELD_PLACEHOLDER[] = "placeholder"; +const char TEXT_FIELD_PLACEHOLDER_COLOR[] = "placeholderColor"; +const char TEXT_FIELD_EXTEND[] = "extend"; +const char TEXT_FIELD_ICON_IMAGE[] = "iconImage"; +// events +const char TEXT_FIELD_ON_TEXT_CHANGE[] = "onTextChange"; +const char TEXT_FIELD_ON_FINISH_INPUT[] = "onFinishInput"; +const char TEXT_FIELD_ON_TAP[] = "onTap"; + +// color constants +const char COLOR[] = "color"; +const char COLOR_NAME[] = "Color"; +const char COLOR_VALUE[] = "value"; +const char COLOR_RED[] = "red"; +const char COLOR_GREEN[] = "green"; +const char COLOR_BLUE[] = "blue"; +const char COLOR_ALPHA[] = "alpha"; +const char COLOR_OPACITY[] = "opacity"; + +// shadow constants +const char SHADOW_CLASSNAME[] = "Shadow"; +const char OFFSET_CLASSNAME[] = "Offset"; +const char SHADOW[] = "shadow"; +const char OFFSET[] = "offset"; +const char HORIZONTAL_OFFSET[] = "dx"; +const char VERTICAL_OFFSET[] = "dy"; +const char RADIUS[] = "blurRadius"; +const char SPREAD[] = "spreadRadius"; +const char ELEVATION[] = "elevation"; + +// compose constants +const char COMPOSE_NAME[] = "Compose"; +const char COMPOSE_ID[] = "composeId"; +const char COMPOSE_DATA[] = "componentData"; + +// box constants +const char BOX_NAME[] = "Box"; +const char BOX_CONSTRAINTS[] = "constraints"; +const char BOX_BACK_DECORATION[] = "backDecoration"; +const char BOX_FRONT_DECORATION[] = "frontDecoration"; +const char BOX_MARGIN[] = "margin"; +const char BOX_PADDING[] = "padding"; +const char BOX_DELIVER_MIN_TO_CHILD[] = "deliverMinToChild"; + +// flex constants +const char COLUMN_NAME[] = "Column"; +const char ROW_NAME[] = "Row"; +const char MAIN_AXIS_ALIGN[] = "mainAxisAlign"; +const char CROSS_AXIS_ALIGN[] = "crossAxisAlign"; +const char MAIN_AXIS_SIZE[] = "mainAxisSize"; + +// flex item constants +const char FLEX_ITEM_NAME[] = "FlexItem"; +const char FLEX_GROW[] = "flexGrow"; +const char FLEX_SHRINK[] = "flexShrink"; +const char FLEX_BASIS[] = "flexBasis"; + +// stack constants +const char STACK_NAME[] = "Stack"; +const char STACK_ALIGNMENT[] = "alignment"; +const char STACK_FIT[] = "stackFit"; +const char STACK_OVERFLOW[] = "overflow"; +const char STACK_MAIN_STACK_SIZE[] = "mainStackSize"; + +// positioned constants +const char POSITIONED_NAME[] = "Positioned"; +const char POSITIONED_LEFT[] = "left"; +const char POSITIONED_RIGHT[] = "right"; +const char POSITIONED_HEIGHT[] = "height"; +const char POSITIONED_WIDTH[] = "width"; +const char POSITIONED_TOP[] = "top"; +const char POSITIONED_BOTTOM[] = "bottom"; + +// list constants +const char LIST_NAME[] = "List"; +const char LIST_COUNT[] = "count"; +const char LIST_EVENT_REQUEST_ITEM[] = "requestitem"; +const char LIST_DIRECTION[] = "direction"; +const char LIST_CACHED_COUNT[] = "cachedcount"; +const char LIST_BEGIN_INDEX[] = "beginindex"; +const char LIST_END_INDEX[] = "endindex"; +const char LIST_REPEATED_LENGTH[] = "repeatedlength"; +const char LIST_INDEX_OFFSET[] = "indexoffset"; +const char LIST_SCROLL_PAGE[] = "scrollPage"; +const char LIST_POSITION[] = "listPosition"; +// list item constants +const char LIST_ITEM_NAME[] = "ListItem"; +const char LIST_ITEM_TYPE[] = "itemType"; +// edge effect +const char EDGE_EFFECT[] = "edgeEffect"; +const char FADE_COLOR[] = "fadeColor"; + +// grid constants +const char GRID_NAME[] = "Grid"; +const char GRID_WIDTH[] = "width"; +const char GRID_HEIGHT[] = "height"; +const char GRID_ITEM_COUNT[] = "itemCount"; +const char GRID_INITIAL_ITEM[] = "initialItem"; +const char GRID_COLUMN_COUNT[] = "columnCount"; +const char GRID_COLUMN_EXTENT[] = "columnExtent"; +const char GRID_EVENT_REQUEST_ITEM[] = "requestitem"; +const char GRID_SCROLL_PAGE[] = "scrollPage"; +const char GRID_DIRECTION[] = "direction"; +const char GRID_ALIGN[] = "align"; +const char GRID_CACHED_COUNT[] = "cachedcount"; +const char GRID_ITEM_NAME[] = "GridItem"; +const char GRID_COLUMN_SPAN[] = "columnSpan"; +const char GRID_ROW_SPAN[] = "rowSpan"; +const char GRID_ROW_COUNT[] = "rowCount"; +const char GRID_ROW_INDEX[] = "rowIndex"; +const char GRID_COLUMN_INDEX[] = "columnIndex"; +const char GRID_LAYOUT_NAME[] = "GridLayout"; +const char GRID_LAYOUT_ITEM_NAME[] = "GridLayoutItem"; +const int32_t DEFAULT_DIRECTION = 1; // FlexDirection::COLUMN +const int32_t DEFAULT_ALIGN = 4; // FlexAlign::STRETCH +const int32_t DEFAULT_COLUMN_COUNT = 0; +const int32_t DEFAULT_COLUMN_EXTENT = 0; +const int32_t DEFAULT_COLUMN_SPAN = 1; +const int32_t DEFAULT_ITEM_COUNT = 0; +const int32_t DEFAULT_INITIAL_ITEM = 0; +const int32_t DEFAULT_CACHED_COUNT = 10; +const double DEFAULT_GRID_WIDTH = -1.0; +const double DEFAULT_GRID_HEIGHT = -1.0; + +// scrollBar +extern const char SCROLL_BAR_DISPLAY_MODE[] = "scrollbar"; +extern const char SCROLL_BAR_SHAPE_MODE[] = "shapemode"; + +// edge constants +const char PADDING_NAME[] = "Padding"; +const char PADDING[] = "padding"; +const char MARGIN[] = "margin"; +const char EDGE_NAME[] = "Edge"; +const char EDGE_VALUE[] = "value"; +const char EDGE_LEFT[] = "left"; +const char EDGE_TOP[] = "top"; +const char EDGE_RIGHT[] = "right"; +const char EDGE_BOTTOM[] = "bottom"; + +// border constants +const char BORDER[] = "border"; +const char BORDER_NAME[] = "Border"; +const char BORDER_VALUE[] = "value"; +const char BORDER_LEFT[] = "left"; +const char BORDER_TOP[] = "top"; +const char BORDER_RIGHT[] = "right"; +const char BORDER_BOTTOM[] = "bottom"; +const char BORDER_RADIUS_VALUE[] = "radius"; +const char BORDER_TOP_LEFT[] = "topLeftRadius"; +const char BORDER_TOP_RIGHT[] = "topRightRadius"; +const char BORDER_BOTTOM_LEFT[] = "bottomLeftRadius"; +const char BORDER_BOTTOM_RIGHT[] = "bottomRightRadius"; + +// borderEdge constants +const char BORDER_EDGE_NAME[] = "BorderEdge"; +const char BORDER_EDGE_WIDTH[] = "width"; +const char BORDER_EDGE_COLOR[] = "color"; +const char BORDER_EDGE_STYLE[] = "style"; + +// radius constants +const char RADIUS_NAME[] = "Radius"; +const char RADIUS_VALUE[] = "value"; +const char RADIUS_X[] = "x"; +const char RADIUS_Y[] = "y"; + +// decoration constants +const char DECORATION_NAME[] = "Decoration"; +const char SHADOW_LIST[] = "shadowList"; +const char BACKGROUND_IMAGE[] = "backgroundImage"; +const char BACKGROUND_COLOR[] = "color"; +const char DECORATION_BORDER[] = "border"; +const char DECORATION_PADDING[] = "padding"; +const char DECORATION_GRADIENT[] = "gradient"; + +// backgroundImage constants +const char BACKGROUND_IMAGE_NAME[] = "BackgroundImage"; +const char BACKGROUND_SRC[] = "src"; +const char DECORATION_IMAGE_ALIGNMENT[] = "alignment"; + +// gradient constants +const char GRADIENT_NAME[] = "Gradient"; +const char GRADIENT_DIRECTION[] = "direction"; +const char GRADIENT_REPEAT[] = "repeat"; +const char GRADIENT_ANGLE[] = "angle"; +const char GRADIENT_COLOR_LIST[] = "colorList"; +const char GRADIENT_DIMENSION[] = "dimension"; +const char GRADIENT_DIMENSION_VALUE[] = "value"; +const char GRADIENT_DIMENSION_UNIT[] = "unit"; +const char GRADIENT_COLOR[] = "color"; +const char GRADIENT_HAS_VALUE[] = "hasValue"; + +// align constants +const char ALIGN_NAME[] = "Align"; +const char HORIZONTAL[] = "horizontal"; +const char VERTICAL[] = "vertical"; +const char HORIZONTAL_VALUE_LEFT[] = "left"; +const char HORIZONTAL_VALUE_CENTER[] = "center"; +const char HORIZONTAL_VALUE_RIGHT[] = "right"; +const char VERTICAL_VALUE_TOP[] = "top"; +const char VERTICAL_VALUE_CENTER[] = "center"; +const char VERTICAL_VALUE_BOTTOM[] = "bottom"; + +// tween constants +const char TWEEN_NAME[] = "Tween"; +const char DURATION[] = "duration"; +const char DELAY[] = "delay"; +const char REVERSE[] = "reverse"; +const char ITERATION[] = "iteration"; +const char FILL_MODE[] = "fill-mode"; +const char CURVE[] = "curve"; +const char TWEEN_OPTION[] = "option"; +const char OPTION_SCALE[] = "scale"; +const char OPTION_SCALE_X[] = "scaleX"; +const char OPTION_SCALE_Y[] = "scaleY"; +const char OPTION_TRANSLATE[] = "translate"; +const char OPTION_TRANSLATE_X[] = "translateX"; +const char OPTION_TRANSLATE_Y[] = "translateY"; +const char OPTION_ROTATE_Z[] = "rotateZ"; +const char OPTION_ROTATE_X[] = "rotateX"; +const char OPTION_ROTATE_Y[] = "rotateY"; +const char OPTION_OPACITY[] = "opacity"; + +// slider constants +const char SLIDER_NAME[] = "Slider"; +const char VALUE[] = "value"; +const char SLIDER_MIN[] = "min"; +const char SLIDER_MAX[] = "max"; +const char SLIDER_STEP[] = "step"; +const char SLIDER_BAR_HEIGHT[] = "barHeight"; +const char SLIDER_BAR_WIDTH[] = "barWidth"; +const char SLIDER_BLOCK_RADIUS[] = "blockRadius"; +const char SLIDER_SELECTED_COLOR[] = "barSelectedColor"; +const char SLIDER_BAR_BACKGROUND_COLOR[] = "barBackgroundColor"; +const char SLIDER_BLOCK_COLOR[] = "blockColor"; +const char SLIDER_PADDING[] = "padding"; +const char ON_MOVE_END_ID[] = "onMoveEndId"; +const char ON_CLICKED_ID[] = "onClickedId"; + +// swiper constants +const char SWIPER_NAME[] = "Swiper"; +const char SWIPER_ON_CHANGED[] = "onChanged"; +const char SWIPER_INDEX[] = "index"; +const char SWIPER_SHOW_INDICATOR[] = "showIndicator"; +const char SWIPER_DURATION[] = "duration"; +const char SWIPER_LOOP[] = "loop"; +const char SWIPER_AUTO_PLAY[] = "autoPlay"; +const char SWIPER_AUTO_PLAY_INTERVAL[] = "autoPlayInterval"; +const char SWIPER_IS_VERTICAL[] = "isVertical"; +const char SWIPER_INDICATOR_COLOR[] = "indicatorColor"; +const char SWIPER_INDICATOR_SELECTED_COLOR[] = "indicatorSelectedColor"; +const char SWIPER_INDICATOR_SIZE[] = "indicatorSize"; +const char SWIPER_INDICATOR_SELECTED_SIZE[] = "indicatorSelectedSize"; +const char SWIPER_INDICATOR_TOP[] = "indicatorTop"; +const char SWIPER_INDICATOR_LEFT[] = "indicatorLeft"; +const char SWIPER_INDICATOR_BOTTOM[] = "indicatorBottom"; +const char SWIPER_INDICATOR_RIGHT[] = "indicatorRight"; + +// button constants +const char BUTTON_NAME[] = "Button"; +const char BUTTON_WIDTH[] = "width"; +const char BUTTON_HEIGHT[] = "height"; +const char BUTTON_RECT_RADIUS[] = "rrectRadius"; +const char BUTTON_TYPE[] = "type"; +const char BUTTON_DISABLED_STATE[] = "disabledState"; +const char BUTTON_AUTO_FOCUS[] = "autoFocus"; +const char BUTTON_BACKGROUND_COLOR[] = "backgroundColor"; +const char BUTTON_CLICKED_COLOR[] = "clickedColor"; +const char BUTTON_DISABLED_COLOR[] = "disabledColor"; +const char BUTTON_FOCUS_COLOR[] = "focusColor"; +const char BUTTON_CLICKED_EVENT_ID[] = "buttonClickedEventId"; +const char BUTTON_BORDER[] = "buttonBorder"; +const char BUTTON_SHADOW[] = "buttonShadow"; + +// raw event components. +const char TOUCH_LISTENER_NAME[] = "TouchListener"; +const char ON_TOUCH_DOWN_EVENT[] = "onTouchDown"; +const char ON_TOUCH_MOVE_EVENT[] = "onTouchMove"; +const char ON_TOUCH_UP_EVENT[] = "onTouchUp"; +const char ON_TOUCH_CANCEL_EVENT[] = "onTouchCancel"; + +// gesture event components. +const char GESTURE_LISTENER_NAME[] = "GestureListener"; +const char ON_CLICK_EVENT[] = "onClick"; +const char ON_LONG_PRESS_EVENT[] = "onLongPress"; +const char ON_HORIZONTAL_DRAG_START_EVENT[] = "onHorizontalDragStart"; +const char ON_HORIZONTAL_DRAG_UPDATE_EVENT[] = "onHorizontalDragUpdate"; +const char ON_HORIZONTAL_DRAG_END_EVENT[] = "onHorizontalDragEnd"; +const char ON_HORIZONTAL_DRAG_CANCEL_EVENT[] = "onHorizontalDragCancel"; +const char ON_VERTICAL_DRAG_START_EVENT[] = "onVerticalDragStart"; +const char ON_VERTICAL_DRAG_UPDATE_EVENT[] = "onVerticalDragUpdate"; +const char ON_VERTICAL_DRAG_END_EVENT[] = "onVerticalDragEnd"; +const char ON_VERTICAL_DRAG_CANCEL_EVENT[] = "onVerticalDragCancel"; +const char ON_FREE_DRAG_START_EVENT[] = "onFreeDragStart"; +const char ON_FREE_DRAG_UPDATE_EVENT[] = "onFreeDragUpdate"; +const char ON_FREE_DRAG_END_EVENT[] = "onFreeDragEnd"; +const char ON_FREE_DRAG_CANCEL_EVENT[] = "onFreeDragCancel"; + +// focusable components +const char FOCUSABLE_NAME[] = "Focusable"; +const char ON_FOCUS_EVENT[] = "onFocus"; +const char ON_BLUR_EVENT[] = "onBlur"; +const char ON_KEY_EVENT[] = "onKey"; +const char BOX_STYLE[] = "style"; +const char FOCUSED_BOX_STYLE[] = "focusedStyle"; +const char AUTO_FOCUSED[] = "autoFocused"; + +// texture constants +const char TEXTURE_NAME[] = "Texture"; +const char TEXTURE_SRC_ID[] = "id"; +const char TEXTURE_SRC_WIDTH[] = "srcwidth"; +const char TEXTURE_SRC_HEIGHT[] = "srcheight"; +const char TEXTURE_FIT[] = "texturefit"; + +// display constants +const char DISPLAY_NAME[] = "Display"; +const char DISPLAY_VISIBLE[] = "visible"; +const char DISPLAY_OPACITY[] = "opacity"; + +// tab constants +const char TAB_BAR_NAME[] = "Tabbar"; +const char TAB_CONTENT_NAME[] = "Tabcontent"; +const char TAB_NAME[] = "Tab"; +const char TAB_TABS[] = "tabs"; +const char TAB_INDEX[] = "index"; +const char TAB_IS_VERTICAL[] = "vertical"; +const char TAB_CONTROLLER_ID[] = "controllerId"; +const char TAB_INDICATOR[] = "indicator"; +const char TAB_INDICATOR_WIDTH[] = "indicatorWidth"; +const char TAB_CONTENT_ON_CHANGE[] = "onChange"; +const char TAB_CONTENT_SCROLLABEL[] = "scrollable"; +const char TAB_INDICATOR_COLOR[] = "indicatorColor"; +const char TAB_INDICATOR_PADDING[] = "indicatorPadding"; +const char TAB_INDICATOR_SIZE[] = "indicatorSize"; +const char TAB_LABEL_COLOR[] = "labelColor"; +const char TAB_UNSELECTED_LABEL_COLOR[] = "unselectedLabelColor"; +const char TAB_LABEL_STYLE[] = "labelStyle"; +const char TAB_UNSELECTED_LABEL_STYLE[] = "unselectedLabelStyle"; +const char TAB_LABEL_PADDING[] = "labelPadding"; +const char TAB_MODE[] = "mode"; +const char TAB_ITEM_TEXT[] = "text"; +const char TAB_ITEM_ICON[] = "icon"; + +// dialog constants +const char DIALOG_NAME[] = "Dialog"; +const char DIALOG_TITLE[] = "title"; +const char DIALOG_TITLE_PADDING[] = "titlePadding"; +const char DIALOG_CONTENT[] = "content"; +const char DIALOG_CONTENT_PADDING[] = "contentPadding"; +const char DIALOG_BACKGROUND_COLOR[] = "backgroundColor"; +const char DIALOG_ACTIONS[] = "actions"; +const char DIALOG_ACTION_TEXT[] = "text"; +const char DIALOG_ACTION_COLOR[] = "color"; +const char DIALOG_AUTO_CANCEL[] = "autoCancel"; + +// scroll constants +const char SCROLL_NAME[] = "Scroll"; +const char SCROLL_DIRECTION[] = "direction"; +const char SCROLL_POSITION[] = "scrollPosition"; +const char SCROLL_PADDING[] = "scrollPadding"; +const char SCROLL_PAGE[] = "scrollPage"; + +// progress constants +const char PROGRESS_NAME[] = "Progress"; +const char PROGRESS_SELECT_COLOR[] = "selectColor"; +const char PROGRESS_CACHED_COLOR[] = "cachedColor"; +const char PROGRESS_BACKGROUND_COLOR[] = "trackColor"; +const char PROGRESS_VALUE[] = "value"; +const char PROGRESS_CACHED_VALUE[] = "cachedValue"; +const char PROGRESS_MAX[] = "max"; +const char PROGRESS_MIN[] = "min"; +const char PROGRESS_THICKNESS[] = "thickness"; +const char PROGRESS_TYPE[] = "type"; + +// transform constants +const char TRANSFORM_NAME[] = "Transform"; +const char SCALE_VALUE[] = "scaleValue"; +const char ANGLE_VALUE[] = "angleValue"; +const char ORIGIN[] = "origin"; +const char TRANSLATE[] = "translate"; +ACE_EXPORT const char SCALE[] = "scale"; +const char ROTATE[] = "rotate"; +const char PARAM[] = "parameter"; +const char PARAM_X[] = "px"; +const char PARAM_Y[] = "py"; +const char PARAM_Z[] = "pz"; +const char TRANSFORM[] = "transform"; +const char CENTER[] = "center"; + +// wrap constants +const char WRAP_NAME[] = "Wrap"; +const char DIRECTION[] = "direction"; +const char SPACING[] = "space"; +const char CONTENT_SPACING[] = "contentSpace"; +const char ALIGNMENT[] = "alignment"; +const char MAIN_ALIGNMENT[] = "mainAlignment"; +const char CROSS_ALIGNMENT[] = "crossAlignment"; + +// checkable constants +const char CHECKBOX_NAME[] = "Checkbox"; +const char SWITCH_NAME[] = "Switch"; +const char RADIO_NAME[] = "Radio"; +const char CHECKABLE_VALUE[] = "value"; +const char RADIO_GROUP_VALUE[] = "groupValue"; +const char CHECKABLE_ON_CHANGED_EVENT[] = "onChanged"; +const char CHECKABLE_POINT_COLOR[] = "pointColor"; +const char CHECKABLE_ACTIVE_COLOR[] = "activeColor"; +const char CHECKABLE_INACTIVE_COLOR[] = "inactiveColor"; +const char CHECKABLE_FOCUS_COLOR[] = "focusColor"; + +// popup constants +const char POPUP_NAME[] = "Popup"; +const char POPUP_COMPOSED_ID[] = "id"; +const char POPUP_COMPOSED_NAME[] = "name"; +const char POPUP_PLACEMENT[] = "placement"; +const char POPUP_MASK_COLOR[] = "maskColor"; +const char POPUP_ON_VISIBILITY_CHANGE[] = "onVisibilityChange"; + +// marquee constants +const char MARQUEE_NAME[] = "Marquee"; +const char MARQUEE_VALUE[] = "value"; +const char MARQUEE_DIRECTION[] = "direction"; +const char MARQUEE_DIRECTION_LEFT[] = "left"; +const char MARQUEE_DIRECTION_RIGHT[] = "right"; +const char MARQUEE_SCROLL_AMOUNT[] = "scrollAmount"; +const char MARQUEE_LOOP[] = "loop"; +const char MARQUEE_BOUNCE[] = "bounce"; +const char MARQUEE_FINISH[] = "finish"; +const char MARQUEE_START[] = "start"; + +// rating constants +const char RATING_NAME[] = "Rating"; +const char RATING_SCORE[] = "ratingScore"; +const char RATING_BOTTOM_SCORE[] = "bottomScore"; +const char RATING_FOREGROUND_SRC[] = "foregroundSrc"; +const char RATING_SECONDARY_SRC[] = "secondarySrc"; +const char RATING_BACKGROUND_SRC[] = "backgroundSrc"; +const char STEP_SIZE[] = "stepSize"; +const char STAR_NUM[] = "starNum"; +const char RATING_WIDTH[] = "width"; +const char RATING_HEIGHT[] = "height"; +const char RATING_HORIZONTAL_PADDING[] = "paddingHorizontal"; +const char RATING_VERTICAL_PADDING[] = "paddingVertical"; +const char RATING_INDICATOR[] = "isIndicator"; +const char RATING_ON_CHANGE[] = "onChange"; +const int32_t DEFAULT_RATING_STAR_NUM = 5; +const int32_t DEFAULT_INDICATOR_VALUE = 0; +const int32_t DEFAULT_NO_INDICATOR_VALUE = 0; +const uint32_t RATING_FOCUS_BOARD_COLOR = 0xE6FFFFFF; +const double DEFAULT_RATING_SCORE = 0.0; +const double DEFAULT_RATING_WIDTH = -1.0; +const double DEFAULT_RATING_HEIGHT = -1.0; +const double DEFAULT_RATING_STEP_SIZE = 0.5; +const double DEFAULT_RATING_HORIZONTAL_PADDING = 0.0; +const double DEFAULT_RATING_VERTICAL_PADDING = 0.0; + +// loading progress constants +const char LOADING_PROGRESS_NAME[] = "LoadingProgress"; +const char DIAMETER[] = "diameter"; + +// video constants +const char VIDEO_NAME[] = "Video"; +const char VIDEO_SRC[] = "src"; +const char VIDEO_AUTOPLAY[] = "autoplay"; +const char VIDEO_POSTER[] = "poster"; +const char VIDEO_CONTROLS[] = "controls"; +const char VIDEO_MUTED[] = "muted"; +const char VIDEO_FIT[] = "videofit"; +const char VIDEO_PREPARED_EVENT_ID[] = "onPreparedId"; +const char VIDEO_START_EVENT_ID[] = "onStartId"; +const char VIDEO_PAUSE_EVENT_ID[] = "onPauseId"; +const char VIDEO_FINISH_EVENT_ID[] = "onFinishId"; +const char VIDEO_ERROR_EVENT_ID[] = "onErrorId"; +const char VIDEO_SEEKING_EVENT_ID[] = "onSeekingId"; +const char VIDEO_SEEKED_EVENT_ID[] = "onSeekedId"; +const char VIDEO_TIMEUPDATE_EVENT_ID[] = "onTimeUpdateId"; +const char VIDEO_FULLSCREENCHANGE_EVENT_ID[] = "onFullScreenChangeId"; + +// select constants +const char SELECT_NAME[] = "Select"; +const char SELECT_DISABLED[] = "disabled"; +const char SELECT_SELECTED_COLOR[] = "selectedColor"; +const char SELECT_CLICKED_COLOR[] = "clickedColor"; +const char SELECT_DISABLED_COLOR[] = "disabledColor"; +const char SELECT_ON_CHANGED[] = "onChanged"; +const char SELECT_TIP_TEXT[] = "tipText"; +const char SELECT_OPTION_SIZE[] = "optionSize"; +const char SELECT_OPTIONS[] = "options"; +const char SELECT_OPTION_ICON[] = "icon"; +const char SELECT_OPTION_VALUE[] = "value"; +const char SELECT_OPTION_TEXT[] = "text"; +const char SELECT_OPTION_SELECTED[] = "selected"; +const uint32_t SELECT_DEFAULT_OPTION_SIZE = static_cast(INT32_MAX); +const uint32_t SELECT_INVALID_INDEX = 0xFFFFFFFF; +const double SELECT_DEFAULT_POPUP_SHADOW_WIDTH = 5.0; +const double SELECT_DEFAULT_POPUP_BORDER_WIDTH = 1.0; + +// clip constants +const char CLIP_NAME[] = "Clip"; + +// divider constants +const char DIVIDER_NAME[] = "Divider"; +const char DIVIDER_STROKE_WIDTH[] = "strokeWidth"; +const char DIVIDER_COLOR[] = "color"; +const char DIVIDER_VERTICAL[] = "vertical"; + +// columSplit constants +const double DEFAULT_SPLIT_HEIGHT = 2.0; + +} // namespace OHOS::Ace diff --git a/frameworks/core/pipeline/base/constants.h b/frameworks/core/pipeline/base/constants.h new file mode 100644 index 00000000..87506dea --- /dev/null +++ b/frameworks/core/pipeline/base/constants.h @@ -0,0 +1,605 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_CONSTANTS_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_CONSTANTS_H + +#include + +#include "frameworks/base/utils/macros.h" + +namespace OHOS::Ace { + +// base constants +extern const char CLASS_NAME[]; +extern const char NAME[]; +extern const char CHILD[]; + +// common constants +extern const char DISABLED[]; +extern const char WIDTH[]; +extern const char HEIGHT[]; +extern const char ALIGN[]; + +// image constants +extern const char IMAGE_NAME[]; +extern const char IMAGE_SRC[]; +extern const char IMAGE_ALT[]; +extern const char IMAGE_WIDTH[]; +extern const char IMAGE_HEIGHT[]; +extern const char IMAGE_ALIGNMENT[]; +extern const char IMAGE_POSITION[]; +extern const char IMAGE_POSITION_SIZE_X[]; +extern const char IMAGE_POSITION_SIZE_Y[]; +extern const char IMAGE_POSITION_VALUE_X[]; +extern const char IMAGE_POSITION_VALUE_Y[]; +extern const char IMAGE_SIZE[]; +extern const char IMAGE_SIZE_VALUE[]; +extern const char IMAGE_SIZE_TYPE[]; +extern const char IMAGE_REPEAT[]; +extern const char IMAGE_FIT[]; +extern const char IMAGE_COLOR[]; +extern const char SRC_TYPE[]; +extern const char IMAGE_ON_LOAD_SUCCESS[]; +extern const char IMAGE_ON_LOAD_FAIL[]; +extern const char IMAGE_ALT_BLANK[]; +extern const uint32_t ALT_COLOR_GREY; + +// text constants +extern const char TEXT_NAME[]; +extern const char TEXT_DATA[]; +extern const char TEXT_DIRECTION[]; +extern const char TEXT_COLOR[]; +extern const char TEXT_DECORATION[]; +extern const char TEXT_FONT_WEIGHT[]; +extern const char TEXT_FONT_SIZE[]; +extern const char TEXT_FONT_STYLE[]; +extern const char TEXT_BASE_LINE[]; +extern const char TEXT_FONT_FAMILIES[]; +extern const char TEXT_MAX_LINES[]; +extern const char TEXT_ALIGN[]; +extern const char TEXT_OVERFLOW[]; +extern const char TEXT_WORD_SPACING[]; +extern const char TEXT_LINE_HEIGHT[]; +extern const char TEXT_LETTER_SPACING[]; +extern const char TEXT_STYLE[]; +extern const char TEXT_SPAN[]; +extern const char TEXT_SPAN_NAME[]; +extern const char TEXT_ADAPT[]; +extern const char TEXT_ADAPT_MIN_FONTSIZE[]; + +// text style constants +extern const char TEXT_STYLE_NAME[]; + +// textField constants +extern const char TEXT_FIELD_NAME[]; +extern const char TEXT_FIELD_TYPE[]; +extern const char OBSCURE_TEXT[]; +extern const char TEXT_FIELD_ENABLED[]; +extern const char TEXT_FIELD_MAX_LENGTH[]; +extern const char TEXT_FIELD_MAX_LINES[]; +extern const char TEXT_FIELD_AUTO_FOCUS[]; +extern const char TEXT_FIELD_ACTION_LABEL[]; +extern const char TEXT_FIELD_ACTION[]; +extern const char CURSOR_COLOR[]; +extern const char TEXT_FIELD_PLACEHOLDER[]; +extern const char TEXT_FIELD_PLACEHOLDER_COLOR[]; +extern const char TEXT_FIELD_EXTEND[]; +extern const char TEXT_FIELD_ICON_IMAGE[]; +// events +extern const char TEXT_FIELD_ON_TEXT_CHANGE[]; +extern const char TEXT_FIELD_ON_FINISH_INPUT[]; +extern const char TEXT_FIELD_ON_TAP[]; + +// color constants +extern const char COLOR[]; +extern const char COLOR_NAME[]; +extern const char COLOR_VALUE[]; +extern const char COLOR_RED[]; +extern const char COLOR_GREEN[]; +extern const char COLOR_BLUE[]; +extern const char COLOR_ALPHA[]; +extern const char COLOR_OPACITY[]; + +// shadow constants +extern const char SHADOW_CLASSNAME[]; +extern const char OFFSET_CLASSNAME[]; +extern const char SHADOW[]; +extern const char OFFSET[]; +extern const char HORIZONTAL_OFFSET[]; +extern const char VERTICAL_OFFSET[]; +extern const char RADIUS[]; +extern const char SPREAD[]; +extern const char ELEVATION[]; + +// compose constants +extern const char COMPOSE_NAME[]; +extern const char COMPOSE_ID[]; +extern const char COMPOSE_DATA[]; + +// box constants +extern const char BOX_NAME[]; +extern const char BOX_CONSTRAINTS[]; +extern const char BOX_BACK_DECORATION[]; +extern const char BOX_FRONT_DECORATION[]; +extern const char BOX_MARGIN[]; +extern const char BOX_PADDING[]; +extern const char BOX_DELIVER_MIN_TO_CHILD[]; + +// flex constants +extern const char COLUMN_NAME[]; +extern const char ROW_NAME[]; +extern const char MAIN_AXIS_ALIGN[]; +extern const char CROSS_AXIS_ALIGN[]; +extern const char MAIN_AXIS_SIZE[]; + +// flex item constants +extern const char FLEX_ITEM_NAME[]; +extern const char FLEX_GROW[]; +extern const char FLEX_SHRINK[]; +extern const char FLEX_BASIS[]; + +// stack constants +extern const char STACK_NAME[]; +extern const char STACK_ALIGNMENT[]; +extern const char STACK_FIT[]; +extern const char STACK_OVERFLOW[]; +extern const char STACK_MAIN_STACK_SIZE[]; + +// positioned constants +extern const char POSITIONED_NAME[]; +extern const char POSITIONED_LEFT[]; +extern const char POSITIONED_RIGHT[]; +extern const char POSITIONED_HEIGHT[]; +extern const char POSITIONED_WIDTH[]; +extern const char POSITIONED_TOP[]; +extern const char POSITIONED_BOTTOM[]; + +// list constants +extern const char LIST_NAME[]; +extern const char LIST_COUNT[]; +extern const char LIST_EVENT_REQUEST_ITEM[]; +extern const char LIST_DIRECTION[]; +extern const char LIST_CACHED_COUNT[]; +extern const char LIST_BEGIN_INDEX[]; +extern const char LIST_END_INDEX[]; +extern const char LIST_REPEATED_LENGTH[]; +extern const char LIST_INDEX_OFFSET[]; +extern const char LIST_SCROLL_PAGE[]; +extern const char LIST_POSITION[]; +// list item constants +extern const char LIST_ITEM_NAME[]; +extern const char LIST_ITEM_TYPE[]; +// edge effect +extern const char EDGE_EFFECT[]; +extern const char FADE_COLOR[]; +// grid constants +extern const char GRID_NAME[]; +extern const char GRID_WIDTH[]; +extern const char GRID_HEIGHT[]; +extern const char GRID_ITEM_COUNT[]; +extern const char GRID_INITIAL_ITEM[]; +extern const char GRID_COLUMN_COUNT[]; +extern const char GRID_COLUMN_EXTENT[]; +extern const char GRID_EVENT_REQUEST_ITEM[]; +extern const char GRID_SCROLL_PAGE[]; +extern const char GRID_DIRECTION[]; +extern const char GRID_ALIGN[]; +extern const char GRID_CACHED_COUNT[]; +extern const char GRID_ITEM_NAME[]; +extern const char GRID_COLUMN_SPAN[]; +extern const char GRID_ROW_SPAN[]; +extern const char GRID_ROW_COUNT[]; +extern const char GRID_ROW_INDEX[]; +extern const char GRID_COLUMN_INDEX[]; +extern const char GRID_LAYOUT_NAME[]; +extern const char GRID_LAYOUT_ITEM_NAME[]; +extern const int32_t DEFAULT_DIRECTION; // FlexDirection::COLUMN +extern const int32_t DEFAULT_ALIGN; // FlexAlign::STRETCH +ACE_EXPORT extern const int32_t DEFAULT_COLUMN_COUNT; +ACE_EXPORT extern const int32_t DEFAULT_COLUMN_EXTENT; +extern const int32_t DEFAULT_COLUMN_SPAN; +extern const int32_t DEFAULT_ITEM_COUNT; +extern const int32_t DEFAULT_INITIAL_ITEM; +extern const int32_t DEFAULT_CACHED_COUNT; +ACE_EXPORT extern const double DEFAULT_GRID_WIDTH; +ACE_EXPORT extern const double DEFAULT_GRID_HEIGHT; +// scrollBar +extern const char SCROLL_BAR_DISPLAY_MODE[]; +extern const char SCROLL_BAR_SHAPE_MODE[]; + +// edge constants +extern const char PADDING_NAME[]; +extern const char PADDING[]; +extern const char MARGIN[]; +extern const char EDGE_NAME[]; +extern const char EDGE_VALUE[]; +extern const char EDGE_LEFT[]; +extern const char EDGE_TOP[]; +extern const char EDGE_RIGHT[]; +extern const char EDGE_BOTTOM[]; + +// border constants +extern const char BORDER[]; +extern const char BORDER_NAME[]; +extern const char BORDER_VALUE[]; +extern const char BORDER_LEFT[]; +extern const char BORDER_TOP[]; +extern const char BORDER_RIGHT[]; +extern const char BORDER_BOTTOM[]; +extern const char BORDER_RADIUS_VALUE[]; +extern const char BORDER_TOP_LEFT[]; +extern const char BORDER_TOP_RIGHT[]; +extern const char BORDER_BOTTOM_LEFT[]; +extern const char BORDER_BOTTOM_RIGHT[]; + +// borderEdge constants +extern const char BORDER_EDGE_NAME[]; +extern const char BORDER_EDGE_WIDTH[]; +extern const char BORDER_EDGE_COLOR[]; +extern const char BORDER_EDGE_STYLE[]; + +// radius constants +extern const char RADIUS_NAME[]; +extern const char RADIUS_VALUE[]; +extern const char RADIUS_X[]; +extern const char RADIUS_Y[]; + +// decoration constants +extern const char DECORATION_NAME[]; +extern const char SHADOW_LIST[]; +extern const char BACKGROUND_IMAGE[]; +extern const char BACKGROUND_COLOR[]; +extern const char DECORATION_BORDER[]; +extern const char DECORATION_PADDING[]; +extern const char DECORATION_GRADIENT[]; + +// backgroundImage constants +extern const char BACKGROUND_IMAGE_NAME[]; +extern const char BACKGROUND_SRC[]; +extern const char DECORATION_IMAGE_ALIGNMENT[]; + +// gradient constants +extern const char GRADIENT_NAME[]; +extern const char GRADIENT_DIRECTION[]; +extern const char GRADIENT_REPEAT[]; +extern const char GRADIENT_ANGLE[]; +extern const char GRADIENT_COLOR_LIST[]; +extern const char GRADIENT_DIMENSION[]; +extern const char GRADIENT_DIMENSION_VALUE[]; +extern const char GRADIENT_DIMENSION_UNIT[]; +extern const char GRADIENT_COLOR[]; +extern const char GRADIENT_HAS_VALUE[]; + +// align constants +extern const char ALIGN_NAME[]; +extern const char HORIZONTAL[]; +extern const char VERTICAL[]; +extern const char HORIZONTAL_VALUE_LEFT[]; +extern const char HORIZONTAL_VALUE_CENTER[]; +extern const char HORIZONTAL_VALUE_RIGHT[]; +extern const char VERTICAL_VALUE_TOP[]; +extern const char VERTICAL_VALUE_CENTER[]; +extern const char VERTICAL_VALUE_BOTTOM[]; + +// tween constants +extern const char TWEEN_NAME[]; +extern const char DURATION[]; +extern const char DELAY[]; +extern const char REVERSE[]; +extern const char ITERATION[]; +extern const char FILL_MODE[]; +extern const char CURVE[]; +extern const char TWEEN_OPTION[]; +extern const char OPTION_SCALE[]; +extern const char OPTION_SCALE_X[]; +extern const char OPTION_SCALE_Y[]; +extern const char OPTION_TRANSLATE[]; +extern const char OPTION_TRANSLATE_X[]; +extern const char OPTION_TRANSLATE_Y[]; +extern const char OPTION_ROTATE_Z[]; +extern const char OPTION_ROTATE_X[]; +extern const char OPTION_ROTATE_Y[]; +extern const char OPTION_OPACITY[]; + +// slider constants +extern const char SLIDER_NAME[]; +extern const char VALUE[]; +extern const char SLIDER_MIN[]; +extern const char SLIDER_MAX[]; +extern const char SLIDER_STEP[]; +extern const char SLIDER_BAR_HEIGHT[]; +extern const char SLIDER_BAR_WIDTH[]; +extern const char SLIDER_BLOCK_RADIUS[]; +extern const char SLIDER_SELECTED_COLOR[]; +extern const char SLIDER_BAR_BACKGROUND_COLOR[]; +extern const char SLIDER_BLOCK_COLOR[]; +extern const char SLIDER_PADDING[]; +extern const char ON_MOVE_END_ID[]; +extern const char ON_CLICKED_ID[]; + +// swiper constants +extern const char SWIPER_NAME[]; +extern const char SWIPER_ON_CHANGED[]; +extern const char SWIPER_INDEX[]; +extern const char SWIPER_SHOW_INDICATOR[]; +extern const char SWIPER_DURATION[]; +extern const char SWIPER_LOOP[]; +extern const char SWIPER_AUTO_PLAY[]; +extern const char SWIPER_AUTO_PLAY_INTERVAL[]; +extern const char SWIPER_IS_VERTICAL[]; +extern const char SWIPER_INDICATOR_COLOR[]; +extern const char SWIPER_INDICATOR_SELECTED_COLOR[]; +extern const char SWIPER_INDICATOR_SIZE[]; +extern const char SWIPER_INDICATOR_SELECTED_SIZE[]; +extern const char SWIPER_INDICATOR_TOP[]; +extern const char SWIPER_INDICATOR_LEFT[]; +extern const char SWIPER_INDICATOR_BOTTOM[]; +extern const char SWIPER_INDICATOR_RIGHT[]; + +// button constants +extern const char BUTTON_NAME[]; +extern const char BUTTON_WIDTH[]; +extern const char BUTTON_HEIGHT[]; +extern const char BUTTON_RECT_RADIUS[]; +extern const char BUTTON_TYPE[]; +extern const char BUTTON_DISABLED_STATE[]; +extern const char BUTTON_AUTO_FOCUS[]; +extern const char BUTTON_BACKGROUND_COLOR[]; +extern const char BUTTON_CLICKED_COLOR[]; +extern const char BUTTON_DISABLED_COLOR[]; +extern const char BUTTON_FOCUS_COLOR[]; +extern const char BUTTON_CLICKED_EVENT_ID[]; +extern const char BUTTON_BORDER[]; +extern const char BUTTON_SHADOW[]; + +// raw event components. +extern const char TOUCH_LISTENER_NAME[]; +extern const char ON_TOUCH_DOWN_EVENT[]; +extern const char ON_TOUCH_MOVE_EVENT[]; +extern const char ON_TOUCH_UP_EVENT[]; +extern const char ON_TOUCH_CANCEL_EVENT[]; + +// gesture event components. +extern const char GESTURE_LISTENER_NAME[]; +extern const char ON_CLICK_EVENT[]; +extern const char ON_LONG_PRESS_EVENT[]; +extern const char ON_HORIZONTAL_DRAG_START_EVENT[]; +extern const char ON_HORIZONTAL_DRAG_UPDATE_EVENT[]; +extern const char ON_HORIZONTAL_DRAG_END_EVENT[]; +extern const char ON_HORIZONTAL_DRAG_CANCEL_EVENT[]; +extern const char ON_VERTICAL_DRAG_START_EVENT[]; +extern const char ON_VERTICAL_DRAG_UPDATE_EVENT[]; +extern const char ON_VERTICAL_DRAG_END_EVENT[]; +extern const char ON_VERTICAL_DRAG_CANCEL_EVENT[]; +extern const char ON_FREE_DRAG_START_EVENT[]; +extern const char ON_FREE_DRAG_UPDATE_EVENT[]; +extern const char ON_FREE_DRAG_END_EVENT[]; +extern const char ON_FREE_DRAG_CANCEL_EVENT[]; + +// focusable components +extern const char FOCUSABLE_NAME[]; +extern const char ON_FOCUS_EVENT[]; +extern const char ON_BLUR_EVENT[]; +extern const char ON_KEY_EVENT[]; +extern const char BOX_STYLE[]; +extern const char FOCUSED_BOX_STYLE[]; +extern const char AUTO_FOCUSED[]; + +// texture constants +extern const char TEXTURE_NAME[]; +extern const char TEXTURE_SRC_ID[]; +extern const char TEXTURE_SRC_WIDTH[]; +extern const char TEXTURE_SRC_HEIGHT[]; +extern const char TEXTURE_FIT[]; + +// display constants +extern const char DISPLAY_NAME[]; +extern const char DISPLAY_VISIBLE[]; +extern const char DISPLAY_OPACITY[]; + +// tab constants +extern const char TAB_BAR_NAME[]; +extern const char TAB_CONTENT_NAME[]; +extern const char TAB_NAME[]; +extern const char TAB_TABS[]; +extern const char TAB_INDEX[]; +extern const char TAB_IS_VERTICAL[]; +extern const char TAB_CONTROLLER_ID[]; +extern const char TAB_INDICATOR[]; +extern const char TAB_INDICATOR_WIDTH[]; +extern const char TAB_CONTENT_ON_CHANGE[]; +extern const char TAB_CONTENT_SCROLLABEL[]; +extern const char TAB_INDICATOR_COLOR[]; +extern const char TAB_INDICATOR_PADDING[]; +extern const char TAB_INDICATOR_SIZE[]; +extern const char TAB_LABEL_COLOR[]; +extern const char TAB_UNSELECTED_LABEL_COLOR[]; +extern const char TAB_LABEL_STYLE[]; +extern const char TAB_UNSELECTED_LABEL_STYLE[]; +extern const char TAB_LABEL_PADDING[]; +extern const char TAB_MODE[]; +extern const char TAB_ITEM_TEXT[]; +extern const char TAB_ITEM_ICON[]; + +// dialog constants +extern const char DIALOG_NAME[]; +extern const char DIALOG_TITLE[]; +extern const char DIALOG_TITLE_PADDING[]; +extern const char DIALOG_CONTENT[]; +extern const char DIALOG_CONTENT_PADDING[]; +extern const char DIALOG_BACKGROUND_COLOR[]; +extern const char DIALOG_ACTIONS[]; +extern const char DIALOG_ACTION_TEXT[]; +extern const char DIALOG_ACTION_COLOR[]; +extern const char DIALOG_AUTO_CANCEL[]; + +// scroll constants +extern const char SCROLL_NAME[]; +extern const char SCROLL_DIRECTION[]; +extern const char SCROLL_POSITION[]; +extern const char SCROLL_PADDING[]; +extern const char SCROLL_PAGE[]; + +// progress constants +extern const char PROGRESS_NAME[]; +extern const char PROGRESS_SELECT_COLOR[]; +extern const char PROGRESS_CACHED_COLOR[]; +extern const char PROGRESS_BACKGROUND_COLOR[]; +extern const char PROGRESS_VALUE[]; +extern const char PROGRESS_CACHED_VALUE[]; +extern const char PROGRESS_MAX[]; +extern const char PROGRESS_MIN[]; +extern const char PROGRESS_THICKNESS[]; +extern const char PROGRESS_TYPE[]; + +// transform constants +extern const char TRANSFORM_NAME[]; +extern const char SCALE_VALUE[]; +extern const char ANGLE_VALUE[]; +extern const char ORIGIN[]; +extern const char TRANSLATE[]; +extern const char SCALE[]; +extern const char ROTATE[]; +extern const char PARAM[]; +extern const char PARAM_X[]; +extern const char PARAM_Y[]; +extern const char PARAM_Z[]; +extern const char TRANSFORM[]; +extern const char CENTER[]; + +// wrap constants +extern const char WRAP_NAME[]; +extern const char DIRECTION[]; +extern const char SPACING[]; +extern const char CONTENT_SPACING[]; +extern const char ALIGNMENT[]; +extern const char MAIN_ALIGNMENT[]; +extern const char CROSS_ALIGNMENT[]; + +// checkable constants +extern const char CHECKBOX_NAME[]; +extern const char SWITCH_NAME[]; +extern const char RADIO_NAME[]; +extern const char CHECKABLE_VALUE[]; +extern const char RADIO_GROUP_VALUE[]; +extern const char CHECKABLE_ON_CHANGED_EVENT[]; +extern const char CHECKABLE_POINT_COLOR[]; +extern const char CHECKABLE_ACTIVE_COLOR[]; +extern const char CHECKABLE_INACTIVE_COLOR[]; +extern const char CHECKABLE_FOCUS_COLOR[]; + +// popup constants +extern const char POPUP_NAME[]; +extern const char POPUP_COMPOSED_ID[]; +extern const char POPUP_COMPOSED_NAME[]; +extern const char POPUP_PLACEMENT[]; +extern const char POPUP_MASK_COLOR[]; +extern const char POPUP_ON_VISIBILITY_CHANGE[]; + +// marquee constants +extern const char MARQUEE_NAME[]; +extern const char MARQUEE_VALUE[]; +extern const char MARQUEE_DIRECTION[]; +extern const char MARQUEE_DIRECTION_LEFT[]; +extern const char MARQUEE_DIRECTION_RIGHT[]; +extern const char MARQUEE_SCROLL_AMOUNT[]; +extern const char MARQUEE_LOOP[]; +extern const char MARQUEE_BOUNCE[]; +extern const char MARQUEE_FINISH[]; +extern const char MARQUEE_START[]; + +// rating constants +extern const char RATING_NAME[]; +extern const char RATING_SCORE[]; +extern const char RATING_BOTTOM_SCORE[]; +extern const char RATING_FOREGROUND_SRC[]; +extern const char RATING_SECONDARY_SRC[]; +extern const char RATING_BACKGROUND_SRC[]; +extern const char STEP_SIZE[]; +extern const char STAR_NUM[]; +extern const char RATING_WIDTH[]; +extern const char RATING_HEIGHT[]; +extern const char RATING_HORIZONTAL_PADDING[]; +extern const char RATING_VERTICAL_PADDING[]; +extern const char RATING_INDICATOR[]; +extern const char RATING_ON_CHANGE[]; +extern const int32_t DEFAULT_RATING_STAR_NUM; +extern const int32_t DEFAULT_INDICATOR_VALUE; +extern const int32_t DEFAULT_NO_INDICATOR_VALUE; +extern const uint32_t RATING_FOCUS_BOARD_COLOR; +extern const double DEFAULT_RATING_SCORE; +extern const double DEFAULT_RATING_WIDTH; +extern const double DEFAULT_RATING_HEIGHT; +extern const double DEFAULT_RATING_STEP_SIZE; +extern const double DEFAULT_RATING_HORIZONTAL_PADDING; +extern const double DEFAULT_RATING_VERTICAL_PADDING; + +// loading progress constants +extern const char LOADING_PROGRESS_NAME[]; +extern const char DIAMETER[]; + +// video constants +extern const char VIDEO_NAME[]; +extern const char VIDEO_SRC[]; +extern const char VIDEO_AUTOPLAY[]; +extern const char VIDEO_POSTER[]; +extern const char VIDEO_CONTROLS[]; +extern const char VIDEO_MUTED[]; +extern const char VIDEO_FIT[]; +extern const char VIDEO_PREPARED_EVENT_ID[]; +extern const char VIDEO_START_EVENT_ID[]; +extern const char VIDEO_PAUSE_EVENT_ID[]; +extern const char VIDEO_FINISH_EVENT_ID[]; +extern const char VIDEO_ERROR_EVENT_ID[]; +extern const char VIDEO_SEEKING_EVENT_ID[]; +extern const char VIDEO_SEEKED_EVENT_ID[]; +extern const char VIDEO_TIMEUPDATE_EVENT_ID[]; +extern const char VIDEO_FULLSCREENCHANGE_EVENT_ID[]; + +// select constants +extern const char SELECT_NAME[]; +extern const char SELECT_DISABLED[]; +extern const char SELECT_SELECTED_COLOR[]; +extern const char SELECT_CLICKED_COLOR[]; +extern const char SELECT_DISABLED_COLOR[]; +extern const char SELECT_ON_CHANGED[]; +extern const char SELECT_TIP_TEXT[]; +extern const char SELECT_OPTION_SIZE[]; +extern const char SELECT_OPTIONS[]; +extern const char SELECT_OPTION_ICON[]; +extern const char SELECT_OPTION_VALUE[]; +extern const char SELECT_OPTION_TEXT[]; +extern const char SELECT_OPTION_SELECTED[]; +extern const uint32_t SELECT_DEFAULT_OPTION_SIZE; +extern const uint32_t SELECT_INVALID_INDEX; +extern const double SELECT_DEFAULT_POPUP_SHADOW_WIDTH; +extern const double SELECT_DEFAULT_POPUP_BORDER_WIDTH; + +// clip constants +extern const char CLIP_NAME[]; + +// divider constants +extern const char DIVIDER_NAME[]; +extern const char DIVIDER_STROKE_WIDTH[]; +extern const char DIVIDER_COLOR[]; +extern const char DIVIDER_VERTICAL[]; + +// columSplit constants +extern const double DEFAULT_SPLIT_HEIGHT; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_CONSTANTS_H diff --git a/frameworks/core/pipeline/base/element.cpp b/frameworks/core/pipeline/base/element.cpp new file mode 100644 index 00000000..ca35a2ad --- /dev/null +++ b/frameworks/core/pipeline/base/element.cpp @@ -0,0 +1,427 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/pipeline/base/element.h" + +#include "base/log/dump_log.h" +#include "base/log/log.h" +#include "core/common/frontend.h" +#include "core/components/focus_animation/focus_animation_element.h" +#include "core/components/page/page_element.h" +#include "core/components/shadow/shadow_element.h" +#include "core/pipeline/base/component.h" +#include "core/pipeline/base/composed_element.h" +#include "core/pipeline/pipeline_context.h" + +namespace OHOS::Ace { + +Element::~Element() +{ + for (const auto& child : children_) { + DetachChild(child); + } +} + +void Element::AddChild(const RefPtr& child, int32_t slot) +{ + if (child != nullptr) { + const auto& it = std::find(children_.begin(), children_.end(), child); + if (it == children_.end()) { + auto pos = children_.begin(); + std::advance(pos, slot); + children_.insert(pos, child); + child->SetParent(AceType::WeakClaim(this)); + child->SetSlot(slot); + Apply(child); + } else { + LOGW("Element exist AddChild failed"); + } + } +} + +void Element::RemoveChild(const RefPtr& child) +{ + if (child) { + DetachChild(child); + children_.remove(child); + } +} + +void Element::DeactivateChild(const RefPtr& child) +{ + if (child) { + RefPtr context = context_.Upgrade(); + if (context) { + child->parent_ = nullptr; + context->AddDeactivateElement(child->GetRetakeId(), child); + } + auto focusNode = AceType::DynamicCast(child); + if (focusNode) { + focusNode->RemoveSelf(); + } + child->Deactivate(); + children_.remove(child); + } +} + +void Element::DetachChild(const RefPtr& child) +{ + auto focusNode = AceType::DynamicCast(child); + if (focusNode) { + focusNode->RemoveSelf(); + } + child->Detached(); +} + +void Element::Rebuild() +{ + // When rebuild comes, newComponent_ should not be null, and will go to these 3 steps: + // 1. Update self using new component + // 2. PerformBuild will build and update child recursively + // 3. Finish update and release the new component + Update(); + PerformBuild(); + SetNewComponent(nullptr); +} + +void Element::DumpTree(int32_t depth) +{ + if (DumpLog::GetInstance().GetDumpFile()) { + Dump(); + DumpLog::GetInstance().AddDesc(std::string("retakeID: ").append(std::to_string(GetRetakeId()))); + DumpLog::GetInstance().Print(depth, AceType::TypeName(this), children_.size()); + } + + for (const auto& item : children_) { + item->DumpTree(depth + 1); + } +} + +void Element::Dump() {} + +bool Element::CanUpdate(const RefPtr& newComponent) +{ + // The raw ptr is persistent during app process. + return componentTypeName_ == AceType::TypeName(newComponent); +} + +inline RefPtr Element::DoUpdateChildWithNewComponent( + const RefPtr& child, const RefPtr& newComponent, int32_t slot) +{ + child->SetNewComponent(newComponent); + child->SetSlot(slot); + child->Update(); + child->PerformBuild(); + return child; +} + +RefPtr Element::UpdateChild(const RefPtr& child, const RefPtr& newComponent, int32_t slot) +{ + // Considering 4 cases: + // 1. child == null && newComponent == null --> do nothing + // 2. child == null && newComponent != null --> create new child configured with newComponent + // 3. child != null && newComponent == null --> remove old child + // 4. child != null && newComponent != null --> update old child with new configuration if possible(determined by + // [Element::CanUpdate]), or remove the old child and create new one configured with newComponent. + if (!child) { + if (!newComponent) { + return nullptr; + } else { + return InflateComponent(newComponent, slot); + } + } else { + if (!newComponent) { + DeactivateChild(child); + return nullptr; + } else { + if (child->CanUpdate(newComponent)) { + auto context = context_.Upgrade(); + bool declarative = context ? context->GetIsDeclarative() : false; + if (!declarative) { + // old, non-declarative code path + return DoUpdateChildWithNewComponent(child, newComponent, slot); + } else { + // Declarative path + if (!newComponent->IsStatic()) { + // non static component + if (newComponent->HasElementFunction()) { + newComponent->CallElementFunction(AceType::RawPtr(child)); + } + DoUpdateChildWithNewComponent(child, newComponent, slot); + child->SetNewComponent(nullptr); + return child; + } else { + // Declarative && Component marked as static + child->SetSlot(slot); + auto traverseChild = child; + while (AceType::TypeName() == AceType::TypeName(traverseChild)) { + // this child is a composedelement + // update its only child slot + // if the child is again composed component + // do the same until we hit a renderelement + traverseChild = traverseChild->GetFirstChild(); + traverseChild->SetSlot(slot); + } + LOGD("skipping update for static child: %s", child->GetTag()); + child->SetSlot(slot); + return child; + } + } + } else { + // Can not update + RefPtr context = context_.Upgrade(); + auto needRebuildFocusElement = AceType::DynamicCast(GetFocusScope()); + if (context && needRebuildFocusElement) { + context->AddNeedRebuildFocusElement(needRebuildFocusElement); + } + DeactivateChild(child); + return InflateComponent(newComponent, slot); + } + } + } +} + +void Element::Mount(const RefPtr& parent, int32_t slot) +{ + SetParent(parent); + SetDepth(parent != nullptr ? parent->GetDepth() + 1 : 1); + SetPipelineContext(parent != nullptr ? parent->context_ : context_); + Prepare(parent); + if (parent) { + parent->AddChild(AceType::Claim(this), slot); + AddToFocus(); + } + Rebuild(); +} + +void Element::AddToFocus() +{ + auto parent = parent_.Upgrade(); + if (!parent) { + return; + } + auto focusNode = AceType::DynamicCast(this); + if (focusNode) { + auto scope = parent->GetFocusScope(); + if (scope) { + auto brothers = parent->GetChildren(); + auto iter = std::find(brothers.begin(), brothers.end(), AceType::Claim(this)); + if (iter == brothers.end()) { + return; + } + ++iter; + while (iter != brothers.end()) { + auto nextFocusNode = AceType::DynamicCast(*iter); + if (nextFocusNode) { + break; + } + ++iter; + } + if (iter != brothers.end()) { + scope->AddChild(AceType::Claim(focusNode), AceType::DynamicCast(*iter)); + } else { + scope->AddChild(AceType::Claim(focusNode)); + } + focusNode->SetParentFocusable(scope->FocusNode::IsFocusable()); + } + } + + auto focusAnimation = AceType::DynamicCast(this); + if (focusAnimation) { + auto context = context_.Upgrade(); + if (context) { + context->PushFocusAnimation(AceType::Claim(this)); + } + } + + auto shadow = AceType::DynamicCast(this); + if (shadow) { + auto context = context_.Upgrade(); + if (context) { + context->PushShadow(AceType::Claim(this)); + } + } +} + +void Element::MarkDirty() +{ + RefPtr context = context_.Upgrade(); + if (context) { + context->AddDirtyElement(AceType::Claim(this)); + } +} + +void Element::SetUpdateComponent(const RefPtr& newComponent) +{ + SetNewComponent(newComponent); + RefPtr context = context_.Upgrade(); + if (context) { + context->AddDirtyElement(AceType::Claim(this)); + } +} + +const std::list>& Element::GetChildren() const +{ + return children_; +} + +RefPtr Element::GetFirstChild() const +{ + if (children_.empty()) { + return nullptr; + } + return children_.front(); +} + +RefPtr Element::GetLastChild() const +{ + if (children_.empty()) { + return nullptr; + } + return children_.back(); +} + +void Element::SetPipelineContext(const WeakPtr& context) +{ + context_ = context; + OnContextAttached(); +} + +RefPtr Element::InflateComponent(const RefPtr& newComponent, int32_t slot) +{ + // confirm whether there is a reuseable element. + auto retakeElement = RetakeDeactivateElement(newComponent); + if (retakeElement) { + retakeElement->SetNewComponent(newComponent); + retakeElement->SetSlot(slot); + retakeElement->Mount(AceType::Claim(this), slot); + return retakeElement; + } + + RefPtr newChild = newComponent->CreateElement(); + newChild->SetNewComponent(newComponent); + newChild->Mount(AceType::Claim(this), slot); + return newChild; +} + +RefPtr Element::GetFocusScope() +{ + auto rawPtrFocusGroup = AceType::DynamicCast(this); + if (rawPtrFocusGroup) { + return AceType::Claim(rawPtrFocusGroup); + } + + auto rawPtrFocusNode = AceType::DynamicCast(this); + if (rawPtrFocusNode) { + return nullptr; + } + + auto parent = parent_.Upgrade(); + if (parent) { + return parent->GetFocusScope(); + } + + return nullptr; +} + +void Element::SetSlot(int32_t slot) +{ + auto context = context_.Upgrade(); + if (context && context->GetIsDeclarative()) { + bool layoutNeeded = slot_ != slot; + slot_ = slot; + if (GetType() == RENDER_ELEMENT) { + auto renderNode = GetRenderNode(); + if (!renderNode) { + return; + } + + auto parentNode = renderNode->GetParent().Upgrade(); + if (!parentNode) { + return; + } + if (parentNode->GetFirstChild() == parentNode->GetLastChild()) { + // This means it has only one child, no need to update position + // of the rendernode + return; + } + + parentNode->RemoveChild(renderNode); + parentNode->AddChild(renderNode, slot); + if (layoutNeeded) { + parentNode->MarkNeedLayout(); + } + } + } else { + slot_ = slot; + } +} + +RefPtr Element::GetPageElement() +{ + auto pageElement = AceType::DynamicCast(this); + if (pageElement != nullptr) { + return AceType::Claim(pageElement); + } + + auto parent = parent_.Upgrade(); + + if (!parent) { + return nullptr; + } + + return parent->GetPageElement(); +} + +RefPtr Element::RetakeDeactivateElement(const RefPtr& newComponent) +{ + RefPtr context = context_.Upgrade(); + if (context != nullptr) { + return context->GetDeactivateElement(newComponent->GetRetakeId()); + } + return nullptr; +} + +void Element::RebuildFocusTree() +{ + auto focusScope = AceType::DynamicCast(this); + if (!focusScope) { + return; + } + + std::list> rebuildFocusNodes; + for (auto& item : children_) { + auto tmp = item->RebuildFocusChild(); + if (tmp != nullptr) { + rebuildFocusNodes.emplace_back(tmp); + } + } + focusScope->RebuildChild(std::move(rebuildFocusNodes)); +} + +RefPtr Element::RebuildFocusChild() +{ + auto focusNode = AceType::DynamicCast(this); + if (focusNode) { + return AceType::Claim(focusNode); + } + + for (auto& item : children_) { + return item->RebuildFocusChild(); + } + return nullptr; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/pipeline/base/element.h b/frameworks/core/pipeline/base/element.h new file mode 100644 index 00000000..dc6e6b78 --- /dev/null +++ b/frameworks/core/pipeline/base/element.h @@ -0,0 +1,228 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_ELEMENT_H + +#include + +#include "base/utils/macros.h" +#include "core/focus/focus_node.h" +#include "core/pipeline/base/component.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class PageElement; +class PipelineContext; + +// If no insertion location is specified, new child will be added to the end of children list by default. +constexpr int32_t DEFAULT_ELEMENT_SLOT = -1; + +// Element is the key class in the UI framework, which presents a basic logic +// unit to construct a view hierarchy. +// There are two types inherited element: RenderElement and ComposedElement. +class ACE_EXPORT Element : public virtual AceType { + DECLARE_ACE_TYPE(Element, AceType); + +public: + Element() = default; + ~Element(); + + void AddChild(const RefPtr& child, int32_t slot = DEFAULT_ELEMENT_SLOT); + void RemoveChild(const RefPtr& child); + void InactivateChild(const RefPtr& child); + void DeactivateChild(const RefPtr& child); + void Rebuild(); + + // create a new child element and mount to element tree. + RefPtr InflateComponent(const RefPtr& newComponent, int32_t slot); + virtual void Mount(const RefPtr& parent, int32_t slot = DEFAULT_ELEMENT_SLOT); + void AddToFocus(); + RefPtr UpdateChild( + const RefPtr& child, const RefPtr& newComponent, int32_t slot = DEFAULT_ELEMENT_SLOT); + void DetachChild(const RefPtr&); + RefPtr RetakeDeactivateElement(const RefPtr& newComponent); + + virtual void Detached() {} + virtual void Deactivate() {} + virtual void Prepare(const WeakPtr& parent) {} + virtual void PerformBuild() {} + virtual void Update() {} + virtual void DumpTree(int32_t depth); + virtual void Dump(); + virtual bool CanUpdate(const RefPtr& newComponent); + + virtual void MarkDirty(); + + virtual bool NeedUpdateWithComponent(const RefPtr& newComponent) + { + return true; + } + + void SetUpdateComponent(const RefPtr& newComponent); + + bool NeedUpdate() const + { + return component_ != nullptr; + } + + void SetDepth(int32_t depth) + { + depth_ = depth; + } + + int32_t GetDepth() const + { + return depth_; + } + + void SetPipelineContext(const WeakPtr& context); + + enum ElementType { + BASE_ELEMENT, + RENDER_ELEMENT, + COMPOSED_ELEMENT, + COMPONENT_ELEMENT, + FOREACH_ELEMENT, + }; + + virtual ElementType GetType() const + { + return type_; + } + + virtual void SetNewComponent(const RefPtr& newComponent) + { + component_ = newComponent; + if (newComponent) { + retakeId_ = newComponent->GetRetakeId(); + componentTypeName_ = AceType::TypeName(component_); + } + } + + RefPtr GetFocusScope(); + + RefPtr GetFirstChild() const; + RefPtr GetLastChild() const; + + virtual RefPtr GetRenderNode() const + { + if (children_.empty()) { + return nullptr; + } else { + return children_.front()->GetRenderNode(); + } + } + + Rect GetRenderRect() const + { + auto renderNode = GetRenderNode(); + if (renderNode) { + return renderNode->GetRectBasedWindowTopLeft(); + } + return Rect(); + } + + const std::list>& GetChildren() const; + + const WeakPtr& GetContext() const + { + return context_; + } + + void SetSlot(int32_t slot); + + int32_t GetSlot() const + { + return slot_; + } + + const WeakPtr& GetElementParent() const + { + return parent_; + } + + RefPtr GetPageElement(); + + bool IsAutoAccessibility() const + { + return autoAccessibility_; + } + + void SetAutoAccessibility(bool value) + { + autoAccessibility_ = value; + } + + void SetRetakeId(int32_t retakeId) + { + retakeId_ = retakeId; + } + + int32_t GetRetakeId() const + { + return retakeId_; + } + + RefPtr GetComponent() const + { + return component_; + } + + void RebuildFocusTree(); + + RefPtr RebuildFocusChild(); + +protected: + inline RefPtr DoUpdateChildWithNewComponent( + const RefPtr& child, const RefPtr& newComponent, int32_t slot); + + virtual void Apply(const RefPtr& child) = 0; + + virtual void OnContextAttached() {} + + void SetParent(const WeakPtr& parent) + { + parent_ = parent; + } + + RefPtr GetThemeManager() const + { + auto context = context_.Upgrade(); + if (!context) { + return nullptr; + } + return context->GetThemeManager(); + } + + ElementType type_ = BASE_ELEMENT; + std::list> children_; + RefPtr component_; + WeakPtr context_; + const char* componentTypeName_ = nullptr; + +private: + WeakPtr parent_; + int32_t depth_ = 0; + int32_t slot_ = DEFAULT_ELEMENT_SLOT; + bool autoAccessibility_ = true; + // One-to-one correspondence with component through retakeId + int32_t retakeId_ = 0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_ELEMENT_H diff --git a/frameworks/core/pipeline/base/factories/flutter_node_factory.h b/frameworks/core/pipeline/base/factories/flutter_node_factory.h new file mode 100644 index 00000000..4945dea2 --- /dev/null +++ b/frameworks/core/pipeline/base/factories/flutter_node_factory.h @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_FACTORIES_FLUTTER_NODE_FACTORY_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_FACTORIES_FLUTTER_NODE_FACTORY_H + +#include +#include + +#include "base/memory/ace_type.h" +#include "core/pipeline/base/factories/render_node_factory.h" + +namespace OHOS::Ace { + +constexpr size_t TEXT_CACHE_SIZE = 100; +constexpr size_t IMAGE_CACHE_SIZE = 100; +constexpr size_t BOX_CACHE_SIZE = 200; + +class FlutterTextFactory final : public virtual RenderNodeFactory { + DECLARE_ACE_TYPE(FlutterTextFactory, RenderNodeFactory); + +public: + FlutterTextFactory(): RenderNodeFactory(TEXT_CACHE_SIZE) {}; + + ACE_DISALLOW_COPY_AND_MOVE(FlutterTextFactory); +}; + +class FlutterImageFactory final : public virtual RenderNodeFactory { + DECLARE_ACE_TYPE(FlutterImageFactory, RenderNodeFactory); + +public: + FlutterImageFactory(): RenderNodeFactory(IMAGE_CACHE_SIZE) {}; + + ACE_DISALLOW_COPY_AND_MOVE(FlutterImageFactory); +}; + +class FlutterBoxFactory final : public virtual RenderNodeFactory { + DECLARE_ACE_TYPE(FlutterBoxFactory, RenderNodeFactory); + +public: + FlutterBoxFactory(): RenderNodeFactory(BOX_CACHE_SIZE) {}; + + ACE_DISALLOW_COPY_AND_MOVE(FlutterBoxFactory); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_FACTORIES_FLUTTER_NODE_FACTORY_H diff --git a/frameworks/core/pipeline/base/factories/flutter_render_factory.h b/frameworks/core/pipeline/base/factories/flutter_render_factory.h new file mode 100644 index 00000000..208c2897 --- /dev/null +++ b/frameworks/core/pipeline/base/factories/flutter_render_factory.h @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_FACTORIES_FLUTTER_RENDER_FACTORY_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_FACTORIES_FLUTTER_RENDER_FACTORY_H + +#include "core/pipeline/base/factories/flutter_node_factory.h" +#include "core/pipeline/base/factories/render_factory.h" + +namespace OHOS::Ace { + +class FlutterRenderFactory final : public virtual RenderFactory { + DECLARE_ACE_TYPE(FlutterRenderFactory, RenderFactory); + +public: + FlutterRenderFactory() = default; + ~FlutterRenderFactory() override = default; + + RefPtr& GetRenderTextFactory() override + { + if (!textFactory_) { + textFactory_ = AceType::MakeRefPtr(); + } + return textFactory_; + } + + RefPtr& GetRenderImageFactory() override + { + if (!imageFactory_) { + imageFactory_ = AceType::MakeRefPtr(); + } + return imageFactory_; + } + + RefPtr& GetRenderBoxFactory() override + { + if (!boxFactory_) { + boxFactory_ = AceType::MakeRefPtr(); + } + return boxFactory_; + } + + RefPtr& GetRenderFlexFactory() override + { + if (!flexFactory_) { + flexFactory_ = AceType::MakeRefPtr(); + } + return flexFactory_; + } + + RefPtr& GetRenderWrapFactory() override + { + if (!wrapFactory_) { + wrapFactory_ = AceType::MakeRefPtr(); + } + return wrapFactory_; + } + + RefPtr& GetRenderFlexItemFactory() override + { + if (!flexItemFactory_) { + flexItemFactory_ = AceType::MakeRefPtr(); + } + return flexItemFactory_; + } + +private: + RefPtr textFactory_; + RefPtr imageFactory_; + RefPtr boxFactory_; + RefPtr flexFactory_; + RefPtr flexItemFactory_; + RefPtr wrapFactory_; + + ACE_DISALLOW_COPY_AND_MOVE(FlutterRenderFactory); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_FACTORIES_FLUTTER_RENDER_FACTORY_H diff --git a/frameworks/core/pipeline/base/factories/render_factory.h b/frameworks/core/pipeline/base/factories/render_factory.h new file mode 100644 index 00000000..5a51f1df --- /dev/null +++ b/frameworks/core/pipeline/base/factories/render_factory.h @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_FACTORIES_RENDER_FACTORY_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_FACTORIES_RENDER_FACTORY_H + +#include "core/pipeline/base/factories/render_node_factory.h" + +namespace OHOS::Ace { + +class RenderFactory : public virtual AceType { + DECLARE_ACE_TYPE(RenderFactory, AceType); + +public: + RenderFactory() = default; + ~RenderFactory() override = default; + + virtual RefPtr& GetRenderTextFactory() = 0; + + virtual RefPtr& GetRenderImageFactory() = 0; + + virtual RefPtr& GetRenderBoxFactory() = 0; + + virtual RefPtr& GetRenderFlexFactory() = 0; + + virtual RefPtr& GetRenderFlexItemFactory() = 0; + + virtual RefPtr& GetRenderWrapFactory() = 0; + +private: + ACE_DISALLOW_COPY_AND_MOVE(RenderFactory); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_FACTORIES_RENDER_FACTORY_H diff --git a/frameworks/core/pipeline/base/factories/render_node_factory.cpp b/frameworks/core/pipeline/base/factories/render_node_factory.cpp new file mode 100644 index 00000000..9a1a129f --- /dev/null +++ b/frameworks/core/pipeline/base/factories/render_node_factory.cpp @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/pipeline/base/factories/render_node_factory.h" + +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +RenderNodeFactory::~RenderNodeFactory() +{ + for (auto it = nodeCache_.begin(); it != nodeCache_.end(); ++it) { + delete *it; + } + nodeCache_.clear(); +} + +RefPtr RenderNodeFactory::Get() +{ + return GetNodeFromCache(); +} + +bool RenderNodeFactory::Recycle(RenderNode* node) +{ + if (USE_CACHE && nodeCache_.size() < cacheSize_) { + LOGD("Recycle add in cache"); + nodeCache_.emplace_back(node); + return true; + } + return false; +} + +RefPtr RenderNodeFactory::GetNodeFromCache() +{ + if (!nodeCache_.empty()) { + auto node = *(nodeCache_.rbegin()); + nodeCache_.pop_back(); + LOGD("GetNodeFromCache get node"); + return Referenced::Claim(node); + } + return nullptr; +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/pipeline/base/factories/render_node_factory.h b/frameworks/core/pipeline/base/factories/render_node_factory.h new file mode 100644 index 00000000..ad2b5b4e --- /dev/null +++ b/frameworks/core/pipeline/base/factories/render_node_factory.h @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_FACTORIES_RENDER_NODE_FACTORY_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_FACTORIES_RENDER_NODE_FACTORY_H + +#include +#include + +#include "base/memory/ace_type.h" + +namespace OHOS::Ace { + +constexpr size_t FLEX_CACHE_SIZE = 50; +constexpr size_t FLEX_ITEM_CACHE_SIZE = 200; +constexpr bool USE_CACHE = true; +class RenderNode; +class RenderNodeFactory : public virtual AceType { + DECLARE_ACE_TYPE(RenderNodeFactory, AceType); + +public: + explicit RenderNodeFactory(size_t cacheSize): cacheSize_(cacheSize) {} + + ~RenderNodeFactory() override; + + virtual RefPtr Get(); + virtual bool Recycle(RenderNode*); + +protected: + RefPtr GetNodeFromCache(); + std::vector nodeCache_; + size_t cacheSize_ = 0; + + ACE_DISALLOW_COPY_AND_MOVE(RenderNodeFactory); +}; + +class RenderFlexFactory final : public virtual RenderNodeFactory { + DECLARE_ACE_TYPE(RenderFlexFactory, RenderNodeFactory); + +public: + RenderFlexFactory(): RenderNodeFactory(FLEX_CACHE_SIZE) {} + ~RenderFlexFactory() override = default; + ACE_DISALLOW_COPY_AND_MOVE(RenderFlexFactory); +}; + +class RenderWrapFactory final : public virtual RenderNodeFactory { + DECLARE_ACE_TYPE(RenderWrapFactory, RenderNodeFactory); + +public: + RenderWrapFactory(): RenderNodeFactory(FLEX_CACHE_SIZE) {} + ~RenderWrapFactory() override = default; + ACE_DISALLOW_COPY_AND_MOVE(RenderWrapFactory); +}; + +class RenderFlexItemFactory final : public virtual RenderNodeFactory { + DECLARE_ACE_TYPE(RenderFlexItemFactory, RenderNodeFactory); + +public: + RenderFlexItemFactory(): RenderNodeFactory(FLEX_ITEM_CACHE_SIZE) {} + ~RenderFlexItemFactory() override = default; + ACE_DISALLOW_COPY_AND_MOVE(RenderFlexItemFactory); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_FACTORIES_RENDER_NODE_FACTORY_H diff --git a/frameworks/core/pipeline/base/flutter_render_context.cpp b/frameworks/core/pipeline/base/flutter_render_context.cpp new file mode 100644 index 00000000..05abde11 --- /dev/null +++ b/frameworks/core/pipeline/base/flutter_render_context.cpp @@ -0,0 +1,122 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/pipeline/base/flutter_render_context.h" + +#include "core/pipeline/base/render_node.h" +#include "core/pipeline/layers/offset_layer.h" + +namespace OHOS::Ace { +namespace { + +inline bool ShouldPaint(const RefPtr& node) +{ + return node != nullptr && node->GetVisible() && !node->GetHidden(); +} + +} // namespace + +using namespace Flutter; + +RefPtr RenderContext::Create() +{ + return AceType::MakeRefPtr(); +} + +FlutterRenderContext::~FlutterRenderContext() +{ + StopRecordingIfNeeded(); +} + +void FlutterRenderContext::Repaint(const RefPtr& node) +{ + if (!ShouldPaint(node) || !node->NeedRender() || !node->GetRenderLayer()) { + LOGD("Node is not need to paint"); + return; + } + InitContext(node->GetRenderLayer(), node->GetRectWithShadow()); + node->RenderWithContext(*this, Offset::Zero()); + StopRecordingIfNeeded(); +} + +void FlutterRenderContext::PaintChild(const RefPtr& child, const Offset& offset) +{ + if (!ShouldPaint(child)) { + LOGD("Node is not need to paint"); + return; + } + + Rect rect = child->GetPaintRect() + offset; + if (!estimatedRect_.IsIntersectWith(rect)) { + return; + } + + if (child->GetRenderLayer()) { + StopRecordingIfNeeded(); + if (child->NeedRender()) { + FlutterRenderContext context; + context.Repaint(child); + } else { + // No need to repaint, notify to update AccessibilityNode info. + child->NotifyPaintFinish(); + } + // add child layer to parent layer + OffsetLayer* layer = CastLayerAs(child->GetRenderLayer()); + Offset pos = rect.GetOffset(); + layer->SetOffset(pos.GetX(), pos.GetY()); + containerLayer_->AddChildren(AceType::Claim(layer)); + } else { + child->RenderWithContext(*this, rect.GetOffset()); + } +} + +void FlutterRenderContext::StartRecording() +{ + currentLayer_ = AceType::MakeRefPtr(); + recorder_ = flutter::PictureRecorder::Create(); + canvas_ = flutter::Canvas::Create( + recorder_.get(), estimatedRect_.Left(), estimatedRect_.Top(), estimatedRect_.Right(), estimatedRect_.Bottom()); + containerLayer_->AddChildren(currentLayer_); +} + +void FlutterRenderContext::StopRecordingIfNeeded() +{ + if (!IsRecording()) { + return; + } + + currentLayer_->SetPicture(recorder_->endRecording()); + currentLayer_ = nullptr; + recorder_ = nullptr; + canvas_ = nullptr; +} + +void FlutterRenderContext::InitContext(RenderLayer layer, const Rect& rect) +{ + LOGD("InitContext with width %{public}lf height %{public}lf", rect.Width(), rect.Height()); + estimatedRect_ = rect; + containerLayer_ = CastLayerAs(layer); + containerLayer_->RemoveChildren(); +} + +flutter::Canvas* FlutterRenderContext::GetCanvas() +{ + if (!IsRecording()) { + StartRecording(); + } + return canvas_.get(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/pipeline/base/flutter_render_context.h b/frameworks/core/pipeline/base/flutter_render_context.h new file mode 100644 index 00000000..e68f7f30 --- /dev/null +++ b/frameworks/core/pipeline/base/flutter_render_context.h @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_FLUTTER_RENDER_CONTEXT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_FLUTTER_RENDER_CONTEXT_H + +#include "flutter/lib/ui/compositing/scene.h" +#include "flutter/lib/ui/compositing/scene_builder.h" +#include "flutter/lib/ui/painting/canvas.h" +#include "flutter/lib/ui/painting/picture_recorder.h" + +#include "base/geometry/rect.h" +#include "core/pipeline/base/render_context.h" +#include "core/pipeline/base/render_layer.h" +#include "core/pipeline/layers/container_layer.h" +#include "core/pipeline/layers/picture_layer.h" + +namespace OHOS::Ace { + +class FlutterRenderContext : public RenderContext { + DECLARE_ACE_TYPE(FlutterRenderContext, RenderContext) + +public: + FlutterRenderContext() = default; + ~FlutterRenderContext() override; + + void Repaint(const RefPtr& node) override; + void PaintChild(const RefPtr& child, const Offset& offset) override; + + void InitContext(RenderLayer layer, const Rect& rect); + flutter::Canvas* GetCanvas(); + void StopRecordingIfNeeded(); + + Flutter::ContainerLayer* GetContainerLayer() const + { + return containerLayer_; + } + + bool IsRecording() + { + return !!canvas_; + } + +private: + void StartRecording(); + + fml::RefPtr recorder_; + fml::RefPtr canvas_; + Flutter::ContainerLayer* containerLayer_ = nullptr; + RefPtr currentLayer_; + Rect estimatedRect_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_FLUTTER_RENDER_CONTEXT_H diff --git a/frameworks/core/pipeline/base/measurable.h b/frameworks/core/pipeline/base/measurable.h new file mode 100644 index 00000000..d151d24d --- /dev/null +++ b/frameworks/core/pipeline/base/measurable.h @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_MEASURABLE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_MEASURABLE_H + +#include "base/memory/ace_type.h" +#include "frameworks/base/geometry/dimension.h" + +namespace OHOS::Ace { + +class Measurable : public virtual AceType { + DECLARE_ACE_TYPE(Measurable, AceType); + +public: + virtual const Dimension& GetWidth() const + { + return width_; + } + + virtual void SetWidth(const Dimension& dimension) + { + width_ = dimension; + } + + virtual void SetWidth(double width, DimensionUnit unit = DimensionUnit::PX) + { + width_ = Dimension(width, unit); + } + + virtual const Dimension& GetHeight() const + { + return height_; + } + + virtual void SetHeight(const Dimension& dimension) + { + height_ = dimension; + } + + virtual void SetHeight(double height, DimensionUnit unit = DimensionUnit::PX) + { + height_ = Dimension(height, unit); + } + +protected: + Dimension width_ {-1.0, DimensionUnit::PX}; + Dimension height_ {-1.0, DimensionUnit::PX}; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_MEASURABLE_H \ No newline at end of file diff --git a/frameworks/core/pipeline/base/overlay_show_option.h b/frameworks/core/pipeline/base/overlay_show_option.h new file mode 100644 index 00000000..f399ce03 --- /dev/null +++ b/frameworks/core/pipeline/base/overlay_show_option.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_OVERLAY_SHOW_OPTION_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_OVERLAY_SHOW_OPTION_H + +#include "base/geometry/offset.h" + +namespace OHOS::Ace { + +// Operations trigger update overlay position. +enum class UpdateOverlayType { + CLICK, + LONG_PRESS, + SCROLL, + NONE, +}; + +struct OverlayShowOption { + bool showMenu = false; + bool showStartHandle = true; + bool showEndHandle = true; + bool isSingleHandle = true; + UpdateOverlayType updateOverlayType = UpdateOverlayType::NONE; + Offset startHandleOffset; + Offset endHandleOffset; + + OverlayShowOption() = default; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_OVERLAY_SHOW_OPTION_H diff --git a/frameworks/core/pipeline/base/position_layout_utils.h b/frameworks/core/pipeline/base/position_layout_utils.h new file mode 100644 index 00000000..2ec2dd00 --- /dev/null +++ b/frameworks/core/pipeline/base/position_layout_utils.h @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_POSITION_LAYOUT_UTILS_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_POSITION_LAYOUT_UTILS_H + +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +class PositionLayoutUtils final { +public: + static Offset GetAbsoluteOffset(const RefPtr& parentNode, const RefPtr& selfNode) + { + if (!parentNode || !selfNode) { + return Offset::Zero(); + } + double deltaX = 0.0; + if (selfNode->HasLeft()) { + deltaX = selfNode->NormalizePercentToPx(selfNode->GetLeft(), false); + } else if (selfNode->HasRight()) { + deltaX = parentNode->GetLayoutSize().Width() - selfNode->NormalizePercentToPx(selfNode->GetRight(), false) - + selfNode->GetLayoutSize().Width(); + } else { + deltaX = 0.0; + } + double deltaY = 0.0; + if (selfNode->HasTop()) { + deltaY = selfNode->NormalizePercentToPx(selfNode->GetTop(), true); + } else if (selfNode->HasBottom()) { + deltaY = parentNode->GetLayoutSize().Height() - selfNode->NormalizePercentToPx(selfNode->GetBottom(), true) + - selfNode->GetLayoutSize().Height(); + } else { + deltaY = 0.0; + } + return Offset(deltaX, deltaY); + } +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_POSITION_LAYOUT_UTILS_H diff --git a/frameworks/core/pipeline/base/related_node.cpp b/frameworks/core/pipeline/base/related_node.cpp new file mode 100644 index 00000000..f536198e --- /dev/null +++ b/frameworks/core/pipeline/base/related_node.cpp @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/pipeline/base/related_node.h" + +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { +namespace { + +constexpr int32_t MAX_DEEP_SEARCH = 10; + +} + +void RelatedChild::InitRelatedParent(const WeakPtr& weakParent) +{ + int32_t searchDeep = 0; + auto parent = weakParent.Upgrade(); + while (searchDeep++ < MAX_DEEP_SEARCH && parent) { + auto relatedContainer = AceType::DynamicCast(parent); + if (relatedContainer) { + LOGD("has related container parent"); + relatedParent_ = AceType::WeakClaim(AceType::RawPtr(relatedContainer)); + return; + } else { + parent = parent->GetParent().Upgrade(); + } + } +} + +void RelatedChild::RelatedEventStart() +{ + if (!IsRelatedEventEnable()) { + return; + } + auto parent = relatedParent_.Upgrade(); + parent->OnRelatedStart(); +} + +bool RelatedChild::RelatedScrollEventPrepare(const Offset& delta) +{ + if (!IsRelatedEventEnable()) { + return false; + } + auto parent = relatedParent_.Upgrade(); + Offset consumed; + parent->OnRelatedPreScroll(delta, consumed); + if (!NearZero(consumed.GetY())) { + return true; + } + return false; +} + +bool RelatedChild::RelatedScrollEventDoing(const Offset& delta) +{ + if (!IsRelatedEventEnable()) { + return false; + } + auto parent = relatedParent_.Upgrade(); + Offset consumed; + parent->OnRelatedScroll(delta, consumed); + if (!NearZero(consumed.GetY())) { + return true; + } + return false; +} + +void RelatedChild::RelatedEventEnd() +{ + if (!IsRelatedEventEnable()) { + return; + } + auto parent = relatedParent_.Upgrade(); + parent->OnRelatedEnd(); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/pipeline/base/related_node.h b/frameworks/core/pipeline/base/related_node.h new file mode 100644 index 00000000..c0c48b74 --- /dev/null +++ b/frameworks/core/pipeline/base/related_node.h @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_RELATED_NODE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_RELATED_NODE_H + +#include "base/geometry/offset.h" +#include "base/memory/ace_type.h" + +namespace OHOS::Ace { + +class RenderNode; +class RelatedContainer : public virtual AceType { + DECLARE_ACE_TYPE(RelatedContainer, AceType); + +public: + virtual void OnRelatedStart() {} + virtual void OnRelatedPreScroll(const Offset& delta, Offset& consumed) {} + virtual void OnRelatedScroll(const Offset& delta, Offset& consumed) {} + virtual void OnRelatedEnd() {} +}; + +class RelatedChild { +public: + void InitRelatedParent(const WeakPtr& weakParent); + bool IsRelatedEventEnable() + { + return enableRelatedEvent_ && relatedParent_.Upgrade(); + }; + void RelatedEventStart(); + bool RelatedScrollEventPrepare(const Offset& delta); + bool RelatedScrollEventDoing(const Offset& delta); + void RelatedEventEnd(); + +protected: + WeakPtr relatedParent_; + +private: + bool enableRelatedEvent_ = true; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_RELATED_NODE_H diff --git a/frameworks/core/pipeline/base/render_component.h b/frameworks/core/pipeline/base/render_component.h new file mode 100644 index 00000000..e06800e4 --- /dev/null +++ b/frameworks/core/pipeline/base/render_component.h @@ -0,0 +1,245 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_RENDER_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_RENDER_COMPONENT_H + +#include "base/geometry/dimension.h" +#include "base/memory/ace_type.h" +#include "core/components/common/layout/layout_param.h" +#include "core/components/common/layout/position_param.h" +#include "core/event/ace_event_handler.h" +#include "core/pipeline/base/component.h" + +namespace OHOS::Ace { + +class RenderNode; + +// RenderComponent is visible Component which can create an RenderNode. +class RenderComponent : public Component { + DECLARE_ACE_TYPE(RenderComponent, Component); + +public: + RenderComponent() = default; + ~RenderComponent() override = default; + + bool IsTakeBoundary() const + { + return takeBoundary_; + } + + void SetTakeBoundary(bool takeBoundary) + { + takeBoundary_ = takeBoundary; + } + + void SetZIndex(int32_t zIndex) + { + zIndex_ = zIndex; + } + + int32_t GetZIndex() const + { + return zIndex_; + } + + const std::string& GetAccessibilityText() const + { + return accessibilityText_; + } + + void SetAccessibilityText(const std::string& accessibilityText) + { + accessibilityText_ = accessibilityText; + } + + virtual void SetLeft(const Dimension& left) + { + positionParam_.left.first = left; + positionParam_.left.second = true; + } + + virtual void SetRight(const Dimension& right) + { + positionParam_.right.first = right; + positionParam_.right.second = true; + } + + virtual void SetTop(const Dimension& top) + { + positionParam_.top.first = top; + positionParam_.top.second = true; + } + + virtual void SetBottom(const Dimension& bottom) + { + positionParam_.bottom.first = bottom; + positionParam_.bottom.second = true; + } + + void SetHasLeft(bool hasLeft) + { + positionParam_.left.second = hasLeft; + } + + void SetHasRight(bool hasRight) + { + positionParam_.right.second = hasRight; + } + + void SetHasTop(bool hasTop) + { + positionParam_.top.second = hasTop; + } + + void SetHasBottom(bool hasBottom) + { + positionParam_.bottom.second = hasBottom; + } + + virtual const Dimension& GetLeft() const + { + return positionParam_.left.first; + } + + virtual const Dimension& GetRight() const + { + return positionParam_.right.first; + } + + virtual const Dimension& GetTop() const + { + return positionParam_.top.first; + } + + virtual const Dimension& GetBottom() const + { + return positionParam_.bottom.first; + } + + virtual bool HasLeft() const + { + return positionParam_.left.second; + } + + virtual bool HasRight() const + { + return positionParam_.right.second; + } + + virtual bool HasTop() const + { + return positionParam_.top.second; + } + + virtual bool HasBottom() const + { + return positionParam_.bottom.second; + } + + PositionType GetPositionType() const + { + return positionParam_.type; + } + + void SetPositionType(PositionType positionType) + { + positionParam_.type = positionType; + } + + const PositionParam& GetPositionParam() const + { + return positionParam_; + } + + double GetFlexWeight() const + { + return flexWeight_; + } + + void SetFlexWeight(double flexWeight) + { + flexWeight_ = flexWeight; + } + + int32_t GetDisplayIndex() const + { + return displayIndex_; + } + + void SetDisplayIndex(int32_t displayIndex) + { + displayIndex_ = displayIndex; + } + + MeasureType GetMeasureType() const + { + return measureType_; + } + + void SetMeasureType(MeasureType measureType) + { + measureType_ = measureType; + } + + bool IsCustomComponent() const + { + return isCustomComponent_; + } + + void SetIsCustomComponent(bool isCustomComponent) + { + isCustomComponent_ = isCustomComponent; + } + + const EventMarker& GetOnLayoutReadyMarker() const + { + return onLayoutReady_; + } + + void SetOnLayoutReadyMarker(const EventMarker& onLayoutReady) + { + onLayoutReady_ = onLayoutReady; + } + + bool IsIgnored() const + { + return isIgnored_; + } + + void SetIsIgnored(bool ignore) + { + isIgnored_ = ignore; + } + + virtual RefPtr CreateRenderNode() = 0; + +protected: + bool takeBoundary_ = true; + std::string accessibilityText_; + PositionParam positionParam_; + double flexWeight_ = 0.0; + int32_t displayIndex_ = 1; + MeasureType measureType_ = MeasureType::PARENT; + EventMarker onLayoutReady_; + bool isIgnored_ = false; + + bool isCustomComponent_ = false; + int32_t zIndex_ = 0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_RENDER_COMPONENT_H diff --git a/frameworks/core/pipeline/base/render_context.h b/frameworks/core/pipeline/base/render_context.h new file mode 100644 index 00000000..c9c8a847 --- /dev/null +++ b/frameworks/core/pipeline/base/render_context.h @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_RENDER_CONTEXT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_RENDER_CONTEXT_H + +#include "base/geometry/offset.h" +#include "base/geometry/rect.h" +#include "base/memory/ace_type.h" +#include "core/pipeline/base/render_layer.h" + +namespace OHOS::Ace { + +template +T* CastLayerAs(RenderLayer layer) +{ + return static_cast(layer); +} + +class RenderNode; +class RenderContext : public virtual AceType { + DECLARE_ACE_TYPE(RenderContext, AceType); + +public: + ~RenderContext() override = default; + + static RefPtr Create(); + + virtual void Repaint(const RefPtr&) = 0; + virtual void PaintChild(const RefPtr&, const Offset& offset) = 0; + +protected: + RenderContext() = default; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_RENDER_CONTEXT_H diff --git a/frameworks/core/pipeline/base/render_element.cpp b/frameworks/core/pipeline/base/render_element.cpp new file mode 100644 index 00000000..ef6a7d42 --- /dev/null +++ b/frameworks/core/pipeline/base/render_element.cpp @@ -0,0 +1,207 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/pipeline/base/render_element.h" + +#include "base/log/log.h" +#include "base/utils/string_utils.h" +#include "base/utils/utils.h" +#include "core/accessibility/accessibility_manager.h" +#include "core/components/focus_animation/render_focus_animation.h" +#include "core/components/shadow/render_shadow.h" +#include "core/pipeline/base/composed_element.h" +#include "core/pipeline/base/render_component.h" + +namespace OHOS::Ace { + +RenderElement::RenderElement() +{ + type_ = RENDER_ELEMENT; +} + +RenderElement::~RenderElement() {} + +void RenderElement::Prepare(const WeakPtr& parent) +{ + if (!renderNode_) { + renderNode_ = CreateRenderNode(); + } + if (renderNode_ != nullptr) { + SetAccessibilityNode(parent); + renderNode_->Attach(context_); + } + + // register on fcous move callback + auto focusItem = AceType::DynamicCast(this); + if (focusItem) { + focusItem->SetFocusMoveCallback([weak = AceType::WeakClaim(this)] { + auto element = weak.Upgrade(); + if (element && element->renderNode_) { + element->renderNode_->MoveWhenOutOfViewPort(true); + } + }); + } +} + +void RenderElement::SetAccessibilityNode(const WeakPtr& parent) +{ + auto parentNode = parent.Upgrade(); + while (parentNode) { + if (!parentNode->IsAutoAccessibility()) { + break; + } + if (AceType::TypeId(parentNode) == AceType::TypeId()) { + auto composedElement = AceType::DynamicCast(parentNode); + if (!composedElement) { + LOGE("SetAccessibilityNode composedElement is null"); + return; + } + composeId_ = composedElement->GetId(); + SetAccessibilityNodeById(composeId_); + break; + } else { + parentNode = parentNode->GetElementParent().Upgrade(); + } + } +} + +void RenderElement::SetAccessibilityNodeById(const ComposeId& id) +{ + auto context = context_.Upgrade(); + if (!context) { + LOGE("SetAccessibilityNode context is null"); + return; + } + if (!renderNode_) { + LOGE("RenderElement don't have a render node"); + return; + } + auto accessibilityManager = context->GetAccessibilityManager(); + if (!accessibilityManager) { + LOGE("SetAccessibilityNode accessibilityManager is null"); + return; + } + auto nodeId = StringUtils::StringToInt(id); + auto accessibilityNode = accessibilityManager->GetAccessibilityNodeById(nodeId); + if (accessibilityNode) { + renderNode_->SetAccessibilityNode(accessibilityNode); + } +} + +void RenderElement::UpdateAccessibilityNode() +{ + // fetch new composedId from component. + ComposeId updateId; + auto component = component_; + while (component) { + auto composedNode = AceType::DynamicCast(component); + if (composedNode) { + updateId = composedNode->GetId(); + break; + } + component = component->GetParent().Upgrade(); + } + + // Update new composedId to renderNode. + if (!updateId.empty() && updateId != composeId_) { + SetAccessibilityNodeById(updateId); + LOGD("Update ComposeId from %s to %s", composeId_.c_str(), updateId.c_str()); + composeId_ = updateId; + } +} + +void RenderElement::Apply(const RefPtr& child) +{ + if (!child) { + LOGE("Element child is null"); + return; + } + + if (!renderNode_) { + LOGE("RenderElement don't have a render node"); + return; + } + + if (child->GetType() == RENDER_ELEMENT) { + // Directly attach the RenderNode if child is RenderElement. + RefPtr renderChild = AceType::DynamicCast(child); + if (renderChild) { + renderNode_->AddChild(renderChild->GetRenderNode(), renderChild->GetSlot()); + } + } else if (child->GetType() == COMPOSED_ELEMENT) { + // If child is ComposedElement, just set parent render node. + RefPtr composeChild = AceType::DynamicCast(child); + if (composeChild) { + composeChild->SetParentRenderNode(renderNode_); + } + } +} + +void RenderElement::Update() +{ + if (renderNode_ != nullptr) { + UpdateAccessibilityNode(); + renderNode_->UpdateAll(component_); + } +} + +RefPtr RenderElement::CreateRenderNode() +{ + RefPtr renderComponent = AceType::DynamicCast(component_); + if (renderComponent) { + auto renderNode = GetCachedRenderNode(); + if (renderNode) { + LOGD("RenderElement Using Cache RenderNode"); + return renderNode; + } else { + return renderComponent->CreateRenderNode(); + } + } + return nullptr; +} + +void RenderElement::Detached() +{ + Deactivate(); + if (renderNode_) { + renderNode_ = nullptr; + } +} + +void RenderElement::Deactivate() +{ + if (renderNode_) { + auto focusAnimation = AceType::DynamicCast(renderNode_); + auto context = context_.Upgrade(); + if (focusAnimation) { + if (context) { + focusAnimation->IsRoot() ? context->PopRootFocusAnimation() : context->PopFocusAnimation(); + } + } + + auto shadow = AceType::DynamicCast(renderNode_); + if (shadow) { + if (context) { + context->PopShadow(); + } + } + if (renderNode_->NeedWindowBlur()) { + renderNode_->MarkNeedWindowBlur(false); + } + renderNode_->Unmount(); + } +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/pipeline/base/render_element.h b/frameworks/core/pipeline/base/render_element.h new file mode 100644 index 00000000..5003f572 --- /dev/null +++ b/frameworks/core/pipeline/base/render_element.h @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_RENDER_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_RENDER_ELEMENT_H + +#include "base/utils/macros.h" +#include "core/pipeline/base/element.h" +#include "core/pipeline/base/render_node.h" + +namespace OHOS::Ace { + +// RenderElement will have a RenderNode and displays in the screen. +class ACE_EXPORT RenderElement : public Element { + DECLARE_ACE_TYPE(RenderElement, Element); + +public: + RenderElement(); + ~RenderElement() override; + + void Prepare(const WeakPtr& parent) override; + void Update() override; + void Detached() override; + void Deactivate() override; + + RefPtr GetRenderNode() const override + { + return renderNode_; + } + + void SetRenderNode(RefPtr renderNode) + { + if (renderNode && !renderNode_) { + renderNode_ = renderNode; + } + } + + void SetAccessibilityNodeById(const ComposeId& id); + +protected: + virtual RefPtr CreateRenderNode(); + virtual RefPtr GetCachedRenderNode() + { + return nullptr; + } + void Apply(const RefPtr& child) override; + + RefPtr renderNode_; + +private: + void SetAccessibilityNode(const WeakPtr& parent); + void UpdateAccessibilityNode(); + + ComposeId composeId_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_RENDER_ELEMENT_H diff --git a/frameworks/core/pipeline/base/render_layer.h b/frameworks/core/pipeline/base/render_layer.h new file mode 100644 index 00000000..78fa822c --- /dev/null +++ b/frameworks/core/pipeline/base/render_layer.h @@ -0,0 +1,25 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_RENDER_LAYER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_RENDER_LAYER_H + +namespace OHOS::Ace { + +using RenderLayer = void*; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_RENDER_LAYER_H diff --git a/frameworks/core/pipeline/base/render_node.cpp b/frameworks/core/pipeline/base/render_node.cpp new file mode 100644 index 00000000..f4df473d --- /dev/null +++ b/frameworks/core/pipeline/base/render_node.cpp @@ -0,0 +1,861 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/pipeline/base/render_node.h" + +#include + +#include "base/log/dump_log.h" +#include "base/log/event_report.h" +#include "base/log/log.h" +#include "core/components/box/render_box.h" +#include "core/components/common/rotation/rotation_node.h" +#include "core/components/focus_animation/render_focus_animation.h" +#include "core/components/root/render_root.h" +#include "core/components/scroll/render_single_child_scroll.h" +#include "core/event/ace_event_helper.h" +#include "core/pipeline/base/component.h" + +namespace OHOS::Ace { + +namespace { + +constexpr float PRESS_KEYFRAME_START = 0.0f; +constexpr float PRESS_KEYFRAME_END = 1.0f; + +} // namespace + +constexpr Dimension FOCUS_BOUNDARY = 4.0_vp; // focus padding + effect boundary, VP + +RenderNode::RenderNode(bool takeBoundary) : takeBoundary_(takeBoundary) {} + +void RenderNode::AddChild(const RefPtr& child, int32_t slot) +{ + if (child) { + const auto& it = std::find(children_.begin(), children_.end(), child); + auto pos = children_.begin(); + std::advance(pos, slot); + if (it == children_.end()) { + children_.insert(pos, child); + child->SetParent(AceType::WeakClaim(this)); + child->SetDepth(GetDepth() + 1); + OnChildAdded(child); + } else { + LOGW("RenderNode exist AddChild failed"); + } + } +} + +void RenderNode::RemoveChild(const RefPtr& child) +{ + if (child) { + children_.remove(child); + OnChildRemoved(child); + LOGD("RenderNode RemoveChild %{public}zu", children_.size()); + } +} + +void RenderNode::UpdateTouchRect() +{ + touchRect_ = paintRect_; + auto box = AceType::DynamicCast(this); + // For exclude the margin area from touch area and the margin must not be less than zero. + if (box && box->GetTouchArea().GetOffset().IsPositiveOffset()) { + touchRect_.SetOffset(box->GetTouchArea().GetOffset() + touchRect_.GetOffset()); + touchRect_.SetSize(box->GetTouchArea().GetSize()); + } + if (!children_.empty()) { + double minX = touchRect_.Left(); + double minY = touchRect_.Top(); + double maxX = touchRect_.Right(); + double maxY = touchRect_.Bottom(); + for (auto iter = children_.rbegin(); iter != children_.rend(); ++iter) { + auto& child = *iter; + if (child->GetTouchRect().GetSize().IsEmpty()) { + continue; + } + minX = std::min(minX, child->GetTouchRect().Left() + touchRect_.Left()); + minY = std::min(minY, child->GetTouchRect().Top() + touchRect_.Top()); + maxX = std::max(maxX, child->GetTouchRect().Right() + touchRect_.Left()); + maxY = std::max(maxY, child->GetTouchRect().Bottom() + touchRect_.Top()); + } + touchRect_.SetOffset({ minX, minY }); + touchRect_.SetSize({ maxX - minX, maxY - minY }); + } +} + +void RenderNode::MoveWhenOutOfViewPort(bool hasEffect) +{ + if (SystemProperties::GetDeviceType() != DeviceType::TV) { + return; + } + + Offset effectOffset; + if (hasEffect) { + effectOffset = Offset(NormalizeToPx(FOCUS_BOUNDARY), NormalizeToPx(FOCUS_BOUNDARY)); + } + auto parentNode = GetParent().Upgrade(); + while (parentNode) { + auto scroll = AceType::DynamicCast(parentNode); + if (scroll) { + // do move then break + scroll->MoveChildToViewPort(GetLayoutSize(), GetGlobalOffset(), effectOffset); + break; + } else { + parentNode = parentNode->GetParent().Upgrade(); + } + } +} + +void RenderNode::DumpTree(int32_t depth) +{ + auto accessibilityNode = GetAccessibilityNode().Upgrade(); + int32_t nodeId = 0; + if (accessibilityNode) { + nodeId = accessibilityNode->GetNodeId(); + } + if (DumpLog::GetInstance().GetDumpFile()) { + auto dirtyRect = context_.Upgrade()->GetDirtyRect(); + DumpLog::GetInstance().AddDesc(std::string("AccessibilityNodeID: ").append(std::to_string(nodeId))); + DumpLog::GetInstance().AddDesc(std::string("Position: ").append(GetGlobalOffset().ToString())); + DumpLog::GetInstance().AddDesc(std::string("PaintRect: ").append(paintRect_.ToString())); + DumpLog::GetInstance().AddDesc(std::string("TouchRect: ").append(touchRect_.ToString())); + DumpLog::GetInstance().AddDesc(std::string("DirtyRect: ").append(dirtyRect.ToString())); + DumpLog::GetInstance().AddDesc(std::string("LayoutParam: ").append(layoutParam_.ToString())); + DumpLog::GetInstance().AddDesc( + std::string("MouseState: ").append(mouseState_ == MouseState::HOVER ? "HOVER" : "NONE")); + Dump(); + DumpLog::GetInstance().Print(depth, AceType::TypeName(this), children_.size()); + } + + for (const auto& item : children_) { + item->DumpTree(depth + 1); + } +} + +void RenderNode::Dump() {} + +void RenderNode::RenderWithContext(RenderContext& context, const Offset& offset) +{ + MarkNeedWindowBlur(false); + if (onLayoutReady_) { + onLayoutReady_(std::string("\"layoutReady\",null,null")); + } + Paint(context, offset); + if (needUpdateAccessibility_) { + OnPaintFinish(); + } + SetNeedRender(false); +} + +void RenderNode::Paint(RenderContext& context, const Offset& offset) +{ + for (const auto& item : paintChildren_) { + PaintChild(item.Upgrade(), context, offset); + } +} + +void RenderNode::PaintChild(const RefPtr& child, RenderContext& context, const Offset& offset) +{ + if (child && child->GetVisible()) { + context.PaintChild(child, offset); + } +} + +void RenderNode::MarkNeedLayout(bool selfOnly, bool forceParent) +{ + bool forceSelf = forceParent && AceType::InstanceOf(this); + if (forceSelf) { + // This is root and child need force parent layout. + SetNeedLayout(true); + auto pipelineContext = context_.Upgrade(); + if (pipelineContext != nullptr) { + pipelineContext->AddDirtyLayoutNode(AceType::Claim(this)); + } + } else if (forceParent) { + // Force mark self and all ancestors need layout. + SetNeedLayout(true); + auto parent = parent_.Upgrade(); + if (parent) { + parent->MarkNeedLayout(false, forceParent); + } + } else if (!needLayout_) { + SetNeedLayout(true); + + if (IsTakenBoundary() || selfOnly) { + if (MarkNeedRenderSpecial()) { + auto parent = parent_.Upgrade(); + if (parent) { + parent->MarkNeedLayout(); + } + } else { + auto pipelineContext = context_.Upgrade(); + if (pipelineContext != nullptr) { + pipelineContext->AddDirtyLayoutNode(AceType::Claim(this)); + } + } + } else { + auto parent = parent_.Upgrade(); + if (parent) { + parent->MarkNeedLayout(); + } + } + } +} + +void RenderNode::MarkNeedPredictLayout() +{ + auto pipelineContext = context_.Upgrade(); + if (pipelineContext) { + pipelineContext->AddPredictLayoutNode(AceType::Claim(this)); + } +} + +void RenderNode::OnLayout() +{ + auto parent = parent_.Upgrade(); + if (parent) { + Size parentViewPort = parent->GetChildViewPort(); + if (viewPort_ != parentViewPort) { + viewPort_ = parentViewPort; + needLayout_ = true; + } + } + if (NeedLayout()) { + PrepareLayout(); + PerformLayout(); + layoutParamChanged_ = false; + SetNeedLayout(false); + MarkNeedRender(); + } + SortPaintChildrenBasedOnZIndex(); +} + +void RenderNode::PrepareLayout() {} + +void RenderNode::SetPosition(const Offset& offset) +{ + Offset selfOffset; + if (positionParam_.left.second) { + selfOffset.SetX(NormalizePercentToPx(positionParam_.left.first, false)); + } else if (positionParam_.right.second) { + selfOffset.SetX(-NormalizePercentToPx(positionParam_.right.first, false)); + } else { + selfOffset.SetX(0); + } + if (positionParam_.top.second) { + selfOffset.SetY(NormalizePercentToPx(positionParam_.top.first, true)); + } else if (positionParam_.bottom.second) { + selfOffset.SetY(-NormalizePercentToPx(positionParam_.bottom.first, true)); + } else { + selfOffset.SetY(0); + } + selfOffset_ = selfOffset; + SetPositionInternal(selfOffset + offset); +} + +void RenderNode::SetPositionInternal(const Offset& offset) +{ + if (paintRect_.GetOffset() != offset) { + paintRect_.SetOffset(offset); + needUpdateTouchRect_ = true; + OnPositionChanged(); + OnGlobalPositionChanged(); + } +} + +void RenderNode::CreateMouseAnimation(RefPtr>& animation, const Color& from, const Color& to) +{ + if (!animation) { + return; + } + auto colorFrameStart = AceType::MakeRefPtr>(PRESS_KEYFRAME_START, from); + auto colorFrameEnd = AceType::MakeRefPtr>(PRESS_KEYFRAME_END, to); + colorFrameEnd->SetCurve(Curves::SHARP); + animation->AddKeyframe(colorFrameStart); + animation->AddKeyframe(colorFrameEnd); + animation->SetEvaluator(AceType::MakeRefPtr()); + animation->AddListener([weakNode = AceType::WeakClaim(this)](const Color& value) { + auto node = weakNode.Upgrade(); + if (node) { + node->eventEffectColor_ = value; + if (node->hoveAndPressCallback_) { + node->hoveAndPressCallback_(value); + } + node->MarkNeedRender(); + } + }); +} + +bool RenderNode::MarkNeedRenderSpecial() +{ + return false; +} + +void RenderNode::MarkNeedRender(bool overlay) +{ + if (!needRender_) { + SetNeedRender(true); + if (IsRepaintBoundary()) { + auto pipelineContext = context_.Upgrade(); + if (pipelineContext) { + pipelineContext->AddDirtyRenderNode(AceType::Claim(this), overlay); + } + } else { + auto parent = parent_.Upgrade(); + if (parent) { + parent->MarkNeedRender(); + } + } + } +} + +bool RenderNode::TouchTest(const Point& globalPoint, const Point& parentLocalPoint, const TouchRestrict& touchRestrict, + TouchTestResult& result) +{ + LOGD("OnTouchTest: type is %{public}s, the region is %{public}lf, %{public}lf, %{public}lf, %{public}lf", + GetTypeName(), GetTouchRect().Left(), GetTouchRect().Top(), GetTouchRect().Width(), GetTouchRect().Height()); + LOGD("OnTouchTest: the local point refer to parent is %{public}lf, %{public}lf, ", parentLocalPoint.GetX(), + parentLocalPoint.GetY()); + if (disableTouchEvent_ || disabled_) { + return false; + } + // Since the paintRect is relative to parent, use parent local point to perform touch test. + if (!GetTouchRect().IsInRegion(parentLocalPoint)) { + return false; + } + + // Calculates the local point location in this node. + const auto localPoint = parentLocalPoint - paintRect_.GetOffset(); + bool dispatchSuccess = false; + for (auto iter = children_.rbegin(); iter != children_.rend(); ++iter) { + auto& child = *iter; + if (!child->GetVisible()) { + continue; + } + if (child->TouchTest(globalPoint, localPoint, touchRestrict, result)) { + dispatchSuccess = true; + break; + } + if (child->InterceptTouchEvent() && GetTouchRect().IsInRegion(parentLocalPoint)) { + dispatchSuccess = true; + break; + } + } + auto beforeSize = result.size(); + if (touchable_) { + // Calculates the coordinate offset in this node. + const auto coordinateOffset = globalPoint - localPoint; + globalPoint_ = globalPoint; + OnTouchTestHit(coordinateOffset, touchRestrict, result); + } + auto endSize = result.size(); + return dispatchSuccess || beforeSize != endSize; +} + +void RenderNode::MouseTest(const Point& globalPoint, const Point& parentLocalPoint, MouseTestResult& result) +{ + LOGD("MouseTest: type is %{public}s, the region is %{public}lf, %{public}lf, %{public}lf, %{public}lf", + GetTypeName(), GetTouchRect().Left(), GetTouchRect().Top(), GetTouchRect().Width(), GetTouchRect().Height()); + LOGD("MouseTest: the local point refer to parent is %{public}lf, %{public}lf, ", parentLocalPoint.GetX(), + parentLocalPoint.GetY()); + + // Since the paintRect is relative to parent, use parent local point to perform touch test. + if (GetTouchRect().IsInRegion(parentLocalPoint)) { + // Calculates the local point location in this node. + const auto localPoint = parentLocalPoint - paintRect_.GetOffset(); + for (auto iter = children_.rbegin(); iter != children_.rend(); ++iter) { + auto& child = *iter; + child->MouseTest(globalPoint, localPoint, result); + } + // Calculates the coordinate offset in this node. + const auto coordinateOffset = globalPoint - localPoint; + globalPoint_ = globalPoint; + OnMouseTestHit(coordinateOffset, result); + } +} + +bool RenderNode::MouseHoverTest(const Point& parentLocalPoint) +{ + const auto localPoint = parentLocalPoint - paintRect_.GetOffset(); + // Since the paintRect is relative to parent, use parent local point to perform touch test. + if (GetTouchRect().IsInRegion(parentLocalPoint)) { + auto context = context_.Upgrade(); + if (!context) { + return false; + } + hoverChildren_.clear(); + context->AddToHoverList(AceType::WeakClaim(this).Upgrade()); + for (auto iter = children_.begin(); iter != children_.end(); ++iter) { + auto& child = *iter; + if (child->MouseHoverTest(localPoint)) { + hoverChildren_.emplace_back(child); + } + } + // mouse state of the node is from NONE to HOVER, the callback of hover enter is triggered. + if (mouseState_ == MouseState::NONE) { + OnMouseHoverEnterTest(); + mouseState_ = MouseState::HOVER; + } + return true; + } else { + for (const auto& child : hoverChildren_) { + child->MouseHoverTest(localPoint); + } + // mouse state of the node is from HOVER to NONE, the callback of hover exit is triggered. + if (mouseState_ == MouseState::HOVER) { + OnMouseHoverExitTest(); + mouseState_ = MouseState::NONE; + } + return false; + } +} + +bool RenderNode::RotationMatchTest(const RefPtr& requestRenderNode) +{ + RotationNode* rotationNode = AceType::DynamicCast(this); + if ((rotationNode != nullptr) && requestRenderNode == this) { + LOGD("RotationMatchTest: match rotation focus node %{public}s.", GetTypeName()); + return true; + } + + for (auto iter = children_.rbegin(); iter != children_.rend(); ++iter) { + const auto& child = *iter; + if (child && child->RotationMatchTest(requestRenderNode)) { + return true; + } + } + + return false; +} + +bool RenderNode::RotationTest(const RotationEvent& event) +{ + for (auto iter = children_.rbegin(); iter != children_.rend(); ++iter) { + const auto& child = *iter; + if (child && child->RotationTest(event)) { + return true; + } + } + + RotationNode* rotationNode = AceType::DynamicCast(this); + if ((rotationNode != nullptr) && rotationNode->OnRotation(event)) { + LOGD("RotationTest: type is %{public}s accept", GetTypeName()); + return true; + } + + return false; +} + +bool RenderNode::RotationTestForward(const RotationEvent& event) +{ + RotationNode* rotationNode = AceType::DynamicCast(this); + if ((rotationNode != nullptr) && rotationNode->OnRotation(event)) { + LOGD("RotationTestForward: type is %{public}s accept", GetTypeName()); + return true; + } + + for (auto iter = children_.begin(); iter != children_.end(); ++iter) { + const auto& child = *iter; + if (child && child->RotationTestForward(event)) { + return true; + } + } + + return false; +} + +double RenderNode::GetBaselineDistance(TextBaseline textBaseline) +{ + if (GetChildren().empty()) { + return GetLayoutSize().Height(); + } + return GetHighestChildBaseline(textBaseline); +} + +bool RenderNode::ScrollPageByChild(Offset& delta, int32_t source) +{ + RefPtr parent = GetParent().Upgrade(); + if (parent) { + return parent->ScrollPageByChild(delta, source); + } + return true; +} + +double RenderNode::GetHighestChildBaseline(TextBaseline baseline) +{ + double distance = 0.0; + for (const auto& child : children_) { + double childBaseline = child->GetBaselineDistance(baseline); + childBaseline += child->GetPosition().GetY(); + distance = NearZero(distance) ? childBaseline : std::min(distance, childBaseline); + } + return distance; +} + +double RenderNode::GetFirstChildBaseline(TextBaseline baseline) +{ + double distance = GetLayoutSize().Height(); + if (!GetChildren().empty()) { + auto firstChild = GetChildren().front(); + distance = firstChild->GetBaselineDistance(baseline); + distance += firstChild->GetPosition().GetY(); + } + return distance; +} + +double RenderNode::NormalizeToPx(Dimension dimension) const +{ + if (dimension.Unit() == DimensionUnit::PX) { + return dimension.Value(); + } + auto context = context_.Upgrade(); + ACE_DCHECK(context); + return context->NormalizeToPx(dimension); +} + +double RenderNode::NormalizePercentToPx(const Dimension& dimension, bool isVertical) const +{ + if (dimension.Unit() != DimensionUnit::PERCENT) { + return NormalizeToPx(dimension); + } + double parentLimit = 0.0; + auto parent = parent_.Upgrade(); + if (!parent) { + parentLimit = isVertical ? GetLayoutParam().GetMaxSize().Height() : GetLayoutParam().GetMaxSize().Width(); + return parentLimit * dimension.Value(); + } + auto parentSize = parent->GetLayoutParam().GetMaxSize(); + if (parentSize > viewPort_) { + parentSize = viewPort_; + } + parentLimit = isVertical ? parentSize.Height() : parentSize.Width(); + return parentLimit * dimension.Value(); +} + +Offset RenderNode::GetOffsetFromOrigin(const Offset& offset) const +{ + auto parent = parent_.Upgrade(); + if (!parent) { + return offset; + } + Offset nowOffset = GetPosition(); + return parent->GetOffsetFromOrigin(offset + nowOffset); +} + +Offset RenderNode::GetGlobalOffset() const +{ + auto renderNode = parent_.Upgrade(); + return renderNode ? GetPosition() + renderNode->GetGlobalOffset() : GetPosition(); +} + +bool RenderNode::IsVisible(const Rect& rect, bool totally) const +{ + Rect intersectRect = Rect(Offset(), GetLayoutSize()); + bool visible = totally ? rect.IsWrappedBy(intersectRect) : rect.IsIntersectWith(intersectRect); + if (!visible) { + return false; + } + auto parent = parent_.Upgrade(); + if (!parent) { + return true; + } + return parent->IsVisible(rect + GetPosition()); +} + +RefPtr RenderNode::GetLastChild() const +{ + if (children_.empty()) { + return nullptr; + } + return children_.back(); +} + +RefPtr RenderNode::GetFirstChild() const +{ + if (children_.empty()) { + return nullptr; + } + return children_.front(); +} + +void RenderNode::UpdateAccessibilityPosition() +{ + const auto& context = context_.Upgrade(); + if (!context) { + return; + } + auto viewScale = context->GetViewScale(); + if (NearZero(viewScale)) { + return; + } + + auto accessibilityNode = GetAccessibilityNode().Upgrade(); + if (!accessibilityNode) { + return; + } + + Size size = GetLayoutSize(); + Offset globalOffset = GetGlobalOffset(); + PositionInfo positionInfo = { (size.Width()) * viewScale, (size.Height()) * viewScale, + (globalOffset.GetX()) * viewScale, (globalOffset.GetY()) * viewScale }; + accessibilityNode->SetPositionInfo(positionInfo); +} + +void RenderNode::UpdateAll(const RefPtr& component) +{ + if (!component) { + LOGE("fail to update all due to component is null"); + return; + } + touchable_ = component->IsTouchable(); + disabled_ = component->IsDisabledStatus(); + auto renderComponent = AceType::DynamicCast(component); + if (renderComponent) { + positionParam_ = renderComponent->GetPositionParam(); + flexWeight_ = renderComponent->GetFlexWeight(); + displayIndex_ = renderComponent->GetDisplayIndex(); + isIgnored_ = renderComponent->IsIgnored(); + if (renderComponent->IsCustomComponent()) { + onLayoutReady_ = + AceAsyncEvent::Create(renderComponent->GetOnLayoutReadyMarker(), context_); + } + } + zIndex_ = renderComponent->GetZIndex(); + Update(component); + MarkNeedLayout(); +} + +void RenderNode::UpdateOpacity(uint8_t opacity) +{ + if (!SupportOpacity()) { + return; + } + if (opacity_ != opacity) { + opacity_ = opacity; + MarkNeedRender(); + } +} + +RenderNode::OpacityCallback RenderNode::GetOpacityCallback(int32_t domId) +{ + if (domId != GetNodeId()) { + return nullptr; + } + if (!SupportOpacity()) { + return nullptr; + } + return [weak = AceType::WeakClaim(this)](uint8_t opacity) { + auto render = weak.Upgrade(); + if (render) { + render->UpdateOpacity(opacity); + } + }; +} + +void RenderNode::GetDomOpacityCallbacks(int32_t domId, std::list& result) +{ + if (domId != GetNodeId()) { + return; + } + auto callback = GetOpacityCallback(domId); + if (callback) { + result.emplace_back(callback); + } + for (auto& child : children_) { + child->GetDomOpacityCallbacks(domId, result); + } +} + +int32_t RenderNode::GetNodeId() const +{ + return GetAccessibilityNodeId(); +} + +uint8_t RenderNode::GetOpacity() const +{ + return opacity_; +} + +bool RenderNode::SupportOpacity() +{ + return false; +} + +Offset RenderNode::GetOffsetToPage() const +{ + auto offset = GetGlobalOffset(); + auto context = GetContext().Upgrade(); + if (context) { + offset = offset - context->GetPageRect().GetOffset(); + } + return offset; +} + +void RenderNode::ClearRenderObject() +{ + context_ = nullptr; + viewPort_ = Size(); + globalPoint_ = Point(); + touchRect_ = Rect(); + accessibilityNode_ = nullptr; + needUpdateAccessibility_ = true; + disabled_ = false; + positionParam_ = PositionParam(); + opacity_ = 255; + interceptTouchEvent_ = false; + mouseState_ = MouseState::NONE; + + children_.clear(); + accessibilityText_ = ""; + layoutParam_ = LayoutParam(); + paintRect_ = Rect(); + parent_ = nullptr; + depth_ = 0; + needRender_ = false; + needLayout_ = false; + visible_ = true; + hidden_ = false; + takeBoundary_ = false; + layoutParamChanged_ = false; + disableTouchEvent_ = false; + needUpdateTouchRect_ = false; + flexWeight_ = 0.0; + displayIndex_ = 1; + textDirection_ = TextDirection::LTR; + onChangeCallback_ = nullptr; +} + +RRect RenderNode::GetGlobalWindowBlurRRect(std::vector& coords) const +{ + RRect windowBlurRRect = GetWindowBlurRRect(); + Rect innerRect = windowBlurRRect.GetRect(); + if (!innerRect.IsValid()) { + return RRect {}; + } else { + innerRect += GetPosition(); + windowBlurRRect += GetPosition(); + coords.push_back(windowBlurRRect); + auto parent = GetParent().Upgrade(); + while (parent) { + auto parentBlurRRect = parent->GetWindowBlurRRect(); + const Corner& corner = parentBlurRRect.GetCorner(); + if (!innerRect.IsWrappedBy(parentBlurRRect.GetRect()) || + (corner.topLeftRadius.GetX().IsValid() && corner.topLeftRadius.GetY().IsValid())) { + coords.push_back(parentBlurRRect); + } + innerRect = innerRect.Constrain(parentBlurRRect.GetRect()); + auto offset = parent->GetPosition(); + innerRect += offset; + // out of view port + if (!innerRect.IsValid()) { + coords.clear(); + return RRect {}; + } + for (auto& coord : coords) { + coord += offset; + } + parent = parent->GetParent().Upgrade(); + } + return RRect::MakeRRect(innerRect, windowBlurRRect.GetCorner().topLeftRadius); + } +} + +Rect RenderNode::GetRectWithShadow() const +{ + if (!hasShadow_ || !shadow_.IsValid()) { + return Rect(Offset::Zero(), paintRect_.GetSize()); + } + auto blurRadius = shadow_.GetBlurRadius(); + auto elevation = shadow_.GetElevation(); + if (elevation > 0.0f && elevation < shadow_.GetLightHeight()) { + // Conversion between blurRadius and elevation. + blurRadius = elevation / (shadow_.GetLightHeight() - elevation) * shadow_.GetLightRadius(); + } + auto radius = 2.0 * blurRadius + shadow_.GetSpreadRadius(); + + Rect shadowRect = paintRect_ + (shadow_.GetOffset() - Offset(radius, radius)); + shadowRect += Size(2.0 * radius, 2.0 * radius); + shadowRect = shadowRect.CombineRect(paintRect_); + + Offset paintOffset = paintRect_.GetOffset(); + Offset shadowOffset = shadowRect.GetOffset(); + Offset offset = Offset(std::min(0.0, shadowOffset.GetX() - paintOffset.GetX()), + std::min(0.0, shadowOffset.GetY() - paintOffset.GetY())); + return Rect(offset, shadowRect.GetSize()); +} + +void RenderNode::UpdateWindowBlurRRect(bool clear) +{ + auto pipelineContext = context_.Upgrade(); + if (!pipelineContext) { + LOGE("pipelineContext is null"); + return; + } + if (clear) { + pipelineContext->ClearWindowBlurRegion(GetNodeId()); + } else { + std::vector coords; + auto blurRect = GetGlobalWindowBlurRRect(coords); + pipelineContext->UpdateWindowBlurRegion( + GetNodeId(), blurRect, GetWindowBlurProgress(), GetWindowBlurStyle(), coords); + } +} + +void RenderNode::WindowBlurTest() +{ + if (GetHidden() || !GetVisible()) { + return; + } + + if (NeedWindowBlur()) { + UpdateWindowBlurRRect(); + } + for (const auto& child : children_) { + child->WindowBlurTest(); + } +} + +bool RenderNode::HasEffectiveTransform() const +{ + return false; +} + +Rect RenderNode::GetDirtyRect() const +{ + Rect dirty = Rect(GetGlobalOffset(), GetLayoutSize()); + auto context = context_.Upgrade(); + if (!context) { + LOGE("Get dirty rect failed. context is null."); + return dirty; + } + // check self has transform effect. + if (HasEffectiveTransform()) { + return context->GetRootRect(); + } + // check parent has transform effect. + auto pageRoot = context->GetLastPageRender(); + auto parent = GetParent().Upgrade(); + while (parent && parent != pageRoot) { + if (parent->HasEffectiveTransform()) { + return context->GetRootRect(); + } + parent = parent->GetParent().Upgrade(); + } + // No transform takes effect, return layoutSize. + return dirty; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/pipeline/base/render_node.h b/frameworks/core/pipeline/base/render_node.h new file mode 100644 index 00000000..61adf3a8 --- /dev/null +++ b/frameworks/core/pipeline/base/render_node.h @@ -0,0 +1,923 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_RENDER_NODE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_RENDER_NODE_H + +#include + +#include "base/geometry/dimension.h" +#include "base/geometry/rect.h" +#include "base/memory/ace_type.h" +#include "base/utils/macros.h" +#include "core/accessibility/accessibility_manager.h" +#include "core/animation/keyframe_animation.h" +#include "core/common/draw_delegate.h" +#include "core/components/common/layout/constants.h" +#include "core/components/common/layout/layout_param.h" +#include "core/components/common/properties/text_style.h" +#include "core/gestures/touch_event.h" +#include "core/pipeline/base/render_context.h" +#include "core/pipeline/base/render_layer.h" +#include "core/pipeline/pipeline_context.h" + +namespace OHOS::Ace { + +extern const Dimension FOCUS_BOUNDARY; + +class Component; + +// If no insertion location is specified, new child will be added to the end of children list by default. +constexpr int32_t DEFAULT_RENDER_NODE_SLOT = -1; +constexpr int32_t PRESS_DURATION = 100; +constexpr int32_t HOVER_DURATION = 250; + +using HoverAndPressCallback = std::function; + +// RenderNode is the base class for different render backend, represent a render unit for render pipeline. +class ACE_EXPORT RenderNode : public virtual AceType { + DECLARE_ACE_TYPE(RenderNode, AceType); + +public: + using OpacityCallback = std::function; + using SlipFactorSetting = std::function; + ~RenderNode() override = default; + + void SetZindex(int32_t zIndex) + { + zIndex_ = zIndex; + } + + int32_t GetZindex() const + { + return zIndex_; + } + + void AddChild(const RefPtr& child, int32_t slot = DEFAULT_RENDER_NODE_SLOT); + + void RemoveChild(const RefPtr& child); + + virtual void MoveWhenOutOfViewPort(bool hasEffect); + + void Attach(const WeakPtr& context) + { + context_ = context; + OnAttachContext(); + } + + // unmount from render tree + void Unmount() + { + RefPtr parent = parent_.Upgrade(); + if (parent) { + parent->MarkNeedLayout(); + parent->RemoveChild(AceType::Claim(this)); + } + } + + // Update node with attr, style, event, method and so on. + // This method will call Update virtual function. + void UpdateAll(const RefPtr& component); + + virtual void AddToScene() {} + + virtual void Update(const RefPtr& component) = 0; + + // Called when page context attached, subclass can initialize object which needs page context. + virtual void OnAttachContext() {} + + void Render() + { + if (!needRender_) { + return; + } + PerformRender(); + needRender_ = false; + OnRenderFinish(); + } + + // Each subclass should override this function for actual render operation. + virtual void PerformRender() {} + + virtual void FinishRender(const std::unique_ptr& delegate, const Rect& dirty) {} + + virtual void UpdateTouchRect(); + + bool NeedLayout() const + { + return needLayout_; + } + + void SetNeedLayout(bool needLayout) + { + needLayout_ = needLayout; + } + + void MarkNeedLayout(bool selfOnly = false, bool forceParent = false); + + void MarkNeedPredictLayout(); + + void OnLayout(); + + virtual void OnPredictLayout() {} + + virtual Size GetChildViewPort() + { + return viewPort_; + } + + // Called by parent to perform layout. + void Layout(const LayoutParam& layoutParam) + { + auto pipeline = context_.Upgrade(); + if (!pipeline) { + LOGE("pipeline is null when layout"); + return; + } + + bool dipScaleChange = pipeline->GetDipScale() != dipScale_; + dipScale_ = pipeline->GetDipScale(); + if (dipScaleChange || layoutParam_ != layoutParam) { + layoutParam_ = layoutParam; + layoutParamChanged_ = true; + SetNeedLayout(true); + } + + if (onChangeCallback_) { + onChangeCallback_(); + } + OnLayout(); + } + + // Called by parent to update layout param without PerformLayout. + void SetLayoutParam(const LayoutParam& layoutParam) + { + if (layoutParam_ != layoutParam) { + layoutParam_ = layoutParam; + layoutParamChanged_ = true; + MarkNeedLayout(); + } + } + + const LayoutParam& GetLayoutParam() const + { + return layoutParam_; + } + + // Each subclass should override this function for actual layout operation. + virtual void PerformLayout() = 0; + + Offset GetPosition() const + { + return paintRect_.GetOffset(); + } + + void SetPosition(const Offset& offset); + + void SetAbsolutePosition(const Offset& offset) + { + SetPositionInternal(offset); + } + + Size GetLayoutSize() const + { + return paintRect_.GetSize(); + } + + Rect GetRectWithShadow() const; + + void SetShadow(const Shadow& shadow) + { + shadow_ = shadow; + hasShadow_ = true; + } + + void SetLayoutSize(const Size& size) + { + if (paintRect_.GetSize() != size) { + paintRect_.SetSize(size); + needUpdateTouchRect_ = true; + OnSizeChanged(); + } + } + + static bool SortZIndexCompartor(const WeakPtr& left, const WeakPtr& right) + { + auto leftChild = left.Upgrade(); + auto rightChild = right.Upgrade(); + if (!leftChild) { + return false; + } else if (!rightChild) { + return true; + } + return (leftChild->GetZindex() < rightChild->GetZindex()); + } + + void SortPaintChildrenBasedOnZIndex() + { + paintChildren_.clear(); + for (const auto& child: children_) { + paintChildren_.emplace_back(WeakPtr(child)); + } + paintChildren_.sort(SortZIndexCompartor); + } + + Rect GetRectBasedWindowTopLeft() + { + Offset offset = GetGlobalOffset() + touchRect_.GetOffset(); + return Rect(offset, touchRect_.GetSize()); + } + + virtual const Rect& GetTouchRect() + { + if (needUpdateTouchRect_) { + needUpdateTouchRect_ = false; + UpdateTouchRect(); + } + return touchRect_; + } + + const Rect& GetPaintRect() const + { + return paintRect_; + } + + void SetPaintRect(const Rect& rect) + { + paintRect_ = rect; + needUpdateTouchRect_ = true; + } + + void SetTouchRect(const Rect& rect) + { + touchRect_ = rect; + needUpdateTouchRect_ = false; + } + + virtual void OnChildAdded(const RefPtr& child) + { + if (slipFactorSetting_) { + child->SetSlipFactorSetting(slipFactorSetting_); + } + } + + virtual void OnChildRemoved(const RefPtr& child) {} + + const std::string& GetAccessibilityText() const + { + return accessibilityText_; + } + + void SetAccessibilityText(const std::string& accessibilityText) + { + accessibilityText_ = accessibilityText; + } + + virtual void DumpTree(int32_t depth); + + virtual void Dump(); + + enum class BridgeType { NONE, AGP, FLUTTER }; + + virtual BridgeType GetBridgeType() const + { + return BridgeType::NONE; + } + + void SetNeedRender(bool needRender) + { + needRender_ = needRender; + } + + void MarkNeedRender(bool overlay = false); + + bool NeedRender() const + { + return needRender_; + } + + void SetDepth(int32_t depth) + { + depth_ = depth; + } + + int32_t GetDepth() const + { + return depth_; + } + + PositionType GetPositionType() const + { + return positionParam_.type; + } + + virtual const Dimension& GetLeft() const + { + return positionParam_.left.first; + } + + virtual const Dimension& GetRight() const + { + return positionParam_.right.first; + } + + virtual const Dimension& GetTop() const + { + return positionParam_.top.first; + } + + virtual const Dimension& GetBottom() const + { + return positionParam_.bottom.first; + } + + virtual bool HasLeft() const + { + return positionParam_.left.second; + } + + virtual bool HasRight() const + { + return positionParam_.right.second; + } + + virtual bool HasTop() const + { + return positionParam_.top.second; + } + + virtual bool HasBottom() const + { + return positionParam_.bottom.second; + } + + WeakPtr GetParent() const + { + return parent_; + } + + WeakPtr GetContext() const + { + return context_; + } + + virtual RenderLayer GetRenderLayer() + { + return nullptr; + } + + void SetVisible(bool visible) + { + if (visible_ != visible) { + visible_ = visible; + AddDirtyRenderBoundaryNode(); + OnVisibleChanged(); + } + for (auto& child : children_) { + child->SetVisible(visible); + } + } + + virtual bool GetVisible() const + { + return visible_; + } + + virtual void SetHidden(bool hidden) + { + if (hidden_ != hidden) { + hidden_ = hidden; + AddDirtyRenderBoundaryNode(); + OnHiddenChanged(hidden); + for (auto& child : children_) { + child->SetHidden(hidden); + } + } + } + + bool GetHidden() const + { + return hidden_; + } + + bool IsTakenBoundary() const + { + return takeBoundary_; + } + + virtual bool IsRepaintBoundary() const + { + return false; + } + + const std::list>& GetChildren() const + { + return children_; + } + + void NotifyPaintFinish() + { + if (needUpdateAccessibility_) { + for (auto& child : children_) { + child->NotifyPaintFinish(); + } + OnPaintFinish(); + } + } + + virtual void RenderWithContext(RenderContext& context, const Offset& offset); + virtual void Paint(RenderContext& context, const Offset& offset); + virtual void PaintChild(const RefPtr& child, RenderContext& context, const Offset& offset); + + virtual void OnPaintFinish() {} + + virtual bool TouchTest(const Point& globalPoint, const Point& parentLocalPoint, const TouchRestrict& touchRestrict, + TouchTestResult& result); + + virtual void MouseTest(const Point& globalPoint, const Point& parentLocalPoint, MouseTestResult& result); + virtual bool MouseHoverTest(const Point& parentLocalPoint); + + virtual bool RotationMatchTest(const RefPtr& requestRenderNode); + + virtual bool RotationTest(const RotationEvent& event); + + virtual bool RotationTestForward(const RotationEvent& event); + + virtual double GetBaselineDistance(TextBaseline textBaseline); + + virtual bool ScrollPageByChild(Offset& delta, int32_t source); + + // Change render nodes' status + void ChangeStatus(RenderStatus renderStatus) + { + // Myself status should be changed and function achieved by derived class which is component + OnStatusChanged(renderStatus); + + // Deep traversal + for (auto& child : children_) { + child->ChangeStatus(renderStatus); + } + } + + Offset GetOffsetFromOrigin(const Offset& offset) const; + + Offset GetGlobalOffset() const; + + // Whether |rect| is in the paint rect of render tree recursively. + bool IsVisible(const Rect& rect, bool totally = false) const; + + void SetOnChangeCallback(std::function&& onChangeCallback) + { + onChangeCallback_ = std::move(onChangeCallback); + } + + void SetDisableTouchEvent(bool disableTouchEvent) + { + disableTouchEvent_ = disableTouchEvent; + } + + bool GetDisableTouchEvent() const + { + return disableTouchEvent_; + } + + void SetTextDirection(TextDirection textDirection) + { + textDirection_ = textDirection; + } + + TextDirection GetTextDirection() const + { + return textDirection_; + } + + // Transfer any other dimension unit to logical px. + // NOTE: context_ MUST be initialized before call this method. + double NormalizeToPx(Dimension dimension) const; + + // Mainly use this function to convert Percent to Px. Do not call this function in Update(). + double NormalizePercentToPx(const Dimension& dimension, bool isVertical) const; + + // for accessibility + void SetAccessibilityNode(const WeakPtr& accessibilityNode) + { + accessibilityNode_ = accessibilityNode; + } + + const WeakPtr& GetAccessibilityNode() const + { + return accessibilityNode_; + } + + int32_t GetAccessibilityNodeId() const + { + auto accessibilityNode = accessibilityNode_.Upgrade(); + if (accessibilityNode) { + return accessibilityNode->GetNodeId(); + } + return 0; + } + + void ClearAccessibilityRect() + { + auto node = accessibilityNode_.Upgrade(); + if (node) { + node->SetRect(Rect()); + } + for (auto& child : children_) { + child->ClearAccessibilityRect(); + } + } + + void SetAccessibilityRect(const Rect& rect) + { + Rect parentRect = rect; + if (!selfOffset_.IsZero()) { + parentRect.SetOffset(parentRect.GetOffset() + selfOffset_); + } + auto node = accessibilityNode_.Upgrade(); + auto content = context_.Upgrade(); + Rect currentRect = Rect(GetGlobalOffset(), GetLayoutSize()); + Rect clampRect = currentRect.Constrain(parentRect); + if (node && content) { + if (clampRect.IsValid()) { +#if !defined(WINDOWS_PLATFORM) and !defined(MAC_PLATFORM) + node->SetRect(clampRect * content->GetViewScale()); +#else + auto size = Size(clampRect.Width(), clampRect.Height()) * content->GetViewScale(); + if (size.Width() > node->GetWidth() || size.Height() > node->GetHeight()) { + // Same AccessibilityNode update the largest size. + node->SetWidth(size.Width()); + node->SetHeight(size.Height()); + node->SetLeft(clampRect.Left() * content->GetViewScale()); + node->SetTop(clampRect.Top() * content->GetViewScale()); + } else if (NearEqual(size.Width(), node->GetWidth()) && NearEqual(size.Height(), node->GetHeight())) { + // Update the offset when same size. + node->SetLeft(clampRect.Left() * content->GetViewScale()); + node->SetTop(clampRect.Top() * content->GetViewScale()); + } + if (node->GetTag() == "tab-bar") { + return; + } +#endif + } else { + SetAccessibilityVisible(false); + } + } + if (clampRect.IsValid()) { + for (auto& child : children_) { + child->SetAccessibilityRect(clampRect); + } + } + } + + void SetNeedUpdateAccessibility(bool needUpdate) + { + needUpdateAccessibility_ = needUpdate; + for (auto& child : children_) { + child->SetNeedUpdateAccessibility(needUpdate); + } + } + + void SetAccessibilityVisible(bool visible) + { + auto node = accessibilityNode_.Upgrade(); + if (node) { + node->SetVisible(visible); + } + for (auto& child : children_) { + child->SetAccessibilityVisible(visible); + } + } + + RefPtr GetLastChild() const; + + RefPtr GetFirstChild() const; + + Offset GetOffsetToStage() const + { + auto offset = GetGlobalOffset(); + auto context = GetContext().Upgrade(); + if (context) { + offset = offset - context->GetStageRect().GetOffset(); + } + return offset; + } + + Offset GetOffsetToPage() const; + + double GetFlexWeight() const + { + return flexWeight_; + } + + int32_t GetDisplayIndex() const + { + return displayIndex_; + } + + OpacityCallback GetOpacityCallback(int32_t domId); + + virtual bool SupportOpacity(); + + void GetDomOpacityCallbacks(int32_t domId, std::list& result); + + int32_t GetNodeId() const; + + uint8_t GetOpacity() const; + + virtual void UpdateOpacity(uint8_t opacity); + + bool InterceptTouchEvent() const + { + return interceptTouchEvent_; + } + + void SetInterceptTouchEvent(bool interceptTouchEvent) + { + interceptTouchEvent_ = interceptTouchEvent; + } + + virtual void OnMouseHoverEnterAnimation() {} + virtual void OnMouseHoverExitAnimation() {} + virtual void OnMouseClickDownAnimation() {} + virtual void OnMouseClickUpAnimation() {} + virtual void StopMouseHoverAnimation() {} + + void CreateMouseAnimation(RefPtr>& animation, const Color& from, const Color& to); + void SetHoverAndPressCallback(const HoverAndPressCallback& callback) + { + hoveAndPressCallback_ = callback; + } + + Color GetEventEffectColor() const + { + return eventEffectColor_; + } + + void UpdateWindowBlurRRect(bool clear = false); + + void WindowBlurTest(); + + virtual RRect GetWindowBlurRRect() const + { + return RRect::MakeRRect(Rect(Offset::Zero(), GetLayoutSize()), Radius(0.0)); + } + + RRect GetGlobalWindowBlurRRect(std::vector& coords) const; + + void MarkNeedWindowBlur(bool flag) + { + if (needWindowBlur_ != flag) { + needWindowBlur_ = flag; + if (!needWindowBlur_) { + SetWindowBlurProgress(0.0f); + SetWindowBlurStyle(WindowBlurStyle::STYLE_BACKGROUND_SMALL_LIGHT); + } + OnWindowBlurChanged(); + } + } + + bool NeedWindowBlur() const + { + return needWindowBlur_; + } + + void SetWindowBlurProgress(float progress) + { + windowBlurProgress_ = progress; + } + + float GetWindowBlurProgress() const + { + return windowBlurProgress_; + } + + void SetWindowBlurStyle(WindowBlurStyle style) + { + windowBlurStyle_ = style; + } + + WindowBlurStyle GetWindowBlurStyle() const + { + return windowBlurStyle_; + } + + void SetSlipFactorSetting(const SlipFactorSetting& slipFactorSetting) + { + slipFactorSetting_ = slipFactorSetting; + } + + bool IsInfiniteLayout() const + { + return GetLayoutSize().Width() > INT32_MAX || GetLayoutSize().Height() > INT32_MAX; + } + + bool IsIgnored() const + { + return isIgnored_; + } + + void SetIsIgnored(bool ignore) + { + isIgnored_ = ignore; + } + + bool IsDeclarativeAnimationActive() const + { + return declarativeAnimationActive_; + } + + void SetDeclarativeAnimationActive(bool active) + { + declarativeAnimationActive_ = active; + } + + virtual void OnAppShow() + { + isAppOnShow_ = true; + for (const auto& child : children_) { + child->OnAppShow(); + } + } + + virtual void OnAppHide() + { + isAppOnShow_ = false; + for (const auto& child : children_) { + child->OnAppHide(); + } + } + + template + RefPtr GetTheme() const + { + auto context = context_.Upgrade(); + if (!context) { + return nullptr; + } + auto themeManager = context->GetThemeManager(); + if (!themeManager) { + return nullptr; + } + return themeManager->GetTheme(); + } + + virtual bool HasEffectiveTransform() const; + + Rect GetDirtyRect() const; + +protected: + explicit RenderNode(bool takeBoundary = false); + virtual void ClearRenderObject(); + // Each subclass override this to return touch target object which is used to receive touch event. + // For convenience, it is recommended to return directly to the corresponding gesture recognizer. + // Sees gestures directory. + // Uses coordinateOffset for recognizer to calculate the local location of the touch point. + // Uses touchRestrict for restrict gesture recognition in some sense. + virtual void OnTouchTestHit( + const Offset& coordinateOffset, const TouchRestrict& touchRestrict, TouchTestResult& result) + {} + + virtual void OnMouseTestHit(const Offset& coordinateOffset, MouseTestResult& result) {} + virtual void OnMouseHoverEnterTest() {} + virtual void OnMouseHoverExitTest() {} + + void PrepareLayout(); + + void SetParent(const WeakPtr& parent) + { + parent_ = parent; + } + + void TakeBoundary(bool taken = true) + { + takeBoundary_ = taken; + } + + bool IsLayoutParamChanged() const + { + return layoutParamChanged_; + } + + virtual void OnGlobalPositionChanged() + { + for (const auto& child : children_) { + if (child) { + child->OnGlobalPositionChanged(); + } + } + }; + virtual void OnPositionChanged() {}; + virtual void OnSizeChanged() {}; + virtual void OnVisibleChanged() {}; + virtual void OnRenderFinish() {}; + virtual void OnStatusChanged(RenderStatus renderStatus) {}; + virtual void OnHiddenChanged(bool hidden) {}; + virtual void OnWindowBlurChanged() {}; + virtual bool MarkNeedRenderSpecial(); + + double GetHighestChildBaseline(TextBaseline baseline); + double GetFirstChildBaseline(TextBaseline baseline); + void UpdateAccessibilityPosition(); + + RefPtr GetThemeManager() const + { + auto context = context_.Upgrade(); + if (!context) { + return nullptr; + } + return context->GetThemeManager(); + } + + WeakPtr context_; + Size viewPort_; + Point globalPoint_; + WeakPtr accessibilityNode_; + Rect touchRect_; + PositionParam positionParam_; + uint8_t opacity_ = 255; + Shadow shadow_; + + float windowBlurProgress_ = 0.0f; + WindowBlurStyle windowBlurStyle_ = WindowBlurStyle::STYLE_BACKGROUND_SMALL_LIGHT; + bool touchable_ = true; + bool interceptTouchEvent_ = false; + bool needWindowBlur_ = false; + bool needUpdateAccessibility_ = true; + bool disabled_ = false; + + MouseState mouseState_ = MouseState::NONE; + SlipFactorSetting slipFactorSetting_; + + HoverAndPressCallback hoveAndPressCallback_; + + // hover or press color + Color eventEffectColor_ = Color::TRANSPARENT; + std::function onLayoutReady_; + + bool isAppOnShow_ = true; + +private: + void AddDirtyRenderBoundaryNode() + { + if (visible_ && !hidden_ && IsRepaintBoundary()) { + auto pipelineContext = context_.Upgrade(); + if (pipelineContext == nullptr) { + return; + } + pipelineContext->AddDirtyRenderNode(AceType::Claim(this)); + } + } + + void SetPositionInternal(const Offset& offset); + + std::list> hoverChildren_; + std::list> paintChildren_; + std::list> children_; + std::string accessibilityText_; + LayoutParam layoutParam_; + Rect paintRect_; + WeakPtr parent_; + int32_t depth_ = 0; + bool needRender_ = false; + bool needLayout_ = false; + bool visible_ = true; + bool takeBoundary_ = false; + bool layoutParamChanged_ = false; + bool disableTouchEvent_ = false; + bool needUpdateTouchRect_ = false; + bool hasShadow_ = false; + + double flexWeight_ = 0.0; + int32_t displayIndex_ = 1; + + double dipScale_ = 0.0; + + TextDirection textDirection_ { TextDirection::LTR }; + Offset selfOffset_ { 0, 0 }; + + bool hidden_ = false; + bool isIgnored_ = false; + bool declarativeAnimationActive_ = false; + std::function onChangeCallback_; + ACE_DISALLOW_COPY_AND_MOVE(RenderNode); + + int32_t zIndex_ = 0; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_RENDER_NODE_H diff --git a/frameworks/core/pipeline/base/scoped_canvas_state.h b/frameworks/core/pipeline/base/scoped_canvas_state.h new file mode 100644 index 00000000..851d7264 --- /dev/null +++ b/frameworks/core/pipeline/base/scoped_canvas_state.h @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_SCOPED_CANVAS_STATE_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_SCOPED_CANVAS_STATE_H + +#include "core/pipeline/base/flutter_render_context.h" + +namespace OHOS::Ace { + +class ScopedCanvas final { +public: + static ScopedCanvas Create(RenderContext& context) + { + auto renderContext = AceType::DynamicCast(&context); + if (!renderContext) { + LOGE("render context is null"); + return ScopedCanvas(nullptr); + } + auto canvas = renderContext->GetCanvas(); + if (!canvas) { + LOGE("Paint canvas is null"); + return ScopedCanvas(nullptr); + } + return ScopedCanvas(canvas); + } + + ~ScopedCanvas() + { + if (canvas_) { + canvas_->restore(); + } + } + + // Need to check with bool function before call this function. + flutter::Canvas* operator->() const + { + return canvas_; + } + + operator bool() const + { + return canvas_ != nullptr; + } + + SkCanvas* GetSkCanvas() + { + if (canvas_) { + return canvas_->canvas(); + } + return nullptr; + } + + void FlipHorizontal(double horizontalOffset, double drawRectWidth) const + { + double horizontalMoveDelta = -1.0 * (horizontalOffset + drawRectWidth / 2.0); + canvas_->translate(-1.0 * horizontalMoveDelta, 0.0); + canvas_->scale(-1.0, 1.0); + canvas_->translate(horizontalMoveDelta, 0.0); + } + +private: + explicit ScopedCanvas(flutter::Canvas* canvas) : canvas_(canvas) + { + if (canvas_ != nullptr) { + canvas_->save(); + } + } + + flutter::Canvas* canvas_ = nullptr; + + ACE_DISALLOW_COPY_AND_MOVE(ScopedCanvas); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_SCOPED_CANVAS_STATE_H diff --git a/frameworks/core/pipeline/base/single_child.h b/frameworks/core/pipeline/base/single_child.h new file mode 100644 index 00000000..64971508 --- /dev/null +++ b/frameworks/core/pipeline/base/single_child.h @@ -0,0 +1,59 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_SINGLE_CHILD_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_SINGLE_CHILD_H + +#include "base/memory/ace_type.h" +#include "core/pipeline/base/component.h" + +namespace OHOS::Ace { + +class SingleChild : public virtual AceType { + DECLARE_ACE_TYPE(SingleChild, AceType); + +public: + SingleChild() = default; + explicit SingleChild(const RefPtr& child) : child_(child) {} + ~SingleChild() override = default; + + const RefPtr& GetChild() const + { + return child_; + } + + void SetChild(const RefPtr& child) + { + // Clear preview child's parent. + if (child_) { + child_->SetParent(nullptr); + } + + child_ = child; + + // Set current child's parent. + if (child) { + auto parent = AceType::DynamicCast(this); + child->SetParent(WeakClaim(parent)); + } + } + +private: + RefPtr child_; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_SINGLE_CHILD_H diff --git a/frameworks/core/pipeline/base/sole_child_component.h b/frameworks/core/pipeline/base/sole_child_component.h new file mode 100644 index 00000000..ae5b2efd --- /dev/null +++ b/frameworks/core/pipeline/base/sole_child_component.h @@ -0,0 +1,67 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_SOLE_CHILD_COMPONENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_SOLE_CHILD_COMPONENT_H + +#include "core/pipeline/base/render_component.h" +#include "core/pipeline/base/single_child.h" +#include "core/pipeline/base/sole_child_element.h" + +namespace OHOS::Ace { + +class SoleChildComponent : public RenderComponent, public SingleChild { + DECLARE_ACE_TYPE(SoleChildComponent, RenderComponent, SingleChild); + +public: + SoleChildComponent() = default; + explicit SoleChildComponent(const RefPtr& child) : SingleChild(child) {} + ~SoleChildComponent() override = default; + + RefPtr CreateElement() override + { + return AceType::MakeRefPtr(); + } + + void SetUpdateType(UpdateType updateType) override + { + Component::SetUpdateType(updateType); + auto child = GetChild(); + if (child) { + child->SetUpdateType(updateType); + } + } + + void SetDisabledStatus(bool disabledStatus) override + { + Component::SetDisabledStatus(disabledStatus); + auto child = GetChild(); + if (child) { + child->SetDisabledStatus(disabledStatus); + } + } + + void SetTextDirection(TextDirection direction) override + { + direction_ = direction; + if (GetChild()) { + GetChild()->SetTextDirection(direction); + } + } +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_SOLE_CHILD_COMPONENT_H diff --git a/frameworks/core/pipeline/base/sole_child_element.cpp b/frameworks/core/pipeline/base/sole_child_element.cpp new file mode 100644 index 00000000..e8f738fb --- /dev/null +++ b/frameworks/core/pipeline/base/sole_child_element.cpp @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/pipeline/base/sole_child_element.h" + +#include "base/log/log.h" +#include "base/utils/macros.h" +#include "core/pipeline/base/sole_child_component.h" + +namespace OHOS::Ace { + +RefPtr SoleChildElement::Create() +{ + LOGD("SoleChildElement::Create"); + return AceType::MakeRefPtr(); +} + +void SoleChildElement::PerformBuild() +{ + LOGD("SoleChildElement::PerformBuild"); + RefPtr component = AceType::DynamicCast(component_); + const auto& child = children_.empty() ? nullptr : children_.front(); + UpdateChild(child, component->GetChild()); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/pipeline/base/sole_child_element.h b/frameworks/core/pipeline/base/sole_child_element.h new file mode 100644 index 00000000..339225b5 --- /dev/null +++ b/frameworks/core/pipeline/base/sole_child_element.h @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_SOLE_CHILD_ELEMENT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_SOLE_CHILD_ELEMENT_H + +#include "base/utils/macros.h" +#include "core/pipeline/base/render_element.h" + +namespace OHOS::Ace { + +class ACE_EXPORT SoleChildElement : public RenderElement { + DECLARE_ACE_TYPE(SoleChildElement, RenderElement); + +public: + SoleChildElement() = default; + ~SoleChildElement() override = default; + + static RefPtr Create(); + + void PerformBuild() override; +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMPONENTS_BASE_SOLE_CHILD_ELEMENT_H diff --git a/frameworks/core/pipeline/layers/ace_scene_builder.cpp b/frameworks/core/pipeline/layers/ace_scene_builder.cpp new file mode 100644 index 00000000..343f4d09 --- /dev/null +++ b/frameworks/core/pipeline/layers/ace_scene_builder.cpp @@ -0,0 +1,116 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "core/pipeline/layers/ace_scene_builder.h" + +#include "base/utils/utils.h" + +namespace OHOS::Ace::Flutter { +namespace { + +// Mappings from SkMatrix-index to input-index. +static const int32_t K_SK_MATRIX_INDEX_TO_MATRIX4_INDEX[] = { + 0, + 4, + 12, + 1, + 5, + 13, + 3, + 7, + 15, +}; + +SkMatrix ToSkMatrix(const Matrix4& matrix4) +{ + SkMatrix skMatrix; + for (std::size_t i = 0; i < ArraySize(K_SK_MATRIX_INDEX_TO_MATRIX4_INDEX); ++i) { + int32_t matrixIndex = K_SK_MATRIX_INDEX_TO_MATRIX4_INDEX[i]; + if (matrixIndex < matrix4.Count()) + skMatrix[i] = matrix4[matrixIndex]; + else + skMatrix[i] = 0.0; + } + return skMatrix; +} + +} // namespace + +AceSceneBuilder::AceSceneBuilder() +{ + layerTreeBuilder_ = flutter::OHOS::LayerTreeBuilder::Create(); +} + +void AceSceneBuilder::AddPicture(double dx, double dy, fml::RefPtr picture, int hints) +{ + if (!picture) { + LOGE("AceSceneBuilder:can't add picture"); + return; + } + layerTreeBuilder_->AddPicture(dx, dy, picture.get()->picture()); +} + +void AceSceneBuilder::AddTexture( + double dx, double dy, double width, double height, int64_t textureId, bool freeze, uint8_t opacity) +{ + layerTreeBuilder_->AddTexture(dx, dy, width, height, textureId, freeze, opacity); +} + +void AceSceneBuilder::PushTransform(const Matrix4& matrix4) +{ + auto skMatrix = ToSkMatrix(matrix4); + layerTreeBuilder_->PushTransform(skMatrix); +} + +void AceSceneBuilder::PushClipRRect(const flutter::RRect& rrect, int32_t clipBehavior) +{ + layerTreeBuilder_->PushClipRRect(rrect.sk_rrect, clipBehavior); +} + +void AceSceneBuilder::PushOpacity(int32_t alpha, double dx, double dy) +{ + layerTreeBuilder_->PushOpacity(alpha, dx, dy); +} + +void AceSceneBuilder::PushBackdropFilter(fml::RefPtr imageFilter) +{ + if (!imageFilter) { + LOGE("AceSceneBuilder:can't create image filter"); + return; + } + layerTreeBuilder_->PushBackdropFilter(imageFilter.get()->filter()); +} + +void AceSceneBuilder::PushShaderMask(fml::RefPtr shader, double maskRectLeft, double maskRectRight, + double maskRectTop, double maskRectBottom, int32_t blendMode) +{ + if (!shader) { + LOGE("AceSceneBuilder:can't push shader mask"); + return; + } + layerTreeBuilder_->PushShaderMask( + shader.get()->shader(), maskRectLeft, maskRectRight, maskRectTop, maskRectBottom, blendMode); +} + +void AceSceneBuilder::Pop() +{ + layerTreeBuilder_->Pop(); +} + +std::unique_ptr AceSceneBuilder::GetLayerTree() const +{ + return layerTreeBuilder_->GetLayerTree(); +} + +} // namespace OHOS::Ace::Flutter \ No newline at end of file diff --git a/frameworks/core/pipeline/layers/ace_scene_builder.h b/frameworks/core/pipeline/layers/ace_scene_builder.h new file mode 100644 index 00000000..68d3fa39 --- /dev/null +++ b/frameworks/core/pipeline/layers/ace_scene_builder.h @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_LAYERS_ACE_SCENE_BUILDER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_LAYERS_ACE_SCENE_BUILDER_H + +#include "flutter/flow/ohos_layers/layer_tree.h" +#include "flutter/flow/ohos_layers/layer_tree_builder.h" + +#include "core/pipeline/layers/scene_builder.h" + +namespace OHOS::Ace::Flutter { + +class AceSceneBuilder : public SceneBuilder { + DECLARE_ACE_TYPE(AceSceneBuilder, SceneBuilder) +public: + AceSceneBuilder(); + ~AceSceneBuilder() override = default; + + void AddPicture(double dx, double dy, fml::RefPtr picture, int hints) override; + void AddTexture( + double dx, double dy, double width, double height, int64_t textureId, bool freeze, uint8_t opacity) override; + void PushTransform(const Matrix4& matrix4) override; + void PushClipRRect(const flutter::RRect& rrect, int32_t clipBehavior) override; + void PushOpacity(int32_t alpha, double dx = 0, double dy = 0) override; + void PushBackdropFilter(fml::RefPtr imageFilter) override; + void PushShaderMask(fml::RefPtr shader, double maskRectLeft, double maskRectRight, + double maskRectTop, double maskRectBottom, int32_t blendMode) override; + void Pop() override; + + std::unique_ptr GetLayerTree() const; + +private: + std::unique_ptr layerTreeBuilder_; +}; + +} // namespace OHOS::Ace::Flutter + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_LAYERS_ACE_SCENE_BUILDER_H diff --git a/frameworks/core/pipeline/layers/clip_layer.cpp b/frameworks/core/pipeline/layers/clip_layer.cpp new file mode 100644 index 00000000..f86dae41 --- /dev/null +++ b/frameworks/core/pipeline/layers/clip_layer.cpp @@ -0,0 +1,88 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/pipeline/layers/clip_layer.h" + +#include "base/log/dump_log.h" + +namespace OHOS::Ace::Flutter { + +void ClipLayer::AddToScene(SceneBuilder& builder, double x, double y) +{ + flutter::RRect rrect; + rrect.sk_rrect = rrect_.sk_rrect.makeOffset(x + x_, y + y_); + builder.PushClipRRect(rrect, static_cast(clipBehavior_)); + AddChildToScene(builder, x + x_, y + y_); + builder.Pop(); +} + +void ClipLayer::SetClip(double left, double right, double top, double bottom, Clip clipBehavior) +{ + rrect_.sk_rrect = SkRRect::MakeRect(SkRect::MakeLTRB(static_cast(left), static_cast(top), + static_cast(right), static_cast(bottom))); + clipBehavior_ = clipBehavior; +} + +void ClipLayer::SetClipRRect(const RRect& rrect, Clip clipBehavior) +{ + Rect rect = rrect.GetRect(); + SkVector radii[4] = { { 0.0, 0.0 }, { 0.0, 0.0 }, { 0.0, 0.0 }, { 0.0, 0.0 } }; + radii[SkRRect::kUpperLeft_Corner] = GetSkRadii(rrect.GetCorner().topLeftRadius); + radii[SkRRect::kUpperRight_Corner] = GetSkRadii(rrect.GetCorner().topRightRadius); + radii[SkRRect::kLowerLeft_Corner] = GetSkRadii(rrect.GetCorner().bottomLeftRadius); + radii[SkRRect::kLowerRight_Corner] = GetSkRadii(rrect.GetCorner().bottomRightRadius); + rrect_.sk_rrect.setRectRadii(SkRect::MakeXYWH(rect.Left(), rect.Top(), rect.Width(), rect.Height()), radii); + clipBehavior_ = clipBehavior; +} + +void ClipLayer::SetClipRRect(const Rect& rect, double x, double y, Clip clipBehavior) +{ + rrect_.sk_rrect = SkRRect::MakeRectXY(SkRect::MakeXYWH(rect.Left(), rect.Top(), rect.Width(), rect.Height()), + SkDoubleToScalar(x), SkDoubleToScalar(y)); + clipBehavior_ = clipBehavior; +} + +void ClipLayer::SetClipRRect(const flutter::RRect& rrect) +{ + rrect_.sk_rrect = rrect.sk_rrect; +} + +SkVector ClipLayer::GetSkRadii(const Radius& radius) +{ + SkVector fRadii; + fRadii.set( + SkDoubleToScalar(std::max(radius.GetX().Value(), 0.0)), SkDoubleToScalar(std::max(radius.GetY().Value(), 0.0))); + return fRadii; +} + +void ClipLayer::Dump() +{ + OffsetLayer::Dump(); + if (DumpLog::GetInstance().GetDumpFile()) { + SkRect rect = rrect_.sk_rrect.getBounds(); + DumpLog::GetInstance().AddDesc( + "ClipRect: (", rect.left(), ",", rect.right(), ") -", rect.width(), "x", rect.height()); + SkVector leftTop = rrect_.sk_rrect.radii(SkRRect::Corner::kUpperLeft_Corner); + SkVector rightTop = rrect_.sk_rrect.radii(SkRRect::Corner::kUpperRight_Corner); + SkVector leftBottom = rrect_.sk_rrect.radii(SkRRect::Corner::kLowerLeft_Corner); + SkVector rightBottom = rrect_.sk_rrect.radii(SkRRect::Corner::kLowerRight_Corner); + DumpLog::GetInstance().AddDesc("leftTopCorner: (", leftTop.fX, ",", leftTop.fY, ")", "rightTopCorner: (", + rightTop.fX, ",", rightTop.fY, ")"); + DumpLog::GetInstance().AddDesc("leftBottomCorner: (", leftBottom.fX, ",", leftBottom.fY, ")", + "rightBottomCorner: (", rightBottom.fX, ",", rightBottom.fY, ")"); + } +} + +} // namespace OHOS::Ace::Flutter diff --git a/frameworks/core/pipeline/layers/clip_layer.h b/frameworks/core/pipeline/layers/clip_layer.h new file mode 100644 index 00000000..4398f516 --- /dev/null +++ b/frameworks/core/pipeline/layers/clip_layer.h @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_LAYERS_CLIP_LAYER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_LAYERS_CLIP_LAYER_H + +#include "base/geometry/rrect.h" +#include "core/pipeline/layers/layer.h" +#include "core/pipeline/layers/offset_layer.h" +#include "core/pipeline/layers/scene_builder.h" + +namespace OHOS::Ace::Flutter { + +enum class Clip { + NONE = 0, + HARD_EDGE, + ANTI_ALIAS, + ANTI_ALIAS_WITH_SAVE_LAYER, +}; + +class ClipLayer : public OffsetLayer { + DECLARE_ACE_TYPE(ClipLayer, OffsetLayer) +public: + ClipLayer(double left, double right, double top, double bottom, Clip clipBehavior) + : OffsetLayer(0, 0), clipBehavior_(clipBehavior) + { + rrect_.sk_rrect = SkRRect::MakeRect(SkRect::MakeLTRB(static_cast(left), static_cast(top), + static_cast(right), static_cast(bottom))); + } + ~ClipLayer() override = default; + + void AddToScene(SceneBuilder& builder, double x, double y) override; + + void SetClip(double left, double right, double top, double bottom, Clip clipBehavior); + void SetClipRRect(const RRect& rrect, Clip clipBehavior); + void SetClipRRect(const Rect& rect, double x, double y, Clip clipBehavior); + void SetClipRRect(const flutter::RRect& rrect); + SkVector GetSkRadii(const Radius& radius); + void Dump() override; + +private: + flutter::RRect rrect_; + Clip clipBehavior_ { Clip::NONE }; +}; + +} // namespace OHOS::Ace::Flutter + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_LAYERS_CLIP_LAYER_H diff --git a/frameworks/core/pipeline/layers/container_layer.cpp b/frameworks/core/pipeline/layers/container_layer.cpp new file mode 100644 index 00000000..41abc9c2 --- /dev/null +++ b/frameworks/core/pipeline/layers/container_layer.cpp @@ -0,0 +1,36 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/pipeline/layers/container_layer.h" + +#include "core/pipeline/layers/scene_builder.h" + +namespace OHOS::Ace::Flutter { + +void ContainerLayer::AddToScene(SceneBuilder& builder, double x, double y) +{ + AddChildToScene(builder, x, y); +} + +void ContainerLayer::AddChildToScene(SceneBuilder& builder, double x, double y) +{ + for (const auto& item : children_) { + if (item) { + item->AddToScene(builder, x, y); + } + } +} + +} // namespace OHOS::Ace::Flutter \ No newline at end of file diff --git a/frameworks/core/pipeline/layers/container_layer.h b/frameworks/core/pipeline/layers/container_layer.h new file mode 100644 index 00000000..373999e2 --- /dev/null +++ b/frameworks/core/pipeline/layers/container_layer.h @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_LAYERS_CONTAINER_LAYER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_LAYERS_CONTAINER_LAYER_H + +#include "core/pipeline/layers/layer.h" + +namespace OHOS::Ace::Flutter { + +class ContainerLayer : public Layer { + DECLARE_ACE_TYPE(ContainerLayer, Layer) +public: + ContainerLayer() = default; + ~ContainerLayer() override = default; + void AddToScene(SceneBuilder& builder, double x, double y) override; + void AddChildToScene(SceneBuilder& builder, double x, double y); +}; + +} // namespace OHOS::Ace::Flutter + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_LAYERS_CONTAINER_LAYER_H diff --git a/frameworks/core/pipeline/layers/dropfilter_layer.cpp b/frameworks/core/pipeline/layers/dropfilter_layer.cpp new file mode 100644 index 00000000..8654e600 --- /dev/null +++ b/frameworks/core/pipeline/layers/dropfilter_layer.cpp @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/pipeline/layers/dropfilter_layer.h" + +#include "base/log/log.h" + +namespace OHOS::Ace::Flutter { + +void DropFilterLayer::AddToScene(SceneBuilder& builder, double x, double y) +{ + if (!imageFilter_) { + LOGE("can't create image filter"); + return; + } + builder.PushBackdropFilter(imageFilter_); + imageFilter_->initBlur(sigmaX_, sigmaY_); + AddChildToScene(builder, x + x_, y + y_); + builder.Pop(); +} + +void DropFilterLayer::SetDropFilter(fml::RefPtr imageFilter, double sigmaX, double sigmaY) +{ + sigmaX_ = sigmaX; + sigmaY_ = sigmaY; + imageFilter_ = imageFilter; +} + +} // namespace OHOS::Ace::Flutter \ No newline at end of file diff --git a/frameworks/core/pipeline/layers/dropfilter_layer.h b/frameworks/core/pipeline/layers/dropfilter_layer.h new file mode 100644 index 00000000..fec9a535 --- /dev/null +++ b/frameworks/core/pipeline/layers/dropfilter_layer.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_LAYERS_DROPFILTER_LAYER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_LAYERS_DROPFILTER_LAYER_H + +#include "core/pipeline/layers/offset_layer.h" +#include "core/pipeline/layers/scene_builder.h" + +namespace OHOS::Ace::Flutter { + +class DropFilterLayer : public OffsetLayer { + DECLARE_ACE_TYPE(DropFilterLayer, OffsetLayer) +public: + DropFilterLayer(fml::RefPtr& imageFilter, double sigmaX, double sigmaY) + : OffsetLayer(0, 0), imageFilter_(imageFilter), sigmaX_(sigmaX), sigmaY_(sigmaY){}; + ~DropFilterLayer() override = default; + + void AddToScene(SceneBuilder& builder, double x, double y) override; + + void SetDropFilter(fml::RefPtr imageFilter, double sigmaX, double sigmaY); + +private: + fml::RefPtr imageFilter_; + double sigmaX_ = 0.0; + double sigmaY_ = 0.0; +}; + +} // namespace OHOS::Ace::Flutter + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_LAYERS_DROPFILTER_LAYER_H diff --git a/frameworks/core/pipeline/layers/flutter_scene_builder.cpp b/frameworks/core/pipeline/layers/flutter_scene_builder.cpp new file mode 100644 index 00000000..b1c56ad6 --- /dev/null +++ b/frameworks/core/pipeline/layers/flutter_scene_builder.cpp @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "core/pipeline/layers/flutter_scene_builder.h" + +namespace OHOS::Ace::Flutter { +namespace { + +tonic::Float64List ToFloat64List(const Matrix4& matrix4) +{ + tonic::Float64List floatData(matrix4.Count()); + for (int32_t i = 0; i < matrix4.Count(); i++) { + floatData[i] = matrix4[i]; + } + return floatData; +} + +} + +FlutterSceneBuilder::FlutterSceneBuilder() +{ + sceneBuilder_ = flutter::SceneBuilder::create(); +} + +void FlutterSceneBuilder::AddPicture(double dx, double dy, fml::RefPtr picture, int hints) +{ + if (!picture) { + LOGE("FlutterSceneBuilder:can't add picture"); + return; + } + sceneBuilder_->addPicture(dx, dy, picture.get(), hints); +} + +void FlutterSceneBuilder::AddTexture( + double dx, double dy, double width, double height, int64_t textureId, bool freeze, uint8_t opacity) +{ + sceneBuilder_->addTexture(dx, dy, width, height, textureId, freeze, opacity); +} + +void FlutterSceneBuilder::PushTransform(const Matrix4& matrix4) +{ + tonic::Float64List&& list = ToFloat64List(matrix4); + sceneBuilder_->pushTransform(list); +} + +void FlutterSceneBuilder::PushClipRRect(const flutter::RRect& rrect, int32_t clipBehavior) +{ + sceneBuilder_->pushClipRRect(rrect, clipBehavior); +} + +void FlutterSceneBuilder::PushOpacity(int32_t alpha, double dx, double dy) +{ + sceneBuilder_->pushOpacity(alpha, dx, dy); +} + +void FlutterSceneBuilder::PushBackdropFilter(fml::RefPtr imageFilter) +{ + if (!imageFilter) { + LOGE("FlutterSceneBuilder:can't create image filter"); + return; + } + sceneBuilder_->pushBackdropFilter(imageFilter.get()); +} + +void FlutterSceneBuilder::PushShaderMask(fml::RefPtr shader, double maskRectLeft, double maskRectRight, + double maskRectTop, double maskRectBottom, int32_t blendMode) +{ + if (!shader) { + LOGE("FlutterSceneBuilder:can't push shader mask"); + return; + } + sceneBuilder_->pushShaderMask(shader.get(), maskRectLeft, maskRectRight, maskRectTop, maskRectBottom, blendMode); +} + +void FlutterSceneBuilder::Pop() +{ + sceneBuilder_->pop(); +} + +fml::RefPtr FlutterSceneBuilder::Build() +{ + return sceneBuilder_->build(); +} + +} // namespace OHOS::Ace::Flutter \ No newline at end of file diff --git a/frameworks/core/pipeline/layers/flutter_scene_builder.h b/frameworks/core/pipeline/layers/flutter_scene_builder.h new file mode 100644 index 00000000..187dc6e3 --- /dev/null +++ b/frameworks/core/pipeline/layers/flutter_scene_builder.h @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_LAYERS_FLUTTER_SCENE_BUILDER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_LAYERS_FLUTTER_SCENE_BUILDER_H + +#include "flutter/lib/ui/compositing/scene.h" +#include "flutter/lib/ui/compositing/scene_builder.h" + +#include "core/pipeline/layers/scene_builder.h" + +namespace OHOS::Ace::Flutter { + +class FlutterSceneBuilder : public SceneBuilder { + DECLARE_ACE_TYPE(FlutterSceneBuilder, SceneBuilder) +public: + FlutterSceneBuilder(); + ~FlutterSceneBuilder() override = default; + + void AddPicture(double dx, double dy, fml::RefPtr picture, int hints) override; + void AddTexture( + double dx, double dy, double width, double height, int64_t textureId, bool freeze, uint8_t opacity) override; + void PushTransform(const Matrix4& matrix4) override; + void PushClipRRect(const flutter::RRect& rrect, int32_t clipBehavior) override; + void PushOpacity(int32_t alpha, double dx = 0, double dy = 0) override; + void PushBackdropFilter(fml::RefPtr imageFilter) override; + void PushShaderMask(fml::RefPtr shader, double maskRectLeft, double maskRectRight, + double maskRectTop, double maskRectBottom, int32_t blendMode) override; + void Pop() override; + + fml::RefPtr Build(); + +private: + fml::RefPtr sceneBuilder_; +}; + +} // namespace OHOS::Ace::Flutter + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_LAYERS_FLUTTER_SCENE_BUILDER_H diff --git a/frameworks/core/pipeline/layers/gradient_layer.cpp b/frameworks/core/pipeline/layers/gradient_layer.cpp new file mode 100644 index 00000000..e358b917 --- /dev/null +++ b/frameworks/core/pipeline/layers/gradient_layer.cpp @@ -0,0 +1,70 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/pipeline/layers/gradient_layer.h" + +#include "flutter/lib/ui/painting/gradient.h" + +namespace OHOS::Ace::Flutter { +namespace { + +const size_t END_POINTS_COUNT = 4; + +} // namespace + +void GradientLayer::AddToScene(SceneBuilder& builder, double x, double y) +{ + bool pushSuccess = false; + if ((!points_.empty()) && (!colors_.empty()) && (points_.size() == colors_.size())) { + auto gradientShader = flutter::CanvasGradient::Create(); + + // Unfold first and last points position to a float list. + tonic::Float32List endPoints(END_POINTS_COUNT); + endPoints[0] = points_.front().GetX(); + endPoints[1] = points_.front().GetY(); + endPoints[2] = points_.back().GetX(); + endPoints[3] = points_.back().GetY(); + + // Convert color list. + tonic::Int32List colorList(colors_.size()); + for (size_t i = 0; i < colors_.size(); i++) { + colorList[i] = colors_[i].GetValue(); + } + + // Calculate stop point position(from 0.0 to 1.0). + tonic::Float32List colorStops(points_.size()); + auto endPositionTotal = points_.back().GetX() + points_.back().GetY(); + for (size_t i = 0; i < points_.size(); i++) { + colorStops[i] = (points_[i].GetX() + points_[i].GetY()) / endPositionTotal; + } + tonic::Float64List matrix; +#ifdef USE_SYSTEM_SKIA + gradientShader->initLinear(endPoints, colorList, colorStops, SkShader::kClamp_TileMode, matrix); +#else + gradientShader->initLinear(endPoints, colorList, colorStops, SkTileMode::kClamp, matrix); +#endif + builder.PushShaderMask(gradientShader, x + x_ + rect_.Left(), x + x_ + rect_.Right(), y + y_ + rect_.Top(), + y + y_ + rect_.Bottom(), static_cast(blendMode_)); + pushSuccess = true; + } + builder.PushOpacity(alpha_, 0, 0); + AddChildToScene(builder, x + x_, y + y_); + builder.Pop(); + if (pushSuccess) { + builder.Pop(); + } +} + +} // namespace OHOS::Ace::Flutter diff --git a/frameworks/core/pipeline/layers/gradient_layer.h b/frameworks/core/pipeline/layers/gradient_layer.h new file mode 100644 index 00000000..9bb8761a --- /dev/null +++ b/frameworks/core/pipeline/layers/gradient_layer.h @@ -0,0 +1,81 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_LAYERS_GRADIENT_LAYER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_LAYERS_GRADIENT_LAYER_H + +#include "flutter/lib/ui/dart_wrapper.h" + +#include "base/geometry/point.h" +#include "base/geometry/rect.h" +#include "core/components/common/properties/color.h" +#include "core/pipeline/layers/offset_layer.h" +#include "core/pipeline/layers/scene_builder.h" + +namespace OHOS::Ace::Flutter { + +class GradientLayer : public OffsetLayer { + DECLARE_ACE_TYPE(GradientLayer, OffsetLayer) +public: + GradientLayer() = default; + ~GradientLayer() override = default; + + void AddToScene(SceneBuilder& builder, double x, double y) override; + + + void SetGradientRect(Rect rect) + { + rect_ = rect; + } + + void SetPoints(const std::vector& points) + { + if (points.empty()) { + return; + } + points_.clear(); + points_.insert(points_.begin(), points.begin(), points.end()); + } + + void SetColors(const std::vector& colors) + { + if (colors.empty()) { + return; + } + colors_.clear(); + colors_.insert(colors_.begin(), colors.begin(), colors.end()); + } + + void SetBlendMode(SkBlendMode blendMode) + { + blendMode_ = blendMode; + } + + void SetAlpha(uint8_t value) + { + alpha_ = value; + } + +protected: + uint8_t alpha_ = 255; // default 255 that means no transparent. + std::vector points_; + std::vector colors_; + SkBlendMode blendMode_ = SkBlendMode::kDstIn; + Rect rect_; +}; + +} // namespace OHOS::Ace::Flutter + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_LAYERS_GRADIENT_LAYER_H diff --git a/frameworks/core/pipeline/layers/layer.cpp b/frameworks/core/pipeline/layers/layer.cpp new file mode 100644 index 00000000..c14f9338 --- /dev/null +++ b/frameworks/core/pipeline/layers/layer.cpp @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/pipeline/layers/layer.h" + +#include "base/log/dump_log.h" + +namespace OHOS::Ace::Flutter { + +void Layer::AddChildren(const RefPtr& layer) +{ + auto it = std::find(children_.begin(), children_.end(), layer); + if (it == children_.end()) { + layer->SetParent(AceType::Claim(this)); + children_.push_back(layer); + } +} + +void Layer::DumpTree(int32_t depth) +{ + if (DumpLog::GetInstance().GetDumpFile()) { + Dump(); + DumpLog::GetInstance().Print(depth, AceType::TypeName(this), children_.size()); + } + + for (const auto& item : children_) { + item->DumpTree(depth + 1); + } +} + +} // namespace OHOS::Ace::Flutter diff --git a/frameworks/core/pipeline/layers/layer.h b/frameworks/core/pipeline/layers/layer.h new file mode 100644 index 00000000..67267ef4 --- /dev/null +++ b/frameworks/core/pipeline/layers/layer.h @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_LAYERS_LAYER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_LAYERS_LAYER_H + +#include + +#include "base/memory/ace_type.h" + +namespace OHOS::Ace::Flutter { + +class SceneBuilder; + +class Layer : public AceType { + DECLARE_ACE_TYPE(Layer, AceType) +public: + Layer() = default; + ~Layer() override = default; + + WeakPtr GetParent() + { + return parentLayer_; + } + + void SetParent(const RefPtr& layer) + { + parentLayer_ = layer; + } + + virtual void AddToScene(SceneBuilder& builder, double x, double y) = 0; + + void AddChildren(const RefPtr& layer); + void RemoveChildren() + { + children_.clear(); + } + + const std::list>& GetChildren() const + { + return children_; + } + + int32_t Size() + { + return children_.size(); + } + + virtual void DumpTree(int32_t depth); + virtual void Dump() = 0; + +protected: + WeakPtr parentLayer_; + std::list> children_; +}; + +} // namespace OHOS::Ace::Flutter + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_LAYERS_LAYER_H diff --git a/frameworks/core/pipeline/layers/offset_layer.cpp b/frameworks/core/pipeline/layers/offset_layer.cpp new file mode 100644 index 00000000..5b9badec --- /dev/null +++ b/frameworks/core/pipeline/layers/offset_layer.cpp @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/pipeline/layers/offset_layer.h" + +#include "base/log/dump_log.h" + +namespace OHOS::Ace::Flutter { + +void OffsetLayer::AddToScene(SceneBuilder& builder, double x, double y) +{ + AddChildToScene(builder, x_ + x, y_ + y); +} + +void OffsetLayer::Dump() +{ + if (DumpLog::GetInstance().GetDumpFile()) { + DumpLog::GetInstance().AddDesc("Offset: (", x_, ",", y_, ")"); + } +} + +} // namespace OHOS::Ace::Flutter \ No newline at end of file diff --git a/frameworks/core/pipeline/layers/offset_layer.h b/frameworks/core/pipeline/layers/offset_layer.h new file mode 100644 index 00000000..3b089620 --- /dev/null +++ b/frameworks/core/pipeline/layers/offset_layer.h @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_LAYERS_OFFSET_LAYER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_LAYERS_OFFSET_LAYER_H + +#include "core/pipeline/layers/container_layer.h" +#include "core/pipeline/layers/scene_builder.h" + +namespace OHOS::Ace::Flutter { + +class OffsetLayer : public ContainerLayer { + DECLARE_ACE_TYPE(OffsetLayer, ContainerLayer) +public: + OffsetLayer() = default; + OffsetLayer(double x, double y) : x_(x), y_(y) {} + ~OffsetLayer() override = default; + + void SetOffset(double x, double y) + { + x_ = x; + y_ = y; + } + + void AddToScene(SceneBuilder& builder, double x, double y) override; + + void Dump() override; + +protected: + double x_ = 0.0; + double y_ = 0.0; +}; + +} // namespace OHOS::Ace::Flutter + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_LAYERS_OFFSET_LAYER_H diff --git a/frameworks/core/pipeline/layers/opacity_layer.cpp b/frameworks/core/pipeline/layers/opacity_layer.cpp new file mode 100644 index 00000000..72c6fe1b --- /dev/null +++ b/frameworks/core/pipeline/layers/opacity_layer.cpp @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/pipeline/layers/opacity_layer.h" + +#include "base/log/dump_log.h" + +namespace OHOS::Ace::Flutter { + +void OpacityLayer::AddToScene(SceneBuilder& builder, double x, double y) +{ + builder.PushOpacity(alpha_, dx_, dy_); + AddChildToScene(builder, x + x_, y + y_); + builder.Pop(); +} + +void OpacityLayer::SetOpacity(uint8_t alpha, double dx, double dy) +{ + alpha_ = alpha; + dx_ = dx; + dy_ = dy; +} + +void OpacityLayer::Dump() +{ + OffsetLayer::Dump(); + if (DumpLog::GetInstance().GetDumpFile()) { + DumpLog::GetInstance().AddDesc("Opacity:", std::to_string(alpha_)); + } +} + +} // namespace OHOS::Ace::Flutter \ No newline at end of file diff --git a/frameworks/core/pipeline/layers/opacity_layer.h b/frameworks/core/pipeline/layers/opacity_layer.h new file mode 100644 index 00000000..88ff485c --- /dev/null +++ b/frameworks/core/pipeline/layers/opacity_layer.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_LAYERS_OPACITY_LAYER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_LAYERS_OPACITY_LAYER_H + +#include "core/pipeline/layers/offset_layer.h" +#include "core/pipeline/layers/scene_builder.h" + +namespace OHOS::Ace::Flutter { + +class OpacityLayer : public OffsetLayer { + DECLARE_ACE_TYPE(OpacityLayer, OffsetLayer) +public: + OpacityLayer(uint8_t alpha, double dx, double dy) : OffsetLayer(0, 0), alpha_(alpha), dx_(dx), dy_(dy) {}; + ~OpacityLayer() override = default; + + void AddToScene(SceneBuilder& builder, double x, double y) override; + + void SetOpacity(uint8_t alpha, double dx, double dy); + void Dump() override; + +private: + uint8_t alpha_ = 255; + double dx_ = 0.0; + double dy_ = 0.0; +}; + +} // namespace OHOS::Ace::Flutter + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_LAYERS_OPACITY_LAYER_H diff --git a/frameworks/core/pipeline/layers/picture_layer.cpp b/frameworks/core/pipeline/layers/picture_layer.cpp new file mode 100644 index 00000000..3827b2c7 --- /dev/null +++ b/frameworks/core/pipeline/layers/picture_layer.cpp @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/pipeline/layers/picture_layer.h" + +#include "base/log/dump_log.h" +#include "base/log/log.h" + +namespace OHOS::Ace::Flutter { + +void PictureLayer::AddToScene(SceneBuilder& builder, double x, double y) +{ + offset_.SetX(x); + offset_.SetY(y); + if (needAddToScene_) { + builder.AddPicture(x, y, picture_, hints_); + } +} + +void PictureLayer::SetPicture(fml::RefPtr picture) +{ + if (!picture) { + LOGE("PictureLayer::SetPicture, origin picture null"); + return; + } + if (!picture->picture()) { + LOGE("PictureLayer::SetPicture, picture null"); + return; + } + needAddToScene_ = true; + picture_ = picture; +} + +void PictureLayer::Dump() +{ + if (DumpLog::GetInstance().GetDumpFile()) { + DumpLog::GetInstance().AddDesc( + "UniqueID:", (picture_ && picture_->picture()) ? picture_->picture()->uniqueID() : 0); + } +} + +} // namespace OHOS::Ace::Flutter diff --git a/frameworks/core/pipeline/layers/picture_layer.h b/frameworks/core/pipeline/layers/picture_layer.h new file mode 100644 index 00000000..d3e155c7 --- /dev/null +++ b/frameworks/core/pipeline/layers/picture_layer.h @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_LAYERS_PICTURE_LAYER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_LAYERS_PICTURE_LAYER_H + +#include "flutter/lib/ui/painting/picture.h" + +#include "base/geometry/offset.h" +#include "core/pipeline/layers/layer.h" +#include "core/pipeline/layers/scene_builder.h" + +namespace OHOS::Ace::Flutter { + +class PictureLayer : public Layer { + DECLARE_ACE_TYPE(PictureLayer, Layer) +public: + PictureLayer() = default; + ~PictureLayer() override = default; + void SetPicture(fml::RefPtr picture); + void AddToScene(SceneBuilder& builder, double x, double y) override; + + void Dump() override; + + fml::RefPtr GetPicture() const + { + return picture_; + } + + const Offset& GetOffset() const + { + return offset_; + } + + void SetNeedAddToScene(bool need) + { + needAddToScene_ = need; + } + +private: + bool needAddToScene_ = true; + Offset offset_ = Offset(-1.0, -1.0); + fml::RefPtr picture_; + bool hints_ = false; +}; + +} // namespace OHOS::Ace::Flutter + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_LAYERS_PICTURE_LAYER_H diff --git a/frameworks/core/pipeline/layers/scene_builder.h b/frameworks/core/pipeline/layers/scene_builder.h new file mode 100644 index 00000000..a5ff5e2a --- /dev/null +++ b/frameworks/core/pipeline/layers/scene_builder.h @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_LAYERS_SCENE_BUILDER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_LAYERS_SCENE_BUILDER_H + +#include "flutter/lib/ui/painting/image_filter.h" +#include "flutter/lib/ui/painting/picture.h" +#include "flutter/lib/ui/painting/rrect.h" +#include "flutter/lib/ui/painting/shader.h" + +#include "base/geometry/matrix4.h" +#include "base/memory/ace_type.h" + +namespace OHOS::Ace::Flutter { + +class SceneBuilder : public AceType { + DECLARE_ACE_TYPE(SceneBuilder, AceType) +public: + SceneBuilder() = default; + ~SceneBuilder() override = default; + + virtual void AddPicture(double dx, double dy, fml::RefPtr picture, int hints) = 0; + virtual void AddTexture( + double dx, double dy, double width, double height, int64_t textureId, bool freeze, uint8_t opacity) = 0; + virtual void PushTransform(const Matrix4& matrix4) = 0; + virtual void PushClipRRect(const flutter::RRect& rrect, int32_t clipBehavior) = 0; + virtual void PushOpacity(int32_t alpha, double dx = 0, double dy = 0) = 0; + virtual void PushBackdropFilter(fml::RefPtr imageFilter) = 0; + virtual void PushShaderMask(fml::RefPtr shader, double maskRectLeft, double maskRectRight, + double maskRectTop, double maskRectBottom, int32_t blendMode) = 0; + virtual void Pop() = 0; +}; + +} // namespace OHOS::Ace::Flutter + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_LAYERS_SCENE_BUILDER_H diff --git a/frameworks/core/pipeline/layers/texture_layer.cpp b/frameworks/core/pipeline/layers/texture_layer.cpp new file mode 100644 index 00000000..f8d9e5da --- /dev/null +++ b/frameworks/core/pipeline/layers/texture_layer.cpp @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/pipeline/layers/texture_layer.h" + +#include "base/log/dump_log.h" + +namespace OHOS::Ace::Flutter { + +void TextureLayer::AddToScene(SceneBuilder& builder, double x, double y) +{ + builder.AddTexture(x_ + x, y_ + y, width_, height_, id_, freeze_, opacity_); +} + +void TextureLayer::Update(int64_t textureId, bool freeze, double width, double height, uint8_t opacity) +{ + width_ = width; + height_ = height; + id_ = textureId; + freeze_ = freeze; + opacity_ = opacity; +} + +void TextureLayer::Dump() +{ + OffsetLayer::Dump(); + if (DumpLog::GetInstance().GetDumpFile()) { + DumpLog::GetInstance().AddDesc("Size:(", width_, ",", height_, ")"); + DumpLog::GetInstance().AddDesc("TextureId:", id_); + } +} + +} // namespace OHOS::Ace::Flutter diff --git a/frameworks/core/pipeline/layers/texture_layer.h b/frameworks/core/pipeline/layers/texture_layer.h new file mode 100644 index 00000000..846ec864 --- /dev/null +++ b/frameworks/core/pipeline/layers/texture_layer.h @@ -0,0 +1,47 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_LAYERS_TEXTURE_LAYER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_LAYERS_TEXTURE_LAYER_H + +#include "core/pipeline/layers/offset_layer.h" +#include "core/pipeline/layers/scene_builder.h" + +namespace OHOS::Ace::Flutter { + +class TextureLayer : public OffsetLayer { + DECLARE_ACE_TYPE(TextureLayer, OffsetLayer) +public: + TextureLayer(int64_t textureId, bool freeze, double width, double height, uint8_t opacity) + : OffsetLayer(0, 0), id_(textureId), freeze_(freeze), width_(width), height_(height), opacity_(opacity) + {} + ~TextureLayer() override = default; + + void Update(int64_t textureId, bool freeze, double width, double height, uint8_t opacity); + void AddToScene(SceneBuilder& builder, double x, double y) override; + + void Dump() override; + +private: + int64_t id_ = 0; + bool freeze_ = false; + double width_ = 0.0; + double height_ = 0.0; + uint8_t opacity_ = UINT8_MAX; +}; + +} // namespace OHOS::Ace::Flutter + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_LAYERS_TEXTURE_LAYER_H diff --git a/frameworks/core/pipeline/layers/transform_layer.cpp b/frameworks/core/pipeline/layers/transform_layer.cpp new file mode 100644 index 00000000..d158449b --- /dev/null +++ b/frameworks/core/pipeline/layers/transform_layer.cpp @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/pipeline/layers/transform_layer.h" + +#include "flutter/lib/ui/dart_wrapper.h" + +#include "base/log/dump_log.h" + +namespace OHOS::Ace::Flutter { + +void TransformLayer::Update(const Matrix4& matrix) +{ + matrix_ = matrix; +} + +void TransformLayer::AddToScene(SceneBuilder& builder, double x, double y) +{ + builder.PushTransform(matrix_); + AddChildToScene(builder, x_ + x, y_ + y); + builder.Pop(); +} + +void TransformLayer::Dump() +{ + OffsetLayer::Dump(); + if (DumpLog::GetInstance().GetDumpFile()) { + DumpLog::GetInstance().AddDesc("Matrix4:"); + DumpLog::GetInstance().AddDesc("[", matrix_[0], matrix_[1], matrix_[2], matrix_[4], "]"); + DumpLog::GetInstance().AddDesc("[", matrix_[4], matrix_[5], matrix_[6], matrix_[7], "]"); + DumpLog::GetInstance().AddDesc("[", matrix_[8], matrix_[9], matrix_[10], matrix_[11], "]"); + DumpLog::GetInstance().AddDesc("[", matrix_[12], matrix_[13], matrix_[14], matrix_[15], "]"); + } +} + +} // namespace OHOS::Ace::Flutter diff --git a/frameworks/core/pipeline/layers/transform_layer.h b/frameworks/core/pipeline/layers/transform_layer.h new file mode 100644 index 00000000..782a95f0 --- /dev/null +++ b/frameworks/core/pipeline/layers/transform_layer.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_LAYERS_TRANSFORM_LAYER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_LAYERS_TRANSFORM_LAYER_H + +#include "base/geometry/matrix4.h" +#include "core/pipeline/layers/offset_layer.h" +#include "core/pipeline/layers/scene_builder.h" + +namespace OHOS::Ace::Flutter { + +class TransformLayer : public OffsetLayer { + DECLARE_ACE_TYPE(TransformLayer, OffsetLayer) +public: + TransformLayer(const Matrix4& matrix, double x, double y) : OffsetLayer(x, y), matrix_(matrix) {} + ~TransformLayer() override = default; + + void Update(const Matrix4& matrix); + void AddToScene(SceneBuilder& builder, double x, double y) override; + void Dump() override; + + const Matrix4& GetMatrix4() const + { + return matrix_; + } + +private: + Matrix4 matrix_; +}; + +} // namespace OHOS::Ace::Flutter + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_LAYERS_TRANSFORM_LAYER_H diff --git a/frameworks/core/pipeline/pipeline_context.cpp b/frameworks/core/pipeline/pipeline_context.cpp new file mode 100644 index 00000000..7cb2e36e --- /dev/null +++ b/frameworks/core/pipeline/pipeline_context.cpp @@ -0,0 +1,1962 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/pipeline/pipeline_context.h" + +#include + +#include "base/log/ace_trace.h" +#include "base/log/dump_log.h" +#include "base/log/event_report.h" +#include "base/log/log.h" +#include "base/thread/task_executor.h" +#include "base/utils/macros.h" +#include "base/utils/string_utils.h" +#include "core/animation/card_transition_controller.h" +#include "core/animation/shared_transition_controller.h" +#include "core/common/ace_engine.h" +#include "core/common/event_manager.h" +#include "core/common/font_manager.h" +#include "core/common/frontend.h" +#include "core/common/manager_interface.h" +#include "core/components/checkable/render_checkable.h" +#include "core/components/common/layout/grid_system_manager.h" +#include "core/components/dialog/dialog_component.h" +#include "core/components/dialog_modal/dialog_modal_component.h" +#include "core/components/dialog_modal/dialog_modal_element.h" +#include "core/components/display/display_component.h" +#include "core/components/focus_animation/render_focus_animation.h" +#include "core/components/overlay/overlay_component.h" +#include "core/components/overlay/overlay_element.h" +#include "core/components/page/page_element.h" +#include "core/components/page_transition/page_transition_component.h" +#include "core/components/root/render_root.h" +#include "core/components/root/root_component.h" +#include "core/components/root/root_element.h" +#include "core/components/scroll/scrollable.h" +#include "core/components/semi_modal/semi_modal_component.h" +#include "core/components/semi_modal/semi_modal_element.h" +#include "core/components/stage/stage_component.h" +#include "core/components/stage/stage_element.h" +#include "core/image/render_image_provider.h" +#include "core/pipeline/base/composed_element.h" +#include "core/pipeline/base/factories/flutter_render_factory.h" +#include "core/pipeline/base/render_context.h" + +namespace OHOS::Ace { +namespace { + +constexpr int64_t SEC_TO_NANOSEC = 1000000000; +constexpr int32_t MOUSE_PRESS_LEFT = 1; +constexpr char JS_THREAD_NAME[] = "JS"; +constexpr char UI_THREAD_NAME[] = "UI"; +constexpr int32_t DEFAULT_VIEW_SCALE = 1; +PipelineContext::TimeProvider g_defaultTimeProvider = []() -> uint64_t { + struct timespec ts; + clock_gettime(CLOCK_MONOTONIC, &ts); + return (ts.tv_sec * SEC_TO_NANOSEC + ts.tv_nsec); +}; + +Rect GetGlobalRect(const RefPtr& element) +{ + if (!element) { + LOGE("element is null!"); + return Rect(); + } + const auto& renderNode = element->GetRenderNode(); + if (!renderNode) { + LOGE("Get render node failed!"); + return Rect(); + } + return Rect(renderNode->GetGlobalOffset(), renderNode->GetLayoutSize()); +} + +void ThreadStuckTask(int32_t seconds) +{ + std::this_thread::sleep_for(std::chrono::seconds(seconds)); +} + +} // namespace + +PipelineContext::PipelineContext(std::unique_ptr window, RefPtr taskExecutor, + RefPtr assetManager, RefPtr platformResRegister, + const RefPtr& frontend, int32_t instanceId) + : window_(std::move(window)), taskExecutor_(std::move(taskExecutor)), assetManager_(std::move(assetManager)), + platformResRegister_(std::move(platformResRegister)), weakFrontend_(frontend), + timeProvider_(g_defaultTimeProvider), instanceId_(instanceId) +{ + frontendType_ = frontend->GetType(); + RegisterEventHandler(frontend->GetEventHandler()); + auto&& vsyncCallback = [weak = AceType::WeakClaim(this)](const uint64_t nanoTimestamp, const uint32_t frameCount) { + auto context = weak.Upgrade(); + if (context) { + context->OnVsyncEvent(nanoTimestamp, frameCount); + } + }; + ACE_DCHECK(window_); + window_->SetVsyncCallback(vsyncCallback); + focusAnimationManager_ = AceType::MakeRefPtr(); + sharedTransitionController_ = AceType::MakeRefPtr(AceType::WeakClaim(this)); + cardTransitionController_ = AceType::MakeRefPtr(AceType::WeakClaim(this)); + if (frontend->GetType() != FrontendType::JS_CARD) { + imageCache_ = ImageCache::Create(); + } + fontManager_ = FontManager::Create(); + themeManager_ = AceType::MakeRefPtr(); + renderFactory_ = AceType::MakeRefPtr(); + UpdateFontWeightScale(); +} + +void PipelineContext::FlushPipelineWithoutAnimation() +{ + FlushBuild(); + FlushLayout(); + FlushRender(); + FlushWindowBlur(); + FlushFocus(); + ProcessPostFlush(); + ClearDeactivateElements(); +} + +void PipelineContext::FlushBuild() +{ + ACE_FUNCTION_TRACE(); + + if (dirtyElements_.empty()) { + return; + } + decltype(dirtyElements_) dirtyElements(std::move(dirtyElements_)); + for (const auto& elementWeak : dirtyElements) { + auto element = elementWeak.Upgrade(); + // maybe unavailable when update parent + if (element) { + element->Rebuild(); + } + } + if (!buildAfterCallback_.empty()) { + for (const auto& item : buildAfterCallback_) { + item(); + } + buildAfterCallback_.clear(); + } + buildingFirstPage_ = false; +} + +void PipelineContext::FlushPredictLayout() +{ + if (predictLayoutNodes_.empty()) { + return; + } + ACE_FUNCTION_TRACE(); + decltype(predictLayoutNodes_) dirtyNodes(std::move(predictLayoutNodes_)); + for (const auto& dirtyNode : dirtyNodes) { + dirtyNode->OnPredictLayout(); + } +} + +void PipelineContext::FlushFocus() +{ + if (dirtyFocusNode_) { + dirtyFocusNode_->RequestFocusImmediately(); + dirtyFocusNode_.Reset(); + dirtyFocusScope_.Reset(); + return; + } + + if (dirtyFocusScope_) { + dirtyFocusScope_->RequestFocusImmediately(); + dirtyFocusScope_.Reset(); + return; + } + + if (rootElement_ && !rootElement_->IsCurrentFocus()) { + rootElement_->RequestFocusImmediately(); + } + + decltype(needRebuildFocusElement_) rebuildElements(std::move(needRebuildFocusElement_)); + for (const auto& elementWeak : rebuildElements) { + auto element = elementWeak.Upgrade(); + if (element) { + element->RebuildFocusTree(); + } + } +} + +void PipelineContext::RefreshStageFocus() +{ + if (!rootElement_) { + LOGE("Root element is null!"); + EventReport::SendAppStartException(AppStartExcepType::PIPELINE_CONTEXT_ERR); + return; + } + const auto& stageElement = GetStageElement(); + if (!stageElement) { + LOGE("Get stage element failed!"); + return; + } + + stageElement->RefreshFocus(); +} + +RefPtr PipelineContext::GetStageElement() const +{ + auto overlay = GetOverlayElement(); + if (!overlay) { + LOGE("Get stage element failed. overlay element is null!"); + EventReport::SendAppStartException(AppStartExcepType::PIPELINE_CONTEXT_ERR); + return RefPtr(); + } + return AceType::DynamicCast(overlay->GetFirstChild()); +} + +Rect PipelineContext::GetRootRect() const +{ + return Rect(0.0, 0.0, rootWidth_, rootHeight_); +} + +Rect PipelineContext::GetStageRect() const +{ + return GetGlobalRect(GetStageElement()); +} + +Rect PipelineContext::GetPageRect() const +{ + return GetGlobalRect(GetLastStack()); +} + +bool PipelineContext::IsLastPage() +{ + const auto& stageElement = GetStageElement(); + if (!stageElement) { + LOGE("Get stage element failed!"); + return true; + } + + LOGD("Get stage element child size:%zu", stageElement->GetChildrenList().size()); + if (stageElement->GetChildrenList().size() <= 1) { + return true; + } + + return false; +} + +RefPtr PipelineContext::GetComposedElementById(const ComposeId& id) +{ + const auto& it = composedElementMap_.find(id); + if (it != composedElementMap_.end() && !it->second.empty()) { + return it->second.front(); + } + return RefPtr(); +} + +void PipelineContext::FlushLayout() +{ + ACE_FUNCTION_TRACE(); + + if (dirtyLayoutNodes_.empty()) { + return; + } + decltype(dirtyLayoutNodes_) dirtyNodes(std::move(dirtyLayoutNodes_)); + for (const auto& dirtyNode : dirtyNodes) { + dirtyNode->OnLayout(); + } +} + +void PipelineContext::FlushRender() +{ + ACE_FUNCTION_TRACE(); + + if (dirtyRenderNodes_.empty() && dirtyRenderNodesInOverlay_.empty() && !needForcedRefresh_) { + return; + } + + Rect curDirtyRect; + bool isDirtyRootRect = false; + if (needForcedRefresh_) { + curDirtyRect.SetRect(0.0, 0.0, rootWidth_, rootHeight_); + isDirtyRootRect = true; + } + auto context = RenderContext::Create(); + if (!dirtyRenderNodes_.empty()) { + decltype(dirtyRenderNodes_) dirtyNodes(std::move(dirtyRenderNodes_)); + for (const auto& dirtyNode : dirtyNodes) { + context->Repaint(dirtyNode); + if (!isDirtyRootRect) { + Rect curRect = dirtyNode->GetDirtyRect(); + if (curRect == GetRootRect()) { + curDirtyRect = curRect; + isDirtyRootRect = true; + continue; + } + curDirtyRect = curDirtyRect.IsValid() ? curDirtyRect.CombineRect(curRect) : curRect; + } + } + } + if (!dirtyRenderNodesInOverlay_.empty()) { + decltype(dirtyRenderNodesInOverlay_) dirtyNodesInOverlay(std::move(dirtyRenderNodesInOverlay_)); + for (const auto& dirtyNodeInOverlay : dirtyNodesInOverlay) { + context->Repaint(dirtyNodeInOverlay); + if (!isDirtyRootRect) { + Rect curRect = dirtyNodeInOverlay->GetDirtyRect(); + if (curRect == GetRootRect()) { + curDirtyRect = curRect; + isDirtyRootRect = true; + continue; + } + curDirtyRect = curDirtyRect.IsValid() ? curDirtyRect.CombineRect(curRect) : curRect; + } + } + } + + if (rootElement_) { + auto renderRoot = rootElement_->GetRenderNode(); + curDirtyRect = curDirtyRect * viewScale_; + renderRoot->FinishRender(drawDelegate_, dirtyRect_.CombineRect(curDirtyRect)); + dirtyRect_ = curDirtyRect; + } + needForcedRefresh_ = false; +} + +void PipelineContext::FlushAnimation(uint64_t nanoTimestamp) +{ + ACE_FUNCTION_TRACE(); + flushAnimationTimestamp_ = nanoTimestamp; + isFlushingAnimation_ = true; + + ProcessPreFlush(); + if (scheduleTasks_.empty()) { + isFlushingAnimation_ = false; + return; + } + decltype(scheduleTasks_) temp(std::move(scheduleTasks_)); + for (const auto& scheduleTask : temp) { + scheduleTask.second->OnFrame(nanoTimestamp); + } + isFlushingAnimation_ = false; +} + +void PipelineContext::FlushPageUpdateTasks() +{ + while (!pageUpdateTasks_.empty()) { + const auto& task = pageUpdateTasks_.front(); + if (task) { + task(); + } + pageUpdateTasks_.pop(); + } +} + +void PipelineContext::FlushAnimationTasks() +{ + if (animationCallback_) { + taskExecutor_->PostTask(animationCallback_, TaskExecutor::TaskType::JS); + } +} + +void PipelineContext::ProcessPreFlush() +{ + ACE_FUNCTION_TRACE(); + + if (preFlushListeners_.empty()) { + return; + } + decltype(preFlushListeners_) temp(std::move(preFlushListeners_)); + for (const auto& listener : temp) { + listener->OnPreFlush(); + } +} + +void PipelineContext::ProcessPostFlush() +{ + ACE_FUNCTION_TRACE(); + + if (postFlushListeners_.empty()) { + return; + } + decltype(postFlushListeners_) temp(std::move(postFlushListeners_)); + for (const auto& listener : temp) { + listener->OnPostFlush(); + } +} + +RefPtr PipelineContext::SetupRootElement() +{ + RefPtr rootStage = AceType::MakeRefPtr(std::list>()); + if (isRightToLeft_) { + rootStage->SetTextDirection(TextDirection::RTL); + } + rootStage->SetMainStackSize(MainStackSize::LAST_CHILD); + auto overlay = AceType::MakeRefPtr(std::list>()); + overlay->AppendChild(rootStage); + RefPtr rootComponent; + if (windowModal_ == WindowModal::SEMI_MODAL || windowModal_ == WindowModal::SEMI_MODAL_FULL_SCREEN) { + auto semiModal = SemiModalComponent::Create( + overlay, windowModal_ == WindowModal::SEMI_MODAL_FULL_SCREEN, modalHeight_, modalColor_); + rootComponent = RootComponent::Create(semiModal); + } else if (windowModal_ == WindowModal::DIALOG_MODAL) { + rootStage->SetMainStackSize(MainStackSize::MAX); + rootStage->SetAlignment(Alignment::BOTTOM_LEFT); + auto dialogModal = DialogModalComponent::Create(overlay); + rootComponent = RootComponent::Create(dialogModal); + } else { + rootComponent = RootComponent::Create(overlay); + } + rootElement_ = rootComponent->SetupElementTree(AceType::Claim(this)); + if (!rootElement_) { + LOGE("SetupRootElement failed!"); + EventReport::SendAppStartException(AppStartExcepType::PIPELINE_CONTEXT_ERR); + return RefPtr(); + } + const auto& rootRenderNode = rootElement_->GetRenderNode(); + window_->SetRootRenderNode(rootRenderNode); + sharedTransitionController_->RegisterTransitionListener(); + cardTransitionController_->RegisterTransitionListener(); + if (windowModal_ == WindowModal::DIALOG_MODAL) { + auto dialog = AceType::DynamicCast(rootElement_->GetFirstChild()); + if (dialog) { + dialog->RegisterTransitionListener(); + } + } + + requestedRenderNode_.Reset(); + LOGI("SetupRootElement success!"); + return rootElement_; +} + +void PipelineContext::Dump(const std::vector& params) const +{ + if (params.empty()) { + LOGW("params is empty now, it's illegal!"); + return; + } + + if (params[0] == "-element") { + rootElement_->DumpTree(0); + } else if (params[0] == "-render") { + rootElement_->GetRenderNode()->DumpTree(0); + } else if (params[0] == "-focus") { + rootElement_->GetFocusScope()->DumpFocusTree(0); + } else if (params[0] == "-layer") { + auto rootNode = AceType::DynamicCast(rootElement_->GetRenderNode()); + rootNode->DumpLayerTree(); + } else if (params[0] == "-frontend") { + DumpFrontend(); +#ifndef WEARABLE_PRODUCT + } else if (params[0] == "-multimodal") { + multiModalManager_->DumpMultimodalScene(); +#endif +#ifdef ACE_MEMORY_MONITOR + } else if (params[0] == "-memory") { + MemoryMonitor::GetInstance().Dump(); +#endif + } else if (params[0] == "-accessibility") { + DumpAccessibility(params); + } else if (params[0] == "-rotation" && params.size() >= 2) { + DumpLog::GetInstance().Print("Dump rotation"); + RotationEvent event { static_cast(StringUtils::StringToInt(params[1])) }; + OnRotationEvent(event); + } else if (params[0] == "-animationscale" && params.size() >= 2) { + DumpLog::GetInstance().Print(std::string("Set Animation Scale. scale: ") + params[1]); + Animator::SetDurationScale(StringUtils::StringToDouble(params[1])); + } else if (params[0] == "-velocityscale" && params.size() >= 2) { + DumpLog::GetInstance().Print(std::string("Set Velocity Scale. scale: ") + params[1]); + Scrollable::SetVelocityScale(StringUtils::StringToDouble(params[1])); + } else if (params[0] == "-scrollfriction" && params.size() >= 2) { + DumpLog::GetInstance().Print(std::string("Set Scroll Friction. friction: ") + params[1]); + Scrollable::SetFriction(StringUtils::StringToDouble(params[1])); + } else if (params[0] == "-hiviewreport" && params.size() >= 3) { + DumpLog::GetInstance().Print("Report hiview event. EventID: " + params[1] + ", error type: " + params[2]); + EventInfo eventInfo = { .eventType = StringUtils::StringToInt(params[1]), + .errorType = StringUtils::StringToInt(params[2]) }; + EventReport::SendEvent(eventInfo); + } else if (params[0] == "-threadstuck" && params.size() >= 3) { + MakeThreadStuck(params); + } else if (params[0] == "-jscrash") { + EventReport::JsErrReport( + AceEngine::Get().GetUid(), AceEngine::Get().GetPackageName(), "js crash reason", "js crash summary"); + } else { + DumpLog::GetInstance().Print("Error: Unsupported dump params!"); + } +} + +RefPtr PipelineContext::GetLastStack() const +{ + const auto& pageElement = GetLastPage(); + if (!pageElement) { + return RefPtr(); + } + const auto& transitionElement = AceType::DynamicCast(pageElement->GetFirstChild()); + if (!transitionElement) { + return RefPtr(); + } + const auto& focusCollaboration = + AceType::DynamicCast(transitionElement->GetContentElement()); + if (!focusCollaboration) { + return RefPtr(); + } + const auto& composedStack = AceType::DynamicCast(focusCollaboration->GetFirstChild()); + if (!composedStack) { + return RefPtr(); + } + const auto& stackElement = AceType::DynamicCast(composedStack->GetLastChild()); + if (!stackElement) { + return RefPtr(); + } + return stackElement; +} + +RefPtr PipelineContext::GetLastPage() const +{ + const auto& stageElement = GetStageElement(); + if (!stageElement) { + LOGE("Get last page failed, stage element is null."); + return nullptr; + } + return AceType::DynamicCast(stageElement->GetLastChild()); +} + +RefPtr PipelineContext::GetLastPageRender() const +{ + auto lastPage = GetLastPage(); + if (!lastPage) { + return nullptr; + } + return lastPage->GetRenderNode(); +} + +bool PipelineContext::CanPushPage() +{ + auto stageElement = GetStageElement(); + return stageElement && stageElement->CanPushPage(); +} + +void PipelineContext::PushPage(const RefPtr& pageComponent) +{ + auto stageElement = GetStageElement(); + if (!stageElement) { + LOGE("Get stage element failed!"); + return; + } + buildingFirstPage_ = isFirstPage_; + isFirstPage_ = false; + if (PageTransitionComponent::HasTransitionComponent(AceType::DynamicCast(pageComponent))) { + LOGD("push page with transition."); + stageElement->PushPage(pageComponent); + } else { + LOGD("push page without transition, do not support transition."); + RefPtr display = AceType::MakeRefPtr(pageComponent); + stageElement->PushPage(display); + } + FlushBuildAndLayoutBeforeSurfaceReady(); +} + +void PipelineContext::GetBoundingRectData(int32_t nodeId, Rect& rect) +{ + auto composeElement = GetComposedElementById(std::to_string(nodeId)); + if (composeElement) { + Rect resultRect = composeElement->GetRenderRect(); + rect.SetWidth(resultRect.Width()); + rect.SetHeight(resultRect.Height()); + rect.SetTop(resultRect.Top()); + rect.SetLeft(resultRect.Left()); + } +} + +bool PipelineContext::ShowDialog(const DialogProperties& dialogProperties, bool isRightToLeft) +{ + const auto& dialog = DialogBuilder::Build(dialogProperties, AceType::WeakClaim(this)); + if (!dialog) { + return false; + } + dialog->SetTextDirection(isRightToLeft ? TextDirection::RTL : TextDirection::LTR); + const auto& lastStack = GetLastStack(); + if (!lastStack) { + return false; + } + lastStack->PushDialog(dialog); + return true; +} + +bool PipelineContext::CanPopPage() +{ + auto stageElement = GetStageElement(); + return stageElement && stageElement->CanPopPage(); +} + +void PipelineContext::PopPage() +{ + LOGD("PopPageComponent"); + auto stageElement = GetStageElement(); + if (stageElement) { + stageElement->Pop(); + } +} + +void PipelineContext::PopToPage(int32_t pageId) +{ + LOGD("PopToPageComponent: page-%{public}d", pageId); + auto stageElement = GetStageElement(); + if (stageElement) { + stageElement->PopToPage(pageId); + } +} + +bool PipelineContext::CanReplacePage() +{ + auto stageElement = GetStageElement(); + return stageElement && stageElement->CanReplacePage(); +} + +BaseId::IdType PipelineContext::AddPageTransitionListener(const PageTransitionListenable::CallbackFuncType& funcObject) +{ + if (!rootElement_) { + LOGE("add page transition listener failed. root element is null."); + EventReport::SendAppStartException(AppStartExcepType::PIPELINE_CONTEXT_ERR); + return 0; + } + auto stageElement = GetStageElement(); + if (!stageElement) { + LOGE("add page transition listener failed. stage is null."); + return 0; + } + return stageElement->AddPageTransitionListener(funcObject); +} + +void PipelineContext::RemovePageTransitionListener(typename BaseId::IdType id) +{ + auto stageElement = GetStageElement(); + if (stageElement) { + stageElement->RemovePageTransitionListener(id); + } +} + +void PipelineContext::ClearPageTransitionListeners() +{ + auto stageElement = GetStageElement(); + if (stageElement) { + return stageElement->ClearPageTransitionListeners(); + } +} + +void PipelineContext::ReplacePage(const RefPtr& pageComponent) +{ + LOGD("ReplacePageComponent"); + auto stageElement = GetStageElement(); + if (!stageElement) { + LOGE("Get stage element failed!"); + return; + } + if (PageTransitionComponent::HasTransitionComponent(AceType::DynamicCast(pageComponent))) { + LOGD("replace page with transition."); + stageElement->Replace(pageComponent); + } else { + LOGD("replace page without transition, do not support transition."); + RefPtr display = AceType::MakeRefPtr(pageComponent); + stageElement->Replace(display); + } +} + +bool PipelineContext::ClearInvisiblePages() +{ + LOGD("ClearInvisiblePageComponents"); + auto stageElement = GetStageElement(); + return stageElement && stageElement->ClearOffStage(); +} + +// return true if user accept or page is not last, return false if others condition +bool PipelineContext::CallRouterBackToPopPage() +{ + LOGD("CallRouterBackToPopPage"); + auto frontend = weakFrontend_.Upgrade(); + if (!frontend) { + // return back to desktop + return false; + } + + if (frontend->OnBackPressed()) { + // if user accept + return true; + } else { + frontend->CallRouterBack(); + if (IsLastPage()) { + // semi modal use translucent theme and will do exit animation by ACE itself. + if (windowModal_ == WindowModal::SEMI_MODAL || windowModal_ == WindowModal::SEMI_MODAL_FULL_SCREEN || + windowModal_ == WindowModal::DIALOG_MODAL) { + taskExecutor_->PostTask( + [weak = AceType::WeakClaim(this)]() { + auto context = weak.Upgrade(); + if (!context) { + return; + } + context->Finish(); + }, + TaskExecutor::TaskType::UI); + return true; + } + // return back to desktop + return false; + } else { + return true; + } + } +} + +void PipelineContext::ScheduleUpdate(const RefPtr& compose) +{ + ComposeId id = compose->GetId(); + LOGD("update compose for id:%{public}s", id.c_str()); + const auto& it = composedElementMap_.find(id); + if (it == composedElementMap_.end()) { + LOGD("can't update composed for id:%{public}s, name:%{public}s", id.c_str(), compose->GetName().c_str()); + } else { + for (const auto& composedElement : it->second) { + composedElement->SetUpdateComponent(compose); + } + } + FlushBuildAndLayoutBeforeSurfaceReady(); +} + +void PipelineContext::AddComposedElement(const ComposeId& id, const RefPtr& element) +{ + LOGD("add new composed element id:%{public}s", id.c_str()); + auto it = composedElementMap_.find(id); + if (it != composedElementMap_.end()) { + it->second.emplace_back(element); + } else { + std::list> elements; + elements.emplace_back(element); + composedElementMap_[id] = std::move(elements); + } +} + +void PipelineContext::RemoveComposedElement(const ComposeId& id, const RefPtr& element) +{ + LOGD("remove composed element id:%{public}s", id.c_str()); + auto it = composedElementMap_.find(id); + if (it != composedElementMap_.end()) { + it->second.remove(element); + if (it->second.empty()) { + composedElementMap_.erase(it); + } + } +} + +void PipelineContext::AddDirtyElement(const RefPtr& dirtyElement) +{ + if (!dirtyElement) { + LOGW("dirtyElement is null"); + return; + } + LOGD("schedule rebuild for %{public}s", AceType::TypeName(dirtyElement)); + dirtyElements_.emplace(dirtyElement); + hasIdleTasks_ = true; + window_->RequestFrame(); +} + +void PipelineContext::AddNeedRebuildFocusElement(const RefPtr& focusElement) +{ + if (!focusElement) { + LOGW("focusElement is null"); + return; + } + LOGD("schedule rebuild focus element for %{public}s", AceType::TypeName(focusElement)); + needRebuildFocusElement_.emplace(focusElement); +} + +void PipelineContext::AddDirtyRenderNode(const RefPtr& renderNode, bool overlay) +{ + if (!renderNode) { + LOGW("renderNode is null"); + return; + } + LOGD("schedule render for %{public}s", AceType::TypeName(renderNode)); + if (!overlay) { + dirtyRenderNodes_.emplace(renderNode); + } else { + dirtyRenderNodesInOverlay_.emplace(renderNode); + } + hasIdleTasks_ = true; + window_->RequestFrame(); +} + +void PipelineContext::AddDirtyLayoutNode(const RefPtr& renderNode) +{ + if (!renderNode) { + LOGW("renderNode is null"); + return; + } + LOGD("schedule layout for %{public}s", AceType::TypeName(renderNode)); + dirtyLayoutNodes_.emplace(renderNode); + hasIdleTasks_ = true; + window_->RequestFrame(); +} + +void PipelineContext::AddPredictLayoutNode(const RefPtr& renderNode) +{ + if (!renderNode) { + LOGW("renderNode is null"); + return; + } + LOGD("schedule predict layout for %{public}s", AceType::TypeName(renderNode)); + predictLayoutNodes_.emplace(renderNode); + hasIdleTasks_ = true; + window_->RequestFrame(); +} + +void PipelineContext::AddPreFlushListener(const RefPtr& listener) +{ + preFlushListeners_.emplace_back(listener); + window_->RequestFrame(); +} + +void PipelineContext::AddPostFlushListener(const RefPtr& listener) +{ + postFlushListeners_.emplace_back(listener); + window_->RequestFrame(); +} + +uint32_t PipelineContext::AddScheduleTask(const RefPtr& task) +{ + scheduleTasks_.try_emplace(++nextScheduleTaskId_, task); + window_->RequestFrame(); + return nextScheduleTaskId_; +} + +void PipelineContext::SetRequestedRotationNode(const WeakPtr& renderNode) +{ + auto node = renderNode.Upgrade(); + if (!node) { + return; + } + LOGD("add requested rotation node, type is %{public}s", node->TypeName()); + requestedRenderNode_ = renderNode; +} + +void PipelineContext::RemoveRequestedRotationNode(const WeakPtr& renderNode) +{ + if (requestedRenderNode_ == renderNode) { + requestedRenderNode_.Reset(); + } +} + +void PipelineContext::RemoveScheduleTask(uint32_t id) +{ + scheduleTasks_.erase(id); +} + +void PipelineContext::OnTouchEvent(const TouchPoint& point) +{ + ACE_FUNCTION_TRACE(); + + if (!rootElement_) { + LOGE("the root element is nullptr on touch event"); + EventReport::SendAppStartException(AppStartExcepType::PIPELINE_CONTEXT_ERR); + return; + } + + auto scalePoint = point.CreateScalePoint(viewScale_); + LOGI("OnTouchEvent: x = %f, y = %f, type = %zu", scalePoint.x, scalePoint.y, scalePoint.type); + if (scalePoint.type == TouchType::DOWN) { + LOGD("receive touch down event, first use touch test to collect touch event target"); + TouchRestrict touchRestrict { TouchRestrict::NONE }; + auto frontEnd = GetFrontend(); + if (frontEnd && (frontEnd->GetType() == FrontendType::JS_CARD)) { + touchRestrict.UpdateForbiddenType(TouchRestrict::LONG_PRESS); + } + eventManager_.TouchTest(scalePoint, rootElement_->GetRenderNode(), touchRestrict); + } + if (scalePoint.type == TouchType::MOVE) { + isMoving_ = true; + } + if (isKeyEvent_) { + SetIsKeyEvent(false); + } + eventManager_.DispatchTouchEvent(scalePoint); +} + +bool PipelineContext::OnKeyEvent(const KeyEvent& event) +{ + if (!rootElement_) { + LOGE("the root element is nullptr"); + EventReport::SendAppStartException(AppStartExcepType::PIPELINE_CONTEXT_ERR); + return false; + } + if (!isKeyEvent_ && SystemProperties::GetDeviceType() == DeviceType::PHONE) { + if (KeyCode::KEYBOARD_UP <= event.code && event.code <= KeyCode::KEYBOARD_RIGHT) { + if (event.action == KeyAction::UP) { + SetIsKeyEvent(true); + } + return true; + } else if (event.code == KeyCode::KEYBOARD_ENTER) { + if (event.action == KeyAction::CLICK) { + SetIsKeyEvent(true); + } + } + } + rootElement_->HandleSpecifiedKey(event); + return eventManager_.DispatchKeyEvent(event, rootElement_); +} + +void PipelineContext::OnMouseEvent(const MouseEvent& event) +{ + LOGD("OnMouseEvent: x=%{public}f, y=%{public}f, type=%{public}d. button=%{public}d, pressbutton=%{public}d}", + event.x, event.y, event.action, event.button, event.pressedButtons); + + auto touchPoint = event.CreateTouchPoint(); + if ((event.action == MouseAction::RELEASE || event.action == MouseAction::PRESS || + event.action == MouseAction::MOVE) && + (event.button == MouseButton::LEFT_BUTTON || event.pressedButtons == MOUSE_PRESS_LEFT)) { + OnTouchEvent(touchPoint); + } + auto scaleEvent = event.CreateScaleEvent(viewScale_); + eventManager_.MouseTest(scaleEvent, rootElement_->GetRenderNode()); + eventManager_.DispatchMouseEvent(scaleEvent); + int32_t preHoverId = hoverNodeId_; + std::list> preHoverNodes; + preHoverNodes.assign(hoverNodes_.begin(), hoverNodes_.end()); + // clear current hover node id and list. + hoverNodeId_ = DEFAULT_HOVER_ENTER_ANIMATION_ID; + hoverNodes_.clear(); + eventManager_.MouseHoverTest(scaleEvent, rootElement_->GetRenderNode()); + if (preHoverId != hoverNodeId_) { + // Send Hover Exit Animation event to preHoverNodes. + for (const auto& exitNode : preHoverNodes) { + exitNode->OnMouseHoverExitAnimation(); + } + // Send Hover Enter Animation event to curHoverNodes. + for (const auto& enterNode : hoverNodes_) { + enterNode->OnMouseHoverEnterAnimation(); + } + } else { + HandleMouseInputEvent(event); + } + if (touchPoint.type == TouchType::DOWN) { + for (const auto& enterNode : hoverNodes_) { + enterNode->OnMouseClickDownAnimation(); + } + } + if (touchPoint.type == TouchType::UP) { + for (const auto& enterNode : hoverNodes_) { + enterNode->OnMouseClickUpAnimation(); + } + } +} + +void PipelineContext::HandleMouseInputEvent(const MouseEvent& event) +{ + if (event.action == MouseAction::HOVER_EXIT) { + for (const auto& exitNode : hoverNodes_) { + exitNode->OnMouseHoverExitAnimation(); + } + } + if (event.action == MouseAction::PRESS) { + for (const auto& exitNode : hoverNodes_) { + exitNode->StopMouseHoverAnimation(); + } + } + if (event.action == MouseAction::HOVER_ENTER) { + for (const auto& enterNode : hoverNodes_) { + enterNode->OnMouseHoverEnterAnimation(); + } + } +} + +void PipelineContext::AddToHoverList(const RefPtr& node) +{ + int32_t nodeId = node->GetAccessibilityNodeId(); + if (nodeId == 0) { + return; + } + if (nodeId != hoverNodeId_) { + // Hover node changed to the next id. + hoverNodes_.clear(); + hoverNodes_.emplace_back(node); + hoverNodeId_ = nodeId; + } else { + // Hover node add to current hover list. + hoverNodes_.emplace_back(node); + } +} + +bool PipelineContext::OnRotationEvent(const RotationEvent& event) const +{ + if (!rootElement_) { + LOGE("the root element is nullptr"); + EventReport::SendAppStartException(AppStartExcepType::PIPELINE_CONTEXT_ERR); + return false; + } + + RefPtr stackElement = GetLastStack(); + if (!stackElement) { + LOGE("the stack element is nullptr"); + return false; + } + RefPtr stackRenderNode = stackElement->GetRenderNode(); + if (!stackRenderNode) { + LOGE("the stack render node is nullptr"); + return false; + } + + return eventManager_.DispatchRotationEvent(event, stackRenderNode, requestedRenderNode_.Upgrade()); +} + +void PipelineContext::SetCardViewPosition(int id, float offsetX, float offsetY) +{ + auto accessibilityManager = GetAccessibilityManager(); + if (!accessibilityManager) { + return; + } + accessibilityManager->SetCardViewPosition(id, offsetX, offsetY); +} + +void PipelineContext::SetCardViewAccessibilityParams(const std::string& key, bool focus) +{ + auto accessibilityManager = GetAccessibilityManager(); + if (!accessibilityManager) { + return; + } + accessibilityManager->SetCardViewParams(key, focus); +} + +void PipelineContext::OnVsyncEvent(uint64_t nanoTimestamp, uint32_t frameCount) +{ + ACE_FUNCTION_TRACE(); + +#if defined(ENABLE_NATIVE_VIEW) + if (frameCount_ < 2) { + frameCount_++; + } +#endif + + if (isSurfaceReady_) { + FlushAnimation(GetTimeFromExternalTimer()); + FlushPipelineWithoutAnimation(); + FlushAnimationTasks(); + hasIdleTasks_ = false; + } else { + LOGW("the surface is not ready, waiting"); + } + if (isMoving_) { + window_->RequestFrame(); + MarkForcedRefresh(); + isMoving_ = false; + } +} + +void PipelineContext::OnIdle(int64_t deadline) +{ + ACE_FUNCTION_TRACE(); + FlushPredictLayout(); + if (hasIdleTasks_) { + FlushPipelineImmediately(); + window_->RequestFrame(); + MarkForcedRefresh(); + hasIdleTasks_ = false; + } + FlushPageUpdateTasks(); + + auto front = GetFrontend(); + if (front && GetIsDeclarative() && scheduleTasks_.empty()) { + LOGD("Create GC task"); + GetTaskExecutor()->PostTask([front]() { front->TriggerGarbageCollection(); }, TaskExecutor::TaskType::JS); + } +} + +void PipelineContext::OnActionEvent(const std::string& action) +{ + if (actionEventHandler_) { + actionEventHandler_(action); + } else { + LOGE("the action event handler is null"); + } +} + +void PipelineContext::FlushPipelineImmediately() +{ + ACE_FUNCTION_TRACE(); + if (isSurfaceReady_) { + FlushPipelineWithoutAnimation(); + } else { + LOGW("the surface is not ready, waiting"); + } +} + +RefPtr PipelineContext::GetFrontend() const +{ + return weakFrontend_.Upgrade(); +} + +void PipelineContext::OnSurfaceChanged(int32_t width, int32_t height) +{ + if (width_ == width && height_ == height) { + return; + } + width_ = width; + height_ = height; + + ACE_SCOPED_TRACE("OnSurfaceChanged(%d, %d)", width, height); + + if (!NearZero(rootHeight_)) { + double newRootHeight = height / viewScale_; + double newRootWidth = width / viewScale_; + double offsetHeight = rootHeight_ - newRootHeight; + if (textFieldManager_) { + textFieldManager_->MovePage(GetLastStack(), { newRootWidth, newRootHeight }, offsetHeight); + } + } + GridSystemManager::GetInstance().OnSurfaceChanged(width); + + auto frontend = weakFrontend_.Upgrade(); + if (frontend) { + frontend->OnSurfaceChanged(width, height); + } + + // init transition clip size when surface changed. + const auto& pageElement = GetLastPage(); + if (pageElement) { + const auto& transitionElement = AceType::DynamicCast(pageElement->GetFirstChild()); + if (transitionElement) { + transitionElement->InitTransitionClip(); + } + } + + SetRootSizeWithWidthHeight(width, height); + if (isSurfaceReady_) { + return; + } + isSurfaceReady_ = true; + FlushPipelineWithoutAnimation(); + MarkForcedRefresh(); +#ifndef WEARABLE_PRODUCT + multiModalManager_->OpenChannel(Claim(this)); +#endif +} + +void PipelineContext::OnSurfaceDensityChanged(double density) +{ + ACE_SCOPED_TRACE("OnSurfaceDensityChanged(%lf)", density); + + density_ = density; + if (!NearZero(viewScale_)) { + dipScale_ = density_ / viewScale_; + } +} + +void PipelineContext::OnSystemBarHeightChanged(double statusBar, double navigationBar) +{ + ACE_SCOPED_TRACE("OnSystemBarHeightChanged(%lf, %lf)", statusBar, navigationBar); + double statusBarHeight = 0.0; + double navigationBarHeight = 0.0; + if (!NearZero(viewScale_) && !NearZero(dipScale_)) { + statusBarHeight = statusBar / viewScale_ / dipScale_; + navigationBarHeight = navigationBar / viewScale_ / dipScale_; + } + + if ((!NearEqual(statusBarHeight, statusBarHeight_)) || (!NearEqual(navigationBarHeight, navigationBarHeight_))) { + statusBarHeight_ = statusBarHeight; + navigationBarHeight_ = navigationBarHeight; + if (windowModal_ == WindowModal::SEMI_MODAL || windowModal_ == WindowModal::SEMI_MODAL_FULL_SCREEN) { + auto semiModal = AceType::DynamicCast(rootElement_->GetFirstChild()); + if (semiModal) { + semiModal->UpdateSystemBarHeight(statusBarHeight_, navigationBarHeight_); + } + } else if (windowModal_ == WindowModal::DIALOG_MODAL) { + auto dialogModal = AceType::DynamicCast(rootElement_->GetFirstChild()); + if (dialogModal) { + dialogModal->UpdateSystemBarHeight(statusBarHeight_, navigationBarHeight_); + } + } else { + // Normal modal, do nothing. + } + } +} + +void PipelineContext::OnSurfaceDestroyed() +{ + ACE_SCOPED_TRACE("OnSurfaceDestroyed"); + isSurfaceReady_ = false; +} + +double PipelineContext::NormalizeToPx(const Dimension& dimension) const +{ + if ((dimension.Unit() == DimensionUnit::VP) || (dimension.Unit() == DimensionUnit::FP)) { + return (dimension.Value() * dipScale_); + } + return dimension.Value(); +} + +void PipelineContext::SetRootSizeWithWidthHeight(int32_t width, int32_t height) +{ + auto frontend = weakFrontend_.Upgrade(); + if (!frontend) { + LOGE("the frontend is nullptr"); + EventReport::SendAppStartException(AppStartExcepType::PIPELINE_CONTEXT_ERR); + return; + } + const auto& windowConfig = frontend->GetWindowConfig(); + if (windowConfig.designWidth <= 0) { + LOGE("the frontend design width <= 0"); + return; + } + if (GetIsDeclarative()) { + viewScale_ = DEFAULT_VIEW_SCALE; + } else { + viewScale_ = windowConfig.autoDesignWidth ? density_ : static_cast(width) / windowConfig.designWidth; + if (NearZero(viewScale_)) { + LOGE("the view scale is zero"); + return; + } + } + dipScale_ = density_ / viewScale_; + rootHeight_ = height / viewScale_; + rootWidth_ = width / viewScale_; + SetRootRect(rootWidth_, rootHeight_); + GridSystemManager::GetInstance().SetWindowInfo(rootWidth_, density_, dipScale_); +} + +void PipelineContext::SetRootSize(double density, int32_t width, int32_t height) +{ + ACE_SCOPED_TRACE("SetRootSize(%lf, %d, %d)", density, width, height); + + density_ = density; + SetRootSizeWithWidthHeight(width, height); +} + +void PipelineContext::SetRootRect(double width, double height) const +{ + if (NearZero(viewScale_) || !rootElement_) { + LOGE("the view scale is zero or root element is nullptr"); + return; + } + const Rect paintRect(0.0, 0.0, width, height); + auto rootNode = AceType::DynamicCast(rootElement_->GetRenderNode()); + if (!rootNode) { + return; + } + if (!NearEqual(viewScale_, rootNode->GetScale()) || paintRect != rootNode->GetPaintRect()) { + if (!NearEqual(viewScale_, rootNode->GetScale())) { + rootNode->SetReset(true); + } + rootNode->SetPaintRect(paintRect); + rootNode->SetScale(viewScale_); + rootNode->MarkNeedLayout(); + rootNode->MarkNeedRender(); + focusAnimationManager_->SetAvailableRect(paintRect); + } +} + +void PipelineContext::Finish(bool autoFinish) const +{ + LOGD("finish current pipeline context, auto: %{public}d, root empty: %{public}d", autoFinish, !!rootElement_); + if (autoFinish && rootElement_ && onShow_) { + if (windowModal_ == WindowModal::SEMI_MODAL || windowModal_ == WindowModal::SEMI_MODAL_FULL_SCREEN) { + auto semiModal = AceType::DynamicCast(rootElement_->GetFirstChild()); + if (!semiModal) { + LOGE("SemiModal animate to exit app failed. semi modal is null"); + return; + } + semiModal->AnimateToExitApp(); + return; + } else if (windowModal_ == WindowModal::DIALOG_MODAL) { + // dialog modal use translucent theme and will do exit animation by ACE itself. + auto dialogModal = AceType::DynamicCast(rootElement_->GetFirstChild()); + if (!dialogModal) { + LOGE("DialogModal animate to exit app failed. dialog modal is null"); + return; + } + dialogModal->AnimateToExitApp(); + return; + } else { + // normal force finish. + Finish(false); + } + } else { + if (finishEventHandler_) { + finishEventHandler_(); + } else { + LOGE("fail to finish current context due to handler is nullptr"); + } + } +} + +void PipelineContext::RequestFullWindow(int32_t duration) +{ + LOGD("Request full window."); + if (!rootElement_) { + LOGE("Root element is null!"); + EventReport::SendAppStartException(AppStartExcepType::PIPELINE_CONTEXT_ERR); + return; + } + auto semiModal = AceType::DynamicCast(rootElement_->GetFirstChild()); + if (!semiModal) { + LOGI("Get semiModal element failed. SemiModal element is null!"); + return; + } + if (semiModal->IsFullWindow()) { + LOGI("Already in full window, skip it."); + return; + } + isFullWindow_ = true; + // when semi modal animating, no more full window request can be handled, so mark it as full window. + semiModal->SetFullWindow(true); + semiModal->AnimateToFullWindow(duration); + NotifyStatusBarBgColor(semiModal->GetBackgroundColor()); + auto page = GetLastStack(); + if (!page) { + return; + } + auto renderPage = AceType::DynamicCast(page->GetRenderNode()); + if (!renderPage) { + return; + } + // Change to full window, change page stack layout strategy. + renderPage->SetStackFit(StackFit::INHERIT); + renderPage->SetMainStackSize(MainStackSize::MAX); + renderPage->MarkNeedLayout(); +} + +void PipelineContext::NotifyStatusBarBgColor(const Color& color) const +{ + LOGD("Notify StatusBar BgColor, color: %{public}x", color.GetValue()); + if (statusBarBgColorEventHandler_) { + statusBarBgColorEventHandler_(color); + } else { + LOGE("fail to finish current context due to handler is nullptr"); + } +} + +void PipelineContext::NotifyPopupDismiss() const +{ + if (popupEventHandler_) { + popupEventHandler_(); + } +} + +void PipelineContext::NotifyRouterBackDismiss() const +{ + if (routerBackEventHandler_) { + routerBackEventHandler_(); + } +} + +void PipelineContext::ShowFocusAnimation( + const RRect& rrect, const Color& color, const Offset& offset, bool isIndented) const +{ + focusAnimationManager_->SetFocusAnimationProperties(rrect, color, offset, isIndented); +} + +void PipelineContext::ShowFocusAnimation( + const RRect& rrect, const Color& color, const Offset& offset, const Rect& clipRect) const +{ + focusAnimationManager_->SetFocusAnimationProperties(rrect, color, offset, clipRect); +} + +void PipelineContext::AddDirtyFocus(const RefPtr& node) +{ + if (!node) { + LOGW("node is null."); + return; + } + if (node->IsChild()) { + dirtyFocusNode_ = node; + } else { + dirtyFocusScope_ = node; + } + window_->RequestFrame(); +} + +void PipelineContext::CancelFocusAnimation() const +{ + focusAnimationManager_->CancelFocusAnimation(); +} + +void PipelineContext::PopFocusAnimation() const +{ + focusAnimationManager_->PopFocusAnimationElement(); +} + +void PipelineContext::PopRootFocusAnimation() const +{ + focusAnimationManager_->PopRootFocusAnimationElement(); +} + +void PipelineContext::PushFocusAnimation(const RefPtr& element) const +{ + focusAnimationManager_->PushFocusAnimationElement(element); +} + +void PipelineContext::ClearImageCache() +{ + if (imageCache_) { + imageCache_->Clear(); + } +} + +RefPtr PipelineContext::GetImageCache() const +{ + return imageCache_; +} + +void PipelineContext::Destroy() +{ + ClearImageCache(); + if (rootElement_) { + rootElement_.Reset(); + } + composedElementMap_.clear(); + dirtyElements_.clear(); + dirtyRenderNodes_.clear(); + dirtyRenderNodesInOverlay_.clear(); + dirtyLayoutNodes_.clear(); + predictLayoutNodes_.clear(); + dirtyFocusNode_.Reset(); + dirtyFocusScope_.Reset(); +} + +void PipelineContext::SendCallbackMessageToFrontend(const std::string& callbackId, const std::string& data) +{ + auto frontend = weakFrontend_.Upgrade(); + if (!frontend) { + LOGE("frontend is nullptr"); + EventReport::SendAppStartException(AppStartExcepType::PIPELINE_CONTEXT_ERR); + return; + } + frontend->SendCallbackMessage(callbackId, data); +} + +void PipelineContext::SendEventToFrontend(const EventMarker& eventMarker) +{ + auto frontend = weakFrontend_.Upgrade(); + if (!frontend) { + LOGE("frontend is nullptr"); + EventReport::SendAppStartException(AppStartExcepType::PIPELINE_CONTEXT_ERR); + return; + } + auto handler = frontend->GetEventHandler(); + if (!handler) { + LOGE("fail to trigger async event due to event handler is nullptr"); + EventReport::SendAppStartException(AppStartExcepType::PIPELINE_CONTEXT_ERR); + return; + } + handler->HandleAsyncEvent(eventMarker); +} + +void PipelineContext::SendEventToFrontend(const EventMarker& eventMarker, const std::string& param) +{ + auto frontend = weakFrontend_.Upgrade(); + if (!frontend) { + LOGE("frontend is nullptr"); + EventReport::SendAppStartException(AppStartExcepType::PIPELINE_CONTEXT_ERR); + return; + } + auto handler = frontend->GetEventHandler(); + if (!handler) { + LOGE("fail to trigger async event due to event handler is nullptr"); + EventReport::SendAppStartException(AppStartExcepType::PIPELINE_CONTEXT_ERR); + return; + } + handler->HandleAsyncEvent(eventMarker, param); +} + +bool PipelineContext::AccessibilityRequestFocus(const ComposeId& id) +{ + auto targetElement = GetComposedElementById(id); + if (!targetElement) { + LOGE("RequestFocusById targetElement is null."); + EventReport::SendAccessibilityException(AccessibilityExcepType::GET_NODE_ERR); + return false; + } + return RequestFocus(targetElement); +} + +bool PipelineContext::RequestFocus(const RefPtr& targetElement) +{ + if (!targetElement) { + return false; + } + auto children = targetElement->GetChildren(); + for (const auto& childElement : children) { + auto focusNode = AceType::DynamicCast(childElement); + if (focusNode) { + if (focusNode->RequestFocusImmediately()) { + return true; + } else { + continue; + } + } + if (RequestFocus(childElement)) { + return true; + } + } + return false; +} + +RefPtr PipelineContext::GetAccessibilityManager() const +{ + auto frontend = weakFrontend_.Upgrade(); + if (!frontend) { + LOGE("frontend is nullptr"); + EventReport::SendAppStartException(AppStartExcepType::PIPELINE_CONTEXT_ERR); + return nullptr; + } + return frontend->GetAccessibilityManager(); +} + +void PipelineContext::SendEventToAccessibility(const AccessibilityEvent& accessibilityEvent) +{ + auto accessibilityManager = GetAccessibilityManager(); + if (!accessibilityManager) { + return; + } + accessibilityManager->SendAccessibilityAsyncEvent(accessibilityEvent); +} + +RefPtr PipelineContext::GetRenderFocusAnimation() const +{ + return focusAnimationManager_->GetRenderFocusAnimation(); +} + +void PipelineContext::ShowShadow(const RRect& rrect, const Offset& offset) const +{ + focusAnimationManager_->SetShadowProperties(rrect, offset); +} + +void PipelineContext::ShowShadow(const RRect& rrect, const Offset& offset, const Rect& clipRect) const +{ + focusAnimationManager_->SetShadowProperties(rrect, offset, clipRect); +} + +void PipelineContext::PushShadow(const RefPtr& element) const +{ + focusAnimationManager_->PushShadow(element); +} + +void PipelineContext::PopShadow() const +{ + focusAnimationManager_->PopShadow(); +} + +void PipelineContext::CancelShadow() const +{ + focusAnimationManager_->CancelShadow(); +} + +void PipelineContext::SetUseRootAnimation(bool useRoot) +{ + focusAnimationManager_->SetUseRoot(useRoot); +} + +void PipelineContext::RegisterFont(const std::string& familyName, const std::string& familySrc) +{ + fontManager_->RegisterFont(familyName, familySrc, AceType::Claim(this)); +} + +void PipelineContext::CanLoadImage(const std::string& src, const std::map& callbacks) +{ + RenderImageProvider::CanLoadImage(AceType::Claim(this), src, callbacks); +} + +void PipelineContext::SetAnimationCallback(AnimationCallback&& callback) +{ + if (!callback) { + return; + } + animationCallback_ = std::move(callback); +} + +#ifndef WEARABLE_PRODUCT +void PipelineContext::SetMultimodalSubscriber(const RefPtr& multimodalSubscriber) +{ + multiModalManager_->SetMultimodalSubscriber(multimodalSubscriber); +} + +void PipelineContext::OnShow() +{ + onShow_ = true; + auto multiModalScene = multiModalManager_->GetCurrentMultiModalScene(); + if (multiModalScene) { + multiModalScene->Resume(); + } + if (rootElement_) { + const auto& renderRoot = AceType::DynamicCast(rootElement_->GetRenderNode()); + if (renderRoot) { + renderRoot->NotifyOnShow(); + } + } +} + +void PipelineContext::OnHide() +{ + NotifyPopupDismiss(); + onShow_ = false; + auto multiModalScene = multiModalManager_->GetCurrentMultiModalScene(); + if (multiModalScene) { + multiModalScene->Hide(); + } + if ((windowModal_ == WindowModal::SEMI_MODAL) || (windowModal_ == WindowModal::DIALOG_MODAL)) { + taskExecutor_->PostTask( + [weak = AceType::WeakClaim(this)]() { + auto context = weak.Upgrade(); + if (!context) { + return; + } + const auto& root = context->rootElement_; + if (!root) { + return; + } + const auto& render = AceType::DynamicCast(root->GetRenderNode()); + if (render) { + render->SetDefaultBgColor(); + } + }, + TaskExecutor::TaskType::UI); + } + if (rootElement_) { + const auto& renderRoot = AceType::DynamicCast(rootElement_->GetRenderNode()); + if (renderRoot) { + renderRoot->NotifyOnHide(); + } + } +} +#endif + +void PipelineContext::RefreshRootBgColor() const +{ + if (!rootElement_) { + return; + } + const auto& render = AceType::DynamicCast(rootElement_->GetRenderNode()); + if (render) { + render->SetDefaultBgColor(); + } +} + +void PipelineContext::SetOnPageShow(OnPageShowCallBack&& onPageShowCallBack) +{ + if (!onPageShowCallBack) { + LOGE("Set onShow callback failed, callback is null."); + return; + } + onPageShowCallBack_ = std::move(onPageShowCallBack); +} + +void PipelineContext::OnPageShow() +{ + if (onPageShowCallBack_) { + onPageShowCallBack_(); + } +} + +void PipelineContext::SetTimeProvider(TimeProvider&& timeProvider) +{ + if (!timeProvider) { + LOGE("Set time provider failed. provider is null."); + return; + } + timeProvider_ = std::move(timeProvider); +} + +uint64_t PipelineContext::GetTimeFromExternalTimer() +{ + if (isFlushingAnimation_) { + return flushAnimationTimestamp_; + } else { + if (!timeProvider_) { + LOGE("No time provider has been set."); + return 0; + } + return timeProvider_(); + } +} + +void PipelineContext::SetFontScale(float fontScale) +{ + if (!NearEqual(fontScale_, fontScale)) { + fontScale_ = fontScale; + fontManager_->RebuildFontNode(); + } +} + +void PipelineContext::UpdateFontWeightScale() +{ + if (fontManager_) { + fontManager_->UpdateFontWeightScale(); + } +} + +void PipelineContext::AddFontNode(const WeakPtr& node) +{ + if (fontManager_) { + fontManager_->AddFontNode(node); + } +} + +void PipelineContext::RemoveFontNode(const WeakPtr& node) +{ + if (fontManager_) { + fontManager_->RemoveFontNode(node); + } +} + +void PipelineContext::SetClickPosition(const Offset& position) const +{ + if (textFieldManager_) { + textFieldManager_->SetClickPosition(position); + } +} + +void PipelineContext::SetTextFieldManager(const RefPtr& manager) +{ + textFieldManager_ = manager; +} + +const RefPtr PipelineContext::GetOverlayElement() const +{ + if (!rootElement_) { + LOGE("Root element is null!"); + EventReport::SendAppStartException(AppStartExcepType::PIPELINE_CONTEXT_ERR); + return RefPtr(); + } + auto overlay = AceType::DynamicCast(rootElement_->GetOverlayElement(windowModal_)); + if (!overlay) { + LOGE("Get overlay element failed. overlay element is null!"); + return RefPtr(); + } + return overlay; +} + +void PipelineContext::FlushBuildAndLayoutBeforeSurfaceReady() +{ + if (isSurfaceReady_) { + return; + } + + GetTaskExecutor()->PostTask( + [weak = AceType::WeakClaim(this)]() { + auto context = weak.Upgrade(); + if (!context || context->isSurfaceReady_) { + return; + } + + context->FlushBuild(); + context->SetRootRect(context->rootWidth_, context->rootHeight_); + context->FlushLayout(); + }, + TaskExecutor::TaskType::UI); +} + +void PipelineContext::RootLostFocus() const +{ + rootElement_->LostFocus(); +} + +void PipelineContext::AddPageUpdateTask(std::function&& task, bool directExecute) +{ + pageUpdateTasks_.emplace(std::move(task)); + if (directExecute) { + FlushPageUpdateTasks(); + } else { + window_->RequestFrame(); + } +#if defined(ENABLE_NATIVE_VIEW) + if (frameCount_ == 1) { + OnIdle(0); + FlushPipelineImmediately(); + } +#endif +} + +void PipelineContext::MovePage(const Offset& rootRect, double offsetHeight) +{ + if (textFieldManager_) { + textFieldManager_->MovePage(GetLastStack(), rootRect, offsetHeight); + } +} + +RefPtr PipelineContext::GetDeactivateElement(int32_t componentId) const +{ + auto elementIter = deactivateElements_.find(componentId); + if (elementIter != deactivateElements_.end()) { + return elementIter->second; + } else { + return nullptr; + } +} + +void PipelineContext::AddDeactivateElement(const int32_t id, const RefPtr& element) +{ + deactivateElements_.emplace(id, element); +} + +void PipelineContext::ClearDeactivateElements() +{ + if (!deactivateElements_.empty()) { + deactivateElements_.erase(deactivateElements_.begin(), deactivateElements_.end()); + } +} + +void PipelineContext::DumpAccessibility(const std::vector& params) const +{ + auto accessibilityManager = GetAccessibilityManager(); + if (!accessibilityManager) { + return; + } + if (params.size() == 1) { + accessibilityManager->DumpTree(0, 0); + } else if (params.size() == 2) { + accessibilityManager->DumpProperty(params); + } else if (params.size() == 3) { + accessibilityManager->DumpHandleEvent(params); + } +} + +void PipelineContext::UpdateWindowBlurRegion( + int32_t id, RRect rRect, float progress, WindowBlurStyle style, const std::vector& coords) +{ + auto pos = windowBlurRegions_.find(id); + if (pos != windowBlurRegions_.end()) { + const auto& old = pos->second; + if (NearEqual(progress, old.progress_) && rRect.NearEqual(old.innerRect_) && style == old.style_) { + return; + } + } + windowBlurRegions_[id] = { .progress_ = progress, .style_ = style, .innerRect_ = rRect, .coords_ = coords }; + needWindowBlurRegionRefresh_ = true; +} + +void PipelineContext::ClearWindowBlurRegion(int32_t id) +{ + auto pos = windowBlurRegions_.find(id); + if (pos != windowBlurRegions_.end()) { + windowBlurRegions_.erase(pos); + needWindowBlurRegionRefresh_ = true; + } +} + +void PipelineContext::FlushWindowBlur() +{ + // js card not support window blur + if (IsJsCard()) { + return; + } + + if (!updateWindowBlurRegionHandler_) { + return; + } + + if (!rootElement_) { + LOGE("root element is null"); + return; + } + auto renderNode = rootElement_->GetRenderNode(); + if (!renderNode) { + LOGE("get renderNode failed"); + return; + } + + if (!windowBlurRegions_.empty()) { + renderNode->WindowBlurTest(); + } + + float scale = GetViewScale(); + if (needWindowBlurRegionRefresh_) { + std::vector> blurRectangles; + for (auto& region : windowBlurRegions_) { + std::vector rectArray; + // progress + rectArray.push_back(region.second.progress_); + // style + rectArray.push_back(static_cast(region.second.style_)); + for (auto item : region.second.coords_) { + item.ApplyScaleAndRound(scale); + const Rect& rect = item.GetRect(); + // rect + rectArray.push_back(static_cast(rect.Left())); + rectArray.push_back(static_cast(rect.Top())); + rectArray.push_back(static_cast(rect.Right())); + rectArray.push_back(static_cast(rect.Bottom())); + const Corner& radius = item.GetCorner(); + // roundX roundY + rectArray.push_back(static_cast(radius.topLeftRadius.GetX().Value())); + rectArray.push_back(static_cast(radius.topLeftRadius.GetY().Value())); + } + blurRectangles.push_back(rectArray); + } + updateWindowBlurRegionHandler_(blurRectangles); + needWindowBlurRegionRefresh_ = false; + } + if (updateWindowBlurDrawOpHandler_) { + updateWindowBlurDrawOpHandler_(); + } +} + +void PipelineContext::MakeThreadStuck(const std::vector& params) const +{ + int32_t time = StringUtils::StringToInt(params[2]); + if (time < 0 || (params[1] != JS_THREAD_NAME && params[1] != UI_THREAD_NAME)) { + DumpLog::GetInstance().Print("Params illegal, please check!"); + return; + } + DumpLog::GetInstance().Print(params[1] + " thread will stuck for " + params[2] + " seconds."); + if (params[1] == JS_THREAD_NAME) { + taskExecutor_->PostTask([time] { ThreadStuckTask(time); }, TaskExecutor::TaskType::JS); + } else { + taskExecutor_->PostTask([time] { ThreadStuckTask(time); }, TaskExecutor::TaskType::UI); + } +} + +void PipelineContext::DumpFrontend() const +{ + auto frontend = weakFrontend_.Upgrade(); + if (frontend) { + frontend->DumpFrontend(); + } +} + +void PipelineContext::DrawLastFrame() +{ + if (drawDelegate_) { + drawDelegate_->DrawLastFrame(Rect(0.0, 0.0, width_, height_)); + } +} + +void PipelineContext::SetIsKeyEvent(bool isKeyEvent) +{ + if (focusAnimationManager_) { + isKeyEvent_ = isKeyEvent; + focusAnimationManager_->SetIsKeyEvent(isKeyEvent_); + } +} + +void PipelineContext::NavigatePage(uint8_t type, const std::string& uri) +{ + auto frontend = weakFrontend_.Upgrade(); + if (!frontend) { + LOGE("frontend is nullptr"); + return; + } + frontend->NavigatePage(type, uri); +} + +bool PipelineContext::GetIsDeclarative() const +{ + RefPtr front = GetFrontend(); + if (front) { + return front->GetType() == FrontendType::DECLARATIVE_JS; + } + return false; +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/pipeline/pipeline_context.h b/frameworks/core/pipeline/pipeline_context.h new file mode 100644 index 00000000..5d88c485 --- /dev/null +++ b/frameworks/core/pipeline/pipeline_context.h @@ -0,0 +1,787 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_PIPELINE_CONTEXT_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_PIPELINE_CONTEXT_H + +#include +#include +#include +#include +#include +#include +#include + +#include "base/geometry/dimension.h" +#include "base/geometry/rect.h" +#include "base/memory/ace_type.h" +#include "base/resource/asset_manager.h" +#include "base/resource/shared_image_manager.h" +#include "base/thread/task_executor.h" +#include "base/utils/macros.h" +#include "base/utils/noncopyable.h" +#include "core/accessibility/accessibility_manager.h" +#include "core/animation/flush_event.h" +#include "core/animation/page_transition_listener.h" +#include "core/animation/schedule_task.h" +#include "core/common/draw_delegate.h" +#include "core/common/event_manager.h" +#include "core/common/focus_animation_manager.h" +#include "core/common/platform_bridge.h" +#include "core/common/platform_res_register.h" +#include "core/components/common/properties/color.h" +#include "core/components/page/page_component.h" +#include "core/components/theme/theme_manager.h" +#include "core/event/event_trigger.h" +#include "core/image/image_cache.h" +#include "core/pipeline/base/composed_component.h" +#include "core/pipeline/base/factories/render_factory.h" +#ifndef WEARABLE_PRODUCT +#include "core/event/multimodal/multimodal_manager.h" +#include "core/event/multimodal/multimodal_subscriber.h" +#endif + +namespace OHOS::Ace { + +class CardTransitionController; +class ComposedElement; +class FontManager; +class Frontend; +enum class FrontendType; +class OverlayElement; +class RenderNode; +class RenderFocusAnimation; +class RootElement; +class SharedTransitionController; +class StageElement; +class StackElement; +class Window; +class StageElement; +class Animator; +class ManagerInterface; +class AccessibilityManager; +struct DialogProperties; + +struct WindowBlurInfo { + float progress_; + WindowBlurStyle style_; + RRect innerRect_; + std::vector coords_; +}; + +class ACE_EXPORT PipelineContext final : public AceType { + DECLARE_ACE_TYPE(PipelineContext, AceType); + +public: + static constexpr int32_t DEFAULT_HOVER_ENTER_ANIMATION_ID = -1; + using TimeProvider = std::function; + using OnPageShowCallBack = std::function; + using AnimationCallback = std::function; + PipelineContext(std::unique_ptr window, RefPtr taskExecutor, + RefPtr assetManager, RefPtr platformResRegister, + const RefPtr& frontend, int32_t instanceId); + ~PipelineContext() override = default; + + RefPtr SetupRootElement(); + + bool ShowDialog(const DialogProperties& dialogProperties, bool isRightToLeft); + + void GetBoundingRectData(int32_t nodeId, Rect& rect); + + void PushPage(const RefPtr& pageComponent); + + bool CanPushPage(); + + void PopPage(); + + void PopToPage(int32_t pageId); + + bool CanPopPage(); + + void ReplacePage(const RefPtr& pageComponent); + + bool CanReplacePage(); + + bool ClearInvisiblePages(); + + bool CallRouterBackToPopPage(); + + void Dump(const std::vector& params) const; + + RefPtr GetLastStack() const; + + RefPtr GetLastPage() const; + + RefPtr GetLastPageRender() const; + + void ScheduleUpdate(const RefPtr& composed); + + void AddComposedElement(const ComposeId& id, const RefPtr& element); + + void RemoveComposedElement(const ComposeId& id, const RefPtr& element); + + void AddDirtyElement(const RefPtr& dirtyElement); + + void AddNeedRebuildFocusElement(const RefPtr& focusElement); + + void AddDirtyRenderNode(const RefPtr& renderNode, bool overlay = false); + + void AddDirtyLayoutNode(const RefPtr& renderNode); + + void AddPredictLayoutNode(const RefPtr& renderNode); + + void AddPreFlushListener(const RefPtr& listener); + + void AddPostFlushListener(const RefPtr& listener); + + void AddPageUpdateTask(std::function&& task, bool directExecute = false); + + void SetRequestedRotationNode(const WeakPtr& renderNode); + + void RemoveRequestedRotationNode(const WeakPtr& renderNode); + + // add schedule task and return the unique mark id. + uint32_t AddScheduleTask(const RefPtr& task); + + // remove schedule task by id. + void RemoveScheduleTask(uint32_t id); + + // Called by view when touch event received. + void OnTouchEvent(const TouchPoint& point); + + // Called by container when key event received. + // if return false, then this event needs platform to handle it. + bool OnKeyEvent(const KeyEvent& event); + + // Called by view when mouse event received. + void OnMouseEvent(const MouseEvent& event); + + // Called by container when rotation event received. + // if return false, then this event needs platform to handle it. + bool OnRotationEvent(const RotationEvent& event) const; + + // Called by window when received vsync signal. + void OnVsyncEvent(uint64_t nanoTimestamp, uint32_t frameCount); + + // Called by view when idle event. + void OnIdle(int64_t deadline); + + void OnActionEvent(const std::string& action); + + // Set card position for barrierfree + void SetCardViewPosition(int id, float offsetX, float offsetY); + + void SetCardViewAccessibilityParams(const std::string& key, bool focus); + + void FlushPipelineImmediately(); + + void RegisterEventHandler(const RefPtr& handler) + { + eventTrigger_.RegisterEventHandler(handler); + } + + template + void FireAsyncEvent(const EventMarker& marker, Args&&... args) + { + eventTrigger_.TriggerAsyncEvent(marker, std::forward(args)...); + } + + template + void FireSyncEvent(const EventMarker& marker, Args&&... args) + { + eventTrigger_.TriggerSyncEvent(marker, std::forward(args)...); + } + + void OnSurfaceChanged(int32_t width, int32_t height); + + void OnSurfaceDensityChanged(double density); + + void OnSystemBarHeightChanged(double statusBar, double navigationBar); + + void OnSurfaceDestroyed(); + + RefPtr GetFrontend() const; + + FrontendType GetFrontendType() const + { + return frontendType_; + } + + RefPtr GetTaskExecutor() const + { + return taskExecutor_; + } + + RefPtr GetAssetManager() const + { + return assetManager_; + } + + RefPtr GetPlatformResRegister() const + { + return platformResRegister_; + } + + Window* GetWindow() + { + return window_.get(); + } + + WindowModal GetWindowModal() const + { + return windowModal_; + } + + bool IsFullScreenModal() const + { + return windowModal_ == WindowModal::NORMAL || windowModal_ == WindowModal::SEMI_MODAL_FULL_SCREEN || + isFullWindow_; + } + + using FinishEventHandler = std::function; + void SetFinishEventHandler(FinishEventHandler&& listener) + { + finishEventHandler_ = std::move(listener); + } + + using ActionEventHandler = std::function; + void SetActionEventHandler(ActionEventHandler&& listener) + { + actionEventHandler_ = std::move(listener); + } + + // SemiModal and DialogModal have their own enter/exit animation and will exit after animation done. + void Finish(bool autoFinish = true) const; + + void RequestFullWindow(int32_t duration); + + using StatusBarEventHandler = std::function; + void SetStatusBarEventHandler(StatusBarEventHandler&& listener) + { + statusBarBgColorEventHandler_ = std::move(listener); + } + void NotifyStatusBarBgColor(const Color& color) const; + using PopupEventHandler = std::function; + + void SetPopupEventHandler(PopupEventHandler&& listener) + { + popupEventHandler_ = std::move(listener); + } + void NotifyPopupDismiss() const; + + using RouterBackEventHandler = std::function; + void SetRouterBackEventHandler(RouterBackEventHandler&& listener) + { + routerBackEventHandler_ = std::move(listener); + } + void NotifyRouterBackDismiss() const; + + float GetViewScale() const + { + return viewScale_; + } + + // Get the dp scale which used to covert dp to logic px. + double GetDipScale() const + { + return dipScale_; + } + + double GetRootHeight() const + { + return rootHeight_; + } + + double GetRootWidth() const + { + return rootWidth_; + } + + void SetRootHeight(double rootHeight) + { + if (rootHeight > 0.0) { + rootHeight_ = rootHeight; + } + } + + Rect GetRootRect() const; + Rect GetStageRect() const; + Rect GetPageRect() const; + + bool IsSurfaceReady() const + { + return isSurfaceReady_; + } + + void ClearImageCache(); + + RefPtr GetImageCache() const; + + double NormalizeToPx(const Dimension& dimension) const; + + void ShowFocusAnimation( + const RRect& rrect, const Color& color, const Offset& offset, bool isIndented = false) const; + + void ShowFocusAnimation(const RRect& rrect, const Color& color, const Offset& offset, const Rect& clipRect) const; + + void ShowShadow(const RRect& rrect, const Offset& offset) const; + + void ShowShadow(const RRect& rrect, const Offset& offset, const Rect& clipRect) const; + + RefPtr GetRenderFocusAnimation() const; + + void PushFocusAnimation(const RefPtr& element) const; + + void PushShadow(const RefPtr& element) const; + + void PopFocusAnimation() const; + + void PopRootFocusAnimation() const; + + void PopShadow() const; + + void CancelFocusAnimation() const; + + void CancelShadow() const; + + void SetUseRootAnimation(bool useRoot); + + void AddDirtyFocus(const RefPtr& node); + + void RefreshStageFocus(); + + RefPtr GetStageElement() const; + + RefPtr GetComposedElementById(const ComposeId& id); + + void SendCallbackMessageToFrontend(const std::string& callbackId, const std::string& data); + + void SendEventToFrontend(const EventMarker& eventMarker); + + void SendEventToFrontend(const EventMarker& eventMarker, const std::string& param); + + bool AccessibilityRequestFocus(const ComposeId& id); + + bool RequestFocus(const RefPtr& targetElement); + + RefPtr GetAccessibilityManager() const; + + void SendEventToAccessibility(const AccessibilityEvent& accessibilityEvent); + + BaseId::IdType AddPageTransitionListener(const PageTransitionListenable::CallbackFuncType& funcObject); + + const RefPtr GetOverlayElement() const; + + void RemovePageTransitionListener(typename BaseId::IdType id); + + void ClearPageTransitionListeners(); + + void Destroy(); + + const RefPtr& GetFontManager() const + { + return fontManager_; + } + + void RegisterFont(const std::string& familyName, const std::string& familySrc); + + void CanLoadImage(const std::string& src, const std::map& callbacks); + + void SetAnimationCallback(AnimationCallback&& callback); + + bool IsLastPage(); + + void SetRootSize(double density, int32_t width, int32_t height); + + RefPtr GetDeactivateElement(int32_t componentId) const; + + void ClearDeactivateElements(); + + void AddDeactivateElement(const int32_t id, const RefPtr& element); + + const RefPtr& GetRenderFactory() const + { + return renderFactory_; + } + +#ifndef WEARABLE_PRODUCT + void SetMultimodalSubscriber(const RefPtr& multimodalSubscriber); + + const RefPtr& GetMultiModalManager() const + { + return multiModalManager_; + } + + void OnShow(); + + void OnHide(); +#endif + + void MarkForcedRefresh() + { + needForcedRefresh_ = true; + } + + void SetTimeProvider(TimeProvider&& timeProvider); + + uint64_t GetTimeFromExternalTimer(); + + void SetFontScale(float fontScale); + + void AddFontNode(const WeakPtr& node); + + void RemoveFontNode(const WeakPtr& node); + + float GetFontScale() const + { + return fontScale_; + } + + void UpdateFontWeightScale(); + + const RefPtr& GetSharedTransitionController() const + { + return sharedTransitionController_; + } + + const RefPtr& GetCardTransitionController() const + { + return cardTransitionController_; + } + + void SetClickPosition(const Offset& position) const; + + void SetTextFieldManager(const RefPtr& manager); + + void RootLostFocus() const; + + void FlushFocus(); + + void SetIsRightToLeft(bool isRightToLeft) + { + isRightToLeft_ = isRightToLeft; + } + + bool IsRightToLeft() const + { + return isRightToLeft_; + } + + const RefPtr& GetMessageBridge() const + { + return messageBridge_; + } + void SetMessageBridge(const RefPtr& messageBridge) + { + messageBridge_ = messageBridge; + } + + void SetOnPageShow(OnPageShowCallBack&& onPageShowCallBack); + + void OnPageShow(); + + double GetStatusBarHeight() const + { + return statusBarHeight_; + } + + double GetNavigationBarHeight() const + { + return navigationBarHeight_; + } + + void SetWindowModal(WindowModal modal) + { + windowModal_ = modal; + } + + void SetModalHeight(int32_t height) + { + modalHeight_ = height; + } + + void SetModalColor(uint32_t color) + { + modalColor_ = color; + } + + void MovePage(const Offset& rootRect, double offsetHeight); + + void SetDrawDelegate(std::unique_ptr delegate) + { + drawDelegate_ = std::move(delegate); + } + + void SetBuildAfterCallback(const std::function& callback) + { + buildAfterCallback_.emplace_back(callback); + } + + RefPtr GetThemeManager() const + { + return themeManager_; + } + + void SetIsKeyEvent(bool isKeyEvent); + + bool IsKeyEvent() const + { + return isKeyEvent_; + } + + void SetIsJsCard(bool isJsCard) + { + isJsCard_ = isJsCard; + } + + bool IsJsCard() const + { + return isJsCard_; + } + + void RefreshRootBgColor() const; + void AddToHoverList(const RefPtr& node); + + using UpdateWindowBlurRegionHandler = std::function>&)>; + + void SetUpdateWindowBlurRegionHandler(UpdateWindowBlurRegionHandler handler) + { + updateWindowBlurRegionHandler_ = std::move(handler); + } + + void UpdateWindowBlurRegion( + int32_t id, RRect rRect, float progress, WindowBlurStyle style, const std::vector& coords); + + void ClearWindowBlurRegion(int32_t id); + + bool IsBuildingFirstPage() const + { + return buildingFirstPage_; + } + + void DrawLastFrame(); + + const RefPtr& GetSharedImageManager() const + { + return sharedImageManager_; + } + + void SetSharedImageManager(const RefPtr& sharedImageManager) + { + sharedImageManager_ = sharedImageManager; + } + + using UpdateWindowBlurDrawOpHandler = std::function; + + void SetUpdateWindowBlurDrawOpHandler(UpdateWindowBlurDrawOpHandler handler) + { + updateWindowBlurDrawOpHandler_ = std::move(handler); + } + + void NavigatePage(uint8_t type, const std::string& uri); + + int32_t GetInstanceId() const + { + return instanceId_; + } + + void SetUseLiteStyle(bool useLiteStyle) + { + useLiteStyle_ = useLiteStyle; + } + + bool UseLiteStyle() + { + return useLiteStyle_; + } + + const Rect& GetDirtyRect() const + { + return dirtyRect_; + } + + bool GetIsDeclarative() const; + + bool IsForbidePlatformQuit() const + { + return forbidePlatformQuit_; + } + + void SetForbidePlatformQuit(bool forbidePlatformQuit) + { + forbidePlatformQuit_ = forbidePlatformQuit; + } + + int32_t GetWindowId() const + { + return windowId_; + } + + void SetWindowId(int32_t windowId) + { + windowId_ = windowId; + } + +private: + void FlushPipelineWithoutAnimation(); + void FlushBuild(); + void FlushLayout(); + void FlushRender(); + void FlushPredictLayout(); + void FlushAnimation(uint64_t nanoTimestamp); + void FlushPageUpdateTasks(); + void ProcessPreFlush(); + void ProcessPostFlush(); + void SetRootSizeWithWidthHeight(int32_t width, int32_t height); + void SetRootRect(double width, double height) const; + void FlushBuildAndLayoutBeforeSurfaceReady(); + void FlushAnimationTasks(); + void DumpAccessibility(const std::vector& params) const; + void FlushWindowBlur(); + void MakeThreadStuck(const std::vector& params) const; + void DumpFrontend() const; + void HandleMouseInputEvent(const MouseEvent& event); + + template + struct NodeCompare { + bool operator()(const T& nodeLeft, const T& nodeRight) + { + if (nodeLeft->GetDepth() < nodeRight->GetDepth()) { + return true; + } else if (nodeLeft->GetDepth() == nodeRight->GetDepth()) { + return nodeLeft < nodeRight; + } + return false; + } + }; + + template + struct NodeCompareWeak { + bool operator()(const T& nodeLeftWeak, const T& nodeRightWeak) + { + auto nodeLeft = nodeLeftWeak.Upgrade(); + auto nodeRight = nodeRightWeak.Upgrade(); + if (!nodeLeft || !nodeRight) { + return false; + } + auto compare = NodeCompare(); + return compare(nodeLeft, nodeRight); + } + }; + + Rect dirtyRect_; + uint32_t nextScheduleTaskId_ = 0; + std::unordered_map> scheduleTasks_; + std::unordered_map>> composedElementMap_; + std::set, NodeCompareWeak>> dirtyElements_; + std::set, NodeCompareWeak>> needRebuildFocusElement_; + std::set, NodeCompare>> dirtyRenderNodes_; + std::set, NodeCompare>> dirtyRenderNodesInOverlay_; + std::set, NodeCompare>> dirtyLayoutNodes_; + std::set, NodeCompare>> predictLayoutNodes_; + std::list> postFlushListeners_; + std::list> preFlushListeners_; + std::unique_ptr window_; + RefPtr focusAnimationManager_; + RefPtr taskExecutor_; + RefPtr assetManager_; + RefPtr platformResRegister_; + RefPtr rootElement_; + RefPtr dirtyFocusNode_; + RefPtr dirtyFocusScope_; + WeakPtr weakFrontend_; + RefPtr imageCache_; + RefPtr fontManager_; + RefPtr themeManager_; + RefPtr sharedImageManager_; + std::list> buildAfterCallback_; + RefPtr renderFactory_; + UpdateWindowBlurRegionHandler updateWindowBlurRegionHandler_; + UpdateWindowBlurDrawOpHandler updateWindowBlurDrawOpHandler_; + +#ifndef WEARABLE_PRODUCT + RefPtr multiModalManager_ = MakeRefPtr(); +#endif + RefPtr sharedTransitionController_; + RefPtr cardTransitionController_; + EventManager eventManager_; + EventTrigger eventTrigger_; + FinishEventHandler finishEventHandler_; + ActionEventHandler actionEventHandler_; + StatusBarEventHandler statusBarBgColorEventHandler_; + PopupEventHandler popupEventHandler_; + RouterBackEventHandler routerBackEventHandler_; + RefPtr textFieldManager_; + RefPtr messageBridge_; + WeakPtr requestedRenderNode_; + // Make page update tasks pending here to avoid block receiving vsync. + std::queue> pageUpdateTasks_; + // strong deactivate element and it's id. + std::map> deactivateElements_; + + // animation frame callback + AnimationCallback animationCallback_; + + // window blur region + std::unordered_map windowBlurRegions_; + + bool isRightToLeft_ = false; + bool isSurfaceReady_ = false; + float viewScale_ = 1.0f; + float fontScale_ = 1.0f; + double density_ = 1.0; + double dipScale_ = 1.0; + double statusBarHeight_ = 0.0; // dp + double navigationBarHeight_ = 0.0; // dp + double rootHeight_ = 0.0; + double rootWidth_ = 0.0; + bool needForcedRefresh_ = false; + bool isFlushingAnimation_ = false; + bool hasIdleTasks_ = false; + bool isMoving_ = false; + bool onShow_ = true; + bool isKeyEvent_ = false; + bool needWindowBlurRegionRefresh_ = false; + bool isJsCard_ = false; + bool useLiteStyle_ = false; + uint64_t flushAnimationTimestamp_ = 0; + TimeProvider timeProvider_; + OnPageShowCallBack onPageShowCallBack_; + WindowModal windowModal_ = WindowModal::NORMAL; + int32_t modalHeight_ = 0; + int32_t hoverNodeId_ = DEFAULT_HOVER_ENTER_ANIMATION_ID; + uint32_t modalColor_ = 0x00000000; + bool isFullWindow_ = false; + std::list> hoverNodes_; + std::unique_ptr drawDelegate_; +#if defined(ENABLE_NATIVE_VIEW) + int32_t frameCount_ = 0; +#endif + + int32_t width_ = 0; + int32_t height_ = 0; + bool isFirstPage_ = true; + bool buildingFirstPage_ = false; + bool forbidePlatformQuit_ = false; + FrontendType frontendType_; + int32_t instanceId_ = 0; + int32_t windowId_ = 0; + + ACE_DISALLOW_COPY_AND_MOVE(PipelineContext); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_COMMON_PIPELINE_CONTEXT_H diff --git a/frameworks/core/pipeline/test/BUILD.gn b/frameworks/core/pipeline/test/BUILD.gn new file mode 100644 index 00000000..2db0b901 --- /dev/null +++ b/frameworks/core/pipeline/test/BUILD.gn @@ -0,0 +1,21 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") + +group("unittest") { + testonly = true + deps = [] + + deps += [ "unittest/context:unittest" ] +} diff --git a/frameworks/core/pipeline/test/unittest/context/BUILD.gn b/frameworks/core/pipeline/test/unittest/context/BUILD.gn new file mode 100644 index 00000000..9ce95612 --- /dev/null +++ b/frameworks/core/pipeline/test/unittest/context/BUILD.gn @@ -0,0 +1,198 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/test.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +module_output_path = "$ace_test_output_root/graphicalbasicability/pipeline" + +ohos_unittest("PipelineContextTest") { + module_out_path = module_output_path + + sources = [ + # test file + "//foundation/ace/ace_engine/frameworks/core/animation/anticipate_curve.cpp", + "//foundation/ace/ace_engine/frameworks/core/animation/cubic_curve.cpp", + "//foundation/ace/ace_engine/frameworks/core/animation/curves.cpp", + "//foundation/ace/ace_engine/frameworks/core/animation/friction_motion.cpp", + "//foundation/ace/ace_engine/frameworks/core/animation/scroll_motion.cpp", + + # animation + "//foundation/ace/ace_engine/frameworks/core/animation/animator.cpp", + "//foundation/ace/ace_engine/frameworks/core/animation/scheduler.cpp", + "//foundation/ace/ace_engine/frameworks/core/animation/spring_model.cpp", + "//foundation/ace/ace_engine/frameworks/core/animation/spring_motion.cpp", + + #base + "$ace_root/adapter/common/cpp/flutter_task_executor.cpp", + "$ace_root/adapter/common/cpp/thread_util.cpp", + "$ace_root/adapter/ohos/osal/log_wrapper.cpp", + "$ace_root/frameworks/base/geometry/matrix4.cpp", + "$ace_root/frameworks/base/log/dump_log.cpp", + "$ace_root/frameworks/base/thread/background_task_executor.cpp", + "$ace_root/frameworks/base/utils/base_id.cpp", + + # common + "//foundation/ace/ace_engine/frameworks/core/common/ace_engine.cpp", + "//foundation/ace/ace_engine/frameworks/core/common/event_manager.cpp", + "//foundation/ace/ace_engine/frameworks/core/common/focus_animation_manager.cpp", + "//foundation/ace/ace_engine/frameworks/core/common/font_manager.cpp", + "//foundation/ace/ace_engine/frameworks/core/common/vibrator/vibrator_proxy.cpp", + "//foundation/ace/ace_engine/frameworks/core/common/window.cpp", + "//foundation/ace/ace_engine/frameworks/core/pipeline/pipeline_context.cpp", + + # components + "//foundation/ace/ace_engine/frameworks/core/components/box/box_component.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/display/display_component.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/overlay/overlay_component.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/page/page_component.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/root/root_component.cpp", + "//foundation/ace/ace_engine/frameworks/core/pipeline/base/component.cpp", + "//foundation/ace/ace_engine/frameworks/core/pipeline/base/composed_component.cpp", + + # elements + "//foundation/ace/ace_engine/frameworks/core/components/bubble/bubble_element.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/display/display_element.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/flex/flex_element.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/page/page_element.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/page_transition/page_transition_element.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/root/root_element.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/stack/stack_element.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/stage/stage_element.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/transition/transition_element.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/tween/tween_element.cpp", + "//foundation/ace/ace_engine/frameworks/core/pipeline/base/component_group_element.cpp", + "//foundation/ace/ace_engine/frameworks/core/pipeline/base/composed_element.cpp", + "//foundation/ace/ace_engine/frameworks/core/pipeline/base/element.cpp", + "//foundation/ace/ace_engine/frameworks/core/pipeline/base/render_element.cpp", + "//foundation/ace/ace_engine/frameworks/core/pipeline/base/sole_child_element.cpp", + + # others + "$root_out_dir/ace/framework/core/components/theme/theme_constants_default.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/theme/app_theme.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/theme/theme_attributes.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/theme/theme_constants.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/theme/theme_manager.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/theme/theme_utils.cpp", + "//foundation/ace/ace_engine/frameworks/core/event/back_end_event_manager.cpp", + "//foundation/ace/ace_engine/frameworks/core/event/multimodal/multimodal_manager.cpp", + "//foundation/ace/ace_engine/frameworks/core/event/multimodal/multimodal_scene.cpp", + + # focus + "//foundation/ace/ace_engine/frameworks/core/focus/focus_node.cpp", + + # gestures + "//foundation/ace/ace_engine/frameworks/core/gestures/drag_recognizer.cpp", + "//foundation/ace/ace_engine/frameworks/core/gestures/gesture_recognizer.cpp", + "//foundation/ace/ace_engine/frameworks/core/gestures/gesture_referee.cpp", + "//foundation/ace/ace_engine/frameworks/core/gestures/raw_recognizer.cpp", + "//foundation/ace/ace_engine/frameworks/core/gestures/swipe_recognizer.cpp", + "//foundation/ace/ace_engine/frameworks/core/gestures/velocity_tracker.cpp", + + # image + "//foundation/ace/ace_engine/frameworks/core/image/flutter_image_cache.cpp", + "//foundation/ace/ace_engine/frameworks/core/image/image_cache.cpp", + + # layout + "//foundation/ace/ace_engine/frameworks/core/components/common/layout/grid_column_info.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/common/layout/grid_container_info.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/common/layout/grid_system_manager.cpp", + + # properties + "//foundation/ace/ace_engine/frameworks/core/components/common/properties/alignment.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/common/properties/border.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/common/properties/border_edge.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/common/properties/color.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/common/properties/decoration.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/common/properties/edge.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/common/properties/page_transition_option.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/common/properties/scroll_bar.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/common/properties/text_style.cpp", + + # rendering + "//foundation/ace/ace_engine/frameworks/core/components/box/render_box.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/box/render_box_base.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/bubble/render_bubble.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/display/render_display.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/focus_animation/render_focus_animation.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/proxy/render_proxy.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/refresh/render_refresh.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/root/render_root.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/scroll/render_multi_child_scroll.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/scroll/render_scroll.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/scroll/render_single_child_scroll.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/scroll/scroll_bar_controller.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/stack/render_stack.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/stage/render_stage.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/test/unittest/mock/mock_flutter_font_manager.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/test/unittest/mock/mock_render_node_factory.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/touch_listener/render_touch_listener.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/transform/render_transform.cpp", + "//foundation/ace/ace_engine/frameworks/core/pipeline/base/render_node.cpp", + "pipeline_context_test.cpp", + + #mock + "$ace_root/frameworks/core/components/test/unittest/mock/ace_trace_mock.cpp", + "$ace_root/frameworks/core/components/test/unittest/mock/event_report_mock.cpp", + "$ace_root/frameworks/core/mock/mock_ace_application_info.cpp", + "$ace_root/frameworks/core/mock/mock_system_properties.cpp", + "$ace_root/frameworks/core/mock/mock_watch_dog.cpp", + ] + + # add sources only needed by wearable like watch. + if (is_wearable_product) { + sources += [ "$root_out_dir/ace/framework/core/components/theme/theme_constants_watch.cpp" ] + } + + # add sources needed by phone and TV. wearable like watch do not need them + if (!is_wearable_product) { + sources += [ + # theme + "$root_out_dir/ace/framework/core/components/theme/theme_constants_tv.cpp", + ] + } + + configs = [ + "$ace_root:ace_test_config", + "$ace_root/frameworks/base:ace_base_config", + "$flutter_root:flutter_config", + ] + + deps = [ + "$ace_root/frameworks/base/resource:ace_resource", + "$ace_root/frameworks/core/components/theme:build_theme_code", + "$flutter_root:ace_libicu_ohos", + "$flutter_root:ace_skia_ohos", + "$flutter_root:third_party_flutter_engine_ohos", + "//third_party/googletest:gtest_main", + ] + + if (is_standard_system) { + configs += [ "//third_party/curl:curl_config" ] + deps += [ "//third_party/curl:curl" ] + external_deps = [ + "appexecfwk_standard:libeventhandler", + "hiviewdfx_hilog_native:libhilog", + "ipc:ipc_core", + ] + subsystem_name = "ace" + part_name = "ace_engine_standard" + } +} + +group("unittest") { + testonly = true + deps = [] + + deps += [ ":PipelineContextTest" ] +} diff --git a/frameworks/core/pipeline/test/unittest/context/pipeline_context_test.cpp b/frameworks/core/pipeline/test/unittest/context/pipeline_context_test.cpp new file mode 100644 index 00000000..87180d23 --- /dev/null +++ b/frameworks/core/pipeline/test/unittest/context/pipeline_context_test.cpp @@ -0,0 +1,428 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include "flutter/common/task_runners.h" +#include "flutter/fml/task_runner.h" + +#include "adapter/common/cpp/flutter_task_executor.h" +#include "adapter/ohos/osal/fake_task_executor.h" +#include "base/thread/task_executor.h" +#include "core/common/frontend.h" +#include "core/common/platform_window.h" +#include "core/common/window.h" +#include "core/components/box/box_component.h" +#include "core/components/test/unittest/mock/mock_render_depend.h" +#include "core/components/touch_listener/touch_listener_component.h" +#include "core/pipeline/pipeline_context.h" + +using namespace testing; +using namespace testing::ext; + +namespace OHOS::Ace { +namespace { + +constexpr int32_t TEST_LOGIC_WIDTH = 750; +constexpr int32_t CUSTOM_DESIGN_WIDTH = 800; +constexpr int32_t TEST_LOGIC_HEIGHT = 1300; +constexpr int32_t TEST_SURFACE_WIDTH = 1080; +constexpr int32_t TEST_SURFACE_HEIGHT = 1920; +constexpr double LOCATION_X = 900.0; +constexpr double LOCATION_Y = 500.0; +constexpr double LOGIC_LOCATION_X = LOCATION_X * TEST_LOGIC_WIDTH / TEST_SURFACE_WIDTH; +constexpr double LOGIC_LOCATION_Y = LOCATION_Y * TEST_LOGIC_WIDTH / TEST_SURFACE_WIDTH; +constexpr double TEST_DENSITY = 1.6; +constexpr double COMPARE_PRECISION = 0.001; +constexpr int32_t SURFACE_WIDTH = 1080; +constexpr int32_t SURFACE_HEIGHT = 2244; +uint64_t g_runningNano = 0; +const std::string LABEL = "task executor test"; +const std::string THREADFIRST = "thread_1"; +const std::string THREADSECOND = "thread_2"; +const std::string THREADTHIRD = "thread_3"; +const std::string THREADFOURTH = "thread_4"; + +RefPtr ConstructContext(const RefPtr& frontend) +{ + auto taskExecutor = Referenced::MakeRefPtr(); + auto platformWindow = PlatformWindow::Create(nullptr); + auto window = std::make_unique(std::move(platformWindow)); + auto context = AceType::MakeRefPtr(std::move(window), taskExecutor, nullptr, nullptr, frontend, 0); + context->SetupRootElement(); + return context; +} + +RefPtr ConstructContextForJs( + const RefPtr& frontend, const RefPtr& taskExecutor) +{ + auto platformWindow = PlatformWindow::Create(nullptr); + auto window = std::make_unique(std::move(platformWindow)); + auto context = AceType::MakeRefPtr(std::move(window), taskExecutor, nullptr, nullptr, frontend, 0); + context->SetupRootElement(); + return context; +} + +void TestTouchEventConvert(const RefPtr& context, double expectX, double expectY) +{ + // Create box and touch listener. + auto box = AceType::MakeRefPtr(); + box->SetWidth(TEST_LOGIC_WIDTH); + box->SetHeight(TEST_LOGIC_HEIGHT); + auto touchListener = AceType::MakeRefPtr(box); + auto marker = BackEndEventManager::GetInstance().GetAvailableMarker(); + Offset location; + auto callback = [&location](const TouchEventInfo& info) { + if (!info.GetTouches().empty()) { + location = info.GetTouches().front().GetGlobalLocation(); + } + }; + BackEndEventManager::GetInstance().BindBackendEvent(marker, callback); + touchListener->SetOnTouchDownId(marker); + auto page = AceType::MakeRefPtr(0, touchListener); + context->PushPage(page); + context->OnVsyncEvent(0, 0); + context->OnSurfaceDensityChanged(TEST_DENSITY); + context->OnSurfaceChanged(TEST_SURFACE_WIDTH, TEST_SURFACE_HEIGHT); + + // Mock touch down event + TouchPoint point { + .x = LOCATION_X, .y = LOCATION_Y, .type = TouchType::DOWN, .time = std::chrono::high_resolution_clock::now() + }; + context->OnTouchEvent(point); + ASSERT_TRUE(NearEqual(location.GetX(), expectX, COMPARE_PRECISION)); + ASSERT_TRUE(NearEqual(location.GetY(), expectY, COMPARE_PRECISION)); +} + +} // namespace + +class MockFrontend : public Frontend { +public: + MockFrontend() = default; + ~MockFrontend() override = default; + + bool Initialize(FrontendType type, const RefPtr& taskExecutor) override + { + return false; + } + + void AttachPipelineContext(const RefPtr& context) override {} + void SetAssetManager(const RefPtr& assetManager) override {} + + RefPtr GetPage(int32_t pageId) const override + { + return nullptr; + } + + RefPtr GetEventHandler() override + { + return nullptr; + } + + void DumpFrontend() const override {} + + const WindowConfig& GetWindowConfig() const override + { + return windowConfig_; + } + + void SetDesignWidth(double designWidth) + { + windowConfig_.designWidth = designWidth; + } + + void SetAutoDesignWidth(double autoDesignWidth) + { + windowConfig_.autoDesignWidth = autoDesignWidth; + } + + FrontendType GetType() override + { + return FrontendType::JS; + } + + void AddPage(const RefPtr& page) override {} + void RunPage(int32_t pageId, const std::string& content, const std::string& params) override {} + void PushPage(const std::string& content, const std::string& params) override {} + void UpdateState(State state) override {} + void SendCallbackMessage(const std::string& callbackId, const std::string& data) const override {} + void SetJsMessageDispatcher(const RefPtr& transfer) const override {} + void TransferComponentResponseData(int32_t callbackId, int32_t code, std::vector&& data) const override {} + void TransferJsResponseData(int32_t callbackId, int32_t code, std::vector&& data) const override {} + void TransferJsPluginGetError(int32_t callbackId, int32_t errorCode, std::string&& errorMessage) const override {} + void TransferJsEventData(int32_t callbackId, int32_t code, std::vector&& data) const override {} + void LoadPluginJsCode(std::string&& jsCode) const override {} + bool OnBackPressed() override + { + return false; + } + void OnShow() override {} + void OnHide() override {} + void OnActive() override {} + void OnInactive() override {} + bool OnStartContinuation() override + { + return false; + } + void OnCompleteContinuation(int32_t code) override {} + void OnSaveData(std::string& data) override {} + bool OnRestoreData(const std::string& data) override + { + return false; + } + void OnNewRequest(const std::string& data) override {} + void CallRouterBack() override {} + void OnSurfaceChanged(int32_t width, int32_t height) override {} + bool IsForeground() override + { + return false; + } + RefPtr GetAccessibilityManager() const override + { + return nullptr; + } + +private: + WindowConfig windowConfig_ { .designWidth = TEST_LOGIC_WIDTH, .autoDesignWidth = false }; +}; + +class PipelineContextTest : public testing::Test { +public: + static void SetUpTestCase(); + static void TearDownTestCase(); + void InitTaskExecutor(); + void SetUp() override; + void TearDown() override; + + RefPtr taskExecutor_; + std::string label_ = LABEL; + std::unique_ptr ThreadFirst_ = std::make_unique(THREADFIRST); + std::unique_ptr ThreadSecond_ = std::make_unique(THREADSECOND); + std::unique_ptr ThreadThird_ = std::make_unique(THREADTHIRD); + std::unique_ptr ThreadFourth_ = std::make_unique(THREADFOURTH); + fml::RefPtr platform_ = ThreadFirst_->GetTaskRunner(); + fml::RefPtr gpu_ = ThreadSecond_->GetTaskRunner(); + fml::RefPtr ui_ = ThreadThird_->GetTaskRunner(); + fml::RefPtr io_ = ThreadFourth_->GetTaskRunner(); +}; + +void PipelineContextTest::SetUpTestCase() {} + +void PipelineContextTest::TearDownTestCase() {} + +void PipelineContextTest::SetUp() +{ + InitTaskExecutor(); +} + +void PipelineContextTest::TearDown() {} + +void PipelineContextTest::InitTaskExecutor() +{ + std::promise promiseInit; + std::future futureInit = promiseInit.get_future(); + flutter::TaskRunners taskRunner(label_, platform_, gpu_, ui_, io_); + auto flutterTaskExecutor = Referenced::MakeRefPtr(); + + platform_->PostTask([&promiseInit, flutterTaskExecutor]() { + flutterTaskExecutor->InitPlatformThread(); + promiseInit.set_value(); + }); + + flutterTaskExecutor->InitJsThread(); + flutterTaskExecutor->InitOtherThreads(taskRunner); + futureInit.wait(); + + taskExecutor_ = flutterTaskExecutor; +} + +/** + * @tc.name: EventPixelConvert001 + * @tc.desc: Verify the logical pixel event conversion mechanism. + * @tc.type: FUNC + * @tc.require: AR000DACKI + * @tc.author: yanshuifeng + */ +HWTEST_F(PipelineContextTest, EventPixelConvert001, TestSize.Level1) +{ + /** + * @tc.steps: step1. create and initialize pipeline context. + */ + auto frontend = AceType::MakeRefPtr(); + auto context = ConstructContext(frontend); + + /** + * @tc.steps: step2. send touch down event. + * @tc.expected: step2. receive touch down callback and touch point result is right. + */ + TestTouchEventConvert(context, LOGIC_LOCATION_X, LOGIC_LOCATION_Y); +} + +/** + * @tc.name: RenderConvert001 + * @tc.desc: Verify the logical pixel rendering conversion mechanism. + * @tc.type: FUNC + * @tc.require: AR000DACKH + * @tc.author: huzeqi + */ +HWTEST_F(PipelineContextTest, RenderConvert001, TestSize.Level1) +{ + /** + * @tc.steps: step1. create and initialize pipeline context. + */ + auto frontend = AceType::MakeRefPtr(); + auto context = ConstructContext(frontend); + + /** + * @tc.steps: step2. input surface size and verify result. + */ + context->OnSurfaceDensityChanged(TEST_DENSITY); + context->OnSurfaceChanged(TEST_SURFACE_WIDTH, TEST_SURFACE_HEIGHT); + ASSERT_TRUE(NearEqual(context->GetDipScale(), TEST_DENSITY * TEST_LOGIC_WIDTH / TEST_SURFACE_WIDTH, 1)); +} + +/** + * @tc.name: DesignWidthScale001 + * @tc.desc: Design width can control render scale. + * @tc.type: FUNC + * @tc.require: AR000DSSAT + * @tc.author: liruokun + */ +HWTEST_F(PipelineContextTest, DesignWidthScale001, TestSize.Level1) +{ + /** + * @tc.steps: step1. create and initialize pipeline context. Set design width 750. + */ + auto frontend = AceType::MakeRefPtr(); + frontend->SetDesignWidth(CUSTOM_DESIGN_WIDTH); + auto context = ConstructContext(frontend); + + /** + * @tc.steps: step2. Call OnSurfaceDensityChanged and OnSurfaceChanged. + * @tc.expected: step2. Context has correct dip scale and view scale. + */ + context->OnSurfaceDensityChanged(TEST_DENSITY); + context->OnSurfaceChanged(TEST_SURFACE_WIDTH, TEST_SURFACE_HEIGHT); + ASSERT_TRUE(NearEqual(context->GetDipScale(), TEST_DENSITY * CUSTOM_DESIGN_WIDTH / TEST_SURFACE_WIDTH)); + ASSERT_TRUE(NearEqual( + context->GetViewScale(), static_cast(TEST_SURFACE_WIDTH) / static_cast(CUSTOM_DESIGN_WIDTH))); +} + +/** + * @tc.name: DesignWidthEventConvert001 + * @tc.desc: Design width can control event convert scale. + * @tc.type: FUNC + * @tc.require: AR000DSSAT + * @tc.author: liruokun + */ +HWTEST_F(PipelineContextTest, DesignWidthEventConvert001, TestSize.Level1) +{ + /** + * @tc.steps: step1. create and initialize pipeline context. Set design width 750. + */ + auto frontend = AceType::MakeRefPtr(); + frontend->SetDesignWidth(CUSTOM_DESIGN_WIDTH); + auto context = ConstructContext(frontend); + + /** + * @tc.steps: step2. Mock send touch down event. + * @tc.expected: step2. Receive touch down successfully and get correct touch position. + */ + double expectX = LOCATION_X * CUSTOM_DESIGN_WIDTH / TEST_SURFACE_WIDTH; + double expectY = LOCATION_Y * CUSTOM_DESIGN_WIDTH / TEST_SURFACE_WIDTH; + TestTouchEventConvert(context, expectX, expectY); +} + +/** + * @tc.name: AutoDesignWidthScale001 + * @tc.desc: Auto design width can control render scale. + * @tc.type: FUNC + * @tc.require: AR000DSSAT + * @tc.author: liruokun + */ +HWTEST_F(PipelineContextTest, AutoDesignWidthScale001, TestSize.Level1) +{ + /** + * @tc.steps: step1. create and initialize pipeline context. Set auto design width. + */ + auto frontend = AceType::MakeRefPtr(); + frontend->SetAutoDesignWidth(true); + auto context = ConstructContext(frontend); + + /** + * @tc.steps: step2. Call OnSurfaceDensityChanged and OnSurfaceChanged. + * @tc.expected: step2. Context has correct dip scale and view scale. + */ + context->OnSurfaceDensityChanged(TEST_DENSITY); + context->OnSurfaceChanged(TEST_SURFACE_WIDTH, TEST_SURFACE_HEIGHT); + ASSERT_TRUE(NearEqual(context->GetDipScale(), 1.0)); + ASSERT_TRUE(NearEqual(context->GetViewScale(), TEST_DENSITY)); +} + +/** + * @tc.name: AutoDesignWidthEventConvert001 + * @tc.desc: Auto design width can control event convert scale. + * @tc.type: FUNC + * @tc.require: AR000DSSAT + * @tc.author: liruokun + */ +HWTEST_F(PipelineContextTest, AutoDesignWidthEventConvert001, TestSize.Level1) +{ + /** + * @tc.steps: step1. create and initialize pipeline context. Set auto design width. + */ + auto frontend = AceType::MakeRefPtr(); + frontend->SetAutoDesignWidth(true); + auto context = ConstructContext(frontend); + + /** + * @tc.steps: step2. Mock send touch down event. + * @tc.expected: step2. Receive touch down successfully and get correct touch position. + */ + double expectX = LOCATION_X / TEST_DENSITY; + double expectY = LOCATION_Y / TEST_DENSITY; + TestTouchEventConvert(context, expectX, expectY); +} + +/** + * @tc.name: RequestAnimationFrame001 + * @tc.desc: Check to return the correct timestamp. + * @tc.type: FUNC + * @tc.require: AR000F3CAB + * @tc.author: chenlien + */ +HWTEST_F(PipelineContextTest, RequestAnimationFrame001, TestSize.Level1) +{ + /** + * @tc.steps: step1. create and initialize pipeline context. + */ + auto frontend = AceType::MakeRefPtr(); + auto context = ConstructContextForJs(frontend, taskExecutor_); + context->SetTimeProvider([] { return g_runningNano; }); + context->SetupRootElement(); + context->OnVsyncEvent(g_runningNano, 0); + context->OnSurfaceChanged(SURFACE_WIDTH, SURFACE_HEIGHT); + + /** + * @tc.steps: step2. Set timeStamp and mock vsync event. + * @tc.expected: step2. Callback successfully and get correct timeStamp. + */ + g_runningNano = 150000; + auto&& callback = [context]() { ASSERT_TRUE(g_runningNano == context->GetTimeFromExternalTimer()); }; + context->SetAnimationCallback(callback); + context->OnVsyncEvent(1, 0); +} + +} // namespace OHOS::Ace diff --git a/frameworks/core/pipeline/test/unittest/unittest_config.gni b/frameworks/core/pipeline/test/unittest/unittest_config.gni new file mode 100644 index 00000000..71fdf0e5 --- /dev/null +++ b/frameworks/core/pipeline/test/unittest/unittest_config.gni @@ -0,0 +1,71 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +pipeline_context_test_sources = [ + # common + # test file + "//foundation/ace/ace_engine/frameworks/core/common/ace_engine.cpp", + "//foundation/ace/ace_engine/frameworks/core/common/event_manager.cpp", + "//foundation/ace/ace_engine/frameworks/core/common/pipeline_context.cpp", + "//foundation/ace/ace_engine/frameworks/core/common/window.cpp", + + # components + "//foundation/ace/ace_engine/frameworks/core/components/base/composed_component.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/box/box_component.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/display/display_component.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/page/page_component.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/root/root_component.cpp", + + # elements + "//foundation/ace/ace_engine/frameworks/core/components/base/component_group_element.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/base/composed_element.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/base/element.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/base/render_element.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/base/sole_child_element.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/page/page_element.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/root/root_element.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/stage/stage_element.cpp", + + # others + "//foundation/ace/ace_engine/frameworks/core/event/back_end_event_manager.cpp", + "//foundation/ace/ace_engine/frameworks/core/event/multimodal/multimodal_manager.cpp", + "//foundation/ace/ace_engine/frameworks/core/event/multimodal/multimodal_scene.cpp", + + # focus + "//foundation/ace/ace_engine/frameworks/core/focus/focus_node.cpp", + "//foundation/ace/ace_engine/frameworks/core/gestures/drag_recognizer.cpp", + "//foundation/ace/ace_engine/frameworks/core/gestures/gesture_referee.cpp", + + # gestures + "//foundation/ace/ace_engine/frameworks/core/gestures/gesture_recognizer.cpp", + "//foundation/ace/ace_engine/frameworks/core/gestures/raw_recognizer.cpp", + "//foundation/ace/ace_engine/frameworks/core/gestures/swipe_recognizer.cpp", + + # properties + "//foundation/ace/ace_engine/frameworks/core/components/common/properties/alignment.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/common/properties/border.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/common/properties/color.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/common/properties/decoration.cpp", + + # rendering + "//foundation/ace/ace_engine/frameworks/core/components/base/render_node.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/box/render_box.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/box/render_box_base.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/display/render_display.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/proxy/render_proxy.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/root/render_root.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/stack/render_stack.cpp", + "//foundation/ace/ace_engine/frameworks/core/components/stage/render_stage.cpp", + "//foundation/ace/ace_engine/frameworks/core/rendering/common/render_touch_listener.cpp", + "pipeline_context_test.cpp", +] diff --git a/frameworks/core/theme/theme_manager.cpp b/frameworks/core/theme/theme_manager.cpp new file mode 100644 index 00000000..b0d4b8dc --- /dev/null +++ b/frameworks/core/theme/theme_manager.cpp @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "core/theme/theme_manager.h" + +#include "core/theme/theme_constants.h" + +namespace OHOS::Ace { + +ThemeManager::ThemeManager() {} + +ThemeManager& ThemeManager::GetInstance() +{ + static auto instance = new ThemeManager(); + return *instance; +} + +const RefPtr ThemeManager::GetTheme(const ComposeId&, ThemeType type) +{ + if (!globalTheme_) { + std::lock_guard lock(themeMutex_); + if (!globalTheme_) { + globalTheme_ = AppTheme::Builder().Build(); + } + } + if (type == AppTheme::TypeId()) { + return globalTheme_; + } + return globalTheme_->GetTheme(type); +} + +} // namespace OHOS::Ace \ No newline at end of file diff --git a/frameworks/core/theme/theme_manager.h b/frameworks/core/theme/theme_manager.h new file mode 100644 index 00000000..9045bdae --- /dev/null +++ b/frameworks/core/theme/theme_manager.h @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_ACE_FRAMEWORKS_CORE_THEME_THEME_MANAGER_H +#define FOUNDATION_ACE_FRAMEWORKS_CORE_THEME_THEME_MANAGER_H + +#include + +#include "base/memory/ace_type.h" +#include "core/pipeline/base/composed_component.h" +#include "core/theme/app_theme.h" +#include "core/theme/theme.h" + +namespace OHOS::Ace { + +class ACE_EXPORT ThemeManager final { +public: + ~ThemeManager() = default; + static ThemeManager& GetInstance(); + + const RefPtr GetTheme(const ComposeId& id, ThemeType type); + + template + RefPtr GetTheme(const ComposeId& id) + { + return AceType::DynamicCast(GetTheme(id, T::TypeId())); + } + +private: + ThemeManager(); + RefPtr globalTheme_; + std::mutex themeMutex_; + + ACE_DISALLOW_COPY_AND_MOVE(ThemeManager); +}; + +} // namespace OHOS::Ace + +#endif // FOUNDATION_ACE_FRAMEWORKS_CORE_THEME_THEME_MANAGER_H diff --git a/interfaces/kits/js/declaration/BUILD.gn b/interfaces/kits/js/declaration/BUILD.gn new file mode 100755 index 00000000..99fa5316 --- /dev/null +++ b/interfaces/kits/js/declaration/BUILD.gn @@ -0,0 +1,27 @@ +# Copyright (c) 2021 Huawei Device Co., Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import("//build/ohos/ace/ace.gni") +import("//foundation/ace/ace_engine/ace_config.gni") + +js_declaration("dts") { + part_name = "ace_engine" + sources = [ "./api" ] +} + +ohos_copy("ace_declaration") { + sources = [ "./api" ] + outputs = [ target_out_dir + "/$target_name/" ] + module_source_dir = target_out_dir + "/$target_name" + module_install_name = "" +} diff --git a/interfaces/kits/js/declaration/api/@internal/console.d.ts b/interfaces/kits/js/declaration/api/@internal/console.d.ts new file mode 100644 index 00000000..755f1694 --- /dev/null +++ b/interfaces/kits/js/declaration/api/@internal/console.d.ts @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + /** + * @devices tv, phone, tablet, wearable, liteWearable, smartVision + */ +export declare class console { + /** + * Prints "debug" logs. + * @param message Text to print. + * @devices tv, phone, tablet, wearable, liteWearable, smartVision + */ + static debug(message: string): void; + + /** + * Prints "log" logs. + * @param message Text to print. + * @devices tv, phone, tablet, wearable, liteWearable, smartVision + */ + static log(message: string): void; + + /** + * Prints "info" logs. + * @param message Text to print. + * @devices tv, phone, tablet, wearable, liteWearable, smartVision + */ + static info(message: string): void; + + /** + * Prints "warn" logs. + * @param message Text to print. + * @devices tv, phone, tablet, wearable, liteWearable, smartVision + */ + static warn(message: string): void; + + /** + * Prints "error" logs. + * @param message Text to print. + * @devices tv, phone, tablet, wearable, liteWearable, smartVision + */ + static error(message: string): void; +} diff --git a/interfaces/kits/js/declaration/api/@internal/featureability.d.ts b/interfaces/kits/js/declaration/api/@internal/featureability.d.ts new file mode 100644 index 00000000..288a8e0a --- /dev/null +++ b/interfaces/kits/js/declaration/api/@internal/featureability.d.ts @@ -0,0 +1,256 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @devices tv, phone, tablet, wearable + */ +export interface Result { + /** + * Result code. + * @devices tv, phone, tablet, wearable + */ + code: number; + + /** + * Returned data. + * @devices tv, phone, tablet, wearable + */ + data: object; +} + +/** + * @devices liteWearable + */ +export interface SubscribeMessageResponse { + /** + * Peer device ID. + * @devices liteWearable + */ + deviceId: string; + + /** + * Name of the bundle where the peer ability locates. The name is case sensitive. + * @devices liteWearable + */ + bundleName: string; + + /** + * Peer ability name, which is case sensitive. + * @devices liteWearable + */ + abilityName: string; + + /** + * Messages received from the device. + * @devices liteWearable + */ + message: string; +} + +/** + * @devices tv, phone, tablet, wearable + */ +export interface CallAbilityParam { + /** + * Name of the bundle where the ability locates. The name is case sensitive and must be the same as that on the AA side. + * @devices tv, phone, tablet, wearable + */ + bundleName: string; + /** + * Ability name, which is case sensitive and must be the same as that on the AA side. + * @devices tv, phone, tablet, wearable + */ + abilityName: string; + /** + * Ability operation code, which defines the service function of an AA and must be consistent with the AA side. + * @devices tv, phone, tablet, wearable + */ + messageCode: number; + /** + * Ability type. Different types of abilities have different implementation on the AA side. + * 0: Ability, which has an independent lifecycle. The FA starts and requests an AA through an RPC. Such type of abilities are used to provide basic services for multiple FAs to call or are used when the abilities should run in the background. + * 1: Internal ability, which shares the same process with the FA and communicates with it by calling internal functions. Such type of abilities are used in scenarios that require low response latency and cannot be called by other FAs. + * @devices tv, phone, tablet, wearable + */ + abilityType: number; + /** + * Data sent to the ability. The data to carry differs depending on the service to be processed and its field name must be consistent with the AA side. + * @devices tv, phone, tablet, wearable + */ + data?: object; + /** + * Whether the request is synchronous or asynchronous. The synchronous mode is used by default. Currently, the asynchronous mode is available only for internal abilities. + * 0: Synchronous mode (default value) + * 1: Asynchronous mode + * @devices tv, phone, tablet, wearable + */ + syncOption?: number; +} + +/** + * @devices tv, phone, tablet, wearable + */ +export interface SubscribeAbilityEventParam { + /** + * Name of the bundle where the ability locates. The name is case sensitive and must be the same as that on the AA side. + * @devices tv, phone, tablet, wearable + */ + bundleName: string; + /** + * Ability name, which is case sensitive and must be the same as that on the AA side. + * @devices tv, phone, tablet, wearable + */ + abilityName: string; + /** + * Ability operation code, which defines the service function of an AA and must be consistent with the AA side. + * @devices tv, phone, tablet, wearable + */ + messageCode: number; + /** + * Ability type. Different types of abilities have different implementation on the AA side. + * 0: Ability, which has an independent lifecycle. The FA starts and requests an AA through an RPC. Such type of abilities are used to provide basic services for multiple FAs to call or are used when the abilities should run in the background. + * 1: Internal ability, which shares the same process with the FA and communicates with it by calling internal functions. Such type of abilities are used in scenarios that require low response latency and cannot be called by other FAs. + * @devices tv, phone, tablet, wearable + */ + abilityType: number; + /** + * Whether the request is synchronous or asynchronous. The synchronous mode is used by default. Currently, the asynchronous mode is available only for internal abilities. + * 0: Synchronous mode (default value) + * 1: Asynchronous mode + * @devices tv, phone, tablet, wearable + */ + syncOption?: number; +} + +/** + * @devices liteWearable + */ +export interface SendMessageOptions { + /** + * Destination device ID. + * @devices liteWearable + */ + deviceId: string; + + /** + * Name of the destination bundle where the ability locates. The name is case sensitive. + * @devices liteWearable + */ + bundleName: string; + + /** + * Destination ability name, which is case sensitive. + * @devices liteWearable + */ + abilityName: string; + + /** + * Messages sent to the destination device. + * A maximum of 1 KB of data can be transmitted at a time. + * If more than 1 KB of data needs to be transmitted, split the messages into multiple parts to transmit. + * @devices liteWearable + */ + message?: string; + + /** + * Called when the messages are sent successfully. + * @devices liteWearable + */ + success?: () => void; + + /** + * Called when the messages fail to be sent. + * @devices liteWearable + */ + fail?: (data: string, code: number) => void; + + /** + * Called when the execution is completed. + * @devices liteWearable + */ + complete?: () => void; +} + +/** + * @devices liteWearable + */ +export interface SubscribeMessageOptions { + /** + * Called when the messages are sent successfully. + * @devices liteWearable + */ + success?: (data: SubscribeMessageResponse) => void; + + /** + * Called when the messages fail to be sent. + * @devices liteWearable + */ + fail?: (data: string, code: number) => void; +} + +/** + * @devices tv, phone, tablet, wearable, liteWearable + */ +export declare class FeatureAbility { + /** + * Calls an AA. + * @param param Indicates the request param. + * @returns A Promise object is returned, which contains the result data returned by the AA. The result is a JSON string. + * @devices tv, phone, tablet, wearable + */ + static callAbility(param: CallAbilityParam): Promise; + + /** + * Subscribes to events of an AA. + * @param param Indicates the request param. + * @param func Indicates the event reporting callback. + * @returns A Promise object is returned, which contains the result data returned by the AA. The result is a JSON string. + * @devices tv, phone, tablet, wearable + */ + static subscribeAbilityEvent( + param: SubscribeAbilityEventParam, + func: Function + ): Promise; + + /** + * Unsubscribes from events of an AA. + * @param param Indicates the request param. + * @returns A Promise object is returned, which contains the result data returned by the AA. The result is a JSON string. + * @devices tv, phone, tablet, wearable + */ + static unsubscribeAbilityEvent( + param: SubscribeAbilityEventParam + ): Promise; + + /** + * Sends messages to the destination device. + * @param options Options. + * @devices liteWearable + */ + static sendMsg(options: SendMessageOptions): void; + + /** + * Listens for messages sent from other devices. + * @param options Options. + * @devices liteWearable + */ + static subscribeMsg(options: SubscribeMessageOptions): void; + + /** + * Cancels the listening for messages sent from other devices. + * @devices liteWearable + */ + static unsubscribeMsg(): void; +} diff --git a/interfaces/kits/js/declaration/api/@internal/global.d.ts b/interfaces/kits/js/declaration/api/@internal/global.d.ts new file mode 100644 index 00000000..6cd60b5c --- /dev/null +++ b/interfaces/kits/js/declaration/api/@internal/global.d.ts @@ -0,0 +1,102 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Sets the interval for repeatedly calling a function. + * @param handler Indicates the function to be called after the timer goes off. For devices of "tv", "phone, tablet", and "wearable" types, this parameter can be a function or string. For devices of "lite wearable" and "smartVision" types, this parameter must be a function. + * @param delay Indicates the interval between each two calls, in milliseconds. The function will be called after this delay. + * @param arguments Indicates additional arguments to pass to "handler" when the timer goes off. + * @returns Returns the timer ID. + * @devices tv, phone, tablet, wearable + */ +export declare function setInterval(handler: Function | string, delay: number, ...arguments: any[]): number; + +/** + * Sets a timer after which a function will be executed. + * @param handler Indicates the function to be called after the timer goes off. For devices of "tv", "phone, tablet", and "wearable" types, this parameter can be a function or string. For devices of "lite wearable" and "smartVision" types, this parameter must be a function. + * @param delay Indicates the delay (in milliseconds) after which the function will be called. If this parameter is left empty, default value "0" will be used, which means that the function will be called immediately or as soon as possible. + * @param arguments Indicates additional arguments to pass to "handler" when the timer goes off. + * @returns Returns the timer ID. + * @devices tv, phone, tablet, wearable + */ +export declare function setTimeout(handler: Function | string, delay?: number, ...arguments: any[]): number; + +/** + * Cancels the interval set by "setInterval()". + * @param intervalID Indicates the timer ID returned by "setInterval()". + * @devices tv, phone, tablet, wearable, liteWearable, smartVision + */ +export declare function clearInterval(intervalID?: number): void; + +/** + * Cancels the timer set by "setTimeout()". + * @param timeoutID Indicates the timer ID returned by "setTimeout()". + * @devices tv, phone, tablet, wearable, liteWearable, smartVision + */ +export declare function clearTimeout(timeoutID?: number): void; + +/** + * You can create an Image object by calling new Image(). + * @devices tv, phone, tablet, wearable + */ +export declare class Image { + /** + * Network address or local resource. The internal URI is supported. + * @devices tv, phone, tablet, wearable + */ + src: string; + /** + * Image width. + * @devices tv, phone, tablet, wearable + */ + width?: number; + /** + * Image height. + * @devices tv, phone, tablet, wearable + */ + height?: number; + /** + * Called when an image is successfully loaded. This function has no parameter. + * @devices tv, phone, tablet, wearable + */ + onload?: () => void; + /** + * Called when an image fails to be loaded. This function has no parameter. + * @devices tv, phone, tablet, wearable + */ + onerror?: () => void; +} + +/** + * An ImageData object is a common object that stores the actual pixel data of a Canvas object. + * @devices tv, phone, tablet, wearable + */ +export declare class ImageData { + /** + * Actual width of the ImageData object, in pixels. + * @devices tv, phone, tablet, wearable + */ + width: number; + /** + * Actual height of the ImageData object, in pixels. + * @devices tv, phone, tablet, wearable + */ + height: number; + /** + * A one-dimensional array of color values. The color values are sorted in the RGBA order and represented by integers from 0 to 255. + * @devices tv, phone, tablet, wearable + */ + data: Uint8ClampedArray; +} diff --git a/interfaces/kits/js/declaration/api/@internal/index.d.ts b/interfaces/kits/js/declaration/api/@internal/index.d.ts new file mode 100644 index 00000000..3f158772 --- /dev/null +++ b/interfaces/kits/js/declaration/api/@internal/index.d.ts @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +export * from './viewmodel'; +export * from './featureability'; +export * from './console'; +export * from './global'; \ No newline at end of file diff --git a/interfaces/kits/js/declaration/api/@internal/viewmodel.d.ts b/interfaces/kits/js/declaration/api/@internal/viewmodel.d.ts new file mode 100644 index 00000000..a933358c --- /dev/null +++ b/interfaces/kits/js/declaration/api/@internal/viewmodel.d.ts @@ -0,0 +1,1430 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { Image, ImageData } from "./global"; + +/** + * @devices tv, phone, tablet, wearable + */ +export interface FocusParamObj { + /** + * @devices tv, phone, tablet, wearable + */ + focus: boolean; +} + +/** + * @devices tv, phone, tablet, wearable + */ +export interface AnimateStyle { + /** + * Width value applied to the component after the animation is executed. + * @devices tv, phone, tablet, wearable + */ + width: number; + /** + * Height value applied to the component after the animation is executed. + * @devices tv, phone, tablet, wearable + */ + height: number; + /** + * Background color applied to the component after the animation is executed. + * The default value is none. + * @devices tv, phone, tablet, wearable + */ + backgroundColor: string; + /** + * Opacity applied to the component. The value ranges from 0 to 1. + * The default value is 1. + * @devices tv, phone, tablet, wearable + */ + opacity: number; + /** + * The value format is "x y", in percentage or pixels. + * The first value indicates the horizontal position, and the second value indicates the vertical position. + * If only one value is specified, the other value is 50% by default. + * @devices tv, phone, tablet, wearable + */ + backgroundPosition: string; + /** + * Origin position of the transformed element. + * The first value indicates the x-axis position. The value can be left, center, right, a length, or percentage. + * The second value indicates the y-axis position. The value can be top, center, bottom, a length, or a percentage. + * @devices tv, phone, tablet, wearable + */ + transformOrigin: string; + /** + * Transformation type applied to an element. + * @devices tv, phone, tablet, wearable + */ + transform: object; + /** + * The value of offset must be within (0.0,1.0] and sorted in ascending order if it is provided. + * If there are only two frames, offset can be left empty. + * If there are more than two frames, offset is mandatory. + * @devices tv, phone, tablet, wearable + */ + offset?: number; +} + +/** + * @devices tv, phone, tablet, wearable + */ +export interface AnimateOptions { + /** + * Duration of the animation, in milliseconds. + * The default value is 0. + * @devices tv, phone, tablet, wearable + */ + duration: number; + + /** + * Time curve of the animation. For details about the supported types. + * linear The animation speed keeps unchanged. + * ease-in The animation starts at a low speed, cubic-bezier(0.42, 0.0, 1.0, 1.0). + * ease-out The animation ends at a low speed, cubic-bezier(0.0, 0.0, 0.58, 1.0). + * ease-in-out The animation starts and ends at a low speed, cubic-bezier(0.42, 0.0, 0.58, 1.0). + * fast-out-slow-in Standard curve, cubic-bezier(0.4, 0.0, 0.2, 1.0). + * linear-out-slow-in Deceleration curve, cubic-bezier(0.0, 0.0, 0.2, 1.0). + * fast-out-linear-in Acceleration curve, cubic-bezier(0.4, 0.0, 1.0, 1.0). + * friction Damping curve, cubic-bezier(0.2, 0.0, 0.2, 1.0). + * extreme-deceleration Extreme deceleration curve, cubic-bezier(0.0, 0.0, 0.0, 1.0). + * sharp Sharp curve, cubic-bezier(0.33, 0.0, 0.67, 1.0). + * rhythm Rhythm curve, cubic-bezier(0.7, 0.0, 0.2, 1.0). + * smooth Smooth curve, cubic-bezier(0.4, 0.0, 0.4, 1.0). + * cubic-bezier(x1, y1, x2, y2) You can customize an animation speed curve in the cubic-bezier() function. The x and y values of each input parameter must be between 0 and 1. + * Step curve. The number must be set and only an integer is supported, step-position is optional. It can be set to start or end. The default value is end. + * The default value is linear. + * @devices tv, phone, tablet, wearable + */ + easing: string; + /** + * Delay for the animation start. The default value indicates no delay. + * The default value is 0. + * @devices tv, phone, tablet, wearable + */ + delay: number; + + /** + * Number of times the animation will be played. number indicates a fixed number of playback operations, and Infinity indicates an unlimited number of playback operations. + * The default value is 1. + * @devices tv, phone, tablet, wearable + */ + iterations: number | string; + + /** + * Whether to resume to the initial state after the animation is executed. + * none: The initial state is restored after the animation is executed. + * forwards: The state at the end of the animation (defined in the last key frame) is retained after the animation is executed. + * @devices tv, phone, tablet, wearable + */ + fill: "none" | "forwards"; +} + +/** + * @devices tv, phone, tablet, wearable + */ +export interface AnimationResult { + /** + * Read-only attribute, which indicates whether the animation playback is complete. + * @devices tv, phone, tablet, wearable + */ + finished: boolean; + /** + * Read-only attribute, which indicates whether an animation is waiting for the completion of other asynchronous operations (for example, start an animation with a delay). + * @devices tv, phone, tablet, wearable + */ + pending: boolean; + /** + * Animation running state: + * idle: The animation is not running (playback ended or not started). + * running: The animation is running. + * paused: The animation is paused. + * finished: Animation playback ends. + * @devices tv, phone, tablet, wearable + */ + playstate: string; + /** + * Animation start time. This attribute is similar to that of delay in the options parameters. + * @devices tv, phone, tablet, wearable + */ + startTime: number; + /** + * Starts the animation. + * @devices tv, phone, tablet, wearable + */ + play(): void; + /** + * Ends the animation. + * @devices tv, phone, tablet, wearable + */ + finish(): void; + /** + * Pauses the animation. + * @devices tv, phone, tablet, wearable + */ + pause(): void; + /** + * Cancels the animation. + * @devices tv, phone, tablet, wearable + */ + cancel(): void; + /** + * Plays the animation in reverse direction. + * @devices tv, phone, tablet, wearable + */ + reverse(): void; + /** + * The animation is finished. + * @devices tv, phone, tablet, wearable + */ + onfinish: () => void; + /** + * Called when the animation is canceled. + * @devices tv, phone, tablet, wearable + */ + oncancel: () => void; +} + +/** + * @devices tv, phone, tablet, wearable + */ +export interface Element { + /** + * Requests or cancels the focus for a component. + * If focus is set to true, the focus is requested for the component. + * If focus is set to false, the focus is canceled for the component. + * This attribute can be defaulted to true. + * @param obj { focus: true | false } + * @devices tv, phone, tablet, wearable + */ + focus(obj?: FocusParamObj): void; + + /** + * Requests or cancels the crown rotation focus for a component. + * If focus is set to true, the crown event focus is requested. + * If focus is set to false, the crown event focus is canceled. + * This attribute can be defaulted to true. + * @param obj { focus: true | false } + * @devices tv, phone, tablet, wearable + */ + rotation(obj?: FocusParamObj): void; + + /** + * Creates and runs an animation shortcut on the component. Specify the keyframes and options required for the animation. + * @param keyframes keyframes is used to describe key frame parameters of the animation. + * @param options Options. is used to describe animation parameters. + * @returns This method returns the animation object. + * @devices tv, phone, tablet, wearable + */ + animate( + keyframes: Array, + options: AnimateOptions + ): AnimationResult; +} + +/** + * animation element + * @devices tv, phone, tablet, wearable + */ +export interface AnimationElement extends Element { + /** + * Starts the animation. + * @devices tv, phone, tablet, wearable + */ + play(): void; + /** + * Ends the animation. + * @devices tv, phone, tablet, wearable + */ + finish(): void; + /** + * Pauses the animation. + * @devices tv, phone, tablet, wearable + */ + pause(): void; + /** + * Cancels the animation. + * @devices tv, phone, tablet, wearable + */ + cancel(): void; + /** + * Plays the animation in reverse direction. + * @devices tv, phone, tablet, wearable + */ + reverse(): void; +} + +/** + * @devices tv + */ +export interface ListScrollByOptions { + /** + * Offset for scrolling the list in the horizontal direction, in px. + * @devices tv + */ + dx?: number; + + /** + * Offset for scrolling the list in the vertical direction, in px. + * @devices tv + */ + dy?: number; + + /** + * Whether a sliding animation is displayed when the list position is changed. + * @devices tv + */ + smooth?: boolean; +} + +/** + * @devices tv, phone, tablet, wearable + */ +export interface CurrentOffsetResultValue { + /** + * Scrolling offset in the x-axis, in px. + * @devices tv, phone, tablet, wearable + */ + x: number; + + /** + * Scrolling offset in the y-axis, in px. + * @devices tv, phone, tablet, wearable + */ + y: number; +} + +/** + * @devices tv, phone, tablet, wearable, liteWearable, smartVision + */ +export interface ListScrollToOptions { + /** + * specified position. + */ + index: number; +} + +/** + * The component provides a list container. + * @devices tv, phone, tablet, wearable + */ +export interface ListElement extends Element { + /** + * Scrolls the list to the position of the item at the specified index. + * @devices tv, phone, tablet, wearable, liteWearable, smartVision + */ + scrollTo(position: ListScrollToOptions): void; + + /** + * Scrolls the list for a certain distance. + * This method applies only to smart TVs. + * @devices tv + */ + scrollBy(data: ListScrollByOptions): void; + + /** + * If smooth is set to false (default value), the list is directly scrolled to the top. + * If smooth is set to true, the list is smoothly scrolled to the top. + * @param param + * @devices tv, phone, tablet, wearable + */ + scrollTop(param: { smooth: boolean }): void; + + /** + * If smooth is set to false (default value), the list is directly scrolled to the bottom. + * If smooth is set to true, the list is smoothly scrolled to the bottom. + * @param param + * @devices tv, phone, tablet, wearable + */ + scrollBottom(param: { smooth: boolean }): void; + + /** + * If reverse is set to false (default value), the next page is displayed. If there is no next page, the list scrolls to the bottom. + * If reverse is set to true, the previous page is displayed. If there is no previous page, the list scrolls to the top. + * If smooth is set to false (default value), the list is directly scrolled to another page. + * If smooth is set to true, the list is smoothly scrolled to another page. + * @param params + * @devices tv, phone, tablet, wearable + */ + scrollPage(params: { reverse: boolean; smooth: boolean }): void; + + /** + * If reverse is set to false (default value), the list scrolls towards the bottom for a certain distance. If there is no sufficient distance, the list scrolls to the bottom. + * If reverse is set to true, the list scrolls towards the top for a certain distance. If there is no sufficient distance, the list scrolls to the top. + * If smooth is set to false (default value), the list is directly scrolled. + * If smooth is set to true, the list is smoothly scrolled. + * @param params + * @devices tv, phone, tablet, wearable + */ + scrollArrow(params: { reverse: boolean; smooth: boolean }): void; + + /** + * Collapses a group. + * @param param + * @devices tv, phone, tablet, wearable + */ + collapseGroup(param: { + /** + * groupid: ID of the group to collapse. + * All groups are collapsed when groupid is not specified. + */ + groupid: string; + }): void; + + /** + * Expands a group. + * @param param + * @devices tv, phone, tablet, wearable + */ + expandGroup(param: { + /** + * groupid: ID of the group to expand. + * All groups are expanded when groupid is not specified. + */ + groupid: string; + }): void; + + /** + * Returns the offset of the current scrolling. The return value type is Object. + * @devices tv, phone, tablet, wearable + */ + currentOffset(): CurrentOffsetResultValue; +} + +/** + * The component provides a swiper container. + * @devices tv, phone, tablet, wearable + */ +export interface SwiperElement extends Element { + /** + * Scrolls the child component to the position at the specified index. + * @devices tv, phone, tablet, wearable + */ + swipeTo(position: { + /** + * specified position. + */ + index: number; + }): void; + + /** + * Shows the next child component. + * @devices tv, phone, tablet, wearable + */ + showNext(): void; + + /** + * Shows the previous child component. + * @devices tv, phone, tablet, wearable + */ + showPrevious(): void; +} + +/** + * The

component is a custom pop-up container. + * @devices tv, phone, tablet, wearable + */ +export interface DialogElement extends Element { + /** + * Shows a dialog box. + * @devices tv, phone, tablet, wearable + */ + show(): void; + /** + * Closes a dialog box. + * @devices tv, phone, tablet, wearable + */ + close(): void; +} + +/** + * The component is used to provide an image frame animator. + * @devices tv, phone, tablet, wearable + */ +export interface ImageAnimatorElement extends Element { + /** + * Starts to play the frame animation of an image. If this method is called again, the playback starts from the first frame. + * @devices tv, phone, tablet, wearable, liteWearable, smartVision + */ + start(): void; + /** + * Pauses the frame animation playback of an image. + * @devices tv, phone, tablet, wearable, liteWearable, smartVision + */ + pause(): void; + /** + * Stops the frame animation playback of an image. + * @devices tv, phone, tablet, wearable, liteWearable, smartVision + */ + stop(): void; + /** + * Resumes the frame animation playback of an image. + * @devices tv, phone, tablet, wearable, liteWearable, smartVision + */ + resume(): void; + /** + * Obtains the playback state. Available values are as follows: + * Playing + * Paused + * Stopped + * @devices tv, phone, tablet, wearable, liteWearable, smartVision + */ + getState(): "Playing" | "Paused" | "Stopped"; +} + +/** + * The component inserts scrolling text, which is displayed in a single line by default. + * When the text length exceeds the display area of the component, the marquee effect is displayed. + * @devices tv, phone, tablet, wearable + */ +export interface MarqueeElement extends Element { + /** + * Starts scrolling. + * @devices tv, phone, tablet, wearable + */ + start(): void; + + /** + * Stops scrolling. + * @devices tv, phone, tablet, wearable + */ + stop(): void; +} + +/** + * The component provides menus as temporary pop-up windows to display operations that can be performed by users. + * @devices tv, phone, tablet + */ +export interface MenuElement extends Element { + /** + * Displays the menu. + * x and y specify the position of the displayed menu. + * x indicates the X-axis coordinate from the left edge of the visible area, and does not include any scrolling offset. + * y indicates the Y-axis coordinate from the upper edge of the visible area, and does not include any scrolling offset or a status bar. + * The menu is preferentially displayed in the lower right corner. + * When the visible space on the right is insufficient, the menu is moved leftward. + * When the visible space in the lower part is insufficient, the menu is moved upward. + * @param position + * @devices tv, phone, tablet + */ + show(position: { x: number; y: number }): void; +} + +/** + * The component displays line charts, gauge charts, and bar charts. + * @devices tv, phone, tablet, wearable + */ +export interface ChartElement extends Element { + /** + * Data is dynamically added to an existing data sequence. + * The target sequence is specified based on serial, which is the subscript of the datasets array and starts from 0. + * datasets[index].data is not updated. Only line charts support this attribute. + * The value is incremented by 1 based on the horizontal coordinate and is related to the xAxis min/max setting. + * @devices tv, phone, tablet, wearable + */ + append(params: { + /** + * Sets the data subscript of the line chart to be updated. + */ + serial: number; + /** + * Sets the new data. + */ + data: Array; + }): void; +} + +/** + * The component provides an interactive interface to receive user input, which is displayed in a single line by default. + * @devices tv, phone, tablet, wearable + */ +export interface InputElement extends Element { + /** + * Obtains or loses the focus of a component. + * When the component type is set to text, email, date, time, number, or password, the input method can be displayed or collapsed. + * @param param If focus is not passed, the default value true is used. + * @devices tv, phone, tablet, wearable + */ + focus(param: { focus: boolean }): void; + + /** + * Displays the error message. + * This attribute is available when the component type is set to text, email, date, time, number, or password. + * @param param + * @devices tv, phone, tablet, wearable + */ + showError(param: { error: string }): void; +} + +/** + * The